commit 4d622c52919bccc75d4d62677e68871bf188a431 Author: Mario Voigt Date: Fri Jul 23 02:36:56 2021 +0200 . diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 00000000..c37e9c88 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: ['https://y.stadtfabrikanten.org/donate'] diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..9156c793 --- /dev/null +++ b/.gitignore @@ -0,0 +1,13 @@ +*.pyc +/.project +/.pydevproject +/.settings/org.eclipse.core.resources.prefs +*.out +extensions/.project +extensions/fablabchemnitz/animate_order/drawing.svg +extensions/fablabchemnitz/animate_order/animate_order.html +extensions/fablabchemnitz/path2flex/DebugPath2Flex.txt +extensions/fablabchemnitz/elliptical_cone_box/DebugEllConicBox.txt +extensions/.pydevproject +extensions/.settings/org.eclipse.core.resources.prefs +extensions/000_Inkscape_Gallery diff --git a/LICENSE b/LICENSE new file mode 100644 index 00000000..9cecc1d4 --- /dev/null +++ b/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + {one line to give the program's name and a brief idea of what it does.} + Copyright (C) {year} {name of author} + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + {project} Copyright (C) {year} {fullname} + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/README.md b/README.md new file mode 100644 index 00000000..145ec148 --- /dev/null +++ b/README.md @@ -0,0 +1,70 @@ +# MightyScape for Inkscape 1.0+ + +In short: A maintained extension collection for Inkscape 1.0+, working on Windows and Linux. There are **210 extension folders** with **372 .inx files** inside. We also take part at https://inkscape.org/gallery/=extension/ (with single extension uploads). + +# About MightyScape + +Looking to get more productive we started using some more special Inkscape extensions. We love Inkscape. And we love things like 3d printing, laser cutting, vinyl cutting, pen plotting, maths, physics, geometry, patterns, 2D drawings, 3D CAD , embroidery and more stuff. All this you can do with Inkscape! We recognized that there is no good source to pull extensions in a quick and clean way. Each developer puts his own code on his hidden/unknown repository and often without enough documentation or visible results for common understanding. Many plugins are completely unknown that way, and a lot of extensions are forked x times or are unmaintained. So many of them do not work with recent Inkscape or were never tested with newer versions so far. + +# What and why? + +This is a one-to-bundle-them-all collection of hundreds of additional functions to Inkscape (extensions) for the new Python 3 based version 1.X including documentation, made for makers and artists. All plugins where sorted into custom categories (to avoid overloading the standard extension menu of Inkscape). You can find most of them in sub menu "FabLab Chemnitz". We renamed and cleaned a lot of *.inx files and *.py files. We applied some function renamings, id changes (for preferences.xml clean-keeping), spelling fixes, formattings and parameter corrections. + +It took years to search and find all them on the web (so much different possible sources where to find!), to read, to comment (report issues), to fix problems, to test, to document and to provide them online. Many extensions were nearly lost in translation. + +At least this repo will help to bring alife some good things and will show hidden gold. It meshes things together in a fresh and bundled way - with ease of use and minimum installation stress. A lot of code is not at the optimum. A mass of bugs has to be fixed and different tools should be improved in usage generally. This package will show errors more quickly. So hopefully a lot of new code fixes is result from this package. Maybe some people help to make all the stuff compatible with Inkscape 1.0 and newer. + +# Credits / Help to develop + + * This is not a repository to steal the work of others. The credits go to each developer, maintainer, commiter, issue reporter and so on. + * All plugins are open source licensed and are fully compatible to be legally inside this repository. This plugin is a fully non-commercial project too + * All plugins were taken from each git repo's master branch (if git/svn available). There might exist some development branches, fork branches or issue comments which might resolve some issues or enhance functionality of provided plugins. To check for recent github forks use https://techgaun.github.io + * A lot of plugins were fixed by ourselves in countless hours + * If you find bugs or have ideas please push them directly to the corresponding root repository of the developer or put it to https://github.com/vmario89/mightyscape-1.X/issues + * Credits for creation of this big package: Mario Voigt / FabLab Chemnitz + +# Used software for development + + * Gitea and Github for hosting this + * GitEye and SourceTree git frontends for commiting + * LiClipse and NotePad++ for code + * regular Python installation (both Linux and Windows) + +# Requirements / Tested environment + + * tested with Inkscape + * Windows portable Version (Inkscape 1.2-dev (25cba68, 2021-05-16)) @ Windows 10 + * Linux dev trunk (https://inkscape.org/de/release/inkscape-master/gnulinux/ubuntu/ppa/dl/) @ Ubuntu 20 LTS + * tested using Python 3.8.5 64 Bit and 3.9.4 64 Bit + * some extensions require custom Python installation/modules. See documentation at our FabLab Chemnitz Wiki (see below). + * some extensions require additional commands, packages or other installers (see documentation too). + * the structure of this repo is intended the following way: all extensions which require exactly one *.py and one *.inx file are kept on the top level /mightyscape-1.X/extensions/fablabchemnitz. So just copy them to your Inkscape's extension directory. All extension which require additional libraries have their own sub directory. You will find redundancies in this repo like node.exe (NodeJS). We did it this way to give easy possibilty to only pick the extensions you want (instead creating ~200 repositories). + +# Remaining ToDos + + * clean code + * make more precise documentation with more examples + * check out command line handling of extension. This was totally ignored yet + +# Installation, documentation and examples + +MightyScape does not work with any releases or feature branches. Just use "git clone" to get the recent commit from master branch. + +Please see at https://y.stadtfabrikanten.org/mightyscape-overview for installation tips like required python modules, file locations and other adjustments. + +# Donate + + + +We are the Stadtfabrikanten, running the FabLab Chemnitz since 2016. A FabLab is an open workshop that gives people access to machines and digital tools like 3D printers, laser cutters and CNC milling machines. + +You like our work and want to support us? You can donate to our non-profit organization by different ways: +https://y.stadtfabrikanten.org/donate + +**Thanks for using our extension and helping us!** + +# Locations + +This repo has two remotes: +* https://gitea.fablabchemnitz.de/FabLab_Chemnitz/mightyscape-1.X (root repo origin) +* https://github.com/vmario89/mightyscape-1.X (repo for collaboration. You can create your issues here. Active since May 2021) diff --git a/extensions/fablabchemnitz/000_about_fablabchemnitz.svg b/extensions/fablabchemnitz/000_about_fablabchemnitz.svg new file mode 100644 index 00000000..df967f89 --- /dev/null +++ b/extensions/fablabchemnitz/000_about_fablabchemnitz.svg @@ -0,0 +1,110 @@ + + + + + + + diff --git a/extensions/fablabchemnitz/000_validate.sh b/extensions/fablabchemnitz/000_validate.sh new file mode 100755 index 00000000..7b8e0cf8 --- /dev/null +++ b/extensions/fablabchemnitz/000_validate.sh @@ -0,0 +1,63 @@ +#!/bin/bash +echo "Validating inx files with xmllint. Only errors are printed to console" +for folder in */ ; do xmllint --noout --relaxng ./inkscape.extension.rng $folder*.inx > /dev/null 2>> 000_xmllint.out; done; grep -v "validates\|warning: failed to load external entity" 000_xmllint.out; rm 000_xmllint.out + + +echo "Count of inx files:" +INX=$(find ./ -type f -name "*.inx" | wc -l) +echo INX: $INX + +echo "Count of extension folders:" +FOLDERS=$(ls -d */ | wc -l) +echo FOLDERS: $FOLDERS + +README="../../README.md" +#replace values in README.md +sed -i 's/\*\*.* extension folders\*\*/\*\*'${FOLDERS}' extension folders\*\*/g' ${README} +sed -i 's/\*\* with .* \.inx files\*\*/\*\* with \*\*'${INX}' \.inx files\*\*/g' ${README} + +echo "Removing unrequired pyc cache files" +find . -type d -name "__pycache__" -exec rm -rf {} \; + +read -p "Build local gallery extension zip files?" -n 1 -r +echo +if [[ $REPLY =~ ^[Yy]$ ]]; then + echo "Building Inkscape gallery extension zip files" + TARGETDIR="../000_Inkscape_Gallery" + mkdir -p $TARGETDIR > /dev/null + + #list of extensions which are uploaded at Inkscape gallery by us at the moment + for EXTENSION in \ + "animate_order" \ + "cleanup_styles" \ + "contour_scanner_and_trimmer" \ + "convert_to_polylines" \ + "create_links" \ + "dxf2papercraft" \ + "dxf_dwg_importer" \ + "imagetracerjs" \ + "inventory_sticker" \ + "move_path_node" \ + "remove_empty_groups" \ + "offset_paths" \ + "papercraft_unfold" \ + "paperfold" \ + "primitive" \ + "slic3r_stl_input" \ + "split_and_break_bezier_at_t" \ + "styles_to_layers" \ + "ungrouper_and_element_migrator_filter" \ + "unwind_paths" \ + "vpypetools" + do + EXTRA="" + if [[ $EXTENSION == "styles_to_layers" ]] || [[ $EXTENSION == "ungrouper_and_element_migrator_filter" ]]; then + EXTRA="${EXTRA} apply_transformations/" + elif [[ $EXTENSION == "styles_to_layers" ]] || [[ $EXTENSION == "ungrouper_and_element_migrator_filter" ]]; then + EXTRA="${EXTRA} remove_empty_groups/" + fi + ZIPFILE=$TARGETDIR/$EXTENSION.zip + rm $ZIPFILE > /dev/null + zip -r $ZIPFILE $EXTENSION/ 000_about_fablabchemnitz.svg $EXTRA + done +fi diff --git a/extensions/fablabchemnitz/about_upgrade_mightyscape/about_upgrade_mightyscape.inx b/extensions/fablabchemnitz/about_upgrade_mightyscape/about_upgrade_mightyscape.inx new file mode 100644 index 00000000..ea91f80a --- /dev/null +++ b/extensions/fablabchemnitz/about_upgrade_mightyscape/about_upgrade_mightyscape.inx @@ -0,0 +1,43 @@ + + + About/Upgrade MightyScape + fablabchemnitz.de.about_upgrade_mightyscape + + + false + false + + + + + + + + + + + + + + + + + + + + + + + ../000_about_fablabchemnitz.svg + + + + all + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/about_upgrade_mightyscape/about_upgrade_mightyscape.py b/extensions/fablabchemnitz/about_upgrade_mightyscape/about_upgrade_mightyscape.py new file mode 100644 index 00000000..45cc83c5 --- /dev/null +++ b/extensions/fablabchemnitz/about_upgrade_mightyscape/about_upgrade_mightyscape.py @@ -0,0 +1,160 @@ +#!/usr/bin/env python3 + +""" +Upgrade MightyScape from Inkscape Extension Dialog. Made for end users + +Extension for InkScape 1.X +Author: Mario Voigt / FabLab Chemnitz +Mail: mario.voigt@stadtfabrikanten.org +Date: 14.05.2021 +Last patch: 23.07.2021 +License: GNU GPL v3 + +ToDo + - enable stash option + - add while loop to list all remoteCommits by jumping from parent to parent + - add option to create/init .git repo from zip downloaded MightyScape version (to enable upgrader) if no .git dir was found +""" + +import inkex +import os +import warnings +from datetime import datetime +try: + import git + from git import Repo #requires GitPython lib +except: + inkex.utils.debug("Error. GitPython was not installed but is required to run the upgrade process!") + exit(1) + +class AboutUpgradeMightyScape(inkex.EffectExtension): + + def update(self, local_repo, remote): + try: + localCommit = local_repo.head.commit + remote_repo = git.remote.Remote(local_repo, 'origin') + remoteCommit = remote_repo.fetch()[0].commit + self.msg("Latest remote commit is: " + str(remoteCommit)[:7]) + + if localCommit.hexsha != remoteCommit.hexsha: + ssh_executable = 'git' + with local_repo.git.custom_environment(GIT_SSH=ssh_executable): + origin = local_repo.remotes.origin + origin.fetch() + + fetch_info = origin.pull() #finally pull new data + for info in fetch_info: #should return only one line in total + inkex.utils.debug("Updated %s to commit id %s" % (info.ref, str(info.commit)[:7])) + + inkex.utils.debug("Please restart Inkscape to let the changes take effect.") + + else: + inkex.utils.debug("Nothing to do! MightyScape is already up to date!") + + except git.exc.GitCommandError as e: + self.msg("Error: ") + self.msg(e) + return False + return True + + + def add_arguments(self, pars): + pars.add_argument("--tab") + pars.add_argument("--convert_to_git", type=inkex.Boolean, default=False, help="If you downloaded MightyScape as .zip or .tar.gz you cannot upgrade using this extension. But you can convert your downloaded directory to a .git one by enabling this option") + pars.add_argument("--stash_untracked", type=inkex.Boolean, default=False, help="Stash untracked files and continue to upgrade") + + + def effect(self): + warnings.simplefilter('ignore', ResourceWarning) #suppress "enable tracemalloc to get the object allocation traceback" + + #get the directory of mightyscape + extension_dir = os.path.abspath(os.path.join(os.path.abspath(os.path.dirname(__file__)), '../')) #go up to main dir /home//.config/inkscape/extensions/mightyscape-1.X/ + main_dir = os.path.abspath(os.path.join(extension_dir, '../../')) #go up to main dir /home//.config/inkscape/extensions/mightyscape-1.X/ + + #create some statistics + totalFolders = 0 + for root, folders, files in os.walk(extension_dir): + totalFolders += len(folders) + break #prevent descending into subfolders + + totalInx = 0 + for root, folders, files in os.walk(extension_dir): + for file in files: + if file.endswith('.inx'): + totalInx += 1 + + inkex.utils.debug("Locally there are {} extension folders with {} .inx files!\n".format(totalFolders, totalInx)) + + remotes = [] + remotes.append(["https://gitea.fablabchemnitz.de/FabLab_Chemnitz/mightyscape-1.X.git", "origin"]) #main + remotes.append(["https://github.com/vmario89/mightyscape-1.X.git", "github"]) #copy/second remote + + gitDir = os.path.join(main_dir, ".git") + if not os.path.exists(gitDir): + if self.options.convert_to_git is True: + local_repo = Repo.init(main_dir) + local_repo.git.add(all=True) + localRemotes = [] + for remote in remotes: + localRemotes.append(local_repo.create_remote(remote[1], url=remote[0])) + localRemotes[0].update() + local_repo.index.commit('.') + if self.options.stash_untracked is True: + local_repo.git.stash('save') + local_repo.git.checkout('origin/master') + #git init + #git add . + #git remote add origin https://gitea.fablabchemnitz.de/FabLab_Chemnitz/mightyscape-1.X.git + #git remote add github https://github.com/vmario89/mightyscape-1.X.git + #git remote update + #git commit -m "." + #git stash + #git checkout origin/master + else: + self.msg("MightyScape .git directory was not found. It seems you installed MightyScape the traditional way (by downloading and extracting from archive). Please install MightyScape using the git clone method if you want to use the upgrade function. More details can be found in the official README.") + exit(1) + + local_repo = Repo(gitDir) + #check if it is a non-empty git repository + if local_repo.bare is False: + if local_repo.is_dirty(untracked_files=True) is False: + if len(local_repo.untracked_files) > 0: + if self.options.stash_untracked is True: + local_repo.git.stash('save') + else: + inkex.utils.debug("There are some untracked files in your MightyScape directory. Still trying to pull recent files from git...") + + localLatestCommit = local_repo.head.commit + localCommits = list(local_repo.iter_commits("origin/master", max_count=10, skip=0)) + self.msg("Local commit id is: " + str(localLatestCommit)[:7]) + self.msg("There are {} local commits at the moment.".format(len(localCommits))) + localCommitList = [] + for localCommit in localCommits: + localCommitList.append(localCommit) + #localCommitList.reverse() + self.msg("*"*40) + self.msg("Latest local commits are:") + for i in range(0, len(localCommits)): + self.msg("{} | {} : {}".format( + datetime.utcfromtimestamp(localCommitList[i].committed_date).strftime('%Y-%m-%d %H:%M:%S'), + localCommitList[i].name_rev[:7], + localCommitList[i].message.strip()) + ) + #self.msg(" - {}: {}".format(localCommitList[i].newhexsha[:7], localCommitList[i].message)) + self.msg("*"*40) + + #finally run the update + success = self.update(local_repo, remotes[0][0]) + if success is False: #try the second remote if first failed + self.msg("Error receiving latest remote commit from main git remote {}. Trying second remote ...".format(remotes[0][0])) + success = self.update(local_repo, remotes[1][0]) + if success is False: #if still false: + self.msg("Error receiving latest remote commit from second git remote {}.\nAre you offline? Cannot continue!".format(remotes[0][0])) + exit(1) + + else: + inkex.utils.debug("No \".git\" directory found. Seems your MightyScape was not installed with git clone. Please see documentation on how to do that.") + exit(1) + +if __name__ == '__main__': + AboutUpgradeMightyScape().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/affine_spirals/affine_spirals.inx b/extensions/fablabchemnitz/affine_spirals/affine_spirals.inx new file mode 100644 index 00000000..5b92ba53 --- /dev/null +++ b/extensions/fablabchemnitz/affine_spirals/affine_spirals.inx @@ -0,0 +1,23 @@ + + + Affine Spirals + fablabchemnitz.de.affine_spirals + + + 3 + 2 + 0.8 + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/affine_spirals/affine_spirals.py b/extensions/fablabchemnitz/affine_spirals/affine_spirals.py new file mode 100644 index 00000000..e7fcd7ed --- /dev/null +++ b/extensions/fablabchemnitz/affine_spirals/affine_spirals.py @@ -0,0 +1,96 @@ +#!/usr/bin/env python3 + +import inkex +from lxml import etree +from math import cos, sin, pi, exp +__version__ = '0.1' + +def line(npts=40, x0=0, y0=0, delta=.5, sgn=1): + #returns a list of points on a line (y = +/- x + c) starting at x0,y0 + return [ (x0 + delta*t, y0 + sgn*delta*t) for t in range(npts)] + +def ff(v, ww=.25, ds=.4): + #covering map from R^2 ro punctured plane + x,y = v + r,u = exp(-ds*x), cos(pi*ww*y) + 1J*sin(pi*ww*y) + return r*u + +def mk_plugs(pts): + #returns a list of complex representing a plug type segment + segs = [fit_plug(end_pts) for end_pts in zip(pts,pts[1:]) ] + tmp = [] + for seg in segs: + tmp.extend(seg) + return tmp + +def fit_plug(ss): + a,b = ss + rot = complex(b-a) + pts = [0,.45,.4 + .15*1J, .6 + .15*1J, .55, 1] + return [rot*z + a for z in pts] + +def pts2curve(cplxs): + '''makes a polyline path element from a list of complex + ''' + def cplx2pt(z): + return (z.real,z.imag) + + scale = 200 + data = [cplx2pt( scale*z ) for z in cplxs ] + pth = [ '%.2f, %.2f '%z for z in data] + return 'M '+ ''.join(pth) + +class AffineSpirals(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument("--num_lines", type=int, default=3) + pars.add_argument("--num_petals", type=int, default=3) + pars.add_argument("--shrink_ratio", type=float, default=3) + pars.add_argument("--active-tab", default='title') + + def calc_unit_factor(self): + unit_factor = self.svg.unittouu(str(1.0) + self.options.units) + return unit_factor + + def effect(self): + path_stroke = '#DD0000' # take color from tab3 + path_fill = 'none' # no fill - just a line + path_stroke_width = 1. # can also be in form '0.6mm' + page_id = self.options.active_tab # sometimes wrong the very first time + + styles = [ {'stroke': path_stroke , 'fill': 'none', 'stroke-width': path_stroke_width}, + {'stroke': 'none', 'fill': '#FFFF00', 'stroke-width': 0}] + + styles = [str(inkex.Style(x)) for x in styles] + + # This finds center of current view in inkscape + t = 'translate(%s,%s)' % (self.svg.namedview.center[0], self.svg.namedview.center[1]) + + # Make a nice useful name + g_attribs = {inkex.addNS('label','inkscape'): 'koch', + inkex.addNS('transform-center-x','inkscape'): str(0), + inkex.addNS('transform-center-y','inkscape'): str(0), + 'transform': t, + 'style' : styles[1], + 'info':'N: '+str(self.options.num_lines) } + topgroup = etree.SubElement(self.svg.get_current_layer(), 'g', g_attribs) + + NN = 2*self.options.num_lines + NP = self.options.num_petals + SF = 2*self.options.shrink_ratio + + payload = [] + for y in range(-NP,NP): + mpts = [ff(z,ww=1./NP, ds=SF) for z in line(npts=NN, y0=y)] + payload.append(mk_plugs(mpts)) + mpts = [ff(z,ww=1./NP, ds=SF) for z in line(npts=NN, y0=y,sgn=-1 )] + payload.append(mk_plugs(mpts)) + + payload = [pts2curve(cc) for cc in payload] + payload = ' '.join(payload) + + curve_attribs = { 'style': styles[0], 'd': payload} + etree.SubElement(topgroup, inkex.addNS('path','svg'), curve_attribs) + +if __name__ == '__main__': + AffineSpirals().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/ai_compatible_eps_output/ai_compatible_eps_output.inx b/extensions/fablabchemnitz/ai_compatible_eps_output/ai_compatible_eps_output.inx new file mode 100644 index 00000000..07a59481 --- /dev/null +++ b/extensions/fablabchemnitz/ai_compatible_eps_output/ai_compatible_eps_output.inx @@ -0,0 +1,14 @@ + + + AI compatible EPS output + fablabchemnitz.de.ai_compatible_eps_output + + .eps + application/eps + Encapsulated PostScript - AI compatible (*.eps) + Adobe Illustrator 7 compatible EPS + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/ai_compatible_eps_output/ai_compatible_eps_output.py b/extensions/fablabchemnitz/ai_compatible_eps_output/ai_compatible_eps_output.py new file mode 100644 index 00000000..e1ccbc89 --- /dev/null +++ b/extensions/fablabchemnitz/ai_compatible_eps_output/ai_compatible_eps_output.py @@ -0,0 +1,1183 @@ +#!/usr/bin/env python +""" +Mainly written by Andras Prim github_at_primandras.hu + +Arc to bezier converting method is ported from: +http://code.google.com/p/core-framework/source/browse/trunk/plugins/svg.js +written by Angel Kostadinov, with MIT license +""" + +try: + from lxml import etree as ET +except Exception: + import xml.etree.ElementTree as ET + +import re +import math + +def wrap(text, width): + """ A word-wrap function that preserves existing line breaks """ + retstr = "" + for word in text.split(' '): + if len(retstr)-retstr.rfind('\n')-1 + len(word.split('\n',1)[0]) >= width: + retstr += ' \n' + word + else: + retstr += ' ' + word + return retstr + +def css2dict(css): + """returns a dictionary representing the given css string""" + cssdict = {} + if None == css: + return cssdict + for pair in css.split(';'): #TODO: what about escaped separators + if pair.find(':') >= 0: + key, value = pair.split(':') + cssdict[ key.strip() ] = value.strip() + return cssdict + +def cssColor2Eps(cssColor, colors='RGB'): + """converts css color definition (a hexa code with leading # or 'rgb()') + to eps color definition""" + if '#' == cssColor[0]: + r = float(int(cssColor[1:3],16)) / 255 + g = float(int(cssColor[3:5],16)) / 255 + b = float(int(cssColor[5:7],16)) / 255 + else: + # assume 'rgb()' color + rgb = re.sub('[^0-9]+', ' ', cssColor).strip().split() + r = float(int(rgb[0], 10)) / 255 + g = float(int(rgb[1], 10)) / 255 + b = float(int(rgb[2], 10)) / 255 + + if colors == 'RGB': + return "%f %f %f" % (r, g, b) + elif colors == 'CMYKRGB': + if (r == 0) and (g == 0) and (b == 0): + c = 0 + m = 0 + y = 0 + k = 1 + else: + c = 1 - r + m = 1 - g + y = 1 - b + + # extract out k [0,1] + min_cmy = min(c, m, y) + c = (c - min_cmy) / (1 - min_cmy) + m = (m - min_cmy) / (1 - min_cmy) + y = (y - min_cmy) / (1 - min_cmy) + k = min_cmy + + return "%f %f %f %f %f %f %f" % (c, m, y, k, r, g, b) + +class svg2eps: + def __init__(self, filename=None): + self.filename = filename + self.svg = None + self.rePathDSplit = re.compile('[^a-zA-Z0-9.-]+') + self.reTransformFind = re.compile('([a-z]+)\\(([^)]+)\\)') + self.reNumberFind = re.compile('[0-9.eE+-]+') + # must update reNumberUnitFind, if e is a valid character in a unit + self.reNumberUnitFind = re.compile('([0-9.eE+-]+)([a-z]*)') + # px to pt conversion rate varies based on inkscape versions, it is added during parsing + self.toPt = {'in': 72.0, 'pt': 1.0, 'mm': 2.8346456695, 'cm': 28.346456695, 'm': 2834.6456695, 'pc': 12.0} + + def unitConv(self, string, toUnit): + match = self.reNumberUnitFind.search(string) + number = float(match.group(1)) + unit = match.group(2) + if unit not in self.toPt: + unit = 'uu' + + if unit == toUnit: + return number + else: + return number * self.toPt[unit] / self.toPt[toUnit] + + def lengthConv(self, svgLength): + """converts svgLength to eps length using the current transformation matrix""" + matrix = self.matrices[-1] + epsx = matrix[0] * svgLength + epsy = matrix[1] * svgLength + + return math.sqrt(epsx*epsx + epsy*epsy) + + def coordConv(self, svgx, svgy, relative=False): + """converts svgx, svgy coordinates to eps coordinates using the current transformation matrix""" + if relative: + svgx = float(svgx) + self.curPoint[0] + svgy = float(svgy) + self.curPoint[1] + else: + svgx = float(svgx) + svgy = float(svgy) + matrix = self.matrices[-1] + epsx = matrix[0] * svgx + matrix[2] * svgy + matrix[4] + epsy = matrix[1] * svgx + matrix[3] * svgy + matrix[5] + + return (epsx, epsy) + + def matrixMul(self, matrix, matrix2): + """multiplies matrix with matrix2""" + matrix0 = matrix[:] + matrix[0] = matrix0[0] * matrix2[0] + matrix0[2]*matrix2[1] # + matrix0[4]*0 + matrix[1] = matrix0[1] * matrix2[0] + matrix0[3]*matrix2[1] # + matrix0[5]*0 + matrix[2] = matrix0[0] * matrix2[2] + matrix0[2]*matrix2[3] # + matrix0[4]*0 + matrix[3] = matrix0[1] * matrix2[2] + matrix0[3]*matrix2[3] # + matrix0[5]*0 + matrix[4] = matrix0[0] * matrix2[4] + matrix0[2]*matrix2[5] + matrix0[4] + matrix[5] = matrix0[1] * matrix2[4] + matrix0[3]*matrix2[5] + matrix0[5] + + + def alert(self, string, elem): + """adds an alert to the collection""" + if not string in self.alerts: + self.alerts[string] = set() + elemId = elem.get('id') + if elemId != None: + self.alerts[string].add(elemId) + + def showAlerts(self): + """show alerts collected by the alert() function""" + for string, ids in self.alerts.iteritems(): + idstring = ', '.join(ids) + print(string, idstring) + + def elemSvg(self, elem): + """handles the element""" + # DPI changed in inkscape 0.92, so set the px-to-pt rate based on inkscape version + self.toPt['px'] = 0.75 + inkscapeVersionString = elem.get('{http://www.inkscape.org/namespaces/inkscape}version', '0.92.0') + mobj = re.match(r'(\d+)\.(\d+)', inkscapeVersionString) + if mobj != None: + major = int(mobj.group(1)) + minor = int(mobj.group(2)) + if major == 0 and minor < 92: + self.toPt['px'] = 0.8 + + # by default (without viewbox definition) user unit = pixel + self.toPt['uu'] = self.toPt['px'] + self.docWidth = self.unitConv(elem.get('width'), 'pt') + self.docHeight = self.unitConv(elem.get('height'), 'pt') + + viewBoxString = elem.get('viewBox') + if viewBoxString != None: + viewBox = viewBoxString.split(' ') + # theoretically width and height scaling factor could be different, + # but this script does not support it + widthUu = float(viewBox[2]) - float(viewBox[0]) + self.toPt['uu'] = self.docWidth / widthUu + + # transform svg units to eps default pt + scale = self.toPt['uu'] + self.matrices = [ [scale, 0, 0, -scale, 0, self.docHeight] ] + + + def gradientFill(self, elem, gradientId): + """constructs a gradient instance definition in self.gradientOp""" + if gradientId not in self.gradients: + self.alert("fill gradient not defined: "+gradientId, elem ) + return + gradient = self.gradients[gradientId] + transformGradient = gradient + while 'href' in gradient: + gradientId = gradient['href'] + gradient = self.gradients[gradientId] + if 'matrix' in transformGradient: + self.matrices.append( self.matrices[-1][:] ) + self.matrixMul(self.matrices[-1],transformGradient['matrix']) + + if 'linear' == transformGradient['type']: + gradient['linUseCount'] += 1 + x1, y1 = self.coordConv(transformGradient['x1'], transformGradient['y1']) + x2, y2 = self.coordConv(transformGradient['x2'], transformGradient['y2']) + deltax = x2 - x1 + deltay = y2 - y1 + length = math.sqrt( deltax*deltax + deltay*deltay ) + angle = math.atan2(deltay, deltax)*180/math.pi + + elif 'radial' == transformGradient['type']: + gradient['radUseCount'] += 1 + cx, cy = self.coordConv(transformGradient['cx'], transformGradient['cy']) + # fx, fy = self.coordConv(transformGradient['fx'], transformGradient['fy']) + rx, ry = self.coordConv(transformGradient['cx'] + transformGradient['r'], transformGradient['cy']) + r = math.sqrt( (rx-cx)*(rx-cx) + (ry-cy)*(ry-cy)) + + if 'matrix' in transformGradient: + self.matrices.pop() + + + if 'linear' == transformGradient['type']: + #endPathSegment() will substitute appropriate closeOp in %%s + self.gradientOp = "\nBb 1 (l_%s) %f %f %f %f 1 0 0 1 0 0 Bg %%s 0 BB" % \ + (gradientId, x1, y1, angle, length) + elif 'radial' == transformGradient['type']: + self.gradientOp = "\nBb 1 (r_%s) %f %f 0 %f 1 0 0 1 0 0 Bg %%s 0 BB" % \ + (gradientId, cx, cy, r) + self.alert("radial gradients will appear circle shaped", elem) + + + + def pathStyle(self, elem): + """handles the style attribute in svg element""" + if self.clipPath: + self.closeOp = 'h n' + return + + css = self.cssStack[-1] + if 'stroke' in css and css['stroke'] != 'none': + self.closeOp = 's' + self.pathCloseOp = 's' + if '#' == css['stroke'][0] or 'rgb' == css['stroke'][0:3]: + self.epspath += ' ' + cssColor2Eps(css['stroke']) + ' XA' + elif 'url' == css['stroke'][0:3]: + self.alert("gradient strokes not supported", elem) + if 'fill' in css and css['fill'] != 'none': + if self.closeOp == 's': + self.closeOp = 'b' + else: + self.closeOp = 'f' + if '#' == css['fill'][0] or 'rgb' == css['fill'][0:3]: + self.epspath += ' ' + cssColor2Eps(css['fill']) + ' Xa' + elif 'url' == css['fill'][0:3]: + self.gradientFill(elem, css['fill'][5:-1]) + + + if 'fill-rule' in css: + if css['fill-rule'] == 'evenodd': + self.epspath += " 1 XR" + else: + self.epspath += " 0 XR" + if 'stroke-width' in css: + self.epspath += " %f w" % (self.lengthConv(self.unitConv(css['stroke-width'], 'uu')), ) + if 'stroke-linecap' in css: + if css['stroke-linecap'] == 'butt': + self.epspath += " 0 J" + elif css['stroke-linecap'] == 'round': + self.epspath += " 1 J" + elif css['stroke-linecap'] == 'square': + self.epspath += " 2 J" + if 'stroke-linejoin' in css: + if css['stroke-linejoin'] == 'miter': + self.epspath += " 0 j" + elif css['stroke-linejoin'] == 'round': + self.epspath += " 1 j" + elif css['stroke-linejoin'] == 'bevel': + self.epspath += " 2 j" + if 'stroke-miterlimit' in css: + self.epspath += " " + css['stroke-miterlimit'] + " M" + if 'stroke-dasharray' in css: + phase = 0 + if css['stroke-dasharray'] == 'none': + dashArray = [] + if css['stroke-dasharray'] != 'none': + dashArrayIn = css['stroke-dasharray'].replace(',', ' ').split() + dashArray = list(map(lambda x: "%f" % (x,), filter(lambda x: x > 0, map(lambda x: self.lengthConv(float(x)), dashArrayIn)))) + if 'stroke-dashoffset' in css: + phase = float(css['stroke-dashoffset']) + + self.epspath += ' [ %s ] %f d' % (' '.join(dashArray), phase) + + + + def endPathSegment(self, elem): + """should be called when a path segment end is reached in a element""" + if self.removeStrayPoints and self.segmentCommands <= 1: + self.alert("removing stray point", elem) + self.epspath = self.epspath[:self.segmentStartIndex] + return + if self.autoClose and (self.closeOp == 'f' or self.closeOp == 'b'): + autoClose = True + else: + autoClose = False + + if self.pathExplicitClose or autoClose: + closeOp = self.closeOp + else: + closeOp = self.closeOp.upper() + + if self.pathCurSegment == self.pathSegmentNum and self.gradientOp != None: + closeOp = self.gradientOp % (closeOp,) + + if self.lastBegin != None: + if (self.pathExplicitClose or autoClose): + if abs(self.curPoint[0] - self.lastBegin[0]) + \ + abs(self.curPoint[1] - self.lastBegin[1]) > self.closeDist: + x, y = self.coordConv(self.lastBegin[0], self.lastBegin[1]) + self.epspath += ' %f %f l' % (x, y) + + self.epspath += ' ' + closeOp + '\n' + + if self.pathExplicitClose: + self.curPoint = self.lastBegin + + self.lastBegin = None + + def elemPath(self, elem, pathData=None): + """handles svg element""" + if None == pathData: + pathData = elem.get('d') + self.pathSegmentNum = pathData.count("m") + pathData.count("M") + self.pathCurSegment = 0 + self.epspath = '' + self.segmentStartIndex = 0 # index in self.epspath of first character of current path segment + self.segmentCommands = 0 # number of handled commands (including first moveto) in current paths segment + self.closeOp = 'n' # pathStyle(elem) will modify this + self.gradientOp = None + self.pathExplicitClose = False + if elem.get('id'): + self.epspath += '\n%AI3_Note: ' + elem.get('id') + '\n' + + self.pathStyle(elem) + + tokens = self.rePathDSplit.split(pathData) + i = 0 + cmd = '' # path command + self.curPoint = (0,0) + self.lastBegin = None + + while i < len(tokens): + token = tokens[i] + if token in ['m', 'M', 'c', 'C', 'l', 'L', 'z', 'Z', 'a', 'A', 'q', 'Q', 'h', 'H', 'v', 'V']: + cmd = token + i += 1 + elif token.isalpha(): + self.alert('unhandled path command: %s' % (token,), elem) + cmd = '' + i += 1 + else: # coordinates after a moveto are assumed to be lineto + if 'm' == cmd: + cmd = 'l' + elif 'M' == cmd: + cmd = 'L' + + if ('M' == cmd or 'm' == cmd) : + if self.pathCurSegment > 0: + self.endPathSegment(elem) + self.pathCurSegment += 1 + self.pathExplicitClose = False + + if 'M' == cmd or 'm' == cmd: + if 'M' == cmd or ('m' == cmd and i == 1): + self.curPoint = (float(tokens[i]), float(tokens[i+1])) + else: + self.curPoint = (self.curPoint[0] + float(tokens[i]), self.curPoint[1] + float(tokens[i+1])) + + self.segmentStartIndex = len(self.epspath) + x, y = self.coordConv(self.curPoint[0], self.curPoint[1]) + self.epspath += ' %f %f' % (x, y) + i += 2 + self.lastBegin = self.curPoint + self.epspath += ' m' + self.segmentCommands = 1 + elif 'L' == cmd or 'l' == cmd: + if 'L' == cmd: + self.curPoint = (float(tokens[i]), float(tokens[i+1])) + else: + self.curPoint = (self.curPoint[0] + float(tokens[i]), self.curPoint[1] + float(tokens[i+1])) + x, y = self.coordConv(self.curPoint[0], self.curPoint[1]) + self.epspath += ' %f %f' % (x, y) + i += 2 + self.epspath += ' l' + self.segmentCommands += 1 + elif cmd in ['H', 'h', 'V', 'v']: + if 'H' == cmd: + self.curPoint = (float(tokens[i]), self.curPoint[1]) + elif 'h' == cmd: + self.curPoint = (self.curPoint[0] + float(tokens[i]), self.curPoint[1]) + elif 'V' == cmd: + self.curPoint = (self.curPoint[0], float(tokens[i])) + elif 'v' == cmd: + self.curPoint = (self.curPoint[0], self.curPoint[1] + float(tokens[i])) + x, y = self.coordConv(self.curPoint[0], self.curPoint[1]) + self.epspath += ' %f %f' % (x, y) + i += 1 + self.epspath += ' l' + self.segmentCommands += 1 + elif 'C' == cmd: + for j in range(2): + x, y = self.coordConv(tokens[i], tokens[i+1]) + self.epspath += ' %f %f' % (x, y) + i += 2 + self.curPoint = (float(tokens[i]), float(tokens[i+1])) + x, y = self.coordConv(self.curPoint[0], self.curPoint[1]) + self.epspath += ' %f %f' % (x, y) + i += 2 + self.epspath += ' c' + self.segmentCommands += 1 + elif 'c' == cmd: + for j in range(2): + x, y = self.coordConv(self.curPoint[0] + float(tokens[i]), self.curPoint[1] +float(tokens[i+1])) + self.epspath += ' %f %f' % (x, y) + i += 2 + self.curPoint = (self.curPoint[0] + float(tokens[i]), self.curPoint[1] + float(tokens[i+1])) + x, y = self.coordConv(self.curPoint[0], self.curPoint[1]) + self.epspath += ' %f %f' % (x, y) + i += 2 + self.epspath += ' c' + self.segmentCommands += 1 + elif 'Q' == cmd: + #export quadratic Bezier as cubic + qx0, qy0 = self.coordConv(self.curPoint[0], self.curPoint[1]) + qx1, qy1 = self.coordConv(float(tokens[i]), float(tokens[i+1])) + i += 2 + self.curPoint = (float(tokens[i]), float(tokens[i+1])) + qx2, qy2 = self.coordConv(self.curPoint[0], self.curPoint[1]) + factor = 2.0 / 3.0 + cx1 = qx0 + factor * (qx1 - qx0) + cy1 = qy0 + factor * (qy1 - qy0) + cx2 = qx2 - factor * (qx2 - qx1) + cy2 = qy2 - factor * (qy2 - qy1) + self.epspath += ' %f %f %f %f' % (cx1, cy1, cx2, cy2) + self.epspath += ' %f %f' % (qx2, qy2) + i += 2 + self.epspath += ' c' + self.segmentCommands += 1 + elif 'q' == cmd: + qx0, qy0 = self.coordConv(self.curPoint[0], self.curPoint[1]) + qx1, qy1 = self.coordConv(self.curPoint[0] + float(tokens[i]), self.curPoint[1] + float(tokens[i+1])) + i += 2 + self.curPoint = (self.curPoint[0] + float(tokens[i]), self.curPoint[1] + float(tokens[i+1])) + qx2, qy2 = self.coordConv(self.curPoint[0], self.curPoint[1]) + factor = 2.0 / 3.0 + cx1 = qx0 + factor * (qx1 - qx0) + cy1 = qy0 + factor * (qy1 - qy0) + cx2 = qx2 - factor * (qx2 - qx1) + cy2 = qy2 - factor * (qy2 - qy1) + self.epspath += ' %f %f %f %f' % (cx1, cy1, cx2, cy2) + self.epspath += ' %f %f' % (qx2, qy2) + i += 2 + self.epspath += ' c' + self.segmentCommands += 1 + elif 'A' == cmd or 'a' == cmd: + self.alert("elliptic arcs are converted to bezier curves", elem) + +# Angel Kostadinov begin + r1 = abs(float(tokens[i])) + r2 = abs(float(tokens[i+1])) + psai = float(tokens[i+2]) + largeArcFlag = int(tokens[i + 3]) + fS = int(tokens[i+4]) + rx = self.curPoint[0] + ry = self.curPoint[1] + if 'A' == cmd: + cx, cy = (float(tokens[i+5]), float(tokens[i+6])) + else: + cx, cy = (self.curPoint[0] +float(tokens[i+5]), self.curPoint[1] +float(tokens[i+6])) + + if r1 > 0 and r2 > 0: + ctx = (rx - cx) / 2 + cty = (ry - cy) / 2 + cpsi = math.cos(psai*math.pi/180) + spsi = math.sin(psai*math.pi/180) + rxd = cpsi*ctx + spsi*cty + ryd = -1*spsi*ctx + cpsi*cty + rxdd = rxd * rxd + rydd = ryd * ryd + r1x = r1 * r1 + r2y = r2 * r2 + lamda = rxdd/r1x + rydd/r2y + + if lamda > 1: + r1 = math.sqrt(lamda) * r1 + r2 = math.sqrt(lamda) * r2 + sds = 0 + else: + seif = 1 + if largeArcFlag == fS: + seif = -1 + sds = seif * math.sqrt((r1x*r2y - r1x*rydd - r2y*rxdd) / (r1x*rydd + r2y*rxdd)) + + txd = sds*r1*ryd / r2 + tyd = -1 * sds*r2*rxd / r1 + tx = cpsi*txd - spsi*tyd + (rx+cx)/2 + ty = spsi*txd + cpsi*tyd + (ry+cy)/2 + rad = math.atan2((ryd-tyd)/r2, (rxd-txd)/r1) - math.atan2(0, 1) + if rad >= 0: + s1 = rad + else: + s1 = 2 * math.pi + rad + rad = math.atan2((-ryd-tyd)/r2, (-rxd-txd)/r1) - math.atan2((ryd-tyd)/r2, (rxd-txd)/r1) + if rad >= 0: + dr = rad + else: + dr = 2 * math.pi + rad + + if fS==0 and dr > 0: + dr -= 2*math.pi + elif fS==1 and dr < 0: + dr += 2*math.pi + + sse = dr * 2 / math.pi + if sse < 0: + seg = math.ceil(-1*sse) + else: + seg = math.ceil(sse) + segr = dr / seg + t = 8.0/3.0 * math.sin(segr/4) * math.sin(segr/4) / math.sin(segr/2) + cpsir1 = cpsi * r1 + cpsir2 = cpsi * r2 + spsir1 = spsi * r1 + spsir2 = spsi * r2 + mc = math.cos(s1) + ms = math.sin(s1) + x2 = rx - t * (cpsir1*ms + spsir2*mc) + y2 = ry - t * (spsir1*ms - cpsir2*mc) + + for n in range(int(math.ceil(seg))): + s1 += segr + mc = math.cos(s1) + ms = math.sin(s1) + + x3 = cpsir1*mc - spsir2*ms + tx + y3 = spsir1*mc + cpsir2*ms + ty + dx = -t * (cpsir1*ms + spsir2*mc) + dy = -t * (spsir1*ms - cpsir2*mc) + + cx1, cy1 = self.coordConv(x2,y2) + cx2, cy2 = self.coordConv(x3-dx,y3-dy) + cx3, cy3 = self.coordConv(x3,y3) + + self.epspath += " %f %f %f %f %f %f c" % (cx1, cy1, cx2, cy2, cx3, cy3) + + x2 = x3 + dx + y2 = y3 + dy + else: + # case when one radius is zero: this is a simple line + x, y = self.coordConv(cx, cy) + self.epspath += ' %f %f l' % (x, y) + +# Angel Kostadinov end + self.segmentCommands += 1 + i += 7 + self.curPoint= (cx, cy) + + elif 'z' == cmd or 'Z' == cmd: + self.pathExplicitClose = True + cmd = '' + else: + i += 1 + + self.endPathSegment(elem) + + if self.pathSegmentNum > 1: + self.epspath = " *u\n" + self.epspath + "\n*U " + self.epsLayers += "\n" + wrap(self.epspath, 70) + "\n" + + def elemRect(self, elem): + x = float(elem.get('x')) + y = float(elem.get('y')) + width = float(elem.get('width')) + height = float(elem.get('height')) + + # construct an svg d attribute, and call self.elemPath() + pathData = "" + rx = elem.get('rx') + ry = elem.get('ry') + if None == rx and None == ry: + rx = 0 + ry = 0 + else: + # if only one radius is given, it means both are the same + if None == rx: + rx = float(ry) + else: + rx = float(rx) + if None == ry: + ry = float(rx) + else: + ry = float(ry) + + if rx == 0 and ry == 0: + pathData = "M %f %f %f %f %f %f %f %f z" % (x,y, x+width,y, x+width, y+height, x, y+height) + else: + pathData = "M %f %f A %f %f 0 0 1 %f %f" % (x, y+ry, rx,ry, x+rx, y) + pathData += " L %f %f A %f %f 0 0 1 %f %f" % (x+width-rx, y, rx,ry, x+width, y+ry) + pathData += " L %f %f A %f %f 0 0 1 %f %f" % (x+width, y+height-ry, rx,ry, x+width-rx, y+height) + pathData += " L %f %f A %f %f 0 0 1 %f %f z" % (x+rx, y+height, rx,ry, x, y+height-ry) + self.elemPath(elem, pathData) + + def elemPolygon(self, elem): + pathData = 'M ' + elem.get('points').replace(',', ' ').strip() + ' z' + self.elemPath(elem, pathData) + + def elemCircle(self, elem): + r = float(elem.get('r')) + self.elemEllipseCircleCommon(elem, r, r) + + def elemEllipse(self, elem): + rx = float(elem.get('rx')) + ry = float(elem.get('ry')) + self.elemEllipseCircleCommon(elem, rx, ry) + + def elemEllipseCircleCommon(self, elem, rx, ry): + cx = float(elem.get('cx')) + cy = float(elem.get('cy')) + # todo: test whether PostScript arc is handled by AI and use that instead + magic = 0.55228475 # I've read it on the internet + controlx = rx * magic # x distance of control points from center + controly = ry * magic # y distance of control points from center + + # construct an svg d attribute, and call self.elemPath() + pathData = "M %f %f" % (cx - rx, cy) # leftmost point + pathData += " C %f %f %f %f %f %f" % (cx - rx, cy - controly, cx - controlx, cy - ry, cx, cy - ry) # to top + pathData += " C %f %f %f %f %f %f" % (cx + controlx, cy - ry, cx + rx, cy - controly, cx + rx, cy) # to right + pathData += " C %f %f %f %f %f %f" % (cx + rx, cy + controly, cx + controlx, cy + ry, cx, cy + ry) # to bottom + pathData += " C %f %f %f %f %f %f z" % (cx - controlx, cy + ry, cx - rx, cy + controly, cx - rx, cy) # back to left and close + self.elemPath(elem, pathData) + + + def attrTransform(self, matrix, transform): + """transforms matrix using svg transform attribute""" + for ttype, targs in self.reTransformFind.findall(transform): + targs = list(map(lambda x: float(x), self.reNumberFind.findall(targs))) + if ttype == 'matrix': + newmatrix = [ targs[0], targs[1], + targs[2], targs[3], + targs[4], targs[5] ] + self.matrixMul(matrix, newmatrix) + elif ttype == 'translate': + tx = targs[0] + ty = targs[1] if len(targs) > 1 else 0 + newmatrix = [ 1, 0, 0, 1, tx, ty ] + self.matrixMul(matrix, newmatrix) + elif ttype == 'scale': + sx = targs[0] + sy = targs[1] if len(targs) > 1 else sx + newmatrix = [ sx, 0, 0, sy, 0, 0 ] + self.matrixMul(matrix, newmatrix) + elif ttype == 'rotate': + if len(targs) == 1: + alpha = targs[0] + newmatrix = [ math.cos(alpha), math.sin(alpha), + -math.sin(alpha), math.cos(alpha), + 0, 0] + self.matrixMul(matrix, newmatrix) + else: + alpha = targs[0] + newmatrix = [ 1, 0, 0, 1, targs[1], targs[2] ] + self.matrixMul(matrix, newmatrix) + newmatrix = [ math.cos(alpha), math.sin(alpha), + -math.sin(alpha), math.cos(alpha), + 0, 0] + self.matrixMul(matrix, newmatrix) + newmatrix = [ 1, 0, 0, 1, -targs[1], -targs[2] ] + self.matrixMul(matrix, newmatrix) + elif ttype == 'skewX' or ttype == 'skewY': + self.alert("skewX and skewY transformations are not supported", elem) + else: + print('unknown transform type: ', ttype) + return matrix + + def elemGradient(self, elem, grType): + """handles and svg elements""" + elemId = elem.get('id') + if elemId != None: + self.curGradientId = elemId + self.gradients[elemId] = {'stops': [], 'linUseCount': 0, 'radUseCount': 0, 'type': grType} + if 'linear' == grType: + x1 = elem.get('x1') + if None != x1: + self.gradients[elemId]['x1'] = float(x1) + self.gradients[elemId]['y1'] = float(elem.get('y1')) + self.gradients[elemId]['x2'] = float(elem.get('x2')) + self.gradients[elemId]['y2'] = float(elem.get('y2')) + elif 'radial' == grType: + cx = elem.get('cx') + if None != cx: + self.gradients[elemId]['cx'] = float(cx) + self.gradients[elemId]['cy'] = float(elem.get('cy')) + self.gradients[elemId]['fx'] = float(elem.get('fx')) + self.gradients[elemId]['fy'] = float(elem.get('fy')) + self.gradients[elemId]['r'] = float(elem.get('r')) + + transform = elem.get('gradientTransform') + if None != transform: + self.gradients[elemId]['matrix'] = self.attrTransform([1, 0, 0, 1, 0, 0], transform) + + href = elem.get('{http://www.w3.org/1999/xlink}href') + if None != href: + self.gradients[elemId]['href'] = href[1:] + + + def elemStop(self, elem): + """handles (gradient stop) svg element""" + stopColor = elem.get('stop-color') + if not stopColor: + style = css2dict(elem.get('style')) + if 'stop-color' in style: + stopColor = style['stop-color'] + else: + stopColor = '#000000' + color = cssColor2Eps(stopColor, 'CMYKRGB') + offsetString = elem.get('offset').strip() + if offsetString[-1] == '%': + offset = float(offsetString[:-1]) + else: + offset = float(offsetString) * 100 + self.gradients[self.curGradientId]['stops'].append( (offset, color) ) + + def gradientSetup(self): + """writes used gradient definitions into self.epsSetup""" + gradientNum = 0 + epsGradients = "" + for gradientId, gradient in self.gradients.items(): + + if gradient['linUseCount'] > 0: + gradientNum += 1 + epsGradients += ("\n%%AI5_BeginGradient: (l_%s)" + \ + "\n(l_%s) 0 %d Bd\n[\n") % \ + (gradientId, gradientId, len(gradient['stops'])) + gradient['stops'].sort(key=lambda x: x[0], reverse=True) + + for offset, color in gradient['stops']: + epsGradients += "%s 2 50 %f %%_Bs\n" % (color, offset) + epsGradients += "BD\n%AI5_EndGradient\n" + + if gradient['radUseCount'] > 0: + gradientNum += 1 + epsGradients += ("\n%%AI5_BeginGradient: (r_%s)" + \ + "\n(r_%s) 1 %d Bd\n[\n") % \ + (gradientId, gradientId, len(gradient['stops'])) + gradient['stops'].sort(key=lambda x: x[0]) + + for offset, color in gradient['stops']: + epsGradients += "%s 2 50 %f %%_Bs\n" % (color, offset) + epsGradients += "BD\n%AI5_EndGradient\n" + + if gradientNum > 0: + self.epsSetup += ("\n%d Bn\n" % gradientNum) + epsGradients + + + def layerStart(self, elem): + self.epsLayers += '\n\n%AI5_BeginLayer\n' + layerName = elem.get('{http://www.inkscape.org/namespaces/inkscape}label') + layerName = "".join(map(lambda x: '_' if ord(x)<32 or ord(x) > 127 else x, layerName)) + self.epsLayers += '1 1 1 1 0 0 %d 0 0 0 Lb\n(%s) Ln\n' % \ + (self.layerColor, layerName) + self.layerColor = (self.layerColor + 1) % 27 + + def elemUse(self, elem): + """handles a svg element""" + x = self.unitConv(elem.get('x'), 'uu') + if x == None: + x = 0 + y = self.unitConv(elem.get('y'), 'uu') + if y == None: + y = 0 + + if x != 0 or y != 0: + self.matrices.append( self.matrices[-1][:] ) + self.attrTransform(self.matrices[-1], "translate(%f %f)" % (x, y)) + + href = elem.get('{http://www.w3.org/1999/xlink}href') + usedElem = self.root.find(".//*[@id='%s']" % (href[1:],)) + if usedElem != None: + self.walkElem(usedElem) + else: + self.alert("used Elem not found: " + href, elem) + + if x != 0 or y != 0: + self.matrices.pop() + + # def elemNamedView(self, elem): + # """handles a svg element""" + # newDocumentUnit = elem.get('{http://www.inkscape.org/namespaces/inkscape}document-units') + # if newDocumentUnit in self.toPt and newDocumentUnit != self.documentUnit: + # if len(self.matrices) > 0: + # # recalculate scaling transformation to new document unit + # scale = self.toPt[newDocumentUnit] / self.toPt[self.documentUnit] + # self.matrices[-1][0] = scale * self.matrices[-1][0] + # self.matrices[-1][3] = scale * self.matrices[-1][3] + # self.documentUnit = newDocumentUnit + + def walkElem(self, elem): + if '}' in elem.tag: + uri, shortTag = elem.tag.split('}') + else: + shortTag = elem.tag + uri = '' + + transform = elem.get('transform') + clipPath = elem.get('clip-path') + cssNew = css2dict(elem.get('style')) + css = self.cssStack[-1].copy() + css.update(cssNew) + self.cssStack.append(css) + if self.removeInvisible: + if 'visibility' in css and (css['visibility'] == 'hidden' or css['visibility'] == 'collapse'): + return + if 'display' in css and css['display'] == 'none': + return + if shortTag in ('path', 'rect', 'circle', 'ellipse', 'polygon'): + if 'opacity' in css and css['opacity'] == '0': + return + stroke = False + if 'stroke' in css and 'none' != css['stroke']: + stroke = True + if 'stroke-opacity' in css and css['stroke-opacity'] == '0': + stroke = False + if 'stroke-width' in css and css['stroke-width'] == '0': + stroke = False + fill = False + if 'fill' in css and 'none' != css['fill']: + fill = True + if 'fill-opacity' in css and css['fill-opacity'] == '0': + stroke = False + if stroke == False and fill == False: + return + + + if transform != None: + self.matrices.append( self.matrices[-1][:] ) + self.attrTransform(self.matrices[-1], transform) + + if None != clipPath: + clipId = clipPath[5:-1] + clipElem = self.root.find(".//*[@id='%s']" % (clipId,)) + if clipElem == None: + self.alert('clipPath not found', elem) + clipPath = None + else: + self.epsLayers += "\nq\n" + clipPathSave= self.clipPath + self.clipPath = True + # output clip path even if it doesn't have visible style + popRemoveInvisible = self.removeInvisible + self.removeInvisible = False + self.walkElem(clipElem) + self.removeInvisible = popRemoveInvisible + self.clipPath = clipPathSave + self.epsLayers += ' W' + + if 'svg' == shortTag: + self.elemSvg(elem) + elif 'path' == shortTag: + # do not output paths that are in defs + # if they are referenced, they will be used there + if self.section != 'defs': + self.elemPath(elem) + elif 'rect' == shortTag: + if self.section != 'defs': + self.elemRect(elem) + elif 'circle' == shortTag: + if self.section != 'defs': + self.elemCircle(elem) + elif 'ellipse' == shortTag: + if self.section != 'defs': + self.elemEllipse(elem) + elif 'polygon' == shortTag: + if self.section != 'defs': + self.elemPolygon(elem) + elif 'linearGradient' == shortTag: + self.elemGradient(elem, 'linear') + elif 'radialGradient' == shortTag: + self.elemGradient(elem, 'radial') + elif 'stop' == shortTag: + self.elemStop(elem) + elif 'g' == shortTag: + if 'layer' == elem.get('{http://www.inkscape.org/namespaces/inkscape}groupmode'): + self.layerStart(elem) + elif None == clipPath: # clipping makes a group anyway + self.epsLayers += '\nu\n' + elif 'use' == shortTag: + self.elemUse(elem) + elif 'defs' == shortTag: + self.section = shortTag + elif 'namedview' == shortTag: + self.section = shortTag + else: + self.alert("unhandled elem: " + shortTag, elem) + + + for child in list(elem): + self.walkElem(child) + + if None != clipPath: + self.epsLayers += "\nQ\n" + + if 'g' == shortTag: + if 'layer' == elem.get('{http://www.inkscape.org/namespaces/inkscape}groupmode'): + self.epsLayers += '\nLB\n%AI5_EndLayer\n' + elif None == clipPath: + self.epsLayers += '\nU\n' + elif shortTag in ('defs', 'namedview'): + self.section = None + + if transform != None: + self.matrices.pop() + + self.cssStack.pop() + + def convert(self, svg = None): + self.alerts = {} + if None != svg: + self.svg = svg + if None == self.svg and None != self.filename: + fd = open(self.filename, 'rb') + self.svg = fd.read() + fd.close() + + self.autoClose = True # TODO: make it optional + self.removeInvisible = True # TODO: make it optional + self.removeStrayPoints = True # TODO: make it optional + # if last point of a path is further from first point, then an explicit + # 'lineto' is written to the first point before 'closepath' + self.closeDist = 0.1 + self.matrices = [[1, 0, 0, 1, 0, 0]] + self.cssStack = [{}] + self.gradients = {} + self.docHeight = 400 + self.docWidth = 400 + self.layerColor = 0 + self.section = None + self.clipPath = False + self.epsComments = """%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: tzunghaor svg2eps +%%Pages: 1 +%%DocumentData: Clean7Bit +%%LanguageLevel: 3 +%%DocumentNeededResources: procset Adobe_Illustrator_AI5 1.3 0 +%AI5_FileFormat 3 +""" + # TODO: creation date, user etc + + self.epsProlog = """%%BeginProlog +100 dict begin +/tzung_eps_state save def +/dict_count countdictstack def +/op_count count 1 sub def +/Adobe_Illustrator_AI5 where +{ pop } { + /tzung_strokergb [ 0 0 0 ] def + /tzung_compound 0 def + /tzung_closeop { S } def + /tzung_fillrule 0 def + + /*u { /tzung_compound 1 def newpath /tzung_fillrule 0 def } bind def + /*U { /tzung_compound 0 def tzung_closeop } bind def + /u {} bind def + /U {} bind def + + /q { clipsave } bind def + /Q { cliprestore } bind def + /W { clip } bind def + + /Lb { 10 {pop} repeat } bind def + /Ln {pop} bind def + /LB {} bind def + + + /w { setlinewidth } bind def + /J { setlinecap } bind def + /j { setlinejoin } bind def + /M { setmiterlimit } bind def + /d { setdash } bind def + + /m { tzung_compound 0 eq { newpath /tzung_fillrule 0 def } if moveto } bind def + /l { lineto } bind def + /c { curveto } bind def + + /XR { /tzung_fillrule exch def } bind def + /Xa { setrgbcolor } bind def + /XA { 3 array astore /tzung_strokergb exch def } bind def + + + /F { tzung_compound 0 eq { + tzung_fillrule 0 eq { fill } { eofill } ifelse + } { + /tzung_closeop {F} def + } ifelse } bind def + /f { closepath F } bind def + /S { tzung_compound 0 eq { + tzung_strokergb aload pop setrgbcolor stroke + } { + /tzung_closeop {S} def + } ifelse } bind def + /s { closepath S } bind def + + /B { tzung_compound 0 eq { + gsave + tzung_fillrule 0 eq { fill } { eofill } ifelse + grestore + tzung_strokergb aload pop setrgbcolor stroke + } { + /tzung_closeop {B} def + } ifelse } bind def + /b { closepath B } bind def + /H { tzung_compound 0 eq { + }{ + /tzung_closeop {H} def + } ifelse} bind def + /h { closepath } bind def + /N { tzung_compound 0 eq { + }{ + /tzung_closeop {N} def + } ifelse} bind def + /n { closepath N } bind def + + + /Bn { /dict_gradients exch dict def} bind def + /Bd { /tmp_ngradstop exch def /tmp_shadingtype exch def } bind def %leaves gradient name in stack + /BD { ] % this handles only stops that have CMYKRGB color definitions + % linear gradient stops must be in reverse order, radials in normal order + aload + pop + /tmp_boundaries tmp_ngradstop array def + /tmp_colors tmp_ngradstop array def + tmp_shadingtype 0 eq { + 0 1 tmp_ngradstop 1 sub % for i=0; i<= number of gradient stops - 1; i++ + } { + tmp_ngradstop 1 sub -1 0 % for i=number of gradient stops - 1; i >= 0; i++ + } ifelse + { + /loopvar exch def + 100 div + tmp_boundaries loopvar + 3 -1 roll put % obj array i => array i obj + pop % assume gradient middle is always 50 + pop % assume color type is always 2 (CMYKRGB) + 3 array astore + tmp_colors loopvar + 3 -1 roll put + pop pop pop pop % drop CMYK values + } for + + tmp_ngradstop 2 eq { + /tmp_function 5 dict def + tmp_boundaries 0 get tmp_boundaries 1 get 2 array astore + tmp_function /Domain 3 -1 roll put + tmp_function /FunctionType 2 put + tmp_function /C0 tmp_colors 0 get put + tmp_function /C1 tmp_colors 1 get put + tmp_function /N 1 put + + } { + /tmp_functions tmp_ngradstop 1 sub array def + + 0 1 tmp_ngradstop 2 sub { + /loopvar exch def + /tmp_function 5 dict def + tmp_function /Domain [0 1] put + tmp_function /FunctionType 2 put + tmp_function /C0 tmp_colors loopvar get put + tmp_function /C1 tmp_colors loopvar 1 add get put + tmp_function /N 1 put + tmp_functions loopvar tmp_function put + } for + + + /tmp_function 5 dict def + tmp_boundaries 0 get tmp_boundaries tmp_ngradstop 1 sub get 2 array astore + tmp_function /Domain 3 -1 roll put + tmp_function /FunctionType 3 put + tmp_boundaries aload pop + tmp_ngradstop -1 roll pop pop % remove first and last bounds + tmp_ngradstop 2 sub array astore + tmp_function /Bounds 3 -1 roll put + tmp_function /Functions tmp_functions put + + tmp_ngradstop 1 sub { + 0 1 + } repeat + tmp_ngradstop 1 sub 2 mul array astore + tmp_function /Encode 3 -1 roll put + + } ifelse + + /tmp_shading 6 dict def + tmp_shadingtype 0 eq { + tmp_shading /ShadingType 2 put + tmp_shading /Coords [ 0 0 1 0 ] put + } { + tmp_shading /ShadingType 3 put + tmp_shading /Coords [ 0 0 0 0 0 1 ] put + } ifelse + tmp_shading /ColorSpace /DeviceRGB put + tmp_shading /Domain [0 1] put + tmp_shading /Extend[ true true] put + tmp_shading /Function tmp_function put + + /tmp_gradient 2 dict def + tmp_gradient /PatternType 2 put + tmp_gradient /Shading tmp_shading put + + dict_gradients exch tmp_gradient put % gradient's name is on the top of the stack from Bd operator + + } bind def + /Lb { 10 { pop } repeat } bind def + /Ln { pop } bind def + /Bb { } bind def + + /Bg { + 6 { pop } repeat + gsave + 4 2 roll + translate + exch + rotate + dup scale + exch pop % remove Bg flag + dict_gradients exch get % now gradient name is on top of the stack + [ 1 0 0 1 0 0 ] + makepattern + /pattern_tmp exch def + grestore + pattern_tmp setpattern + gsave % save for after pattern fil for possible stroke + } def + /BB { grestore 2 eq { s } if } bind def + /LB { } bind def + +} ifelse +""" + self.epsSetup = """%%BeginSetup +/Adobe_Illustrator_AI5 where +{ + pop + Adobe_Illustrator_AI5 /initialize get exec +} if +""" + self.epsLayers = "" + self.epsTrailer = """%%Trailer +showpage +count op_count sub {pop} repeat +countdictstack dict_count sub {end} repeat +tzung_eps_state restore +end +%%EOF +""" + + + self.root = ET.fromstring(self.svg) + self.walkElem(self.root) + self.gradientSetup() + + sizeComment = "%%%%BoundingBox: 0 0 %d %d\n" % (math.ceil(self.docWidth), math.ceil(self.docHeight)) + sizeComment += "%%%%HiResBoundingBox: 0 0 %f %f\n" % (self.docWidth, self.docHeight) + sizeComment += "%%AI5_ArtSize: %f %f\n" % (self.docWidth, self.docHeight) + pagesetup = """%%%%Page: 1 1 +%%%%BeginPageSetup +%%%%PageBoundingBox: 0 0 %d %d +%%%%EndPageSetup +""" % (self.docWidth, self.docHeight) + + eps = self.epsComments + sizeComment + "%%EndComments\n\n" + eps += self.epsProlog + "\n%%EndProlog\n\n" + eps += self.epsSetup + "\n%%EndSetup\n\n" + eps += pagesetup + self.epsLayers + "\n\n" + eps += self.epsTrailer + + return eps + +import sys + +if len(sys.argv) < 2: + raise NameError("missing filename") + exit(1) + +converter = svg2eps(sys.argv[1]) + +print(converter.convert()) +#TODO: show alerts in dialogbox +#converter.showAlerts() diff --git a/extensions/fablabchemnitz/animate_order/animate_order.inx b/extensions/fablabchemnitz/animate_order/animate_order.inx new file mode 100644 index 00000000..5cdb9175 --- /dev/null +++ b/extensions/fablabchemnitz/animate_order/animate_order.inx @@ -0,0 +1,64 @@ + + + Animate Order + fablabchemnitz.de.animate_order + + + + + + 5.0 + 60 + + + + + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ../000_about_fablabchemnitz.svg + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/animate_order/animate_order.py b/extensions/fablabchemnitz/animate_order/animate_order.py new file mode 100644 index 00000000..08b191f0 --- /dev/null +++ b/extensions/fablabchemnitz/animate_order/animate_order.py @@ -0,0 +1,108 @@ +#!/usr/bin/env python3 + +import inkex +import subprocess +import shutil +import os +import sys +import warnings + +""" +Extension for InkScape 1.X +Features + - Create SVG preview file and show it in browser. Helps to quickly evaluate line order for cutting processes + +Author: Mario Voigt / FabLab Chemnitz +Mail: mario.voigt@stadtfabrikanten.org +Date: 21.04.2021 +Last patch: 07.05.2021 +License: GNU GPL v3 + +Used version of Vivus JS library: https://github.com/maxwellito/vivus/releases/tag/v0.4.6 - MIT License + +Browser config: +Firefox via about:config -> privacy.file_unique_origin = false + +ToDo: + - adjust width and height (give options) + - embed config buttons inside html to adjust time/type/... (more flexible than clicking from Inkscape) + - we should do it the way like vivus instant -> http://maxwellito.github.io/vivus / https://maxwellito.github.io/vivus-instant + - the generated SVGs can be downloaded again and include all animations! + - calculate the total length of all paths and auto-adjust the speed to have good visibility + - Possible feature request could be to handle "animate selected objects only". See "Export selection as ... " extension to steal that code. +""" +DETACHED_PROCESS = 0x00000008 + +class AnimateOrder(inkex.EffectExtension): + + def spawnIndependentProcess(self, args): #function to spawn non-blocking inkscape instance. the inkscape command is available because it is added to ENVIRONMENT when Inkscape main instance is started + warnings.simplefilter('ignore', ResourceWarning) #suppress "enable tracemalloc to get the object allocation traceback" + if os.name == 'nt': + subprocess.Popen(args, close_fds=True, creationflags=DETACHED_PROCESS) + else: + subprocess.Popen(args, start_new_session=True, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) + warnings.simplefilter("default", ResourceWarning) + + def add_arguments(self, pars): + pars.add_argument("--tab") + pars.add_argument("--time", type=float, default = 5.0, help="Duration (frames)") + pars.add_argument("--fps", type=int, default = 60.0, help="Frames per second (fps)") + pars.add_argument("--sequence_type", help="Sequence type") + pars.add_argument("--reverse", type = inkex.Boolean, default = False, help="Reverse order") + pars.add_argument("--browser", help="Select your desired browser (must be installed and must exist in %PATH% variable).") + + def effect(self): + #write current SVG to extensions' directory. Target name must be "drawing.svg" because it is embedded in animate_order.html statically + inFile = "drawing.svg" + extension_dir = os.path.dirname(os.path.realpath(__file__)) + shutil.copy2(self.options.input_file, os.path.join(extension_dir, inFile)) + + target_html = os.path.join(extension_dir, "animate_order.html") + + docTitle = self.document.getroot().get("{http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd}docname") + if docTitle is None: + title = "Animate Order - Vivus JS" + else: + title = "Animate Order - " + docTitle + vivus_include = "./vivus-0.4.6/dist/vivus.js" + + duration = self.options.time * self.options.fps # we guess we have 20 ... 60 fps. depends on performance of the machine + frames_per_second = self.options.fps + type = self.options.sequence_type + reverse = str(self.options.reverse).lower() + + with open(target_html, "w") as text_file: + print( '' , file=text_file) + print( ' ' , file=text_file) + print( ' ' , file=text_file) + print( ' ' , file=text_file) + print( ' ' , file=text_file) + print(f' {title}' , file=text_file) + print( ' ' , file=text_file) + print( ' ' , file=text_file) + print( ' ' , file=text_file) + print( ' ' , file=text_file) + print( '
' , file=text_file) + print(f' ' , file=text_file) + print(f' ' , file=text_file) + print( ' ' , file=text_file) + print( ' ' , file=text_file) + print( '' , file=text_file) + + if os.path.exists(target_html) is False: + inkex.utils.debug("Error. Target file does not exist!") + exit(1) + + #now open firefox + args = [self.options.browser, target_html] + try: + self.spawnIndependentProcess(args) + except FileNotFoundError as e: + inkex.utils.debug("Error. Check for correct browser installation and try again!") + exit(1) + +if __name__ == '__main__': + AnimateOrder().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/animate_order/vivus-0.4.6/.eslintrc.json b/extensions/fablabchemnitz/animate_order/vivus-0.4.6/.eslintrc.json new file mode 100644 index 00000000..b6a0b41d --- /dev/null +++ b/extensions/fablabchemnitz/animate_order/vivus-0.4.6/.eslintrc.json @@ -0,0 +1,37 @@ +{ + "env": { + "es6": false, + "amd": false, + "browser": true, + "jasmine": true, + "node": true + }, + "extends": "eslint:recommended", + "parserOptions": { + "sourceType": "module" + }, + "globals": { + "Pathformer": true, + "Vivus": true, + "window": true, + "document": true, + "define": true, + "jasmine": true, + "it": true, + "expect": true, + "describe": true, + "beforeEach": true, + "afterEach": true, + "spyOn": true + }, + "rules": { + "no-cond-assign": 2, + "no-console": 0, + "no-const-assign": 2, + "no-class-assign": 2, + "no-this-before-super": 2, + "no-unused-vars": 1, + "no-empty": 0, + "object-shorthand": [2, "always"] + } +} diff --git a/extensions/fablabchemnitz/animate_order/vivus-0.4.6/.github/ISSUE_TEMPLATE.md b/extensions/fablabchemnitz/animate_order/vivus-0.4.6/.github/ISSUE_TEMPLATE.md new file mode 100644 index 00000000..cfe60cfb --- /dev/null +++ b/extensions/fablabchemnitz/animate_order/vivus-0.4.6/.github/ISSUE_TEMPLATE.md @@ -0,0 +1,16 @@ +### Please define your problem or issue as clear as possible. + +For a problem, please fill the following: + +**Vivus version**: + +**Browser**: + +**Steps to reproduce it**: + +**JSFiddle link (or similar platform)**: +*No personal website will be allowed, only sandboxed platform where the code is isolated, clear and can be hacked. I don't want to debug uglified code between 42 libraries.* + +*[note]* +Please have a minimum of politeness. There's unfortunately only me as contributor/maintainor which help on my free time, I'm not the Amazon customer service or your Mom. I don't ask to send me flowers and tell me how amazing Vivus is (that won't make me help you quicker). But please try to do as much as you can before opening an issue: check that no closed issue mention a similar problem, that your script is executed correctly (conflicts, race conditions...).. Thanks :) +*[/note]* diff --git a/extensions/fablabchemnitz/animate_order/vivus-0.4.6/.gitignore b/extensions/fablabchemnitz/animate_order/vivus-0.4.6/.gitignore new file mode 100644 index 00000000..bdaa75e9 --- /dev/null +++ b/extensions/fablabchemnitz/animate_order/vivus-0.4.6/.gitignore @@ -0,0 +1,6 @@ +coverage/ +node_modules/ +.DS_Store +.idea +yarn.lock +dist/vivus.min.js.map diff --git a/extensions/fablabchemnitz/animate_order/vivus-0.4.6/.npmignore b/extensions/fablabchemnitz/animate_order/vivus-0.4.6/.npmignore new file mode 100644 index 00000000..b5210b50 --- /dev/null +++ b/extensions/fablabchemnitz/animate_order/vivus-0.4.6/.npmignore @@ -0,0 +1,5 @@ +test +assets +node_modules +coverage +.DS_Store diff --git a/extensions/fablabchemnitz/animate_order/vivus-0.4.6/.travis.yml b/extensions/fablabchemnitz/animate_order/vivus-0.4.6/.travis.yml new file mode 100644 index 00000000..a4726d41 --- /dev/null +++ b/extensions/fablabchemnitz/animate_order/vivus-0.4.6/.travis.yml @@ -0,0 +1,8 @@ +language: node_js +node_js: + - 'stable' +script: npm run lint && npm run test +before_install: + - export CHROME_BIN=chromium-browser + - export DISPLAY=:99.0 + - sh -e /etc/init.d/xvfb start diff --git a/extensions/fablabchemnitz/animate_order/vivus-0.4.6/CONTRIBUTING.md b/extensions/fablabchemnitz/animate_order/vivus-0.4.6/CONTRIBUTING.md new file mode 100644 index 00000000..26aa7c50 --- /dev/null +++ b/extensions/fablabchemnitz/animate_order/vivus-0.4.6/CONTRIBUTING.md @@ -0,0 +1,7 @@ +# Contributing + +First of all, thanks for contributing, thinking about contributing, or even arriving here by mistake. + +Issues are reserved to mention a problem, a bug or discuss about implementing a feature. If you have any question or support request, please use [Gitter](https://gitter.im/maxwellito/vivus). For every issue, please try to give as much information as you can : version, steps to recreate it, examples (via jsFiddle or something like that). + +About pull requests, please try to contact the maintainer beforehand. He's a kinda human Grumpy Cat trying to avoid features which can be useful for only 1% of users. The warning is only because it would be sad to see contributors spending time a feature that wouldn't be merged. Otherwise, I would recommend you to add a section in the `hacks.md` file. But if it's a bug fix, the chances to be merged are higher. If necessary please think about updating the tests. \ No newline at end of file diff --git a/extensions/fablabchemnitz/animate_order/vivus-0.4.6/LICENSE b/extensions/fablabchemnitz/animate_order/vivus-0.4.6/LICENSE new file mode 100644 index 00000000..cb16e265 --- /dev/null +++ b/extensions/fablabchemnitz/animate_order/vivus-0.4.6/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) maxwellito + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/extensions/fablabchemnitz/animate_order/vivus-0.4.6/assets/delayed.png b/extensions/fablabchemnitz/animate_order/vivus-0.4.6/assets/delayed.png new file mode 100644 index 00000000..39f34125 Binary files /dev/null and b/extensions/fablabchemnitz/animate_order/vivus-0.4.6/assets/delayed.png differ diff --git a/extensions/fablabchemnitz/animate_order/vivus-0.4.6/assets/oneByOne.png b/extensions/fablabchemnitz/animate_order/vivus-0.4.6/assets/oneByOne.png new file mode 100644 index 00000000..d2f22456 Binary files /dev/null and b/extensions/fablabchemnitz/animate_order/vivus-0.4.6/assets/oneByOne.png differ diff --git a/extensions/fablabchemnitz/animate_order/vivus-0.4.6/assets/script_custom.png b/extensions/fablabchemnitz/animate_order/vivus-0.4.6/assets/script_custom.png new file mode 100644 index 00000000..520e37b7 Binary files /dev/null and b/extensions/fablabchemnitz/animate_order/vivus-0.4.6/assets/script_custom.png differ diff --git a/extensions/fablabchemnitz/animate_order/vivus-0.4.6/assets/script_default.png b/extensions/fablabchemnitz/animate_order/vivus-0.4.6/assets/script_default.png new file mode 100644 index 00000000..bd03697e Binary files /dev/null and b/extensions/fablabchemnitz/animate_order/vivus-0.4.6/assets/script_default.png differ diff --git a/extensions/fablabchemnitz/animate_order/vivus-0.4.6/assets/sync.png b/extensions/fablabchemnitz/animate_order/vivus-0.4.6/assets/sync.png new file mode 100644 index 00000000..f792903d Binary files /dev/null and b/extensions/fablabchemnitz/animate_order/vivus-0.4.6/assets/sync.png differ diff --git a/extensions/fablabchemnitz/animate_order/vivus-0.4.6/assets/timelines.svg b/extensions/fablabchemnitz/animate_order/vivus-0.4.6/assets/timelines.svg new file mode 100644 index 00000000..44f1bd06 --- /dev/null +++ b/extensions/fablabchemnitz/animate_order/vivus-0.4.6/assets/timelines.svg @@ -0,0 +1,95 @@ + + + + + + + + time + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extensions/fablabchemnitz/animate_order/vivus-0.4.6/bower.json b/extensions/fablabchemnitz/animate_order/vivus-0.4.6/bower.json new file mode 100644 index 00000000..0e71b32f --- /dev/null +++ b/extensions/fablabchemnitz/animate_order/vivus-0.4.6/bower.json @@ -0,0 +1,16 @@ +{ + "name": "vivus", + "description": "JavaScript library to make drawing animation on SVG", + "main": "dist/vivus.js", + "licence": "MIT", + "ignore": [ + "assets/", + "src/", + "test/", + ".gitignore", + ".jshintrc", + "gulpfile.js", + "index.html", + "package.json" + ] +} \ No newline at end of file diff --git a/extensions/fablabchemnitz/animate_order/vivus-0.4.6/dist/vivus.js b/extensions/fablabchemnitz/animate_order/vivus-0.4.6/dist/vivus.js new file mode 100644 index 00000000..57dbff04 --- /dev/null +++ b/extensions/fablabchemnitz/animate_order/vivus-0.4.6/dist/vivus.js @@ -0,0 +1,1222 @@ +/** + * vivus - JavaScript library to make drawing animation on SVG + * @version v0.4.6 + * @link https://github.com/maxwellito/vivus + * @license MIT + */ + +(function () { + + 'use strict'; + +/** + * Pathformer + * Beta version + * + * Take any SVG version 1.1 and transform + * child elements to 'path' elements + * + * This code is purely forked from + * https://github.com/Waest/SVGPathConverter + */ + +/** + * Class constructor + * + * @param {DOM|String} element Dom element of the SVG or id of it + */ +function Pathformer(element) { + // Test params + if (typeof element === 'undefined') { + throw new Error('Pathformer [constructor]: "element" parameter is required'); + } + + // Set the element + if (element.constructor === String) { + element = document.getElementById(element); + if (!element) { + throw new Error('Pathformer [constructor]: "element" parameter is not related to an existing ID'); + } + } + if (element instanceof window.SVGElement || + element instanceof window.SVGGElement || + /^svg$/i.test(element.nodeName)) { + this.el = element; + } else { + throw new Error('Pathformer [constructor]: "element" parameter must be a string or a SVGelement'); + } + + // Start + this.scan(element); +} + +/** + * List of tags which can be transformed + * to path elements + * + * @type {Array} + */ +Pathformer.prototype.TYPES = ['line', 'ellipse', 'circle', 'polygon', 'polyline', 'rect']; + +/** + * List of attribute names which contain + * data. This array list them to check if + * they contain bad values, like percentage. + * + * @type {Array} + */ +Pathformer.prototype.ATTR_WATCH = ['cx', 'cy', 'points', 'r', 'rx', 'ry', 'x', 'x1', 'x2', 'y', 'y1', 'y2']; + +/** + * Finds the elements compatible for transform + * and apply the liked method + * + * @param {object} options Object from the constructor + */ +Pathformer.prototype.scan = function (svg) { + var fn, element, pathData, pathDom, + elements = svg.querySelectorAll(this.TYPES.join(',')); + + for (var i = 0; i < elements.length; i++) { + element = elements[i]; + fn = this[element.tagName.toLowerCase() + 'ToPath']; + pathData = fn(this.parseAttr(element.attributes)); + pathDom = this.pathMaker(element, pathData); + element.parentNode.replaceChild(pathDom, element); + } +}; + + +/** + * Read `line` element to extract and transform + * data, to make it ready for a `path` object. + * + * @param {DOMelement} element Line element to transform + * @return {object} Data for a `path` element + */ +Pathformer.prototype.lineToPath = function (element) { + var newElement = {}, + x1 = element.x1 || 0, + y1 = element.y1 || 0, + x2 = element.x2 || 0, + y2 = element.y2 || 0; + + newElement.d = 'M' + x1 + ',' + y1 + 'L' + x2 + ',' + y2; + return newElement; +}; + +/** + * Read `rect` element to extract and transform + * data, to make it ready for a `path` object. + * The radius-border is not taken in charge yet. + * (your help is more than welcomed) + * + * @param {DOMelement} element Rect element to transform + * @return {object} Data for a `path` element + */ +Pathformer.prototype.rectToPath = function (element) { + var newElement = {}, + x = parseFloat(element.x) || 0, + y = parseFloat(element.y) || 0, + width = parseFloat(element.width) || 0, + height = parseFloat(element.height) || 0; + + if (element.rx || element.ry) { + var rx = parseInt(element.rx, 10) || -1, + ry = parseInt(element.ry, 10) || -1; + rx = Math.min(Math.max(rx < 0 ? ry : rx, 0), width/2); + ry = Math.min(Math.max(ry < 0 ? rx : ry, 0), height/2); + + newElement.d = 'M ' + (x + rx) + ',' + y + ' ' + + 'L ' + (x + width - rx) + ',' + y + ' ' + + 'A ' + rx + ',' + ry + ',0,0,1,' + (x + width) + ',' + (y + ry) + ' ' + + 'L ' + (x + width) + ',' + (y + height - ry) + ' ' + + 'A ' + rx + ',' + ry + ',0,0,1,' + (x + width - rx) + ',' + (y + height) + ' ' + + 'L ' + (x + rx) + ',' + (y + height) + ' ' + + 'A ' + rx + ',' + ry + ',0,0,1,' + x + ',' + (y + height - ry) + ' ' + + 'L ' + x + ',' + (y + ry) + ' ' + + 'A ' + rx + ',' + ry + ',0,0,1,' + (x + rx) + ',' + y; + } + else { + newElement.d = 'M' + x + ' ' + y + ' ' + + 'L' + (x + width) + ' ' + y + ' ' + + 'L' + (x + width) + ' ' + (y + height) + ' ' + + 'L' + x + ' ' + (y + height) + ' Z'; + } + return newElement; +}; + +/** + * Read `polyline` element to extract and transform + * data, to make it ready for a `path` object. + * + * @param {DOMelement} element Polyline element to transform + * @return {object} Data for a `path` element + */ +Pathformer.prototype.polylineToPath = function (element) { + var newElement = {}, + points = element.points.trim().split(' '), + i, path; + + // Reformatting if points are defined without commas + if (element.points.indexOf(',') === -1) { + var formattedPoints = []; + for (i = 0; i < points.length; i+=2) { + formattedPoints.push(points[i] + ',' + points[i+1]); + } + points = formattedPoints; + } + + // Generate the path.d value + path = 'M' + points[0]; + for(i = 1; i < points.length; i++) { + if (points[i].indexOf(',') !== -1) { + path += 'L' + points[i]; + } + } + newElement.d = path; + return newElement; +}; + +/** + * Read `polygon` element to extract and transform + * data, to make it ready for a `path` object. + * This method rely on polylineToPath, because the + * logic is similar. The path created is just closed, + * so it needs an 'Z' at the end. + * + * @param {DOMelement} element Polygon element to transform + * @return {object} Data for a `path` element + */ +Pathformer.prototype.polygonToPath = function (element) { + var newElement = Pathformer.prototype.polylineToPath(element); + + newElement.d += 'Z'; + return newElement; +}; + +/** + * Read `ellipse` element to extract and transform + * data, to make it ready for a `path` object. + * + * @param {DOMelement} element ellipse element to transform + * @return {object} Data for a `path` element + */ +Pathformer.prototype.ellipseToPath = function (element) { + var newElement = {}, + rx = parseFloat(element.rx) || 0, + ry = parseFloat(element.ry) || 0, + cx = parseFloat(element.cx) || 0, + cy = parseFloat(element.cy) || 0, + startX = cx - rx, + startY = cy, + endX = parseFloat(cx) + parseFloat(rx), + endY = cy; + + newElement.d = 'M' + startX + ',' + startY + + 'A' + rx + ',' + ry + ' 0,1,1 ' + endX + ',' + endY + + 'A' + rx + ',' + ry + ' 0,1,1 ' + startX + ',' + endY; + return newElement; +}; + +/** + * Read `circle` element to extract and transform + * data, to make it ready for a `path` object. + * + * @param {DOMelement} element Circle element to transform + * @return {object} Data for a `path` element + */ +Pathformer.prototype.circleToPath = function (element) { + var newElement = {}, + r = parseFloat(element.r) || 0, + cx = parseFloat(element.cx) || 0, + cy = parseFloat(element.cy) || 0, + startX = cx - r, + startY = cy, + endX = parseFloat(cx) + parseFloat(r), + endY = cy; + + newElement.d = 'M' + startX + ',' + startY + + 'A' + r + ',' + r + ' 0,1,1 ' + endX + ',' + endY + + 'A' + r + ',' + r + ' 0,1,1 ' + startX + ',' + endY; + return newElement; +}; + +/** + * Create `path` elements form original element + * and prepared objects + * + * @param {DOMelement} element Original element to transform + * @param {object} pathData Path data (from `toPath` methods) + * @return {DOMelement} Path element + */ +Pathformer.prototype.pathMaker = function (element, pathData) { + var i, attr, pathTag = document.createElementNS('http://www.w3.org/2000/svg','path'); + for(i = 0; i < element.attributes.length; i++) { + attr = element.attributes[i]; + if (this.ATTR_WATCH.indexOf(attr.name) === -1) { + pathTag.setAttribute(attr.name, attr.value); + } + } + for(i in pathData) { + pathTag.setAttribute(i, pathData[i]); + } + return pathTag; +}; + +/** + * Parse attributes of a DOM element to + * get an object of attribute => value + * + * @param {NamedNodeMap} attributes Attributes object from DOM element to parse + * @return {object} Object of attributes + */ +Pathformer.prototype.parseAttr = function (element) { + var attr, output = {}; + for (var i = 0; i < element.length; i++) { + attr = element[i]; + // Check if no data attribute contains '%', or the transformation is impossible + if (this.ATTR_WATCH.indexOf(attr.name) !== -1 && attr.value.indexOf('%') !== -1) { + throw new Error('Pathformer [parseAttr]: a SVG shape got values in percentage. This cannot be transformed into \'path\' tags. Please use \'viewBox\'.'); + } + output[attr.name] = attr.value; + } + return output; +}; + + 'use strict'; + +var setupEnv, requestAnimFrame, cancelAnimFrame, parsePositiveInt; + +/** + * Vivus + * Beta version + * + * Take any SVG and make the animation + * to give give the impression of live drawing + * + * This in more than just inspired from codrops + * At that point, it's a pure fork. + */ + +/** + * Class constructor + * option structure + * type: 'delayed'|'sync'|'oneByOne'|'script' (to know if the items must be drawn synchronously or not, default: delayed) + * duration: (in frames) + * start: 'inViewport'|'manual'|'autostart' (start automatically the animation, default: inViewport) + * delay: (delay between the drawing of first and last path) + * dashGap whitespace extra margin between dashes + * pathTimingFunction timing animation function for each path element of the SVG + * animTimingFunction timing animation function for the complete SVG + * forceRender force the browser to re-render all updated path items + * selfDestroy removes all extra styling on the SVG, and leaves it as original + * + * The attribute 'type' is by default on 'delayed'. + * - 'delayed' + * all paths are draw at the same time but with a + * little delay between them before start + * - 'sync' + * all path are start and finish at the same time + * - 'oneByOne' + * only one path is draw at the time + * the end of the first one will trigger the draw + * of the next one + * + * All these values can be overwritten individually + * for each path item in the SVG + * The value of frames will always take the advantage of + * the duration value. + * If you fail somewhere, an error will be thrown. + * Good luck. + * + * @constructor + * @this {Vivus} + * @param {DOM|String} element Dom element of the SVG or id of it + * @param {Object} options Options about the animation + * @param {Function} callback Callback for the end of the animation + */ +function Vivus(element, options, callback) { + setupEnv(); + + // Setup + this.isReady = false; + this.setElement(element, options); + this.setOptions(options); + this.setCallback(callback); + + if (this.isReady) { + this.init(); + } +} + +/** + * Timing functions + ************************************** + * + * Default functions to help developers. + * It always take a number as parameter (between 0 to 1) then + * return a number (between 0 and 1) + */ +Vivus.LINEAR = function(x) { + return x; +}; +Vivus.EASE = function(x) { + return -Math.cos(x * Math.PI) / 2 + 0.5; +}; +Vivus.EASE_OUT = function(x) { + return 1 - Math.pow(1 - x, 3); +}; +Vivus.EASE_IN = function(x) { + return Math.pow(x, 3); +}; +Vivus.EASE_OUT_BOUNCE = function(x) { + var base = -Math.cos(x * (0.5 * Math.PI)) + 1, + rate = Math.pow(base, 1.5), + rateR = Math.pow(1 - x, 2), + progress = -Math.abs(Math.cos(rate * (2.5 * Math.PI))) + 1; + return 1 - rateR + progress * rateR; +}; + +/** + * Setters + ************************************** + */ + +/** + * Check and set the element in the instance + * The method will not return anything, but will throw an + * error if the parameter is invalid + * + * @param {DOM|String} element SVG Dom element or id of it + */ +Vivus.prototype.setElement = function(element, options) { + var onLoad, self; + + // Basic check + if (typeof element === 'undefined') { + throw new Error('Vivus [constructor]: "element" parameter is required'); + } + + // Set the element + if (element.constructor === String) { + element = document.getElementById(element); + if (!element) { + throw new Error( + 'Vivus [constructor]: "element" parameter is not related to an existing ID' + ); + } + } + this.parentEl = element; + + // Load the SVG with XMLHttpRequest and extract the SVG + if (options && options.file) { + self = this; + onLoad = function() { + var domSandbox = document.createElement('div'); + domSandbox.innerHTML = this.responseText; + + var svgTag = domSandbox.querySelector('svg'); + if (!svgTag) { + throw new Error( + 'Vivus [load]: Cannot find the SVG in the loaded file : ' + + options.file + ); + } + + self.el = svgTag; + self.el.setAttribute('width', '100%'); + self.el.setAttribute('height', '100%'); + self.parentEl.appendChild(self.el); + self.isReady = true; + self.init(); + self = null; + }; + + var oReq = new window.XMLHttpRequest(); + oReq.addEventListener('load', onLoad); + oReq.open('GET', options.file); + oReq.send(); + return; + } + + switch (element.constructor) { + case window.SVGSVGElement: + case window.SVGElement: + case window.SVGGElement: + this.el = element; + this.isReady = true; + break; + + case window.HTMLObjectElement: + self = this; + onLoad = function(e) { + if (self.isReady) { + return; + } + self.el = + element.contentDocument && + element.contentDocument.querySelector('svg'); + if (!self.el && e) { + throw new Error( + 'Vivus [constructor]: object loaded does not contain any SVG' + ); + } else if (self.el) { + if (element.getAttribute('built-by-vivus')) { + self.parentEl.insertBefore(self.el, element); + self.parentEl.removeChild(element); + self.el.setAttribute('width', '100%'); + self.el.setAttribute('height', '100%'); + } + self.isReady = true; + self.init(); + self = null; + } + }; + + if (!onLoad()) { + element.addEventListener('load', onLoad); + } + break; + + default: + throw new Error( + 'Vivus [constructor]: "element" parameter is not valid (or miss the "file" attribute)' + ); + } +}; + +/** + * Set up user option to the instance + * The method will not return anything, but will throw an + * error if the parameter is invalid + * + * @param {object} options Object from the constructor + */ +Vivus.prototype.setOptions = function(options) { + var allowedTypes = [ + 'delayed', + 'sync', + 'async', + 'nsync', + 'oneByOne', + 'scenario', + 'scenario-sync' + ]; + var allowedStarts = ['inViewport', 'manual', 'autostart']; + + // Basic check + if (options !== undefined && options.constructor !== Object) { + throw new Error( + 'Vivus [constructor]: "options" parameter must be an object' + ); + } else { + options = options || {}; + } + + // Set the animation type + if (options.type && allowedTypes.indexOf(options.type) === -1) { + throw new Error( + 'Vivus [constructor]: ' + + options.type + + ' is not an existing animation `type`' + ); + } else { + this.type = options.type || allowedTypes[0]; + } + + // Set the start type + if (options.start && allowedStarts.indexOf(options.start) === -1) { + throw new Error( + 'Vivus [constructor]: ' + + options.start + + ' is not an existing `start` option' + ); + } else { + this.start = options.start || allowedStarts[0]; + } + + this.isIE = + window.navigator.userAgent.indexOf('MSIE') !== -1 || + window.navigator.userAgent.indexOf('Trident/') !== -1 || + window.navigator.userAgent.indexOf('Edge/') !== -1; + this.duration = parsePositiveInt(options.duration, 120); + this.delay = parsePositiveInt(options.delay, null); + this.dashGap = parsePositiveInt(options.dashGap, 1); + this.forceRender = options.hasOwnProperty('forceRender') + ? !!options.forceRender + : this.isIE; + this.reverseStack = !!options.reverseStack; + this.selfDestroy = !!options.selfDestroy; + this.onReady = options.onReady; + this.map = []; + this.frameLength = this.currentFrame = this.delayUnit = this.speed = this.handle = null; + + this.ignoreInvisible = options.hasOwnProperty('ignoreInvisible') + ? !!options.ignoreInvisible + : false; + + this.animTimingFunction = options.animTimingFunction || Vivus.LINEAR; + this.pathTimingFunction = options.pathTimingFunction || Vivus.LINEAR; + + if (this.delay >= this.duration) { + throw new Error('Vivus [constructor]: delay must be shorter than duration'); + } +}; + +/** + * Set up callback to the instance + * The method will not return enything, but will throw an + * error if the parameter is invalid + * + * @param {Function} callback Callback for the animation end + */ +Vivus.prototype.setCallback = function(callback) { + // Basic check + if (!!callback && callback.constructor !== Function) { + throw new Error( + 'Vivus [constructor]: "callback" parameter must be a function' + ); + } + this.callback = callback || function() {}; +}; + +/** + * Core + ************************************** + */ + +/** + * Map the svg, path by path. + * The method return nothing, it just fill the + * `map` array. Each item in this array represent + * a path element from the SVG, with informations for + * the animation. + * + * ``` + * [ + * { + * el: the path element + * length: length of the path line + * startAt: time start of the path animation (in frames) + * duration: path animation duration (in frames) + * }, + * ... + * ] + * ``` + * + */ +Vivus.prototype.mapping = function() { + var i, paths, path, pAttrs, pathObj, totalLength, lengthMeter, timePoint, scale, hasNonScale; + timePoint = totalLength = lengthMeter = 0; + paths = this.el.querySelectorAll('path'); + hasNonScale = false; + + for (i = 0; i < paths.length; i++) { + path = paths[i]; + if (this.isInvisible(path)) { + continue; + } + + pathObj = { + el: path, + length: 0, + startAt: 0, + duration: 0, + isResizeSensitive: false + }; + + // If vector effect is non-scaling-stroke, the total length won't match the rendered length + // so we need to calculate the scale and apply it + if (path.getAttribute('vector-effect') === 'non-scaling-stroke') { + var rect = path.getBoundingClientRect(); + var box = path.getBBox(); + scale = Math.max(rect.width / box.width, rect.height / box.height); + pathObj.isResizeSensitive = true; + hasNonScale = true; + } else { + scale = 1; + } + pathObj.length = Math.ceil(path.getTotalLength() * scale); + + // Test if the path length is correct + if (isNaN(pathObj.length)) { + if (window.console && console.warn) { + console.warn( + 'Vivus [mapping]: cannot retrieve a path element length', + path + ); + } + continue; + } + this.map.push(pathObj); + path.style.strokeDasharray = + pathObj.length + ' ' + (pathObj.length + this.dashGap * 2); + path.style.strokeDashoffset = pathObj.length + this.dashGap; + pathObj.length += this.dashGap; + totalLength += pathObj.length; + + this.renderPath(i); + } + + // Show a warning for non-scaling elements + if (hasNonScale) { + console.warn('Vivus: this SVG contains non-scaling-strokes. You should call instance.recalc() when the SVG is resized or you will encounter unwanted behaviour. See https://github.com/maxwellito/vivus#non-scaling for more info.'); + } + + totalLength = totalLength === 0 ? 1 : totalLength; + this.delay = this.delay === null ? this.duration / 3 : this.delay; + this.delayUnit = this.delay / (paths.length > 1 ? paths.length - 1 : 1); + + // Reverse stack if asked + if (this.reverseStack) { + this.map.reverse(); + } + + for (i = 0; i < this.map.length; i++) { + pathObj = this.map[i]; + + switch (this.type) { + case 'delayed': + pathObj.startAt = this.delayUnit * i; + pathObj.duration = this.duration - this.delay; + break; + + case 'oneByOne': + pathObj.startAt = (lengthMeter / totalLength) * this.duration; + pathObj.duration = (pathObj.length / totalLength) * this.duration; + break; + + case 'sync': + case 'async': + case 'nsync': + pathObj.startAt = 0; + pathObj.duration = this.duration; + break; + + case 'scenario-sync': + path = pathObj.el; + pAttrs = this.parseAttr(path); + pathObj.startAt = + timePoint + + (parsePositiveInt(pAttrs['data-delay'], this.delayUnit) || 0); + pathObj.duration = parsePositiveInt( + pAttrs['data-duration'], + this.duration + ); + timePoint = + pAttrs['data-async'] !== undefined + ? pathObj.startAt + : pathObj.startAt + pathObj.duration; + this.frameLength = Math.max( + this.frameLength, + pathObj.startAt + pathObj.duration + ); + break; + + case 'scenario': + path = pathObj.el; + pAttrs = this.parseAttr(path); + pathObj.startAt = + parsePositiveInt(pAttrs['data-start'], this.delayUnit) || 0; + pathObj.duration = parsePositiveInt( + pAttrs['data-duration'], + this.duration + ); + this.frameLength = Math.max( + this.frameLength, + pathObj.startAt + pathObj.duration + ); + break; + } + lengthMeter += pathObj.length; + this.frameLength = this.frameLength || this.duration; + } +}; + +/** + * Public method to re-evaluate line length for non-scaling lines + * path elements. + */ +Vivus.prototype.recalc = function () { + if (this.mustRecalcScale) { + return; + } + this.mustRecalcScale = requestAnimFrame(function () { + this.performLineRecalc(); + }.bind(this)); +} + +/** + * Private method to re-evaluate line length on non-scaling + * path elements. Then call for a trace to update the SVG. + */ +Vivus.prototype.performLineRecalc = function () { + var pathObj, path, rect, box, scale; + for (var i = 0; i < this.map.length; i++) { + pathObj = this.map[i]; + if (pathObj.isResizeSensitive) { + path = pathObj.el; + rect = path.getBoundingClientRect(); + box = path.getBBox(); + scale = Math.max(rect.width / box.width, rect.height / box.height); + pathObj.length = Math.ceil(path.getTotalLength() * scale); + path.style.strokeDasharray = pathObj.length + ' ' + (pathObj.length + this.dashGap * 2); + } + } + this.trace(); + this.mustRecalcScale = null; +} + +/** + * Interval method to draw the SVG from current + * position of the animation. It update the value of + * `currentFrame` and re-trace the SVG. + * + * It use this.handle to store the requestAnimationFrame + * and clear it one the animation is stopped. So this + * attribute can be used to know if the animation is + * playing. + * + * Once the animation at the end, this method will + * trigger the Vivus callback. + * + */ +Vivus.prototype.draw = function() { + var self = this; + this.currentFrame += this.speed; + + if (this.currentFrame <= 0) { + this.stop(); + this.reset(); + } else if (this.currentFrame >= this.frameLength) { + this.stop(); + this.currentFrame = this.frameLength; + this.trace(); + if (this.selfDestroy) { + this.destroy(); + } + } else { + this.trace(); + this.handle = requestAnimFrame(function() { + self.draw(); + }); + return; + } + + this.callback(this); + if (this.instanceCallback) { + this.instanceCallback(this); + this.instanceCallback = null; + } +}; + +/** + * Draw the SVG at the current instant from the + * `currentFrame` value. Here is where most of the magic is. + * The trick is to use the `strokeDashoffset` style property. + * + * For optimisation reasons, a new property called `progress` + * is added in each item of `map`. This one contain the current + * progress of the path element. Only if the new value is different + * the new value will be applied to the DOM element. This + * method save a lot of resources to re-render the SVG. And could + * be improved if the animation couldn't be played forward. + * + */ +Vivus.prototype.trace = function() { + var i, progress, path, currentFrame; + currentFrame = + this.animTimingFunction(this.currentFrame / this.frameLength) * + this.frameLength; + for (i = 0; i < this.map.length; i++) { + path = this.map[i]; + progress = (currentFrame - path.startAt) / path.duration; + progress = this.pathTimingFunction(Math.max(0, Math.min(1, progress))); + if (path.progress !== progress) { + path.progress = progress; + path.el.style.strokeDashoffset = Math.floor(path.length * (1 - progress)); + this.renderPath(i); + } + } +}; + +/** + * Method forcing the browser to re-render a path element + * from it's index in the map. Depending on the `forceRender` + * value. + * The trick is to replace the path element by it's clone. + * This practice is not recommended because it's asking more + * ressources, too much DOM manupulation.. + * but it's the only way to let the magic happen on IE. + * By default, this fallback is only applied on IE. + * + * @param {Number} index Path index + */ +Vivus.prototype.renderPath = function(index) { + if (this.forceRender && this.map && this.map[index]) { + var pathObj = this.map[index], + newPath = pathObj.el.cloneNode(true); + pathObj.el.parentNode.replaceChild(newPath, pathObj.el); + pathObj.el = newPath; + } +}; + +/** + * When the SVG object is loaded and ready, + * this method will continue the initialisation. + * + * This this mainly due to the case of passing an + * object tag in the constructor. It will wait + * the end of the loading to initialise. + * + */ +Vivus.prototype.init = function() { + // Set object variables + this.frameLength = 0; + this.currentFrame = 0; + this.map = []; + + // Start + new Pathformer(this.el); + this.mapping(); + this.starter(); + + if (this.onReady) { + this.onReady(this); + } +}; + +/** + * Trigger to start of the animation. + * Depending on the `start` value, a different script + * will be applied. + * + * If the `start` value is not valid, an error will be thrown. + * Even if technically, this is impossible. + * + */ +Vivus.prototype.starter = function() { + switch (this.start) { + case 'manual': + return; + + case 'autostart': + this.play(); + break; + + case 'inViewport': + var self = this, + listener = function() { + if (self.isInViewport(self.parentEl, 1)) { + self.play(); + window.removeEventListener('scroll', listener); + } + }; + window.addEventListener('scroll', listener); + listener(); + break; + } +}; + +/** + * Controls + ************************************** + */ + +/** + * Get the current status of the animation between + * three different states: 'start', 'progress', 'end'. + * @return {string} Instance status + */ +Vivus.prototype.getStatus = function() { + return this.currentFrame === 0 + ? 'start' + : this.currentFrame === this.frameLength + ? 'end' + : 'progress'; +}; + +/** + * Reset the instance to the initial state : undraw + * Be careful, it just reset the animation, if you're + * playing the animation, this won't stop it. But just + * make it start from start. + * + */ +Vivus.prototype.reset = function() { + return this.setFrameProgress(0); +}; + +/** + * Set the instance to the final state : drawn + * Be careful, it just set the animation, if you're + * playing the animation on rewind, this won't stop it. + * But just make it start from the end. + * + */ +Vivus.prototype.finish = function() { + return this.setFrameProgress(1); +}; + +/** + * Set the level of progress of the drawing. + * + * @param {number} progress Level of progress to set + */ +Vivus.prototype.setFrameProgress = function(progress) { + progress = Math.min(1, Math.max(0, progress)); + this.currentFrame = Math.round(this.frameLength * progress); + this.trace(); + return this; +}; + +/** + * Play the animation at the desired speed. + * Speed must be a valid number (no zero). + * By default, the speed value is 1. + * But a negative value is accepted to go forward. + * + * And works with float too. + * But don't forget we are in JavaScript, se be nice + * with him and give him a 1/2^x value. + * + * @param {number} speed Animation speed [optional] + */ +Vivus.prototype.play = function(speed, callback) { + this.instanceCallback = null; + + if (speed && typeof speed === 'function') { + this.instanceCallback = speed; // first parameter is actually the callback function + speed = null; + } else if (speed && typeof speed !== 'number') { + throw new Error('Vivus [play]: invalid speed'); + } + // if the first parameter wasn't the callback, check if the seconds was + if (callback && typeof callback === 'function' && !this.instanceCallback) { + this.instanceCallback = callback; + } + + this.speed = speed || 1; + if (!this.handle) { + this.draw(); + } + return this; +}; + +/** + * Stop the current animation, if on progress. + * Should not trigger any error. + * + */ +Vivus.prototype.stop = function() { + if (this.handle) { + cancelAnimFrame(this.handle); + this.handle = null; + } + return this; +}; + +/** + * Destroy the instance. + * Remove all bad styling attributes on all + * path tags + * + */ +Vivus.prototype.destroy = function() { + this.stop(); + var i, path; + for (i = 0; i < this.map.length; i++) { + path = this.map[i]; + path.el.style.strokeDashoffset = null; + path.el.style.strokeDasharray = null; + this.renderPath(i); + } +}; + +/** + * Utils methods + * include methods from Codrops + ************************************** + */ + +/** + * Method to best guess if a path should added into + * the animation or not. + * + * 1. Use the `data-vivus-ignore` attribute if set + * 2. Check if the instance must ignore invisible paths + * 3. Check if the path is visible + * + * For now the visibility checking is unstable. + * It will be used for a beta phase. + * + * Other improvments are planned. Like detecting + * is the path got a stroke or a valid opacity. + */ +Vivus.prototype.isInvisible = function(el) { + var rect, + ignoreAttr = el.getAttribute('data-ignore'); + + if (ignoreAttr !== null) { + return ignoreAttr !== 'false'; + } + + if (this.ignoreInvisible) { + rect = el.getBoundingClientRect(); + return !rect.width && !rect.height; + } else { + return false; + } +}; + +/** + * Parse attributes of a DOM element to + * get an object of {attributeName => attributeValue} + * + * @param {object} element DOM element to parse + * @return {object} Object of attributes + */ +Vivus.prototype.parseAttr = function(element) { + var attr, + output = {}; + if (element && element.attributes) { + for (var i = 0; i < element.attributes.length; i++) { + attr = element.attributes[i]; + output[attr.name] = attr.value; + } + } + return output; +}; + +/** + * Reply if an element is in the page viewport + * + * @param {object} el Element to observe + * @param {number} h Percentage of height + * @return {boolean} + */ +Vivus.prototype.isInViewport = function(el, h) { + var scrolled = this.scrollY(), + viewed = scrolled + this.getViewportH(), + elBCR = el.getBoundingClientRect(), + elHeight = elBCR.height, + elTop = scrolled + elBCR.top, + elBottom = elTop + elHeight; + + // if 0, the element is considered in the viewport as soon as it enters. + // if 1, the element is considered in the viewport only when it's fully inside + // value in percentage (1 >= h >= 0) + h = h || 0; + + return elTop + elHeight * h <= viewed && elBottom >= scrolled; +}; + +/** + * Get the viewport height in pixels + * + * @return {integer} Viewport height + */ +Vivus.prototype.getViewportH = function() { + var client = this.docElem.clientHeight, + inner = window.innerHeight; + + if (client < inner) { + return inner; + } else { + return client; + } +}; + +/** + * Get the page Y offset + * + * @return {integer} Page Y offset + */ +Vivus.prototype.scrollY = function() { + return window.pageYOffset || this.docElem.scrollTop; +}; + +setupEnv = function() { + if (Vivus.prototype.docElem) { + return; + } + + /** + * Alias for document element + * + * @type {DOMelement} + */ + Vivus.prototype.docElem = window.document.documentElement; + + /** + * Alias for `requestAnimationFrame` or + * `setTimeout` function for deprecated browsers. + * + */ + requestAnimFrame = (function() { + return ( + window.requestAnimationFrame || + window.webkitRequestAnimationFrame || + window.mozRequestAnimationFrame || + window.oRequestAnimationFrame || + window.msRequestAnimationFrame || + function(/* function */ callback) { + return window.setTimeout(callback, 1000 / 60); + } + ); + })(); + + /** + * Alias for `cancelAnimationFrame` or + * `cancelTimeout` function for deprecated browsers. + * + */ + cancelAnimFrame = (function() { + return ( + window.cancelAnimationFrame || + window.webkitCancelAnimationFrame || + window.mozCancelAnimationFrame || + window.oCancelAnimationFrame || + window.msCancelAnimationFrame || + function(id) { + return window.clearTimeout(id); + } + ); + })(); +}; + +/** + * Parse string to integer. + * If the number is not positive or null + * the method will return the default value + * or 0 if undefined + * + * @param {string} value String to parse + * @param {*} defaultValue Value to return if the result parsed is invalid + * @return {number} + * + */ +parsePositiveInt = function(value, defaultValue) { + var output = parseInt(value, 10); + return output >= 0 ? output : defaultValue; +}; + + + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define([], function() { + return Vivus; + }); + } else if (typeof exports === 'object') { + // Node. Does not work with strict CommonJS, but + // only CommonJS-like environments that support module.exports, + // like Node. + module.exports = Vivus; + } else { + // Browser globals + window.Vivus = Vivus; + } + +}()); + diff --git a/extensions/fablabchemnitz/animate_order/vivus-0.4.6/dist/vivus.min.js b/extensions/fablabchemnitz/animate_order/vivus-0.4.6/dist/vivus.min.js new file mode 100644 index 00000000..e6d6596a --- /dev/null +++ b/extensions/fablabchemnitz/animate_order/vivus-0.4.6/dist/vivus.min.js @@ -0,0 +1 @@ +!function(){"use strict";function n(t){if(void 0===t)throw new Error('Pathformer [constructor]: "element" parameter is required');if(t.constructor===String&&!(t=document.getElementById(t)))throw new Error('Pathformer [constructor]: "element" parameter is not related to an existing ID');if(!(t instanceof window.SVGElement||t instanceof window.SVGGElement||/^svg$/i.test(t.nodeName)))throw new Error('Pathformer [constructor]: "element" parameter must be a string or a SVGelement');this.el=t,this.scan(t)}var r,e,t,p;function i(t,e,n){r(),this.isReady=!1,this.setElement(t,e),this.setOptions(e),this.setCallback(n),this.isReady&&this.init()}n.prototype.TYPES=["line","ellipse","circle","polygon","polyline","rect"],n.prototype.ATTR_WATCH=["cx","cy","points","r","rx","ry","x","x1","x2","y","y1","y2"],n.prototype.scan=function(t){for(var e,n,r,i=t.querySelectorAll(this.TYPES.join(",")),a=0;a=this.duration)throw new Error("Vivus [constructor]: delay must be shorter than duration")},i.prototype.setCallback=function(t){if(t&&t.constructor!==Function)throw new Error('Vivus [constructor]: "callback" parameter must be a function');this.callback=t||function(){}},i.prototype.mapping=function(){var t,e,n,r,i,a,o,s,h,l;for(s=a=o=0,e=this.el.querySelectorAll("path"),l=!1,t=0;t=this.frameLength))return this.trace(),void(this.handle=e(function(){t.draw()}));this.stop(),this.currentFrame=this.frameLength,this.trace(),this.selfDestroy&&this.destroy()}this.callback(this),this.instanceCallback&&(this.instanceCallback(this),this.instanceCallback=null)},i.prototype.trace=function(){var t,e,n,r;for(r=this.animTimingFunction(this.currentFrame/this.frameLength)*this.frameLength,t=0;t + + + + + + vivus.js - svg animation + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+

vivus, bringing your SVGs to life

+

Vivus is a lightweight JavaScript class (with no dependencies) that allows you to animate SVGs, giving them the appearence of being drawn. There are a variety of different animations available, as well as the option to create a custom script to draw your SVG in whatever way you like.

+ + +
+ + +
+
+ +

Animation types

+
+
+ + + + + + + + + + + + + + +
+

Delayed

+

Every path element is drawn at the same time with a small delay at the start. This is currently the default animation.

+ +
+
+ +
+ + + + + + + + + + + + + + +
+

Sync

+

Each line is drawn synchronously. They all start and finish at the same time, hence the name `sync`.

+ +
+
+ +
+ + + + + + + + + + + + + + +
+

OneByOne

+

Each path element is drawn one after the other. This animation gives the best impression of live drawing.

+ +
+
+
+
+
+
+ + +
+
+ +

Timing function

+

To give more freedom, it's possible to override the animation of each path and/or the entire SVG. It works a bit like the CSS animation timing function. But instead of using a cubic-bezier function, it use a simple JavaScript function. It must accept a number as parameter (between 0 to 1), then return a number (also between 0 and 1). It's a hook.

+

Here an example test to play around with the different properties available.

+ +
+ + + + + + + + + + +
+

Type + + + + + +

+

Path timing function + + + + + + + +

+

Anim timing function + + + + + + + +

+
+
+
+
+ + +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

Scenarize

+

This feature allows you to script the animation of your SVG. To do this, the custom values will be set directly in the DOM of the SVG.

+

Here is an example using scenario-sync.
I would recommend you look at the source code and the readme file for more information.

+ + +
+
+ +
+
+
+ + +
+
+

Play with it on Vivus instant.

+

More information and documentation on GitHub.

+
+
+ + +
+

Thanks for watching.

+

Made with love a keyboard

+
+ + + + + + diff --git a/extensions/fablabchemnitz/animate_order/vivus-0.4.6/package-lock.json b/extensions/fablabchemnitz/animate_order/vivus-0.4.6/package-lock.json new file mode 100644 index 00000000..58ddfac5 --- /dev/null +++ b/extensions/fablabchemnitz/animate_order/vivus-0.4.6/package-lock.json @@ -0,0 +1,4325 @@ +{ + "name": "vivus", + "version": "0.4.4", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/code-frame": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", + "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", + "dev": true, + "requires": { + "@babel/highlight": "^7.0.0" + } + }, + "@babel/highlight": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", + "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + } + }, + "abbrev": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", + "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=", + "dev": true + }, + "accepts": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", + "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", + "dev": true, + "requires": { + "mime-types": "~2.1.18", + "negotiator": "0.6.1" + } + }, + "acorn": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", + "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==", + "dev": true + }, + "acorn-jsx": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz", + "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==", + "dev": true + }, + "after": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", + "dev": true + }, + "ajv": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", + "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true, + "optional": true + }, + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "arraybuffer.slice": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", + "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==", + "dev": true + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true + }, + "async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz", + "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==", + "dev": true, + "requires": { + "lodash": "^4.17.11" + } + }, + "async-each": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.2.tgz", + "integrity": "sha512-6xrbvN0MOBKSJDdonmSSz2OwFSgxRaVtBDes26mj9KIGtDo+g9xosFRSC+i1gQh2oAN/tQ62AI/pGZGQjVOiRg==", + "dev": true + }, + "async-limiter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", + "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==", + "dev": true + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true + }, + "backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "base64-arraybuffer": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", + "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", + "dev": true + }, + "base64id": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", + "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=", + "dev": true + }, + "better-assert": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", + "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", + "dev": true, + "requires": { + "callsite": "1.0.0" + } + }, + "binary-extensions": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.0.tgz", + "integrity": "sha512-EgmjVLMn22z7eGGv3kcnHwSnJXmFHjISTY9E/S5lIcTD3Oxw05QTcBLNkJFzcb3cNueUdF/IN4U+d78V0zO8Hw==", + "dev": true + }, + "blob": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", + "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==", + "dev": true + }, + "bluebird": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz", + "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==", + "dev": true + }, + "body-parser": { + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", + "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", + "dev": true, + "requires": { + "bytes": "3.0.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "~1.6.3", + "iconv-lite": "0.4.23", + "on-finished": "~2.3.0", + "qs": "6.5.2", + "raw-body": "2.3.3", + "type-is": "~1.6.16" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "iconv-lite": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + } + }, + "buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "dev": true, + "requires": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", + "dev": true + }, + "buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", + "dev": true + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", + "dev": true + }, + "callsites": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.0.0.tgz", + "integrity": "sha512-tWnkwu9YEq2uzlBDI4RcLn8jrFvF9AOi8PxDNU3hZZjJcjkcRAq3vCI+vZcg1SuxISDYe86k9VZFwAxDiJGoAw==", + "dev": true + }, + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true + }, + "camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "dev": true, + "requires": { + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "chokidar": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.5.tgz", + "integrity": "sha512-i0TprVWp+Kj4WRPtInjexJ8Q+BqTE909VpH8xVhXrJkoc5QC8VO9TryGOqTr+2hljzc1sC62t22h5tZePodM/A==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + } + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", + "dev": true + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "colors": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.3.tgz", + "integrity": "sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==", + "dev": true + }, + "commander": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", + "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", + "dev": true + }, + "component-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", + "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", + "dev": true + }, + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "component-inherit": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", + "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "connect": { + "version": "3.6.6", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz", + "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=", + "dev": true, + "requires": { + "debug": "2.6.9", + "finalhandler": "1.1.0", + "parseurl": "~1.3.2", + "utils-merge": "1.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true + }, + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", + "dev": true + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "core-js": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.5.tgz", + "integrity": "sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A==", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dev": true, + "requires": { + "array-find-index": "^1.0.1" + } + }, + "custom-event": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", + "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", + "dev": true + }, + "date-format": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-2.0.0.tgz", + "integrity": "sha512-M6UqVvZVgFYqZL1SfHsRGIQSz3ZL+qgbsV5Lp1Vj61LZVYuEwcMXYay7DRDtYs2HQQBK5hQtQ0fD9aEJ89V0LA==", + "dev": true + }, + "dateformat": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", + "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=", + "dev": true, + "requires": { + "get-stdin": "^4.0.1", + "meow": "^3.3.0" + } + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "di": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", + "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", + "dev": true + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-serialize": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", + "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", + "dev": true, + "requires": { + "custom-event": "~1.0.0", + "ent": "~2.2.0", + "extend": "^3.0.0", + "void-elements": "^2.0.0" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, + "engine.io": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.1.tgz", + "integrity": "sha512-+VlKzHzMhaU+GsCIg4AoXF1UdDFjHHwMmMKqMJNDNLlUlejz58FCy4LBqB2YVJskHGYl06BatYWKP2TVdVXE5w==", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "base64id": "1.0.0", + "cookie": "0.3.1", + "debug": "~3.1.0", + "engine.io-parser": "~2.1.0", + "ws": "~3.3.1" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "engine.io-client": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz", + "integrity": "sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw==", + "dev": true, + "requires": { + "component-emitter": "1.2.1", + "component-inherit": "0.0.3", + "debug": "~3.1.0", + "engine.io-parser": "~2.1.1", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "ws": "~3.3.1", + "xmlhttprequest-ssl": "~1.5.4", + "yeast": "0.1.2" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "engine.io-parser": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz", + "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==", + "dev": true, + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "~0.0.7", + "base64-arraybuffer": "0.1.5", + "blob": "0.0.5", + "has-binary2": "~1.0.2" + } + }, + "ent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", + "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", + "dev": true + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "escodegen": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", + "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", + "dev": true, + "requires": { + "esprima": "^2.7.1", + "estraverse": "^1.9.1", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.2.0" + }, + "dependencies": { + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true + }, + "estraverse": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", + "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", + "dev": true + }, + "source-map": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", + "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", + "dev": true, + "optional": true, + "requires": { + "amdefine": ">=0.0.4" + } + } + } + }, + "eslint": { + "version": "5.15.3", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.15.3.tgz", + "integrity": "sha512-vMGi0PjCHSokZxE0NLp2VneGw5sio7SSiDNgIUn2tC0XkWJRNOIoHIg3CliLVfXnJsiHxGAYrkw0PieAu8+KYQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "ajv": "^6.9.1", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "eslint-scope": "^4.0.3", + "eslint-utils": "^1.3.1", + "eslint-visitor-keys": "^1.0.0", + "espree": "^5.0.1", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob": "^7.1.2", + "globals": "^11.7.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "inquirer": "^6.2.2", + "js-yaml": "^3.12.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.11", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.2", + "progress": "^2.0.0", + "regexpp": "^2.0.1", + "semver": "^5.5.1", + "strip-ansi": "^4.0.0", + "strip-json-comments": "^2.0.1", + "table": "^5.2.3", + "text-table": "^0.2.0" + } + }, + "eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.2.tgz", + "integrity": "sha512-eAZS2sEUMlIeCjBeubdj45dmBHQwPHWyBcT1VSYB7o9x9WRRqKxyUoiXlRjyAwzN7YEzHJlYg0NmzDRWx6GP4Q==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.0.0" + } + }, + "eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", + "dev": true + }, + "espree": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz", + "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==", + "dev": true, + "requires": { + "acorn": "^6.0.7", + "acorn-jsx": "^5.0.0", + "eslint-visitor-keys": "^1.0.0" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "esquery": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", + "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", + "dev": true, + "requires": { + "estraverse": "^4.0.0" + } + }, + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "dev": true, + "requires": { + "estraverse": "^4.1.0" + } + }, + "estraverse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "dev": true + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true + }, + "eventemitter3": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz", + "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==", + "dev": true + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "external-editor": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", + "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dev": true, + "requires": { + "flat-cache": "^2.0.1" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + } + }, + "finalhandler": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", + "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.1", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.3.1", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", + "dev": true + } + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + } + }, + "flatted": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.0.tgz", + "integrity": "sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg==", + "dev": true + }, + "follow-redirects": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.7.0.tgz", + "integrity": "sha512-m/pZQy4Gj287eNy94nivy5wchN3Kp+Q5WgUPNy5lJSZ3sgkVKSYV/ZChMAQVIgx1SqfZ2zBZtPA2YlXIWxxJOQ==", + "dev": true, + "requires": { + "debug": "^3.2.6" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "^0.2.2" + } + }, + "fs-access": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", + "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", + "dev": true, + "requires": { + "null-check": "^1.0.0" + } + }, + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.7.tgz", + "integrity": "sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw==", + "dev": true, + "optional": true, + "requires": { + "nan": "^2.9.2", + "node-pre-gyp": "^0.10.0" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "debug": { + "version": "2.6.9", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "glob": { + "version": "7.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.24", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-walk": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "dev": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true + }, + "minipass": { + "version": "2.3.5", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.2.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "needle": { + "version": "2.2.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "^2.1.2", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.10.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "2.6.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true, + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "dev": true, + "optional": true + }, + "semver": { + "version": "5.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "4.4.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.4", + "minizlib": "^1.1.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "wide-align": { + "version": "1.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "yallist": { + "version": "3.0.3", + "bundled": true, + "dev": true + } + } + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "globals": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.11.0.tgz", + "integrity": "sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw==", + "dev": true + }, + "graceful-fs": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", + "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", + "dev": true + }, + "handlebars": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.2.tgz", + "integrity": "sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw==", + "dev": true, + "requires": { + "neo-async": "^2.6.0", + "optimist": "^0.6.1", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4" + } + }, + "has-binary2": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", + "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", + "dev": true, + "requires": { + "isarray": "2.0.1" + }, + "dependencies": { + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", + "dev": true + } + } + }, + "has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "hosted-git-info": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", + "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", + "dev": true + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "http-proxy": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz", + "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==", + "dev": true, + "requires": { + "eventemitter3": "^3.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "import-fresh": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.0.0.tgz", + "integrity": "sha512-pOnA9tfM3Uwics+SaBLCNyZZZbK+4PTu0OPZtLlMIrv17EdBoC15S9Kn8ckJ9TZTyKb3ywNE5y1yeDxxGA7nTQ==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true, + "requires": { + "repeating": "^2.0.0" + } + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "inquirer": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.2.tgz", + "integrity": "sha512-Z2rREiXA6cHRR9KBOarR3WuLlFzlIfAEIiB45ll5SSadMg7WqOh1MKEjjndfuH5ewXdixWCxqnVfGOQzPeiztA==", + "dev": true, + "requires": { + "ansi-escapes": "^3.2.0", + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^2.0.0", + "lodash": "^4.17.11", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^6.4.0", + "string-width": "^2.1.0", + "strip-ansi": "^5.0.0", + "through": "^2.3.6" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-glob": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", + "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", + "dev": true + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isbinaryfile": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz", + "integrity": "sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==", + "dev": true, + "requires": { + "buffer-alloc": "^1.2.0" + } + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "istanbul": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz", + "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", + "dev": true, + "requires": { + "abbrev": "1.0.x", + "async": "1.x", + "escodegen": "1.8.x", + "esprima": "2.7.x", + "glob": "^5.0.15", + "handlebars": "^4.0.1", + "js-yaml": "3.x", + "mkdirp": "0.5.x", + "nopt": "3.x", + "once": "1.x", + "resolve": "1.1.x", + "supports-color": "^3.1.0", + "which": "^1.1.1", + "wordwrap": "^1.0.0" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true + }, + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "dev": true, + "requires": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "jasmine-core": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.3.0.tgz", + "integrity": "sha512-3/xSmG/d35hf80BEN66Y6g9Ca5l/Isdeg/j6zvbTYlTzeKinzmaTM4p9am5kYqOmE05D7s1t8FGjzdSnbUbceA==", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "karma": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/karma/-/karma-4.0.1.tgz", + "integrity": "sha512-ind+4s03BqIXas7ZmraV3/kc5+mnqwCd+VDX1FndS6jxbt03kQKX2vXrWxNLuCjVYmhMwOZosAEKMM0a2q7w7A==", + "dev": true, + "requires": { + "bluebird": "^3.3.0", + "body-parser": "^1.16.1", + "braces": "^2.3.2", + "chokidar": "^2.0.3", + "colors": "^1.1.0", + "connect": "^3.6.0", + "core-js": "^2.2.0", + "di": "^0.0.1", + "dom-serialize": "^2.2.0", + "flatted": "^2.0.0", + "glob": "^7.1.1", + "graceful-fs": "^4.1.2", + "http-proxy": "^1.13.0", + "isbinaryfile": "^3.0.0", + "lodash": "^4.17.11", + "log4js": "^4.0.0", + "mime": "^2.3.1", + "minimatch": "^3.0.2", + "optimist": "^0.6.1", + "qjobs": "^1.1.4", + "range-parser": "^1.2.0", + "rimraf": "^2.6.0", + "safe-buffer": "^5.0.1", + "socket.io": "2.1.1", + "source-map": "^0.6.1", + "tmp": "0.0.33", + "useragent": "2.3.0" + } + }, + "karma-chrome-launcher": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-2.2.0.tgz", + "integrity": "sha512-uf/ZVpAabDBPvdPdveyk1EPgbnloPvFFGgmRhYLTDH7gEB4nZdSBk8yTU47w1g/drLSx5uMOkjKk7IWKfWg/+w==", + "dev": true, + "requires": { + "fs-access": "^1.0.0", + "which": "^1.2.1" + } + }, + "karma-coverage": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-1.1.2.tgz", + "integrity": "sha512-eQawj4Cl3z/CjxslYy9ariU4uDh7cCNFZHNWXWRpl0pNeblY/4wHR7M7boTYXWrn9bY0z2pZmr11eKje/S/hIw==", + "dev": true, + "requires": { + "dateformat": "^1.0.6", + "istanbul": "^0.4.0", + "lodash": "^4.17.0", + "minimatch": "^3.0.0", + "source-map": "^0.5.1" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "karma-jasmine": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-2.0.1.tgz", + "integrity": "sha512-iuC0hmr9b+SNn1DaUD2QEYtUxkS1J+bSJSn7ejdEexs7P8EYvA1CWkEdrDQ+8jVH3AgWlCNwjYsT1chjcNW9lA==", + "dev": true, + "requires": { + "jasmine-core": "^3.3" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + } + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + }, + "log4js": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-4.0.2.tgz", + "integrity": "sha512-KE7HjiieVDPPdveA3bJZSuu0n8chMkFl8mIoisBFxwEJ9FmXe4YzNuiqSwYUiR1K8q8/5/8Yd6AClENY1RA9ww==", + "dev": true, + "requires": { + "date-format": "^2.0.0", + "debug": "^3.1.0", + "flatted": "^2.0.0", + "rfdc": "^1.1.2", + "streamroller": "^1.0.1" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "dev": true, + "requires": { + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" + } + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "^1.0.0" + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "dev": true, + "requires": { + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "dependencies": { + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + } + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "mime": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.0.tgz", + "integrity": "sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w==", + "dev": true + }, + "mime-db": { + "version": "1.38.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.38.0.tgz", + "integrity": "sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg==", + "dev": true + }, + "mime-types": { + "version": "2.1.22", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.22.tgz", + "integrity": "sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog==", + "dev": true, + "requires": { + "mime-db": "~1.38.0" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "dev": true + }, + "nan": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.13.1.tgz", + "integrity": "sha512-I6YB/YEuDeUZMmhscXKxGgZlFnhsn5y0hgOZBadkzfTRrZBtJDZeg6eQf7PYMIEclwmorTKK8GztsyOUSVBREA==", + "dev": true, + "optional": true + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + } + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "negotiator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", + "dev": true + }, + "neo-async": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", + "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, + "requires": { + "abbrev": "1" + } + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "null-check": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/null-check/-/null-check-1.0.0.tgz", + "integrity": "sha1-l33/1xdgErnsMNKjnbXPcqBDnt0=", + "dev": true + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-component": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", + "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=", + "dev": true + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + } + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "^3.0.0" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dev": true, + "requires": { + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" + }, + "dependencies": { + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "dev": true + } + } + }, + "optionator": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.4", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "wordwrap": "~1.0.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "parent-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.0.tgz", + "integrity": "sha512-8Mf5juOMmiE4FcmzYc4IaiS9L3+9paz2KOiXzkRviCP6aDmN49Hz6EMWz0lGNp9pX80GvvAuLADtyGfW/Em3TA==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "parseqs": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", + "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", + "dev": true, + "requires": { + "better-assert": "~1.0.0" + } + }, + "parseuri": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", + "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", + "dev": true, + "requires": { + "better-assert": "~1.0.0" + } + }, + "parseurl": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", + "dev": true + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "dev": true + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "qjobs": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", + "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", + "dev": true + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + }, + "range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", + "dev": true + }, + "raw-body": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", + "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", + "dev": true, + "requires": { + "bytes": "3.0.0", + "http-errors": "1.6.3", + "iconv-lite": "0.4.23", + "unpipe": "1.0.0" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + } + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + } + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "dev": true, + "requires": { + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "dev": true + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "requires": { + "is-finite": "^1.0.0" + } + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "resolve": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", + "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, + "rfdc": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.1.2.tgz", + "integrity": "sha512-92ktAgvZhBzYTIK0Mja9uen5q5J3NRVMoDkJL2VMwq6SXjVCgqvQeVP2XAaUY6HT+XpQYeLSjb3UoitBryKmdA==", + "dev": true + }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "run-async": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "dev": true, + "requires": { + "is-promise": "^2.1.0" + } + }, + "rxjs": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz", + "integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "semver": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", + "dev": true + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + } + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + } + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "requires": { + "kind-of": "^3.2.0" + } + }, + "socket.io": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.1.1.tgz", + "integrity": "sha512-rORqq9c+7W0DAK3cleWNSyfv/qKXV99hV4tZe+gGLfBECw3XEhBy7x85F3wypA9688LKjtwO9pX9L33/xQI8yA==", + "dev": true, + "requires": { + "debug": "~3.1.0", + "engine.io": "~3.2.0", + "has-binary2": "~1.0.2", + "socket.io-adapter": "~1.1.0", + "socket.io-client": "2.1.1", + "socket.io-parser": "~3.2.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "socket.io-adapter": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz", + "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=", + "dev": true + }, + "socket.io-client": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.1.1.tgz", + "integrity": "sha512-jxnFyhAuFxYfjqIgduQlhzqTcOEQSn+OHKVfAxWaNWa7ecP7xSNk2Dx/3UEsDcY7NcFafxvNvKPmmO7HTwTxGQ==", + "dev": true, + "requires": { + "backo2": "1.0.2", + "base64-arraybuffer": "0.1.5", + "component-bind": "1.0.0", + "component-emitter": "1.2.1", + "debug": "~3.1.0", + "engine.io-client": "~3.2.0", + "has-binary2": "~1.0.2", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "object-component": "0.0.3", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "socket.io-parser": "~3.2.0", + "to-array": "0.1.4" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "socket.io-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz", + "integrity": "sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA==", + "dev": true, + "requires": { + "component-emitter": "1.2.1", + "debug": "~3.1.0", + "isarray": "2.0.1" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-resolve": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", + "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", + "dev": true, + "requires": { + "atob": "^2.1.1", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true + }, + "spdx-correct": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", + "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", + "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz", + "integrity": "sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g==", + "dev": true + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.0" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true + }, + "streamroller": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-1.0.3.tgz", + "integrity": "sha512-P7z9NwP51EltdZ81otaGAN3ob+/F88USJE546joNq7bqRNTe6jc74fTBDyynxP4qpIfKlt/CesEYicuMzI0yJg==", + "dev": true, + "requires": { + "async": "^2.6.1", + "date-format": "^2.0.0", + "debug": "^3.1.0", + "fs-extra": "^7.0.0", + "lodash": "^4.17.10" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "^0.2.0" + } + }, + "strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "dev": true, + "requires": { + "get-stdin": "^4.0.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "table": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/table/-/table-5.2.3.tgz", + "integrity": "sha512-N2RsDAMvDLvYwFcwbPyF3VmVSSkuF+G1e+8inhBLtHpvwXGw4QRPEZhihQNeEN0i1up6/f6ObCJXNdlRG3YVyQ==", + "dev": true, + "requires": { + "ajv": "^6.9.1", + "lodash": "^4.17.11", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "to-array": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", + "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", + "dev": true + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "dependencies": { + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + } + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "dev": true + }, + "tslib": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", + "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", + "dev": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "type-is": { + "version": "1.6.16", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", + "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.18" + } + }, + "uglify-js": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.5.2.tgz", + "integrity": "sha512-imog1WIsi9Yb56yRt5TfYVxGmnWs3WSGU73ieSOlMVFwhJCA9W8fqFFMMj4kgDqiS/80LGdsYnWL7O9UcjEBlg==", + "dev": true, + "requires": { + "commander": "~2.19.0", + "source-map": "~0.6.1" + } + }, + "ultron": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", + "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", + "dev": true + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + } + } + }, + "upath": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz", + "integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==", + "dev": true + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true + }, + "useragent": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.3.0.tgz", + "integrity": "sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw==", + "dev": true, + "requires": { + "lru-cache": "4.1.x", + "tmp": "0.0.x" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", + "dev": true + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "dev": true, + "requires": { + "mkdirp": "^0.5.1" + } + }, + "ws": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" + } + }, + "xmlhttprequest-ssl": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", + "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", + "dev": true + } + } +} diff --git a/extensions/fablabchemnitz/animate_order/vivus-0.4.6/package.json b/extensions/fablabchemnitz/animate_order/vivus-0.4.6/package.json new file mode 100644 index 00000000..46d7d789 --- /dev/null +++ b/extensions/fablabchemnitz/animate_order/vivus-0.4.6/package.json @@ -0,0 +1,35 @@ +{ + "name": "vivus", + "version": "0.4.6", + "description": "JavaScript library to make drawing animation on SVG", + "main": "dist/vivus.js", + "scripts": { + "test": "karma start test/karma.conf.js", + "serve": "python -m SimpleHTTPServer 8844", + "lint": "./node_modules/eslint/bin/eslint.js src test", + "build": "npm run build-raw && npm run build-min", + "build-raw": "node src/_build.js > dist/vivus.js", + "build-min": "uglifyjs dist/vivus.js -o dist/vivus.min.js -c -m --source-map" + }, + "repository": { + "type": "git", + "url": "https://github.com/maxwellito/vivus.git" + }, + "author": "maxwellito", + "license": "MIT", + "bugs": { + "url": "https://github.com/maxwellito/vivus/issues" + }, + "homepage": "https://github.com/maxwellito/vivus", + "engine": { + "node": ">=0.10.22" + }, + "devDependencies": { + "eslint": "^5.15.3", + "karma": "^4.0.1", + "karma-chrome-launcher": "^2.2.0", + "karma-coverage": "^1.1.2", + "karma-jasmine": "^2.0.1", + "uglify-js": "^3.5.2" + } +} diff --git a/extensions/fablabchemnitz/animate_order/vivus-0.4.6/readme.md b/extensions/fablabchemnitz/animate_order/vivus-0.4.6/readme.md new file mode 100644 index 00000000..06d57ba7 --- /dev/null +++ b/extensions/fablabchemnitz/animate_order/vivus-0.4.6/readme.md @@ -0,0 +1,352 @@ +# vivus.js + +Demo available on http://maxwellito.github.io/vivus + +Play with it on [Vivus Instant](https://maxwellito.github.io/vivus-instant/) + +Vivus is a lightweight JavaScript class (with no dependencies) that allows you to animate SVGs, giving them the appearance of being drawn. There are a variety of different animations available, as well as the option to create a custom script to draw your SVG in whatever way you like. + +Available via: + +- [NPM](https://www.npmjs.com/package/vivus): `npm install vivus` +- [Bower](http://bower.io/): `bower install vivus` +- [jsDelivr CDN](http://www.jsdelivr.com/#!vivus): `//cdn.jsdelivr.net/npm/vivus@latest/dist/vivus.min.js` +- [CDNJS CDN](https://cdnjs.com/libraries/vivus) +- [WebJars](http://www.webjars.org/) + +Join the conversation on [Gitter](https://gitter.im/maxwellito/vivus) + +Try Vivus with your SVG on [Vivus Instant](https://maxwellito.github.io/vivus-instant/). If you plan to use the library to animate a single SVG without callback or controls, this will allow you to download your animated SVG, powered by CSS, JavaScript free. + +## Animations + +On the following images, the pink color represents the `duration` value, and the blue one is for `delay` value. + +### Delayed + +![Timeline for delayed animation](https://raw.github.com/maxwellito/vivus/master/assets/delayed.png) + +Every path element is drawn at the same time with a small delay at the start. This is currently the default animation. + +### Sync + +![Timeline for sync animation](https://raw.github.com/maxwellito/vivus/master/assets/sync.png) + +Each line is drawn synchronously. They all start and finish at the same time, hence the name `sync`. + +### OneByOne + +![Timeline for oneByOne animation](https://raw.github.com/maxwellito/vivus/master/assets/oneByOne.png) + +Each path element is drawn one after the other. This animation gives the best impression of live drawing. The duration for each line depends on their length to make a constant drawing speed. + +## Principles + +To get this effect, the script uses the CSS property `strokeDashoffset`. This property manages the stroke offset on every line of the SVG. Now, all we have to do is add some JavaScript to update this value progressively and the magic begins. + +However, there's a problem with this. The `strokeDashoffset` property is only available on the path elements. This is an issue because in an SVG there are a lot of elements such as `circle`, `rect`, `line` and `polyline` which will break the animation. So to fix this, there is another class available in the repo called `pathformer`. It's made for transforming all objects of your SVG into `path` elements to be able to use `strokeDashoffset` and animate your SVGs. + +_The animation always draws elements in the same order as they are defined in the SVG tag._ + +There are few conditions that your SVG must meet: + +- All elements must have a stroke property and cannot be filled. This is because the animation only looks to progressively draw strokes and will not check for filled colours. For example: fill: "none"; stroke: "#FFF"; + +- You should avoid creating any hidden path elements in your SVG. Vivus considers them all eligible to be animated, so it is advised to remove them before playing with it. If they are not removed the animation might not achieve the desired effect, with blank areas and gaps appearing. + +- `text` elements aren't allowed, they cannot be transformed into `path` elements. See [#22](https://github.com/maxwellito/vivus/issues/22) for more details. + +The code is inspired from other repositories. The drawer is inspired from the excellent [Codrops](http://tympanus.net/codrops/) about the post [SVG Drawing Animation](http://tympanus.net/codrops/2013/12/30/svg-drawing-animation/) (if you don't know this website, get ready to have your mind blown). Then for the pathformer, there is a lot of work from [SVGPathConverter](https://github.com/Waest/SVGPathConverter) by [Waest](https://github.com/Waest). + +## Usage + +As I said, no dependencies here. All you need to do is include the scripts. + +**Inline SVG** + +```html + + + + + + + +``` + +**Dynamic load** + +```html + + + +``` + +or + +```html +
+ + +``` + +By default the `object` created will take the size of the parent element, this one must have a height and width or your SVG might not appear. + +If you need to edit this object, it is accessible in the `onReady` callback: + +```js +new Vivus('my-div-id', { + file: 'link/to/my.svg', + onReady: function (myVivus) { + // `el` property is the SVG element + myVivus.el.setAttribute('height', 'auto'); + } +}); +``` + +Check out the [hacks page](https://github.com/maxwellito/vivus/blob/master/hacks.md) for more tricks. + +### Constructor + +The Vivus constructor asks for 3 parameters: + +- ID (or object) of DOM element to interact with.
It can be an inline SVG or a wrapper element to append an object tag from the option `file` +- Option object (described in the following | +- Callback to call at the end of the animation (optional) + +### Option list + +| Name | Type | Description | +| -------------------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `type` | string | Defines what kind of animation will be used: `delayed`, `sync`, `oneByOne`, `script`, `scenario` or `scenario-sync`. [Default: `delayed`] | +| `file` | string | Link to the SVG to animate. If set, Vivus will create an object tag and append it to the DOM element given to the constructor. Be careful, use the `onReady` callback before playing with the Vivus instance. | +| `start` | string | Defines how to trigger the animation (`inViewport` once the SVG is in the viewport, `manual` gives you the freedom to call draw method to start, `autostart` makes it start right now). [Default: `inViewport`] | +| `duration` | integer | Animation duration, in frames. [Default: `200`] | +| `delay` | integer | Time between the drawing of first and last path, in frames (only for `delayed` animations). | +| `onReady` | function | Function called when the instance is ready to play. | +| `pathTimingFunction` | function | Timing animation function for each path element of the SVG. Check the [timing function part](#timing-function). | +| `animTimingFunction` | function | Timing animation function for the complete SVG. Check the [timing function part](#timing-function). | +| `dashGap` | integer | Whitespace extra margin between dashes. Increase it in case of glitches at the initial state of the animation. [Default: `2`] | +| `forceRender` | boolean | Force the browser to re-render all updated path items. By default, the value is `true` on IE only. (check the 'troubleshoot' section for more details). | +| `reverseStack` | boolean | Reverse the order of execution. The default behaviour is to render from the first 'path' in the SVG to the last one. This option allow you to reverse the order. [Default: `false`] | +| `selfDestroy` | boolean | Removes all extra styling on the SVG, and leaves it as original. | + +### Methods + +| Name | Description | +| ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `play(speed, callback)` | Plays the animation with the speed given in parameter. This value can be negative to go backward, between 0 and 1 to go slowly, >1 to go faster, or <0 to go in reverse from current state. [Default: `1`]. Callback executed after the animation is finished (optional) | +| `stop()` | Stops the animation. | +| `reset()` | Reinitialises the SVG to the original state: undrawn. | +| `finish()` | Set the SVG to the final state: drawn. | +| `setFrameProgress(progress)` | Set the progress of the animation. Progress must be a number between 0 and 1. | +| `getStatus()` | Get the status of the animation between `start`, `progress`, `end` | +| `destroy()` | Reset the SVG but make the instance out of order. | + +These methods return the object so you can chain the actions. + +```js +const myVivus = new Vivus('my-svg-id'); +myVivus.stop().reset().play(2); +``` + +#### Play method callback + +Instead of using the global constructor callback when you create the Vivus object, you can add callbacks to be +executed for specific `play` method calls. + +```js +const myVivus = new Vivus('my-svg-id'); +myVivus.play(1, function () { + // called after the animation completes +}); + +// alternativly if you leave the speed param blank and use the default, you +// can pass the callback as the first parameter like so. +myVivus.play(function () { + // called after the animation completes +}); +``` + +## Timing function + +To give more freedom, it's possible to override the animation of each path and/or the entire SVG. It works a bit like the CSS animation timing function. But instead of using a cubic-bezier function, it use a simple JavaScript function. It must accept a number as parameter (between 0 to 1), then return a number (also between 0 and 1). It's a hook. + +If you don't want to create your own, timing methods are available via the constructor object: `EASE`, `EASE_IN`, `EASE_OUT` and `EASE_OUT_BOUNCE`. Then set it in the option object to enjoy them. + +```js +// Here, the ease animation will be use for the global drawing. +new Vivus( + 'my-svg-id', + { + type: 'delayed', + duration: 200, + animTimingFunction: Vivus.EASE + }, + myCallback +); +``` + +**WARNING**: `animTimingFunction` is called at every frame of the animation, and `pathTimingFunction` is also called at every frame for each path of your SVG. So be careful about them. Keep it simple, or it can affect the performance. + +## Extra attributes + +The attribute `data-ignore` allows you to ignore path tags from the vivus animation. + +```html + + + + + +``` + +In this case, the second path won't be part of the animation. + +## Scenarize + +This feature allows you to script the animation of your SVG. For this, the custom values will be set directly in the DOM of the SVG. + +### `scenario` + +This type is easier to understand, but longer to implement. You just have to define the start and duration of each element with `data-start` and `data-duration` attributes. If it is missing, it will use the default value given to the constructor. +The best part of this type is the flexibility it provides. You don't have to respect the order/stack of the SVG and you can start with the last element, then continue with the first to finish with all the rest at the same time. + +You will then have to define custom rules for each element in your SVG via extra attributes in your SVG DOM : + +- `data-start` (integer) + time when the animation must start, in frames +- `data-duration` (integer) + animation duration of this path, in frames + +```html + + + + + + +``` + +### `scenario-sync` + +It's not the sexiest code ever, but it's quite flexible. In addition to this, the behaviour is fairly different. +By using this animation type, the default behaviour is the same as `oneByOne`. However, you can define some properties on a specific path item such as the duration, the delay to start (from the end of the previous path) and if it should be played synchronously. + +- `data-delay` (integer) + time between the end of the animation of the previous path and the start of the current path, in frames +- `data-duration` (integer) + duration of this path animation, in frames +- `data-async` (no value required) + make the drawing of this path asynchronous. It means the next path will start at the same time. + If a path does not have an attribute for duration or delay then the default values, set in the options, will be used. + +Example: here is a simple SVG containing 5 elements. With the following options `{duration: 20, delay: 0}`, we should get this timeline + +![Timeline for script animation by default](https://raw.github.com/maxwellito/vivus/master/assets/script_default.png) + +This looks like 'oneByOne' animation, synchronous mode. But to make it a bit custom, here is what I can do: + +```html + + + + + + + +``` + +This scenario should give us + +![Timeline for this custom script animation](https://raw.github.com/maxwellito/vivus/master/assets/script_custom.png) + +I'm sorry if it does not look very sexy, and it's not really easy to use. I'm happy to make any changes, as long as the idea sounds interesting. Post an issue and I'll be very happy to talk about it! + +## Non Scaling + +Some SVG elements might use non scaling properties such as `vector-effect="non-scaling-stroke"`, which requires some additional custom logic. On instance construction Vivus will map all the child elements in the SVG and calculate their line length. If the element is resized during the animation, the calculated stroke style properties become invalid and the SVG will display incorrectly. + +To keep animation consistency, the method `recalc` should be called when the SVG is resized. It will re-calculate the line length on affected child elements on the next frame calculation. + +Code example: + +```js +// Create your Vivus instance +const vivusObject = new Vivus('my-div', { + duration: 200, + file: 'link/to/my.svg', +}); + +// Create your observer and set up a callback on resize +const resizeObserver = new ResizeObserver((entries) => { + // Recalculate the line lengths + vivusObject.recalc(); +}); + +resizeObserver.observe(vivusObject.el); +``` + +Vivus will provide a warning in the console when it detects stroke scaling. + +## Development + +To make it simpler a gulp file is set up to automise minifying, JShint and tests. +If you have never used Gulp before this is a good opportunity. To use it, you need to install NodeJS first then run `sudo npm install -g gulp`. + +To start, you will need to install the repo dependencies: + +```bash +$ npm install +``` + +Then you can use NPM scripts to run the following tasks: + +- `build` make the build (generate `dist/vivus.js` and `dist/vivus.min.js`) +- `lint` run ESlint on the source files +- `test` run Karma + +## Troubleshoot + +### Internet Explorer + +Some SVG weren't working at all. The only solution found was to clone and replace each updated path element. Of course this solution requires more resources and a lot of DOM manipulation, but it will give a smooth animation like other browsers. This fallback is only applied on Internet Explorer (all versions), and can be disabled via the option `forceRender`. + +Replacing each updated path by a clone was the only way to force IE to re-render the SVG. On some SVGs this trick is not necessary, but IE can be a bit tricky with this. If you're worried about performance, I would recommend checking if your SVG works correctly by disabling the `forceRender` option. If it works correctly on IE, then keep it like this. + +By default, `forceRender` is `true` on Internet Explorer only. + +### Firefox + +For Firefox users, you might encounter some glitches depending on your SVG and browser version. On versions before 36, there is a problem retrieving path length via `getTotalLength` method. Returning 174321516544 instead of 209 (I'm not exaggerating, this comes from a real case), messing up the entire animation treatment. Unfortunately, there's nothing that this library can do, this is due to Firefox. I hope to find a workaround, but at the moment I can only recommend that you test your animation on previous versions of Firefox. + +## Debug + +For an easier debug have a look to the attribute `map` of your Vivus object. This contains the mapping of your animation. If you're using a modern browser, I recommend `console.table` to get a nice output of the array which will make your debug easier. + +```javascript +const logo = new Vivus('myLogo', { type: 'scenario-sync' }); + +// The property 'map' contain all the SVG mapping +console.table(logo.map); +``` + +## Special thanks! + +Thanks to all contributors! Also users who pushed me to improve the library by publishing it on NPM, or browser compatibility or features. Also thanks for fixing my awful english :) + +- [@jolic](https://github.com/jolic) for dynamic SVG loading, ignore invisible paths, infinite and beyond... +- [@BenMcGeachy](https://github.com/BenMcGeachy) for making the documentation understandable +- [@TranscendOfSypherus](https://github.com/TranscendOfSypherus) for fixing the PathFormer +- [@flyingfisch](https://github.com/flyingfisch) for general helping with issues +- [@morgangiraud](https://github.com/morgangiraud) on the ignore invisible paths +- [@Nerdissimo](https://github.com/Nerdissimo) for inserting SVG without `object` wrapper +- [@jsimnz](https://github.com/jsimnz) for adding callbacks to play method + +and many others... diff --git a/extensions/fablabchemnitz/animate_order/vivus-0.4.6/src/_build.js b/extensions/fablabchemnitz/animate_order/vivus-0.4.6/src/_build.js new file mode 100644 index 00000000..eed30c70 --- /dev/null +++ b/extensions/fablabchemnitz/animate_order/vivus-0.4.6/src/_build.js @@ -0,0 +1,36 @@ +var fs = require('fs'); +var pkg = require('../package.json'); +var vivus = fs.readFileSync('src/vivus.js', { encoding: 'utf8' }); +var pathformer = fs.readFileSync('src/pathformer.js', { encoding: 'utf8' }); + +var output = `/** + * ${pkg.name} - ${pkg.description} + * @version v${pkg.version} + * @link ${pkg.homepage} + * @license ${pkg.license} + */ + +(function () { + + ${pathformer} + ${vivus} + + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define([], function() { + return Vivus; + }); + } else if (typeof exports === 'object') { + // Node. Does not work with strict CommonJS, but + // only CommonJS-like environments that support module.exports, + // like Node. + module.exports = Vivus; + } else { + // Browser globals + window.Vivus = Vivus; + } + +}()); +`; + +console.log(output); diff --git a/extensions/fablabchemnitz/animate_order/vivus-0.4.6/src/pathformer.js b/extensions/fablabchemnitz/animate_order/vivus-0.4.6/src/pathformer.js new file mode 100755 index 00000000..06747130 --- /dev/null +++ b/extensions/fablabchemnitz/animate_order/vivus-0.4.6/src/pathformer.js @@ -0,0 +1,276 @@ +'use strict'; + +/** + * Pathformer + * Beta version + * + * Take any SVG version 1.1 and transform + * child elements to 'path' elements + * + * This code is purely forked from + * https://github.com/Waest/SVGPathConverter + */ + +/** + * Class constructor + * + * @param {DOM|String} element Dom element of the SVG or id of it + */ +function Pathformer(element) { + // Test params + if (typeof element === 'undefined') { + throw new Error('Pathformer [constructor]: "element" parameter is required'); + } + + // Set the element + if (element.constructor === String) { + element = document.getElementById(element); + if (!element) { + throw new Error('Pathformer [constructor]: "element" parameter is not related to an existing ID'); + } + } + if (element instanceof window.SVGElement || + element instanceof window.SVGGElement || + /^svg$/i.test(element.nodeName)) { + this.el = element; + } else { + throw new Error('Pathformer [constructor]: "element" parameter must be a string or a SVGelement'); + } + + // Start + this.scan(element); +} + +/** + * List of tags which can be transformed + * to path elements + * + * @type {Array} + */ +Pathformer.prototype.TYPES = ['line', 'ellipse', 'circle', 'polygon', 'polyline', 'rect']; + +/** + * List of attribute names which contain + * data. This array list them to check if + * they contain bad values, like percentage. + * + * @type {Array} + */ +Pathformer.prototype.ATTR_WATCH = ['cx', 'cy', 'points', 'r', 'rx', 'ry', 'x', 'x1', 'x2', 'y', 'y1', 'y2']; + +/** + * Finds the elements compatible for transform + * and apply the liked method + * + * @param {object} options Object from the constructor + */ +Pathformer.prototype.scan = function (svg) { + var fn, element, pathData, pathDom, + elements = svg.querySelectorAll(this.TYPES.join(',')); + + for (var i = 0; i < elements.length; i++) { + element = elements[i]; + fn = this[element.tagName.toLowerCase() + 'ToPath']; + pathData = fn(this.parseAttr(element.attributes)); + pathDom = this.pathMaker(element, pathData); + element.parentNode.replaceChild(pathDom, element); + } +}; + + +/** + * Read `line` element to extract and transform + * data, to make it ready for a `path` object. + * + * @param {DOMelement} element Line element to transform + * @return {object} Data for a `path` element + */ +Pathformer.prototype.lineToPath = function (element) { + var newElement = {}, + x1 = element.x1 || 0, + y1 = element.y1 || 0, + x2 = element.x2 || 0, + y2 = element.y2 || 0; + + newElement.d = 'M' + x1 + ',' + y1 + 'L' + x2 + ',' + y2; + return newElement; +}; + +/** + * Read `rect` element to extract and transform + * data, to make it ready for a `path` object. + * The radius-border is not taken in charge yet. + * (your help is more than welcomed) + * + * @param {DOMelement} element Rect element to transform + * @return {object} Data for a `path` element + */ +Pathformer.prototype.rectToPath = function (element) { + var newElement = {}, + x = parseFloat(element.x) || 0, + y = parseFloat(element.y) || 0, + width = parseFloat(element.width) || 0, + height = parseFloat(element.height) || 0; + + if (element.rx || element.ry) { + var rx = parseInt(element.rx, 10) || -1, + ry = parseInt(element.ry, 10) || -1; + rx = Math.min(Math.max(rx < 0 ? ry : rx, 0), width/2); + ry = Math.min(Math.max(ry < 0 ? rx : ry, 0), height/2); + + newElement.d = 'M ' + (x + rx) + ',' + y + ' ' + + 'L ' + (x + width - rx) + ',' + y + ' ' + + 'A ' + rx + ',' + ry + ',0,0,1,' + (x + width) + ',' + (y + ry) + ' ' + + 'L ' + (x + width) + ',' + (y + height - ry) + ' ' + + 'A ' + rx + ',' + ry + ',0,0,1,' + (x + width - rx) + ',' + (y + height) + ' ' + + 'L ' + (x + rx) + ',' + (y + height) + ' ' + + 'A ' + rx + ',' + ry + ',0,0,1,' + x + ',' + (y + height - ry) + ' ' + + 'L ' + x + ',' + (y + ry) + ' ' + + 'A ' + rx + ',' + ry + ',0,0,1,' + (x + rx) + ',' + y; + } + else { + newElement.d = 'M' + x + ' ' + y + ' ' + + 'L' + (x + width) + ' ' + y + ' ' + + 'L' + (x + width) + ' ' + (y + height) + ' ' + + 'L' + x + ' ' + (y + height) + ' Z'; + } + return newElement; +}; + +/** + * Read `polyline` element to extract and transform + * data, to make it ready for a `path` object. + * + * @param {DOMelement} element Polyline element to transform + * @return {object} Data for a `path` element + */ +Pathformer.prototype.polylineToPath = function (element) { + var newElement = {}, + points = element.points.trim().split(' '), + i, path; + + // Reformatting if points are defined without commas + if (element.points.indexOf(',') === -1) { + var formattedPoints = []; + for (i = 0; i < points.length; i+=2) { + formattedPoints.push(points[i] + ',' + points[i+1]); + } + points = formattedPoints; + } + + // Generate the path.d value + path = 'M' + points[0]; + for(i = 1; i < points.length; i++) { + if (points[i].indexOf(',') !== -1) { + path += 'L' + points[i]; + } + } + newElement.d = path; + return newElement; +}; + +/** + * Read `polygon` element to extract and transform + * data, to make it ready for a `path` object. + * This method rely on polylineToPath, because the + * logic is similar. The path created is just closed, + * so it needs an 'Z' at the end. + * + * @param {DOMelement} element Polygon element to transform + * @return {object} Data for a `path` element + */ +Pathformer.prototype.polygonToPath = function (element) { + var newElement = Pathformer.prototype.polylineToPath(element); + + newElement.d += 'Z'; + return newElement; +}; + +/** + * Read `ellipse` element to extract and transform + * data, to make it ready for a `path` object. + * + * @param {DOMelement} element ellipse element to transform + * @return {object} Data for a `path` element + */ +Pathformer.prototype.ellipseToPath = function (element) { + var newElement = {}, + rx = parseFloat(element.rx) || 0, + ry = parseFloat(element.ry) || 0, + cx = parseFloat(element.cx) || 0, + cy = parseFloat(element.cy) || 0, + startX = cx - rx, + startY = cy, + endX = parseFloat(cx) + parseFloat(rx), + endY = cy; + + newElement.d = 'M' + startX + ',' + startY + + 'A' + rx + ',' + ry + ' 0,1,1 ' + endX + ',' + endY + + 'A' + rx + ',' + ry + ' 0,1,1 ' + startX + ',' + endY; + return newElement; +}; + +/** + * Read `circle` element to extract and transform + * data, to make it ready for a `path` object. + * + * @param {DOMelement} element Circle element to transform + * @return {object} Data for a `path` element + */ +Pathformer.prototype.circleToPath = function (element) { + var newElement = {}, + r = parseFloat(element.r) || 0, + cx = parseFloat(element.cx) || 0, + cy = parseFloat(element.cy) || 0, + startX = cx - r, + startY = cy, + endX = parseFloat(cx) + parseFloat(r), + endY = cy; + + newElement.d = 'M' + startX + ',' + startY + + 'A' + r + ',' + r + ' 0,1,1 ' + endX + ',' + endY + + 'A' + r + ',' + r + ' 0,1,1 ' + startX + ',' + endY; + return newElement; +}; + +/** + * Create `path` elements form original element + * and prepared objects + * + * @param {DOMelement} element Original element to transform + * @param {object} pathData Path data (from `toPath` methods) + * @return {DOMelement} Path element + */ +Pathformer.prototype.pathMaker = function (element, pathData) { + var i, attr, pathTag = document.createElementNS('http://www.w3.org/2000/svg','path'); + for(i = 0; i < element.attributes.length; i++) { + attr = element.attributes[i]; + if (this.ATTR_WATCH.indexOf(attr.name) === -1) { + pathTag.setAttribute(attr.name, attr.value); + } + } + for(i in pathData) { + pathTag.setAttribute(i, pathData[i]); + } + return pathTag; +}; + +/** + * Parse attributes of a DOM element to + * get an object of attribute => value + * + * @param {NamedNodeMap} attributes Attributes object from DOM element to parse + * @return {object} Object of attributes + */ +Pathformer.prototype.parseAttr = function (element) { + var attr, output = {}; + for (var i = 0; i < element.length; i++) { + attr = element[i]; + // Check if no data attribute contains '%', or the transformation is impossible + if (this.ATTR_WATCH.indexOf(attr.name) !== -1 && attr.value.indexOf('%') !== -1) { + throw new Error('Pathformer [parseAttr]: a SVG shape got values in percentage. This cannot be transformed into \'path\' tags. Please use \'viewBox\'.'); + } + output[attr.name] = attr.value; + } + return output; +}; diff --git a/extensions/fablabchemnitz/animate_order/vivus-0.4.6/src/vivus.js b/extensions/fablabchemnitz/animate_order/vivus-0.4.6/src/vivus.js new file mode 100755 index 00000000..b6e6767d --- /dev/null +++ b/extensions/fablabchemnitz/animate_order/vivus-0.4.6/src/vivus.js @@ -0,0 +1,917 @@ +'use strict'; + +var setupEnv, requestAnimFrame, cancelAnimFrame, parsePositiveInt; + +/** + * Vivus + * Beta version + * + * Take any SVG and make the animation + * to give give the impression of live drawing + * + * This in more than just inspired from codrops + * At that point, it's a pure fork. + */ + +/** + * Class constructor + * option structure + * type: 'delayed'|'sync'|'oneByOne'|'script' (to know if the items must be drawn synchronously or not, default: delayed) + * duration: (in frames) + * start: 'inViewport'|'manual'|'autostart' (start automatically the animation, default: inViewport) + * delay: (delay between the drawing of first and last path) + * dashGap whitespace extra margin between dashes + * pathTimingFunction timing animation function for each path element of the SVG + * animTimingFunction timing animation function for the complete SVG + * forceRender force the browser to re-render all updated path items + * selfDestroy removes all extra styling on the SVG, and leaves it as original + * + * The attribute 'type' is by default on 'delayed'. + * - 'delayed' + * all paths are draw at the same time but with a + * little delay between them before start + * - 'sync' + * all path are start and finish at the same time + * - 'oneByOne' + * only one path is draw at the time + * the end of the first one will trigger the draw + * of the next one + * + * All these values can be overwritten individually + * for each path item in the SVG + * The value of frames will always take the advantage of + * the duration value. + * If you fail somewhere, an error will be thrown. + * Good luck. + * + * @constructor + * @this {Vivus} + * @param {DOM|String} element Dom element of the SVG or id of it + * @param {Object} options Options about the animation + * @param {Function} callback Callback for the end of the animation + */ +function Vivus(element, options, callback) { + setupEnv(); + + // Setup + this.isReady = false; + this.setElement(element, options); + this.setOptions(options); + this.setCallback(callback); + + if (this.isReady) { + this.init(); + } +} + +/** + * Timing functions + ************************************** + * + * Default functions to help developers. + * It always take a number as parameter (between 0 to 1) then + * return a number (between 0 and 1) + */ +Vivus.LINEAR = function(x) { + return x; +}; +Vivus.EASE = function(x) { + return -Math.cos(x * Math.PI) / 2 + 0.5; +}; +Vivus.EASE_OUT = function(x) { + return 1 - Math.pow(1 - x, 3); +}; +Vivus.EASE_IN = function(x) { + return Math.pow(x, 3); +}; +Vivus.EASE_OUT_BOUNCE = function(x) { + var base = -Math.cos(x * (0.5 * Math.PI)) + 1, + rate = Math.pow(base, 1.5), + rateR = Math.pow(1 - x, 2), + progress = -Math.abs(Math.cos(rate * (2.5 * Math.PI))) + 1; + return 1 - rateR + progress * rateR; +}; + +/** + * Setters + ************************************** + */ + +/** + * Check and set the element in the instance + * The method will not return anything, but will throw an + * error if the parameter is invalid + * + * @param {DOM|String} element SVG Dom element or id of it + */ +Vivus.prototype.setElement = function(element, options) { + var onLoad, self; + + // Basic check + if (typeof element === 'undefined') { + throw new Error('Vivus [constructor]: "element" parameter is required'); + } + + // Set the element + if (element.constructor === String) { + element = document.getElementById(element); + if (!element) { + throw new Error( + 'Vivus [constructor]: "element" parameter is not related to an existing ID' + ); + } + } + this.parentEl = element; + + // Load the SVG with XMLHttpRequest and extract the SVG + if (options && options.file) { + self = this; + onLoad = function() { + var domSandbox = document.createElement('div'); + domSandbox.innerHTML = this.responseText; + + var svgTag = domSandbox.querySelector('svg'); + if (!svgTag) { + throw new Error( + 'Vivus [load]: Cannot find the SVG in the loaded file : ' + + options.file + ); + } + + self.el = svgTag; + self.el.setAttribute('width', '100%'); + self.el.setAttribute('height', '100%'); + self.parentEl.appendChild(self.el); + self.isReady = true; + self.init(); + self = null; + }; + + var oReq = new window.XMLHttpRequest(); + oReq.addEventListener('load', onLoad); + oReq.open('GET', options.file); + oReq.send(); + return; + } + + switch (element.constructor) { + case window.SVGSVGElement: + case window.SVGElement: + case window.SVGGElement: + this.el = element; + this.isReady = true; + break; + + case window.HTMLObjectElement: + self = this; + onLoad = function(e) { + if (self.isReady) { + return; + } + self.el = + element.contentDocument && + element.contentDocument.querySelector('svg'); + if (!self.el && e) { + throw new Error( + 'Vivus [constructor]: object loaded does not contain any SVG' + ); + } else if (self.el) { + if (element.getAttribute('built-by-vivus')) { + self.parentEl.insertBefore(self.el, element); + self.parentEl.removeChild(element); + self.el.setAttribute('width', '100%'); + self.el.setAttribute('height', '100%'); + } + self.isReady = true; + self.init(); + self = null; + } + }; + + if (!onLoad()) { + element.addEventListener('load', onLoad); + } + break; + + default: + throw new Error( + 'Vivus [constructor]: "element" parameter is not valid (or miss the "file" attribute)' + ); + } +}; + +/** + * Set up user option to the instance + * The method will not return anything, but will throw an + * error if the parameter is invalid + * + * @param {object} options Object from the constructor + */ +Vivus.prototype.setOptions = function(options) { + var allowedTypes = [ + 'delayed', + 'sync', + 'async', + 'nsync', + 'oneByOne', + 'scenario', + 'scenario-sync' + ]; + var allowedStarts = ['inViewport', 'manual', 'autostart']; + + // Basic check + if (options !== undefined && options.constructor !== Object) { + throw new Error( + 'Vivus [constructor]: "options" parameter must be an object' + ); + } else { + options = options || {}; + } + + // Set the animation type + if (options.type && allowedTypes.indexOf(options.type) === -1) { + throw new Error( + 'Vivus [constructor]: ' + + options.type + + ' is not an existing animation `type`' + ); + } else { + this.type = options.type || allowedTypes[0]; + } + + // Set the start type + if (options.start && allowedStarts.indexOf(options.start) === -1) { + throw new Error( + 'Vivus [constructor]: ' + + options.start + + ' is not an existing `start` option' + ); + } else { + this.start = options.start || allowedStarts[0]; + } + + this.isIE = + window.navigator.userAgent.indexOf('MSIE') !== -1 || + window.navigator.userAgent.indexOf('Trident/') !== -1 || + window.navigator.userAgent.indexOf('Edge/') !== -1; + this.duration = parsePositiveInt(options.duration, 120); + this.delay = parsePositiveInt(options.delay, null); + this.dashGap = parsePositiveInt(options.dashGap, 1); + this.forceRender = options.hasOwnProperty('forceRender') + ? !!options.forceRender + : this.isIE; + this.reverseStack = !!options.reverseStack; + this.selfDestroy = !!options.selfDestroy; + this.onReady = options.onReady; + this.map = []; + this.frameLength = this.currentFrame = this.delayUnit = this.speed = this.handle = null; + + this.ignoreInvisible = options.hasOwnProperty('ignoreInvisible') + ? !!options.ignoreInvisible + : false; + + this.animTimingFunction = options.animTimingFunction || Vivus.LINEAR; + this.pathTimingFunction = options.pathTimingFunction || Vivus.LINEAR; + + if (this.delay >= this.duration) { + throw new Error('Vivus [constructor]: delay must be shorter than duration'); + } +}; + +/** + * Set up callback to the instance + * The method will not return enything, but will throw an + * error if the parameter is invalid + * + * @param {Function} callback Callback for the animation end + */ +Vivus.prototype.setCallback = function(callback) { + // Basic check + if (!!callback && callback.constructor !== Function) { + throw new Error( + 'Vivus [constructor]: "callback" parameter must be a function' + ); + } + this.callback = callback || function() {}; +}; + +/** + * Core + ************************************** + */ + +/** + * Map the svg, path by path. + * The method return nothing, it just fill the + * `map` array. Each item in this array represent + * a path element from the SVG, with informations for + * the animation. + * + * ``` + * [ + * { + * el: the path element + * length: length of the path line + * startAt: time start of the path animation (in frames) + * duration: path animation duration (in frames) + * }, + * ... + * ] + * ``` + * + */ +Vivus.prototype.mapping = function() { + var i, paths, path, pAttrs, pathObj, totalLength, lengthMeter, timePoint, scale, hasNonScale; + timePoint = totalLength = lengthMeter = 0; + paths = this.el.querySelectorAll('path'); + hasNonScale = false; + + for (i = 0; i < paths.length; i++) { + path = paths[i]; + if (this.isInvisible(path)) { + continue; + } + + pathObj = { + el: path, + length: 0, + startAt: 0, + duration: 0, + isResizeSensitive: false + }; + + // If vector effect is non-scaling-stroke, the total length won't match the rendered length + // so we need to calculate the scale and apply it + if (path.getAttribute('vector-effect') === 'non-scaling-stroke') { + var rect = path.getBoundingClientRect(); + var box = path.getBBox(); + scale = Math.max(rect.width / box.width, rect.height / box.height); + pathObj.isResizeSensitive = true; + hasNonScale = true; + } else { + scale = 1; + } + pathObj.length = Math.ceil(path.getTotalLength() * scale); + + // Test if the path length is correct + if (isNaN(pathObj.length)) { + if (window.console && console.warn) { + console.warn( + 'Vivus [mapping]: cannot retrieve a path element length', + path + ); + } + continue; + } + this.map.push(pathObj); + path.style.strokeDasharray = + pathObj.length + ' ' + (pathObj.length + this.dashGap * 2); + path.style.strokeDashoffset = pathObj.length + this.dashGap; + pathObj.length += this.dashGap; + totalLength += pathObj.length; + + this.renderPath(i); + } + + // Show a warning for non-scaling elements + if (hasNonScale) { + console.warn('Vivus: this SVG contains non-scaling-strokes. You should call instance.recalc() when the SVG is resized or you will encounter unwanted behaviour. See https://github.com/maxwellito/vivus#non-scaling for more info.'); + } + + totalLength = totalLength === 0 ? 1 : totalLength; + this.delay = this.delay === null ? this.duration / 3 : this.delay; + this.delayUnit = this.delay / (paths.length > 1 ? paths.length - 1 : 1); + + // Reverse stack if asked + if (this.reverseStack) { + this.map.reverse(); + } + + for (i = 0; i < this.map.length; i++) { + pathObj = this.map[i]; + + switch (this.type) { + case 'delayed': + pathObj.startAt = this.delayUnit * i; + pathObj.duration = this.duration - this.delay; + break; + + case 'oneByOne': + pathObj.startAt = (lengthMeter / totalLength) * this.duration; + pathObj.duration = (pathObj.length / totalLength) * this.duration; + break; + + case 'sync': + case 'async': + case 'nsync': + pathObj.startAt = 0; + pathObj.duration = this.duration; + break; + + case 'scenario-sync': + path = pathObj.el; + pAttrs = this.parseAttr(path); + pathObj.startAt = + timePoint + + (parsePositiveInt(pAttrs['data-delay'], this.delayUnit) || 0); + pathObj.duration = parsePositiveInt( + pAttrs['data-duration'], + this.duration + ); + timePoint = + pAttrs['data-async'] !== undefined + ? pathObj.startAt + : pathObj.startAt + pathObj.duration; + this.frameLength = Math.max( + this.frameLength, + pathObj.startAt + pathObj.duration + ); + break; + + case 'scenario': + path = pathObj.el; + pAttrs = this.parseAttr(path); + pathObj.startAt = + parsePositiveInt(pAttrs['data-start'], this.delayUnit) || 0; + pathObj.duration = parsePositiveInt( + pAttrs['data-duration'], + this.duration + ); + this.frameLength = Math.max( + this.frameLength, + pathObj.startAt + pathObj.duration + ); + break; + } + lengthMeter += pathObj.length; + this.frameLength = this.frameLength || this.duration; + } +}; + +/** + * Public method to re-evaluate line length for non-scaling lines + * path elements. + */ +Vivus.prototype.recalc = function () { + if (this.mustRecalcScale) { + return; + } + this.mustRecalcScale = requestAnimFrame(function () { + this.performLineRecalc(); + }.bind(this)); +} + +/** + * Private method to re-evaluate line length on non-scaling + * path elements. Then call for a trace to update the SVG. + */ +Vivus.prototype.performLineRecalc = function () { + var pathObj, path, rect, box, scale; + for (var i = 0; i < this.map.length; i++) { + pathObj = this.map[i]; + if (pathObj.isResizeSensitive) { + path = pathObj.el; + rect = path.getBoundingClientRect(); + box = path.getBBox(); + scale = Math.max(rect.width / box.width, rect.height / box.height); + pathObj.length = Math.ceil(path.getTotalLength() * scale); + path.style.strokeDasharray = pathObj.length + ' ' + (pathObj.length + this.dashGap * 2); + } + } + this.trace(); + this.mustRecalcScale = null; +} + +/** + * Interval method to draw the SVG from current + * position of the animation. It update the value of + * `currentFrame` and re-trace the SVG. + * + * It use this.handle to store the requestAnimationFrame + * and clear it one the animation is stopped. So this + * attribute can be used to know if the animation is + * playing. + * + * Once the animation at the end, this method will + * trigger the Vivus callback. + * + */ +Vivus.prototype.draw = function() { + var self = this; + this.currentFrame += this.speed; + + if (this.currentFrame <= 0) { + this.stop(); + this.reset(); + } else if (this.currentFrame >= this.frameLength) { + this.stop(); + this.currentFrame = this.frameLength; + this.trace(); + if (this.selfDestroy) { + this.destroy(); + } + } else { + this.trace(); + this.handle = requestAnimFrame(function() { + self.draw(); + }); + return; + } + + this.callback(this); + if (this.instanceCallback) { + this.instanceCallback(this); + this.instanceCallback = null; + } +}; + +/** + * Draw the SVG at the current instant from the + * `currentFrame` value. Here is where most of the magic is. + * The trick is to use the `strokeDashoffset` style property. + * + * For optimisation reasons, a new property called `progress` + * is added in each item of `map`. This one contain the current + * progress of the path element. Only if the new value is different + * the new value will be applied to the DOM element. This + * method save a lot of resources to re-render the SVG. And could + * be improved if the animation couldn't be played forward. + * + */ +Vivus.prototype.trace = function() { + var i, progress, path, currentFrame; + currentFrame = + this.animTimingFunction(this.currentFrame / this.frameLength) * + this.frameLength; + for (i = 0; i < this.map.length; i++) { + path = this.map[i]; + progress = (currentFrame - path.startAt) / path.duration; + progress = this.pathTimingFunction(Math.max(0, Math.min(1, progress))); + if (path.progress !== progress) { + path.progress = progress; + path.el.style.strokeDashoffset = Math.floor(path.length * (1 - progress)); + this.renderPath(i); + } + } +}; + +/** + * Method forcing the browser to re-render a path element + * from it's index in the map. Depending on the `forceRender` + * value. + * The trick is to replace the path element by it's clone. + * This practice is not recommended because it's asking more + * ressources, too much DOM manupulation.. + * but it's the only way to let the magic happen on IE. + * By default, this fallback is only applied on IE. + * + * @param {Number} index Path index + */ +Vivus.prototype.renderPath = function(index) { + if (this.forceRender && this.map && this.map[index]) { + var pathObj = this.map[index], + newPath = pathObj.el.cloneNode(true); + pathObj.el.parentNode.replaceChild(newPath, pathObj.el); + pathObj.el = newPath; + } +}; + +/** + * When the SVG object is loaded and ready, + * this method will continue the initialisation. + * + * This this mainly due to the case of passing an + * object tag in the constructor. It will wait + * the end of the loading to initialise. + * + */ +Vivus.prototype.init = function() { + // Set object variables + this.frameLength = 0; + this.currentFrame = 0; + this.map = []; + + // Start + new Pathformer(this.el); + this.mapping(); + this.starter(); + + if (this.onReady) { + this.onReady(this); + } +}; + +/** + * Trigger to start of the animation. + * Depending on the `start` value, a different script + * will be applied. + * + * If the `start` value is not valid, an error will be thrown. + * Even if technically, this is impossible. + * + */ +Vivus.prototype.starter = function() { + switch (this.start) { + case 'manual': + return; + + case 'autostart': + this.play(); + break; + + case 'inViewport': + var self = this, + listener = function() { + if (self.isInViewport(self.parentEl, 1)) { + self.play(); + window.removeEventListener('scroll', listener); + } + }; + window.addEventListener('scroll', listener); + listener(); + break; + } +}; + +/** + * Controls + ************************************** + */ + +/** + * Get the current status of the animation between + * three different states: 'start', 'progress', 'end'. + * @return {string} Instance status + */ +Vivus.prototype.getStatus = function() { + return this.currentFrame === 0 + ? 'start' + : this.currentFrame === this.frameLength + ? 'end' + : 'progress'; +}; + +/** + * Reset the instance to the initial state : undraw + * Be careful, it just reset the animation, if you're + * playing the animation, this won't stop it. But just + * make it start from start. + * + */ +Vivus.prototype.reset = function() { + return this.setFrameProgress(0); +}; + +/** + * Set the instance to the final state : drawn + * Be careful, it just set the animation, if you're + * playing the animation on rewind, this won't stop it. + * But just make it start from the end. + * + */ +Vivus.prototype.finish = function() { + return this.setFrameProgress(1); +}; + +/** + * Set the level of progress of the drawing. + * + * @param {number} progress Level of progress to set + */ +Vivus.prototype.setFrameProgress = function(progress) { + progress = Math.min(1, Math.max(0, progress)); + this.currentFrame = Math.round(this.frameLength * progress); + this.trace(); + return this; +}; + +/** + * Play the animation at the desired speed. + * Speed must be a valid number (no zero). + * By default, the speed value is 1. + * But a negative value is accepted to go forward. + * + * And works with float too. + * But don't forget we are in JavaScript, se be nice + * with him and give him a 1/2^x value. + * + * @param {number} speed Animation speed [optional] + */ +Vivus.prototype.play = function(speed, callback) { + this.instanceCallback = null; + + if (speed && typeof speed === 'function') { + this.instanceCallback = speed; // first parameter is actually the callback function + speed = null; + } else if (speed && typeof speed !== 'number') { + throw new Error('Vivus [play]: invalid speed'); + } + // if the first parameter wasn't the callback, check if the seconds was + if (callback && typeof callback === 'function' && !this.instanceCallback) { + this.instanceCallback = callback; + } + + this.speed = speed || 1; + if (!this.handle) { + this.draw(); + } + return this; +}; + +/** + * Stop the current animation, if on progress. + * Should not trigger any error. + * + */ +Vivus.prototype.stop = function() { + if (this.handle) { + cancelAnimFrame(this.handle); + this.handle = null; + } + return this; +}; + +/** + * Destroy the instance. + * Remove all bad styling attributes on all + * path tags + * + */ +Vivus.prototype.destroy = function() { + this.stop(); + var i, path; + for (i = 0; i < this.map.length; i++) { + path = this.map[i]; + path.el.style.strokeDashoffset = null; + path.el.style.strokeDasharray = null; + this.renderPath(i); + } +}; + +/** + * Utils methods + * include methods from Codrops + ************************************** + */ + +/** + * Method to best guess if a path should added into + * the animation or not. + * + * 1. Use the `data-vivus-ignore` attribute if set + * 2. Check if the instance must ignore invisible paths + * 3. Check if the path is visible + * + * For now the visibility checking is unstable. + * It will be used for a beta phase. + * + * Other improvments are planned. Like detecting + * is the path got a stroke or a valid opacity. + */ +Vivus.prototype.isInvisible = function(el) { + var rect, + ignoreAttr = el.getAttribute('data-ignore'); + + if (ignoreAttr !== null) { + return ignoreAttr !== 'false'; + } + + if (this.ignoreInvisible) { + rect = el.getBoundingClientRect(); + return !rect.width && !rect.height; + } else { + return false; + } +}; + +/** + * Parse attributes of a DOM element to + * get an object of {attributeName => attributeValue} + * + * @param {object} element DOM element to parse + * @return {object} Object of attributes + */ +Vivus.prototype.parseAttr = function(element) { + var attr, + output = {}; + if (element && element.attributes) { + for (var i = 0; i < element.attributes.length; i++) { + attr = element.attributes[i]; + output[attr.name] = attr.value; + } + } + return output; +}; + +/** + * Reply if an element is in the page viewport + * + * @param {object} el Element to observe + * @param {number} h Percentage of height + * @return {boolean} + */ +Vivus.prototype.isInViewport = function(el, h) { + var scrolled = this.scrollY(), + viewed = scrolled + this.getViewportH(), + elBCR = el.getBoundingClientRect(), + elHeight = elBCR.height, + elTop = scrolled + elBCR.top, + elBottom = elTop + elHeight; + + // if 0, the element is considered in the viewport as soon as it enters. + // if 1, the element is considered in the viewport only when it's fully inside + // value in percentage (1 >= h >= 0) + h = h || 0; + + return elTop + elHeight * h <= viewed && elBottom >= scrolled; +}; + +/** + * Get the viewport height in pixels + * + * @return {integer} Viewport height + */ +Vivus.prototype.getViewportH = function() { + var client = this.docElem.clientHeight, + inner = window.innerHeight; + + if (client < inner) { + return inner; + } else { + return client; + } +}; + +/** + * Get the page Y offset + * + * @return {integer} Page Y offset + */ +Vivus.prototype.scrollY = function() { + return window.pageYOffset || this.docElem.scrollTop; +}; + +setupEnv = function() { + if (Vivus.prototype.docElem) { + return; + } + + /** + * Alias for document element + * + * @type {DOMelement} + */ + Vivus.prototype.docElem = window.document.documentElement; + + /** + * Alias for `requestAnimationFrame` or + * `setTimeout` function for deprecated browsers. + * + */ + requestAnimFrame = (function() { + return ( + window.requestAnimationFrame || + window.webkitRequestAnimationFrame || + window.mozRequestAnimationFrame || + window.oRequestAnimationFrame || + window.msRequestAnimationFrame || + function(/* function */ callback) { + return window.setTimeout(callback, 1000 / 60); + } + ); + })(); + + /** + * Alias for `cancelAnimationFrame` or + * `cancelTimeout` function for deprecated browsers. + * + */ + cancelAnimFrame = (function() { + return ( + window.cancelAnimationFrame || + window.webkitCancelAnimationFrame || + window.mozCancelAnimationFrame || + window.oCancelAnimationFrame || + window.msCancelAnimationFrame || + function(id) { + return window.clearTimeout(id); + } + ); + })(); +}; + +/** + * Parse string to integer. + * If the number is not positive or null + * the method will return the default value + * or 0 if undefined + * + * @param {string} value String to parse + * @param {*} defaultValue Value to return if the result parsed is invalid + * @return {number} + * + */ +parsePositiveInt = function(value, defaultValue) { + var output = parseInt(value, 10); + return output >= 0 ? output : defaultValue; +}; diff --git a/extensions/fablabchemnitz/animate_order/vivus-0.4.6/test/karma.conf.js b/extensions/fablabchemnitz/animate_order/vivus-0.4.6/test/karma.conf.js new file mode 100644 index 00000000..20f69533 --- /dev/null +++ b/extensions/fablabchemnitz/animate_order/vivus-0.4.6/test/karma.conf.js @@ -0,0 +1,75 @@ +// Karma configuration +// Generated on Fri Jul 18 2014 10:58:08 GMT+0100 (BST) + +module.exports = function(config) { + var options = { + // base path that will be used to resolve all patterns (eg. files, exclude) + basePath: '..', + + // frameworks to use + // available frameworks: https://npmjs.org/browse/keyword/karma-adapter + frameworks: ['jasmine'], + + // list of files / patterns to load in the browser + files: [ + 'test/unit.setup.js', + 'src/pathformer.js', + 'src/vivus.js', + 'test/unit/**.js' + ], + + // list of files to exclude + exclude: [], + + // preprocess matching files before serving them to the browser + // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor + preprocessors: { + '../src/pathformer.js': ['coverage'], + '../src/vivus.js': ['coverage'] + }, + + // test results reporter to use + // possible values: 'dots', 'progress' + // available reporters: https://npmjs.org/browse/keyword/karma-reporter + reporters: ['progress', 'coverage'], + + // optionally, configure the reporter + coverageReporter: { + type: 'html', + dir: '../coverage/' + }, + + // web server port + port: 9876, + + // enable / disable colors in the output (reporters and logs) + colors: true, + + // level of logging + // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG + logLevel: config.LOG_INFO, + + // enable / disable watching file and executing tests whenever any file changes + autoWatch: true, + + // start these browsers + // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher + browsers: ['Chrome'], + + // Continuous Integration mode + // if true, Karma captures browsers, runs the tests and exits + singleRun: true + }; + + if (process.env.TRAVIS) { + options.customLaunchers = { + Chrome_travis_ci: { + base: 'Chrome', + flags: ['--no-sandbox'] + } + }; + options.browsers = ['Chrome_travis_ci']; + } + + config.set(options); +}; diff --git a/extensions/fablabchemnitz/animate_order/vivus-0.4.6/test/manual/hi-there.svg b/extensions/fablabchemnitz/animate_order/vivus-0.4.6/test/manual/hi-there.svg new file mode 100644 index 00000000..cfe0dd22 --- /dev/null +++ b/extensions/fablabchemnitz/animate_order/vivus-0.4.6/test/manual/hi-there.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/animate_order/vivus-0.4.6/test/manual/index.html b/extensions/fablabchemnitz/animate_order/vivus-0.4.6/test/manual/index.html new file mode 100644 index 00000000..d62a21f1 --- /dev/null +++ b/extensions/fablabchemnitz/animate_order/vivus-0.4.6/test/manual/index.html @@ -0,0 +1,425 @@ + + + + + + + vivus.js - manual tests page + + + + + +
+

Vivus manual (cheap) tests.

+

+ Just scroll along the page and if a glitch appear or the visual + appearance is not like the description, it's not good. +

+ +
+ +
+
+
+

+ This should display the obturateur SVG like on the demo page. The + strokes must be orange. The element must remain an + object tag. +

+ +
+
+ +
+
+
+ +
+
+
+
+
+
+

+ This should display the polaroid SVG like on the demo page. The + strokes must have the same color as this text. +

+
+
+
+ +
+
+
+

+ This should display the 'Hi there' SVG like ready to start. Be sure + no glitch appear (no small path or dots). Click on the following + button to start. +

+ +
+
+
+
+
+
+ +
+
+
+
+
+
+

+ This should display a synth ready to start. Be sure no glitch appear + (no small path or dots). The animation should use a custom path + timing function (ease_in: slow at start then finish fast.). Click on + the following button to start. +

+ +
+
+
+ +
+
+ + + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + + +
+

+ Non scaling path
In any case of a resize, the animation of each + line must be complete. +

+ + +
+
+ + + + + + diff --git a/extensions/fablabchemnitz/animate_order/vivus-0.4.6/test/manual/obturateur.svg b/extensions/fablabchemnitz/animate_order/vivus-0.4.6/test/manual/obturateur.svg new file mode 100644 index 00000000..6baf6538 --- /dev/null +++ b/extensions/fablabchemnitz/animate_order/vivus-0.4.6/test/manual/obturateur.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/animate_order/vivus-0.4.6/test/manual/polaroid.svg b/extensions/fablabchemnitz/animate_order/vivus-0.4.6/test/manual/polaroid.svg new file mode 100644 index 00000000..af9f781b --- /dev/null +++ b/extensions/fablabchemnitz/animate_order/vivus-0.4.6/test/manual/polaroid.svg @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/animate_order/vivus-0.4.6/test/manual/synth.svg b/extensions/fablabchemnitz/animate_order/vivus-0.4.6/test/manual/synth.svg new file mode 100644 index 00000000..93b2c104 --- /dev/null +++ b/extensions/fablabchemnitz/animate_order/vivus-0.4.6/test/manual/synth.svg @@ -0,0 +1,158 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extensions/fablabchemnitz/animate_order/vivus-0.4.6/test/unit.setup.js b/extensions/fablabchemnitz/animate_order/vivus-0.4.6/test/unit.setup.js new file mode 100644 index 00000000..4badb160 --- /dev/null +++ b/extensions/fablabchemnitz/animate_order/vivus-0.4.6/test/unit.setup.js @@ -0,0 +1,14 @@ +/* Here is a cheap and bad implementation + * of requestAnimationFrame and + * cancelAnimationFrame mock. + * But it's more than enough + * for our tests. + */ +window.requestAnimFrameStack = []; +window.requestAnimationFrame = function (callback) { + window.requestAnimFrameStack.push(callback); + return true; +}; +window.cancelAnimationFrame = function () { + window.requestAnimFrameStack = []; +}; diff --git a/extensions/fablabchemnitz/animate_order/vivus-0.4.6/test/unit/pathformer.spec.js b/extensions/fablabchemnitz/animate_order/vivus-0.4.6/test/unit/pathformer.spec.js new file mode 100644 index 00000000..109f4b10 --- /dev/null +++ b/extensions/fablabchemnitz/animate_order/vivus-0.4.6/test/unit/pathformer.spec.js @@ -0,0 +1,322 @@ +'use strict'; + +/** + * Unit tests for Pathformer + * + */ +describe('Pathformer', function () { + + var svgTag, + svgTagId = 'my-svg', + svgGroupTag, + svgGroupTagId = 'my-svg-group'; + + beforeEach(function () { + // Remove tag if existing + svgTag = document.getElementById(svgTagId); + if (svgTag) { + svgTag.remove(); + } + + // Create the SVG + svgTag = document.createElementNS('http://www.w3.org/2000/svg','svg'); + svgTag.id = svgTagId; + svgTag.innerHTML = '' + + '' + + '' + + '' + + '' + + '' + + '' + + ''; + + svgGroupTag = svgTag.querySelector('#'+svgGroupTagId); + + // Insert it to the body + document.body.appendChild(svgTag); + }); + + describe('[param tests]', function () { + + // Tests about the SVG element + it('should throw an error if the SVG is given in parameter', function () { + expect(function () { + new Pathformer(); + }).toThrow(new Error('Pathformer [constructor]: "element" parameter is required')); + }); + + it('should work with only the SVG id', function () { + expect(function () { + new Pathformer(svgTagId); + }).not.toThrow(); + }); + + it('should work with only the SVG object', function () { + expect(function () { + new Pathformer(svgTag); + }).not.toThrow(); + }); + + it('should work with only the SVG group object', function () { + expect(function () { + new Pathformer(svgGroupTag); + }).not.toThrow(); + }); + + it('should throw an error if the SVG ID given is invalid', function () { + expect(function () { + new Pathformer('my-unexisting-svg'); + }).toThrow(new Error('Pathformer [constructor]: "element" parameter is not related to an existing ID')); + }); + + it('should throw an error if the ID given is not related to a SVG element', function () { + var divTag = document.createElement('div'); + divTag.id = 'my-div'; + document.body.appendChild(divTag); + expect(function () { + new Pathformer('my-div'); + }).toThrow(new Error('Pathformer [constructor]: "element" parameter must be a string or a SVGelement')); + }); + + it('should throw an error if the element is not a correct type (DOM object or string)', function () { + expect(function () { new Pathformer({}); }).toThrow(new Error('Pathformer [constructor]: "element" parameter must be a string or a SVGelement')); + expect(function () { new Pathformer(42); }).toThrow(new Error('Pathformer [constructor]: "element" parameter must be a string or a SVGelement')); + expect(function () { new Pathformer(false); }).toThrow(new Error('Pathformer [constructor]: "element" parameter must be a string or a SVGelement')); + expect(function () { new Pathformer(new Date()); }).toThrow(new Error('Pathformer [constructor]: "element" parameter must be a string or a SVGelement')); + expect(function () { new Pathformer(function () {}); }).toThrow(new Error('Pathformer [constructor]: "element" parameter must be a string or a SVGelement')); + expect(function () { new Pathformer(document.createElement('div')); }).toThrow(new Error('Pathformer [constructor]: "element" parameter must be a string or a SVGelement')); + }); + }); + + describe('[translation]', function () { + + // Line object + describe('line', function () { + it('should return an object with a `d` attribute', function () { + var output = Pathformer.prototype.lineToPath({}); + expect(output.d).toBeDefined(); + }); + + it('should return an object with an unclosed shape', function () { + var output = Pathformer.prototype.lineToPath({}); + expect(output.d.substr(-1)).not.toEqual('Z'); + }); + + it('should set default positino attributes to zero', function () { + var output = Pathformer.prototype.lineToPath({ + x1: '21', x2: '32', y1: '11' + }); + expect(output.d.indexOf('0')).not.toEqual(-1); + expect(output.d.indexOf('undefined')).toEqual(-1); + }); + }); + + // Rect object + describe('rect', function () { + it('should return an object with a `d` attribute', function () { + var output = Pathformer.prototype.rectToPath({}); + expect(output.d).toBeDefined(); + }); + + it('should return an object with a closed shape', function () { + var output = Pathformer.prototype.rectToPath({}); + expect(output.d.substr(-1)).toEqual('Z'); + }); + + it('should set default positino attributes to zero', function () { + var output = Pathformer.prototype.rectToPath({ + x: '21', height: '32', width: '11' + }); + expect(output.d.indexOf('0')).not.toEqual(-1); + expect(output.d.indexOf('undefined')).toEqual(-1); + }); + + it('should apply rounded corners', function () { + var result = 'M 50,10 ' + + 'L 50,10 A 40,20,0,0,1,90,30 ' + + 'L 90,50 A 40,20,0,0,1,50,70 ' + + 'L 50,70 A 40,20,0,0,1,10,50 ' + + 'L 10,30 A 40,20,0,0,1,50,10'; + + var output = Pathformer.prototype.rectToPath({ + x:10, y:10, width:80, height:60, rx:100, ry:20 + }); + + expect(output.d).toEqual(result); + }); + + it('should apply rounded corners even when a value is missing', function () { + var result = 'M 30,10 ' + + 'L 70,10 A 20,20,0,0,1,90,30 ' + + 'L 90,50 A 20,20,0,0,1,70,70 ' + + 'L 30,70 A 20,20,0,0,1,10,50 ' + + 'L 10,30 A 20,20,0,0,1,30,10'; + + var output = Pathformer.prototype.rectToPath({ + x:10, y:10, width:80, height:60, ry:20 + }); + + expect(output.d).toEqual(result); + }); + }); + + // Polyline object + describe('polyline', function () { + var polyline; + beforeEach(function () { + polyline = { + points: '2,3 4,5 6,7' + }; + }); + + it('should return an object with a `d` attribute', function () { + var output = Pathformer.prototype.polylineToPath(polyline); + expect(output.d).toBeDefined(); + }); + + it('should return an object with an unclosed shape', function () { + var output = Pathformer.prototype.polylineToPath(polyline); + expect(output.d.substr(-1)).not.toEqual('Z'); + }); + + it('should ignore incorrect points', function () { + var output; + polyline.points += ' 43'; + output = Pathformer.prototype.polylineToPath(polyline); + expect(output.d.indexOf('43')).toEqual(-1); + }); + + it('should accept points defined with and without commas', function () { + var outputWithPoint = Pathformer.prototype.polylineToPath(polyline); + var outputWithoutPoint = Pathformer.prototype.polylineToPath({points: '2 3 4 5 6 7'}); + expect(outputWithPoint).toEqual(outputWithoutPoint); + }); + }); + + // Polygon object + describe('polygon', function () { + var polygon; + beforeEach(function () { + polygon = { + points: '2,3 4,5 6,7' + }; + }); + + it('should return an object with a `d` attribute', function () { + var output = Pathformer.prototype.polygonToPath(polygon); + expect(output.d).toBeDefined(); + }); + + it('should return an object with a closed shape', function () { + var output = Pathformer.prototype.polygonToPath(polygon); + expect(output.d.substr(-1)).toEqual('Z'); + }); + }); + + // Ellipse object + describe('ellipse', function () { + + var ellipse; + beforeEach(function () { + ellipse = { + cx: 2, + cy: 3, + rx: 3 + }; + }); + + it('should return an object with a `d` attribute', function () { + var output = Pathformer.prototype.ellipseToPath(ellipse); + expect(output.d).toBeDefined(); + }); + + it('should return an object with an unclosed shape', function () { + var output = Pathformer.prototype.ellipseToPath(ellipse); + expect(output.d.substr(-1)).not.toEqual('Z'); + }); + + it('should set default positino attributes to zero', function () { + delete ellipse.cy; + var output = Pathformer.prototype.ellipseToPath(ellipse); + expect(output.d.indexOf('0')).not.toEqual(-1); + expect(output.d.indexOf('undefined')).toEqual(-1); + }); + }); + + // Circle object + describe('circle', function () { + + var circle; + beforeEach(function () { + circle = { + cx: 2, + cy: 3, + rx: 3, + r: 1 + }; + }); + + it('should return an object with a `d` attribute', function () { + var output = Pathformer.prototype.circleToPath(circle); + expect(output.d).toBeDefined(); + }); + + it('should return an object with an unclosed shape', function () { + var output = Pathformer.prototype.circleToPath(circle); + expect(output.d.substr(-1)).not.toEqual('Z'); + }); + + it('should set default positino attributes to zero', function () { + delete circle.cy; + var output = Pathformer.prototype.circleToPath(circle); + expect(output.d.indexOf('0')).not.toEqual(-1); + expect(output.d.indexOf('undefined')).toEqual(-1); + }); + }); + }); + + describe('[utils]', function () { + + describe('attribute parser', function () { + it('should return an empty object if attributes length are undefined', function () { + var output = Pathformer.prototype.parseAttr({}); + expect(output).toEqual({}); + }); + }); + + describe('engine', function () { + it('shouldn\'t throw an error if the SVG got a tag not taken in charge', function () { + svgTag.innerHTML = ''; + + expect(function () { + new Pathformer(svgTagId); + }).not.toThrow(); + }); + + it('should remove useless attributes during transformation', function () { + new Pathformer(svgTagId); + expect(svgTag.childNodes[0].getAttribute('cx')).toBe(null); + }); + }); + + describe('validity', function () { + it('should throw error if the SVG contain shape with percentage value', function () { + // Create the SVG + var svgTagPrc = document.createElementNS('http://www.w3.org/2000/svg','svg'); + svgTagPrc.innerHTML = ''; + expect(function () { + new Pathformer(svgTagPrc); + }).toThrow(new Error('Pathformer [parseAttr]: a SVG shape got values in percentage. This cannot be transformed into \'path\' tags. Please use \'viewBox\'.')); + }); + + it('shouldn\'t throw error if the SVG contain shape with percentage value on a non-data attribute', function () { + // Create the SVG + var svgTagPrc = document.createElementNS('http://www.w3.org/2000/svg','svg'); + svgTagPrc.innerHTML = ''; + expect(function () { + new Pathformer(svgTagPrc); + }).not.toThrow(); + }); + }); + }); +}); diff --git a/extensions/fablabchemnitz/animate_order/vivus-0.4.6/test/unit/vivus.spec.js b/extensions/fablabchemnitz/animate_order/vivus-0.4.6/test/unit/vivus.spec.js new file mode 100644 index 00000000..af9e74b1 --- /dev/null +++ b/extensions/fablabchemnitz/animate_order/vivus-0.4.6/test/unit/vivus.spec.js @@ -0,0 +1,669 @@ +'use strict'; + +/** + * Unit tests for Vivus + * + */ +describe('Vivus', function () { + + var ObjectElementMock, + triggerFrames, + myVivus, + objTag, + wrapTag, + svgTag, + svgTagId = 'my-svg', + svgGroupTagId = 'my-svg-group'; + + // Mock ObjectElement and it's constructor via createElement + ObjectElementMock = function () { + this.loadCb = []; + this.attr = {}; + this.addEventListener = function (evtName, cb) { + if (evtName === 'load') { + this.loadCb.push(cb); + } + }; + this.loaded = function () { + for (var i = 0; i < this.loadCb.length; i++) { + this.loadCb[i]({target: this}); + } + }; + this.getBoundingClientRect = function () { + return { + height: 11, + top: 364 + }; + }; + this.insertBefore = function () {}; + this.removeChild = function () {}; + this.setAttribute = function (key, val) { + this.attr[key] = val; + }; + this.getAttribute = function (key) { + return this.attr[key]; + }; + }; + window.HTMLObjectElement = ObjectElementMock; + + triggerFrames = function (counter) { + counter = counter || -1; + while (window.requestAnimFrameStack.length && counter !== 0) { + window.requestAnimFrameStack.shift()(); + counter--; + } + }; + + + beforeEach(function () { + // Create the SVG + svgTag = document.createElementNS('http://www.w3.org/2000/svg','svg'); + svgTag.id = svgTagId; + svgTag.innerHTML = '' + + '' + + '' + + '' + + '' + + '' + + '' + + ''; + + wrapTag = document.createElement('div'); + wrapTag.appendChild(svgTag); + + document.body.appendChild(wrapTag); + + // Reset the request anim frame stack + window.requestAnimFrameStack = []; + }); + + afterEach(function () { + // Remove tag + svgTag.remove(); + wrapTag.remove(); + }); + + describe('[basic tests]', function () { + + it('should the class be defined under Vivus name', function () { + expect(Vivus).toBeDefined(); + }); + + it('should have timing functions set', function () { + expect(Vivus.LINEAR).toBeDefined(); + expect(Vivus.EASE).toBeDefined(); + expect(Vivus.EASE_IN).toBeDefined(); + expect(Vivus.EASE_OUT).toBeDefined(); + expect(Vivus.EASE_OUT_BOUNCE).toBeDefined(); + }); + + it('should have timing functions returning correct value on limits', function () { + expect(Vivus.LINEAR(0)).toEqual(0); + expect(Vivus.LINEAR(1)).toEqual(1); + expect(Vivus.EASE(0)).toEqual(0); + expect(Vivus.EASE(1)).toEqual(1); + expect(Vivus.EASE_IN(0)).toEqual(0); + expect(Vivus.EASE_IN(1)).toEqual(1); + expect(Vivus.EASE_OUT(0)).toEqual(0); + expect(Vivus.EASE_OUT(1)).toEqual(1); + expect(Vivus.EASE_OUT_BOUNCE(0)).toEqual(0); + expect(Vivus.EASE_OUT_BOUNCE(1)).toEqual(1); + }); + }); + + describe('[param tests]', function () { + + // Tests about the SVG element + it('should throw an error if the SVG is given in parameter', function () { + expect(function () { + new Vivus(); + }).toThrow(new Error('Vivus [constructor]: "element" parameter is required')); + }); + + it('should work with only the SVG id', function () { + expect(function () { + new Vivus(svgTagId); + }).not.toThrow(); + }); + + it('should work with only the SVG object', function () { + expect(function () { + new Vivus(svgTag); + }).not.toThrow(); + }); + + it('should work with the SVG group object', function () { + expect(function () { + new Vivus(svgGroupTagId); + }).not.toThrow(); + }); + + it('should throw an error if the SVG ID given is invalid', function () { + expect(function () { + new Vivus('my-unexisting-svg'); + }).toThrow(new Error('Vivus [constructor]: "element" parameter is not related to an existing ID')); + }); + + it('should throw an error if the ID given is not related to a SVG element', function () { + var divTag = document.createElement('div'); + divTag.id = 'my-div'; + document.body.appendChild(divTag); + expect(function () { + new Vivus('my-div'); + }).toThrow(new Error('Vivus [constructor]: "element" parameter is not valid (or miss the "file" attribute)')); + }); + + it('should accept any DOM element if `file` option is set', function () { + var divTag = document.createElement('div'); + spyOn(window, 'XMLHttpRequest'); + try { + new Vivus(divTag, {file: 'opensource.svg'}); + } + catch(err) {} + + expect(window.XMLHttpRequest).toHaveBeenCalled(); + }); + + it('should throw an error if the element is not a correct type (DOM object or string)', function () { + expect(function () { new Vivus({}); }).toThrow(new Error('Vivus [constructor]: "element" parameter is not valid (or miss the "file" attribute)')); + expect(function () { new Vivus(42); }).toThrow(new Error('Vivus [constructor]: "element" parameter is not valid (or miss the "file" attribute)')); + expect(function () { new Vivus(false); }).toThrow(new Error('Vivus [constructor]: "element" parameter is not valid (or miss the "file" attribute)')); + expect(function () { new Vivus(new Date()); }).toThrow(new Error('Vivus [constructor]: "element" parameter is not valid (or miss the "file" attribute)')); + expect(function () { new Vivus(function () {}); }).toThrow(new Error('Vivus [constructor]: "element" parameter is not valid (or miss the "file" attribute)')); + expect(function () { new Vivus(document.createElement('div')); }).toThrow(new Error('Vivus [constructor]: "element" parameter is not valid (or miss the "file" attribute)')); + }); + + it('should accept object element', function () { + // Create a mock Object getElementById + objTag = new ObjectElementMock(); + objTag.contentDocument = wrapTag; + + expect(function () { + new Vivus(objTag); + }).not.toThrow(); + }); + + it('the vivus state should be ready if the SVG is already loaded', function () { + objTag = new ObjectElementMock(); + objTag.contentDocument = wrapTag; + objTag.loaded(); + var myVivus = new Vivus(objTag); + expect(myVivus.isReady).toEqual(true); + }); + + it('the vivus instance should have `el` and `parentEl` different if the element is an object', function () { + objTag = new ObjectElementMock(); + objTag.contentDocument = wrapTag; + objTag.loaded(); + var myVivus = new Vivus(objTag); + expect(myVivus.parentEl).not.toEqual(myVivus.el); + }); + + it('should call `onReady` callback once the SVG is loaded', function () { + objTag = new ObjectElementMock(); + objTag.contentDocument = document.createElement('div'); + var myVivus = new Vivus(objTag); + objTag.contentDocument = wrapTag; + objTag.loaded(); + expect(myVivus.isReady).toEqual(true); + }); + + it('should throw an error if the SVG file does not exists', function () { + objTag = new ObjectElementMock(); + objTag.contentDocument = document.createElement('div'); + new Vivus(objTag); + expect(function () { + objTag.loaded(); + }).toThrow(); + }); + + // Options + it('should work without options', function () { + expect(function () { + new Vivus(svgTag); + }).not.toThrow(); + }); + + it('should throw an error if options is not an object', function () { + expect(function () { new Vivus(svgTag, []); }).toThrow(new Error('Vivus [constructor]: "options" parameter must be an object')); + expect(function () { new Vivus(svgTag, 42); }).toThrow(new Error('Vivus [constructor]: "options" parameter must be an object')); + expect(function () { new Vivus(svgTag, false); }).toThrow(new Error('Vivus [constructor]: "options" parameter must be an object')); + expect(function () { new Vivus(svgTag, new Date()); }).toThrow(new Error('Vivus [constructor]: "options" parameter must be an object')); + expect(function () { new Vivus(svgTag, 'manual'); }).toThrow(new Error('Vivus [constructor]: "options" parameter must be an object')); + expect(function () { new Vivus(svgTag, function () {}); }).toThrow(new Error('Vivus [constructor]: "options" parameter must be an object')); + }); + + // Options + it('should work with empty option object', function () { + expect(function () { + new Vivus(svgTag, {}); + }).not.toThrow(); + }); + + it('should throw an error if the `type` value given in options does not exists', function () { + expect(function () { + new Vivus(svgTag, {type: 'by-unicorn'}); + }).toThrow(new Error('Vivus [constructor]: by-unicorn is not an existing animation `type`')); + }); + + it('should throw an error if the `start` value given in options is not a string', function () { + expect(function () { + new Vivus(svgTag, {start: 'when-unicorn-ready'}); + }).toThrow(new Error('Vivus [constructor]: when-unicorn-ready is not an existing `start` option')); + }); + + it('should throw an error if the `delay` value is bigger (or equal) than `duration`', function () { + expect(function () { + new Vivus(svgTag, {duration: 200, delay: 199}); + }).not.toThrow(); + expect(function () { + new Vivus(svgTag, {duration: 200, delay: 200}); + }).toThrow(new Error('Vivus [constructor]: delay must be shorter than duration')); + expect(function () { + new Vivus(svgTag, {duration: 200, delay: 201}); + }).toThrow(new Error('Vivus [constructor]: delay must be shorter than duration')); + }); + + it('should override `duration` if invalid', function () { + myVivus = new Vivus(svgTag, {duration: -12}); + expect(myVivus.duration > 0).toBe(true); + }); + + it('should override `delay` if invalid, with a null value', function () { + myVivus = new Vivus(svgTag, {delay: -12}); + expect(!myVivus.delay).toBe(false); + }); + + it('should set up default values', function () { + myVivus = new Vivus(svgTag, {}); + expect(myVivus.type).toBeDefined(); + expect(myVivus.start).toBeDefined(); + expect(myVivus.duration).toBeDefined(); + }); + + it('the vivus instance should have `el` and `parentEl` equal if the element is a SVG object', function () { + myVivus = new Vivus(svgTag, {}); + expect(myVivus.el).toEqual(myVivus.parentEl); + }); + + // Callback + it('should throw an error if callback is non a function', function () { + expect(function () { + new Vivus(svgTag, {}, 42); + }).toThrow(new Error('Vivus [constructor]: "callback" parameter must be a function')); + }); + + it('should use scale to determine path length when vector effect is non-scaling-stroke', function () { + var scalingSvgTag = document.createElementNS('http://www.w3.org/2000/svg','svg'); + var scalingWrapTag = document.createElement('div'); + + scalingSvgTag.setAttribute('viewBox', '0 0 500 200'); + scalingWrapTag.style.width = '1000px'; + + scalingSvgTag.id = 'scaling-stroke-test'; + + scalingSvgTag.innerHTML = '' + + ''; + + scalingWrapTag.appendChild(scalingSvgTag); + + document.body.appendChild(scalingWrapTag); + + myVivus = new Vivus(scalingSvgTag); + + expect(myVivus.map.length).toEqual(2); + expect(myVivus.map[0].length).toEqual(280); + expect(myVivus.map[1].length).toEqual(141); + }); + }); + + describe('[engine]', function () { + + // Mapping + describe('Mapping:', function () { + + it('should not trigger any error if the SVG is empty', function () { + expect(function () { + var svgTag = document.createElementNS('http://www.w3.org/2000/svg','svg'); + myVivus = new Vivus(svgTag, {}); + }).not.toThrow(); + }); + + it('should create a mapping of the SVG', function () { + myVivus = new Vivus(svgTag, {}); + expect(myVivus.map && myVivus.map.length).toEqual(6); + }); + + it('should map with correct values for start and duration', function () { + var i, typeIndex, types = ['delayed', 'sync', 'oneByOne', 'scenario', 'scenario-sync']; + for (typeIndex in types) { + myVivus = new Vivus(svgTag, {type: types[typeIndex], duration: 200}); + for (i in myVivus.map) { + expect(myVivus.map[i].startAt >= 0).toBe(true); + expect(myVivus.map[i].duration >= 0).toBe(true); + } + } + }); + + // Tests for 'getTotalLength' method in case of awkward results + describe('SVG parsing issue', function () { + + var getTotalLengthBkp = SVGPathElement.prototype.getTotalLength, + warnBkp = console.warn; + + beforeEach(function () { + SVGPathElement.prototype.getTotalLength = function () { + return NaN; + }; + }); + + afterEach(function () { + SVGPathElement.prototype.getTotalLength = getTotalLengthBkp; + console.warn = warnBkp; + }); + + it('should call console.warn if a path length is NaN', function () { + var warnSpy = jasmine.createSpy('spy'); + console.warn = warnSpy; + myVivus = new Vivus(svgTag); + expect(warnSpy.calls.count()).toEqual(6); + expect(myVivus.map.length).toEqual(0); + }); + + it('shouldn\'t call console.warn if not defined a path length is NaN', function () { + console.warn = null; + myVivus = new Vivus(svgTag); + expect(myVivus.map.length).toEqual(0); + }); + }); + }); + + describe('Visibility checking:', function () { + + it('should not accept a path which is not displayed', function () { + // Hide a path + svgTag.childNodes[1].style.display = 'none'; + myVivus = new Vivus(svgTag, {ignoreInvisible: true}); + expect(myVivus.map.length).toEqual(5); + }); + + it('should not accept a path which with an ignore tag', function () { + svgTag.childNodes[1].setAttribute('data-ignore', 'true'); + myVivus = new Vivus(svgTag); + expect(myVivus.map.length).toEqual(5); + }); + + it('should not accept a path which is not displayed', function () { + svgTag.childNodes[1].setAttribute('data-ignore', 'false'); + myVivus = new Vivus(svgTag); + expect(myVivus.map.length).toEqual(6); + }); + }); + + // Drawing + describe('Drawing:', function () { + + it('should call the callback once the animation is finished', function () { + var done = false; + myVivus = new Vivus(svgTag, { + duration: 6, + start: 'autostart' + }, function () { + done = true; + }); + + triggerFrames(); + expect(done).toBe(true); + }); + + it('should call the callback once the reverse animation is finished', function () { + var done = false; + myVivus = new Vivus(svgTag, { + type: 'oneByOne', + duration: 6 + }, function () { + done = true; + }); + + myVivus.finish().play(-1); + triggerFrames(); + expect(done).toBe(true); + }); + + it('should call the method callback as the second param once the animation is finished', function () { + var done = false; + myVivus = new Vivus(svgTag, { + duration: 6, + start: 'manual', + }); + + myVivus.play(1, function() { + done = true; + }); + triggerFrames(); + expect(done).toBe(true); + }); + + it('should call the method callback as the first param once the animation is finished', function () { + var done = false; + myVivus = new Vivus(svgTag, { + duration: 6, + start: 'manual', + }); + + myVivus.play(function() { + done = true; + }); + triggerFrames(); + expect(done).toBe(true); + }); + + it('should call the method callback once the reverse animation is finished', function () { + var done = false; + myVivus = new Vivus(svgTag, { + duration: 6, + start: 'manual', + }); + + myVivus.finish().play(-1, function() { + done = true; + }); + triggerFrames(); + expect(done).toBe(true); + }); + + it('should call the method callback provided in the last play call', function () { + var done = false; + myVivus = new Vivus(svgTag, { + duration: 6, + start: 'manual', + }); + + myVivus.finish().play(-1, function () {}); + myVivus.play(function() { + done = true; + }); + triggerFrames(); + expect(done).toBe(true); + }); + + it('should call destroy method once the animation is finished', function () { + myVivus = new Vivus(svgTag, { + duration: 6, + start: 'manual', + selfDestroy: true + }); + myVivus.destroy = jasmine.createSpy('spy'); + myVivus.play(); + triggerFrames(); + expect(myVivus.destroy.calls.count()).toEqual(1); + }); + + it('should\' call destroy method if selfDestroy option is not present', function () { + myVivus = new Vivus(svgTag, { + duration: 6, + start: 'manual' + }); + myVivus.destroy = jasmine.createSpy('spy'); + myVivus.play(); + triggerFrames(); + expect(myVivus.destroy.calls.count()).toEqual(0); + }); + + it('should stop animation if destroy has been called', function () { + var callbackSpy = jasmine.createSpy('spy'); + myVivus = new Vivus(svgTag, { + duration: 6, + start: 'autostart' + }, callbackSpy); + + triggerFrames(1); + myVivus.destroy(); + + triggerFrames(); + expect(callbackSpy.calls.count()).toEqual(0); + }); + + it('should stop the animation once it reaches currentFrame == 0', function () { + myVivus = new Vivus(svgTag, { + duration: 6, + start: 'manual' + }); + myVivus.stop = jasmine.createSpy('spy'); + myVivus.play(-1); + triggerFrames(); + expect(myVivus.stop.calls.count()).toEqual(1); + }); + + it('should trace reasonably', function () { + myVivus = new Vivus(svgTag, { + duration: 6, + start: 'manual' + }); + spyOn(myVivus, 'trace').and.callThrough(); + myVivus.play(0.5); + triggerFrames(); + expect(myVivus.trace.calls.count()).toEqual(12); + }); + + it('should start by the last path if reverseStack is enabled', function () { + myVivus = new Vivus(svgTag, { + type: 'oneByOne', + duration: 5, + reverseStack: true + }); + myVivus.setFrameProgress(0.5); + + var paths = svgTag.querySelectorAll('path'); + expect(+paths[0].style.strokeDashoffset).not.toEqual(0); + expect(+paths[paths.length -1].style.strokeDashoffset).toEqual(0); + }); + }); + + describe('Force Render:', function () { + + it('should use renderPath if forceRender option is set to true', function () { + myVivus = new Vivus(svgTag, { duration: 2, start: 'manual', forceRender: true }); + + var originalFirstPath = myVivus.map[0].el; + myVivus.renderPath(0); + expect(myVivus.map[0].el).not.toBe(originalFirstPath); + }); + + it('should not use renderPath if forceRender option is set to false', function () { + myVivus = new Vivus(svgTag, { duration: 2, start: 'manual', forceRender: false }); + + var originalFirstPath = myVivus.map[0].el; + myVivus.renderPath(0); + expect(myVivus.map[0].el).toBe(originalFirstPath); + }); + + it('renderPath should not throw an error if the index doesn\'t exists', function () { + myVivus = new Vivus(svgTag, { duration: 2, start: 'manual', forceRender: true }); + expect(function () { + myVivus.renderPath(42); + }).not.toThrow(); + }); + }); + + }); + + describe('[controls]', function () { + + beforeEach(function () { + myVivus = new Vivus(svgTag, { + type: 'oneByOne', + duration: 2, + start: 'manual' + }); + }); + + it('shouldn\'t play if the parameter in incorrect', function () { + expect(function () {myVivus.play('a');}).toThrow(new Error('Vivus [play]: invalid speed')); + expect(function () {myVivus.play({});}).toThrow(new Error('Vivus [play]: invalid speed')); + expect(function () {myVivus.play([]);}).toThrow(new Error('Vivus [play]: invalid speed')); + expect(function () {myVivus.play('1');}).toThrow(new Error('Vivus [play]: invalid speed')); + }); + + it('should return the correct status', function () { + expect(myVivus.getStatus()).toEqual('start'); + myVivus.setFrameProgress(0.5); + expect(myVivus.getStatus()).toEqual('progress'); + myVivus.finish(); + expect(myVivus.getStatus()).toEqual('end'); + myVivus.reset(); + expect(myVivus.getStatus()).toEqual('start'); + }); + + it('should play with the normal speed by default', function () { + myVivus.play(); + expect(myVivus.speed).toEqual(1); + }); + + it('shouldn\'t run another process of drawing if the animation is in progress', function () { + myVivus = new Vivus(svgTag, { + duration: 6, + start: 'manual' + }); + spyOn(myVivus, 'trace').and.callThrough(); + + myVivus.play(0.5); + myVivus.play(0.5); + triggerFrames(); + expect(myVivus.trace.calls.count()).toEqual(12); + }); + + it('should stop the animation only when the animation is running', function () { + myVivus = new Vivus(svgTag, { + duration: 6, + start: 'manual' + }); + myVivus.play(); + expect(myVivus.handle).toBeTruthy(); + myVivus.stop(); + expect(myVivus.handle).toBeFalsy(); + myVivus.stop(); + expect(myVivus.handle).toBeFalsy(); + }); + + it('should remove all unecessary styling on every path element', function () { + var i, paths; + myVivus.destroy(); + + paths = svgTag.querySelectorAll('path'); + for (i = 0; i < paths.length; i++) { + expect(!!paths[i].style.strokeDashoffset).toEqual(false); + expect(!!paths[i].style.strokeDasharray).toEqual(false); + } + }); + + /** + * Where are the tests about `util` methods? + * Well.... + * to be honest, I've been struggling a bit for these kind of tests + * which seems difficult to test from Karma. + */ + }); + + +}); diff --git a/extensions/fablabchemnitz/another_perspective/another_perspective.inx b/extensions/fablabchemnitz/another_perspective/another_perspective.inx new file mode 100644 index 00000000..c1a7d1c3 --- /dev/null +++ b/extensions/fablabchemnitz/another_perspective/another_perspective.inx @@ -0,0 +1,16 @@ + + + Another Perspective + fablabchemnitz.de.another_perspective + + path + + + + + + + + diff --git a/extensions/fablabchemnitz/another_perspective/another_perspective.py b/extensions/fablabchemnitz/another_perspective/another_perspective.py new file mode 100644 index 00000000..62b19af3 --- /dev/null +++ b/extensions/fablabchemnitz/another_perspective/another_perspective.py @@ -0,0 +1,312 @@ +#!/usr/bin/env python3 + +""" +Copyright (C) 2017 Corentin Brulé + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + +Special thanks and orignal copyrigths : Aaron Spike (2005) and Timo Kähkönen (2012) +""" + +import inkex +import re +from lxml import etree +from inkex.transforms import Transform +from inkex.paths import Path, CubicSuperPath + +__version__ = '0.1' + +debug=False + +def distort_path(path_str,source,destination): + path_arr = path_string_to_array(path_str) + + subpath_type="" + is_num ="" + xy_counter ="" + xy="" + path_arr2=[] + subpath_type_upper="" + point="" + i=0 + for i in range(len(path_arr)): + patt1 = r"[mzlhvcsqta]" + + curr = path_arr[i] + if re.match(patt1,curr,flags=re.I): + xy_counter = -1 + subpath_type = curr + subpath_type_upper = subpath_type.upper() + is_num = False + path_arr2.append(curr) + else : + is_num = True + curr = float(curr) + + if xy_counter%2 == 0: + xy="x" + else: + xy="y" + + if is_num : + if xy=="y" : + point = transferPoint(float(path_arr[i-1]),curr,source,destination) + path_arr2.append(point["x"]) + path_arr2.append(point["y"]) + + xy_counter+=1 + + path_str = path_array_to_string(path_arr2) + return path_str + + +def path_array_to_string(path_arr): + + path_str=str(path_arr) + + path_str=path_str.replace(r"([0-9]),([-0-9])", "$1 $2") + path_str=path_str.replace(r"([0-9]),([-0-9])", "$1 $2") + path_str=path_str.replace(",", "") + path_str=path_str.replace("[", "").replace("]","") + path_str=path_str.replace("'", "") + + return path_str + +def path_string_to_array(path_str): + + patt1=r"[mzlhvcsqta]|-?[0-9.]+" #gi + #path_arr=path_str.match(patt1) #array de résultats + path_arr = re.findall(patt1,path_str,flags=re.I) + + patt1=r"[mzlhvcsqta]" #i + i = 0 + for i in range(len(path_arr)): + if re.match(path_arr[i],patt1,flags=re.I) == -1: + path_arr[i] = float(path_arr[i]) + + return path_arr + +''' +def isPermissible(p): + p0 = {x:c0.attr("cx"),y:c0.attr("cy")} + p1 = {x:c1.attr("cx"),y:c1.attr("cy")} + p2 = {x:c2.attr("cx"),y:c2.attr("cy")} + p3 = {x:c3.attr("cx"),y:c3.attr("cy")} + a0 = angle(p3, p0, p1) + a1 = angle(p0, p1, p2) + a2 = angle(p1, p2, p3) + a3 = angle(p2, p3, p0) + if not (a0 > 0 and a0 < 180) or not (a1 > 0 and a1 < 180) or not(a2 > 0 and a2 < 180) or not(a3 > 0 and a3 < 180) : + return False + else : + return True +} + +def angle(c, b, a): + ab = {x: b.x - a.x, y: b.y - a.y } + cb = {x: b.x - c.x, y: b.y - c.y } + dot = (ab.x * cb.x + ab.y * cb.y) + cross = (ab.x * cb.y - ab.y * cb.x) + alpha = Math.atan2(cross, dot) + return alpha * 180 / PI +} +''' + +def transferPoint (xI, yI, source, destination): + + ADDING = 0.001 # to avoid dividing by zero + + xA = source[0]["x"] + yA = source[0]["y"] + + xC = source[2]["x"] + yC = source[2]["y"] + + xAu = destination[0]["x"] + yAu = destination[0]["y"] + + xBu = destination[1]["x"] + yBu = destination[1]["y"] + + xCu = destination[2]["x"] + yCu = destination[2]["y"] + + xDu = destination[3]["x"] + yDu = destination[3]["y"] + + # Calcultations + if xBu==xCu : + xCu+=ADDING + if xAu==xDu : + xDu+=ADDING + if xAu==xBu : + xBu+=ADDING + if xDu==xCu : + xCu+=ADDING + kBC = float(yBu-yCu)/float(xBu-xCu) + kAD = float(yAu-yDu)/float(xAu-xDu) + kAB = float(yAu-yBu)/float(xAu-xBu) + kDC = float(yDu-yCu)/float(xDu-xCu) + + if kBC==kAD : + kAD += ADDING + xE = float(kBC*xBu - kAD*xAu + yAu - yBu) / float(kBC-kAD) + yE = kBC*(xE - xBu) + yBu + + if kAB==kDC : + kDC += ADDING + xF = float(kAB*xBu - kDC*xCu + yCu - yBu) / float(kAB-kDC) + yF = kAB*(xF - xBu) + yBu + + if xE==xF : + xF += ADDING + kEF = float(yE-yF) / float(xE-xF) + + if kEF==kAB: + kAB += ADDING + xG = float(kEF*xDu - kAB*xAu + yAu - yDu) / float(kEF-kAB) + yG = kEF*(xG - xDu) + yDu + + if kEF==kBC : + kBC+=ADDING + xH = float(kEF*xDu - kBC*xBu + yBu - yDu) / float(kEF-kBC) + yH = kEF*(xH - xDu) + yDu + + rG = float(yC-yI)/float(yC-yA) + rH = float(xI-xA)/float(xC-xA) + + xJ = (xG-xDu)*rG + xDu + yJ = (yG-yDu)*rG + yDu + + xK = (xH-xDu)*rH + xDu + yK = (yH-yDu)*rH + yDu + + if xF==xJ: + xJ+=ADDING + if xE==xK: + xK+=ADDING + kJF = float(yF-yJ) / float(xF-xJ) + kKE = float(yE-yK) / float(xE-xK) + + xKE = "" + if kJF==kKE: + kKE += ADDING + xIu = float(kJF*xF - kKE*xE + yE - yF) / float(kJF-kKE) + yIu = kJF * (xIu - xJ) + yJ + + b = {"x":xIu,"y":yIu} + b["x"] = round(b["x"]) + b["y"] = round(b["y"]) + return b + + +def projection(path_object,coords): + + pp_object = Path(path_object).to_arrays() + + bounds = Path(path_object).bounding_box() + + # Make array of coordinates, every array member represent corner of text path + source = [ + {"x":bounds.left,"y":bounds.top}, + {"x":bounds.right,"y":bounds.top}, + {"x":bounds.right,"y":bounds.bottom}, + {"x":bounds.left,"y":bounds.bottom} + ] + + destination=[ + {"x":coords[0][0],"y":coords[0][1]}, + {"x":coords[1][0],"y":coords[1][1]}, + {"x":coords[2][0],"y":coords[2][1]}, + {"x":coords[3][0],"y":coords[3][1]} + ] + + path_destination = distort_path(path_object,source,destination) + + return path_destination +''' +def complex2tulpe(complexNb): + return (complexNb.real,complexNb.imag) +''' +class AnotherPerspective(inkex.EffectExtension): + + def envelope2coords(self, path_envelope): + pp_envelope = CubicSuperPath(path_envelope) + if len(pp_envelope[0]) < 4: + inkex.errormsg("The selected envelope (your second path) does not contain enough nodes. Check to have at least 4 nodes.") + exit() + + c0 = pp_envelope[0][0][0] + c1 = pp_envelope[0][1][0] + c2 = pp_envelope[0][2][0] + c3 = pp_envelope[0][3][0] + # inkex.debug(str(c0)+" "+str(c1)+" "+str(c2)+" "+str(c3)) + return [c0, c1, c2, c3] + + def effect(self): + if len(self.options.ids) < 2: + inkex.errormsg("This extension requires two selected paths.") + exit() + + obj = self.svg.selected[self.options.ids[0]] + envelope = self.svg.selected[self.options.ids[1]] + + if obj.get(inkex.addNS('type','sodipodi')): + inkex.errormsg("The first selected object is of type '%s'.\nTry using the procedure Path->Object to Path." % obj.get(inkex.addNS('type','sodipodi'))) + exit() + + if obj.tag == inkex.addNS('path','svg') or obj.tag == inkex.addNS('g','svg'): + if envelope.tag == inkex.addNS('path','svg'): + mat = envelope.transform * Transform([[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]]) + path = CubicSuperPath(envelope.get('d')) + Path(path).transform(mat) + absolute_envelope_path = envelope.get('d') + # inkex.debug(absolute_envelope_path) + coords_to_project = self.envelope2coords(absolute_envelope_path) + + if obj.tag == inkex.addNS('path','svg'): + mat = obj.transform * Transform([[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]]) + absolute_d = str(Path(obj.get('d'))) + path = CubicSuperPath(absolute_d) + Path(path).transform(mat) + absolute_object_path = str(path) + # inkex.debug(absolute_object_path) + + elif obj.tag == inkex.addNS('g','svg'): + absolute_object_path="" + for p in obj.iterfind(".//{http://www.w3.org/2000/svg}path"): + + absolute_d = str(Path(p.get('d'))) + mat = p.transform * Transform([[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]]) + path = CubicSuperPath(absolute_d) + Path(path).transform(mat) + absolute_object_path += str(Path(path)) + # inkex.debug(absolute_object_path) + + new_path = projection(absolute_object_path,coords_to_project) + attributes = {'d':new_path} + new_element = etree.SubElement(self.svg.get_current_layer(),inkex.addNS('path','svg'),attributes) + + else: + if envelope.tag == inkex.addNS('g','svg'): + inkex.errormsg("The second selected object is a group, not a path.\nTry using the procedure Object->Ungroup.") + else: + inkex.errormsg("The second selected object is not a path.\nTry using the procedure Path->Object to Path.") + exit() + else: + inkex.errormsg("The first selected object is not a path.\nTry using the procedure Path->Object to Path.") + exit() + +if __name__ == '__main__': + AnotherPerspective().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/apollonian_gasket/apollon.py b/extensions/fablabchemnitz/apollonian_gasket/apollon.py new file mode 100644 index 00000000..565485ab --- /dev/null +++ b/extensions/fablabchemnitz/apollonian_gasket/apollon.py @@ -0,0 +1,194 @@ +#!/usr/bin/env python3 +# Generate Apollonian Gaskets -- the math part. + +# Copyright (c) 2014 Ludger Sandig +# This file is part of apollon. + +# Apollon is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# Apollon is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with Apollon. If not, see . + +from cmath import * +import random + +class Circle(object): + """ + A circle represented by center point as complex number and radius. + """ + def __init__ ( self, mx, my, r ): + """ + @param mx: x center coordinate + @type mx: int or float + @param my: y center coordinate + @type my: int or float + @param r: radius + @type r: int or float + """ + self.r = r + self.m = (mx +my*1j) + + def __repr__ ( self ): + """ + Pretty printing + """ + return "Circle( self, %s, %s, %s )" % (self.m.real, self.m.imag, self.r) + + def __str__ ( self ): + """ + Pretty printing + """ + return "Circle x:%.3f y:%.3f r:%.3f [cur:%.3f]" % (self.m.real, self.m.imag, self.r.real, self.curvature().real) + + def curvature (self): + """ + Get circle's curvature. + @rtype: float + @return: Curvature of the circle. + """ + return 1/self.r + +def outerTangentCircle( circle1, circle2, circle3 ): + """ + Takes three externally tangent circles and calculates the fourth one enclosing them. + @param circle1: first circle + @param circle2: second circle + @param circle3: third circle + @type circle1: L{Circle} + @type circle2: L{Circle} + @type circle3: L{Circle} + @return: The enclosing circle + @rtype: L{Circle} + """ + cur1 = circle1.curvature() + cur2 = circle2.curvature() + cur3 = circle3.curvature() + m1 = circle1.m + m2 = circle2.m + m3 = circle3.m + cur4 = -2 * sqrt( cur1*cur2 + cur2*cur3 + cur1 * cur3 ) + cur1 + cur2 + cur3 + m4 = ( -2 * sqrt( cur1*m1*cur2*m2 + cur2*m2*cur3*m3 + cur1*m1*cur3*m3 ) + cur1*m1 + cur2*m2 + cur3*m3 ) / cur4 + circle4 = Circle( m4.real, m4.imag, 1/cur4 ) + + return circle4 + + +def tangentCirclesFromRadii( r2, r3, r4 ): + """ + Takes three radii and calculates the corresponding externally + tangent circles as well as a fourth one enclosing them. The enclosing + circle is the first one. + + @param r2, r3, r4: Radii of the circles to calculate + @type r2: int or float + @type r3: int or float + @type r4: int or float + @return: The four circles, where the first one is the enclosing one. + @rtype: (L{Circle}, L{Circle}, L{Circle}, L{Circle}) + """ + circle2 = Circle( 0, 0, r2 ) + circle3 = Circle( r2 + r3, 0, r3 ) + m4x = (r2*r2 + r2*r4 + r2*r3 - r3*r4) / (r2 + r3) + m4y = sqrt( (r2 + r4) * (r2 + r4) - m4x*m4x ) + circle4 = Circle( m4x, m4y, r4 ) + circle1 = outerTangentCircle( circle2, circle3, circle4 ) + return ( circle1, circle2, circle3, circle4 ) + +def secondSolution( fixed, c1, c2, c3 ): + """ + If given four tangent circles, calculate the other one that is tangent + to the last three. + + @param fixed: The fixed circle touches the other three, but not + the one to be calculated. + + @param c1, c2, c3: Three circles to which the other tangent circle + is to be calculated. + + @type fixed: L{Circle} + @type c1: L{Circle} + @type c2: L{Circle} + @type c3: L{Circle} + @return: The circle. + @rtype: L{Circle} + """ + + curf = fixed.curvature() + cur1 = c1.curvature() + cur2 = c2.curvature() + cur3 = c3.curvature() + + curn = 2 * (cur1 + cur2 + cur3) - curf + mn = (2 * (cur1*c1.m + cur2*c2.m + cur3*c3.m) - curf*fixed.m ) / curn + return Circle( mn.real, mn.imag, 1/curn ) + +class ApollonianGasket(object): + """ + Container for an Apollonian Gasket. + """ + def __init__(self, c1, c2, c3): + """ + Creates a basic apollonian Gasket with four circles. + + @param c1, c2, c3: The curvatures of the three inner circles of the + starting set (i.e. depth 0 of the recursion). The fourth, + enclosing circle will be calculated from them. + @type c1: int or float + @type c2: int or float + @type c3: int or float + """ + self.start = tangentCirclesFromRadii( 1/c1, 1/c2, 1/c3 ) + self.genCircles = list(self.start) + + def recurse(self, circles, depth, maxDepth): + """Recursively calculate the smaller circles of the AG up to the + given depth. Note that for depth n we get 2*3^{n+1} circles. + + @param maxDepth: Maximal depth of the recursion. + @type maxDepth: int + + @param circles: 4-Tuple of circles for which the second + solutions are calculated + @type circles: (L{Circle}, L{Circle}, L{Circle}, L{Circle}) + + @param depth: Current depth + @type depth: int + """ + if( depth == maxDepth ): + return + (c1, c2, c3, c4) = circles + if( depth == 0 ): + # First recursive step, this is the only time we need to + # calculate 4 new circles. + del self.genCircles[4:] + cspecial = secondSolution( c1, c2, c3, c4 ) + self.genCircles.append( cspecial ) + self.recurse( (cspecial, c2, c3, c4), 1, maxDepth ) + + cn2 = secondSolution( c2, c1, c3, c4 ) + self.genCircles.append( cn2 ) + cn3 = secondSolution( c3, c1, c2, c4 ) + self.genCircles.append( cn3 ) + cn4 = secondSolution( c4, c1, c2, c3 ) + self.genCircles.append( cn4 ) + + self.recurse( (cn2, c1, c3, c4), depth+1, maxDepth ) + self.recurse( (cn3, c1, c2, c4), depth+1, maxDepth ) + self.recurse( (cn4, c1, c2, c3), depth+1, maxDepth ) + + def generate(self, depth): + """ + Wrapper for the recurse function. Generate the AG, + @param depth: Recursion depth of the Gasket + @type depth: int + """ + self.recurse(self.start, 0, depth) + diff --git a/extensions/fablabchemnitz/apollonian_gasket/apollonian_gasket.inx b/extensions/fablabchemnitz/apollonian_gasket/apollonian_gasket.inx new file mode 100644 index 00000000..c069020e --- /dev/null +++ b/extensions/fablabchemnitz/apollonian_gasket/apollonian_gasket.inx @@ -0,0 +1,34 @@ + + + Apollonian Gasket + fablabchemnitz.de.apollonian_gasket + + + 3 + 2.0 + 3.0 + 3.0 + true + true + + + + + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/apollonian_gasket/apollonian_gasket.py b/extensions/fablabchemnitz/apollonian_gasket/apollonian_gasket.py new file mode 100644 index 00000000..c859d2db --- /dev/null +++ b/extensions/fablabchemnitz/apollonian_gasket/apollonian_gasket.py @@ -0,0 +1,101 @@ +#!/usr/bin/env python3 + +import inkex +import apolloniangasket_func +from lxml import etree + +__version__ = '0.0' + +def cplxs2pts(zs): + tt = [] + for z in zs: + tt.extend([z.real,z.imag]) + return tt + +def draw_SVG_circle(parent, r, cx, cy, name): + " structure an SVG circle entity under parent " + circ_attribs = { 'cx': str(cx), 'cy': str(cy), + 'r': str(r), + inkex.addNS('label','inkscape'): name} + circle = etree.SubElement(parent, inkex.addNS('circle','svg'), circ_attribs) + +def draw_SVG_circleAsPath(parent, r, cx, cy, name): + circ_attribs = { + "d": "M {:0.6f}, {:0.6f} a {:0.6f},{:0.6f} 0 1,0 {:0.6f},0 a {:0.6f},{:0.6f} 0 1,0 {:0.6f},0".format( + cx - r, cy, r, r, 2*r, r, r, -2*r), + inkex.addNS('label','inkscape'): name} + circle = etree.SubElement(parent, inkex.addNS('path','svg'), circ_attribs) + +class Gasket(inkex.EffectExtension): # choose a better name + + def add_arguments(self, pars): + pars.add_argument("--active_tab") + pars.add_argument("--depth",type=int, default=3) + pars.add_argument("--c1", type=float, default=2.0) + pars.add_argument("--c2", type=float, default=3.0) + pars.add_argument("--c3", type=float, default=3.0) + pars.add_argument("--shrink", type=inkex.Boolean, default=True) + pars.add_argument("--as_paths", type=inkex.Boolean, default=True) + + def calc_unit_factor(self): + unit_factor = self.svg.unittouu(str(1.0) + self.options.units) + return unit_factor + +### ------------------------------------------------------------------- +### Main function and is called when the extension is run. + + def effect(self): + + #set up path styles + path_stroke = '#DD0000' # take color from tab3 + path_fill = 'none' # no fill - just a line + path_stroke_width = self.svg.unittouu(str(0.1) + "mm") + page_id = self.options.active_tab # sometimes wrong the very first time + + style_curve = { 'stroke': path_stroke, + 'fill': 'none', + 'stroke-width': path_stroke_width } + + # This finds center of current view in inkscape + t = 'translate(%s,%s)' % (self.svg.namedview.center[0], self.svg.namedview.center[1]) + + # add a group to the document's current layer + #all the circles inherit style from this group + g_attribs = { inkex.addNS('label','inkscape'): 'zengon' + "_%d"%(self.options.depth), + inkex.addNS('transform-center-x','inkscape'): str(0), + inkex.addNS('transform-center-y','inkscape'): str(0), + 'transform': t, + 'style' : str(inkex.Style((style_curve))), + 'info':'N: '} + topgroup = etree.SubElement(self.svg.get_current_layer(), 'g', g_attribs) + + circles = apolloniangasket_func.main(c1=self.options.c1, + c2=self.options.c2, + c3=self.options.c3, + depth=self.options.depth) + + #shrink the circles so they don't touch + #useful for laser cutting + + if self.options.shrink: + circles = circles[1:] + for cc in circles: + cc.r = abs(cc.r) + if cc.r >.5: + cc.r -= .1 + else: + cc.r *= .9 + + scale_factor = 200 + for c in circles: + cx, cy, r = c.m.real, c.m.imag, abs(c.r) + + #rescale and add circle to document + cx, cy, r = scale_factor * cx , scale_factor * cy, scale_factor * r + if self.options.as_paths is False: + draw_SVG_circle(topgroup, r, cx, cy, 'apollian') + else: + draw_SVG_circleAsPath(topgroup, r, cx, cy, 'apollian') + +if __name__ == '__main__': + Gasket().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/apollonian_gasket/apolloniangasket_func.py b/extensions/fablabchemnitz/apollonian_gasket/apolloniangasket_func.py new file mode 100644 index 00000000..64315b6e --- /dev/null +++ b/extensions/fablabchemnitz/apollonian_gasket/apolloniangasket_func.py @@ -0,0 +1,112 @@ +#!/usr/bin/env python3 + +# Command line program to create svg apollonian circles + +# Copyright (c) 2014 Ludger Sandig +# This file is part of apollon. + +# Apollon is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# Apollon is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with Apollon. If not, see . + +import math +from apollon import ApollonianGasket + +def ag_to_svg(circles, colors, tresh=0.00005): + """ + Convert a list of circles to svg, optionally color them. + @param circles: A list of L{Circle}s + @param colors: A L{ColorMap} object + @param tresh: Only circles with a radius greater than the product of tresh and maximal radius are saved + """ + svg = [] + + tresh = .000005 + print ('>>', tresh) + + # Find the biggest circle, which hopefully is the enclosing one + # and has a negative radius because of this. Note that this does + # not have to be the case if we picked an unlucky set of radii at + # the start. If that was the case, we're screwed now. + + big = min(circles, key=lambda c: c.r.real) + + # Move biggest circle to front so it gets drawn first + circles.remove(big) + circles.insert(0, big) + + if big.r.real < 0: + # Bounding box from biggest circle, lower left corner and two + # times the radius as width + corner = big.m - ( abs(big.r) + abs(big.r) * 1j ) + vbwidth = abs(big.r)*2 + width = 500 # Hardcoded! + + # Line width independent of circle size + lw = (vbwidth/width) + + svg.append('\n' % (width, width, corner.real, corner.imag, vbwidth, vbwidth)) + + # Keep stroke width relative + svg.append('\n' % lw) + + # Iterate through circle list, circles with radius radmin: + fill = colors.color_for(abs(c.r)) + svg.append(( '\n' % (c.m.real, c.m.imag, abs(c.r), fill))) + + svg.append('\n') + svg.append('\n') + + return ''.join(svg) + +def impossible_combination(c1, c2, c3): + # If any curvatures x, y, z satisfy the equation + # x = 2*sqrt(y*z) + y + z + # then no fourth enclosing circle can be genereated, because it + # would be a line. + # We need to see for c1, c2, c3 if they could be "x". + + impossible = False + + sets = [(c1,c2,c3), (c2,c3,c1), (c3,c1,c2)] + + for (x, y, z) in sets: + if x == 2*math.sqrt(y*z) + y + z: + impossible = True + + return impossible + +def main(c1=3.,c2=2.,c3=2.,depth=5): + # Sanity checks + for c in [c1, c2,c3]: + if c == 0: + print("Error: curvature or radius can't be 0") + exit(1) + if impossible_combination(c1, c2, c3): + print("Error: no apollonian gasket possible for these curvatures") + exit(1) + + ag = ApollonianGasket(c1, c2, c3) + + ag.generate(depth) + + # Get smallest and biggest radius + smallest = abs(min(ag.genCircles, key=lambda c: abs(c.r.real)).r.real) + biggest = abs(max(ag.genCircles, key=lambda c: abs(c.r.real)).r.real) + + return ag.genCircles \ No newline at end of file diff --git a/extensions/fablabchemnitz/apply_transformations/apply_transformations.inx b/extensions/fablabchemnitz/apply_transformations/apply_transformations.inx new file mode 100644 index 00000000..cdcde283 --- /dev/null +++ b/extensions/fablabchemnitz/apply_transformations/apply_transformations.inx @@ -0,0 +1,16 @@ + + + Apply Transformations + fablabchemnitz.de.apply_transformations + + all + + + + + + + + diff --git a/extensions/fablabchemnitz/apply_transformations/apply_transformations.py b/extensions/fablabchemnitz/apply_transformations/apply_transformations.py new file mode 100644 index 00000000..c90b80ef --- /dev/null +++ b/extensions/fablabchemnitz/apply_transformations/apply_transformations.py @@ -0,0 +1,206 @@ +#!/usr/bin/env python3 +# +# License: GPL2 +# Copyright Mark "Klowner" Riedesel +# https://github.com/Klowner/inkscape-applytransforms +# +import copy +import math +from lxml import etree +import inkex +from inkex.paths import CubicSuperPath, Path +from inkex.transforms import Transform +from inkex.styles import Style + +NULL_TRANSFORM = Transform([[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]]) + + +class ApplyTransformations(inkex.EffectExtension): + + def effect(self): + if self.svg.selected: + for id, shape in self.svg.selected.items(): + self.recursiveFuseTransform(shape) + else: + self.recursiveFuseTransform(self.document.getroot()) + + @staticmethod + def objectToPath(element): + if element.tag == inkex.addNS('g', 'svg'): + return element + + if element.tag == inkex.addNS('path', 'svg') or element.tag == 'path': + for attName in element.attrib.keys(): + if ("sodipodi" in attName) or ("inkscape" in attName): + del element.attrib[attName] + return element + + return element + + def scaleStrokeWidth(self, element, transf): + if 'style' in element.attrib: + style = element.attrib.get('style') + style = dict(Style.parse_str(style)) + update = False + + if 'stroke-width' in style: + try: + stroke_width = float(style.get('stroke-width').strip().replace("px", "")) + stroke_width *= math.sqrt(abs(transf.a * transf.d)) + style['stroke-width'] = str(stroke_width) + update = True + except AttributeError: + pass + + if update: + element.attrib['style'] = Style(style).to_str() + + def recursiveFuseTransform(self, element, transf=[[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]]): + + transf = Transform(transf) * Transform(element.get("transform", None)) #a, b, c, d = linear transformations / e, f = translations + + if 'transform' in element.attrib: + del element.attrib['transform'] + + element = ApplyTransformations.objectToPath(element) + + if transf == NULL_TRANSFORM: + # Don't do anything if there is effectively no transform applied + # reduces alerts for unsupported elements + pass + elif 'd' in element.attrib: + d = element.get('d') + p = CubicSuperPath(d) + p = Path(p).to_absolute().transform(transf, True) + element.set('d', str(Path(CubicSuperPath(p).to_path()))) + + self.scaleStrokeWidth(element, transf) + + elif element.tag in [inkex.addNS('polygon', 'svg'), + inkex.addNS('polyline', 'svg')]: + points = element.get('points') + points = points.strip().split(' ') + for k, p in enumerate(points): + if ',' in p: + p = p.split(',') + p = [float(p[0]), float(p[1])] + p = transf.apply_to_point(p) + p = [str(p[0]), str(p[1])] + p = ','.join(p) + points[k] = p + points = ' '.join(points) + element.set('points', points) + + self.scaleStrokeWidth(element, transf) + + elif element.tag in [inkex.addNS("ellipse", "svg"), inkex.addNS("circle", "svg")]: + + def isequal(a, b): + return abs(a - b) <= transf.absolute_tolerance + + if element.TAG == "ellipse": + rx = float(element.get("rx")) + ry = float(element.get("ry")) + else: + rx = float(element.get("r")) + ry = rx + + cx = float(element.get("cx")) + cy = float(element.get("cy")) + sqxy1 = (cx - rx, cy - ry) + sqxy2 = (cx + rx, cy - ry) + sqxy3 = (cx + rx, cy + ry) + newxy1 = transf.apply_to_point(sqxy1) + newxy2 = transf.apply_to_point(sqxy2) + newxy3 = transf.apply_to_point(sqxy3) + + element.set("cx", (newxy1[0] + newxy3[0]) / 2) + element.set("cy", (newxy1[1] + newxy3[1]) / 2) + edgex = math.sqrt( + abs(newxy1[0] - newxy2[0]) ** 2 + abs(newxy1[1] - newxy2[1]) ** 2 + ) + edgey = math.sqrt( + abs(newxy2[0] - newxy3[0]) ** 2 + abs(newxy2[1] - newxy3[1]) ** 2 + ) + + if not isequal(edgex, edgey) and ( + element.TAG == "circle" + or not isequal(newxy2[0], newxy3[0]) + or not isequal(newxy1[1], newxy2[1]) + ): + inkex.utils.errormsg( + "Warning: Shape %s (%s) is approximate only, try Object to path first for better results" + % (element.TAG, element.get("id")) + ) + + if element.TAG == "ellipse": + element.set("rx", edgex / 2) + element.set("ry", edgey / 2) + else: + element.set("r", edgex / 2) + + # this is unstable at the moment + elif element.tag == inkex.addNS("use", "svg"): + href = None + old_href_key = '{http://www.w3.org/1999/xlink}href' + new_href_key = 'href' + if element.attrib.has_key(old_href_key) is True: # {http://www.w3.org/1999/xlink}href (which gets displayed as 'xlink:href') attribute is deprecated. the newer attribute is just 'href' + href = element.attrib.get(old_href_key) + #element.attrib.pop(old_href_key) + if element.attrib.has_key(new_href_key) is True: + href = element.attrib.get(new_href_key) #we might overwrite the previous deprecated xlink:href but it's okay + #element.attrib.pop(new_href_key) + + #get the linked object from href attribute + linkedObject = self.document.getroot().xpath("//*[@id = '%s']" % href.lstrip('#')) #we must remove hashtag symbol + linkedObjectCopy = copy.copy(linkedObject[0]) + objectType = linkedObject[0].tag + + if objectType == inkex.addNS("image", "svg"): + mask = None #image might have an alpha channel + new_mask_id = self.svg.get_unique_id("mask") + newMask = None + if element.attrib.has_key('mask') is True: + mask = element.attrib.get('mask') + #element.attrib.pop('mask') + + #get the linked mask from mask attribute. We remove the old and create a new + if mask is not None: + linkedMask = self.document.getroot().xpath("//*[@id = '%s']" % mask.lstrip('url(#').rstrip(')')) #we must remove hashtag symbol + linkedMask[0].delete() + maskAttributes = {'id': new_mask_id} + newMask = etree.SubElement(self.document.getroot(), inkex.addNS('mask', 'svg'), maskAttributes) + + width = float(linkedObjectCopy.get('width')) * transf.a + height = float(linkedObjectCopy.get('height')) * transf.d + linkedObjectCopy.set('width', '{:1.6f}'.format(width)) + linkedObjectCopy.set('height', '{:1.6f}'.format(height)) + linkedObjectCopy.set('x', '{:1.6f}'.format(transf.e)) + linkedObjectCopy.set('y', '{:1.6f}'.format(transf.f)) + if newMask is not None: + linkedObjectCopy.set('mask', 'url(#' + new_mask_id + ')') + maskRectAttributes = {'x': '{:1.6f}'.format(transf.e), 'y': '{:1.6f}'.format(transf.f), 'width': '{:1.6f}'.format(width), 'height': '{:1.6f}'.format(height), 'style':'fill:#ffffff;'} + maskRect = etree.SubElement(newMask, inkex.addNS('rect', 'svg'), maskRectAttributes) + self.document.getroot().append(linkedObjectCopy) #for each svg:use we append a copy to the document root + element.delete() #then we remove the use object + else: + #self.recursiveFuseTransform(linkedObjectCopy, transf) + self.recursiveFuseTransform(element.unlink(), transf) + + elif element.tag in [inkex.addNS('rect', 'svg'), + inkex.addNS('text', 'svg'), + inkex.addNS('image', 'svg')]: + inkex.utils.errormsg( + "Shape %s (%s) not yet supported, try Object to path first" + % (element.TAG, element.get("id")) + ) + + else: + # e.g. + self.scaleStrokeWidth(element, transf) + + for child in element.getchildren(): + self.recursiveFuseTransform(child, transf) + +if __name__ == '__main__': + ApplyTransformations().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/archimedes_spiral/archimedes_spiral.inx b/extensions/fablabchemnitz/archimedes_spiral/archimedes_spiral.inx new file mode 100644 index 00000000..5c9a5948 --- /dev/null +++ b/extensions/fablabchemnitz/archimedes_spiral/archimedes_spiral.inx @@ -0,0 +1,55 @@ + + + Archimedes Spiral + fablabchemnitz.de.archimedes_spiral + + + + 50 + 3 + 50 + + + + + 0 + 5 + + + + + + + + + + + + + + + + + + + + + + + + + ../000_about_fablabchemnitz.svg + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/archimedes_spiral/archimedes_spiral.py b/extensions/fablabchemnitz/archimedes_spiral/archimedes_spiral.py new file mode 100644 index 00000000..5c55d240 --- /dev/null +++ b/extensions/fablabchemnitz/archimedes_spiral/archimedes_spiral.py @@ -0,0 +1,89 @@ +#!/usr/bin/env python3 +""" +Copyright (C) 2017 Panagiotis Loukas +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WAphiANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WAphiANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +Version 0.2 +This script was written by Panagiotis Loukas to make spiral easy. +It simply, + +Have fun :) +PS. + Written on Arch. +""" + +import inkex +from lxml import etree +from math import cos, sin, pi, log, sqrt + +class Archimedes(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument('--tab') + pars.add_argument('--r', type = int, default = '50') + pars.add_argument('--a', type = float, default = '3') + pars.add_argument('--step', type = int, default = '50') + pars.add_argument('--trl', default = '1') + pars.add_argument('--turns', type = float, default = '5') + pars.add_argument('--length', type = float, default = '500') + + def effect(self): + th = pi / 3 + a = self.options.a + r = self.options.r + + length = self.options.length + if length > 0: + turns = self.angle(a, r, length, th) / (2 * pi) + else: + turns = self.options.turns + + if self.options.trl == '1': + step = -self.options.step + else: + step = self.options.step + + layer = etree.SubElement(self.document.getroot(),'g') + path = etree.Element(inkex.addNS('path','svg')) + path.set('d', self.built(r, step, a, turns)) + path.set('style',"fill:none;stroke:#000000;stroke-width:1px;stroke-opacity:1") + layer.append(path) + + def built(self, r0, st = 4, a = 4, k = 1, th = 0): + step = 2 * pi / st + r = r0 + s = "M " + str(r * cos(th)) + ", " + str(-r * sin(th)) + for i in range(0, int(k * (abs(st)))): + prin = th + i * step + meta = th + (i + 1) * step + rp = r0 + abs(a * prin)# instead we put the absolute value the spiral will drift inwards + rm = r0 + abs(a * meta)# at the absolute price closes outwards + + s += "a " + str(rm) + "," + str(rm) + " 0 0," + self.options.trl + " " + str(-rp * cos(prin) + rm * cos(meta)) + "," + str(rp * sin(prin) -rm * sin(meta)) + return s + + # see https://mathepedia.de/Archimedische_Spirale.html for formula of total arc length + def spirallength(self, a, r0, th): + phi = (r0 / a) + th + phi_sqrt = sqrt(phi ** 2 + 1) + return (a / 2) * (phi * phi_sqrt + log(phi + phi_sqrt)) + + def ds(self, a, r0, th): + return self.spirallength(a, r0, th) - self.spirallength(a, r0, 0) + + def angle(self, a, r0, length, th): + i = 0.0 + while (True): + ls=self.ds(a, r0, i) + if length - ls > 100: + i += 0.01 + elif length - ls > 10: i += 0.001 + elif length - ls > 1: i += 0.0001 + elif length - ls > 0.1: i += 0.00001 + elif length - ls > 0.01: i += 0.000001 + else: break + return i + +if __name__ == '__main__': + Archimedes().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/barrel_distorsion/barrel_distorsion.inx b/extensions/fablabchemnitz/barrel_distorsion/barrel_distorsion.inx new file mode 100644 index 00000000..bb6d8563 --- /dev/null +++ b/extensions/fablabchemnitz/barrel_distorsion/barrel_distorsion.inx @@ -0,0 +1,17 @@ + + + Barrel Distortion + fablabchemnitz.de.barrel_distorsion + -1.0 + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/barrel_distorsion/barrel_distorsion.py b/extensions/fablabchemnitz/barrel_distorsion/barrel_distorsion.py new file mode 100644 index 00000000..107ecf84 --- /dev/null +++ b/extensions/fablabchemnitz/barrel_distorsion/barrel_distorsion.py @@ -0,0 +1,100 @@ +import math +import re +import inkex +from inkex import bezier +from inkex.paths import Path, CubicSuperPath + +class BarrelDistorsion(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument("--lambda_coef", type=float, default=-5.0, help="command line help") + + def distort_coordinates(self, x, y): + """Method applies barrel distorsion to given points with distorsion center in center of image, selected to + + Args: + x (float): X coordinate of given point + y (float): Y coordinate of given point + + Returns: + tuple(float, float): Tuple with X,Y distorted coordinates of given point + """ + x_u = (x - self.x_c) / (self.width + self.height) + y_u = (y - self.y_c) / (self.width + self.height) + x_d = x_u / 2 / (self.q * y_u**2 + x_u**2 * self.q) * (1 - math.sqrt(1 - 4 * self.q * y_u**2 - 4 * x_u**2 * self.q)) + y_d = y_u / 2 / (self.q * y_u**2 + x_u**2 * self.q) * (1 - math.sqrt(1 - 4 * self.q * y_u**2 - 4 * x_u**2 * self.q)) + x_d *= self.width + self.height + y_d *= self.width + self.height + x_d += self.x_c + y_d += self.y_c + return x_d, y_d + + def split_into_nodes(self, nodes_number=1000): + for id, node in self.svg.selected.items(): + if node.tag == inkex.addNS('path', 'svg'): + p = CubicSuperPath(node.get('d')) + new = [] + for sub in p: + new.append([sub[0][:]]) + i = 1 + while i <= len(sub) - 1: + length = bezier.cspseglength( + new[-1][-1], sub[i]) + + splits = nodes_number + for s in range(int(splits), 1, -1): + new[-1][-1], next, sub[ + i] = bezier.cspbezsplitatlength( + new[-1][-1], sub[i], 1.0 / s) + new[-1].append(next[:]) + new[-1].append(sub[i]) + i += 1 + node.set('d', str(CubicSuperPath(new))) + + def effect(self): + if re.match(r'g\d+', + list(self.svg.selected.items())[0][0]) is not None: + raise SystemExit( + "You are trying to distort group of objects.\n This extension works only with path objects due to Inkscape API restrictions.\n Ungroup your objects and try again." + ) + self.split_into_nodes() + self.q = self.options.lambda_coef + if self.q == 0.0: + inkex.errormsg("Invalid lambda coefficient. May not be exactly zero.") + return + nodes = [] + for id, node in self.svg.selected.items(): + if node.tag == inkex.addNS('path', 'svg'): + path = Path(node.get('d')).to_arrays() + nodes += path + nodes_filtered = [x for x in nodes if x[0] != 'Z'] + x_coordinates = [x[-1][-2] for x in nodes_filtered] + y_coordinates = [y[-1][-1] for y in nodes_filtered] + self.width = max(x_coordinates) - min(x_coordinates) + self.height = max(y_coordinates) - min(y_coordinates) + self.x_c = sum(x_coordinates) / len(x_coordinates) + self.y_c = sum(y_coordinates) / len(y_coordinates) + for id, node in self.svg.selected.items(): + if node.tag == inkex.addNS('path', 'svg'): + path = Path(node.get('d')).to_arrays() + distorted = [] + first = True + for cmd, params in path: + if cmd != 'Z': + if first == True: + x = params[-2] + y = params[-1] + distorted.append( + ['M', + list(self.distort_coordinates(x, y))]) + first = False + else: + x = params[-2] + y = params[-1] + distorted.append( + ['L', self.distort_coordinates(x, y)]) + node.set('d', str(Path(distorted))) + + +if __name__ == '__main__': + BarrelDistorsion().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/batch_task/BaseExtension.py b/extensions/fablabchemnitz/batch_task/BaseExtension.py new file mode 100644 index 00000000..7e558f4d --- /dev/null +++ b/extensions/fablabchemnitz/batch_task/BaseExtension.py @@ -0,0 +1,195 @@ +#!/usr/bin/env python3 + +# pylint: disable=too-many-ancestors + +# standard library +import os +import sys +import re +import argparse +from shutil import copy2 +# from subprocess import Popen, PIPE +# import time +# from lxml import etree + +# local library +import inkex +from inkex.command import inkscape +from inkex.elements import _selected as selection + +MIN_PYTHON_VERSION = (3, 6) # Mainly for f-strings +if (sys.version_info.major, sys.version_info.minor) < (3, 6): + inkex.Effect.msg(f"Python {MIN_PYTHON_VERSION[0]}.{MIN_PYTHON_VERSION[1]} or later required.") + sys.exit(1) + + +class BaseExtension(inkex.Effect): + """Custom class that makes creation of extensions easier. + + Users of this class need not worry about boilerplates, such as how to + call inkscape via shell, and the management of tempfiles. Useful functions + are also provided.""" + + def __init__(self, custom_effect, args_adder=None): + """Init base class. + + In a typical Inkscape extension that does not make use of BaseExtension, + the effect is determined by the "effect" method of the extension class. + This init function will take in a method, and run it in the "effect" method + together with the other boilerplate. + + This init method takes in a function under the custom_effect argument. + This function will handle the user's effects, minus the boilerplate. It + has to return a list[str] object, with each str being a verb that inkscape + can execute.""" + + inkex.Effect.__init__(self) + self.custom_effect = custom_effect + + self._msg = self.msg # The old msg function provided by inkex (only accepts strings) + def msg(*args, sep=' '): + """Improved msg method, similar to Python's print""" + self._msg(sep.join([str(arg) for arg in args])) + self.msg = msg + + if args_adder is not None: + args_adder(self.arg_parser) + self.args_adder = args_adder + + + + + def z_sort(self, alist): + """Return new list sorted in document order (depth-first traversal).""" + return list(self.z_iter(alist)) + + + def z_iter(self, alist): + """Return iterator over ids in document order (depth-first traversal).""" + id_list = list(alist) + count = len(id_list) + for element in self.document.getroot().iter(): + # element_id = element.get('id') + # if element_id is not None and element_id in id_list: + if element in alist: + id_list.remove(element) + yield element + count -= 1 + if not count: + return + + @staticmethod + def show(obj): + """Returns a str representation of object""" + def rep(obj): + if hasattr(obj, 'get_id'): + return f"{type(obj).__name__}({obj.get_id()})" + return f"{type(obj).__name__}" + + + if type(obj).__name__ == 'ElementList': + return ('ElementList(' + + ', '.join([rep(child) for child in obj.values()]) + + ')') + if isinstance(obj, list): + return '[' + ', '.join(rep(child) for child in obj) + ']' + + + return rep(obj) + + + def find(self, obj: any, xpath='/*') -> list: + """Returns a list of objects which satisfies XPath + + Args: + obj (any): Parent object to recurse into. Examples include root, selected, or a group. + xpath (str, optional): Defaults to '/*'. + + Returns: + list: [description] + """ + + BASIC_TAGS = ('circle', 'ellipse', 'line', 'polygon', 'polyline', 'rect', 'path', 'image', 'g') + SPECIAL_TAGS = { + 'l': "svg:g[@inkscape:groupmode='layer']", + 'p': 'svg:path' + } + + xpath = re.sub(r'((?<=/)(' + '|'.join(BASIC_TAGS) + r')\b)', r'svg:\1', xpath) + for k, v in SPECIAL_TAGS.items(): + xpath = re.sub('(?<=/)' + k + r'\b', v, xpath) + + xpath = re.sub(r'(?<=\[)(\d+):(\d+)(?=\])', r'position()>=\1 and position()<\2', xpath) + + if type(obj).__name__ != 'ElementList': + obj = [obj] + + output = [] + for child in obj: + matches = child.xpath(xpath, namespaces={ + 'svg': 'http://www.w3.org/2000/svg', + 'inkscape': 'http://www.inkscape.org/namespaces/inkscape'}) + for match in matches: + if type(match).__name__ not in ('Defs', 'NamedView', 'Metadata'): + output.append(match) + + return output + + + def effect(self): + """Main entry point to process current document. Not to be called externally.""" + + actions_list = self.custom_effect(self) + + if actions_list is None or actions_list == []: + self.msg("No actions received. Perhaps you are calling inkex object methods?") + elif isinstance(actions_list, list): + tempfile = self.options.input_file + "-BaseExtension.svg" + + # prepare + copy2(self.options.input_file, tempfile) + + #disabled because it leads to crash Inkscape: https://gitlab.com/inkscape/inkscape/-/issues/2487 + #actions_list.append("FileSave") + #actions_list.append("FileQuit") + #extra_param = "--with-gui" + + #workaround to fix it (we use export to tempfile instead processing and saving again) + actions_list.append("export-type:svg") + actions_list.append("export-filename:{}".format(tempfile)) + actions_list.append("export-do") + extra_param = "--batch-process" + + actions = ";".join(actions_list) + inkscape(tempfile, extra_param, actions=actions) + + + # finish up + # replace current document with content of temp copy file + self.document = inkex.load_svg(tempfile) + # update self.svg + self.svg = self.document.getroot() + + + # Clean up tempfile + try: + os.remove(tempfile) + except Exception: # pylint: disable=broad-except + pass + + def call(self, child, ext_options): + """Used to call an extension from another extension""" + + old_options = self.options + + parser = argparse.ArgumentParser() + child.args_adder(parser) + self.options = parser.parse_args([]) + + for k, v in ext_options.items(): + setattr(self.options, k, v) + + output = child.custom_effect(self) + self.options = old_options + + return output diff --git a/extensions/fablabchemnitz/batch_task/batch_task.inx b/extensions/fablabchemnitz/batch_task/batch_task.inx new file mode 100644 index 00000000..8453f35f --- /dev/null +++ b/extensions/fablabchemnitz/batch_task/batch_task.inx @@ -0,0 +1,177 @@ + + + Batch Task + fablabchemnitz.de.batch_task + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + all + + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/batch_task/batch_task.py b/extensions/fablabchemnitz/batch_task/batch_task.py new file mode 100644 index 00000000..e3cbc3ce --- /dev/null +++ b/extensions/fablabchemnitz/batch_task/batch_task.py @@ -0,0 +1,152 @@ +#!/usr/bin/env python3 +import os +import sys +import re +import subprocess + +from BaseExtension import BaseExtension + +# For linting purposes +from argparse import ArgumentParser + +"""If syntax error occurs here, change inkscape interpreter to python3""" + +"""I have yet to find a way for an extension to call another extension with parameters, +without GUI. This extension can be run as part of a standalone extension (using BaseExtension) +or imported for use by another extension. This workaround is done via the 'option' arg in +the 'custom_effect' function""" + + +def custom_effect(self: BaseExtension): + """Note: The init of the BaseExtension class will set its 'custom_effect' attr + to this function. Hence, the self arg is of type BaseExtension.""" + + + selected = self.svg.selected + root = self.document.getroot() + actions_list = [] + + proc = subprocess.run("inkscape --verb-list | grep -oP '^.+?(?=:)'", + shell=True, capture_output=True) + valid_actions_and_verbs = proc.stdout.decode().splitlines() + + proc = subprocess.run("inkscape --action-list | grep -oP '^.+?(?= *:)'", + shell=True, capture_output=True) + valid_actions_and_verbs += proc.stdout.decode().splitlines() + + + self.options.dry_run = self.options.dry_run == 'true' + + def verify_action(action): + if ':' in action: + action = action.split(':')[0] + if action not in valid_actions_and_verbs: + raise ValueError(action) + + def select_do_individually(objs, actions): + for obj in objs: + actions_list.append("EditDeselect") + actions_list.append("select-by-id:" + obj.get_id()) + if isinstance(actions, str): + actions = [actions] + for action in actions: + verify_action(action) + actions_list.append(action) + + def select_do_on_all(objs, actions): + for obj in objs: + actions_list.append("select-by-id:" + obj.get_id()) + + if isinstance(actions, str): + actions = [actions] + for action in actions: + verify_action(action) + actions_list.append(action) + effects = [] + try: + if self.options.tab_effect is None: + if self.options.effects is not None: + self.options.tab_effect = 'Multi' + elif self.options.effect1 is not None: + self.options.tab_effect = 'Simple' + + elif self.options.tab_effect in ('Preset', 'Simple'): + for attr in ('effect_' + self.options.tab_effect.lower() + str(i) for i in range(1, 4)): + e = getattr(self.options, attr) + if e != None: + effects += [e.strip()] + if effects == []: + raise ValueError + elif self.options.tab_effect == 'Multi': + if self.options.effects is None: + raise ValueError + for line in self.options.effects.split('\\n'): + effects += [e.strip() for e in line.split(';') if e != ''] + except ValueError: + self.msg("No effects inputted! Quitting...") + sys.exit(0) + + + if self.options.target == 'root': + objects = self.find(root, '/svg:svg' + self.options.xpath) + elif self.options.target == 'selected': + objects = self.find(selected, self.options.xpath) + if objects == []: + self.msg(f"No objects satisfies XPath: '{self.options.xpath}'.") + self.msg("Root:", self.show(root)) + self.msg("Selected:", self.show(selected)) + sys.exit(0) + + + try: + if self.options.mode == 'all': + select_do_on_all(objects, effects) + elif self.options.mode == 'indiv': + select_do_individually(objects, effects) + except ValueError as e: + self.msg(f"'{e.args[0]}' is not a valid action or verb in inkscape.") + sys.exit(1) + + if self.options.dry_run: + self.msg(f"{'DRY RUN':=^40}") + self.msg("Root:", self.show(self.find(root, '/*'))) + self.msg("Selected:", self.show(selected)) + self.msg() + self.msg("XPath:", self.show(objects)) + self.msg() + self.msg("Actions:", actions_list) + sys.exit(0) + return actions_list + + +def args_adder(arg_parser: ArgumentParser): + + arg_parser.add_argument("--target", default='root', help="Object to apply xpath find on") + arg_parser.add_argument("--xpath", default='/*', help="For selection of objects") + arg_parser.add_argument("--tab_main", default=None) + arg_parser.add_argument("--Simple", default=None) + arg_parser.add_argument("--Multi", default=None) + arg_parser.add_argument("--mode", default="all", help="Mode to apply effects on objects") + arg_parser.add_argument("--tab_effect", default=None) + for arg in (*(x + str(y) for x in ('effect_preset', 'effect_simple') for y in range(1, 4)), 'effects'): + arg_parser.add_argument(f"--{arg}", default=None, help="Inkscape verb for path op") + arg_parser.add_argument("--dry_run", default='false') + arg_parser.add_argument("--null_notebook", default='false') + + #import inkex + #for key, value in arg_parser.parse_args()._get_kwargs(): + # if value is not None: + # inkex.utils.debug("{}={}".format(key, value)) + +BatchTask = BaseExtension(custom_effect, args_adder=args_adder) + +if __name__ == '__main__': + BatchTask.run() + + + + +# Namespace(Multi='SelectionDiff', Simple='SelectionDiff', dry_run='false', effect1='SelectionBreakApart', effect2=None, effect3=None, effects=None, ids=['image25'], input_file='/tmp/ink_ext_XXXXXX.svgIDCKU0', mode='all', null='null', output=<_io.BufferedWriter name=''>, selected_nodes=[], tab_effect='Simple', tab_main='Options', target='root', xpath='/*') + + +# Namespace(Multi=None, Simple=None, dry_run='false', effect1='SelectionDelete', effect2=None, effect3=None, effects=None, mode='all', null='false', tab_effect=None, tab_main=None, target='root', xpath='/*') diff --git a/extensions/fablabchemnitz/bezier_envelope/bezier_envelope.inx b/extensions/fablabchemnitz/bezier_envelope/bezier_envelope.inx new file mode 100644 index 00000000..d632b4ed --- /dev/null +++ b/extensions/fablabchemnitz/bezier_envelope/bezier_envelope.inx @@ -0,0 +1,16 @@ + + + Bezier Envelope + fablabchemnitz.de.bezier_envelope + + path + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/bezier_envelope/bezier_envelope.py b/extensions/fablabchemnitz/bezier_envelope/bezier_envelope.py new file mode 100644 index 00000000..d9360c44 --- /dev/null +++ b/extensions/fablabchemnitz/bezier_envelope/bezier_envelope.py @@ -0,0 +1,399 @@ +#!/usr/bin/env python3 +''' +Bezier Envelope extension for Inkscape +Copyright (C) 2009 Gerrit Karius + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + +About the Bezier Envelope extension: + +This extension implements Bezier enveloping. +It takes an arbitrary path (the "letter") and a 4-sided path (the "envelope") as input. +The envelope must be 4 segments long. Unless the letter is to be rotated or flipped, +the envelope should begin at the upper left corner and be drawn clockwise. +The extension then attempts to squeeze the letter into the envelope +by rearranging all anchor and handle points of the letter's path. + +In order to do this, the bounding box of the letter is used. +All anchor and bezier handle points get new x and y coordinates between 0% and 100% +according to their place inside the bounding box. +The 4 sides of the envelope are then interpreted as deformed axes. +Points at 0% or 100% could be placed along these axes, but because most points +are somewhere inside the bounding box, some tweening of the axes must be done. + +The function mapPointsToMorph does the tweening. +Say, some point is at x=30%, y=40%. +For the tweening, the function tweenCubic first calculates a straight tween +of the y axis at the x percentage of 30%. +This tween axis now floats somewhere between the y axis keys at the x percentage, +but is not necessarily inside the envelope, because the x axes are not straight. +Now, the end points on the two x axes at 30% are calculated. The function match() +takes these points and calculates a "stretch" transform which maps the two anchor +points of the y axis tween to the two points on the x axes by rotating the tween and +stretching it along its endpoints. This transform is then applied to the handle points, +to get the entire tweened y axis to its x tweened position. +Last, the point at the y percentage 40% of this y axis tween is calculated. +That is the final point of the enveloped letter. + +Finally, after all of the letter's points have been recalculated in this manner, +the resulting path is taken and replaces the letter's original path. + +TODO: +* Currently, both letter and envelope must be paths to work. +-> Arbitrary other shapes like circles and rectangles should be interpreted as paths. +* It should be possible to select several letters, and squeeze them into one envelope as a group. +* It should be possible to insert a clone of the letter, instead of replacing it. +* This program was originally written in Java. Maybe for some code, Python shortcuts can be used. + +I hope the comments are not too verbose. Enjoy! + +''' +import inkex +from inkex import Transform +from inkex.paths import Path +import math +import sys +import ffgeom + + +class BezierEnvelope(inkex.EffectExtension): + + segmentTypes = ["move","line","quad","cubic","close"] + + def effect(self): + if len(self.options.ids) < 2: + inkex.errormsg("Two paths must be selected. The 1st is the letter, the 2nd is the envelope and must have 4 sides.") + exit() + + letterElement = self.svg.selected[self.options.ids[0]] + envelopeElement = self.svg.selected[self.options.ids[1]] + + if letterElement.get('inkscape:original-d') or envelopeElement.get('inkscape:original-d'): + inkex.errormsg("One or both selected paths have attribute 'inkscape:original-d' which points to Live Path Effects (LPE). Please convert to regular path.") + exit() + + if letterElement.tag != inkex.addNS('path','svg') or envelopeElement.tag != inkex.addNS('path','svg'): + inkex.errormsg("Both letter and envelope must be SVG paths.") + exit() + + axes = extractMorphAxes(Path( envelopeElement.get('d') ).to_arrays()) + if axes is None: + inkex.errormsg("No axes found on envelope.") + exit() + axisCount = len(axes) + if axisCount < 4: + inkex.errormsg("The envelope path has less than 4 segments.") + exit() + for i in range( 0, 4 ): + if axes[i] is None: + inkex.errormsg("axis[%i] is None" % i) + exit() + # morph the enveloped element according to the axes + morph_element( letterElement, envelopeElement, axes ); + + +def morph_element( letterElement, envelopeElement, axes ): + path = Path( letterElement.get('d') ).to_arrays() + morphedPath = morphPath( path, axes ) + letterElement.set("d", str(Path(morphedPath))) + + +# Morphs a path into a new path, according to cubic curved bounding axes. +def morphPath(path, axes): + bounds = [y for x in list(Path(path).bounding_box()) for y in list(x)] + assert len(bounds) == 4 + new_path = [] + current = [ 0.0, 0.0 ] + start = [ 0.0, 0.0 ] + + for cmd, params in path: + segmentType = cmd + points = params + if segmentType == "M": + start[0] = points[0] + start[1] = points[1] + segmentType = convertSegmentToCubic( current, segmentType, points, start ) + percentages = [0.0]*len(points) + morphed = [0.0]*len(points) + numPts = getNumPts( segmentType ) + normalizePoints( bounds, points, percentages, numPts ) + mapPointsToMorph( axes, percentages, morphed, numPts ) + addSegment( new_path, segmentType, morphed ) + if len(points) >= 2: + current[0] = points[ len(points)-2 ] + current[1] = points[ len(points)-1 ] + return new_path + + +def getNumPts( segmentType ): + if segmentType == "M": + return 1 + if segmentType == "L": + return 1 + if segmentType == "Q": + return 2 + if segmentType == "C": + return 3 + if segmentType == "Z": + return 0 + return -1 + + + +def addSegment( path, segmentType, points ): + path.append([segmentType,points]) + + +# Converts visible path segments (Z,L,Q) into absolute cubic segments (C). +def convertSegmentToCubic( current, segmentType, points, start ): + if segmentType == "H": + # print(current, points, start) + assert len(points) == 1 + points.insert(0, current[0]) + # points[0] += current[0] + # print(segmentType, current, points, start) + return convertSegmentToCubic(current, "L", points, start) + elif segmentType == "V": + # print(points) + assert len(points) == 1 + points.append(current[1]) + # points[1] += current[1] + # print(segmentType, current, points, start) + return convertSegmentToCubic(current, "L", points, start) + if segmentType == "M": + return "M"; + if segmentType == "C": + return "C"; + elif segmentType == "Z": + for i in range(0,6): + points.append(0.0) + points[4] = start[0] + points[5] = start[1] + thirdX = (points[4] - current[0]) / 3.0 + thirdY = (points[5] - current[1]) / 3.0 + points[2] = points[4]-thirdX + points[3] = points[5]-thirdY + points[0] = current[0]+thirdX + points[1] = current[1]+thirdY + return "C" + elif segmentType == "L": + for i in range(0,4): + points.append(0.0) + points[4] = points[0] + points[5] = points[1] + thirdX = (points[4] - current[0]) / 3.0 + thirdY = (points[5] - current[1]) / 3.0 + points[2] = points[4]-thirdX + points[3] = points[5]-thirdY + points[0] = current[0]+thirdX + points[1] = current[1]+thirdY + return "C" + elif segmentType == "Q": + for i in range(0,2): + points.append(0.0) + firstThirdX = (points[0] - current[0]) * 2.0 / 3.0 + firstThirdY = (points[1] - current[1]) * 2.0 / 3.0 + secondThirdX = (points[2] - points[0]) * 2.0 / 3.0 + secondThirdY = (points[3] - points[1]) * 2.0 / 3.0 + points[4] = points[2] + points[5] = points[3] + points[0] = current[0] + firstThirdX + points[1] = current[1] + firstThirdY + points[2] = points[2] - secondThirdX + points[3] = points[3] - secondThirdY + return "C" + else: + sys.stderr.write("unsupported segment type: %s\n" % (segmentType)) + return segmentType + + +# Normalizes the points of a path segment, so that they are expressed as percentage coordinates +# relative to the bounding box axes of the total shape. +# @param bounds The bounding box of the shape. +# @param points The points of the segment. +# @param percentages The returned points in normalized percentage form. +# @param numPts +def normalizePoints( bounds, points, percentages, numPts ): + # bounds has structure xmin,xMax,ymin,yMax + xmin,xMax,ymin,yMax = bounds + for i in range( 0, numPts ): + x = i*2 + y = i*2+1 + percentages[x] = (points[x] - xmin) / (xMax-xmin) + percentages[y] = (points[y] - ymin) / (yMax-ymin) + + + +# Extracts 4 axes from a path. It is assumed that the path starts with a move, followed by 4 cubic paths. +# The extraction reverses the last 2 axes, so that they run in parallel with the first 2. +# @param path The path that is formed by the axes. +# @return The definition points of the 4 cubic path axes as float arrays, bundled in another array. +def extractMorphAxes( path ): + points = [] + current = [ 0.0, 0.0 ] + start = [ 0.0, 0.0 ] + # the curved axis definitions go in here + axes = [None]*4 + i = 0 + + for cmd, params in path: + points = params + cmd = convertSegmentToCubic( current, cmd, points, start ) + + if cmd == "M": + current[0] = points[0] + current[1] = points[1] + start[0] = points[0] + start[1] = points[1] + + elif cmd == "C": + + # 1st cubic becomes x axis 0 + # 2nd cubic becomes y axis 1 + # 3rd cubic becomes x axis 2 and is reversed + # 4th cubic becomes y axis 3 and is reversed + if i % 2 == 0: + index = i + else: + index = 4-i + if( i < 2 ): + # axes 1 and 2 + axes[index] = [ current[0], current[1], points[0], points[1], points[2], points[3], points[4], points[5] ] + elif( i < 4 ): + # axes 3 and 4 + axes[index] = [ points[4], points[5], points[2], points[3], points[0], points[1], current[0], current[1] ] + else: + # more than 4 axes - hopefully it was an unnecessary trailing Z + {} + current[0] = points[4] + current[1] = points[5] + i = i + 1 + elif cmd == "Z": + #do nothing + {} + else: + raise Exception("Unsupported segment type: %s" % cmd) + return None + + return axes + + +# Projects points in percentage coordinates into a morphed coordinate system that is framed +# by 2 x cubic curves (along the x axis) and 2 y cubic curves (along the y axis). +# @param axes The x and y axes of the envelope. +# @param percentage The current segment of the letter in normalized percentage form. +# @param morphed The array to hold the returned morphed path. +# @param numPts The number of points to be transformed. +def mapPointsToMorph( axes, percentage, morphed, numPts ): + # rename the axes for legibility + yCubic0 = axes[1] + yCubic1 = axes[3] + xCubic0 = axes[0] + xCubic1 = axes[2] + # morph each point + for i in range( 0, numPts ): + x = i*2 + y = i*2+1 + # tween between the morphed y axes according to the x percentage + tweenedY = tweenCubic( yCubic0, yCubic1, percentage[x] ) + # get 2 points on the morphed x axes + xSpot0 = pointOnCubic( xCubic0, percentage[x] ) + xSpot1 = pointOnCubic( xCubic1, percentage[x] ) + # create a transform that stretches the y axis tween between these 2 points + yAnchor0 = [ tweenedY[0], tweenedY[1] ] + yAnchor1 = [ tweenedY[6], tweenedY[7] ] + xTransform = match( yAnchor0, yAnchor1, xSpot0, xSpot1 ) + # map the y axis tween to the 2 points by applying the stretch transform + for j in range(0,4): + x2 = j*2 + y2 = j*2+1 + pointOnY = [tweenedY[x2],tweenedY[y2]] + Transform(xTransform).apply_to_point(pointOnY) + tweenedY[x2] = pointOnY[0] + tweenedY[y2] = pointOnY[1] + # get the point on the tweened and transformed y axis according to the y percentage + morphedPoint = pointOnCubic( tweenedY, percentage[y] ) + morphed[x] = morphedPoint[0] + morphed[y] = morphedPoint[1] + +# Calculates the point on a cubic bezier curve at the given percentage. +def pointOnCubic( c, t ): + point = [0.0,0.0] + _t_2 = t*t + _t_3 = _t_2*t + _1_t = 1-t + _1_t_2 = _1_t*_1_t + _1_t_3 = _1_t_2*_1_t + + for i in range( 0, 2 ): + point[i] = c[i]*_1_t_3 + 3*c[2+i]*_1_t_2*t + 3*c[4+i]*_1_t*_t_2 + c[6+i]*_t_3 + return point + +# Tweens 2 bezier curves in a straightforward way, +# i.e. each of the points on the curve is tweened along a straight line +# between the respective point on key1 and key2. +def tweenCubic( key1, key2, percentage ): + tween = [0.0]*len(key1) + for i in range ( 0, len(key1) ): + tween[i] = key1[i] + percentage * (key2[i] - key1[i]) + return tween + +# Calculates a transform that matches 2 points to 2 anchors +# by rotating and scaling (up or down) along the axis that is formed by +# a line between the two points. +def match( p1, p2, a1, a2 ): + x = 0 + y = 1 + # distances + dp = [ p2[x]-p1[x], p2[y]-p1[y] ] + da = [ a2[x]-a1[x], a2[y]-a1[y] ] + # angles + angle_p = math.atan2( dp[x], dp[y] ) + angle_a = math.atan2( da[x], da[y] ) + # radians + #rp = math.sqrt( dp[x]*dp[x] + dp[y]*dp[y] ) + #ra = math.sqrt( da[x]*da[x] + da[y]*da[y] ) + rp = math.hypot( dp[x], dp[y] ) + ra = math.hypot( da[x], da[y] ) + # scale + scale = ra / rp + # transforms in the order they are applied + t1 = Transform( "translate(%f,%f)"%(-p1[x],-p1[y]) ).matrix + #t2 = Transform( "rotate(%f)"%(-angle_p) ).matrix + #t3 = Transform( "scale(%f,%f)"%(scale,scale) ).matrix + #t4 = Transform( "rotate(%f)"%angle_a ).matrix + t2 = rotateTransform(-angle_p) + t3 = scale_transform( scale, scale ) + t4 = rotateTransform( angle_a ) + t5 = Transform( "translate(%f,%f)"%(a1[x],a1[y]) ).matrix + # transforms in the order they are multiplied + t = t5 + t = Transform(t) * Transform(t4) + t = Transform(t) * Transform(t3) + t = Transform(t) * Transform(t2) + t = Transform(t) * Transform(t1) + # return the combined transform + return t + + +def rotateTransform( a ): + return [[math.cos(a),-math.sin(a),0],[math.sin(a),math.cos(a),0]] + +def scale_transform( sx, sy ): + return [[sx,0,0],[0,sy,0]] + +if __name__ == '__main__': + BezierEnvelope().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/blobs/blobs.inx b/extensions/fablabchemnitz/blobs/blobs.inx new file mode 100644 index 00000000..f4d68fc6 --- /dev/null +++ b/extensions/fablabchemnitz/blobs/blobs.inx @@ -0,0 +1,32 @@ + + + Blobs Texture + fablabchemnitz.de.blobs + + + + 10 + true + 1000 + 1000 + + + + 10 + 50. + 0. + 0.3 + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/blobs/blobs.py b/extensions/fablabchemnitz/blobs/blobs.py new file mode 100644 index 00000000..0ab642e6 --- /dev/null +++ b/extensions/fablabchemnitz/blobs/blobs.py @@ -0,0 +1,169 @@ +#!/usr/bin/env python3 + +# These two lines are only needed if you don't put the script directly into +# the installation directory +import math +import inkex +import random +from lxml import etree + +class Blobs(inkex.EffectExtension): + """ +Creates a random blob from a convex hull over n points. +The expected degree of the polygon is sqrt(n). The corners +are blunted by the blunt parameter. 0 means sharp. 1 will +result in loopy splines. + """ + def add_arguments(self, pars): + pars.add_argument("--pgsizep", type=inkex.Boolean, default=True, help="Default rectangle to page size?") + pars.add_argument('--num', type = int, default = 25, help = 'Number of random points to start with') + pars.add_argument('--blunt', type = float, default = 0.3, help = 'Bluntness of corners. Should be < 1') + pars.add_argument('--cave', type = float, default = 0.0, help = 'Concavity. Less blobby and more splatty') + pars.add_argument('--rx', type = int, default = 1000, help = 'Size of work area x') + pars.add_argument('--ry', type = int, default = 1000, help = 'Size of work area y') + pars.add_argument('--sz', type = float, default = 50., help = 'Size of a blob') + pars.add_argument('--nb', type = int, default = 10, help = 'Total number of blobs') + pars.add_argument("--Nmain", default='top', help="Active tab.") + + def effect(self): + global cave + if self.options.pgsizep: + svg = self.document.getroot() + rx = int(self.svg.unittouu(svg.get('width'))) + ry = int(self.svg.unittouu(svg.attrib['height'])) + else: + rx = self.options.rx + ry = self.options.ry + blunt = self.options.blunt + cave = self.options.cave + sz = self.options.sz + nb = self.options.nb + num = self.options.num + + # Get access to main SVG document element and get its dimensions. + svg = self.document.getroot() + + # Create a new layer. + layer = etree.SubElement(svg, 'g') + layer.set(inkex.addNS('label', 'inkscape'), 'Blob Layer') + layer.set(inkex.addNS('groupmode', 'inkscape'), 'layer') + + ctrs = [(random.randrange(rx) , random.randrange(ry)) + for i in range(nb) ] + for ctr in ctrs : + points = [(random.gauss(ctr[0], sz) , random.gauss(ctr[1], sz)) + for i in range(num) ] + + px = hull(points) + pts = [points[px[i]] for i in range(len(px))] + + # Create path element + path = etree.Element(inkex.addNS('path','svg')) + path.set('style', str(inkex.Style({'fill':'#000000'}))) + pathstring = 'M ' + str(pts[0][0]) + ' ' + str(pts[0][1]) + ' ' + + for j in range(len(pts)): + k = (j+1) % len(pts) + kk = (j+2) % len(pts) + if j==0 : + (lasth, h1) = sHandles(pts[-1], pts[0], pts[1], blunt) + (h2, hnext) = sHandles(pts[j], pts[k], pts[kk], blunt) + pathstring += "C %f %f %f %f %f %f " % (h1[0], h1[1], + h2[0], h2[1], + pts[k][0], pts[k][1]) + h1 = hnext + + pathstring += 'Z' + path.set('d', pathstring) + layer.append(path) + +def sHandles(pre, pt, post, blunt): + '''I'm proud of this cute little construction for the + spline handles. No doubt someone has thought of it before + but, if not, its name is ACHC Andrew's Cute Handle + Construction. Note: no trig function calls.''' + try : + slope = (post[1] - pt[1]) / (post[0] - pt[0]) + except ZeroDivisionError : + slope = math.copysign(1E30 , post[1] - pt[1]) + lenpre = distance(pre, pt) + lenpost = distance(pt, post) + lenr = lenpre**2 / lenpost + locx = math.copysign(lenr / math.sqrt(1. + slope**2) , post[0] - pt[0]) + mark = (pre[0] - locx , pre[1] - locx*slope) + try : + markslope = (pt[1] - mark[1]) / (pt[0] - mark[0]) + except ZeroDivisionError : + markslope = math.copysign(1E30 , pt[1] - mark[1]) + prex = math.copysign(lenpre / math.sqrt(1. + markslope**2) , + pt[0] - mark[0]) + hpre = (pt[0] - prex*blunt , pt[1] - prex*markslope*blunt) + postx = prex*lenpost/lenpre + hpost = (pt[0] + postx*blunt , pt[1] + postx*markslope*blunt) + return (hpre, hpost) + +"""Blunt=0.3 makes pleasingly round, mostly convex blobs. 0.4 makes them more +concave. 0.6 - 1.0 they're getting more and more pointy. 2.0 - 10. and they +grow appendages like hot-air balloons. 0.1 makes the corners pretty sharp. +0.0 and it's down to the convex hulls that are the basis of the blobs, that +is, polygons""" + +def distance(a, b) : + return math.sqrt((a[0] - b[0])**2 + (a[1] - b[1])**2 ) + +def hull(arg): + """Convex hull by Graham scan.""" + xarr, yarr = zip(* arg) + ymin = min(yarr) + ind = findall(yarr, lambda y: y == ymin) + if len(ind) > 1 : + xshort = [xarr[j] for j in ind] + xmin = min(xshort) + j = ind[xshort.index(xmin)] + ind = j + else : + ind = ind[0] + all = list(range(len(xarr))) + del all[ind] + all.sort(key=lambda i : (xarr[i] - xarr[ind]) / + math.sqrt((xarr[i] - xarr[ind])**2 + (yarr[i] - yarr[ind])**2), + reverse=True) + if len(all) < 3 : + all.insert(0, ind) + return all + ans = [ind] + for i in all : + if len(ans) == 1 : + ans.append(i) + else : + while rightTurn(ans[-2], ans[-1], i, arg) : + ans.pop() + ans.append(i) + + return ans + +def rightTurn(j, k, l, arg) : + '''Cross product: Ax*By - Ay*Bx = Cz ''' + ax = (arg[k][0] - arg[j][0]) + by = (arg[l][1] - arg[k][1]) + ay = (arg[k][1] - arg[j][1]) + bx = (arg[l][0] - arg[k][0]) + p = ax*by - ay*bx + dot = ax*bx + ay*by + cos = dot / math.sqrt((ax**2 + ay**2) * (bx**2 + by**2)) + crt = 1 - cave*2 + + if p <= 0 : + return cos < crt #We forgive right turns based on /cave/ + else : + return False + +def findall(a, f): + r = [] + for x, j in zip(a, range(len(a))) : + if f(x) : + r.append(j) + return r + +if __name__ == '__main__': + Blobs().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/blueprint_maker/blueprint_maker.inx b/extensions/fablabchemnitz/blueprint_maker/blueprint_maker.inx new file mode 100644 index 00000000..8a9953ab --- /dev/null +++ b/extensions/fablabchemnitz/blueprint_maker/blueprint_maker.inx @@ -0,0 +1,29 @@ + + + Blueprint Maker + fablabchemnitz.de.blueprint_maker + + + + + + + 1.000 + + + + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/blueprint_maker/blueprint_maker.py b/extensions/fablabchemnitz/blueprint_maker/blueprint_maker.py new file mode 100644 index 00000000..d0e26153 --- /dev/null +++ b/extensions/fablabchemnitz/blueprint_maker/blueprint_maker.py @@ -0,0 +1,117 @@ +#!/usr/bin/env python3 + +import inkex +import copy + +class bluePrintMakerData(): + def __init__(self,effect): + self.effect=effect + self.stroke_units=effect.options.stroke_units + self.unit_factor=1.0 + self.set_units() + self.stroke_width=effect.options.stroke_width*self.unit_factor + self.palette=effect.options.palette + self.background_color=None + self.stroke_color=None + self.set_colors() + self.selected_nodes=[] + if len(effect.options.ids)==0: + self.selected_nodes=[effect.svg.getElementById(x) for x in effect.svg.get_ids()] + self.selected_nodes=[node for node in self.selected_nodes if effect.is_geometry(node)] + else: + self.selected_nodes=[y for x,y in effect.svg.selected.items()] + self.selected_nodes=[node for node in self.selected_nodes if effect.is_geometry(node,shapes=['path','g','rect','ellipse','perspective'])] + self.allowed_ids=[] + self.allowed_nodes=[] + self.set_objects() + + def set_units(self): + if self.stroke_units=='millimeters': + self.unit_factor=3.543 + if self.stroke_units=='centimeters': + self.unit_factor=35.433 + if self.stroke_units=='points': + self.unit_factor=1.25 + if self.stroke_units=='pixels': + self.unit_factor=1.0 + + def set_colors(self): + if self.palette=='blueprint': + self.background_color='#006fde' + self.stroke_color='#ffffff' + if self.palette=='black': + self.background_color='#000000' + self.stroke_color='#ffffff' + if self.palette=='white': + self.background_color='#ffffff' + self.stroke_color='#000000' + if self.palette=='laser': + self.background_color='#ffffff' + self.stroke_color='#ff0000' + + def set_objects(self): + for current_id in self.effect.svg.get_ids(): + node=self.effect.svg.getElementById(current_id) + if self.effect.is_geometry(node): + self.allowed_ids.append(current_id) + self.allowed_nodes.append(node) + +class BluePrintMaker(inkex.EffectExtension): + + def __init__(self): + inkex.Effect.__init__(self) + self.arg_parser.add_argument('-p', '--palette', help='Choose the colors...') + self.arg_parser.add_argument('-s', '--stroke_width', type=float, help='Stroke size...') + self.arg_parser.add_argument('-u', '--stroke_units', help='Choose the units...') + self.data=None + + def is_a_group(self, node): + data=False + if node.tag==inkex.addNS('g','svg'): + data=True + return data + + def is_geometry(self, node, shapes=['path','rect','ellipse','perspective']): + data=False + for s in shapes: + if node.tag==inkex.addNS(s,'svg'): + data=True + return data + + def change_page_settings(self): + namedview=self.svg.namedview + namedview.set('pagecolor',self.data.background_color) + namedview.set(inkex.addNS('pageopacity', 'inkscape'),'1') + namedview.set(inkex.addNS('pageshadow', 'inkscape'),'0') + namedview.set('bordercolor',self.data.stroke_color) + namedview.set('borderopacity','1') + return None + + def change_this_object(self,node): + styles=dict(inkex.Style.parse_str(node.get('style'))) + styles_copy=copy.deepcopy(styles) + styles_copy['stroke']=self.data.stroke_color + styles_copy['stroke_width']=self.data.stroke_width + styles_copy['stroke-opacity']='1' + styles_copy['fill']='none' + styles_copy['fill-opacity']='1' + styles_copy['opacity']='1' + node.set('style',str(inkex.Style(styles_copy))) + return None + + def iterate_on_objects(self,node=None): + if self.is_geometry(node): + self.change_this_object(node) + if self.is_a_group(node): + for current_node in list(node): + self.iterate_on_objects(current_node) + + def effect(self): + self.data=bluePrintMakerData(self) + self.change_page_settings() + for node in self.data.selected_nodes: + self.iterate_on_objects(node) + return None + +if __name__ == '__main__': + BluePrintMaker().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/bobbinlace/circular_ground_from_template.inx b/extensions/fablabchemnitz/bobbinlace/circular_ground_from_template.inx new file mode 100644 index 00000000..7a9a58d2 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/circular_ground_from_template.inx @@ -0,0 +1,54 @@ + + + Circular Ground from Template + fablabchemnitz.de.circular_ground_from_template + + + ./templates/ + + + 45.0 + + + 30 + + + + 50 + + + + + + + + + + 3 + + + + 1 + + + + + + + + + + 255 + + + all + + + + + + + + diff --git a/extensions/fablabchemnitz/bobbinlace/circular_ground_from_template.py b/extensions/fablabchemnitz/bobbinlace/circular_ground_from_template.py new file mode 100644 index 00000000..32c2f511 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/circular_ground_from_template.py @@ -0,0 +1,434 @@ +#!/usr/bin/env python3 + +# Copyright (c) 2017, Ben Connors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +import os +from math import sin, cos, acos, tan, radians, pi, sqrt, ceil, floor +import inkex +from lxml import etree + +__author__ = 'Ben Connors' +__credits__ = ['Ben Connors', 'Veronika Irvine', 'Jo Pol', 'Mark Shafer'] +__license__ = 'Simplified BSD' + +class Vector: + def __repr__(self): + return 'Vector(%.4f, %.4f)' % (self.dx,self.dy) + + def __hash__(self): + return hash((self.dx,self.dy)) + + def rotate(self,theta): + """ Rotate counterclockwise by theta.""" + return self.mag*Vector(cos(self.theta+theta), + sin(self.theta+theta), + _theta=self.theta+theta) + + def __mul__(self,other): + return Vector(self.dx*other,self.dy*other,_theta=self.theta) + + def __rmul__(self,other): + return self*other + + def __init__(self,dx,dy,_theta=None): + """ Create a vector with the specified components. + _theta should NOT be passed in normal use - this value is passed by + vector functions where the angle of the new vector is known in order + to eliminate that calculation. + """ + self.dx = float(dx) + self.dy = float(dy) + self.mag = sqrt(dx**2 + dy**2) + self.tuple = (dx,dy) + + ## Angle to positive X axis + if _theta == None: + _theta = acos(self.dx/self.mag) + self.theta = 2*pi-_theta if self.dy < 0 else _theta + else: + self.theta = _theta + + +class CircularGroundFromTemplate(inkex.EffectExtension): + + def unitToUu(self,param): + """ Convert units. + Converts a number in some units into the units used internally by + Inkscape. + + param is a string representing a number with units attached. An + example would be '3.8mm'. Any units supported by Inkscape + are supported by this function. + + This wrapper function catches changes made to the location + of the function between Inkscape versions. + """ + try: + return self.svg.unittouu(param) + except: + return inkex.unittouu(param) + + def loadFile(self): + """ Load the specification for the unit cell from the file given. + Note that the specification should be in the following format: + TYPE ROWS COLS + [x1,y1,x2,y2,x3,y3] [x4,y4,x5 ... + + And so on. The TYPE is always CHECKER and is ignored by this program. + ROWS specifies the height of the unit cell (i.e. max_y - min_y) + and COLS specifies the same for the width (i.e. max_x - min_x). + Note that this is not enforced when drawing the unit cell - points + may be outside this range. These values are used to determine the + distance between unit cells (i.e. unit cells may overlap). + """ + # Ensure that file exists and has the proper extension + if not self.options.file: + inkex.errormsg('You must specify a template file.') + exit() + self.options.file = self.options.file.strip() + if self.options.file == '': + inkex.errormsg('You must specify a template file.') + exit() + if not os.path.isfile(self.options.file): + inkex.errormsg('You have not specified a valid path for the template file.\n\nYour entry: '+self.options.file) + exit() + extension = os.path.splitext(self.options.file)[1] + if extension != '.txt': + inkex.errormsg('The file name must end with .txt.\n\nYour entry: '+self.options.file) + exit() + + data = [] + rows, cols = -1, -1 + with open(self.options.file,'r') as f: + for line in f: + line = line.strip() + ## If rows is not a positive integer, we're on the first line + if rows == -1: + tmp = line.split('\t') + _type,cols,rows = tmp[0],int(tmp[1]),int(tmp[2]) + else: + data.append([]) + for cell in line[1:-1].split(']\t['): + cell = cell.strip() + ## The pattern must be rotated 90 degrees clockwise. It's + ## simplest to just do that here + tmp = [float(n) for n in cell.split(',')] + data[-1].append([a for b in zip([rows-i for i in tmp[1::2]],[cols-i for i in tmp[::2]]) for a in b]) + return {'type': _type, 'rows': rows, 'cols': cols, 'data' : data} + + def line(self,points): + """ + Draw a line from point at (x1, y1) to point at (x2, y2). + Style of line is hard coded and specified by 's'. + """ + # define the motions + path = ('M%.4f,%.4fL' % tuple(points[0][:2])) + 'L'.join([('%f,%f' % tuple(a[:2])) for a in points[1:]]) + + # define the stroke style + s = {'stroke-linejoin': 'miter', + 'stroke-width': self.options.linewidth, + 'stroke-opacity': '1.0', + 'fill-opacity': '1.0', + 'stroke': self.options.linecolor, + 'stroke-linecap': 'round', + 'stroke-linejoin': 'round', + 'fill': 'none' + } + + + ## Attributes for new element + attribs = {'style':str(inkex.Style(s)), + 'd' : path} + + ## Add new element + etree.SubElement(self.svg.get_current_layer(), inkex.addNS('path', 'svg'), attribs) + + def baseVectors(self,segments): + """ Create vectors for all vertices on the specified polygon.""" + ## Start at 12 o'clock + theta = pi/2 + ## Move clockwise + dtheta = -2*pi/segments + + vector = Vector(0,self.options.diameter/2) + vectors = [vector] + for i in range(1,segments): + vector = vector.rotate(dtheta) + vectors.append(vector) + return vectors + + def fuzzyEquality(self,a,b): + return (a-b <= 1e-8) + + def circleWrap(self,points,segments): + """ Wrap a grid around the origin. + <> is a list of 2- or 3-tuples. + In the case of 3-tuples, they should be laid out like: (x,y,name) + Whereas 2-tuples should eliminate the name portion. + Only one format may be passed; they may not be mixed. + x- and y- values are rounded to the nearest integer. + If more precision is desired, scale up the points before calling this function. + x-values should be within [0,segments) + Values not within range will be moved within range. + y-values must be greater than 0 + An error will be raised if a y-value is less than 0. + The 'name' portion is not touched by this function; it is merely + passed along. This may be used to identify points or groups of points. + <> is the inside radius (i.e. distance to origin from a point with + a y-value of 0). + <> is the number of segments (sides) of the polygon. + <> is the angle of the diagonal of the square approximation. It must be + somewhere on (0,pi/2). + """ + angle = self.options.angle + if angle <= 0 or angle >= pi/2: + raise ValueError('Angle must be in (0,pi/2)') + + vectors = self.baseVectors(segments) + theta = 2*pi/segments + + """ + Determine the coefficient to multiply the vectors by in order to deal + with a higher x-value. + With R being the large radius (radius to next y-value) and r being the + small radius (radius to current y-value): + + a^2 = r^2 (1 - cos(theta)) ## Cosine law + b^2 = R^2 (1 - cos(theta)) + + To get the most square-like trapezoid: + R - r = 0.5(a+b) + + Subbing in the equations for b^2 and a^2 yields the following lines. + """ + C = sqrt(2*(1-cos(theta))) + val = 2*tan(pi/2-angle) + coeff = (val+C)/(val-C) + diff = coeff-1 + + ## Sort points in order of increasing y-value. + named = False + if len(points[0]) == 3: + named = True + points = [(x,y,name) for x,y,name in sorted(points,key=lambda a: a[1])] + else: + points = [(x,y,None) for x,y in sorted(points,key=lambda a: a[1])] + + done = [] + cur_y = 0 + for point in points: + x,y,name = point + + ## Check constraints + if y < cur_y: + raise ValueError('Invalid point (%d,%d)' % (x,y)) + elif y >= cur_y+1: + ## Multiply vectors accordingly + delta = floor(y-cur_y) + vectors = [(coeff**delta)*v for v in vectors] + cur_y = floor(y) + + ## Wrap x-value to lie in the proper place + ## lazy + while x < 0: + x += segments + while x >= segments: + x -= segments + + if self.fuzzyEquality(y,int(y)) and self.fuzzyEquality(x,int(x)): + x = int(x) + ## Can do it the quick way + wx,wy = vectors[x].tuple + else: + ## Use vector rotation + ## Determine nearest vector (counterclockwise) + pointer = vectors[floor(x)] + ## Scale x and y to be within (0,1) + x -= int(x) + y -= int(y) + c = C*x ## This value is used a lot, cache it + ## Now the angle of rotation must be determined using cosine law + factor = 1 + if not self.fuzzyEquality(x,0): + ## x isn't equal to 0, must rotate vector + n2 = 1+c**2-2*c*cos((pi-theta)/2) + factor = sqrt(n2) + phi = acos((n2+1-c**2)/(2*factor)) + pointer = pointer.rotate(-phi) + ## Correct vector magnitude + pointer = (1+y*diff)*factor*pointer + wx,wy = pointer.tuple + if named: + done.append((wx,wy,name)) + else: + done.append((wx,wy)) + return done + + def createGround(self,unit,rows,cols,scale=1): + """ Return a lace ground. + + This function returns a list of points and corresponding lines that may + be transformed or passed to a drawing function (such as draw_image) in + order to draw a lace ground. + + unit is the pattern for the lace ground, in the format returned by + loadFile. + + rows and cols are integers and represent the number of horizontal repeats + and vertical repeats of the pattern, respectively. + + scale is an optional value that can be used to scale the pattern before it + is repeated. Note that this comes with some constraints - the + template's rows and cols after scaling (i.e. unit['rows']*scale) must + be an integer. For example, a template with 4 rows and 4 cols before + scaling may be scaled by any integer value above 1 and select values + between 1 and 0 (namely 0.25,0.5,0.75). A scale value of 'True' may be + passed if each repeat of the template should fit within a 1x1 square. + """ + data = unit['data'] + unit_rows = unit['rows'] + unit_cols = unit['cols'] + if scale <= 0: + raise ValueError('Scale must be greater than zero') + elif scale != 1: + ## The user wants to scale the template + _data = [] + for row in data: + _row = [] + for c in row: + if scale == True: + _row.append([i for n in zip([a/unit_cols for a in c[::2]],[a/unit_rows for a in c[1::2]]) for i in n]) + else: + _row.append([a*scale for a in c]) + _data.append(_row) + data = _data + unit_rows *= scale + unit_cols *= scale + ## Catching invalid input + if not self.fuzzyEquality(unit_rows,int(unit_rows)): + raise ValueError('Scale factor must result in an integer value for template rows') + if not self.fuzzyEquality(unit_cols,int(unit_cols)): + raise ValueError('Scale factor must result in an integer value for template cols') + unit_rows = int(unit_rows) + unit_cols = int(unit_cols) + line_num = 0 + points = [] + for c in range(cols): + ## Do each column first + x = c*unit_cols + for r in range(rows): + y = r*unit_rows + for row in data: + for x1,y1,x2,y2,x3,y3 in row: + ## In order to draw lines in the correct order, an extra + ## point must be added + p1 = (x+x1,y+y1,'%09da,1'%line_num) + p2 = (x+x2,y+y2,'%09da,2'%line_num) + p1a = (x+x1,y+y1,'%09db,1'%line_num) + p3 = (x+x3,y+y3,'%09db,3'%line_num) + points.extend([p1,p2,p1a,p3]) + line_num += 1 + return points + + def draw(self, points,line=lambda a: None): + """ Draw the image. + points - a list of points, as returned by createGround. + line - a function that draws a line connecting all points in the passed list in order. + """ + groups = {} + ## This loop scales points, sorts them into groups, and gets image parameters + xs = [] + ys = [] + for x,y,n in points: + xs.append(x) + ys.append(y) + sn = n.split(',',1) + ident = 0 + if len(sn) == 2: + ident = int(sn[1]) + n = sn[0] + if n not in groups: + groups[n] = [] + groups[n].append((x,y,ident)) + max_x = max(xs) + min_x = min(xs) + max_y = max(ys) + min_y = min(ys) + ## Sort all groups to draw lines in order + for group in groups: + groups[group].sort(key=lambda a:a[2]) + ## Sort all groups to draw groups in order + groups = sorted([(name,pts) for name,pts in groups.items()],key=lambda a:a[0]) + ## Draw lines + for name,pts in groups: + _pts = [] + for p in pts: + _pts.append([p[0]-min_x,p[1]-min_y]) + self.line(_pts) + + def add_arguments(self, pars): + pars.add_argument('--file') + pars.add_argument('--angle', type=int) + pars.add_argument('--cols', type=int) + pars.add_argument('--diameter', type=float) + pars.add_argument('--diamunits') + pars.add_argument('--rows', type=int) + pars.add_argument('--linewidth', type=float) + pars.add_argument('--lineunits') + pars.add_argument('--linecolor', type=inkex.Color) + + def effect(self): + ## Load the file + unit = self.loadFile() + self.options.linecolor = self.options.linecolor.to_rgb() + + ## Change the input to universal units + self.options.diameter = self.unitToUu(str(self.options.diameter)+self.options.diamunits) + self.options.linewidth = self.unitToUu(str(self.options.linewidth)+self.options.lineunits) + + ## Convert the angle + self.options.angle = radians(self.options.angle) + + ## Ensure no y-values are below 0 + min_y = min([b for a in [i[1::2] for row in unit['data'] for i in row] for b in a]) + if min_y < 0: + data = [] + for row in unit['data']: + _row = [] + for c in row: + _row.append([a for b in zip(c[::2],[i-min_y for i in c[1::2]]) for a in b]) + data.append(_row) + unit['data'] = data + + ## Create the ground coordinates + points = self.createGround(unit,self.options.rows,self.options.cols) + + ## Wrap it around a polygon + points = self.circleWrap(points,self.options.cols*unit['cols']) + + ## Draw everything + self.draw(points,line=lambda a: self.line(a)) + +if __name__ == '__main__': + CircularGroundFromTemplate().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/bobbinlace/ground_from_template.inx b/extensions/fablabchemnitz/bobbinlace/ground_from_template.inx new file mode 100644 index 00000000..c508542d --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/ground_from_template.inx @@ -0,0 +1,60 @@ + + + Ground From Template + fablabchemnitz.de.ground_from_template + + ./templates/ + + + 45.0 + + + 5.0 + + + + + + + + + + + 50 + + + + + + + + + + 50 + + + + 1 + + + + + + + + + + 255 + + + all + + + + + + + + diff --git a/extensions/fablabchemnitz/bobbinlace/ground_from_template.py b/extensions/fablabchemnitz/bobbinlace/ground_from_template.py new file mode 100644 index 00000000..696115e7 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/ground_from_template.py @@ -0,0 +1,172 @@ +#!/usr/bin/env python3 + +# Copyright (c) 2017, Veronika Irvine +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright notice,# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +import os +from math import sin, cos, radians, ceil +from lxml import etree +import inkex + +__author__ = 'Veronika Irvine' +__credits__ = ['Ben Connors', 'Veronika Irvine', 'Mark Shafer'] +__license__ = 'Simplified BSD' + +class GroundFromTemplate(inkex.EffectExtension): + + def loadFile(self): + # Ensure that file exists and has the proper extension + if not self.options.file: + inkex.errormsg('You must specify a template file.') + exit() + self.options.file = self.options.file.strip() + if self.options.file == '': + inkex.errormsg('You must specify a template file.') + exit() + if not os.path.isfile(self.options.file): + inkex.errormsg('You have not specified a valid path for the template file.\n\nYour entry: '+self.options.file) + exit() + extension = os.path.splitext(self.options.file)[1] + if extension != '.txt': + inkex.errormsg('The file name must end with .txt.\n\nYour entry: '+self.options.file) + exit() + + data = [] + rowCount = 0 + colCount = 0 + with open(self.options.file,'r') as f: + first = True + for line in f: + if first: + # first line of file gives row count and column count + first = False + line = line.strip() + temp = line.split('\t') + type = temp[0] + rowCount = int(temp[1]) + colCount = int(temp[-1]) + + else: + line = line.strip() + line = line.lstrip('[') + line = line.rstrip(']') + rowData = line.split(']\t[') + data.append([]) + for cell in rowData: + cell = cell.strip() + data[-1].append([float(num) for num in cell.split(',')]) + + return {'type':type, 'rowCount':rowCount, 'colCount':colCount, 'data':data} + + def line(self, x1, y1, x2, y2): + """ + Draw a line from point at (x1, y1) to point at (x2, y2). + Style of line is hard coded and specified by 's'. + """ + # define the motions + path = 'M %s,%s L %s,%s' %(x1,y1,x2,y2) + + # define the stroke style + s = {'stroke-linejoin': 'miter', + 'stroke-width': self.options.linewidth, 'stroke-opacity': '1.0', + 'fill-opacity': '1.0', 'stroke': self.options.linecolor, + 'stroke-linecap': 'round', 'stroke-linejoin': 'round', 'fill': 'none' + } + + # create attributes from style and path + attribs = {'style':str(inkex.Style(s)), 'd':path} + + # insert path object into current layer + etree.SubElement(self.svg.get_current_layer(), inkex.addNS('path', 'svg'), attribs) + + def draw(self, data, rowCount, colCount): + a = self.options.distance + theta = self.options.angle + deltaX = a*sin(theta) + deltaY = a*cos(theta) + maxRows = ceil(self.options.height / deltaY) + maxCols = ceil(self.options.width / deltaX) + + x = 0.0 + y = 0.0 + repeatY = 0 + repeatX = 0 + + while repeatY * rowCount < maxRows: + x = 0.0 + repeatX = 0 + + while repeatX * colCount < maxCols: + + for row in data: + for coords in row: + x1 = x + coords[0]*deltaX + y1 = y + coords[1]*deltaY + x2 = x + coords[2]*deltaX + y2 = y + coords[3]*deltaY + x3 = x + coords[4]*deltaX + y3 = y + coords[5]*deltaY + + self.line(x1,y1,x2,y2) + self.line(x1,y1,x3,y3) + + repeatX += 1 + x += deltaX * colCount + + repeatY += 1 + y += deltaY * rowCount + + def add_arguments(self, pars): + pars.add_argument('-f', '--file', help='File containing lace ground description') + pars.add_argument('--angle', type=float) + pars.add_argument('--distance', type=float) + pars.add_argument('--pinunits') + pars.add_argument('--width', type=float) + pars.add_argument('--patchunits') + pars.add_argument('--height', type=float) + pars.add_argument('--linewidth', type=float) + pars.add_argument('--lineunits') + pars.add_argument('--linecolor', type=inkex.Color) + + def effect(self): + result = self.loadFile() + + # Convert input to universal units + self.options.width = self.svg.unittouu(str(self.options.width)+self.options.patchunits) + self.options.height = self.svg.unittouu(str(self.options.height)+self.options.patchunits) + self.options.linewidth = self.svg.unittouu(str(self.options.linewidth)+self.options.lineunits) + self.options.distance = self.svg.unittouu(str(self.options.distance)+self.options.pinunits) + + # Users expect distance to be the vertical distance between footside pins + # (vertical distance between every other row) but in the script we use it + # as the diagonal distance between grid points + # therefore convert distance based on the angle chosen + self.options.angle = radians(self.options.angle) + self.options.distance = self.options.distance/(2.0*cos(self.options.angle)) + + # Draw a ground based on file description and user inputs + self.options.linecolor = self.options.linecolor.to_rgb() + # For now, assume style is Checker but could change in future + self.draw(result['data'],result['rowCount'],result['colCount']) + +if __name__ == '__main__': + GroundFromTemplate().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/bobbinlace/polar_grid.inx b/extensions/fablabchemnitz/bobbinlace/polar_grid.inx new file mode 100644 index 00000000..0ecd631c --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/polar_grid.inx @@ -0,0 +1,71 @@ + + + Polar Grid + fablabchemnitz.de.polar_grid + + + + 45.0 + + + 180 + + + + + + + + + + + + + + + + + 160 + + + + + + + + + + 100 + + + + + + + + + + 0.5 + + + + + + + + + + 255 + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/bobbinlace/polar_grid.py b/extensions/fablabchemnitz/bobbinlace/polar_grid.py new file mode 100644 index 00000000..1353be5c --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/polar_grid.py @@ -0,0 +1,184 @@ +#!/usr/bin/env python3 +# Copyright 2015 Jo Pol +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see http://www.gnu.org/licenses/. + +from __future__ import division +from math import pi, sin, cos, tan, radians +from lxml import etree + +# We will use the inkex module with the predefined +# Effect base class. +import inkex + +__author__ = 'Jo Pol' +__credits__ = ['Veronika Irvine','Jo Pol','Mark Shafer'] +__license__ = 'GPLv3' + +class PolarGrid(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument('-a', '--angle', type=float, default=45, help='grid angle (degrees)') + pars.add_argument('-d', '--dots', type=int, default=180, help='number of dots on a circle') + pars.add_argument('-o', '--outerDiameter', type=float, default=160, help='outer diameter (mm)') + pars.add_argument('-i', '--innerDiameter', type=float, default=100, help='minimum inner diameter (mm)') + pars.add_argument('-f', '--fill', type=inkex.Color, default='-6711040', help='dot color') + pars.add_argument('-A', '--alignment', default='outside', help='exact diameter on [inside|outside]') + pars.add_argument('-s', '--size', type=float, default=0.5, help='dot diameter (mm)') + pars.add_argument('-v', '--variant', default='', help='omit rows to get [|rectangle|hexagon1]') + pars.add_argument('-cu', '--circleDiameterUnits', default = 'mm', help = 'Circle diameter is measured in these units') + pars.add_argument('-du', '--dotUnits', default = 'px', help = 'Dot diameter is measured in these unites') + + def group(self, diameter): + """ + Create a group labeled with the diameter + """ + label = 'diameter: {0:.2f} mm'.format(diameter) + attribs = {inkex.addNS('label', 'inkscape'):label} + return etree.SubElement(self.gridContainer, inkex.addNS('g', 'svg'), attribs) + + def dots(self, diameter, circleNr, group): + """ + Draw dots on a grid circle + """ + offset = (circleNr % 2) * 0.5 + for dotNr in range (0, self.options.dots): + a = (dotNr + offset) * self.alpha + x = (diameter / 2.0) * cos(a) + y = (diameter / 2.0) * sin(a) + attribs = {'style':self.dotStyle, 'cx':str(x * self.circleScale), 'cy':str(y * self.circleScale), 'r':self.dotR} + etree.SubElement(group, inkex.addNS('circle', 'svg'), attribs) + + def iterate(self, diameter, circleNr): + """ + Create a group with a ring of dots. + Returns half of the arc length between the dots + which becomes the distance to the next ring. + """ + group = self.group(diameter) + self.dots(diameter, circleNr, group) + self.generatedCircles.append(group) + return diameter * self.change + + def generate(self): + """ + Generate rings with dots, either inside out or outside in + """ + circleNr = 0 + flag_error = False + minimum = 2 * self.options.size * self.options.dots /pi + if minimum < self.options.innerDiameter: + minimum = self.options.innerDiameter + else: + flag_error = True + if self.options.alignment == 'outside': + diameter = self.options.outerDiameter + while diameter > minimum: + diameter -= self.iterate(diameter, circleNr) + circleNr += 1 + else: + diameter = minimum + while diameter < self.options.outerDiameter: + diameter += self.iterate(diameter, circleNr) + circleNr += 1 + # Display message + if flag_error: + # Leave message on top + font_height = 8 + text_style = { 'font-size': str(font_height), + 'font-family': 'sans-serif', + 'text-anchor': 'middle', + 'text-align': 'center', + 'fill': '#000000' } + text_atts = {'style':str(inkex.Style(text_style)), + 'x': '0', 'y': '0'} + text = etree.SubElement(self.gridContainer, 'text', text_atts) + text.text = "Dots overlap. inner changed to %4.1f" % (minimum) + + def removeGroups(self, start, increment): + """ + Remove complete rings with dots + """ + for i in range(start, len(self.generatedCircles), increment): + self.svg.get_current_layer().remove(self.generatedCircles[i]) + + def removeDots(self, i, offset, step): + """ + Remove dots from one circle + """ + group = self.generatedCircles[i] + dots = list(group) + start = len(dots) - 1 - offset + for j in range(start, -1, 0-step): + group.remove(dots[j]) + + def computations(self, angle): + self.alpha = radians(360.0 / self.options.dots) + correction = pi / (4 * self.options.dots) + correction *= tan(angle*0.93) + self.change = tan(angle - correction) * pi / self.options.dots + + def effect(self): + """ + Effect behaviour. + Overrides base class' method and draws something. + """ + + # constants + self.dotStyle = str(inkex.Style({'fill': self.options.fill.to_rgb(),'stroke':'none'})) + self.dotScale = self.svg.unittouu("1" + self.options.dotUnits) + self.dotR = str(self.options.size * (self.dotScale/2)) + self.circleScale = self.svg.unittouu("1" + self.options.circleDiameterUnits) + self.computations(radians(self.options.angle)) + + # processing variables + self.generatedCircles = [] + self.gridContainer = self.svg.get_current_layer() + + self.generate() + + if self.options.variant == 'rectangle': + self.removeGroups(1, 2) + elif self.options.variant == 'hexagon1': + self.removeGroups(0, 3) + elif self.options.variant == 'hexagon2' or self.options.variant == 'snow2': + for i in range(0, len(self.generatedCircles), 1): + self.removeDots(i, (((i%2)+1)*2)%3, 3) + elif self.options.variant == 'hexagon3': + for i in range(0, len(self.generatedCircles), 2): + self.removeDots(i, (i//2+1)%2, 2) + elif self.options.variant == 'hexagon4': + self.removeGroups(0, 4) + elif self.options.variant == 'hexagon5' or self.options.variant == 'snow1': + for i in range(0, len(self.generatedCircles), 2): + self.removeDots(i, 1, 2) + + self.dotStyle = str(inkex.Style({'fill': 'none','stroke':self.options.fill.to_rgb(),'stroke-width':0.7})) + self.dotR = str((((self.options.innerDiameter * pi) / self.options.dots) / 2) * self.dotScale) + self.generatedCircles = [] + if self.options.variant == 'snow2': + self.options.dots = self.options.dots // 3 + self.computations(radians(self.options.angle)) + self.generate() + elif self.options.variant == 'snow1': + self.generate() + self.removeGroups(1, 2) + for i in range(0, len(self.generatedCircles), 2): + self.removeDots(i, i%4, 2) + for i in range(0, len(self.generatedCircles), 2): + self.removeDots(i, (i+1)%2, 2) + for i in range(2, len(self.generatedCircles), 4): + self.removeDots(i, 0, self.options.dots) + +if __name__ == '__main__': + PolarGrid().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/bobbinlace/regular_grid.inx b/extensions/fablabchemnitz/bobbinlace/regular_grid.inx new file mode 100644 index 00000000..96fc0f31 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/regular_grid.inx @@ -0,0 +1,60 @@ + + + Regular Grid + fablabchemnitz.de.regular_grid + + + + + 45.0 + + + 5.0 + + + + + + + + + + + 50 + + + + + + + + + + 50 + + + + 2 + + + + + + + + + + 255 + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/bobbinlace/regular_grid.py b/extensions/fablabchemnitz/bobbinlace/regular_grid.py new file mode 100644 index 00000000..3e54d0b4 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/regular_grid.py @@ -0,0 +1,107 @@ +#!/usr/bin/env python3 + +# Copyright (c) 2017, Veronika Irvine +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +from math import sin, cos, radians, ceil +import inkex +from lxml import etree + +__author__ = 'Veronika Irvine' +__credits__ = ['Ben Connors', 'Veronika Irvine', 'Mark Shafer'] +__license__ = 'Simplified BSD' + +class RegularGrid(inkex.EffectExtension): + def circle(self, x, y, r, fill): + # define the stroke style + s = {'fill': fill} + + # create attributes from style and define path + attribs = {'style':str(inkex.Style(s)), + 'cx':str(x), + 'cy':str(y), + 'r':str(r)} + + # insert path object into current layer + etree.SubElement(self.svg.get_current_layer(), inkex.addNS('circle', 'svg'), attribs) + + def drawDot(self, x, y): + self.circle(x, y, self.options.dotwidth, self.options.dotcolor) + + def draw(self): + + a = self.options.distance + theta = self.options.angle + + hgrid = a*sin(theta); + vgrid = a*cos(theta) + rows = int(ceil(self.options.height / vgrid)) + cols = int(ceil(self.options.width / hgrid)) + y = 0.0 + + for r in range(rows): + x = 0.0 + if (r % 2 == 1): + x += hgrid + + for c in range(ceil(cols/2)): + self.drawDot(x, y) + x += 2.0*hgrid; + + y += vgrid; + + def add_arguments(self, pars): + pars.add_argument('--angle', type=float) + pars.add_argument('--distance', type=float) + pars.add_argument('--pinunits') + pars.add_argument('--width', type=float) + pars.add_argument('--patchunits') + pars.add_argument('--height', type=float) + pars.add_argument('--dotwidth', type=float) + pars.add_argument('--dotunits') + pars.add_argument('--dotcolor', type=inkex.Color) + + def effect(self): + """ + Effect behaviour. + Overrides base class' method and draws something. + """ + # Convert user input to universal units + self.options.width = self.svg.unittouu(str(self.options.width)+self.options.patchunits) + self.options.height = self.svg.unittouu(str(self.options.height)+self.options.patchunits) + self.options.distance = self.svg.unittouu(str(self.options.distance)+self.options.pinunits) + # Convert from diameter to radius + self.options.dotwidth = self.svg.unittouu(str(self.options.dotwidth)+self.options.dotunits)/2 + # Users expect distance to be the vertical distance between footside pins + # (vertical distance between every other row) but in the script we use it + # as as diagonal distance between grid points + # therefore convert distance based on the angle chosen + self.options.angle = radians(self.options.angle) + self.options.distance = self.options.distance/(2.0*cos(self.options.angle)) + + # Draw a grid of dots based on user inputs + self.options.dotcolor = self.options.dotcolor.to_rgb() + self.draw() + +if __name__ == '__main__': + RegularGrid().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/bobbinlace/templates/1x1_1.png b/extensions/fablabchemnitz/bobbinlace/templates/1x1_1.png new file mode 100644 index 00000000..acd38aef Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/1x1_1.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/1x1_1.txt b/extensions/fablabchemnitz/bobbinlace/templates/1x1_1.txt new file mode 100644 index 00000000..48d61639 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/1x1_1.txt @@ -0,0 +1,2 @@ +CHECKER 1 1 +[0,0,1,0,-1,1] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/2x1_2.png b/extensions/fablabchemnitz/bobbinlace/templates/2x1_2.png new file mode 100644 index 00000000..5ff8782f Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/2x1_2.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/2x1_2.txt b/extensions/fablabchemnitz/bobbinlace/templates/2x1_2.txt new file mode 100644 index 00000000..17f40db8 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/2x1_2.txt @@ -0,0 +1,3 @@ +CHECKER 2 1 +[0,0,1,0,0,1] +[0,1,-1,1,0,2] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/2x2_2.png b/extensions/fablabchemnitz/bobbinlace/templates/2x2_2.png new file mode 100644 index 00000000..32e66ce5 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/2x2_2.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/2x2_2.txt b/extensions/fablabchemnitz/bobbinlace/templates/2x2_2.txt new file mode 100644 index 00000000..b3f6a7b8 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/2x2_2.txt @@ -0,0 +1,3 @@ +CHECKER 2 2 +[0,0,1,0,-1,0] [1,0,0,1,2,1] +[0,1,1,1,-1,1] [1,1,0,2,2,2] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/2x2_5.png b/extensions/fablabchemnitz/bobbinlace/templates/2x2_5.png new file mode 100644 index 00000000..6b3be644 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/2x2_5.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/2x2_5.txt b/extensions/fablabchemnitz/bobbinlace/templates/2x2_5.txt new file mode 100644 index 00000000..8f22cfe1 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/2x2_5.txt @@ -0,0 +1,3 @@ +CHECKER 2 2 +[0,0,1,0,-1,1] [1,0,2,0,1,1] +[1,1,0,2,1,2] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/2x4_1.png b/extensions/fablabchemnitz/bobbinlace/templates/2x4_1.png new file mode 100644 index 00000000..ccb6225d Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/2x4_1.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/2x4_1.txt b/extensions/fablabchemnitz/bobbinlace/templates/2x4_1.txt new file mode 100644 index 00000000..7bf36072 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/2x4_1.txt @@ -0,0 +1,3 @@ +CHECKER 2 4 +[0,0,1,0,-1,0] [1,0,2,0,0,1] [2,0,3,0,1,1] [3,0,2,1,4,1] +[0,1,1,1,-1,1] [1,1,2,1,0,2] [2,1,3,1,1,2] [3,1,2,2,4,2] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/2x4_10.png b/extensions/fablabchemnitz/bobbinlace/templates/2x4_10.png new file mode 100644 index 00000000..22aef0ae Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/2x4_10.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/2x4_10.txt b/extensions/fablabchemnitz/bobbinlace/templates/2x4_10.txt new file mode 100644 index 00000000..990f4a3b --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/2x4_10.txt @@ -0,0 +1,3 @@ +CHECKER 2 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,1,1,3,1] +[1,1,0,2,1,2] [3,1,2,2,4,2] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/2x4_11.png b/extensions/fablabchemnitz/bobbinlace/templates/2x4_11.png new file mode 100644 index 00000000..d3daaffa Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/2x4_11.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/2x4_11.txt b/extensions/fablabchemnitz/bobbinlace/templates/2x4_11.txt new file mode 100644 index 00000000..ee056568 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/2x4_11.txt @@ -0,0 +1,3 @@ +CHECKER 2 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,2,1,3,1] +[1,1,0,2,1,2] [2,1,1,1,2,2] [3,1,2,1,4,2] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/2x4_4.png b/extensions/fablabchemnitz/bobbinlace/templates/2x4_4.png new file mode 100644 index 00000000..8720da49 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/2x4_4.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/2x4_4.txt b/extensions/fablabchemnitz/bobbinlace/templates/2x4_4.txt new file mode 100644 index 00000000..0d588352 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/2x4_4.txt @@ -0,0 +1,3 @@ +CHECKER 2 4 +[0,0,1,0,-1,0] [1,0,2,0,0,1] [2,0,1,1,3,1] [3,0,2,0,4,1] +[0,1,1,1,-1,1] [1,1,2,1,0,2] [2,1,1,2,3,2] [3,1,2,1,4,2] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/2x4_7.png b/extensions/fablabchemnitz/bobbinlace/templates/2x4_7.png new file mode 100644 index 00000000..1b63bbca Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/2x4_7.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/2x4_7.txt b/extensions/fablabchemnitz/bobbinlace/templates/2x4_7.txt new file mode 100644 index 00000000..d3179977 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/2x4_7.txt @@ -0,0 +1,3 @@ +CHECKER 2 4 +[0,0,1,0,-1,0] [1,0,2,0,1,1] [2,0,1,1,3,1] [3,0,2,0,3,1] +[1,1,0,2,1,2] [3,1,3,2,4,2] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/2x4_8.png b/extensions/fablabchemnitz/bobbinlace/templates/2x4_8.png new file mode 100644 index 00000000..7e9f4643 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/2x4_8.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/2x4_8.txt b/extensions/fablabchemnitz/bobbinlace/templates/2x4_8.txt new file mode 100644 index 00000000..d7e3b97f --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/2x4_8.txt @@ -0,0 +1,3 @@ +CHECKER 2 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,3,0,2,1] [3,0,4,0,3,1] +[1,1,0,2,1,2] [2,1,1,1,2,2] [3,1,2,1,3,2] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/3x3_1.png b/extensions/fablabchemnitz/bobbinlace/templates/3x3_1.png new file mode 100644 index 00000000..3ac3a6cd Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/3x3_1.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/3x3_1.txt b/extensions/fablabchemnitz/bobbinlace/templates/3x3_1.txt new file mode 100644 index 00000000..16b89fcf --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/3x3_1.txt @@ -0,0 +1,4 @@ +CHECKER 3 3 +[0,0,1,0,-1,0] [1,0,2,0,0,1] [2,0,1,1,3,1] +[0,1,1,1,-1,1] [1,1,2,1,0,2] [2,1,1,2,3,2] +[0,2,1,2,-1,2] [1,2,2,2,0,3] [2,2,1,3,3,3] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/3x3_3.png b/extensions/fablabchemnitz/bobbinlace/templates/3x3_3.png new file mode 100644 index 00000000..cd268ec8 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/3x3_3.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/3x3_3.txt b/extensions/fablabchemnitz/bobbinlace/templates/3x3_3.txt new file mode 100644 index 00000000..485f98b0 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/3x3_3.txt @@ -0,0 +1,3 @@ +CHECKER 3 3 +[0,0,1,0,0,2] [1,0,2,0,1,2] [2,0,3,0,2,2] +[0,2,-1,2,0,3] [1,2,0,2,1,3] [2,2,1,2,2,3] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_10.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_10.png new file mode 100644 index 00000000..820c6832 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_10.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_10.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_10.txt new file mode 100644 index 00000000..1ff626d0 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_10.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,0,1] [2,0,2,1,3,1] [3,0,2,0,3,1] +[0,1,1,1,-1,2] [1,1,0,2,2,2] [2,1,1,1,2,2] [3,1,4,1,2,1] +[0,2,-1,3,0,3] [2,2,3,2,1,3] [3,2,4,2,2,3] +[0,3,1,3,0,4] [1,3,2,3,0,4] [2,3,3,3,1,4] [3,3,4,3,3,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_100.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_100.png new file mode 100644 index 00000000..739ddf8e Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_100.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_100.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_100.txt new file mode 100644 index 00000000..074d0c73 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_100.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,1] [2,0,1,1,3,1] [3,0,2,0,3,1] +[1,1,0,2,1,2] [3,1,2,2,3,2] +[0,2,1,2,0,4] [1,2,2,2,1,3] [2,2,3,2,1,3] [3,2,4,2,3,4] +[1,3,0,4,1,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_101.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_101.png new file mode 100644 index 00000000..76beff76 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_101.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_101.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_101.txt new file mode 100644 index 00000000..d8becdf0 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_101.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,1] [2,0,1,1,3,1] [3,0,2,0,3,1] +[1,1,0,2,2,2] [3,1,2,2,3,2] +[0,2,0,4,1,3] [2,2,3,2,1,3] [3,2,4,2,3,4] +[1,3,0,4,1,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_102.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_102.png new file mode 100644 index 00000000..1e93c658 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_102.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_102.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_102.txt new file mode 100644 index 00000000..952e612c --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_102.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,1] [2,0,1,1,3,1] [3,0,2,0,3,1] +[1,1,1,2,2,2] [3,1,2,2,3,2] +[0,2,0,4,1,3] [1,2,0,2,1,3] [2,2,3,2,1,2] [3,2,4,2,3,4] +[1,3,0,4,1,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_103.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_103.png new file mode 100644 index 00000000..bbf76154 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_103.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_103.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_103.txt new file mode 100644 index 00000000..ece15f77 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_103.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,1] [2,0,1,1,2,2] [3,0,2,0,3,2] +[1,1,0,2,2,2] +[0,2,0,4,1,3] [2,2,3,2,1,3] [3,2,4,2,3,4] +[1,3,0,4,1,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_104.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_104.png new file mode 100644 index 00000000..2fb68abe Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_104.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_104.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_104.txt new file mode 100644 index 00000000..8f19ae5d --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_104.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,1] [2,0,1,1,2,2] [3,0,2,0,3,2] +[1,1,0,2,1,2] +[0,2,1,2,0,4] [1,2,2,2,1,3] [2,2,3,2,1,3] [3,2,4,2,3,4] +[1,3,0,4,1,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_105.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_105.png new file mode 100644 index 00000000..fb40d23a Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_105.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_105.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_105.txt new file mode 100644 index 00000000..44b88b41 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_105.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,1] [2,0,1,1,2,2] [3,0,2,0,3,2] +[1,1,1,2,2,2] +[0,2,0,4,1,3] [1,2,0,2,1,3] [2,2,3,2,1,2] [3,2,4,2,3,4] +[1,3,0,4,1,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_106.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_106.png new file mode 100644 index 00000000..1331742f Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_106.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_106.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_106.txt new file mode 100644 index 00000000..a953d5e2 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_106.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,2] [2,0,2,2,3,1] [3,0,2,0,3,1] +[3,1,2,2,3,2] +[0,2,0,4,1,3] [1,2,0,2,1,3] [2,2,3,2,1,2] [3,2,4,2,3,4] +[1,3,0,4,1,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_107.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_107.png new file mode 100644 index 00000000..13b0eb42 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_107.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_107.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_107.txt new file mode 100644 index 00000000..9d51cbba --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_107.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,1,1,3,1] +[1,1,0,2,1,2] [3,1,2,2,4,2] +[0,2,1,2,0,4] [1,2,2,2,1,3] [2,2,1,3,2,4] +[1,3,0,4,1,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_108.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_108.png new file mode 100644 index 00000000..bad38b19 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_108.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_108.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_108.txt new file mode 100644 index 00000000..ad36e4e0 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_108.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,1,1,3,1] +[1,1,0,2,2,2] [3,1,2,2,4,2] +[0,2,0,4,1,3] [2,2,1,3,2,4] +[1,3,0,4,1,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_109.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_109.png new file mode 100644 index 00000000..d4dad84e Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_109.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_109.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_109.txt new file mode 100644 index 00000000..72311f1c --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_109.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,1,1,3,1] +[1,1,1,2,2,2] [3,1,2,2,4,2] +[0,2,0,4,1,3] [1,2,0,2,1,3] [2,2,1,2,2,4] +[1,3,0,4,1,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_11.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_11.png new file mode 100644 index 00000000..0c2b80bb Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_11.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_11.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_11.txt new file mode 100644 index 00000000..4f15e228 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_11.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,0,1] [2,0,2,1,3,1] [3,0,2,0,3,1] +[0,1,1,1,-1,2] [1,1,1,2,2,2] [2,1,1,1,2,2] [3,1,4,1,2,1] +[0,2,-1,3,0,3] [1,2,0,2,1,3] [2,2,3,2,1,2] [3,2,4,2,2,3] +[0,3,1,3,0,4] [1,3,2,3,0,4] [2,3,3,3,1,4] [3,3,4,3,3,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_110.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_110.png new file mode 100644 index 00000000..9cf800f4 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_110.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_110.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_110.txt new file mode 100644 index 00000000..81e90a5b --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_110.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,2,1,3,1] +[1,1,0,2,1,2] [2,1,1,1,2,2] [3,1,2,1,4,2] +[0,2,1,2,0,4] [1,2,2,2,1,3] [2,2,1,3,2,4] +[1,3,0,4,1,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_111.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_111.png new file mode 100644 index 00000000..44622677 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_111.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_111.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_111.txt new file mode 100644 index 00000000..2bf6b359 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_111.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,2,1,3,1] +[1,1,0,2,2,2] [2,1,1,1,2,2] [3,1,2,1,4,2] +[0,2,0,4,1,3] [2,2,1,3,2,4] +[1,3,0,4,1,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_112.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_112.png new file mode 100644 index 00000000..ca2647e7 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_112.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_112.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_112.txt new file mode 100644 index 00000000..48adeede --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_112.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,2] [2,0,2,2,3,1] +[3,1,2,2,4,2] +[0,2,0,4,1,3] [1,2,0,2,1,3] [2,2,1,2,2,4] +[1,3,0,4,1,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_113.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_113.png new file mode 100644 index 00000000..a866db2f Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_113.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_113.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_113.txt new file mode 100644 index 00000000..a7e2d201 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_113.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,2] [2,0,3,0,2,2] [3,0,4,0,3,1] +[3,1,3,2,4,2] +[0,2,-1,2,1,3] [1,2,0,2,1,3] [2,2,1,2,2,4] [3,2,2,2,3,4] +[1,3,0,4,1,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_114.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_114.png new file mode 100644 index 00000000..2b25854e Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_114.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_114.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_114.txt new file mode 100644 index 00000000..9656dda5 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_114.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,1] [1,0,2,0,1,1] [2,0,1,1,3,1] +[0,1,-1,1,0,2] [1,1,0,1,2,2] [3,1,2,2,4,2] +[0,2,0,4,1,3] [2,2,1,3,2,4] +[1,3,0,4,1,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_115.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_115.png new file mode 100644 index 00000000..c205e008 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_115.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_115.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_115.txt new file mode 100644 index 00000000..742ec2dc --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_115.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,1] [1,0,2,0,1,1] [2,0,2,1,3,1] +[0,1,-1,1,0,2] [1,1,0,1,1,2] [2,1,1,1,2,2] [3,1,2,1,4,2] +[0,2,1,2,0,4] [1,2,2,2,1,3] [2,2,1,3,2,4] +[1,3,0,4,1,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_116.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_116.png new file mode 100644 index 00000000..82773d9a Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_116.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_116.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_116.txt new file mode 100644 index 00000000..eba8c00d --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_116.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,1] [1,0,2,0,1,1] [2,0,2,1,3,1] +[0,1,-1,1,0,2] [1,1,0,1,2,2] [2,1,1,1,2,2] [3,1,2,1,4,2] +[0,2,0,4,1,3] [2,2,1,3,2,4] +[1,3,0,4,1,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_117.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_117.png new file mode 100644 index 00000000..c55ebb44 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_117.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_117.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_117.txt new file mode 100644 index 00000000..9b7614ad --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_117.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,1,1] [1,0,2,0,1,1] [2,0,3,0,3,1] [3,0,4,0,3,1] +[1,1,0,2,1,2] [3,1,2,2,3,2] +[0,2,-1,2,1,3] [1,2,0,2,1,3] [2,2,1,2,2,4] [3,2,2,2,3,4] +[1,3,0,4,1,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_118.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_118.png new file mode 100644 index 00000000..146b85db Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_118.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_118.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_118.txt new file mode 100644 index 00000000..b3dfe8d4 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_118.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,1,1] [1,0,2,0,1,1] [2,0,3,0,2,2] [3,0,4,0,3,2] +[1,1,0,2,1,2] +[0,2,-1,2,1,3] [1,2,0,2,1,3] [2,2,1,2,2,4] [3,2,2,2,3,4] +[1,3,0,4,1,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_119.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_119.png new file mode 100644 index 00000000..8e2b5d17 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_119.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_119.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_119.txt new file mode 100644 index 00000000..78548e75 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_119.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,2] [1,0,2,0,1,1] [2,0,3,0,1,1] [3,0,4,0,3,2] +[1,1,1,2,2,2] +[0,2,-1,2,1,3] [1,2,0,2,1,3] [2,2,1,2,2,4] [3,2,2,2,3,4] +[1,3,0,4,1,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_12.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_12.png new file mode 100644 index 00000000..8a4e4cb4 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_12.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_12.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_12.txt new file mode 100644 index 00000000..208a7900 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_12.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,0,1,2,1] [2,0,3,0,1,0] [3,0,2,1,4,1] +[0,1,1,1,-1,1] [1,1,0,2,2,2] [2,1,3,1,1,1] [3,1,2,2,4,2] +[0,2,-1,3,0,3] [2,2,1,3,2,3] +[0,3,1,3,0,4] [1,3,2,3,0,4] [2,3,3,3,2,4] [3,3,4,3,2,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_120.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_120.png new file mode 100644 index 00000000..e90eac36 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_120.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_120.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_120.txt new file mode 100644 index 00000000..dbf9d6e8 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_120.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,2] [1,0,2,0,1,1] [2,0,3,0,1,1] [3,0,4,0,3,2] +[1,1,0,2,2,2] +[0,2,-1,2,1,3] [2,2,1,3,2,4] [3,2,2,2,3,4] +[1,3,0,4,1,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_121.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_121.png new file mode 100644 index 00000000..df07a838 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_121.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_121.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_121.txt new file mode 100644 index 00000000..85e89085 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_121.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,2] [1,0,2,0,1,2] [2,0,3,0,3,1] [3,0,4,0,3,1] +[3,1,2,2,3,2] +[0,2,-1,2,1,3] [1,2,0,2,1,3] [2,2,1,2,2,4] [3,2,2,2,3,4] +[1,3,0,4,1,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_122.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_122.png new file mode 100644 index 00000000..e35b83ce Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_122.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_122.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_122.txt new file mode 100644 index 00000000..78b14628 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_122.txt @@ -0,0 +1,4 @@ +CHECKER 4 4 +[0,0,1,0,0,2] [1,0,2,0,1,2] [2,0,3,0,2,2] [3,0,4,0,3,2] +[0,2,-1,2,1,3] [1,2,0,2,1,3] [2,2,1,2,2,4] [3,2,2,2,3,4] +[1,3,0,4,1,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_124.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_124.png new file mode 100644 index 00000000..0af4861f Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_124.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_124.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_124.txt new file mode 100644 index 00000000..4b92ac35 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_124.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,3,0,1,1] [3,0,4,0,3,1] +[1,1,0,2,2,2] [3,1,2,2,4,2] +[0,2,-1,3,1,3] [2,2,1,3,3,3] +[1,3,0,4,1,4] [3,3,2,4,3,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_126.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_126.png new file mode 100644 index 00000000..d9ceeea0 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_126.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_126.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_126.txt new file mode 100644 index 00000000..2d3ff519 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_126.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,3,0,1,1] [3,0,4,0,3,1] +[1,1,0,2,1,3] [3,1,3,3,4,2] +[0,2,-1,3,1,3] +[1,3,0,4,1,4] [3,3,2,4,3,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_127.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_127.png new file mode 100644 index 00000000..361d5449 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_127.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_127.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_127.txt new file mode 100644 index 00000000..92f30cfa --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_127.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,2] [2,0,3,0,2,2] [3,0,4,0,3,1] +[3,1,3,2,4,2] +[0,2,-1,2,1,3] [1,2,0,2,1,3] [2,2,1,2,3,3] [3,2,2,2,3,3] +[1,3,0,4,1,4] [3,3,2,4,3,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_128.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_128.png new file mode 100644 index 00000000..c5b70fed Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_128.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_128.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_128.txt new file mode 100644 index 00000000..aefd200c --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_128.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,3,0,2,1] [3,0,4,0,3,1] +[1,1,0,2,1,2] [2,1,1,1,2,2] [3,1,2,1,3,2] +[0,2,1,2,-1,3] [1,2,2,2,1,3] [2,2,3,2,1,3] [3,2,4,2,3,3] +[1,3,0,4,1,4] [3,3,2,4,3,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_129.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_129.png new file mode 100644 index 00000000..f514ce04 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_129.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_129.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_129.txt new file mode 100644 index 00000000..4936945a --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_129.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,1] [1,0,2,0,1,1] [2,0,3,0,2,1] [3,0,4,0,3,1] +[0,1,1,1,0,2] [1,1,2,1,1,2] [2,1,3,1,2,2] [3,1,4,1,3,2] +[0,2,-1,2,-1,3] [1,2,0,2,1,3] [2,2,1,2,1,3] [3,2,2,2,3,3] +[1,3,0,4,1,4] [3,3,2,4,3,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_13.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_13.png new file mode 100644 index 00000000..397193b7 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_13.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_13.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_13.txt new file mode 100644 index 00000000..1854a7fb --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_13.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,0,1,2,1] [2,0,3,0,1,0] [3,0,2,1,4,1] +[0,1,1,1,-1,1] [1,1,0,2,2,2] [2,1,3,1,1,1] [3,1,3,2,4,2] +[0,2,-1,2,0,3] [2,2,1,3,2,3] [3,2,2,2,3,3] +[0,3,1,3,0,4] [1,3,2,3,0,4] [2,3,3,3,2,4] [3,3,4,3,2,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_130.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_130.png new file mode 100644 index 00000000..a371cfac Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_130.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_130.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_130.txt new file mode 100644 index 00000000..0158ec12 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_130.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,1] [1,0,2,0,1,1] [2,0,3,0,2,1] [3,0,4,0,3,1] +[0,1,-1,1,0,2] [1,1,0,1,1,2] [2,1,1,1,2,2] [3,1,2,1,3,2] +[0,2,1,2,-1,3] [1,2,2,2,1,3] [2,2,3,2,1,3] [3,2,4,2,3,3] +[1,3,0,4,1,4] [3,3,2,4,3,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_131.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_131.png new file mode 100644 index 00000000..fcd2d4b8 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_131.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_131.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_131.txt new file mode 100644 index 00000000..78723e9f --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_131.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,1] [1,0,2,0,1,1] [2,0,3,0,2,1] [3,0,4,0,3,1] +[0,1,-1,1,0,2] [1,1,0,1,2,2] [2,1,1,1,2,2] [3,1,2,1,4,2] +[0,2,-1,3,1,3] [2,2,1,3,3,3] +[1,3,0,4,1,4] [3,3,2,4,3,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_132.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_132.png new file mode 100644 index 00000000..a4ae8c6f Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_132.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_132.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_132.txt new file mode 100644 index 00000000..363c063e --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_132.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,1] [1,0,2,0,1,1] [2,0,3,0,3,1] [3,0,4,0,3,1] +[0,1,1,1,0,2] [1,1,1,2,2,2] [3,1,4,1,3,2] +[0,2,-1,2,-1,3] [1,2,0,2,1,3] [2,2,1,2,1,3] [3,2,2,2,3,3] +[1,3,0,4,1,4] [3,3,2,4,3,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_133.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_133.png new file mode 100644 index 00000000..389e6f07 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_133.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_133.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_133.txt new file mode 100644 index 00000000..02da742d --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_133.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,1,1] [1,0,2,0,1,1] [2,0,3,0,3,1] [3,0,4,0,3,1] +[1,1,0,2,1,2] [3,1,2,2,3,2] +[0,2,-1,2,1,3] [1,2,0,2,1,3] [2,2,1,2,3,3] [3,2,2,2,3,3] +[1,3,0,4,1,4] [3,3,2,4,3,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_134.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_134.png new file mode 100644 index 00000000..4927beef Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_134.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_134.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_134.txt new file mode 100644 index 00000000..ae3c3ccc --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_134.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,1,1] [1,0,2,0,1,1] [2,0,3,0,3,1] [3,0,4,0,3,1] +[1,1,1,2,2,2] [3,1,3,2,4,2] +[0,2,-1,2,-1,3] [1,2,0,2,1,3] [2,2,1,2,1,3] [3,2,2,2,3,3] +[1,3,0,4,1,4] [3,3,2,4,3,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_135.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_135.png new file mode 100644 index 00000000..2b4adb3e Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_135.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_135.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_135.txt new file mode 100644 index 00000000..9529d0de --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_135.txt @@ -0,0 +1,4 @@ +CHECKER 4 4 +[0,0,1,0,0,2] [1,0,2,0,1,2] [2,0,3,0,2,2] [3,0,4,0,3,2] +[0,2,-1,2,1,3] [1,2,0,2,1,3] [2,2,1,2,3,3] [3,2,2,2,3,3] +[1,3,0,4,1,4] [3,3,2,4,3,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_136.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_136.png new file mode 100644 index 00000000..49b438d1 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_136.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_136.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_136.txt new file mode 100644 index 00000000..2ffadf90 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_136.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,2] [1,0,2,0,1,2] [2,0,3,0,3,1] [3,0,4,0,3,1] +[3,1,2,2,3,2] +[0,2,-1,2,1,3] [1,2,0,2,1,3] [2,2,1,2,3,3] [3,2,2,2,3,3] +[1,3,0,4,1,4] [3,3,2,4,3,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_137.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_137.png new file mode 100644 index 00000000..b782bb28 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_137.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_137.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_137.txt new file mode 100644 index 00000000..0341ff8e --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_137.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,1,1,3,1] +[1,1,0,2,1,2] [3,1,2,2,3,2] +[0,2,1,2,-1,3] [1,2,2,2,1,3] [2,2,3,2,1,3] [3,2,4,2,3,3] +[1,3,0,4,1,4] [3,3,2,4,4,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_138.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_138.png new file mode 100644 index 00000000..b65039b6 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_138.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_138.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_138.txt new file mode 100644 index 00000000..172d3359 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_138.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,1,1,3,1] +[1,1,0,2,1,2] [3,1,2,2,4,2] +[0,2,1,2,-1,3] [1,2,2,2,1,3] [2,2,1,3,3,3] +[1,3,0,4,1,4] [3,3,2,4,4,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_139.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_139.png new file mode 100644 index 00000000..f9b33fdb Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_139.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_139.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_139.txt new file mode 100644 index 00000000..d01aa16a --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_139.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,1,1,3,1] +[1,1,0,2,2,2] [3,1,2,2,3,2] +[0,2,-1,3,1,3] [2,2,3,2,1,3] [3,2,4,2,3,3] +[1,3,0,4,1,4] [3,3,2,4,4,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_14.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_14.png new file mode 100644 index 00000000..723aa627 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_14.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_14.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_14.txt new file mode 100644 index 00000000..814505a9 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_14.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,0,1,2,1] [2,0,3,0,1,0] [3,0,2,1,4,1] +[0,1,1,1,-1,1] [1,1,1,2,2,2] [2,1,3,1,1,1] [3,1,3,2,4,2] +[0,2,-1,2,0,3] [1,2,0,2,1,3] [2,2,1,2,2,3] [3,2,2,2,3,3] +[0,3,1,3,0,4] [1,3,2,3,0,4] [2,3,3,3,2,4] [3,3,4,3,2,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_140.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_140.png new file mode 100644 index 00000000..cc956fb0 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_140.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_140.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_140.txt new file mode 100644 index 00000000..df058461 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_140.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,1,1,3,1] +[1,1,0,2,2,2] [3,1,2,2,4,2] +[0,2,-1,3,1,3] [2,2,1,3,3,3] +[1,3,0,4,1,4] [3,3,2,4,4,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_142.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_142.png new file mode 100644 index 00000000..cb97b954 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_142.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_142.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_142.txt new file mode 100644 index 00000000..48742b11 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_142.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,1,1,3,1] +[1,1,0,2,1,3] [3,1,3,3,4,2] +[0,2,-1,3,1,3] +[1,3,0,4,1,4] [3,3,2,4,4,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_143.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_143.png new file mode 100644 index 00000000..5c45e729 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_143.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_143.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_143.txt new file mode 100644 index 00000000..4774afdf --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_143.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,1,1,3,1] +[1,1,1,2,2,2] [3,1,2,2,4,2] +[0,2,-1,3,1,3] [1,2,0,2,1,3] [2,2,1,2,3,3] +[1,3,0,4,1,4] [3,3,2,4,4,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_144.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_144.png new file mode 100644 index 00000000..624d5e41 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_144.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_144.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_144.txt new file mode 100644 index 00000000..2da23a68 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_144.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,2] [2,0,2,2,3,1] +[3,1,2,2,4,2] +[0,2,-1,3,1,3] [1,2,0,2,1,3] [2,2,1,2,3,3] +[1,3,0,4,1,4] [3,3,2,4,4,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_145.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_145.png new file mode 100644 index 00000000..d333ffda Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_145.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_145.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_145.txt new file mode 100644 index 00000000..8308e8b8 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_145.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,1,1,3,1] +[1,1,1,2,2,2] [3,1,3,2,4,2] +[0,2,-1,2,1,3] [1,2,0,2,1,3] [2,2,1,2,3,3] [3,2,2,2,3,3] +[1,3,0,4,1,4] [3,3,2,4,4,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_146.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_146.png new file mode 100644 index 00000000..44092ad7 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_146.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_146.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_146.txt new file mode 100644 index 00000000..0ee845d5 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_146.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,2] [2,0,2,2,3,1] +[3,1,3,2,4,2] +[0,2,-1,2,1,3] [1,2,0,2,1,3] [2,2,1,2,3,3] [3,2,2,2,3,3] +[1,3,0,4,1,4] [3,3,2,4,4,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_147.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_147.png new file mode 100644 index 00000000..8d6b9553 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_147.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_147.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_147.txt new file mode 100644 index 00000000..d5349dde --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_147.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,1] [1,0,2,0,1,1] [2,0,2,1,3,1] +[0,1,1,1,0,2] [1,1,2,1,1,2] [2,1,3,1,2,2] [3,1,4,1,3,2] +[0,2,-1,2,-1,3] [1,2,0,2,1,3] [2,2,1,2,1,3] [3,2,2,2,3,3] +[1,3,0,4,1,4] [3,3,2,4,4,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_148.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_148.png new file mode 100644 index 00000000..1d7e5297 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_148.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_148.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_148.txt new file mode 100644 index 00000000..c7c6021a --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_148.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,2,1,3,1] +[1,1,0,2,1,2] [2,1,1,1,2,2] [3,1,2,1,3,2] +[0,2,1,2,-1,3] [1,2,2,2,1,3] [2,2,3,2,1,3] [3,2,4,2,3,3] +[1,3,0,4,1,4] [3,3,2,4,4,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_149.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_149.png new file mode 100644 index 00000000..0355bf26 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_149.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_149.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_149.txt new file mode 100644 index 00000000..b3f7c2ed --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_149.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,1] [1,0,2,0,1,1] [2,0,2,1,3,1] +[0,1,-1,1,0,2] [1,1,0,1,1,2] [2,1,1,1,2,2] [3,1,2,1,3,2] +[0,2,1,2,-1,3] [1,2,2,2,1,3] [2,2,3,2,1,3] [3,2,4,2,3,3] +[1,3,0,4,1,4] [3,3,2,4,4,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_15.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_15.png new file mode 100644 index 00000000..3c604b1d Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_15.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_15.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_15.txt new file mode 100644 index 00000000..63492503 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_15.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,0,1,2,1] [2,0,1,0,3,1] +[0,1,1,1,-1,2] [1,1,0,2,2,2] [2,1,1,1,3,2] [3,1,4,1,2,1] +[0,2,-1,3,0,3] [2,2,1,3,2,3] [3,2,4,2,2,2] +[0,3,1,3,0,4] [1,3,2,3,0,4] [2,3,3,3,2,4] [3,3,4,3,2,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_150.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_150.png new file mode 100644 index 00000000..617cfc41 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_150.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_150.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_150.txt new file mode 100644 index 00000000..6d40e323 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_150.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,2,1,3,1] +[1,1,0,2,1,2] [2,1,1,1,2,2] [3,1,2,1,4,2] +[0,2,1,2,-1,3] [1,2,2,2,1,3] [2,2,1,3,3,3] +[1,3,0,4,1,4] [3,3,2,4,4,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_151.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_151.png new file mode 100644 index 00000000..54014045 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_151.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_151.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_151.txt new file mode 100644 index 00000000..33191e11 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_151.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,2,1,3,1] +[1,1,0,2,2,2] [2,1,1,1,2,2] [3,1,2,1,3,2] +[0,2,-1,3,1,3] [2,2,3,2,1,3] [3,2,4,2,3,3] +[1,3,0,4,1,4] [3,3,2,4,4,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_152.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_152.png new file mode 100644 index 00000000..6b208151 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_152.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_152.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_152.txt new file mode 100644 index 00000000..df265180 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_152.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,2,1,3,1] +[1,1,0,2,2,2] [2,1,1,1,2,2] [3,1,2,1,4,2] +[0,2,-1,3,1,3] [2,2,1,3,3,3] +[1,3,0,4,1,4] [3,3,2,4,4,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_153.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_153.png new file mode 100644 index 00000000..57c7e4e2 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_153.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_153.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_153.txt new file mode 100644 index 00000000..28e02615 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_153.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,1] [1,0,2,0,1,1] [2,0,2,1,3,1] +[0,1,-1,1,0,2] [1,1,0,1,1,2] [2,1,1,1,2,2] [3,1,2,1,4,2] +[0,2,1,2,-1,3] [1,2,2,2,1,3] [2,2,1,3,3,3] +[1,3,0,4,1,4] [3,3,2,4,4,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_154.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_154.png new file mode 100644 index 00000000..844d24bf Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_154.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_154.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_154.txt new file mode 100644 index 00000000..40980c26 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_154.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,1] [1,0,2,0,1,1] [2,0,2,1,3,1] +[0,1,-1,1,0,2] [1,1,0,1,2,2] [2,1,1,1,2,2] [3,1,2,1,3,2] +[0,2,-1,3,1,3] [2,2,3,2,1,3] [3,2,4,2,3,3] +[1,3,0,4,1,4] [3,3,2,4,4,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_155.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_155.png new file mode 100644 index 00000000..145952c4 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_155.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_155.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_155.txt new file mode 100644 index 00000000..c06da6ab --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_155.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,1] [1,0,2,0,1,1] [2,0,2,1,3,1] +[0,1,-1,1,0,2] [1,1,0,1,2,2] [2,1,1,1,2,2] [3,1,2,1,4,2] +[0,2,-1,3,1,3] [2,2,1,3,3,3] +[1,3,0,4,1,4] [3,3,2,4,4,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_156.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_156.png new file mode 100644 index 00000000..7807af49 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_156.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_156.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_156.txt new file mode 100644 index 00000000..9e80bf1a --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_156.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,1,1] [1,0,2,0,1,1] [2,0,2,1,3,1] +[1,1,2,1,1,2] [2,1,3,1,2,2] [3,1,3,2,4,2] +[0,2,-1,2,-1,3] [1,2,0,2,1,3] [2,2,1,2,1,3] [3,2,2,2,3,3] +[1,3,0,4,1,4] [3,3,2,4,4,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_157.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_157.png new file mode 100644 index 00000000..531ebea1 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_157.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_157.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_157.txt new file mode 100644 index 00000000..b29ed789 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_157.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,1] [2,0,1,1,3,1] [3,0,2,0,3,1] +[1,1,0,2,1,2] [3,1,2,2,3,2] +[0,2,1,2,-1,3] [1,2,2,2,1,3] [2,2,3,2,1,3] [3,2,4,2,3,3] +[1,3,0,4,1,4] [3,3,3,4,4,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_158.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_158.png new file mode 100644 index 00000000..4c94ac12 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_158.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_158.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_158.txt new file mode 100644 index 00000000..5e97b681 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_158.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,1] [2,0,1,1,3,1] [3,0,2,0,3,1] +[1,1,0,2,2,2] [3,1,2,2,4,2] +[0,2,-1,3,1,3] [2,2,1,3,3,3] +[1,3,0,4,1,4] [3,3,3,4,4,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_159.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_159.png new file mode 100644 index 00000000..21f7ae8d Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_159.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_159.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_159.txt new file mode 100644 index 00000000..1649a548 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_159.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,1] [2,0,1,1,3,1] [3,0,2,0,3,1] +[1,1,0,2,2,2] [3,1,2,2,3,2] +[0,2,-1,3,1,3] [2,2,3,2,1,3] [3,2,4,2,3,3] +[1,3,0,4,1,4] [3,3,3,4,4,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_161.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_161.png new file mode 100644 index 00000000..9571d307 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_161.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_161.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_161.txt new file mode 100644 index 00000000..ae31c8ea --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_161.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,1] [2,0,1,1,3,1] [3,0,2,0,3,1] +[1,1,0,2,1,2] [3,1,2,2,4,2] +[0,2,1,2,-1,3] [1,2,2,2,1,3] [2,2,1,3,3,3] +[1,3,0,4,1,4] [3,3,3,4,4,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_162.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_162.png new file mode 100644 index 00000000..85c087db Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_162.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_162.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_162.txt new file mode 100644 index 00000000..46180c2c --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_162.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,1] [2,0,1,1,3,1] [3,0,2,0,3,1] +[1,1,0,2,1,2] [3,1,3,2,4,2] +[0,2,1,2,-1,2] [1,2,2,2,1,3] [2,2,1,3,3,3] [3,2,2,2,3,3] +[1,3,0,4,1,4] [3,3,3,4,4,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_163.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_163.png new file mode 100644 index 00000000..e2973411 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_163.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_163.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_163.txt new file mode 100644 index 00000000..c5ecb058 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_163.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,1] [2,0,1,1,3,1] [3,0,2,0,3,1] +[1,1,0,2,1,3] [3,1,3,3,4,2] +[0,2,-1,3,1,3] +[1,3,0,4,1,4] [3,3,3,4,4,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_164.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_164.png new file mode 100644 index 00000000..2d4df298 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_164.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_164.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_164.txt new file mode 100644 index 00000000..10bd4682 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_164.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,1,1,2,2] +[1,1,0,2,1,2] [3,1,3,3,4,2] +[0,2,1,2,0,4] [1,2,2,2,1,3] [2,2,1,3,3,3] +[1,3,0,4,1,4] [3,3,2,4,3,5] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_165.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_165.png new file mode 100644 index 00000000..04b1037b Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_165.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_165.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_165.txt new file mode 100644 index 00000000..dc9e6b48 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_165.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,1,1,2,2] +[1,1,0,2,2,2] [3,1,3,3,4,2] +[0,2,0,4,1,3] [2,2,1,3,3,3] +[1,3,0,4,1,4] [3,3,2,4,3,5] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_166.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_166.png new file mode 100644 index 00000000..9f6400bb Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_166.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_166.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_166.txt new file mode 100644 index 00000000..0553bbad --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_166.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,1,1,2,2] +[1,1,1,2,2,2] [3,1,3,3,4,2] +[0,2,0,4,1,3] [1,2,0,2,1,3] [2,2,1,2,3,3] +[1,3,0,4,1,4] [3,3,2,4,3,5] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_167.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_167.png new file mode 100644 index 00000000..e3c75191 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_167.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_167.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_167.txt new file mode 100644 index 00000000..16f6a94c --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_167.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,1,1,2,2] +[1,1,0,2,1,3] [3,1,2,2,3,2] +[0,2,0,4,1,3] [2,2,3,2,3,3] [3,2,4,2,3,3] +[1,3,0,4,1,4] [3,3,2,4,3,5] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_168.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_168.png new file mode 100644 index 00000000..f45c6482 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_168.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_168.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_168.txt new file mode 100644 index 00000000..fe441abe --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_168.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,1] [1,0,2,0,1,1] [2,0,2,2,3,1] +[0,1,1,1,0,2] [1,1,0,2,1,3] [3,1,4,1,2,2] +[0,2,-1,3,0,4] [2,2,1,3,3,3] +[1,3,0,4,1,4] [3,3,2,4,3,5] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_169.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_169.png new file mode 100644 index 00000000..2825ee26 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_169.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_169.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_169.txt new file mode 100644 index 00000000..35a0f3c3 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_169.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,1] [1,0,2,0,1,1] [2,0,2,2,3,1] +[0,1,1,1,0,2] [1,1,1,2,2,2] [3,1,4,1,3,3] +[0,2,-1,3,0,4] [1,2,0,2,1,3] [2,2,1,2,1,3] +[1,3,0,4,1,4] [3,3,2,4,3,5] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_17.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_17.png new file mode 100644 index 00000000..e0c74c24 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_17.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_17.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_17.txt new file mode 100644 index 00000000..ebacc6e0 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_17.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,0,1] [2,0,1,1,2,1] [3,0,2,0,4,1] +[0,1,1,1,-1,1] [1,1,2,1,0,2] [2,1,3,1,2,2] [3,1,2,2,3,2] +[0,2,-1,3,0,3] [2,2,3,2,1,3] [3,2,4,2,3,3] +[0,3,1,3,0,4] [1,3,2,3,0,4] [2,3,1,4,3,4] [3,3,4,3,2,3] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_170.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_170.png new file mode 100644 index 00000000..82e3160e Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_170.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_170.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_170.txt new file mode 100644 index 00000000..5d8a089e --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_170.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,1] [1,0,2,0,1,1] [2,0,2,2,3,1] +[0,1,1,1,0,2] [1,1,0,2,1,3] [3,1,4,1,3,2] +[0,2,-1,2,0,4] [2,2,1,3,3,3] [3,2,2,2,3,3] +[1,3,0,4,1,4] [3,3,2,4,3,5] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_171.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_171.png new file mode 100644 index 00000000..2b067f35 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_171.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_171.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_171.txt new file mode 100644 index 00000000..ac0edf89 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_171.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,2] [1,0,2,0,1,1] [2,0,2,1,3,1] +[1,1,1,3,2,2] [2,1,1,1,2,2] [3,1,2,1,3,2] +[0,2,-1,3,0,4] [2,2,3,2,1,3] [3,2,4,2,3,3] +[1,3,0,4,1,4] [3,3,2,4,3,5] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_172.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_172.png new file mode 100644 index 00000000..a2f77ab4 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_172.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_172.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_172.txt new file mode 100644 index 00000000..0a75642a --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_172.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,1,1] [1,0,2,0,1,1] [2,0,2,2,3,1] +[1,1,1,2,2,2] [3,1,3,3,4,2] +[0,2,-1,3,0,4] [1,2,0,2,1,3] [2,2,1,2,1,3] +[1,3,0,4,1,4] [3,3,2,4,3,5] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_173.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_173.png new file mode 100644 index 00000000..7ca84b4a Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_173.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_173.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_173.txt new file mode 100644 index 00000000..5a472f73 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_173.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,2] [1,0,2,0,1,1] [2,0,1,1,3,1] +[1,1,1,3,2,2] [3,1,2,2,3,2] +[0,2,-1,3,0,4] [2,2,3,2,1,3] [3,2,4,2,3,3] +[1,3,0,4,1,4] [3,3,2,4,3,5] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_174.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_174.png new file mode 100644 index 00000000..d6c4c90e Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_174.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_174.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_174.txt new file mode 100644 index 00000000..c0b1a746 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_174.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,1,1] [1,0,2,0,1,1] [2,0,2,2,3,1] +[1,1,0,2,1,3] [3,1,2,2,4,2] +[0,2,-1,3,0,4] [2,2,1,3,3,3] +[1,3,0,4,1,4] [3,3,2,4,3,5] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_175.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_175.png new file mode 100644 index 00000000..c984bfff Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_175.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_175.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_175.txt new file mode 100644 index 00000000..3c9062ac --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_175.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,2] [1,0,2,0,1,1] [2,0,1,1,3,1] +[1,1,1,3,2,2] [3,1,2,2,4,2] +[0,2,-1,3,0,4] [2,2,1,3,3,3] +[1,3,0,4,1,4] [3,3,2,4,3,5] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_176.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_176.png new file mode 100644 index 00000000..7bb40ee6 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_176.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_176.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_176.txt new file mode 100644 index 00000000..1429d3d8 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_176.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,2] [1,0,2,0,1,1] [2,0,1,1,3,1] +[1,1,1,3,2,2] [3,1,3,2,4,2] +[0,2,-1,2,0,4] [2,2,1,3,3,3] [3,2,2,2,3,3] +[1,3,0,4,1,4] [3,3,2,4,3,5] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_177.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_177.png new file mode 100644 index 00000000..e182bc18 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_177.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_177.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_177.txt new file mode 100644 index 00000000..f44e2d21 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_177.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,2] [1,0,2,0,1,1] [2,0,1,1,3,1] +[1,1,0,2,2,2] [3,1,2,2,3,3] +[0,2,-1,3,1,3] [2,2,1,3,2,4] +[1,3,0,4,1,4] [3,3,3,5,4,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_178.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_178.png new file mode 100644 index 00000000..0a41ea95 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_178.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_178.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_178.txt new file mode 100644 index 00000000..6e20e133 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_178.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,1,1] [1,0,2,0,1,1] [2,0,2,2,3,1] +[1,1,0,2,1,3] [3,1,3,2,4,2] +[0,2,-1,2,0,4] [2,2,1,3,3,3] [3,2,2,2,3,3] +[1,3,0,4,1,4] [3,3,2,4,3,5] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_179.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_179.png new file mode 100644 index 00000000..df45541f Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_179.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_179.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_179.txt new file mode 100644 index 00000000..37ea2431 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_179.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,1,1] [1,0,2,0,1,1] [2,0,2,2,3,1] +[1,1,0,2,1,2] [3,1,2,2,3,3] +[0,2,-1,3,1,3] [1,2,0,2,1,3] [2,2,1,2,2,4] +[1,3,0,4,1,4] [3,3,3,5,4,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_18.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_18.png new file mode 100644 index 00000000..77deb5fd Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_18.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_18.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_18.txt new file mode 100644 index 00000000..54edbe0e --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_18.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,0,1] [2,0,1,1,2,1] [3,0,2,0,4,1] +[0,1,1,1,-1,1] [1,1,2,1,0,2] [2,1,3,1,2,2] [3,1,2,2,4,2] +[0,2,-1,3,0,3] [2,2,1,3,3,3] +[0,3,1,3,0,4] [1,3,2,3,0,4] [2,3,1,4,3,4] [3,3,4,3,2,3] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_180.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_180.png new file mode 100644 index 00000000..df4744f5 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_180.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_180.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_180.txt new file mode 100644 index 00000000..ab3130d2 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_180.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,2] [1,0,2,0,1,2] [2,0,2,2,3,1] +[3,1,2,2,3,3] +[0,2,-1,3,1,3] [1,2,0,2,1,3] [2,2,1,2,2,4] +[1,3,0,4,1,4] [3,3,3,5,4,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_181.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_181.png new file mode 100644 index 00000000..585eb221 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_181.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_181.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_181.txt new file mode 100644 index 00000000..a7083d7b --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_181.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,1,1] [1,0,2,0,1,1] [2,0,2,2,3,1] +[1,1,0,2,1,3] [3,1,3,2,4,2] +[0,2,-1,2,-1,3] [2,2,1,3,2,4] [3,2,2,2,3,3] +[1,3,0,4,1,4] [3,3,3,5,4,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_182.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_182.png new file mode 100644 index 00000000..8cfbbbb7 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_182.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_182.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_182.txt new file mode 100644 index 00000000..2b4936ea --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_182.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,2] [1,0,2,0,1,1] [2,0,1,1,3,1] +[1,1,1,2,2,2] [3,1,2,2,3,3] +[0,2,-1,3,1,3] [1,2,0,2,1,3] [2,2,1,2,2,4] +[1,3,0,4,1,4] [3,3,3,5,4,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_183.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_183.png new file mode 100644 index 00000000..5de66999 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_183.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_183.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_183.txt new file mode 100644 index 00000000..8b2d33f5 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_183.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,3,0,2,1] [3,0,4,0,3,1] +[1,1,0,2,1,2] [2,1,1,1,2,2] [3,1,2,1,3,2] +[0,2,1,2,-1,3] [1,2,2,2,1,3] [2,2,3,2,2,3] [3,2,4,2,3,3] +[1,3,0,4,1,4] [2,3,1,3,2,4] [3,3,2,3,3,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_184.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_184.png new file mode 100644 index 00000000..4f240dd4 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_184.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_184.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_184.txt new file mode 100644 index 00000000..2497ecf3 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_184.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,1] [1,0,2,0,1,1] [2,0,3,0,1,1] [3,0,4,0,3,1] +[0,1,-1,1,0,2] [1,1,0,1,1,2] [3,1,2,2,3,2] +[0,2,1,2,-1,3] [1,2,2,2,1,3] [2,2,3,2,2,3] [3,2,4,2,3,3] +[1,3,0,4,1,4] [2,3,1,3,2,4] [3,3,2,3,3,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_185.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_185.png new file mode 100644 index 00000000..b40cbb9d Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_185.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_185.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_185.txt new file mode 100644 index 00000000..39bfd76d --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_185.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,1] [1,0,2,0,1,1] [2,0,3,0,2,1] [3,0,4,0,3,1] +[0,1,1,1,0,2] [1,1,2,1,0,2] [2,1,3,1,2,2] [3,1,4,1,3,2] +[0,2,-1,2,-1,3] [2,2,1,3,2,3] [3,2,2,2,3,3] +[1,3,0,4,1,4] [2,3,1,3,2,4] [3,3,2,3,3,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_186.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_186.png new file mode 100644 index 00000000..f1d9fd6c Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_186.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_186.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_186.txt new file mode 100644 index 00000000..d3362b39 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_186.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,1] [1,0,2,0,1,1] [2,0,3,0,2,1] [3,0,4,0,3,1] +[0,1,1,1,0,2] [1,1,2,1,1,2] [2,1,3,1,2,2] [3,1,4,1,3,2] +[0,2,-1,2,-1,3] [1,2,0,2,1,3] [2,2,1,2,2,3] [3,2,2,2,3,3] +[1,3,0,4,1,4] [2,3,1,3,2,4] [3,3,2,3,3,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_187.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_187.png new file mode 100644 index 00000000..c4cc88cb Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_187.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_187.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_187.txt new file mode 100644 index 00000000..fd1fc407 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_187.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,1] [1,0,2,0,1,1] [2,0,3,0,2,1] [3,0,4,0,3,1] +[0,1,-1,1,0,2] [1,1,0,1,1,2] [2,1,1,1,2,2] [3,1,2,1,3,2] +[0,2,1,2,-1,3] [1,2,2,2,1,3] [2,2,3,2,2,3] [3,2,4,2,3,3] +[1,3,0,4,1,4] [2,3,1,3,2,4] [3,3,2,3,3,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_188.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_188.png new file mode 100644 index 00000000..f4e5db1b Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_188.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_188.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_188.txt new file mode 100644 index 00000000..3c97bd31 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_188.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,1] [1,0,2,0,1,1] [2,0,3,0,3,1] [3,0,4,0,3,1] +[0,1,1,1,0,2] [1,1,1,2,2,2] [3,1,4,1,3,2] +[0,2,-1,2,-1,3] [1,2,0,2,1,3] [2,2,1,2,2,3] [3,2,2,2,3,3] +[1,3,0,4,1,4] [2,3,1,3,2,4] [3,3,2,3,3,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_189.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_189.png new file mode 100644 index 00000000..2919ab5d Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_189.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_189.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_189.txt new file mode 100644 index 00000000..cac9f5da --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_189.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,1,1] [1,0,2,0,1,1] [2,0,3,0,2,1] [3,0,4,0,3,1] +[1,1,2,1,1,2] [2,1,3,1,2,2] [3,1,3,2,4,2] +[0,2,-1,2,-1,3] [1,2,0,2,1,3] [2,2,1,2,2,3] [3,2,2,2,3,3] +[1,3,0,4,1,4] [2,3,1,3,2,4] [3,3,2,3,3,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_19.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_19.png new file mode 100644 index 00000000..fb1cd917 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_19.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_19.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_19.txt new file mode 100644 index 00000000..e7553c62 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_19.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,0,1] [2,0,1,1,2,1] [3,0,2,0,4,1] +[0,1,1,1,-1,1] [1,1,2,1,0,2] [2,1,3,1,2,2] [3,1,3,2,4,2] +[0,2,-1,2,0,3] [2,2,1,3,3,3] [3,2,2,2,3,3] +[0,3,1,3,0,4] [1,3,2,3,0,4] [2,3,1,4,3,4] [3,3,4,3,2,3] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_190.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_190.png new file mode 100644 index 00000000..23cf7036 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_190.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_190.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_190.txt new file mode 100644 index 00000000..8e626dbf --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_190.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,1,1,3,1] +[1,1,0,2,1,2] [3,1,2,2,3,2] +[0,2,1,2,-1,3] [1,2,2,2,1,3] [2,2,3,2,2,3] [3,2,4,2,3,3] +[1,3,0,4,1,4] [2,3,1,3,2,4] [3,3,2,3,4,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_191.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_191.png new file mode 100644 index 00000000..dc2c340a Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_191.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_191.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_191.txt new file mode 100644 index 00000000..5d673738 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_191.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,1,1,3,1] +[1,1,0,2,2,2] [3,1,2,2,3,2] +[0,2,-1,3,1,3] [2,2,3,2,2,3] [3,2,4,2,3,3] +[1,3,0,4,1,4] [2,3,1,3,2,4] [3,3,2,3,4,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_192.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_192.png new file mode 100644 index 00000000..89960cf2 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_192.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_192.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_192.txt new file mode 100644 index 00000000..8966e72b --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_192.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,2,1,3,1] +[1,1,0,2,1,2] [2,1,1,1,2,2] [3,1,2,1,3,2] +[0,2,1,2,-1,3] [1,2,2,2,1,3] [2,2,3,2,2,3] [3,2,4,2,3,3] +[1,3,0,4,1,4] [2,3,1,3,2,4] [3,3,2,3,4,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_193.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_193.png new file mode 100644 index 00000000..cd5348a6 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_193.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_193.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_193.txt new file mode 100644 index 00000000..790cb17c --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_193.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,2,1,3,1] +[1,1,0,2,1,2] [2,1,1,1,2,2] [3,1,2,1,4,2] +[0,2,1,2,-1,3] [1,2,2,2,1,3] [2,2,2,3,3,3] +[1,3,0,4,1,4] [2,3,1,3,2,4] [3,3,2,3,4,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_194.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_194.png new file mode 100644 index 00000000..6daa1933 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_194.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_194.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_194.txt new file mode 100644 index 00000000..32bf0974 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_194.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,2,1,3,1] +[1,1,0,2,2,2] [2,1,1,1,2,2] [3,1,2,1,3,2] +[0,2,-1,3,1,3] [2,2,3,2,2,3] [3,2,4,2,3,3] +[1,3,0,4,1,4] [2,3,1,3,2,4] [3,3,2,3,4,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_195.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_195.png new file mode 100644 index 00000000..68c52727 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_195.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_195.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_195.txt new file mode 100644 index 00000000..463f7d54 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_195.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,1] [1,0,2,0,1,1] [2,0,2,1,3,1] +[0,1,1,1,0,2] [1,1,2,1,0,2] [2,1,3,1,2,2] [3,1,4,1,3,2] +[0,2,-1,2,-1,3] [2,2,1,3,2,3] [3,2,2,2,3,3] +[1,3,0,4,1,4] [2,3,1,3,2,4] [3,3,2,3,4,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_196.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_196.png new file mode 100644 index 00000000..e324703a Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_196.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_196.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_196.txt new file mode 100644 index 00000000..d85e699c --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_196.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,1] [1,0,2,0,1,1] [2,0,1,1,3,1] +[0,1,-1,1,0,2] [1,1,0,1,1,2] [3,1,2,2,3,2] +[0,2,1,2,-1,3] [1,2,2,2,1,3] [2,2,3,2,2,3] [3,2,4,2,3,3] +[1,3,0,4,1,4] [2,3,1,3,2,4] [3,3,2,3,4,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_197.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_197.png new file mode 100644 index 00000000..7e9c0f4b Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_197.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_197.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_197.txt new file mode 100644 index 00000000..0d2f2283 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_197.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,1] [1,0,2,0,1,1] [2,0,2,1,3,1] +[0,1,1,1,0,2] [1,1,2,1,1,2] [2,1,3,1,2,2] [3,1,4,1,3,2] +[0,2,-1,2,-1,3] [1,2,0,2,1,3] [2,2,1,2,2,3] [3,2,2,2,3,3] +[1,3,0,4,1,4] [2,3,1,3,2,4] [3,3,2,3,4,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_198.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_198.png new file mode 100644 index 00000000..5be86fd6 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_198.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_198.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_198.txt new file mode 100644 index 00000000..28a54521 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_198.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,1] [1,0,2,0,1,1] [2,0,1,1,3,1] +[0,1,-1,1,0,2] [1,1,0,1,2,2] [3,1,2,2,3,2] +[0,2,-1,3,1,3] [2,2,3,2,2,3] [3,2,4,2,3,3] +[1,3,0,4,1,4] [2,3,1,3,2,4] [3,3,2,3,4,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_199.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_199.png new file mode 100644 index 00000000..747e7f7e Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_199.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_199.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_199.txt new file mode 100644 index 00000000..f3b64067 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_199.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,1] [1,0,2,0,1,1] [2,0,2,1,3,1] +[0,1,-1,1,0,2] [1,1,0,1,1,2] [2,1,1,1,2,2] [3,1,2,1,3,2] +[0,2,1,2,-1,3] [1,2,2,2,1,3] [2,2,3,2,2,3] [3,2,4,2,3,3] +[1,3,0,4,1,4] [2,3,1,3,2,4] [3,3,2,3,4,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_2.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_2.png new file mode 100644 index 00000000..64422b41 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_2.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_2.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_2.txt new file mode 100644 index 00000000..36195825 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_2.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,0,1] [2,0,1,1,2,1] +[0,1,1,1,-1,2] [1,1,2,1,0,2] [2,1,3,1,2,2] [3,1,4,1,2,2] +[0,2,-1,3,0,3] [2,2,3,2,1,3] [3,2,4,2,2,3] +[0,3,1,3,0,4] [1,3,2,3,0,4] [2,3,3,3,1,4] [3,3,4,3,2,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_20.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_20.png new file mode 100644 index 00000000..cf7dcea8 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_20.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_20.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_20.txt new file mode 100644 index 00000000..fae8478b --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_20.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,0,1] [2,0,1,1,2,1] [3,0,2,0,4,1] +[0,1,1,1,-1,1] [1,1,2,1,1,2] [2,1,3,1,2,2] [3,1,2,2,3,2] +[0,2,-1,3,0,3] [1,2,0,2,1,3] [2,2,3,2,1,2] [3,2,4,2,3,3] +[0,3,1,3,0,4] [1,3,2,3,0,4] [2,3,1,4,3,4] [3,3,4,3,2,3] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_200.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_200.png new file mode 100644 index 00000000..92166fd3 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_200.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_200.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_200.txt new file mode 100644 index 00000000..46139439 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_200.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,1] [1,0,2,0,1,1] [2,0,2,1,3,1] +[0,1,-1,1,0,2] [1,1,0,1,2,2] [2,1,1,1,2,2] [3,1,2,1,3,2] +[0,2,-1,3,1,3] [2,2,3,2,2,3] [3,2,4,2,3,3] +[1,3,0,4,1,4] [2,3,1,3,2,4] [3,3,2,3,4,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_201.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_201.png new file mode 100644 index 00000000..221fae75 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_201.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_201.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_201.txt new file mode 100644 index 00000000..d74fc0b4 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_201.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,1,1] [1,0,2,0,1,1] [2,0,2,1,3,1] +[1,1,2,1,0,2] [2,1,3,1,2,2] [3,1,3,2,4,2] +[0,2,-1,2,-1,3] [2,2,1,3,2,3] [3,2,2,2,3,3] +[1,3,0,4,1,4] [2,3,1,3,2,4] [3,3,2,3,4,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_202.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_202.png new file mode 100644 index 00000000..e0bbc181 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_202.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_202.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_202.txt new file mode 100644 index 00000000..ece142d7 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_202.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,1,1] [1,0,2,0,1,1] [2,0,2,1,3,1] +[1,1,2,1,1,2] [2,1,3,1,2,2] [3,1,3,2,4,2] +[0,2,-1,2,-1,3] [1,2,0,2,1,3] [2,2,1,2,2,3] [3,2,2,2,3,3] +[1,3,0,4,1,4] [2,3,1,3,2,4] [3,3,2,3,4,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_203.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_203.png new file mode 100644 index 00000000..3fcb5310 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_203.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_203.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_203.txt new file mode 100644 index 00000000..e33d4339 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_203.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,1,1,2,2] +[1,1,0,2,1,2] [3,1,3,3,4,2] +[0,2,1,2,0,4] [1,2,2,2,1,3] [2,2,2,3,3,3] +[1,3,0,4,1,4] [2,3,1,3,2,4] [3,3,2,3,3,5] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_204.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_204.png new file mode 100644 index 00000000..2c24b8e8 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_204.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_204.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_204.txt new file mode 100644 index 00000000..1f4b9cef --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_204.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,1,1,2,2] +[1,1,0,2,2,2] [3,1,3,3,4,2] +[0,2,0,4,1,3] [2,2,2,3,3,3] +[1,3,0,4,1,4] [2,3,1,3,2,4] [3,3,2,3,3,5] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_205.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_205.png new file mode 100644 index 00000000..19b5d4ec Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_205.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_205.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_205.txt new file mode 100644 index 00000000..985778ed --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_205.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,1,1,2,2] +[1,1,1,3,2,2] [3,1,3,2,4,2] +[0,2,-1,3,0,4] [2,2,3,2,2,3] [3,2,4,2,3,3] +[1,3,0,4,1,4] [2,3,1,3,2,4] [3,3,2,3,3,5] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_206.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_206.png new file mode 100644 index 00000000..d34a4978 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_206.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_206.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_206.txt new file mode 100644 index 00000000..d66d2098 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_206.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,1] [1,0,2,0,1,1] [2,0,2,2,3,1] +[0,1,1,1,0,2] [1,1,0,2,2,2] [3,1,4,1,3,3] +[0,2,-1,3,0,4] [2,2,1,3,2,3] +[1,3,0,4,1,4] [2,3,1,3,2,4] [3,3,2,3,3,5] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_207.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_207.png new file mode 100644 index 00000000..43bb63ce Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_207.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_207.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_207.txt new file mode 100644 index 00000000..385ad33a --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_207.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,1] [1,0,2,0,1,1] [2,0,2,2,3,1] +[0,1,1,1,0,2] [1,1,1,2,2,2] [3,1,4,1,3,3] +[0,2,-1,3,0,4] [1,2,0,2,1,3] [2,2,1,2,2,3] +[1,3,0,4,1,4] [2,3,1,3,2,4] [3,3,2,3,3,5] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_208.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_208.png new file mode 100644 index 00000000..0736f67f Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_208.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_208.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_208.txt new file mode 100644 index 00000000..d837f526 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_208.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,1,1] [1,0,2,0,1,1] [2,0,2,2,3,1] +[1,1,0,2,2,2] [3,1,3,3,4,2] +[0,2,-1,3,0,4] [2,2,1,3,2,3] +[1,3,0,4,1,4] [2,3,1,3,2,4] [3,3,2,3,3,5] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_209.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_209.png new file mode 100644 index 00000000..3b8d076a Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_209.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_209.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_209.txt new file mode 100644 index 00000000..c219a058 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_209.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,1,1] [1,0,2,0,1,1] [2,0,2,2,3,1] +[1,1,0,2,1,3] [3,1,2,2,4,2] +[0,2,-1,3,0,4] [2,2,2,3,3,3] +[1,3,0,4,1,4] [2,3,1,3,2,4] [3,3,2,3,3,5] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_21.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_21.png new file mode 100644 index 00000000..7cf15be0 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_21.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_21.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_21.txt new file mode 100644 index 00000000..39c20846 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_21.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,0,1] [2,0,1,1,2,1] [3,0,2,0,4,1] +[0,1,1,1,-1,1] [1,1,2,1,1,2] [2,1,3,1,2,2] [3,1,2,2,4,2] +[0,2,-1,3,0,3] [1,2,0,2,1,3] [2,2,1,2,3,3] +[0,3,1,3,0,4] [1,3,2,3,0,4] [2,3,1,4,3,4] [3,3,4,3,2,3] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_210.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_210.png new file mode 100644 index 00000000..4d96833b Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_210.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_210.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_210.txt new file mode 100644 index 00000000..3c89bf76 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_210.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,2] [1,0,2,0,1,1] [2,0,2,1,3,1] +[1,1,1,3,2,2] [2,1,1,1,2,2] [3,1,2,1,3,2] +[0,2,-1,3,0,4] [2,2,3,2,2,3] [3,2,4,2,3,3] +[1,3,0,4,1,4] [2,3,1,3,2,4] [3,3,2,3,3,5] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_211.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_211.png new file mode 100644 index 00000000..437d10b9 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_211.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_211.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_211.txt new file mode 100644 index 00000000..3cdcb388 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_211.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,2] [1,0,2,0,1,1] [2,0,1,1,3,1] +[1,1,1,3,2,2] [3,1,2,2,3,2] +[0,2,-1,3,0,4] [2,2,3,2,2,3] [3,2,4,2,3,3] +[1,3,0,4,1,4] [2,3,1,3,2,4] [3,3,2,3,3,5] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_212.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_212.png new file mode 100644 index 00000000..dbba2e7e Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_212.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_212.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_212.txt new file mode 100644 index 00000000..9aaddbe5 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_212.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,2] [1,0,2,0,1,1] [2,0,1,1,3,1] +[1,1,1,3,2,2] [3,1,2,2,4,2] +[0,2,-1,3,0,4] [2,2,2,3,3,3] +[1,3,0,4,1,4] [2,3,1,3,2,4] [3,3,2,3,3,5] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_213.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_213.png new file mode 100644 index 00000000..850a9e39 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_213.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_213.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_213.txt new file mode 100644 index 00000000..85aedd3c --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_213.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,0,1,2,1] [2,0,3,0,1,0] [3,0,2,1,4,1] +[0,1,1,1,-1,1] [1,1,0,2,2,2] [2,1,3,1,1,1] [3,1,2,2,4,2] +[0,2,0,4,1,3] [2,2,1,3,2,4] +[1,3,0,4,2,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_214.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_214.png new file mode 100644 index 00000000..62b2bf41 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_214.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_214.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_214.txt new file mode 100644 index 00000000..8139518e --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_214.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,0,1,2,1] [2,0,1,0,3,1] +[0,1,1,1,-1,2] [1,1,0,2,2,2] [2,1,1,1,3,2] [3,1,4,1,2,1] +[0,2,0,4,1,3] [2,2,1,3,2,4] [3,2,4,2,2,2] +[1,3,0,4,2,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_215.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_215.png new file mode 100644 index 00000000..83bb3984 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_215.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_215.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_215.txt new file mode 100644 index 00000000..c6d2f62d --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_215.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,-1,1,1,1] [2,0,1,1,3,1] +[1,1,0,2,2,2] [3,1,2,2,4,2] +[0,2,0,4,1,3] [2,2,1,3,2,4] +[1,3,0,4,2,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_217.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_217.png new file mode 100644 index 00000000..4a30c964 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_217.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_217.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_217.txt new file mode 100644 index 00000000..6f1b9975 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_217.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,0,1,2,1] [2,0,3,0,1,0] [3,0,2,1,4,1] +[0,1,1,1,-1,1] [1,1,0,2,2,2] [2,1,3,1,1,1] [3,1,2,2,4,2] +[0,2,-1,3,1,3] [2,2,1,3,3,3] +[1,3,0,4,2,4] [3,3,2,4,4,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_219.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_219.png new file mode 100644 index 00000000..3bad0319 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_219.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_219.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_219.txt new file mode 100644 index 00000000..3ff3dfea --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_219.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,-1,1,1,1] [2,0,1,1,2,2] +[1,1,0,2,2,2] [3,1,3,3,4,2] +[0,2,0,4,1,3] [2,2,1,3,3,3] +[1,3,0,4,2,4] [3,3,2,4,3,5] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_22.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_22.png new file mode 100644 index 00000000..e486e32b Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_22.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_22.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_22.txt new file mode 100644 index 00000000..419aada2 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_22.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,0,1] [2,0,1,1,2,1] [3,0,2,0,4,1] +[0,1,1,1,-1,1] [1,1,2,1,1,2] [2,1,3,1,2,2] [3,1,3,2,4,2] +[0,2,-1,2,0,3] [1,2,0,2,1,3] [2,2,1,2,3,3] [3,2,2,2,3,3] +[0,3,1,3,0,4] [1,3,2,3,0,4] [2,3,1,4,3,4] [3,3,4,3,2,3] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_220.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_220.png new file mode 100644 index 00000000..08255339 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_220.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_220.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_220.txt new file mode 100644 index 00000000..d119e19d --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_220.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,2] [1,0,2,0,1,2] [2,0,2,2,3,1] +[3,1,2,2,3,3] +[0,2,-1,3,0,4] [1,2,0,2,1,4] [2,2,1,2,2,4] +[3,3,3,5,4,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_221.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_221.png new file mode 100644 index 00000000..0aa0bde4 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_221.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_221.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_221.txt new file mode 100644 index 00000000..4b75916f --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_221.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,-1,1,0,2] [2,0,1,1,2,2] +[1,1,1,3,2,2] [3,1,3,3,4,2] +[0,2,0,4,1,3] [2,2,2,4,3,3] +[1,3,0,4,1,5] [3,3,2,4,3,5] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_23.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_23.png new file mode 100644 index 00000000..98db8f7d Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_23.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_23.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_23.txt new file mode 100644 index 00000000..a488c897 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_23.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,0,1] [2,0,1,1,3,1] [3,0,2,0,4,1] +[0,1,1,1,-1,1] [1,1,0,2,2,2] [3,1,2,2,3,2] +[0,2,-1,3,0,3] [2,2,3,2,1,3] [3,2,4,2,3,3] +[0,3,1,3,0,4] [1,3,2,3,0,4] [2,3,1,4,3,4] [3,3,4,3,2,3] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_24.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_24.png new file mode 100644 index 00000000..0ad7d2e4 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_24.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_24.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_24.txt new file mode 100644 index 00000000..c3a305e2 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_24.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,0,1] [2,0,1,1,3,1] [3,0,2,0,4,1] +[0,1,1,1,-1,1] [1,1,0,2,2,2] [3,1,2,2,4,2] +[0,2,-1,3,0,3] [2,2,1,3,3,3] +[0,3,1,3,0,4] [1,3,2,3,0,4] [2,3,1,4,3,4] [3,3,4,3,2,3] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_25.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_25.png new file mode 100644 index 00000000..db877f16 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_25.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_25.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_25.txt new file mode 100644 index 00000000..22d06f93 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_25.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,0,1] [2,0,1,1,3,1] [3,0,2,0,4,1] +[0,1,1,1,-1,1] [1,1,0,2,2,2] [3,1,3,2,4,2] +[0,2,-1,2,0,3] [2,2,1,3,3,3] [3,2,2,2,3,3] +[0,3,1,3,0,4] [1,3,2,3,0,4] [2,3,1,4,3,4] [3,3,4,3,2,3] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_26.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_26.png new file mode 100644 index 00000000..792fd2de Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_26.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_26.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_26.txt new file mode 100644 index 00000000..3db6bd93 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_26.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,0,1] [2,0,1,1,3,1] [3,0,2,0,4,1] +[0,1,1,1,-1,1] [1,1,1,2,2,2] [3,1,2,2,3,2] +[0,2,-1,3,0,3] [1,2,0,2,1,3] [2,2,3,2,1,2] [3,2,4,2,3,3] +[0,3,1,3,0,4] [1,3,2,3,0,4] [2,3,1,4,3,4] [3,3,4,3,2,3] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_27.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_27.png new file mode 100644 index 00000000..2690210e Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_27.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_27.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_27.txt new file mode 100644 index 00000000..d8fb0347 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_27.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,0,1] [2,0,1,1,3,1] [3,0,2,0,4,1] +[0,1,1,1,-1,1] [1,1,1,2,2,2] [3,1,2,2,4,2] +[0,2,-1,3,0,3] [1,2,0,2,1,3] [2,2,1,2,3,3] +[0,3,1,3,0,4] [1,3,2,3,0,4] [2,3,1,4,3,4] [3,3,4,3,2,3] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_28.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_28.png new file mode 100644 index 00000000..c40220d2 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_28.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_28.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_28.txt new file mode 100644 index 00000000..2890ac19 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_28.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,0,1] [2,0,1,1,3,1] [3,0,2,0,4,1] +[0,1,1,1,-1,1] [1,1,1,2,2,2] [3,1,3,2,4,2] +[0,2,-1,2,0,3] [1,2,0,2,1,3] [2,2,1,2,3,3] [3,2,2,2,3,3] +[0,3,1,3,0,4] [1,3,2,3,0,4] [2,3,1,4,3,4] [3,3,4,3,2,3] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_29.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_29.png new file mode 100644 index 00000000..c58c7847 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_29.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_29.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_29.txt new file mode 100644 index 00000000..3477bfae --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_29.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,0,1] [2,0,1,1,3,1] [3,0,2,0,4,1] +[0,1,1,1,-1,1] [1,1,0,2,1,3] [3,1,3,3,4,2] +[0,2,-1,3,0,3] +[0,3,1,3,0,4] [1,3,2,3,0,4] [2,3,1,4,3,4] [3,3,4,3,2,3] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_30.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_30.png new file mode 100644 index 00000000..76719120 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_30.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_30.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_30.txt new file mode 100644 index 00000000..34361ebc --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_30.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,0,1] [2,0,2,1,3,1] [3,0,2,0,4,1] +[0,1,1,1,-1,1] [1,1,0,2,2,2] [2,1,1,1,2,2] [3,1,2,1,3,2] +[0,2,-1,3,0,3] [2,2,3,2,1,3] [3,2,4,2,3,3] +[0,3,1,3,0,4] [1,3,2,3,0,4] [2,3,1,4,3,4] [3,3,4,3,2,3] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_31.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_31.png new file mode 100644 index 00000000..bd20a6e3 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_31.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_31.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_31.txt new file mode 100644 index 00000000..749967a4 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_31.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,0,1] [2,0,2,1,3,1] [3,0,2,0,4,1] +[0,1,1,1,-1,1] [1,1,0,2,2,2] [2,1,1,1,2,2] [3,1,2,1,4,2] +[0,2,-1,3,0,3] [2,2,1,3,3,3] +[0,3,1,3,0,4] [1,3,2,3,0,4] [2,3,1,4,3,4] [3,3,4,3,2,3] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_32.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_32.png new file mode 100644 index 00000000..7af82e0e Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_32.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_32.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_32.txt new file mode 100644 index 00000000..ecd6eeee --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_32.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,0,1] [2,0,2,1,3,1] [3,0,2,0,4,1] +[0,1,1,1,-1,1] [1,1,1,2,2,2] [2,1,1,1,2,2] [3,1,2,1,3,2] +[0,2,-1,3,0,3] [1,2,0,2,1,3] [2,2,3,2,1,2] [3,2,4,2,3,3] +[0,3,1,3,0,4] [1,3,2,3,0,4] [2,3,1,4,3,4] [3,3,4,3,2,3] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_33.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_33.png new file mode 100644 index 00000000..45567cf4 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_33.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_33.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_33.txt new file mode 100644 index 00000000..d7d65c14 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_33.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,0,1] [2,0,1,1,3,1] +[0,1,1,1,-1,2] [1,1,0,2,2,2] [3,1,4,1,2,2] +[0,2,-1,3,1,3] [2,2,3,2,1,3] [3,2,4,2,2,3] +[1,3,2,3,0,4] [2,3,3,3,1,4] [3,3,2,4,4,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_34.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_34.png new file mode 100644 index 00000000..4d1b1515 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_34.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_34.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_34.txt new file mode 100644 index 00000000..1f68044e --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_34.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,0,1] [2,0,1,1,3,1] [3,0,2,0,3,1] +[0,1,1,1,-1,2] [1,1,0,2,2,2] [3,1,4,1,2,2] +[0,2,-1,3,1,3] [2,2,3,2,1,3] [3,2,4,2,2,3] +[1,3,2,3,0,4] [2,3,3,3,1,4] [3,3,3,4,4,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_35.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_35.png new file mode 100644 index 00000000..a50a0662 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_35.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_35.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_35.txt new file mode 100644 index 00000000..02ec2317 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_35.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,0,1] [2,0,1,1,3,1] [3,0,2,0,3,1] +[0,1,1,1,-1,2] [1,1,1,2,2,2] [3,1,4,1,2,2] +[0,2,-1,3,1,3] [1,2,0,2,1,3] [2,2,3,2,1,2] [3,2,4,2,2,3] +[1,3,2,3,0,4] [2,3,3,3,1,4] [3,3,3,4,4,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_37.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_37.png new file mode 100644 index 00000000..66e94ea0 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_37.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_37.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_37.txt new file mode 100644 index 00000000..e0fbefb1 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_37.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,1,1,2,1] +[1,1,2,1,0,2] [2,1,3,1,2,2] [3,1,2,2,4,2] +[0,2,-1,3,0,3] [2,2,1,3,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,2,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_38.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_38.png new file mode 100644 index 00000000..b808ef08 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_38.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_38.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_38.txt new file mode 100644 index 00000000..7f5e8e3e --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_38.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,1,1,2,1] +[1,1,2,1,0,2] [2,1,3,1,2,2] [3,1,3,2,4,2] +[0,2,-1,2,0,3] [2,2,1,3,3,3] [3,2,2,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,2,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_39.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_39.png new file mode 100644 index 00000000..fcaec4f9 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_39.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_39.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_39.txt new file mode 100644 index 00000000..e6297e20 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_39.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,1,1,2,1] +[1,1,2,1,1,2] [2,1,3,1,2,2] [3,1,2,2,4,2] +[0,2,-1,3,0,3] [1,2,0,2,1,3] [2,2,1,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,2,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_4.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_4.png new file mode 100644 index 00000000..afbf4d3e Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_4.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_4.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_4.txt new file mode 100644 index 00000000..85c1ecbc --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_4.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,0,1] [2,0,2,1,3,1] +[0,1,1,1,-1,2] [1,1,0,2,2,2] [2,1,1,1,2,2] [3,1,4,1,2,1] +[0,2,-1,3,0,3] [2,2,3,2,1,3] [3,2,4,2,2,3] +[0,3,1,3,0,4] [1,3,2,3,0,4] [2,3,3,3,1,4] [3,3,4,3,2,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_40.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_40.png new file mode 100644 index 00000000..c2273d42 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_40.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_40.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_40.txt new file mode 100644 index 00000000..eb47311a --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_40.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,1,1,2,1] +[1,1,2,1,1,2] [2,1,3,1,2,2] [3,1,3,2,4,2] +[0,2,-1,2,0,3] [1,2,0,2,1,3] [2,2,1,2,3,3] [3,2,2,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,2,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_41.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_41.png new file mode 100644 index 00000000..fc6bf584 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_41.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_41.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_41.txt new file mode 100644 index 00000000..7d4d5676 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_41.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,1] [2,0,1,1,2,1] [3,0,2,0,4,1] +[0,1,-1,1,1,2] [1,1,2,1,0,1] [2,1,3,1,2,2] [3,1,2,2,3,2] +[0,2,-1,3,0,3] [1,2,0,2,2,3] [2,2,3,2,1,2] [3,2,4,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [2,3,1,3,3,4] [3,3,4,3,2,3] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_42.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_42.png new file mode 100644 index 00000000..f193ab8f Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_42.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_42.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_42.txt new file mode 100644 index 00000000..3e4c6c02 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_42.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,1] [2,0,1,1,2,1] [3,0,2,0,4,1] +[0,1,-1,1,1,2] [1,1,2,1,0,1] [2,1,3,1,2,2] [3,1,2,2,4,2] +[0,2,-1,3,0,3] [1,2,0,2,2,3] [2,2,1,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [2,3,1,3,3,4] [3,3,4,3,2,3] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_43.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_43.png new file mode 100644 index 00000000..d3a125c4 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_43.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_43.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_43.txt new file mode 100644 index 00000000..ed89d2b1 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_43.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,1,1,3,1] +[1,1,0,2,2,2] [3,1,2,2,4,2] +[0,2,-1,3,0,3] [2,2,1,3,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,2,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_44.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_44.png new file mode 100644 index 00000000..3c91b317 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_44.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_44.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_44.txt new file mode 100644 index 00000000..1b2b5e44 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_44.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,1,1,3,1] +[1,1,0,2,2,2] [3,1,3,2,4,2] +[0,2,-1,2,0,3] [2,2,1,3,3,3] [3,2,2,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,2,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_45.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_45.png new file mode 100644 index 00000000..7abea318 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_45.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_45.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_45.txt new file mode 100644 index 00000000..157e2412 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_45.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,1] [2,0,1,1,3,1] [3,0,2,0,4,1] +[0,1,-1,1,1,2] [1,1,0,1,2,2] [3,1,2,2,4,2] +[0,2,-1,3,0,3] [1,2,0,2,2,3] [2,2,1,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [2,3,1,3,3,4] [3,3,4,3,2,3] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_46.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_46.png new file mode 100644 index 00000000..03d8b43b Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_46.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_46.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_46.txt new file mode 100644 index 00000000..36258f81 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_46.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,1,1,3,1] +[1,1,1,2,2,2] [3,1,2,2,4,2] +[0,2,-1,3,0,3] [1,2,0,2,1,3] [2,2,1,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,2,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_47.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_47.png new file mode 100644 index 00000000..d0fdbfdb Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_47.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_47.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_47.txt new file mode 100644 index 00000000..af6529a2 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_47.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,1,1,3,1] +[1,1,1,2,2,2] [3,1,3,2,4,2] +[0,2,-1,2,0,3] [1,2,0,2,1,3] [2,2,1,2,3,3] [3,2,2,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,2,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_48.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_48.png new file mode 100644 index 00000000..32b33417 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_48.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_48.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_48.txt new file mode 100644 index 00000000..65c23896 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_48.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,1,1,3,1] +[1,1,0,2,1,3] [3,1,3,3,4,2] +[0,2,-1,3,0,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,2,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_49.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_49.png new file mode 100644 index 00000000..a459ac8a Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_49.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_49.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_49.txt new file mode 100644 index 00000000..998d3eb2 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_49.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,2,1,3,1] +[1,1,1,2,2,2] [2,1,1,1,2,2] [3,1,2,1,4,2] +[0,2,-1,3,0,3] [1,2,0,2,1,3] [2,2,1,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,2,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_5.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_5.png new file mode 100644 index 00000000..1062e420 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_5.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_5.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_5.txt new file mode 100644 index 00000000..9e8ed7e1 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_5.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,0,1] [2,0,1,1,3,1] +[0,1,1,1,-1,2] [1,1,0,2,2,2] [3,1,4,1,2,2] +[0,2,-1,3,0,3] [2,2,3,2,1,3] [3,2,4,2,2,3] +[0,3,1,3,0,4] [1,3,2,3,0,4] [2,3,3,3,1,4] [3,3,4,3,2,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_50.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_50.png new file mode 100644 index 00000000..adbad183 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_50.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_50.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_50.txt new file mode 100644 index 00000000..56d144e9 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_50.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,2] [2,0,2,2,3,1] +[3,1,2,2,4,2] +[0,2,-1,3,0,3] [1,2,0,2,1,3] [2,2,1,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,2,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_51.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_51.png new file mode 100644 index 00000000..1f6ff28e Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_51.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_51.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_51.txt new file mode 100644 index 00000000..6cf6db0b --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_51.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,2] [2,0,2,2,3,1] +[3,1,3,2,4,2] +[0,2,-1,2,0,3] [1,2,0,2,1,3] [2,2,1,2,3,3] [3,2,2,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,2,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_52.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_52.png new file mode 100644 index 00000000..48295157 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_52.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_52.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_52.txt new file mode 100644 index 00000000..af4ff95a --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_52.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,2] [1,0,2,0,1,1] [2,0,1,1,2,2] +[1,1,1,2,2,2] +[0,2,-1,3,0,3] [1,2,0,2,1,3] [2,2,1,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,2,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_53.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_53.png new file mode 100644 index 00000000..d92f56e9 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_53.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_53.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_53.txt new file mode 100644 index 00000000..72e1eca9 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_53.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,1] [2,0,1,1,2,1] [3,0,2,0,3,1] +[1,1,2,1,0,2] [2,1,3,1,2,2] [3,1,2,2,3,2] +[0,2,-1,3,0,3] [2,2,3,2,1,3] [3,2,4,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,3,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_54.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_54.png new file mode 100644 index 00000000..3fa9eb49 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_54.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_54.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_54.txt new file mode 100644 index 00000000..0bf224ef --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_54.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,1] [2,0,1,1,2,1] [3,0,2,0,3,1] +[1,1,2,1,0,2] [2,1,3,1,2,2] [3,1,2,2,4,2] +[0,2,-1,3,0,3] [2,2,1,3,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,3,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_55.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_55.png new file mode 100644 index 00000000..72498778 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_55.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_55.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_55.txt new file mode 100644 index 00000000..a3f61941 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_55.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,1] [2,0,1,1,2,1] [3,0,2,0,3,1] +[1,1,2,1,0,2] [2,1,3,1,2,2] [3,1,3,2,4,2] +[0,2,-1,2,0,3] [2,2,1,3,3,3] [3,2,2,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,3,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_56.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_56.png new file mode 100644 index 00000000..b571e61c Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_56.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_56.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_56.txt new file mode 100644 index 00000000..76faacdf --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_56.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,1] [2,0,1,1,2,1] [3,0,2,0,3,1] +[1,1,2,1,1,2] [2,1,3,1,2,2] [3,1,2,2,3,2] +[0,2,-1,3,0,3] [1,2,0,2,1,3] [2,2,3,2,1,2] [3,2,4,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,3,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_57.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_57.png new file mode 100644 index 00000000..2991c774 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_57.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_57.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_57.txt new file mode 100644 index 00000000..13bf6020 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_57.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,1] [2,0,1,1,2,1] [3,0,2,0,3,1] +[1,1,2,1,1,2] [2,1,3,1,2,2] [3,1,2,2,4,2] +[0,2,-1,3,0,3] [1,2,0,2,1,3] [2,2,1,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,3,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_58.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_58.png new file mode 100644 index 00000000..c8867b33 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_58.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_58.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_58.txt new file mode 100644 index 00000000..88ec70d9 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_58.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,1] [2,0,1,1,2,1] [3,0,2,0,3,1] +[1,1,2,1,1,2] [2,1,3,1,2,2] [3,1,3,2,4,2] +[0,2,-1,2,0,3] [1,2,0,2,1,3] [2,2,1,2,3,3] [3,2,2,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,3,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_59.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_59.png new file mode 100644 index 00000000..cf3554e6 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_59.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_59.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_59.txt new file mode 100644 index 00000000..f298704c --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_59.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,1] [2,0,1,1,3,1] [3,0,2,0,3,1] +[1,1,0,2,2,2] [3,1,2,2,3,2] +[0,2,-1,3,0,3] [2,2,3,2,1,3] [3,2,4,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,3,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_6.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_6.png new file mode 100644 index 00000000..cc84035b Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_6.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_6.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_6.txt new file mode 100644 index 00000000..f52647b4 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_6.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,0,1] [2,0,1,1,2,1] [3,0,2,0,3,1] +[0,1,1,1,-1,2] [1,1,2,1,0,2] [2,1,3,1,2,2] [3,1,4,1,2,2] +[0,2,-1,3,0,3] [2,2,3,2,1,3] [3,2,4,2,2,3] +[0,3,1,3,0,4] [1,3,2,3,0,4] [2,3,3,3,1,4] [3,3,4,3,3,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_60.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_60.png new file mode 100644 index 00000000..db961a0f Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_60.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_60.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_60.txt new file mode 100644 index 00000000..c465d2fe --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_60.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,1] [2,0,1,1,3,1] [3,0,2,0,3,1] +[1,1,0,2,2,2] [3,1,2,2,4,2] +[0,2,-1,3,0,3] [2,2,1,3,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,3,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_61.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_61.png new file mode 100644 index 00000000..5829985f Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_61.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_61.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_61.txt new file mode 100644 index 00000000..6b02e39d --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_61.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,1] [2,0,1,1,3,1] [3,0,2,0,3,1] +[1,1,0,2,2,2] [3,1,3,2,4,2] +[0,2,-1,2,0,3] [2,2,1,3,3,3] [3,2,2,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,3,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_63.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_63.png new file mode 100644 index 00000000..5a0a877d Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_63.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_63.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_63.txt new file mode 100644 index 00000000..7d3bdeca --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_63.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,1] [2,0,1,1,3,1] [3,0,2,0,3,1] +[1,1,1,2,2,2] [3,1,2,2,4,2] +[0,2,-1,3,0,3] [1,2,0,2,1,3] [2,2,1,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,3,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_64.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_64.png new file mode 100644 index 00000000..ccd9717a Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_64.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_64.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_64.txt new file mode 100644 index 00000000..4284b836 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_64.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,1] [2,0,1,1,3,1] [3,0,2,0,3,1] +[1,1,1,2,2,2] [3,1,3,2,4,2] +[0,2,-1,2,0,3] [1,2,0,2,1,3] [2,2,1,2,3,3] [3,2,2,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,3,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_65.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_65.png new file mode 100644 index 00000000..982fce9c Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_65.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_65.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_65.txt new file mode 100644 index 00000000..ffe1407d --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_65.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,1] [2,0,1,1,3,1] [3,0,2,0,3,1] +[1,1,0,2,1,3] [3,1,3,3,4,2] +[0,2,-1,3,0,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,3,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_66.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_66.png new file mode 100644 index 00000000..f401f346 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_66.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_66.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_66.txt new file mode 100644 index 00000000..12904e0e --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_66.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,1] [2,0,1,1,3,1] [3,0,2,0,3,1] +[0,1,-1,2,1,2] [1,1,2,1,0,1] [2,1,1,2,3,2] [3,1,4,1,2,1] +[0,2,-1,3,0,3] [1,2,2,2,0,2] [2,2,1,3,3,3] [3,2,4,2,2,2] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,3,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_67.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_67.png new file mode 100644 index 00000000..4d74aafe Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_67.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_67.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_67.txt new file mode 100644 index 00000000..4a292881 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_67.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,1] [2,0,2,1,3,1] [3,0,2,0,3,1] +[1,1,0,2,2,2] [2,1,1,1,2,2] [3,1,2,1,3,2] +[0,2,-1,3,0,3] [2,2,3,2,1,3] [3,2,4,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,3,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_68.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_68.png new file mode 100644 index 00000000..0394b142 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_68.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_68.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_68.txt new file mode 100644 index 00000000..98c0444c --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_68.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,1] [2,0,2,1,3,1] [3,0,2,0,3,1] +[1,1,0,2,2,2] [2,1,1,1,2,2] [3,1,2,1,4,2] +[0,2,-1,3,0,3] [2,2,1,3,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,3,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_7.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_7.png new file mode 100644 index 00000000..c7dc2e4e Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_7.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_7.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_7.txt new file mode 100644 index 00000000..ad650145 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_7.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,0,1] [2,0,1,1,2,1] [3,0,2,0,3,1] +[0,1,1,1,-1,2] [1,1,2,1,1,2] [2,1,3,1,2,2] [3,1,4,1,2,2] +[0,2,-1,3,0,3] [1,2,0,2,1,3] [2,2,3,2,1,2] [3,2,4,2,2,3] +[0,3,1,3,0,4] [1,3,2,3,0,4] [2,3,3,3,1,4] [3,3,4,3,3,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_70.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_70.png new file mode 100644 index 00000000..866cb6fe Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_70.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_70.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_70.txt new file mode 100644 index 00000000..74c32eb4 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_70.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,1] [2,0,1,1,2,2] [3,0,2,0,3,2] +[1,1,0,2,2,2] +[0,2,-1,3,0,3] [2,2,3,2,1,3] [3,2,4,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,3,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_71.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_71.png new file mode 100644 index 00000000..01edf634 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_71.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_71.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_71.txt new file mode 100644 index 00000000..aa4ae19d --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_71.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,2] [2,0,2,2,3,1] [3,0,2,0,3,1] +[3,1,2,2,3,2] +[0,2,-1,3,0,3] [1,2,0,2,1,3] [2,2,3,2,1,2] [3,2,4,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,3,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_72.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_72.png new file mode 100644 index 00000000..68bc35ad Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_72.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_72.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_72.txt new file mode 100644 index 00000000..5b3de1b4 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_72.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,2] [2,0,2,2,3,1] [3,0,2,0,3,1] +[3,1,2,2,4,2] +[0,2,-1,3,0,3] [1,2,0,2,1,3] [2,2,1,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,3,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_73.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_73.png new file mode 100644 index 00000000..bded9f5a Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_73.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_73.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_73.txt new file mode 100644 index 00000000..4184a8da --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_73.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,2] [2,0,2,2,3,1] [3,0,2,0,3,1] +[3,1,3,2,4,2] +[0,2,-1,2,0,3] [1,2,0,2,1,3] [2,2,1,2,3,3] [3,2,2,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,3,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_74.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_74.png new file mode 100644 index 00000000..cd2a9989 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_74.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_74.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_74.txt new file mode 100644 index 00000000..6da0b08e --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_74.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,1,1,2,2] +[1,1,0,2,1,3] [3,1,2,2,3,2] +[0,2,-1,3,0,3] [2,2,3,2,2,4] [3,2,4,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,3,5] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_75.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_75.png new file mode 100644 index 00000000..800db4d7 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_75.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_75.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_75.txt new file mode 100644 index 00000000..55991345 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_75.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,1] [1,0,2,0,1,1] [2,0,1,1,2,2] +[0,1,-1,1,0,2] [1,1,0,1,0,2] [3,1,2,2,3,3] +[0,2,0,3,1,3] [2,2,2,4,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,3,5] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_76.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_76.png new file mode 100644 index 00000000..002e5f92 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_76.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_76.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_76.txt new file mode 100644 index 00000000..0a981792 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_76.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,1,1,2,2] +[1,1,0,2,1,3] [3,1,2,2,4,2] +[0,2,-1,3,0,3] [2,2,2,4,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,3,5] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_77.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_77.png new file mode 100644 index 00000000..bc775fe4 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_77.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_77.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_77.txt new file mode 100644 index 00000000..8d57c761 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_77.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,1,1,2,2] +[1,1,0,2,1,3] [3,1,3,2,4,2] +[0,2,-1,2,0,3] [2,2,2,4,3,3] [3,2,2,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,3,5] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_78.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_78.png new file mode 100644 index 00000000..53d42862 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_78.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_78.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_78.txt new file mode 100644 index 00000000..12ad8dba --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_78.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,2] [1,0,2,0,1,1] [2,0,1,1,2,1] +[1,1,2,1,1,2] [2,1,3,1,2,2] [3,1,2,2,3,3] +[0,2,-1,3,0,3] [1,2,0,2,1,3] [2,2,1,2,2,4] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,3,5] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_79.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_79.png new file mode 100644 index 00000000..f768700f Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_79.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_79.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_79.txt new file mode 100644 index 00000000..da04863f --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_79.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,2] [1,0,2,0,1,1] [2,0,1,1,3,1] +[1,1,1,2,2,2] [3,1,2,2,3,3] +[0,2,-1,3,0,3] [1,2,0,2,1,3] [2,2,1,2,2,4] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,3,5] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_8.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_8.png new file mode 100644 index 00000000..300d5df4 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_8.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_8.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_8.txt new file mode 100644 index 00000000..e6f24c45 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_8.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,0,1] [2,0,1,1,3,1] [3,0,2,0,3,1] +[0,1,1,1,-1,2] [1,1,0,2,2,2] [3,1,4,1,2,2] +[0,2,-1,3,0,3] [2,2,3,2,1,3] [3,2,4,2,2,3] +[0,3,1,3,0,4] [1,3,2,3,0,4] [2,3,3,3,1,4] [3,3,4,3,3,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_80.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_80.png new file mode 100644 index 00000000..c5440913 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_80.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_80.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_80.txt new file mode 100644 index 00000000..bdeaf207 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_80.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,2] [1,0,2,0,1,1] [2,0,1,1,3,1] +[1,1,0,2,1,3] [3,1,2,2,3,2] +[0,2,-1,2,0,3] [2,2,2,4,3,3] [3,2,2,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,3,5] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_81.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_81.png new file mode 100644 index 00000000..a96cb819 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_81.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_81.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_81.txt new file mode 100644 index 00000000..3e6c0103 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_81.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,2] [1,0,2,0,1,2] [2,0,2,2,3,1] +[3,1,2,2,3,3] +[0,2,-1,3,0,3] [1,2,0,2,1,3] [2,2,1,2,2,4] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,3,5] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_82.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_82.png new file mode 100644 index 00000000..22e44d3b Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_82.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_82.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_82.txt new file mode 100644 index 00000000..4ad32a94 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_82.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,2] [1,0,2,0,1,1] [2,0,2,1,3,1] +[1,1,1,2,2,2] [2,1,1,1,2,2] [3,1,2,1,3,3] +[0,2,-1,3,0,3] [1,2,0,2,1,3] [2,2,1,2,2,4] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,3,5] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_83.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_83.png new file mode 100644 index 00000000..b06385a3 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_83.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_83.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_83.txt new file mode 100644 index 00000000..322580e5 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_83.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,2] [1,0,2,0,1,1] [2,0,2,1,3,1] +[1,1,0,2,1,3] [2,1,1,1,2,2] [3,1,2,1,3,2] +[0,2,-1,2,0,3] [2,2,2,4,3,3] [3,2,2,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,3,5] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_84.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_84.png new file mode 100644 index 00000000..3423fd73 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_84.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_84.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_84.txt new file mode 100644 index 00000000..ec8a81cb --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_84.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,0,1,2,1] [2,0,3,0,1,0] [3,0,2,1,4,1] +[0,1,1,1,-1,1] [1,1,0,2,2,2] [2,1,3,1,1,1] [3,1,2,2,3,2] +[0,2,-1,3,0,3] [2,2,3,2,1,3] [3,2,4,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,2,4] [3,3,4,3,2,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_85.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_85.png new file mode 100644 index 00000000..07207c19 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_85.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_85.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_85.txt new file mode 100644 index 00000000..a8a1ef00 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_85.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,0,1,2,1] [2,0,3,0,1,0] [3,0,2,1,4,1] +[0,1,1,1,-1,1] [1,1,0,2,2,2] [2,1,3,1,1,1] [3,1,2,2,4,2] +[0,2,-1,3,0,3] [2,2,1,3,3,3] +[0,3,1,3,0,4] [1,3,0,4,2,4] [3,3,4,3,2,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_86.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_86.png new file mode 100644 index 00000000..fff73796 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_86.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_86.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_86.txt new file mode 100644 index 00000000..b8280264 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_86.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,0,1,2,1] [2,0,3,0,1,0] [3,0,2,1,4,1] +[0,1,1,1,-1,1] [1,1,0,2,2,2] [2,1,3,1,1,1] [3,1,3,2,4,2] +[0,2,-1,2,0,3] [2,2,1,3,3,3] [3,2,2,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,2,4] [3,3,4,3,2,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_87.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_87.png new file mode 100644 index 00000000..5d33a0a1 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_87.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_87.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_87.txt new file mode 100644 index 00000000..b1027af7 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_87.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,0,1,2,1] [2,0,3,0,1,0] [3,0,2,1,4,1] +[0,1,1,1,-1,1] [1,1,0,2,1,3] [2,1,3,1,1,1] [3,1,3,3,4,2] +[0,2,-1,3,0,3] +[0,3,1,3,0,4] [1,3,0,4,2,4] [3,3,4,3,2,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_88.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_88.png new file mode 100644 index 00000000..cbaab189 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_88.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_88.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_88.txt new file mode 100644 index 00000000..c120a98e --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_88.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,0,1,2,1] [2,0,1,0,3,1] +[0,1,1,1,-1,2] [1,1,0,2,2,2] [2,1,1,1,3,2] [3,1,4,1,2,1] +[0,2,-1,3,0,3] [2,2,1,3,3,3] [3,2,4,2,2,2] +[0,3,1,3,0,4] [1,3,0,4,2,4] [3,3,4,3,2,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_9.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_9.png new file mode 100644 index 00000000..76fe17d7 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_9.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_9.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_9.txt new file mode 100644 index 00000000..e129f8c4 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_9.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,0,1] [2,0,1,1,3,1] [3,0,2,0,3,1] +[0,1,1,1,-1,2] [1,1,1,2,2,2] [3,1,4,1,2,2] +[0,2,-1,3,0,3] [1,2,0,2,1,3] [2,2,3,2,1,2] [3,2,4,2,2,3] +[0,3,1,3,0,4] [1,3,2,3,0,4] [2,3,3,3,1,4] [3,3,4,3,3,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_90.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_90.png new file mode 100644 index 00000000..b3267130 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_90.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_90.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_90.txt new file mode 100644 index 00000000..4f919557 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_90.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,0,1,2,1] [2,0,3,0,1,0] [3,0,2,1,4,1] +[0,1,1,1,-1,1] [1,1,0,2,2,2] [2,1,3,1,1,1] [3,1,2,2,4,2] +[0,2,-1,3,0,3] [2,2,2,3,3,3] +[0,3,1,3,0,4] [1,3,0,4,2,4] [2,3,1,3,2,4] [3,3,4,3,2,3] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_91.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_91.png new file mode 100644 index 00000000..009b0176 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_91.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_91.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_91.txt new file mode 100644 index 00000000..1c55320c --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_91.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,0,1,2,1] [2,0,1,0,3,1] +[0,1,1,1,-1,2] [1,1,0,2,2,2] [2,1,1,1,3,2] [3,1,4,1,2,1] +[0,2,-1,3,0,3] [2,2,2,3,3,3] [3,2,4,2,2,2] +[0,3,1,3,0,4] [1,3,0,4,2,4] [2,3,1,3,2,4] [3,3,4,3,2,3] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_92.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_92.png new file mode 100644 index 00000000..a1efb140 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_92.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_92.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_92.txt new file mode 100644 index 00000000..fcc2c6e6 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_92.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,0,1] [2,0,1,1,3,1] [3,0,2,0,4,1] +[0,1,1,1,-1,1] [1,1,0,2,2,2] [3,1,2,2,3,2] +[0,2,-1,3,1,3] [2,2,3,2,1,3] [3,2,4,2,3,3] +[1,3,2,3,0,4] [2,3,1,4,3,4] [3,3,2,3,4,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_93.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_93.png new file mode 100644 index 00000000..43667df6 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_93.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_93.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_93.txt new file mode 100644 index 00000000..8a49ca7b --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_93.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,0,1] [2,0,1,1,3,1] [3,0,2,0,4,1] +[0,1,1,1,-1,1] [1,1,0,2,2,2] [3,1,2,2,4,2] +[0,2,-1,3,1,3] [2,2,1,3,3,3] +[1,3,2,3,0,4] [2,3,1,4,3,4] [3,3,2,3,4,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_94.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_94.png new file mode 100644 index 00000000..35448d7e Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_94.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_94.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_94.txt new file mode 100644 index 00000000..8226fbbb --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_94.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,0,1] [2,0,1,1,3,1] [3,0,2,0,4,1] +[0,1,1,1,-1,1] [1,1,1,2,2,2] [3,1,2,2,3,2] +[0,2,-1,3,1,3] [1,2,0,2,1,3] [2,2,3,2,1,2] [3,2,4,2,3,3] +[1,3,2,3,0,4] [2,3,1,4,3,4] [3,3,2,3,4,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_95.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_95.png new file mode 100644 index 00000000..72b838f0 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_95.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_95.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_95.txt new file mode 100644 index 00000000..7395f6a0 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_95.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,0,1,2,1] [2,0,3,0,1,0] [3,0,2,1,4,1] +[0,1,1,1,-1,1] [1,1,1,2,2,2] [2,1,3,1,1,1] [3,1,3,2,4,2] +[0,2,1,2,0,3] [1,2,2,2,1,3] [2,2,3,2,2,3] [3,2,4,2,3,3] +[0,3,-1,3,0,4] [1,3,0,3,0,4] [2,3,1,3,2,4] [3,3,2,3,2,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_96.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_96.png new file mode 100644 index 00000000..dedb93d9 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_96.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_96.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_96.txt new file mode 100644 index 00000000..68620e0a --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_96.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,0,1] [1,0,2,0,1,1] [2,0,3,0,2,1] [3,0,4,0,3,1] +[0,1,1,1,0,2] [1,1,2,1,1,2] [2,1,3,1,2,2] [3,1,4,1,3,2] +[0,2,-1,2,0,3] [1,2,0,2,1,3] [2,2,1,2,2,3] [3,2,2,2,3,3] +[0,3,-1,3,0,4] [1,3,0,3,1,4] [2,3,1,3,2,4] [3,3,2,3,3,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_98.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_98.png new file mode 100644 index 00000000..4fa40ac8 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_98.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_98.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_98.txt new file mode 100644 index 00000000..f4289c67 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_98.txt @@ -0,0 +1,3 @@ +CHECKER 4 4 +[0,0,1,0,0,2] [1,0,2,0,1,2] [2,0,3,0,2,2] [3,0,4,0,3,2] +[0,2,-1,2,0,4] [1,2,0,2,1,4] [2,2,1,2,2,4] [3,2,2,2,3,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_99.png b/extensions/fablabchemnitz/bobbinlace/templates/4x4_99.png new file mode 100644 index 00000000..1361e58a Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/4x4_99.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/4x4_99.txt b/extensions/fablabchemnitz/bobbinlace/templates/4x4_99.txt new file mode 100644 index 00000000..d49836e1 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/4x4_99.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,2] [2,0,2,2,3,1] +[3,1,2,2,4,2] +[0,2,-1,3,0,4] [1,2,0,2,1,4] [2,2,1,2,3,3] +[3,3,2,4,4,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/basic.png b/extensions/fablabchemnitz/bobbinlace/templates/basic.png new file mode 100644 index 00000000..c35eaf37 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/basic.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/basic.txt b/extensions/fablabchemnitz/bobbinlace/templates/basic.txt new file mode 100644 index 00000000..ee8ac26b --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/basic.txt @@ -0,0 +1,3 @@ +CHECKER 2 2 +[0,0,-1,1,1,1] +[1,1,0,2,2,2] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/bias.png b/extensions/fablabchemnitz/bobbinlace/templates/bias.png new file mode 100644 index 00000000..53f5b82a Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/bias.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/bias.txt b/extensions/fablabchemnitz/bobbinlace/templates/bias.txt new file mode 100644 index 00000000..1fab8f8e --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/bias.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,1,1,2,1] +[1,1,2,1,0,2] [2,1,3,1,2,2] [3,1,2,2,3,2] +[0,2,-1,3,0,3] [2,2,3,2,1,3] [3,2,4,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,2,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/devonshire.png b/extensions/fablabchemnitz/bobbinlace/templates/devonshire.png new file mode 100644 index 00000000..f4250322 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/devonshire.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/devonshire.txt b/extensions/fablabchemnitz/bobbinlace/templates/devonshire.txt new file mode 100644 index 00000000..4a69e816 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/devonshire.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,3,0,1,1] [3,0,4,0,3,1] +[1,1,1,2,2,2] [3,1,3,2,4,2] +[0,2,-1,2,1,3] [1,2,0,2,1,3] [2,2,1,2,3,3] [3,2,2,2,3,3] +[1,3,0,4,1,4] [3,3,2,4,3,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/kat.png b/extensions/fablabchemnitz/bobbinlace/templates/kat.png new file mode 100644 index 00000000..1b7b5ce2 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/kat.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/kat.txt b/extensions/fablabchemnitz/bobbinlace/templates/kat.txt new file mode 100644 index 00000000..9f854ccd --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/kat.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,-1,1,0,2] [2,0,2,2,3,1] +[3,1,2,2,4,2] +[0,2,0,4,1,3] [2,2,1,3,2,4] +[1,3,0,4,2,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/pinwheel.png b/extensions/fablabchemnitz/bobbinlace/templates/pinwheel.png new file mode 100644 index 00000000..a41c6171 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/pinwheel.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/pinwheel.txt b/extensions/fablabchemnitz/bobbinlace/templates/pinwheel.txt new file mode 100644 index 00000000..9dfed1d6 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/pinwheel.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,1] [1,0,2,0,1,1] [2,0,1,1,3,1] +[1,1,0,2,2,2] [3,1,3,2,4,2] +[0,2,-1,2,1,3] [2,2,1,3,3,3] [3,2,2,2,3,3] +[1,3,0,4,1,4] [3,3,2,4,4,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/rose.png b/extensions/fablabchemnitz/bobbinlace/templates/rose.png new file mode 100644 index 00000000..fc723ede Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/rose.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/rose.txt b/extensions/fablabchemnitz/bobbinlace/templates/rose.txt new file mode 100644 index 00000000..f2ea2211 --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/rose.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,1] [2,0,1,1,3,1] [3,0,2,0,3,1] +[1,1,1,2,2,2] [3,1,2,2,3,2] +[0,2,-1,3,1,3] [1,2,0,2,1,3] [2,2,3,2,1,2] [3,2,4,2,3,3] +[1,3,0,4,1,4] [3,3,3,4,4,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/rose_var1.png b/extensions/fablabchemnitz/bobbinlace/templates/rose_var1.png new file mode 100644 index 00000000..1ad78ece Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/rose_var1.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/rose_var1.txt b/extensions/fablabchemnitz/bobbinlace/templates/rose_var1.txt new file mode 100644 index 00000000..e29b28fe --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/rose_var1.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,1] [2,0,1,1,3,1] [3,0,2,0,3,1] +[1,1,1,2,2,2] [3,1,2,2,3,2] +[0,2,-1,3,0,3] [1,2,0,2,1,3] [2,2,3,2,1,2] [3,2,4,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,3,4] diff --git a/extensions/fablabchemnitz/bobbinlace/templates/rose_var2.png b/extensions/fablabchemnitz/bobbinlace/templates/rose_var2.png new file mode 100644 index 00000000..d4256449 Binary files /dev/null and b/extensions/fablabchemnitz/bobbinlace/templates/rose_var2.png differ diff --git a/extensions/fablabchemnitz/bobbinlace/templates/rose_var2.txt b/extensions/fablabchemnitz/bobbinlace/templates/rose_var2.txt new file mode 100644 index 00000000..f1fca15b --- /dev/null +++ b/extensions/fablabchemnitz/bobbinlace/templates/rose_var2.txt @@ -0,0 +1,5 @@ +CHECKER 4 4 +[0,0,1,0,-1,0] [1,0,2,0,1,1] [2,0,2,1,3,1] [3,0,2,0,3,1] +[1,1,1,2,2,2] [2,1,1,1,2,2] [3,1,2,1,3,2] +[0,2,-1,3,0,3] [1,2,0,2,1,3] [2,2,3,2,1,2] [3,2,4,2,3,3] +[0,3,1,3,0,4] [1,3,0,4,1,4] [3,3,4,3,3,4] diff --git a/extensions/fablabchemnitz/boukamp_code/bouwkamp_code.inx b/extensions/fablabchemnitz/boukamp_code/bouwkamp_code.inx new file mode 100644 index 00000000..40e23467 --- /dev/null +++ b/extensions/fablabchemnitz/boukamp_code/bouwkamp_code.inx @@ -0,0 +1,28 @@ + + + Bouwkamp Code + fablabchemnitz.de.bouwkamp + + + 21, 112, 112, [50, 35, 27], [8, 19], [15, 17, 11], [6, 24], [29, 25, 9, 2], [7, 18], [16], [42], [4, 37], [33] + true + + + + + + + all + + + + + + + + diff --git a/extensions/fablabchemnitz/boukamp_code/bouwkamp_code.py b/extensions/fablabchemnitz/boukamp_code/bouwkamp_code.py new file mode 100644 index 00000000..8493f916 --- /dev/null +++ b/extensions/fablabchemnitz/boukamp_code/bouwkamp_code.py @@ -0,0 +1,163 @@ +#!/usr/bin/env python3 +''' +BSD 3-Clause License + +Copyright (c) 2019, Pascal Wagler +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +This Inkscape extension allows you to generate squared squares and squared rectangles from +Bouwkamp codes and table codes. +''' + +import re +import inkex +from lxml import etree + +class BouwkampCode(inkex.EffectExtension): + """ + This Inkscape extension allows you to generate squared squares and squared rectangles from + Bouwkamp codes and table codes. + """ + + def add_arguments(self, pars): + pars.add_argument('--tab') + pars.add_argument('--bouwkamp_code', default='21, 112, 112, [50, 35, 27], [8, 19], [15, 17, 11], [6, 24], [29, 25, 9, 2], [7, 18], [16], [42], [4, 37], [33]', help='The Bouwkamp code.' + ) + pars.add_argument('--wrap_in_group', type=inkex.Boolean, default=True, help='Should the generated items be wrapped inside a group.' + ) + + def effect(self): + # compute center of the view + center = self.svg.namedview.center + + # create the group that holds all the elements + container = self.svg.get_current_layer() + if self.options.wrap_in_group: + group_attributes = { + inkex.addNS('label', 'inkscape'): 'BouwkampSquares', + 'transform': 'translate' + str(center) + } + group = etree.SubElement(self.svg.get_current_layer(), 'g', group_attributes) + container = group + + # parse the bouwkamp code string as a list + bouwkamp_code = self.parse_bouwkamp_code_from_string(self.options.bouwkamp_code) + + # show an error message and exit if the bouwkamp code is invalid + try: + self.exception_on_invalid_bouwkamp_code(bouwkamp_code) + except ValueError as exception: + inkex.errormsg(str(exception)) + return + + # draw the bouwkamp code + self.draw_bouwkamp_code(container, center, bouwkamp_code) + + @staticmethod + def exception_on_invalid_bouwkamp_code(bouwkamp_code): + """ + Raises a ValueError if the passed list is not a valid Bouwkamp code. + """ + + if not bouwkamp_code: #len(bouwkamp_code) == 0 + raise ValueError('Error: Invalid Bouwkamp code.\n\nThe Bouwkamp code is emtpy. ' + + 'Please specify a valid Bouwkamp code.') + + if len(bouwkamp_code) - 3 != bouwkamp_code[0]: + raise ValueError('Error: Invalid Bouwkamp code.\n\nThe Bouwkamp code has the wrong ' + + 'length. The first number needs to specify how many squares ' + + 'should be drawn.') + + @staticmethod + def parse_bouwkamp_code_from_string(bouwkamp_code_string): + """ + Converts a Bouwkamp code string into a list of integers. Any parentheses, commas and + spaces are stripped. Extended Bouwkamp codes are not supported. + """ + + # replace every character (except numbers) with a space + text = re.sub('[^0-9]', ' ', bouwkamp_code_string) + # collapse all spaces to just one space + text = re.sub(' {1,}', ' ', text).strip() + # split the string into small strings and convert them to integers + numbers = [int(x) for x in text.split(" ")] + + return numbers + + def draw_bouwkamp_code(self, parent, center, bouwkamp_code): + """ + Draws the passed Bouwkamp code (a list of integers) with rectangles. + """ + + order = bouwkamp_code[0] + width = bouwkamp_code[1] + # height = bouwkamp_code[2] + code = bouwkamp_code[3:] # cut the first three elements away + + i = 0 + helper = [0] * 900 + + for rectangle in range(0, order): + i = 0 + for j in range(1, width): + if helper[j] < helper[i]: + i = j + + position = (i, helper[i]) + dimension = (code[rectangle], code[rectangle]) + self.draw_rectangle(position, dimension, parent, center) + + for j in range(0, code[rectangle]): + helper[i+j] += code[rectangle] + + def draw_rectangle(self, position, dimension, parent, center): + rectangle_style = { + 'opacity': '1', + 'stroke': '#000000', + 'stroke-width': str(self.svg.unittouu('2px')), + 'fill': '#FFFFFF' + } + + transform = "" + if not self.options.wrap_in_group: + transform = 'translate' + str(center) + + rectangle_attributes = { + 'transform': transform, + 'style': str(inkex.Style(rectangle_style)), + inkex.addNS('label', 'inkscape'): "Rectangle "+str(dimension[0]), + 'x': str(position[0]), + 'y': str(position[1]), + 'width': str(dimension[0]), + 'height': str(dimension[1]) + } + + etree.SubElement(parent, inkex.addNS('rect', 'svg'), rectangle_attributes) + +if __name__ == '__main__': + BouwkampCode().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/bounding_box/bounding_box.inx b/extensions/fablabchemnitz/bounding_box/bounding_box.inx new file mode 100644 index 00000000..9f10668b --- /dev/null +++ b/extensions/fablabchemnitz/bounding_box/bounding_box.inx @@ -0,0 +1,21 @@ + + + Bounding Box + fablabchemnitz.de.bounding_box + + 0.0 + true + false + true + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/bounding_box/bounding_box.py b/extensions/fablabchemnitz/bounding_box/bounding_box.py new file mode 100644 index 00000000..216e59a7 --- /dev/null +++ b/extensions/fablabchemnitz/bounding_box/bounding_box.py @@ -0,0 +1,50 @@ +#!/usr/bin/env python3 + +import inkex +import math +from lxml import etree + +class BoundingBox(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument('--offset', type=float, default=0.0, help='Offset from object (all directions)') + pars.add_argument('--box', type=inkex.Boolean, default=0.0, help='Draw boxes') + pars.add_argument('--circle', type=inkex.Boolean, default=0.0, help='Draw circles') + pars.add_argument('--split', type = inkex.Boolean, default = True, help = 'Handle selection as group') + + def drawBBox(self, bbox): + if self.options.box: + attribs = { + 'style' : str(inkex.Style({'stroke':'#ff0000','stroke-width' : '1','fill':'none'})), + 'x' : str(bbox.left - self.options.offset), + 'y' : str(bbox.top - self.options.offset), + 'width' : str(bbox.width + 2 * self.options.offset), + 'height': str(bbox.height + 2 * self.options.offset), + } + etree.SubElement(self.svg.get_current_layer(), inkex.addNS('rect','svg'), attribs) + + if self.options.circle: + attribs = { + 'style': str(inkex.Style({'stroke':'#ff0000','stroke-width' : '1','fill':'none'})), + 'cx' : str(bbox.center_x), + 'cy' : str(bbox.center_y), + #'r' : str(bbox.width / 2 + self.options.offset), + 'r' : str(math.sqrt((bbox.width + 2 * self.options.offset)* (bbox.width + 2 * self.options.offset) + (bbox.height + 2 * self.options.offset) * (bbox.height + 2 * self.options.offset)) / 2), + } + etree.SubElement(self.svg.get_current_layer(), inkex.addNS('circle','svg'), attribs) + + def effect(self): + if len(self.svg.selected) > 0: + if self.options.split is False: + for element in self.svg.selected.values(): + self.drawBBox(element.bounding_box()) + else: + #self.drawBBox(self.svg.get_selected_bbox()) #works for InkScape (1:1.0+devel+202008292235+eff2292935) @ Linux and for Windows (but with deprecation) + self.drawBBox(self.svg.selection.bounding_box()) #works for InkScape 1.1dev (9b1fc87, 2020-08-27)) @ Windows + + else: + inkex.errormsg('Please select some objects first.') + return + +if __name__ == '__main__': + BoundingBox().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/box_maker_conical/box_maker_conical.inx b/extensions/fablabchemnitz/box_maker_conical/box_maker_conical.inx new file mode 100644 index 00000000..910b63ac --- /dev/null +++ b/extensions/fablabchemnitz/box_maker_conical/box_maker_conical.inx @@ -0,0 +1,34 @@ + + + Box Maker - Conical + fablabchemnitz.de.box_maker_conical + + + + + + + + + + + + + 3.0 + 100.0 + 150.0 + 50.0 + 1 + true + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/box_maker_conical/box_maker_conical.py b/extensions/fablabchemnitz/box_maker_conical/box_maker_conical.py new file mode 100644 index 00000000..e7cfd8ee --- /dev/null +++ b/extensions/fablabchemnitz/box_maker_conical/box_maker_conical.py @@ -0,0 +1,353 @@ +#!/usr/bin/env python3 + +# We will use the inkex module with the predefined Effect base class. +import inkex +import math +from lxml import etree + +objStyle = str(inkex.Style( + {'stroke': '#000000', + 'stroke-width': 0.1, + 'fill': 'none' + })) + +class inkcape_polar: + def __init__(self, Offset, group): + self.offsetX = Offset[0] + self.offsetY = Offset[1] + self.Path = '' + self.group = group + + def MoveTo(self, r, angle): + #Retourne chaine de caractères donnant la position du point avec des coordonnées polaires + self.Path += ' M ' + str(round(r*math.cos(angle)-self.offsetX, 3)) + ',' + str(round(r*math.sin(angle)-self.offsetY, 3)) + + def LineTo(self, r, angle): + #Retourne chaine de caractères donnant la position du point avec des coordonnées polaires + self.Path += ' L ' + str(round(r*math.cos(angle)-self.offsetX, 3)) + ',' + str(round(r*math.sin(angle)-self.offsetY, 3)) + + def Line(self, r1, angle1, r2, angle2): + #Retourne chaine de caractères donnant la position du point avec des coordonnées polaires + self.Path += ' M ' + str(round(r1*math.cos(angle1)-self.offsetX, 3)) + ',' + str(round(r1*math.sin(angle1)-self.offsetY, 3)) + ' L ' + str(round(r2*math.cos(angle2)-self.offsetX, 3)) + ',' + str(round(r2*math.sin(angle2)-self.offsetY, 3)) + + def GenPath(self): + line_attribs = {'style': objStyle, 'd': self.Path} + etree.SubElement(self.group, inkex.addNS('path', 'svg'), line_attribs) + +class CurvedSurface: + def __init__(self, L1, L2, nombre_pas, angle_par_pas, taille_exacte_pas, nb_parts, epaisseur, parent, xOffset, yOffset): + self.L1 = L1 + self.L2 = L2 + self.nombre_pas = nombre_pas + self.angle_par_pas = angle_par_pas + self.taille_exacte_pas = taille_exacte_pas + self.epaisseur = epaisseur + self.parent = parent + self.OffsetX = xOffset + self.OffsetY = yOffset + self.nb_parts = nb_parts + + def genere_element_1(self, angle): + path = inkcape_polar(self.Offset, self.group) + # Commence par le pas de liaison avec le suivant. Va de (L1, angle+angle_par_pas) vers (L1, angle+angle_par_pas/2) + path.Line(self.L1, angle+self.angle_par_pas, self.L1, angle+self.angle_par_pas/2) + # Puis trait court de (L1+TraiteTraitCourt, angle+angle_par_pas/2) vers (L1-epaisseur, angle+angle_par_pas/2) + path.Line(self.L1+self.TailleTraitCourt, angle+self.angle_par_pas/2, self.L1-self.epaisseur, angle+self.angle_par_pas/2) + # Puis fait la dent inétrieur et va en (L1-epaisseur, angle) + path.LineTo(self.L1-self.epaisseur, angle) + # Puis trait court, va en (L1+TailleTraitCourt, angle) + path.LineTo(self.L1+self.TailleTraitCourt, angle) + path.GenPath() + + def genere_element_1_debut(self, angle): + path = inkcape_polar(self.Offset, self.group) + # Commence par le pas de liaison avec le suivant + # Commence en (L1,0) et finit en (L1, angle/2) + path.Line(self.L1, 0, self.L1, angle/2) + #Se déplace pour se positionner à (self.L1+TailleTraitCourt, angle/2) et termine en (L1-epaisseur, angle /2) + path.Line(self.L1+self.TailleTraitCourt, angle/2, self.L1-self.epaisseur, angle/2) + #Puis trace la dent. Se déplace en (L1-epaisseur, angle*0.75) + path.LineTo(self.L1-self.epaisseur, angle*0.75) + # Puis bord complet : se déplace en (L2+epaisseur,angle*0.75) + path.LineTo(self.L2+self.epaisseur, angle*0.75) + # Puis dent externe, revient en (L2+epaisseur, angle/2) + path.LineTo(self.L2+self.epaisseur, angle*0.5) + # Puis trait de taille TailleTraitcourt --> va en (L2-TailleTraitCourt) avec angle/2 + path.LineTo(self.L2-self.TailleTraitCourt, angle*0.5) + # Puis liaison vers suivant. Se déplace en (L2, taille_exacte_pas*0.5) avec angle/2 et va en (L2,0) avec angle 0 + path.Line(self.L2, angle*0.5, self.L2, 0) + path.GenPath() + + def genere_element_1_fin(self, angle): + path = inkcape_polar(self.Offset, self.group) + # Génère le dernier path, pour le dernier pas. Proche du cas normal, mais path plus complet, prend en compte la découpe du bord + # Par rapport au premier, pas de liaison avec le suivant ! + # Commence par le trait court intérieur : Va de (L1+TailleTraitCourt, angle) vers (L1-epaisseur, angle) + path.Line(self.L1+self.TailleTraitCourt, angle, self.L1-self.epaisseur, angle) + # Puis la dent coté intérieur : Va en (L1-epaisseur, angle+angle_par_pas/4) + path.LineTo(self.L1-self.epaisseur, angle+self.angle_par_pas/4) + # Puis découpe complète du bord. Va en (L2+epaisseur, angle+angle_par_pas/4) + path.LineTo(self.L2+self.epaisseur, angle+self.angle_par_pas/4) + # Puis dent coté extérieur, va en (L2+epaisseur, angle) + path.LineTo(self.L2+self.epaisseur, angle) + # et enfin traitcourt, va en (L2-TailleTraitCOurt, angle) + path.LineTo(self.L2-self.TailleTraitCourt, angle) + path.GenPath() + + def genere_element_2(self, angle): + path = inkcape_polar(self.Offset, self.group) + # Génère 2nd path, 2 traits entre bords des dents de l'interieur vers l'exterieur + # Se positionne en (L1 + TailleTraitCourt+2, angle) et va en ((L2+L1)/2-1, angle) + path.Line(self.L1+self.TailleTraitCourt+2, angle, (self.L2+self.L1)/2-1, angle) + # Se positionne en ((L2+L1)/2+1, angle) et va en (L2-TailleTraitCourt-2, angle) + path.Line((self.L2+self.L1)/2+1, angle, self.L2-self.TailleTraitCourt-2, angle) + path.GenPath() + + def genere_element_3(self, angle): + path = inkcape_polar(self.Offset, self.group) + # Génère la dent, la liaison avec le suivant coté extérieur + # Commence en (L2-TailleTraitCourt, angle) et va en (L2+epaisseur, angle) + path.Line(self.L2-self.TailleTraitCourt, angle, self.L2+self.epaisseur, angle) + # Trace la dent, va en (L2+epaisseur, angle+angle_par_pas/2) + # Ajoute angle_par_pas / 2 à l'angle car ce sera la nouvelle origine + angle += self.angle_par_pas/2 + path.LineTo(self.L2+self.epaisseur, angle) + # Revient vers l'intérieur en (L2-TailleTraitCourt, angle+angle_par_pas/2) mais c'est le nouvel angle + path.LineTo(self.L2-self.TailleTraitCourt, angle) + # Trace liaison avec le suivant. Début en (L2, nouvel_angle) fin en (L2, nouvel_angle+angle_par_pas/2) + path.Line(self.L2, angle, self.L2, angle+self.angle_par_pas/2) + path.GenPath() + + def genere_element_4(self, angle): + path = inkcape_polar(self.Offset, self.group) + # Génère 2nd path, 2 traits entre bords des dents de l'extérieur vers l'intérieur + # Se positionne en (L2-TailleTraitCourt-2, angle+angle_par_pas/2) et va en ((L2+L1)/2+1, angle+angle_par_pas/2) + path.Line(self.L2-self.TailleTraitCourt-2, angle+self.angle_par_pas/2, (self.L2+self.L1)/2+1, angle+self.angle_par_pas/2) + # Se positionne en ((L2+L1)/2-1, angle+angle_par_pas/2) et va en (L1 + TailleTraitCourt+2, angle+angle_par_pas/2) + path.Line((self.L2+self.L1)/2-1, angle+self.angle_par_pas/2, self.L1+self.TailleTraitCourt+2, angle+self.angle_par_pas/2) + path.GenPath() + + def genere_element_5(self, angle): + path = inkcape_polar(self.Offset, self.group) + # Génère path avec 3 traits longueur TailleTraitLong entre les dents externes + #Tous les angles de ce motifs sont incrénetés de angle_par_pas/4 + angle += self.angle_par_pas/4 + # Se positionne en (L1-epaisseur+1, angle) et va en (L1+TailleTraitLong-1) + path.Line(self.L1-self.epaisseur+1, angle, self.L1+self.TailleTraitLong-1, angle) + # Se positionne en (L1+TailleTraitLong+1, angle) et va en (L1+2*TailleTraitLong+1) + path.Line(self.L1+self.TailleTraitLong+1, angle, self.L1+2*self.TailleTraitLong+1, angle) + # Se positionne en (L2 - TailleTraitLong + 1 et va en L2+epaisseur-1) + path.Line(self.L2-self.TailleTraitLong+1, angle, self.L2+self.epaisseur-1, angle) + path.GenPath() + + def genere_element_6(self, angle): + path = inkcape_polar(self.Offset, self.group) + #Tous les angles de ce motifs sont incrénetés de angle_par_pas*0.75 + angle += self.angle_par_pas*0.75 + # Se positionne en (L2-1, angle) et va en (L2-TailleTraitLong+1) + path.Line(self.L2-1, angle, self.L2-self.TailleTraitLong+1, angle) + # Se positionne en (L2 - TailleTraitLong-1, angle) et va en (L1+TailleTraitLong+1) + path.Line(self.L2-self.TailleTraitLong - 1, angle, self.L1+self.TailleTraitLong+1, angle) + # Se positionne en (L1+TailleTraitLong-1) et va en (L1+1,angle) + path.Line(self.L1+self.TailleTraitLong - 1, angle, self.L1+1, angle) + path.GenPath() + + def genere_pas_debut(self): + # Génère les paths du premier pas, le bord est complètement coupé et son épaisseur est divisée par 2 (élement_1 début) + angle = -1*self.angle_par_pas + #Taille traits court et long premiere partie + self.genere_element_1_debut(angle) + self.genere_element_4(angle) + self.genere_element_6(angle) + + def genere_pas_fin(self, index_pas_fin): + # Génère les paths du dernier pas, le bord est complètement coupé et son épaisseur est divisée par 2 (élement_1 fin) + angle = index_pas_fin*self.angle_par_pas + # Génère les deux traits courts entre les dents + self.genere_element_2(angle) + # Génère la dent et ferme le contour + self.genere_element_1_fin(angle) + + + def genere_pas(self, index_pas): + # Génère les paths d'un des pas du milieu. 6 paths sont créés + angle = self.angle_par_pas * index_pas + # Premier élément : dent intérieure + self.genere_element_1(angle) + # Second élément : 2 trait courts entre dents proche précédent + self.genere_element_2(angle) + # 3ème élément : dent extérieure + self.genere_element_3(angle) + # 4ème élément : 2 traits courts entre dents vers milieu + self.genere_element_4(angle) + # 5ème élément : 3 traits longs proche du précédent + self.genere_element_5(angle) + # 6ème élément : 3 traits longs vers suivant + self.genere_element_6(angle) + + + def GeneratePaths(self): + #Taille traits courts et longs entre les dents + self.TailleTraitCourt = (self.L2 - self.L1) / 6 - 1 + self.TailleTraitLong = (self.L2 - self.L1- 2) / 3 + pas_par_bloc = int(self.nombre_pas/self.nb_parts) + #genere les pas du "flex" + for i in range(self.nb_parts): + group = etree.SubElement(self.parent, 'g') + self.group = group + current_pas = 0 + pas_pour_ce_bloc = pas_par_bloc + self.Offset = (self.OffsetX, self.OffsetY) + self.OffsetX += self.L2*2+ 5 + if i == self.nb_parts - 1: + pas_pour_ce_bloc = self.nombre_pas - i * pas_par_bloc + self.genere_pas_debut() + while current_pas < pas_pour_ce_bloc: + self.genere_pas(current_pas) + current_pas += 1 + self.genere_pas_fin(pas_pour_ce_bloc) + +def gen_cercle(diametre, nombre_pas, epaisseur, xOffset, yOffset, parent): + group = etree.SubElement(parent, 'g') + angle_par_pas = 2 * math.pi / nombre_pas + #Rayons des cercle, avec et sans picots + r1 = diametre / 2 + r2 = r1 + epaisseur + path = inkcape_polar((xOffset, yOffset), group) + path.MoveTo(r1, 0) + index_pas = 0 + while index_pas < nombre_pas: + angle = index_pas * angle_par_pas + path.LineTo(r2, angle) + path.LineTo(r2, angle+angle_par_pas/2) + path.LineTo(r1, angle+angle_par_pas/2) + path.LineTo(r1, angle+angle_par_pas) + index_pas += 1 + path.GenPath() + +class BoxMakerConical(inkex.EffectExtension): + """ + Creates a new layer with the drawings for a parametrically generaded box. + """ + def __init__(self): + inkex.Effect.__init__(self) + self.knownUnits = ['in', 'pt', 'px', 'mm', 'cm', 'm', 'km', 'pc', 'yd', 'ft'] + self.arg_parser.add_argument('--unit', default = 'mm', help = 'Unit, should be one of ') + self.arg_parser.add_argument('--thickness', type = float, default = 3.0, help = 'Material thickness') + self.arg_parser.add_argument('--d1', type = float, default = 50.0, help = 'Small circle diameter') + self.arg_parser.add_argument('--d2', type = float, default = 100.0, help = 'Large circle diameter') + self.arg_parser.add_argument('--zc', type = float, default = 50.0, help = 'Cone height') + self.arg_parser.add_argument('--nb_pieces', type = int, default = 1, help = '# pieces for cone') + self.arg_parser.add_argument('--inner_size', type = inkex.Boolean, default = True, help = 'Dimensions are internal') + + try: + inkex.Effect.unittouu # unitouu has moved since Inkscape 0.91 + except AttributeError: + try: + def unittouu(self, unit): + return inkex.unittouu(unit) + except AttributeError: + pass + + def effect(self): + """ + Draws a conic box, based on provided parameters + """ + + # input sanity check + error = False + if self.options.zc < 15: + inkex.errormsg('Error: Height should be at least 15mm') + error = True + + if self.options.d1 < 30: + inkex.errormsg('Error: d1 should be at least 30mm') + error = True + + if self.options.d2 < self.options.d1 + 0.009999: + inkex.errormsg('Error: d2 should be at d1 + 0.01mm') + error = True + + if self.options.thickness < 1 or self.options.thickness > 10: + inkex.errormsg('Error: thickness should be at least 1mm and less than 10mm') + error = True + + if error: + exit() + + + # convert units + unit = self.options.unit + d1 = self.svg.unittouu(str(self.options.d1) + unit) + d2 = self.svg.unittouu(str(self.options.d2) + unit) + zc = self.svg.unittouu(str(self.options.zc) + unit) + + nb_parts = self.options.nb_pieces + + thickness = self.svg.unittouu(str(self.options.thickness) + unit) + #Si prend dimensions externes, corrige les tailles + if self.options.inner_size == False: + d1 -= 2*thickness + d2 -= 2*thickness + zc -= 2*thickness + + svg = self.document.getroot() + docWidth = self.svg.unittouu(svg.get('width')) + docHeigh = self.svg.unittouu(svg.attrib['height']) + + layer = etree.SubElement(svg, 'g') + layer.set(inkex.addNS('label', 'inkscape'), 'Conical Box') + layer.set(inkex.addNS('groupmode', 'inkscape'), 'layer') + + #Compute size of projection + h1 = math.sqrt(zc*zc + (d2-d1)*(d2-d1)/4) + L1 = d1 * h1 / (d2 - d1) + L2 = d2 * h1 / (d2 - d1) + + alpha = math.pi*d2/L2 + #calcul nombre de pas (sauf premeirs et derniers) pour D1, avec 2*2 mm par pas + nombre_pas = round((d1 * math.pi - 6) / 4) + #calcul angle par pas, ajoute 1.5 pour tenir compte des premiers et derniers pas qui font 3/4 de pas. + angle_par_pas = alpha / (nombre_pas+1.5*nb_parts) + taille_exacte_pas = math.pi * d1 / (nombre_pas+1.5*nb_parts) + + # do not put elements right at the edge of the page. + # Drawing will max left will be L2*cos(alpha) - thickness + if alpha > math.pi: + xOffset = -L2 - thickness - 10 + xmin = -L2 - thickness + xmax = L2 + thickness + else: + xOffset = L2 * math.cos(alpha) - thickness - 10 + xmin = (L2+thickness) * math.cos(alpha) + xmax = L2 + thickness + if alpha > math.pi*1.5: + yOffset = -L2 - thickness - 10 + ymin = -L2 - thickness + ymax = L2 + thickness + elif alpha > math.pi: + yOffset = (L2+thickness)*math.sin(alpha) - 10 + ymin = (L2+thickness)*math.sin(alpha) - thickness + ymax = L2 + thickness + elif alpha > math.pi/2: + yOffset = 0 + ymin = 0 + ymax = L2 + thickness + else: + yOffset = 0 + ymin = 0 + ymax = (L2+thickness)*math.sin(alpha) + + #dessine la partie "souple" + PartieSouple = CurvedSurface(L1, L2, nombre_pas, angle_par_pas, taille_exacte_pas, nb_parts, thickness, layer, xOffset, yOffset) + PartieSouple.GeneratePaths() + #génère maintenant le path du grand cercle + #Un pas de plus pour les cercles, pour tenir compte du début et de la fin + nombre_pas += 1 + #Positionne Offset + gen_cercle(d2, nombre_pas, thickness, -xmax - d2/2 + xOffset + 10, yOffset - ymax - d2/2 - 10 , layer) + #puis pour le petit cercle + gen_cercle(d1, nombre_pas, thickness, -xmax - d1/2 + xOffset + 10, d1/2 + yOffset - ymin + 10, layer) + +if __name__ == '__main__': + BoxMakerConical().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/box_maker_elliptical_box/box_maker_elliptical_box.inx b/extensions/fablabchemnitz/box_maker_elliptical_box/box_maker_elliptical_box.inx new file mode 100644 index 00000000..76c27e32 --- /dev/null +++ b/extensions/fablabchemnitz/box_maker_elliptical_box/box_maker_elliptical_box.inx @@ -0,0 +1,39 @@ + + + Box Maker - Elliptical Box + fablabchemnitz.de.box_maker_elliptical_box + + + + + + + + + + + + + 3.0 + 30.0 + 50.0 + 40.0 + 1.5 + false + 4 + 90 + false + false + false + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/box_maker_elliptical_box/box_maker_elliptical_box.py b/extensions/fablabchemnitz/box_maker_elliptical_box/box_maker_elliptical_box.py new file mode 100644 index 00000000..a264b4a5 --- /dev/null +++ b/extensions/fablabchemnitz/box_maker_elliptical_box/box_maker_elliptical_box.py @@ -0,0 +1,278 @@ +#!/usr/bin/env python3 + +from inkscape_helper.Coordinate import Coordinate +import inkscape_helper.Effect as eff +import inkscape_helper.SVG as svg +from inkscape_helper.Ellipse import Ellipse + +from inkscape_helper.Line import Line +from inkscape_helper.EllipticArc import EllipticArc + +from math import * +import inkex + +#Note: keep in mind that SVG coordinates start in the top-left corner i.e. with an inverted y-axis + +# first define some SVG primitives +greenStyle = svg.green_style + +def _makeCurvedSurface(topLeft, w, h, cutSpacing, hCutCount, thickness, parent, invertNotches = False, centralRib = False): + width = Coordinate(w, 0) + height = Coordinate(0, h) + wCutCount = int(floor(w / cutSpacing)) + if wCutCount % 2 == 0: + wCutCount += 1 # make sure we have an odd number of cuts + xCutDist = w / wCutCount + xSpacing = Coordinate(xCutDist, 0) + ySpacing = Coordinate(0, cutSpacing) + cut = height / hCutCount - ySpacing + plateThickness = Coordinate(0, thickness) + notchEdges = [] + topHCuts = [] + bottomHCuts = [] + + p = svg.Path() + + for cutIndex in range(wCutCount): + if (cutIndex % 2 == 1) != invertNotches: # make a notch here + inset = plateThickness + else: + inset = Coordinate(0, 0) + + # A-column of cuts + aColStart = topLeft + xSpacing * cutIndex + notchEdges.append((aColStart - topLeft).x) + + if cutIndex > 0: # no cuts at x == 0 + p.move_to(aColStart, True) + p.line_to(cut / 2) + + for j in range(hCutCount - 1): + pos = aColStart + cut / 2 + ySpacing + (cut + ySpacing) * j + p.move_to(pos, True) + p.line_to(cut) + + p.move_to(aColStart + height - cut / 2, True) + p.line_to(cut / 2) + + + # B-column of cuts, offset by half the cut length; these cuts run in the opposite direction + bColStart = topLeft + xSpacing * cutIndex + xSpacing / 2 + for j in reversed(range(hCutCount)): + end = bColStart + ySpacing / 2 + (cut + ySpacing) * j + start = end + cut + if centralRib and hCutCount % 2 == 0 and cutIndex % 2 == 1: + holeTopLeft = start + (ySpacing - plateThickness - xSpacing) / 2 + if j == hCutCount // 2 - 1: + start -= plateThickness / 2 + p.move_to(holeTopLeft + plateThickness + xSpacing, True) + p.line_to(-xSpacing) + + p.move_to(holeTopLeft, True) + p.line_to(xSpacing) + + elif j == hCutCount // 2: + end += plateThickness / 2 + if j == 0: # first row + end += inset + elif j == hCutCount - 1: # last row + start -= inset + p.move_to(start, True) + p.line_to(end, True) + + #horizontal cuts (should be done last) + topHCuts.append((aColStart + inset, aColStart + inset + xSpacing)) + bottomHCuts.append((aColStart + height - inset, aColStart + height - inset + xSpacing)) + + # draw the outline + for c in reversed(bottomHCuts): + p.move_to(c[1], True) + p.line_to(c[0], True) + + p.move_to(topLeft + height, True) + p.line_to(-height) + + for c in topHCuts: + p.move_to(c[0], True) + p.line_to(c[1], True) + + p.move_to(topLeft + width, True) + p.line_to(height) + + + group = svg.group(parent) + p.path(group) + + notchEdges.append(w) + return notchEdges + +def _makeNotchedEllipse(center, ellipse, start_theta, thickness, notches, parent, invertNotches): + start_theta += pi # rotate 180 degrees to put the lid on the topside + + ell_radius = Coordinate(ellipse.x_radius, ellipse.y_radius) + ell_radius_t = ell_radius + Coordinate(thickness, thickness) + + theta = ellipse.theta_from_dist(start_theta, notches[0]) + ell_point = center + ellipse.coordinate_at_theta(theta) + prev_offset = ellipse.tangent(theta) * thickness + + p = svg.Path() + p.move_to(ell_point, absolute=True) + + for n in range(len(notches) - 1): + theta = ellipse.theta_from_dist(start_theta, notches[n + 1]) + ell_point = center + ellipse.coordinate_at_theta(theta) + notch_offset = ellipse.tangent(theta) * thickness + notch_point = ell_point + notch_offset + + if (n % 2 == 0) != invertNotches: + p.arc_to(ell_radius, ell_point, absolute=True) + prev_offset = notch_offset + + else: + p.line_to(prev_offset) + p.arc_to(ell_radius_t, notch_point, absolute=True) + p.line_to(-notch_offset) + + p.path(parent) + + + +class EllipticalBox(eff.Effect): + """ + Creates a new layer with the drawings for a parametrically generaded box. + """ + def __init__(self): + options = [ + ['unit', str, 'mm', 'Unit, one of: cm, mm, in, ft, ...'], + ['thickness', float, '3.0', 'Material thickness'], + ['width', float, '100', 'Box width'], + ['height', float, '100', 'Box height'], + ['depth', float, '100', 'Box depth'], + ['cut_dist', float, '1.5', 'Distance between cuts on the wrap around. Note that this value will change slightly to evenly fill up the available space.'], + ['auto_cut_dist', inkex.Boolean, 'false', 'Automatically set the cut distance based on the curvature.'], # in progress + ['cut_nr', int, '3', 'Number of cuts across the depth of the box.'], + ['lid_angle', float, '120', 'Angle that forms the lid (in degrees, measured from centerpoint of the ellipse)'], + ['body_ribcount', int, '0', 'Number of ribs in the body'], + ['lid_ribcount', int, '0', 'Number of ribs in the lid'], + ['invert_lid_notches', inkex.Boolean, 'false', 'Invert the notch pattern on the lid (keeps the lid from sliding sideways)'], + ['central_rib_lid', inkex.Boolean, 'false', 'Create a central rib in the lid'], + ['central_rib_body', inkex.Boolean, 'false', 'Create a central rib in the body'] + ] + eff.Effect.__init__(self, options) + + + def effect(self): + """ + Draws as basic elliptical box, based on provided parameters + """ + + # input sanity check + error = False + if min(self.options.height, self.options.width, self.options.depth) == 0: + eff.errormsg('Error: Dimensions must be non zero') + error = True + + if self.options.cut_nr < 1: + eff.errormsg('Error: Number of cuts should be at least 1') + error = True + + if (self.options.central_rib_lid or self.options.central_rib_body) and self.options.cut_nr % 2 == 1: + eff.errormsg('Error: Central rib is only valid with an even number of cuts') + error = True + + if self.options.unit not in self.knownUnits: + eff.errormsg('Error: unknown unit. '+ self.options.unit) + error = True + + if error: + exit() + + + # convert units + unit = self.options.unit + H = self.svg.unittouu(str(self.options.height) + unit) + W = self.svg.unittouu(str(self.options.width) + unit) + D = self.svg.unittouu(str(self.options.depth) + unit) + thickness = self.svg.unittouu(str(self.options.thickness) + unit) + cutSpacing = self.svg.unittouu(str(self.options.cut_dist) + unit) + cutNr = self.options.cut_nr + + doc_root = self.document.getroot() + layer = svg.layer(doc_root, 'Elliptical Box') + + ell = Ellipse(W/2, H/2) + + #body and lid + lidAngleRad = self.options.lid_angle * 2 * pi / 360 + lid_start_theta = ell.theta_at_angle(pi / 2 - lidAngleRad / 2) + lid_end_theta = ell.theta_at_angle(pi / 2 + lidAngleRad / 2) + + lidLength = ell.dist_from_theta(lid_start_theta, lid_end_theta) + bodyLength = ell.dist_from_theta(lid_end_theta, lid_start_theta) + + # do not put elements right at the edge of the page + xMargin = 3 + yMargin = 3 + + bottom_grp = svg.group(layer) + top_grp = svg.group(layer) + + bodyNotches = _makeCurvedSurface(Coordinate(xMargin, yMargin), bodyLength, D, cutSpacing, cutNr, + thickness, bottom_grp, False, self.options.central_rib_body) + lidNotches = _makeCurvedSurface(Coordinate(xMargin, D + 2 * yMargin), lidLength, D, cutSpacing, cutNr, + thickness, top_grp, not self.options.invert_lid_notches, + self.options.central_rib_lid) + + # create elliptical sides + sidesGrp = svg.group(layer) + + elCenter = Coordinate(xMargin + thickness + W / 2, 2 * D + H / 2 + thickness + 3 * yMargin) + + # indicate the division between body and lid + p = svg.Path() + if self.options.invert_lid_notches: + p.move_to(elCenter + ell.coordinate_at_theta(lid_start_theta + pi), True) + p.line_to(elCenter, True) + p.line_to(elCenter + ell.coordinate_at_theta(lid_end_theta + pi), True) + + else: + angleA = ell.theta_from_dist(lid_start_theta, lidNotches[1]) + angleB = ell.theta_from_dist(lid_start_theta, lidNotches[-2]) + + p.move_to(elCenter + ell.coordinate_at_theta(angleA + pi), True) + p.line_to(elCenter, True) + p.line_to(elCenter + ell.coordinate_at_theta(angleB + pi), True) + + _makeNotchedEllipse(elCenter, ell, lid_end_theta, thickness, bodyNotches, sidesGrp, False) + _makeNotchedEllipse(elCenter, ell, lid_start_theta, thickness, lidNotches, sidesGrp, + not self.options.invert_lid_notches) + + p.path(sidesGrp, greenStyle) + + # ribs + if self.options.central_rib_lid or self.options.central_rib_body: + innerRibCenter = Coordinate(xMargin + thickness + W / 2, 2 * D + 1.5 * (H + 2 *thickness) + 4 * yMargin) + innerRibGrp = svg.group(layer) + + outerRibCenter = Coordinate(2 * xMargin + 1.5 * (W + 2 * thickness), + 2 * D + 1.5 * (H + 2 * thickness) + 4 * yMargin) + outerRibGrp = svg.group(layer) + + + if self.options.central_rib_lid: + _makeNotchedEllipse(innerRibCenter, ell, lid_start_theta, thickness, lidNotches, innerRibGrp, False) + _makeNotchedEllipse(outerRibCenter, ell, lid_start_theta, thickness, lidNotches, outerRibGrp, True) + + if self.options.central_rib_body: + spacer = Coordinate(0, 10) + _makeNotchedEllipse(innerRibCenter + spacer, ell, lid_end_theta, thickness, bodyNotches, innerRibGrp, False) + _makeNotchedEllipse(outerRibCenter + spacer, ell, lid_end_theta, thickness, bodyNotches, outerRibGrp, True) + + if self.options.central_rib_lid or self.options.central_rib_body: + svg.text(sidesGrp, elCenter, 'side (duplicate this)') + svg.text(innerRibGrp, innerRibCenter, 'inside rib') + svg.text(outerRibGrp, outerRibCenter, 'outside rib') + +if __name__ == '__main__': + EllipticalBox().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/box_maker_elliptical_box/inkscape_helper/BezierCurve.py b/extensions/fablabchemnitz/box_maker_elliptical_box/inkscape_helper/BezierCurve.py new file mode 100644 index 00000000..7423eb0c --- /dev/null +++ b/extensions/fablabchemnitz/box_maker_elliptical_box/inkscape_helper/BezierCurve.py @@ -0,0 +1,92 @@ +from __future__ import division + +from PathSegment import * +from math import hypot + +class BezierCurve(PathSegment): + nr_points = 10 + def __init__(self, P): # number of points is limited to 3 or 4 + + if len(P) == 3: # quadratic + self.B = lambda t : (1 - t)**2 * P[0] + 2 * (1 - t) * t * P[1] + t**2 * P[2] + self.Bd = lambda t : 2 * (1 - t) * (P[1] - P[0]) + 2 * t * (P[2] - P[1]) + self.Bdd = lambda t : 2 * (P[2] - 2 * P[1] + P[0]) + elif len(P) == 4: #cubic + self.B = lambda t : (1 - t)**3 * P[0] + 3 * (1 - t)**2 * t * P[1] + 3 * (1 - t) * t**2 * P[2] + t**3 * P[3] + self.Bd = lambda t : 3 * (1 - t)**2 * (P[1] - P[0]) + 6 * (1 - t) * t * (P[2] - P[1]) + 3 * t**2 * (P[3] - P[2]) + self.Bdd = lambda t : 6 * (1 - t) * (P[2] - 2 * P[1] + P[0]) + 6 * t * (P[3] - 2 * P[2] + P[1]) + + self.tangent = lambda t : self.Bd(t) + # self.curvature = lambda t : (Bd(t).x * Bdd(t).y - Bd(t).y * Bdd(t).x) / hypot(Bd(t).x, Bd(t).y)**3 + + + self.distances = [0] # cumulative distances for each 't' + prev_pt = self.B(0) + for i in range(self.nr_points): + t = (i + 1) / self.nr_points + pt = self.B(t) + self.distances.append(self.distances[-1] + hypot(prev_pt.x - pt.x, prev_pt.y - pt.y)) + prev_pt = pt + self._length = self.distances[-1] + + def curvature(self, t): + n = self.Bd(t).x * self.Bdd(t).y - self.Bd(t).y * self.Bdd(t).x + d = hypot(self.Bd(t).x, self.Bd(t).y)**3 + if d == 0: + return n * float('inf') + else: + return n / d + + @classmethod + def quadratic(cls, start, c, end): + bezier = cls() + + @classmethod + def cubic(cls, start, c1, c2, end): + bezier = cls() + + def __make_eq__(self): + pass + + @property + def length(self): + return self._length + + def subdivide(self, part_length, start_offset=0): + nr_parts = int((self.length - start_offset) // part_length) + k_o = start_offset / self.length + k2t = lambda k : k_o + k * part_length / self.length + points = [self.pathpoint_at_t(k2t(k)) for k in range(nr_parts + 1)] + return(points, self.length - points[-1].c_dist) + + + def pathpoint_at_t(self, t): + """pathpoint on the curve from t=0 to point at t.""" + step = 1 / self.nr_points + pt_idx = int(t / step) + length = self.distances[pt_idx] + ip_fact = (t - pt_idx * step) / step + + if ip_fact > 0 and t < 1: # not a perfect match, need to interpolate + length += ip_fact * (self.distances[pt_idx + 1] - self.distances[pt_idx]) + + return PathPoint(t, self.B(t), self.tangent(t), self.curvature(t), length) + + + def t_at_length(self, length): + """interpolated t where the curve is at the given length""" + if length == self.length: + return 1 + i_small = 0 + i_big = self.nr_points + 1 + + while i_big - i_small > 1: # binary search + i_half = i_small + (i_big - i_small) // 2 + if self.distances[i_half] <= length: + i_small = i_half + else: + i_big = i_half + + small_dist = self.distances[i_small] + return i_small / self.nr_points + (length - small_dist) * (self.distances[i_big] - small_dist) # interpolated length + diff --git a/extensions/fablabchemnitz/box_maker_elliptical_box/inkscape_helper/Coordinate.py b/extensions/fablabchemnitz/box_maker_elliptical_box/inkscape_helper/Coordinate.py new file mode 100644 index 00000000..298d1579 --- /dev/null +++ b/extensions/fablabchemnitz/box_maker_elliptical_box/inkscape_helper/Coordinate.py @@ -0,0 +1,104 @@ +from math import * + +def inner_product(a, b): + return a.x * b.x + a.y * b.y + +class Coordinate(object): + """ + Basic (x, y) coordinate class (or should it be called vector?) which allows some simple operations. + """ + def __init__(self, x, y): + self.x = float(x) + self.y = float(y) + + #polar coordinates + @property + def t(self): + angle = atan2(self.y, self.x) + if angle < 0: + angle += pi * 2 + return angle + + @t.setter + def t(self, value): + length = self.r + self.x = cos(value) * length + self.y = sin(value) * length + + + @property + def r(self): + return hypot(self.x, self.y) + + @r.setter + def r(self, value): + angle = self.t + self.x = cos(angle) * value + self.y = sin(angle) * value + + def __repr__(self): + return self.__str__() + + def __str__(self): + return "(%f, %f)" % (self.x, self.y) + + def __eq__(self, other): + return self.x == other.x and self.y == other.y + + def __add__(self, other): + return Coordinate(self.x + other.x, self.y + other.y) + + def __sub__(self, other): + return Coordinate(self.x - other.x, self.y - other.y) + + def __mul__(self, factor): + return Coordinate(self.x * factor, self.y * factor) + + def __neg__(self): + return Coordinate(-self.x, -self.y) + + def __rmul__(self, other): + return self * other + + def __div__(self, quotient): + return Coordinate(self.x / quotient, self.y / quotient) + + def __truediv__(self, quotient): + return self.__div__(quotient) + + def dot(self, other): + """dot product""" + return self.x * other.x + self.y * other.y + + def cross_norm(self, other): + """"the norm of the cross product""" + self.x * other.y - self.y * other.x + + def close_enough_to(self, other, limit=1E-9): + return (self - other).r < limit + + +class IntersectionError(ValueError): + """Raised when two lines do not intersect.""" + +def on_segment(pt, start, end): + """Check if pt is between start and end. The three points are presumed to be collinear.""" + pt -= start + end -= start + ex, ey = end.x, end.y + px, py = pt.x, pt.y + px *= cmp(ex, 0) + py *= cmp(ey, 0) + return px >= 0 and px <= abs(ex) and py >= 0 and py <= abs(ey) + +def intersection (s1, e1, s2, e2, on_segments = True): + D = (s1.x - e1.x) * (s2.y - e2.y) - (s1.y - e1.y) * (s2.x - e2.x) + if D == 0: + raise IntersectionError("Lines from {s1} to {e1} and {s2} to {e2} are parallel") + N1 = s1.x * e1.y - s1.y * e1.x + N2 = s2.x * e2.y - s2.y * e2.x + I = ((s2 - e2) * N1 - (s1 - e1) * N2) / D + + if on_segments and not (on_segment(I, s1, e1) and on_segment(I, s2, e2)): + raise IntersectionError("Intersection {0} is not on line segments [{1} -> {2}] [{3} -> {4}]".format(I, s1, e1, s2, e2)) + return I diff --git a/extensions/fablabchemnitz/box_maker_elliptical_box/inkscape_helper/Effect.py b/extensions/fablabchemnitz/box_maker_elliptical_box/inkscape_helper/Effect.py new file mode 100644 index 00000000..e38a4f61 --- /dev/null +++ b/extensions/fablabchemnitz/box_maker_elliptical_box/inkscape_helper/Effect.py @@ -0,0 +1,36 @@ +import inkex + +errormsg = inkex.errormsg +debug = inkex.debug + +class Effect(inkex.Effect): + """ + Provides some extra features to inkex.Effect: + - Allows you to pass a list of options in stead of setting them one by one + - acces to unittouu() that is compatible between Inkscape versions 0.48 and 0.91 + """ + def __init__(self, options=None): + inkex.Effect.__init__(self) + self.knownUnits = ['in', 'pt', 'px', 'mm', 'cm', 'm', 'km', 'pc', 'yd', 'ft'] + + if options != None: + for opt in options: + if len(opt) == 2: + self.arg_parser.add_argument('--' + opt[0], type = opt[1]) + else: + self.arg_parser.add_argument('--' + opt[0], type = opt[1],default = opt[2], help = opt[3]) + + try: + inkex.Effect.unittouu # unitouu has moved since Inkscape 0.91 + except AttributeError: + try: + def unittouu(self, unit): + return inkex.unittouu(unit) + except AttributeError: + pass + + def effect(self): + """ + + """ + pass diff --git a/extensions/fablabchemnitz/box_maker_elliptical_box/inkscape_helper/Ellipse.py b/extensions/fablabchemnitz/box_maker_elliptical_box/inkscape_helper/Ellipse.py new file mode 100644 index 00000000..3e0370eb --- /dev/null +++ b/extensions/fablabchemnitz/box_maker_elliptical_box/inkscape_helper/Ellipse.py @@ -0,0 +1,157 @@ +from __future__ import division +from math import * +from inkscape_helper.Coordinate import Coordinate + +class Ellipse(object): + """Used as a base class for EllipticArc.""" + nr_points = 1024 #used for piecewise linear circumference calculation (ellipse circumference is tricky to calculate) + # approximate circumfere: c = pi * (3 * (a + b) - sqrt(10 * a * b + 3 * (a ** 2 + b ** 2))) + + def __init__(self, x_radius, y_radius): + self.y_radius = y_radius + self.x_radius = x_radius + self.distances = [0] + theta = 0 + self.angle_step = 2 * pi / self.nr_points + + for i in range(self.nr_points): + prev_dist = self.distances[-1] + prev_coord = self.coordinate_at_theta(theta) + theta += self.angle_step + x, y = x_radius * cos(theta), y_radius * sin(theta) + self.distances.append(prev_dist + hypot(prev_coord.x - x, prev_coord.y - y)) + + @property + def circumference(self): + return self.distances[-1] + + def curvature(self, theta): + c = self.coordinate_at_theta(theta) + return (self.x_radius*self.y_radius)/((cos(theta)**2*self.y_radius**2 + sin(theta)**2*self.x_radius**2)**(3/2)) + + def tangent(self, theta): + angle = self.theta_at_angle(theta) + return Coordinate(cos(angle), sin(angle)) + + def coordinate_at_theta(self, theta): + """Coordinate of the point at theta.""" + return Coordinate(self.x_radius * cos(theta), self.y_radius * sin(theta)) + + def dist_from_theta(self, theta_start, theta_end): + """Distance accross the surface from point at angle theta_end to point at angle theta_end. Measured in positive (CCW) sense.""" + #print 'thetas ', theta_start, theta_end # TODO: figure out why are there so many with same start and end? + # make sure thetas are between 0 and 2 * pi + theta_start %= 2 * pi + theta_end %= 2 * pi + i1 = int(theta_start / self.angle_step) + p1 = theta_start % self.angle_step + l1 = self.distances[i1 + 1] - self.distances[i1] + i2 = int(theta_end / self.angle_step) + p2 = theta_end % self.angle_step + l2 = self.distances[i2 + 1] - self.distances[i2] + if theta_start <= theta_end: + len = self.distances[i2] - self.distances[i1] + l2 * p2 - l1 * p1 + else: + len = self.circumference + self.distances[i2] - self.distances[i1] + return len + + def theta_from_dist(self, theta_start, dist): + """Returns the angle that you get when starting at theta_start and moving a distance (dist) in CCW direction""" + si = int(theta_start / self.angle_step) % self.nr_points + p = theta_start % self.angle_step + + piece_length = self.distances[si + 1] - self.distances[si] + start_dist = self.distances[si] + p * piece_length + end_dist = dist + start_dist + + if end_dist > self.circumference: # wrap around zero angle + end_dist -= self.circumference + + min_idx = 0 + max_idx = self.nr_points + while max_idx - min_idx > 1: # binary search + half_idx = min_idx + (max_idx - min_idx) // 2 + if self.distances[half_idx] < end_dist: + min_idx = half_idx + else: + max_idx = half_idx + step_dist = self.distances[max_idx] - self.distances[min_idx] + return (min_idx + (end_dist - self.distances[min_idx]) / step_dist) * self.angle_step + + def theta_at_angle(self, angle): + cf = 0 + if angle > pi / 2: + cf = pi + if angle > 3 * pi / 2: + cf = 2 * pi + return atan(self.x_radius/self.y_radius * tan(angle)) + cf + + def skewTransform(self, l, a2, b2): + x0 = a2**2 + x1 = b2**2 + x2 = l**2 + x3 = x0*x2 + x4 = x0 - x1 + x3 + x5 = 2*a2*b2 + x6 = x0 + x1 + x3 + x7 = sqrt((-x5 + x6)*(x5 + x6)) + x9 = 1/(x4 - x7) + x10 = x6 - x7 + x11 = l*x10 + x12 = b2**4 + x13 = 4*x12 + x14 = x10**2 + x15 = 4*x1 + x16 = sqrt(-x10*x15 + x13 + x14*x2 + x14) + x17 = 2*atan(x9*(x11 - x16)) + x18 = sqrt(2) + x19 = sqrt(x10) + x20 = b2*x18*x19/2 + x21 = x0/2 + x22 = x1/2 + x23 = x2*x21 + x24 = x21 - x22 + x23 + x25 = x7/2 + x27 = 1/(x24 - x25) + x28 = x21 + x22 + x23 + x29 = x28 - x25 + x30 = l*x29 + x31 = x14/4 + x32 = 2*x1 + x33 = sqrt(x12 + x2*x31 - x29*x32 + x31) + x34 = 2*atan(x27*(x30 - x33)) + x35 = x20*sqrt(1/(-x1*cos(x34)**2 + x29))*sin(x34) + x36 = x18/2 + x37 = -x19*x36 + x39 = 2*atan(x9*(x11 + x16)) + x40 = 2*atan(x27*(x30 + x33)) + x41 = x20*sqrt(1/(-x1*cos(x40)**2 + x29))*sin(x40) + x42 = 1/(x4 + x7) + x43 = x6 + x7 + x44 = l*x43 + x45 = x43**2 + x46 = sqrt(x13 - x15*x43 + x2*x45 + x45) + x47 = 2*atan(x42*(x44 - x46)) + x48 = sqrt(x43) + x49 = b2*x18*x48/2 + x50 = 1/(x24 + x25) + x51 = x25 + x28 + x52 = l*x51 + x53 = x45/4 + x54 = sqrt(x12 + x2*x53 - x32*x51 + x53) + x55 = 2*atan(x50*(x52 - x54)) + x56 = x49*sqrt(1/(-x1*cos(x55)**2 + x51))*sin(x55) + x57 = -x36*x48 + x59 = 2*atan(x42*(x44 + x46)) + x60 = 2*atan(x50*(x52 + x54)) + x61 = x49*sqrt(1/(-x1*cos(x60)**2 + x51))*sin(x60) + + #solutions (alpha, a1, b1) + (x17, -x35, x19*x36) + (x17, x35, x37) + (x39, -x41, x19*x36) + (x39, x41, x37) + (x47, -x56, x36*x48) + (x47, x56, x57) + (x59, -x61, x36*x48) + (x59, x61, x57) diff --git a/extensions/fablabchemnitz/box_maker_elliptical_box/inkscape_helper/EllipticArc.py b/extensions/fablabchemnitz/box_maker_elliptical_box/inkscape_helper/EllipticArc.py new file mode 100644 index 00000000..0353d118 --- /dev/null +++ b/extensions/fablabchemnitz/box_maker_elliptical_box/inkscape_helper/EllipticArc.py @@ -0,0 +1,125 @@ +from inkscape_helper.PathSegment import * +from inkscape_helper.Coordinate import Coordinate +from inkscape_helper.Ellipse import Ellipse + +from math import sqrt, pi +import copy + + +class EllipticArc(PathSegment): + + ell_dict = {} + + def __init__(self, start, end, rx, ry, axis_rot, pos_dir=True, large_arc=False): + self.rx = rx + self.ry = ry + # calculate ellipse center + # the center is on two ellipses one with its center at the start point, the other at the end point + # for simplicity take the one ellipse at the origin and the other with offset (tx, ty), + # find the center and translate back to the original offset at the end + axis_rot *= pi / 180 # convert to radians + # start and end are mutable objects, copy to avoid modifying them + r_start = copy.copy(start) + r_end = copy.copy(end) + r_start.t -= axis_rot + r_end.t -= axis_rot + end_o = r_end - r_start # offset end vector + + tx = end_o.x + ty = end_o.y + + # some helper variables for the intersection points + # used sympy to come up with the equations + ff = (rx**2*ty**2 + ry**2*tx**2) + cx = rx**2*ry*tx*ty**2 + ry**3*tx**3 + cy = rx*ty*ff + sx = rx*ty*sqrt(4*rx**4*ry**2*ty**2 - rx**4*ty**4 + 4*rx**2*ry**4*tx**2 - 2*rx**2*ry**2*tx**2*ty**2 - ry**4*tx**4) + sy = ry*tx*sqrt(-ff*(-4*rx**2*ry**2 + rx**2*ty**2 + ry**2*tx**2)) + + # intersection points + c1 = Coordinate((cx - sx) / (2*ry*ff), (cy + sy) / (2*rx*ff)) + c2 = Coordinate((cx + sx) / (2*ry*ff), (cy - sy) / (2*rx*ff)) + + if end_o.cross_norm(c1 - r_start) < 0: # c1 is to the left of end_o + left = c1 + right = c2 + else: + left = c2 + right = c1 + + if pos_dir != large_arc: #center should be on the left of end_o + center_o = left + else: #center should be on the right of end_o + center_o = right + + #re-use ellipses with same rx, ry to save some memory + if (rx, ry) in self.ell_dict: + self.ellipse = self.ell_dict[(rx, ry)] + else: + self.ellipse = Ellipse(rx, ry) + self.ell_dict[(rx, ry)] = self.ellipse + + self.start = start + self.end = end + self.axis_rot = axis_rot + self.pos_dir = pos_dir + self.large_arc = large_arc + self.start_theta = self.ellipse.theta_at_angle((-center_o).t) + self.end_theta = self.ellipse.theta_at_angle((end_o - center_o).t) + + # translate center back to original offset + center_o.t += axis_rot + self.center = center_o + start + + @property + def length(self): + return self.ellipse.dist_from_theta(self.start_theta, self.end_theta) + + def t_to_theta(self, t): + """convert t (always between 0 and 1) to angle theta""" + start = self.start_theta + end = self.end_theta + + if self.pos_dir and end < start: + end += 2 * pi + + if not self.pos_dir and start < end: + end -= 2 * pi + arc_size = end - start + + return (start + (end - start) * t) % (2 * pi) + + def theta_to_t(self, theta): + full_arc_size = (self.end_theta - self.start_theta + 2 * pi) % (2 * pi) + theta_arc_size = (theta - self.start_theta + 2 * pi) % (2 * pi) + return theta_arc_size / full_arc_size + + def curvature(self, t): + theta = self.t_to_theta(t) + return self.ellipse.curvature(theta) + + def tangent(self, t): + theta = self.t_to_theta(t) + return self.ellipse.tangent(theta) + + def t_at_length(self, length): + """interpolated t where the curve is at the given length""" + theta = self.ellipse.theta_from_dist(length, self.start_theta) + return self.theta_to_t(theta) + + def length_at_t(self, t): + return self.ellipse.dist_from_theta(self.start_theta, self.t_to_theta(t)) + + def pathpoint_at_t(self, t): + """pathpoint on the curve from t=0 to point at t.""" + centered = self.ellipse.coordinate_at_theta(self.t_to_theta(t)) + centered.t += self.axis_rot + return PathPoint(t, centered + self.center, self.tangent(t), self.curvature(t), self.length_at_t(t)) + + # identical to Bezier code + def subdivide(self, part_length, start_offset=0): + nr_parts = int((self.length - start_offset) // part_length) + k_o = start_offset / self.length + k2t = lambda k : k_o + k * part_length / self.length + points = [self.pathpoint_at_t(k2t(k)) for k in range(nr_parts + 1)] + return(points, self.length - points[-1].c_dist) diff --git a/extensions/fablabchemnitz/box_maker_elliptical_box/inkscape_helper/Line.py b/extensions/fablabchemnitz/box_maker_elliptical_box/inkscape_helper/Line.py new file mode 100644 index 00000000..a64a88dc --- /dev/null +++ b/extensions/fablabchemnitz/box_maker_elliptical_box/inkscape_helper/Line.py @@ -0,0 +1,25 @@ +from inkscape_helper.PathSegment import * + +class Line(PathSegment): + + def __init__(self, start, end): + self.start = start + self.end = end + self.pp = lambda t : PathPoint(t, self.start + t * (self.end - self.start), self.end - self.start, 0, t * self.length) + + @property + def length(self): + return (self.end - self.start).r + + def subdivide(self, part_length, start_offset=0): # note: start_offset should be smaller than part_length + nr_parts = int((self.length - start_offset) // part_length) + k_o = start_offset / self.length + k2t = lambda k : k_o + k * part_length / self.length + points = [self.pp(k2t(k)) for k in range(nr_parts + 1)] + return(points, self.length - points[-1].c_dist) + + def pathpoint_at_t(self, t): + return self.pp(t) + + def t_at_length(self, length): + return length / self.length diff --git a/extensions/fablabchemnitz/box_maker_elliptical_box/inkscape_helper/Matrix.py b/extensions/fablabchemnitz/box_maker_elliptical_box/inkscape_helper/Matrix.py new file mode 100644 index 00000000..188ef276 --- /dev/null +++ b/extensions/fablabchemnitz/box_maker_elliptical_box/inkscape_helper/Matrix.py @@ -0,0 +1,49 @@ +import copy + +class Matrix(object): + """ + Matrix class with some basic matrix operations + """ + def __init__(self, array): + columns = len(array[0]) + for r in array[1:]: #make sure each row has same number of columns + assert len(r) == columns + + self.array = copy.copy(array) + self.rows = len(array) + self.columns = columns + + def __repr__(self): + return self.__str__() + + def __str__(self): + a = ['[' + ', '.join([str(i) for i in r]) + ']' for r in self.array] + return '[\n' + ',\n'.join(a) + '\n]' + + def minor(self, row, col): + return Matrix([[self[r][c] for c in range(self.columns) if c != col] for r in range(self.rows) if r != row]) + + def det(self): + if self.rows != self.columns: + raise TypeError, 'Can only calculate determinant for a square matrix' + if self.rows == 1: + return self[0][0] + if self.rows == 2: + return self[0][0] * self[1][1] - self[0][1] * self[1][0] + det = 0 + for i in range(self.columns): + det += (-1)**i * self.array[0][i] * self.minor(0, i).det() + return det + + def __getitem__(self, index): + return self.array[index] + + def __add__(self, other): + if self.rows != other.rows or self.columns != other.columns: + raise TypeError, 'Both matrices should have equal dimensions. Is ({} x {}) and ({} x {}).'.format(self.rows, self.columns, other.rows, other.columns) + return Matrix([[self[r][c] + other[r][c] for c in range(self.columns)] for r in range(self.rows)]) + + def __mul__(self, other): + if self.columns != other.rows: + raise TypeError, 'Left matrix should have same number of columns as right matrix has rows. Is ({} x {}) and ({} x {}).'.format(self.rows, self.columns, other.rows, other.columns) + return Matrix([[sum([self[r][i] * other[i][c] for i in range(self.columns)]) for c in range(other.columns)] for r in range(self.rows)]) diff --git a/extensions/fablabchemnitz/box_maker_elliptical_box/inkscape_helper/PathSegment.py b/extensions/fablabchemnitz/box_maker_elliptical_box/inkscape_helper/PathSegment.py new file mode 100644 index 00000000..38673ab1 --- /dev/null +++ b/extensions/fablabchemnitz/box_maker_elliptical_box/inkscape_helper/PathSegment.py @@ -0,0 +1,29 @@ +from collections import namedtuple + +PathPoint = namedtuple('PathPoint', 't coord tangent curvature c_dist') + +class PathSegment(object): + + def __init__(self): + raise NotImplementedError + + @property + def lenth(self): + raise NotImplementedError + + def subdivide(self, part_length): + raise NotImplementedError + + def pathpoint_at_t(self, t): + raise NotImplementedError + + def t_at_length(self, length): + raise NotImplementedError + + # also need: + + # find a way do do curvature dependent spacing + # - based on deviation from a standard radius? + # - or ratio between thickness and curvature? + #def point_at_distance(d): + # pass diff --git a/extensions/fablabchemnitz/box_maker_elliptical_box/inkscape_helper/SVG.py b/extensions/fablabchemnitz/box_maker_elliptical_box/inkscape_helper/SVG.py new file mode 100644 index 00000000..e3a300fe --- /dev/null +++ b/extensions/fablabchemnitz/box_maker_elliptical_box/inkscape_helper/SVG.py @@ -0,0 +1,93 @@ +import inkex +import simplestyle +from lxml import etree + +def _format_1st(command, is_absolute): + """Small helper function for the Path class""" + return command.upper() if is_absolute else command.lower() + +default_style = str(inkex.Style( + {'stroke': '#000000', + 'stroke-width': '0.1', + 'fill': 'none' + })) + +red_style = str(inkex.Style( + {'stroke': '#FF0000', + 'stroke-width': '0.1', + 'fill': 'none' + })) + +green_style = str(inkex.Style( + {'stroke': '#00FF00', + 'stroke-width': '0.1', + 'fill': 'none' + })) + +blue_style = str(inkex.Style( + {'stroke': '#0000FF', + 'stroke-width': '0.1', + 'fill': 'none' + })) + +def layer(parent, layer_name): + layer = etree.SubElement(parent, 'g') + layer.set(inkex.addNS('label', 'inkscape'), layer_name) + layer.set(inkex.addNS('groupmode', 'inkscape'), 'layer') + return layer + +def group(parent): + return etree.SubElement(parent, 'g') + +def text(parent, coordinate, txt, style=default_style): + text = etree.Element(inkex.addNS('text', 'svg')) + text.text = txt + text.set('x', str(coordinate.x)) + text.set('y', str(coordinate.y)) + style = {'text-align': 'center', 'text-anchor': 'middle'} + text.set('style', str(inkex.Style(style))) + parent.append(text) + +class Path(object): + """ + Generates SVG paths + """ + def __init__(self): + self.nodes = [] + + def move_to(self, coord, absolute=False): + self.nodes.append("{0} {1} {2}".format(_format_1st('m', absolute), coord.x, coord.y)) + + def line_to(self, coord, absolute=False): + self.nodes.append("{0} {1} {2}".format(_format_1st('l', absolute), coord.x, coord.y)) + + def h_line_to(self, dist, absolute=False): + self.nodes.append("{0} {1}".format(_format_1st('h', absolute), dist)) + + def v_line_to(self, dist, absolute=False): + self.nodes.append("{0} {1}".format(_format_1st('v', absolute), dist)) + + def arc_to(self, radius, coord, rotation=0, pos_sweep=True, large_arc=False, absolute=False): + self.nodes.append("{0} {1} {2} {3} {4} {5} {6} {7}" + .format(_format_1st('a', absolute), radius.x, radius.y, rotation, + 1 if large_arc else 0, 1 if pos_sweep else 0, coord.x, coord.y)) + + def close(self): + self.nodes.append('z') + + def path(self, parent, style=default_style): + attribs = {'style': style, + 'd': ' '.join(self.nodes)} + etree.SubElement(parent, inkex.addNS('path', 'svg'), attribs) + + def curve(self, parent, segments, style, closed=True): + pathStr = ' '.join(segments) + if closed: + pathStr += ' z' + attributes = { + 'style': style, + 'd': pathStr} + etree.SubElement(parent, inkex.addNS('path', 'svg'), attributes) + + def remove_last(self): + self.nodes.pop() diff --git a/extensions/fablabchemnitz/box_maker_elliptical_box/inkscape_helper/__init__.py b/extensions/fablabchemnitz/box_maker_elliptical_box/inkscape_helper/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/extensions/fablabchemnitz/box_maker_elliptical_cone/.gitignore b/extensions/fablabchemnitz/box_maker_elliptical_cone/.gitignore new file mode 100644 index 00000000..6b112149 --- /dev/null +++ b/extensions/fablabchemnitz/box_maker_elliptical_cone/.gitignore @@ -0,0 +1 @@ +/DebugEllConicBox.txt diff --git a/extensions/fablabchemnitz/box_maker_elliptical_cone/box_maker_elliptical_cone.inx b/extensions/fablabchemnitz/box_maker_elliptical_cone/box_maker_elliptical_cone.inx new file mode 100644 index 00000000..94c79e2c --- /dev/null +++ b/extensions/fablabchemnitz/box_maker_elliptical_cone/box_maker_elliptical_cone.inx @@ -0,0 +1,37 @@ + + + Box Maker - Elliptical Cone + fablabchemnitz.de.box_maker_elliptical_cone + + + + + + + + + + + + + 3.0 + 60.0 + 90.0 + 0.5 + 50.0 + 2 + 0 + true + true + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/box_maker_elliptical_cone/box_maker_elliptical_cone.py b/extensions/fablabchemnitz/box_maker_elliptical_cone/box_maker_elliptical_cone.py new file mode 100644 index 00000000..8c4a8f8d --- /dev/null +++ b/extensions/fablabchemnitz/box_maker_elliptical_cone/box_maker_elliptical_cone.py @@ -0,0 +1,703 @@ +#!/usr/bin/env python3 +import inkex +import math +import numpy as np +from lxml import etree + +sizeTab = 10000 #Any value greater than 1000 should give goo results + +objStyle = str(inkex.Style( + {'stroke': '#000000', + 'stroke-width': 0.1, + 'fill': 'none' + })) + + +objStyleStart = str(inkex.Style( + {'stroke': '#FF0000', + 'stroke-width': 0.1, + 'fill': 'none' + })) + +def lengthCurve(Xarray, Yarray, npoints): + ''' + Give length of a path between point of a curve + Beware, go from 0 to Index included, so the arrays should have at least npoints+1 elements + ''' + x = Xarray[0] + y = Yarray[0] + Length = 0.0 + i = 1 + while i <= npoints: + Length += math.hypot((Xarray[i] - x), (Yarray[i] - y)) + x = Xarray[i] + y = Yarray[i] + i += 1 + return Length + +class inkcape_polar: + def __init__(self, Offset, group): + self.offsetX = Offset[0] + self.offsetY = Offset[1] + self.Path = '' + self.group = group + + def MoveTo(self, r, angle): + #Return string for moving to point given as parameter, with polar coordinates radius, angle + self.Path += ' M ' + str(round(r*math.cos(angle)-self.offsetX, 3)) + ',' + str(round(r*math.sin(angle)-self.offsetY, 3)) + + def MoveTo_cartesian(self, pt): + #Return string for moving to point given as parameter + self.Path += ' M ' + str(round(pt[0]-self.offsetX, 3)) + ',' + str(round(pt[1]-self.offsetY, 3)) + + + def LineTo_cartesian(self, pt): + #Return string for moving to point given as parameter + self.Path += ' L ' + str(round(pt[0]-self.offsetX, 3)) + ',' + str(round(pt[1]-self.offsetY, 3)) + + def LineTo(self, r, angle): + #Retourne chaine de caractères donnant la position du point avec des coordonnées polaires + self.Path += ' L ' + str(round(r*math.cos(angle)-self.offsetX, 3)) + ',' + str(round(r*math.sin(angle)-self.offsetY, 3)) + + def Line(self, r1, angle1, r2, angle2): + #Retourne chaine de caractères donnant la position du point avec des coordonnées polaires + self.Path += ' M ' + str(round(r1*math.cos(angle1)-self.offsetX, 3)) + ',' + str(round(r1*math.sin(angle1)-self.offsetY, 3)) + ' L ' + str(round(r2*math.cos(angle2)-self.offsetX, 3)) + ',' + str(round(r2*math.sin(angle2)-self.offsetY, 3)) + + def GenPath(self): + line_attribs = {'style': objStyle, 'd': self.Path} + etree.SubElement(self.group, inkex.addNS('path', 'svg'), line_attribs) + +class BoxMakerEllipticalCone(inkex.EffectExtension): + """ + Creates a new layer with the drawings for a parametrically generaded box. + """ + def __init__(self): + inkex.Effect.__init__(self) + self.knownUnits = ['in', 'pt', 'px', 'mm', 'cm', 'm', 'km', 'pc', 'yd', 'ft'] + self.arg_parser.add_argument('--unit', default = 'mm', help = 'Unit, should be one of ') + self.arg_parser.add_argument('--thickness', type = float, default = '3.0', help = 'Material thickness') + self.arg_parser.add_argument('--d1', type = float, default = '50.0', help = 'Small ellipse diameter') + self.arg_parser.add_argument('--d2', type = float, default = '100.0', help = 'Large ellipse diameter') + self.arg_parser.add_argument('--eccentricity', type = float, default = '1.0', help = 'Ratio minor vs major axis, should be less than 1') + self.arg_parser.add_argument('--zc', type = float, default = '50.0', help = 'Cone height') + self.arg_parser.add_argument('--notch_interval', type = int, default = '2', help = 'Interval between notches, should be even') + self.arg_parser.add_argument('--cut_position', type = int, default = '0', help = 'Cut position angle') + self.arg_parser.add_argument('--inner_size', type = inkex.Boolean, default = 'true', help = 'Dimensions are internal') + self.arg_parser.add_argument('--Mode_Debug', type = inkex.Boolean, default = 'false', help = 'Output Debug information in file') + + # Create list of points for the ellipse, will be filled later + self.xEllipse = np.zeros(sizeTab+1) #X coordiantes + self.yEllipse = np.zeros(sizeTab+1) # Y coordinates + self.lEllipse = np.zeros(sizeTab+1) # Length of curve until this point + + def unittouu(self, unit): + return inkex.unittouu(unit) + + def DebugMsg(self, s): + if self.fDebug: + self.fDebug.write(s) + + def length2Angle(self, StartIdx, Position): + ''' + Return the first index which is near the requested position. + Start search at StartIdx to optimize computation + ''' + while Position > self.lEllipse[StartIdx]: + StartIdx += 1 + if StartIdx >= sizeTab: + return sizeTab + # Now return value between StartIdx and StartIdx - 1 which is nearer + if StartIdx == 0: + return 0 + if abs(Position - self.lEllipse[StartIdx]) > abs(Position - self.lEllipse[StartIdx-1]): + return StartIdx - 1 + return StartIdx + + def ellipse_ext(self, a, b, alpha, e): + ''' + Compute the point which is on line orthogonal to ellipse (a, b) and angle alpha and on the ellipse of parameters ( a+e, b+e) + As equations are quite complex, use an approximation method + ''' + Slope = math.atan2(b*math.cos(alpha), -a*math.sin(alpha)) #Ellipse slope in point at angle alpha + Ortho = Slope - math.pi/2 # Use -pi/2 because e positive means second ellipse larger + ''' The point is on the line x = a*cos(alpha) + L*cos(Ortho), y= b*sin(alpha) + L*sin(Ortho) + We have to determine L + For this, change L and compare with equation of larger ellipse + Start with L = e + Result should lie between L/2 and 2L + ''' + #self.DebugMsg("Enter ellipse_ext"+str((a,b,alpha,e))+" Slope="+str(Slope*180/math.pi)+" Ortho="+str(Ortho*180/math.pi)+'\n') + L = e + step = e + ntry = 1 + x = a*math.cos(alpha) + L*math.cos(Ortho) + y = b*math.sin(alpha) + L*math.sin(Ortho) + # Compute difference which the error between this point and the large ellipse + distance = (x*x)/((a+e)*(a+e)) + (y*y)/((b+e)*(b+e)) - 1 + #self.DebugMsg("ellipse_ext First try with L=e pt="+str((x,y))+" distance="+str(distance)+'\n') + while abs(distance) > 0.001 and step >0.001: + if distance > 0: + #L is too large, decrease by step/2 + step /= 2 + L -= step + else: + #L is not large enough, increase by step/2 + step /= 2 + L += step + ntry += 1 + x = a*math.cos(alpha) + L*math.cos(Ortho) + y = b*math.sin(alpha) + L*math.sin(Ortho) + # Compute difference which the error between this point and the large ellipse + distance = (x*x)/((a+e)*(a+e)) + (y*y)/((b+e)*(b+e)) - 1 + #self.DebugMsg(" try "+str(ntry)+" with L="+str(L)+" pt="+str((x,y))+" distance="+str(distance)+'\n') + if distance > 0.001: + self.DebugMsg("Problem, solution do not converge. Error is "+str(distance)+" after "+str(ntry)+" tries\n") + return(x, y) + #self.DebugMsg("Solution converge after "+str(ntry)+" tries. Error is "+str(distance)+"\n") + return(x, y) + + def Coordinates_Step_SubStep(self, step, substep): + ''' + Return the radius and angle on resulting curve for step i, substep j + ''' + if step == self.num_notches: + # Specific case for last notch on curve + if substep == 0: #Last position on curve + return (self.ResultingCurve_R[sizeTab], self.ResultingCurve_Theta[sizeTab]) + else: + AngleEllipse = self.Notches_Angle_ellipse[self.Offset_Notch][1] - self.Offset_Ellipse #To match first step + if AngleEllipse < 0: + AngleEllipse += sizeTab + return(self.ResultingCurve_R[AngleEllipse], self.ResultingCurve_Theta[AngleEllipse]+self.ResultingCurve_Theta[sizeTab]) + new_step = step + self.Offset_Notch + if new_step >= self.num_notches: + new_step -= self.num_notches + AngleEllipse = self.Notches_Angle_ellipse[new_step][substep] - self.Offset_Ellipse + if AngleEllipse < 0: + AngleEllipse += sizeTab + if substep == 0 or step == 0: + self.DebugMsg("Coordinates_Step_SubStep"+str((step, substep))+" --> AngleEllipse ="+str(self.Notches_Angle_ellipse[new_step][substep])+" --> "+str(AngleEllipse)+" Result="+str((self.ResultingCurve_R[AngleEllipse], self.ResultingCurve_Theta[AngleEllipse]))+'\n') + + return (self.ResultingCurve_R[AngleEllipse], self.ResultingCurve_Theta[AngleEllipse]) + + def gen_flex_step(self, index_step): + ''' + Draw a flex step. Each step has N + 2 vertical lines where N is the distance between notches. + The notch itself is 2 mm (roughly) large, the whole notch is N+2 mm large + ''' + #Each step is a path for inkscape + path = inkcape_polar(self.Offset, self.group) + # first draw the line between next notch and current one + R, angle = self.Coordinates_Step_SubStep(index_step+1, 0) + self.DebugMsg("gen_flex_step("+str(index_step)+") : MoveTo("+str((R, 180*angle/math.pi))+'\n') + path.MoveTo(R, angle) + R, angle = self.Coordinates_Step_SubStep(index_step, 2) + path.LineTo(R, angle) + self.DebugMsg(" From next notch, LineTo("+str((R, 180*angle/math.pi))+'\n') + # Then the notch, starting internal to external + # Compute radius to largest ellipse + R2 = R * self.large_ell_a / self.small_ell_a + # The short vertical line begins at (R2 - R)/2/NbVerticalLines - 1 + v = (R2-R)/2/self.nbVerticalLines - 1 + path.Line(R+v, angle, R-self.thickness, angle) + self.DebugMsg(" Int notch, LineFrom("+str((R+v, 180*angle/math.pi))+" to "+str((R-self.thickness, 180*angle/math.pi))+" v="+str(v)+'\n') + # Then notch (internal side) + R, angle = self.Coordinates_Step_SubStep(index_step, 0) + path.LineTo(R-self.thickness, angle) + self.DebugMsg(" Int notch, LineTo "+str((R-self.thickness, 180*angle/math.pi))+'\n') + # Compute radius to largest ellipse + R2 = R * self.large_ell_a / self.small_ell_a + # The short vertical line ends at (R2 - R)/2/NbVerticalLines - 1 + v = (R2-R)/2/self.nbVerticalLines - 1 + v2 = (R2-R)/self.nbVerticalLines - 2 + path.LineTo(v + R , angle) + self.DebugMsg(" notch, LineTo "+str((R+v, 180*angle/math.pi))+" v ="+str(v)+" v2="+str(v2)+'\n') + # Now draw N-1 vertical lines, size v2 + for i in range(self.nbVerticalLines-1): + path.Line(i*(v2+2)+v+2+R, angle, (i+1)*(v2+2)+v+R, angle) + self.DebugMsg(" Vertical lines_1 , Line from "+str((i*(v2+2)+v+2+R, 180*angle/math.pi))+" to "+str(((i+1)*(v2+2)+v+R, 180*angle/math.pi))+'\n') + # Then external notch + path.Line((i+1)*(v2+2)+v+R+2, angle, R2 + self.thickness, angle) + self.DebugMsg(" Ext_notch , Line from "+str(((i+1)*(v2+2)+v+R+2, 180*angle/math.pi))+" to "+str((R2 + self.thickness, 180*angle/math.pi))+'\n') + R, angle = self.Coordinates_Step_SubStep(index_step, 2) + R21 = R * self.large_ell_a / self.small_ell_a + path.LineTo(R21+self.thickness, angle) + self.DebugMsg(" Ext notch, LineTo "+str((R21+self.thickness, 180*angle/math.pi))+'\n') + R01, angle2 = self.Coordinates_Step_SubStep(index_step+1, 0) + R21 = R01 * self.large_ell_a / self.small_ell_a + # Then return + v = (R2-R)/2/self.nbVerticalLines - 1 + v2 = (R2-R)/self.nbVerticalLines - 2 + path.LineTo(R2-v, angle) + self.DebugMsg(" Ext notch, LineTo "+str((R2-v, 180*angle/math.pi))+" v="+str(v)+" v2="+str(v2)+'\n') + #Line to next notch (external) + path.Line(R2, angle, R21, angle2) + self.DebugMsg(" To next notch, Line From "+str((R21, 180*angle/math.pi))+" To "+str((R2, 180*angle2/math.pi))+'\n') + # Now draw N-1 vertical lines + for i in range(self.nbVerticalLines-2, -1, -1): + path.Line((i+1)*(v2+2)+v+R, angle, i*(v2+2)+v+2+R, angle) + self.DebugMsg(" Vertical lines_2 , Line from "+str(((i+1)*v2+R+v+1, 180*angle/math.pi))+" to "+str((i*(v2+2)+v+2+R, 180*angle/math.pi))+'\n') + # Then draw nbVerticalLines inside notch, "top" to "bottom" + R, angle = self.Coordinates_Step_SubStep(index_step, 1) + v2 = (R2-R)/self.nbVerticalLines - 2 + for i in range(self.nbVerticalLines): + if i == 0: + path.Line(R-self.thickness+1, angle, R+v2+1, angle) + self.DebugMsg(" Vertical lines_3 , Line from "+str((R-self.thickness+1, 180*angle/math.pi))+" to "+str((R+(i+1)*(v2+2)-1, 180*angle/math.pi))+'\n') + elif i == self.nbVerticalLines - 1: + path.Line(R+i*(v2+2)+1, angle, R2 + self.thickness - 1, angle) + self.DebugMsg(" Vertical lines_3 , Line from "+str((R+i*(v2+2)+1, 180*angle/math.pi))+" to "+str((R2 + self.thickness - 1, 180*angle/math.pi))+'\n') + else: + path.Line(R+i*(v2+2)+1, angle, R+(i+1)*(v2+2)-1, angle) + self.DebugMsg(" Vertical lines_3 , Line from "+str((R+i*(v2+2)+1, 180*angle/math.pi))+" to "+str((R+(i+1)*(v2+2)-1, 180*angle/math.pi))+'\n') + # Then notch_interval set of nbVerticalLines + # + for line in range(1, self.options.notch_interval): + R, angle = self.Coordinates_Step_SubStep(index_step, line+2) + v = (R2-R)/2/self.nbVerticalLines - 1 + v2 = (R2-R)/self.nbVerticalLines - 2 + if line % 2 == 0: + #line is even, draw nbVerticalLines top to bottom + for i in range(self.nbVerticalLines): + path.Line(R+i*(v2+2)+1, angle, R+(i+1)*(v2+2)-1, angle) + self.DebugMsg(" Vertical lines_4_0 , Line from "+str((R+i*(v2+2)+1, 180*angle/math.pi))+" to "+str((R+(i+1)*(v2+2)-1, 180*angle/math.pi))+'\n') + else: + # line is odd, draw bottom to top, first line half size + path.Line(R2 - 1, angle, R2 - v, angle) + # then nbVerticalLines - 1 lines + for i in range(self.nbVerticalLines-2, -1, -1): + path.Line((i+1)*(v2+2)+v+R, angle, i*(v2+2)+v+2+R, angle) + #and at last, one vertical line half size + path.Line(v+R, angle, R+1, angle) + path.GenPath() + + def gen_flex_first_step(self): + ''' + Draw the first step flex. + This specific step has a notch which is only 1mm (roughly) wide, because first and last step shoul lie in same notch + This has step has N + 2 vertical lines where N is the distance between notches. + ''' + #Each step is a path for inkscape + path = inkcape_polar(self.Offset, self.group) + # first draw the line between next notch and current one + R, angle = self.Coordinates_Step_SubStep(1, 0) # Position of next step, which is 1 + self.DebugMsg("gen_first_flex_step : MoveTo("+str((R, 180*angle/math.pi))+'\n') + path.MoveTo(R, angle) + R, angle = self.Coordinates_Step_SubStep(0, 2) + path.LineTo(R, angle) + self.DebugMsg(" From next notch, LineTo("+str((R, 180*angle/math.pi))+'\n') + # Then the notch, starting internal to external + # Compute radius to largest ellipse + R2 = R * self.large_ell_a / self.small_ell_a + # The short vertical line begins at (R2 - R)/2/NbVerticalLines - 1 + v = (R2-R)/2/self.nbVerticalLines - 1 + path.Line(R+v, angle, R-self.thickness, angle) + self.DebugMsg(" Int notch, LineFrom("+str((R+v, 180*angle/math.pi))+" to "+str((R-self.thickness, 180*angle/math.pi))+" v="+str(v)+'\n') + # Then notch (internal side) + R, angle = self.Coordinates_Step_SubStep(0, 1) + path.LineTo(R-self.thickness, angle) + self.DebugMsg(" Int notch, LineTo "+str((R-self.thickness, 180*angle/math.pi))+'\n') + # Compute radius to largest ellipse + R2 = R * self.large_ell_a / self.small_ell_a + # Then edge, full line towards R2 + path.LineTo(R2+self.thickness , angle) + self.DebugMsg(" edge, LineTo "+str((R2, 180*angle/math.pi))+'\n') + R, angle = self.Coordinates_Step_SubStep(0, 2) + R21 = R * self.large_ell_a / self.small_ell_a + path.LineTo(R21+self.thickness, angle) + self.DebugMsg(" Ext notch, LineTo "+str((R21+self.thickness, 180*angle/math.pi))+'\n') + R01, angle2 = self.Coordinates_Step_SubStep(1, 0) + R21 = R01 * self.large_ell_a / self.small_ell_a + # Then return + v = (R2-R)/2/self.nbVerticalLines - 1 + v2 = (R2-R)/self.nbVerticalLines - 2 + path.LineTo(R2-v, angle) + self.DebugMsg(" Ext notch, LineTo "+str((R2-v, 180*angle/math.pi))+" v="+str(v)+" v2="+str(v2)+'\n') + #Line to next notch (external) + path.Line(R2, angle, R21, angle2) + self.DebugMsg(" To next notch, Line From "+str((R21, 180*angle/math.pi))+" To "+str((R2, 180*angle2/math.pi))+'\n') + # Now draw N-1 vertical lines + for i in range(self.nbVerticalLines-2, -1, -1): + path.Line((i+1)*(v2+2)+v+R, angle, i*(v2+2)+v+2+R, angle) + self.DebugMsg(" Vertical lines_2 , Line from "+str(((i+1)*v2+R+v+1, 180*angle/math.pi))+" to "+str((i*(v2+2)+v+2+R, 180*angle/math.pi))+'\n') + # Then notch_interval -1 or +1 set of nbVerticalLines + if self.options.notch_interval == 2: + numstep = 3 + else: + numstep = self.options.notch_interval - 1 + for line in range(1, numstep): + R, angle = self.Coordinates_Step_SubStep(0, line+2) + v = (R2-R)/2/self.nbVerticalLines - 1 + v2 = (R2-R)/self.nbVerticalLines - 2 + if line % 2 == 0: + #line is even, draw nbVerticalLines top to bottom + for i in range(self.nbVerticalLines): + path.Line(R+i*(v2+2)+1, angle, R+(i+1)*(v2+2)-1, angle) + self.DebugMsg(" Vertical lines_4_0 , Line from "+str((R+i*(v2+2)+1, 180*angle/math.pi))+" to "+str((R+(i+1)*(v2+2)-1, 180*angle/math.pi))+'\n') + else: + # line is odd, draw bottom to top, first line half size + path.Line(R2 - 1, angle, R2 - v, angle) + # then nbVerticalLines - 1 lines + for i in range(self.nbVerticalLines-2, -1, -1): + path.Line((i+1)*(v2+2)+v+R, angle, i*(v2+2)+v+2+R, angle) + #and at last, one vertical line half size + path.Line(v+R, angle, R+1, angle) + path.GenPath() + + def gen_flex_last_step(self): + ''' + Draw the last step flex. + This specific step has a notch which is only 1mm (roughly) wide, because first and last step shoul lie in same notch + This is a very simple step, with only the narrow notch + ''' + #Each step is a path for inkscape + path = inkcape_polar(self.Offset, self.group) + # Then the notch, starting internal to external + R, angle = self.Coordinates_Step_SubStep(self.num_notches, 0) + # Compute radius to largest ellipse + R2 = R * self.large_ell_a / self.small_ell_a + # The short vertical line begins at (R2 - R)/2/NbVerticalLines - 1 + v = (R2-R)/2/self.nbVerticalLines - 1 + path.Line(R+v, angle, R-self.thickness, angle) + self.DebugMsg("GenLast_Step, LineFrom("+str((R+v, 180*angle/math.pi))+" to "+str((R-self.thickness, 180*angle/math.pi))+" v="+str(v)+'\n') + # Then notch (internal side) + R, angle = self.Coordinates_Step_SubStep(self.num_notches, 1) + path.LineTo(R-self.thickness, angle) + self.DebugMsg(" Last notch, LineTo "+str((R-self.thickness, 180*angle/math.pi))+'\n') + # Compute radius to largest ellipse + R2 = R * self.large_ell_a / self.small_ell_a + # Then edge, full line towards R2 + path.LineTo(R2+self.thickness , angle) + self.DebugMsg(" edge, LineTo "+str((R2, 180*angle/math.pi))+'\n') + R, angle = self.Coordinates_Step_SubStep(self.num_notches, 0) + R21 = R * self.large_ell_a / self.small_ell_a + path.LineTo(R21+self.thickness, angle) + self.DebugMsg(" Ext notch, LineTo "+str((R21+self.thickness, 180*angle/math.pi))+'\n') + # Then return + v = (R2-R)/2/self.nbVerticalLines - 1 + v2 = (R2-R)/self.nbVerticalLines - 2 + path.LineTo(R2-v, angle) + self.DebugMsg(" Ext notch, LineTo "+str((R2-v, 180*angle/math.pi))+" v="+str(v)+" v2="+str(v2)+'\n') + # Now draw N-1 vertical lines + for i in range(self.nbVerticalLines-2, -1, -1): + path.Line((i+1)*(v2+2)+v+R, angle, i*(v2+2)+v+2+R, angle) + self.DebugMsg(" Last Vertical lines_2 , Line from "+str(((i+1)*v2+R+v+1, 180*angle/math.pi))+" to "+str((i*(v2+2)+v+2+R, 180*angle/math.pi))+'\n') + path.GenPath() + + def compute_notches_angle(self): + ''' + Compute the angles associated with each notch + Indeed, do not compute angles, but index in the reference ellipse array. + After this angle could be easily computed by multiplying by 2*pi/sizeTab + For each notch build a list of n+2 angles, corresponding to each step in the notch + 2 steps for the notch itself and n steps as requested between notches + Angles are computed to match length of the small ellipse, length of the larger one will be longer accordingly to size ratio + return an array which will be used for drawing both ellipses and curved surface + ''' + self.Notches_Angle_ellipse = [] + LastIdx = 0 + curPos = 0 + #Compute offset, this is the first notch greater or equal to offset + Delta_i = self.options.cut_position * sizeTab / 360 #expected offset + + self.Offset_Notch = -1 + for iNotch in range(self.num_notches): + # First point is same as end of previous one, do not compute + # Second and third one are 1mm (roughly) farther to make the notch + idx1 = self.length2Angle( LastIdx, (curPos + self.notch_size / ( self.options.notch_interval + 2.0))/self.small_ell_a) + idx2 = self.length2Angle( LastIdx, (curPos + self.notch_size * 2.0 / ( self.options.notch_interval + 2.0))/self.small_ell_a) + # Check if this is the "special notch" + if idx1 >= Delta_i: + self.Offset_Ellipse = LastIdx + self.Offset_Notch = iNotch + Delta_i = sizeTab * 2 # To make sure there is only one match ! + elif self.Offset_Notch < 0 and iNotch >= self.num_notches -1: + #If not found the special notch, this is the last one + self.Offset_Ellipse = LastIdx + self.Offset_Notch = iNotch + current_notch = [LastIdx, idx1, idx2] + #self.DebugMsg("Notch "+str(iNotch)+" First points="+str(current_notch)+'\n') + NumStep = self.options.notch_interval + if iNotch == self.Offset_Notch: + self.DebugMsg("Angle offset="+str(self.options.cut_position)+" Delta notch="+str(self.Offset_Notch)+" Real offset="+str(self.Offset_Ellipse)+'\n') + if NumStep == 2: + NumStep = 3 # In this case, special notch is longer + else: + NumStep -= 1 # In this case, it is shorter + # Now for each remaining steps + for i in range(NumStep): + # Even with specific notch, use self.options.notch_interval to keep global notch_size different + idx = self.length2Angle( LastIdx, (curPos + self.notch_size * (2.0+i+1) / ( self.options.notch_interval + 2.0))/self.small_ell_a) + current_notch.append(idx) # add to the list + LastIdx = idx + curPos = self.lEllipse[idx] * self.small_ell_a + self.Notches_Angle_ellipse.append(current_notch) + if iNotch == self.Offset_Notch: + self.DebugMsg(" Special Notch "+str(iNotch)+" with Numstep="+str(NumStep)+" ="+str(current_notch)+'\n') + + #self.DebugMsg(" Complete Notch "+str(iNotch)+"="+str(current_notch)+'\n') + self.DebugMsg("Angles are computed, last position : "+str(curPos)+'\n') + # Now change position of notch next to Offset to make assembly easier + # if notch_interval is 2, add one for this + + + def gen_Resulting_Curve(self): + ''' + Each point from the smallest ellipse will be on a curve defined by + 1) The distance from the cone summit will sqrt(h**2 + a**2*cos(alpha)**2 + b**2*sin(alpha)**2) where h is the cone height (full cone up to summit) + and a and b are the ellipse dimensions. + 2) The distance between two points on the curve should be equal at the distance between two points on the ellipse. + If when on alpha1 on the ellipse the angle on the resulting curbe is Theta1. + When on alpha2 on the ellipse, the angle on the resulting curve will be Theta2, and distance between Point(Theta2), Point(Theta1) will be equal + to distance Point(Alpha1), Point(Alpha2) + 3) Theta=0 on resulting curve should correspond to parameter cut_position on the ellipse. + + ''' + #First compute the cone summit with the dimensions of the two ellipses + # When angle is 0, positions are (small_a, 0) and (large_a,0) + h1 = self.zc*self.small_ell_a/(self.large_ell_a - self.small_ell_a) + self.DebugMsg("gen_Resulting_Curve: height for small ellipse "+str(h1)+" For large one "+str(h1*self.large_ell_a/self.small_ell_a)+'\n') + # Now for each angle (index) in Notches_Angle compute the corresponding Theta angle on the resulting curve and the associated distance (polar coordinates) + # Do the computation with the small ellipse and large ellipse + self.ResultingCurve_R = np.zeros(sizeTab+1) # Distance from center for the small ellipse, once projection is applied + self.ResultingCurve_Theta = np.zeros(sizeTab+1) # Angle on resulting curve, for each point in initial ellipse + LengthResultingCurve = 0 + alpha = (math.pi * 2 / sizeTab) * self.Offset_Ellipse + #Offset to length computation on ellipse + length_Offset = self.lEllipse[self.Offset_Ellipse] + #Compute first point + self.ResultingCurve_R[0] = math.sqrt(h1**2 + self.small_ell_a**2*math.cos(alpha)**2 + self.small_ell_b**2*math.sin(alpha)**2) + self.ResultingCurve_Theta[0] = 0 + oldR = self.ResultingCurve_R[0] + oldX = oldR + oldY = 0 + self.BoundingXmax = oldX + self.BoundingXmin = oldX + self.BoundingYmax = oldY + self.BoundingYmin = oldY + i = 1 + error = 0 + maxError = 0 + maxErrorPos = 0 + while i <= sizeTab: + index_ellipse = i + self.Offset_Ellipse + if index_ellipse > sizeTab: + index_ellipse -= sizeTab + # First radius + alpha = (math.pi * 2 / sizeTab) * index_ellipse + R = math.sqrt(h1**2 + self.small_ell_a**2*math.cos(alpha)**2 + self.small_ell_b**2*math.sin(alpha)**2) + self.ResultingCurve_R[i] = R + # Then angle + # First get distance on ellipse and delta from distance on result curve + if i == sizeTab: #Specific case, whole ellipse + Distance = self.small_ell_a * self.lEllipse[sizeTab] + else: + Distance = self.small_ell_a * (self.lEllipse[index_ellipse] - length_Offset) + if Distance < 0: + Distance += self.lEllipse[sizeTab] * self.small_ell_a + Delta_Distance = Distance - LengthResultingCurve + if i == sizeTab: + self.DebugMsg("gen_Resulting_Curve["+str(i)+"] : oldR="+str(oldR)+" R="+str(R)+" Distance="+str(Distance)+" Delta_Distance="+str(Delta_Distance)+" Compute acos("+str((oldR**2 + R**2 - Delta_Distance**2 ) / (2*oldR*R))+")\n") + dTheta = math.acos((oldR**2 + R**2 - Delta_Distance**2 ) / (2*oldR*R)) + Theta = self.ResultingCurve_Theta[i-1] + dTheta + self.ResultingCurve_Theta[i] = Theta + X = R*math.cos(Theta) + Y = R*math.sin(Theta) + LengthResultingCurve += math.sqrt((X - oldX)**2 + (Y - oldY)**2) + oldR = R + oldX = X + oldY = Y + if self.BoundingXmax < X: + self.BoundingXmax = X + if self.BoundingXmin > X: + self.BoundingXmin = X + if self.BoundingYmax < Y: + self.BoundingYmax = Y + if self.BoundingYmin > Y: + self.BoundingYmin = Y + #self.DebugMsg("Index= "+str(i)+" R= "+str(R)+" Theta= "+str(180*Theta/math.pi)+" Longueur= "+str(LengthResultingCurve)+'\n') + error = abs(Distance - LengthResultingCurve) + if error > maxError: + maxError = error + maxErrorPos = i + self.DebugMsg("New max error reached at index "+str(i)+" Distance Ellipse="+str(Distance)+" on curve="+str(LengthResultingCurve)+" Error="+str(error)+'\n') + i += 1 + + + def gen_ellipse(self, axis_a, axis_b, xOffset, yOffset, parent): + ''' Generate an ellipse with notches as a path. + Ellipse dimensions' are parameters axis_a and axis_b + Notches size gives the exact distance between two notches + Notches number gives the number of notches to be drawed + xOffset and yOffset gives the offset within the inkscape page + Parent gives the parent structure of the path which will be created, most often the inkscape page itself + ''' + group = etree.SubElement(parent, 'g') # Create a group which will hold the ellipse + path = inkcape_polar((xOffset, yOffset), group) + # First point is in (major_axis, 0) + Angle = 0 + idx = 0 + for iNotch in range(self.num_notches): + #Angle on ellipse + angle = (math.pi * 2.0 / sizeTab) * self.Notches_Angle_ellipse[iNotch][0] + # First point is external + pt1 = self.ellipse_ext(axis_a, axis_b, angle, self.thickness) + #Second point is on ellipse at angle given by Notches_Angle_ellipse + pt2 = (axis_a*math.cos(angle), axis_b*math.sin(angle)) + #Third point is on ellipse at angle with substep=2 + angle1 = (math.pi * 2.0 / sizeTab) * self.Notches_Angle_ellipse[iNotch][2] + pt3 = (axis_a*math.cos(angle1), axis_b*math.sin(angle1)) + #Fourth point is external + pt4 = self.ellipse_ext(axis_a, axis_b, angle1, self.thickness) + if iNotch == 0: + #Specific case, use MoveTo + path.MoveTo_cartesian(pt1) + else: + #Draw line from previous fourth point + path.LineTo_cartesian(pt1) + #Then pt1 --> pt2 + path.LineTo_cartesian(pt2) + #Then pt2 --> pt3 + path.LineTo_cartesian(pt3) + #And at last pt3 --> pt4 + path.LineTo_cartesian(pt4) + self.DebugMsg("Draw Ellipse, notch "+str(iNotch)+" Pts="+str([pt1, pt2, pt3, pt4])+'\n') + #Last line will be drawed with next notch + #For the last one + path.LineTo_cartesian((axis_a+self.thickness, 0)) + path.GenPath() + + def gen_flex(self, xOffset, yOffset, parent): + group = etree.SubElement(parent, 'g') + self.group = group + self.Offset = (xOffset, yOffset) + #Compute number of vertical lines, depends on cone's height + R = self.ResultingCurve_R[0] + R2 = self.large_ell_a / self.small_ell_a * self.ResultingCurve_R[0] + if R2 - R > 60: + self.nbVerticalLines = int((R2 - R)/25) + else: + self.nbVerticalLines = 2 + self.DebugMsg("Starting gen flex with "+str(self.nbVerticalLines)+" vertical lines R1="+str(R)+" R2="+str(R2)+ "R2-R1="+str(R2-R)+"\n") + # First start step + self.gen_flex_first_step() + # Then middle steps + for step in range(1, self.num_notches): + self.gen_flex_step(step) + # and alst one, (very short) + self.gen_flex_last_step() + + def effect(self): + """ + Draws an elliptical conic box, based on provided parameters + """ + + # input sanity check + error = False + if self.options.zc < 15: + inkex.errormsg('Error: Cone height should be at least 15mm') + error = True + + if self.options.d1 < 30: + inkex.errormsg('Error: d1 should be at least 30mm') + error = True + + if self.options.d2 < self.options.d1 + 0.009999: + inkex.errormsg('Error: d2 should be at d1 + 0.01mm') + error = True + + if self.options.eccentricity > 1.0 or self.options.eccentricity < 0.01: + inkex.errormsg('Ratio minor axis / major axis should be between 0.01 and 1.0') + error = True + + if self.options.notch_interval > 10: + inkex.errormsg('Distance between notches should be less than 10') + error = True + + if self.options.thickness < 1 or self.options.thickness > 10: + inkex.errormsg('Error: thickness should be at least 1mm and less than 10mm') + error = True + + if error: + exit() + + # convert units + unit = self.options.unit + self.small_ell_a = round(0.5 * self.svg.unittouu(str(self.options.d1) + unit), 2) + self.large_ell_a = round(0.5 * self.svg.unittouu(str(self.options.d2) + unit), 2) + self.zc = self.svg.unittouu(str(self.options.zc) + unit) + self.thickness = self.svg.unittouu(str(self.options.thickness) + unit) + if self.options.notch_interval % 2: + #Should be even ! + self.options.notch_interval += 1 + # If dimensions are external, correct d1, d2 and zc by thickness + if self.options.inner_size == False: + self.large_ell_a -= 2*self.thickness + self.d2 -= 2*self.thickness + self.zc -= 2*self.thickness + #Compute minor axes sizes + self.small_ell_b = round(self.small_ell_a * self.options.eccentricity, 2) + self.large_ell_b = round(self.large_ell_a * self.options.eccentricity, 2) + + svg = self.document.getroot() + docWidth = self.svg.unittouu(svg.get('width')) + docHeight = self.svg.unittouu(svg.attrib['height']) + + # Open Debug file if requested + if self.options.Mode_Debug: + try: + self.fDebug = open( 'DebugEllConicBox.txt', 'w') + except IOError: + print ('cannot open debug output file') + self.DebugMsg("Start processing, doc size="+str((docWidth, docHeight))+"\n") + + + layer = etree.SubElement(svg, 'g') + layer.set(inkex.addNS('label', 'inkscape'), 'Conical Box') + layer.set(inkex.addNS('groupmode', 'inkscape'), 'layer') + #Create reference ellipse points. + self.xEllipse[0] = 1 + self.yEllipse[0] = 0 + self.lEllipse[0] = 0 + i = 1 + while i <= sizeTab: + self.xEllipse[i] = math.cos(2*math.pi*i/sizeTab) # Major axis size : 1 + self.yEllipse[i] = self.options.eccentricity*math.sin(2*math.pi*i/sizeTab) # Minor axis size + self.lEllipse[i] = self.lEllipse[i-1] + math.hypot( self.xEllipse[i] - self.xEllipse[i-1], self.yEllipse[i] - self.yEllipse[i-1]) + i += 1 + + + # Compute notches size of small ellipse + Ell_Length = self.small_ell_a * self.lEllipse[sizeTab] + # One notch is different to make assembly easier, as the notch on flex are NOT evenly spaced + if self.options.notch_interval == 2: + self.num_notches = int(round((Ell_Length - self.options.notch_interval - 3) / (2.0 + self.options.notch_interval)+1)) + self.notch_size = Ell_Length / (self.num_notches -1 + (self.options.notch_interval+3.0)/(self.options.notch_interval+2.0)) + else: + self.num_notches = int(round((Ell_Length - self.options.notch_interval - 1) / (2.0 + self.options.notch_interval)+1)) + self.notch_size = Ell_Length / (self.num_notches -1 + (self.options.notch_interval+1.0)/(self.options.notch_interval+2.0)) + self.DebugMsg("Small ellipse dimensions a ="+str(self.small_ell_a)+" b="+str(self.small_ell_b)+" Length ="+str(Ell_Length)+'\n') + self.DebugMsg("Number of notches : "+str(self.num_notches)+" Real notch size="+str(self.notch_size)+'\n') + #Compute angles of all points which be drawed + self.compute_notches_angle() + #Then draw small ellipse + self.gen_ellipse(self.small_ell_a, self.small_ell_b, -self.small_ell_a - self.thickness - 1, -self.small_ell_b - self.thickness - 1, layer) + # Then large one + self.gen_ellipse(self.large_ell_a, self.large_ell_b, -self.large_ell_a-2*self.small_ell_a - 3*self.thickness - 5, -self.large_ell_b - self.thickness - 1, layer) + # Compute points on resulting curve + self.gen_Resulting_Curve() + # Then generate flex + # Bounding box of flex has been computed in gen_Resulting_Curve + self.DebugMsg("Flex bounding box : "+str((self.BoundingXmin, self.BoundingYmin))+","+str((self.BoundingXmax, self.BoundingYmax))+'\n') + # yOffset is below large ellipse + yOffset = -2*(self.large_ell_b+self.thickness) - 5 - self.BoundingYmin + # xOffset, center on page + xOffset = 0.5*(self.BoundingXmin + self.BoundingXmax) - 0.5*docWidth + self.DebugMsg("Offset Flex="+str((xOffset, yOffset))+'\n') + self.gen_flex(xOffset, yOffset, layer) + + if self.fDebug: + self.fDebug.close() + +if __name__ == '__main__': + BoxMakerEllipticalCone().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/box_maker_generic_generator/.gitignore b/extensions/fablabchemnitz/box_maker_generic_generator/.gitignore new file mode 100644 index 00000000..f85c5081 --- /dev/null +++ b/extensions/fablabchemnitz/box_maker_generic_generator/.gitignore @@ -0,0 +1 @@ +/DebugGenericBox.txt diff --git a/extensions/fablabchemnitz/box_maker_generic_generator/box_maker_generic_generator.inx b/extensions/fablabchemnitz/box_maker_generic_generator/box_maker_generic_generator.inx new file mode 100644 index 00000000..a4962a54 --- /dev/null +++ b/extensions/fablabchemnitz/box_maker_generic_generator/box_maker_generic_generator.inx @@ -0,0 +1,72 @@ + + + Box Maker - Generic Generator + fablabchemnitz.de.box_maker_generic_generator + + + + + + + + + + + + + + + + 80.0 + 60.0 + 40.0 + 3.0 + 0.1 + + + true + + 10.0 + 10.0 + 10.0 + 10.0 + + + + + + + + + + + + + 20.0 + + 20.0 + true + + + 1 + 1 + + + true + 5.0 + 5.0 + 5.0 + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/box_maker_generic_generator/box_maker_generic_generator.py b/extensions/fablabchemnitz/box_maker_generic_generator/box_maker_generic_generator.py new file mode 100644 index 00000000..6a743bfc --- /dev/null +++ b/extensions/fablabchemnitz/box_maker_generic_generator/box_maker_generic_generator.py @@ -0,0 +1,3056 @@ +#!/usr/bin/env python3 +# We will use the inkex module with the predefined Effect base class. +import inkex +import math +from inkscape_path import * +from lxml import etree + +#Constants defined here +WoodHingeSize = 3 #To be multiplied by thickness +WoodHingeInternalCircle = 2 #To be multiplied by thickness +WoodHingeRect = 1.5 #To be multiplied by thickness + +SteelHingeSpacing = 0.3 +RadiusSteelHingeAxis = 1.3 #Use axis about 2.4mm diameter, I use nails 2.3mmx70mm +MinMove = 1e-2 #Minimum distance betwwen two points (0.01 mm !) + +#Global variables used for the whole program +thickness = 0 +burn = 0 +fDebug = None + +def distance2Points(x0, y0, x1, y1): + return math.sqrt((x1-x0)**2 + (y1-y0)**2) + +def DebugMsg(s): + ''' + Print a debug message into debug file if debug file is defined + ''' + if fDebug: + fDebug.write(s) + +def OpenDebugFile(): + global fDebug + try: + fDebug = open( 'DebugGenericBox.txt', 'w') + except IOError: + pass + DebugMsg("Start processing\n") + +def CloseDebugFile(): + global fDebug + if fDebug: + fDebug.close() + fDebug = None + +def drawHole(path, x0, y0, dx, dy, burn): + ''' + Add a rectangle starting at x0,y0 and with a length dx and width dy to the current path + burn is the burn factor, so actual coordinates are modified by burn/2 + ''' + path.MoveTo(x0+burn/2, y0+burn/2) + path.LineToVRel(dy-burn) + path.LineToHRel(dx-burn) + path.LineToVRel(-dy+burn) + path.LineToHRel(-dx+burn) + + +class Ellipse: + ''' + This class defines some functions that will be used with the coffin style lid + ''' + def __init__(self, a, b): + ''' + a and b are the ellipse parameters + ''' + self.a = a + self.b = b + self.Start = 0 + + def length(self): + ''' + Compute a rather good approwimation of the ellipse length. + Use the formula Ramanujan 2 + ''' + h = (self.a - self.b)*(self.a - self.b)/((self.a + self.b)*(self.a + self.b)) + + l = math.pi*(self.a+self.b)*(1.0 + 3*h/(10.0+math.sqrt(4.0-3*h))) + return l + + def length2Angle(self, l): + ''' + Compute the angle which gives the given length on the ellipse. + The ellipse perimeter couldn't be computed from known functions, so we use a discrete integral computation + In order to save time, this function should be called with increasing value of l, i.e. it doesn't recompute values less than previous parameter l + ''' + CurDistance = PrevDistance = self.LastDistance + index = self.CurPoint + while CurDistance < l and index < self.nPoints: + PrevDistance = CurDistance + Alpha = (index +0.5)* self.StepAngle + self.Start + CurDistance += self.StepAngle*math.sqrt((self.a*math.sin(Alpha))**2 + (self.b*math.cos(Alpha))**2) + index += 1 + #Will stop here, record values + self.LastDistance = CurDistance + self.CurPoint = index + #Interpolate between the last points to increase precision + if CurDistance > PrevDistance: + Delta = (l - PrevDistance)/(CurDistance - PrevDistance)*self.StepAngle + return (index-1)*self.StepAngle + Delta + self.Start + else: + return index*self.StepAngle + self.Start + + def Compute_Ellipse_Params(self, Start, End): + self.length_ellipse = self.length() * (End - Start)/math.pi/2.0 + self.Start = Start + self.End = End + #Compute length between notches, each notch is about 2mm wide, total length is 2*( l_between_notches + 1) + if self.length_ellipse < 80: + self.l_between_notches = 1 + elif self.length_ellipse < 150: + self.l_between_notches = 2 + elif self.length_ellipse < 250: + self.l_between_notches = 3 + else: + self.l_between_notches = 4 + self.nb_Ellipse_Notch = int(round(self.length_ellipse / (2*( self.l_between_notches + 1) + 2),0)) #Add a notch at the end + self.size_Ellipse_Notch = self.length_ellipse / (self.nb_Ellipse_Notch *( self.l_between_notches + 1) + 1) + self.Size_betweenNotches = self.l_between_notches*self.size_Ellipse_Notch + self.nb_point_between_notches = int(round(self.Size_betweenNotches)) + self.SizeBetweenPoints = self.Size_betweenNotches / self.nb_point_between_notches + DebugMsg("Ellipse length ="+str(self.length_ellipse)+" nb_Ellipse_Notch="+str(self.nb_Ellipse_Notch) + +" size_Ellipse_Notch="+str(self.size_Ellipse_Notch)+" Distance between notches="+str((self.l_between_notches+1)*self.size_Ellipse_Notch) + +"mm, Nb point_between nocthes="+str(self.nb_point_between_notches) + +" Total Size Notch ="+str(self.size_Ellipse_Notch*self.nb_Ellipse_Notch*(self.l_between_notches+1)+self.size_Ellipse_Notch)+'\n') + #Compute the number of points used to compute the integration, and init values to be used by length2Angle + if self.length_ellipse < 500: + self.nPoints = 20000 #Error will be less than 0.01mm + elif self.length_ellipse < 2000: + self.nPoints = 100000 + else: + self.nPoints = 500000 #Beware compute time will be higher. + + def drawNotchedEllipse(self, path, Start, End, Offset): + ''' + draw the notched ellipse from Start Angle to End Angle using path path + ''' + self.Compute_Ellipse_Params(Start, End) + #Compute offset to be added to coordinates such as the start point matches with start angle + xOffset = -self.a*math.cos(Start) + Offset[0] + yOffset = -self.a*math.sin(Start) + Offset[1] + self.StepAngle = (End - Start)/self.nPoints + self.CurPoint = 0 + self.LastDistance = 0.0 #At the start point + DebugMsg("nPoints ="+str(self.nPoints)+" StepAngle="+str(self.StepAngle)+"\n") + DebugMsg("Offset Ellipse="+str((xOffset, yOffset))+'\n') + ''' + #TEST + a1 = self.length2Angle(1.0) + DebugMsg("length2Angle(1.0) --> "+str(a1*180/math.pi)+'\n') + a2 = self.length2Angle(2.0) + DebugMsg("length2Angle(2.0) --> "+str(a2*180/math.pi)+'\n') + a3 = self.length2Angle(5.0) + DebugMsg("length2Angle(5.0) --> "+str(a3*180/math.pi)+'\n') + a4 = self.length2Angle(10.0) + DebugMsg("length2Angle(10.0) --> "+str(a4*180/math.pi)+'\n') + a5 = self.length2Angle(self.length_ellipse/2.0) + DebugMsg("length2Angle(length/2) --> "+str(a5*180/math.pi)+'\n') + a6 = self.length2Angle(3*self.length_ellipse/4.0) + DebugMsg("length2Angle(length*0.75) --> "+str(a6*180/math.pi)+'\n') + a7 = self.length2Angle(self.length_ellipse-2.0) + DebugMsg("length2Angle(length-2) --> "+str(a7*180/math.pi)+'\n') + a8 = self.length2Angle(self.length_ellipse-1.0) + DebugMsg("length2Angle(length-1) --> "+str(a8*180/math.pi)+'\n') + a9 = self.length2Angle(self.length_ellipse) + DebugMsg("length2Angle(length) --> "+str(a9*180/math.pi)+'\n') + self.StepAngle = (End - Start)/self.nPoints + self.CurPoint = 0 + self.LastDistance = 0.0 #At the start point + a9 = self.length2Angle(self.length_ellipse) + DebugMsg("length2Angle(length), fresh start --> "+str(a9*180/math.pi)+'\n') + self.CurPoint = 0 + self.LastDistance = 0.0 #At the start point + #End TEST + ''' + #The side face is "internal", that is the notches are towards the exterior. + DeltaAngleNotches = -math.pi/2 #Angle from the tangeant + CurAngle = Start #Starting point + CurDistance = 0 #Distance on ellipse + #Now for all notches but the last one + for i in range(self.nb_Ellipse_Notch): + #Start with the notch itself, but first compute the tangeant at the current point + theta = math.atan2(self.b*math.cos(CurAngle), -self.a*math.sin(CurAngle)) + AngleNotch = theta + DeltaAngleNotches + #Draw notch , start position on ellipse + Notch itself + x = self.a * math.cos(CurAngle) + thickness * math.cos(AngleNotch) + xOffset + y = self.b * math.sin(CurAngle) + thickness * math.sin(AngleNotch) + yOffset + DebugMsg("Notch, Pos without offset="+str((self.a * math.cos(CurAngle) + thickness * math.cos(AngleNotch), self.b * math.sin(CurAngle) + thickness * math.sin(AngleNotch) ))+" WithOffset"+str((x,y))+'\n') + path.LineTo(x, y) + #Now the side parralel to the ellipse + x += self.size_Ellipse_Notch * math.cos(theta) + y += self.size_Ellipse_Notch * math.sin(theta) + path.LineTo(x, y) + #Now back to the ellipse, do not use the angle to come back to the ellipse but compute the position on ellipse. + #This will give a better approximation of the ellipse. As ellipse is convex, the interior of the notch will be shorter than the exterior + CurDistance += self.size_Ellipse_Notch + CurAngle = self.length2Angle(CurDistance) + x = self.a * math.cos(CurAngle) + xOffset + y = self.b * math.sin(CurAngle) + yOffset + path.LineTo(x, y) + #Now draw the interior line, but mm by mm to have a good approximation of the ellipse + for j in range(self.nb_point_between_notches): + CurDistance += self.SizeBetweenPoints + CurAngle = self.length2Angle(CurDistance) + x = self.a * math.cos(CurAngle) + xOffset + y = self.b * math.sin(CurAngle) + yOffset + path.LineTo(x, y) + #We are now ready to draw the next notch + #Now draw the last notch, but draw it "backward" to have a symetric view. + theta = math.atan2(self.b*math.cos(End), -self.a*math.sin(End)) + AngleNotch = theta + DeltaAngleNotches + #Draw notch , start position on ellipse + Notch itself + x_end_notch = self.a * math.cos(End) + thickness * math.cos(AngleNotch) + xOffset + y_end_notch = self.b * math.sin(End) + thickness * math.sin(AngleNotch) + yOffset + #Now the side parralel to the ellipse + x_start_notch = x_end_notch - self.size_Ellipse_Notch * math.cos(theta) + y_start_notch = y_end_notch - self.size_Ellipse_Notch * math.sin(theta) + path.LineTo(x_start_notch, y_start_notch) + path.LineTo(x_end_notch, y_end_notch) + #For the last point, we will use the End Parameter + x = self.a * math.cos(End) + xOffset + y = self.b * math.sin(End) + yOffset + path.LineTo(x,y) + #We should be arrived at the last point now ! + + # Generate vertical lines for flex + # Parameters : StartX, StartY, size, nunmber of lines and +1 if lines goes up and -1 down + def GenLinesFlex(self, StartX, StartY, Size, nLine, UpDown, path): + DebugMsg("Enter GenLinesFlex, Pos="+str((StartX, StartY))+" nSegment="+str(nLine)+" Size Segment="+str(Size)+" UpDown="+str(UpDown)+" End="+str((StartX, StartY+nLine*(Size+2)-2))+'\n') + for i in range(nLine): + path.Line(StartX, StartY, StartX, StartY + UpDown*Size) + DebugMsg("GenLinesFlex from "+str((StartX, StartY))+" to "+str((StartX, StartY + UpDown*Size))+'\n') + StartY += UpDown*(Size+2) + + def drawFlexEllipse(self, path, height, SkipFlex, Position): + ''' + draw the flex lines for the ellipse + After this path will be at the right/bottom corner of the flex line. + ''' + xpos = Position[0] + ypos = Position[1] + #First compute angles of each notch in order to skip unnecessary flex lines + + self.StepAngle = (self.End - self.Start)/self.nPoints + self.CurPoint = 0 + self.LastDistance = 0.0 #At the start point + CurAngle = self.Start #Starting point + CurDistance = 0 #Distance on ellipse + DeltaNotch = (self.l_between_notches+1)*self.size_Ellipse_Notch + ListDistance = [] + #Now for all notches but the last one + for i in range(self.nb_Ellipse_Notch): + #Start with the notch itself, but first compute the tangeant at the current point (x0,y0) + LastAngle = CurAngle + # with the line equation in the form alpha*x + beta*y + gamma = 0 + alpha = self.b * math.cos(CurAngle) + beta = self.a * math.sin(CurAngle) + gamma = -(self.a*self.b) + CurDistance += DeltaNotch + CurAngle = self.length2Angle(CurDistance) + #Now compute distance between tangeant and next point. + x1 = self.a * math.cos(CurAngle) + y1 = self.b * math.sin(CurAngle) + #Distance betwwen line and point is (alpha * pt.x + beta * pt.y + gamma)*(alpha * pt.x + beta * pt.y + gamme)/sqrt(alpha*alpha + beta*beta) + distance = abs(alpha * x1 + beta * y1 + gamma)/math.sqrt(alpha*alpha + beta*beta) + ListDistance.append(distance) + DebugMsg("LastAngle ="+str(round(180*LastAngle/math.pi,2))+" CurAngle="+str(round(180*CurAngle/math.pi,2))+" NewPoint="+str((x1,y1))+" distance="+str(distance)+'\n') + #and for the last one, repeat the previous + ListDistance.append(distance) + + ''' + Now, this is the real flex line drawing + ''' + #Compute number of vertical lines. Each long mark should be at most 50mm long to avoid failures + TotalHeight = height+2*thickness + nMark = int( TotalHeight / 50) + 1 #Compute number of lines + nMark = max(nMark, 2) # At least 2 marks + #Sizes of short and long lines to make flex + LongMark = (TotalHeight / nMark) - 2.0 #Long Mark equally divide the height + ShortMark = LongMark/2 # And short mark should lay at center of long marks + DebugMsg("\ndrawFlexEllipse, Pos="+str(Position)+" TotalHeight="+str(TotalHeight)+" nMark="+str(nMark)+" LongMark="+str(LongMark)+" ShortMark="+str(ShortMark)+'\n') + for i in range(self.nb_Ellipse_Notch): + ''' + For each set notch + interval between notches, always start with a notch, and we are external in this case + The path is designed as it will lead to "optimal" move of the laser beam. + + First draw the nocth and the line inside the notch + First edge of the notch, start with a short line, then nMark-1 long lines then a short one. This will cover the entire height+2*thickness + The the second edge of the notch, the same but drawn backwards (bottom to top) + and at last the line inside the notch, drawn from top to bottom + ''' + DebugMsg("Notch("+str(i)+"), SkipFlex="+str(SkipFlex)+" ListDistance[i]="+str(ListDistance[i])+'\n') + #Draw the edge line from Top to Bottom + self.GenLinesFlex(xpos, ypos, ShortMark, 1, 1, path) + #Then nMark-1 long Lines + self.GenLinesFlex(xpos, ypos+ShortMark+2, LongMark, nMark-1, 1, path) + #And the last short line + self.GenLinesFlex(xpos, ypos+TotalHeight-ShortMark, ShortMark, 1, 1, path) + #Now we are at the bottom of the Flex face, draw the bottom notch + path.Line(xpos, ypos+height+thickness, xpos+self.size_Ellipse_Notch, ypos+height+thickness) + #Then draw the same pattern for the other side of the notch, but bottom to top + self.GenLinesFlex(xpos+self.size_Ellipse_Notch, ypos+TotalHeight, ShortMark, 1, -1, path) + #Then nMark-1 long Lines + self.GenLinesFlex(xpos+self.size_Ellipse_Notch, ypos+TotalHeight-ShortMark-2, LongMark, nMark-1, -1, path) + #And the last short line that will reach the top external edge + self.GenLinesFlex(xpos+self.size_Ellipse_Notch, ypos+ShortMark, ShortMark, 1, -1, path) + #then the top notch + path.Line(xpos+self.size_Ellipse_Notch, ypos + thickness, xpos, ypos+thickness) + #Then draw the long lines inside the notch, first and last will be shorter by thickness + #This line is drawn from top to bottom, and start at 1mm from the interior of the notch + self.GenLinesFlex(xpos+self.size_Ellipse_Notch/2, ypos+thickness+1, LongMark-thickness, 1, 1, path) + #Then the remaining inside if any + if nMark > 2: + self.GenLinesFlex(xpos+self.size_Ellipse_Notch/2, ypos+3+LongMark, LongMark, nMark-2, 1, path) + #Then the last one, shorter also, will reach internal bottom + 1mm + self.GenLinesFlex(xpos+self.size_Ellipse_Notch/2, ypos+TotalHeight-LongMark-1, LongMark-thickness, 1, 1, path) + ''' + At this point we are near the bottom line. + First draw the external line up to the next notch + ''' + xpos += self.size_Ellipse_Notch #xpos is the other side of the notch + path.Line(xpos, ypos+TotalHeight, xpos+self.Size_betweenNotches, ypos+TotalHeight) + + ''' + Then draw the lines between external top and bottom, but only if needed when SkipFlex is true + They are 2*l_between_notches - 1 lines, so the number is always odd + Even indexes are made of long lines only and drawn Bottom to Top. + Odd indexes are made of one short line, nMark-2 long lines then a short line and rawn top to bottom + As total number is odd, wa always end with long lines drawn from bottom to top, so the last position will be near the top line + ''' + #If the ellipse is not very round at this point, in order to save laser time, draw only lines inside the notch and the line just before the notch + drawAllLines = False + if SkipFlex == False or ListDistance[i] > 0.5: + drawAllLines = True + for j in range(2*self.l_between_notches-1): + if j == 2*self.l_between_notches-2 or drawAllLines: + if (j % 2)==0: + #even, draw long lines bottom to top + self.GenLinesFlex(xpos+(j+1)*self.size_Ellipse_Notch/2, ypos+TotalHeight-1, LongMark, nMark, -1, path) + else: + #Odd, draw short line, nMark-2 long lines then a short line, top to bottom + self.GenLinesFlex(xpos+(j+1)*self.size_Ellipse_Notch/2, ypos+1, ShortMark-1, 1, 1, path) + #Then nMark-1 long Lines + self.GenLinesFlex(xpos+(j+1)*self.size_Ellipse_Notch/2, ypos+ShortMark+2, LongMark, nMark-1, 1, path) + #And the last short line + self.GenLinesFlex(xpos+(j+1)*self.size_Ellipse_Notch/2, ypos+TotalHeight-ShortMark, ShortMark-1, 1, 1, path) + #Now we are near the top line, draw the line up to the next notch + path.Line(xpos, ypos, xpos+self.Size_betweenNotches, ypos) + #And we are ready to draw the next flex pattern + xpos += self.Size_betweenNotches + + ''' + Now draw the pattern for the last notch + ''' + #Draw the edge line from Top to Bottom + self.GenLinesFlex(xpos, ypos, ShortMark, 1, 1, path) + #Then nMark-1 long Lines + self.GenLinesFlex(xpos, ypos+ShortMark+2, LongMark, nMark-1, 1, path) + #And the last short line + self.GenLinesFlex(xpos, ypos+TotalHeight-ShortMark, ShortMark, 1, 1, path) + #Now we are at the bottom of the Flex face, draw the bottom notch + path.Line(xpos, ypos+height+thickness, xpos+self.size_Ellipse_Notch, ypos+height+thickness) + #Then draw the same pattern for the other side of the notch, but bottom to top + self.GenLinesFlex(xpos+self.size_Ellipse_Notch, ypos+TotalHeight, ShortMark, 1, -1, path) + #Then nMark-1 long Lines + self.GenLinesFlex(xpos+self.size_Ellipse_Notch, ypos+TotalHeight-ShortMark-2, LongMark, nMark-1, -1, path) + #And the last short line that will reach the top external edge + self.GenLinesFlex(xpos+self.size_Ellipse_Notch, ypos+ShortMark, ShortMark, 1, -1, path) + #then the top notch + path.Line(xpos+self.size_Ellipse_Notch, ypos + thickness, xpos, ypos+thickness) + #Then draw the long lines inside the notch, first and last will be shorter by thickness + #This line is drawn from top to bottom, and start at 1mm from the interior of the notch + self.GenLinesFlex(xpos+self.size_Ellipse_Notch/2, ypos+thickness+1, LongMark-thickness, 1, 1, path) + #Then the remaining inside if any + if nMark > 2: + self.GenLinesFlex(xpos+self.size_Ellipse_Notch/2, ypos+3+LongMark, LongMark, nMark-2, 1, path) + #Then the last one, shorter also, will reach internal bottom + 1mm + self.GenLinesFlex(xpos+self.size_Ellipse_Notch/2, ypos+TotalHeight-LongMark-1, LongMark-thickness, 1, 1, path) + xpos += self.size_Ellipse_Notch #xpos is the other side of the notch + path.MoveTo(xpos, ypos+TotalHeight) #Path will be at the end of flex line on the BOTTOM edge. + DebugMsg("Path pos ="+str((xpos, ypos+TotalHeight))+'\n') + +class CornerPoint: + ''' + This class stores data about corners, to be used later to draw the faces of the box + position is a tuple giving the position of the corner + ''' + def __init__(self, position, radius, x_internal, y_internal, WoodHingeCorner = False): + self.x_internal = x_internal + self.y_internal = y_internal + self.WoodHingeCorner = WoodHingeCorner + if radius > 0: + self.radius = radius + else: + self.radius = 0 + #Compute position of circle center, do it now because it is always here, even if corner moves (internal/external) + if position[0] <= thickness: + #Left corner + self.xc = position[0] + self.radius + else: + #Right corner + self.xc = position[0] - self.radius + if position[1] <= thickness: + #Top corner + self.yc = position[1] + self.radius + else: + #Bottom corner + self.yc = position[1] - self.radius + + #Compute position of corner, given internal or external position of finger joints + if x_internal: + self.x_corner = position[0] + elif position[0] <= thickness: + self.x_corner = position[0] - thickness + if self.radius > 0: + self.radius += thickness # Change radius accordingly, beware do it only for x direction (only once !) + else: + self.x_corner = position[0] + thickness + if self.radius > 0: + self.radius += thickness + if y_internal: + self.y_corner = position[1] + elif position[1] <= thickness: + self.y_corner = position[1] - thickness + else: + self.y_corner = position[1] + thickness + #Compute position of line of finger joints + if position[0] <= thickness and position[1] <= thickness: + #Top left corner, compute positions of start/end of corners + self.quadrant = 0 + self.x_start_joint = position[0] + self.radius #X direction, do not take into account Internal/External + self.y_start_joint = self.y_corner + self.x_end_joint = self.x_corner + self.y_end_joint = position[1] + self.radius #Y Direction, do not take into account Internal/External + elif position[1] <= thickness: + #Top right corner + self.quadrant = 1 + self.x_start_joint = self.x_corner + self.y_start_joint = position[1] + self.radius + self.x_end_joint = position[0] - self.radius + self.y_end_joint = self.y_corner + elif position[0] <= thickness: + #Bottom left corner + self.quadrant = 3 + self.x_start_joint = self.x_corner + self.y_start_joint = position[1] - self.radius + self.x_end_joint = position[0] + self.radius + self.y_end_joint = self.y_corner + else: + #Bottom right corner + self.quadrant = 2 + self.x_start_joint = position[0] - self.radius + self.y_start_joint = self.y_corner + self.x_end_joint = self.x_corner + self.y_end_joint = position[1] - self.radius + #Specific case for WoodHingeCorner, "corner" is 3/4 of the circle out of the corner + if WoodHingeCorner: + if self.quadrant == 0: + self.y_end_joint = self.y_corner + WoodHingeSize*thickness + self.x_start_joint = self.x_corner + WoodHingeSize*thickness + elif self.quadrant == 1: + self.x_end_joint = self.x_corner - WoodHingeSize*thickness + self.y_start_joint = self.y_corner + WoodHingeSize*thickness + DebugMsg("End CornerPoint init. Corner="+str((self.x_corner, self.y_corner))+" Circle="+str((self.xc, self.yc))+" StartJoint="+str((self.x_start_joint, self.y_start_joint))+" EndJoint="+str((self.x_end_joint, self.y_end_joint))+" WoodHingeCorner="+str(self.WoodHingeCorner)+'\n') + + def drawCorner(self, path): + ''' + Draw the lines around the corner using path + Start position of the path should be (x_end_joint, y_end_joint), not checked nor enforced + End Position is (x_start_joint, y_start_joint) + ''' + if self.WoodHingeCorner: + #Specific case, draw 3/4 of a circle of radius WoodHingeSize*thickness + plus a small segment of size thickness + if self.quadrant == 0: #Left corner + DebugMsg("drawCorner_WoodHinge Left: StartPoint="+str((self.x_end_joint, self.y_end_joint))+" Circle="+str((self.xc, self.yc))+ " EndPoint="+str((self.x_start_joint, self.y_start_joint))+'\n') + path.LineToHRel(-thickness) + path.drawQuarterCircle(self.x_corner-thickness, self.y_corner, WoodHingeSize*thickness, 3) #Start Lower Left + path.drawQuarterCircle(self.x_corner-thickness, self.y_corner, WoodHingeSize*thickness, 0) #Start Upper Left + path.drawQuarterCircle(self.x_corner-thickness, self.y_corner, WoodHingeSize*thickness, 1) #Start Upper Right + elif self.quadrant == 1: #Right corner + DebugMsg("drawCorner_WoodHinge Right: StartPoint="+str((self.x_end_joint, self.y_end_joint))+" Circle="+str((self.xc, self.yc))+ " EndPoint="+str((self.x_start_joint, self.y_start_joint))+'\n') + path.LineToHRel(thickness) + path.drawQuarterCircle(self.x_corner+thickness, self.y_corner, WoodHingeSize*thickness, 0) #Start Upper Left + path.drawQuarterCircle(self.x_corner+thickness, self.y_corner, WoodHingeSize*thickness, 1) #Start Upper Right + path.drawQuarterCircle(self.x_corner+thickness, self.y_corner, WoodHingeSize*thickness, 2) #Start Lower Right + path.LineToHRel(-thickness) + elif self.radius > 0: + #DebugMsg("drawCorner radius Center"+str((self.xc, self.yc))+" RAdius="+str(self.radius)+ " quadrant="+str(self.quadrant)+'\n') + path.drawQuarterCircle(self.xc, self.yc, self.radius, self.quadrant) + else: + DebugMsg("drawCorner: StartPoint="+str((self.x_end_joint, self.y_end_joint))+" Corner="+str((self.x_corner, self.y_corner))+ " EndPoint="+str((self.x_start_joint, self.y_start_joint))+'\n') + if distance2Points(self.x_end_joint, self.y_end_joint, self.x_corner, self.y_corner) > MinMove: + #Draw line up to real corner + path.LineTo(self.x_corner, self.y_corner) + if distance2Points(self.x_start_joint, self.y_start_joint, self.x_corner, self.y_corner) > MinMove: + #Draw line between corner and start of joints + path.LineTo(self.x_start_joint, self.y_start_joint) + + +class NotchLine: + ''' + This class deals with straight lines with or without finger joints + start and end parameters are actually tuples giving position (x,y) and internal/external status of each point + The angle give the direction, it couldn't be easily computed from start and ending point because of internal/external status + If parameter DrawHalf is < 0, only first half of line will be drawn, if > 0 only second half. + When DrawHalf is null both parts will be drawn + Beware, DrawHalf could be < 0 or > 0 only when Status (Internal/External) are indentical. + ''' + def __init__(self, start, end, angle, finger_joint_size, DrawHalf=0): + self.StartX = start[0] + self.StartY = start[1] + self.EndX = end[0] + self.EndY = end[1] + self.StartStatus = start[2] + self.EndStatus = end[2] + self.JointSize = finger_joint_size + self.Angle = angle + self.size_line_joint = 0 + self.start_line_joint_x = self.StartX + self.start_line_joint_y = self.StartY + self.end_line_joint_x = self.EndX + self.end_line_joint_y = self.EndY + self.DrawHalf = DrawHalf + DebugMsg("NotchLine_init, StartPoint="+str(start)+" EndPoint="+str(end)+" Joint_size="+str(finger_joint_size)+" DrawHalf="+str(DrawHalf)+'\n') + # Compute size of all finger joints + # Compute size as a distance to deal with every direction. + size = math.sqrt((self.EndX - self.StartX)*(self.EndX - self.StartX) + (self.EndY - self.StartY)*(self.EndY - self.StartY)) + # Compute number of joints + if finger_joint_size == 0: # No finger joint + self.nb_finger_joint = 0 + if DrawHalf != 0: #Draw only half of line (specific case for rounded flex) + self.EndX = (self.StartX + self.EndX) / 2 + self.EndY = (self.StartY + self.EndY) / 2 + self.end_line_joint_x = self.EndX + self.end_line_joint_y = self.EndY + elif start[2] == end[2]: + # Same status, internal/external, the number of notches should be odd (at least 3) + if size < 3 * finger_joint_size: + self.nb_finger_joint = 0 + else: + self.nb_finger_joint = 2*int((size-finger_joint_size) / (2*finger_joint_size)) + 1 + self.size_line_joint = self.nb_finger_joint * finger_joint_size + # compute start and stop of finger joint line, centered on edge + delta_pos = (size - self.size_line_joint)/2 + self.start_line_joint_x = self.StartX + delta_pos*math.cos(angle) + self.start_line_joint_y = self.StartY + delta_pos*math.sin(angle) + self.end_line_joint_x = self.EndX - delta_pos*math.cos(angle) + self.end_line_joint_y = self.EndY - delta_pos*math.sin(angle) + if DrawHalf < 0: + #Draw only first half of notch line,i.e. end will be at the middle of segment + self.EndX = (self.StartX + self.EndX) / 2 + self.EndY = (self.StartY + self.EndY) / 2 + self.nb_finger_joint = (self.nb_finger_joint // 2 ) + 1 #Previous number was odd (2n+1), new notch count = n + 1, as last one will be half notch + self.end_line_joint_x = self.start_line_joint_x + ((self.nb_finger_joint-0.5)*finger_joint_size)*math.cos(angle) #Quit line at end of last notch + self.end_line_joint_y = self.start_line_joint_y + ((self.nb_finger_joint-0.5)*finger_joint_size)*math.sin(angle) #Quit line at end of last notch + if (self.nb_finger_joint%2) == 0 and self.StartStatus: + #Now nb joint is even, so Internal/External status is changed so end is external + self.end_line_joint_x += thickness * math.cos(angle-math.pi/2) + self.end_line_joint_y += thickness * math.sin(angle-math.pi/2) + self.EndX = self.end_line_joint_x + self.EndY = self.end_line_joint_y + elif (self.nb_finger_joint%2) == 0 and self.StartStatus == 0: + #Now nb joint is even, so Internal/External status is changed so end is internal + self.end_line_joint_x += thickness * math.cos(angle+math.pi/2) + self.end_line_joint_y += thickness * math.sin(angle+math.pi/2) + self.EndX = self.end_line_joint_x + self.EndY = self.end_line_joint_y + elif DrawHalf > 0: + #Draw only second half of notch line,i.e. Start will be at the middle of segment + self.StartX = (self.StartX + self.EndX) / 2 + self.StartY = (self.StartY + self.EndY) / 2 + self.nb_finger_joint = (self.nb_finger_joint // 2 ) + 1 #Previous number was odd (2n+1), new notch count = n+1 , as first one with half notch for the first one + #Draw the first half notch as a shift from start position + self.start_line_joint_x = self.StartX - 0.5*finger_joint_size*math.cos(angle) + self.start_line_joint_y = self.StartY - 0.5*finger_joint_size*math.sin(angle) + if (self.nb_finger_joint%2) == 0 and self.EndStatus: + #Now number of joints is even, so switch StartStatus to have different status (Start and End), and keep End Status + #In this case, Start is now External + self.StartStatus = 0 + #Move Start point + self.start_line_joint_x += thickness * math.cos(angle-math.pi/2) + self.start_line_joint_y += thickness * math.sin(angle-math.pi/2) + else: + #Now number of joints is even, so switch StartStatus to have different status (Start and End), and keep End Status + #In this case, Start is now Internal + self.StartStatus = 1 + #Move Start point + self.start_line_joint_x += thickness * math.cos(angle+math.pi/2) + self.start_line_joint_y += thickness * math.sin(angle+math.pi/2) + else: #Start and end have different internal/external status. Number of notches should be even + if size < 2 * finger_joint_size: + self.nb_finger_joint = 0 + else: + self.nb_finger_joint = 2*int(size / (2*finger_joint_size)) + self.size_line_joint = self.nb_finger_joint * finger_joint_size + # compute start and stop of finger joint line, centered on edge + delta_pos = (size - self.size_line_joint)/2 + self.start_line_joint_x = self.StartX + delta_pos*math.cos(angle) + self.start_line_joint_y = self.StartY + delta_pos*math.sin(angle) + self.end_line_joint_x = self.EndX - delta_pos*math.cos(angle) + self.end_line_joint_y = self.EndY - delta_pos*math.sin(angle) + DebugMsg("NotchLine_init, size of line joints = "+str(size)+" Nb_Joint="+str(self.nb_finger_joint)+" size_line_joint="+str(self.size_line_joint)+" start_line_joint"+str(( self.start_line_joint_x, self.start_line_joint_y))+" end_line_joint="+str((self.end_line_joint_x, self.end_line_joint_y))+'\n') + + def ModifyNotchLine(self, SizeCut, CutOnStart): + ''' + This function modify a vertical notch line to take into account cuts needed by WoodHinge + Beware, only safe to call with vertical lines, unexpected results in other cases + SizeCut is the Size of cut, last notch will be at last 1.5 thickness far from this cut + CutOnStart is True when the cut is at the start of the line. Beware could be top or bottom if angle is 90 or 270° + ''' + DebugMsg("Enter ModifyNotchLine, CutOnStart="+str(CutOnStart)+" angle="+str(self.Angle)+" Start ="+str(self.StartY)+" End="+str(self.EndY)+" nb_finger_joint="+str(self.nb_finger_joint)+" SizeJoint="+str(self.JointSize)+" start_line_joint_y="+str(self.start_line_joint_y)+" end_line_joint_y="+str(self.end_line_joint_y)+'\n') + Dir = 0 #Bottom to Top if Dir = 0 + SizeCut -= thickness #In all cases, reduce sizecut because top and bottom lines are always external in Y + + if abs(self.Angle - math.pi/2) < 1e-6: + Dir = 1 # Top to Bottom + if Dir == 1 and CutOnStart: + #Change line, shorten of SizeCut at the start, in this case start at end of line + nbNotch = 1 + ypos = self.end_line_joint_y + Limit = SizeCut + self.StartY + 1.5*thickness + DebugMsg("WHC_init_1 : ypos ="+str(ypos)+" nbNotch ="+str(nbNotch)+" Limit="+str(Limit)+" NewSizeCut="+str(SizeCut)+"\n") + while ypos > Limit: + ypos -= 2*self.JointSize + nbNotch += 2 + DebugMsg("WHC : ypos ="+str(ypos)+" nbNotch ="+str(nbNotch)+"\n") + #Now change the line + if nbNotch > 3: + nbNotch -= 2 #Sub last step which was too far + self.start_line_joint_y = self.end_line_joint_y - nbNotch*self.JointSize + self.nb_finger_joint = nbNotch + self.StartY += SizeCut + else: + self.nb_finger_joint = 0 #No more notch + self.StartY += SizeCut + elif Dir==1 and CutOnStart == False: + #Change line, shorten of SizeCut at the end, in this case start at start of line + nbNotch = 1 + ypos = self.start_line_joint_y + Limit = self.EndY - SizeCut - 1.5*thickness + DebugMsg("WHC_init_2 : ypos ="+str(ypos)+" nbNotch ="+str(nbNotch)+" Limit="+str(Limit)+" NewSizeCut="+str(SizeCut)+"\n") + while ypos < Limit: + ypos += 2*self.JointSize + nbNotch += 2 + DebugMsg("WHC : ypos ="+str(ypos)+" nbNotch ="+str(nbNotch)+"\n") + #Now change the line + if nbNotch > 3: + nbNotch -= 2 #Sub last step which was too far + #Cut on end, so change EndY and end_line_joint_y + self.end_line_joint_y = self.start_line_joint_y + nbNotch*self.JointSize + self.nb_finger_joint = nbNotch + self.EndY -= SizeCut + else: + self.nb_finger_joint = 0 #No more notch + self.EndY -= SizeCut + if self.EndY < self.end_line_joint_y: #Limit send_line_joint_y to be lower or equal than EndY + self.end_line_joint_y = self.EndY + elif Dir==0 and CutOnStart: + #Change line, shorten of SizeCut at the start, in this case this the bottom of line because Angle is 270° + nbNotch = 1 + ypos = self.end_line_joint_y + Limit = self.StartY - SizeCut - 1.5*thickness + DebugMsg("WHC_init_3 : ypos ="+str(ypos)+" nbNotch ="+str(nbNotch)+" Limit="+str(Limit)+" NewSizeCut="+str(SizeCut)+"\n") + while ypos < Limit: + ypos += 2*self.JointSize + nbNotch += 2 + DebugMsg("WHC : ypos ="+str(ypos)+" nbNotch ="+str(nbNotch)+"\n") + #Now change the line + if nbNotch > 3: + nbNotch -= 2 #Sub last step which was too far + #Change at start of line + self.start_line_joint_y = self.end_line_joint_y + nbNotch*self.JointSize + self.nb_finger_joint = nbNotch + self.StartY -= SizeCut + else: + self.nb_finger_joint = 0 #No more notch + self.StartY -= SizeCut + elif Dir==0 and CutOnStart == 0: + #Change line, shorten of SizeCut at the end, in this case this the top of line because Angle is 270° + nbNotch = 1 + ypos = self.start_line_joint_y + Limit = self.EndY + SizeCut + 1.5*thickness + DebugMsg("WHC_init_4 : ypos ="+str(ypos)+" nbNotch ="+str(nbNotch)+" Limit="+str(Limit)+" NewSizeCut="+str(SizeCut)+"\n") + while ypos > Limit: + ypos -= 2*self.JointSize + nbNotch += 2 + DebugMsg("WHC : ypos ="+str(ypos)+" nbNotch ="+str(nbNotch)+"\n") + #Now change the line + if nbNotch > 3: + nbNotch -= 2 #Sub last step which was too far + self.end_line_joint_y = self.start_line_joint_y - nbNotch*self.JointSize + self.nb_finger_joint = nbNotch + self.EndY += SizeCut #New EndY is below the previous one + else: + self.nb_finger_joint = 0 #No more notch + self.EndY += SizeCut + if self.EndY < self.end_line_joint_y: + self.end_line_joint_y = self.EndY + DebugMsg("Exit ModifyNotchLine, angle="+str(self.Angle)+" Start ="+str(self.StartY)+" End="+str(self.EndY)+" nb_finger_joint="+str(self.nb_finger_joint)+" SizeJoint="+str(self.JointSize)+" start_line_joint_y="+str(self.start_line_joint_y)+" end_line_joint_y="+str(self.end_line_joint_y)+'\n') + + def drawNotchLine(self, path): + ''' + Draw the actual line, starting at current position of path. + The position should be StartX, StartY, this is not checked or enforced to avoid unwanted moves + Each finger joint is JointSize long but there is a correction to take into account the burn factor (thickness of the cutting line). + So each external joint is actually JointSize+2*burn long and Internal joints are JointSize-2*burn + ''' + if self.nb_finger_joint == 0: + #Easy case, no finger joint, draw a straight line + path.LineTo(self.EndX, self.EndY) + return + #Normal case, there are finger joint(s) + #First compute angles. + #AngleJoint is the angle for drawing the first part of the finger joint + #If start point is internal, AngleJoint should be Angle - pi/2, else it should be Angle + pi/2 + if self.StartStatus: #internal + AngleJoint = self.Angle - math.pi/2 + DeltaBurn = burn + else: + AngleJoint = self.Angle + math.pi/2 + DeltaBurn = -burn + DebugMsg("drawNotchLine, Angle ="+str(round(self.Angle*180/math.pi))+" AngleJoint="+str(round(AngleJoint*180/math.pi))+'\n') + DebugMsg("start_line_joint="+str((self.start_line_joint_x, self.start_line_joint_y))+" JointSize="+str(self.JointSize)+" DeltaBurn="+str(DeltaBurn)+'\n') + #First go up to start of notch line + first joint + burn correction + xcur = self.start_line_joint_x + (self.JointSize+DeltaBurn)*math.cos(self.Angle) + ycur = self.start_line_joint_y + (self.JointSize+DeltaBurn)*math.sin(self.Angle) + path.LineTo(xcur, ycur) + DebugMsg("First Point="+str((xcur, ycur))+'\n') + i = self.nb_finger_joint - 1 + while i > 0: + #The start drawing finger joint + path.LineToRel(thickness*math.cos(AngleJoint), thickness*math.sin(AngleJoint)) + #Compute next AngleJoint for return move if necessary + AngleJoint = AngleJoint + math.pi + if AngleJoint > 2*math.pi: + AngleJoint -= 2*math.pi #Keep angle between 0 and 2*pi + #idem for burn factor + DeltaBurn = -DeltaBurn + #Then line which is JointSize long and take into account the burn factor, draw half finger joint when last of first half + if self.DrawHalf < 0 and i == 1: + path.LineToRel((self.JointSize/2+DeltaBurn)*math.cos(self.Angle), (self.JointSize/2+DeltaBurn)*math.sin(self.Angle)) + elif i > 1: #Do not draw last segment, not necessary, will be completed by next path.LIneTo + path.LineToRel((self.JointSize+DeltaBurn)*math.cos(self.Angle), (self.JointSize+DeltaBurn)*math.sin(self.Angle)) + i -= 1 + #Then draw last part, up to end point + #Do not check if necessary because of burn factor, last position is not the real end of notch line. + path.LineTo(self.EndX, self.EndY) + DebugMsg("Last LineTo End ="+str((self.EndX, self.EndY))+'\n') + +class FlexLines: + ''' + This class deals and draw set of flex lines to round a corner + ''' + def drawFlexLines(self, Position, Height, Radius, path): + ''' + First compute how many segment per line. Segment length should be kept short, < 50mm or so, so high boxes means number of lines + Also compute distance between lines, which depend on radius. Shorter radius means smaller distance between lines + But keep min distance at about 1mm minimum and 1.5mm max, after this value flex is quite hard to bend ! + ''' + if Height+2*thickness < 30: + nSegmentFlex = 1 + elif Height+2*thickness < 80: + nSegmentFlex = 2 + elif Height+2*thickness < 150: + nSegmentFlex = 3 + else: + nSegmentFlex = Height+2*thickness // 50 + #Then compute distance between flex lines. The basic idea is to have a minimum of 15 lines per corner, with lines distant at least of 1mm + #But also ensure that distance between lines is at most at 2mm + round_distance = Radius*math.pi/2 + flex_line_spacing = round_distance / 14 + flex_line_spacing = max(flex_line_spacing, 1.0) + flex_line_spacing = min(flex_line_spacing, 1.5) + nb_flex_lines = int(round(round_distance / flex_line_spacing,0)) + DebugMsg("sizeround ="+str(round_distance)+" flex_line_spacing="+str(flex_line_spacing)+" nb_flex_lines="+str(nb_flex_lines)+" size="+str(nb_flex_lines*flex_line_spacing)+"\n") + #nb_flex_lines should be odd + nb_flex_lines |= 1 + flex_line_spacing = round_distance / (nb_flex_lines-1) #Real distance between lines + length_flex_segment_case1 = (Height+2*thickness - 2*nSegmentFlex) / nSegmentFlex #Case 1, 1/2 segment starting at top, n-1 segments and 1/2 segment up to bottom + length_flex_segment_case2 = (Height+2*thickness - 2*(nSegmentFlex+1)) / nSegmentFlex #Case 2, n segments equally spaced (2mm) from top to bottom + DebugMsg("nSegmentFlex="+str(nSegmentFlex)+" sizeround ="+str(round_distance)+" flex_line_spacing="+str(flex_line_spacing)+" nb_flex_lines="+str(nb_flex_lines)+" size="+str(nb_flex_lines*flex_line_spacing)+"\n") + #Now draw set of flex lines + for i in range(nb_flex_lines): + if i % 2: + #In this case draw nSegmentFlex segments which are identical. First segment start at 2 mm above bottom line, segments are 2mm spaced + for j in range(nSegmentFlex): + path.MoveTo(Position + i * flex_line_spacing, Height+thickness-2-j * (length_flex_segment_case2+2) ) + path.LineToVRel(-length_flex_segment_case2) + else: + #In this case draw a first segment starting at -thickness (top), segment is length_flex_segment_even/2 long + path.MoveTo(Position + i * flex_line_spacing, -thickness ) + path.LineToVRel(length_flex_segment_case1/2) #One half segment + #Then nSegmentFlex-1 which are + for j in range(nSegmentFlex-1): + path.MoveTo(Position + i * flex_line_spacing, j*(length_flex_segment_case1+2) + length_flex_segment_case1/2 + 2 - thickness ) + path.LineToVRel(length_flex_segment_case1) + path.MoveTo(Position + i * flex_line_spacing, Height+thickness - length_flex_segment_case1/2) + path.LineTo(Position + i * flex_line_spacing, Height+thickness ) + + +class FlexFace: + ''' + This class deal with flex faces, which are used as vertical faces when rounded corners are used. + ''' + def __init__(self, FlexBandList, isLid, zbox, z_joint, InkscapeGroup, PositionInPage): + ''' + The list FlexBandList contains all elements to be used on top and bottom line of the flex face. + Each element is in a tuple + item 0 is the path id + item 1 is Start_Internal + item 2 is End Internal + item 3..n are tuple with ( size, size_joints top, radius rounded corner, size_joints bottom, [hasCircle]) + Last item is always with radius = 0 + ''' + self.FlexBandList = FlexBandList + self.z_joint = z_joint + self.height = zbox + self.isLid = isLid + #Update PositionInPage to take into account finger joints (only OK if it is a simple shape with finger joints). + PositionInPage[0] -= thickness + PositionInPage[1] -= thickness + + FlexElt = FlexBandList[3] + if len(FlexElt) == 5 and FlexElt[4] and self.isLid == False: + #Change path offset to take into account the circle... + PositionInPage[0] -= WoodHingeSize*thickness + PositionInPage[1] -= WoodHingeSize*thickness + elif len(FlexBandList) > 4: + FlexElt = FlexBandList[len(FlexBandList)-1] + if len(FlexElt) == 5 and FlexElt[4] and self.isLid == False: + #Change path offset to take into account the circle... but only on y here + PositionInPage[1] -= WoodHingeSize*thickness + + + self.BoundingBox = (-PositionInPage[0], -PositionInPage[1], -PositionInPage[0], -PositionInPage[1]) + + #If needed, create path which will be used to draw the face + #The path will be in the group InkscapeGroup + name = FlexBandList[0] + if isLid: + name = 'Lid_'+name + self.path = th_inkscape_path(PositionInPage, InkscapeGroup, name) + #Remember these 2 parameters for Side Notch lines + self.InkscapeGroup = InkscapeGroup + self.BaseName = FlexBandList[0] + + def Close(self): + ''' + Close and write the path after drawing is done + ''' + self.path.Close() + self.path.GenPath() + + def drawClip(self, size_clip, UpDown): + ''' Draw a single clip pattern + The clip is vertical, with length size_clip and width size_clip/4 + Add clip to current path, use LineTo + New path position will be end of clip + If draw up, UpDown should be 1 + ''' + if UpDown != 1: + UpDown=-1 #Will draw negative + #First draw vertical line which is .31*size + self.path.LineToVRel(size_clip*0.3075*UpDown) + #Then small bezier curve + self.path.BezierRel(0, size_clip*0.036241333*UpDown, size_clip*0.045356111, size_clip*0.052734333*UpDown, size_clip*0.0685556, size_clip*0.025*UpDown) + #then line + self.path.LineToRel(size_clip*0.132166667, size_clip*-0.157555556*UpDown) + #then bezier + self.path.BezierRel(size_clip*0.016710556, size_clip*-0.02*UpDown, size_clip*0.05, size_clip*-0.008*UpDown, size_clip*0.05, size_clip*0.017795167*UpDown) + #Then vertical line + self.path.LineToVRel(size_clip*0.615*UpDown) + #then bezier + self.path.BezierRel(0, size_clip*0.026*UpDown, size_clip*-0.032335, size_clip*0.037760389*UpDown, size_clip*-0.05, size_clip*0.017795167*UpDown) + #Then line + self.path.LineToRel(size_clip*-0.132166667, size_clip*-0.157555556*UpDown) + #then last bezier + #c -0.42188,0.5 -1.23438,0.203125 -1.23438,-0.449219 + self.path.BezierRel(size_clip*-0.023437778, size_clip*-0.027777778*UpDown, size_clip*-0.068576667, size_clip*-0.011284722*UpDown, size_clip*-0.068576667, size_clip*0.025*UpDown) + #then last line + self.path.LineToVRel(size_clip*0.3075*UpDown) + + def drawFlexFace(self, ClosePath): + ''' + Draw the flex face into its path, close path if argument is true after drawing + This method is only valid when the corners are straight. + When all corners are rounded, drawRoundedFlexFace should be used. + ''' + ListFlexLines = [] + #Build Top line + xpos = 0 + if self.isLid: + TopJointOff = 3 + BotJointOff = 1 + else: + TopJointOff = 1 + BotJointOff = 3 + leftCircle = False + leftCircleCut = False + leftCirclePos = 0 + rightCircle = False + rightCircleCut = False + rightCirclePos = 0 + LastRadius = 0 #Always start with straight corner + DebugMsg("\nEnter drawFlexFace, isLid="+str(self.isLid)+" Number of elements in list="+str(len(self.FlexBandList))+"Height="+str(self.height)+"\n") + #Now read all elements (3..N) + for i in range(3, len(self.FlexBandList)): + FlexElement = self.FlexBandList[i] + DebugMsg("Top line, i="+str(i)+" FlexElement="+str(FlexElement)+'\n') + if i == 3 and len(FlexElement) == 5 and FlexElement[4] and self.isLid == False: + #Specific case of left wood hinge face, draw circle on top + leftCircle = True + leftCirclePos = -thickness #Remember circle position + #In this case start position is 0, (WoodHingeSize-1)*thickness + self.path.MoveTo(0, (WoodHingeSize-1)*thickness) + self.path.LineToHRel(-thickness) + self.path.drawQuarterCircle(-thickness, -thickness, WoodHingeSize*thickness, 3) #Start Lower Left + self.path.drawQuarterCircle(-thickness, -thickness, WoodHingeSize*thickness, 0) #Start Upper Left + self.path.drawQuarterCircle(-thickness, -thickness, WoodHingeSize*thickness, 1) #Start Upper Right + #After this position should be WoodHingeSize*thickness-thickness, -thickness + self.path.LineTo(FlexElement[0] - FlexElement[2], -thickness) + xpos += FlexElement[0] - LastRadius - FlexElement[2] + elif i == 3 and len(FlexElement) == 5 and FlexElement[4] and self.isLid == True: + leftCircleCut = True + if i == 3: + #Draw path start + if self.FlexBandList[1]: #First item : Start point if internal + self.path.MoveTo(0, -thickness) # Start position (0, -thickness) because flex band is always external in Y direction + else: + self.path.MoveTo(-thickness, -thickness) # Start position (-thickness, -thickness) because x external and flex band is always external in Y direction + self.path.LineTo(0, -thickness) + DebugMsg("Element "+str(i)+": xpos="+str(xpos)+' Size ='+str(FlexElement[0])+' radius ='+str(FlexElement[2])+' --> '+str(FlexElement[2]*math.pi/2)+'\n') + #First Notch Line, with length SizeEdge - SizeOfRoundedCorners + hLine = NotchLine((xpos, -thickness, 0), (xpos+FlexElement[0]-(LastRadius+FlexElement[2]), -thickness, 0), 0.0, FlexElement[TopJointOff]) + hLine.drawNotchLine(self.path) + xpos += FlexElement[0] - LastRadius - FlexElement[2] + elif i == len(self.FlexBandList) - 1 and len(FlexElement) == 5 and FlexElement[4] and self.isLid == False: + #Specific case of right wood hinge face, draw circle on top + rightCircle = True + rightCirclePos = xpos #Remember circle position + #In this case start position is 0, (WoodHingeSize-1)*thickness + self.path.LineTo( xpos + FlexElement[0] - LastRadius - (WoodHingeSize-1)*thickness, -thickness) + xpos += FlexElement[0] - LastRadius + rightCirclePos = xpos + thickness #Remember circle position + self.path.drawQuarterCircle(rightCirclePos, -thickness, WoodHingeSize*thickness, 0) #Start Upper Left + self.path.drawQuarterCircle(rightCirclePos, -thickness, WoodHingeSize*thickness, 1) #Start Upper Right + self.path.drawQuarterCircle(rightCirclePos, -thickness, WoodHingeSize*thickness, 2) #Start Lower Right + self.path.LineToHRel(-thickness) + elif i == len(self.FlexBandList) - 1 and len(FlexElement) == 5 and FlexElement[4] and self.isLid == True: + rightCircleCut = True + DebugMsg("Element "+str(i)+": xpos="+str(xpos)+' Size ='+str(FlexElement[0])+' radius ='+str(FlexElement[2])+' --> '+str(FlexElement[2]*math.pi/2)+'\n') + #First Notch Line, with length SizeEdge - SizeOfRoundedCorners + hLine = NotchLine((xpos, -thickness, 0), (xpos+FlexElement[0]-(LastRadius+FlexElement[2]), -thickness, 0), 0.0, FlexElement[TopJointOff]) + hLine.drawNotchLine(self.path) + xpos += FlexElement[0] - LastRadius - FlexElement[2] + else: + if i == 3: + #Draw path start + if self.FlexBandList[1]: #First item : Start point if internal + self.path.MoveTo(0, -thickness) # Start position (0, -thickness) because flex band is always external in Y direction + else: + self.path.MoveTo(-thickness, -thickness) # Start position (-thickness, -thickness) because x external and flex band is always external in Y direction + self.path.LineTo(0, -thickness) + DebugMsg("Element "+str(i)+": xpos="+str(xpos)+' Size ='+str(FlexElement[0])+' radius ='+str(FlexElement[2])+' --> '+str(FlexElement[2]*math.pi/2)+'\n') + #First Notch Line, with length SizeEdge - SizeOfRoundedCorners + hLine = NotchLine((xpos, -thickness, 0), (xpos+FlexElement[0]-(LastRadius+FlexElement[2]), -thickness, 0), 0.0, FlexElement[TopJointOff]) + hLine.drawNotchLine(self.path) + xpos += FlexElement[0] - LastRadius - FlexElement[2] + #Then the line corresponding to rounded corner, also add coordinates for Flex lines + if FlexElement[2] > 0: + self.path.LineTo(xpos + FlexElement[2]*math.pi/2, -thickness) + ListFlexLines.append((xpos, FlexElement[2])) + xpos += FlexElement[2]*math.pi/2 + LastRadius = FlexElement[2] #For the next edge + if rightCircle == 0: + if self.FlexBandList[2] == 0: #External end ? + self.path.LineTo(xpos + thickness, -thickness) + xpos += thickness + self.path.LineTo(xpos, 0) + DebugMsg('Vertical Line 1, xpos='+str(xpos)+'\n') + #Then Vertical notch line, + vLine = NotchLine((xpos, 0, self.FlexBandList[2]), (xpos, self.height, self.FlexBandList[2]), math.pi/2, self.z_joint) + if rightCircle: + #In this case modify the line just created + #Specific case, shorten Right line of notches to take into account the wood hinge circle. Delete some notches on top + SizeCut = WoodHingeSize*thickness + vLine.ModifyNotchLine(SizeCut, True) #Last parameter, CutOnStart = True + elif rightCircleCut: + #In this case modify the line just created + #Specific case, shorten Right line of notches to take into account the wood hinge circle cut. Delete some notches on bottom + SizeCut = WoodHingeSize*thickness + vLine.ModifyNotchLine(SizeCut, False) #Last parameter, CutOnStart = False + vLine.drawNotchLine(self.path) #Draw the line of notches + if rightCircleCut: + #Then the cut. Choose 0.95*SizeCut because the actual circle is NOT centered of this vertical edge but shifted by thickness + self.path.LineTo(xpos, self.height+thickness-SizeCut*0.95) + #Then the rounded cut, almost a quarter of circle, radius SizeCut + self.path.Bezier(xpos-SizeCut*0.23, self.height+thickness-SizeCut*0.90, + xpos-SizeCut+thickness, self.height+thickness-SizeCut*0.551916, + xpos-SizeCut+thickness, self.height+thickness) + else: + self.path.LineTo(xpos, self.height+thickness) + DebugMsg("Start bottom line, reverse\n") + #Then Bottom line (reverse from top line) + if self.FlexBandList[2] == 0: #External end ? + self.path.LineTo(xpos - thickness, self.height+thickness) + xpos -= thickness + for i in range(len(self.FlexBandList)-1, 2, -1): #Start at end up to third element + #For reverse drawing, should have the radius of the next corner + if i > 3: + NextRadius = self.FlexBandList[i-1][2] + else: + NextRadius = 0 + FlexElement = self.FlexBandList[i] + DebugMsg("Element "+str(i)+": xpos="+str(xpos)+' Size ='+str(FlexElement[0])+' radius ='+str(FlexElement[2])+' --> '+str(FlexElement[2]*math.pi/2)+' Next Radius='+str(NextRadius)+'\n') + #First the line corresponding to rounded corner (reverse from previous) + DebugMsg("Draw line for rounded corner, size ="+str(FlexElement[2]*math.pi/2)+" New xpos="+str(xpos - FlexElement[2]*math.pi/2)+'\n') + if FlexElement[2] > 0: + self.path.LineTo(xpos - FlexElement[2]*math.pi/2, self.height+thickness) + xpos -= FlexElement[2]*math.pi/2 + #Then Notch Line + if i == 3 and leftCircleCut: + #specific case, draw up to start of cut + self.path.LineTo(SizeCut - thickness , self.height+thickness) + xpos = 0 #Not true yet, but needed to place the vertical line at the right position + DebugMsg("leftCircleCut True, pathto "+str((SizeCut - thickness , self.height+thickness))+" xpos ="+str(xpos)+"\n") + else: + hLine = NotchLine((xpos, self.height+thickness, 0), (xpos-(FlexElement[0]-FlexElement[2]-NextRadius), self.height+thickness, 0), math.pi, FlexElement[BotJointOff]) + hLine.drawNotchLine(self.path) + xpos -= FlexElement[0] - NextRadius - FlexElement[2] + if leftCircleCut == False: + if self.FlexBandList[1] == 0: #External Start ? + self.path.LineTo(xpos - thickness, self.height+thickness) + xpos -= thickness + self.path.LineTo(xpos, self.height) + #Then Vertical notch line for left edge + vLine = NotchLine((xpos, self.height, self.FlexBandList[1]), (xpos, 0, self.FlexBandList[1]), -math.pi/2, self.z_joint) + if leftCircle: + SizeCut = WoodHingeSize*thickness + vLine.ModifyNotchLine(SizeCut, False) #Last parameter, CutOnStart = False, because we start at bottom + elif leftCircleCut: + #In this case, shorten the notch line on bottom because of the circle cut + SizeCut = WoodHingeSize*thickness + vLine.ModifyNotchLine(SizeCut, True) #Last parameter, CutOnStart = True, because we start at bottom + #Draw the rounded cut, almost a quarter of circle, radius ExtRadius + self.path.Bezier(SizeCut-thickness, self.height+thickness-SizeCut*0.551916 + , SizeCut*0.23, self.height+thickness-SizeCut*0.90 + , 0, self.height+thickness-SizeCut*0.95) + + + vLine.drawNotchLine(self.path) + DebugMsg('Vertical Line 2, xpos='+str(xpos)+'\n') + + #Draw up to -thickness because external in Y direction + if leftCircle: + self.path.LineTo(xpos, SizeCut - thickness) + else: + self.path.LineTo(xpos, -thickness) + + # If circle, draw interior and rectangles + #Case with WoodHingeCorner, draw circle and rectangle + if leftCircle: + #Draw the circle internal to the hinge, radius is 2*thickness mm + CircleRadius = WoodHingeInternalCircle*thickness + self.path.drawCircle(leftCirclePos, -thickness, CircleRadius) + #Then the internal rectangle, rectangle height is 1.5*thickness + RectHeight = WoodHingeRect*thickness + self.path.MoveTo(leftCirclePos, -thickness) #Starting point Ext/Bottom + self.path.LineToVRel(-RectHeight) #Ext/Top + self.path.LineToHRel(thickness) #Int/Top + self.path.LineToVRel(RectHeight) #Int Bottom + self.path.LineToHRel(-thickness) #Return to start + if rightCircle: + #Draw the circle internal to the hinge, radius is 2*thickness mm + CircleRadius = WoodHingeInternalCircle*thickness + self.path.drawCircle(rightCirclePos, -thickness, CircleRadius) + #Then the internal rectangle, rectangle height is 1.5*thickness + RectHeight = WoodHingeRect*thickness + self.path.MoveTo(rightCirclePos, -thickness) #Starting point Ext/Bottom + self.path.LineToVRel(-RectHeight) #Ext/Top + self.path.LineToHRel(-thickness) #Int/Top + self.path.LineToVRel(RectHeight) #Int Bottom + self.path.LineToHRel(thickness) #Return to start + + + #Now draw flex lines + + for FlexLinePos in ListFlexLines: + Flex = FlexLines() + Flex.drawFlexLines(FlexLinePos[0], self.height, FlexLinePos[1], self.path) + #Get bounding box of path + self.BoundingBox = (self.path.xmin, self.path.ymin, self.path.xmax, self.path.ymax) + + if ClosePath: + self.path.Close() + self.path.GenPath() + + def drawRoundedFlexFace(self, ClosePath): + ''' + Draw a Flex band when all corners are rounded. This is a specific case because there are clips at the center of back face + Back face should be the first in list + ''' + + #Compute clips number and position, zone with clips will be between thickness and zbox - thickness + zoneclips = self.height - 2*thickness + #Size of clips is dependant to size of zoneclips + if zoneclips < 50: + sizeclips = 10 + else: + sizeclips = 18 + nbclips = int(zoneclips // sizeclips) + if nbclips == 0: + inkex.errormsg('Box is not high enough, no rrom for clips') + return + DebugMsg("\ndrawRoundedFlexFace, sizeclips="+str(sizeclips)+" nbclips="+str(nbclips)+'\n') + ListFlexLines = [] + LastRadius = self.FlexBandList[6][2] # Radius of left back corner + xpos = 0 + FlexElement = self.FlexBandList[3] + DebugMsg("First Half notch line, size ="+str(FlexElement[0])+" Size Round BackLeft="+str(LastRadius)+" Size Round BackRight="+str(FlexElement[2])+'\n') + #The notch line will be centered on xpos (0), so should start at -(SizeNotchLine-SizeRadius_BackLeft-SizeRadius_BackRight)/2 + First_hLine = NotchLine((-(FlexElement[0]-FlexElement[2] - LastRadius)/2, -thickness, 0), ((FlexElement[0]-FlexElement[2] - LastRadius)/2, -thickness, 0), 0.0, FlexElement[1], 1) #Draw only second half + if First_hLine.StartStatus == 0: + self.path.MoveTo(0, -thickness) # Start position (0, -thickness) because flex band is external in Y direction, and this side start internal in X + else: + self.path.MoveTo(0, 0) # Start position (0, 0) because flex band is internal in Y direction, and this side start internal in X + First_hLine.drawNotchLine(self.path) + xpos = (FlexElement[0]-FlexElement[2]-LastRadius)/2 + DebugMsg("After drawing first half of notch line, xpos ="+str(xpos)+'\n') + ListFlexLines.append((xpos, FlexElement[2])) #Add this position to draw flex lines. + #Then the line corresponding to rounded corner + if FlexElement[2] > 0: + self.path.LineTo(xpos + FlexElement[2]*math.pi/2, -thickness) + xpos += FlexElement[2]*math.pi/2 + DebugMsg("Line corresponding to back right corner, l="+str(FlexElement[2]*math.pi/2)+" xpos="+str(xpos)+'\n') + LastRadius = FlexElement[2] + #Now read all elements (4..N-1) --> 4..6 here + for i in range(4, 7): + FlexElement = self.FlexBandList[i] + DebugMsg("Element "+str(i)+": xpos="+str(xpos)+' Size ='+str(FlexElement[0])+' radius ='+str(FlexElement[2])+" LastRadius="+str(LastRadius)+"--> "+str(FlexElement[0] - LastRadius - FlexElement[2]) +'\n') + #First Notch Line + hLine = NotchLine((xpos, -thickness, 0), (xpos+FlexElement[0] - LastRadius - FlexElement[2] , -thickness, 0), 0.0, FlexElement[1], 0) + hLine.drawNotchLine(self.path) + xpos += FlexElement[0] - LastRadius - FlexElement[2] + #Then the line corresponding to rounded corner + if FlexElement[2] > 0: + self.path.LineTo(xpos + FlexElement[2]*math.pi/2, -thickness) + ListFlexLines.append((xpos, FlexElement[2])) + xpos += FlexElement[2]*math.pi/2 + LastRadius = FlexElement[2] + DebugMsg("After drawing line for rounded corner, xpos="+str(xpos)+'\n') + + #Last element + FlexElement = self.FlexBandList[7] + DebugMsg("Last Element (7): xpos="+str(xpos)+' Size ='+str(FlexElement[0])+' radius ='+str(FlexElement[2])+" LastRadius="+str(LastRadius)+"--> "+str(FlexElement[0] - LastRadius - FlexElement[2]) +'\n') + #Last Notch Line, at last half of it ! First half indeed. + hLine = NotchLine((xpos, -thickness, 0), (xpos+FlexElement[0] - LastRadius - FlexElement[2], -thickness, 0), 0.0, FlexElement[1], -1) + hLine.drawNotchLine(self.path) + xpos += (FlexElement[0] - LastRadius - FlexElement[2])/2 + + self.path.LineTo(xpos, thickness) + DebugMsg('Clip Line 1, xpos='+str(xpos)+'\n') + #Then Vertical clip line + self.path.LineToVRel((zoneclips - nbclips*sizeclips)/2) + for i in range(nbclips): + self.drawClip(sizeclips, 1) + + DebugMsg("Bottom line, reverse, start at xpos="+str((xpos, self.height+thickness))+'\n') + #Then Bottom line (reverse from top line) + FlexElement = self.FlexBandList[7] + #Element 7 is the last one, with radius of Back Right corner + NextRadius = self.FlexBandList[6][2] #This is the radius of the left right corner + DebugMsg("Element 7: xpos="+str(xpos)+' Size ='+str(FlexElement[0])+' radius ='+str(FlexElement[2])+' --> '+str(FlexElement[0]-FlexElement[2]-NextRadius)+'\n') + #Last Notch Line, half line. Center line on xpos + hLine = NotchLine((xpos + (FlexElement[0] - NextRadius - FlexElement[2])/2, self.height+thickness, 0), (xpos-(FlexElement[0] - NextRadius - FlexElement[2])/2, self.height+thickness, 0), math.pi, FlexElement[3], 1) + if hLine.StartStatus == 0: + self.path.LineTo(xpos, self.height+thickness) + else: + self.path.LineTo(xpos, self.height) + hLine.drawNotchLine(self.path) + xpos -= (FlexElement[0] - NextRadius - FlexElement[2])/2 + for i in range(6, 3, -1): #Start at end up to third element + FlexElement = self.FlexBandList[i] + NextRadius = self.FlexBandList[i-1][2] + DebugMsg("Element "+str(i)+": xpos="+str(xpos)+' Size ='+str(FlexElement[0])+" radius ="+str(FlexElement[2])+" NextRadius="+str(NextRadius)+' --> '+str(FlexElement[0] - FlexElement[2] - NextRadius)+'\n') + #First the line corresponding to rounded corner (reverse from previous) + if FlexElement[2] > 0: + self.path.LineTo(xpos - FlexElement[2]*math.pi/2, self.height+thickness) + xpos -= FlexElement[2]*math.pi/2 + DebugMsg("After line for rounded corner, l="+str(FlexElement[2]*math.pi/2)+" Pos="+str((xpos, self.height+thickness))+'\n') + #Then Notch Line + hLine = NotchLine((xpos, self.height+thickness, 0), (xpos-(FlexElement[0] - FlexElement[2] - NextRadius), self.height+thickness, 0), math.pi, FlexElement[3], 0) + hLine.drawNotchLine(self.path) + xpos -= FlexElement[0] - FlexElement[2] - NextRadius + + NextRadius = self.FlexBandList[7][2] + FlexElement = self.FlexBandList[3] + DebugMsg("First Element (3): xpos="+str(xpos)+' Size ='+str(FlexElement[0])+" radius ="+str(FlexElement[2])+" NextRadius="+str(NextRadius)+' --> '+str(FlexElement[0] - FlexElement[2] - NextRadius)+'\n') + #Then Last round corner + self.path.LineTo(xpos - FlexElement[2]*math.pi/2, self.height+thickness) + xpos -= FlexElement[2]*math.pi/2 + DebugMsg("Last Round corner, l="+str(FlexElement[2]*math.pi/2)+" new pos="+str((xpos, self.height+thickness))+'\n') + #Then Notch Line, half of it + hLine = NotchLine((xpos, self.height+thickness, 0), (xpos-(FlexElement[0]-FlexElement[2]-LastRadius), self.height+thickness, 0), math.pi, FlexElement[3], -1) #Draw only first half + hLine.drawNotchLine(self.path) + xpos -= (FlexElement[0]-FlexElement[2] - LastRadius)/2 + self.path.LineTo(xpos, self.height) + #Then Vertical clip line + DebugMsg('Vertical Clip 2, pos='+str((xpos, self.height))+'\n') + #and vertical trip (reverse) + self.path.LineToVRel(-1.0*((zoneclips - nbclips*sizeclips)/2) - thickness) + for i in range(nbclips): + self.drawClip(sizeclips, -1) + if First_hLine.StartStatus == 0: #If StartStatus is external, move to (0,-Thickness) + self.path.LineTo(0, -thickness) + else: + self.path.LineTo(0, 0) + + #Now draw flex lines + + for FlexLinePos in ListFlexLines: + Flex = FlexLines() + Flex.drawFlexLines(FlexLinePos[0], self.height, FlexLinePos[1], self.path) + #Get bounding box of path + self.BoundingBox = (self.path.xmin, self.path.ymin, self.path.xmax, self.path.ymax) + + if ClosePath: + self.path.Close() + self.path.GenPath() + + def drawSideLineNotches(self): + ''' + Draw the side line notches used with sliding lid. These lines are on left and right (if flex) lines + These lines are created whenever the top notches are not null + ''' + n_side_line = 0 + ypos = -self.BoundingBox[1] + LastRadius = 0 + for i in range(3, len(self.FlexBandList)): + FlexElement = self.FlexBandList[i] + if FlexElement[1] > 0: #Notches are present, draw SideLine with notches + n_side_line += 1 + DebugMsg("\nDraw "+self.BaseName+'LidJoint'+str(n_side_line)+" Radius="+str(FlexElement[2])+" LastRadius="+str(LastRadius)+" Size ="+str(FlexElement[0] - FlexElement[2] - LastRadius)+'\n') + Line = BoxFace(self.BaseName+'LidJoint'+str(n_side_line), + CornerPoint((0,0), 0, 1, 1), 0, #Start point, no notch + CornerPoint((FlexElement[0] - FlexElement[2] - LastRadius,0), 0, 1, 1), 0, #Size is up to rounded corner, no notch for the small side + CornerPoint((FlexElement[0] - FlexElement[2] - LastRadius,thickness), 0, 1, 1), FlexElement[1], #Same x, height = 2*thickness, joints up to next + CornerPoint((0, thickness), 0, 1, 1), 0, + self.InkscapeGroup, [-self.BoundingBox[2]-2, ypos]) + ypos -= 2*thickness + 2 + Line.drawSimpleFace(True) + LastRadius = FlexElement[2] + + +class BoxFace: + ''' + This class deals with faces + Each face is defined with 4 corners and the size of the finger joints between the corners + finger joint size = 0 means no finger joints (straight line) + The InkscapeGroup parameter is used to bind the path in this group + The PositionInPage parameter is used to fix the path within the inkscape document + ''' + def __init__(self, name, top_left, top_finger_joint, top_right, right_finger_joint, bottom_right, bottom_finger_joint, bottom_left, left_finger_joint, InkscapeGroup, PositionInPage, Path=None): + #First set up the corners + self.top_left_corner = top_left + self.top_right_corner = top_right + self.bottom_right_corner = bottom_right + self.bottom_left_corner = bottom_left + #then the lines between the corners + self.TopLine = NotchLine((top_left.x_start_joint, top_left.y_start_joint, top_left.y_internal), (top_right.x_end_joint, top_right.y_end_joint, top_right.y_internal), 0, top_finger_joint) + + self.RightLine = NotchLine((top_right.x_start_joint, top_right.y_start_joint, top_right.x_internal), (bottom_right.x_end_joint, bottom_right.y_end_joint, bottom_right.x_internal), math.pi/2, right_finger_joint) + + self.BottomLine = NotchLine((bottom_right.x_start_joint, bottom_right.y_start_joint, bottom_right.y_internal), (bottom_left.x_end_joint, bottom_left.y_end_joint, bottom_left.y_internal), math.pi, bottom_finger_joint) + + self.LeftLine = NotchLine((bottom_left.x_start_joint, bottom_left.y_start_joint, bottom_left.x_internal), (top_left.x_end_joint, top_left.y_end_joint, top_left.x_internal), -math.pi/2, left_finger_joint) + + #Update PositionInPage to take into account external corners or notches + if self.top_left_corner.WoodHingeCorner: + PositionInPage[0] -= (WoodHingeSize+1)*thickness + PositionInPage[1] -= WoodHingeSize*thickness + elif self.top_right_corner.WoodHingeCorner: + PositionInPage[1] -= WoodHingeSize*thickness + PositionInPage[0] -= thickness + elif self.top_left_corner.x_internal == 0 or self.bottom_left_corner.x_internal == 0 or self.LeftLine.nb_finger_joint > 0: + PositionInPage[0] -= thickness + if self.top_left_corner.y_internal == 0 or self.top_right_corner.y_internal == 0 or self.TopLine.nb_finger_joint > 0: + PositionInPage[1] -= thickness + self.BoundingBox = (-PositionInPage[0], -PositionInPage[1], -PositionInPage[0], -PositionInPage[1]) + self.name = name + self.InkscapeGroup = InkscapeGroup + #If needed, create path which will be used to draw the face + #The path will be in the group InkscapeGroup + if Path == None: + self.path = th_inkscape_path(PositionInPage, InkscapeGroup, name) + DebugMsg("Creating path("+name+") Position ="+str(PositionInPage)+'\n') + else: + self.path = Path + #DebugMsg("Create path "+str(name)+ " PositionInPage="+str(PositionInPage)+'\n') + + def Close(self): + ''' + Close and write the path after drawing is done + ''' + self.path.Close() + self.path.GenPath() + + + def drawSimpleFace(self, ClosePath): + ''' + Draw the face, when there are no other elements in the perimeter + If ClosePath is true the path is closed + ''' + if self.top_left_corner.WoodHingeCorner: + #Specific case, shorten Left line of notches to take into account the wood hinge circle + #But first copy values from right edge, because WoodHingeCorner has modified the notch line + self.LeftLine.start_line_joint_y = self.RightLine.end_line_joint_y + self.LeftLine.JointSize = self.RightLine.JointSize + self.LeftLine.nb_finger_joint = self.RightLine.nb_finger_joint + self.LeftLine.EndY = self.RightLine.StartY + SizeCut = WoodHingeSize * thickness + #Start from bottom (because reverse on left line) up to sizecut + self.LeftLine.ModifyNotchLine(SizeCut, False) #Last parameter, CutOnStart = False, because we start at bottom + if self.top_right_corner.WoodHingeCorner: + #Specific case, shorten Right line of notches to take into account the wood hinge circle + #But first copy values from Left edge, because WoodHingeCorner has modified the notch line + self.RightLine.start_line_joint_y = self.LeftLine.end_line_joint_y + self.RightLine.end_line_joint_y = self.LeftLine.start_line_joint_y + self.RightLine.JointSize = self.LeftLine.JointSize + self.RightLine.nb_finger_joint = self.LeftLine.nb_finger_joint + self.RightLine.StartY = self.LeftLine.EndY + SizeCut = WoodHingeSize * thickness + self.RightLine.ModifyNotchLine(SizeCut, True) #Last parameter, CutOnStart = False, because we start at Top + # Go To starting point + self.path.MoveTo(self.top_left_corner.x_end_joint, self.top_left_corner.y_end_joint) + #DebugMsg("StartPoint, PathPos ="+str((self.path.x, self.path.y))+" Bounding Box="+str(self.path.GetBoundingBox())+'\n') + #first (top left) corner + self.top_left_corner.drawCorner(self.path) + #DebugMsg("TopLeft, PathPos ="+str((self.path.x, self.path.y))+" Bounding Box="+str(self.path.GetBoundingBox())+'\n') + #then top edge + self.TopLine.drawNotchLine(self.path) + #DebugMsg("Top Edge, PathPos ="+str((self.path.x, self.path.y))+" Bounding Box="+str(self.path.GetBoundingBox())+'\n') + #Top right corner + self.top_right_corner.drawCorner(self.path) + #DebugMsg("Top Right corner, PathPos ="+str((self.path.x, self.path.y))+" Bounding Box="+str(self.path.GetBoundingBox())+'\n') + #Right edge + self.RightLine.drawNotchLine(self.path) + #DebugMsg("Right Edge, PathPos ="+str((self.path.x, self.path.y))+" Bounding Box="+str(self.path.GetBoundingBox())+'\n') + #Bottom right corner + self.bottom_right_corner.drawCorner(self.path) + #DebugMsg("Bottom Right corner, PathPos ="+str((self.path.x, self.path.y))+" Bounding Box="+str(self.path.GetBoundingBox())+'\n') + #Bottom edge + self.BottomLine.drawNotchLine(self.path) + #DebugMsg("Bottom Edge, PathPos ="+str((self.path.x, self.path.y))+" Bounding Box="+str(self.path.GetBoundingBox())+'\n') + #Bottom left corner + self.bottom_left_corner.drawCorner(self.path) + #DebugMsg("Bottom Left corner, PathPos ="+str((self.path.x, self.path.y))+" Bounding Box="+str(self.path.GetBoundingBox())+'\n') + #Left edge + self.LeftLine.drawNotchLine(self.path) + #DebugMsg("Left Edge, PathPos ="+str((self.path.x, self.path.y))+" Bounding Box="+str(self.path.GetBoundingBox())+'\n') + #The position is now (top_left_corner.x_end_joint, top_left_corner.y_end_joint), it is the starting point + + #Case with WoodHingeCorner, draw circle and rectangle + if self.top_left_corner.WoodHingeCorner: + #Draw the circle internal to the hinge, radius is 2*thickness mm + CircleRadius = WoodHingeInternalCircle*thickness + self.path.drawCircle(-thickness, -thickness, CircleRadius) + #Then the internal rectangle, rectangle height is 1.5*thickness + RectHeight = WoodHingeRect*thickness + self.path.MoveTo(-thickness, -thickness) #Starting point Ext/Bottom + self.path.LineToVRel(-RectHeight) #Ext/Top + self.path.LineToHRel(thickness) #Int/Top + self.path.LineToVRel(RectHeight) #Int Bottom + self.path.LineToHRel(-thickness) #Return to start + if self.top_right_corner.WoodHingeCorner: + #Draw the circle internal to the hinge, radius is 2*thickness mm + CircleRadius = WoodHingeInternalCircle*thickness + self.path.drawCircle(self.top_right_corner.x_corner+thickness, -thickness, CircleRadius) + #Then the internal rectangle, rectangle height is 1.5*thickness + RectHeight = WoodHingeRect*thickness + self.path.MoveTo(self.top_right_corner.x_corner+thickness, -thickness) #Starting point Ext/Bottom + self.path.LineToVRel(-RectHeight) #Ext/Top + self.path.LineToHRel(-thickness) #Int/Top + self.path.LineToVRel(RectHeight) #Int Bottom + self.path.LineToHRel(thickness) #Return to start + + #Get bounding box of path + self.BoundingBox = (self.path.xmin, self.path.ymin, self.path.xmax, self.path.ymax) + + #Close the path if asked + if ClosePath: + self.path.Close() + self.path.GenPath() + + def drawSimpleFaceHinge(self, HingeList, ClosePath): + ''' + Draw the face, and the cut for the hinge + If ClosePath is true the path is closed + ''' + # Go To starting point + self.path.MoveTo(self.top_left_corner.x_end_joint, self.top_left_corner.y_end_joint) + #DebugMsg("StartPoint, PathPos ="+str((self.path.x, self.path.y))+" Bounding Box="+str(self.path.GetBoundingBox())+'\n') + #first (top left) corner + self.top_left_corner.drawCorner(self.path) + #DebugMsg("TopLeft, PathPos ="+str((self.path.x, self.path.y))+" Bounding Box="+str(self.path.GetBoundingBox())+'\n') + #then top edge, no notch in this case, but cut for the hinge(s) + for Hinge in HingeList: + HingePos = Hinge[2] - 1 + self.path.LineTo(HingePos, 0) + #Then cut for the Hinge + self.path.LineToVRel(4.5*thickness+1) + self.path.LineToHRel(5*thickness + 2.5*SteelHingeSpacing + 2) + self.path.LineToVRel(-4.5*thickness-1) + #Then line up to length + self.path.LineTo(self.top_right_corner.x_corner, 0) #Up to end of top line + #Top right corner + self.top_right_corner.drawCorner(self.path) + #DebugMsg("Top Right corner, PathPos ="+str((self.path.x, self.path.y))+" Bounding Box="+str(self.path.GetBoundingBox())+'\n') + #Right edge + self.RightLine.drawNotchLine(self.path) + #DebugMsg("Right Edge, PathPos ="+str((self.path.x, self.path.y))+" Bounding Box="+str(self.path.GetBoundingBox())+'\n') + #Bottom right corner + self.bottom_right_corner.drawCorner(self.path) + #DebugMsg("Bottom Right corner, PathPos ="+str((self.path.x, self.path.y))+" Bounding Box="+str(self.path.GetBoundingBox())+'\n') + #Bottom edge + self.BottomLine.drawNotchLine(self.path) + #DebugMsg("Bottom Edge, PathPos ="+str((self.path.x, self.path.y))+" Bounding Box="+str(self.path.GetBoundingBox())+'\n') + #Bottom left corner + self.bottom_left_corner.drawCorner(self.path) + #DebugMsg("Bottom Left corner, PathPos ="+str((self.path.x, self.path.y))+" Bounding Box="+str(self.path.GetBoundingBox())+'\n') + #Left edge + self.LeftLine.drawNotchLine(self.path) + #DebugMsg("Left Edge, PathPos ="+str((self.path.x, self.path.y))+" Bounding Box="+str(self.path.GetBoundingBox())+'\n') + #The position is now (top_left_corner.x_end_joint, top_left_corner.y_end_joint), it is the starting point + + #Get bounding box of path + self.BoundingBox = (self.path.xmin, self.path.ymin, self.path.xmax, self.path.ymax) + + #Close the path if asked + if ClosePath: + self.path.Close() + self.path.GenPath() + #DebugMsg("Closing path, BoundingBox="+str(self.BoundingBox)+'\n') + + def drawFaceWithHoles(self, n_slot, slot_size, DeltaHolePosition, z_joint_size, ClosePath, HingeList = None): + ''' + Draw a face with holes (for internal walls) + The holes positions are given in a list (see CalcNotchPos), and an offset will be added if necessary (shorten face) + ''' + if HingeList == None: + #No cut for hinge, call regular function to draw face + self.drawSimpleFace(False) #First draw the face itself, without closing path + else: + self.drawSimpleFaceHinge(HingeList, False) #First draw the face itself, without closing path + #now the holes used to fix the walls + #This line will be used to draw the holes + l_NotchLine = NotchLine((0, 0, 1), (self.bottom_right_corner.y_end_joint, 0, 1), math.pi/2, z_joint_size) + + StartHole = l_NotchLine.start_line_joint_y + l_NotchLine.JointSize + Spacing = 2*l_NotchLine.JointSize + DebugMsg("drawFaceWithHoles, Hole Start ="+str(StartHole)+" Spacing="+str(Spacing)+" n_holes"+str(l_NotchLine.nb_finger_joint//2) + +' n_slot='+str(n_slot)+' slot_size='+str(slot_size)+" Delta_Pos="+str(DeltaHolePosition)+'\n') + for i in range(1, n_slot): + #For each wall, draw holes corresponding at each notch on zbox + for j in range((l_NotchLine.nb_finger_joint)//2): + drawHole(self.path, i*(slot_size+thickness) - DeltaHolePosition -thickness, StartHole + j*Spacing, thickness, l_NotchLine.JointSize, burn) + + #Close the path if asked + if ClosePath: + self.path.Close() + self.path.GenPath() + + def drawSideLineNotches(self, xpos, ypos): + ''' + Draw the side line notches used with sliding lid. These lines are on left and right lines + These lines are created whenever the top notches are not null + ''' + n_side_line = 0 + Line = BoxFace(self.name+'LidJoint', + CornerPoint((0,0), 0, 1, 1), 0, #Start point, no notch + CornerPoint((self.top_right_corner.xc - self.top_left_corner.xc,0), 0, 1, 1), 0, #Size is up to rounded corner, no notch for the small side + CornerPoint((self.top_right_corner.xc - self.top_left_corner.xc,thickness), 0, 1, 1), self.TopLine.JointSize, #Same x, height = 2*thickness, joints up to next + CornerPoint((0, thickness), 0, 1, 1), 0, + self.InkscapeGroup, [xpos, ypos]) + Line.drawSimpleFace(True) + + + def drawExternalBackSlidingLid(self, ClosePath): + ''' + Draw the face, specific case for sliding lid back face + If ClosePath is true the path is closed + ''' + # Go To starting point + self.path.MoveTo(self.top_left_corner.x_end_joint, self.top_left_corner.y_end_joint) + #first (top left) corner + self.top_left_corner.drawCorner(self.path) + #DebugMsg("TopLeft, PathPos ="+str((self.path.x, self.path.y))+" Bounding Box="+str(self.path.GetBoundingBox())+'\n') + #Then draw below thickness + self.path.LineToVRel(thickness) + #then top edge, without notches + self.path.LineToHRel(self.top_right_corner.x_end_joint) + #Then Up thickness + self.path.LineToVRel(-thickness) + #Top right corner + self.top_right_corner.drawCorner(self.path) + #DebugMsg("Top Right corner, PathPos ="+str((self.path.x, self.path.y))+" Bounding Box="+str(self.path.GetBoundingBox())+'\n') + #Right edge + self.RightLine.drawNotchLine(self.path) + #DebugMsg("Right Edge, PathPos ="+str((self.path.x, self.path.y))+" Bounding Box="+str(self.path.GetBoundingBox())+'\n') + #Bottom right corner + self.bottom_right_corner.drawCorner(self.path) + #DebugMsg("Bottom Right corner, PathPos ="+str((self.path.x, self.path.y))+" Bounding Box="+str(self.path.GetBoundingBox())+'\n') + #Bottom edge + self.BottomLine.drawNotchLine(self.path) + #DebugMsg("Bottom Edge, PathPos ="+str((self.path.x, self.path.y))+" Bounding Box="+str(self.path.GetBoundingBox())+'\n') + #Bottom left corner + self.bottom_left_corner.drawCorner(self.path) + #DebugMsg("Bottom Left corner, PathPos ="+str((self.path.x, self.path.y))+" Bounding Box="+str(self.path.GetBoundingBox())+'\n') + #Left edge + self.LeftLine.drawNotchLine(self.path) + #DebugMsg("Left Edge, PathPos ="+str((self.path.x, self.path.y))+" Bounding Box="+str(self.path.GetBoundingBox())+'\n') + #The position is now (top_left_corner.x_end_joint, top_left_corner.y_end_joint), it is the starting point + + #Get bounding box of path + self.BoundingBox = (self.path.xmin, self.path.ymin, self.path.xmax, self.path.ymax) + + #Close the path if asked + if ClosePath: + self.path.Close() + self.path.GenPath() + #DebugMsg("Closing path, BoundingBox="+str(self.BoundingBox)+'\n') + + def drawExternalBackWoodHingeLid(self, ClosePath): + ''' + Draw the face, specific case for wood hinge lid back face + This face will use a specific vertical notch lines, which are shorter by the circle of the hinge + If ClosePath is true the path is closed + ''' + DebugMsg("\n enter drawExternalBackWoodHingeLid\n") + #Size of wood hinge cut + SizeCut = WoodHingeSize*thickness + 2*burn + #Modify right line to accomodate this cut + self.RightLine.ModifyNotchLine(SizeCut, True) + #Do the same for left line, but reverse + self.LeftLine.ModifyNotchLine(SizeCut, False) + # Go To starting point + self.path.MoveTo(0, -thickness) + self.path.LineTo(self.top_right_corner.x_end_joint, -thickness) #Space for cut + #Then go to cut + self.path.LineToVRel(SizeCut) + self.path.LineToHRel(thickness) + #Right edge + self.RightLine.drawNotchLine(self.path) + #Bottom right corner + self.bottom_right_corner.drawCorner(self.path) + #Bottom edge + self.BottomLine.drawNotchLine(self.path) + #Bottom left corner + self.bottom_left_corner.drawCorner(self.path) + #Left edge + self.LeftLine.drawNotchLine(self.path) + #Then cut + self.path.LineToHRel(thickness) + self.path.LineTo(0, -thickness) + #The position is now (top_left_corner.x_end_joint, top_left_corner.y_end_joint), it is the starting point + + #Get bounding box of path + self.BoundingBox = (self.path.xmin, self.path.ymin, self.path.xmax, self.path.ymax) + + #Close the path if asked + if ClosePath: + self.path.Close() + self.path.GenPath() + #DebugMsg("Closing path, BoundingBox="+str(self.BoundingBox)+'\n') + + def drawLidBackWoodHinge(self, ClosePath): + ''' + Draw the lid back when Wood hinge is chosen, specific case for wood hinge lid back face + This face will use a specific vertical notch lines, which are shorter by the circle of the hinge + If ClosePath is true the path is closed + ''' + #Size of wood hinge cut + SizeCut = WoodHingeSize*thickness + 2*burn + DebugMsg("\n enter drawLidBackWoodHinge, SizeCut = "+str(SizeCut)+"\n") + DebugMsg("Joint size ="+str(self.RightLine.JointSize)+" Top_Right="+str((self.top_right_corner.x_corner, self.top_right_corner.y_corner))+" Bottom Right="+str((self.bottom_right_corner.x_corner, self.bottom_right_corner.y_corner))+"\n") + #Change right line, from top to bottom RightLine + self.RightLine.ModifyNotchLine(SizeCut, False) #Last Parameter false because we start on Top and cut is on bottom + #The left line will be the same but reverse + self.LeftLine.ModifyNotchLine(SizeCut, True) #Last Parameter false because we start on Bottom and cut is on bottom + # Go To starting point + self.path.MoveTo(self.top_left_corner.x_end_joint, self.top_left_corner.y_end_joint) + #DebugMsg("StartPoint, PathPos ="+str((self.path.x, self.path.y))+" Bounding Box="+str(self.path.GetBoundingBox())+'\n') + #first (top left) corner + self.top_left_corner.drawCorner(self.path) + #DebugMsg("TopLeft, PathPos ="+str((self.path.x, self.path.y))+" Bounding Box="+str(self.path.GetBoundingBox())+'\n') + #then top edge + self.TopLine.drawNotchLine(self.path) + #DebugMsg("Top Edge, PathPos ="+str((self.path.x, self.path.y))+" Bounding Box="+str(self.path.GetBoundingBox())+'\n') + #Top right corner + self.top_right_corner.drawCorner(self.path) + #Right edge + self.RightLine.drawNotchLine(self.path) + #Then the cut with the notch for the circle + StartNotchCircle = 1.5 * thickness + self.path.LineToHRel(-thickness) + self.path.LineTo(self.bottom_right_corner.x_end_joint - thickness, self.bottom_right_corner.y_corner - StartNotchCircle) + self.path.LineToHRel(thickness) + self.path.LineToVRel(StartNotchCircle) + self.path.LineTo(self.bottom_right_corner.x_end_joint - thickness, self.bottom_right_corner.y_corner) + #Bottom edge + self.path.LineTo(-thickness, self.bottom_left_corner.y_corner) + #Then Cut + self.path.LineToVRel(-StartNotchCircle) + self.path.LineToHRel(thickness) + self.path.LineTo(0, self.bottom_left_corner.y_corner - SizeCut) + self.path.LineToHRel(-thickness) + #Left edge + self.LeftLine.drawNotchLine(self.path) + self.path.LineTo(-thickness, -thickness) + + #Get bounding box of path + self.BoundingBox = (self.path.xmin, self.path.ymin, self.path.xmax, self.path.ymax) + + #Close the path if asked + if ClosePath: + self.path.Close() + self.path.GenPath() + #DebugMsg("Closing path, BoundingBox="+str(self.BoundingBox)+'\n') + + def drawExternalBackSteelHingeLid(self, HingeList, ClosePath): + ''' + Draw the face, specific case for lid with 'steel hinge' back face + This face will have cuts to place the real hinge elements + HingeList is a list of Hinge position + If ClosePath is true the path is closed + ''' + DebugMsg("\n enter drawExternalBackSteelHingeLid\n") + # Go To starting point + self.path.MoveTo(-thickness, -thickness) + #The top line will have cut for the hinge + for Hinge in HingeList: + HingePos = Hinge[2] + self.path.LineTo(HingePos + thickness, -thickness) #add thickness in x because hinge pos is internal, and sub thickness in y because always external + #Then Hinge + self.path.LineToVRel(2.5*thickness) + self.path.LineToHRel(thickness) + self.path.LineToVRel(-thickness + 0.5*SteelHingeSpacing) + self.path.LineToHRel(thickness + SteelHingeSpacing) + self.path.LineToVRel(thickness - 0.5*SteelHingeSpacing) + self.path.LineToHRel(thickness) + self.path.LineToVRel(-thickness + 0.5*SteelHingeSpacing) + self.path.LineToHRel(thickness + SteelHingeSpacing) + self.path.LineToVRel(thickness - 0.5*SteelHingeSpacing) + self.path.LineToHRel(thickness) + self.path.LineToVRel(-2.5*thickness) + #Then line up to length + self.path.LineTo(self.top_right_corner.x_corner, -thickness) #Up to end of top line + + #Right edge + self.RightLine.drawNotchLine(self.path) + #Bottom right corner + self.bottom_right_corner.drawCorner(self.path) + #Bottom edge + self.BottomLine.drawNotchLine(self.path) + #Bottom left corner + self.bottom_left_corner.drawCorner(self.path) + #Left edge + self.LeftLine.drawNotchLine(self.path) + #Then return to Start + self.path.LineTo(-thickness, -thickness) + + #Now draw holes for the hinge(s) + for Hinge in HingeList: + self.path.MoveTo(Hinge[2]+thickness, 3.5*thickness) + self.path.LineToHRel(thickness) + self.path.LineToVRel(-thickness) + self.path.LineToHRel(-thickness) + self.path.LineToVRel(thickness) + self.path.MoveTo(Hinge[2] + 3*thickness + SteelHingeSpacing, 3.5*thickness) + self.path.LineToHRel(thickness) + self.path.LineToVRel(-thickness) + self.path.LineToHRel(-thickness) + self.path.LineToVRel(thickness) + self.path.MoveTo(Hinge[2] + 5*thickness + 2*SteelHingeSpacing, 3.5*thickness) + self.path.LineToHRel(thickness) + self.path.LineToVRel(-thickness) + self.path.LineToHRel(-thickness) + self.path.LineToVRel(thickness) + + #Get bounding box of path + self.BoundingBox = (self.path.xmin, self.path.ymin, self.path.xmax, self.path.ymax) + + #Close the path if asked + if ClosePath: + self.path.Close() + self.path.GenPath() + #DebugMsg("Closing path, BoundingBox="+str(self.BoundingBox)+'\n') + + + def drawLidBackSteelHinge(self, HingeList, ClosePath): + ''' + Draw the lid back, specific case for lid with 'steel hinge' back face + This face will have cuts to place the real hinge elements + HingeList is a list of Hinge position + If ClosePath is true the path is closed + ''' + DebugMsg("\n enter drawLidBackSteelHinge\n") + # Go To starting point + self.path.MoveTo(self.top_left_corner.x_end_joint, self.top_left_corner.y_end_joint) + #DebugMsg("StartPoint, PathPos ="+str((self.path.x, self.path.y))+" Bounding Box="+str(self.path.GetBoundingBox())+'\n') + #first (top left) corner + self.top_left_corner.drawCorner(self.path) + #DebugMsg("TopLeft, PathPos ="+str((self.path.x, self.path.y))+" Bounding Box="+str(self.path.GetBoundingBox())+'\n') + #then top edge + self.TopLine.drawNotchLine(self.path) + #DebugMsg("Top Edge, PathPos ="+str((self.path.x, self.path.y))+" Bounding Box="+str(self.path.GetBoundingBox())+'\n') + #Top right corner + self.top_right_corner.drawCorner(self.path) + #Right edge + self.RightLine.drawNotchLine(self.path) + #Bottom right corner + self.bottom_right_corner.drawCorner(self.path) + #Bottom edge, this one has cut for the hinge(s). + z = self.bottom_right_corner.y_corner + #Now draw holes for the hinge(s), reverse because draw from right to left + for Hinge in reversed(HingeList): + HingePos = Hinge[2] + thickness + #First H line up to end of 2nd hinge + self.path.LineTo(HingePos + 5*thickness + 2.5*SteelHingeSpacing, z) + #Then Hinge + self.path.LineToVRel(-1.5*thickness - 0.5*SteelHingeSpacing) + self.path.LineToHRel(-thickness - SteelHingeSpacing) + self.path.LineToVRel(-thickness + 0.5*SteelHingeSpacing) + self.path.LineToHRel(-thickness) + self.path.LineToVRel(thickness - 0.5*SteelHingeSpacing) + self.path.LineToHRel(-thickness - SteelHingeSpacing) + self.path.LineToVRel(-thickness + 0.5*SteelHingeSpacing) + self.path.LineToHRel(-thickness) + self.path.LineToVRel(thickness - 0.5*SteelHingeSpacing) + self.path.LineToHRel(-thickness - SteelHingeSpacing) + self.path.LineToVRel(1.5*thickness + 0.5*SteelHingeSpacing) + #Then draw up to corner + self.path.LineTo(self.bottom_left_corner.x_end_joint, self.bottom_left_corner.y_end_joint) + #Bottom left corner + self.bottom_left_corner.drawCorner(self.path) + #Left edge + self.LeftLine.drawNotchLine(self.path) + #Then return to Start + self.path.LineTo(-thickness, -thickness) + + #Then draw holes for the hinge(s) + for Hinge in HingeList: + HingePos = Hinge[2] + 2*thickness + self.path.MoveTo(HingePos + 0.5*SteelHingeSpacing, z - 3.5*thickness) + self.path.LineToHRel(thickness) + self.path.LineToVRel(-thickness) + self.path.LineToHRel(-thickness) + self.path.LineToVRel(thickness) + self.path.MoveTo(HingePos + 2*thickness + 1.5*SteelHingeSpacing, z - 3.5*thickness) + self.path.LineToHRel(thickness) + self.path.LineToVRel(-thickness) + self.path.LineToHRel(-thickness) + self.path.LineToVRel(thickness) + #Get bounding box of path + self.BoundingBox = (self.path.xmin, self.path.ymin, self.path.xmax, self.path.ymax) + + #Close the path if asked + if ClosePath: + self.path.Close() + self.path.GenPath() + #DebugMsg("Closing path, BoundingBox="+str(self.BoundingBox)+'\n') + + def drawLidSideWoodHinge(self, FlagRight, ClosePath): + ''' + Generate lid side with integrated hinge. This is a rectangle with a rounded cut for the hinge and notches on 3 edges + No notch on the bottom edge + ''' + SizeCut = WoodHingeSize*thickness + 2*burn + DebugMsg("\n enter drawLidSideWoodHinge, SizeCut="+str(SizeCut)+" FlagRight ="+str(FlagRight)+"\n") + #Because of the cut on the lid, we have to change either the right of left line of notches + if FlagRight > 0: + self.RightLine.ModifyNotchLine(SizeCut, False) + else: + self.LeftLine.ModifyNotchLine(SizeCut, True) + # Go To starting point + self.path.MoveTo(self.top_left_corner.x_end_joint, self.top_left_corner.y_end_joint) + #DebugMsg("StartPoint, PathPos ="+str((self.path.x, self.path.y))+" Bounding Box="+str(self.path.GetBoundingBox())+'\n') + #first (top left) corner + self.top_left_corner.drawCorner(self.path) + #DebugMsg("TopLeft, PathPos ="+str((self.path.x, self.path.y))+" Bounding Box="+str(self.path.GetBoundingBox())+'\n') + #then top edge + self.TopLine.drawNotchLine(self.path) + #DebugMsg("Top Edge, PathPos ="+str((self.path.x, self.path.y))+" Bounding Box="+str(self.path.GetBoundingBox())+'\n') + #Top right corner + self.top_right_corner.drawCorner(self.path) + #Right edge, first start with normal notch line + self.RightLine.drawNotchLine(self.path) + #If right side, special case. Start with notches, but then switch to a circle + if FlagRight > 0: + #Then the cut. Choose 0.95*SizeCut because the actual circle is NOT centered of this vertical edge but shifted by thickness + self.path.LineTo(self.top_right_corner.x_corner, self.bottom_right_corner.y_corner-SizeCut*0.95) + #Then the rounded cut, almost a quarter of circle, radius SizeCut + self.path.Bezier(self.top_right_corner.x_corner-SizeCut*0.23, self.bottom_right_corner.y_corner-SizeCut*0.90, + self.top_right_corner.x_corner-SizeCut+thickness, self.bottom_right_corner.y_corner-SizeCut*0.551916, + self.top_right_corner.x_corner-SizeCut+thickness, self.bottom_right_corner.y_corner) + #No notches on bottom line, just go to next corner + self.path.LineTo(0, self.bottom_left_corner.y_corner) + else: + self.path.LineTo(self.top_right_corner.x_corner, self.bottom_right_corner.y_corner) #Up to corner + self.path.LineTo(SizeCut-thickness, self.bottom_left_corner.y_corner) #Bottom line up to circle cut + #Draw the rounded cut, almost a quarter of circle, radius ExtRadius + self.path.Bezier(SizeCut-thickness, self.bottom_left_corner.y_corner-SizeCut*0.551916 + , SizeCut*0.23, self.bottom_left_corner.y_corner-SizeCut*0.90 + , 0, self.bottom_left_corner.y_corner-SizeCut*0.95) + #Left edge + self.LeftLine.drawNotchLine(self.path) + self.path.LineTo(0, -thickness) #Up to starting point + + #Get bounding box of path + self.BoundingBox = (self.path.xmin, self.path.ymin, self.path.xmax, self.path.ymax) + + #Close the path if asked + if ClosePath: + self.path.Close() + self.path.GenPath() + #DebugMsg("Closing path, BoundingBox="+str(self.BoundingBox)+'\n') + + + + +class BoxMakerGenericGenerator(inkex.Effect): + """ + Creates a new layer with the drawings for a parametrically generated box. + """ + def __init__(self): + ''' + init for all parameters + ''' + inkex.Effect.__init__(self) + self.knownUnits = ['in', 'pt', 'px', 'mm', 'cm', 'm', 'km', 'pc', 'yd', 'ft'] + + self.arg_parser.add_argument('--unit', action = 'store', + type = str, dest = 'unit', default = 'mm', + help = 'Unit, should be one of ') + + self.arg_parser.add_argument('--thickness', action = 'store', + type = float, dest = 'thickness', default = '3.0', + help = 'Material thickness') + + self.arg_parser.add_argument('--lid_type', action = 'store', + type = str, dest = 'lid_type', default = 'Simple', + help = 'Box lid style ') + + self.arg_parser.add_argument('--n_slot_x', action = 'store', + type = int, dest = 'n_slot_x', default = '2', + help = 'Number of columns of slots') + + self.arg_parser.add_argument('--n_slot_y', action = 'store', + type = int, dest = 'n_slot_y', default = '2', + help = 'Number of rows of slots') + + self.arg_parser.add_argument('--z', action = 'store', + type = float, dest = 'z', default = '40.0', + help = "box height") + + self.arg_parser.add_argument('--y', action = 'store', + type = float, dest = 'y', default = '60.0', + help = "box depth") + + self.arg_parser.add_argument('--x', action = 'store', + type = float, dest = 'x', default = '40.0', + help = "box width") + + self.arg_parser.add_argument('--z_lid', action = 'store', + type = float, dest = 'z_lid', default = '20.0', + help = 'lid height') + + self.arg_parser.add_argument('--z_dome_lid', action = 'store', + type = float, dest = 'z_dome_lid', default = '20.0', + help = 'dome lid height') + + self.arg_parser.add_argument('--SkipFlexLines', action = 'store', + type = inkex.Boolean, dest = 'SkipFlexLines', default = 'true', + help = 'Skip flex lines when possible') + + self.arg_parser.add_argument('--burn', action = 'store', + type = float, dest = 'burn', default = '0.1', + help = 'laser burn size') + + self.arg_parser.add_argument('--StraigthCorners', action = 'store', + type = inkex.Boolean, dest = 'StraigthCorners', default = 'true', + help = 'Straight corners') + + self.arg_parser.add_argument('--back_left_radius', action = 'store', + type = float, dest = 'back_left_radius', default = '10.0', + help = 'Radius of top left rounded corner') + + self.arg_parser.add_argument('--back_right_radius', action = 'store', + type = float, dest = 'back_right_radius', default = '10.0', + help = 'Radius of top right rounded corner') + + self.arg_parser.add_argument('--front_left_radius', action = 'store', + type = float, dest = 'front_left_radius', default = '10.0', + help = 'Radius of bottom left rounded corner') + + self.arg_parser.add_argument('--front_right_radius', action = 'store', + type = float, dest = 'front_right_radius', default = '10.0', + help = 'Radius of bottom right rounded corner') + + self.arg_parser.add_argument('--AutoSize', action = 'store', + type = inkex.Boolean, dest = 'AutoSizeJoints', default = 'true', + help = 'Size of finger joints computed from box dimlensions') + + self.arg_parser.add_argument('--x_joint', action = 'store', + type = float, dest = 'x_joint', default = '10.0', + help = 'Size of finger joints in X direction') + + self.arg_parser.add_argument('--y_joint', action = 'store', + type = float, dest = 'y_joint', default = '10.0', + help = 'Size of finger joints in Y direction') + + self.arg_parser.add_argument('--z_joint', action = 'store', + type = float, dest = 'z_joint', default = '10.0', + help = 'Size of finger joints in Z direction') + + self.arg_parser.add_argument('--Topic', action = 'store', + type = str, dest = 'TopicPage', + help = 'Size of finger joints in Z direction') + + + self.BoundingBox = [0, 0, 0, 0] + self.HingeList = [] + + try: + inkex.Effect.unittouu # unitouu has moved since Inkscape 0.91 + except AttributeError: + try: + def unittouu(self, unit): + return inkex.unittouu(unit) + except AttributeError: + pass + + def UpdateBoundingBox(self, Face): + if Face.BoundingBox[0] < self.BoundingBox[0]: + self.BoundingBox[0] = Face.BoundingBox[0] + if Face.BoundingBox[1] < self.BoundingBox[1]: + self.BoundingBox[1] = Face.BoundingBox[1] + if Face.BoundingBox[2] > self.BoundingBox[2] - 2: + self.BoundingBox[2] = Face.BoundingBox[2] + 2 + if Face.BoundingBox[3] > self.BoundingBox[3] - 2: + self.BoundingBox[3] = Face.BoundingBox[3] + 2 + + def CalcNotchPos(self, n_slot, size_slot): + ''' + Compute the position of notches for a vertical or horizontal line + No offset, i.e. position is relative to internal side + Return a list of positions, each position is a tuple with 3 elements, giving start, size of notch and group number + These positions are NOT sensitive to burn factor. The burn factor should be added later if needed + ''' + NPos = [] + if size_slot < 25: + #Small size, only one notch + i_notch_number = 1 + notch_size = size_slot / 3 # Notch is center aligned + elif size_slot < 80: + #Medium size, draw 5mm notches + notch_number = size_slot / 5 + if (notch_number % 2) == 0: + notch_number -= 1 #should be odd + notch_size = size_slot / notch_number + i_notch_number = int(notch_number // 2) + else: + #Large size, draw 10mm notches + notch_number = size_slot / 10 + if (notch_number % 2) == 0: + notch_number -= 1 #should be odd + notch_size = size_slot / notch_number + i_notch_number = int(notch_number // 2) + for j in range(n_slot): + #For each slot + for i in range(i_notch_number): + NPos.append((j*(size_slot+thickness)+notch_size+2*i*notch_size, notch_size, j)) #Add a tuple with 3 elements for start, size of notch and group number + return NPos + + def ComputeJointSize(self, xbox, ybox, zbox, back_left_radius, back_right_radius, front_right_radius, front_left_radius): + ''' + This function compute finger joint size + It will try to have identical finger joint, but if not possible we will have different joint sizes + Basic joint size : if l < 100, size = 5mm, when l > 100 --> size = 0.5*sqrt(l) + ''' + #First take into account radius + x = min(xbox - back_left_radius - back_right_radius, xbox - front_right_radius - front_left_radius) + if x < 18: + inkex.errormsg('Error: box length too small, should be at least 18mm + round radius') + exit() + y = min(ybox - back_left_radius - front_left_radius, ybox - front_right_radius - back_right_radius) + if y < 18: + inkex.errormsg('Error: box depth too small, should be at least 18mm + round radius') + exit() + if x <= 100: + basic_size_x = 5.0 + else: + basic_size_x = 5.0*math.pow(x/100,0.8) + if y <= 100: + basic_size_y = 5.0 + else: + basic_size_y = 5.0*math.pow(y/100,0.8) + if zbox <= 100: + basic_size_z = 5.0 + else: + basic_size_z = 5.0*math.pow(zbox/100,0.8) + #DebugMsg("Basic joint sizes (1) :"+str((basic_size_x, basic_size_y, basic_size_z))+' \n') + #Now try to converge towards a single size + # First with x and y + if basic_size_x > basic_size_y and y >= 3.0*basic_size_x + 1: + #x is greater, but at least 3 joints in y direction (one notch) + basic_size_y = basic_size_x + if basic_size_y > basic_size_x and x >= 3.0*basic_size_y + 1: + #y is greater, but at least 3 joints in x direction (one notch) + basic_size_x = basic_size_y + # For z direction, should have at least 3 joint size (one notch) + if basic_size_x > basic_size_y: + if zbox > 3*basic_size_x + 1: + basic_size_z = basic_size_x + else: + basic_size_z = (zbox-1) / 3 #If not possible, set max finger size + else: + if zbox > 3*basic_size_y + 1: + basic_size_z = basic_size_y + else: + basic_size_z = (zbox-1) / 3 #If not possible, set max finger size + return(basic_size_x, basic_size_y, basic_size_z) + + def drawSteelHingeElement(self, idx, thickness, xOffset, yOffset, parent): + StartOffset = (xOffset, yOffset) + xOffset -= 2*thickness + + path = th_inkscape_path((xOffset, yOffset), parent, 'HingeElt_'+str(idx)) + path.MoveTo(0, 0) + #Start at upper right + path.LineToVRel(thickness) + path.LineToHRel(-thickness) + path.LineToVRel(thickness) + path.LineToHRel(thickness) + path.LineToVRel(thickness) + #Now draw half circle (radius is 1.5*thickness) + #Position is now 0,3*thickness + path.Bezier(1.5*thickness*0.551916, 3*thickness, 1.5*thickness, 3*thickness+1.5*thickness*0.551916, 1.5*thickness, 4.5*thickness) + path.Bezier(1.5*thickness, 4.5*thickness+1.5*thickness*0.551916, 1.5*thickness*(1-0.551916), 6*thickness, 0, 6*thickness) + #Second part of circle has a radius of 2*thickness + path.Bezier(-2*thickness*0.551916, 6*thickness, -2*thickness, 6*thickness-2*thickness*0.551916, -2*thickness, 4*thickness) + path.LineTo(-2*thickness, thickness) + path.Bezier(-2*thickness, thickness*(1-0.551916), thickness*-1.551916, 0, -thickness, 0) + path.LineTo(0,0) + #and last the circle at center for this axis, radius is RadiusSteelHingeAxis mm + path.drawCircle(0, 4.5*thickness, RadiusSteelHingeAxis) + path.Close() + path.GenPath() + if path.xmin < self.BoundingBox[0]: + self.BoundingBox[0] = path.xmin + if path.ymin < self.BoundingBox[1]: + self.BoundingBox[1] = path.ymin + if path.xmax > self.BoundingBox[2] - 2: + self.BoundingBox[2] = path.xmax + 2 + if path.ymax > self.BoundingBox[3] - 2: + self.BoundingBox[3] = path.ymax + 2 + + def BuildTop(self, xbox, ybox, back_left_radius, back_right_radius, front_right_radius, front_left_radius): + ''' + Draw the top of the box. It depends on the lid style + ''' + if self.options.lid_type == 'Without': + return # Nothing in this case + if self.options.lid_type == 'Sliding': + #Specific case, top is a rectangle which is xbox long and ybox wide with finger joints on top + #Not compatible with rounded cornerson back, so radius is set to 0 + #On top, corner are internal on x and external on y + #Position is set at 0,0 (first element) + #There is also a line of finger joints which is xbox long and thickness wide, begin with this one + TopLineBottomRight = CornerPoint((xbox+2*thickness,thickness), 0, 1, 1) + TopLineBottomLeft = CornerPoint((0,thickness), 0, 1, 1) + #Modify Bottom right corner to change start of line + TopLineBottomRight.x_start_joint -= thickness + #idem for bottom left + TopLineBottomLeft.x_end_joint += thickness + TopLine = BoxFace('Lid_Joints', CornerPoint((0,0), 0, 1, 1), + 0, CornerPoint((xbox+2*thickness,0), 0, 1, 1), + 0, TopLineBottomRight, + self.x_joint, TopLineBottomLeft, + 0, self.group, [0.0,0.0]) + TopLine.drawSimpleFace(True) + self.UpdateBoundingBox(TopLine) + Top = BoxFace('Lid_Top', CornerPoint((0,0), back_left_radius, 1, 0), + self.x_joint, CornerPoint((xbox,0), back_right_radius, 1, 0), + 0, CornerPoint((xbox,ybox), front_right_radius, 1, 1), + 0, CornerPoint((0,ybox), front_left_radius, 1, 1), + 0, self.group, [-thickness,-self.BoundingBox[3]]) + Top.drawSimpleFace(True) + self.UpdateBoundingBox(Top) + return + if self.options.lid_type != 'Coffin': + #For all cases except coffin, draw a rounded rectangle with internal corners + Top = BoxFace('Lid_Top', CornerPoint((0,0), back_left_radius, 1, 1), + self.x_joint, CornerPoint((xbox,0), back_right_radius, 1, 1), + self.y_joint, CornerPoint((xbox,ybox), front_right_radius, 1, 1), + self.x_joint, CornerPoint((0,ybox), front_left_radius, 1, 1), + self.y_joint, self.group, [0.0, 0.0]) + Top.drawSimpleFace(False) + if self.options.lid_type == 'Simple': + #Add a hole in the top, which the same rounded rectangle, but with thickness less in each direction + TopHole = BoxFace('Lid_Int', CornerPoint((thickness,thickness), back_left_radius-thickness, 1, 1), + 0, CornerPoint((xbox-thickness,thickness), back_right_radius-thickness, 1, 1), + 0, CornerPoint((xbox-thickness,ybox-thickness), front_right_radius-thickness, 1, 1), + 0, CornerPoint((thickness,ybox-thickness), front_left_radius-thickness, 1, 1), + 0, self.group, [0.0, 0.0], Top.path) + TopHole.drawSimpleFace(False) + Top.Close() #Close and generate path (both if simple lid) + self.UpdateBoundingBox(Top) + if self.options.lid_type == 'Simple': + #In this case, draw a simple face without notches, external at all corners in both directions + Top = BoxFace('Lid', CornerPoint((0,0), back_left_radius, 0, 0), + 0, CornerPoint((xbox,0), back_right_radius, 0, 0), + 0, CornerPoint((xbox,ybox), front_right_radius, 0, 0), + 0, CornerPoint((0,ybox), front_left_radius, 0, 0), + 0, self.group, [-self.BoundingBox[2]-thickness-2, 0.0]) + Top.drawSimpleFace(True) + self.UpdateBoundingBox(Top) + + return + + def BuildBottom(self, xbox, ybox, back_left_radius, back_right_radius, front_right_radius, front_left_radius): + ''' + Draw the bottom of the box. It is a rounded rectangle + Also draw the holes used to secure the internal walls + Should exchange left and right from top to draw the external face + ''' + Bottom = BoxFace('Bottom', CornerPoint((0,0), back_right_radius, 1, 1), + self.x_joint, CornerPoint((xbox,0), back_left_radius, 1, 1), + self.y_joint, CornerPoint((xbox,ybox), front_left_radius, 1, 1), + self.x_joint, CornerPoint((0,ybox), front_right_radius, 1, 1), + self.y_joint, self.group, [-self.BoundingBox[2], 0.0]) #Draw it right of top, same Y + Bottom.drawSimpleFace(False) + #now the holes used to fix the walls + #Start with columns, compute holes position + self.ListNotchColumns = self.CalcNotchPos(self.n_slot_y, self.y_slot_size) + DebugMsg("List Column Notches:"+str( self.ListNotchColumns)+'\n') + for i in range(1, self.n_slot_x): + #For each wall, draw holes corresponding at each notch_y + for notch in self.ListNotchColumns: + drawHole(Bottom.path, i*(self.x_slot_size+thickness), notch[0] + thickness, thickness, notch[1], burn) + + #Then rows + self.ListNotchRows = self.CalcNotchPos(self.n_slot_x, self.x_slot_size) + DebugMsg("List Row Notches:"+str( self.ListNotchRows)+'\n') + + for i in range(1, self.n_slot_y): + #For each wall, draw holes corresponding at each notch_y + for notch in self.ListNotchRows: + drawHole(Bottom.path, notch[0] + thickness, i*(self.y_slot_size+thickness), notch[1], thickness, burn) + + Bottom.Close() + self.UpdateBoundingBox(Bottom) + return + + def drawColumWall(self, index, n_slot_y, y_slot_size, ListNotchPos, length, zbox, xOffset, yOffset, parent): + ''' + Draw the face, specific case for columns walls + This is a specific face with cuts for row walls on top + ''' + DebugMsg("\nDrawColumWall, index="+str(index)+" n_Slot="+str(n_slot_y)+" Slot_Size="+str(y_slot_size)+" Length="+str(length)+" Height="+str(zbox)+" Offset="+str((xOffset, yOffset))+'\n') + path = th_inkscape_path((xOffset-thickness, yOffset), parent, 'COL_WALL_'+str(index+1)) + + VNotchLine1 = NotchLine((length,0,1), (length, zbox, 1), math.pi/2, self.z_joint ) #Vertical Notch line + VNotchLine2 = NotchLine((0,zbox,1), (0, 0, 1), -math.pi/2, self.z_joint ) #Vertical Notch line, reverse + + + path.MoveTo(0,0) + #first H line with cut to accomodate with row walls + for i in range(1, n_slot_y): + path.LineToHRel(y_slot_size) + path.LineToVRel(zbox/2) + path.LineToHRel(thickness) + path.LineToVRel(-zbox/2) + path.LineTo(length, 0) + + #Second line (V), this is a notch line + path.LineTo(length, thickness) + VNotchLine1.drawNotchLine(path) + path.LineTo(length, zbox) + #Third line (H) with notches, but at specific positions. Use reversed because, draw from right to left + for Notch in reversed(ListNotchPos): + path.LineTo(Notch[0]+Notch[1], zbox) + path.LineToVRel(thickness) + path.LineToHRel(-Notch[1]) + path.LineToVRel(-thickness) + path.LineTo(0, zbox) + #and last one + path.LineTo(0, zbox-thickness) + VNotchLine2.drawNotchLine(path) + path.LineTo(0, 0) + + #Apply bounding box of path + DebugMsg("Path Bounding box="+str(((path.xmin, path.ymin), (path.xmax, path.ymax)))+'\n') + if path.xmin < self.BoundingBox[0]: + self.BoundingBox[0] = path.xmin + if path.ymin < self.BoundingBox[1]: + self.BoundingBox[1] = path.ymin + if path.xmax > self.BoundingBox[2] - 2: + self.BoundingBox[2] = path.xmax + 2 + if path.ymax > self.BoundingBox[3] - 2: + self.BoundingBox[3] = path.ymax + 2 + + #Close the path + path.Close() + path.GenPath() + #DebugMsg("Closing path, BoundingBox="+str(self.BoundingBox)+'\n') + + + def drawRowWall(self, index, n_slot_x, x_slot_size, ListNotchPos, length, zbox, xOffset, yOffset, parent): + ''' + Draw the face, specific case for row walls + This is a specific face with cuts for columns walls on bottom + ''' + DebugMsg("\nDrawRowWall, index="+str(index)+" n_Slot="+str(n_slot_x)+" Slot_Size="+str(x_slot_size)+" Length="+str(length)+" Height="+str(zbox)+" Offset="+str((xOffset, yOffset))+'\n') + path = th_inkscape_path((xOffset-thickness, yOffset), parent, 'ROW_WALL_'+str(index+1)) + + VNotchLine1 = NotchLine((length,0,1), (length, zbox, 1), math.pi/2, self.z_joint ) #Vertical Notch line + VNotchLine2 = NotchLine((0,zbox,1), (0, 0, 1), -math.pi/2, self.z_joint ) #Vertical Notch line, reverse + + + path.MoveTo(0,0) + + #first H line without cur, so up to length + path.LineTo(length, 0) + + #Second line (V), this is a notch line + path.LineTo(length, thickness) + VNotchLine1.drawNotchLine(path) + path.LineTo(length, zbox) + #Third line (H) with notches, but at specific positions. Use reversed because, draw from right to left, also cut openings for columns + # At each change of group, draw a cut + group_num = n_slot_x - 1 + for Notch in reversed(ListNotchPos): + if group_num != Notch[2]: # Change of group, draw cut + path.LineTo(group_num * (x_slot_size + thickness) , zbox) + path.LineToVRel(-zbox/2) + path.LineToHRel(-thickness) + path.LineToVRel(zbox/2) + group_num = Notch[2] #Change group for next pass + path.LineTo(Notch[0]+Notch[1], zbox) + path.LineToVRel(thickness) + path.LineToHRel(-Notch[1]) + path.LineToVRel(-thickness) + path.LineTo(0, zbox) + #and last one + path.LineTo(0, zbox-thickness) + VNotchLine2.drawNotchLine(path) + path.LineTo(0, 0) + + #Apply bounding box of path + DebugMsg("Path Bounding box="+str(((path.xmin, path.ymin), (path.xmax, path.ymax)))+'\n') + if path.xmin < self.BoundingBox[0]: + self.BoundingBox[0] = path.xmin + if path.ymin < self.BoundingBox[1]: + self.BoundingBox[1] = path.ymin + if path.xmax > self.BoundingBox[2] - 2: + self.BoundingBox[2] = path.xmax + 2 + if path.ymax > self.BoundingBox[3] - 2: + self.BoundingBox[3] = path.ymax + 2 + + #Close the path + path.Close() + path.GenPath() + #DebugMsg("Closing path, BoundingBox="+str(self.BoundingBox)+'\n') + + def drawCoffinSide(self, FlagRight, ybox, zlid, z_dome_lid, xOffset, yOffset, parent): + ''' + Draw the sides of the coffin style lid. + This is a rectangle ybox x zlid with an ellipse (ybox, z_dome_lid) on top of the rectangle + There a "normal notches on the rectangle, then small notches on the ellipse, because the "front/top/Back" part will be flex + ''' + DebugMsg("\ndrawCoffinSide, FlagRight="+str(FlagRight)+" ybox="+str(ybox)+" zlid="+str(zlid)+" z_dome_lid="+str(z_dome_lid)+'\n') + name = 'Lid_Left' + if FlagRight=='Right': + name = 'Lid_Right' + #Change offset in y direction because this one will be drawn from bottom left. + path = th_inkscape_path((xOffset-thickness, yOffset-zlid - z_dome_lid-thickness), parent, name) + #First build the notch lines for the rectangle + VNotchLine1 = NotchLine((0,0,1), (0, -zlid, 1), -math.pi/2, self.z_joint ) #Vertical Notch line (left side) + VNotchLine2 = NotchLine((ybox,-zlid,1), (ybox, 0, 1), math.pi/2, self.z_joint ) #Vertical Notch line, right side + + #First point on (0,0) : bottom/left of the lid + path.MoveTo(0, 0) + #The draw left notch line + VNotchLine1.drawNotchLine(path) + #The draw the notched ellipse, this ellipse has parameters ybox/2 and z_dome_lid + TopLid = Ellipse(ybox/2.0, z_dome_lid) + TopLid.drawNotchedEllipse(path, math.pi, 2*math.pi, (0, -zlid)) + #Now the second Notch line + VNotchLine2.drawNotchLine(path) + #And end with bottom line (straight) + path.LineTo(0,0) + #Apply bounding box of path + DebugMsg("Path Bounding box="+str(((path.xmin, path.ymin), (path.xmax, path.ymax)))+'\n') + if path.xmin < self.BoundingBox[0]: + self.BoundingBox[0] = path.xmin + if path.ymin < self.BoundingBox[1]: + self.BoundingBox[1] = path.ymin + if path.xmax > self.BoundingBox[2] - 2: + self.BoundingBox[2] = path.xmax + 2 + if path.ymax > self.BoundingBox[3] - 2: + self.BoundingBox[3] = path.ymax + 2 + + path.Close() + path.GenPath() + + def drawCoffinTop(self, xbox, ybox, zlid, z_dome_lid, xOffset, yOffset, parent): + ''' + Draw the top of the coffin style lid. + This is 2 rectangle xbox x zlid separated by a flex pattern which has the length half of the ellipse (ybox, z_dome_lid), flex height is xbox + ''' + DebugMsg("\ndrawCoffinTop, xbox="+str(xbox)+" ybox="+str(ybox)+" zlid="+str(zlid)+" z_dome_lid="+str(z_dome_lid)+'\n') + #Change offset in y direction because this one will be drawn from bottom left. + path = th_inkscape_path((xOffset, yOffset - thickness), parent, 'Coffin_Top') + DebugMsg("Offset ="+str((xOffset, yOffset))+" Path_Offset="+str((path.offsetX, path.offsetY))+'\n') + #Create the ellipse object used to draw the flex + FlexBand = Ellipse(ybox/2.0, z_dome_lid) + FlexBand.Compute_Ellipse_Params(math.pi, 2*math.pi) + l = FlexBand.length_ellipse + #First build the notch lines for the rectangle + HNotchLine1 = NotchLine((zlid, xbox+thickness, 0), (0, xbox+thickness, 0), math.pi, self.z_joint ) #Horizontal Notch line, bottom left + HNotchLine2 = NotchLine((0,-thickness,0), (zlid, -thickness, 0), 0, self.z_joint ) #Horizontal Notch line, top left + HNotchLine3 = NotchLine((zlid+l, xbox+thickness, 1), (2*zlid+l, xbox+thickness, 1), 0, self.z_joint ) #Horizontal Notch line, bottom right + HNotchLine4 = NotchLine((2*zlid+l, -thickness, 1), (zlid+l, -thickness, 1), math.pi, self.z_joint ) #Horizontal Notch line, bottom left + + #In order to minimize move effects, draw the holes for the hinge first + #Draw holes for the hinge(s) + for Hinge in self.HingeList: + HingePos = Hinge[2] + 2*thickness + path.MoveTo(3.5*thickness, HingePos + 0.5*SteelHingeSpacing) + path.LineToVRel(thickness) + path.LineToHRel(thickness) + path.LineToVRel(-thickness) + path.LineToHRel(-thickness) + path.MoveTo(3.5*thickness, HingePos + 2*thickness + 1.5*SteelHingeSpacing) + path.LineToVRel(thickness) + path.LineToHRel(thickness) + path.LineToVRel(-thickness) + path.LineToHRel(-thickness) + + #First point on (zlid,0) : bottom/left of the lid + path.MoveTo(zlid, xbox+thickness) + #The draw left notch line + HNotchLine1.drawNotchLine(path) + #The draw the bottom line with cuts for the hinge(s) + #Now draw holes for the hinge(s), reverse because draw from right to left + for Hinge in reversed(self.HingeList): + HingePos = Hinge[2] + thickness + #First H line up to end of 2nd hinge + path.LineTo(0, HingePos + 5*thickness + 2.5*SteelHingeSpacing) + #Then Hinge + path.LineToHRel(1.5*thickness + 0.5*SteelHingeSpacing) + path.LineToVRel(-thickness - SteelHingeSpacing) + path.LineToHRel(thickness - 0.5*SteelHingeSpacing) + path.LineToVRel(-thickness) + path.LineToHRel(-thickness + 0.5*SteelHingeSpacing) + path.LineToVRel(-thickness - SteelHingeSpacing) + path.LineToHRel(thickness - 0.5*SteelHingeSpacing) + path.LineToVRel(-thickness) + path.LineToHRel(-thickness + 0.5*SteelHingeSpacing) + path.LineToVRel(-thickness - SteelHingeSpacing) + path.LineToHRel(-1.5*thickness - 0.5*SteelHingeSpacing) + #Then draw up to corner + path.LineTo(0, -thickness) + #Now the second Notch line + HNotchLine2.drawNotchLine(path) + #Then the flex band + FlexBand.drawFlexEllipse(path, xbox, self.options.SkipFlexLines, (zlid, -thickness)) + #Then the third notch line + HNotchLine3.drawNotchLine(path) + #Then the straight line up to the next corner (top right) + path.LineTo(2*zlid+l, -thickness) + #And the last line + HNotchLine4.drawNotchLine(path) + #Apply bounding box of path + DebugMsg("Path Bounding box="+str(((path.xmin, path.ymin), (path.xmax, path.ymax)))+'\n') + if path.xmin < self.BoundingBox[0]: + self.BoundingBox[0] = path.xmin + if path.ymin < self.BoundingBox[1]: + self.BoundingBox[1] = path.ymin + if path.xmax > self.BoundingBox[2] - 2: + self.BoundingBox[2] = path.xmax + 2 + if path.ymax > self.BoundingBox[3] - 2: + self.BoundingBox[3] = path.ymax + 2 + path.GenPath() + + def effect(self): + """ + Draws a card box box, based on provided parameters + """ + global burn, thickness + + # input sanity check + error = False + if self.options.thickness < 1 or self.options.thickness > 10: + inkex.errormsg('Error: thickness should be at least 1mm and less than 10mm') + error = True + + if error: + exit() + + self.n_slot_x = self.options.n_slot_x + self.n_slot_y = self.options.n_slot_y + + + # convert units + unit = self.options.unit + + xbox = self.svg.unittouu(str(self.options.x) + unit) + ybox = self.svg.unittouu(str(self.options.y) + unit) + zbox = self.svg.unittouu(str(self.options.z) + unit) + zlid = self.svg.unittouu(str(self.options.z_lid) + unit) + z_dome_lid = self.svg.unittouu(str(self.options.z_dome_lid) + unit) + + if self.options.StraigthCorners: + back_left_radius = 0 + back_right_radius = 0 + front_right_radius = 0 + front_left_radius = 0 + else: + back_left_radius = self.svg.unittouu(str(self.options.back_left_radius) + unit) + back_right_radius = self.svg.unittouu(str(self.options.back_right_radius) + unit) + front_right_radius = self.svg.unittouu(str(self.options.front_right_radius) + unit) + front_left_radius = self.svg.unittouu(str(self.options.front_left_radius) + unit) + + max_radius = max(back_left_radius, back_right_radius, front_right_radius, front_left_radius) + thickness = self.svg.unittouu(str(self.options.thickness) + unit) + burn = self.svg.unittouu(str(self.options.burn) + unit) + + self.x_joint = self.svg.unittouu(str(self.options.x_joint) + unit) + self.y_joint = self.svg.unittouu(str(self.options.y_joint) + unit) + self.z_joint = self.svg.unittouu(str(self.options.z_joint) + unit) + + self.x_slot_size = (xbox - (1+self.n_slot_x)*thickness)/self.n_slot_x + self.y_slot_size = (ybox - (1+self.n_slot_y)*thickness)/self.n_slot_y + + if self.x_slot_size < 18 or self.y_slot_size < 18: + inkex.errormsg('Error: each slot should be at least 18mm large, here x_slot_size='+str(self.x_slot_size)+ ' y_slot_size='+str(self.y_slot_size)) + exit() + if self.x_slot_size < max_radius or self.y_slot_size < max_radius: + inkex.errormsg('Error: slot size should be greater than rounded corner radius, here x_slot_size='+str(self.x_slot_size)+ ' y_slot_size='+str(self.y_slot_size)) + exit() + + + svg = self.document.getroot() + docWidth = self.svg.unittouu(svg.get('width')) + docHeigh = self.svg.unittouu(svg.attrib['height']) + + layer = etree.SubElement(svg, 'g') + layer.set(inkex.addNS('label', 'inkscape'), 'Generic Box') + layer.set(inkex.addNS('groupmode', 'inkscape'), 'layer') + self.group = etree.SubElement(layer, 'g') + OpenDebugFile() + + HasLid = False + HasNormalLid = False + #Compute joint size if auto is chosen + if self.options.AutoSizeJoints: + self.x_joint, self.y_joint, self.z_joint = self.ComputeJointSize(xbox, ybox, zbox, back_left_radius, back_right_radius, front_right_radius, front_left_radius) + #Default case, for the top lines, front and back joints are x_joint in size, left and right joints are y_joint in size + self.front_joint = self.x_joint + self.back_joint = self.x_joint + self.right_joint = self.y_joint + self.left_joint = self.y_joint + + DebugMsg("Joints size ="+str((self.x_joint, self.y_joint, self.z_joint))+'\n') + DebugMsg("Slots X N="+str(self.n_slot_x)+" size="+str(self.x_slot_size)+'\n') + DebugMsg("Slots Y N="+str(self.n_slot_y)+" size="+str(self.y_slot_size)+'\n') + + #Now, check if internal walls should be drawn + self.InternalWalls_LR = False + self.InternalWalls_FB = False + zbox_internal_walls = zbox #Height of internal walls + + #If there are slots inside the box, also draw internal walls + if self.n_slot_x > 1: + self.InternalWalls_FB = True + if self.n_slot_y > 1: + self.InternalWalls_LR = True + + # If lid is sliding, there are always internal walls left and right + if self.options.lid_type == 'Sliding': + self.InternalWalls_LR = True + zbox += thickness #Also increase box height to take into account the sliding top, but NOT internal walls height + zbox_internal_walls -= 0.2 #Indeed, reduce internal wall height to ease sliding + if back_left_radius > 0 or back_right_radius > 0: + inkex.errormsg('Error: Sliding lid is incompatible with rounded corners on back') + exit() + self.front_joint = 0 #No joint on front top + + # If there is no lid, no notches on top + if self.options.lid_type == 'Without': + self.front_joint = 0 #No joint on front top + self.back_joint = 0 #No joint on back top + self.right_joint = 0 #No joint on right top + self.left_joint = 0 #No joint on left top + #As top edges are external, but without notches, just decrease height by thickness + zbox -= thickness + + # If this is a real lid, no round corners allowed on back + if self.options.lid_type == 'WoodHinge' or self.options.lid_type == 'SteelHinge' or self.options.lid_type == 'Coffin': + if back_left_radius > 0 or back_right_radius > 0: + inkex.errormsg('Error: real lid option is incompatible with rounded corners on back') + exit() + self.front_joint = 0 #No joint on front top + self.back_joint = 0 #No joint on back top + self.right_joint = 0 #No joint on right top + self.left_joint = 0 #No joint on left top + #As top edges are external, but without notches, just decrease height by thickness + zbox -= thickness + zlid -= thickness + if self.options.lid_type == 'Coffin': + if front_left_radius > 0 or front_right_radius > 0: + inkex.errormsg('Error: coffin lid option is incompatible with rounded corners') + exit() + HasCoffinlid = True + HasLid = False + else: + HasCoffinlid = False + HasLid = True + + if self.options.lid_type == 'SteelHinge' or self.options.lid_type == 'Coffin': + #Compute placement of hinges + #First compute hinge width. Each hinge has 5 elements with thickness width whiche should be slighly spaced for the main box elements (3) + hingeWidth = 5*thickness + 3*SteelHingeSpacing + if ( hingeWidth > self.x_slot_size - 3 ): + inkex.errormsg('Error: no space for hinge within slots, slots should be at least '+str(hingeWidth+3)+'mm wide') + exit(1) + #if the box is small with only one slot in x direction try with only one hinge + if self.n_slot_x == 1 and self.x_slot_size < 2 * hingeWidth + 30: + self.HingeList.append = (0, (self.x_slot_size - hingeWidth)/2.0, (self.x_slot_size - hingeWidth)/2.0) # One hinge, starting at the middle of slot 0 (the only one) + elif self.n_slot_x == 2: + #in this case place hinge in first and last slot. + # Exact position depend on slot width, try to place hinge at about 1/3 of the slot + HingePos = max(self.x_slot_size/3 - hingeWidth/2, 2) + if HingePos < 8: + HingePos = max(self.x_slot_size/2.5 - hingeWidth/2, 2) #1/3 is very close from start, so change to 1/2.5 + self.HingeList.append((0, HingePos, HingePos)) + self.HingeList.append((self.n_slot_x-1, self.x_slot_size - HingePos, (self.n_slot_x-1)*(self.x_slot_size+thickness) + (self.x_slot_size - HingePos - hingeWidth) )) + elif self.n_slot_x <= 6: + #in this case place hinge in first and last slot. + # Exact position depend on slot width, try to place hinge at about 1/2 of the slot + HingePos = (self.x_slot_size - hingeWidth)/2.0 + self.HingeList.append((0, HingePos, HingePos)) + self.HingeList.append((self.n_slot_x-1, self.x_slot_size - HingePos, (self.n_slot_x-1)*(self.x_slot_size+thickness) + (self.x_slot_size - HingePos - hingeWidth) )) + else: + #a lot of slots, place hinge in second and before last slot, at center of slots + HingePos = (self.x_slot_size - hingeWidth)/2.0 + self.HingeList.append((1, HingePos, self.x_slot_size + thickness + HingePos )) + self.HingeList.append((self.n_slot_x-2, HingePos, (self.n_slot_x-2)*(self.x_slot_size+thickness) + (self.x_slot_size - HingePos - hingeWidth))) + DebugMsg("Lid with steel hinge\n") + DebugMsg("Hinge width="+str(hingeWidth)+", Hinge pos="+str(self.HingeList)+"\n") + + + #Draw external faces which are planes, begin with top + + self.BuildTop(xbox, ybox, back_left_radius, back_right_radius, front_right_radius, front_left_radius) + + self.BuildBottom(xbox, ybox, back_left_radius, back_right_radius, front_right_radius, front_left_radius) + + ''' Draw sides, which could be rounded (with flex) + For boxes with lid, draw also the lid, just above the side. + There are 16 cases + TL TR BR BL Flex Straight + 0 0 0 0 NO ALL OK + 0 0 0 1 Left → Front Back, Right OK + 0 0 1 0 Front → Right Back, Left OK + 0 0 1 1 Left → Front → Right Back OK + 0 1 0 0 Right → Back Front, Left OK + 0 1 0 1 Right → Back, Left → Front No OK + 0 1 1 0 Front --> Right --> Back Left OK + 0 1 1 1 Left → Front → Right → Back No OK + 1 0 0 0 Back → Left Right, Front OK + 1 0 0 1 Back → Left → Front Right OK + 1 0 1 0 Back → Left, Front → Right No OK + 1 0 1 1 Back → Left → Front → Right No OK + 1 1 0 0 Right → Back → Left Front OK + 1 1 0 1 Right → Back → Left → Front No OK + 1 1 1 0 Front → Right → Back → Left No OK + 1 1 1 1 All Flex No + ''' + FlexBandList = [] #empty list at init + RightFace = None + LeftFace = None + ypos = -self.BoundingBox[3] + yposface = ypos + xpos = 0.0 + LidFace = None + if front_left_radius == 0 and front_right_radius == 0: + if HasLid: + DebugMsg("Draw font lid\n") + LidFace = BoxFace('Lid_Front', CornerPoint((0,0), 0, 0, 0), + self.x_joint, CornerPoint((xbox,0), 0, 0, 0), + self.z_joint, CornerPoint((xbox,zlid), 0, 0, 0), + self.front_joint, CornerPoint((0,zlid), 0, 0, 0), + self.z_joint, self.group, [xpos, ypos]) #Draw face just below previous drawings + LidFace.drawSimpleFace(True) + self.UpdateBoundingBox(LidFace) #Now update bounding box, to place back face just below + yposface = -self.BoundingBox[3] + DebugMsg("\nStraight face for front\n") + #No round, front is straight + #Front is xbox * zbox, all corners are external in each direction + Face = BoxFace('Front', CornerPoint((0,0), 0, 0, 0), + self.front_joint, CornerPoint((xbox,0), 0, 0, 0), + self.z_joint, CornerPoint((xbox,zbox), 0, 0, 0), + self.x_joint, CornerPoint((0,zbox), 0, 0, 0), + self.z_joint, self.group, [xpos, yposface]) #Draw face just below previous drawings + Face.drawSimpleFace(True) + xpos = -Face.BoundingBox[2]-2 + self.UpdateBoundingBox(Face) #Now update bounding box + elif front_left_radius == 0: + #Rounded corner on Front right + #Straight corner on Front/left, there is a flex band starting on front left + if back_right_radius == 0: + #Straight corner on Front / right, Flex on front --> right, BL to TR + DebugMsg("\nFlex on front --> Right\n") + FlexBand = ('Flex_Front_Right', 0, 1, #Draw Front then Right so first element is external and last internal + (xbox, self.front_joint, front_right_radius, self.x_joint), #Then Front Notch Line and round corner r= front_right_radius + #Then Right notch line withount rounded corner, the last parameter is used when WoodHinge to draw the top circle + (ybox, self.right_joint, 0, self.y_joint, self.options.lid_type == 'WoodHinge')) + FlexBandList.append(FlexBand) + elif back_left_radius == 0: + #Straight corner on back left, flex band is front + right + back + DebugMsg("\nFlex on front --> right --> back\n") + FlexBand = ('Flex_Front_Right_Back', 0, 0, #Draw Front then Right and Back so first element is external and last external + (xbox, self.front_joint, front_right_radius, self.x_joint), #Then Front Notch Line and round corner r= front_right_radius + (ybox, self.right_joint, back_right_radius, self.y_joint), #Then Right notch line and Back/Right rounded corner + (xbox, self.back_joint, 0, self.x_joint)) #Then Back notch line withount rounded corner + FlexBandList.append(FlexBand) + else: + #flex band is front + right + back + left + DebugMsg("\nFlex on front --> right --> back --> left\n") + FlexBand = ('Flex_Front_Right_Back_Left', 0, 1, #Draw Front then Right, Back and left so first element is external and last internal + (xbox, self.front_joint, front_right_radius, self.x_joint), #Then Front Notch Line and round corner r= front_right_radius + (ybox, self.right_joint, back_right_radius, self.y_joint), #Then Right notch line and Back/Right rounded corner + (xbox, self.back_joint, back_left_radius, self.x_joint), #Then Back notch line with Back/Left rounded corner + (ybox, self.left_joint, 0)) #At last, Left line without rounded corner + FlexBandList.append(FlexBand) + + if back_left_radius == 0 and back_right_radius == 0: + if HasLid: + DebugMsg("Draw back lid\n") + LidFace = BoxFace('Lid_Back', CornerPoint((0,0), 0, 0, 0), + self.x_joint, CornerPoint((xbox,0), 0, 0, 0), + self.z_joint, CornerPoint((xbox,zlid), 0, 0, 0), + self.back_joint, CornerPoint((0,zlid), 0, 0, 0), + self.z_joint, self.group, [xpos, ypos]) #Draw face just right previous drawings + if self.options.lid_type == 'WoodHinge': + LidFace.drawLidBackWoodHinge(True) + else: #This is SteelHinge or Coffin + LidFace.drawLidBackSteelHinge(self.HingeList, True) + if yposface == ypos: + self.UpdateBoundingBox(LidFace) #Now update bounding box, if not already done, to place back face just below + yposface = -self.BoundingBox[3] + + #Back is xbox * zbox, all corners are external in each direction + DebugMsg("\nStraight face for Back\n") + if self.options.lid_type == 'Sliding': + #In this case, not a simple face, so we use a specific function. Also, top line is internal in y and external in x + Face = BoxFace('Back', CornerPoint((0,0), 0, 0, 1), + self.back_joint, CornerPoint((xbox,0), 0, 0, 1), + self.z_joint, CornerPoint((xbox,zbox), 0, 0, 0), + self.x_joint, CornerPoint((0,zbox), 0, 0, 0), + self.z_joint, self.group, [xpos, yposface]) #Draw face just right from previous one + Face.drawExternalBackSlidingLid(True) + elif self.options.lid_type == 'WoodHinge': + #In this case, not a simple face, so we use a specific function. + Face = BoxFace('Back', CornerPoint((0,0), 0, 0, 0), + 0, CornerPoint((xbox,0), 0, 0, 0), #No joint here ! + self.z_joint, CornerPoint((xbox,zbox), 0, 0, 0), + self.x_joint, CornerPoint((0,zbox), 0, 0, 0), + self.z_joint, self.group, [xpos, yposface]) #Draw face just right from previous one + Face.drawExternalBackWoodHingeLid(True) + elif self.options.lid_type == 'SteelHinge' or self.options.lid_type == 'Coffin': + #In this case, not a simple face, so we use a specific function. + Face = BoxFace('Back', CornerPoint((0,0), 0, 0, 0), + 0, CornerPoint((xbox,0), 0, 0, 0), #No joint here ! + self.z_joint, CornerPoint((xbox,zbox), 0, 0, 0), + self.x_joint, CornerPoint((0,zbox), 0, 0, 0), + self.z_joint, self.group, [xpos, yposface]) #Draw face just right from previous one + Face.drawExternalBackSteelHingeLid(self.HingeList, True) + else: + Face = BoxFace('Back', CornerPoint((0,0), 0, 0, 0), + self.back_joint, CornerPoint((xbox,0), 0, 0, 0), + self.z_joint, CornerPoint((xbox,zbox), 0, 0, 0), + self.x_joint, CornerPoint((0,zbox), 0, 0, 0), + self.z_joint, self.group, [xpos, yposface]) #Draw face just right from previous one + Face.drawSimpleFace(True) + self.UpdateBoundingBox(Face) #Now update bounding box + xpos = -Face.BoundingBox[2]-2 + elif back_right_radius == 0: + #Rounded corner on Back left + #Straight corner on Back/right, there is a flex band starting on back right + if front_left_radius == 0: + #Straight corner on front / left, flex band is back + left + DebugMsg("\nFlex on back --> left\n") + FlexBand = ('Flex_Back_Left', 0, 1, #Draw Back then Left so first element is external and last internal + (xbox, self.back_joint, back_left_radius, self.x_joint), #Back Notch Line and round corner r= front_right_radius + (ybox, self.left_joint, 0, self.y_joint)) #Then Left notch line without rounded corner + FlexBandList.append(FlexBand) + + elif front_right_radius == 0: + #Straight corner on bottom right, flex band is back + left + front + DebugMsg("\nFlex on back --> left --> front\n") + FlexBand = ('Flex_Back_Left_Front', 0, 0, #Draw Back then Left then Front so first element is external and last External + (xbox, self.back_joint, back_left_radius, self.x_joint), #Back Notch Line and round corner r= front_right_radius + (ybox, self.left_joint, front_left_radius, self.y_joint), #Then Left notch line and Front/Left rounded corner + (xbox, self.front_joint, 0, self.x_joint)) #At last, Front line without rounded corner + FlexBandList.append(FlexBand) + else: + #flex band is back + left + front + right + DebugMsg("\nFlex on back --> left --> front --> right\n") + FlexBand = ('Flex_Back_Left_Front_Right', 0, 1, #Draw Back then Left then Front Then Right so first element is external and last Inetrnal + (xbox, self.back_joint, back_left_radius, self.x_joint), #Back Notch Line and round corner r= front_right_radius + (ybox, self.left_joint, front_left_radius, self.y_joint), #Then Left notch line and Front/Left rounded corner + (xbox, self.front_joint, front_right_radius, self.x_joint), #Then Front line with Front/Right rounded corner + (ybox, self.right_joint, 0, self.y_joint)) #At last Right line without rounded corner + FlexBandList.append(FlexBand) + + + if back_left_radius == 0 and front_left_radius == 0: + if HasLid: + DebugMsg("Draw left lid\n") + LidFace = BoxFace('Lid_Left', CornerPoint((0,0), 0, 1, 0), + self.y_joint, CornerPoint((ybox,0), 0, 1, 0), + self.z_joint, CornerPoint((ybox,zlid), 0, 1, 0), + self.left_joint, CornerPoint((0,zlid), 0, 1, 0), + self.z_joint, self.group, [xpos, ypos]) #Draw face just right previous drawings + if self.options.lid_type == 'WoodHinge': + LidFace.drawLidSideWoodHinge(0, True) + elif self.options.lid_type == 'SteelHinge': #This is SteelHinge + LidFace.drawSimpleFace(True) + # No round for left face + # Left is ybox * zbox, corners are external in y but internal in x + DebugMsg("\nStraight face for Left\n") + if self.options.lid_type == 'Sliding': + delta_yposface = 2*thickness + 2 + else: + delta_yposface = 0 + LeftFace = BoxFace('Left', CornerPoint((0,0), 0, 1, 0, self.options.lid_type == 'WoodHinge'), + self.left_joint, CornerPoint((ybox,0), 0, 1, 0), + self.z_joint, CornerPoint((ybox,zbox), 0, 1, 0), + self.y_joint, CornerPoint((0,zbox), 0, 1, 0), + self.z_joint, self.group, [xpos, yposface-delta_yposface]) #Draw face just right from previous drawings + LeftFace.drawSimpleFace(True) + self.UpdateBoundingBox(LeftFace) #Now update bounding box + if self.options.lid_type == 'Sliding': + LeftFace.drawSideLineNotches(xpos, yposface) #Right face is straight + xpos = -LeftFace.BoundingBox[2]-2 + elif back_left_radius == 0: + #Rounded corner on Front left + #Straight corner on Back/left, there is a flex band starting on Back left + if front_right_radius == 0: + #Straight corner on Front / Right, flex band is Left + Front + DebugMsg("\nFlex on Left --> Front\n") + FlexBand = ('Flex_Left_Front', 1, 0, #Draw Left then Front so first element is internal and last external + #Left Notch Line and round corner r= front_left_radius, last parameter used when WoodHing to draw top circles + (ybox, self.left_joint, front_left_radius, self.y_joint, self.options.lid_type == 'WoodHinge'), + (xbox, self.front_joint, 0, self.x_joint)) #Then Front notch line without rounded corner + FlexBandList.append(FlexBand) + elif back_right_radius == 0: + #Straight corner on Back right, flex band is Left + Back + Right + DebugMsg("\nFlex on Left --> Front --> Right\n") + FlexBand = ('Flex_Left_Front_Right', 1, 1, #Draw Left then Front and Right so first element is internal and last internal + #Left Notch Line and round corner r= front_left_radius, last parameter used when WoodHing to draw top circles + (ybox, self.left_joint, front_left_radius, self.y_joint, self.options.lid_type == 'WoodHinge'), + (xbox, self.front_joint, front_right_radius, self.x_joint), #Then Front notch line with Front/Right rounded corner + (ybox, self.right_joint, 0, self.y_joint, self.options.lid_type == 'WoodHinge')) #And Right notch line without rounded corner + FlexBandList.append(FlexBand) + else: + #flex band on Left --> front --> right --> Back + DebugMsg("\nFlex on Left --> front --> right --> Back\n") + FlexBand = ('Flex_Left_Front_Right_Back', 1, 0, #Draw Left then Front, Right and Back so first element is internal and last external + (ybox, self.left_joint, front_left_radius, self.y_joint), #Left Notch Line and round corner r= front_left_radius + (xbox, self.front_joint, front_right_radius, self.x_joint), #Then Front notch line with Front/Right rounded corner + (ybox, self.right_joint, back_right_radius, self.y_joint), #And Right notch line with Back/Right rounded corner + (xbox, self.back_joint, 0, self.x_joint)) + FlexBandList.append(FlexBand) + + + if back_right_radius == 0 and front_right_radius == 0: + #Right is the same + if HasLid: + DebugMsg("Draw Right lid\n") + LidFace = BoxFace('Lid_Right', CornerPoint((0,0), 0, 1, 0), + self.y_joint, CornerPoint((ybox,0), 0, 1, 0), + self.z_joint, CornerPoint((ybox,zlid), 0, 1, 0), + self.right_joint, CornerPoint((0,zlid), 0, 1, 0), + self.z_joint, self.group, [xpos, ypos]) #Draw face just right previous drawings + if self.options.lid_type == 'WoodHinge': + LidFace.drawLidSideWoodHinge(1, True) + elif self.options.lid_type == 'SteelHinge': #This is SteelHinge + LidFace.drawSimpleFace(True) + + # Right is ybox * zbox, corners are external in y but internal in x + DebugMsg("\nStraight face for Right\n") + if self.options.lid_type == 'Sliding': + delta_yposface = 2*thickness + 2 + else: + delta_yposface = 0 + RightFace = BoxFace('Right', CornerPoint((0,0), 0, 1, 0), + self.right_joint, CornerPoint((ybox,0), 0, 1, 0, self.options.lid_type == 'WoodHinge'), + self.z_joint, CornerPoint((ybox,zbox), 0, 1, 0), + self.y_joint, CornerPoint((0,zbox), 0, 1, 0), + self.z_joint, self.group, [xpos, yposface-delta_yposface]) #Draw face just below previous drawings + RightFace.drawSimpleFace(True) + if self.options.lid_type == 'Sliding': + RightFace.drawSideLineNotches(xpos, yposface) #Right face is straight + self.UpdateBoundingBox(RightFace) #Now update bounding box + xpos = -RightFace.BoundingBox[2]-2 + elif front_right_radius == 0: + #Rounded corner on Back right + #Straight corner on Front right + if back_left_radius == 0: + #Straight corner on top / left, flex band is Left + Back + DebugMsg("\nFlex on Right --> Back\n") + FlexBand = ( 'Flex_Right_Back', 1, 0, #Draw Right then Back so first element is internal and last external + (ybox, self.right_joint, back_right_radius, self.y_joint), #Left Notch Line and round corner r= back_right_radius + (xbox, self.back_joint, 0, self.x_joint)) #Then Back notch line without rounded corner + FlexBandList.append(FlexBand) + elif front_left_radius == 0: + #Straight corner on Front left, flex band is Right --> Back --> Left + DebugMsg("\nFlex on Right --> Back --> Left\n") + FlexBand = ('Flex_Right_Back_Left', 1, 1, #Draw Right then Back and left so first element is internal and last internal + (ybox, self.right_joint, back_right_radius, self.y_joint), #Left Notch Line and round corner r= back_right_radius + (xbox, self.back_joint, back_left_radius, self.x_joint), #Then Back notch line with Back/Left rounded corner + (ybox, self.left_joint, 0, self.y_joint)) #And left Notch line without rounded corner + FlexBandList.append(FlexBand) + else: + #flex band on Left --> front --> right --> Back --> Front + DebugMsg("\nFlex on Right --> Back --> Left --> Front\n") + FlexBand = ('Flex_Right_Back_Left_Front', 1, 1, #Draw Right then Back and left so first element is internal and last internal + (ybox, self.right_joint, back_right_radius, self.y_joint), #Left Notch Line and round corner r= back_right_radius + (xbox, self.back_joint, back_left_radius, self.x_joint), #Then Back notch line with Back/Left rounded corner + (ybox, self.left_joint, front_left_radius, self.y_joint), #Then left Notch line with Front/Left rounded corner + (xbox, self.front_joint, 0, self.x_joint)) #And Front notch line without rounded corner + FlexBandList.append(FlexBand) + + if front_right_radius > 0 and back_right_radius > 0 and back_left_radius > 0 and front_left_radius > 0: + #Specific case, all corners are rounded + FlexBand = ('Flex_All', 1, 1, #Draw flex all around the box with clips + (xbox, self.back_joint, back_right_radius, self.x_joint), #(Half) Back Notch Line and round corner r= back_right_radius + (ybox, self.right_joint, front_right_radius, self.y_joint), #Then Right notch line with Front/Right rounded corner + (xbox, self.front_joint, front_left_radius, self.x_joint), #Then front notch line with Front/Left rounded corner + (ybox, self.left_joint, back_left_radius, self.y_joint), #Then Laft notch line with Back/Left rounded corner + (xbox, self.back_joint, back_right_radius, self.x_joint)) #And another back line, (half) + Face = FlexFace(FlexBand, 0, zbox, self.z_joint, self.group, [xpos, ypos]) + Face.drawRoundedFlexFace(True) + self.UpdateBoundingBox(Face) #Now update bounding box + else: + for FlexBand in FlexBandList: + if HasLid: + FaceLid = FlexFace(FlexBand, 1, zlid, self.z_joint, self.group, [xpos, ypos]) + FaceLid.drawFlexFace(True) + if yposface == ypos: + yposface = ypos - FaceLid.BoundingBox[3] - 2 + Face = FlexFace(FlexBand, 0, zbox, self.z_joint, self.group, [xpos, yposface]) + Face.drawFlexFace(True) + xpos -= Face.BoundingBox[2] + 2 + + #if sliding top, generate specific elements to let the lid slide + if self.options.lid_type == 'Sliding': + if len(FlexBandList) > 0: + #Case with flex + #This code works because with sliding top, there is AT MOST one flex band. + Face.drawSideLineNotches() + self.UpdateBoundingBox(Face) #Now update bounding box + + ypos = -self.BoundingBox[3] + xpos = 0.0 + + # If coffin draw the lid here + if self.options.lid_type == 'Coffin': + self.drawCoffinSide('Left', ybox, zlid+thickness, z_dome_lid, xpos, ypos, self.group) + xpos -= ybox + 2*thickness + 2 + self.drawCoffinSide('Right', ybox, zlid+thickness, z_dome_lid, xpos, ypos, self.group) + xpos -= ybox + 2*thickness + 2 + self.drawCoffinTop(xbox, ybox, zlid+thickness, z_dome_lid, xpos, ypos, self.group) + + ypos = -self.BoundingBox[3] + xpos = 0.0 + # Then draw internal walls + # First Back and front + # Rectangle with joints on sides, not on top and bottom + # + if self.InternalWalls_FB: + DebugMsg("\nDrawing Internal Back\n") + if self.InternalWalls_LR: + left_joint = self.z_joint + else: + left_joint = 0 #Only draw joints if there is a left side ! + #If rounded corner, shorten size by radius, if not by thickness + if back_left_radius > 0: + left_joint = 0 + d1 = back_left_radius + else: + d1 = thickness + if self.InternalWalls_LR: + right_joint = self.z_joint + else: + right_joint = 0 #Only draw joints if there is a right side ! + #If rounded corner, shorten size by radius, if not by thickness + if back_right_radius > 0: + right_joint = 0 + d2 = back_right_radius + else: + d2 = thickness + + InternalBack = BoxFace('Int_Back', CornerPoint((0,0), 0, 0, 1), #First corner, external on X, internal on Y sides + 0, CornerPoint((xbox-d1-d2,0), 0, 0, 1), + right_joint, CornerPoint((xbox-d1-d2, zbox_internal_walls), 0, 0, 1), + 0, CornerPoint((0,zbox_internal_walls), 0, 0, 1), + left_joint, self.group, [xpos, ypos]) #Draw face just below previous drawings + if self.options.lid_type == 'SteelHinge' or self.options.lid_type == 'Coffin': + #Special case, should cut some spce for the hinge in the back, so add the last parameter + InternalBack.drawFaceWithHoles(self.n_slot_x, self.x_slot_size, d1 - thickness, self.z_joint, True, self.HingeList) + else: + InternalBack.drawFaceWithHoles(self.n_slot_x, self.x_slot_size, d1 - thickness, self.z_joint, True) + xpos = -InternalBack.BoundingBox[2]-2 + + + if self.InternalWalls_LR: + left_joint = self.z_joint + else: + left_joint = 0 #Only draw joints if there is a left side ! + if front_left_radius > 0: + left_joint = 0 + d1 = front_left_radius + else: + d1 = thickness + if self.InternalWalls_LR: + right_joint = self.z_joint + else: + right_joint = 0 #Only draw joints if there is a right side ! + if front_right_radius > 0: + right_joint = 0 + d2 = front_right_radius + else: + d2 = thickness + DebugMsg("\nDrawing Internal Front\n") + InternalFront = BoxFace('Int_Front', CornerPoint((0,0), 0, 0, 1), #First corner, external on X, internal on Y sides + 0, CornerPoint((xbox-d1-d2,0), 0, 0, 1), + right_joint, CornerPoint((xbox-d1-d2, zbox_internal_walls), 0, 0, 1), + 0, CornerPoint((0,zbox_internal_walls), 0, 0, 1), + left_joint, self.group, [xpos, ypos]) #Draw face just below previous drawings + InternalFront.drawFaceWithHoles(self.n_slot_x, self.x_slot_size, d1 - thickness, self.z_joint, True) + xpos = -InternalFront.BoundingBox[2]-2 + + # Then Left and right internal walls if needed. + if self.InternalWalls_LR: + DebugMsg("\nDrawing Internal Left\n") + if self.InternalWalls_FB: + left_joint = self.z_joint + else: + left_joint = 0 #Only draw joints if there is a left side ! + if back_left_radius > 0: + left_joint = 0 + d1 = back_left_radius + else: + d1 = thickness + if self.InternalWalls_FB: + right_joint = self.z_joint + else: + right_joint = 0 #Only draw joints if there is a right side ! + if front_left_radius > 0: + right_joint = 0 + d2 = front_left_radius + else: + d2 = thickness + + InternalLeft = BoxFace('Int_Left', CornerPoint((0,0), 0, 1, 1), #First corner, internal on both sides + 0, CornerPoint((ybox-d1-d2,0), 0, 1, 1), + right_joint, CornerPoint((ybox-d1-d2, zbox_internal_walls), 0, 1, 1), + 0, CornerPoint((0,zbox_internal_walls), 0, 1, 1), + left_joint, self.group, [xpos, ypos]) #Draw face just below previous drawings + InternalLeft.drawFaceWithHoles(self.n_slot_y, self.y_slot_size, d1 - thickness, self.z_joint, True) + xpos = -InternalLeft.BoundingBox[2]-2 + + + if self.InternalWalls_FB: + left_joint = self.z_joint + else: + left_joint = 0 #Only draw joints if there is a left side ! + if front_right_radius > 0: + left_joint = 0 + d1 = front_right_radius + else: + d1 = thickness + if self.InternalWalls_FB: + right_joint = self.z_joint + else: + right_joint = 0 #Only draw joints if there is a right side ! + if back_right_radius > 0: + right_joint = 0 + d2 = back_right_radius + else: + d2 = thickness + DebugMsg("\nDrawing Internal Right\n") + InternalRight = BoxFace('Int_Right', CornerPoint((0,0), 0, 1, 1), #First corner, internal on both sides + 0, CornerPoint((ybox-d1-d2,0), 0, 1, 1), + right_joint, CornerPoint((ybox-d1-d2, zbox_internal_walls), 0, 1, 1), + 0, CornerPoint((0,zbox_internal_walls), 0, 1, 1), + left_joint, self.group, [xpos, ypos]) #Draw face just below previous drawings + InternalRight.drawFaceWithHoles(self.n_slot_y, self.y_slot_size, d1 - thickness, self.z_joint, True) + + self.UpdateBoundingBox(InternalRight) #Now update bounding box + elif self.InternalWalls_FB: + #Udate bounding box with front and back value + self.UpdateBoundingBox(InternalFront) #Now update bounding box + + + #Then internal walls + #Columns first + xpos = 0 + ypos = -self.BoundingBox[3] + + for i in range(self.n_slot_x-1): + self.drawColumWall(i, self.n_slot_y, self.y_slot_size, self.ListNotchColumns, ybox-2*thickness, zbox_internal_walls, xpos, ypos, self.group) + xpos -= ybox + 2 #Next position for drawing + + #Then rows, nearly the same, but opening at the bottom edge + + xpos = 0 + ypos -= zbox_internal_walls + thickness + 2 + for i in range(self.n_slot_y-1): + self.drawRowWall(i, self.n_slot_x, self.x_slot_size, self.ListNotchRows, xbox-2*thickness, zbox_internal_walls, xpos, ypos, self.group) + xpos -= xbox + 2 #Next position for drawing + + # + if self.options.lid_type == 'SteelHinge' or self.options.lid_type == 'Coffin': + #the elements of the hinge + HingeNum = 0 + ypos = -self.BoundingBox[3] - 2 + xpos = -2 + for Hinge in self.HingeList: + for i in range(5): + self.drawSteelHingeElement(HingeNum*5+i, thickness, xpos, ypos, self.group) + xpos -= 3.5*thickness + 2 + HingeNum += 1 + xpos -= 3 + + + CloseDebugFile() + + +if __name__ == '__main__': + BoxMakerGenericGenerator().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/box_maker_generic_generator/inkscape_path.py b/extensions/fablabchemnitz/box_maker_generic_generator/inkscape_path.py new file mode 100644 index 00000000..82023cf1 --- /dev/null +++ b/extensions/fablabchemnitz/box_maker_generic_generator/inkscape_path.py @@ -0,0 +1,171 @@ +#!/usr/bin/env python3 + +# We will use the inkex module with the predefined Effect base class. +import inkex +import math +from lxml import etree + + +objStyle = str(inkex.Style({'stroke': '#000000', + 'stroke-width': 0.1, + 'fill': 'none' + })) + +class th_inkscape_path: + def __init__(self, Offset, group, Label=None, Style = None): + self.offsetX = Offset[0] + self.offsetY = Offset[1] + self.Path = '' + self.group = group + self.Label = Label + if Style: + self.Style = Style + else: + self.Style = objStyle + self.xmin = -self.offsetX + self.xmax = -self.offsetX + self.ymin = -self.offsetY + self.ymax = -self.offsetY + self.x = 0 + self.y = 0 + + def MoveTo(self, x, y): + #Return string 'M X Y' where X and Y are updated values from parameters + self.Path += ' M ' + str(round(x-self.offsetX, 3)) + ',' + str(round(y-self.offsetY, 3)) + self.x = x - self.offsetX + self.y = y - self.offsetY + self.xmin= min(self.x, self.xmin) + self.xmax= max(self.x, self.xmax) + self.ymin= min(self.y, self.ymin) + self.ymax= max(self.y, self.ymax) + + def LineTo(self, x, y): + #Return string 'L X Y' where X and Y are updated values from parameters + self.Path += ' L ' + str(round(x-self.offsetX, 3)) + ',' + str(round(y-self.offsetY, 3)) + self.x = x - self.offsetX + self.y = y - self.offsetY + self.xmin= min(self.x, self.xmin) + self.xmax= max(self.x, self.xmax) + self.ymin= min(self.y, self.ymin) + self.ymax= max(self.y, self.ymax) + + + def LineToRel(self, x, y): + #Return string 'L X Y' where X and Y are updated values from parameters + self.Path += ' l ' + str(round(x, 3)) + ',' + str(round(y, 3)) + self.x += x + self.y += y + self.xmin= min(self.x, self.xmin) + self.xmax= max(self.x, self.xmax) + self.ymin= min(self.y, self.ymin) + self.ymax= max(self.y, self.ymax) + + def LineToHRel(self, x): + #Return string 'h X' where X are updated values from parameters + self.Path += ' h ' + str(round(x, 3)) + self.x += x + self.xmin= min(self.x, self.xmin) + self.xmax= max(self.x, self.xmax) + + + def LineToVRel(self, y): + #Return string 'v Y' where X and Y are updated values from parameters + self.Path += ' v ' + str(round(y, 3)) + self.y += y + self.ymin= min(self.y, self.ymin) + self.ymax= max(self.y, self.ymax) + + def Line(self, x1, y1, x2, y2): + self.x = x1 - self.offsetX + self.y = y1 - self.offsetY + self.xmin= min(self.x, self.xmin) + self.xmax= max(self.x, self.xmax) + self.ymin= min(self.y, self.ymin) + self.ymax= max(self.y, self.ymax) + #Return string M X1 Y1 L X2 Y2 + self.Path += ' M ' + str(round(x1-self.offsetX, 3)) + ',' + str(round(y1-self.offsetY, 3)) + ' L ' + str(round(x2-self.offsetX, 3)) + ',' + str(round(y2-self.offsetY, 3)) + self.x = x2 - self.offsetX + self.y = y2 - self.offsetY + self.xmin= min(self.x, self.xmin) + self.xmax= max(self.x, self.xmax) + self.ymin= min(self.y, self.ymin) + self.ymax= max(self.y, self.ymax) + + def LineRel(self, x1, y1, x2, y2): + self.x += x1 + self.y += y1 + self.xmin= min(self.x, self.xmin) + self.xmax= max(self.x, self.xmax) + self.ymin= min(self.y, self.ymin) + self.ymax= max(self.y, self.ymax) + + #Return string m X1 Y1 l X2 Y2 + self.Path += ' m ' + str(round(x1, 3)) + ',' + str(round(y1, 3)) + ' l ' + str(round(x2, 3)) + ',' + str(round(y2, 3)) + self.x += x2 + self.y += y2 + self.xmin= min(self.x, self.xmin) + self.xmax= max(self.x, self.xmax) + self.ymin= min(self.y, self.ymin) + self.ymax= max(self.y, self.ymax) + + def Bezier(self, xc1, yc1, xc2, yc2, x, y): + #Return string C XC1 YC1 XC2 YC2 X Y + self.Path += ' C ' + str(round(xc1-self.offsetX, 3)) + ',' + str(round(yc1-self.offsetY, 3)) + ' ' + str(round(xc2-self.offsetX, 3)) + ',' + str(round(yc2-self.offsetY, 3))+ ' ' + str(round(x-self.offsetX, 3)) + ',' + str(round(y-self.offsetY, 3)) + self.x = x - self.offsetX + self.y = y - self.offsetY + self.xmin= min(self.x, self.xmin) + self.xmax= max(self.x, self.xmax) + self.ymin= min(self.y, self.ymin) + self.ymax= max(self.y, self.ymax) + + def BezierRel(self, xc1, yc1, xc2, yc2, x, y): + #Return string c XC1 YC1 XC2 YC2 X Y + self.Path += ' c ' + str(round(xc1, 3)) + ',' + str(round(yc1, 3)) + ' ' + str(round(xc2, 3)) + ',' + str(round(yc2, 3))+ ' ' + str(round(x, 3)) + ',' + str(round(y, 3)) + self.x += x + self.y += y + self.xmin= min(self.x, self.xmin) + self.xmax= max(self.x, self.xmax) + self.ymin= min(self.y, self.ymin) + self.ymax= max(self.y, self.ymax) + + + def drawQuarterCircle(self, xc, yc, radius, quarter): + ''' + Draw a quarter of circle with a single bezier path + xc, yc give the center of the circle, radius its radius + quarter = 0 : upper left, 1: upper right, 2: lower right, 3: lower left + Starting point is the last point of the path + ''' + if quarter == 0: + self.Bezier(xc-radius, yc - radius*0.551916, xc - radius*0.551916, yc-radius, xc, yc-radius) # upper left quarter + elif quarter == 1: + self.Bezier(xc+radius*0.551916, yc - radius, xc + radius, yc-radius*0.551916, xc+radius, yc) # upper right quarter + elif quarter == 2: + self.Bezier(xc+radius, yc + radius*0.551916, xc + radius*0.551916, yc+radius, xc, yc+radius) # lower right quarter + elif quarter == 3: + self.Bezier(xc+radius*-0.551916, yc + radius, xc - radius, yc+radius*0.551916, xc-radius, yc) # lower left quarter + + + def drawCircle(self, xc, yc, radius): + #Draw a circle, with 4 Bezier paths + self.MoveTo(xc+radius, yc) #R, 0 + self.Bezier(xc+radius, yc + radius*0.551916, xc + radius*0.551916, yc+radius, xc, yc+radius) #1er quarter, lower right + self.Bezier(xc+radius*-0.551916, yc + radius, xc - radius, yc+radius*0.551916, xc-radius, yc) #2nd quarter, lower left + self.Bezier(xc-radius, yc - radius*0.551916, xc - radius*0.551916, yc-radius, xc, yc-radius) #3rd quarter, upper left + self.Bezier(xc+radius*0.551916, yc - radius, xc + radius, yc-radius*0.551916, xc+radius, yc) #4th quarter, upper right + + def Close(self): + self.Path += ' z' + + def GenPath(self): + if self.Label: + line_attribs = {'style': self.Style, 'id' : self.Label, 'd': self.Path} + else: + line_attribs = {'style': self.Style, 'd': self.Path} + etree.SubElement(self.group, inkex.addNS('path', 'svg'), line_attribs) + + def GetBoundingBox(self): + ''' + return a tuple giving MinPos, MaxPos and Size (6 elements) + ''' + return(self.xmin, self.ymin, self.xmax, self.ymax, self.xmax - self.xmin, self.ymax - self.ymin) diff --git a/extensions/fablabchemnitz/box_maker_lasercut_box/box_maker_lasercut_box.inx b/extensions/fablabchemnitz/box_maker_lasercut_box/box_maker_lasercut_box.inx new file mode 100644 index 00000000..a96565fc --- /dev/null +++ b/extensions/fablabchemnitz/box_maker_lasercut_box/box_maker_lasercut_box.inx @@ -0,0 +1,89 @@ + + + Box Maker - Lasercut Box + fablabchemnitz.de.box_maker_lasercut_box + + + + + + + + + + + + + + + 50.0 + 30.0 + 15 + 3.0 + 11 + 11 + 6 + true + true + + + + 0.0 + false + + + + false + + + + + + + + true + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/box_maker_lasercut_box/box_maker_lasercut_box.py b/extensions/fablabchemnitz/box_maker_lasercut_box/box_maker_lasercut_box.py new file mode 100644 index 00000000..25ab8760 --- /dev/null +++ b/extensions/fablabchemnitz/box_maker_lasercut_box/box_maker_lasercut_box.py @@ -0,0 +1,470 @@ +#!/usr/bin/env python3 +''' +Copyright (C)2011 Mark Schafer + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +''' + +# Build a tabbed box for lasercutting with tight fit, and minimal material use options. +# User defines: +# - internal or external dimensions, +# - number of tabs, +# - amount lost to laser (kerf), +# - include corner cubes or not, +# - dimples, or perfect fit (accounting for kerf). +# If zero kerf - will be perfectly packed for minimal laser cuts and material size. + +### Todo +# add option to pack multiple boxes (if zero kerf) - new tab maybe? +# add option for little circles at sharp corners for acrylic +# annotations: - add overlap value as markup - Ponoko annotation color +# choose colours from a dictionary + +### Versions +# 0.1 February 2011 - basic lasercut box with dimples etc +# 0.2 changes to unittouu for Inkscape 0.91 +# 0.3 Option to avoid half-sized tabs at corners. + +__version__ = "0.3" + +import inkex +from inkex.paths import Path +from lxml import etree + +class BoxMakerLasercutBox(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument("-i", "--int_ext", type = inkex.Boolean, default=False, help="Are the Dimensions for External or Internal sizing.") + pars.add_argument("-x", "--width", type=float, default=50.0, help="The Box Width - in the X dimension") + pars.add_argument("-y", "--height", type=float, default=30.0, help="The Box Height - in the Y dimension") + pars.add_argument("-z", "--depth", type=float, default=15.0, help="The Box Depth - in the Z dimension") + pars.add_argument("-t", "--thickness", type=float, default=3.0, help="Material Thickness - critical to know") + pars.add_argument("-u", "--units", default="cm", help="The unit of the box dimensions") + pars.add_argument("-c", "--corners", type = inkex.Boolean, default=True, help="The corner cubes can be removed for a different look") + pars.add_argument("-H", "--halftabs", type = inkex.Boolean, default=True, help="Start/End with half-sized tabs - Avoid with very small tabs") + pars.add_argument("-p", "--ntab_W", type=int, default=11, help="Number of tabs in Width") + pars.add_argument("-q", "--ntab_H", type=int, default=11, help="Number of tabs in Height") + pars.add_argument("-r", "--ntab_D", type=int, default=6, help="Number of tabs in Depth") + pars.add_argument("-k", "--kerf_size", type=float,default=0.0, help="Kerf size - amount lost to laser for this material. 0 = loose fit") + pars.add_argument("-d", "--dimples", type=inkex.Boolean, default=False, help="Add dimples for press fitting wooden materials") + pars.add_argument("-s", "--dstyle", type=inkex.Boolean, default=False, help="Dimples can be triangles(cheaper) or half rounds(better)") + pars.add_argument("-g", "--linewidth", type=inkex.Boolean, default=False, help="Use the kerf value as the drawn line width") + pars.add_argument("-j", "--annotation", type=inkex.Boolean, default=True, help="Show Kerf value as annotation") + #dummy for the doc tab - which is named + pars.add_argument("--tab", default="use", help="The selected UI-tab when OK was pressed") + #internal useful variables + self.stroke_width = 0.1 #default for visiblity + self.line_style = {'stroke': '#0000FF', # Ponoko blue + 'fill': 'none', + 'stroke-width': self.stroke_width, + 'stroke-linecap': 'butt', + 'stroke-linejoin': 'miter'} + + def annotation(self, x, y, text): + """ Draw text at this location + - change to path + - use annotation color """ + pass + + + def thickness_line(self, dimple, vert_horiz, pos_neg): + """ called to draw dimples (also draws simple lines if no dimple) + - pos_neg is 1, -1 for direction + - vert_horiz is v or h """ + if dimple and self.kerf > 0.0: # we need a dimple + # size is radius = kerf + # short line, half circle, short line + #[ 'C', [x1,y1, x2,y2, x,y] ] x1 is first handle, x2 is second + lines = [] + radius = self.kerf + if self.thick - 2 * radius < 0.2: # correct for large dimples(kerf) on small thicknesses + radius = (self.thick - 0.2) / 2 + short = 0.1 + else: + short = self.thick/2 - radius + if vert_horiz == 'v': # vertical line + # first short line + lines.append(['v', [pos_neg*short]]) + # half circle + if pos_neg == 1: # only the DH_sides need reversed tabs to interlock + if self.dimple_tri: + lines.append(['l', [radius, pos_neg*radius]]) + lines.append(['l', [-radius, pos_neg*radius]]) + else: + lines.append(['c', [radius, 0, radius, pos_neg*2*radius, 0, pos_neg*2*radius]]) + else: + if self.dimple_tri: + lines.append(['l', [-radius, pos_neg*radius]]) + lines.append(['l', [radius, pos_neg*radius]]) + else: + lines.append(['c', [-radius, 0, -radius, pos_neg*2*radius, 0, pos_neg*2*radius]]) + # last short line + lines.append(['v', [pos_neg*short]]) + else: # horizontal line + # first short line + lines.append(['h', [pos_neg*short]]) + # half circle + if self.dimple_tri: + lines.append(['l', [pos_neg*radius, radius]]) + lines.append(['l', [pos_neg*radius, -radius]]) + else: + lines.append(['c', [0, radius, pos_neg*2*radius, radius, pos_neg*2*radius, 0]]) + # last short line + lines.append(['h', [pos_neg*short]]) + return lines + + # No dimple - so much easier + else: # return a straight v or h line same as thickness + if vert_horiz == 'v': + return [ ['v', [pos_neg*self.thick]] ] + else: + return [ ['h', [pos_neg*self.thick]] ] + + + def draw_WH_lid(self, startx, starty, masktop=False): + """ Return an SVG path for the top or bottom of box + - the Width * Height dimension """ + line_path = [] + line_path.append(['M', [startx, starty]]) + # top row of tabs + if masktop and self.kerf ==0.0: # don't draw top for packing with no extra cuts + line_path.append(['m', [self.boxW, 0]]) + else: + if not self.ht: line_path.append(['l', [self.boxW/self.Wtabs/4 - self.pf/2, 0]]) + for i in range(int(self.Wtabs)): + line_path.append(['h', [self.boxW/self.Wtabs/4 - self.pf/2]]) + #line_path.append(['v', [0, -thick]]) # replaced with dimpled version + for l in self.thickness_line(self.dimple, 'v', -1): + line_path.append(l) + line_path.append(['h', [self.boxW/self.Wtabs/2 + self.pf]]) + line_path.append(['v', [self.thick]]) + line_path.append(['h', [self.boxW/self.Wtabs/4 - self.pf/2]]) + if not self.ht: line_path.append(['l', [self.boxW/self.Wtabs/4 - self.pf/2, 0]]) + # right hand vertical drop + if not self.ht: line_path.append(['l', [0, self.boxH/self.Htabs/4 - self.pf/2]]) + for i in range(int(self.Htabs)): + line_path.append(['v', [self.boxH/self.Htabs/4 - self.pf/2]]) + line_path.append(['h', [self.thick]]) + line_path.append(['v', [self.boxH/self.Htabs/2 + self.pf]]) + #line_path.append(['h', [-thick, 0]]) # replaced with dimpled version + for l in self.thickness_line(self.dimple, 'h', -1): + line_path.append(l) + line_path.append(['v', [self.boxH/self.Htabs/4 - self.pf/2]]) + if not self.ht: line_path.append(['l', [0, self.boxH/self.Htabs/4 - self.pf/2]]) + # bottom row (in reverse) + if not self.ht: line_path.append(['l', [-self.boxW/self.Wtabs/4 + self.pf/2, 0]]) + for i in range(int(self.Wtabs)): + line_path.append(['h', [-self.boxW/self.Wtabs/4 + self.pf/2]]) + line_path.append(['v', [self.thick]]) + line_path.append(['h', [-self.boxW/self.Wtabs/2 - self.pf]]) + #line_path.append(['v', [0, -thick]]) # replaced with dimpled version + for l in self.thickness_line(self.dimple, 'v', -1): + line_path.append(l) + line_path.append(['h', [-self.boxW/self.Wtabs/4 + self.pf/2]]) + if not self.ht: line_path.append(['l', [-self.boxW/self.Wtabs/4 + self.pf/2, 0]]) + # up the left hand side + if not self.ht: line_path.append(['l', [0, -self.boxH/self.Htabs/4 + self.pf/2]]) + for i in range(int(self.Htabs)): + line_path.append(['v', [-self.boxH/self.Htabs/4 + self.pf/2]]) + #line_path.append(['h', [-thick, 0]]) # replaced with dimpled version + for l in self.thickness_line(self.dimple, 'h', -1): + line_path.append(l) + line_path.append(['v', [-self.boxH/self.Htabs/2 - self.pf]]) + line_path.append(['h', [self.thick]]) + line_path.append(['v', [-self.boxH/self.Htabs/4 + self.pf/2]]) + if not self.ht: line_path.append(['l', [0, -self.boxH/self.Htabs/4 + self.pf/2]]) + return line_path + + + def draw_WD_side(self, startx, starty, mask=False, corners=True): + """ Return an SVG path for the long side of box + - the Width * Depth dimension """ + # Draw side of the box (placed below the lid) + line_path = [] + # top row of tabs + if corners: + line_path.append(['M', [startx - self.thick, starty]]) + line_path.append(['v', [-self.thick]]) + line_path.append(['h', [self.thick]]) + else: + line_path.append(['M', [startx, starty]]) + line_path.append(['v', [-self.thick]]) + # + if self.kerf > 0.0: # if fit perfectly - don't draw double line + if not self.ht: line_path.append(['l', [self.boxW/self.Wtabs/4 + self.pf/2, 0]]) + for i in range(int(self.Wtabs)): + line_path.append(['h', [self.boxW/self.Wtabs/4 + self.pf/2]]) + line_path.append(['v', [self.thick]]) + line_path.append(['h', [self.boxW/self.Wtabs/2 - self.pf]]) + #line_path.append(['v', [0, -thick]]) # replaced with dimpled version + for l in self.thickness_line(self.dimple, 'v', -1): + line_path.append(l) + line_path.append(['h', [self.boxW/self.Wtabs/4 + self.pf/2]]) + if not self.ht: line_path.append(['l', [self.boxW/self.Wtabs/4 + self.pf/2, 0]]) + if corners: line_path.append(['h', [self.thick]]) + else: # move to skipped drawn lines + if corners: + line_path.append(['m', [self.boxW + self.thick, 0]]) + else: + line_path.append(['m', [self.boxW, 0]]) + # + line_path.append(['v', [self.thick]]) + if not corners: line_path.append(['h', [self.thick]]) + # RHS + if not self.ht: line_path.append(['l', [0, self.boxD/self.Dtabs/4 + self.pf/2]]) + for i in range(int(self.Dtabs)): + line_path.append(['v', [self.boxD/self.Dtabs/4 + self.pf/2]]) + #line_path.append(['h', [-thick, 0]]) # replaced with dimpled version + for l in self.thickness_line(self.dimple, 'h', -1): + line_path.append(l) + line_path.append(['v', [self.boxD/self.Dtabs/2 - self.pf]]) + line_path.append(['h', [self.thick]]) + line_path.append(['v', [self.boxD/self.Dtabs/4 + self.pf/2]]) + if not self.ht: line_path.append(['l', [0, self.boxD/self.Dtabs/4 + self.pf/2]]) + # + if corners: + line_path.append(['v', [self.thick]]) + line_path.append(['h', [-self.thick]]) + else: + line_path.append(['h', [-self.thick]]) + line_path.append(['v', [self.thick]]) + # base + if not self.ht: line_path.append(['l', [-self.boxW/self.Wtabs/4 - self.pf/2, 0]]) + for i in range(int(self.Wtabs)): + line_path.append(['h', [-self.boxW/self.Wtabs/4 - self.pf/2]]) + #line_path.append(['v', [0, -thick]]) # replaced with dimpled version + for l in self.thickness_line(self.dimple, 'v', -1): + line_path.append(l) + line_path.append(['h', [-self.boxW/self.Wtabs/2 + self.pf]]) + line_path.append(['v', [self.thick]]) + line_path.append(['h', [-self.boxW/self.Wtabs/4 - self.pf/2]]) + if not self.ht: line_path.append(['l', [-self.boxW/self.Wtabs/4 - self.pf/2, 0]]) + # + if corners: + line_path.append(['h', [-self.thick]]) + line_path.append(['v', [-self.thick]]) + else: + line_path.append(['v', [-self.thick]]) + line_path.append(['h', [-self.thick]]) + # LHS + if not self.ht: line_path.append(['l', [0, -self.boxD/self.Dtabs/4 - self.pf/2]]) + for i in range(int(self.Dtabs)): + line_path.append(['v', [-self.boxD/self.Dtabs/4 - self.pf/2]]) + line_path.append(['h', [self.thick]]) + line_path.append(['v', [-self.boxD/self.Dtabs/2 + self.pf]]) + #line_path.append(['h', [-thick, 0]]) # replaced with dimpled version + for l in self.thickness_line(self.dimple, 'h', -1): + line_path.append(l) + line_path.append(['v', [-self.boxD/self.Dtabs/4 - self.pf/2]]) + if not self.ht: line_path.append(['l', [0, -self.boxD/self.Dtabs/4 - self.pf/2]]) + # + if not corners: line_path.append(['h', [self.thick]]) + return line_path + + + def draw_HD_side(self, startx, starty, corners, mask=False): + """ Return an SVG path for the short side of box + - the Height * Depth dimension """ + line_path = [] + # top row of tabs + line_path.append(['M', [startx, starty]]) + if not(mask and corners and self.kerf == 0.0): + line_path.append(['h', [self.thick]]) + else: + line_path.append(['m', [self.thick, 0]]) + if not self.ht: line_path.append(['l', [self.boxD/self.Dtabs/4 - self.pf/2, 0]]) + for i in range(int(self.Dtabs)): + line_path.append(['h', [self.boxD/self.Dtabs/4 - self.pf/2]]) + line_path.append(['v', [-self.thick]]) + line_path.append(['h', [self.boxD/self.Dtabs/2 + self.pf]]) + #line_path.append(['v', [0, thick]]) # replaced with dimpled version + for l in self.thickness_line(self.dimple, 'v', 1): + line_path.append(l) + line_path.append(['h', [self.boxD/self.Dtabs/4 - self.pf/2]]) + if not self.ht: line_path.append(['l', [self.boxD/self.Dtabs/4 - self.pf/2, 0]]) + line_path.append(['h', [self.thick]]) + # + if not self.ht: line_path.append(['l', [0, self.boxH/self.Htabs/4 + self.pf/2]]) + for i in range(int(self.Htabs)): + line_path.append(['v', [self.boxH/self.Htabs/4 + self.pf/2]]) + #line_path.append(['h', [-thick, 0]]) # replaced with dimpled version + for l in self.thickness_line(self.dimple, 'h', -1): + line_path.append(l) + line_path.append(['v', [self.boxH/self.Htabs/2 - self.pf]]) + line_path.append(['h', [self.thick]]) + line_path.append(['v', [self.boxH/self.Htabs/4 + self.pf/2]]) + if not self.ht: line_path.append(['l', [0, self.boxH/self.Htabs/4 + self.pf/2]]) + line_path.append(['h', [-self.thick]]) + # + if not self.ht: line_path.append(['l', [-self.boxD/self.Dtabs/4 + self.pf/2, 0]]) + for i in range(int(self.Dtabs)): + line_path.append(['h', [-self.boxD/self.Dtabs/4 + self.pf/2]]) + #line_path.append(['v', [0, thick]]) # replaced with dimpled version + for l in self.thickness_line(self.dimple, 'v', 1): # this is the weird +1 instead of -1 dimple + line_path.append(l) + line_path.append(['h', [-self.boxD/self.Dtabs/2 - self.pf]]) + line_path.append(['v', [-self.thick]]) + line_path.append(['h', [-self.boxD/self.Dtabs/4 + self.pf/2]]) + if not self.ht: line_path.append(['l', [-self.boxD/self.Dtabs/4 + self.pf/2, 0]]) + line_path.append(['h', [-self.thick]]) + # + if self.kerf > 0.0: # if fit perfectly - don't draw double line + if not self.ht: line_path.append(['l', [0, -self.boxH/self.Htabs/4 - self.pf/2]]) + for i in range(int(self.Htabs)): + line_path.append(['v', [-self.boxH/self.Htabs/4 - self.pf/2]]) + line_path.append(['h', [self.thick]]) + line_path.append(['v', [-self.boxH/self.Htabs/2 + self.pf]]) + #line_path.append(['h', [-thick, 0]]) # replaced with dimpled version + for l in self.thickness_line(self.dimple, 'h', -1): + line_path.append(l) + line_path.append(['v', [-self.boxH/self.Htabs/4 - self.pf/2]]) + if not self.ht: line_path.append(['l', [0, -self.boxH/self.Htabs/4 - self.pf/2]]) + return line_path + + ###-------------------------------------------- + ### The main function called by the inkscape UI + def effect(self): + # document dimensions (for centering) + docW = self.svg.unittouu(self.document.getroot().get('width')) + docH = self.svg.unittouu(self.document.getroot().get('height')) + # extract fields from UI + self.boxW = self.svg.unittouu(str(self.options.width) + self.options.units) + self.boxH = self.svg.unittouu(str(self.options.height) + self.options.units) + self.boxD = self.svg.unittouu(str(self.options.depth) + self.options.units) + self.thick = self.svg.unittouu(str(self.options.thickness) + self.options.units) + self.kerf = self.svg.unittouu(str(self.options.kerf_size) + self.options.units) + if self.kerf < 0.01: self.kerf = 0.0 # snap to 0 for UI error when setting spinner to 0.0 + self.Wtabs = self.options.ntab_W + self.Htabs = self.options.ntab_H + self.Dtabs = self.options.ntab_D + self.dimple = self.options.dimples + line_width = self.options.linewidth + corners = self.options.corners + self.dimple_tri = self.options.dstyle + self.annotation = self.options.annotation + self.ht = self.options.halftabs + if not self.ht: + self.Wtabs += 0.5 + self.Htabs += 0.5 + self.Dtabs += 0.5 + + # Correct for thickness in dimensions + if self.options.int_ext: # external so add thickness + self.boxW -= self.thick*2 + self.boxH -= self.thick*2 + self.boxD -= self.thick*2 + # adjust for laser kerf (precise measurement) + self.boxW += self.kerf + self.boxH += self.kerf + self.boxD += self.kerf + + # Precise fit or dimples (if kerf > 0.0) + if self.dimple == False: # and kerf > 0.0: + self.pf = self.kerf + else: + self.pf = 0.0 + + # set the stroke width and line style + sw = self.kerf + if self.kerf == 0.0: sw = self.stroke_width + ls = self.line_style + if line_width: # user wants drawn line width to be same as kerf size + ls['stroke-width'] = sw + line_style = str(inkex.Style(ls)) + + ###--------------------------- + ### create the inkscape object + box_id = self.svg.get_unique_id('box') + self.box = g = etree.SubElement(self.svg.get_current_layer(), 'g', {'id':box_id}) + + #Set local position for drawing (will transform to center of doc at end) + lower_pos = 0 + left_pos = 0 + # Draw Lid (using SVG path definitions) + line_path = self.draw_WH_lid(left_pos, lower_pos) + # Add to scene + line_atts = { 'style':line_style, 'id':box_id+'-lid', 'd':str(Path(line_path)) } + etree.SubElement(g, inkex.addNS('path','svg'), line_atts) + + # draw the side of the box directly below + if self.kerf > 0.0: + lower_pos += self.boxH + (3*self.thick) + else: # kerf = 0 so don't draw extra lines and fit perfectly + lower_pos += self.boxH + self.thick # at lower edge of lid + left_pos += 0 + # Draw side of the box (placed below the lid) + line_path = self.draw_WD_side(left_pos, lower_pos, corners=corners) + # Add to scene + line_atts = { 'style':line_style, 'id':box_id+'-longside1', 'd':str(Path(line_path)) } + etree.SubElement(g, inkex.addNS('path','svg'), line_atts) + + # draw the bottom of the box directly below + if self.kerf > 0.0: + lower_pos += self.boxD + (3*self.thick) + else: # kerf = 0 so don't draw extra lines and fit perfectly + lower_pos += self.boxD + self.thick # at lower edge + left_pos += 0 + # Draw base of the box + line_path = self.draw_WH_lid(left_pos, lower_pos, True) + # Add to scene + line_atts = { 'style':line_style, 'id':box_id+'-base', 'd':str(Path(line_path)) } + etree.SubElement(g, inkex.addNS('path','svg'), line_atts) + + # draw the second side of the box directly below + if self.kerf > 0.0: + lower_pos += self.boxH + (3*self.thick) + else: # kerf = 0 so don't draw extra lines and fit perfectly + lower_pos += self.boxH + self.thick # at lower edge of lid + left_pos += 0 + # Draw side of the box (placed below the lid) + line_path = self.draw_WD_side(left_pos, lower_pos, corners=corners) + # Add to scene + line_atts = { 'style':line_style, 'id':box_id+'-longside2', 'd':str(Path(line_path)) } + etree.SubElement(g, inkex.addNS('path','svg'), line_atts) + + # draw next on RHS of lid + if self.kerf > 0.0: + left_pos += self.boxW + (2*self.thick) # adequate space (could be a param for separation when kerf > 0) + else: + left_pos += self.boxW # right at right edge of lid + lower_pos = 0 + # Side of the box (placed next to the lid) + line_path = self.draw_HD_side(left_pos, lower_pos, corners) + # Add to scene + line_atts = { 'style':line_style, 'id':box_id+'-endface2', 'd':str(Path(line_path)) } + etree.SubElement(g, inkex.addNS('path','svg'), line_atts) + + # draw next on RHS of base + if self.kerf > 0.0: + lower_pos += self.boxH + self.boxD + 6*self.thick + else: + lower_pos += self.boxH +self.boxD + 2*self.thick + # Side of the box (placed next to the lid) + line_path = self.draw_HD_side(left_pos, lower_pos, corners, True) + # Add to scene + line_atts = { 'style':line_style, 'id':box_id+'-endface1', 'd':str(Path(line_path)) } + etree.SubElement(g, inkex.addNS('path','svg'), line_atts) + + + ###---------------------------------------- + # Transform entire drawing to center of doc + lower_pos += self.boxH*2 + self.boxD*2 + 2*self.thick + left_pos += self.boxH + 2*self.thick + g.set( 'transform', 'translate(%f,%f)' % ( (docW-left_pos)/2, (docH-lower_pos)/2)) + + # The implementation algorithm has added intermediate short lines and doubled up when using h,v with extra zeros + #self.thin(g) # remove short straight lines + +if __name__ == '__main__': + BoxMakerLasercutBox().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/box_maker_living_hinge/box_maker_living_hinge.inx b/extensions/fablabchemnitz/box_maker_living_hinge/box_maker_living_hinge.inx new file mode 100644 index 00000000..c19bf706 --- /dev/null +++ b/extensions/fablabchemnitz/box_maker_living_hinge/box_maker_living_hinge.inx @@ -0,0 +1,51 @@ + + + Box Maker - Living Hinge + fablabchemnitz.de.box_maker_living_hinge + + + + + + + + + + + + + + + + + + 40.0 + 80.0 + 50.0 + 6.0 + + + + + 3.0 + 0.1 + 0.01 + + + + + 1.0 + 2.0 + 15.000 + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/box_maker_living_hinge/box_maker_living_hinge.py b/extensions/fablabchemnitz/box_maker_living_hinge/box_maker_living_hinge.py new file mode 100644 index 00000000..950b8e4c --- /dev/null +++ b/extensions/fablabchemnitz/box_maker_living_hinge/box_maker_living_hinge.py @@ -0,0 +1,511 @@ +#!/usr/bin/env python3 +''' +Generates Inkscape SVG file containing box components needed to +laser cut a tabbed construction box taking kerf and clearance into account + +Original Author -- 2011 elliot white elliot@twot.eu +Forked -- 2013 Reid Borsuk reid.borsuk@live.com +Updated for 0.91 2016 Maren Hachmann marenhachmann@yahoo.com + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +''' +__version__ = "0.8rb" + +import inkex +import math +from lxml import etree +import math + +def drawS(XYstring): # Draw lines from a list + name='part' + style = { 'stroke': '#000000', 'fill': 'none' } + drw = {'style': str(inkex.Style(style)),inkex.addNS('label','inkscape'):name,'d':XYstring} + etree.SubElement(parent, inkex.addNS('path','svg'), drw ) + return + +def draw_SVG_ellipse(centerx, centery, radiusx, radiusy, start_end): + + style = { 'stroke' : '#000000', + 'fill' : 'none' } + ell_attribs = {'style': str(inkex.Style(style)), + inkex.addNS('cx','sodipodi') :str(centerx), + inkex.addNS('cy','sodipodi') :str(centery), + inkex.addNS('rx','sodipodi') :str(radiusx), + inkex.addNS('ry','sodipodi') :str(radiusy), + inkex.addNS('start','sodipodi') :str(start_end[0]), + inkex.addNS('end','sodipodi') :str(start_end[1]), + inkex.addNS('open','sodipodi') :'true', #all ellipse sectors we will draw are open + inkex.addNS('type','sodipodi') :'arc', + 'transform' :'' + } + + ell = etree.SubElement(parent, inkex.addNS('path','svg'), ell_attribs ) + +#draw an SVG line segment between the given (raw) points +def draw_SVG_line( x1, y1, x2, y2, parent): + style = { 'stroke': '#000000', 'fill': 'none' } + + line_attribs = {'style' : str(inkex.Style(style)), + 'd' : 'M '+str(x1)+','+str(y1)+' L '+str(x2)+','+str(y2)} + + line = etree.SubElement(parent, inkex.addNS('path','svg'), line_attribs ) + +def EllipseCircumference(a, b): + """ + Compute the circumference of an ellipse with semi-axes a and b. + Require a >= 0 and b >= 0. Relative accuracy is about 0.5^53. + """ + import math + x, y = max(a, b), min(a, b) + digits = 53; tol = math.sqrt(math.pow(0.5, digits)) + if digits * y < tol * x: return 4 * x + s = 0; m = 1 + while x - y > tol * y: + x, y = 0.5 * (x + y), math.sqrt(x * y) + m *= 2; s += m * math.pow(x - y, 2) + return math.pi * (math.pow(a + b, 2) - s) / (x + y) + +""" +Gives you a list of points that make up a box. + +Returns string suitable for input to drawS +""" +def box(sx, sy,ex, ey, leaveLeftSideOpen = False): + s=[] + s='M '+str(sx)+','+str(sy)+' ' + s+='L '+str(ex)+','+str(sy)+' ' + s+='L '+str(ex)+','+str(ey)+' ' + s+='L '+str(sx)+','+str(ey)+' ' + if not leaveLeftSideOpen: + s+='L '+str(sx)+','+str(sy)+' ' + return s + +""" +Side function is used to render any of the sides so needs all this functionality: + isLongSide -- long sides without tabs (for cover), + truncate -- partial sides for the elipse + gap -- extend the tabs on the curved side for ease of movement + thumbTab -- Render individual boxes for slots instead of one continuous line + +isTab is used to specify the male/female designation for a side so they mesh properly. Otherwise the tabs +would be in the same spot for opposing sides, instead of interleaved. + +Returns a list of lines to draw. +""" +def side(rx,ry,sox,soy,eox,eoy,tabVec,length, dirx, diry, isTab, isLongSide, truncate = False, gap = False, thumbTab = False): + # root startOffset endOffset tabVec length direction isTab + + #Long side length= length+((math.pi*(length/2))/4 + tmpLength = 0 + correctionLocal = correction + if gap: + correctionLocal = (correction) + if isLongSide > 0: + tmpLength = length + length = isLongSide + + divs=int(length/nomTab) # divisions + if not divs%2: divs-=1 # make divs odd + if isLongSide < 0: + divs = 1 + + divs=float(divs) + tabs=(divs-1)/2 # tabs for side + + if isLongSide < 0: + divs = 1 + tabWidth = length + gapWidth = 0 + elif equalTabs: + gapWidth=tabWidth=length/divs + else: + tabWidth=nomTab + gapWidth=(length-tabs*nomTab)/(divs-tabs) + + if isTab: # kerf correction + gapWidth-=correctionLocal + tabWidth+=correctionLocal + first=correctionLocal/2 + else: + gapWidth+=correctionLocal + tabWidth-=correctionLocal + first=-correctionLocal/2 + + s=[] + firstVec=0; secondVec=tabVec + if gap: + secondVec *= 2 + dirxN=0 if dirx else 1 # used to select operation on x or y + diryN=0 if diry else 1 + (Vx,Vy)=(rx+sox*thickness,ry+soy*thickness) + s='M '+str(Vx)+','+str(Vy)+' ' + + if dirxN: Vy=ry # set correct line start + if diryN: Vx=rx + + if isLongSide > 0: #LongSide is a side without tabs for a portion. + length = tmpLength + divs=int((Z/2)/nomTab) + if not divs%2: divs-=1 + divs = float(divs) + + # generate line as tab or hole using: + # last co-ord:Vx,Vy ; tab dir:tabVec ; direction:dirx,diry ; thickness:thickness + # divisions:divs ; gap width:gapWidth ; tab width:tabWidth + for n in range(1,int(divs)): + if n%2: + Vx=Vx+dirx*gapWidth+dirxN*firstVec+first*dirx + Vy=Vy+diry*gapWidth+diryN*firstVec+first*diry + s+='L '+str(Vx)+','+str(Vy)+' ' + Vx=Vx+dirxN*secondVec + Vy=Vy+diryN*secondVec + s+='L '+str(Vx)+','+str(Vy)+' ' + else: + Vxs = Vx + Vys = Vy + Vx=Vx+dirx*tabWidth+dirxN*firstVec + Vy=Vy+diry*tabWidth+diryN*firstVec + s+='L '+str(Vx)+','+str(Vy)+' ' + Vx=Vx+dirxN*secondVec + Vy=Vy+diryN*secondVec + s+='L '+str(Vx)+','+str(Vy)+' ' + if thumbTab: + drawS(box(Vxs,Vys,Vx,Vy)) + (secondVec,firstVec)=(-secondVec,-firstVec) # swap tab direction + first=0 + if not truncate: + s+='L '+str(rx+eox*thickness+dirx*length)+','+str(ry+eoy*thickness+diry*length)+' ' + else: #Truncate specifies that a side is incomplete in preperation for a curve + s+='L '+str(rx+eox*thickness+dirx*(length/2))+','+str(ry+eoy*thickness+diry*(length/2))+' ' + return s + +#God class. Makes poor design, but not much object oriented in this guy... +class BoxMakerLivingHinge(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument('--unit',default='mm',help='Measure Units') + pars.add_argument('--inside',type=int,default=0,help='Int/Ext Dimension') + pars.add_argument('--length',type=float,default=100,help='Length of Box') + pars.add_argument('--width',type=float,default=100,help='Width of Box') + pars.add_argument('--height',type=float,default=100,help='Height of Box') + pars.add_argument('--tab',type=float,default=25,help='Nominal Tab Width') + pars.add_argument('--equal',type=int,default=0,help='Equal/Prop Tabs') + pars.add_argument('--thickness',type=float,default=10,help='Thickness of Material') + pars.add_argument('--kerf',type=float,default=0.5,help='Kerf (width) of cut') + pars.add_argument('--clearance',type=float,default=0.01,help='Clearance of joints') + pars.add_argument('--style',type=int,default=25,help='Layout/Style') + pars.add_argument('--spacing',type=float,default=25,help='Part Spacing') + pars.add_argument('--hingeOpt',type=int,default=0,help='Hinge type') + pars.add_argument('--hingeThick',type=float,default=0,help='Hinge thickness') + pars.add_argument('--thumbTab',default=0,help='Add a thumb tab') + + """ + Traditional multi-slit design. + Sx, Sy : Start X, Y (pixels, not user units) + Ex, Ey : End X, Y (pixels, not user units) + space : gap between slots in the X direction, in user specified units (IE: wood between two rows of slots) + solidGap : gap between slots in the Y direction, in user specified units (IE: how much wood is left between 2 or 3 cuts) + """ + def livingHinge2(self, Sx, Sy, Ex, Ey, space = 2, solidGap = 4): + + space = self.svg.unittouu( str(space) + unit ) + solidGap = self.svg.unittouu( str(solidGap) + unit ) + Sy += thickness + Ey -= thickness + + height = Ey - Sy + + width = Ex - Sx + # inkex.utils.debug(width) + horizontalSlots = int(round(width / space)) + # inkex.utils.debug(horizontalSlots) + if horizontalSlots % 2 and horizontalSlots != 1: + horizontalSlots-=1 # make it even so you end with an interior slot + # inkex.utils.debug(horizontalSlots) + space = width / horizontalSlots + + grp_name = 'Living Hinge' + grp_attribs = {inkex.addNS('label','inkscape'):grp_name } + grp = etree.SubElement(parent, 'g', grp_attribs)#the group to put everything in + + for n in range(0,horizontalSlots+1): + if n%2: #odd, exterior slot (slot should go all the way to the part edge) + draw_SVG_line(Sx + (space * n), Sy, Sx + (space * n), Sy+(height/4)-(solidGap/2), grp) + draw_SVG_line(Sx + (space * n), Sy+(height/4)+(solidGap/2), Sx + (space * n), Ey-(height/4)-(solidGap/2), grp) + draw_SVG_line(Sx + (space * n), Ey-(height/4)+(solidGap/2), Sx + (space * n), Ey, grp) + + else: + #even, interior slot (slot shoud not touch edge of part) + draw_SVG_line(Sx + (space * n), Sy+solidGap, Sx + (space * n), Sy+(height/2)-(solidGap/2), grp) + draw_SVG_line(Sx + (space * n), Ey-(height/2)+(solidGap/2), Sx + (space * n), Ey-solidGap, grp) + + """ + The sprial based designs are built from multiple calls of this function. + Sx, Sy : Start X, Y (pixels, not user units) + Ex, Ey : End X, Y (pixels, not user units) + reverse : specifies the spin of the spiral (1 = outer spiral is counterclockwise, -1 otherwise) + space : gap between slots, in user specified units (IE: how thick the wood remainder is) + """ + def livingHinge3(self, Sx, Sy, Ex, Ey, reverse = 1, space = 2): + space = self.svg.unittouu( str(space) + unit ) + + height = (Ey - Sy) + + width = (Ex - Sx) + + horizontalSlots = int(math.floor(height / (space))) + if not horizontalSlots%2: horizontalSlots-=1 # make it odd otherwise the below division will result in an outer cut too thin + + space = (height / horizontalSlots) + + horizontalSlots = int(round(horizontalSlots * 1/2)) #We do 2 passes per render, so divide slots requirement in half + + grp_name = 'Living Hinge' + grp_attribs = {inkex.addNS('label','inkscape'):grp_name } + grp = etree.SubElement(parent, 'g', grp_attribs)#the group to put everything in + + centerX = Sx + (width/2) + centerY = Sy + (height/2) + + for n in range(0,horizontalSlots): + newX = (((space/2) + (space*n)) * reverse) + draw_SVG_line((centerX - newX), centerY + (space/2) + (space * n), (centerX - newX ), centerY - (space * 1.5) - (space * n), grp) + if horizontalSlots - 1 != n: #Last line in center should be omited + draw_SVG_line((centerX - (space + (space/2 * -reverse)) - (space*n) ), centerY - (space * 1.5) - (space * n), (centerX + (space + (space/2 * reverse)) + (space*n) ), centerY - (space * 1.5) - (space * n), grp) + + draw_SVG_line((centerX + newX ), centerY - (space/2) - (space * n), (centerX + newX ), centerY + (space * 1.5) + (space * n), grp) + if horizontalSlots - 1 != n: #Last line in center should be omited + draw_SVG_line((centerX + (space + (space/2 * -reverse)) + (space*n) ), centerY + (space * 1.5) + (space * n), (centerX - (space + (space/2 * reverse)) - (space*n) ), centerY + (space * 1.5) + (space * n), grp) + + """ + The snake based designs are built from multiple calls of this function. + Sx, Sy : Start X, Y (pixels, not user units) + Ex, Ey : End X, Y (pixels, not user units) + rotate : False means the traditional flexable design (cuts are prependuclar to long sides). True rotates 90 degrees. + mirror : mirror inverts the left and right slots, used for inverting during double design + space : gap between adjecent slots, in user specified units (IE: wood between two rows of slots, X if rotate is false, Y if true) + solidGap : gap between slot and edge, in user specified units (IE: how much wood is left between cut and edge, Y if rotate is false, X if true) + """ + def livingHinge4(self, Sx, Sy, Ex, Ey, rotate = False, mirror = 0, space = 2, solidGap = 5): + + space = self.svg.unittouu( str(space) + unit ) + solidGap = self.svg.unittouu( str(solidGap) + unit ) + Sy += thickness + Ey -= thickness + + height = Ey - Sy + width = Ex - Sx + + if not rotate: + horizontalSlots = int(round(width / space)) + space = width / horizontalSlots + skew = 1 #Paint extra lines at the start and end because in this direction there are no existing lines already + else: + horizontalSlots = int(round(height / space)) + if not horizontalSlots%2: horizontalSlots-=1 #make sure we always end on the same side, otherwise we'll cut off the last tooh + space = height / horizontalSlots + skew = 0 #Don't paint the first and last lines, as they're on the cut already, and double cuts on a laser are messy + + grp_name = 'Living Hinge' + grp_attribs = {inkex.addNS('label','inkscape'):grp_name } + grp = etree.SubElement(parent, 'g', grp_attribs)#the group to put everything in + + for n in range(1 - skew,horizontalSlots + skew): + if not rotate: + if (n+mirror)%2: + draw_SVG_line(Sx + (space * n), Sy + solidGap, Sx + (space * n), Ey, grp) + else: + draw_SVG_line(Sx + (space * n), Sy, Sx + (space * n), Ey - solidGap, grp) + else: + if (n+mirror)%2: + draw_SVG_line(Sx + solidGap, Sy + (space * n), Ex, Sy + (space * n), grp) + else: + draw_SVG_line(Sx, Sy + (space * n), Ex - solidGap, Sy + (space * n), grp) + if rotate and not mirror: + draw_SVG_line(Sx, Sy, Sx, Ey - space, grp) + draw_SVG_line(Ex, Sy + space, Ex, Ey, grp) + elif mirror: + draw_SVG_line(Sx, Sy + space, Sx, Ey, grp) + draw_SVG_line(Ex, Sy, Ex, Ey - space, grp) + + def effect(self): + global parent,nomTab,equalTabs,thickness,correction, Z, unit + + # Get access to main SVG document element and get its dimensions. + svg = self.document.getroot() + + # Get the attibutes: + widthDoc = self.svg.unittouu(svg.get('width')) + heightDoc = self.svg.unittouu(svg.get('height')) + + # Create a new layer. + layer = etree.SubElement(svg, 'g') + layer.set(inkex.addNS('label', 'inkscape'), 'newlayer') + layer.set(inkex.addNS('groupmode', 'inkscape'), 'layer') + + parent=self.svg.get_current_layer() + + # Get script's option values. + unit=self.options.unit + inside=self.options.inside + X = self.svg.unittouu( str(self.options.length) + unit ) + Y = self.svg.unittouu( str(self.options.width) + unit ) + Z = self.svg.unittouu( str(self.options.height) + unit ) + thickness = self.svg.unittouu( str(self.options.thickness) + unit ) + nomTab = self.svg.unittouu( str(self.options.tab) + unit ) + equalTabs=self.options.equal + kerf = self.svg.unittouu( str(self.options.kerf) + unit ) + clearance = self.svg.unittouu( str(self.options.clearance) + unit ) + layout=self.options.style + spacing = self.svg.unittouu( str(self.options.spacing) + unit ) + ring = 1 + hingeOpt = self.options.hingeOpt + hingeThick = self.options.hingeThick + thumbTab = self.options.thumbTab + + if inside: # if inside dimension selected correct values to outside dimension + X+=thickness*2 + Y+=thickness*2 + Z+=thickness*2 + + correction=kerf-clearance + + # check input values mainly to avoid python errors + # TODO restrict values to *correct* solutions + # TODO -- Do what the origial author suggested I do. QUALITY! + error=0 + + if min(X,Y,Z)==0: + inkex.errormsg('Error: Dimensions must be non zero') + error=1 + if max(X,Y,Z)>max(widthDoc,heightDoc)*10: # crude test + inkex.errormsg('Error: Dimensions Too Large') + error=1 + if min(X,Y,Z)<3*nomTab: + inkex.errormsg('Error: Tab size too large') + error=1 + if nomTabmin(X,Y,Z)/3: # crude test + inkex.errormsg('Error: Material too thick') + error=1 + if correction>min(X,Y,Z)/3: # crude test + inkex.errormsg('Error: Kerf/Clearence too large') + error=1 + if spacing>max(X,Y,Z)*10: # crude test + inkex.errormsg('Error: Spacing too large') + error=1 + if spacing 0=holes 1=tabs + if layout==0: # Diagramatic Layout TRBL + pieces=[ #center low row + [(2,0,0,1),(3,0,1,1),X,Z,0b1000,-2], + #left middle row + [(1,0,0,0),(2,0,0,1),Z,Y,0b1111,0], + #center middle row + [(2,0,0,1),(2,0,0,1),X,Y,0b0000,0], + #right middle row + [(3,1,0,1),(2,0,0,1),Z+(EllipseCircumference(X/2, Z/2)/4)+thickness,Y,0b1011,1], + #center top row + [(2,0,0,1),(1,0,0,0),X,Z,0b0010,-1]] + elif layout==1: # Inline(compact) Layout + pieces=[#Base + [(1,0,0,0),(1,0,0,0),X,Y,0b0000,0], + #Front panel + [(2,1,0,0),(1,0,0,0),Z,Y,0b1111,0], + #Sides with curves + [(3,1,0,1),(1,0,0,0),X,Z,0b1000,-2], + [(4,2,0,1),(1,0,0,0),X,Z,0b0010,-1], + #Long piece w/ hinge + [(5,3,0,1),(1,0,0,0),Z+(EllipseCircumference(X/2, Z/2)/4)+thickness,Y,0b1011,1] + ] + + for piece in pieces: # generate and draw each piece of the box + (xs,xx,xy,xz)=piece[0] + (ys,yx,yy,yz)=piece[1] + x=xs*spacing+xx*X+xy*Y+xz*Z # root x co-ord for piece + y=ys*spacing+yx*X+yy*Y+yz*Z # root y co-ord for piece + dx=piece[2] + dy=piece[3] + tabs=piece[4] + a=tabs>>3&1; b=tabs>>2&1; c=tabs>>1&1; d=tabs&1 # extract tab status for each side. It's a nasty packed binary flag format, but I'm not fixing it now. + longSide = 0 + shortSide = 0 + skew = 0 + + if piece[5] == 1: + longSide = Z + elif piece[5] < 0: + shortSide = Z + + # generate and draw the sides of each piece + if piece[5] != -1: + drawS(side(x,y,d,a,-b,a,-thickness if a else thickness,dx,1,0,a,longSide)) # side a (top) + else: + drawS(side(x,y,d,a,-b,a,-thickness if a else thickness,dx/2,1,0,a,-1)) # side a (top) when the top participates in a curve + + if piece[5] != -1 and piece[5] != 1: + drawS(side(x+dx+skew,y,-b,a,-b,-c,thickness if b else -thickness,dy,0,1,b,shortSide, False if piece[5] != -2 else True, False if piece[5] != 1 else True)) # side b (right) except for side with living hinge or curves + elif piece[5] == -1: + drawS(side(x+dx+skew,y+dy,-b,-c,-b,a,thickness if b else -thickness,dy,0,-1,b,shortSide, True)) # side b (right) when the right side participates in a curve + else: + #It is a cardnal sin to compare floats, so assume <0.0005 is 0 since the front end only gives you 3 digits of precision + if float(0.0005) <= float(self.options.thumbTab): + side(x+dx+skew,y,-b,a,-b,-c,thickness if b else -thickness,dy,0,1,b,shortSide, False, True, True) #The one call to side that doesn't actually draw. Instead, side draws boxes on its own + drawS(box(x+dx+skew,y+thickness,x+dx+skew+self.svg.unittouu( thumbTab + unit ),y+dy-thickness, True)) + else: + drawS(side(x+dx+skew,y,-b,a,-b,-c,thickness if b else -thickness,dy,0,1,b,shortSide, False, True)) #side b (right) on the right side of a living hinge + + + if piece[5] != -2: + drawS(side(x,y+dy,d,-c,-b,-c,thickness if c else -thickness,dx,1,0,c,longSide)) # side c (bottom) + else: + drawS(side(x,y+dy,d,-c,-b,-c,thickness if c else -thickness,dx/2,1,0,c,-1)) # side c (bottom) when the bottom participates in a curve + + drawS(side(x,y+dy,d,-c,d,a,-thickness if d else thickness,dy,0,-1,d,0)) # side d (left) + + if piece[5] < 0: + draw_SVG_ellipse(x+(dx/2), y+(dy/2), (dx/2), (dy/2), [(1.5*math.pi), 0] if piece[5] == -1 else [0, 0.5*math.pi]) #draw the curve + + if piece[5] == 1: #Piece should contain a living hinge + if hingeOpt == 0: #Traditional parallel slit + self.livingHinge2(x+(Z/2), y, x+(Z/2)+(EllipseCircumference(X/2, Z/2)/4), y + (dy), hingeThick) + elif hingeOpt == 1: #Single spiral + if not inside: + self.livingHinge3(x+(Z/2), y+thickness, x+(Z/2)+(EllipseCircumference(X/2, Z/2)/4), y + dy - thickness, 1, hingeThick) + else: + self.livingHinge3(x+(Z/2), y + 2*thickness, x+(Z/2)+(EllipseCircumference(X/2, Z/2)/4), y + dy - 2*thickness, 1, hingeThick) + + elif hingeOpt == 2: #Double spiral + self.livingHinge3(x+(Z/2), y+thickness, x+(Z/2)+(EllipseCircumference(X/2, Z/2)/4), y + (dy/2), 1, hingeThick) + self.livingHinge3(x+(Z/2), y+(dy/2), x+(Z/2)+(EllipseCircumference(X/2, Z/2)/4), y + dy - thickness, -1, hingeThick) + elif hingeOpt == 3 or hingeOpt == 4: #Both snake-based designs + self.livingHinge4(x+(Z/2), y, x+(Z/2)+(EllipseCircumference(X/2, Z/2)/4), y + (dy), False if hingeOpt == 3 else True, 0, hingeThick) + elif hingeOpt == 5: #Double snake design + self.livingHinge4(x+(Z/2), y, x+(Z/2)+EllipseCircumference(X/2, Z/2)/4, y + (dy/2) + thickness, True, 0, hingeThick) #Add thickness as a cheat so design 4 doesn't have to know if it's a short or long variant + self.livingHinge4(x+(Z/2), y + (dy/2) - thickness, (x+(Z/2)+(EllipseCircumference(X/2, Z/2)/4)), y + dy, True, 1, hingeThick) + +if __name__ == '__main__': + BoxMakerLivingHinge().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/box_maker_mehr_boxes/box_maker_mehr_boxes.inx b/extensions/fablabchemnitz/box_maker_mehr_boxes/box_maker_mehr_boxes.inx new file mode 100644 index 00000000..f3da275f --- /dev/null +++ b/extensions/fablabchemnitz/box_maker_mehr_boxes/box_maker_mehr_boxes.inx @@ -0,0 +1,74 @@ + + + Box Maker - Mehr Boxes + fablabchemnitz.de.box_maker_mehr_boxes + + + + + + + + + + + + + 100.0 + 100.0 + 100.0 + + + + + + 4.0 + 3 + 3 + 3 + + 4.0 + 0.2 + 1.0 + + + true + true + true + true + true + true + + + + 1 + + + + + + 20.0;40.0 + false + + 1 + + + + + + 20.0;40.0 + false + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/box_maker_mehr_boxes/box_maker_mehr_boxes.py b/extensions/fablabchemnitz/box_maker_mehr_boxes/box_maker_mehr_boxes.py new file mode 100644 index 00000000..04714688 --- /dev/null +++ b/extensions/fablabchemnitz/box_maker_mehr_boxes/box_maker_mehr_boxes.py @@ -0,0 +1,188 @@ +#!/usr/bin/env python3 +''' +Generates Inkscape SVG file containing box components needed to +laser cut a tabbed construction box taking kerf into account + +Copyright (C) 2018 Thore Mehr thore.mehr@gmail.com +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +''' +__version__ = "1.0" ### please report bugs, suggestions etc to bugs@twot.eu ### + +import math +import inkex +import mehr_plate + +class mehr_box_maker(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument('--page',default='page_1') + pars.add_argument('--unit',default='mm') + pars.add_argument('--inside') + pars.add_argument('--X_size',type=float,default='0.0') + pars.add_argument('--Y_size',type=float,default='0.0') + pars.add_argument('--Z_size',type=float,default='0.0') + pars.add_argument('--tab_mode',default='number') + pars.add_argument('--tab_size',type=float,default='0.0') + pars.add_argument('--X_tabs',type=int,default='0') + pars.add_argument('--Y_tabs',type=int,default='0') + pars.add_argument('--Z_tabs',type=int,default='0') + pars.add_argument('--d_top',type=inkex.Boolean,default=True) + pars.add_argument('--d_bottom',type=inkex.Boolean,default=True) + pars.add_argument('--d_left',type=inkex.Boolean,default=True) + pars.add_argument('--d_right',type=inkex.Boolean,default=True) + pars.add_argument('--d_front',type=inkex.Boolean,default=True) + pars.add_argument('--d_back',type=inkex.Boolean,default=True) + pars.add_argument('--thickness',type=float,default=4,help='Thickness of Material') + pars.add_argument('--kerf',type=float,default=0.2) + pars.add_argument('--spaceing',type=float,default=1) + pars.add_argument('--X_compartments',type=int,default=1) + pars.add_argument('--X_divisions') + pars.add_argument('--X_mode') + pars.add_argument('--X_fit',type=inkex.Boolean) + pars.add_argument('--Y_compartments',type=int,default=1) + pars.add_argument('--Y_divisions') + pars.add_argument('--Y_mode') + pars.add_argument('--Y_fit',type=inkex.Boolean) + + def effect(self): + thickness=self.svg.unittouu(str(self.options.thickness)+self.options.unit) + kerf=self.svg.unittouu(str(self.options.kerf)+self.options.unit)/2#kerf is diameter in UI and radius in lib + + spaceing=self.svg.unittouu(str(self.options.spaceing)+self.options.unit) + XYZ=[self.svg.unittouu(str(self.options.X_size)+self.options.unit),self.svg.unittouu(str(self.options.Y_size)+self.options.unit),self.svg.unittouu(str(self.options.Z_size)+self.options.unit)] + + if(self.options.inside=='0'):#if the sizes are outside sizes reduce the size by thickness if the side gets drawn + draw=(self.options.d_left,self.options.d_front,self.options.d_top,self.options.d_right,self.options.d_back,self.options.d_bottom)#order in XYZXYZ + for i in range(6): + XYZ[i%3]-=(thickness if draw[i] else 0)#remove a thickness if drawn + +#compartments on the X axis, devisons in Y direction + X_divisions_distances=[] + if (self.options.X_compartments>1): + if (self.options.X_mode=='even'):#spliting in even compartments + X_divisions_distances=[((XYZ[0])-(self.options.X_compartments-1)*(thickness))/self.options.X_compartments] + else: + for dist in self.options.X_divisions.replace(",",".").split(";"):#fixing seperator, spliting string + X_divisions_distances+=[float(self.svg.unittouu(dist+self.options.unit))]#translate into universal units + X_divisions_distances[0]+=kerf#fixing for kerf + if self.options.X_mode!='absolut':#for even and relative fix list lenght and offset compartments to absolut distances + while (len(X_divisions_distances)XYZ[0])and not self.options.X_fit: + inkex.errormsg("X Axis compartments outside of plate") + if self.options.X_fit: + XYZ[0]=X_divisions_distances[-1]-kerf + X_divisions_distances=X_divisions_distances[0:-1]#cutting the last of + + Y_divisions_distances=[] + if (self.options.Y_compartments>1): + if (self.options.Y_mode=='even'):#spliting in even compartments + Y_divisions_distances=[((XYZ[1])-(self.options.Y_compartments-1)*(thickness))/self.options.Y_compartments] + else: + for dist in self.options.Y_divisions.replace(",",".").split(";"):#fixing seperator, spliting string + Y_divisions_distances+=[float(self.svg.unittouu(dist+self.options.unit))]#translate into universal units + Y_divisions_distances[0]+=kerf#fixing for kerf + if self.options.Y_mode!='absolut':#for even and relative fix list lenght and offset compartments to absolut distances + while (len(Y_divisions_distances)XYZ[1])and not self.options.X_fit: + inkex.errormsg("Y Axis compartments outside of plate") + if self.options.Y_fit: + XYZ[1]=Y_divisions_distances[-1]-kerf + Y_divisions_distances=Y_divisions_distances[0:-1]#cutting the last of + + if (self.options.tab_mode=='number'):#fixed number of tabs + Tabs_XYZ=[self.options.X_tabs,self.options.Y_tabs,self.options.Z_tabs] + else:#compute apropriate number of tabs for the edges + tab_size=float(self.svg.unittouu(str(self.options.tab_size)+self.options.unit)) + Tabs_XYZ=[max(1,int(XYZ[0]/(tab_size))/2),max(1,int(XYZ[1]/(tab_size))/2),max(1,int(XYZ[2]/(tab_size))/2)] + +#top and bottom plate + tabs_tb=(Tabs_XYZ[0] if self.options.d_back else 0,Tabs_XYZ[1] if self.options.d_right else 0,Tabs_XYZ[0] if self.options.d_front else 0,Tabs_XYZ[1] if self.options.d_left else 0) + start_tb=(True if self.options.d_back else False,True if self.options.d_right else False,True if self.options.d_front else False,True if self.options.d_left else False) + Plate_tb=mehr_plate.Mehr_plate((XYZ[0],XYZ[1]),tabs_tb,start_tb,thickness,kerf)#top and bottom plate + for d in X_divisions_distances: + Plate_tb.add_holes('Y',d,Tabs_XYZ[1]) + for d in Y_divisions_distances: + Plate_tb.add_holes('X',d,Tabs_XYZ[0]) +#left and right plate + tabs_lr=(Tabs_XYZ[2] if self.options.d_back else 0,Tabs_XYZ[1] if self.options.d_top else 0,Tabs_XYZ[2] if self.options.d_front else 0,Tabs_XYZ[1] if self.options.d_bottom else 0) + start_lr=(True if self.options.d_back else False,False,True if self.options.d_front else False,False) + Plate_lr=mehr_plate.Mehr_plate((XYZ[2],XYZ[1]),tabs_lr,start_lr,thickness,kerf)#left and right plate + for d in Y_divisions_distances: + Plate_lr.add_holes('X',d,Tabs_XYZ[2]) +#front and back plate + tabs_fb=(Tabs_XYZ[0] if self.options.d_top else 0,Tabs_XYZ[2] if self.options.d_right else 0,Tabs_XYZ[0] if self.options.d_bottom else 0,Tabs_XYZ[2] if self.options.d_left else 0)# + start_fb=(False,False,False,False) + Plate_fb=mehr_plate.Mehr_plate((XYZ[0],XYZ[2]),tabs_fb,start_fb,thickness,kerf)#font and back plate + for d in X_divisions_distances: + Plate_fb.add_holes('Y',d,Tabs_XYZ[2]) + + Plate_xc=mehr_plate.Mehr_plate((XYZ[2],XYZ[1]),tabs_lr,(False,False,False,False),thickness,kerf) + for d in Y_divisions_distances: + Plate_xc.holes+=[Plate_xc.rect([0,Plate_xc.corner_offset[1]+d+kerf],[Plate_xc.AABB[0]/2-kerf,thickness-2*kerf])] + + Plate_yc=mehr_plate.Mehr_plate((XYZ[0],XYZ[2]),tabs_fb,(False,False,False,False),thickness,kerf) + for d in X_divisions_distances: + Plate_yc.holes+=[Plate_yc.rect([Plate_yc.corner_offset[0]+d+kerf,0],[thickness-2*kerf,Plate_yc.AABB[1]/2-kerf])] + + + X_offset=0 + Y_offset=0 + if(self.options.d_top): + Plate_tb.draw([X_offset+spaceing,spaceing],["#000000","#ff0000"],self.svg.get_current_layer())#drawing a plate using black for the outline and red for holes + X_offset+=Plate_tb.AABB[0]+spaceing + Y_offset=max(Y_offset,Plate_tb.AABB[1]) + if(self.options.d_bottom): + Plate_tb.draw([X_offset+spaceing,spaceing],["#000000","#ff0000"],self.svg.get_current_layer()) + X_offset+=Plate_tb.AABB[0]+spaceing + Y_offset=max(Y_offset,Plate_tb.AABB[1]) + + if(self.options.d_left): + Plate_lr.draw([X_offset+spaceing,spaceing],["#000000","#ff0000"],self.svg.get_current_layer()) + X_offset+=Plate_lr.AABB[0]+spaceing + Y_offset=max(Y_offset,Plate_lr.AABB[1]) + if(self.options.d_right): + Plate_lr.draw([X_offset+spaceing,spaceing],["#000000","#ff0000"],self.svg.get_current_layer()) + X_offset+=Plate_lr.AABB[0]+spaceing + Y_offset=max(Y_offset,Plate_lr.AABB[1]) + + if(self.options.d_front): + Plate_fb.draw([X_offset+spaceing,spaceing],["#000000","#ff0000"],self.svg.get_current_layer()) + X_offset+=Plate_fb.AABB[0]+spaceing + Y_offset=max(Y_offset,Plate_fb.AABB[1]) + if(self.options.d_back): + Plate_fb.draw([X_offset+spaceing,spaceing],["#000000","#ff0000"],self.svg.get_current_layer()) + X_offset+=Plate_fb.AABB[0]+spaceing + Y_offset=max(Y_offset,Plate_fb.AABB[1]) + X_offset=0 + for i in range(self.options.X_compartments-1): + Plate_xc.draw([X_offset+spaceing,spaceing+Y_offset],["#000000","#ff0000"],self.svg.get_current_layer()) + X_offset+=Plate_xc.AABB[0]+spaceing + X_offset=0 + Y_offset+=spaceing+Plate_xc.AABB[1] + for i in range(self.options.Y_compartments-1): + Plate_yc.draw([X_offset+spaceing,spaceing+Y_offset],["#000000","#ff0000"],self.svg.get_current_layer()) + X_offset+=Plate_yc.AABB[0]+spaceing + +if __name__ == '__main__': + mehr_box_maker().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/box_maker_mehr_boxes/mehr_plate.py b/extensions/fablabchemnitz/box_maker_mehr_boxes/mehr_plate.py new file mode 100644 index 00000000..86adf1bf --- /dev/null +++ b/extensions/fablabchemnitz/box_maker_mehr_boxes/mehr_plate.py @@ -0,0 +1,92 @@ +#!/usr/bin/env python3 +__version__ = "1.0" +import inkex, math +from lxml import etree + +class Mehr_plate(): + def __init__(self,size,tabs,starts,thickness,kerf): + #general note svg pos x is right, pos y is down + self.size=size#(X,Y) inner size + self.tabs=tabs#number of tabs (top,right,bottom,left) + self.starts=starts#4 elements array of boolean if true start=high (top,right,bottom,left) + self.kerf=kerf#number, beam radius + self.thickness=thickness#number + self.holes=[]#list of SVG Strings + self.offset=[0.0 if self.starts[3] or self.tabs[3]==0 else self.thickness,0.0 if self.starts[0] or self.tabs[0]==0 else self.thickness]#set global offset so that AABB is at position (0,0) + self.corner_offset=[0.0 if (self.tabs[3]==0 and not self.starts[3]) else self.thickness,0.0 if (self.tabs[0]==0 and not self.starts[0]) else self.thickness] + self.AABB=[self.size[0]+(0.0 if (self.tabs[1]==0 and not self.starts[1]) else self.thickness)+self.corner_offset[0]+2*self.kerf, + self.size[1]+(0.0 if (self.tabs[2]==0 and not self.starts[2]) else self.thickness)+self.corner_offset[1]+2*self.kerf] + + points=[] + for i in range(4): + points+=self.rotate(self.side(i),i*math.pi/2)#creating the points of the four sides and rotate them in the radiant system + self.SVG_String=self.to_SVG_String(points) + #self.AABB=[self.size[0]+2*self.thickness,0] + + def side(self,index): #creating a side as a list of relative points. total lenght should be side lenght+2*kerf. + points=[[2*self.kerf,0.0]] if not self.starts[index] else [] #if this one starts low add two kerf + if (self.starts[(index-1)%4]):#if the privious one ended high add a thickness + points+=[[self.thickness,0.0]] + if self.tabs[index]>0: + parts=self.tabs[index]*2+1#number of parts= number of tabs+number of spaces between tabs +1 + tab_state=self.starts[index]#makes a high part if true, low else + for i in range(parts):#creates the side + points+=[[(self.size[(index%2)]/parts)+2*self.kerf,0.0]] if (tab_state) else [[(self.size[index%2]/parts)-2*self.kerf,0.0]]#a longer part for tabs and a shorter one for the spaces in between + if not (i==parts-1): + points+=[[0.0,self.thickness]] if (tab_state) else [[0.0,-self.thickness]]# if high go down else go up + tab_state=not tab_state #invert tab_state + else: + points+=[[self.size[index%2]+2*self.kerf,0.0]] if (self.starts[index]) else [[self.size[index%2]-2*self.kerf,0.0]]#single line if there are no tabs + if(self.starts[(index+1)%len(self.starts)]):#if the next one starts high add a thickness + points+=[[self.thickness,0.0]] + if not self.starts[index]:#if this one starts and so also ends low add 2 kerf + points+=[[2*self.kerf,0.0]] + return points + + def to_SVG_String(self,PointList):#creates a SVG_String as connected points from list so that AABB upper left corner is at 0,0 + s="M"+str(self.offset[0])+','+str(self.offset[1]) + for i in range(len(PointList)): + s+="l"+str(PointList[i][0])+","+str(PointList[i][1]) + return s + + def rotate(self,pointlist,angle):#rotate all points by angle in 2*pi system + matrix=[[math.cos(angle),-math.sin(angle)],[math.sin(angle),math.cos(angle)]] + ret=[] + for i in range(len(pointlist)): + ret+=[[pointlist[i][0]*matrix[0][0]+pointlist[i][1]*matrix[0][1],pointlist[i][0]*matrix[1][0]+pointlist[i][1]*matrix[1][1]]] + return ret + + def rect(self,pos,size,center=[False,False]):#SVG_String for a rectangle + SVG_String="M"+str(pos[0]-((size[0]/2)if center[0]else 0))+','+str(pos[1]-((size[1]/2)if center[1]else 0)) + SVG_String+='h'+str(size[0])+'v'+str(size[1])+'h'+str(-size[0])+'z' + return SVG_String + + def add_holes(self,direction,position,number_of,center=False): + SVG_String="" + side=self.size[0] if direction=='X' else self.size[1]#geting size of the relevant side + hole_offset=(side/(2*number_of+1))#offset each hole + holesize=[hole_offset-2*self.kerf,self.thickness-2*self.kerf]#size of the holes + for i in range(number_of):#d=(2*i+1)*hole_offset+self.kerf + if direction=='X': + SVG_String+=self.rect([self.corner_offset[0]+self.kerf+(2*i+1)*hole_offset+self.kerf,self.corner_offset[1]+self.kerf+position],holesize,[False,center]) + else: + SVG_String+=self.rect([self.corner_offset[0]+self.kerf+position,(2*i+1)*hole_offset+self.kerf+self.corner_offset[1]+self.kerf],holesize[::-1],[center,False])#reversed axis +# inkex.errormsg(SVG_String) + self.holes+=[SVG_String] + + def draw(self,position,colors,parent): + if len(self.holes)>0:#creating a new group if there are any holes to be drawn + grp_name = 'Group' + grp_attribs = {inkex.addNS('label','inkscape'):grp_name} + parent = etree.SubElement(parent, 'g', grp_attribs)#the group to put everything in + for s in self.holes: + self.draw_SVG_String(s,colors[1],parent,position)#drawing the holes if there are any + self.draw_SVG_String(self.SVG_String,colors[0],parent,position)#drawing the plate + + def draw_SVG_String(self,SVG_String,color,parent,position=(0,0)):# Adding an SVG_String to the drawing + name='part' + transform='translate('+str(position[0])+','+str(position[1])+')' + style = { 'stroke': color, 'fill': 'none','stroke-width':str(max(self.kerf*2,0.2))} + drw = {'style':str(inkex.Style(style)),'transform':transform, inkex.addNS('label','inkscape'):name,'d':SVG_String} + etree.SubElement(parent, inkex.addNS('path','svg'), drw ) + return \ No newline at end of file diff --git a/extensions/fablabchemnitz/box_maker_path_to_flex/.gitignore b/extensions/fablabchemnitz/box_maker_path_to_flex/.gitignore new file mode 100644 index 00000000..e394608d --- /dev/null +++ b/extensions/fablabchemnitz/box_maker_path_to_flex/.gitignore @@ -0,0 +1 @@ +/DebugPath2Flex.txt diff --git a/extensions/fablabchemnitz/box_maker_path_to_flex/box_maker_path_to_flex.inx b/extensions/fablabchemnitz/box_maker_path_to_flex/box_maker_path_to_flex.inx new file mode 100644 index 00000000..7f2acae2 --- /dev/null +++ b/extensions/fablabchemnitz/box_maker_path_to_flex/box_maker_path_to_flex.inx @@ -0,0 +1,33 @@ + + + Box Maker - Path To Flex + fablabchemnitz.de.box_maker_path_to_flex + + + + + + + + + + + + + 3.0 + 50.0 + 2 + 1000.0 + true + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/box_maker_path_to_flex/box_maker_path_to_flex.py b/extensions/fablabchemnitz/box_maker_path_to_flex/box_maker_path_to_flex.py new file mode 100644 index 00000000..50e1ea8a --- /dev/null +++ b/extensions/fablabchemnitz/box_maker_path_to_flex/box_maker_path_to_flex.py @@ -0,0 +1,1354 @@ +#!/usr/bin/env python3 + + +# paths2flex.py + +# This is an Inkscape extension to generate boxes with sides as flex which follow a path selected in inkscape +# The Inkscape objects must first be converted to paths (Path > Object to Path). +# Some paths may not work well -- if the curves are too small for example. + +# Written by Thierry Houdoin (thierry@fablab-lannion.org), december 2018 +# This work is largely inspred from path2openSCAD.py, written by Daniel C. Newman + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +import math +import os.path +import inkex +import re +from lxml import etree +from inkex import bezier +from inkex.paths import Path, CubicSuperPath + +DEFAULT_WIDTH = 100 +DEFAULT_HEIGHT = 100 + +objStyle = str(inkex.Style( + {'stroke': '#000000', + 'stroke-width': 0.1, + 'fill': 'none' + })) + +objStyleStart = str(inkex.Style( + {'stroke': '#FF0000', + 'stroke-width': 0.1, + 'fill': 'none' + })) + + +class inkcape_draw_cartesian: + def __init__(self, Offset, group): + self.offsetX = Offset[0] + self.offsetY = Offset[1] + self.Path = '' + self.group = group + + def MoveTo(self, x, y): + #Retourne chaine de caractères donnant la position du point avec des coordonnées cartesiennes + self.Path += ' M ' + str(round(x-self.offsetX, 3)) + ',' + str(round(y-self.offsetY, 3)) + + def LineTo(self, x, y): + #Retourne chaine de caractères donnant la position du point avec des coordonnées cartesiennes + self.Path += ' L ' + str(round(x-self.offsetX, 3)) + ',' + str(round(y-self.offsetY, 3)) + + def Line(self, x1, y1, x2, y2): + #Retourne chaine de caractères donnant la position du point avec des coordonnées cartesiennes + self.Path += ' M ' + str(round(x1-self.offsetX, 3)) + ',' + str(round(y1-self.offsetY, 3)) + ' L ' + str(round(x2-self.offsetX, 3)) + ',' + str(round(y2-self.offsetY, 3)) + + def GenPath(self): + line_attribs = {'style': objStyle, 'd': self.Path} + etree.SubElement(self.group, inkex.addNS('path', 'svg'), line_attribs) + + def GenPathStart(self): + line_attribs = {'style': objStyleStart, 'd': self.Path} + etree.SubElement(self.group, inkex.addNS('path', 'svg'), line_attribs) + + +class Line: + def __init__(self, a, b, c): + self.a = a + self.b = b + self.c = c + def __str__(self): + return "Line a="+str(self.a)+" b="+str(self.b)+" c="+str(self.c) + + def Intersect(self, Line2): + ''' Return the point which is at the intersection between the two lines + ''' + det = Line2.a * self.b - self.a*Line2.b; + if abs(det) < 1e-6: # Line are parallel, return None + return None + return ((Line2.b*self.c - Line2.c*self.b)/det, (self.a*Line2.c - Line2.a*self.c)/det) + + def square_line_distance(self, pt): + ''' + Compute the distance between point and line + Distance between point and line is (a * pt.x + b * pt.y + c)*(a * pt.x + b * pt.y + c)/(a*a + b*b) + ''' + return (self.a * pt[0] + self.b * pt[1] + self.c)*(self.a * pt[0]+ self.b * pt[1] + self.c)/(self.a*self.a + self.b*self.b) + +class Segment(Line): + def __init__(self, A, B): + self.xA = A[0] + self.xB = B[0] + self.yA = A[1] + self.yB = B[1] + self.xm = min(self.xA, self.xB) + self.xM = max(self.xA, self.xB) + self.ym = min(self.yA, self.yB) + self.yM = max(self.yA, self.yB) + Line.__init__(self, A[1] - B[1], B[0] - A[0], A[0] * B[1] - B[0] * A[1]) + + def __str__(self): + return "Segment "+str([A,B])+ " a="+str(self.a)+" b="+str(self.b)+" c="+str(self.c) + + def InSegment(self, Pt): + if Pt[0] < self.xm or Pt[0] > self.xM: + return 0 # Impossible lower than xmin or greater than xMax + if Pt[1] < self.ym or Pt[1] > self.yM: + return 0 # Impossible lower than ymin or greater than yMax + return 1 + + def __str__(self): + return "Seg"+str([(self.xA, self.yA), (self.xB, self.yB)])+" Line a="+str(self.a)+" b="+str(self.b)+" c="+str(self.c) + +def pointInBBox(pt, bbox): + + ''' + Determine if the point pt=[x, y] lies on or within the bounding + box bbox=[xmin, xmax, ymin, ymax]. + ''' + + # if (x < xmin) or (x > xmax) or (y < ymin) or (y > ymax) + if (pt[0] < bbox[0]) or (pt[0] > bbox[1]) or \ + (pt[1] < bbox[2]) or (pt[1] > bbox[3]): + return False + else: + return True + +def bboxInBBox(bbox1, bbox2): + + ''' + Determine if the bounding box bbox1 lies on or within the + bounding box bbox2. NOTE: we do not test for strict enclosure. + + Structure of the bounding boxes is + + bbox1 = [ xmin1, xmax1, ymin1, ymax1 ] + bbox2 = [ xmin2, xmax2, ymin2, ymax2 ] + ''' + + # if (xmin1 < xmin2) or (xmax1 > xmax2) or (ymin1 < ymin2) or (ymax1 > ymax2) + + if (bbox1[0] < bbox2[0]) or (bbox1[1] > bbox2[1]) or \ + (bbox1[2] < bbox2[2]) or (bbox1[3] > bbox2[3]): + return False + else: + return True + +def pointInPoly(p, poly, bbox=None): + + ''' + Use a ray casting algorithm to see if the point p = [x, y] lies within + the polygon poly = [[x1,y1],[x2,y2],...]. Returns True if the point + is within poly, lies on an edge of poly, or is a vertex of poly. + ''' + + if (p is None) or (poly is None): + return False + + # Check to see if the point lies outside the polygon's bounding box + if not bbox is None: + if not pointInBBox(p, bbox): + return False + + # Check to see if the point is a vertex + if p in poly: + return True + + # Handle a boundary case associated with the point + # lying on a horizontal edge of the polygon + x = p[0] + y = p[1] + p1 = poly[0] + p2 = poly[1] + for i in range(len(poly)): + if i != 0: + p1 = poly[i-1] + p2 = poly[i] + if (y == p1[1]) and (p1[1] == p2[1]) and \ + (x > min(p1[0], p2[0])) and (x < max(p1[0], p2[0])): + return True + + n = len(poly) + inside = False + + p1_x,p1_y = poly[0] + for i in range(n + 1): + p2_x,p2_y = poly[i % n] + if y > min(p1_y, p2_y): + if y <= max(p1_y, p2_y): + if x <= max(p1_x, p2_x): + if p1_y != p2_y: + intersect = p1_x + (y - p1_y) * (p2_x - p1_x) / (p2_y - p1_y) + if x <= intersect: + inside = not inside + else: + inside = not inside + p1_x,p1_y = p2_x,p2_y + + return inside + +def polyInPoly(poly1, bbox1, poly2, bbox2): + + ''' + Determine if polygon poly2 = [[x1,y1],[x2,y2],...] + contains polygon poly1. + + The bounding box information, bbox=[xmin, xmax, ymin, ymax] + is optional. When supplied it can be used to perform rejections. + Note that one bounding box containing another is not sufficient + to imply that one polygon contains another. It's necessary, but + not sufficient. + ''' + + # See if poly1's bboundin box is NOT contained by poly2's bounding box + # if it isn't, then poly1 cannot be contained by poly2. + + if (not bbox1 is None) and (not bbox2 is None): + if not bboxInBBox(bbox1, bbox2): + return False + + # To see if poly1 is contained by poly2, we need to ensure that each + # vertex of poly1 lies on or within poly2 + + for p in poly1: + if not pointInPoly(p, poly2, bbox2): + return False + + # Looks like poly1 is contained on or in Poly2 + + return True + +def subdivideCubicPath(sp, flat, i=1): + + ''' + [ Lifted from eggbot.py with impunity ] + + Break up a bezier curve into smaller curves, each of which + is approximately a straight line within a given tolerance + (the "smoothness" defined by [flat]). + + This is a modified version of cspsubdiv.cspsubdiv(): rewritten + because recursion-depth errors on complicated line segments + could occur with cspsubdiv.cspsubdiv(). + ''' + + while True: + while True: + if i >= len(sp): + return + + p0 = sp[i - 1][1] + p1 = sp[i - 1][2] + p2 = sp[i][0] + p3 = sp[i][1] + + b = (p0, p1, p2, p3) + + if bezier.maxdist(b) > flat: + break + + i += 1 + + one, two = bezier.beziersplitatt(b, 0.5) + sp[i - 1][2] = one[1] + sp[i][0] = two[2] + p = [one[2], one[3], two[1]] + sp[i:1] = [p] + +# Second degree equation solver. +# Return a tuple with the two real solutions, raise an error if there is no real solution +def Solve2nd(a, b, c): + delta = b**2 - 4*a*c + if (delta < 0): + print("No real solution") + return none + x1 = (-b + math.sqrt(delta))/(2*a) + x2 = (-b - math.sqrt(delta))/(2*a) + return (x1, x2) + +# Compute distance between two points +def distance2points(x0, y0, x1, y1): + return math.hypot(x0-x1,y0-y1) + +class BoxMakerPathToFlex(inkex.EffectExtension): + + def add_arguments(self, pars): + self.knownUnits = ['in', 'pt', 'px', 'mm', 'cm', 'm', 'km', 'pc', 'yd', 'ft'] + pars.add_argument('--unit', default = 'mm', help = 'Unit, should be one of ') + pars.add_argument('--thickness', type = float, default = '3.0', help = 'Material thickness') + pars.add_argument('--zc', type = float, default = '50.0', help = 'Flex height') + pars.add_argument('--notch_interval', type = int, default = '2', help = 'Interval between notches') + pars.add_argument('--max_size_flex', type = float, default = '1000.0', help = 'Max size of a single band of flex, above this limit it will be cut') + pars.add_argument('--Mode_Debug', type = inkex.Boolean, default = 'false', help = 'Output Debug information in file') + + # Dictionary of paths we will construct. It's keyed by the SVG node + # it came from. Such keying isn't too useful in this specific case, + # but it can be useful in other applications when you actually want + # to go back and update the SVG document + self.paths = {} + + self.flexnotch = [] + # Debug Output file + self.fDebug = None + + # Dictionary of warnings issued. This to prevent from warning + # multiple times about the same problem + self.warnings = {} + + #Get bounding rectangle + self.xmin, self.xmax = (1.0E70, -1.0E70) + self.ymin, self.ymax = (1.0E70, -1.0E70) + self.cx = float(DEFAULT_WIDTH) / 2.0 + self.cy = float(DEFAULT_HEIGHT) / 2.0 + + def unittouu(self, unit): + return inkex.unittouu(unit) + + def DebugMsg(self, s): + if self.fDebug: + self.fDebug.write(s) + + # Generate long vertical lines for flex + # Parameters : StartX, StartY, size, nunmber of lines and +1 if lines goes up and -1 down + def GenLinesFlex(self, StartX, StartY, Size, nLine, UpDown, path): + for i in range(nLine): + path.Line(StartX, StartY, StartX, StartY + UpDown*Size) + self.DebugMsg("GenLinesFlex from "+str((StartX, StartY))+" to "+str((StartX, StartY + UpDown*Size))+'\n') + StartY += UpDown*(Size+2) + + + # Generate the path link to a flex step + # + def generate_step_flex(self, step, size_notch, ShortMark, LongMark, nMark, index): + path = inkcape_draw_cartesian(self.OffsetFlex, self.group) + #External part of the notch, fraction of total notch + notch_useful = 2.0 / (self.notchesInterval + 2) + # First, link towards next step + # Line from ((step+1)*size_notch, 0) to ((step+0.5)*size_notch, 0 + path.Line((step+1)*size_notch, 0, (step+notch_useful)*size_notch, 0) + if self.flexnotch[index] == 0: + ShortMark = 0 + # Then ShortLine from ((step+notch_useful)*size_notch, ShortMark) towards ((step+notch_useful)*size_notch, -Thickness) + path.Line((step+notch_useful)*size_notch, ShortMark,(step+notch_useful)*size_notch, -self.thickness) + # Then notch + path.LineTo(step*size_notch, -self.thickness) + # Then short mark towards other side (step*size_notch, shortmark) + path.LineTo(step*size_notch, ShortMark) + if ShortMark != 0: #Only if there is flex + # Then line towards center + self.GenLinesFlex(step*size_notch, ShortMark + 2, (self.height - 2*ShortMark - 2.0)/(nMark-1) - 2.0, nMark-1, 1, path) + # Then notch + path.Line(step*size_notch, self.height - ShortMark, step*size_notch, self.height + self.thickness) + path.LineTo((step+notch_useful)*size_notch, self.height + self.thickness) + path.LineTo((step+notch_useful)*size_notch, self.height - ShortMark) + if ShortMark != 0: + #Then nMark-1 Lines + self.GenLinesFlex((step+notch_useful)*size_notch, self.height - ShortMark - 2, (self.height - 2*ShortMark - 2.0)/(nMark-1) - 2.0, nMark-1, -1, path) + #Then Long lines internal to notch + self.GenLinesFlex((step+notch_useful/2)*size_notch, 1 - self.thickness, (self.height + 2.0*self.thickness)/nMark - 2, nMark, 1, path) + # link towards next One + path.Line((step+notch_useful)*size_notch, self.height, (step+1)*size_notch, self.height) + if ShortMark != 0: + # notchesInterval *nMark Long lines up to next notch or 2 shorts and nMark-1 long + i = 1 + while i < self.notchesInterval: + pos = (i + 2.0) / (self.notchesInterval + 2.0) + if i % 2 : + #odd draw from bottom to top, nMark lines + self.GenLinesFlex((step+pos)*size_notch, self.height - 1, self.height /nMark - 2.0, nMark, -1, path) + else: + # even draw from top to bottom nMark+1 lines, 2 short and nMark-1 Long + path.Line((step+pos)*size_notch, 3, (step+pos)*size_notch, ShortMark) + self.GenLinesFlex((step+pos)*size_notch, ShortMark + 2, (self.height - 2*ShortMark - 2.0)/(nMark-1) - 2.0, nMark-1, 1, path) + path.Line((step+pos)*size_notch, self.height - ShortMark, (step+pos)*size_notch, self.height - 3) + i += 1 + # Write path to inkscape + path.GenPath() + + def GenerateStartFlex(self, size_notch, ShortMark, LongMark, nMark, index): + ''' + Draw the start pattern + The notch is only 1 mm wide, to enable putting both start and end notch in the same hole in the cover + ''' + path = inkcape_draw_cartesian(self.OffsetFlex, self.group) + #External part of the notch, fraction of total notch + notch_useful = 1.0 / (self.notchesInterval + 2) + notch_in = self.notchesInterval / (self.notchesInterval + 2.0) + # First, link towards next step + # Line from (, 0) to 0, 0 + path.Line(-notch_in*size_notch, 0, 0, 0) + if self.flexnotch[index] == 0: + ShortMark = 0 + # Then ShortLine from (-notch_in*size_notch, ShortMark) towards -notch_in*size_notch, Thickness) + path.Line(-notch_in*size_notch, ShortMark, -notch_in*size_notch, -self.thickness) + # Then notch (beware, only size_notch/4 here) + path.LineTo((notch_useful-1)*size_notch, -self.thickness) + # Then edge, full length + path.LineTo((notch_useful-1)*size_notch, self.height+self.thickness) + # Then notch + path.LineTo(-notch_in*size_notch, self.height + self.thickness) + path.LineTo(-notch_in*size_notch, self.height - ShortMark + 1) + if ShortMark != 0: + #Then nMark - 1 Lines + self.GenLinesFlex(-notch_in*size_notch, self.height - ShortMark - 2, (self.height - 2*ShortMark - 2.0)/(nMark-1) - 2.0, nMark-1, -1, path) + # link towards next One + path.Line(-notch_in*size_notch, self.height, 0, self.height) + if ShortMark != 0: + # notchesInterval *nMark Long lines up to next notch or 2 shorts and nMark-1 long + i = 1 + while i < self.notchesInterval: + pos = (i - self.notchesInterval) / (self.notchesInterval + 2.0) + if i % 2 : + #odd draw from bottom to top, nMark lines + self.GenLinesFlex(pos*size_notch, self.height - 1, self.height /nMark - 2.0, nMark, -1, path) + else: + # even draw from top to bottom nMark+1 lines, 2 short and nMark-1 Long + path.Line(pos*size_notch, 3, pos*size_notch, ShortMark) + self.GenLinesFlex(pos*size_notch, ShortMark + 2, (self.height - 2*ShortMark - 2.0)/(nMark-1) - 2.0, nMark-1, 1, path) + path.Line(pos*size_notch, self.height - ShortMark, pos*size_notch, self.height - 3) + i += 1 + path.GenPath() + + + def GenerateEndFlex(self, step, size_notch, ShortMark, LongMark, nMark, index): + path = inkcape_draw_cartesian(self.OffsetFlex, self.group) + delta_notch = 1.0 / (self.notchesInterval + 2.0) + if self.flexnotch[index] == 0: + ShortMark = 0 + # ShortLine from (step*size_notch, ShortMark) towards step*size_notch, -Thickness) + path.Line(step*size_notch, ShortMark, step*size_notch, -self.thickness) + # Then notch (beware, only 1mm here) + path.LineTo((step+delta_notch)*size_notch, -self.thickness) + # Then edge, full length + path.LineTo((step+delta_notch)*size_notch, self.height+self.thickness) + # Then notch + path.LineTo(step*size_notch, self.height + self.thickness) + path.LineTo(step*size_notch, self.height - ShortMark) + if ShortMark != 0: + #Then nMark - 1 Lines + self.GenLinesFlex(step*size_notch, self.height - ShortMark - 2, (self.height - 2*ShortMark - 2.0)/(nMark-1) - 2.0, nMark-1, -1, path) + path.GenPath() + + + def GenFlex(self, parent, num_notch, size_notch, xOffset, yOffset): + group = etree.SubElement(parent, 'g') + self.group = group + #Compute number of vertical lines. Each long mark should be at most 50mm long to avoid failures + nMark = int(self.height / 50) + 1 + nMark = max(nMark, 2) # At least 2 marks + #Then compute number of flex bands + FlexLength = num_notch * size_notch + nb_flex_band = int (FlexLength // self.max_flex_size) + 1 + notch_per_band = num_notch / nb_flex_band + 1 + self.DebugMsg("Generate flex structure with "+str(nb_flex_band)+" bands, "+str(num_notch)+" notches, offset ="+str((xOffset, yOffset))+'\n') + #Sizes of short and long lines to make flex + LongMark = (self.height / nMark) - 2.0 #Long Mark equally divide the height + ShortMark = LongMark/2 # And short mark should lay at center of long marks + idx_notch = 0 + while num_notch > 0: + self.OffsetFlex = (xOffset, yOffset) + self.GenerateStartFlex(size_notch, ShortMark, LongMark, nMark, idx_notch) + idx_notch += 1 + notch = 0 + if notch_per_band > num_notch: + notch_per_band = num_notch #for the last one + while notch < notch_per_band - 1: + self.generate_step_flex(notch, size_notch, ShortMark, LongMark, nMark, idx_notch) + notch += 1 + idx_notch += 1 + num_notch -= notch_per_band + if num_notch == 0: + self.GenerateEndFlex(notch, size_notch, ShortMark, LongMark, nMark, 0) + else: + self.GenerateEndFlex(notch, size_notch, ShortMark, LongMark, nMark, idx_notch) + xOffset -= size_notch * notch_per_band + 10 + + def getPathVertices(self, path, node=None): + + ''' + Decompose the path data from an SVG element into individual + subpaths, each subpath consisting of absolute move to and line + to coordinates. Place these coordinates into a list of polygon + vertices. + ''' + self.DebugMsg("Entering getPathVertices, len="+str(len(path))+"\n") + if (not path) or (len(path) == 0): + # Nothing to do + return None + + # parsePath() may raise an exception. This is okay + simple_path = Path(path).to_arrays() + if (not simple_path) or (len(simple_path) == 0): + # Path must have been devoid of any real content + return None + self.DebugMsg("After parsePath in getPathVertices, len="+str(len(simple_path))+"\n") + self.DebugMsg(" Path = "+str(simple_path)+'\n') + + # Get a cubic super path + cubic_super_path = CubicSuperPath(simple_path) + if (not cubic_super_path) or (len(cubic_super_path) == 0): + # Probably never happens, but... + return None + self.DebugMsg("After CubicSuperPath in getPathVertices, len="+str(len(cubic_super_path))+"\n") + + + # Now traverse the cubic super path + subpath_list = [] + subpath_vertices = [] + index_sp = 0 + for sp in cubic_super_path: + + # We've started a new subpath + # See if there is a prior subpath and whether we should keep it + self.DebugMsg("Processing SubPath"+str(index_sp)+" SubPath List len="+str(len(subpath_list))+" Vertices list length="+str(len(subpath_vertices)) +"\n") + + if len(subpath_vertices): + subpath_list.append(subpath_vertices) + + subpath_vertices = [] + self.DebugMsg("Before subdivideCubicPath len="+str(len(sp)) +"\n") + self.DebugMsg(" Bsp="+str(sp)+'\n') + subdivideCubicPath(sp, 0.1) + self.DebugMsg("After subdivideCubicPath len="+str(len(sp)) +"\n") + self.DebugMsg(" Asp="+str(sp)+'\n') + + # Note the first point of the subpath + first_point = sp[0][1] + subpath_vertices.append(first_point) + sp_xmin = first_point[0] + sp_xmax = first_point[0] + sp_ymin = first_point[1] + sp_ymax = first_point[1] + + n = len(sp) + + # Traverse each point of the subpath + for csp in sp[1:n]: + + # Append the vertex to our list of vertices + pt = csp[1] + subpath_vertices.append(pt) + #self.DebugMsg("Append subpath_vertice '"+str(pt)+"len="+str(len(subpath_vertices)) +"\n") + + + # Track the bounding box of this subpath + if pt[0] < sp_xmin: + sp_xmin = pt[0] + elif pt[0] > sp_xmax: + sp_xmax = pt[0] + if pt[1] < sp_ymin: + sp_ymin = pt[1] + elif pt[1] > sp_ymax: + sp_ymax = pt[1] + + # Track the bounding box of the overall drawing + # This is used for centering the polygons in OpenSCAD around the (x,y) origin + if sp_xmin < self.xmin: + self.xmin = sp_xmin + if sp_xmax > self.xmax: + self.xmax = sp_xmax + if sp_ymin < self.ymin: + self.ymin = sp_ymin + if sp_ymax > self.ymax: + self.ymax = sp_ymax + + # Handle the final subpath + if len(subpath_vertices): + subpath_list.append(subpath_vertices) + + if len(subpath_list) > 0: + self.paths[node] = subpath_list + + ''' + self.DebugMsg("After getPathVertices\n") + index_i = 0 + for i in self.paths[node]: + index_j = 0 + for j in i: + self.DebugMsg('Path '+str(index_i)+" élément "+str(index_j)+" = "+str(j)+'\n') + index_j += 1 + index_i += 1 + ''' + + def DistanceOnPath(self, p, pt, index): + ''' + Return the distances before and after the point pt on the polygon p + The point pt is in the segment index of p, that is between p[index] and p[index+1] + ''' + i = 0 + before = 0 + after = 0 + while i < index: + # First walk through polygon up to p[index] + before += distance2points(p[i+1][0], p[i+1][1], p[i][0], p[i][1]) + i += 1 + #For the segment index compute the part before and after + before += distance2points(pt[0], pt[1], p[index][0], p[index][1]) + after += distance2points(pt[0], pt[1], p[index+1][0], p[index+1][1]) + i = index + 1 + while i < len(p)-1: + after += distance2points(p[i+1][0], p[i+1][1], p[i][0], p[i][1]) + i += 1 + return (before, after) + + # Compute position of next notch. + # Next notch will be on the path p, and at a distance notch_size from previous point + # Return new index in path p + def compute_next_notch(self, notch_points, p, Angles_p, last_index_in_p, notch_size): + index_notch = len(notch_points) + # Coordinates of last notch + Ox = notch_points[index_notch - 1][0] + Oy = notch_points[index_notch - 1][1] + CurAngle = Angles_p[last_index_in_p-1] + #self.DebugMsg("Enter cnn:last_index_in_p="+str(last_index_in_p)+" CurAngle="+str(round(CurAngle*180/math.pi))+" Segment="+str((p[last_index_in_p-1], p[last_index_in_p]))+" Length="+str(distance2points(p[last_index_in_p-1][0], p[last_index_in_p-1][1], p[last_index_in_p][0], p[last_index_in_p][1]))+"\n") + DeltaAngle = 0 + while last_index_in_p < (len(p) - 1) and distance2points(Ox, Oy, p[last_index_in_p][0], p[last_index_in_p][1]) < notch_size + DeltaAngle*self.thickness/2.0: + Diff_angle = Angles_p[last_index_in_p] - CurAngle + if Diff_angle > math.pi: + Diff_angle -= 2*math.pi + elif Diff_angle < -math.pi: + Diff_angle += 2*math.pi + Diff_angle = abs(Diff_angle) + DeltaAngle += Diff_angle + CurAngle = Angles_p[last_index_in_p] + #self.DebugMsg("cnn:last_index_in_p="+str(last_index_in_p)+" Angle="+str(round(Angles_p[last_index_in_p]*180/math.pi))+" Diff_angle="+str(round(Diff_angle*180/math.pi))+" DeltaAngle="+str(round(DeltaAngle*180/math.pi))+" Distance="+str(distance2points(Ox, Oy, p[last_index_in_p][0], p[last_index_in_p][1]))+"/"+str(notch_size + DeltaAngle*self.thickness/2.0)+"\n") + last_index_in_p += 1 # Go to next point in polygon + + + # Starting point for the line x0, y0 is p[last_index_in_p-1] + x0 = p[last_index_in_p-1][0] + y0 = p[last_index_in_p-1][1] + # End point for the line x1, y1 is p[last_index_in_p] + x1 = p[last_index_in_p][0] + y1 = p[last_index_in_p][1] + + Distance_notch = notch_size + DeltaAngle*self.thickness/2.0 + #self.DebugMsg(" compute_next_notch("+str(index_notch)+") Use Segment="+str(last_index_in_p)+" DeltaAngle="+str(round(DeltaAngle*180/math.pi))+"°, notch_size="+str(notch_size)+" Distance_notch="+str(Distance_notch)+'\n') + + # The actual notch position will be on the line between last_index_in_p-1 and last_index_in_p and at a distance Distance_notch of Ox,Oy + # The intersection of a line and a circle could be computed as a second degree equation in a general case + # Specific case, when segment is vertical + if abs(x1-x0) <0.001: + # easy case, x= x0 so y = sqrt(d2 - x*x) + solx1 = x0 + solx2 = x0 + soly1 = Oy + math.sqrt(Distance_notch**2 - (x0 - Ox)**2) + soly2 = Oy - math.sqrt(Distance_notch**2 - (x0 - Ox)**2) + else: + Slope = (y1 - y0) / (x1 - x0) + # The actual notch position will be on the line between last_index_in_p-1 and last_index_in_p and at a distance notch size of Ox,Oy + # The intersection of a line and a circle could be computed as a second degree equation + # The coefficients of this equation are computed below + a = 1.0 + Slope**2 + b = 2*Slope*y0 - 2*Slope**2*x0 - 2*Ox - 2*Slope*Oy + c = Slope**2*x0**2 + y0**2 -2*Slope*x0*y0 + 2*Slope*x0*Oy - 2*y0*Oy + Ox**2 + Oy**2 - Distance_notch**2 + solx1, solx2 = Solve2nd(a, b, c) + soly1 = y0 + Slope*(solx1-x0) + soly2 = y0 + Slope*(solx2-x0) + # Now keep the point which is between (x0,y0) and (x1, y1) + # The distance between (x1,y1) and the "good" solution will be lower than the distance between (x0,y0) and (x1,y1) + distance1 = distance2points(x1, y1, solx1, soly1) + distance2 = distance2points(x1, y1, solx2, soly2) + if distance1 < distance2: + #Keep solx1 + solx = solx1 + soly = soly1 + else: + #Keep solx2 + solx = solx2 + soly = soly2 + notch_points.append((solx, soly, last_index_in_p-1)) + if abs(distance2points(solx, soly, Ox, Oy) - Distance_notch) > 1: + #Problem + self.DebugMsg("Problem in compute_next_notch: x0,y0 ="+str((x0,y0))+" x1,y1="+str((x1,y1))+'\n') + self.DebugMsg("Len(p)="+str(len(p))+'\n') + self.DebugMsg("Slope="+str(Slope)+'\n') + self.DebugMsg("solx1="+str(solx1)+" soly1="+str(soly1)+" soly1="+str(solx2)+" soly1="+str(soly2)+'\n') + self.DebugMsg(str(index_notch)+": Adding new point ("+str(solx)+","+ str(soly) + "), distance is "+ str(distance2points(solx, soly, Ox, Oy))+ " New index in path :"+str(last_index_in_p)+'\n') + + #self.DebugMsg(str(index_notch)+": Adding new point ("+str(solx)+","+ str(soly) + "), distance is "+ str(distance2points(solx, soly, Ox, Oy))+ " New index in path :"+str(last_index_in_p)+'\n') + return last_index_in_p + + def DrawPoly(self, p, parent): + group = etree.SubElement(parent, 'g') + Newpath = inkcape_draw_cartesian((self.xmin - self.xmax - 10, 0), group) + self.DebugMsg('DrawPoly First element (0) : '+str(p[0])+ ' Call MoveTo('+ str(p[0][0])+','+str(p[0][1])+'\n') + Newpath.MoveTo(p[0][0], p[0][1]) + n = len(p) + index = 1 + for point in p[1:n]: + Newpath.LineTo(point[0], point[1]) + index += 1 + Newpath.GenPath() + + def Simplify(self, poly, max_error): + ''' + Simplify the polygon, remove vertices which are aligned or too close from others + The parameter give the max error, below this threshold, points will be removed + return the simplified polygon, which is modified in place + ''' + #First point + LastIdx = 0 + limit = max_error * max_error #Square because distance will be square ! + i = 1 + while i < len(poly)-1: + #Build segment between Vertex[i-1] and Vertex[i+1] + Seg = Segment(poly[LastIdx], poly[i+1]) + #self.DebugMsg("Pt["+str(i)+"]/"+str(len(poly))+" ="+str(poly[i])+" Segment="+str(Seg)+"\n") + # Compute square of distance between Vertex[i] and Segment + dis_square = Seg.square_line_distance(poly[i]) + if dis_square < max_error: + # Too close, remove this point + poly.pop(i) #and do NOT increment index + #self.DebugMsg("Simplify, removing pt "+str(i)+"="+str(poly[i])+" in Segment : "+str(Seg)+" now "+str(len(poly))+" vertices\n") + else: + LastIdx = i + i += 1 #Increment index + # No need to process last point, it should NOT be modified and stay equal to first one + return poly + + def MakePolyCCW(self, p): + ''' + Take for polygon as input and make it counter clockwise. + If already CCW, just return the polygon, if not reverse it + To determine if polygon is CCW, compute area. If > 0 the polygon is CCW + ''' + area = 0 + for i in range(len(p)-1): + area += p[i][0]*p[i+1][1] - p[i+1][0]*p[i][1] + self.DebugMsg("poly area = "+str(area/2)+"\n") + if area < 0: + # Polygon is cloackwise, reverse + p.reverse() + self.DebugMsg("Polygon was clockwise, reverse it\n") + return p + + def ComputeAngles(self, p): + ''' + Compute a list with angles of all edges of the polygon + Return this list + ''' + angles = [] + for i in range(len(p)-1): + a = math.atan2(p[i+1][1] - p[i][1], p[i+1][0] - p[i][0]) + angles.append(a) + # Last value is not defined as Pt n-1 = Pt 0, set it to angle[0] + angles.append(angles[0]) + return angles + + def writeModifiedPath(self, node, parent): + ''' + Take the paths (polygons) computed from previous step and generate + 1) The input path with notches + 2) The flex structure associated with the path with notches (same length and number of notches) + ''' + path = self.paths[node] + if (path is None) or (len(path) == 0): + return + self.DebugMsg('Enter writeModifiedPath, node='+str(node)+' '+str(len(path))+' paths, global Offset'+str((self.xmin - self.xmax - 10, 0))+'\n') + + # First, if there are several paths, checks if one path is included in the first one. + # If not exchange such as the first one is the bigger one. + # All paths which are not the first one will have notches reverted to be outside the polygon instead of inside the polygon. + # On the finbal paths, these notches will always be inside the form. + if len(path) > 1: + OrderPathModified = True + # Arrange paths such as greater one is first, all others + while OrderPathModified: + OrderPathModified = False + for i in range(1, len(path)): + if polyInPoly(path[i], None, path[0], None): + self.DebugMsg("Path "+str(i)+" is included in path 0\n") + elif polyInPoly(path[0], None, path[i], None): + self.DebugMsg("Path "+str(i)+" contains path 0, exchange\n") + path[0], path[i] = path[i], path[0] + OrderPathModified = True + + index_path = 0 + xFlexOffset = self.xmin - 2*self.xmax - 20 + yFlexOffset = self.height - self.ymax - 10 + for p in path: + self.DebugMsg('Processing Path, '+str(index_path)+" Len(path)="+str(len(p))+'\n') + self.DebugMsg('p='+str(p)+'\n') + reverse_notch = False + if index_path > 0 and polyInPoly(p, None, path[0], None): + reverse_notch = True # For included path, reverse notches + #Simplify path, remove unnecessary vertices + p = self.Simplify(p, 0.1) + self.DebugMsg("---After simplification, path has "+str(len(p))+" vertices\n") + #Ensure that polygon is counter clockwise + p = self.MakePolyCCW(p) + self.DrawPoly(p, parent) + #Now compute path length. Path length is the sum of length of edges + length_path = 0 + n = len(p) + index = 1 + while index < n: + length_path += math.hypot((p[index][0] - p[index-1][0]), (p[index][1] - p[index-1][1])) + index += 1 + + angles = self.ComputeAngles(p) + # compute the sum of angles difference and check that it is 2*pi + SumAngle = 0.0 + for i in range(len(p)-1): + Delta_angle = angles[i+1] - angles[i] + if Delta_angle > math.pi: + Delta_angle -= 2*math.pi + elif Delta_angle < -math.pi: + Delta_angle += 2*math.pi + Delta_angle = abs(Delta_angle) + self.DebugMsg("idx="+str(i)+" Angle1 ="+str(round(angles[i]*180/math.pi,3))+" Angle 2="+str(round(angles[i+1]*180/math.pi,3))+" Delta angle="+str(round(Delta_angle*180/math.pi, 3))+"°\n") + SumAngle += Delta_angle + self.DebugMsg("Sum of angles="+str(SumAngle*180/math.pi)+"°\n") + + # Flex length will be path length - thickness*SumAngle/2 to keep flex aligned on the shortest path + flex_length = length_path - self.thickness*SumAngle/2 + + self.DebugMsg('Path length ='+str(length_path)+" Flex length ="+str(flex_length)+" Difference="+str(length_path-flex_length)+'\n') + + #Default notch size is notchesInterval + 2mm + #Actual notch size will be adjusted to match the length + notch_number = int(round(flex_length / (self.notchesInterval + 2), 0)) + notch_size = flex_length / notch_number + self.DebugMsg('Number of notches ='+str(notch_number)+' ideal notch size =' + str(round(notch_size,3)) +'\n') + + + # Compute position of the points on the path that will become notches + # Starting at 0, each point will be at distance actual_notch_size from the previous one, at least on one side of the notch (the one with the smallest distance) + # On the path (middle line) the actual distance will be notch_size + thickness*delta_angle/2 where delta angle is the difference between the angle at starting point and end point + # As notches are not aligned to vertices, the actual length of the path will be different from the computed one (lower in fact) + # To avoid a last notch too small, we will repeat the process until the size of the last notch is OK (less than .1mm error) + # Use an algorithm which corrects the notch_size by computing previous length of the last notch + + nb_try = 0 + size_last_notch = 0 + oldSize = 0 + BestDifference = 9999999 + BestNotchSize = notch_size + mode_linear = False + delta_notch = -0.01 #In most cases, should reduce notch size + while nb_try < 100: + notch_points = [ (p[0][0], p[0][1], 0) ] # Build a list of tuples with corrdinates (x,y) and offset within polygon which is 0 the the starting point + index = 1 # Notch index + last_index_in_p = 1 # Start at 1, index 0 is the current one + self.DebugMsg("Pass "+str(nb_try)+" First point ("+str(p[0][0])+","+ str(p[0][1]) + ' notch_size='+str(notch_size)+'\n') + while index < notch_number: + #Compute next notch point and append it to the list + last_index_in_p = self.compute_next_notch(notch_points, p, angles, last_index_in_p, notch_size) + #before, after = self.DistanceOnPath(p, notch_points[index], last_index_in_p-1) + #self.DebugMsg(" Notch "+str(index)+" placed in "+str(notch_points[index])+" distance before ="+str(before)+" after="+str(after)+" total="+str(before+after)+'\n') + index += 1 + size_last_notch = distance2points(p[n-1][0], p[n-1][1], notch_points[index-1][0], notch_points[index-1][1]) + self.DebugMsg("Last notch size :"+str(size_last_notch)+'\n') + if abs(notch_size - size_last_notch) < BestDifference: + BestNotchSize = notch_size + BestDifference = abs(notch_size - size_last_notch) + if abs(notch_size - size_last_notch) <= 0.1: + break + # Change size_notch, cut small part in each notch + # The 0.5 factor is used to avoid non convergent series (too short then too long...) + if mode_linear: + if notch_size > size_last_notch and delta_notch > 0: + delta_notch -= delta_notch*0.99 + elif notch_size < size_last_notch and delta_notch < 0: + delta_notch -= delta_notch*0.99 + notch_size += delta_notch + self.DebugMsg("Linear mode, changing delta_notch size :"+str(delta_notch)+" --> notch_size="+str(notch_size)+'\n') + else: + if notch_size > size_last_notch and delta_notch > 0: + delta_notch = -0.5*delta_notch + self.DebugMsg("Changing delta_notch size :"+str(delta_notch)+'\n') + elif notch_size < size_last_notch and delta_notch < 0: + delta_notch = -0.5*delta_notch + self.DebugMsg("Changing delta_notch size :"+str(delta_notch)+'\n') + notch_size += delta_notch + if abs(delta_notch) < 0.002: + mode_linear = True + + # Change size_notch, cut small part in each notch + oldSize = notch_size + # The 0.5 factor is used to avoid non convergent series (too short then too long...) + notch_size -= 0.5*(notch_size - size_last_notch)/notch_number + nb_try += 1 + + if nb_try >= 100: + self.DebugMsg("Algorithm doesn't converge, use best results :"+str(BestNotchSize)+" which gave last notch size difference "+str(BestDifference)+'\n') + notch_size = BestNotchSize + + # Now draw the actual notches + group = etree.SubElement(parent, 'g') + # First draw a start line which will help to position flex. + Startpath = inkcape_draw_cartesian(((self.xmin - self.xmax - 10), 0), group) + index_in_p = notch_points[0][2] + AngleSlope = math.atan2(p[index_in_p+1][1] - p[index_in_p][1], p[index_in_p+1][0] - p[index_in_p][0]) + #Now compute both ends of the notch, + AngleOrtho = AngleSlope + math.pi/2 + Line_Start = (notch_points[0][0] + self.thickness/2*math.cos(AngleOrtho), notch_points[0][1] + self.thickness/2*math.sin(AngleOrtho)) + Line_End = (notch_points[0][0] - self.thickness/2*math.cos(AngleOrtho), notch_points[0][1] - self.thickness/2*math.sin(AngleOrtho)) + self.DebugMsg("Start line Start"+str(Line_Start)+" End("+str(Line_End)+" Start inside "+str(pointInPoly(Line_Start, p))+ " End inside :"+str(pointInPoly(Line_End, p))+'\n') + #Notch End should be inside the path and Notch Start outside... If not reverse + if pointInPoly(Line_Start, p): + Line_Start, Line_End = Line_End, Line_Start + AngleOrtho += math.pi + elif not pointInPoly(Line_End, p): + #Specific case, neither one is in Polygon (Open path ?), take the lowest Y as Line_End + if Line_End[1] > Line_Start[0]: + Line_Start, Line_End = Line_End, Line_Start + AngleOrtho += math.pi + #Now compute a new Start, inside the polygon Start = 3*End - 2*Start + newLine_Start = (3*Line_End[0] - 2*Line_Start[0], 3*Line_End[1] - 2*Line_Start[1]) + Startpath.MoveTo(newLine_Start[0], newLine_Start[1]) + Startpath.LineTo(Line_End[0], Line_End[1]) + self.DebugMsg("Draw StartLine start from "+str((newLine_Start[0], newLine_Start[1]))+" to "+str((Line_End[0], Line_End[1]))+'\n') + Startpath.GenPathStart() + + #Then draw the notches + Newpath = inkcape_draw_cartesian(((self.xmin - self.xmax - 10), 0), group) + self.DebugMsg("Generate path with "+str(notch_number)+" notches, offset ="+str(((self.xmin - self.xmax - 10), 0))+'\n') + isClosed = distance2points(p[n-1][0], p[n-1][1], p[0][0], p[0][1]) < 0.1 + # Each notch is a tuple with (X, Y, index_in_p). index_in_p will be used to compute slope of line of the notch + # The notch will be thickness long, and there will be a part 'inside' the path and a part 'outside' the path + # The longest part will be outside + index = 0 + NX0 = 0 + NX1 = 0 + NX2 = 0 + NX3 = 0 + NY0 = 0 + NY1 = 0 + NY2 = 0 + NY3 = 0 + N_Angle = 0 + Notch_Pos = [] + while index < notch_number: + # Line slope of the path at notch point is + index_in_p = notch_points[index][2] + N_Angle = angles[index_in_p] + AngleSlope = math.atan2(p[index_in_p+1][1] - p[index_in_p][1], p[index_in_p+1][0] - p[index_in_p][0]) + self.DebugMsg("Draw notch "+str(index)+" Slope is "+str(AngleSlope*180/math.pi)+'\n') + self.DebugMsg("Ref="+str(notch_points[index])+'\n') + self.DebugMsg("Path points:"+str((p[index_in_p][0], p[index_in_p][1]))+', '+ str((p[index_in_p+1][0], p[index_in_p+1][1]))+'\n') + #Now compute both ends of the notch, + AngleOrtho = AngleSlope + math.pi/2 + Notch_Start = (notch_points[index][0] + self.thickness/2*math.cos(AngleOrtho), notch_points[index][1] + self.thickness/2*math.sin(AngleOrtho)) + Notch_End = (notch_points[index][0] - self.thickness/2*math.cos(AngleOrtho), notch_points[index][1] - self.thickness/2*math.sin(AngleOrtho)) + self.DebugMsg("Notch "+str(index)+": Start"+str(Notch_Start)+" End("+str(Notch_End)+" Start inside "+str(pointInPoly(Notch_Start, p))+ " End inside :"+str(pointInPoly(Notch_End, p))+'\n') + #Notch End should be inside the path and Notch Start outside... If not reverse + if pointInPoly(Notch_Start, p): + Notch_Start, Notch_End = Notch_End, Notch_Start + AngleOrtho += math.pi + elif not pointInPoly(Notch_End, p): + #Specific case, neither one is in Polygon (Open path ?), take the lowest Y as Notch_End + if Notch_End[1] > Notch_Start[0]: + Notch_Start, Notch_End = Notch_End, Notch_Start + AngleOrtho += math.pi + #if should reverse notches, do it now + if reverse_notch: + Notch_Start, Notch_End = Notch_End, Notch_Start + AngleOrtho += math.pi + if AngleOrtho > 2*math.pi: + AngleOrtho -= 2*math.pi + ln = 2.0 + if index == 0: + Newpath.MoveTo(Notch_Start[0], Notch_Start[1]) + first = (Notch_Start[0], Notch_Start[1]) + if not isClosed: + ln = 1.0 # Actual, different Notch size for the first one when open path + else: + Newpath.LineTo(Notch_Start[0], Notch_Start[1]) + if not isClosed and index == notch_number - 1: + ln = 1.0 + self.DebugMsg("LineTo starting point from :"+str((x,y))+" to "+str((Notch_Start[0], Notch_Start[1]))+" Length ="+str(distance2points(x, y, Notch_Start[0], Notch_Start[1]))+'\n') + Newpath.LineTo(Notch_End[0], Notch_End[1]) + NX0 = Notch_Start[0] + NY0 = Notch_Start[1] + NX1 = Notch_End[0] + NY1 = Notch_End[1] + self.DebugMsg("Draw notch_1 start from "+str((Notch_Start[0], Notch_Start[1]))+" to "+str((Notch_End[0], Notch_End[1]))+'Center is '+str(((Notch_Start[0]+Notch_End[0])/2, (Notch_Start[1]+Notch_End[1])/2))+'\n') + #Now draw a line parallel to the path, which is notch_size*(2/(notchesInterval+2)) long. Internal part of the notch + x = Notch_End[0] + (notch_size*ln)/(self.notchesInterval+ln)*math.cos(AngleSlope) + y = Notch_End[1] + (notch_size*ln)/(self.notchesInterval+ln)*math.sin(AngleSlope) + Newpath.LineTo(x, y) + NX2 = x + NY2 = y + self.DebugMsg("Draw notch_2 to "+str((x, y))+'\n') + #Then a line orthogonal, which is thickness long, reverse from first one + x = x + self.thickness*math.cos(AngleOrtho) + y = y + self.thickness*math.sin(AngleOrtho) + Newpath.LineTo(x, y) + NX3 = x + NY3 = y + self.DebugMsg("Draw notch_3 to "+str((x, y))+'\n') + Notch_Pos.append((NX0, NY0, NX1, NY1, NX2, NY2, NX3, NY3, N_Angle)) + # No need to draw the last segment, it will be drawn when starting the next notch + index += 1 + #And the last one if the path is closed + if isClosed: + self.DebugMsg("Path is closed, draw line to start point "+str((p[0][0], p[0][1]))+'\n') + Newpath.LineTo(first[0], first[1]) + else: + self.DebugMsg("Path is open\n") + Newpath.GenPath() + # Analyze notches for debugging purpose + for i in range(len(Notch_Pos)): + self.DebugMsg("Notch "+str(i)+" Pos="+str(Notch_Pos[i])+" Angle="+str(round(Notch_Pos[i][8]*180/math.pi))+"\n") + if (i > 0): + self.DebugMsg(" FromLast Notch N3-N0="+str(distance2points(Notch_Pos[i-1][6], Notch_Pos[i-1][7], Notch_Pos[i][0], Notch_Pos[i][1]))+"\n") + self.DebugMsg(" Distances: N0-N3="+str(distance2points(Notch_Pos[i][0], Notch_Pos[i][1], Notch_Pos[i][6], Notch_Pos[i][7]))+" N1-N2="+str(distance2points(Notch_Pos[i][2], Notch_Pos[i][3], Notch_Pos[i][4], Notch_Pos[i][5]))+"\n") + # For each notch determine if we need flex or not. Flex is only needed if there is some curves + # So if notch[i]-1 notch[i] notch[i+1] are aligned, no need to generate flex in i-1 and i + for index in range(notch_number): + self.flexnotch.append(1) # By default all notches need flex + index = 1 + while index < notch_number-1: + det = (notch_points[index+1][0]- notch_points[index-1][0])*(notch_points[index][1] - notch_points[index-1][1]) - (notch_points[index+1][1] - notch_points[index-1][1])*(notch_points[index][0] - notch_points[index-1][0]) + self.DebugMsg("Notch "+str(index)+": det="+str(det)) + if abs(det) < 0.1: # My threhold to be adjusted + self.flexnotch[index-1] = 0 # No need for flex for this one and the following + self.flexnotch[index] = 0 + self.DebugMsg(" no flex in notch "+str(index-1)+" and "+str(index)) + index += 1 + self.DebugMsg("\n") + # For the last one try notch_number - 2, notch_number - 1 and 0 + det = (notch_points[0][0]- notch_points[notch_number - 2][0])*(notch_points[notch_number - 1][1] - notch_points[notch_number - 2][1]) - (notch_points[0][1] - notch_points[notch_number - 2][1])*(notch_points[notch_number - 1][0] - notch_points[notch_number - 2][0]) + if abs(det) < 0.1: # My threhold to be adjusted + self.flexnotch[notch_number-2] = 0 # No need for flex for this one and the following + self.flexnotch[notch_number-1] = 0 + # and the first one with notch_number - 1, 0 and 1 + det = (notch_points[1][0]- notch_points[notch_number-1][0])*(notch_points[0][1] - notch_points[notch_number-1][1]) - (notch_points[1][1] - notch_points[notch_number-1][1])*(notch_points[0][0] - notch_points[notch_number-1][0]) + if abs(det) < 0.1: # My threhold to be adjusted + self.flexnotch[notch_number-1] = 0 # No need for flex for this one and the following + self.flexnotch[0] = 0 + self.DebugMsg("FlexNotch ="+str(self.flexnotch)+"\n") + # Generate Associated flex + self.GenFlex(parent, notch_number, notch_size, xFlexOffset, yFlexOffset) + yFlexOffset -= self.height + 10 + index_path += 1 + + + def recursivelyTraverseSvg(self, aNodeList): + + ''' + [ This too is largely lifted from eggbot.py and path2openscad.py ] + + Recursively walk the SVG document, building polygon vertex lists + for each graphical element we support. + + Rendered SVG elements: + , , , , , , + Except for path, all elements are first converted into a path the processed + + Supported SVG elements: + + + Ignored SVG elements: + , , , , , + processing directives + + All other SVG elements trigger an error (including ) + ''' + + for node in aNodeList: + + self.DebugMsg("Node type :" + node.tag + '\n') + if node.tag == inkex.addNS('g', 'svg') or node.tag == 'g': + self.DebugMsg("Group detected, recursive call\n") + self.recursivelyTraverseSvg(node) + + elif node.tag == inkex.addNS('path', 'svg'): + self.DebugMsg("Path detected, ") + path_data = node.get('d') + if path_data: + self.getPathVertices(path_data, node) + else: + self.DebugMsg("NO path data present\n") + + elif node.tag == inkex.addNS('rect', 'svg') or node.tag == 'rect': + + # Create a path with the outline of the rectangle + x = float(node.get('x')) + y = float(node.get('y')) + if (not x) or (not y): + pass + w = float(node.get('width', '0')) + h = float(node.get('height', '0')) + + self.DebugMsg('Rectangle X='+ str(x)+',Y='+str(y)+', W='+str(w)+' H='+str(h)+'\n') + + a = [] + a.append(['M', [x, y]]) + a.append(['l', [w, 0]]) + a.append(['l', [0, h]]) + a.append(['l', [-w, 0]]) + a.append(['Z', []]) + self.getPathVertices(str(Path(a)), node) + elif node.tag == inkex.addNS('line', 'svg') or node.tag == 'line': + + # Convert + # + # + + x1 = float(node.get('x1')) + y1 = float(node.get('y1')) + x2 = float(node.get('x2')) + y2 = float(node.get('y2')) + self.DebugMsg('Line X1='+ str(x1)+',Y1='+str(y1)+', X2='+str(x2)+' Y2='+str(y2)+'\n') + + if (not x1) or (not y1) or (not x2) or (not y2): + pass + a = [] + a.append(['M', [x1, y1]]) + a.append(['L', [x2, y2]]) + self.getPathVertices(str(Path(a)), node) + + elif node.tag == inkex.addNS('polyline', 'svg') or node.tag == 'polyline': + + # Convert + # + # + # + # to + # + # + # + # Note: we ignore polylines with no points + + pl = node.get('points', '').strip() + if pl == '': + pass + + pa = pl.split() + d = "".join(["M " + pa[i] if i == 0 else " L " + pa[i] for i in range(0, len(pa))]) + self.DebugMsg('PolyLine :'+ d +'\n') + + + self.getPathVertices(d, node) + + elif node.tag == inkex.addNS('polygon', 'svg') or node.tag == 'polygon': + + # Convert + # + # + # + # to + # + # + # + # Note: we ignore polygons with no points + + pl = node.get('points', '').strip() + if pl == '': + pass + + pa = pl.split() + d = "".join(["M " + pa[i] if i == 0 else " L " + pa[i] for i in range(0, len(pa))]) + d += " Z" + self.DebugMsg('Polygon :'+ d +'\n') + self.getPathVertices(d, node) + + elif node.tag == inkex.addNS('ellipse', 'svg') or \ + node.tag == 'ellipse' or \ + node.tag == inkex.addNS('circle', 'svg') or \ + node.tag == 'circle': + + # Convert circles and ellipses to a path with two 180 degree arcs. + # In general (an ellipse), we convert + # + # + # + # to + # + # + # + # where + # + # X1 = CX - RX + # X2 = CX + RX + # + # Note: ellipses or circles with a radius attribute of value 0 are ignored + + if node.tag == inkex.addNS('ellipse', 'svg') or node.tag == 'ellipse': + rx = float(node.get('rx', '0')) + ry = float(node.get('ry', '0')) + else: + rx = float(node.get('r', '0')) + ry = rx + if rx == 0 or ry == 0: + pass + + cx = float(node.get('cx', '0')) + cy = float(node.get('cy', '0')) + x1 = cx - rx + x2 = cx + rx + d = 'M %f,%f ' % (x1, cy) + \ + 'A %f,%f ' % (rx, ry) + \ + '0 1 0 %f,%f ' % (x2, cy) + \ + 'A %f,%f ' % (rx, ry) + \ + '0 1 0 %f,%f' % (x1, cy) + self.DebugMsg('Arc :'+ d +'\n') + self.getPathVertices(d, node) + + elif node.tag == inkex.addNS('pattern', 'svg') or node.tag == 'pattern': + + pass + + elif node.tag == inkex.addNS('metadata', 'svg') or node.tag == 'metadata': + + pass + + elif node.tag == inkex.addNS('defs', 'svg') or node.tag == 'defs': + + pass + + elif node.tag == inkex.addNS('desc', 'svg') or node.tag == 'desc': + + pass + + elif node.tag == inkex.addNS('namedview', 'sodipodi') or node.tag == 'namedview': + + pass + + elif node.tag == inkex.addNS('eggbot', 'svg') or node.tag == 'eggbot': + + pass + + elif node.tag == inkex.addNS('text', 'svg') or node.tag == 'text': + + inkex.errormsg('Warning: unable to draw text, please convert it to a path first.') + + pass + + elif node.tag == inkex.addNS('title', 'svg') or node.tag == 'title': + + pass + + elif node.tag == inkex.addNS('image', 'svg') or node.tag == 'image': + + if not self.warnings.has_key('image'): + inkex.errormsg(gettext.gettext('Warning: unable to draw bitmap images; ' + + 'please convert them to line art first. Consider using the "Trace bitmap..." ' + + 'tool of the "Path" menu. Mac users please note that some X11 settings may ' + + 'cause cut-and-paste operations to paste in bitmap copies.')) + self.warnings['image'] = 1 + pass + + elif node.tag == inkex.addNS('pattern', 'svg') or node.tag == 'pattern': + + pass + + elif node.tag == inkex.addNS('radialGradient', 'svg') or node.tag == 'radialGradient': + + # Similar to pattern + pass + + elif node.tag == inkex.addNS('linearGradient', 'svg') or node.tag == 'linearGradient': + + # Similar in pattern + pass + + elif node.tag == inkex.addNS('style', 'svg') or node.tag == 'style': + + # This is a reference to an external style sheet and not the value + # of a style attribute to be inherited by child elements + pass + + elif node.tag == inkex.addNS('cursor', 'svg') or node.tag == 'cursor': + + pass + + elif node.tag == inkex.addNS('color-profile', 'svg') or node.tag == 'color-profile': + + # Gamma curves, color temp, etc. are not relevant to single color output + pass + + elif not isinstance(node.tag, basestring): + + # This is likely an XML processing instruction such as an XML + # comment. lxml uses a function reference for such node tags + # and as such the node tag is likely not a printable string. + # Further, converting it to a printable string likely won't + # be very useful. + + pass + + else: + + inkex.errormsg('Warning: unable to draw object <%s>, please convert it to a path first.' % node.tag) + pass + + + def effect(self): + + # convert units + unit = self.options.unit + self.thickness = self.svg.unittouu(str(self.options.thickness) + unit) + self.height = self.svg.unittouu(str(self.options.zc) + unit) + self.max_flex_size = self.svg.unittouu(str(self.options.max_size_flex) + unit) + self.notchesInterval = int(self.options.notch_interval) + + svg = self.document.getroot() + docWidth = self.svg.unittouu(svg.get('width')) + docHeigh = self.svg.unittouu(svg.attrib['height']) + + # Open Debug file if requested + if self.options.Mode_Debug: + try: + self.fDebug = open('DebugPath2Flex.txt', 'w') + except IOError: + print ('cannot open debug output file') + self.DebugMsg("Start processing\n") + + + # First traverse the document (or selected items), reducing + # everything to line segments. If working on a selection, + # then determine the selection's bounding box in the process. + # (Actually, we just need to know it's extrema on the x-axis.) + + # Traverse the selected objects + for id in self.options.ids: + self.recursivelyTraverseSvg([self.svg.selected[id]]) + # Determine the center of the drawing's bounding box + self.cx = self.xmin + (self.xmax - self.xmin) / 2.0 + self.cy = self.ymin + (self.ymax - self.ymin) / 2.0 + + layer = etree.SubElement(svg, 'g') + layer.set(inkex.addNS('label', 'inkscape'), 'Flex_Path') + layer.set(inkex.addNS('groupmode', 'inkscape'), 'layer') + + # For each path, build a polygon with notches and the corresponding flex. + for key in self.paths: + self.writeModifiedPath(key, layer) + + if self.fDebug: + self.fDebug.close() + +if __name__ == '__main__': + BoxMakerPathToFlex().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/AgricolaInsert-thumb.jpg b/extensions/fablabchemnitz/boxes.py/AgricolaInsert-thumb.jpg new file mode 100644 index 00000000..82a7a99d Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/AgricolaInsert-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/AllEdges-thumb.jpg b/extensions/fablabchemnitz/boxes.py/AllEdges-thumb.jpg new file mode 100644 index 00000000..f9bfaeac Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/AllEdges-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/AngledBox-thumb.jpg b/extensions/fablabchemnitz/boxes.py/AngledBox-thumb.jpg new file mode 100644 index 00000000..f5361ccc Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/AngledBox-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/AngledCutJig-thumb.jpg b/extensions/fablabchemnitz/boxes.py/AngledCutJig-thumb.jpg new file mode 100644 index 00000000..f9bfaeac Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/AngledCutJig-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/Arcade-thumb.jpg b/extensions/fablabchemnitz/boxes.py/Arcade-thumb.jpg new file mode 100644 index 00000000..f9bfaeac Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/Arcade-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/Atreus21-thumb.jpg b/extensions/fablabchemnitz/boxes.py/Atreus21-thumb.jpg new file mode 100644 index 00000000..9bafb984 Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/Atreus21-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/BasedBox-thumb.jpg b/extensions/fablabchemnitz/boxes.py/BasedBox-thumb.jpg new file mode 100644 index 00000000..d6f9fa85 Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/BasedBox-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/BayonetBox-thumb.jpg b/extensions/fablabchemnitz/boxes.py/BayonetBox-thumb.jpg new file mode 100644 index 00000000..f8069025 Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/BayonetBox-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/BinTray-thumb.jpg b/extensions/fablabchemnitz/boxes.py/BinTray-thumb.jpg new file mode 100644 index 00000000..1951afe5 Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/BinTray-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/BottleStack-thumb.jpg b/extensions/fablabchemnitz/boxes.py/BottleStack-thumb.jpg new file mode 100644 index 00000000..f9bfaeac Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/BottleStack-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/BurnTest-thumb.jpg b/extensions/fablabchemnitz/boxes.py/BurnTest-thumb.jpg new file mode 100644 index 00000000..a77d9c28 Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/BurnTest-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/CardBox-detail-thumb.jpg b/extensions/fablabchemnitz/boxes.py/CardBox-detail-thumb.jpg new file mode 100644 index 00000000..41ba16dc Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/CardBox-detail-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/CardBox-thumb.jpg b/extensions/fablabchemnitz/boxes.py/CardBox-thumb.jpg new file mode 100644 index 00000000..6bdf7e63 Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/CardBox-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/Castle-thumb.jpg b/extensions/fablabchemnitz/boxes.py/Castle-thumb.jpg new file mode 100644 index 00000000..7ca2a4d1 Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/Castle-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/ClosedBox-thumb.jpg b/extensions/fablabchemnitz/boxes.py/ClosedBox-thumb.jpg new file mode 100644 index 00000000..d588f6f6 Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/ClosedBox-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/CoffeeCapsuleHolder-thumb.jpg b/extensions/fablabchemnitz/boxes.py/CoffeeCapsuleHolder-thumb.jpg new file mode 100644 index 00000000..53605864 Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/CoffeeCapsuleHolder-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/ConcaveKnob-thumb.jpg b/extensions/fablabchemnitz/boxes.py/ConcaveKnob-thumb.jpg new file mode 100644 index 00000000..f9bfaeac Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/ConcaveKnob-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/Console-thumb.jpg b/extensions/fablabchemnitz/boxes.py/Console-thumb.jpg new file mode 100644 index 00000000..c0351944 Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/Console-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/Console2-backwall-detail-thumb.jpg b/extensions/fablabchemnitz/boxes.py/Console2-backwall-detail-thumb.jpg new file mode 100644 index 00000000..2a1991c0 Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/Console2-backwall-detail-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/Console2-panel-detail-thumb.jpg b/extensions/fablabchemnitz/boxes.py/Console2-panel-detail-thumb.jpg new file mode 100644 index 00000000..be07af74 Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/Console2-panel-detail-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/Console2-thumb.jpg b/extensions/fablabchemnitz/boxes.py/Console2-thumb.jpg new file mode 100644 index 00000000..a0ae7890 Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/Console2-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/DinRailBox-thumb.jpg b/extensions/fablabchemnitz/boxes.py/DinRailBox-thumb.jpg new file mode 100644 index 00000000..f9bfaeac Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/DinRailBox-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/DiscRack-thumb.jpg b/extensions/fablabchemnitz/boxes.py/DiscRack-thumb.jpg new file mode 100644 index 00000000..92fc752f Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/DiscRack-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/Display-thumb.jpg b/extensions/fablabchemnitz/boxes.py/Display-thumb.jpg new file mode 100644 index 00000000..f9bfaeac Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/Display-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/DisplayCase-thumb.jpg b/extensions/fablabchemnitz/boxes.py/DisplayCase-thumb.jpg new file mode 100644 index 00000000..efdb44a8 Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/DisplayCase-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/DisplayShelf-thumb.jpg b/extensions/fablabchemnitz/boxes.py/DisplayShelf-thumb.jpg new file mode 100644 index 00000000..4e736c0c Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/DisplayShelf-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/DividerTray-thumb.jpg b/extensions/fablabchemnitz/boxes.py/DividerTray-thumb.jpg new file mode 100644 index 00000000..4313e3e4 Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/DividerTray-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/DoubleFlexDoorBox-thumb.jpg b/extensions/fablabchemnitz/boxes.py/DoubleFlexDoorBox-thumb.jpg new file mode 100644 index 00000000..f9bfaeac Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/DoubleFlexDoorBox-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/DrillBox-thumb.jpg b/extensions/fablabchemnitz/boxes.py/DrillBox-thumb.jpg new file mode 100644 index 00000000..f9bfaeac Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/DrillBox-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/DrillStand-thumb.jpg b/extensions/fablabchemnitz/boxes.py/DrillStand-thumb.jpg new file mode 100644 index 00000000..f9bfaeac Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/DrillStand-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/ElectronicsBox-thumb.jpg b/extensions/fablabchemnitz/boxes.py/ElectronicsBox-thumb.jpg new file mode 100644 index 00000000..7e6bceee Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/ElectronicsBox-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/EuroRackSkiff-thumb.jpg b/extensions/fablabchemnitz/boxes.py/EuroRackSkiff-thumb.jpg new file mode 100644 index 00000000..e14e88db Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/EuroRackSkiff-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/FanHole-thumb.jpg b/extensions/fablabchemnitz/boxes.py/FanHole-thumb.jpg new file mode 100644 index 00000000..f9bfaeac Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/FanHole-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/FlexBox-thumb.jpg b/extensions/fablabchemnitz/boxes.py/FlexBox-thumb.jpg new file mode 100644 index 00000000..92cb58b0 Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/FlexBox-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/FlexBox2-thumb.jpg b/extensions/fablabchemnitz/boxes.py/FlexBox2-thumb.jpg new file mode 100644 index 00000000..70037b54 Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/FlexBox2-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/FlexBox3-thumb.jpg b/extensions/fablabchemnitz/boxes.py/FlexBox3-thumb.jpg new file mode 100644 index 00000000..11ec688b Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/FlexBox3-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/FlexBox4-thumb.jpg b/extensions/fablabchemnitz/boxes.py/FlexBox4-thumb.jpg new file mode 100644 index 00000000..1b4a037a Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/FlexBox4-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/FlexBox5-thumb.jpg b/extensions/fablabchemnitz/boxes.py/FlexBox5-thumb.jpg new file mode 100644 index 00000000..f9bfaeac Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/FlexBox5-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/FlexTest-thumb.jpg b/extensions/fablabchemnitz/boxes.py/FlexTest-thumb.jpg new file mode 100644 index 00000000..20079fd8 Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/FlexTest-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/FlexTest2-thumb.jpg b/extensions/fablabchemnitz/boxes.py/FlexTest2-thumb.jpg new file mode 100644 index 00000000..f9bfaeac Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/FlexTest2-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/Folder-2-thumb.jpg b/extensions/fablabchemnitz/boxes.py/Folder-2-thumb.jpg new file mode 100644 index 00000000..eb534125 Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/Folder-2-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/Folder-thumb.jpg b/extensions/fablabchemnitz/boxes.py/Folder-thumb.jpg new file mode 100644 index 00000000..09790f14 Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/Folder-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/GearBox-thumb.jpg b/extensions/fablabchemnitz/boxes.py/GearBox-thumb.jpg new file mode 100644 index 00000000..f9bfaeac Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/GearBox-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/Gears-thumb.jpg b/extensions/fablabchemnitz/boxes.py/Gears-thumb.jpg new file mode 100644 index 00000000..f9bfaeac Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/Gears-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/HeartBox-thumb.jpg b/extensions/fablabchemnitz/boxes.py/HeartBox-thumb.jpg new file mode 100644 index 00000000..38921392 Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/HeartBox-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/HexHoles-thumb.jpg b/extensions/fablabchemnitz/boxes.py/HexHoles-thumb.jpg new file mode 100644 index 00000000..f9bfaeac Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/HexHoles-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/HingeBox-thumb.jpg b/extensions/fablabchemnitz/boxes.py/HingeBox-thumb.jpg new file mode 100644 index 00000000..5367d10c Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/HingeBox-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/Hook-thumb.jpg b/extensions/fablabchemnitz/boxes.py/Hook-thumb.jpg new file mode 100644 index 00000000..f9bfaeac Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/Hook-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/IntegratedHingeBox-thumb.jpg b/extensions/fablabchemnitz/boxes.py/IntegratedHingeBox-thumb.jpg new file mode 100644 index 00000000..0a6ac527 Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/IntegratedHingeBox-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/Keypad-thumb.jpg b/extensions/fablabchemnitz/boxes.py/Keypad-thumb.jpg new file mode 100644 index 00000000..bf0596a6 Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/Keypad-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/LBeam-thumb.jpg b/extensions/fablabchemnitz/boxes.py/LBeam-thumb.jpg new file mode 100644 index 00000000..cf839292 Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/LBeam-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/LaserClamp-thumb.jpg b/extensions/fablabchemnitz/boxes.py/LaserClamp-thumb.jpg new file mode 100644 index 00000000..f9bfaeac Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/LaserClamp-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/LaserHoldfast-thumb.jpg b/extensions/fablabchemnitz/boxes.py/LaserHoldfast-thumb.jpg new file mode 100644 index 00000000..445b9c8b Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/LaserHoldfast-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/MagazinFile-thumb.jpg b/extensions/fablabchemnitz/boxes.py/MagazinFile-thumb.jpg new file mode 100644 index 00000000..f9bfaeac Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/MagazinFile-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/MakitaPowerSupply-thumb.jpg b/extensions/fablabchemnitz/boxes.py/MakitaPowerSupply-thumb.jpg new file mode 100644 index 00000000..d99acb73 Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/MakitaPowerSupply-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/March36539-box-thumb.jpg b/extensions/fablabchemnitz/boxes.py/March36539-box-thumb.jpg new file mode 100644 index 00000000..e5ff2bf9 Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/March36539-box-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/NemaMount-thumb.jpg b/extensions/fablabchemnitz/boxes.py/NemaMount-thumb.jpg new file mode 100644 index 00000000..f9bfaeac Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/NemaMount-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/NemaPattern-thumb.jpg b/extensions/fablabchemnitz/boxes.py/NemaPattern-thumb.jpg new file mode 100644 index 00000000..f9bfaeac Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/NemaPattern-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/NotesHolder-thumb.jpg b/extensions/fablabchemnitz/boxes.py/NotesHolder-thumb.jpg new file mode 100644 index 00000000..7e5d6d98 Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/NotesHolder-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/OpenBox-thumb.jpg b/extensions/fablabchemnitz/boxes.py/OpenBox-thumb.jpg new file mode 100644 index 00000000..ce4201b5 Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/OpenBox-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/OrganPipe-thumb.jpg b/extensions/fablabchemnitz/boxes.py/OrganPipe-thumb.jpg new file mode 100644 index 00000000..f9bfaeac Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/OrganPipe-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/OttoBody-thumb.jpg b/extensions/fablabchemnitz/boxes.py/OttoBody-thumb.jpg new file mode 100644 index 00000000..b05743c9 Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/OttoBody-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/OttoLegs-thumb.jpg b/extensions/fablabchemnitz/boxes.py/OttoLegs-thumb.jpg new file mode 100644 index 00000000..f9bfaeac Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/OttoLegs-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/OttoSoles-thumb.jpg b/extensions/fablabchemnitz/boxes.py/OttoSoles-thumb.jpg new file mode 100644 index 00000000..f9bfaeac Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/OttoSoles-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/PaintStorage-thumb.jpg b/extensions/fablabchemnitz/boxes.py/PaintStorage-thumb.jpg new file mode 100644 index 00000000..3b854c22 Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/PaintStorage-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/PaperBox-thumb.jpg b/extensions/fablabchemnitz/boxes.py/PaperBox-thumb.jpg new file mode 100644 index 00000000..756db16d Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/PaperBox-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/PhoneHolder-thumb.jpg b/extensions/fablabchemnitz/boxes.py/PhoneHolder-thumb.jpg new file mode 100644 index 00000000..31aa83b2 Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/PhoneHolder-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/Planetary-thumb.jpg b/extensions/fablabchemnitz/boxes.py/Planetary-thumb.jpg new file mode 100644 index 00000000..f9bfaeac Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/Planetary-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/Planetary2-thumb.jpg b/extensions/fablabchemnitz/boxes.py/Planetary2-thumb.jpg new file mode 100644 index 00000000..f9bfaeac Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/Planetary2-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/Platonic-thumb.jpg b/extensions/fablabchemnitz/boxes.py/Platonic-thumb.jpg new file mode 100644 index 00000000..1dd04e92 Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/Platonic-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/PoleHook-thumb.jpg b/extensions/fablabchemnitz/boxes.py/PoleHook-thumb.jpg new file mode 100644 index 00000000..f9bfaeac Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/PoleHook-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/Pulley-thumb.jpg b/extensions/fablabchemnitz/boxes.py/Pulley-thumb.jpg new file mode 100644 index 00000000..f9bfaeac Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/Pulley-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/Rack10Box-thumb.jpg b/extensions/fablabchemnitz/boxes.py/Rack10Box-thumb.jpg new file mode 100644 index 00000000..f9bfaeac Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/Rack10Box-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/Rack19Box-thumb.jpg b/extensions/fablabchemnitz/boxes.py/Rack19Box-thumb.jpg new file mode 100644 index 00000000..f9bfaeac Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/Rack19Box-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/Rack19HalfWidth-thumb.jpg b/extensions/fablabchemnitz/boxes.py/Rack19HalfWidth-thumb.jpg new file mode 100644 index 00000000..f9bfaeac Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/Rack19HalfWidth-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/RackBox-thumb.jpg b/extensions/fablabchemnitz/boxes.py/RackBox-thumb.jpg new file mode 100644 index 00000000..f9bfaeac Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/RackBox-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/RectangularWall-thumb.jpg b/extensions/fablabchemnitz/boxes.py/RectangularWall-thumb.jpg new file mode 100644 index 00000000..f9bfaeac Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/RectangularWall-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/RegularBox-thumb.jpg b/extensions/fablabchemnitz/boxes.py/RegularBox-thumb.jpg new file mode 100644 index 00000000..c2a0e37a Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/RegularBox-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/RobotArm-thumb.jpg b/extensions/fablabchemnitz/boxes.py/RobotArm-thumb.jpg new file mode 100644 index 00000000..ceebc8e0 Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/RobotArm-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/Rotary-thumb.jpg b/extensions/fablabchemnitz/boxes.py/Rotary-thumb.jpg new file mode 100644 index 00000000..ac99079d Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/Rotary-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/RoundedBox-thumb.jpg b/extensions/fablabchemnitz/boxes.py/RoundedBox-thumb.jpg new file mode 100644 index 00000000..471b1676 Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/RoundedBox-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/RoyalGame-thumb.jpg b/extensions/fablabchemnitz/boxes.py/RoyalGame-thumb.jpg new file mode 100644 index 00000000..f9bfaeac Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/RoyalGame-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/SBCMicroRack-thumb.jpg b/extensions/fablabchemnitz/boxes.py/SBCMicroRack-thumb.jpg new file mode 100644 index 00000000..b3a6849d Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/SBCMicroRack-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/ShutterBox-thumb.jpg b/extensions/fablabchemnitz/boxes.py/ShutterBox-thumb.jpg new file mode 100644 index 00000000..d2ecab01 Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/ShutterBox-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/SideDoorHousing-thumb.jpg b/extensions/fablabchemnitz/boxes.py/SideDoorHousing-thumb.jpg new file mode 100644 index 00000000..f9bfaeac Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/SideDoorHousing-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/Silverware-thumb.jpg b/extensions/fablabchemnitz/boxes.py/Silverware-thumb.jpg new file mode 100644 index 00000000..f9bfaeac Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/Silverware-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/SlatwallCaliper-thumb.jpg b/extensions/fablabchemnitz/boxes.py/SlatwallCaliper-thumb.jpg new file mode 100644 index 00000000..c3ab9ff5 Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/SlatwallCaliper-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/SlatwallChiselHolder-thumb.jpg b/extensions/fablabchemnitz/boxes.py/SlatwallChiselHolder-thumb.jpg new file mode 100644 index 00000000..f9bfaeac Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/SlatwallChiselHolder-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/SlatwallConsole-thumb.jpg b/extensions/fablabchemnitz/boxes.py/SlatwallConsole-thumb.jpg new file mode 100644 index 00000000..f9bfaeac Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/SlatwallConsole-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/SlatwallDrillBox-thumb.jpg b/extensions/fablabchemnitz/boxes.py/SlatwallDrillBox-thumb.jpg new file mode 100644 index 00000000..b30ebfa0 Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/SlatwallDrillBox-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/SlatwallEdges-thumb.jpg b/extensions/fablabchemnitz/boxes.py/SlatwallEdges-thumb.jpg new file mode 100644 index 00000000..f9bfaeac Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/SlatwallEdges-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/SlatwallPinRow-thumb.jpg b/extensions/fablabchemnitz/boxes.py/SlatwallPinRow-thumb.jpg new file mode 100644 index 00000000..f9bfaeac Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/SlatwallPinRow-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/SlatwallPlaneHolder-thumb.jpg b/extensions/fablabchemnitz/boxes.py/SlatwallPlaneHolder-thumb.jpg new file mode 100644 index 00000000..f9bfaeac Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/SlatwallPlaneHolder-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/SlatwallPliersHolder-thumb.jpg b/extensions/fablabchemnitz/boxes.py/SlatwallPliersHolder-thumb.jpg new file mode 100644 index 00000000..1b3b232c Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/SlatwallPliersHolder-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/SlatwallSlottedHolder-thumb.jpg b/extensions/fablabchemnitz/boxes.py/SlatwallSlottedHolder-thumb.jpg new file mode 100644 index 00000000..17e2069f Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/SlatwallSlottedHolder-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/SlatwallStairs-thumb.jpg b/extensions/fablabchemnitz/boxes.py/SlatwallStairs-thumb.jpg new file mode 100644 index 00000000..f9bfaeac Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/SlatwallStairs-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/SlatwallTypeTray-thumb.jpg b/extensions/fablabchemnitz/boxes.py/SlatwallTypeTray-thumb.jpg new file mode 100644 index 00000000..7fe3c711 Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/SlatwallTypeTray-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/SlatwallWrenchHolder-thumb.jpg b/extensions/fablabchemnitz/boxes.py/SlatwallWrenchHolder-thumb.jpg new file mode 100644 index 00000000..f9bfaeac Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/SlatwallWrenchHolder-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/SpicesRack-thumb.jpg b/extensions/fablabchemnitz/boxes.py/SpicesRack-thumb.jpg new file mode 100644 index 00000000..12e69dbb Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/SpicesRack-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/Stachel-thumb.jpg b/extensions/fablabchemnitz/boxes.py/Stachel-thumb.jpg new file mode 100644 index 00000000..112b4857 Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/Stachel-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/StorageRack-2-thumb.jpg b/extensions/fablabchemnitz/boxes.py/StorageRack-2-thumb.jpg new file mode 100644 index 00000000..f9b6599e Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/StorageRack-2-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/StorageRack-3-thumb.jpg b/extensions/fablabchemnitz/boxes.py/StorageRack-3-thumb.jpg new file mode 100644 index 00000000..fe2a846f Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/StorageRack-3-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/StorageRack-thumb.jpg b/extensions/fablabchemnitz/boxes.py/StorageRack-thumb.jpg new file mode 100644 index 00000000..eb584227 Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/StorageRack-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/StorageShelf-thumb.jpg b/extensions/fablabchemnitz/boxes.py/StorageShelf-thumb.jpg new file mode 100644 index 00000000..2232a1c3 Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/StorageShelf-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/TrafficLight-thumb.jpg b/extensions/fablabchemnitz/boxes.py/TrafficLight-thumb.jpg new file mode 100644 index 00000000..07973c5e Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/TrafficLight-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/TrayInsert-2-thumb.jpg b/extensions/fablabchemnitz/boxes.py/TrayInsert-2-thumb.jpg new file mode 100644 index 00000000..209d0669 Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/TrayInsert-2-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/TrayInsert-thumb.jpg b/extensions/fablabchemnitz/boxes.py/TrayInsert-thumb.jpg new file mode 100644 index 00000000..d460a37e Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/TrayInsert-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/TrayLayout-thumb.jpg b/extensions/fablabchemnitz/boxes.py/TrayLayout-thumb.jpg new file mode 100644 index 00000000..9577f5a8 Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/TrayLayout-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/TrayLayout2-thumb.jpg b/extensions/fablabchemnitz/boxes.py/TrayLayout2-thumb.jpg new file mode 100644 index 00000000..3ad4ca25 Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/TrayLayout2-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/TriangleLamp-thumb.jpg b/extensions/fablabchemnitz/boxes.py/TriangleLamp-thumb.jpg new file mode 100644 index 00000000..f9bfaeac Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/TriangleLamp-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/TwoPiece-thumb.jpg b/extensions/fablabchemnitz/boxes.py/TwoPiece-thumb.jpg new file mode 100644 index 00000000..0107142f Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/TwoPiece-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/TypeTray-thumb.jpg b/extensions/fablabchemnitz/boxes.py/TypeTray-thumb.jpg new file mode 100644 index 00000000..9f9547e4 Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/TypeTray-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/UBox-thumb.jpg b/extensions/fablabchemnitz/boxes.py/UBox-thumb.jpg new file mode 100644 index 00000000..3ebc1dc4 Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/UBox-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/UnevenHeightBox-thumb.jpg b/extensions/fablabchemnitz/boxes.py/UnevenHeightBox-thumb.jpg new file mode 100644 index 00000000..6f44a5ee Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/UnevenHeightBox-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/UniversalBox-thumb.jpg b/extensions/fablabchemnitz/boxes.py/UniversalBox-thumb.jpg new file mode 100644 index 00000000..b634ebc8 Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/UniversalBox-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/WaivyKnob-thumb.jpg b/extensions/fablabchemnitz/boxes.py/WaivyKnob-thumb.jpg new file mode 100644 index 00000000..f9bfaeac Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/WaivyKnob-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/WineRack-thumb.jpg b/extensions/fablabchemnitz/boxes.py/WineRack-thumb.jpg new file mode 100644 index 00000000..a57cc765 Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/WineRack-thumb.jpg differ diff --git a/extensions/fablabchemnitz/boxes.py/boxes.exe b/extensions/fablabchemnitz/boxes.py/boxes.exe new file mode 100755 index 00000000..30ec23ad Binary files /dev/null and b/extensions/fablabchemnitz/boxes.py/boxes.exe differ diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.AgricolaInsert.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.AgricolaInsert.inx new file mode 100644 index 00000000..3a6e22c6 --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.AgricolaInsert.inx @@ -0,0 +1,43 @@ + + +AgricolaInsert +info.festi.boxes.py.AgricolaInsert +agricolainsert + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 1.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + ./AgricolaInsert-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.AllEdges.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.AllEdges.inx new file mode 100644 index 00000000..dc7944b6 --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.AllEdges.inx @@ -0,0 +1,95 @@ + + +AllEdges +info.festi.boxes.py.AllEdges +alledges + + + 100 + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + 60 + 2.0 + 1.0 + 4.0 + + + 0 + false + 0.5 + + + + + 2 + 0 + 1 + + + 90.0 + true + + + + + + + + + + + 2.0 + 1.0 + 3.0 + 0.05 + 2.0 + 1.0 + + + 5.0 + 0.1 + 3.0 + + + 1.05 + 1.0 + 0.5 + 5.0 + + + ./AllEdges-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.AngledBox.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.AngledBox.inx new file mode 100644 index 00000000..5afc936c --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.AngledBox.inx @@ -0,0 +1,62 @@ + + +AngledBox +info.festi.boxes.py.AngledBox +angledbox + + + 100.0 + 100.0 + 100.0 + true + + + + + + + 5 + + + + + + + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + ./AngledBox-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.AngledCutJig.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.AngledCutJig.inx new file mode 100644 index 00000000..f69fe5a4 --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.AngledCutJig.inx @@ -0,0 +1,48 @@ + + +AngledCutJig +info.festi.boxes.py.AngledCutJig +angledcutjig + + + 50 + 100 + 45.0 + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 1.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + ./AngledCutJig-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.Arcade.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.Arcade.inx new file mode 100644 index 00000000..9f1d1912 --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.Arcade.inx @@ -0,0 +1,48 @@ + + +Arcade +info.festi.boxes.py.Arcade +arcade + + + 450.0 + 350.0 + 150.0 + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + ./Arcade-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.Atreus21.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.Atreus21.inx new file mode 100644 index 00000000..db254455 --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.Atreus21.inx @@ -0,0 +1,38 @@ + + +Atreus21 +info.festi.boxes.py.Atreus21 +atreus21 + + + true + true + false + false + castle + 4@3/4@6/4@11/4@5/4@0/1@7.8 + + + 3.0 + 0.0 + false + 100 + 0.1 + + + ./Atreus21-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.BasedBox.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.BasedBox.inx new file mode 100644 index 00000000..e0121a1e --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.BasedBox.inx @@ -0,0 +1,49 @@ + + +BasedBox +info.festi.boxes.py.BasedBox +basedbox + + + 100.0 + 100.0 + 100.0 + true + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + ./BasedBox-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.BayonetBox.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.BayonetBox.inx new file mode 100644 index 00000000..9540c58f --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.BayonetBox.inx @@ -0,0 +1,36 @@ + + +BayonetBox +info.festi.boxes.py.BayonetBox +bayonetbox + + + 50.0 + 10 + 1.0 + true + + + 3.0 + 0.0 + false + 100 + 0.1 + + + ./BayonetBox-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.BinTray.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.BinTray.inx new file mode 100644 index 00000000..688761e9 --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.BinTray.inx @@ -0,0 +1,50 @@ + + +BinTray +info.festi.boxes.py.BinTray +bintray + + + 50*3 + 50*3 + 100.0 + true + 0.4 + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 0.5 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + ./BinTray-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.BottleStack.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.BottleStack.inx new file mode 100644 index 00000000..69ab63fb --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.BottleStack.inx @@ -0,0 +1,36 @@ + + +BottleStack +info.festi.boxes.py.BottleStack +bottlestack + + + 80 + 3 + 80 + true + + + 3.0 + 0.0 + false + 100 + 0.1 + + + ./BottleStack-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.BurnTest.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.BurnTest.inx new file mode 100644 index 00000000..3aca9e16 --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.BurnTest.inx @@ -0,0 +1,48 @@ + + +BurnTest +info.festi.boxes.py.BurnTest +burntest + + + 100 + 0.01 + 2 + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + ./BurnTest-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.CardBox.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.CardBox.inx new file mode 100644 index 00000000..ad454b25 --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.CardBox.inx @@ -0,0 +1,49 @@ + + +CardBox +info.festi.boxes.py.CardBox +cardbox + + + 30 + 65 + 90 + 2 + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + ./CardBox-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.Castle.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.Castle.inx new file mode 100644 index 00000000..63f949d7 --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.Castle.inx @@ -0,0 +1,43 @@ + + +Castle +info.festi.boxes.py.Castle +castle + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + ./Castle-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.ClosedBox.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.ClosedBox.inx new file mode 100644 index 00000000..846911db --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.ClosedBox.inx @@ -0,0 +1,49 @@ + + +ClosedBox +info.festi.boxes.py.ClosedBox +closedbox + + + 100.0 + 100.0 + 100.0 + true + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + ./ClosedBox-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.CoffeeCapsuleHolder.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.CoffeeCapsuleHolder.inx new file mode 100644 index 00000000..1f57e345 --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.CoffeeCapsuleHolder.inx @@ -0,0 +1,35 @@ + + +CoffeeCapsuleHolder +info.festi.boxes.py.CoffeeCapsuleHolder +coffeecapsuleholder + + + 4 + 5 + true + + + 3.0 + 0.0 + false + 100 + 0.1 + + + ./CoffeeCapsuleHolder-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.ConcaveKnob.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.ConcaveKnob.inx new file mode 100644 index 00000000..b20adad0 --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.ConcaveKnob.inx @@ -0,0 +1,39 @@ + + +ConcaveKnob +info.festi.boxes.py.ConcaveKnob +concaveknob + + + 50.0 + 3 + 0.2 + 70.0 + 6.0 + 1.0 + 10.0 + + + 3.0 + 0.0 + false + 100 + 0.1 + + + ./ConcaveKnob-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.Console.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.Console.inx new file mode 100644 index 00000000..e838dd6a --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.Console.inx @@ -0,0 +1,57 @@ + + +Console +info.festi.boxes.py.Console +console + + + 100 + 100 + 100 + false + 30 + 50 + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 0.5 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + 60 + 2.0 + 1.0 + 4.0 + + + ./Console-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.Console2.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.Console2.inx new file mode 100644 index 00000000..d30abad9 --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.Console2.inx @@ -0,0 +1,66 @@ + + +Console2 +info.festi.boxes.py.Console2 +console2 + + + 100 + 100 + 100 + + + + + + + false + 30 + 50 + true + true + true + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 0.5 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + 60 + 2.0 + 1.0 + 4.0 + + + ./Console2-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.DinRailBox.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.DinRailBox.inx new file mode 100644 index 00000000..c79a2b65 --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.DinRailBox.inx @@ -0,0 +1,50 @@ + + +DinRailBox +info.festi.boxes.py.DinRailBox +dinrailbox + + + 70 + 90 + 60 + 35.0 + 0.0 + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 0.8 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + ./DinRailBox-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.DiscRack.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.DiscRack.inx new file mode 100644 index 00000000..d4b8e977 --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.DiscRack.inx @@ -0,0 +1,52 @@ + + +DiscRack +info.festi.boxes.py.DiscRack +discrack + + + 20*10 + 150.0 + 5.0 + 0.75 + 0.75 + 3.0 + 18 + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + ./DiscRack-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.Display.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.Display.inx new file mode 100644 index 00000000..4a0c2ea3 --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.Display.inx @@ -0,0 +1,36 @@ + + +Display +info.festi.boxes.py.Display +display + + + 150.0 + 200.0 + 5.0 + 0.0 + + + 3.0 + 0.0 + false + 100 + 0.1 + + + ./Display-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.DisplayCase.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.DisplayCase.inx new file mode 100644 index 00000000..845d977a --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.DisplayCase.inx @@ -0,0 +1,50 @@ + + +DisplayCase +info.festi.boxes.py.DisplayCase +displaycase + + + 100.0 + 100.0 + 100.0 + true + 2 + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + ./DisplayCase-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.DisplayShelf.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.DisplayShelf.inx new file mode 100644 index 00000000..6a3e07ba --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.DisplayShelf.inx @@ -0,0 +1,52 @@ + + +DisplayShelf +info.festi.boxes.py.DisplayShelf +displayshelf + + + 400 + 100 + 300 + true + 3 + 20.0 + 30.0 + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + ./DisplayShelf-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.DividerTray.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.DividerTray.inx new file mode 100644 index 00000000..5d7aef2c --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.DividerTray.inx @@ -0,0 +1,60 @@ + + +DividerTray +info.festi.boxes.py.DividerTray +dividertray + + + 50*3 + 50*3 + 100.0 + true + 20 + 0 + 2 + 0.2 + 0 + 1 + 8 + 15 + true + true + false + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + ./DividerTray-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.DoubleFlexDoorBox.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.DoubleFlexDoorBox.inx new file mode 100644 index 00000000..b104988a --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.DoubleFlexDoorBox.inx @@ -0,0 +1,57 @@ + + +DoubleFlexDoorBox +info.festi.boxes.py.DoubleFlexDoorBox +doubleflexdoorbox + + + 100.0 + 100.0 + 100.0 + true + 15 + 8 + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + 1.05 + 1.0 + 0.5 + 5.0 + + + ./DoubleFlexDoorBox-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.DrillBox.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.DrillBox.inx new file mode 100644 index 00000000..a1072c6c --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.DrillBox.inx @@ -0,0 +1,43 @@ + + +DrillBox +info.festi.boxes.py.DrillBox +drillbox + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + ./DrillBox-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.DrillStand.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.DrillStand.inx new file mode 100644 index 00000000..e44fa70a --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.DrillStand.inx @@ -0,0 +1,55 @@ + + +DrillStand +info.festi.boxes.py.DrillStand +drillstand + + + 25*6 + 10:20:30 + 25:40:60 + 15.0 + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 60 + 1.0 + 1.0 + 3 + + + 90.0 + + + + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + ./DrillStand-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.ElectronicsBox.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.ElectronicsBox.inx new file mode 100644 index 00000000..3d1eb0f3 --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.ElectronicsBox.inx @@ -0,0 +1,55 @@ + + +ElectronicsBox +info.festi.boxes.py.ElectronicsBox +electronicsbox + + + 100.0 + 100.0 + 100.0 + true + 25.0 + 2.0 + 3.0 + 3.0 + true + 7.0 + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + ./ElectronicsBox-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.EuroRackSkiff.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.EuroRackSkiff.inx new file mode 100644 index 00000000..ec0d1739 --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.EuroRackSkiff.inx @@ -0,0 +1,47 @@ + + +EuroRackSkiff +info.festi.boxes.py.EuroRackSkiff +eurorackskiff + + + 100.0 + 84 + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + ./EuroRackSkiff-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.FanHole.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.FanHole.inx new file mode 100644 index 00000000..c6b0368a --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.FanHole.inx @@ -0,0 +1,42 @@ + + +FanHole +info.festi.boxes.py.FanHole +fanhole + + + 80 + 3 + 5 + 10 + 0.2 + + + + + + + + 3.0 + 0.0 + false + 100 + 0.1 + + + ./FanHole-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.FlexBox.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.FlexBox.inx new file mode 100644 index 00000000..e38bacdf --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.FlexBox.inx @@ -0,0 +1,57 @@ + + +FlexBox +info.festi.boxes.py.FlexBox +flexbox + + + 100.0 + 100.0 + 100.0 + true + 15 + 8 + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + 1.05 + 1.0 + 0.5 + 5.0 + + + ./FlexBox-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.FlexBox2.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.FlexBox2.inx new file mode 100644 index 00000000..a526a9ad --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.FlexBox2.inx @@ -0,0 +1,57 @@ + + +FlexBox2 +info.festi.boxes.py.FlexBox2 +flexbox2 + + + 100.0 + 100.0 + 100.0 + true + 15 + 8 + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + 1.05 + 1.0 + 0.5 + 5.0 + + + ./FlexBox2-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.FlexBox3.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.FlexBox3.inx new file mode 100644 index 00000000..36d3a53c --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.FlexBox3.inx @@ -0,0 +1,58 @@ + + +FlexBox3 +info.festi.boxes.py.FlexBox3 +flexbox3 + + + 100.0 + 100.0 + true + 100.0 + 10.0 + 10.0 + 1.0 + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 1 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + 1.05 + 1.0 + 0.5 + 5.0 + + + ./FlexBox3-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.FlexBox4.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.FlexBox4.inx new file mode 100644 index 00000000..6abfee3d --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.FlexBox4.inx @@ -0,0 +1,57 @@ + + +FlexBox4 +info.festi.boxes.py.FlexBox4 +flexbox4 + + + 100.0 + 100.0 + 100.0 + true + 15 + 8 + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + 1.05 + 1.0 + 0.5 + 5.0 + + + ./FlexBox4-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.FlexBox5.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.FlexBox5.inx new file mode 100644 index 00000000..f69c3260 --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.FlexBox5.inx @@ -0,0 +1,57 @@ + + +FlexBox5 +info.festi.boxes.py.FlexBox5 +flexbox5 + + + 100.0 + 100.0 + true + 60 + 60 + 8 + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + 1.05 + 1.0 + 0.5 + 5.0 + + + ./FlexBox5-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.FlexTest.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.FlexTest.inx new file mode 100644 index 00000000..1e467deb --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.FlexTest.inx @@ -0,0 +1,40 @@ + + +FlexTest +info.festi.boxes.py.FlexTest +flextest + + + 100.0 + 100.0 + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 1.05 + 1.0 + 0.5 + 5.0 + + + ./FlexTest-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.FlexTest2.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.FlexTest2.inx new file mode 100644 index 00000000..970e5ca6 --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.FlexTest2.inx @@ -0,0 +1,35 @@ + + +FlexTest2 +info.festi.boxes.py.FlexTest2 +flextest2 + + + 100.0 + 100.0 + 1 + + + 3.0 + 0.0 + false + 100 + 0.1 + + + ./FlexTest2-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.Folder.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.Folder.inx new file mode 100644 index 00000000..18024bdf --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.Folder.inx @@ -0,0 +1,49 @@ + + +Folder +info.festi.boxes.py.Folder +folder + + + 100.0 + 100.0 + 20 + 10.0 + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + ./Folder-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.GearBox.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.GearBox.inx new file mode 100644 index 00000000..7cb87728 --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.GearBox.inx @@ -0,0 +1,50 @@ + + +GearBox +info.festi.boxes.py.GearBox +gearbox + + + 8 + 20 + 3 + 6.0 + 4 + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + ./GearBox-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.Gears.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.Gears.inx new file mode 100644 index 00000000..7739f349 --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.Gears.inx @@ -0,0 +1,41 @@ + + +Gears +info.festi.boxes.py.Gears +gears + + + 12 + 6.0 + 75 + 32 + 0.0 + 0 + 5 + 20 + 20 + + + 3.0 + 0.0 + false + 100 + 0.1 + + + ./Gears-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.HeartBox.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.HeartBox.inx new file mode 100644 index 00000000..00612d3f --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.HeartBox.inx @@ -0,0 +1,58 @@ + + +HeartBox +info.festi.boxes.py.HeartBox +heartbox + + + 150 + 50 + + + + + + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 2.0 + 1.0 + 1.0 + 0.0 + 1.0 + 1.0 + + + 1.05 + 1.0 + 0.5 + 5.0 + + + ./HeartBox-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.HexHoles.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.HexHoles.inx new file mode 100644 index 00000000..2a30076d --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.HexHoles.inx @@ -0,0 +1,41 @@ + + +HexHoles +info.festi.boxes.py.HexHoles +hexholes + + + 100.0 + 100.0 + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 10.0 + 3.0 + + + + + + ./HexHoles-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.HingeBox.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.HingeBox.inx new file mode 100644 index 00000000..e73d4ede --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.HingeBox.inx @@ -0,0 +1,63 @@ + + +HingeBox +info.festi.boxes.py.HingeBox +hingebox + + + 100.0 + 100.0 + 100.0 + true + 20.0 + 0.0 + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + 3.2 + 5 + 2 + + + + + 1.5 + 0.05 + 2.0 + + + ./HingeBox-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.Hook.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.Hook.inx new file mode 100644 index 00000000..26809926 --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.Hook.inx @@ -0,0 +1,50 @@ + + +Hook +info.festi.boxes.py.Hook +hook + + + 40.0 + 40.0 + 40.0 + 20.0 + 45.0 + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 0.5 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + ./Hook-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.IntegratedHingeBox.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.IntegratedHingeBox.inx new file mode 100644 index 00000000..aedc8d11 --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.IntegratedHingeBox.inx @@ -0,0 +1,55 @@ + + +IntegratedHingeBox +info.festi.boxes.py.IntegratedHingeBox +integratedhingebox + + + 100.0 + 100.0 + 100.0 + true + 20.0 + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + 1.0 + 2.0 + 0.1 + + + ./IntegratedHingeBox-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.Keypad.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.Keypad.inx new file mode 100644 index 00000000..e34414da --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.Keypad.inx @@ -0,0 +1,54 @@ + + +Keypad +info.festi.boxes.py.Keypad +keypad + + + 30 + 1.5 + false + 1.5 + true + false + false + castle + 4x3 + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 1 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + ./Keypad-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.LBeam.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.LBeam.inx new file mode 100644 index 00000000..0a069d12 --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.LBeam.inx @@ -0,0 +1,49 @@ + + +LBeam +info.festi.boxes.py.LBeam +lbeam + + + 100.0 + 100.0 + 100.0 + true + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + ./LBeam-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.LaserClamp.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.LaserClamp.inx new file mode 100644 index 00000000..64a57115 --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.LaserClamp.inx @@ -0,0 +1,48 @@ + + +LaserClamp +info.festi.boxes.py.LaserClamp +laserclamp + + + 25.0 + 50.0 + 0.0 + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + ./LaserClamp-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.LaserHoldfast.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.LaserHoldfast.inx new file mode 100644 index 00000000..c8d518d7 --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.LaserHoldfast.inx @@ -0,0 +1,36 @@ + + +LaserHoldfast +info.festi.boxes.py.LaserHoldfast +laserholdfast + + + 25 + 40 + 5.0 + 5.0 + + + 3.0 + 0.0 + false + 100 + 0.1 + + + ./LaserHoldfast-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.MagazinFile.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.MagazinFile.inx new file mode 100644 index 00000000..3e99fad0 --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.MagazinFile.inx @@ -0,0 +1,50 @@ + + +MagazinFile +info.festi.boxes.py.MagazinFile +magazinfile + + + 100.0 + 100.0 + 100.0 + 0.0 + true + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + ./MagazinFile-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.MakitaPowerSupply.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.MakitaPowerSupply.inx new file mode 100644 index 00000000..4f4fb8d1 --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.MakitaPowerSupply.inx @@ -0,0 +1,47 @@ + + +MakitaPowerSupply +info.festi.boxes.py.MakitaPowerSupply +makitapowersupply + + + 8.0 + 6.3 + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + ./MakitaPowerSupply-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.NemaMount.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.NemaMount.inx new file mode 100644 index 00000000..3df6563a --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.NemaMount.inx @@ -0,0 +1,56 @@ + + +NemaMount +info.festi.boxes.py.NemaMount +nemamount + + + + + + + + + + + + + + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + ./NemaMount-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.NemaPattern.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.NemaPattern.inx new file mode 100644 index 00000000..badc418b --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.NemaPattern.inx @@ -0,0 +1,57 @@ + + +NemaPattern +info.festi.boxes.py.NemaPattern +nemapattern + + + + + + + + + + + + + + 0.0 + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + ./NemaPattern-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.NotesHolder.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.NotesHolder.inx new file mode 100644 index 00000000..1fb90a2d --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.NotesHolder.inx @@ -0,0 +1,61 @@ + + +NotesHolder +info.festi.boxes.py.NotesHolder +notesholder + + + 78 + 78 + 35 + + + + + + + 40 + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 1 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + 60 + 2.0 + 1.0 + 4.0 + + + ./NotesHolder-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.OpenBox.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.OpenBox.inx new file mode 100644 index 00000000..6f6396d5 --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.OpenBox.inx @@ -0,0 +1,49 @@ + + +OpenBox +info.festi.boxes.py.OpenBox +openbox + + + 100.0 + 100.0 + 100.0 + true + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + ./OpenBox-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.OrganPipe.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.OrganPipe.inx new file mode 100644 index 00000000..e7289223 --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.OrganPipe.inx @@ -0,0 +1,72 @@ + + +OrganPipe +info.festi.boxes.py.OrganPipe +organpipe + + + + + + + + + + + + + + + + + 2 + 2.0 + 0.25 + 0.3 + 0 + 588.4 + + + + + + + false + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 1.0 + 1.0 + 3.0 + 0.0 + 3.0 + 1.0 + + + ./OrganPipe-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.OttoBody.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.OttoBody.inx new file mode 100644 index 00000000..5d31ae2a --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.OttoBody.inx @@ -0,0 +1,48 @@ + + +OttoBody +info.festi.boxes.py.OttoBody +ottobody + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + 1.0 + 2.0 + 0.1 + + + ./OttoBody-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.OttoLegs.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.OttoLegs.inx new file mode 100644 index 00000000..16baec5d --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.OttoLegs.inx @@ -0,0 +1,48 @@ + + +OttoLegs +info.festi.boxes.py.OttoLegs +ottolegs + + + 3.0 + 2.6 + 34.0 + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 1.0 + 1.0 + 1.0 + 0.0 + 1.0 + 1.0 + + + ./OttoLegs-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.OttoSoles.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.OttoSoles.inx new file mode 100644 index 00000000..03609038 --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.OttoSoles.inx @@ -0,0 +1,37 @@ + + +OttoSoles +info.festi.boxes.py.OttoSoles +ottosoles + + + 56.0 + 36.0 + 4.0 + 5.0 + 2 + + + 3.0 + 0.0 + false + 100 + 0.1 + + + ./OttoSoles-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.PaintStorage.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.PaintStorage.inx new file mode 100644 index 00000000..151c081f --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.PaintStorage.inx @@ -0,0 +1,58 @@ + + +PaintStorage +info.festi.boxes.py.PaintStorage +paintstorage + + + 100 + 300 + 50 + 30 + 10 + false + false + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + 60 + 2.0 + 1.0 + 4.0 + + + ./PaintStorage-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.PaperBox.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.PaperBox.inx new file mode 100644 index 00000000..f2f106ab --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.PaperBox.inx @@ -0,0 +1,42 @@ + + +PaperBox +info.festi.boxes.py.PaperBox +paperbox + + + 100.0 + 100.0 + 100.0 + 15 + 7 + 20 + 0.5 + 1.5 + 0.07982998571223732 + 15 + + + 3.0 + 0.0 + false + 100 + 0.1 + + + ./PaperBox-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.PhoneHolder.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.PhoneHolder.inx new file mode 100644 index 00000000..b1bccd41 --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.PhoneHolder.inx @@ -0,0 +1,52 @@ + + +PhoneHolder +info.festi.boxes.py.PhoneHolder +phoneholder + + + 142 + 73 + 11 + 25 + 30 + 76 + 16 + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + ./PhoneHolder-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.Planetary.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.Planetary.inx new file mode 100644 index 00000000..9969ab16 --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.Planetary.inx @@ -0,0 +1,38 @@ + + +Planetary +info.festi.boxes.py.Planetary +planetary + + + 8 + 20 + 0 + 0 + 3 + 6.0 + + + 3.0 + 0.0 + false + 100 + 0.1 + + + ./Planetary-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.Planetary2.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.Planetary2.inx new file mode 100644 index 00000000..37f56388 --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.Planetary2.inx @@ -0,0 +1,68 @@ + + +Planetary2 +info.festi.boxes.py.Planetary2 +planetary2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 20 + 20 + 0 + 1 + 3 + 6.0 + 2.4 + 4.0 + 3.1 + + + 3.0 + 0.0 + false + 100 + 0.1 + + + ./Planetary2-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.Platonic.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.Platonic.inx new file mode 100644 index 00000000..db07488b --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.Platonic.inx @@ -0,0 +1,54 @@ + + +Platonic +info.festi.boxes.py.Platonic +platonic + + + 60 + true + + + + + + + + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + ./Platonic-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.PoleHook.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.PoleHook.inx new file mode 100644 index 00000000..b552134c --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.PoleHook.inx @@ -0,0 +1,50 @@ + + +PoleHook +info.festi.boxes.py.PoleHook +polehook + + + 50.0 + 7.8 + 13.0 + 5.5 + 4.0 + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + ./PoleHook-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.Pulley.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.Pulley.inx new file mode 100644 index 00000000..0629f36e --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.Pulley.inx @@ -0,0 +1,53 @@ + + +Pulley +info.festi.boxes.py.Pulley +pulley + + + 6.0 + + + + + + + + + + + + + + + + + 20 + 5 + false + 0 + + + 3.0 + 0.0 + false + 100 + 0.1 + + + ./Pulley-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.Rack10Box.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.Rack10Box.inx new file mode 100644 index 00000000..0a6f092a --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.Rack10Box.inx @@ -0,0 +1,67 @@ + + +Rack10Box +info.festi.boxes.py.Rack10Box +rack10box + + + 100.0 + + + + + + + + + + + + + + + + + + + 25.0 + 2.0 + 3.0 + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 0.5 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + ./Rack10Box-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.Rack19Box.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.Rack19Box.inx new file mode 100644 index 00000000..f8f74443 --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.Rack19Box.inx @@ -0,0 +1,67 @@ + + +Rack19Box +info.festi.boxes.py.Rack19Box +rack19box + + + 100.0 + + + + + + + + + + + + + + + + + + + 25.0 + 2.0 + 3.0 + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 0.5 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + ./Rack19Box-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.Rack19HalfWidth.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.Rack19HalfWidth.inx new file mode 100644 index 00000000..e4499a95 --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.Rack19HalfWidth.inx @@ -0,0 +1,36 @@ + + +Rack19HalfWidth +info.festi.boxes.py.Rack19HalfWidth +rack19halfwidth + + + 1 + xxmpwx + 20 + 124 + + + 3.0 + 0.0 + false + 100 + 0.1 + + + ./Rack19HalfWidth-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.RackBox.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.RackBox.inx new file mode 100644 index 00000000..6acf40ac --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.RackBox.inx @@ -0,0 +1,54 @@ + + +RackBox +info.festi.boxes.py.RackBox +rackbox + + + 100.0 + 100.0 + 100.0 + true + 25.0 + 2.0 + 3.0 + 4.0 + 7.0 + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 1.2 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + ./RackBox-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.RectangularWall.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.RectangularWall.inx new file mode 100644 index 00000000..cf1a0455 --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.RectangularWall.inx @@ -0,0 +1,275 @@ + + +RectangularWall +info.festi.boxes.py.RectangularWall +rectangularwall + + + 100 + 100 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 3.2 + 5 + 2 + + + + + 1.5 + 0.05 + 2.0 + + + 5.0 + 0.1 + 3.0 + + + 50 + 1.5 + 0.2 + 3 + + + 90.0 + + + + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + 20.0 + 0.0 + 3.0 + 20.0 + + + true + + + + + 0.3 + + + 0 + false + 0.5 + + + + + 2 + 0 + 1 + + + 1.0 + 2.0 + 0.1 + + + 90.0 + true + + + + + + + + + + + 2.0 + 1.0 + 3.0 + 0.05 + 2.0 + 1.0 + + + 60 + 2.0 + 1.0 + 4.0 + + + ./RectangularWall-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.RegularBox.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.RegularBox.inx new file mode 100644 index 00000000..57dd15f9 --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.RegularBox.inx @@ -0,0 +1,59 @@ + + +RegularBox +info.festi.boxes.py.RegularBox +regularbox + + + 100.0 + true + 50.0 + 5 + + + + + + + + + + 1.0 + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + ./RegularBox-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.RobotArm.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.RobotArm.inx new file mode 100644 index 00000000..cdfed0c6 --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.RobotArm.inx @@ -0,0 +1,120 @@ + + +RobotArm +info.festi.boxes.py.RobotArm +robotarm + + + + + + + + + + + + + + + + + 50.0 + + + + + + + + + + + + + + + 50.0 + + + + + + + + + + + + + + + 50.0 + + + + + + + + + + + + + + + 50.0 + + + + + + + + + + + + + + + 50.0 + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + ./RobotArm-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.Rotary.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.Rotary.inx new file mode 100644 index 00000000..30139834 --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.Rotary.inx @@ -0,0 +1,51 @@ + + +Rotary +info.festi.boxes.py.Rotary +rotary + + + 72.0 + 5.0 + 6.0 + 8.0 + 32.0 + 7.1 + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + ./Rotary-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.RoundedBox.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.RoundedBox.inx new file mode 100644 index 00000000..35c88fd1 --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.RoundedBox.inx @@ -0,0 +1,72 @@ + + +RoundedBox +info.festi.boxes.py.RoundedBox +roundedbox + + + 100.0 + 100.0 + 100.0 + true + 15 + + + + + + + + + + + + + + + + + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + 1.05 + 1.0 + 0.5 + 5.0 + + + ./RoundedBox-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.RoyalGame.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.RoyalGame.inx new file mode 100644 index 00000000..0bcee34c --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.RoyalGame.inx @@ -0,0 +1,46 @@ + + +RoyalGame +info.festi.boxes.py.RoyalGame +royalgame + + + 200 + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + ./RoyalGame-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.SBCMicroRack.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.SBCMicroRack.inx new file mode 100644 index 00000000..e096e108 --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.SBCMicroRack.inx @@ -0,0 +1,65 @@ + + +SBCMicroRack +info.festi.boxes.py.SBCMicroRack +sbcmicrorack + + + 56 + 85 + 5 + 3 + 3 + 28 + 3.5 + 58 + 49 + 2.75 + 18 + 53 + false + false + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + 60 + 2.0 + 1.0 + 4.0 + + + ./SBCMicroRack-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.ShutterBox.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.ShutterBox.inx new file mode 100644 index 00000000..fd823128 --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.ShutterBox.inx @@ -0,0 +1,59 @@ + + +ShutterBox +info.festi.boxes.py.ShutterBox +shutterbox + + + 150 + 100 + 100 + 40.0 + + + + + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 0.5 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + 1.05 + 2.0 + 0.75 + 5.0 + + + ./ShutterBox-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.SideDoorHousing.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.SideDoorHousing.inx new file mode 100644 index 00000000..b98020cf --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.SideDoorHousing.inx @@ -0,0 +1,61 @@ + + +SideDoorHousing +info.festi.boxes.py.SideDoorHousing +sidedoorhousing + + + 100 + 100 + 100 + + + + + + + true + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 0.5 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + 60 + 2.0 + 1.0 + 4.0 + + + ./SideDoorHousing-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.Silverware.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.Silverware.inx new file mode 100644 index 00000000..c9d48917 --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.Silverware.inx @@ -0,0 +1,38 @@ + + +Silverware +info.festi.boxes.py.Silverware +silverware + + + 250 + 154 + 120 + 30 + 150 + 120 + + + 3.0 + 0.0 + false + 100 + 0.1 + + + ./Silverware-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.SlatwallCaliper.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.SlatwallCaliper.inx new file mode 100644 index 00000000..768fe1bd --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.SlatwallCaliper.inx @@ -0,0 +1,60 @@ + + +SlatwallCaliper +info.festi.boxes.py.SlatwallCaliper +slatwallcaliper + + + 100 + 18.0 + 6.0 + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + + + + + + 4.0 + 101.6 + 1.0 + 2.0 + + + ./SlatwallCaliper-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.SlatwallChiselHolder.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.SlatwallChiselHolder.inx new file mode 100644 index 00000000..f0423ddb --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.SlatwallChiselHolder.inx @@ -0,0 +1,68 @@ + + +SlatwallChiselHolder +info.festi.boxes.py.SlatwallChiselHolder +slatwallchiselholder + + + 120 + 30.0 + 30.0 + 5.0 + 5.0 + 6 + + + + + + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 1.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + + + + + + 4.0 + 101.6 + 1.0 + 2.0 + + + ./SlatwallChiselHolder-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.SlatwallConsole.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.SlatwallConsole.inx new file mode 100644 index 00000000..ee568497 --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.SlatwallConsole.inx @@ -0,0 +1,62 @@ + + +SlatwallConsole +info.festi.boxes.py.SlatwallConsole +slatwallconsole + + + 100 + 100 + true + 50 + 35 + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + + + + + + 4.0 + 101.6 + 1.0 + 2.0 + + + ./SlatwallConsole-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.SlatwallDrillBox.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.SlatwallDrillBox.inx new file mode 100644 index 00000000..46ce58a2 --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.SlatwallDrillBox.inx @@ -0,0 +1,61 @@ + + +SlatwallDrillBox +info.festi.boxes.py.SlatwallDrillBox +slatwalldrillbox + + + 25*6 + 10:20:30 + 25:40:60 + 15.0 + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + + + + + + 4.0 + 101.6 + 1.0 + 2.0 + + + ./SlatwallDrillBox-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.SlatwallEdges.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.SlatwallEdges.inx new file mode 100644 index 00000000..c274acc0 --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.SlatwallEdges.inx @@ -0,0 +1,58 @@ + + +SlatwallEdges +info.festi.boxes.py.SlatwallEdges +slatwalledges + + + 120 + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + + + + + + 4.0 + 101.6 + 1.0 + 2.0 + + + ./SlatwallEdges-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.SlatwallPinRow.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.SlatwallPinRow.inx new file mode 100644 index 00000000..19688c65 --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.SlatwallPinRow.inx @@ -0,0 +1,65 @@ + + +SlatwallPinRow +info.festi.boxes.py.SlatwallPinRow +slatwallpinrow + + + 8 + 35 + 10 + 35 + 0.0 + 20.0 + 3 + 50.0 + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 0.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + + + + + + 4.0 + 101.6 + 1.0 + 2.0 + + + ./SlatwallPinRow-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.SlatwallPlaneHolder.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.SlatwallPlaneHolder.inx new file mode 100644 index 00000000..caf7733b --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.SlatwallPlaneHolder.inx @@ -0,0 +1,61 @@ + + +SlatwallPlaneHolder +info.festi.boxes.py.SlatwallPlaneHolder +slatwallplaneholder + + + 80 + 250 + 30 + 80 + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + + + + + + 4.0 + 101.6 + 1.0 + 2.0 + + + ./SlatwallPlaneHolder-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.SlatwallPliersHolder.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.SlatwallPliersHolder.inx new file mode 100644 index 00000000..7d3f9cbd --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.SlatwallPliersHolder.inx @@ -0,0 +1,50 @@ + + +SlatwallPliersHolder +info.festi.boxes.py.SlatwallPliersHolder +slatwallpliersholder + + + 100*3 + 50 + 50 + true + 45 + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + ./SlatwallPliersHolder-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.SlatwallSlottedHolder.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.SlatwallSlottedHolder.inx new file mode 100644 index 00000000..d6a50140 --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.SlatwallSlottedHolder.inx @@ -0,0 +1,69 @@ + + +SlatwallSlottedHolder +info.festi.boxes.py.SlatwallSlottedHolder +slatwallslottedholder + + + 120 + 50.0 + 50.0 + 5.0 + 35.0 + 5.0 + 6 + + + + + + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 1.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + + + + + + 4.0 + 101.6 + 1.0 + 2.0 + + + ./SlatwallSlottedHolder-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.SlatwallStairs.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.SlatwallStairs.inx new file mode 100644 index 00000000..95e8bf88 --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.SlatwallStairs.inx @@ -0,0 +1,61 @@ + + +SlatwallStairs +info.festi.boxes.py.SlatwallStairs +slatwallstairs + + + 250/3 + 40*3 + 30:100:180 + 30 + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + + + + + + 4.0 + 101.6 + 1.0 + 2.0 + + + ./SlatwallStairs-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.SlatwallTypeTray.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.SlatwallTypeTray.inx new file mode 100644 index 00000000..e02e1915 --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.SlatwallTypeTray.inx @@ -0,0 +1,76 @@ + + +SlatwallTypeTray +info.festi.boxes.py.SlatwallTypeTray +slatwalltypetray + + + 50*3 + 50*3 + 100.0 + 0.0 + true + + + + + + + 0.0 + 0.0 + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + 60 + 2.0 + 1.0 + 4.0 + + + + + + + + + 4.0 + 101.6 + 1.0 + 2.0 + + + ./SlatwallTypeTray-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.SlatwallWrenchHolder.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.SlatwallWrenchHolder.inx new file mode 100644 index 00000000..6e2e50db --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.SlatwallWrenchHolder.inx @@ -0,0 +1,65 @@ + + +SlatwallWrenchHolder +info.festi.boxes.py.SlatwallWrenchHolder +slatwallwrenchholder + + + 100 + 30.0 + 11 + 8.0 + 25.0 + 3.0 + 5.0 + 0.0 + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + + + + + + + 4.0 + 101.6 + 1.0 + 2.0 + + + ./SlatwallWrenchHolder-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.SpicesRack.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.SpicesRack.inx new file mode 100644 index 00000000..1aed13aa --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.SpicesRack.inx @@ -0,0 +1,52 @@ + + +SpicesRack +info.festi.boxes.py.SpicesRack +spicesrack + + + 55.0 + 60.0 + 10.0 + 5 + 6 + false + false + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 1.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + ./SpicesRack-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.Stachel.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.Stachel.inx new file mode 100644 index 00000000..d5c44fce --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.Stachel.inx @@ -0,0 +1,35 @@ + + +Stachel +info.festi.boxes.py.Stachel +stachel + + + 115.0 + 25.0 + 7.0 + + + 3.0 + 0.0 + false + 100 + 0.1 + + + ./Stachel-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.StorageRack.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.StorageRack.inx new file mode 100644 index 00000000..9969dc09 --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.StorageRack.inx @@ -0,0 +1,67 @@ + + +StorageRack +info.festi.boxes.py.StorageRack +storagerack + + + 200 + 30 + 100.0 + 50*3 + true + + + + + + + + + + + + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + 60 + 2.0 + 1.0 + 4.0 + + + ./StorageRack-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.StorageShelf.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.StorageShelf.inx new file mode 100644 index 00000000..e229321d --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.StorageShelf.inx @@ -0,0 +1,132 @@ + + +StorageShelf +info.festi.boxes.py.StorageShelf +storageshelf + + + 100.0 + 50*3 + 50*3 + true + + + + + + + + + + + + + + + + + + + + + 0.0 + false + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 0.5 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + 60 + 2.0 + 1.0 + 4.0 + + + 0 + false + 0.5 + + + + + 2 + 0 + 1 + + + 3.2 + 5 + 2 + + + + + 1.5 + 0.05 + 2.0 + + + 90.0 + true + + + + + + + + + + + 2.0 + 1.0 + 3.0 + 0.05 + 2.0 + 1.0 + + + 5.0 + 0.1 + 3.0 + + + 150.0 + 2.0 + 30.0 + 1 + + + ./StorageShelf-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.TrafficLight.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.TrafficLight.inx new file mode 100644 index 00000000..a0e93800 --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.TrafficLight.inx @@ -0,0 +1,50 @@ + + +TrafficLight +info.festi.boxes.py.TrafficLight +trafficlight + + + 100.0 + 100 + 50 + 3 + true + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + ./TrafficLight-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.TrayInsert.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.TrayInsert.inx new file mode 100644 index 00000000..bd069991 --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.TrayInsert.inx @@ -0,0 +1,36 @@ + + +TrayInsert +info.festi.boxes.py.TrayInsert +trayinsert + + + 50*3 + 50*3 + 100.0 + true + + + 3.0 + 0.0 + false + 100 + 0.1 + + + ./TrayInsert-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.TriangleLamp.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.TriangleLamp.inx new file mode 100644 index 00000000..529fd12f --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.TriangleLamp.inx @@ -0,0 +1,51 @@ + + +TriangleLamp +info.festi.boxes.py.TriangleLamp +trianglelamp + + + 250 + 40 + 30 + 4 + 2 + false + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 0.5 + 1.0 + 3.0 + 0.0 + 3.0 + 1.0 + + + ./TriangleLamp-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.TwoPiece.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.TwoPiece.inx new file mode 100644 index 00000000..f57b14b4 --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.TwoPiece.inx @@ -0,0 +1,51 @@ + + +TwoPiece +info.festi.boxes.py.TwoPiece +twopiece + + + 100.0 + 100.0 + 100.0 + 0.0 + true + 0.15 + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + ./TwoPiece-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.TypeTray.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.TypeTray.inx new file mode 100644 index 00000000..0000aa83 --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.TypeTray.inx @@ -0,0 +1,133 @@ + + +TypeTray +info.festi.boxes.py.TypeTray +typetray + + + 50*3 + 50*3 + 100.0 + 0.0 + true + + + + + + + + + + + + + + + + + + + + + 30 + 70 + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 0.5 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + 60 + 2.0 + 1.0 + 4.0 + + + 0 + false + 0.5 + + + + + 2 + 0 + 1 + + + 3.2 + 5 + 2 + + + + + 1.5 + 0.05 + 2.0 + + + 90.0 + true + + + + + + + + + + + 2.0 + 1.0 + 3.0 + 0.05 + 2.0 + 1.0 + + + 5.0 + 0.1 + 3.0 + + + 150.0 + 2.0 + 30.0 + 1 + + + ./TypeTray-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.UBox.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.UBox.inx new file mode 100644 index 00000000..9dc53fd3 --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.UBox.inx @@ -0,0 +1,135 @@ + + +UBox +info.festi.boxes.py.UBox +ubox + + + + + + + + + + + + + + + + + 100.0 + 100.0 + 100.0 + 30.0 + + + + + + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + 60 + 2.0 + 1.0 + 4.0 + + + 0 + false + 0.5 + + + + + 2 + 0 + 1 + + + 3.2 + 5 + 2 + + + + + 1.5 + 0.05 + 2.0 + + + 90.0 + true + + + + + + + + + + + 2.0 + 1.0 + 3.0 + 0.05 + 2.0 + 1.0 + + + 5.0 + 0.1 + 3.0 + + + 150.0 + 2.0 + 30.0 + 0.0 + + + 1.05 + 1.0 + 0.5 + 5.0 + + + ./UBox-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.UnevenHeightBox.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.UnevenHeightBox.inx new file mode 100644 index 00000000..2c8c1900 --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.UnevenHeightBox.inx @@ -0,0 +1,76 @@ + + +UnevenHeightBox +info.festi.boxes.py.UnevenHeightBox +unevenheightbox + + + + + + + + + 100.0 + 100.0 + true + 50 + 50 + 100 + 100 + false + 0 + eeee + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + 120 + 0.1 + false + false + 0.3 + + + + + + + 30 + 0.2 + + + ./UnevenHeightBox-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.UniversalBox.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.UniversalBox.inx new file mode 100644 index 00000000..8567fd9f --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.UniversalBox.inx @@ -0,0 +1,145 @@ + + +UniversalBox +info.festi.boxes.py.UniversalBox +universalbox + + + + + + + + + + + + + + + + + + + + + + + 100.0 + 100.0 + 100.0 + true + + + + + + + + + + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + 60 + 2.0 + 1.0 + 4.0 + + + 0 + true + 0.5 + + + + + 2 + 0 + 1 + + + 3.2 + 5 + 2 + + + + + 1.5 + 0.05 + 2.0 + + + 90.0 + true + + + + + + + + + + + 2.0 + 1.0 + 3.0 + 0.05 + 2.0 + 1.0 + + + 5.0 + 0.1 + 3.0 + + + 150.0 + 2.0 + 30.0 + 1 + + + 1.05 + 1.0 + 0.5 + 5.0 + + + ./UniversalBox-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.WaivyKnob.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.WaivyKnob.inx new file mode 100644 index 00000000..09b4ce01 --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.WaivyKnob.inx @@ -0,0 +1,38 @@ + + +WaivyKnob +info.festi.boxes.py.WaivyKnob +waivyknob + + + 50.0 + 20 + 45.0 + 6.0 + 1.0 + 10.0 + + + 3.0 + 0.0 + false + 100 + 0.1 + + + ./WaivyKnob-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes.py.WineRack.inx b/extensions/fablabchemnitz/boxes.py/boxes.py.WineRack.inx new file mode 100644 index 00000000..338af13c --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes.py.WineRack.inx @@ -0,0 +1,54 @@ + + +WineRack +info.festi.boxes.py.WineRack +winerack + + + 400 + 300 + 210 + 46.0 + + + + + + + + 3.0 + 0.0 + false + 100 + 0.1 + + + 90.0 + + + + + 2.0 + 1.0 + 2.0 + 0.0 + 2.0 + 1.0 + + + ./WineRack-thumb.jpg + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxes.py/boxes_proxy.py b/extensions/fablabchemnitz/boxes.py/boxes_proxy.py new file mode 100644 index 00000000..bed58d35 --- /dev/null +++ b/extensions/fablabchemnitz/boxes.py/boxes_proxy.py @@ -0,0 +1,77 @@ +#!/usr/bin/env python3 + +""" +Extension for InkScape 1.0+ + +boxes.py wrapper script to make it work on Windows and Linux systems without duplicating .inx files + +Author: Mario Voigt / FabLab Chemnitz +Mail: mario.voigt@stadtfabrikanten.org +Date: 27.04.2021 +Last patch: 27.04.2021 +License: GNU GPL v3 + +""" +import inkex +import sys +import os +from lxml import etree + +class boxesPyWrapper(inkex.GenerateExtension): + + def add_arguments(self, pars): + args = sys.argv[1:] + for arg in args: + key=arg.split("=")[0] + if len(arg.split("=")) == 2: + value=arg.split("=")[1] + try: + pars.add_argument(key, default=key) + except: + pass #ignore duplicate id arg + + def generate(self): + box_file = "box.svg" + if os.path.exists(box_file): + os.remove(box_file) #remove previously generated box file at the beginning + + cmd = "boxes" #boxes.exe in this local dir (or if present in %PATH%), or boxes from $PATH in linux + for arg in vars(self.options): + if arg != "output" and arg != "ids" and arg != "selected_nodes": + #inkex.utils.debug(str(arg) + " = " + str(getattr(self.options, arg))) + #fix behaviour of "original" arg which does not correctly gets interpreted if set to false + if arg == "original" and str(getattr(self.options, arg)) == "false": + continue + if arg in ("input_file", "tab"): + continue + else: + cmd += " --" + arg + " " + str(getattr(self.options, arg)) + cmd += " --output " + box_file + " " + box_file #we need to add box_file string twice in a row. Otherwise program executable throws an error + cmd = cmd.replace("boxes --generator", "boxes") + + # run boxes with the parameters provided + with os.popen(cmd, "r") as boxes: + result = boxes.read() + + # check output existence + try: + stream = open(box_file, 'r') + except FileNotFoundError as e: + inkex.utils.debug("There was no " + box_file + " output generated. Cannot continue. Command was:") + inkex.utils.debug(str(cmd)) + exit(1) + + # write the generated SVG into Inkscape's canvas + p = etree.XMLParser(huge_tree=True) + doc = etree.parse(stream, parser=etree.XMLParser(huge_tree=True)) + stream.close() + if os.path.exists(box_file): + os.remove(box_file) #remove previously generated box file at the end too + + group = inkex.Group(id="boxes.py") + for element in doc.getroot(): + group.append(element) + return group + +if __name__ == '__main__': + boxesPyWrapper().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxmaker_tabbed/box_maker_tabbed.inx b/extensions/fablabchemnitz/boxmaker_tabbed/box_maker_tabbed.inx new file mode 100644 index 00000000..0b11135d --- /dev/null +++ b/extensions/fablabchemnitz/boxmaker_tabbed/box_maker_tabbed.inx @@ -0,0 +1,88 @@ + + + Box Maker - Tabbed + fablabchemnitz.de.box_maker_tabbed + + + + + + + + + + + + + + 180 + 240 + 50 + + + + + + + + 3.0 + + + + + + 0.0 + 0.0 + + + + + + + + + + + + 3.0 + 0.1 + 0.01 + + + + + + + + + + + + + + + + + 2 + 3 + + + + + + + 1.0 + + + + path + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxmaker_tabbed/box_maker_tabbed.py b/extensions/fablabchemnitz/boxmaker_tabbed/box_maker_tabbed.py new file mode 100644 index 00000000..7e1d1e01 --- /dev/null +++ b/extensions/fablabchemnitz/boxmaker_tabbed/box_maker_tabbed.py @@ -0,0 +1,638 @@ +#!/usr/bin/env python3 +''' +Generates Inkscape SVG file containing box components needed to +laser cut a tabbed construction box taking kerf and clearance into account + +Copyright (C) 2011 elliot white + +Changelog: +19/12/2014 Paul Hutchison: + - Ability to generate 6, 5, 4, 3 or 2-panel cutouts + - Ability to also generate evenly spaced dividers within the box + including tabbed joints to box sides and slots to slot into each other + +23/06/2015 by Paul Hutchison: + - Updated for Inkscape's 0.91 breaking change (unittouu) + +v0.93 - 15/8/2016 by Paul Hutchison: + - Added Hairline option and fixed open box height bug + +v0.94 - 05/01/2017 by Paul Hutchison: + - Added option for keying dividers into walls/floor/none + +v0.95 - 2017-04-20 by Jim McBeath + - Added optional dimples + +v0.96 - 2017-04-24 by Jim McBeath + - Refactored to make box type, tab style, and layout all orthogonal + - Added Tab Style option to allow creating waffle-block-style tabs + - Made open box size correct based on inner or outer dimension choice + - Fixed a few tab bugs + +v0.99 - 2020-06-01 by Paul Hutchison + - Preparatory release with Inkscape 1.0 compatibility upgrades (further fixes to come!) + - Removed Antisymmetric option as it's broken, kinda pointless and looks weird + - Fixed divider issues with Rotate Symmetric + - Made individual panels and their keyholes/slots grouped + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +''' +__version__ = "0.99" ### please report bugs, suggestions etc at https://github.com/paulh-rnd/TabbedBoxMaker ### + +import os +import inkex +import math +from copy import deepcopy + +linethickness = 1 # default unless overridden by settings + +def log(text): + if 'SCHROFF_LOG' in os.environ: + f = open(os.environ.get('SCHROFF_LOG'), 'a') + f.write(text + "\n") + +def newGroup(canvas): + # Create a new group and add element created from line string + panelId = canvas.svg.get_unique_id('panel') + group = canvas.svg.get_current_layer().add(inkex.Group(id=panelId)) + return group + +def getLine(XYstring): + line = inkex.PathElement() + line.style = { 'stroke': '#000000', 'stroke-width' : str(linethickness), 'fill': 'none' } + line.path = XYstring + #etree.SubElement(parent, inkex.addNS('path','svg'), drw) + return line + +# jslee - shamelessly adapted from sample code on below Inkscape wiki page 2015-07-28 +# http://wiki.inkscape.org/wiki/index.php/Generating_objects_from_extensions +def getCircle(r, c): + (cx, cy) = c + log("putting circle at (%d,%d)" % (cx,cy)) + circle = inkex.PathElement.arc((cx, cy), r) + circle.style = { 'stroke': '#000000', 'stroke-width': str(linethickness), 'fill': 'none' } + return circle + +def dimpleStr(tabVector,vectorX,vectorY,directionX,directionY,dirxN,diryN,ddir,isTab): + ds='' + if not isTab: + ddir = -ddir + if dimpleHeight>0 and tabVector!=0: + if tabVector>0: + dimpleStart=(tabVector-dimpleLength)/2-dimpleHeight + tabSgn=1 + else: + dimpleStart=(tabVector+dimpleLength)/2+dimpleHeight + tabSgn=-1 + Vxd=vectorX+dirxN*dimpleStart + Vyd=vectorY+diryN*dimpleStart + ds+='L '+str(Vxd)+','+str(Vyd)+' ' + Vxd=Vxd+(tabSgn*dirxN-ddir*directionX)*dimpleHeight + Vyd=Vyd+(tabSgn*diryN-ddir*directionY)*dimpleHeight + ds+='L '+str(Vxd)+','+str(Vyd)+' ' + Vxd=Vxd+tabSgn*dirxN*dimpleLength + Vyd=Vyd+tabSgn*diryN*dimpleLength + ds+='L '+str(Vxd)+','+str(Vyd)+' ' + Vxd=Vxd+(tabSgn*dirxN+ddir*directionX)*dimpleHeight + Vyd=Vyd+(tabSgn*diryN+ddir*directionY)*dimpleHeight + ds+='L '+str(Vxd)+','+str(Vyd)+' ' + return ds + +def side(group,root,startOffset,endOffset,tabVec,length,direction,isTab,isDivider,numDividers,dividerSpacing): + rootX, rootY = root + startOffsetX, startOffsetY = startOffset + endOffsetX, endOffsetY = endOffset + directionX, directionY = direction + + if (tabSymmetry==1): # waffle-block style rotationally symmetric tabs + divisions=int((length-2*thickness)/nomTab) + if divisions%2: divisions+=1 # make divs even + divisions=float(divisions) + tabs=divisions/2 # tabs for side + else: + divisions=int(length/nomTab) + if not divisions%2: divisions-=1 # make divs odd + divisions=float(divisions) + tabs=(divisions-1)/2 # tabs for side + + if (tabSymmetry==1): # waffle-block style rotationally symmetric tabs + gapWidth=tabWidth=(length-2*thickness)/divisions + elif equalTabs: + gapWidth=tabWidth=length/divisions + else: + tabWidth=nomTab + gapWidth=(length-tabs*nomTab)/(divisions-tabs) + + if isTab: # kerf correction + gapWidth-=correction + tabWidth+=correction + first=correction/2 + else: + gapWidth+=correction + tabWidth-=correction + first=-correction/2 + + s=[] + h=[] + firstVec=0; secondVec=tabVec + dividerEdgeOffsetX = dividerEdgeOffsetY = thickness + dirxN=0 if directionX else 1 # used to select operation on x or y + diryN=0 if directionY else 1 + if (tabSymmetry==1): + dividerEdgeOffsetX = directionX*thickness; + #dividerEdgeOffsetY = ; + vectorX = rootX + (startOffsetX*thickness if dirxN else 0) + vectorY = rootY + (startOffsetY*thickness if diryN else 0) + s='M '+str(vectorX)+','+str(vectorY)+' ' + vectorX = rootX+(startOffsetX if startOffsetX else directionX)*thickness + vectorY = rootY+(startOffsetY if startOffsetY else directionY)*thickness + if dirxN: endOffsetX=0 + if diryN: endOffsetY=0 + else: + (vectorX,vectorY)=(rootX+startOffsetX*thickness,rootY+startOffsetY*thickness) + dividerEdgeOffsetX=directionY*thickness + dividerEdgeOffsetY=directionX*thickness + s='M '+str(vectorX)+','+str(vectorY)+' ' + if dirxN: vectorY=rootY # set correct line start for tab generation + if diryN: vectorX=rootX + + # generate line as tab or hole using: + # last co-ord:Vx,Vy ; tab dir:tabVec ; direction:dirx,diry ; thickness:thickness + # divisions:divs ; gap width:gapWidth ; tab width:tabWidth + + for n in range(1,int(divisions)): + if ((n%2) ^ (not isTab)) and numDividers>0 and not isDivider: # draw holes for divider joints in side walls + w=gapWidth if isTab else tabWidth + if n==1 and tabSymmetry==0: + w-=startOffsetX*thickness + for m in range(1,int(numDividers)+1): + Dx=vectorX+-directionY*dividerSpacing*m + Dy=vectorY+directionX*dividerSpacing*m + if n==1 and tabSymmetry==0: + Dx+=startOffsetX*thickness + h='M '+str(Dx)+','+str(Dy)+' ' + Dx=Dx+directionX*w+dirxN*firstVec+first*directionX + Dy=Dy+directionY*w+diryN*firstVec+first*directionY + h+='L '+str(Dx)+','+str(Dy)+' ' + Dx=Dx+dirxN*secondVec + Dy=Dy+diryN*secondVec + h+='L '+str(Dx)+','+str(Dy)+' ' + Dx=Dx-(directionX*w+dirxN*firstVec+first*directionX) + Dy=Dy-(directionY*w+diryN*firstVec+first*directionY) + h+='L '+str(Dx)+','+str(Dy)+' ' + Dx=Dx-dirxN*secondVec + Dy=Dy-diryN*secondVec + h+='L '+str(Dx)+','+str(Dy)+' ' + group.add(getLine(h)) + if n%2: + if n==1 and numDividers>0 and isDivider: # draw slots for dividers to slot into each other + for m in range(1,int(numDividers)+1): + Dx=vectorX+-directionY*dividerSpacing*m-dividerEdgeOffsetX + Dy=vectorY+directionX*dividerSpacing*m-dividerEdgeOffsetY + h='M '+str(Dx)+','+str(Dy)+' ' + Dx=Dx+directionX*(first+length/2) + Dy=Dy+directionY*(first+length/2) + h+='L '+str(Dx)+','+str(Dy)+' ' + Dx=Dx+dirxN*thickness + Dy=Dy+diryN*thickness + h+='L '+str(Dx)+','+str(Dy)+' ' + Dx=Dx-directionX*(first+length/2) + Dy=Dy-directionY*(first+length/2) + h+='L '+str(Dx)+','+str(Dy)+' ' + Dx=Dx-dirxN*thickness + Dy=Dy-diryN*thickness + h+='L '+str(Dx)+','+str(Dy)+' ' + group.add(getLine(h)) + # draw the gap + vectorX=vectorX+directionX*gapWidth+dirxN*firstVec+first*directionX + vectorY=vectorY+directionY*gapWidth+diryN*firstVec+first*directionY + s+='L '+str(vectorX)+','+str(vectorY)+' ' + # draw the starting edge of the tab + s+=dimpleStr(secondVec,vectorX,vectorY,directionX,directionY,dirxN,diryN,1,isTab) + vectorX=vectorX+dirxN*secondVec + vectorY=vectorY+diryN*secondVec + s+='L '+str(vectorX)+','+str(vectorY)+' ' + else: + # draw the tab + vectorX=vectorX+directionX*tabWidth+dirxN*firstVec + vectorY=vectorY+directionY*tabWidth+diryN*firstVec + s+='L '+str(vectorX)+','+str(vectorY)+' ' + # draw the ending edge of the tab + s+=dimpleStr(secondVec,vectorX,vectorY,directionX,directionY,dirxN,diryN,-1,isTab) + vectorX=vectorX+dirxN*secondVec + vectorY=vectorY+diryN*secondVec + s+='L '+str(vectorX)+','+str(vectorY)+' ' + (secondVec,firstVec)=(-secondVec,-firstVec) # swap tab direction + first=0 + + #finish the line off + s+='L '+str(rootX+endOffsetX*thickness+directionX*length)+','+str(rootY+endOffsetY*thickness+directionY*length)+' ' + if isTab and numDividers>0 and tabSymmetry==0 and not isDivider: # draw last for divider joints in side walls + for m in range(1,int(numDividers)+1): + Dx=vectorX + Dy=vectorY+directionX*dividerSpacing*m + h='M '+str(Dx)+','+str(Dy)+' ' + Dx=rootX+endOffsetX*thickness+directionX*length + Dy=Dy+directionY*tabWidth+diryN*firstVec+first*directionY + h+='L '+str(Dx)+','+str(Dy)+' ' + Dx=Dx+dirxN*secondVec + Dy=Dy+diryN*secondVec + h+='L '+str(Dx)+','+str(Dy)+' ' + Dx=vectorX + Dy=Dy-(directionY*tabWidth+diryN*firstVec+first*directionY) + h+='L '+str(Dx)+','+str(Dy)+' ' + Dx=Dx-dirxN*secondVec + Dy=Dy-diryN*secondVec + h+='L '+str(Dx)+','+str(Dy)+' ' + group.add(getLine(h)) + group.add(getLine(s)) + return s + + +class BoxMaker(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument('--schroff',type=int,default=0,help='Enable Schroff mode') + pars.add_argument('--rail_height',type=float,default=10.0,help='Height of rail') + pars.add_argument('--rail_mount_depth',type=float,default=17.4,help='Depth at which to place hole for rail mount bolt') + pars.add_argument('--rail_mount_centre_offset',type=float, default=0.0,help='How far toward row centreline to offset rail mount bolt (from rail centreline)') + pars.add_argument('--rows',type=int,default=0,help='Number of Schroff rows') + pars.add_argument('--hp',type=int,default=0,help='Width (TE/HP units) of Schroff rows') + pars.add_argument('--row_spacing',type=float,default=10.0,help='Height of rail') + pars.add_argument('--unit', default='mm',help='Measure Units') + pars.add_argument('--inside',type=int,default=0,help='Int/Ext Dimension') + pars.add_argument('--length',type=float,default=100,help='Length of Box') + pars.add_argument('--width',type=float,default=100,help='Width of Box') + pars.add_argument('--depth',type=float,default=100,help='Height of Box') + pars.add_argument('--tab',type=float,default=25,help='Nominal Tab Width') + pars.add_argument('--equal',type=int,default=0,help='Equal/Prop Tabs') + pars.add_argument('--tabsymmetry',type=int,default=0,help='Tab style') + pars.add_argument('--dimpleheight',type=float,default=0,help='Tab Dimple Height') + pars.add_argument('--dimplelength',type=float,default=0,help='Tab Dimple Tip Length') + pars.add_argument('--hairline',type=int,default=0,help='Line Thickness') + pars.add_argument('--thickness',type=float,default=10,help='Thickness of Material') + pars.add_argument('--kerf',type=float,default=0.5,help='Kerf (width) of cut') + pars.add_argument('--clearance',type=float,default=0.01,help='Clearance of joints') + pars.add_argument('--style',type=int,default=25,help='Layout/Style') + pars.add_argument('--spacing',type=float,default=25,help='Part Spacing') + pars.add_argument('--boxtype',type=int,default=25,help='Box type') + pars.add_argument('--div_l',type=int,default=25,help='Dividers (Length axis)') + pars.add_argument('--div_w',type=int,default=25,help='Dividers (Width axis)') + pars.add_argument('--keydiv',type=int,default=3,help='Key dividers into walls/floor') + + def effect(self): + global group,nomTab,equalTabs,tabSymmetry,dimpleHeight,dimpleLength,thickness,correction,divx,divy,hairline,linethickness,keydivwalls,keydivfloor + + # Get access to main SVG document element and get its dimensions. + svg = self.document.getroot() + + # Get the attributes: + widthDoc = self.svg.unittouu(svg.get('width')) + heightDoc = self.svg.unittouu(svg.get('height')) + + # Get script's option values. + hairline=self.options.hairline + unit=self.options.unit + inside=self.options.inside + schroff=self.options.schroff + + # Set the line thickness + if hairline: + linethickness=self.svg.unittouu('0.002in') + else: + linethickness=1 + + if schroff: + rows=self.options.rows + rail_height=self.svg.unittouu(str(self.options.rail_height)+unit) + row_centre_spacing=self.svg.unittouu(str(122.5)+unit) + row_spacing=self.svg.unittouu(str(self.options.row_spacing)+unit) + rail_mount_depth=self.svg.unittouu(str(self.options.rail_mount_depth)+unit) + rail_mount_centre_offset=self.svg.unittouu(str(self.options.rail_mount_centre_offset)+unit) + rail_mount_radius=self.svg.unittouu(str(2.5)+unit) + + ## minimally different behaviour for schroffmaker.inx vs. boxmaker.inx + ## essentially schroffmaker.inx is just an alternate interface with different + ## default settings, some options removed, and a tiny amount of extra logic + if schroff: + ## schroffmaker.inx + X = self.svg.unittouu(str(self.options.hp * 5.08) + unit) + # 122.5mm vertical distance between mounting hole centres of 3U Schroff panels + row_height = rows * (row_centre_spacing + rail_height) + # rail spacing in between rows but never between rows and case panels + row_spacing_total = (rows - 1) * row_spacing + Y = row_height + row_spacing_total + else: + ## boxmaker.inx + X = self.svg.unittouu( str(self.options.length) + unit ) + Y = self.svg.unittouu( str(self.options.width) + unit ) + + Z = self.svg.unittouu( str(self.options.rail_height) + unit ) + thickness = self.svg.unittouu( str(self.options.thickness) + unit ) + nomTab = self.svg.unittouu( str(self.options.tab) + unit ) + equalTabs=self.options.equal + tabSymmetry=self.options.tabsymmetry + dimpleHeight=self.options.dimpleheight + dimpleLength=self.options.dimplelength + kerf = self.svg.unittouu( str(self.options.kerf) + unit ) + clearance = self.svg.unittouu( str(self.options.clearance) + unit ) + layout=self.options.style + spacing = self.svg.unittouu( str(self.options.spacing) + unit ) + boxtype = self.options.boxtype + divx = self.options.div_l + divy = self.options.div_w + keydivwalls = 0 if self.options.keydiv == 3 or self.options.keydiv == 1 else 1 + keydivfloor = 0 if self.options.keydiv == 3 or self.options.keydiv == 2 else 1 + + if inside: # if inside dimension selected correct values to outside dimension + X+=thickness*2 + Y+=thickness*2 + Z+=thickness*2 + + correction=kerf-clearance + + # check input values mainly to avoid python errors + # TODO restrict values to *correct* solutions + # TODO restrict divisions to logical values + error=0 + + if min(X,Y,Z)==0: + inkex.errormsg('Error: Dimensions must be non zero') + error=1 + if max(X,Y,Z)>max(widthDoc,heightDoc)*10: # crude test + inkex.errormsg('Error: Dimensions Too Large') + error=1 + if min(X,Y,Z)<3*nomTab: + inkex.errormsg('Error: Tab size too large') + error=1 + if nomTabmin(X,Y,Z)/3: # crude test + inkex.errormsg('Error: Material too thick') + error=1 + if correction>min(X,Y,Z)/3: # crude test + inkex.errormsg('Error: Kerf/Clearence too large') + error=1 + if spacing>max(X,Y,Z)*10: # crude test + inkex.errormsg('Error: Spacing too large') + error=1 + if spacing 0=holes 1=tabs + # tabbed= 0=no tabs 1=tabs on this side + # (sides: a=top, b=right, c=bottom, d=left) + # pieceType: 1=XY, 2=XZ, 3=ZY + tpFace=1 + bmFace=1 + ftFace=2 + bkFace=2 + ltFace=3 + rtFace=3 + + def reduceOffsets(aa, start, dx, dy, dz): + for ix in range(start+1,len(aa)): + (s,x,y,z) = aa[ix] + aa[ix] = (s-1, x-dx, y-dy, z-dz) + + # note first two pieces in each set are the X-divider template and Y-divider template respectively + pieces=[] + if layout==1: # Diagramatic Layout + rr = deepcopy([row0, row1z, row2]) + cc = deepcopy([col0, col1z, col2xz, col3xzz]) + if not hasFt: reduceOffsets(rr, 0, 0, 0, 1) # remove row0, shift others up by Z + if not hasLt: reduceOffsets(cc, 0, 0, 0, 1) + if not hasRt: reduceOffsets(cc, 2, 0, 0, 1) + if hasBk: pieces.append([cc[1], rr[2], X,Z, bkTabInfo, bkTabbed, bkFace]) + if hasLt: pieces.append([cc[0], rr[1], Z,Y, ltTabInfo, ltTabbed, ltFace]) + if hasBm: pieces.append([cc[1], rr[1], X,Y, bmTabInfo, bmTabbed, bmFace]) + if hasRt: pieces.append([cc[2], rr[1], Z,Y, rtTabInfo, rtTabbed, rtFace]) + if hasTp: pieces.append([cc[3], rr[1], X,Y, tpTabInfo, tpTabbed, tpFace]) + if hasFt: pieces.append([cc[1], rr[0], X,Z, ftTabInfo, ftTabbed, ftFace]) + elif layout==2: # 3 Piece Layout + rr = deepcopy([row0, row1y]) + cc = deepcopy([col0, col1z]) + if hasBk: pieces.append([cc[1], rr[1], X,Z, bkTabInfo, bkTabbed, bkFace]) + if hasLt: pieces.append([cc[0], rr[0], Z,Y, ltTabInfo, ltTabbed, ltFace]) + if hasBm: pieces.append([cc[1], rr[0], X,Y, bmTabInfo, bmTabbed, bmFace]) + elif layout==3: # Inline(compact) Layout + rr = deepcopy([row0]) + cc = deepcopy([col0, col1x, col2xx, col3xxz, col4, col5]) + if not hasTp: reduceOffsets(cc, 0, 1, 0, 0) # remove col0, shift others left by X + if not hasBm: reduceOffsets(cc, 1, 1, 0, 0) + if not hasLt: reduceOffsets(cc, 2, 0, 0, 1) + if not hasRt: reduceOffsets(cc, 3, 0, 0, 1) + if not hasBk: reduceOffsets(cc, 4, 1, 0, 0) + if hasBk: pieces.append([cc[4], rr[0], X,Z, bkTabInfo, bkTabbed, bkFace]) + if hasLt: pieces.append([cc[2], rr[0], Z,Y, ltTabInfo, ltTabbed, ltFace]) + if hasTp: pieces.append([cc[0], rr[0], X,Y, tpTabInfo, tpTabbed, tpFace]) + if hasBm: pieces.append([cc[1], rr[0], X,Y, bmTabInfo, bmTabbed, bmFace]) + if hasRt: pieces.append([cc[3], rr[0], Z,Y, rtTabInfo, rtTabbed, rtFace]) + if hasFt: pieces.append([cc[5], rr[0], X,Z, ftTabInfo, ftTabbed, ftFace]) + + for idx, piece in enumerate(pieces): # generate and draw each piece of the box + (xs,xx,xy,xz)=piece[0] + (ys,yx,yy,yz)=piece[1] + x=xs*spacing+xx*X+xy*Y+xz*Z # root x co-ord for piece + y=ys*spacing+yx*X+yy*Y+yz*Z # root y co-ord for piece + dx=piece[2] + dy=piece[3] + tabs=piece[4] + a=tabs>>3&1; b=tabs>>2&1; c=tabs>>1&1; d=tabs&1 # extract tab status for each side + tabbed=piece[5] + atabs=tabbed>>3&1; btabs=tabbed>>2&1; ctabs=tabbed>>1&1; dtabs=tabbed&1 # extract tabbed flag for each side + xspacing=(X-thickness)/(divy+1) + yspacing=(Y-thickness)/(divx+1) + xholes = 1 if piece[6]<3 else 0 + yholes = 1 if piece[6]!=2 else 0 + wall = 1 if piece[6]>1 else 0 + floor = 1 if piece[6]==1 else 0 + railholes = 1 if piece[6]==3 else 0 + + group = newGroup(self) + + if schroff and railholes: + log("rail holes enabled on piece %d at (%d, %d)" % (idx, x+thickness,y+thickness)) + log("abcd = (%d,%d,%d,%d)" % (a,b,c,d)) + log("dxdy = (%d,%d)" % (dx,dy)) + rhxoffset = rail_mount_depth + thickness + if idx == 1: + rhx=x+rhxoffset + elif idx == 3: + rhx=x-rhxoffset+dx + else: + rhx=0 + log("rhxoffset = %d, rhx= %d" % (rhxoffset, rhx)) + rystart=y+(rail_height/2)+thickness + if rows == 1: + log("just one row this time, rystart = %d" % rystart) + rh1y=rystart+rail_mount_centre_offset + rh2y=rh1y+(row_centre_spacing-rail_mount_centre_offset) + group.add(getCircle(rail_mount_radius,(rhx,rh1y))) + group.add(getCircle(rail_mount_radius,(rhx,rh2y))) + else: + for n in range(0,rows): + log("drawing row %d, rystart = %d" % (n+1, rystart)) + # if holes are offset (eg. Vector T-strut rails), they should be offset + # toward each other, ie. toward the centreline of the Schroff row + rh1y=rystart+rail_mount_centre_offset + rh2y=rh1y+row_centre_spacing-rail_mount_centre_offset + group.add(getCircle(rail_mount_radius,(rhx,rh1y))) + group.add(getCircle(rail_mount_radius,(rhx,rh2y))) + rystart+=row_centre_spacing+row_spacing+rail_height + + # generate and draw the sides of each piece + side(group,(x,y),(d,a),(-b,a),atabs * (-thickness if a else thickness),dx,(1,0),a,0,(keydivfloor|wall) * (keydivwalls|floor) * divx*yholes*atabs,yspacing) # side a + side(group,(x+dx,y),(-b,a),(-b,-c),btabs * (thickness if b else -thickness),dy,(0,1),b,0,(keydivfloor|wall) * (keydivwalls|floor) * divy*xholes*btabs,xspacing) # side b + if atabs: + side(group,(x+dx,y+dy),(-b,-c),(d,-c),ctabs * (thickness if c else -thickness),dx,(-1,0),c,0,0,0) # side c + else: + side(group,(x+dx,y+dy),(-b,-c),(d,-c),ctabs * (thickness if c else -thickness),dx,(-1,0),c,0,(keydivfloor|wall) * (keydivwalls|floor) * divx*yholes*ctabs,yspacing) # side c + if btabs: + side(group,(x,y+dy),(d,-c),(d,a),dtabs * (-thickness if d else thickness),dy,(0,-1),d,0,0,0) # side d + else: + side(group,(x,y+dy),(d,-c),(d,a),dtabs * (-thickness if d else thickness),dy,(0,-1),d,0,(keydivfloor|wall) * (keydivwalls|floor) * divy*xholes*dtabs,xspacing) # side d + + if idx==0: + if not keydivwalls: + a=b=c=d=1 + atabs=btabs=ctabs=dtabs=0 + y=4*spacing+1*Y+2*Z # root y co-ord for piece + for n in range(0,divx): # generate X dividers + group = newGroup(self) + x=n*(spacing+X) # root x co-ord for piece + side(group,(x,y),(d,a),(-b,a),keydivfloor*atabs*(-thickness if a else thickness),dx,(1,0),a,1,0,0) # side a + side(group,(x+dx,y),(-b,a),(-b,-c),keydivwalls*btabs*(thickness if keydivwalls*b else -thickness),dy,(0,1),b,1,divy*xholes,xspacing) # side b + side(group,(x+dx,y+dy),(-b,-c),(d,-c),keydivfloor*ctabs*(thickness if c else -thickness),dx,(-1,0),c,1,0,0) # side c + side(group,(x,y+dy),(d,-c),(d,a),keydivwalls*dtabs*(-thickness if d else thickness),dy,(0,-1),d,1,0,0) # side d + elif idx==1: + y=5*spacing+1*Y+3*Z # root y co-ord for piece + for n in range(0,divy): # generate Y dividers + group = newGroup(self) + x=n*(spacing+Z) # root x co-ord for piece + side(group,(x,y),(d,a),(-b,a),keydivwalls*atabs*(-thickness if a else thickness),dx,(1,0),a,1,divx*yholes,yspacing) # side a + side(group,(x+dx,y),(-b,a),(-b,-c),keydivfloor*btabs*(thickness if b else -thickness),dy,(0,1),b,1,0,0) # side b + side(group,(x+dx,y+dy),(-b,-c),(d,-c),keydivwalls*ctabs*(thickness if c else -thickness),dx,(-1,0),c,1,0,0) # side c + side(group,(x,y+dy),(d,-c),(d,a),keydivfloor*dtabs*(-thickness if d else thickness),dy,(0,-1),d,1,0,0) # side d + +if __name__ == '__main__': + BoxMaker().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/boxmaker_tabbed/schroffmaker.inx b/extensions/fablabchemnitz/boxmaker_tabbed/schroffmaker.inx new file mode 100644 index 00000000..2a9f647b --- /dev/null +++ b/extensions/fablabchemnitz/boxmaker_tabbed/schroffmaker.inx @@ -0,0 +1,48 @@ + + + Box Maker - Schroff + fablabchemnitz.de.box_maker_schroff + mm + 1 + 1 + 1 + 84 + 0.0 + 0.0 + 65 + + + 10.0 + 17.4 + 0.0 + 0.0 + + 3.0 + + + + + + 3.0 + 0.1 + 0.01 + 0 + 0 + + 1 + 2 + + 1.0 + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/buxtronix_living_hinges/buxtronix_living_hinges.inx b/extensions/fablabchemnitz/buxtronix_living_hinges/buxtronix_living_hinges.inx new file mode 100644 index 00000000..1731336a --- /dev/null +++ b/extensions/fablabchemnitz/buxtronix_living_hinges/buxtronix_living_hinges.inx @@ -0,0 +1,68 @@ + + + Buxtronix Living Hinges + fablabchemnitz.de.buxtronix_living_hinges + + + images/straight-lattice.png + 20 + 2.0 + 0.0 + + + + images/diamond-lattice.png + 20 + 4.0 + 0.5 + + + + images/cross-lattice.png + 20 + 6.0 + + + + images/wavy-lattice.png + 29 + 4.0 + + + + + images/about.png + + + + 100 + 100 + + + + + + + + false + + all + + + + + + + + diff --git a/extensions/fablabchemnitz/buxtronix_living_hinges/buxtronix_living_hinges.py b/extensions/fablabchemnitz/buxtronix_living_hinges/buxtronix_living_hinges.py new file mode 100755 index 00000000..6a527e79 --- /dev/null +++ b/extensions/fablabchemnitz/buxtronix_living_hinges/buxtronix_living_hinges.py @@ -0,0 +1,450 @@ +#!/usr/bin/env python3 + +import inkex +cut_colour = '#ff0000' +engrave_colour = '#0000ff' + +class Generator(object): + """A generic generator, subclassed for each different lattice style.""" + + def __init__(self, x, y, width, height, stroke_width, svg, e_length, p_spacing): + self.x = x + self.y = y + self.width = width + self.height = height + self.stroke_width = stroke_width + self.svg = svg + self.canvas = self.svg.get_current_layer() + self.e_length = e_length + self.e_height = 0 # Provided by sub-classes. + self.p_spacing = p_spacing + self.fixed_commands = "" + + def draw_one(self, x, y): + return "M %f,%f %s" % (x, y, self.fixed_commands) + + def parameter_text(self): + return "length: %.f spacing: %.1f" % ( + self.e_length, + self.p_spacing, + ) + + def draw_swatch(self): + border = self.canvas.add(inkex.PathElement()) + # Curve radius + cr = self.svg.unittouu('10mm') + # Swatch padding + sp = self.svg.unittouu('30mm') + # Handle length + hl = cr/2 + path_command = ( + 'm %f,%f l %f,%f c %f,%f %f,%f %f,%f' + 'l %f,%f c %f,%f %f,%f %f,%f ' + 'l %f,%f c %f,%f %f,%f %f,%f ' + 'l %f,%f c %f,%f %f,%f %f,%f ') % ( + cr, 0, + + self.width - 2*cr, 0, + + hl, 0, + cr, cr-hl, + cr, cr, + + 0, self.height - 2*cr + 1.5*sp, + + 0, cr/2, + 0-cr+hl, cr, + 0-cr, cr, + + 0-self.width + 2*cr, 0, + + 0-hl, 0, + 0-cr, 0-cr+hl, + 0-cr, 0-cr, + + 0, 0-self.height - 1.5*sp + 2*cr, + + 0, 0-hl, + cr-hl, 0-cr, + cr, 0-cr + ) + + style = { + "stroke": cut_colour, + "stroke-width": str(self.stroke_width), + "fill": "none", + } + border.update(**{"style": style, "inkscape:label": "lattice_border", "d": path_command}) + + c = self.canvas.add(inkex.Circle( + style=str(inkex.Style(style)), + cx=str(cr), + cy=str(cr), + r=str(self.svg.unittouu('4mm')))) + + self.y += sp + + text_style = { + 'fill': engrave_colour, + 'font-size': '9px', + 'font-family': 'sans-serif', + 'text-anchor': 'middle', + 'text-align': 'center', + } + text = self.canvas.add( + inkex.TextElement( + style=str(inkex.Style(text_style)), + x=str(self.x + self.width/2), + y=str(self.y - sp/2))) + text.text = "Style: %s" % self.name + + text_style['font-size'] = "3px" + text = self.canvas.add( + inkex.TextElement( + style=str(inkex.Style(text_style)), + x=str(self.x + self.width/2), + y=str(self.y - sp/4))) + text.text = self.parameter_text() + + text = self.canvas.add( + inkex.TextElement( + style=str(inkex.Style(text_style)), + x=str(self.x + self.width/2), + y=str(self.y +self.height + sp/4))) + text.text = "https://github.com/buxtronix/living-hinge" + + def generate(self, swatch): + if swatch: + self.draw_swatch() + # Round width/height to integer number of patterns. + self.e_length = self.width / max(round(self.width / self.e_length), 1.0) + self.e_height = self.height / max(round(self.height / self.e_height), 1.0) + self.prerender() + style = { + "stroke": cut_colour, + "stroke-width": str(self.stroke_width), + "fill": "none", + } + path_command = "" + y = self.y + while y < self.y + self.height: + x = self.x + while x < self.x + self.width: + path_command = "%s %s " % (path_command, self.draw_one(x, y)) + x += self.e_length + y += self.e_height + + link = self.canvas.add(inkex.PathElement()) + link.update(**{"style": style, "inkscape:label": "lattice", "d": path_command}) + link.description("%s hinge %s" % (self.name, self.parameter_text())) + + +class StraightLatticeGenerator(Generator): + def __init__(self, *args, **kwargs): + super(StraightLatticeGenerator, self).__init__(*args) + self.link_gap = kwargs['link_gap'] + self.e_height = 2 * self.p_spacing + self.name = "straight" + + def prerender(self): + self.e_height = 2 * self.p_spacing + w = self.e_length + lg = self.link_gap + + if lg < 0.1: + # Single line for 0 height gap. + self.fixed_commands = " m %f,%f h %f m %f,%f h %f m %f,%f h %f" % ( + 0, self.e_height / 2, + w * 2 / 5, + + 0 - w / 5, 0 - self.e_height / 2, + w * 3 / 5, + + 0 - w / 5, self.e_height / 2, + w * 2 / 5, + ) + else: + self.fixed_commands = ( + " m %f,%f h %f v %f h %f" + " m %f,%f h %f v %f h %f v %f" + " m %f,%f h %f v %f h %f " + ) % ( + 0, + self.e_height / 2, + w * 2 / 5, + lg, + 0 - w * 2 / 5, + w / 8, + 0 - lg - self.e_height / 2, + w * 3 / 4, + lg, + 0 - w * 3 / 4, + 0 - lg, + w * 7 / 8, + lg + self.e_height / 2, + 0 - w * 2 / 5, + 0 - lg, + w * 2 / 5, + ) + + def parameter_text(self): + text = super(StraightLatticeGenerator, self).parameter_text() + return "%s element_height: %.1f" % (text, self.link_gap) + + +class DiamondLatticeGenerator(Generator): + def __init__(self, *args, **kwargs): + super(DiamondLatticeGenerator, self).__init__(*args) + self.e_height = self.p_spacing + self.diamond_curve = kwargs['diamond_curve'] + self.name = "diamond" + + def prerender(self): + h = self.e_height + w = self.e_length + # Diamond curve + dc = 0-self.diamond_curve + # Horiz handle length. + hhl = abs(dc * w * 0.2) + # Endpoint horiz handle length + ehhl = hhl if dc > 0 else 0 + # Vert handle length + vhl = abs(dc * h / 8) if dc < 0 else 0 + # Left + self.fixed_commands = " m %f,%f c %f,%f %f,%f %f,%f c %f,%f %f,%f %f,%f " % ( + 0, h / 4, + + hhl, 0, + w * 0.4 - ehhl, h / 4 - vhl, + w * 0.4, h / 4, + + 0 - ehhl, vhl, + 0 - (w * 0.4 - hhl), h / 4, + 0 - w * 0.4, h / 4, + ) + + # Bottom + self.fixed_commands = "%s m %f,%f c %f,%f %f,%f %f,%f s %f,%f %f,%f " % ( + self.fixed_commands, + w * 0.1, h / 4, + + ehhl, 0 - vhl, + w * 0.4 - hhl, 0 - h / 4, + w * 0.4, 0 - h / 4, + + w * 0.4 - ehhl, h / 4 - vhl, + w * 0.4, h / 4, + ) + + # Top + self.fixed_commands = "%s m %f,%f c %f,%f %f,%f %f,%f s %f,%f %f,%f " % ( + self.fixed_commands, + 0 - w * 0.8, 0 - h, + + ehhl, vhl, + w * 0.4 - hhl, h / 4, + w * 0.4, h / 4, + + w * 0.4 - ehhl, 0 - h / 4 + vhl, + w * 0.4, 0 - h / 4, + ) + + # Right + self.fixed_commands = "%s m %f,%f c %f,%f %f,%f %f,%f c %f,%f %f,%f %f,%f " % ( + self.fixed_commands, + w * 0.1, h *0.75, + + 0 - hhl, 0, + (0 - w * 0.4) + ehhl, 0 - h / 4 + vhl, + 0 - w * 0.4, 0 - h / 4, + + ehhl, 0 - vhl, + w * 0.4 - hhl, 0 - h / 4, + w * 0.4, 0 - h / 4, + ) + + def draw_one(self, x, y): + return "M %f,%f %s" % (x, y, self.fixed_commands) + + def parameter_text(self): + text = super(DiamondLatticeGenerator, self).parameter_text() + return "%s curve: %.1f" % (text, self.diamond_curve) + + +class CrossLatticeGenerator(Generator): + def __init__(self, *args): + super(CrossLatticeGenerator, self).__init__(*args) + self.e_height = self.p_spacing + self.name = "cross" + + def prerender(self): + l = self.e_length + h = self.e_height + self.fixed_commands = ( + "m %f,%f l %f,%f l %f,%f m %f,%f l %f,%f" + "m %f,%f l %f,%f l %f,%f l %f,%f " + "m %f,%f l %f,%f l %f,%f l %f,%f " + "m %f,%f l %f,%f l %f,%f m %f,%f l %f,%f" + ) % ( + # Left + 0, h * 0.5, + l * 0.2, 0, + l * 0.2, 0 - h * 0.3, + 0 - l * 0.2, h * 0.3, + l * 0.2, h * 0.3, + # Top + 0 - l * 0.3, 0 - h * 0.5, + l * 0.2, 0 - h * 0.3, + l * 0.4, 0, + l * 0.2, h * 0.3, + # Bottom + 0, h * 0.4, + 0 - l * 0.2, h * 0.3, + 0 - l * 0.4, 0, + 0 - l * 0.2, 0 - h * 0.3, + # Right + l * 0.5, 0 - h * 0.5, + l * 0.2, h * 0.3, + 0 - l * 0.2, h * 0.3, + l * 0.2, 0 - h * 0.3, + l * 0.2, 0, + ) + + +class WavyLatticeGenerator(Generator): + def __init__(self, *args, **kwargs): + super(WavyLatticeGenerator, self).__init__(*args) + self.e_height = self.p_spacing + self.name = "wavy" + + def prerender(self): + h = self.e_height + w = self.e_length + self.fixed_commands = ( + " m %f,%f h %f c %f,%f %f,%f %f,%f h %f " + "m %f,%f h %f c %f,%f %f,%f %f,%f h %f " + ) % ( + 0, h, # Start of element (left) + w * 0.1, # Short horiz line. + + w * 0.1, 0, # Control 1 + w * 3 / 40, 0 - h / 2, # Control 2 + w * 0.2, 0 - h / 2, # Curve top. + + w * 0.175, # Top horiz line. + + 0 - w * 0.1, 0 - h / 2, # Move to higher line. + w * 0.3, # Long higher horiz line. + + w / 5, 0, # Control 1 + w / 10, h, # Control 2 + w * 0.25, h, # Curve down. + + w * 0.075, # End horiz line. + ) + + +class BuxtronixLivingHinges(inkex.EffectExtension): + """ + Extension to create laser cut bend lattices. + """ + + def add_arguments(self, pars): + pars.add_argument("--tab", help="Bend pattern to generate") + pars.add_argument("--unit", help="Units for dimensions") + pars.add_argument("--swatch", type=inkex.Boolean, help="Draw as a swatch card") + + pars.add_argument("--width", type=float, default=300, help="Width of pattern") + pars.add_argument("--height", type=float, default=100, help="Height of pattern") + + pars.add_argument("--sl_length", type=int, default=20, help="Length of links") + pars.add_argument("--sl_gap", type=float, default=0.5, help="Gap between links") + pars.add_argument("--sl_spacing", type=float, default=20, help="Spacing of links") + + pars.add_argument("--dl_curve", type=float, default=0.5, help="Curve of diamonds") + pars.add_argument("--dl_length", type=float, default=24, help="Length of diamonds") + pars.add_argument("--dl_spacing", type=float, default=4, help="Spacing of diamonds") + + pars.add_argument("--cl_length", type=float, default=24, help="Length of combs") + pars.add_argument("--cl_spacing", type=float, default=6, help="Spacing of combs") + + pars.add_argument("--wl_length", type=int, default=20, help="Length of links") + pars.add_argument("--wl_interval", type=int, default=30, help="Interval between links") + pars.add_argument("--wl_spacing", type=float, default=0.5, help="Spacing between links") + + def convert(self, value): + return self.svg.unittouu(str(value) + self.options.unit) + + def convertmm(self, value): + return self.svg.unittouu('%fmm' % value) + + def effect(self): + stroke_width = self.svg.unittouu("0.2mm") + self.options.width = self.convert(self.options.width) + self.options.height = self.convert(self.options.height) + + def draw_one(x, y): + if self.options.tab == "straight_lattice": + generator = StraightLatticeGenerator( + x, + y, + self.options.width, + self.options.height, + stroke_width, + self.svg, + self.convertmm(self.options.sl_length), + self.convertmm(self.options.sl_spacing), + link_gap=self.convertmm(self.options.sl_gap), + ) + elif self.options.tab == "diamond_lattice": + generator = DiamondLatticeGenerator( + x, + y, + self.options.width, + self.options.height, + stroke_width, + self.svg, + self.convertmm(self.options.dl_length), + self.convertmm(self.options.dl_spacing), + diamond_curve=self.options.dl_curve, + ) + elif self.options.tab == "cross_lattice": + generator = CrossLatticeGenerator( + x, + y, + self.options.width, + self.options.height, + stroke_width, + self.svg, + self.convertmm(self.options.cl_length), + self.convertmm(self.options.cl_spacing), + ) + elif self.options.tab == "wavy_lattice": + generator = WavyLatticeGenerator( + x, + y, + self.options.width, + self.options.height, + stroke_width, + self.svg, + self.convertmm(self.options.wl_length), + self.convertmm(self.options.wl_spacing), + ) + else: + inkex.errormsg("Select a valid pattern tab before rendering.") + return + generator.generate(self.options.swatch) + + if self.options.swatch or not self.svg.selected: + draw_one(0, 0) + else: + for elem in self.svg.selected.values(): + # Determine width and height based on the selected object's bounding box. + bbox = elem.bounding_box() + self.options.width = self.svg.unittouu(bbox.width) + self.options.height = self.svg.unittouu(bbox.height) + x = self.svg.unittouu(bbox.x.minimum) + y = self.svg.unittouu(bbox.y.minimum) + draw_one(x, y) + +BuxtronixLivingHinges().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/buxtronix_living_hinges/images/about.png b/extensions/fablabchemnitz/buxtronix_living_hinges/images/about.png new file mode 100644 index 00000000..b4bfd54a Binary files /dev/null and b/extensions/fablabchemnitz/buxtronix_living_hinges/images/about.png differ diff --git a/extensions/fablabchemnitz/buxtronix_living_hinges/images/cross-lattice.png b/extensions/fablabchemnitz/buxtronix_living_hinges/images/cross-lattice.png new file mode 100644 index 00000000..41264d6f Binary files /dev/null and b/extensions/fablabchemnitz/buxtronix_living_hinges/images/cross-lattice.png differ diff --git a/extensions/fablabchemnitz/buxtronix_living_hinges/images/diamond-lattice.png b/extensions/fablabchemnitz/buxtronix_living_hinges/images/diamond-lattice.png new file mode 100644 index 00000000..d03cf75b Binary files /dev/null and b/extensions/fablabchemnitz/buxtronix_living_hinges/images/diamond-lattice.png differ diff --git a/extensions/fablabchemnitz/buxtronix_living_hinges/images/diamond-lattice.svg b/extensions/fablabchemnitz/buxtronix_living_hinges/images/diamond-lattice.svg new file mode 100644 index 00000000..2d738b9a --- /dev/null +++ b/extensions/fablabchemnitz/buxtronix_living_hinges/images/diamond-lattice.svg @@ -0,0 +1,143 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extensions/fablabchemnitz/buxtronix_living_hinges/images/straight-lattice.png b/extensions/fablabchemnitz/buxtronix_living_hinges/images/straight-lattice.png new file mode 100644 index 00000000..dd911d59 Binary files /dev/null and b/extensions/fablabchemnitz/buxtronix_living_hinges/images/straight-lattice.png differ diff --git a/extensions/fablabchemnitz/buxtronix_living_hinges/images/wavy-lattice.png b/extensions/fablabchemnitz/buxtronix_living_hinges/images/wavy-lattice.png new file mode 100644 index 00000000..d3a0d94b Binary files /dev/null and b/extensions/fablabchemnitz/buxtronix_living_hinges/images/wavy-lattice.png differ diff --git a/extensions/fablabchemnitz/can_generator/can_generator.inx b/extensions/fablabchemnitz/can_generator/can_generator.inx new file mode 100644 index 00000000..a296cfc3 --- /dev/null +++ b/extensions/fablabchemnitz/can_generator/can_generator.inx @@ -0,0 +1,29 @@ + + + Can Generator + fablabchemnitz.de.can_generator + + + 30 + 5 + 50 + 22.5 + 3.6 + false + + + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/can_generator/can_generator.py b/extensions/fablabchemnitz/can_generator/can_generator.py new file mode 100644 index 00000000..6b3361d4 --- /dev/null +++ b/extensions/fablabchemnitz/can_generator/can_generator.py @@ -0,0 +1,371 @@ +#! /usr/bin/env python3 +''' +@author: mini@revollo.de +member of the erfindergarden + +Inkscape Erweiterung - Dosen Generator +13.01.2019 + +Danke an neon22 https://github.com/Neon22/inkscape_extension_template +Nach seiner Anleitung konnte ich dieses Programm erstellen. + +''' + +import inkex +from lxml import etree +from math import * + +__version__ = '0.2' + +def points_to_svgd(p, close = True): + """ convert list of points (x,y) pairs + into a closed SVG path list + """ + f = p[0] + p = p[1:] + svgd = 'M %.2f,%.2f ' % f + for x in p: + svgd += ' %.4f,%.4f' % x + if close: + svgd += 'z' + return svgd + +def punkte_erstellen(punkte, x, y): + ###Schreibt die aktuellen Koordinaten in die Punkteliste + punkte.append((x, y)) + +class CanGenerator(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument("--height", type=int, default = 50, help="Höhe der Dose") + pars.add_argument("--overhang", type=int, default = 40, help="Überstand des Deckels") + pars.add_argument("--diameter", type=int, default = 40, help="diameter der Dose") + pars.add_argument("--angle", type=float, default = 22.5, help="angle der segments") + pars.add_argument("--material", type=float, default = 3.6, help="Materialstärke") + pars.add_argument("--bottom", type=inkex.Boolean, default = False, help="Deckel und bottom?") + pars.add_argument("--active-tab", default='title', help="Active tab.") + + self.deckel_punkte = [] + self.deckel_pfad = [] + self.seite_punkte = [] + self.seite_pfad = [] + self.ausschnitt_punkte = [] + self.ausschnitt_pfad = [] + self.ausschnitt_nummer = 0 + self.einschnitt_punkte = [] + self.einschnitt_pfad = [] + self.einschnitt_nummer = 0 + self.einschnitt_breite = 0.2 #Abstand zwischen den beiden Einschnittlinien + + + def pfad_erstellen(self, pfad, punkte): + # Die gesammelten x und y Koordinaten der Punkte werden in Pfade (d) umgewandelt. + + pfad.append(points_to_svgd(punkte)) + del punkte[:] + + def pfade_schreiben(self): + ###Schreibt alle Pfade nacheinander in die Szene + + path_stroke = '#101010' # Farbe für die Dose + path_fill = 'none' # keine Füllung, nur eine Linie + path_stroke_width = '0.4' # can also be in form '0.6mm' + + for nummer in range(len(self.pfade)): + # define style using basic dictionary + pfad_attribute = {'id': "pfad%d"%nummer, 'stroke': path_stroke, + 'fill': path_fill, 'stroke-width': path_stroke_width, + 'd': self.pfade[nummer]} + # add path to scene + pfad = etree.SubElement(self.topgroup, inkex.addNS('path','svg'), pfad_attribute ) + + def deckel_erstellen(self): + ###Erstellt alle Punkte für den Aussenkreis des Deckels. + angle = self.angle + + segments = int(360 / angle) + for segment_nr in range(segments + 1): + #y berechnen = Gegenkathete + y = sin(radians(angle)) * self.radius_mit_overhang * -1 + #Innenangle berechnen + beta = 180 - 90 - angle + #Ankathete berechnen + b = sin(radians(beta)) * self.radius_mit_overhang + #x berechnen + x = self.radius_mit_overhang - b - self.overhang + punkte_erstellen(self.deckel_punkte, x, y) + angle += self.angle + self.deckel_schreiben() + + def deckel_schreiben(self): + ###Schreibt den Deckel ohne Ausschnitte in die Szene + + path_stroke = '#0000ff' # Farbe für den Rand + path_fill = 'none' # keine Füllung, nur eine Linie + path_stroke_width = '0.6' # can also be in form '0.6mm' + #Punkte zu Pfad umwandeln + self.deckel_pfad = points_to_svgd(self.deckel_punkte, False) + + # define style using basic dictionary + deckel_attribute = {'id': "rand", 'stroke': path_stroke, 'fill': path_fill, + 'stroke-width': path_stroke_width , 'x': '0', 'y': '0', 'd': self.deckel_pfad} + # add path to scene + deckel = etree.SubElement(self.topgroup, inkex.addNS('path','svg'), deckel_attribute ) + + def ausschnitt_erstellen(self): + ###Erstellt alle Punkte für den Aussenkreis des Deckels. + + angle = self.angle + + for segment_nr in range(self.segments): + + ###Punkt 1 wird berechnet + #y berechnen = Gegenkathete + y = sin(radians(angle)) * self.radius * -1 + #Innenangle berechnen + beta = 180 - 90 - angle + #Ankathete berechnen + b = sin(radians(beta)) * self.radius + #x berechnen + x = self.radius - b + punkte_erstellen(self.ausschnitt_punkte, x, y) + angle += self.angle + + ###Punkt 2 wird berechnet + #y berechnen = Gegenkathete + y = sin(radians(angle)) * self.radius * -1 + #Innenangle berechnen + beta = 180 - 90 - angle + #Ankathete berechnen + b = sin(radians(beta)) * self.radius + #x berechnen + x = self.radius - b + + punkte_erstellen(self.ausschnitt_punkte, x, y) + + ###Punkt 3 wird berechnet + + alpha = angle - (self.angle / 2) + beta = 180 - 90 - alpha + y += sin(radians(alpha)) * self.material + x += sin(radians(beta)) * self.material + angle += self.angle + punkte_erstellen(self.ausschnitt_punkte, x, y) + + ### Punkt 4 wird berechnet + alpha = 180 - alpha + beta = 180 - 90 - alpha + x -= sin(radians(alpha)) * self.ausschnitt_breite + y -= sin(radians(beta)) * self.ausschnitt_breite + punkte_erstellen(self.ausschnitt_punkte, x, y) + # + self.ausschnitt_schreiben() + del self.ausschnitt_punkte[:] + + def ausschnitt_schreiben(self): + ###Schreibt den Ausschnitte in die Szene + + path_stroke = '#ff0000' # Farbe für den Rand + path_fill = 'none' # keine Füllung, nur eine Linie + path_stroke_width = '0.6' # can also be in form '0.6mm' + #Punkte zu Pfad umwandeln + self.ausschnitt_pfad = points_to_svgd(self.ausschnitt_punkte, True) + + # define style using basic dictionary + ausschnitt_attribute = {'id': "ausschnitt_%s"%self.ausschnitt_nummer, 'stroke': path_stroke, 'fill': path_fill, + 'stroke-width': path_stroke_width , 'x': '0', 'y': '0', 'd': self.ausschnitt_pfad} + self.ausschnitt_nummer += 1 + # add path to scene + ausschnitt = etree.SubElement(self.topgroup, inkex.addNS('path','svg'), ausschnitt_attribute ) + + + def seite_erstellen(self): + ###Erstellt die Seite der Dose mit den Zinken und den Einschnitten### + + x = 0 + y = self.radius_mit_overhang + 10 + punkte_erstellen(self.seite_punkte, x, y) + for item in range(int(self.segments / 2)): + y -= self.material + punkte_erstellen(self.seite_punkte, x, y) + x += self.ausschnitt_breite + punkte_erstellen(self.seite_punkte, x, y) + y += self.material + punkte_erstellen(self.seite_punkte, x, y) + x += self.ausschnitt_breite + punkte_erstellen(self.seite_punkte, x, y) + if self.bottom == False: + y += self.height - self.material + punkte_erstellen(self.seite_punkte, x, y) + x -= self.segments * self.ausschnitt_breite + punkte_erstellen(self.seite_punkte, x, y) + y -= self.height - self.material + punkte_erstellen(self.seite_punkte, x, y) + else: + y += self.height - self.material - self.material + punkte_erstellen(self.seite_punkte, x, y) + for item in range(int(self.segments / 2)): + x -= self.ausschnitt_breite + punkte_erstellen(self.seite_punkte, x, y) + y += self.material + punkte_erstellen(self.seite_punkte, x, y) + x -= self.ausschnitt_breite + punkte_erstellen(self.seite_punkte, x, y) + y -= self.material + punkte_erstellen(self.seite_punkte, x, y) + y -= self.height + punkte_erstellen(self.seite_punkte, x, y) + + + + + + self.seite_schreiben() + + def seite_schreiben(self): + ###Schreibt die Seite in die Szene + + path_stroke = '#0000ff' # Farbe für den Rand + path_fill = 'none' # keine Füllung, nur eine Linie + path_stroke_width = '0.6' # can also be in form '0.6mm' + #Punkte zu Pfad umwandeln + self.seite_pfad = points_to_svgd(self.seite_punkte, True) + + # define style using basic dictionary + seite_attribute = {'id': "seite", 'stroke': path_stroke, 'fill': path_fill, + 'stroke-width': path_stroke_width , 'x': '0', 'y': '0', 'd': self.seite_pfad} + # add path to scene + seite = etree.SubElement(self.topgroup, inkex.addNS('path','svg'), seite_attribute ) + + def einschnitte_erstellen(self): + ###Erstellt die Einschnitte in die Seite + + x = self.einschnitt_breite / -2 + y = self.radius_mit_overhang + 10 - self.material + + for segment_nr in range(self.segments - 1): + + ###Punkt 1 wird berechnet + x += self.ausschnitt_breite + punkte_erstellen(self.einschnitt_punkte, x, y) + ###Punkt 2 wird berechnet + x += self.einschnitt_breite + punkte_erstellen(self.einschnitt_punkte, x, y) + ###Punkt 3 wird berechnet + y += self.height + punkte_erstellen(self.einschnitt_punkte, x, y) + ### Punkt 4 wird berechnet + x -= self.einschnitt_breite + punkte_erstellen(self.einschnitt_punkte, x, y) + y -= self.height + + self.einschnitte_schreiben() + del self.einschnitt_punkte[:] + + def einschnitte_schreiben(self): + ###Schreibt die Einschnitte in die Seite + + path_stroke = '#00ff00' # Farbe für die Einschnitte + path_fill = 'none' # keine Füllung, nur eine Linie + path_stroke_width = '0.6' # can also be in form '0.6mm' + #Punkte zu Pfad umwandeln + self.einschnitt_pfad = points_to_svgd(self.einschnitt_punkte, True) + + # define style using basic dictionary + einschnitt_attribute = {'id': "einschnitt_%s"%self.einschnitt_nummer, 'stroke': path_stroke, 'fill': path_fill, + 'stroke-width': path_stroke_width , 'x': '0', 'y': '0', 'd': self.einschnitt_pfad} + self.einschnitt_nummer += 1 + # add path to scene + einschnitt = etree.SubElement(self.undergroup, inkex.addNS('path','svg'), einschnitt_attribute ) + +### ------------------------------------------------------------------- +### This is your main function and is called when the extension is run. + + def effect(self): + ###Hauptprogramm + + + # holt die Parameter aus Inkscape + self.height = self.options.height + self.diameter = self.options.diameter + self.overhang = self.options.overhang + self.radius = self.diameter / 2 + self.radius_mit_overhang = self.radius + self.overhang + self.angle = self.options.angle + self.bottom = self.options.bottom + self.material = self.options.material + self.segments = int(360 / self.angle) + #Ausschnittbreite errechnen + y = sin(radians(self.angle)) * self.radius + beta = 180 - 90 - self.angle + b = sin(radians(beta)) * self.radius + x = self.radius - b + self.ausschnitt_breite = sqrt((x * x) + (y * y)) + # what page are we on + page_id = self.options.active_tab # sometimes wrong the very first time + + #Eigenschaften der SVG auslesen und die Größe der Dose anpassen + svg = self.document.getroot() + #viewbox_size = '0 0 ' + str(self.breite) + ' ' + str(self.height) + #svg.set('viewBox', viewbox_size) + #svg.set('height', str(self.height)) + #svg.set('width', str(self.breite)) + + # Embed the path in a group to make animation easier: + # Be sure to examine the internal structure by looking in the xml editor inside inkscape + + # Make a nice useful name + g_attribs = { inkex.addNS('label','inkscape'): 'dosen-gruppe', 'id': "dose",} + # add the group to the document's current layer + self.topgroup = etree.SubElement(self.svg.get_current_layer(), 'g', g_attribs ) + # Create SVG Path under this top level group + # Make a nice useful name + g_attribs = { inkex.addNS('label','inkscape'): 'einschnitt-gruppe', 'id': "einschnitte",} + # add the group to the document's current layer + self.undergroup = etree.SubElement(self.svg.get_current_layer(), 'g', g_attribs ) + # Create SVG Path under this top level group + + self.deckel_erstellen() + self.ausschnitt_erstellen() + self.seite_erstellen() + self.einschnitte_erstellen() + + + # Make a nice useful name + text_g_attribs = { inkex.addNS('label','inkscape'): 'dosen-gruppe', 'id': "Branding",} + # add the group to the document's current layer + textgroup = etree.SubElement(self.svg.get_current_layer(), 'g', text_g_attribs ) + + line_style = {'font-size': '10px', 'font-style':'normal', 'font-weight': 'normal', + 'fill': '#ff0000', 'font-family': 'Consolas', + 'text-anchor': 'start'} + branding_line_attribs = {inkex.addNS('label','inkscape'): 'branding-text', + 'id': 'front text', + 'style': str(inkex.Style(line_style)), + 'x': str(0), + 'y': str(0) + } + + branding_line = etree.SubElement(textgroup, inkex.addNS('text','svg'), branding_line_attribs) + branding_line.text = 'dosen-generator by mini revollo member of the erfindergarden' + + # Make a nice useful name + einschnitt_text_g_attribs = { inkex.addNS('label','inkscape'): 'einschnitt-gruppe', 'id': "Einschnitte_Text",} + # add the group to the document's current layer + textgroup = etree.SubElement(self.svg.get_current_layer(), 'g', einschnitt_text_g_attribs ) + + line_style = {'font-size': '5px', 'font-style':'normal', 'font-weight': 'normal', + 'fill': '#00ff00', 'font-family': 'Consolas', + 'text-anchor': 'start'} + einschnitt_line_attribs = {inkex.addNS('label','inkscape'): 'Einschnitte_text', + 'id': 'front text', + 'style': str(inkex.Style(line_style)), + 'x': str(0), + 'y': str(self.radius_mit_overhang + self.height / 2) + } + + branding_line = etree.SubElement(textgroup, inkex.addNS('text','svg'), einschnitt_line_attribs) + branding_line.text = 'Die Einschnitte nur zu 70 Prozent in das Material lasern' + +if __name__ == '__main__': + CanGenerator().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/card_layout_guides/card_layout_guides.inx b/extensions/fablabchemnitz/card_layout_guides/card_layout_guides.inx new file mode 100644 index 00000000..2a231164 --- /dev/null +++ b/extensions/fablabchemnitz/card_layout_guides/card_layout_guides.inx @@ -0,0 +1,29 @@ + + + Cards Layout Guides + fablabchemnitz.de.card_layout_guides + + + + + 60 + 30 + + + + + 2 + 2 + 15 + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/card_layout_guides/card_layout_guides.py b/extensions/fablabchemnitz/card_layout_guides/card_layout_guides.py new file mode 100644 index 00000000..b4fd0d5a --- /dev/null +++ b/extensions/fablabchemnitz/card_layout_guides/card_layout_guides.py @@ -0,0 +1,480 @@ +#!/usr/bin/env python3 + + +# Copyright 2016 Luke Phillips (lukerazor@hotmail.com) +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +#along with this program; if not, write to the Free Software +#Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +# Extension dirs +# linux:~/.config/inkscape/extensions +# windows: [Drive]:\Program Files\Inkscape\share\extensions + +from lxml import etree +import inkex +import copy +import math + +FOLD_GAP = 5 +CROP_GAP = 2 +CROP_LENGTH = 3 + +inkex.NSS[u'cs'] = u'http://www.razorfoss.org/cardlayoutguides/' + +def PrintDebug(string): + inkex.utils.debug( _(str(string)) ) + +def RoundAndDeduplicatePoints(points): + return sorted(list(set(map(lambda x: round(x, 3), points)))) + +class Point(): + def __init__(self, x, y): + self.x = x + self.y = y + + def rotate(self, angle, origin): + """ + Rotate a point counterclockwise by a given angle around a given origin. + + The angle should be given in degrees. + """ + rads = math.radians(angle) + newX = origin.x + math.cos(rads) * (self.x - origin.x) - math.sin(rads) * (self.y - origin.y) + newY = origin.y + math.sin(rads) * (self.x - origin.x) + math.cos(rads) * (self.y - origin.y) + + return Point(newX, newY) + + def add(self, point): + return Point(self.x + point.x, self.y + point.y) + + @staticmethod + def parsePoint(pointString): + x, y = map(lambda v: float(v), pointString.split(",")) + return Point(x, y) + + @staticmethod + def parse(pointString, orientationString=None): + p1 = Point.parsePoint(pointString) + p = Point(p1.x, p1.y) + + if orientationString != None: + po = Point.parsePoint(orientationString) + p = p1.add(po.rotate(270, Point(0, 0))) + + return p + +class LineGeneratorBase(object): + def __init__(self, card_width, card_height, card_margin, bleed_margin, pageWidth, pageHeight, page_margin, unitConverterFunc): + self.UnitConverterFunc = unitConverterFunc + self.card_width = card_width + self.card_height = card_height + self.card_margin = card_margin + self.bleed_margin = bleed_margin + + self.PageWidth = pageWidth + self.PageHeight = pageHeight + self.page_margin = page_margin + + self.ContainerWidth = -1 + self.ContainerHeight = -1 + + self.GuideOffsetsWithFold = [ + 0, + self.bleed_margin, self.card_margin, self.card_height - 2*self.card_margin, self.card_margin, self.bleed_margin, + 2*FOLD_GAP, + self.bleed_margin, self.card_margin, self.card_height - 2*self.card_margin, self.card_margin, self.bleed_margin + ] + + self.GuideOffsetsNoFold = [ + 0, + self.bleed_margin, self.card_margin, + self.card_width - 2*self.card_margin, + self.card_margin, self.bleed_margin + ] + + def CalcPageLeftMargin(self): + return (self.PageWidth - self.ContentWidth) / 2.0 + + def CalcPageBottomMargin(self): + return (self.PageHeight - self.ContentHeight) / 2.0 + + def DrawGuide(self, xmlParent, xpos, ypos): + posString = "{},{}".format(xpos, ypos) + attribs = {'position': posString, 'orientation': posString} + + etree.SubElement(xmlParent, inkex.addNS('guide',"sodipodi"), attribs) + + def ConvertPoint(self, p): + # convert point into svg approriate values, including catering for inkscapes "alternative" axis sytem ie 0, 0 is bottom left not top left + newX = self.UnitConverterFunc("{}mm".format(p.x)) + newY = self.PageHeight - self.UnitConverterFunc("{}mm".format(p.y)) + + return Point(newX, newY) + + def DrawLine(self, xmlParent, p1, p2): + cp1 = self.ConvertPoint(p1) + cp2 = self.ConvertPoint(p2) + + pathStr = "M {},{} {}, {}".format(cp1.x, cp1.y, cp2.x, cp2.y) + style = {'stroke': '#000000', 'stroke-width': self.UnitConverterFunc('0.25mm'), 'fill': 'none'} + attribs = {'style': str(inkex.Style(style)), 'd': pathStr} + + etree.SubElement(xmlParent, inkex.addNS('path','svg'), attribs ) + + def DrawVerticleGuides(self, xmlParent, positions, gap): + curPos = self.CalcPageLeftMargin() + lastPos = -1 + while curPos + self.ContainerWidth <= self.PageWidth - self.page_margin: + for offset in positions: + curPos += offset + if curPos != lastPos: # don't double draw + self.DrawGuide(xmlParent, curPos, 0) + + lastPos = curPos + + curPos += gap + + def DrawHorizontalGuides(self, xmlParent, positions, gap): + curPos = self.CalcPageBottomMargin() + lastPos = -1 + while curPos + self.ContainerHeight <= self.PageHeight - self.page_margin: + for offset in positions: + curPos += offset + if curPos != lastPos: # don't double draw + self.DrawGuide(xmlParent, 0, curPos) + + lastPos = curPos + + curPos += gap + + def GenerateFoldLines(self, xmlParent): + lines = self.GetFoldLinePositions() + + for line in lines: + self.DrawLine(xmlParent, line[0], line[1]) + + def GenerateCropMarks(self, xmlParent): + lines = self.GetCropMarkLines() + + for line in lines: + self.DrawLine(xmlParent, line[0], line[1]) + + @staticmethod + def CreateLineGenerator(layout, orientation, card_width, card_height, card_margin, bleed_margin, pageWidth, pageHeight, page_margin, unitConverterFunc): + if layout == "SIMPLE": + return SimpleGridLineGenerator(orientation, card_width, card_height, card_margin, bleed_margin, pageWidth, pageHeight, page_margin, unitConverterFunc) + + if orientation == "HORIZONTAL": + return LineGeneratorForHorizontalCards(card_width, card_height, card_margin, bleed_margin, pageWidth, pageHeight, page_margin, unitConverterFunc) + + return LineGeneratorForVerticalCards(card_width, card_height, card_margin, bleed_margin, pageWidth, pageHeight, page_margin, unitConverterFunc) + +class SimpleGridLineGenerator(LineGeneratorBase): + def __init__(self, orientation, card_width, card_height, card_margin, bleed_margin, pageWidth, pageHeight, page_margin, unitConverterFunc): + if orientation == "HORIZONTAL": + super(SimpleGridLineGenerator, self).__init__(card_height, card_width, card_margin, bleed_margin, pageWidth, pageHeight, page_margin, unitConverterFunc) + else: + super(SimpleGridLineGenerator, self).__init__(card_width, card_height, card_margin, bleed_margin, pageWidth, pageHeight, page_margin, unitConverterFunc) + + self.ContainerWidth = self.card_width + 2 * bleed_margin + self.ContainerHeight = self.card_height + 2 * bleed_margin + + # num across + # num down + self.NumContainersAcross = int((self.PageWidth - 2*self.page_margin) // self.ContainerWidth) # round down division + self.NumContainersDown = int((self.PageHeight - 2*self.page_margin) // self.ContainerHeight) # round down division + + # content sizes + self.ContentWidth = self.NumContainersAcross * self.ContainerWidth + self.ContentHeight = self.NumContainersDown * self.ContainerHeight + + def GenerateGuides(self, xmlParent): + horizontalOffsets = self.GuideOffsetsNoFold = [ + 0, + self.bleed_margin, self.card_margin, + self.card_width - 2*self.card_margin, + self.card_margin, self.bleed_margin + ] + + verticalOffsets = self.GuideOffsetsNoFold = [ + 0, + self.bleed_margin, self.card_margin, + self.card_height - 2*self.card_margin, + self.card_margin, self.bleed_margin + ] + + self.DrawVerticleGuides(xmlParent, horizontalOffsets, 0) + self.DrawHorizontalGuides(xmlParent, verticalOffsets, 0) + + def GetFoldLinePositions(self): + return [] # no fold lines in simple grid + + def GetCropMarkLines(self): + lines = [] + + leftMargin = self.CalcPageLeftMargin() + bottomMargin = self.CalcPageBottomMargin() + + #determine all horizontal crop marks, duplicates possible + # figure out the ypos + horizontal_ypos = [] + for idx in range(self.NumContainersDown): + bottomY = self.bleed_margin + topY = bottomY + self.card_height + containerOffset = bottomMargin + idx*self.ContainerHeight + + horizontal_ypos.append(containerOffset + bottomY) + horizontal_ypos.append(containerOffset + topY) + + horizontal_ypos = RoundAndDeduplicatePoints(horizontal_ypos) # remove duplicate positions + + horizontal_xpos = [leftMargin - CROP_GAP, self.PageWidth - leftMargin + CROP_GAP + CROP_LENGTH] + for xpos in horizontal_xpos: + for ypos in horizontal_ypos: + lines.append([ + Point(xpos - CROP_LENGTH, ypos), + Point(xpos, ypos) + ]) + + #determine all vertical crop marks, duplicates possible + # figure out the xpos + vertical_xpos = [] + for idx in range(self.NumContainersAcross): + leftX = self.bleed_margin + rightX = leftX + self.card_width + containerOffset = leftMargin + idx*self.ContainerWidth + + vertical_xpos.append(containerOffset + leftX) + vertical_xpos.append(containerOffset + rightX) + + vertical_xpos = RoundAndDeduplicatePoints(vertical_xpos) # remove duplicate positions + + vertical_ypos = [bottomMargin - CROP_GAP, self.PageHeight - bottomMargin + CROP_GAP + CROP_LENGTH] + for xpos in vertical_xpos: + for ypos in vertical_ypos: + lines.append([ + Point(xpos, ypos), + Point(xpos, ypos - CROP_LENGTH) + ]) + + return lines + +class LineGeneratorForVerticalCards(LineGeneratorBase): + def __init__(self, card_width, card_height, card_margin, bleed_margin, pageWidth, pageHeight, page_margin, unitConverterFunc): + super(LineGeneratorForVerticalCards, self).__init__(card_width, card_height, card_margin, bleed_margin, pageWidth, pageHeight, page_margin, unitConverterFunc) + + self.ContainerWidth = card_width + 2*bleed_margin + self.ContainerHeight = 2*(card_height + 2*bleed_margin + FOLD_GAP) + + # num across + self.NumContainersAcross = int((self.PageWidth - 2*self.page_margin) // self.ContainerWidth) # round down division + + # num down + contentHeight = lambda n: n * self.ContainerHeight + (n - 1)*(2*FOLD_GAP) + workingHeight = self.PageHeight - 2*self.page_margin + + self.NumContainersDown = int(workingHeight // self.ContainerHeight) # round down division for nominal value + if contentHeight(self.NumContainersDown) > workingHeight: + self.NumContainersDown -= 1 + + # content sizes + self.ContentWidth = self.NumContainersAcross * self.ContainerWidth + self.ContentHeight = contentHeight(self.NumContainersDown) + + def GenerateGuides(self, xmlParent): + self.DrawVerticleGuides(xmlParent, self.GuideOffsetsNoFold, 0) + self.DrawHorizontalGuides(xmlParent, self.GuideOffsetsWithFold, 2*FOLD_GAP) + + def GetFoldLinePositions(self): + lines = [] + leftMargin = self.CalcPageLeftMargin() + + for idx in range(self.NumContainersDown): + foldY = self.CalcPageBottomMargin() + idx*(self.ContainerHeight + 2*FOLD_GAP) + self.ContainerHeight/2 + lines.append([Point(leftMargin, foldY), Point(self.PageWidth - leftMargin, foldY)]) + + return lines + + def GetCropMarkLines(self): + lines = [] + + leftMargin = self.CalcPageLeftMargin() + bottomMargin = self.CalcPageBottomMargin() + vertical_ypos = [] + # determine all of the hornzontal facing crop marks, no duplicates possible + for idx in range(self.NumContainersDown): + bottomY = self.bleed_margin + topY = bottomY + self.card_height + containerOffset = bottomMargin + idx*(self.ContainerHeight + 2*FOLD_GAP) + vertical_ypos += [ + containerOffset - CROP_GAP, + containerOffset + 2*self.bleed_margin + 2*self.card_margin + self.card_height + CROP_GAP + CROP_LENGTH + ] # stash for later + + for ypos in [containerOffset + bottomY, containerOffset + topY]: + for xpos in [leftMargin - CROP_GAP, self.PageWidth - leftMargin + CROP_GAP + CROP_LENGTH]: + lines.append([ + Point(xpos, ypos), + Point(xpos - CROP_LENGTH, ypos) + ]) + + #determine all vertical crop marks, duplicates possible + # figure out the xpos + vertical_xpos = [] + for idx in range(self.NumContainersAcross): + leftX = self.bleed_margin + rightX = leftX + self.card_width + containerOffset = leftMargin + idx*self.ContainerWidth + + vertical_xpos.append(containerOffset + leftX) + vertical_xpos.append(containerOffset + rightX) + + vertical_xpos = list(set(vertical_xpos)) # remove duplicate positions + + for xpos in vertical_xpos: + for ypos in vertical_ypos: + lines.append([ + Point(xpos, ypos), + Point(xpos, ypos - CROP_LENGTH) + ]) + + return lines + +class LineGeneratorForHorizontalCards(LineGeneratorBase): + def __init__(self, card_width, card_height, card_margin, bleed_margin, pageWidth, pageHeight, page_margin, unitConverterFunc): + super(LineGeneratorForHorizontalCards, self).__init__(card_width, card_height, card_margin, bleed_margin, pageWidth, pageHeight, page_margin, unitConverterFunc) + + self.ContainerWidth = 2*(card_height + 2 * bleed_margin + FOLD_GAP) + self.ContainerHeight = card_width + 2 * bleed_margin + + # num across + contentWidth = lambda n: n * self.ContainerWidth + (n - 1)*(2*FOLD_GAP) + workingWidth = self.PageWidth - 2*self.page_margin + + self.NumContainersAcross = int(workingWidth // self.ContainerWidth) # round down division for nominal value + if contentWidth(self.NumContainersAcross) > workingWidth: + self.NumContainersAcross -= 1 + + # num down + self.NumContainersDown = int((self.PageHeight - 2*self.page_margin) // self.ContainerHeight) # round down division + + # content sizes + self.ContentWidth = contentWidth(self.NumContainersAcross) + self.ContentHeight = self.NumContainersDown * self.ContainerHeight + + def GenerateGuides(self, xmlParent): + self.DrawVerticleGuides(xmlParent, self.GuideOffsetsWithFold, 2*FOLD_GAP) + self.DrawHorizontalGuides(xmlParent, self.GuideOffsetsNoFold, 0) + + def GetFoldLinePositions(self): + lines = [] + bottomMargin = self.CalcPageBottomMargin() + + for idx in range(self.NumContainersAcross): + foldX = self.CalcPageLeftMargin() + idx*(self.ContainerWidth + 2*FOLD_GAP) + self.ContainerWidth/2 + lines.append([Point(foldX, bottomMargin), Point(foldX, self.PageHeight - bottomMargin)]) + + return lines + + def GetCropMarkLines(self): + lines = [] + + leftMargin = self.CalcPageLeftMargin() + bottomMargin = self.CalcPageBottomMargin() + horizontal_xpos = [] + + # determine all of the vertical facing crop marks, no duplicates possible + for idx in range(self.NumContainersAcross): + leftX = self.bleed_margin + rightX = leftX + self.card_height + containerOffset = leftMargin + idx*(self.ContainerWidth + 2*FOLD_GAP) + horizontal_xpos += [ + containerOffset - CROP_GAP, + containerOffset + 2*self.bleed_margin + 2*self.card_margin + self.card_height + CROP_GAP + CROP_LENGTH + ] # stash for later + + for xpos in [containerOffset + leftX, containerOffset + rightX]: + for ypos in [bottomMargin - CROP_GAP, self.PageHeight - bottomMargin + CROP_GAP + CROP_LENGTH]: + lines.append([ + Point(xpos, ypos), + Point(xpos, ypos - CROP_LENGTH) + ]) + + #determine all horizontal crop marks, duplicates possible + # figure out the xpos + horizontal_ypos = [] + for idx in range(self.NumContainersDown): + bottomY = self.bleed_margin + topY = bottomY + self.card_width + containerOffset = bottomMargin + idx*self.ContainerHeight + + horizontal_ypos.append(containerOffset + bottomY) + horizontal_ypos.append(containerOffset + topY) + + horizontal_ypos = RoundAndDeduplicatePoints(horizontal_ypos) # remove duplicate positions + + for ypos in horizontal_ypos: + for xpos in horizontal_xpos: + lines.append([ + Point(xpos, ypos), + Point(xpos - CROP_LENGTH, ypos) + ]) + + return lines + +class CardLayoutGuides(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument('-l', '--layout') + pars.add_argument('-w', '--card_width', type = float) + pars.add_argument('-d', '--card_height', type = float) + pars.add_argument('-o', '--orientation') + pars.add_argument('-c', '--card_margin', type = float) + pars.add_argument('-b', '--bleed_margin', type = float) + pars.add_argument('-p', '--page_margin', type = float) + + def effect(self): + # find dimensions of page + pageWidth = self.svg.uutounit(self.svg.width, "mm") + pageHeight = self.svg.uutounit(self.svg.height, "mm") + + opt = self.options + + guideParent = self.document.xpath('//sodipodi:namedview',namespaces=inkex.NSS)[0] + + ### GUIDES + # remove all the existing guides + [node.delete() for node in self.document.xpath('//sodipodi:guide',namespaces=inkex.NSS)] + + # create the generator object + gen = LineGeneratorBase.CreateLineGenerator(opt.layout, opt.orientation, opt.card_width, opt.card_height, opt.card_margin, opt.bleed_margin, pageWidth, pageHeight, opt.page_margin, self.svg.unittouu) + + gen.GenerateGuides(guideParent) + + ### FOLD LINES + # remove any existing 'Crop marks' layer + [node.delete() for node in self.document.xpath("//svg:g[@inkscape:label='Crop Marks']",namespaces=inkex.NSS)] + + svg = self.document.xpath('//svg:svg', namespaces=inkex.NSS)[0] + layer = etree.SubElement(svg, inkex.addNS('g',"svg"), {}) + layer.set(inkex.addNS('label', 'inkscape'), "Crop Marks") + layer.set(inkex.addNS('groupmode', 'inkscape'), 'layer') + #layer.set(inkex.addNS('insensitive', 'sodipodi'), 'true') + + gen.GenerateFoldLines(layer) + + ### CROP MARKS + gen.GenerateCropMarks(layer) + +if __name__ == '__main__': + CardLayoutGuides().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/cartography_hatches_grains/hatches_grains.inx b/extensions/fablabchemnitz/cartography_hatches_grains/hatches_grains.inx new file mode 100644 index 00000000..564b806a --- /dev/null +++ b/extensions/fablabchemnitz/cartography_hatches_grains/hatches_grains.inx @@ -0,0 +1,81 @@ + + + Hatches And Grains + fablabchemnitz.de.hatches_and_grains + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/cartography_hatches_grains/hatches_grains.py b/extensions/fablabchemnitz/cartography_hatches_grains/hatches_grains.py new file mode 100644 index 00000000..b4bad268 --- /dev/null +++ b/extensions/fablabchemnitz/cartography_hatches_grains/hatches_grains.py @@ -0,0 +1,144 @@ +#!/bin/env python3 +# +# Copyright (C) 2020 Marc Jeanmougin, Laurent Porcheret +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA +# +# Thanks to Bénédicte Cuperly for reminding me to do this and for her feedback + + +""" Geography patterns """ + +import math +import inkex +from inkex import Pattern, PathElement, Circle, Rectangle, AbortExtension + +GRAIN_V="m 0 0 10 20 10 -20" +GRAIN_VI="m 0 20 10 -20 10 20" +GRAIN_PLUS="M 10 0 10 20 M 0 10 20 10" +GRAIN_X="M 0 0 20 20 M 0 20 20 0" + + +class Geography(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument('--tab', default='grains_page', help='grains_page or hatches_page') + pars.add_argument('--type', default='h', help='h|d') + pars.add_argument('--angle', default='0', help='angle') + pars.add_argument('--thickness', default='1', help='width') + pars.add_argument('--spacing', default='8', help='spacing between hatches') + pars.add_argument('--type_grain', default='grain_v', help='Shape of patterns (v^+xoO)') + pars.add_argument('--size', default='1', help='size of grain') + pars.add_argument('--hcolor', default=inkex.Color(255), type=inkex.Color, help='color of hatches') + pars.add_argument('--gcolor', default=inkex.Color(255), type=inkex.Color, help='color of grains') + + def effect(self): + #step 0: find desired id + i=self.get_id() + #step 1: add stuff in defs if not present + if self.svg.getElementById(i) is None: + #construct it + newNode = self.svg.defs.add(Pattern()) + self.construct(newNode) + + #step 2: assign + for node in self.svg.selection.values(): + node.style['fill'] = "url(#"+i+")" + node.set('fill', "url(#"+i+")") + + def construct(self, node): + if(self.options.tab == "grains_page"): + self.construct_grain(node) + else: + self.construct_hatch(node) + node.set('patternUnits', "userSpaceOnUse") + node.set('id', self.get_id()) + + def get_id(self): + if(self.options.tab=="grains_page"): + return "inkgeo_"+self.options.type_grain+"_"+self.options.size+"_"+str(int(self.options.gcolor)) + else: + return "inkgeo_"+self.options.type+"_"+self.options.angle+"_"+self.options.thickness+"_"+self.options.spacing+"_"+str(int(self.options.hcolor)) + + + def construct_grain(self, node): + size=str(math.sqrt(float(self.options.size))) + node.set('width', "100") + node.set('height', "100") + n1=0 + n2=0 + node.style="stroke-width:4;" + if self.options.type_grain == "grain_c" or self.options.type_grain == "grain_r": + n1 = node.add(Circle()) + n2 = node.add(Circle()) + n1.set('cx',10) + n1.set('cy',10) + n1.set('r',10) + n2.set('cx',10) + n2.set('cy',10) + n2.set('r',10) + if self.options.type_grain == "grain_c": + node.style.set_color(self.options.gcolor, 'stroke') + node.set('fill', "none") + else: + node.style.set_color(self.options.gcolor, 'stroke') + node.style.set_color(self.options.gcolor, 'fill') + else: + node.style.set_color(self.options.gcolor, 'stroke') + node.set('fill', "none") + #paths + n1 = node.add(PathElement()) + n2 = node.add(PathElement()) + if self.options.type_grain == "grain_v": + n1.set('d', GRAIN_V) + n2.set('d', GRAIN_V) + elif self.options.type_grain == "grain_m": + n1.set('d', GRAIN_VI) + n2.set('d', GRAIN_VI) + elif self.options.type_grain == "grain_p": + n1.set('d', GRAIN_PLUS) + n2.set('d', GRAIN_PLUS) + elif self.options.type_grain == "grain_x": + n1.set('d', GRAIN_X) + n2.set('d', GRAIN_X) + n1.set('transform', "translate(5,5)scale("+size+")") + n2.set('transform', "translate(55,55)scale("+size+")") + node.set('patternTransform', "scale(0.1)") + + def construct_hatch(self,node): + h = int(self.options.spacing)+int(self.options.thickness) + node.set('width', str(h)) + node.set('patternTransform', "rotate("+self.options.angle+")") + r = node.add(Rectangle()) + r.set('x', "0") + r.set('y', "0") + r.set('height', self.options.thickness) + r.style.set_color(self.options.hcolor, 'fill') + if self.options.type=="h": + node.set('height',str(h)) + r.set('width', str(h)) + else: + node.set('height',str(2*h)) + r.set('width', str(h/2)) + r2 = node.add(Rectangle()) + r2.set('x', str(h/2)) + r2.set('y', str(h)) + r2.set('width', str(h/2)) + r2.set('height', self.options.thickness) + r2.style.set_color(self.options.hcolor, 'fill') + + +if __name__ == '__main__': + Geography().run() diff --git a/extensions/fablabchemnitz/cartography_hatches_grains/locale/fr/LC_MESSAGES/hatches_grains.mo b/extensions/fablabchemnitz/cartography_hatches_grains/locale/fr/LC_MESSAGES/hatches_grains.mo new file mode 100644 index 00000000..46d34d30 Binary files /dev/null and b/extensions/fablabchemnitz/cartography_hatches_grains/locale/fr/LC_MESSAGES/hatches_grains.mo differ diff --git a/extensions/fablabchemnitz/cartography_hatches_grains/locale/fr/hatches_grains.po b/extensions/fablabchemnitz/cartography_hatches_grains/locale/fr/hatches_grains.po new file mode 100644 index 00000000..62ff9b42 --- /dev/null +++ b/extensions/fablabchemnitz/cartography_hatches_grains/locale/fr/hatches_grains.po @@ -0,0 +1,128 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: hatches_grains\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-09-28 11:27+0200\n" +"PO-Revision-Date: 2020-09-28 11:32+0200\n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Last-Translator: \n" +"Language-Team: \n" +"X-Generator: Poedit 2.3\n" + +#: hatches_grains.inx:3 +msgid "Hatches and grains" +msgstr "Hachures et grains" + +#: hatches_grains.inx:11 +msgid "Hatches" +msgstr "Hachures" + +#: hatches_grains.inx:12 +msgid "" +"\n" +"Create standardized hatches to differentiate or prioritize cartographic " +"objects. \n" +" " +msgstr "" +"\n" +"Crée des hachures standardisées pour différencier ou prioriser des objets " +"cartographiques.\n" +" " + +#: hatches_grains.inx:16 +msgid "Hatches settings" +msgstr "Paramètres de hachures" + +#: hatches_grains.inx:18 +msgid "Sort of hatches:" +msgstr "Type de hachures :" + +#: hatches_grains.inx:23 +msgid "Orientation:" +msgstr "Orientation :" + +#: hatches_grains.inx:30 +msgid "Thickness:" +msgstr "Épaisseur :" + +#: hatches_grains.inx:37 +msgid "Spacing:" +msgstr "Espacement :" + +#: hatches_grains.inx:49 hatches_grains.inx:50 +msgid "Hatches color" +msgstr "Couleur de hachures" + +#: hatches_grains.inx:55 +msgid "Grains" +msgstr "Grains" + +#: hatches_grains.inx:57 +msgid "" +"\n" +"Create standardized grains to differentiate or prioritize cartographic " +"objects.\n" +" " +msgstr "" +"\n" +"Crée des grains standardisées pour différencier ou prioriser des objets " +"cartographiques.\n" +" " + +#: hatches_grains.inx:61 +msgid "Grains settings" +msgstr "Paramètres de grains" + +#: hatches_grains.inx:63 +msgid "Grains:" +msgstr "Grains :" + +#: hatches_grains.inx:72 +msgid "Size:" +msgstr "Taille :" + +#: hatches_grains.inx:79 hatches_grains.inx:80 +msgid "Grain color" +msgstr "Couleur de grains" + +#: hatches_grains.inx:86 +msgid "Information" +msgstr "Information" + +#: hatches_grains.inx:87 +msgid "" +"\n" +"This mapping module is intended for the community of geographers and " +"cartographers.\n" +"\n" +"It makes it possible to create visual variables like \"hatch\" or \"grain\" " +"on surface or point implantation, in order to differentiate or prioritize " +"the cartographic information.\n" +"\n" +"Laurent Porcheret \n" +"Géographe - cartographe / Geographer - cartographer\n" +"Sorbonne université - INSPE de Paris\n" +"V.15.01.2020" +msgstr "" +"\n" +"Ce module est destiné à la communauté des géographes et des cartographes.\n" +"Il permet de créer des variables visuelles telles que des hachures ou des " +"grains sur des surfaces ou des ponctuels, pour différencier ou hiérarchiser " +"des informations cartographiques.\n" +"\n" +"Laurent Porcheret \n" +"Géographe - cartographe / Geographer - cartographer\n" +"Sorbonne université - INSPE de Paris" + +#: hatches_grains.inx:102 +msgid "Cartography" +msgstr "Cartographie" diff --git a/extensions/fablabchemnitz/cartography_hatches_grains/locale/hatches_grains.pot b/extensions/fablabchemnitz/cartography_hatches_grains/locale/hatches_grains.pot new file mode 100644 index 00000000..59fabdca --- /dev/null +++ b/extensions/fablabchemnitz/cartography_hatches_grains/locale/hatches_grains.pot @@ -0,0 +1,110 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-09-28 11:33+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: hatches_grains.inx:3 +msgid "Hatches and grains" +msgstr "" + +#: hatches_grains.inx:11 +msgid "Hatches" +msgstr "" + +#: hatches_grains.inx:12 +msgid "" +"\n" +"Create standardized hatches to differentiate or prioritize cartographic " +"objects. \n" +" " +msgstr "" + +#: hatches_grains.inx:16 +msgid "Hatches settings" +msgstr "" + +#: hatches_grains.inx:18 +msgid "Sort of hatches:" +msgstr "" + +#: hatches_grains.inx:23 +msgid "Orientation:" +msgstr "" + +#: hatches_grains.inx:30 +msgid "Thickness:" +msgstr "" + +#: hatches_grains.inx:37 +msgid "Spacing:" +msgstr "" + +#: hatches_grains.inx:49 hatches_grains.inx:50 +msgid "Hatches color" +msgstr "" + +#: hatches_grains.inx:55 +msgid "Grains" +msgstr "" + +#: hatches_grains.inx:57 +msgid "" +"\n" +"Create standardized grains to differentiate or prioritize cartographic " +"objects.\n" +" " +msgstr "" + +#: hatches_grains.inx:61 +msgid "Grains settings" +msgstr "" + +#: hatches_grains.inx:63 +msgid "Grains:" +msgstr "" + +#: hatches_grains.inx:72 +msgid "Size:" +msgstr "" + +#: hatches_grains.inx:79 hatches_grains.inx:80 +msgid "Grain color" +msgstr "" + +#: hatches_grains.inx:86 +msgid "Information" +msgstr "" + +#: hatches_grains.inx:87 +msgid "" +"\n" +"This mapping module is intended for the community of geographers and " +"cartographers.\n" +"\n" +"It makes it possible to create visual variables like \"hatch\" or \"grain\" " +"on surface or point implantation, in order to differentiate or prioritize " +"the cartographic information.\n" +"\n" +"Laurent Porcheret \n" +"Géographe - cartographe / Geographer - cartographer\n" +"Sorbonne université - INSPE de Paris\n" +"V.15.01.2020" +msgstr "" + +#: hatches_grains.inx:102 +msgid "Cartography" +msgstr "" diff --git a/extensions/fablabchemnitz/chain_paths/chain_paths.inx b/extensions/fablabchemnitz/chain_paths/chain_paths.inx new file mode 100644 index 00000000..ef3c672a --- /dev/null +++ b/extensions/fablabchemnitz/chain_paths/chain_paths.inx @@ -0,0 +1,29 @@ + + + Chain Paths + fablabchemnitz.de.chain_paths + 0.01 + + + + + + + + false + true + + + + + path + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/chain_paths/chain_paths.py b/extensions/fablabchemnitz/chain_paths/chain_paths.py new file mode 100644 index 00000000..d8c309fd --- /dev/null +++ b/extensions/fablabchemnitz/chain_paths/chain_paths.py @@ -0,0 +1,281 @@ +#!/usr/bin/env python3 +# +# Inkscape extension making long continuous paths from shorter pieces. +# (C) 2015 juewei@fabmail.org +# +# code snippets visited to learn the extension 'effect' interface: +# - convert2dashes.py +# - http://github.com/jnweiger/inkscape-silhouette +# - http://github.com/jnweiger/inkscape-gears-dev +# - http://sourceforge.net/projects/inkcut/ +# - http://code.google.com/p/inkscape2tikz/ +# - http://code.google.com/p/eggbotcode/ +# +# 2015-11-15 jw, V0.1 -- initial draught +# 2015-11-16 jw, V0.2 -- fixed endpoints after chaining. +# 2015-11-16 jw, V0.3 -- all possible chains connected. Yeah +# 2015-11-16 jw, V0.4 -- gui fully functional. +# 2015-11-26 jw, V0.5 -- HACK to resolve some self-reversing path segments. +# https://github.com/fablabnbg/inkscape-chain-paths/issues/1 +# 2020-04-10 jw, V0.6 -- Close paths correctly. Self reversing path hack was too eager. +# Workaround for cubicsuperpath.parsePath/formatPath limitation. +# Started python3 compatibility. +# 2020-05-27 vi, V0.7 -- Upgrade to Inkscape 1.0. Write debug info to inkex debug dialog. + +from __future__ import print_function + +__version__ = '0.7' # Keep in sync with chain_paths.inx ca line 22 +__author__ = 'Juergen Weigert ' +__credits__ = ['Juergen Weigert', 'Veronika Irvine'] + +import sys +import math +import re +import inkex +from inkex.paths import CubicSuperPath, Path +from optparse import SUPPRESS_HELP +debug = False + +class ChainPaths(inkex.EffectExtension): + + def __init__(self): + inkex.Effect.__init__(self) + + # For handling an SVG viewbox attribute, we will need to know the + # values of the document's width and height attributes as well + # as establishing a transform from the viewbox to the display. + self.chain_epsilon = 0.01 + self.snap_ends = True + self.close_loops = True + self.segments_done = {} + self.min_missed_distance_sq = None + self.chained_count = 0 + + self.arg_parser.add_argument('-V', '--version', type=inkex.Boolean, default=False, help = 'Just print version number ("' + __version__ + '") and exit.') + self.arg_parser.add_argument('-s', '--snap_ends', type=inkex.Boolean, default=True, help='snap end-points together when connecting') + self.arg_parser.add_argument('-c', '--close_loops', type=inkex.Boolean, default=True, help='close loops (start/end of the same path)') + self.arg_parser.add_argument('-u', '--units', default="mm", help="measurement unit for epsilon") + self.arg_parser.add_argument('-e', '--chain_epsilon', type=float, default=0.01, help="Max. distance to connect [mm]") + + def version(self): + return __version__ + def author(self): + return __author__ + + def calc_unit_factor(self, units='mm'): + """ return the scale factor for all dimension conversions. + - The document units are always irrelevant as + everything in inkscape is expected to be in 90dpi pixel units + """ + dialog_units = self.svg.unittouu(str(1.0)+units) + self.unit_factor = 1.0 / dialog_units + return self.unit_factor + + def reverse_segment(self, seg): + r = [] + for s in reversed(seg): + # s has 3 elements: handle1, point, handle2 + # Swap handles. + s.reverse() + r.append(s) + return r + + def set_segment_done(self, id, n, msg=''): + if not id in self.segments_done: + self.segments_done[id] = {} + self.segments_done[id][n] = True + if debug: inkex.utils.debug("done "+str(id)+" "+str(n)+" "+msg) + + def is_segment_done(self, id, n): + if not id in self.segments_done: + return False + if n in self.segments_done[id]: + return True + return False + + def link_segments(self, seg1, seg2): + if self.snap_ends: + seg = seg1[:-1] + p1 = seg1[-1] + p2 = seg2[0] + # fuse p1 and p2 to create one new point: + # first handle from p1, point coordinates averaged, second handle from p2 + seg.append([ [ p1[0][0] , p1[0][1] ], + [ (p1[1][0] + p2[1][0]) * .5, (p1[1][1] + p2[1][1]) * .5 ], + [ p2[2][0] , p2[2][1] ] ]) + seg.extend(seg2[1:]) + else: + seg = seg1[:] + seg.extend(seg2[:]) + self.chained_count += 1 + return seg + + def near_ends(self, end1, end2): + """ requires self.eps_sq to be the square of the near distance """ + dx = end1[0] - end2[0] + dy = end1[1] - end2[1] + d_sq = dx * dx + dy * dy + if d_sq > self.eps_sq: + if self.min_missed_distance_sq is None: + self.min_missed_distance_sq = d_sq + elif self.min_missed_distance_sq > d_sq: + self.min_missed_distance_sq = d_sq + return False + else: + return True + + def effect(self): + if self.options.version: + print(__version__) + sys.exit(0) + + self.calc_unit_factor(self.options.units) + + if self.options.snap_ends is not None: self.snap_ends = self.options.snap_ends + if self.options.close_loops is not None: self.close_loops = self.options.close_loops + if self.options.chain_epsilon is not None: self.chain_epsilon = self.options.chain_epsilon + if self.chain_epsilon < 0.001: self.chain_epsilon = 0.001 # keep a minimum. + self.eps_sq = self.chain_epsilon * self.unit_factor * self.chain_epsilon * self.unit_factor + + if not len(self.svg.selected.items()): + inkex.errormsg("Please select one or more objects.") + return + + segments = [] + for id, node in self.svg.selected.items(): + if node.tag != inkex.addNS('path', 'svg'): + inkex.errormsg("Object " + id + " is not a path. Try\n - Path->Object to Path\n - Object->Ungroup") + return + if debug: inkex.utils.debug("id=" + str(id) + ", tag=" + str(node.tag)) + path_d = CubicSuperPath(Path(node.get('d'))) + sub_idx = -1 + for sub in path_d: + sub_idx += 1 + # sub = [[[200.0, 300.0], [200.0, 300.0], [175.0, 290.0]], [[175.0, 265.0], [220.37694, 256.99876], [175.0, 240.0]], [[175.0, 215.0], [200.0, 200.0], [200.0, 200.0]]] + # this is a path of three points. All the bezier handles are included. the Structure is: + # [[handle0_OUT, point0, handle0_1], [handle1_0, point1, handle1_2], [handle2_1, point2, handle2_OUT]] + # the _OUT handles at the end of the path are ignored. The data structure has them identical to their points. + # + if debug: inkex.utils.debug(" sub=" + str(sub)) + end1 = [sub[ 0][1][0], sub[ 0][1][1]] + end2 = [sub[-1][1][0], sub[-1][1][1]] + + # Remove trivial self revesal when building candidate segments list. + if ((len(sub) == 3) and self.near_ends(end1, end2)): + if debug: inkex.utils.debug("dropping segment from self-reversing path, length:"+str(len(sub))) + sub.pop() + end2 = [sub[-1][1][0], sub[-1][1][1]] + + segments.append({'id': id, 'n': sub_idx, 'end1': end1, 'end2':end2, 'seg': sub}) + if node.get(inkex.addNS('type', 'sodipodi')): + del node.attrib[inkex.addNS('type', 'sodipodi')] + if debug: inkex.utils.debug("-------- seen: ") + for s in segments: + if debug: inkex.utils.debug(str(s['id'])+", "+str(s['n'])+", "+str(s['end1'])+", "+str(s['end2'])) + + # chain the segments + obsoleted = 0 + remaining = 0 + for id, node in self.svg.selected.items(): + path_d = CubicSuperPath(Path(node.get('d'))) + # ATTENTION: for parsePath() it is the same, if first and last point coincide, or if the path is really closed. + path_closed = True if re.search("z\s*$", node.get('d')) else False + new = [] + cur_idx = -1 + for chain in path_d: + cur_idx += 1 + if not self.is_segment_done(id, cur_idx): + # quadratic algorithm: we check both ends of the current segment. + # If one of them is near another known end from the segments list, we + # chain this segment to the current segment and remove it from the + # list, + # end1-end1 or end2-end2: The new segment is reversed. + # end1-end2: The new segment is prepended to the current segment. + # end2-end1: The new segment is appended to the current segment. + self.set_segment_done(id, cur_idx, "output") # do not cross with ourselves. + end1 = [chain[ 0][1][0], chain[ 0][1][1]] + end2 = [chain[-1][1][0], chain[-1][1][1]] + + # Remove trivial self revesal when doing the actual chain operation. + if ((len(chain) == 3) and self.near_ends(end1, end2)): + chain.pop() + end2 = [chain[-1][1][0], chain[-1][1][1]] + + segments_idx = 0 + while segments_idx < len(segments): + seg = segments[segments_idx] + if self.is_segment_done(seg['id'], seg['n']): + segments_idx += 1 + continue + + if (self.near_ends(end1, seg['end1']) or + self.near_ends(end2, seg['end2'])): + seg['seg'] = self.reverse_segment(seg['seg']) + seg['end1'], seg['end2'] = seg['end2'], seg['end1'] + if debug: inkex.utils.debug("reversed seg " + str(seg['id']) + ", "+str(seg['n'])) + + if self.near_ends(end1, seg['end2']): + # prepend seg to chain + self.set_segment_done(seg['id'], seg['n'], 'prepended to ' + str(id) + ' ' + str(cur_idx)) + chain = self.link_segments(seg['seg'], chain) + end1 = [chain[0][1][0], chain[0][1][1]] + segments_idx = 0 # this chain changed. re-visit all candidate + continue + + if self.near_ends(end2, seg['end1']): + # append seg to chain + self.set_segment_done(seg['id'], seg['n'], 'appended to ' + str(id) + ' ' + str(cur_idx)) + chain = self.link_segments(chain, seg['seg']) + end2 = [chain[-1][1][0], chain[-1][1][1]] + segments_idx = 0 # this chain changed. re-visit all candidate + continue + + segments_idx += 1 + + # Now all joinable segments are joined. + # Finally, we can check, if the resulting path is a closed path: + # Closing a path here, isolates it from the rest. + # But as we prefer to make the chain as long as possible, we close late. + if self.near_ends(end1, end2) and not path_closed and self.close_loops: + if debug: inkex.utils.debug("closing closeable loop " +str(id)) + if self.snap_ends: + # move first point to mid position + x1n = (chain[0][1][0] + chain[-1][1][0]) * 0.5 + y1n = (chain[0][1][1] + chain[-1][1][1]) * 0.5 + chain[0][1][0], chain[0][1][1] = x1n, y1n + # merge handle of the last point to the handle of the first point + dx0e = chain[-1][0][0] - chain[-1][1][0] + dy0e = chain[-1][0][1] - chain[-1][1][1] + if debug: inkex.utils.debug("handle diff: "+ str(dx0e) + str(dy0e)) + # FIXME: this does not work. cubicsuperpath.formatPath() ignores this handle. + chain[0][0][0], chain[0][0][1] = x1n+dx0e, y1n+dy0e + # drop last point + chain.pop() + end2 = [chain[-1][1][0], chain[-1][1][1]] + path_closed = True + self.chained_count +=1 + + new.append(chain) + + if not len(new): + # node.clear() + if node.getparent() is not None: + node.delete() + obsoleted += 1 + if debug: inkex.utils.debug("Path node obsoleted: " +str(id)) + else: + remaining += 1 + # BUG: All previously closed loops, are open, after we convert them back with cubicsuperpath.formatPath() + p_fmt = str(Path(CubicSuperPath(new).to_path().to_arrays())) + if path_closed: p_fmt += " z" + if debug: inkex.utils.debug("new path: "+str(p_fmt)) + node.set('d', p_fmt) + + # statistics: + if debug: inkex.utils.debug("Path nodes obsoleted: "+str(obsoleted) + "\nPath nodes remaining:"+str(remaining)) + if self.min_missed_distance_sq is not None: + if debug: inkex.utils.debug("min_missed_distance: "+str(math.sqrt(float(self.min_missed_distance_sq))/self.unit_factor)+'>'+str(self.chain_epsilon)+str(self.options.units)) + if debug: inkex.utils.debug("Successful link operations: "+str(self.chained_count)) + +if __name__ == '__main__': + ChainPaths().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/checkerboard/checkerboard.inx b/extensions/fablabchemnitz/checkerboard/checkerboard.inx new file mode 100644 index 00000000..0e8e548c --- /dev/null +++ b/extensions/fablabchemnitz/checkerboard/checkerboard.inx @@ -0,0 +1,37 @@ + + + Checkerboard + fablabchemnitz.de.checkerboard + + + 50 + 10 + 10 + true + + + 4286282751 + + + 8092671 + + + + + + + + + + + all + + + + + + + + diff --git a/extensions/fablabchemnitz/checkerboard/checkerboard.py b/extensions/fablabchemnitz/checkerboard/checkerboard.py new file mode 100644 index 00000000..992437be --- /dev/null +++ b/extensions/fablabchemnitz/checkerboard/checkerboard.py @@ -0,0 +1,93 @@ +#!/usr/bin/env python3 + +""" +Inkscape extension to create checkerboard patterns + + +Copyright (C) 2011 Jeff Kayser + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +""" + +import inkex +from lxml import etree +import re +from inkex import Color + +def rgbToHex(pickerColor): + longcolor = int(pickerColor) + if longcolor < 0: + longcolor = longcolor & 0xFFFFFFFF + return '#' + format(longcolor >> 8, '06X') + +def draw_square(x, y, w, h, color, parent, id_=None): + """Draw a w*h square at (x, y) having color color + """ + if len(color) == 4: + opacity=color[3] + else: + opacity=1.0 + + style = {'stroke': 'none', 'stroke-width': '1', 'fill': rgbToHex(color), 'fill-opacity': opacity} + attribs = {'style': str(inkex.Style(style)), 'height': str(h), 'width': str(w), 'x': str(x), 'y': str(y)} + if id_ is not None: + attribs.update({'id': id_}) + obj = etree.SubElement(parent, inkex.addNS('rect', 'svg'), attribs) + +def draw_grid(x, y, rows, cols, size, color1, color2, parent): + """Draw a rows*cols checkboard grid at (x, y) with square size of size*size, + with squares having alternating colors color1 and color2 + """ + # Group like-colors + group1 = etree.SubElement(parent, 'g', {'id': 'diagonal1'}) + group2 = etree.SubElement(parent, 'g', {'id': 'diagonal2'}) + for row in range(int(rows)): + for col in range(int(cols)): + alternate = (col + row) % 2 == 0 + color = color1 if alternate else color2 + group = group1 if alternate else group2 + id_ = 'cell{0}x{1}'.format(col, row) + draw_square(x + col * size, y + row * size, size, size, color, group, id_) + +class Checkerboard(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument("--tab") + pars.add_argument("--color1", type=Color, default=4286282751) + pars.add_argument("--color2", type=Color, default=8092671) + pars.add_argument("--size") + pars.add_argument("--rows", type=int) + pars.add_argument("--cols", type=int) + pars.add_argument("--layer", type=inkex.Boolean) + + def effect(self): + if self.svg.get_current_layer() is not None: + group = etree.SubElement(self.svg.get_current_layer(), 'g', {'id': 'checkerboard'}) + else: + parent = self.document.getroot() + group = etree.SubElement(parent, 'g', {'id': 'checkerboard'}) + + rows = self.options.rows + cols = self.options.cols + # Convert to pixels + size = self.svg.unittouu(self.options.size) + color1 = self.options.color1 + color2 = self.options.color2 + # Center checkerboard within visible viewport + x, y = self.svg.namedview.center[0] - cols * size / 2, self.svg.namedview.center[1] - rows * size / 2 + draw_grid(x, y, rows, cols, size, color1, color2, group) + +if __name__ == '__main__': + Checkerboard().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/chip_scratches/chip_scratches.inx b/extensions/fablabchemnitz/chip_scratches/chip_scratches.inx new file mode 100644 index 00000000..b791fecf --- /dev/null +++ b/extensions/fablabchemnitz/chip_scratches/chip_scratches.inx @@ -0,0 +1,50 @@ + + + Chip Scratches + fablabchemnitz.de.chip_scratches + + + + true + 1000 + 1000 + 1.0 + 200 + + + true + 2.0 + 0.0 + 0.2 + false + 90. + 0.0 + false + + + true + 1.0 + 0.0 + 1.0 + false + + + true + 1.0 + 0.0 + 10.0 + false + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/chip_scratches/chip_scratches.py b/extensions/fablabchemnitz/chip_scratches/chip_scratches.py new file mode 100644 index 00000000..3b3a4460 --- /dev/null +++ b/extensions/fablabchemnitz/chip_scratches/chip_scratches.py @@ -0,0 +1,733 @@ +#!/usr/bin/env python3 + +import math +import inkex +import random +from lxml import etree + +""" +This extension creates visual noise of various kinds, using +3 ingredients, scratches, chips, and specks. + +Extensions -> Generate -> Noise -> ChipScratches + +The 3 ingredients go into 3 Inkscape groups. Where they are in +the tree is controlled by the object selected at the time the +extension is called. They become sisters of the selected object, +under the same parent. If there is no selection, they go to +the root level. + +In the text below, each * indicates a settable parameter in +the pop-up box. + +The extension fills a rectangle, which defaults* to the page +size, or is width* by height*. The overall size* and number* +of marks is set. However, for each of the 3, a multiplier +changes the size* and number*. To get the overall value, +just set the multiplier to 1.0 + +Also, each of the 3 may be separately enabled* or disabled. + +For each ingredient, it is possible to set the size to grow* +with y. For this case, it is possible to set the size to +a negative multiplier, so that it, when growing, will pass +through zero somewhere in the middle of the box. + +For scratches, it is possible to change their orientation +from vertical to angular*, radiating from the center of the box. +(If so, growth is measured from the center.) The initial +angle* and the change with distance* are set. + +For chips and specks, there are similar controls, except the +angular ones, which are omitted. + +Last, there is the option to use a density gradient*. In the +simple case, the probability of making a mark is the same +everywhere. With a gradient, it changes from 0 to 1 across +the box from left to right. + +-- + +Some of the features above may be of little use, while some +omitted ones might be important. This is a beta version, so +I await user feedback. + +I notice that the extension might take 5 seconds to run. Is +this important? A bit of clean-up might help this. + +Two features that might slow it down considerably are clusters +and collisions. Collisions, if implemented, would keep any 2 +marks from landing on top of each other. Slow, because each +mark must search all the previous marks. + +Clusters is some method of putting new marks near old ones. +I think this would be especially useful for specks, which +could be clustered around the end of scratches. Right now, +they're uniform, and so fade into the background. + +Again, feedback? + +Technical note: This file may also be used to generate the inx +file. (The bundled inx file was generated this way.) Set the +global /inxGen/ =1 and run the file stand-alone. + +- AK Sept 2018 +""" + +class ChipScratches(inkex.EffectExtension): + """ +Creates visual noise. 3 kinds: Scratches, chips, specks. +50, 100, 100 instances are predefined. These are chosen +randomly and scattered randomly across the page. Controls +for number and size, as well as some specific to each type. + """ + def add_arguments(self, pars): + pars.add_argument("--pgsizep", type=inkex.Boolean, default=True, help="Default rectangle to page size?") + pars.add_argument("--rx", type=int, default=1000, help="Width") + pars.add_argument("--ry", type=int, default=1000, help="Height") + pars.add_argument("--mainSize", type= float, default=1.0, help="Size of objects") + pars.add_argument("--mainNum", type=int, default=200, help="Number of objects") + pars.add_argument("--honp", type=inkex.Boolean, help="Enable scratches") + pars.add_argument("--hsize", type=float, default=2.0, help="Size of scratches") + pars.add_argument("--hgrow", type=float, default=0.0, help="Grow scratches with distance") + pars.add_argument("--hnum", type= float, default=0.2, help="Number of scratches") + pars.add_argument("--hrad", type=inkex.Boolean, default=False, help="Angle scratches toward center") + pars.add_argument("--hang", type= float, default=90.0, help="Angle from radius") + pars.add_argument("--hcurve", type= float, default=0.0, help="Change angle with distance") + pars.add_argument("--hgrad", type=inkex.Boolean, default=False, help="Use density gradient") + pars.add_argument("--conp", type=inkex.Boolean, default=True, help="Enable chips") + pars.add_argument("--csize", type= float, default=1.0, help="Size of chips") + pars.add_argument("--cgrow", type= float, default=0.0, help="Grow chips with distance") + pars.add_argument("--cnum", type= float, default=1.0, help="Number of chips") + pars.add_argument("--cgrad", type=inkex.Boolean, default=False, help="Use density gradient") + pars.add_argument("--sonp", type=inkex.Boolean, default=True, help="Enable specks") + pars.add_argument("--ssize", type= float, default=1.0, help="Size of specks") + pars.add_argument("--sgrow", type= float, default=0.0, help="Grow specks with distance") + pars.add_argument("--snum", type= float, default=10.0, help="Number of specks") + pars.add_argument("--sgrad", type=inkex.Boolean, default=False, help="Use density gradient") + pars.add_argument("--Nmain", "--Overall") + + def effect(self): + # Get access to main SVG document element and get its dimensions. + if self.options.pgsizep: + rx = self.svg.unittouu(self.svg.get('width')) + ry = self.svg.unittouu(self.svg.attrib['height']) + else: + rx = self.options.rx + ry = self.options.ry + parent = self.document.getroot() + +#Create scratches + + pdic = { + 'rx' : rx, + 'ry' : ry, + 'size' : self.options.mainSize * self.options.hsize, + 'enable' : self.options.honp, + 'num' : int( self.options.mainNum * self.options.hnum ), + 'grow' : self.options.hgrow, + 'radial' : self.options.hrad, + 'ang' : self.options.hang, + 'curve' : self.options.hcurve, + 'grad' : self.options.hgrad, + } + draw( scratches, parent, pdic) + +#Create chips + + + pdic = { + 'rx' : rx, + 'ry' : ry, + 'size' : self.options.mainSize * self.options.csize, + 'enable' : self.options.conp, + 'num' : int( self.options.mainNum * self.options.cnum ), + 'grow' : self.options.cgrow, + 'radial' : False, + 'ang' : False, + 'curve' : False, + 'grad' : self.options.cgrad, + } + draw( chips, parent, pdic) + +#Create specks + + + pdic = { + 'rx' : rx, + 'ry' : ry, + 'size' : self.options.mainSize * self.options.ssize, + 'enable' : self.options.sonp, + 'num' : int( self.options.mainNum * self.options.snum ), + 'grow' : self.options.sgrow, + 'radial' : False, + 'ang' : False, + 'curve' : False, + 'grad' : self.options.sgrad, + } + draw( specks, parent, pdic) + +def draw( obj, parent, pdic) : + if not pdic['enable'] : + return + + group = etree.SubElement(parent, 'g') + + if pdic['grad'] : + f = lambda x: math.sqrt(x) + else : + f = lambda x: x + + rx = pdic['rx'] + ry = pdic['ry'] + fmstyle = str(inkex.Style({"fill" : "#000000"})) + mrx = rx // 2 + mry = ry // 2 + mrmax = mrx if mrx > mry else mry + #Curves 90 going from the center to the edge (long dim.) if parm = 1.0 + curve = pdic['curve'] * 0.5 * math.pi / mrmax + + ctrs = [(rx * f(random.random()) , ry * random.random()) + for i in range(pdic['num'])] + zp = 2 + 3 * int(random.random()*len(obj) / 3 ) + for ctr in ctrs : + path = etree.Element(inkex.addNS('path','svg')) + path.set('style', fmstyle) + zp = (zp + 3) % len(obj) + path.set('d', obj[zp]) + trstring = "translate (%g %g)" % ctr + if pdic['radial'] : + ang = math.atan2(ctr[1]-mry , ctr[0]-mrx) + curve * math.sqrt( + (ctr[1]-mry)**2 + (ctr[0]-mrx)**2) + trstring += " rotate (%g)" % (ang * 180 / math.pi + pdic['ang']) + if pdic['size'] != 1.0 or pdic['grow'] != 0.0 : + if pdic['radial'] : + size = math.sqrt((ctr[1]-mry)**2 + (ctr[0]-mrx)**2) * ( + pdic['grow'] / mrmax ) + pdic['size'] + else : + size = ctr[1] * pdic['grow'] / mrmax + pdic['size'] + trstring += " scale (%g)" % size + path.set('transform', trstring) + group.append(path) + + +chips=( +4.17065, 3.83403, +"M -2.98542 -3.8338 c 0.34234,0 0.74533,0.14835 0.89583,0.32966 0.15043,0.18131 0.19014,0.32965 0.088,0.32965 -0.10212,0 0.0341,0.15422 0.30304,0.34254 0.26887,0.18832 0.56984,0.29206 0.66874,0.23093 0.0989,-0.0612 0.44473,-0.1589 0.76833,-0.21763 0.48389,-0.0877 0.6122,-0.0113 0.72327,0.43138 0.0745,0.29608 0.0843,0.73458 0.0215,0.97438 -0.0648,0.24806 -0.005,0.43833 0.13992,0.44082 0.13978,0.003 0.49312,0.18902 0.7855,0.41379 0.40627,0.31226 0.68285,0.3654 1.1727,0.22492 0.66407,-0.19047 1.37707,0.0827 1.57744,0.60479 0.14702,0.38319 -1.10951,0.94947 -2.1067,0.94947 -0.77639,0 -0.84516,0.0496 -0.84516,0.60652 0,0.36844 -0.17253,0.71404 -0.43955,0.88079 -0.24174,0.15096 -0.43953,0.47139 -0.43953,0.71211 0,0.56109 -0.49051,0.55224 -1.73627,-0.0314 -0.53191,-0.24917 -0.87804,-0.51738 -0.7692,-0.59622 0.10884,-0.0788 0.21711,-0.44315 0.24037,-0.80954 0.0361,-0.56828 -0.10116,-0.75694 -0.93402,-1.28385 -0.53699,-0.33972 -0.97558,-0.78166 -0.97308,-0.98208 0.003,-0.31564 0.0318,-0.32027 0.21635,-0.0349 0.14197,0.21974 0.21384,0.23816 0.21631,0.0549 0.003,-0.15109 -0.19671,-0.47488 -0.44125,-0.7194 -0.31961,-0.31961 -0.38937,-0.55126 -0.24852,-0.82414 0.10773,-0.20875 0.26287,-0.75031 0.34467,-1.20358 0.13057,-0.72333 0.22505,-0.82414 0.77135,-0.82414 z", +4.13855, 4.24985, +"M -1.85248 -4.24978 c 0.27589,0.003 0.47037,0.0646 0.48312,0.20271 0.0137,0.1478 0.0399,0.47805 0.0582,0.73402 0.026,0.36225 0.21413,0.47395 0.84811,0.50359 0.44794,0.0209 0.94806,0.0473 1.11126,0.0582 0.16314,0.011 0.39599,0.28179 0.51767,0.601744 0.12163,0.31997 0.37346,0.58176 0.55949,0.58176 0.18595,0 0.48549,0.14734 0.66583,0.3277 0.18035,0.18035 0.57257,0.36361 0.87127,0.40723 0.35897,0.0524 0.62021,0.31158 0.77039,0.76447 0.20387,0.61474 0.15184,0.74842 -0.50541,1.29714 -0.40292,0.33638 -0.73264,0.79074 -0.73264,1.0099 0,0.21915 -0.16606,0.65189 -0.36907,0.96172 -0.20296,0.30985 -0.30165,0.67266 -0.21907,0.80628 0.0894,0.1446 -0.091,0.24316 -0.44539,0.24316 -0.32756,0 -0.5954,-0.0917 -0.5954,-0.20362 0,-0.11191 0.15163,-0.63243 0.33677,-1.15715 0.18525,-0.52472 0.2637,-0.99731 0.17453,-1.04989 -0.0892,-0.0526 -0.63351,-0.17283 -1.20942,-0.26725 -0.57596,-0.0944 -1.10945,-0.26987 -1.18578,-0.38997 -0.0763,-0.12012 -0.53312,-0.25519 -1.01492,-0.29996 -1.10287,-0.10248 -1.29329,-0.29762 -1.33349,-1.3685 -0.0191,-0.50625 -0.13647,-0.82688 -0.28496,-0.77674 -0.76171,0.25701 -1.09657,-1.581564 -0.42769,-2.348844 0.31962,-0.36665 1.3196,-0.64382 1.92663,-0.63767 z", +4.22195, 4.21947, +"M 1.69537 -4.21932 c -0.0345,-8.8e-4 -0.0688,0.002 -0.1027,0.008 -0.18069,0.0328 -0.35094,0.1712 -0.50284,0.46983 -0.0104,1.09687 -0.6782,2.01812 -0.47774,3.15318 0.24531,0.74578 -0.54886,0.45228 -0.99871,0.50283 -1.3297,0.0104 -0.14408,-1.07574 -1.55709,-0.976 -0.42439,-0.67608 -0.98245,-2.34963 -1.81896,-0.91876 -0.17688,0.51739 -0.9194,1.1638 -0.0326,1.53546 0.37737,0.014 0.60982,0.25307 0.77516,0.58044 -0.0269,0.19027 -0.0344,0.50819 -0.0112,0.88577 0.0503,0.81728 -0.0383,1.14531 -0.37549,1.39186 -0.48057,0.35139 -0.36025,0.73074 0.3532,1.11256 0.18114,0.0969 0.28904,0.14046 0.33832,0.12594 0.0493,-0.0146 0.0402,-0.0871 -0.0116,-0.22214 -0.0798,-0.20803 0.0612,-0.40175 0.36204,-0.49725 0.33273,-0.1056 0.47599,-0.33503 0.4903,-0.78121 0.13921,-0.0295 0.30389,-0.11064 0.50376,-0.26119 1.46647,-0.57469 1.19941,1.53559 2.36963,1.92306 0.98055,1.45246 1.30915,-1.39831 1.46716,-2.1424 0.10424,-1.37891 -0.4829,-1.40293 0.43107,-1.92205 0.91202,0.23598 1.36087,-0.55942 1.32261,-1.38814 -0.0299,-0.64451 -0.35397,-1.30896 -0.98476,-1.52384 -0.44029,-0.27942 -1.02203,-1.0427 -1.53965,-1.05586 z", +2.29614, 3.86905, +"M -0.15038 -3.86873 c -0.32838,-0.009 -0.63053,0.17109 -0.7121,0.59531 -0.44133,-0.069 -1.15128,-1.08751 -1.3529,-0.1297 0.0799,0.51796 -0.18084,1.09953 -0.0362,1.560632 0.0859,0.54933 0.0879,1.28864 0.86402,1.13739 0.41931,0.12913 0.19391,1.48787 0.86352,1.32705 -0.27268,0.12418 -0.56414,0.20057 -0.90951,0.15607 -0.33358,0.0733 -0.0995,0.50263 0.10232,0.59686 0.69781,0.49054 1.25008,-1.24221 1.59784,0.0651 -0.10673,0.74125 -1.42009,1.11534 -1.22938,1.91513 0.45471,0.77949 1.52934,0.52133 2.19882,0.20722 0.426,-0.25368 0.96231,-0.36258 0.60153,-1.01906 -0.16613,-0.63544 -0.25215,-1.31953 -0.28578,-1.93476 0.19172,-0.28339 0.73189,-0.81591 0.74414,-1.18391 0.004,-0.12267 -0.0506,-0.22674 -0.19637,-0.29765 -0.12346,0.2062 -0.2481,0.38506 -0.39325,0.52399 -0.0738,-0.30337 -0.26755,-0.59016 -0.57981,-0.70486 -0.97504,-0.90992 0.71916,-1.624862 1.05005,-2.274802 v -5.1e-4 c -0.35914,-0.76136 -1.12554,0.174 -1.4578,-0.003 -0.18611,-0.32959 -0.54083,-0.52743 -0.86918,-0.5364 z", +3.31745, 5.20184, +"M -3.04057 -3.12517 c -0.12013,0.49557 0.22954,0.992902 -0.0125,1.481942 -0.3042,0.4355 -0.16661,0.96485 -0.24617,1.47138 -0.13051,0.54661 0.48075,0.72787 0.5505,1.18424 0.34005,0.28842 -0.34128,0.56491 -0.0684,0.64532 -0.0254,0.006 -0.0507,0.009 -0.076,0.0172 -0.12397,0.005 -0.0329,0.12902 0.0254,0.13283 0.0916,0.0214 0.17487,0.0566 0.25509,0.0975 -0.0618,0.0963 -0.13661,0.20956 -0.0942,0.3182 -0.0579,0.17996 -0.64502,0.46539 -0.41368,0.58716 0.27677,0.0877 0.30423,0.26778 0.27821,0.46656 -0.10304,0.0342 -0.16783,0.13651 -0.0334,0.1966 -0.0441,0.20892 -0.0836,0.41478 0.0836,0.54124 0.26204,0.0239 0.56304,-0.0127 0.85778,-0.0113 0.15595,0.053 0.3112,0.10898 0.45235,0.19132 0.44943,0.28858 0.77251,0.76143 1.30321,0.92948 0.251,0.13085 0.47062,0.0872 0.47613,-0.0674 0.003,-0.0703 -0.0394,-0.1635 -0.14241,-0.2736 -0.32012,-0.35787 -0.80262,-0.50472 -1.20241,-0.70974 0.26829,0.001 0.53112,0.2429 0.72923,-0.0975 -0.0774,-0.49202 -0.79569,-0.59976 -1.12805,-0.94766 -0.38855,-0.23155 -1.03547,-0.33263 -0.82509,-0.89511 0.19784,0.16083 0.38233,0.34262 0.59643,0.46985 0.2225,0.39004 0.96906,0.0149 1.31442,0.31886 0.30953,-0.35321 0.59538,0.79256 0.80227,0.11169 0.0337,-0.0757 0.0554,-0.16401 0.0621,-0.24848 v 0 c 0.0205,-0.25339 -0.0915,-0.47343 -0.40312,-0.22337 -0.19188,0.0244 -0.12003,-0.54699 -0.50655,-0.40708 -0.4008,-0.0492 -0.88145,0.32259 -1.01738,-0.24187 -0.22216,-0.0951 -0.4652,-0.19534 -0.71735,-0.25079 0.0546,-0.37763 0.0308,-0.78884 0.12161,-1.10494 -0.53717,-0.3656 -0.0495,-0.98532 -0.21974,-1.39571 -0.0611,-0.41652 0.91697,0.0243 0.77055,0.42327 0.0859,0.35784 0.84999,1.14566 0.90668,0.36743 0.24362,-0.49009 -0.0688,-1.08376 -0.55477,-1.27742 -0.23421,-0.13565 -0.50438,-0.44811 -0.0324,-0.37734 0.54993,-0.25032 0.8983,0.51127 1.39901,0.21378 0.31014,0.12139 0.34301,0.5908 0.78477,0.50158 0.32429,0.42527 0.37542,0.96608 0.52008,1.43504 -0.0457,0.40839 0.12259,0.77239 0.32746,1.1089 -0.0386,0.0876 -0.0483,0.19899 -0.0139,0.33208 -0.033,0.23478 0.0471,0.26766 0.266,0.26566 0.0265,0.0178 0.0539,0.0311 0.0816,0.0423 0.0757,0.35193 0.0297,0.752 0.33572,0.99755 0.38603,0.3712 0.90219,0.0857 0.7319,-0.43054 -0.0466,-0.30798 -0.29681,-0.49153 -0.49234,-0.70745 0.0877,-0.0846 0.14598,-0.18839 0.14571,-0.28813 0,-0.12995 -0.0965,-0.25111 -0.34364,-0.30729 -0.0113,-0.01 -0.0233,-0.0175 -0.035,-0.0261 0,-0.008 0,-0.0144 0.002,-0.0221 -0.0783,-0.58378 -0.29364,-1.04867 -0.57824,-1.54836 -0.003,-0.54764 -0.26269,-1.00095 -0.42559,-1.5107 -0.16414,-0.40027 -0.18097,-0.931632 -0.68992,-1.070242 -0.35382,-0.0791 -0.24553,0.52958 -0.32482,0.740812 -0.19094,0.0194 -0.35815,-0.327932 -0.61756,-0.303992 -0.0498,-0.45204 -0.10633,-0.96193 -0.59179,-1.08313 -0.21979,-0.35661 -0.7287,-0.40785 -0.73915,-0.88256 -1.36004,-2.36534 -1.95836,0.29957 -1.63423,1.12013 z", +2.98467, 4.66325, +"M 0.614136 -2.29735 c -0.0974,-0.40618 -0.7125,-0.83436 -0.90598,-1.29221 -0.16432,-0.38885 0.094,-0.83201 -0.0209,-0.95324 -0.29875,-0.3152 -0.35677,0.40541 -0.62004,0.28161 -0.5706,-0.2683 -0.96784,-0.4991 -1.56386,-0.36057 -0.0124,0.2114 0.004,0.42436 -0.0171,0.63525 -0.31209,0.73101 0.0309,1.55931 -0.31858,2.0946 0.0848,0.12448 0.14997,0.25099 0.20148,0.37838 0.0156,0.21967 0.0503,0.44298 0.0725,0.67113 0.0238,0.0613 0.0395,0.12615 0.0585,0.18949 0.50136,1.84607 -0.0172,1.42527 -0.43442,1.35738 -0.24015,0.81789 0.45195,1.85386 0.52381,2.81106 0.18281,2.0407 0.89697,0.86601 2.0265,0.22853 10e-4,-0.91029 -0.0244,-0.95992 0.52581,-1.46817 0.74242,-0.0378 1.71531,-0.0436 1.76344,-0.97207 0.0521,-0.0462 0.0914,-0.0908 0.12716,-0.13473 0.0493,0.0552 0.15625,0.0926 0.36013,0.10319 0.40274,0.0431 0.56401,-0.18544 0.58867,-0.47407 0.0542,-0.63499 -0.55312,-1.55926 -0.70765,-0.51248 0.0324,0.14484 -0.0426,0.29511 -0.1234,0.43883 -0.16329,-0.54242 -1.37396,-0.96101 -1.47446,-1.59914 -0.1211,-0.0939 -0.22103,-0.19865 -0.29781,-0.30976 0.11513,-0.10721 0.23173,-0.21303 0.34755,-0.31918 0.004,-0.24309 -0.0645,-0.52303 -0.11148,-0.7939 z", +2.04389, 5.29494, +"M -1.85309 -5.04915 c 0.23783,0.26043 0.21099,0.66518 0.22712,1.04875 -0.4069,0.38004 0.1825,0.8748 0.0781,1.30474 -0.0389,1.015465 -0.55187,0.49378 -0.49101,1.508525 0.13462,0.44679 0.16841,0.72546 0.81526,1.43512 0.29219,0.0781 -0.22258,1.36221 -0.28588,2.05254 -0.0792,0.86353 0.71412,1.04806 0.51067,1.67394 l 1.06331,1.32048 c -0.0314,-0.1812 -0.0448,-0.35515 0.0627,-0.47402 0.28009,0.15408 0.64109,0.57435 0.77582,0.0169 0.14718,-0.48429 0.42232,-0.0327 0.35542,0.2494 0.26229,0.10277 0.4328,-0.33043 0.71684,-0.13395 0.23715,-0.46565 -0.19546,-0.38058 -0.45959,-0.49191 -0.009,-0.3719 0.26324,-0.82167 -0.25285,-0.92357 -0.0662,-0.19471 0.006,-0.46625 -0.0348,-0.68452 -0.17436,-0.24732 -0.63358,-0.4809 -0.23403,-0.8166 0.25025,-0.42226 -0.85867,-0.85207 -0.48249,-1.2856 0.22844,0.18931 0.44217,0.179 0.35732,-0.17819 -0.13207,-0.6247 0.35102,-0.79202 -0.0534,-1.09863 -0.38584,-0.3369 -0.93599,-0.41779 -1.28967,-0.79966 -0.019,-0.23696 -0.17121,-0.4219 -0.2883,-0.61236 0.0439,-0.11202 0.10964,-0.220495 0.20235,-0.323135 0.29428,-0.26016 0.28836,-0.24769 0.10101,-0.59292 0.21808,-0.22172 -0.30092,-0.49114 -0.22305,-0.80405 -0.27966,-0.40328 -0.31858,-0.96801 -0.26602,-1.46128 0.16807,-0.43289 -0.90489,0.07 -0.90489,0.07 z", +5.1605, 3.51819, +"M 0.197111 -3.51809 c -0.25831,-0.008 -0.64247,0.48592 -1.65703,1.8944 -0.30917,0.4292 -1.11412,0.75117 -2.18011,0.87133 -1.27846,0.1441 -1.64072,0.31871 -1.48755,0.71783 0.11143,0.29022 0.20229,0.59651 0.20229,0.68056 0,0.084 0.36946,0.14096 0.82122,0.12688 0.7781,-0.0243 0.78325,-0.0409 0.0914,-0.31499 -0.4578,-0.18138 0.0596,-0.25533 1.38729,-0.19875 1.16464,0.0496 2.21889,0.19137 2.34248,0.31499 0.12366,0.12358 -0.0554,0.22449 -0.39706,0.22449 -0.50809,0 -0.54984,0.1332 -0.23026,0.73025 0.17922,0.33488 0.49805,0.6159 0.76974,0.70096 0.0157,0.0639 0.0352,0.12709 0.063,0.18811 0,0.0641 0.1163,0.0991 0.11048,0.1646 0.28267,0.39771 0.73888,1.40678 1.24267,0.67834 0.003,-0.26195 -0.48278,-1.34025 0.0102,-1.11978 0.13677,0.65215 0.88947,0.55265 1.32385,0.40816 0.52365,0.38992 1.46911,0.38685 1.70496,-0.35447 0.0158,-0.0853 0.0252,-0.17953 0.0359,-0.27196 0.0967,0.31684 0.14402,0.24344 0.17214,-0.30257 0.007,-0.13895 2.7e-4,-0.25575 -0.0191,-0.35714 0.0953,-0.19421 0.25677,-0.34478 0.56255,-0.38997 0.0741,-0.0998 0.10036,-0.18124 0.0932,-0.24534 -0.0312,-0.27771 -0.69621,-0.22987 -0.87843,0.0617 -0.18949,0.0256 -0.34877,-0.047 -0.49421,-0.15972 0.68347,-0.14164 0.77742,-0.40214 0.7724,-2.03813 -0.004,-1.25111 -0.11592,-1.71698 -0.33141,-1.37666 -0.17911,0.28293 -0.24087,0.73482 -0.13754,1.00399 0.10335,0.26916 0.005,0.48979 -0.21607,0.48979 -0.22226,0 -0.41684,-0.20557 -0.43256,-0.45651 -0.023,-0.36431 -0.0665,-0.3644 -0.21338,-4.5e-4 -0.14313,0.35465 -0.34793,0.34082 -0.92502,-0.0634 -0.40789,-0.28557 -0.99692,-0.42235 -1.30788,-0.30302 -0.31722,0.12184 -0.46945,0.062 -0.34693,-0.1362 0.1201,-0.19428 0.0622,-0.59178 -0.12911,-0.88331 -0.11326,-0.17268 -0.20468,-0.27964 -0.3221,-0.28394 z m -0.32296,4.90546 c -0.003,0.0156 -0.004,0.031 -0.007,0.0466 -0.0389,-0.0151 -0.0395,-0.0307 0.007,-0.0466 z", +3.88374, 3.51074, +"M 0.152516 -3.50963 c -0.0671,-0.0035 -0.13954,0.0012 -0.21726,0.01501 0.0239,0.38383 -0.009,0.664347 -0.0834,0.870756 -0.5491,-0.372894 -1.21382,-0.623817 -1.99453,-0.680445 0.004,0.330283 0.0274,0.672343 0.0583,1.019123 -0.60216,-0.112963 -1.22906,-0.191918 -1.71237,0.117895 l -0.087,0.185898 c 1.00994,1.039798 2.17682,1.967379 2.19764,3.587233 0.17881,0.262722 0.36799,0.463849 0.56477,0.61642 0.13818,0.425596 0.28373,0.847187 0.44201,1.256679 1.15883,0.174004 1.9076,-0.383239 2.23915,-1.246964 0.44076,-0.188455 0.8768,-0.414276 1.29111,-0.606262 0.84054,-0.06761 1.08622,-0.328197 1.02353,-0.67868 -0.11969,-0.669085 -1.36303,-1.666368 -1.734,-2.275359 -0.58197,-0.72387 -0.79212,-0.277084 -0.95819,0.185455 -0.11392,-0.207857 -0.24645,-0.407202 -0.39388,-0.596988 0.20718,-0.755268 0.0844,-1.73265 -0.63582,-1.769775 z", +3.17107, 3.48989, +"M -0.695755 -3.48975 c -0.14458,-0.002 -0.31898,0.0184 -0.53872,0.0514 -0.48796,0.0735 -0.9685,0.32099 -1.33449,0.68684 -0.48142,0.48132 -0.57636,0.733 -0.59963,1.58863 -0.0182,0.66578 0.0642,1.0927 0.23826,1.23725 0.14629,0.12144 0.26581,0.37135 0.26581,0.5554 0,0.44729 0.44932,0.79765 0.83375,0.65015 0.1706,-0.0654 0.31045,-0.035 0.31045,0.0672 0,0.10242 0.35026,0.62619 0.77866,1.16423 0.44864,0.56348 0.93335,0.97854 1.14294,0.97854 0.35308,0 1.38754,-1.22023 1.59865,-1.8853 0.056,-0.17641 0.36274,-0.47456 0.68184,-0.66306 0.45927,-0.27126 0.55359,-0.42928 0.45275,-0.75654 -0.23387,-0.759 -0.79899,-1.36205 -1.72673,-1.84317 -0.54539,-0.28283 -1.03708,-0.70924 -1.20888,-1.04864 -0.29712,-0.58699 -0.46072,-0.77923 -0.89466,-0.78284 z", +4.76911, 3.80814, +"M 1.68749 -3.80769 c -0.0899,-0.004 -0.20175,0.019 -0.3478,0.0548 -0.2754,0.068 -0.80502,0.1779 -1.295,0.27337 -0.002,-5.7e-4 -0.003,-0.003 -0.005,-0.004 v 5.1e-4 c -0.0214,-0.004 -0.0479,0.004 -0.0775,0.0196 -0.0805,0.0155 -0.16738,0.0341 -0.24289,0.0481 -0.55451,0.10268 -1.25868,0.42197 -1.56475,0.70952 l -0.55708,0.52297 -0.1452,-0.57826 c -0.22357,-0.89072 -0.83344,-0.9771 -1.61438,-0.22893 -1.22476,1.1734 -0.44024,2.73403 0.96946,1.92856 0.38743,-0.22135 0.94538,-0.33453 1.30844,-0.2651 0.50575,0.0967 0.65979,0.0172 0.7674,-0.39377 0.0749,-0.28637 0.25625,-0.4356 0.4563,-0.46716 0.007,0.37514 0.15968,0.7233 0.44339,0.89866 0.15237,0.0942 0.1253,0.23529 -0.091,0.47439 -0.32686,0.36118 -0.77208,1.06994 -1.10431,1.69498 -0.72099,0.39409 -1.14366,1.04266 -0.95602,1.53169 0.0709,0.18476 0.27588,0.33538 0.45527,0.33538 0.35557,0 1.2275,-0.60376 1.86139,-1.20819 0.12891,0.3163 0.20815,0.7041 0.18085,1.048 -0.0504,0.63594 -0.005,0.73571 0.32609,0.71675 0.21154,-0.012 0.52486,-0.0817 0.69607,-0.15503 0.21968,-0.0938 0.34301,-0.0121 0.4191,0.27905 0.17931,0.68569 0.76809,0.39235 0.94774,-0.47232 0.086,-0.41422 0.22873,-0.84663 0.31782,-0.96067 0.089,-0.11402 0.22021,-0.45146 0.29146,-0.7493 0.0898,-0.37587 0.33261,-0.6263 0.79272,-0.81856 0.42373,-0.17705 0.70601,-0.44922 0.7829,-0.75551 0.19283,-0.76824 -0.0249,-1.0573 -0.79841,-1.0573 -0.39962,0 -0.93906,-0.17198 -1.26298,-0.40256 -0.12655,-0.0901 -0.23128,-0.15678 -0.32761,-0.20515 -0.0225,-0.18343 -0.0534,-0.37777 -0.0956,-0.58808 -0.19008,-0.94639 -0.26088,-1.21336 -0.5307,-1.2268 z", +2.54464, 4.86321, +"M 2.11268 -4.86312 -2.4e-4,3.4e-4 c -0.42259,-0.005 -0.71865,0.16899 -1.01028,0.58895 -0.2341,0.33711 -0.33434,0.40738 -0.61019,0.42851 -0.19518,0.0149 -0.37421,0.089 -0.43826,0.18143 -0.0182,0.0262 -0.0368,0.0486 -0.0555,0.0679 -0.009,-10e-6 -0.0175,-0.002 -0.0259,-6.4e-4 -0.071,0.004 -0.13477,0.0243 -0.18907,0.0571 -0.0242,-0.0244 -0.0391,-0.59467 -0.0391,-0.65359 0,-0.36718 -0.95879,-0.22794 -1.02811,0.14931 -0.0212,0.11589 0.0311,0.75145 0.13054,0.79443 0.23059,0.0996 0.20734,0.48697 -0.037,0.66412 -0.0408,-0.002 -0.0836,-0.005 -0.13238,-0.0129 -0.2574,-0.0398 -0.36727,-0.008 -0.58024,0.1696 -0.28227,0.235 -0.2933,0.288473 -0.26634,1.268603 0.0133,0.48463 0.0593,0.66991 0.18495,0.74461 0.11022,0.0655 0.20912,0.0728 0.28966,0.0212 0.0568,-0.0364 0.11754,-0.12674 0.17124,-0.23402 0.107,0.0658 0.25755,0.11689 0.41792,0.14507 -0.0242,0.0438 -0.0493,0.0775 -0.0743,0.0935 -0.22968,0.14714 -0.18073,0.29031 0.16346,0.47951 0.16459,0.0905 0.24667,0.16091 0.28464,0.26651 -0.22328,0.31999 -0.54905,0.56105 -0.79857,0.56105 -0.26805,0 -0.38363,0.13101 -0.38363,0.43504 0,0.099 -0.14109,0.28428 -0.31344,0.41175 -0.29557,0.21858 -0.40894,0.4781 -0.23503,0.53776 0.0431,0.0148 0.21951,0.23939 0.39186,0.49911 0.29454,0.44378 0.49384,0.61168 1.14242,0.96274 0.2234,0.12093 0.26771,0.2085 0.26771,0.52841 0,0.21082 0.0564,0.42682 0.1253,0.48004 0.17164,0.13252 0.36279,0.12141 0.72039,-0.0417 0.2969,-0.13538 0.35429,-0.23188 0.31892,-0.53634 -0.0158,-0.13554 0.343,-0.51902 0.92317,-0.98692 0.28788,-0.23216 0.26618,-0.30644 -0.12894,-0.44069 -0.37244,-0.12655 -0.37109,-0.11805 -0.22497,-1.22413 0.0601,-0.45428 0.10536,-0.49778 0.48606,-0.46787 0.10405,0.008 0.18291,-0.0399 0.1829,-0.11171 0,-0.16011 -0.092,-0.15842 -0.53246,0.01 -0.43953,0.16783 -0.58282,0.30447 -0.72314,0.68954 -0.0603,0.16556 -0.19888,0.33774 -0.30795,0.3828 -0.10906,0.045 -0.22827,0.15462 -0.26475,0.24337 -0.0547,0.1331 -0.11029,0.17837 -0.15911,0.14437 0.0191,-0.0362 0.0267,-0.0666 0.0146,-0.0817 -0.0268,-0.0333 -0.007,-0.17466 0.0454,-0.31397 0.0701,-0.18872 0.056,-0.28296 -0.0553,-0.36886 -0.17292,-0.13348 -0.20148,-0.65681 -0.04,-0.73384 0.0536,-0.0256 0.0859,-0.25521 0.0912,-0.59759 0.0308,-0.0283 0.0572,-0.054 0.0821,-0.0789 0.15372,-0.0696 0.2735,-0.27581 0.20759,-0.4084 -0.0286,-0.0576 0.009,-0.313 0.0811,-0.59847 0.0866,0.0779 0.22739,0.11682 0.37448,0.10077 0.33605,-0.0365 0.41939,-0.41959 0.11843,-0.54393 -0.1668,-0.0689 -0.21038,-0.19846 -0.25309,-0.75131 -0.0284,-0.367453 -0.0136,-0.746523 0.0327,-0.842563 0.0464,-0.0961 0.0457,-0.2254 0.0137,-0.35209 0.24966,-0.16135 0.77006,-0.17218 0.9474,-0.007 0.3168,0.29467 0.52241,0.0917 0.52241,-0.51569 0,-0.31975 0.0512,-0.41964 0.31732,-0.61647 0.40678,-0.30086 0.38252,-0.55289 -0.0562,-0.58224 -0.0293,-0.002 -0.058,-0.004 -0.0862,-0.004 z", +2.20356, 4.42723, +"M -0.779833 -4.42535 c -0.11252,0.01 -0.20766,0.0645 -0.31936,0.15707 -0.19303,0.1602 -0.30553,0.46533 -0.24987,0.67821 0.0557,0.21288 -0.031,0.75799 -0.19276,1.21128 -0.16176,0.45332 -0.29873,0.73139 -0.30366,0.61778 -0.006,-0.11371 -0.12301,-0.0935 -0.26176,0.0452 -0.19127,0.19127 -0.10817,0.47025 0.34411,1.1537 0.45766,0.69158 0.55864,1.03463 0.43407,1.47638 -0.0892,0.31659 -0.13322,0.67331 -0.0981,0.79292 0.0352,0.11957 0.15515,0.65783 0.267,1.19605 0.11176,0.53827 0.24306,1.10126 0.29128,1.25078 0.1727,0.53503 0.7492,0.25702 1.23653,-0.59635 0.27267,-0.47751 0.6625,-0.86921 0.86619,-0.87004 0.20765,-9.2e-4 0.5269,-0.33172 0.72679,-0.75294 0.29035,-0.6119 0.31116,-0.88889 0.11183,-1.49304 -0.13459,-0.40798 -0.22205,-1.12174 -0.19417,-1.58632 0.11331,-1.88242 -0.006,-2.47587 -0.49595,-2.47587 -0.25281,0 -0.83601,-0.21102 -1.29552,-0.46928 -0.44311,-0.24903 -0.67905,-0.35297 -0.86669,-0.33554 z", +2.98889, 3.67435, +"M 0.0402496 -3.67435 c -0.32831,0 -1.18189,0.92749 -1.79096,1.94648 -0.3584,0.59962 -0.44172,0.96993 -0.33994,1.5125 0.10659,0.56847 0.0207,0.89088 -0.41379,1.54736 -0.30817,0.46568 -0.51868,1.04377 -0.47984,1.31799 0.0652,0.45978 0.15767,0.48811 1.5781,0.48811 0.9272,0 1.60942,0.10087 1.77078,0.26195 0.68945,0.68812 2.06575,-0.0134 2.06575,-1.05284 0,-0.21065 0.15263,-0.67888 0.33994,-1.04091 0.34011,-0.65768 0.33957,-0.65885 -0.40829,-1.25881 -0.58894,-0.47247 -0.77875,-0.80242 -0.89043,-1.54736 -0.14276,-0.95204 -0.94727,-2.17447 -1.43132,-2.17447 z", +3.40151, 5.32865, +"M 2.71045 -5.32831 v 3.7e-4 c -0.67587,-0.012 -1.14971,0.34982 -1.61607,1.21978 -0.37425,0.69821 -0.53418,0.84374 -0.97521,0.8875 -0.312,0.0309 -0.59827,0.1844 -0.70069,0.37577 -0.2226,0.41586 -0.49528,0.41624 -0.49528,7e-4 0,-0.76048 -1.53295,-0.4721 -1.64379,0.30924 -0.0339,0.24004 0.0495,0.46036 0.20873,0.54939 0.37193,0.2081 0.33168,1.02339 -0.0686,1.38571 -0.49393,0.44696 -1.00322,2.96143 -0.75706,3.73717 0.13368,0.42094 0.97103,0.75376 1.58712,0.63054 0.60075,-0.12019 0.73147,0.051 0.50116,0.65685 -0.0961,0.2532 -0.13673,0.56011 -0.0898,0.68207 0.0467,0.12199 0.19735,0.22188 0.33479,0.22188 0.31413,0 0.6262,-0.56153 0.49789,-0.89591 -0.053,-0.13863 0.0311,-0.82668 0.18716,-1.52901 0.31845,-1.4316 0.19566,-1.84197 -0.4343,-1.44858 -0.48884,0.30529 -0.65563,0.11304 -0.66886,-0.77128 -0.007,-0.43091 -0.0729,-0.93369 -0.14734,-1.11741 -0.18115,-0.44714 0.24354,-0.91857 0.82717,-0.91857 0.24714,0 0.58532,-0.15039 0.75154,-0.33411 0.36082,-0.39872 1.28482,-0.44747 1.58678,-0.0837 0.50646,0.6103 0.83488,0.19 0.83488,-1.06807 0,-0.66226 0.0822,-0.86909 0.50773,-1.27679 0.65033,-0.6231 0.61157,-1.14509 -0.09,-1.20588 -0.0467,-0.005 -0.093,-0.008 -0.13814,-0.008 z", +3.13042, 4.93641, +"M 0.240783 -4.93553 c -0.15688,-0.0178 -0.29819,0.23397 -0.49049,0.81373 -0.2825,0.85157 -0.93362,1.59307 -1.39943,1.59307 -0.39149,0 -0.56027,0.24786 -0.56027,0.82307 0,0.18722 -0.20606,0.53783 -0.45779,0.77901 -0.4317,0.41355 -0.59724,0.90453 -0.34324,1.01741 0.0626,0.028 0.32056,0.45291 0.57229,0.94429 0.43015,0.8396 0.72124,1.15726 1.66856,1.82145 0.32624,0.22878 0.39098,0.39448 0.39098,0.99971 0,0.39888 0.0823,0.80753 0.18298,0.90823 0.25071,0.2507 0.52985,0.2297 1.05213,-0.0788 0.43363,-0.25616 0.51743,-0.4387 0.4658,-1.01474 -0.0233,-0.25645 0.50065,-0.98195 1.348,-1.8672 0.42045,-0.43923 0.38879,-0.57978 -0.18835,-0.83377 -0.54393,-0.23942 -0.54167,-0.22334 -0.32824,-2.31596 0.0877,-0.8595 0.15391,-0.94177 0.70992,-0.88519 0.15197,0.0155 0.26679,-0.0756 0.26679,-0.21137 0,-0.30291 -0.13407,-0.30005 -0.77732,0.018 -0.64195,0.31753 -0.85123,0.57637 -1.05619,1.3049 -0.0882,0.31325 -0.29044,0.63899 -0.44972,0.72425 -0.15934,0.0852 -0.33341,0.29254 -0.38672,0.46045 -0.16715,0.5267 -0.33974,0.3349 -0.41637,-0.46279 -0.0465,-0.4866 -0.17065,-0.83911 -0.33826,-0.96165 -0.24082,-0.17607 -0.24289,-0.21137 -0.022,-0.39467 0.14751,-0.1224 0.24275,-0.43967 0.24275,-0.80907 0,-0.42563 0.11425,-0.74365 0.38136,-1.06115 0.43886,-0.52158 0.46645,-0.71391 0.16257,-1.12559 -0.0841,-0.11391 -0.15837,-0.17762 -0.2297,-0.18565 z", +3.36677, 6.16908, +"M 2.46494 -6.16587 c -0.0541,-0.01 -0.12003,0.003 -0.18482,0.0437 -0.14889,0.092 -0.21185,0.45187 -0.17387,0.99402 l 0.0595,0.84965 -0.8909,0.25437 c -0.85575,0.24425 -0.91404,0.30547 -1.49387,1.561 -0.68138,1.47535 -0.8842,1.39519 -0.95601,-0.37731 -0.0677,-1.67347 -0.53514,-1.57118 -0.54675,0.1197 -0.008,1.20372 -0.14815,1.49162 -0.91678,1.88573 -0.33093,0.1697 -0.55445,0.43025 -0.55445,0.64665 0,0.31078 0.1713,0.37963 1.20109,0.48124 0.9293,0.0916 1.27169,0.056 1.51288,-0.15692 0.17144,-0.15173 0.40028,-0.22045 0.50832,-0.15367 0.34578,0.21373 0.21149,0.66082 -0.35303,1.17641 -0.30209,0.2759 -0.64427,0.77409 -0.76029,1.10686 -0.28842,0.82736 -0.63087,0.63547 -0.63087,-0.35346 0,-0.78244 -0.0622,-0.90627 -0.45738,-0.90627 -0.31541,0 -0.7871,0.90286 -1.04012,1.99129 -0.23161,0.9964 -0.22259,1.08589 0.16459,1.6532 0.22515,0.32984 0.51912,0.64232 0.65352,0.69436 0.40194,0.15571 0.95683,-0.25666 0.95683,-0.71094 0,-0.48104 0.73081,-0.96973 1.18811,-0.79425 0.41463,0.1592 0.35885,0.40487 -0.17185,0.7526 -0.495,0.32433 -0.61311,0.99321 -0.24064,1.36566 0.25886,0.25887 0.69051,0.28229 1.0462,0.0571 0.1824,-0.11553 0.21563,-0.36728 0.12213,-0.92083 -0.13213,-0.78273 -0.0775,-0.84677 0.66079,-0.77645 0.16235,0.0149 0.40663,-0.10649 0.54313,-0.27095 0.19821,-0.23888 0.20282,-0.37194 0.0222,-0.6612 -0.12434,-0.19914 -0.17751,-0.44051 -0.11809,-0.53664 0.0594,-0.0961 0.0229,-0.48362 -0.0813,-0.86098 -0.23192,-0.83997 0.12462,-1.35152 0.94265,-1.35152 0.63152,0 0.89091,-0.51453 0.89091,-1.76764 0,-0.91589 -0.27505,-1.06452 -0.83144,-0.4497 -0.45014,0.49738 -0.77029,0.46537 -0.87594,-0.0874 -0.091,-0.47571 0.45137,-1.57555 0.77684,-1.57555 0.18146,0 0.93054,-1.3103 0.93054,-1.62773 0,-0.0901 -0.16195,-0.3501 -0.35992,-0.57829 -0.19792,-0.22822 -0.3899,-0.50528 -0.42664,-0.61551 -0.0186,-0.0556 -0.061,-0.0898 -0.11526,-0.0999 z", +3.36642, 4.71204, +"M 2.14302 -4.71204 c -0.63965,0.002 -0.47682,2.13844 -1.24978,1.55409 -0.92613,-1.50861 -3.40173,-0.29544 -3.14116,1.46395 0.51593,1.36936 -1.77871,0.91049 -0.92686,1.85562 1.40951,0.21819 -0.44125,1.4145 0.82327,1.66419 -0.57592,1.3499 0.6215,1.87772 1.29993,2.57621 l 0.0604,0.24159 c 1.21026,0.51184 1.30627,-1.98878 1.77943,-2.80526 0.61441,-1.01698 0.0716,-4.43446 2.03773,-3.03058 1.29395,-0.57329 -0.14993,-2.07687 -0.0896,-3.11886 -0.25448,-0.28697 -0.44513,-0.40085 -0.59283,-0.40095 z", +2.67932, 7.19187, +"M 1.11365 -7.19037 c -0.3679,0.0246 -0.63802,0.36228 -0.63802,0.85647 0,0.30813 -0.20548,0.69239 -0.54292,1.01568 -0.4374,0.41905 -0.65076,0.49812 -1.10192,0.40788 -0.45379,-0.0908 -0.64747,-0.0176 -1.02293,0.38733 -0.49761,0.53665 -0.51748,0.65878 -0.46996,2.8971 0.0235,1.10675 0.10496,1.52987 0.32646,1.70046 0.19433,0.14956 0.36827,0.16624 0.51027,0.0483 0.29856,-0.24777 0.67015,-1.55748 0.53886,-1.89956 -0.13302,-0.34677 0.56593,-0.78978 0.75734,-0.48002 0.19788,0.32019 -0.0997,2.15035 -0.38855,2.39006 -0.4049,0.33604 -0.31862,0.66299 0.28818,1.09508 0.4482,0.31914 0.55259,0.52604 0.55259,1.09468 0,0.38551 -0.1213,1.04395 -0.26923,1.46305 -0.32207,0.91276 -0.13816,3.08081 0.28414,3.35093 0.18196,0.11631 0.35857,0.0495 0.5824,-0.21965 0.17673,-0.21254 0.28298,-0.44885 0.23579,-0.52518 -0.0472,-0.0763 -0.0118,-0.39886 0.0802,-0.71701 0.12359,-0.43098 0.0987,-0.64618 -0.0975,-0.84237 -0.30484,-0.30484 -0.35517,-1.49996 -0.0705,-1.67587 0.1173,-0.0725 0.18049,-0.84131 0.16121,-1.95881 -0.0334,-1.94431 0.16284,-2.55058 0.62232,-1.92213 0.14856,0.20308 0.41417,0.30595 0.69123,0.26682 0.59243,-0.0836 0.73976,-0.95822 0.20916,-1.24219 -0.29405,-0.15734 -0.37126,-0.4532 -0.44656,-1.71577 -0.05,-0.83913 -0.0241,-1.70487 0.0576,-1.92415 0.21457,-0.57599 -0.13731,-1.67514 -0.5816,-1.81613 -0.0932,-0.0296 -0.18312,-0.0407 -0.26802,-0.0351 z", +3.567, 4.28391, +"M 2.1794 -4.28301 c -0.79452,0.0388 -2.13823,1.33278 -2.9006,1.67225 -1.91886,1.17374 2.21816,1.25105 0.10284,2.06499 -0.58361,-0.83118 -3.01823,-1.30637 -2.94711,0.17002 3.14717,0.20852 0.16743,2.80766 0.98237,4.53047 l 0.2031,0.12919 c 1.35802,-1.01667 2.60945,-2.23253 4.49275,-2.01435 2.35172,-1.19271 1.28122,-3.42569 0.70123,-5.26324 0.0473,-0.98574 -0.21839,-1.30966 -0.63458,-1.28933 z", +2.56174, 3.97214, +"M 1.23387 -3.97214 c -0.18031,0 -0.50408,0.11364 -0.92088,0.35086 -0.75763,0.43141 -0.89736,0.64381 -0.99891,1.519285 -0.10988,0.94689 -0.17227,1.02365 -0.88521,1.09244 -0.89236,0.0859 -1.14888,0.68747 -0.90125,2.11048 0.0846,0.48667 0.1492,1.23005 0.14367,1.65208 -0.008,0.60558 0.0866,0.7674 0.44804,0.7674 0.25202,0 0.52438,0.10634 0.6046,0.23617 0.21463,0.34726 0.57153,0.29583 2.12908,-0.30748 1.35943,-0.52657 1.40925,-0.57732 1.58906,-1.59422 0.28866,-1.63263 0.097,-2.0538 -1.0387,-2.2784 -1.22331,-0.24191 -1.64524,-0.80341 -1.07591,-1.43248 0.2218,-0.24509 0.40307,-0.615415 0.40307,-0.823195 0,-0.20788 0.17214,-0.54991 0.3824,-0.76018 0.3479,-0.34787 0.35277,-0.53337 0.12094,-0.53276 z", +1.40175, 2.35464, +"M 0.715347 1.73249 c 0.5213,-0.7219 1.00154,-1.43136 0.42262,-1.81986 -0.0242,-0.002 -0.0403,-0.0133 -0.0667,-0.0124 -0.2124,-0.35703 -0.18293,-1.55466 -0.66093,-1.50121 -0.38391,0.0613 -0.36171,-0.99746 -1.04282,-0.70124 -0.84233,0.26952 -1.03878,1.15204 -0.35968,1.72237 -0.28818,0.80849 -0.72983,1.85273 -0.017,2.57194 0.11293,0.13641 0.31123,0.26109 0.54043,0.35233 0.20746,0.0826 0.99861,-0.35508 1.18408,-0.61193 z", +3.58152, 4.34829, +"M -2.44195 -4.34714 c -0.75319,0.0362 -0.7762,0.92587 -0.55537,1.58591 -0.55027,0.26441 -0.90264,0.93541 -0.1653,1.39825 0.67743,0.40826 1.43356,1.01809 1.58319,1.83852 0.64834,0.73248 -0.1527,1.61798 -0.33278,2.42552 l 0.54118,0.63011 c 0.0142,-0.52312 0.48191,-0.59895 0.82051,-0.61429 -0.003,0.37955 0.1004,0.74248 0.40424,1.04909 0.11924,0.14402 0.32868,0.2752 0.57065,0.37153 0.21902,0.0872 1.05405,-0.37478 1.24987,-0.64594 0.55034,-0.76211 1.05742,-1.51075 0.44627,-1.92088 -0.0255,-0.002 -0.0426,-0.014 -0.0704,-0.0131 -0.0106,-0.0172 -0.0174,-0.0448 -0.0267,-0.0654 0.21024,-0.3016 0.38758,-0.56962 0.74632,-0.0954 0.65582,0.69676 1.24636,-0.49914 0.37097,-0.65739 -0.4622,0.24406 -0.37168,-0.72499 -0.69993,-0.96236 -0.10039,-0.91415 -0.4508,-1.68175 -0.81563,-2.50845 -0.28239,-0.46623 -0.83252,-1.22127 -1.4135,-1.3415 -0.0742,-0.0449 -0.15322,-0.0625 -0.2357,-0.0556 -0.32052,0.0264 -0.68498,0.39222 -0.99017,0.71794 -0.2134,-0.59389 -0.55451,-1.1417 -1.22475,-1.1271 -0.0728,-0.01 -0.14044,-0.0118 -0.20295,-0.01 z", +3.66123, 3.92165, +"M -2.89919 -0.28264 c 0.5248,0.64771 0.38465,1.62029 -0.46302,1.88928 -0.85786,0.6722 0.38319,1.31277 0.57724,1.97921 0.11171,0.25581 0.51808,0.48818 0.72707,0.20878 0.35103,-0.2002 0.83823,0.2502 1.11623,-0.3514 0.28826,-0.50439 0.39449,-1.18406 1.07021,-1.30949 0.38793,-0.46627 -0.45389,-0.99265 0.11266,-1.47639 0.35536,-0.69249 0.56184,-1.84188 1.34721,-2.07791 0.63362,0.38352 1.48161,0.65582 1.72651,-0.31936 0.39002,-0.4159 0.59822,-1.04678 -0.19431,-1.0914 -0.59473,-0.216 -1.75681,-0.9684 -1.89285,-1.06904 -0.17327,-0.12817 -0.40811,0.35444 -0.60881,0.59258 -0.2757,0.48096 -1.0685,0.56942 -0.82373,1.34875 0.16859,0.56791 -0.21712,0.74465 -0.57515,0.30903 -0.73642,-0.18936 -0.47345,1.25664 -1.18184,0.50643 -0.15757,-0.16278 -0.39659,0.0541 -0.64211,-0.053 -0.23726,-0.1035 0.0848,-0.3456 -0.27012,-0.34843 -0.37484,-0.003 -0.30986,0.87936 -0.0252,1.26233 z", +4.66444, 5.18369, +"M 2.11104 -5.18252 c -0.17844,-0.0365 -0.59098,0.79076 -0.87075,0.86971 -0.28109,-0.28971 -0.64463,-0.14558 -0.67074,0.31678 0.17296,0.35303 -0.32848,0.92855 -0.38034,0.37982 -0.48361,-0.88691 -0.84545,0.5953 -1.32914,0.67386 -0.34102,0.46556 0.0161,0.50242 0.25064,0.78445 -0.56409,0.44035 -0.67167,0.83211 -0.3612,1.14774 -0.006,0.0911 0.005,0.19332 0.0424,0.31316 0.16859,0.56791 -0.21712,0.74465 -0.57516,0.30903 -0.73641,-0.18936 -0.47344,1.25663 -1.18184,0.50642 -0.15758,-0.16277 -0.39629,0.0539 -0.64182,-0.0532 -0.23725,-0.1035 0.0846,-0.34547 -0.27027,-0.3483 -0.37484,-0.003 -0.30999,0.87948 -0.0253,1.26246 0.52481,0.64771 0.38466,1.6203 -0.46302,1.88928 -0.85785,0.6722 0.3837,1.31277 0.57775,1.97921 0.1117,0.25581 0.51758,0.48817 0.72657,0.20878 0.35102,-0.20021 0.83873,0.25019 1.11673,-0.3514 0.28826,-0.5044 0.39399,-1.18405 1.06971,-1.30949 0.38793,-0.46627 -0.4539,-0.99265 0.11266,-1.47639 0.35533,-0.69249 0.56234,-1.84188 1.34771,-2.07791 0.30376,0.18387 0.65616,0.34025 0.96842,0.34778 0.33359,0.3812 0.84312,0.50562 1.2237,-0.11369 -0.30948,-1.21831 1.01658,-2.14727 1.88669,-2.2686 -0.41399,-0.6498 -0.0859,-1.85265 -0.94827,-2.09135 -0.29061,-0.0875 -1.51122,0.0898 -1.51876,-0.51108 0.006,-0.26471 -0.0266,-0.37397 -0.0858,-0.38705 z", +3.05335, 5.71572, +"M 2.29249 -5.71375 c -0.44087,0.0257 -0.84558,0.29637 -0.4935,0.77566 0.043,0.5726 -0.66244,1.13031 -1.01182,1.61954 -0.59536,0.0643 -0.67884,0.58579 -0.62891,1.04283 -0.0328,0.0299 -0.0632,0.056 -0.0997,0.092 -0.45413,0.43121 -0.7044,1.02376 -0.9338,1.62522 -0.0229,-0.0163 -0.0443,-0.0282 -0.0687,-0.0486 -0.64201,-0.37339 -0.381,-1.68417 -1.16064,-1.73633 -0.89157,0.53168 -0.63784,1.71779 -0.94877,2.58124 0.41748,0.0224 0.78081,-0.11303 0.77824,-0.56637 -0.029,-0.81387 0.44852,-0.14497 0.38963,0.22686 0.1398,0.26873 0.29702,0.57106 0.45476,0.83974 -0.22764,0.40185 -0.52107,0.74432 -0.9617,0.95911 -0.36584,-0.3203 -0.60315,0.95868 -0.12867,0.68575 0.24482,-0.0374 0.49482,-0.0125 0.74567,0.0408 -0.13684,0.27374 -0.30318,0.52271 -0.54673,0.70848 -0.72324,1.44096 1.7649,0.37106 0.93432,1.48157 -1.67179,-0.43188 -1.37967,2.24445 0.49197,0.51159 0.93927,-0.75809 1.02925,-2.0752 2.374,-2.39416 0.0427,-0.19658 0.0496,-0.37691 0.0326,-0.54519 0.007,-0.013 0.0142,-0.0244 0.0212,-0.0377 -0.0109,-0.006 -0.0181,-0.0127 -0.0284,-0.0186 -0.0376,-0.26876 -0.14378,-0.50259 -0.29869,-0.70797 0.0675,-0.50253 0.39688,-1.12995 0.27337,-1.65519 0.0776,-0.12843 0.15978,-0.26383 0.2372,-0.3974 0.51546,-0.0608 0.96877,-0.52849 0.25114,-0.86041 -0.99645,-0.23462 -0.10779,-1.19683 -0.005,-1.79162 -0.13147,-0.84084 0.53896,-1.24912 1.0418,-1.73478 0.20727,-0.50166 -0.26911,-0.72137 -0.71004,-0.69608 z", +3.25546, 5.30144, +"M 1.7045 -3.73289 c -0.59536,0.0643 -0.67884,0.58579 -0.62891,1.04283 -0.0328,0.0299 -0.0632,0.056 -0.0997,0.092 -0.11954,0.11351 -0.22424,0.23899 -0.31885,0.37207 -0.16346,-0.31767 -0.41725,-0.59374 -0.693,-0.86196 -0.0135,-0.57623 -0.52533,-0.68908 -0.93429,-0.86196 -0.3143,-0.11364 -0.30232,-0.22096 -0.26924,-0.50178 10e-4,-0.35694 -0.19302,-0.64802 -0.63614,-0.70849 -0.52435,-0.42985 -0.56304,0.22719 -0.74414,0.56328 0.27,0.2644 0.29136,0.75232 -0.0961,1.02939 -0.41132,0.0707 -0.85182,1.03037 -0.23047,1.04387 0.0806,0.4722 0.45971,1.10991 0.004,1.55132 -0.11771,0.33019 0.0386,0.9166 0.39997,1.19631 -0.16174,0.3523 -0.42196,0.8126 -0.35452,1.31207 0.12679,0.12631 0.14632,0.23085 0.13179,0.31729 l 0.17828,0.42323 1.16996,0.47026 c -0.67056,1.39319 1.77057,0.35041 0.9462,1.45262 -1.67179,-0.43188 -1.37969,2.24446 0.49194,0.5116 0.93927,-0.7581 1.02929,-2.0752 2.37403,-2.39417 0.0427,-0.19657 0.0496,-0.37691 0.0325,-0.54519 0.007,-0.013 0.0142,-0.0244 0.0212,-0.0377 -0.0109,-0.006 -0.0181,-0.0127 -0.0284,-0.0186 -0.0375,-0.26875 -0.14377,-0.50258 -0.29869,-0.70796 0.0675,-0.50253 0.39688,-1.12996 0.27337,-1.6552 0.0776,-0.12843 0.15978,-0.26383 0.2372,-0.39739 0.51546,-0.0608 0.96877,-0.52849 0.25114,-0.86041 -0.99645,-0.23463 -0.10795,-1.19683 -0.005,-1.79163 -0.13147,-0.84083 -0.82474,-0.52493 -1.17413,-0.0357 z", +2.78553, 3.0102, +"M 1.13709 -3.01011 c -0.11999,0.003 -0.27165,0.0974 -0.47025,0.32039 0.066,1.27176 -1.98331,0.51776 -2.42723,1.40147 -0.0487,-0.008 -0.0958,-0.0135 -0.13954,-0.0155 v 0 c -0.1647,-0.007 -0.38814,1.2022 -0.42942,1.30522 -0.044,0.10842 -0.0601,0.18666 0.12544,0.44857 -0.29803,0.73252 -0.15986,0.47603 -0.30581,1.26773 -0.70138,0.52342 0.0894,1.15559 0.6594,0.67903 0.0741,-0.0339 0.14901,-0.0598 0.22426,-0.0801 0.006,0.0576 0.0156,0.14035 0.019,0.18707 0.3897,0.22008 0.6114,0.17646 0.72191,-0.0186 l 0.27597,0.52503 c 0.45595,-0.0258 0.61214,-0.2684 0.60356,-0.57309 0.61931,0.11342 1.21306,0.13704 1.71154,-0.50953 1.48952,-0.17693 -0.82934,-2.42653 0.68212,-1.97766 0.62791,0.54053 0.50184,-1.28519 -0.30697,-0.9617 -0.50501,-0.32149 -0.42357,-2.01307 -0.94361,-1.99832 z", +3.40832, 4.84469, +"M 2.62836 -4.84469 c -0.55086,0.67388 -0.63529,1.54387 -0.99475,2.24637 -0.0561,-0.0679 -0.1206,-0.11028 -0.20103,-0.108 h -5.3e-4 c -0.11999,0.003 -2.65788,1.24415 -2.89783,1.72186 -0.0487,-0.009 -0.0958,-0.0135 -0.13954,-0.0155 -0.0819,-0.003 -0.17807,0.29411 -0.2594,0.60668 -0.20463,-0.0148 -0.40645,-0.0353 -0.59997,-0.0636 -0.21733,0.51377 -0.40796,0.43238 -0.59894,0.21445 -0.86921,0.67457 0.0811,1.38892 0.91467,1.8433 -0.0122,0.0981 -0.0303,0.22652 -0.0661,0.42065 -0.70135,0.52342 0.0894,1.15558 0.6594,0.67903 0.0741,-0.0339 0.14904,-0.0598 0.22428,-0.0801 0.006,0.0576 0.0157,0.14035 0.0191,0.18707 0.3897,0.22008 0.61142,0.17645 0.72194,-0.0186 l 0.27593,0.52503 c 0.0851,-0.005 0.15658,-0.0193 0.2217,-0.0382 -0.54399,0.66639 2.71703,2.46603 2.19988,1.0232 -0.0139,-0.61741 -0.002,-1.35716 -0.17984,-1.98593 0.0244,-0.028 0.0494,-0.0506 0.0734,-0.0816 0.0125,-0.001 0.0226,-0.004 0.0346,-0.006 0.0456,0.024 0.0912,0.0457 0.13642,0.0744 0.28681,-0.0617 0.92583,0.13145 0.99012,-0.27905 -0.20907,-0.18446 -0.45444,-0.38854 -0.68937,-0.61029 -8e-5,-9e-5 1.1e-4,-4.4e-4 0,-5.2e-4 -0.18285,-0.66281 -0.73432,-1.43655 0.21035,-1.156 0.62791,0.54053 0.50183,-1.28519 -0.30697,-0.9617 -0.16449,-0.10471 -0.26461,-0.35892 -0.34571,-0.64802 0.40217,-0.89611 1.62198,-1.24553 1.16322,-2.50115 0.10718,-0.40833 0.32133,-0.44801 0.15195,-0.57722 -0.14476,-0.11041 -0.66517,-0.33109 -0.71729,-0.41031 z", +2.91331, 4.2784, +"M 2.48505 -2.50743 -1.1297,-0.69932 c -0.26081,0.34403 -0.73919,0.6277 -1.09585,0.98835 -0.24912,0.29904 -0.87887,0.48065 -0.71385,-0.14805 0.12544,-0.65962 -0.50944,-0.96834 -0.73168,-1.47416 -0.346,0.0114 -0.71232,0.27983 -0.97235,-0.16999 -0.28809,-0.52063 -1.0299,-0.21119 -0.64799,0.32288 0.0949,0.43869 -0.36202,1.16319 0.1949,1.57459 0.20779,0.3961 0.46321,0.88104 0.35823,1.27627 -0.32873,0.54046 0.48828,0.91234 0.59778,1.40794 -0.21794,0.44035 -0.88762,0.52868 -0.68223,1.17211 -0.14326,0.65293 0.62787,0.80659 0.88904,0.25258 0.25359,-0.22465 0.61647,-0.63708 0.95934,-0.57843 0.36095,0.23638 0.80362,0.33863 0.64427,0.90689 -0.14441,0.70198 1.27406,0.83383 0.55797,1.45519 -0.0887,0.73566 0.84516,-0.20652 0.74062,0.41996 0.0243,0.13225 0.1875,0.0766 0.22429,-0.008 0.52299,-0.10663 0.83538,-0.53091 0.87788,-1.00509 -0.28215,-0.43305 -0.9743,-0.71636 -0.8522,-1.3157 0.1777,-0.15854 0.72403,0.14848 0.86856,-0.2217 0.0626,-0.53635 0.50097,-0.95686 0.279,-1.47081 -0.26406,-0.25211 -0.7397,-0.041 -0.99059,-0.11792 -0.1503,-0.59096 0.62362,-0.44277 0.78004,-0.89386 0.23735,-0.31162 -0.0744,-0.59806 -0.34594,-0.66771 0.35082,-0.27779 0.25851,-0.66602 0.19046,-1.00583 z", +3.95524, 4.27828, +"M -1.82143 -4.27815 c -0.25411,0.0105 -0.45471,0.25635 -0.21601,0.59015 0.0949,0.43869 -0.3616,1.16318 0.19532,1.57458 0.2078,0.3961 0.4631,0.88118 0.35814,1.27641 -0.0519,0.0854 -0.0729,0.16631 -0.0749,0.24443 -0.30033,-0.55817 -0.63892,-1.39159 -1.45005,-0.93483 -0.68429,0.018 -1.4623,0.76829 -0.48681,1.12758 0.43926,0.0751 -0.26699,0.60334 0.20516,0.87695 -0.0159,0.0235 -0.0497,0.0421 -0.0672,0.0651 l 1.56943,0.97152 c -0.003,-0.009 0,-0.0182 -0.003,-0.0269 0.0739,-0.017 0.13893,-0.0512 0.20052,-0.0894 -0.0235,0.0959 -0.022,0.20757 0.0222,0.34571 -0.14325,0.65293 0.6282,0.80671 0.88937,0.2527 0.0456,-0.0404 0.0984,-0.0907 0.15036,-0.13952 0.28739,0.18954 0.63963,0.18337 0.97256,-0.0904 0.0949,0.088 0.29792,0.16289 0.50125,0.2434 0.0167,0.087 0.0148,0.18794 -0.0206,0.3147 -0.0412,0.20018 0.049,0.35167 0.17622,0.4837 -0.60791,0.27447 1.22695,0.76516 1.12241,1.39164 0.0243,0.13225 0.18749,0.0763 0.22429,-0.008 0.52297,-0.10663 0.83547,-0.53093 0.87797,-1.00511 -0.18696,-0.28696 -0.5497,-0.50948 -0.74052,-0.80047 0.3039,-0.33202 0.6305,-0.62391 1.08003,-0.69298 0.3443,-0.30868 -0.18545,-0.98462 0.27493,-1.39681 -0.003,-0.027 0.0145,-0.0359 0.0156,-0.0605 v -5.3e-4 c -0.15378,-0.23531 -0.0824,-0.95349 -0.51263,-0.59635 -0.008,0.0349 -0.0352,0.0725 -0.0403,0.10697 -0.23939,0.0364 -0.4218,0.16976 -0.58653,0.33073 -0.0687,0.002 -0.13319,1.9e-4 -0.18605,-0.016 -0.15028,-0.59096 0.62391,-0.44292 0.78031,-0.894 0.23736,-0.31162 -0.0747,-0.59801 -0.34621,-0.66766 0.35081,-0.2778 0.25874,-0.66582 0.19069,-1.00563 v -5.3e-4 l -1.12967,-0.69918 c -0.2608,0.34403 -0.73938,0.62792 -1.09606,0.98857 -0.24911,0.29904 -0.87866,0.48039 -0.71364,-0.14831 0.12544,-0.65962 -0.5095,-0.96851 -0.73173,-1.47433 -0.34602,0.0114 -0.71252,0.2798 -0.97255,-0.17002 -0.10803,-0.19523 -0.27956,-0.27346 -0.43202,-0.26716 z", +4.74428, 5.06938, +"M -3.5022 -4.25506 c 0.0377,1.35963 1.56777,-0.33227 2.03738,0.80243 0.10379,0.0956 0.208,0.18438 0.31094,0.26506 -0.0406,0.39354 -0.0321,0.76444 0.0226,0.99137 -0.0937,0.13068 -0.17696,0.30235 -0.24523,0.49401 l -0.016,0.006 c 0.002,0.008 0.003,0.018 0.005,0.0266 -0.0996,0.28994 -0.16492,0.62239 -0.17565,0.93429 -0.0765,0.0524 -0.1308,0.11334 -0.15194,0.17898 l -7.4e-4,1e-4 c -0.0328,0.10411 0.0199,0.22082 0.19471,0.33612 0.0223,0.0965 0.0512,0.18645 0.0924,0.26307 -0.0649,0.0713 -0.11275,0.14849 -0.14391,0.22932 l -4e-4,-3.2e-4 c -0.0213,0.0536 -0.0342,0.10888 -0.042,0.16478 -0.07,-0.0196 -0.14851,-0.0772 -0.2347,-0.1906 -0.4414,-0.50596 -1.07643,-0.19724 -1.61154,-0.33475 -0.20468,0.2792 -0.21946,0.73356 -0.73384,0.66033 -0.58741,-0.0949 -0.8024,0.67948 -0.14649,0.70885 0.40367,0.19623 0.69169,1.00265 1.35917,0.8186 0.43988,0.0811 0.97908,0.17983 1.22514,0.50646 0.22215,0.59228 1.0194,0.17931 1.47686,0.39919 0.0351,0.0735 0.0519,0.1516 0.0635,0.23048 -0.003,0.23736 -0.0256,0.46963 -0.1023,0.6877 0.73066,0.46689 1.85021,2.14597 1.91273,0.29922 l -0.0399,-0.38017 c 0.17772,-0.45619 0.21761,-0.97787 0.11319,-1.43135 0.18902,-0.0344 0.36991,0.007 0.54937,0.25255 0.46301,0.54704 1.44266,-0.4874 1.48929,0.45953 0.5239,0.52402 0.35947,-0.79213 0.7877,-0.32307 0.11904,0.0625 0.17579,-0.10037 0.1322,-0.18137 0.23905,-0.4772 0.0983,-0.98501 -0.24849,-1.31123 -0.51486,-0.0455 -1.16504,0.32403 -1.56109,-0.14209 -0.015,-0.23767 0.56363,-0.47753 0.36169,-0.8198 -0.38324,-0.38042 -0.44322,-0.98487 -0.98457,-1.1276 -0.36135,0.052 -0.48894,0.55663 -0.70435,0.70647 -0.55766,-0.24666 0.0368,-0.76423 -0.22141,-1.1658 -0.0503,-0.19364 -0.18405,-0.2692 -0.33237,-0.2754 -0.0404,-0.3067 -0.57848,-0.81058 -0.65503,-0.97077 -0.40971,-0.63902 0.92366,-1.3558 0.28285,-1.97222 -0.0522,-0.16312 -0.21544,-0.27501 -0.49717,-0.33243 -0.0587,-0.0278 -0.11515,-0.0458 -0.1692,-0.0573 -0.0289,-0.0113 -0.057,-0.0238 -0.0853,-0.0361 -1.03981,-0.53291 -2.51397,0.22465 -3.31269,0.63055 z", +3.95515, 2.62566, +"M 3.95505 -0.686011 c -0.15408,-0.23494 -0.0822,-0.95418 -0.51263,-0.59686 -0.008,0.0349 -0.0352,0.0725 -0.0403,0.10697 -0.83055,0.12629 -1.00177,1.38378 -1.97093,1.12551 -0.48091,0.005 -0.94795,-0.32656 -1.45987,-0.33538 -0.37338,-0.52472 -0.57999,-1.00169 -0.26509,-1.59473 0.0936,-0.67218 -1.16382,-0.98056 -0.65939,-0.11679 0.26345,0.50822 0.18968,1.40264 -0.508,0.75758 -0.32954,-0.53085 -0.64802,-1.61561 -1.54771,-1.10898 -0.68429,0.018 -1.46227,0.76829 -0.48678,1.12758 0.43926,0.0751 -0.26701,0.60334 0.20516,0.87695 -0.0159,0.0235 -0.0497,0.0426 -0.0672,0.0656 l 1.56941,0.97152 c -0.002,-0.009 -10e-4,-0.0182 -0.003,-0.0269 0.39897,-0.0917 0.59063,-0.63554 0.87437,-0.0842 0.29559,0.58427 0.85214,0.78099 1.36064,0.36277 0.29091,0.26967 1.59176,0.4144 0.83405,0.98495 -0.96634,0.19424 0.0436,1.30965 0.4563,0.51211 0.65617,-0.49446 1.06992,-1.43769 1.93064,-1.56993 0.3443,-0.30868 -0.18545,-0.98462 0.27493,-1.39681 -0.002,-0.0272 0.0148,-0.0361 0.0155,-0.061 z", +3.39269, 3.51493, +"M 0.0750514 -3.51461 c -0.19846,-0.006 -0.39854,0.0731 -0.58965,0.27905 -0.3796,0.57495 -1.2206,0.87046 -1.87431,0.68161 -0.71429,-0.005 -1.49539,0.87511 -0.60666,1.43299 0.6417,0.38671 1.3579,0.96436 1.49963,1.7415 0.61413,0.69383 -0.14464,1.5326 -0.31522,2.29753 l 0.51263,0.59686 c 0.0171,-0.63284 0.7448,-0.57701 1.00822,-0.58962 0.0858,-1.15842 1.23714,0.33687 1.55236,-0.74983 0.69887,0.1792 0.74695,-1.30546 1.36168,-0.49299 0.62122,0.65999 1.1806,-0.4728 0.35139,-0.62271 -0.4378,0.23119 -0.35205,-0.68673 -0.66301,-0.91157 -0.0951,-0.86591 -0.42699,-1.59301 -0.77256,-2.37608 -0.28776,-0.47507 -0.86916,-1.26771 -1.4645,-1.28674 z", +2.56824, 2.063, +"M -1.65563 -2.06134 c -1.25863,0.0605 -1.00656,1.90514 -0.4826,2.70738 1.27622,-0.20063 1.59649,2.35287 2.91245,1.0399 0.34188,-0.16365 0.38346,-0.31718 0.30757,-0.47967 0.0248,-0.0232 0.0505,-0.0458 0.0754,-0.0689 0.78294,-0.61042 2.07913,-1.20867 0.99887,-2.30315 -0.1618,-0.25964 -0.35631,-0.35126 -0.56606,-0.33394 -0.4303,0.0354 -0.91952,0.5265 -1.3292,0.96373 -0.28645,-0.79722 -0.7443,-1.53257 -1.64403,-1.51297 -0.0978,-0.0128 -0.18852,-0.0162 -0.27243,-0.0128 z", +2.69804, 3.17552, +"M -0.907231 -3.17534 c -0.24929,0.007 -0.46483,0.2028 -0.59435,0.71789 -0.1246,0.75535 -1.2685,1.31142 -0.66913,2.14191 -1.32502,1.15191 0.1607,2.97757 1.02977,3.49106 l 0.1303,-0.11175 0.15128,-0.13697 c 0.8895,-0.21167 1.24411,-0.76409 1.26851,-1.69723 0.19571,-0.87034 1.02336,-1.14446 1.34665,-0.12867 0.20799,-0.56415 1.74212,-1.10319 0.39257,-1.55429 -0.99736,-0.1586 -0.23361,-1.73999 -1.4904,-1.42319 -0.30638,-0.417 -1.01682,-1.31425 -1.56523,-1.29875 z", +2.85984, 5.28311, +"M 2.73793 -5.28207 c -0.015,-0.002 -0.0319,-10e-4 -0.0501,0.002 l -0.34004,0.31678 c -0.17511,0.027 -0.38357,0.16702 -0.5669,0.42116 -0.73686,-0.0649 -1.46563,0.13236 -1.66706,0.13746 -0.67315,0.017 -0.52935,1.98311 -0.49609,2.62775 0.0175,0.11077 0.0314,0.16367 0.0424,0.19378 -0.0163,0.0123 -0.0413,0.0577 -0.0791,0.18656 -0.0357,0.12199 -0.10261,0.35732 -0.14883,0.51521 -0.17169,-0.11412 -0.34298,-0.19051 -0.50125,-0.18604 -0.24929,0.007 -0.46477,0.2027 -0.59428,0.71779 -0.12462,0.75535 -1.2686,1.3115 -0.66921,2.14199 -1.32504,1.15191 0.16084,2.97725 1.02989,3.49074 l 0.13022,-0.11162 0.1509,-0.13694 c 0.8895,-0.21167 1.24425,-0.76392 1.26867,-1.69706 0.19572,-0.87034 1.02339,-1.14446 1.34668,-0.12867 0.20799,-0.56415 1.74228,-1.10333 0.39275,-1.55443 -0.98558,-0.15672 -0.25485,-1.69952 -1.45005,-1.4304 0.0337,-0.19455 0.0813,-0.37702 0.15608,-0.53589 0.30318,-0.62037 1.08029,-1.8405 1.08415,-2.40243 0.005,-0.76342 0.83722,-0.66127 0.91932,-1.45315 0.13685,-0.53732 0.26681,-1.08517 0.0419,-1.11414 z", +2.25069, 2.15736, +"M -1.31572 -2.15659 c -0.1647,-0.007 -0.28795,0.0329 -0.32919,0.13591 -0.0487,0.11989 0.0156,0.32374 0.25373,0.63355 -0.18714,0.21042 -0.36899,0.44338 -0.58703,0.64182 -0.85828,0.33362 0.60076,1.16166 0.42995,1.80145 0.20592,0.53574 0.73787,1.3365 1.35496,0.78031 l 0.16846,0.32091 c 0.59552,-0.0337 1.38631,-0.20816 2.03242,-1.02836 l -0.19119,-0.8568 c -0.137,-0.23584 -0.2603,-0.40707 -0.37311,-0.53743 0.37941,-0.26434 1.13768,-0.0887 0.64751,-0.82579 -0.0527,-0.0367 -0.10821,-0.0708 -0.1633,-0.10542 0.49546,-0.53719 -0.1007,-0.64494 -0.7457,-0.38034 -0.43736,-0.17954 -0.90406,-0.30825 -1.35702,-0.38189 -0.0559,-0.008 -0.10962,-0.0114 -0.16124,-0.0119 -0.0978,-10e-4 -0.18828,0.009 -0.27284,0.0295 -0.24662,-0.12465 -0.50609,-0.20615 -0.70591,-0.21549 z", +3.67275, 3.21569, +"M -0.0460498 -3.21533 c -0.11996,0.001 -0.23781,0.009 -0.32142,0.0129 -0.29093,0.0121 -0.53765,0.0695 -0.3235,0.53536 -0.22627,0.0914 -0.90234,0.55329 -1.04024,-0.0388 -0.31879,-0.0384 -0.77856,0.15926 -0.93379,0.43718 -0.43863,-0.21291 -0.84127,0.042 -0.99891,0.44856 -0.043,0.32893 0.0751,0.60333 0.26046,0.84749 -0.009,0.3245 0.1084,0.47004 0.30022,0.49558 l -0.38343,0.45217 c 0.29165,0.62004 0.78181,0.43344 1.16014,0.0506 0.0781,0.0553 0.15775,0.10901 0.23977,0.16071 -0.53198,0.40496 -0.7605,0.97563 0.31369,1.28933 l 0.72294,-0.49765 c 0.0642,-0.0825 0.11237,-0.15383 0.16278,-0.22686 0.0327,0.0105 0.0654,0.0181 0.0982,0.0279 0.16068,0.39255 0.77761,0.90608 0.66302,1.33532 0.20593,0.53574 0.73787,1.3365 1.35496,0.78032 l 0.16846,0.32091 c 0.59552,-0.0337 1.38581,-0.20816 2.03192,-1.02837 l -0.19069,-0.85679 c -0.137,-0.23584 -0.2608,-0.40707 -0.37361,-0.53743 0.37941,-0.26434 1.13818,-0.0887 0.64801,-0.82579 -0.0527,-0.0367 -0.10871,-0.0708 -0.16383,-0.10542 0.49549,-0.5372 -0.10067,-0.64494 -0.74567,-0.38034 -0.43736,-0.17954 -0.90406,-0.30825 -1.35702,-0.38189 -0.0559,-0.008 -0.10962,-0.0114 -0.16124,-0.0119 -0.0978,-0.001 -0.18828,0.009 -0.27284,0.0294 -0.0795,-0.0402 -0.15954,-0.0736 -0.23926,-0.10387 0.11316,-0.10188 0.2712,-0.17912 0.47128,-0.21652 0.0483,-0.28576 0.18888,-1.14252 -0.003,-1.27021 -0.32433,-0.21564 -0.36465,-0.44676 -0.55502,-0.44183 -0.10408,0.003 -0.0796,-0.25731 -0.19894,-0.27234 -0.0916,-0.0237 -0.21338,-0.0292 -0.33332,-0.0279 z", +4.37172, 2.82177, +"M 4.15107 -2.76363 c -0.12588,-0.061 -0.31491,-0.0778 -0.59006,-0.0321 -0.39183,1.50176 -2.22417,-0.002 -2.85969,1.25239 -0.22059,0.57212 0.36731,0.82629 -0.0102,1.2242 -0.47996,0.50597 -1.83247,1.95136 -2.83873,1.05509 -1.37002,-0.71385 -1.45547,1.3313 -2.22411,1.81568 0.29352,0.31468 0.80913,0.29068 1.2014,0.23962 1.08757,-0.8648 2.32743,0.27342 3.58569,-0.0204 0.84516,-0.67246 1.49671,-1.57107 2.62485,-1.94719 0.46688,-0.61992 1.62754,-0.4097 1.06677,-1.52838 -0.0528,-0.66878 0.58863,-1.79182 0.0441,-2.05885 z", +4.37157, 4.1273, +"M 0.620322 -4.12594 c -0.55557,0.0573 -1.03581,1.84758 -1.54823,2.21485 0.3837,0.6876 0.283,1.30919 0.0419,1.9172 -0.42523,0.16787 -0.86971,0.17674 -1.26193,-0.1726 -1.37001,-0.71385 -1.45499,1.33153 -2.22363,1.81591 0.29352,0.31468 0.8087,0.29032 1.20097,0.23926 0.48778,-0.38788 1.00761,-0.36748 1.54461,-0.25941 -0.14566,0.3988 -0.2277,0.81069 -0.15658,1.24953 0.36957,0.23628 0.50355,0.43109 0.52038,0.60462 l 0.91723,0.64388 c 0.68612,-0.27271 2.29931,-0.23369 1.41335,-1.51153 0.38381,-0.70654 1.05535,-1.29742 0.97981,-2.16938 0.29503,-0.21386 0.61597,-0.39961 0.99218,-0.52503 0.46689,-0.61992 1.62738,-0.40991 1.06659,-1.52859 -0.0528,-0.66878 0.58846,-1.79176 0.0439,-2.05879 -0.12586,-0.061 -0.31498,-0.0777 -0.59012,-0.032 -0.31404,1.2036 -1.55213,0.47891 -2.35903,0.78858 -0.16962,-0.30286 -0.26535,-0.61458 -0.18346,-0.94051 -0.13758,-0.21015 -0.26969,-0.28917 -0.39791,-0.27595 z", +2.40615, 2.34567, +"M 1.22057 -2.34541 c -0.11996,0.001 -0.23783,0.009 -0.32144,0.0129 -0.29094,0.0121 -0.53763,0.0695 -0.32348,0.53537 -0.22627,0.0914 -0.90236,0.55323 -1.04026,-0.0388 -0.3188,-0.0384 -0.77856,0.15925 -0.9338,0.43718 -0.43862,-0.21292 -0.84126,0.042 -0.9989,0.44855 -0.043,0.32893 0.0751,0.60334 0.26045,0.8475 -0.009,0.3245 0.10843,0.47003 0.30025,0.49557 l -0.38343,0.45217 c 0.29165,0.62004 0.78179,0.4334 1.16012,0.0506 0.0781,0.0553 0.15777,0.10901 0.23979,0.16071 -0.53197,0.40497 -0.76052,0.97563 0.31366,1.28933 l 0.72295,-0.49764 c 0.0642,-0.0825 0.11239,-0.15383 0.1628,-0.22686 0.21412,0.0689 0.42973,0.123 0.64233,0.15606 l 0.0419,-0.0403 c 0.16619,-0.0829 0.52523,-0.15309 0.76946,-0.27698 0.23728,0.032 0.30295,-0.10345 0.24339,-0.30644 -0.006,-0.0574 -0.03,-0.12095 -0.0847,-0.19327 -2.9e-4,-2.4e-4 -7.2e-4,-2.8e-4 -10e-4,-5.2e-4 -0.0729,-0.13224 -0.17968,-0.27385 -0.3147,-0.40928 -0.1447,-0.38814 0.092,-0.78214 0.63511,-0.88366 0.0483,-0.28576 0.18899,-1.14252 -0.003,-1.27021 -0.32432,-0.21564 -0.36462,-0.44676 -0.55499,-0.44184 -0.10408,0.003 -0.0796,-0.25731 -0.19896,-0.27233 -0.0916,-0.0237 -0.21336,-0.0292 -0.3333,-0.0279 z", +3.50783, 3.58322, +"M 2.96957 -3.58221 c -0.054,-0.004 -0.10962,0.004 -0.16682,0.0204 -0.50287,0.14531 -1.11843,0.96574 -1.59686,0.75172 -0.10443,0.2409 -0.0893,0.42169 -0.004,0.56879 -0.16015,0.0374 -0.31561,0.12717 -0.45888,0.27949 -0.18095,-0.16288 -0.36634,-0.32735 -0.52012,-0.46987 -0.20437,-0.0568 -0.39359,-0.0485 -0.5582,7.6e-4 -0.3902,0.11676 -0.63677,0.46713 -0.60175,0.74583 -0.82773,-0.51376 -1.62373,-1.30541 -2.57037,-1.06536 h -4e-4 c 0.26652,0.79551 1.77909,1.50405 1.31935,2.59942 -0.29573,1.43857 0.96759,1.36306 1.9262,0.86162 -0.19051,0.27421 -0.33048,0.55606 -0.0695,0.87617 0.2907,0.72136 0.51069,1.5495 1.19922,1.99646 0.20081,-0.39583 0.52596,-0.80888 0.35365,-1.27772 -0.24696,-0.37352 -0.82161,-0.82316 -0.85651,-1.19804 0.67455,0.0369 1.28244,0.50499 1.61609,-0.44907 0.0895,-0.17713 0.12714,-0.35251 0.13189,-0.52562 0.5227,-0.002 0.92832,-0.16026 0.80786,-0.83572 -0.02,-0.11225 -0.0568,-0.22688 -0.10279,-0.34112 0.29762,0.56825 0.4526,0.29332 0.43494,-0.27949 0.56932,-0.62085 -0.0145,-1.20088 0.14248,-1.85712 -0.11901,-0.28003 -0.26387,-0.39114 -0.4255,-0.40157 z m -3.15799,2.26732 c -0.008,0.02 -0.0114,0.0391 -0.0165,0.0585 -0.0297,-0.0163 -0.0596,-0.0336 -0.0906,-0.0557 0.0354,-6.9e-4 0.0686,8.4e-4 0.10709,-0.003 z", +3.7615, 3.60448, +"M 2.71615 -3.60346 c -0.054,-0.004 -0.10972,0.004 -0.1669,0.0202 -0.32652,0.0944 -0.70003,0.46997 -1.05317,0.6656 -0.0392,-0.0864 -0.0913,-0.17253 -0.16949,-0.2589 -0.13989,0.11483 -0.28059,0.23472 -0.44546,0.30385 -0.37044,0.0914 -0.55509,0.29917 -0.72657,0.58653 -0.0611,-0.0552 -0.13033,-0.11623 -0.185,-0.16691 -0.20439,-0.0568 -0.39351,-0.0488 -0.55811,5.1e-4 -0.35949,0.10757 -0.59423,0.413107 -0.60203,0.678517 -0.0136,0.0138 -0.0277,0.0274 -0.0398,0.0413 -0.81341,-0.513967 -1.59923,-1.275407 -2.53061,-1.039227 h -5e-4 c 0.26651,0.795517 1.77903,1.503967 1.31929,2.599337 -0.29573,1.43857 0.9679,1.3634 1.92651,0.86196 -0.19053,0.27421 -0.33076,0.5558 -0.0698,0.87592 0.012,0.0298 0.0233,0.0613 0.0351,0.0915 -0.14874,0.19134 -0.58581,0.55204 -0.12969,0.59428 0.55962,-0.15196 0.50268,0.68369 0.64232,1.02681 0.27718,0.29651 0.87279,0.45861 1.25006,0.19069 0.25513,-0.26582 0.48609,-6.5e-4 0.76999,-0.005 0.16695,-0.18991 0.32821,-0.0961 0.49556,-0.0584 0.71837,-0.71386 0.97589,-1.56297 1.28365,-2.4846 -0.70366,-0.43516 -0.773,-0.65102 -0.81441,-1.42007 l -0.0104,-0.33796 c 0.0471,-0.0983 0.0696,-0.27697 0.0625,-0.50798 0.56933,-0.62085 -0.0149,-1.200497 0.14211,-1.856747 -0.11901,-0.28003 -0.26366,-0.39109 -0.42529,-0.40152 z", +2.73778, 2.64431, +"M -1.85179 2.64296 c 0.2123,0.0405 0.70405,-0.84096 1.03766,-0.92501 0.33497,0.30812 0.76833,0.15488 0.79944,-0.33693 -0.20608,-0.37546 0.3914,-0.98771 0.45321,-0.40411 0.57615,0.94326 1.00706,-0.63268 1.58337,-0.71623 0.18095,0.0986 0.3791,0.08 0.57309,0.10232 0.38124,-1.55226 -0.0574,-1.82885 -0.65008,-1.86604 0.0889,-0.23201 0.18206,-0.4544 0.29609,-0.63924 -0.83934,-0.59743 -2.12622,-0.83961 -2.63705,0.29611 -0.0335,0.0842 -0.0746,0.16672 -0.12041,0.24856 -0.21743,0.0386 -0.42992,0.0931 -0.60772,0.19482 -0.90374,-0.25609 -0.4962,0.82188 -0.69969,1.33377 -0.68622,0.72594 -1.23518,1.47159 -0.69607,2.40967 0.21852,-0.0632 0.39881,-0.18586 0.55965,-0.33848 0.002,0.0764 0.006,0.15365 0.006,0.22945 -0.008,0.28213 0.0321,0.39784 0.10282,0.41134 z", +2.73778, 2.64431, +"M -1.85179 2.64296 c 0.2123,0.0405 0.70405,-0.84096 1.03766,-0.92501 0.33497,0.30812 0.76833,0.15488 0.79944,-0.33693 -0.20608,-0.37546 0.3914,-0.98771 0.45321,-0.40411 0.57615,0.94326 1.00706,-0.63268 1.58337,-0.71623 0.18095,0.0986 0.3791,0.08 0.57309,0.10232 0.38124,-1.55226 -0.0574,-1.82885 -0.65008,-1.86604 0.0889,-0.23201 0.18206,-0.4544 0.29609,-0.63924 -0.83934,-0.59743 -2.12622,-0.83961 -2.63705,0.29611 -0.0335,0.0842 -0.0746,0.16672 -0.12041,0.24856 -0.21743,0.0386 -0.42992,0.0931 -0.60772,0.19482 -0.90374,-0.25609 -0.4962,0.82188 -0.69969,1.33377 -0.68622,0.72594 -1.23518,1.47159 -0.69607,2.40967 0.21852,-0.0632 0.39881,-0.18586 0.55965,-0.33848 0.002,0.0764 0.006,0.15365 0.006,0.22945 -0.008,0.28213 0.0321,0.39784 0.10282,0.41134 z", +2.72104, 3.39079, +"M 0.286178 -3.39079 c -0.14007,0.11497 -0.28086,0.23514 -0.44596,0.30437 -0.43748,0.10788 -0.61692,0.37041 -0.8201,0.74518 -0.20775,0.47047 -0.48958,-0.22623 -0.70953,-0.14625 -0.17844,0.25772 -0.66421,0.48419 -0.68522,0.74259 0.48728,-0.0488 0.29403,0.53326 0.005,0.63149 -0.19034,0.18451 -0.59938,0.72542 -0.14417,0.90072 0.44725,-0.12109 0.48747,0.26394 0.52038,0.58136 -0.074,-0.44637 0.62326,-0.57247 0.80926,-0.27647 -0.19566,0.38226 -0.23154,0.87394 -0.36896,1.30586 -0.1065,0.17514 -0.65649,0.59395 -0.16746,0.63924 0.55962,-0.15196 0.50271,0.68369 0.64236,1.02681 0.27718,0.29651 0.87278,0.45861 1.25005,0.19069 0.25514,-0.26582 0.48606,-0.001 0.76996,-0.005 0.16695,-0.18991 0.32824,-0.0961 0.49559,-0.0584 0.71837,-0.71386 0.97589,-1.56297 1.28366,-2.4846 -0.70366,-0.43516 -0.77306,-0.65079 -0.81447,-1.41984 l -0.0209,-0.66544 c -0.14473,-0.20288 -0.29131,-0.40206 -0.49768,-0.48162 -0.51565,0.12706 -0.62662,-0.15055 -0.84926,-0.31646 -0.0172,-0.40469 0.11379,-0.80938 -0.25281,-1.21407 z", +2.54738, 3.09564, +"M -2.54738 -1.21382 c 0.12657,0.31725 -0.0579,0.48889 0.29639,1.02693 0.28022,0.42555 1.10094,1.23068 1.25829,1.46812 0.39733,0.5996 0.15592,0.35314 -0.13001,1.1135 l 0.41975,0.48888 c 0.0197,-0.0589 0.63189,-0.11044 0.65209,-0.17001 0.0222,0.0431 0.0455,0.0859 0.0661,0.12919 0.0877,0.19747 0.15333,0.26483 0.2067,0.25115 0.16015,-0.0429 0.20981,-0.81511 0.41291,-0.98341 0.33369,0.10267 0.58274,-0.14635 0.44182,-0.49713 -0.2667,-0.19187 -0.0552,-0.81306 0.18034,-0.42943 0.71052,0.46274 0.48797,-0.77085 0.8594,-1.01906 0.15785,0.008 0.28929,-0.0697 0.43098,-0.11834 -0.24882,-1.20063 -0.644,-1.24748 -1.06662,-1.07745 -0.0152,-0.19 -0.0245,-0.3749 -0.006,-0.54054 -0.15658,-0.0274 -0.32065,-0.0374 -0.48318,-0.0305 l 0.0367,-0.18293 c -0.41522,-0.73638 -1.14845,-2.2421 -2.38538,-0.50798 -0.386,0.22163 0.0136,0.52023 -0.16174,0.80202 -0.29782,0.28407 -0.20672,-0.38153 -0.40463,-0.14883 -0.23569,0.10251 -0.42783,0.26499 -0.62375,0.42581 z", +4.16689, 3.81427, +"M -1.95926 -3.81051 c -0.29384,0.0315 -0.63098,0.25701 -1.01751,0.79892 -0.386,0.22163 0.0136,0.52023 -0.16173,0.80202 -0.29785,0.28407 -0.20672,-0.38153 -0.40463,-0.14883 -0.23569,0.10251 -0.42783,0.265 -0.62376,0.42582 0.12658,0.31725 -0.0582,0.48929 0.29612,1.02733 0.0583,0.0886 0.14341,0.19507 0.23771,0.30799 -0.0747,9e-4 -0.14412,0.0272 -0.19894,0.0687 h -5.3e-4 c -0.17727,0.13413 -0.20177,0.41817 0.24545,0.45268 -0.39825,0.48749 0.43336,0.66351 0.60359,1.13223 -0.0301,0.59814 0.20492,1.21839 -0.0532,1.81385 -0.21561,0.33237 0.23479,0.51094 0.38809,0.76015 0.0564,0.0501 0.0678,0.1023 0.10335,0.154 h 5.3e-4 c 0.4419,0.12956 0.9933,-0.19327 1.50844,-0.36587 0.76589,-0.53181 1.53929,-1.25257 2.29753,-1.59473 0.2199,0.13691 0.43069,0.36556 0.6263,0.4749 0.45749,0.20053 0.51117,0.84887 1.06042,0.88005 0.3851,0.004 0.70237,-0.18814 0.91467,-0.51573 -0.35343,-0.19801 -0.27543,-0.7836 0.0424,-1.07745 0.47445,-0.42372 0.22762,-1.0411 -0.13642,-1.4304 -0.40209,-0.32194 0.51559,-0.78393 -0.0935,-0.79737 -0.15158,-0.14276 -0.26191,-0.30716 -0.3855,-0.45837 l -0.23204,0.0605 c -0.52811,0.011 -1.14326,-0.0144 -1.2087,0.19172 l -0.31109,0.56431 c -0.38256,0.0826 -0.41923,0.31447 -1.16274,0.24132 -0.0683,0.071 -0.12409,0.1551 -0.17259,0.24754 l -0.003,-0.004 c 0.0758,-0.27877 0.11591,-0.63338 0.29712,-0.75448 0.15785,0.008 0.2893,-0.0697 0.43098,-0.11834 -0.24881,-1.20062 -0.64397,-1.24748 -1.06658,-1.07745 -0.0152,-0.19 -0.0242,-0.37489 -0.006,-0.54053 -0.15658,-0.0274 -0.32065,-0.0374 -0.48319,-0.0305 l 0.0367,-0.18294 c -0.28546,-0.50626 -0.72144,-1.37616 -1.36787,-1.3069 z", +3.3826, 3.20591, +"M 0.917115 -3.20545 c -0.0393,0.67856 -0.8055,0.38483 -1.10476,0.76992 0.21062,0.50964 -0.42472,0.8769 -0.74454,1.18986 -0.0806,-0.39166 -0.0452,-0.8526 -0.44329,-0.91195 -0.65614,0.0726 -0.81839,-0.6789 -1.28317,-0.87078 -0.2656,0.13569 -0.49393,0.3231 -0.72396,0.51189 0.16808,0.42128 -0.0773,0.64903 0.39322,1.36349 0.3721,0.56508 1.46193,1.63419 1.67087,1.94948 0.52763,0.79619 0.20746,0.4691 -0.17223,1.47876 l 0.55718,0.64914 c 0.0262,-0.0782 0.83916,-0.14666 0.86601,-0.22576 0.0295,0.0572 0.0604,0.11406 0.0878,0.17155 0.11646,0.26222 0.20361,0.35166 0.27446,0.33349 0.21267,-0.057 0.27862,-1.08235 0.54829,-1.30583 0.44311,0.13633 0.77382,-0.19433 0.5867,-0.66013 -0.35415,-0.25477 -0.0733,-1.07964 0.23947,-0.57022 0.9435,0.61446 0.64796,-1.0236 1.14116,-1.35319 0.2096,0.0106 0.38415,-0.0925 0.57228,-0.15714 -0.33038,-1.59428 -0.85513,-1.65649 -1.41632,-1.43072 -0.017,-0.21332 -0.024,-0.41843 -0.012,-0.61071 -0.22056,0.0324 -0.42912,0.0689 -0.60935,0.12495 -0.11459,-0.34405 -0.26659,-0.45533 -0.42751,-0.44603 z", +3.6319, 4.78495, +"M 0.896993 -4.78491 c -1.04618,0.86919 1.22964,1.02801 0.62706,2.09804 -0.0111,0.14066 -0.0168,0.27728 -0.0167,0.40806 -0.33465,0.21103 -0.62095,0.44688 -0.76564,0.63005 -0.40971,0.0176 -0.98566,0.24842 -1.41538,0.56247 -0.0885,-0.0278 -0.17012,-0.0331 -0.23481,-0.009 l -4.4e-4,-4.3e-4 c -0.10214,0.0385 -0.1614,0.15187 -0.14414,0.36058 -0.0621,0.0771 -0.11487,0.15557 -0.14971,0.23526 -0.0962,-0.007 -0.18664,0.003 -0.26946,0.0282 v -4.3e-4 c -0.51314,0.15257 -0.75518,0.85767 -0.51544,1.44917 0.0468,0.13673 0.0411,0.38968 0.0235,0.67624 -0.563,0.31662 -0.99981,0.90929 -1.60573,1.11511 0.0839,0.86303 -0.5451,2.78068 0.94615,1.68955 l 0.27419,-0.26605 c 0.59919,-0.18144 1.14669,-0.60514 1.40596,-1.11211 0.70056,-0.69037 0.4631,-1.79139 0.86788,-2.69387 0.38804,-0.19262 0.71359,-0.58299 1.22675,-0.0295 0.503,0.48469 0.58214,-0.85407 0.69164,-1.07533 0.24966,-0.71685 1.63714,-0.11067 1.72634,-0.99534 0.0961,-0.14176 0.083,-0.33963 -0.0458,-0.59669 -0.0144,-0.0633 -0.0351,-0.11846 -0.0594,-0.1681 -0.009,-0.0297 -0.0165,-0.0595 -0.0243,-0.0894 -0.22286,-1.14696 -1.72872,-1.83888 -2.54117,-2.21652 z m -1.97015,4.93649 c 0.004,0.004 0.009,0.008 0.0133,0.0124 -0.0133,0.047 -0.0288,0.0941 -0.044,0.14115 0.009,-0.0514 0.0193,-0.10257 0.0308,-0.15356 z", +2.20024, 4.20283, +"M 0.680372 -4.20263 c -0.17134,-0.003 -0.35314,0.0281 -0.51107,0.0956 h -0.002 c -0.37912,0.16215 -0.6214,0.53304 -0.25527,1.13533 0.0428,0.30239 0.0412,0.55368 -5.3e-4,0.76378 -0.20661,0.20366 -0.36107,0.43947 -0.42891,0.67541 -0.25368,0.17815 -0.60508,0.27842 -1.04386,0.33693 -0.81735,0.77798 1.48963,1.90805 0.56173,2.45463 -0.32718,0.0973 -0.67947,0.11365 -0.9953,0.0207 -0.64842,0.99087 0.36237,2.72148 1.30794,2.69131 l 0.25683,-0.16433 0.13385,-0.19999 c 0.0466,-0.0443 0.0923,-0.0929 0.13795,-0.14159 0.17233,0.17619 0.32211,0.35812 0.41807,0.55397 0.56925,-0.35075 1.47415,0.57288 1.80713,-0.0207 -1.12112,-0.65447 -1.73331,-1.46106 -0.64026,-2.46807 -0.1388,-0.15461 -0.33557,-0.2819 -0.49663,-0.40411 0.0189,-0.22272 0.0125,-0.44358 -0.0258,-0.65784 0.0824,-0.0552 0.18539,-0.11327 0.31935,-0.17622 0.92186,-0.47154 0.76654,-2.17728 0.97665,-2.5032 -0.36297,-0.32872 -0.97897,0.11256 -1.34102,-0.54364 -0.0805,0.02 -0.16004,0.0479 -0.23873,0.0796 0.0343,-0.20274 0.15489,-0.40552 0.40256,-0.60616 0.59182,-0.58976 0.17092,-0.91141 -0.34314,-0.92139 z", +2.88699, 5.39383, +"M 1.3671 -5.39363 c -0.17122,-0.003 -0.3528,0.0282 -0.51057,0.0956 h -0.003 c -0.37912,0.16215 -0.62142,0.53304 -0.25529,1.13533 0.0428,0.30239 0.0412,0.55368 0,0.76378 -0.20662,0.20366 -0.36108,0.43947 -0.42892,0.67541 -0.25368,0.17815 -0.6051,0.27842 -1.04386,0.33693 -0.81735,0.77798 1.4896,1.90805 0.56171,2.45463 -0.32718,0.0973 -0.67945,0.11362 -0.99528,0.0207 -0.14761,0.22555 -0.20556,0.49003 -0.20154,0.76275 -0.051,0.0146 -0.10085,0.0324 -0.14729,0.0579 -0.23484,0.6226 -0.50334,1.23094 -0.7865,1.83296 -0.19645,0.25916 -0.14105,0.63084 -0.33951,0.83613 -0.11512,0.138 -0.11041,0.31176 -0.0977,0.48472 l 1.21801,1.32705 c 0.11266,-0.0498 0.24308,-0.0702 0.37931,-0.0165 0.29117,0.0276 0.68913,0.0748 0.86971,-0.23874 0.30268,-0.33688 0.72999,0.11684 1.03198,-0.17725 0.082,-0.27859 0.31242,-0.40815 0.41085,-0.68988 0.33589,-0.752 0.92244,-0.0445 1.15649,-0.42471 0.35317,-0.13097 0.0367,-1.3743 -0.16174,-1.55863 0.0322,-0.0731 0.0626,-0.14742 0.0972,-0.21911 0.2109,0.004 0.28993,-0.14967 0.11834,-0.38292 -0.0568,-0.22605 0.26795,-0.75271 -0.0594,-0.80564 -0.2096,0.24628 -0.25599,0.65901 -0.5855,0.79892 -0.1397,-0.40155 -0.0145,-0.84498 0.51882,-1.33635 -0.1388,-0.15462 -0.33554,-0.2819 -0.49659,-0.40412 0.0188,-0.22271 0.0124,-0.44358 -0.0259,-0.65784 0.0824,-0.0552 0.18539,-0.11326 0.31938,-0.17621 0.92183,-0.47154 0.76655,-2.17729 0.97668,-2.50321 -0.36298,-0.32872 -0.97896,0.11256 -1.34101,-0.54364 -0.0805,0.02 -0.16005,0.0479 -0.23874,0.0796 0.0343,-0.20274 0.15489,-0.40552 0.40254,-0.60616 0.59163,-0.58956 0.17121,-0.9112 -0.34261,-0.92139 z", +2.2926, 5.13722, +"M 0.802274 -5.13667 c -0.15648,0.008 -0.31396,0.11235 -0.39378,0.36329 0.17158,0.46045 -0.71247,0.26413 -0.98288,0.53433 -0.18795,-0.0953 -0.37721,-0.18365 -0.56276,-0.25735 -0.30393,-0.35352 -0.57627,-0.46456 -0.78031,-0.41599 h -0.001 c -0.34007,0.0809 -0.48919,0.60594 -0.27337,1.19424 1.00303,1.38655 -0.11896,2.78412 0.99219,3.28301 0.18788,-0.0184 0.35102,-0.008 0.49866,0.0202 0.0272,0.0107 0.055,0.0168 0.0842,0.017 1.09791,0.28456 1.07577,1.83267 1.1281,2.82101 1.29392,0.57385 -0.73445,2.82023 1.25884,2.61276 0.17748,0.17897 0.47238,0.11556 0.51522,-0.14728 0.081,-1.48014 -0.80518,-2.85605 -0.76896,-4.31808 0.16182,-0.1731 0.22826,-0.33544 0.2403,-0.49299 0.17579,-0.13499 0.36803,-0.25536 0.53588,-0.29662 -0.45833,-0.34903 -0.47617,-0.81306 -0.45474,-1.07591 -1.13773,-0.23427 0.49343,-1.18353 -0.54364,-1.63607 0.26771,-0.66998 -1.19856,-0.90889 -0.31369,-1.41387 0.50499,-0.3651 0.16598,-0.81 -0.17827,-0.79168 z", +4.57828, 3.5071, +"M 2.91251 -3.50687 c -0.4486,0.0106 0.45675,0.54041 0.18913,0.76585 -0.86641,-0.29492 -1.26553,1.09463 -1.96578,0.93793 -0.86302,0.0543 -1.79475,0.32429 -2.49597,0.83405 -0.39846,-0.0495 -0.7705,-0.009 -1.1157,0.12454 -0.006,0.0507 0.007,0.10957 -0.003,0.15813 0.0966,0.98514 -1.0613,0.70185 -1.47535,0.23151 -0.37552,-0.57285 -1.03049,0.23261 -0.27905,0.28888 -0.31933,0.39262 0.19955,0.57156 0.46199,0.88831 -0.002,0.0106 -0.005,0.0172 -0.006,0.0284 0.0115,0.11487 0.0542,0.20711 0.11732,0.28474 0.007,0.52372 0.17613,1.06164 -0.0476,1.58079 -0.20304,0.31453 0.22357,0.4826 0.36896,0.71778 0.0533,0.0472 0.064,0.0964 0.0977,0.14521 h 5e-4 c 0.41788,0.12151 0.93829,-0.18412 1.42473,-0.3483 0.40148,-0.2801 0.80497,-0.61424 1.20716,-0.9126 0.50226,-0.12855 1.03791,-0.70742 1.45571,-0.97152 -0.39362,-0.88195 1.08802,-0.72117 1.19787,-1.3348 -0.12419,-0.6673 -0.7335,-1.91974 0.42995,-1.96474 0.86471,-0.32419 0.78534,1.59558 1.21698,0.39687 -0.25257,-0.73375 0.38536,-0.64026 0.82942,-0.33848 0.28241,-0.45436 -0.55153,-1.06703 -1.10898,-1.37252 v 5.1e-4 c -0.0792,-0.0443 -0.15266,-0.0811 -0.21706,-0.1111 -0.12671,-0.0221 -0.21858,-0.031 -0.28266,-0.0295 z", +3.74688, 2.41634, +"M 2.72883 -2.41634 -0.35677,0.016 c -0.33291,0.36885 -0.63684,0.43941 -0.88624,0.44063 -0.0292,-0.0173 -0.0593,-0.0354 -0.0868,-0.0506 v 3.3e-4 c -0.051,-0.0285 -0.0983,-0.0522 -0.13977,-0.0716 -0.0816,-0.0142 -0.14078,-0.02 -0.18205,-0.019 -0.10932,0.003 -0.0935,0.0532 -0.0413,0.1228 -0.0466,0.007 -0.0874,0.0211 -0.1198,0.0519 -0.0676,0.10644 -0.089,0.22694 -0.0958,0.35209 -0.32395,0.17106 -0.55217,0.6454 -0.88722,0.57042 -0.5558,0.035 -1.15583,0.20884 -1.6074,0.53712 -0.25661,-0.0319 -0.49621,-0.006 -0.7185,0.0802 -0.004,0.0326 0.005,0.0706 -0.002,0.10184 0.0622,0.63443 -0.68347,0.45199 -0.95012,0.14909 -0.24183,-0.36891 -0.66363,0.14979 -0.17971,0.18604 -0.20564,0.25284 0.12851,0.36808 0.29752,0.57207 -0.001,0.007 -0.003,0.0111 -0.004,0.0183 0.007,0.074 0.0349,0.13337 0.0755,0.18337 0.005,0.33727 0.1135,0.68368 -0.0306,1.01801 -0.13076,0.20256 0.14398,0.3108 0.23761,0.46226 0.0343,0.0304 0.0412,0.0621 0.0629,0.0935 h 3.2e-4 c 0.26912,0.0782 0.60427,-0.11857 0.91752,-0.2243 0.25856,-0.18038 0.5184,-0.39557 0.77741,-0.58771 0.32345,-0.0828 0.66843,-0.45558 0.93749,-0.62566 -0.18482,-0.41411 0.27077,-0.47225 0.55943,-0.62599 0.042,0.26188 -0.16431,0.57971 -0.0466,0.81602 -0.0361,0.3214 0.2697,0.38876 0.29186,0.65727 -0.0155,0.41805 0.31928,0.10309 0.49155,0.006 0.24347,0.16794 0.51027,0.0323 0.71949,-0.1644 0.15749,-0.44026 0.53019,-0.15638 0.81901,-0.0952 0.098,-0.20391 0.35342,-0.32496 0.4526,-0.4992 -0.0531,-0.28513 0.23897,-0.57539 0.41732,-0.72149 v -3.4e-4 c 0.3295,-0.64851 0.11566,-1.00699 -0.21897,-1.51055 l 0.28918,-0.44994 0.22499,-0.29984 c -0.18304,-0.14669 -0.3661,-0.12842 -0.54912,-0.0343 l -0.38038,0.11848 c 0.28124,-0.43579 0.14347,-0.51087 -0.0885,-0.57341 z", +1.5426, 3.75375, +"M -0.18215 -3.74938 c -0.43006,0.0954 -0.0238,1.66304 -0.29143,2.06565 -1.23283,0.67467 0.70648,1.73509 -0.66571,2.29879 -1.27771,1.27642 0.87232,1.5933 1.05811,1.42669 -1.72666,0.27299 0.54523,3.0984 0.51438,0.84809 0.0778,-1.31836 1.51452,-1.87061 0.99737,-3.31344 -0.0269,-1.19813 0.0509,-2.86032 -1.37276,-3.26853 -0.10038,-0.0537 -0.17819,-0.0707 -0.23966,-0.0572 z", +2.6102, 2.40582, +"M -2.60391 1.07532 1.21829,1.32714 c 0.11265,-0.0498 0.24287,-0.0704 0.37911,-0.0167 0.29115,0.0276 0.68939,0.0748 0.86997,-0.23871 0.30266,-0.33688 0.72982,0.11701 1.03183,-0.17708 0.082,-0.27859 0.31221,-0.40824 0.41064,-0.68997 0.0829,-0.35912 0.3014,-0.69002 0.49691,-1.00001 0.25988,-0.36573 0.40154,-0.79981 0.5954,-1.20228 0.21088,0.004 0.29,-0.14987 0.11841,-0.38313 -0.0568,-0.22605 0.26786,-0.75294 -0.0595,-0.80587 -0.21044,0.24728 -0.25622,0.66273 -0.58937,0.80098 -0.0881,0.24739 -0.32811,0.21877 -0.5183,0.099 -0.43381,-0.0984 -0.16894,-0.56282 -0.0503,-0.81595 -0.18037,-0.10226 -0.47473,0.10933 -0.66436,0.16038 0.14099,0.42689 -0.26992,0.60149 -0.59482,0.72943 -0.10138,0.24534 -0.36733,-0.0479 -0.17905,-0.12239 0.19862,-0.22162 0.39983,-0.47805 0.66131,-0.63217 0.23857,-0.24684 -0.1743,-0.27544 -0.34069,-0.2571 -0.28559,0.11508 -0.52696,7.5e-4 -0.74386,-0.19182 -0.1358,-0.11552 -0.22022,-0.0715 -0.27824,0.0899 -0.15588,0.0841 -0.36986,0.0793 -0.5395,0.17231 -0.23485,0.6226 -0.50305,1.23123 -0.78622,1.83325 -0.19645,0.25916 -0.14117,0.63063 -0.33965,0.83592 -0.11511,0.138 -0.11073,0.31194 -0.098,0.4849 z", +3.83978, 2.30066, +"M 1.89988 -2.28596 c -0.46473,-0.0533 -0.93451,0.0301 -1.2983,0.38777 -0.61395,-0.10651 -1.14946,0.60908 -1.8877,0.45323 -0.65836,-0.53157 -1.19607,0.74513 -1.84876,0.2517 -0.22541,0.36322 -0.81294,0.89409 -0.68754,1.46714 0.20541,0.12631 0.2374,0.23071 0.21384,0.31715 l 0.28852,0.42359 5.18412,1.28604 c -0.12156,-0.38789 0.57265,-0.65546 1.06815,-0.66503 0.3002,-0.42158 1.17579,-0.37128 0.82666,-1.04765 -0.64248,0.006 -0.4043,-0.75074 -0.0849,-0.96787 z", +2.48198, 2.67999, +"M -0.947181 2.42314 c 0.18893,-0.12837 0.39015,-0.1443 0.5237,0.25685 0.51028,-0.15853 1.30811,-0.11944 1.84667,-0.42769 1.22161,0.34616 0.47447,-1.31052 0.96133,-1.80427 0.18748,-0.84884 0.0458,-1.7551 0.0512,-2.62474 0.0372,-1.37538 -0.84814,0.48939 -1.39027,0.62596 -0.40821,-0.37552 -0.93592,-0.18917 -0.97385,0.41022 0.25116,0.45758 -0.477,1.20377 -0.55234,0.49252 -0.7022,-1.14958 -1.22788,0.77102 -1.93025,0.87284 -0.42731,0.88954 1.20329,1.9184 1.46381,2.19831 z", +4.26056, 3.08976, +"M -2.80517 -3.08919 c -0.26757,0.53645 -1.24706,-0.0831 -1.33583,0.28009 0.54354,0.28297 0.25361,0.49804 -0.0894,0.49764 -0.15417,0.30689 0.31539,0.50952 0.66921,0.73174 -0.43301,0.39009 -0.69014,0.69733 -0.58912,0.83612 0.13288,0.3976 0.66614,0.90708 0.14624,0.88781 -0.3356,0.1386 0.28826,0.9763 0.62944,1.30069 0.0448,-0.0159 0.0277,0.18537 0.2382,0.28009 0.59182,-0.12048 0.63855,0.74505 1.24386,0.67799 0.29986,0.0447 0.27308,0.39182 0.33383,0.68678 0.2408,-0.23569 0.71932,-0.51227 0.5607,-0.89607 0.24093,-0.31002 0.88424,-0.0359 0.83043,-0.6966 0.27241,-0.35349 0.87897,-0.0301 1.26195,-0.22117 0.25652,0.75949 1.11287,0.11487 0.97616,-0.46044 0.16131,-0.52891 0.74101,-0.64995 0.6723,-0.0481 0.77777,0.57404 1.08543,-0.60114 0.85577,-1.1653 -0.30509,-0.30498 -0.47604,-0.87464 0.16433,-0.83974 0.20368,0.0876 0.36298,0.0215 0.49766,-0.10077 -0.0896,-0.39051 -1.13962,0.24844 -1.35134,-0.41238 -0.39409,-0.50595 -0.71183,-0.003 -0.74157,0.42736 -0.27477,0.54361 -1.36311,1.08291 -1.44074,0.11938 0.49909,-0.34336 0.0274,-0.70102 -0.47749,-0.47543 -0.34422,0.48082 -1.39303,0.25803 -0.98856,-0.43408 -0.39558,-0.16344 -0.54981,-0.83329 -0.99528,-0.80667 -0.46308,0.47435 -0.67871,-0.19078 -1.07075,-0.16898 z", +2.85227, 3.44376, +"M 2.39399 0.825598 c 0.51165,-1.00701 0.17934,-1.56385 -0.34027,-2.34578 l 0.44899,-0.69865 0.34956,-0.46536 c -0.28419,-0.22778 -0.56839,-0.19965 -0.85258,-0.0535 l -0.59069,0.18407 c 0.43669,-0.6767 0.22244,-0.79303 -0.13779,-0.89014 l -0.55392,0.0248 c -1.05242,1.16603 -1.92058,0.41374 -2.26059,0.73685 -0.31726,0.4997 -0.002,1.19184 -0.27419,1.71558 -0.0601,0.59507 -1.33712,0.72874 -0.96788,1.37654 0.68403,0.42661 -0.0301,1.17727 0.22283,1.68512 -0.056,0.49908 0.41904,0.60361 0.45347,1.02055 -0.0241,0.64915 0.49545,0.16052 0.76293,0.009 0.37808,0.26076 0.79269,0.0499 1.11759,-0.25546 0.24455,-0.68364 0.82318,-0.24258 1.27166,-0.14754 0.15219,-0.31662 0.54842,-0.50454 0.70243,-0.77509 -0.0825,-0.44275 0.37149,-0.89378 0.64845,-1.12065 z", +3.408, 3.57197, +"M 2.62753 -3.57195 c -0.64407,0.7879 -0.64716,1.84506 -1.20222,2.58759 -1.34442,-0.27745 -1.52748,0.69891 -1.31733,1.75739 -0.78212,0.16845 -1.74702,0.16312 -2.57312,0.0427 -0.21732,0.51378 -0.40761,0.43217 -0.59858,0.21424 -1.0749,0.8342 0.63602,1.73677 1.46282,2.1222 1.23346,0.6503 2.55782,-0.35092 3.77246,0.4198 0.2868,-0.0617 0.92584,0.13183 0.99013,-0.27867 -0.83826,-0.73953 -2.26236,-1.79647 -1.23986,-3.02911 0.18907,-1.17518 1.78492,-1.4423 1.271,-2.84888 0.10716,-0.40834 0.32162,-0.44801 0.15222,-0.57722 -0.14475,-0.11041 -0.6654,-0.33083 -0.71752,-0.41005 z", +2.16401, 4.29525, +"M 1.65199 -3.9757 c -0.1751,0.027 -0.38331,0.16713 -0.56662,0.42127 -0.73687,-0.0649 -1.46581,0.13196 -1.66725,0.13706 -0.67315,0.017 -0.52923,1.98326 -0.49599,2.6279 0.0831,0.52678 0.10231,-0.0945 -0.0368,0.38051 -0.25456,0.86925 -0.82603,2.79733 -0.99814,3.68266 -0.0219,0.0245 -0.0307,0.0543 -0.0512,0.0793 0.26405,0.40175 0.43883,0.65708 0.62561,0.94225 1.81312,-0.12134 0.99017,-2.46123 1.53551,-3.61943 0.3032,-0.62038 1.0801,-1.84071 1.08397,-2.40264 0.005,-0.76342 0.83708,-0.66154 0.9192,-1.45341 0.14595,-0.57315 0.28406,-1.1579 -0.008,-1.11255 z", +2.42152, 3.19498, +"M 1.79275 3.19496 c 0.0358,-0.35442 0.0143,-0.94751 0.14977,-1.20163 0.29216,-0.54826 0.76509,-0.61761 0.24914,-1.04756 l -0.46191,-0.29639 c -0.0199,-0.009 -0.0339,-0.008 -0.0548,-0.0191 0.008,-0.67733 -0.40627,-1.15393 -0.87696,-1.61178 -0.0135,-0.57623 -0.52506,-0.68936 -0.93404,-0.86224 -0.3143,-0.11364 -0.30235,-0.2211 -0.26928,-0.50192 0.001,-0.35694 -0.19325,-0.6476 -0.63636,-0.70807 -0.52435,-0.42985 -0.56303,0.22718 -0.74414,0.56327 0.27001,0.2644 0.29136,0.75233 -0.0961,1.0294 -0.41132,0.0707 -0.85183,1.03036 -0.23048,1.04386 0.0806,0.4722 0.45958,1.10992 0.004,1.55133 -0.1628,0.45669 0.19683,1.40675 0.90123,1.35186 0.45163,-0.12672 0.99602,0.14704 1.99196,-0.16774 0.14912,0.4712 0.54383,0.84975 1.00786,0.87673 z", +2.60961, 2.6311, +"M 2.50705 -1.19561 -0.25339,-0.1347 c -0.4738,-0.41913 -0.99447,-0.94138 -1.21945,-0.8131 l -0.73175,0.24406 c -0.40381,-0.23794 -0.62439,-0.0636 -1.21942,-0.73175 -0.45864,0.0258 -0.91727,0.38107 -1.37591,0.59171 -0.0117,0.11781 -0.0183,0.23633 -0.0649,0.35298 -0.27654,0.35904 -0.46239,0.91911 0.20227,0.9358 0.65658,0.0504 0.51399,0.93494 0.66863,1.40794 0.23986,0.54801 -0.23986,1.16298 0.21828,1.63643 0.33587,0.31601 0.77101,0.40448 1.22387,0.28852 -0.1503,-0.46126 0.39437,-0.91344 0.91269,-0.91403 0.76165,0.0123 1.04546,-0.73144 1.04116,-1.36969 -0.0925,-0.60988 1.09071,-0.27154 0.56549,-0.77799 -0.0175,-0.24875 0.0184,-0.48273 0.0324,-0.71618 z", +2.91238, 3.10557, +"M -2.9122 1.73814 c 0.28378,0.47289 1.03118,0.63668 1.62475,0.90306 1.10867,0.1542 2.37832,0.14746 3.32429,0.46437 0.29646,-0.1176 0.26342,-0.96007 0.29166,-1.66776 l 0.0964,-0.71277 c 0.0983,-0.21454 0.10887,-0.66087 0.22079,-0.8799 0.101,-0.19778 0.31208,-0.17115 0.25795,-0.31721 -0.37435,-0.55516 -0.83678,-0.93415 -1.38048,-1.15063 -0.0489,0.0422 -0.0876,0.10835 -0.13886,0.14474 -0.75872,0.99895 -1.59127,-0.26181 -1.57102,-1.05567 0.14438,-0.85593 -1.15818,-0.67142 -0.50818,0.0282 -0.74639,0.10568 -0.15692,0.9358 -0.38769,1.48657 -0.51224,0.50199 -0.80922,1.23824 -1.51997,1.55271 -0.45966,0.11748 -0.20829,0.6411 -0.27572,0.98493 0.009,0.0899 -0.0234,0.14503 -0.0341,0.21939 z", +3.04347, 2.84609, +"M 0.490388 -2.84481 c -0.17818,-0.0381 -0.59112,0.79085 -0.87113,0.86987 -0.28109,-0.28971 -0.64432,-0.14548 -0.67045,0.31688 0.17296,0.35303 -0.32861,0.92862 -0.38047,0.37989 -0.4836,-0.88691 -0.84563,0.59496 -1.32932,0.67352 -0.34102,0.46556 0.0163,0.50226 0.25082,0.78429 -0.88963,0.69447 -0.64769,1.26964 0.58717,1.61261 0.64827,-0.33916 1.89403,-1.4075 1.52897,0.052 0.13212,0.76935 0.98486,1.48997 1.55068,0.56922 -0.30948,-1.21831 1.0167,-2.14737 1.88681,-2.26869 -0.414,-0.6498 -0.0862,-1.85279 -0.94851,-2.09149 -0.29062,-0.0875 -1.51076,0.0901 -1.51829,-0.51083 0.006,-0.26528 -0.0269,-0.37452 -0.0863,-0.38722 z", +2.60354, 3.87863, +"M -2.58741 2.42622 5e-5,-5.1e-4 c 0.0545,-0.28255 0.24695,-0.66339 0.55812,-1.04225 0.58545,-0.71275 0.69899,-1.23193 0.40168,-1.83633 -0.12573,-0.25554 -0.10279,-0.32366 0.0655,-0.19436 0.14242,0.10941 0.35573,0.007 0.47396,-0.22648 0.13004,-0.25726 0.0644,-0.53105 -0.16725,-0.69336 -0.61079,-0.42848 -0.34025,-1.8077 0.39236,-1.99985 0.39389,-0.1033 0.67136,-0.0486 0.77194,0.15245 0.10567,0.21111 0.29186,0.16355 0.57011,-0.14555 0.38478,-0.42741 0.42246,-0.42673 0.54193,0.0137 0.0706,0.26033 0.052,0.57305 -0.0418,0.69491 -0.0936,0.12183 0.004,0.1741 0.21775,0.11617 0.29389,-0.0797 0.38668,0.21619 0.38089,1.21691 -0.004,0.7281 0.16873,1.53845 0.38543,1.80433 0.21632,0.26545 0.31499,0.58433 0.21915,0.70905 -0.0958,0.12468 -0.0624,0.2383 0.074,0.2522 0.13645,0.0139 0.2856,0.26879 0.33189,0.56623 0.0463,0.29751 -0.0165,0.46361 -0.13944,0.36914 -0.12297,-0.0945 -0.23633,-0.046 -0.25195,0.10731 -0.0156,0.15332 -0.25555,0.25548 -0.53324,0.22719 -0.90574,-0.0923 -1.36908,0.17162 -1.43488,0.81735 -0.0549,0.53905 -0.17952,0.61343 -0.83029,0.49663 -0.42102,-0.0756 -0.70687,-0.21398 -0.63513,-0.3073 0.15929,-0.20731 -0.61961,-0.67165 -1.08123,-0.6447 -0.24076,0.0141 -0.3242,-0.17035 -0.26966,-0.4529 z", +3.89459, 2.76207, +"M 2.11989 -2.76207 h 1.36873 l -0.35549,1.28958 c -0.29269,1.05994 -0.25675,1.36166 0.20266,1.6976 0.30734,0.22472 0.5588,0.76635 0.5588,1.20359 0,0.73869 -0.10906,0.78002 -1.53862,0.58406 -1.12744,-0.15454 -1.65256,-0.0734 -1.96439,0.30227 -0.42093,0.50722 -1.08901,0.5684 -2.78519,0.25655 -1.43006,-0.26295 -1.74284,-0.69806 -1.33735,-1.86135 0.19689,-0.56461 0.55188,-1.02688 0.78878,-1.02688 0.23697,0 0.64286,-0.3974 0.90268,-0.88292 0.48391,-0.90417 1.76118,-1.45844 2.42085,-1.05075 0.20303,0.12556 0.36914,0.0615 0.36914,-0.14193 0,-0.20347 0.61632,-0.36982 1.3694,-0.36982 z", +2.94033, 4.04841, +"M 0.955924 -4.04819 c 0.27815,0.007 0.71396,0.18533 1.21285,0.53472 0.89248,0.62514 1.02887,1.65306 0.31401,2.36795 -0.76145,0.76144 -1.35601,2.05174 -1.12098,2.432 0.1187,0.19201 0.0454,0.34882 -0.16219,0.34882 -0.20765,0 -0.37588,0.28073 -0.37181,0.62384 0.004,0.53339 0.0558,0.54652 0.35298,0.0891 0.26617,-0.40941 0.32982,-0.30503 0.27295,0.4456 -0.0609,0.80483 -0.24384,0.98032 -1.02141,0.98032 -0.52094,0 -1.4289,0.0959 -2.01772,0.21375 -0.62778,0.12557 -1.17184,0.0511 -1.31523,-0.18103 -0.13461,-0.2177 0.0843,-0.81432 0.48665,-1.32566 0.40219,-0.51129 0.6373,-1.08236 0.52222,-1.26856 -0.11506,-0.18621 0.0922,-0.41733 0.46092,-0.51383 0.46375,-0.12126 0.65661,-0.47079 0.62453,-1.1342 -0.0293,-0.6002 0.27891,-1.26441 0.82367,-1.77476 0.4875,-0.45671 0.78245,-1.04493 0.67046,-1.33678 -0.13082,-0.34108 -0.0108,-0.50804 0.2681,-0.5013 z", +2.50487, 5.03272, +"M -2.16669 -3.17022 1.86046,-0.51083 c 1.02338,-0.28104 1.94395,-0.73695 2.04586,-1.01295 0.10187,-0.27602 0.34634,-0.41088 0.54358,-0.29979 0.19726,0.11107 0.27852,0.40249 0.17931,0.64757 -0.0993,0.24506 -0.39051,1.29581 -0.64811,2.33521 -0.319,1.28729 -0.645,1.9083 -1.02188,1.94754 -0.38441,0.0401 -0.38656,0.0854 -0.007,0.14812 0.29981,0.0496 0.43437,0.35011 0.29918,0.66799 -0.23474,0.55145 -0.25461,0.55221 -0.43484,0.0127 -0.12461,-0.37299 -0.49795,0.24186 -1.09772,1.80788 -0.49978,1.30521 -1.09181,2.41091 -1.31488,2.45715 -0.22322,0.0463 -0.0643,-0.59646 0.35215,-1.4284 0.47376,-0.94633 0.58524,-1.53429 0.29799,-1.5706 -0.9072,-0.11464 -1.60579,-1.99425 -1.33221,-3.5826 z", +4.0742, 4.47677, +"M -1.73269 -4.47592 v 5.3e-4 c -0.11923,-0.0214 -0.34907,0.20596 -0.62117,0.66663 -0.42148,0.71353 -0.27757,1.66663 0.30591,2.02726 0.18712,0.11561 0.15346,0.28882 -0.11213,0.5824 -0.75139,0.83028 -2.02901,3.17126 -1.90582,3.49229 0.21982,0.57286 0.9162,0.20501 1.12292,-0.59273 0.10928,-0.42187 0.30009,-0.76688 0.42323,-0.76688 0.46329,0 0.96755,1.15024 0.89659,2.04432 -0.0619,0.78083 -0.006,0.90333 0.4005,0.88005 0.25974,-0.0148 0.64453,-0.10023 0.85474,-0.19017 0.26972,-0.11518 0.42074,-0.0149 0.51416,0.34262 0.22016,0.8419 0.94316,0.48133 1.16377,-0.58033 0.10563,-0.50859 0.28131,-1.03924 0.39066,-1.17926 0.10925,-0.14 0.27067,-0.55414 0.35812,-0.91984 0.11033,-0.4615 0.40817,-0.76905 0.97308,-1.0051 0.52028,-0.21739 0.86677,-0.55204 0.96118,-0.92811 0.23675,-0.94326 -0.0311,-1.2976 -0.98084,-1.2976 -0.49064,0 -1.15258,-0.21143 -1.55027,-0.49454 -0.69181,-0.49257 -0.89485,-0.48303 -1.68363,0.0796 -0.35702,0.25464 -0.49911,0.1962 -1.0015,-0.41186 -0.38391,-0.46468 -0.54345,-0.8907 -0.46455,-1.2392 0.0738,-0.32572 0.0477,-0.49342 -0.045,-0.51005 z", +4.05861, 3.1259, +"M 1.4673 -3.12553 c 0.2083,-0.0104 0.30102,0.19858 0.4976,0.72986 l 0.28366,0.76589 0.85394,-0.10578 c 0.75247,-0.0929 0.83822,-0.0672 0.72384,0.2093 -0.0771,0.18457 -0.0519,0.26844 0.0579,0.20316 0.12017,-0.07 0.17818,0.0104 0.17417,0.18171 v -7.9e-4 c 0,0.17241 -0.0697,0.43828 -0.19554,0.74443 -0.13945,0.33975 -0.31333,0.45866 -0.61256,0.41861 -0.29078,-0.0393 -0.443,0.0567 -0.49759,0.31661 -0.043,0.20532 -0.16706,0.68434 -0.27521,1.06489 l -0.19702,0.6923 -1.07262,-0.0537 c -1.68416,-0.0835 -2.45547,0.0134 -2.35518,0.29672 0.0623,0.17504 -0.11423,0.24332 -0.61168,0.22847 -0.63289,-0.0166 -0.67621,0.0119 -0.45086,0.30435 0.21928,0.2847 0.20904,0.30719 -0.0905,0.18553 -0.18708,-0.0764 -0.48128,-0.1495 -0.65307,-0.1495 -0.27046,-0.0104 -0.27432,-0.0337 -0.0267,-0.18475 0.25384,-0.15875 0.17922,-0.25993 -0.10237,-0.14406 -0.0593,0.0242 -0.19242,-0.11646 -0.29508,-0.31204 -0.13945,-0.26497 -0.12017,-0.39565 0.0742,-0.51137 0.20429,-0.12255 0.18916,-0.15151 -0.0682,-0.16636 -0.22417,-0.007 -0.32431,-0.16022 -0.31586,-0.48071 0,-0.25783 0.0979,-0.46381 0.20014,-0.46381 0.10385,0.003 0.18975,-0.0786 0.19242,-0.18248 0,-0.10355 -0.13204,-0.19547 -0.29983,-0.19547 -0.24183,-0.006 -0.25607,-0.0623 -0.0757,-0.26911 0.17714,-0.20219 0.17032,-0.29634 -0.0282,-0.42243 -0.48024,-0.30624 -0.47979,-0.7686 0,-1.16533 0.25591,-0.21095 0.46895,-0.51184 0.47296,-0.66929 0,-0.20785 0.12759,-0.25156 0.45234,-0.16253 0.24509,0.0682 0.50427,0.0347 0.57652,-0.0751 0.0727,-0.11053 0.38795,-0.19961 0.70232,-0.18477 0.42357,0.0104 0.54225,0.0849 0.45917,0.2852 -0.0905,0.21809 -0.0208,0.23926 0.36348,0.1043 0.35042,-0.12269 0.43854,-0.10875 0.33425,0.0499 -0.0994,0.15132 -0.0326,0.17466 0.22238,0.0782 0.1994,-0.0751 0.63898,-0.20767 0.97664,-0.2967 0.74565,-0.19402 0.8271,-0.41151 0.10089,-0.2691 l -0.51896,0.10192 0.47608,-0.26372 c 0.25518,-0.1408 0.42148,-0.2323 0.54655,-0.2323 z", +4.06584, 3.46902, +"M 0.0899704 -3.46718 c -0.17768,-0.01 -0.28056,0.0213 -0.24431,0.083 0.0487,0.0831 -0.11034,0.13842 -0.35322,0.13842 -0.4581,-0.0115 -0.94486,0.37267 -0.74196,0.58647 0.0645,0.0674 0.0315,0.11778 -0.0731,0.11778 -0.1046,-0.003 -0.23714,0.15712 -0.29461,0.35544 -0.0745,0.25648 -0.19559,0.32418 -0.41912,0.23103 -0.25478,-0.1056 -0.29634,-0.0555 -0.22139,0.26509 0.0588,0.25046 0.0143,0.3895 -0.1347,0.3895 -0.12466,-0.003 -0.36123,0.13641 -0.52717,0.30953 -0.27842,0.29188 -0.27469,0.33282 0.0487,0.54646 0.19201,0.1271 0.34547,0.35797 0.34132,0.51242 0,0.15476 0.076,0.23203 0.17696,0.17327 0.10175,-0.059 0.18084,0.0149 0.17697,0.16438 0,0.14962 -0.0946,0.32273 -0.19989,0.38431 -0.13183,0.0768 -0.12753,0.19543 0.0143,0.37395 0.32527,0.41241 -0.0745,0.29467 -0.72864,-0.21473 -0.71245,-0.55498 -1.05936,-0.39598 -0.95892,0.43985 0.0416,0.33988 0.12324,0.48366 0.20807,0.35468 0.0888,-0.13655 0.20691,-0.004 0.32584,0.36877 0.10174,0.32039 0.28573,0.55263 0.40724,0.51536 0.34705,-0.10575 0.38459,-0.42635 0.0874,-0.73974 -0.43074,-0.4534 -0.31081,-0.73099 0.15547,-0.35986 0.25348,0.20188 0.38044,0.45716 0.32427,0.65161 -0.0502,0.17568 2.9e-4,0.32435 0.12036,0.32433 0.1175,0.003 0.16537,-0.076 0.10747,-0.17623 -0.0602,-0.1046 0.0143,-0.13327 0.17182,-0.0674 0.15345,0.0636 0.28113,0.0207 0.28428,-0.0956 0,-0.12179 0.0774,-0.1647 0.16508,-0.10732 0.0874,0.058 0.79011,0.13068 1.5603,0.16217 0.87538,0.0363 1.30439,0.11506 1.14548,0.20955 -0.1943,0.1165 -0.16808,0.15227 0.1089,0.1666 0.29763,0.0129 0.31238,0.0459 0.086,0.1792 -0.19932,0.1188 -0.22081,0.21924 -0.0803,0.36729 0.0602,0.0639 0.31711,0.0949 0.49235,0.14587 -0.0258,-0.0297 -0.0559,-0.0606 -0.0545,-0.13326 0,-0.1003 0.0903,-0.17623 0.19631,-0.17623 0.0788,0.003 0.1175,0.0486 0.1046,0.11334 0,0.0217 -0.0143,0.0455 -0.0301,0.0703 -0.0516,0.0791 -0.11177,0.12094 -0.1592,0.14286 0.55597,0.14794 1.3051,0.23898 1.40841,0.0807 0.0602,-0.0917 0.0272,-0.21988 -0.0731,-0.28583 -0.33674,-0.22037 0.1784,-0.8133 0.69525,-0.79898 0.23472,0.006 0.34648,-0.01 0.35695,-0.0652 v 0 c 0,-0.0331 -0.0229,-0.0801 -0.0846,-0.14512 -0.11607,-0.12266 -0.20835,-0.36821 -0.20362,-0.54575 0,-0.19462 -0.17309,-0.37354 -0.4495,-0.45093 -0.25205,-0.0703 -0.41684,-0.16677 -0.36583,-0.21549 0.0516,-0.0483 -0.0229,-0.21043 -0.16507,-0.35988 -0.14186,-0.14945 -0.21293,-0.34046 -0.15848,-0.42356 0.0545,-0.0832 0,-0.21354 -0.11033,-0.28804 -0.14187,-0.0937 -0.16236,-0.0546 -0.0616,0.12222 0.12466,0.22596 0.10173,0.22495 -0.16135,0 -0.24246,-0.20762 -0.25721,-0.29549 -0.0702,-0.40726 0.21766,-0.12996 0.0803,-0.22733 -0.2585,-0.1829 -0.0745,0.01 -0.13327,-0.10374 -0.1304,-0.25324 0,-0.15017 -0.0702,-0.27694 -0.16593,-0.27694 -0.0946,-0.003 -0.37127,-0.21307 -0.61386,-0.46872 -0.2426,-0.2556 -0.39377,-0.46206 -0.33617,-0.46206 0.0573,0.002 0.0143,-0.11506 -0.1003,-0.25843 -0.14042,-0.17871 -0.1443,-0.29802 -0.0143,-0.37395 0.37657,-0.21937 0.1976,-0.59398 -0.32656,-0.68568 -0.0731,-0.01 -0.14043,-0.0222 -0.19918,-0.0236 z", +3.04742, 4.1149, +"M 0.969015 -4.11451 c -0.1123,0.003 -0.4062,0.23381 -0.6532,0.51211 -0.247,0.27833 -0.4917,0.4659 -0.5436,0.41704 -0.052,-0.0489 -0.092,-0.0185 -0.089,0.0677 0,0.0862 -0.1232,0.13629 -0.2795,0.11111 -0.1564,-0.0252 -0.2829,0.0298 -0.2812,0.12247 0,0.10163 -0.054,0.0859 -0.141,-0.0393 -0.1244,-0.18039 -0.1424,-0.17678 -0.1385,0.0248 0,0.12772 -0.089,0.27161 -0.2042,0.31987 -0.1152,0.0483 -0.2111,0.0261 -0.2134,-0.0491 0,-0.0753 -0.1476,-0.13195 -0.3225,-0.12505 -0.2601,0.009 -0.2789,0.0366 -0.1017,0.14882 0.1624,0.10279 0.1233,0.11844 -0.1572,0.0625 -0.3368,-0.0673 -0.3789,-0.0286 -0.4299,0.39739 -0.081,0.67937 0.181,2.0534 0.4382,2.29547 0.2153,0.2027 0.2296,0.52597 0.052,1.16531 -0.07,0.25284 -0.1989,0.3266 -0.6031,0.34623 -0.4968,0.0241 -0.4903,0.0295 0.199,0.1819 1.3697,0.30279 2.4788,0.44216 2.7978,0.35191 0.1769,-0.05 0.674,-0.0115 1.1048,0.0858 l 0.7829,0.17673 -0.011,0.54881 c -0.051,2.51094 0.8952,0.2636 0.8723,-1.92856 h -5e-4 l -0.017,-1.60197 -0.6072,0.0429 c -0.3341,0.0235 -0.6756,0.0384 -0.7586,0.0336 -0.1011,-0.006 -0.1467,-0.54478 -0.138,-1.63452 0.013,-1.66481 -0.091,-2.04807 -0.5566,-2.03399 z", +5.34994, 2.90409, +"M 0.205271 -2.88963 c -0.13829,-0.0359 -0.26164,-0.004 -0.39597,0.0846 -0.4055,0.27123 -0.57988,1.88599 -0.20283,1.87455 0.14783,-0.004 0.19695,0.23609 0.12558,0.61444 -0.22207,1.18362 -0.24909,1.20421 -0.83216,0.65553 -1.004,-0.9451 -2.68326,-0.94665 -3.80823,-0.007 -0.588,0.49193 -0.58959,1.01822 0,1.10322 0.48466,0.0703 2.31733,0.0446 3.47298,-0.0477 1.30444,-0.10428 2.47502,0.0916 2.48901,0.41565 0.0207,0.47846 0.40456,0.83765 0.9455,0.88472 0.2971,0.0257 1.17457,0.10237 1.94935,0.17084 0.97395,0.0862 1.40585,0.0494 1.4014,-0.1208 v -7.4e-4 c 0,-0.13544 -0.24559,-0.23879 -0.53554,-0.23 -0.51615,0.0159 -0.52728,-0.021 -0.47228,-1.65113 l 0.0572,-1.66673 -0.87063,0.0172 c -1.71646,0.0362 -1.88385,-0.0251 -1.9042,-0.69824 -0.0159,-0.34413 -0.10173,-0.62322 -0.20124,-0.6202 -0.10015,0.003 -0.42332,-0.20574 -0.71803,-0.46412 -0.20188,-0.17696 -0.35766,-0.27952 -0.49691,-0.31544 z", +4.12566, 4.16038, +"M -4.12566 1.26026 c 0.3983,1.33704 0.5968,1.95916 0.8005,2.60191 0.1973,-0.15081 0.2728,-0.16272 0.4356,0.0408 0.1118,0.13999 0.2564,0.25733 0.3214,0.25733 0.2494,0.007 0.5568,-0.47474 0.585,-0.91673 0.016,-0.25389 0.1112,-0.52612 0.2113,-0.60513 0.1002,-0.0788 0.3032,-0.36546 0.4507,-0.63717 0.2314,-0.41949 0.2393,-0.48358 0.058,-0.41963 -0.11549,0.041 -0.176,0.0232 -0.1349,-0.0398 0.041,-0.063 0.2731,-0.0781 0.51471,-0.032 0.37159,0.0703 0.50419,0.0242 0.85939,-0.29872 0.2311,-0.2101 0.5599,-0.49394 0.7307,-0.63045 0.1707,-0.13658 0.2623,-0.25061 0.2036,-0.25061 -0.059,-0.002 0.01,-0.0802 0.14211,-0.17517 0.13679,-0.0944 0.2916,-0.14405 0.34419,-0.10907 0.053,0.034 0.2139,0.0285 0.3576,-0.0134 0.211,-0.0609 0.24771,-0.14503 0.1917,-0.43562 -0.059,-0.30721 0.028,-0.46208 0.5891,-1.05009 0.3622,-0.37938 0.6599,-0.741607 0.6615,-0.804607 0,-0.063 0.043,-0.21795 0.092,-0.34417 0.072,-0.18478 0.016,-0.16969 -0.2863,0.077 l -0.3762,0.30645 0.3152,-0.33952 c 0.1734,-0.18614 0.3417,-0.31097 0.3746,-0.27596 0.033,0.035 0.1383,0.002 0.2336,-0.0729 0.2257,-0.1773 0.2371,-0.4254 0.013,-0.28317 -0.092,0.0587 -0.077,0.0236 0.034,-0.078 0.11061,-0.10141 0.2745,-0.33917 0.3649,-0.52813 l 0.16431,-0.34367 -0.6878,-0.0176 c -0.57011,-0.0152 -0.7141,0.0264 -0.8377,0.24342 -0.082,0.14406 -0.1236,0.37092 -0.093,0.50382 0.036,0.15298 -0.01,0.2372 -0.1214,0.2372 -0.2107,-0.006 -0.2346,0.14356 -0.053,0.33435 0.071,0.0753 0.1477,0.31057 0.169,0.52298 0.045,0.453997 -0.308,0.827227 -0.7953,0.840237 -0.1728,0.005 -0.3814,0.0724 -0.4636,0.15039 -0.2358,0.22381 -0.5701,0.15658 -0.8759,-0.17674 -0.2915,-0.31779 -0.8445,-0.54271 -0.8495,-0.3457 0,0.0616 -0.2271,0.21883 -0.5003,0.34932 -0.5806,0.27771 -0.6869,0.47366 -0.6015,1.1152 0.075,0.56536 0.01,0.62764 -1.1157,1.05936 -0.4885,0.18751 -0.9565,0.38981 -1.4252,0.58394 z", +3.86911, 4.42196, +"M -3.86911 -0.871814 1.5374,2.2846 c 0.2008,-0.0776 0.3166,-0.10729 0.602,-0.2408 0.5019,-0.2349 0.9751,-0.3859 1.0516,-0.33592 0.082,0.0531 0.1067,0.2639 0.061,0.50541 -0.056,0.29721 -0.026,0.43696 0.1075,0.49197 0.1027,0.0425 0.1471,0.13787 0.098,0.21188 -0.061,0.093 -0.015,0.0986 0.1499,0.0196 0.3172,-0.15314 1.3733,-0.36761 1.7591,-0.35761 0.1701,0.005 0.4193,0.13343 0.5544,0.28628 0.1977,0.2236 0.2285,0.38401 0.1566,0.82322 -0.071,0.43418 -0.048,0.56343 0.1142,0.63045 0.1121,0.0465 0.1708,0.13486 0.1308,0.19584 -0.04,0.0607 0.016,0.11679 0.124,0.11679 0.1083,0.003 0.1966,0.0477 0.1953,0.0998 0,0.12689 0.7177,0.55224 0.9426,0.56224 0.1639,0.004 0.1918,-0.43416 0.1075,-1.68103 0,-0.057 -0.064,-0.0689 -0.1354,-0.0279 -0.071,0.0416 -0.1333,0.0151 -0.1406,-0.0589 -0.01,-0.0739 -0.025,-0.1915 -0.04,-0.26148 -0.016,-0.07 -0.034,-0.18423 -0.041,-0.25424 -0.01,-0.0699 -0.1177,-0.1328 -0.2459,-0.1328 -0.5387,-0.0141 -0.9,-1.15501 -0.4197,-1.325 0.3033,-0.1074 0.1118,-0.30189 -0.2402,-0.2439 -0.2282,0.0375 -0.3614,-0.0331 -0.5065,-0.26768 -0.2727,-0.44103 -0.3275,-0.86317 -0.1121,-0.8532 0.096,0.002 0.2993,-0.16322 0.4532,-0.36793 0.1542,-0.2046 0.2449,-0.37412 0.2015,-0.37412 -0.044,-0.001 0.084,-0.13883 0.2837,-0.30541 0.069,-0.0573 0.084,-0.0527 0.1308,-0.0884 -0.2037,-0.64275 -0.4022,-1.26486 -0.8005,-2.60191 -0.3301,0.13674 -0.6584,0.26051 -1.0041,0.41082 -0.2463,0.1071 -0.4953,0.2654 -0.5529,0.35139 -0.058,0.0861 -0.1658,0.15298 -0.2403,0.15298 -0.082,-0.002 -0.064,-0.0868 0.043,-0.2124 0.1554,-0.18108 0.1516,-0.19894 -0.029,-0.13693 -0.1142,0.039 -0.26049,0.0158 -0.325,-0.0522 -0.1486,-0.15661 -0.8354,0.43305 -1.0434,0.89556 -0.115,0.25451 -0.1159,0.351 0,0.40101 0.083,0.037 0.048,0.0698 -0.077,0.0698 -0.232,0.004 -0.2745,0.0305 -0.9012,0.55758 -0.19939,0.16759 -0.4385,0.30075 -0.5318,0.30075 -0.093,-0.002 -0.2048,0.0796 -0.24749,0.18293 -0.043,0.10311 -0.20891,0.18034 -0.36951,0.18034 -0.16049,-0.004 -0.3865,0.0966 -0.50179,0.22429 -0.09,0.0994 -0.2028,0.17031 -0.29871,0.22429 z", +5.21206, 3.61562, +"M 5.21167 3.31641 -2.87571,-2.99268 c -0.10415,0.0389 -0.20387,0.0802 -0.36033,0.0775 -0.39269,-0.007 -0.9471,0.19838 -1.34636,0.49674 -0.14729,-0.0882 -0.27752,-0.24828 -0.39406,-0.40426 0.0978,-0.0826 0.13979,-0.19254 0.0398,-0.3869 -0.11869,0.002 -0.19394,-0.0372 -0.23982,-0.0956 0.0252,-0.0258 0.0176,-0.0405 -0.0283,-0.0478 -0.013,-0.0295 -0.0214,-0.0615 -0.0245,-0.096 0.13076,-0.0385 0.17321,-0.0758 0.0928,-0.0834 -0.026,-0.002 -0.0566,-0.0159 -0.0886,-0.0336 0.0543,-0.31133 0.38549,-0.64795 0.53791,-0.19087 0.30229,-0.0939 0.77511,-0.0703 1.09423,-0.25331 0.7238,0.2051 0.28056,-0.77685 0.56901,-1.06934 0.11112,-0.50295 0.0275,-1.03897 0.0306,-1.55424 0.0222,-0.81487 -0.50294,0.28945 -0.82428,0.37028 -0.24188,-0.2226 -0.5545,-0.11178 -0.57697,0.24343 0.14866,0.27116 -0.28257,0.71309 -0.32723,0.29163 -0.41601,-0.68112 -0.72709,0.45649 -1.14325,0.5169 -0.44399,-0.24164 -0.97952,-0.15946 -1.35193,0.20668 -0.44324,-0.0768 -0.82988,0.4394 -1.36296,0.32681 -0.47543,-0.38381 -0.86283,0.53807 -1.33412,0.18179 -0.16273,0.26228 -0.58769,0.64528 -0.49715,1.05906 0.23477,0.14434 0.20747,0.26981 0.0897,0.31932 l 1.3417,2.68325 0.0924,0.16202 c 0.0405,-0.0728 0.12901,-0.19265 0.24502,-0.311 0.1846,-0.18774 0.29739,-0.23065 0.48407,-0.17861 0.13382,0.0374 0.26642,0.10711 0.29441,0.15529 0.088,0.15111 0.30436,0.10201 0.60459,-0.13753 0.15959,-0.12775 0.31636,-0.20397 0.34817,-0.17032 0.0321,0.0336 0.31919,0.0603 0.63861,0.068 0.3195,0.003 0.57545,0.0368 0.56948,0.0735 -0.0321,0.18681 0.0122,0.40741 0.0814,0.40741 0.0428,7.6e-4 0.16479,-0.0719 0.27032,-0.16241 0.17956,-0.15424 0.94963,-0.38544 1.25629,-0.37779 0.0757,0.002 0.16234,0.0919 0.19361,0.19996 0.0314,0.10799 0.0976,0.17291 0.14737,0.14384 0.0497,-0.0285 0.16563,-0.006 0.2577,0.051 0.14438,0.0896 0.13169,0.0996 -0.0917,0.0996 -0.14246,-0.002 -0.32385,0.0583 -0.40307,0.13318 -0.0793,0.0783 -0.1687,0.11036 -0.19921,0.0782 -0.0306,-0.0321 -0.16794,0.011 -0.30543,0.096 -0.13819,0.0859 -0.39911,0.14129 -0.58333,0.12369 -0.34235,-0.032 -0.52482,0.0456 -0.40461,0.1723 0.0375,0.0391 0.10439,0.0155 0.14898,-0.0525 0.0627,-0.0962 0.095,-0.0855 0.14185,0.0466 0.0459,0.13 0.088,0.14508 0.17627,0.0613 0.0635,-0.0608 0.23759,-0.11077 0.38648,-0.10313 0.14882,0.004 0.27185,-0.0325 0.27308,-0.0814 0,-0.0528 0.15555,-0.0724 0.34259,-0.0525 0.18705,0.0199 0.36279,6e-4 0.39085,-0.0423 0.0283,-0.0428 0.11096,-0.0528 0.18415,-0.0229 0.0734,0.0306 0.21779,0.0125 0.32163,-0.0395 0.13466,-0.0674 0.22391,-0.06 0.3114,0.0253 0.096,0.0969 0.10843,0.0961 0.0574,0 -0.0775,-0.14622 0.21305,-0.26384 0.8457,-0.34183 0.36163,-0.0446 0.45791,-0.0239 0.53033,0.1138 0.0688,0.13016 0.18399,0.16163 0.51496,0.13793 0.30955,-0.0222 0.4563,0.0117 0.53698,0.12369 0.092,0.12747 0.14476,0.13361 0.31147,0.0379 0,-0.002 0.008,-7.7e-4 0.01,-0.002 z", +4.53803, 3.30484, +"M 4.22266 2.80997 0.31537,-1.12559 c -0.009,-0.02 -0.007,-0.0204 -0.0166,-0.0433 -0.0891,-0.18672 -0.1596,-0.43114 -0.15657,-0.54337 0.007,-0.26307 -0.3226,-0.50877 -0.59978,-0.44658 -0.15585,0.0349 -0.21211,0.009 -0.20929,-0.0975 0.007,-0.14506 -0.37221,-0.30892 -0.51604,-0.22496 -0.20972,0.12206 -0.56233,-0.52094 -0.54975,-1.00228 0.007,-0.20306 0.69387,-0.85441 0.89802,-0.84718 0.0246,5.8e-4 0.22013,-0.0893 0.33034,-0.13193 l -1.11178,-1.65212 c -0.0195,0.0111 -0.0463,0.0411 -0.0615,0.0459 -0.0992,0.0317 -0.0915,0.0811 0.0376,0.23393 0.25,0.29716 0.14659,0.5097 -0.3124,0.64203 -0.308,0.0886 -0.41177,0.0914 -0.56956,0.006 -0.0485,-0.28545 -0.10942,-0.55919 -0.33331,-0.56055 l -3.8e-4,0.004 c -0.026,-3.8e-4 -0.055,-4e-5 -0.0856,0.0109 -0.0383,0.12372 -0.0535,0.2567 -0.0629,0.39275 -0.44908,-0.0654 -1.05986,-0.0415 -1.14461,0.0878 -0.0434,0.0662 -0.21861,0.14678 -0.38942,0.17789 -0.21261,0.0392 -0.30785,0.10585 -0.30192,0.21152 0,0.0285 -0.007,0.0534 -0.0145,0.0759 -0.0275,0.0216 -0.055,0.0453 -0.0822,0.0702 -0.007,0.001 -0.013,0.005 -0.0195,0.005 -0.0333,-7.2e-4 -0.12923,0.0237 -0.25528,0.0624 -0.08,-0.4784 -0.33186,-1.13708 -0.5564,-0.91446 0,0.16306 -0.0847,0.21734 -0.17609,0.21377 -3.8e-4,-3e-5 0,3.8e-4 0,3.8e-4 0.0499,0.24365 0.10392,0.55738 0.16712,0.8031 -0.14354,0.0227 -0.30849,0.0898 -0.40511,0.14461 -0.33424,0.33619 -0.74507,0.32102 -1.16899,0.1805 -0.26236,-0.0809 -0.35492,0.0333 -0.33894,0.29672 -0.15324,0.19325 -0.41676,0.31324 -0.60167,0.50786 -0.007,-0.0163 -0.013,-0.0322 -0.0181,-0.0486 0,0.0296 -0.007,0.0486 -0.008,0.0785 0.008,-0.01 0.0166,-0.0192 0.0253,-0.0284 0.0398,0.11691 0.0952,0.23149 0.15439,0.34417 -0.11751,0.0925 -0.227,0.23553 -0.25939,0.35127 -0.0586,0.21246 -0.18947,0.31968 -0.36325,0.38455 l 2.71944,2.83005 c 0.10689,-0.0587 0.32051,-0.1065 0.48394,-0.0994 0.16654,0.004 0.35001,-0.037 0.40736,-0.0912 0.0571,-0.0545 0.38558,-0.0909 0.72945,-0.0814 0.45349,0.0129 0.67232,-0.0226 0.79822,-0.12894 0.16481,-0.13918 0.99615,-0.19618 2.20563,-0.15135 0.19706,0.007 0.40331,-0.0138 0.45849,-0.0463 0.17471,-0.10371 0.36931,-0.0972 0.43389,0.0138 0.0217,0.0374 0.19258,0.0665 0.52581,0.0904 z", +1.92692, 5.24979, +"M -1.16568 5.24449 1.57665,-0.6191 c -0.0474,-0.4867 0.0954,-1.5337 0.25114,-1.6836 0.17039,-0.164 0.21291,-0.1563 0.37621,0.073 0.1012,0.1417 0.23035,0.3447 0.28834,0.4506 0.0858,0.1573 0.13611,0.1636 0.2744,0.034 0.16722,-0.1573 0.0631,-0.3063 -0.31419,-0.4501 -0.062,-0.024 0.01,-0.2644 0.15968,-0.5354 0.14994,-0.271 0.33213,-0.7281 0.40412,-1.0154 0.12608,-0.5015 0.1184,-0.5257 -0.1969,-0.5974 -0.23368,-0.053 -0.38971,-0.2226 -0.53949,-0.5876 -0.27201,-0.6626 -0.33335,-2.3657 -0.093,-2.5786 0.1421,-0.1258 0.13903,-0.1774 -0.0181,-0.2987 -0.2079,-0.1604 -0.2341,-1.2411 -0.045,-1.8552 0.10281,-0.3339 0.0903,-0.3456 -0.38601,-0.3581 -0.27072,-0.01 -0.61438,-0.1034 -0.76379,-0.214 -0.23149,-0.1708 -1.32257,-0.6546 -1.34407,0.41 -0.0512,2.5087 -0.0881,2.9436 -0.26511,3.1115 -0.141,0.1334 -0.16333,0.2237 -0.0692,0.2847 0.089,0.058 0.11213,0.5288 0.0651,1.3498 -0.0634,1.1134 -0.0451,1.2803 0.15967,1.4319 0.1278,0.094 0.22429,0.3077 0.22429,0.4734 -0.005,0.1661 0.0515,0.3404 0.12455,0.3886 0.073,0.048 0.0983,0.1683 0.0573,0.2682 -0.042,0.1012 -0.0193,0.1489 0.0517,0.1075 0.22709,-0.1322 0.12486,0.2738 -0.14264,0.5664 -0.28461,0.3116 -0.3362,0.4982 -0.13951,0.5033 0.0694,0 0.12142,0.091 0.12142,0.1964 -0.003,0.1065 0.0736,0.2267 0.17055,0.2666 0.27159,0.1124 0.32136,0.5471 0.078,0.6806 -0.118,0.064 -0.15684,0.1214 -0.0868,0.125 0.01,0 0.0111,0.067 0.0207,0.077 z", +3.13742, 6.38177, +"M 2.09259 -6.37924 c -0.0333,0.0351 -0.0639,0.10651 -0.0665,0.15881 0,0.0523 -0.18168,0.28228 -0.39724,0.51128 -0.21557,0.22899 -0.38735,0.49799 -0.38192,0.5977 0.009,0.0998 -0.12845,0.28291 -0.29726,0.40676 -0.16872,0.12384 -0.25759,0.22444 -0.19726,0.22261 0.0604,-0.002 -0.0906,0.167 -0.33569,0.37418 -0.24507,0.20716 -0.43708,0.42009 -0.42666,0.47372 0.0105,0.0536 -0.0482,0.12244 -0.12993,0.15248 -0.0977,0.0359 -0.11558,-0.005 -0.0508,-0.11945 0.0753,-0.13452 0.0578,-0.14289 -0.077,-0.0371 -0.42105,0.33004 -1.55709,-0.0183 -1.22158,-0.37463 0.0735,-0.078 0.0797,-0.24976 0.0166,-0.41989 -0.0587,-0.15829 -0.0988,-0.34453 -0.0883,-0.41354 0.0105,-0.069 -0.1864,-0.18257 -0.43752,-0.25293 -0.41046,-0.11495 -0.47884,-0.10036 -0.67549,0.14524 -0.16671,0.20808 -0.20217,0.22125 -0.14981,0.0547 0.0473,-0.14918 0.009,-0.21718 -0.13028,-0.2131 -0.15393,0.004 -0.19438,0.1355 -0.18098,0.57824 0.0149,0.48242 0.0447,0.54807 0.19,0.41943 0.13588,-0.11986 0.24384,-0.10913 0.50537,0.0511 0.28184,0.17272 0.32921,0.27874 0.3082,0.69317 l -0.0245,0.48911 0.74029,0.20541 c 0.40731,0.11309 0.788,0.17473 0.84561,0.13664 0.0578,-0.0382 0.1837,-0.008 0.2801,0.0674 0.0963,0.0751 0.31283,0.14691 0.48138,0.15972 0.35154,0.0267 0.74431,0.3456 0.61989,0.50313 -0.0464,0.0583 0.0114,0.0287 0.12757,-0.066 0.19438,-0.1583 0.21329,-0.12545 0.2294,0.40676 0.0131,0.42739 0.0569,0.5552 0.16925,0.4873 0.11986,-0.0727 0.12074,-0.0569 0.009,0.0756 -0.15786,0.18104 -1.51069,0.30581 -1.51577,0.13981 0,-0.14178 -1.40641,-0.0172 -1.51069,0.13438 -0.0517,0.0751 -0.0904,0.0544 -0.0946,-0.0516 -0.009,-0.12779 -0.0569,-0.10875 -0.18194,0.0674 -0.12678,0.17864 -0.17695,0.19682 -0.18369,0.0665 -0.009,-0.13638 -0.0429,-0.14397 -0.14885,-0.0313 -0.0867,0.0919 -0.12888,0.63215 -0.11172,1.42118 0.0149,0.70002 -0.0201,1.3785 -0.0771,1.50759 -0.0948,0.21303 -0.0569,0.22862 0.40722,0.17012 0.28115,-0.0354 0.527,-0.0233 0.54609,0.0267 0.0552,0.14325 2.4345,0.49083 2.60208,0.38007 0.0832,-0.0547 0.19542,-0.0735 0.25067,-0.0416 0.14753,0.0851 0.14473,0.78506 0,0.78953 -0.0709,0.003 -0.0902,0.13157 -0.0429,0.29772 0.0718,0.25436 0.0228,0.31646 -0.36283,0.45699 -0.3814,0.13879 -0.4806,0.13359 -0.68005,-0.0362 -0.12845,-0.10932 -0.43358,-0.20333 -0.67865,-0.20858 -0.24507,-0.005 -0.44758,-0.0599 -0.44977,-0.12127 0,-0.0615 -0.11129,0.02 -0.24253,0.18099 -0.40469,0.49616 -0.24227,0.75036 0.46562,0.72891 0.22712,-0.007 0.30163,0.0579 0.30942,0.26921 0.009,0.22501 0.0315,0.24213 0.12442,0.0891 0.0974,-0.16124 0.1161,-0.15665 0.1231,0.0299 0.009,0.17543 0.0753,0.20061 0.34611,0.12804 0.18571,-0.0497 0.38919,-0.14057 0.45205,-0.20179 0.063,-0.0612 0.2062,-0.11426 0.31801,-0.11764 0.2244,-0.007 0.65264,0.38173 0.61088,0.55426 -0.014,0.0601 0.0201,0.23309 0.0762,0.38459 0.21836,0.58332 0.33254,0.22078 0.29725,-0.94474 -0.0263,-0.87541 0.0123,-1.28197 0.13799,-1.45917 0.0959,-0.1351 0.17196,-0.37168 0.16968,-0.52576 0,-0.15407 0.0552,-0.3837 0.12941,-0.51037 0.16216,-0.27806 0.0175,-1.04903 -0.2434,-1.29449 -0.15253,-0.14353 -0.15612,-0.19583 -0.021,-0.31536 0.0892,-0.0787 0.25321,-0.1112 0.36424,-0.0724 0.2413,0.0843 0.44854,-0.40882 0.41895,-0.99812 -0.0105,-0.21248 0.0245,-0.69433 0.0779,-1.07052 0.0534,-0.37619 0.10261,-1.28473 0.10909,-2.01932 h -0.009 c 0,-0.31321 0,-0.55466 -4.3e-4,-0.7452 -0.0131,-0.57155 -0.0744,-0.68608 -0.28106,-0.91216 -0.24901,-0.27261 -0.30434,-0.29013 -0.36511,-0.11627 -0.0394,0.1127 -0.13728,0.18217 -0.21757,0.15428 -0.0975,-0.0339 -0.14036,-0.32845 -0.12897,-0.88591 0.01,-0.45938 -0.0105,-0.80654 -0.0438,-0.77144 z", +2.66052, 3.77103, +"M -0.39949 -3.77089 c -0.24655,0.002 -0.48424,0.0415 -0.7069,0.14289 -0.091,0 -0.14007,0.16428 -0.23247,0.15604 -0.56186,0.39932 -1.98716,1.04365 -0.95829,1.755351 0.37012,0.004 1.89317,-0.681921 1.58174,0.0144 -0.92118,0.19316 -0.78062,1.25644 -0.57652,1.87004 -0.5507,0.73969 -0.54645,2.07518 0.50073,2.40836 0.72023,0.13329 1.71345,0.023 1.86698,1.06161 0.14079,0.10466 0.256,0.14178 0.34647,0.13161 0.39231,-0.0442 0.32501,-0.98344 -0.0873,-1.24084 -0.12491,-0.92548 1.37777,-1.34914 1.32417,-2.16898 -0.0121,-0.11715 -0.0461,-0.24263 -0.12721,-0.37852 -0.83872,-0.59956 -0.43161,-1.77015 -0.097,-2.539971 0.45562,-0.35901 -0.33799,-0.65515 -0.53141,-0.9275 -0.74291,0.0304 -1.56344,-0.29219 -2.30307,-0.2845 z", +3.00843, 4.63, +"M -3.00308 -3.2356 c 0.0216,0.023 0.10979,0.055 0.26872,0.1013 0.56889,0.1649 0.8117,0.2144 1.07177,0.2196 0.22155,0 0.65876,0.8395 0.44286,0.846 -0.0655,0 -0.0523,0.2079 0.0295,0.4583 0.0816,0.2503 0.16335,0.662 0.1819,0.9142 0.0185,0.2523 0.0943,0.4564 0.16795,0.4542 0.0735,0 0.11453,0.2196 0.091,0.4925 -0.0236,0.273 5.3e-4,0.4946 0.0532,0.493 0.0529,0 0.10741,0.2474 0.12093,0.5529 0.0301,0.6823 0.35271,2.2028 0.57102,2.6913 0.0887,0.1985 0.29547,0.4232 0.4594,0.4992 0.4735,0.2194 0.77786,0.184 0.76378,-0.089 -0.0797,-1.554 0.36543,-3.8118 0.78032,-3.9574 0.13544,-0.047 0.34304,-0.3075 0.46147,-0.5778 0.11837,-0.2703 0.26596,-0.4621 0.32814,-0.4263 0.0622,0.036 0.15067,-0.042 0.19637,-0.1726 0.10948,-0.3133 -0.1781,-0.4655 -0.66611,-0.3525 -0.21603,0.05 -0.39776,0.035 -0.40411,-0.033 -0.0656,-0.6804 -0.18153,-1.2185 -0.31109,-1.4439 -0.19053,-0.3315 0.13535,-0.7608 0.48473,-0.6387 0.17021,0.059 0.20863,0 0.16433,-0.2589 -0.0455,-0.2639 -0.2012,-0.3747 -0.72399,-0.5147 -0.42937,-0.115 -0.69455,-0.2732 -0.74517,-0.4454 -0.0417,-0.1415 -0.0928,-0.2038 -0.2341,-0.2067 h -5.3e-4 c -0.0848,0 -0.20163,0.018 -0.36845,0.054 -0.28858,0.063 -0.6874,0.2067 -0.88573,0.3179 -0.1983,0.1112 -0.45557,0.2061 -0.57206,0.2113 -0.18831,0.01 -0.18809,0.024 0.004,0.1401 0.16267,0.098 0.094,0.1364 -0.27802,0.1524 -0.27189,0.012 -0.61486,0.1186 -0.76223,0.2372 -0.14743,0.1187 -0.39883,0.2252 -0.55862,0.2367 -0.10787,0.01 -0.15286,0.021 -0.13126,0.044 z", +4.45538, 5.00079, +"M 3.67326 3.58666 c 0.27079,-0.66346 0.32332,-0.78121 0.57421,-1.39679 -0.20034,0.0973 -0.44394,0.2056 -0.86662,0.24908 l -1.01753,0.10469 -0.32442,-0.67827 c -0.17835,-0.37327 -0.32777,-0.8685 -0.33148,-1.10044 -0.0123,-0.7472 0.88739,-1.58524 1.72954,-1.61074 0.5103,-0.0154 0.92804,-0.83692 1.00146,-1.96776 0.0482,-0.75168 0.021,-0.81363 -0.45222,-0.97588 -0.57495,-0.19732 -0.73908,-0.88336 -0.22222,-0.92927 0.16771,-0.0148 0.0408,-0.1032 -0.2829,-0.19608 -0.44802,-0.12851 -0.61919,-0.11519 -0.71732,0.0549 -0.0705,0.12285 -0.198,0.23615 -0.2829,0.25164 -0.0853,0.0156 -0.12804,0.13016 -0.0952,0.25547 0.0321,0.12524 -0.17735,0.31878 -0.46742,0.42983 -0.29007,0.11098 -0.52514,0.27295 -0.52254,0.35957 0,0.0866 -0.11865,0.16151 -0.26881,0.16606 -0.19491,0.006 -0.23866,0.10876 -0.1514,0.35702 0.0667,0.19175 0.0408,0.62287 -0.0593,0.95864 -0.17315,0.58372 -0.19898,0.59981 -0.58372,0.36405 -0.22135,-0.13498 -0.45358,-0.19271 -0.51599,-0.12646 -0.0618,0.0664 -0.11741,-0.01 -0.12235,-0.16988 -0.0124,-0.36216 -0.41947,-0.36654 -0.69941,-0.007 -0.16709,0.21426 -0.16598,0.26711 0.0124,0.26185 0.17006,-0.005 0.17254,0.0494 0.0136,0.25292 -0.11123,0.14297 -0.14918,0.41073 -0.0853,0.59461 0.0643,0.1839 0.0297,0.54243 -0.0766,0.79706 -0.208,0.49594 -0.48287,0.62505 -0.49485,0.23248 0,-0.14554 -0.19528,-0.23117 -0.48732,-0.22034 -1.11751,0.0426 -1.1384,0.0298 -1.03656,-0.62143 0.0828,-0.52592 0.0321,-0.64517 -0.37881,-0.8967 -0.45308,-0.27763 -0.48287,-0.27552 -0.70373,0.0466 -0.5061,0.73788 -0.0284,1.65526 0.58113,1.11704 0.16054,-0.14168 0.25509,-0.15557 0.25868,-0.0377 0,0.10208 -0.0692,0.23597 -0.16154,0.29699 -0.10505,0.0697 -0.0853,0.23703 0.0569,0.45089 0.18144,0.27371 0.18045,0.36979 -0.0124,0.49434 -0.28512,0.18973 -0.063,0.9574 0.23248,0.80537 0.11,-0.0566 0.33641,-0.15535 0.50264,-0.21971 0.16636,-0.0644 0.29909,-0.22545 0.29514,-0.35829 -0.0124,-0.28263 0.95709,-0.35933 1.62287,-0.12901 0.43418,0.15018 0.81187,1.06462 0.49239,1.19176 -0.0865,0.0347 -0.15412,0.20558 -0.1488,0.37938 0,0.17383 -0.10011,0.36244 -0.23569,0.41897 -0.55653,0.23312 -0.27128,1.40722 0.48027,1.97542 0.39685,0.30003 0.52477,0.25768 0.6936,-0.23056 0.12915,-0.37324 0.23049,-0.42519 0.68407,-0.34872 0.40588,0.0685 0.53095,0.0271 0.52502,-0.175 -0.0124,-0.32797 0.45877,-0.54947 0.56394,-0.26633 0.0569,0.15333 0.14905,0.14191 0.36015,-0.0434 0.19972,-0.17521 0.52736,-0.21946 1.12468,-0.16094 z", +4.04617, 5.42426, +"M -2.94195 4.57672 5.547,0.84754 c -0.0131,-0.11956 -0.002,-0.25067 -0.022,-0.34369 l -0.11879,-0.55384 0.67428,-0.21593 c 0.37071,-0.11919 0.75479,-0.27013 0.85339,-0.33717 0.28775,-0.19498 -0.63141,-0.34362 -1.29568,-0.20935 -0.56865,0.11499 -1.08906,-0.007 -1.15769,-0.27139 -0.0188,-0.0737 -0.18848,-0.31709 -0.37655,-0.54178 -0.18811,-0.22467 -0.3416,-0.53824 -0.3413,-0.69665 9.2e-4,-0.50293 -0.54357,-1.30997 -1.04569,-1.54977 -0.35267,-0.16848 -0.52754,-0.36992 -0.6645,-0.76621 -0.10221,-0.29559 -0.14563,-0.52528 -0.0964,-0.51011 0.17354,0.0539 -0.66737,-2.76228 -0.96072,-3.21725 -0.16345,-0.25346 -0.27119,-0.54462 -0.23941,-0.64722 0.036,-0.1166 0.008,-0.13435 -0.0749,-0.0476 -0.11577,0.12068 -0.2106,-0.0208 -0.25406,-0.37838 -0.006,-0.0499 -0.10171,-0.11849 -0.21226,-0.15262 -0.027,-0.008 -0.0774,-0.16167 -0.11391,-0.2073 -0.53067,-0.0874 -0.63302,-0.10779 -1.20503,-0.20227 10e-4,0.01 0.003,0.01 0.004,0.0175 0.0527,0.43032 0.14887,0.71581 0.25112,0.74742 0.10484,0.0326 0.0998,0.202 -0.0141,0.46214 -0.1944,0.44418 -0.0765,0.73425 0.34048,0.83519 0.23019,0.0556 0.28611,0.20689 0.44455,1.20419 0.20536,1.29285 0.19184,1.41099 -0.17315,1.50581 -0.32706,0.0846 -0.58936,0.79809 -0.36878,1.00225 0.20564,0.19033 0.36751,0.75346 0.20212,0.70237 -0.20848,-0.0645 -0.0864,0.17277 0.22532,0.43844 0.1607,0.13697 0.2717,0.3158 0.24664,0.39698 -0.0253,0.0806 0.0317,0.17074 0.12496,0.19997 0.11335,0.0347 0.11536,0.1239 0.004,0.26449 -0.11539,0.14655 -0.10247,0.49598 0.0428,1.1318 l 0.21014,0.91939 z", +5.49752, 3.12991, +"M 1.37015 -3.12969 v 0.001 c -0.1107,0 -0.2247,0.002 -0.3421,0.005 -0.273,0.007 -0.4227,0.0758 -0.4227,0.19482 0,0.26786 -0.2484,0.3097 -0.772,0.12971 -0.3784,-0.1301 -0.526,-0.12457 -0.8269,0.031 -0.5169,0.26723 -1.5029,0.35961 -2.096,0.19586 -0.4659,-0.12864 -0.5236,-0.11468 -0.7643,0.1912 -0.2181,0.27728 -0.3304,0.31769 -0.696,0.24908 -0.3971,-0.0745 -0.4341,-0.0551 -0.4114,0.21911 0.014,0.1656 -0.1182,0.49771 -0.2935,0.73742 -0.3107,0.42518 -0.3126,0.43928 -0.066,0.58239 0.1392,0.0807 0.5196,0.38777 0.8454,0.68265 0.3259,0.29485 0.7242,0.57704 0.8852,0.62684 0.1609,0.0498 0.2925,0.14516 0.2925,0.21187 0,0.15407 1.2613,0.16018 1.3565,0.006 0.039,-0.0632 0.3437,-0.24332 0.6769,-0.39997 0.425,-0.19982 0.6332,-0.24126 0.6967,-0.1385 0.05,0.0805 0.1662,0.12856 0.2589,0.10697 0.093,-0.0217 0.2127,0.11828 0.2671,0.31058 0.087,0.30723 0.054,0.36567 -0.2775,0.48111 -0.4545,0.1584 -0.4945,0.26092 -0.07,0.17983 0.1982,-0.0379 0.3343,0.0134 0.3845,0.14418 0.064,0.16602 0,0.18801 -0.3395,0.1235 l -0.4165,-0.0786 0.2599,0.26149 c 0.1431,0.14385 0.3029,0.23712 0.3551,0.20722 0.052,-0.0299 0.2166,0.0106 0.3658,0.0904 0.2162,0.11576 0.2544,0.22258 0.1876,0.52659 l -0.084,0.38085 h 0.8407 c 0.752,0 0.8633,-0.0341 1.0527,-0.32297 0.1164,-0.17773 0.372,-0.36144 0.5679,-0.40825 0.4395,-0.10496 0.7018,-0.3012 0.6072,-0.45424 -0.039,-0.0635 -0.01,-0.11523 0.066,-0.11523 0.076,7e-5 0.1379,0.0441 0.1379,0.0977 0,0.23852 1.0762,0.16168 1.5126,-0.10801 0.2339,-0.14457 0.366,-0.29703 0.386,-0.40307 v 0 c 0.02,-0.10602 -0.072,-0.16583 -0.28679,-0.12403 -0.13541,0.0264 -0.67191,0.0638 -1.19271,0.0827 -0.9133,0.0331 -0.9439,0.0241 -0.8619,-0.24339 0.047,-0.15257 0.1949,-0.38208 0.3292,-0.51006 0.297,-0.28318 0.3099,-0.52576 0.041,-0.74878 -0.462,-0.38339 -0.6379,-1.28709 -0.3137,-1.61127 0.069,-0.0691 0.1261,-0.22671 0.1261,-0.35038 0,-0.12366 0.089,-0.31478 0.1984,-0.42426 0.3806,-0.38055 -0.5051,-0.62598 -2.1652,-0.61598 z", +3.63043, 5.15692, +"M -3.62726 -3.36795 c -0.0468,0.32054 0.43759,0.66685 0.52881,0.98692 0.28647,0.32487 -0.28269,0.47336 -0.316,0.71696 0.10063,0.38021 0.34235,0.83542 0.13607,1.20634 -0.51118,0.31783 0.37465,0.71304 0.29987,1.10283 0.36141,0.35332 -0.44509,0.42029 -0.41731,0.69873 -0.13664,0.46798 -0.26085,0.93998 -0.21981,1.41789 0.0582,0.12446 -0.11212,0.37614 0.0969,0.41685 0.88284,-0.0585 0.30904,0.58298 0.69294,0.85291 -0.34214,0.33774 0.0244,0.78826 0.73335,0.72836 0.43959,0.29919 1.07278,0.24331 1.63813,0.35228 l 0.0736,0.0448 c 0.38778,-0.10404 0.0245,-0.72353 0.20718,-1.01432 0.51323,-0.34366 -0.20283,-0.45485 -0.61814,-0.53103 0.0274,-0.33275 0.26259,-0.74304 0.21784,-1.13747 0.23923,-0.2064 0.75099,-0.0848 1.11881,-0.12006 l -0.0149,0.53094 c 0.18821,0.46487 0.40821,0.92446 0.12828,1.42682 -0.43537,0.34603 -0.20149,0.86785 0.62785,0.73084 0.32264,-0.28321 0.35317,-0.75168 -0.0804,-1.04175 0.56867,-0.53073 1.11997,0.32514 1.3861,0.60116 -0.0255,0.3657 1.32511,0.75896 0.98294,0.21235 -0.28172,-0.41656 -0.56593,-0.8647 -1.16271,-1.16373 0.0169,-0.28998 -0.30591,-0.44892 -0.51256,-0.68143 -0.27438,-0.51775 0.92277,-0.55614 1.32949,-0.29182 0.37686,0.30057 0.6089,-0.11077 0.11594,-0.20101 0.11778,-0.45323 -0.55455,-0.70288 -0.75334,-1.04554 -0.24517,-0.39883 0.35093,-0.72371 0.47053,-1.00707 -0.74221,-0.0978 -0.87992,-0.65893 -1.14431,-1.03193 -0.0424,0.27079 -0.61393,0.63737 -0.40714,0.94708 -0.39146,0.39072 -0.2133,0.90337 -0.19158,1.3428 -0.38873,0.18762 -0.1672,0.38452 -0.0853,0.62107 -0.61435,0.26479 -0.31061,-0.34619 -0.56846,-0.50332 -0.0127,-0.48721 -0.72194,-0.78357 -0.99598,-1.2129 0.12473,-0.33506 -0.33466,-0.51389 -0.36161,-0.82807 0.1997,-0.42706 0.3237,-0.84131 0.26038,-1.28998 0.68927,-0.44553 -0.67313,-0.6391 -0.21405,-1.09468 0.22086,-0.37425 0.42402,-0.90652 -0.18371,-1.18138 -0.43025,-0.35212 -0.0683,-0.76225 -0.19938,-1.15243 -0.35117,-0.0477 -0.85403,-0.20224 -1.27169,-0.19685 -0.25089,0.003 -0.47094,0.0655 -0.60781,0.24375 -0.36841,0.38217 -0.14434,0.8521 -0.46111,1.23525 -0.16785,0.0992 -0.24225,0.20322 -0.2578,0.31006 z", +2.88035, 4.06242, +"M 1.25865 -4.0624 c -0.26985,0.16593 -0.42018,0.52485 -0.45144,0.83652 -0.0532,0.14065 -0.26733,-0.18208 -0.24919,0.11733 -0.28494,0.18546 0.14687,0.48052 0.0223,0.77037 0.036,0.36289 0.3756,0.58792 0.53905,0.88077 -0.13707,-0.006 -0.45978,0.15371 -0.4101,-0.0997 -0.0108,-0.31743 -0.1796,-0.59765 -0.41569,-0.80388 -0.20831,-0.2224 -0.50043,-0.35247 -0.56789,-0.66266 -0.28582,-0.18946 -0.72788,-0.02 -0.85216,-0.40249 -0.34073,-0.28483 -0.60874,0.19553 -0.79607,0.42709 -0.15294,0.28679 -0.28387,0.62305 -0.36898,0.94692 0.0288,0.41155 0.59654,0.31526 0.78223,0.64991 0.21197,0.12691 0.79092,0.32794 0.42931,0.61615 -0.22783,0.17371 -0.51269,0.28054 -0.73081,0.21635 -0.3129,0.0885 -0.69087,0.0242 -0.91787,0.32227 -0.0986,0.0888 -0.18264,0.18327 -0.14058,0.32426 0.0153,0.33863 0,0.68711 0.12159,1.00883 -0.17136,0.30467 0.34515,0.28606 0.24024,0.61504 0.0458,0.34026 0.22841,0.60042 0.53816,0.73395 0.11715,0.34628 0.48027,0.43439 0.68656,0.10861 0.22092,-0.24425 0.13892,-0.64131 0.4966,-0.81417 0.22425,-0.28822 0.71346,-0.14432 0.87741,-0.50084 0.18991,-0.18243 0.5743,-0.40112 0.46598,0.0664 0.0489,0.38641 -0.2614,0.6663 -0.34171,1.01509 0.0213,0.33786 0.19593,0.66602 0.38507,0.93374 0.16136,0.28358 0.42527,0.5179 0.5243,0.8088 0.11306,0.0261 0.24555,0.005 0.31311,-0.099 0.17679,-0.18075 0.42474,-0.24465 0.67359,-0.22126 0.24753,-0.26223 0.54092,-0.49076 0.73684,-0.79584 0.0703,-0.37759 -0.42896,-0.49317 -0.57771,-0.73752 -0.0631,-0.34107 -0.18323,-0.61203 -0.31803,-0.91518 0.0979,-0.36538 -0.30776,-0.49131 -0.24159,-0.85374 -0.0624,-0.37632 -0.49732,-0.49981 -0.55581,-0.87137 -0.0398,-0.29907 -0.0805,-0.80571 0.373,-0.62533 0.25606,0.0228 0.19023,-0.34809 0.48675,-0.27109 0.24961,-0.0512 0.49133,-0.32109 0.67696,-0.0456 0.3421,-0.12553 0.19087,-0.82493 -0.23511,-0.63717 -0.36514,-0.0659 0.34354,-0.40056 0.18392,-0.66355 -0.01,-0.40846 -0.52884,-0.49985 -0.47624,-0.91853 -0.12166,-0.36074 -0.58136,-0.42643 -0.90604,-0.4595 z", +3.57088, 4.77385, +"M -1.37842 -4.77385 c -0.32004,0.38562 -0.90978,0.44109 -1.06475,0.98212 -0.33196,0.58155 -0.34433,1.24636 -0.0431,1.86247 0.63654,0.61117 -0.46462,0.56209 -0.81103,0.5768 -0.71739,0.43468 0.23093,1.04171 -0.0105,1.64117 0.14314,0.6155 0.45858,1.33418 1.13619,1.48914 0.64762,-0.0825 1.4885,0.94379 0.87455,1.42229 -0.20223,0.48484 -0.89031,0.9814 -0.1661,1.42189 0.23434,0.25918 0.59181,0.15737 0.78734,-0.0868 0.49244,-0.4069 1.22385,-0.34712 1.79188,-0.53942 0.40959,-0.0676 0.43978,-0.38024 0.52823,-0.71925 0.4924,0.34324 1.17879,0.64169 1.71133,0.1823 0.40615,-0.60741 0.1742,-1.49048 -0.17359,-2.078 -0.01,-0.55871 -0.45537,-1.1785 -1.0577,-0.79483 -0.47109,0.82821 -1.0013,-0.36652 -0.57886,-0.79192 0.0974,-0.61938 -0.40188,-1.41863 -1.12248,-1.2263 -0.615,0.15415 -0.83256,-0.44564 -0.6852,-0.84049 -0.60947,-0.41783 0.57646,-1.01268 -0.19227,-1.48999 -0.1719,-0.39383 -0.74183,-0.82494 -0.92398,-1.01118 z", +3.57088, 3.49495, +"M -2.51747 -3.49406 c -0.44274,0.0168 -0.80575,0.24519 -0.65317,0.74056 0.77847,0.68723 0.006,1.14574 -0.40024,1.60094 0.45273,0.85169 -0.057,2.25152 1.13658,2.51484 0.58996,0.19997 -0.83942,0.82749 0.19445,1.21761 0,0.4092 0.84626,1.20435 1.14506,0.8068 0.96341,-0.49284 2.10194,-0.48523 3.16453,-0.62008 1.00752,-0.34932 1.59197,-1.40776 1.48958,-2.45213 -0.18766,-1.01556 -0.54571,-2.14247 -1.52062,-2.68748 -0.56572,-0.6585 -2.34805,-1.70658 -2.30696,-0.17264 1.19275,1.31973 -1.71147,1.34573 -1.07034,-0.0774 0.0918,-0.5639 -0.60964,-0.89245 -1.17887,-0.87092 z", +2.19827, 3.72855, +"M 1.79578 -3.16055 c 0.29134,0.9127 -0.8513,1.88012 -1.60506,1.23145 -0.61184,0.26144 -1.4819,1.48613 -0.34626,1.65621 0.20292,0.5854 -0.87432,1.11229 -0.86456,1.82626 -0.34284,0.66001 -1.30935,-0.58756 -1.16324,0.49712 0.015,0.16218 -0.0225,0.37679 0.0868,0.50798 0.35875,0.66438 1.22487,1.01087 1.95492,0.77514 0.59338,-0.43345 1.13653,0.4314 1.81488,0.39374 0.23014,-0.39462 0.28884,-0.97791 0.31677,-1.46193 0.0963,-1.02031 -0.0218,-2.07603 0.20824,-3.07268 -0.0106,-0.662 -0.26526,-1.55587 -0.0532,-2.3394 0.10891,-0.75342 -0.47035,-0.79317 -0.34929,-0.0139 z", +3.57085, 3.77374, +"M -1.00965 -3.77187 c -0.50773,-0.0455 -0.59851,0.75754 -1.18315,0.62357 -0.2759,0.006 -0.43238,-0.20174 -0.54732,-0.35854 -0.42974,-0.101 -0.98298,0.0786 -0.79185,0.62433 0.0918,0.27667 0.63885,0.21922 0.50031,0.65458 -0.008,0.28654 0.415,0.4124 0.12652,0.69333 -0.0968,0.21542 0.3362,0.39395 0.19527,0.57658 -0.37534,0.22876 0.12223,0.32999 0.18878,0.60483 0.26355,0.34866 -0.14544,0.74459 -0.0203,1.14239 0.22773,0.37599 0.42716,0.78503 0.71585,1.1349 0.20089,0.31178 0.59558,0.80482 0.97387,0.45305 0.53952,-0.18877 -0.0114,0.38539 -0.26603,0.32129 -0.005,0.24853 0.24187,0.42998 0.13101,0.70434 0.12782,0.27427 0.66178,0.50327 0.90612,0.28229 -0.19362,-0.28539 -0.38278,-0.53996 -0.23003,-0.90337 0.0118,-0.18256 0.14722,-0.40585 -0.0853,-0.48031 0.11501,-0.13614 0.31125,-0.45293 0.29528,-0.0705 0.13823,0.35583 0.51741,0.5319 0.87087,0.59257 0.22815,-0.32159 0.48104,-0.66059 0.8381,-0.85811 0.36776,-0.32583 0.73175,-0.66601 1.02963,-1.05813 0.31551,-0.18006 0.54504,-0.50482 0.93287,-0.49481 -0.0706,-0.38435 -0.81564,-0.26725 -0.51007,-0.7296 -0.004,-0.20098 0.28139,-0.50601 0.11752,-0.63332 -0.38126,0.008 -0.77281,0.0549 -1.14464,-0.0458 0.22089,-0.13301 0.47335,-0.47944 0.54081,-0.80185 0.14915,-0.29117 0.0598,-0.94753 -0.38205,-0.76085 -0.38265,-0.0285 -0.7182,-0.62895 -1.06013,-0.13102 -0.15706,0.19112 -0.33864,-0.13478 -0.29078,-0.28203 0.22718,-0.13574 0.44603,-0.63936 0.0285,-0.63858 -0.11854,0.35338 -0.58257,0.49089 -0.85134,0.14477 -0.29235,-0.20085 -0.66289,-0.31351 -1.02838,-0.30604 z", +3.57089, 5.62272, +"M -1.42379 -5.622 c -0.43389,0.0339 0.14764,1.23134 -0.27034,1.52136 -0.32134,0.64017 -0.3091,1.54516 -1.19918,1.59638 -0.5274,0.17075 -1.08366,0.90166 -0.25472,1.09547 0.18208,0.59783 0.78062,1.0544 0.80096,1.66886 -0.42354,0.53578 -1.0075,1.1037 -0.51402,1.81991 -0.22824,0.69684 -0.48371,1.55859 -0.0453,2.29815 0.0422,0.68578 0.8206,0.79979 1.16895,1.23743 0.21794,0.0348 0.4294,-0.063 0.61318,-0.16915 0.77997,-0.43845 0.0476,-1.6467 0.62273,-2.13958 0.98799,-0.075 0.80763,-1.11489 1.07434,-1.82644 0.15326,-0.73964 1.0527,-0.44914 1.60996,-0.48531 0.28374,0.01 0.59117,0.0806 0.75616,-0.21396 0.52814,-0.37956 0.96391,-1.07548 0.28243,-1.5707 -0.29818,-0.54672 -1.30735,-0.15148 -0.43951,0.146 0.46422,0.42259 -0.74074,0.6148 -1.00937,0.33025 -0.36553,0.13004 -0.87668,0.44845 -0.74154,-0.26028 0.0857,-0.69248 0.10805,-1.45821 -0.47727,-1.77811 -0.56593,-0.56035 0.55259,-0.94649 0.6444,-1.55057 0.2319,-0.78726 -0.94437,-0.99379 -1.45289,-1.28073 -0.40803,0.36815 -0.78127,0.16543 -0.91525,-0.37606 -0.10931,-0.0486 -0.19174,-0.0678 -0.25373,-0.0629 z", +3.57089, 3.9589, +"M -0.662738 -3.95715 c -0.22732,0.1856 -0.1616,0.62065 -0.53242,0.4242 -0.47422,0.18596 -1.1086,-0.11391 -1.44717,0.37963 -0.0317,0.5894 -0.93935,0.14582 -0.92847,0.72408 0.18671,0.31101 0.54772,0.37476 0.774,0.25063 0.73663,0.38029 -0.26627,0.73927 -0.27541,1.18012 -0.16873,0.24378 -0.22553,0.49255 -0.0791,0.74385 -0.35807,0.49099 0.49544,0.79295 0.89329,0.76898 0.7408,0.0465 -0.0421,0.63402 -0.3488,0.72743 -0.19071,0.30445 -0.16117,0.71804 -0.63596,0.65942 -0.0994,0.45223 -0.3579,0.95834 0.0972,1.33927 0.29409,0.53974 0.96448,0.4094 1.42438,0.6058 0.25557,0.31566 0.59274,-0.11505 0.78137,-0.28179 0.43541,-0.29546 0.89088,-1.01334 1.42439,-0.89697 0.37087,0.20728 0.82182,0.38467 1.17308,0.10018 0.30848,0.23171 0.74947,0.19845 1.07289,0.43056 0.23849,0.006 0.56519,-0.37111 0.53108,-0.64333 0.0427,-0.41341 0.67275,-0.95516 0.002,-1.22669 -0.51332,0.33701 -1.04337,-0.18935 -1.52993,-0.35215 -0.31537,-0.10025 -1.01146,-0.23443 -0.48651,-0.62826 0.0794,-0.34626 0.44388,-0.30417 0.61988,-0.4711 -0.5035,-0.3571 -0.4592,-1.16755 -1.13992,-1.30979 0.084,-0.42636 0.24714,-0.98594 0.42956,-1.45855 -0.12383,-0.36592 -0.23396,-1.20431 -0.77535,-0.74854 -0.42722,0.24522 -0.7282,-0.3551 -1.04407,-0.31698 z", +4.35997, 4.86053, +"M 4.12802 -4.85771 c -0.10456,-0.0226 -0.24399,0.0881 -0.41693,0.42159 -0.2125,0.98079 -0.39661,2.00485 -1.27137,2.64164 -0.55259,0.76964 -0.84457,2.28577 -2.02939,2.16135 -0.53939,-0.50526 -1.4269,0.18538 -2.12311,0.20849 -0.55867,0.36525 -1.1619,-0.53149 -1.67378,0.28501 -0.92928,0.12919 -0.84737,1.30207 -0.21641,1.57615 -0.23706,0.6136 -1.50686,1.78461 -0.11541,1.86052 0.32445,0.23972 0.55181,0.97448 0.94742,0.25664 0.58659,-0.89664 1.44208,-1.65942 1.52995,-2.76437 0.89443,-0.40943 1.08676,1.66279 2.17983,1.45475 1.174,0.49699 -0.92964,1.24862 -0.11145,1.5821 0.52277,-1.10045 2.1059,-0.15978 2.383,-1.305 0.26784,-0.82205 1.53393,-1.83991 0.82737,-2.6377 -0.22347,-0.70652 -1.39017,-0.1269 -1.3248,-0.76992 -0.23832,-0.99719 0.89102,-1.4275 1.08066,-2.29858 -0.19297,-0.68688 0,-1.06432 0.50602,-1.52073 0.12078,-0.40486 0.0586,-1.10219 -0.17153,-1.15194 z", +2.04794, 5.74865, +"M 1.10481 -5.74852 c -0.2228,0.001 -0.42374,0.10801 -0.27902,0.38066 -0.22773,0.32416 -1.04651,0.01 -0.86657,0.6221 0.26376,0.4125 0.0107,0.98862 -0.32022,1.27218 0.2249,0.43579 0.30114,0.9337 0.36381,1.39786 -0.18081,0.1263 -0.35082,0.59103 -0.47477,0.5752 0.13163,-0.4456 -0.6191,-0.80374 -0.54723,-0.18253 0.0335,0.4939 0.30706,0.8021 0.65488,1.16755 0.0573,0.18913 0.50349,0.27841 0.054,0.30188 -0.32151,0.0134 -0.70298,0.15083 -0.96036,0.26819 -0.004,0.5051 -0.55904,0.90049 -0.23512,1.41321 -0.58144,0.13334 -0.38504,0.76784 -0.14975,1.12213 0.1297,0.3844 0.11185,0.7896 -0.32623,0.90896 -0.31629,0.49376 0.60887,-0.10276 0.51957,0.45041 -0.50415,0.22985 -0.21881,0.79349 -0.0156,1.13687 0.0134,0.25246 0.20574,0.68606 0.45883,0.6615 0.0963,-0.10895 0.22038,-0.21662 0.23453,-0.37013 -0.0641,-0.49914 0.3279,-0.12706 0.46184,0.0763 0.39469,0.33331 0.98388,0.17352 1.28451,-0.20657 0.25784,-0.20591 0.90771,-0.24636 0.52498,-0.65428 0.40076,-0.52758 -0.33316,-0.93582 -0.19243,-1.46581 0.0606,-0.56794 -0.0204,-1.15758 0.12958,-1.71117 0.1498,-0.39418 -0.30538,0.12251 -0.36231,-0.28414 -0.0417,-0.31502 0.45507,-0.37624 0.54784,-0.65519 0.36583,-0.13394 0.0559,-0.67183 0.39269,-0.91255 0.2087,-0.31728 -0.37429,-0.20735 -0.2216,-0.60377 -0.11082,-0.46181 -0.47329,-0.89905 -0.93241,-1.04485 -0.14753,0.0856 -0.34858,0.34434 -0.37436,-0.04 0.25058,-0.4456 -0.0889,-0.88442 0.0608,-1.31458 -0.11306,-0.4522 0.68191,0.0944 0.52617,-0.54182 0.2472,-0.31727 0.41213,-0.71248 0.436,-1.11462 -0.0466,-0.2419 0.0663,-0.32026 0.29827,-0.3073 0.43849,-0.20873 -0.33546,-0.1678 -0.47237,-0.3142 -0.0671,-0.0208 -0.14373,-0.032 -0.21799,-0.0316 z", +3.57088, 2.80202, +"M -0.301059 -2.80177 c -0.17254,0.005 -0.33301,0.071 -0.43996,0.26942 0.0409,0.2666 0.3491,0.47076 0.41858,0.69966 -0.36962,0.1128 -0.73032,0.3493 -1.08495,0.0913 -0.38249,0.0613 -0.25611,0.72381 0.036,0.88696 0.2585,0.30716 -0.38849,0.35691 -0.58937,0.39089 -0.44316,0.0903 -0.23306,0.50499 -0.19046,0.77618 -0.15188,0.28342 -0.52426,0.566 -0.8221,0.58572 0.13061,-0.25419 0.13318,-0.51381 -0.18414,-0.64646 -0.2523,-0.20486 -0.5502,0.37635 -0.34497,0.58256 0.0492,0.32508 -0.0329,0.76492 0.43389,0.8515 0.34683,0.12336 0.70559,0.1523 1.03297,0.318 0.37589,0.0865 0.73238,-0.13092 1.03003,-0.32214 0.24664,0.20939 0.57748,0.44613 0.93799,0.5041 0.31649,0.14136 0.22886,-0.80563 0.61876,-0.47421 0.16196,0.33427 0.30384,0.70629 0.62118,0.93166 0.24438,-0.0315 0.44964,0.28662 0.6275,0.0294 0.27443,-0.16145 0.69426,0.0631 1.03638,0.0219 0.26986,0.26652 1.04494,-0.002 0.59931,-0.38117 -0.10676,-0.38309 -0.23137,-0.76018 -0.4295,-1.11046 0.008,-0.29153 -0.0528,-0.52528 -0.27889,-0.7016 0.0236,-0.29755 0.67185,-0.5939 0.17224,-0.85368 -0.25747,-0.317 0.0128,-0.57784 0.20261,-0.8357 -0.15225,-0.23193 -0.67612,-0.3641 -0.45235,-0.74897 0.0316,-0.51263 -0.46331,-0.52312 -0.81311,-0.58111 -0.28658,-0.15328 -0.55917,0.57451 -0.89206,0.23687 -0.31681,-0.0816 -0.31441,-0.59906 -0.73342,-0.41882 -0.15487,-0.0489 -0.33957,-0.10634 -0.51211,-0.1018 z", +3.16396, 6.28632, +"M -0.0681559 -6.28552 c -0.27397,0.0139 -0.48549,0.2094 -0.46561,0.68988 -0.13806,0.64257 -0.98468,1.02766 -0.7705,1.89187 -0.48185,0.70273 0.94628,1.12941 0.80874,1.464 -0.56632,0.088 -1.05088,0.56396 -1.53894,0.75344 0.69345,0.93338 -1.41697,0.2104 -1.09603,1.20509 0.35057,0.59033 0.4561,1.79086 1.47845,1.37459 0.45409,-0.19336 0.97791,0.0161 0.31471,0.32402 -0.53264,0.2974 -0.72491,1.05029 0.10387,0.95704 0.54052,0.2765 1.10715,0.49524 1.67639,0.62219 -0.14509,0.73633 -1.35981,0.56002 -1.27744,1.47226 -0.11997,0.30673 -0.90705,0.8281 -0.69143,0.97203 0.64811,0.19804 1.34276,0.11448 1.99522,0.29869 0.71434,-0.16557 1.26673,0.36676 1.79782,0.54674 -0.065,-0.01 0.33212,-0.10842 0.24134,-0.11937 0.49432,-0.10903 0.93445,-0.26785 0.43665,-0.76378 -0.0961,-0.57586 -0.91548,-1.29645 -0.12038,-1.6831 -0.4048,-0.51862 0.47421,-1.14462 -0.38966,-1.35703 -0.75428,-0.50253 -0.338,-1.22127 0.38603,-1.49396 0.40886,-0.84209 -0.29071,-1.68516 -0.11525,-2.56832 -0.038,-0.76264 0.0716,-1.5506 -0.0966,-2.2965 -0.33673,-0.72185 -1.00957,-1.22882 -1.66863,-1.66295 -0.20068,-0.36268 -0.65647,-0.64475 -1.00871,-0.62683 z", + ) +scratches=( +1.21098, 12.0742, +"M 0.000565603 -12.0742 c -0.13128,0.38351 -0.75628,0.6648 -1.19561,1.82211 -0.1414,0.37239 0.70808,0.91154 0.5936,1.35961 -0.4133,1.61789 0.0395,2.85731 0.44366,3.80288 0.14158,0.26984 -0.43294,2.12241 -0.31668,2.13113 0.97645,1.62823 0.21172,1.22883 0.13349,3.04219 0.57549,2.43115 0.2224,3.6139 0.12544,6.25854 0.33054,2.36608 -0.73036,1.37715 0.43984,5.73195 0.69244,-3.11326 0.13428,-4.81509 0.0535,-6.02599 0.14464,0.36647 0.22405,-0.58222 0.79938,-1.15807 -0.0141,-0.45337 -0.0246,-0.90699 -0.0494,-1.35961 -0.12372,-0.71424 -0.19704,-1.42486 -0.13769,-2.16524 -0.26034,-0.76585 0.18753,-1.53555 -0.15299,-2.29857 -0.018,-0.66796 0.41747,-1.89258 0.47387,-2.52801 -0.26969,-0.62391 -0.19911,-1.3802 -0.23483,-1.23662 -0.16028,-0.23971 -0.65345,-1.05872 -0.69112,-1.99936 0.0472,-0.699 0.26798,-1.33045 0.18587,-2.0593 0.0935,-0.5642 -0.25882,-1.6984 0.35341,-1.78749 0.55821,-0.1124 -6e-5,-0.993 -0.21304,-0.42272 -0.52661,-0.0264 0.002,-0.62728 -0.20154,-0.94723 -0.17458,-0.0432 -0.29981,0.0337 -0.38438,0.17519 -0.007,-0.1122 -0.0131,-0.22491 -0.0249,-0.33538 z m 0.0394,1.76526 c 0.16024,0.34312 0.14013,0.70048 -0.0104,0.99271 0,-0.34768 0.005,-0.67207 0.0104,-0.99271 z", +1.21091, 19.8304, +"M 0.362522 -19.83 c -0.0425,-0.0104 -0.0565,0.20572 -0.0739,0.68316 -0.17118,4.69021 -0.36552,8.35313 -0.44801,8.44393 -0.0551,0.0606 -0.0981,0.35879 -0.0961,0.66198 0.003,0.45283 0.0497,0.48001 0.26043,0.15399 0.14105,-0.2183 0.25847,-0.63823 0.26046,-0.93327 0.002,-0.29501 0.19851,-0.81366 0.43616,-1.1529 0.17211,-0.24575 0.26287,-0.41037 0.27647,-0.53486 0.0136,-0.12454 -0.0499,-0.20942 -0.18603,-0.29352 -0.25998,-0.1606 -0.30745,-0.89742 -0.19897,-3.07991 0.0784,-1.57793 0.0496,-3.16673 -0.0641,-3.53054 -0.0829,-0.26526 -0.1333,-0.40997 -0.1664,-0.41806 z m -0.52554,11.09286 c -0.0402,-0.006 -0.0675,0.0911 -0.0755,0.28371 -0.0115,0.27886 0.0511,0.43465 0.13901,0.34675 0.0438,-0.044 0.0678,-0.12308 0.0718,-0.21498 h 5.3e-4 c 0.004,-0.0919 -0.013,-0.19595 -0.0512,-0.29145 -0.0317,-0.0792 -0.0606,-0.12035 -0.0848,-0.12403 z m 0.13952,1.125 c -0.007,-9.6e-4 -0.0143,0.001 -0.0217,0.006 -0.11779,0.0728 -0.22286,1.22667 -0.23307,2.56419 -0.004,0.48057 -0.0157,0.84616 -0.032,1.15393 -0.11018,0.1207 -0.22863,0.25041 -0.36277,0.42995 -0.0519,-0.0854 -0.0727,-0.0405 -0.0842,0.12247 -0.15026,0.2185 -0.30279,0.48437 -0.4377,0.83975 -0.11105,0.29241 0.38748,0.68769 0.55189,1.06091 -0.003,0.13173 0.002,0.29377 0.006,0.45631 -0.24328,1.08473 -0.099,1.99333 0.14417,2.75642 0.002,0.0868 0.0117,0.25962 0.0109,0.30282 -0.005,0.2518 0.103,0.52662 0.23926,0.61082 0.0341,0.0211 0.067,0.0269 0.0966,0.0191 0.0622,0.28054 -0.21254,1.2988 -0.31004,1.80195 -0.0228,-0.0699 -0.058,-0.1111 -0.1044,-0.1111 -0.12534,0 -0.22789,0.29714 -0.22789,0.66094 0,0.36375 0.0455,0.66198 0.10128,0.66198 0.0558,0 0.1583,-0.29823 0.22789,-0.66198 0.0132,-0.0692 0.0186,-0.13206 0.0238,-0.19482 0.90374,1.53576 0.17148,1.18929 0.0946,2.97243 0.57549,2.43115 0.22254,3.6139 0.12557,6.25853 0.33054,2.36608 -0.73044,1.37714 0.43976,5.73195 0.69244,-3.11326 0.13401,-4.81509 0.0532,-6.02599 0.14464,0.36647 0.2241,-0.58222 0.79943,-1.15807 -0.0141,-0.45337 -0.0243,-0.90698 -0.0491,-1.3596 -0.12372,-0.71424 -0.19733,-1.42486 -0.13798,-2.16525 -0.26033,-0.76585 0.18756,-1.53554 -0.15296,-2.29856 -0.018,-0.66796 0.41749,-1.89257 0.47387,-2.52802 -0.26969,-0.6239 -0.19889,-1.38019 -0.23461,-1.23661 -0.16028,-0.23971 -0.65375,-1.05872 -0.69143,-1.99936 0.0472,-0.699 0.26815,-1.33046 0.18605,-2.05931 0.0935,-0.5642 -0.25876,-1.6984 0.35346,-1.78749 0.55822,-0.1124 8e-5,-0.99299 -0.21291,-0.42271 -0.10411,-0.005 -0.1661,-0.0335 -0.20153,-0.077 10e-4,-0.13439 10e-4,-0.26153 -10e-4,-0.37982 0.0406,-0.17118 0.0872,-0.35502 10e-4,-0.49041 -0.0109,-0.003 -0.0199,-8.1e-4 -0.0305,-0.003 -0.0297,-0.26499 -0.0801,-0.43408 -0.1633,-0.43408 -0.17193,0 -0.23233,-0.58849 -0.16124,-1.572 0.0586,-0.81059 0.0233,-1.43103 -0.0786,-1.44539 z m -0.66869,13.69167 c -0.0402,-0.006 -0.068,0.091 -0.076,0.2837 -0.0115,0.27886 0.0511,0.43465 0.13901,0.34675 0.0439,-0.044 0.0684,-0.12256 0.0723,-0.21446 0.004,-0.0919 -0.013,-0.19647 -0.0512,-0.29197 -0.0317,-0.0792 -0.0601,-0.12034 -0.0842,-0.12402 z m 0,1.05833 c -0.0402,-0.006 -0.068,0.0911 -0.076,0.28371 -0.0115,0.27886 0.0511,0.43465 0.13901,0.34675 0.0439,-0.044 0.0684,-0.12308 0.0723,-0.21498 0.004,-0.0919 -0.013,-0.19595 -0.0512,-0.29145 -0.0317,-0.0792 -0.0601,-0.12035 -0.0842,-0.12403 z", +1.49495, 18.3425, +"M -0.389083 -18.3412 c -0.0137,-0.002 -0.0282,-0.002 -0.0419,0.002 -0.10038,0.0279 -0.19454,0.22976 -0.24185,0.70177 -0.26567,1.67026 -0.34483,3.24287 -0.40257,4.9351 -0.13546,0.59246 -0.11445,1.16489 -0.0517,1.73632 -0.0585,0.4088 -0.0804,0.92918 0.002,1.32964 -0.12052,1.75209 -0.60079,3.29057 -0.2346,5.20847 0.16549,1.86259 -0.34446,4.07682 0.14933,5.25032 0.0936,0.18527 0.19288,-0.31455 0.29921,-0.15916 0.13603,-0.0189 0.22781,-0.1762 0.28991,-0.41806 0.0507,0.92595 0.15436,1.84189 0.32038,2.69544 0.53221,-0.0551 0.41124,0.9134 0.20775,1.79317 0.51184,0.22894 0.34367,2.25374 0.002,2.89388 -0.0368,0.48543 -0.0891,1.00555 -0.13539,1.53634 0.0369,-1.13406 0.0173,-2.27104 -0.57621,-2.24896 -0.21034,3.7268 -0.29522,7.48925 -0.0279,11.21121 0.34301,0.69517 0.62318,-0.48978 0.76737,-0.70229 -0.15983,-1.72878 -0.22984,-3.51098 -0.2041,-5.28185 0.0306,0.26264 0.0729,0.51868 0.13383,0.76275 0.76367,0.6551 0.19733,-2.26198 0.72554,-2.8298 0.19862,-1.54766 0.11464,-3.48741 0.30178,-5.14232 -0.27355,-1.32725 -0.3366,-3.24034 0.42067,-3.55069 0.7031,-1.9288 -0.89779,-1.8191 -0.56743,-3.27577 0.0274,-1.9927 -0.44524,-3.31209 -0.79632,-4.81779 -0.27045,1.00189 -0.45267,2.49784 -0.54364,3.82767 -0.0214,-0.31841 -0.0436,-0.64831 -0.0615,-0.91622 -0.0602,-1.06935 0.3048,-2.00573 0.18499,-3.34967 0.15293,-0.0682 0.31221,-0.28396 0.43977,-0.72089 0.4395,-1.55568 -0.22239,-3.13405 -0.0129,-4.73201 -0.24661,-1.51874 -0.005,-3.03839 -0.11162,-4.46122 0.17729,-0.52717 -0.0266,-1.24147 -0.23461,-1.27745 z m 0.33951,11.62978 c 2.4e-4,-9.5e-4 2.7e-4,-0.002 5.1e-4,-0.003 h -0.002 c 2.4e-4,0.001 7.7e-4,0.002 10e-4,0.003 z", +1.53299, 18.3425, +"M -0.351212 -18.3412 c -0.0137,-0.002 -0.0281,-0.002 -0.0418,0.002 -0.10036,0.0279 -0.19452,0.22975 -0.24183,0.70176 -0.26567,1.67026 -0.34483,3.24287 -0.40256,4.9351 -0.13547,0.59246 -0.11444,1.1649 -0.0517,1.73633 -0.0484,0.33819 -0.0679,0.74913 -0.0279,1.10898 -0.19071,1.02501 -0.32009,2.2804 -0.38034,3.36517 -0.0761,1.42435 -0.0331,2.95284 0.15555,4.37751 -0.0636,1.14999 -0.12615,2.23412 0.16949,2.93677 0.0697,0.13803 0.14251,-0.10384 0.21913,-0.17208 -0.005,0.0233 -0.01,0.047 -0.015,0.0703 0.51186,0.22893 0.34366,2.25375 0.002,2.89388 -0.1252,1.65317 -0.43757,3.69316 -0.0424,5.2772 0.0544,0.0467 0.10184,0.0733 0.14364,0.0858 -0.12761,3.049 -0.14573,6.11235 0.0724,9.1488 0.343,0.69517 0.62267,-0.48977 0.76686,-0.70228 -0.15983,-1.72878 -0.22934,-3.51098 -0.20359,-5.28185 0.0306,0.26264 0.0724,0.51867 0.13332,0.76274 0.76367,0.6551 0.19733,-2.26198 0.72554,-2.8298 0.19862,-1.54766 0.11465,-3.48741 0.30179,-5.14232 -0.27356,-1.32725 -0.3361,-3.24034 0.42116,-3.55069 0.7031,-1.9288 -0.89829,-1.8191 -0.56793,-3.27577 0.0274,-1.9927 -0.44524,-3.31209 -0.79634,-4.81779 -0.0429,0.15891 -0.0825,0.33356 -0.12092,0.5147 -0.005,-0.41675 -0.0275,-0.80863 -0.0698,-1.17513 0.0749,-0.11708 0.14656,-0.28021 0.21035,-0.49867 0.4395,-1.55568 -0.22191,-3.13405 -0.0124,-4.73201 -0.24662,-1.51874 -0.005,-3.0384 -0.11163,-4.46123 0.1773,-0.52717 -0.0266,-1.24146 -0.23461,-1.27744 z m 0.33952,11.62978 c 2.6e-4,-9.5e-4 2.9e-4,-0.002 5.3e-4,-0.003 h -0.002 c 2.4e-4,0.001 8e-4,0.002 10e-4,0.003 z m -0.0956,9.67279 c 0.34693,0.1444 0.2326,0.99256 0.0522,1.77251 0.51183,0.22894 0.34374,2.25373 0.002,2.89388 -0.0368,0.48543 -0.0891,1.00555 -0.13539,1.53634 0.0309,-0.95055 0.0204,-1.90052 -0.33279,-2.17093 0.0287,-0.40839 0.0871,-0.76874 0.23823,-0.93121 0.1206,-0.9398 0.13944,-2.0231 0.17568,-3.10059 z", +1.20633, 23.4716, +"M 1.20633 -23.4715 c -0.5053,0.33607 -0.23791,1.76733 -0.95755,1.18391 l -0.14986,-0.19483 c -0.008,-0.0416 -0.016,-0.007 -0.0238,0.0713 v 5.2e-4 c 0.18164,0.13239 0.32232,0.3276 0.39534,0.62063 0.0427,0.088 0.061,0.19852 0.061,0.32143 -0.002,0.4222 -0.235,0.98918 -0.51157,1.29759 -0.021,1.53032 -0.0353,3.79606 -0.046,6.48384 0.0137,0.012 0.0215,0.0282 0.0155,0.0491 -0.001,0.008 -0.0116,0.0176 -0.0155,0.0264 -0.003,0.66229 -0.002,1.56265 -0.005,2.27222 -0.26217,1.91668 -0.35258,3.7582 -0.4196,5.72264 -0.4378,1.91459 0.36031,3.66604 0.19897,5.64617 -0.22442,0.63928 -0.0753,1.29189 0.201,1.54461 -0.003,11.37386 0.0137,22.45681 -0.006,21.87567 0.14362,-0.69488 -0.32321,-2.78058 0.72811,-2.35232 -0.12814,0.70466 0.19505,1.16669 0.36795,1.67432 -0.0668,-2.83822 -0.14226,-12.31522 -0.15967,-21.95783 0.0124,-0.0381 0.0257,-0.0691 0.0377,-0.11007 0.42336,-1.49849 0.0674,-3.0137 -0.0413,-4.54288 2.1e-4,-0.48242 10e-4,-0.94352 0.002,-1.42058 0.007,-0.0756 0.0123,-0.15121 0.0222,-0.22686 -0.008,-0.051 -0.0143,-0.102 -0.0217,-0.15296 0.008,-5.2851 0.0362,-10.20918 0.10488,-13.52062 -0.0288,0.0211 -0.0623,0.0406 -0.10282,0.0573 -0.22574,-0.68079 -0.0267,-0.7215 0.11576,-0.56947 0.0507,-2.17256 0.11869,-3.59653 0.20978,-3.79925 z m -2.21742,27.16423 c -0.21037,3.7268 -0.29472,7.48924 -0.0274,11.2112 0.343,0.69518 0.62317,-0.48977 0.76737,-0.70228 -0.19468,-2.10548 -0.25887,-4.29063 -0.17518,-6.43733 -0.14325,-1.11457 0.39523,-4.10729 -0.5643,-4.07159 z", +1.19276, 25.078, +"M -0.421376 -3.88054 c -0.27631,0.25272 -0.42545,0.90533 -0.20103,1.54461 0,0.0137 0,0.0271 0.003,0.0408 -0.0445,-0.0116 -0.0846,-0.0199 -0.13695,-0.0377 l -0.11678,-0.0403 0.0201,0.0682 c 0.1305,0.45681 0.22437,0.8044 0.24133,0.92553 0,0.015 0,0.03 -0.003,0.045 -0.003,8e-4 -0.005,0.002 -0.0109,-0.005 0.003,0.20217 -0.0377,0.38449 -0.14211,0.45011 0.0449,0.007 0.0822,0.0209 0.11626,0.0382 -0.0299,0.3032 -0.0693,0.6025 -0.11057,0.90072 -0.0932,0.0649 -0.2028,0.0993 -0.32401,0.078 -0.14565,0.51493 0.25239,1.08423 -0.0393,1.56063 0.0722,0.17488 0.13539,0.34219 0.17312,0.50901 0.003,0.14782 0.0111,0.29635 0.0254,0.44545 -0.0156,0.11938 -0.0498,0.24159 -0.11213,0.36897 0.24339,0.56784 0.14218,1.21602 0.18034,1.82263 0.0321,0.60964 -0.054,1.23666 0.0951,1.83296 0.21513,0.29946 -0.39643,0.31017 -0.11369,0.67955 0.039,0.74934 0.21111,1.48345 0.17364,2.23707 0.0111,0.43606 0.0354,1.12135 -0.22066,1.29191 0.64399,0.51467 -0.31361,0.91939 -0.18965,1.4857 0.0477,0.49885 0.30371,1.02019 0.0961,1.48363 -0.0396,0.59756 -0.0501,1.20341 0.21238,1.7234 0.0946,0.62129 -0.0953,1.21664 -0.0124,1.84589 -0.0453,0.5497 0.3098,1.19228 -0.0542,1.66449 -0.19063,0.44185 0,0.91783 -0.19327,1.33791 -0.0311,0.51712 -0.0706,1.05694 -0.0429,1.57355 -0.0493,0.5227 -0.0711,1.06009 -0.003,1.58078 0.079,0.51085 0.0409,0.93085 -0.0816,1.42058 0.0312,0.0244 0.0439,0.0586 0.0692,0.0863 l 1.44333,-3.35897 c -0.0392,-0.12324 -0.10192,-0.24394 -0.21963,-0.35346 -0.0796,-0.4752 0.0952,-0.97383 0.23461,-1.4056 0.16936,0.27841 0.1652,0.98193 0.50075,1.20509 -0.0911,-0.20272 -0.15912,-1.62669 -0.20982,-3.79925 -0.14245,0.15203 -0.34149,0.11132 -0.11575,-0.56947 0.0405,0.0167 0.074,0.0363 0.10284,0.0574 -0.006,-0.28889 -0.0101,-0.65271 -0.0156,-0.96532 0.0822,-0.14175 0.16769,-0.28152 0.24908,-0.42891 -0.0214,-0.20087 -0.14751,-0.3117 -0.26252,-0.4191 -0.005,-0.33733 -0.0116,-0.6269 -0.0161,-0.98547 0.0805,-0.35753 0.10441,-0.72698 0.19428,-1.08055 0.0366,-0.47155 -0.0944,-0.90339 -0.21703,-1.34462 -0.0209,-2.51731 -0.0327,-5.33076 -0.0372,-8.29665 0.007,-0.051 0.0138,-0.10197 0.0217,-0.15297 -0.01,-0.0757 -0.0153,-0.15126 -0.0222,-0.22685 0,-0.47706 -0.003,-0.93817 -0.003,-1.42059 0.0257,-0.36017 0.0648,-0.71939 0.10441,-1.07797 0.10797,-0.15575 0.16115,-0.31721 0.0486,-0.4532 0.0116,-0.11133 0.0217,-0.22266 0.032,-0.33383 0.56079,-1.63193 0.75962,-1.19491 0.0356,-1.64228 -0.0274,-0.34604 -0.082,-0.69129 -0.1793,-1.0356 -0.0119,-0.041 -0.0254,-0.072 -0.0377,-0.11007 0.0175,-9.64261 0.0929,-19.11961 0.15967,-21.95783 -0.1729,0.50763 -0.49607,0.96966 -0.36793,1.67432 -0.80568,3.15608 0.55147,3.77736 -0.72101,19.52334 z", +0.670938, 8.19849, +"M -0.407338 -8.00763 c -0.0754,0.25511 -0.0986,0.76103 -0.002,1.48952 -0.15641,1.5163 0.005,3.60812 -0.2616,5.1103 0.11078,2.14938 0.16104,4.46253 0.31355,6.6328 0.0244,0.8744 0.0171,4.68192 0.38457,2.0748 0.22082,-1.3347 0.65056,-2.59474 0.58926,-4.39985 0.27685,-1.75982 -0.59717,-2.80885 -0.47885,-4.72632 -0.0715,-1.81309 0.41368,-3.66693 -0.0322,-5.23362 -0.11395,-1.10094 -0.38606,-1.37269 -0.51194,-0.94764 z", +0.670938, 12.9232, +"M -0.407338 -12.6223 c -0.0754,0.40213 -0.0986,1.19961 -0.002,2.34792 -0.15641,2.39013 0.005,5.68743 -0.2616,8.05531 0.11078,3.38804 0.16104,7.03423 0.31355,10.4552 0.0244,1.37832 0.0171,7.38006 0.38457,3.27049 0.22082,-2.10387 0.65056,-4.09006 0.58926,-6.93544 0.27685,-2.77398 -0.59717,-4.42755 -0.47885,-7.45005 -0.0715,-2.85794 0.41368,-5.78013 -0.0322,-8.24969 -0.11395,-1.7354 -0.38606,-2.16376 -0.51194,-1.49375 z", +0.753237, 9.39521, +"M -0.337287 -9.3947 c -0.0586,-0.007 -0.11261,0.0579 -0.15195,0.19068 h -5.1e-4 c -0.0754,0.25511 -0.0987,0.76083 -0.002,1.48932 -0.15642,1.51629 0.005,3.6081 -0.26149,5.11028 0.10925,2.11959 0.16037,4.39716 0.308,6.5412 -0.63693,1.04513 0.47877,2.68047 -0.28112,3.96927 0.31912,0.41893 0.25879,2.08373 1.06919,1.26659 0.80684,-0.22766 0.17536,-1.16368 0.17414,-2.66186 -0.30014,-0.12043 -0.46132,-0.32959 -0.54001,-0.58446 0.22741,-1.27036 0.61566,-2.49792 0.55705,-4.22299 0.27686,-1.75983 -0.59735,-2.80886 -0.47902,-4.72633 -0.0715,-1.81309 0.41383,-3.6671 -0.032,-5.23379 -0.0783,-0.7569 -0.23124,-1.12184 -0.36017,-1.13791 z", +1.73753, 21.1382, +"M 0.27454 -21.1377 c -0.0586,-0.007 -0.11258,0.0573 -0.15192,0.19016 l -5e-4,5.2e-4 c -0.0754,0.25511 -0.0987,0.76083 -0.002,1.48932 -0.15452,1.498 -4.5e-4,3.55549 -0.25371,5.05343 -0.15516,0.069 -0.19791,0.18561 -0.17881,0.37363 0.093,0.91418 -0.0185,1.41725 -0.27855,1.25677 -0.1455,-0.0898 -0.26453,-0.51355 -0.26459,-0.94155 3e-5,-0.49146 -0.137,-0.77825 -0.37155,-0.77825 -0.2589,0 -0.40127,0.42059 -0.47077,1.38907 -0.0191,0.26627 -0.0317,0.52238 -0.0367,0.76739 -0.0365,1.71506 0.26421,2.89312 0.85627,3.30781 0.5721,0.40073 0.5816,0.49454 0.39946,3.88917 -0.10265,1.91329 -0.16684,4.25278 -0.14263,5.19865 0.0283,1.10976 -0.0992,1.98889 -0.35968,2.47788 -0.50411,0.94668 -0.52832,1.39496 -0.0542,1.00149 0.28816,-0.23923 0.33626,1.20389 0.27647,8.26771 -0.0584,6.89886 -0.002,8.65365 0.28887,9.05165 0.33266,0.45496 0.37624,0.41244 0.55449,-0.53795 0.10638,-0.56717 0.0821,-1.77797 -0.0543,-2.6908 -0.13639,-0.91282 -0.17248,-1.61256 -0.0796,-1.55546 0.0928,0.0573 0.18032,-0.51603 0.19431,-1.27434 0.0252,-1.36423 0.11504,-1.96676 0.60204,-4.02456 0.13776,-0.58206 0.29511,-3.3592 0.34933,-6.1712 0.0542,-2.81205 0.20923,-5.22336 0.34467,-5.35884 0.13546,-0.13545 0.26493,-0.75165 0.28734,-1.36943 0.0309,-0.85348 -0.0157,-0.99638 -0.19431,-0.59428 -0.17402,0.392 -0.23993,0.42036 -0.25374,0.11007 -0.0102,-0.23043 0.0657,-0.50284 0.16846,-0.60565 0.1623,-0.16235 0.15642,-3.36764 -0.0145,-8.03723 -0.0279,-0.76399 0.0292,-1.38905 0.12663,-1.38906 0.0973,-1e-5 0.17671,-0.41671 0.17671,-0.92604 0,-0.90243 -0.0261,-0.92604 -1.04799,-0.92605 -0.0114,0 -0.0199,4.9e-4 -0.031,5.2e-4 0.001,-0.0895 0.002,-0.17939 0.008,-0.27285 -0.0715,-1.81309 0.41386,-3.6671 -0.032,-5.23379 -0.0784,-0.7569 -0.23125,-1.12184 -0.36021,-1.13791 z", +0.90975, 7.69929, +"M 0.5118 4.3328 0.0773,-1.89734 c -0.78022,-0.65432 -0.7026,-1.85535 0.0991,-2.36604 l 0.22155,-5.30816 c -0.0671,-0.11321 -0.12273,-0.0764 -0.193,-0.25561 -0.39953,-0.40971 -0.50958,-1.87041 -0.78623,-2.16685 l -0.14591,-0.0381 c -0.0432,0.0195 -0.10273,0.16373 -0.15446,0.23376 l -0.5399,11.53632 c 0.09,-0.0554 0.16763,-0.042 0.26343,-0.13249 0.2235,1.06334 -0.41852,2.98144 0.13712,3.761 1.10534,-0.76211 0.3114,-2.4459 1.02162,-3.36601 z", +0.909985, 21.0802, +"M 0.069295 -21.0802 c -1.60221,0.95118 0.0978,2.94503 -0.79529,4.45968 0.31909,0.41893 0.25829,2.08373 1.06866,1.26659 0.80687,-0.22766 0.17589,-1.16368 0.17467,-2.66185 -1.23089,-0.49394 -0.14943,-2.46581 -0.44751,-3.06442 z m -0.28475,6.45077 c -0.0432,0.0195 -0.10276,0.16407 -0.15449,0.2341 l -0.54004,11.53624 c 0.09,-0.0554 0.16777,-0.0423 0.26355,-0.13281 0.22352,1.06334 -0.41867,2.98145 0.13695,3.76101 0.11266,-0.0777 0.20122,-0.16697 0.27803,-0.262 -0.02,0.26698 -0.062,0.40312 -0.11938,0.34572 -0.0852,-0.0852 -0.1323,0.67721 -0.1323,2.13269 0,0.59617 -0.0104,1.04983 -0.0263,1.41593 -0.043,0.0648 -0.0864,0.12977 -0.12454,0.18552 -0.0367,0.0537 -0.0978,0.0547 -0.11316,0.11265 -0.0217,0.0815 0.0922,0.078 0.0744,0.15503 -0.0144,0.0623 -0.10165,-0.009 -0.1116,0.0537 -0.0128,0.0803 0.18314,0.1196 0.17,0.20206 -0.007,0.0452 -0.0103,0.091 -0.009,0.13746 -9.3e-4,1.7e-4 -0.002,0.003 -0.003,0.003 h -5.1e-4 c -0.0783,0 -0.1189,0.16869 -0.091,0.37517 0.0279,0.20649 0.12144,0.35145 0.20825,0.32194 0.003,-9.4e-4 0.005,0.001 0.008,0.001 0.0106,0.0622 0.0188,0.12677 0.0248,0.19224 10e-4,0.0292 0.002,0.0591 0.004,0.0884 0.002,0.0585 0.005,0.11669 0,0.17931 8.2e-4,0.0518 -0.0608,0.12352 -0.0594,0.17312 0.001,0.0496 0.0533,0.0771 0.0553,0.12454 0.002,0.0475 -0.046,0.11479 -0.0434,0.16019 0.002,0.0335 0.0533,0.17164 0.0863,0.27079 0.0126,0.33511 0.0159,0.66968 -0.007,1.00149 -0.0129,0.0186 -0.027,0.0231 -0.0424,0.008 -0.0679,-0.068 -0.10681,0.27415 -0.11419,0.92501 -0.066,0.23273 -0.1523,0.46252 -0.27183,0.68678 0.1062,0.21699 0.19947,0.37376 0.28527,0.49919 0.009,0.30425 0.0207,0.49363 0.0408,0.46354 -0.008,0.28451 -0.0302,0.75484 -0.0398,1.26349 -0.10361,0.44818 -0.1356,1.31544 -0.0109,1.44022 0.14782,0.14777 0.17589,1.00278 0.0796,2.44481 -0.0191,0.28562 -0.0175,0.6403 -0.003,0.9586 -0.0617,0.0399 -0.12502,0.089 -0.19225,0.1571 0.0518,0.38782 0.074,0.81499 0.0935,1.24953 -0.004,0.003 -0.009,0.003 -0.0124,0.007 -0.0863,0.0863 -0.11387,0.41392 -0.0672,0.79169 0.0438,0.35436 0.0791,0.9009 0.0791,1.21439 0,0.46794 0.0655,0.57783 0.36483,0.61443 0.0158,0.002 0.023,0.001 0.0372,0.003 0.0344,0.0746 0.0714,0.14651 0.11266,0.21445 0.15124,-0.0321 0.23686,-0.14678 0.29507,-0.28525 0.0212,0.0538 0.0649,0.0638 0.11575,0.0129 0.0515,-0.0515 0.0774,-0.33668 0.0873,-0.67231 0.29014,-0.88165 0.123,-3.135 -0.53848,-3.37654 l -5e-4,5.2e-4 c -0.0427,-0.0173 -0.0878,-0.0231 -0.13489,-0.0207 0.002,-0.84663 0.0224,-1.14112 0.0972,-1.12552 0.002,4.9e-4 0.005,0.004 0.008,0.005 0.1579,0.11986 0.38113,0.13515 0.67231,-0.0475 -0.022,-0.60336 -0.25202,-1.93024 -0.50488,-2.00556 -0.0135,-0.004 -0.027,-0.005 -0.0408,-10e-4 0.0589,-0.0887 0.12261,-0.19962 0.19431,-0.34623 -0.0435,-0.19088 -0.0688,-0.3762 -0.0847,-0.56017 0.0114,0.004 0.0236,0.008 0.0362,0.016 0.24339,0.15111 0.38658,-0.25127 0.37258,-1.04593 -0.006,-0.35248 0.0815,-0.86868 0.19431,-1.14722 0.12518,-0.30915 0.16568,-0.65349 0.10388,-0.88367 -0.0556,-0.20738 -0.10724,-0.52146 -0.11422,-0.69814 -0.007,-0.17668 -0.10248,-0.32443 -0.21188,-0.32763 -0.0382,-9.7e-4 -0.0689,-0.0206 -0.0946,-0.0522 0.007,-0.0407 0.0134,-0.0917 0.0212,-0.12815 0.0171,-0.0261 0.0359,-0.0485 0.0511,-0.0729 l 5.3e-4,-0.002 -0.047,-3.21014 c 0.0994,-0.6389 0.22457,-1.57045 0.1824,-1.57045 -0.0641,0 -0.11626,-0.10246 -0.11626,-0.22738 0,-0.12493 0.0594,-0.16741 0.13229,-0.0946 0.0729,0.0729 0.1328,-0.0128 0.1328,-0.18966 0,-0.17699 -0.0574,-0.3783 -0.12711,-0.44803 -0.0698,-0.0697 -0.0933,-0.26863 -0.0522,-0.44184 0.0465,-0.19637 -0.005,-0.3147 -0.13798,-0.3147 -0.11716,0 -0.21341,-0.13706 -0.21341,-0.30438 0,-0.16734 -0.0396,-0.47302 -0.0884,-0.67903 -0.0605,-0.2553 -0.0396,-0.32487 0.0661,-0.21911 0.10713,0.10714 0.15502,-0.0773 0.15502,-0.59582 0,-0.65769 0.18227,-0.88497 0.0692,-0.89452 -0.0382,-0.003 -0.10946,0.0186 -0.23151,0.0563 0.0311,-0.6426 0.004,-1.30921 0.36587,-1.77818 l -5e-4,-5.2e-4 0.077,-1.89756 c -0.78023,-0.65432 -0.70247,-1.85506 0.0992,-2.36574 l 0.22169,-5.30821 c -0.0671,-0.11321 -0.123,-0.0766 -0.19328,-0.2558 -0.39952,-0.40971 -0.50935,-1.87035 -0.78599,-2.16679 z m 0.0336,28.36158 c -0.0146,0.0334 -0.0293,0.0897 -0.0439,0.13384 -0.006,-0.0264 -0.0126,-0.0554 -0.0196,-0.0832 0.0197,-0.011 0.0416,-0.0302 0.0636,-0.0506 z", +0.70928, 12.466, +"M 0.18321 -12.4659 c -0.10784,-0.006 -0.2246,0.65736 -0.33539,2.3642 -0.2559,1.61556 0.0378,4.44866 0.86146,3.05511 -0.022,-1.62742 -0.25194,-5.20773 -0.50488,-5.40898 l -0.002,-0.002 c 4.3e-4,3.1e-4 6.4e-4,0.002 0.001,0.002 -0.007,-0.006 -0.0136,-0.01 -0.0207,-0.0103 z m -0.37155,7.36079 c -0.0907,0.007 -0.12097,0.50508 -0.0698,1.9544 -0.26241,4.289499 0.38667,9.178069 -0.45114,13.416749 1.02915,5.67045 1.03722,-1.11191 1.24077,-3.68918 0.0171,-0.0704 0.0353,-0.13161 0.0506,-0.1974 l 0.001,-0.005 -0.0532,-9.785969 c -0.32449,-0.66216 -0.58576,-1.7036 -0.71829,-1.69395 z", +0.791801, 10.8742, +"M 0.37094 -10.8739 c -0.0383,-0.003 -0.10962,0.0185 -0.23202,0.0563 -0.32348,0.10008 -0.3638,0.20621 -0.3638,0.95808 0,0.50923 -0.053,0.793 -0.13282,0.71313 -0.0852,-0.0852 -0.13229,0.67721 -0.13229,2.13269 0,0.59618 -0.0104,1.04983 -0.0263,1.41593 -0.043,0.0648 -0.0864,0.12977 -0.12454,0.18552 -0.0367,0.0537 -0.0978,0.0547 -0.11316,0.11266 -0.0217,0.0815 0.0922,0.078 0.0744,0.15503 -0.0144,0.0623 -0.10166,-0.009 -0.11161,0.0537 -0.0128,0.0803 0.18315,0.11959 0.17,0.20205 -0.007,0.0452 -0.01,0.091 -0.009,0.13746 -9.3e-4,1.7e-4 -0.002,0.003 -0.003,0.003 h -5.3e-4 c -0.0783,0 -0.11885,0.16869 -0.0909,0.37517 0.0279,0.20648 0.12145,0.35145 0.20826,0.32195 0.003,-9.4e-4 0.005,0.001 0.008,0.001 0.0245,0.14353 0.0418,0.2935 0.0284,0.45992 8e-4,0.0518 -0.0608,0.12351 -0.0594,0.17311 10e-4,0.0496 0.0533,0.0771 0.0553,0.12454 0.002,0.0475 -0.046,0.11479 -0.0434,0.1602 0.003,0.0454 0.11377,0.32348 0.11679,0.3669 0.0104,0.14968 0.0239,0.28357 0.0383,0.40928 -0.0199,0.3693 -0.0606,0.56165 -0.11834,0.50384 -0.0843,-0.0844 -0.12634,0.43821 -0.11526,1.43558 0.009,0.84768 0.0233,1.18693 0.0553,1.13894 -0.008,0.28451 -0.0302,0.75484 -0.0398,1.26349 -0.10361,0.44818 -0.13563,1.31545 -0.0109,1.44023 0.1478,0.14777 0.1759,1.00278 0.0796,2.44481 -0.0316,0.47191 -0.0123,1.14721 0.0434,1.5012 0.0959,0.60757 0.19674,0.59567 0.19274,-0.21446 -0.006,-1.40297 0.0164,-1.64026 0.14005,-1.5167 0.0647,0.0647 0.19682,-0.0363 0.29353,-0.22479 0.14898,-0.29044 0.13581,-0.38968 -0.0848,-0.65061 -0.14306,-0.1693 -0.24148,-0.32752 -0.21857,-0.35192 0.0229,-0.0244 -0.002,-0.23205 -0.0569,-0.46095 -0.0157,-0.0663 -0.0256,-0.11223 -0.0398,-0.16847 0.10073,-0.0561 0.22942,-0.23081 0.39328,-0.56585 -0.0435,-0.19088 -0.0689,-0.37621 -0.0848,-0.56018 0.0114,0.004 0.0236,0.008 0.0362,0.016 0.24339,0.15111 0.38658,-0.25127 0.37259,-1.04593 -0.006,-0.35248 0.0815,-0.86867 0.19428,-1.14721 0.12517,-0.30915 0.16568,-0.65349 0.10387,-0.88367 -0.0556,-0.20738 -0.1072,-0.52147 -0.11419,-0.69815 -0.007,-0.17668 -0.10247,-0.32443 -0.21188,-0.32763 -0.0396,-0.001 -0.0716,-0.0212 -0.0977,-0.0548 -0.006,-0.51267 -0.0453,-1.07976 -0.14057,-1.72237 -0.0104,-0.12615 -0.027,-0.22448 -0.0444,-0.32195 0.004,-0.009 0.006,-0.0184 0.0104,-0.0274 0.0792,-0.15448 0.12295,-0.41373 0.0971,-0.57619 -0.0258,-0.16259 -0.0261,-0.2425 -5.3e-4,-0.17828 0.0256,0.0642 0.35351,-2.15491 0.2894,-2.15491 -0.0641,0 -0.11628,-0.10246 -0.11628,-0.22738 0,-0.12493 0.0594,-0.16745 0.13229,-0.0946 0.0729,0.0729 0.13282,-0.0128 0.13282,-0.18965 0,-0.17699 -0.0574,-0.3783 -0.12713,-0.44803 -0.0698,-0.0697 -0.0933,-0.26863 -0.0522,-0.44184 0.0465,-0.19637 -0.005,-0.31471 -0.13798,-0.31471 -0.11715,0 -0.21344,-0.13705 -0.21344,-0.30437 0,-0.16734 -0.0396,-0.47302 -0.0884,-0.67903 -0.0605,-0.2553 -0.0396,-0.32487 0.0661,-0.21911 0.10713,0.10713 0.15504,-0.0773 0.15504,-0.59583 0,-0.6594 0.18355,-0.88659 0.0687,-0.89503 z m -0.77409,10.7518 c 0.008,0.0177 0.0132,0.12011 0.0176,0.27698 -0.03,0.0588 -0.0609,0.11849 -0.0967,0.18449 0.0414,-0.31691 0.0656,-0.49083 0.0791,-0.46147 z m -0.14833,8.34212 c -0.0352,-0.005 -0.064,0.002 -0.0842,0.0222 -0.0863,0.0863 -0.1139,0.41391 -0.0672,0.79168 0.0438,0.35437 0.079,0.90091 0.079,1.2144 0,0.46794 0.0655,0.57783 0.36484,0.61443 0.27919,0.0342 0.31816,-0.004 0.16586,-0.16433 -0.17018,-0.17883 -0.16531,-0.21039 0.0331,-0.21239 0.12763,-0.002 0.23204,0.0988 0.23204,0.22376 0,0.1249 0.0583,0.16907 0.1297,0.0977 0.14147,-0.14143 0.0967,-2.02722 0.0274,-1.95802 -0.0692,0.0692 -0.28162,-0.0722 -0.47181,-0.31419 -0.14263,-0.18155 -0.30326,-0.30098 -0.40875,-0.31523 z", +1.07687, 9.8574, +"M -0.468434 -9.85737 c 0.35117,1.50705 0.82497,2.82661 0.79752,4.82073 -0.33038,1.45668 1.2704,1.34706 0.56728,3.27586 -0.75726,0.31035 -0.69421,2.22344 -0.42064,3.55069 -0.18715,1.65491 -0.10345,3.59501 -0.30207,5.14267 -0.52822,0.56782 0.0385,3.48463 -0.72515,2.82953 -0.39519,-1.58404 -0.0832,-3.62405 0.042,-5.27722 0.3416,-0.64014 0.50986,-2.66493 -0.002,-2.89386 0.20349,-0.87978 0.32479,-1.84821 -0.20741,-1.79313 -0.33006,-1.69697 -0.41673,-3.64057 -0.32176,-5.41903 0.0788,-1.41878 0.27531,-3.13331 0.5735,-4.23627 z", +2.2155, 17.1585, +"M 0.126795 -17.1552 c -0.0862,0.0295 -0.10147,0.26481 0.15555,0.17053 -0.0201,-0.0566 -0.0417,-0.0964 -0.0625,-0.12402 -0.0181,-0.0239 -0.0356,-0.0379 -0.0522,-0.045 h -5.3e-4 c -0.0144,-0.006 -0.0281,-0.006 -0.0403,-0.002 z m -0.11575,1.07797 c -0.2067,8.5e-4 -0.36484,0.15284 -0.2589,0.56792 -0.78081,0.4633 -0.40071,1.63009 -0.15092,2.37195 -0.26111,0.38499 -0.0968,0.69767 0.0336,0.94413 0.003,0.15192 0.005,0.3124 0.008,0.46612 -0.0424,0.0281 -0.0954,0.0546 -0.17159,0.078 -0.38372,0.36544 -0.96946,0.62763 -0.47024,1.2516 0.61513,-0.37333 -0.39214,1.24462 0.37827,1.11983 0.58034,0.63299 -0.16417,1.58188 -0.29199,0.99788 -0.36309,0.82279 -0.74943,2.75375 0.30697,2.90059 0.65154,0.38277 -1.22994,0.47827 -0.32247,1.03353 0.12882,0.11405 0.2826,0.54247 0.4527,0.34778 0.0882,-0.10334 0.15261,-0.21193 0.20463,-0.32349 0.004,0.47543 0.008,0.94591 0.0124,1.42162 -0.1546,-0.15317 -0.30245,-0.264 -0.41445,-0.27802 -0.19592,-0.0245 -0.2839,0.23429 -0.11266,1.02733 0.39989,1.176989 -1.12924,1.251499 -0.25992,2.377629 0.20293,1.10216 -0.30896,2.46141 -0.11473,3.72122 -0.26596,1.39175 1.38674,0.67395 0.53589,2.24534 -0.60793,1.13701 0.0733,2.34518 0.5674,3.05614 -0.24691,0.6918 -0.4676,-0.15486 -0.46559,-0.52399 -0.52125,-0.0811 -0.56888,0.96424 -0.10543,1.27589 0.44555,0.85109 -0.8023,1.42473 0.10078,2.29133 0.72273,0.54138 -0.004,1.44593 -0.46149,0.78445 -0.46868,0.32104 0.99774,0.86268 0.33591,1.56889 -0.12715,0.56519 0.112,1.93607 0.42477,0.65009 0.31115,-0.77077 0.98546,-1.04884 1.25005,-1.8526 -0.41074,-0.17674 -0.96338,-0.29486 -0.21032,-0.51986 0.87294,-0.30163 0.89675,-2.52384 0.20465,-3.22254 0.0979,-0.4361 -0.17264,-0.70085 -0.44082,-0.96635 0.0414,-0.83119 0.0704,-1.69667 0.11163,-2.32389 0.0512,-0.6609 0.0902,-1.54857 0.11988,-2.55954 0.17206,-0.23191 0.19942,-0.56928 0.0243,-0.8847 0.002,-0.0714 0.002,-0.15084 0.004,-0.22324 0.21306,-0.76122 0.28736,-1.5621 0.0243,-2.17454 0.002,-0.29119 0.003,-0.5884 0.004,-0.88677 0.22603,-0.40201 0.27916,-1.31894 0.0305,-1.5658 -0.008,-0.008 -0.0188,-0.0119 -0.0279,-0.0186 -0.0212,-4.586229 -0.18235,-9.480359 -0.49194,-11.419969 0.21301,-0.40925 0.4383,-0.83985 0.42579,-1.43867 0.27437,-0.6706 -0.68641,-0.14121 -0.21238,-0.89969 -0.0211,-0.10544 -0.0977,-0.20384 -0.19741,-0.27854 l -0.001,-10e-4 c -0.11229,-0.0842 -0.25379,-0.13798 -0.37774,-0.13746 z m -1.07128,3.59616 c -0.046,0.0125 -0.11609,0.15283 -0.19843,0.50126 -0.0447,0.11946 -0.12068,0.55421 0.0775,0.36484 0.19362,-0.34691 0.21455,-0.81723 0.14004,-0.86403 h -5e-4 c -0.006,-0.003 -0.012,-0.004 -0.0186,-0.002 z m -0.6356,1.5627 c -0.079,-0.0128 -0.19479,0.0402 -0.34883,0.19792 -0.19704,0.0386 -0.26882,0.95532 0.0331,0.63458 0.39754,-0.0448 0.5438,-0.64657 0.38243,-0.79943 -0.0183,-0.0177 -0.0403,-0.0276 -0.0667,-0.0326 z m 3.53157,0.28783 c -0.0145,-0.003 -0.0279,-0.003 -0.0398,0.002 -0.0792,0.0285 -0.0914,0.22185 0.078,0.65371 0.0425,0.16251 0.28297,0.43936 0.34157,0.13023 -0.006,-0.29077 -0.11668,-0.53703 -0.22944,-0.67335 h -5.1e-4 c -0.0529,-0.0638 -0.10628,-0.10342 -0.14986,-0.11214 z m -3.06699,0.71417 c -0.11473,0.005 -0.36497,0.34787 -0.21913,0.6656 l 0.11472,-0.12816 c 0.15291,-0.30965 0.17669,-0.46521 0.14161,-0.51832 0,7.2e-4 0.002,-2.3e-4 0.002,5.2e-4 l -0.002,-0.002 v 5.2e-4 c -0.009,-0.012 -0.0222,-0.0194 -0.0372,-0.0186 z m 0.91829,1.10691 c 0,1.7e-4 0,3.5e-4 0,5.2e-4 -5.3e-4,1.2e-4 -0.001,-1.2e-4 -0.002,0 5.5e-4,-1.3e-4 9.8e-4,-3.8e-4 0.002,-5.2e-4 z m 1.47484,23.342759 c -0.0965,-0.0137 -0.20217,0.35222 0.0749,0.14676 -0.0109,-0.0548 -0.0222,-0.0916 -0.0357,-0.11472 -0.0122,-0.0202 -0.0259,-0.03 -0.0393,-0.032 z m -0.98237,0.9338 c -0.14174,0.0139 -0.29345,0.21991 -0.24496,0.71003 -0.0263,0.31998 0.15116,0.22384 0.22998,0.0662 0.29102,-0.34448 0.26099,-0.62222 0.14571,-0.72864 v -5.1e-4 c -0.037,-0.0349 -0.0834,-0.052 -0.13073,-0.047 z m 0.4005,1.03714 c -0.1714,-0.0358 -0.43241,0.24697 -0.11526,0.65423 l 0.1447,-0.10853 c 0.1255,-0.28076 0.10745,-0.44152 0.0388,-0.50952 l -0.002,-0.001 c -0.0189,-0.0187 -0.0416,-0.0301 -0.0661,-0.0351 z", +0.780383, 20.4192, +"M -0.105503 -20.4188 c -0.0405,-0.002 -0.0956,0.004 -0.16536,0.017 -0.29935,0.0549 -0.36433,0.21983 -0.36433,0.92115 0,0.46985 -0.0358,1.28906 -0.0796,1.82015 -0.0467,0.5662 -0.0191,1.05683 0.0672,1.18617 0.081,0.1214 0.30279,-0.076 0.49299,-0.43885 0.19016,-0.36274 0.40254,-0.575 0.47181,-0.47122 0.0693,0.10377 0.11406,-2.72234 -0.0274,-2.93432 -0.0714,-0.10706 -0.1297,-0.0411 -0.1297,0.14614 0,0.18729 -0.1044,0.33898 -0.23201,0.33532 -0.19841,-0.003 -0.20326,-0.0502 -0.0331,-0.31828 0.1142,-0.18005 0.12105,-0.25755 -5.3e-4,-0.2633 z m -0.26458,4.60917 c -0.0347,0.0205 -0.0779,0.24114 -0.11988,0.63953 -0.0557,0.53054 -0.075,1.54319 -0.0434,2.25048 0.0963,2.16125 0.0682,3.44269 -0.0796,3.66416 -0.16271,0.24387 -0.0597,2.39029 0.12248,2.55214 0.0663,0.0589 0.11298,0.78233 0.10335,1.60754 -0.0172,1.47849 -0.0189,1.48377 -0.11523,0.37494 -0.0781,-0.90009 -0.10126,-0.6552 -0.11523,1.22451 -0.0111,1.494811 0.0309,2.278081 0.11523,2.151631 0.0606,-0.0909 0.10337,0.21775 0.12195,0.82742 -0.11997,0.0834 -0.25326,0.46905 -0.39997,1.18617 0.0168,0.60699 0.0279,1.24832 0.0393,1.8896 -0.002,0.0692 -7.2e-4,0.13106 0.004,0.18789 0.10261,6.050652 0.0186,13.334762 0.56481,17.672782 0.34438,-0.35219 0.35478,-2.7314 0.4532,-3.9671 0.15868,-1.69005 0.20889,-5.0472 0.15865,-8.334692 0.08,-0.0549 0.10705,-0.21387 0.0698,-0.4495 -0.0411,-0.25961 -0.0181,-0.55719 0.0517,-0.66168 0.0697,-0.10451 0.12713,-0.40665 0.12713,-0.67191 0,-0.26509 -0.0599,-0.39341 -0.13282,-0.28418 -0.0729,0.10924 -0.13229,0.0454 -0.13229,-0.14188 0,-0.18721 0.0523,-0.34043 0.11629,-0.34043 0.0641,0 -0.26379,-3.32582 -0.28938,-3.22958 -0.0256,0.0962 -0.0253,-0.0239 5e-4,-0.26757 0.0258,-0.24348 -0.0179,-0.63167 -0.0971,-0.8632 -0.10261,-0.30004 -0.10358,-0.60608 -0.002,-1.06389 0.078,-0.35332 0.12729,-0.97353 0.10903,-1.37832 -0.0212,-0.47251 0.0377,-0.73954 0.16537,-0.74562 0.1094,-0.005 0.20484,-0.225601 0.21187,-0.490401 0.007,-0.2648 0.0586,-0.73603 0.1142,-1.04684 0.0618,-0.34499 0.0213,-0.86088 -0.10385,-1.32421 -0.11285,-0.41748 -0.19997,-1.19131 -0.19381,-1.71961 0.014,-1.19099 -0.12967,-1.79354 -0.37309,-1.56707 -0.1185,0.11022 -0.18552,-0.0461 -0.18552,-0.4333 0,-0.33342 -0.0706,-0.66331 -0.15658,-0.73284 -0.0967,-0.0782 -0.0238,-0.365 0.0372,-0.75073 0.0545,-0.34306 0.0797,-0.6532 0.0569,-0.6898 -0.0229,-0.0366 0.0755,-0.27457 0.21859,-0.52832 0.22053,-0.39106 0.23374,-0.53911 0.0847,-0.97441 -0.0967,-0.28243 -0.22886,-0.43441 -0.29353,-0.33744 -0.12361,0.18519 -0.1457,-0.17035 -0.14004,-2.27306 0.002,-0.68298 -0.0283,-0.98758 -0.0729,-0.96121 z", +2.50105, 20.7737, +"M 1.99533 -20.1853 c -0.0375,-0.25789 -0.33261,-0.42551 -0.56905,-0.58839 -0.23996,0.23872 -0.47489,0.49163 -0.6009,0.8121 -0.0812,0.48893 -0.29007,0.81482 -0.38877,1.29015 0.002,0.54267 -0.41169,0.99749 -0.40079,1.54481 -0.29754,0.24097 -0.55536,0.37238 -0.50367,0.84202 0.0614,0.57416 -0.22723,1.12925 -0.28672,1.7031 -0.14255,0.60343 -0.28189,1.20471 -0.38066,1.8095 -0.0293,0.59441 -0.2814,1.18246 -0.12046,1.75323 -0.2131,-0.15862 -0.45105,-0.0488 -0.16056,0.12001 -0.0693,0.38384 -0.39321,0.81136 -0.33681,1.29405 0.0267,0.64265 -0.0113,1.27603 -0.14224,1.89832 -0.003,0.60064 -0.10155,1.21537 -0.24239,1.79332 -0.22967,0.32796 0.15308,0.6786 0.11208,1.04197 0.2095,-0.3435 0.24518,-0.79906 0.5964,-1.0637 0.58133,0.18835 0.24969,0.75808 0.31901,1.19987 -0.26469,0.52559 -0.0489,0.91024 0.47559,1.11661 0.25093,-0.0203 0.43656,0.83787 0.43804,0.4442 -0.0618,-0.51559 0.4207,-0.87267 0.41211,-1.37583 0.013,-0.55963 0.17412,-1.11826 0.20939,-1.67553 -0.40638,-0.35369 -0.56249,-0.94788 -0.16108,-1.40288 -0.26584,-0.54166 0.46688,-1.0424 -0.027,-1.55948 -0.72899,-0.49884 0.91668,-0.76908 0.36771,-1.29742 0.0275,0.33925 -0.48808,0.48735 -0.42907,0.0774 0.21303,-0.33662 0.68355,-1.28644 0.0603,-1.29291 -0.1772,-0.18811 -0.2848,-1.18628 0.34402,-1.22453 0.56288,-0.22657 -0.41458,0.0439 -0.23023,-0.39889 0.21834,-0.27814 0.12847,-0.9857 0.5386,-0.9766 0.24676,0.4666 0.0743,-0.15601 -0.0145,-0.31345 0.32655,-0.0856 0.16625,-0.26335 0.21161,-0.564 -0.17635,-0.4556 0.40637,-0.92508 0.0292,-1.47058 -0.0333,-0.47745 0.11583,-1.16532 0.30655,-1.6979 0.30437,-0.47718 0.2963,-1.07386 0.51455,-1.54766 0.0565,-0.10923 0.0727,-0.20496 0.0598,-0.29086 z m -0.67527,5.18673 c -0.005,-0.0207 -0.0401,-0.0511 -0.1331,-0.0891 -0.12685,0.13115 0.14583,0.15153 0.1331,0.0891 z m -0.51447,2.32592 c -0.01,-0.026 -0.0378,-0.0564 -0.0928,-0.089 -0.1546,0.23186 0.13611,0.20162 0.0928,0.089 z m -0.55676,9.92556 c -0.004,-0.0178 -0.0117,-0.0421 -0.0244,-0.0749 l -3.8e-4,8e-5 c -0.10421,-0.01 0.0523,0.1987 0.0247,0.0748 z m -0.40593,0.62749 c -0.029,-0.13397 -0.065,-0.26569 -0.10661,-0.39404 -0.0954,0.0982 -0.57871,0.21425 -0.47507,0.55849 0.0692,0.55607 -0.16309,0.96182 -0.64341,1.21137 -0.634,0.49658 -0.78164,-0.34647 -0.88631,-0.80154 -0.48235,0.13084 -0.0802,0.8574 0.0167,1.20292 -0.36114,0.39753 0.0177,1.11042 -0.11524,1.68891 -0.23801,0.62967 0.24476,1.16486 0.31513,1.76431 0.0279,0.59829 0.024,1.19727 0.091,1.79736 l 3.7e-4,-8e-5 c -5.9e-4,0.16055 0.01,0.32283 0.0418,0.48106 0.14355,0.59006 0.21051,0.10446 0.26051,-0.22378 -0.0205,-0.63973 -0.27186,-1.28964 0.006,-1.90725 0.12037,-0.14839 0.19349,-0.5856 0.41752,-0.32353 0.46234,0.3705 0.3394,1.09108 0.53985,1.60971 0.27126,0.36763 0.39796,0.77484 0.51709,1.26206 -0.002,-0.30581 -0.0844,-1.00791 0.24199,-1.29206 0.11117,-0.32729 -0.38379,-0.91151 -0.20475,-1.38978 0.34489,-0.30119 -0.033,-0.25259 -0.0944,-0.49538 -0.24459,-0.22385 -0.04,-0.56816 -0.16501,-0.76622 -0.1494,-0.4034 -0.40711,-0.71884 -0.52267,-1.12154 -0.24067,-0.7641 0.5871,-1.03146 0.79857,-1.63 0.0764,-0.40778 0.0532,-0.8291 -0.0337,-1.23099 z m 0.89502,9.36585 c -0.0536,-0.20202 -0.20583,-0.37279 -0.33916,-0.2913 0.0256,0.46608 -0.22812,0.1812 -0.20758,-0.11481 0.50238,-0.20886 -0.136,-0.53619 -0.35884,-0.67825 -0.19176,0.37421 -0.0305,0.92091 -0.0919,1.3655 0.20082,0.60747 -0.0474,1.25588 0.23051,1.83712 0.46931,0.45584 0.1681,1.16914 0.30673,1.73368 -0.0209,1.03972 0.15888,2.08076 0.41848,3.08564 0.2179,0.9083 0.43884,1.83468 0.46756,2.76969 l -3.8e-4,8e-5 c -0.0559,0.1059 -0.0189,0.23303 -0.009,0.34529 -0.0466,0.49251 0.47733,1.10683 0.86726,0.99131 0.0869,-0.81136 -0.1849,-1.61553 -0.23186,-2.42464 -0.0153,-0.79202 -0.18322,-1.5676 -0.33686,-2.34287 -0.2662,-0.49125 0.35995,-0.65771 -0.11227,-1.06692 -0.29724,-0.73686 -0.33568,-1.55313 -0.49201,-2.32897 -0.13547,-0.6156 -0.29699,-1.09551 -0.32023,-1.74958 -0.42463,-0.16399 -0.2469,-0.50188 0.0726,-0.6905 0.13034,-0.0698 0.16881,-0.21103 0.15303,-0.35262 -0.003,-0.0295 -0.009,-0.059 -0.0165,-0.0878 z m -2.57871,-11.32017 c -0.2708,-0.55639 -0.38057,-0.0872 -0.31795,0.29402 l -0.0116,0.0821 c -0.0994,0.78435 0.40245,-0.0619 0.32958,-0.37609 z m 4.33185,23.83573 c -0.0258,-0.0834 -0.10025,-0.11446 -0.21568,0.0379 -0.0385,0.0658 -0.10012,0.12716 -0.0971,0.2101 0.26257,0.17623 0.35541,-0.10828 0.31288,-0.24765 z m -0.18954,-0.48941 c -0.002,-0.0411 -0.0436,-0.0877 -0.15571,-0.12611 -0.17795,0.32518 0.16312,0.24936 0.15571,0.12611 z m -3.39268,-11.78328 c -0.007,-0.0222 -0.015,-0.0442 -0.0268,-0.0646 -0.39951,-0.3938 -0.32809,-1.07152 -0.63904,-1.49675 0.0493,0.59576 0.19414,1.18256 0.32136,1.76612 0.004,0.62023 0.44185,0.12916 0.34453,-0.20475 z m 2.27835,12.58899 c -0.0101,-0.0525 -0.027,-0.0984 -0.0521,-0.13269 -0.007,-0.44623 -0.38635,-0.40063 -0.30696,0.0345 -6.4e-4,0.18442 0.0187,0.36863 0.0509,0.55019 0.11903,0.61469 0.37941,-0.0844 0.30817,-0.45198 z m -3.29846,-15.55671 c -0.007,-0.0317 -0.0473,-0.0578 -0.14608,-0.0599 -0.11114,0.30062 0.16683,0.15497 0.14608,0.0599 z", +1.65654, 15.5833, +"M 1.65648 7.45006 c -0.014,-0.2553 -0.50256,-0.33488 -0.51056,-0.80616 -0.15816,0.27247 -0.44145,0.24588 -0.34003,-0.16846 0.52996,-0.0216 0.43279,-0.95853 0.27957,-1.38131 -0.46566,0.32298 -1.49686,0.71091 -1.96216,0.28887 0.47799,-0.50839 -0.10776,-0.98406 0.0393,-1.53376 0.24102,-1.11239 1.05865,-0.30535 1.5689,0.0594 0.29417,-0.54317 -0.42213,-1.43185 -0.2713,-2.12699 0.053,-0.33438 -0.14256,-0.76674 0.18035,-0.99478 0.74093,-0.4137 0.071,-1.20457 0.48731,-1.77662 0.16189,-0.87009 0.12472,-1.775858 0.0253,-2.653088 -0.37764,-0.45524 0.11408,-0.79274 0.0103,-1.24229 -0.0546,-1.40989 0.11322,-2.83197 0.009,-4.24522 -0.18099,-0.66609 0.36361,-1.5512 -0.2403,-2.13217 -0.76022,-0.19291 -1.74581,-0.46318 -1.47846,-1.48984 0.23135,-0.3261 0.005,-1.03309 -0.27595,-0.47181 -0.1149,1.29353 -0.0485,2.59721 -0.0899,3.89486 0.0166,1.91664 -0.15304,3.83585 -0.0129,5.74952 -0.10524,0.84254 -0.15444,1.608928 -0.11524,2.481498 -0.1778,1.05201 -0.0675,2.11953 -0.11111,3.18223 -0.0119,0.29604 0.0774,0.64029 -0.25631,0.78393 h -5.2e-4 c -0.29571,0.18497 -0.24881,0.55168 -0.24081,0.84905 0.12861,0.90109 0.33978,-0.31956 0.34778,-0.59272 0.25303,0.5402 0.0916,1.52043 0.1478,2.22414 -0.0982,0.37068 0.22385,1.646 -0.31678,1.42214 0.003,0.32776 -0.0945,1.3313 0.0145,1.937875 -0.20501,0.86879 0.24098,1.79626 -0.0889,2.66081 0.58049,0.22895 -0.1934,0.54647 0.0367,1.02682 0.20168,0.73761 0.51285,1.49881 0.25838,2.27219 -0.43599,0.48255 0.11253,1.05024 0.3359,0.29043 0.1027,-1.16376 -0.0313,-2.33825 0.0682,-3.50416 0.18831,-1.09985 0.14716,0.68392 0.80718,0.4754 0.30346,0.13933 1.74688,-0.14938 0.9679,-0.23408 -0.58672,-0.4472 0.61164,-1.04584 0.54674,-1.60403 -0.11252,-0.73311 -0.62171,-1.66272 0,-2.307345 0.13633,-0.14516 0.18483,-0.24977 0.17983,-0.33489 z m -0.94413,-22.308708 c -0.13146,-0.53592 -0.80296,-1.00793 -1.25935,-0.52142 -0.21226,0.79762 0.82396,0.58812 1.25935,0.52142 z m -0.25166,28.192583 c 5.1e-4,-0.0774 -0.0451,-0.16422 -0.17674,-0.2346 -0.24185,0.61669 0.17474,0.46696 0.17674,0.2346 z m -0.27799,2.11821 c 0.006,-0.0684 -0.0265,-0.1592 -0.1323,-0.26303 -0.24658,0.46943 0.11469,0.4681 0.1323,0.26303 z m -1.26453,-22.438413 c -10e-4,-0.053 -0.009,-0.11049 -0.0264,-0.17208 0.003,-0.25223 -0.003,-1.72141 -0.21342,-1.21079 -0.0657,0.43773 -0.0695,0.88514 -0.0537,1.32707 -0.0378,0.55499 0.30152,0.42662 0.29352,0.0558 z m -0.0667,3.28145 c -0.004,-0.0288 -0.0281,-0.0608 -0.0847,-0.092 -0.26244,0.28511 0.10135,0.21687 0.0847,0.092 z m -0.2961,17.933793 c -0.005,-0.0297 -0.0175,-0.0677 -0.0413,-0.11629 -0.28174,0.10517 0.0752,0.32372 0.0413,0.11629 z", +1.55663, 17.8159, +"M 0.508125 -17.8159 c 1.02192,1e-5 1.04851,0.0236 1.04851,0.92603 0,0.50934 -0.0799,0.92605 -0.17722,0.92606 -0.0974,1e-5 -0.15454,0.62507 -0.1266,1.38906 0.17088,4.66959 0.17679,7.8749 0.0145,8.03725 -0.10277,0.10281 -0.17864,0.3752 -0.16849,0.60563 0.0138,0.31029 0.0797,0.28188 0.25371,-0.11012 0.17857,-0.4021 0.22525,-0.2592 0.19434,0.59428 -0.0224,0.61778 -0.15187,1.23396 -0.28734,1.36941 -0.13546,0.13548 -0.29046,2.54681 -0.34467,5.35886 -0.0542,2.812 -0.21156,5.58913 -0.34933,6.17119 -0.48698,2.0578 -0.57684,2.66036 -0.60202,4.02459 -0.014,0.75831 -0.10149,1.33161 -0.19432,1.27433 -0.0929,-0.0571 -0.0568,0.64262 0.0796,1.55544 0.13639,0.91283 0.16059,2.12362 0.0542,2.69079 -0.17825,0.95039 -0.22183,0.99291 -0.55449,0.53795 -0.29134,-0.398 -0.34675,-2.15278 -0.28836,-9.05164 0.0598,-7.06382 0.0117,-8.50695 -0.27647,-8.26772 -0.47407,0.39347 -0.44992,-0.0548 0.0542,-1.00148 0.26051,-0.48899 0.38793,-1.36812 0.35966,-2.47788 -0.0242,-0.94587 0.04,-3.28537 0.14265,-5.19866 0.18216,-3.39463 0.32775,-9.3534 1.16794,-9.35337 z", +1.17205, 11.7473, +"M 1.02268 -10.861 c 0.1091,0.1814 0.17719,0.37632 0.13837,0.50034 -0.0351,0.11193 -0.27619,0.1724 -0.53581,0.13446 -0.37479,-0.0547 -0.43967,0.0318 -0.3153,0.41964 0.0861,0.2686 0.0411,0.54794 -0.0997,0.62149 -0.25308,0.13194 -0.18099,1.81839 0.10401,2.43261 0.0809,0.17447 0.095,0.4829 0.0316,0.68524 -0.0634,0.20236 -0.0497,0.46476 0.0303,0.58334 0.25808,0.3824 -0.27881,17.31188 -0.58526,17.230934 -0.163,-0.04269 -0.48752,-0.232899 -0.72224,-0.421235 -0.33692,-0.271053 -0.32403,-0.457558 0.0633,-0.889384 0.26957,-0.300525 0.40319,-0.70571 0.29707,-0.900197 -0.34087,0.04626 0.15589,-9.963114 -0.40834,-15.903028 0.12837,-0.35962 0.16399,-0.9136 0.0792,-1.23105 -0.0848,-0.31748 -0.12098,-0.89469 -0.0803,-1.28251 0.0407,-0.38778 -0.003,-1.16267 -0.0972,-1.72233 -0.12675,-0.75336 -0.0633,-1.00192 0.24376,-0.95706 0.22809,0.0334 0.44313,-0.031 0.47827,-0.14277 0.0351,-0.11192 0.19636,-0.007 0.35828,0.23297 0.16257,0.24082 0.3604,0.33132 0.44178,0.2019 0.10143,-0.16052 0.39628,0.10439 0.57817,0.40666 z", +1.95058, 13.6269, +"M 0.471013 -13.6265 c -0.0226,0.002 -0.0393,0.019 -0.0481,0.0517 -0.0351,0.13069 -0.24992,0.20591 -0.47799,0.16691 -0.30708,-0.0524 -0.37068,0.23818 -0.24392,1.1188 0.0942,0.65419 0.13785,1.56002 0.0971,2.01331 -0.0407,0.45333 -0.004,1.12802 0.0806,1.49913 0.0848,0.37107 0.0488,1.01882 -0.0796,1.43919 -0.20937,0.68561 -0.0718,1.6412 0.37155,2.62827 -0.11168,0.0113 -0.23463,0.0283 -0.38137,0.0563 -0.6455,0.12341 -0.72607,0.25452 -0.72607,1.18184 -1.6e-4,0.62786 -0.10541,0.97834 -0.26458,0.87954 -0.16997,-0.10511 -0.26459,0.835241 -0.26459,2.630332 0,1.81333 -0.0999,2.79364 -0.28421,2.79363 h -5e-4 c -0.15627,-2e-5 -0.23813,0.20835 -0.18243,0.46302 0.0557,0.25469 0.2427,0.43297 0.416,0.39687 0.21384,-0.0449 0.3152,0.40637 0.31522,1.40457 0,0.91314 -0.10041,1.40916 -0.26458,1.30741 -0.16825,-0.10405 -0.25207,0.54034 -0.22998,1.77042 0.0279,1.54684 0.074,1.74841 0.22998,1.0077 0.19206,-0.91245 0.19513,-0.90816 0.22945,0.3085 0.0192,0.67909 -0.0733,1.27442 -0.20569,1.32292 -0.36356,0.1332 -0.56917,1.89947 -0.24442,2.10013 0.29488,0.18225 0.69575,0.93239 0.58706,0.65009 -0.12179,-0.3174 -0.0778,-0.55313 0.11522,-0.61753 0.17206,-0.0571 0.3121,-0.3287 0.31213,-0.60307 3.4e-4,-0.31822 0.13407,-0.44675 0.37052,-0.35605 0.4857,0.18639 0.77203,-0.30974 0.74414,-1.28984 -0.41298,-4.18519 -0.41174,-10.39178 -0.21031,-12.921172 0.13216,0.0905 0.25572,0.15931 0.33795,0.18449 0.30644,0.0946 0.84307,-3.81941 0.58497,-4.26641 -0.08,-0.13861 -0.0934,-0.44506 -0.0299,-0.68161 0.0634,-0.23652 0.0494,-0.59705 -0.0315,-0.80099 -0.28499,-0.71796 -0.35746,-2.68952 -0.10438,-2.84375 0.14078,-0.086 0.18584,-0.4126 0.0997,-0.72657 -0.12435,-0.45333 -0.0596,-0.55441 0.31522,-0.49041 0.25964,0.0444 0.50081,-0.0263 0.53589,-0.15709 0.0388,-0.14498 -0.0294,-0.37294 -0.13848,-0.58498 -0.1819,-0.35333 -0.4763,-0.66307 -0.57775,-0.47543 -0.0814,0.15128 -0.27926,0.0453 -0.44182,-0.23616 -0.12145,-0.21024 -0.24284,-0.33152 -0.31057,-0.32401 z", +0.746818, 13.5457, +"M 0.651624 -11.1239 c 0.0695,0.49565 0.1129,1.02826 0.0882,1.36713 -0.0224,0.30582 -0.17599,0.47106 -0.34142,0.36739 -0.23882,-0.1496 -0.28016,0.087 -0.20091,1.14663 0.0549,0.73391 0.0262,1.49718 -0.0635,1.69814 -0.16126,0.36052 -0.11532,4.968579 0.0663,6.646849 0.0516,0.47672 0.0605,1.31946 0.0201,1.87234 -0.0404,0.55294 -0.0317,1.2699 0.0193,1.59391 0.16445,1.04487 -0.17766,10.194453 -0.37293,9.973273 -0.10386,-0.11664 -0.31064,-0.63636 -0.46021,-1.15097 -0.21468,-0.74062 -0.20647,-1.25023 0.0403,-2.43014 0.17177,-0.82115 0.25691,-1.928273 0.18929,-2.459683 -0.30256,-2.37873 -0.39749,-4.69547 -0.26019,-6.34493 0.0818,-0.98262 0.10449,-2.49631 0.0505,-3.363699 -0.054,-0.86748 -0.0771,-2.44465 -0.0512,-3.50432 0.0259,-1.05958 -0.002,-3.17689 -0.0619,-4.70608 -0.0808,-2.05847 -0.0403,-2.73764 0.15533,-2.61506 0.14533,0.0912 0.28236,-0.0846 0.30475,-0.39011 0.0224,-0.30582 0.12512,-0.0187 0.22829,0.63658 0.10359,0.65802 0.22965,0.90528 0.2815,0.55166 0.0646,-0.43862 0.25251,0.28522 0.36841,1.11114 z", +1.38957, 16.4755, +"M 0.138886 -16.4755 -1.35549,1.84795 c 0.27683,0.42497 0.50699,1.05938 0.54983,1.48879 0.0601,0.48725 0.0332,0.97552 -0.0119,1.46658 -0.0892,-0.49054 -0.17108,-0.69618 -0.19068,-0.4284 -0.0224,0.30551 -0.15905,0.48136 -0.30438,0.39016 -0.19563,-0.12258 -0.23635,0.55687 -0.15555,2.61535 0.0599,1.52918 0.0879,3.64658 0.062,4.70617 -0.0259,1.05967 -0.003,2.63669 0.0512,3.50417 0.054,0.86739 0.0311,2.381 -0.0506,3.36362 -0.13732,1.64946 -0.0421,3.96611 0.26043,6.34484 0.0676,0.5314 -0.0179,1.63864 -0.18966,2.45979 -0.24675,1.17991 -0.25497,1.68972 -0.0403,2.43035 0.12094,0.41612 0.27699,0.82396 0.38809,1.03094 -0.25501,0.55068 -0.28125,1.13805 -0.22479,1.73064 l 1.4609,-0.003 c 0.0168,-0.42614 0.0252,-0.85476 0.0677,-1.27434 0.25389,-1.34995 0.14287,-2.66726 0.36689,-4.02611 0.031,-1.4516 0.11288,-2.8398 0.19175,-4.25762 0.12581,-1.2814 -0.13108,-2.63661 0.16224,-3.91397 -0.10988,-1.37381 -0.11983,-2.74916 -0.14417,-4.11603 0.0786,-1.41425 -0.2367,-2.81377 -0.12764,-4.19458 -0.0646,-1.50176 -0.23391,-3.00258 -0.21238,-4.4483 0.78798,-0.10067 0.97116,-1.25283 0.22117,-1.50379 0.42751,0.71673 -0.5987,0.75403 -0.39428,0.0444 0.49067,-0.38166 0.47429,-0.58582 0.0196,-0.82733 0.15126,-1.10944 -0.28977,-2.18413 -0.17312,-3.35639 -0.008,-0.38118 -0.13687,-0.71882 -0.22635,-1.07229 z m -0.46355,8.37158 c 0.0189,0.005 0.0414,0.0166 0.0641,0.0295 0.11988,0.62091 -0.0121,1.26337 -0.16021,1.91254 5.9e-4,-0.24158 -0.005,-0.49741 -0.0243,-0.75809 -0.0694,-0.92718 -0.0464,-1.22436 0.12041,-1.18391 z m -0.25374,3.57756 c 0.0898,0.93296 0.42876,1.87606 0.6594,2.79259 0.23042,1.45009 0.26061,2.8781 -0.008,4.3031 -0.24439,1.27673 -0.30588,2.48657 0.0294,3.77031 -0.13909,1.17698 -0.45156,2.32446 -0.53951,3.48144 0.0761,-2.22329 0.11075,-4.44633 0.0346,-4.92993 -0.051,-0.32401 -0.06,-1.04076 -0.0196,-1.5937 0.0404,-0.55288 0.0314,-1.39552 -0.0202,-1.87224 -0.1455,-1.34446 -0.20132,-4.53663 -0.13592,-5.95157 z m 0.0796,15.91375 c 0.14541,0.99939 0.5629,2.03294 -0.10957,2.94194 -0.0303,0.0418 -0.0541,0.0847 -0.0811,0.12713 0.0646,-0.57923 0.13222,-1.74103 0.19069,-3.06907 z", +2.34195, 11.5159, +"M 2.34146 -4.20638 c 0.002,0.0553 -0.002,0.11609 -0.0145,0.17985 -0.0644,0.3366 -0.42979,0.50248 -1.33841,0.60719 -0.68743,0.0792 -1.29195,0.0792 -1.34307,0 -0.0514,-0.079 -0.0507,0.0201 4.4e-4,0.22012 0.0516,0.20034 -0.0357,0.52005 -0.19353,0.71065 -0.20476,0.24688 -0.20659,0.49864 -0.005,0.87541 0.15568,0.29074 0.2535,0.80116 0.21707,1.13429 -0.0424,0.38883 0.0761,0.60836 0.33071,0.6134 0.21831,0.004 0.40817,0.18566 0.42215,0.40362 0.014,0.21788 0.11684,0.60569 0.22773,0.8615 0.12326,0.2839 0.0426,0.70855 -0.20724,1.08985 -0.22511,0.34352 -0.39934,0.98017 -0.38738,1.41481 0.0279,0.9801 -0.25842,1.47623 -0.74413,1.28984 -0.23645,-0.0907 -0.37001,0.038 -0.37035,0.35622 -2e-5,0.27437 -0.14008,0.54597 -0.31215,0.60306 -0.19306,0.0644 -0.23703,0.30013 -0.11526,0.61753 0.10871,0.2823 0.15952,0.5378 0.11365,0.56793 -0.0459,0.0299 0.15058,0.22581 0.4361,0.43468 0.44013,0.32178 0.46571,0.44377 0.1685,0.80197 -0.19293,0.23238 -0.45647,0.35733 -0.58549,0.27753 -0.2465,-0.15271 -0.29031,0.14035 -0.27906,1.87067 0.007,0.99916 -0.004,1.01393 -0.19528,0.26464 -0.11079,-0.43669 -0.15026,-1.27006 -0.0873,-1.8521 0.19222,-1.77852 0.13676,-2.83306 -0.15812,-3.01531 -0.32475,-0.20066 -0.11915,-1.96693 0.24443,-2.10013 0.13238,-0.0485 0.2249,-0.64383 0.20567,-1.32292 -0.0343,-1.21666 -0.0374,-1.22096 -0.22946,-0.30851 -0.15593,0.74072 -0.20203,0.53914 -0.22995,-1.0077 -0.0221,-1.23009 0.0617,-1.87448 0.22995,-1.77043 0.16417,0.10175 0.26459,-0.39427 0.2646,-1.30741 -2e-5,-0.99819 -0.10145,-1.44949 -0.31528,-1.40457 -0.17329,0.0361 -0.36031,-0.1422 -0.41598,-0.39689 -0.0557,-0.25466 0.0262,-0.46301 0.18245,-0.463 h 5.2e-4 c 0.18433,1e-5 0.28421,-0.9803 0.28422,-2.79364 0,-1.79509 0.0946,-2.73543 0.26457,-2.63032 0.15915,0.0988 0.2644,-0.25166 0.26456,-0.87952 -1e-5,-0.92732 0.0806,-1.05844 0.72609,-1.18185 0.97706,-0.18674 1.12602,-0.0503 1.126,1.03409 10e-6,0.63956 -0.0957,0.86695 -0.30949,0.73485 -0.21128,-0.13012 -0.25315,-0.0441 -0.13229,0.27076 0.0974,0.25407 0.17731,0.63077 0.17721,0.83716 -2e-5,0.20637 0.19145,0.37518 0.42527,0.37521 0.26515,2e-5 0.36883,0.14645 0.27599,0.38857 -0.082,0.21364 -0.0353,0.45868 0.10391,0.54466 0.13913,0.086 0.2532,0.33466 0.2532,0.55296 -7e-5,0.21815 -0.11907,0.32343 -0.26457,0.23359 -0.14556,-0.0898 -0.26459,-0.0373 -0.2646,0.11674 -8e-5,0.15409 0.10469,0.28009 0.23249,0.28014 0.12785,-1e-5 0.38035,0.35716 0.56117,0.79376 0.18081,0.4366 0.44232,0.79375 0.58084,0.79377 0.10393,0 0.17072,0.11718 0.1778,0.28317 z", +1.43162, 19.3805, +"M -0.137187 -19.38 c -0.0842,-0.005 -0.19127,0.031 -0.32713,0.0946 -0.35901,0.16796 -0.4036,0.34656 -0.4036,1.60868 -7e-5,0.85455 -0.0588,1.3313 -0.14726,1.19683 -0.0946,-0.14306 -0.14727,1.13695 -0.14727,3.58014 -3e-5,2.46804 -0.0551,3.80237 -0.15761,3.80236 h -5.3e-4 c -0.0869,-10e-6 -0.13229,0.28333 -0.10128,0.62993 0.031,0.34665 0.13459,0.58964 0.23098,0.54054 0.11895,-0.0611 0.17571,0.55293 0.17571,1.91151 0,1.24282 -0.056,1.9177 -0.14727,1.77922 -0.0936,-0.14162 -0.14047,0.73546 -0.12816,2.409662 0.0155,2.10531 0.0415,2.37964 0.12816,1.37149 0.10681,-1.24188 0.10853,-1.23579 0.12764,0.42013 0.0107,0.92427 -0.0411,1.73441 -0.11473,1.80041 -0.20225,0.1813 -0.31652,2.58511 -0.13591,2.85822 0.16401,0.24805 0.19476,1.6835 0.0879,4.104145 -0.035,0.792181 -0.013,1.926426 0.0485,2.520775 0.10663,1.019821 0.11306,0.999718 0.10907,-0.360182 -0.006,-2.355041 0.0179,-2.753938 0.15502,-2.546099 0.0718,0.108619 0.21825,-0.06148 0.32557,-0.377759 0.16531,-0.48752 0.15123,-0.65344 -0.0936,-1.0914 -0.15883,-0.28428 -0.26837,-0.551 -0.24286,-0.5917 0.0255,-0.041 -0.003,-0.38885 -0.063,-0.77308 -0.0677,-0.43199 -0.0433,-0.75256 0.0641,-0.84026 0.0957,-0.0777 0.17362,-0.44719 0.17362,-0.82062 1.8e-4,-0.43313 0.0747,-0.60869 0.20619,-0.48524 0.27014,0.25368 0.42944,-0.42149 0.41394,-1.75545 -0.007,-0.59156 0.0903,-1.45792 0.21548,-1.92546 0.13896,-0.51897 0.18375,-1.09672 0.11525,-1.48312 -0.0617,-0.348152 -0.11914,-0.875982 -0.12713,-1.172522 -0.008,-0.29666 -0.11319,-0.54484 -0.23461,-0.54984 -0.14163,-0.007 -0.20757,-0.30536 -0.18396,-0.83457 0.0203,-0.45341 -0.0338,-1.14839 -0.12042,-1.5441 -0.11189,-0.5128 -0.11128,-0.85512 0.003,-1.19114 0.0877,-0.25941 0.13668,-0.69471 0.108,-0.96738 -0.0285,-0.2722 -0.0291,-0.40724 -5.3e-4,-0.29972 0.025,0.0947 0.29102,0.10153 0.61341,0.03 0.0405,0.52236 0.0906,1.04394 0.0915,1.57561 -0.0608,0.60189 -0.078,1.11737 -0.0465,1.74821 0.0696,0.63278 0.297,1.09496 0.0998,1.78077 -0.058,0.73385 0.0101,1.474622 0.002,2.207102 -0.0197,0.81022 0.0418,1.60891 0.004,2.4262 -0.0875,0.63698 -0.0763,1.43498 -0.22429,1.9482 0.12394,0.22305 0.34293,0.21881 0.24702,0.84078 -0.0607,1.1452 -0.0473,2.30122 -0.0796,3.45147 0.0458,0.825198 -0.0683,1.62066 -0.093,2.435508 0.0204,1.1895 -0.1012,2.349915 -0.17311,3.516066 -0.0662,0.696058 -0.0537,1.411333 -0.0966,2.110981 -0.0148,0.25309 -0.0926,0.598914 0.0625,0.599964 0.29631,0.0457 0.33951,0.87489 0.30128,1.493449 -0.10774,0.477189 0.0255,1.113514 0.0103,1.577165 l 0.14004,-0.146246 c 0.0399,-0.520959 0.0745,-1.044482 0.11576,-1.564762 0.18883,-2.023379 0.28009,-4.091098 0.39534,-6.147427 0.0855,-1.171151 0.0493,-2.370113 0.13795,-3.538798 -0.0101,-0.73951 0.0498,-1.47317 0.032,-2.21279 0.0113,-0.74373 0.0533,-1.47966 0.0351,-2.2226 0.0413,-0.71668 -0.0126,-1.40059 -0.001,-2.13166 0.0365,-0.74313 0.0171,-1.48879 -0.0109,-2.22673 0.07,-0.4474 -0.0966,-1.347812 0.0646,-1.455202 -0.015,0.783202 0.13674,0.20012 0.1297,-0.24288 -0.002,-0.28913 -0.0311,-1.39426 -0.15089,-0.66404 0.14613,0.14266 -0.0403,0.66546 -0.10491,0.6289 0.1066,-0.45472 0.0111,-0.96117 0.0522,-1.43971 0.15606,-0.65158 0.0842,-1.40153 -0.077,-1.97559 -0.0905,-0.69785 -0.11025,-1.42475 -0.13901,-2.14043 -0.009,-0.18957 -0.0222,-0.37781 -0.0341,-0.56689 0.11245,-0.13013 0.17013,-0.29776 0.18757,-0.5209 0.007,-0.0868 0.009,-0.16965 0.008,-0.24495 h -5.3e-4 c -0.004,-0.22592 -0.0414,-0.3855 -0.0992,-0.3855 -0.0459,-2e-5 -0.11597,-0.18397 -0.18653,-0.44959 -10e-4,-0.0362 -0.004,-0.0729 -0.005,-0.10904 0.003,-0.57553 -0.0511,-1.12705 -0.10387,-1.6769 h -0.001 l -0.26149,0.19689 c -0.0296,-0.0724 -0.0569,-0.12196 -0.0775,-0.12196 -0.0711,-7e-5 -0.12922,-0.17164 -0.12916,-0.38137 0,-0.20968 0.0663,-0.28087 0.14726,-0.15864 0.0809,0.12226 0.14724,-0.0209 0.14727,-0.31781 0,-0.29713 -0.0637,-0.63588 -0.14108,-0.75293 -0.0774,-0.11702 -0.10347,-0.45026 -0.0579,-0.74104 0.0516,-0.32953 -0.006,-0.52914 -0.15349,-0.52917 -0.13004,-4e-5 -0.23669,-0.22969 -0.23667,-0.51056 0,-0.28091 -0.044,-0.79366 -0.0982,-1.13947 -0.0672,-0.42852 -0.0441,-0.54555 0.0734,-0.36845 0.11893,0.17979 0.17208,-0.12947 0.17208,-0.99994 3e-5,-1.10695 -0.0466,-1.48805 -0.29919,-1.50223 z", +1.43294, 9.17485, +"M 0.959443 6.24537 c 0.0279,0.9801 -0.25842,1.47623 -0.74413,1.28984 -0.23645,-0.0907 -0.37001,0.038 -0.37035,0.35622 -2e-5,0.27437 -0.14008,0.54597 -0.31215,0.60306 -0.19306,0.0644 -0.23703,0.30013 -0.11526,0.61753 0.10871,0.2823 -0.29212,-0.46774 -0.587,-0.64999 -0.32475,-0.20066 -0.11915,-1.96693 0.24443,-2.10013 0.13238,-0.0485 0.2249,-0.64383 0.20567,-1.32292 -0.0343,-1.21666 -0.0374,-1.22096 -0.22946,-0.30851 -0.15593,0.74072 -0.20203,0.53914 -0.22995,-1.0077 -0.0221,-1.23009 0.0617,-1.87448 0.22995,-1.77043 0.16417,0.10175 0.26459,-0.39427 0.2646,-1.30741 -2e-5,-0.99819 -0.10145,-1.44949 -0.31528,-1.40457 -0.17329,0.0361 -0.36031,-0.1422 -0.41598,-0.39689 -0.0557,-0.25466 0.0262,-0.46301 0.18245,-0.463 h 5.2e-4 c 0.18433,1e-5 0.28421,-0.980298 0.28422,-2.793628 0,-1.79509 0.0946,-2.73543 0.26457,-2.63032 0.15915,0.0988 0.2644,-0.25166 0.26456,-0.87952 -1e-5,-0.92732 0.0806,-1.05844 0.72609,-1.18185 0.97706,-0.18674 1.12602,-0.0503 1.126,1.03409 10e-6,0.63956 -0.0957,0.86695 -0.30949,0.73485 -0.49107,-2.81613 -0.76298,7.511348 -0.16401,13.581278 z", +0.865975, 16.9234, +"M 0.579895 11.5198 c 0.0168,1.80783 -0.15617,2.72296 -0.4497,2.37916 -0.14289,-0.1673 -0.22361,0.0701 -0.22381,0.65706 -10e-6,0.50609 -0.0846,1.00706 -0.18865,1.11237 -0.11667,0.11879 -0.14325,0.5536 -0.0697,1.13906 0.0657,0.52071 -0.17654,-0.86277 -0.35474,-1.19894 -0.19626,-0.37012 -0.072,-3.62807 0.14772,-3.87377 0.08,-0.0895 0.13591,-1.18757 0.12429,-2.44017 -0.0208,-2.24418 -0.0226,-2.25211 -0.13867,-0.56906 -0.0942,1.36629 -0.1221,0.99446 -0.13897,-1.85874 -0.0133,-2.26895 0.0373,-3.45755 0.13897,-3.26563 0.0992,0.18768 0.1599,-0.72725 0.15991,-2.41157 -10e-6,-1.8412 -0.0613,-2.67364 -0.19055,-2.59078 -0.10472,0.0666 -0.21773,-0.26229 -0.25139,-0.73208 -0.0337,-0.46973 0.0158,-0.85404 0.11023,-0.85402 h 3.2e-4 c 0.11135,2e-5 0.17176,-1.8082 0.17176,-5.15295 0,-3.31112 0.0571,-5.04561 0.1599,-4.85173 0.0962,0.18224 0.15978,-0.4642 0.15987,-1.62232 0,-1.71048 0.0487,-1.95233 0.4388,-2.17997 0.59049,-0.34444 0.6805,-0.0928 0.68049,1.90742 10e-6,1.17971 -0.0578,1.59914 -0.18703,1.35547 -0.29677,-5.19447 -0.46111,13.85497 -0.0991,25.05119 z", +0.920438, 15.73, +"M 0.600428 -15.73 -0.20928,0.13642 c 0.0116,0.10797 -0.008,0.20908 -0.10025,0.29611 -0.24135,0.42805 0.0459,1.00331 -0.24961,1.42213 0.2354,0.42752 0.12838,0.94985 0.13438,1.42472 0.10674,0.60433 -0.83865,0.28316 -0.87696,0.59066 0.2572,0.43226 -0.0173,0.8381 -0.0377,1.27641 0.21408,0.45321 -0.16298,0.88129 0.0558,1.32705 -0.23974,0.30068 0.19899,0.60454 -0.0589,0.92553 -0.006,0.92527 -0.0266,1.85081 -0.0517,2.77606 0.0152,0.4801 -0.0752,1.02655 0.1478,1.45779 -0.25858,-0.0769 -0.30935,0.24479 -0.16174,0.47594 -0.075,0.46382 0.1289,0.91188 -0.016,1.36787 -0.0107,1.507429 0.0413,3.015669 0.10387,4.521689 0.1733,0.47524 0.0581,0.99741 0.19534,1.44487 -0.36306,0.3697 -0.20534,0.96671 -0.25064,1.43919 -0.0318,0.49346 0.11663,1.03192 -0.0951,1.49087 0.14563,0.84649 0.0783,1.712415 0.1111,2.567805 -0.0665,0.45222 0.24575,0.922311 -0.0563,1.326021 -0.16113,0.30199 -0.14399,0.87954 0.10178,1.04644 -0.008,0.50476 0.33634,0.95241 0.1287,1.45211 0.19711,0.12306 0.23505,0.16337 0.093,0.39998 -0.25935,0.34252 0.27749,0.87321 -0.10438,1.09347 -0.51512,0.10675 0.14734,0.092 0.17105,0.3359 -0.11327,0.32055 -0.0946,1.20549 0.39066,0.72502 0.77099,0.005 -0.24847,-0.55676 0.12041,-0.89814 0.0876,-0.7571 0.0667,-1.52622 0.0171,-2.28565 -0.17201,-0.6034 -0.11922,-1.24776 -0.0837,-1.86965 0.24858,-0.51407 -0.0498,-1.029341 0.016,-1.553911 -0.006,-0.45575 0.10213,-0.879465 -0.0367,-1.321375 -0.0154,-0.45173 -0.18732,-0.86783 0.13748,-1.26039 0.17298,-0.38763 0.16687,0.10802 0.19378,0.28939 0.13417,0.39563 0.14967,0.90483 0.22738,1.25987 0.1107,-0.96718 0.0622,-1.94664 0.0801,-2.9192 0.0259,-4.03603 -0.0233,-8.072429 0.0181,-12.108299 0.23979,-0.22266 0.005,0.79598 0.22736,0.78083 0.0587,-0.30736 0.032,-0.62753 0.03,-0.93948 0,-0.1962 -0.0468,-0.69798 -0.0713,-0.75137 -0.0348,0.24268 0.0825,0.63699 -0.16899,0.74 -0.058,-0.72244 -0.0291,-1.46041 -0.0476,-2.18901 -0.006,-2.09788 -0.0295,-4.19582 -0.0243,-6.29367 z", +1.1248, 15.7337, +"M 0.154165 -15.7331 c -0.024,0.006 -0.0442,0.058 -0.0594,0.16072 -0.0119,0.0804 -0.0224,0.198 -0.032,0.33693 -0.18859,0.42108 0.0568,0.96324 -0.22582,1.36374 0.2354,0.42752 0.12835,0.94985 0.13436,1.42472 0.10673,0.60433 -0.83863,0.28316 -0.87694,0.59066 0.2572,0.43226 -0.0173,0.8381 -0.0377,1.27641 0.21408,0.45321 -0.16298,0.88129 0.0558,1.32705 -0.23974,0.30068 0.199,0.60453 -0.0589,0.92553 -0.006,0.92527 -0.0266,1.8508 -0.0517,2.77605 0.0152,0.4801 -0.0752,1.02656 0.14777,1.4578 -0.25857,-0.0769 -0.30935,0.24479 -0.16174,0.47594 -0.075,0.46382 0.12888,0.91188 -0.016,1.36787 -0.0107,1.507433 0.0413,3.015673 0.10384,4.521693 0.17331,0.47524 0.0581,0.99741 0.19535,1.44487 -0.36307,0.3697 -0.20532,0.96671 -0.25062,1.43919 -0.0318,0.49346 0.11663,1.03192 -0.0951,1.49086 0.14563,0.84649 0.0783,1.71241 0.1111,2.5678 -0.0665,0.45222 0.24572,0.9223 -0.0563,1.32601 -0.16113,0.30199 -0.14396,0.87955 0.10181,1.04645 -0.008,0.50476 0.33631,0.95241 0.12867,1.45211 0.19711,0.12306 0.23508,0.16336 0.093,0.39998 -0.25935,0.34252 0.27746,0.87321 -0.10441,1.09347 -0.51512,0.10675 0.14735,0.092 0.17105,0.3359 -0.11326,0.32055 -0.0946,1.20548 0.39069,0.72501 0.77099,0.005 -0.24847,-0.55675 0.12041,-0.89813 0.0876,-0.7571 0.0666,-1.52622 0.017,-2.28565 -0.17201,-0.6034 -0.11922,-1.24776 -0.0837,-1.86965 0.24857,-0.51407 -0.0498,-1.02934 0.016,-1.55391 -0.006,-0.45575 0.10213,-0.87945 -0.0367,-1.32136 -0.0154,-0.45173 -0.18735,-0.86783 0.13745,-1.26039 0.17299,-0.38763 0.16688,0.10802 0.19378,0.28939 0.13417,0.39563 0.14968,0.90483 0.22739,1.25987 0.1107,-0.96718 0.0622,-1.94664 0.0801,-2.9192 0.006,-0.9718 0.007,-1.94324 0.007,-2.91507 0.0104,0.0106 0.0205,0.0219 0.0315,0.031 0.27921,0.23143 0.31816,-0.0277 0.16589,-1.11104 -0.17018,-1.20977 -0.16534,-1.42171 0.0331,-1.43661 0.12761,-0.0166 0.23202,0.66842 0.23202,1.51361 0,0.84503 0.0583,1.14304 0.12972,0.65991 0.14145,-0.95658 0.0967,-13.710923 0.0274,-13.242613 -0.0693,0.46832 -0.28163,-0.48851 -0.47181,-2.12545 -0.062,-0.53393 -0.12687,-0.97738 -0.18965,-1.3286 -1.9e-4,-0.26869 -0.003,-0.53746 -0.002,-0.80616 l -0.16123,0.10542 c -0.0298,-0.0783 -0.0571,-0.11812 -0.0806,-0.11213 z", +1.19528, 10.0475, +"M 0.114948 -10.0474 -0.50148,0.14618 c 0.0736,0.18661 0.16739,0.36967 0.261,0.54185 -0.0538,0.4307 0.22483,0.82056 0.0968,1.2648 -0.0525,0.36807 -0.1816,0.11366 -0.21076,-0.0961 -0.007,-0.23246 -0.37153,-0.97536 -0.51525,-0.43993 -0.11169,0.66702 0.20719,1.30602 0.21001,1.96991 -0.10058,0.38477 -0.12871,0.71438 -0.0766,1.11766 0.11511,0.40452 0.49088,0.70014 0.16472,1.13856 -0.0959,0.46912 0.0158,0.94258 0.003,1.41083 -0.0326,0.51795 0.0689,1.02842 0.006,1.55089 -0.14471,0.4072 -0.12605,0.91736 -0.37066,1.24545 0.20492,0.14259 0.56731,0.13997 0.4087,0.53758 -0.10038,0.73209 -0.0783,1.47103 -0.13167,2.20635 0.0757,0.52752 -0.1133,1.03601 -0.15412,1.55692 0.0337,0.76041 -0.16675,1.50234 -0.28566,2.24782 -0.1094,0.44497 -0.0894,0.90202 -0.16034,1.34929 -0.0245,0.16179 -0.1532,0.38291 0.10343,0.38358 0.48997,0.0292 0.56196,0.55944 0.49872,0.95487 -0.17814,0.30505 0.0416,0.71193 0.0159,1.00833 l 0.2316,-0.0937 c 0.066,-0.33303 0.12356,-0.66776 0.19171,-1.00036 0.31225,-1.29348 0.46274,-2.61533 0.65329,-3.92988 0.14143,-0.74868 0.0819,-1.51508 0.22844,-2.26219 -0.0167,-0.47274 0.0824,-0.94169 0.053,-1.41451 0.0186,-0.47544 0.0882,-0.94598 0.058,-1.42092 0.0683,-0.45815 -0.0209,-0.89535 -0.002,-1.36269 0.0604,-0.47506 0.0288,-0.95181 -0.0173,-1.42355 0.1158,-0.28601 -0.15986,-0.86145 0.10674,-0.9301 -0.0248,0.50068 0.22634,0.12776 0.21472,-0.15544 -0.004,-0.18483 -0.0516,-0.89113 -0.24975,-0.42432 0.24166,0.0912 -0.0666,0.42542 -0.17345,0.40205 0.17628,-0.29069 0.0179,-0.61457 0.0859,-0.92048 0.25808,-0.41654 0.13936,-0.89587 -0.12721,-1.26285 -0.14964,-0.44611 -0.18222,-0.91074 -0.22982,-1.36825 -0.0568,-0.4894 -0.17777,-0.9772 -0.21376,-1.45567 0.005,-0.36792 -0.0846,-0.72055 -0.17196,-1.07205 z", +1.30323, 16.4753, +"M 0.0525373 -16.4753 -1.35577,1.84766 c 0.27683,0.42497 0.50698,1.05949 0.54982,1.4889 0.16442,1.33355 -0.31785,2.67593 -0.0632,4.05717 0.89557,1.12078 0.40959,2.34393 0.16413,3.57614 -0.17728,1.24541 0.33502,2.53287 0.6468,3.771819 0.23041,1.45009 0.26088,2.878319 -0.008,4.303319 -0.24439,1.27673 -0.30622,2.48615 0.0291,3.76989 -0.15519,1.31328 -0.52854,2.58989 -0.56215,3.88389 -0.40545,1.32231 0.79113,2.83626 -0.1482,4.10603 -0.48269,0.66505 -0.53542,1.40168 -0.46451,2.14587 l 1.46058,-0.003 c 0.0168,-0.42614 0.0252,-0.85474 0.0677,-1.27432 0.2539,-1.34995 0.14317,-2.66731 0.3672,-4.02616 0.031,-1.4516 0.11297,-2.83964 0.19182,-4.25746 0.12583,-1.2814 -0.13142,-2.63659 0.16191,-3.91395 -0.1099,-1.37381 -0.1194,-2.74933 -0.14373,-4.116199 0.0786,-1.414249 -0.23712,-2.813419 -0.12807,-4.194219 -0.0646,-1.50176 -0.23348,-3.00275 -0.21195,-4.44847 0.788,-0.10067 0.97118,-1.25313 0.22118,-1.50409 0.42751,0.71673 -0.59912,0.75408 -0.39471,0.0445 0.49068,-0.38166 0.47426,-0.5855 0.0196,-0.82701 0.15128,-1.10943 -0.28974,-2.18426 -0.17309,-3.35652 -0.008,-0.38118 -0.13645,-0.71905 -0.22593,-1.07252 z", +3.07777, 16.9417, +"M -0.540315 -15.4793 c -0.24634,0.11349 -1.09658,-1.59624 -1.32736,-1.45407 -0.46023,-0.0191 -0.87738,0.005 -0.4728,0.85065 -0.38438,0.23736 0.33291,1.49353 -0.0462,1.73799 0.11651,0.36917 0.22846,-0.0337 0.42244,7.7e-4 0.15386,0.31092 0.11637,0.69337 0.1657,1.02389 0.34684,0.15366 0.10848,0.64269 0.28358,0.76644 0.41195,-0.0452 0.55085,0.74543 0.0419,0.5194 -0.27864,0.26975 0.19724,0.25988 0.15384,0.53117 0.1548,0.28493 0.18472,-0.0741 0.12234,-0.20191 0.13378,-0.5353 0.43906,0.1542 0.21787,0.35432 -0.44319,-0.0388 -0.0774,0.48499 0.15909,0.23185 0.10925,-0.0917 0.16042,0.22403 0.24283,0.28936 0.16253,0.3502 -0.0983,-0.0308 -0.20977,-0.0917 0.0884,0.0915 -0.32447,0.49774 -0.0756,0.36635 0.504,-0.0226 -0.0992,0.43767 0.20795,0.63982 -0.12496,0.26315 0.26137,0.29982 0.17242,0.57031 0.17152,0.21667 0.0867,0.45418 -0.10428,0.6239 0.17103,0.10816 0.33957,0.15221 0.1982,0.38978 -0.16129,0.25419 0.1763,0.20125 0.0976,0.39005 0.32354,0.0622 -0.0735,0.53313 0.26064,0.44952 0.16282,-0.294 0.37219,0.22828 0.27145,0.4162 -0.47933,0.1604 0.29042,0.60248 -0.0488,0.85553 -0.3968,0.13941 0.16426,0.23706 -0.0494,0.45862 0.28882,0.23742 -0.26764,0.54324 0.13284,0.74483 -0.10693,0.19204 0.083,0.29149 0.17713,0.48105 -0.15407,0.2054 0.003,0.54361 0.2659,0.31837 0.41731,-0.0408 -0.0181,0.41236 -0.166,0.51107 -0.33606,0.19565 -0.0219,0.65064 -0.0739,0.87903 0.16745,0.29274 -0.13216,0.58183 -0.1062,0.84082 0.34137,-0.0301 0.0236,0.11514 0.051,0.28009 0.0409,0.34986 0.13526,0.72795 0.0252,1.04597 0.15197,0.3677 0.14533,0.69256 0.16035,1.08996 -0.036,0.32787 -0.12398,0.67271 -0.0792,1.00699 0.0442,0.35265 -0.0843,0.70567 0.0129,1.05246 -0.16927,0.31514 0.0256,0.61454 -0.0918,0.92499 0.16825,0.22895 -0.33833,0.64208 -0.0292,0.80537 0.15925,-0.0153 0.26898,-0.23555 0.49496,-0.0945 0.26864,0.26814 -0.20509,0.57525 -0.34709,0.79008 -0.22991,0.0506 -0.30996,0.1628 -0.20241,0.38893 -0.17522,0.31665 -0.083,0.71442 -0.19792,1.05749 -0.13603,0.29173 -0.0706,0.64159 -0.18877,0.95263 -0.0571,0.35637 -0.19909,0.70354 -0.20502,1.0641 0.0598,0.35902 -0.37999,0.56428 -0.25411,0.85446 -0.17361,0.0964 -0.0151,0.24287 -0.10293,0.35328 -0.12389,0.31997 -0.23871,0.64343 -0.31422,0.9698 0.37628,0.16039 -0.17227,0.39286 -0.16858,0.63597 0.30078,0.23058 -0.13834,0.45129 -0.031,0.70849 -0.25057,0.0583 -0.25681,0.38137 -0.29542,0.62486 -0.16162,0.27054 -0.36499,0.58731 -0.41785,0.94511 -0.20866,0.32369 -0.2598,0.71855 -0.47571,1.0374 -0.0588,0.22792 -0.45417,0.58871 -0.21593,0.77317 0.17559,0.16477 -0.45739,0.3482 -0.45852,0.6172 -0.19443,0.35075 0.20244,0.16374 0.23716,-0.0487 0.19866,0.0213 -0.14873,0.46087 -0.16338,0.61248 0.061,0.23503 -0.25086,0.084 -0.18389,0.22621 0.0489,0.15635 0.11616,0.29085 0.27212,0.14598 0.22858,-0.16237 0.2946,-0.0576 0.29863,0.10731 l 0.58122,-0.23538 c 0.0821,-0.26109 0.13335,-0.52666 0.32626,-0.73129 0.29731,-0.21914 0.4927,-0.5536 0.42053,-0.90933 0.28474,-0.14849 -0.14372,-0.26041 0.14824,-0.39219 0.0582,-0.25514 0.25636,-0.49292 0.21565,-0.73236 0.20454,-0.25284 0.2954,-0.60737 0.43347,-0.91621 0.15348,-0.36215 0.22129,-0.75885 0.40247,-1.10584 -0.28553,-0.13508 0.0396,-0.0926 0.0685,-0.27653 0.002,-0.34291 0.29517,-0.66136 0.262,-0.97518 -0.081,-0.33699 0.1328,-0.65558 0.15942,-0.96449 0.0684,-0.31442 0.27457,-0.63665 0.23586,-0.96492 0.0625,-0.50054 0.23178,-0.97825 0.42326,-1.44136 0.18554,-0.19438 0.0484,-0.42979 0.14205,-0.62178 0.0484,-0.35206 0.10613,-0.7143 0.13996,-1.07237 -0.0486,-0.32538 0.0402,-0.66028 0.0568,-0.98284 -0.1766,-0.19954 0.22096,-0.45145 -0.005,-0.58272 0.24328,-0.0558 0.0135,-0.13491 -0.0604,-0.28181 0.19276,-0.31297 0.27144,-0.70626 0.22753,-1.05971 -0.0252,-0.37093 0.27933,-0.65074 0.23872,-1.02209 0.13549,-0.19061 0.0276,-0.13206 -0.15026,-0.14387 0.20177,-0.27604 0.0426,-0.68124 0.0698,-1.00127 -0.25174,-0.36563 0.5493,-0.54553 0.3428,-0.81705 -0.25356,-0.23622 0.32006,-0.0315 0.44898,-0.15681 0.26237,0.0525 0.16508,-0.0532 0.004,-0.17008 -0.44135,-0.0992 -0.0848,-0.46999 0.19506,-0.38124 0.28648,0.19195 0.22981,-0.48563 0.0384,-0.17107 0.12844,-0.16201 -0.19188,-0.2907 -0.11936,-0.0706 -0.26147,0.0464 0.31544,-0.3974 0.12276,-0.52606 -0.5222,-0.16455 0.47293,-0.4875 0.0622,-0.80128 -0.15487,-0.35815 -0.30698,0.0345 -0.12834,0.21111 0.11054,0.25141 -0.0432,0.17819 -0.13073,0.002 -0.25855,-0.2018 0.0244,-0.36195 -0.0498,-0.57233 -0.0965,-0.35513 0.12392,-0.0329 0.17524,0.11028 0.25543,0.19264 0.35139,-0.0251 0.16432,-0.22037 -0.004,-0.33007 -0.26981,-0.63496 -0.12873,-0.93904 -0.26093,-0.11267 -0.0552,-0.27303 0.0915,-0.39209 -0.21433,-0.10496 0.0965,-0.35929 -0.11769,-0.54934 -0.25618,-0.32729 0.28716,-0.15825 0.25115,-0.39389 0.11279,-0.26574 -0.36057,-0.39294 -0.28675,-0.7419 0.005,-0.33252 -0.16188,-0.73649 0.0676,-0.99258 -0.30161,0.0812 -0.28705,-0.41089 -0.53868,-0.52123 -0.15675,0.11505 -0.4179,0.16922 -0.34564,-0.13387 0.14195,-0.3866 0.5009,0.36188 0.45085,-0.0604 0.23245,-0.0749 0.17085,-0.38571 -0.1051,-0.20675 -0.4024,0.21999 -0.32985,-0.45314 -0.03,-0.54873 0.23973,-0.30604 -0.0514,-0.68237 0.0219,-1.00559 -0.25351,0.14792 -0.18752,-0.10625 -0.0293,-0.19294 -0.17696,-0.18581 0.13556,-0.36147 -0.0298,-0.49713 0.0619,-0.35137 -0.28931,-0.20494 -0.41784,0.002 -0.25619,0.36645 -0.46783,-0.021 -0.55009,-0.28332 -0.23712,-0.21349 0.077,-0.44237 -0.0703,-0.63757 -0.0231,-0.364 -0.38759,-0.5027 -0.41947,-0.85291 -0.40308,-0.16283 -0.33097,-0.5917 -0.39057,-0.93046 0.066,-0.25081 0.0521,-0.49286 -0.16035,-0.69864 -0.0175,-0.32952 -0.20434,-0.65743 -0.31229,-0.96069 -0.27709,-0.23307 -0.26297,-0.67784 -0.45519,-0.90665 z", +1.20026, 9.02829, +"M -0.647852 8.69897 c 0.27123,0.89699 0.28293,-0.25188 1.17294,-0.91121 -0.019,-0.45337 -0.0333,-0.90699 -0.0667,-1.35961 -0.16717,-0.71424 -0.26623,-1.42486 -0.18603,-2.16524 -0.35177,-0.76585 0.25336,-1.53555 -0.20672,-2.29857 -0.0243,-0.66796 0.56421,-1.8924 0.64041,-2.52784 -0.36439,-0.62391 0.76929,-1.52704 0.43002,-2.6141 -0.11243,0.31694 -0.2569,0.21823 -0.27552,0.42189 -0.0451,0.49293 -0.42354,0.81201 -0.47179,0.95559 -0.21656,-0.23971 -0.88287,-1.05873 -0.93376,-1.99936 0.0638,-0.699 0.36156,-1.33045 0.25064,-2.05931 0.12634,-0.5642 -0.3497,-1.6984 0.4775,-1.78749 0.75422,-0.1124 -8e-5,-0.99299 -0.28784,-0.42271 -0.71152,-0.0264 0.003,-0.62728 -0.27184,-0.94723 -0.76967,-0.14096 -0.83801,0.98907 -0.55758,1.51309 0.38695,0.50259 0.21479,1.05455 -0.26614,1.39216 0.0501,0.97361 0.11051,1.94686 0.15451,2.92075 0.0822,1.46354 0,2.94343 0.2372,4.39147 0.007,0.81629 0.20886,1.59379 0.30335,2.39622 0.37107,0.77953 -0.48689,1.40959 -0.29922,2.23398 0.25837,0.71917 0.26924,1.49082 0.23463,2.2629 0.0409,0.22802 -0.003,0.42297 -0.078,0.60462 z", +1.28909, 16.4888, +"M -0.601805 -16.4887 c -0.64066,0.01 -0.68406,1.0337 -0.42117,1.52497 0.38696,0.50259 0.21482,1.05455 -0.26611,1.39216 0.0501,0.97361 0.11051,1.94686 0.15451,2.92075 0.0822,1.46354 -2e-5,2.94343 0.23718,4.39147 0.007,0.81629 0.20886,1.5938 0.30334,2.39623 0.37108,0.77953 -0.48686,1.40959 -0.29919,2.23397 0.25837,0.71917 0.26921,1.49084 0.23461,2.26291 0.0409,0.22802 -0.003,0.42297 -0.078,0.60462 0.2036,0.67334 0.26077,0.19399 0.65318,-0.36587 0.0969,0.52347 -0.0537,1.09567 -0.19016,1.50792 0.0168,0.88995 0.65551,0.74475 0.31729,1.64124 -0.0177,0.60701 -0.0656,1.18107 -0.18346,1.53996 0.25987,0.69342 -0.0198,1.56597 -0.17106,2.204 0.0508,0.45325 0.55251,1.01924 0.18243,1.5999 -0.21179,0.38644 0.0962,0.7179 0.22789,0.6749 0.10991,0.92985 -0.3225,-0.36708 -0.2527,0.61391 0.31975,-0.39811 0.20545,1.13303 0.061,1.51257 -0.1973,0.59553 0.0532,1.92311 -0.32557,1.88361 -0.17997,0.49675 0.006,0.49018 0.12301,0.36483 0.33612,0.4428 0.44119,1.18723 0.49659,2.04277 0.35883,0.26987 0.25639,-1.31676 0.30748,-1.8836 0.23582,-0.55477 -0.0262,-1.73369 0.22997,-2.05673 0.17235,-0.37447 0.2776,-0.92052 0.4041,-1.32911 0.0863,-0.79196 -0.53517,-1.19078 -0.13745,-1.73065 0.23614,0.1059 0.15208,-0.41602 0.14108,-0.81338 -0.096,-0.43366 0.0207,-0.65455 0.1421,-0.69195 l -0.0377,-1.03611 c -0.11308,0.12238 -0.18047,0.14259 -0.0718,-0.41652 0.0189,-0.52013 -0.27541,-0.60437 -0.0723,-1.15703 -0.14343,-0.6791 -0.24172,-1.29806 -0.2718,-2.10478 -0.0691,-0.7367 -0.28104,-1.22923 -0.22945,-1.98438 -0.19344,-0.65924 0.37674,-0.26839 0.13023,-1.00149 -0.20709,-0.36744 0.15814,-0.68667 -0.0765,-0.90382 0.23915,-0.85322 -0.17302,-1.75788 0.092,-2.56418 h 5e-4 c 0.18233,-0.97684 -0.41499,-1.56326 -0.47749,-2.1239 -0.0678,0.0482 -0.15229,0.007 -0.23513,-0.0357 -0.0187,-0.0404 -0.0387,-0.0806 -0.063,-0.12092 -0.0243,-0.66796 0.56457,-1.89257 0.64077,-2.52801 -0.36438,-0.62391 0.76922,-1.52674 0.42995,-2.6138 -0.11242,0.31694 -0.25681,0.21802 -0.27543,0.42168 -0.0451,0.49293 -0.42355,0.81192 -0.47181,0.9555 -0.21656,-0.23971 -0.88289,-1.05873 -0.93379,-1.99936 0.0638,-0.699 0.36155,-1.33045 0.25064,-2.05931 0.12634,-0.5642 -0.3497,-1.6984 0.47749,-1.78748 0.75422,-0.1124 -8e-5,-0.993 -0.28784,-0.42272 -0.71152,-0.0264 0.003,-0.62728 -0.27183,-0.94723 -0.0481,-0.009 -0.0937,-0.0125 -0.13642,-0.0119 z", +0.891012, 10.9638, +"M 0.353692 -8.74076 c -0.26499,0.8063 0.14695,1.71094 -0.0922,2.56416 0.23462,0.21715 -0.13037,0.53651 0.0767,0.90395 0.24652,0.7331 -0.32371,0.3421 -0.13029,1.00134 -0.0516,0.75515 0.16007,1.24804 0.22912,1.98474 0.0301,0.80672 0.12886,1.42571 0.27229,2.10481 -0.20308,0.55266 0.0911,0.63666 0.0722,1.1568 -0.10866,0.55911 -0.0412,0.53899 0.0719,0.4166 l 0.0376,1.03625 c -0.12144,0.0374 -0.23824,0.25801 -0.14224,0.69167 0.011,0.39736 0.0951,0.91925 -0.14103,0.81335 -0.39773,0.53987 0.224,0.93857 0.13772,1.73053 -0.12651,0.40859 -0.23189,0.95495 -0.40425,1.32942 -0.25615,0.32304 0.006,1.5018 -0.22982,2.05657 -0.0511,0.56684 0.0512,2.15362 -0.30762,1.88375 -0.0554,-0.85554 -0.16078,-1.60008 -0.49692,-2.04288 -0.11732,0.12535 -0.30284,0.13188 -0.12285,-0.36487 0.37871,0.0395 0.12845,-1.28817 0.32574,-1.8837 0.14445,-0.37954 0.25865,-1.91074 -0.0611,-1.51263 -0.0698,-0.98099 0.36247,0.31593 0.25256,-0.61392 -0.13168,0.043 -0.43956,-0.28828 -0.22776,-0.67472 0.37007,-0.58066 -0.13156,-1.14676 -0.18233,-1.60001 0.15123,-0.63803 0.43113,-1.51051 0.17126,-2.20393 0.11781,-0.35889 0.16536,-0.93265 0.18299,-1.53966 0.33822,-0.89649 -0.30017,-0.75144 -0.31703,-1.64139 0.16345,-0.49382 0.35255,-1.21826 0.1047,-1.81199 -0.36685,-0.1049 0.17326,-0.62553 0.0859,-1.18473 0.11267,-0.55844 0.1666,-0.62712 -0.10721,-0.68 0.21516,-0.68305 -0.17153,-1.14907 -0.0833,-1.906 0.13977,-0.58259 0.0436,-0.99951 -0.009,-1.65408 -0.0315,-1.04621 0.34527,-0.33266 0.55695,-0.48326 0.0625,0.56064 0.66002,1.14699 0.47769,2.12383 z", +1.40858, 15.4784, +"M -0.215316 -14.2449 c -0.0573,-0.39663 -0.09,-0.9845 -0.25167,-1.23351 l -0.008,0.0889 c -0.008,0.51419 -0.0135,1.82829 -0.0164,3.62614 -0.16272,-0.0566 -0.15885,-0.0396 -0.42542,-0.0862 0.12658,0.42973 0.13679,0.99178 0.0761,0.91046 0.003,0.20217 -0.0381,0.38449 -0.14261,0.45011 0.57288,0.0852 0.23548,1.11425 -0.31834,1.01699 -0.14563,0.51493 0.25241,1.08423 -0.0393,1.56063 0.18624,0.45092 0.31719,0.8511 0.0863,1.32291 0.24339,0.56784 0.14216,1.21654 0.18034,1.82315 0.0321,0.60964 -0.054,1.23667 0.0951,1.83296 0.21513,0.29947 -0.39592,0.30966 -0.11316,0.67903 0.039,0.74934 0.21058,1.48397 0.17309,2.23759 0.0111,0.43606 0.0354,1.12083 -0.22064,1.29139 0.64397,0.51467 -0.3131,0.91939 -0.18915,1.4857 0.0477,0.49886 0.30321,1.02072 0.0956,1.48415 -0.0396,0.59756 -0.0501,1.20341 0.21238,1.72341 0.0946,0.62128 -0.0948,1.21611 -0.0119,1.84536 -0.0453,0.5497 0.30977,1.1923 -0.0543,1.66451 -0.19063,0.44184 -8e-5,0.91834 -0.19378,1.33842 -0.0311,0.51712 -0.0706,1.05695 -0.0429,1.57355 -0.0493,0.5227 -0.0706,1.05957 -0.003,1.58026 0.079,0.51085 0.0409,0.93086 -0.0816,1.42059 0.0312,0.0244 0.0439,0.0591 0.0692,0.0868 l 1.44333,-3.35947 c -0.0392,-0.12325 -0.10192,-0.24343 -0.21964,-0.35295 -0.0919,-0.54896 0.15828,-1.13571 0.29766,-1.60611 -0.0725,-0.11045 -0.11144,-0.22339 -0.13435,-0.33744 l 1.00769,-1.16841 c -2.7e-4,-0.0874 0.0233,-0.25803 -0.051,-0.4113 -0.0574,-0.11829 -0.21368,-0.21272 -0.23231,-0.33456 -0.0501,-0.32747 0.096,-0.64257 0.0949,-1.07853 0,-0.22596 -0.12986,-0.49448 -0.12229,-0.73317 0.0391,-1.23285 0.2989,-2.52798 0.29792,-3.1837 0.0119,-0.61935 -0.007,-12.50878 -0.007,-13.10462 0.0514,-0.4966 -0.0418,0.0395 0.1633,-0.14005 0.0463,0.3542 0.0498,-0.47899 0.0491,-0.11317 0.0143,-1.07594 -0.0857,-2.58572 -0.28713,-2.87271 -0.1198,-0.17068 -0.28631,0.41503 -0.45638,0.89253 -0.0151,-0.0313 -0.61574,-1.82898 -0.72041,-1.81959 z m 0.94094,4.32328 c -0.007,2.38506 -0.13253,2.52318 -0.13645,1.38389 -0.004,-0.49656 -0.0196,-0.97179 0.13645,-1.38389 z m -0.7084,1.35338 c 0,7e-5 0,-9e-5 0.003,0 0.0662,0.009 0.17023,0.0887 0.1819,0.15865 0.008,0.0466 -0.0254,0.0889 -0.13798,0.10335 -0.0214,-0.0326 -0.0326,-0.0554 -0.0465,-0.0811 2.1e-4,-0.0603 0,-0.12059 0,-0.18087 z m 0.48411,-0.0599 c 0.0272,0.008 0.063,0.0884 0.0682,0.18345 0.003,0.0634 -0.007,0.13334 -0.0419,0.19224 -0.0347,-0.0107 -0.0299,-0.0884 -0.0419,-0.12299 -0.0298,-0.19578 -0.0116,-0.2606 0.0156,-0.2527 z m -0.55491,2.5006 c 0.0892,0.006 0.19317,0.0297 0.24858,0.0346 0.11311,-0.0172 0.16436,0.0169 0.17415,0.0708 0.003,0.0101 0.003,0.0207 0,0.032 -0.0114,0.14338 -0.23088,0.36319 -0.37465,0.25063 -0.0662,-0.13041 -0.10052,-0.25938 -0.1106,-0.38706 0.0193,-0.001 0.0391,-0.002 0.0615,-0.001 z m 0.13229,1.002 c 0.0214,-0.01 0.0347,0.0183 0.0383,0.0615 0.007,0.0865 -0.0249,0.23269 -0.11009,0.25321 -0.0212,-0.0395 -0.0345,-0.10075 -0.014,-0.14831 0.0356,-0.10904 0.0645,-0.15666 0.0858,-0.1664 z m 0,0.52504 c 0.006,-0.002 0.0143,2.2e-4 0.0233,0.005 0.036,0.0197 0.0874,0.0851 0.0889,0.12505 0,0.0264 -0.0206,0.0421 -0.0842,0.0248 -0.0461,-0.10744 -0.046,-0.14933 -0.0279,-0.15502 z m 0.0201,4.1553 v 0 c 0.0656,-0.0183 0.009,0.15149 0.0156,0.29559 0.0532,0.0409 0.0778,0.0874 0.0837,0.13229 0.003,0.0122 0.003,0.0243 0,0.0362 -0.0151,0.17868 -0.30001,0.30917 -0.21085,-0.0398 -0.005,-0.11149 -0.0596,-0.23076 -0.003,-0.33538 0.056,-0.0558 0.0913,-0.0828 0.11319,-0.0889 z m 1.20973,2.00814 c -0.003,-2.6e-4 -0.005,0.004 -0.007,0.0114 v 0 c -0.008,0.0314 -0.0132,0.12504 0,0.25528 l 0.005,0.0145 0.006,-0.03 c 0.003,-0.0485 0.005,-0.0893 0.005,-0.12299 0.003,-0.0882 -0.003,-0.12732 -0.01,-0.12815 z m -0.0517,0.48576 c -0.007,-0.004 -0.0151,-0.003 -0.0228,0.005 -0.0201,0.0212 -0.0409,0.0895 -0.0594,0.22738 -0.11983,0.55066 -0.2176,3.41162 0.003,3.71346 0.36878,-0.48993 0.18709,-2.28477 0.17984,-2.57762 -0.007,-0.29285 -0.0406,-0.59455 -0.0305,-0.87643 0.0206,-0.16536 -0.0193,-0.46288 -0.0703,-0.49196 z", +1.40858, 15.4784, +"M -0.215316 -14.2449 c -0.0573,-0.39663 -0.09,-0.9845 -0.25167,-1.23351 l -0.008,0.0889 c -0.008,0.51419 -0.0135,1.82828 -0.0164,3.62614 -0.16272,-0.0566 -0.15885,-0.0396 -0.42542,-0.0862 0.12658,0.42973 0.13679,0.99178 0.0761,0.91046 0.003,0.20216 -0.0381,0.38449 -0.14261,0.4501 0.57288,0.0852 0.23548,1.11425 -0.31834,1.017 -0.14563,0.51492 0.25241,1.08422 -0.0393,1.56063 0.18624,0.45092 0.31719,0.8511 0.0863,1.32291 0.24339,0.56784 0.14216,1.21653 0.18034,1.82315 0.0321,0.60964 -0.054,1.23666 0.0951,1.83296 0.21513,0.29947 -0.39592,0.30966 -0.11316,0.67902 0.039,0.74935 0.21058,1.48397 0.17309,2.23759 0.0111,0.43606 0.0354,1.12083 -0.22064,1.2914 0.64397,0.51466 -0.3131,0.91938 -0.18915,1.48569 0.0477,0.49885 0.30321,1.02071 0.0956,1.48415 -0.0396,0.59756 -0.0501,1.20342 0.21238,1.72341 0.0946,0.62127 -0.0948,1.21611 -0.0119,1.84536 -0.0453,0.5497 0.30977,1.19229 -0.0543,1.6645 -0.19063,0.44184 -8e-5,0.91834 -0.19378,1.33842 -0.0311,0.51712 -0.0706,1.05695 -0.0429,1.57355 -0.0493,0.5227 -0.0706,1.05957 -0.003,1.58026 0.079,0.51085 0.0409,0.93086 -0.0816,1.42059 0.0312,0.0244 0.0439,0.0591 0.0692,0.0868 l 1.44333,-3.35948 c -0.0392,-0.12324 -0.10192,-0.24343 -0.21964,-0.35295 -0.0919,-0.54896 0.15828,-1.13571 0.29766,-1.60611 -0.0725,-0.11045 -0.11144,-0.22339 -0.13435,-0.33744 l 1.00769,-1.16841 c -2.7e-4,-0.0874 0.0233,-0.25803 -0.051,-0.4113 -0.0574,-0.11829 -0.21368,-0.21272 -0.23231,-0.33456 -0.0501,-0.32747 0.096,-0.64257 0.0949,-1.07853 0,-0.22595 -0.12986,-0.49447 -0.12229,-0.73317 0.0391,-1.23284 0.2989,-2.52797 0.29792,-3.18369 0.0119,-0.61935 -0.007,-12.50878 -0.007,-13.10462 0.0514,-0.4966 -0.0418,0.0395 0.1633,-0.14005 0.0463,0.3542 0.0498,-0.47899 0.0491,-0.11317 0.0143,-1.07594 -0.0857,-2.58572 -0.28713,-2.87271 -0.1198,-0.17068 -0.28631,0.41503 -0.45638,0.89253 -0.0151,-0.0313 -0.61574,-1.82898 -0.72041,-1.81959 z m 0.94094,4.32327 c -0.007,2.38507 -0.13253,2.52318 -0.13645,1.3839 -0.004,-0.49657 -0.0196,-0.97179 0.13645,-1.3839 z m -0.7084,1.35339 c 0,7e-5 0,-9e-5 0.003,0 0.0662,0.009 0.17023,0.0887 0.1819,0.15865 0.008,0.0466 -0.0254,0.0889 -0.13798,0.10335 -0.0214,-0.0326 -0.0326,-0.0554 -0.0465,-0.0811 2.1e-4,-0.0603 0,-0.12058 0,-0.18087 z m 0.48411,-0.0599 c 0.0272,0.008 0.063,0.0884 0.0682,0.18345 0.003,0.0634 -0.007,0.13333 -0.0419,0.19224 -0.0347,-0.0107 -0.0299,-0.0884 -0.0419,-0.123 -0.0298,-0.19577 -0.0116,-0.26059 0.0156,-0.25269 z m -0.55491,2.5006 c 0.0892,0.006 0.19317,0.0297 0.24858,0.0346 0.11311,-0.0172 0.16436,0.0169 0.17415,0.0708 0.003,0.0101 0.003,0.0207 0,0.032 -0.0114,0.14339 -0.23088,0.36319 -0.37465,0.25063 -0.0662,-0.13041 -0.10052,-0.25937 -0.1106,-0.38705 0.0193,-0.001 0.0391,-0.002 0.0615,-0.001 z m 0.13229,1.002 c 0.0214,-0.01 0.0347,0.0183 0.0383,0.0615 0.007,0.0865 -0.0249,0.23269 -0.11009,0.25321 -0.0212,-0.0395 -0.0345,-0.10075 -0.014,-0.14832 0.0356,-0.10903 0.0645,-0.15665 0.0858,-0.16639 z m 0,0.52504 c 0.006,-0.002 0.0143,2.1e-4 0.0233,0.005 0.036,0.0197 0.0874,0.0851 0.0889,0.12505 0,0.0264 -0.0206,0.0421 -0.0842,0.0248 -0.0461,-0.10744 -0.046,-0.14934 -0.0279,-0.15502 z m 0.0201,4.1553 v 0 c 0.0656,-0.0183 0.009,0.15149 0.0156,0.29558 0.0532,0.0409 0.0778,0.0874 0.0837,0.1323 0.003,0.0122 0.003,0.0243 0,0.0362 -0.0151,0.17868 -0.30001,0.30918 -0.21085,-0.0398 -0.005,-0.1115 -0.0596,-0.23077 -0.003,-0.33539 0.056,-0.0558 0.0913,-0.0828 0.11319,-0.0889 z m 1.20973,2.00814 c -0.003,-2.6e-4 -0.005,0.004 -0.007,0.0114 v 0 c -0.008,0.0314 -0.0132,0.12505 0,0.25528 l 0.005,0.0145 0.006,-0.03 c 0.003,-0.0485 0.005,-0.0893 0.005,-0.12298 0.003,-0.0882 -0.003,-0.12732 -0.01,-0.12816 z m -0.0517,0.48576 c -0.007,-0.004 -0.0151,-0.003 -0.0228,0.005 -0.0201,0.0212 -0.0409,0.0895 -0.0594,0.22737 -0.11983,0.55067 -0.2176,3.41162 0.003,3.71346 0.36878,-0.48992 0.18709,-2.28477 0.17984,-2.57762 -0.007,-0.29285 -0.0406,-0.59455 -0.0305,-0.87643 0.0206,-0.16535 -0.0193,-0.46288 -0.0703,-0.49196 z", +1.19541, 13.7255, +"M -0.876944 -13.7255 0.0201,0.0681 c 0.1772,0.62029 0.2896,1.04659 0.2289,0.96528 0.002,0.20217 -0.038,0.38439 -0.14247,0.45001 0.57288,0.0852 0.23535,1.11439 -0.31847,1.01713 -0.14564,0.51493 0.25248,1.08419 -0.0392,1.56059 0.18623,0.45093 0.31728,0.85144 0.0864,1.32325 0.24339,0.56784 0.14204,1.21638 0.18021,1.82299 0.0321,0.60964 -0.0539,1.23657 0.0952,1.83287 0.21514,0.29946 -0.3963,0.30988 -0.11356,0.67925 0.039,0.74934 0.21098,1.48377 0.17351,2.23739 0.0112,0.43606 0.0353,1.12094 -0.22077,1.2915 0.64399,0.51467 -0.31336,0.91952 -0.1894,1.48583 0.0477,0.49885 0.3035,1.02028 0.0959,1.48372 -0.0396,0.59756 -0.0502,1.20353 0.21231,1.72353 0.0946,0.62128 -0.0949,1.21631 -0.012,1.84556 -0.0453,0.5497 0.30974,1.19243 -0.0543,1.66464 -0.19062,0.44184 9e-5,0.91798 -0.19363,1.33806 -0.0311,0.51712 -0.0704,1.05705 -0.0427,1.57365 -0.0493,0.5227 -0.071,1.05966 -0.003,1.58035 0.079,0.51085 0.041,0.93086 -0.0815,1.42059 0.0312,0.0244 0.0438,0.059 0.0691,0.0867 l 1.4435,-3.35926 c -0.0392,-0.12324 -0.102,-0.24386 -0.21971,-0.35338 -0.0919,-0.54896 0.15862,-1.13534 0.29801,-1.60574 -0.33671,-0.51282 -0.0478,-1.07406 0.0233,-1.5934 0.1794,-0.51138 -0.42493,-0.9927 -0.1319,-1.57117 0.10052,-0.42731 0.34806,-0.7585 0.55653,-1.13598 -0.0485,-0.45487 -0.63618,-0.4481 -0.40805,-0.98503 0.20565,-0.4798 0.19847,-1.00573 0.32411,-1.49994 0.0473,-0.60976 -0.18707,-1.15221 -0.31882,-1.73588 -0.20363,-0.49064 -0.48402,-0.98562 -0.62777,-1.483 -0.0236,-0.51779 0.25969,-0.98172 0.1594,-1.47137 0.1783,-0.63379 0.0603,-1.30668 0.0592,-1.95596 -0.13465,-0.3989 -0.16238,-0.76032 0.0586,-1.11763 -0.46748,-0.37921 0.27905,-0.83492 0.14106,-1.29856 -0.31768,-0.55003 0.008,-1.06122 -0.008,-1.63184 0.006,-0.47253 0.005,-0.94519 0.008,-1.41776 0.24498,-0.23512 0.71548,-0.65116 0.36114,-0.92225 0.73256,-2.2984 0.9711,-1.21193 -0.28683,-2.21043 -0.41602,-0.19937 -0.35419,0.1806 -1.06564,-0.0622 l -0.11675,-0.0402 z", +0.884301, 13.8117, +"M -0.123121 -2.30275 c -0.004,0.0919 -0.0285,0.17097 -0.0723,0.21497 -0.0879,0.0879 -0.15049,-0.0684 -0.13901,-0.34726 0.0127,-0.30824 0.0757,-0.37079 0.1602,-0.15968 0.0382,0.0955 0.0552,0.20005 0.0512,0.29197 z m 1.00562,-4.18682 c -0.0136,0.12449 -0.10434,0.28911 -0.27647,0.53486 -0.23763,0.33924 -0.43417,0.85838 -0.43615,1.15339 -0.002,0.29504 -0.1194,0.71499 -0.26045,0.93329 -0.21074,0.32602 -0.25744,0.29832 -0.26045,-0.15451 -0.002,-0.30319 0.041,-0.60087 0.0961,-0.66146 0.0825,-0.0908 0.27686,-3.75423 0.44804,-8.44444 0.031,-0.84879 0.0508,-0.8709 0.24029,-0.26459 0.11369,0.36381 0.14246,1.9526 0.0641,3.53053 -0.10848,2.18249 -0.061,2.9193 0.19896,3.0799 0.13612,0.0841 0.19963,0.16849 0.18603,0.29303 z m -0.97307,14.8394 c 0,0.28238 -0.11129,0.44439 -0.24753,0.36017 -0.13626,-0.0842 -0.24426,-0.35901 -0.23926,-0.61081 0.005,-0.25181 -0.0503,-1.31485 -0.12247,-2.36263 -0.0894,-1.29767 -0.0341,-1.94495 0.17311,-2.02985 0.21135,-0.0867 0.20302,-0.13124 -0.0269,-0.14574 -0.1819,-0.0114 -0.32231,-0.28855 -0.31212,-0.61597 0.0178,-0.56801 0.029,-0.57121 0.24598,-0.0661 0.15007,0.34917 0.23368,-0.29792 0.24597,-1.90273 0.0102,-1.33752 0.11528,-2.49142 0.23307,-2.56418 0.11788,-0.0728 0.16275,0.57507 0.10025,1.4397 -0.0711,0.98351 -0.0107,1.572 0.16123,1.572 0.54297,0 -0.21133,6.64377 -0.21133,6.92614 z m -0.43305,2.47427 c -0.003,0.0791 -0.0141,0.16582 -0.0315,0.25683 -0.0696,0.36375 -0.17208,0.66146 -0.22789,0.66146 -0.0558,0 -0.10129,-0.29771 -0.10129,-0.66146 0,-0.3638 0.10256,-0.66145 0.2279,-0.66145 0.094,0 0.14338,0.16742 0.1328,0.40462 z m -0.12867,1.68982 c -0.004,0.0919 -0.0285,0.17097 -0.0724,0.21497 -0.0879,0.0879 -0.1505,-0.0684 -0.13901,-0.34726 0.0127,-0.30824 0.0757,-0.37077 0.1602,-0.15968 0.0382,0.0955 0.0552,0.20005 0.0512,0.29197 z m 0,1.05833 c -0.004,0.0919 -0.0285,0.17097 -0.0724,0.21497 -0.0879,0.0879 -0.1505,-0.0684 -0.13901,-0.34726 0.0127,-0.30824 0.0757,-0.37079 0.1602,-0.15968 0.0382,0.0955 0.0552,0.20005 0.0512,0.29197 z", +0.762531, 16.9731, +"M 0.232564 -5.04002 c -0.0256,-0.11674 -0.0255,0.0289 2.6e-4,0.32444 0.0258,0.29532 -0.0179,0.76648 -0.0971,1.0473 -0.1026,0.36391 -0.10352,0.73496 -0.002,1.29023 0.078,0.42853 0.12701,1.18085 0.10877,1.67181 -0.0212,0.57309 0.0381,0.8967 0.16574,0.90407 0.1094,0.006 0.20455,0.27367 0.21158,0.59484 0.007,0.32117 0.0586,0.89271 0.11421,1.26969 0.0618,0.41843 0.0213,1.04432 -0.10385,1.60629 -0.11282,0.50634 -0.20014,1.44467 -0.19397,2.08543 0.014,1.44453 -0.12951,2.17576 -0.37292,1.90107 -0.1185,-0.13368 -0.18543,0.0559 -0.18543,0.52551 0,0.40439 -0.0704,0.80453 -0.15642,0.88886 -0.0967,0.0949 -0.0239,0.44232 0.0371,0.91016 0.0545,0.41609 0.0799,0.79268 0.057,0.83706 -0.0229,0.0444 0.0755,0.33281 0.21858,0.64057 0.22056,0.47431 0.2334,0.65408 0.0844,1.18204 -0.0967,0.34255 -0.22876,0.52665 -0.29342,0.40904 -0.12361,-0.22462 -0.1455,0.20684 -0.13985,2.75717 0.004,1.47266 -0.0968,1.49441 -0.19275,0.38996 -0.0557,-0.64348 -0.0753,-1.8719 -0.0437,-2.72975 0.0963,-2.62133 0.0685,-4.17561 -0.0793,-4.44423 -0.16273,-0.29578 -0.0597,-2.89904 0.12249,-3.09534 0.0663,-0.0715 0.1127,-0.94893 0.10307,-1.94981 -0.0172,-1.79322 -0.0187,-1.79958 -0.11498,-0.45471 -0.0781,1.0917 -0.10126,0.79463 -0.11525,-1.48522 -0.0111,-1.81302 0.0309,-2.76277 0.11525,-2.6094 0.0823,0.14963 0.1326,-0.58109 0.1326,-1.92698 0,-1.47122 -0.0508,-2.13633 -0.15798,-2.07016 -0.0868,0.0537 -0.18056,-0.20961 -0.20847,-0.58495 -0.0279,-0.37534 0.0131,-0.68244 0.0914,-0.68244 h 2.6e-4 c 0.0924,0 0.14244,-1.44486 0.14244,-4.11748 0,-2.64579 0.0474,-4.03168 0.13259,-3.87679 0.0798,0.14518 0.13259,-0.37062 0.13259,-1.29631 0,-1.36676 0.0404,-1.55998 0.36387,-1.7419 0.48964,-0.27527 0.1634,-0.0741 0.1634,1.52406 0,0.94267 -0.048,1.2778 -0.15513,1.08305 -0.10578,-0.19225 -0.12686,-0.065 -0.0663,0.39909 0.0488,0.37448 0.0888,0.92971 0.0888,1.23389 0,0.30416 0.096,0.55297 0.21314,0.55297 0.13289,0 0.18485,0.21576 0.13829,0.57273 -0.0411,0.31487 -0.0177,0.67604 0.0521,0.80278 0.0697,0.12676 0.1269,0.49327 0.1269,0.815 0,0.32153 -0.0597,0.47673 -0.1326,0.34425 -0.0729,-0.1325 -0.1326,-0.055 -0.1326,0.17214 0,0.22706 0.0525,0.41282 0.11654,0.41282 0.0641,0 -0.26373,4.03388 -0.28935,3.91715 z", +0.560077, 8.98122, +"M 0.467182 8.52902 c -0.0714,0.48313 -0.12974,0.18491 -0.12974,-0.66012 0,-0.84519 -0.10442,-1.5299 -0.23204,-1.51334 -0.1984,0.0149 -0.20328,0.22696 -0.0331,1.43673 0.15228,1.08338 0.11346,1.34238 -0.16574,1.11095 -0.29936,-0.24779 -0.36464,-0.99245 -0.36464,-4.15731 0,-2.12029 -0.0357,-5.81576 -0.0795,-8.212422 -0.0467,-2.55505 -0.019,-4.76947 0.0673,-5.35317 0.081,-0.54783 0.30289,0.34342 0.49308,1.9808 0.19018,1.63694 0.4026,2.59378 0.47186,2.12546 0.0693,-0.46831 0.11396,12.285842 -0.0275,13.242422 z", +0.762531, 19.7675, +"M 0.232564 -7.83435 c -0.0256,-0.11674 -0.0255,0.0289 2.6e-4,0.32444 0.0258,0.29532 -0.0179,0.76648 -0.0971,1.0473 -0.1026,0.36391 -0.10352,0.73496 -0.002,1.29023 0.078,0.42853 0.12701,1.18085 0.10877,1.67181 -0.0212,0.57309 0.0381,0.8967 0.16574,0.90407 0.1094,0.006 0.20455,0.27367 0.21158,0.59484 0.007,0.32117 0.0586,0.89271 0.11421,1.26969 0.0618,0.41843 0.0213,1.04432 -0.10385,1.60629 -0.11282,0.50634 -0.20014,1.44467 -0.19397,2.08543 0.014,1.44453 -0.12951,2.17576 -0.37292,1.90107 -0.1185,-0.13368 -0.18543,0.0559 -0.18543,0.52551 0,0.40439 -0.0704,0.80453 -0.15642,0.88886 -0.0967,0.0949 -0.0239,0.44232 0.0371,0.91016 0.0545,0.41609 0.0799,0.79268 0.057,0.83706 -0.0229,0.0444 0.0755,0.33281 0.21858,0.64057 0.22056,0.47431 0.2334,0.65408 0.0844,1.18204 -0.0967,0.34255 -0.22876,0.52665 -0.29342,0.40904 -0.12361,-0.22462 -0.1455,0.20684 -0.13985,2.75717 0.004,1.47266 -0.0968,1.49441 -0.19275,0.38996 -0.0557,-0.64348 -0.0753,-1.8719 -0.0437,-2.72975 0.0963,-2.62133 0.0685,-4.17561 -0.0793,-4.44423 -0.16273,-0.29578 -0.0597,-2.89904 0.12249,-3.09534 0.0663,-0.0715 0.1127,-0.94893 0.10307,-1.94981 -0.0172,-1.79322 -0.0187,-1.79958 -0.11498,-0.45471 -0.0781,1.0917 -0.10126,0.79463 -0.11525,-1.48522 -0.0111,-1.81302 0.0309,-2.76277 0.11525,-2.6094 0.0823,0.14963 0.1326,-0.58109 0.1326,-1.92698 0,-1.47122 -0.0508,-2.13633 -0.15798,-2.07016 -0.0868,0.0537 -0.18056,-0.20961 -0.20847,-0.58495 -0.0279,-0.37534 0.0131,-0.68244 0.0914,-0.68244 h 2.6e-4 c 0.0924,0 0.14244,-1.44486 0.14244,-4.11748 0,-2.64579 0.0474,-4.03168 0.13259,-3.87679 0.0798,0.14518 0.13259,-0.37062 0.13259,-1.29631 0,-1.36676 0.0404,-1.55998 0.36387,-1.7419 0.48964,-0.27527 0.1634,-0.0741 0.1634,1.52406 0,0.94267 -0.048,1.2778 -0.15513,1.08305 -0.10578,-0.19225 -0.12686,-0.065 -0.0663,0.39909 0.0488,0.37448 0.0888,0.92971 0.0888,1.23389 0,0.30416 0.096,0.55297 0.21314,0.55297 0.13289,0 0.18485,0.21576 0.13829,0.57273 -0.0411,0.31487 -0.0177,0.67604 0.0521,0.80278 0.0697,0.12676 0.1269,0.49327 0.1269,0.815 0,0.32153 -0.0597,0.47673 -0.1326,0.34425 -0.0729,-0.1325 -0.1326,-0.055 -0.1326,0.17214 0,0.22706 0.0525,0.41282 0.11654,0.41282 0.0641,0 -0.26373,4.03388 -0.28935,3.91715 z m 0.0396,27.48027 c -0.0714,0.12985 -0.12974,0.0497 -0.12974,-0.17742 0,-0.22716 -0.10442,-0.41119 -0.23204,-0.40674 -0.1984,0.004 -0.20328,0.061 -0.0331,0.38615 0.15228,0.29118 0.11346,0.36079 -0.16574,0.29859 -0.29936,-0.0666 -0.36464,-0.26674 -0.36464,-1.11736 0,-0.56987 -0.0357,-1.5631 -0.0795,-2.20725 -0.0467,-0.68672 -0.019,-1.28189 0.0673,-1.43877 0.081,-0.14724 0.30289,0.0923 0.49308,0.53238 0.19018,0.43996 0.4026,0.69713 0.47186,0.57126 0.0693,-0.12587 0.11396,3.30206 -0.0275,3.55916 z", +1.269, 19.5416, +"M 0.14825 -19.5416 c -0.32661,0.39468 -0.3994,1.66107 -0.7598,2.04169 -0.41626,0.2009 -0.37637,1.71843 -0.58357,2.35306 0.0458,1.94112 -0.13983,3.86046 -0.048,5.80025 0.0294,1.34326 0.10658,2.68769 0.0855,4.03529 -0.0762,1.10649 0.0737,2.4593 -0.0252,3.70953 -0.0204,0.90305 0.056,1.55369 -0.0307,2.40511 0.0317,2.24936 0.21841,4.51036 0.0946,6.75626 -0.0753,1.08892 0.0479,1.9506 0.41334,1.69121 0.43294,0.76903 0.0677,2.22794 -0.0667,3.18578 -0.19001,0.81644 0.11544,1.40278 0.30591,1.39693 -0.0451,-0.42285 -0.28028,-2.17954 0.0281,-1.08788 0.33743,0.48853 -0.12596,2.7085 -0.38629,1.41622 -0.28035,0.0578 0.0439,1.62405 -0.26723,2.03911 -0.13348,0.55093 0.1996,1.81699 0.24795,0.69045 -0.11076,1.53067 0.61772,1.10071 0.51013,2.65016 0.0573,-0.0207 0.22667,-1.00323 0.23225,-1.34788 0.08,-0.9498 0.53243,-2.15075 0.25784,-3.07732 -0.30065,-0.79082 0.41871,-1.52126 0.11979,-2.62364 -0.0371,-0.56266 -0.17904,-1.49854 -0.12697,-0.30689 0.003,0.94503 -0.34219,0.63414 -0.29234,1.70477 -0.30776,-0.58284 0.30053,-2.415 -0.32326,-2.26952 0.11911,-0.39881 0.21227,-1.78449 0.37582,-0.58638 0.38472,0.39819 0.28972,-1.2848 0.30849,-2.1732 0.01,-1.30431 0.11678,-2.2807 -0.0501,-3.51089 -0.22551,-0.80379 0.19385,-2.07867 -0.24626,-2.47433 -0.35322,-0.76698 0.20938,-2.5558 0.24625,-0.9447 0.20473,1.61631 0.33115,-1.44215 -0.0187,-1.00535 -0.20738,-0.73783 0.50146,-0.8757 0.0966,-1.34105 -0.23718,0.80488 -0.81457,0.0175 -0.51184,-1.058 0.23378,-0.45163 0.79437,0.53657 0.57233,-1.14201 -0.13148,-0.58581 -0.34247,-1.16952 -0.45141,-1.63641 0.0722,-0.37607 0.21467,-1.5057 0.37321,-0.66014 0.20019,0.95972 0.14835,-1.38787 0.16689,-1.8434 -0.0266,-0.64918 0.1111,-1.97392 -0.17902,-1.90736 -0.13214,-0.95422 0.003,-2.15651 0.24077,-2.14256 -0.0855,-1.27561 0.30739,-2.14491 0.59873,-1.54848 0.46782,-0.57364 0.0341,-2.11974 -0.0515,-3.1238 -0.0488,-1.29164 -0.35659,-0.91037 -0.47231,-0.43792 -0.20293,-0.6018 -0.22527,-1.26026 -0.1283,-2.00164 -0.13967,-0.42976 -0.33758,0.56271 -0.34577,-0.61191 0.10408,-0.26168 0.33651,-0.79224 0.0907,-1.01316 z", +2.21549, 17.1584, +"M -0.167255 -17.1539 c -0.0167,0.007 -0.0346,0.0209 -0.0528,0.0449 -0.0209,0.0276 -0.0424,0.0677 -0.0625,0.1243 0.29371,0.10775 0.23216,-0.21534 0.1151,-0.1692 z m 0.15604,1.07656 c -0.12396,-5.2e-4 -0.2654,0.0531 -0.37769,0.13732 l -0.001,8.7e-4 c -0.0997,0.0747 -0.17632,0.1734 -0.19745,0.27884 0.47404,0.75848 -0.48688,0.22899 -0.21252,0.89958 -0.0284,1.36166 1.17753,1.85975 0.65585,3.19253 1.11667,0.51287 -0.4379,2.54995 0.4584,2.75912 -0.46709,-0.10692 -0.70481,0.87074 -0.3325,1.21901 0.65675,1.18822 -0.35631,2.59721 0.49336,3.59223 0.1701,0.19469 0.32366,-0.23386 0.45247,-0.34791 0.90751,-0.55526 -0.97382,-0.65062 -0.32228,-1.03339 1.05641,-0.14684 0.66978,-2.07793 0.30667,-2.90072 -0.1278,0.58401 -0.87195,-0.365 -0.2916,-0.99799 0.7704,0.12479 -0.23691,-1.49304 0.37823,-1.11971 0.49922,-0.62397 -0.0865,-0.88636 -0.47023,-1.2518 -0.78012,-0.24 0.39106,-0.72068 -0.12964,-1.48835 0.24984,-0.74186 0.6296,-1.90821 -0.15119,-2.37151 0.10592,-0.41508 -0.0521,-0.5672 -0.25878,-0.56805 z m 1.05236,3.59827 c -0.0745,0.0468 -0.0538,0.51726 0.13983,0.86417 0.1982,0.18937 0.12229,-0.24571 0.0775,-0.36517 -0.0941,-0.39821 -0.17239,-0.52458 -0.21681,-0.499 z m 0.65476,1.56087 c -0.0264,0.005 -0.0484,0.015 -0.0667,0.0327 -0.16138,0.15286 -0.015,0.75465 0.38253,0.79942 0.3019,0.32074 0.22976,-0.59592 0.0327,-0.63453 -0.15403,-0.15771 -0.26966,-0.21053 -0.34864,-0.1977 z m -3.49173,0.28921 c -0.0476,-0.0172 -0.11945,0.0254 -0.18993,0.11043 h -5.4e-4 c -0.11277,0.13632 -0.22294,0.3826 -0.22919,0.67337 0.0586,0.30913 0.29916,0.0322 0.34164,-0.13031 0.16947,-0.43186 0.1572,-0.62497 0.078,-0.65352 z m 3.02689,0.71223 c -0.015,-7.5e-4 -0.0279,0.007 -0.0371,0.019 -0.0354,0.0528 -0.0117,0.20856 0.1415,0.51884 l 0.1146,0.1278 c 0.14585,-0.31772 -0.10424,-0.66014 -0.21896,-0.6656 z m -0.0371,0.019 c 0,0 0,-8.9e-4 0,-8.9e-4 l -0.002,0.002 c 5e-4,-7.5e-4 0.002,-1.6e-4 0.002,-8.8e-4 z m -0.52135,6.72 c -0.3266,0.0409 -0.95395,0.87087 -1.18526,1.33727 -0.16786,-0.13281 -0.29294,-0.12997 -0.38091,-0.0431 -0.26269,0.26077 -0.19142,1.27654 0.0678,1.63511 0.24643,-0.25664 0.56346,-0.67538 0.39223,0.23741 -0.75859,0.63588 -0.69093,1.82753 -0.36102,2.9059 -0.34879,0.52437 -0.0947,1.14594 0.44171,1.23281 0.99104,0.75169 0.10007,2.18367 0.0608,3.29439 0.68087,1.18413 -0.94373,1.30332 -0.72471,2.27914 -0.69212,0.6987 -0.66851,2.92111 0.20443,3.22274 0.75306,0.225 0.20039,0.34297 -0.21036,0.51971 0.26459,0.80376 0.93921,1.0819 1.25036,1.85267 0.31277,1.28598 0.55164,-0.0849 0.42449,-0.65009 -0.66183,-0.70621 0.80496,-1.24759 0.33626,-1.56863 -0.45715,0.66148 -1.18436,-0.24337 -0.46161,-0.78475 0.90308,-0.8666 -0.34499,-1.44013 0.10057,-2.29122 0.46346,-0.31165 0.41583,-1.35705 -0.10541,-1.27598 0.002,0.36914 -0.21848,1.21584 -0.4654,0.52404 0.49413,-0.71096 1.17556,-1.9191 0.56762,-3.05611 -0.85085,-1.57139 0.80183,-0.85373 0.53587,-2.24548 0.19424,-1.25981 -0.31804,-2.6187 -0.11511,-3.72086 0.8693,-1.12613 -0.65975,-1.20057 -0.25986,-2.37756 0.17124,-0.79304 0.0835,-1.05187 -0.11243,-1.02734 z m -1.83464,17.71081 c -0.0134,0.002 -0.0271,0.0117 -0.0393,0.0319 -0.0134,0.0231 -0.0247,0.06 -0.0356,0.11477 0.2771,0.20545 0.1713,-0.16054 0.0748,-0.14684 z m 0.98242,0.93411 c -0.0473,-0.005 -0.0936,0.0117 -0.13065,0.0466 v 8.8e-4 c -0.11527,0.10642 -0.14517,0.38416 0.14585,0.72864 0.0788,0.1577 0.25607,0.25348 0.22974,-0.0665 0.0485,-0.49012 -0.10308,-0.69576 -0.24481,-0.70964 z m -0.40028,1.03683 c -0.0246,0.005 -0.0473,0.0167 -0.0662,0.0354 l -0.002,8.9e-4 c -0.0687,0.068 -0.0867,0.22859 0.0388,0.50935 l 0.14467,0.10876 c 0.31715,-0.40726 0.0558,-0.69018 -0.1156,-0.65438 z", +1.67889, 12.4576, +"M 0.170368 -12.417 c -0.11243,0.0479 -0.25614,0.13683 -0.43964,0.27748 -1.27389,0.78909 -1.21189,2.51347 -0.18945,3.31231 -0.13431,0.55548 -0.36031,1.04129 -0.87302,1.22619 0.20361,1.23934 0.72541,2.15584 0.32094,3.54244 0.008,0.02 0.015,0.0396 0.024,0.0595 -0.27904,1.22039 -1.13252,2.77766 -0.40612,3.53991 0.14735,-0.35853 0.2824,-0.44551 0.41469,-0.40806 -0.0972,0.57648 -0.15854,1.15046 -0.0182,1.72729 -0.06,2.38124 0.71903,4.78601 0.0209,7.13418 0.14601,1.27941 0.088,2.90648 1.11768,4.46334 0.20931,-0.32402 -0.26141,-4.04795 -0.1288,-4.40228 -0.87044,-5.44038 0.51261,-4.61027 0.27264,-7.20329 -0.0762,-1.65323 0.16439,0.11009 -0.0256,-1.53491 0.0358,-0.0631 0.0717,-0.12629 0.10943,-0.208 0.33307,-0.84154 1.06509,-1.4845 1.30907,-2.19339 -0.67902,-0.22846 -0.0546,-1.46994 -1.00086,-1.45768 -0.0423,-0.98007 1.23341,-1.30442 0.84312,-2.52886 -0.10207,-0.60431 -0.005,-1.4265 -0.08,-2.10218 -0.0192,-0.64914 -0.14685,-1.29953 -0.44026,-1.94485 -0.24035,-0.076 -0.43253,-0.0872 -0.58683,-0.0473 -0.003,7.9e-4 -0.007,0.003 -0.01,0.005 0.1136,-0.70342 0.31863,-1.48809 -0.23437,-1.25593 z", +0.606945, 19.5532, +"M 0.535288 -19.101 c -0.12312,-0.64981 -0.32031,-0.73191 -0.52216,0.6492 0.13498,2.03239 -0.19035,3.48484 -0.30626,5.15433 -0.22468,2.50128 -0.19194,5.27546 -0.28382,8.06552 0.14367,2.92828 -0.0892,5.74081 -0.015,8.6394 0.14902,2.95697 -0.015,5.88803 0.0117,8.84688 -0.15971,3.34873 0.87967,3.73489 0.85929,7.01865 -0.015,-0.18654 0.22435,0.61848 0.19054,0.10792 0.3206,-2.15319 -0.0271,-5.6381 0.0215,-8.31354 -0.0332,-2.93964 0.13264,-5.81334 0.0481,-8.77509 0.005,-0.0175 0.005,0.002 0.01,-0.0134 l -10e-4,-1.53853 c -0.0167,-0.17135 -0.0117,-0.39165 -4.9e-4,-0.67826 l -0.007,-8.52476 c -0.0251,-0.17877 -0.0216,-0.38728 -0.0573,-0.55526 -0.008,-0.46963 0.0383,-0.97844 0.056,-1.46172 z", +2.75846, 24.0847, +"M -0.53697 -24.0496 c -0.0684,0.29866 -0.0297,0.66596 0.13574,0.88282 0.0473,-0.31373 0.004,-0.65245 -0.12095,-0.91797 z m 0.36555,2.05274 c -0.1428,0.26785 -0.15703,0.69044 0.006,0.94726 -0.0394,0.35884 -0.44025,0.2613 -0.4462,0.64649 -0.13341,0.55376 -0.0618,1.26397 0.2782,1.6289 0.38647,-0.11637 0.44767,-0.80593 0.38665,-1.27862 -0.042,-0.65364 -0.0767,-1.31482 -0.20924,-1.94599 z m -0.0685,3.66015 c 0.0544,0.007 0.0464,-0.065 0,0 z m 0.13171,0.71485 c 0.0476,-0.0128 0.0369,-0.0718 0,0 z m 0.22847,2.58984 c -0.2894,0.77897 -0.28573,1.72489 -0.63166,2.4668 -0.47716,0.40261 -0.61905,1.44325 -0.27551,2.07422 0.26278,1.07486 -0.0427,2.34757 -0.66794,3.01562 -0.17172,0.2786 -0.0476,0.77973 0.20981,0.82791 0.38219,0.22562 0.82919,-0.30745 0.78616,-0.89087 0.15146,-1.09007 0.68275,-2.05871 0.59978,-3.21392 -0.003,-1.4276 0.18264,-2.88329 -0.0126,-4.29148 z m -0.97436,8.98632 c -0.0867,0.087 0.0488,0.007 0,0 z m -0.15187,0.90625 c -0.52835,0.40878 -0.4693,1.70374 0.0726,2.04297 0.51682,0.6066 0.26815,1.98415 -0.36821,2.19969 -0.32196,0.17741 -0.71983,0.44113 -0.75527,1.00981 -0.0704,0.4972 0.0592,1.03177 0.30905,1.38034 0.22493,0.75424 -0.1245,1.49918 -0.25804,2.21485 -0.161,0.74022 -0.28768,1.49458 -0.42066,2.24609 -0.42887,0.46517 -0.40727,1.40504 -0.13373,2.00508 0.29613,1.28961 0.23854,2.67245 0.42671,3.99298 0.18501,0.44913 0.6129,0.71487 0.60881,1.30273 -0.0974,1.02173 -0.7334,1.84226 -0.61687,2.92188 0.12358,1.36478 0.23492,2.73359 0.422,4.08398 -0.24493,1.20409 -0.0575,2.46873 0.1344,3.6582 0.13244,0.3425 0.51859,0.10392 0.49139,-0.2639 0.55319,-3.33295 0.74881,-6.77676 0.71199,-10.19928 -0.0341,-0.83387 -0.0795,-1.67038 -0.0382,-2.50557 0.0769,-0.26194 0.38773,-0.21698 0.42872,0.0606 0.15576,0.33179 0.55489,0.0325 0.49055,-0.3418 0.06,-0.507 0.13468,-1.1082 0.46904,-1.38867 0.49047,-0.0745 0.76751,0.85571 1.26869,0.67578 0.19449,-0.0457 0.51816,-0.0809 0.52146,-0.46093 -0.0813,-0.81436 -0.69657,-1.24081 -1.21561,-1.19272 -0.33451,-7.4e-4 -0.67174,-0.17488 -0.89675,-0.54267 -0.25083,-0.25457 -0.59572,0.13269 -0.82418,-0.2197 -0.16795,-0.3508 -0.22547,-0.80084 -0.2634,-1.22044 -0.006,-0.32789 -0.0804,-0.74575 0.14222,-0.96155 0.15244,-0.17908 0.31154,-0.47312 0.18536,-0.76146 -0.21856,-0.80287 -0.55515,-1.67299 -0.34299,-2.55633 0.20639,-1.08152 0.37362,-2.21388 0.29836,-3.33932 -0.28596,-1.22431 -0.25129,-2.59774 -0.71303,-3.73317 -0.026,-0.0821 -0.07,-0.13612 -0.1344,-0.10742 z m -0.89104,25.33205 c 0.0499,0.0937 0.0486,9.1e-4 0,0 z", +1.8822, 22.4677, +"M 1.25124 -21.5684 c -0.28418,-2.48971 -0.62962,0.79472 -0.69653,2.55163 -0.0134,0.33593 -0.0346,0.5327 -0.047,0.43714 -0.02,-0.15681 -0.0495,-0.15546 -0.3007,0.0153 -0.15327,0.10424 0.0424,3.35182 -0.0498,3.34843 -0.21601,-0.007 -0.41768,0.37741 -0.36668,0.70163 0.0286,0.18236 0.006,0.24818 -0.0802,0.2448 -0.11908,-0.004 -0.25364,0.43529 -0.18471,0.6037 0.71933,5.30949 -0.84428,1.36714 -0.18964,5.27515 l -0.17336,0.21594 c 0.0917,0.13776 0.14905,0.31886 0.14544,0.60895 -0.002,0.12917 0.013,0.27497 0.0381,0.42665 l -0.0218,0.006 c 0.0168,0.0338 0.0268,0.0634 0.039,0.094 0.0143,0.0729 0.0307,0.14633 0.05,0.22032 0.005,0.11878 -0.013,0.27501 -0.054,0.53201 -0.0541,0.33939 -0.13657,0.63375 -0.18319,0.65397 -0.11671,0.0506 -0.47174,-0.31269 -0.41853,-0.4284 0.0236,-0.0514 -0.008,-0.20294 -0.0696,-0.33617 -0.10666,-0.22943 -0.11316,-0.23096 -0.12398,-0.0315 -0.009,0.17127 -0.0213,0.16013 -0.0663,-0.059 -0.0305,-0.14804 -0.06,-0.19604 -0.0661,-0.10622 -0.005,0.0898 -0.0795,0.23039 -0.16355,0.31212 -0.18138,0.17617 -0.20093,0.37374 -0.046,0.46512 0.061,0.0363 0.11066,0.11279 0.10955,0.17048 -8.5e-4,0.0577 0.0954,0.32276 0.21449,0.58884 0.119,0.26609 0.21567,0.53536 0.21448,0.59889 -8.5e-4,0.0635 0.0919,0.18952 0.20682,0.27978 0.33391,0.262 0.4046,0.46417 0.37893,1.08499 -0.0255,0.61623 0.034,0.7011 0.50815,0.72217 0.35806,0.0162 0.65582,0.76507 0.53973,1.35777 l -0.0519,0.2636 -0.14759,-0.22163 c -0.0812,-0.122 -0.18117,-0.19419 -0.22184,-0.16043 -0.0407,0.034 -0.0928,-0.0143 -0.11598,-0.10711 -0.0668,-0.26845 -0.30372,-0.21195 -0.36208,0.0865 -0.0286,0.14608 -0.10177,0.26395 -0.16293,0.26142 -0.0612,-0.002 -0.11204,0.0439 -0.11323,0.10273 -8.4e-4,0.0588 -0.0557,0.10482 -0.1212,0.10228 -0.0995,-0.003 -0.11067,0.0715 -0.0685,0.45245 0.0278,0.2512 0.0474,0.70532 0.0445,1.00937 -0.005,0.46262 0.0255,0.59462 0.19024,0.8096 0.10822,0.14128 0.21652,0.38557 0.24057,0.54249 0.0239,0.15696 0.10666,0.38658 0.18349,0.51059 0.0826,0.13306 0.13642,0.3788 0.13286,0.59976 -0.005,0.29947 -0.0602,0.43199 -0.27492,0.66315 -0.29456,0.31713 -0.32923,0.45939 -0.16264,0.66709 0.0663,0.0827 0.10722,0.31839 0.10188,0.59277 -0.006,0.36907 0.035,0.51904 0.22,0.79079 0.17112,0.25109 0.20751,0.35709 0.18442,0.59584 l -0.67781,0.21289 c 0.0524,0.58516 -0.0123,0.94307 -0.20099,0.93593 -0.1353,-0.005 -0.20989,0.31179 -0.2378,1.00981 -0.0241,0.60164 -0.11859,0.82734 -0.43141,1.02948 -0.21966,0.14195 -0.22403,0.19455 -0.112,1.34903 0.0368,0.38004 0.68935,2.90966 0.7272,2.97271 0.0949,0.15747 0.0814,0.40225 -0.0366,0.66257 -0.11787,0.2598 -0.13449,0.64857 -0.0423,0.98759 0.0667,0.24519 0.0456,0.44952 -0.0548,0.532 -0.0228,0.0188 -0.0711,0.63594 0.0835,1.35624 0.0409,0.19057 0.50838,1.19206 0.55879,1.39985 0.35151,1.44898 0.46272,2.37383 0.46272,2.37383 0.79566,1.73874 0.72766,1.04386 0.63346,0.41525 2.3e-4,-0.0113 0.27534,-0.54652 0.19995,-0.70081 -0.15301,-0.31339 -0.17759,-0.66368 -0.083,-1.18261 0.0379,-0.20818 0.0431,-0.45443 0.016,-0.78147 -0.0498,-0.60249 -0.0427,-0.9744 0.0205,-1.07732 0.0273,-0.0442 0.0455,-0.20317 0.0407,-0.35337 -0.005,-0.15019 0.008,-0.40879 0.0283,-0.57478 0.0361,-0.29302 -0.0429,-0.6788 -0.13963,-0.68256 -0.0551,-0.002 -0.036,-0.53013 0.0208,-0.57728 0.0735,-0.061 0.0636,-0.34385 -0.0156,-0.44254 -0.0385,-0.048 -0.0692,-0.13755 -0.0682,-0.19891 8.5e-4,-0.0614 -0.0387,-0.22756 -0.0887,-0.36892 -0.0547,-0.15488 -0.0881,-0.38704 -0.0846,-0.58367 0.004,-0.17953 0.25499,-2.55145 0.21196,-2.61624 -0.10744,-0.16134 -0.0424,-0.84634 0.0767,-0.80785 0.0511,0.0165 0.0952,-0.062 0.097,-0.17486 0.005,-0.31876 -0.0724,-0.5529 -0.16081,-0.47955 -0.0451,0.0375 -0.0572,0.0165 -0.0276,-0.0476 0.006,-0.0155 0.0119,-0.0321 0.0145,-0.049 l 0.1838,-0.0577 c -0.0115,-0.0716 -0.0185,-0.14175 -0.0282,-0.21332 0.20698,0.0786 0.41395,-0.23158 0.42283,-0.71561 0.005,-0.26614 0.0327,-0.33495 0.1166,-0.28546 0.12218,0.0721 0.27032,-0.32611 0.27768,-0.7484 0.002,-0.0908 -0.0206,-0.17365 -0.0559,-0.23737 5.9e-4,-0.0146 0.002,-0.0265 0.004,-0.0424 0.005,-0.34543 -0.25055,-1.04474 -0.35226,-0.9604 -0.11645,0.0967 -0.30456,-0.0735 -0.301,-0.2719 0.002,-0.10386 -0.0615,-0.41419 -0.14115,-0.68982 -0.11849,-0.41032 -0.13308,-0.61892 -0.0811,-1.1497 0.0697,-0.71055 0.11872,-0.77415 0.58883,-0.76544 0.238,0.004 0.28272,-0.0309 0.28627,-0.22645 0.002,-0.12743 0.0471,-0.25037 0.0991,-0.27321 0.0739,-0.0324 0.0727,-0.0806 -0.005,-0.2212 -0.0565,-0.10309 -0.0965,-0.4463 -0.0923,-0.80434 0.005,-0.50518 0.0383,-0.66811 0.17397,-0.85156 0.2095,-0.28327 0.22253,-0.69385 0.0313,-0.98096 -0.13165,-0.19763 -0.12715,-0.26243 0.016,-0.22994 0.027,0.006 0.0267,-0.12053 -3e-4,-0.28152 -0.0271,-0.16095 -0.0753,-0.26956 -0.10744,-0.24131 -0.0321,0.0282 -0.10477,-0.11781 -0.16139,-0.32479 -0.08,-0.29191 -0.11861,-0.34197 -0.17307,-0.22339 -0.11294,0.2457 -0.17081,-0.12246 -0.0727,-0.46293 0.0682,-0.23598 0.0579,-0.30034 -0.0653,-0.39999 -0.10565,-0.0857 -0.14006,-0.21238 -0.12273,-0.45333 0.0132,-0.18386 -0.0139,-0.35393 -0.0604,-0.37813 -0.0466,-0.0241 -0.17138,-0.16327 -0.27646,-0.30993 -0.14602,-0.2042 -0.17876,-0.32905 -0.13838,-0.53551 0.0291,-0.14806 0.0832,-0.29471 0.12058,-0.32567 0.11733,-0.0974 0.0792,-0.33666 -0.10677,-0.66884 -0.0991,-0.17651 -0.15862,-0.34993 -0.13256,-0.38512 0.0261,-0.0352 0.0492,-0.35308 0.0528,-0.70643 0.004,-0.35346 0.0287,-0.6367 0.0573,-0.62993 0.14508,0.0352 0.31458,-0.0129 0.31636,-0.0896 4.8e-4,-0.0395 -0.042,-0.13954 -0.0951,-0.23868 l 0.11112,-0.0301 c -0.0111,-0.0958 -0.0399,-0.22407 -0.0386,-0.28983 0.002,-0.0834 0.0713,-0.1796 0.15527,-0.2142 0.0838,-0.0346 0.13399,-0.10798 0.11167,-0.16306 -0.0224,-0.055 -0.005,-0.18319 0.0394,-0.28502 0.0692,-0.15973 0.0802,-0.14567 0.0772,0.10142 -0.002,0.15765 0.0451,0.35827 0.10343,0.44589 0.0579,0.0877 0.0857,0.18709 0.0608,0.22076 -0.004,0.004 0.0112,0.0354 0.01,0.0433 l 0.1746,-0.0472 c -0.008,-0.0688 -0.0286,-0.0867 -0.0208,-0.19104 0.0154,-0.20696 6e-4,-0.4013 -0.0325,-0.43233 -0.0332,-0.0311 -0.041,-0.12276 -0.0174,-0.20371 0.0236,-0.0809 0.009,-0.24097 -0.031,-0.35584 -0.0524,-0.14895 -0.0466,-0.24767 0.0196,-0.34447 0.0735,-0.10616 0.0727,-0.11992 -0.002,-0.0634 -0.11355,0.0858 -0.20488,-0.23611 -0.26541,-0.93593 -0.0346,-0.40002 -0.0183,-0.50647 0.0887,-0.58665 0.10165,-0.076 0.1255,-0.20309 0.1071,-0.56917 -0.0173,-0.34244 0.009,-0.5044 0.0958,-0.59364 0.0992,-0.10173 0.1041,-0.161 0.0298,-0.34535 -0.0495,-0.12234 -0.0867,-0.38173 -0.0832,-0.57659 0.004,-0.19488 -0.0302,-0.40942 -0.0748,-0.47649 -0.0448,-0.0671 -0.0747,-0.45108 -0.0669,-0.85331 0.0111,-0.53051 -0.0185,-0.78692 -0.10588,-0.93418 -0.11429,-0.19274 -0.16109,-1.16523 -0.12426,-2.58004 0.005,-0.23051 -0.0111,-0.47175 -0.0377,-0.53638 -0.085,-0.20429 -0.0795,-0.43155 0.0115,-0.50709 0.0628,-0.0521 0.0982,-0.7782 0.12335,-2.54026 0.0111,-0.7367 0.0229,-1.05157 0.0353,-1.42947 z", +2.42744, 13.3932, +"M -1.21246 -13.3117 c -0.52065,0.12572 -0.51196,0.12241 -1.03612,0.24908 -0.001,0.0734 0.0127,0.13564 0.008,0.20774 l -0.0413,0.60203 0.49247,-0.0656 c 0.3575,-0.0477 0.5449,-0.0103 0.68368,0.13592 0.10525,0.11049 0.21523,0.17879 0.24443,0.15089 0.0553,-0.0525 0.18585,0.42322 0.50591,1.84847 0.40153,1.78589 0.46949,2.16266 0.39429,2.16266 -0.043,2.5e-4 0.005,0.0582 0.10801,0.12919 0.16623,0.1151 0.1658,0.14317 -0.006,0.25114 -0.1387,0.0873 -0.15256,0.14904 -0.0501,0.22015 0.21167,0.14601 0.22839,0.42645 0.0548,0.91828 -0.0852,0.24126 -0.19974,0.751 -0.25424,1.13224 -0.0545,0.38124 -0.13282,0.79864 -0.17312,0.9281 -0.0476,0.15154 -0.0232,0.20647 0.0687,0.15297 0.0797,-0.0464 0.13994,5.4e-4 0.13694,0.10697 -0.003,0.10433 -0.0625,0.22286 -0.13332,0.26406 -0.0707,0.0411 -0.13559,0.30272 -0.1416,0.58085 -0.009,0.34992 0.0322,0.47879 0.13488,0.41909 0.0929,-0.0543 0.11283,-0.0321 0.0532,0.0589 -0.22213,0.33938 -0.21073,0.73976 0.0279,0.96739 0.27232,0.25969 0.31048,0.5796 0.0935,0.78548 -0.1029,0.0973 -0.10442,0.20891 -0.007,0.40359 0.0743,0.14815 0.11655,0.465619 0.094,0.705379 -0.0314,0.33474 0.0303,0.49527 0.26613,0.69092 0.39591,0.32862 0.4506,0.97704 0.0971,1.15445 -0.19818,0.0995 -0.25884,0.08 -0.30024,-0.0971 -0.0413,-0.17754 -0.0559,-0.18235 -0.0718,-0.0238 -0.0147,0.14713 -0.11818,0.18202 -0.39791,0.13332 -0.33766,-0.0586 -0.37754,-0.0306 -0.38654,0.26458 -0.005,0.1817 -0.0655,0.33614 -0.1354,0.34314 -0.0697,0.007 -0.18114,0.0178 -0.24804,0.0248 -0.0668,0.007 -0.20301,0.11829 -0.30231,0.24701 -0.0994,0.12871 -0.25695,0.2064 -0.34985,0.1726 -0.19915,-0.0722 -0.63789,0.30833 -0.64389,0.55914 -0.008,0.28898 0.32739,0.49631 0.64751,0.40101 0.16115,-0.0479 0.37848,-0.0986 0.48317,-0.11265 0.6821,-0.0915 0.75775,-0.16898 0.69815,-0.71314 -0.0515,-0.47073 -0.0192,-0.55211 0.31006,-0.78135 0.25416,-0.17695 0.44432,-0.22349 0.61702,-0.15089 0.24881,0.10484 0.24866,0.10527 -0.004,0.12247 -0.1394,0.009 -0.29578,0.009 -0.34778,0 -0.0519,-0.01 -0.0957,0.043 -0.0977,0.11731 -0.002,0.0774 0.10491,0.10318 0.25115,0.061 0.26076,-0.0754 0.35205,0.12076 0.11937,0.25631 -0.071,0.0413 -0.0973,0.21478 -0.0594,0.38551 0.0649,0.2906 -0.0353,0.37589 -0.36948,0.31419 -0.0517,-0.01 -0.0962,0.0455 -0.0982,0.12247 -0.002,0.0766 0.0821,0.10935 0.18655,0.0724 0.10479,-0.0372 0.18115,-0.0268 0.17415,0.0227 -0.009,0.0495 -0.004,0.14704 0.0109,0.21704 0.0872,0.41425 -0.088,1.66625 -0.25579,1.82779 -0.17035,0.164 -0.21288,0.15606 -0.37621,-0.0729 -0.1012,-0.14177 -0.23055,-0.34474 -0.28835,-0.45062 -0.0858,-0.15729 -0.1361,-0.16357 -0.2744,-0.0336 -0.16719,0.15723 -0.063,0.30632 0.31419,0.4501 0.062,0.0236 -0.01,0.26437 -0.15968,0.53537 -0.14984,0.27102 -0.33181,0.72807 -0.40411,1.01544 -0.12606,0.50143 -0.11796,0.52568 0.1974,0.59738 0.23372,0.0532 0.38925,0.22256 0.53899,0.58757 0.27181,0.66258 0.33329,2.3657 0.093,2.57865 -0.14193,0.12572 -0.13896,0.17735 0.0181,0.29869 0.20771,0.16041 0.23365,1.24108 0.0444,1.85518 -0.10282,0.33391 -0.0903,0.34552 0.38603,0.35812 0.0498,0.001 0.0875,0.0324 0.14056,0.0393 l 2.02778,-1.91874 c 0.0391,-0.84014 0.0901,-1.31251 0.20567,-1.42214 0.1408,-0.13348 0.16273,-0.22373 0.0687,-0.28474 -0.0888,-0.0584 -0.11201,-0.52874 -0.0651,-1.34978 0.0634,-1.11341 0.0451,-1.28034 -0.15968,-1.43196 -0.12777,-0.0943 -0.22728,-0.30706 -0.22428,-0.47284 0.005,-0.16601 -0.0515,-0.3404 -0.12454,-0.3886 -0.0731,-0.048 -0.0993,-0.16882 -0.0579,-0.26872 0.0422,-0.10162 0.0192,-0.14879 -0.0517,-0.10749 -0.22711,0.13224 -0.12436,-0.27378 0.14314,-0.56637 0.2846,-0.31158 0.33629,-0.4973 0.13953,-0.50229 -0.0693,-0.002 -0.12444,-0.0905 -0.12144,-0.19689 0.003,-0.10651 -0.074,-0.22624 -0.17053,-0.26614 -0.27152,-0.11237 -0.32136,-0.54803 -0.078,-0.68161 0.1171,-0.0642 0.15641,-0.12105 0.0868,-0.12506 -0.0694,-0.004 -0.13414,-0.24406 -0.14314,-0.5333 -0.009,-0.28926 -0.11377,-0.63887 -0.23255,-0.77721 -0.18088,-0.21019 -0.21428,-0.54858 -0.20928,-2.06292 0.006,-1.693699 0.0211,-1.808719 0.23564,-1.769919 0.21803,0.0394 0.41737,-0.1166 0.42736,-0.33435 0.002,-0.055 -0.0668,-0.0927 -0.15399,-0.0837 -0.56087,0.0579 -0.60799,-0.005 -0.56689,-0.7519 0.0221,-0.39949 -0.0155,-0.87281 -0.0832,-1.05213 -0.14126,-0.3744 0.0208,-0.75214 0.31936,-0.74414 0.10486,0.003 0.15977,-0.048 0.12247,-0.11265 -0.0376,-0.0646 0.004,-0.13992 0.092,-0.16692 0.12652,-0.039 0.12829,-0.0886 0.008,-0.24236 -0.0831,-0.10642 -0.15413,-0.46452 -0.15813,-0.79582 -0.004,-0.33891 -0.0742,-0.62959 -0.1602,-0.66559 -0.0981,-0.0407 -0.14427,-0.3485 -0.13177,-0.85886 0.0114,-0.43746 -0.0148,-0.97902 -0.0579,-1.20355 -0.0579,-0.30105 -0.0202,-0.47 0.14418,-0.64233 0.17836,-0.18698 0.20786,-0.35499 0.14676,-0.8413 -0.0419,-0.33433 -0.0924,-0.83108 -0.11214,-1.10381 -0.0199,-0.27268 -0.0595,-0.52067 -0.0879,-0.55087 -0.0287,-0.0302 0.0105,-0.22077 0.0873,-0.42374 0.17376,-0.45944 -0.0535,-1.17751 -0.34055,-1.07591 -0.10107,0.0357 -0.20737,0.0633 -0.23667,0.0631 -0.0292,-7.8e-4 -0.0549,0.0807 -0.0579,0.18087 -0.003,0.10015 -0.0715,0.22122 -0.15296,0.26871 -0.0924,0.0533 -0.11257,0.0315 -0.0543,-0.0574 0.052,-0.0791 0.0375,-0.14476 -0.032,-0.14676 -0.0696,-0.002 -0.16379,0.0535 -0.20929,0.12299 -0.0455,0.0695 -0.14895,0.0835 -0.22945,0.0305 -0.0807,-0.0528 -0.34584,-0.10465 -0.58911,-0.11265 -0.2954,-0.011 -0.39714,-0.0935 -0.48317,-0.27751 z", + ) +specks=( +0.19582, 0.378634, +"M -0.161959 -0.371071 c -0.1979,0.116362 0.54642,1.511327 0.31137,0.17337 -0.16941,-0.158525 -0.26567,-0.200234 -0.31137,-0.17337 z", +0.0857523, 0.142767, +"M -0.0570877 -0.130051 c -0.079,0.08213 0.0173,0.518112 0.14284,0.08157 -0.0697,-0.09649 -0.11628,-0.108996 -0.14284,-0.08157 z", +0.25372, 0.210386, +"M 0.0480998 -0.205499 c -0.42327,0.07051 -0.4419,0.885499 0.20562,0.02193 -0.0763,-0.02736 -0.14491,-0.032 -0.20562,-0.02193 z", +0.140526, 0.148695, +"M -0.13122 -0.139672 c -0.0745,0.07221 0.32456,0.53906 0.26582,0.107512 -0.16476,-0.111376 -0.2411,-0.131561 -0.26582,-0.107512 z", +0.249924, 0.342306, +"M -0.114966 -0.341551 c -0.34386,0.03623 0.04,1.35907 0.36489,0.226387 -0.16717,-0.174662 -0.28557,-0.234744 -0.36489,-0.226387 z", +0.825503, 0.732431, +"M -0.326263 0.732431 c 0.0466,-0.194767 0.0978,-0.389834 0.33522,-0.575911 0.67157,-0.184934 1.35761,-1.225527 0.16941,-0.77828 -0.39118,0.182831 -0.72402,0.18703 -1.00387,0.107874 z", +0.16647, 0.33039, +"M -0.07457 -0.329965 c -0.15388,0.01622 -0.13629,0.783005 0.22124,0.643371 l 0.0198,-0.08888 -0.0371,-0.25956 c -0.0823,-0.222794 -0.15267,-0.300475 -0.20355,-0.295097 z", +0.262126, 0.290338, +"M -0.233294 -0.271662 c -0.17079,0.144103 0.47197,1.053092 0.49542,0.204111 -0.29067,-0.215468 -0.43843,-0.252153 -0.49542,-0.204111 z", +0.240004, 0.127086, +"M -0.124553 -0.0975163 c -0.46137,0.111203 0.63127,0.460222 0.30142,-0.02957 -0.13801,0.0028 -0.23555,0.01328 -0.30142,0.02957 z", +0.221255, 0.286652, +"M -0.173286 -0.268838 c -0.24785,0.147346 0.55483,1.130889 0.36527,0.06706 -0.19413,-0.09043 -0.30799,-0.101042 -0.36527,-0.06706 z", +0.187681, 0.221884, +"M -0.00844687 -0.221884 c -0.63303,0.150003 0.66682,0.918773 0,0 z", +0.186594, 0.274126, +"M -0.108183 -0.271572 c -0.33666,0.06033 0.53913,1.16614 0.22586,0.04727 -0.10437,-0.04356 -0.17776,-0.05583 -0.22586,-0.04727 z", +0.143206, 0.14809, +"M -0.134411 -0.138893 c -0.0733,0.07232 0.33765,0.536966 0.27008,0.106063 -0.16769,-0.110755 -0.24568,-0.130215 -0.27008,-0.106063 z", +0.205727, 0.193789, +"M -0.128883 -0.184279 c -0.27335,0.08926 0.26505,0.768387 0.33461,0.05638 -0.16492,-0.06656 -0.27156,-0.07703 -0.33461,-0.05638 z", +0.305162, 0.456411, +"M 0.128243 -0.44135 c -0.29988,0.132509 -0.79724,1.080982 -0.0121,0.866257 l 0.0851,-0.147363 0.073,-0.208094 c 0.0833,-0.462398 -0.0138,-0.57096 -0.1475,-0.510616 z", +0.218898, 0.391658, +"M -0.131822 -0.379923 c -0.19943,0.127506 -0.0454,1.240958 0.35072,0.543718 l -0.0293,-0.2389 c -0.14923,-0.280285 -0.25533,-0.347357 -0.32181,-0.304858 z", +0.314969, 0.187616, +"M -0.110991 -0.158343 c -0.32093,0.126299 -0.30492,0.600436 0.35146,0.16703 l 0.0607,-0.06813 0.0138,-0.06262 c -0.17113,-0.08176 -0.31579,-0.07863 -0.42277,-0.03643 z", +0.144384, 0.265972, +"M -0.0991 -0.265684 c -0.18575,-0.02027 0.26116,1.038075 0.24294,0.222501 -0.1237,-0.15592 -0.19996,-0.217867 -0.24294,-0.222501 z", +0.249929, 0.219643, +"M -0.0945313 -0.210573 c -0.25801,0.08907 -0.22795,0.792505 0.34446,0.186141 -0.1406,-0.177396 -0.25858,-0.215823 -0.34446,-0.186141 z", +0.311515, 0.537401, +"M -0.140345 -0.534025 c -0.2896,0.082 -0.25686,1.549308 0.45186,0.911044 l -0.009,-0.160716 -0.0654,-0.241334 c -0.1551,-0.409456 -0.28705,-0.536186 -0.38358,-0.508808 z", +0.177607, 0.337109, +"M -0.0901732 -0.335988 c -0.24366,0.04365 0.0797,1.339997 0.26778,0.215464 -0.12508,-0.168462 -0.21151,-0.225565 -0.26778,-0.215464 z", +0.174549, 0.307061, +"M -0.0785809 -0.300444 c -0.14612,0.07522 -0.16717,0.806477 0.23933,0.555164 l 0.0138,-0.09759 v 0 c -0.0894,-0.391069 -0.18135,-0.492186 -0.24739,-0.457993 z", +0.103904, 0.181685, +"M -0.0611958 -0.180411 c -0.10023,0.0313 -0.0155,0.631126 0.1651,0.216629 -0.0781,-0.174417 -0.13129,-0.227114 -0.1651,-0.216629 z", +0.300084, 0.415141, +"M -0.145146 -0.407237 c -0.287,0.106735 -0.19552,1.250324 0.44523,0.648168 l -0.0387,-0.306045 c -0.17379,-0.297695 -0.31118,-0.377743 -0.40684,-0.342148 z", +0.871496, 0.707663, +"M 0.738024 -0.703243 c 0.1632,-0.03202 0.20538,0.105011 -0.038,0.573046 -0.007,0.328165 0.23952,1.188452 -0.39899,0.681635 -0.51284,-0.241795 -1.94836,0.149951 -0.63082,-0.4331 0.18654,-0.245067 0.7955,-0.768223 1.06753,-0.82157 z", +0.197296, 0.279834, +"M -0.119824 -0.279832 c -0.264,-0.0013 0.22383,1.101454 0.31712,0.214591 -0.15509,-0.155747 -0.25613,-0.214387 -0.31712,-0.214591 z", +0.362209, 0.376951, +"M -0.0190514 -0.364089 c 0.31129,-0.08445 0.64101,0.259813 0.068,0.656187 -0.0781,-0.02833 -0.31369,0.170722 -0.40954,0.03985 -0.0204,-0.440504 0.15544,-0.645356 0.34191,-0.696058 z", +0.322117, 0.43818, +"M 0.123244 -0.437076 c 0.21552,-0.01825 0.34427,0.190347 -0.0901,0.577559 0.0262,0.147674 -0.23676,0.452306 -0.33939,0.202753 -0.0887,-0.518231 0.21366,-0.762308 0.42909,-0.780276 z", +0.245771, 0.389516, +"M -0.127069 -0.385828 c -0.24435,0.07803 -0.10731,1.36138 0.37284,0.449505 -0.16786,-0.367879 -0.29138,-0.475521 -0.37284,-0.449505 z", +0.230177, 0.205962, +"M 0.0753834 -0.190211 c 0.31684,-0.138599 0.11369,0.694489 -0.30556,0.278851 0.13249,-0.162699 0.23246,-0.246844 0.30556,-0.278851 z", +0.195686, 0.378332, +"M -0.161823 -0.370693 c -0.19787,0.116276 0.54614,1.510428 0.31108,0.172533 -0.16941,-0.158542 -0.26538,-0.199394 -0.31108,-0.172533 z", +0.156073, 0.178711, +"M -0.123092 -0.173272 c 0.12455,-0.06557 0.54867,0.486539 0.0207,0.320803 -0.073,-0.208356 -0.063,-0.298951 -0.0207,-0.320803 z", +0.292868, 0.408748, +"M -0.0994831 -0.377205 c 0.2675,-0.127455 0.66049,0.135735 0.12818,0.70988 -0.0423,0.149106 -0.21965,0.04812 -0.24627,-0.04082 -0.15751,-0.374986 -0.0435,-0.592568 0.11835,-0.669165 z", +0.23406, 0.207114, +"M 0.15688 -0.205786 c 0.21509,-0.03505 -0.053,0.63824 -0.39094,0.33352 0.19441,-0.231554 0.31926,-0.321849 0.39094,-0.33352 z", +0.201117, 0.166598, +"M -0.0170272 -0.150178 c 0.25106,-0.12761 0.39144,0.539989 -0.18409,0.23713 0.0628,-0.135856 0.1261,-0.207647 0.18409,-0.23713 z", +0.114132, 0.18984, +"M -0.0125222 -0.189323 c 0.12162,-0.02091 0.24963,0.600837 -0.10161,0.293838 0.0204,-0.208237 0.0609,-0.286747 0.10161,-0.293838 z", +0.0915151, 0.173045, +"M -0.00111513 -0.171143 c 0.1168,-0.04285 0.15872,0.6575 -0.0904,0.172206 0.0312,-0.113136 0.0631,-0.162096 0.0904,-0.172206 z", +0.197077, 0.0630351, +"M -0.0264672 -0.0279184 c 0.34231,-0.128835 0.29613,0.142843 -0.17061,0.08191 0.0647,-0.03707 0.12128,-0.06352 0.17061,-0.08191 z", +0.32193, 0.326561, +"M -0.0297401 -0.311587 c 0.33824,-0.13351 0.67663,0.670587 -0.23729,0.637132 l -0.0549,-0.125695 c 0.0671,-0.318517 0.17898,-0.466864 0.29172,-0.511371 z", +0.15739, 0.161874, +"M -0.112614 -0.152979 c 0.14163,-0.07868 0.53585,0.392922 -0.0121,0.303528 -0.0537,-0.189612 -0.0352,-0.27729 0.0121,-0.303528 z", +0.492892, 0.413638, +"M -0.474932 -0.402985 c 0.083,-0.07235 0.43945,0.238304 0.76375,0.494301 0.64017,0.214078 -0.41841,0.52196 -0.55019,0.144016 -0.21378,-0.413279 -0.26311,-0.594893 -0.21413,-0.638157 z", +0.280378, 0.178761, +"M -0.23433 -0.147759 c 0.20564,-0.136598 1.00237,0.215878 0.0761,0.32652 -0.14871,-0.18142 -0.14543,-0.28092 -0.0761,-0.32652 z", +0.162268, 0.210341, +"M -0.102042 -0.210249 c -0.15268,-0.0093 0.003,0.684278 0.26431,0.309297 -0.12766,-0.225447 -0.21324,-0.306126 -0.26431,-0.309297 z", +0.173218, 0.312533, +"M 0.0960123 -0.312183 c 0.1701,0.02182 0.0498,1.05689 -0.26923,0.415217 0.12369,-0.317554 0.21268,-0.422492 0.26923,-0.415217 z", +0.225385, 0.163164, +"M -0.170322 -0.147418 c 0.19286,-0.101284 0.78196,0.319518 0.005,0.310437 -0.0894,-0.185115 -0.0687,-0.276769 -0.005,-0.310437 z", +0.256583, 0.29513, +"M 0.153207 -0.27621 c -0.24739,0.13332 -0.78467,0.91045 0.003,0.399077 0.15923,-0.386903 0.10662,-0.459705 -0.003,-0.399077 z", +0.142144, 0.160053, +"M -0.0769161 -0.159666 c -0.19378,0.01932 0.0939,0.633237 0.21906,0.107305 -0.10454,-0.08281 -0.17446,-0.111446 -0.21906,-0.107305 z", +0.257763, 0.339205, +"M -0.152337 -0.339123 c -0.34676,0.01225 0.26021,1.339727 0.4101,0.24746 -0.19896,-0.18325 -0.33009,-0.250231 -0.4101,-0.24746 z", +0.358938, 0.665171, +"M -0.0631218 -0.64564 c 0.1073,-0.03088 0.24635,-0.02708 0.42206,0.02536 -0.16562,0.294692 0.0819,1.345849 -0.37241,1.282725 -0.38085,-0.375619 -0.51502,-1.172797 -0.0474,-1.308222 z", +0.514964, 0.316052, +"M 0.0658635 -0.289668 c -0.47326,0.143016 -1.01805,0.807806 -0.02,0.544771 0.16837,-0.03778 0.41057,-0.08108 0.4691,-0.279942 -0.034,-0.28679 -0.23428,-0.329746 -0.44939,-0.264863 z", +0.28151, 0.425671, +"M -0.238974 -0.406955 c 0.18858,-0.163182 0.91161,0.793301 0.2413,0.832626 l -0.18057,-0.220986 c -0.12698,-0.378745 -0.12387,-0.557216 -0.0604,-0.611607 z", +0.146439, 0.286498, +"M -0.0593209 -0.282103 c -0.20198,0.07761 -0.019,1.143862 0.20576,0.141757 -0.0918,-0.124884 -0.15889,-0.159664 -0.20576,-0.141757 z", +0.224774, 0.345217, +"M -0.143886 -0.34214 c -0.21102,0.06745 0.0186,1.204903 0.36866,0.40122 -0.1801,-0.327159 -0.29833,-0.423613 -0.36866,-0.40122 z", +0.364393, 0.448279, +"M 0.118202 -0.416096 c -0.35164,0.168272 -0.86793,0.937323 -0.0295,0.85876 l 0.1563,-0.199134 c 0.2359,-0.645352 0.0842,-0.760655 -0.1268,-0.659676 z", +0.178445, 0.406469, +"M 0.0463255 -0.4059 c 0.18761,0.03174 0.22558,1.377763 -0.22477,0.5358 0.0833,-0.411175 0.16234,-0.546375 0.22477,-0.5358 z", +0.304022, 0.447803, +"M -0.00200764 -0.442434 c -0.3188,0.09523 -0.5662,1.415475 0.23893,0.655491 l 0.0671,-0.219199 c -0.0863,-0.363197 -0.19964,-0.467949 -0.30603,-0.436344 z", +0.738368, 0.337605, +"M -0.320121 -0.185236 c 0.66788,-0.249967 1.7692,-0.202284 0.41521,0.216789 -0.27722,0.04994 -0.4964,0.346511 -0.78619,0.3014 -0.14647,-0.229779 0.0671,-0.404455 0.37101,-0.518134 z", +0.375081, 0.882719, +"M -0.0815792 -0.881282 c -0.0944,0.0069 -0.19344,0.08954 -0.2912,0.259464 0.43267,0.359195 -0.52183,2.120841 0.4626,1.279309 0.52762,-0.392181 0.23605,-1.588716 -0.17148,-1.538687 z", +0.352805, 1.09079, +"M -0.163519 -1.08216 c 0.0236,-0.0085 0.05,-0.01121 0.0787,-0.0059 0.20435,0.405278 0.95305,2.696139 -0.15267,2.071683 -0.0376,-0.500541 -0.27879,-1.943774 0.0742,-2.06522 z", +0.41009, 1.14354, +"M 0.143813 -1.1422 c 0.118,-0.0138 0.21959,0.07711 0.26221,0.355831 0.0248,0.57158 -0.0509,3.125281 -0.59151,1.256692 -0.51863,-0.436258 -0.024,-1.551867 0.32926,-1.612506 z", +0.140552, 0.154723, +"M 0.0177994 -0.154723 c -0.5212,0.106098 0.44996,0.639827 0,0 z", +0.533274, 0.437204, +"M -0.502236 -0.433749 c -0.0649,0.02284 -0.0361,0.171895 0.16389,0.539065 0.1023,0.205429 0.86901,0.563972 0.87162,0.118795 -0.2874,-0.156058 -0.89227,-0.709351 -1.03553,-0.657957 z", +0.200361, 0.314278, +"M -0.124469 -0.30535 c -0.17097,0.09682 -0.049,0.951731 0.32483,0.477136 l -0.0547,-0.244774 c -0.12404,-0.21357 -0.21339,-0.264707 -0.27044,-0.232426 z", +0.274543, 0.539917, +"M -0.0453373 -0.535301 c -0.54472,0.105752 0.0193,1.964059 0.27489,0.540906 0.031,-0.148363 0.0654,-0.312167 0.03,-0.464016 -0.12663,-0.07108 -0.22779,-0.09212 -0.30563,-0.07677 z", +0.171092, 0.292515, +"M -0.137189 -0.285982 c 0.12732,-0.0772 0.5456,0.554711 0.12559,0.578497 l -0.11369,-0.216331 c -0.0635,-0.232403 -0.0552,-0.336408 -0.0103,-0.362199 z", +0.270716, 0.41871, +"M -0.224043 -0.39102 c -0.27325,0.221011 0.75659,1.649373 0.43008,0.09126 -0.23446,-0.129041 -0.36699,-0.142153 -0.43008,-0.09126 z", +0.173802, 0.188374, +"M 0.0173279 -0.186489 c 0.18489,-0.03985 0.2935,0.568112 -0.19113,0.311443 0.0597,-0.212936 0.13008,-0.298228 0.19113,-0.311443 z", +0.23479, 0.730233, +"M -0.0770773 -0.699585 c -0.11437,0.07401 -0.20017,0.281408 -0.13542,0.641983 0.0405,0.983203 0.0543,1.109157 0.35222,0.01811 0.23794,-0.534592 -0.0224,-0.783153 -0.21742,-0.659545 z", +0.439088, 0.707771, +"M 0.246767 -0.701228 c -0.10299,0.02191 -0.25293,0.102474 -0.45902,0.264588 -0.16872,0.17726 -0.43644,1.694364 0.0511,0.931154 0.43805,-0.288567 0.85607,-1.292506 0.40786,-1.195742 z", +0.139899, 0.344117, +"M -0.0663814 -0.336297 c -0.14129,0.105407 -0.0823,1.226019 0.20628,0.344756 -0.0904,-0.302541 -0.15923,-0.379811 -0.20628,-0.344756 z", +0.102613, 0.185851, +"M 0.0541974 -0.185523 c 0.10196,0.01725 0.0397,0.631684 -0.15681,0.242402 0.0711,-0.187404 0.12283,-0.247802 0.15681,-0.242402 z", +0.302008, 0.560567, +"M -0.0270707 -0.55462 c -0.18178,0.03761 -0.35011,0.264001 -0.23973,0.713802 0.0228,0.671208 0.15302,0.377879 0.44061,0.0069 0.28805,-0.504213 0.0331,-0.769335 -0.20105,-0.721031 z", +0.085711, 0.142485, +"M -0.056959 -0.129834 c -0.0792,0.08246 0.0173,0.517289 0.14267,0.08091 -0.0697,-0.09661 -0.11541,-0.107822 -0.14267,-0.08091 z", +0.180055, 0.427331, +"M -0.0363549 -0.425781 c 0.19187,0.05348 0.43026,1.467351 -0.1437,0.536886 0.0224,-0.422025 0.08,-0.554673 0.1437,-0.536886 z", +0.253994, 0.158651, +"M -0.157396 -0.151199 c -0.33829,0.07177 0.31285,0.629548 0.41139,0.04756 -0.20239,-0.05529 -0.33338,-0.06404 -0.41139,-0.04756 z", +0.142239, 0.160356, +"M -0.077041 -0.160032 c -0.19381,0.01932 0.0942,0.634082 0.21928,0.108167 -0.10472,-0.08281 -0.17481,-0.111962 -0.21928,-0.108167 z", +0.204532, 0.23177, +"M -0.125112 -0.231668 c 0.18825,-0.0086 0.62843,0.52902 0.0155,0.456753 -0.14112,-0.336734 -0.10644,-0.453147 -0.0155,-0.456753 z", +0.302086, 0.355289, +"M -0.150514 -0.321921 c -0.41485,0.206156 0.12059,1.269337 0.4281,0.224788 l 0.0245,-0.194374 c -0.21141,-0.07953 -0.35705,-0.07849 -0.45276,-0.03088 z", +0.319431, 0.249425, +"M -0.132339 -0.243618 c -0.4405,0.08143 -0.0266,0.995486 0.45177,0.108513 -0.20224,-0.10282 -0.34995,-0.127317 -0.45177,-0.108513 z", +0.318818, 0.231988, +"M 0.0318226 -0.193927 c -0.30533,0.13422 -0.649,0.55842 0.0989,0.38482 l 0.16407,-0.11973 c 0.0881,-0.31984 -0.0811,-0.34462 -0.26387,-0.2645 z", +0.196202, 0.386572, +"M -0.0913577 -0.381538 c -0.40284,0.05141 0.50388,1.52278 0.23778,0.253201 l -0.14026,-0.243385 c -0.0383,-0.01208 -0.0716,-0.01725 -0.0973,-0.0138 z", +0.252923, 0.25611, +"M -0.0991266 -0.255205 c -0.34893,0.0343 -0.0492,1.01793 0.35205,0.16303 -0.15613,-0.12749 -0.27152,-0.17097 -0.35205,-0.16303 z", +0.227743, 0.364507, +"M -0.129097 -0.362268 c -0.18019,0.05106 -0.14232,0.970885 0.35684,0.664393 -0.14854,-0.531815 -0.27503,-0.687804 -0.35684,-0.664393 z", +0.164352, 0.175428, +"M -0.045238 -0.173643 c -0.22431,0.03864 -0.11921,0.700104 0.20959,0.09557 -0.0887,-0.08074 -0.15768,-0.104545 -0.20959,-0.09557 z", +0.39131, 0.330262, +"M -0.0448403 -0.29959 c -0.36646,0.172171 -0.65831,0.979631 0.30262,0.455235 l 0.13353,-0.110583 c -0.087,-0.369322 -0.26893,-0.422388 -0.43553,-0.344152 z", +0.08851, 0.144333, +"M -0.06158 -0.131595 c -0.0797,0.0825 0.0316,0.52359 0.15009,0.0835 -0.0751,-0.0988 -0.12318,-0.11093 -0.15009,-0.0835 z", +0.142269, 0.160385, +"M -0.0770807 -0.160034 c -0.19379,0.01932 0.0942,0.634151 0.21935,0.108167 -0.10471,-0.08281 -0.17483,-0.112135 -0.21935,-0.108167 z", +0.141781, 0.160158, +"M -0.076419 -0.159773 c -0.19379,0.01932 0.093,0.633582 0.2182,0.107477 -0.10472,-0.08281 -0.17386,-0.111617 -0.2182,-0.107477 z", +0.209206, 0.30405, +"M -0.116284 -0.296837 c -0.20484,0.0951 -0.0599,1.08425 0.32549,0.30178 -0.15043,-0.26622 -0.25717,-0.33337 -0.32549,-0.30178 z", +0.201742, 0.3747, +"M -0.146133 -0.374084 c -0.24908,0.0343 0.42422,1.48646 0.34064,0.25287 -0.17607,-0.19356 -0.28321,-0.26077 -0.34064,-0.25287 z", +0.322667, 0.259474, +"M -0.114613 -0.226479 c -0.33039,0.161993 -0.30744,0.843431 0.36278,0.242972 l 0.0745,-0.165098 c -0.17776,-0.127834 -0.3269,-0.132147 -0.4369,-0.07815 z", +0.182682, 0.131912, +"M -0.0706049 -0.115145 c -0.38616,0.0825 0.35908,0.51914 0.2403,-0.0121 -0.10644,-0.0121 -0.18509,0.002 -0.2403,0.0121 z", +0.226747, 0.401068, +"M -0.210404 -0.386184 c -0.12456,0.15492 0.50616,1.44357 0.43089,0.3531 -0.26357,-0.33026 -0.38924,-0.40472 -0.43089,-0.3531 z", +0.231976, 0.335615, +"M -0.105621 -0.325515 c 0.23153,-0.10299 0.64145,0.61459 -0.029,0.66113 l -0.0958,-0.22943 c -0.0121,-0.27202 0.048,-0.39727 0.1249,-0.4317 z", +0.335965, 0.335139, +"M -0.0942353 -0.30707 c -0.34582,0.173534 -0.39751,1.086591 0.3636,0.373859 l 0.0511,-0.10489 0.0155,-0.10903 c -0.16113,-0.19389 -0.30903,-0.218301 -0.42429,-0.160612 z", +0.0697059, 0.240406, +"M -0.0569386 -0.237373 c 0.0566,0.055 0.24727,0.84545 0.0121,0.26736 -0.0321,-0.22226 -0.0297,-0.28589 -0.0121,-0.26736 z", +0.242776, 0.518825, +"M -0.137028 -0.512424 c -0.43441,0.07384 0.62996,1.783124 0.32347,0.636705 -0.0242,-0.208434 -0.0183,-0.497208 -0.21632,-0.628062 -0.0433,-0.0138 -0.0788,-0.01725 -0.10696,-0.0138 z", +0.0911062, 0.261377, +"M -0.00830619 -0.25616 c 0.11369,-0.08798 0.1788,0.975612 -0.0828,0.280459 0.0274,-0.178605 0.0571,-0.260274 0.0828,-0.280459 z", +0.175081, 0.18501, +"M -0.0388005 -0.179991 c 0.20821,-0.07297 0.40631,0.681507 -0.13628,0.207658 0.0405,-0.129905 0.0885,-0.190855 0.13628,-0.207658 z", +0.118897, 0.176509, +"M -0.0742332 -0.173289 c -0.15768,0.0526 0.1494,0.70495 0.19313,0.0823 -0.0947,-0.0745 -0.15647,-0.0942 -0.19313,-0.0823 z", + ) + +def mt( s ) : + return s.isspace() or len(s) == 0 + +def addparms( p ) : + s = '' + for parm in p.split(',') : + if mt(parm) : + continue + s += parm + ' ' + return s + +if __name__ == '__main__': + ChipScratches().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/circle_tangents/circle_tangents.inx b/extensions/fablabchemnitz/circle_tangents/circle_tangents.inx new file mode 100644 index 00000000..82e4950b --- /dev/null +++ b/extensions/fablabchemnitz/circle_tangents/circle_tangents.inx @@ -0,0 +1,26 @@ + + + Circle Tangents + fablabchemnitz.de.circle_tangents + + + + + + + + + + true + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/circle_tangents/circle_tangents.py b/extensions/fablabchemnitz/circle_tangents/circle_tangents.py new file mode 100644 index 00000000..4678fa75 --- /dev/null +++ b/extensions/fablabchemnitz/circle_tangents/circle_tangents.py @@ -0,0 +1,230 @@ +#!/usr/bin/env python3 + +''' + Copyright (C) 2012 Rhys Owen, rhysun@gmail.com + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + + A + |\ + | \ + | \ + | \ + | \ + b| \h + | \ + | \ + |_ \ + |_|_______\ + C a B +''' + +import inkex +from inkex.paths import Path +from inkex import Transform +from math import * +from lxml import etree + +def poltocar(r, rad, negx=False, negy=False): + # converts polar coords to cartesian + x = r * cos(rad) + y = r * sin(rad) + if negx and not negy: + return [-x, y] + elif not negx and negy: + return [x, -y] + elif not negx and not negy: + return [-x, -y] + else: + return [x, y] + +def deuclid(x1, y1, x2, y2): + # euclidean distance between two cartesian coords + squarex = (x1 - x2)**2 + squarey = (y1 - y2)**2 + d = sqrt(squarex + squarey) + return d + +def getAngle(b, h): + angle = asin(b / h) + return angle + +def aLength(b, h): + a = sqrt(h**2-b**2) + return a + + +def getPathData(obj): + if obj.get("d"):# If the circle has been converted to a path object + d = obj.get("d") + p = Path(d) + if obj.get("transform"): + trans = Transform(obj.get("transform")) + scalex = trans[0][0] + scaley = trans[1][1] + data = {'rx' : p[1][1][0]*scalex, + 'ry' : p[1][1][1]*scaley, + 'x' : (trans[0][0]*p[0][1][0])+(trans[0][1]*p[0][1][1])+trans[0][2]-(p[1][1][0]*scalex), + 'y' : (trans[1][0]*p[0][1][0])+(trans[1][1]*p[0][1][1])+trans[1][2]} + else: + data = {'rx': p[1][1][0], + 'ry': p[1][1][1], + 'x' : p[0][1][0]-p[1][1][0], + 'y' : p[0][1][1]} + elif obj.get("r"):# For a pure circle object + r = obj.get("r") + cx = obj.get("cx") + cy = obj.get("cy") + data = {'rx' : float(r), + 'ry' : float(r), + 'x' : float(cx), + 'y' : float(cy)} + elif obj.get("rx"):# For ellipses + rx = obj.get("rx") + ry = obj.get("ry") + cx = obj.get("cx") + cy = obj.get("cy") + data = {'rx' : float(rx), + 'ry' : float(ry), + 'x' : float(cx), + 'y' : float(cy)} + else: + stockErrorMsg("4") + + return data + +class CircleTangents(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument("--position", default="inner", help="Choose either inner or outer tangent lines") + pars.add_argument("--selector", default="both", help="Choose which tangents you want to get") + pars.add_argument("--use_style_from_first", type=inkex.Boolean, default=False, help="Use style from first selected") + + def effect(self): + if len(self.options.ids) != 2: + inkex.errormsg("Please select exactly two circles and try again!") + return + + c1object = self.svg.selected[self.options.ids[0]] + c2object = self.svg.selected[self.options.ids[1]] + + if c1object.tag != inkex.addNS('circle','svg') or c2object.tag != inkex.addNS('circle','svg'): + self.msg("One or both objects are not svg:circle elements!") + return + + c1 = getPathData(c1object) + c2 = getPathData(c2object) + + # Create a third 'virtual' circle + if c1['rx'] <= c2['rx']: + c3x = c2['x'] + c3y = c2['y'] + if self.options.position == "outer": + c3r = c2['rx'] - c1['rx'] + else: + c3r = c2['rx'] + c1['rx'] + cyfA = [c1['x'], c1['y']] + cyfB = [c2['x'], c2['y']] + elif c1['rx'] > c2['rx']: + c3x = c1['x'] + c3y = c1['y'] + if self.options.position == "outer": + c3r = c1['rx'] - c2['rx'] + else: + c3r = c1['rx'] + c2['rx'] + cyfA = [c2['x'], c2['y']] + cyfB = [c1['x'], c1['y']] + + # Test whether the circles are actually circles! + if c1['rx'] != c1['ry'] or c2['rx'] != c2['ry']: + inkex.errormsg("One or both objects may be elliptical. Ensure you have circles!") + return + + # Hypotenus of the triangle - Euclidean distance between c1 x, y and c2 x, y. + h = deuclid(c1['x'], c1['y'], c2['x'], c2['y']) + b = c3r + B = None + try: + B = getAngle(b, h) + except ValueError as e: + if self.options.position == "inner": + inkex.errormsg("Error calculating angle. Maybe your circles are overlapping each other") + else: + inkex.errormsg("Error calculating angle.") + return + a = aLength(b, h) + # Angle of hypotenuse to x-axis + E = getAngle(max(c1['y'], c2['y']) - min(c1['y'], c2['y']), h) + + # To test if the smallest circle is lower than the other + if cyfB[1] <= cyfA[1]: + negx = False + else: + negx = True + + # To test if it's the smallest circle to the right of the other + if cyfB[0] <= cyfA[0]: + negy = False + else: + negy = True + + angleTop = -B+E + angleBottom = B+E + if self.options.position == "outer":# External + perpTop = -(pi/2) + perpBottom = pi/2 + else:# Internal + perpTop = pi/2 + perpBottom = -(pi/2) + + # Top coordinates of the top line + cyfC = poltocar(a, angleTop, negx, negy) + # Information for converting top 90grade coordinates + conversionTop = poltocar(min(c1['rx'], c2['rx']), perpTop+angleTop, negx, negy)#1.5707964 1.57079632679 + + # Bottom line coordinates + cyfD = poltocar(a, angleBottom, negx, negy) + # Information for converting the bottom 90 degree coordinates + conversionBottom = poltocar(min(c1['rx'], c2['rx']), perpBottom+angleBottom, negx, negy) + + # Draw a line + llx1 = cyfA[0] + lly1 = cyfA[1] + if self.options.use_style_from_first is True: + llsteil = (c1object.get("style")) #note: if the selected objects do not contain a stroke width the tangents will be invisible! + else: + llsteil = "stroke:#000000; stroke-width:1px; fill:none;" + + # Line 1 + if self.options.selector == "first" or self.options.selector == "both": + ll1x2 = cyfC[0] + ll1y2 = cyfC[1] + parent = c1object.getparent() + attribsLine1 = {'style':llsteil, + inkex.addNS('label','inkscape'):"line1", + 'd':'m '+str(llx1+conversionTop[0])+','+str(lly1+conversionTop[1])+' l '+str(ll1x2)+','+str(ll1y2)} + elfen1 = etree.SubElement(parent, inkex.addNS('path','svg'), attribsLine1 ) + + #Line 2 + if self.options.selector == "second" or self.options.selector == "both": + ll2x2 = cyfD[0] + ll2y2 = cyfD[1] + parent = c1object.getparent() + attribsLine1 = {'style':llsteil, + inkex.addNS('label','inkscape'):"line2", + 'd':'m '+str(llx1+conversionBottom[0])+','+str(lly1+conversionBottom[1])+' l '+str(ll2x2)+','+str(ll2y2)} + etree.SubElement(parent, inkex.addNS('path','svg'), attribsLine1 ) + +if __name__ == '__main__': + CircleTangents().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/cleanup_styles/cleanup_styles.inx b/extensions/fablabchemnitz/cleanup_styles/cleanup_styles.inx new file mode 100644 index 00000000..61956d18 --- /dev/null +++ b/extensions/fablabchemnitz/cleanup_styles/cleanup_styles.inx @@ -0,0 +1,69 @@ + + + Cleanup Styles + fablabchemnitz.de.cleanup_styles + + + + + + + + false + 0.100 + + + + + + + + false + 100.0 + true + true + true + true + true + false + + + + + + + + + + + + + + + + + + + + + + + + + + + ../000_about_fablabchemnitz.svg + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/cleanup_styles/cleanup_styles.py b/extensions/fablabchemnitz/cleanup_styles/cleanup_styles.py new file mode 100644 index 00000000..ccaf147c --- /dev/null +++ b/extensions/fablabchemnitz/cleanup_styles/cleanup_styles.py @@ -0,0 +1,187 @@ +#!/usr/bin/env python3 +''' +Copyright (C) 2013 Matthew Dockrey (gfish @ cyphertext.net) + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +Based on +- coloreffect.py by Jos Hirth and Aaron C. Spike +- cleanup.py (https://github.com/attoparsec/inkscape-extensions) by attoparsec + +Author: Mario Voigt / FabLab Chemnitz +Mail: mario.voigt@stadtfabrikanten.org +Last Patch: 12.04.2021 +License: GNU GPL v3 + +Notes: + - This extension does not check if attributes contain duplicates properties like "opacity:1;fill:#393834;fill-opacity:1;opacity:1;fill:#393834;fill-opacity:1". We assume the SVG syntax is correct +''' + +import inkex +import re + +class CleanupStyles(inkex.EffectExtension): + + groups = [] + + def add_arguments(self, pars): + pars.add_argument("--tab") + pars.add_argument("--mode", default="Lines", help="Join paths with lines or polygons") + pars.add_argument("--dedicated_style_attributes", default="ignore", help="Handling of dedicated style attributes") + pars.add_argument("--stroke_width_override", type=inkex.Boolean, default=False, help="Override stroke width") + pars.add_argument("--stroke_width", type=float, default=0.100, help="Stroke width") + pars.add_argument("--stroke_width_units", default="mm", help="Stroke width unit") + pars.add_argument("--stroke_opacity_override", type=inkex.Boolean, default=False, help="Override stroke opacity") + pars.add_argument("--stroke_opacity", type=float, default="100.0", help="Stroke opacity (%)") + pars.add_argument("--reset_opacity", type=inkex.Boolean, default=True, help="Reset stroke style attribute 'opacity'. Do not mix up with 'fill-opacity' and 'stroke-opacity'") + pars.add_argument("--reset_stroke_attributes", type=inkex.Boolean, default=True, help="Remove stroke style attributes 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linejoin', 'stroke-linecap', 'stroke-miterlimit'") + pars.add_argument("--reset_fill_attributes", type=inkex.Boolean, default=True, help="Sets 'fill:none;fill-opacity:1;' to style attribute") + pars.add_argument("--apply_hairlines", type=inkex.Boolean, default=True, help="Adds 'vector-effect:non-scaling-stroke;' and '-inkscape-stroke:hairline;' Hint: stroke-width is kept in background. All hairlines still have a valued width.") + pars.add_argument("--apply_black_strokes", type=inkex.Boolean, default=True, help="Adds 'stroke:#000000;' to style attribute") + pars.add_argument("--remove_group_styles", type=inkex.Boolean, default=False, help="Remove styles from groups") + + def effect(self): + if len(self.svg.selected) == 0: + self.getAttribs(self.document.getroot()) + else: + for element in self.svg.selected.values(): + self.getAttribs(element) + #finally remove the styles from collected groups (if enabled) + if self.options.remove_group_styles is True: + for group in self.groups: + if group.attrib.has_key('style') is True: + group.attrib.pop('style') + + def getAttribs(self, node): + self.changeStyle(node) + for child in node: + self.getAttribs(child) + + #stroke and fill styles can be included in style attribute or they can exist separately (can occure in older SVG files). We do not parse other attributes than style + def changeStyle(self, node): + + #we check/modify the style of all shapes (not groups) + if isinstance(node, inkex.ShapeElement) and not isinstance(node, inkex.Group): + # the final styles applied to this element (with influence from top level elements like groups) + composed_style = node.composed_style() + composedStyleAttributes = str(composed_style).split(';') #array + composedStyleAttributesDict = {} + if len(composed_style) > 0: #Style "composed_style" might contain just empty '' string which will lead to failing dict update + for composedStyleAttribute in composedStyleAttributes: + composedStyleAttributesDict.update({'{}'.format(composedStyleAttribute.split(':')[0]): composedStyleAttribute.split(':')[1]}) + + #three options to handle dedicated attributes (attributes not in the "style" attribute, but separate): + # - just delete all dedicated properties + # - merge dedicated properties, and prefer them over those from composed style + # - merge dedicated properties, but prefer properties from composed style + dedicatedStyleAttributesDict = {} + popDict = [] + # there are opacity (of group/parent), fill-opacity and stroke-opacity + popDict.extend(['opacity', 'stroke', 'stroke-opacity', 'stroke-width', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'fill', 'fill-opacity']) + for popItem in popDict: + if node.attrib.has_key(str(popItem)): + dedicatedStyleAttributesDict.update({'{}'.format(popItem): node.get(popItem)}) + node.attrib.pop(popItem) + + #inkex.utils.debug("composedStyleAttributesDict = " + str(composedStyleAttributesDict)) + #inkex.utils.debug("dedicatedStyleAttributesDict = " + str(dedicatedStyleAttributesDict)) + + if self.options.dedicated_style_attributes == 'prefer_dedicated': + composedStyleAttributesDict.update(dedicatedStyleAttributesDict) + node.set('style', composedStyleAttributesDict) + elif self.options.dedicated_style_attributes == 'prefer_composed': + dedicatedStyleAttributesDict.update(composedStyleAttributesDict) + node.set('style', dedicatedStyleAttributesDict) + elif self.options.dedicated_style_attributes == 'ignore': + pass + + # now parse the style with possibly merged dedicated attributes modded style attribute (dedicatedStyleAttributes) + if node.attrib.has_key('style') is False: + node.set('style', 'stroke:#000000;') #we add basic stroke color black. We cannot set to empty value or just ";" because it will not update properly + style = node.get('style') + + #add missing style attributes if required + if style.endswith(';') is False: + style += ';' + if re.search('(;|^)stroke:(.*?)(;|$)', style) is None: #if "stroke" is None, add one. We need to distinguish because there's also attribute "-inkscape-stroke" that's why we check starting with ^ or ; + style += 'stroke:none;' + if self.options.stroke_width_override is True and "stroke-width:" not in style: + style += 'stroke-width:{:1.4f};'.format(self.svg.unittouu(str(self.options.stroke_width) + self.options.stroke_width_units)) + if self.options.stroke_opacity_override is True and "stroke-opacity:" not in style: + style += 'stroke-opacity:{:1.1f};'.format(self.options.stroke_opacity / 100) + + if self.options.apply_hairlines is True: + if "vector-effect:non-scaling-stroke" not in style: + style += 'vector-effect:non-scaling-stroke;' + if "-inkscape-stroke:hairline" not in style: + style += '-inkscape-stroke:hairline;' + + if re.search('fill:(.*?)(;|$)', style) is None: #if "fill" is None, add one. + style += 'fill:none;' + + #then parse the content and check what we need to adjust + declarations = style.split(';') + for i, decl in enumerate(declarations): + parts = decl.split(':', 2) + if len(parts) == 2: + (prop, val) = parts + prop = prop.strip().lower() + if prop == 'stroke-width' and self.options.stroke_width_override is True: + new_val = self.svg.unittouu(str(self.options.stroke_width) + self.options.stroke_width_units) + declarations[i] = prop + ':{:1.4f}'.format(new_val) + if prop == 'stroke-opacity' and self.options.stroke_opacity_override is True: + new_val = self.options.stroke_opacity / 100 + declarations[i] = prop + ':{:1.1f}'.format(new_val) + if self.options.reset_opacity is True: + if prop == 'opacity': + declarations[i] = '' + if self.options.reset_stroke_attributes is True: + if prop == 'stroke-dasharray': + declarations[i] = '' + if prop == 'stroke-dashoffset': + declarations[i] = '' + if prop == 'stroke-linejoin': + declarations[i] = '' + if prop == 'stroke-linecap': + declarations[i] = '' + if prop == 'stroke-miterlimit': + declarations[i] = '' + if self.options.apply_black_strokes is True: + if prop == 'stroke': + if val == 'none': + new_val = '#000000' + declarations[i] = prop + ':' + new_val + if self.options.reset_fill_attributes is True: + if prop == 'fill': + new_val = 'none' + declarations[i] = prop + ':' + new_val + if prop == 'fill-opacity': + new_val = '1' + declarations[i] = prop + ':' + new_val + if self.options.apply_hairlines is False: + if prop == '-inkscape-stroke': + if val == 'hairline': + del declarations[i] + if prop == 'vector-effect': + if val == 'non-scaling-stroke': + del declarations[i] + node.set('style', ';'.join(declarations)) + + # if element is group we add it to collection to remove it's style after parsing all selected items + elif isinstance(node, inkex.ShapeElement) and isinstance(node, inkex.Group): + self.groups.append(node) + +if __name__ == '__main__': + CleanupStyles().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/clones_in_perspective/clones_in_perspective.inx b/extensions/fablabchemnitz/clones_in_perspective/clones_in_perspective.inx new file mode 100644 index 00000000..35b66d60 --- /dev/null +++ b/extensions/fablabchemnitz/clones_in_perspective/clones_in_perspective.inx @@ -0,0 +1,18 @@ + + + Clones In Perspective + fablabchemnitz.de.clones_in_perspective + 5 + 0.8 + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/clones_in_perspective/clones_in_perspective.py b/extensions/fablabchemnitz/clones_in_perspective/clones_in_perspective.py new file mode 100644 index 00000000..d3ebf8f2 --- /dev/null +++ b/extensions/fablabchemnitz/clones_in_perspective/clones_in_perspective.py @@ -0,0 +1,63 @@ +#!/usr/bin/env python3 +import sys +import math +import inkex +from lxml import etree + +class clonesInPerspective(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument('--num', type = int, default = 5, help = 'Drag out center of rotation before calling') + pars.add_argument('--ratio', type = float, default = 0.9, help = 'Ratio of size of nearest neighbor to first. Must be < 1') + + def effect(self): + if len(self.svg.selected) != 1: + inkex.errormsg("Select exactly 1 thing. If necessary, group your items before.") + sys.exit(1) + xpath = list(self.svg.selected.items())[0][0] + sel = self.svg.selected[xpath] + id = sel.get('id') + + try : + tx = sel.attrib[inkex.addNS('transform-center-x','inkscape')] + except KeyError: + tx = '0.' + try : + ty = sel.attrib[inkex.addNS('transform-center-y','inkscape')] + except KeyError: + ty = '0.' + + if float(tx) == 0. and float(ty) == 0. : + inkex.errormsg("Center of rotation ist at the center of object. Please move the center first.") + sys.exit(1) + + bbox = sel.bounding_box() + width = bbox.height + height = bbox.width + cx = float(bbox.left) + 0.5 * width #Find center of selected object + cy = float(bbox.top) + 0.5 * height #Find center of selected object + tx = float(tx) + ty = float(ty) + crat = 1.0 + otx = tx + oty = ty + + parent = sel.getparent() + j = parent.index(sel) + for i in range(self.options.num) : + crat *= self.options.ratio + tx *= self.options.ratio + ty *= self.options.ratio + att = { + "id" : self.svg.get_unique_id("clone" + id), + inkex.addNS('href','xlink') : "#" + id, + inkex.addNS('transform-center-x','inkscape') : str(tx), + inkex.addNS('transform-center-y','inkscape') : str(ty), + 'transform' : ("matrix(%f,0,0,%f,%f,%f)" % (crat, crat,(1. - crat)*(cx + otx), (1. - crat)*(cy - oty))), + "width" : "100%", + "height" : "100%", + } + parent.insert(j, etree.Element('use', att)) + +if __name__ == '__main__': + clonesInPerspective().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/close_paths/close_paths.inx b/extensions/fablabchemnitz/close_paths/close_paths.inx new file mode 100644 index 00000000..6ca80f90 --- /dev/null +++ b/extensions/fablabchemnitz/close_paths/close_paths.inx @@ -0,0 +1,16 @@ + + + Close Paths + fablabchemnitz.de.close_paths + + path + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/close_paths/close_paths.py b/extensions/fablabchemnitz/close_paths/close_paths.py new file mode 100644 index 00000000..17d22439 --- /dev/null +++ b/extensions/fablabchemnitz/close_paths/close_paths.py @@ -0,0 +1,43 @@ +#!/usr/bin/env python3 +""" +Copyright (C) 2009 Nick Drobchenko, nick@cnc-club.ru +based on gcode.py (C) 2007 hugomatic... +based on addnodes.py (C) 2005,2007 Aaron Spike, aaron@ekips.org +based on dots.py (C) 2005 Aaron Spike, aaron@ekips.org + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +""" + +# +# This extension close paths by adding 'z' before each 'm' if it is not the first 'm' and it is not prepended by 'z' already. +# + +import inkex +import re +from inkex.paths import Path + +class ClosePaths(inkex.EffectExtension): + + def effect(self): + for id, node in self.svg.selected.items(): + if node.tag == inkex.addNS('path','svg'): + d = node.get('d') + d = str(Path((Path(d).to_arrays()))) + d = re.sub(r'(?i)(m[^mz]+)',r'\1 Z ',d) + d = re.sub(r'(?i)\s*z\s*z\s*',r' Z ',d) + node.set('d', d) + +if __name__ == '__main__': + ClosePaths().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/collar/.gitattributes b/extensions/fablabchemnitz/collar/.gitattributes new file mode 100644 index 00000000..dfe07704 --- /dev/null +++ b/extensions/fablabchemnitz/collar/.gitattributes @@ -0,0 +1,2 @@ +# Auto detect text files and perform LF normalization +* text=auto diff --git a/extensions/fablabchemnitz/collar/collar.inx b/extensions/fablabchemnitz/collar/collar.inx new file mode 100644 index 00000000..36606465 --- /dev/null +++ b/extensions/fablabchemnitz/collar/collar.inx @@ -0,0 +1,48 @@ + + + Collar + fablabchemnitz.de.collar + + + + 6 + 5.0 + 3.0 + 5.0 + 1 + 45.0 + 0.4 + 0.1 + + + + + + + + + + + + + false + false + 4278190335 + 65535 + + + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/collar/collar.py b/extensions/fablabchemnitz/collar/collar.py new file mode 100644 index 00000000..9595b1bc --- /dev/null +++ b/extensions/fablabchemnitz/collar/collar.py @@ -0,0 +1,753 @@ +#!/usr/bin/env python3 +# +# Copyright (C) [2021] [Joseph Zakar], [observing@gmail.com] +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +""" +Given a set of parameters for two polygons, this program generates paper +models of (1) the two polygons; (2) a collar (divided into segments if desired) +represented by a strip with tabs and score lines; and (3) wrapper(s) for +covering the tabbed strip(s). +""" + +import inkex +from inkex import Color +import math +import copy + +class pathStruct(object): + + + def __init__(self): + self.id="path0000" + self.path=[] + self.enclosed=False + + + def __str__(self): + return self.path + +class pnPoint(object): + # This class came from https://github.com/JoJocoder/PNPOLY + + + def __init__(self,p): + self.p=p + + + def __str__(self): + return self.p + + + + + def InPolygon(self,polygon,BoundCheck=False): + inside=False + if BoundCheck: + minX=polygon[0][0] + maxX=polygon[0][0] + minY=polygon[0][1] + maxY=polygon[0][1] + for p in polygon: + minX=min(p[0],minX) + maxX=max(p[0],maxX) + minY=min(p[1],minY) + maxY=max(p[1],maxY) + if self.p[0]maxX or self.p[1]maxY: + return False + j=len(polygon)-1 + for i in range(len(polygon)): + if ((polygon[i][1]>self.p[1])!=(polygon[j][1]>self.p[1]) and (self.p[0]<(polygon[j][0]-polygon[i][0])*(self.p[1]-polygon[i][1])/( polygon[j][1] - polygon[i][1] ) + polygon[i][0])): + inside =not inside + j=i + return inside + + +class Collar(inkex.EffectExtension): + + + def add_arguments(self, pars): + pars.add_argument("--usermenu") + pars.add_argument("--unit", default="in",help="Dimensional units") + pars.add_argument("--polysides", type=int, default=6,help="Number of Polygon Sides") + pars.add_argument("--poly1size", type=float, default=5.0, help="Size of Polygon 1 in dimensional units") + pars.add_argument("--poly2size", type=float, default=3.0, help="Size of Polygon 2 in dimensional units") + pars.add_argument("--collarheight", type=float, default=2.0, help="Height of collar in dimensional units") + pars.add_argument("--collarparts", type=int, default=1,help="Number of parts to divide collar into") + pars.add_argument("--dashlength", type=float, default=0.1, help="Length of dashline in dimensional units (zero for solid line)") + pars.add_argument("--tabangle", type=float, default=45.0, help="Angle of tab edges in degrees") + pars.add_argument("--tabheight", type=float, default=0.4, help="Height of tab in dimensional units") + pars.add_argument("--generate_decorative_wrapper", type=inkex.Boolean, default=False, help="Generate decorative wrapper") + pars.add_argument("--cosmetic_dash_style", type=inkex.Boolean, default=False, help="Cosmetic dash lines") + pars.add_argument("--color_solid", type=Color, default='4278190335', help="Solid line color") + pars.add_argument("--color_dash", type=Color, default='65535', help="Solid line dash") + + + #draw SVG line segment(s) between the given (raw) points + def drawline(self, dstr, name, parent, sstr=None): + line_style = {'stroke':self.options.color_solid,'stroke-width':'0.25','fill':'#eeeeee'} + if sstr == None: + stylestr = str(inkex.Style(line_style)) + else: + stylestr = sstr + el = parent.add(inkex.PathElement()) + el.path = dstr + el.style = stylestr + el.label = name + + def makepoly(self, toplength, numpoly): + r = toplength/(2*math.sin(math.pi/numpoly)) + pstr = '' + for ppoint in range(0,numpoly): + xn = r*math.cos(2*math.pi*ppoint/numpoly) + yn = r*math.sin(2*math.pi*ppoint/numpoly) + if ppoint == 0: + pstr = 'M ' + else: + pstr += ' L ' + pstr += str(xn) + ',' + str(yn) + pstr = pstr + ' Z' + return pstr + + # Thanks to Gabriel Eng for his python implementation of https://en.wikipedia.org/wiki/Line%E2%80%93line_intersection + def findIntersection(self, x1,y1,x2,y2,x3,y3,x4,y4): + px= ( (x1*y2-y1*x2)*(x3-x4)-(x1-x2)*(x3*y4-y3*x4) ) / ( (x1-x2)*(y3-y4)-(y1-y2)*(x3-x4) ) + py= ( (x1*y2-y1*x2)*(y3-y4)-(y1-y2)*(x3*y4-y3*x4) ) / ( (x1-x2)*(y3-y4)-(y1-y2)*(x3-x4) ) + return px, py + + def insidePath(self, path, p): + point = pnPoint((p.x, p.y)) + pverts = [] + for pnum in path: + pverts.append((pnum.x, pnum.y)) + isInside = point.InPolygon(pverts, True) + return isInside # True if point p is inside path + + def makescore(self, pt1, pt2, dashlength): + # Draws a dashed line of dashlength between two points + # Dash = dashlength (in inches) space followed by dashlength mark + # if dashlength is zero, we want a solid line + apt1 = inkex.paths.Line(0.0,0.0) + apt2 = inkex.paths.Line(0.0,0.0) + ddash = '' + if math.isclose(dashlength, 0.0): + #inkex.utils.debug("Draw solid dashline") + ddash = ' M '+str(pt1.x)+','+str(pt1.y)+' L '+str(pt2.x)+','+str(pt2.y) + else: + if math.isclose(pt1.y, pt2.y): + #inkex.utils.debug("Draw horizontal dashline") + if pt1.x < pt2.x: + xcushion = pt2.x - dashlength + xpt = pt1.x + ypt = pt1.y + else: + xcushion = pt1.x - dashlength + xpt = pt2.x + ypt = pt2.y + ddash = '' + done = False + while not(done): + if (xpt + dashlength*2) <= xcushion: + xpt = xpt + dashlength + ddash = ddash + ' M ' + str(xpt) + ',' + str(ypt) + xpt = xpt + dashlength + ddash = ddash + ' L ' + str(xpt) + ',' + str(ypt) + else: + done = True + elif math.isclose(pt1.x, pt2.x): + #inkex.utils.debug("Draw vertical dashline") + if pt1.y < pt2.y: + ycushion = pt2.y - dashlength + xpt = pt1.x + ypt = pt1.y + else: + ycushion = pt1.y - dashlength + xpt = pt2.x + ypt = pt2.y + ddash = '' + done = False + while not(done): + if(ypt + dashlength*2) <= ycushion: + ypt = ypt + dashlength + ddash = ddash + ' M ' + str(xpt) + ',' + str(ypt) + ypt = ypt + dashlength + ddash = ddash + ' L ' + str(xpt) + ',' + str(ypt) + else: + done = True + else: + #inkex.utils.debug("Draw sloping dashline") + if pt1.y > pt2.y: + apt1.x = pt1.x + apt1.y = pt1.y + apt2.x = pt2.x + apt2.y = pt2.y + else: + apt1.x = pt2.x + apt1.y = pt2.y + apt2.x = pt1.x + apt2.y = pt1.y + m = (apt1.y-apt2.y)/(apt1.x-apt2.x) + theta = math.atan(m) + msign = (m>0) - (m<0) + ycushion = apt2.y + dashlength*math.sin(theta) + xcushion = apt2.x + msign*dashlength*math.cos(theta) + ddash = '' + xpt = apt1.x + ypt = apt1.y + done = False + while not(done): + nypt = ypt - dashlength*2*math.sin(theta) + nxpt = xpt - msign*dashlength*2*math.cos(theta) + if (nypt >= ycushion) and (((m<0) and (nxpt <= xcushion)) or ((m>0) and (nxpt >= xcushion))): + # move to end of space / beginning of mark + xpt = xpt - msign*dashlength*math.cos(theta) + ypt = ypt - msign*dashlength*math.sin(theta) + ddash = ddash + ' M ' + str(xpt) + ',' + str(ypt) + # draw the mark + xpt = xpt - msign*dashlength*math.cos(theta) + ypt = ypt - msign*dashlength*math.sin(theta) + ddash = ddash + ' L ' + str(xpt) + ',' + str(ypt) + else: + done = True + return ddash + + def detectIntersect(self, x1, y1, x2, y2, x3, y3, x4, y4): + td = (x1-x2)*(y3-y4)-(y1-y2)*(x3-x4) + if td == 0: + # These line segments are parallel + return False + t = ((x1-x3)*(y3-y4)-(y1-y3)*(x3-x4))/td + if (0.0 <= t) and (t <= 1.0): + return True + else: + return False + + def makeTab(self, tpath, pt1, pt2, tabht, taba): + # tpath - the pathstructure containing pt1 and pt2 + # pt1, pt2 - the two points where the tab will be inserted + # tabht - the height of the tab + # taba - the angle of the tab sides + # returns the two tab points in order of closest to pt1 + tpt1 = inkex.paths.Line(0.0,0.0) + tpt2 = inkex.paths.Line(0.0,0.0) + currTabHt = tabht + currTabAngle = taba + testAngle = 1.0 + testHt = currTabHt * 0.001 + adjustTab = 0 + tabDone = False + while not tabDone: + # Let's find out the orientation of the tab + if math.isclose(pt1.x, pt2.x): + # It's vertical. Let's try the right side + if pt1.y < pt2.y: + tpt1.x = pt1.x + testHt + tpt2.x = pt2.x + testHt + tpt1.y = pt1.y + testHt/math.tan(math.radians(testAngle)) + tpt2.y = pt2.y - testHt/math.tan(math.radians(testAngle)) + pnpt1 = inkex.paths.Move(tpt1.x, tpt1.y) + pnpt2 = inkex.paths.Move(tpt2.x, tpt2.y) + if ((not tpath.enclosed) and (self.insidePath(tpath.path, pnpt1) or self.insidePath(tpath.path, pnpt2))) or \ + (tpath.enclosed and ((not self.insidePath(tpath.path, pnpt1)) and (not self.insidePath(tpath.path, pnpt2)))): + tpt1.x = pt1.x - currTabHt + tpt2.x = pt2.x - currTabHt + else: + tpt1.x = pt1.x + currTabHt + tpt2.x = pt2.x + currTabHt + tpt1.y = pt1.y + currTabHt/math.tan(math.radians(currTabAngle)) + tpt2.y = pt2.y - currTabHt/math.tan(math.radians(currTabAngle)) + else: # pt2.y < pt1.y + tpt1.x = pt1.x + testHt + tpt2.x = pt2.x + testHt + tpt1.y = pt1.y - testHt/math.tan(math.radians(testAngle)) + tpt2.y = pt2.y + testHt/math.tan(math.radians(testAngle)) + pnpt1 = inkex.paths.Move(tpt1.x, tpt1.y) + pnpt2 = inkex.paths.Move(tpt2.x, tpt2.y) + if ((not tpath.enclosed) and (self.insidePath(tpath.path, pnpt1) or self.insidePath(tpath.path, pnpt2))) or \ + (tpath.enclosed and ((not self.insidePath(tpath.path, pnpt1)) and (not self.insidePath(tpath.path, pnpt2)))): + tpt1.x = pt1.x - currTabHt + tpt2.x = pt2.x - currTabHt + else: + tpt1.x = pt1.x + currTabHt + tpt2.x = pt2.x + currTabHt + tpt1.y = pt1.y - currTabHt/math.tan(math.radians(currTabAngle)) + tpt2.y = pt2.y + currTabHt/math.tan(math.radians(currTabAngle)) + elif math.isclose(pt1.y, pt2.y): + # It's horizontal. Let's try the top + if pt1.x < pt2.x: + tpt1.y = pt1.y - testHt + tpt2.y = pt2.y - testHt + tpt1.x = pt1.x + testHt/math.tan(math.radians(testAngle)) + tpt2.x = pt2.x - testHt/math.tan(math.radians(testAngle)) + pnpt1 = inkex.paths.Move(tpt1.x, tpt1.y) + pnpt2 = inkex.paths.Move(tpt2.x, tpt2.y) + if ((not tpath.enclosed) and (self.insidePath(tpath.path, pnpt1) or self.insidePath(tpath.path, pnpt2))) or \ + (tpath.enclosed and ((not self.insidePath(tpath.path, pnpt1)) and (not self.insidePath(tpath.path, pnpt2)))): + tpt1.y = pt1.y + currTabHt + tpt2.y = pt2.y + currTabHt + else: + tpt1.y = pt1.y - currTabHt + tpt2.y = pt2.y - currTabHt + tpt1.x = pt1.x + currTabHt/math.tan(math.radians(currTabAngle)) + tpt2.x = pt2.x - currTabHt/math.tan(math.radians(currTabAngle)) + else: # pt2.x < pt1.x + tpt1.y = pt1.y - testHt + tpt2.y = pt2.y - testHt + tpt1.x = pt1.x - testHt/math.tan(math.radians(testAngle)) + tpt2.x = pt2.x + testHt/math.tan(math.radians(testAngle)) + pnpt1 = inkex.paths.Move(tpt1.x, tpt1.y) + pnpt2 = inkex.paths.Move(tpt2.x, tpt2.y) + if ((not tpath.enclosed) and (self.insidePath(tpath.path, pnpt1) or self.insidePath(tpath.path, pnpt2))) or \ + (tpath.enclosed and ((not self.insidePath(tpath.path, pnpt1)) and (not self.insidePath(tpath.path, pnpt2)))): + tpt1.y = pt1.y + currTabHt + tpt2.y = pt2.y + currTabHt + else: + tpt1.y = pt1.y - currTabHt + tpt2.y = pt2.y - currTabHt + tpt1.x = pt1.x - currTabHt/math.tan(math.radians(currTabAngle)) + tpt2.x = pt2.x + currTabHt/math.tan(math.radians(currTabAngle)) + + else: # the orientation is neither horizontal nor vertical + # Let's get the slope of the line between the points + # Because Inkscape's origin is in the upper-left corner, + # a positive slope (/) will yield a negative value + slope = (pt2.y - pt1.y)/(pt2.x - pt1.x) + # Let's get the angle to the horizontal + theta = math.degrees(math.atan(slope)) + # Let's construct a horizontal tab + seglength = math.sqrt((pt1.x-pt2.x)**2 +(pt1.y-pt2.y)**2) + if slope < 0.0: + if pt1.x < pt2.x: + tpt1.y = pt1.y - testHt + tpt2.y = pt2.y - testHt + tpt1.x = pt1.x + testHt/math.tan(math.radians(testAngle)) + tpt2.x = pt2.x - testHt/math.tan(math.radians(testAngle)) + tl1 = [('M', [pt1.x,pt1.y])] + tl1 += [('L', [tpt1.x, tpt1.y])] + ele1 = inkex.Path(tl1) + tl2 = [('M', [pt1.x,pt1.y])] + tl2 += [('L', [tpt2.x, tpt2.y])] + ele2 = inkex.Path(tl2) + thetal1 = ele1.rotate(theta, [pt1.x,pt1.y]) + thetal2 = ele2.rotate(theta, [pt2.x,pt2.y]) + tpt1.x = thetal1[1].x + tpt1.y = thetal1[1].y + tpt2.x = thetal2[1].x + tpt2.y = thetal2[1].y + pnpt1 = inkex.paths.Move(tpt1.x, tpt1.y) + pnpt2 = inkex.paths.Move(tpt2.x, tpt2.y) + if ((not tpath.enclosed) and (self.insidePath(tpath.path, pnpt1) or self.insidePath(tpath.path, pnpt2))) or \ + (tpath.enclosed and ((not self.insidePath(tpath.path, pnpt1)) and (not self.insidePath(tpath.path, pnpt2)))): + tpt1.y = pt1.y + currTabHt + tpt2.y = pt2.y + currTabHt + else: + tpt1.y = pt1.y - currTabHt + tpt2.y = pt2.y - currTabHt + tpt1.x = pt1.x + currTabHt/math.tan(math.radians(currTabAngle)) + tpt2.x = pt2.x - currTabHt/math.tan(math.radians(currTabAngle)) + tl1 = [('M', [pt1.x,pt1.y])] + tl1 += [('L', [tpt1.x, tpt1.y])] + ele1 = inkex.Path(tl1) + tl2 = [('M', [pt1.x,pt1.y])] + tl2 += [('L', [tpt2.x, tpt2.y])] + ele2 = inkex.Path(tl2) + thetal1 = ele1.rotate(theta, [pt1.x,pt1.y]) + thetal2 = ele2.rotate(theta, [pt2.x,pt2.y]) + tpt1.x = thetal1[1].x + tpt1.y = thetal1[1].y + tpt2.x = thetal2[1].x + tpt2.y = thetal2[1].y + else: # pt1.x > pt2.x + tpt1.y = pt1.y - testHt + tpt2.y = pt2.y - testHt + tpt1.x = pt1.x - testHt/math.tan(math.radians(testAngle)) + tpt2.x = pt2.x + testHt/math.tan(math.radians(testAngle)) + tl1 = [('M', [pt1.x,pt1.y])] + tl1 += [('L', [tpt1.x, tpt1.y])] + ele1 = inkex.Path(tl1) + tl2 = [('M', [pt1.x,pt1.y])] + tl2 += [('L', [tpt2.x, tpt2.y])] + ele2 = inkex.Path(tl2) + thetal1 = ele1.rotate(theta, [pt1.x,pt1.y]) + thetal2 = ele2.rotate(theta, [pt2.x,pt2.y]) + tpt1.x = thetal1[1].x + tpt1.y = thetal1[1].y + tpt2.x = thetal2[1].x + tpt2.y = thetal2[1].y + pnpt1 = inkex.paths.Move(tpt1.x, tpt1.y) + pnpt2 = inkex.paths.Move(tpt2.x, tpt2.y) + if ((not tpath.enclosed) and (self.insidePath(tpath.path, pnpt1) or self.insidePath(tpath.path, pnpt2))) or \ + (tpath.enclosed and ((not self.insidePath(tpath.path, pnpt1)) and (not self.insidePath(tpath.path, pnpt2)))): + tpt1.y = pt1.y + currTabHt + tpt2.y = pt2.y + currTabHt + else: + tpt1.y = pt1.y - currTabHt + tpt2.y = pt2.y - currTabHt + tpt1.x = pt1.x - currTabHt/math.tan(math.radians(currTabAngle)) + tpt2.x = pt2.x + currTabHt/math.tan(math.radians(currTabAngle)) + tl1 = [('M', [pt1.x,pt1.y])] + tl1 += [('L', [tpt1.x, tpt1.y])] + ele1 = inkex.Path(tl1) + tl2 = [('M', [pt1.x,pt1.y])] + tl2 += [('L', [tpt2.x, tpt2.y])] + ele2 = inkex.Path(tl2) + thetal1 = ele1.rotate(theta, [pt1.x,pt1.y]) + thetal2 = ele2.rotate(theta, [pt2.x,pt2.y]) + tpt1.x = thetal1[1].x + tpt1.y = thetal1[1].y + tpt2.x = thetal2[1].x + tpt2.y = thetal2[1].y + else: # slope > 0.0 + if pt1.x < pt2.x: + tpt1.y = pt1.y - testHt + tpt2.y = pt2.y - testHt + tpt1.x = pt1.x + testHt/math.tan(math.radians(testAngle)) + tpt2.x = pt2.x - testHt/math.tan(math.radians(testAngle)) + tl1 = [('M', [pt1.x,pt1.y])] + tl1 += [('L', [tpt1.x, tpt1.y])] + ele1 = inkex.Path(tl1) + tl2 = [('M', [pt1.x,pt1.y])] + tl2 += [('L', [tpt2.x, tpt2.y])] + ele2 = inkex.Path(tl2) + thetal1 = ele1.rotate(theta, [pt1.x,pt1.y]) + thetal2 = ele2.rotate(theta, [pt2.x,pt2.y]) + tpt1.x = thetal1[1].x + tpt1.y = thetal1[1].y + tpt2.x = thetal2[1].x + tpt2.y = thetal2[1].y + pnpt1 = inkex.paths.Move(tpt1.x, tpt1.y) + pnpt2 = inkex.paths.Move(tpt2.x, tpt2.y) + if ((not tpath.enclosed) and (self.insidePath(tpath.path, pnpt1) or self.insidePath(tpath.path, pnpt2))) or \ + (tpath.enclosed and ((not self.insidePath(tpath.path, pnpt1)) and (not self.insidePath(tpath.path, pnpt2)))): + tpt1.y = pt1.y + currTabHt + tpt2.y = pt2.y + currTabHt + else: + tpt1.y = pt1.y - currTabHt + tpt2.y = pt2.y - currTabHt + tpt1.x = pt1.x + currTabHt/math.tan(math.radians(currTabAngle)) + tpt2.x = pt2.x - currTabHt/math.tan(math.radians(currTabAngle)) + tl1 = [('M', [pt1.x,pt1.y])] + tl1 += [('L', [tpt1.x, tpt1.y])] + ele1 = inkex.Path(tl1) + tl2 = [('M', [pt1.x,pt1.y])] + tl2 += [('L', [tpt2.x, tpt2.y])] + ele2 = inkex.Path(tl2) + thetal1 = ele1.rotate(theta, [pt1.x,pt1.y]) + thetal2 = ele2.rotate(theta, [pt2.x,pt2.y]) + tpt1.x = thetal1[1].x + tpt1.y = thetal1[1].y + tpt2.x = thetal2[1].x + tpt2.y = thetal2[1].y + else: # pt1.x > pt2.x + tpt1.y = pt1.y - testHt + tpt2.y = pt2.y - testHt + tpt1.x = pt1.x - testHt/math.tan(math.radians(testAngle)) + tpt2.x = pt2.x + testHt/math.tan(math.radians(testAngle)) + tl1 = [('M', [pt1.x,pt1.y])] + tl1 += [('L', [tpt1.x, tpt1.y])] + ele1 = inkex.Path(tl1) + tl2 = [('M', [pt1.x,pt1.y])] + tl2 += [('L', [tpt2.x, tpt2.y])] + ele2 = inkex.Path(tl2) + thetal1 = ele1.rotate(theta, [pt1.x,pt1.y]) + thetal2 = ele2.rotate(theta, [pt2.x,pt2.y]) + tpt1.x = thetal1[1].x + tpt1.y = thetal1[1].y + tpt2.x = thetal2[1].x + tpt2.y = thetal2[1].y + pnpt1 = inkex.paths.Move(tpt1.x, tpt1.y) + pnpt2 = inkex.paths.Move(tpt2.x, tpt2.y) + if ((not tpath.enclosed) and (self.insidePath(tpath.path, pnpt1) or self.insidePath(tpath.path, pnpt2))) or \ + (tpath.enclosed and ((not self.insidePath(tpath.path, pnpt1)) and (not self.insidePath(tpath.path, pnpt2)))): + tpt1.y = pt1.y + currTabHt + tpt2.y = pt2.y + currTabHt + else: + tpt1.y = pt1.y - currTabHt + tpt2.y = pt2.y - currTabHt + tpt1.x = pt1.x - currTabHt/math.tan(math.radians(currTabAngle)) + tpt2.x = pt2.x + currTabHt/math.tan(math.radians(currTabAngle)) + tl1 = [('M', [pt1.x,pt1.y])] + tl1 += [('L', [tpt1.x, tpt1.y])] + ele1 = inkex.Path(tl1) + tl2 = [('M', [pt1.x,pt1.y])] + tl2 += [('L', [tpt2.x, tpt2.y])] + ele2 = inkex.Path(tl2) + thetal1 = ele1.rotate(theta, [pt1.x,pt1.y]) + thetal2 = ele2.rotate(theta, [pt2.x,pt2.y]) + tpt1.x = thetal1[1].x + tpt1.y = thetal1[1].y + tpt2.x = thetal2[1].x + tpt2.y = thetal2[1].y + # Check to see if any tabs intersect each other + if self.detectIntersect(pt1.x, pt1.y, tpt1.x, tpt1.y, pt2.x, pt2.y, tpt2.x, tpt2.y): + # Found an intersection. + if adjustTab == 0: + # Try increasing the tab angle in one-degree increments + currTabAngle = currTabAngle + 1.0 + if currTabAngle > 88.0: # We're not increasing the tab angle above 89 degrees + adjustTab = 1 + currTabAngle = taba + if adjustTab == 1: + # So, try reducing the tab height in 20% increments instead + currTabHt = currTabHt - tabht*0.2 # Could this lead to a zero tab_height? + if currTabHt <= 0.0: + # Give up + currTabHt = tabht + adjustTab = 2 + if adjustTab == 2: + tabDone = True # Just show the failure + else: + tabDone = True + + return tpt1,tpt2 + + def effect(self): + layer = self.svg.get_current_layer() + scale = self.svg.unittouu('1'+self.options.unit) + polysides = int(self.options.polysides) + poly1size = float(self.options.poly1size) * scale + poly2size = float(self.options.poly2size) * scale + collarht = float(self.options.collarheight) * scale + partcnt = int(self.options.collarparts) + tab_angle = float(self.options.tabangle) + tab_height = float(self.options.tabheight) * scale + dashlength = float(self.options.dashlength) * scale + polylarge = max(poly1size, poly2size) # Larger of the two polygons + polysmall = min(poly1size, poly2size) # Smaller of the two polygons + polysmallR = polysmall/2 + polysmallr = polysmallR*math.cos(math.pi/polysides) + polysmalltabht = tab_height + if polysmallr < polysmalltabht: + polysmalltabht = polysmallr + wpaths = [] + done = 0 + # We go through this loop twice + # First time for the wrapper / decorative strip + # Second time for the model, scorelines, and the lids + while done < 2: + w1 = (polylarge)*(math.sin(math.pi/polysides)) + w2 = (polysmall)*(math.sin(math.pi/polysides)) + if done == 0: + # First time through, init the storage areas + pieces = [] + nodes = [] + nd = [] + for i in range(4): + nd.append(inkex.paths.Line(0.0,0.0)) + else: + # Second time through, empty the storage areas + i = 0 + while i < polysides: + j = 0 + while j < 4: + del pieces[i][0] + j = j + 1 + i = i + 1 + i = 0 + while len(pieces) > 0: + del pieces[0] + i = i + 1 + i = 0 + while i < 4: + del nodes[0] + i = i + 1 + for pn in range(polysides): + nodes.clear() + #what we need here is to skip the rotatation and just move the x and y if there is no difference between the polygon sizes. + #Added by Sue to handle equal polygons + if poly1size == poly2size: + nd[0].x = pn * w1 + nd[0].y = collarht + nd[1].x = nd[0].x + w1 + nd[1].y = nd[0].y + nd[2].x = nd[1].x + nd[2].y = nd[0].y - collarht + nd[3].x = nd[0].x + nd[3].y = nd[2].y + else: + if pn == 0: + nd[3].x = -w2/2 + nd[3].y = (polysmall/2)*math.cos(math.pi/polysides) + nd[0].x = -w1/2 + nd[0].y = (polylarge/2)*math.cos(math.pi/polysides) + vlen = math.sqrt(collarht**2 + (nd[0].y-nd[3].y)**2) + nd[0].y = nd[0].y + (vlen-(nd[0].y-nd[3].y)) + nd[2].x = w2/2 + nd[2].y = nd[3].y + nd[1].x = w1/2 + nd[1].y = nd[0].y + ox,oy = self.findIntersection(nd[0].x,nd[0].y,nd[3].x,nd[3].y,nd[1].x,nd[1].y,nd[2].x,nd[2].y) + Q2 = math.degrees(math.atan((nd[0].y - oy)/(w1/2 - ox))) + Q1 = 90 - Q2 + else: + dl = '' + for j in range(4): + if j == 0: + dl += 'M ' + else: + dl += ' L ' + dl += str(nd[j].x) + ',' + str(nd[j].y) + dl += ' Z' + p1 = inkex.paths.Path(path_d=dl) + p2 = p1.rotate(-2*Q1, (ox,oy)) + for j in range(4): + nd[j].x = p2[j].x + nd[j].y = p2[j].y + for i in range(4): + nodes.append(copy.deepcopy(nd[i])) + pieces.append(copy.deepcopy(nodes)) + dscores = [] + if done == 0: + wpath = pathStruct() # We'll need this for makeTab + wpath.id = "c1" + for pc in range(partcnt): + dwrap = '' # Create the wrapper + dscores.clear() + sidecnt = math.ceil(polysides/partcnt) + if pc == partcnt - 1: + # Last time through creates the remainder of the pieces + sidecnt = polysides - math.ceil(polysides/partcnt)*pc + startpc = pc*math.ceil(polysides/partcnt) + endpc = startpc + sidecnt + for pn in range(startpc, endpc): + # First half + if(pn == startpc): + ppt0 = inkex.paths.Move(pieces[pn][0].x,pieces[pn][0].y) + dwrap +='M '+str(ppt0.x)+','+str(ppt0.y) + # We're also creating wpath for later use in creating the model + wpath.path.append(ppt0) + ppt1 = inkex.paths.Line(pieces[pn][1].x,pieces[pn][1].y) + dwrap +=' L '+str(ppt1.x)+','+str(ppt1.y) + wpath.path.append(ppt1) + if pn < endpc - 1: + # Put scorelines across the collar + ppt2 = inkex.paths.Line(pieces[pn][2].x,pieces[pn][2].y) + spaths = self.makescore(ppt1, ppt2,dashlength) + dscores.append(spaths) + for pn in range(endpc-1, startpc-1, -1): + # Second half + if(pn == (endpc-1)): + ppt2 = inkex.paths.Line(pieces[pn][2].x,pieces[pn][2].y) + dwrap +=' L '+str(pieces[pn][2].x)+','+str(pieces[pn][2].y) + wpath.path.append(inkex.paths.Line(pieces[pn][2].x,pieces[pn][2].y)) + ppt3 = inkex.paths.Line(pieces[pn][3].x,pieces[pn][3].y) + dwrap +=' L '+str(ppt3.x)+','+str(ppt3.y) + wpath.path.append(inkex.paths.Line(pieces[pn][3].x,pieces[pn][3].y)) + dwrap +=' Z' # Close off the wrapper's path + wpath.path.append(ppt0) + if math.isclose(dashlength, 0.0): + # lump together all the score lines + dscore = '' + for dndx in range(len(dscores)): + if dndx == 0: + dscore = dscores[dndx][1:] + else: + dscore += dscores[dndx] + group = inkex.elements._groups.Group() + group.label = 'group'+str(pc)+'ws' + if self.options.generate_decorative_wrapper is True: + self.drawline(dwrap,'wrapper'+str(pc),group,sstr="fill:#ffdddd;stroke:{};stroke-width:0.25".format(self.options.color_solid)) # Output the wrapper + self.drawline(dscore,'score'+str(pc)+'w',group,sstr="fill:#ffdddd;stroke:{};stroke-width:0.25".format(self.options.color_dash)) # Output the scorelines separately + layer.append(group) + else: + # lump together all the score lines with the model + for dndx in dscores: + dwrap = dwrap + dndx + self.drawline(dwrap,'wrapper'+str(pc),layer,sstr="fill:#ffdddd;stroke:{};stroke-width:0.25".format(self.options.color_solid)) # Output the wrapper + wpaths.append(copy.deepcopy(wpath)) + wpath.path.clear() + done = 1 + else: + # Create the model + for pc in range(partcnt): + dprop = '' + dscores.clear() + sidecnt = math.ceil(polysides/partcnt) + if pc == partcnt - 1: + sidecnt = polysides - math.ceil(polysides/partcnt)*pc + startpc = pc*math.ceil(polysides/partcnt) + endpc = startpc + sidecnt + for pn in range(startpc, endpc): + # First half + if pn == startpc: + dprop = 'M '+str(pieces[pn][0].x)+','+str(pieces[pn][0].y) + cpt1 = inkex.paths.Move(pieces[pn][0].x, pieces[pn][0].y) + cpt2 = inkex.paths.Move(pieces[pn][1].x, pieces[pn][1].y) + tabpt1, tabpt2 = self.makeTab(wpaths[pc], cpt1, cpt2, tab_height, tab_angle) + dprop +=' L '+str(tabpt1.x)+','+str(tabpt1.y) + dprop +=' L '+str(tabpt2.x)+','+str(tabpt2.y) + dprop += ' L '+str(pieces[pn][1].x)+','+str(pieces[pn][1].y) + # As long as we're here, create a scoreline along the tab... + spaths = self.makescore(pieces[pn][0], pieces[pn][1],dashlength) + dscores.append(spaths) + # ...and across the collar + spaths = self.makescore(pieces[pn][1], pieces[pn][2],dashlength) + dscores.append(spaths) + for pn in range(endpc-1, startpc-1, -1): + # Second half + if(pn == (endpc-1)): + # Since we're starting on the last piece, put a tab on the end of it, too + cpt1 = inkex.paths.Move(pieces[pn][1].x, pieces[pn][1].y) + cpt2 = inkex.paths.Move(pieces[pn][2].x, pieces[pn][2].y) + tabpt1, tabpt2 = self.makeTab(wpaths[pc], cpt1, cpt2, tab_height, tab_angle) + dprop +=' L '+str(tabpt1.x)+','+str(tabpt1.y) + dprop +=' L '+str(tabpt2.x)+','+str(tabpt2.y) + # Create a scoreline along the tab + #spaths = self.makescore(pieces[pn][1], pieces[pn][2],dashlength) + #dscores.append(spaths) + dprop +=' L '+str(pieces[pn][2].x)+','+str(pieces[pn][2].y) + cpt1 = inkex.paths.Move(pieces[pn][2].x, pieces[pn][2].y) + cpt2 = inkex.paths.Move(pieces[pn][3].x, pieces[pn][3].y) + tabpt1, tabpt2 = self.makeTab(wpaths[pc], cpt1, cpt2, polysmalltabht, tab_angle) + dprop +=' L '+str(tabpt1.x)+','+str(tabpt1.y) + dprop +=' L '+str(tabpt2.x)+','+str(tabpt2.y) + dprop += ' L '+str(pieces[pn][3].x)+','+str(pieces[pn][3].y) + # Create a scoreline along the tab + spaths = self.makescore(pieces[pn][2], pieces[pn][3],dashlength) + dscores.append(spaths) + dprop += ' Z' # Close off the model's path + # lump together all the score lines + dscore = '' + for dndx in range(len(dscores)): + if dndx == 0: + dscore = dscores[dndx][1:] + else: + dscore += dscores[dndx] + group = inkex.elements._groups.Group() + group.label = 'group'+str(pc)+'ms' + self.drawline(dprop,'model'+str(pc),group,sstr='stroke:{};stroke-width:0.25;fill:#eeeeee'.format(self.options.color_solid)) # Output the model + + #self.drawline(dprop,'model'+str(pc),group,sstr=None) # Output the model + #self.drawline(dscore,'score'+str(pc)+'m',group,sstr=None) # Output the scorelines separately + + + if dscore != '': + dscore_style = 'stroke:{};stroke-width:0.25;fill:#eeeeee'.format(self.options.color_dash) + if self.options.cosmetic_dash_style is True: + dscore_style += ';stroke-dasharray:{}'.format(3, 3) + self.drawline(dscore,'score'+str(pc),group,dscore_style) # Output the scorelines separately + + layer.append(group) + + # At this point, we can generate the top and bottom polygons + # r = sidelength/(2*sin(PI/numpoly)) + self.drawline(self.makepoly(w1, polysides),'biglid',layer,sstr=None) # Output the bigger polygon + sp = self.makepoly(w2, polysides) + self.drawline(sp,'smalllid',layer,sstr=None) # Output the smaller polygon + done = 2 + +if __name__ == '__main__': + Collar().run() diff --git a/extensions/fablabchemnitz/color_harmony/.gitignore b/extensions/fablabchemnitz/color_harmony/.gitignore new file mode 100644 index 00000000..cd4c22c4 --- /dev/null +++ b/extensions/fablabchemnitz/color_harmony/.gitignore @@ -0,0 +1 @@ +*__pycache__* diff --git a/extensions/fablabchemnitz/color_harmony/color_harmony.inx b/extensions/fablabchemnitz/color_harmony/color_harmony.inx new file mode 100644 index 00000000..07578082 --- /dev/null +++ b/extensions/fablabchemnitz/color_harmony/color_harmony.inx @@ -0,0 +1,87 @@ + + + Color Harmony + fablabchemnitz.de.color_harmony + + + + + + + + + + + + + + + + 50 + + + + + + + + + + false + false + false + + + false + false + false + + + false + false + false + + + false + + + 0.1 + + 10 + + + + + + + + + true + + + + + + + + + + My Palette + + + + + + + all + + + + + + Generate color harmonies and save as palette file + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/color_harmony/color_harmony.py b/extensions/fablabchemnitz/color_harmony/color_harmony.py new file mode 100644 index 00000000..4802b486 --- /dev/null +++ b/extensions/fablabchemnitz/color_harmony/color_harmony.py @@ -0,0 +1,318 @@ +#!/usr/bin/env python3 + +# Color Harmony - Inkscape extension to generate +# palettes of colors that go well together +# +# Version 0.2 "golem" +# +# Copyright (C) 2009-2018 Ilya Portnov +# (original 'palette-editor' tool, version 0.0.7) +# 2020 Maren Hachmann (extension-ification) +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + +""" +This extension allows you to automatically add guides to your Inkscape documents. +""" + +#from math import sqrt +#import types +import inkex +from inkex import Group, Rectangle +from inkex.colors import is_color +from color_harmony.colorplus import ColorPlus +from color_harmony.harmonies import * +from color_harmony.shades import * + + +class ColorHarmony(inkex.EffectExtension): + """Generate palettes of colors that go well together""" + + color = '' + + def add_arguments(self, pars): + # General options + pars.add_argument('--tab', default='render', help='Extension functionality to use') # options: render, save, colorize + + # Render tab options + pars.add_argument('--harmony', default="five", help='Color harmony to generate, options: from_raster, just_opposite, split_complementary, three, four, rectangle, five, similar_3, similar_5, similar_and_opposite') + pars.add_argument('--sort', default="by_hue", help="Method to sort the palette by, options: by_hue, by_saturation, by_value, hue_contiguous") + pars.add_argument('--factor', default=50, type=int, help="Factor to affect the result, between 1 and 100. Default is 50. This modifies the angle between the resulting colors on the color wheel.") + pars.add_argument('--size', default=10, help="Size of the generated palette squares") + pars.add_argument('--unit', default='mm', help='Units') # options: mm, cm, in, px, pt, pc + pars.add_argument('--delete_existing', type=inkex.Boolean, help='Delete existing palettes before generating a new one') + + # Shading: cooler, warmer, saturation, value, chroma, luma, hue, hue_luma, luma_plus_chroma, luma_minus_chroma + pars.add_argument( '--cooler', type=inkex.Boolean, help='Add shades with cooler color temperature') + pars.add_argument( '--warmer', type=inkex.Boolean, help='Add shades with warmer color temperature') + pars.add_argument( '--saturation', type=inkex.Boolean, help='Add shades with saturation steps') + pars.add_argument( '--value', type=inkex.Boolean, help='Add shades with value steps') + pars.add_argument( '--chroma', type=inkex.Boolean, help='Add shades with chroma steps') + pars.add_argument( '--luma', type=inkex.Boolean, help='Add shades with luma steps') + pars.add_argument( '--hue', type=inkex.Boolean, help='Add shades with hue steps') + pars.add_argument( '--hue_luma', type=inkex.Boolean, help='Add shades with hue and luma steps') + pars.add_argument( '--luma_plus_chroma', type=inkex.Boolean, help='Add shades with luma plus chroma steps') + pars.add_argument( '--luma_minus_chroma', type=inkex.Boolean, help='Add shades with luma minus chroma steps') + pars.add_argument('--step_width', type=float, default=0.1, help='Shader step width') # TODO: find out what range this can take on, and adjust min, max, default in inx + + # Save tab options + pars.add_argument('--palette_format', default='gimp', help='Palette file format') + # options: gimp, krita, scribus + pars.add_argument('--palette_folder', help="Folder to save the palette file in") + pars.add_argument('--palette_name', help="Name of the palette") + + # Colorize tab options + # no options currently + + + def effect(self): + + if self.options.tab == "render": + + if len(self.svg.selected) == 1: + for obj_id, obj in self.svg.selected.items(): + fill = obj.style.get("fill") + if is_color(fill): + if self.options.delete_existing: + self.delete_existing_palettes() + self.color = ColorPlus(fill) + self.options.factor = self.options.factor/100 + colors = self.create_harmony() + shades = self.create_shades(colors) + palettes = [colors] + shades + + for i in range(len(palettes)): + self.render_palette(palettes[i], i) + else: + raise inkex.AbortExtension( + "Please select an object with a plain fill color.") + else: + raise inkex.AbortExtension( + "Please select one object.") + elif self.options.tab == "save": + palettes = self.get_palettes_in_doc() + if len(palettes) >= 1: + self.save_palette(palettes[0]) + else: + raise inkex.AbortExtension( + "There is no rendered palette in the document. Please render a palette using the first tab of the dialog before you try to save it.") + elif self.options.tab == "colorize": + if len(self.svg.selected) > 0: + self.colorize() + else: + raise inkex.AbortExtension( + "Please select an object to colorize!") + + + # METHODS FOR EACH TAB + # -------------------- + + # Render tab + # ========== + def create_harmony(self): + + harmony_functions = { + "from_raster": self.palette_from_raster, # not implemented yet + "just_opposite": self.opposite, + "split_complementary": self.splitcomplementary, + "three": self.nhues3, + "four": self.nhues4, + "rectangle": self.rectangle, + "five": self.fivecolors, + "similar_3": self.similar_3, + "similar_5": self.similar_5, + "similar_and_opposite": self.similaropposite, + } + + # use appropriate function for the selected tab + colors = harmony_functions[self.options.harmony](self.color) + colors = self.sort_colors(colors) + + return colors + + def render_palette(self, colors, shift): + size = self.svg.unittouu(str(self.options.size)+self.options.unit) + top = 0 + shift * size + left = 0 + + layer = self.svg.get_current_layer() if self.svg.get_current_layer() is not None else self.document.getroot() + + group_attribs = {inkex.addNS('label', 'inkscape'): "Palette ({harmony}, {color}) ".format(color=self.color, harmony=self.options.harmony)} + palette_group = Group(**group_attribs) + + for color in colors: + palette_field = Rectangle(x=str(left), + y=str(top), + width=str(size), + height=str(size)) + palette_field.style = {'fill': color} + palette_group.add(palette_field) + left += size + + palette_group.transform.add_translate(0, self.svg.height + size) + + layer.add(palette_group) + + def palette_from_raster(self, color): + # TODO: implement + return [] + + def opposite(self, color): + colors = opposite(color) + return colors + + def splitcomplementary(self, color): + colors = splitcomplementary(color, self.options.factor) + return colors + + def nhues3(self, color): + colors = nHues(color, 3) + return colors + + def nhues4(self, color): + colors = nHues(color, 4) + return colors + + def rectangle(self, color): + colors = rectangle(color, self.options.factor) + return colors + + def fivecolors(self, color): + colors = fiveColors(color, self.options.factor) + return colors + + def similar_3(self, color): + colors = similar(color, 3, self.options.factor) + return colors + + def similar_5(self, color): + colors = similar(color, 5, self.options.factor) + return colors + + def similaropposite(self, color): + colors = similarAndOpposite(color, self.options.factor) + return colors + + def create_shades(self, colors): + shades = [] + shading_options = { + "cooler": cooler, + "warmer": warmer, + "saturation": saturation, + "value": value, + "chroma": chroma, + "luma": luma, + "hue": hue, + "hue_luma": hue_luma, + "luma_plus_chroma": luma_plus_chroma, + "luma_minus_chroma": luma_minus_chroma, + } + + for option, function in shading_options.items(): + if vars(self.options)[option] == True: + # shades are created per color, + # but we want to get one palette per shading step + shaded_colors = [] + for i in range(len(colors)): + shaded_colors.append(function(colors[i], self.options.step_width)) + + pals = [list(a) for a in zip(*shaded_colors)] + + shades += pals + return shades + + def delete_existing_palettes(self): + """Delete all palettes in the document""" + + for palette in self.get_palettes_in_doc(): + palette.delete() + + # Save tab + # ======== + def save_palette(self, palette): + # TODO: implement + # if not hasattr(self.palette, 'name'): + # if type(file_w) in [str, unicode]: + # self.palette.name = basename(file_w) + # else: + # self.palette.name='Colors' + pass + + + # Colorize tab + # ============ + + def colorize(self): + # TODO: implement + pass + + # HELPER FUNCTIONS + # ---------------- + + def get_palettes_in_doc(self): + palettes = [] + for group in self.svg.findall('.//svg:g'): + if group.get('inkscape:label').startswith('Palette ('): + palettes.append(group) + return palettes + + def sort_colors(self, colors): + if self.options.sort == "by_hue": + colors.sort(key=lambda color: color.to_hsv()[0]) + elif self.options.sort == "by_saturation": + colors.sort(key=lambda color: color.to_hsv()[1]) + elif self.options.sort == "by_value": + colors.sort(key=lambda color: color.to_hsv()[2]) + # this option looks nicer when the palette colors are similar red tones + # some of which have a hue close to 0 + # and some of which have a hue close to 1 + elif self.options.sort == "hue_contiguous": + # sort by hue first + colors.sort(key=lambda color: color.to_hsv()[0]) + # now find out if the hues are maybe clustered around the 0 - 1 boundary + hues = [color.to_hsv()[0] for color in colors] + start_hue = 0 + end_hue = 0 + max_dist = 0 + for i in range(len(colors)-1): + h1 = hues[i] + h2 = hues[i+1] + cur_dist = h2-h1 + if cur_dist > max_dist and self.no_colors_in_between(h1, h2, hues): + max_dist = cur_dist + start_hue = h2 + for i in range(len(colors)): + sorting_hue = hues[i] - start_hue + if sorting_hue > 1: + sorting_hue -=1 + elif sorting_hue < 0: + sorting_hue += 1 + hues[i] = sorting_hue + sorted_colors = [color for hue, color in sorted(zip(hues,colors))] + colors = sorted_colors + else: + raise inkex.AbortExtension( + "Please select one of the following sorting options: by_hue, by_saturation, by_value.") + return colors + + def no_colors_in_between(self, hue1, hue2, hues): + for hue in hues: + if hue > hue1 and hue < hue2: + return False + return True + +if __name__ == '__main__': + ColorHarmony().run() diff --git a/extensions/fablabchemnitz/color_harmony/color_harmony/__init__.py b/extensions/fablabchemnitz/color_harmony/color_harmony/__init__.py new file mode 100644 index 00000000..1bb8bf6d --- /dev/null +++ b/extensions/fablabchemnitz/color_harmony/color_harmony/__init__.py @@ -0,0 +1 @@ +# empty diff --git a/extensions/fablabchemnitz/color_harmony/color_harmony/colorplus.py b/extensions/fablabchemnitz/color_harmony/color_harmony/colorplus.py new file mode 100644 index 00000000..d9579c77 --- /dev/null +++ b/extensions/fablabchemnitz/color_harmony/color_harmony/colorplus.py @@ -0,0 +1,260 @@ +#!/usr/bin/env python +# coding=utf-8 +# +# Copyright (C) 2009-2018 Ilya Portnov +# (original 'palette-editor' tool, version 0.0.7) +# 2020 Maren Hachmann (extension-ification) +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + +from math import cos, acos, sqrt, pi +import colorsys +from inkex.colors import Color + +_HCY_RED_LUMA = 0.299 +_HCY_GREEN_LUMA = 0.587 +_HCY_BLUE_LUMA = 0.114 + +class ColorPlus(Color): + + #HCYwts = 0.299, 0.587, 0.114 + + ## HCY colour space. + # + # Copy&Paste from https://raw.githubusercontent.com/mypaint/mypaint/master/gui/colors/uicolor.py + # Copyright (C) 2012-2013 by Andrew Chadwick + # + + # Frequently referred to as HSY, Hue/Chroma/Luma, HsY, HSI etc. It can be + # thought of as a cylindrical remapping of the YCbCr solid: the "C" term is the + # proportion of the maximum permissible chroma within the RGB gamut at a given + # hue and luma. Planes of constant Y are equiluminant. + # + # ref https://code.google.com/p/colour-space-viewer/ + # ref git://anongit.kde.org/kdelibs in kdeui/colors/kcolorspaces.cpp + # ref http://blog.publicfields.net/2011/12/rgb-hue-saturation-luma.html + # ref Joblove G.H., Greenberg D., Color spaces for computer graphics. + # ref http://www.cs.rit.edu/~ncs/color/t_convert.html + # ref http://en.literateprograms.org/RGB_to_HSV_color_space_conversion_(C) + # ref http://lodev.org/cgtutor/color.html + # ref Levkowitz H., Herman G.T., "GLHS: a generalized lightness, hue, and + # saturation color model" + + # For consistency, use the same weights that the Color and Luminosity layer + # blend modes use, as also used by brushlib's Colorize brush blend mode. We + # follow http://www.w3.org/TR/compositing/ here. BT.601 YCbCr has a nearly + # identical definition of luma. + + def __init__(self, color=None, space='rgb'): + super().__init__(color) + + def to_hcy(self): + """RGB → HCY: R,G,B,H,C,Y ∈ [0, 1] + + :param rgb: Color expressed as an additive RGB triple. + :type rgb: tuple (r, g, b) where 0≤r≤1, 0≤g≤1, 0≤b≤1. + :rtype: tuple (h, c, y) where 0≤h<1, but 0≤c≤2 and 0≤y≤1. + + """ + r, g, b = self.to_floats() + + # Luma is just a weighted sum of the three components. + y = _HCY_RED_LUMA*r + _HCY_GREEN_LUMA*g + _HCY_BLUE_LUMA*b + + # Hue. First pick a sector based on the greatest RGB component, then add + # the scaled difference of the other two RGB components. + p = max(r, g, b) + n = min(r, g, b) + d = p - n # An absolute measure of chroma: only used for scaling. + if n == p: + h = 0.0 + elif p == r: + h = (g - b)/d + if h < 0: + h += 6.0 + elif p == g: + h = ((b - r)/d) + 2.0 + else: # p==b + h = ((r - g)/d) + 4.0 + h /= 6.0 + + # Chroma, relative to the RGB gamut envelope. + if r == g == b: + # Avoid a division by zero for the achromatic case. + c = 0.0 + else: + # For the derivation, see the GLHS paper. + c = max((y-n)/y, (p-y)/(1-y)) + return h, c, y + + @staticmethod + def from_hcy(h, c, y): + """HCY → RGB: R,G,B,H,C,Y ∈ [0, 1] + + :param hcy: Color expressed as a Hue/relative-Chroma/Luma triple. + :type hcy: tuple (h, c, y) where 0≤h<1, but 0≤c≤2 and 0≤y≤1. + :rtype: ColorPlus object. + + >>> n = 32 + >>> diffs = [sum( [abs(c1-c2) for c1, c2 in + ... zip( HCY_to_RGB(RGB_to_HCY([r/n, g/n, b/n])), + ... [r/n, g/n, b/n] ) ] ) + ... for r in range(int(n+1)) + ... for g in range(int(n+1)) + ... for b in range(int(n+1))] + >>> sum(diffs) < n*1e-6 + True + + """ + + if c == 0: + return y, y, y + + h %= 1.0 + h *= 6.0 + if h < 1: + #implies (p==r and h==(g-b)/d and g>=b) + th = h + tm = _HCY_RED_LUMA + _HCY_GREEN_LUMA * th + elif h < 2: + #implies (p==g and h==((b-r)/d)+2.0 and b=g) + th = h - 2.0 + tm = _HCY_GREEN_LUMA + _HCY_BLUE_LUMA * th + elif h < 4: + #implies (p==b and h==((r-g)/d)+4.0 and r=g) + th = h - 4.0 + tm = _HCY_BLUE_LUMA + _HCY_RED_LUMA * th + else: + #implies (p==r and h==(g-b)/d and g= y: + p = y + y*c*(1-tm)/tm + o = y + y*c*(th-tm)/tm + n = y - (y*c) + else: + p = y + (1-y)*c + o = y + (1-y)*c*(th-tm)/(1-tm) + n = y - (1-y)*c*tm/(1-tm) + + # Back to RGB order + if h < 1: r, g, b = p, o, n + elif h < 2: r, g, b = o, p, n + elif h < 3: r, g, b = n, p, o + elif h < 4: r, g, b = n, o, p + elif h < 5: r, g, b = o, n, p + else: r, g, b = p, n, o + + return ColorPlus([255*r, 255*g, 255*b]) + + def to_hsv(self): + r, g, b = self.to_floats() + eps = 0.001 + if abs(max(r,g,b)) < eps: + return (0,0,0) + return colorsys.rgb_to_hsv(r, g, b) + + @staticmethod + def from_hsv(h, s, v): + r, g, b = colorsys.hsv_to_rgb(h, s, v) + return ColorPlus([255*r, 255*g, 255*b]) + + # TODO: everything below is not updated yet, maybe not really needed + def hex(self): + r,g,b = self.getRGB() + return "#{:02x}{:02x}{:02x}".format(r,g,b) + + def getRgbString(self): + r,g,b = self.getRGB() + return "rgb({}, {}, {})".format(r,g,b) + + def getHsvString(self): + h,s,v = self.getHSV() + return "hsv({}, {}, {})".format(h,s,v) + + def invert(self): + r, g, b = self._rgb + return Color(255-r, 255-g, 255-b) + + def darker(clr, q): + h,s,v = clr.getHSV() + v = clip(v-q) + return hsv(h,s,v) + + def lighter(clr, q): + h,s,v = clr.getHSV() + v = clip(v+q) + return hsv(h,s,v) + + def saturate(clr, q): + h,s,v = clr.getHSV() + s = clip(s+q) + return hsv(h,s,v) + + def desaturate(clr, q): + h,s,v = clr.getHSV() + s = clip(s-q) + return hsv(h,s,v) + + def increment_hue(clr, q): + h,s,v = clr.getHSV() + h += q + if h > 1.0: + h -= 1.0 + if h < 1.0: + h += 1.0 + return hsv(h,s,v) + + def contrast(clr, q): + h,s,v = clr.getHSV() + v = (v - 0.5)*(1.0 + q) + 0.5 + v = clip(v) + return hsv(h,s,v) + + def linear(x, y, q): + return (1.-q)*x + q*y + + def linear3(v1, v2, q): + x1, y1, z1 = v1 + x2, y2, z2 = v2 + return (linear(x1, x2, q), linear(y1, y2, q), linear(z1, z2, q)) + + def circular(h1, h2, q, circle=1.0): + #print("Src hues: "+ str((h1, h2))) + d = h2 - h1 + if h1 > h2: + h1, h2 = h2, h1 + d = -d + q = 1.0 - q + if d > circle/2.0: + h1 = h1 + circle + h = linear(h1, h2, q) + else: + h = h1 + q*d + if h >= circle: + h -= circle + #print("Hue: "+str(h)) + return h diff --git a/extensions/fablabchemnitz/color_harmony/color_harmony/export.py b/extensions/fablabchemnitz/color_harmony/color_harmony/export.py new file mode 100644 index 00000000..a391d5fe --- /dev/null +++ b/extensions/fablabchemnitz/color_harmony/color_harmony/export.py @@ -0,0 +1,139 @@ +#!/usr/bin/env python +# coding=utf-8 +# +# Copyright (C) 2009-2018 Ilya Portnov +# (original 'palette-editor' tool, version 0.0.7) +# 2020 Maren Hachmann (extension-ification) +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + +from os.path import join, basename +from lxml import etree as ET +from zipfile import ZipFile, ZIP_DEFLATED + + +class PaletteFile(object) + + def __init__(self, name, colors, filename, folder): + self.colors = colors + if name != "": + self.name = name + else: + self.name = "Palette" + self.folder = folder + + def save(self, format): + FORMATS = {'gimp': [build_gpl, 'gpl'], + 'scribus': [build_scribus_xml, 'xml'], + 'krita': [build_kpl, 'kpl'], + 'css': [build_css, 'css'], + 'android_xml': [build_android_xml, 'xml'], + } + + if os.path.exists(self.folder): + # save with given file name + pass + + def build_gpl(self): + # TODO: fix + palette_string = (u"Name: {}\n".format(self.palette.name).encode('utf-8')) + if hasattr(self.palette, 'ncols') and self.palette.ncols: + palette_string += 'Columns: %s\n' % self.palette.ncols + for key,value in self.palette.meta.items(): + if key != "Name": + palette_string += u"# {}: {}\n".format(key, value).encode('utf-8') + palette_string += '#\n' + for row in self.palette.slots: + for slot in row: + n = slot.name + r, g, b = slot.color.getRGB() + s = '%d %d %d %s\n' % (r, g, b, n) + palette_string += s + for key,value in slot.color.meta.items(): + if key != "Name": + palette_string += u"# {}: {}\n".format(key, value).encode('utf-8') + return palette_string + + def build_kpl(self): + # TODO: fix (and don't save it here, only build) + with ZipFile(file_w, 'w', ZIP_DEFLATED) as zf: + zf.writestr("mimetype", MIMETYPE) + + xml = ET.Element("Colorset") + xml.attrib['version'] = '1.0' + xml.attrib['columns'] = str(self.palette.ncols) + xml.attrib['name'] = self.palette.name + xml.attrib['comment'] = self.palette.meta.get("Comment", "Generated by Palette Editor") + + for i,row in enumerate(self.palette.slots): + for j,slot in enumerate(row): + color = slot.color + name = color.name + default_name = "Swatch-{}-{}".format(i,j) + if not name: + name = default_name + + elem = ET.SubElement(xml, "ColorSetEntry") + elem.attrib['spot'] = color.meta.get("Spot", "false") + elem.attrib['id'] = default_name + elem.attrib['name'] = name + elem.attrib['bitdepth'] = 'U8' + + r,g,b = color.getRGB1() + srgb = ET.SubElement(elem, "sRGB") + srgb.attrib['r'] = str(r) + srgb.attrib['g'] = str(g) + srgb.attrib['b'] = str(b) + + tree = ET.ElementTree(xml) + tree_str = ET.tostring(tree, encoding='utf-8', pretty_print=True, xml_declaration=False) + + zf.writestr("colorset.xml", tree_str) + + def build_scribus_xml(self): + # TODO: fix, and don't save here + xml = ET.Element("SCRIBUSCOLORS", NAME=name) + + for i,row in enumerate(self.palette.getColors()): + for j,color in enumerate(row): + name = color.name + if not name: + name = "Swatch-{}-{}".format(i,j) + elem = ET.SubElement(xml, "COLOR", NAME=name, RGB=color.hex()) + if "Spot" in color.meta: + elem.attrib["Spot"] = color.meta["Spot"] + if "Register" in color.meta: + elem.attrib["Register"] = color.meta["Register"] + + ET.ElementTree(xml).write(file_w, encoding="utf-8", pretty_print=True, xml_declaration=True) + + def build_android_xml(self): + # https://stackoverflow.com/questions/3769762/web-colors-in-an-android-color-xml-resource-file + palette_string = '' + # TODO: implement + return palette_string + + def build_css(self): + palette_string = '' + + # TODO: fix + for i, row in enumerate(self.palette.slots): + for j, slot in enumerate(row): + hex = slot.color.hex() + s = ".color-{}-{}{} {{ color: {} }};\n".format(i,j, user, hex) + palette_string += s + + return palette_string diff --git a/extensions/fablabchemnitz/color_harmony/color_harmony/harmonies.py b/extensions/fablabchemnitz/color_harmony/color_harmony/harmonies.py new file mode 100644 index 00000000..0f896806 --- /dev/null +++ b/extensions/fablabchemnitz/color_harmony/color_harmony/harmonies.py @@ -0,0 +1,104 @@ +#!/usr/bin/env python +# coding=utf-8 +# +# Copyright (C) 2009-2018 Ilya Portnov +# (original 'palette-editor' tool, version 0.0.7) +# 2020 Maren Hachmann (extension-ification) +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +from math import sqrt, sin, cos +from color_harmony.colorplus import ColorPlus +from color_harmony.utils import seq, circle_hue + + +# Each of these functions takes one ColorPlus object +# and returns a list of ColorPlus objects: +__all__ = ['opposite', 'splitcomplementary', 'similar', 'similarAndOpposite', 'rectangle', 'nHues', 'fiveColors'] + +# Harmony functions +# 180° rotation +def opposite(color): + h, s, v = color.to_hsv() + h = h + 0.5 + if h > 1.0: + h -= 1.0 + return [color, ColorPlus.from_hsv(h, s, v)] + +# default value 0.5 corresponds to +-36° deviation from opposite, max. useful value: 89°, min. useful value: 1° +def splitcomplementary(color, parameter=0.5): + h, s, v = color.to_hsv() + h += (1.0 - 0.4*parameter)/2.0 + if h > 1.0: + h -= 1.0 + c1 = ColorPlus.from_hsv(h,s,v) + h += 0.4*parameter + if h > 1.0: + h -= 1.0 + c2 = ColorPlus.from_hsv(h,s,v) + return [color, c1, c2] + +# default value 0.5 corresponds to 36° per step, max. useful value: 360°/n , min. useful value: 1° +def similar(color, n, parameter=0.5): + h, s, v = color.to_hsv() + step = 0.2 * parameter + hmin = h - (n // 2) * step + hmax = h + (n // 2) * step + return [ColorPlus.from_hsv(dh % 1.0, s, v) for dh in seq(hmin, hmax, step)] + +# default value 0.5 corresponds to 36° deviation from original, max. useful value: 178°, min. useful value: 1° +def similarAndOpposite(color, parameter=0.5): + h, c, y = color.to_hcy() + h1 = h + 0.2 * parameter + if h1 > 1.0: + h1 -= 1.0 + h2 = h - 0.2 * parameter + if h2 < 0.0: + h2 += 1.0 + h3 = h + 0.5 + if h3 > 1.0: + h3 -= 1.0 + return [ColorPlus.from_hcy(h1,c,y), + color, + ColorPlus.from_hcy(h2,c,y), + ColorPlus.from_hcy(h3,c,y)] + +# default value 0.5 corresponds to 36° deviation from original, max. useful angle 180°, min. useful angle 1° +def rectangle(color, parameter=0.5): + h, c, y = color.to_hcy() + h1 = (h + 0.2 * parameter) % 1.0 + h2 = (h1 + 0.5) % 1.0 + h3 = (h + 0.5) % 1.0 + return [color, + ColorPlus.from_hcy(h1,c,y), + ColorPlus.from_hcy(h2,c,y), + ColorPlus.from_hcy(h3,c,y)] + +# returns n colors that are placed on the hue circle in steps of 360°/n +def nHues(color, n): + h, s, v = color.to_hsv() + return [color] + [ColorPlus.from_hsv(circle_hue(i, n, h), s, v) for i in range(1, n)] + +# parameter determines +/- deviation from a the hues +/-120° away, default value 0.5 corresponds to 2.16°, max. possible angle 4.32° +def fiveColors(color, parameter=0.5): + h0, s, v = color.to_hsv() + h1s = (h0 + 1.0/3.0) % 1.0 + h2s = (h1s + 1.0/3.0) % 1.0 + delta = 0.06 * parameter + h1 = (h1s - delta) % 1.0 + h2 = (h1s + delta) % 1.0 + h3 = (h2s - delta) % 1.0 + h4 = (h2s + delta) % 1.0 + return [color] + [ColorPlus.from_hsv(h,s,v) for h in [h1,h2,h3,h4]] diff --git a/extensions/fablabchemnitz/color_harmony/color_harmony/matching/__init__.py b/extensions/fablabchemnitz/color_harmony/color_harmony/matching/__init__.py new file mode 100644 index 00000000..1bb8bf6d --- /dev/null +++ b/extensions/fablabchemnitz/color_harmony/color_harmony/matching/__init__.py @@ -0,0 +1 @@ +# empty diff --git a/extensions/fablabchemnitz/color_harmony/color_harmony/matching/matching.py b/extensions/fablabchemnitz/color_harmony/color_harmony/matching/matching.py new file mode 100644 index 00000000..44745f05 --- /dev/null +++ b/extensions/fablabchemnitz/color_harmony/color_harmony/matching/matching.py @@ -0,0 +1,117 @@ + +from color.colors import * +from color.spaces import * + +def find_min(idx, occupied, d): + best_i = None + best_y = None + best_clr = None + for i, clr in d.iteritems(): + if i in occupied: + continue + y = clr[idx] + if best_y is None or y < best_y: + best_i = i + best_y = y + best_clr = clr + if best_y is not None: + return best_i + for i, clr in d.iteritems(): + y = clr[idx] + if best_y is None or y < best_y: + best_i = i + best_y = y + best_clr = clr + assert best_i is not None + return best_i + +def find_max(idx, occupied, d): + best_i = None + best_y = None + best_clr = None + for i, clr in d.iteritems(): + if i in occupied: + continue + y = clr[idx] + if best_y is None or y > best_y: + best_i = i + best_y = y + best_clr = clr + if best_y is not None: + return best_i + for i, clr in d.iteritems(): + y = clr[idx] + if best_y is None or y > best_y: + best_i = i + best_y = y + best_clr = clr + assert best_i is not None + return best_i + +def match_colors(colors1, colors2): + hsvs1 = dict(enumerate([c.getHCY() for c in colors1 if c is not None])) + hsvs2 = dict(enumerate([c.getHCY() for c in colors2 if c is not None])) + occupied = [] + result = {} + while len(hsvs1.keys()) > 0: + # Darkest of SVG colors + darkest1_i = find_min(2, [], hsvs1) + # Darkest of palette colors + darkest2_i = find_min(2, occupied, hsvs2) + hsvs1.pop(darkest1_i) + occupied.append(darkest2_i) + result[darkest1_i] = darkest2_i + if not hsvs1: + break + + # Lightest of SVG colors + lightest1_i = find_max(2, [], hsvs1) + # Lightest of palette colors + lightest2_i = find_max(2, occupied, hsvs2) + hsvs1.pop(lightest1_i) + occupied.append(lightest2_i) + result[lightest1_i] = lightest2_i + if not hsvs1: + break + + # Less saturated of SVG colors + grayest1_i = find_min(1, [], hsvs1) + # Less saturated of palette colors + grayest2_i = find_min(1, occupied, hsvs2) + hsvs1.pop(grayest1_i) + occupied.append(grayest2_i) + result[grayest1_i] = grayest2_i + if not hsvs1: + break + + # Most saturated of SVG colors + saturated1_i = find_max(1, [], hsvs1) + # Most saturated of palette colors + saturated2_i = find_max(1, occupied, hsvs2) + hsvs1.pop(saturated1_i) + occupied.append(saturated2_i) + result[saturated1_i] = saturated2_i + if not hsvs1: + break + + redest1_i = find_min(0, [], hsvs1) + redest2_i = find_min(0, occupied, hsvs2) + hsvs1.pop(redest1_i) + occupied.append(redest2_i) + result[redest1_i] = redest2_i + if not hsvs1: + break + + bluest1_i = find_max(0, [], hsvs1) + bluest2_i = find_max(0, occupied, hsvs2) + hsvs1.pop(bluest1_i) + occupied.append(bluest2_i) + result[bluest1_i] = bluest2_i + + clrs = [] + for i in range(len(result.keys())): + j = result[i] + clrs.append(colors2[j]) + return clrs + + diff --git a/extensions/fablabchemnitz/color_harmony/color_harmony/matching/svg.py b/extensions/fablabchemnitz/color_harmony/color_harmony/matching/svg.py new file mode 100644 index 00000000..b57d6047 --- /dev/null +++ b/extensions/fablabchemnitz/color_harmony/color_harmony/matching/svg.py @@ -0,0 +1,96 @@ + +import re +from lxml import etree + +from color import colors + +SVG_NS="http://www.w3.org/2000/svg" + +color_re = re.compile("#[0-9a-fA-F]+") + +def walk(processor, element): + for child in element.iter(): + processor(child) + +class Collector(object): + def __init__(self): + self.colors = {} + self.n = 0 + + def _parse(self, string): + xs = string.split(";") + single = len(xs) == 1 + + result = {} + for x in xs: + ts = x.split(":") + if len(ts) < 2: + if single: + return None + else: + continue + key, value = ts[0], ts[1] + result[key] = value + return result + + def _merge(self, attr): + if type(attr) == str: + return attr + result = "" + for key in attr: + value = attr[key] + result += key + ":" + value + ";" + return result + + def _is_color(self, val): + return color_re.match(val) is not None + + def _remember_color(self, color): + if color not in self.colors: + self.colors[color] = self.n + self.n += 1 + n = self.colors[color] + return "${color%s}" % n + + def _process_attr(self, value): + d = self._parse(value) + if d is None: + if self._is_color(value): + return self._remember_color(value) + else: + return value + elif type(d) == dict: + for attr in ['fill', 'stroke', 'stop-color']: + if (attr in d) and self._is_color(d[attr]): + color = d[attr] + d[attr] = self._remember_color(color) + return self._merge(d) + else: + if self._is_color(value): + return self._remember_color(value) + else: + return value + + def process(self, element): + for attr in ['fill', 'stroke', 'style', 'pagecolor', 'bordercolor']: + if attr in element.attrib: + value = element.get(attr) + element.set(attr, self._process_attr(value)) + + def result(self): + return self.colors + +def read_template(filename): + xml = etree.parse(filename) + collector = Collector() + walk(collector.process, xml.getroot()) + svg = etree.tostring(xml, encoding='utf-8', xml_declaration=True, pretty_print=True) + #open("last_template.svg",'w').write(svg) + color_dict = collector.result() + colors_inv = dict((v,k) for k, v in color_dict.iteritems()) + svg_colors = [] + for key in range(len(colors_inv.keys())): + clr = colors_inv[key] + svg_colors.append( colors.fromHex(clr) ) + return svg_colors, svg + diff --git a/extensions/fablabchemnitz/color_harmony/color_harmony/matching/svg_widget.py b/extensions/fablabchemnitz/color_harmony/color_harmony/matching/svg_widget.py new file mode 100644 index 00000000..321aa280 --- /dev/null +++ b/extensions/fablabchemnitz/color_harmony/color_harmony/matching/svg_widget.py @@ -0,0 +1,135 @@ + +from string import Template +from PyQt4 import QtGui, QtSvg, QtCore + +from color.colors import * +from color.spaces import * +import svg, transform, matching + +class SvgTemplateWidget(QtSvg.QSvgWidget): + template_loaded = QtCore.pyqtSignal() + colors_matched = QtCore.pyqtSignal() + file_dropped = QtCore.pyqtSignal(unicode) + + def __init__(self, *args): + QtSvg.QSvgWidget.__init__(self, *args) + self.setAcceptDrops(True) + self._colors = [Color(i*10,i*10,i*10) for i in range(20)] + self._template = None + self._template_filename = None + self._svg = None + self._need_render = True + self._svg_colors = None + self._dst_colors = None + self._last_size = None + + def sizeHint(self): + if self.renderer().isValid(): + return self.renderer().defaultSize() + elif self._last_size: + return self._last_size + else: + return QtCore.QSize(300,300) + + + def dragEnterEvent(self, event): + if event.mimeData().hasUrls(): + event.acceptProposedAction() + + def dropEvent(self, event): + if event.mimeData().hasUrls(): + urls = event.mimeData().urls() + path = unicode( urls[0].path() ) + self.file_dropped.emit(path) + + def _get_color(self, i): + if i < len(self._colors): + return self._colors[i] + else: + return Color(i*10, i*10, i*10) + + def _update(self): + arr = QtCore.QByteArray.fromRawData(self.get_svg()) + print("Data loaded: {} bytes".format(arr.length())) + self.load(arr) + if self.renderer().isValid(): + self._last_size = self.renderer().defaultSize() + self.update() + + def _get_image(self): + w,h = self.size().width(), self.size().height() + image = QtGui.QImage(w, h, QtGui.QImage.Format_ARGB32_Premultiplied) + image.fill(0) + qp = QtGui.QPainter() + qp.begin(image) + self.renderer().render(qp, QtCore.QRectF(0.0, 0.0, w, h)) + qp.end() + return image + + def loadTemplate(self, filename): + self._template_filename = filename + self._svg_colors, self._template = svg.read_template(filename) + print("Source SVG colors:") + for c in self._svg_colors: + print str(c) + print("Template loaded: {}: {} bytes".format(filename, len(self._template))) + self._need_render = True + self._update() + self.template_loaded.emit() + + def set_color(self, idx, color): + self._colors[idx] = color + self._need_render = True + self._update() + + def setColors(self, dst_colors, space=HCY): + if not dst_colors: + return + print("Matching colors in space: {}".format(space)) + self._dst_colors = dst_colors + self._colors = transform.match_colors(space, self._svg_colors, dst_colors) + #self._colors = matching.match_colors(self._svg_colors, dst_colors) + self._need_render = True + self._update() + self.colors_matched.emit() + + def resetColors(self): + self.load(self._template_filename) + self.repaint() + + def get_svg_colors(self): + return self._svg_colors + + def get_dst_colors(self): + return self._colors + + def get_svg(self): + if self._svg is not None and not self._need_render: + return self._svg + else: + self._svg = self._render() + self._need_render = False + return self._svg + + def _render(self): + #d = dict([("color"+str(i), color.hex() if color is not None else Color(255,255,255)) for i, color in enumerate(self._colors)]) + d = ColorDict(self._colors) + #self._image = self._get_image() + return Template(self._template).substitute(d) + +class ColorDict(object): + def __init__(self, colors): + self._colors = colors + + def __getitem__(self, key): + if key.startswith("color"): + n = int( key[5:] ) + if n < len(self._colors): + return self._colors[n].hex() + else: + return "#ffffff" + else: + raise KeyError(key) + + + diff --git a/extensions/fablabchemnitz/color_harmony/color_harmony/matching/transform.py b/extensions/fablabchemnitz/color_harmony/color_harmony/matching/transform.py new file mode 100644 index 00000000..55a55e93 --- /dev/null +++ b/extensions/fablabchemnitz/color_harmony/color_harmony/matching/transform.py @@ -0,0 +1,241 @@ +#!/usr/bin/python3 + +# -y11+a13*x13+a12*x12+a11*x11+b1 +# -y12+a23*x13+a22*x12+a21*x11+b2 +# -y13+a33*x13+a32*x12+a31*x11+b3 +# -y21+a13*x23+a12*x22+a11*x21+b1 +# -y22+a23*x23+a22*x22+a21*x21+b2 +# -y23+a33*x23+a32*x22+a31*x21+b3 +# -y31+a13*x33+a12*x32+a11*x31+b1 +# -y32+a23*x33+a22*x32+a21*x31+b2 +# -y33+a33*x33+a32*x32+a31*x31+b3 +# -y41+a13*x43+a12*x42+a11*x41+b1 +# -y42+a23*x43+a22*x42+a21*x41+b2 +# -y43+a33*x43+a32*x42+a31*x41+b3 + +from math import sqrt +import itertools +import numpy as np +from numpy.linalg import solve, det +from numpy.linalg.linalg import LinAlgError +from copy import deepcopy as copy +from PyQt4 import QtGui + +from color.colors import * +from color.spaces import * + +def get_A(x): + return np.array([[x[0][0], x[0][1], x[0][2], 0, 0, 0, 0, 0, 0, 1, 0, 0], + [0, 0, 0, x[0][0], x[0][1], x[0][2], 0, 0, 0, 0, 1, 0], + [0, 0, 0, 0, 0, 0, x[0][0], x[0][1], x[0][2], 0, 0, 1], + [x[1][0], x[1][1], x[1][2], 0, 0, 0, 0, 0, 0, 1, 0, 0], + [0, 0, 0, x[1][0], x[1][1], x[1][2], 0, 0, 0, 0, 1, 0], + [0, 0, 0, 0, 0, 0, x[1][0], x[1][1], x[1][2], 0, 0, 1], + [x[2][0], x[2][1], x[2][2], 0, 0, 0, 0, 0, 0, 1, 0, 0], + [0, 0, 0, x[2][0], x[2][1], x[2][2], 0, 0, 0, 0, 1, 0], + [0, 0, 0, 0, 0, 0, x[2][0], x[2][1], x[2][2], 0, 0, 1], + [x[3][0], x[3][1], x[3][2], 0, 0, 0, 0, 0, 0, 1, 0, 0], + [0, 0, 0, x[3][0], x[3][1], x[3][2], 0, 0, 0, 0, 1, 0], + [0, 0, 0, 0, 0, 0, x[3][0], x[3][1], x[3][2], 0, 0, 1] ]) + +def get_B(y): + return np.array([[y[0][0]], [y[0][1]], [y[0][2]], + [y[1][0]], [y[1][1]], [y[1][2]], + [y[2][0]], [y[2][1]], [y[2][2]], + [y[3][0]], [y[3][1]], [y[3][2]] ]) + +def color_row(space, color): + x1,x2,x3 = space.getCoords(color) + return np.array([x1,x2,x3]) + +def color_column(space, color): + x1,x2,x3 = space.getCoords(color) + return np.array([[x1],[x2],[x3]]) + +def colors_array(space, *colors): + return np.array([color_row(space, c) for c in colors]) + +def find_transform_colors(space, cx1, cx2, cx3, cx4, cy1, cy2, cy3, cy4): + x = colors_array(space, cx1, cx2, cx3, cx4) + y = colors_array(space, cy1, cy2, cy3, cy4) + return find_transform(x,y) + +def find_transform(x, y): + #print("X:\n"+str(x)) + #print("Y:\n"+str(y)) + m = solve(get_A(x), get_B(y)) + a = np.array([[m[0][0], m[1][0], m[2][0]], + [m[3][0], m[4][0], m[5][0]], + [m[6][0], m[7][0], m[8][0]]]) + b = np.array([[m[9][0]], [m[10][0]], [m[11][0]]]) + return (a, b) + +def transform_colors(space, a, b, cx): + x = color_column(space, cx) + y = a.dot(x) + b + #print("X: " + str(x)) + #print("Y: " + str(y)) + return space.fromCoords(y[0][0], y[1][0], y[2][0]) + +def transform(a, b, x): + #print(type(x)) + return a.dot(x[:,None]) + b + +def rhoC(space, color1, color2): + x1,y1,z1 = space.getCoords(color1) + x2,y2,z2 = space.getCoords(color2) + return sqrt((x1-x2)**2 + (y1-y2)**2 + (z1-z2)**2) + +def rho(c1, c2): + x1,y1,z1 = c1[0], c1[1], c1[2] + x2,y2,z2 = c2[0], c2[1], c2[2] + return sqrt((x1-x2)**2 + (y1-y2)**2 + (z1-z2)**2) + +def get_center(points): + zero = np.array([0,0,0]) + return sum(points, zero) / float(len(points)) + +def get_center_color(space, colors): + zero = np.array([0,0,0]) + points = [space.getCoords(c) for c in colors] + center = sum(points, zero) / float(len(points)) + c1,c2,c3 = center[0], center[1], center[2] + return space.fromCoords((c1,c2,c3)) + +def get_nearest(x, occupied, points): + min_rho = None + min_p = None + for p in points: + if any([(p == o).all() for o in occupied]): + continue + r = rho(x,p) + if min_rho is None or r < min_rho: + min_rho = r + min_p = p + if min_p is not None: + occupied.append(min_p) + #print("Now occupied : " + str(x)) + return min_p + #print("Was occupied : " + str(x)) + for p in points: + r = rho(x,p) + if min_rho is None or r < min_rho: + min_rho = r + min_p = p + return min_p + +def get_nearest_color(space, occupied, cx, colors): + points = [space.getCoords(c) for c in colors] + cy = get_nearest(space.getCoords(cx), occupied, points) + return space.fromCoords((cy[0], cy[1], cy[2])) + +def exclude(lst, x): + return [p for p in lst if not (p == x).all()] + +def get_farest(points): + #center = get_center(points) + #print(str(center)) + points_ = copy(points) + darkest = min(points_, key = lambda p: p[2]) + points_ = exclude(points_, darkest) + lightest = max(points_, key = lambda p: p[2]) + points_ = exclude(points_, lightest) + grayest = min(points_, key = lambda p: p[1]) + points_ = exclude(points_, grayest) + most_saturated = max(points_, key = lambda p: p[1]) + return [darkest, lightest, grayest, most_saturated] + #srt = sorted(points, key = lambda c: -rho(center, c)) + #return srt[:4] + +def get_farest_colors(space, colors): + points = [space.getCoords(c) for c in colors] + farest = get_farest(points) + return [space.fromCoords(c) for c in farest] + +def match_colors_(space, colors1, colors2): + try: + points1 = [color_row(space, c) for c in colors1 if c is not None] + points2 = [color_row(space, c) for c in colors2 if c is not None] + farest1 = get_farest(points1) + farest2 = get_farest(points2) + a, b = find_transform(farest1, farest2) + #print("A:\n" + str(a)) + #print("B:\n" + str(b)) + print("Matching colors:") + for p1, p2 in zip(farest1, farest2): + print(" {} -> {}".format(p1,p2)) + transformed = [transform(a, b, x) for x in points1] + occupied = [] + matched = [] + for x in transformed: + y = get_nearest(x, occupied, points2) + matched.append(y) + return [space.fromCoords(x) for x in matched] + except LinAlgError as e: + print e + return colors1 + +def match_colors(space, colors1, colors2): + points1 = [color_row(space, c) for c in colors1 if c is not None] + points2 = [color_row(space, c) for c in colors2 if c is not None] + c1 = get_center(points1) + c2 = get_center(points2) + #print c1, c2 + print("Centers difference: {}".format(c2-c1)) + szs1 = np.vstack([abs(c1-p) for p in points1]).max(axis=0) + szs2 = np.vstack([abs(c2-p) for p in points2]).max(axis=0) + if (szs1 == 0).any(): + zoom = np.array([1,1,1]) + else: + zoom = szs2 / szs1 + print("Scale by axes: {}".format(zoom)) + transformed = [(p-c1)*zoom + c2 for p in points1] + occupied = [] + matched = [] + deltas = [] + for x in transformed: + y = get_nearest(x, occupied, points2) + matched.append(y) + deltas.append(abs(y-x)) + delta = np.vstack(deltas).max(axis=0) + print("Maximum deltas from affine transformed to source colors: {}".format(delta)) + return [space.fromCoords(x) for x in matched] + +def find_simple_transform(space, colors1, colors2): + points1 = [color_row(space, c) for c in colors1 if c is not None] + points2 = [color_row(space, c) for c in colors2 if c is not None] + c1 = get_center(points1) + c2 = get_center(points2) + #transfer = c2 - c1 + szs1 = max([abs(c1-p) for p in points1]) + szs2 = max([abs(c2-p) for p in points2]) + if (szs1 == 0).any(): + zoom = np.array([1,1,1]) + else: + zoom = szs2 / szs1 + return (c1, c2, zoom) + +if __name__ == "__main__": + + x1 = Color(0,0,0) + x2 = Color(0,10,0) + x3 = Color(0,0,20) + x4 = Color(20,0,10) + x5 = Color(10,10,10) + x6 = Color(0,20,0) + x7 = Color(0,0,40) + x8 = Color(40,0,20) + + y1 = Color(0,0,0) + y2 = Color(0,10,0) + y3 = Color(0,0,20) + y4 = Color(20,0,10) + y5 = Color(10,10,10) + y6 = Color(0,20,0) + y7 = Color(0,0,40) + y8 = Color(40,0,20) + + res = match_colors(RGB, [x1,x2,x3,x4,x5,x6,x7,x8], [y1,y2,y3,y4,y5,y6,y7,y8]) + print([c.getRGB() for c in res]) + + diff --git a/extensions/fablabchemnitz/color_harmony/color_harmony/open_palette.py b/extensions/fablabchemnitz/color_harmony/color_harmony/open_palette.py new file mode 100644 index 00000000..dd795fd0 --- /dev/null +++ b/extensions/fablabchemnitz/color_harmony/color_harmony/open_palette.py @@ -0,0 +1,17 @@ +def load_palette(filename, mixer=None, options=None): + if mixer is None: + mixer = mixers.MixerRGB + loader = detect_storage(filename) + if loader is None: + return None + palette = loader().load(mixer, filename, options) + return palette + +def save_palette(palette, path, formatname=None): + if formatname is not None: + loader = get_storage_by_name(formatname) + else: + loader = detect_storage(path, save=True) + if loader is None: + raise RuntimeError("Unknown file type!") + loader(palette).save(path) diff --git a/extensions/fablabchemnitz/color_harmony/color_harmony/palette/palette.py b/extensions/fablabchemnitz/color_harmony/color_harmony/palette/palette.py new file mode 100644 index 00000000..698773c5 --- /dev/null +++ b/extensions/fablabchemnitz/color_harmony/color_harmony/palette/palette.py @@ -0,0 +1,352 @@ + +from os.path import join, basename + +from color.colors import * +from color import mixers +from models.meta import Meta + +NONE = 0 +USER_DEFINED = 1 +VERTICALLY_GENERATED = 2 +HORIZONTALLY_GENERATED = 3 +DEFAULT_GROUP_SIZE = 7 +MAX_COLS = 10 + +class Slot(object): + def __init__(self, color=None, name=None, user_defined=False): + self._color = color + self._mode = NONE + self._user_defined = user_defined + self._src_slot1 = None + self._src_row1 = None + self._src_col1 = None + self._src_slot2 = None + self._src_row2 = None + self._src_col2 = None + if name: + self.name = name + + def get_name(self): + if self._color: + return self._color.name + else: + return None + + def set_name(self, name): + if self._color: + self._color.name = name + + name = property(get_name, set_name) + + def __repr__(self): + return "".format(self._mode) + + def getColor(self): + if self._color is None: + return Color(1,1,1) + else: + return self._color + + def setColor(self, color): + self._color = color + + color = property(getColor, setColor) + + def getMode(self): + if self._user_defined: + return USER_DEFINED + else: + return self._mode + + def setMode(self, mode): + self._mode = mode + if mode == USER_DEFINED: + self._user_defined = True + self._mode = NONE + + mode = property(getMode, setMode) + + def mark(self, user_defined=None): + if user_defined is None: + user_defined = not self._user_defined + #print("Mark: " + str(user_defined)) + self._user_defined = user_defined + + def setSources(self, slot1, row1, col1, slot2, row2, col2): + self._src_slot1 = slot1 + self._src_row1 = row1 + self._src_col1 = col1 + self._src_slot2 = slot2 + self._src_row2 = row2 + self._src_col2 = col2 + #print("Sources: ({},{}) and ({},{})".format(row1,col1, row2,col2)) + + def getSource1(self): + return self._src_slot1, self._src_row1, self._src_col1 + + def getSource2(self): + return self._src_slot2, self._src_row2, self._src_col2 + +class Palette(object): + def __init__(self, mixer, nrows=1, ncols=7): + self.mixer = mixer + self.nrows = nrows + self.ncols = ncols + self.slots = [[Slot() for i in range(ncols)] for j in range(nrows)] + self.need_recalc_colors = True + self.meta = Meta() + + def get_name(self): + return self.meta.get("Name", "Untited") + + def set_name(self, name): + self.meta["Name"] = name + + name = property(get_name, set_name) + + def mark_color(self, row, column, mark=None): + print("Marking color at ({}, {})".format(row,column)) + slot = self.slots[row][column] + slot.mark(mark) + self.need_recalc_colors = True + self.recalc() + + def setMixer(self, mixer): + self.mixer = mixer + self.recalc() + + def del_column(self, col): + if self.ncols < 2: + return + new = [] + for row in self.slots: + new_row = [] + for c, slot in enumerate(row): + if c != col: + new_row.append(slot) + new.append(new_row) + self.slots = new + self.ncols -= 1 + self.recalc() + + def add_column(self, col): + new = [] + for row in self.slots: + new_row = [] + for c, slot in enumerate(row): + if c == col: + new_row.append(Slot()) + new_row.append(slot) + new.append(new_row) + self.slots = new + self.ncols += 1 + self.recalc() + + def del_row(self, row): + if self.nrows < 2: + return + new = [] + for r,row_ in enumerate(self.slots): + if r != row: + new.append(row_) + self.slots = new + self.nrows -= 1 + self.recalc() + + def add_row(self, row): + new = [] + for r,row_ in enumerate(self.slots): + if r == row: + new_row = [Slot() for k in range(self.ncols)] + new.append(new_row) + new.append(row_) + self.slots = new + self.nrows += 1 + self.recalc() + + def paint(self, row, column, color): + self.slots[row][column].color = color + self.slots[row][column].mark(True) + #self.recalc() + + def erase(self, row, column): + self.paint(row, column, Color(0,0,0)) + + def getUserDefinedSlots(self): + """Returns list of tuples: (row, column, slot).""" + result = [] + for i,row in enumerate(self.slots): + for j,slot in enumerate(row): + if slot.mode == USER_DEFINED: + result.append((i,j,slot)) + return result + + def getColor(self, row, column): + if self.need_recalc_colors: + self.recalc() + try: + return self.slots[row][column].color + except IndexError: + #print("Cannot get color ({},{}): size is ({},{})".format(row,column, self.nrows, self.ncols)) + return Color(255,255,255) + + def getColors(self): + if self.need_recalc_colors: + self.recalc() + return [[slot.color for slot in row] for row in self.slots] + + def setSlots(self, all_slots): + m = len(all_slots) % self.ncols + if m != 0: + for i in range(self.ncols - m): + all_slots.append(Slot(Color(255,255,255))) + self.slots = [] + row = [] + for i, slot in enumerate(all_slots): + if i % self.ncols == 0: + if len(row) != 0: + self.slots.append(row) + row = [] + row.append(slot) + self.slots.append(row) + self.nrows = len(self.slots) + self.need_recalc_colors = True + self.recalc() +# print(self.slots) + + def user_chosen_slot_down(self, i,j): + """Returns tuple: + * Is slot found + * Row of found slot + * Column of found slot""" + + #print("Searching down ({},{})".format(i,j)) + for i1 in range(i, self.nrows): + try: + slot = self.slots[i1][j] + #print("Down: check ({},{}): {}".format(i1,j,slot)) + if slot.mode == USER_DEFINED: + #print("Found down ({},{}): ({},{})".format(i,j, i1,j)) + return True,i1,j + except IndexError: + print("Cannot get slot at ({}, {})".format(i,j)) + return False, self.nrows-1,j + return False, self.nrows-1,j + + def user_chosen_slot_up(self, i,j): + """Returns tuple: + * Is slot found + * Row of found slot + * Column of found slot""" + + for i1 in range(i-1, -1, -1): + if self.slots[i1][j].mode == USER_DEFINED: + #print("Found up ({},{}): ({},{})".format(i,j, i1,j)) + return True,i1,j + return False, 0, j + + def fixed_slot_right(self, i,j): + """Returns tuple: + * Mode of found slot + * Row of found slot + * Column of found slot""" + + for j1 in range(j, self.ncols): + if self.slots[i][j1].mode in [USER_DEFINED, VERTICALLY_GENERATED]: + return self.slots[i][j1].mode, i,j1 + return NONE, i,self.ncols-1 + + def fixed_slot_left(self, i,j): + """Returns tuple: + * Mode of found slot + * Row of found slot + * Column of found slot""" + + for j1 in range(j-1, -1, -1): + if self.slots[i][j1].mode in [USER_DEFINED, VERTICALLY_GENERATED]: + return self.slots[i][j1].mode, i,j1 + return NONE, i,0 + + def recalc(self): + self._calc_modes() + self._calc_modes() + self._calc_modes() + self._calc_colors() + self.need_recalc_colors = False + + def _calc_modes(self): + for i,row in enumerate(self.slots): + for j,slot in enumerate(row): + if slot.mode == USER_DEFINED: + continue + # Should slot be vertically generated? + v1,iv1,jv1 = self.user_chosen_slot_down(i,j) + v2,iv2,jv2 = self.user_chosen_slot_up(i,j) + h1,ih1,jh1 = self.fixed_slot_left(i,j) + h2,ih2,jh2 = self.fixed_slot_right(i,j) + if v1 and v2: # if there are user chosen slots above and below current + slot.mode = VERTICALLY_GENERATED + s1 = self.slots[iv1][jv1] + s2 = self.slots[iv2][jv2] + slot.setSources(s1, iv1, jv1, s2, iv2, jv2) + elif ((v1 and j-jv1 > 1) or (v2 and jv2-j > 1)) and ((h1!=USER_DEFINED) or (h2!=USER_DEFINED)): + slot.mode = VERTICALLY_GENERATED + s1 = self.slots[iv1][jv1] + s2 = self.slots[iv2][jv2] + slot.setSources(s1, iv1, jv1, s2, iv2, jv2) + elif h1 and h2: + # if there are fixed slots at left and at right of current + slot.mode = HORIZONTALLY_GENERATED + s1 = self.slots[ih1][jh1] + s2 = self.slots[ih2][jh2] + slot.setSources(s1, ih1, jh1, s2, ih2, jh2) + elif (h1 or h2) and not (v1 or v2): + slot.mode = HORIZONTALLY_GENERATED + s1 = self.slots[ih1][jh1] + s2 = self.slots[ih2][jh2] + slot.setSources(s1, ih1, jh1, s2, ih2, jh2) + else: + slot.mode = HORIZONTALLY_GENERATED + s1 = self.slots[ih1][jh1] + s2 = self.slots[ih2][jh2] + slot.setSources(s1, ih1, jh1, s2, ih2, jh2) + + def color_transition(self, from_color, to_color, steps, idx): + if self.mixer is None: + return Color(1,1,1) + q = float(idx+1) / float(steps+1) + return self.mixer.mix(from_color, to_color, q) + + def _calc_colors(self): + for i,row in enumerate(self.slots): + for j,slot in enumerate(row): + if slot.mode == VERTICALLY_GENERATED: + slot_down, iv1, jv1 = slot.getSource1() + slot_up, iv2, jv2 = slot.getSource2() + clr_down = slot_down.color + clr_up = slot_up.color + length = iv1-iv2 - 1 + idx = i-iv2 - 1 + try: + #print("Mixing ({},{}) with ({},{}) to get ({},{})".format(iv1,jv1, iv2,jv2, i,j)) + clr = self.color_transition(clr_up,clr_down,length, idx) + except IndexError: + clr = Color(1,1,1) + slot.color = clr + + for i,row in enumerate(self.slots): + for j,slot in enumerate(row): + if slot.mode == HORIZONTALLY_GENERATED: + slot_left, ih1, jh1 = slot.getSource1() + slot_right, ih2, jh2 = slot.getSource2() + clr_left = slot_left.color + clr_right = slot_right.color + length = jh2-jh1 - 1 + idx = j-jh1 - 1 + try: + #print("Mixing ({},{}) with ({},{}) to get ({},{})".format(ih1,jh1, ih2,jh2, i,j)) + clr = self.color_transition(clr_left,clr_right,length, idx) + except IndexError: + clr = Color(1,1,1) + slot.color = clr + diff --git a/extensions/fablabchemnitz/color_harmony/color_harmony/shades.py b/extensions/fablabchemnitz/color_harmony/color_harmony/shades.py new file mode 100644 index 00000000..7f2a9f1e --- /dev/null +++ b/extensions/fablabchemnitz/color_harmony/color_harmony/shades.py @@ -0,0 +1,125 @@ +#!/usr/bin/env python +# coding=utf-8 +# +# Copyright (C) 2009-2018 Ilya Portnov +# (original 'palette-editor' tool, version 0.0.7) +# 2020 Maren Hachmann (extension-ification) +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +from color_harmony.colorplus import ColorPlus +from color_harmony.utils import clip, seq, variate + +# Shading functions + +# 4 cooler colors +def cooler(color, parameter): + h,s,v = color.to_hsv() + if h < 1.0/6.0: + sign = -1.0 + elif h > 2.0/3.0: + sign = -1.0 + else: + sign = 1.0 + step = 0.1 * parameter + result = [] + for i in range(4): + h += sign * step + if h > 1.0: + h -= 1.0 + elif h < 0.0: + h += 1.0 + result.append(ColorPlus.from_hsv(h, s, v)) + return result + +# 4 warmer colors +def warmer(color, parameter): + h,s,v = color.to_hsv() + if h < 1.0/6.0: + sign = +1.0 + elif h > 2.0/3.0: + sign = +1.0 + else: + sign = -1.0 + step = 0.1 * parameter + result = [] + for i in range(4): + h += sign * step + if h > 1.0: + h -= 1.0 + elif h < 0.0: + h += 1.0 + result.append(ColorPlus.from_hsv(h, s, v)) + return result + +# returns 2 less saturated and 2 more saturated colors +def saturation(color, parameter): + h, s, v = color.to_hsv() + ss = [clip(x) for x in variate(s, 0.6*parameter, 1.2*parameter)] + # we don't want another copy of the original color + del ss[2] + return [ColorPlus.from_hsv(h, s, v) for s in ss] + +# 2 colors with higher value, and 2 with lower +def value(color, parameter): + h, s, v = color.to_hsv() + vs = [clip(x) for x in variate(v, 0.4*parameter, 0.8*parameter)] + del vs[2] + return [ColorPlus.from_hsv(h, s, v) for v in vs] + +# 2 colors with higher chroma, and 2 with lower +def chroma(color, parameter): + h, c, y = color.to_hcy() + cs = [clip(x) for x in variate(c, 0.4*parameter, 0.8*parameter)] + del cs[2] + return [ColorPlus.from_hcy(h, c, y) for c in cs] + +# 2 colors with higher luma, and 2 with lower +def luma(color, parameter): + h, c, y = color.to_hcy() + ys = [clip(x) for x in variate(y, 0.3*parameter, 0.6*parameter)] + del ys[2] + return [ColorPlus.from_hcy(h, c, y) for y in ys] + +# 2 colors with hue rotated to the left, and 2 rotated to the right +def hue(color, parameter): + h, c, y = color.to_hcy() + hs = [clip(x) for x in variate(h, 0.15*parameter, 0.3*parameter)] + del hs[2] + return [ColorPlus.from_hcy(h, c, y) for h in hs] + +def hue_luma(color, parameter): + h, c, y = color.to_hcy() + hs = [clip(x) for x in variate(h, 0.15*parameter, 0.3*parameter)] + ys = [clip(x) for x in variate(y, 0.3*parameter, 0.6*parameter)] + del ys[2] + del hs[2] + return [ColorPlus.from_hcy(h, c, y) for h,y in zip(hs, ys)] + +def luma_plus_chroma(color, parameter): + h, c, y = color.to_hcy() + cs = [clip(x) for x in variate(c, 0.4*parameter, 0.8*parameter)] + ys = [clip(x) for x in variate(y, 0.3*parameter, 0.6*parameter)] + del cs[2] + del ys[2] + return [ColorPlus.from_hcy(h, c, y) for c,y in zip(cs, ys)] + +def luma_minus_chroma(color, parameter): + h, c, y = color.to_hcy() + cs = [clip(x) for x in variate(c, 0.4*parameter, 0.8*parameter)] + ys = list(reversed([clip(x) for x in variate(y, 0.3*parameter, 0.6*parameter)])) + del cs[2] + del ys[2] + return [ColorPlus.from_hcy(h, c, y) for c,y in zip(cs, ys)] diff --git a/extensions/fablabchemnitz/color_harmony/color_harmony/storage/__init__.py b/extensions/fablabchemnitz/color_harmony/color_harmony/storage/__init__.py new file mode 100644 index 00000000..1bb8bf6d --- /dev/null +++ b/extensions/fablabchemnitz/color_harmony/color_harmony/storage/__init__.py @@ -0,0 +1 @@ +# empty diff --git a/extensions/fablabchemnitz/color_harmony/color_harmony/storage/cluster.py b/extensions/fablabchemnitz/color_harmony/color_harmony/storage/cluster.py new file mode 100644 index 00000000..8ff0c817 --- /dev/null +++ b/extensions/fablabchemnitz/color_harmony/color_harmony/storage/cluster.py @@ -0,0 +1,180 @@ + +from math import sqrt, isnan +import numpy as np + +try: + from sklearn.cluster import MeanShift, estimate_bandwidth + from sklearn.utils import shuffle + + cluster_analysis_available = True + print("Cluster analysis is available") +except ImportError: + cluster_analysis_available = False + print("Cluster analysis is not available") + +try: + import Image + pil_available = True + print("PIL is available") +except ImportError: + print("PIL is not available") + try: + from PIL import Image + print("Pillow is available") + pil_available = True + except ImportError: + print("Neither PIL or Pillow are available") + pil_available = False + +from color.colors import * + +if pil_available: + + def imread(filename): + img = Image.open(filename) + +class Box(object): + def __init__(self, arr): + self._array = arr + + def population(self): + return self._array.size + + def axis_size(self, idx): + slice_ = self._array[:, idx] + M = slice_.max() + m = slice_.min() + return M - m + + def biggest_axis(self): + sizes = [self.axis_size(i) for i in range(3)] + return max(range(3), key = lambda i: sizes[i]) + + def mean(self): + return self._array.mean(axis=0) + + def mean_color(self): + size = self._array.size + if not size: + return None + xs = self._array.mean(axis=0) + x,y,z = xs[0], xs[1], xs[2] + if isnan(x) or isnan(y) or isnan(z): + return None + return Color(int(x), int(y), int(z)) + + def div_pos(self, idx): + slice_ = self._array[:, idx] + M = slice_.max() + m = slice_.min() + return (m+M)/2.0 + + def divide(self): + axis = self.biggest_axis() + q = self.div_pos(axis) + idxs = self._array[:, axis] > q + smaller = self._array[~idxs] + bigger = self._array[idxs] + self._array = smaller + return Box(bigger) + +if pil_available and cluster_analysis_available: + + # Use Means Shift algorithm for cluster analysis + + def cluster_analyze(filename, N=1000): + image = imread(filename) + w,h,d = tuple(image.shape) + image_array = np.array( np.reshape(image, (w * h, d)), dtype=np.float64 ) + #if image.dtype == 'uint8': + # image_array = image_array / 255.0 + image_array_sample = shuffle(image_array, random_state=0)[:N] + bandwidth = estimate_bandwidth(image_array_sample, quantile=0.01, n_samples=500) + ms = MeanShift(bandwidth=bandwidth, bin_seeding=True) + ms.fit(image_array_sample) + cluster_centers = ms.cluster_centers_ + n_clusters = len(cluster_centers) + colors = [] + print("Number of clusters: {}".format(n_clusters)) + for x in cluster_centers: + #print x + clr = Color() + clr.setRGB1((x[0], x[1], x[2])) + colors.append(clr) + return colors + + +if pil_available: + +# Use very fast algorithm for image analysis, translated from Krita's kis_common_colors_recalculation_runner.cpp +# Do not know exactly why does this algorithm work, but it does. +# Initial (C) Adam Celarek + + def bin_divide_colors(filename, N=1<<16, n_clusters=49): + img = Image.open(filename) + if img.mode == 'P': + img = img.convert('RGB') + w,h = img.size + n_pixels = w*h + if n_pixels > N: + ratio = sqrt( float(N) / float(n_pixels) ) + w,h = int(w*ratio), int(h*ratio) + img = img.resize((w,h)) + + image = np.array(img) + w,h,d = tuple(image.shape) + colors = np.array( np.reshape(image, (w * h, d)), dtype=np.float64 ) + #if image.dtype == 'uint8': + # colors = colors / 255.0 + colors = colors[:,0:3] + + boxes = [Box(colors)] + + while (len(boxes) < n_clusters * 3/5) and (len(colors) > n_clusters * 3/5): + biggest_box = None + biggest_box_population = None + + for box in boxes: + population = box.population() + if population <= 3: + continue + if biggest_box_population is None or (population > biggest_box_population and box.axis_size(box.biggest_axis()) >= 3): + biggest_box = box + biggest_box_population = population + + if biggest_box is None or biggest_box.population() <= 3: + break + + new_box = biggest_box.divide() + boxes.append(new_box) + + while (len(boxes) < n_clusters) and (len(colors) > n_clusters): + biggest_box = None + biggest_box_axis_size = None + + for box in boxes: + if box.population() <= 3: + continue + size = box.axis_size(box.biggest_axis()) + if biggest_box_axis_size is None or (size > biggest_box_axis_size and size >= 3): + biggest_box = box + biggest_box_axis_size = size + + if biggest_box is None or biggest_box.population() <= 3: + break + + new_box = biggest_box.divide() + boxes.append(new_box) + + result = [box.mean_color() for box in boxes if box.mean_color() is not None] + return result + +image_loading_supported = pil_available or cluster_analysis_available + +if pil_available: + get_common_colors = bin_divide_colors + use_sklearn = False +elif cluster_analysis_available : + get_common_colors = cluster_analyze + use_sklearn = True + diff --git a/extensions/fablabchemnitz/color_harmony/color_harmony/storage/css.py b/extensions/fablabchemnitz/color_harmony/color_harmony/storage/css.py new file mode 100644 index 00000000..9936f453 --- /dev/null +++ b/extensions/fablabchemnitz/color_harmony/color_harmony/storage/css.py @@ -0,0 +1,83 @@ + +from os.path import join, basename +from math import sqrt, floor + +from color.colors import * +from color import mixers +from palette.storage.storage import * + +try: + from tinycss import make_parser, color3 + css_support = True +except ImportError: + print("TinyCSS is not available") + css_support = False + +class CSS(Storage): + name = 'css' + title = _("CSS cascading stylesheet") + filters = ["*.css"] + can_load = css_support + can_save = True + + @staticmethod + def check(filename): + return True + + def save(self, file_w): + pf = open(file_w, 'w') + + for i, row in enumerate(self.palette.slots): + for j, slot in enumerate(row): + user = "-user" if slot.mode == USER_DEFINED else "" + hex = slot.color.hex() + s = ".color-{}-{}{} {{ color: {} }};\n".format(i,j, user, hex) + pf.write(s) + + pf.close() + + def load(self, mixer, file_r, options=None): + self.palette = Palette(mixer) + self.palette.ncols = None + + all_slots = [] + colors = [] + + def add_color(clr): + for c in colors: + if c.getRGB() == clr.getRGB(): + return None + colors.append(clr) + return clr + + parser = make_parser('page3') + css = parser.parse_stylesheet_file(file_r) + for ruleset in css.rules: + #print ruleset + if ruleset.at_keyword: + continue + for declaration in ruleset.declarations: + #print declaration + for token in declaration.value: + #print token + css_color = color3.parse_color(token) + if not isinstance(css_color, color3.RGBA): + continue + r,g,b = css_color.red, css_color.green, css_color.blue + color = Color() + color.setRGB1((clip(r), clip(g), clip(b))) + color = add_color(color) + if not color: + continue + slot = Slot(color, user_defined=True) + all_slots.append(slot) + n_colors = len(all_slots) + if n_colors > MAX_COLS: + self.palette.ncols = max( int( floor(sqrt(n_colors)) ), 1) + else: + self.palette.ncols = n_colors + self.palette.setSlots(all_slots) + self.palette.meta["SourceFormat"] = "CSS" + print("Loaded palette: {}x{}".format( self.palette.nrows, self.palette.ncols )) + return self.palette + diff --git a/extensions/fablabchemnitz/color_harmony/color_harmony/storage/gimp.py b/extensions/fablabchemnitz/color_harmony/color_harmony/storage/gimp.py new file mode 100644 index 00000000..f82b3302 --- /dev/null +++ b/extensions/fablabchemnitz/color_harmony/color_harmony/storage/gimp.py @@ -0,0 +1,188 @@ + +from os.path import join, basename +from PyQt4 import QtGui +import re + +from color.colors import * +from color import mixers +from palette.storage.storage import * + +marker = '# Colors not marked with #USER are auto-generated' + +metare = re.compile("^# (\\w+): (.+)") + +def save_gpl(name, ncols, clrs, file_w): + if type(file_w) in [str,unicode]: + pf = open(file_w, 'w') + do_close = True + elif hasattr(file_w,'write'): + pf = file_w + do_close = False + else: + raise ValueError("Invalid argument type in save_gpl: {}".format(type(file_w))) + pf.write('GIMP Palette\n') + pf.write(u"Name: {}\n".format(name).encode('utf-8')) + if ncols is not None: + pf.write('Columns: %s\n' % ncols) + for color in clrs: + r, g, b = color.getRGB() + n = 'Untitled' + s = '%d %d %d %s\n' % (r, g, b, n) + pf.write(s) + if do_close: + pf.close() + +class GimpPalette(Storage): + + name = 'gpl' + title = _("Gimp palette") + filters = ["*.gpl"] + can_save = True + can_load = True + + @staticmethod + def get_options_widget(dialog, filename): + + def on_columns_changed(n): + dialog.options = n + dialog.on_current_changed(filename) + + ncols = None + pf = open(filename,'r') + l = pf.readline().strip() + if l != 'GIMP Palette': + pf.close() + return None + for line in pf: + line = line.strip() + lst = line.split() + if lst[0]=='Columns:': + ncols = int( lst[1] ) + break + pf.close() + + widget = QtGui.QWidget() + box = QtGui.QHBoxLayout() + label = QtGui.QLabel(_("Columns: ")) + spinbox = QtGui.QSpinBox() + spinbox.setMinimum(2) + spinbox.setMaximum(100) + if ncols is None: + ncols = MAX_COLS + spinbox.setValue(ncols) + box.addWidget(label) + box.addWidget(spinbox) + spinbox.valueChanged.connect(on_columns_changed) + widget.setLayout(box) + return widget + + def save(self, file_w=None): + if type(file_w) in [str,unicode]: + pf = open(file_w, 'w') + do_close = True + elif hasattr(file_w,'write'): + pf = file_w + do_close = False + else: + raise ValueError("Invalid argument type in GimpPalette.save: {}".format(type(file_w))) + pf.write('GIMP Palette\n') + if not hasattr(self.palette, 'name'): + if type(file_w) in [str, unicode]: + self.palette.name = basename(file_w) + else: + self.palette.name='Colors' + pf.write(u"Name: {}\n".format(self.palette.name).encode('utf-8')) + if hasattr(self.palette, 'ncols') and self.palette.ncols: + pf.write('Columns: %s\n' % self.palette.ncols) + pf.write(marker+'\n') + for key,value in self.palette.meta.items(): + if key != "Name": + pf.write(u"# {}: {}\n".format(key, value).encode('utf-8')) + pf.write('#\n') + for row in self.palette.slots: + for slot in row: + if slot.mode == USER_DEFINED: + n = slot.name + ' #USER' + else: + n = slot.name + r, g, b = slot.color.getRGB() + s = '%d %d %d %s\n' % (r, g, b, n) + pf.write(s) + for key,value in slot.color.meta.items(): + if key != "Name": + pf.write(u"# {}: {}\n".format(key, value).encode('utf-8')) + if do_close: + pf.close() + + def load(self, mixer, file_r, force_ncols=None): + self.palette = Palette(mixer) + self.palette.ncols = None + if not file_r: + palette.filename = None + palette.name = 'Gimp' + return + elif hasattr(file_r,'read'): + pf = file_r + self.palette.filename = None + do_close = False + elif type(file_r) in [str,unicode]: + pf = open(file_r) + self.palette.filename = file_r + do_close = True + l = pf.readline().strip() + if l != 'GIMP Palette': + raise SyntaxError, "Invalid palette file!" + self.palette.name = " ".join(pf.readline().strip().split()[1:]) + all_user = True + n_colors = 0 + all_slots = [] + reading_header = True + for line in pf: + line = line.strip() + if line==marker: + all_user = False + meta_match = metare.match(line) + if meta_match is not None: + key = meta_match.group(1) + value = meta_match.group(2) + if reading_header: + self.palette.meta[key] = value + else: + clr.meta[key] = value + continue + if line.startswith('#'): + continue + lst = line.split() + if lst[0]=='Columns:': + self.palette.ncols = int( lst[1] ) + if len(lst) < 3: + continue + rs,gs,bs = lst[:3] + clr = Color(float(rs), float(gs), float(bs)) + reading_header = False + #print(str(clr)) + slot = Slot(clr) + n_colors += 1 + if all_user or lst[-1]=='#USER': + slot.mode = USER_DEFINED + name = ' '.join(lst[3:-1]) + else: + name = ' '.join(lst[3:]) + slot.name = name + all_slots.append(slot) + if do_close: + pf.close() + if n_colors < DEFAULT_GROUP_SIZE: + self.palette.ncols = n_colors + if not self.palette.ncols: + if n_colors > MAX_COLS: + self.palette.ncols = MAX_COLS + else: + self.palette.ncols = n_colors + if force_ncols is not None: + self.palette.ncols = force_ncols + self.palette.setSlots(all_slots) + self.palette.meta["SourceFormat"] = "Gimp gpl" if all_user else "palette_editor gpl" + print("Loaded palette: {}x{}".format( self.palette.nrows, self.palette.ncols )) + return self.palette + diff --git a/extensions/fablabchemnitz/color_harmony/color_harmony/storage/image.py b/extensions/fablabchemnitz/color_harmony/color_harmony/storage/image.py new file mode 100644 index 00000000..5178e939 --- /dev/null +++ b/extensions/fablabchemnitz/color_harmony/color_harmony/storage/image.py @@ -0,0 +1,201 @@ + +from os.path import join, basename, splitext +from math import sqrt, floor +from PyQt4 import QtGui + +from color.colors import * +from color import spaces +from color import mixers +from palette.image import PaletteImage +from palette.palette import * +from palette.storage.storage import * +from palette.storage.cluster import * +from palette.storage.table import parse_color_table +from matching.transform import rho, get_center + +LOAD_MORE = 1 +LOAD_LESS_COMMON = 2 +LOAD_LESS_FAREST = 3 +LOAD_TABLE = 4 + +print("Ok") + +class DialogOptions(object): + def __init__(self, method): + self.method = method + self.border_x = 10 + self.border_y = 10 + self.gap_x = 10 + self.gap_y = 10 + self.size_x = 5 + self.size_y = 5 + +class Image(Storage): + name = 'image' + title = _("Raster image") + filters = ["*.jpg", "*.png", "*.gif"] + can_load = image_loading_supported + can_save = True + + @staticmethod + def check(filename): + return True + + @staticmethod + def get_options_widget(dialog, filename): + if use_sklearn: + return None + + def dependencies(): + if dialog.options is None or dialog.options.method != LOAD_TABLE: + table_w.setVisible(False) + else: + table_w.setVisible(True) + + def on_method_changed(checked): + method = None + if dialog._more_button.isChecked(): + method = LOAD_MORE + elif dialog._less_button.isChecked(): + method = LOAD_LESS_COMMON + elif dialog._less_farest.isChecked(): + method = LOAD_LESS_FAREST + elif dialog._table.isChecked(): + method = LOAD_TABLE + dialog.options = DialogOptions(method) + if method == LOAD_TABLE: + dialog.options.border_x = dialog._border_x.value() + dialog.options.border_y = dialog._border_y.value() + dialog.options.gap_x = dialog._gap_x.value() + dialog.options.gap_y = dialog._gap_y.value() + dialog.options.size_x = dialog._size_x.value() + dialog.options.size_y = dialog._size_y.value() + dependencies() + dialog.on_current_changed(filename) + + group_box = QtGui.QGroupBox(_("Loading method")) + dialog._more_button = more = QtGui.QRadioButton(_("Use 49 most used colors")) + dialog._less_button = less = QtGui.QRadioButton(_("Use 9 most used colors and mix them")) + dialog._less_farest = less_farest = QtGui.QRadioButton(_("Use 9 most different colors and mix them")) + dialog._table = table = QtGui.QRadioButton(_("Load table of colors")) + + table_w = QtGui.QWidget(dialog) + table_form = QtGui.QFormLayout(table_w) + dialog._border_x = QtGui.QSpinBox(table_w) + dialog._border_x.valueChanged.connect(on_method_changed) + table_form.addRow(_("Border from right/left side, px"), dialog._border_x) + dialog._border_y = QtGui.QSpinBox(table_w) + dialog._border_y.valueChanged.connect(on_method_changed) + table_form.addRow(_("Border from top/bottom side, px"), dialog._border_y) + dialog._gap_x = QtGui.QSpinBox(table_w) + dialog._gap_x.valueChanged.connect(on_method_changed) + table_form.addRow(_("Width of gap between cells, px"), dialog._gap_x) + dialog._gap_y = QtGui.QSpinBox(table_w) + dialog._gap_y.valueChanged.connect(on_method_changed) + table_form.addRow(_("Height of gap between cells, px"), dialog._gap_y) + dialog._size_x = QtGui.QSpinBox(table_w) + dialog._size_x.setValue(5) + dialog._size_x.valueChanged.connect(on_method_changed) + table_form.addRow(_("Number of columns in the table"), dialog._size_x) + dialog._size_y = QtGui.QSpinBox(table_w) + dialog._size_y.setValue(5) + dialog._size_y.valueChanged.connect(on_method_changed) + table_form.addRow(_("Number of rows in the table"), dialog._size_y) + table_w.setLayout(table_form) + + dependencies() + + more.toggled.connect(on_method_changed) + less.toggled.connect(on_method_changed) + less_farest.toggled.connect(on_method_changed) + table.toggled.connect(on_method_changed) + + if dialog.options is None or dialog.options.method == LOAD_MORE: + more.setChecked(True) + elif dialog.options.method == LOAD_LESS_COMMON: + less.setChecked(True) + elif dialog.options.method == LOAD_TABLE: + table.setChecked(True) + else: + less_farest.setChecked(True) + + vbox = QtGui.QVBoxLayout() + vbox.addWidget(more) + vbox.addWidget(less) + vbox.addWidget(less_farest) + vbox.addWidget(table) + vbox.addWidget(table_w) + group_box.setLayout(vbox) + return group_box + + def save(self, file_w): + w,h = self.palette.ncols * 48, self.palette.nrows * 48 + image = PaletteImage( self.palette ).get(w,h) + print("Writing image: " + file_w) + res = image.save(file_w) + if not res: + image.save(file_w, format='PNG') + + def load(self, mixer, file_r, options=None): + def _cmp(clr1,clr2): + h1,s1,v1 = clr1.getHSV() + h2,s2,v2 = clr2.getHSV() + x = cmp(h1,h2) + if x != 0: + return x + x = cmp(v1,v2) + if x != 0: + return x + return cmp(s1,s2) + + def get_farest(space, colors, n=9): + points = [space.getCoords(c) for c in colors] + center = get_center(points) + srt = sorted(points, key = lambda c: -rho(center, c)) + farest = srt[:n] + return [space.fromCoords(c) for c in farest] + + if use_sklearn or options is None or options.method is None or options.method == LOAD_MORE: + colors = get_common_colors(file_r) + colors.sort(cmp=_cmp) + self.palette = create_palette(colors, mixer) + return self.palette + + elif options.method == LOAD_TABLE: + self.palette = palette = Palette(mixer, nrows=options.size_y, ncols=options.size_x) + colors = parse_color_table(file_r, options) + + for i in range(0, options.size_y): + for j in range(0, options.size_x): + palette.paint(i, j, colors[i][j]) + + return palette + + else: + if options.method == LOAD_LESS_FAREST: + colors = get_common_colors(file_r) + colors = get_farest(spaces.RGB, colors) + else: + colors = get_common_colors(file_r, n_clusters=9) + + self.palette = palette = Palette(mixer, nrows=7, ncols=7) + + palette.paint(0, 0, colors[0]) + palette.paint(0, 3, colors[1]) + palette.paint(0, 6, colors[2]) + palette.paint(3, 0, colors[3]) + palette.paint(3, 3, colors[4]) + palette.paint(3, 6, colors[5]) + palette.paint(6, 0, colors[6]) + palette.paint(6, 3, colors[7]) + palette.paint(6, 6, colors[8]) + + palette.need_recalc_colors = True + palette.recalc() + + name,ext = splitext(basename(file_r)) + self.palette.meta["SourceFormat"] = ext + + return palette + + diff --git a/extensions/fablabchemnitz/color_harmony/color_harmony/storage/kpl.py b/extensions/fablabchemnitz/color_harmony/color_harmony/storage/kpl.py new file mode 100644 index 00000000..275b2be3 --- /dev/null +++ b/extensions/fablabchemnitz/color_harmony/color_harmony/storage/kpl.py @@ -0,0 +1,178 @@ + +from os.path import join, basename +from PyQt4 import QtGui +from lxml import etree as ET +from zipfile import ZipFile, ZIP_DEFLATED + +from color.colors import * +from color import mixers +from palette.storage.storage import * + +MIMETYPE = "application/x-krita-palette" +DEFAULT_GROUP_NAME = "Default (root)" + +class KplPalette(Storage): + name = 'kpl' + title = _("Krita 4.0+ palette format") + filters = ["*.kpl"] + can_load = True + can_save = True + + @staticmethod + def check(filename): + try: + with ZipFile(filename, 'r') as zf: + mimetype = zf.read("mimetype") + return (mimetype == MIMETYPE) + except Exception as e: + print(e) + return False + + @staticmethod + def get_group_names(filename): + result = [DEFAULT_GROUP_NAME] + + with ZipFile(filename, 'r') as zf: + colorset_str = zf.read("colorset.xml") + colorset = ET.fromstring(colorset_str) + + for xmlgrp in colorset.xpath("//Group"): + name = xmlgrp.attrib['name'] + if name is not None: + result.append(name) + + return result + + @staticmethod + def get_options_widget(dialog, filename): + + dialog.options = DEFAULT_GROUP_NAME + + def on_group_changed(selector): + def handler(): + dialog.options = selector.currentText() + dialog.on_current_changed(filename) + return handler + + widget = QtGui.QWidget() + box = QtGui.QHBoxLayout() + label = QtGui.QLabel(_("Group: ")) + selector = QtGui.QComboBox() + + for group_name in KplPalette.get_group_names(filename): + selector.addItem(group_name) + + selector.currentIndexChanged.connect(on_group_changed(selector)) + selector.setCurrentIndex(0) + + box.addWidget(label) + box.addWidget(selector) + widget.setLayout(box) + return widget + + def load(self, mixer, file_r, group_name): + + if group_name is None: + group_name = DEFAULT_GROUP_NAME + + def find_group(xml): + if group_name == DEFAULT_GROUP_NAME: + return xml + for xmlgrp in xml.xpath("//Group"): + if xmlgrp.attrib['name'] == group_name: + return xmlgrp + return None + + self.palette = Palette(mixer) + + with ZipFile(file_r, 'r') as zf: + mimetype = zf.read("mimetype") + if mimetype != MIMETYPE: + raise Exception("This is not a valid Krita palette file") + + colorset_str = zf.read("colorset.xml") + colorset = ET.fromstring(colorset_str) + self.palette.ncols = int( colorset.attrib['columns'] ) + self.palette.name = colorset.attrib.get('name', "Untitled") + + group = find_group(colorset) + if group is None: + print(u"Cannot find group by name {}".format(group_name).encode('utf-8')) + return None + else: + self.palette.name = self.palette.name + " - " + group.attrib.get('name', 'Untitled') + + all_slots = [] + n_colors = 0 + for xmlclr in group.findall('ColorSetEntry'): + name = xmlclr.attrib['name'] + if xmlclr.attrib['bitdepth'] != 'U8': + print("Skip color {}: unsupported bitdepth".format(name)) + continue + rgb = xmlclr.find('RGB') + if rgb is None: + rgb = xmlclr.find('sRGB') + if rgb is None: + print("Skip color {}: no RGB representation".format(name)) + continue + + r = float(rgb.attrib['r'].replace(',', '.')) + g = float(rgb.attrib['g'].replace(',', '.')) + b = float(rgb.attrib['b'].replace(',', '.')) + clr = Color() + clr.setRGB1((r,g,b)) + clr.name = name + slot = Slot(clr) + slot.mode = USER_DEFINED + + all_slots.append(slot) + n_colors += 1 + + if n_colors < DEFAULT_GROUP_SIZE: + self.palette.ncols = n_colors + if not self.palette.ncols: + if n_colors > MAX_COLS: + self.palette.ncols = MAX_COLS + else: + self.palette.ncols = n_colors + #print("Loaded colors: {}".format(len(all_slots))) + self.palette.setSlots(all_slots) + self.palette.meta["SourceFormat"] = "KRITA KPL" + print("Loaded palette: {}x{}".format( self.palette.nrows, self.palette.ncols )) + return self.palette + + def save(self, file_w=None): + with ZipFile(file_w, 'w', ZIP_DEFLATED) as zf: + zf.writestr("mimetype", MIMETYPE) + + xml = ET.Element("Colorset") + xml.attrib['version'] = '1.0' + xml.attrib['columns'] = str(self.palette.ncols) + xml.attrib['name'] = self.palette.name + xml.attrib['comment'] = self.palette.meta.get("Comment", "Generated by Palette Editor") + + for i,row in enumerate(self.palette.slots): + for j,slot in enumerate(row): + color = slot.color + name = color.name + default_name = "Swatch-{}-{}".format(i,j) + if not name: + name = default_name + + elem = ET.SubElement(xml, "ColorSetEntry") + elem.attrib['spot'] = color.meta.get("Spot", "false") + elem.attrib['id'] = default_name + elem.attrib['name'] = name + elem.attrib['bitdepth'] = 'U8' + + r,g,b = color.getRGB1() + srgb = ET.SubElement(elem, "sRGB") + srgb.attrib['r'] = str(r) + srgb.attrib['g'] = str(g) + srgb.attrib['b'] = str(b) + + tree = ET.ElementTree(xml) + tree_str = ET.tostring(tree, encoding='utf-8', pretty_print=True, xml_declaration=False) + + zf.writestr("colorset.xml", tree_str) + diff --git a/extensions/fablabchemnitz/color_harmony/color_harmony/storage/scribus.py b/extensions/fablabchemnitz/color_harmony/color_harmony/storage/scribus.py new file mode 100644 index 00000000..6672b28f --- /dev/null +++ b/extensions/fablabchemnitz/color_harmony/color_harmony/storage/scribus.py @@ -0,0 +1,76 @@ + +from math import floor +from os.path import join, basename +from lxml import etree as ET + +from color.colors import * +from color import mixers +from palette.storage.storage import * + +cmyk_factor = float(1.0/255.0) + +def fromHex_CMYK(s): + t = s[1:] + cs,ms,ys,ks = t[0:2], t[2:4], t[4:6], t[6:8] + c,m,y,k = int(cs,16), int(ms,16), int(ys,16), int(ks,16) + c,m,y,k = [float(x)*cmyk_factor for x in [c,m,y,k]] + result = Color() + result.setCMYK((c,m,y,k)) + return result + +class Scribus(Storage): + name = 'scribus' + title = _("Scribus color swatches") + filters = ["*.xml"] + can_load = True + can_save = True + + @staticmethod + def check(filename): + return ET.parse(filename).getroot().tag == 'SCRIBUSCOLORS' + + def load(self, mixer, file_r, options=None): + xml = ET.parse(file_r).getroot() + + colors = [] + name = xml.attrib.get("Name", "Untitled") + + for elem in xml.findall("COLOR"): + if "RGB" in elem.attrib: + color = fromHex(elem.attrib["RGB"]) + colors.append(color) + elif "CMYK" in elem.attrib: + color = fromHex_CMYK(elem.attrib["CMYK"]) + colors.append(color) + else: + continue + if "NAME" in elem.attrib: + color.meta["Name"] = elem.attrib["NAME"] + if "Spot" in elem.attrib: + color.meta["Spot"] = elem.attrib["Spot"] + if "Register" in elem.attrib: + color.meta["Register"] = elem.attrib["Register"] + + self.palette = create_palette(colors) + self.palette.name = name + return self.palette + + def save(self, file_w): + name = self.palette.name + if not name: + name = "Palette" + xml = ET.Element("SCRIBUSCOLORS", NAME=name) + + for i,row in enumerate(self.palette.getColors()): + for j,color in enumerate(row): + name = color.name + if not name: + name = "Swatch-{}-{}".format(i,j) + elem = ET.SubElement(xml, "COLOR", NAME=name, RGB=color.hex()) + if "Spot" in color.meta: + elem.attrib["Spot"] = color.meta["Spot"] + if "Register" in color.meta: + elem.attrib["Register"] = color.meta["Register"] + + + ET.ElementTree(xml).write(file_w, encoding="utf-8", pretty_print=True, xml_declaration=True) diff --git a/extensions/fablabchemnitz/color_harmony/color_harmony/storage/storage.py b/extensions/fablabchemnitz/color_harmony/color_harmony/storage/storage.py new file mode 100644 index 00000000..26f849bd --- /dev/null +++ b/extensions/fablabchemnitz/color_harmony/color_harmony/storage/storage.py @@ -0,0 +1,62 @@ + +from os.path import join, basename +from math import sqrt, floor + +from color.colors import * +from color import mixers +from palette.palette import * + +class Storage(object): + + name = None + title = None + filters = [] + + can_load = False + can_save = False + + def __init__(self, palette=None): + self.palette = palette + + @classmethod + def get_filter(cls): + return u"{} ({})".format(cls.title, u" ".join(cls.filters)) + + @staticmethod + def check(filename): + return True + + @staticmethod + def get_options_widget(dialog, filename): + return None + + def load(self, mixer, file_r, *args, **kwargs): + raise NotImplemented + + def save(self, file_w): + raise NotImplemented + +def create_palette(colors, mixer=None, ncols=None): + """Create Palette from list of Colors.""" + if mixer is None: + mixer = mixers.MixerRGB + palette = Palette(mixer) + palette.ncols = ncols + + all_slots = [] + + for clr in colors: + slot = Slot(clr, user_defined=True) + all_slots.append(slot) + + n_colors = len(all_slots) + + if palette.ncols is None: + if n_colors > MAX_COLS: + palette.ncols = max( int( floor(sqrt(n_colors)) ), 1) + else: + palette.ncols = n_colors + + palette.setSlots(all_slots) + return palette + diff --git a/extensions/fablabchemnitz/color_harmony/color_harmony/storage/xml.py b/extensions/fablabchemnitz/color_harmony/color_harmony/storage/xml.py new file mode 100644 index 00000000..47129dca --- /dev/null +++ b/extensions/fablabchemnitz/color_harmony/color_harmony/storage/xml.py @@ -0,0 +1,179 @@ + +from os.path import join, basename +from PyQt4 import QtGui +from lxml import etree as ET + +from color.colors import * +from color import mixers +from palette.storage.storage import * + +class XmlPalette(Storage): + name = 'xml' + title = _("CREATE palette format") + filters = ["*.xml"] + can_load = True + can_save = True + + @staticmethod + def check(filename): + return ET.parse(filename).getroot().tag == 'colors' + + @staticmethod + def get_options_widget(dialog, filename): + + def on_group_changed(selector): + def handler(): + dialog.options = selector.currentText() + dialog.on_current_changed(filename) + return handler + + widget = QtGui.QWidget() + box = QtGui.QHBoxLayout() + label = QtGui.QLabel(_("Group: ")) + selector = QtGui.QComboBox() + + xml = ET.parse(filename) + for xmlgrp in xml.xpath("//group"): + xml_label = xmlgrp.find('label') + if xml_label is not None: + selector.addItem(xml_label.text) + + selector.currentIndexChanged.connect(on_group_changed(selector)) + selector.setCurrentIndex(0) + + box.addWidget(label) + box.addWidget(selector) + widget.setLayout(box) + return widget + + @staticmethod + def get_group_names(filename): + result = [] + xml = ET.parse(filename) + for xmlgrp in xml.xpath("//group"): + xml_label = xmlgrp.find('label') + if xml_label is not None: + result.append(xml_label.text) + return result + + def save(self, file_w=None): + xml = ET.Element("colors") + root_group = ET.SubElement(xml, "group") + group = ET.SubElement(root_group, "group") + label = ET.SubElement(group, "label") + label.text = self.palette.name + layout = ET.SubElement(group, "layout", columns=str(self.palette.ncols), expanded="True") + + for key,value in self.palette.meta.items(): + if key != "Name": + meta = ET.SubElement(group, "meta", name=key) + meta.text = value + + for i,row in enumerate(self.palette.slots): + for j,slot in enumerate(row): + color = slot.color + name = color.name + if not name: + name = "Swatch-{}-{}".format(i,j) + elem = ET.SubElement(group, "color") + label = ET.SubElement(elem, "label") + label.text = name + if slot.mode == USER_DEFINED: + meta = ET.SubElement(elem, "meta", name="user_chosen") + meta.text = "True" + for key,value in color.meta.items(): + if key != "Name": + meta = ET.SubElement(elem, "meta", name=key) + meta.text = value + rgb = ET.SubElement(elem, "sRGB") + r,g,b = color.getRGB1() + rgb.attrib["r"] = str(r) + rgb.attrib["g"] = str(g) + rgb.attrib["b"] = str(b) + + ET.ElementTree(xml).write(file_w, encoding="utf-8", pretty_print=True, xml_declaration=True) + + def load(self, mixer, file_r, group_name): + + def get_label(grp): + xml_label = grp.find('label') + if xml_label is None: + return None + return xml_label.text + + + def find_group(xml): + #print("Searching {}".format(group_name)) + grp = None + for xmlgrp in xml.xpath("//group"): + label = get_label(xmlgrp) + if label is None: + continue + #print("Found: {}".format(label)) + if group_name is None or label == group_name: + grp = xmlgrp + break + return grp + + self.palette = Palette(mixer) + self.palette.ncols = None + xml = ET.parse(file_r) + grp = find_group(xml) + if grp is None: + print(u"Cannot find group by name {}".format(group_name).encode('utf-8')) + return None + self.palette.name = get_label(grp) + + layout = grp.find('layout') + if layout is not None: + self.palette.ncols = int( layout.attrib['columns'] ) + + metas = grp.findall('meta') + if metas is not None: + for meta in metas: + key = meta.attrib['name'] + value = meta.text + if key != 'Name': + self.palette.meta[key] = value + + all_slots = [] + n_colors = 0 + for xmlclr in grp.findall('color'): + sRGB = xmlclr.find('sRGB') + if sRGB is None: + continue + attrs = sRGB.attrib + r = float(attrs['r'].replace(',','.')) + g = float(attrs['g'].replace(',','.')) + b = float(attrs['b'].replace(',','.')) + clr = Color() + clr.setRGB1((r,g,b)) + slot = Slot(clr) + metas = xmlclr.findall('meta') + if metas is not None: + for meta in metas: + key = meta.attrib['name'] + value = meta.text + if key == 'user_chosen' and value == 'True': + slot.mode = USER_DEFINED + else: + clr.meta[key] = value + label = xmlclr.find('label') + if label is not None: + clr.name = label.text + all_slots.append(slot) + n_colors += 1 + + if n_colors < DEFAULT_GROUP_SIZE: + self.palette.ncols = n_colors + if not self.palette.ncols: + if n_colors > MAX_COLS: + self.palette.ncols = MAX_COLS + else: + self.palette.ncols = n_colors + #print("Loaded colors: {}".format(len(all_slots))) + self.palette.setSlots(all_slots) + self.palette.meta["SourceFormat"] = "CREATE XML" + print("Loaded palette: {}x{}".format( self.palette.nrows, self.palette.ncols )) + return self.palette + diff --git a/extensions/fablabchemnitz/color_harmony/color_harmony/utils.py b/extensions/fablabchemnitz/color_harmony/color_harmony/utils.py new file mode 100644 index 00000000..da96e127 --- /dev/null +++ b/extensions/fablabchemnitz/color_harmony/color_harmony/utils.py @@ -0,0 +1,49 @@ +#!/usr/bin/env python +# coding=utf-8 +# +# Copyright (C) 2009-2018 Ilya Portnov +# (original 'palette-editor' tool, version 0.0.7) +# 2020 Maren Hachmann (extension-ification) +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + +# Helper functions +def circle_hue(i, n, h, max=1.0): + h += i * max / n + if h > max: + h -= max + return h + +def seq(start, stop, step=1): + n = int(round((stop - start)/step)) + if n > 1: + return([start + step*i for i in range(n+1)]) + else: + return([]) + +def variate(x, step=1.0, dmin=1.0, dmax=None): + if dmax is None: + dmax = dmin + return seq(x-dmin, x+dmax, step) + +def clip(x, min=0.0, max=1.0): + if x < min: + #print("{:.2f} clipped up to {:.2f}".format(x, min)) + return min + if x > max: + #print("{:.2f} clipped down to {:.2f}".format(x, max)) + return max + return x diff --git a/extensions/fablabchemnitz/colorize_path_lengths/colorize_path_lengths.inx b/extensions/fablabchemnitz/colorize_path_lengths/colorize_path_lengths.inx new file mode 100644 index 00000000..cfeb03be --- /dev/null +++ b/extensions/fablabchemnitz/colorize_path_lengths/colorize_path_lengths.inx @@ -0,0 +1,28 @@ + + + Colorize Path Lengths + fablabchemnitz.de.colorize_path_lengths + + + + + + 12 + 25 + 40 + 60 + 60 + 0.1 + 10 + + path + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/colorize_path_lengths/colorize_path_lengths.py b/extensions/fablabchemnitz/colorize_path_lengths/colorize_path_lengths.py new file mode 100644 index 00000000..5e191f6b --- /dev/null +++ b/extensions/fablabchemnitz/colorize_path_lengths/colorize_path_lengths.py @@ -0,0 +1,138 @@ +#!/usr/bin/env python3 +''' +pathselection.py + +Sunabe kazumichi 2009/9/29 +http://dp48069596.lolipop.jp/ + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +''' +import inkex, locale +import math +from lxml import etree +from inkex import paths +from inkex import bezier + +# Set current system locale +locale.setlocale(locale.LC_ALL, '') + +def cspseglength(sp1,sp2, tolerance = 0.001): + bez = (sp1[1][:],sp1[2][:],sp2[0][:],sp2[1][:]) + return bezier.bezierlength(bez, tolerance) +def csplength(csp): + lengths = [] + for sp in csp: + lengths.append([]) + for i in range(1,len(sp)): + l = cspseglength(sp[i-1],sp[i]) + lengths[-1].append(l) + return lengths + +def roughBBox(path): + xmin,xMax,ymin,yMax=path[0][0][0],path[0][0][0],path[0][0][1],path[0][0][1] + for pathcomp in path: + for pt in pathcomp: + xmin=min(xmin,pt[0]) + xMax=max(xMax,pt[0]) + ymin=min(ymin,pt[1]) + yMax=max(yMax,pt[1]) + if xMax-xmin==0: + tn=0 + else : + tn=(yMax-ymin)/(xMax-xmin) + return tn + +class ColorizePathLengths(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument("-s", "--selection", default=True, help="select path with length or slant") + pars.add_argument("-1", "--len1", type=float, default=12) + pars.add_argument("-2", "--len2", type=float, default=25) + pars.add_argument("-3", "--len3", type=float, default=40) + pars.add_argument("-4", "--len4", type=float, default=60) + pars.add_argument("-5", "--len5", type=float, default=60) + pars.add_argument("-6", "--hor", type=float, default=0.2) + pars.add_argument("-7", "--ver", type=float, default=10) + + def effect(self): + # loop over all selected paths + if self.options.selection=="path_lengthselection": + if len(self.svg.selected) > 0: + for node in self.svg.selected.values(): + if node.tag == inkex.addNS('path','svg'): + l1,l2,l3,l4,l5=[],[],[],[],[] + p = paths.CubicSuperPath(inkex.paths.Path(node.get('d'))) + slengths= csplength(p) + b=[slengths, p] + + # path length select + for x in range(0,len(slengths)): + if sum(b[0][x])sum(b[0][x])>=self.options.len1 : + l2.append(b[1][x]) + if self.options.len3>sum(b[0][x])>=self.options.len2 : + l3.append(b[1][x]) + if self.options.len4>sum(b[0][x])>=self.options.len3 : + l4.append(b[1][x]) + if sum(b[0][x])>=self.options.len4 : + l5.append(b[1][x]) + + # make path + lensel=[l1,l2,l3,l4,l5] + strlen=['#FF0001','#00FF02','#AAFF03','#87CEE4','#000FF5'] + for i,x in zip(strlen,lensel): + s = {'stroke-linejoin': 'miter', 'stroke-width': '0.5px', + 'stroke-opacity': '1.0', 'fill-opacity': '1.0', + 'stroke': i, 'stroke-linecap': 'butt', 'fill': 'none'} + attribs={'style':str(inkex.Style(s)),'d':str(paths.Path(paths.CubicSuperPath(x).to_path().to_arrays()))} + etree.SubElement(node.getparent(),inkex.addNS('path','svg'),attribs) + else: + self.msg('Please select some paths first.') + return + + if self.options.selection=="path_slantselection": + if len(self.svg.selected) > 0: + for node in self.svg.selected.values(): + if node.tag == inkex.addNS('path','svg'): + hor1,ver2,slan3=[],[],[] + p = paths.CubicSuperPath(inkex.paths.Path(node.get('d'))) + + # path slant select + for i,x in enumerate(p): + tn=roughBBox(x) + if tnself.options.ver: + ver2.append(p[i]) + else: + slan3.append(p[i]) + + # make path + slnsel=[hor1,ver2,slan3] + strsln=['#FF0001','#00FF02','#000FF5'] + for i,x in zip(strsln,slnsel): + s = {'stroke-linejoin': 'miter', 'stroke-width': '0.5px', + 'stroke-opacity': '1.0', 'fill-opacity': '1.0', + 'stroke': i, 'stroke-linecap': 'butt', 'fill': 'none'} + attribs={'style':str(inkex.Style(s)),'d':str(paths.Path(paths.CubicSuperPath(x).to_path().to_arrays()))} + etree.SubElement(node.getparent(),inkex.addNS('path','svg'),attribs) + else: + self.msg('Please select some paths first.') + return + +if __name__ == '__main__': + ColorizePathLengths().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/contour_scanner_and_trimmer/contour_scanner_and_trimmer.inx b/extensions/fablabchemnitz/contour_scanner_and_trimmer/contour_scanner_and_trimmer.inx new file mode 100644 index 00000000..8e1a77f7 --- /dev/null +++ b/extensions/fablabchemnitz/contour_scanner_and_trimmer/contour_scanner_and_trimmer.inx @@ -0,0 +1,185 @@ + + + Contour Scanner And Trimmer + fablabchemnitz.de.contour_scanner_and_trimmer + + + + + + false + false + false + true + 0.100 + 3 + 0.1 + 0.01 + + 1.0 + 30 + false + + + + + + + + + + + + + false + false + false + false + false + false + false + false + false + + true + + + + + + false + + + + false + false + false + false + false + false + false + false + false + + false + false + false + + false + false + + + + + + + + + false + true + true + false + true + true + + true + false + false + false + true + + + + + + + + + + 1630897151 + + 3419879935 + 1592519679 + 3351636735 + 4289703935 + 258744063 + 4118348031 + 4012452351 + 2330080511 + + + + + 897901823 + 869366527 + + 2593756927 + 6320383 + 4239343359 + + 3227634687 + 1923076095 + 3045284607 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ../000_about_fablabchemnitz.svg + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/contour_scanner_and_trimmer/contour_scanner_and_trimmer.py b/extensions/fablabchemnitz/contour_scanner_and_trimmer/contour_scanner_and_trimmer.py new file mode 100644 index 00000000..5d9b215b --- /dev/null +++ b/extensions/fablabchemnitz/contour_scanner_and_trimmer/contour_scanner_and_trimmer.py @@ -0,0 +1,1290 @@ +#!/usr/bin/env python3 + +''' +Extension for InkScape 1.0+ + - WARNING: HORRIBLY SLOW CODE. PLEASE HELP TO MAKE IT USEFUL FOR LARGE AMOUNT OF PATHS + - ToDo: + - add more comments + - add more debug output + - add documentation about used algorithms at online page + - add statistics about type counts and path lengths (before/after sub splitting/trimming) + - add options: + - replace trimmed paths by bezier paths (calculating lengths and required t parameter) + - filter/remove overlapping/duplicates in + - in original selection (not working bezier but for straight line segments!) We can use another extension for it + - split bezier + - ... + - maybe option: convert abs path to rel path + - maybe option: convert rel path to abs path + replacedelement.path = replacedelement.path.to_absolute().to_superpath().to_path() + - maybe option: break apart while keeping relative/absolute commands (more complex and not sure if we have a great advantage having this) + - note: running this extension might leave some empty parent groups in some circumstances. run the clean groups extension separately to fix that + +- important to notice + - this algorithm might be really slow. Reduce flattening quality to speed up + - the code quality is horrible. We need a lot of asserts and functions to structure that stuff + - try to adjust snap tolerance and flatness in case of errors, like + poly_point_isect.py: "KeyError: 'Event(0x21412ce81c0, s0=(47.16, 179.1), + s1=(47.17, 178.21), p=(47.16, 179.1), type=2, slope=-88.9999999999531)'" + - this extension does not check for strange paths. Please ensure that your path 'd' + data is valid (no pointy paths, no duplicates, etc.) + - Notes about shapely: + - we do not use shapely to look for intersections by cutting each line against + each other line (line1.intersection(line2) using two for-loops) because this + kind of logic is really really slow for huge amount. You could use that only + for ~50-100 elements. So we use special algorihm (Bentley-Ottmann) + - intersects() is equivalent to the OR-ing of contains(), crosses(), equals(), touches(), and within(). + So there might be some cases where two lines intersect eachother without crossing, + in particular when one line contains another or when two lines are equals. + - crosses() returns True if the dimension of the intersection is less than the dimension of the one or the other. + So if two lines overlap, they won't be considered as "crossing". intersection() will return a geometric object. + - Cool tool to visualize sweep line algorithm Bentley-Ottmann: https://bl.ocks.org/1wheel/464141fe9b940153e636 + +- things to look at more closely: + - https://gis.stackexchange.com/questions/203048/split-lines-at-points-using-shapely + - https://stackoverflow.com/questions/34754777/shapely-split-linestrings-at-intersections-with-other-linestrings + - There are floating point precision errors when finding a point on a line. Use the distance with an appropriate threshold instead. + - line.within(point) # False + - line.distance(point) # 7.765244949417793e-11 + - line.distance(point) < 1e-8 # True + - https://bezier.readthedocs.io/en/stable/python/reference/bezier.hazmat.clipping.html / https://github.com/dhermes/bezier + - De Casteljau Algorithm + +Author: Mario Voigt / FabLab Chemnitz +Mail: mario.voigt@stadtfabrikanten.org +Date: 09.08.2020 (extension originally called "Contour Scanner") +Last patch: 08.07.2021 +License: GNU GPL v3 + +''' + +import sys +import os +import copy +from lxml import etree +import poly_point_isect +from poly_point_isect import isect_segments +import inkex +from inkex import transforms, bezier, PathElement, Color, Circle +from inkex.bezier import csplength +from inkex.paths import Path, CubicSuperPath +from shapely.geometry import LineString, Point, MultiPoint +from shapely.ops import snap, split +from shapely import speedups +if speedups.available: + speedups.enable() + +idPrefixSubSplit = "subsplit" +idPrefixTrimming = "trimmed" +intersectedVerb = "intersected" +collinearVerb = "collinear" + +class ContourScannerAndTrimmer(inkex.EffectExtension): + + + def break_contours(self, element, breakelements = None): + ''' + this does the same as "CTRL + SHIFT + K" + This functions honors the fact of absolute or relative paths! + ''' + if breakelements == None: + breakelements = [] + if element.tag == inkex.addNS('path','svg'): + parent = element.getparent() + idx = parent.index(element) + idSuffix = 0 + #raw = str(element.path).split() + raw = element.path.to_arrays() + subPaths = [] + prev = 0 + for i in range(len(raw)): # Breaks compound paths into simple paths + #if raw[i][0].upper() == 'M' and i != 0: + if raw[i][0] == 'M' and i != 0: + subPath = raw[prev:i] + subPaths.append(Path(subPath)) + prev = i + subPaths.append(Path(raw[prev:])) #finally add the last path + + for subPath in subPaths: + replacedelement = copy.copy(element) + oldId = replacedelement.get('id') + csp = CubicSuperPath(subPath) + if len(subPath) > 1 and csp[0][0] != csp[0][1]: #avoids pointy paths like M "31.4794 57.6024 Z" + replacedelement.path = subPath + replacedelement.set('id', oldId + str(idSuffix)) + parent.insert(idx, replacedelement) + idSuffix += 1 + breakelements.append(replacedelement) + element.delete() + for child in element.getchildren(): + self.break_contours(child, breakelements) + return breakelements + + + def get_child_paths(self, element, elements = None): + ''' a function to get child paths from elements (used by "handling groups" option) ''' + if elements == None: + elements = [] + if element.tag == inkex.addNS('path','svg'): + elements.append(element) + for child in element.getchildren(): + self.get_child_paths(child, elements) + return elements + + + def get_path_elements(self): + ''' get all path elements, either from selection or from whole document. Uses options ''' + pathElements = [] + if len(self.svg.selected) == 0: #if nothing selected we search for the complete document + pathElements = self.document.xpath('//svg:path', namespaces=inkex.NSS) + else: # or get selected paths (and children) and convert them to shapely LineString objects + if self.options.handle_groups is False: + pathElements = list(self.svg.selection.filter(PathElement).values()) + else: + for element in self.svg.selection.values(): + pathElements = self.get_child_paths(element, pathElements) + + if len(pathElements) == 0: + self.msg('Selection appears to be empty or does not contain any valid svg:path nodes. Try to cast your objects to paths using CTRL + SHIFT + C or strokes to paths using CTRL + ALT + C') + exit(1) + + if self.options.break_apart is True: + breakApartElements = None + for pathElement in pathElements: + breakApartElements = self.break_contours(pathElement, breakApartElements) + pathElements = breakApartElements + + if self.options.show_debug is True: + self.msg("total processing paths count: {}".format(len(pathElements))) + + return pathElements + + + def find_group(self, groupId): + ''' check if a group with a given id exists or not. Returns None if not found, else returns the group element ''' + groups = self.document.xpath('//svg:g', namespaces=inkex.NSS) + for group in groups: + #self.msg(str(layer.get('inkscape:label')) + " == " + layerName) + if group.get('id') == groupId: + return group + return None + + + def adjust_style(self, element): + ''' Replace some style attributes of the given element ''' + if element.attrib.has_key('style'): + style = element.get('style') + if style: + declarations = style.split(';') + for i,decl in enumerate(declarations): + parts = decl.split(':', 2) + if len(parts) == 2: + (prop, val) = parts + prop = prop.strip().lower() + if prop == 'stroke-width': + declarations[i] = prop + ':' + str(self.svg.unittouu(str(self.options.strokewidth) +"px")) + if prop == 'fill': + declarations[i] = prop + ':none' + element.set('style', ';'.join(declarations) + ';stroke:#000000;stroke-opacity:1.0') + else: + element.set('style', 'stroke:#000000;stroke-opacity:1.0') + + + def line_from_segments(self, segs, i, decimals): + '''builds a straight line for the segment i and the next segment i+2. Returns both point XY coordinates''' + pseudoPath = Path(segs[i:i+2]).to_arrays() + x1 = round(pseudoPath[0][1][-2], decimals) + y1 = round(pseudoPath[0][1][-1], decimals) + if pseudoPath[1][0] == 'Z': #some crappy code when the path is closed + pseudoPathEnd = Path(segs[0:2]).to_arrays() + x2 = round(pseudoPathEnd[0][1][-2], decimals) + y2 = round(pseudoPathEnd[0][1][-1], decimals) + else: + x2 = round(pseudoPath[1][1][-2], decimals) + y2 = round(pseudoPath[1][1][-1], decimals) + return x1, y1, x2, y2 + + + def visualize_self_intersections(self, pathElement, selfIntersectionPoints): + ''' Draw some circles at given point coordinates (data from array)''' + selfIntersectionGroup = pathElement.getparent().add(inkex.Group(id="selfIntersectionPoints-{}".format(pathElement.attrib["id"]))) + selfIntersectionPointStyle = {'stroke': 'none', 'fill': self.options.color_self_intersections} + for selfIntersectionPoint in selfIntersectionPoints: + cx = selfIntersectionPoint[0] + cy = selfIntersectionPoint[1] + selfIntersectionPointCircle = Circle(cx=str(cx), + cy=str(cy), + r=str(self.svg.unittouu(str(self.options.dotsize_intersections / 2) + "px")) + ) + + if pathElement.getparent() != self.svg.root: + selfIntersectionPointCircle.transform = -pathElement.getparent().composed_transform() + selfIntersectionPointCircle.set('id', self.svg.get_unique_id('selfIntersectionPoint-')) + selfIntersectionPointCircle.style = selfIntersectionPointStyle + selfIntersectionGroup.add(selfIntersectionPointCircle) + return selfIntersectionGroup + + + def visualize_global_intersections(self, globalIntersectionPoints): + ''' Draw some circles at given point coordinates (data from array)''' + if len(globalIntersectionPoints) > 0: #only create a group and add stuff if there are some elements to work on + globalIntersectionGroup = self.svg.root.add(inkex.Group(id="globalIntersectionPoints")) + globalIntersectionPointStyle = {'stroke': 'none', 'fill': self.options.color_global_intersections} + for globalIntersectionPoint in globalIntersectionPoints: + cx = globalIntersectionPoint.coords[0][0] + cy = globalIntersectionPoint.coords[0][1] + globalIntersectionPointCircle = Circle(cx=str(cx), + cy=str(cy), + r=str(self.svg.unittouu(str(self.options.dotsize_intersections / 2) + "px")) + ) + globalIntersectionPointCircle.set('id', self.svg.get_unique_id('globalIntersectionPoint-')) + globalIntersectionPointCircle.style = globalIntersectionPointStyle + globalIntersectionGroup.add(globalIntersectionPointCircle) + + + def build_trim_line_group(self, subSplitLineArray, subSplitIndex, globalIntersectionPoints): + ''' make a group containing trimmed lines''' + + #Check if we should skip or process the path anyway + isClosed = subSplitLineArray[subSplitIndex].attrib['originalPathIsClosed'] + if self.options.trimming_path_types == 'open_paths' and isClosed == 'True': return #skip this call + elif self.options.trimming_path_types == 'closed_paths' and isClosed == 'False': return #skip this call + elif self.options.trimming_path_types == 'both': pass + + csp = subSplitLineArray[subSplitIndex].path.to_arrays() + ls = LineString([(csp[0][1][0], csp[0][1][1]), (csp[1][1][0], csp[1][1][1])]) + + trimLineStyle = {'stroke': str(self.options.color_trimmed), 'fill': 'none', 'stroke-width': self.options.strokewidth} + + linesWithSnappedIntersectionPoints = snap(ls, globalIntersectionPoints, self.options.snap_tolerance) + trimGroupParentId = subSplitLineArray[subSplitIndex].attrib['originalPathId'] + trimGroupId = '{}-{}-{}'.format(idPrefixTrimming, idPrefixSubSplit, trimGroupParentId) + trimGroupParent = self.svg.getElementById(trimGroupParentId) + #trimGroupParentTransform = trimGroupParent.composed_transform() + trimGroup = self.find_group(trimGroupId) + if trimGroup is None: + trimGroup = trimGroupParent.getparent().add(inkex.Group(id=trimGroupId)) + + #apply isBezier and original path id information to group (required for bezier splitting the original path at the end) + trimGroup.attrib['originalPathIsBezier'] = subSplitLineArray[subSplitIndex].attrib['originalPathIsBezier'] + trimGroup.attrib['originalPathIsPolyBezMixed'] = subSplitLineArray[subSplitIndex].attrib['originalPathIsPolyBezMixed'] + trimGroup.attrib['originalPathId'] = subSplitLineArray[subSplitIndex].attrib['originalPathId'] + + #split all lines against all other lines using the intersection points + trimLines = split(linesWithSnappedIntersectionPoints, globalIntersectionPoints) + + splitAt = [] #if the sub split line was split by an intersecting line we receive two trim lines with same assigned original path id! + prevLine = None + for j in range(len(trimLines)): + + trimLineId = "{}-{}".format(trimGroupId, subSplitIndex) + splitAt.append(trimGroupId) + if splitAt.count(trimGroupId) > 1: #we detected a lines with intersection on + trimLineId = "{}-{}".format(trimLineId, self.svg.get_unique_id(intersectedVerb + "-")) + ''' + so the previous lines was an intersection lines too. so we change the id to include the intersected verb + (left side and right side of cut) - note: updating element + id sometimes seems not to work if the id was used before in Inkscape + ''' + prevLine.attrib['id'] = "{}-{}".format(trimGroupId, str(subSplitIndex) + "-" + self.svg.get_unique_id(intersectedVerb + "-")) + prevLine.attrib['intersected'] = 'True' #some dirty flag we need + prevLine = trimLine = inkex.PathElement(id=trimLineId) + x, y = trimLines[j].coords.xy + x0 = round(x[0], self.options.decimals) + x1 = round(x[1], self.options.decimals) + y0 = round(y[0], self.options.decimals) + y1 = round(y[1], self.options.decimals) + if x0 == x1 and y0 == y1: #check if the trimLine is a pointy one (rounded start point equals rounded end point) + if self.options.show_debug is True: + self.msg("pointy trim line (start point equals end point). Skipping ...") + continue + + trimLine.attrib['d'] = 'M {},{} L {},{}'.format(x0, y0, x1, y1) #we set the path of trimLine using 'd' attribute because if we use trimLine.path the decimals get cut off unwantedly + #trimLine.path = Path([['M', [x0,y0]], ['L', [x1,y1]]]) + + #if trimGroupParentTransform is not None: + # trimLine.path = trimLine.path.transform(-trimGroupParentTransform) + if self.options.trimmed_style == "apply_from_trimmed": + trimLine.style = trimLineStyle + elif self.options.trimmed_style == "apply_from_original": + trimLine.style = subSplitLineArray[subSplitIndex].attrib['originalPathStyle'] + trimGroup.add(trimLine) + return trimGroup + + + def slope(self, p0, p1): + ''' + Calculate the slope (gradient) of a line's start point p0 + end point p1 + ''' + dx = p1[0] - p0[0] + if dx == 0: + return sys.float_info.max #vertical + return (p1[1] - p0[1]) / dx + + + def process_set_x(self, working_set): + if len(working_set) < 2: + return (True, working_set) + + # sort working set left to right + working_set.sort(key=lambda x: x['p0'][0]) + for i in range(0, len(working_set)): + for j in range(i + 1, len(working_set)): + + # calculate slope from S0P0 to S1P1 and S0P1 to S1P0 + # if slopes all match the working set's slope, we're collinear + # if not, these segments are parallel but not collinear and should be left alone + expected_slope = working_set[i]['slope'] + if (abs(self.slope(working_set[i]['p1'], working_set[j]['p0']) - expected_slope) > self.options.collinear_filter_epsilon) \ + or (abs(self.slope(working_set[i]['p0'], working_set[j]['p1']) - expected_slope) > self.options.collinear_filter_epsilon): + continue + + # the only remaining permissible configuration: collinear segments with a gap between them + # e.g. --- ----- + # otherwise we combine segments and flag the set as requiring more processing + s0x0 = working_set[i]['p0'][0] + s0x1 = working_set[i]['p1'][0] + s1x0 = working_set[j]['p0'][0] + s1x1 = working_set[j]['p1'][0] + + if not (s0x0 < s0x1 and s0x1 < s1x0 and s1x0 < s1x1): + # make a duplicate set, omitting segments i and j + new_set = [x for (k, x) in enumerate(working_set) if k not in (i, j)] + + # add a segment representing i and j's furthest points + pts = [ working_set[i]['p0'], working_set[i]['p1'], working_set[j]['p0'], working_set[j]['p1'] ] + pts.sort(key=lambda x: x[0]) + + new_set.append({ + 'p0': pts[0], + 'p1': pts[-1], + 'slope': self.slope(pts[0], pts[-1]), + 'id': working_set[i]['id'], + 'originalPathId': working_set[i]['originalPathId'], + 'composed_transform': working_set[i]['composed_transform'] + }) + return (False, new_set) + + return (True, working_set) + + + def process_set_y(self, working_set): + if len(working_set) < 2: + return (True, working_set) + + # sort working set top to bottom + working_set.sort(key=lambda y: -y['p0'][1]) + + for i in range(0, len(working_set)): + for j in range(i + 1, len(working_set)): + + # the only remaining permissible configuration: collinear segments with a gap between them + # e.g. + # | + # | + # + # | + # | + # | + # + # otherwise we combine segments and flag the set as requiring more processing + s0y0 = working_set[i]['p0'][1] + s0y1 = working_set[i]['p1'][1] + s1y0 = working_set[j]['p0'][1] + s1y1 = working_set[j]['p1'][1] + + if not (s0y0 < s0y1 and s0y1 < s1y0 and s1y0 < s1y1): + # make a duplicate set, omitting segments i and j + new_set = [y for (k, y) in enumerate(working_set) if k not in (i, j)] + + # add a segment representing i and j's furthest points + pts = [ working_set[i]['p0'], working_set[i]['p1'], working_set[j]['p0'], working_set[j]['p1'] ] + pts.sort(key=lambda y: y[1]) + new_set.append({ + 'p0': pts[0], + 'p1': pts[-1], + 'slope': self.slope(pts[0], pts[-1]), + 'id': working_set[i]['id'], + 'originalPathId': working_set[i]['originalPathId'], + 'composed_transform': working_set[i]['composed_transform'] + }) + return (False, new_set) + + return (True, working_set) + + + def filter_collinear(self, lineArray): + ''' Another sweep line algorithm to scan collinear lines + Loop through a set of lines and find + fiter all overlapping segments / duplicate segments + finally returns a set of merged-like lines and a set of original items which should be dropped. + Based on the style of the algorithm we have no good influence on the z-index of the items because + it is scanned by slope and point coordinates. That's why we have a more special + 'remove_trim_duplicates()' function for trimmed duplicates! + ''' + + ''' + filter for regular input lines and special vertical lines + ''' + input_set = [] + input_ids = [] + + # collect segments, calculate their slopes, order their points left-to-right + for line in lineArray: + #csp = line.path.to_arrays() + parent = line.getparent() + if parent is not None: + csp = Path(line.path.transform(parent.composed_transform())).to_arrays() + else: + csp = line.path.to_arrays() + #self.msg("csp = {}".format(csp)) + x1, y1, x2, y2 = csp[0][1][0], csp[0][1][1], csp[1][1][0], csp[1][1][1] + # ensure p0 is left of p1 + if x1 < x2: + s = { + 'p0': [x1, y1], + 'p1': [x2, y2] + } + else: + s = { + 'p0': [x2, y2], + 'p1': [x1, y1] + } + s['slope'] = self.slope(s['p0'], s['p1']) + s['id'] = line.attrib['id'] + s['originalPathId'] = line.attrib['originalPathId'] + s['composed_transform'] = line.composed_transform() + #s['d'] = line.attrib['d'] + input_set.append(s) + + input_set.sort(key=lambda x: x['slope']) + #input_set.append(False) # used to clear out lingering contents of working_set_x on last iteration + + input_set_new = [] + + #loop through input_set to filter out the vertical lines because we need to handle them separately + vertical_set = [] + vertical_ids = [] + for i in range(0, len(input_set)): + if input_set[i]['slope'] == sys.float_info.max: + vertical_set.append(input_set[i]) + else: + input_set_new.append(input_set[i]) + + input_set = input_set_new #overwrite the input_set with the filtered one + input_set.append(False) # used to clear out lingering contents of working_set_x on last iteration + + ''' + process x lines (all lines except vertical ones) + ''' + working_set_x = [] + working_x_ids = [] + output_set_x = [] + output_x_ids = [] + + if len(input_set) > 0: + current_slope = input_set[0]['slope'] + for input in input_set: + # bin sets of input_set by slope (within a tolerance) + dm = input and abs(input['slope'] - current_slope) or 0 + if input and dm < self.options.collinear_filter_epsilon: + working_set_x.append(input) #we put all lines to working set which have similar slopes + if input['id'] != '': input_ids.append(input['id']) + else: # slope discontinuity, process accumulated set + while True: + (done, working_set_x) = self.process_set_x(working_set_x) + if done: + output_set_x.extend(working_set_x) + break + + if input: # begin new working set + working_set_x = [input] + current_slope = input['slope'] + if input['id'] != '': input_ids.append(input['id']) + + + for output_x in output_set_x: + output_x_ids.append(output_x['id']) + + for working_x in working_set_x: + working_x_ids.append(working_x['id']) + else: + if self.options.show_debug is True: + self.msg("Scanning: no non-vertical input lines found. That might be okay or not ...") + + ''' + process vertical lines + ''' + working_set_y = [] + working_y_ids = [] + output_set_y = [] + output_y_ids = [] + + if len(vertical_set) > 0: + vertical_set.sort(key=lambda x: x['p0'][0]) #sort verticals by their x coordinate + vertical_set.append(False) # used to clear out lingering contents of working_set_y on last iteration + current_x = vertical_set[0]['p0'][0] + for vertical in vertical_set: + if vertical and current_x == vertical['p0'][0]: + working_set_y.append(vertical) #we put all lines to working set which have same x coordinate + if vertical['id'] != '': vertical_ids.append(vertical['id']) + else: # x coord discontinuity, process accumulated set + while True: + (done, working_set_y) = self.process_set_y(working_set_y) + if done: + output_set_y.extend(working_set_y) + break + if vertical: # begin new working set + working_set_y = [vertical] + current_x = vertical['p0'][0] + if vertical['id'] != '': vertical_ids.append(vertical['id']) + else: + if self.options.show_debug is True: + self.msg("Scanning: no vertical lines found. That might be okay or not ...") + + for output_y in output_set_y: + output_y_ids.append(output_y['id']) + + for working_y in working_set_y: + working_y_ids.append(working_y['id']) + + output_set = output_set_x + output_set.extend(output_set_y) + output_ids = [] + for output in output_set: + #self.msg(output) + output_ids.append(output['id']) + + #we finally build a list which contains all overlapping elements we want to drop + dropped_ids = [] + for input_id in input_ids: #if the input_id id is not in the output ids we are going to drop it + if input_id not in output_ids: + dropped_ids.append(input_id) + for vertical_id in vertical_ids: #if the input_id id is not in the output ids we are going to drop it + if vertical_id not in output_ids: + dropped_ids.append(vertical_id) + + if self.options.show_debug is True: + #self.msg("input_set:{}".format(input_set)) + self.msg("input_ids [{}]:".format(len(input_ids))) + for input_id in input_ids: + self.msg(input_id) + self.msg("*"*24) + #self.msg("working_set_x:{}".format(working_set_x)) + self.msg("working_x_ids [{}]:".format(len(working_x_ids))) + for working_x_id in working_x_ids: + self.msg(working_x_id) + self.msg("*"*24) + #self.msg("output_set_x:{}".format(output_set_x)) + self.msg("output_x_ids [{}]:".format(len(output_x_ids))) + for output_x_id in output_x_ids: + self.msg(output_x_id) + self.msg("*"*24) + #self.msg("output_set_y:{}".format(output_set_y)) + self.msg("output_y_ids [{}]:".format(len(output_y_ids))) + for output_y_id in output_y_ids: + self.msg(output_y_id) + self.msg("*"*24) + #self.msg("output_set:{}".format(output_set)) + self.msg("output_ids [{}]:".format(len(output_ids))) + for output_id in output_ids: + self.msg(output_id) + self.msg("*"*24) + self.msg("dropped_ids [{}]:".format(len(dropped_ids))) + for dropped_id in dropped_ids: + self.msg(dropped_id) + self.msg("*"*24) + + return output_set, dropped_ids + + + def remove_trim_duplicates(self, allTrimGroups): + ''' + find duplicate lines in a given array [] of groups + note: this function is similar to filter_collinear but we keep it because we have a 'reverse_trim_removal_order' option. + We can use this option in some special situations where we work without the function 'filter_collinear()'. + ''' + totalTrimPaths = [] + if self.options.reverse_trim_removal_order is True: + allTrimGroups = allTrimGroups[::-1] + for trimGroup in allTrimGroups: + for element in trimGroup: + path = element.path.transform(element.composed_transform()) + if path not in totalTrimPaths: + totalTrimPaths.append(path) + else: + if self.options.show_debug is True: + self.msg("Deleting path {}".format(element.get('id'))) + element.delete() + if len(trimGroup) == 0: + if self.options.show_debug is True: + self.msg("Deleting group {}".format(trimGroup.get('id'))) + trimGroup.delete() + + + def combine_nonintersects(self, allTrimGroups): + ''' + combine and chain all non intersected sub split lines which were trimmed at intersection points before. + - At first we sort out all lines by their id: + - if the lines id contains intersectedVerb, we ignore it + - we combine all lines which do not contain intersectedVerb + - Then we loop through that combined structure and chain their segments which touch each other + Changes the style according to user setting. + ''' + + nonTrimLineStyle = {'stroke': str(self.options.color_nonintersected), 'fill': 'none', 'stroke-width': self.options.strokewidth} + trimNonIntersectedStyle = {'stroke': str(self.options.color_combined), 'fill': 'none', 'stroke-width': self.options.strokewidth} + + for trimGroup in allTrimGroups: + totalIntersectionsAtPath = 0 + combinedPath = None + combinedPathData = Path() + if self.options.show_debug is True: + self.msg("trim group {} has {} paths".format(trimGroup.get('id'), len(trimGroup))) + for pElement in trimGroup: + pId = pElement.get('id') + #if self.options.show_debug is True: + # self.msg("trim paths id {}".format(pId)) + if intersectedVerb not in pId: + if combinedPath is None: + combinedPath = pElement + combinedPathData = pElement.path + else: + combinedPathData += pElement.path + pElement.delete() + else: + totalIntersectionsAtPath += 1 + if len(combinedPathData) > 0: + segData = combinedPathData.to_arrays() + newPathData = [] + newPathData.append(segData[0]) + for z in range(1, len(segData)): #skip first because we add it statically + if segData[z][1] != segData[z-1][1]: + newPathData.append(segData[z]) + if self.options.show_debug is True: + self.msg("trim group {} has {} combinable segments:".format(trimGroup.get('id'), len(newPathData))) + self.msg("{}".format(newPathData)) + combinedPath.path = Path(newPathData) + if self.options.trimmed_style == "apply_from_trimmed": + combinedPath.style = trimNonIntersectedStyle + if totalIntersectionsAtPath == 0: + combinedPath.style = nonTrimLineStyle + else: #the group might consist of intersections only. than we have length of 0 + if self.options.show_debug is True: + self.msg("trim group {} has no combinable segments (contains only intersected trim lines)".format(trimGroup.get('id'))) + + + def trim_bezier(self, allTrimGroups): + ''' + trim bezier path by checking the lengths and calculating global t parameter from the trimmed sub split lines groups + This function does not work yet. + ''' + for trimGroup in allTrimGroups: + if (trimGroup.attrib.has_key('originalPathIsBezier') and trimGroup.attrib['originalPathIsBezier'] == "True") or\ + (trimGroup.attrib.has_key('originalPathIsPolyBezMixed') and trimGroup.attrib['originalPathIsPolyBezMixed'] == "True"): + globalTParameters = [] + if self.options.show_debug is True: + self.msg("{}: count of trim lines = {}".format(trimGroup.get('id'), len(trimGroup))) + totalLength = 0 + for trimLine in trimGroup: + ignore, lineLength = csplength(CubicSuperPath(trimLine.get('d'))) + totalLength += lineLength + if self.options.show_debug is True: + self.msg("total length = {}".format(totalLength)) + chainLength = 0 + for trimLine in trimGroup: + ignore, lineLength = csplength(CubicSuperPath(trimLine.get('d'))) + chainLength += lineLength + if trimLine.attrib.has_key('intersected') or trimLine == trimGroup[-1]: #we may not used intersectedVerb because this was used for the affected left as well as the right side of the splitting. This would result in one "intersection" too much. + globalTParameter = chainLength / totalLength + globalTParameters.append(globalTParameter) + if self.options.show_debug is True: + self.msg("chain piece length = {}".format(chainLength)) + self.msg("t parameter = {}".format(globalTParameter)) + chainLength = 0 + if self.options.show_debug is True: + self.msg("Trimming the original bezier path {} at global t parameters: {}".format(trimGroup.attrib['originalPathId'], globalTParameters)) + for globalTParameter in globalTParameters: + csp = CubicSuperPath(self.svg.getElementById(trimGroup.attrib['originalPathId'])) + ''' + Sadly, those calculated global t parameters are useless for splitting because we cannot split the complete curve at a t parameter + Instead we only can split a bezier by getting to commands which build up a bezier path segment. + - we need to find those parts (segment pairs) of the original path first where the sub split line intersection occurs + - then we need to calculate the t parameter + - then we split the bezier part (consisting of two commands) and check the new intersection point. + It should match the sub split lines intersection point. + If they do not match we need to adjust the t parameter or loop to previous or next bezier command to find intersection + ''' + + + def add_arguments(self, pars): + pars.add_argument("--nb_main") + pars.add_argument("--nb_settings_and_actions") + + #Settings - General Input/Output + pars.add_argument("--show_debug", type=inkex.Boolean, default=False, help="Show debug infos") + pars.add_argument("--break_apart", type=inkex.Boolean, default=False, help="Break apart input paths into sub paths") + pars.add_argument("--handle_groups", type=inkex.Boolean, default=False, help="Also looks for paths in groups which are in the current selection") + pars.add_argument("--trimming_path_types", default="closed_paths", help="Process open paths by other open paths, closed paths by other closed paths, or all paths by all other paths") + pars.add_argument("--flattenbezier", type=inkex.Boolean, default=True, help="Flatten bezier curves to (poly)lines") + pars.add_argument("--flatness", type=float, default=0.1, help="Minimum flatness = 0.001. The smaller the value the more fine segments you will get (quantization). Large values might destroy the line continuity.") + pars.add_argument("--decimals", type=int, default=3, help="Accuracy for sub split lines / lines trimmed by shapely") + pars.add_argument("--snap_tolerance", type=float, default=0.1, help="Snap tolerance for intersection points") + pars.add_argument("--collinear_filter_epsilon", type=float, default=0.01, help="Epsilon for collinear line filter") + #Settings - General Style + pars.add_argument("--strokewidth", type=float, default=1.0, help="Stroke width (px)") + pars.add_argument("--dotsize_intersections", type=int, default=30, help="Dot size (px) for self-intersecting and global intersection points") + pars.add_argument("--removefillsetstroke", type=inkex.Boolean, default=False, help="Remove fill and define stroke for original paths") + pars.add_argument("--bezier_trimming", type=inkex.Boolean, default=False, help="If true we try to use the calculated t parameters from intersection points to receive splitted bezier curves") + pars.add_argument("--subsplit_style", default="default", help="Sub split line style") + pars.add_argument("--trimmed_style", default="apply_from_trimmed", help="Trimmed line style") + + #Removing - Applying to original paths and sub split lines + pars.add_argument("--remove_relative", type=inkex.Boolean, default=False, help="relative cmd") + pars.add_argument("--remove_absolute", type=inkex.Boolean, default=False, help="absolute cmd") + pars.add_argument("--remove_rel_abs_mixed", type=inkex.Boolean, default=False, help="mixed rel/abs cmd (relative + absolute)") + pars.add_argument("--remove_polylines", type=inkex.Boolean, default=False, help="(poly)line") + pars.add_argument("--remove_beziers", type=inkex.Boolean, default=False, help="bezier") + pars.add_argument("--remove_poly_bez_mixed", type=inkex.Boolean, default=False, help="mixed (poly)line/bezier paths") + pars.add_argument("--remove_opened", type=inkex.Boolean, default=False, help="opened") + pars.add_argument("--remove_closed", type=inkex.Boolean, default=False, help="closed") + pars.add_argument("--remove_self_intersecting", type=inkex.Boolean, default=False, help="self-intersecting") + #Removing - Applying to sub split lines only + pars.add_argument("--filter_subsplit_collinear", type=inkex.Boolean, default=True, help="Removes any duplicates by merging (multiple) overlapping line segments into longer lines. Not possible to apply for original paths because this routine does not support bezier type paths.") + pars.add_argument("--filter_subsplit_collinear_action", default="remove", help="What to do with collinear overlapping lines?") + #Removing - Applying to original paths only + pars.add_argument("--delete_original_after_split_trim", type=inkex.Boolean, default=False, help="Delete original paths after sub splitting / trimming") + + #Highlighting - Applying to original paths and sub split lines + pars.add_argument("--highlight_relative", type=inkex.Boolean, default=False, help="relative cmd paths") + pars.add_argument("--highlight_absolute", type=inkex.Boolean, default=False, help="absolute cmd paths") + pars.add_argument("--highlight_rel_abs_mixed", type=inkex.Boolean, default=False, help="mixed rel/abs cmd (relative + absolute) paths") + pars.add_argument("--highlight_polylines", type=inkex.Boolean, default=False, help="(poly)line paths") + pars.add_argument("--highlight_beziers", type=inkex.Boolean, default=False, help="bezier paths") + pars.add_argument("--highlight_poly_bez_mixed", type=inkex.Boolean, default=False, help="mixed (poly)line/bezier paths") + pars.add_argument("--highlight_opened", type=inkex.Boolean, default=False, help="opened paths") + pars.add_argument("--highlight_closed", type=inkex.Boolean, default=False, help="closed paths") + #Highlighting - Applying to sub split lines only + pars.add_argument("--draw_subsplit", type=inkex.Boolean, default=False, help="Draw sub split lines ((poly)lines)") + pars.add_argument("--highlight_duplicates", type=inkex.Boolean, default=False, help="duplicates (only applies to sub split lines)") + pars.add_argument("--highlight_merges", type=inkex.Boolean, default=False, help="merges (only applies to sub split lines)") + #Highlighting - Intersection points + pars.add_argument("--highlight_self_intersecting", type=inkex.Boolean, default=False, help="self-intersecting paths") + pars.add_argument("--visualize_self_intersections", type=inkex.Boolean, default=False, help="self-intersecting path points") + pars.add_argument("--visualize_global_intersections", type=inkex.Boolean, default=False, help="global intersection points") + + #Trimming - General trimming settings + pars.add_argument("--draw_trimmed", type=inkex.Boolean, default=False, help="Draw trimmed lines") + pars.add_argument("--combine_nonintersects", type=inkex.Boolean, default=True, help="Combine non-intersected lines") + pars.add_argument("--remove_trim_duplicates", type=inkex.Boolean, default=True, help="Remove duplicate trim lines") + pars.add_argument("--reverse_trim_removal_order", type=inkex.Boolean, default=False, help="Reverses the order of removal. Relevant for keeping certain styles of elements") + pars.add_argument("--remove_subsplit_after_trimming", type=inkex.Boolean, default=True, help="Remove sub split lines after trimming") + #Trimming - Bentley-Ottmann sweep line settings + pars.add_argument("--bent_ott_use_ignore_segment_endings", type=inkex.Boolean, default=True, help="Whether to ignore intersections of line segments when both their end points form the intersection point") + pars.add_argument("--bent_ott_use_debug", type=inkex.Boolean, default=False) + pars.add_argument("--bent_ott_use_verbose", type=inkex.Boolean, default=False) + pars.add_argument("--bent_ott_use_paranoid", type=inkex.Boolean, default=False) + pars.add_argument("--bent_ott_use_vertical", type=inkex.Boolean, default=True) + pars.add_argument("--bent_ott_number_type", default="native") + + #Colors + pars.add_argument("--color_subsplit", type=Color, default='1630897151', help="sub split lines") + #Colors - path structure + pars.add_argument("--color_relative", type=Color, default='3419879935', help="relative cmd paths") + pars.add_argument("--color_absolute", type=Color, default='1592519679', help="absolute cmd paths") + pars.add_argument("--color_rel_abs_mixed", type=Color, default='3351636735', help="mixed rel/abs cmd (relative + absolute) paths") + pars.add_argument("--color_polyline", type=Color, default='4289703935', help="(poly)line paths") + pars.add_argument("--color_bezier", type=Color, default='258744063', help="bezier paths") + pars.add_argument("--color_poly_bez_mixed", type=Color, default='4118348031', help="mixed (poly)line/bezier paths") + pars.add_argument("--color_opened", type=Color, default='4012452351', help="opened paths") + pars.add_argument("--color_closed", type=Color, default='2330080511', help="closed paths") + #Colors - duplicates and merges + pars.add_argument("--color_duplicates", type=Color, default='897901823', help="duplicates") + pars.add_argument("--color_merges", type=Color, default='869366527', help="merges") + #Colors - intersections + pars.add_argument("--color_self_intersecting_paths", type=Color, default='2593756927', help="self-intersecting paths") + pars.add_argument("--color_self_intersections", type=Color, default='6320383', help="self-intersecting path points") + pars.add_argument("--color_global_intersections", type=Color, default='4239343359', help="global intersection points") + #Colors - trimming + pars.add_argument("--color_trimmed", type=Color, default='1923076095', help="trimmed lines") + pars.add_argument("--color_combined", type=Color, default='3227634687', help="non-intersected lines") + pars.add_argument("--color_nonintersected", type=Color, default='3045284607', help="non-intersected paths") + + + def effect(self): + + so = self.options + + if so.break_apart is True and so.show_debug is True: + self.msg("Warning: 'Break apart input' setting is enabled. Cannot check accordingly for relative, absolute or mixed paths for breaked elements (they are always absolute)!") + + #some configuration dependecies + if so.highlight_self_intersecting is True or \ + so.highlight_duplicates is True or \ + so.highlight_merges is True: + so.draw_subsplit = True + + if so.highlight_duplicates is True or \ + so.highlight_merges is True: + so.filter_subsplit_collinear = True + + if so.filter_subsplit_collinear is True: #this is a must. + #if so.draw_subsplit is disabled bu we filter sub split lines and follow with trim operation we lose a lot of elements which may not be deleted! + so.draw_subsplit = True + + #some constant stuff / styles + relativePathStyle = {'stroke': str(so.color_relative), 'fill': 'none', 'stroke-width': so.strokewidth} + absolutePathStyle = {'stroke': str(so.color_absolute), 'fill': 'none', 'stroke-width': so.strokewidth} + mixedRelAbsPathStyle = {'stroke': str(so.color_rel_abs_mixed), 'fill': 'none', 'stroke-width': so.strokewidth} + polylinePathStyle = {'stroke': str(so.color_polyline), 'fill': 'none', 'stroke-width': so.strokewidth} + bezierPathStyle = {'stroke': str(so.color_bezier), 'fill': 'none', 'stroke-width': so.strokewidth} + mixedPolyBezPathStyle = {'stroke': str(so.color_poly_bez_mixed), 'fill': 'none', 'stroke-width': so.strokewidth} + openPathStyle = {'stroke': str(so.color_opened), 'fill': 'none', 'stroke-width': so.strokewidth} + closedPathStyle = {'stroke': str(so.color_closed), 'fill': 'none', 'stroke-width': so.strokewidth} + duplicatesPathStyle = {'stroke': str(so.color_duplicates), 'fill': 'none', 'stroke-width': so.strokewidth} + mergesPathStyle = {'stroke': str(so.color_merges), 'fill': 'none', 'stroke-width': so.strokewidth} + selfIntersectingPathStyle = {'stroke': str(so.color_self_intersecting_paths), 'fill': 'none', 'stroke-width': so.strokewidth} + basicSubSplitLineStyle = {'stroke': str(so.color_subsplit), 'fill': 'none', 'stroke-width': so.strokewidth} + + #get all paths which are within selection or in document and generate sub split lines + pathElements = self.get_path_elements() + + subSplitLineArray = [] + + for pathElement in pathElements: + originalPathId = pathElement.attrib["id"] + path = pathElement.path.transform(pathElement.composed_transform()) + #path = pathElement.path + + ''' + check for relative or absolute paths + ''' + isRelative = False + isAbsolute = False + isRelAbsMixed = False + relCmds = ['m', 'l', 'h', 'v', 'c', 's', 'q', 't', 'a', 'z'] + if any(relCmd in str(path) for relCmd in relCmds): + isRelative = True + if any(relCmd.upper() in str(path) for relCmd in relCmds): + isAbsolute = True + if isRelative is True and isAbsolute is True: #cannot be both at the same time, so it's mixed + isRelAbsMixed = True + isRelative = False + isAbsolute = False + if so.remove_absolute is True and isAbsolute is True: + pathElement.delete() + continue #skip this loop iteration + if so.remove_relative is True and isRelative is True: + pathElement.delete() + continue #skip this loop iteration + if so.remove_rel_abs_mixed is True and isRelAbsMixed is True: + pathElement.delete() + continue #skip this loop iteration + + ''' + check for bezier or (poly)line paths + ''' + isPoly = False + isBezier = False + isPolyBezMixed = False + if ('c' in str(path) or 'C' in str(path)): + isBezier = True + if ('l' in str(path) or 'L' in str(path)): + isPoly = True + if isPoly is True and isBezier is True: #cannot be both at the same time, so it's mixed + isPolyBezMixed = True + isPoly = False #reset + isBezier = False #reset + + #if so.show_debug is True: + # self.msg("sub path in {} is bezier: {}".format(originalPathId, isBezier)) + if so.remove_beziers is True and isBezier is True: + pathElement.delete() + continue #skip this loop iteration + if so.remove_polylines is True and isPoly is True: + pathElement.delete() + continue #skip this loop iteration + if so.remove_poly_bez_mixed is True and isPolyBezMixed is False: + pathElement.delete() + continue #skip this loop iteration + + ''' + check for closed or open paths + ''' + isClosed = False + raw = path.to_arrays() + if raw[-1][0] == 'Z' or \ + (raw[-1][0] == 'L' and raw[0][1] == raw[-1][1]) or \ + (raw[-1][0] == 'C' and raw[0][1] == [raw[-1][1][-2], raw[-1][1][-1]]) \ + : #if first is last point the path is also closed. The "Z" command is not required + isClosed = True + if so.remove_opened is True and isClosed is False: + pathElement.delete() + continue #skip this loop iteration + if so.remove_closed is True and isClosed is True: + pathElement.delete() + continue #skip this loop iteration + + if so.draw_subsplit is True: + subSplitLineGroup = pathElement.getparent().add(inkex.Group(id="{}-{}".format(idPrefixSubSplit, originalPathId))) + + #get all sub paths for the path of the element + subPaths, prev = [], 0 + for i in range(len(raw)): # Breaks compound paths into simple paths + if raw[i][0] == 'M' and i != 0: + subPaths.append(raw[prev:i]) + prev = i + subPaths.append(raw[prev:]) + + #now loop through all sub paths (and flatten if desired) to build up single lines + for subPath in subPaths: + subPathData = CubicSuperPath(subPath) + + #flatten bezier curves. If it was already a straight line do nothing! Otherwise we would split straight lines into a lot more straight lines + if so.flattenbezier is True and (isBezier is True or isPolyBezMixed is True): + bezier.cspsubdiv(subPathData, so.flatness) #modifies the path + flattenedpath = [] + for seg in subPathData: + first = True + for csp in seg: + cmd = 'L' + if first: + cmd = 'M' + first = False + flattenedpath.append([cmd, [csp[1][0], csp[1][1]]]) + #self.msg("flattened path = " + str(flattenedpath)) + segs = list(CubicSuperPath(flattenedpath).to_segments()) + else: + segs = list(subPathData.to_segments()) + #segs = segs[::-1] #reverse the segments + + #build (poly)lines from segment data + subSplitLines = [] + for i in range(len(segs) - 1): #we could do the same routine to build up (poly)lines using "for x, y in node.path.end_points". See "number nodes" extension + x1, y1, x2, y2 = self.line_from_segments(segs, i, so.decimals) + #self.msg("(y1 = {},y2 = {},x1 = {},x2 = {})".format(x1, y1, x2, y2)) + subSplitId = "{}-{}-{}".format(idPrefixSubSplit, originalPathId, i) + line = inkex.PathElement(id=subSplitId) + #apply line path with composed negative transform from parent element + line.attrib['d'] = 'M {},{} L {},{}'.format(x1, y1, x2, y2) #we set the path of Line using 'd' attribute because if we use trimLine.path the decimals get cut off unwantedly + #line.path = [['M', [x1, y1]], ['L', [x2, y2]]] + if pathElement.getparent() != self.svg.root and pathElement.getparent() != None: + line.path = line.path.transform(-pathElement.getparent().composed_transform()) + line.style = basicSubSplitLineStyle + line.attrib['originalPathId'] = originalPathId + line.attrib['originalPathIsRelative'] = str(isRelative) + line.attrib['originalPathIsAbsolute'] = str(isAbsolute) + line.attrib['originalPathIsRelAbsMixed'] = str(isRelAbsMixed) + line.attrib['originalPathIsBezier'] = str(isBezier) + line.attrib['originalPathIsPoly'] = str(isPoly) + line.attrib['originalPathIsPolyBezMixed'] = str(isPolyBezMixed) + line.attrib['originalPathIsClosed'] = str(isClosed) + line.attrib['originalPathStyle'] = str(pathElement.style) + subSplitLineArray.append(line) + + if so.subsplit_style == "apply_from_highlightings": + if line.attrib['originalPathIsRelative'] == 'True': + if so.highlight_relative is True: + line.style = relativePathStyle + + if line.attrib['originalPathIsAbsolute'] == 'True': + if so.highlight_absolute is True: + line.style = absolutePathStyle + + if line.attrib['originalPathIsRelAbsMixed'] == 'True': + if so.highlight_rel_abs_mixed is True: + line.style = mixedRelAbsPathStyle + + if line.attrib['originalPathIsPoly'] == 'True': + if so.highlight_polylines is True: + line.style = polylinePathStyle + + if line.attrib['originalPathIsBezier'] == 'True': + if so.highlight_beziers is True: + line.style = bezierPathStyle + + if line.attrib['originalPathIsPolyBezMixed'] == 'True': + if so.highlight_poly_bez_mixed is True: + line.style = mixedPolyBezPathStyle + + if line.attrib['originalPathIsClosed'] == 'True': + if so.highlight_closed is True: + line.style = closedPathStyle + else: + if so.highlight_opened is True: + line.style = openPathStyle + elif so.subsplit_style == "apply_from_original": + line.style = line.attrib['originalPathStyle'] + + if so.draw_subsplit is True: + subSplitLineGroup.add(line) + subSplitLines.append([(x1, y1), (x2, y2)]) + + #check for self intersections using Bentley-Ottmann algorithm. + isSelfIntersecting = False + selfIntersectionPoints = isect_segments(subSplitLines, validate=True) + if len(selfIntersectionPoints) > 0: + isSelfIntersecting = True + if so.show_debug is True: + self.msg("{} in {} intersects itself with {} intersections!".format(subSplitId, originalPathId, len(selfIntersectionPoints))) + if so.highlight_self_intersecting is True: + for subSplitLine in subSplitLineGroup: + subSplitLine.style = selfIntersectingPathStyle #adjusts line color + #delete cosmetic sub split lines if desired + if so.remove_self_intersecting: + subSplitLineGroup.delete() + if so.visualize_self_intersections is True: #draw points (circles) + selfIntersectionGroup = self.visualize_self_intersections(pathElement, selfIntersectionPoints) + + #delete self-intersecting sub split lines and orginal paths + if so.remove_self_intersecting: + subSplitLineArray = subSplitLineArray[:len(subSplitLineArray) - len(segs) - 1] #remove all last added lines + pathElement.delete() #and finally delete the orginal path + continue + + #adjust the style of original paths if desired. Has influence to the finally trimmed lines style results too! + if so.removefillsetstroke is True: + self.adjust_style(pathElement) + + #apply styles to original paths + if isRelative is True: + if so.highlight_relative is True: + pathElement.style = relativePathStyle + + if isAbsolute is True: + if so.highlight_absolute is True: + pathElement.style = absolutePathStyle + + if isRelAbsMixed is True: + if so.highlight_rel_abs_mixed is True: + pathElement.style = mixedRelAbsPathStyle + + if isBezier is True: + if so.highlight_beziers is True: + pathElement.style = bezierPathStyle + + if isPoly is True: + if so.highlight_polylines is True: + pathElement.style = polylinePathStyle + + if isPolyBezMixed is True: + if so.highlight_poly_bez_mixed is True: + pathElement.style = mixedPolyBezPathStyle + + if isClosed is True: + if so.highlight_closed is True: + pathElement.style = closedPathStyle + else: + if so.highlight_opened is True: + pathElement.style = openPathStyle + + if isSelfIntersecting is True: + if so.highlight_self_intersecting is True: + pathElement.style = selfIntersectingPathStyle + + if so.draw_subsplit is True: + if subSplitLineGroup is not None: #might get deleted before so we need to check this first + subSplitLineGroup = reversed(subSplitLineGroup) #reverse the order to match the original path segment placing + + if so.show_debug is True: + self.msg("sub split line count: {}".format(len(subSplitLineArray))) + + ''' + check for collinear lines and apply filters to remove or regroup and to restyle them + Run this action only if one of the options requires it (to avoid useless calculation cycles) + ''' + if so.filter_subsplit_collinear is True or \ + so.highlight_duplicates is True or \ + so.highlight_merges is True: + if so.show_debug is True: self.msg("filtering collinear overlapping lines / duplicate lines") + if len(subSplitLineArray) > 0: + output_set, dropped_ids = self.filter_collinear(subSplitLineArray) + deleteIndices = [] + deleteIndice = 0 + for subSplitLine in subSplitLineArray: + ''' + Replace the overlapping items with the new merged output + ''' + for output in output_set: + if output['id'] == subSplitLine.attrib['id']: + originalSplitLinePath = subSplitLine.path + output_line = 'M {},{} L {},{}'.format( + output['p0'][0], output['p0'][1], output['p1'][0], output['p1'][1]) + output_line_reversed = 'M {},{} L {},{}'.format( + output['p1'][0], output['p1'][1], output['p0'][0], output['p0'][1]) + subSplitLine.attrib['d'] = output_line #we set the path using 'd' attribute because if we use trimLine.path the decimals get cut off unwantedly + mergedSplitLinePath = subSplitLine.path + mergedSplitLinePathReversed = Path(output_line_reversed) + #subSplitLine.path = [['M', output['p0']], ['L', output['p1']]] + #self.msg("composed_transform = {}".format(output['composed_transform'])) + #subSplitLine.transform = Transform(-output['composed_transform']) * subSplitLine.transform + + subSplitLine.path = subSplitLine.path.transform(-output['composed_transform']) + if so.highlight_merges is True: + if originalSplitLinePath != mergedSplitLinePath and \ + originalSplitLinePath != mergedSplitLinePathReversed: #if the path changed we are going to highlight it + subSplitLine.style = mergesPathStyle + + + ''' + Delete or move sub split lines which are overlapping + ''' + ssl_id = subSplitLine.get('id') + if ssl_id in dropped_ids: + if so.highlight_duplicates is True: + subSplitLine.style = duplicatesPathStyle + + if so.filter_subsplit_collinear is True: + ssl_parent = subSplitLine.getparent() + if so.filter_subsplit_collinear_action == "remove": + if self.options.show_debug is True: + self.msg("Deleting sub split line {}".format(subSplitLine.get('id'))) + subSplitLine.delete() #delete the line from XML tree + deleteIndices.append(deleteIndice) #store this id to remove it from stupid subSplitLineArray later + elif so.filter_subsplit_collinear_action == "separate_group": + if self.options.show_debug is True: + self.msg("Moving sub split line {}".format(subSplitLine.get('id'))) + originalPathId = subSplitLine.attrib['originalPathId'] + collinearGroupId = '{}-{}'.format(collinearVerb, originalPathId) + originalPathElement = self.svg.getElementById(originalPathId) + collinearGroup = self.find_group(collinearGroupId) + if collinearGroup is None: + collinearGroup = originalPathElement.getparent().add(inkex.Group(id=collinearGroupId)) + collinearGroup.append(subSplitLine) #move to that group + #and delete the containg group if empty (can happen in "remove" or "separate_group" constellation + if ssl_parent is not None and len(ssl_parent) == 0: + if self.options.show_debug is True: + self.msg("Deleting group {}".format(ssl_parent.get('id'))) + ssl_parent.delete() + + deleteIndice += 1 #end the loop by incrementing +1 + + #shrink the sub split line array to kick out all unrequired indices + for deleteIndice in sorted(deleteIndices, reverse=True): + if self.options.show_debug is True: + self.msg("Deleting index {} from subSplitLineArray".format(deleteIndice)) + del subSplitLineArray[deleteIndice] + + ''' + now we intersect the sub split lines to find the global intersection points using Bentley-Ottmann algorithm (contains self-intersections too!) + ''' + if so.draw_trimmed is True: + try: + #some config for Bentley Ottmann + poly_point_isect.USE_IGNORE_SEGMENT_ENDINGS = so.bent_ott_use_ignore_segment_endings + poly_point_isect.USE_DEBUG = so.bent_ott_use_debug + poly_point_isect.USE_VERBOSE = so.bent_ott_use_verbose + if so.show_debug is False: + poly_point_isect.USE_VERBOSE = False + poly_point_isect.USE_PARANOID = so.bent_ott_use_paranoid + poly_point_isect.USE_VERTICAL = so.bent_ott_use_vertical + NUMBER_TYPE = so.bent_ott_number_type + if NUMBER_TYPE == 'native': + Real = float + NUM_EPS = Real("1e-10") + NUM_INF = Real(float("inf")) + elif NUMBER_TYPE == 'numpy': + import numpy + Real = numpy.float64 + del numpy + NUM_EPS = Real("1e-10") + NUM_INF = Real(float("inf")) + poly_point_isect.Real = Real + poly_point_isect.NUM_EPS = NUM_EPS + poly_point_isect.NUM_INF = NUM_INF + poly_point_isect.NUM_EPS_SQ = NUM_EPS * NUM_EPS + poly_point_isect.NUM_ZERO = Real(0.0) + poly_point_isect.NUM_ONE = Real(1.0) + + + allSubSplitLineStrings = [] + allSubSplitLineStringsTransformed = [] + for subSplitLine in subSplitLineArray: + csp = subSplitLine.path.to_arrays() + if subSplitLine.getparent() != None: + cspTransformed = Path(subSplitLine.path.transform(subSplitLine.getparent().composed_transform())).to_arrays() + else: + cspTransformed = csp + lineString = [(csp[0][1][0], csp[0][1][1]), (csp[1][1][0], csp[1][1][1])] + lineStringTransformed = [(cspTransformed[0][1][0], cspTransformed[0][1][1]), (cspTransformed[1][1][0], cspTransformed[1][1][1])] + if so.remove_trim_duplicates is True: + if so.visualize_global_intersections is True: #ignore that calculation if false + if lineStringTransformed not in allSubSplitLineStringsTransformed: + allSubSplitLineStringsTransformed.append(lineStringTransformed) + else: + if so.show_debug is True: + self.msg("transformed line {} already in sub split line collection. Dropping ...".format(lineStringTransformed)) + if lineString not in allSubSplitLineStrings: + allSubSplitLineStrings.append(lineString) + else: + if so.show_debug is True: + self.msg("line {} already in sub split line collection. Dropping ...".format(lineString)) + else: #if false we append all segments without filtering duplicate ones + allSubSplitLineStrings.append(lineString) + if so.visualize_global_intersections is True: #ignore that calculation if false + allSubSplitLineStringsTransformed.append(allSubSplitLineStringsTransformed) + + if so.show_debug is True: + self.msg("Going to calculate intersections using Bentley Ottmann Sweep Line Algorithm") + globalIntersectionPoints = MultiPoint(isect_segments(allSubSplitLineStrings, validate=True)) + if so.visualize_global_intersections is True: #ignore that calculation to save time + globalIntersectionPointsTransformed = MultiPoint(isect_segments(allSubSplitLineStringsTransformed, validate=True)) + + if so.show_debug is True: + self.msg("global intersection points count: {}".format(len(globalIntersectionPoints))) + if len(globalIntersectionPoints) > 0: + if so.visualize_global_intersections is True: + self.visualize_global_intersections(globalIntersectionPointsTransformed) + + ''' + now we trim the sub split lines at all calculated intersection points. + We do this path by path to keep the logic between original paths, sub split lines and the final output + ''' + allTrimGroups = [] #container to collect all trim groups for later on processing + for subSplitIndex in range(len(subSplitLineArray)): + trimGroup = self.build_trim_line_group(subSplitLineArray, subSplitIndex, globalIntersectionPoints) + if trimGroup is not None: + if trimGroup not in allTrimGroups: + allTrimGroups.append(trimGroup) + + if so.show_debug is True: self.msg("trim groups count: {}".format(len(allTrimGroups))) + if len(allTrimGroups) == 0: + self.msg("You selected to draw trimmed lines but no intersections could be calculated.") + + if so.bezier_trimming is True: + if so.show_debug is True: self.msg("trimming beziers - not working yet") + self.trim_bezier(allTrimGroups) + + if so.remove_trim_duplicates is True: + if so.show_debug is True: self.msg("checking for duplicate trim lines and deleting them") + self.remove_trim_duplicates(allTrimGroups) + + if so.combine_nonintersects is True: + if so.show_debug is True: self.msg("glueing together all non-intersected sub split lines to larger path structures again (cleaning up)") + self.combine_nonintersects(allTrimGroups) + + if so.remove_subsplit_after_trimming is True: + if so.show_debug is True: self.msg("removing unwanted subsplit lines after trimming") + for subSplitLine in subSplitLineArray: + ssl_parent = subSplitLine.getparent() + subSplitLine.delete() + if ssl_parent is not None and len(ssl_parent) == 0: + if self.options.show_debug is True: + self.msg("Deleting group {}".format(ssl_parent.get('id'))) + ssl_parent.delete() + + except AssertionError as e: + self.msg("Error calculating global intersections.\n\ +See https://github.com/ideasman42/isect_segments-bentley_ottmann.\n\n\ +You can try to fix this by:\n\ +- reduce or raise the 'decimals' setting (default is 3 but try to set to 6 for example)\n\ +- reduce or raise the 'flatness' setting (if quantization option is used at all; default is 0.100).") + return + + #clean original paths if selected. + if so.delete_original_after_split_trim is True: + if so.show_debug is True: self.msg("cleaning original paths after sub splitting / trimming") + for pathElement in pathElements: + pathElement.delete() + +if __name__ == '__main__': + ContourScannerAndTrimmer().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/contour_scanner_and_trimmer/poly_point_isect.py b/extensions/fablabchemnitz/contour_scanner_and_trimmer/poly_point_isect.py new file mode 100644 index 00000000..4d1a3028 --- /dev/null +++ b/extensions/fablabchemnitz/contour_scanner_and_trimmer/poly_point_isect.py @@ -0,0 +1,1306 @@ +# BentleyOttmann sweep-line implementation +# (for finding all intersections in a set of line segments) + +from __future__ import annotations +import inkex + +__all__ = ( + "isect_segments", + "isect_polygon", + + # same as above but includes segments with each intersections + "isect_segments_include_segments", + "isect_polygon_include_segments", + + # for testing only (correct but slow) + "isect_segments__naive", + "isect_polygon__naive", +) + +# ---------------------------------------------------------------------------- +# Main Poly Intersection + +# Defines to change behavior. +# +# Whether to ignore intersections of line segments when both +# their end points form the intersection point. +USE_IGNORE_SEGMENT_ENDINGS = True + +USE_DEBUG = True + +USE_VERBOSE = False + +# checks we should NOT need, +# but do them in case we find a test-case that fails. +USE_PARANOID = False + +# Support vertical segments, +# (the bentley-ottmann method doesn't support this). +# We use the term 'START_VERTICAL' for a vertical segment, +# to differentiate it from START/END/INTERSECTION +USE_VERTICAL = True +# end defines! +# ------------ + +# --------- +# Constants +X, Y = 0, 1 + +# ----------------------------------------------------------------------------- +# Switchable Number Implementation + +NUMBER_TYPE = 'native' + +if NUMBER_TYPE == 'native': + Real = float + NUM_EPS = Real("1e-10") + NUM_INF = Real(float("inf")) +elif NUMBER_TYPE == 'decimal': + # Not passing tests! + import decimal + Real = decimal.Decimal + decimal.getcontext().prec = 80 + NUM_EPS = Real("1e-10") + NUM_INF = Real(float("inf")) +elif NUMBER_TYPE == 'numpy': + import numpy + Real = numpy.float64 + del numpy + NUM_EPS = Real("1e-10") + NUM_INF = Real(float("inf")) +elif NUMBER_TYPE == 'gmpy2': + # Not passing tests! + import gmpy2 + gmpy2.set_context(gmpy2.ieee(128)) + Real = gmpy2.mpz + NUM_EPS = Real(float("1e-10")) + NUM_INF = gmpy2.get_emax_max() + del gmpy2 +else: + raise Exception("Type not found") + +NUM_EPS_SQ = NUM_EPS * NUM_EPS +NUM_ZERO = Real(0.0) +NUM_ONE = Real(1.0) + + +class Event: + __slots__ = ( + "type", + "point", + "segment", + + # this is just cache, + # we may remove or calculate slope on the fly + "slope", + "span", + ) + (() if not USE_DEBUG else ( + # debugging only + "other", + "in_sweep", + )) + + class Type: + END = 0 + INTERSECTION = 1 + START = 2 + if USE_VERTICAL: + START_VERTICAL = 3 + + def __init__(self, type, point, segment, slope): + assert(isinstance(point, tuple)) + self.type = type + self.point = point + self.segment = segment + + # will be None for INTERSECTION + self.slope = slope + if segment is not None: + self.span = segment[1][X] - segment[0][X] + + if USE_DEBUG: + self.other = None + self.in_sweep = False + + # note that this isn't essential, + # it just avoids non-deterministic ordering, see #9. + def __hash__(self): + return hash(self.point) + + def is_vertical(self): + # return self.segment[0][X] == self.segment[1][X] + return self.span == NUM_ZERO + + def y_intercept_x(self, x: Real): + # vertical events only for comparison (above_all check) + # never added into the binary-tree its self + if USE_VERTICAL: + if self.is_vertical(): + return None + + if x <= self.segment[0][X]: + return self.segment[0][Y] + elif x >= self.segment[1][X]: + return self.segment[1][Y] + + # use the largest to avoid float precision error with nearly vertical lines. + delta_x0 = x - self.segment[0][X] + delta_x1 = self.segment[1][X] - x + if delta_x0 > delta_x1: + ifac = delta_x0 / self.span + fac = NUM_ONE - ifac + else: + fac = delta_x1 / self.span + ifac = NUM_ONE - fac + assert(fac <= NUM_ONE) + return (self.segment[0][Y] * fac) + (self.segment[1][Y] * ifac) + + @staticmethod + def Compare(sweep_line, this, that): + if this is that: + return 0 + if USE_DEBUG: + if this.other is that: + return 0 + current_point_x = sweep_line._current_event_point_x + this_y = this.y_intercept_x(current_point_x) + that_y = that.y_intercept_x(current_point_x) + # print(this_y, that_y) + if USE_VERTICAL: + if this_y is None: + this_y = this.point[Y] + if that_y is None: + that_y = that.point[Y] + + delta_y = this_y - that_y + + assert((delta_y < NUM_ZERO) == (this_y < that_y)) + # NOTE, VERY IMPORTANT TO USE EPSILON HERE! + # otherwise w/ float precision errors we get incorrect comparisons + # can get very strange & hard to debug output without this. + if abs(delta_y) > NUM_EPS: + return -1 if (delta_y < NUM_ZERO) else 1 + else: + this_slope = this.slope + that_slope = that.slope + if this_slope != that_slope: + if sweep_line._before: + return -1 if (this_slope > that_slope) else 1 + else: + return 1 if (this_slope > that_slope) else -1 + + delta_x_p1 = this.segment[0][X] - that.segment[0][X] + if delta_x_p1 != NUM_ZERO: + return -1 if (delta_x_p1 < NUM_ZERO) else 1 + + delta_x_p2 = this.segment[1][X] - that.segment[1][X] + if delta_x_p2 != NUM_ZERO: + return -1 if (delta_x_p2 < NUM_ZERO) else 1 + + return 0 + + def __repr__(self): + return ("Event(0x%x, s0=%r, s1=%r, p=%r, type=%d, slope=%r)" % ( + id(self), + self.segment[0], self.segment[1], + self.point, + self.type, + self.slope, + )) + + +class SweepLine: + __slots__ = ( + # A map holding all intersection points mapped to the Events + # that form these intersections. + # {Point: set(Event, ...), ...} + "intersections", + "queue", + + # Events (sorted set of ordered events, no values) + # + # note: START & END events are considered the same so checking if an event is in the tree + # will return true if its opposite side is found. + # This is essential for the algorithm to work, and why we don't explicitly remove START events. + # Instead, the END events are never added to the current sweep, and removing them also removes the start. + "_events_current_sweep", + # The point of the current Event. + "_current_event_point_x", + # A flag to indicate if we're slightly before or after the line. + "_before", + ) + + def __init__(self, queue: EventQueue): + self.intersections = {} + self.queue = queue + + self._current_event_point_x = None + self._events_current_sweep = RBTree(cmp=Event.Compare, cmp_data=self) + self._before = True + + def get_intersections(self): + """ + Return a list of unordered intersection points. + """ + if Real is float: + return list(self.intersections.keys()) + else: + return [(float(p[0]), float(p[1])) for p in self.intersections.keys()] + + # Not essential for implementing this algorithm, but useful. + def get_intersections_with_segments(self): + """ + Return a list of unordered intersection '(point, segment)' pairs, + where segments may contain 2 or more values. + """ + if Real is float: + return [ + (p, [event.segment for event in event_set]) + for p, event_set in self.intersections.items() + ] + else: + return [ + ( + (float(p[0]), float(p[1])), + [((float(event.segment[0][0]), float(event.segment[0][1])), + (float(event.segment[1][0]), float(event.segment[1][1]))) + for event in event_set], + ) + for p, event_set in self.intersections.items() + ] + + # Checks if an intersection exists between two Events 'a' and 'b'. + def _check_intersection(self, a: Event, b: Event): + # Return immediately in case either of the events is null, or + # if one of them is an INTERSECTION event. + if ( + (a is None or b is None) or + (a.type == Event.Type.INTERSECTION) or + (b.type == Event.Type.INTERSECTION) + ): + return + + if a is b: + return + + # Get the intersection point between 'a' and 'b'. + p = isect_seg_seg_v2_point( + a.segment[0], a.segment[1], + b.segment[0], b.segment[1], + ) + + # No intersection exists. + if p is None: + return + + # If the intersection is formed by both the segment endings, AND + # USE_IGNORE_SEGMENT_ENDINGS is true, + # return from this method. + if USE_IGNORE_SEGMENT_ENDINGS: + if ((len_squared_v2v2(p, a.segment[0]) < NUM_EPS_SQ or + len_squared_v2v2(p, a.segment[1]) < NUM_EPS_SQ) and + (len_squared_v2v2(p, b.segment[0]) < NUM_EPS_SQ or + len_squared_v2v2(p, b.segment[1]) < NUM_EPS_SQ)): + + return + + # Add the intersection. + events_for_point = self.intersections.pop(p, set()) + is_new = len(events_for_point) == 0 + events_for_point.add(a) + events_for_point.add(b) + self.intersections[p] = events_for_point + + # If the intersection occurs to the right of the sweep line, OR + # if the intersection is on the sweep line and it's above the + # current event-point, add it as a new Event to the queue. + if is_new and p[X] >= self._current_event_point_x: + event_isect = Event(Event.Type.INTERSECTION, p, None, None) + self.queue.offer(p, event_isect) + + def _sweep_to(self, p): + if p[X] == self._current_event_point_x: + # happens in rare cases, + # we can safely ignore + return + + self._current_event_point_x = p[X] + + def insert(self, event): + assert(event not in self._events_current_sweep) + assert(not USE_VERTICAL or event.type != Event.Type.START_VERTICAL) + if USE_DEBUG: + assert(event.in_sweep == False) + assert(event.other.in_sweep == False) + + self._events_current_sweep.insert(event, None) + + if USE_DEBUG: + event.in_sweep = True + event.other.in_sweep = True + + def remove(self, event): + try: + self._events_current_sweep.remove(event) + if USE_DEBUG: + assert(event.in_sweep == True) + assert(event.other.in_sweep == True) + event.in_sweep = False + event.other.in_sweep = False + return True + except KeyError: + if USE_DEBUG: + assert(event.in_sweep == False) + assert(event.other.in_sweep == False) + return False + + def above(self, event): + return self._events_current_sweep.succ_key(event, None) + + def below(self, event): + return self._events_current_sweep.prev_key(event, None) + + ''' + def above_all(self, event): + while True: + event = self.above(event) + if event is None: + break + yield event + ''' + + def above_all(self, event): + # assert(event not in self._events_current_sweep) + return self._events_current_sweep.key_slice(event, None, reverse=False) + + def handle(self, p, events_current): + if len(events_current) == 0: + return + # done already + # self._sweep_to(events_current[0]) + assert(p[0] == self._current_event_point_x) + + if not USE_IGNORE_SEGMENT_ENDINGS: + if len(events_current) > 1: + for i in range(0, len(events_current) - 1): + for j in range(i + 1, len(events_current)): + self._check_intersection( + events_current[i], events_current[j]) + + for e in events_current: + self.handle_event(e) + + def handle_event(self, event): + t = event.type + if t == Event.Type.START: + # print(" START") + self._before = False + self.insert(event) + + e_above = self.above(event) + e_below = self.below(event) + + self._check_intersection(event, e_above) + self._check_intersection(event, e_below) + if USE_PARANOID: + self._check_intersection(e_above, e_below) + + elif t == Event.Type.END: + # print(" END") + self._before = True + + e_above = self.above(event) + e_below = self.below(event) + + self.remove(event) + + self._check_intersection(e_above, e_below) + if USE_PARANOID: + self._check_intersection(event, e_above) + self._check_intersection(event, e_below) + + elif t == Event.Type.INTERSECTION: + # print(" INTERSECTION") + self._before = True + event_set = self.intersections[event.point] + # note: events_current aren't sorted. + reinsert_stack = [] # Stack + for e in event_set: + # Since we know the Event wasn't already removed, + # we want to insert it later on. + if self.remove(e): + reinsert_stack.append(e) + self._before = False + + # Insert all Events that we were able to remove. + while reinsert_stack: + e = reinsert_stack.pop() + + self.insert(e) + + e_above = self.above(e) + e_below = self.below(e) + + self._check_intersection(e, e_above) + self._check_intersection(e, e_below) + if USE_PARANOID: + self._check_intersection(e_above, e_below) + elif (USE_VERTICAL and + (t == Event.Type.START_VERTICAL)): + + # just check sanity + assert(event.segment[0][X] == event.segment[1][X]) + assert(event.segment[0][Y] <= event.segment[1][Y]) + + # In this case we only need to find all segments in this span. + y_above_max = event.segment[1][Y] + + # self.insert(event) + for e_above in self.above_all(event): + if e_above.type == Event.Type.START_VERTICAL: + continue + y_above = e_above.y_intercept_x( + self._current_event_point_x) + if USE_IGNORE_SEGMENT_ENDINGS: + if y_above >= y_above_max - NUM_EPS: + break + else: + if y_above > y_above_max: + break + + # We know this intersects, + # so we could use a faster function now: + # ix = (self._current_event_point_x, y_above) + # ...however best use existing functions + # since it does all sanity checks on endpoints... etc. + self._check_intersection(event, e_above) + + # self.remove(event) + + +class EventQueue: + __slots__ = ( + # note: we only ever pop_min, this could use a 'heap' structure. + # The sorted map holding the points -> event list + # [Point: Event] (tree) + "events_scan", + ) + + def __init__(self, segments): + self.events_scan = RBTree() + # segments = [s for s in segments if s[0][0] != s[1][0] and s[0][1] != s[1][1]] + + for s in segments: + assert(s[0][X] <= s[1][X]) + + slope = slope_v2v2(*s) + + if s[0] == s[1]: + pass + elif USE_VERTICAL and (s[0][X] == s[1][X]): + e_start = Event(Event.Type.START_VERTICAL, s[0], s, slope) + + if USE_DEBUG: + e_start.other = e_start # FAKE, avoid error checking + + self.offer(s[0], e_start) + else: + e_start = Event(Event.Type.START, s[0], s, slope) + e_end = Event(Event.Type.END, s[1], s, slope) + + if USE_DEBUG: + e_start.other = e_end + e_end.other = e_start + + self.offer(s[0], e_start) + self.offer(s[1], e_end) + + def offer(self, p, e: Event): + """ + Offer a new event ``s`` at point ``p`` in this queue. + """ + existing = self.events_scan.setdefault( + p, ([], [], [], []) if USE_VERTICAL else + ([], [], []), + ) + # Can use double linked-list for easy insertion at beginning/end + ''' + if e.type == Event.Type.END: + existing.insert(0, e) + else: + existing.append(e) + ''' + + existing[e.type].append(e) + + # return a set of events + def poll(self): + """ + Get, and remove, the first (lowest) item from this queue. + + :return: the first (lowest) item from this queue. + :rtype: Point, Event pair. + """ + assert(len(self.events_scan) != 0) + p, events_current = self.events_scan.pop_min() + return p, events_current + + +def isect_segments_impl(segments, *, include_segments=False, validate=True) -> list: + # order points left -> right + if Real is float: + segments = [ + # in nearly all cases, comparing X is enough, + # but compare Y too for vertical lines + (s[0], s[1]) if (s[0] <= s[1]) else + (s[1], s[0]) + for s in segments] + else: + segments = [ + # in nearly all cases, comparing X is enough, + # but compare Y too for vertical lines + ( + (Real(s[0][0]), Real(s[0][1])), + (Real(s[1][0]), Real(s[1][1])), + ) if (s[0] <= s[1]) else + ( + (Real(s[1][0]), Real(s[1][1])), + (Real(s[0][0]), Real(s[0][1])), + ) + for s in segments] + + # Ensure segments don't have duplicates or single points, see: #24. + if validate: + segments_old = segments + segments = [] + visited = set() + for s in segments_old: + # Ignore points. + if s[0] == s[1]: + continue + # Ignore duplicates. + if s in visited: + continue + visited.add(s) + segments.append(s) + del segments_old + + queue = EventQueue(segments) + sweep_line = SweepLine(queue) + + while len(queue.events_scan) > 0: + if USE_VERBOSE: + inkex.utils.debug("event {}: x={}".format(len(queue.events_scan), sweep_line._current_event_point_x)) + p, e_ls = queue.poll() + for events_current in e_ls: + if events_current: + sweep_line._sweep_to(p) + sweep_line.handle(p, events_current) + + if include_segments is False: + return sweep_line.get_intersections() + else: + return sweep_line.get_intersections_with_segments() + + +def isect_polygon_impl(points, *, include_segments=False, validate=True) -> list: + n = len(points) + segments = [ + (tuple(points[i]), tuple(points[(i + 1) % n])) + for i in range(n) + ] + return isect_segments_impl(segments, include_segments=include_segments, validate=validate) + + +def isect_segments(segments, *, validate=True) -> list: + return isect_segments_impl(segments, include_segments=False, validate=validate) + + +def isect_polygon(segments, *, validate=True) -> list: + return isect_polygon_impl(segments, include_segments=False, validate=validate) + + +def isect_segments_include_segments(segments, *, validate=True) -> list: + return isect_segments_impl(segments, include_segments=True, validate=validate) + + +def isect_polygon_include_segments(segments, *, validate=True) -> list: + return isect_polygon_impl(segments, include_segments=True, validate=validate) + + +# ---------------------------------------------------------------------------- +# 2D math utilities + + +def slope_v2v2(p1, p2): + if p1[X] == p2[X]: + if p1[Y] < p2[Y]: + return NUM_INF + else: + return -NUM_INF + else: + return (p2[Y] - p1[Y]) / (p2[X] - p1[X]) + + +def sub_v2v2(a, b): + return ( + a[0] - b[0], + a[1] - b[1]) + + +def dot_v2v2(a, b): + return ( + (a[0] * b[0]) + + (a[1] * b[1])) + + +def len_squared_v2v2(a, b): + c = sub_v2v2(a, b) + return dot_v2v2(c, c) + + +def line_point_factor_v2(p, l1, l2, default=NUM_ZERO): + u = sub_v2v2(l2, l1) + h = sub_v2v2(p, l1) + dot = dot_v2v2(u, u) + return (dot_v2v2(u, h) / dot) if dot != NUM_ZERO else default + + +def isect_seg_seg_v2_point(v1, v2, v3, v4, bias=NUM_ZERO): + # Only for predictability and hashable point when same input is given + if v1 > v2: + v1, v2 = v2, v1 + if v3 > v4: + v3, v4 = v4, v3 + + if (v1, v2) > (v3, v4): + v1, v2, v3, v4 = v3, v4, v1, v2 + + div = (v2[0] - v1[0]) * (v4[1] - v3[1]) - (v2[1] - v1[1]) * (v4[0] - v3[0]) + if div == NUM_ZERO: + return None + + vi = (((v3[0] - v4[0]) * + (v1[0] * v2[1] - v1[1] * v2[0]) - (v1[0] - v2[0]) * + (v3[0] * v4[1] - v3[1] * v4[0])) / div, + ((v3[1] - v4[1]) * + (v1[0] * v2[1] - v1[1] * v2[0]) - (v1[1] - v2[1]) * + (v3[0] * v4[1] - v3[1] * v4[0])) / div, + ) + + fac = line_point_factor_v2(vi, v1, v2, default=-NUM_ONE) + if fac < NUM_ZERO - bias or fac > NUM_ONE + bias: + return None + + fac = line_point_factor_v2(vi, v3, v4, default=-NUM_ONE) + if fac < NUM_ZERO - bias or fac > NUM_ONE + bias: + return None + + # vi = round(vi[X], 8), round(vi[Y], 8) + return vi + + +# ---------------------------------------------------------------------------- +# Simple naive line intersect, (for testing only) + + +def isect_segments__naive(segments) -> list: + """ + Brute force O(n2) version of ``isect_segments`` for test validation. + """ + isect = [] + + # order points left -> right + if Real is float: + segments = [ + (s[0], s[1]) if s[0][X] <= s[1][X] else + (s[1], s[0]) + for s in segments] + else: + segments = [ + ( + (Real(s[0][0]), Real(s[0][1])), + (Real(s[1][0]), Real(s[1][1])), + ) if (s[0] <= s[1]) else + ( + (Real(s[1][0]), Real(s[1][1])), + (Real(s[0][0]), Real(s[0][1])), + ) + for s in segments] + + n = len(segments) + + for i in range(n): + a0, a1 = segments[i] + for j in range(i + 1, n): + b0, b1 = segments[j] + if a0 not in (b0, b1) and a1 not in (b0, b1): + ix = isect_seg_seg_v2_point(a0, a1, b0, b1) + if ix is not None: + # USE_IGNORE_SEGMENT_ENDINGS handled already + isect.append(ix) + + return isect + + +def isect_polygon__naive(points) -> list: + """ + Brute force O(n2) version of ``isect_polygon`` for test validation. + """ + isect = [] + + n = len(points) + + if Real is float: + pass + else: + points = [(Real(p[0]), Real(p[1])) for p in points] + + + for i in range(n): + a0, a1 = points[i], points[(i + 1) % n] + for j in range(i + 1, n): + b0, b1 = points[j], points[(j + 1) % n] + if a0 not in (b0, b1) and a1 not in (b0, b1): + ix = isect_seg_seg_v2_point(a0, a1, b0, b1) + if ix is not None: + + if USE_IGNORE_SEGMENT_ENDINGS: + if ((len_squared_v2v2(ix, a0) < NUM_EPS_SQ or + len_squared_v2v2(ix, a1) < NUM_EPS_SQ) and + (len_squared_v2v2(ix, b0) < NUM_EPS_SQ or + len_squared_v2v2(ix, b1) < NUM_EPS_SQ)): + continue + + isect.append(ix) + + return isect + + +# ---------------------------------------------------------------------------- +# Inline Libs +# +# bintrees: 2.0.2, extracted from: +# http://pypi.python.org/pypi/bintrees +# +# - Removed unused functions, such as slicing and range iteration. +# - Added 'cmp' and and 'cmp_data' arguments, +# so we can define our own comparison that takes an arg. +# Needed for sweep-line. +# - Added support for 'default' arguments for prev_item/succ_item, +# so we can avoid exception handling. + +# ------- +# ABCTree + +from operator import attrgetter +_sentinel = object() + + +class _ABCTree(object): + def __init__(self, cmp=None, cmp_data=None): + """T.__init__(...) initializes T; see T.__class__.__doc__ for signature""" + self._root = None + self._count = 0 + if cmp is None: + def cmp(cmp_data, a, b): + if a < b: + return -1 + elif a > b: + return 1 + else: + return 0 + self._cmp = cmp + self._cmp_data = cmp_data + + def clear(self): + """T.clear() -> None. Remove all items from T.""" + def _clear(node): + if node is not None: + _clear(node.left) + _clear(node.right) + node.free() + _clear(self._root) + self._count = 0 + self._root = None + + @property + def count(self): + """Get items count.""" + return self._count + + def _get_value_or_sentinel(self, key): + node = self._root + while node is not None: + cmp = self._cmp(self._cmp_data, key, node.key) + if cmp == 0: + return node.value + elif cmp < 0: + node = node.left + else: + node = node.right + return _sentinel + + def get_value(self, key): + value = self._get_value_or_sentinel(key) + if value is _sentinel: + raise KeyError(str(key)) + return value + + def pop_item(self): + """T.pop_item() -> (k, v), remove and return some (key, value) pair as a + 2-tuple; but raise KeyError if T is empty. + """ + if self.is_empty(): + raise KeyError("pop_item(): tree is empty") + node = self._root + while True: + if node.left is not None: + node = node.left + elif node.right is not None: + node = node.right + else: + break + key = node.key + value = node.value + self.remove(key) + return key, value + popitem = pop_item # for compatibility to dict() + + def min_item(self): + """Get item with min key of tree, raises ValueError if tree is empty.""" + if self.is_empty(): + raise ValueError("Tree is empty") + node = self._root + while node.left is not None: + node = node.left + return node.key, node.value + + def max_item(self): + """Get item with max key of tree, raises ValueError if tree is empty.""" + if self.is_empty(): + raise ValueError("Tree is empty") + node = self._root + while node.right is not None: + node = node.right + return node.key, node.value + + def succ_item(self, key, default=_sentinel): + """Get successor (k,v) pair of key, raises KeyError if key is max key + or key does not exist. optimized for pypy. + """ + # removed graingets version, because it was little slower on CPython and much slower on pypy + # this version runs about 4x faster with pypy than the Cython version + # Note: Code sharing of succ_item() and ceiling_item() is possible, but has always a speed penalty. + node = self._root + succ_node = None + while node is not None: + cmp = self._cmp(self._cmp_data, key, node.key) + if cmp == 0: + break + elif cmp < 0: + if (succ_node is None) or self._cmp(self._cmp_data, node.key, succ_node.key) < 0: + succ_node = node + node = node.left + else: + node = node.right + + if node is None: # stay at dead end + if default is _sentinel: + raise KeyError(str(key)) + return default + # found node of key + if node.right is not None: + # find smallest node of right subtree + node = node.right + while node.left is not None: + node = node.left + if succ_node is None: + succ_node = node + elif self._cmp(self._cmp_data, node.key, succ_node.key) < 0: + succ_node = node + elif succ_node is None: # given key is biggest in tree + if default is _sentinel: + raise KeyError(str(key)) + return default + return succ_node.key, succ_node.value + + def prev_item(self, key, default=_sentinel): + """Get predecessor (k,v) pair of key, raises KeyError if key is min key + or key does not exist. optimized for pypy. + """ + # removed graingets version, because it was little slower on CPython and much slower on pypy + # this version runs about 4x faster with pypy than the Cython version + # Note: Code sharing of prev_item() and floor_item() is possible, but has always a speed penalty. + node = self._root + prev_node = None + + while node is not None: + cmp = self._cmp(self._cmp_data, key, node.key) + if cmp == 0: + break + elif cmp < 0: + node = node.left + else: + if (prev_node is None) or self._cmp(self._cmp_data, prev_node.key, node.key) < 0: + prev_node = node + node = node.right + + if node is None: # stay at dead end (None) + if default is _sentinel: + raise KeyError(str(key)) + return default + # found node of key + if node.left is not None: + # find biggest node of left subtree + node = node.left + while node.right is not None: + node = node.right + if prev_node is None: + prev_node = node + elif self._cmp(self._cmp_data, prev_node.key, node.key) < 0: + prev_node = node + elif prev_node is None: # given key is smallest in tree + if default is _sentinel: + raise KeyError(str(key)) + return default + return prev_node.key, prev_node.value + + def __repr__(self): + """T.__repr__(...) <==> repr(x)""" + tpl = "%s({%s})" % (self.__class__.__name__, '%s') + return tpl % ", ".join(("%r: %r" % item for item in self.items())) + + def __contains__(self, key): + """k in T -> True if T has a key k, else False""" + return self._get_value_or_sentinel(key) is not _sentinel + + def __len__(self): + """T.__len__() <==> len(x)""" + return self.count + + def is_empty(self): + """T.is_empty() -> False if T contains any items else True""" + return self.count == 0 + + def set_default(self, key, default=None): + """T.set_default(k[,d]) -> T.get(k,d), also set T[k]=d if k not in T""" + value = self._get_value_or_sentinel(key) + if value is _sentinel: + self.insert(key, default) + return default + return value + setdefault = set_default # for compatibility to dict() + + def get(self, key, default=None): + """T.get(k[,d]) -> T[k] if k in T, else d. d defaults to None.""" + + value = self._get_value_or_sentinel(key) + if value is _sentinel: + return default + return value + + def pop(self, key, *args): + """T.pop(k[,d]) -> v, remove specified key and return the corresponding value. + If key is not found, d is returned if given, otherwise KeyError is raised + """ + if len(args) > 1: + raise TypeError("pop expected at most 2 arguments, got %d" % (1 + len(args))) + + value = self._get_value_or_sentinel(key) + if value is _sentinel: + if len(args) == 0: + raise KeyError(str(key)) + return args[0] + + self.remove(key) + return value + + def prev_key(self, key, default=_sentinel): + """Get predecessor to key, raises KeyError if key is min key + or key does not exist. + """ + item = self.prev_item(key, default) + return default if item is default else item[0] + + def succ_key(self, key, default=_sentinel): + """Get successor to key, raises KeyError if key is max key + or key does not exist. + """ + item = self.succ_item(key, default) + return default if item is default else item[0] + + def pop_min(self): + """T.pop_min() -> (k, v), remove item with minimum key, raise ValueError + if T is empty. + """ + item = self.min_item() + self.remove(item[0]) + return item + + def pop_max(self): + """T.pop_max() -> (k, v), remove item with maximum key, raise ValueError + if T is empty. + """ + item = self.max_item() + self.remove(item[0]) + return item + + def min_key(self): + """Get min key of tree, raises ValueError if tree is empty. """ + return self.min_item()[0] + + def max_key(self): + """Get max key of tree, raises ValueError if tree is empty. """ + return self.max_item()[0] + + def key_slice(self, start_key, end_key, reverse=False): + """T.key_slice(start_key, end_key) -> key iterator: + start_key <= key < end_key. + + Yields keys in ascending order if reverse is False else in descending order. + """ + return (k for k, v in self.iter_items(start_key, end_key, reverse=reverse)) + + def iter_items(self, start_key=None, end_key=None, reverse=False): + """Iterates over the (key, value) items of the associated tree, + in ascending order if reverse is True, iterate in descending order, + reverse defaults to False""" + # optimized iterator (reduced method calls) - faster on CPython but slower on pypy + + if self.is_empty(): + return [] + if reverse: + return self._iter_items_backward(start_key, end_key) + else: + return self._iter_items_forward(start_key, end_key) + + def _iter_items_forward(self, start_key=None, end_key=None): + for item in self._iter_items(left=attrgetter("left"), right=attrgetter("right"), + start_key=start_key, end_key=end_key): + yield item + + def _iter_items_backward(self, start_key=None, end_key=None): + for item in self._iter_items(left=attrgetter("right"), right=attrgetter("left"), + start_key=start_key, end_key=end_key): + yield item + + def _iter_items(self, left=attrgetter("left"), right=attrgetter("right"), start_key=None, end_key=None): + node = self._root + stack = [] + go_left = True + in_range = self._get_in_range_func(start_key, end_key) + + while True: + if left(node) is not None and go_left: + stack.append(node) + node = left(node) + else: + if in_range(node.key): + yield node.key, node.value + if right(node) is not None: + node = right(node) + go_left = True + else: + if not len(stack): + return # all done + node = stack.pop() + go_left = False + + def _get_in_range_func(self, start_key, end_key): + if start_key is None and end_key is None: + return lambda x: True + else: + if start_key is None: + start_key = self.min_key() + if end_key is None: + return (lambda x: self._cmp(self._cmp_data, start_key, x) <= 0) + else: + return (lambda x: self._cmp(self._cmp_data, start_key, x) <= 0 and + self._cmp(self._cmp_data, x, end_key) < 0) + + +# ------ +# RBTree + +class Node(object): + """Internal object, represents a tree node.""" + __slots__ = ['key', 'value', 'red', 'left', 'right'] + + def __init__(self, key=None, value=None): + self.key = key + self.value = value + self.red = True + self.left = None + self.right = None + + def free(self): + self.left = None + self.right = None + self.key = None + self.value = None + + def __getitem__(self, key): + """N.__getitem__(key) <==> x[key], where key is 0 (left) or 1 (right).""" + return self.left if key == 0 else self.right + + def __setitem__(self, key, value): + """N.__setitem__(key, value) <==> x[key]=value, where key is 0 (left) or 1 (right).""" + if key == 0: + self.left = value + else: + self.right = value + + +class RBTree(_ABCTree): + """ + RBTree implements a balanced binary tree with a dict-like interface. + + see: http://en.wikipedia.org/wiki/Red_black_tree + """ + @staticmethod + def is_red(node): + if (node is not None) and node.red: + return True + else: + return False + + @staticmethod + def jsw_single(root, direction): + other_side = 1 - direction + save = root[other_side] + root[other_side] = save[direction] + save[direction] = root + root.red = True + save.red = False + return save + + @staticmethod + def jsw_double(root, direction): + other_side = 1 - direction + root[other_side] = RBTree.jsw_single(root[other_side], other_side) + return RBTree.jsw_single(root, direction) + + def _new_node(self, key, value): + """Create a new tree node.""" + self._count += 1 + return Node(key, value) + + def insert(self, key, value): + """T.insert(key, value) <==> T[key] = value, insert key, value into tree.""" + if self._root is None: # Empty tree case + self._root = self._new_node(key, value) + self._root.red = False # make root black + return + + head = Node() # False tree root + grand_parent = None + grand_grand_parent = head + parent = None # parent + direction = 0 + last = 0 + + # Set up helpers + grand_grand_parent.right = self._root + node = grand_grand_parent.right + # Search down the tree + while True: + if node is None: # Insert new node at the bottom + node = self._new_node(key, value) + parent[direction] = node + elif RBTree.is_red(node.left) and RBTree.is_red(node.right): # Color flip + node.red = True + node.left.red = False + node.right.red = False + + # Fix red violation + if RBTree.is_red(node) and RBTree.is_red(parent): + direction2 = 1 if grand_grand_parent.right is grand_parent else 0 + if node is parent[last]: + grand_grand_parent[direction2] = RBTree.jsw_single(grand_parent, 1 - last) + else: + grand_grand_parent[direction2] = RBTree.jsw_double(grand_parent, 1 - last) + + # Stop if found + if self._cmp(self._cmp_data, key, node.key) == 0: + node.value = value # set new value for key + break + + last = direction + direction = 0 if (self._cmp(self._cmp_data, key, node.key) < 0) else 1 + # Update helpers + if grand_parent is not None: + grand_grand_parent = grand_parent + grand_parent = parent + parent = node + node = node[direction] + + self._root = head.right # Update root + self._root.red = False # make root black + + def remove(self, key): + """T.remove(key) <==> del T[key], remove item from tree.""" + if self._root is None: + raise KeyError(str(key)) + head = Node() # False tree root + node = head + node.right = self._root + parent = None + grand_parent = None + found = None # Found item + direction = 1 + + # Search and push a red down + while node[direction] is not None: + last = direction + + # Update helpers + grand_parent = parent + parent = node + node = node[direction] + + direction = 1 if (self._cmp(self._cmp_data, node.key, key) < 0) else 0 + + # Save found node + if self._cmp(self._cmp_data, key, node.key) == 0: + found = node + + # Push the red node down + if not RBTree.is_red(node) and not RBTree.is_red(node[direction]): + if RBTree.is_red(node[1 - direction]): + parent[last] = RBTree.jsw_single(node, direction) + parent = parent[last] + elif not RBTree.is_red(node[1 - direction]): + sibling = parent[1 - last] + if sibling is not None: + if (not RBTree.is_red(sibling[1 - last])) and (not RBTree.is_red(sibling[last])): + # Color flip + parent.red = False + sibling.red = True + node.red = True + else: + direction2 = 1 if grand_parent.right is parent else 0 + if RBTree.is_red(sibling[last]): + grand_parent[direction2] = RBTree.jsw_double(parent, last) + elif RBTree.is_red(sibling[1-last]): + grand_parent[direction2] = RBTree.jsw_single(parent, last) + # Ensure correct coloring + grand_parent[direction2].red = True + node.red = True + grand_parent[direction2].left.red = False + grand_parent[direction2].right.red = False + + # Replace and remove if found + if found is not None: + found.key = node.key + found.value = node.value + parent[int(parent.right is node)] = node[int(node.left is None)] + node.free() + self._count -= 1 + + # Update root and make it black + self._root = head.right + if self._root is not None: + self._root.red = False + if not found: + raise KeyError(str(key)) diff --git a/extensions/fablabchemnitz/convert_to_polylines/convert_to_polylines.inx b/extensions/fablabchemnitz/convert_to_polylines/convert_to_polylines.inx new file mode 100644 index 00000000..70f25c04 --- /dev/null +++ b/extensions/fablabchemnitz/convert_to_polylines/convert_to_polylines.inx @@ -0,0 +1,16 @@ + + + Convert To Polylines + fablabchemnitz.de.convert_to_polylines + + path + + + + + + + + diff --git a/extensions/fablabchemnitz/convert_to_polylines/convert_to_polylines.py b/extensions/fablabchemnitz/convert_to_polylines/convert_to_polylines.py new file mode 100644 index 00000000..7f3a6401 --- /dev/null +++ b/extensions/fablabchemnitz/convert_to_polylines/convert_to_polylines.py @@ -0,0 +1,49 @@ +#!/usr/bin/env python3 + +""" +Extension for InkScape 1.0 + +Converts curves to polylines - a quick and dirty helper for a lot of elements. Basically the same functionality can be done with default UI featureset but with a lot more mouse clicks + +Author: Mario Voigt / FabLab Chemnitz +Mail: mario.voigt@stadtfabrikanten.org +Date: 05.09.2020 +Last patch: 05.09.2020 +License: GNU GPL v3 +""" + +import inkex +from inkex.paths import Path + +class ConvertToPolylines(inkex.EffectExtension): + + #convert a path (curve) to a polyline and remove dangling/duplicate/useless overlapping handles (points) + def convertPath(self, node): + if node.tag == inkex.addNS('path','svg'): + polypath = [] + i = 0 + for x, y in node.path.end_points: + if i == 0: + polypath.append(['M', [x,y]]) + else: + polypath.append(['L', [x,y]]) + if i == 1 and polypath[len(polypath)-2][1] == polypath[len(polypath)-1][1]: + polypath.pop(len(polypath)-1) #special handling for the seconds point after M command + elif polypath[len(polypath)-2] == polypath[len(polypath)-1]: #get the previous point + polypath.pop(len(polypath)-1) + i += 1 + node.set('d', str(Path(polypath))) + children = node.getchildren() + if children is not None: + for child in children: + self.convertPath(child) + + def effect(self): + if len(self.svg.selected) == 0: + self.convertPath(self.document.getroot()) + else: + for id, item in self.svg.selected.items(): + self.convertPath(item) + +if __name__ == '__main__': + ConvertToPolylines().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/convert_vertical_horizontal_to_line/convert_vertical_horizontal_to_line.inx b/extensions/fablabchemnitz/convert_vertical_horizontal_to_line/convert_vertical_horizontal_to_line.inx new file mode 100644 index 00000000..7c2c9b80 --- /dev/null +++ b/extensions/fablabchemnitz/convert_vertical_horizontal_to_line/convert_vertical_horizontal_to_line.inx @@ -0,0 +1,16 @@ + + + Convert Vertical/Horizontal To Line + fablabchemnitz.de.convert_vertical_horizontal_to_line + + path + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/convert_vertical_horizontal_to_line/convert_vertical_horizontal_to_line.py b/extensions/fablabchemnitz/convert_vertical_horizontal_to_line/convert_vertical_horizontal_to_line.py new file mode 100644 index 00000000..ef789cb3 --- /dev/null +++ b/extensions/fablabchemnitz/convert_vertical_horizontal_to_line/convert_vertical_horizontal_to_line.py @@ -0,0 +1,64 @@ +#!/usr/bin/env python3 + +#M 60.403,71.0937 V 89.268022 135.773 + +""" +Extension for InkScape 1.X + +This extension converts an SVG path's d attribute the following way: find each V (vertical line) and each H (horizontal line) and replace it by a generic line (L type). +A lot of extensions do not work with V and H, but with L commands. So this is just a helper extension for other extensions :-) + +Example conversion: +from: M 60.403,71.0937 V 89.268022 135.773 +to: M 60.403 71.0937 L 60.403 89.268 L 60.403 135.773 + +Author: Mario Voigt / FabLab Chemnitz +Mail: mario.voigt@stadtfabrikanten.org +Date: 23.08.2020 +Last patch: 23.08.2020 +License: GNU GPL v3 +""" + +from math import * +import inkex +from inkex.paths import Path, CubicSuperPath + +class ConvertVerticalHorizontalToLine(inkex.EffectExtension): + + def effect(self): + if len(self.svg.selected) == 0: exit("Please select at least one path.") + for obj in self.svg.selected: # The objects are the paths, which may be compound + if obj.tag == inkex.addNS('path','svg'): + curr = self.svg.selected[obj] + raw = Path(curr.get("d")).to_arrays() + subpaths, prev = [], 0 + for i in range(len(raw)): # Breaks compound paths into simple paths + if raw[i][0] == 'M' and i != 0: + subpaths.append(raw[prev:i]) + prev = i + subpaths.append(raw[prev:]) + + seg = [] + for simpath in subpaths: + if simpath[-1][0] == 'Z': + simpath[-1][0] = 'L' + if simpath[-2][0] == 'L': simpath[-1][1] = simpath[0][1] + else: simpath.pop() + for i in range(len(simpath)): + if simpath[i][0] == 'V': # vertical and horizontal lines only have one point in args, but 2 are required + #inkex.utils.debug(simpath[i][0]) + simpath[i][0]='L' #overwrite V with regular L command + add=simpath[i-1][1][0] #read the X value from previous segment + simpath[i][1].append(simpath[i][1][0]) #add the second (missing) argument by taking argument from previous segment + simpath[i][1][0]=add #replace with recent X after Y was appended + if simpath[i][0] == 'H': # vertical and horizontal lines only have one point in args, but 2 are required + #inkex.utils.debug(simpath[i][0]) + simpath[i][0]='L' #overwrite H with regular L command + simpath[i][1].append(simpath[i-1][1][1]) #add the second (missing) argument by taking argument from previous segment + #inkex.utils.debug(simpath[i]) + seg.append(simpath[i]) + curr.set("d", Path(seg)) + else: + inkex.utils.debug("Object " + obj.get('id') + " is not a path. Please convert it to a path first.") +if __name__ == '__main__': + ConvertVerticalHorizontalToLine().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/convex_hull/convex_hull.inx b/extensions/fablabchemnitz/convex_hull/convex_hull.inx new file mode 100644 index 00000000..941efdb1 --- /dev/null +++ b/extensions/fablabchemnitz/convex_hull/convex_hull.inx @@ -0,0 +1,16 @@ + + + Convex Hull + fablabchemnitz.de.convex_hull + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/convex_hull/convex_hull.py b/extensions/fablabchemnitz/convex_hull/convex_hull.py new file mode 100644 index 00000000..77dd98db --- /dev/null +++ b/extensions/fablabchemnitz/convex_hull/convex_hull.py @@ -0,0 +1,124 @@ +#!/usr/bin/env python3 + +import inkex +import sys +import numpy as n +from inkex.paths import CubicSuperPath +from inkex.transforms import Transform +from lxml import etree + +link = lambda a,b: n.concatenate((a,b[1:])) +edge = lambda a,b: n.concatenate(([a],[b])) + +''' + +Convex Hull routine by Markus Kohler, found at https://gist.github.com/kohlerm/0337f7c64df42f21f96405b3f8e895f2, which itself is an implementation of: +https://github.com/flengyel/REST/blob/master/quickhull.py +Compute the convex hull of a set of points in the plane +Adapted from en.literateprograms.org/Quickhull_(Python,arrays) +Content available under MIT/X11 License at +http://en.literateprograms.org/LiteratePrograms:Copyrights +Copyright (c) 2008 the authors listed in the page history +(see http://en.literateprograms.org/index.php?title=Quickhull_(Python,_arrays)&action=history) +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. +''' + +def qhull(sample): + def dome(sample,base): + h, t = base + dists = n.dot(sample-h, n.dot(((0,-1),(1,0)),(t-h))) + outer = n.repeat(sample, dists>0, 0) + + if len(outer): + pivot = sample[n.argmax(dists)] + return link(dome(outer, edge(h, pivot)), + dome(outer, edge(pivot, t))) + else: + return base + if len(sample) > 2: + axis = sample[:,0] + base = n.take(sample, [n.argmin(axis), n.argmax(axis)], 0) + return link(dome(sample, base), + dome(sample, base[::-1])) + else: + return sample + +class ConvexHull(inkex.EffectExtension): + def __init__(self): + inkex.Effect.__init__(self) + self.paths = {} + self.paths_clone_transform = {} + + def joinWithElement (self, element, path, makeGroup=False, cloneTransform=None): + if (not path) or (len(path) == 0 ): + return + g = self.document.getroot() + # Now make a element which contains the twist & is a child + # of the new element + style = { 'stroke': '#000000', 'fill': 'none', 'stroke-width': '1' } + line_attribs = { 'style':str(inkex.Style(style)), 'd': path } + if (cloneTransform != None ) and (cloneTransform != '' ): + line_attribs['transform'] = cloneTransform + etree.SubElement(g, inkex.addNS('path', 'svg' ), line_attribs) + + def getControlPoints(self, element, n_array = None): + if n_array == None: + n_array = [] + if element.tag == inkex.addNS('path','svg'): + element.apply_transform() + p = CubicSuperPath(element.get('d')) + for subpath in p: # there may be several paths joined together (e.g. holes) + for csp in subpath: # groups of three to handle control points. + # just the points no control points (handles) + n_array.append(csp[1][0]) + n_array.append(csp[1][1]) + for child in element.getchildren(): + n_array += self.getControlPoints(child, n_array) + return n_array + + def effect(self): + + if len(self.svg.selected) > 0: + global output_elements, points + + n_array = [] + for element in self.svg.selected.values(): + n_array += self.getControlPoints(element, None) + + k = n.asarray(n_array) + length = int(len(k)/2) + c = k.reshape(length,2) + hull_pts = qhull(c) + + pdata = '' + for vertex in hull_pts: + if pdata == '': + pdata = 'M%f,%f' % (vertex[0], vertex[1] ) + else: + pdata += 'L %f,%f' % (vertex[0], vertex[1] ) + pdata += ' Z' + path = 'polygon' + makeGroup = False + paths_clone_transform = None + self.joinWithElement(path, pdata, makeGroup, paths_clone_transform) + + else: + inkex.errormsg('Please select some paths first.') + return + +if __name__ == '__main__': + ConvexHull().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/create_hexmap/create_hexmap.inx b/extensions/fablabchemnitz/create_hexmap/create_hexmap.inx new file mode 100644 index 00000000..6c63643e --- /dev/null +++ b/extensions/fablabchemnitz/create_hexmap/create_hexmap.inx @@ -0,0 +1,63 @@ + + + Create Hexmap + fablabchemnitz.de.create_hexmap + + + + + + + + + + 10 + 10 + 0 + 1.0 + 10.0 + + + false + false + false + false + false + false + + + . + false + false + false + true + 1 + 1 + 1 + + + true + true + true + true + false + false + false + + + false + debug.txt + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/create_hexmap/create_hexmap.py b/extensions/fablabchemnitz/create_hexmap/create_hexmap.py new file mode 100644 index 00000000..18670079 --- /dev/null +++ b/extensions/fablabchemnitz/create_hexmap/create_hexmap.py @@ -0,0 +1,420 @@ +#!/usr/bin/env python3 + +import inkex +import sys +from inkex import NSS +import math +from lxml import etree + +class Point: + def __init__(self, x, y): + self.x = x + self.y = y + + def __str__(self): + return '%f,%f' % (self.x, self.y) + + def y_mirror(self, h): + return Point(self.x, h - self.y); + + def __sub__(self, other): + return Point(self.x - other.x, self.y - other.y) + + def __add__(self, other): + return Point(self.x + other.x, self.y + other.y) + + def __mul__(self, k): + return Point(self.x * k, self.y * k) + + def rotated(self, total_width): + return Point(self.y, total_width - self.x) + +def nrdigits(f): + return int(math.floor(math.log10(f))) + 1 + +def alphacol(c): + d = c / 26 + r = c % 26 + return ('%c' % (r + 65)) * (int(d) + 1) + +def calc_hex_height(hex_width): + return 0.25 * hex_width / math.tan(math.pi / 6) * 2 + +COORD_SIZE_PART_OF_HEX_HEIGHT = 0.1 +COORD_YOFFSET_PART = 75 +CENTERDOT_SIZE_FACTOR = 1.1690625 + +class CreateHexmap(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument('--tab') + pars.add_argument('--generatelog', type = inkex.Boolean, default = False) + pars.add_argument('--logfilepath', default = "debug.txt") + pars.add_argument("--units", default='mm', help="Units this dialog is using") + pars.add_argument('--cols', type = int, default = '10', help = 'Number of columns.') + pars.add_argument('--rows', type = int, default = '10', help = 'Number of columns.') + pars.add_argument('--hexsize', type = float, default = 0.0) + pars.add_argument('--strokewidth', type = float, default = 1.0) + pars.add_argument('--coordrows', type = int, default = '1') + pars.add_argument('--coordcolstart', type = int, default = '1') + pars.add_argument('--coordrowstart', type = int, default = '1') + pars.add_argument('--bricks', type = inkex.Boolean, default = False) + pars.add_argument('--squarebricks', type = inkex.Boolean, default = False) + pars.add_argument('--rotate', type = inkex.Boolean, default = False) + pars.add_argument('--coordseparator', default = '') + pars.add_argument('--layersingroup', type = inkex.Boolean, default = False, help = 'Put all layers in a layer group.') + pars.add_argument('--coordalphacol', type = inkex.Boolean, default = False, help = 'Reverse row coordinates.') + pars.add_argument('--coordrevrow', type = inkex.Boolean, default = False, help = 'Reverse row coordinates.') + pars.add_argument('--coordzeros', type = inkex.Boolean, default = True) + pars.add_argument('--coordrowfirst', type = inkex.Boolean, default = False, help = 'Reverse row coordinates.') + pars.add_argument('--xshift', type = inkex.Boolean, default = False, help = 'Shift grid half hex and wrap.') + pars.add_argument('--firstcoldown', type = inkex.Boolean, default = False, help = 'Make first column half-hex down.') + pars.add_argument('--halfhexes', type = inkex.Boolean, default = False) + pars.add_argument('--verticesize', type = float,default = 1.0) + pars.add_argument('--layer_grid', type = inkex.Boolean, default = True) + pars.add_argument('--layer_fill', type = inkex.Boolean, default = True) + pars.add_argument('--layer_coordinates', type = inkex.Boolean, default = True) + pars.add_argument('--layer_centerdots', type = inkex.Boolean, default = True) + pars.add_argument('--layer_vertices', type = inkex.Boolean, default = False) + pars.add_argument('--layer_circles', type = inkex.Boolean, default = False) + + def createLayer(self, name): + layer = etree.Element(inkex.addNS('g', 'svg')) + layer.set(inkex.addNS('label', 'inkscape'), name) + layer.set(inkex.addNS('groupmode', 'inkscape'), 'layer') + return layer + + def logwrite(self, msg): + if self.options.generatelog: + log = open(self.options.logfilepath, 'w') + log.write(msg) + log.close() + + def svg_line(self, p1, p2): + line = etree.Element('line') + line.set('x1', str(p1.x + self.xoffset)) + line.set('y1', str(p1.y + self.yoffset)) + line.set('x2', str(p2.x + self.xoffset)) + line.set('y2', str(p2.y + self.yoffset)) + line.set('style', 'stroke:#000000; stroke-width:' + str(self.stroke_width) + ';stroke-linecap:round') + return line + + def svg_circle(self, p, radius): + circle = etree.Element('circle') + circle.set('cx', str(p.x + self.xoffset)) + circle.set('cy', str(p.y + self.yoffset)) + circle.set('r', str(radius)) + circle.set('fill', 'black') + return circle + + def svg_polygon(self, points): + poly = etree.Element('polygon') + pointsdefa = [] + for p in points: + offset_p = Point(p.x + self.xoffset, p.y + self.yoffset) + pointsdefa.append(str(offset_p)) + pointsdef = ' '.join(pointsdefa) + poly.set('points', pointsdef) + poly.set('style', 'stroke:none;fill:#ffffff;fill-opacity:1;stroke-width:' + str(self.stroke_width) + ';stroke-linecap:round') + return poly + + def svg_coord(self, p, col, row, cols, rows, anchor='middle'): + if self.coordrevrow: + row = rows - row + else: + row = row + 1 + if self.coordrevcol: + col = cols - col + else: + col = col + 1 + row = row + self.options.coordrowstart - 1 + col = col + self.options.coordcolstart - 1 + if ((row != 1 and row % self.coordrows != 0) + or row < 1 or col < 1): + return None + + if self.coordrowfirst: + col,row = [row,col] + + if self.coordalphacol: + acol = alphacol(col - 1) + if self.coordzeros: + zrow = str(row).zfill(self.rowdigits) + coord = acol + self.coordseparator + zrow + else: + coord = acol + self.coordseparator + str(row) + elif self.coordzeros: + zcol = str(col).zfill(self.coldigits) + zrow = str(row).zfill(self.rowdigits) + coord = zcol + self.coordseparator + zrow + else: + coord = str(col) + self.coordseparator + str(row) + + self.logwrite(" coord-> '%s'\n" % (coord)) + text = etree.Element('text') + text.set('x', str(p.x + self.xoffset)) + text.set('y', str(p.y + self.yoffset)) + style = ('text-align:center;text-anchor:%s;font-size:%fpt' + % (anchor, self.coordsize)) + text.set('style', style) + text.text = coord + return text + + def add_hexline(self, gridlayer, verticelayer, p1, p2): + if gridlayer is not None: + gridlayer.append(self.svg_line(p1, p2)) + if verticelayer is not None: + verticelayer.append(self.svg_line(p1, (p2 - p1) + * self.verticesize + p1)) + verticelayer.append(self.svg_line(p2, p2 - (p2 - p1) + * self.verticesize)) + + def effect(self): + strokewidth = self.options.strokewidth + cols = self.options.cols + rows = self.options.rows + halves = self.options.halfhexes + xshift = self.options.xshift + firstcoldown = self.options.firstcoldown + bricks = self.options.bricks + squarebricks = self.options.squarebricks + rotate = self.options.rotate + layersingroup = self.options.layersingroup + + self.coordseparator = self.options.coordseparator + if self.coordseparator == None: + self.coordseparator = '' + self.coordrevrow = self.options.coordrevrow + self.coordrevcol = False + self.coordalphacol = self.options.coordalphacol + self.coordrows = self.options.coordrows + self.coordrowfirst = self.options.coordrowfirst + self.coordzeros = self.options.coordzeros + + if rotate: + self.coordrowfirst = not self.coordrowfirst + self.coordrevcol = not self.coordrevrow + self.coordrevrow = False + + self.verticesize = self.options.verticesize / 100.0 + self.logwrite('verticesize: %f\n' % self.verticesize) + if self.verticesize < 0.01 or self.verticesize > 0.5: + self.logwrite('verticesize out of range\n') + self.verticesize = 0.15 + + self.coldigits = nrdigits(cols + self.options.coordcolstart) + self.rowdigits = nrdigits(rows + self.options.coordrowstart) + if self.coldigits < 2: + self.coldigits = 2 + if self.rowdigits < 2: + self.rowdigits = 2 + if self.coordrowfirst: + self.coldigits,self.rowdigits = [self.rowdigits,self.coldigits] + + self.logwrite('cols: %d, rows: %d\n' % (cols, rows)) + self.logwrite('xshift: %s, halves: %s\n' % (str(xshift), str(halves))) + + svg = self.document.xpath('//svg:svg' , namespaces=NSS)[0] + + self.stroke_width = self.svg.unittouu(str(self.options.strokewidth) + self.options.units) + + width = float(self.svg.unittouu(svg.get('width'))) - self.stroke_width + height = float(self.svg.unittouu(svg.get('height'))) - self.stroke_width + + # So I was a bit lazy and only added an offset to all the + # svg_* functions to compensate for the stroke width. + # There should be a better way. + self.xoffset = self.stroke_width * 0.5 + self.yoffset = self.stroke_width * 0.5 + + if self.options.layer_grid: + hexgrid = self.createLayer('Hex Grid') + else: + hexgrid = None + if self.options.layer_fill: + hexfill = self.createLayer('Hex Fill') + else: + hexfill = None + if self.options.layer_coordinates: + hexcoords = self.createLayer('Hex Coordinates') + else: + hexcoords = None + if self.options.layer_centerdots: + hexdots = self.createLayer('Hex Centerdots') + else: + hexdots = None + if self.options.layer_vertices: + hexvertices = self.createLayer('Hex Vertices') + else: + hexvertices = None + if self.options.layer_circles: + hexcircles = self.createLayer('Hex Circles') + else: + hexcircles = None + if hexvertices is not None and hexgrid is not None: + hexgrid.set('style', 'display:none') + + self.logwrite('w, h : %f, %f\n' % (width, height)) + + if xshift: + hex_cols = (cols * 3.0) * 0.25 + else: + hex_cols = (cols * 3.0 + 1.0) * 0.25 + + if halves: + hex_rows = rows + else: + hex_rows = rows + 0.5 + + hex_width = width / hex_cols + + if self.options.hexsize > 0: + hex_width = self.svg.unittouu(str(self.options.hexsize) + self.options.units) + hex_height = calc_hex_height(hex_width) + + # square bricks workaround + if bricks and squarebricks: + hex_height = hex_width + hex_width = hex_width / 0.75 + + hexes_height = hex_height * hex_rows + hexes_width = hex_width * 0.75 * cols + hex_width * 0.25 + + self.coordsize = hex_height * COORD_SIZE_PART_OF_HEX_HEIGHT + if self.coordsize > 1.0: + self.coordsize = round(self.coordsize) + self.centerdotsize = self.stroke_width * CENTERDOT_SIZE_FACTOR + self.circlesize = hex_height / 2 + + self.logwrite('hex_width: %f, hex_height: %f\n' %(hex_width, + hex_height)) + + # FIXME try to remember what 0.005 is for + coord_yoffset = COORD_YOFFSET_PART * hex_height * 0.005 + + for col in range(cols + 1): + cx = (2.0 + col * 3.0) * 0.25 * hex_width + if xshift: + cx = cx - hex_width * 0.5 + coldown = col % 2 + if firstcoldown: + coldown = not coldown + for row in range(rows + 1): + cy = (0.5 + coldown * 0.5 + row) * hex_height + self.logwrite('col: %d, row: %d, c: %f %f\n' % (col, row, + cx, cy)) + c = Point(cx, cy) + if rotate: + c = c.rotated(hexes_width) + if (hexcoords is not None + and (col < cols or xshift) and row < rows): + cc = c + Point(0, coord_yoffset) + anchor = 'middle' + if xshift and col == 0: + anchor = 'start' + elif xshift and col == cols: + anchor = 'end' + coord = self.svg_coord(cc, col, row, cols, rows, anchor) + if coord != None: + hexcoords.append(coord) + if (hexdots is not None + and (col < cols or xshift) and row < rows): + cd = self.svg_circle(c, self.centerdotsize) + cd.set('id', 'hexcenter_%d_%d' + % (col + self.options.coordcolstart, + row + self.options.coordrowstart)) + hexdots.append(cd) + #FIXME make half-circles in half hexes + if (hexcircles is not None and (col < cols or xshift) + and row < rows): + el = self.svg_circle(c, self.circlesize) + el.set('id', 'hexcircle_%d_%d' + % (col + self.options.coordcolstart, + row + self.options.coordrowstart)) + hexcircles.append(el) + x = [cx - hex_width * 0.5, + cx - hex_width * 0.25, + cx + hex_width * 0.25, + cx + hex_width * 0.5] + y = [cy - hex_height * 0.5, + cy, + cy + hex_height * 0.5] + if bricks and xshift: + sys.exit('No support for bricks with x shift.') + if xshift and col == 0: + x[0] = cx + x[1] = cx + elif xshift and col == cols: + x[2] = cx + x[3] = cx + if halves and coldown and row == rows-1: + y[2] = cy + # with bricks pattern, shift some coordinates a bit + # to make correct shape + if bricks: + brick_adjust = hex_width * 0.125 + else: + brick_adjust = 0 + p = [Point(x[2] + brick_adjust, y[0]), + Point(x[3] - brick_adjust, y[1]), + Point(x[2] + brick_adjust, y[2]), + Point(x[1] - brick_adjust, y[2]), + Point(x[0] + brick_adjust, y[1]), + Point(x[1] - brick_adjust, y[0])] + if rotate: + p = [point.rotated(hexes_width) for point in p] + if (hexfill is not None + and (col < cols or xshift) and row < rows): + if row < rows or (halves and coldown): + sp = self.svg_polygon(p) + if halves and coldown and row == rows - 1: + p2 = [x.y_mirror(hexes_height) for x in p] + sp = self.svg_polygon(p) + sp.set('id', 'hexfill_%d_%d' + % (col + self.options.coordcolstart, + row + self.options.coordrowstart)) + hexfill.append(sp) + if ((col < cols and (not halves or row < rows + or not coldown)) + or (xshift and col == cols + and not (halves and row == rows))): + self.add_hexline(hexgrid, hexvertices, p[5], p[0]) + self.logwrite('line 0-5\n') + if row < rows: + if ((coldown or row > 0 or col < cols + or halves or xshift) + and not (xshift and col == 0)): + self.add_hexline(hexgrid, hexvertices, p[5], p[4]) + self.logwrite('line 4-5\n') + if not coldown and row == 0 and col < cols: + self.add_hexline(hexgrid, hexvertices, p[0], p[1]) + self.logwrite('line 0-1\n') + if not (halves and coldown and row == rows-1): + if (not (xshift and col == 0) + and not (not xshift and col == cols + and row == rows-1 and coldown)): + self.add_hexline(hexgrid, hexvertices, p[4], p[3]) + self.logwrite('line 3-4\n') + if coldown and row == rows - 1 and col < cols: + self.add_hexline(hexgrid, hexvertices, p[1], p[2]) + self.logwrite('line 1-2\n') + parent = svg + if layersingroup: + parent = self.createLayer('Hex Map') + self.append_if_new_name(svg, parent) + self.append_if_new_name(parent, hexfill) + self.append_if_new_name(parent, hexcircles) + self.append_if_new_name(parent, hexgrid) + self.append_if_new_name(parent, hexvertices) + self.append_if_new_name(parent, hexcoords) + self.append_if_new_name(parent, hexdots) + + def append_if_new_name(self, svg, layer): + if layer is not None: + name = layer.get(inkex.addNS('label', 'inkscape')) + if not name in [c.get(inkex.addNS('label', 'inkscape'), 'name') + for c in svg.iterchildren()]: + svg.append(layer) + +if __name__ == '__main__': + CreateHexmap().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/create_links/create_links.inx b/extensions/fablabchemnitz/create_links/create_links.inx new file mode 100644 index 00000000..56d6b258 --- /dev/null +++ b/extensions/fablabchemnitz/create_links/create_links.inx @@ -0,0 +1,99 @@ + + + Create Links (Breakaway Connectors) + fablabchemnitz.de.create_links + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + 0 + 1.000 + 0.000 + false + + 10 5.5 2.0 2.0 + 0.000 + + + + + false + 0.000 + + + + + + + + + + false + false + false + false + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + ../000_about_fablabchemnitz.svg + + + + path + + + + + + + + diff --git a/extensions/fablabchemnitz/create_links/create_links.py b/extensions/fablabchemnitz/create_links/create_links.py new file mode 100644 index 00000000..775d677a --- /dev/null +++ b/extensions/fablabchemnitz/create_links/create_links.py @@ -0,0 +1,316 @@ +#!/usr/bin/env python3 +# coding=utf-8 +# +# Copyright (C) 2005,2007 Aaron Spike, aaron@ekips.org +# Copyright (C) 2009 Alvin Penner, penner@vaxxine.com +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +""" +This extension converts a path into a dashed line using 'stroke-dasharray' +It is a modification of the file addelements.py +It is a modification of the file convert2dash.py +Extension to convert paths into dash-array line + +Extension for InkScape 1.X +Author: Mario Voigt / FabLab Chemnitz +Mail: mario.voigt@stadtfabrikanten.org +Date: 09.04.2021 +Last patch: 14.04.2021 +License: GNU GPL v3 +""" + +import copy +import re + +import inkex +from inkex import bezier, CubicSuperPath, Group, PathElement +from inkex.bezier import csplength + + +class LinksCreator(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument("--tab") + pars.add_argument("--path_types", default="closed_paths", help="Apply for closed paths, open paths or both") + pars.add_argument("--creationunit", default="mm", help="Creation Units") + pars.add_argument("--creationtype", default="entered_values", help="Creation") + pars.add_argument("--link_count", type=int, default=1, help="Link count") + pars.add_argument("--link_multiplicator", type=int, default=1, help="If set, we create a set of multiple gaps of same size next to the main gap") + pars.add_argument("--length_link", type=float, default=1.000, help="Link length") + pars.add_argument("--link_offset", type=float, default=0.000, help="Link offset (+/-)") + pars.add_argument("--switch_pattern", type=inkex.Boolean, default=False, help="If enabled, we use gap length as dash length (switches the dasharray pattern") + pars.add_argument("--custom_dasharray_value", default="", help="A list of separated lengths that specify the lengths of alternating dashes and gaps. Input only accepts numbers. It ignores percentages or other characters.") + pars.add_argument("--custom_dashoffset_value", type=float, default=0.000, help="Link offset (+/-)") + pars.add_argument("--length_filter", type=inkex.Boolean, default=False, help="Enable path length filtering") + pars.add_argument("--length_filter_value", type=float, default=0.000, help="Paths with length more than") + pars.add_argument("--length_filter_unit", default="mm", help="Length filter unit") + pars.add_argument("--keep_selected", type=inkex.Boolean, default=False, help="Keep selected elements") + pars.add_argument("--no_convert", type=inkex.Boolean, default=False, help="Do not create segments (cosmetic gaps only)") + pars.add_argument("--breakapart", type=inkex.Boolean, default=False, help="Performs CTRL + SHIFT + K to break the new output path into it's parts") + pars.add_argument("--show_info", type=inkex.Boolean, default=False, help="Print some length and pattern information") + pars.add_argument("--skip_errors", type=inkex.Boolean, default=False, help="Skip errors") + + def breakContours(self, element, breakelements = None): #this does the same as "CTRL + SHIFT + K" + if breakelements == None: + breakelements = [] + if element.tag == inkex.addNS('path','svg'): + parent = element.getparent() + idx = parent.index(element) + idSuffix = 0 + raw = element.path.to_arrays() + subPaths, prev = [], 0 + for i in range(len(raw)): # Breaks compound paths into simple paths + if raw[i][0] == 'M' and i != 0: + subPaths.append(raw[prev:i]) + prev = i + subPaths.append(raw[prev:]) + for subpath in subPaths: + replacedelement = copy.copy(element) + oldId = replacedelement.get('id') + csp = CubicSuperPath(subpath) + if len(subpath) > 1 and csp[0][0] != csp[0][1]: #avoids pointy paths like M "31.4794 57.6024 Z" + replacedelement.set('d', csp) + replacedelement.set('id', oldId + str(idSuffix)) + parent.insert(idx, replacedelement) + idSuffix += 1 + breakelements.append(replacedelement) + parent.remove(element) + for child in element.getchildren(): + self.breakContours(child, breakelements) + return breakelements + + def effect(self): + def createLinks(element): + elementParent = element.getparent() + path = element.path.to_arrays() #to_arrays() is deprecated. How to make more modern? + pathIsClosed = False + if path[-1][0] == 'Z' or \ + (path[-1][0] == 'L' and path[0][1] == path[-1][1]) or \ + (path[-1][0] == 'C' and path[0][1] == [path[-1][1][-2], path[-1][1][-1]]) \ + : #if first is last point the path is also closed. The "Z" command is not required + pathIsClosed = True + + if self.options.path_types == 'open_paths' and pathIsClosed is True: + return #skip this loop iteration + elif self.options.path_types == 'closed_paths' and pathIsClosed is False: + return #skip this loop iteration + elif self.options.path_types == 'both': + pass + + # if keeping is enabled we make of copy of the current element and insert it while modifying the original ones. We could also delete the original and modify a copy... + if self.options.keep_selected is True: + parent = element.getparent() + idx = parent.index(element) + copyelement = copy.copy(element) + parent.insert(idx, copyelement) + + # we measure the length of the path to calculate the required dash configuration + csp = element.path.transform(element.composed_transform()).to_superpath() + slengths, stotal = csplength(csp) #get segment lengths and total length of path in document's internal unit + + if self.options.length_filter is True: + if stotal < self.svg.unittouu(str(self.options.length_filter_value) + self.options.length_filter_unit): + if self.options.show_info is True: self.msg("element " + element.get('id') + " is shorter than minimum allowed length of {:1.3f} {}. Path length is {:1.3f} {}".format(self.options.length_filter_value, self.options.length_filter_unit, stotal, self.options.creationunit)) + return #skip this loop iteration + + if self.options.creationunit == "percent": + length_link = (self.options.length_link / 100.0) * stotal + else: + length_link = self.svg.unittouu(str(self.options.length_link) + self.options.creationunit) + + dashes = [] #central dashes array + + if self.options.creationtype == "entered_values": + dash_length = ((stotal - length_link * self.options.link_count) / self.options.link_count) - 2 * length_link * self.options.link_multiplicator + dashes.append(dash_length) + dashes.append(length_link) + for i in range(0, self.options.link_multiplicator): + dashes.append(length_link) #stroke (=gap) + dashes.append(length_link) #gap + + if self.options.switch_pattern is True: + dashes = dashes[::-1] #reverse the array + + #validate dashes. May not be negative (dash or gap cannot be longer than the path itself). Otherwise Inkscape will freeze forever. Reason: rendering issue + if any(dash <= 0.0 for dash in dashes) == True: + if self.options.show_info is True: self.msg("element " + element.get('id') + ": Error! Dash array may not contain negative numbers: " + ' '.join(format(dash, "1.3f") for dash in dashes) + ". Path skipped. Maybe it's too short. Adjust your link count, multiplicator and length accordingly, or set to unit '%'") + return False if self.options.skip_errors is True else exit(1) + + if self.options.creationunit == "percent": + stroke_dashoffset = self.options.link_offset / 100.0 + else: + stroke_dashoffset = self.svg.unittouu(str(self.options.link_offset) + self.options.creationunit) + + if self.options.switch_pattern is True: + stroke_dashoffset = stroke_dashoffset + ((self.options.link_multiplicator * 2) + 1) * length_link + + if self.options.creationtype == "use_existing": + if self.options.no_convert is True: + if self.options.show_info is True: self.msg("element " + element.get('id') + ": Nothing to do. Please select another creation method or disable cosmetic style output paths.") + return False if self.options.skip_errors is True else exit(1) + stroke_dashoffset = 0 + style = element.style + if 'stroke-dashoffset' in style: + stroke_dashoffset = style['stroke-dashoffset'] + try: + floats = [float(dash) for dash in re.findall(r"[+]?\d*\.\d+|\d+", style['stroke-dasharray'])] #allow only positive values + if len(floats) > 0: + dashes = floats #overwrite previously calculated values with custom input + else: + raise ValueError + except: + if self.options.show_info is True: self.msg("element " + element.get('id') + ": No dash style to continue with.") + return False if self.options.skip_errors is True else exit(1) + + if self.options.creationtype == "custom_dashpattern": + stroke_dashoffset = self.options.custom_dashoffset_value + try: + floats = [float(dash) for dash in re.findall(r"[+]?\d*\.\d+|\d+", self.options.custom_dasharray_value)] #allow only positive values + if len(floats) > 0: + dashes = floats #overwrite previously calculated values with custom input + else: + raise ValueError + except: + if self.options.show_info is True: self.msg("element " + element.get('id') + ": Error in custom dasharray string (might be empty or does not contain any numbers).") + return False if self.options.skip_errors is True else exit(1) + + #assign stroke dasharray from entered values, existing style or custom dashpattern + stroke_dasharray = ' '.join(format(dash, "1.3f") for dash in dashes) + + # check if the element has a style attribute. If not we create a blank one with a black stroke and without fill + style = None + default_fill = 'none' + default_stroke_width = '1px' + default_stroke = '#000000' + if element.attrib.has_key('style'): + style = element.get('style') + if style.endswith(';') is False: + style += ';' + + # if has style attribute and dasharray and/or dashoffset are present we modify it accordingly + declarations = style.split(';') # parse the style content and check what we need to adjust + for i, decl in enumerate(declarations): + parts = decl.split(':', 2) + if len(parts) == 2: + (prop, val) = parts + prop = prop.strip().lower() + #if prop == 'fill': + # declarations[i] = prop + ':{}'.format(default_fill) + #if prop == 'stroke': + # declarations[i] = prop + ':{}'.format(default_stroke) + #if prop == 'stroke-width': + # declarations[i] = prop + ':{}'.format(default_stroke_width) + if prop == 'stroke-dasharray': #comma separated list of one or more float values + declarations[i] = prop + ':{}'.format(stroke_dasharray) + if prop == 'stroke-dashoffset': + declarations[i] = prop + ':{}'.format(stroke_dashoffset) + element.set('style', ';'.join(declarations)) #apply new style to element + + #if has style attribute but the style attribute does not contain fill, stroke, stroke-width, stroke-dasharray or stroke-dashoffset yet + style = element.style + if re.search('fill:(.*?)(;|$)', str(style)) is None: + style += 'fill:{};'.format(default_fill) + if re.search('(;|^)stroke:(.*?)(;|$)', str(style)) is None: #if "stroke" is None, add one. We need to distinguish because there's also attribute "-inkscape-stroke" that's why we check starting with ^ or ; + style += 'stroke:{};'.format(default_stroke) + if not 'stroke-width' in style: + style += 'stroke-width:{};'.format(default_stroke_width) + if not 'stroke-dasharray' in style: + style += 'stroke-dasharray:{};'.format(stroke_dasharray) + if not 'stroke-dashoffset' in style: + style += 'stroke-dashoffset:{};'.format(stroke_dashoffset) + element.set('style', style) + else: + style = 'fill:{};stroke:{};stroke-width:{};stroke-dasharray:{};stroke-dashoffset:{};'.format(default_fill, default_stroke, default_stroke_width, stroke_dasharray, stroke_dashoffset) + element.set('style', style) + + # Print some info about values + if self.options.show_info is True: + self.msg("element " + element.get('id') + ":") + if self.options.creationunit == "percent": + self.msg(" * total path length = {:1.3f} {}".format(stotal, self.svg.unit)) #show length, converted in selected unit + self.msg(" * (calculated) offset: {:1.3f} %".format(stroke_dashoffset)) + if self.options.creationtype == "entered_values": + self.msg(" * (calculated) gap length: {:1.3f} %".format(length_link)) + else: + self.msg(" * total path length = {:1.3f} {} ({:1.3f} {})".format(self.svg.uutounit(stotal, self.options.creationunit), self.options.creationunit, stotal, self.svg.unit)) #show length, converted in selected unit + self.msg(" * (calculated) offset: {:1.3f} {}".format(self.svg.uutounit(stroke_dashoffset, self.options.creationunit), self.options.creationunit)) + if self.options.creationtype == "entered_values": + self.msg(" * (calculated) gap length: {:1.3f} {}".format(length_link, self.options.creationunit)) + if self.options.creationtype == "entered_values": + self.msg(" * total gaps = {}".format(self.options.link_count)) + self.msg(" * (calculated) dash/gap pattern: {} ({})".format(stroke_dasharray, self.svg.unit)) + + # Conversion step (split cosmetic path into real segments) + if self.options.no_convert is False: + style = element.style #get the style again, but this time as style class + + new = [] + for sub in element.path.to_superpath(): + idash = 0 + dash = dashes[0] + length = float(stroke_dashoffset) + while dash < length: + length = length - dash + idash = (idash + 1) % len(dashes) + dash = dashes[idash] + new.append([sub[0][:]]) + i = 1 + while i < len(sub): + dash = dash - length + length = bezier.cspseglength(new[-1][-1], sub[i]) + while dash < length: + new[-1][-1], nxt, sub[i] = bezier.cspbezsplitatlength(new[-1][-1], sub[i], dash/length) + if idash % 2: # create a gap + new.append([nxt[:]]) + else: # splice the curve + new[-1].append(nxt[:]) + length = length - dash + idash = (idash + 1) % len(dashes) + dash = dashes[idash] + if idash % 2: + new.append([sub[i]]) + else: + new[-1].append(sub[i]) + i += 1 + style.pop('stroke-dasharray') + element.pop('sodipodi:type') + csp = CubicSuperPath(new) + element.path = CubicSuperPath(new) + element.style = style + + # break apart the combined path to have multiple elements + if self.options.breakapart is True: + breakOutputelements = None + breakOutputelements = self.breakContours(element, breakOutputelements) + breakApartGroup = elementParent.add(inkex.Group()) + for breakOutputelement in breakOutputelements: + breakApartGroup.append(breakOutputelement) + #self.msg(replacedelement.get('id')) + #self.svg.selection.set(replacedelement.get('id')) #update selection to split paths segments (does not work, so commented out) + + if len(self.svg.selected) > 0: + for element in self.svg.selection.values(): + #at first we need to break down combined elements to single path, otherwise dasharray cannot properly be applied + breakInputelements = None + breakInputelements = self.breakContours(element, breakInputelements) + for breakInputelement in breakInputelements: + createLinks(breakInputelement) + else: + self.msg('Please select some paths first.') + return + +if __name__ == '__main__': + LinksCreator().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/cutcraft/cutcraft/README.md b/extensions/fablabchemnitz/cutcraft/cutcraft/README.md new file mode 100644 index 00000000..a05ed7e9 --- /dev/null +++ b/extensions/fablabchemnitz/cutcraft/cutcraft/README.md @@ -0,0 +1,57 @@ +# cut-craft + + +## Python package + +Note that this package is written for Python 3, however requires Python 2 compatibility for Inkscape integration. + +The `cutcraft` package contains components in the following categories: + +| Folder | Description | +| --------- | ---------------------------------------------------- | +| core | Core components (point, line etc). | +| platforms | Platforms used to construct shapes (circular etc). | +| shapes | Fundamental 3D shapes (cylinder, cone, sphere etc). | +| supports | Vertical supports to hold the shape levels apart. | + + +## Core + +| Module | Description | +| --------- | --------------------------------------------------------------------------- | +| point | A 2D point with `x` and `y` coordinates. | +| rectangle | Two `point`s defining topleft and bottom right for a rectangle. | +| trace | An ordered collection of `point`s. | +| part | A collection of one or more `trace`s. | +| line | A type of `trace` with two `point`s defining the start and end of the line. | +| circle | A type of `trace` with `point`s defining a circle. | +| neopixel | A type of `trace` with the `point`s defining a cutout suitable to fit a variety of [NeoPixels](https://www.adafruit.com/category/168). | + + +## Shapes + +| Module | Description | +| -------- | -------------------------------------- | +| shape | The core 3D functionality for a shape. | +| cone | A cone `shape`. | +| cylinder | A cylinder `shape`. | +| sphere | A 3D spherical `shape`. | + +> Note that the fundamental `shape`s listed above can be used flexibly considering the number of `circle` segments can be specified. For example a `cone` with 4 segments becomes a **pyramid**, and a `cylinder` with 4 segments becomes a **cube**. + + +## Supports + +| Module | Description | +| -------- | --------------------------------------------------- | +| support | The core support structure functionality. | +| pier | A pier like `support` to hold `shape` levels apart. | +| face | A solid face to `support` `shape` levels. | + + +## Python 2 vs 3 Compatibility + +The initial aim was to develop only for Python 3, however [Inkscape](https://inkscape.org) currently uses Python 2 as the default interpreter for extensions. As a result, the following should be noted while reviewing the code: + +1) The calls to `super()` are written in a way that works with both versions of Python. +2) The `math.isclose()` function is not available in Python 2 so a local version has been created in [util.py](util.py). diff --git a/extensions/fablabchemnitz/cutcraft/cutcraft/__init__.py b/extensions/fablabchemnitz/cutcraft/cutcraft/__init__.py new file mode 100644 index 00000000..6a4bdf6f --- /dev/null +++ b/extensions/fablabchemnitz/cutcraft/cutcraft/__init__.py @@ -0,0 +1,17 @@ +# Copyright (C) 2018 Michael Matthews +# +# This file is part of CutCraft. +# +# CutCraft is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# CutCraft is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with CutCraft. If not, see . + diff --git a/extensions/fablabchemnitz/cutcraft/cutcraft/core/__init__.py b/extensions/fablabchemnitz/cutcraft/cutcraft/core/__init__.py new file mode 100644 index 00000000..f33ad79a --- /dev/null +++ b/extensions/fablabchemnitz/cutcraft/cutcraft/core/__init__.py @@ -0,0 +1,27 @@ +# Copyright (C) 2018 Michael Matthews +# +# This file is part of CutCraft. +# +# CutCraft is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# CutCraft is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with CutCraft. If not, see . + +from .point import Point +from .line import Line +from .rectangle import Rectangle +from .trace import Trace +from .circle import Circle +from .part import Part +from .neopixel import NeoPixel +from .fingerjoint import FingerJoint + +__all__ = ["Point", "Line", "Rectangle", "Trace", "Circle", "Part", "NeoPixel", "FingerJoint"] diff --git a/extensions/fablabchemnitz/cutcraft/cutcraft/core/circle.py b/extensions/fablabchemnitz/cutcraft/cutcraft/core/circle.py new file mode 100644 index 00000000..838605a5 --- /dev/null +++ b/extensions/fablabchemnitz/cutcraft/cutcraft/core/circle.py @@ -0,0 +1,131 @@ +# Copyright (C) 2018 Michael Matthews +# +# This file is part of CutCraft. +# +# CutCraft is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# CutCraft is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with CutCraft. If not, see . + +from .point import Point +from .line import Line +from .trace import Trace +from ..util import isclose +from math import pi, sin, cos, asin + +class Circle(Trace): + def __init__(self, radius, segments, cuts, cutdepth=0.0, start=0.0, end=pi*2.0, rotation=0.0, + origin=Point(0.0, 0.0), thickness=0.0, kerf=0.0): + super(Circle, self).__init__() + self.thickness = thickness + self.kerf = kerf + + partial = True if start != 0.0 or end != pi*2.0 else False + + if cuts==0: + c = 0.0 + else: + if self.thickness <= 0.0: + raise ValueError("cutcraft.circle: parameter 'thickness' not set when 'cuts' greater than zero.") + if cutdepth <= 0.0: + raise ValueError("cutcraft.circle: parameter 'cutdepth' not set when 'cuts' greater than zero.") + c = asin(self.thickness/2/radius) + if partial: + angles = [[rotation+start+(end-start)/segments*seg, 'SEG'] for seg in range(segments+1)] + \ + [[rotation+start+(end-start)/(cuts+1)*cut-c, ''] for cut in range(1, cuts+1)] + else: + angles = [[rotation+end/segments*seg, 'SEG'] for seg in range(segments)] + \ + [[rotation+end/cuts*cut-c, ''] for cut in range(cuts)] + angles = sorted(angles) + if angles[0][1] == 'CUT>': + angles = angles[1:] + [angles[0]] + + for i, angle in enumerate(angles): + angle.append(self._cnext(angles, i, 'SEG')) + angle.append(self._cprev(angles, i, 'SEG')) + angle.append(self._cnext(angles, i, 'CUT>') if angle[1]=='' else None) + + for i, angle in enumerate(angles): + if angle[1] == 'SEG': + angle.append([self._pos(angle[0], radius)]) + + for i, angle in enumerate(angles): + if angle[1] != 'SEG': + mult = -1 if angle[1] == '': + incut = False + + if atype != 'SEG' or (atype == 'SEG' and not incut): + for pos in angle[6]: + x = origin.x + pos.x + y = origin.y + pos.y + if len(self.x)==0 or not (isclose(x, self.x[-1]) and isclose(y, self.y[-1])): + self.x.append(x) + self.y.append(y) + + return + + def _cnext(self, angles, i, item): + if i>=len(angles): + i=-1 + for j, angle in enumerate(angles[i+1:]): + if angle[1] == item: + return i+1+j + for j, angle in enumerate(angles): + if angle[1] == item: + return j + return None + + def _cprev(self, angles, i, item): + if i<=0: + i=len(angles) + for j, angle in enumerate(angles[:i][::-1]): + if angle[1] == item: + return i-j-1 + for j, angle in enumerate(angles[::-1]): + if angle[1] == item: + return j + return None + + def _pos(self, angle, radius): + return Point(sin(angle)*radius, cos(angle)*radius) diff --git a/extensions/fablabchemnitz/cutcraft/cutcraft/core/fingerjoint.py b/extensions/fablabchemnitz/cutcraft/cutcraft/core/fingerjoint.py new file mode 100644 index 00000000..ef2ca7bb --- /dev/null +++ b/extensions/fablabchemnitz/cutcraft/cutcraft/core/fingerjoint.py @@ -0,0 +1,40 @@ +# Copyright (C) 2018 Michael Matthews +# +# This file is part of CutCraft. +# +# CutCraft is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# CutCraft is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with CutCraft. If not, see . + +from math import floor + +class FingerJoint(object): + def __init__(self, length, fingerwidth, style, thickness=0.0): + super(FingerJoint, self).__init__() + + self.thickness = thickness + + if style in ('depth','height'): + self.fingers = [0.0] + \ + [pos + fingerwidth*2.0 for pos in self._fingers(length-fingerwidth*4.0, fingerwidth)] + \ + [length] + elif style=='width': + self.fingers = [pos + thickness for pos in self._fingers(length-thickness*2.0, fingerwidth)] + else: + raise ValueError("cutcraft.core.fingerjoin: invalid value of '{}' for parameter 'style'.".format(style)) + + return + + def _fingers(self, length, fingerwidth): + count = int(floor(length / fingerwidth)) + count = count-1 if count%2==0 else count + return [length/count*c for c in range(count+1)] diff --git a/extensions/fablabchemnitz/cutcraft/cutcraft/core/line.py b/extensions/fablabchemnitz/cutcraft/cutcraft/core/line.py new file mode 100644 index 00000000..eab7516c --- /dev/null +++ b/extensions/fablabchemnitz/cutcraft/cutcraft/core/line.py @@ -0,0 +1,82 @@ +# Copyright (C) 2018 Michael Matthews +# +# This file is part of CutCraft. +# +# CutCraft is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# CutCraft is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with CutCraft. If not, see . + +from .point import Point +from math import sqrt + +def isclose(a, b, rel_tol=1e-09, abs_tol=0.0): + # Required as Inkscape does not include math.isclose(). + return abs(a-b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol) + +class Line(object): + """ Line class defined by start and end Points. """ + def __init__(self, point1, point2): + self.pts = (point1, point2) + self.x = [point1.x, point2.x] + self.y = [point1.y, point2.y] + return + + def _line(self): + # Convert line segment into a line equation (infinite length). + p1 = self.pts[0] + p2 = self.pts[1] + A = (p1.y - p2.y) + B = (p2.x - p1.x) + C = (p1.x*p2.y - p2.x*p1.y) + return A, B, -C + + def intersection(self, other): + # Find the intersection of the lines (infinite length - not segments) + L1 = self._line() + L2 = other._line() + D = L1[0] * L2[1] - L1[1] * L2[0] + Dx = L1[2] * L2[1] - L1[1] * L2[2] + Dy = L1[0] * L2[2] - L1[2] * L2[0] + if D != 0: + x = Dx / D + y = Dy / D + return Point(x, y) + else: + return None + + def normal(self): + # Return the unit normal + dx = self.x[1] - self.x[0] + dy = self.y[1] - self.y[0] + + d = sqrt(dx*dx + dy*dy) + + return dx/d, -dy/d + + def addkerf(self, kerf): + nx, ny = self.normal() + offset = Point(ny*kerf, nx*kerf) + self.pts = (self.pts[0] + offset, self.pts[1] + offset) + self.x = [self.pts[0].x, self.pts[1].x] + self.y = [self.pts[0].y, self.pts[1].y] + + def __eq__(self, other): + return (self.pts == other.pts) + + def __ne__(self, other): + return (self.pts != other.pts) + + def __repr__(self): + return "Line(" + repr(self.pts[0]) + ", " + repr(self.pts[1]) + ")" + + def __str__(self): + return "(" + str(self.pts[0]) + ", " + str(self.pts[1]) + ")" diff --git a/extensions/fablabchemnitz/cutcraft/cutcraft/core/neopixel.py b/extensions/fablabchemnitz/cutcraft/cutcraft/core/neopixel.py new file mode 100644 index 00000000..8ab4681a --- /dev/null +++ b/extensions/fablabchemnitz/cutcraft/cutcraft/core/neopixel.py @@ -0,0 +1,65 @@ +# Copyright (C) 2018 Michael Matthews +# +# This file is part of CutCraft. +# +# CutCraft is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# CutCraft is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with CutCraft. If not, see . + +from .point import Point +from .trace import Trace +from .part import Part +from math import pi, sin, cos, sqrt + +class NeoPixel(Part): + rings = [[1, 0.0], [6, 16.0/2.0], [12, 30.0/2.0]] + size = 5.5 + + """ Line class defined by start and end Points. """ + def __init__(self, style='rings', origin=Point(0.0, 0.0), scale=1.0, rotate=0.0): + super(NeoPixel, self).__init__() + self.scale = scale + + if style=='rings': + for ring in self.rings: + pixels = ring[0] + radius = ring[1] * self.scale + for pixel in range(pixels): + a = rotate + pi*2 * pixel / pixels + seg = self._pixel(origin + Point(sin(a) * radius, cos(a) * radius), + pi/4 + a) + self += seg + elif style=='strip': + xo = origin.x + yo = origin.y + xsize = 25.4*2.0*self.scale + size = self.size*self.scale + seg = Trace() + \ + Point(xo-xsize/2.0, yo+size/2.0) + \ + Point(xo-xsize/2.0, yo-size/2.0) + \ + Point(xo+xsize/2.0, yo-size/2.0) + \ + Point(xo+xsize/2.0, yo+size/2.0) + seg.close() + self += seg + return + + def _pixel(self, position, rotation): + seg = Trace() + xo = position.x + yo = position.y + size = sqrt(2.0*(self.size*self.scale)**2) + for corner in range(4): + # Points added in counterclockwise direction as this is an inner cut. + a = rotation-2.0*pi*corner/4.0 + seg += Point(xo + sin(a) * size/2.0, yo + cos(a) * size/2.0) + seg.close() + return seg diff --git a/extensions/fablabchemnitz/cutcraft/cutcraft/core/part.py b/extensions/fablabchemnitz/cutcraft/cutcraft/core/part.py new file mode 100644 index 00000000..a8d1813a --- /dev/null +++ b/extensions/fablabchemnitz/cutcraft/cutcraft/core/part.py @@ -0,0 +1,91 @@ +# Copyright (C) 2018 Michael Matthews +# +# This file is part of CutCraft. +# +# CutCraft is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# CutCraft is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with CutCraft. If not, see . + +from copy import deepcopy +from .point import Point +from .rectangle import Rectangle +from .trace import Trace + +class Part(object): + """ List of traces that make up a part. """ + def __init__(self): + self.traces = [] + return + + def close(self): + """ Close each traces back to their start. """ + for trace in self.traces: + trace.close() + return + + def applykerf(self, kerf): + """ Apply an offset to allow for the kerf when cutting. """ + for trace in self.traces: + trace.applykerf(kerf) + return + + def svg(self): + # Generate SVG string for this part. + return " ".join([trace.svg() for trace in self.traces]) + + def bbox(self): + bboxes = [trace.bbox() for trace in self.traces] + x = [p1.x for p1, p2 in bboxes] + [p2.x for p1, p2 in bboxes] + y = [p1.y for p1, p2 in bboxes] + [p2.y for p1, p2 in bboxes] + return Rectangle(Point(min(x), min(y)), Point(max(x), max(y))) + + def area(self): + bbox = self.bbox() + return bbox.area() + + def size(self): + bbox = self.bbox() + return bbox.size() + + def __add__(self, other): + p = Part() + if isinstance(other, Part): + p.traces = self.traces + deepcopy(other.traces) + elif isinstance(other, Trace): + p.traces = deepcopy(self.traces) + p.traces.append(other) + elif isinstance(other, Point): + p.traces = self.traces + for trace in p.traces: + trace.offset(other) + else: + raise RuntimeError("Can only add a Part, Trace or Point to an existing Part.") + return p + + def __iadd__(self, other): + if isinstance(other, Part): + self.traces.extend(other.traces) + elif isinstance(other, Trace): + self.traces.append(deepcopy(other)) + elif isinstance(other, Point): + for trace in self.traces: + trace.offset(other) + else: + raise RuntimeError("Can only add a Part, Trace or Point to an existing Part.") + return self + + def __repr__(self): + return "Part" + str(self) + + def __str__(self): + l = len(self.traces) + return "(" + str(l) + " trace" + ("s" if l>1 else "") + ")" diff --git a/extensions/fablabchemnitz/cutcraft/cutcraft/core/point.py b/extensions/fablabchemnitz/cutcraft/cutcraft/core/point.py new file mode 100644 index 00000000..937d7c20 --- /dev/null +++ b/extensions/fablabchemnitz/cutcraft/cutcraft/core/point.py @@ -0,0 +1,64 @@ +# Copyright (C) 2018 Michael Matthews +# +# This file is part of CutCraft. +# +# CutCraft is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# CutCraft is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with CutCraft. If not, see . + +from math import sqrt + +class Point(object): + """ Point (x,y) class suppporting addition for offsets. """ + def __init__(self, x, y): + self.x = x + self.y = y + + def distance(self, other): + """ Distance between two points. """ + x = self.x - other.x + y = self.y - other.y + return sqrt(x*x+y*y) + + def tup(self): + return (self.x, self.y) + + def __eq__(self, other): + return (self.x == other.x and self.y == other.y) + + def __ne__(self, other): + return (self.x != other.x or self.y != other.y) + + def __add__(self, other): + return Point(self.x + other.x, self.y + other.y) + + def __iadd__(self, other): + self.x += other.x + self.y += other.y + return self + + def __sub__(self, other): + return Point(self.x - other.x, self.y - other.y) + + def __isub__(self, other): + self.x -= other.x + self.y -= other.y + return self + + def __neg__(self): + return Point(-self.x, -self.y) + + def __repr__(self): + return "Point(" + str(self.x) + ", " + str(self.y) + ")" + + def __str__(self): + return "(" + str(self.x) + ", " + str(self.y) + ")" diff --git a/extensions/fablabchemnitz/cutcraft/cutcraft/core/rectangle.py b/extensions/fablabchemnitz/cutcraft/cutcraft/core/rectangle.py new file mode 100644 index 00000000..133578df --- /dev/null +++ b/extensions/fablabchemnitz/cutcraft/cutcraft/core/rectangle.py @@ -0,0 +1,60 @@ +# Copyright (C) 2018 Michael Matthews +# +# This file is part of CutCraft. +# +# CutCraft is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# CutCraft is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with CutCraft. If not, see . + +from math import ceil, floor +from .point import Point + +class Rectangle(object): + """ Rectangle class defined by top-left and bottom-right Points. """ + def __init__(self, point1, point2): + # Correct the input points in case they are not topleft, bottomright as expected. + self.topleft = Point(min(point1.x, point2.x), min(point1.y, point2.y)) + self.bottomright = Point(max(point1.x, point2.x), max(point1.y, point2.y)) + return + + def size(self): + # Calculate the size as: width, height. + return self.bottomright.x-self.topleft.x, self.bottomright.y-self.topleft.y + + def area(self): + width, height = self.size() + return width*height + + def expanded(self): + # Expand the current Rectangle out to integer boundary. + return Rectangle(Point(floor(self.topleft.x), floor(self.topleft.y)), + Point(ceil(self.bottomright.x), ceil(self.bottomright.y))) + + def svg(self): + # Generate SVG string for this rectangle. + ptx = [self.topleft.x, self.bottomright.x, self.bottomright.x, self.topleft.x] + pty = [self.topleft.y, self.topleft.y, self.bottomright.y, self.bottomright.y] + return "M {} {} ".format(ptx[0], pty[0]) + \ + " ".join(["L {} {}".format(x, y) for x, y in zip(ptx[1:], pty[1:])]) + \ + " L {} {}".format(ptx[0], pty[0]) + + def __eq__(self, other): + return (self.topleft == other.topleft and self.bottomright == other.bottomright ) + + def __ne__(self, other): + return (self.topleft != other.topleft or self.bottomright != other.bottomright) + + def __repr__(self): + return "Rectangle(" + repr(self.topleft) + ", " + repr(self.bottomright) + ")" + + def __str__(self): + return "(" + str(self.topleft) + ", " + str(self.bottomright) + ")" diff --git a/extensions/fablabchemnitz/cutcraft/cutcraft/core/trace.py b/extensions/fablabchemnitz/cutcraft/cutcraft/core/trace.py new file mode 100644 index 00000000..16dfdb3f --- /dev/null +++ b/extensions/fablabchemnitz/cutcraft/cutcraft/core/trace.py @@ -0,0 +1,149 @@ +# Copyright (C) 2018 Michael Matthews +# +# This file is part of CutCraft. +# +# CutCraft is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# CutCraft is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with CutCraft. If not, see . + +from .point import Point +from .line import Line +from ..util import isclose, iscloselist + +class Trace(object): + """ List of coordinates that make a boundary. """ + def __init__(self, x=None, y=None): + self.x = [] if x is None else x + self.y = [] if y is None else y + self.closed = False + return + + def close(self): + """ Close the trace back to the start. """ + if not self.closed: + if isclose(self.x[0], self.x[-1]) and isclose(self.y[0], self.y[-1]): + # Start and end should be the same. + self.x[-1] = self.x[0] + self.y[-1] = self.y[0] + else: + # Add new end point to close the loop. + self.x.append(self.x[0]) + self.y.append(self.y[0]) + self.closed = True + return + + def applykerf(self, kerf): + """ Apply an offset to allow for the kerf when cutting. """ + self.close() + + # Convert the points to lines. + lines = [Line(Point(x1, y1), Point(x2, y2)) for x1, y1, x2, y2 in + zip(self.x[:-1], self.y[:-1], self.x[1:], self.y[1:])] + + # Add the kerf to the lines. + for line in lines: + line.addkerf(kerf) + + # Extract the line intersections as the new points. + pts = [line1.intersection(line2) for line1, line2 in zip(lines, lines[-1:] + lines[:-1])] + self.clear() + self.x += [pt.x for pt in pts] + self.y += [pt.y for pt in pts] + self.x += self.x[:1] + self.y += self.y[:1] + return + + def offset(self, pt): + """ Move a trace by an x/y offset. """ + self.x = [x + pt.x for x in self.x] + self.y = [y + pt.y for y in self.y] + + def clear(self): + self.x = [] + self.y = [] + + def svg(self): + # Generate SVG string for this trace. + if len(self.x)<2: + return "" + return "M {} {} ".format(self.x[0], self.y[0]) + \ + " ".join(["L {} {}".format(x, y) for x, y in zip(self.x[1:], self.y[1:])]) + + def bbox(self): + return Point(min(self.x), min(self.y)), Point(max(self.x), max(self.y)) + + def __len__(self): + return len(self.x) + + def __eq__(self, other): + return (iscloselist(self.x,other.x) and iscloselist(self.y, other.y)) + + def __ne__(self, other): + return (not iscloselist(self.x, other.x) or not iscloselist(self.y, other.y)) + + def __add__(self, other): + new = Trace() + if isinstance(other, Point): + new.x = self.x + [other.x] + new.y = self.y + [other.y] + elif isinstance(other, Trace): + new.x = self.x + other.x + new.y = self.y + other.y + else: + raise RuntimeError("Can only add a Trace or Point to an existing Trace.") + return new + + def __iadd__(self, other): + if isinstance(other, Point): + self.x.append(other.x) + self.y.append(other.y) + elif isinstance(other, Trace): + self.x += other.x + self.y += other.y + else: + raise RuntimeError("Can only add a Trace or Point to an existing Trace.") + return self + + def __repr__(self): + return "Trace(" + str(self.x) + ", " + str(self.y) + ")" + + def __str__(self): + return "(" + str(self.x) + ", " + str(self.y) + ")" + + def __getitem__(self, key): + """ Used to override the slice functionality (eg: reversing). """ + new = Trace() + new.x = self.x[key] + new.y = self.y[key] + return new + + def __setitem__(self, key, value): + """ Used to override the slice functionality. """ + if isinstance(value, Point): + self.x[key] = value.x + self.y[key] = value.y + else: + raise RuntimeError("Can only update a single item in an existing Trace.") + return self + + def __delitem__(self, key): + """ Used to override the slice functionality (eg: reversing). """ + del self.x[key] + del self.y[key] + return self + + def __reversed__(self): + """ Used to override the slice functionality (eg: reversing). """ + new = Trace() + new.x = list(reversed(self.x)) + new.y = list(reversed(self.y)) + return new diff --git a/extensions/fablabchemnitz/cutcraft/cutcraft/platforms/__init__.py b/extensions/fablabchemnitz/cutcraft/cutcraft/platforms/__init__.py new file mode 100644 index 00000000..b1e48b63 --- /dev/null +++ b/extensions/fablabchemnitz/cutcraft/cutcraft/platforms/__init__.py @@ -0,0 +1,22 @@ +# Copyright (C) 2018 Michael Matthews +# +# This file is part of CutCraft. +# +# CutCraft is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# CutCraft is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with CutCraft. If not, see . + +from .platform import Platform +from .circular import Circular +from .rollerframe import RollerFrame + +__all__ = ["Platform", "Circular", "RollerFrame"] diff --git a/extensions/fablabchemnitz/cutcraft/cutcraft/platforms/circular.py b/extensions/fablabchemnitz/cutcraft/cutcraft/platforms/circular.py new file mode 100644 index 00000000..c1475b5e --- /dev/null +++ b/extensions/fablabchemnitz/cutcraft/cutcraft/platforms/circular.py @@ -0,0 +1,39 @@ +# Copyright (C) 2018 Michael Matthews +# +# This file is part of CutCraft. +# +# CutCraft is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# CutCraft is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with CutCraft. If not, see . + +from ..core.point import Point +from ..core.part import Part +from ..core.circle import Circle +from .platform import Platform +from math import pi + +class Circular(Platform): + """ Circular Platform. """ + def __init__(self, radius, inradius, segments, cuts, cutdepth, start=0.0, end=pi*2, rotation=0.0, + origin=Point(0.0, 0.0), thickness=0.0): + super(Circular, self).__init__(thickness) + self.radius = radius + self.inradius = inradius + self.segments = segments + outer = Circle(self.radius, segments, cuts, cutdepth=cutdepth, start=start, end=end, + rotation=rotation, origin=origin, thickness=thickness) + outer.close() + inner = Circle(self.inradius, segments, 0, start=start, end=end, + rotation=rotation, origin=origin, thickness=thickness) + inner.close() + self.traces.append(outer) + self.traces.append(reversed(inner)) diff --git a/extensions/fablabchemnitz/cutcraft/cutcraft/platforms/platform.py b/extensions/fablabchemnitz/cutcraft/cutcraft/platforms/platform.py new file mode 100644 index 00000000..711997f1 --- /dev/null +++ b/extensions/fablabchemnitz/cutcraft/cutcraft/platforms/platform.py @@ -0,0 +1,24 @@ +# Copyright (C) 2018 Michael Matthews +# +# This file is part of CutCraft. +# +# CutCraft is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# CutCraft is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with CutCraft. If not, see . + +from ..core.part import Part + +class Platform(Part): + def __init__(self, thickness): + super(Platform, self).__init__() + self.thickness = thickness + return diff --git a/extensions/fablabchemnitz/cutcraft/cutcraft/platforms/rollerframe.py b/extensions/fablabchemnitz/cutcraft/cutcraft/platforms/rollerframe.py new file mode 100644 index 00000000..970c93a4 --- /dev/null +++ b/extensions/fablabchemnitz/cutcraft/cutcraft/platforms/rollerframe.py @@ -0,0 +1,378 @@ +# Copyright (C) 2018 Michael Matthews +# +# This file is part of CutCraft. +# +# CutCraft is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# CutCraft is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with CutCraft. If not, see . + +from ..core.point import Point +from ..core.part import Part +from ..core.trace import Trace +from ..core.circle import Circle +from ..core.fingerjoint import FingerJoint +from ..core.neopixel import NeoPixel +from .platform import Platform +from ..util import intersection +from math import pi, sqrt, asin, atan + +#import inkex + +class RollerFrame(Platform): + """ RollerBot Platform. """ + def __init__(self, supwidth, wheelradius, upperradius, lowerradius, + facesize, barsize, primarygapwidth, secondarygapwidth, + scale, part_id, thickness=0.0): + super(RollerFrame, self).__init__(thickness) + self.supwidth = supwidth + self.barsize = barsize + + cutdepth = supwidth / 3.0 + barradius = sqrt(2.0*(barsize/2.0)**2) + + facewidth = primarygapwidth*2.0 + thickness*3.0 + faceheight = facesize + thickness + fjoint = FingerJoint(faceheight, thickness*2.0, 'height', thickness=thickness) # Face + bjoint = FingerJoint(faceheight, thickness*2.0, 'depth', thickness=thickness) # Base + wjoint = FingerJoint(facewidth, thickness*2.0, 'width', thickness=thickness) # Length + + if part_id<5: + # The circular segments for the main body structure. + + # Outer section. + x = barsize/2.0 + y = sqrt(lowerradius**2 - x**2) + a = atan(x/y) + outer = Circle(upperradius, 72, 5, cutdepth=cutdepth, start=0.0, end=pi, thickness=thickness) + \ + Point(0.0, -upperradius + cutdepth) + \ + Point(-thickness, -upperradius + cutdepth) + \ + Point(-thickness, -upperradius) + \ + Point(-barsize/2.0, -upperradius) + \ + Circle(lowerradius, 72, 4, cutdepth=cutdepth, start=pi+a, end=pi*2-a, thickness=thickness) + \ + Point(-barsize/2.0, upperradius) + \ + Point(-thickness, upperradius) + \ + Point(-thickness, upperradius - cutdepth) + \ + Point(0.0, upperradius - cutdepth) + outer.close() + self.traces.append(outer) + + if part_id in (0,4): + # Central Motor Position. + inner = Trace() + \ + Point(-barsize/2.0, -barsize/2.0) + \ + Point(-barsize/2.0, barsize/2.0) + \ + Point(-barsize/6.0, barsize/2.0) + \ + Point(-barsize/6.0, barsize/2.0-thickness/2.0) + \ + Point(barsize/6.0, barsize/2.0-thickness/2.0) + \ + Point(barsize/6.0, barsize/2.0) + \ + Point(barsize/2.0, barsize/2.0) + \ + Point(barsize/2.0, -barsize/2.0) + \ + Point(barsize/6.0, -barsize/2.0) + \ + Point(barsize/6.0, -barsize/2.0+thickness/2.0) + \ + Point(-barsize/6.0, -barsize/2.0+thickness/2.0) + \ + Point(-barsize/6.0, -barsize/2.0) + inner.close() + self.traces.append(reversed(inner)) + + # Outer parts are complete, inner parts have cutouts. + if part_id in (1,2,3): + # Central Motor Position and Bar. + inner = Trace() + \ + Point(-barsize/2.0*1.3, -barsize/2.0) + \ + Point(-barsize/2.0*1.3, -barsize/2.0*0.55) + \ + Point(-barsize/2.0, -barsize/2.0*0.55) + \ + Point(-barsize/2.0, barsize/2.0*0.55) + \ + Point(-barsize/2.0*1.3, barsize/2.0*0.55) + \ + Point(-barsize/2.0*1.3, barsize/2.0) + \ + Point(barsize/2.0, barsize/2.0) + \ + Point(barsize/2.0, barsize/10.0) + \ + Point(barsize/2.0*1.2, barsize/20.0) + \ + Point(barsize/2.0*1.2, -barsize/20.0) + \ + Point(barsize/2.0, -barsize/10.0) + \ + Point(barsize/2.0, -barsize/2.0) + inner.close() + self.traces.append(reversed(inner)) + + # Upper segment cut-outs. + x = supwidth/2.0 + y = sqrt((upperradius-supwidth)**2 - x**2) + a_outer = atan(x/y) + y = sqrt((barradius+supwidth)**2 - x**2) + a_inner = atan(x/y) + + inner = self._segment(upperradius-supwidth, barradius+supwidth, + 0, 1, cutdepth, 0.0, a_outer, a_inner) + self.traces.append(reversed(inner)) + + fa = (pi/2.0 - self._faceangle(facesize, upperradius)) / 2.0 + (fx, fy) = intersection(upperradius, angle=fa) + if 0: + inner = Trace() + \ + Point(fx, -fy) + \ + Point(fy, -fy) + \ + Point(fy, -fx) + inner.close() + self.traces.append(reversed(inner)) + + oy = fy-thickness*2.0 + (ox, oa) = intersection(upperradius, y=oy) + if 0: + inner = Trace() + \ + Point(ox, -oy) + \ + Point(oy, -oy) + \ + Point(oy, -ox) + inner.close() + self.traces.append(reversed(inner)) + + iy = oy + (ix, ia) = intersection(upperradius-supwidth, y=iy) + + if part_id==2: + inner = Circle(upperradius-supwidth, 18, 0, cutdepth=cutdepth, + start=pi/3+a_outer, end=pi-a_outer, + thickness=self.thickness) + \ + reversed(Circle(barradius+supwidth, 18, 0, cutdepth=cutdepth, + start=pi/3+a_inner, end=pi-a_inner, + thickness=self.thickness)) + inner.close() + self.traces.append(reversed(inner)) + + # Temporary cut to remove where the face will be installed. + oy = fy-thickness + (ox, oa) = intersection(upperradius, y=oy) + inner = Trace() + \ + Point(ox, -ox) + \ + Point(oy, -ox) + \ + Point(oy, -oy) + \ + Point(ox, -oy) + inner.close() + self.traces.append(reversed(inner)) + + else: + inner = Circle(upperradius-supwidth, 18, 0, cutdepth=cutdepth, + start=pi/3*1+a_outer, end=pi/2+ia, + thickness=self.thickness) + \ + reversed(Circle(barradius+supwidth, 18, 0, cutdepth=cutdepth, + start=pi/3*1+a_inner, end=pi/3*2-a_inner, + thickness=self.thickness)) + inner.close() + self.traces.append(reversed(inner)) + + ia = pi/2 - ia + (ix, iy) = intersection(upperradius-supwidth, angle=ia) + + inner = Circle(upperradius-supwidth, 18, 0, cutdepth=cutdepth, + start=pi/2+ia, end=pi/3*3-a_outer, + thickness=self.thickness) + \ + reversed(Circle(barradius+supwidth, 18, 0, cutdepth=cutdepth, + start=pi/3*2+a_inner, end=pi/3*3-a_inner, + thickness=self.thickness)) + \ + Point(ix, -ix) + inner.close() + self.traces.append(reversed(inner)) + + # Face and base cutout slots. + cy = fy-thickness + for (x1, x2) in zip(fjoint.fingers[1::2],fjoint.fingers[2::2]): + inner = Trace() + \ + Point(cy+x1, -cy) + \ + Point(cy+x2, -cy) + \ + Point(cy+x2, -cy-thickness) + \ + Point(cy+x1, -cy-thickness) + inner.close() + self.traces.append(reversed(inner)) + for (y1, y2) in zip(bjoint.fingers[1::2],bjoint.fingers[2::2]): + inner = Trace() + \ + Point(cy, -cy-y2) + \ + Point(cy, -cy-y1) + \ + Point(cy+thickness, -cy-y1) + \ + Point(cy+thickness, -cy-y2) + inner.close() + self.traces.append(reversed(inner)) + + if 0: + if part_id==2: + for seg in range(2): + segnext = seg*2+1 + inner = self._segment(upperradius-supwidth, barradius+supwidth, + seg, segnext, cutdepth, 0.0, a_outer, a_inner) + self.traces.append(reversed(inner)) + else: + for seg in range(3): + segnext = seg+1 + inner = self._segment(upperradius-supwidth, barradius+supwidth, + seg, segnext, cutdepth, 0.0, a_outer, a_inner) + self.traces.append(reversed(inner)) + + # Lower segment cut-outs. + x = supwidth/2.0 + y = sqrt((lowerradius-supwidth)**2 - x**2) + a_outer = atan(x/y) + y = sqrt((barradius+supwidth)**2 - x**2) + a_inner = atan(x/y) + + for seg in range(3): + segnext = seg+1 + inner = self._segment(lowerradius-supwidth, barradius+supwidth, + seg, segnext, cutdepth, pi, a_outer, a_inner) + self.traces.append(reversed(inner)) + + if part_id in (1,2,3): + r_mid = barradius+supwidth + ((upperradius-supwidth) - (barradius+supwidth))/2.0 + self._slot(barsize/2.0 + supwidth/2.0, cutdepth*1.5, cutdepth) + self._slot(barsize/2.0 + supwidth/2.0, -cutdepth*1.5, cutdepth) + self._slot(barsize/2.0 + supwidth/2.0, r_mid+cutdepth*1.5, cutdepth) + self._slot(barsize/2.0 + supwidth/2.0, r_mid-cutdepth*1.5, cutdepth) + + elif part_id in (5,6): + # The board supports. + x = primarygapwidth + y = ((upperradius-supwidth) + (barradius+supwidth))/2.0 + supwidth*2.0 + t = Trace() + \ + Point(0.0, 0.0) + \ + Point(0.0, supwidth-cutdepth*2.0) + \ + Point(-cutdepth, supwidth-cutdepth*2.0) + \ + Point(-cutdepth, supwidth-cutdepth*1.0) + \ + Point(0.0, supwidth-cutdepth*1.0) + \ + Point(0.0, supwidth*2.0-cutdepth*2.0) + \ + Point(-cutdepth, supwidth*2.0-cutdepth*2.0) + \ + Point(-cutdepth, supwidth*2.0-cutdepth*1.0) + \ + Point(0.0, supwidth*2.0-cutdepth*1.0) + \ + Point(0.0, y-supwidth*2.0+cutdepth*1.0) + \ + Point(-cutdepth, y-supwidth*2.0+cutdepth*1.0) + \ + Point(-cutdepth, y-supwidth*2.0+cutdepth*2.0) + \ + Point(0.0, y-supwidth*2.0+cutdepth*2.0) + \ + Point(0.0, y-supwidth+cutdepth*1.0) + \ + Point(-cutdepth, y-supwidth+cutdepth*1.0) + \ + Point(-cutdepth, y-supwidth+cutdepth*2.0) + \ + Point(0.0, y-supwidth+cutdepth*2.0) + \ + Point(0.0, y) + \ + Point(x, y) + \ + Point(x, y-supwidth-cutdepth*1.0) + \ + Point(x+cutdepth, y-supwidth-cutdepth*1.0) + \ + Point(x+cutdepth, y-supwidth-cutdepth*2.0) + \ + Point(x, y-supwidth-cutdepth*2.0) + \ + Point(x, supwidth-cutdepth*1.0) + \ + Point(x+cutdepth, supwidth-cutdepth*1.0) + \ + Point(x+cutdepth, supwidth-cutdepth*2.0) + \ + Point(x, supwidth-cutdepth*2.0) + \ + Point(x, 0.0) + t.close() + self.traces.append(t) + + elif part_id==7: + # The face components. + t = Trace(x=[thickness], y=[thickness]) + for i, pos in enumerate(fjoint.fingers[1:-1]): + if i%2==0: + t += Point(pos, thickness) + t += Point(pos, 0.0) + else: + t += Point(pos, 0.0) + t += Point(pos, thickness) + t += Point(faceheight, thickness) + t += Point(faceheight, facewidth-thickness) + for i, pos in enumerate(reversed(fjoint.fingers[1:-1])): + if i%2==0: + t += Point(pos, facewidth-thickness) + t += Point(pos, facewidth) + else: + t += Point(pos, facewidth) + t += Point(pos, facewidth-thickness) + t += Point(thickness, facewidth-thickness) + for i, pos in enumerate(reversed(wjoint.fingers[1:-1])): + if i%2==0: + t += Point(thickness, pos) + t += Point(0.0, pos) + else: + t += Point(0.0, pos) + t += Point(thickness, pos) + t.close() + self.traces.append(t) + + elif part_id==8: + t = Trace(x=[thickness], y=[0.0]) + t += Point(facewidth-thickness, 0.0) + for i, pos in enumerate(bjoint.fingers[1:-1]): + if i%2==0: + t += Point(facewidth-thickness, pos) + t += Point(facewidth, pos) + else: + t += Point(facewidth, pos) + t += Point(facewidth-thickness, pos) + t += Point(facewidth-thickness, faceheight) + for i, pos in enumerate(reversed(wjoint.fingers[1:-1])): + if i%2==0: + t += Point(pos, faceheight) + t += Point(pos, faceheight-thickness) + else: + t += Point(pos, faceheight-thickness) + t += Point(pos, faceheight) + t += Point(thickness, faceheight) + for i, pos in enumerate(reversed(bjoint.fingers[1:-1])): + if i%2==0: + t += Point(thickness, pos) + t += Point(0.0, pos) + else: + t += Point(0.0, pos) + t += Point(thickness, pos) + t.close() + self.traces.append(t) + + for eye in range(2): + np = NeoPixel(style='rings', origin=Point(facewidth/4.0*(1+eye*2), faceheight/2.5), scale=scale, rotate=pi/2) + self.traces.extend(np.traces) + np = NeoPixel(style='strip', origin=Point(facewidth/2.0, faceheight*0.80), scale=scale) + self.traces.extend(np.traces) + + # Camera + csize = 8.5*scale + t = Trace() + \ + Point(facewidth/2.0 - csize/2.0, faceheight/2.5 - csize/2.0) + \ + Point(facewidth/2.0 + csize/2.0, faceheight/2.5 - csize/2.0) + \ + Point(facewidth/2.0 + csize/2.0, faceheight/2.5 + csize/2.0) + \ + Point(facewidth/2.0 - csize/2.0, faceheight/2.5 + csize/2.0) + t.close() + self.traces.append(t) + + def _faceangle(self, size, radius): + # Returns total angle required for a face. + o = sqrt(2.0*(size**2))*0.5 + h = radius + return 2.0*asin(o/h) + + def _segment(self, r_outer, r_inner, seg, segnext, cutdepth, a_offset, a_outer, a_inner): + # Create an inner segment cutout. + t = Circle(r_outer, 18, 0, cutdepth=cutdepth, + start=a_offset+pi/3*seg+a_outer, end=a_offset+pi/3*segnext-a_outer, + thickness=self.thickness) + \ + reversed(Circle(r_inner, 18, 0, cutdepth=cutdepth, + start=a_offset+pi/3*seg+a_inner, end=a_offset+pi/3*segnext-a_inner, + thickness=self.thickness)) + if a_offset == 0.0 and seg == 0: + r_mid = r_inner + (r_outer - r_inner)/2.0 + t += Trace() + \ + Point(self.supwidth / 2.0, r_mid - self.supwidth) + \ + Point(self.barsize/2.0 + self.supwidth, r_mid - self.supwidth) + \ + Point(self.barsize/2.0 + self.supwidth, r_mid + self.supwidth) + \ + Point(self.supwidth / 2.0, r_mid + self.supwidth) + t.close() + return t + + def _slot(self, x, y, cutdepth): + slot = Trace() + \ + Point(x-self.thickness/2.0, y+cutdepth/2.0) + \ + Point(x+self.thickness/2.0, y+cutdepth/2.0) + \ + Point(x+self.thickness/2.0, y-cutdepth/2.0) + \ + Point(x-self.thickness/2.0, y-cutdepth/2.0) + slot.close() + self.traces.append(reversed(slot)) diff --git a/extensions/fablabchemnitz/cutcraft/cutcraft/shapes/__init__.py b/extensions/fablabchemnitz/cutcraft/cutcraft/shapes/__init__.py new file mode 100644 index 00000000..bd494361 --- /dev/null +++ b/extensions/fablabchemnitz/cutcraft/cutcraft/shapes/__init__.py @@ -0,0 +1,25 @@ +# Copyright (C) 2018 Michael Matthews +# +# This file is part of CutCraft. +# +# CutCraft is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# CutCraft is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with CutCraft. If not, see . + +from .shape import Shape +from .box import Box +from .cone import Cone +from .cylinder import Cylinder +from .sphere import Sphere +from .rollerbot import RollerBot + +__all__ = ["Shape", "Box", "Cone", "Cylinder", "Sphere", "RollerBot"] diff --git a/extensions/fablabchemnitz/cutcraft/cutcraft/shapes/box.py b/extensions/fablabchemnitz/cutcraft/cutcraft/shapes/box.py new file mode 100644 index 00000000..346d79c2 --- /dev/null +++ b/extensions/fablabchemnitz/cutcraft/cutcraft/shapes/box.py @@ -0,0 +1,161 @@ +# Copyright (C) 2018 Michael Matthews +# +# This file is part of CutCraft. +# +# CutCraft is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# CutCraft is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with CutCraft. If not, see . + +from ..core.part import Part +from ..core.point import Point +from ..core.trace import Trace +from ..core.fingerjoint import FingerJoint +from .shape import Shape + +class Box(Shape): + """ List of segments that make up a part. """ + def __init__(self, width, depth, height, thickness, kerf, top=True, bottom=True, + left=True, right=True, front=True, back=True): + super(Box, self).__init__(thickness, kerf) + + self.width = width + self.depth = depth + self.height = height + + self.faces = [] + self.parts = [] + + for face in range(6): + p = self._face(face, width, depth, height, thickness, top, bottom, left, right, front, back) + self.faces.append((p, face)) + self.parts.append((p, face)) + + if kerf: + for part, _ in self.parts: + part.applykerf(kerf) + + def _face(self, face, width, depth, height, thickness, top, bottom, left, right, front, back): + faces = (top, bottom, left, right, front, back) + + # Check if the requested face is active for this box. + if faces[face] == False: + return None + + wjoint = FingerJoint(width, thickness*2.0, 'width', thickness=thickness) + djoint = FingerJoint(depth, thickness*2.0, 'depth', thickness=thickness) + hjoint = FingerJoint(height, thickness*2.0, 'height', thickness=thickness) + + if face in (0, 1): + t = Trace(x=[thickness], y=[thickness]) + for i, pos in enumerate(djoint.fingers[1:-1]): + if i%2==0: + t += Point(pos, thickness) + t += Point(pos, 0.0) + else: + t += Point(pos, 0.0) + t += Point(pos, thickness) + t += Point(depth-thickness, thickness) + for i, pos in enumerate(wjoint.fingers[1:-1]): + if i%2==0: + t += Point(depth-thickness, pos) + t += Point(depth, pos) + else: + t += Point(depth, pos) + t += Point(depth-thickness, pos) + t += Point(depth-thickness, width-thickness) + for i, pos in enumerate(reversed(djoint.fingers[1:-1])): + if i%2==0: + t += Point(pos, width-thickness) + t += Point(pos, width) + else: + t += Point(pos, width) + t += Point(pos, width-thickness) + t += Point(thickness, width-thickness) + for i, pos in enumerate(reversed(wjoint.fingers[1:-1])): + if i%2==0: + t += Point(thickness, pos) + t += Point(0.0, pos) + else: + t += Point(0.0, pos) + t += Point(thickness, pos) + elif face in (2, 3): + t = Trace(x=[0.0], y=[0.0]) + for i, pos in enumerate(djoint.fingers[1:-1]): + if i%2==0: + t += Point(pos, 0.0) + t += Point(pos, thickness) + else: + t += Point(pos, thickness) + t += Point(pos, 0.0) + t += Point(depth, 0.0) + for i, pos in enumerate(hjoint.fingers[1:-1]): + if i%2==0: + t += Point(depth, pos) + t += Point(depth-thickness, pos) + else: + t += Point(depth-thickness, pos) + t += Point(depth, pos) + t += Point(depth, height) + for i, pos in enumerate(reversed(djoint.fingers[1:-1])): + if i%2==0: + t += Point(pos, height) + t += Point(pos, height-thickness) + else: + t += Point(pos, height-thickness) + t += Point(pos, height) + t += Point(0.0, height) + for i, pos in enumerate(reversed(hjoint.fingers[1:-1])): + if i%2==0: + t += Point(0.0, pos) + t += Point(thickness, pos) + else: + t += Point(thickness, pos) + t += Point(0.0, pos) + pass + elif face in (4, 5): + t = Trace(x=[thickness], y=[0.0]) + for i, pos in enumerate(wjoint.fingers[1:-1]): + if i%2==0: + t += Point(pos, 0.0) + t += Point(pos, thickness) + else: + t += Point(pos, thickness) + t += Point(pos, 0.0) + t += Point(width-thickness, 0.0) + for i, pos in enumerate(hjoint.fingers[1:-1]): + if i%2==0: + t += Point(width-thickness, pos) + t += Point(width, pos) + else: + t += Point(width, pos) + t += Point(width-thickness, pos) + t += Point(width-thickness, height) + for i, pos in enumerate(reversed(wjoint.fingers[1:-1])): + if i%2==0: + t += Point(pos, height) + t += Point(pos, height-thickness) + else: + t += Point(pos, height-thickness) + t += Point(pos, height) + t += Point(thickness, height) + for i, pos in enumerate(reversed(hjoint.fingers[1:-1])): + if i%2==0: + t += Point(thickness, pos) + t += Point(0.0, pos) + else: + t += Point(0.0, pos) + t += Point(thickness, pos) + pass + + t.close() + + return Part() + t diff --git a/extensions/fablabchemnitz/cutcraft/cutcraft/shapes/cone.py b/extensions/fablabchemnitz/cutcraft/cutcraft/shapes/cone.py new file mode 100644 index 00000000..de0d8e8b --- /dev/null +++ b/extensions/fablabchemnitz/cutcraft/cutcraft/shapes/cone.py @@ -0,0 +1,34 @@ +# Copyright (C) 2018 Michael Matthews +# +# This file is part of CutCraft. +# +# CutCraft is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# CutCraft is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with CutCraft. If not, see . + +from ..core.part import Part +from ..platforms.circular import Circular +from .shape import Shape + +class Cone(Shape): + """ List of segments that make up a part. """ + def __init__(self, height, radius1, radius2, segments, cuts, cutdepth, platforms, + thickness, kerf): + super(Cone, self).__init__(thickness, kerf) + +# levels = [p/(platforms-1)*height for p in range(platforms)] +# radii = [radius1 + (radius2-radius1)*p/(platforms-1) for p in range(platforms)] + +# for level, radius in zip(levels, radii): +# p = cc.Part() +# p += cp.Circular(radius, segments, cuts, cutdepth, thickness=thickness, kerf=kerf).part +# self.parts.append((p, level)) diff --git a/extensions/fablabchemnitz/cutcraft/cutcraft/shapes/cylinder.py b/extensions/fablabchemnitz/cutcraft/cutcraft/shapes/cylinder.py new file mode 100644 index 00000000..945382d3 --- /dev/null +++ b/extensions/fablabchemnitz/cutcraft/cutcraft/shapes/cylinder.py @@ -0,0 +1,47 @@ +# Copyright (C) 2018 Michael Matthews +# +# This file is part of CutCraft. +# +# CutCraft is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# CutCraft is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with CutCraft. If not, see . + +from ..core.part import Part +from ..platforms.circular import Circular +from ..supports.pier import Pier +from .shape import Shape + +class Cylinder(Shape): + """ List of segments that make up a part. """ + def __init__(self, height, radius, inradius, segments, cuts, cutdepth, supwidth, platforms, + thickness, kerf): + super(Cylinder, self).__init__(thickness, kerf) + + self.platforms = [] + self.piers = [] + + # List of vertical positions for the platforms + levels = [float(p)/float(platforms-1)*(height-thickness) for p in range(platforms)] + + for level in levels: + p = Circular(radius, inradius, segments, cuts, cutdepth, thickness=thickness) + self.platforms.append((p, level)) + self.parts.append((p, level)) + + for _ in range(cuts): + p = Pier(height, supwidth, supwidth-cutdepth, [(level, 0.0) for level in levels], thickness=thickness) + self.piers.append((p, None)) + self.parts.append((p, None)) + + if kerf: + for part, _ in self.parts: + part.applykerf(kerf) diff --git a/extensions/fablabchemnitz/cutcraft/cutcraft/shapes/rollerbot.py b/extensions/fablabchemnitz/cutcraft/cutcraft/shapes/rollerbot.py new file mode 100644 index 00000000..f663941b --- /dev/null +++ b/extensions/fablabchemnitz/cutcraft/cutcraft/shapes/rollerbot.py @@ -0,0 +1,64 @@ +# Copyright (C) 2018 Michael Matthews +# +# This file is part of CutCraft. +# +# CutCraft is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# CutCraft is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with CutCraft. If not, see . + +from ..core.part import Part +from ..platforms.rollerframe import RollerFrame +from ..supports.pier import Pier +from .shape import Shape + +class RollerBot(Shape): + """ List of segments that make up a part. """ + def __init__(self, width, supwidth, wheelradius, upperradius, lowerradius, + facesize, barsize, primarygapwidth, secondarygapwidth, scale, + thickness, kerf): + super(RollerBot, self).__init__(thickness, kerf) + + self.platforms = [] + self.piers = [] + + cutdepth = supwidth / 3.0 + + for level in range(9): +# for level in range(7): + p = RollerFrame(supwidth, wheelradius, upperradius, lowerradius, + facesize, barsize, primarygapwidth, secondarygapwidth, + scale, level, thickness=thickness) + self.platforms.append((p, 0.0)) + self.parts.append((p, 0.0)) + + levels = [0.0, secondarygapwidth+thickness, + secondarygapwidth+primarygapwidth+thickness*2.0, + secondarygapwidth+primarygapwidth*2.0+thickness*3.0, + secondarygapwidth*2.0+primarygapwidth*2.0+thickness*4.0 ] + height = secondarygapwidth*2.0+primarygapwidth*2.0+thickness*5.0 + + for _ in range(9): + p = Pier(height, supwidth, supwidth-cutdepth, [(level, 0.0) for level in levels], thickness=thickness) + self.piers.append((p, None)) + self.parts.append((p, None)) + + levels = [0.0, secondarygapwidth+thickness ] + height = secondarygapwidth+thickness*2.0 + + for _ in range(4): + p = Pier(height, supwidth, supwidth-cutdepth, [(level, 0.0) for level in levels], thickness=thickness) + self.piers.append((p, None)) + self.parts.append((p, None)) + + if kerf: + for part, _ in self.parts: + part.applykerf(kerf) diff --git a/extensions/fablabchemnitz/cutcraft/cutcraft/shapes/shape.py b/extensions/fablabchemnitz/cutcraft/cutcraft/shapes/shape.py new file mode 100644 index 00000000..e26b33e8 --- /dev/null +++ b/extensions/fablabchemnitz/cutcraft/cutcraft/shapes/shape.py @@ -0,0 +1,27 @@ +# Copyright (C) 2018 Michael Matthews +# +# This file is part of CutCraft. +# +# CutCraft is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# CutCraft is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with CutCraft. If not, see . + +class Shape(object): + def __init__(self, thickness, kerf): + self.thickness = thickness + self.kerf = kerf + self.parts = [] + return + + def close(self): + for part in self.parts: + part[0].close() diff --git a/extensions/fablabchemnitz/cutcraft/cutcraft/shapes/sphere.py b/extensions/fablabchemnitz/cutcraft/cutcraft/shapes/sphere.py new file mode 100644 index 00000000..b0ed982c --- /dev/null +++ b/extensions/fablabchemnitz/cutcraft/cutcraft/shapes/sphere.py @@ -0,0 +1,25 @@ +# Copyright (C) 2018 Michael Matthews +# +# This file is part of CutCraft. +# +# CutCraft is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# CutCraft is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with CutCraft. If not, see . + +from ..core.part import Part +from ..platforms.circular import Circular +from .shape import Shape + +class Sphere(Shape): + """ List of segments that make up a part. """ + def __init__(self): + super(Sphere, self).__init__() diff --git a/extensions/fablabchemnitz/cutcraft/cutcraft/supports/__init__.py b/extensions/fablabchemnitz/cutcraft/cutcraft/supports/__init__.py new file mode 100644 index 00000000..e5e12000 --- /dev/null +++ b/extensions/fablabchemnitz/cutcraft/cutcraft/supports/__init__.py @@ -0,0 +1,21 @@ +# Copyright (C) 2018 Michael Matthews +# +# This file is part of CutCraft. +# +# CutCraft is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# CutCraft is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with CutCraft. If not, see . + +from .support import Support +from .pier import Pier + +__all__ = ["Support", "Pier"] diff --git a/extensions/fablabchemnitz/cutcraft/cutcraft/supports/pier.py b/extensions/fablabchemnitz/cutcraft/cutcraft/supports/pier.py new file mode 100644 index 00000000..6a036ea5 --- /dev/null +++ b/extensions/fablabchemnitz/cutcraft/cutcraft/supports/pier.py @@ -0,0 +1,84 @@ +# Copyright (C) 2018 Michael Matthews +# +# This file is part of CutCraft. +# +# CutCraft is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# CutCraft is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with CutCraft. If not, see . + +from ..core.trace import Trace +from .support import Support +from ..util import isclose + +class Pier(Support): + """ List of segments that make up a part. """ + def __init__(self, height, depth, cutdepth, levels, thickness): + super(Pier, self).__init__(height, thickness) + + self.depth = depth + self.cutdepth = cutdepth + + # The 'levels' list is defined as follows: + # [(height1, x-offset1), (height2, x-offset2), ...] + # where the values are: + # height: The height of the bottom of the platform (0.0=at base level, height-thickness=at top level). + # x-offset: The distance from the core axis for this level. Used to create slopes and curves. + + ys, xs = zip(*sorted(levels)) + if any([(h2) - (h1) < 3*thickness for h1, h2 + in zip(ys[:-1], ys[1:])]): + raise RuntimeError("Pier levels are too close. Try decreasing the number of levels.") + + self.topcut = isclose(ys[-1], height-thickness) + self.bottomcut = isclose(ys[0], 0.0) + self.vertical = all([isclose(x1, x2) for x1, x2 in zip(xs[:-1], xs[1:])]) + + # Starting at the bottom inner point, trace up the uncut side. + if self.vertical: + tx = [0.0, 0.0] + ty = [0.0, height] + else: + tx = list(xs) + ty = list(ys[:-1]) + [height] + + # Add the top points. + xtop = xs[0] + xbottom = xs[-1] + if self.topcut: + tx.extend([xtop+depth-cutdepth, xtop+depth-cutdepth, xtop+depth]) + ty.extend([height, height-thickness, height-thickness]) + else: + tx.extend([xtop+depth]) + ty.extend([height]) + + if self.topcut and self.bottomcut: + xs = xs[1:-1] + ys = ys[1:-1] + elif self.topcut: + xs = xs[:-1] + ys = ys[:-1] + elif self.bottomcut: + xs = xs[1:] + ys = ys[1:] + + for y, x in zip(reversed(ys), reversed(xs)): + tx.extend([x+depth, x+depth-cutdepth, x+depth-cutdepth, x+depth]) + ty.extend([y+thickness, y+thickness, y, y]) + + if self.bottomcut: + tx.extend([xbottom+depth, xbottom+depth-cutdepth, xbottom+depth-cutdepth, xbottom]) + ty.extend([thickness, thickness, 0.0, 0.0]) + else: + tx.extend([xbottom+depth, xbottom]) + ty.extend([0.0, 0.0]) + + self.traces.append(Trace(x=tx, y=ty)) diff --git a/extensions/fablabchemnitz/cutcraft/cutcraft/supports/support.py b/extensions/fablabchemnitz/cutcraft/cutcraft/supports/support.py new file mode 100644 index 00000000..27363817 --- /dev/null +++ b/extensions/fablabchemnitz/cutcraft/cutcraft/supports/support.py @@ -0,0 +1,25 @@ +# Copyright (C) 2018 Michael Matthews +# +# This file is part of CutCraft. +# +# CutCraft is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# CutCraft is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with CutCraft. If not, see . + +from ..core.part import Part + +class Support(Part): + """ General support. """ + def __init__(self, height, thickness): + super(Support, self).__init__() + self.height = height + self.thickness = thickness diff --git a/extensions/fablabchemnitz/cutcraft/cutcraft/util.py b/extensions/fablabchemnitz/cutcraft/cutcraft/util.py new file mode 100644 index 00000000..d08e7cbd --- /dev/null +++ b/extensions/fablabchemnitz/cutcraft/cutcraft/util.py @@ -0,0 +1,40 @@ +# Copyright (C) 2018 Michael Matthews +# +# This file is part of CutCraft. +# +# CutCraft is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# CutCraft is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with CutCraft. If not, see . + +from math import pi, atan2, cos, sin, sqrt + +def isclose(a, b, rel_tol=1e-09, abs_tol=0.0): + # Required as Inkscape uses old version of Python that does not include math.isclose(). + return abs(a-b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol) + +def iscloselist(a, b): + # Functionality of isclose() for lists of values. + return all([isclose(aval, bval) for aval, bval in zip(a, b)]) + +def intersection(radius, angle=None, x=None, y=None): + # With a circle of a given radius determine the intercepts for an angle, x or y coordinate. + if angle: + # Returns (x,y) tuple of intercept. + return (cos(angle)*radius, sin(angle)*radius) + elif x: + y = sqrt((radius)**2 - x**2) + return (y, atan2(y, x)) + elif y: + x = sqrt((radius)**2 - y**2) + return (x, atan2(y, x)) + else: + raise ValueError("Invalid values passed to intersection().") diff --git a/extensions/fablabchemnitz/cutcraft/cutcraftbox.inx b/extensions/fablabchemnitz/cutcraft/cutcraftbox.inx new file mode 100644 index 00000000..acd964b2 --- /dev/null +++ b/extensions/fablabchemnitz/cutcraft/cutcraftbox.inx @@ -0,0 +1,32 @@ + + + Cut-Craft Box + fablabchemnitz.de.cutcraft.box + + + + + + + 60.0 + 30.0 + 30.0 + + 5.0 + 0.01 + + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/cutcraft/cutcraftbox.py b/extensions/fablabchemnitz/cutcraft/cutcraftbox.py new file mode 100644 index 00000000..c7191404 --- /dev/null +++ b/extensions/fablabchemnitz/cutcraft/cutcraftbox.py @@ -0,0 +1,27 @@ +#!/usr/bin/env python3 + +import inkex +from cutcraftshape import CutCraftShape +import cutcraft.platforms as cp +from cutcraft.shapes import Box + +class CutCraftBox(CutCraftShape): + def __init__(self): + CutCraftShape.__init__(self) + self.arg_parser.add_argument("--width", type=float, default=6.0, help="Box Width") + self.arg_parser.add_argument("--depth", type=float, default=6.0, help="Box Depth") + self.arg_parser.add_argument("--height", type=float, default=60.0, help="Box height") + + def effect(self): + CutCraftShape.effect(self) + + width = self.svg.unittouu( str(self.options.width) + self.unit ) + depth = self.svg.unittouu( str(self.options.depth) + self.unit ) + height = self.svg.unittouu( str(self.options.height) + self.unit ) + + shape = Box(width, depth, height, self.thickness, self.kerf) + + self.pack(shape) + +if __name__ == '__main__': + CutCraftBox().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/cutcraft/cutcraftcylinder.inx b/extensions/fablabchemnitz/cutcraft/cutcraftcylinder.inx new file mode 100644 index 00000000..fe1f5bc6 --- /dev/null +++ b/extensions/fablabchemnitz/cutcraft/cutcraftcylinder.inx @@ -0,0 +1,36 @@ + + + Cut-Craft Cylinder + fablabchemnitz.de.cutcraft.cylinder + + + + + + + 60.0 + 60.0 + 30.0 + 3 + 2 + 3 + 6.0 + + 5.0 + 0.01 + + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/cutcraft/cutcraftcylinder.py b/extensions/fablabchemnitz/cutcraft/cutcraftcylinder.py new file mode 100644 index 00000000..8b08a605 --- /dev/null +++ b/extensions/fablabchemnitz/cutcraft/cutcraftcylinder.py @@ -0,0 +1,40 @@ +#!/usr/bin/env python3 + +import inkex +from cutcraftshape import CutCraftShape +import cutcraft.platforms as cp +from cutcraft.shapes import Cylinder + +class CutCraftCylinder(CutCraftShape): + def __init__(self): + CutCraftShape.__init__(self) + self.arg_parser.add_argument("--vertices", type=int, default=3, help="Number of vertices") + self.arg_parser.add_argument("--levels", type=int, default=3, help="Number of levels") + self.arg_parser.add_argument("--supports", type=int, default=3, help="Number of supports") + self.arg_parser.add_argument("--supwidth", type=float, default=6.0, help="Support Width") + self.arg_parser.add_argument("--height", type=float, default=60.0, help="Cylinder height") + self.arg_parser.add_argument("--outer", type=float, default=60.0, help="Diameter of cylinder") + self.arg_parser.add_argument("--inner", type=float, default=30.0, help="Diameter of central hole - 0.0 for no hole") + + def effect(self): + CutCraftShape.effect(self) + + vertices = self.options.vertices + levels = self.options.levels + supports = self.options.supports + supwidth = self.svg.unittouu( str(self.options.supwidth) + self.unit ) + height = self.svg.unittouu( str(self.options.height) + self.unit ) + outer = self.svg.unittouu( str(self.options.outer) + self.unit ) + inner = self.svg.unittouu( str(self.options.inner) + self.unit ) + + if outer<=inner: + self._error("ERROR: Outer diameter must be greater than inner diameter.") + exit() + + shape = Cylinder(height, outer/2.0, inner/2.0, vertices, supports, supwidth/2.0, supwidth, levels, + self.thickness, self.kerf) + + self.pack(shape) + +if __name__ == '__main__': + CutCraftCylinder().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/cutcraft/cutcraftrollerbot.inx b/extensions/fablabchemnitz/cutcraft/cutcraftrollerbot.inx new file mode 100644 index 00000000..2181fe29 --- /dev/null +++ b/extensions/fablabchemnitz/cutcraft/cutcraftrollerbot.inx @@ -0,0 +1,30 @@ + + + Cut-Craft RollerBot + fablabchemnitz.de.cutcraft.rollerbot + + + + + + + 12.0 + + 5.0 + 0.01 + + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/cutcraft/cutcraftrollerbot.py b/extensions/fablabchemnitz/cutcraft/cutcraftrollerbot.py new file mode 100644 index 00000000..0e6cd4d3 --- /dev/null +++ b/extensions/fablabchemnitz/cutcraft/cutcraftrollerbot.py @@ -0,0 +1,37 @@ +#!/usr/bin/env python3 + +import inkex +from cutcraftshape import CutCraftShape +import cutcraft.platforms as cp +from cutcraft.shapes import RollerBot + +class CutCraftRollerBot(CutCraftShape): + def __init__(self): + CutCraftShape.__init__(self) + self.arg_parser.add_argument("--supwidth", type=float, default=6.0, help="Support Width") + + def effect(self): + CutCraftShape.effect(self) + + supwidth = self.svg.unittouu( str(self.options.supwidth) + self.unit ) + + # Constants in the current RollerBot design. + wheelradius = self.svg.unittouu( str(100.0) + "mm" ) + upperradius = self.svg.unittouu( str(92.0) + "mm" ) + lowerradius = self.svg.unittouu( str(82.0) + "mm" ) + facesize = self.svg.unittouu( str(50.0) + "mm" ) + barsize = self.svg.unittouu( str(25.4) + "mm" ) + scale = self.svg.unittouu( str(1.0) + "mm" ) + + primarygapwidth = self.svg.unittouu( str(70.0) + "mm" ) # Must be greater than width of Raspberry PI / Arduino. + secondarygapwidth = self.svg.unittouu( str(25.0) + "mm" ) + width = primarygapwidth*2.0 + secondarygapwidth*2.0 + self.thickness*5.0 + + shape = RollerBot(width, supwidth, wheelradius, upperradius, lowerradius, + facesize, barsize, primarygapwidth, secondarygapwidth, scale, + self.thickness, self.kerf) + + self.pack(shape) + +if __name__ == '__main__': + CutCraftRollerBot().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/cutcraft/cutcraftshape.py b/extensions/fablabchemnitz/cutcraft/cutcraftshape.py new file mode 100644 index 00000000..11d80b69 --- /dev/null +++ b/extensions/fablabchemnitz/cutcraft/cutcraftshape.py @@ -0,0 +1,119 @@ +#!/usr/bin/env python3 + +import gettext +import inkex +from math import floor +from cutcraft.core import Point, Rectangle +from lxml import etree + +#TODOS +''' +since InkScape 1.0 / Python 3 adjustments are required to fix "TypeError: '<' not supported between instances of 'Pier' and 'Pier'". A __lt__ method has to be implemented +"for this reasion items = sorted([(p[0].area(),p[0]) for p in shape.parts], reverse=True)" was commented out +''' + +class CutCraftNode(object): + def __init__(self, rect): + self.children = [] + self.rectangle = rect + self.part = None + + def insert(self, part, shape): + if len(self.children)>0: + node = self.children[0].insert(part, shape) + if node is not None: + return node + else: + return self.children[1].insert(part, shape) + + if self.part is not None: + return None + + pwidth, pheight = part.bbox().expanded().size() + nwidth, nheight = self.rectangle.expanded().size() + + if pwidth>nwidth or pheight>nheight: + # Too small. + return None + if pwidth==nwidth and pheight==nheight: + # This node fits. + self.part = part + return self + + nleft, ntop = self.rectangle.expanded().topleft.tup() + nright, nbottom = self.rectangle.expanded().bottomright.tup() + + if nwidth - pwidth > nheight - pheight: + r1 = Rectangle(Point(nleft, ntop), + Point(nleft+pwidth, nbottom)) + r2 = Rectangle(Point(nleft+pwidth+1.0, ntop), + Point(nright, nbottom)) + else: + r1 = Rectangle(Point(nleft, ntop), + Point(nright, ntop+pheight)) + r2 = Rectangle(Point(nleft, ntop+pheight+1.0), + Point(nright, nbottom)) + + self.children = [CutCraftNode(r1), CutCraftNode(r2)] + + return self.children[0].insert(part, shape) + +class CutCraftShape(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument("--active-tab", default="Options", help="The tab selected when OK was pressed") + pars.add_argument("--unit", default="mm", help="unit of measure for circular pitch and center diameter") + pars.add_argument("--thickness", type=float, default=20.0, help="Material Thickness") + pars.add_argument("--kerf", type=float, default=20.0, help="Laser Cutter Kerf") + pars.add_argument("--linethickness", default="1px", help="Line Thickness") + + def effect(self): + self.unit = self.options.unit + self.thickness = self.svg.unittouu( str(self.options.thickness) + self.unit) + self.kerf = self.svg.unittouu( str(self.options.kerf) + self.unit) + self.linethickness = self.svg.unittouu(self.options.linethickness) + + svg = self.document.getroot() + self.docwidth = self.svg.unittouu(svg.get('width')) + self.docheight = self.svg.unittouu(svg.get('height')) + + self.parent=self.svg.get_current_layer() + + layer = etree.SubElement(svg, 'g') + layer.set(inkex.addNS('label', 'inkscape'), 'newlayer') + layer.set(inkex.addNS('groupmode', 'inkscape'), 'layer') + + def _debug(self, string): + inkex.debug( gettext.gettext(str(string)) ) + + def _error(self, string): + inkex.errormsg( gettext.gettext(str(string)) ) + + def pack(self, shape): + # Pack the individual parts onto the current canvas. + line_style = { 'stroke': '#000000', + 'stroke-width': str(self.linethickness), + 'fill': 'none' } + + #items = sorted([(p[0].area(),p[0]) for p in shape.parts], reverse=True) + items = [(p[0].area(),p[0]) for p in shape.parts] + #for p in shape.parts: + # inkex.utils.debug(p[0]) + + rootnode = CutCraftNode(Rectangle(Point(0.0, 0.0), Point(floor(self.docwidth), floor(self.docheight)))) + + for i, (_, part) in enumerate(items): + node = rootnode.insert(part, self) + if node is None: + self._error("ERROR: Cannot fit parts onto canvas.\n" + + "Try a larger canvas and then manually arrange if required.") + exit() + + bbox = part.bbox().expanded() + part += -bbox.topleft + part += node.rectangle.topleft + + line_attribs = { 'style' : str(inkex.Style(line_style)), + inkex.addNS('label','inkscape') : 'Test ' + str(i), + 'd' : part.svg() } + _ = etree.SubElement(self.parent, inkex.addNS('path','svg'), line_attribs) \ No newline at end of file diff --git a/extensions/fablabchemnitz/cutting_optimizer/.gitignore b/extensions/fablabchemnitz/cutting_optimizer/.gitignore new file mode 100644 index 00000000..99ee6b15 --- /dev/null +++ b/extensions/fablabchemnitz/cutting_optimizer/.gitignore @@ -0,0 +1 @@ +/Debug_CutOptim.txt diff --git a/extensions/fablabchemnitz/cutting_optimizer/CutOptim b/extensions/fablabchemnitz/cutting_optimizer/CutOptim new file mode 100755 index 00000000..039c6b41 Binary files /dev/null and b/extensions/fablabchemnitz/cutting_optimizer/CutOptim differ diff --git a/extensions/fablabchemnitz/cutting_optimizer/CutOptim.exe b/extensions/fablabchemnitz/cutting_optimizer/CutOptim.exe new file mode 100644 index 00000000..8f9da7d0 Binary files /dev/null and b/extensions/fablabchemnitz/cutting_optimizer/CutOptim.exe differ diff --git a/extensions/fablabchemnitz/cutting_optimizer/cutting_optimizer.inx b/extensions/fablabchemnitz/cutting_optimizer/cutting_optimizer.inx new file mode 100644 index 00000000..c3c3468e --- /dev/null +++ b/extensions/fablabchemnitz/cutting_optimizer/cutting_optimizer.inx @@ -0,0 +1,47 @@ + + + Cutting Optimizer (Nesting) + fablabchemnitz.de.cutting_optimizer + + + + + 2.0 + 1000 + 1 + false + + + + + + + + + + + + true + 0 + true + true + + all + + + + + + + + diff --git a/extensions/fablabchemnitz/cutting_optimizer/cutting_optimizer.py b/extensions/fablabchemnitz/cutting_optimizer/cutting_optimizer.py new file mode 100644 index 00000000..d787c1bf --- /dev/null +++ b/extensions/fablabchemnitz/cutting_optimizer/cutting_optimizer.py @@ -0,0 +1,101 @@ +#!/usr/bin/env python3 + +""" +Extension for InkScape 1.0 + +CutOptim OS Wrapper script to make CutOptim work on Windows and Linux systems without duplicating .inx files + +Author: Mario Voigt / FabLab Chemnitz +Mail: mario.voigt@stadtfabrikanten.org +Date: 31.08.2020 +Last patch: 14.01.2021 +License: GNU GPL v3 + +""" + +import inkex +import sys +import os +from lxml import etree +import subprocess + +class CuttingOptimizer(inkex.EffectExtension): + + def openDebugFile(self, file): + DETACHED_PROCESS = 0x00000008 + if os.name == 'nt': + subprocess.Popen(["explorer", file], close_fds=True, creationflags=DETACHED_PROCESS).wait() + else: + subprocess.Popen(["xdg-open", file], close_fds=True, start_new_session=True).wait() + + def add_arguments(self, pars): + args = sys.argv[1:] + for arg in args: + key=arg.split("=")[0] + if len(arg.split("=")) == 2: + value=arg.split("=")[1] + try: + if key != "--id": + pars.add_argument(key, default=key) + except: + pass #ignore duplicate id arg + + def effect(self): + cmd="" + if os.name == "nt": + cutoptim="CutOptim.exe" + else: + cutoptim="./CutOptim" + cmd += cutoptim + + for arg in vars(self.options): + if arg != "output" and arg != "ids" and arg != "selected_nodes": + #inkex.utils.debug(str(arg) + " = " + str(getattr(self.options, arg))) + #fix behaviour of "original" arg which does not correctly gets interpreted if set to false + if arg == "original" and str(getattr(self.options, arg)) == "false": + continue + if arg == "input_file": + cmd += " --file " + str(getattr(self.options, arg)) + else: + cmd += " --" + arg + " " + str(getattr(self.options, arg)) + + output_file = None + if os.name == "nt": + output_file = "cutoptim.svg" + else: + output_file = "/tmp/cutoptim.svg" + + cmd += " --output " + output_file + + # run CutOptim with the parameters provided + with os.popen(cmd, "r") as cutoptim: + result = cutoptim.read() + + # check output existence + try: + stream = open(output_file, 'r') + except FileNotFoundError as e: + inkex.utils.debug("There was no SVG output generated. Cannot continue. Command was:") + inkex.utils.debug(cmd) + exit(1) + + if self.options.original == "false": #we need to use string representation of bool + for element in self.document.getroot(): + if isinstance(element, inkex.ShapeElement): + element.delete() + + if self.options.debug_file == "true": #we need to use string representation of bool + self.openDebugFile("Debug_CutOptim.txt") + + # write the generated SVG into Inkscape's canvas + p = etree.XMLParser(huge_tree=True) + doc = etree.parse(stream, parser=etree.XMLParser(huge_tree=True)) + stream.close() + group = inkex.Group(id="CutOptim") + targetLayer = doc.xpath('//svg:g[@inkscape:label="Placed_Layer"]', namespaces=inkex.NSS)[0]#.getchildren()[0] + for element in targetLayer.getchildren(): + group.append(element) + self.document.getroot().append(group) + +if __name__ == '__main__': + CuttingOptimizer().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/delaunay_triangulation/delaunay_triangulation.inx b/extensions/fablabchemnitz/delaunay_triangulation/delaunay_triangulation.inx new file mode 100644 index 00000000..ade405d2 --- /dev/null +++ b/extensions/fablabchemnitz/delaunay_triangulation/delaunay_triangulation.inx @@ -0,0 +1,56 @@ + + + Delaunay Triangulation + fablabchemnitz.de.delaunay_triangulation + + + false + false + + + + + + + + + + + + + + + -1 + + + + + + + + + 255 + + + + Qbb Qc Qz Q12 + + + + + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/delaunay_triangulation/delaunay_triangulation.py b/extensions/fablabchemnitz/delaunay_triangulation/delaunay_triangulation.py new file mode 100644 index 00000000..5d44b741 --- /dev/null +++ b/extensions/fablabchemnitz/delaunay_triangulation/delaunay_triangulation.py @@ -0,0 +1,197 @@ +#! /usr/bin/python3 + +''' +Copyright (C) 2020 Scott Pakin, scott-ink@pakin.org + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301, USA. + +''' + +import inkex +import numpy as np +import random +import sys +from inkex import Group, Line, Polygon, TextElement +from inkex.styles import Style +from inkex.transforms import Vector2d +from scipy.spatial import Delaunay + +class DelaunayTriangulation(inkex.EffectExtension): + 'Overlay selected objects with triangles.' + + def add_arguments(self, pars): + pars.add_argument('--tab', help='The selected UI tab when OK was pressed') + pars.add_argument('--joggling', type=inkex.Boolean, default=False, help='Use joggled input instead of merged facets') + pars.add_argument('--furthest', type=inkex.Boolean, default=False, help='Furthest-site Delaunay triangulation') + pars.add_argument('--elt_type', default='poly', help='Element type to generate ("poly" or "line")') + pars.add_argument('--qhull', help='Triangulation options to pass to qhull') + pars.add_argument('--fill_type', help='How to fill generated polygons') + pars.add_argument('--fill_color', type=inkex.Color, help='Fill color to use with a fill type of "specified"') + pars.add_argument('--stroke_type', help='How to stroke generated polygons') + pars.add_argument('--stroke_color', type=inkex.Color, help='Stroke color to use with a stroke type of "specified"') + + def _path_points(self, elt): + 'Return a list of all points on a path (endpoints, not control points).' + pts = set() + first = None + prev = Vector2d() + for cmd in elt.path.to_absolute(): + if first is None: + first = cmd.end_point(first, prev) + ep = cmd.end_point(first, prev) + pts.add((ep.x, ep.y)) + prev = ep + return pts + + def _create_styles(self, n): + 'Return a style to use for the generated objects.' + # Use either the first or the last element's stroke for line caps, + # stroke widths, etc. + fstyle = self.svg.selection.first().style + lstyle = self.svg.selection[-1].style + if self.options.stroke_type == 'last_sel': + style = Style(lstyle) + else: + style = Style(fstyle) + + # Apply the specified fill color. + if self.options.fill_type == 'first_sel': + fcolor = fstyle.get_color('fill') + style.set_color(fcolor, 'fill') + elif self.options.fill_type == 'last_sel': + fcolor = lstyle.get_color('fill') + style.set_color(fcolor, 'fill') + elif self.options.fill_type == 'specified': + style.set_color(self.options.fill_color, 'fill') + elif self.options.fill_type == 'random': + pass # Handled below + else: + sys.exit(inkex.utils.errormsg(_('Internal error: Unrecognized fill type "%s".')) % self.options.fill_type) + + # Apply the specified stroke color. + if self.options.stroke_type == 'first_sel': + scolor = fstyle.get_color('stroke') + style.set_color(scolor, 'stroke') + elif self.options.stroke_type == 'last_sel': + scolor = lstyle.get_color('stroke') + style.set_color(scolor, 'stroke') + elif self.options.stroke_type == 'specified': + style.set_color(self.options.stroke_color, 'stroke') + elif self.options.stroke_type == 'random': + pass # Handled below + else: + sys.exit(inkex.utils.errormsg(_('Internal error: Unrecognized stroke type "%s".')) % self.options.stroke_type) + + # Produce n copies of the style. + styles = [Style(style) for i in range(n)] + if self.options.fill_type == 'random': + for s in styles: + r = random.randint(0, 255) + g = random.randint(0, 255) + b = random.randint(0, 255) + s.set_color('#%02x%02x%02x' % (r, g, b), 'fill') + s['fill-opacity'] = 255 + if self.options.stroke_type == 'random': + for s in styles: + r = random.randint(0, 255) + g = random.randint(0, 255) + b = random.randint(0, 255) + s.set_color('#%02x%02x%02x' % (r, g, b), 'stroke') + s['stroke-opacity'] = 255 + + # Return the list of styles. + return [str(s) for s in styles] + + def _create_polygons(self, triangles): + 'Render triangles as SVG polygons.' + styles = self._create_styles(len(triangles)) + group = self.svg.get_current_layer().add(Group()) + for tri, style in zip(triangles, styles): + tri_str = ' '.join(['%.10g %.10g' % (pt[0], pt[1]) for pt in tri]) + poly = Polygon() + poly.set('points', tri_str) + poly.style = style + group.add(poly) + + def _create_lines(self, triangles): + 'Render triangles as individual SVG lines.' + # First, find all unique lines. + lines = set() + for tri in triangles: + if len(tri) != 3: + sys.exit(inkex.utils.errormsg(_('Internal error: Encountered a non-triangle.'))) + for i, j in [(0, 1), (0, 2), (1, 2)]: + xy1 = tuple(tri[i]) + xy2 = tuple(tri[j]) + if xy1 < xy2: + lines.update([(xy1, xy2)]) + else: + lines.update([(xy2, xy1)]) + + # Then, create SVG line elements. + styles = self._create_styles(len(lines)) + group = self.svg.get_current_layer().add(Group()) + for ([(x1, y1), (x2, y2)], style) in zip(lines, styles): + line = Line() + line.set('x1', x1) + line.set('y1', y1) + line.set('x2', x2) + line.set('y2', y2) + line.style = style + group.add(line) + + def effect(self): + 'Triangulate a set of objects.' + + # Complain if the selection is empty. + if len(self.svg.selection) == 0: + return inkex.utils.errormsg(_('Please select at least one object.')) + + # Acquire a set of all points from all selected objects. + all_points = set() + warned_text = False + for obj in self.svg.selection.values(): + if isinstance(obj, TextElement) and not warned_text: + sys.stderr.write('Warning: Text elements are not currently supported. Ignoring all text in the selection.\n') + warned_text = True + all_points.update(self._path_points(obj.to_path_element())) + + # Use SciPy to perform the Delaunay triangulation. + pts = np.array(list(all_points)) + if len(pts) == 0: + return inkex.utils.errormsg(_('No points were found.')) + qopts = self.options.qhull + if self.options.joggling: + qopts = 'QJ ' + qopts + simplices = Delaunay(pts, furthest_site=self.options.furthest, qhull_options=qopts).simplices + + # Create either triangles or lines, as request. Either option uses the + # style of the first object in the selection. + triangles = [] + for s in simplices: + try: + triangles.append(pts[s]) + except IndexError: + pass + if self.options.elt_type == 'poly': + self._create_polygons(triangles) + elif self.options.elt_type == 'line': + self._create_lines(triangles) + else: + return inkex.utils.errormsg(_('Internal error: unexpected element type "%s".') % self.options.elt_type) + +if __name__ == '__main__': + DelaunayTriangulation().run() diff --git a/extensions/fablabchemnitz/delete_above/delete_above.inx b/extensions/fablabchemnitz/delete_above/delete_above.inx new file mode 100644 index 00000000..c6708c0d --- /dev/null +++ b/extensions/fablabchemnitz/delete_above/delete_above.inx @@ -0,0 +1,16 @@ + + + Delete Above + fablabchemnitz.de.delete_above + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/delete_above/delete_above.py b/extensions/fablabchemnitz/delete_above/delete_above.py new file mode 100644 index 00000000..76fa6aff --- /dev/null +++ b/extensions/fablabchemnitz/delete_above/delete_above.py @@ -0,0 +1,123 @@ +#!/usr/bin/env python3 +""" +Inkscape plugin: delete the selected object(s) and any objects on top of them. + +I.E. delete the selected node(s) and any other nodes that are completely +within the bounding-boxes of the selected nodes that have a greater z-order + +Simply put, you select a "background" rectangle, then use this plugin to +delete it and everything that appears on top of it. +""" + +import collections +import subprocess +import os +import pprint +import inkex + +Point = collections.namedtuple('Point', ['x', 'y']) + +Box = collections.namedtuple('Box', ['tl', 'tr', 'br', 'bl']) +# tl=top left, tr=top right, br=bottom right, bl=bottom left + +nodeInfo = collections.namedtuple('nodeInfo', + ['x', 'y', 'width', 'height']) + + +def contains(outer, inner): + """ Return true if the Box inner is completely within the Box outer """ + return inner.tl.x >= outer.tl.x and inner.tl.y >= outer.tl.y and \ + inner.br.x <= outer.br.x and inner.br.y <= outer.br.y + + +class DeleteAbove(inkex.EffectExtension): + """ Delete the selected node and everything above it """ + node_info = None + + def load_node_info(self): + """ Ask inkscape for information about all object bounding boxes """ + node_info = dict() + command = ['inkscape', '--query-all', self.options.input_file] + check_output = subprocess.check_output + + with open(os.devnull, 'w') as null: + for line in check_output(command, stderr=null).splitlines(): + raw_id, raw_x, raw_y, raw_width, raw_height = line.split(b',') + node_info[raw_id.decode("UTF-8")] = nodeInfo(float(raw_x), + float(raw_y), + float(raw_width), + float(raw_height)) + + self.node_info = node_info + return + + def remove(self, node): + """ Remove the specified node from the document tree """ + parent = node.getparent() + if parent is None: + return + parent.remove(node) + + def bbox(self, node): + """ Return the bounding-box of the given node """ + node_id = node.get('id') + #inkex.utils.debug("Check if " + str(node_id) + " is in " + str(self.node_info)) + info = self.node_info[node_id] + + x = info.x + y = info.y + width = info.width + height = info.height + + return Box(Point(x, y), + Point(x + width, y), + Point(x + width, y + height), + Point(x, y + height)) + + def effect(self): + """ + For every selected node, remove it and all items on top of it + """ + self.load_node_info() + nodes_to_remove = list() + + for id, node in self.svg.selected.items(): + selected_node_bbox = self.bbox(node) + nodes_to_remove.append(node) + + # search the document tree for the selected node + # when found, every subsequent node will be "above" it. + # (i.e. svg documents draw from the background up, so a background + # node will appear first, then nodes that are progressively + # closer to the viewer will appear subsequently in the svg file) + found_selected_node = False + for node in self.document.getiterator(): + if not found_selected_node: + if node == node: + found_selected_node = True + continue + # Hereafter we are iterating over all nodes above the + # selected node. We need to delete them if they appear to + # be "on top of" the selection (i.e. within the bounding box + # of the selection) + try: + node_bbox = self.bbox(node) + except KeyError: + continue + if contains(selected_node_bbox, node_bbox): + nodes_to_remove.append(node) + + # Now we remove the items we've previously found. Search and remove + # need to be separate bulk steps because tree search is disrupted by + # tree modification + for condemned_node in set(nodes_to_remove): + self.remove(condemned_node) + +if __name__ == '__main__': + if False: + # Some tools for debug use + PPRINTER = pprint.PrettyPrinter(indent=4) + FMT = PPRINTER.pformat + DUMP = lambda obj: inkex.debug(FMT(obj)) + + DeleteAbove().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/destructive_clip/destructive_clip.inx b/extensions/fablabchemnitz/destructive_clip/destructive_clip.inx new file mode 100644 index 00000000..c9687b03 --- /dev/null +++ b/extensions/fablabchemnitz/destructive_clip/destructive_clip.inx @@ -0,0 +1,17 @@ + + + Destructive Clip + fablabchemnitz.de.destructive_clip + + path + + + + + + "Destructively" clip selected paths using the topmost as clipping path + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/destructive_clip/destructive_clip.py b/extensions/fablabchemnitz/destructive_clip/destructive_clip.py new file mode 100644 index 00000000..554e996e --- /dev/null +++ b/extensions/fablabchemnitz/destructive_clip/destructive_clip.py @@ -0,0 +1,220 @@ +#!/usr/bin/env python3 +''' + ---DESTRUCTIVE Clip--- + An Inkscape Extension which works like Object|Clip|Set except that the paths clipped are actually *modified* + Thus the clipping is included when exported, for example as a DXF file. + Select two or more *paths* then choose Extensions|Modify path|Destructive clip. The topmost path will be used to clip the others. + Notes:- + * Curves in paths are not supported (use Flatten Beziers). + * Non-path objects in the selection will be ignored. Use Object|Ungroup. + * Paths entirely outside the clipping path will remain untouched (rather than modifying them to an empty path) + * Complex paths may take a while (there seems to be no way too show progress) + * Yes, using MBR's to do gross clipping might make it faster + * No, Python is not my first language (C/C++ is) + + Mark Wilson Feb 2016 + + ---- + + Edits by Windell H. Oskay, www.evilmadscientit.com, August 2020 + Update calls to Inkscape 1.0 extension API to avoid deprecation warnings + Minimal standardization of python whitespace + Handle some errors more gracefully + +''' + +import inkex +import sys +from inkex.paths import Path + + +class DestructiveClip(inkex.EffectExtension): + + def __init__(self): + self.tolerance = 0.0001 # arbitrary fudge factor + inkex.Effect.__init__(self) + self.error_messages = [] + + self.curve_error = 'Unable to parse path.\nConsider removing curves with Extensions > Modify Path > Flatten Beziers...' + + def approxEqual(self, a, b): + # compare with tiny tolerance + return abs(a-b) <= self.tolerance + + def midPoint(self, line): + # midPoint of line + return [(line[0][0] + line[1][0])/2, (line[0][1] + line[1][1])/2] + + def maxX(self, lineSegments): + # return max X coord of lineSegments + maxx = 0.0 + for line in lineSegments: + maxx = max(maxx, line[0][0]) + maxx = max(maxx, line[1][0]) + return maxx + + def simplepathToLineSegments(self, path): + # takes a simplepath and converts to line *segments*, for simplicity. + # Thus [MoveTo P0, LineTo P1, LineTo P2] becomes [[P0-P1],[P1,P2]] + # only handles, Move, Line and Close. + # The simplepath library has already simplified things, normalized relative commands, etc + lineSegments = first = prev = this = [] + errors = set([]) # Similar errors will be stored only once + for cmd in path: + this = cmd[1] + if cmd[0] == 'M': # moveto + if first == []: + first = this + elif cmd[0] == 'L': # lineto + lineSegments.append([prev, this]) + elif cmd[0] == 'Z': # close + lineSegments.append([prev, first]) + first = [] + elif cmd[0] == 'C': + # https://developer.mozilla.org/en/docs/Web/SVG/Tutorial/Paths + lineSegments.append([prev, [this[4], this[5]]]) + errors.add("Curve node detected (svg type C), this node will be handled as a regular node") + else: + errors.add("Invalid node type detected: {}. This script only handle type M, L, Z".format(cmd[0])) + prev = this + return (lineSegments, errors) + + def linesgmentsToSimplePath(self, lineSegments): + # reverses simplepathToLines - converts line segments to Move/Line-to's + path = [] + end = None + for line in lineSegments: + start = line[0] + if end is None: + path.append(['M', start]) # start with a move + elif not (self.approxEqual(end[0], start[0]) and self.approxEqual(end[1], start[1])): + path.append(['M', start]) # only move if previous end not within tolerance of this start + end = line[1] + path.append(['L', end]) + return path + + def lineIntersection(self, L1From, L1To, L2From, L2To): + # returns as [x, y] the intersection of the line L1From-L1To and L2From-L2To, or None + # http://stackoverflow.com/questions/563198/how-do-you-detect-where-two-line-segments-intersect + + try: + dL1 = [L1To[0] - L1From[0], L1To[1] - L1From[1]] + dL2 = [L2To[0] - L2From[0], L2To[1] - L2From[1]] + except IndexError: + inkex.errormsg(self.curve_error) + sys.exit() + + denominator = -dL2[0]*dL1[1] + dL1[0]*dL2[1] + if not self.approxEqual(denominator, 0.0): + s = (-dL1[1]*(L1From[0] - L2From[0]) + dL1[0]*(L1From[1] - L2From[1]))/denominator + t = (+dL2[0]*(L1From[1] - L2From[1]) - dL2[1]*(L1From[0] - L2From[0]))/denominator + if s >= 0.0 and s <= 1.0 and t >= 0.0 and t <= 1.0: + return [L1From[0] + (t * dL1[0]), L1From[1] + (t * dL1[1])] + else: + return None + + def insideRegion(self, point, lineSegments, lineSegmentsMaxX): + # returns true if point is inside the region defined by lineSegments. lineSegmentsMaxX is the maximum X extent + ray = [point, [lineSegmentsMaxX*2.0, point[1]]] # hz line to right of point, extending well outside MBR + crossings = 0 + for line in lineSegments: + if not self.lineIntersection(line[0], line[1], ray[0], ray[1]) is None: + crossings += 1 + return (crossings % 2) == 1 # odd number of crossings means inside + + def cullSegmentedLine(self, segmentedLine, lineSegments, lineSegmentsMaxX): + # returns just the segments in segmentedLine which are inside lineSegments + culled = [] + for segment in segmentedLine: + if self.insideRegion(self.midPoint(segment), lineSegments, lineSegmentsMaxX): + culled.append(segment) + return culled + + def clipLine(self, line, lineSegments): + # returns line split where-ever lines in lineSegments cross it + linesWrite = [line] + for segment in lineSegments: + linesRead = linesWrite + linesWrite = [] + for line in linesRead: + intersect = self.lineIntersection(line[0], line[1], segment[0], segment[1]) + if intersect is None: + linesWrite.append(line) + else: # split + linesWrite.append([line[0], intersect]) + linesWrite.append([intersect, line[1]]) + return linesWrite + + def clipLineSegments(self, lineSegmentsToClip, clippingLineSegments): + # return the lines in lineSegmentsToClip clipped by the lines in clippingLineSegments + clippedLines = [] + for lineToClip in lineSegmentsToClip: + clippedLines.extend(self.cullSegmentedLine(self.clipLine(lineToClip, clippingLineSegments), clippingLineSegments, self.maxX(clippingLineSegments))) + return clippedLines + + #you can also run the extension Modify Path > To Absolute Coordinates to convert VH to L + def fixVHbehaviour(self, elem): + raw = Path(elem.get("d")).to_arrays() + subpaths, prev = [], 0 + for i in range(len(raw)): # Breaks compound paths into simple paths + if raw[i][0] == 'M' and i != 0: + subpaths.append(raw[prev:i]) + prev = i + subpaths.append(raw[prev:]) + seg = [] + for simpath in subpaths: + if simpath[-1][0] == 'Z': + simpath[-1][0] = 'L' + if simpath[-2][0] == 'L': simpath[-1][1] = simpath[0][1] + else: simpath.pop() + for i in range(len(simpath)): + if simpath[i][0] == 'V': # vertical and horizontal lines only have one point in args, but 2 are required + #inkex.utils.debug(simpath[i][0]) + simpath[i][0]='L' #overwrite V with regular L command + add=simpath[i-1][1][0] #read the X value from previous segment + simpath[i][1].append(simpath[i][1][0]) #add the second (missing) argument by taking argument from previous segment + simpath[i][1][0]=add #replace with recent X after Y was appended + if simpath[i][0] == 'H': # vertical and horizontal lines only have one point in args, but 2 are required + #inkex.utils.debug(simpath[i][0]) + simpath[i][0]='L' #overwrite H with regular L command + simpath[i][1].append(simpath[i-1][1][1]) #add the second (missing) argument by taking argument from previous segment + #inkex.utils.debug(simpath[i]) + seg.append(simpath[i]) + elem.set("d", Path(seg)) + return seg + + def effect(self): + clippingLineSegments = None + pathTag = inkex.addNS('path', 'svg') + groupTag = inkex.addNS('g', 'svg') + self.error_messages = [] + for id in self.options.ids: # the selection, top-down + node = self.svg.selected[id] + if node.tag == pathTag: + path = self.fixVHbehaviour(node) + if clippingLineSegments is None: # first path is the clipper + #(clippingLineSegments, errors) = self.simplepathToLineSegments(node.path.to_arrays()) + (clippingLineSegments, errors) = self.simplepathToLineSegments(path) + self.error_messages.extend(['{}: {}'.format(id, err) for err in errors]) + else: + # do all the work! + #segmentsToClip, errors = self.simplepathToLineSegments(node.path.to_arrays()) + segmentsToClip, errors = self.simplepathToLineSegments(path) + self.error_messages.extend(['{}: {}'.format(id, err) for err in errors]) + clippedSegments = self.clipLineSegments(segmentsToClip, clippingLineSegments) + if len(clippedSegments) != 0: + path = str(inkex.Path(self.linesgmentsToSimplePath(clippedSegments))) + node.set('d', path) + else: + # don't put back an empty path(?) could perhaps put move, move? + inkex.errormsg('Object {} clipped to nothing, will not be updated.'.format(node.get('id'))) + elif node.tag == groupTag: # we don't look inside groups for paths + inkex.errormsg('Group object {} will be ignored. Please ungroup before running the script.'.format(id)) + else: # something else + inkex.errormsg('Object {} is not of type path ({}), and will be ignored. Current type "{}".'.format(id, pathTag, node.tag)) + + for error in self.error_messages: + inkex.errormsg(error) + +if __name__ == '__main__': + DestructiveClip().run() diff --git a/extensions/fablabchemnitz/dimensioning/dimensioning.inx b/extensions/fablabchemnitz/dimensioning/dimensioning.inx new file mode 100644 index 00000000..40b4ba06 --- /dev/null +++ b/extensions/fablabchemnitz/dimensioning/dimensioning.inx @@ -0,0 +1,59 @@ + + + Dimensioning + fablabchemnitz.de.dimensioning + + + + + + + + + + + + + 1 + 5 + 0 + 100 + false + + + 1 + + + + + + + + 0 + + true + + + + + + + + path + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/dimensioning/dimensioning.py b/extensions/fablabchemnitz/dimensioning/dimensioning.py new file mode 100644 index 00000000..4e39429f --- /dev/null +++ b/extensions/fablabchemnitz/dimensioning/dimensioning.py @@ -0,0 +1,283 @@ +#!/usr/bin/env python3 +''' +Tool for drawing beautiful DIN-conform dimensioning arrows +(c) 2012 by Johannes B. Rutzmoser, johannes.rutzmoser (at) googlemail (dot) com + +Please contact me, if you know a way how the extension module accepts mouse input; this would help to improve the tool + +Add this file and the dimensioning.inx file into the following folder to get the feature run: +UNIX: +$HOME/.config/inkscape/extensions/ + +Mac OS X (when using the binary): +/Applications/Inkscape.app/Contents/Resources/extensions/ +or +/Applications/Inkscape.app/Contents/Resources/share/inkscape/extensions + +WINDOWS (Filepath may differ, depending where the program was installed): +C:\Program Files\Inkscape\share\extensions + +License: +GNU GENERAL PUBLIC LICENSE + +''' + +import inkex +import numpy as np +import gettext +_ = gettext.gettext +from lxml import etree +from inkex import paths + +def norm(a): + return a/np.sqrt(np.dot(a, a)) + +def rotate(tangentvec, point): + if tangentvec[0] == 0: + angle = - np.pi/2 + else: + angle = np.arctan(tangentvec[1]/tangentvec[0]) + return 'rotate(' + str(angle/np.pi*180) + ',' + str(point[0]) + ',' + str(point[1]) + ')' + + +class Dimensioning(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument("--orientation", default='horizontal', help="The type of orientation of the dimensioning (horizontal, vertical or parallel)") + pars.add_argument("--arrow_orientation", default='auto', help="The type of orientation of the arrows") + pars.add_argument("--line_scale", type=float, default=1.0, help="Scale factor for the line thickness") + pars.add_argument("--overlap", type=float, default=1.0, help="Overlap of the helpline over the dimensioning line") + pars.add_argument("--distance", type=float, default=1.0, help="Distance of the helpline to the object") + pars.add_argument("--position", type=float, default=1.0, help="position of the dimensioning line") + pars.add_argument("--flip", type=inkex.Boolean, default=False, help="flip side") + pars.add_argument("--scale_factor", type=float, default=1.0, help="scale factor for the dimensioning text") + pars.add_argument("--unit", default='px', help="The unit that should be used for the dimensioning") + pars.add_argument("--rotate", type=inkex.Boolean, default=True, help="Rotate the annotation?") + pars.add_argument("--digit", type=int, default=0, help="number of digits after the point") + pars.add_argument("--tab", default="sampling", help="The selected UI-tab when OK was pressed") + + def create_linestyles(self): + ''' + Create the line styles for the drawings. + ''' + + self.helpline_style = { + 'stroke' : '#000000', + 'stroke-width' : '{}px'.format(0.5*self.options.line_scale), + 'fill' : 'none' + } + self.dimline_style = { + 'stroke' : '#000000', + 'stroke-width' : '{}px'.format(0.75*self.options.line_scale), + 'fill' : 'none', + 'marker-start' : 'url(#ArrowDIN-start)', + 'marker-end' : 'url(#ArrowDIN-end)' + } + self.text_style = { + 'font-size' : '{}px'.format(12*self.options.line_scale), + 'font-family' : 'Sans', + 'font-style' : 'normal', + 'text-anchor' : 'middle' + } + self.helpline_attribs = {'style' : str(inkex.Style(self.helpline_style)), + inkex.addNS('label', 'inkscape') : 'helpline', + 'd' : 'm 0,0 100,0' + } + self.text_attribs = {'style' : str(inkex.Style(self.text_style)), + 'x' : '100', + 'y' : '100' + } + self.dimline_attribs = {'style' : str(inkex.Style(self.dimline_style)), + inkex.addNS('label','inkscape') : 'dimline', + 'd' : 'm 0,0 200,0' + } + + def effect(self): + # will be executed when feature is activated + self.create_linestyles() + self.makeGroup() + self.getPoints() + self.calcab() + self.drawHelpline() + self.drawDimension() + self.drawText() + + def makeMarkerstyle(self, name, rotate): + defs = self.svg.getElement('/svg:svg//svg:defs') + if defs == None: + defs = etree.SubElement(self.document.getroot(),inkex.addNS('defs','svg')) + marker = etree.SubElement(defs ,inkex.addNS('marker','svg')) + marker.set('id', name) + marker.set('orient', 'auto') + marker.set('refX', '0.0') + marker.set('refY', '0.0') + marker.set('style', 'overflow:visible') + marker.set(inkex.addNS('stockid','inkscape'), name) + + arrow = etree.Element("path") + # messy but works; definition of arrows in beautiful DIN-shapes: + if name.startswith('ArrowDIN-'): + if rotate: + arrow.set('d', 'M 8,0 -8,2.11 -8,-2.11 z') + else: + arrow.set('d', 'M -8,0 8,-2.11 8,2.11 z') + if name.startswith('ArrowDINout-'): + if rotate: + arrow.set('d', 'M 0,0 16,2.11 16,0.5 26,0.5 26,-0.5 16,-0.5 16,-2.11 z') + else: + arrow.set('d', 'M 0,0 -16,2.11 -16,0.5 -26,0.5 -26,-0.5 -16,-0.5 -16,-2.11 z') + + arrow.set('style', 'fill:#000000;stroke:none') + marker.append(arrow) + + + def makeGroup(self): + '''puts everything of the dimensioning in a group''' + layer = self.svg.get_current_layer() + # Group in which the object should be put into + grp_name = 'dimensioning' + grp_attributes = {inkex.addNS('label', 'inkscape') : grp_name} + self.grp = etree.SubElement(layer, 'g', grp_attributes) + + def getPoints(self): + self.p1 = np.array([0.,100.]) + self.p1 = np.array([100.,100.]) + # Get variables of a selected object + for id, node in self.svg.selected.items(): + # if it is a path: + if node.tag == inkex.addNS('path', 'svg'): + d = node.get('d') + p = paths.CubicSuperPath(d) + # p has all nodes with the anchor points in a list; + # the rule is [anchorpoint, node, anchorpoint] + # the points are lists with x and y coordinate + self.p1 = np.array(p[0][0][1]) + self.p2 = np.array(p[0][-1][1]) + + + def calcab(self): + # get p1,p2 ordered for correct dimension direction + # determine quadrant + if self.p1[0] <= self.p2[0]: + if self.p1[1] <= self.p2[1]: + quad = 1 # p1 is left,up of p2 + else: quad = 2 # p1 is left,down of p2 + elif self.p1[1] <= self.p2[1]: + quad = 3 # p1 is right,up of p2 + else: quad = 4 # p1 is right,down of p2 + swap = False if quad ==1 else True + minp = self.p2 if swap else self.p1 + maxp = self.p1 if swap else self.p2 + # distance between points + delta = maxp - minp + # rotation matrix + rotateMat = np.array([[0,-1],[1,0]]) + # compute the unit vectors e1 and e2 along the cartesian coordinates of the dimension + if self.options.orientation == 'horizontal': + if quad == 3: self.e1 = np.array([1.0, 0.0]) + else: self.e1 = np.array([-1.0, 0.0]) + if self.options.orientation == 'vertical': + if quad == 2: + self.e1 = np.array([0.0, -1.0]) + else: self.e1 = np.array([0.0, 1.0]) + if self.options.orientation == 'parallel': + self.e1 = norm(delta) + #if quad==2 or quad==3: self.e1 *= -1 + self.e2 = np.dot(rotateMat, self.e1) + if self.options.flip: + self.e2 *= -1. + # compute the points a and b, where the dimension line arrow spikes start and end + dist = self.options.position*self.e2 + if self.options.flip: + outpt = maxp + delta *= -1 + if swap: + self.a = outpt + dist + self.b = self.a + self.e1*np.dot(self.e1,delta) + else: + self.b = outpt + dist + self.a = self.b + self.e1*np.dot(self.e1,delta) + else: + outpt = minp + if swap: + self.b = outpt + dist + self.a = self.b + self.e1*np.dot(self.e1,delta) + else: + self.a = outpt + dist + self.b = self.a + self.e1*np.dot(self.e1,delta) + + + def drawHelpline(self): + # manipulate the start- and endpoints with distance and overlap + h1_start = self.p1 + norm(self.a - self.p1)*self.options.distance + h1_end = self.a + norm(self.a - self.p1)*self.options.overlap + h2_start = self.p2 + norm(self.b - self.p2)*self.options.distance + h2_end = self.b + norm(self.b - self.p2)*self.options.overlap + + # print the lines + hline1 = etree.SubElement(self.grp, inkex.addNS('path', 'svg'), self.helpline_attribs) + hline1.set('d', 'M %f,%f %f,%f' % (h1_start[0], h1_start[1],h1_end[0],h1_end[1],)) + + hline2 = etree.SubElement(self.grp, inkex.addNS('path', 'svg'), self.helpline_attribs) + hline2.set('d', 'M %f,%f %f,%f' % (h2_start[0], h2_start[1],h2_end[0],h2_end[1],)) + + def setMarker(self, option): + if option=='inside': + # inside + self.arrowlen = 6.0 * self.options.line_scale + self.dimline_style['marker-start'] = 'url(#ArrowDIN-start)' + self.dimline_style['marker-end'] = 'url(#ArrowDIN-end)' + self.makeMarkerstyle('ArrowDIN-start', False) + self.makeMarkerstyle('ArrowDIN-end', True) + else: + # outside + self.arrowlen = 0 + self.dimline_style['marker-start'] = 'url(#ArrowDINout-start)' + self.dimline_style['marker-end'] = 'url(#ArrowDINout-end)' + self.makeMarkerstyle('ArrowDINout-start', False) + self.makeMarkerstyle('ArrowDINout-end', True) + self.dimline_attribs['style'] = str(inkex.Style(self.dimline_style)) + + def drawDimension(self): + # critical length, when inside snaps to outside + critical_length = 35 * self.options.line_scale + if self.options.arrow_orientation == 'auto': + if np.abs(np.dot(self.e1, self.b - self.a)) > critical_length: + self.setMarker('inside') + else: + self.setMarker('outside') + else: + self.setMarker(self.options.arrow_orientation) + # start- and endpoint of the dimension line + dim_start = self.a + self.arrowlen*norm(self.b - self.a) + dim_end = self.b - self.arrowlen*norm(self.b - self.a) + # print + dimline = etree.SubElement(self.grp, inkex.addNS('path', 'svg'), self.dimline_attribs) + dimline.set('d', 'M %f,%f %f,%f' % (dim_start[0], dim_start[1], dim_end[0], dim_end[1])) + + def drawText(self): + # distance of text to the dimension line + self.textdistance = 5.0 * self.options.line_scale + if self.e2[1] > 0: + textpoint = (self.a + self.b)/2 - self.e2*self.textdistance + elif self.e2[1] == 0: + textpoint = (self.a + self.b)/2 - np.array([1,0])*self.textdistance + else: + textpoint = (self.a + self.b)/2 + self.e2*self.textdistance + + value = np.abs(np.dot(self.e1, self.b - self.a)) / (self.svg.unittouu(str(self.options.scale_factor)+self.options.unit)) + string_value = str(round(value, self.options.digit)) + # chop off last characters if digit is zero or negative + if self.options.digit <=0: + string_value = string_value[:-2] + text = etree.SubElement(self.grp, inkex.addNS('text', 'svg'), self.text_attribs) + # The alternative for framing with dollars, when LATEX Math export is seeked + # text.text = '$' + string_value + '$' + text.text = string_value + text.set('x', str(textpoint[0])) + text.set('y', str(textpoint[1])) + if self.options.rotate: + text.set('transform', rotate(self.e1, textpoint)) + +if __name__ == '__main__': + Dimensioning().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/dots_to_path_points/dots_to_path_points.inx b/extensions/fablabchemnitz/dots_to_path_points/dots_to_path_points.inx new file mode 100644 index 00000000..320f846d --- /dev/null +++ b/extensions/fablabchemnitz/dots_to_path_points/dots_to_path_points.inx @@ -0,0 +1,37 @@ + + + Dots To Path Points + fablabchemnitz.de.dots_to_path_points + + + true + false + + + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/dots_to_path_points/dots_to_path_points.py b/extensions/fablabchemnitz/dots_to_path_points/dots_to_path_points.py new file mode 100644 index 00000000..33f5a14b --- /dev/null +++ b/extensions/fablabchemnitz/dots_to_path_points/dots_to_path_points.py @@ -0,0 +1,75 @@ +#! /usr/bin/env python3 +''' +Copyright (C) 2020 Christian Hoffmann christian@lehrer-hoffmann.de + +##This extension allows you to draw a Cartesian grid in Inkscape. +##There is a wide range of options including subdivision, subsubdivions +## and logarithmic scales. Custom line widths are also possible. +##All elements are grouped with similar elements (eg all x-subdivs) + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Fraanklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +''' + +import inkex + +class DotsToPathPoints(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument("--tab") + pars.add_argument("--endpoints", type=inkex.Boolean, default=True) + pars.add_argument("--controlpoints", type=inkex.Boolean, default=False) + + def effect(self): + if len(self.svg.selected) != 2: + inkex.errormsg("Please select exact two objects:\n1. object representing path,\n2. object representing dots.") + return + + nodes = list(self.svg.selected.items()) + iddot = nodes[0][0] + idpath = nodes[1][0] + dot = self.svg.selected[iddot] + path = self.svg.selected[idpath] + self.svg.selected.popitem() + self.svg.selected.popitem() + bb = dot.bounding_box() + parent = path.find('..') + group = inkex.Group() + parent.add(group) + + end_points = list(path.path.end_points) + control_points = [] + for cp in path.path.control_points: + is_endpoint = False + for ep in end_points: + if cp.x == ep.x and cp.y == ep.y: + is_endpoint = True + break + if not is_endpoint: + control_points.append(cp) + + pointlist = [] + if self.options.endpoints: + pointlist += end_points + if self.options.controlpoints: + pointlist += control_points + for point in pointlist: + clone = inkex.Use() + clone.set('xlink:href','#'+iddot) + clone.set('x',point.x-bb.center.x) + clone.set('y',point.y-bb.center.y) + group.add(clone) + +if __name__ == '__main__': + DotsToPathPoints().run() diff --git a/extensions/fablabchemnitz/draw_directions/draw_directions.inx b/extensions/fablabchemnitz/draw_directions/draw_directions.inx new file mode 100644 index 00000000..0f7a52ed --- /dev/null +++ b/extensions/fablabchemnitz/draw_directions/draw_directions.inx @@ -0,0 +1,16 @@ + + + Draw Directions + fablabchemnitz.de.draw_directions + + path + + + + + + + + diff --git a/extensions/fablabchemnitz/draw_directions/draw_directions.py b/extensions/fablabchemnitz/draw_directions/draw_directions.py new file mode 100644 index 00000000..88024e77 --- /dev/null +++ b/extensions/fablabchemnitz/draw_directions/draw_directions.py @@ -0,0 +1,33 @@ +#!/usr/bin/env python3 + +import inkex +from inkex.paths import Path +from inkex import Circle + +class DrawDirections(inkex.EffectExtension): + + def drawCircle(self, group, color, point): + style = inkex.Style({'stroke': 'none', 'fill': color}) + startCircle = group.add(Circle(cx=str(point[0]), cy=str(point[1]), r=str(self.svg.unittouu(str(self.options.dotsize/2) + "px")))) + startCircle.style = style + + def add_arguments(self, pars): + pars.add_argument("--dotsize", type=int, default=10, help="Dot size (px) for self-intersecting points") + + def effect(self): + dot_group = self.svg.add(inkex.Group()) + + for node in self.svg.selection.filter(inkex.PathElement).values(): + points = list(node.path.end_points) + start = points[0] + end = points[len(points) - 1] + + if start[0] == end[0] and start[1] == end[1]: + self.drawCircle(dot_group, '#00FF00', start) + self.drawCircle(dot_group, '#FFFF00', points[1]) #draw one point which gives direction of the path + else: #open contour with start and end point + self.drawCircle(dot_group, '#FF0000', start) + self.drawCircle(dot_group, '#0000FF', end) + +if __name__ == '__main__': + DrawDirections().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/dxf2papercraft/.gitignore b/extensions/fablabchemnitz/dxf2papercraft/.gitignore new file mode 100644 index 00000000..3b6d0df6 --- /dev/null +++ b/extensions/fablabchemnitz/dxf2papercraft/.gitignore @@ -0,0 +1,2 @@ +/debug.dat +/delete_me_later diff --git a/extensions/fablabchemnitz/dxf2papercraft/dxf2papercraft.inx b/extensions/fablabchemnitz/dxf2papercraft/dxf2papercraft.inx new file mode 100644 index 00000000..ae37c044 --- /dev/null +++ b/extensions/fablabchemnitz/dxf2papercraft/dxf2papercraft.inx @@ -0,0 +1,81 @@ + + + DXF 2 Papercraft + fablabchemnitz.de.dxf2papercraft + + + + false + false + false + false + false + false + + + + + + + + + + + + true + 0.0 + + + + + + + + 1.0 + + + /your/dxf/file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ../000_about_fablabchemnitz.svg + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/dxf2papercraft/dxf2papercraft.py b/extensions/fablabchemnitz/dxf2papercraft/dxf2papercraft.py new file mode 100644 index 00000000..d2447059 --- /dev/null +++ b/extensions/fablabchemnitz/dxf2papercraft/dxf2papercraft.py @@ -0,0 +1,148 @@ +#!/usr/bin/env python3 +import sys +import os +import inkex +import tempfile +import subprocess +from subprocess import Popen, PIPE +from lxml import etree +from inkex import Transform + +""" +Extension for InkScape 1.0 + +Unfold and import DXF into InkScape using dxf2papercraft. This is some kind of wrapper extension utilizing kabeja to convert the dxf output from dxf2papercraft into SVG. +To make it work you need to install at least java. + +Author: Mario Voigt / FabLab Chemnitz +Mail: mario.voigt@stadtfabrikanten.org +Date: 11.09.2020 +Last patch: 18.04.2021 +License: GNU GPL v3 + +Module licenses +- dxf2papercraft (dxf2papercraft.sourceforge.net) - GPL v3 License +- kabeja (http://kabeja.sourceforge.net/) - Apache v2 License + +ToDos: +- in case of errors maybe think about adding ezdxf library to filter unsupported entities (similar like done in dxfdwgimporter extension) +- maybe add some DXF model preview tool (maybe a useless idea at all) +""" + +class PapercraftUnfold(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument("--tab") + pars.add_argument("--inputfile") + pars.add_argument("--resizetoimport", type=inkex.Boolean, default=True, help="Resize the canvas to the imported drawing's bounding box") + pars.add_argument("--extraborder", type=float, default=0.0) + pars.add_argument("--extraborder_units") + pars.add_argument("--scalefactor", type=float, default=1.0, help="Manual scale factor") + pars.add_argument("--nomerge", type=inkex.Boolean, default=False, help="No merging of faces into single polygon") + pars.add_argument("--number", type=inkex.Boolean, default=False, help="Print face numbers (labels)") + pars.add_argument("--divide", type=inkex.Boolean, default=False, help="Draw each face separate") + pars.add_argument("--overlap", type=inkex.Boolean, default=False, help="Allow overlapping faces in cut-out sheet") + pars.add_argument("--hide", type=inkex.Boolean, default=False, help="Hide glue tabs") + pars.add_argument("--force", type=inkex.Boolean, default=False, help="Force glue tabs, even if intersecting faces") + pars.add_argument("--split", default="", help="Comma separated list of face numbers to disconnect from the rest") + pars.add_argument("--strategy", default=0, help="Generation strategy") + + def effect(self): + dxf_input = self.options.inputfile + if not os.path.exists(dxf_input): + inkex.utils.debug("The input file does not exist. Please select a proper file and try again.") + exit(1) + + # Prepare output + dxf_output = os.path.join(tempfile.gettempdir(), os.path.splitext(os.path.basename(dxf_input))[0] + ".dxf") + svg_output = os.path.join(tempfile.gettempdir(), os.path.splitext(os.path.basename(dxf_input))[0] + ".svg") + + # Clean up possibly previously generated output file from dxf2papercraft + if os.path.exists(dxf_output): + try: + os.remove(dxf_output) + except OSError as e: + inkex.utils.debug("Error while deleting previously generated output file " + dxf_input) + + if os.path.exists("delete_me_later"): + try: + os.remove("delete_me_later") + except OSError as e: + pass + if os.path.exists("debug.dat"): + try: + os.remove("debug.dat") + except OSError as e: + pass + + # Run dxf2papercraft (make unfold) + if os.name=="nt": + dxf2ppc_cmd = "dxf2papercraft\\dxf2papercraft.exe " + else: + dxf2ppc_cmd = "./dxf2papercraft/dxf2papercraft " + if self.options.nomerge == True: dxf2ppc_cmd += "--nomerge " + if self.options.number == True: dxf2ppc_cmd += "--number " + if self.options.divide == True: dxf2ppc_cmd += "--divide " + if self.options.overlap == True: dxf2ppc_cmd += "--overlap " + if self.options.hide == True: dxf2ppc_cmd += "--hide " + if self.options.force == True: dxf2ppc_cmd += "--force " + if self.options.split is not None and self.options.split != "": + dxf2ppc_cmd += "--split " + str(self.options.split) + " " #warning. this option has no validator! + dxf2ppc_cmd += "--strategy " + self.options.strategy + " " + dxf2ppc_cmd += "\"" + dxf_input + "\" " + dxf2ppc_cmd += "\"" + dxf_output + "\"" + p = Popen(dxf2ppc_cmd, shell=True, stdout=PIPE, stderr=PIPE) + stdout, stderr = p.communicate() + p.wait() + if p.returncode != 0: + inkex.utils.debug("dxf2papercraft failed: %d %s %s" % (p.returncode, stdout, stderr)) + exit(1) + + #print command + #inkex.utils.debug(dxf2ppc_cmd) + + if not os.path.exists(dxf_output): + inkex.utils.debug("There was no DXF output generated by dxf2papercraft. Maybe the input file is not a correct 3D DXF. Please check your model file.") + exit(1) + + # Convert the DXF output to SVG + wd = os.path.join(os.getcwd(), "kabeja") + proc = subprocess.Popen("java -jar launcher.jar -nogui -pipeline svg " + dxf_output + " " + svg_output, cwd=wd, shell=True, stdout=PIPE, stderr=PIPE) + stdout, stderr = proc.communicate() + if proc.returncode != 0: + inkex.errormsg("kabeja failed: %d %s %s" % (proc.returncode, stdout, stderr)) + + # Write the generated SVG into InkScape's canvas + try: + stream = open(svg_output, 'r') + except FileNotFoundError as e: + inkex.utils.debug("There was no SVG output generated by kabeja. Cannot continue") + exit(1) + p = etree.XMLParser(huge_tree=True) + doc = etree.parse(stream, parser=etree.XMLParser(huge_tree=True)).getroot() + stream.close() + + dxfGroup = inkex.Group(id=self.svg.get_unique_id("dxf2papercraft-")) + for element in doc.iter("{http://www.w3.org/2000/svg}g"): + if element.get('id') != "draft": + dxfGroup.append(element) + self.document.getroot().add(dxfGroup) + + #apply scale factor + translation_matrix = [[self.options.scalefactor, 0.0, 0.0], [0.0, self.options.scalefactor, 0.0]] + dxfGroup.transform = Transform(translation_matrix) * dxfGroup.transform + + #Adjust viewport and width/height to have the import at the center of the canvas + if self.options.resizetoimport: + bbox = dxfGroup.bounding_box() #does not work. why? + if bbox is not None: + root = self.svg.getElement('//svg:svg'); + offset = self.svg.unittouu(str(self.options.extraborder) + self.options.extraborder_units) + root.set('viewBox', '%f %f %f %f' % (bbox.left - offset, bbox.top - offset, bbox.width + 2 * offset, bbox.height + 2 * offset)) + root.set('width', bbox.width + 2 * offset) + root.set('height', bbox.height + 2 * offset) + else: + self.msg("Error resizing to bounding box.") + +if __name__ == '__main__': + PapercraftUnfold().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/dxf2papercraft/dxf2papercraft/cyggcc_s-1.dll b/extensions/fablabchemnitz/dxf2papercraft/dxf2papercraft/cyggcc_s-1.dll new file mode 100644 index 00000000..385435f4 Binary files /dev/null and b/extensions/fablabchemnitz/dxf2papercraft/dxf2papercraft/cyggcc_s-1.dll differ diff --git a/extensions/fablabchemnitz/dxf2papercraft/dxf2papercraft/cygstdc++-6.dll b/extensions/fablabchemnitz/dxf2papercraft/dxf2papercraft/cygstdc++-6.dll new file mode 100644 index 00000000..2903adaa Binary files /dev/null and b/extensions/fablabchemnitz/dxf2papercraft/dxf2papercraft/cygstdc++-6.dll differ diff --git a/extensions/fablabchemnitz/dxf2papercraft/dxf2papercraft/cygwin1.dll b/extensions/fablabchemnitz/dxf2papercraft/dxf2papercraft/cygwin1.dll new file mode 100644 index 00000000..3f312967 Binary files /dev/null and b/extensions/fablabchemnitz/dxf2papercraft/dxf2papercraft/cygwin1.dll differ diff --git a/extensions/fablabchemnitz/dxf2papercraft/dxf2papercraft/dxf2papercraft b/extensions/fablabchemnitz/dxf2papercraft/dxf2papercraft/dxf2papercraft new file mode 100755 index 00000000..c9ee93d4 Binary files /dev/null and b/extensions/fablabchemnitz/dxf2papercraft/dxf2papercraft/dxf2papercraft differ diff --git a/extensions/fablabchemnitz/dxf2papercraft/dxf2papercraft/dxf2papercraft.exe b/extensions/fablabchemnitz/dxf2papercraft/dxf2papercraft/dxf2papercraft.exe new file mode 100755 index 00000000..3ccb5730 Binary files /dev/null and b/extensions/fablabchemnitz/dxf2papercraft/dxf2papercraft/dxf2papercraft.exe differ diff --git a/extensions/fablabchemnitz/dxf2papercraft/kabeja/INSTALL b/extensions/fablabchemnitz/dxf2papercraft/kabeja/INSTALL new file mode 100644 index 00000000..bd46c089 --- /dev/null +++ b/extensions/fablabchemnitz/dxf2papercraft/kabeja/INSTALL @@ -0,0 +1,26 @@ +Binary-package: +--------------- + +Windows: + * double-click "kabeja.exe" + +Linux/Unix: + * sh kabeja.sh + or: + * chmod a=rx kabeja.sh (only ones) + * ./kabeja.sh + +Other: + * java -jar launcher.jar + +Buidling: +--------- + +You need Ant for building (http://ant.apache.org). + +If you want to build the Cocoon-block you have to copy blocks.propterties +to local.blocks.properties and edit this file (set the path to the Cocoon-libraries). + +try: + +ant diff --git a/extensions/fablabchemnitz/dxf2papercraft/kabeja/README b/extensions/fablabchemnitz/dxf2papercraft/kabeja/README new file mode 100644 index 00000000..ca9acf66 --- /dev/null +++ b/extensions/fablabchemnitz/dxf2papercraft/kabeja/README @@ -0,0 +1,148 @@ +Kabeja is a small library for parsing DXF-Files and converting +this to SVG. It is licensed under the Apache Software License 2.0. + + +Limitation: +----------- +There are not all Entities of DXF supported yet. Text-Entities generate problems too. + +Supported: + + + *Arc + *Attrib + *Polyline + *Circle + *Line + *Blocks/Insert + *Text + *MText + *LWPolyline + *Solid + *Trace + *Ellipse + *Dimension + *Image + *Leader + *XLine + *Ray + *Hatch + *Spline + *MLine + +Planned: + + + + * Tolerance + + +You can use Kabeja from CLI (Command Line Interface) or embed in your application. + +GUI: +---- +Windows: + * double-click "kabeja.exe" + +Linux: + * sh kabeja.sh + + or: + + * chmod a=rx kabeja.sh (only ones) + * ./kabeja.sh + +Other: + * java -jar launcher.jar + + + +CLI: +---- +in the Kabeja-folder try: + + * Help and pipeline list + + java -jar launcher.jar --help + + * Convert to svg + + java -jar launcher.jar -nogui -pipeline svg myfile.dxf result.svg + + * Convert to pdf|jpeg|png|... + + java -jar launcher.jar -nogui -pipeline myfile.dxf + + +Normally Java uses 64 MB of your memory, to setup more use the following commandline +switch: + +java -Xmx256m -jar ..... + + + +GUI-Viewer: +----------- +in the 'lib'-folder try: + + java -jar kabeja-svgview.jar + + + +Cocoon 2.1 (XML-Publishing-Framework http://cocoon.apache.org/2.1): +------------------------------------------------------------------- + +Copy the 'kabeja.jar' and 'kabeja-svg2dxf-cocoon.jar' to your WEB-INF/lib-folder +of your Cocoon-Webapplication. Then you can use Kabeja as Generator like: + + +in your sitemap/subsitemap: + +snippet: +-------- + + + ..... + + + + + + + +.... + + + + + + + ... + + + + + + + + .... + + + + +Note: DXF-drafts often real large drafts, so the SVGDocument will consume a lot of memory. The Generator is +Cacheable so the first run will take more time. + + + + +Feedback and Help +----------------- + +Any help and feedback are greatly appreciated. + +Mail: simon.mieth@gmx.de + + + + diff --git a/extensions/fablabchemnitz/dxf2papercraft/kabeja/conf/parser.xml b/extensions/fablabchemnitz/dxf2papercraft/kabeja/conf/parser.xml new file mode 100644 index 00000000..6e3c47fd --- /dev/null +++ b/extensions/fablabchemnitz/dxf2papercraft/kabeja/conf/parser.xml @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extensions/fablabchemnitz/dxf2papercraft/kabeja/conf/process.xml b/extensions/fablabchemnitz/dxf2papercraft/kabeja/conf/process.xml new file mode 100644 index 00000000..840caa96 --- /dev/null +++ b/extensions/fablabchemnitz/dxf2papercraft/kabeja/conf/process.xml @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extensions/fablabchemnitz/dxf2papercraft/kabeja/conf/ui.xml b/extensions/fablabchemnitz/dxf2papercraft/kabeja/conf/ui.xml new file mode 100644 index 00000000..29672b10 --- /dev/null +++ b/extensions/fablabchemnitz/dxf2papercraft/kabeja/conf/ui.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/extensions/fablabchemnitz/dxf2papercraft/kabeja/doc/userguide.pdf b/extensions/fablabchemnitz/dxf2papercraft/kabeja/doc/userguide.pdf new file mode 100644 index 00000000..d8911349 --- /dev/null +++ b/extensions/fablabchemnitz/dxf2papercraft/kabeja/doc/userguide.pdf @@ -0,0 +1,1000 @@ +%PDF-1.3 +%ª«¬­ +4 0 obj +<< /Type /Info +/Producer (FOP 0.20.5) >> +endobj +5 0 obj +<< /Length 112 /Filter [ /ASCII85Decode /FlateDecode ] + >> +stream +Garg^iR2p+<%p5Z1Je?Kj"^U3a]o#Wl!/rM#!ck#?t,8-jCLh;`e=bc,R[K>=W=Z*Ail1!t_?Bqt$5,r~> +endstream +endobj +6 0 obj +<< /Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595 842 ] +/Resources 3 0 R +/Contents 5 0 R +>> +endobj +7 0 obj +<< /Length 1506 /Filter [ /ASCII85Decode /FlateDecode ] + >> +stream +Gb"/k?$#!`'Sc)P'tt(mlfq^FAb.q8FuJ$.Cj2c@K`a)Q$b"YFD"caf!cp'6b3nW'=bk)/JCeid0]taMGqF"u)Z4];""ZbQN042KV?7e\o7mE7=bmn*,j$8f1)S8g5E85'rCd`S2af.e+%LU^I6Pr_>%_t8%/pZ)DqE6sFgIPa'b:n9!eG?ipq";203,.;gK&dPT,).?kNeGj@);3_coe-sKu+m;^.c)S@Y4aB1usT4('LjlpL5%GGf2u&KNr+h*RA>%?B3Jc0#+Kpn>(=)>mqn[J@QM];(.lpj$c"uUtKht@8c6i0'jolP[iH>EY;8sO?S'o?N.,ZEQ%nl(JDVu2BfPp0"9nHRLuo#iY=RTM&oosQT^Shi!BQd\\M]1A51-:5+fmKA>No"\cpYuC^`/n.Q.8Xbb,1*>h^g6m"f/TnT\,b$Rk7=ONO+L2q&Jq+$YN=1Z=&3k`hD&#iJF)o`2Rb*^N\n3Uf'dgkL']sp;d1A/YB+OOFBR=&S>%g!7W]X"Z96Sb%9F1J%9gXN\`]GU?cT'@kP-tboa[8D7nSE#KO@6gG5?ul9&<-Z#(I;/SFa9.2o/mu[3().MY1**dH^c?d!gYE+nGC:PL`@N$J=:g;cbWf/aOb?CgP%ehR0^"dIFn9^=3@m]30%A&d#S`7PclsGp8H`)M5#edsT'Q3(qs@Zl<:(MP7_+K>!Q4jaT[oFnZg0+pX6b2_]^DpNj-WWkEs_pfl.L;g)Zi">JlQMJt6a:Y01&,H*Tr:jMkb"B#AI\HkS8fT`kWlMuEkn+GS?b5CGgbFr9\o4hhq@@.'Z%`30Q_+2/bXotMEjqAA'5Q%(u3*r\6L]'ZYfS#c-%2ZX:ToW'3W>j#JJE`]%IOT>B9,W.G._kB""&``1*0]7/OWfN8ferrRK)>71~> +endstream +endobj +8 0 obj +<< /Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595 842 ] +/Resources 3 0 R +/Contents 7 0 R +>> +endobj +9 0 obj +<< /Length 883 /Filter [ /ASCII85Decode /FlateDecode ] + >> +stream +Gb"0T9lJK7(^KPW5)#'PTuQOSgt:g;`f#@YBG0qoFb"7g8G)a"OAR\YCDqa&4U0a[Spf%9hS>;q>?IJ30baHPa$q_09;-+?oM/SL3;m?'_?r==#e">ut*oorf=+G5W_+/VNmPi0;X:;APd#=PeVp4'+#_q_-F4fe2Y@`.o&'BuH/L,mb?V7YgC%Wbl"iY:Z/Ml*,$ep#=[5X4tXt<^Ztnh2U/48/_:a$\8]02iZ[Pu/JY+fWT"4eR`FZ6'9YDM5mQ5D]?3W*i1g4@bX`=N2MC##\3MM,Fb5U_l_L8U7DsFO/=bU:Vn89)cgSK=P\3n2f9#cS7D6%ARr$Vh/`%Pe$D!(+7MRCu*0SucY-CCRRTm?1%3!b^s259AZdP'``OjHE5_mk3I=p^0b[m5Ge#1fI_^"J"DeU$3oP9aCCO0@l;Mjs>XkrX-M~> +endstream +endobj +10 0 obj +<< /Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595 842 ] +/Resources 3 0 R +/Contents 9 0 R +>> +endobj +11 0 obj +<< /Length 167 /Filter [ /ASCII85Decode /FlateDecode ] + >> +stream +GapXOYn"W)&4?3h$BOSiEClU(Z;q#P2PahLCpXoZ"$uiLaacO!H+#gS*K8i#S>?N2jiA&A1ca-]R!`Gr;E1=%=Qr/YdJg(`M$:>rC+)Y7&TdZ>V.uG5W#NfDRN;C.g*m8RiAOq*9-(;/;;0B9qE?"ELcatY0DtlUPTVs~> +endstream +endobj +12 0 obj +<< /Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595 842 ] +/Resources 3 0 R +/Contents 11 0 R +>> +endobj +13 0 obj +<< /Length 1912 /Filter [ /ASCII85Decode /FlateDecode ] + >> +stream +Gat%$bBDVu&DcY&\5RcML%>2`Y"kE*Vjk+qde)$p5U'kbTa1iJ/\>BI+[H_C>-o`(@:BMdg_gOg@!K@jrVXL<*1,=/2I"kcrQ;B]piEMr+L[V=OWBT=:9$Z^8lDb@g%l0:1il$b%/ZM3>T;Y/AC8%8D85=6JB_nM.]VoS6k:FRrrVRoZM9f'q6\'N)`HhF5OuPfA/:\E[hPH(]X#GM4N;6fM3E#47tE45m=pJ+gJl8X*LpN%cpr6nnk"n%\_lTQb*UB)j(%#WLh&F$W,X_a@Xipg!ReT\=%Oe/D%[;Ro=&E*3T!b'!?!O%3P>Cg!V$1RQ8p9A9H==Oom=@0i!+.J7T-p;Gb4V.VgQ^a5lTXB4mgq'T)+;=l1KZoN4)(XPiOd7A)F6$J9k%rQ7+h1b((f,/\Un8:SK6oc2CPiisK'X>fS1B4.5Aq:n,%CK5l(AGBZK_`,NVMFm"r0p'J.2P16S7Q4U\N\sF&B*sS1l?R3XkgX]#Sd17k43IZKnc;J-DIK*bb,gKZbZQfFC'U!Ipl01<(uj^S8g-cBkr7'*]^?<hSfZ=J%3nD_]4'9/39a7TUrnt=9f7Qsl^EUZ['#;r7a8BHcp9tu2J/g=U)Kc5Ef&.'U!M$_9fI_IN?.\Def;)o7g/8+k6P\"+)3"koVK-]n3]f.5e&WA05S9Q2`n`i[@"Q0ApVm^mh!2j3I1&%cL'R.4n#qg[IibciEN(I&Do6/cQcmI&B0l(+s:t!rK/rP^_0?R'`M\P26d&XJa^DMAlJYUiq@I&CS&N,loqo[8VVXaTgS1,YmZ7&.['7C!S"s7ih!?]i5AVKUa=r?eK!7QSN4p5`12^\*^dL>c4L/C(iO6=S"f%8VHifKUXYnE2:-*MU"XP[$s.bHe%Q@W7HjCHPWJF'3do6'CLg"B+Oouo*ZpMq)UoUbA-3FC0jL_n74Djrn%6jS@2]eK+lj@s!-4l+J0p-9Z4g-cVTd`?g8G`@=DW:(5u +endstream +endobj +14 0 obj +<< /Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595 842 ] +/Resources 3 0 R +/Contents 13 0 R +/Annots 15 0 R +>> +endobj +15 0 obj +[ +16 0 R +] +endobj +16 0 obj +<< /Type /Annot +/Subtype /Link +/Rect [ 194.776 497.355 208.276 488.355 ] +/C [ 0 0 0 ] +/Border [ 0 0 0 ] +/A << /URI (http://ant.apache.org) +/S /URI >> +/H /I +>> +endobj +17 0 obj +<< /Length 893 /Filter [ /ASCII85Decode /FlateDecode ] + >> +stream +GauHIbAu;j']&X:ZjU#=kUeg<,]/9"(7ils3i*5)aC+9<'da6:?c`h3h5&/';*87Ni;5M.*p[.XK/`D[\%NK2LdjWB#q=l,#Y6d?nfu"kO/Oe;%_`*XJ0>!^$Jf1P3%8)da=TkIIkQffNX1l>8'!a_lc7E0V@SS-;bTd*,GI0Z9OJ'd9;VI`rEj1jUl\h29K9i)6B#rD=J`5\7D!Zm5K\'AW_F2/g`8\N](F7qf3eXQ=b9WNQ?NW8$8mJSAg:[E:JD!ED'-$eW3>>lho\')pZa6p9[IF705a:,n@g5dg\^Ua^cBc.0W'dJ6+$umPpFr42oBQ2^-QNQn?G:oTV?d!j2ho.d1E"ekJbi=,>XL3T]1b>]Xre*hPc*k3%9NQnZ'2ldmc#O8[&#mU.hX0nQ2U=P<.E\@J4*@)3S^`obKHI7k^2OQN">Rne!NV@R:7HPg7,pBO!aQukE9W@@;H";T2^9\u,"&lCL3lQ)%[$4^E]h^J`reeLo1maUZs=LlS[&I)L4E4O&?2an)+&cC7Kpl>?b1$t\0$D#2eT`rVjjep:$X?)iCfGoU=Uk2U&UilN)6jm\l^M@KC/?<.])k63ND`C]"7Vgf/hg'oVJF:6h[P.:bEl>7;7"i1^mZY8"0Eb*etmEWr>ioRd#09L=DG>SNG'm.4-a5Q3\_J+bUt\FOHb@F'N(dn]Dd?Q`aF,0O%kbJ.YHl(CT~> +endstream +endobj +18 0 obj +<> +stream +Gb"-Vktfh's6p!F5B*e)/tL2K_WSf16B``j)A>G(#U.,'UG7afVT-WE[W.-s4h.mPTP`NZ"T`U/E2b&L$_i/"MJTTeg[#lsYTNN-IQm;>)^r#5!0;JE-i"f#L3\c#Qq'B3Z*03C`Y`3E0ub&?N%r>8M\GEq=HUj'"4E_A%,.61)T).Psuc.#_M,0&8OM2sl["b5[toD2EnTD\!pd".jR_7[P,0AmaWA-MASijN55m5Or,GpM)7L>jCrlD,L+tSdnaVC>i/cW-aNTjjr1Y\>%jUb^U@_'(O6O?X%tbXs7;@u(9f5K7N%rZ?D8d?%N%r3\8JGGa6g2,]]=/sT#)dX.sH0bt`DS!rVH`#+sqnaVC>TM;&cldL*,@]rT#ouXto!?DG,)0A:1XO*Z7dmM0sBO68/D8gA2=>7eY2N4o?MN9u\"`<$qgfBB=0uW65N3T@>O$AR,D;8/:Dl_8Z.X`C-X/'r4SQ%'&*F:/U96nr9l(sUhAM_>XUF]>BI>\qPZR%g70G_%[PBM?mY>=NXWP1Rlf/]K+5pq;F#b;\k1j"&&An5mcEEb.U/`Lgj`n480`uigS&mjl$j5CDn;nI'rBbamj,Sn?Uu'_,O)pa=%\fs1WG$A1fI>$M\os1,sM;^(:<=iG't:4:[IbR^-;AE3M6I?-\IEbSJ=1BFF'e(4ie8$1VXVkLd;gjOUD%shN0S^?3I%UFKgi:#t8?Z-JM]/q.^f)l*cYWY.BfA,2!d*$P*(^?#LgFE?PhU`.kI=CDF$\7+/NkTDplK`tom^aIe-$hlGq(C4L,C3e@Inkf5-Km1kGP?VO=Qr2Lq>"d'M*rD_DOlX$e'%jB"TR!;'>XG@(jhI$Hh7%WqD08,oo;OC)PSrQk=)l4Mho557F18U(2(0_>Y2_?$JDn+'[T^R)]*aIV#;gB7EK1d%,s`E>Wm^(a5)YIL]jL^)hHijL&*fn.t9gPXaCgPUe6'=S^c'bS\+gfE32PI%A\GaXgaC6kkGrF=0t083D]YJHsHpL-AS4`Lkla#o*%HQL&@fE^p%mPJ#cF3CfR2Cs`r,LYP_?+43=b\^H!H\[DjghmV-+SPLO$WW-O+.?D7_aecXT#1D-_nqdfL:qe>_62NH2`;]Kp<;E8&+l!-_4J7CGmp=Wk8=]`P$!?cdfhIe5sI+h2?WUNRD7o;%,BeDGFI3lL57mqlUod4aj!,dX!8)9U=k+PMVDl41V`Uor`>"!8`05R;rE":)C_:e+rLNklOtT:^'M;]n[?mARMb=*k?JFW"@?u[lg>cQGjS*puW8MSa1o]f.KUAjb36/>`^An?i/d:nD[c"iG>Y)cK0?\H%%`P_s:UIsk47hGV_JR8/77=Hb[hZ@e[hZ@e&PX`m.rHj]RO,JG\?.)l>BNPTP5`G@qHl/Ghib'jJb%6QO(%S#!a$(J=E,N,@P?iZX(j`/X`Zlp@hTR-2o+0O46/60iHRgPX>lCG92?9>:?RI#=E<^*Ua_^FPBTrN/tS!a)V=@ZFLD;f`g)B1q#45Q/3?u75G!*-92?;=i\U%3q8p+MjE.Zc<#$rJ;[Q/m^O^_hDV0*0!g]?+KZ.S]@+!X_pu0^A=Ea6]/3WS?^5je!$\b_Pk#tb%QOi))Z@YUE5F[Xau*B/YHHn,f:+I*a9e8h,u`6_@-5s>]:h'%S*/"^kjH3E9q9@*-p6HLGE%$X0BLNX3STA,C,"WmgUX;@*.XW=Ea6MX?:MBiZoOIq?j;?P"lN.,"e319q6*m'/(b:fRAidj>?h1i6/0%fp&$C2aTKdB6\_m2Y5i.iNpYiKaM2"pT.gn!'$r5]7JEo]+UE&&Ma4S0%_S9Sm1q>us(cA$0PF(&@%4tJd%?o[]kIQ3i"5G#rHmuP/57E>#X]9C5'j09tN-+akK])/-W@+]W_#Nd,LKLJCP@,^'L=E-;6Y30#^Ts#"#h(FIo7pa*m,B$u3nJkYY/.\WUkCeY'Jn'M=nF0WfNW'1^\7[VQ[D944NX*G2R[!JChjot_)`KtbpYM,+Vp`lmI6J!R$Y'X4%En^XM&$:rRl@qZ?KlA0:(p_uR&Gr[L[\qZnmX)&iBC/.7qf(NA6>rPdg^^H/(A)TJEKW^jBoM!4[)*casr!SIm8[AJ!\$(6Ns^`?kt:Spmd.R]_5pSG6_HjP5UfQlbYGkp3/f\^B76gc\Lu`h1kS=b+[>B#IY+0Z,7):r:L3ZI=:&CqOt'm%pmb2@/7W#OB_1)3e&5NFnEJHMn)[4ie4ACc*2TQ6`BJ=K-HAMWiZYX3VjSY*de+e@(p`4#.XRo&0:KH;KAm9lKA7W.kf+=hOAZ8JOt-s?eZf$f/c9do%Q:4c5d\lk?^"_$lVd"UrKSkbE2D!E>QJW(X5MFL#&n_YJ[a7hmPLHZVuci4)c@(`PKP(jFW)VB/.'N4LjTZduZ*H:+_,Aaqh$l`+qi4"qk#[&/YhsGmo$P0rcY@,2_4Rj=6rjW?JV;ouMl&MRg6cY#.'-/Vb@Ic'Yqi7^'IK.2tdbLs+@DQ;2&@F_9(B3t4iNK?/nFskg2nY"D(-EDZ`H-ILF3X[LQ/QZ!JpgF'>LGlXp%f@;/UK/;l043U8?9r'-gigqR12r4`^4rluB,Hs8XJOnMHO`kskMj%(lmbZ9C2*:NLJU9%Y?>LNJ`FM9qSofeBHOo8Y4Im=o_ho@r&[$)g7,<*ZCYT0U\Yduh7WlMm\V3n-Sj?oRA!e?b$aq=X6b2"VWV<#P9h-;,f_65#jjub08JUSTFqG^BIB[8&:l=rpH]R"b%S,l3$'?4Vo1WB>_8,quM:RbTiJoqZQ'Zp(&]:OpBkdIfhnVc[k*4?DnF3iiQ=/+pXF(Hir7HHOGa-(m^[+a54V+UMjSm_^>0SfJ?WUpc7P.U2SSuU8)X7nVJI-Yla]4eReOT8A=%N#qS7=)I@dei54Le\0U]F99/2OU=1EmnE;BiZgJIMMg\upHZae]".1&)G`[_52dj<5/"Mj+8if+WN9ECO_4hT47h)pB\()0V`6HeQnQ4.T37ii`Wo^\K[[Pk[N&1-3HsiHRkF1lFHu:HP.rHkT/"UO^+1ca#l#j-8s&I6Z`GIK=*uJYU\bNs")pU>"&,=p\gf@cu>I@#`;P*MWMYJb@k5LJQiI.L7INA"XSZq6m0$N4%"6TT3)kqer#E_+9_i4UUjLM/U>SD7qRKmBq!@".H*fTP(m$P$ddgjLgaIqQYXlVesAf6rJ1OY6&0j7d9;mqE?<.2c/X4/?@aZD>r:a,&"S*A#uHgfAf5Ro\^@Vut>pEs:q3a)ZO:XgkKbiTHB*kAp9o!6bu0u%9"H\#flRD7[bZJ\XZ%D4lSZS;D:%Qk_mt[A@->X"fRD2On&,C.[Kb[YMpGd[oL4Rl:5,Xkf-"Po%E"K9TB#($r%f[0qd,n;*1grgcSa_n3*XZCrqh*Lh=eXgq$r'p8V>CR)\BF;/qcZ#K8=A'+`)KdKPsJ;W9=UCp\,Uc?&%i#=!;,?@gLh:*MTtf5ie4]nE\bO:tjS-5G!60+jh_M]&=jsUM+31%1%m+$$3Q11&UR_Yl,_u7:1h\>>l[B[n@:dJ'Yq!%j5\()FXLP)a^;!JadMjTQa]&[PS9I@L1_7#=>m`JFG/T0]RWmH*3Q[Xr2`)l$':]#GU,E_:KXS+Cn9>iQln(IO$fZ6=VboI!6?Zm`^EIR+DoGf/oA+-P&Q;]Jf,)BonC')j:dU0s;^9G8>jJIfuIWZ9U'!n5XgBM]DN<\f23l2[_r]1*JJTm!14h`%+2k*e_JG2XG_n@BhKElZG-/I/@3eeiOGKm662PGSpHG+5T@DVSLO+2X.Gf8^cjs@moL:%MkThgfE32Ht8]qkF1oGS1Wp`[c4_&L7^i)CF5Wg`ZK0rSVu6[gPXaCgPY/$eoT+2"4!3REEdEe"iJY0cSZB^2<,3,rQ`B!`GP:e[T/Mj.cj9HV/Jq[=27h14>ab,]204@V7fUWHpYqI4V2T)cR&0@#ETf\i5fZm.rht7&fG!6/E9R'5@K^I'=OI\&`J(CD_kcS/XbUWt`^Xu%tG3"1&,\6XbR'S"R"t!>D/k#'OL2Y\@6MREn#'hmEGei4$.ZB/W3?,-<:XWk>TQEKJl(MTTkD9ZaDC]TT+pq*#o\OsEZ?9P3Fl65)FE%%5h*A$&@qXniR^F.[It;fYDG&_pi[a4Xbqc#2.sk,@BD^"@B30hGlMp'^r9%Udmo/&0G2Q'&cE5OYiZ(AY;8GM7P9nt-R>RK9/6SUed=a$:a0US9D/A99RpD,#`*9c%4*k"?73+uW_WW%BHQbuZ$.o-M`kceWWhYh9R*IEA]>'dC(kL[ZnI+C_ZC0,(n\'$T6Z)O8-]$maA'd2bpa2=I0CfR?&"1!9+Vhd&a"tTrnf[W7BJag=F1JKiB:r+6-ru-hlaQo5>(rWg+OaD3^%SDE*I]+)Iq_r^5?pi^d(/=/7dqkWfr\!(jncfT<=].>[hZ@e[hXB=:"$TI.uEG@dJP'H[c4`a,nGqs=7DaG9-/'GS;Z-ZgFB/1eXY1[E$Mt3r;J;S"Fg'e!(k[d6Y<-MEU@JFb,6o.2W=-r-%5Z]mdFETsJeD1urFL2S,eJWmtc;)b53hWf8?t*A!+CDLoklu=bi0@koB11&,8O\USJDUJ^0k'jIp;G+g\KWH9,"*])&$gIam'$/cpcY7r`f>lf\qoU)U[)gS+Yp'D-K7T`=Q7+MSrX1AY#IjLD+o(BWu0d+-eOJNu0X+kd$QNm:r:"T0rmHdoh?1N&9Qde%bXJDPE3h499q6Y]X.bZT96\?39CLhLD\[c4_>U03*&MVF$CMVF#E-5F!)[hTM"'&6OC<^F-q^0Qp*WL63%h:2sOD*IHrG=(ZQ4n.'p=?(cj)!p+a$iKu6fX^lTd#S>-r^$J]G%_\C[UF:]^ZNF0.qhL:VPY<#ac'NMD6l7M[;TOcc's"RraSKJ:;3Sf+W].[LRps)%TV^rXSG*Ga+EJ'_fm\Us2LK]ee1k8MkOgHZk?#4t-eIcQjYNqt`df)P5R0HT(8GlUe>f]F3mhem$g*qk(bBJ]JFH3\pl^FISB!.A=kCY)>.0<_OXL6U1%cmS2]8T/qT'5,t(-O0EsgOUCni:k%&)$%0';$+R+IXnWIJF7EMapfsRR+L`)peb&_DD5NmTfH*;&Y3C)3;&tbQMVF$CMVDll5/ctr4BF5,CD7$7[c4`aIfH(ce8kfJ!sm41^!8L8"*.Uc>6WE_R^;EE>feAoQeM[-^CM<55CE.s=5`Uo^ub+'VN'oWj)MugP0<6GkF#+Rf?W9iAnqRR[gbH+s)?b2+6ZfgFZL!B*Bj\!&(gli*'q0'IpVX-381s9!3Pjm$J_02lo.AMQHu`ZA+G9^o6ST\]P:phfZfMFTkMj$sY/rblq*F/,8"5&77*rtUo?HcNK\%TqkqsDUJ_`MBI]oFdrq$e,+4Z-kY`qZ:_7l*)JNc0Y3NQJr!q]TEn,!L\5CB*ke>Ku)]31c&k$ANVA>B*jNeINqO`H1QSPBSWs.rMEGg/deM;#^OkRjIK5kn$2WiQOp6@JUekd=oL*_[,/%Ue8\ZNBD\?-TXN%r?)\Dt#<:A8TOGK[rq"^n_uKFM`M2s;>UF&N0CX>\F$ktcn[`$*BfFIlH'qL`sDe)5l/E!T;GqWoU51V8Y<3Op#u!Io<\/sa^MMCrtB?bZE*D0uef'DC]TTDC]TT`Y`3E0fK$@X_,ec3e./M['Wr.WOWlb>:lLt">.kmct]h:IS.B>^kJUq.7C`n[>Z=.))I>TF-8.)^$osg%B3[^Xf&WuY??AQ8u)^?:QkMhlHfBANl)]DN%r?)Vs-!>oD`!fcSM1b.jY)C&kQGKAU\6o(]GL*;L0qZ[VBMjK"BNF8@i.2F4QidDC]TTDC`^D@uN,XCiN[!>B*k]gfB@g`Y`3%b]-i]pMKTjWd%(IT+?p@bu!"g&,"1!d*PSo9o\gBhp;K8N%rQ#IX5I:t*bsHM9>If0Wbk,LeEe(h8N08ZPn?-bskfIVPm$,F_Hmq[D\sd\!Im\pC)5gu"*7Kj!4N]P'k<1W`n9p@gPS^AgfE32N%r><,Gde@-FH;FT99s)cW[6S6&'j=h2_'3&dX^GRr0ub&?PFqY(UX;$gT#+^NVHl72obCU*.@^5m9Z=!t;$@XK(ILc6JYB#5]SE3_6V0iu'G_L9gsUq/U1,N'.=m(pDkWu2cqm[C`C96hs-niH-m$)H8`0!d+mD/Y@Z3%](`Q!AUs&\8G#M.7?f2]g^Zc$5H(N'8tcnCobEb]f;#6q>L$haXC?>6[j#*NX,p,X3^[IFAC<.rHkT/&iE9N!4:X<\A9jWJfMggPXaC0ub&?1F?ui(UqrE`GIL+f3>A7LQm`An9P2pE4Vaj@KVt;"5Yq#[+aMCNjXh^R$77\!?b6N%rc:Q[b9X93,HBI`GNS2`>E*DZ!`UHC?2n,^2Vk.gfE32N%r^eah5(Sh_sdjVWgcQ0o37S@UHTds?.pa@QLt/2&$`+YI%3SrT;tc\D)AO+X3C]?Ft6gDoH(NE\?39C(h8LZ(p8$KqYXZJ6+)CE'2gs/CY3U=KLBG=cl[(6])%p5r/E-j_*OS=G[/hVbM-,lNqVQS[rl*Q#tiIIsfdbn\C!PHS$LZn-[TLI8Uk/0ubOaIH'4NFJk)[bKZeO5G]H9QLp$.D@lc2q3q!"oiq>BAP3V5UU4@UlWGh('lK729)hF,Cpa5)hFh;*)G-Rhl?>HDr?[jB\6%B,eOt3eb9ah4@jV(']eaRtl_MSL6)d]7+mG!D/Esj10BoLe)eP[[H7jVdC]9.H$$mRa9.RBls4(eh^r;'T^hq&-`GNR2@uR[#Nn]HGMVF$CMVF"C`Y`3%r,Gq\>B*llN,<_5E=mHNIW2j2L,M9[l`E3/]:dhdLK8]@p9\%J_"$A`9-8E6AT7B=//7.eLV1i5BIJ9/?:u#X*6mD`fKe%dX478_Aac>bI3Gu,#@LqD3UC._]:cal,/P\XQm6/AW/@`)#O6TS&d8IZae>m6@D&$+#-P@rMI!N,tX`9?]^-jh%tBk\uc`@o-O>N\pt]pY9^fQYGF!'7+09B=OV?U="TO+afU""*@q_s[?=9.4o69L=jlR)K;?!G46`lC]2E:.hW?iH9hFfG'iLp)fCMW27ae3-HC4h+O0"[&s(irPHFG.jHCOS'\Z*:DqL>B8_9rB$*Y\^c't4pe'k<1W`e#RU.rHkT.rHkT.rHlW(h8Ma5Ahuh.rMC*[]MmJ?%dkmDnot+J^;pPA*Fbi6@a8:f^a0qMMNV%0ZX)#b4pS<7E`i@:Ks%r?DO?>e'q4ca*Q%cMGkRrlsB4Xn5Q:N%r?_ba6^qWfo_%UL0jAS_c(!EkV!WP.iR5J94i??(`j3dKMI/8sf0AT\c7S8Va!g\Lo#<*Z\BV-/DUqOtL*IO`ciDX6.B9ro;S?Uj'>OJ90.%8O(YYfP"r4K"@7[8@i.2gfE32gfB@g`Yb39\?39C\?39C\?39C(h8LZ2ZC4g\?39CB'QgnZT8,Mm_8jrY64-7-a\)?K>-3B];Go!S"$+NW>>-(fB$ZH^Uk&Kh#@K1>o2Gs?QlZPQiA/%J,\>[?b_/7WtmtmVKH9j\=ok2'M?Qk^_^Yhh,YT/".WCFPh.h1S,*>FfWY[V',*Y2EGuEF#huA90ub&?m(Y?kBLk@a0=0)>_WLeSRe4er3Ji2QT82`JN[c>\**&0Y<4s@OLjlNRP.h15mYb)n>tIP>GrOu2cu5U"0n4E'(OA7,42LjV\l4ndqAQUW8M?hli6nU'GEdPE=-C9a9j\"qX/*3pYAg)/mi/I>kGb9/;_@6*p"AREknhHh+6q15q%$6hH!O=WUj+?adUd*,DM/pJrdGGu>B*ke>;=,7@r/1)[c4aT[c4aT[c4`)N%r?)puAgB[c4`an_5O(h$)/BA[Arjd*W"KFr0fCp4CQWKY"$]d-l*)r>)m`NSq.XK8f[hiPM9"GlM:Te3=Crg*[L%k4UR_Z76iANd>Zs]hhs3"n0XW_;!?A2Q%#>Fr*-?*[n(+JD@/>#[=VNgFlA3qt8q6-sUqMr*aD6^0J%50Z[F!Q.&%*u`E;j/ebZUJBgfE32gfB@g`YeTiEEf[SM;*pBMVF"C`Y`3l4DlZ-+`U]ioKAG&d:1jm7qKWQUN*?Qh'-[it,2o0h-*V8u#l'rji,mVf@J@S7P4qdRMW+]>7ZEF[1L&g3G^p.#5%(Tmo=f-:Ud.SWh(rb(h;pidWqQ_P4dL^H+?UT9r@RE5Pc:j$;!IV\$4GJ^)T_ReX&DD/Bn#11&[jeiSX5C8`i6]]gDZ59b!*/^TsN0W=]d3('(fY[hZ@e@uN.^VCHI62Bd'EEEdEe0ub&?CmN+Y`?ljJX'jdb@I#R4>hU^4=<,]8fa0RG&)')Hi,H9$VQg;>)scEoqAlfN]O8"T_<2;YX2PBoWuHH[#(rfcXL;_SZ.QnXn:JR:K$ofK-nd0&%Y#FBC^u*R#u6sug\)YlC>Egt_p?*7MUcK-h`oRu9)na+h,`Z.Rl\P+@uR\m:7inU85jObo]`hK;)CL=fB:fKBCG\Zs"42!;Rg7DA8D<'cWgA>dX,:bAUXfK^=0fF7"51@?DZ3%%!?\M:t8YY$$Qc-gPXaCgPR`*(h6JZ[hYBo\?39C\?-TXN%m66j0iD1'":jpD_&M*'(3C5O2he0Ws7:i]#!?G6>'@9<7Wlk6[]WDh+e1m5Rs^8#nDa,jn+)Di<;lT$^rXO\$$H]%\GH+;Z@Is8P'MYQ^0m,HTO4SG0iroF4e;]0AQ-n4Q(s?MZ]3I:b[[oD';'n^@H#oG'Mrni3s0r?F"7=S#2B7edYH5Bl]p6DLK]XbOuQ3_6dP%_/XNXgkJM@uN-#JT4n6>CH=WXgkLCXVbQ,0fJX_[c4alno7k;osS$=&*NEC6Xukpr9XMu[+JgF'j,W,<7NlFb,QRI/Ie3[$eXhui,B$Y"e6('Ye_]&`[:%[ZWY*gMVl1(P0u,T\$puaYL2G7X'jaG,Ulb35'\3oiCq)W'B8'T3fMS@uO.253j#uGqS>#Xm=m6@_T_Dp_6%*G[8aqk^(%D^5ZrfeQ,a=s%bINeC?m5H9TPUP6frEgfE32N%rmbTJ$2O$5E[_?(h7C%<$>81dS6MZd:]@p8Y;''n:X*2kKBK8biq^DpQ'c!X!-N3R_`uJEEdEe0ub&?Cbk"Y)DZ32)'$-9fXKD"6o]<6)g#;0I;R?XC'1*C%3/,%PZ?=m$:CX#?k$%@%Z)?=f4bD%0aGWrF7+UWW-7d)Vd,MGbk+XtWh@6iWL(I%^M'Q%R-gMgbp05aD/];_+3YO/qEN`>E*DZ0C*NgS$ngs"uG*oYCCK6(btg`G$YMo,\l[KX0iBs.:V05P'U'eWg]4p'/%/\?39C(h8LZp:50I%2lY*%$')"gPXaC0ub&?P7b:SOE"LLi4,o/rZ:Fs="5TRIg:sm/YK;VWblL%k2n"hX/e*72FBi)'/VU+6UQL"\_.$Y9eA\IKSJV96W5KlMC'M(]NK/B;fe^I0ZY!/AiW=RA()RFEa/FEaQ25o1t=/A7n.P_N%rE*D0uhis8[jsKq/6ke:Wd(jg@N*s`GNR2@uN.^(`P5J.rHlW(h8LZ`n:(H[Mo%OP.sojdc1D5gKb#]!ubAqi-%2uC2!]dX!+g1,,Zm]op@BgR]i0mlhLUAk-!/TFdJnrE_H6@S"qF^:JLLb).SU[`e(IHf3<[u?W'(l\=G>CH7O9i#&Yr/X3$CVCsM2>B;lF;\o]P=@>>7e;6q[d,[:VK(Ia06s)8gqA"dY@PA=%S=FI<=6/paV\NH0c!^tZ)q8+i3qXRqXT'V0f$[3%bt+?;=,7@uO.2\?.*#>;]Qb@'R((bjJaJ)B's0&C0K1H_k0FEfn;%Y&0bP\p8'HTS58%GJr2C8lnlZbehlo,h#hL%K77lWYV(Is]OE=^/PZCAeXYrdUV!X=j>Q$,oPn$G7Uj,K2\O_sf8Cs\fUta=-l&h2ZAP95&!i];MD,i1<96q!=79038l[&7:[[#>#2V=SYYd]5-D1R8QJAC:N:Kod1gjXn3D/cun:4pIG!P?ei(:sYQ/o5``_r1[/blKGp)]X/cK[&c^QdZ$pRffa8K>ZdT]@-q0_e]hGn>p#;g7YkRp`EY/G*)%U^Ps#5]%t`unU]6Y"@rLZs2a-]i4l&Otjrnqi&%e\?39C\?39C\?39C(h8N0n],LcD8gA2D8gA2D8gA2(h8Ma5AmO$g/e&jWMlb7Y^]-d?]UnY$ej<<6+<,>&Uf5Y#"_>'BZAFfN@a[a14R7?.D;1\HhYke)BZ4lO\:1%\,PO%VIHMK/6)Ci9Z00E&&RGcLubWU\NmTE&?MhS4H7.>VI.S^B"XB+2R3bGMuZ`9fSE&%]@VloUDFE9SYDqL9h]a%.!gs30SFp:*i&VZf`FG\b#RRoXR&&1@[R+YqHjY:*6u/L5VC]iPNRWE&fo^oHWPY'B.C$.hJ=l*qV3Z(G:8f7'B`XV-gAI)1d7I3hLL+oJ27>PD9gDFD2B&&gZ:?(2;^ge-7'Kf*.t;s](ejbE,"+68Zq6Z-H8ZHN18Wi?/A/,etCU)gP_g*!/]a=MCbIcNqO(NO9mTHAGcmXhN\4(MDR5sLN2l24Vn'cqU&h?GtTm05T/WsZUTLM%o^fU)@MXEHPXpu`DP>oq?/0f?FB5[Q4AQSH8IWRYG[o4;*/Xe7c$@^UjaH:FPd_u+g2rMJ]nK'?iMm4PWTIB`b@0kdiF@B+fK1<(/@T+SOI[hZ@e[hZ@e[hZ@e@uN-#rj])?XgkLCXgkLCXgkJM@uR\_a)*\FgF=`g_P.H5mRk!OR1+X1+11e75^.E*o_/&'+sIH>06As&%UDYcP()JJV!CM%KRQ>PaTsQ+dN,6Xd_!eP@=<]iq,==?h$*YlX"HtN9=719q52p3-g;Er?d]&AJC6Z+IIY]@8_9Re%Xl1C0hE1Cc4bWLoGZtg<$CMN\1?eSUqR_Y12GiAm=L-b4H92?V@4;Gq-A$JVOVY5BUBL&)kh4a"[!@k5&ueVWDjbpdrh.V-^hFET[t-Y.bKSk.ZT1-VctqX$"`4FRmp!0Rn:&o6\"i4a$o!p)H8:%*UZer$M"NLDu8D3"8WD(V]*O7)g'RCj^5,EEdEeEEdEeEEdEe0ub&?j,_rPgPXaCgPXaCgPXaC0ub%LJ)"('[B8SEL-W]T#^BSL!Z%tF!)IYW_YVNHiQ(%1+SXtR(ub-g\l6hr7A'2;VfZ/-Ab>(Kq@T8Gk&$s`6`t?)Y+O.oD<^',:T]cm-1e$V([,YZ3[NTVqB"uXP&;du8_;:O^>;K>RU0?LV@uF+Dm`NlQ^F2MQ&^u#8`,/+n)l`'^Uq4YlDAZ!dda7dWC50OPq.j]oiCnp@,=p/4^9rUG,H/%-Da":I/l%GrK(%8"u!!Xn5[D3\=NF*mQ<9fHW()h+r3L2[0(Ro8q=smAIpbD.AYbDL$.nC+MZ&.s7muShGu\rk*(".p&8`/\,?TFXn9KL>;'FNhKX;qE$*efq,G1a)J*o9jUi9HL-G[BeBI777]V&*H=Zp@_](]9Qn(i0[@N:9?109l?;dN8eoI^tcmpL(JPOrs'E1WC8A/-t7DijRjTijRjTijRjT@Z3%]`ZMZ)[hZ@e[hZ@e[hZ@e@uN-#rj])-r&r]-k!q\-XTVBEmt]1P06D;[5u4DP\'GQs&YWSR;!%qWT@.B7q@O_mqPkWc)3Kq:>n_N3kV_6RV:VdbefU&o8O$d8iRP,pXqKPk*Kn,A]=oaE9esK?9"1)"$bC5VBM!Es(.k,clH>X!9):ZVeDln4d"E/7#dnY2+L3F!;geA`8"2-8Z-oD`r]EULW4n[9^9NQ$16NE'ne;!;7d(!dt[0#_*!R+unC6qI$0"&n@]45,7eo^6BQg7BEqWk?#l*,a7#Dq2m0uhiSMqa-DMVF$CMVF$CMVF"C`Y]YEgfE32gfE32gfE32gfB@g`n:(H[[Qc(2)d!)b,TJjl)OQ@oBILcq(idEDd3fA"^)BX*WdR&/);s(VTepQK_2>;$I,1u^Y2>QL7(7`_FqcjL2WZZ"7!"aDd%&8V&cH*h;.`5g\$>/LS;GTm$s:_?'8*]In]*fQL7\";+u_?U\L*2[BI'fD3a#2%[g<\6\Ptib,nK:m=C5/Eql8F_]Z.q&WS,AJORa`_3)YMaK'!-Y$g_0(4@>#uAD*E5RK]"@iD9%1HQ7ImeEWkmOBF8Y[.nqG3r*X8,Z)Ut>OdQeUKbYJ((oI4IRQRRaj=5AOcH$,CBm4k"'3hUbBC/=+BEA6^C7f]Ec'_]=Vr2I=7!eb\F2SDoSs78q5t69)APY\m4m(=@pq08RLk-?..>\kptT6P:AB[)iG$D2/(<*=Au#XK_;8!e`0#!E(#PKKE>Un=OX9iC._gKLC7o2kRd9(DV+WgVk1f5qj`80*gUG%iDnh"13HGTP+eXP2!;gkuLcL4h@:BM3!Q%1@+X0#M+sWgiDU_on\6pI2>.=hRJ+l)Wq0jco=M=i;Y#l"Frk&S=Y?D#IfDc'&^I?&kc.bM_P^\\H'ao@us+J/eg]n)Y++dumNl.h0Vr@",3&mOl"ICbg6gBr;E;f&2\:#kJmbGMa&+2T6-]aiaer'sXaa"B"?b_9'DtBX#U^/G"b+Po?"rccB@@Z)pmrX32@5rVm&JS2++KO4-OI$mIQ$,DnPs`&(]@&JK<3ut(U!bN7;AgR%;ZheC55iZEtF8[%f-MPH*u7#jagL0*Up_q!BRiu.Xa*>S'[5;!G+^b7pacR6[!#W*(YG[<`^6m>i+GHF``2biJ,?Q)gM9$0Q;=#BCUtu\?ZR3K`4-]IS*Fs=#I-@=K+)`hdnM],cNo$1;tT6!7^uk?AQGF=1^E*PVUr@BkC>\HoJfnk1cmaldFA=.XtFC1[XgUu168MfVc__TgfE32gfE32gfE32gf@AL*,2:ACGZ:W\YduhB(H4pWTW9LijRjTijRjT$3o9dUUhLa.rMCjI'1j:OQW'=kF0X7A>YrVgM.XCX(JCAoKW/4ftA'#FpBi\21a$6JQ@QBjp?RgA[&`"_6SAT'K48tLOcbL:,#&A3\2XgkLCXgkLCXiC1;Fu3ROD8g?L+m0d,!I6;hCR1K+S-PQIk;$D!gPXaCgPXaCgPXa#C4Fcok0(<;\?.+=>iRphcc'tMP&lWSJ@"EDk0%^J"nT1nG[(e1DsH_3H(_Fm!k\He#Q'OQJ\?h6_-]^lL3IBE3dbtr:&,Ykj5)coY7;O4"$&$lJA,Tna5r%qDC`?B%1-+._<^@d]W8;)I]Yuii-hF(nnVI&TZ.%e2:g/*(kQ>k53mP)`Fc%a2'rEtZ4*Y(g'0u'%R[?+5.U!6osWQaY:<^!YL3a]FY4Nj$YrF*\BJX#C(qJ5VeQIcY:=G\6@Q$W$6!1=Y0I%mIFAdGl4CGO26>d*E4sMM21rR]hHM__D4Y]Rnp:r\brGQMYCEZJ@=o(s=$#_bqU#6S5X*&%`GH>p\?5brhVbj%[ebO/MVDlJgf?g2j1oNND8gA2D8gA2D8g?LoM+GU+sNc-_/2%][["R57doMG49#Yd,O;Bp9#I8ZZr.VX4uS#!*=Lp"M4K'Zb$J%i\/*DjK"A_m3X*VhLOoNdiga53aB@I$a/;VK8Z'piTcCZ8@a%Fqu[`fV*](V4"t$JIWor-H5^&g-QT@ch>mMSe8%!/069/83i$)o"]$nZ+Yi3gkbkRi9f8`D%-PWil_#?1Fu:"4Y$?Nn=0Fq_aq[I/d\Z8-C.]s\POqfEX`"%]V+>pk.p%nmg9mscqe:Kt;Qmt!bK8,]f`;2!Ms11N&L2_9iL'WN/kIFeSrr:ZPHIb"gGMcO'7N3LZ#W#[\BG6D8gA2D8gA2D=op8OnbH4kMj%(s'.j1^qj*nD8g?\1EO"?[hZ@e[hZC&k<)8oF'>/nk6h30"j$cM?Qlo/o\W]hT2*8B.q!M/K>l:_3l1+G&FDeJipQX_SY*`n3lXS%r3O-%k8e2/k8H4c!Z+b+6^+8MoT:EGfaS^r]=e:d*\VV,h49;m[+irWK>8qk:++\rej8rF/uKBTX6__`\6U_+fPFA`:]SI'7F9oR#Ii.c0"K0t>NjK(^P.-IdVF<"SIP&E^'22:q^<@lnCh^`\ZP^6D%8WiGk_7[5'dKPNuR`.k2-YD\Qd=NZJ'/'Z!"mhGI638QcB9;Fg]TEdL>uY@?iCgc(KQrq?Np2n%\2)r"4":040>+pc.L&kluXQ%m@V>d+R4YJaT,gZum;Z=0;K!KKs/tFEMe[:X\,Unjd-;5ErG#HX>qYb2K*cTX1\_Lks'PV_\;nS_[,q@"EqXc@J0+s5`'%4$eAlF'EWgEE`V6\[\cOXgkLCXgkKhLqWk,.rHkT.rHkT.rHkT.rHkT.jC_Xj0kEEgIe(<-iH:'hWr4Aqqf5>s+,6\X'Fc'(V]Bm!!*-0!JZ0@0T7,60H:p\K*955!lmh5T*.o7iOC/YELc/(G?M@cX"3UDP1?Co[eHZdKj;'S@ILhs8tYp.8agSa-Ce@?X&Rj_u8-^Y-Nn_Jg^27Rmk71,+k^M.n\3>Lch<[DllB"!d?;CGH.&Xb(^!>':``fiJ+!,!>X<47q7M0U[s;78En1&oe`t"CW\sKBZ&6-5&%XlDp+&[!M7e?+la:4#SYFe5W;JI15t"9/%9D5^b-?pHa5'YHJ`P%h1j2N7Bh=HKf0D76t4re[`Lef[X5O8J$CKQ-4,STFX(Y&;KNO$uW-[[:*`kqWe>:5IA;V&K>K'qLUn5aBC<3#@YCTXARlq+7d=rlIoUsB*I5Slnhu)5>3(!L^$<+6p%`u`o*UdC7r?-NVU?n1:$:KfJfd1kk8bDDUJS\+/>nR1Y&#Vs'l@(+L>LT[UNIGXk6ZjX-U>oD:NEEY#f\H=+*8>Cb)sE2RV(tU[Q)oDAf;Zk/Eja4I*%oFl%DGHH5AGIUcq->qg\!8)i_WlR]]ZVXd\KQ%h>XA0q\B?FA?`2@%EN7+GH$`5HBr>ds3CA!o-,nO$G]m7n8""`iTX9T(@)UT518m4d%BXie)Xm3(3YmNjh/b/)H4Iqa;TGWZ-m90S`%-",)[_K[j()NV]f^A&=%Fp&!O!Vktf56QK1qqo6)54r"PkjSKNT6]k^n/p!T$i]D48"oqZB7I^J,6NR;BWr#EdV0Q(_GCoGU[96fJ*&$Ck\,aH'3!7"=Fro8KCIT3n"Jc,?*B:3*H7[T%m$cS#oI[l"oL%mM84]A6$V/PgL8j5G,PL]FPN.AmF$Pnk>%Y#?_'._A]R_8:IA/*#`kT@"j``'$bO`m_l9VOX\_0",p\CKm+4>lCgJ^nc^\m=ff\=pYNugIds8MZJT\f;/=!JgPfK^J"2`EN#:ED_,FZ59g%7.+sYl%=lhr_MmYIsWCeFA/kRb3k4RX<2]^?\e"'l;Fn10:\[f;hq&fW+7;jU*oeHGu%=W'>9_/D0H[4U7Ze0^(0PqE5Z%"sM`YD8iqm>Ht<_IoCqZF4F>,'usM,X',(;$\'+"DiZH?U,1&)o2'(.5,F07pq,IpA[pUSp3-H9\'@r#:()A`cGJ.oUrofW^$@9YKq3;P_/!)^GP&ZB%98sG.^ogJ3d[M@A$rlQ]AA>@bn&+;Bn%&@@k"oA56k\t'\#oE,TMHaQigj'#X&+J=4"4h:kpV#hc##Z!@oEbi50jI^@Lt0\7f%7ahKqJSY--RTd]9rl\C*[]eH%66d(>%m]Km+3'.@&=;GJtfr&Jd_"i7/I.mC!iEHNt^qa]j>ZV,Mfc=-T@,JaB$of#e%U7JHaNO<^b::dO/9T\1@c:'8!sW]>DAdqdD=IJGMbg:7c6RH=dNgJl$s6csJT+VP[cOR=Q/-?&!DA+1.dLW'C1C3C1C]MM;SO[^BCq1Gc@Vs8E,iO[oC83'KM5orduM8,*N:8dHSN'?%h6%)udK34]ZPs4hYuatLm\4fdmSg"BDB/%-2IMJ^>@@U$+>#U/8`L2Fo<@U$+>fN)f=[M@PSD++^Re\eh1\[FPDjB\-Dk6s.U<_SGB81Iu$\W)QGZQ#mM87llrQHVTG]i7$#PGubE[@?fN=?Ho_,qDcu]MdEf7VHQmoL0B'FO8?>rFf3.ck$_0U]UY/>GNpF=D=_fAQYS(9J`[p:guBj8Np])5(t0jV\?8h9m="FSS6/D":bWeBD_MC9Ao)^@-icIo2[$fp$9n@=Vd[FYJTB*YT#)2upik*;XO(;eIc"$Q%RUg!aHt<_@@U$+>#U-!ifN,-'<_a(;IIJYlU.Ns=C5mBce(&,gTic&h3f@Z,$iO*CG4l?]?U"*9r;@]YJPJ07?eb/Vr:tu[KV*[A*5;:'??l2!7JOY#&&L^i"X!O8KCDqQr>JF+c,0LkrrIB!mW/YIsrYrp:e81m*>i1^-7u[aj!ZNTii0CTMRFkUt4@/D=GlGB]K+?%&qj]Tns;V7q44eYb@*WdcgT!bMuF=-O&SnVP/LSZ3QE9K]0Ib&)@3,0RViUK.n@Pi8:,R!p\%26ZUN=Sq-pp5i0ke>TURTL!89*7)"pPZ*A4#cV]#7hi,,D0Lq>;??)$MdrMBWHYLYFtQtc=&-b$L2jdIH63)i#n9=i^\C4.+G]:FK#^5oSWt4T:U91SiLj)55=`A_,I7,_@)\__O9)&W1Q$iT"1B;6cZL+cf^"!JsMZ!fn!O,:ES*?HK_&0_Ci[[)EQ`TXNrXFKTJ(4cb"K@Dd-X01h4FQmPtX-@@U$+>fN)f=[M@PS&43CPD:L+QV4I2.JYUS-`M(=IXAPTncX\nZm.`M#muP7l1]tL:pO2PY5Q)>nm3q<=(kFpJa\SVfMS^0:h$a8^YCApQX7e,,G!^*i"F'4f"Xg21iHOb#$XTBmLNidV8'i?86@GJV*JO>REumR$[JMj!$HM,N?+](.-NFOt'9'^Q3sc]j$0\XX@Yro?e_]h"Yr*:;'f,M[*+%mrL\aNYos@S->Nth>)t0DS=$9+l$oh)(0$S])d#(5b?JGa;ef%>S3"C(uQ+#5HJ,^qpnFJ1"^jA66YQ+S155a;^_S_Eu!<;T=T:jeZ@+=b_iSI>^2`qR[M'S#_4`GRf*$4nE"Pj#[-[b%K:Z9!2h?RD7r&6M>jd3]4af!rn3Kdoa.N,7r6BM(LAThQ+7@eW?+=P9]C;-tr<_>.b:Yaskg%_*Y\Rd;pH7'$4o[Nk$L[k+%0#S3Zgc#m]+aW0qeold$H%sjKji.,b@rIijm"'4$G'V+NRjCZV-0LeX)sg1#Y,CGL-`Q`4['+B3I_o]>:o$eE+L='VkthL/shYYJ7df4siB7kaH7PmM1>,&4/9@a>G*_?\>V@@U$+>#U-!ifN'TUB8fM-q$(kq+bk'U$N\Z6fe>HM4b_HO@tgE0dS6aIA<245%##pF[2u!u+,#21#bF"q'&%L7#%aIWd.emQ*Ee&&S/Hq7KCeThSN"B?GC:DoFoOTYYipX2Q44''HK!f'0FZ"]Y''g!+Wp=Z*-e`0'TVl]_Vb:T-h.*UhhHXZnJs=NRt(OoL7W>s?L$a*\el%&"./pLkRZ>8q<)+;-Vdou[t"/LnF4iOi.47f_"kqle:c6Hb%b/FGUkr/klIFj06qDZ[VZWe%F;rl^&'__i6H8Wk9'U69Er2WZ9>@%[$?*6l13U^kfqb&BUCfb(?/mkht`A,j/iB3)_Q@eGiiHse3D!8b@TV;6rD#3_Zd4[7MA@dnCZ(#+U_`O95[Z)uYZCb)q/+bYr?YcZPYCb)q/gPTje[UNIGXU$)GHIu9#doI'jkNsM`WlK[#hO#.8=$9D?\JTl2*nPC-X:h:Dog[l,3:9r8@Q4T_Ajc(b5PuDSH/"nZjJn"W5Gurf`]"^jTn;;CQkdBB:2_7GWBcSIZT9_W"HLB<0e=GS4FI@81>nQ]@rCT+kn,Q]so#!nG(nNj>"f?>kE-]D[Rs3,Y\>F;i0IpY.#@@U$+>fN)f=[M@PS&43CPD:L+QV)J^1Fl*cj3#ch-F5XiM(_4eOE-TrcH<\H?*M!"=q^)Dag_5JA;aECO(krrN\6"Dh*:]=gi`Mgi41??Y]k11Nj#VGF[nSLW-`/bc?4*Wb:>g]hh>5E&].3&E;n7u)k-11ihqM23nM=:U:F/JngI6-j9O>W6M(nF>Bu"Cn,o(jA*F6.bPJQf(]t+:MBb(l?m!'_FcaqY:AJr#>-UDAF,%(=4PYQI0,AVhM?@@4s]kR#%T4'hgpNlL)0"b4`Y9s6:CS[^6/>YokT1]N%r+Y&K;<<-VNt/c8r%0-Hff=6H7GcJ*8'T0EUZ4g$HQFU0$QI1^pN7_Rl/Z.&Atlfj>`nqI#\O^KO!)o$Qc5_^hbO0(#+U_`O95[Z)uYZKFgJmKPe]:@U$+>fN)f=[M@PSD++^Re\eh1d^CX:@WhFjX8iD#M2"J_d9UoYdY$fVROllQH+)gla;c%XsKC\SKKH#`%SQ0OhSIA?K7r'%B]C6sL;q4Jq.hoZs8$+-?/!Dll&uWUO@gTnj-OlL!hg,Jul&(5kF`7K)JGB\hL*FjXY9e*)rs5qrAW?CVX@@e#s8EJ'Pg/dfdY5OPMplF#:6ad`aMJ^>@@U$+>fN)f=63nb#_RS70k'4;V5$phH"r2VDlYHl0Y7MI3Js#9SB'&dP2>aqFLLks1[osY7d1:j-3uShRR$(XB4djYbLdt\B9984DDV^@`QD"][T(Q6WP%=(KB3k2LOi($ZKK#!\L#HB4kjb,SkrSfRY3<+&6(S$MCE'5?:_"A<")KbQo#=&OE$-(T%V@>RZ%Q:>pet1Tedq:9M(KT*]-6I;2`[q3IWaoP7)Y\=Qc;2(r7s=lGH]6l6R5Kg)3>$jMA;6/Uie#23+(B4'K?[9@.t]K2R"Y:rTT+_281\P>mq_Ye*Q(CP?IrlS%9f^QV]*,f?*]Q5G#A<12Tb@jNg$'BQf8$pSHN3JZXjN3?5,&-Z,!sMHk)5r%lkn6"(A^Qgcr8_CY-OcXeH;gPn#Z8(f$3J+ZS3+kqlk`O95[Z)n#\MJ^>@,(pN5+`&[;(#+U_`O768[M@PSD++^RA4,!MXj^O@aHg5AblkFDI2IOD;>Pfla:jcps&,IB#k?U)kIpNKGOi)iPk4n(pLkRa%9:aHE-NN1(MCC"H=dLZM=O`m(M>'AiS;X.<:gj%K1B\LYG_'A>"9DEraBpq<4Ni%#'qM?*U$Ja/9Fa3Q-Hk/YL:6`[M@PSD,gdVX')m]#-VK?&OHb#fN'TQJ#XI-bXnj+*Y5@(j#edK*>fj.ajd!KgZGsY2!#U-!8@9^"=fN+!_+K`4]Co]=">7j1-+\`KJ^q:_58U/a/+)iDMW=I83+&6*HK'9AtO@YKg6[=QN_nk'DEoNLM@`)[BiM5a_DiVL1#s@jrkH=9'#*6Lu.6RP-kO?j+nMTf7GkcoPBZk^=f<;A!)t/4Q3?/kWK=2GINY?uGg/`OB4Y,TI'!LR38t6l9[YTSJ63p^)r=V=;N!e](gT`kWX3JMiU.lleW[)C263na18RYi.Xk6Zr]4G33KPa-`+bV[$Cb)qoD=>:^Zm5(B6gqjF:]eoI@]o]d(k]/G"J#)(>LN?4XS_S?H>A1&7uXNh+V9B0\d..k^k"d!$Fck6Eag'/>A7<,1U4BRT!?Na1[k<8#U+k_X[$Z281oo5c@:XfIhi$@6GY!-N%%U:S5=L5I4i&n)Z>NmS<:WjL/KAC>oIEHqjODeZND8*Q+e`u6BQD[cAg-h=+W%IleBKKme[3.CB3o4U>W68YSXYpXCWW?[8Z)u0(D+,?M[T0ZO[N_N]YcZPYCb)q/gPTi:#[gjo4)?E6l3l@(D,j;7"YBuUm3mAZcnQA4A=sSha)ls%Xia`aL9%XoH(&^lDJUj+m7m;EJ[bbiKG$8\'4\3=CO!?JkjN##U*_/?sBnHJ:fMDQ#`.maN@#.>9$W]"^*8)`G,]FS)Q65eooIe='>]&n,cD&J92C[D@6%uF!:eSM9oaG+N3@^`GAbR7fae=;(b;rWqa/I'lL1'S'DZuAc"0;K#`P0?GgS^Rf>e5q6&RndH7IQ`:s4DCI\-M'3uEjSp.;X,gg4LE+3e/Iqk=qUTp4=tJ#Cb)q/gPTm07K9dhK?pu8>ESd![V?gTSVMuIMZ#G5kP[NbBuD:L\33X[kWXg&YLL2GHTYcZPY2/0+a*J4TX^'fi'g>i[K@Kr\b=`Lt\o:%L:^<'=YB!Ss)-B`)AUPE=K,YY$j0UH.$iFj4nnge\P!ZL4>GTm;-4sXnChbWqt!;CNXDZh/k];*\E5-l]nVZW,6*K%V/cY;ld>^:LCee?;^`'3%Y!2n;qUETI8BA$'fBG;KK32b]&#!\6%&Gaub;_JmZ#VpkA3#iCRHTkS/Inr(M?3n-M#[3`A2kG7#u2#DN&.T*YH.@RoCohh-4fIT1Pa\4b1Ej__m+K)USB?c-UagPTje[UNIGXk6ZjWuD)J(#+U_e^X!%[V?0%(^e=Ajj"p78E\pV?+3.k`Qk$d?oSdSh7Wo0?t]].;t4r>Y.'F\gL?Z,4(:;U,;E7_8F3je,8Q9J$:D8P\np2IX)[+E_R%)m_OlJh_Z'o=KGT?e/I&0tq2I,4XN]WoAt#,tTZfpMbN9ERg\O?>@UaBoH3%MNXJ-+BD"qU8pQg4*I.L["%:Rp5#E@m]sUn2KfN)f='=Lp,_7$B&#GgHt<_@@U$+>fN'>8X4Do?<_nicj>Ht:K"1As!Wg^@'fT*!GLMn1m$MBOSPCrte:5S5T;O2:Bc<]ptP@pOPEpE![\81hU:]p!cn)"Sh4F%_!s1g9r^ktE.P(Yo?m=lc3!Hf17J-1#^fEHCW>L=[8kRU,@^%_I.%Lc,uIjbNe^L=mkH2XJ`:_0&hY!/f_XoZMM.]2@gXj$)QoeRn`\[seEOQZk>3O(T()2@9WPW7;f/7EUp0d:+4(T(eP@@3<.#u\-sFY'a*e1GYi.(m^3J:"s.d(lh[]1CW(#+U_`O95[Z)uYZ2ZdfrFl.I#S$E''>HtfN)f=[M@Q^7Y#?`mQ5?!;`5b7/%4![T/'KYSBhAnWd<;uCoa"`[gG)L\9Is-39Q@=q*5oPpg*QTq*34EG9S\&cp9;)K9ki#$?BAY]@"Cgkd*Oio)5SOtTnVk!GQf3--d\(,UoD1$DSXke!g_)Rqm`o(Ye!U%CT5SRPmm"ILE8t1WRFCgIk#ZC[!G-_p=*,a)^>\5*U;V1[M1r-H?;3hEFYDq>,pq4!D,.aS!\,pa^>\7lP&O">F$b_o=-NgLnsImjo15-k2^T/t5Rj[c1[!]T!sda'YJ1PXm!B\cqT:=-n(u[To?TQ)p!3:"#^Z^q:&.RNpOtg(p:e#pSl]9O0>6j!4FH?(h#I(0nA,&%n?"Y,K_o*5$e)@?eFh6UHt<_Ht:K'D&/4>;\0P/%-2IMJ^>@@U#8(@U$5]CobugK5JT9C.ujHNc!=fYcZPY[:q-Q$=?$e5+G`4\U%PZ]Fd+HN\/4Yd597^)MY`fg^U/E2Uk5D(G0mTcJ.9af7=Gsng+.`_iMVMp)J`A9+cF'*WHS@H$LL%nODH]4*JMUNrocJiO.Xh4*SRkNs0I:lY^snI6WFH4S]LIj,:^!DcPDi949OVa-Ye$e:XR!WuhQ-Yd6ZFaL3Rq;lo(!T(m=dZZ:2TZi(:Mk!7a]>(DpHKtfKmccGkC)uQ1_98"C:(pa;:0$\*;i-[`E:6nT)&.;\8U8onF7kIK5\En)Z926SqO<7f`V9Hf]2H9iN^EFK5XBXr9jC^T<+:BoEV4bH"rYGW1c-2d#R:VbFG6tk56E/F1I;I[;(3O(cU\WN&N;V5#d/%-2IMJ^>@@U#s]!Fn=4[V?f7@@U$+>f"HSgT42"^%W&1g(P?SD[UNIk(Ub(5WjZd;g,nc?OnnJb8*B7s%P:*,n3RtPc9(,L;Bprc?*LR;$]`L;Tft4i++b_Y5rcSdX``KT':plt?a/MIU^p4H,&h!G/37`dhL_MDTf)+6Km>9(:`"8!2?:c5CoAjdX"@B"DGl6kQc.F*joM-ugt"=_[B3Jj7*)edVH.Q1hmkdiAPu&,\u6phc-)MVM7PFFFuHg9k2ia0u"S;j"nC6,I:`l*qR>0+6*"EAf6%:QoHi!SH,T;ADSN6q&JH431#=B[0e]AIYRnUV_jXencaes2?=L_qSgk8rlbLH/0/8)`LI",uCF6?:+o7@b;#,fnQ;9m4U`9Egl$JUGT`O95[Z)uYZCo_-UJo/K8@U#8)XgT+U(#+U_`O95[Z)uYZbA=5V7J?u?MJ^>@11=C(1MeSM7PrrlQc8r/3N$S7`o**mY0I[?*L*1*IdkaLTnIm'7Tl$a0<1^$\%gFB<\;C(Okr>Vm*A>+-)A@_7BAeW+V:@OV)j&i[$QA0`bid+89r&_bWMr"Eo!3_9Y=D"D/9d\<9M&h!12K?&"'/>2:d^rN7h;1C_U"CRugj"?h(+JtD/uA>R%hl)XIGdt)O`$[R99:"V$[/?l6k#ht5R`O95[Z)uYZCb)qoe%rIr@9^"="L_=j^p[]VZ)uYZCb)q/gPTjuFKhlJfN)f=JSipsYcZPY[:u\'lRQoR#PLjGY[\j[]-`-6F!:TG-A/H7Y+6$]Uq#q>?'?GAhS^SiEA\"`-SVG#[V>dXpA:WhFdha!9CQER!"=NId'6m07FcJ&TJ.aX1TrDs0>i)=4\(nV67+!j@:!I0BGA-?ZX/l&&P?:mIjnV8F@2>"b%*$$Z9s*?B*HC_U3cE"4MEcbUi]&&J7Z??kPP+ZMS@#`g#j#d]@IeF?Rc&,+P3/XT:GTgmV]Or$ke:;G,F8a:oq>Wllea_FFM&BmJjZZ3H.+R$AF?gnC;r>\*q_mX#YZ)uYZCb)q/gPTjuFKhn"fN)f=[M@PSD:Na4Xk6Zj/%/F[_RXp3q8OK9+t]#7eX7s*PT2p&7I#s%BQ4Im*cYf[k9Q?Fb:jG5$/G^#+1qD!^#L]s,78qY2:KDS!jf#j\5MY>>"YQhJ&%?KTGU':O3heQ4X-AncYF$&/_3j>a=9M[8?.i9E^p[]VOnur'@Tt]:\u9GGk(7Hh[]6L4CoA/ccbFo7T'VktB86?RglPV0^pE%2TdA=,`__t?Zc\`fGqm5uDbO6gh.MJ.ep)Yj$d\NA_7#q4(j$t)5sJma'iV0Al4q;B*D<7/e6h,&#K!%Ko0PJ/qN[`J!WJ)JOC2ClQBP;1]'IQ4I&OBu43?gee]jF2qL,%^EQjp&PNG2m-p8jJe+AmoR;bPJ]1M6#FAQ;5E2cb1>+:ON-Z9LL+%T1XrsBGBTl$+QL"5ojmof%pmXffY3^U+dDm^sBdj*9pTjM-j=&"?jcA_Fqa#61;XmCN5\[Mnpcm54XH$#QHu]@5ggm_7!fWZ)uYZCb)q/gPTijUVXBJ>;^"\YcX?7[M@PSD8iqm>Ht<_bXL`4@Qj@PTfhl?=Q/WgHttPn'gO$+e(_"$-R57'GqKjlO]Zmi!3)d!+'cU>l=!g+"fb>uY)`I35#HY,NY5Qd%QdiN/]A78LJUX>4KTF>*Yo\1#!?]IrDBprsC$joLl+0LKYtk_Lp@A=_TtdV64]cGJ+m&^2iii6(?Gf?Gr2iE)pP_3O+Eb[salATdk8b-]i,2@Wa[NPsr/aYrY,nLpQLO$9C5R*T@%r6."AV34[D_4JcFiMA&kTe,b,-C'RHIS`)V!6/5,DVTqAYR2F2Mmf-A$*R[UNIGXk6Zj/%-2Il:+/81>@\'eHhNM`jTV[fN)f=[M@PSD8iqm>Ht;J1itCWXk6[6J@T'(X!WO;`O;eDXn4BdZ!B_?)#BdO>dEC!')F.\^M:fidC1Qkb&DFj>ik6e_g9jE"d`7#L9Koci_Yu^)fVJ;6sqDSKQb-AfiH)AWi^C&/j[7sc-*Y@5u5ZMrZXg#^IO^4ZbDLro#BRAon@8%[UNGu8:%MBfN*N>K=Gk<.`:S=2>.I%um*3`hlARVAh*=#he@h@_HXM)c*rV^?!lTJ'\=`sKYfmE2jeVH.Qa,KpES#Xr[OXqT],E)8MFkeuUpR,7H46/fFBc+gRW%&nlZmMGLjo!]"hX)rXZjJhl=r^bE5)sb[-'WW\0,?#+q]o2PZK\m163RqnKo6p7pE_a+g[+0uUJdr5O/ne:eUpG#K@M1jq[lcTGo[rTYnM7YrH"1Ug0`-0=G/@@U$+>fN'pLCb)q/gPTjU'sOgm&1;^P2\6]HQ&^<4_bF8+5mF45ge1@6k]Pfg%4*[E(2(o_M)@Dfu'btho-"u5"*5:Pal(<0S#S_H6;3oT?.LAef6nG&>W_Oj!\;lH7fVZLpLDTC.*$$ofuo<^V5kZR6OKVsMg#_*Kd0)W2O'Ak$J;XG2U]C[J\L>?;J!o&TL`O;Mq,MQs=fN)f=;I@Z(c*h(c2$.Tp-A?/n'V&eLE"fEEg^DS!XlT%?o'(_^ghGTU^!\H3!/;A,^."IT%P![0p9joTiljk4t5X,bSAWAbTA7W=m1o&)2#dfb8@L3.L!5^FM(W.Q-1kRc,#8,X73#Oq^IKDUHt;F8;Si%[M8gZX*'JB`LN:*JiX@qWd;l@`jTV7fN)f=[M@U>fiIEJITs(ZC.O13#IY?JCo_]>E5e?6\UljOgT#SD/]P560%a3@X6R]/3A>,:i&_1)5Wb9RNJm@`'2?;6,RqXg=/S+H=?UfVW`S7N>;%LmJpNNcGBZD7`'UmQKP[\uC-LLs0*Hu;5o3Pi#lR7ZmgNIHf9DG)4.HhZH6fF-"YL4UNLX,-+Q-d/>lfh^$]q5XXlINTL;MA+B3V<1!*=E'Z0RbOs^h)oB$m>HtHt:K"1As!MJ^m3%FV9B`O95[Z)n;2$FU](MJ^l\YcZPY2/+SS@Qei.0MJ?A0Tf,JPc4VI8S2?kQ%c2S2,f7a]L^ecJot0:h=%=pmd_W%=dVgnG'8&FeH6@D[d+ucD7*9R[aGa!H@oZiVgK-j@f24YBA+S^rn35("`6*pRI6]aT*>1A9NSbW=5DuR[UNIGXW"<-[UfX.YWQa&F^\LZXU(m,Cb)q/gSuu9>Ht<_VZE9"`nao.OK8PB1%.ls;WAbJ7_+X1X"DY0u1S1Kuje@Io_!T#]'QFF!N?H58AFShn`-beN.7c=30.J+^T^e-:J@`O95[dHsg2PAO;.gM3-n77[kr>Ht4sr\OOk6#XPSc`jX^ocgP6^]7%CpgkmMpi72Y_[N=6-H8[\%>A7s=7A(-adSnrm_Dq^h7W5us.qleeM5O![#*asi'%U-P4_XicAmS?(k@_-0)?dJ`gPTiJ@Ag?32C[Bq?.`1o.mdtWgPTje[]1io/%-2IWkqM>>A[9He[huefN*[T'"/P0MJZ?pfN)ghR^?'kI-8S_cqZ.0E$>g&M2[gUiG6bgbt'Tk:D6kJ9r,aeCXP)+b!J1YJ=diH"iH0RN*^jdCPJ>rZm/-ZM.^3IR=jI#HB#2*CF%l=Et?=?Y-A\",Vs41V:Ji-XX`VUN/6GgX-:ao4->(q\pC&eLKuK5[T,&iC+HK\s#+2uCA$`P\u;M1]uR<_2BiuCBUMM$?4?%,HmJVod/1NB`-Pb?jnY[E8Yrm.Y&[AGBh@q1QOre-2sC4X`s)&k=EG_Rp6*iQkau\$.d5[RE]mGRFDL)_?,*&u^*)X.SeCZ"l$A&e^Q7Vt?b5Lo4?jrfoIC\[(Ub(5MJ^>@@U$+>fN)f=6>?e\C=BDhRN8gOgPTje[UNIGXk6Zj.mdtVgM53AXdU9=(#,`8D5HY^oIfc)dP)M][@AKNKjFY>XI+!5IB\/)%"mMl(gj$Q8\c?.Ga)9la0[5JS_ArC46]e/d%ZA`!si5(brduodR5UCAr(Qo?mfk>8E\a2((;SdRVNt#dmiJ6:$?ek%Zf'28fR!kX;@mPcYVaV)KlZj'>_+d>Ht<_VHZN6ODrc`h5h,#URHC(os]oNEcn3TI1S-$U,NtfQf">pair@f%ZkLDo8-XG!ga-!k$,AW%U*)$1lVFi\J6dl-&DpN@,,BstXf@.neYKFOfN,CsX4R(fKp05!SFXYWoMTpn;bKtBZ=Sd6GJY/9?&Ga]hbY,<`bRp^?)=s*NuU.U&U`e$O2-IG0\ipS2k45qi9[0An,;e&i*/^36#EY??PlOa*E]\G,rT?=)dti&`M>-g-[\cNm0ghT?2`-U,EQcM0"#FE1NR#Wc9`n-6+C9H8'mGnM,)H^YhfOHDc$0$>9@qSg/^-?H5#suKG&@@>PO&J?!69`'%5Ku;a;YU=-_6Ajt*rR*G^RN0g0;@$t]ZKdmo(X"[03VDdWMj4=<6;ga)+,lb+1)(q(16MJ^>@@U$+>fN)f=6FHs()&O43(adX93f^_m"XAL4_8t*14!:BhL&g_5;Y7g%4+3'=CuUAONPdZXGgM)h`'6K90qMRTd+aSfE?6hQ:umd,*/kMdOi[Nnt>W`8#dXPcu:ogiXCp$+?A-IWOrREh.n:]KTe2SEM3[K'=NACgKF6.2+knl?K?I5qgsbjJh<'4X1+5*L!=,Oc+g_Z1Vq7pNs+@@U$+>fN*Ze7Y#@+m'*VEP@6!V16QOq34(H0gM#cnRlDh2S)@sWTBa8fU=_jQXbs)X>7CsdlZN/T*u/lph[oc6kWOBm"nR,?bB(;"6dQdA*tmEEg'"Od9"-M$"5lr5Qbj79S_+p,omK-@0D'ZN[lfHt:9+cQKVWnCfbZ)uYZCb)q/gPTje[N^A]!c4oLLMb#=W_$Dti>?t$XeW+;49.$p>>QEP4Q[H4U@@TsF2)@EoQPJXb;>LfOOK&IPoriK]"b`EX4*=]Oh#N5Dd5[[^"[]VrGH%uIX16$R+r"5A,k@3B7$L_YMXX(#ho:eO/'Po;.'d86lQ@Wnl[]64,/B`TqTES\Io.W;]57>g0cbXZ)Y35[p`Hc]S^]R@AG\O4)Y((VSB*[S<3I&8V&mjoCK\$E3>rNVi6afuL[;)`K_(01X/I4CW\"KYJ(PI8Dk!/N?oH*?X$24_;KO5+2$'%j0HKe**_C^ArZ<6S3Y,>3HPs2KXpm%M1>0^Rg63t+f?sBnLcMF\%tj8?\TYpBj]nUV_5gUR0=G7D7Fm;6FKlK[;%34%+Sco`f\!A)'euAqMfiIFU[UNGQ63q9CfN)f=[M@U>fiIFU[UNGQ63q9CfN)ghC>)95;ci\t%##@6.@br13sGRX!X%+u@52QYiuk1kmMh!3C(^!%4mkBcqE=.^.]925P7_b!oW%Wu6oci7`b6+0cJ2'6b5Y=]1Ka)ufF8E`"Z4/H_jk\\Pg(bmheCo`HE_L-!%%"5-DA15[Zu."O:_%&E`!YgXpCX-[2NruNCMi!HesDl3X8pEqdE]UcPeIEpVVo(a+.t&`ch!@mtF[5L7RP#;LX6GZlLMW2`5mPuo&Jh1NRgK_pEaKG(\8S"M]qh^OerGmPpl&k-aHt:9.>D\.85mF7@U$+>)PoaP\s_OXbs)X>Nr!<(Bu=^7!b)bQ[(Gj@U^@JV.[6]rEF&c+7iH7@N'<1FO6G$"hU?*#b9\;Qq+"pZmDTKirTl\g$?a1SE'#P3PrXK<-6Pr@:MjsB(-.8`\5LjlJtn0=`;\H1Hb2=A;`YcV*-6!AEEfN+hV>Ht:9=^bMHdOMK'fN)ghL1u`M>q`Wd.G.[;.md:hQk$U==RRh&BW7/[_fu>]t-4Nm-SkR$i1*`r-YB\3tb2l3"RnF3lpK#hpOo<#a1jZO9GP"/TMScS'qg!1h*l)R-?r<]+Wm#X!/"4daErP](0EdEJdK]=\QsL!Sr5>1'p"KD")gXq`Nj7qXcf64rE`;960qVH.Q1MpWjC#l6_')WjJ]Sqp"_e==OS`:,0r`)?ta;9dR1<%sq"PKFonD>/8/)J,CVp3![C$g-IQt"NpY9Od?j/*:#B)dWe4,?XH$G#k54Auk04j[l^I+^FU?=l.VJ>c;Ej6((aVB%qYdQe\G9Wj^<4YY6:f@0>Ht<_d>I@0Ug/$bFMqcEbng.D,j93g.I-'l%XLcd!N"_U-:'jrQKa<4=-@FW)n@@U"uk_R:Ya2.0XnXk6Zj/%-2IMJ^>@,5$Y,77_40[UNIkVQIf8LQ92I,RK+NoG[BO/!:I-0GI)[@VSggX"sdIBFmX0,cK;QD7Cu-M-=NQTC5p&K*+%mpJK`ck%0[m/WgHttQ%mU6ThWmJbU^Aa0[GilmeW1DLq_[":uuNDS3]09A'W8FGt"3hOR6[U=;4AT.a:F=+!H<%"5A]M`O95[Z)uYZCo_$t7jaLfN)f=[M@PSD8iqm>8>&a+tWfLMNGEb[UNIkUocsa(qt.N0O,%*i.@5!j._fhSkr+>MofmZd8\tAldS@/%(^c'--PuYpY6"GqT!YrH=7-:G/p.mC>K?QHNrE\e/Z-e^[H`G*^9fMqX#N30N6e(Q<;doV?pA:m>uFT/RR31.e/6o$@8g6]\M0J6ad*in7,Z;;ld@TdtQY?>jk[1%P0Af`U";0\==L(lcVp0-`Q<%Y='\%\@aA4_-,'k-m=S#3Qt)+g/1.#h)]P4O0HLY'*p#l[M@PSD8iqm>Ht<_Ht<_7jb?fN)ghg5NL]@W:f8@rTj4JJ8%$)Q3Kf39,pS&NK092MNqRH"nc0B73XU$U;18_7T17$2j'T4+-=#0>J\-k^GMSZf/^p%(tooHf;<7]E'+%pea!m9L.EC;r040pP,\go-R_/P&PRn$JRW.'XPBO*RH^P-)^cSkeRga;6UaY*rHcA+HchY^XIMgglZ,N1`$7m]XAUD)tGPM6Nu(+kq_m[/)k@q0R^"-d2km)b?6,&jclYMJ^>@@U$+>fN)f=[M@@U$+>fN)f=dMf?l#cTIn/%/GPg+$K#iG8=N_U1dW%XVZ(`"Ri7Md\TZk_SZp*buIbL(Vh(k3A]$l>ce"95hZ0p[![1ZV.P&l5Y3Jq,cPM]RPpe]s\G8q9Kl8UOR>*?#\`3-N`t'H>f_h]W*SP`OHb;'+5;_eBneZ+U@:`c*f+!U^SYj?5?\qjLGflPRS0cZ@D)kgc1bprb"L"%P.2YjKdoNmshu#8$#WE9:F-tLji"sQ3GS3>:fN)f=[M@PSD8iqm>HP-3DD9^DCb%i\!k&iuMJ^>@@U$+>fN'M=WuDJU(#+V-Xak9-[]7_iY\2AlLZWG50H5Vu]?8[mQg:e,2CuMIm5jPo1)ka\?%XhALS5`o+PWo`>.)nfT]Zb)TVSu,?>Gtb<7,0>\-Op$XePL:=)!ebKrF36k3_/N)L]cpYAuO>X5G&kfj"aD_.SVjdk!UqWaF08mYbW'lAPF\pHHtRa8fT<_^GY4q0=O-o?:Rh?>e:fN)f=[M@Ps%+nTsX7\^5-"'rb0Pme4@9^"=fN)f=[M@PSD8iq5"1As!CAgqP$.r91%,5N&fN)ghR^?)AMSN2XI$D@*adIf45F.D1lb20>e.kf7rn^SdN@6.3H4P2$gUl1lg3h`RLoio\ShN$hk$T%sD7.QNY!GqC`#cT=Ob,X!arR_KQ0sp%lqMh816;1OLZ]8^MaNpL#or(7/D]T7uD7XufN)f=[M@PSD,ic9/%3ttB,e;0%E5nY[H9#TIY]KMDJDYn]Z($0f^c0t2)1nF.(=]6CVC]7&4&:N;qkOD)GJ1G"bI:jO_p36T][T(I"*PMr'sXluWE!/:\b$1qJt?LpfL8I>)#/asF70ic(A`i9'BpVm]esn#lX^Rrd'X]*oHIG!T+]mt5aW:`KQ8thX!%__Ne/h81?Qc&1mE@WT?3nedsq<\=CSe+^3.g\S*T.c$+R:pI;k`Yk?TT0&,i$`Z24=_Hf8V0I0i!Hcbi^3"(rse0Y;XS\aI[n%A3Xc-2>Pkmm5,l_*gBj-RUI49P0r8\\][EjJ8lCT#`hHF;:p`U)toa&=MPrF^jqOFlF%_O=%rZ!&!eWQl0Af\>7j[gPTje[UNIGXk6Zj/%/F]YcZPYCb&BdgSu+!(#+U_`O95[Z)uYZCo[nN>Ht<_\((PY*Br3.8L0K_:'_=JlpBMR$@N\&"fUL%qS6UtB79a'F/0q[cf..;P',QR/FNgn]QY3-/gi5H9=]J;MY06RfBTG<3-@'ctmWE!.k%5aCq692C!1Qm%ZA6u:(lX&RkY+jGqB4CIkXY\M*bkL(-iQ=c$YYQAQK_+dCY]/8KT9#LN+UfVVIege*iP*q<_GY(o(1n_'XZOCG+4r@*HC\'%K$t[K9?XDC4Mq)k@2OhI@4JSboq(Ca04j)=7s"0p:Qf[=3!Q_"'q!)q_m#>YF#-*q#%B4N>#(BLgpq2bQ26_j8ZY._N!js/eOqH7"BLKm7oDQnT>h$t,kOV]%tG9?f[bRi`O95[D*^RoXk);ZCo_\d>HtrfN.CLh_^o"+PjX&:k*2QYifD>D$]%Yu(MrR/J,]\#(I6ZrS:I"'/F.]-6`eKaDo*Y@sip!:M$Kfb!Z_@GO=6-loacYC-$qH^r]_-HaJYsu/>4leEBbA_IC$PUW-b[`L`/LJGiR*K5N[L=sHKr<_88Z+@9f[84ZodRFsGsQMbjAt]&JK]?hAM_L`PKp?d(/;W!=U/P>CZr?dF<:/JcGF*M#=G1I4Ru5Sro)fRQq=KsJ2[KFk9Eer.[OFq6\D^!PKAY3UAIJi`tcU,e`Kc\*(m!pX>ar[.ssi8g>HaBH6sq-l]=S*pY_$Y`b&G[Xk6Zj/%-2IMJYer&[iG/$F$YR7^0!qfN)f=[M@PSD8iqm>EL[K>Ht:1gPTeMgM2FZ`O;dD><.f_I-g*1i,>60rSudBL6"Os_A`IL\!LBmIS"pL[]FuU\+h.p7+=_uHM1?`[]KYcFp,sC42eQWVH.OK(A*bZ8$(o'`Vcl4$0@,n0OJ/3`$O9.CbnLIW8(6?^;(@TV\63flph:l)+0&K^TuD#ZCDT7E+F2)k*L-c(UYZpN"<1M/@(R@2SB1(43(`;TMrif*cmmAM8T@c]f5hNjLENZrrV),=6JjRS-r]fJcGfPJcNW;n\Gb>iP;[+(c!@-YTXC;+Wj)B!m1FhXO"1#lY*-)Ll8d#j:!u0)NllrcJJHT?.IJ2]m"Vdqi[4[eZ%dlj-Qa&l=+m[c1Ed[M[(A-Q'E4!)&X/bJJ$^OZpDaA^^hKs!5A9Z&b*L6[0/V(%>*+YI^Rn1d6+Y7(6HDbCHg.e*cUI(cj-Vu54-DV#m8DDjd6QY%eV87mq4J!X#AdkDFM#YpC4]6YL'E8=H1+g7[l'p/_d)Vs.SQQ%ml<_QS>#MX>N\eX&d*^I4"$/MUokZ2f+ZP0nbhQG(!e1-LkJ3ig^#8M#1Z5OYT*;uWr7BlS-_:LV3$g\4/096!3Q:U1i>5;f>&ht"1=TA'q3/Pt5C;tsDB=9CN(qTLN\H#^+V3d;i=(,FFr<5LKTpD1Ioc@IQ+p1YXk1=gni;uM;OLS]=-^6oI];lAQ2ab0B4seOBP*&tmU6e:?nW,r]9*@i/1lM1V&7jA6pY92!g637h(2#*,WKTHln8,[U>W#9`hB[K&FkHkN_!q9\qm.<.jdU9=jutn?Sri;ir/%pq36Hd&l#D/%QJOMJbklU0H$IQpZRF7CT!q0tfo_C=B.kZ6XNbH22<]S[+?1:BlU]VZ<=&NLb0)-<5'O]TP%W[dT0[#/,SR.XqV7ATCAq)i?F(?eHl_9ed851`k_PdagSaDJ#2[O+Epcc>AdHQP6nP:hKbd0?n=I(aEMeT_-t[KgW&kIFuG3LBS:IE]rFK8i\,h("q'\WtBLi[QYt).]PA[['+hZM.Ke+g:MU4S_^"$?L^Q8q5o4l')@iXg77!+ERR[d/`0,fh)pZYNCBe&Md&k,a1ZYbuT?SLtCq3F_r63;+aKd;uoJE!V5bih>k7EWk/^E>%HN8Yq7tW/o-$O6j:ZJQKb`\Sd"5]!MlUhb,Na/WgBq##N&_Pl'>C]`84><#9o07V_B*qgN4sW(#=ab7CT!qdB/eRKPj5fU0B?8_\'LT\"[*SXlrf-/%QJOME+Ao4W#6)DC4tBB!b?=<[gHbMDC+KAXicu1k#J3bo#_1e[oAYmA8'EC9upOb$2)lr?TDp11IKL%F=U(YJu(Wa.O8R;SSeKa)d>SG^pRBSGp*X^Q3ZJ-KgH5bCnsAT9u6ZNIsI9V/gbc'[;F9Yo`L>PTW>+s2&d$e;89.[qaBokZ2dU\eX%YDFM$D%MQDgh26*hoF0QU9t-j$%EYaC`>X!__Ag;a>!B(oXNiB?a6pff4Q)`Y>T_.4JUI:9>Gbs6g[fsF?!]6+#;g9:kQa1e$Wr\sU_maD`>#K8!;0.>G$;\'gHLWnaK;HL^U)=i_ASYDD6(=G,2WlW.PcOq/%8Mb:g$cFa$WWqT+^GgV(_)ue!Tu9<3mgI`ru/Y\s94XH5_.SeJ7B%]7]3/l&C?lU?%N>!OZ9]]:mk[Y5lIZJ6l])Lu=nB)mn3_k=sW#Dg*Zncfr^OCC9]kYV_!L;e`FP'[odgWk^TmI$3(+`@A$D?DnmGB^+]]7e0tT;-N/rAg,HS+;I7SVS;O6_0X/s*G?k0d#K=V-D?LkZ2dU\eX%YDT*S0\eX%YDT25Yh'sDU(#=ab7CT!qdB2V5bX%q,dB2V59`NJA_P(2]XbPk:V)ik_[5WWka=Ks=C4(=;d&m.W=Dh]MUfG@Aj=NBc$p4=bl@$<:4se8Aft"fB[H&2'/\.1B7K:lQ\**jP4r:o!DKVUMa]^/3&*:_]2&mPET?Y>#E32%&*"Qkgmt!m,%"b[WT[%kG%pnW<]O`T'DG8W^*7H:'."P"$!BSO?W)QHp(>f:-ZNWCN5*.EH[H?h3DPa8WY;Gh.Me$BuoEW-l;B9MNAAXJ+dt_2M8XJrM6FW[ndB2V5F=Xp;h2:G(h.f/r/%QI:@-CWS6ardodB2V5F=Xp;h2:G(h.f/r/%QI:@-CWS6ardo%G.^gIe@j10KifG4q5]cE"9b3k]?7@W,(T5eS-Mu9cFq8$Q>lOl@oV(cF`tp_BRY@[p`B(?E#kW+J0!5C\emV#O8/g#-!s7cl7&!VDGiH:=?@olD@?j]p7Kq$AB+c>D4ja[ouV=U@PT^9LVFl+/h<(nujP#;Y^]c+/sWl7:)*\q36afi;+shT62W:ae/Nm,];T5LBS:b6E4Zjbod62*n3RI6;Wc'^Erl5j;[624nX4!\_=^#5H.N:P&Q/>Q4b8C\iPUp34Q$&?('e./*MS(^H,5&OB19Rp[,3pTJ1G>`KVoD[[.b@X;W9=J-68`.]R]=+[4L``B_'bV;WC(Ec-A]_9JD"T<7pU6nZ3O@>be8*>A26?GkCBulapJo0M2^Z!X7S1AH0*s")k(!q-.IjQ/IcLK^h]?'=#8HDqm\icHkRcKbr[TXfZZie7oL7USL,SPNQR?`.]CoU%XdUd:jKg+tQDp&*R,*UH=0&m7kDFM%/>LBS:'^F[GDr%[E]`[4UM5A%M\%A5Y%9/o?2J?(.Ko0u<^4('K,D6V1L$k#OEekNF^^*U7h]l-HZD<;sI^IdirO@2o&/M[ZM(0-4#:O@NKc(#=ab7CT!qdB2V5%qb$+F=ZaGmf0.g0aEDMeMD:t\eX%YDFM%/>LBPobgcBfZr'aB"A';$4ZM's8G$'m&B0aQbWA+E:r?Aplj&()2N5!JcG$H*s/`Im?=1=%+n6a^aC1L)!kgk+B^D603<;p.a$S&Feqe&mBVBRD#U`s$Hs.:deW-hA%(FjGW.F15X]V8;)O_rrddEnX<8%_X\,(3-Wf45JQIoDJ2jQ!gU\LecA1qk3W+IFa]\[EndkEMW?n\AaKrI@"c]AajN0!WmK0:tJWSme=-qm_Eblkh7,KkJYhApLBS:]%$eS>LBP_*P,61F=XrQOPHiCSp]Ju=@nfE4QWo@/G\Xt5s/9PX3'Y+@O5"Znqtp`S8i*f#QF>8O+XWbo,kg3rp1"8^7,A"qm.r-\_&h8`5A2JX#i=\l09\l_O&"I*r=rq_<,&FXt#jpr`/(7.O%]=XR_b$G?&08oIm5cpWe8eLg0hUar;i!WVfkVk`UIbb$K1B6n:pLd2:.Oo`##nj%A'DqZ7o%h),#;fm.]j=e'Wm+gTLBS:]j1gBFg_=P>B[`>tSIS^Jr7Q7.Br[5@[X:O`P>IJ"Tlh8t5EXZT_B/V3Rg",LqJD;P2u56$u-^E7k.XR,)#4;X.910E85p]Q:%JB51FM)SU>_3T8%?u`d[UaI_^'Yqf^'$(fGJ:"NpbcokpMBT$g7TB!mb,8bVK0C+%Q``jt.WVaeDY6k+?fNB'P'u?qWU_3FbNC[-,KRQ[q_#!#Q5r#;5IkX=D%L_<(Nc5i+J7o2"?a*9Ao".Cl88gf_dqLCLp%MCbhcn]DbD[p0l.5BSS@d]q3=t<[4K[>\NhM11'W\3N.\3h1s9:MXLamt?d#&f\!$%Kfs':.Y^O)0=f1G6Q.R^N%aZ(.5c)g/or=)9fqLBS:LBS:8d2RXS7CU]3\"[(9)Z>e\=6N\,/%X8Nf3=N?i3DGuJ=4Z6c\Bd$7^7m)c'"fGk*XoIK6^lM#NkGTp+FCu`54tZ"D?RBJ=4ZVc^'XknbEWd'5sp(K#2GlJ96X%odgrLNIlPU#OYM=Ac^^;S7/sn$kBRRBh)`+7Ac_5Ub&N^W,/H7X!CY&[;Q\__r_aOaA8Kl:4h7.?NY-Ec\]im\kqPNN1dEEtc'T#puf["n@FP:huM-@XJqB0#k`[fE)m1R0M?/!CgtH_2W5o5ZZmcKNt*.RI18p]/im\I>Y(Fi3b-J9Y[t?-MDKR4k;;.;fY(:u?!922-L+\st"35OME$"+\Z8hK`%2XF\UQ;PCXuAoD'-=/2qAan,uFg3-;2Zh.im^>LBR5(V8-/UMIgkU2_HdU0F2Rd&lM4_f`"MT=Y(Mf(*3rXT0^"nilR`R"uQ+eA2fB?T_glY&uN4cRT>m?nrk.n67HRKOS36UL6ALT."L28='VYL8sL^C)W&T7"DdIWL*j2X)NgTSfnog&#KQ,FueE7hT*j=(F=\BU:Q#i$g/HQ:qg,WP#3>3@8G%X.X=:6.>MBc;#-Sb"X"*YZK!p=H71tYG4Vb30jff^LXm7f.qp$Z"9j,OB\gfYAJnU%kQQ%isL,qV36U;SPM)qC::tD8d8D+$Ugu:,ob?L#*=OcDnl6'puq!#0JbKmf%2iHT"*V(*h!?T9t[EijRj46J`&5V)[_jd*%sF67Or9h$"t2.KR+\cOA"!oRfS[A2.&UYB@MoqC<2,)F*k>_?1Wh9^1iJ@SY]N%dpZK^-j$L$S&IX\ZE\_Ao"'*p5*^#J?5E+PuF/V"X%\/DhWAgpR.VE!A1biJgl$#<9S5-!BL`Ikk2a6:@\lSG2&WF[i/.TTptDtY4fcBSL/.FlK"]tqE7?J(%ZoBpJ;LOV&F@^rDXP"We<)nen"q]F5@m.?ik^aKnubSg7FnE[.l*N?8k%Y#s-O\T?.)7'A"GAfpBPpsVd%QNkZ2dU\eX$n5F?>2[N^]&\"[)tMU8Kh^#Jld&mU@ia=DiVp"!"ZS9TB1e6S+0gfR1$>B`_eQTL,[+E4Aj#q3j:e#gJ)Qj$.[b1,GKB-L.m!8oJ$a[M*D$T>'=OImoj8$W=#sOH5`Yh.hRa\dGmSE^1Zq=a/?*#ggb)=\[hc(6C,a4'`K?%c/cp[k=h$!mrX3e]GeF?_UNJ:n]N'ha,`^J116YC*$>H-4n;Q>gIq:V?.aL"Tj``DFIoX4>%j#%;r43SJc(FQcbI/%QJOMJbklP0g>VB]rK=X&BeF(#=ab7CT!qdB2V5F=Xp;hUXlrf-/%X9Yh5X:cJ04^U$1R<#pVG=^?NJJ$SpgPmGjb8!_6XqB<*VX.>W\Hh%(_?5)OieJFR'H_iA0>7\2B;6T=.fln!\lC^WG:R9]d:[.hmFGnmqMit=>R\LQS"&.tc8.]"!9@(*.dHbbP1k>s1Z6:?O!P(TIB7]8E%[a*u!Wu=QdqW)0RG7m"X-3SWXU,#i2LnkZ6k+F=Xp;h26)=[sHCf\"[*SXU_\*=jBeN",qMJbklU0H$I*jj:rkZ5T@X$RDoZ9HsA%?_I(Mc@Xsl*B8HWVBFca!#RRC'/FB'-=LLpU,VI[9dF+WgF,`@4V7.OXepI[T!;'@NNSr5dq)UDKR;c*?9K&U2Q,Gk?1rEK3U#>AF5O&+(&#nrUl(VEdSdMC8I+lLX$=W"#=R'\&r5"i15(0!n1k9c0[P?Q4+m?B=eM=Wl\bYZb$C@eN0Y\)aO,D?jGSY+6jMB\J$#FIT6.9q+>[9"V]G67^_9LAB=^?ibH(G>\aE6KeM&n:EIKKn:=+/]l/.gSMouk/'p]uuXaKGgNh=lPO#bkPNXlrf-X&Iq!F=Xp;hLBS:I2rGk&2N_$_',?@)!5nFC@5Ji1&4(9*[SO.%oeop>pZYAW^s_cpq"6F)i$UbA"XA3uTMR4mV.^Pobf@NEc6epG(^2-6\kZj;Uj_;9(74j+J,Dg@]b(@W[5_iDVQ:o9;C_7-.h6V*V1e<;]`.a2E9Y'F5VR%UUP,`K3n%uC%t;*p$:h-kkYqJK3\:IQ[K6C(DuToepH,k#e%aT;PLH"/H[>uK0)/+8Xb(4CeV2CaJ^3lsaFZ"S__V?4'V)JCs2T\gA>Kt\BR.'ktSm:cJ__,FjTsXlrf-.rp-4>P/E\l9P^3MJbkl3n,J>Fjo`[)e&O>=GtBQa^MDQHdG2KX.PV='Q;6Bf8[>5JIJAhAup1f)iLW!Od2e^p;ZXNmHJKg]6#t"l?cIo'jMFpg\_EA0R?$fnQ2)k@2m+B%sEfa(]K>6^p%)J+^07t?2dK!',Sd'mR$f&;,#"5,DV@1nB]McZ>5c&:LEmCSG1OTU):bJ2EA$#gpk;L-8_BrBPhZ/e8D,;]C5bpli[T^ICp=M3lK<[]p?N?La6?ufgCOfA2"6r>bLbhYQ%fXsEYVadXcitBIACRnboN1J2n9TsZ\"[*SX\P@FcJhuU0H$IkZ2f+#;($J\eX&dZoQ3QXV]fnBBWCZ3-6[^(#=ab7CRTi6FW[n*QP;C(?EV\nEZDnJ5"YcWL+f4[PY>D5GR3q;iF0Y`qjT!Yo'n]LH#j]o:AQNcDLgF1";i66!$>O=#4o/_?ts-k>^CSqN/an=3TeHhZf&jR7<%qr!graj%STZ:J[rm.0K#*qPLJ8oG%q[AbU(("kUMsjh?"dI3"'>q2So$]cf;dQ#k$JM"Z$fR@!69$bY7lGqp#X)3jK!&kB=YKO4M+jj>OOId6*ecf`lKi6&7.i^nl6FJ^d?HYg:AQVg#rC`0QI!NN&ldTBT)>mdEW\r6,pYR+VTUdi2]m@'8:s[^Da;QIHU3b&cM4H,p="R6!4!;78"Oc3O[__l8!n8`;i6&5Ql:^H69-8\!UBV^GjgnIdBp9Vl1V"!sAfKqqah+\XjAPhP/6O*`;gD80+5(2aH="@^kZ2dU\eVb?d&hVKDKXMt\"[*SXlrf-/%V"!DFM%/>ESdbh5Y,ONrbT[^3]l;eCjEb1=ajaik+]!gDrZ6mV*3+-6+&*Wm]a'tN'Y&7Ao+NJ#up'N>.Q%T)0iFu5O<*nEF^"radk**4f%9X]ZY>%Xc6MY*A8R@.]JC9X='o=h#/PmAq[c`uOi8fYd9f0ME("td7_Ge;G^J3$J;d#pP:m0ml_[i9"8R2BXlCIY\kVii$T&;/4T;ZUn:1J[A"ZtAJO82t\$!]co_8o`RG7pCdnht5A>i/#e2$6(T1)cVPk`)JQ(;e]\"[*SXlrf-/*LBS:)7n@\6ao,B%WYnA7CO0hFK5WiF=Xp;h26)=\"[*_cd8eSSY$R\(UUSjjc0JTlf$+?-oXdP2B4M0nFEJ@Xgg1)X[oU>ta?"S/h$*<-M][NEhO=aoDQeZH\!FkTCMQ,c,@Gn8%G\M%!i@/3Q"%$6Flrp)p:LL0#rp1XFV>B,2gbK2/kW:eM=XW.h6HX/:oC=f>+e0;=Mt'gYgB%2'A6IX%Peh6D)+&I6Ki@3t?/aLk1[`8bS:DS"AC8oA`$0QY4+Gcb0kGJ*($Uq5J6qGe0C=T6^a`/!liT"2+H^oAIc4Dh-aCn0RS?;t#:p55o>:jb9&:HdB>2IeVW%i6CFk")kmF!Vjq2=2DtK9lNUBrFu`lcK.?ud0;As#Q(IsU=mq2)n<&3rl[l-72HD+V;EEUfg,L&@%"/"()BRt44=2]DQJ@VAdnn'L:6'U=IX/s5\_H5R4hlo"6d-Pj>_LBS:i_?]k0YWtXV7[2s>-`#r1_f_SQCCnW9MUQKR>)`%`Y^PGhm6&=6IAm>bfuD<_fC=8WnDL1ki`j3PmUoJ@2`*\71e5gcNS3adecFu@R0sZOa7H\=m'o2(>Xjc7CP:$>W"/%QJOW_Kss>LBS:<^U#.V2fisPrF5-[=PE^1)rsGJ;2k]7Y#]WZjt)?`cPH^D_sa8SH:>3305Fu7ahG0*@K`jno<-aJ`D&!=I<\\^ic\jRT@UQJ6QlB[V,IW[m#B1q5@mH+'Sco[IX,?&Dq2I('rTXC_P]S^I%hDqhl6QAl_0lD?>*,)GQi;A-Z5&#NY.jf*':E-1K2uhZRks1fTJq:eNU`Q;_1*/dltfK.8WdPXk0kQ)mTVIC`&g;<^q!Q1O98K7n,2\"[*SXlrf-/#HtCLBRa%]3IXXlrf-/%QJOMJgCTKl0>g)PeKt/%QJOWp='((#=abF_nOeJeroX&X;SkW&.1E2X6sbBI[gpY5;2`f!$lW)BVbc@=aS2qBWtWCk,1.k>s35,HT,oG&R]>D76dp-7F0Q32hM'AU76!8`$;"ADP9Ja&R?&BZ9.qVc#T?'X#@%b5:X[!g[m`nScGY@#-R!M:6n-gB)jrcqG"n$Co9NFP6HAiMaWs"c^>9,J@/%QJOMJbklU0B?86ardo%8mbK(#=abeTES%MJbklU0H$IkZ2dUVCQa=]%%o,Tj,pHkZ1soe#hh7FK8i\eT3BM"M']W;`6n<;H)(nasP161f'4W!+\`FTQ%tF0!i--8J"eYe<*s(WY%mBh^O=lcFMH-:3!IC""oO95[ho_3XO=qJZEd@`h48]meJ8Q)3h!b;gY[I:^XCH;&_gBuqe?&pWoor3>a!"4^1i,g$/I9'Bh+ERec#uS<(Rg)E^aE11ka9K1:FK9bN;r^pLnR,T+j!-WNINk/Ig'*J)#Ai,u]o&N`^>U=&)FH$Zr7;pd%CW_9TNJ:H@)m`(hC9:4!Rl"=S4AlBRjoTUd78#df+,j',Vl[I6rEr:6uWIDeKI;hU0H$IkZ2dU\eW[MFK>@mkZ/d(&@rV4MJgse0\qV(7CT!qdB2V5F=X4=FK>@mkZ/d(&@rV4MJgse0\qV(7CO2$>1OSa&Ya[^$ooCKhZZ@sD24n\"I,a*\K1*E`^@q=$"?uVE(AR7ZrsZis[_Yu\Y(&BOZCR837#Wdu>h@u:?K%+*1(_%;&lAtU_!j'Ai+ESZm+:r(i!`d@!ZHKn1Q"+e#e5n*%"<.IEk3hU0H$IkZ2dU\eX&dCo'o2#H9f@Wb;4UXlrf-/%Sa\d&m/"DFM%/>LBS:'H(#],%Q73B&/Wc[0%NpC786WB6/q-HoOHJ$26`ArK0ObY1LN@K#$4<,_,nAM/b#ZFp^1-\.tCDXr#)`Q.*5+Bku7Lc5kdihJ$_s3fl+8UoIgEH4f3GA^E.[5dq)UDUl(FqIIB)3-#DL.PbVYU8gCi*i+J*$qX1ICrZXi]6TK1Q%3_ZJ8Feh]ibJt\d*-0(^&1sK.Yk?#.KZZRDAE10Nb[X827P218%mX^rCO5`&G-@E\%6-[g@YA8>^QF22\b5>%LXOP/N_MJbklU0H$IkZ2=NF=Xp;h26)=\"[)t[a;/?dsR[o+sZ.VZJ'!WhKorMWNY4M!e<)7--t(&&phTW6@I%_6HB3X<^C\[bK'tN_c`tr'%0.<=mh9!r\MJc3O*#mGrh',-p5Bh5c*576OV8O4K%U\mL:,OId"Te9lFfib0sM$3UEb1eD$lEm6JfH$'D>66BZ0J*)9BGapF"2fb^n\E)'L%_^JY7Z$kD"jbk_@5sQ,1VuV_Y0nXn7D4iYrs?e$D?K?iYI;G./te?3r&Mf+/q)?:q'E=a)>ETosf6VmbW;A?lUn'bbge)q\a1Um#B:j-j.K6U%HOINRD2;^umirh3QDXlrf-/%QJOl:ctN7CT!qdB2V5FK8=Q\eX%YDFM%/>LBRuFQcbI/%QJOMJbkl3[LJ(dB//h<_rYi2))dB!4,m@71%1T'u@aVWLM.2_;(?rAe?S1Qb_rk%P2GY_07!?^\C!1._o>,k9;i@+k0XmVYdUL)AAe?RDk10oJ@AaH!XXY%#_H+tFUt\hUC0okCJ5G.mOd_;*7mP.tr%:RM$Kj]u/)=a30kHo?4tJ'\A;';jSmtM+Cs)u$lWI'*)aMtP2%?26h'+N](J#@+?-m/3BA3o02X=acC(*M*&[8sV%1ZGIFk,Tp(6J?(@bV+7"W(G>?l@0`V1D7djkR^"`gOL'LVu4HT1.EiXhJooRb'HdhrJKrCDN>JPD%i2G1e`JO\^QaVH\[t314^"*=oWfNC]FZlCan34@IM#<<5\-IB\d&lM4F=Xp;h26)m(.5R*>LBS:OPttgHF6S%/W`"(W#0Y!DLP?i6KgrkWIFh;To0Q1EY#M$e4(2NWtI'4m9OeUbH+U[Q]'YV`Z=TF7?"#%HY/ZLoO.J*,7YQXLD(`r8R!&:q+=+H\*D(_oGu"f1Z+\(n=Kq=hP-k9/6S013F]UFY"&fM^FPNK[/radqd]G.C/9GO9b>6k&tXh5!b%5kVo0\G7*0+J*9pT/%QJOMJbkl3fB\9dB2V5F=Xp;hLBS:QO87\(!ZpFg@e^28+Nk3ZN;,Ij#OE_Nq\H;9H(WU_GbEYMTXjM@n3.>"t;$YhO0lu&/?XCb)kQ9d15P!5k1H.Y'p10l#82@UVLc`R=PMC#$W$l?HJ"$!Fk]QOsi`\V"?2@Y6[+4Qae5g@g)/FoR"%%_5a5oXLPm;NU0rh3QDXlrf-/%QJOl3rAaeMD:t]%'VD\"[*SXc=:1(#=ab7CT!qdB1\jkZ0i6\"[(9-$1ZK(#A/BTj,pHNoO19@N"5V#5I`;YCXm'gYc6\")^Mii+=586EcLBc`O#HOB8STdY\aK2S0"XbcQJE\aH4Z[gM:!F=W2)S_-t;jm(A,JSgl!ZolKl[#]T^>iij6Y6*DTghYGjlSUtCf)V57"+g[sb"ACj'T`W$Y\ld.*#.YKhaCQV690f2mLMCkKZD&P,u!lrJ[O[R%.oYfGH__rmWI'\de^rqf0edK"X+H/MeA+G3??\-."O]K#O#4I4Fh>"BB<+V'n;S=d(EFsl)[>!*87sZ!di%++E,NLD?AR1"*ps#BRtCZ"WYQ]\0+aqq;@?QPC>iKNKMOOHqM-:-*sK7'p)6p6K`"4lKM+<>e^;$48mJ6k1]P/N_MJdR,d&m"/\"[(I4`i3ceT'A:k,YdPG.-0+abg8qb!,'qfgW2_K2fC\BTVhDeV/*qjP>=C-XQtp;AJ9a=]!>?!So5q#LKRWMu$8orig^S5_ehSXQlCdBd^p.)d(+fNSjLCcf=tL\Hbg$50rrYXS8c9k+F+A(>SPE7;Bm@FuHsE]UACB"E3l"WTXZPg,/$!@qWf6:[D1Y()>9,28X*]uXk#V>B4$'eSA=,!6l9O66I=!IP>djkDGme_+D'8VQ5s:M(/B\[FA+p`f^8%Bm=g,0+<\ZmL3tJ-cQ'qkg(7.=l@Kt\nPV#4(_*dej5Uk"TK1=/b\mo3%m8pj5t\"[*SXiUHmDUftRX*YGieaJ927CO0lF=Xp;hLBS:4XOS5c.tl]1]!gdP)X`C*md7?VQ-V]_YR7O95s$Soh#[OjiJoh>Lu6F:A@i=K[;7k7MtHeK4((H[0#R/J)8@!e$."i(kU,J)OE%$IE,OBSA(7RA3E#Ye3j8/"9]2`c"'E>?a,GQnFJc>l'k@jdGBm+rRKC0;6&Vngct3OY="q<(rQe\(K@Ah26)=[lSXA6FW[ndB/EF\lI)'Xh%7m\'dXQC=B_&e<6FKq#Y.uI^nSHmVbM]eM4KV9B\FNsg'&&3a4+*0VZKn"Q9cj]#&>^_ZWY5'[^PoqUXfX7M@&XH$UVJDq\ur49a?KQ#&^i3#5\8%'j>7HSs\J!4ERWNOYbor,?mFaoT`&Y+O=Fl$e>1gM(C>T#8iFYW)l^?6Spn5gm?n`%O"t,[4'O*IJmNfHQ>6BkUq\09]1$4U4![/=]!815^j:Pc7FI45usVW5A>+-jXCp77CL@RV'<+ub8*19Tj,pHkZ2dU\eX&dS:tk21N]\#'@LBS:=hW]s)$c@/dT"Q!Mj@^C8")se^\kfMEi5LBS:YrKV^m,Ge#ClEc^AsU#$l'Z,kZ2dU\eX%YDFM%/>FiOUXlrf-X$_SY7CT!q*A_df\eX%YDFM%/>FjBmXlrf-X$_SY7CT!q*A_df]%'X4W_f^GQX7?2lBVerQ3WkUO6hC3R5Q`n(GsGLQ;8a@;n*p1koE=A@OGI%+h*gJ$q65SZ[KikkCE1Zl.C*YE9L?9U[CmuXo-8'ML;uBDSA:Em^t[`rq^Ef!Fs_.^tRQRR!`fbjC^7kQrjToLhmXHX&S`GIFK0Y]9VbE5YOf"UY`4@-=$Yn8.Q6el<`O&\CDpfG6W(<:Mj==,\n]p!jZ?N-'ePImj4P5Na;M?F>b"H=q.+dD?J\)1'6ao#+3'/!.OR`B>FGQ31.=`$F2`>+Npj.[q[oTi,utRT958*5Te>uZ9A)iS*oWsDFM%/>LBS:LBS:]P9"^=lQI/\BPmmT.;)"jjBgTj.2M\iXYRFZ5]BW.2CE:ZOtbUa'%3QXB_=0KfrZr7]o@1L"8HdQ"Jc%LC=N9HY!2h,@kDER`am4]R^F.)mEn[Cr+8N[jAW7LIeV#NT=KhVJ9rL.\f:JDd,u>7G`s]%%@4,e"-CqE`*u[i/78h$$^9]gNkDI8'MqA*@^-#)UfLJJr%P;jVD)AO=](&$H(XF'AV6Mk>RB%qi`RV&:EA[bT.NY`JKHmE,*r\5af[!2O"N,jRWNb@q@?MJbkl,52>RLBR5)7gR=MJblN%s4kDTj-?:d&lM4FK6X?DFM%/>9,MA/%X8-ge)1[^NoJRYhV-Mg-1h_@ll:#-u?pc%9TcoW?H26Nd#p$15>jTl_J<d>Gg.Q[)(DE/1?g!5WTk?.NH$"ccEQTDJ+p`-eKSJ9o.l>S]-Ya+>0Jt5jF9TDl!<&=o_[KAipD#[[)2j*p,-<\6t9em"hb2p4/!F4.pUSIEg.2#]M6+u+Ts/pB8Kl2$060M@IeueSj]?3q1K_'7h5TZ$:?55;dD=Dm(o^U_;W'sQiX4[RIA-(JU(]d(#!Ck*F^e\>427R\c3Z*3V*4.e-gII["e!UPoGOg9uVrIDo66<9MdZa+?cDr\%qdg4:o!]HE3X2>P4#f4#.P5IF3]Ae3)sW)n3W:`#AF9hu*qET1LZMIgsIuAF@SK0\\0%o/^#RWjXNt79$')DQ!tE+2=ncD#tU*V+6GWW,L)W>'q.-8s>6o,g\tR\oUPV<$e^lDWSBFd)W8a&OM*6F^_;W[-/,@ZpjK.I(W[oSSA*fZDokI,JfVLqah*;llYF7\pnVJVkJi&"$+,6-,6HN\boMsWN$[D3)1F:c"mF6\NR;@aT\t+HE1TZf6%f,&gdA'+;M:aoQqMSA7;i2jOPk9>oS_r:''$KrPq\s")be9#$,WEJ@=#%O]qNqjZA1*JIE[LfcnU4TZ:=Vi"80ITj,pHkZ2dU\eX&d]S15l\"[(I.l7EP0`a7Gn&i7#09h=K`uLSr,FHP7.VOs@+hQS+uDTZlBAD.I*-U$cen\.i0"'.Vr1ANr%Gn?eh24>M5S-"Ie7.>M2*,VH^QFH=([e"6(r%E>e(/u2%'gjYJ)!Y%?GPE$D#cFITk2;@T!f#?8i0V/dU?DWQ*qOGh8JMf_gki;icCZIuk2EtVj)Jf\eEkal,hgU9@B-*8AL0h&\e.Q*JkPsO1TR7mV68RB^/h%d*)aIQ@;q;Le[I9ljPA7K*YPfjf'alL8\'pY[^Ib'V;]=#$Kg@[@;-L5&SEX"LH$`koIJmUY3!kA4*"BZaK#P)AeeAlDd50=GgQ`&.+d:aMu'c!k4lUsL6-Km\"E^=:bndR,HRAX!gWf:1"<3'$75H9skJ9^\)rM8+i.$8;'re/Hj!Qq6JG`FZ?!7H(eH.s`qH5NG]6Ot&[0bnV6.;gaO:f9.^V'Kl++4@;/^8kgGDU3+\"[*SXlrf-/%X:,$f-\X7CPmRUkG5*"uu.]3_HGfXJ]iA.pW29;bNc_We4cS%-UaNd&hVlO'ATm`2tr;2So7N#5H3Is#651!f=<*E:pV35Wg951"l$OO6a6)9Z)naIA-X:KDDC%\5fM=!4bK@B7a(NW[-KY(/-uEckO#-#:-R_^huK#X'&?ZY5>1ZN3[P+t+7#+S8e3=5V]f"Lch`oDR1t=^G1NjagSKj(2,&+I?2e7=j-.J;*f%d&T%",H3.6-@oC#:P[^t:3b\c/*.sG,nn(8D,;i"^nJma6uH3_YfXXpc]2+]lN+KG"MNUU^`F65J]HspBRF>08>kiK`'CAu#5cJ^^L!8j?@!J=W!/-+$T&cZWW@^k:tLkn=Xk@?Z5P?`g'*,a$JDXhelt^Ihqh"V'-Pq[4no['rpq-]IV`3GMdQ;nQsZ?c4o,cHMJbklU0H$IkZ2f+o,"tQh26)mW6h[1gU0H$IkZ2f+o+nnPh26)mW6h[1g)N%b\b>n&MMf4-e?4B:;.u?#`9b]lE;$+pf'h.dP+=6AC!Q9/%?mXe'c0tSFi0Cc)K@jcOX=$VJ/Q)/n/V)BB4BUIa!',9a;=Q[2"rRcQKTEbY:"4Sj-].5U^rT1`jNBEroi=4C\*>!YXn:?oDKY!iWuuG2"ap4)IgYIq"lf%mE;>J(5\b`gR%=c:CsLM5Y4$WgKXN<',;V0oBE6_2gG3&BW*#o+QD4ao(bUWHjFH?<5"a)LL?hUJ;r3!0<3%X5nuSpgJ8Lc@(7TT@%@Ta,":h+Ko2V2:H_(P/iiD>N(e3'`KQU`2SEd[A;\>HokH"!"oZA1Hq,VN:$f6],B_60EuTOSA$SG7ba^r$omI*pMoEB"E^'g7>P:e$:P:C'@W"T]sre5BXU">(Yeg5R->tOZd*]%?N(uJ_MWq52oULb5mW9!\(M:RNQ]4^[APp1HQ6TdchP0f7@MAJZ+Ym\Zo6Va<8rHeU?/[O5BG62q:M8fX:m6JO?Q'>*#`cbH-?(fG\Fj(3oJ*(I@um(7;j!&+i$;`N=aT;O,9ZRNN5G"?hLrHfeB*#uBr4*8QKi7CT!qdB2V5k:Ld+\eX%YDFM%/>Fe1G91nhe1np_)*IH+X'fAJTI>B4?.o7;$IEo7Bj;!fVsGdo`CN8.YDE7$"c+h5[Kl9WIi+FRa5$VkJUS:(bBNH'7.+fQFF/-FF!tP8nFW(*mh%+Tj.38@GE@/d6'rg;rI,Zo0]adZ4&(WkYm0aTR=tI1H-e,qDS-J%t=jKqtWG\C3RU@;M$>QFIUfeV%%A[CnH4r-+(+<67^fG6U!`;gdirn2QFV$=K[p(b0g'T.hnm$=m'ssMY#`M(B+5?Jqf'CG@-a0#$W2`S<ndO]RR$'s0ZJUER_5GnXl="UNPhI=)<.$_t@)H/\_XQeNr9S;Hg7?GV,_,dE9IeqJ#@!Q2`gq7k>[#HsTc.1WBPZjC)7AEMKa3Zna\!$@HF6oUdgTX#RU0H$IkZ2dU]%)'6h26)=\"[*SXlre5&\8_5MJbklU0H$Ic#t*.-*Lb?1Njm1VJnUa0&K&qS@r%6i@c/G2mtImoBnm%6i7?j$%PS,T*"W!7IM(<]rgZlCC5r9$MRHY0MSt,R(p]O5C%r]a[fZjhSt!;37AF!L\_d`E\h\Wc"W9U_'==1>.X?DZe\;3gXRV'\aamn@L6.9j>Yf'6#Y,\SlCFsJ8b+Rm0Q[u:?1=&Y6e%i,55&*)_XjI9fe5d@:.!_al)aLO_l;=-TF;8&mH5jNmjsAqF/gsdp?o]g#bo:&+]*^$q2V?Y1KB:/a0^9F8_HT_>823_j)NaW2JL[VL=I<7pqYICg#AVG`KPKcZG[J:'trh$qWh]*LHS,*t1&jnDeA[9`t2]EM3F(!rm@5X$h!\QE_N\Q3*Bnsb:!,=S/n8qRq/Et'ZP2aB"ImUCI#b?n8Yj/mZ$lIf/R(i5T[__+1\6#GLfk11mQ'qL>mqZqO9+e^DkIkV;]>gTC)]at"hplQ.N*Fmu_E^BV\YoAIo/&WEgR]=8k7!dS?n-)\h"phu-%_Q&^r=@P.8`)@c(>$@$i\)U%6]!;R\Q]kf4=s]3mXj!Gdf#Ls0f4`"HHt-.u!DV9"2_BFmJcb,.R:"*H:]M'R9)K2=TWJ^'=T1994UWM%!Kl."Kr:g*a06iitWX?.]AA,>2DjRcn5Qc9)rS\HFOu4UJPt$fLlH#acHcJ]X$3&7%hWj[Gf,kT5OLG'oU!_/^g['AWgBYlpF6?NF*c)dmq?"(I1&YW00"/mfM!Z'@-_RpH3?YmcG3$F!<:Gm@#:XajM)%3eG:&6hmY'&\!&?3L_C>9G\j"BXKQ""R"J0R@42gq;onj\cM7o_plg\\/,Vhs\Y72OKqlJLd)-J_jju`>u1qPQEAYs$(jKp)D%tVX=C:^VfL_#6>5M#RhOS$mRHX+:&Sg"rYWmr;2'ka:'g[a>S"GM)/;J,k8g=/^(1G=dJE!Ml^1uWI8,EOeOakC[^*7Hf[c^Y353o50\+dA2d`eNU+BYWigZWWd6^l8^8i7+Il@/S_!E:Do*?uE+ISp>Gdpgj7&E96!m^_LVGooS=J[XPScba/;OUY`+F0!0/p[,jId9388;\ccoC]`Xl$c@:GfTj&WsOTa');rGm&PCO%pPI9S-m-*($K/+tb=99pAfd1\g"3-[M^:'HS->bb,u?e!LBT2X;S94Hmc)(\lo<pKKtS9&02^1Wf^5%6(X<']QJnXHkYcjlf99Oa_j6osY#s9FeP]?,KO"9qZ_BS9I5n\c`_3k7kTdOSr9A:pX0?2]6#"](t./>Na0/*N#CZ9$"J!5%UGM'#Hj"E^qn1p/5LV^V01Qr_3%BcT_HlOd!,"@3-t9*8>N.L/05%:X3/McWi)H]<^T%K@/S.apkSnHI;ips+1QXX&f&%d+<=QS2hG5\#0J$krf'-n)"RL*7t?g*BjI`mbJ=I+5@7t^UF:bgUeDp4ELYsIuhX`0UF6kkG]^JeGGA&'XG5*3DfcSRbTEcJ*3=:*+m0>#"p4C"GHU7-"O26P!4eQH6DU7`2Tmbiu?QV8=q`So0B-0+AD\"h5k>Q>sk90!Cqbb/#?/Xf&IA$>M+`R)#6#bi)@F4W1-fF'JhLNKELNagC-]T/O#QY*:*jL5<8cs*P2aZo[4Lokl'Q"_O_..lrFn:hJ.LW!SeO+%UOGBAT6+=bAuEZd)).!2%+nVUPA9rf.;Oi^A?UVRTVLg/%Lr#8o>raP$<'5jAp:O\WtrBDC)c,8*!]k/%Lr#8o>ralF+d9jAp:O\WtrBDUjcgXlNO-I=jZ`;Q1Kmd!Hc!m5o*R!sa.uJ:kP5^k(@k@"7&OYcl!Ab)a$`SY]/AR!@WL*[%iqtYYU12(aps^"%lFp[$1tI)>Q*;jC\I2LS?@'.[=THa%mj;"dY$c:b!a+;UHm\6'Ve_Trb-1]:F0_^)Tb!R/lR@@NbeFb>l0pddhg.O&BsK_!\(I4p"jJipmuTZ*\mK"PCT+iZ]cdkJ:&>+^e_:?p5X9YQ,GO".jjL1H>$k$#j>Q7DNJn+`>8sB/*`nF)s.QYHHlNXG'mV>,qE?l7R?TCYp2X7rBW^P$?&1jAp<%DN!:BDC)cT>KO#.raP$?&1jAt(P\WtrBDC)cT>KO#$&\41^WYr9<-IX(Y:Bk@l5U=#K-<'LYRTafD6)6-]NA+?GMZK6VcQn[F?]A`6%`Fj3FnMbeqAQfVN`uK'!#9hs5qG#$P,T=\8u=j7R/h9.b/g]bLL7X$PjIes]k_$UGqdc5!P\<#^B5\_f>7!l*<_QnGJN0]4og_e0bBlq$(/:+,#_uZ.P_#KNiC*E_"(q.fXLTn+;,\"Z03$l)BT$Ej*-Gd+>Prg7)@C6'SoFX#"1o^mZn<@JuQks'gs7@?uk6b?nnC>iug*3#%CLC&=o6kQd2-,ObjAU[?cUEDH9"lm(qK?2[n\9@cW3.:9U\:&W>SG;:j\9@R$i.-bU`^+l4:J?:P,\BFF4(W0l2W-hMG?jc`5U9`Pl4.4nZ<:Ya.#:>?_:3K-h]oFS\U^XZ]4E=e7R6d&PICPtgXO.n&<5HG/7EX84dtPghDf/<(Z!,nERbn2NT4Y(K@AubU9PD'V(t;R<>i>Iop@\CQ\rs"JP^t``Agq#KI;WAX6q/ehLk";9dS"4L@&U%EC/X@t(!'>D0O9^6d>]p]am(Wt+kNBXr[:,/e8V?,NJ9*kT_"d[M\2n^@g`F$/HMLeYe9%8mVWfn[:P$?&1`#9l0$B*\S9k%$4\Q-8'>LeYe9%8mVWfn[:P$9g,NQWYW-FoiU\0G<#ORGFdjld6TI.r#5@U%t>$(F,Su!\P$=EV?egH?3$M`PiprI_R+pCdV$Em((Up_#Oh)*(OU%EAb.FF==Ac)cFgjo=^91&.XogQ9&_j7KTjX]8e5PZb\r:4GR3B77`(eE#rpndnd?[N"cT:Gtq4-+uiger[Y6iQa[mB%bF$B*\3DC)dW49t-%HHE:h6uKCZO^#4&\Q+:'X[F2NXZAF^/%Lr#Wq.4+>O*TEWY2kmRRD&D2WRmJ,.A2-+LgXoaK=N(c+$b9R0JdA'"kr$)bA:f6$.D_,\@fWP"]LSWm$(YHHH=t-G+kSAcWl9FWSK\.53P6#NSpNO^!Np8l[RTMt?,G?&(_AIgZ,3a_/HSF6Wng6IBH#"JnpY_/R'd0=A#Wl4='KO!%WJ@IM!"^%>*h4$62+2%i"0t+>Oo;'l@&XM=!?MW!?"V:OihNc[]%RMc(FQ5-DA`T:,prc^b9nC^Jn02?@-3j"55aG6j`:n0BE3K:RqaK#O:7OI'7l,>P3N\WtrBDC*jO\Q*5%i>IeJ.RW:n@c.;GnnraoMVA07\mXA)O7LGntA1EV8=&YV]\eB6m=)MU*IO.2Hr3WK7Q;'in/&^t:cW=Ngm8.MQoRa08l]Rj_'c<]tLf[g:-s/77K[\a2XJD@r,VA$m^da48$7:HkBSf8#,HL`Nb!X?4PeF.g%UpE%&Bat#mH'DYTV2T*t['"EC1(rXEA_;R`d5g_c=hqN2dPe5A`%Ge[ApY43l-kucT"Y:Kp26?5s"l(jq49TipH5F6"q'GP,CKl=-](1q29-7a&L8G\GE@hYag@ZL8g#qKFY)S&/pcMs-Q^>&/12(MB>ErC(@8h&seONTki4#>6'lraP$?&1jAp,Sge)J7,.@p3p?k\;.kRkmq4DKXl`*e:GUtE.5e^&MK#_36hFY8*&b)KZbnWLubMPcK!&u70#.L*bHNA)EEF?tl.O2F&*_pE/&%D(1=tG4%6GT0O4p"YqDM.ue_,Fb*Hp>\`(-o8,-:hG^"f:=!7T%[?+^/"'TE7C&9c9Cl:_>fa$t]1TC;J3P\=jo]kjjYHo6H2/:-7PR%>^gjYR_"&2+YB#]pc^,0S#EL=YbQmoPnB=qqV8WKac=K:MFqLsJ8on-3SBlc7EXRMR@K:0u2[@ta9/@kJETnh&oXh$;;D&2trV8=4]J]t[B(M\&?n<*#bi])N=3lG<3u^gKo:XlnbPuu$2I3j&I1L@[fTu(FYY23if^aal!\!09TK&8CQTdG?Gf&,#>9KP@"B/Ak6+QFF$-L65\?7W,U\O^#r0jAp:O\WtsM*KaRJX]j^bn`2OZp?jQK:ChfK>&GK[Ft;#/Bn,No04Y+>MC(d6>4sRF+_()Ip/b[nTgTT2F[U+MY5fk!GYsg`.\903b)tJZ130Fq.?uE%l`KqjCAXHG^/+g+KbE=l".N(F6S%9f4Ylh^ck;]0E9gf.Bgjn@5WpLJ]2);=$F4rr3Zlc/1@^c.Bed^Y(/;k^Gq-'cO+:Uo75/XdW4C(ULIAreU'VjHd#^ESntn%pFH!=N>"9kUdJf^;7:M^VAi1ogWgF[usrQL>8e8jAo8*[p"^2XlNMJDC)cT>KO"u3H?X\Q/&AojAtpt\#L@WeQP@Y-+2iT)e1B7`D't]RaK8in5%&hW-$/Z\0XJ"9iCqQ&I/\[%5^IS`bUmGCXQ-S+*s\R);kWLm=b#QcF2mSE+t/Kcqb[,*3FDg3*.eN!VViFcS`2eBTgAe1qXstO][U!]3:8,l*YY>5qLDr="EH*&HXgkF9QilJH(#O?kQ]MkS4p6+Q*olDS^;o'^."?i?hn:\hE``:N\,-LnBAN3Wnh0fYGJ:9e\0fS0WQ5To="0iD:6dK&LQ$NQ7IdVZU9$f?033!b5=g1j<9XJAKC5J7hc=mUju!m&om=9KB+@fs$("h],H`rmf1(KO#.4W3sj>;*kgFa&,c@bmc%O@qgN((Nl@P^$+R*L.-nQ$5%QsaPYC]uR'B%&@rArU-c;*l]j'MkU\OH#`#9F$0/Y@M(9[Cq6hu<$Si5m?r$M^ZHAe%d>`1#;d[(PXph!!6Uc=X+HOR0@QhliiJAAHEK!+LeA0go>+:09m>IfsI17;d>od"r%%bIl3e.Z""]R`_'@:8p%Leb[@hWfBreBb\(`&nkq-53^n_AH'"Xnn`7!Rp#JL2Pp@W?SK>#=A@ul*Wg`2jf%t*>E&4oV!So?6D!;*.fGREpQd9$a?O%IWKYscAu/>2Ct#q?.p*8mtS@luaVNhHH1*\9[[%ltf&i/igq0Rm`.(Fr;=N:n0hqdZOF,(GS,U'jk[C!D*[HqZ([JVa"gOm4J+URsE)lp3j,I`h?afXW)E\"\#QUPfBE9('c;kB"d\r^6a>:j]F*gBm:4`W'`Q/"uL-+B%AF]md+%7bIET4m-.ZWq5p4Gk0u5t'q#(IOj"/M7:mPrS\X`>$B3!f^a"ni%3.Q\*rMYV57#7QC%02RO+U),Dh-5;#(5qk?O)!l/cks!A1@a(s6AKm'Bf8/k8sC"\20NU%mTbI37)^dn3!J&R=O?"\=JulD/[a.!)-+>gQ@#$LLn9+1D`>$R/q?/Wf^Lc%I9Ulpg#&Xl85tZr*-&[miARGn<`VX1OjAaNk4ok6:cCU>E"[=5;ffZP2jG7euJ:o(e9CIpm"HG(1Z`09*s:prh``]NSI-D-+B%AafXW)>o'tN_i\0*F*ZJDN0),_WpZ$S.A%KgQ/"uL-+B%AafW-*EiXp>[p%tc['pkqO]tiA-+?c91NG"VG`_Q$cY2/$"BWWB?skOYmHnTi+:YIk(&a^.*#hCD?NBV,)K9*-XXYR)WZ",!@QVn<]Ld+d3D7!M&L=/n5HqN[=pHXe9`@%Q4*Ij5@'r-X=,48;Igicj$6)-K/%Lr#8o>raP$<'3=Eh;U]ocO$7H@Kb;'*8JebFl^>HMu-))SG_)/o^V]#$ea'#$49W/)[SR,6:m6UcO`\YnNeF-B\gH5JNBbQYsdXVnH`Z/+7ikqCZ"T(N2c.s&^1E)9W/i^%Ht8,\]cQCLACtNhi>IebCFW>XX[^YiYmoq8dTp_Xha&QCi9pR>fI-QN,::do+B86b;hgM_?67n`P2&DQ2_E@PN%/lDflRS%Y-./cT8dq,L^)VChg]i=h(BHcWUZH6]n^>KO#.KO"u-upiKTQIfo/@lOgl6!_bnrEe.fmrQ:4`*tg<)a)]5[NsXM!lc&?nieqg5nnSW:?J!HSWj']%(FkA^E*mfre!='jfD;U\^qsk]>+.!ss-7L*IgOsAXf?E*iAb?Sfl>oUE;5.B?a]NH8@.eeB._G6C:T%Hr$>Gu^P.[*Y8+J?_Jc\a[eO>rZ-6G+ppfa\aK=N(E\"\cge)J7XcZi,j]6CP[j=EdjAo9MKtidT.A%KgQ/"uL-+B%AafW-3EiZ_*8oEb!KLgdOWbSm0=)ohQ1F'Al>IE%arpndTi8jP63&-p+-\l14f:jIJiIKt?@c5m8"IpBjJhu"gi7Ph)TST-W%QJnh!npqTR#tX5;qGL:gs@<+I]abuE;X\(3NO\s`1KI2&d(PB>+['2ZAOcF>_5O'*>BJ!fXOqXG?bO!q/A3#hASWFY087/ah-LqU@l15:7pfZsFI]k7FUXp<@a7/8@RaGY]1`7'oMhXQa)MJTBIgkZ242q5iK>4S+fCI_dfCG]gf?8*k_0l4W9CVsQiHNgP0;UFE/%Lr#WoK1FafXW)c,J:?DRCb!P$?&1WXTS1DRFS9^GoC3\WtrBDUiaJXlNN'X6/F-0"5#I>KO#.`FjG?i3Dr6@3EEN'j`rGPokY0?Mb^5`_,IV@]V9o>qmlMSC*E.JYXI$f8a3Q/&t0sst.`//jnI!'g^=MYB2*L:[QT+\dP>LhWJrh<#uO^#r0jAo9B>HL>:jAseT[p#EFXd8$KE\"\cge)Ilp5rS$XlNM_OB\hUFlZTR,.CaJaK:che1#t>T=!(0239^%5HNI'D9`),oWgZGLl*BQBeFDJSN<`LBRC4##BE\"\cge)I\Zmp)H\Q)SoXmDGIF;k)Rl0#n/Ie,e^Qd9LQs7P_*j!F3E1Rl36T6WHTfp7Ias+*LV('MT6(QWH2mL0``Lj>a$Sq7SQ;:b6=G/g_HhP'nechgR]Xu;Ru$7df;`a<.ibpY\<4S:LCAfBdP$?&1`&]'NWYW-F]Ai!Wga0Fm>KO"[Vf^W;`SY@CW,aE!ebVdR-+@WG>OeH&J,7LLV(LH;VUr8/(LDMG@*;d4`@]i[VCc#32at4Hd[&M$VCc^'D[!fE2L'65>N"T,o3b^g!$etQN81H/YRC4cV-EI,D]BqFl_f-r;2lJ,;BA%+ouD1-LglYJ!h?[a35-p=:&'Jp>:dbD;p-IR%d#BE\X#m1I_U6+o"/QTI]Cup(%h#ZaBcN31R<3KoR;bS8o>ra''k2*WbUTqD3*Ie8T#i`P$<'J"b#H4SK,2*ge)H1ed&`ce]=lH*kBgage)H1\*DlYqT,d"3H?X\i>I_[2a$*4)0A6nNBd\&9!BZSH-L](B)o/Q3F7E4bG0Ck-K3oNV+?CO]s:#(:f^9DNS/24`W'`3KrV&[N"Ni]`;MQZ623!&"(IiPNT(K\lCkX#'-ceaK6A@D]_/fGRY&)m4N;8Okq^$00ppIa/ap*YD/cB[k=oZRFPdQP,WpPpQafSb+kO[\^@aW8Kb^=jCdgH2Sc^kBSnPcDHOBY^SDUi\m]SW\!6Bk*eX#(APlF^$j\V-iu9'u.E/^=m]?*sJTE\"\cge+XaEiU[P>I>u%.qSZ([o1dD`#>DH/!'X*-pLV6#1-)AM4=JNb^(?CL"!3uW#NQ3r$_Jr$[^RX*0@q,pJ*$5IO=^Sd/m%`fB?m(Nrl1:/IDJQ;DV_XNqYfQ:]eg=`df@51i,g!WM:kG8T>&9\4e&RfmW:N?e.]^:[+1&+C?[M>Ws:"b6'sr?WbMRShRc]J9quf-,:-o>Wlb5H:koU"ShSs[jU*`fj.p=-F7quYO6H-b^$uYQ8IZ'Q'#9"MP;Lkk:b?YKe/TMQ5qA]0alV;fk^]Mo#2>kn)&QoAnJB"::-B?K'A[,ONj'+_I=#ElH@ca0>.&m\C*SIpsJtm`?M6o?IJDa>d_?/%G"us0b:d0G-M>JX&J16!fjNR+pI%.Q'#9"MP;Lkkqr>@`fJ%l-spDaA:qRu?Mfsq:UcpNkEO$D;*Ie;Zm!nu4ZMZ_moDgiXa:.@N#R0):Bc?I'6?i1NrHL`n[>:>#8@MZ>_<=S9^oLqMj-4:Hm!UPE%B.njooi?VYafR$;[o*o/;3]@_ge)H1[ust;XlNN?U*tnn1`s8nge)H1[ust;XV=3$'Lc_"E\"\#9AD"cb^ee"eh4S8+f?o"#NTDSNgJ8P)NUL+..GJ"00pWT8FMm'c'T&9/IpssZ(#C919"gQPYLaE4+_$V)r.+e$HJD0j8`gAX=RH&AHjI&X`Oj!gJOkcrlE[sRUPjV;i+6It>E"9uAXh"YQ_Y][*bHKG>Tj%t08hTF+%(TBUO^#r0jAp:O\Wrm;9".9-[BUpbP$?&1jAp:O\Wrm;MUIoT>A^I_XlNNbFfR*4D$RNoBlGjdCWq@ad9/.9SI(+r!q'e2/C4"Z3-aqT07k-QEH#\;i;$*NK4k1r$2j!7rrjf[J+o$(%$$o>&&.PS@ph-Z"TRZV%tO1p$9[h)_dI^G$>rWd_/KAK!dN\3Xl,%cq%'_(aD#U7+q7"Oo:We!=sfO9\"Y\:G'%U*,EWj_ip7sV[n7q*5]0R>\Wrm;8iJ&7n[mB2WS[3FCsLK%Y9^j,[p-";GYCZk[QJT2L*O0j>KO#.KO#.4#A>i8loS!Q3qH0Jkd/0JNfe-YC/RnS)rj,2h1nCd$!!`:R[tE'"8!pYQ#_4n`IVh=(@X4TERYi9A"h$@_cVhgfQnh$sAR>MfN10+EJ&*rd_bf"_.hI/DfN%/Om:JA-+'i5%o)#=&+aoAK8V/b#UOIfb#rM=6%W%\Em*`UMpsW27Xr2J,,N244M5P8Rj7%$/_d)rhfTibUi8gT]`-P?V$VDP\b=dZmC.35Jg8;&3F!/F.8Wra;A;RaZH0.+B]N37/%Lr#8o>ra;A;Ps3\#0N%2udBgo;Z<'hcf%9s;;6Y)L<7jZD^WOUS`TOp2"58^LfkeHoKn&Hc*P-btH%;h-+ao$&V&ohHK3T1FU.d1j*41CgSC:4hHH3RC!R#(pDAi:>+q\2p&Z/C10I0lZY`'O7-MJ1GgV?uUK3>eZa5(N1WdgY3BH^(UU87MC:sTmn2&O.Q:GH(F@YCm)a/3l\WtrBDC)cT>:GH(.%Lp[eOGVT8oE1<>?/mLKAP;RqK?iWKNu]78^W@E\"\#CYDp/eS+#EE\"\cge)I\.#QFnO^#r0>1:c;X%(P]l`K0GJH'n)#<6ul%Sg8)!,afF4U+YeNuP?S)cQ(BaVn:-noTApfZVk7-Z13Gam/u*Y>9^Zk6=16R/o2e'6:.raK6.F;7\NQ[/8HCP@paj'j\7P>#L'NMDpYN4?[SOjVO54[X?E<=+A^dQYDAgpoo?d6[j[$/[&Zp3&_AU*tn[ge)J7<-dP*NM](uC+;(KrqP2BE+CX80GFV;K+W(PkT,Tc$r%V'bq[Tcj$mNCDmJkJ=2E1\f3f:4)2a'UP"c'n,*`QVPXBr88_EF\Wrm;8iMHbmaj&GdOL(ZOYqSP]ZEhACN0_89"3MgTe?;s_XFk<23(iM=ZYq]pP+CNDpHnbZ`%oFL*O0j>A]aRafVR3DP\b=U+gU<\Q)9H[q[mC/%O2bWL)D?>3&_AU*p?n[ust',]]r?diiTD8^2eK[VQ2(/rtV%=2r#fU\DnZkd`GLNa.S]Z*k9&f&9ePj*muZi@C,M;#a,tpQ's@b9Ps/\H*77Aj@i6!ck?aaK6.F;7\3(FT:.%gTo_BYIX.Ugp4ukUnu1+q!<"Z[CCo*jH]n6]p=9d*n0\S2OP@5="S8$"M%OMO]ut#K61nBjAo8*[o*o/;&Hj/go<468T*'ljAt+"+Pg3S\Q.2$XV=3$'Llsd[qa/QP$9f4%WSQ1oJH?f+(##;ht_L#>Mf1sp_[grB=G,NCtZP+ea-Qt>$f_HXOeuBb<'mN`[a,7#-[Lj#b4)&)8p#^OA?#b7Vop(VX<^D5RbV'q4q0QJ\SKO!N'"M#[BsV$s0o8:;Z?dib'7K2aT1jAqP.>:GH(FAqtuk&R9l/FQd!CG,'[G.DFt[(JGK(YpQVnH)->nltl>IqJ^ip"JM'fW$FEXlNN'/$V:ZXf=j.V'q4q0QJ\SW?7qa1E_kfOBY^SDP\b=dS8\qH],i^8#n9$_jPI:lEV-#-DH-3$g4l]Zg>&D`#=DH/Q7.n*;LKooRkafS_Y\Q-P0>D\>kgo>,M=ej#5lQ4BrK9Kq$Jn-VGprnt,4)JW_UZi]=(q$/o@"Rf+h=6B474mVo+h/]T2)S%7b:^\(YfBXXYR);A;Ps(qGpeW\l)e>;[>0Q/$,l+h+J1ge(EX7:G7XEi[cU:i=fs3b5p(1c5Blf_-r=bi_6;Xqn;`:Q6)lNI3m*TOqnkb\Rcbk40X/E7g[AG7eeQ/XmE8>?+.1V'q5L:#VlE]9]'nIat1jeFICu:FtD-4Op2(`q"2;Y??;[>0Q/$,l+h+J1ge(EX7:G7XEi[b",e6pMO^#r02B6b"pX&sBHCu)f5biajk+\t]7[hOd!Qf@=[s,tVAN"T7:/V/V'^jNj!.bnc"+HZ_GX3/Mc'Lbm1+FIX>?H8m^afpHuAGLe14nt%K^s\OCb,lSBgo@]C>Et=T:mt!=rOqO_i\/G2KGiREiZ4&>:GH(-uu@7\Q)9I[q[mni`<#rY^P^3@(@"eTEpEJ-/dsgSPQLY8t]YFat4dK\>=f8bl1d_YB9qHr7B(1T0jf(%.J-L:S^8!h!4iE0KE&7D/lV>b99M15Gq_>S@R;s.Z0rKlP2Up[ocg_#u2M?0YHU-$P/ik:P:;j-H"_]ub6!mGH_^k%tL^W\(F7MKqkQ<^Yn]n;!@f!HP6@O^#46\Q+Vgr7B(1?Z%1!;A;PsQBpT4Ei[ce@br<_]DBbmoFf:oi\dNjQCV8s8;D*1dt7UAY\>`QBs.MrG?F)Rk-\\M_9C0nDJ4gDH[sZ(XKbMntq+VQX7(Ag5CpUXemX#+[qZ3eui3S>-hh=%O%#C:U'm(7cN?oc0k_E2);.m>;[G3Q/"uL-+B%A.>jjA=l`V(X%"ENEiZ(d.;kEB"`J;5$.?/<+>]>fl.K7]2b1"o>VY@V=2i]?OdQ=7/mSVkIc2G(4rFNPa%h.U/--frB!NPI=TJ-FX%["4eQhQF)c"]`YWSnqJ@&1YhC8VjaY[[r>J9Pm+./EJJ5Tf)?le'\iM6:#V3XUYh2;68HZ8Wd.>jiJSK0o4jT4S=_1iQ5;+O%;\:)OBXR_\WtrBDC)cT>:GH(F@YCmEiZ)"&ot%MdpBM@V:#D/3UkbR*Iq@'l%OX%=Z!E,g*nQWU_dbnP*uW4R4S-gk8siKkrJ8.QbNks`hpQ755tVMMPn;$9E!e*Dg_kp4L&u<9Z6*Z1pp_u^!Ra:eL;_PE7g[AHP+W^kshfO#5a^WLV`b-&M,LumI!h$'`utc)sfbD/[VXAK6`FU8*U#?esBB6'Lc/oKWP#aq3h$_nP`S.iP@NI?.\Z1iA"TUek8njRN(;=SMdQ56&Dc+I\f*I4*6:1Ohk>;,uUA^.i%=5Je[Y$`M=^Ojkc$oi7h,2b4,)ioiQh'rS7HbUB`gj9Ajo@rHDZd1cTnAj_-e'C2[rq+F@i&P7leqLa2cfVcr>Pp3O>I`u0(B5n>^Z$QLjVaCgM@oD0?Y."6Nu%0[PJn?0^\Y8_UccA^Ii#E0jQA_7r5oNhIk^3-*qYH-?e&-as/T>G*&8-n3i/,X$OP#:X'A;-L:!u\Pu#JGp;]"5M3*%;Zpp8"pn?fAI_Oo2cJuD/HA/^q/_Au:/9An?696`p_*`\>Y8%\AODg5BhI3b[+meM9dWE4%^+2R*BIu+7fCEiL?W;Nl>"3*pr5]:lq1^a$g>s3)':@sSr=_0DIg8+7niK*S-+B%AafXW).t1LAj#uHL'iL!P?hl2K/TNAPeS!IMs/MA?LQ$nJ:8t)/6GiraP$?&1jAr=G-g[C5O^$@\;7T\d@rrge)Il&`"oo"#b(G%h)7ZK'UF9M%$mX3=U_?B#3ut%(J%>l.hd;(`l>&S!10/pr_JY!Ij\4hh&n_oQ>+mkRRCCK+A(<`4k*Wi#f`04`GIO)RR3/9edM>4I#s!VP]?`(#5=L#05%r!c]0&a[?iMC;&/%+!(N+WsbgYJj_@$;OKB"m?!:H5U)d"Ba\iBIo2LcAuS\4eUR"JiPI3\4u(4ui^/5Ze9i>,cR^P/"^MfFY.`f.n:MJ)(T=:DX!YHgAgg*Pk?RjFlpr6KfR/KpmuQM@NX?#5M3#%Ye0ILBrMLR&I#`Ih=1OSco`id_I%*Ih#b>(dSIUj$RQ.H=V`ACU.nZPGd4GTQl5#jE%1A_o1iJG7k772fqml8(9$$gp'&OIranc5Y87r6u!P6ip-2\3'N:P1mEr!nfmafRT)\WtrBDT2AeCYV?r-+@(Fl@,)T.Nu9a>KO#.raP$?&1G^F^s8*Z5F!%qm6>j3RW0:H-X]?CArh:Q'bBKK6_Lt%cjAqP.>BPp0^%CG>E-4"DK#,ja$Ef=^K7VDY\2p'bCBg6fl<#B`kHli>,=s*iDGJH,_)hsBol_<[)bkmWd3Q4[Q3'EtP2PV=b#nOeX[gR45lXq)p]81]3.CQ.TNa"/7*mEmHK22Wi8$OD_:]Lb^f+&-!rU@PIf[_B"ePSd00gkL#/&@?[u=Pd&%mC/\RY/JHp;9(/'1SHr)B:is1.6sKtfZ\@DR2#?M&^u4O4J[UkM&5D[WVi$F7hP-h4j&G6cDGGXB.2\Ea7?Ba^PU]_YPB/qr5/pgs>p>5/qFqg<)QRH9%>:HX#Ir5?h*[6eI8hQ9oSD&.9qcch"p=ghFW$$HZFpP0M*_d<>=KoNlWE$5G+`h::HQHiT]@:<[Bq9SL]EL5i?4O6_00D^gm`tf/JMjFCK]On/)\`*FVAc@f"7ib+::1b;ck]uH[-Z-$_Of=C8pV0kQBP'pq7-Y_Zol7=a4$N%!4eBM8o>raP$9)M/%Lr#8o>raP$?&1jAmcU[ust;XlNN'/%Lr#8o>raP$?&1jAp<%js.A#3k'G*opt%#bs]@L'Y&68@Dp"XgIWUn0&03F3k#a[dRY:H]cI:=DT'B1gF7+#AfP'iSH=FRZ[hF!1bfNd%7e7"OYga$AQqhJpjVBK\T021Wju,F^;7O21jJW0@pmp&e)3l+r%cq'l,V`Ea=Rs_a2#T"GR1)X8\d>3?043a^1I'hi@L>7iOcli>J>#a"ZcDA-$V+^F2!t_Z1+-EQ3T!hp%,Ta718:$HnW6EiPUkN_LoU=H.VVSKf/P'p_V-:/_n$)h1fJplQGY[qrB\qW,ETIja]$79sbP*Q:ORO%J=M8J.:!Hl2kIdd>lTK(C)FJC&@:>e6]=EWF#N.D\b9Q>l-clH+FofW#S(HOc]I68OMork3IH-mq,tla!VhO_frs&R3N.8*O$\d\H(@F4oi>D0!B&,JFjUK(:GZ3(al#@]2O'DN<@CsKCn7gm2J`M@CQA)e%Ma8`]2pl4F[Hl^%r,W#.O-=`nSa5>2QQ/2=3(Q#BI5f^I9^)CNQKVA-$Obnhj:(h^VX6Wd-+E.FjAp:O\WtrBDC)cT>KO#.#4K/;+hi:N"R_"A/S)5Fk+7KT);Gg)Qp!WHJInlcb&?#?c]Mn'EUJpoq,,73"3kH7O1ULu33jllq>VZL&iL$Pr^G-Gnec9'0mlR_mD((^[=T&ecFWs=GNYKUmm1!FfA[`$iPO7XB-7lt^+23*ja3D6C;/*J#[b&c/)`5gcM]q>nS^Sil[;Ot=>+t6k>?_InI\V(J"`u8dR?LO;h*5%e;%c16o2^?kc&S_*Fmn&+Gc4,#9K]mta-kM_6V4Hg"kfW\b5B;tUs$GuCZYOq-u\;LkJp'$MNS%iCj7B,@\^K`2eYU$8tdu]bRI8M[PI$g3KNucM;5+8ga\_`!RG];%ZV#mK"e9_E-s&H0K9e$'EuOqIDM-[CcONj!ur8X"t)[^abt[:CO'q'Rf3M<)X7>!*Yr'-&$]88c85>(+>NUnRt;g(nZpa]*!.4jR1>A.mQTCMMV>\Loe"t+?ekP*IGIMJ7YSN+eU@ckVb^Q3_W_)Fn_MH>cd/L;O7AG$Gmh671Q^cNr"[Dm2h&LLX3?4pRPeEBlXe^U>[>c("?k0I1/?@m%X+')?0SrbJt66>q$O%p+%1d8W5%b\BD+eK'GHcq0uAW?-mhHsOJbk#fOYf`2GYK;bu+Z<.VNR'40K&MOpOB]i/7(4;JP$?b%ge)H1[ust;XlNN'X#5ml8o>sC"6?E;]VVLo7.://ADk>&X)R#=lVU]r/]tfA6^=r8M5Ea%u[^TNa"lb^qK1p`T'%CqcmZ.Y7VsS]`#J!oaTVZN?_R,/uW-cU.rrX,SbKmdgA\SMM.tZFP\0E+[C2h/W6P(RC.]@_T/DB&q-qY?KMJ;b+T%NQWpqFQ&S%q9%hgrT)Ng$b,oa+HQ%*b&1\IfjCh7s((siMdO9=R^*=2Kr]tqb07C3kIoc]n.N>b4:a#oj,ga8?Y@E)*PHtdaS@;)b3L!B80d.H_^R!pi>*3#+5!LEZ!]\KMcj`H/-]1AnHRs>pYtQ"LT!-8f$o1^Rg\Y/*bkkZbS_Y].dk03EfghR17Y^mI1m"NB<^_L?Aj_Wr;FV11M6bY)pGcX63)>en>YV1lYe*@0U\_L'np^#K>1DoRkD[?l=@Z%unB=6JH\6F;t/cbHLMfi#uqhs25jn:p$K;u_[F;XFFXaICo<.%dl2^.!r%oA%3KkEE$65I51EaK=N(?%q(6)KI@=Q/"uL-+B%AafXW)EiX>=ge)J7a.+i_r@/p$7Yj_L,YlEL7EMjaXY#.i*HUV,\hXe4mSdTbXhXb6-"(:#c6#bgM5U;HnnTYI!kuNXc!ke3b1%>0nZf(Db.j17;JVhGnLr?#1'oN0@fH`Geooiq#0DGt=1aD#>-gggHkB6b:Hn"PI4N?[e_jAl[Mk;'cpPtk+n5h/':WQ`/k?]OH`LiQ@B03F/UG[_fiVSiQ.^g0ekki4U$Z!S2rTY6F$>O9]DIEi3DrDK3GkV@?u/j#.6O!03;C&-5C^,Q8o>raP$?&1<]p3>PUuE!946&T0pMdc^A%p%P:fW0;p3XdHcW>M6uI+&44m#ge)H16ri;K63n`f&9T/*g(8-Z2AH7\9H%l`QaV;N?@1j&nFE(;Jlgg_!T)VG'C[4Qah(SrQW/RdiE#unji<["/8n^j*g@9%$&+(32+e<8LZ0Pf;O!J;DUh(bop+%/p$,TNkkYX0l[VsJ2AW=E#"*8S[o/H5M;5+bFR(HV>O0hAlI#8>m+)3:H>P34Y766AWdEQZhdFc@;IJ86Dh7q9o#Ul#=g'r!iD?^hR8nrF76u#B!i@_O+?g_L;s>]dP_lRdQ&(%!&4-XG6jJfG`'?/E=[=5f'9LE<.[Ad]DPc.7O]r,8KFgIpjAp:O7B&4d.j9QW63rY-Wqia62q[0TBu'CBWDip=4aJ)%7kHk>DWt)aX$2cq!N[iXQXNLM5%Wld]\aXJ9)@WoI'^/u_oC"ZJc])X4cCl6Wq)A@IGmdXW"VfpN8)>Dl!&r#0ahZeZBcBdRhd>!BXFn/7K_,`LeVib:p&Qj3O[eHl.EkOGr-;5TY222UUpHJPJ6<4u6aeP#Sh&G8Yk&tn71`MA71P2&ZIV;+"l>BS5d>P1n-m^EP'?E0@WV0[!7HHE;MH5(CM&i&`E,;:P?Z/2Pcg)&8dHSn&0ce=Al`q&\Wq2"7rBW+&4-X76[0]uJ=[%p2iEiW2t>$$X4eZ'e_5F5S3hl;[4QV`;a([eU4DUQPCh@qr9!-I^TMVQPbGX&@+lV9.lmdhTDneRMdS`nI>qKX=3#/RMQq[&SCe)>m4+Z)2;^(PJTe*c.ni6@($?U*1ncV;pW;)r7WjaV9O^bLA\HqW0BG@Q"U=opfU@P-s?b78];W8_1j&iucJDi/jRP(E`F1oq[ld[QNkpd9:9g9/.2e)Jdl,3k*5^W9$/-d*&iHSI'#AOBo8!X0-'6V)h<\UfK?Y/a$hgd'i5rW?mO0X3$:r[-FBfC>SD_kZ1r>`K.RQXlNN?U+#bEC3_If]OCba67sFjW_?oD2LcdY2IFGDchL\OA!Zs.b!%?c(@LDeU0)<'%1kF]5"lW?-Q8?Fda:@X_PFNc6Kfu2m'Z)X.!+-eNUH7K30Z+IeM5<_8@md\:j3H'LfRY;p,jF;9NH%?Yh-O>JB1hAXBU3I)WrS?ZZ%SbMTFn^UJU.jW?&RB_eRVo0a&`VWD#7hmRoFol)DO0/!9>q4?^*>lNRM+04T%Q604Xkjfr+B/38cStEUlbjohu0.d-7q5*1%bHG1Mg[].'D_/YGq7Yl#/l,\2++)<(8'@MUJ$qIXnQZ"Pnq,sl$icPJ0=e`3fkbrQZGlC7j`QnK/Y#gY[;Zqk]PZ?aZJDh(nug.gbBkl1><]9=kjjkt'?f96cQ3lt-Fm][A\ZChb9>&;QQAfglKPVp[2cZGYai(jE]Its@l\0^CZ1TNQ4'":Q:mOeQ7FTdQE-<;QYVmqMr/QmEms$Wgp2mKN*=4Pitahm3-r+Z/=fH8\WtrB;&!RD7;aE\P$?&1jAp:O\WtrBDP\b=dX:+VE\"\cge)H1[ustO=)PuqYU>WSn>iI9#p+QV;,GH[iDCEZiZ$bs>g"rKjB<'sr)D_X9?=cb:OBU*B+Co60>&rZ8Duq9isQW#*e+TV_(GYRO?QYYV,aM>_AKlk8;Y5I!'0>&l.(Q(iA@jAp:O\WtrBDC)cT>KO#.raP$?&1jAp:O\Q/$7`Q>okKu8sio+4Rc><)Eh0ocg+$dfV'_cmG>8.W?-T6!Xr;8'^67cQ;If0)O$3.:?tp3dOIGRUK5[ESR`7;4;n/%Lr#8o>raP$?&1jAp:O\Wrm;bsuXt[ust;XlNN'/%Lr#8o>ra;A>u'aK=N(E\"\cge)H1[usrQYhk8`0hr83"oNru^X^G-5OT'/1U*e^3B@njacF.I%^"Yk<-T,ULFul@XS1E]u+4IH-#/2mqs2aQR3e'HrG*T_=Fg:HjfO0oqn]:8uj/FP$?&1jAp:O\WtrBDC)cT>:GHXI,n=K/%Lr#8o>raP$?&1jAp:O78]M7ge)H1[ust;XlNN'/%J[IDT-Q_nNQ'1Jtn?1]P-dYCgOj,\`G=W(5safXW)E\"\cge)H1[usrEMUHn5KO#.GV-L,8;m!ac82fC3W#OTE@Shto.e<raP$?&1jAp:O\WtrB;3^2f[ust;XlNN'/%Lr#8o>raP$9AmdX:+VE\"\cge)H1[ust;XVu./^81ZZ5+fB>K"r`Q+0[k^04-md3D8?.MiUKE]D921m_EHg+7G`/n--b>3@?h7HZBMO?^t*bNR)D1bl6mTlhO*g?OD2DEYj5E@W8Ue@^U"T?SB0E92Uq>7rBW^P$?&1jAp:O\WtrBDC)bi'W(WHXlNN'/%Lr#8o>raP$?&1jAq/41`s8nge)H1[ust;XlNN'Ws7AE@@(/p)0HtdGB#+L/Y%]OP_W0L.UF\QAG?AfbCp0cBW7gcI,SjT?=/Uo>-+lB.>lQRe8iUOXlNN'/%Lr#8o>raP$>%HKr@Y2l8mSdP$?&1'W%!lb8ht>P$?&1jAp:O\WtrBDRJ14U+T`OlX7J#DC)biPYOt*GF[G\DC)cT>KO#.1/ekGqJ,'OLlD](k9NrpeIfb`Tk%5O2"(7@j@d1NKqj$J0m/,pJ,#eWo\.8[3VPnC\`mDho11)ekI:o3O?JHA)5rj[pm!JH+3>GobEfo\Wp5GT>oZD!l\5*"j1cB_-X+R>>_B0Ku_Q0\:mQ:]nu_gMd+T)3.^$(*^cd`(:k6GMHf@D._j/"(>\8"/rdDA/X"*Q9aTY@0.nDcjWuFqXdB[/HJMJW>C!%POfTRh&BUrkX[4;60":D77A\`,6FT"_H:$E0.ofkm`@[Sde#gp*:pR`LcrK`_,G"JD@.[ga0Fm>KO#.JrhE;-iL0YZ@':mSeUP*ub^N3K[AYU'Z2,(grfta#q\EDJr6WF/'7:+sKqkK1CU%396?!ae_d`Cp&$>+hSri((CF^;bZg[!ZMW%'W+!`#mi<.Y<]rp2u)3DSI6K2ds`@N/9o*9@!a^]R"eP_@;MX&g1pd*?\;p53rL\:5I't?.UmBOu4<`V<+[>-E+[>_EOa'3B9ZSD)DW,=W^Pbugb@2kArg[3l?[I"r/)OXaEVt;A+X&!S%7u%'L,?o;(_`YNM@p),#m<]$V3D`$Uk4_WBgFW`9*cr?5X8Hd#pPiM5aKiIpT9-9gTM5"n!Dr(rTR`SGFQ/#n)KPV:NP^E=m!qrch$:jRB0hc-pPkN:J%62/%>/Zb(Wpq!II)fr7Gn$nlpD#^8tP.9nI9%Mjp"/XSh;Ua*,L5HV'F:lp'e0=]s<&^V3URRn3&B>@-0fA9.F%VAJkOmVJcgr)ZT:I3mrUI]H\ps*j-4D4k65\8mSfMZ,Pi1f=7hOGIkhQ+#+AI18-'R3*,[odjtQF4s5jBe+%sXgFA%dT5'o>@"5SlOIY[VJ*$(CmVTA8R#o0U91ef[aJ418m?#1A'n=A4F(ZZ-VrU.N8%_;U1HH-q=6;H5!LKWPQTgkb9aVk/M"T->98'+>Bs!@Wb-["b>1cSem-SKNH_YNMb-QJ/qd?WAp@_^;H^qfSV@J-AL$nOtlGr2Hen=)I?J4D=ICM4a&\02XG[K!Vb1%Und8,^j]Ipe0'aMMBB"!,!%9Kt^O0`jDkA_OoRiF>7c`c]Hrp98]2VB$0Cf[.qQ%eonYIl@^#3NmJ/@%V8LZ(6FX8@2VGd5/:HVMqg=ndIsB(hKXot)r7Q/7crSlcQg.)sb)9p`cY6b:rdr[$_pd3aF3$`'#MNod>A:/:aD.fXiQ>3^EE3S04H?jRh`u%$1fj>8hKHccj%Sk9/afIQd!%gcZH"lV]pgR$j[]2qS5*8tAYIgm_e&M9DWO`]pr"f%T@H]eH>M3MUm+tI&^@J%I5#/#XL9f1DCTAQ4G@DHc%/(K"s"B].KI8m%)>UAlHmiQ$_?[KFq68b3RXOV8h"!_PTp:]=c*CC,M%8=`\LsMDg,CDMH-8^gWr5H`']OMsBg+mG+3pD&"eAh1W\+)qYO6l&I3'tG5M,#shXam[;\,65;>/>megE,aHsZ6jR5WYlk0n#<[Mnrulo[@.kChVNrrg'!<.+jiB_=kZ]G#EgUJDp%UO3F=KlZ*En#)*A@t/C\4!BC:f1KDgJ\R"AA.A-E`dIrek!+9Xmk=Y7aX9)eZDq7[Got7ko#MV??WK@4HBVq5-TAO4:?gN)O)'22aW]&=<\"R&6(?,%=k/]^?PB[7>c_%Q]l.AD73"hpgsSo?h*+J?DsMI@&%Gock^^lGVJ3*DbV,JL[g[,MXnK!bEf7B[s/Pc7Br_\WX".nb4YL)FBrabO<`boADWrL[:0[,=0fgGbeW@5fIqqZdoLg=N"/Bq208t#II2Q1II"(O4,u'V">Kt=R9?_JFbnk=`^?!SkQ[G3DB!?baE[o-hQ06VKoD\EIdW]<;[lp5PjRR(4hq"@mj_S>uC/uPuR$I\pq9>)!k8UeW7-@4o-[ClYmI"oYq/5UO1r#V+qlTFoP1Nd\!;UC)h^pk.I]klAjN^n/_C&,X%_mJXc6op[Q@*=n<]+s5XRgQ\q_0hkZfUWG\FR4oo1,D6XC3/(HS!A*;rWI=^*EXG8iA&hJ=:?$q'UquY4_RTE^RsH&Eh[:Aarq!b]Zl1+"G35.6]1P8*\N`e1/GTrF51huQN0A2aR1:%^6.bUlUj=DM0Q,>7N>b>Nh"+`8KrbT\CF3s&7qPVbO5K?Qk\==DB>rgm,_jPR=IQb:hbK;0(.K=,b:Pa>ZLf+C=i8jU]Me;Ok67>>/`r2eFQ^3U=ZsAL+,6<_jHJZ2JR:'5_b>`(d`\+lT!'+lI=h3SV8%0pDR,(BQYaWZQTT:@hoPZTQ@@ubn%uk;b*Q%;^7+;Ml`IOZ[aJ4VX0&a/d8nsn>A5TqS[KHbc7@r.8KBnVPjLj(TgYOdU1F,4c9(3Nmn;jHc:+9_JQpkQbPIHBBp%-88bb;epj?C+@,`e.,b+8-Hp6h:Z2)7PBSMRh$o9GTeUao*a[9^o&5,3RJan)*B4O9gtn$1Y.LI>/fbPG&WqW,=OLK:"M]SLUk/1Xqn),Yk]F!YUh(!Gqf\%JnTqOM4ld,dc#BI4e0PcS;ccK0bPV`U4`AIW_QAeCHujHbjn/F0tqcX7NN7o#gj.rpn^js6A6IBR2Ce&$C,oNBt)931CIaeUH-@?-s2ieo+(j#iV&X^%TfXiR,)P2oc6hrB?B2o$lt6Bi7:Zl!"nu0;`-%*"r$\h9AL/k4Wd3YV4l)@9Oa"/p:0qUZS1H2*Pm_6Qu.OcU5IhG7'&l(')"hApX>b6D9&=aDtd7qS'Y[u!6'H10#r14L1_:<4[CYfY=7*9N@XFNH*@]"I\+lcJP.=7a_)a2tqeDY]W^hg0"YIBjTuLadg!b\uT>mtY6[XY`oS0%'Dhm[V%^j?5,VSB&`iV+1(BR;ZUJIDtn9q#U1b>7G9sD5FA?:i3&2[$A)JA5U)V6.*>YR,/(F9HH'o'EnugjAKQbII5![k-Qo)h)97rVW2c7F)D0AL6Zt5C5<'T$']G2U8Zi*tb"VrWc%rj0"QSls-?MA`_3?T1n`pT3O18'h_bBQBE]8*@:$AJ+_,3ns5Ms:mTYp2LVdk&FK3`b@E-/a"g*0ST@?_Q5gN_B?XUDI??NT^Lf(L%cipgPcSWR.LXKeRlP?RSBCs0F="\nq+lI(3En,Fam?(;Uob:,fc->)kLmti2`iJuRp12CjTV.>P-W2TRHJh?MWOMr?dG%PW+9s)1XFfVI[#&`XA@iS[oKj\D3aEDZXPquAeFjSm2U7OeL\*-V(91]^W;JM;fYNA&Z[aJ418mD7a[aJ3l0;Ye*[$A('BWK>18m?![D=qu(8m;>2PdVJkK!m^]iSlWW'jk.Y-iT?;!W6T.RNjF*4s0P^F]iB5oqBEE0ZBQmae#+17frjM&>b[T>ba)jZAC%.TEhE8X,?p:!jN]d`dY#(VTC\\gO_rE;p^JNj[N$l5U1@Y@2N,YK5-fP,J9_@j>FALRP`e82jBS$mpd7b^Vb+5o)GH.QAci*f['ET[rR=%5O/+01e2fQo/X2KlX)*oY.PVKe"'u+Moar>8a2k@SJP-5dHmKQRX/#Ks$`mdAKYWoSEFs2an)+[Rp5GUanfO4k9*>bjq>sEp6E=RAB8iGYfr1j/^:Ph29a3UII\C&q5kXDg#Tf!F"57SjgPjmfjjhn7fQ[brtAsMSiHfA,U:PM+m&\)Ym,=mk%8?M8f7(#/0QjH!%@rn>I9,21V6'_a>7G;I.qu&ddoP1;5IAt7dT5'/+LK[\[^oAng9OrZm-EWN[VHV^q_R3pX1GY1[u%ii]rb=eALhWJYH$ohg?mVLYHQp-bHq4^B90Y'\"0XkG#h@j8%BO@BRe,Dp]9%i3S-M:hBMga4fDom*$B)UUogeqXgUZ&Br_?0XU^W)dT-@AXbO45Q*f)MBIdqB+LK[mdT5'/+LK[\[^o@d$Mjn8h`5V_453ddF5q,@j'u9Go>aB3Op=X0$@9H/jX0`P=NS?BpY4@'WMeaumbRhoXf(/Zp3bapg!X]OgcR(gqQ$X!)>&-#L%OG(7*8$#R(%g?ML96X+7T!,XThXfeJ%G/s#HG;l4t[RFC@l=su_D$?T7L:#K-J'79KHMuZIfB/LABN8+Dr`raY:%V1`REr($b>GE`T"OQA^C*\A%SY'Q1[/M73(/1?&,m(!/EjE%;Dl:51e4`LItcVelE$L+"c43!3K596+^(;mb):[K6F/VJ*"RD$9n>9[Qm.g'Rf[R%g^;ZkWQ@0L]1TBe'/`@#DB2dT->J^_CWCUoaUsJ192e86Z)p!)p8TOL>2j!2aG1+`.A_!)1d@6eVkI!19L_L9qZq!&-iG%;@S!.ZNPC.MP0!!#s)eW@3@!!&m0X!)<`!!#^?<^YRJ!!&C\XbO1t!!"]A>7G9s!!$Da[MmRp!!'eKD)J,k!!%Nug1j/_!<<*u[+18H!WW4tBWE:n"TSNrd8iWg$31'nU900W'`\4f79^48.f]QWMRFGO6+^(;mb):[K6F/VJ*"RD$9n>9[Qm.g'Rf[R%g^;ZkWQ@0L]1TBe'/`@#DB2dT->J^_CWCUoaUsJ192e86Z)p!)p8TOL>2j!2aG1+`.A_!)1d@6eVkI!19L_L9qZq!&-iG%;@S!.ZNPC.MP0!!#s)eW@3@!!&m0X!)<`!!#^?<^YRJ!!&C\XbO1t!!"]A>7G9s!!$Da[MmRp!!'eKD)J,k!!%Nug1j/_!<<*u[+18H!WW4tBWE:n"TSNrd8iWg$31'nU900W'`\4f79^48.f]QWMRFGO6+^(;mb):[K6F/VJ*"RD$9n>9[Qm.g'Rf[R%g^;ZkWQ@0L]1TBe'/`@#DB2dT->J^_CWCUoaUsJ192e86Z)p!)p8TOL>2j!2aG1+`.A_!)1d@6eVkI!19L_L9qZq!&-iG%;@S!.ZNPC.MP0!!#s)eW@3@!!&m0X!)<`!!#^?<^YRJ!!&C\XbO1t!!"]A>7G9s!!$Da[MmRp!!'eKD)J,k!!%Nug1j/_!<<*u[+18H!WW4tBWE:n"TSNrd8iWg$31'nU900W'`\4f79^48.f]QWMRFGO6+^(;mb):[K6F/VJ*"RD$9n>9[Qm.g'Rf[R%g^;ZkWQ@0L]1TBe'/`@#DB2dT->J^_CWCUoaUsJ192e86Z)p!)p8Tck3Y8R1#@IEU)&1A__;&D9L:,!!%!)4L_tsr22j!2aG1TqcG)e#,toj0m][?&#ch!.\Q,D=scH?b(.LgbQ7%[K6F/enM0.D$9n>9[Qm.8'k<2S2dp8[+293]QkBU>e[iZ!!(replgm,X\P0Tk:\ArPI>dPH!\%fr,'h^g'Rf[Y#a7K>6+^(qkpRihcBb`5#O:QX&J16/0f"SVT)nc^MOj,!<<+[M)U`*'m6M2J+;MR2JK4iQ04K8QFE3V7q+kjBe'/`\2n:RD$9n>m%:_TD6&$,2p1=,8'>L]Fab3@c^nI_\Jf,+SmTK?!!(sP4*Tg'A!=@DF^$ek^Fnt+8WUe\ng)&GXgAfC!*j*BQ*p_o!;92m?.i9A9>4X+S)k%>T8U,Z!!$K.Xe&[%<*ike?'67cOlT)c,mg?KZkWQ@>TL2:[K6F/p.nm%gZh3&%>Ouu=?BIdp'!!$(ICR\^T_j0shYq!*n?+>Fi9CIMqVPpt(l&`#J/K`XBq[jf\0jP4V;(,Yo%(8XMo*[K6F/N\t[MXT/?OrR4eK[ai?;\pUu7[="iVs7BAFj6f]jI2UqSoZ/d_S:>JqVpF3!W,^hpO-akDq$37+nsj,*L1(pR@2N(^G[ME`T"DLkmp:H'2Q,_ItH:AJg/1(kuH9=3Jrkg<))X__;M:0T>skCU^De.6f9UQS[_.jW!;Gb2])brae4kg$`(`'5kI0):q%C%El9\VI,90h=S]u>kb>3C>?L]-U$dTL1(pR@2O`-*;=IO1LIbQ)fBup14Jo92_6RA+?BSnWR!p6k2Ynt-mm+=%g;&]oo`7a`M9Ouu=?,[hHR35`niA]aql/_@h4&cnh%uZN5U*pErK],hlWDE.-qq/PY]FfPADjQi!#+-P;S?S;@]npcqX^&M+s=$@#YL/!K[#j"msd<'QTHj?NbiacMTq!OfuC#BlEA>&UJ>O5_LKQ-VZW;tBsMfe))7s&8JqPi"%L.0!SY_nQEBL9EMi?6eB3iVWd>/!K[#j"msd<'QTHj?NbiacM/lgZ&,54%idl.prn3D1HJCrdgW:Xk*0db"!@^/+RD0&!T^545k"t(FWpWh,gm!-V6em*&$G4^pZ6&_!]ZP6eVka1:I:m`VBa^T=3J#8n@TfZ2-=\5Amdm*basH!!&%]5/ZjF'`D48ISnY`J'e$+D$9n>CdM@.doHGK^a?G=L/oqGlIiR:Is!sV!!&%]:$2AeRsI=?l\hc$Tre:pJ/-dQ6eVkI!*Gqsp8i2s-N,fumr/7,?l/0NWkV,"CqFqPNj\uhJ8:IZ3^DC+!!'0)g1khJZ82L]JE(G"c#Kl +endstream +endobj +19 0 obj +<< /Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595 842 ] +/Resources 3 0 R +/Contents 17 0 R +>> +endobj +20 0 obj +<< /Length 2198 /Filter [ /ASCII85Decode /FlateDecode ] + >> +stream +GasaqhfG8H&:X@\_=XSG9W[ehd"fgj9p=gIYEtaRg>#s$!?9]8"iPs3a7n3C!YS[FSbd5f;0d'6X&fLnX%Ee>?1ogDN@;Y!oIRLjlG,)h\r6Xsc]/?G^GPFo+%r"Q:)ED\CGolLT+1i\U@q\:mF1k,i`haAugA_2%pSi,6.mEj*qn$+WhH^@e$mR@T1Y^X-S?@pJVB=HT`-u)G$L@/E`?VG:.4>U.dn[2<^F/lcabhQRU[?/GRL/D3tm0$fi%kA-ZeX=!f0?[So.O>OdD@rf=bF(7lM^TYlQ9p49-7V$M*6*6)YJ80Mqj=45P>EV?-Ds^ikuPj`[?mK1M`thNI#>0[/0:Xe#92;#oM(Mc^th\lM$amTdLXW]ofBTL.Y;Y0*N")*6"8>7MiXcodIcWSC/"#QK(7?Zio:>-oAE8Lq%S/KsSjun^j]+h(&hK_X"'ALYpqI%ioR]Y27[>Rc/:U&!3#%,-FVI+2]OD`l4))$htGM\sL&_KR/X11#ITb,lG-r(1ag[oRu5[m8aIX=6S=*QI]WV(UJCZS:9p(YKo)3L!%=-![L7GP^QLd`2"fs[4fT+S@?V([UL;kQQ+8C`bE[if^&TR.L_o*D_ieUA3T7hhm1mPcs&g*]Anq?)$atk2C3bhZ-O1U9+N!@=#$P]?cE2q(K3!DiSXE*`SiN#-c:^9J3_P8_p&!%Hp,GI(6]76CN]5eThtj8F]i%hqNNnBOO]*!]1b=.R;6G5q?i^*6:mWlLXFj%G6U;rp,E<24U32X'!9HB^L)ujb_D%dCTgA$\4=s2uH$Ai-YV%1Jp;clc)odmuE;Hk`=%U,pfHOT["LXiS*jIGYM?u:$JOVn.Da_$KVWVr2^q7X'ok5HuT'%f1firJ[a@j6!e$0di+m5r^ZtjF),9G!f=UFo.kk64-0\0oGi+3=b<$YTq/*J&/0^ufT1L6'&a)__(-Y.-u`f'6j+D$Si7@fZ;CE.pe,,ER=-n352T[^'(oMI[]dEjiEq([07;I=B9$)qjPMS;\Be"H9.&rh/`KOt/W@8bT"&`Ole039iU]-L_2T29oL/=L-HG8QI)USGm(/2O.[0A(?TJa5c3I%0"@3UoDuR8fG(UG2sVL#:K'P1FT*"LuMW9D2!hGl?WG0Gs).U&1OA\;K#,>5m;T[8H;5p5BA0m2)*8N(]fp)U(@,P0\GaC#o@JBPVLDUl;Ae8QrT]=(AJ"Oi<>QPcmkP;o:K@moW:jNb,8SpL]FLT8?:b$CqmcORcE2htdF"WjCr:Y42&fHo?Feq6M+fRi/\9'tme?-4,#aG'r`:j9XI6YK0*H_C(=cR)tFX1)-=HGEH-DbQ!(LN_DrLa(H'?V3\XR\!>ZC"pep/c2ljf.T);NjMk]EZC.mOakk+B=NXMg^:_XgTfZ^lA"l +endstream +endobj +21 0 obj +<> +stream +Gb"-6l&Si`rr)j5I/eifUX+S]"!?;'-6sjk`0fi9W'/2gU7q!fbH`\BZ7O2)Y-3T6F5/Adl@-/mbH`\BZ7P>rlEs=Z7O2)/Bb?#8n;iTQbAYq=dEW%Q=X3aaPNprO\Jig/m^;_=/iojc.a4;#g*D6K!M,0AQcoEC!fc/aKho%7@nu[C\UQSo3CR%nP;53K0[VQr_#1h782::F^+Q?Q=Z>Hf/Aq+%@''U=Ouu.]iA4g>?R7lnLr6l/&+ODmj7*nu]B]u$=g6:L1"3]QDZ7O2)/Bb?#8n;iTQbAYq=dEW%Q=X3aaPNqu.bS+H?U++:O_b1"dZQ3%`am8b#W``C,j93oTqI$(#;"%:*r8Sfe2=N_lZSER+3PS2ihE!eGV8?neE>h`G(9dJQ@UB7[Xpu$eq7S1Or[ZuGL0`!5*8Zo_r6d'#`"#Ak"*Am*^ScrSOjf>t8!gI7]`/8NmqMfp`5\Zk6pT8S3Q!?))E#+>hO$5s@WO%N*3]p69rA_e'kg;^G"Tp"R\b8Rgp\$EKK/?9l`g;^G"Tp"R\b8Rgp[jip,i]=htW0W=ULZCrAq(#&qe=Id@Db\U@THAd"$i246X.V*tb8MGu68[1LZ7P"3UOWbQ$b>rsKlnBeFY2WZKC;Q3%G0Z=%Zp%P6G!"\Z9>_#3I%Ycp.n(=b6oAQ;m;,d=L6%i/7.^nPS;L1DeWAC`^Mk^X0,J/&7s7i#,_K>lADYcK;`Q<%S5U9+anCC4HHFi(HL'NeU]%P4[&K*Bd/0P=T*/?VQsjjeX\\>CX3C,1;Qm"25gGdf.+QDq-CDqAmog*&8'sAV+[jE?qGJJ/?V_q<94-non?UK?r9pF6?U!i<=+&)YcM:MKKM3TYdq:Hk'@Yuj+%V!*!6-0%C2WR(W_+qeHlVaZ[c!KK!$!!Rh\pPY]B=qY^B(nTrKi@\foFf^ne!-*kW@u`TD@rR(IXM\e2SR>n<7PUqktA%:E=]"tZcg$ma/N'f?G.l./>.U8eMNY=aF9>70;j/PUb@Q;sj!_Whh;\`Ff=SX7k`JgFW"$!Whuj37@1&#]utk,eMIgknPd5r1iS6Gl+t1UJ+)m&c$:A'4lnciJ'VJDlD\.7GHRjHD@Io_'5R2DHgGiS#@W,grFk[&ce!ehg*H3t@r8Sa7hTF\i:qTe=RoMB1>gW#6s"j4@0]T4_i1Ff2J`kTAJ`kWDJ/?coJ`jd=JJZpL^u)jc#@:Ze"J/nc!ACUV#;s1AsAD*p?m?%'TQ9n;j,F'U/:o6aWq\s^:+&PUr@"ja;H"e*47)pWuu)tJML?J&'b9'5q*#ocVdX?R^BS6gYAE'OYM^tUR$MsJ\9X?-mj^@!9AgUbklL!S(s^O:PLN;<>Ui;I"$&q21j^jBX+k`$+%4U:uVhCmfZ+9)Nlc1h]pq"$N8m]R(MKmrO_C%1YQ1Z5%q%H,_&B>LV8VnqZc%H,'heq!d+G8SP+;[)%XV&m9RHPW^:=qB3N89jHe#/Fu$\G[EBpm23Sp6ILBr+d5OGA1n#i`C5R4re!npl3>7F!sl#lu?YrRW44li5.ju3pFT(NS\[cT-.npV7>^?-D[mXsE4M]Wo?dloko?MN_QSH.-iSd!HB4TV/Qpc+YP[N8-qP5`pXV#13-eFpk;m%,DVnpht:4Qt@8glUIg/A;"fCrhCks3>-,K4Id59>b<2a:pUf9oQ$5*Z[+/'_tWX?@"^9mIEMGC:L!q-=o_pb!M!#-WI,P43l#bkNe482ANj0k'ah%e/i^[:%.H>JTPDS%st)>JZg_cQmmf)U/!U%%."L3ACL1*16Cd(6$Ioc[j\+B#'AoS%tOg$2=C8%JVo=hf@lbgUREEeq7Rfp4S0S(1q5E`bo^+N%kFNhTF]t(isJ$De3iuD`-UbTeY[f`SSboar#28@;f^q2$i'=,NsLds6qamfuUpkbWhcujF:6_M5q.7X?$J*TD'@nq"-)pdA\dMM:5c3';k^94>QjM0^@W]i:2#O-G3Of*a=%T@F]'Gl.m!ZX,\'-bg>q5WY8e"WcJKI:P-?a3X21'q`"$CR7grbnMB+HIHSD9Di]Mm::5_rn(*$nRneSPhYA&5q>)etSSJ=3O.QSk\(?7Rh=.KI-h`D8oXf;IJ*a\u?s)9W9Ao/Q5qW!bGCX)o@Z=6_iRC.U,%YM66G(;#[m/dsa=Vo[U##R1JSudqe9cMsF,h5r&<6*q[i,IAgT/@7)f2>1)E`_9_BFu6X[;.Cr*VN.]bjQMHYc]_]n5_2Pif"Y\/N+1tZR#?Gd>'n!7G%+oYQ$`;/J$CnYI'g/tb#Oq!`md\"ANRGWXRbBAIDbBAGd]O(c:Xk/u]#8/_UEsHhMmWf[:dJf#BOkFNL\=ANR`(V,\XfodXVabk^U7#X,HRjFn@uM9Tm&fWVN%qdSp/^lf"4?3Qr[hW/aY4`W15LE"H#(c6s02nn0RGagIr6j*2"t3n[_;e3@u8ld)RSQ5i-];FR/bGZ@.`eki;U7npV!gFY_`2>mLJS@`g@nnR>Al,q#rl7B2?D"SUk'Sm$o)(gqVHm=5I0eC==3]_:LVtD[rSZV!3@6CGtP]A#@HOI%oFQi?."@ZN]jWNoT&[\NbX]q\??s?j!q!r^gMcVq]#:Qfip@c#$kCcb%$@qK$'<4(!S./(];'g\65d936`P:]:GQj9hQgmK@cOjgQAiFp3hP?m6FBm6`R>_&cFCkNCA"G4h[+:tQEunkihS\TpcD*Rn?-^TIt-8,Do4?c"!>/K@P_5J^sJ@hD#$]KC@.c*=a`[kbtY4P3lk>8^pg-1%c#XmE0Er&-COgpYj>fio>(DC+YOm&^K@>8;a'KoQE.qhJC--GHhggct7/0R?JGGl3Qi6%*5fBPttD6;'*ohg-?N[pK>tRh-f$N?bt0jdpV\n>"-p1=\TcXKYR%'[m#po%Z_Rgi&^mVYBN1IQogbIasE6lu`_5O?6^cbIG#Q,QfA)L$gp%Cc2Sgj,[];Me3c[C0P4>c4KnA%7P"aM33u@r;J:XmE1VXbQa31re>EfN[$5).ROfm&fWV#/aZQ#P"u:2[7e9eHYQ%Lm)1P#0+sG$gqB++,kX0C[f-h\_t:QF21/lk(.O$k(9kek(?NlcN=^'h#YO?XT`4sm/^_[m07(WW!/rU0kR@%o>[pSN.,8\+Na65]PZTP$*Sp[q=@t0*=kgEGKVnEO/9j\k7(u.:AK>;g?dh>2Fs!Wu!Fn`3aJE^j1JVWB(!VcP6*OpImLLAX(&&:?WhZn@$>93K(8;rqeE5[u@i%O]1K;Ur6"3&L5eprp6CB3CRR[.peoM5K@n@f]'"sYM1$)Rs@)RM'ZP9=$>RM"6e)AZKnRMpN'HRiUMc&99#]p1>7QGDA"hTF]t(h8:;HRjFnA'?NU]p6:]Fn&KA5t?NM#&Ocpr*LrS^J9(SU'"fYJpi2R0R!F:^lReF3.G";2rIhK(*3IN(EEi&!"UX7#KA;g(q]9&i3s'G+,Jut5R6W\[mn/*Ra(rW"OpT?J]1-qrJQ\dd0oZ##8cc!R(Eei1d>F(K)OVYq$4a'"h!:)"hVS&q>7tkY2[#1[r;ips2Htd:k2L+k_8oMfQk45Si(]-DrAG8q\&&["lnaq-G6TF@GWX+@$b*aL3`R^M]8N7>dtT/HXdk:B]1!dDVblmi;?b4G/=02iS)Hbk^Wcqed-MY4l:Sj*4'TK(jg+RH&ZeOp40CUpB"+PA%UmLDFQe\4rF=RQf&JHC4H$%lX,2>SpqPMR.i`\2.[(25P(q/f=skDnJ-m@:g5k1M\KX4ej?4<],,0ao6,0m^hd^_qLCb\^b[lSUhn;%6-pm]$8N[Xlh3(Rn6b:s;i?`m,^W$,aKDY478BADf;JVRk8#f^1t*-!Wp.#\IkmTR)D1NmpVd%iD8r4PUl]d9mC@HL$5DY>D2G%ST)62q4Z+7qi1XU!)Vm0O40/W@B.]p/[\TEF$P!U[#UXTg57"$3(W%V7nP.sidnX8^sDrOWpfciG06!R"khAT'FsE?*=+*H3D/g0<67>pjQ52X!ua01"Iu/R895W7kM^CA&\RgNO_D>PHWul932'0=;$M:$n'rI[i5T\TZHPC94[Ka2-3=^qq=7$Y=Ro#X@6Cr!O"#@E'68+Bf;E&UQ$T.gL/]#J>f-=ZKNs"7+J`T`W:ij^letWJ--:RJ:l_%''JB`88hL;ZB?Z=Z:>l$TL).QWIr;Pt500l-qm&B=elciJnG@*,a\&+Ih.s.;X"Ejn:*mFln7k*E.l_/cFE.8XJ6_s0D@!$2Mo+_Z&GWZZX=HRf=@XFMT/L;2-G%0I)d02%h)-_S/<]iAD@2CLS+)QZ43K%m,eYI>>lCer/5`TcaZ:g"_b3ifg63A.aK[N\c]"o>.[eiNR7?[m&&Pqp2#DF9C=fo%s]N@@n[3N/6Xf5k!@,5-?$d+>3m=q3%C]a/_UaY40ZTG?[P8Xb^2Osn3]sn3$/Mm5^U/X7gk6U7ZY=pjJX&B$`o,djhV_Q1j"EutnCjeq4,=UH-ji`bPP:CmQ*bOZj%PHJ(A6LO0B@V(Ke;BOD*,]ajSqEOhK3LsGdnN*"Q$gE5%WJ<,hV2h#WLKDUoV)2Y]WP.Y7D#3gVoJj>oVl8mUb`W=N?FifaC^nS\1&S;a^BbA5&2]d=K[CrUC@GHYYUT:,Ek&YZ(8E1>UnF7%-T%19dj)85'>"%Bu;)"=E5'4JkW$j+e&Pprn:+fH:c.'[mN?O!SL-rTi`)nNW.`_HHUtU:s^M%-(fID3Y%]G;E`t9>ja>o/(%'fjlYN42XYiN\oh'n4Hi?-V4'Yh67]C6:\N=ZK$:)2JA%5]Pqg9,p/^lfp/Ze^d,&LSG01m3/@gW(X]!iD93cfoHRjFn@uRB$HRjFnH`OsjBQ#a:46;M*QJ=n%6mC>E'TBrVF6>RGH7:sKCWQIKdE*38=G"u&PgEuq.+.8XouUEB!T:La$(X]WB[2`;]GH3E:IdK+9*^f^=li,o=Xl`=)X5gK;,Y,>ehR:(mZ6'9X\Od\%>O=TBXA#]hLI8i,RK;KiHJWS.cORUe.WF86VRmANj#Pi`_S1iq(/LS#GAF_;pQ-Ou1Q;.Y<#Ql99:$>ppE`q)QCC`RqCJNf?4q,keT`q7`$/%Wqi*OA'G/406nGlu6%,1*q0:J?XTXgm.1hLbNg][H49"t(`-[@A;cK>h9H1T8aTLltJAHl94F=&(H:`EHdA\$[>%"pCfPtH[p68Q]9oll7r9KJNr*?H"kp/^lf2m^oA%0I(RUN%4WN-2<+?AF()`k5;RPg3V5%[aY;-()=>*ADifgL*cap1!-c+f0"?.V6ngK`B>D"69e@+=pR)*]L3/h:EU^S:rK/X9He_!37j(D)ad]#5ZjRMr"NGHi[c0fEJ7WdGE-<,qB#:l+i!I&X*!uKkbfj!-6%BJ%)N=7fE(Wd0NJA^>@\Q&ac>7Gs+@rF4AfNSe'p/^lfIDOd_hTF\iO96!m7C!"Vi,H2)DUj:2lFe`/;p!8IYpW#Qnq]JbETK[Q3SBYC@`?AE>p7C?1_/"fLUeb&q]Q_6;(hdTs"O7c8JotF;"=e-;"8S1,dh!%mj-Lo1=c7>R&($f#@jj).:&m8"C;P`qKePOZA,DBIl<;OrmOnQ?hdK*N)FFs*#'3a-DJb/8q'=q)R.A#CF)&1dc5d;jQ1:LMu$jphfH_X]\E-gJ0!gm=kD6gDnlZs:,j"6R_7FT>`LCKI9R;eWcGR(;RGBJ4[CPR"qRU=tbKe&NQC,.c5[U'\X2BF\5O7LJ>mQcrOG)TppF6_M58.#MEo:OA%*nA3Tq`$]o;='^0Zd.I"?q@T&\9&Ms`u/T%.kg.?UGA#";;FPWtQ'[Cn&hF,=Sn,,UNClNBq'H?uJ-,:enj`1I&,B0mm`JO-%APb-B,]VIkL%^1/2[OfN'tVCh2pL`\@,\DV+I-^Hr4md'>2A&XhTF]thTF]tgqMEFfj!-6fj!-6fj!-6fj!-6fj!-6))H6uXmE1VXmE1VXmE1VX_q$Tn!%ltagW>?6,fI?#&hKZ<_]P%i"Dco,S":i>S/]i1PeUbU8Kf(mB!3U$B8"0EhlX0EEJik6'7&h[7<\cjRc&J/j=lD]R0l^1A=g-gE^H6/m\!*..L?nE0V%%XmE14YFk3am&bU"PWlL0AIVGg>M366>M34dZ+%$JZFB,&m&fWVm&fWV/;pgCZF@-KZF@DSDe3iuDq/3#:N)N*DTP[,'AX\IZJGt85H#`]H!'8L6"fL&5ifuc9M252J-5at&6n23`J^B@Le5h7,fX9A'k`]&ef_t@@rfslGJhMgP`DE&Q<(d\4FLZMO0GXc&*'UP@T>o$kob7+LdrS<\80SBd!hYjN4`p?.(#KLq*GHKhf]%]o$-+P`Ck_f-50cPAo;L("YHinJ;_O-QS*itM\cAs6>=!W!S4FN$5=F/SH7tk!IXG17aTk<)4\I/^jtSO2I3#Q)&-$('-<_>(uPR4q\0AhJ.7c=B0e`=$nbfK!/9Q9^c8<8().+XTWRTJ6Kl5n(GC@%QLd7I%l,9>WU3"Wcq>u$)kj&D/qR':"f-58KPV-;(ipo=pSYC+GC\6P(BQaHR>&(n>Qh1rD;`4'6X]bsc\'g?(I7L8r1W@9/p.5=$:dbTq0'QnjA9J1Nn).H1q;1X)/t8<[Trka]t(N[0W?Q6.%G2X:"^LGJ)LI=F2UVrG2XW)Ir2[T2;/,e,M!VY<[2GTCUn[)XS_R8:pSt.]JC(J5j*dGeq<+CQ\!F-`D1-^&4iZ4%]p"%*gc\"5\t3Q=_g[j9T_pnmudd]mg6K2WW]DHJoKMC%"a*E!7dr\e:fZGu/mDiGYsT>BS-Gb21:tb.:;YDe3iuDe3iuDe3iuD`(qU>M366>M34`QG&QsQ+`HrQ+`HrQ+b_`FZmE<-I>\dJp;rC8!>egk_UGTcoV"G\@!*\TM:JCkYFQr?2^`sr'q%tgWhup``U:QgYh)Q,'2?4kD6`8.b=aS/=AgD\GMkE_7Hha"`Gqq$6FZg0ehRka2+B;N!.=*^'iS\:&4B'h:rK(h=(kUY[do^Geuj&iNYt)p#5-]NR0',5Z>B7cs(LBFt2AVRL1'c__7:i!$^7TODbA`\MfO`^&[R@3=7Tc"n1T=f4KRUX1*_%6Spfd.C9/b`hBtBi1>;a"#'WMCQj!;GF\;^sgbd2UI[ad'6aoZtu\D+l1DR_F:]sX,Wdj>P6d@Zhflh^tF)?i*B0l*QiI;]Bp*!s@6o$]%ksF(+rbn(+iho\2O?<^]"];A^1rT\POapF4p-GJD4pcahJiU#e6[uqXcRO_88WkhVm,Wj'^9o`IMSQ?bQS\*V@`LCB+`RJ43.VoMM8FKkGOoHn@7(Q8U"BZ<"^<%cF36:5o%[e7YD%%PZhOEt*ZMfXc2E=;o-,-Nk1!j#Y[?B4Kp8-&6*VS.!cuAl-cW'u9?=.lc,4!pU\n_6Kl'hDjAZE%7+XGDs$>S7p,uAad>DhPQP/FSo2UL0#LFB'bXEH4XaD-HReb8&31n;Wkmd`]Q63eS*dg273RU_6J_738Kf(]_5juZ@H$HV\,]>l,F_$Q(D^6JPgXK$b0>UpA?4Er.N,+ag3Fh9ueJ+Rp*VtL'%/6o5?lKi$/oOM>AR7qOD58"rn8(UT#.#)sitF)d,j9PVY$HgVg^cDCs,<)^Yls*>]5rF7^pj3Ed;j,b:*VBH&o?bc"l%%_kC=n)0Prr]dNjp41kXoM3T2?R7q$iP5:+n3G"l/7%uq(LC1\H^DbSSHB"idK4A#:CDt!B(W`>-)u/L\l[5j7=q=#J/R%p@ep*H$de^;!*eu,h)XTEjDY^gi;L_i+,1bS8-7M*oR8XC%`JR_'bk)$1>@ecf!lp(;M67Z%`<.hLh_(@/P[J_9$b4^mU06`b%6a=9-hLp+lEBk#]?)5(5C!:,ZY!KLnsj"%Q,fhUHJHrYR24EtpZu.Y&,+mK":QAU6%(4!hS1b]QFE/qVbLhZ^u;*+[L5hdEq&ZF@-KZF;Tu1\OlCK(pcfk"2J?!'b[qbI<"$.LhtsEXMU9J,Thc,lUllPbA$Z0o;=_Xn"boe\;>P)>$jhIY3&(,+iqd#fFTAAp_@@M'oh/^]VF9_rDKdm:X^[t5H9=qL-LIY42:*Y%+kcJJ5iLh@_9iXS.!Yr-b@*/>L??N`+0MP/ck9R7t?7gA@@[B/[F[9]u\RLAa,m);J*3-+L^%NINn#7"&f'$`ndJjZG6i.K@j"cl?G!le$+$kAn)Jbqo$"=?lm)N8t*&TFg8"7@6m*_^g+$E1#O!%tkJcD1Km["hCh^u>,@3)lLPAL\cSOI+1&@60k_fhlq]fL="(qu!nX@4YUKLo+YM_DaRNn%dYLqE'U>lha,?hT'V+*e873,oFII2KoI8^k4#[JNH>[!f'S7^qnLEJJOri-YEeEnEGU*XpsI/C*7mA3l>f&#HtQ)2%J,K_;R2'>sQ7<4d/GsPm4>fprAs/s.-b9Ctr2%`f?YsfQ9VY2h@sSrtB@6]PQ-=i9*7G@+(;&^^Dg/$GQG3$F'/tof9h8Hg#Pih"Bh8^dAb^K5W[J%">/S'oX(r&b*LoHn#;s^@2c&0^3:j\Eh^:#lQ(DZ4>p4Vph;L^Qnd!S`Il7&(cG$f-Z\s'^(eY4GZZ[#>V/3*@'tV%mMrU9R-JLYiM?4i5h;p(if:ui3g*'_:XMiJ.X"rJO?@+i5M&^%3Cr01mkn""k[26!6.g%":h&A!b957"s0B.1gi6_4d,nB5Q;Ak^?QM"GC90Z'0(*6&PRFs.X5XDj++U!"*,1=1jJ1hpOI9O]k:i\IG!BQca8;W9ATj:/t^WfphuUBS\:<%Q+`HrQ+`H*43QL'hTF]thTF]thTF]Thm0_s\$EKK\$@R-hTF]thTF]thTF]thQ#JET&(smJ[t3XlM40J/cuee#YG>uK!JsPF;$IZckUmff)j5TAO'>o-9-F'REilBBQd/X%<2,MD,NC^kKFbQi%^668mLHSI[3]FR>DefUSBmMAsdcJb>P)$.O\XYGJOY'Pd"Y@jS?oL"bQN_]9P&45_=%)rjqp&[hY`%!We5esUlop^9[Du0Qcg`jEFef'9H1W=hn$+_%F$'\bVh`@*O(H/a'03k6p7B?X?$/klL$h-m:H4I=]KfA!QNb%M2a?'t\@X5WC'*'^%]oPF1Y?h$%<`dG,Y/M/O(H/1j10gf.Br\o)Urq1]:3*H1OuCpP1`%,FfC%h9n9@WlY%4'4';QqNi#(Hl&MVSfPs#o1(RLMSOZS.@*e?oq"7H.fQB$Ep/i!\H*fXT_!\B$oCqT2Q3T43]F,W6Bi+@s8:&hCb21:tMV).d>FF4WHRjFnHRjFnHRjFnHRjFnH`M0%ZaVDnDe2TgfN[$5fj!-6fj!-6finnYDjAtFEh;Lk.JYdHiUN20\#MN0"tX#j*%Y:%_AHcV.1;Ih/6_`o=SC<5Se/N9&fb'H@#T>#!A&FF#XiSJs+=agCL3udeD@EVJHW2VpZ]Qab+^T[t/B$)o1#lR=l-^Uo[f3[M?ts)^]^1$*`u)&!K[03ATf8=E>a,3!W&R6g7+h4^eeX#?-+C9p$d,rCA0+J]c><-(eSkSBJBnD20(HejDI%rD4Q>4scQEPK4:e\ZVM5Y*WD]:?d$cBJ5]&/(@^:=JcIP*rtEd=g?$WbL3GP,]#K*!^@c$q"3=cJ:H.D`*4PRn3ueq!Id5$"i^(/=eF>jBDCI^3=IeJGkDdJ.=OY!oAl[giX!laq[0"T9.5TpE24-Vm=R?C>Toue"2brC4AD!]_=88ZM.%2Cu3d-8ET.#omnkQ,u6iai9;)nMohGT!oh$jI9GbcmPoK+aXCC?bSVtC?XiDW3*<;APEu^M1mbcS;h+t(uBafsI*s"%PUe_UE5Hu8ii&2mU$BUAME"a_bHX5UVU)86.K(WQOsE&\!5)=KP3.sidn.sidn.sidn.sidnX'7Ghs5H#2!tL*:2rbokDe3iuDe3iuDe3iuDe3j0h7Zh1KBr9mEd9s_RrR*L$/)DClO,X,@%ZFfhr4$l^"k<7kY!B1gs"H-!67$4A+D)B8&LZ&liKE&r!H&bQU@g:Wu0b#n!-U)_U_un<`T"0VAAC[Q'JC;Wt/;.IE`8+ESIXLY((Z%s%j^ac9K;HQ7PF7Z'4Eh&oX0HYK/_JS'%c.%^ZP38@FV"8HlX2[)9F;L6!0b16DK#3gb9qWe#BW39*%k9*ci`!+fj!-6fj!-6fj!-6finVPT()GS%d8EQ3.(h^>M366>M366>M366>M36:]\Y,8-7GM4!nK&t8b\l#'N;=E3Isa\;*^-$J.CdnPm#UKntloa$/00cMd8osSCOZ!O'HBf%9KF,Og61%S*://2P&-GY1<`09q^E\C`Kl'+EH$d+E]d&;Xb1Iu0MJ9QlS.fD^FR7pCoUl'A?[Mc:Y;n7REc!k]/ruOu?dLQLp^IS.$>inS,l)``_Wog6/5'OlNQ-Qf@6D&:f<@H\[b22DqYsS.b%d8G\,bVhNWU-bRXa71N]p69r^""4JhTF]thTF]t!?LZQ%VTc\.XN[mX59mlDe3iuDtV/V\$EI]*o>&F/Bb=MbHe3X-%5Z!De3iu=dEW%Q=X3"?Y+.eDe3(;AQb=1=k:B"De3iu=dEW%Q=X4M^h%FqDe3(;AQb=1=k:B"De3iu=dEW%Q=X4M^h%FqDe3(;AQb=1=k:B"De3iu=dEW%Q=X4M^h%FqDe3(;AQb=1=k:B"Dfm)6'a(bPdm6@Rjd'I\Q=X3bAIVJ(TTV1I]p69rAQb=1=dEW%I?V@0]p3/3Q=X3bAQ],%^"&,5<`u(Ih\c!(bH`\BZ7O2)DDo0HoUheA5p\/!hTF]tZ7O2)/Bb?#R-^sAXXqZ$/Bb=Mb8RnWX_tAPb3-)R'pK6gOW/SBQ=X3bAQb=1%>lbAd6u>cH,#WXQ"=*aAQb=1=V]*9WiYQh/Bb=MbH`\BlBCS:b3B1YK0Ae)`Z'3"Q=X3bAQb=1%BeE:h@.QiF26YThTE,TbH`\BZE+CEDcJ96/'G4LbH`\BZMGqqX&<4fDcP5Q^$8'nWF]4uAQb=1=bEG!61e47DfsUeb-ESAZ7O2)X?Oe`WiYQh/Bb=MbH`\BlBCS:b0&S`Z7O2)/Bb?#50;Z]XR*&?bH`\BZ7O2aPO,Eob21:H/Bb=MbHe35akj&!m&_h^Z7O2)/Bd=Bm&eFQhTE,TbH`\BZE-73hQ![DXXqZ$/Bb=MbNb;XXiefCb-ESAZ7O2)X?Ob_WiYQh/Bb=MbH`\BlBCS:b0&S`Z7O2)/Bb?#50;Z]XR*&?bH`\BZ7O2aPO,Eob21:H/Bb=MbHe35akj&!m&_h^Z7O2)/Bd=Bm&eFQhTE,TbH`\BZE-73hQ![DXXqZ$/Bb=MbNb;XXiefCb-ESAZ7O2)X?Ob_WiYQh/Bb=MbH`\BlBCS:b0&S`Z7O2)/Bb?#50;Z]XR*&?bH`\BZ7O2aPO,EoC1t9q4,*@l$u50f1-q@N5,]bU*Q1'6dN][@3CqJ*dmYH^;J-^hZh-fN6BEO.I@-E3'oC/`=Uf6)a?+P85!k:kljP&R8'S\_*YQAq_Wc/@ZfEO:[Q'J[=,Co1b!H*O_`RtFah&eG6.$)4iePIQh;gP%:2Va7Im\E/")AG]pJUQfHPSbc^i/(dPu&USIZrNTSd9?%,/cJ*,1_[/A]d[P>!7mV'$eHK/M/hg0nMts7C5Gk`NqgX^i'q:=8U5Wapk6WqP]QV,s@9.]I0TY(DNng*5k,9!0@9+-"aIaI7lc_'C'!Q-@nSB>4&H'AT-+6Dq3#^_:.eR>4&HYXmE0-95hcuKb\*#g4Pi>;ijaTbek]<^*8G66^(KW6!Ci@3=o.]k$p]G8&^LH1]iln(OCXYK_LM8R$MktUlk?B8ie8]R<^c`,C+NeP<"^%(8PSK5I%:16!F*(TS=R9Z$1X'd`B(BRDe7d0o5eIUch#6EZ&h':e)(\:'YdYAeHJ4%W%HMdd)Om&[hi,"gV:`:s?gIUu$DKP`;=\ZT:WIn+IkEl?e/jku\BQ*cd\bb=,\sPlA:;U>T%@"S?hA%LgKTr#L"]bMX.`*7H`J[j?pU--:2lFSBTWbT(4EQ86QdU=Z_>^_E!fORTW.40&C]s7f#cAoQ?/%U#+:FmE"T6B[Xi:0(RuXt^-L%)Eq+$Y@oLajOUnJtK(ce/8*t1X`lRF3DREJ68NiXN2?$`@FGr^rLBMnB"4fCU%k33h:[!h_:cs`\R4EqY1']'#[!]D_'BHs=)[*ZmW0=!6f@Us=p5.e3d7tUTeFPJ[hCZg,g?gmoI8iL'j,I$F"`178N%,Sf:/&l#8B9TL+G[3-rN)Rh\(>4-07?A##8=b$Z%S3YC:5MZf)O]3[94G&N[4==-9O\uI9JTCSgM,`i\fe[Oh@@2t.qo,-fbgN1ZrOMCR`,'lemfbLVl0JW5j8_Nkq'Z]N\@U.E]sfXJ=d)2jlgSAk2BiGn#6[*XuE^O&YHpOQp.MBFTh$JBi+7"N[T(I2RpK(@1jq!:&7%E:Zp"PS\"WQN3((lFW[Fr8El$fMUg(REqR`!X:H[\Fp^1`ok>8t>F!@f.N[:"lDhPJFd?@5]iCuDeaI'fAT)-uAT)-uAT)-uAT)-uV#ftcb$JK:FNWI_hPu@tXmE1VXmE0mg08^ChTF]thTF\)>OmVGmA@t6?M+SR6EGf6c`.?#4'1aC?__1qc6U!Y+];s]C*X=Ji,fn%8tHc#_.oOoh3t.%Fk4u$;pWnF\<8t:*fO>6`UOp.SV*Pq/I!1-DoErkkOgpGCa`'%)MasGeLBV?+,^rcXAmf)([4\MI+SE;:Nb$hOMRmuaMJAG:i`A5_JUlcc+>R*rqbpsDjaMWsgq#37CH9o?#M37$mmLmd-/d]2T)4(4hF4^%X\:a=FeZ!qNC3\m;G,5;L?YOnk:=A:(BC+g%HOeQ$ssDV87I>M366>M366>M366>M34\;J1?WGb.G:7P9J%\$EKK\'cO.WP+S1Q+`HrQ+`HrQ+b`@&.9KkDl&)>7p+=WO_0XO!0uT"7k4%04Mk6,,O8L&;Db[#iQm-$]u/'?1MRtgZV;_jMVYB8oa(#WaE(15R]i%LPi2!\-1>Kp"0('9=HW2M.95C\EQ@FLX%':hdC)F,.iUiDlC]hGO&Fs77?QTY,HJZBG..i_6Z+HCAVsAXHo'`*-j]AQAUh#[;\9emA"_U+8m/cggr8eO!IbBD%MbIEM>Wu]0M,e#CptijH;AV`MA=9eLa+6\h4@N!-E8bn&i_3$n[(!fuoge5Em1&<@2^2T^N6?R%2O1^FkA1`''0HX;E2\c6Eo[aum=XLXo\7QZY5#00(d\7$]$^CgY^NA0/-=CeUBLR>2`t1gm+C\d;HmLOH2Z+nD]s(8TuGUJmTjQR6/S>B^ZZBF/YSe_'hZ"C.L^D01UV,^O[*Yo4+Ukm@IaL\7.F@p(+lW*/e=@n-\*$4'k4u*aqA=2_m@d30[GVeW)S9mRKCf$h^&,ZSCQYUlr#FE<*F;'s[g7:$SiM`\Uq'c2bmM0O[u;nIlV[.:;Z5!c\(ego;-@8`"SoB;u/[,*:<[93_7o;JL[pe4OXc3[MrF*YQ4+d:P?&PLD8X(OjJHp5/bdkoBK$cC,f,L`?_KsG/KF`W:J`L*(eQLFIu(Q>G"W$m[=4\MDAOcdF(qPOep9)3r\Zr"2lpKJ)3p/\$L=j1]#<@W?rlQNqKH`KngX5@"/hTF]thTF]Te)&7(8k&lCfN[$5fj!-6?*Um(V)@VA3pj%u?WDG'HRjFnH`Kng.sica#s;[8AT.6shMR@kB''N;,HO#*5n8a1LgqtK:lRsE12AahD%d5So9`ho`G:N>+D2WN&K6b/F5oric9.gO`lJ>K1G7*b3f?Jmbe'?S,>r/dk2V2A,!U+^Ic:P%CUB4"E:[`$Re077-LD-!&WR"mKshJ-FrZ^uFF9&44N="IlQtl.NhV`cTgeM!VO,1JR\%JKjUi7H=blV#qq>D)7-a:%U0X6`mm1fDaMp&[V=p6NN*9l.J^HsF^+E'j!Fha=\og<_UTL5lb-'7fiG+I4-,!1s!'5RrR75KDl]S-.J@Zra%)CU`>:_N0\CT*?noR\SQV?p%Lbt[2:F4i!0,l?`V>cf.'j,ANTnK:Q$@0hAM-]--f&08I6B]A^9Dcm:aEkkr=Bo^*=X_tfBi#G/p)'7!9MYLMB@9]C27(6+7p:#]':!I6\QU9Q@2r-1W]8D(Kj]V:XV.-.lEopVd,+&f]iDQ.XmE1VXmE0mfN[$5fj!-6fj!-6fj",T]KghEX7fTMZF@-KZF@-K\mfShDe3iuD`&BgMBA(cj=5DDl`d(M`6=K7NpM9m76XtUVahM%W]n]!\r+sO;!dpK,3pk3Lam,D8B!D7ZF>ti\]J&-[3-Y&N6h4HTiN_G?!k;A+boX#5*7+3YZF@-K\m_nR\mfU./UK!pX!.+9RtB;9RYOJ(K.;_Z1VXE0-Kumj,LYru&a:t$Fh1sYTDThD]96puhU0cZX@c)d<>%\<3+8W>3`,#:%%4"J<5D'HAJOZddu+/bamB-()@2^:#;If5j03n1_HL]^f$h]&_?%IH,[+4(kFr&_cf/6'D\%(ur#!$m0od$l:=4JoqF:QCN]%:63&[=f">qE-"="GZ\)N==8.mH!2Pcnn7cIBW/6p=Tk\ZI@'>`#q!k/_asR7El_Q!@^m^EQ*7!_0W6W;,.Vk+UUL7;o"ECLs*Y^66R0FOr0ao5riS\hrF,O&N4TZ>L_W,+jd+bH#LCOiUIUO&8W/(^/[>`$G!uPl?c9Ksle^(*A#Z'`D>jj7!`)3nSOf;L4T#HDa\h1L9?1ViBMW6Cr6AnM[g0tcbAR1(,A;q6O,-iSS\";G`O[e7iS?#mAYq^D#d4WeG%[6il3n2\fWr8i;bE?1PjDBs,K3c)ecf2()A[+GaS(QYH&i#6>F-('nYtuH!SC#cEn;4#0JlUo+bCGQ#VhH"P,'+-q?,q$IU\F+[ogI$!mZ17mlYj!<>kV3P;+k<]qX*p/Y8]Xh&(^Fk,?khTF]thPsfRVMkBO=jLQ$CE1U#)`f12Fc))6S`Yc>N\gg6;j54p,5\JdB+;FS=pbIp0Y+(PV.$M/E/r6m[=stJBOcME_%EKAO,*h9"TD(uQ*<@o9Z!+/FaD8d%5CZNQ8O5lX/Lf_`':\SG,jn5h<0XM366>P01eX/kqph6OMq\$EKK\*C?0lD<`%:F("W&L`",;V>8[Z+'"a^"&Bg1PnTPMV23Vg0nL)"=X-k8XL*_E7t>46&RGs:713\gFgBH=TpV8H?:eagXHhuD@AcLG:k)0AGutMNk#uD7BDk,=-(,X=8U^H*ra:SbTc7>5+`Y1o,">8(AWBc-E34j)>('H:XJK-SGS^0^7l\I?ct?q.2sIo?($"F6AnFs%S*,1YX%DKYM,]bHW$XsA0^-Lf]b$D`unXUK>TqBiVR-=TiY+?&!&5-L$F)D)'j_(`B&Ad]#eCj<[Z6e?PPhYKloD2A/iiJjYHWS"]LU]F)>;ogEUrcKa\TR5qQcQ7H]EMS,-MGKdC8HSM33iMV&j@?1l:fdO)QhHIA*S1VQSt\`#dDR4\Jke=q.("98H,e,"K!pFfs2"f#rnTTJecnoE'.u`i5r#INL,GFFI2WHNQ.3I^iUSBUY`T;Mr_n6\9UY4+'1SZIt=n7NN4J'kj:_*81\*^cGY4WO+5T=ta[4#JH->SuuRp7j@AUZ`&m4^.6TZA>+C;U8(/LYft"9Uoh3ckd'DArW*'8CWQ/la0XpU/LQ\%HDS4;Q''`KOnjcdEak!/Fu[>r+HP^fO%6\d:9+t07n$U6@l8:.7Q-0=Al^dpmaWm:O]L"XK0qtpNdk5$>@(s<8:r_h0_ko7O)R\7,b:'>C>u2@B/fGO-IQ5O\"HFCG?2r*Q+7[104VCCkYq+q\ohjEI5WfOB6>!4C?V7)2QqS^S/$spZf8;qmk:!P,Tb?-P^:oL+AJjBdP9'Cd@3ZK>C+C'nLT$f;R'&FX%n#B?E0^*T3djRNZ"?]$Mq/U-?4#l[$&_V$;>H^h^a`5C+:]$(+Uc")F_,f)<9.WDb<[En$M8gh>VKZQ/VBWX-GSfk1UhH8hSTX2<4D^jOTohPH&:&W<$!)D@[pJ,q3PSn'KgsX9I$EjSKMN/m5ZT`t/aK#FiDi;B96]6,;C,h]p69r]p69r]p692VnJA/Q+`HrQ+^1Z[MT`NWoO43OhFcJ$e2NLXfgA^Fj&XAe)%*/p/^lfp/^lfp/V:Cd!@2_,j]+9%]^M9NTmRP]CeA<+4=pi9"gL]7<-M-->DYK3X(Mq=*M"=AS,ABTfqY<_Qja:m#[fo1i`5fEba6Z$g^@M0r`6qhpTIc;Ym`SYCg-g.,c^-:Nl\Y$5RFLZFRcl'%6*HnICH=oGs=WU@*N$n\'IK2#FF)Gld=g6F3U:QN05d-ZVB:"fkpJ%D,4M@:+LMka@CNf(1S:Y.XK2We1B]0Q,.C(Yb-QS_sn1J-J9%'@"e\X2=&U4LancplBUV(JkQJDD71A_'@'0Peb4A3f9S,K?O8:Z3k)KlX,5N3Rf@\5i"5b`'ak*Eq/GOk11mb,@DQgRRZKqc"@ZbT(mNlEc>F7p^<,WFp-,E7nH\9&%DCWq7ihX6V7$AT)-uAT)-uAT)-uV&*f`FiE4;>P;+kBlKZ?hp@Bok+/PEH<)?hX`un=>6AWZ+s4tYdrhdqV)'R+1l>OPU`,Afkj.KE*GK3#'u)Ru\$"bZ6UIu7X+H/DA01-/aR5bClEjQeVsBE2oi[s\iA*d41@c+NLbY^3dm:jk*u>$*HK6P"5LHAJ_V[k]l6Q=Q='pGrk*trGr&T$]S+ZT0&1S/S>'S%u8_?EW!%)**Tr>RF`0na4e_\UGFgIWBe(YEHDN'add4H^%4UQ:,6'EBbJImp2X[g+W%VX7J/.o&@E)on#R`$O$eh*sc?5?eauJ/^VG5);6nP=F(e_&CXR[ohX&?3!H`L%!ZFs89^""3i5$28sp/[aX)4B?:em#C:/r9-leJL&;`3&>5>FrP\81PID.QNPY[SZM_eEAL.Tr%GX.7eA?^%TX_9.rdo(,:j;&S%D>K-CgorBe60)kP#2qM-G#"D;kJ#1Wc21'`>9"coVNed\_nYo<=:V.-.lRTGjGqWO!I@H7J7"sFU>;N4<"cV1XR\mfUNqlsRJFkPWohTF^?LM366>M366>M366>M36R_cs,8pXUk*$N2NXN_Cd>+]M$DIcXI?/Y/seT:FHU3h@SETcT&l+75"DMuIr_U<"NTl_>2QW./Go4#O_us>^`ua#FWM\]W$$EnFVN>Mu69Mh%%6A*$k@gFr&6.T=+qG>M;9PH\_\_=m7K[LT`<7F90;&iV9+YdD6UO18u5AR)D=6?O:Mhn&B.dF(B%_6jBd]a^UDc60V"Ko_:ru'X=a\a+q&dChF5]4c@XN:6B/N&K2`3!8N(([pGl1]%5$VemMMNp8he<73_&Z?tOiP79Yu9?(ddONN#9NV.JoCVtFI7H&tljl`IZddKtmbVFu_905DUM@33-[XCQ!!M,#Pkp5+nVZ`)H1(T;s3Z6,B(Cd[@Dd#,K\d)Qntf6%.is@cq,RimaZ)c&pmID'\:=^?luoFXl?Xq.[@]tooKqtDe3iuDe3iuDe3iuDe3iuDe3iuDe3i%WE;Re4%n=r8bQ1dm&dj1DfsUeWa#0tp/^lfp/^lfp/X+;[t_BG(fX(=rcl&V;5k3;`u>pci@1l27@.W5R;U>"Q%U5X@A021$A3WQZ@e:;@/2Qt\%pIR(go!Tq:6CVb>XUh=I%B,SM8N]/A*odCH,:nGUT"9%kl*^,F*V$[V"Qj,m3D6SQ-Lh.[_8*=Lk)kRuPc0bMauK)qV6[RfbMK6up/]d4HL:E,AJYbYF1Uc8?F@mO8r]_@a%MZKGZHJ(aOn\AKW8"&g<.s7[uApYeBng]0-(:DkG@h^\-g)IF$C5385ZqFVhN5+Dqq'MHe'%i`<[2dr%UDI^.:!j>RtuK1.\E!om=Q'7^Gac\r5oB=\_+L*MYD)ZocD'nLcmbPC[Sg/Ge]30'D272!QUCCPV',3/ja4cccMBsCP-]ZS1VcTVHkX6:LoHWdY&M]IqFMM7fb5?M_+MK8gN"Ab.7DZ*FoNT+2n^Q(r"Kot>6DD.#hH7QiI2[ZPYHmdTCfg`gN_rL`X34HsP`sUrM5"qV[C)'E&NST"AZ#]=p-JEYG_TtiBASUU7Qk)6`3AT(B)pi:n0nnHkNpZPj?-()*5N=j!eRlK*]cM-JME'esd180Vpd[u+D/Xl;__$<>g_2J4G0IZUFPb0PJqE"&a\Ice["sgZ4`1F^SY!Vc^M3H$&L+UTK0Q&'KM:P-WP?%\7h6TcSp614X`$$9k08WBA2/"1'Ag4F2r(g2";,[4`QhoE8,9+cRaRsobkGq5*4,\<"0`%";iZqiFLIq/51OURpD"%VXCVEF7J!H/R`UP0XBUg5EI-?@9Gel:"M]$Ij5+UIGkMj5akZ22jQ->p4%EN?TLga[2!8_be5ogmm'5&M+EMHe'%SgSD5)RsF@6p,Ii]=?AnEN;afl=KQVh!.(@omEOQXl2&]X!+MYqFO29rs`-YAtY+O%;6DD*mMY+K1nobeilkh\XnA)3#1I?9P3[@TWIeo3`?h^H4tcgK;rc8umlL)rq]CY6T=!+`K^d8:n,FUl6_&q&Jh>K'5V\e\YsG.EK_QGmTM)[1_^g\'SW^a=gV*pZk`pJS%m(rB\$DA9jl+q3pr]ZRH_-9khB\`-#&g[$i[jgh9]dddN6kK!6$;p=Nea&uukl)_I7JBa*YbS!r=_D(W;Pg1H!eYtS2;fspekBXg6-6E0SJCXAc/!naC=,(271k:=_RCL.ErpoNUFWD*b%)N7Kp,N_fK>2M\AEZS%+$;t!Zi^.mY<(1M%s)FQ0BLaPT,WobDVqc;8DYErU"''/p>ai.PMT^U8CehS-1IYPO(\_$H7'4'T2'L()&Jc7X$Ecq]AVDU:.tQcMq@+0V#N3QA:*nNiqKD@r:d`U`p*HHg'u6i`o00*`goJZT:kofLI:WKI:LF4kGaqc<1=**Z`?s^u62UXWe)OqZC_55Km;"bYEc'N@Wsi[pht'Un0iQ68#8)(mkg_.Et7l(B6APD]6>YL\*"a;Tl3%TH%7\B6]>;S`6;e4nV16D(b7!D?A`ZJ.qU640m!MgG/R:S;3]B_-eg#FEiD^H)p%O1rZRLENA8p,&l=P$XB*>X16\)EN?TLga[2a(Uo9+`NA-#E@]#gr5>`*j&XJBLWYQ[`N:2<>K*`(19T78O=*"U!&hS(_3Z_qAW!%UTG0fb\c66Pr-&2n)CB\/'CUg2>(\?FVlor&"io6$t3`-]k3#l?=j!h;!r^/U1"\9*Fl'VF1l(+d-Jpi4]E7$)Q(Q[5]\UK8_JYfgM4?G@-D_]Io>G4cXN.Ag2Tkis485'Z2_ZMdWu%Lj/Tm&X+DIXB1mo@i9j/aCBq@5mDVS3C9";lh*Jg:VSj5K2rWS@;ZsghIH'a/psmA&j.kNOVt9c=,KXDABX<>K*`(K*^&j]K!4a6#u;2s"q6%-cEUPK.l0SQG/>E>#r_pB!6ZX's+>#X2F',6g;o#,.HV._Z'.tL$L:m:"p3)NPcI_Y?/6<"t3M,4;h55Ec:tV);:upWC(FnfTU+!W$&>r8L'Wk:rAI8%]Vd4K+QlX0O_2`Z=@Y4:9a190d_Y),).kk1:s*G%"nqeF)'O@bA>\H_[Q1q$@5Meag5>IFL[cl[n:JBQQa<=K5\+.t\'D:lMDP;GHCiYqr8(ueT>M-F9FtWm%DY6P_7,080[1RDZ\5h<6DABX,,]5K-<_iaS>4!bmM-JfVXWE:&`NA-#ENAuH$XdhakT#nXd.TcCRXi%X_rdh5EJmo9OYlCIW33?Zc,=6._JR&R'+B5OW8?_eW!F6"e\.ru8clIs*ZhV+8r*KZ<76LLN]3#ViMD.4q6A0H0-d(s6Qa@;5-6i;@]7d3gfGaQ74O1E<7U<(EQuhd(:tp10]$(T^CDR,A)3"c9RaW";8BXZNlRoO>I:%dNi.b?$Aj)qp`0W90roZ@/p9sBn^`h,r&Y+,M6AjC$NIFIO#Udr'9P@%B0s-qb(X[->jE\%7;^j&VMVeJ$Vd\CEd]XY+Uo#NAd(X%2/MEN?TLga[1V[u+Bac4\oi>M[9#SfhonM-E+S[u+BQ'"93fuQD\^gN'4F`X(:$:sV)R/qd/;X:o)*[Kou!Tg*mPtt0@k`9qgk(cDABoBB5V_^E\b_lO&@Z7Z0kF-`BUOZ[TNNl4L_72J%_?lqA]aLBG=MgbIXb"MT7<;a`C*pnqC!:S-"bXK0AqI!ZCmA#$2ea'F.WO_4mZo(0uj3QFdo,l$:"alG![tEn>?+c9+nu/,BCG'_ZDL-7u7CVdkP'#;&*&3!jo%'D:LrkUhhJ7hiLFV/d&Ai`>E3SO4JM+q.7m&uN?)CO(&Ap%k1HEH@K1VG>.c=F<L=kkKE't9')`NA-#ENA8DBSpUcX$q#c,5:0F6b"O5:WsBZ>#*j&DABX<>M),6PkXXa8N-R:&4#1DM4Da)R"^B&8=?ldOX`J?BtI-/@L;O2)<]=c4e(HL=Wli5Tp43b($('/d`"i:s"(4GG?3%jIDWPTCVj1*`+!]b\Vf=.Ia/BBlV!TZT:VpUbQ+6'BG@W=Pa0BoocBT,`J/qH,&XfY\CEHc.W0B'ghKdIHkVGgEpECF&"(pD-.(frh\q3[,)=<5haf6M?ZYW)8LjpY[Ijj$fS1R"`+^n+HV">Te\"jkfUb4J]"IVuE]o9]K6LYp*5d:119b>.G=d.QE8*Dk5rMW\19D?kED`[*tFIQah"53>o.(A#13Ylc7DQRF1MHC\[f\sB7G,!nN^>D;h`fLaF``JZJiV23f+]NHFFs#YrZB)&cQlCOI"HX-qWS\q*&IY1^$03?dA3^4[34mdBn>C!2"Pejd3N!g\NeWH/uL!r)#0:#/4VfZDZ@:jZ.>2WPSa,:rD"nYd0[-U2=C15qM[?%2C<;V[u+D/Xl&gV?\CC\$X16\Y3TNffl4UR`>K*`(jWo_%A%F$AKH8'nHWT.*j!gGOEslE6RBb%O;MRFpjj'20=,!n%s[sFt"PDusm/^@SrB@t01q`faU*-[h)<"Od*mTGcpTbT[Y7=CoH/U&euWfu?JZb#%+O@/L88:k&@PZDt%`ICP>MFR]Lm(Q=jPu%n&%lR[&`P4V;YP@2*YJIcg(>\Z$<8`>Rs%dV`i`=5GdC@`f;fSl8\CJd.Ynj,M\%7W)`NA-#EN:JFn[MTS.W-!1MHe'%\.Z9>XIl4=MW4D3ga[47#d#)URbTU8XfdLb`NA-#EN@3\'&lsDn9EaR)A53OXk]e(>LD-fOBeKCE.mKeJu@gf`69g1!r$uqM?o-UquZ\";kL:@#>fqZtMH\O)OfDQTB2[IWVN-N(e.(\X-O;7rCrQmV;f/uiKMdO#9MnkW9Os!V7e^H8cqKLcF.bW_qO4,L&iKCJh\eKk8OJiC88[.[VZ;n!1N-DF$$76WLP8?;%kFdCtn$t@T;/hGYa>9WY;NF.FGr+\=?YXQ'1Lr64\94lW(%85oH*0u3mNh9L%B^6u03.oa7tDM33.'F`+QXKjR3ItBU<^j4P8tf46f5St5-O&;"O1A<%id[TZG'B9ls5B7_KeU_AENA2G0,h=rIGF)gC5bn#\(VPEMHaBGLq0%P'eaMO!%sSTr[sAh!HG1)5X$=V+i`:'"\CC\$X120b.W0An[;l.cUWC)<*4J$Bo`Qoa2TCLIHkZRI<_Skb:4?f2E[HlH/8Nrl3oL^K.sB?hOJQ(+1%dIrJ>R3Yh=10EI@LnV@2"g\!Pl:#I#.VAoVh7^^eUl/XB7oP?:9[m#ORKVDnUmf:IE6hh^DqEJB1df<*8T"[DEQ\:2)qLZ4E[7'Bl8G@M`MF8`T_NY(DXQAHo[b\3\6<,3!jK]9qI#r/Z:1N.t421/aA+V\nCsc%&:UHMDLVg:h4?Fm1[u7p*].A@76(-tuHeM[4Ybhiha/C/[YdDKQc)H6@)?[sB<;FW\)M>K*`(enX120b.W-!1)YjTLiV0'0V;QRR`H96ScT_ST8?NMt"8h9L%`9ml>".]Zp(C1)G4dm\>[d'fM:nqKZ/uPhB?*s3\L0_0S"?O*gu]0WU([5U\[sRH^F"8R*`@^bjTa;^qSF6Q`B)'lc3l-/[;Y)HHIfd@Id+B;46dLSLC*]Fob1aX\>A]H)kDAD[/pcpN:Qs>+&SIZ:eAkCNFtXjtX`7%4`0EBp<)0o*2^LMHe'^c'?(VZM;dm+`$#[qb/+$-HB%NO]Cu4rnLEYY"YEr'Kd%NXcn-bSW*Bo(aZ!kGat]0T-JTnR(A27Di>^&)i(,J3G-#SUKj=XG6dVq+A0fB,N#40mKj#.K&nGuGc`5b@=Juq(^1=2,,?uPHbD9A.#EE#*$C)13H5K*`(ce[sPsE3I+2$S^IncJ#A0Fl?s@$;g%dJ<`lA^$/__ce`V9us'agNc&$5R[u.2\&nht4`ru+kEUFcNn\HCjVq8KZ3'qN1UP`P1$pBYqf.'i/Olu?/GG6Hs^BYkio2!b-DQdL`d"56HZ#7M^<(q!!'Q3_W,.IL4KJ4BdGPuJkaYL^m/Oi#\oK8GMjb%nB:?O!ISjHk%UL%B"+"rGQ6YD[ej\\T*0bl[qicGor]1oDtITKpRns`5&:X3/r-Z1dZ(ueTJ`3$Iu4NFQVEN?TL,An7*MHe'%i`:'"\5h<6DH0r07o.C!\CEHVX1PlAga[1V[u+D/XlB8fF.gPi]hT%>iG54$k#'H2N"#$F3W1VmJq'@h/1g3O@)pT>8>t443/8fNggZ=WahYd(h32oQV#'iEPpI.^e3^I\Wa8ZF0D?S0s`l)mbr'"45n)iKsbosQp?PP`Y0INq$LGRd6^4D7@ngpD>PYcW[sUl(Z@B*p/KXY@WYe-/@93,\%bcj*_YN`^KV>HYJ43Lsro:uC:OTV/l/Jh"$i$-Ea+]R4o/M;ZY0I10na8!$BD%u3S9j_:#,miX[os8u`i\NBGTn=?I5PnbM-Gu",0-fqG5o3'"'i/2k6!?sR9_\in:3]L+c[0S//B=eY=u\^L)NLton/B,4a>UW\U/9LedA7AW,:ik8X6%:%6ASj"&@VuIi`>#\,Asn5EN9Z1<[#D`6@cRGGhn0[XiRbbjiP[3=W?>m`1>0(In5"u8Nj_X'Q`^dDWO9m."pD)3nrru0\`1<+:G[9"HH\l'=S=bSaBOk3B$R"H;_u#ENAT?;097sqdHoriBS/r^Bkmh\gD;0Jih_lG&qKbiUs"6HfJ/cFee/:X7sMJHbt=bgjTnrDKX2qcD:[^\CD@bjLc6'aYFbEjOdb7'?tJ%qm42CZA2psFG/89U=X86+k+uZr[cju`2tAC>D3&sWt=8k+iLM"CI6fk$fY215hmiB\5`fSX72Ph\(ZFDh.k9!L(HZW+bUD-+`9//ga[sg63n`f0LX]2P.4Kt+bUCn#[rP!eKf.8&4-XGKFl!3EN;[j<[!,-63n`f+lZOd`2u?3+bUCn#XcP4-Abr\&4-XGKFilo>>5a>$6b'663n_C&\"2SDA>JD+bUCn(aUPJjRi#U+j463orsXX8m/Kb-QV+bUD]Lg*Rd[gF:3&4-XG$k]t;,]4>`#U+j465Una2+cRQKFgHU+bVO;ghN"^<D3VT#U+j4L59&.'"82kKFgHU+UeslRNubc63n`f&4.3XDDb#@.YJ@"#U+jT7,2O?\5`eXKFgHU@>MGD,]Tjr63n`f&AeuuX%D;O+bUCn#U+jEi`;8]X[3::KFgHU6c?)R3NZKtjqj#,C](4]DU!f%LB@KT/<"O[mPj/BifMZ6Lm]d*NPrra^NrK7nY=+O)**j%2NH)(IaB6@4nfp"cHe^6\DipkVlpm%`=Em+j$.JWepED9nK0]E13Q%O:koE_\S!JnTs87&004Sbc=qK'BB/`GT"Z,PRNuc.8_e'D\CEd]X\MFB.W4oMgo;]=[706hb;nt8l>4D@Q4p`r,]5J2ghIqj<[T/1't8K7DH.@Zg7n1ojd^L,FZ/5[b;l\/IC[0.pL_";0'*J(:3"QG7A)cm=_64,maV_/r;'j&U%!Y'd9I`*BYlCKqJ6QOVh%EX:Q=3'XT9f4+,"MSh?i[rAD-n[BH+2N#Q4C2h-"o_XW7(O.[[.Xq6S=-T=6\AJ*VqC$<9C`s:iJMY2jM4s3o>?qoO=q2.aXYqJC[56kkDKUe?m7uI%7Yt?/iiL/%&b69_RNT?ghJjIFfV]&p^-/61l@!0hXIm6O@-5?76H5H68Dn15#2S-\=b4@TsWIfm-pclf?^W>CF.pXqo?_AFk?fNGaEg`>T7[`bEQ3OdPl?bDRF+A,V9KrYU"Y#iL4EAB56_"%t2E7jY3bG%YIt#8Y@.)?+bYK\El&Bh9)!Z`.M8/Fne^A?7UN>5uSP90rl+Oi>f-F.gl&di43F2SM5nHU\Hn1qMAE.-Z4'`>BN;dEN;fj>Fgkc2Xd0X0]#:_^+i:b>VSoT38DG\4ogmm'rOCCX3/;LS\CGK,Ic=DO3S(=f\:@cqL,%niq!B\8*-eECIAu1h015:-Z-admG@DuJ@fJ5`#t8jhD:V=R-hUr!/53o\LKj.+.`o[h)J^(lLE^4k4.0.kB"t(7Nm?ZG0]P5?Yl[//$iDuui#=ljlk-^A^+kE+&LiD>=ldlBAV)V@V4;G?:->k\$(unY\`Gr@i.uBkIj&VXIA1VV@+1HQ([D(K`h!.@c>E.VJj&X>H_RNSn<(l"]3H;+A_&0YM/<7?e>"S@^*k0jf,%GVnqmb/YX7c,qi`8!1ghINn(q3ZY&]Uq6Tj$GVb;n.UMN$Lpo?)2C@tuC=_WT!*ThB!2Ooa]ahr=/m++gljMXBuH9I"S!*r^qQ8]gGLj,[*<14?bDqgo@;?[M]R-T,'3qDH.Ct_EN:['RiR[%79hEaX6%:%%OZ/%:G_[.Jh(iA9AJfXi`8,W0Q&b9_k,j%oeZ78]L:d\bDBG?1#)&V`%Bt`M-DRpeSqR7Mo+.d&,2ep9LM%)q[-\rVC/n=MD_PLmH-M(s3`"rDJ`LX%@=a6F,3Q;">gHU&)Q'4T0<]gOZcY+edi_SV;B,Q)F[*^R@i"C,si*0p'dAVpi1p+P-H5&]V4nuU:n)-GE(U]ml$[FbcZ3gZ]1RUj'+(T>iE1I='Tmdj3cr.^Y^I)OR7V:I&9b?JkH-72D#u"UX@Q5k+dn[9\aA)]\ch,-g[4]S^:,iX+c$E2"Z%JlC,65H0CBc\CGDAk#K::XfdLb]be/8>;bD@5E/la9\_+8[2Z97\CGWZk.W3dm>Q$Br[4u[%\CGK,>2iT+Gr=B7^#-G])]Ce=U#Hh%]nJ/A4$=/gVU.8$kQ_P]DB.WU)@XVC.e4n`]KnIRO_8PPHc!j2r]_YI`ss/rfqlJ)r&B6^`1d`go"86K(>7o&0C9RPLg/[r7H5GVWtXLel>`ld`2sNI=@%Ii`cu')C98YRZ3M%7,2N4)oW@p8DIs*.i6lp>:m%r+r`\`X^26i`]Z"W-RYRJID-oq]lu\CJmCXm2hH,n[Vt`3$V->Q$Ht[23h`/\#N(11#urSq>rll%d'C_Z.fNB/a.7>\!d'D,8C$Wc,G'(T">up6;pTbOPM7iMYOH$miJ#?Y^XEqUmjC>J4K"i?+NucN+"#+Nu!ek!D2>$r(`O<=u*I/(^K2Xa9PZMbW-cKq%"c5B#YK]!0S-31cf`(/N30l(*g*pYi9.*T"<3cg1s3%c^UA`2tY3X14FdMHcX,\CJmCXYqJCFZ=BA9AJe8`3&$"ENE)D$EN.7s4,"s`8:CA,/H$MT1>JVmL!T.9FgPZe]u+82C36`3,tulh!3\)FUD/F.rMbb\CDmCog%rJi=WjM=#WF%M?uZCYi"`Mk6=!?!3)Bae^6R6ht/7iE:R6i`=[LX`ik)DWS-Na>f^qF3D3Vo5&:JgJ.ID6QHr3p1)p9"#'-#1A&JX.>)OD+`UKE8jpq&@\*&ga[2a#.K37Vfs?W+e=O>,>C/a+mLD.-(Y7dlH`jjQ>DVD5*l_ZXWrVW5mJ(W\7cpPLu)>fIaZ.LWJ+@@nnH*g/R3.AMbC*&DupPknt6`I[3r29+>R@d")lC,65cCEIfQmt8R*1PJ%^>>6Dq3/=RQ[g#iM_?uuiloHF_Tf@:@#S;A-Z7I;5B3b$\CFp(XfdLbm7c;M;rUi5'=S=P,\mk/\CGWZS+BU->p4IkBAE]5%L2/j'.LgO.X@m>i@Wk"E-/T4NFS@c*>h:N*@k]DUh>6W_R?UL"2%"X^5Gq<]^u(g6B+tiP_k8/'1t)0Q+:g\5anrX#d@G(KMn%[sEab>O>,>C/a+mLD.-(Y9[nC_78$9cL4dj**FRtHqBUIoCuL;bjgek_O0LtA%R?t7/.9%-gIUU3plmp/Bhj)>0acTb)b^)m,oO0[50c&Cb3s2%14KqGK!gUsmtl6)DLuBSMJXhEMUa207e9T->p4IEN;fj>9-Jo.Ki,jMH_Y[DH5_Ai`=[LXgT?iF\UY+BAus]'"9ol\5`fhXqeELcM?:R.n*5f4^iXZ*kqOM7cTRfL&>bR3a3McpiPOTNM3f=VrL-?RA%_'riJI'5/?J)#[u^nk94`N1T,@GrXf?u0[%D(NONd1(V+0f4Gd;@I=pP7:_S5`;&&M9kH,N&Sfp4MHPF)hTuZ1of>Oe+LaR'T\(ZhOeMV?ISV^S]'=S;LgnWk0bDBHR&5V(2DRCF'X)$]q3to*W#8ap`@Z4MC-Z0Y#\4=N?Q?,E2"[-)U[H8ROK5p8)?DL$AimrI9[F.A_.IrNX_QirENB%p>?qoOg6oJ$VSoSH-Z0Y#`3$HjDH.@ZMHfIDh!1?:nPjMO4j%2nFXt`m*0U.iTIo/(2/>ninD2)f&^J:3`KK:+hp@,,DDfpqB6,S*]cV+sF]^0qa1@Q9XUK,Hhq=.$`=?U!Qc/4-:h?reiC_m?3H;+I^i?Ebe^h[@/odq0esZpgDRCp5X2BcuFV;0p;;tVrX/CbX>na]9CusZUi`=k"-D2sM<]+Ye"VA/sPdo9&`2u(W>MU]IX/"I-g0jlR=qDc&@?t)EkMqQ0grcZ+?V0AGah3mPW&C6(TuW(Mon9jhm^0$]h0TbE?4H:9MZOYqJ5Lht3)!c-:>uqHSr>[A-CGnJCsM"EkH0&6E)06g%lgJ%j3q%&HpbC5ARLg.j#?KtRm+MVZQea9Aj$#O)a\2Zp1h"jd`\!V$@lPgVNTsT+QkTgGOBs4]uME5j4`:I%>\rG1E3.JY.KR9<"EcJ#\9(DnSI(aMjlHJjTU^hd]q:KNM^pb6MU,rbgn:LGa"tRdBa\@3*@iAj[2NX)$]qEN?U7M-IY8\(YHJ.>V2&'";%>go?RJeP4s?>?HZ#X6#l4)slEfOqqJL(j\$T]Pf]+Y+?NQV-q]hUms0B36^Xrc)X:.'R&M_m]$"D;'bE\>kqdF-Qqcd4$]ART#b"a)dN2^j4J/fMa*/MC_!pIrK-/"?4[Jt3*U;Mph"$mj!SiIe[KUHnn+ZLOgrpfDRDQGX%D;ObDBG_Z@_5C#P#!/=;@egf')o\2".Bj]_SIMC?qoO]#:^oa):P`nQt7R[tB_S%ri5k+s+lqUE!CFSU@G7'_#56ikY$W%Y^n?q[IFkIjNrg3+c&9$s3G1d8QIi3RAG"W75+H1(bVs^)T+M[@FbW-#WB@h!,N]H@iZW-#U+PEN;[j(FV;0pFlHGAWu$Rr?/emG\gHOdo$V#ip6>+l:PX-XfdLb9bOq(S<8[ka/rAfDKS;*<]^u(RNudYS@I)tX09'oYdb=TRSDQeDY4'NX%V75H/_jp&\#?iX`c(02+cS<3H;)sF?GaY86#'LL].tGEop)K&8a$Dj"0TE_kt4?7C1AIl5#c-o+jD#3&\,M-Is$?6F,#[sEV8eKo+@4)q;mi`=6Z>LaEC'">G(i`?qoO]#:^o-Z1e5ghJihX-u@Ei`W/MhEQu-a;#np-hu(JF's5\39/..J2,mHTa/uM$>@$5hHf6nV%",]qhXi[D.[ZPjnMo^6H4on90/\V@^MNZ\?V2sms*CH#*j&DRD^)*k.R`DKS;*@$b;m=A(!B<;Z.Wa2B);?mK?*^Kk]A1WSDQ8Q#,*CN>+'lL4`B#BLPms1X17.ip6D>7&iacO:#,"H\([Bs`+L%h-j]F$#.NH<)CP'[L*%cOCQh\HUVRZd-h)m1%eK(B1I`5:l<=^Q6&qI&k*G#s[i-k\=2*.&7=DO?e00/FkE#`\FnhrU]N5"s_mbHk=LW>:KWl%06uf9h`3&$">N=]Oh(#SGXnEoUFbs>iNqWNnX1.+iEN9XO-#U*oEN?V"f!m\,[u)\UX*oe.?/ensj#oZ_lKu)]ga[tWM-Fi5q;$oY:Q*a&c`\;cVO^pYVfd_Pj9sp^X2V':*j$jcET=Zj4UXe].;;Y^U2^M"MPAq_gd>6+n[R+,EN;afC3TI,1D>SZ_/@!7-mfMplR]Dp0RfP@9RcoQL*$Z/brp,ROnkS&gHAkRhPZb]&).NEiD1EalHiZc>.H%Mck]/\gbL4pNVhr\CGWZk]/\gbL4pNVhr\CGWZ%;V^pKl?XcTGQF^'N3:2hhrN85W6bkGK[K_Q^+gNs%UkNa#d&\%9M[G/oAEMf5h@V>.oQ&&gP9.+U%l=jSAC3h2Q4,)9E[>D74QDS-eAG[?%`Dmc+FeKf.8R\HNWcVI>!KS`oM6/:`<\([C_eX7jA+1GEKh!3F"]CB3Lj*;6VXd0X0RNucN;cM93q<<`k0QF-FLg+0EJ5?!2r9I14>4R]eT+tN\)IblkC7CaSZSe3(5JTtgu(]\4aA*#D2-$VVQdt$br=UPNP\r_nOsXJaUd800)A'-GhhSQ\CDmC[24cfD_HMOa/nB'7@8dH`M\d-ZGVX73^oWC&<"SiFfXLYG>A]m+E$kpYh]f6nZYNP[ghAsS@;ZsghQEMU8%Qbga[3L/odp*'"?SM\CF:b\([(VeLO#B.W-!1lDZ0r't9')X\7I7KZ("d+`;E9`2tpDDY;-`[u+DGS6NQ(I'5hWJ%G0VL;o=1H@e*hjD[3r#n&GkBEsc)I.82Ncck`i`:'"\5gj,n8')RMHd2Lh!0R2XnI<#(q7'_SEIE4EoL-'$ur>Xe]kXi90k)W2ngrX7>G5.$C`GAmg2+0]th,l%^Ri.<6JW*MTpZ-[P2jE>[3sSMV>9F3l8DW20#ZighM'4d,<'+>(A)?qDjEL8PF">g,+-42iJ_`l!kt"iUj.7[%2;X^7FMi?mL*>E,?eMq=>DBtnn_;o\E4R2cuN$Fa2e3&ndbePY+_:crl.&Opc3o*tET`3#==[u+Cl6JQ<2)^j_uZ*`Vg(];[4(H'^%Jo[@FbWEoL,>X&Xs[9kNE243tFec39/2SJa?e=5m8e/!DK'X/!0HTm5k<,)kMDa/tYKXBQDWlhT@`d>a4SiRB@#"Q'l9(pa!NNA!.!ah2V)(33A:?God<:-#1_`HN4^N(V\4ErEPg)a!V&K7Y(Fac_h]9V;B)p)ddECeNL6)U=:"p[8q`?gGi_8@W^)t.+]gcScQoInRANf*Ni3F%Kgs,_u-<-,k7#:l4(3M`FSE0bB:la_dS#D.-e#rZe!UJJ(pVUjI%NFT!r_Mj&SZ)2!NENI5pkRE03<&(!qe4DABX4\5h>L$l"nNghIPd0Q)"IEN;afC(90'>7e94I(Y9583Li*[u+BUga[2a#)^MbDDd;m(q2P`\CDmC[0EOOX.Jdi)XmKgP1\,>k,Dc0PijV/cGtOS\PWC;QL\ta-D0)ElDn3*l*h`l?40`kH18Q>7c@+bsU:Oojha=F3ipu%?4qkRa3qFQP6i3OgnEHC'IEWDKS\/C?O+,R>DN;-]!gePQb"Fmb[Q\tQAK\(ZGDeV_;Ii`7jS&ojsfi`8.=*k.#2p#AZ#>E.W?`3#&/BWcF&jOOd"jg`hVSCXgVhtY6iGt5(hi&eEej(n1%i>amCcDlf/B.41FXS)d?(dD>+S\t5'Oe3\Prj1?M]]S%)F1;<8't%>A7K;$noqP!#F-eYg8iC`lFUSk<8XX8m//]Z%fF6NN9_GWL=#Xqd@!]s*%3`q(*XbA9&d=61SX3(1X=,L3F0lQ4Y7=Ng'bftuKD2O5b[_V:UXa.O^PO-tWE$`H)Q4p`2NgC(8d.o,DV0M8:MQHLSG*nkDYR'8n$Wj'ss6MWVYDHIXp7L_M+3NQ6eRIN=POjj='XrBthTcLdr2eM;RhN9b'Gi-5J_Q`"o6+Igfs;.H8r-\'kHo+A63n`f&4/?(EN;[j<[!,-63n`f+lZOd`2u?3+bUCn#XcP4-Abr\&4-XGKFilo>>5a>$6b'663n_C&\"2SDA>JD+bUCn(aUPJjRi#U+j463orsXX8m/Kb-QV+bUD]Lg*Rd[gF:3&4-XG$k]t;,]4>`#U+j465Una2+cRQKFgHU+bVO;ghN"^<D3VT#U+j4L59&.'"82kKFgHU+UeslRNubc63n`f&4.3XDDb#@.YJ@"#U+jT7,2O?\5`eXKFgHU@>MGD,]Tjr63n`f&AeuuX%D;O+bUCn#U+jEi`;8]X[3::KFgHU6c?)RM-GZF63n`f&;H!F9bOoB+bUCn#U'Tg\!eR['g`0LKFgHe,&T9[Z#4\;gg9Tpean$JqSJWE?)&cZ#;5:SW"_[fSfIIbV[0rd;aoW9W`uN/gJJZ_#[CUhNgVC\NDd^DPLZCIMeoKFJ"/o(MB[nK)B6hHO_6%&Pkkq!#LO\'(%2gA7Mb@j!8q/GeQ&BGoJ5.:SRHhN]ep57#*HqRD)Z8Y^!gYgC2%`Pkj==(.`'#rB+4K!4E7E;i`;8B09"QmD3B8>2U;4sOlti1-U1&X[@SiL0AIb5UaAMQ+CjH[lh+.7RR)eY5#jNOorpF8'4q'ucH4IXqDr6s-ft0ou!dgnKB?O]Rqp)o[?p.<8:.7=.2R-=[aT3A6tuHKR_!1r3?eE+Q/q(V>p>=K>V]V\jC]A+&U64``rP7,7&G&rg,GnMj4i=,XJ5.#5c?6[=\r:!s^6l:X]7:Kg3,I*5rE[P[T]3qTqg&\#?kWQ2-Dl,fqUMCV-o5htW;[sFdE4cM3b;47%8.B7SuKLHQUPlt1>b'`"01>&jYk(Fq8\CEG^)Rla,ELnf5--UaO%0Q]crl[#0ho=P>tZu=,Qj*\CDmCogDAu)J+`!1?ZVT<:@I*M^DOV$*L@pq7+sdY[dFO#t5JHX(t8u=LTJ=o4C4B.H2eRas,4WLL,[ma,A0rJ9l7W;r04<2Mt*T$92#V7@oErEM_=]oOQ0#(HnHo]6fFJ*Bb]#QDC+rpQUo&?1aGSWoKBKW^sh5D`1#Z&FAY)-B51&'`_DH3%1TGZ1=YUX1G*HX83UMX]EASoe]p9_k,^h<,YP?(>4LJFk0Y,->li4df^&8>>6m&Iu56>FQ7X+k.&r*`3&J1u<+tYmWOk](=siJGT)*C7r1rk@#%=HU;C@9(WpqA(=$6\`DC&)HZ,.E2j+4Am0F5;ft1%S?>V";;&LR)a[*E1?j(iE[,e+N7SoUptP0?l]H,p&:&N3(uhq4O1Gr`3%)bU\e+%Q^$WUQ_;t#\C4p]ji?0m71P^rh:Xo+&V^J19`RkbD@7Zd[tZ]bI-?i>1Dg@UfA\()>O'BsF$Q3$5lhi`1s':7]Mur:4>>2U!]CH$ElHiH^%_(S[AKq%TA*EG(W,N9S+l)m?]%4aBdn)YRc\mlrP_EUU%`(SG4a!?a;MJY@>?qoOMHe'%i`=YB3,TJ?>-^qk#MFo;h8cXh8Aa&9>@$5hcZfAueMSt"ghKdI`@K,Qs@G#(:,=Gqc'("r:<&eAM`>+]@^M#U-S>;g(\]*\?qf=(9d?s5jPecACmi%d751![nkq9dPnLB0.OU[TV%S)U/(!`3Qk6Iu+KsOgcYpTs^C`=ZtI]i$@jlD$JMd88II:P#`KbgK(\4(mj.EFV06(#Nk/8N2AS3SBFaP7/A7C_GSij)Kn[hmut73+-on5G+I$@+V8-$Fbb%!uL-)L.*L`V1oLfu]plVc\!\@IY+k+m`@]Y9Soo=WPq"cEmULLL)fCLNe>2oNYHs<:P]o7?bO4&!No4kl8B5ORXh/TSF>K5g7Ndi>&2)N(&USbX`G9>@aMU0#A0\+88\TPsC=S/5nbSVnDD:*M2/jW"s/1S]ts<&538.(XObT/\a1`Jp<1)I1A@Mic3QgqVNC%TRCcf%`(f3nX5/S9`N<1_+h/oN?P*-7i%_b\0DrE.JYTR,f(esX&o),+!KHVE7_HUgUpm06&P94P`5I&3o]_(fLC?gRY<$n(eT=6"e-d&u88K0FA*PO[=!^7"^F1o>_di%3phHqb:*_Mel3eK_\/ks1.X.%>r'.-ISXNaWV8%<\d#*j&DABXT>]HgSAXlK*]sEN?TLga[3l:#,"tDY6-4\s;m)E$-b)KVbM7:Me/FbMc16P/*(W-"#f+u:!=%),)8?+jC:T:gu`X_U/+,k_p`?4N2@-bkk3X\%(E'Mqt@rE0jZIdUFE[(=Nbi@%8Dcm&V0M9:P*3(U,3pa-)haM$W"Yp%2K#a>8ekT?_n).;>;[rO#+M-n_V^tSt?=*PB%M/^nou.h+bL]0uXUpQJr&Db^st6r%jc_aJ$@'5-GTV,_4K1o4$j]@cO^IB&e/qMMbUi-Z0[.MHe'%Y)-B%Xl^=ZS8Ek\([(V89Se>K*_Q->jR-H7I.UX?t]W;iZ"$U>9f#(*GBPbjPjkc]9kE\]&cLh0\B`S/(#jnbBI$O=5OB7+q/Js!QW0KP$bFT?7I6k%PNIZ&<+Ik-*/FL4t9#5M>Nl-[LA[PpOP]8CZf:#Y^_6#Ks4:XYl/<5OLb=3Zlr24;nSF?-BO^eHh\^HgI>XT"t?H]Kb"QS9LX\E5gQQ[RP`$UXF'L\5iIU";5j1jH/B*iT,kTDq(dW*&72t'h?f!]]f8A?I/K9s&Qp1O2+H+GCn60R(:(Gd`W).r(VE+\/hBa"RBn!T*m>gnKNc*37JI[K$tX\+Z"u0PUi?5J?eId`ettSTO>7h?2)!Dni,NY3i#9V/XU()OCat&\tZ]41dOnd(u8`Q9i.?2!u<#^:bCjS.i4VOL;'?eJ:JHVTBG1AYgLdTO=Mk74`bO-1!Dd1k9U/1K>e1%'Y1.XB>4-[#ErdrSr#IFF\UZV'"<00DABX,,]4@+MH^h6XmY4M)\]\!9u9]FXY+Uo\=U>3'D;Gqtd4We[tT3;eq&8+b%\,Cp1-Vjcm8rbk9l57>EK\0:a*!O\+o_8h1dW%>jVCpbUmj+Ve*"UYWl17j$$r7Y#V"$i[MTO5LO2ra0f+C0b4i4G`TNlA+VK*PF/o"!:_%hYg>i+jtmFKqlE*l90mJ>L\*W*pPT1ra-*soadbgL`,HdYd'?+S0]Do"-W$l#O.G11N.ojm2q3<_9M\c+RsHHp`EEX&LcnNK'h(7WTAijNOb>69>O8F2Tc#<`05ufHi`=6Z>M[?%i`;&KeU?4&DABW1M-F9F*6>FIG?;ieVIGKXl>H/C(Q1CDpIi,@a6[ogQSK>4a!OJkf,P^09_GlDc:3cqu<2!ETY'*ugNb7*lI)J_221%XiiGX:WoC^hYFKX'CjU0B?qI#E"S7Hf;@R@OTY.?;je`D[Jtlc$M!;]EBi*m-s7q'$jq1B1.-T!Sd@qi.34br=:A'=Wj'`NA-#GB'Ygi`:8CX-XF-]#:^/->jR-H6dAC[u+CP7,080eW8HADKR&1H@Y"nXmY4MEN;RaC6H*WA-(^kpMm7ceZFAYbPmU1=FaMC]Hu_'YML4FVWA0.1$;fO`eThXZ@Os^9EZ[`DXf^$kNAoO(!a"[R2gI/eV^+Pgd8(COLCob0Q%S4S&tqiVl2tc'^&EY8B#N-km8D`4t#HA%I]7$`.>8RC101oEJVt)gh4lh%Y+V%`BRr.D;H(`5B:e!@)@fOsX&=>Bn\MOs?M%8J(FZVk.4C*21lI2rf!>#+qE#f]!/QlgKi^tZ`Fj-Rq*NCUY]&Q`AL(duHOZrWdP&s'/7AKKK.7:TTC%iZW.:uF<^Yf'-LOgnEH.W3d(ga[3L&TOj'8eJOi>OBF%gr^N3G_6Jk;/nbD>E>Q3qTq,=&9l^V*Dl(hf.cf7mV)D-P&l'qP@0:ICn]B3W(34d,m;Zb&rZObt3f6arc"Mct8caXZaW[`b[`!4k4Z-Y#[sB<;FW\)=+Dqq'MH^h6XlIY-n\57$EHu;SbVQuC7=TJ0#fA_S7LF2C*M,=lGq1Z=c^:oMC_7iF_E6_l^'/=/FuZ&59@VsGYAn-b&f,)<#e`;'DjDBQ8:i0:ApurZ[ouP^.W-!1MHe'%i`:'":?#;oX0%4_X[q4sDABX4\5h<6DT.mN]TM9,mqE,.@Ik=I9#ij$jjd7Rj">[uR0FjtB\i8(03]@(JBECdubZnT5psTH/U87,VW#qYM!>8[#_WJ(g>JZD*q1oS:e+njIBbbMSEtb7Vn[-U,DFL:[O;9c2`='%S=CCtdeub;?R$"mIEB%[uOh3sjh6I.)>PT:U0i]iZC@P`MT#Za127/Ii_lNUG,^>4FiEA6`(M-l)VSROLpeM2+*4K*Hga[478DNL!\5h>LV8TLE+E"T$.7bY#FW\*X->ms_>K*]cM-F7![u+D'Pdo6Z`2tpL"\HY7mc.@(`2tY3X!]$]\CEIW\s;G>3WQSQ(?G+Ls#W,C#Z!N'_E^4'g[X(rf+"oOGSBUDMGH-8;T93-';<[2XO;I/9k?5[R64mQZ+WBJcK5QTjXE6@9>TY!Q!:[fIkR/dGU_U0^@k11.)&A5#lMFogpR-oiLYRD,FAkZf/u$T_&4tF;0GA#0,kVP/P'e'*Wi[I@)#;SH@.I:SHNBV.,:PCH/'kYoF47sJJmTl&t\[hU*#OZnaLg.hU7K6&[I>$[UrYYh^ril8bYDW-K9tQ0,_5dlWHqnbB`dKq>C&((;BrIT'(50/Qd]kc7tI9V3-YeOr3P?Le'QVr8`0n@2P%VVLdTPsO0nK\O?g`A#%(5("O!O6=(qGhcS_0`G]8IXE1F=Lt+@KqVC`V0Ib["Sna?Y[c+%-])%Z-Z4'`>K*]_EN?TLga[2A6aak7i`7!1\*AXeh6dM%[u+D/X_?h+]h(:.?[QjE(mm^.EJiXLjE->kPoQlNWt#mAk$SiN]?j.=2kfFa5f-4gMTlYqOaKKdDo8/(pE1>#EC0U@[.HJ(#NR66Ld'8@J^,>ju'MhRuM/cW!`Q\$#,9_dE6'dS^EW1VV0JD%pu5K.')`s8_te2&?;(>T=FLjRu\[R!j*o.jp6cu564`C$-CZ/)&8-/gm1/QPtt^S/k-nCO+U?$9[02K*T9ji":\EK@R/h=ZN(/Ee[$Aua^8YpV?t>ECT1;f)+uPhP%EMr>.uOgOTZ*0sfNFfo[CJh(pLMW7L0':;ePs3\W"jlZ7Li9p[;3+r*?@MQ;eo^7GY*bG_V`FQq&Il3[C'N[C/@2q+]]7d)H*k-0CSeuf\>5eIMO9A;9qVd=dSMhec`T^-\?r4%lH*.k93>NaPRIp(5BnrURe^rO9:^SJka)]!L-u<)tF+1U0J"!*8L;kt^RU=Yt/YVaQE1#8-M21iOPhl#=HKLX,4bsH:#tE'@3V:8R7,>Al\mot7DKS\/.W4n\EN?^]eH9flqmb2J[8F<_>**FQl4URP=Xi?2PJjT_PrNZ\WQXu.1H`g*(R83&s"b.mR6\[,("QQIjcdjnrh+k(H7a6]-'`+*$GfjoCg:\gVT5gdVW;XjQNDZ*GB'^eLs3PSc5+N8.Q-k=/;mnSiQEN`TjbLFo!K*]_EN?V";dged't;nQ\5h=!Pm[9Lk#U8P;rUjPEN9?((%SqCeG<&dtq$-k^JGPsZs1ImD#(]"fTJgI(qC8)[+YNo'CpAD/bWJP/Yl.p)2!Fli#bE"+`@nT#uimZJDD@DT`[!Le&moG,X1"VK*`(K*`(n$&s/eRLZnff-M_@HMk7i`?D3'0jb((dn4N/`^Y-@=J7sPF9NM(aA1L""3d?g]\8%QcVZ&!Hr_-VtAq)?*f&0b.#9%Dm6<%eihU/=gG6W;G3#Y]lB0QodY'8_.)/HZ0J:#1__)5f5,fmY+L!$6m6=RTa?#TZke`"@$5hEN?TLga[3lLg/]SXl(d;Z"['J)2uo!_!..VlMC>0ehQ?]ldH+)'Gf@UWh[o;Mjn,+i;[p"5%H_"tPV+;*sE8!Ue#lZloO.<_+h*maP]NaMIQ5a`;1XqqYiX5DB#[)O\/cp*%atkWr-pIH9qt&k&6)'<18jU]<4$B`#RJRbpM6a`<)'@K6pE(dJ6!_^SABYDd1%XhVNt[6dj.#NhoR!QKX?M`!r&iSsAIUt6u6a!pl\D?=ZeSbtCHg1IP.g9e4M9C0I/Rim?R,WUF'M66FY)-B=a/pD=>K*^N-u%HdDRE^3#83##`NG-'\CDmC2'-hoC*2G9pMm5=i`:'"(J5UTMHfK!q11roms_>E-ZC\(ZVD\J82uL=+&o`YZZJfM(iq^;I>%Y)0DgSA4PO"8m*$W?8.#GhDE1rKpIg9KWS[;*_QlCs8Ck^4o@E\`MYQ7h_kc-n?hYb9i"q@CAI^8:iOkmR6;p/G.fIO9@^t(1];3Or&m_k`BVl$<>jkdR#t)jWe^C9"`u[R/))XOO'=#3i(db,30O:"J5rEYg6N6$+lJ=>`^i+a"$0K@Gt8Z+1dFjV;B[AM^a@Im8cCNa=XG(O=1\VDFKZq[rT\]c*%:b0nfM"N%dqsmOcX7`AY-&BCJmb_#A@0@5sD.*:hC4A\u&jQ9Qb>;dL"UQuc0>76MHAk_^R>INdr055.Rk$s6\MX`P7i[G?RpH7kJIQt7pLV?1^n<*FLOgrpemVHmDa[G/iGB'[nlqM"VS'^)M+NeXfCk1JT^)[OVo2]+WKC_2=,q8hif"HS&2nYl_l'8A#bf:#o3aP=Z48pE^bH"R4=BM"r*4&7Rg0jQb*MW8FpB$N4''Sd-SOKQPW#?Re'KcH7:oh787h%;EonMn#!r!+1jQn+]S6k6chDo/i?hdI4LB3J)I9*V,-X#nK^g8J8tb_a:"M9kW#V&-75-*2Y^,6[@]'+rd<;f$e?bX0NiH^G.rOS3.!mA_\,Lo7nME.l@UIV1>!1Hslf'2M#PbHSTd5>Q`11t`Z83'/<2@IKZ_gMarJMla4,oYfrcYfH,2g%]03>Q+i=V[ICQR?0;/pe1LU+cF=bq#T3-.mB!SC_Vlg:SrK>n(jt0IU4lk_W!#:=l\io=,N'Vp\\3dVY'fHVY!,(dW0eaNm(mncKYma([##J=RgZd_K`gfc$MW*N!!a;%n?9a(6(CAKJ'PLcC$%$3]=HL^K__s>:^SP/'^6h]#NO8hVbYPdQ5=j&ZVQiqkP0>Qr7%CM@#8HoRp`1b--j7RiLlLf"rGs.j&]6I:CTGFAX;%[os8u`i\6$EN?V"IG?;i't9')4^UIW3:fNT[p"p(eT)XNh!/%tC+i+7DABX<>K*`4j&U0#\5h>Lq#YTUR4#k]eV_;IQK+@m*`F1&`ZW$UB=Gc&`Tg%f\e;_)a;E&b4LC,M)?3m3YGlkFF(U(->_Jf"fQ<7e2pudnlGr3Pk7f4*]isH$C4MGK$+'nDsOXo9]:h7F&67)r0TE,6J:\ibj:YI4?HqZ`O5FmlnZZ0]M4&VJ8234pJlONd;fB.%F3@=.7B]2OK49\]5MoApa75IqUbZN]HGcn=S_dGPf9q29usP"+trS3=X]&t[Gc%^[:uZW2fY=mRHEifW40\[V**r!*6NG-L[a7+GeOE%CFfYl2,R7*$+#9SBQB]jouFFXXF16GcnZI?*d3"0G*S\mV\gu:$%jb'h@-sYEr+cjAcBP#Kb]'>0>=$p'ec3h5OEClROaZLGN0R>qT/#K$NMc)7BHbAr0/$+q"C3\Q).G00$^N\a$+A2p+6fFoJ!7$Rq*k08u;)rUP?7IU(43[@$5hEN?TLh!01EIeOS">H.`.bemm39'JXbu5^!prCKmBpd+-.]Ejm+Mt>fTPG\_XOM'5W+Y1RAX$);EH/m!Hq9L"YT%\@>Q,E+?T23r@#*i+#TF:H9#K&O]VjkdVT$!*MPB5n0L__;6qAD(@W&Hoj_S!A#X0H>o"^`H[/A$f0D'Haj+@R.E5HS5WS9'7kH-l*(N/?A#jap("EoHP><.ID@Ghs:]!i#lQV65o.4-6W-@I/dQ,urfhdH1M5[Xfc/Q0Wk*!UfIW`XtaUW9KoVnC?O'RlBXR!*_3h2W!b1933+S`io'8ZV&5I\/l5cGK>`RJ6!'Ek9,CRXdg%8@V=?Et4<6ni/-<`N`!S(<21@28T+Eb2o@-F(O=O,mg4+Sen(D_Oaiso,'O\>2[H76h:pE'Hq_OF+c\J:q^D`97WXl>:h4?FW\)=+Du)i`:'"\5a-\jbd8:'">H1>K*]_EN?V",B9bWga[3lLg,!c't9')]o_GS'?%"*ENA9mj)M+mh!,2@lW4%^_>6T$=o-fTHZS0fjgC9$R5_k4+AoQt//*3-56u0&\+/7J*8n"T&Y*$Z:6HjNJP<@9@LQUN]qh2i,faoFAfd!)*_M_^)ifcRE';&lhH/T)%8jX#YP=Eu3UCLSUce&hdkfhC3I0e1Vb"0C"]pMXpaS@Rj-fDkQ/^9k'X65@clnt1U(eFU0tVn%Ok^(glf]-35''HV,14O3p&aE$Wrf;T.mmkQVMemr?3h,u0mXJ((ZAF6m]/^O.#'GKj5/4J">Nhc.`$bK.-XPW\AE.(J`BeS+jmf"ga[1V[sAh!MHe'%i`=A=\([7[L"cAHQQ%CN+X%abbA)5;P`404,m3=;qSt.8!0V&su7K5'2a1ouocP,Fs%4[75f[q#'UqBa6CpE*n>!UcSSpmEm,?2Gb,I5/FlO>OD&[Ufd!t@18lRB.C&[DN/7uUSCpdVr$q9ochO>YXl9F('/5o>)nR[&3F;+^%2BRb*5BK3oRcYeiBghk]`4(`Xt<4Kim\F_Mmpil2XG+cqU_Kc`e58!7-K*\G__H?>uW1/Vorkc4tpL:Vu[!6f2N's8*^3If@oDj1/9,/X]emc3=1:@9!LDLtF=+-R:H_Ii>#Tn9qhZhOt.crd`PY/:U,hQDm3P%58,2e;)XWn@e"#UpWq#cXk6WO)cRii*>Ua!BC\ECe1.5Vr(n=RYfq63A%'!#oR<;VM+#IH4jG.?B"pWbUeZVR/lWOMi6VG7X-59t+bpgfZGH&H<['JR3ua801C5iV>N-[CTP%-u4K[YI)>edU7>1'EH/*Zl[^2RITCGQj3Lr(u30?K=%#!LJi>YRXl,Fi]iXeY\F/ga[1V\!m&9ga[478.cBAi`97p[u+D'YXla8i`:%Lf-+5T+D9q8hJ`[]#/(Q=\1[/+[aB=iY.>`Ag5Yp<*leGr&9%>q!J(^Dkpe7".bEY>pqD6==>&k*(irq-@p-uuSjjbhlO>Du1G@X`Ke@(P:hOjg&r4,7_8m3"X]I]b(d=8+>D(a+jl0@T-$K^i$P<[BHs3V,[X!IK$q12^/#p(DSDa?6rqiS5p>b-'T&Dof'9Jps'0XeC0?44enWs@WbQakQJEN?TLga[3LS@I*ci`:'"FU+Zt(:W"^A)5<+LF\ln@(4%OTaAUgIp!]&7HYG_E6XTXV`5[7-Pucsp>5Gn[d:T/qd\(V8W\te/KkdYQhWOW*M]VN,)1OmK&YNJ&(FjrQiktOUZ=$um$[tQ!m(tTDe'KX@_f%fuL49?Eh;hd%Xq'CK:_q?'mVo+^=to*0h1]2"r;X@4LHo#B5d823]JFb:QAb7J^5V6YXZSb'LqF6.g3eF1St5*(jG?7!6eT#%LPI_?A["?[L>8b^,8oM16gA:!E>5nG>UN9N>u00(D3_P%>G\IMMZ-XhE]dED3_P%>G\IMMZ-XhS@TT/,'Mb-a9c5&"u0AJA3p6Cr?#k4"o"q,LHdU%9eD[NZGP[(3:gY@hQh_DL!=Gic#?\;B8.@25O-H3=@CYG20aO*"#,e+FIj8R[42M2C'?]*tEC;8Im04Yno&f9'T]d7=0$=HUd(&2$$i!*&]J01$aP?@V-nK]q@1%(01b.4sIA2;ck%+l7aJ9K67pl.32K0T%/l.b?QAUUY!e4jlU!XO1a.YY5"rj&&roaZHp"[`RAQPC-&H'T&r5rH6j9AP>]Doa3QFIL;`_rkLYtQ&fCN^R$U*\5ob$8LUQPWdL'[.cHmBFYI?dNl?^lZBreU@g+$t4>-gKJlB.bUBreU@g1j`(doJ8=X0[5:[X&qAoie[eg?Ofo(29hVc[FXuY6/NRf=Pd1sX+2Y-@b^uDPk#PhB+!?7+_RPdMIqW/_Ma=EbZKth$nJ6(7.?KH>^g"6gV6-mJD0;2RH:?O;D3_P%>G\IM<`_?N\WaH_9%rQb?(&-IRC5^l/^d[6X0bm\.W(HZ_WS:+g+$qC<&neQPI>e*[ecA*X.aTaDS\s2dmGDCI9Hh>E=5D?X#d9sOZ>pbQmm\s6pr[2YpfSo4oA#m[L!"^.i/7pU&l.R"JP6?bHEHfb\fifDG_08TO2nUbBEdP"^TtDjq\\";K3)D8>0@Yr1S8E!*OlRN*Zka3<_`>qZB#fod&F&LI#/?i!eK_VTRIj=.ZmAmuYOP3,H<][dp6f.KO35lUnHiVQGBg7)ITL*?2@#Y57,65hbLLdT1(_ZrPg0D=nf]X0gDmYt`qePI/m5Uohr)3eRs>XjU727bT>/Q*s:hV6+&KD3_PU/[e5TD3D?=T![&$>_fQ"ZrPiFd@a-rqU,Dn!R`d'6",\F+UgC"o#"\h7Bjl*_8_j)IQl<8F5^aV19$cX"sjO4L>0J>-Tf`c(d$9te'+AinY2HNHI%g?Ol\LreCJ3UgDAf*,nk6DbR%PEYAM-P$(M(2*WH8.1C9t3JJOWB(H>&]Bp_(oFTBkS8O*P"^no<^<6EQbIME9dl1?"%1:QnYLr$4[5s1u3,JcYJHf+AW8!lirM./P7\D95q_UB_s_Rf,'M[cV`LV^`?'&FY`Y;DR#s)hN':8)64`b.Tk:io_,Wt\+2/UTA2h9)VE5jQ1?-B8rIH("j2uMZ-X?BMZg>MYUPg+$s)[X-.P%r&)V[+-\TYUi`kCq/3FPA>;uS5q]2cqBjP`MN"*)A\YL*uCD!^*bucpoE'G^OYm(*a9p$%j:\*la-edNG^'ihnV4f`k$c>ile6,A@G2W=FKR#KcJRK;M"uq6bL*?m##,9,;o4Ge!6`^n%b5NBhSokC!\oZA-38fi",.L,!7Bmu[LprpIgf2Wt7+Ug`8p25mLp+_s&=Y3boA&KGXIN%lLfY5$qZG:O^ZGX4Dj*=n=VljO;Fh`5TYKD)sCLKGU@`g;9]XrqEq,aUYeftfmB@h4@[fH7P*-U-VDOGd>e>c67h.+1)BoP!47E6`ZH2/RICKr2!#M/(.I4X0gEBrLUHd)=!g%]&@Cf[X+(E]'6l[JO7gdBreU@g?N8'l4n$6ZrPiFb'm,jbm\_j>MX8+8R&l!>MXC-lp.7?X/uec)XrMX.'r5ZW.@<'gu?5:KK\[\$lc>\gY`pPRj.CD`Ua#!$Z^4q"C49/_cu5)k%Fr6,k:U\G`S:0ID:7t@Q$W3n1F!'3^2$9'L?3^LFUcu,c1r'85T.A(,R$hAc0n^Irg1BTEt0FG%_t(T-j>WVpH?($Fg$2K$iRaIa"aR_9YNeH!29P3TgI'D.)U>el`IT^b)HI/d\&UVe9e@2HUgX6W,\SoV$=hr[6^5bG7Q>*E1'sH+)W!d8#b8]);k/SgnW8O3I)tpl#/=dO_r_n.E9D[E&0K==e=C$c`^)6kS9X=]S^KY68@)5&3mP2s);V2in4S@]a!6e9_F3u4gMrg>)Wn#3!AL#=s0KnWY@bYbIR[8N6E*tb+\6"hhpHUX/pc*C-$kc<_-D:(_XRE!<@69XaC>M"4,X1%HF-C/57Z*41PidjYb1"fcbu54O9;e7G@$QdT1(_ZrPiFlf[uXZrPg0D3_R+7b[,BBreVk4_^t'.sBY3PdFHE.W(HZqYIaN0Q!)`8mA-o^6,jM7G95.F\g`Vm#%@B3ot(`Q$^PQG+)uEl`e:]]L/.(%Gr'>7c2q1ZK'S6e%m+F*"j>c1R*$\^Zac"kHFN5dYIRVmE\P@Y2iF8LKcjBi@@"G4X;("&$C4(*%HAMbX80";!C'PG1pSAe_8.5.m%OiOP%*e)Z3VE>qf6ufaj)*Rht&%QSehGG.QFbGU1E7N"1%b]Oo1(T.7l7kHW\TQ!aXdhV_!phm)":SB.lj5btpFC#fK9o_a&S\:EdT1RYXrG9/gmJs?$h[nQBS;rAlmt4[Bnio'oiKl4C]uK([F6&.ZI@Vsikb3DW^jq"dYGh)1jT[t^6DoL',6Znptd!39M&Pd^V,B.4l]:F2e_kH^nVAlh=XZ!`6_mItJ\L#mBhVOlu_u`Gd'>;:69:`X151nJVlKG._D#[H'IDC=<2E%$.4l%\P=X%b5<0Pr[gBEd%./8[6\Og[=4R:rXWLkpkCG[!^CSL&+f&J5Te&Vin]SL&+f&J5Te&Vin]SL&+f&J5Te&Vin]SL&+f&J5Te&Vin]SL&+f&J5Te&Vin]SL&+f&J5Te&Vin]SL&+f&J5Te&Vin]SL&+f&J5Te&Vin]SL&+f&J5Te&Vin]SL&+f&J5Te&Vin]SL&+f&J5Te&Vin]SL&+f&J5Te&Vin]SL&+f&J5Te&Vin]SL&+f&J5Te&Vin]SL&+f&J5Te&Vin]SL&+f&J5Te&Vin]SL&+f&J5Te&Vin]SL&+f&J5Te&Vin]SL&+f&J5Te&Vin]SL&+f&J5Te&Vin]SL&+f&J5Te&Vin]SL&+f&J5Te&Vin]SL&+f&J5Te&Vin]SL&+f&J5Te&Vin]SL&+f&J5Te&Vin]SL&+f&J5Te&Vin]SL&+f&J5Te&Vin]SL&+f&J5Te&Vin]SL&+f&J5Te&Vin]SL&+f&J5Te&Vin]SL&+f&J5Te&Vin]SL&+f&J5Te&Vin]S`ORn'qO?%)K797/:<.V:?,PG)FMt:Ih)d6>_HnOdW\s(SXl5;jLVmW6g9ZRi&oZB+n?KSTM(_#hsjhsN1&,m"7o&,S`nBh.upli-I-#N<1D=t^h>RQn4j/VM5e9!(ibrm%=InU(0_6+9)#DThEi6_$jio)%BcV:r4Ih/+4REUR4:"nmr9Gt/)P]!#ik!c)JNjdo,j[43/hCM%fSR1I0cDGlTcZWeP\5S\,&)BDD1[N;;5AnA+qto;Ig?Op0e]Y>M#E*OQ>l'J][^/o]SQn,JE%(Z>)4UrD3[>a`l>D5Abk]iCoc&VBWrB@TCDs]+!2tuesK0+q7:+b6P+&rhi2ma+"j6A>rG$rmOKB9pLQ[U@-:4lo>pp*p@(qO+QI1@QH0)+UjcaImCf21%llD1OW8R'H'BW'5?mibc8S@N@7`rT8j1TLL`KP%bCciJrD8rR#/;_ZAZ\!IFMU`L*(oR&maE2KDTJRV:2=+SAWF;UYOq>,R5/mP:?bi+G_i`Wg$63]40B'Z#?P4-Tenh?ITb[R>'46:Jt;TqPh#:-l^T`JXZ_1-po>S\/_06]f>@<49^U'U$2Y\d14N*mU`1T88V_D9a/M^Bo=hhKAnq%X(:G>^p$_70$_6"ec$jLp5J0.tMb/5lj_=A*hG%r`K`/Pj@$s!;o`K#_G>hmIhWdL4i%):!&N%:Suk,Blpl?J9dgg\>.s3G/P$[17NCRmV!#8r9-@6RqlSMdKXI%8ce+=:>YX$G`N1,ia&[N03Fu/kCq2)#T?s;\+L+-G+%SFPK)`%$TDi_A+&s)tX:krUkjr")\ZL\>HXl:fDQjDZ&3t(bNM5prW9?[K?rQ*J:ild(-=Od'q4X(Or[IMA(JV0t7R?\A4bYrU\!)dtdN+K6/)KjtK1F%b=Y;E`WlZ>ZR/[m^!9+'i)F%+d2aq%u2:JrjY!VR\;dVKb>Kmrj3a;nDQ,5=n$W=ro"^.,S+c[DXk)HVl\cYlm-bP(`W+-`WNA2brZ=Q%.9&i4<+tEp^ED=E%aq1Gc30Nn4H$k^LP;*%fD7(+]iRccPX2Z,9XV^Jt7\I`-(,Z7Z1'\HaEdaJAcQP$h=#rfn]%s2[J-n.6CIh"jOSsSh"/RfJ9aj.u4f3TG%uKs3ZG:s*?s7WA:reoD8pDE/V6F9+'u.M7lWFM['VO@hjW1X&IGI0@Nt*86_pmmR^X-QIAlq6eZ:]au6ac>1-G-BreVkCS\)XK#+hE.;>iLBrb=2XjU8EUoe7PBrf8tD7*MX)r);_BrdZ/@%ZPe'ga1NuJLRE<)Hq,N^.&nIB7M/b[P/n-ZGffV!09%A_%H4QN:Gj$[EN849.C+CKC!biR(--kP4UHR8gE",n40-3?@S\mtkLGUiG[g=G%H(L32PB^s'0K?NY5;!"C5[k3=3Un1E\Aa03_oDf*EMTG6,&K2a3&G7$l?Wui<\kfLm_Q9\?/"QNdT/$L]58nC^am_7&_JVMmC[+:"L-LL(>/c5"dsrpt(qc/5FA)C@"R(]2Hc)?GJ6eK/`nC@KUHIIPT`k%3f#VUZjFh;0?lB/H.7b/Iq3`UCgYT`urVK0(+ef,aF$(`U84(gKLC%#*CX$'E:.Tf0g?MkhJJnPfZqLZXds&)`7j^Z'0$+bJ#09M-Z(`)[Rsae2"'e=eQEEZQ?!G:.\['9Nuo^BrejeHW/Y`'G@=G?Dahg8D7f*D3_PUB\_EXX0WiW@ft.[B0ApmSW^F-RC;rGdT1STp854I.3qYm]hDXYOJgW0\Dbj+G8\,sMmUhDdH190p/CK#@fL&'jd"X*LNu;9PF=`A-*Nj_9j5oY]$;W1Mn^gfuLa[ZWp$%CNi6O$Yo[''/BlMVC'0&/9mWNa0&N9F5$QHb&6d?0Hjrk>aXZZN8KbN?kbSu:i%s3%OEpJgq@WFUD?@Ec%dHD]?Q-Pdu)hsJ`"hnS(VrU+gGE!Z27U#F"A]/ET=C'1,NR[+4iFXjU6a/%8s@.W'<(g?OolO*Qqtg*CNXQaZ`uOA,8CXhL128mA-odT1;U0Q!)`H>S4->Fe)!>YSF.mpXpb->iFp[+,8B[Rsc;Q7Hg;[^n_.\XQ^s^%O5Hr2&Dhi"..i`r%(;c9?%OJAL2W]+92.FL]O^^NiQnqIkrW$pM94R@ZK`^k]n-WBX0n2dD"T'+\5_L)+9c)16lmr,t-1>VCT3IgA>qdD?V?$lRdP\9&,hG'5uiih90kK&(.5TjFPbce/hcG<@,rITd8m_VcO6Gm&k_4PT$d?T@df4*9=oYer&b[j"0!MM9'DdKbClIpH4=!?^5<4?R-lT5B\ZEi58]U@VF(@sg\8W/1b],c6/U\)BWIT6(YR@$&Er423np^a>-a<@=<;n.=sa+ZXB1OQ7!_3!u.343[JWcQaTLjM6p::l8;+r[X&qA<\nHj][Jp\Z4%]IS4nj_%)bkZK,5u9]t+a'!nl`AM?)gBS3I\%5PeUFnO?&6SI=(fA6:f>P%s`sOY':_$bGCDWQ&T"4mNI-IdeFL_qq!XoO99BU49Q1F`rr$fP%\fq(0pg1(>SbX"mtY]gu=.1B9.RQmRdsZckkTJ^l@ehfYaCZK_'C=R(8`m+Yb>n4D^Ti>N#e,Bm4n!0/'j.[h_'=bjh!ic@&l57;Vlgn=\=B&4\SGn7*Y!30jmDO`+Lp6X>uc*m\<9O#9JP5ptIWI)h8^l49DTiei6?Jg,G%lc9F\8!PZdY[cjE(>.rcC[0ABr!JBuC0=/bjWK>.8U.u@@j51J\)f?S'BQf3Brb/\1i8MdHHef.Vl_!Sf0*tnejJf"X_&*mW3$l*97NDbA^hi]Z1K3g%!F/h;G!QBFp4bZ"!cO;>Lio!86%gL,;$hf^WqD"o(G+&l]9RCiJm*YLX5\59)K]ELe$UW1Y@QW]Xes:ROSQg)h7Zm,89pk`1E&e]&?uo!$\.XgT,P^FeJ%EaZq\iK;D\Fe2W';:QE9.gUIJ#gQ!GdL$+6Yi>eLc:&4n>j0)D=p.VXg[fM"+F=?(P[3XgpqB_28ST@Z[fAB?Dt-Q[`&WuT%(uKb<5D_0Es`_%NhFc+oikfn,1IRPB5a@.?34QFK-mhfU'GQk<;$@OlEL[^/FKu@6418Bjdbe]k8=LldB*\BGp_IIo52h&H`fL(.rIWGMH(0%E:N'=)8T3@>2[EdI96J^llG8#f^e@,i.Pididr8iV?F__Ocdja.gI*T]S\?uu[qtVDEgo?l6iQ;Z_8Bf2BTq1#toJ4JHaMgn;oJ0M#'Sb&het5uIZ$1OPB$_0FdI44S0Z$!%[2@s3qZR0qK0d8f4Fi2h[YK<_)1S1/*cd0D<;BQ9o#e*oEOQId5S#n1#5MDC([?>B"_J_/nW4QJG7<3Ca4+.-%J8T*@_gFZ`]R3KE(XSQhF#rRAKL[`='c0\==LcP_>-B[ho\<0lV1D8k)pbmoP-BIGMh^qh3/LCLiZLp!s-P#?O&$8Bdb"X<]N+8al!khANBT8m@jL[Rsc[PI=(fh359.`JN&EO$hXdA_JVNQ*s:h]cqP.!CtD=o)iQ+"93[dlA=4cK>Vn,[H*^aa>;?+me(rX,Tj-4JbR6ar*ajbfC'cVoSL@$&=.)u_>aAKG<"n;o.YaEkAF]XNL@LJ>UeJ[V;hSTqr,M26m$Bm<$Rb;OU5LBBndXB[kk#(o0M$m'G3n8JqSQ[+D'b<1j'!r/YNQF.HZf/4TFPZo!cetB.djXKPi29]X34:E0LTrkidcd!WL@a.EeL+d.G"u6/,C+CA>p3t/_j6.K9abU8jiB.WAW>>be/t;3D[G2tKoh\-u&RG0*3f1D$c\uKt"m>+a&p)5.&_T>-M"J@1H7o)oXF"o!XHG_`F\:BQPdJua[+-\TG\IMepk51]4;cAnn28Ua2C(@k$GFkTddXM]:\2al*3),KOktpt!I0OW\VMP&m.JE0GT5G_El^TPp15:/M71965*O/A*:l8HXufjEQP@J;m#4;A%XZZbLPC$>%s^.9OSJ1_#R1fF*=l!U%YL&IDoY4e_;M"3RDD6!%N\O0*=i[_/J#m@XO>G83*"!6+1-]0aW7ND3:YB)&ejtXAN7[8_u+OO3bU&"BNLVO>T&"]@gBK:*uYRRiFT_#9XGPN[SOs=T`MQ/(6Fp$7rAc#TGWu4g`Ujrku31NB$([l>GF3OiYIRnE1XmabFUd25)aHV)7ps#L6LZS,(50`e[+1q6[^o+9V6/0HQYNR0HN*[@8`cliLnAs>ee'.S1'W0,L!kH>pfjp[GfW6J&H=$MTF3/`a$]2qT)r^4lrgEE1q6s)h(4#]g?h!B20,DaO>LkE*=kBLT]q1SH?1KMp]e>h+D:FafS2$J3&LUOnkcp\I=p34Q4I\oUSqH9=?F"1o1Z,k552LNB4`$cbfE3aiCOGg+$-UOs>D+OR!"Q'3&dT39AXjU8EUoi'GD^'%`[^p)g]siU!dT39AXmXVFe*`ZrPiF[1NRVX0gDmUodt#XZgF=M:5L<$Vai2:YKPYS@6!PBreVk4_^t(eP4=nd7qB[(l%6.+F.=YGqkicfdQuTlsCUBbX5^W[6ZHH2WuZD_4fbAZ,)N0+_'jJ/%5!-a^"OPQ=7g$%'hs&E9I?j)HJFJEVIEs^u-SRVb`_Pq##1@dL7KtQjtD8IYpG.$lc!FkfQEbcpP\;_[GWEA=(+f5'm:^TL17?I:."RDe4QM[@X>o1(U?>M-]41*d[4eq$8(8cn>[)_\iT[I/ee%E5_DiEG5.L/.Xq^E8G?-/9_G$k/n2cW0aROVSf^/`HWL7&0>fP#8]#bM]4>[an:JoBm:+qIh$;rn4^2(HS3^tO"T4QZj+h):^d?PGY!3s6$=1m(XN$sOMcn6>OE!o.>$oNof!]\fn4r[F;UEVs+po>fc[hM:?r@Ooblq<0[=-FK>G\I;T5Sjoi@'EH>Tqbn/T9WrA(1F=R"hme@*nH[mULQ&#Su>$%23S,ST]/pY+Y-C3=]H4c/Mf\RGDuZ:ce'5&%*6:FKXTgY;aM)qOHALl\NmE1UM:!H`@RXbg(XId5glG^1%,r'$AY8o)G_\F'cU>YL9bS=/a>^3Q5eT_TLM=Z%k/a%8U?Mq^LW>cI)V.muK'eLsm%gaY8R&l%>G\Hd.rCQ[H;cMZ[X(au.rBFo=PE$mD3_P5Uoi'GBreU@g?LQDkW\i&U6hM=fAOrONH^jkE(J/_8=:modqmXAqQ$X%!pnD5.eroSUZ3=a"]ie@E1*QF7K,!@/8sCO2&M+)O(qEL8>HVjYMK(UR)QV"@=BR+;;Zt?&K^6#D5)Z3lHW@deO7HhdCd_Mb7!:TI1P4C5IBJ]=Bi=XI/]fC=2&2'r\ARS="q^\DdSV$q\D7^m-q[rC;I$u$'+D7AuIIK1EF+snc4bp*koHSFJ\kMi0e7/_Gm&'K)U3YTTVk4hh@a0mr?72m@W>;c6\Si%in:O58_3M=5<9i'OY,m1!`p,.)D]<(CDHCG3gAq\ACSndE@]2AIBU8(^fpq,XhC1<,b7QIEJ_5/KQ%HH.ek:%aN\!oX*-tBreU@g<-tSER*YdC#>G\IM<]EkYdoL[,X0bm\.W(HZHF#iMQ*u",[e_ZgZ0X3;[eagol4n$6lUbKE`s.'nUV3$k'cggdBR)J*/X%QMlX(:oi;;b=P*]4WJ(_E6B4^^uaTRIS)D,G8b6I.ql+EK>F*bB!lnfD+2VY.kMh5O`9%u1"!:&WI(AE>]B%f\Aab*_dRMVP601jr3%d/(Z]&M6n5ch\O,OEamLAN(t8?2[D4QD\q^mjHX`p&_=m@D#<8PKmgLE\.IC6\M.skeTpiDN:YP(dD=p2IBreVkCR3FMBrf9%D=oZ$Q*s:hV6/T.GLBN+X0e-T9O#2$>C@&&93[t[E+h9`Vld,r0Ptq>C!p$:06N/o]&+ifJp:iD,$A8+=l,L:A&t!jbr.DHR"n+PhGr%sd\ia$ZS"Y-?hGf->gS,,!r?F2nopfVBD!ThSm%R?-$aR-)A\cQV!bM&hX3r3#\=V8"B/1mma-Z#I-;h!f+EZk'X5e2n`J`.:'n]J4Zp;[G;:AKGm5bIqu/1&aWjCNuLoV7(C`HIO[.\])mH33hWq5p0J&'+5U;\,gu%R3FVA`>+CXH#1"5=QTs+bDnk!,]BdZm)0!Je!8YPZO3^Rg`eIe=:bH*_MN+IIotQ_DB_2N-h<2uKH\eC?/ZRrZ%_#)kQr[GnT_jI0,dE!3jCeSdr1'`58[?->dlgBrdS7X5h>KD=sQtXj27Vd_2o_XmXVgcX`9%rR3LG%C%CYJ&+D=rdneQ:1"a*Tg`oj6A;K@p",eLA_t[+-U$X0%,!Q&U`bl)sXn7dgo.'=YKfS_+/&L-$HnNe\IaQ&#:oqI#(_6Qf)AT*I)'h7'=*H^sIcJqkoGq"'m,b!fEH%^!Q;N/&#,6ANJrgp+c!_*]E@.m6!o3rH[FdgWcl-s)3`L)rJ<+^4#/*ra[KOGCW)*Qi[2*q$\kYS9o4T,"ZJTmc:dTf.#-'*s_43,`@i0#IUt%1aK;nft?3H$:1c8oN&"^m%fS?e"\;L:Vfc3@U6"DkF"fJ*mW+p::e'gL!L%F0k3T#KU4&6#C_YjUlLkosB:DL!^&(V$>IiSg],RCa6)/48P.;]*^U:LS5&pD88_@a\rQ[g?M&O>Ieg#Qe8bO`PM?>d_s;s7W8ru9H3%.mIO"6A5^!X0bm\.W';d:"nlP86_pmdT.DRBreU@g+$s)[X'b@doI93R'o%%D)IZO[X&qAAplfsdk2i.E?DqIZH^/PQ^4ekV2T,$*)Vj7FB&5eedR3@\0QZ^XbOuI%)hHhfM$`ZV6.-16gtsjMR!.X%D%*_)%r!_BR>4.>HFr^[?mI^krUFPUI._^(6QWELg(jEHCL:*;shr(33=J$)$RET5BVKC,c)][AbA\Do4cU:tLO8\$h$4^(uTIs=$KB2T:n[WK0>S\3g#nMfWGGm_G^@p5+T4A2@f./bQ[CaP/lDI+3laXoW@t!ip[+-\TuH+iD=B502cZ+hZmc%pLWj+)0LZ9WR,$+#$J2'i9PgP(*ICJ=<4mLA#&LVH$p5SL7e^gt6o1mjdcgLBJ;8lHbX-`#3EnW![oigg'-#Icsg+$r^:YKROMmV#;&(=R'Bra0L!a!fNGA4+bQ(1WSc!WPKFir0JX'r+/ggXpG3=Q@kJ$F<-0Sn$l*"q^b838U8DWRS<$6@i/I>b:lqV.]*6OSMtHFua2I!YaQLV1U>o8V>;6guH%E)7t^n-sR70,A!2_9PaEY30*Q*FXT=)qZ%H#YXo"OL(-PHK]7P6%A'idmGB%WoGqmaF8Ho`&f$o+J2>W-6E0'_MK@J$CjFc*rNfK`0F+LaG&?Bm^=q@rN6Zss#\j>9>p9DFU>`b>`6hJ)k3dB:bn7f9F;(c&@PDbuXIG\LHe:$e;mNr`O8GnYZU&pAY6P9$IljO2HH19LQIEQ3,Xjaos8n.^,p`Z!:fo[,(5I)-]^s5_,gkJQtZe,`)0ZL@@0oHct8)!6SdT1!4qc;E#D=p.jB\I4pd+r5bBrgP_9O#2o[X(Br.W(HZ8mBQEJ>B;B8R%anls"2)[+,7ETkUR\6[+_'VQI#q0Q$JXg?KDeX0bm\.W%&\!g9uQjdBd44%;?p>JnG]$pSe.4.M'M#F7>m4WD&!LI86'"N6QH3fVH3;1s#D0rO!fSCNu:!4ZS36/dR0>1a#n9OQtSRhYRDLdl@J"H%^C1Hb>A%Cn;rDmp0k>4bLlAnd#\Ha4,J/D6jc)ZLKre0`Sf([6)";M3r$A4FE6<(bK^g2qVDh%Jk>!Tu38;@E*@MDhXqKL_((B]iXdhCn-n"BpP:Ds&R-0V6kbHjA(2g^]+LalQGl__Z$;]opC5e,b2,@Bd9OOZD2`lOD,q&r$]Z&]CEf\?sfZUodB0)CfUs,&R!TUohpg3+O+#9A4.06a!5ema>.>86_pmmR^WZXkj2HdoNBBX\K`P.W+i&D=q#,Xj25PA0496g1o)(Y,&2fdT3PB>G\Ii8R&$nh?9.nS;l25:#sra"=1!LF?k]Qe3Ad-SZ;.8e4Ke&U6ji]>)u"0([H515@E82T.>u%.V=j03Cu_.GuudXUm43Et:uI'XDA`LFO*RG:-@ZEpf8HA;r>_bSs'R(Jd9)$K$TqgYg4:P+P?[o$QAlMh'J%VUp?on7r="LUAO+]#$Ko?e^TiMg`hKK:h"8@Oq)AkSQn"TmEft9@YAfV0!Oq2=$+oRJF%!N;pn]\X*`8qhb77NXY_P6HJ7XM_<82U.;>iieNIWIZrPg0D3_R+:_,_HdoL1`[$G\Ii8R(#IXjU5Xd\O"n8*rFLE7KTZX+]A;oo/J\jkZ,)4!%l#OG?4#E7ARA_dTE%n^'@&)()F(e*dq(+A:2Qau>0$%'m[[GO-J[YpKqCXkYusa0f=&F6V8I*ZGU,L:(UU^]K)HOQMX[N][OWI593^0H_S+.])b(fqB0lpI''@DtJ[;5';+HLL.'P`WcYYM*-RA*s$P":CrR/A.D\>nmtbP7sj$Gm_Q`W.ljE->ihXknC^=UR!Li2kSSXO>K.a(,QbO#6fVU-_5Gga#TjS+AhNq<@#=5VEXDE\27+4H@#=]IN)%S,9;.kfZ5YdLW^ZEs(-jLT0_kURg!GA#C?3BV4*(hTQ@6i4ZA,3+Q:G#&ZQo"D00#/,T=r>DM=BYcX2J0e[e!P-"(Y23SW^EB-#Idk[X(BrlBJYUg?S3">Fgqc\k?8@,&NURH>Sd9>G\IMJ6=LD09q-VlfC8]>DgT!mZG$2H"*6A)+KBGPL]$(fTS$_sU7T=c5FbQ1V&%1aDL6;Z5D01a!s4jqt*=.!#UknH0<7Tg^piRXnB>iBA]A\IGKYd8^?XgV]n)I!+F(>SIcjpLe@aba6Y7Uob[>$6u$F;0uF\:@;D08Y..W'<(g?S#?l1R\Q4TlH[`&;>1ZW0b)*UVsqeL<*pD07astbX[EsN-:257%L0I4h(_G=AAr+$qIO^@DI1]Ogl:'D4_;Z$$MDH-EKsW-KDnkmhWH84a,QF;irCpG^F"hnV"&Xp_&iGImjgOhV\"cLpu1A.*?0Aa*":e`,Q+*!h9JCDG8qP1?KRr"EQ',m1far9IA[i+js/3]o$H9d^X>InU-g!-(GHlrr6Sf[!ll8e"+(\_>iie7V]iVoNPB)Lg+jN+b"`INX:2eT*:4J&r"/qX).5Ch2SZ!:\1VOM6dDRl6-j3QZH)UV#@tVV@4S15.GXiuQg1o*SZrPg0D3_PURC;rGdT39-4`,=6g+$r^:YI:8oiaEfFl.1T0R0"@^;UiUBV\4(D0hSX8mA-odT/$Mgr`"8+#]e4SD'@.QR@SNDO;k23",e/!Or!gm6b9C,5g,>s1#k0=KDtF4D67nluXjfO>P9a>7I3)8!;>1K<+uk'<]\#*l^`#`Wkt,MstdY5;XK;CC>h/OS`/f56(.^3&$Anb[msPpaW+EDA2HLVLI[lKo!Z`inU9*mP!kE),*H^TX+O'LUb<[*IVp\dq_qGXfdFGdoNBVXL-N9[+,82@qi!M*Y&V/8R!5.0Pts![X(Br.W'<(g?L;-o`e[;[+/I9l@Y'MF@"XG7G@$X_6LAt=UtallD1PBHC2.P93](RD3_Q@-Z+!m[X&%Y@+so6WO7ur,VY0[$9X0"Xe1`tp`[76\F$!/2"q_\R4CG].$i>,.I[PTj.Qp&`A)lpF"YQl*IJn@*t#H3.[(k`G7<1m2m89jg!7jY%1`abA(qpgE,*TiMJMLDdTpDm%cdAHL[!2RFb(>^!f()M'Ce(N-Jg3jGaPo>7Z^d*"L[m?qW4`T+%I:I"WS'*!Z.\lug5!)4>:AgtEWg[,DS3!!d"*lsE)!@]oLh@&UBm#uf0Xi/+gh7eeqZNCau,_"Nf6XgHV/CcQ?Tf$;OVNO75=%u1l4T@6hR4\T)9V6)pPg?N8'.W)"cUoi'G2h=VUVQJ9IW^YVkD06L?oP)WURGiR(<^.\/0t-FQ"E/\:dYSK;`^>6qr(7LuD9U0SZOlZ?pI!W)L2Vi&=r:Ggog6.o@bO0j%Zq0"hXQ]XcUBr9PWjJISWPU:G6fpFJYO7G0C]OKqacFi3+*RcoQQdq"tYJ`bJPbA]4$=Eh$/YQ4!"n.eG\Ii)+O)>8R(#ARkibk>KsYidT1"M-#JpU8mC,AVq"fh5Z7eE7%,Q7?t%Y.W(HZ8mA-omR^WZXmSbb]p#ls>G\IMJ66/8mA-odT.Fodkbi`b0t)UpPpJm+cWP?T'LfmTD%uUi:r^EXBIHF#L[\bO>Q[XfmScTboTc9J%'h[LoBk,G0+X44h,fZ%gdIUa==scrWq6#_oA)o`5A.`8']BpU*_rd(q^TJjWD[]6_DFBUq*QX2EQehQanm8K$,9cp+?$NjWsB]:p4M#>&-rXjU6;^Se1T'Zs$P]guA(XjU6aX&l+!dT1(_VtH-.BreVkLDJ#IC7;SWRC5^lV6/0HBe+=Mg?Pd2BrdS7Wt4bp[$;GB?B+Z^c[-"?AU$Y9.t^.NEi5"R>J.$*&Up.'2L'9R#?]uuJ:N-BgkC?p9'Uk<olMhn*h[)uQC`4WK@;_$g,MoBXa^fY)CEE6AXo5:TW.R/!)S6/pk%/>AL^IeI[8D**L#doNBBXj5r"Z(87%g?Q+Cm7XjU6aX0bm\.W(HZ8mA-oDYOZa'[R6H>eitKQ!o9S:g^InV`Ef]n&dhaL[O9?6RT=d0u("2m(a`b8Ah;YeC5O#0mK$&4L@E2Ii`cpS&8c)><.[MeTRS]=FhEBZA(^g^u7/S;;TBA7cP(C,eHk336cD1dIm'rjMBuR#D7f5X+Q0q1-6OdE:ArBq@4QUn?TAn2eSM(mM*P,6U_D<&dE'f0.ofUfOh$XGKS:U,drJp*OGqg[)T#d3tpLQm$Qu,YQEHE8(9Us"RDEag-]X+:THj#Qsg0f.dAi1'?8QGnQ3]V?Td*%aHG.T+9E^kgR5A:),]Fd4)kiLj;ck""ZS`FA&bk$QMQgfGf$cWgE4l=7+gE[%j+VP6hnUlUbTPpP*d;dRk1`4\arkRPI>d_DB\"3g?L5'X+qg7Fg6^4:KsC_0PtqJWgpN/93Zhk_mEFtl8@!jB;(-geL>45Qff,.Y,&2FP.#ZBdT.028G9F@=V&t^B;*I^X1Pah#u*"3nZOBb#X(tRl*K3?"4Dc])N38Lgf"[a5l#(n2p^`M-BB+42ZH;rQ=3q5u0T%#YXGW>I\["apN!IKX\]r[PT8/gP7M=HZP-W\SQh\7b8=i9/&[Qg&c2`UL,a2/;R(*hlZ>*ZdjkMb4er^Cu]4">2Yp18]DjB^_Np4W)ii!KL_dhj-AGfKOd]/fE60Mdg(e9#AL%!%5BE.bm_H,Fgqc3m2Tn<]cE/Kc"9L@6GTNGr`:'\(\aYMX>WrYWmbq3t6>Rk?E4FSn'Sdol?Ll.u+`Zno/97BB%m#B?Dnk#?O.\*pt;f3EH^i*=ga?RWmu3S^M_.H*BE4R9.sfa$XpH0o%["XBq7DFN9BWYq$^goMAU!_rf=%g1cinL0>!eaQ5(jmgQY@NLcBm8].]T=fW$HL+BaUj_!J/T,q5Qi2*PN8R($d)=k\QQG*[X&5-4(3qlEYoU!CXWE(f?;@hJj\Xr(*i?(%.Xs9;gdum7XrR@$*3q@Wn'H\KV=4'I@!Pj1YH7V]LZVEC%W-Gn]e6AMNZ3U\=#0F4TroAic(P`Wdk!Qh[2?'..r@/ql`sc5(9XI8*eJ%!Xl?Hj=>ufXcelWr(ha7H7(b+IXj3*VnLkpkCLdRu?cB>VnLkpkCLdRu?cB>VnLkpkCLdRu?cB>VnLkpkCLdRu?cB>VnLkpkCLdRu?cB>VnLkpkCLdRu?cB>VnLkpkCLdRu?cB>VnLkpkCLdRu?cB>VnLkpkCLdRu?cB>VnLkpkCLdRu?cB>VnLkpkCLdRu?cB>VnLkpkCLdRu?cB>VnLkpkCLdRu?cB>VnLkpkCLdRu?cB>VnLkpkCLdRu?cB>VnLkpkCLdRu?cB>VnLkpkCLdRu?cB>VnLkpkCLdRu?cLPr.l5SW*s8L?-lFiWFVJe*^8`a/j.iS$R(LLGjZJJmV3otQ;\FSGf&J5TenXL_&s.72j/Y6!I+_m*!O74$BZrKL^6psFJ7bT>/'bM#i&Jl=A+kIf?s,9e\=-O:K[[n9jn6psF2`*6!j.W#n4&J5TefCQ8r=CqJ6q"tiUoi'G&J5Te&TKsJX#&JpT.dp_pd^7W[n'^l6psF2`!H[UeUP%&*u9?9nUh4F#@[g]Jm_/S779O37)VTUZrPg0+sJ3T,-E;1orW_Wq#/05([io(Fn+/(Va'j,pO?nXLkpkCM"phu^NTYO%K;Zh3mh!CHiNgV(4TocSVp8sO<02ij9^DA$%o0J>=CqJ6q"st:>.17'bM#i&JC:/T)iL=oI/;-Z2Fu&jD)cW77B(4.GemQ\Z8&h4N4G#l&=rGOl"uDX_$OiV0W7Tou`ilJYf<;jecelA7qhpBI^A-R(s1L[D+@_G?#Sn[Zg?N@$%K2m7\)-&_m*=P0e=\^R%)2*5S`ULm5.BGqK,Mm@#2`=2B,9e*GEO[tQ+"inP8`5Dh&6-X)UtXG_7/6ndl`5uk8'Ru0S:7ei*0scbX0#B:,7:b[+1)RT.KtTnc%P(`TJ&P[.s8(J)^Irb?t1,qnI@4q6g+70<`.JIciZXs1\-NDr1Nmp,g$c/'"uH%JIigCtcQnIqi%m4b&_m.l_RHt)W\/SHkFVu3_7s68N-?Mk%dIrFlG/H5$mGZ+Mmn^JUK`5dS_T8;Y7+Z_nN@6B*(Tg$:WEWCZ@A3`O*.hEUi&&\bE"Mo\C6.D^4dT-t+R:;YAGUcmH,+]`fX0bkp>XPbj6p)3d57u5$[+27[^:F$*$bg/mmiDH%ih%cNH1@>-+sJ3T,3$un+=BQ)BIA`dYU@pJpdYf:&)KZZrPg0+sJ3Tin9L'8m=_P6psG]oq\^%?7p2Lh_O=eL0n"&WoPNDhm<+8(]V\f$VMKmD\gI/tYdJ=OHgdkYGXWlaCMJXQsWG)6eG]'=ZB)FB,+2$TgO88/$]*j'6R;XAA"3S84a_r^$AOTeq`tuC/8^%.)Lj1!=Lj3Zq,3%WLlVGI*KqOtjT"ppoTAUeOJ3Z@T+lt7r_%0nbpB"(VC8MZ[@&g>79;^r25J!0E0i4%K;h/nN?RUn^JUK`5dS_T87+f5s&L;JN]\j_*;r?JUh8r6m*uk)EX)h$'Vei>=H1>'\c$o;pkFTnSCd$V6(s$!fCh=ii-ViM0QJ)X_',ipnT(@i+n*t]_KAJNUZTE5G1].rU,9WHr'7Z`@j_L6psG]Z\5"-nNKsep_[3D/=n).F^Kg8;j<#pd0tsFXNQ'Mgq[rABpmQGBO!gA`Tg$:WEWCZ@A3`O*.hEU\VlS6HBrd'!Mdi03GUcmH,+_#5X0\V(,2t/m2A,IY[/NHUJ'qAe$mNkbZ$[na?O<1hO2W206psF2`*8-EI-W-K=XkMnHN#!i5=F3T+sJ3T,'HL]c(qHc+sJ3T@Y_>@-Gr\3bH;laAcbLkpkCLk2q``OMd,qWe]1n;)mVLkp9c>T)hqW/7EQ4HE"d.O$&\,3!**g?OEgXWer5+sK4ZUog4!4,k*i&J5TeD_Fng3Bf&XF[&Aa6psG]_t) +endstream +endobj +22 0 obj +<< /Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595 842 ] +/Resources 3 0 R +/Contents 20 0 R +/Annots 23 0 R +>> +endobj +23 0 obj +[ +24 0 R +25 0 R +26 0 R +27 0 R +] +endobj +24 0 obj +<< /Type /Annot +/Subtype /Link +/Rect [ 428.885 469.692 448.388 460.692 ] +/C [ 0 0 0 ] +/Border [ 0 0 0 ] +/A << /URI (http://xml.apache.org/batik) +/S /URI >> +/H /I +>> +endobj +25 0 obj +<< /Type /Annot +/Subtype /Link +/Rect [ 487.0 373.392 514.999 364.392 ] +/C [ 0 0 0 ] +/Border [ 0 0 0 ] +/A << /URI (http://cocoon.apache.org) +/S /URI >> +/H /I +>> +endobj +26 0 obj +<< /Type /Annot +/Subtype /Link +/Rect [ 196.366 258.192 227.353 249.192 ] +/C [ 0 0 0 ] +/Border [ 0 0 0 ] +/A << /URI (http://abj.dk/dxf2calc) +/S /URI >> +/H /I +>> +endobj +27 0 obj +<< /Type /Annot +/Subtype /Link +/Rect [ 208.549 177.192 228.052 168.192 ] +/C [ 0 0 0 ] +/Border [ 0 0 0 ] +/A << /URI (http://xmlgraphics.apache.org/batik) +/S /URI >> +/H /I +>> +endobj +28 0 obj +<< /Length 1857 /Filter [ /ASCII85Decode /FlateDecode ] + >> +stream +Gau0D=`<%S&:XAW&H%am2'Z!(WBMl[VT6,lTSpC.@'_7`S$nUIW['[r^Yb/&R\XcQTdLM]>>oKO*_6;s3VMLH%l.SV`+h'K.&rC*&^No2f:Y?hO);=Lk(F.7CNi`0W6?LuH'\P;[3CGQ`ORIV9LbSTHL8b5nlk9g/G^PMcI5"1ms+#mZ"Mot0mH$pgEMT(mk9"@5rZEaE7=bfh;IlN_F^?t<'C%q=YMNi:S7f\](4%N+Cl(hJes\'W,'^N%UZFTTF'Bco'VE\\_V"WR?I)XUYA6uR>hGt81Jmh6k!@W0-H(2\UZu#LVkmG=/t+oTca9&]G@qcg-rTJt0I25(#g>s@&8+Yc,=aoX.ClEW;9CK],fpusK,$&kV(nf!A*Mm:bk62uDiBP-I'!_>?THCjU>3]H_;Hl'"\jCFE&1?kQ9s-1W^WrP].73qG"O9UEp;pbp*`4(jP)SBGkGZ%U!F4074>AfhH_WJ^7LA!_,kn9@,Ujr8Ok&33Q[lQqhi;&N7I-Q;)Z;4h2.)Q0m'V`[d`:^)KqO[$MNOg00epnX2$iC7tc+DJH?KIs>G2JY2\II7+H#Rt8l&uZe'"/sh,#;>Tkt`%$MDcNqq;5H^@hecjKl2WB!$Bo`Pica\Bq@@=N*2l](H*ehCms,>T>1;?1DXsSONj6bYN"Ue8Y1G!9W2fS4Nk(M9kt_p9TsI?O5-Vk0X;ShJ+;#D5CV%*&]@5Z,0nEM_TMJTXA\'b*'eRBRch]G&D7iY\XAL2i"/)6_eSge`/*1d1giLeHk.GA;1PL(Qr=@TMo&o\YbV!`BSZZP;WiD@iECfS4Z@IUpc=nH7#<0JE93T@?`mm+VC4:KN=n@IC0Fku,gHgr<1B^j2Vk,'UN&s/]mG2T)'F]W177KjZVCF!oRu7$QSE;72UC1K?=AIl4iC1Hm]MQ7;p21MaZ'L9sV%JbO%+1'535KWoAo*"d>Pc5hg$E!p\C5D4`B>_7p0X.=Q9F&D"r=MTBA^Jf4-NO=b4mGKZ:]^Ylnb^pQLUmt5j3$aNFVd*XaEGO>T$#gW.6*i&rAYd9"RRHE#Jji)9WOTp3Gj#!!=Wf[o.hCc7@pe'#R6"JhXM_Q=Pj@k[hqt$DbA$'an3Wh%;Dnq:"([X2XiP'uTb6j$Y:\1V3!5O6Aj=7h4^\Kj.Q$k0$o"R;h[;,qR/EVtmm"HK"/V2rpHT$7*?A1:#)F\HUr6h(C>M^=D>-k;k?p-bj@aV.+nW8pK7>RP3A#8:)t^MBNV@=,2Y+K5\7in,=tBH#*c~> +endstream +endobj +29 0 obj +<> +stream +Gb"-Vfh^+1j8O&u!DblLa9)r8k^eSI8Rk(X$mC986QjFTYT>p-lc&<"N:8Q$o9Qh\X)#HJS<)ht\s)Pc%O9l^_,JR$duqd0JiL]K\N.c5:&M0ub&?N%rj]:"gCG/.9^q+Cg?b`Y`4P]ko+bq:.`ta]SGLXt=NA`Y`3E0ud=S\?0?[[hWD30ub&?/4SDqZ-t>)RI$f$bcf,9o4mhM`Y`3E0ui))[.!M7Rt'fX:m5<7qb+Q0hY']jPIR_3@uN.^(h5@YgF@C%56bIV5TZ=gJ@N3RT%-^roc1Lc=A=5qgR`noCuRs+H_?G3UFDtVYMIl.J\5Z!Y1N%Mnhc*A\9fXoNO9lKnH0uj2Cn`p]qmqh8`]6YF"hUnm?RKI:IW6(]%KUNWjBW1/MPEEh$`GNTHHP,/i0ZMsMr;+=`3ubXD[hWE>%H;^R`n9%'?[io>BB-Fh2XM72e^Y/;P=ke#89Nqn%q"9EIG;a?>WG.Dr"_Blc])JE"#0Q5C/\dS6bSXiKrHfL8LqIM4+p;E9@2PV]%cQTfPRgeZ*0V^W6N0M=@R=RnZk(SK3lYYde.:+$e%Pt=f4%A;j.\cgaVQ9HKj^4]RM\gXV?rX:(k4`P&c(@Q]J-P\3tV"m>LT)@Os>JDY@V[9iA?J$rt[H*e)_0=Q=D;gtP@4c+PMiUIIQq1XjFjT"7Pq'SaW9;W23Fi`'0/2]T?(fBlm%2Lg0hX831DC`^DA*dKYgPXaCgPXaCgPXaC0ub&?Z]EjugPXaCgPXbN^#)jFN`k%GHtf[8bA-&q:a*O:#P*Edtn?oDq-[g4eM;2;_o"unDICjXte0oVX@BdLAFV@F4(RRhu@G@1V7lN4qH&S-RC_aYqKC!G)N"LT;e:nB`r8?EG_\+>+ba<5+s=Oc7=od92!$)7_U_l=CN2JDTl(#kDU7GRnTr9<4RWpHD57bJj&86PRj3^SHR!Qa$aVRC[#a5M%e=QnibB(-HiKMbE:%NWWD\6c0id"?-72OI@d3#(GJ$ag2@6>f/rjpUmg>>VMfCKj/Ij*1O51BF4:(YK9f,SgfsmS>K``5SoCl5:q*g=7VZchK82%TO]mGD/K1b6"ed6Rek#P3#H_"QHFF#\>0]ELCGFU[3=cWB>_!(RMW"$\Z=k::QU^SN\HLDp^=RBk6et`nBlAj.okmV`pKGm/91o<@]dpIuS:Q#=7?[R?mp:MnYC%4p1gL+Si7=2<:d7Clh0`nLHR>2I]7nY>9(uMr$D@(R-\m:Ec"EiY_HfahdNmU`3X:kXgs)/mTVY5ihf;19K\!c5iEhGhg3a7q\"&2bG>>sP];MDc"o"H]c:ZOlBU.(!0g=lOoC5@GapCn:k<\]2\CW")hsQfB`=NNk@EOl*jnP*JOl#<3eaqfV26t^"5iO33S0ufS-DC]TTDC]TTDC]TT`Y`3Ebs$"qDC]TTDC]V*pM='5mq&T'A8%6faLYpVAH1^hAW/@`rr$O`CHU_.M)msL:,b!ffPJ?\42i"j;=,7A,l53XgkLCXgkLCXgkJM@uN-#qm`cc#?-1G;)jI=?NdO@j:Hhdu(h;piTB?!i;m'$$N\ZD42VtNenSe_d6;PBWh@BBY$^es&J0TF\Cm&e>)(a`.?k#%`YY1"om%O?1Y`*c-$TYWA'NpB[6cS"$j$AK#^IIVfQePc4?$\2E"PFQL8Y0:k,rYg)#%BtB$B!@:"XXr6G=tujV\U?*corN\@Vbgr)Y$%Y(NtA.eoRd+Q0d>Ib.<`3A*V=;[6h#.[]_V$*HoTmM8.Gl=e&kRMi&P"65sk(irbK#eR+2P"QtV\H"ok3J>&Q&9KE=V.uu!n6H+1V]K+:)Xt<'_!eEB4;qP&/qVDj0p5c3<(f(\r*D[9fAoH4.Kt$lJ>W`Zp1!NES&'0cj8UGEsRd&@;IJ#j($DD6;riHH,%K3b0J-^b1-&[@mnQT2-A@];56V*S:B[Z2r_8TN%r?/Tt%57XgkLCXgkLCXVbQ,0fJp=XgkLCXgkLCXo:cDasg9Hn$l`%Y(([pp.mkP`Y`4Phk0$T`p/rA`0<>LS[Y$n[DROX$D]MS_[!khYfN1AMapjaP2S6"Ce0=-qFk!@/K5Ege-U+>=b8gVQKrQ6EHDX8O04ag+[mcSNX0?o+$mn[*b::Y%')i]JaD?V@J/i1=?H@.AG<3Yn&k4:lG!X3mre,HDnrlt$E?^^@'D!tX92VB@&>W^$7pUn;O5\%$0Hdi0Fm59CF"&GC+8]h_a(BsOX+hl%HN(h:bX:"Jo4teoJ%2;2F(X4QV^o#$=).[#eI2F0#@!9#E;e_@CRrqN$I#K+'JujTe'V+3uZS01mfKrXbOq6Tg(ISe%eI]*/p[8>T_MCVk=un#!N\)Kn5i?:inT9S@2nr]5'ZkOasnV)R&U^F(Z"NrW-jQ2+6*ZC9J\cTAe?*6De;$^5V$.gf#&M=m:oh,I-qaMaYE*D0bLl0[hZ@e[hZ@e[hWD30udfI[hZ@e[hZ@e\(1AjXo'sIh2RE"?J.]6\g$,uq,A5AN3Rk\RVDG"?&X3S@j[kRYnABM*KY:j*Tm4X@F"I(QoglfN%Gi4$,ZIX+e0Z$_L,]'bR5`6!l$GHT*bt]P'7'\Ei6c@O5s#f`=C!=\Q6Q[q^P][bDKiVL,f'F8@7GCWdYBsY58g4Q3IUSDo:+o9^p`a"ChLXbt1g-@$D'ki6eA,qIFQ+VLVSmNMM,8<3V@Z#fGoD8;]+2'!-`M?li&He)2])$]K`&@-Z&>j$5L>#$4Ba_E\n#qf?2d0?[d7YS;JV"uprT*kXrc?qQ$m=2U7&5!pN=oL]b+,c#.b8G*dQ]%XL=)5s`sUupFNl;LM`GmL!*3W_3T3V_D7n9R4TP6D"S-kqEfg/_S%I[;(;Q,qJI:h)o<'/`nAKMeM!gPR`*)#KB7D8gA2D8gA2D8gA2(h8N0fuIsKD8gA2D8gAbYM<._=h!b3m'>uMI&`,[`n8&?2qqBn_%'Rh.1t^&`IllFF2jQ!\nc=X"lius@(G2k&;#a*-jeDW>2W-k4=Pk%=UUd7YeZe>$XFXSfTmsG,\I<4[0b#-.j<3$.:p>99/\&aKTskAYe+WpFEO,T^Z,Mt'd\L]Qi__(Jm_7T[2lo7"@8@WDTSYH#1og3e4HF7TU*IUU`.C=15*J;@42jA_h)SV;j&A@+7dW2tVc?l;M%1;H#6-D_+K)),W48c>&bkZ\5%*at^'(CErM5Zc!TE7rFMDQef#$i-H]PZE(K"]1D_U9[1u+;IDFHEje#M31e@Gn/=Us^kld'kn+X\gD6*?8c*@GW,+4l@C5f*:U';"7'k<1W`ZjENijRjTijRjTijN@n6&Xtb`W*-[T*BR$qZ%5=QGc1\l<2;Bja_-$d_W19pstK,IQJ=C7Z5HHFU%%I/&#Bcp?9\![%J6&c.[heFk;$G)fKq";7qnF5:`YZm%EeG]uoVb_tr+W5Zn3:NS-5%Z`b6RKL=2k3:oC?FK7Z.4B'[bGHZ'[%?48HJf>BOC=s^9bHF(E:]3:e5.o=rREkhOYD=YRH->AcnCDkOUqm(]q)ueB!O;7;na`HeD`Y=db^"C5f*:U'?OE0\f]f0ub%tgfE32gfE32gfE32N%r$-W/HGQ!>UWIGpA/4qhHl?/KX%7P@9S;"m4Q?^q=%f/2F-@ieBEpW)&$@c88X:9n>aA'nRY>(0`&"\s*4g/X`iQ0,9e]Vnb(2C.Q\ZM,Lu4)j6.q@9^^;nE@tcE7qBZ=[=6V9e.>s8-#i-3VZ:ii&2m4b:#@CWF4=*J7CP@m),g\cm8uCX2$KT#3u'M`o.Y?)G12)J7.S6(]#pQ?$b27_5W'F5n2&".0Y*b"AljVk=@A,$dha*VLh1%#a:HE-OltFiY\-Xoe?u\!)nA&(jZk331'i[Ss>u;b5g!f)X.'OdI),'oa$;d//[ZtKnA@LnFZ5lYaLBbCoN*YP!VuS%0oi3g#D8$[&D]4H[O2*KG+;=d0b(2bYB(h8Ln`,3J1`GNS2`GNS2`>E*DZ.[07`GNS2`GNS2ocMjfG@_S%s5[*iN%r?Op!%Ya>tTXXhW6F=S.'I_b_$(C&n'#JF(,'e-*X1&"W$>Y@@f[ik56qM51$Kf`O?LhhNe>Ln9Q;&gUdG$5>6]THPXEp@gh7JqF$]pC_=n5Qii8iiaMi["d&4%'@\U*UMC!\%W&?D$6FC*JBMsHapXELAP@Z*+T_:TSI^J3$tu_:JqH/IK<@-PrnRGq'HCBY[a??S%1AZr(-piP`DBVK#DIX[JqiP:TH@8pLcj#B,^"1F$MsW#J-Ka0\S&@H?4e3/7Cg=mJEaLkhZWMQti;`aAVLFirs_tlJT+)0^s/fQj0kTC<]XQK;JRa1:VE$6a2NF7G.G769+JHE2>#bW\5oUCNXW)*6J=g?Rk7E=$h=(4;`fn@!!LnFM0\$:G/T>Wp@c[iSKXRoW_A?eG9E;%-PHC\Hq;.`DBiG$/+!7Y\I/b`%R1(K890;k+BBnFa8/@)\!+fY%#1=T?KX3:Z/af^dcDpc'o7eGf=DgJ;5/c>R.3p93Fabm@50XdX0GKC5m,_.)UC9I@!u*AD&/"lZkteQUZ+PO4SLaOKiY@t`To0ub&?Ii5^1[hZ@e[hZ@e[hWD30udfI[hZ@e[hZ@e[hZ@e@uN.^B&>/KeY:71@Es*;bRLJeS?6j@_7^PMHhKgoGA[^,HRLBF'je[kH3Ia_;)SB@)jpY_/2btOAe=6nNIYrp+a$2l?q/khJZlU9tjFS:c,Q4ZNgZE'D?b6d0c'ng5%PEHcAN@8B_XOl_q!PK-THDI2,C>cmVU+Emro"B]m*$(r%VC8Q"-o-,#W1gB4qZj)/`Z?@Y\S#:'GooJ='m5gOsT^mU:^UY/'DA=L'[<:e2OH:"YM2=Reg._;>e$W#>Ih7pd07j(KItOABfDpD;q[QY<-:)65!n:0iL[1:&6dq$sTXL+ghZG4#&`g@Pm;BBHe@#_-B!SPia>V1aaRWot+s!6!-+.#'8,7LNu81@$*&VjrBiqo.(Togcb7;rmbSaZmPqk\#$ssIIgn(R>!?0H3qgO\H(c/SIb"ue_Gcb+gE72&g!jdntBkjdBA9VPoJ]@j'l\;/V)8*WSi5NM=m55L3P]Qa$MHjVShft"OQmU_PomqTV6BTr;+Y>3-/''NMaLobo_II3"md!(I;W[;E2C?&a]=A+WT1G#`e:Z$9]E_:g9@sUV1#$e('LeruXn-Vu8CgmE#P1^a`1DXWFhhK`7PNE;JKJn6=lp?qc5`gD@ZcgPK;Z:59(`18(m9"_o\AJ^Xi?6L0W-?l@+;g@L6=31'oHB,3i0\L$b4QZHT]mu-,NNeQuG2aYKo"Sc]k!kkL/d/Mc)Ce@:TsRMgos`2-Q(86=I/>f!psV1+A*6n6b?G?C70W2"([GL(:);pPXbI9(f"ob/HXPU:TAZK*Z6;:k*S.@9L:(eP+I00ape`C5R@Zh7Jj`J2q4q5:9d[e^-*o2\RE[Qo&g;:(@f"/A^(+o:0^XfKA[e>pCZ<+hqF,:G^-UZ7F!.I:5"J=a4,_LG#8P02BA04ADgGDr]FXU67%4qJB?lR5g;dVR&#;Uu38Aj9:E;)gW%/6h93jV*'-iCPi)*D^q#SpnNS3FFsr73jsNlFH5\,uT*6n'"$#/RDX4GFQSO!K?p=H]kBHD.FXJk],rMm6(C9`t'')#DZGf96]aJMbaH$/H+m60m&X)!Tm;kW0e0!Lg@JCS`_.SJ&RH$Li<XY,d^#rP%Dobj^2.[9LtVWp!;=.FrTRXD'549>+4Vr6"BI(3'u*1F&1#$kMi5WA6J$jI_SXEJQngu.p\JD5t9l5tu>MD<+Qe@;WjXgkLCXgkLCXkkmP.rHlW(h8bL>B*ke>B*ke>B*l\:X/Hlf'=@.R`S,RD6NV?`Y`4cSn>O8(>$UCS2':(&sta%-\S>dGTiG&KG0#8U(@mu]bk"XbR^KThIOHh!Xh--6H->6(-,<%Yqo*HLF!F=W?i">=Y_,FRL/L"@C]N3Y[g%_4r8[OqAMC:SHbFo'J:(Q#IU]3Q?^65(r?)iLd.-T9YZVKh`DR*ZV<=LP<`)^((GF?iRU%597A.(hH22`aW[r^YMINOjcC[<);kF:mFN!,AAdJWd@]&2[pJhjbg&[[#/]W0-2m8b0NZCID!766.qh&#Vh"%BU0G;o,1_GlhbH0__K_P`o,u_:6.:N4iA%kZ]LWrAE<<$@_eg0g)uG#?^Z^5]&$d,uHA:$)Vr]3V`5F@-pg/\q'APcN4%TQLqAS%i;<<7]@A\Lu`=ulgEeO"E/$)jge$.W%r6!\1&@Z>CJ)JY>LV2GSOq>/Fah0BPY\!<=]#)gG)/sd7LrW$nAEEdEe0ub&W(ZMm_[c4aT[c4aT[X,9iX^;#B@Z3&8DiWS0gPXaCgPXbN5J+&)cT*9"r`g,c'U$?&iYfSNKJ;M^j\"Uk14NrrDn5o$n'2?mdb*23W&Y[S:SrFeBD]Ua@uS)'^"0X'eQ<,fJMpWXO9Y;=8MFfT6^TuJ2'L1h0$G>?/qajF?78YV8c`A75:MaK):UOr(V58gXu&G9\,*n&-J4$k0*^#Y9.$LO;S2Fl2'(]#)5'`4V>'/ghV-;KrSDNjgT%\E*IPF,#hp##Eb(RO_.+27b):Q2!#RCG%h^c[\fK3]S8fot[iXDJ>IN!BMb&_'kD6YUfPPa.S$KrVEkat(Z2''THs9KE^GLEUDb3fe6b"A@:]Mi@p](n]oIq_-7&8jC4BN(oVk"KR\G9+fQ[\OcP6paJGO+\G8Xq0jc9j\N3U-s=`18mcQu\>,8h9h#`AmB?u^B//F$"HqGtB:]u&dc<%/9BoL)k4IFt)#ELdsYhmlY-K]UN\6GcYI'9\pm/"WgT3jKo/8s_k<`8)>3L>bF?^D0[:R2'[ZBBeCE=2fR/dccCkjC!%YiE1uKWFAOAL,TVQ$o*=3$nQoo?>`_R8p'Sd]*[j0)PapVGU%H2sTk(dB"3N8&'rB&R-oglWS2p6[gqU0%qRUm'@AjW/H9J4u<_g+E\?2?D>B*k%`Ya&hijRjTijRjTijRjTijRjT@Z3$"qm`cdiE)];(T^(HdA/B[L.B8_&g;mm3>&=iTUXsH[HO-n*bn77gG^Zd68t*Zl^b=*J!FqLS3eW6)].3*.j)c#DMk=d*O,ICWO+?FW?.Z*Co):P9Y%C6b"K!lo53Yg\um'O&*X^PC,'Q._o\t#D`7%\==!^dZY3&RWh)6itgV)]),4VUb*0"1i8"#p.pY#`kI((7K`)p4pN6p)RPg*2F[R0#>?\HV;$1aBd=+>tE8\[m4^o_B=j0bN;eofsFNQlG*`m<'dcua>MK]Yb_m]E**h,\uZQJ9.]GCG,?9q1*=bE(#!rs.b9qD4KILVZ+,%OSk!\?2WfgPXaC0uhkX'=S^c't4pe't4pe't4pe'k<3-fuIsKD8gA2D8gAbTASlS>unY:Ih^CHVWYbrpiHI5Y`,XalYnK/L-H;?El"b[$YJ3b_J#OJ?5WJXXMZ!m2Y&k1L->dqa9Fs1-!5:sK4T.goF4nKgZX]+*Vi8DrAih!s4&:i:Ve3E+fBo-H;md1^<7?)V5a7N4gl=\#n-l@(E8ts#)c9_F1=C`e*q-'Y"6Rmk+$RD@>m%K(Bnj*7r#Df5M"uBj:bLj/R2iY[8/^2XPZ:NPUE*>k!h;Y`3Me"mODYr)m?<\#?>Fa8lE%@5@E1%*LBo:t*/#OUO9p&]CI)0hASE@Ttit%e0>t^hq&-`GNR2A*dKWgPXaCgPXaCgPXaCgPXaC0uhl4j0msUijRjTijS^0DCbC&?Mt>+Y%'Y,>Bup9q@i@#dQr9loRJ@sr!'uM8/.$)i&7H_bE+3M$2P'E,rg&3@+V6+6_=i`h+D*4$Z%'@&aZ9ED)b$h/*2A*dRR[_aoh7^3pC-_p_,=jIL=YWcbMO<3Tu75"S9u9E3]6i(`kSde)c4rr]pgLKcrQ"Jghp;bV!c``Ya&0;Vr!QIErDrSP-hnEJUm%_L[%Fo!^m"gC/PW*Un>lJ_,;`4K]WT,DPOBG$`Y-$6JAq#]@[oND#H./ih0'+&`\&7r9Mu4a7u>SYVfO[8N!=G`9[L*PlTn''p?1WQ3X@,?ZOmE_5+s/!W``JB**^\mfWn(eRYMD.fUoN8UrVr$Afu+'b+1YN&"R\+QP=696`d:IMMd);W]lETAcuX@H^Ar]107bJC.$#6^7A^?G9@e$OH+G"Fc&a,[pq1@G@Hq(S1*Sq,3r!40WSgf@A6[c4`)N%t%o`,3J1`GNS2`GNS2`GNS2`>E*$p2O;V>B*ke>B*mGGINk6BAo:re_N.ij'uu:Gr6>LV?HCXP6>A>9MVUSoBI'=$@)3Bi0'VA'QE8:8?#u;9c$8S^bVDdG%E'0CkLD=(0H;8R0QcFYs1`^/*2A^57`\TJtYueodcYbZ1h06m9^CAI=eVG"8)8(KBBe*0J[BpB:V0s#R2Fh%Y7efC0PC*KE"aH).SU[2Y5uIjiL0!O2#pho#b'Z!b-&J#8$I`LS1gcr17LlN\'pAn@BPBf:>IX7d3Baf-@i/8scA)_W8TY5EEj)9tDf601cTki\$k00"Tc)Rr3C@c786$Fp<>;5s)A]XY!b+FJiQiDOQFB&Ngt1QIIYRIl"&d[_mSdD6#+pLf7J0bC4E"?\`2G\BK;3@+PhRN+R)tRC?u0+d`D5kn'e1AMP1?@Wd4M/T=oWkI0BY@Z3&80#_\HD8gA2D8gA2D8gA2D8d?%D"_jQEEdEeEEdEerF`UioB0H=jZa$#C#XCT\pO9^bSu'of90N^2jk;ps'fX>?XCFA9*C;>$/E+&@5J-m,K\j\9`b-)W\BS?emZBQS14rDK68j]/G/;FmjY.;3J19Z`KV5Ld!o>9nHZ)Qd^uoD7YNIh=gp]P>amuu[6jRJ)];A9%"qh_h?Pd$Pa34aDThGcf_%:KK$3`*?Sh-N]B'T+FAIGA.X'TJgfB@g`nm8rXgkLCXgkLCXgkLCXgkJM@uSYrDC]TTDC]TTDQEg([[MI/LZb+i='[sV&9`iep=09O)O&#;E`Kg628t3gQiM"k1,sE.bE*"Td3S4?VLe'P]R%OWS-mjHFKc9fJ9>gb0Tle*_)*kcDQBB%0[Tb9N-9XVSSc-Wji\,&W3$Hq5A1;2`s;T/!(*ur([L@OED?JoT/">&@n?QB/aZVLFdL3dK)5>%:fCX'F(FlR7umKW!RCiR"n"_(hZNu;D,:?^jQmoXrH;??Np,\.CY-)I)CsqArC-Wff32gfs]_4]Hjd=Ran2Uu2a0m)Ff"L"HmaKghYm8cro#.h,g)6/u7l5,,+4@T2S7]TL3<3+Y;jakmm(dHq2/Xp^/&iE9s%M3KgfE32gfE32&TM#p>B*k%`Ya&T\?39C\?39C\?-t7[e`5OXjj.Ef3jq(4RF!h^W-eCSu^3!s>)Sd/QcVlHP%>:1:MN*=R#rI@["G^lo5Snb>&Q=B>k^pRacnlU,X&]\ntWARhDfE*G':fKZ#)P,gbEWqo#YreArB$kN^>5[JDXil^@%&0;4sXiq".(n2/YD`X'6-sf\!o=[uHCH)9]d\2D$go>Iq3o.[]E1:C-,G"4\g2N8"aQHXH4@NiS"PdN"^KY%kS@EhMr8e:88<+c1$,QhJ>X14/^p[#T;tki&DZHF;Sc9V;D-^c%D`Rm*AJ5B!&&/N6ScRkGRCn$=Yi/U8CRhR!D\mTU*4N\(D4?jcNiq#nG3EWLRb`I-lsQjX!lF'uA%2%4\?6g)?\k^K$2I2t=%gmnZ\RkeENlXT.,RKm,8\M3U@A*ECZ#^W?H-_EXogLdCaY(EO:G.?)p!:11SG\+]V!4]-JA*beE4^D&1)jRB-X2h1=6od.@K(6*"9T22knJ@hgPoJ>u^ur96;m*sn$:3Q4_>=4M?9J??e!@fBb=<`>DN\mg)HgRD(9e]q5]0=:r3eTne>1gi7kWl*Ned4[S&&[J%Xu`8:a`LFSu[IP6#b_7cTb!S:NGL3A\/:8pJ%SGrsa@aDAi4TQ_gY8C*o-ZRVa@Se)#9J"FRh$"oPSR*Idp0-%*TXb+`:&:-BdL7(n05Cm0#081^1kJHb!X!.Mh,Y1Lo#J^8J"En^AK>LROYjmXJ&HC]oBYL&ErD2$4kEA$lGq'60XbV]+ItEi@$>=6nK:B@=J_f8dO3I(e_;rSf2?205rJghQraC`<\Ajat>`:E2Nhu\pWmZ@`4XQ*W2Igc`M>d)+LL\2G(g_S0N/`n7N>lF_(2/>>huTcn(%sQmhHLP1\%oT1,`%NY!:8i;:`!=0H0`<4\c[4<.?L(0(jt1Ei,r=\+26!S`8sW7/Ths+^!.,X>SZ%\+m9O9?D7TZ&$u/uMh,P#*f0YF5'l[/AjfX?(4%CE;9`ghKo`^l/rsI&Ch>i8-KT0??JG$Ipd+NCW4K\_k\4]+LT_ts5n@=FllT>CQB*n?=B>EiU(Z\]iHh%?NU]QQC#WW('?#o([cZK;@XocFf!dq-q&9+6A^[!^M?Cotm$N.%?i,p(A^[!k(m=O58!iDK"3[iXA$T:;1,N$\n:G8]Pk&D@@YAKn>57DGa1%;`6K@=iHe._H+%g[1_H#6(0aeSI>Zd:gPXaCgPXaCgI`Eo't;`*&[rKbm!XcGMVF$CMVF$CMVCbX/@Umj+0=:!*RB&Ij7^:5/'/>V-%]?n!!-:Jp^A7^Kp*U/AT0e[RPPc&cRscqf04h=UJ'O#0:%3-+<@PYR:%"*K&2N1:jIL-N"3"A[KgU,fC,"l6JPhe5EQ%2cT[)lQCf9UFZum3Yn.s7r@Hb$)HN]\Kq[q\TYFtWoQG]ch+p39mC'T&Ps^S_[$$ar;eg`ktNWWfU')Q6*uh58_aRMlEfM2T2d]E)Mn7L6T/6GRpOI%ID.onEmr>E],&.8.Kl]`dV(mSgRELZ%]-KqQ$Y6Co)$HL%Ab&_'h6@rA>>\DOXuen0C;!UjS*H)`%S.0m'J4SX;HT['Y;nTu$F?JXF?%UNeI<";3<%J\^k+Q+[MFli=IVZ],B6L_TZ,C#bl+Q,?iIet!ZRjdJPJq1HAI#_+ofEre_3=BSXH#+iNlmi(DAL8L//VKe_$s3sc+lGBa+jUI6R.c0i?3!8m5'UF.VcVB)-\qL/ptZ/XgIY3HVEE.Pi-%\8_?C/Xku]>8@?$6ICZTY9?rg\*^RD81Vi`>3ehD(DBa!t7X4R&stfZE:dTD8gA2D=u2mD8d?=&)t%W[c4aT[c4aT[aN04`GP:.`GNR2HOo,EijRjTijRjTijR;/pMHu)V`isenZMnWS!T<^?qp]o.8d;pJUM&4Cri"T^MaaT]$Kaq^N1jr5Ke\qBBu5Vfgh^DW>\e^8gh[#Y[aP.bfCs#aW@%V^(h<#/g2YUb;n$H?I\14Ma^.Xi(k4QC?CGJ1^%dhqW,4C5CkK!#.njh2T+LSLKn/oXi4B4)+-]#Wr"?MYIObg;1rAfp+2I,Nha,V9)gng3&F`t\ml0>nB#\lD\1n)7ra@\Z>ZW*0B`t(*&i^nu+X;+IF?Z[Y[$5-00[tX!;\.T!jn2l4J@ckSmV;7+4D=t;FP]W9fQ7DMX^)DXHQ@dpeIZ\+!3`Fon5d?%NJ[/\VA/O3)o-&:K0KlXKABE7gG`c_aeLlSob<&/F<2naCk-H==q3c59S*Xb4p09t.@@b1]<_dUY-TfCE#]AVbC\V0-c(Ail-OU'#C%6O+QtusDX0"o*B4%sO(H53hbrFch@+Z"E&79[a2)OQ#sRMqcjq1JP/:H`\i1@!*a/kEf/A33Fr:.;"/*qqofh1AkKdbXl(_rhF?0Mq55kS7Y(PZ?mt^nFhk9N)-fDH#"cmL2go15Y*6*WXIX`T,(T0W7;(As/gBd)BE*IO:f=i1TUKaGVH61R9A4#=A>VPKP_1SWXTT4H"8`c/c/KWZMi3dD;/6fnuh$Z\X4)eECNn]HGlB*ke>B*ke>B*lHrm#B2%5*DDe@+q;&d>W"PMH"FE%-MUYj%L,?'csu-@p:f'eCS]BdaG7K,J&7=:+++2ni`>8-`Y.T^PSW?%4=4pLX[ofeCj\$AQ,m$f.4)fUWHRh)Wj:\OLhT*r7s>Ts$iIHn'5\Hj"kYf>IR<+/,X/$ngGI&!sFWJ^rn9(u%[[h6I"CgZj`6O)2:ADtNa:g-=7SM"0H1DNDf,Zu9%sVK/3hIMF]9.:Q8_HbDi5H>rNop5+3Lqm9)Du,Zt[#"o8,2HnMM8_fiFei(^mc;.!Q9>r^ROj[0lm[#R9^Icdr:]G('eAitk'dl>jtgN.ZYi"[_'M0^c[b!T,d0nXDCtR2HOEmi6tU`"0ZP\Lk<0+lpBJNS!njC@VuSm&u09P\"7/e3h%#!3`f4!q(u>SQ%dS25gnba4OGemiI"eX-\CpIpIgXmutOq3t$Mp):/h`K$E1"6=&-nd,06[RMrZNcel]/l^_CuCG1:%SjT`'9+kLCp^Qk<*eoHpgL/?n'Y%?D"aFkZi3F'4iB:moXo<)QlJ;tUO+fgmXFeIg9q]cXR>)3hWPbdp?IM]C)qYOZn,opB1ru+QU]:e?/pJ?-a(%c]e#+'H;fF6Nn;GB'VhHg_frP-0Ff?\F/iYo=)Rfd!ODJ:WrD-Oegqd$H+$>Nf@XM9>?7'I,u#t(+g)+ar%TO8X2!RjjpR/>@Ke=.=Ahn'LjHWCI/X'qeS42Pt".N%HpL4RVik^SmK4O&MmVe^u&)sW^6Vg6Y>+nRs%&,0:XJ@"E3iR69Rcu?N%e@'D>e@#_,rdepo;q<2ZQM'll8Wi\ge:Z:'I=23jI;k/A2"f#r2"a@7qr#TmAWNEm#!&Fpj"]j!_Wnn"W*@b5I"1e<8#ZajAruk.m4C%"BF73^1kWZ6`hK@O,ME[[Ng^eloO?UPI`X;sU9:*?G+#of`m]aKX^6C+#'CCK(u)(\Ad(k]g0lP^$JK>S(46+U5SNoTN=bS:J]DsR&sb2)j`*p9'RBguf1d+V[m8Se)Zm_mnAD+\TGEs9G72i"/;6UgcU-!&#Lp0:^Y4bVVb_13h<7:(f3l(Ul6,<(%'R.B4;T0\2;$H3-U13u.Q,.JRZ9b\l6OHoMhdAEIL,92ie3BQiT&]=q!)q:DCu*rj#e06KFK"N6JI,;&Fc1pYPS_:oq$b0?R19Q=pI7C3U%62]N+I=`alSW^CbkM!nb8/-(I#b#O:oj*Vk;h(lA]Bi6Oc)i3]#,rB&K%VJH?n"jVbHEst0kI->H4#R>RMJD55QN$G7Z^s3AX3K(]A4T\s1@H_J')4j%g(>P3=E3JeY-p!UqDT?`&GkZg=-?Q]p!e[&YJiX=je$0q9cE71jH$4=Yp%,)eiC[r>pg"-?B0.NopVPI=H#W5tHLSQ?_S)gBTV4+[K!*#L1iEJWFZ0^kq["lTkCD[c4aD`bi\3`GNS2`GNS2`GNS2`GNS2`GNS2`GIL0\?39C\?39C\?39C\?39C\?39C\?5b-D=tE6'-&[^N4a2k;DJC!M;Yig#UW-0!^?R'QlK6RC#Bh&!rHpDfLD%?19pu*UPW@r9GRD)JT2eQ%/jn5IsKK--"B^tk^0UDZs+C3aV)1u0$;B:I9>BK``0ILh.O(SLcu4h0-`)ltqV]QjG[s5^UdT19pql-e);h'mJqe&:@2l49=0Z(W@d*)q/%S-,"'nQ(pl7PMBX#HM[0cH%CG+-D&BJHBP+aVicp1@f/gIu4Gp+b8moif&^aI:6M;L)j=(:PXXIoK;".`Os,k++dmVV,_oZ'd/K(`P'H&5s*gX_F[2_PgAI$LM?1+5SQ,0r\W0puG`,Kun3)I*,g)cg`rs\/bBfgZfiYD&!E5(]8I\\ZNjQ/J.Q]_Wau`5[<(g84m%mldrFGi'>F5m%0GB*TXN^7jM`f8>R@/mQQSG&$/!Jp&8PKqYBh"CY\D+Y4f&Xb8.CoZ2lF*2T"!;>9W44#ISaWNY8S]MrDkP$/dM(6dR9mWZ_>fFg19-%.JPb"kQl_4"DK4/qt$pEePa=_<\Z45C]:2O'6^ZhfTP5;TO8%`r5):k;WWo=#'(:2&3:FI1I?8^C$$OJ7n9(i,S&mfXE(CN2+#$C-Dnn%]7+",FQo!q`>Y]h@0M;EU^U?&=gAK1pR?]+&.O=U:&AZEHAH<7ss:BldMXqW_5XG3?Y_r.j@(jNUrqOahm[B9;Z5*Ejml=jT9SS`Z!h6mg][f-F*k:T$eV0bPb/[/F7i,T/(jL.scD)L-eH6te/cL*<0qFh,U[T>_#hCafDP4gNq@l+^&[hI>@]K=!NlZU)l+7GHnpe0p;fcb4!reRpfpf.'2L\-A/?!&b.\eWeGqAXf/IK073W3!Q6K>T$\0t]c@p=NH*[5I%m*=NChKqUc-i?/PEW4PMgKOJFO+NRbV7YO]RA0_^Ph5/R(,3\\c.3o(l0q&5t0p9ouMI[-GaW(Ag,n-!HR)=O+&*iZEMr=h?WuZ"7$VWRkAWpAlSR#9c"Y@(^S2kWq2K(4"DneFEs.?tdqhZfWs$$GZ#L;_IlDqY_$SV@nUm"P7,fG?I63o:K64&pn47e2EXu+gX<"G0@-u=GpS6PWu.pD[Ft"@YK`=_`3j@i`:\GVQE#T'2sRAGi];)>#'&,8op[gXo*2+]WZl=]_l[,J\p`=;Q%qGF]\KY4mLZk,oX$*hbA2^=DjS9$g&^r6K@h][D;[$hcJaeFgu7me,5XXGqp+)_<8Y2ApPX1_GH,:[dHd=Z2m-h`(Ih-_o#?[G^"$`F<:g7uK-76@?fB3umG3"2.q#Rpp,B-1Xg$HVL;h'>U^uJf\%`.J)@c6j0^u67;\b%2$"s4)`AcQ)eQV^n/&]-n`^h+I=]sb6?J^aI_lM!V_i^.IbaLi__j4JeJYc.!1tF!EYWUVOt<_cX/Sq?8)&b,>XAT/J-JB`<\FG`C%H[Q@Wl3,I9)%H!+OW[fM!37gZhPO0]Uq6`df2a6VhMYl\`S-3WeIdSE'l,>NHtVGD8k4d[2!I-elJlS=Bceo=Bi&=@Vs*8>ND<_b4uXha5U)F6$r5.@JAhgR'XTAL[Y`ugr4G97(fiSt+ab1G5K-Vh1fcYj3hrO3pm^dSA=5sa6HJqI?J1;jZrTiMF,,Jq?TL^52fMMe])FL2p14:B*tc+rLH5Thbul-gt=H^72n+;,>>E;mK^/mL)-(.c0F%PdlD=Bh,CpN>L,\UaUeXqIph_Y^Oppoc:-j73R)$]mWE4&;AB+td+GOtRK8;husRXda*fFD2;Db5+AsY_#/6W&1!:dHX#q=+FUe"f"Nlf%o4Y?V+6%nFNgb+!3Wcs31l*9?)bIZNIqU>B&ST'E%d:@G`SH$N^Fd&/7M8#Oaok#SlKTY])NhSD&S980TO@i5JMT2oN\GJBrF,I(Tj4Sp!IfJdW4;\KU4M""moa_53&"\=Do?.k/F0CF6Q29*n[;[Xm+?!k36?E"T6i)n:)C^b'ikc4di$T%oVI3ntM=^j&CJH"Ya:>71545WCrn8Ig]ANb\L*JaLF.q#UlJ5k;7Tu"Kp:,<0!b:@8)\dT1E^Osut%M%e)eH9u1+#k9:#b"`J=t6\`>a?`Y\A_UC`ZK^R2?4`JQ\;IMp0,\g""m4c\BTH[Zucqh-IBms+=SH6N5e@q[kn3=BL=Fj_3G^!0H5>RU8nNcV$=F[\)4k:#0h8lYaQY#g5TKb2k11dir^uLMns7G!:a4roQHf0PGnlVAH]pK6nrX(Ai#['_c.+H>nn1jA`0lFJ4X#V)JLoC<(13DQW)Eg16`2IA`7#U(4oOn$3ip2fF@SkU<YnEXM#b^c4&$3c[=Im27>n<^H@`S_R+V-W&U-Z5U%Q6Zi6/0PV9nh2OVr?*<&m2Q\n7j']h@K4oU<<_@4pt'okC?P9?2@5cIccf+'^>"h`/D%loDUD8k4d[?^Kj[UO*mg5<9QCFdt:XK>T/Z*n+Y`S-3W'l0kF%r3]HHtVGD8k4d[2!I-elJlSNn.8'JA61"3AaqDN5+Z/0]l5Us>"?!%049nJe,,g/dTNET&CP6MhOK9"&cLM,M/R=%SV+Vq99SSN1@X7K!Q/Z4lSoY(tkH7]a@!:rN9MaOkVUC;-U;$=`'UKM#9uA+G%Sf95s!uH0NF4N1i."s8/M0f"9+W,s%O_6PKCA5Ri)`*+:21/a:[Gk'^MWK3EtJ=O#RE*tJOEn=*J/lZ&:DnoK]jO(PR%^U6JF<3i@Z>8]8Rn4^>RkJu^>!crg;\jAIG*e:^`!#IR_A)Qb"OFENn#ro&`mQb(!,G9cG^W,:16X23+J=i&GA!@$oZc6FaeubX#@PmiJ"m8TeC@fSnBg&X-@Q8ABg3d,"bl:taMki#<'LPQof;BHPo$?XpbZ:Yr"rf!eolIK>P1mbi3Y?DGK'4_$%?8?4p&4$RBUga8Ok%5oS&V6GJL*E#FDD#(8f:5AkF0sc4tl[>RsVWP9Ju;8`7=::&bLc`ZE49(CKP(I'AtVTsl6I8rFn/A7u1*\H8k0#3]kd$T2K-?o;!$lW_0&&WiL\`]k="G/eY[/iu5jE.YXeV1!nB=fM"`<^5rgfXjLP(kC_#U%$-jO6+2mV2FANFo_DnDh1\o4!gjft!it94#a\HIBm0\nA/W2=a(EPHO)GZhq;YS]l3kD):PZjAMVdF@&`.@NPKL_RXgi/NF+6(-Hd4`V>HtVGD<3p^X]Sf4[UO*mg5<9QCFdt:XK>T/Z*n+Y`S0V@_qL!U'l,>NHtVGD8k4d[2!JXUU1d1Vr@BP[j(jCqUF:/..oYEQ+:::E=r%olCamL*gDtd_>W@T:fMf]$B&d6Kg\esD($qXM@/fKBi%onlDZJt:DFT#4\/Gt4eaWgb(eom>UV)EV[=i`AbXcZ$4BL`U+@]Ac%2=`7o7h0!h-aX_UDQod*Xo`)Qa$6FLW^l5B%'Tmd&r_=n8#Hj^jfd?33@+)T(*$pjK$p&/[Y8"?;3&-folo+=@9q'>Z%:&/&HIbRb\mLTiHaKSSmOe0tJf6s*i(5S;DkHAIF*!KX.4\6+>)8+BT`0;-g6k)9oc&r=JI`;)eF0i8-H8TNgR(bT,m6cu6:aM-C0+$P(*CKO]Rp0JdZnb>iES.6U'el6m,.gF5VM`TSHtQJfgJ#X5M[<+j^"p5B1g'%E-QP0U*W'jSDEL;`Zr\9,gm2m0/HE&o#:VT1ur:k;N8P/'90eme:ifq\bV*(L[?\'SYKT%]EduH!!N';K56gK_!V%*Bt%Op3m&8I*+Q4Z9o+K*&01HqS>9DMpY`8?#O1@nKV//O[&Q=ap,bZqrBZ,:%[!ZFW/*Y\3oW(Hb_cIgobh3(#Igh%l6iZoiR;H@SOqW8[ChSSU>73ELc!WE9_q<^c\=DU^=fER+SJhi:0D`MKmRpqF21sB7"BIkt<8Qh)L9]_aG6XM.$1TEJm"]Jl\i6FY:ThB`aZ1;$DG'X!b<7L@+XRn6_=TAh*$#]N"6SskCB*m>2h>`pK.[rSiX+PsMZ.3dm'W+t$s["VTu#H?[2!JXmhs\WXK>T/Z*n+Y`S-3W'l,>N@CWNHtVGD8k39F2YN@qWrsM?O##ubUc<8G1]bT@7+p`fi8p&q6U.JhL1&)YK*;cp`8u9]n)akn"BEo)"F-[Gs:Meqq6=*O>H$mCL@i;#!$2C#@_'L\t4inrBt;uHg#]:9(Z&1A+6F@'KUP)5^VB*[.V*V\jrF,HP/B39L8]Z3I(70'fu5!K2umlPKXd!>ZJ`@:jKc!eP/84gbGZ6(`^4J9*Ku%3`Pl`5uj%%GcT>:_s^5KSPs$DNR\I%3d#:&05J;W(9)@U5_R"QLGA45/Eea$NqB*PgnBm8kK*j#t3c53Li<0,ULRji^Mkt,pe[)KB/7S8e*e_M;d=IAf)D2%GVHg^<##YXMWR#kjO%PJ0!o2"9ifcE:P7dI*r5rcIIcU05IH!g:OXR[p$fZHW<^-7@>;[g'E$uW-EXHnVfl+)>JRm`5`PHC&FCJ`83hPF#l9NSNfmq-#)9=F_USDri>*j'lddu;Qbl8g/U-=c=F`fd8?!]'d/]YJ5RZoe_Xt*WDu;fGTH-V.6YaH"R^L?%fQkaK=2p[A;d`\=I@RTWDc4'.0gGn#O[ii'kIVf#uqCpLuhci+%O^a+G_rhF;LG_ki(kG@UD^S?')"9]j5SC#Kb*+jV.lo:fjj!iPm`,gq6CXhNUB5j"pK"E=A(P2:sHAi3_6IbN/^K*U_k-*DYYZ*"l)',h:f'[N4.h90(X!-%n:60GT5b:_!h00!*@U"Jm@O*9M:GRu4.<_O(ilI5*^q'[p-7L>BUeLrdjt:JQUju=5%XQZBGkiTlm.q^+C2S[AE!Q(_Q"O=S[=hDD!t+QGO@j&fYH85k^#"XS'l,>N<^/LDX]Sf4[UO*mg5<9QCFdt:XK>T/Z*n+Y`S0V@_qL!U'l,>NHtVGD8k4d[2!JXUU8R\%f!u\oHM@6-J2:3@7-`C[1+--YGkrJ8IADf,5="$iF.+KNL3uFn6pncrOCkGrPqnTV;@9:^t\BjGVd&8,@epdHB`Y37XZD6`ti)sP^'oT$(ei.h@VEu/Ao98"aKTU*X6dHIeE(#.Qhu>:Q-jA^rSQYoT+OR?j\?iIZkV.mufF+>QOo1!q>(NNj+':'eVma)VS2i#$G3dgu9I_%C3glP<0cn4+647On$C#9WKL[l8ak^G&.Q!@q%jOD9\q/TK*q"VYi=:["+ZB'`S80+cp]WQWCO8rZJVjlS>tn6Ol%nW8RA$+uN@,G;IgD[]pY*^OHVhYnE!b2qVqIE&oQ.^#"Vc0"\c;koXcC^%GFtYh)p&Olb7sgTHU/g`HgR,Xjn4bP@9>]n^IV>J`BiIA#GLb;BW3Li#4[_2`RRgs4O0EXi3'?efeXh2YprEXWTS(PHW.[V\C]9>^[[H;4oI:LVHG(n?U6i3klDi3N$,pG/e_JE"#i3.2JWA_`RmfWl.E[Vjao;G?S9lCtj=Eg,7pBd7:2\ZF'6Zot3g^i"T,DJLK,/=_J:SK>X3JQuWLS-Fc`Pi&'Ro3E.o%7:dOY@8*G0A/Xifds;OjB$SN<_".\HtVGD8k4d[2!I-elJlS=Bi&=@Vp8[@;X!;MR=17/(Rb&X]Sf4[UO*mg5<;gOkP]l%bUTi%D+hfI%"4>\^Cg_\K4.:%1"o#Yd1-ZV%l#702#_c5m5[.RkQ]MK#nlJ9MA+;$:ChS+-D%nSVT"Hk=17C1L!@YnDrCd%)-#$Bjr92<<8Y=D+/'.c3tF#g]io"FpJWY%&Y9i&/Am\maBeDd\j$W4iG9@JB+GEX:WE.K0WfI^-G;m&Flf?p<-IG^GqQfK7pR7Jd,1`,'!Up)Np6hm\8JQ0<--T=UCEJ.u4m">c"T/Q,3-/;W>8)DVgJlm@2%re4iO:ko#D@H*77'l#7.m[kCdp`k/AD$K"-;kSAi,mm(!.'d?CiH\d^9JuC(6jbB.9JepfES.HWT#C``h"S$(`/Kb2d"up\X$jgPt`*)))JcWBFp7rr9V1T.I>.AZO"3JZ"\9s]88Kk6A+g,,rDHp,Vbo99bI7"&"\!4\!`i#`XJ:AmJL0hQIp%;=H8AlX7C4WuZ]1SbCe3mhH($t=G0Hq]mLl=)T$r77.d0b\d0b[DZnD4=gHlE?7+7l\qitW[r.u)LZ`0iDN3.'3V#mhs2gD>\L[gS@^ZuFuu%[&L0i>VedGJWsQe90cj/HmGUgSlYn]q^>SF9Q41PsA+,-IgR1J[]RT_^6sAK@'[2WtF\V2fJf:rN7]Kj8HTZ42?/\q$5X=Z[3a:gs`J\WP6E+(XMI%EIIJ`m2REWmpO0j#$\6S*d/Nn\$4s6U#&UfMea0>`ECshf*'p8@jh!+oSOPJaHlcNoaG*N-a;]W$?"T@oaJ9F:C138qt(M]0#HI4EVJ]"D?\UbD<7nU_qph5CFcph49VgVgt!fkR-J*e;RI(JSb89&RTuU>JG2]apBS0DP4#G@B'5Lgr_($O`211@GCPW>c(DNCFaHWEH;[6pd?=XrA'"%"AL4"7;>QE)rUL9`B$jM'r@H_D^R+3)4d&0dn_.C+[hJMB,XfARpL7;T!kC?eo%T8,d=Bg2p=Bi&=qHJ]^'l,>NHtVGD8k4d[2!I-elJlS=Bceo=Bi&=@Vs*CgQ?DHAm_r0Q,pXLFXfT7r^/70jF'K@h"M6q;_2*mY9md2VTHce285`:IO_&4k`<5S%L'CEVRE&KEn5IX\DO=l1q?@Xu]RlMA-U^FB6ZgN^&`na3I%%ml[gRHN@c5;m+c^IDJ\XmJd6UIm#/p%u_;E!8:A?\3@\O4T-Rg2&Jr3IDKo6kZGX2Y&P?#P4,3?*C\BAu$8Q!?aCN?q6>m[uX&pNcbM,Z4*VTL#+9aUPLKQ-[W">[;A5]GjD]V;aD\dY't@Z\`#+BNHr^4fWLLl-KY1""_Ymk_oQFs&D4"[DsU%`aT05TEQ.!eCbT$]Mm7ABp^-6!2c$,.n_@q'?]'q]d3.T3"?WOpWgHO?i@_"^KoDeuquSLk'ifY?p%@P*`>7RWV`/pQ6oPjQ-%.;qM5\:ds/V:Y%9rP67KQh@kK2B&b>.kPB()'fP:>ji`4&:)pLHCA7&l:gDHahG0[rsrR_<]]9i-)6>NdJd`p24MoCPJ;N6l0KQ\N[m=H^pg'Z.tP]hO:NcC6\Pp>HUg6q\EfVHaiEl9Y;Zb>B.'iXh`Yr^Ejl'_!N*c>gK?7MJdDtVd<8Ri,TnS?NO>hGPmp5AW@V#\Q(^\%(i(i,\I@gX-C5NZP26gg47Z7oVQ=[Q#:E<%DBq+`+9bj_+a_Xi5qIed=#;Z"7^FC4T#-\$^p_-06u8K?N$QmbRbijg8uq.D!K!:09$^AZGpFV33;1LS]Tq=(QTDbJF!#MnZEbmt8MU!o+,6Qhe?#[u"$KR.I8(E#B%6>NFm$k/6%gRI\1*b,+[ED(HrU5Q8f:as;pK<">0&qm,N?FcW8$9^1IhAUmLI$$pkXfQB2^e(k2>mP_RKPi2hVNAn[f\E1P8]Kqp'JPfb_9'L\a8q`j:.)DQ6!,JX]XK>T/rCt2`MR=17/(Rb&X]Sf4[UO*mg5<9QCFdt:XK@LHXK>T/Z*n+Y`S-3W'l,>NHtUt8mAhjDo(:[$r29eN)*/u<+c6"/)>3nA'`i6E8&E>T1_g1tT19R@Gjt!$1^lV/&VGHJ)B`>r`5D0I^5$>sj+m^:$pH]=iT]AY!&.j(&:.[0)Gj_hrK9F6h+LVgnSaN8.LTqPmsTYnH`\Vm_>YD-7e?%_.b@1^@5Xu30=E[s*bC[JmRs:\INhi7_q;3(G`nkRFVq/qZtK#.[t>;Rm'4FJNq/nG.2Lq"!?mFa=9f$U-qpB`n,8h??.$=pPWXK]&N$E5K'krqO/4NrPOM^E"t^kic3+NuN\CJ)S3cJ!@gLLi2\mW.JO"P2V($+o(o"!0?j[_G?H7Q)eC+(g%-XfSADFHPTtiu$KPfs5^):$iZ<5$))=!#&U,lJ,g4BFS!'^gh!I0K*C\90F&^#mk^>37\g@7AfcP7sBMNmdGf\$`VZ\%re+lr_Ol;:LOR.p.MY@3n%MO1CmQN?i+=iGhULLn*%Mhd7;e^_61G+KAnCo>8*c+jbYdS"X`S0U5_qL!U'l,>NHtVGD8k4d[2!I-elJlSN]sPH=Bi&=@Vs*"P>S\*\7Z8X:,)m,*7lkK0^DH85=bC&dCBg0^'gVTG9nG=r[_b@5qpZ,!\Mpf*Tu2'I[%X4ig[`5e9W@&X"G(Yp]V"![4F/o6_+p`P]\h!XRtF`Q8g-XA=GnSjDRgYm`4TDnobc_;9L=s"/(VAq"V5AnIAPnl.cB:U!/P_IqjJE@,)t_BZW8q6CD1!a6`Bnf7T"1ER5C5Jk27'aDC$Bb94[#Urh%+[&g0^\j5r8Je#7KhEZ[YC?enYK&:^_RXm[msbR-r7P[Q\N0lVP$5]Jrt8SKp)\ZCFp^RRdNL2Z')8@T+[:Gl8rBHA=KDXWOf`;Z&&&\'UCCh+^%6&/q6*P^FY6"bUi2<3A+na,/q"^b=YKq@\o1OdEO.Cut^ha8^\-bD`(ZC^QH'"RQ$L-e"OI#_T$M,O)?Qb&S+up>RM*Q%V(;(P,JW9>&&;_YTQ-)@pPQ5njI%a@@dC_6EOL,I0cYYu-\^-A%A;.7dE_&c&6>1$cE6AH6HjV!VhZNoXM$MgRMW31&eJ'`C]=nQc*kr!f8MB"<_DCucO/q4)Igb\?/qB#/"UGR^KW?PS^b$rB$GH\#8PS^?YC$T^aakD?Sj?md3FlaI5]MpF-rrYHoq6+'l=qEYlf$I2[?X4Z!e\l/B!VfNF;jC[IE28!;Z2=.^7`Y\#H,`P%Yl"I-9Gnj#*;DV+Pr@!k(X"l)^ZA],XNZ^iFVU/6smY]XF.e-%:W=*XAI]<2:8EO0sO?QM,ufrL^iT0+nHm\UXm,[*K8d/q\JMS`2b#FXMH50guGpmk^.Z3&^c`BbTHX]Sf4[UO*mg5<9QCFdt:XK>T/Z*l\c>B,-2rpsb=E#4BPSQGrm645H<7YAV:$T<,-=B'rR'aR8t!#XdJ@$CnI?5[,m_0)/f&<\lEc])Y]jF`9@o#+(K;6ZV`U>e4I!oB-R%-,gAG;VVfpn-H2Q'Z$d(G9Skb%3L7#5,goA0W@,<.V5k"b_Um!M:$,_"U5X`5d9K">A`nKiL[WUObE(91ViY_&kk/&0+pa!^R%o#Ns!i.k`&&X;I+`H6FCRK1^oli1&XHE#$YGF[5HEEs[8mL/'jNA<086CMF.8IBn716j/eW?.X#lt)"&/*\$dCeY(FQk%*]]"Cq\';_K%7,;p!^]6>i7tm;7,eIT"r0F-l9#1Pj?e=`.WEQAY?i*$^q`X"kI3fF65P8Rimt016i^;C'eit9UY*OYculP^pOo$4?V]7`nHg@;X!;MR=17/(Rb&X]Sf4[UO*mg5<9QCFdt:7j$;_XK>T/Z*n+Y`S-3W'l,>N90QBp0Ai-*:UF]5/Z%&!m"q6(`A,6\&oe_b!9no!l-E9/2G)F$jZ:Uc.@F?u7M+QC-gNgf-C0;6Sh^LQ[NU.'7mueW#3S1KqS12M0K=":#t9PC`a=>:k(/\)(kCDB<8]Wo>9AP2YF;'dFK7!?7OEo.\=a)I5?1U039*)TV>0+n;Gf\34HRLFA5uEa_MXN&Xgb2Mk8Z;b`bEPis5YYscU-]:M;5tq(q=@cF)+l97>+4E%buOI0:"#;++GB8?/:)_2i-eO58,t]E:`3-gqKP941AH_RMjOP%?Q]aVQ<1sS[bSQ]6>8`Q3jiP/WcN?J=LF=jQ1-54:UB7'8=%/4qnVuKc2?lf#%C_.OZ_l9$>`Ri.2N`bGA$4+b@d..9'@sTr(El[5ASqY7j6.>q_/`hFH9A4lgX!R_>oI:2l?'qq]'LFFqbP"gcS^HE@Z6.Q+/i.M#.*-e6',h+^UX&#)ter^6Cn]CHN%^HtS45HtVGD8k4d[2!I-elJlS=Bi&=@Vs*MR=17/(Rb&X]Sf4[UO*mg5<9QCTG4JXlqermPmEl3;AtB6k[d&Q&I3nk)?;6a&Er2KTU#_3A;sCm,=/[R#1AcU:i/[QA2P@Fb7Pk#MM06N#S8Ud$W4,d*t>8l`6'WlR#-OY.6]:W`PLPeJ/D(6R883Tp\l?NQW?@[`D`_6HNIrQ&POMR=Nh7o3:--1[adJ\Y,u;KB8A3dogLF8$I[DiOI!.=\_pf62Vc"C)=D&sLb(&eAi_%bCE%;7%7C\gRqmSf4;1SbJc#SUVa;+4'cI@(-0O83/Q$>;qdgs".9/`LWU3><6DTW#q&'^MFe^'="l:o.nT.8rOs"#Z6$45m5_!o]D=C#6fN=@&tXW`d^LeTm#`EG[eU]c85^IR]bS"qR;8`QC>0-,1\XVQl,kNS_[^jZ"Y=71E4'76(quV.YQ%Nj^$`YNT`%dnKBDX",P7iT@\aK_0Fe%2Iq?+h2+FA*@!#)R!uVVX3"#'u4nUt1p1&='Za[hp5D4DFpAfP)Nt0h^HD?n6r"UP4Rab_#)CPtqc$"&0D;]S>$+C#F^#kDD*c!:WT/*IV$oZ*n+Y`S-3W'l,>NHtVGD0<4oU;QpZf\(ie'=/gFQsoc83,hIN;#,`<)$!]_0UUsq<&j*\@A"?(JO(1T3b\k5KJB,47Y,YE#a?9*+CF5]E[(e,bGS`$W@6.$+^@&3lUqho[QlE6_6d:g9uT\p=r7Jbj[Qd3+-t7\ZkZ!Y:bZTrD0#bq2SMSPoPBLL.h@f3ghEXf;UKqjn`^ZZdNBq_R]MsWop)t"M(Tk*o6s/N0=8_oOd$a_/>q+5'X`(b.FeTiW42BbFd[t\*A7BZ,gn!!k:\/Fus-e%51N.UTiKhPkUO,DR*/qh"`Vu^+\OAcZ=CmjN`8S0=0AK#PS#\hH=<)`S-3WQ1qMk@Vs*T/Z*n+Y`S-3W'l,>NuhR,o^2W=+LFd!n=q-!Z@[SFiG)(\'_ORskdG97DHR%i7O=&HX+A5=%d80+]&s09EA-Jo[7iZK2?oTB1W;,nf?@@prsr!e`A7+J);\L&'3%1rfjh)XR'ZEA0Q#KDAiGhAaBQ<#:oC_9$M]9$\>6hA2iGgru"pTc8WGka/?d,C.FM_+=N=1ak(j]-q0XMbS0-$Be6AIcjTPhLsL,?0q4L^Fep+5tYcgXFS4s'676@GC?)XI(Ce=_HV"t_rR,[-Wnn;qD@m3CO=WDuO3JU>0mO#iNPr^[M>SMKEpO[<@P;g:G\$nJ@dTN8*YV_s"XA-("IIkioD8k4d[2!I-elJlS=Bi&=@Vtcs%r84qHrsVO_o(3nRu[bhX8chdC('_f#>5`rrPUhb[FJY135/AB(NuVs=CikrXpY6);uhNKT0TN7JX'A%ge@N&aMi/G_Au2J&CiE!*1FU@;[h1QH/#oAm>=7j(I>q]4Au6/gX-di-o5jaOD.'?d_trHSZ2f-.o,-Vh)n3L71^B<)r1s\;eg;cuV9o347S2Q9LW#)b3]lHMd4'[MDCK[LLnU_n!AZH(iPg]uf\6FK][pBT>BiTf>?+]7&nMP$/br(>CdE?sB;hnP6<0;AE^4cT'DCfH]*E6BHttZD#eHMj)iYmWRLIQmUke)Eio*8!V,chM%BXIcBPUOD8n`-E^nXClU-er%?ZlZ&T^C,Ro^o)T^J>+A$+F@,eLOa)=bKN.#-fT\Z$6qX;@./sj`'X80iV6/JU:[%).m%3[\mMPe&oUSu?S3H"^luH>%%M6$'B[6V@eW&$;r<%rJFPBQ*M7k`HcE3]*'>3]iSQeZ")e/ui+c4Zu2OY6+RsA2#tcJu\*R(jnLIX6WEOT/Z*s3EelJlS=Bi&=@Vt4H^@?Cf@"2up>HqVSk!(o.XhHfsX]Sg+/]6;"[2!I-elJlS4O,nbXon$O%;RIPCtSYULUGYkk:`bD&!%oV*>\#AsFGhIj/L]#D5JX!*)J&Jk@!jP0EtTcTVh2@0jr-5nG%*'.eUlJS9bIFmV.&h[bIr)?(0hs)48H:OqeI!K_0uQ!?o2'&9';hZ#5aqBbg4N6[fYmWco`!YNC-Ws&K2REVC"*1LPO+aih7Ar>&Ec5`C`6<>$=Xb!F"5?[6693H\[1#_kVAiFFH6XqkC,Yje8T9kjD>8:R;-/]4E&[H8lP3Qg!lS_rEoe-&*e.L!\G\#5rtnOHs2ZmHkoJ2"VFC^#m\M,4kBM#H4_/""mmF)Rc?5r\LhVnQ1^0G%bQp5nhf(m%CGu6Q=E^KnldBU;[7^40Hg6XmIIpOTF/sN6pFT"n'V4;2:%m,W_mL/iBJWmV\kVSfWT@hHmaJ^-2]HL]2`O$k+[SBk]`C(jZZs>AXX)?uN`DLldK#\QfHEh^h*8UC\=^D:$qF%1Q#O2`,QD?-q*fL2T3FD&-f!21'"R2c=`6F;U[1ia+^-3f3Q**RU^=N\2o*F_`B_FSA[]SpL65d,1aO-iHY0!DaeYj=p@n(jIN_b/unmnmi"qhS+`PoefRFFMP;L`G>N!SaU9n^[!_/%3%3ArkBB&Bp`p/(Rb&X]Sf4[UO*mL(,([Is"jtZ*n+YjZT]I=Bi&=@Vs*"]k"b9Mb#Zd3D=;:b=pq[d/a8Q(Pg_\+SIg2H#$rl3tW%RoMjK&9Q=:^+,r1?6c*Wbg@ir7bD&9Qo=&/FbSaM.4$bRK?FZ(M"#g:F#P0Yn!s*rd$u8,j')@D>,Nrsr4W*s^7:@q#@H*))Ca@:K-CN4_`5]D6$";:Gu-%sgL_3$NlK`Blfi+8c6#+e4InpEnSYDHjYa!A#H:(_Sj&Y33sd+'`=d+c6*oW3CBo?c+4=bm!jZLmt&&sr`i7&n0#FCld5[nblQIIa8P>nj9`XcnkYm\_na_YiX%>!^fcAX08/imfc"C6[6shd5'Zf!3P6G\#=>*ee1(Q6[NrS-K]@EPr)G]R>27mcB^#7U\LqPkK].W<98'%Gks`V"8)5jaG"]%+7[^[QPni>G1@\/$r7P[QL;Y*\I')fQJqXtB>?[*>2#G(@;?P(dR__:/Zim:g=ffkj7X_k_$u?=1c(kL`W:k],Po846WO;qAr"R5P:Cgr8\/HGtJMW"+sCK-Q\km(kedh:Z04=!5*[Y)AX))5UKE]>,;==N(,tlfiF]&XB8]3@DdiEd>#%DCFdt:XK>T/Z*n+Y`S-3W'cT&IfGoHtVGD8k4d[2!I-elJlS=Bi%=_hQF`LUGZ>D6$Bn(;-iemSNe59gr0L!JH%Yab%>O-+LD39*hpN&6,B#fP@Ms66QaAY-$d.OW[kg!:^E()?n"R(_G$_5Vs>^DgBC^7FZ5u)s4uRF>V598&6>:(p(J:&(;2)@Id>:N(rj$e$oD7O!I)):)TkjpI!g9DW'5@UJZTi@"uFsXgg.ln#$W(oRL.a2,/jAX-qeTqJ(>FR$mpZe'he\2)P^#+5b!5dFZ=K0i)^X@J&BCL\G_Dd$-@;Ppp0f*i>gSiVgBtnF"O(]VRDNkKV'ei,3j.kO%[qGl&!-mo$/5AqK8%3%5*iF-TBg5<9QCFdt:XK>T/Z*n+Y`J+g@2Fek?HtVGD8k4d[2!I-elHV>Y[MVF@;Y[MD+-Ybohjl*KbY++b7cSE\,^m-go%ZOp+.alo<@^i6e9BGrmVW@o@0C6jPDF=_Xc]LLR"^tK<;rSnclK+/'G!//ZMuY'>jVB.L:`]BXb"U&rYhdQ'>B#!kCW,@Yp2>,GN(%"#k"%Zb"b5`!WpLZVpEc>hea9Du-bElmqM1eqG'Yh8J8ig(4U"oAC3$4CXEi,SYI-H>a.Y*<$Iqp[o2BgAc[#pCH&WpX+Dr#CGB[#::deCeTeE0uOo<#_X$'"G-ZK"uY%b]dnum:r.m:d\Z]p"rN*OlS.tfHhmKnf6+cH^"1L>`O>YmjcOrZ%)[Ss_`Z3>W=V`T-K5Rkek3DC]TTDC]TTDC]TTDC]TT*fn@rppdH9XgkLCXgkLCXgkLCXgkKX4:k@fAb@dYAtYg0#26Zn+=m7!bk1:WklD0Zm+VV@s*#@Ss"iLZN:lOkdI)E:enGGkD']W/XTWq+W^ef^Xe<#N9V\]2b:Jn$0?ldOB-TI/pfgGidfbJe_;2P%"&:'n%sSj-20\X7P<8Nd@I&orgttB\QCEeAX"PWCYXmJ=6lTds/1u$0C;,XN72,I4M/,fE]Q2O.AI!Pa9'm?9W>4!q=USb3.7Tdhj5E.P%EF!AVns\19QBkQCXEAZ&T:tbJ'`(p#d.udGGB\IiVFD?W6G_(sf=mPb'[U3PSJcFCN;aOV+8M*7>0hNUHKG!f%EK"#d;Q]q3D(bbDoLc,G[GgQM[aVoJ@p-D3,'b"/(6'D*\a>p^M3qM^2VpRf/F+i[j46SN26H4l>+TLACW/ktPo!1VZVg!o^9P5a_[YC*\US-4!6$1U*\:4<0>eV!bG997>='n2aoaSdja9514:BA-YTJ*eN)IW*YUK7rtU4Q-Ad7Y)J.8U+=bnG.J8_ohm9V'2$Ti"^&;JAObg.3-#>4&8J9hd*s[\D.[p%mrC,EC@IJCHY"lm@]sdc`%N>`q*_rUS[V4LJ,;oMGG%SDp4=W!T6H?Q.DW*Hc/_*Hf&&T%ZT>I^oJ82Q1Fo)*O$X8T@u)GWahA)n-Qk't4pe't4pe't4pe't4p=a5_#agfE32gfE32gfE32gfE32gf?NYO14Y!>Q)+7Q@U[%:B.do?OMk50rV5+6$@u5%!/#0lrb:f_QCWesR["WjS@CUJ.*3MIrJa;0$5]&A40Ebl1@k]?%f3kLX"mV"sV([nD8a(0Dg/?ZtN=g4=kZbLGRZ^9Q)VnrLf$mFV,aCB,[D=1ne(.Jik2ar/:IVC`P0E0f24\#.k;\VbD.QIQWHVBaBnP6;`fW_LBiNOWE_.LKL6PP#WJ@K1P%m=DgPX&3n\4_,XgkLCXgkLCXgkLCXgkLCX`urLDr]ldijRjTijRjTijRjTijRjTiph9+NK;iZcYXu2\5)4hW3(/f"#P1[5XXk)ctJ*Ji-TG=WZ.Hlk9,!V-RFh[Nc=QJK-9&nihR6XnSe[+'@(RPdh+]*CuOZND/e?\+5D$^"Q*LsiSL/sE5uNSgtqoIGTX;F1[^9BpmsS45#8dc>7f,XIOV+8gC=d<*N[L<#fZ&W0O/*N'U46[a]LSPGA#R6)P;k)Y_Vb.#ldR`f.J6CRiF>U`W@>2W\YOD4H4)Tm>"S#'M'I0*jH;ttN@7_hC40rqnP<0?<]hFaBE#EC\?39C\?39C\?39C\?39CGW[$cj5[T-[c4aT[c4aT[c4aT[c4aTnT_^+O5&sK[T[!?!_Or"/6tgL1`9r"c8Yk_c,3@adg+P0%?QrhJ=+8!Le84&j)biqQnLj?5tj[$KL_?F]/UgYGS:C%m#MEBNX:7[n2;O",!6r5Pa*g'=pnd5hSQIl;QIjhMo:Ge!^2,f/<'WUMU7'YL$U6.\@dd&WD9O\qL7S:F=P.iQ+4TW>Af;_F;$C/V$N<%:CVU>hhi=8Qc-h*e`Nn#h,>k)=&,5#qG9W*JO\oWb?skhYLpU%__tA>uu5d9dfS78ZFE4JbQ#Z>U:W5=f"\.C.IhU72g!k-W[-!m7%4O[UA/SL/'L;/UCZ+C6#-VA\_R%luGSaNn!MK^B'rhN=i&Z)p>RA^X/)X!,,s2Ia_o&r`5],%3ck#c;A8GcZ1tkR(,kY/g`ot,"qhNltj-Z*X$]TUY*9D@bD3N^!G>kY4N]sCf>YCXaBq19+OLlm,O*a+u_B*ke>B*ke>B*ke>B*ke>Ocr#hT!TQor#6m@ob+$YctD7"f:>-eCb?AD3IfF1_/X?I8Eu!%Jm)"crG0QIT\bnkb[8k81u_aDLNTo>^[m-Sco#Z7hB+l"CWqG+Z6Y3U=7iS6W,5+7H[#4JRaiV`'+Zd+:!+HE:JVVi$&GaXFh>:Q1-9/!hMk\_W/]=+g_;uh[>Kt9>Tds);GZR!M;:cnB#sV!Ea3>O"VRR5]&qk9&H_Y;BnhO.gh7kATWT?TA3I-)nAIZ0B=NN[`eUrQRetr<,,Y!aR)s8929nZ[A9%>>a;q_m,bCl?'W#G8%#a+fe#5WWpK&`4?Gut[@EH9I:YT_oP%-K;?G=>@SL^I_:mW$$*;C/XS!UHU1m#]3@D&TM(E_RCONTj-l4#8_7$);='T+i2:seC[&/IWgf?NYO8$'&D8gA2D8gA2D8gA2D8gA2D8kQ*GT.a6't4pe't4pe't4pe't4pe'p$DqD1(,>?T;sM-Yl@V>RrE`EG4VM8fN)MU:(/=X';6uU(rP8lCjl`9IQrmgsSZcYR1_XCEXoN(93O<+g8*cii_'iFIRmojn0IRF"8@oV$uA4.O"b9(qd==!$Tqe&:OKh`5LcRlhD(uLt0DtW+$$k'OF=ZiApBi,THX_bMcH7.JO$XJ_-A8TXMH'3#6fFL1#7&)#O)ki=D,N'0pD'0*]uA;!PNLH67GRY(d.?%RXCA;,Tj+d5_[t91Ae6D-Hd;pYjLYbFA6arup7C>RF6Z5jEL[IiSU4f4!d@Jf[U.86/9>/&#]npW(O(-MsW$S8]f2<,ZW<]W*J2Gu;VVXfP.!fF3^GI-m*_3!-2#`3oS,Fi"nT_^=GMH6SU-@5HM\eJ6ji]gVgi#-ao%O98*a-DH42OYJIGjkL6LY^24P9t#T3F[]\#!KE*Sss,rb&=knIsm\@gdO)h\+p3GV+dEjg3!paX&omPSrWNGAaGJ"nAeL&;ECu/+q73#f>bi?f)O*m0^/:?H#sLD(7&L4+jQO3W^%=@6#RVZbF,V)%1As97rB72-V4P/jDh)B/E&mb%dXM=K;M]c<:aOMuKMG:E/c'@Yo9JqpqPL)2fM"=%;Gs9h!C\/$pRrZHqW-n5@d*9KmS'7c3KZaIV*9h.Gq0qsa4lhu>B*ke>B*ke>B*ke>B*ke>Ocr#hT!TQ`GNS2`GNS2`GNS2`GNS2`T-K5)]uQ>T?g^n9B+m[_TEMPQW?G"a!=&A>_i;"2jbPkK\=2TYgBj$Ak\Mpe6r`=[sj$_j'/00ef#l=Ke_Uo)!nP^Sh;N1m')2CE[SpgZj$#+\&)7$/$q5VKW[3pk\.2Up,WFlX`oN.H<6fo)-X)2TVb2WW,[KFE[ReD*/2O52_^I9JmuD4UhAM;$b)bE]pAr5q(N``#)D/A[M@&W[\?i(*cg#rkk,J"L8;7UDc%a;;M\X^d)@*J0F+,<'Od.St&Qp$[7;np/U+=u6KG],HoV.S5JM&]R(ZhM)5tU/fG>HLQmYi-6#jN-#DP?p%^C>MM@rcZ5l?DnH(M+CG14=<%b#&1:ojDmr)cpd`o=]E's3u&"6f/#G`"%LD[h^TA8g1^+qo2I>5/l.KkjU>%naUOkc\')/)$pWotP%RD8kQ*GagI+.rHkT.iPl3[hZ@e[hZ@e[hXtEj/m[`m3l_#AB8=WpQLgaoNtASY3Xd&6'MeTL/)Kji)+hc4pc,:/IlN"g04XiS*=>\G>%bFS?;t7U+-[I=nu.q!r7^ke%Yl&d8u_,#Z`kW@Ko;l?ho[;m4tOYOq%$*OQWqHDefW8l?1OBq2Z\Lb/5364`1VS*8ZWkg\WrkN!]+d@KNU4XChkiTM[**R:AjMia^[RI3EaSRRRBB?DNa1A[<0DGopsBgu7**mUJkUTZb-"mIh=44?DO:g9ocH)GDPNhaKp)HV-\Da0+1oqLjg8+\+#hc=h@qF*mB:;=7$[%KlmWKBV@V*:HMD7(h-SU!==mp@hf.rHkT.iPl3[hZ@e[hZ@e[hXtEj/m[`)TX4"c$re=#4Q#%i-dNPhS*e&E,ZWSaH_&M]HN4t!m%@["W&P&WV%/+6"UkT:cl3H\WSRpi\g(%OEsH!%-QI/NJb/Uki0nim:g4A<#brJK%fBaUEWWsn>>]BBb>DK3PUFB*La57.PdjHM[fXY_5[DP>6h;d7YSP\OcFC+JRS41PI9m$(B9ctdds-l.4:H5TLq75(dn,@/enF;0YI3bh761D5+43k.Zd9LVG>:.[m@E7_T^4,kkn:="Ag5ZF2:6I[.-?PHZ8?M#VY,tF:2VlPO#V;USh'n%I:/#2i:O'0lo-l2IlI8IKceX"3,oLm#j[\EXq>H*ZWB;qh[k_GTZKLA!iqA#tN?fgl[4B*lp\?39C\?39C\?39CGW[$ch;bs'[c4`iEEdEeEEdEeEEdEenT[1Q]#S[\Bj30k/Ag\gX5sL5d+:RqBbW=cO2L>"DOBnK"4I>fYh18Gp?m[??4.TEfEXiX\%k>:4cC*BK9G8!Ttk(UjIb<>h5*#;C:A`m>&+s1*e]h;/*LkiJDNbhV9TPhl@o(Znh-nATn,t+_(\%&hKra&Bd+-k]"+A&-n-D]]Nl/>B.seUu7M`[RVJED79s!fr(%&7G^$&A_6WX>eo2]t!C6opr67&JBl'35OZ(D2&G?;3ph%YlEW0+CISQOkSF#lP_H:j*e>NcF`C0M.jdI0BtEmq@nH4>&OOrUqGO2p:K5Ahuh.rHjU[hZ@e[hZ@e[hZ@eO2p:_He_ZWYCUlG&>Z3DKt2at0\*oG-3eY29_TSFmFr$IrO/q,CBp9J\%k=j$^BQ+#.eT^TIn4hnrN\MWCOFJWRLrpRKR,qSPX56]leMF;0NS?RV\Y!jrh$t4%Y4#\\\@cWZ7_0g^1"',e[#\iXBD;LVTR(K4:B%jQ]Klj&'GKF#sOXh2?s3Spm?@qY9me-76ak]*A++b+2TuS(1"ck>1VHIk>n0pUI?8XgkKHgfE32gfE32gfE32gfE324PmZiD8gA2D+3KnijRjTijRjTijRjTijRk:eidoO:YY17SgXM&cOif#940.uLYh/*#emYVAo"K!Y/*e&nG'2+l-01Ce`"9ihI$k"ohJnr[>3l_4(tY#LXnL6BW?6+L.WhlY7R_W*2'1Q)6++#TgJ2NAL/s:pfLOhF+KK@2osHnJC@q>3-?_X4MAVJeCb@b]mVRg3XCo_'/2L2".O`lJDQi'f;V?u)KA0?:=o[2nG&"UL6mnCD^=)Oqfo5nWV%t013-1iNF[R8*:e5s1!;k$>V&@QV$$H\e^dl;oT^?M1.4_LdU>c3P?M#P9A44>tu]sOZgiH0H@bp>Cc72KH8F,:s+hYiVm*BEthoIg;gEf/^ZUTNalQO_KlB1VJ[B:u![e0@q-Io23R=YmX1W#Yc/dCZHe7F1o(Bi%CKS`uU4C0R\97;YJS9M))3(B"Nff9G\jT4*Zu<>(kE)Yime+&(mj:t5B@QZ+%3UB?&=:K;.?EEiBGgM-cgl;&`+kJpXqK'8c%'nP5GqS3eAA&C!,;%>r^-*T-c.P*3fr5oAJIWYBOeA(+k_sF<$>4@"/EEdEeEEgi#XgkLCXgkLCXgkLCXgkKX]QK:iMVF$CMT0MPD8gA2D8gA2D8gA2D8kP;He_YOC+K+]0Xn=ho`+/[=Bl"-F[h1k[fD'8YHZYr#Euie0K*SFUB;"aqs[\NDfLJO^R]=UgOEV9m4?c:42SV=Hbe.F(J^P!"_u5!^]fdIO;)=.a'AWPQd0H'h)kT<2_JqJCTIJcrB\9;@ghY\q]F2N4CH5'rs,C>LI%];8dept\Bk[KBe(PjGr$&2XZAQ@@A'M7qF:`tot8h!D(BpL9Jo*jZ;lpfb"aU$l'mZ=CXFjS3aG2C:03aY'V^DVm%TN8#17*7[@?Be"Wb6rP,%p$T9QLpIR&q=k+%X1>Nc^]<+PmfcHE2,[)'hX[\E@fl?tMC8gCY*c?*kmD(Bp);/`.YU/-`>BrQ=?6U])ESa"gp3eb_1Nn;YjZb(8MajYUa&M!W4--4I9d\hCkm\Use+PhfJ1Yn4hdt2>]q9%)2h!(_%4h()jNd_2sn#'+PJK+h6I?RJ7;5;OXc`+&1cLcY:L?I(.>l1-e@)+/VgL5mJ(6_CD+,hu(SjjL$05AUVDp-0/ATEp"S>-9K'oFiE9nDY:7Qm09@mT`C^B/fIOkD+7912Sf':@09"f^TjmmloEEdEeEEgi#XgkLCXgkLCXgkM4c/Z7lnMW@E.rHkT.iPl3[hZ@e[hZ@e\(/6=gf?Po#01TRBj30/'3_KRoBcK"5ANJ?<80cdZ7ULA?TC+FV(W09:e7k(f>)9%`/**m2]I:S5:K6$TNRdR8><9el[C>@mKM:?-Z;+AkNF:15A*>,#U9^DrgP(Q\rLp+O%?88.C2MA%8G_lS\_E!K>CVX7*l(qpj=QTVX4Ke4R=_%&9ZZttKHcJ`:jMT:E9SP`Nk.Tcq[$pA$\=S(<"&Cq.`F",OO"bH%DC]TTFkg$QOct()RgHj't9GhDC]TTDC]TTDC]V*J+^=RGeA0YgZm7r>*.>W?!3a8j@ogS->;T^JrIX3:iUt8kT%#rH]/-P[-rak2G5a"=i5p/&lL?!KuC%,^efXmq"jq*7QRVZ\5g%_k83>s4p[_(Q4P(J#946O!]HAE!G`(:XM=l1meS"F3OAtXh;/XRIet3$jW4H;7m!E=e3T15[@1&`c@XJF\V2*o(N":B$r!4?d,3Y(d!;\^EL<5`"_t*_\jS6c4!!N]?cf6&.&2TkG:udihO/9/pfQZP,I0/397?OAAK#JbVfpOX7P@@kg.G)52,-dgot8iOVI#4PqLY;gkgQ1hZ+l@%1KU-$hhgH3,3[C/cOkY5eWdCPUB=(PIfMSUPo\.d5))_(nJdsBIiq53%[YHFnFEerAUc!Uoi.-:)E26C1pR'$'"UbdbN=P%J@,*?WR>OT15gZj'2Q1prSM&e55nIC&GLuR.]BX+9+BP*hZ]2HfkXKJHRnJco\d)iFu)$ccH9!FZ"7X8g*<@.4B:[J;hsTTV\Le5(55ZZ+^5W)Jc"VTc-+DZ3p-0TRZ_5EW9U#pQ$9&'t4pe'ogt*gPXaCgPXaCgPXaCgPX$UpUI?8XgkKHgfE32gfE32gfE32gfE324PmZiD=qUIdA9?70-VnG++27(R\7VV#!!!-YgR+eq8[r8PbVGkZ,I(43eZo34!;`FIo-)[#L%BO6=62k$lZ6U=R)4KgDkm4"45M-$bbpcd,&:B/[]cK?@MrYlg1:T_&d?l%mk](cqnijlH4f!K2AO3!:+DN#<,/G[Q8as'KSq$5],%1g^eM`l3D#RNMKHjd19%e8ZL$m/9B*@Xfo/iN^nN2[aKs_ohFb1/G6q[j-OCR>H+AE;K's=/BSs?XYfH>9sge+U)C^.asApNf$m_=dqGe2ATS]K:4(BTM*@jV@e"L2jehCmLb-+S41,gZR>tFtS(+81dFub#mhmZ0/\oNGS738"k@ZubZ8<(bF47A!3;8j&-"1M-!O!)hb/s12*K7:M_&rG9C8T6A_.-M8hI%89r"gK/$_"c8u&gQ4gNRAelQ&o!S.,0d=#354>j)dNmsk&8%H"([\BbaXYc25SN2h/*gfj3Mf-Y#Misk$]uS8m;ULO6AQPKZ26uE^iiKF!EYMYu+1&&#oH.+NiOVdK6$K0p0i7=qCQD@8Q7W%V*(D=ISZ5`Q99rg00pX(8lk_ao9U;:(>*`aC9.TM,rA+NDB-4St[hZ@eNSB?FMVF$CMVF$CMVF$CMVF#tmVuHN>B*lp\?39C\?39C\?39C\?39C\?1#A*k0[tD'f5ZiiE+LnW,nK:f:U)D'gL'-Tf4fcYckOh$`$^H_C/d(=6@b'p]aJ^f6X(N:lOkOj8A/DVPc?7SDt2Y^q@K/*LoZL*!>+`CagPL9;jB0\+p/Z/-8MC@.\%jrcK^*Iu\KWfY@DTZ/*Rkmp(*YmZf]*C6mTIc3k;E,gFBfAbc5btp)4H_Ip\#H4cE-H:SM\E^JR2lj(EVgu?dI3l;8+u:UG1^`I47@#q7[DB<*?t<+SXXU7!3)\X%iNl\?APSA9]uX(R8pumm2jlI]6WG&4V,!efep#u.[_AOmVma1%WKF#3on)T'35&[j3GgW+2^q767IN\.Xlp(WI^+@ZMm9<)eBdk$XNZX?o$f?E9ae#2I!eWuns0%KfUsoN4M#k[L:UStDS0B*ke>B*ke>B*ke>B*m;eidoO:YTXSirf3fp&DpVBc6OXc-U@nKrgL`0K$3V`Wu7R;O]8f7;mt#:0SS"[Xb'CI5'Ha+/l;r9pRK[Yoig(XIuakk\[_^Se`:/P"a-=(-3B#TY4ZFXZZqa[J%sL,;`@+[?Zb=\MI2(S=ib0f/nMV6msW&oE?V8=Q]fi3UU;DF9mn697YJM6c%F&$e/4j_u9'6g56r,IL7KEoPtl/ZbB&[.'g$X8XkuECW`Ku$7Lm^]sc?;+EchReXE?I=_l/4F&#ebK=4[==flBW9IcKW%UYRUeC_DJUeXG\\IVtfa1(*SHj*g;Kfl)Q6hR:c'[)/1edF0:]2+pXt.LgS0,Me>5@B,$4SgG<@BS=e$#+2GDKSB_U+ii+:FRDZ7E;LP)eeqkqUB^SLX.dj="&hZ4n)SK0ENob$K918n%5O!T6eT"+?o[F$\2ZkGOi,Q9jr#^-QO6+)YW0u4o;c&&AY9Nn\2_;%iY'TAmCB?D?YS:rgfE321i=g].rHkT.rHkT.rHkT.rHlo]#S[,D8g?\j0msUijRjTijRjTijRjTijRjKHe_Yo[aigK19@q7nfed72*nig%Urp1@=5utAd4pKo;XU=,%Q-iTo5KH:7KdmJ`m&;(99af^OKs,8(b1:ZIEu)tn3A%!U:?O@^9Ie\R&NfN9Z2$U_pKka-TVC8&+B(hg%&iT<`LBs*!CeoKtj'*dc[U&:#hA@jff^9[q*YFgT$]G0RE/-9%6[+M"qAP6bVd9U,7B)C1C_,V;6E.:)N92KR]-.X'o&HDn0\9,,o=`[P/ZeSD^sPLS@:=-VQKMmgIUNP3O;!>\J'>F)\?39CB\ZYDXi=(Zf*e]AfgWtiP35A(oP@-KYj.-Z6BI$@"h_+Q/$,%q9d+osh27l+dUX1/%)dK)Mh@3Y(KpHJIU$=>]<=6,K8"caGW,rFt982q7GL.5'OqUYkHisca4_^8'o-_OqlsCXHi(p!e`9&J+PFa8.CkX`=2IKA5>COnDH/>179@Ra.h0#?Q5BIt$hbJ'ps+>fBNDc6u7fB]-6[L>28b+YZ*'MNXF#F;fl<,8j9S3JG#3SO0_A>@J?^Y0W5sPPZ4&E)KH=DSF;6)f;ct$gPU/Z\Kp.V]?jisBf$G$1uCX-/>EB^$Fe3CPDS^$'3'$DkG(G9u@.1=(YhpZFg^OMU"Zs>%E56?MfWNp12?teKg6V(+.qubX`Fg`=p;0#ZcgA-'p0.liqd?%],rcr0#4<:Zi:-P13-ckj:0eA8UT"cM]"4PYYRe`Da'`Lo(;=*Zd0%g@'YX"/(FSjW7B_^8p&+Z$66fUH94+&b'C2,W?`[r[0s\Wp0`(3[h'Ootn[A[c>k7;LKnjpAHe-pGAmY+Z#YW0uPoJaWl?PAZ7`k[,0(4'.6TrKLSU4W<9]iGXql<-U;nN6Wg>6KVbOs=D/B1g2^W,2$].$g;*XaX=uR:Z\qJLnQLMhMmn^d>B*ke>H-YkijRjTijRjTijRjTijRjTiiR@Y/eJHqS!N<-mA[Tn=2%2&WP=#-JPh5Ro7SYPR`YCd+]H3g-$R%>]&)P@i5]BCL"@_K>5ZA6+M@a*K$iVB#XVD`lMb/p:F'_<(0`HSC$I]JM'#[Dk\W7pbnX]Erc4F2^.>>$ZJ=@#;sJ'E;b_W>k:&fDGE)d?^_H^WM/h6aTdn<]0`0E"b\lt^j1i$@*"-)rsL3-h7Ffaar:2$mt@RJ!:Y3BYP'%K-%g>M]ImnD$A%i2Gj&:5"meE_/r$_bg[rVCi_("1aU"d9.DJM,f=(i!mEU"_*VW=*-JK;\[`TFQY%#!62gN\DCaR5`bi\3`GMH3gPXaCgPX!f`GLB*ke>Ocrf4)QQd.rHk[gfE32gf?7L.rHkrgPXaCgPX&KgMpHr\ZM0JT":o'.Os_WUMCY!]-j<*e-@RBK2BtB&#JrN^9.]5W]HiPU)WY4?'(sC5u*Q(IG9+4r1gGTpI:p$Tr`8q1H>irP&.]0-_0g/)bk4rOHrml*=UK5@AMDqC%0aj^?tq*Des[5M1ZUo8654YaFp?*lb@fTR00KM_rOr`LD>=>ZK3j0&hVAbBefX+<%p86'T.=QJ.6/@l*"G6>PnesT>J`CY*Urs0s+?kHIt\hS:-iK$)#.9=K%IGh;H3TO=Gse$['i8F03nV;;jTh0SNeW8131)@WJXNel=DUNYfnNUrX8N#S[4s@>'+7=s/R`gG)Wi;[/,Hg7[c2/H\?39C\?48#>A`B6>"E@MP<&C5)>?jp9(&bQPLe=Wd5O492X:B$5/d19[hZ@e[hZ@emjjCPMVF$C8fbCk-LRpgPZB`2F.](EhmBBD^03a8D+u+#e&,h)*`1laI,ApJEEdEeEEhtId^ZDCD(E3i3^"VaLZ%i:FjSf'%L"0/nC[amj;6E7D=\lL2YBF(VB0c8)PF%A)j7OB_(RJC?3DQAH@?O'k-mZTY*@BF&,h]GQ\&R`/qbP&6V(Z2"=FInA"2HMLBd5YY7VsniFus_4F&SB$n@%5:NF;K9dP%t.YjKH$ukU%*j5@*!_(]9LP=[N>m)OXL-nID5P0&A!aUGL:978rdIZ=o\()k`!+1[9NS^lpG[,7,Z+GA)D>%>>L^uSreZi%C@U=3nqZBlf3u4f!Z&AD:'8^3ZQ5krDq#.8KeR!fK%u"jBWE_?f'6_SEPVbF>WE6J+g8]+d0nG:74aGpX^>;!?LQT@o(BJ8#k5j6MNiRR@ei9bml?J`:"B20Fu\F9L>M@PA"QTZJ>7mh_9@il4"JZ6P563ED8f`"\?39C\?.U-D7/e[mtCPs^1f_!2#$CDjeis)'t4pe't4qHk8h#H[hZB;`ji/%^$hLg?edT"#G1(lICB%fj0msUijRjTir-OM[eb&Ld7GiCC9,eR>%ha>!G>IEaOf$o[@I\)2tfOOFXO]/T7\LE_P*p@'DqqF+YY)BJg.M9q8d-g.Q0S5IN'Qo[Y*D09+Ve;$tlcWJJTJ`&<^-+mh;-40X_#=I&M[1@288gZr.1/&jgBlnbXdqFZUWc"BNAk^Cn'JWWK-$Y4rdMV8pH,LP;D0Q*I(p5aH\jju*aYaP*Om:VqL0.,;Xn,3LfT)2sr`]!Qar,)0#r\tjE*-ui*-PX.g>jdUl]h*XHVC,L=(A_.6p\FSms7!;\@/f1Rro*\Ol`efK!'3c\cqu>2$XpbT-a`!Q@TtJ/[,jYMC_/F)l(P5Z)!]97T[o24ebX)aI?Qi"l?&FjSXThK"W:.&T*?%@.8Z;!"T#J2#e.-m,^Ume4F[iEJt>0+@!'bWl@6X%hE89sY33U\"Vk1,Y,@;c;m%X*rrHPbZC+%#m@+,GC1%DsL.0N%BJ-;.[_PVfLl"Z-#,0O+AXAkE/6XMH0CcO)fDFTEn8[[J\ZNBD\?1"g09+_DgPX`XA*1GJTRG;Iq1ee$Q`iXoe[>p?P^E\T4E0\WYn"5,RjOCVi1qWAA346A,j70Z(NoK,U"GR6ARcQL*M#*S]KKchm]8Fq<4=`8u;gZKa$`WBWD$P5(Q:>>3?:"78H-(U[s+@h%RmHg^[H%jMX#SAC84DqPL)FO5*dKNJuVLgPXa#:&>\ZP'B)1DiOX?:O4j8.rHkT.j".ta)/e4`GN#[I>\n54/V)_#D\LLkmj;c\k3$ruqWlg^&Ql&UNrVoGRd@Wo9o>CO#?[!'IE;!_(]9]*WH;Hna@H08*h:5JUjf4RfkO%$X__hV$h1+W=+&'u5YViF"M86$HBXoF1H1&(4K@*fp%K+$J)Qcb8V5e2&XUEli>VEaa"WjZG]P_>f_*Z*oC"?KYar/Ka-0Eac4!$g(YK@C@lmjr2]W[P7s*)D`Q(6Qf?n(.1f15#dg.JtXk#b,"UF9[IFM5]KO]e>1,M@=UQZdUOCI.i,EhL&BFg-qK;Mo^jP&9pFYTT_Lkc]XP;'<#[=n[lXSX+jV;Xnh%e6#!c/_CIid7#:\M2+PLEL`:"N%N]9A(UFglG^E;<8>=.DMit1C#+5ZeKJ[`@"nCm%@]R=f6K("!%8Bt]^ch<*MSGOud:$;Ag9YN2.c/]5!)#=qTgrgT%+_>hhH7B4)X:4VL0F(c8W1_oohT0N>O!UZ]Hi>1Ept6dgM1>@eR.6<'[#@a]!6[BKa6cW_F$"J44O_f_RWLrsC_i:ooh)cZt-SkgLPWY3U(7Dl0^.WG+NK80IRi#>o*LX-.Am2(IqiB]N[Hr1e+eS`[=76q<`7-gl`*SX]_mXQiaTgWA)eg#.*tO0NXkPA+aPt*YSfj-�p07Zr+%[7^kJ\EfW9(F`&T.=G8HN7LJFqAS1%gCRf5\Y$OA>I42H?'YZ`.!7/fLSPmM1F[N84`UH%^N`b5e<4<,YABpc9]slk7AU-#/Ytg\,Hs;l7mtEfg=-$]oZVR]\b@_EJ"c4n&!g,54Hej%Qo5]%:8hbJ:%$n_h6!9&:FL9%&Z7=M=d8kPsK<(N&7#L)s4GZfrUYsT6Un0QGYVm?ug'cR$[pn[hWh&a)/e4`GNTSnT[1fa)/e4`GNTSI;.J;gfE324RTBTFAKC8&+;%NC>9U]$"NbpYY]mbfYo*u^R3mT`28Y2#!HA'M$=(7@*o=ld_r^dci"oE(ce_`Ra41Ib]U&V9T'q3T>?uK8$.kab_6Id4E;3lN>^TKV-Z5fu.Be+YFu^8j48OK^MT=cII[4h)ZKTSllB[`Eq."^K@=E)$r9egH@Um!rPRIqBnM!n6!4-h<0NSo47D`/L$q0sLJb#O?-n3:TM@2[NQm:[)6X`_:kcurd_t1NKB*[\0[ZFoLA=bseGnKKg.m=/Hi]ftr&/?,k#nc,-'+kF?mpAHC6$nFF^E;;QY_AlS:E_RQ,m4CaK#$";&G5N26sm\5iVT^mhou2Yq:pRP#N"D5a@GaiL*o0oi/u>CiSI;=mr\lJmp#msZS!r%H4)&u0#&(&ZmP:PqA-qHlG26)(Z%P]_rV+0i#c8+Sp+]'@8JCth"Ul)cb5*>7o>!4N](a5d,c>>oCdmr%e^+)_6rX1?miG]r+(/Cl0N*MJq*NJ?-?%kq'*"UgThYZUE*VCNma-7&Y0H+JX%3!W&ufq?O3JE"4`+ZBi;1QipIeoaNl[=nZ`B1P'k,9;:O(DfUQHnIg?5Y>Q@KZ1ZVq!^QD&FpUn8,,I"olH4&[1>H'>7%3&69r=2#^l:JhE?2k5u31nO1c^PlP]mh\-js;]]#jNlZ3H*gq+&Wmp(R%G:nNobq$XG:H3E7&*R>E^f[9g"d=dUiNUl$0Jtruj(%,dj90F+nMYUHB*ke>Oh]`j0msUijRk:GWajFNn]HGMVF$_mi8geVenk:7@'6nWnJd:(nHD3i$d5nBaaCH';;kF(W)n&Trqr4.N8TMm\>!q+fQ;rhL?!DHibHsf)h?d-:fX"'(_*%o19oiB=5O1b[q,VXbV[MZJa)dLZ&+T*PD;+^uoi(]Srop:TkUSo'cnQ2aq]EIL=kU>m?Xf'Z0P+H8p0t%5.JA^tCL`Na,5/;dKWHipqG0kj/=[=#]dGou$"W#Y`E=>H,B(^ZBY[O2p;NrcT3fV3P=Z/$QCj!%Ws`nDpSS/2\]j>[8o)WW8MO8\?39C\?1!<*fp''a)/e4`GNTk2iQLKgPXaCa5c]7?[LR/gfE32]RRi/XoTYSn`R7/ID.-cDk66S?rLsP=9W3fV#OPU1M8^6`W^-P;'KX\5Zn1(FJ?:<;[Zd9V8o"H"`"]`G<2e?t&$A,.8:?XSB"24Xe2DPb@;_u5PX`urLn)p6%[C*NW!q\UiZ8`5@f2'2&9dHgiKEIdAR]CfHb8"G><>#]R'd58;&I?j?QS;e;!bP)3_,TALQnIr^a[1KE-m6iD/G(i"f^FH9hd\@2HQRS3O$i_o4]#k%&+Z7a_Vk$L0V@b:P8V5^Q8]4bhLs;ClU&rY.(.e=HJ;_%kN)tjWAe3?m0ZN7Sd.=66mb++O)R_^JB<%E,!d&=3!l>dVdM(DU_%qUVID]A.!M&=4tO7\N&41:4uXQ8bXT4[<4!Ug7_-AJbMQ]DY[84bKTV*_i.%umD=4p9\?39CGW[%.p[-"<`GNS2`V\hXgPXaCgPX&3nT`r?gfE32gfD(;hRK]egf@("4E0sb>;a=6a?4S<:IEaL%((.Q6;tq7?kR5/7\RD=(eST?Kt9PuXQY50W^4]Xm=VL'DTF6kJ^d"0\Y'&aE`sSDV[Xiu)B^l5&`0EB_:sW(GSAs?:W'3jGsiZ8$`f!%Tlk<=YR9g4.>QZ]$ukNd5j,8P4ZC01a!KYm/JX<'c%hMW%H)4d'O!T0TZ>Og"$QT:1,9?p<]hFapWjmDRFA.uO&,8L]JKkBf8ma?<>`rF"pl$\O2^k!+L;ZI^d7oEl@V04@0@"D77R@D5R*c$K^P\_`J[bf+ip\_V.:]kS'&\m$kY/W@G("f2GU^gOKQ34K4imN-r$6nbJH56F:;f3p/jZB0/7MVNEnn0;#%9=P6P8KKRNGT)k]cb`Am.3\[I9ZN]U.2$u*&sY9mF$th,Kp`c:R#X08j,pJu.8<7@_+]Ng_?jhN\Q+Ys1*b%t3PZ6Mm4^B*m;IaW4?EEdEenT[/;mtVgj't4pe(%3Lj\(.+R_7mPfe5hK#b>;-d%/iQBcoX2hSUFG`hE:tCS^Yr!S:J3%0rSe-JVo1jd+8^m;9^3tjsV$k9E-[IT-Y%]nI+9_k>]8$RSdgo_.spi7K_W:/:o"'p$DqrPM/*`4:2HpeC_RqJhlU$\@!28FSf\#t`H=6&=\iLi]hQ<#81]#%)o&U;nrh/Bek8F2cI6^?@">A`&9R*$:Qlp4gPnLJ[?A)lc$e?odX-9K_iu6AJiCjKKRQ%U"D?ecH3GKGT!E60303n34&[7R*Duq#h4qM`V@UnRl8oi=&C+GeislFS`n&r$`f?*>T8_!+!ou3r16U`4Norlqs.,EeETej=j9H*/-;#>8[Cu$5oGi@4K\3VB_Xc-jLp48I0NnR7IRM%QOeNmgd-fh>QAAlCIuck;]gd8"lo!#jPWIlGe:OW:,Gg\fN9"l@Qm1%`gF3g%mVJ/8BpHr"_iFD2-!1-A]o_KW*B)#Z%ISd"FFcNin/QW&f/:?4AR*"M]-qn2*sd(gm@4f7MVt;Rl*q!nVjYiQC1)\G2]sc9KMScb!n1nmVSU)7uT[e,qj^I5!W=#i&HC*fp&6g%(:k2on.oEYK;3Jml5Q!fl^+#%NBqBRb(<;D!)ZjK@n>f#7]bmiI(2e!A@IpDeQDXPqP]9,P`q"RY_\i4dB0Lq@a?EZB9hMU`aRhn9KYD>&M;hCUDqj9^`!Q_=>B'h%Nc'oEOiJr4X#0HPEMWr/Ap4NS6\cgQUQ/!_k2HQI:ThSg2lO6)!W(Q_?o6(..W=\YrRL9hrltP5+':eApF`DUYlj.Fft_us,qK3-8+peN^:mnj)B=9id;e*Qibe+nXgkLCX`urLO8"9egPXaCgPY`(NSB?FMVF$/j7.@Ykd[b)XgkKX5Lm9Grqa9mgt_fio_&_Z=*G`'41_,r`<\?/9i+\i$\ks%d$Icu&^ce7TiBD'.teP/\?lV8;Mi++DrrMS@]-6(^#&ABSqiNC.7:(QAQtm7WeJdirfE-\npVG$a#F$7;Jrnlu6JHW1\7Du^qD7TU/,,SgQ/N%mnJC-RDuYOf1H*VQj:ES_mY7I6#9ifXDJ2W4KS!isck.fkF4goVnSSn[F;qU#GCbpt2UE9+!?]Vd#'uni;!2U#I6e>so\LGiJt8RnYn^6ogC#7pSKQ0e/+gN\L:2m7?nBA;.^&2iZHL##E.A\1q,?gfE32gfD([C>;kFA6gB75ak5GVIrUBDOrqHF9e`u!6>(Y3@-e)]K)R`Hm=P704$("-Tt@oA#5a0aHup@,XVU!-X`urLmiT+e=JGgAF6gdkB36U3+I#!CmM$aF/:IoM8RC>citnXR?isR//E#s!/MNIW#=2uR_/7LOE(##%C*+:!]>IA?D;`"g(T9F_!)^A:_c$CI\F-jA-;nct>IWKu-Ii3qPKq%i4o^58`9T)kmg6l\(Z>8^hr0:FaUV7&/&G=)IeX[7RB!OLcr8U#_I6rlPaJOP9Hj8*8.&TI9lE`PJ&K`5keST^m;Sc5'b4h@iCqd%+KcAqgiq+gg7jEX$`>D?9Aqg"Ttmn?NrX==o368l,-51H5P52E0W5']^W/t&I=O)7`]7lRK(YFhR"e_d0_gq6$l>.(.p>*,Am9Xpp)EN,HC=udoqY,[:29o3sYH:dmh*"PVDHX,;5BWaDm(H?rhf#YtIe!#l?-Ca^oo%Ar4h%K;5MW?SH"q?_M+)/ua&;TeSQDl1`[.YVRHrA\[a=4'XpNoK7u_Dg;i0DX=./5@eunk\P:G+T6+^NZ)uYZCb+!L[M@OH)hA6;;j;5'5j?++tut?Dk(6+&p@A%I3`R3gJTCQTEp+5\7CUX29G"<:S5`.XRgc'b7BGq0hq0!t?_mAbX`UZ+VYemYt%lhlUX@mkQc/-^S;?oEG/RTY\f4HDQcumXk0T4ejZ:!6MVE6WksZ%68'lh`D,r(iVCj=$eFq@<:RNGpl!b&icCg[`nBY&\t>qHN`O\qCf]fW53;eNf?YCP.pNFi(#(3=fN&!&.Bor,[Q=)Urg4"kF.Q"=_"Q)12A2lk02RmL=H6X)mFQYobiJ%.\L3L&3ESJlmT:(;"L%;fFQ#%,#$[)mW&OW)l^:h;Q1;^37DX8\+MeEXWG>Ht14OPq1A*iHNdYmTlTJ269c4<]-h:T%Tb@:RtC?F'ku^[^3!Ij\+-Fm\K,_3M@(f-WNsc)3o%69(b$5Zqd[_\MKqVe(+gUI&-M,G=m!:IB!(gL3f:aWP56+lJ0Jhl>?C6;J3a@I8-ElQ4kb$r.T:aJpNp$#W7>6PIm;[WpbB,$.[XT;GH"uk"p9Ff.)4:.s8SfF4K+#Wg[*)W]Sn1;S?e`[_h.F[UNI['AEio^p[]VZ)pi,fN)ghG[akX!8(=g/%-1-$ess@[oHCa[8gZP?qMa5]$'Y?"TT*`KmZ`l'XB2I5,#t("`$L8NK:-a5Y@l:Ts!f9Q0<$c]q(^oUU*NIduZCMZfhXBMBZ5Q.ZUSN3N->+/HjL:QTNqPDQ*R,bVf$U>*g0.HGCQn&NkuHutT^m;Xn^kiPs"eT$Ih#:JfN)ghG[akX!8(=g/%-1-$epPU'i/Wr!!(c2D8iqMD.-XS`bbkZ!3V,Ed@*mc@Su7Y=lo,30p3DRkPGK`ZEI=UP!,M1:e.6QV7I<)kYj.5_i8Fus79GPHMXF0GI4>;U-$lTAT]IeGU,?aW\Y7P:39]3Q'eX#o^*8"FfOlt/iEH[G5EpS,B[9g=&2/*-TY8Z\$u4+9q)"X`!,t'H]u3kE@/F_r9AWY>5&QXdhTuB;7Geq=&o&Dp%EQadXrdXlq2BFUP;B":lk>V=neX'%1rcD?:od&(,7q_&($'e)*WSV_pV:$f85*]0JFIs:sCRRiH1-Z3XR#EJ6l#jEL0#AXk!V<\OBmb7%(h$VL!.ZP.>?+e5kKtSa>G5NYnlILS'QSA;uS/.Xt/eAiQOiL'Eq3YE@dP2>#]0^M@4.e2q\Woad+`i?<,-SKH.U!=SEP*9"*Hb8NT4o&_U8'W]GFjr(MKq"4&1iq((n$el!g!)sB]$KYc%TjlYTCb#JcC(Au*j^VMg@]'+43cFr=SDT^ojulYbRgK,q8h9(Dl_!2jPOXd#c\?K#=loR&7_`5:s(jfa%@QSH=D07`ntVnq87(Du`mn`\1m/kX-&eV)Z4ZngkbMZli?G?X^GaE-4iXCTNtJ!35$33LYcRm*^h(?j_I^Ql6H-12fN%tP`"Ul4QNc+N'f0p>[C,SKQ>Z)!@Aa8k!P?)A)F4]aJt*P\FT)&4h[WU$5"g<>[D3jn'$^PFlUrga,&%T+"V4Y!!#haCb,EVCb&b)Cb)q/!!(IJgC!rngBq$9FPU!sP\,CIm\FPT?^N(8OuF*U!*iAiC[tP5Tr9;^fL.-#NEb(mJf;,r,DCuEROECao`MDR602)C+!>0iFll9%boAE$4a`4`4Rp8I'?3NOgBmo\<"[l"L9(#45g2W4/%-/m!7MS8C5/e_5=!F\dsbL1RQf28:75UhOuF*U!*iCK75`&>-@[\i>6Sg5=-F`;n<9dF.KD9NULp:SA_o1+4a`4`4Rp8I'8C?-!!)#/D$?TLfN)f=!!&lB[M=<"RqCEtYGg^S`18V3dp^Oh^RIjP;ucnp@j4:AN8FXiK04!W2Z&G?HJPKSNtJ!35$33Lpo*_N;oucagBmo\>UaJ>!%"nPfN%tPTIan0!$t@kD3Zur`o#T3@@E-^s6sshD6qi10n,2ZdjZ@mGFSUhs'^@g!5oZ-MJWLs!!(s*Z)pVK)S[0h?H.F?_mJrH2DuM(F6(Zk&`ZZPI)EU3[[KqQ3O?OaBqC,_%fcS0T]2[nF$I&/1#$!*hRnrRfMI,Ij:tAMZCs84T5>cjbJ"D`r!U/O8=>#pGq.6_'akr#bMhq1jjWE(b+u1X/]ENSS\Pga5Un;TNZUe5:O5k)nR,Jn)I%ukTVPtr7*(#'(o$(Pi4<""aO5]!^-fN%u)!bWGPe\^>W&6itOd\7u0059X"$btESYSf3F-_ua:J[40Ch8\p-c3V2K@QOPi!.\2B6[SGfmmhdjr;.K'J`)a.7tf1q*u[=+I#LIs\/r+Njk*T6!!!#A_6thQD$9n>!2(U381Bih(5l='so7#3`_nXNKk^`49iNpCVL/3jCYHD>=Z)rQ1_V#,Y[IEqn`#m`K8o-!X;rVTqTNZU6+^(!% +endstream +endobj +30 0 obj +<< /Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595 842 ] +/Resources 3 0 R +/Contents 28 0 R +/Annots 31 0 R +>> +endobj +31 0 obj +[ +32 0 R +] +endobj +32 0 obj +<< /Type /Annot +/Subtype /Link +/Rect [ 372.994 679.455 389.5 670.455 ] +/C [ 0 0 0 ] +/Border [ 0 0 0 ] +/A 34 0 R +/H /I +>> +endobj +33 0 obj +<< +/Type /FileSpec +/F (resources/processing.pdf) +>> +endobj +34 0 obj +<< +/S /GoToR +/F 33 0 R +/D [ 0 /XYZ null null null ] +>> +endobj +35 0 obj +<< /Length 2455 /Filter [ /ASCII85Decode /FlateDecode ] + >> +stream +Gau0F9lo&I&A@sBE,nQ_,+&?9IU%3''5*Ib9fm@DG+'I#$'Z<#,XYImSR5`#"NZ;@05qR"&:rhMpFY5(YX#@/04*OBI(QVF>CETtL!PkJ#F7l-j=k0X9TTq_QAr,6F"=isj5T@'NIui*`qGOS^!jU37Z@3B-7&'lo0"<;'q-uD%difk>N0km2S-,H%CU*CLTQ(N((e[,/g:e1DKj[Hcc\;*?Dj3mX\$G9(TG^C>!YB[UE0^E&%1in#X7V;L>#2B6/8$1^)1)MT3.b6`3V7Q=V*jpE]fAP^.T$(WUc+hOUA(%#oLKBMk4_M^&/GJ`'Fg^AJfa^r;(t?C,U*l5la<)&=q$]C5f:Z92E1q6"W;^j[4+*/``.4nai1^cs%15n8$1S,!m5QPhA\-8mV9AMQj2/.h^=T["#(/bs]\f-[`b?r4Emc'8\79[Yd$rji.@U_*"3%?uSodu)3([kH(f80\_2E6^$g=TZ/BoR4S3?[ASGI/I53>:mZLJQ#F89aOOiog%<>E,G1oa8ep%(#Q1!r0f$.]0cR*cb$-W)DXC\&IUSn9cJDLm6#l;q!^eN2iMA]r$nP4Us0A%S:2<7Xj8b%grO[CH2Ku?D$_+$=41hkAY)Q9R[`:%pOEZ$m\;5aC^E./Ol8J:/.U2Eu7;rc*t^e]/n$9Oqjb=W`pr,3&/J3(7S;8pSUpe2;T#F(Y_9pk5(l>`t`GcPmCh'U9TE^))b]>%;]!WdU_'"K/)pZ[qDEYUXP/n)WkFB'Pa!s+8D6`c+m#3:GX?5kC@6C)8fu>i+M%+"+_QCr4^ORYXkP.1@=&:,g(81Jbg'h9T@P0@O"6=-BlqE`R]lD=[]ns8tIF"R,[d+[M@m+fW;DPpX1"CLe2LH!*/A@9rJU#9Tt9uSg5=RL^EK0(mI?\F2`[%BaW7,s-)mJ%XVU2XKAAX^b"7.2fUUc\-tmZ,:Ag#f4/E519aWL8X!k/nn]Sph"PORD9k*,d.(DC;'P.qC3XBY4WjHeW1>g_UPk$Blo>Uqknp:T!C%6oe&%]cZjaS4d=NUOHIV:t_o,#u-;C@O6#fe=7GqP+X3t+],Egf-%_TN)"P*af]lP>Ht,&&A%Oe0Fu4h-0CZ`oi9K$o\mY]EM\>S2?WDG%.R`QXO*b%T$iNY&G(Kt&rk?c%A77(u;=JN>B&PN%b,\S<9,d'^qbpXFjto5BOf*tZI25A`W_22X_^EiMGe2qsl+RTh?&)uN*9@L7OHmNBhX0$dPbJ[q*0>=HT&^=pI*6l;"KX6`O=cR@)q-W`WAR]S8U)Lnl&-Fc7An?fOP5P:5,#TtGP8%ssIplLkj32p,ei[4Qui;7D`l"[BTTZiNE.f1'%K'[6ILf(c%U,P]2U0-7Qd]a>&QqX4^sdh1#qJA+qsArLtL*b2=k(NX#*Q)=f89c2L/EEnDVCicOV`pN_W$qpQ6D.)f0dA'..Q`m]#NlH_oeX<]t0sM_Ei).t6F21oh.Me\dk=h!o,O#!-GU.4%)Ma:Mr_/6=SoY91Ve"qR-I;^MRH0%T'JbSj^lI9V*[<^Uuq\Y;P(4NemA$uWIH;=,8j/4+4pOn^5AmHP/CqkU6L6uDC;3iuAb?M0TmpJ:/tm*5Md!tKu02Q1($jRe1[Rj::c&n+LOYq,AWEFhSH!;1I2FjYO8+4f"#,Q~> +endstream +endobj +36 0 obj +<< /Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595 842 ] +/Resources 3 0 R +/Contents 35 0 R +/Annots 37 0 R +>> +endobj +37 0 obj +[ +38 0 R +39 0 R +40 0 R +41 0 R +] +endobj +38 0 obj +<< /Type /Annot +/Subtype /Link +/Rect [ 103.704 300.137 134.691 291.137 ] +/C [ 0 0 0 ] +/Border [ 0 0 0 ] +/A << /URI (http://www.abj.dk/dxf2calc/) +/S /URI >> +/H /I +>> +endobj +39 0 obj +<< /Type /Annot +/Subtype /Link +/Rect [ 120.526 287.537 195.253 278.537 ] +/C [ 0 0 0 ] +/Border [ 0 0 0 ] +/A << /URI (http://www.openoffice.org) +/S /URI >> +/H /I +>> +endobj +40 0 obj +<< /Type /Annot +/Subtype /Link +/Rect [ 251.026 265.937 320.011 256.937 ] +/C [ 0 0 0 ] +/Border [ 0 0 0 ] +/A << /URI (mailto:lbj@abj.dk) +/S /URI >> +/H /I +>> +endobj +41 0 obj +<< /Type /Annot +/Subtype /Link +/Rect [ 178.522 244.337 191.023 235.337 ] +/C [ 0 0 0 ] +/Border [ 0 0 0 ] +/A << /URI (http://www.abj.dk/dxf2calc/) +/S /URI >> +/H /I +>> +endobj +42 0 obj +<< /Length 923 /Filter [ /ASCII85Decode /FlateDecode ] + >> +stream +Gb!#Y9lldX&A@ZcFA$X>kS&egdNk$"VDE)FaeA,'KC"]hi\!f%Q*noGJ\'f<2$8,Dr%t."Z&P[cu!`Hs&'p.Jn.49dYLWCc\(Yf4;J0>!V$B;:rS5gmRj;Of/4f\n*$%[^""R0=Nr\Nhe>Zq8uA5Z6q&BQA60kLD'.`;;^]?rhYZ/@rX_?&VW$-'B0on*ffkYaFDL19a.GE#'N'a*oni6uY906Q?C6'RJ!NXkS?;WJD""CB[,L&&K+'G(Yr"k$'^9k&RQ,GIXtICD9.,9gCX%/)CQ[*U[S<0jerMb$P*`l0(j$1?T7t.L6@iW3YSPj0=qebc5'#UK.HF`K(C:u@0"mP"-6FPAK+k9u]MI8qO/@(!CeC'ZD+XJC(KsZO*`cN]>B/K_p@:>Yq03X>`?t3\[-sINdd*hWdpc-/?]7Puh@?A1Meiq:^-Y8YLc;AjOAGdConU6DqdJ2bULp(+Y>q^YZu9PL/aAZ*)E06qd^PW$o,6$&?;+OpG%t(%N@LFRQM=aS&&,51E0bfHE9RiUT?$-OPTN,Ccg8+d/*r@85]b["R>Y:`[//0:?ija?GW5?cqQJC*;mSnQ(Y7F()r^t:'M^3Y3OtXgP'@bkQ@?=#N@VIWR?BNm0U!N]WB,gAj~> +endstream +endobj +43 0 obj +<> +stream +Gb"-Vf5DU@g-5MNi&uLLhP36dK,j6o!XgQ`=g-5"(5p.@YuiR.(L,*a6WhQ5//F/_@^0#dee_Q7mqZW6k--`Kd[;n&bZ>BQt2YZ3cC`F?)S//F/_b1j4_n7D*-cNOq!1WhQL;Wktc&[PCu:G5a>-1f2`qmDAJ/L@^0#d(5nHA-%gCm(5nH[iq8)Gb1U74@^]aN=9Bt3D-/>i[YiZY(+X$Ufd_EYas9m,HPCU&dO["Nc)RSU?`'Ah+XT21X]=L;dV5X*FSOZ#[:?Xa2Sr)qX1gL\=7bIh*t]?'N*uP_OL]8t,L7WZ.t@W4JeiJuWmlcE^QRgo*$;b4ZUU=KF0PGl;'UEjfN*0#MoOfZR)u#6,;@,ToWgO:WS?6@sq[%suB\^g_dD40o[.'oS@#`N]l1`QD6OqSQe(Cb]-K>Hq;3!>NR4//Ba?`Tn%mQ*\GGQ!F%'XPTo@<$gutP^br$rjCkfrUXRpme[>n\@;acQ7dsPML@1$`@`QA][9W+"K&^(+_;AQ((&$.BV;.e#R\ECfkD:A`g:80YLp?aHVk1Xi`Ph;7Q^"(9`Csb-b'WFL@rS*DBU6"*/[Z?Eqdf/X49LZ%m]Pm?:AW+]U^Loe5K%);nE*V[QjLq2uQ?l@GF&[2qpiD5oKr&skBHdDtS08(3d,J/OV00XGKrPZ;RRl/c\g7ceA5XUlF[B%85q[^ZNRFbGP*:@Wg]m*Qg*4$Bd'slHRH?Kh:ik,faE+dA[`Ui<'1KuS1Qjr;?orHKGG,lhD>OIf:%K>I+WJeSKrF[G*5iHXYXNh9+$W9OG=k#grA`Sb>WgX7C9F'U)>2O]S1-NBBgM(-2LX*s.'#@9=g\q*Y2'P`X*-e^g3k):9jb4C8lk?IMp,,.DElA$GQ>n;m"UocH_@lp)jIG\Q_Jn9WmO9"nY9CKTjB?3>Q*-]CB1g:Gm4`D-%a.J`G4@+hAXU)L#>A7(!nJBoKf+W:l]9nUQ2<5OXOTD*FSQ]>^\J.O4*qLh*Nk):Vf0G@!uIYIboR]\G<+.mYD#]kDo13q(SPU$;4,%B%ns+Z#QOOrmm3Pn\uA:C`Hn@QU5+C6M'm!Y]OJr#@p8nT7TYbRp\S5(6C+!rjZ_cQ*/gC96QhWiejk(lCB&E0sPa,9_d7R*u.dm;momC41j=C50E5:j]GmgK$TZWHW/icKo>-DRBk@4Fh`f58b\.F0WM2]k&!6^Aa>DQR(N.sN*j4=-84*XF#G+o292l8[^.o#Dsbk)CY`X-.\;b7!(d#qUoS&k4.<877PcPMMS11L"GjoZWT,qm4%sp8>`P+8l$PB=;9Xb*Tj="eR69p85WP$5_$f1POM>fo"H42\p&7idHoHkBp?D[UQ\fS&N.8Rf`%->Weq0'P=Dl/R,ngeY,V7iFD],7ep,KjW@=ukJ'Vtrld,W5OskSn].ikgCYb$^OIba3AX.A\)72h8s\&DKV\pHB\>9l>db6%.X&_*nf:P+Z-uU]M`qdh@csD[>K*gp1Jt0CON7TjgQ_*)b.#7KA_UYDiCe.\qE6f=HPa+34V,`E*J/.+Y/-'.>@I9FqljJq%bPq#$Cnj'&>h$_#)+iL_!^eQ@K-,Z:qUHNX?1MFB!9tk,n$'Wp>_L4CtT"pHf,mFfQ@VR*BF:(*k_c')>f`;(L[(4A$Fo_/M,Or&13]]J4*mJLi!pXL'd,VA@j3#ALqJ4Ir^1eH4t^-XD?>\WZ@Bt9B'$J$F/DbXt8B9,>&_=g"QB?omj/,gEfY:(1?+pQMeng,9Ke$T]["Y`gAf'6PjTKN!4/geO&;h5VLZp/j+\SEB\t_llLP-7r-PBN,_FUV6[UQZhAh3_j0O$89&bT)JhYrnEL'=muZPBe]%4>a7_;pO8!R&u)HZdi]XXlS@pQ8]\MW][:"<'=.PQ[b'KP*pB"o0<6T%tCgJI/@ROb9-]gSfKJ=YJ:#lPZ2OR8JQTGY]?e@C,6Qhmt?PZ4.qCc-m),2hZEL20YVob,lX+DHo"ag49bJO4GTL)%`3d,Vr5Y\$W&m&$.NeI$WlaZJY0qWKU3-C\9[NtPg3GLUn9NZrq^BZl>R`?TgotqY0pjY3%QnWB!N-uj""-j]O],n#oXG3Hn&]?I=M53I5,j2'$VOlBj^smU9WYHl.MnQsl\D'f.%NbDg6Mai>>6Xb>N)KC`?>2d`fXKO@,KL):poU79N\M;$>2#E)(W/4Y4K,17eJfEJ+sG:<7J_E-#6o\oS'MWod4Wk;5j5D@Dfq)0OaqbQr^p1rq,l5@$Ra_WfF-kW_0"@KFs%g&m-Er8>ot*@^[JTcP!Q!ZP='L0:8l/XdH5HM#)t]MV3lCW#*ZYT3\mOY=edG@sO93Tus?,rc.#2WkK?2&rPjP_fpV.,96X%TAfX]rW9hc(]e2XrrbP$Qb\8#2)'L,8nB4]0%a];\,jSuKaTfmCp9k+'2s4F3=Cb+=#*uBFe2C6Gi-.2.2H:#&]WSI2tZt2InR-A9G[*K2eUQCHJA1!n#JQL#2dspHJLV19\>H$B^nP?S@8\PGFX2`Ra!O0i`+RClQD_4FpDnJH3o;Ee)AaBa"VRC2;E[b%i9!L^pLD$0R_5E3.:H`eD>ZY'BUhJH%bIpObHUe^ChU;3FV6I1GE9C0jK#!*-NAf%D*+BJ/Rqp_3$O?i8W!OY\Ei/3-jmT'U;[#k,l'Cg'EB?2aPj.op,bs_;;jB)WXUBKAJB!0CN7dq=;gq_0*3)i3mQEd1bOVDLdiqjY2/"C7)N,"stm-%7Q3+_!%3:QEoUKZ=4&4>-\Vb/mJS!Mc[g77@&PYb@'E'V(co:8siIU"-XP&J16Dc6/e=C:qV#tI.d7&@#:oVWqNJSY=bOEKFs%g&m-Er8>qZ<_ed;.p#Y$8RB:M,YOY@q[UQ])R?I==PcQF]D"VA2.>-r&bZ;qgbZ;9$G3AOHOP)*rqC9f*Ah.IDSger7:W^c=bZ8*5R52:t`bb;cB<.s\q=fmiWoX,62c]hDq[lXaUC&>C.Y[?*q?m6#^].g>j8ZuPs83"0B5E,RZRVYVp,j0R@g.g\\J>Na/VDHW/HrI]^t>sSrNX3d*uFCt;L,Tn6,GCH1`rPdZh@'.:UBcmln,cVpp.UCq:Z)#;28ZOC67a`_5uatb,SkIm,_&GQSDJ/qf?cB#0PI1SJ3r65VS&2ADD"J^MGJ:_$ji=>.?rZAg(fRjE7aG5fY;9@\=17Bl-3(Pr:fXj%VlJg;Lk#e(AULuN$oMR59tZG\IganO8??1]bkBlhi.*P>@S/=`Hq?Y5jA/m7bHA.7iL1>FS7W:8=Hs@2r;8n6/VOhlg1b$YMJGMQPc5LRl\&b:>0sWX(-"r7g4d`LM,$R]kmU+9.reV][D""(b,^L;V?9@2U@16UWfAEFsAMI>MtM-qF=s"qG,7ZK&%=_`VL[+O:8nL[F5H:Sm8GTq]-,)h0nAh.Jor`i$^XYRHr10Y4_`kcIKPaJS?XbNY+0O#"([>sgqn9'S]l8HjebZ;qgbZ=[YZ!KV'[d#5P.qU;D.qYi5G8k.p@CXlcIMfdO0iZt`fo"JJpTddaaolIRKiq1TlNX)I]3p_:KkO-2Dc.IQssm,N*8oW6Ip%@8ZUS>6HDZ?rG&o#CX6O'T<7st$@AW&0DiIFh(HdE_TDNiC]rjQPcH8!,WP.QWZ6NErB7(eJo[4ZVBtDO\]jDZAa1>Ls2l,]s8UOo1(`ok,?+1D[/lh2Zn$I([][0l$n3XlbcSQYha:5^R%"#J*jGY&1aZ+\*4Kq#A,@,nUeL*B;#1[RrHck!MVjDs;00J/#GTl;Z4l?_C;ok9Hm3Z3k\K/k_dT]_*,!RR*hG?&]sKBq?*%D,)>6C/gWe^*c3YQHcX.8[lrYeo#9%1qO`L4"MFG](O56W-(\_RWbDG\%;OYGjB`e1/g:L)+S]]f2M)O^3ES7`()u1o,ikI-$^M:?U:[JU_\orFQCELl3B_YkZhg1d,dAG5'[[.2BV+T?KC7\al=.7)sR_t]up!;jR5meK5[J$TnQN]Q[;2F'\%^pqcV_?7"upAgT6.]LCSXdH5XXYLc510ZJ;0jCKjCc*2j&*utu[UQ[S[UQ[S[efHdR&u*SnU[5[bZ;qg?Wab"k7m2]rN,:9WnA\^+ma9$Vs+r[nZc5XF2nd+o#:4Yn?-U>N/n^#pmq)NqjP@Kn.ZL*g!^(*0:W1BW&oiphQ;'ll^kr03AY+(RcWK-fIK.K`?c[R=tE8@U)E6f4bB!rk9/eGl/BA-HDiuV&m?5\Jel\"4mZ\=:r!7;k1:^tq-"`R5"q6Jaj]f!<`^pT=j$2L!o(70c=j.:>rCBhJ["Z3\W!r1`fgL8d`H#W&i54CTO_!jACg8-U`C3^7PB*0C\GW`h8#WeHkn?dd3h@;]37cr:9DqhK'j9d#FpUck;k\^FSG\M-m66Y_I)kZoM_3PeH7S8!:4CeBr[ele8gX':_(+&?;)@LZ=0`_"/rJ6+TeM/F^#s[#a?K<:B3c",>u;.Z#2Z7O4Qr?t$KQ[UQ[S[UQ[S[UQ[S[UQ[S[`X&3j5S9`bZ;qgbZ;qgbZ;qgbZ^A>f"T&uCq>;9=k+Bq!*F^A)$[&FTDqS:Y0#_$tJCoCJ?NeZ.>YH/GnN[?.kr=b\cHNO3:c/7L@n\\0aD),p0]*`'`*bPk*>n1hc>/9TL_Q+JKiV])W0Rlh8]RKAYPg,^&2m-G@7187np+74ko#)_S[Cd-L(/KUMc_&#>Z;T>_@ghY[Ynd9/kVc/<^P#;ec/!nOK6,=t2]m0>1%[<8QL'qWh_RKR?)A^Yk"(2*,YAjC8(%=4fqBC^Zjg-=Rpu#It1tRB'd0+f>DM>C\-*UnVAsbQO&73(q!`Q!j!ne"HA("Q_MU1B\>+i*-1rrRUmb`cY$01"/UB`KHBH18:Ii>b3=pJ%BMd]c-&f",c,9p'_t\%'"nIu9Q<7t^.[H+c17^<#Ur`ATi?Tom[_K_h%]i9']9O9&\7l[nnN'!BbkJ;C1UglBFSqYsNs:pifY6k9SKbZ;qgbZ;qgbZ;qg=h9SJ>CC\c3ZKkYd2+"1cP0tAAh.IDAh.IDAh.JohD&5_G4I[60jE$A,-T<,Auf`ZX4!siA#.]<3fp,CH,CP6DKlIfjU:&?o;Agu\cRm5g]oSgqe5=JO<*t?>!Vd\7Nf">WPoNYbD*FoO0AQnf.N[#flu-Eqff3\c>=NZp5N7;`[hri&h4[AKCAj=*I&T!i:!0%Kf%VRP=Imh^2d@:N#hL'9Ue'L2JoOHLC\:?L:&NtQE"-"!8K.8@//R9MiZG8G[$Y89IMFlGB5p3PtZb/,n",0qUJD)Tb+A6\H)[+m[m<6UBFoTY)!bpNiHa\R.I9GZ@O:uL.QLuBlQpECXG<*Le#W#+#6d>0O\5@SRNZZpbF(^cTPD=A@WNpO".bM=P/P+JSII%M=)F#"-9m%S6.ErV4]WG#8A3MuA?:2i!M(i^W$%2L75MEt4!Dj@':h%1H*K178Dc"kOmK6!?n8X\\J1ju;[0f+4?(=`Qe/P"pdG)RH(6Xhhs>5pK_Q*#r%85qDq+N!?\=Za=!/a$#Bt&N_s:qHf)7:Ogh7P*C8S#mWckFP[UQ[S[UQ[S[UQZ`\pH'9eX%_s6ac:'HK,\3fB7.rUjb,+'seX]'seX]'seX]eW?q^:j6YdX$Ohp:bB;bhY9M;om*&_WSbp9ong$*XO8O/$G)q=nKiE"ol+lr2HWtm"DUt:_U!FD^rjeGY[R3FQof@-*8\:@2QU'l4#a8Hq%J0p9-*dIocS&Ea7&@XRU?'rjn$Z'iTqHOq#2kD?901RSi?joB9p?G1<[&anaPc1FkF!C"oNcF.P./m#(*dqJF+:V_h,1.E;/&i=LY"+T%q'encm9p"g^JfX6'"-+E*,2[9DW'L?^)V^uoB]XH?%ceN$fJnD_r,9W$.9K7nUAp(gMCje]RY]Idp^Fgj`'hN=fA<'$I6!b?\;mpUL"(bDh@E[AinET6?=C/]AcCI'+qfciX3UR,qD1T5RVS]n(#N9:^3S:WT-!WQ\'M]b+%kGd=5[rVN8!9WWT/$#E^@"l%V2K"]ns_O>&t+M2^kkQ*Y_E&X"VScC8k(;Z-HgL,0C!q=8-D%BFk9CTF?V$K'G5u)KHj1=mYRcWY8@9"&,9Ib_W9BX4+l^'m5f\Lf4#@ij2QbDlK?:&89S9hj=F)e7!,W00\]g_##ir/6/1=*bIqB4+KJM!-3]g^3\90Y't[M)AG[*k9i10aYEIuirV?1,+JtGeN?&2H-D4%GmXYRq5`GEM0Q.O](g9`'N!mT*?p^Gr[oh[QKfJ6H#L@aS(JB-IOM)R,h^ZtI!1k@b",.U::dI;ORpg<),H+<##JNZgfIB$a>[rq&Y6#a4i6..83)o1L4".uV84KYeca=bXl:i8dU;@eVDGJ!qOAp8"m\/b2"DLD\F,h:#si+R?=p(ls1qgc=djI*)"(X>?=nH=rK1S\In\/hcGV;W6SAalROkh_V,OD_;#g+\B6a(CT1L$?PiiSLsm&9KtKgY<(?Pi'jso(m%q-tsaqfM:FMJCG%OAE+s^V3*_uM(+=!QgI^^G7pgFg>t?D90aOcH[>,jfU%aMM&(0^Vm-1NP/ag5G@>gf"IM>hC5UTRQf)^u!6s$qK+&#R6s8\i[3Wa5C']ssd5!oV)$'JH](J)Y*&#+br"?C!f,t09Dl^jPoTfR,N!F/Ta7!7r&j,_O2::"J_%im?j8_I^0icO>;9>:>;9>:>;9=o&Ue-4OaPb"E42^fgB*?m:pOCOZcT@RT_7WMSpgoe)n4X.AUH4]m^I>_kgMa1o?fPM:7RXbHADD-+)1:!m/;Nn)Cc^3\>44G;Xpk!_;9,E4*=]q+.C8g%Se+Vt&:nOG8pZqUJEJ(G`=ueCFI(A5hmMD#Yp"ekgO([P3oa75)\EnO?Pp*pI1&I#kn9XtOg[du]t:?9SD7l[\-/B2JWf0a'Wk+RbRidj9%,>W7K&$fk>$Q\E.,Pqm+>VZuWKZms=d`d4*Y91')3)O8$Tr>DjLq-;0e@/m0l^$+Q>?RaYmNk$^)]5Y>#[!J%\easdHirl(Q>Ym8#1b`,g>;9>:>;9>:>;9=odAOfs`G@EeR&uaXR&uaXR&uaXR&u2.9>GA_Cc1"8X`>dnbp\t]D.+Go8mB7)VBZ4@dg$K&$_=Pq,oV:lh#lKl+EW>qBTF"WQD!su(=o-AC4L[G0`qtCrQl/(TIgk.M!fuj8.aL$TquE5#GFNL%/VV"934(Q1#:7qeh'`43[+d8LJ9&tD%TEffMH\RMM30f"@0]J5"/M7Zn=LqI@eC$nXU\R[]ff"&^t2N9M)>Jm>)Y,((+6^(--uO:]T50LV=;)(XajkXqfM1@K\rna?90N&i-e`%edn9g'h8l2EoADMmcG#HE(qa1`N'DNd/kN[6$*!#`6ff7^,VOV8[6iT5O&E:i]Tk!u?%A7L^G]6oBdSr/aMA&eX4^FnLsgL0\7b0d'b6#Wfj-,fVjl+NS09#d#Uf8SmA$a>H1mkqik5;E@12hX2(l=si"E0%UPMGRuSQ(=GIf$23>8N#X/Y('(ZUZPBe]ZPBe]ZP=)"VoEPlCc,IbXdH5XXdH5XXdH5XXbc16_JI2-2-cNNE[=qT9qMVu4U<4U%q3@b"PjVI]atYM5R(Lkh$]e4!43UbM!5ZmmY2,ZA/5%efd[^.UkfjO#\dTN)a;5E4CicS2#NI1AsLGH\f9?3017Z>6o7,A5n?B#IaE^!ckc>-1o@8J+<%X52GCGJ?^8\T,.\k,MC^&PUsI6.p8&Bg5th..on^TYCl^ujR"5rtciXk9#kC,eh%,t#%3aO<7aMMu7:m$D4p^HT8B_b)`u]QB!tr^C\e".U_u>dtH,2\*CqP0gRdMP-BEl/Cq-5&3R[?ScGA.35dko:A&#B4nN$-dI925`h%Z3*&+;1T;XUPqBe5\h'$lqZ64\/s@)+enK?Tng="aDm9Z=%>ZN[D\'KYk(67[)haY%(JPl+EDt@ho')r+:l+1"p=/BDbYQfOf/N%;$0.I&Eou-bYU*K6M2,CVoW8fP4VW:4JF't6,`C^3,".`IZU7l@CRnd`tEJ[38P-.AELga3njm#2q`,rr=Uk:&Q8qjmfr$3U%gmULJ2-b@^]aS@^]aS@^]aS,,4&3CrL4UeaCIo`GEM0`GEM0`GEM077;n[1[(e3Uf/(,\CTK]7Q`8(d<_I+2B/;Ub\"i:hf"KjaYK,B35/8T9%B6!e6^*f33CUk..t)T%46d_mI-4'6bAVS',ri-'Xp/:Cj-]s>.qF(,k67-FY1gqRnNC0">e&bLV9GCa9T3>RA3Kh,=$TC:Zl@))kJck!^NR%fV6Hkc'q+Q&1Kl!c:O%bZf%/@MD`+SBZ4]?f*8F3XQg/OJ#kk@DQm7R<5#Y$qdoa(CW@-@X\H!Oer)YcEi#fVE]&&6EodKm.9Uhs&t*3d?l^X!"&i9Ws1$huuI?mKPTDlo-o(72GPEL6Wea@Sdl/%Jp'n#W0r(1$ZcgmdAKUtUa)^uMAK1d@)Y]Q+VN5HDp<.pt2d)%&W5U]Ws")!F7!N0"R%7P!['-^^>A@c7H9-!bNrp.qU;D.qU;D.qU:U)FDYKbZ7lbCrL50CrL50CrL50Cdgaa%;%,&X"7_gb+WWO3Yh#-?c`"Fe%?5k6=C0"%8,'h.Gej<4'!d+\$55b6eISI'3SZ34#Ud'(X9)AIhK.C*h>?/!&IXR9*HfPRh0`h]l3Z2lc4GXY_UVRuq=CjU5Yep3CsG"M[6M0',$]5"epk?^L]i@mA-09soIH-7cL5O#1caHeoF`k>#:+%rXbR'%oLr3GGEAIV/j&ZX(1j!G#.YrrZ`IfMTG#`GEM0`GEM0`GEM0779M"fo"H4H\SPfXdH5XXdH6eJ)+M@@^c-:V3nB@BF$:r0jA58:_g=e:h6WKOE>69^N!8kk"*DjT6f^7fnu&6kfaL'>db>=b3$R/F/M=Ug^jnu5i/"^D^A,AXhnKU*3G2S]sIoS/?FLbPr18#U^W\q?!nL88BOuaK2.94?MBVbXERhd7Mr#K=UJqgSUtR6GJNhsCLM,"Ec?:tpu2)OfY-l!BSHoUdNj=W.W3aBJ0tlqJ@DommbPM_ITHn^3dVKM*dR7tr[='`rE2f=W6Pml4Jhi3s6cTsLKr9Z+69l;T).ffo=_Xstl-]SH7n(h>n'1dngoPdbSg_4sM];q0B)!LYs-UuAeZX/cmT4Lbo"EfGqe^u7YTIdN&AL`TH:q!\mB1`_Ss3t;cB49X?@1M>!"+J?QeK81Q^M8HfE(Z=/`#Oq`k#EUj..5,#?KW_IqYd_9PoL\RG"^EmoeqUI;aC4d0i%m\e>J^<]`H.9puD?7j[pAC`lh6;=^>.Asm#50\H&Iu#>*q#P##]7CYGkBntm+T#lY$F'j1"-Xg7Z&*J8/aA]i80I*d,5DL?)J2([dA^Z9s(YokUCcMb>WZ[[LFKd]mnW;+57MCD/R*eA@i@_Zhs_#!%*\4($W^nMS"#5((@qs,[3t_2]A'cR&uaXR&uaXR&uaXLhJ1k>;9>nZhlI]0j?A:0j?A:oo@^_fntUV&$m"WAK_"<\QgcJ*N%.$>u4_=#3Ka)KsLB<@F"/5nF^uMTXiSREZo0V%#C9:QsDTZG&CFf>nI`ZTdVHsZ3%c9Fp+%'RfbHZ/VN[pS)N)IY@6"F'sOXL)VSX4YeO^K'%!b]Qf./JZQRRcF[f*(Hi=-nLcp7c!:4W@Puk.BS5TVVr:iDhNunO(rp`M2qX=H:7K9Uips#Gi07Wd)jLQh'>lNfr\Z$(q^3p*=Nu`q@FnP7`eP#B:"*!YIF\m_Y[p/XR%f2fAbco'l/oORJ=Nf;u**]D(d1ea(gpf:Lg&F8$/HZZ\3J^$12E>;efH9-`6'EtdW-S3;?3=r\#+_]^G3X8nmM&"C%GKq#Ph_=\aK@Fq*AY^YV90Z++]5I_6,hn004;i9PrXm9ria?bnTq=*q#Y\*8PE-[s-@cRg)H2A@nfsVVRDqtIHXU_jfmiHlOm5H6c@f?#TYDP235"b`RUlrTO,6oBnqr+S?rXm:FVo):TIK5_0!>81gCG'SN+N6[89lo+5!j:ZE`Cn#Wc;-b%2M8k]9)+gBr.C?%qZMeq;cJ'+a?.!T*2oVkMd^5hX.=i/GC$pM\qVH_^aISm@!CS_`e/Wsdd+Faso#h^]dpOo;&IVqre'R7b'\N@U>\7[8AXMV3m?MV3m?MV3m?MMOG*Ah.Jo]YeR)CrL50CrL50CrL3Z6og(VMV0KJ0O&soC_bB(@"pMJoB7'>rS8!MmjBSRnBLtP"Z>VTJ/7cC=LZAmh!]-7-P,Ztr9\BGRgHYIKP$Pm^AE?nHo#4er*r-OjZhd5eViA*GfCu&5Z.0(8k*JB,.&6H&L^>=8^gf*1X"]`HC)+P[`bcL*=Kkj!i'gUG#2?f/cUp[;L(76-;W/;0:hf"fgO2o)PI8nHO..'KS$[ec>qaf9Ko*d4TX)-9]RCrecC=po8-D\[4TjUAn,k3nYCm&e(PAL5"ZL>U#!$Xt7ZW*T"_1tgd0(:JDEN#_G/Js)+2P;H00tUn=kRUn;SEjrY$VG)pu%hjLZ-Ol]-,p3AGs567)LVHTB\]W#uF3U.eR59PK+/ar:;E>G:S(i9M&K=@NC'SG)qJje!r$S=LC`k1/+9.;ZQ4?b;AMh)=mlIg9EtM?JFW0+lQ:gEVQ,]o\dN!++NQXs?T#:/?bcRU:0tF?2f@H(=3mLkA=85c!."7K(A*3+A:ML0ir,U+#$5]tJd^0P^fQ$b4&f1_"-9IDkloOT>N.*/8*Jukfft@_(0PuS7"\Uoo'5m@ph=gN4KX)BV=U!3H?f02gqIqL*o4F3GAg^eH/@i?V/q`C2l92FD'9AL8M5:+X5r$M^qh,l?n(ja]K3e.[/2pmkGYTBS,`@-L]gs*Irqdtgu.k4_Ya)`d,*.S*U7M.D5n"3LUXs]osiSU>s"aiGS9B"]bg+l\Hbp%quZDN1fRI-K<&'l^lg"/nFM9&+E&T6ZD8HU/6E0.XoZ#d$b('3L"WfpK#HCIo,#0s(ZV,cp%\&%Yhur'D\)j:Nefl;^O:>78JC3`16o<)GJiYYLI(Mm+<5%uDp'Zm2)lO]5eH99BKTVoM"pqQDt?/;FoNScSGb9:&gV$=5>2nU)ORXoXdH5XXdH5XXdH5HBK.\M0jE`[Ah.IDAh.IDAh.IDAh,(J6-NBRo]?3oa9n7jRp#Q7I]D%>nsEX@2?d0RR=#=;T=6k#,FmBShq,u7q)^NC!g?To!`X^k$srCaA-2#GJKA]h+Sr"XDRoOlf5lL3ZF)In@KXUg%Z7Dc-O2]oGi7=3X>sqcs[,%WWaLbN'N0G$Cub"d-Z$DbSPr:Tn+8*6"36X6pj8%J'5j'Xi.W*B-A0Li6$sZn=]b@4DB$@[pR_(P8>n2nBo/#g!p,lhS"UR^V9_rT4sA_"K.2(.CnJgL_&6dgq%qPm"aX!,\f1M;r&C%s9K>B)tRD5l_2f)3m,p_46,2&F>(M5A]`fL$ONm4Oh>/Oq.;:]XoRa%ZL'JnGM\1%sf[QUoYmDVO%W/)p@PgAMF$nBIVNTdd%nt),>3/m:l0:$b4E"g26CFaZmKsq;?NtjY0d(gH[22WTe]XlL>-6oK[<%H%dFf6)OaZaFBAge[o5OBn)7X_O'I8+E.?MN45!"nE^3F*9-#"E9WMGM<#?NN]UnR-,AtO+Gp*.T;R2h.'(\Y-NQCHLOK='9r9;`qIj3Lpbf]HMiScS`BY?sF#Eo8RA3t@T1S:K=O-fOoeZQM'I'\U=g=3cB`7@K4&O6eGFSb?7SH-//;CJbW>2(D+,[sbQrqt]#heck."Pm`nY(ZF)u95s"@=`?:6K!WMk_3q(1Ps*8r\9%=*]SVB9_pfg'HbbRu6KmIim2nau>nH_=_8dX_Hg%.=#_j=\DFA#.;Y#qfZoku#!%sm-!U$VWLJ(]D_St6hE9c^[\6OAQ3=iO*(G(p!K3V0jeLRU_h]=ZAVp)94=$Qt.GA^[iT24`$71Z94k7inN&%^1$`CLWohOs12;R"I%XJ"l1=$5e.d'6:?ZarKdIuOP\YtU2H#tM-"0?,*i,%`1Eu>f:cD0K7<"i)AZ&&=?Ne[LkZ!IePPgsH?n@>5"`Eaq@p,rH@>4JUd+\K6SoL-UfGK.eaZO-:hH$4KmbD^`'6Vm3e,RU^V>$AIEHkGD48Fjl#hFSQ+MF.k([QA-d=.-m"\L4_?d`H4fX.QD8G+lX53-4(2k0i*kdNQ'RMnh4pl)pVRml&1_1G#$Y6IU2LV5egsBY8jPS3RgmUGkXoFNrpKMOL+k$[nl%dTmc[X)4.l[":+K+[8r[/Bq!4*EH'seX]'seX]'seWP)EBn)A@>sU@^[2h:mqV,l$i&MC`4?YdbMlG_?AmS""L$!YEOLJ#_WPZ5A:'c1e@!K24Gp5ilYM-&b6;3b1Uu96(2k5'4:R/M>+KP%g5K#%Vl^!/"([;0d0MKRbu47rA;[_D!s+_j4K`:0;-P@f5]2K'g;Idst$]*Xq>FV&XPK#_(+J_!k`[Ca']crsYhkGj<1X23dhj`=QeDMq`p>l4FHi:f'\N0\%:lu$M;Deg"W[c6mZbZ;qgbZ;qgbZ;qg7%)-LE@/",ZPBgsOCP_.[UQ[S[UQ[S[UQZh)Ep/Cc=F@m[UQZ`Em.QOR&ssqT)ra+gpFPGTkr%?AOFB_Z!j84$[Z$1HB>$@[S>#+VG#C*ZLRJo?&fp!!?S+hD1#YCT%>Qdh6lEgb7d`:$.o[S$e&Cqe10hV%.7;/Pee1K\;79.]5"*p%s$8)'pEYb5MJ*9\stc6psF27%Y4eFHuf3s!\jF#+2N[Xb_dhLkt8=0O$89&J5Te&^fMk>P0pZPtm#ifdbbV<&>1!&J5V'CA)HicWa*l/-'94Ah,&L+sJ4'O4fEDMMR(ELkl7rfkS=k@(/WUAh,&L+sNa7(8&'F[NZn>+sNbtA%#jT+sJ3T,,2n`[MnZ,#Gc;1B8T9%slS)1*pK++KU7?<5![T((]^39=F^(KP^Lm<7\PYGL(l:M5^_+lPl8f+g@Tg=l4$g0E'Q38\5XdM!fnk`ANGg?:\gsJ233=8sI2Ai[:9ndPKER,1h.3*_^#"pa#E-!4'6,l)r%74/;aX-hlDlS$2brg/]pr\(]%eJ8[]Yh5PGE+PV[rqaoHoQ+`0CXYE'tSk&dLb\W_S80f#-QQj\>A<=hpPE?Td'slFucAR-'Q1aP5c^DXd2%5kS-r2O$AIGgZZW2K/>NHN1.qU;DX%^fsIP$iXmI/Ah_JD(A@Y8a:AegK_%d86i>a9N=%'"(<[,n)*c]0Eg&o;>4IZ<-RH@CRnd`FlPEHUNX,e'_ZL_),@>)"LkS!8(B#:BT?elU3Nd"-!#Cd3G^r+_it[VRKYa01:EsaS2K5`K4Hm'"=&!Fh!5*kbuZp0OgKt('m5s^^%I0!n6d,HT29cbn"iY$H6q_TWTPSpUsA"@F7e.aCX&S!tYhj+ZG'KVr@ndG=!k?L:4$,d5P#d-hV?BRP<+62TT2`6k]I=IL*$].BL-u>TeA*(7J;rdloB1X8AL7'(J9DP2rCVs*t@Y6,kLfDNQ):0]E/_$pf6e"l02D6p_LT`L7pLC!a#j6AO]RLun_:%mo9c)_E1"FI?9LRV)KYKhqcDAe_TFCc*?Z[UQ[S[UQ[S[MiJr;A\m;.CcTa:Q7Ma?]hj[6+JBnuH1#e]DX.IE!Mj_[L)hK25B>B`T505oPrn(L/DhR'],qmQ44A9[(GgY:X\>KkMJHPD(@*DoIV#J=c#$f12)-/+]],A8m_qphZfFT0!rbp!C:(lq;qhR7W25'H1OhK/ppX"srugUlEm7hFCc^!PH_"`M!nQ8Sj%\$s2WD%ZOSD21%j;9SHQ^EJs-O>_r@\h*A%=c.Fj;0]:?q&[q[A:=1Wf6"83BkHe=Gn[qh5YQt-*>.N7GW#8pUXLD7j84!%hK4JWB-=hAh&1sU[iU?K#;'3cZuoS6hWU9NOJON5l)o.LQ;;N4Xk)_$$A#R*B6slrmr!oi*cDp#')-(\iQLj.gASYV9dU61D/j91)9*pm-]g8Cq#7F?/:glG9FBo`-&f=J@Af=8@k]ePX0K$61qf4PO;c1k;IN1W&*%So8U5)O*(-am-]3a9:S)$o\QbEE!i"'mS+ci-G51Ld*W_cc?Co)kg\O-oKBkQm"!I;(e!6Ed,(m-3hmgaM`:#X98=\j..qU;D.qYiU^hbknbZ9@03bBmS.qU;D.qYj@`GEM0`GCeGAh.JoTuLn+5g38]BKB`UAh.IDAh.JoiPfWPCc*KkC3!H+BNbu$oDjPsDMX$p@$h^Z1]Z@#"qf>D#ohe0qS=k;+FguUVKni$(K5fMD42cJq7nicTSESVKRscc2/(Sm=ahZAi_TFL+@ep\]jN7FQ4I.30.7m/+khiFJko6njD8#\=Qj0dG$b\qRP'\W)T%pId\!;'+!U634[Ol.N0"ith#Po;"aLu4<4Br"1ZPh783H:)V;36CiALceP5a\NM`fZ9jA4Hm3e-%m]oU(M^4Y]]$n8%c[-5)q6$pZcp3<5nkQg?p+X7+%c-ib?_#ENkTAkRZl4Om@\f_tL^sq*j7N32!"qfZ!M3CL/@g>TTleE/SP>.<*Q!;q7%\.59+S!^5#NaHd1H"ZW=tT-d&279QO89u,qEZoi@!k(P5*EU@7Mp6N;g4Wdbp*1RKPjsM"56'B#R.maO*DrCkCN<)>^t#1I;G*liO0ptUBK&/FE#e".Ij/3@#D1kK5"Gn]C2?s)2cK;DPl:n*?cG6Zn-EKH+[5-4eN%lPthU=]V'&+W,=pl^^k9J016E`;9=k!414k%l^iFJ2(7_>;9>:>;9?1Z6RG,`G@DfCfO_@!cm;@!j0faBS'S$m0(J7"7X-.&(,g;T`4F%M"mLe*l"ECOB7%Wi*Y%]#?QqbF9!2,V0Q:BrH+.?mISCKoRIl)\jZuc6\G1Cet67T:](a=(MSW&l%;f[/RVdaROr?:)IN\2OQaBd?'ZqFnKJtD6!_A9Gk12I4FHu4[#bTKl%8W-"/;Y7,"<-fTFYR*eC5TqMGru/9t+OK1kHT0copGVe8AI$9g>uggklp)`57W.^2@__SS]N@dt[Qk@c%Q]dMC4rAkk%M&.Spf(,@&mpOgEXOK!lcfaW.3)R/u&6YHmMJJO8KidJ+&,j#>+]pgnWn^.$o]:EG?/VX-7UcCJ&\u:!P-B6^%9hGnQ3q8tR%:W0:A:1?AWQ_RVM>X3]NI8'KL:ot.H_qe<2#AomPNI4fI:QrX,(G\mO-?$i"nmqBn$+g]]g!H%0A%LL//j/&.btM"GI.NsXX]#TLGsdSHL`P(4m3,tCY7Aqc"UbXLGD<4fm[@oO7Z6Oh#@%%B?=SL2YRKA/j'.\Et?-b?$@G1MLk1+J7P^VpLC,8`B"q.6CP7&IS39i6Mt<@6T=q9"[*D,H6F!lK4.s=iHhGNFW;0'>6+8TbQ:Ra1W\n8@p/jn63]u$8c09t6phkRpR![9o4jOoEpiIZmMJXG\V``G+Wo^OeXjJ_2)dq]Na[t*8KjHj'g$qO8M!ZnRQXR)K0c)""a#6ViW$MtX:3L>(q9(OI^]@5m!4n3e\i,lT(^8V9Bei1C^Q]Ij6`[*<]%n',F8:6UoJ_V8$fcBrMR-)PWVSUa:C@bWgLL6;nFE]7J$(E&i>PSl==mLT<-Z?lmZ].e&Zjr\?nj1Ll>1BL_46QqF=\NUHLH;UCgJ48mit%bK?"XsE-o/.P7,fH&*qjF3Ci4cuqtIp\1T)DSEIh@[m-e=XA?0][JD#h5MV3m?MV3m?.a>[`>;9>:>;9>:>;9>:>;9>:>;9>:>;9>:>;9>:>;9>:>;9?Yfc=\*oU)bJXTk&mAke#9mX\Ke!F>]VE-UAUBUCh%r"UO)0_4,*q^5%'[g?(g=9.)W/q]hUJYU8GK3ZsoGA=\=3gsBmMdINW>gW32g]DMMPbj%],U8Y?BU]er**EKrkNBYWk>a5)9F4s<3Xro]'ATa&W305*(XJWTg#hBr9Am\?'2\Go.?lKW#Bt)l"UPJ.S%*mVic[8t]!\SIgZDd\^%Q)PW,k9R*.fJ0kJDgrA^L5K"W.7nFN20?8P8Tb6)M_8FMpkW7n%-;$+'2b*ml)M#sbEV"gd_F>X*N7*nO^&?X4\>!=rGKHk$57=P8EUN&ZYC#gkHb:ri6e14o%d5PijI/fj]DO'\[_`_cYKI^Zl#h*07qrfDLbusgVO09`E[jc>@+iS&s:>`_!kKY?5J8]50sBAMsiZ2]2/[fem7dHnJp&f4p3+kLIbBs]mD\i4Gn:MjuqA.BcU^sdd=f1a^KL7pBFT^08.q1Sq-c0"8g/*k"R%jFJ;>Q*NLB4ncg/^E-uM((G9);V"^=b?\4lV#s>m3M?"24fgWk#VD&B7#_BVL-JK(`_DE+3pB9$!T?+!!ug!KRPT#>E'R2bZ;qgbZ;qgbZ;qgbZ;qgbZ=a.HZ/Uf5X_96=MRK7]BIheo[\Bm;/)#lhU9/)Zg5<>-Bl/"M9972Q``mT,9Y*M"TDW"rhKPG_hY1Z.m'].$n^BR2HV_8$Fht,a]C8I>_5HE[._jj6Q2GO?!PO$E?Bh"0R8o':."b%5-+a>L#!aEY+(HP:G]pLSAfo0W8Vg;i<\VUsnWh=&LpI'^KWNn\+Bb5^8p-fg\Z8#1(iBA[d>oNT%EIIQZoEp`.QjV4K0'(,SWgTSkbWMZl[d^SD\K0);_rV8'kml_3&9JS'/g7%-s/RQTJa,e;aX$;`=If/.NDVr#s2E+T.YI!]nhg>6Cq;'Y,AZ"s,FMVcW-%#5Tfl65<4T*H9\`gHajCbNZbEHS!amR"dh$*a]l,r^7D#/O=oGQb[D&:n)T6A@Q5$BH%CX1'U2m/F[;=k/tIHInalg:$MD>b@*>I]:,FLuAV*g!S,5:^YVdNW=PhB6``rMV:)H:7I=Zh!ufT?EL2$g"8YX5uLNmZKa:ldi/%Q"Q+MYOf1S)s(_)IO)COq76.^kPX5Hk6Lh7^YC)q+5&=GNs6QSI4BZ[iS!tnra*>4b4F%Gl`!j]oH4k&gYXMC'1l?]fH_D>g>us_5ER"ZElT30b1`;jntnYM614Yg]6&C;hR$&SY/"9#PLeoss./6(q2\1@CqfoDg>Zn4:E/2,q)n:S]70NYDY[bToF>eXWL%JHF`RFnT?-'5%`nmX^*kMWSrh')RnTY?A5dQ/gpd:gqkHl7o)#W"aTFcpP)hgg=+7UC@p*/E+fiq\P!8jBD=ZA#B`DuG_7T`1hCX0dE%[]>9FT)#e>O?.*LGSlkN.>S*g\fKEiVkZgZ88[k/kcp-fgRH5*nH%2m-L>r?_#W_qu0cRJZpXC"IRW5:?9"p+-p2,Vr^/n.5u[`7M[WBEnf_No$G*6Ep'nnjQ;HfjmBP6+qO/B8U@Nm2QiBb]sU,&dp99Kq^Kj&>NPkQ?B^pS+3;GqKhN$Nal=*FZG!;3I_**a-9I[WHZ-VM=0MNmqF(2FbDl)YY;T%7)6#T<>b3oq;#8Tslg?j2s']uQ5;*Q8gElfVk$J@CL&Ie)CSl#OHlDk`ZK^u2Z9R(e*RgPWs!A//'UXntkN@QrEHi%]miWRo>pB1]N+lA`0unt@]ujLd,ih`B.2monHgn,9UlmPpDn\TFV5bpHskmsltDYYFhN:<6XXqn$Z?T9gpoZa)HXQ^MYbp17,WQY_l+NZO8epAQ>LZ[(6PcmV+00:,CU[IS?TeL>2_g5<>5X_96=MRK7]BIheo[\Bm;/)#lhU9/)Zg5<>5X_96=MRK7]BIheo[[OI<21OHrEj.&EF3/N7W`?L0/e$o-e78`OcD<)2t`JaA,cLo9h4Z78%tHCcZc"H2uiPO\`T)OjHgh:8cO7q46pe[jLe"Dg^!#`:$Y$--]T70hEVSnF6ED8\LT?0&%ju8:T?eE>&34imk9c8:@47WNr1AOC?35.U6k]_.O^H2jl_q:Bo(jQ`;dda'#mZ=T64l/nJro&WO*@ui_t:E2GA>?gCSdne5PY:k,l5!Enf>d:q8me^^r4FD+O>eTDIq:mc%b(&2pVt=23^%n[EDf(_[++?Imr-XKOlX(%\B<+7_INGoO.[*TLY%3mCjKc(cVFDUgF[fE]eB<"#f>t*_X'E.5;u+SZccZRUba*>M3CeO&#c.pCqp$.$kP&?,qRT;P&:F'=8*.W!c&p>rImUmGo(-n>qDIj*(S?uY5$K<`c5`1CY?NScHJob;esd'.r28]!n%RI%(VK)nTsU2?Ou%Am3V#O\]Fl&_,RjIVGdT&^O&A?)]=p_Z#2RKiEZ267rFVED0>EP49$XUDKN,BB^-$[E_i3LS6BNc>ETNK.fWalh%I"ZG!e7Ahtm(qtVE)5MMNBQ)F>WOWQ]8]3Opf9leYZgZ2Sbh(QB=c*G)G/,cY[`t%O&cDCF+R3eJps.io5EeX.o]8i4/Hq,Lr:%H>1gLVk"OL\?"m-SVSqmO6lCJMM[RI65\aT8s8E0EuXqIO<6?9\2'KCXf$\&lD@HF(9I++KV@l]uqfY'b'R6dfW0aeOWeIr8L)rl5S2b.Qd.>GZhOHnXHN/cWid-bF3B]@,1'N-as[f49NDMS\&b-;:WYbH%`lP7pW6*!]::g(Y$CJ]bAu.RbG9V3?!E=6rr^OScTWYu(V_?r03%oUdZ9\IOWI`l;"\*dr)rcjkS.mag"n"OHF)'"b1G')..:;a8hN-\/t`%j/cXGW=o!O_/ohV9Yr/)#lhU9/)Zg5<>5X_96=MRK7]BIheo[\Bm;/)#lhU9/)Zg5<>5X_96=MRG"R[X)QB;f_GuT5Bc*D7+EOS[Zc_GMO_RIp=S?\a:`SERs%.:s0aPQbWGi55;pGo$#JpntGsLQS1Q"N-tE:#NYH]`U^u\kKEZs4>-*;pE$kbh-0X(]LV)LYIl:Hc2FR4'?0S-`"a:db"[677\3m;5H@p1f:;b8DV;d2k.81#a&_t"kDio`4M&[:@lo%ghrW#BAMVrq/H)s"pt+:JgXaM8j&>Nqf7/t.LMrOV[lc)91DOs(r=@%e.O.#YRcQaUQm9cj/X-WLH;Qm&n3?#Y41<>$b#?`@&cVUaIF9&O:JRD$[RV[6AS^Z^3Hrb5jSmuije3n`b%,_.9I8Dg8#Y86[p,XMPjREB*_G>\EO5,I7m?Lb>^>M'GK>40IZed7gaBl5C5\TDpL3mjNpSUro*r^cH=09%RujUC7WrD@jhB2<6=4N7-2+RZO.[=>0"*C?46bHfXbZ9BBZE4X(tokWub&m2G66Bk_:EhII_ikFR#i55OJJq=N-3b*QIa;;Q`q?1O7^?BTc.JY7RrU47,]fAsRE_Sii*`1I2tnKkk_!s;l/RPp^I1j\reU2jd!&j",_$\IX%l:u!1`f)6dk^XIbODS?ZQJ`IW&q9Q.]EWI/'?*jm;l9OE]#s7,DqHrUQ(rccK^1RsaA_H."Y+YJ0Y1oMs*7?KY=ZF5K./_c$E91p.IPpO)t.-fpQ`k/r_X-L$;jpZBo0-f$4Aqmp<2jW7QIFJJ1^o1)X0?]:KOZ_*GoZAp\`mr(S?%XqMK^uD7@TO/'=\I3Si4,)'8RFbp?r8Vd3n5Q1DQ3n&qj!s!<`UV<$cE'lrUNa(9TI0/NEWS24fDltEMbGMdOuh!ro2nq$],OoE6E$XS9W\r#ErrkP#i?g@E"9(.c$jU7pJM@\50g$@1k9+knA71Tb[?R?FQ;5'\L(0AkTo;f8XPP^=A(U^(Po1Pt%d#K=U?r4VT:lB`IA8cP94s+PjkY@b`H`^S3]O8cm,g5<>5X_96=MRK7]BIheo[\Bm;/)#lhU9/)Zg5<>5X_96=MRK7]BIheo[\Bm9>$F-OmkL6QG0+:'?1t*uAG=d;10]$+p1C>dfZ>@Y+P>T%.f6MS3L&uu\b:2,GeQ]1ZUri::J:`BjlP%"e[_8TR;(D!PBEM?I)?_fY!4+W1Kg.1mYrdQhd4ZV__i@i]fmk$X56`mi8bnUpb$ndj(>W[h)\@Sc;C9"ZV>'nurk+b+7(@bl%=LC`Vq^:,G8A9::TNhW\&mK#L[7dEaam]`oYYhK19IiHdjY*Fq/it8A*(F>_3GZ:4Iu4/Fmh%X(?gU&EeQEcO#E=,[O\BA;NU^.We:kBf"j44PrflDeAnFbT1\Dii4DN%>V+9Ne1nL$3f`p-!CR+-XHS?$L*j=shbWn?@j522uibP),:n6`_Q6,PT\bu?mbJcn[0V]/;:K.$hb=!O#]/oO=Ri.BGY!/7IoZGJ)N:aK:5F3Sk,U/3=5GkWf%]UU(B68dm,$1c#2XlIjZRdT_jsE@A8Y)Dh:!WV=FX4$qS#PPUrHq)20+>k:79G8a].52pk!?GIBp,i?Zu,Qb!\-8Hh*:tI*MVI0@W2.hOOA+D=R`)Zk[FH>L?KY'l?BDd8mUhD+.[VL?KY'l?BDd8mX)N01QCXffC?SpGF[b\#S*0;mW[C:IY8PE`WIohL8AF?#ot;;W]d+17N$FPP=[R5ukHpQZO?Dd8iFi\dQ8+(X/^:A2Y=iBmPqJEZgX3q82AGA!bu\n^H.:laF?7LWgN_*%s:jfA&;a(Yok8aa@0V*68T19I_?04jC8oh^Q7V#Q(gTa!-l."Zr0QA[\Z8'$p6HA3SZrHVu;\:NX^MT-#E[ZTc;*b!gdp4jmW(9XN!WHrBgTf@?M\mZAOK>jj,sV9;[9WV1Z&=!mD*_oeV;8]k;4=o(&5>O"Im=*f$cglmcB-em]m48>pGX)p;nAibS3dc[W3[C>YuOm0r7iHp!hSlA%&%56G`kYQSrI@/eXfrc[dZL_fjC=4+3EcT,cm,q;5T)`5LR)9nb%ar8B:bLbdU^"Y01&\ZO,;dfSp^69m/t&P0t/%9]?!EJj&@!fq!#D4c*4mQV#8i<)WGOF41*^e_cRVh1\4>_>%'LJ#t>E'eT>#?*L6rCO8AIF.Z7:>W*o,UX35t`XDL9>%G4kq\MpQ,I<*P]qC!:Rr"Agh'ncVC6t:_i5(gR$1+hHXTgYXK@%-/)okfd;-RjDSp`]@)BHpk"]RbHZ5X_96=MRK7]BIheo[\Bm;/)"aX86aJB=5R'MSpF(B'-4BZZ:_Q*,ST<49YeJ5B`ig?gN3?oL/.V1ta`?j*eS@t)LPLW&ZelKqJ_Roin`kq?aCoB?GlY@a2C+CKD,3s#>aQE>OZD$u&0\Vq;eYf5;ZX7FHYE0P@JkNT&:9c`oiA?CmM7dN6c:$6TPmrEfEl#?@.N.-WnYO;!T:rHjX-Y^:%C3.A=k5Dd7Y\CPC?f>HIA=gEXK@[mkF27e@.['&FfhaECQR(hp$tdV[B-C1Q_(mnTdd9%ZF[J1ei#A.lFKGf=]7!PMC5R.Y*].K1R6Lr^8XPIl.*2$OYmTRVRBW.s1I&M>?OlP4]cJfj!@aWe4LfKmgXbAFa[fuXi\,j*ilaf>2LH)dlFehf5,qPK"g\glB0=!>Jl<`N66=l31!fh`tX9iKk^fhrpF<*pNEP5\WB2cO.YVhr/$pM+;YCT*E@KuI?%V7oR12V(F&@:T6Rg!gkOo(o^Mf#XmpB4#3/dp-L'e46stP;0!V^]nEYS?k5%^'>$iM&.%BPK80?XBm.E2!-nUG/ZE^)YZDf=ZYp*:!0D`KJ`,>AGVsn>')QTZ`Nr9(9g^lKbW_RQ^H=HnT:@SLUb5)aZWOD@i[Pl]+2FUC/QF[FV>'E:k1n9\N%B!c9j%7qPGY0kN<62p0WiWD-P`9fcd[,m#\nX5c2S&ggC^a'Y6N3_&Eno6#RS3;Q.Ib.>HR*Gs>L?KY'l?BDd8mUhD+.[VL?KY'l?BDd8mUhD+.[V<\pn\*h+PSdht0/cc^E7ZY]$1Q#2@=RHU`;]cBg&h\hhUe][Z&A4rXtG'5^bFA&Z.[PuAt8)ok.-X*Z`='P9]9XM:M.AfZ`Rq+#%/H&q%k;jiOm4C*@d1Fu6'A:bID#Wfr\$jCXH](R@e4Hj;?V.^ca_XV*]UCuJV+%M6B1GV=ApMcJU>>-&E7(rcpPXk-a7cE,*0tLq/<^IuMgXpjEr#"49B>/DqT9msQZmH"W!+WkSDV,5LMN9;FN0E\"n,^@L\)q:Z)8o(9?D>]Kc5:L!/TDmk9m.]iQ9>h%Jl@dP!Z:dDVX4S*V0pr1!.HYKq"Q0>5l>lX'U!R9]5f\U8&Sa7>L>(X&0&?6m5OhIQN#gIidkpr:,*[K2p`fEZ8$F"@!W/AK%%!q?1!uG$[TIi9dMGMR;S+c@&EETFhq=g/M`8?[N>edITlO--\jof0mT-aaiJ0Zl\aM@QPkU$`UB.c]PY".%[d]N/j?7>?'cK0nLYnIg-+kghiu4=6t@dDo$fG+Kbap+p/)#lhU9/)Zg5<>5XfhQDdoNgjD,iXFL?KY'l>h'Uod6gg5<>M->iG"]Qpe9T9\;_ZV>Ti>%Ld49m1&NA6Ut?%rgt)BT`,9'M!X>kI[]f6XLoW>IaRS#Q)UBSpLhs3B'GMt)`ZAc$.ffeb4"%An=j3:b5+)mV6dG=IbC"5hm*Fa'?`mE&jq=s]HVUGZh6Q3KYO"gRa\7.KVXqJVe(lBm]n=b:`6Irb7.s"q1>UA#)#n.8NQG8=hT0g58q6Enk)/dYHhMQq8*5-pV*?YtmtpZeP8b-_?o$I]0=1;m24VNVpQ*r%U/`3>?@%c./i;H%H0#S//'2V:9]^Ss(Z?+P`m")ab3[HHq6RW'hI'+HgUBiPSujZp-2gC(bF+=5?"uP_`SXVh%?1=tMFmd!kP/QDZUm15/+8q:il]7mI[s."=,I3'lo]ok[\Bm;/)#lhU9/+0hf.[k/)#lh.NN4Rg5<>5X_96=MRK7]BWKcjZk[F8NRCk(.W%UY?&Q.;C>P^@SaM`7D-/$PRd+ER9k7m2KC!8bQ@;B2TDmSBgE\jrRUp8?K5>;(P)YH6ASY4eYkD/^8(YatD6/qM5&K*K\jkB,cleecdpK>YW?t^t>8ea@K(0(drg#H"T9V!&SpgrnQG\;]XcI?8%ppO$:Y^'A0Unk.G:1`b3hs$ltiYfIG&-b'oZJ`c_ol4:I`(up?OK+lB$GI`0FT8@]Au;#8(kq2QpqeUNCeJFg>q8+N#E0$Q'DjD4,q+/gqQq>AE&)Ao9Eh0K`psZBajCE7`Fmb[),A-Qis8/BG2gKJ9P#q84l-8^^Y9.W%UY?&Q.;qXJhdT2*MQ)`Pk#qDt$XDj0(.]gI8IeQ05-kBF5,[7Rr7DRoQr1==Yshd#ZVCoF=tNAVG+r^WUZ8uVnDJi=`XKToAn%)Qc`H\^Jc3+o:rteSq"hF-]Z8Ns0t`$ktcej?I_CJpWD1`b`\%4I7XA0j7i*dGMO]LY?W7NqWF@/KD3]XhTsdI')asr3G8%KEqVZrOP\sqG/*h=I/2-ZqrH%@G=\o,D<2Z2p)=D#'9CD's*WaR\ZC1@]^)^^A927_]^q/ua[bJW,]C9YO7L*#h/`4j]B,@uek'6.:)uDIn%ATWks+gu;sUW:\OkY$lco!u4ZhaW\,98*mC$6[9n3#7oVo6Fk;VrBs7Lm'\\=U#aX-#!]g'YUW^BPY*@;sS?Ec6JDmsg!.!%>D\m"2Ws&pPSCg8@Nc$`Fbq=F.)FD]E+Zk[G#j%*D%-mX#7.7$P(/%FeESc$N--B@>4FQ4I8kqQ#\c[SQi?aE@B>.7ZVg:L"lqQ4J3H1o/gq;pe3ag3@Tb,WoIZgkXsB(S?nP5Ou%KqqrI)maIHlK=Ba&+"o..S(=^(%Fl1pp+4L:*U+p]n!CcEp!`[@Hh0"ZlB98L5jna,#je$JfPC-c`D#)W40BA/\>NB(6hC]gOm;5S'VWt6f]4R=Up6hi>-S%EGccpr;*]p`94ud2`r8Smu9;]>Tjl-/&ah.#Q6S9rt,k&JE:ALePrg3P/a&Y3EmXrqjZ"iBUEo$"VjBlg$PMEq98,;f;O%BkKn7l5#*^gf?[?emG3dE$>HthWOhC(IS)o[4?V7N\UA*N1GMIABI.!E#jIcJM-eZpQ0E:_-!dX+62p7\/rep^R],f=lI.L_E/A:]-?[5NF/RRKW=jHC\n%U+%RiA.VN8EW.T70+QpTFL?\btK;rEgFlVRNb'IV&(!c-q/LJV]-2itTD43nkS7J,GB-+a8CI9r9sU,],tSd8kLsZk[FH>>=uJ4!GkDQa@KE79e_.Pd[/Vq'9E-[s7g*p[[[:H5?bWd^@p"HErG9!jM@I3ani$D=8!%tMfk;_s/eIhr5u9sHY$PJ,CRo,g8[8`6Cp2W<-mKQG<hqeZZ4e>l"@4B3NuS2o]#ad^F;+Ds%L0'icF[k0/q%-n%L*7/QjLZJ*RR.iEAbFs!2ggn?%*6q.Jb-YIl:XmeT4ql!C!KSsqArf@%V[8.VEbk'/SE$g5YThg("TBN^`S>POe3N;0'YpXU;3iUb?aY?dl`W@rS$^\i\2j40LWmdIoQpWg?SqXX=5b:cCnoN]-0A5Dg>F7\Me0/gs@99WWM_R%\BW/m8tOnFuPjEK?:bGXOJQ%%eCXq7]O4M5m)oFpJ91C6)/^[-c43*jPE>7L5djM!cAaG/CUq;oW(Z6u!'nIP9T4?2M18R'SCZrK[j>L?KY'lAY\LfYg<79e/?86aJBZk[G3Lks#C>Q)QYp%/oYb"T*HDVMHoelA?)23k(MFi?r:=6cg29&EqLQ(!TZEnf_NdZJ\3a?d@Hb88S/VL0b$p\aN_XK=I1M(YIgRlAHQ7h3]1[VqG&`m8$W[!0"7\*F9%H0Vp;k,Zbt`8Lg(Y4<"H4K#-XBH"?[opHKak^gFQ2j]\V#&,F3I]:GL92'K:b$;5>B"H],0%h]P^f%piOmV^pYIDViU-g9]R\e?JeqRA]hGc/?dg>:3aTfB2S)m'h+6dEX:VN!JgMr'VZ+D)2)NDU5UWmn.N1\*ND&UGCBM-M-ISRI4gRhC]m9O%]$J`Xf4J/MA;s#a1a\17`*BnRI^MMTg7N?D??"FgfEK<0s,&.re"a?#B/bJ\?*ph68oqR04]XhO+"IPL=pe`?V.!WD;-uSX*1gRG[;SVkch1doNgjD,oTD9P3M^R)D*XkP*p(lo5FSce;!C$M6Y?S8IApB..2:kD7hfccrs7X(*]h/(9H2%.Hf_Ec\>SiLp\`(m)Z4\2&ZD4fnHKe?Z,6#[U?f]`WS`<66bMVm++X5q7^eE^bn-Wb`>r%a@>iM:NmuaslD1sp/Zk[FH>>>!u2Bj?jA8*RJ$LoUBX_96=C>+0F&J9"093Y]>[X.)8-Y5K4P.Q5=?LHR]9-3kBc^"._LjttN&[/M^B'"#U:%_Ml]qo&D2V#sYjuVb]k.#80@;FgXY@(RMUMOd]O<*`5d]^#7f?;?2I,u*T)R!c7Vm)qmnN,@[g`Y@?lD7jU1`S17j5n$,+89NYrM$&#^!b>6GDSLTii>r;5q2B?H0()/4"-.0hBrj#h_"f*HpgB@\;(RnFhq^Y4L"30U2@BIh$%Pd[V/l-lj]>l1.mJ`Sq^u7'po/^B1G4ZWS1D83j7UfTj`:1F7Im58A^]MJ+"iU*03]hhr,:mSA(Tn?0e[TJs#nRi`E="LrPM3pIEL6HHk.pmm*YdON'1B_jOn26a]?ir:\@Gmnnn!k5MT2mY$CVZ')h7n+8>3T'l?BDd8lU'IHKC.Q1XEE^'C=58p'cpHa8q/lr/=2BIheo[\Bm9nEdLsD+.[VX)mPg'Ri<`dtQ"!.aA?D+.Y0z5k33%ZkWQ@!!!!5%rFa>!<<*"!'p)$6+`Z81Z8d!!%O"1<"Jgg5<6+`>on'WHXT/?=,\S\.!4Z@^6+`Z8C1B;!-#WEX_93bJ/\gK$31(/(UV^MD6(]fHWu^+Y.IqC/Ih]2TBqho\j/dD]>0.d9;"<'KQ=a(!&K\4A]plfouiYe8((GF'l?BDd8g5I!!$(*D+.Y8g5<>5XT/>$!/c?9.]p."H?c-trI-Eh8\d4R6,7^5NejMd]I_Z8J&""kn]^OAT&%k?0!DpSoi8g%o49Z9Ol[+40@Xq9Gl8KKWqqpM3Muq-bH^349E`")DoKhK2qcZi0-!JgKW!K=pako_^sffDFpIq*?MQ5USnihkqp7F@kE!*q*uOJ7irQpScga3s2W/KDZ.KfD'DOGO.KBGKJ/Jl779e/?Zk[E]!!!!q4L>i?79e/?ZkWQ@!'p)$I^7YEPhuQ-E![e&`>E05TEWrNRp^TN;o04"0[I"7(+2uf5l5HS-c^QilUGu\gA!72kOS$<95-#(%ANglf1FP:PnZDmr2(_F5tGof>j0;h(ls[lHP1S?2ss*JDV$I'l?BDd8mUh!!!!an^(=D'l?BDd8g5I!!'u*>Er5nH(9eJ\+Bh."+HiPDf._MT>g1_n;nXIf_`5C^;h9$ljWe'nG_s6*fnS9.h4<&3c@H2^mX5n]Ycm7//kc295S#:7rc'E6s7gha`E\iqE*b7p'43Jd!$5J0#KXq]d!!$CR5[2W:Zk[FH>6+^(!#,r\79e/?Zk[E]!!!!q4LA+&[8hUePul1*q9B0!%W3/6cMIVIK(#uC<,DlWGefBlp5O/i^oc3"n/*7.P?Ja>`Sm;'^ZD;=p\"f=e*^FgDjPC`])p8(J$RhFS)\8TZJq_=)KdZD"&fX*3ZC$qE&W(BC_"Ag.!aEil/#<6j+H[bng8^E3O6;>:[C75F5Gg0pc1!!"e[g5<>5X_96=$31&+TQk-#g5<>5X_93b!!%Q/TrgqfXc1<)U]\=epHTeoL$/$omSAD9!T.BG"alO#BYEF4GRo]^9SeO)+>7].`/je__AhVYCbqDYZKScg_8uLQBb]YC-8,o#)TYjfS#=]a0Z2oBGG"Nu,14I;con'-C0gn'bY9]`8$4!165h/)#lhU92RP.f]PLJ>/a>BIheo[OS2WzMMAPhXg[f6Z,b?>".mO,Zjn1=Jb%X&+1Q_Ki+I[()>r"STn$Xk-0Erl+Xb[S(>P9YRRj^HuBk8DN.`utGrg`cD^3u%_^Ie,c4]hQ&C'/q(T/4HD`HOuQ@I3MYr[iT%KHQ4KM;fm=r-f+]_>!!!!qEmRjo'l?BDd8g5I!!'u*>L?KY'l?BD!<<*"'G#%\>&=ur@H:L;^Zs1%-\FY(e&4HuIOABDA`@!'ih>L?IO!!!#6(>>dqg1kZjfR7\NP2as/ZR^KC*5D=L7DqDNhH#*^qkemVO5G(UYs.]7j4cc:c2SK!9sJ!=-p=_F/#G9A;f&FiDeZlWVHC+uBbQ!^C1dK7/,tNN*<6'>5cI"Qd8mUhD+.Y0!!!!5%rFa>d8mUhD$9n>!)Peb>m(--!5LEX>L?K<5[0N&<[G?`!!!"LBnWphXT/>$!!&[:BIhdDz!/cQ?U9+Cq!!!"lG\AV]$31&+!!%n3[\Bl(zTQk-#g'Rf[!!!"VLUNqZz!2+RM/(t=1zMMJX7XT/>$!!&[:BIhdDz!/cQ?U9+Cq!!!"lG\AV]$31&+!!%n3[\Bl(zTQk-#g'Rf[!!!"VLUNqZz!2+RM/(t=1zMMJX7XT/>$!!&[:BIhdDz!/cQ?U9+Cq!!!"lGc#/To(")hn[?$t?:eAKL?IOzE%R`bBIa&_!!!!I*nlL[!WW3#!.a(&X_93bz-m%*"[K6F/!!%Q/TrhuYz!%8oBMREQd!!!"LihKqNi@G+mm-ia"hKCXjHk/g+8HSdJhHN=*H!!!!kO2i<2(HF/>dC80q#HM5H.AM074j'sL?IOz:cu,8YAUD=kKT2Rfo1#W1#<6;!!!#W7O(+RC4'Jmk&W!I^jYrLg5<1-FOz2_;!!!#<6X.r=z!)Peb'l=*Sz`C!kWi?"TSN&!!'u*>L?IOz:cu*"D$9n>!!!#<6X.r=z!)Peb'l=*Sz`C!kWi?"TSN&!!'u*>L?IOz:cu*"D$9n>!!!#<6X.r=z!)Peb'l=*Sz`C!kWi?"TSN&!!'u*>L?IOz:cu*"D$9n>!!!#<6X.r=z!)Peb'l=*Sz`C!kWi?"TSN&!!'u*>L?IOz:cu*"D$9n>!!!#<6X.r=z!)Peb'l=*Sz`C!kWi?"TSN&!!'u*>L?IOz:cu*"D$9n>!!!#<6X.r=z!)Peb'l=*Sz`C!kWi?"TSN&!!'u*>L?JJ6B#7T^Xq.sA9sS+L?JJ654^/>gfqpan.3V[K6F/\.PC9BIbJSHm`/?q#:Ee!cnFP#L3R%cGs;^D>Zr?e+g&r^jcJJ!a`ch(CUK,Mhk^@L''SipeL>FpB:Ici/,7?!O#p#i'1]##Q>?\.I^$Hqt[5,*J*AUh?k>OJ+EUHr)_gu_#Fo>ZL^9_"+gIkfGs)_`%*9c#eX5%NF04sq$$g!!#)^SD$;3hD)FU`d8g5I!&GADMRJ*LK!q,@X_93b!.^IED+.Yp$/mu)mXVX\Vf>_po70VQhs+hV9n>^*1>m)%o>HQ+%X9kd479:_^pii?]&.6.prhk9o3:'^:ZH#W#e6&QK3JEFPhs4LJ9,FCi/<,Pj_ab1nMU4k&._dEcRf/FE-&fV]IWJT^`Rf&?t7!;j>BU7I$hR=gB-fu_#S9Fs]6XX8o2W1,[N@-L^!5S%6g5<=j&q[QdX_93b!.YppD+.Yp#sheCT3b7Rd`IlH;Sn;@$MiuTo9RY^D8-\IcRd6j=P2okaVh;TpSm-b2W3UuW?ro@u"T%MABpCl.AilQQ-Z%,>>o`r-8n[6+^(bZ&7+g'UFXg1l5JU9+Cq!+m^f'l=+#K^XSBdiQ77p\F0rIJX`i@e-b#k5t/jBb,G#rYBaKPfI!RB[?*sDuPe#jp)k`c3f'Kgi7If*s57T5Lb+2+MJNG%!ZTT7i8dn]ZKS$IuZn?42JPJURAcrp_29XMAQ-@^r(_Jq8UHZGtVcRr*4Xlgfjk%%HjY$*t>jsnBN#51#8`c!!'h'!SWF>JeE[DU9/)Z!!%Ne$Z/=:5m]h]d8mUh!!'fnKsm_XTS2f/]8%;M%+LVpFb,SU^=i2s+5^Q]%!2Xm&K]ZdM>[VR+E0$m0g8os_oI>dkIl?Z(^dc=]Nr\_roEi1fY++fT2boANgK0r;i:^;Oe2^SS7M^3"S5iH1k!%0S4d0g-h-+\=hkgkIu^SS#K>#KpKTo)hK=8aq[W^7cs2^i;4br=A\8`X!5LIF[\BmsKV5G\/(t=1!+L?JJ6I8c?'l=*S!&.oVX_945+ahc,qg"gRK7Wf%=7_;>(r[S#mV.EY9K[^^h_3m5qj$rDU\IA+%q:F"]I3DWT%GPO`E_9#n^X!.Y?61beb37@q:HL-uopi(l@/Ja7&i-k2q/Nb__\924sh^54H$d3WK/qocnpX0\pM$ZhQt+p&>(h"l9`6#eAF%1#b<8YW-&22=Z/'^5e[V>=$@t>@$>,C2.E4g'UFXg?L.PRC3.s!4X)s<`;@id8j(1pc@PYePH"d>QoT!pCsg,@X&LLieT8;`"s?TC:L?JJ6I8cJ\fH6PoUr;d!9!SYD0;,jG!;O5o>?rO6?s=N+VXb.=-l(b%P5NlF,F,,K^5+4%\]C'9F_gdL@!_QCOTu?r!,bou2]dG0=q/OOST+`qKAFmT:iao`--GlJT-=dc!!(fYcrRmqg5<=j&q[PA;5SR;'RAU:!8rTc[eciI6+^(!!#:ScrRLgz!#,r\79]cm!!!!an^(=D'`\46!!!]DD+.Y0z5k33%ZkWQ@!!!!5%rFa>!<<*"!'p)$6+^(!!#:ScrRLgz!#,r\79]cm!!!!an^(=D'pK7S!P^B*(_07"l2e]=76`ER]cmFVn687ad8j(1crL-&+5.&%i.croU91)ATWJ3+5-u%)^^UZg79`%aiK?5B3#ee%A)g5<=j&q[OnQm'gW!!!Rc[\BmsKGY4V"^G8\CV&+0i!.0X62s6+_STrhuY-q.f"J/JE*"TSOW[\Bms'Ig>i4I6/m8Mq4O2"=Ym#<[@GUuF>'f55.#9II1^!!!kiMRJ+7KXLrL+ja6i!+9Ijg'UFag'V5B5[+6hJ>')Y.k!iDCod?eT\Jaq^lH3#!Il+b#1a"L?JJMU5B(1BcD=!!!FE79`&,6cp?0.6\47I_$)Zr6Slb+eKVAIqn!!!FE79`&,6crL,H?t_(E$;(oa$=JTR>6+_STrhuY-q1:=>FG9QrdsnskE83V'??a,4tU,VJDVF%$31&7D+.Yp.7.5>bReGf#'pKoLeLtRhqhV]WFXo]*Tre:p^sH,h'pKoLeLtRhqhV]WFXo]*Tre:p^sH,h'pKoLeLtRhqrgZ613t6>W3,'-;<6.Yg'KR".5mU&!W]`=TrhuY-q.gM?dA:V'Q$9C!A)g5<=j;M;LTjj7&8e[:(=!W[a1Zk[E]V$Lp\Q!Es8]B1hjks?_8l,-MCd`KDe=+(#i,>egHKgWWpj[uI$,6el*#kMpb.[,2;dXTZ!SWF>Jl791\k6Wdg5<ObeSXZ$fIYF+5?XZdB@f3+?oMCdJVmN6BVR5rgWI/fij*%:%uns5;q%a"82aMN>qr5cAf)&nb;"+>37GZ9\=

3GUQKtQ"7lBc@Hjm24?k6b>pEdS]n,-5:(.gpnUa+QOeWTQV17ONSaVb;cEXVtko[jXr]rP,1+!Cleg3@6IJQp5WK=J%!5OQuD+.Yp.7.7dgS5f#`)N3SDn]BZ(BF/omJ'N6=^Z&i#".KAV5^]8sX!3W4N/X?d*'#\LHi)p0K-t3>_&mkV%%TU9I02So1a5GE7qJB\,,<9uo/,XV%Em/h$$joW3!u4]:jnlT.J`Xs__R]!OXEp_bDqTHH0/Y(/@:X(H*U_a[Z/?]^GmZ0E:f-MSX1t70G:FJ[psGt?pYnu>V@UC4!L^ejb]0QZ>X\]*^/4"#Q#n0l-m'2jJaW^g7"=9B8jDPL.;J[,2"Waqr*JrYeO1=T$>@Z#O:E5j/6Hqs/>j)j$%bRA&8Zk\fLZk[FH>L?IO!&2lpX_9457;+4*MRK7]!!$E(6!M`;:l7ro!oCB]"A$WL#.GGe>ZDsX%?M"sRP(g!"IJjh"c3"I9g9n%CAdJ2EEeF07/$mjRVF0jI0'`o(sGQq89[o16miHm'2W5mC+^6]tG)bWMs*Ji71YtI4c?@H];lJs0Wj6SWGF'D0"CB+(X3L2VE>P;m'<0:1d^WAG+>23Rg2C'6RHg\pU(8:@uZ.T2Y/j4j;&MrlV7IP-tDl\C$tOBIbK"BIheo[\Bl(!+;Zi>L?JJMU5D2'l?BD!])'qfY#"V^nH:n?[Di\T9B:?;1*W\SFfb#8,=Er]sUVqZWeL.=X16^rGl3>=7Yk;$91-qDdtN@")L3?rp`[^iB!5i0?Ppi;8$,b.!D&f\\$Z`i=Qm&uPdQ"We-J3UIjnk%0O,EE4=%'653S/=4,X6%6CYRqt'HPj*o'\T[KYq:WX+f:Q.nGAfMlGATAbe$XJs``%fVOaX.h\CY6WS/`T,Ci%><_af%72rA6.W_^p]VNq6c?TTDI]_7Uq\akETW>gr*rr/1a315mZ=)=.1PZ?['G!7ZDR=*=VBB@gQh/^W3h/Zn:=E\nLaOQn(P_2=:ZFXX=Y1n1l*]fOI]=r3FkK]]`USHjiA:-qV[uJO!Mg*gF?!@i^QIF[\S``5'a+%oi?`a0&DZ+[d4L;4[mT?qgY$&&1QG:.+G#[Ydp.[V[J'Y@k)P0)r/SQ^8J/\sOMRJ+7KXRVWBIhdD!!$ULZk[E]V$Lp,>L?KY'`\6X1h\Dn$;(T]Wk"qF@eepFnZUJRVZc"?9_Vb?-2p&e:ZGNhL-m[XYu`fs)P/q&o"u]IO[G6Mf5HqDeb07>[%-;/6`teiKDHkCuK#IaeI=J$TH.NhH;(i/D;Yubs&(IRZ:U?6g^r6hQbdi^7\RO513HT-eEi<=TT0F^4DVQj'J%eX[qrA-qIc[HJO1pjNX]R5@s*0`4p[JHul-mmtj/68,%BI4)5$QUAg(=)E-CN3P8714(/#sq4"TWM:6!M`;:dWN0Zk[FH>6+`>N.n^7Xe:??X_96=MREQdJ/J`379`&,ipg(>[YgE0Dt'X&/\_o/W::_pongF@`Nm.2Sh%PGnIHTY+-hPCP9\!.A0L$pf\i\J*tCb-F!aA3a!6AZjN./<_H/X93&5$npuLJL_oSSDk6C&;@-#u0W#RuC3Arc=$X4^3-u>:k(`8H(,Nn1PaFs2nG\!mG%Le??^A_P$4>J&fHWp:BF8jsJ*$0tW)&eJs5;'j\Kf'a0UEa8hE,\.(L-=tNl0B@ShGHZ'#A'UnV74s8Jfc"jF:T-b?94:ja!(lr6TX,;WoG.,2*N9UL'Jq28+Vs$&U6r>We&mqr)#n#m7.i8=SG*]uXi0+NRN7\E"9N-!oe`.=,)<60&q=hXQAokm?%Vg9T<)_&%U&g`F"6rILMh0qent56%0O_nADtU\^@-p[$j,Ht<_@6[Rr.nrNB6eP_ZN(FG_ZFhUnRtS^a3$SS&g<'?Pd/n`hpqroc$W/OZ^tjR^eB@C];t/]&ccf46^:HH9"+.m^_OX3$GUg!t%h@+;\44.i#H0m-acNU$#3AD%%6?(U,!,i=N_g8l^EjO=eW^=t>fUY8`pOX9&7F;L-^B)8R9W?"`dX-+#\a?RJK@U"sG_RA[N^A9nmfME@U"sG1*,+!\T[&==e9A)nMkN!YF]Tb8ouktR2fltW=Pg*]Cj4(=5EjA0!EEXGg;NlU.&-VT"O\q_k3*UotV<>%V(q+'(fN*Y:6E1L'(#+UVOU>s%kV(^-d`Wmr+B5ifdgq`E7.J/&7;k>o!ir(FJm)R6Os&Wbm_^ht:@o)Uj].(Q[,1_Ou/!-hJT%7\\2`Sd`8p"SRc:C-pa0k80dl=#0,8k&O8Ci?UWGPHMKR+L[5k0pu6pr7uAc'gK(!Idaj4ac8e"eDHYmN*BN@+kqkc6Db]KM_2>Ht:9+bWf&Cb)q/aWfuX;HuL(:+)#"pcTf!8t,C\F;'\-DcKoGmZ5)Fm_SOAoEekD`3ETMg^"<4+6r>4f6:YWq8;m2/3,?S8kGYDJC7iQ#CG4I6,0q^KUs8Oa#:MH#W:?V-\f'F6Wa+P>;)?H#F:;rOrTQH%/^rsU(.q/]atBS%$Ob'c&UgNJ,J,B4Ze0?2eje7d"7QrFJ[PF/;mjP%)cV5_n;Om^3k!^*CKd#PEAs&e%Y4._&t-Cj`"HPK_e:`hm\%r`B>tk%n=Ru2[71PKt85BT.SRI]D`p1ao0#+/M55/D++^Rdg``#gPTMR[M@PSD8iq-KFh$uYcZPY,`An/fN)f=[M9s=OD9Db`O6snUdA9#KY9]u0U29t?3TT&D@'*m7R=M[YKR[VL%G`@$BKm_AEj*C$$rD]mtrG9?M*=:qDBXo5$Da4GV]7gTBFZZEVmJTGR&isMCqiU.AG&**JDFuQ>X3Wd9cUJhgoFd28Q`Ah/MDoMm2-XE:<5lYdn(-ahHZO/^qVuPhmb@6RjT2l8mlbpbE%UGD[GYEl]G"VND20K7>_c'."SI_/Yn%B5XbTtnS)B-uol0Dc$XGiKqGe"7]$Mu$j+R81:k&IhDKiq)X7nqT:AmWGrWJ@gWMKp,XU$(\]"tga>ELJR[UNIGXk6[-&43B+[M@PSA.c6bgPTje[N^A9;JiY?fN'8UUt\N5A;@BWBG0s&/V<]J3oPlk/%cS!$(=N`eg'.NT_kLrWj`ALRXQT"(2aDhX*Via&4.tAa>_EDgM+03_g2$D5OF&X%UFdrF\VA[_`-N9/Z3#Mb:$W+nfY$7l[[$:hh(b"S;4ft6RF!@HkH(cn6j(iiVPiH!df91f[AIa5Q"n$bi_;p(l@4pk8oj2CIq7qP+%DHgq;_egpuf9]Q/H(em/^CfN8PHqTk.?`\06d-X@mC=T8_Sd4hp71%`?pmbZ_)ogJJfnDP1U*JJ-$4bGi)?%p&nF>\I@?j*&bo`0/"bJDoU0As_C#@L'f-p7FpAZ-cLImfcpRipIC&4365Cb)q/aWbOO[M@PSD++^RUtT3\Z)pP4@9^"=fN)f=63nab#2>#P75BO^PQm&[eKF'[RS,F?/YF"j5WBp7+Y4CNKnkB>$@;)E&G39V=kQ"SF:TH!)LWuekmogJW.FVc@Q6+W^j1hK_M_K:E5i.Ki;Q*WnDM]Cf[UYNbrZkPF'B]#ft!+HI4l+RhX?mHcepI*^&\`*!]Xf2nF#ZD/mj&6DVFRk5(2_3RIBTsQ5.;hjhN8u`j#uLn:KL\(UeE$i$Z:m"p[X"Gi[3b\8fD$BK7f;3Fa9R/+2eXchh1]CKi%56"dpt_&sYL)EtK?T8$Xt$F$KaL6p3_d.UuEgJ<"1RD1ie8&f$5nsKTT3+nJiKCEM==`SPW"q[3A_41d>%IJL]i&tNZ-R@N63s>7J3*,!\abN]3l=f3_m=)`M#R/^6;#o([X36h"V#>1hF&&@/DD+_81#[UNI'/Aei)>Ht<_Rs)VZ.sJn-.sAbJ9D6.i$b*sKbP&c_o6/$j99-gFs)%q/qpckbq.I=tl;ab?nl;/f/oSRXi)hm"nneh@[:UeV4+A2S\7@C#[X8lr]]]o3Z?/$1Z/Q="^2aH`[.%;0Gi:9bBYcang&[F0ciY/='^bq_1n;$o)dL$d#@+u`)dKa\X)[[]E8ff9E:K+YE9T,t`?r*@`BNM<%^bdZ%)X&IId@DH]QaZd\6oDD[;m'g\nJ9eaYpYFnIE'BSoN$?m;W$8/MNM1KGrHN(rOT;cbdYZp;&b1[_g#,p;2MV2oEU-2o:9,[_ZO5&&B!=O2?TlGJb_"p;$J3[_el[1Ge!IjkF2#b<`)Y=*mFNA6TX4aE3&O`O6s.Jo/K8@U$+>#U+k#/SlrG(!.#'/%-2IMJYcf+f&j]>Ht;$(=@ETdo#^Hn(J:@)#CI=BlLG@LMdqGK,>qZ[]%t(1jZkS_.$4Z]lK&$!$0C>qB2p;;bTkpn_Y#FDYSc[\#se_#;URNQop2J;UQ&d)ibrUOp(Jd0ghXGMbXQN\<;io2T"\&b1:,H=0ZgVB\N]hK=lf_L3fYqN0B1m6l#0Q:kriNHID)sk2,knT.h+93pjTC`F[2hK&hTSn&-l.o2*d-,hnSkMk1&7Fh.n2%A@Wc:k,369b!2$70k'c%CR#+MI[=-(#+U_`O6tD&5mALXk6Z"Mm0>9OnVXEmabmOu[R(amR5fPT7=2G,!'16!/[698MS)W+B$Rhb)=$"'6i%:Ng&[bFD6h:>IZ'<-*+*S5*-3+bYqsfN)f=P""#(Cb)q/gPQP/8@?:B@U"sG_ROd0`7p>I8[Qm*DAQ(3X#YFst:W=uH-Vi@MVXc4WL>k0KDU()6H9?t1J^2P&r0YLsB-TieUhpT7g9u9^*W[*6/;?km5D+1`9gPTje[UNGQ63sPKfN)f=P""#(Cb)q/gPQP/8@?:B@U"sG1(E!RD[MQ:k+bj_:ONDCSn_aYKjo8Z!t5T&+%.Zu2&iH7^6K+5,h]UselN!g`YqQ\eBh'"%uD"q03a;_$Yh-9%$B?8Erjg>Nt53-/XUHF4+)m;K)5DdngLr9TR^&+r4LM"8n'>StF?@kelK9P.@mkO=X]?1NrW:Vc,X9P+SI1l5`aF'Xb8s7&8"O.kauTOsj.>>TO]$O<>9(SF5l(`&dijfYL63mgkN#CSOaY*1ejY@6ADd'H(VpdQnf^a-Pi!\F?%TbG.lY3Wko%Q+Z#W-bI;<;a/?j;1\k9gVubkBlqcU]+AYq<&t=l:G])mXT+(63rusYcZPY,`An/fN)f=[M9s=OD9Db`O6snKPe]:@U$+>#U+k#)f.%5(!.X7``m-XPb>k1AXU(]6*4oO5s+B$0gO+XucbL.u)/&juPCj7f=UCP`2:*b12(nRIK$ka\n=RQ>BZ)pP4@9^"=fN)f=63nab#2>#P7C!3RMJ^>@@TsF2#cT`7K+KYBEYZ$j(>s[l\/c@)!gjB79,c.KTOq8$Y7H[7GmsH7]a8I-otYM>[).2SK_tL#^mD_hgp=U.?G#nBSiYR2F\%jj0rGk$'0^`,K1d#Q1bQ]M[8g[r+//TD":1.u9l>7'Pk9CZlNqI6sL8h^b;_$#=<\i)a9&K).j_3nD';61Hd*f[BU-ZE4BUA@fUc@U"sG_Ri]-kspWMLZMsYKBZ@fCL7R,\>isqToE#4aa`-o=3lE/ODNMfPD_7=X4_h&st.h(A!ZYEoMlL:2EZK/JX.+i))G=2TDr^\r8sJdGb_DPqL0LN?mm&l[!1\CkSB@p_Uj2Jr:K#*E<#oTpubdai#hs&*T":I^l'"8^t\T)_sQ3]_8QeB_$BY:iLtm*ToLAHbFu32+_4dh6HF8$D8iq-)1l_E[UNIGXU$)'<%Vo:[M?mqCb)q/gPTi:#U-!Y@9^"=8/?J#kUTg_D8L$rL6*'D#l4q\gA4^70D#UlL"X>!TXCW^Gq"+bg_K5_H:[a^jQX-Pi6Nq0dMS=:ac`G2SO[Fn"\X6$VPa.sU^]6b%6[=ZC'f;>BLW"97qi[89AVd#`jXS_P!PFV?=$)$J0t46.b-'?%UANY*#O]eL/iR)J_An9Ae1+dN'jKAj!#UW;"'4iORESYdUtBG!39A:JV73YSmR"Vi52YB55;56Ko`i^Gj/*>m-X7sI=2TADKu`\hW]_W01Oo_DstPioj+f)mK$!nM3lsl(^BK[?i`H-l@\K+"&NW8f5X^%cUOVk"Y_kN_0^AI_7TH6_>]cR%"h)mTMmNS]e7+dFcW4k?iTc_+MRYDn28G5"YMoEb4g;Ki28".B)rA=)'OJK0%dU9?_C(Brf\Fsa>rR@DB]OCg63s!fYcZPY,X\f#U+k#/SlrG(!.$O[aJ=3odu`@4A);ckmGlIlZJ?hG_K^NKpl<3\'jTAnCAlNM+3K%Z/W*f0#?!am_Z<.RUOI_S+-'L)e&n3Fg;mVY'C)0*9r&%O$8.Qa'.HlUCH_Bl.aPtU@GK`j*H^hn(t%!7uuMXh]B<;CMFoIXmktnH?f!k,5!3+U3BY[ic^fFf04(T4Vba\9$`BT6dkqYEc)F0WmT_9l[drbsA&3oOY24nG:UM*:FMbW4Xmj3\H?f-o1V@t8!S3d>K4dt<_=M=-6-$:)mmJjJH1:`c2L+fB4]kY3!0<\`$SPcOL?HiFKf,ds_/gEr)DBlu2(./:M3ACQk&_8!F\4c;(Zl)8e=T.lUK/4#+oKsI*sa$Cr91AefN'7bYcZPYCb)q/+bYrWKl+f;+rPuL`O95[Z)n9TKN'O>/%-27+r/hsa543GMD0(E:&s_X(A%\6#([#SfIo%F#gilbIDtdt.)U76I4GRdd>#50]n+6]jFN&cXtZ9E]XZ]MLlG9J(rjSJ2MMeP,7jWg,g&:T(5sGAFJ4_5;M-*Fnt`IaV'6qh(&3nG0Zp\`IbaO"URhTK/]j,%Qqo#HKs!0"TamWWZ!q/4Q5k6*rj@ce>M!H7B>/WYTmhXShr-dHt<_@6[S!=$Np@E]nH.1K_D8O-._b#^W)uJ%l3^20]]tDeCfhC``[EabH"/TTV]Z2,hfRe,05eYL1.!lfc0HOSM>hs$%%@q<_Z=?\&B,MhYS/-B#8fNT#;89l/XhcG@aX6ZOs'5L'P^H3iA\p3lS"&=m]IF42A=CEE@U"sG_R>?T8fmZMR$s1nFt'*Vj7AbpC21.fasI!eal@SjLaA@j-;O!=a_!D9ZkOekoODoLPP'VllK]"ffR`9P87bDi;Q06:RcK4#8*u2u[Lsh2(oNHt<_W8.o/]#f1k?u:FEL"25aNC^0pUcrD\)s;q[0&iKW\i.?EPX?cNN<4QOUd+nOKidpg)R'6UmprqWNd-6H$D,#5-'.;p(ech^\a.oLQ49h*H@q(8G=X^%W;6Y@T=3`FmU>S$+,!n[$P'H,Bkf^&?Q]`Q\dg%DuH]F\g,qOTE)(+T-4,X].bK)LieCIZQ-IB+WrbEGQ#n<6BbTIsL?.AP0??a=]>CMOl">7j3CFG"GL[N\k-D8irHZcTXb>7j1-W>=,eCb(Z;fN)f=3Lah8[M9s=OD9>``O6snUdA:^j/BifQ#7dIcr\XG9P7Ef/(1%^8!]lfl..6*\+E%n)0b+%2GDtj-i>)<^e#jQIllP4lA?O5Y2_ldLZ6PYH=6i/nJJXh*-?gAW"BV0"mC3N_"V7cF]:-[9Vt2/EfknCquHT4Ii;VVG^8LC(3KL;*6er1iX1W1"EhYH+4r7U/ZHt<_GQ5.5&hH9[cNG]#En?5o;od;l?f%j6r#/\*%5567X.qhO`?'jOYo7i0&)0L6e,`aL3:GOQcu(MJYef#ht5R`O95[&OHc&2V;&H/!@iME2KAP(mLb=[QifELfN*Y:6E1L'(#+UV&[iG/MJ^>@,(pM*D6U.p<[:&rUKY."Y@qceV^rTY$5\At_E-Y4Y[.#hcu'a6oGLQ]9!9QN-scHE#l='U$bF_K_LR^hDrpd1Pjq=?DCgN`^:XmSr0Ke?jO$hLn"'p=YMuV&K%G9kUCU\BciK\($sb66/^99:D++^Rdg``#gPTMI[M@PSD8iq-KFh%hYcZPY,X\fdX,CD!r3qq-4&\(V49L*K?*SYib"V\7,>'Gl)qC*6ZBATJ(nhrcTgI^S_g\G](Een*bcOUG8jND1oVB_'nq`(`@8JmXd)u`pccRfFKR[K3b$#SFbi^W&(:=f\?cPlh=/ui+!*Cd#;02!)ZFU)51n>$_aX1k_*Tc+`Irifc1OnGaSuij)MAYgrfs^ifN'7bYcZPYCb)q/+bYrWKl+f;+rPuL`O95[Z)n9TKN'O>/%-27,3eVuqKpf&1m`:q;dRgP[!)_.=+W'"]q_(DH-psA]nfu&rIS?M3mG:>YY40nF:ZiAbKJu^\S_CS]o$6FgBd000YZ`W?uN4Z+$Ioc[Z45;d@#d5QT]l>O7^=g-Z%Gl2?s%b3\^&430kM<\ms'Y=n#F@#[\)HYk-6R*#eJ.i9M6R^%>ab@gi#)Ks7[n#^1EO_;=T'QqT:(q(R[gf_9+hG5$s4(XHBc1TpKHqf$("K"98Gp@Wd:ZRlEo*uEkV5Qo!?29O_?q:l7_7Ul.g1Cm!1@lVj(_N)&ZppbAZ^?UdQ>BZ)pP4@9^"=fN)f=63nab#2>#P7C!3RMJ^>@@TsF2#cT`7i5+1.u/[XHuVL/\piFW/Ef)X$j-b"_LWLh4_.ilNg"M>#jOnPXQh(rSf9uIoo/m+;4!B8N2qV/I/!Ht<_lV(luZ,o;a<8rPurC69iNOQWI.qq6LRc;'H>:bi5J3.UX"T7Kn3q".ZYcT%#dJgoYjXk5tk/B5V9UPGX)r-R$qK+)J(u%jAqp(eA[X-OA."(pnI+`Z4T5,#KF"V_q9Tf2M*W;@:U=pTZeh0M69^"29s*9Q/`3ohYH4`kToZ#Qnu`l0\Ma3Z@4nSs&rh3L=$hh3PD`#j?3=63Pa^7-(cs+;mNVKKit,#YnjD>IS()?e/pqr)YM]t51S*0#1JnR+bYrL2JanP(!.Y9/%-2IMJYcf+f*h">Ht;$(1CFPXk6Zj.maLbeHXccD+1a$Ksl<.oi,V*$4FW!>8=U>B8umj_=.*ahj5aD^?J96sGmWd^terURQ3k>q#C9A7#U+k#)f.%5(!.ZW='K6uUbhX091ISO9*WV]o6BQ2?LN"_l4C*WhA@W`'Jid'P)'(AjCVd4cSOij3l"=Zg!a5g/=c,]3A&@T74,(%+[RLD=iO#g:dZIM'WE3*ahe$)"4Ya\=C,TZX2Y$CNQMdT;Oeqakttc-)p/LA]\Gr0RCR>$;m(oXQFX+bTj((#+UV&[iG/MJ^>@,(pM*D6U.p<[T9P)K5.GTOi]'r\-Y,&OlIe'T0/=P@f>T\\t*[[4[jG5-k1gDB.M=aGZXpCSj?2#ShMe4)-ais-5M0f!Nd(<"-fso8jSSUEV"l4o)'C!3,,\CTF;ZJ\Sd_"Ib2G@^KQT>?u0RmL28A,#aoS7Xk6Z"Mm0>9Ht:9+bWf6Cb)q/aW_JR8mhC3QW6)GdVkshWIQU++gR>Sfd5C9LK_IfPWb_#egXpH0M/9h"I9J@@0aEDDpI`H'kC(BZ$!!=CscS9Dpi#aWVIA&&oA9rCL`Fa`#DIb+=RDPK8nj$?W$8A0Q=k=8aoHE1.^"+PVbb6Db]Ht<_m,]<674>FBg;f@L=V'#kYP,'jonZEPCr][+CKlFEW6edZ0Y$gm45gcXK!06/NpnBEp]&rVo,T/Tg,G'"TqtlAJH"4ZK%ZMD"fE[1jY&>:$n_qj!0fKk7N?d&]@5V;*6eZVp#$\ZSJW\pmE:is.i]C^iUCV!]"S^J4DU\%5legT(63nab!o&TL7C!3RMJXZs.GK_s70k'4>$tR>X[n2n8$sB]SQ)eH'nW=0LnI!*6"*%2-g9*_Rj\OQKF`aKTY$="jp8O;\qdJB;hFFlL6sLTj),DfY[GFhcKDV)`CgS^[,tfS9*`0P(.X=3Y:Q'I6MUIi*ff<03&p3=(GC_nUX\6n;/AP!&ASh5h["/V(kV^i/NB&Si@fYg$'#a0pr>UJ"1rnr39.])cuB/d"._Qh!2IVd>+4jG3I(G@(p'k,L'.B/SFrd)nF_SF)]E&#I67:6C\o4o)3*U7)a.#9A"FW+a*$A1?jsM^\cI$C^(.>R*JC>+7Uc%4$\%V7%K-&%[iW7%N8^PW&K$7JW5GJ0^kN*gp;+"r(uDjt%.<$%!!`aWpp/e/HhZ(-Ttq!E]^fIeMVs]=`]7DnJ[s/>%_]]l7$!:Rr2A)=;l1c5o8M8-`dE&EX=GU$8#R^Q&]dX&<Yi'F`3X51V%(2m+*#aI-ch,"1CN%*,r>(pnhDsfr&M,@m)b/jD]oVK)+a!&f/souJ2m7.Q\f6.rCCNCLU_W%_!W9G,2&D:4`pcQ\$[;'N!Bo=qH:-/iZ3rCWp"+-@^'"+;@snLG0#_cTB:M!BCZG:^@*P*?Gk^n3e2bkJ^TMLk*F$+JA]<$<)aBj4$6It]"?150$!/Z6[Pu41Z,).7N]+\`?_)aTI!uph^"!Y>So04-_Y(t,g=cP[h-aHlX[n1S>Ht<_7j1-WERqTCb(Z;dV[M\B[k6BoLGssn37:r"e@)jVsoP9UU2k3oM\rt*BA7JppDeKcnT"`H5hRo_N:FC]X6B:*GZq\D4^B[_;BZe"DV/s^6OK0>lgHQCHn=Pk6ub,^#eb1\(u#pQ<)Yp&\sGlq&3S@HNX^O%)^_KXrG0sSZh"+bE(Sd'2RPXh0&5OdkNiW.Y=;mm9@)8oaU]#`Ie-[*uj1PL1bJgY%'-o@OUi(]@u(bmrcJD%pm)+o.E?kn6f%q%l\@<$/I:e[<9gSJHPZ)[G0$cOeWG[NqSW_?DN5!\tAh[FVLo%.E!>KAZ%0%kh90K"q8+)lu'S%%".W#nrL9">rKXMU_]tH?`2*eSb+bWNJfN)f=P""#(Cb)q/gPQP/8@?:B@U"sG_RP>_8i+Acuh[R"7B?^gS"P_J&If\+bYr,-#>*?(!.#'/%-2IMJYcf+f&j]>Ht;$L1"5jXk6Zj.maLb<=@Q=D+1bO1SI,Kkq?;.8]T4XEiDC>kpu!jW_cUXlTMq^l%`0o$XjafE,6eOSfL2-n4%POfXeUD02:,RN$CBkCtYr4Qs?lZn2gR2e]7tFk8>p;l5KL$>)QgPQP/VAj>%[M?n.Cb)q/gPTi:#U-"t?sBn<8/>Wd=]Ed-oVKlEbC;>=*-j>bW,oe0@\:'"U;In0[26n4i1oFR+7o@H9`1+'htN1H@\r>tgtF;blmX->1l%)qAMAYEN6drj8L45:e`cRJKYljXo9tSI`KGq'!u/jElGp`O6snKPe]:@U$+>#U+k#)f.%5(!.Y9/%-2IMJYcf+f*h">Ht;$(7@d!V&rWc\Gc6^2GpdWArcCX3lgss=L.V,)@2Nh31$&WB:aETVFM];Mo>X;naWB<8bbXng-e!@88*YC9N$9&biD\u/]hpp5qPEEJrYELJR[UNIGXk6[-&43B+[M@PSA.c6bgPTje[N^A9;JiY?fN'8U9Vnl>&&;+HF*cg;-IN]Hal@:7a/AKQR9jKgp#tl\]k?Tf,7U8U#gE$;Eoj/>roK`N:YgK`6&d,fZjsB6T&'>NVB>,f&Qt5(91g[V>(i(&1[;cX$Kj)MbLL0Ud"Qdr-"G3lM_f"`pKa.s88?[$UR;1NDV4"bD&N.Knbg7e&CoU`Kl&f7IS(]/1;p9h,u.Q?A[N^A9nmfME@U"sG_RHt<_Us/Zu;La*$0@+j3#pe[B(@PJsal>R0i8A0+39\71Fn]>h#MbOEKjt\jW_M]5u_ktH:nEuhWGj"3F3&VPf/!l]4nHK29hIq[%-a1A3Nddp66+W`Dg\TjE"'=F"M]MmjPNUY)e]27X*:U]?i*kZm"!?OI+#B*jcLV=_F^_?[2nlD^38SEM(%JT=pJY![q+Gc\>.:M;Qf!^>f?+tt'6@RXmXk6Z"Mm0EK>fO0[J?qNd/!H6B:'Sd79/7\NRj'35J_$TUL3@0puX]ngcu42NPB?aq^N'"/)BMCTsmXturqH"[F;r;6e7$7lLTf[mHd?*)C1&%E@1X8=2ho*Ir@YTmmf4=["E5n6_tSWZ2&mNmi2g)E@.+I>cMZ3f3'IO^6;8poY[B:Ocht:='Z6MK%t8Su#sRX1i5f"/B?jTa?hV+9Z1/S,_s\)QU#?j&)DsE344"@o6*XQ>oR.YoE\Z@Xj!NQlds1la0W_l!_q2fGO$;8!BE%H%I/:2MT0+!DT&W1F8#A_prSK_k"%+g0kT#4*Q=#@?lWmV>m3u;ME'Ja?b_N;p3V[p9JI`]@E649\Y]%=.%j!od^)o\4rP#,-)03A)+bWNJfN)f=Os/IYCb)q/gPQP/8CbSc@U"s'_7!fWZ)uYZKFgJM(:Ft4MI_ie5p+r?WV!=S6EMpkkUW]e=2HnJ[ZqW]%RC1h(XAl0+=n9bQ[U1C0In0QV&*YB%m#Z`rP"$su+S/mBFX-8@Z/LHo%n"s*Tjn>So3A5VjTYa5f'C,p=1[@WT@Z?KNT&`"X`3=S>L7P'p`KN[1E7?niR;*'q6Z&m=J$C*P]AF.R>@MjI>TW2*\<$W)':eUl(>/H(1NpE_\h1O%6SJ)jp74p^i5T_Hf_FA(FU0$Kq@_B14bG7d>_3tJ0t^Z@&!%^A&!nh.#NsDp!Zs8k_2[cA6-kDHpgCfBgKIc'gPQP/VAj>%[M?n.Cb)q/gPTi:#U-"t?sBn<8/>WX:/9Zg/95NDLk$&@ARP'OM,9KgF[%5sIP3W#'Q;QbK:6W'eHZ]8DZG7X;Al#Q+?&?1MuEOY(i8r]S(KI]S=3"h'P,Qf?9-qY(-4`#!SK]g[rKX5=[JG8JU_7%nr>dO>D>eB,TXM*ibuYa[VN^+pRf5gLDo+IF_@C$UU,\F!dO?.4`pT=5(;k9V+^R"/R'mDg+1LBmFY7u)#&YFCi(2EZY"'0Gq4V^:,g&#?QFg#B$DNkfKnlen5^-fL7:*dn!S?btRqDS`0m:;C-sn&)8sYJYX,p;'OSZN5OQd2H,2klokTi=*)61"=s)HUfmQ*:/=i1>Q>BZ)pQO?sBn##MJ^>@@TsF2#cV"[OY]MG]`IL*)\]bfhNC`%j9N+3CdflIk1>^70h>Bp^]?[DpY?$-ja=]#8[XM/4M^Dj=^H4fF>XBU)Y\m>@WVZ?Z<#>^qmKBq)/L[3RZKkj^0L?hp3K54L-LO,b3=.Fp/Ht<_5*]kegl4Q!)m"kfL=T*RY\&As(Fh506UaLE6k6)[;E44aGBJA#OV%+PF*R(e.>G,7IQ)]"AdQ1%[W(N]Dt`%u-b[D;0]SE:KM&P7o6('R14K!`969)!ZEh2o=VdL,f`.[#I?SF^aZqT_RN"H@WR5h8A<=ctL$De4KG!$/jphgO9S0d&?-\Vhnm1H%2AtTm"t=+b4ZA&92^go!k*?4m[N^Bdkm#n"D+1`9gPTje[UNGQ63sPKfN)f=P""#(Cb)q/gPQP/8@?:B@U"sG;PC4Als9L^#XY:Mh!4!s?(b\f8g`mW5^e6E,%%^N0!%ju--3Kqd@3kAU56m._RUd^RqCC(AO*..L@8OPeje;>ELJR[UNIGXk6[-&43B+[M@PSA.c6bgPTje[N^A9;JiY?fN'8Ur,?LQ@6O(hM74C/Q$t6B4]mjpk"/ZFc6SIsnmnjiW0.`L8K=.FSW(tdPNR;')jXH_[Zq*H$gWnEFMa9tBjDRrNi5gMnK?d8T@&Hc\"4XKi4IA1*E[XU:"W1g4-h;X/kHW!5o]*lg3*TH3Dj]INfq!$KLrii\Y>TIhh*6NAPR=](SD3($Bc5HhclI_X-.mrY:3.JId3(:P;T8Q'HNRleCXfTh-aHlX[j49>Ht<_7j1-WA`C0Cb(Z;VUALD$'kp@oA02u=.$'Ld1PIp5'`sTB4FMfn*Q!*Xgt6Tb"\JS9gC"WYi;0Tra]?0elHMg=*e)m?C:7i,t![a]k"'>q-/\:!\5/%,]TVClG7#ZEEREU5j8W.18@85:+")QA?]3^74&,uFM<"kb%0g`j)1)]^NV;P,ELE8s:0[,S0o$$)>t2B^k:kDg"a;Dc@5u^%%9cO^OoeV55'8XU$(\]"tga>ELJR[UNGICb)q/+bYqlJSiB7,$BS9`O6E3Ht;$(1CFPXj$TL>Ht:9+bWf(Cb)q/aWbOO[Zrj;Cb)q/+bYrWJSiB7+rN]he^A<2^M!K_Y8,L/G_3(P0C0Hr*be^&=OS#M*?b/*QM85<#C?BoE-$nQ33Tt5)#VVZi]rC4)jr^9CTcM6+D50*OOT-Y$65VhRo83+9$R*I._dgH@]l(*2p?;ig0t,L4$LNr?Z^d=?ScJo,R2R;%!V!$?5$[o5L?UK'V$[J\-)tK9n665WrVk)agh(S!pR`FU8!6ZQ4#(b4G,@M&s0Kfk%[:isFAgD8Z,)>6M^tEXD0dHk,Eb#D!EY93K$8%W:$E&oQNS%)*d)T]LoIZnMiBL@[+pE^e=GiOK?hn;i'&#]k\:HG7dH"/ms.g=chch-aHlX[n1S>Ht<_7j1-WERqTCb(Z;[&qbrFAZ-k>SR_U-Nl$#ZYaCj93mqFu)Fn.`IKaWC@beWd*kZmb#sk7r5h=:i3\KMrt,5Ae-*JMi:6MUB6YJDU"/t=Y;/%"*IkdW=WB-tl;p?9JR!7(T'3:,mLTiHp-HiL>fG!F6f7iatdUCVN5bDG/mDua+2/Qg5,31dbr]"nZrNQ#l.k,WIOg.SZYD@Bjc*5O?[L*-EX(ARlU45ef`SZr+U0FZu=W0>H[Fp.PXHO6hERND2lT*,*OWt&IMAAOP3:;bbkpVYQ/$XTr^!o)J%__YpeiS=7d^uj3FGi;O&oRg6S@<63/A6TX4aE3&O`O6snKPe]:@U$+>#U+k#)f.%5(!.Y9/%-2IMJYcf+f*h">Ht;$(3q+f/+nK@N*`*B":Z,`X0'6S62TtXiL[8Z==O/TTh-XFTb&R0i/LnN\o%p@q03;FjY,3&Z-aBu%#P75BN3LQ8jl[rc)#]f^KE#DC.7C>k,E_kV;Ved=^`>NmH/:Q5/R]lq[-l\,(c?:7Qm*K%6pkS3Y[opX9ad(4MLp`0;#YLhaGq'Y+>Z[#Z"W?89IIfo[]eoA32>6eEHVA]C"B1q0fj(!&r]K1<6F;mnc*V[Q]i9+OnM/0>j1CnEZaMGEn^O^TIp;"]E#i<)f)K+5S)d^57#=&130t;E*)7Y.56)^Q[U<#(/5((pC$o`+<">=-IL6`drdCc`j,D'G$)!8e3)m;RKR.e25KoXB4/qI*:nVtA>qB<@dm7le*0t_h;(G>LR1u,J+4Nn>Un@q3?!dgNk0Q:JLA%Wd!F(XYi@H6&\E:)qsE;T?uE&\rWfo$?W1RFQgJT"cOg!_r@Ir6iC\a0Z.[e)%SZK+-\=uQFWSnNWX4,,f0InNuRA6TX4aE3&O`O6s.Jo/K8@U$+>#U+k#/SlrG(!.#'/%-2IMJYcf+f&j]>Ht;$LN+ReiqtBIhP.,kcGJtg"af1J^Kh?4bhE[.qUoI?J'e;,@)5;l3pOTA&]3OY_';HF_7=Vf_aX1+_Z^FWrDVl\E[tD)k\HR/4"pq&@i3*@CNmR>o=)U4$b!kT$b(TjQ\b7qY(6c"KoTq9*GT]U`"fdimM;a*fDV+!D[Y&r.\)f99/jZAQj8O`#AqY>419P>kC0rW/mYshlII>&iV%:j-Yi2LD8l```(b40]X@6Smgq&L>%(?>/,V,>&qgf_ISABpCb(YlfN)f=[M@PS&4/q<_RfN*Y:6E1g0(#+UVLicj$Lli#dIk.Den[I53n%+9d]Tq[5d'atYHP&q@+U,k^$mH(6Z#)&[on7WglI=f>K=h7FSobY2#U:AI'S\4K_>rlG<;/mq9Fnk$?5UT>2P=D.h$J5i`RKE`gOX5Z6(+:WBOHeiRh1I/%-2IM@`*F[DB:\>EK>fcZ%T=l![:bWMBkpAa%TBp96l,]bMhTAjb1n6f3+GUrOYT7NDmNLoEh+=2L,YGetSFTJ!>KSW_]iB7=,UHgnXRq;tV=3lkO`h/?C3b:J5cP"8J0h2^*j9bepku>EK?1[UNIGXk6[-&43B4[M@PSA-fUYgPTje[N^A9;RNa2fN'7bk`8boRkBLB<8imhDXY'M=i=B>P7aZLppd6HB\Wo]a%#4:U9Y_Yl7s]pu"6$CgF\t^Hm5iRTIqXrk35uZ=B5&P-*Vnhef.1eof6&^1B%pD9,fSY$6B#on$M&%j*\qrHt;$L1"5jXk6Zj.maLb<=@Q=D+-2_gPTje[UNGQ63sPofN)f=Os)<69DVLbiEH8/*)GgY_h%!SB:ec+@Do4XXqjW(;qVCEYd:COP1[Y'`rQu6E#g"Q4/%-27&8\DVLMb#=@TsF2#l,:Q[UNI'%)KAuHe;A8/%-09KTLZqCb)q/aUm]>XS!=!lMO0-^!)[hN1Yu!HDKEG8+kqM_07WAk"<6Aa\2Upq;"fh,a%cU9S^quI@'DGlu-sg:=>=B,9__6=4gPi/!;(.<^/-O/%-2IM@`+q42A:6>EK?1[eaE@>Ht<_t&"gPTNtFB^3Cno=*"L<655g@b8E'.+DlEAXM"8Yo7`#/4T[R=U#&6@Lu"Xk6Z"6a3]l&[iG/MJYcf+f(!'>Ht;$L1"6a,A\m=(#+TW6:_j-[UNGQ63n`f&454o[M@PS&4-XGKFm_BYcZPYKFgHU+bYr$LMb#=,(pLo#U+l64)?FU'd85A63naqh-jNmXU$)'&4-XGmge*0D++^RKFgHUH$@nACb%gX+bUCnaLf?u@TsF2#U+j46J``k(#+TW63n`f&G#7nXk6[-&4-XGKTLD5D8iq-KFgHU+b[KiCb)q/+bUCn#U/9b@9^"=#U+j463nb'%blkX70k&i&4-YJGM#r4.maLbKFgJk]>M'd>7j1-+bUCnhAs$>gPQP/#U+j4o'W`afN'9H7)E/67%l<"CX>Y8IVUE[ppPtO"7_EK;rQc.TVk6)Z^tK1Y_73^)F=]QKN&P"/%-271i05%Kl'6a+bYq!#dtK&MI[X6e_@sL,(pLoa:AF.MJYd;KKe%D.2E1@6BFMUrq"#,,HMN"@1<@Q])Q%QqZ#<^[i`f=qFn]r&'SmnElH"&E5BLaOWodHcq)OiTdW6`&K274in-U\L*:'7_8H`g3$BOM84%iX,[_J7#@i+>D%8kj&0MtPF5-(G\@]>QWk5>.?t6uq\XAk5rHl0Hf3[gDeQmOhY342ZdFrqqH`uJ4mqpV/7+udP%,^dP!E'DXpd,VGDEaJ24e+<_ntCQ^WLZ'q8Bp"b<.2\'hB\+M*hUV-Hh+G0)XT2b7F=Z1)"eo5cHpHigT5R`>a>+3nC4;i6C%@omb^UF8di]bh_3k=kuNk2]O85?p9\b`_qN?rd)ja,8)]\cY.Vc(7o4O#0H.O?;5$DkJMUZ;M&XX'6G[O]sDmRt\X\P"GgGd+!"ALF:#hGgcqq+g_?g\',QE&Z7[P1NheIpR05<.>k@Oco*(U!#C(^U'`@B"RnDn@&A("99@r9"/8\kZ59[D?U$(V-E1b/.gW0\'hAY@'Xl)h22B!>A5j>:Pm.J\Oe/m7HK!!oT[S_=%f]Je@.Q*4.]>GdUdHqjK>,&'mu<-<78Nf>10PDg%+BjY;+@GRP"J'adZn5Z[r)Lc_l(ONo0>U.h'*62HH1^sm\gMVHk(R.nbmJb?RNI($\kUo.b8E`M76Z/"4nbBro_RTE7`R:X#,]:$rdo#_'<1J8JJDkZHOVcV0LncR&8!#Lc8V-C3\F=Z0>[fV)ZdB.L@(6NL2>No/g0K$G,DT)YpQu#QJ,+Xup0BcV3Y0*Y()8=LdpQbiqjXEE/#QEV!hWm-Q\s70P!n",l.fe3[]%(EWHhNo0>OE@Nt4Z*iMh,OObDea?*q)3?q@'fFa3'V.6J(C_S8@R$L=JoN8(jHk'PYgCqFRB4K;c=9s+=^hrIr6Wbqu6R;Sj*Z&#hHWL2]QT5SMOMgjX,DW!rBb6D9\b.*GCA\Mg5^p`Q0_k['.h:0SSoM(ogYNf0(Pj)5['oOJQDa0rSf>'5Eh])N`cEa9$0Yn]1\DLfplTA#c00_'L2u;385;sY9Y'udi?'eE(A`2DA*BnGT"s/WM-#`Wja_p?5jTVu0p3aX#H)1JFeR*qhC&Hp0Yj&icOUKct`7CV!tX`Q($)K`"hh2916+3/`O.nbApjp]R`URu<29PH7E'<97WqYo$[73:^V)sKad5IV'iB6m_C\rmq.f"%Dpoc)Pul+h,5T9&Y`R]$!V*dF5,gqRR<2_l]YE;=[&Utf>R\U*,55Gm2;>hA][/B+8n$/BIfjfQ@=)Yb5]3J(LrcQa5F5nq3&GF?^4cd][#'hd?94Tmf-7(-olYO24V_5(>tq7XYt8O(5Hf#P]!=%(#A.(h+G-X-:YJud&gCi]%'`jQ#9TDX/C%ih$TMdh.f['Bo^/r$LE`qMA+]hTK-T=k4ifRs??^H0eDimZbQfY[Hacc([$-\aYVon[DWI1N>IX-FR]4A(9mE2S)WHk.aVI\#N$>$j;.">./>eXRN1NT0]hYln8N`YrGhj/JP2j>DMS4IQO#>,q0`1^,HL@'Z;RhS0.JsmF6."thc4]7A5j>i.JfM[=*Jh+LAtc*;gGR:iEn/3\G3Cn#5uRgUN1YB"`p&O9_26K;V("qQFqS<=Cr]5/\/DF(Nn#_*/e'eY:)Dq3DB13f9InW:S`cga3(TMX%G"X]_gTQHq*3bVS@rXaLm#J!2JaY\ePT@\'hC#/)No2"Q#=-r:L*1^p:b=h9EaEARPfrG3ng4,TN]/MC1U6/A;/!^7%U6-mNG%OL=2"A5!)Gj2;1kj0:?WqJHdKe6XEgc)cah2saG1,)b.%aj1gW=X;H21=Z/,se7-(IU]k?'o,Z4jP2s.SKpW77[1n2ut!T22m3PW+n59j'I3.]6sO8qG,[aFAf<@-0\3qKpKLnZrD/BQPc\M?T_YkuPB\DP^S%\'hC/ajR;5.i(\U;`JE.k.OnE?^R>iGpZLYnn!!,VfMN.l:Il1\K<)(E1JL*?V%n;nq(#L>[LV\od%d.YFK10L:R71S")C!iE<\jro^q7hR$Y-]^hObG$WtaF/Aobl$VfA-MCU)FNH9UQ$(B!jXu^t:C^"J3QE?$]U^q(HfZYgPPa1*5+(;33!]2"Vr+Z4.WVIu8t>1/c,gY_n!0(ggQfI7e]>nrW>rFI);TE2LQV_n9]l.u,PmQsQ0fS5EE9CUheas2q;<=$tP!Djm5bA"!mjf?(Rc8+KthTDm.YjCIT&kIb3r:JR'h=,p?OjkV^B2*$XRVr(]NMFO2[MIeYc!p#VfFmnekgRa\V.q_k'^#p0D]L>T(]M:)Im*%#N_j#3n-V7?&:Sen?"1&MZ^!HQ\%^6\ZQ#=PBdB.L@h+G0)X`Q($Z?.VQM?T_YkuPB\DP^S%,:M#]ZmqpA25BGQ&feP$-T3H%+k0e0ps6`[,Z:t9h5H6rF"3V*8Q+`V,2/nTK7lgIN583lNbj4o)4Rgjtp0kD(?`%28rZp`(Uo\tCminN)nbOi^8NY*=kZ=j8pWVgt_u3O^7q^a^oQrI=o[df,E;TSR\Ra.0Z8_>F>"O2Hq[\I5h6PGmf;F+VFP%T$Ial/a)u)Ocje63pAJ_d@+ABSL+[mK`%U7^n^h2bsl&Jm"+/%#jJdsqAh]<5MkJ\@0ugfLNTK^;d8^Oui86N97b"/eQ%H[u@+WG_C@-%Ao?J+b(9@jTYMAL-poKd@H\V5BkT?,B>(IQ$Fk/.13*\'hDTP>/NtTRPD+U"$2d/)[/KX`Q'/Li0%nkuRc)VH[>&5AK+Ql;kJ2E)Gh"\eP2F0V30Y>6+^(j69UU'`\4fh@AmQO^F+A*UEb+^dpQV44lp0!WW3Q(>VTl!WW5?e#d^B!!$Chh+G-X!!($fX`Q&n!+7qF9"+j%!63KiF=R=k?p*7;[fQO0`m_&3.f]QW4P`W=!WW5?e#d^B!!$Chh+G-X!!($fX`Q&n!+7qF9"+j%!63KiF=R=k?p*7;[fQO0`m_&3.f]QW4P`W=!WW5?e#d^B!!$Chh+G-X!!($fX`Q&n!+7qF9"+j%!63KiF=R=k?p*7;[fQO0`m_&3.f]QW4P`W=!WW5?e#d^B!!$Chh+G-X!!($fX`Q&n!+7qF9"+j%!63KiF=R=k?p*7;[fQO0`m_&3.f]QW4P`W=!WW5?e#d^B!!$Chh+G-X!!($fX`Q&n!+7qF9"+j%!63KiF=R=k?p*7;[fQO0`m_&3.f]QW4P`W=!WW5?e#d^B!!$Chh+G-X!!($fX`Q&n!+7qF9"+j%!63KiF=R=k?p*7;[fQO0`m_&3.f]QW4P`W=!WW5?e#d^B!!$Chh+G-X!!($fX`Q&n!+7qF9"+j%!63KiF=R=k?p*7;[fQO0`m_&3.f]QW4P`W=!WW5?e#d^B!!$Chh+G-X!!($fX`Q&n!+7qF9"+j%!63KiF=R=k?p*7;[fQO0`m_&3.f]QW4P`W=!WW5?e#d^B!!$Chh+G-X!!($fXg[#eY.njUbK9FbQ8?j'Zt-'EG,mDC+sJ3TZESWJ'`ZCf4M+gg3cV7_lDq($dB.L@&J5Te&c(&B_YB:ddiq=u]1cfYW8!3i]QFfYLmRe*0)BKJ9R\QLtn]>FmkHA4qBTE\IIn^r#C*_)b)qd]EKLJD'-ekL$C3!.ZZLXj/`.>@"`(pKLCa37bD*oM;*EF%trD;dI]HniZM;jihdXQIkC$5kIARhpa'lk;@W2B?O$k^7C&6n1>0CaP!k_LMuA72LN]c-ZZZ^jPej=\//iR\Rh@H3HJf-ARjc"Q;%9R*FEZoqT@]0dB.Mk8IV6Xok!n%7iC_e0mo9aL:^=lT4O8GY*;Ke5IZShV->P%aWl0,S^#%_h;>MVcN>cbX%P%J]B[ou\s7.jf1c/>10g]=Kg&^ano3:E/G.W$PD@=>B;*Weh+G/F27f(3M_eVH3=C8Dm,[-2bus8:ALA"TD9bJ?/\9IVFfSg"^92$ij\X.ZV>W!D:*+bbS3D).jlD8n@l!NhaiLq&&J5TeOlsmOb,NP*P:J4Lrpa18o$ZB\'?:Tk]_8@,[HLZ&Q&(6PLkqSNX`Q'*&J5Te\JW_r/n2<$rjlAeX31`PCWg?h:T^f@C0=j!gTn86T]PI>?J0@!q1J70o'rGYkuJuP+sJ3m+M*hU,pFNW+sQ'B>A^WLID=Q;Y2=AMbL,FJQDLF5>1V;l>'AeIGK\$FqFJe^GQ4=ImHEMp]as#XEbsi6bJOkIe+1lsJ$A#>htpHtdH-!4O$%MkbGk0bQK,#=/U?F$c^'PqDHSn%2dfrJ@"I^@SJ1\(paK2mg6pSSrFlorDEHnr9i&\Rj+THWs5b?Z'"2G,/^+B:Xj7Lks,`S+X2>Q4q>?5H4.B_1/LsJ@>1T#N[9S.!'eS%%5:l7TT.6f].3kf>.4i&qDC$JN+sO>>dB.L@&J5Te&K)\HC:IK=.]_ZnntYc`ntn@Y^?+#<^6[kJ&%A&i^=omihYUNkqW0eB:-ZJJns15tD:s@;%pQbof<$WcmX)2"/N<$2q27Ia>K\O(n^<`4htZ?"_[#qCoO$l9+sJ3T,*s]nl`2W'a4FKi*^=g+a-Knh*noFj@cc"'COYHs/[$fdQM6`lPZ3^.OjoR/Q;e^W9",EF&J5UX`9:75Q&(6PLkq"NDDbq53a26B]?AgLS$(Z!Ech-)QIVhF/Z4W2[%(5]f!9a@V<.L+JX5t=#?sqC?$`ZD?<_;-H0fLn2njH*bBr.FNg;5dA_'on[@B:,6psF26prY>f$7GbVT9[me=?04G/`/,2mWrrtb0&+t,DZ!$4E9@ob@ARo>>D;kc,p!poD^\Gf8`grT.>u)Y<4>Y#9RY?H?aq_j!Rl3Ek)!:6psF27-*?*ek0&'^]`#9IbCG2tp3n`<8Fp?oYmjiF3D>4t1.?d#>'6:=406puKL%QrBaAH2)(fsdm@nG\2I*o2&?fc574AbF,jbDT^%P*WSD&!TkT4%lSDb"1eh$;2k-DDbpG.hN@*&WoXQ\'hBH6psF2A:/L"$[JU3=ajW,bMfb)r3/,\b#MJ[=%)E:USu#bGSS4]]BMQGMMcbZaoaMcd$C"I9,dKm;jj^k0(6kgiCGPT5V9HEr.G\Bt<9Tb.3l8gtCKZq.D'NFmhLR4R5,In8m?oWSr,$_[V+Hn4fIS,>WG`MW'ITI&^8j(,sp3@ec?e8Cl7FU6J&-'4r)NQ+q-qHIYGZ]BN23&@Yb].3e>26j);Lfn808]WH32$Ih'%f%%l,?WEq#XggjKDiF>XUSTCW$s*.fZ_f[Kcl=,6&pc3$_`.*`kj6*'c`UIRNTB_]I`D(NP(d@(]h`4c\oT.Vc0O2(*mT*,K-VFBLnOhJAo)4@D<:26..j$CsA,18i2j[h3^R+t$rbK'Mr%9[)=*3T<7_hdXo*;->;tNc;1QB`!5#_DRr_j&"&5jBD,#Tph1f?J77T*#[=AiR*C31u^$Du&&#+-4!5;4t+Q#6ba@;Z1kMpEK4)Vo/<>)o""=MT$n2df'e('#*[r>5-RgUG0I\ljQ#6a*!0a6`kuIca^j*H@YVRT+OhYItD_aFPnsbUD9)^g@&'?h(IT>t$o#^Hbo"jn2o%2tdj^"Fl!!!#->sC-kUcm3%9^FRccf@<5+9`pR+XJ>?,"3a,,@r.n,_[NZ-D`%H8%6pK!!$DAF=Z/S!!!j3\!jR+D3XrMj8@Kfl*=?MP^VYEP$a1GG56oVhkIc[j;0@3>s;-bGPPA:-nn^]FlpA,^eWk[#GrhHoM!spNR,O,;uKDh;[623;Ai@V;CbX%;E[oI;GU1m;INIpJ]Z'14k'1"lnd2-ARs^WX1EUP1`_,Q[;>RY;3`aT?HuOGCaK':1rF!"RHgdIpfQ;C!SV"'DkJr1\jfe83odX8;Tm>8C?WO)4,UA/XF1',HHGVCB"'=V7n\;hnr^5U4C#20G6?=`?t\>3"RHgdIpfQ;C!SV"'DkJr1\jfe83odX8;Tm>8C'bZ\Z9CBWu<5(?u:qY>N9qO.8Z%\t5C18I=6I"%Y2,!u74UD)g/?E":r-`MK$e.N#<&G'>$31&CTNfZ3[fQO0#3])leo0e(rG,@.*=`&L9YnfLr[_nqhMl1FkZ.Z`Y[cou(QiS=!!#*HDD`H@lq@BZ?uaH'F6jV450a-.^nipWcEU +endstream +endobj +44 0 obj +<> +stream +Gb"-Vfl'i&^-2Dg+8FZ`X5DIdW!Y91LSA>&(I>-u-/a6ms5\2'Odk+@B\:f+YF"D\__;M:0FYi5AR9GXcYD#ilrFP40FYiQ$o;A1DY44ODT+:<__;M:0I&LBuhgKKNZ[L1(pR@2S.?bu!R#;@nR\eiqTl`GWXK%)Xb-__B:W@CI.afW?!F@2O`-(krnRlrJbZgSBSPRi\Umo&QK:[jPGi__;M:0FYk3\+.c5Ab,r7I2M1k'V/.m>R'Pg@.KPeEQ$/ENPua.cL1,rac(5VqM&:sb.H1)X@>ZruBpWPH9^H>j09^mb"&]]+1.[7`=s6=%WeZh$TmQs#h2:$G@>[(8gFs%7W:9`&0LZq(.s5B>D&A!V<-\CNR%b&%e_o7u.$[E-UM-XJAr3J]j]mBWTZu0c"dbZdO_40h[r!RclJj]/Z=u3Ln!FBD>-@\ZYsH0RrY`0EXd=WdrDg?(XlZm[?8ekku()j"Y1FCKs)A0u[fTj3uqs!jS?b_/bbb@/o=l1!A-;d:!YiEmm<_rm4r_5@rZ\9aa?a(H&9'R+glPtpf2IG4-0cJ]bgiGW\F,+f&0Gp,X+T9i6(d??*=o:CLr4tW04I@`rs0EXKh.G1(NT:DYZnA:EB&_p3/>8kE/!,*h2:$G_`=7)8+c;;@(0USic#CjE"7A_i9gmchOjbli>g/%*<$.tMco?U-jQGTh**5o\d]Em3smM3SV6+IP+BX$mY8V%UXgI`"]k$f$'ss=%F^X3L$?eS_7*WtKGD*o.OSX"*nU$a]0O*,F[JU3MUedPeO.K8e<<24Gf=R>DT1QScJ^!b\/2al]+p*B3/;SM.h*<]B)WXF#\ridW!$?=B]#8(FT/%`dV1os'<&Qeh521?g7-pY4lSDF#\qr3/>8jiTe7CQL4+%>Mm9TmEB&_p3/8;h34fp;'o-iiLNE7V%VN7[[pli+E";&M%VN7[\)M?:kAUoD\,$ZJePh`N(&>njns>@,?]sLm.*iqj(9W&]Ipgcurs8YtViTc&X]&W_KMdgq>*eN#"o/JE/g@##eV#6\TlfN?R':,)C[kFR>IG,][74Q@Zu=mXNG>uZ'S+?g0W[M21Xno8W6F)Plf+Hr3-=.:9U[[DDRIMnij\5]fq.5#2J4b/Hp&,YY2'TTM%!XgBn?`%C;K=e%Ms'66?Pp<:>Mq(@lNhlK__[AFO;F:Tm%%[dJIU!`@<9CEtIC6#d`+NK8OdV@+)M'Tkr*\ODZpg_[]dmquTPq[K0"_/V/e%>N!Bs7^sCn^s'4@@*It;YY.DWQ@&e8;FRU@PS'lB;HTa38?$%,@^dO*@^fgU+sM?nfWEf.fWBsC"CeiL[j!#Bj4LKjEOV,2ALpnt_f?6+j_,FF.VPtTM5CONR<8WIPT/fWaB91pm*fna]\Ab]L[TX#Jthl&2c^isrTMcj#[MXFs.Qf>GPGS!>T('[;ZuE";&M%PQ?$D'4%fI^^'3c!:EMQLBK:GFIKW]+:QNaX.id@k!Yf?OLH&D1EAuN^QLOa84*74O7\)KmWS.h:`]%d3=F_qD0EXZ2ig3LmuoBfN^>]+qpmLN>G1F8/C`ZWj\=EB&_p3/>8sE-A8`GH9mVo"U.F8qscH=@N3LEg=dK'oV#!5Q26Ys$-MoI.lIt"X!d10/.Ck;YY##)AkDGeZc,PjHe?!giJ)&idD5jF#\qrGeo.GG%O\D01`/)Y$@H/<)obo0LX/Sj6YXMKpghSo(f`U1`_N'6ru*s"r]-hY`_NL`:WAX9R&REW$M^oS5*X8u$[oJBHaqrnSAR@W_r'nOrl38e!TRcFLG@lui86=,]4N^LESi=$M$qnNQfX-5>fAJM/D&Ng94?':jY3iH-'Z^4!:o(<'e<\9[)F`-@OWj/frT3rjfF>=%k/`$:Sb3cKoo7X22C#QpCu@jbi'Pei>hiS_Zr90.I:+%AE;da_83WIQp,u\35f,B=DEdi.'-@r7Pga-/lL6!pW$?DJWiOu#_R+tK0iUW`2K4VkgIHAVdKP.WMmb(W(^?i1drJ^_jP"QQUh3*8Hn8lW"R/<91hsVQ1i>g/%Dftgt;]7[Xrd3YVrJ[.Hk*k@o\aen=oWQm!alTZsY('4sF-X>Vj?>#=NLO#SEn@fm;dC&Bs"9iDF&Z2@lqodB,1T''Lt!(e/5fp/Xk9c.Xk9c.X[_#`Ft7_d%d.d@kO:DoSDB(YMVX0Gl:Z:NG,p`aSDB(YMShHE_`@XS%qi@$So43l7K0p(U#K.aY9I%9e.Z7E[4&uR6.!$L96Wg7+\9Nr&$]_1P8e9NKh'&n'pCLrI6XkLF&R:IGqARA9;V/%:@]"oKC&Ldr3+G"tFkmZLeeGD/D5OBX87"7Lu->6`b3n^rB_7uNO;Gi^5IW4%HI-6ZSE((VoNd(MjhA!dSD%j-$n#8)q!5rYO2kn1nj54YG1=:!tVA\hol^MMm+YJhVpn+8Vh>dCuTmhEf#+;,09*27Hr^!(H((qnEA-]gN1C+jd<6mJCV`*SN!#mXau!KS!VCV=6bUBBMl7RZlp#!=IJAQ%J%O,!r!SUu0#Q*G!>VPu+Dfr">(MGt*8,>q=5YXjJ1;T!CkDT-M4DT-K^lrNIR6ptqo]+qpm]+qpm]+qs.Lr4,LDFHtc(9h!X\6J2I*@eHHQW1%W)arF"+JT1XNr(!!Kg60XJIuTrg;&TR6[(9i))DD=g]qGm*UJ"UUl?M\iE"$%;6U]788:FE+rpd56EQ>GS4!@YQr!6&mO`$m5Xr+t5\f,_:c$0uG/=KiVQsO6b48ple,gL<$r4YEB!`"XPb\%?LP@Y-^;"mU)fn^gHd`glm,='^PfIQe1LX0+]9e-]b:hl:Kj3MI_J6ct57'.GL!?n2"9H$,"%dr0^NVBL4k*>Pb:jX/Lgq!p'Y+:>U7h]Q5+2l$5&.c4$*bkePB+iX&5t*e]p@1?ik%f\Je[M4E_**lalL.`hMXMelW1OmoI<]b,]K+hbK9l^6St:WNQ>P90L?^Rg?BP'b,[7l%&I4pY`AR5([I@'l*3oJ7*^Kj>J4;\onQ-^*]emIL0%-Sd.-<=('@?ojGgl+Iau%C]u'KL\dHDE,b8H\8^^M7/a5a;fri+XB5T723lP9>R(^\98T*ZihfL75,XE2W7^1u,,5);`qd%k=bi!'T=olPE?LllFcZOnL-#^3L%WE!L'mG0j_>Y..+4\&5qN)kluN9k_+F%?7c>@+X!&E<"cHBWSfJeMf-K>>m-'fZ]/dTD\\G$GYTln9_ZhkoO$rp`G%!W;!M6Cr,\;6q9IFfVc6_ML/!C;_?L!hZ>STK%fK^BPtBl'341pXB.E`,1T''Lt!(e/5fp/Xk9c.Xk9c.XZ2j,MVX0-3LmuI]HG,FXk9c.Xk9c.Xk9a>eDWlhJaR%#Xk9a8SAR@W_qD0Ko59giBiDRCE_[o%nO(CT#*V\QTVJn$%Nd_37unXEe#.YL?VVYp<@aEQmTnQii,=6],QIjP$g@*l,U,PLgL's^X-P>k3O<>7]\+$=]BU/*.@U`QN?8Dsk0APFgU9@=a`nX[l>p(8E]L4-[0"LoVo$q4A[#b;7T_Wg%`H6cd%V[;'2e8.28dGAX.Wok3Rlot!tFqt@+3-'Y]7Q!=MJ_gbl=OAjL+-rWIWYXVnq?rF!9mg#<`iW==aT\SW=gT"I?1+O$=\?MHSD99%cW-DXddq27"8p9#cEE7\2UQp-UgfhhdtT"J;k$`f2&Je#,oo263'r4BPp*oG=.;rOTU[rRrRmHKo#X4o04ZIdAKhnHDM.ZF#Q9='D%Ma4+<'d&4S)q[o"Ql,=ui*:FV9^^IfL6;RL`oB*!LJmeZa/;6BK_Xouh?:QO&@oOGJZX912%RL)a'3k0/L.rUXN$ZXsAWfXM-_9q)J'9#cE%A+Z@U2rcFQo:bt0_L?a+,tttCJo>'AUA*%h5987!^(9sSh"oqm1t:$*((N]9@j?._oJ5lLc_l\QplHKcVeDeag1/!n,5NU,O#0?7JnP(dlRr#*jJ5*/#(N!7q"\l>X!KA[Vf1TCKgIp*jR?2ZD27MJf>?MF4(.BO<=f[b5W%+'OcV)n>ebXreui0`QS4qbFXrfqZ(hP4g#DfM)f"]Y[88T+.dYlt&[lLX%0uTCLHDuJ^nUY2+VJI@VYV4@H1`_)=LA:7?T\G,p'2.BCOl=+)JXmmDNFN!qcdLf]F%cKF>4cfZNCsrp]b8+QS"d6Ha[jIFfUhETm]"2e%-8*ah89k/KfO#*=oWsh5Y8KCOH2P2lqb%j^kZGcSjF`@hWZ`[h=]Bg'dFiRk)tuM,8uU%e:II-%B!p:#YSc4'^SV$b&Jce,aTJI'_B#(jXM1e1m%Qd-";BnZmqloCQDaQTV-Y[lfFe3/;R";%Fc0,j\G6]W9@+84PnlOK7sKAN4o1"B=3e!oZB`I&6E6WN9,\TH_oRap>To]+qpm]+qs.Hhb/C5n%D8H;A`)LN>G1F#^cH]+qpm]+qpm]2]GkE,[eKeU+pg31RlHSAX$^7Td,,1t=jmirR@P.tOlONec<:Va*)c%S#(clY(rbqZDX&EF1MhTm"e8XcQBOE#X0fE?(3=.KR)-Zs;!;gXu4=93+#!3_'4kKsB^_LU`#?dUBTG`]%#KXmLAM'dEQ,)"Jj'^cQoapdRJJIj/CcY_n\A&3KL_#G@.n&)0+FgXjF]%8!^BrnN2NXC*_gu)IA^WOd.s8ft/RZOY^^.D9I`LQAZWGZN!;')<,_@TMOfR\A0.VT]l[=j`eT.dc=1GpEA@QFt\]%,C+TEpBAr(fT'$=5aGLV9CQN;Aj*VViDfF16J%:n;TJJO(;R_Xl(5WmC#AL7A2l'"b*$atYX#_;ib!P-C4G!Oj?%.Y$7W!*gM-BMg<@K-fc.iIZAi/2V=!8/92ABJ*J3G=oZOe!\c='e%>9@(;b34rpZpNcMT/S_f,,p$lRBW,bb#'muX=a4(9=%nI*P]3rZ,ii;+Q<:'lMLWfj3/>8`_rUu?OQ#cH0pMEZT=^O7*dZ1?YS"6-;a5o)AE#u7>n!.Hom'XQ,eW!+*B1@aYAg5%>@^nSonWa?+lmkCgE&U*fF$TmN3:cWQ!#T;<;*As>HqD;>HqD;>8>fr#D`&mDY7?(3"G-@!Y/kP@^fgU@^fgU@^fgU@^k?9mr3HNpN4Gq3/8;h34fp;'t`!XkZ1ls*TU!Tje"EN4^o!f`$?P8DmMC+Vnr!Xlo^\pWu8[/_@"Kah\`!1k?]b#>L?"n8=O[\-$9j]b7m2V/.kBe-9+/-'n`F"^=8N\CNI?8"])a]=T1$p-BnbG==T$Gi-8l"ZlqZZG5jN-$kT/*ds%aQX&qRQ0oQR@=H%gs2*s6eM?X*pXohU1oahqHV9+*&RJn\^V(@%FEn'.jkYRSYK@)Se@2gnLkppYreimRhW"M/o7!Fud3-LE/(4$cmiF79lLQYJ_@R/l&.^'PcV4ZgdK58=?m,#O+"s%?`^6e87>%6:>k(Vj@Zb8hH>p^p_YZY0P*at`q3Df.'tY3m'tY3m'tY3m'bQERlrNIR6cX)`DT-M4DT-MD&%`Rg'bQR9[plfb3d.Q4GH8*G6dgiZ`_JeMMY>M573H*\+Do(\[!ko]81=":n36G?oQ^XD$j4q)N;O>m3i&m2inZ-f9%c6b[L)3RZ@P,HDH$:%l9WMF&Wg)_Z\#?=Xb48ef$V;1i1W\FM1H'r.^$^EDKlE.bBEVqXl*utqbW"XmmW#D0*Zf\2nn2,hHISHUN\[*:IJ1+1._T/>\@hLkY.G,1)#al$ukhUj<'ST_a&[&k>#a>Q3g.;#05,V":Xa0Si)dD!]!LZ;HD;D(1%]&S%j.e1Ci9RdZ+MeB4JD[[plgm\$K"V.s@sP\JFZ-k^>sn@RNWQ%(d8Q/p8ag.sSAPd;I8$Q@Vh',t,dq42GRk?K$WMH\1OE"NRSm7&8AO=Bp5Ya^VciVjLMj^SV=geLJ[O0?60hA,\E,5urk9'N#l'bi.iVoBP:j]Zl)"-2t:i1@*JF:#6C'NaIX[2B$Hg:'"_u6#c+DXhup\$kb%i02PGEcnZmjd4q^@f)B=UX\q)p5,#"X/p8ag.sNq-7DFc:CA?W-:-crV5YFM]0MONSj9N1t=Ug[f!^en38lfS&#PmM?ALC`KbPO5ghF])@cq&gUmcsBa0mC-E`1So'62p=A%G1O`btp<>5+K<+(Uieg%s@X8_X`sB^b?C_9q%/%@j'#K'(eQAodb"Qap#;$i=+MV>6T%:OuAa`6Js8Hj1sLR#@Q]D1ALY5ItN[B00gl9MgHakg[dW5g7$sOV[qbNj">TUr%Yj/nJ!$-begQu5#EB=PGd7+m+EV.o!fWF]QaX$bOamm5b@e\(XM%(dmr>EouE-*U!N4@rVZNi#s&SK]"=em8!T]R$1bF;I<1n@,",UW9^=%j?F\XJrd(aH7o)na#ee+BqhU8FMT)ZcXoR)R9a`>JAGR9LSMZlLPVGSjh1O_iVEpI.8\#`'M+L,uY_m`O$iI=;l;I(8QPacu$-Wb)(XW-GV\^PZaO#oONF7jCWMI*^9%IF-X5n;LL_+I.Jmo\U=M(S3.*5'e/oaGjflArpJB=JRaFch2:$Gh2:$Gh2:$Gh27"X'Qu!MX5P$VlrNIRlrNIRlrNIRlrHMBs,#Qhh.ep)%D1.@G,piBJS`J\9_Up,GOu^HiHuB)0A6cnb@X"LRh'=6K20J;Pr9bSYp!iG+FQaZ?G?R4KpRgc7ZafH%-=[3jio2j/"9-tq5eiqIF1(m4(SnL4DH]@'2]TJ;?j7?IRs3<)SJYlMF#[H_Mr=IU$;P>n?k*)UW;?iV=P6+qEVcte_,"`q]:l-.ss'p/52K$DqI+_"NLB.+(4HmrsUCnIKM#^!qK&<3E=44o!dMJ_=QhciR_G/_367-i4%Tm"hEs;M;o]`gTN*Q<4k``;\_;J+0(R+aB^PnSp?Db]iE%TdV&>rn?0`g(XGD8HM"-T-;5h=7[5\Xng59O@]TE272B^1arol#Pq#S%4pG.2=i*%3_hSbSG7T#oZ943"0>F"Wmu,=oZ!.[tBOSAreSaL45tF$@`9\1sRlVK8cJ&=Fo=)Q'M::F,>m"3+"rSol#Bk!>\[,p6daB8uR#j-^\970ogqJ%CWbu'q)cnXYaPR?qert'V;9d:oX"#ISr2+,)>&DPs[#o<&U_G;7Wd6lYg%XFidR#9,V)LKh6*_N?'u5q_W@@DdCNU=,b[CFUjE:Sg_GfWh'AXfW>6UgLi`$23fC"5eO9(uk'6XBiFBY$\pJ,phS;Nm+Cs>r#Y'rFD1=.UuIhb>1r;]QbTIr:*;Hil/,"aJV_(O(1c]#87[ac7X!3IjSN!Wp*SG$HQ1Jdh>qn\F=S`&JRdjb^r8>JS7fUQo1'="hm+!diqYB3IVZTH6LV,Pk%Kl]Ug#.I#d@O<>HqD;>HqD;>HqBEd>*P6MV[R"*%gMXlrNIRlrNIRlrNIR6o;cb>HqDGQ(s&hC8g%!P+JDZQ0C8IkscEcj.E+)%tFF+r:s-5?Y4mQF54__If7HH+Bj6?e-J*$m(q;iI7Ih29S.N'jG`No+a,]aL^Q*=L$^KUu=^Dm^SQ`c'!Q&Ta_3Xd*i)@,qP50.8t/is)S[J;>>cTtc.K<)O(A-o;S?@b@31Z\S%38oXqX95;kr=q6jo=n\RR/[3ag.p9`mZ13DO$A0B;%K*f/D(FcSj.njp's'&j9IYane?I3AhRdO+P@2H)SPWWV*Bs>`A(\M4#:'pCm,*:(2Jh.WAS"eJrdoj.DuW+jo?BBO/K<9ChZ0s8oaM@,>B_0l?Fp63E"l?T?45Mrmst<.%j7._680+)5VNURPtV24G$sUejU_iTTtGak1c;bXU;c$+^AS;plgeboI)RR;[sfQ\)*8U/SN6k&s8,$RmX>7s))E$dCtJm>VU'ol3!.jCmt?RU3O!;n?L[alE96A-BR%l,[r,23@oEc"Q;.QGp[7:29P)#F*Op4e.Ps)nJh4q,2/D/:@l)%:3d``-*o+;I(HOVTY\DQu\9mrk*&qmCA396EE!YM9*WK+GaMQ,DeoV!tgH+9),tgP4r6/:Y+NO(8P3E\EnGlZp&=OR+J=5mojn85lQ.E`+9\?Rs*c.AD0A&/VYHVQ;.huuW3O@nd`NuK#g?!D&e8PqI3dLdB,6E08"HV+5"Z^q)%R(al$_#=1Y\(ofq"`tW\6Dl6NugN:g^,#/^)%,iON87'o05]DWOm?njJ!+MM+!X]1T%"8PhpB?CGIQ.!?g8Qq:i^Z7-+#CGPSQ@&1/2fgOZ3e[_hZTf>-Xo=$b(`F0kd(A?73#q`P](_>2P-U%637O@iMS;[)$#cWId%]iKQ)n$hD_J(,QJgR(3XET\lhRe.KA)YFp1G%+i>2KZ=W_m;j)GlH\O4Fm&iiTW9jV%j,s\GBYFUK-*8C#1LpbY4CE!eHo$D4GHrp$o1H(&g5e?QgXss`Qr*!Dr&&,En,/4MbH/8WMBXefBMkaVb\@"7n4LL>IjrZ?%_::7X4Ih1U'OTjEY9oF`q@>gTr.gAG\LUmK-PdR[Ru9r9,j3YiUE(KWD+FSD:7n.CCXAJ-^bMUGmBkj8o4R%&b?&*KO2p5CW=uLKmoHrHq\I7C;Z8nS'RIM.e8s_S5H;RaQ@If`m-,anYH8$)FT]5j]+qpm]+qpm]+qpm&WJ4*[n>otaP$r>Zj=`-De]lGarltl0m&MXQ_tj*^/h0Z-+kP)46qF+ABBaU$]Bh]6BJPfd$6@/ASR=6DPlod3.*3!9TVs$8Y=F6,g3&0Y?su=>=kZ,g@`>NWl+Q.g1:p6#MM^gVMdu"G)RK#l7^jefkan!+/5P"T5D#KL7q)fG0;K5_dH%-2Tj?be@,E$kN/!*[UA-Q994B\&Wj;`ft,%-'XaXXXXjIXm4`Q!FIAPPu+\*_P%J/FgQZ=8:FnRaMQ,_WPsJI?$EhJ[\4[*ZL5#$AA.'FPQN$Hl@Ad:pU>c;F.QS0QeXH_a)F"nF#\riNSsu'':K[G6#0sn<*d6IFk&FEp1!fp76p%a\Rii8UL-?]nmWi,&6&K6o'k2FO<:Vnb;/q!/Igbk<$Gm#5S!HNe0W[/USM,UD]/)8!k)/U5'?"PM5VWKX=NocEALs2"B_&:.@ThPp.o1X@/.3BOq'C!QGiuem#Za'bl5t/_s@URro+D!"g1=ct89uiJM?ZA)#(BVt-A"hqhUo,&,@Ep6O::q.'5WA%a9R#:#-k*2Z9!:g!*[^SonY'&(4*%a?F%>%LkpkAb_SZO0PI_7LaQ@kMmn<[$%W\K6D%EB+Ks4CSsbB=i?e(hO8OV<]raID\kl=%Ft7_dFt7_d+sJ4W*UHfO'>#!kPr]Q1Xk9b3Lkt9>@(.&BfW>AH.N(l*>I$?9A*s1_3k0b4%>@SMVLTZouWa,a3C9II8tccO(/#fb2Zn7);H_ON;NqWKo`;N'`jEK65OnY1sNPe`l;EB*BlK>rftU%mhm(s%<-(GoAusNb`lp9u30gM!2O:dY;2?1FlOA=RtYQQTVh&)#I)U;lMaPP<*4pZQH_N*o,q$$b_1Mam_KeZ]K^a5J'qSpBV?C&J5VgO4^SeXb_dhLkt9fZ!4J;&J5Te&^foS[plfj+sJ3TU=[G'`GS+46psF2YE.Lsh27#ELkpjn+1i9"'n$p^oZ!5V2iBs0,dR`l$*kgo@6pr7/]+qpmI2G/tfdVm`+6q7sDFHrMd]csKm8ifJpIYXX'b'O;5BqfsZ!uI0`P7(2Mo"$)_cZXWfpKaeW("!-YI$F\?jVa@M\X0$??`+F)Vu@r2&0YIj<`H\fWC&&NE5P&r7sdnpp+lk?Lo^On25O\2J03GC6>U:.kT(/=Mj(T@KeKLf:AjjL3H+59a+Z@GmSXEG,sVMUD8/"Is4`t^2.&4f0"s,I#[!pNEL(U=sRnR9$?f9QE^.n=@%o,FXJZ3iLQ*;;aH^>?@q"5DmtUXIDZVWpj^obT(t`"RjAXUoM]R1loj(#6TGX7Ik?Da?@r[\*b1r&X&b`p[7D'CO<*LI>nhH6L9da]/-t)I/BIC@^pc[n*%aQ'btpUBLNh;fh?e%DPGM?LMQg8?Xe`btHe(A0goMrCei+N$_?A9)p![7D'che*4kcg;Gq(4GYIPDnGqqCmX]d!._/ApHQY-H8*K&ok+W>'Lnfc:ro`99;-_3:\Z>Aa1@Z](Kkj5Su*=fUG\BB^pdY]M/`P!R/]B&E:;jIo!Ba<(p!L=LRCsiAhO$h(<^p[a7J"E7NmU=*[/h79hX[C+4+_t3,R5,nK:4OApJh2tEf95G+gI;VB\!Rr,SN'_T#Y_!"CsrniU(JFnF\"S#8D/"0@XaEN1.eSiH1akZ!85YgBa`uVEja,ml*@BMfT+.\@pk`;YgOHB\TR7MR0b2-d\@qCg6L54A]:?!D*V1B"BeYd*WWaiEEjASLFse]L)#;NDIn0+%1R,0$jjh)U_AK!1('RD$`nRUF?Kc(&I-:7Jh2t"6pS2nXG*af*40b=A/l8AGQa2,#'-(.\T3/fUeHkSj>$JDm'oqb'9]4&Z5?.X%Tu;Sr8q!0.--rb4Uu$tjY>Uh6:T'Kfp!!'D)fUBZDOK7!BICG/pRtba,dNf[WP,E&Q^^lWSC(E=#uXhakPUW_$@TH\D!4.Om#;1]!@"R'S:)N()E5\F+"a6J7/bCNDmGH(>KSFj+t[mi#RAi[6hbN%:$q%K3l.IP3B#rS&ooG:-g\\!9'O=2kI52_!fqP?Tjq%ZV-RLWMMdo`2XLQiSua"'PCh>n0t_(qfjs77'>6[eDimi\G(11$P7blL!I1,06,n$)Tl,Bf\"VO_5ftk@;8N>ajb&=;$bB"@15QR<9p_]!5aN@?N1BtE(mVS.OU-TP:V3qCU`Bp*SA9$]DT-M4DT-M4DT-M4DT-M4DFO3;Z!4J;Z!4J;Z!4J;Z!4J;Z!4J;Z!.gR5'Et=hQ7dAK;UuA',/$gdX26^*TbX[EQ5DplWHrNd80NOGTBqiafl9(UUY16X=O<4K*1KQKCYuH#Hd(!nm-",P&9HR5K8*NbjA7Y3bF*5(/GkpI2d-g\[^#>ZuZjKP^J^Al8"V44f(27FeKq9"';cp*T-2[K*n&;91^XGi(:5M//^Gj<-Z*8t$'2g!imt4@'@+j`JD7j[WbA]H:PX2ohS#i??R-:<5I+aL'XI?#iu4Ep`hAMelBrYa904p$S+f<@&XpZAo6G'8"E0-XbK$7<#?j!*G'X3!gV"7KelL*&-1S`?CdlTJPhfZke=qQO^g)K:Cf[M4J$60hCLOE9nF;F1\iHXJqG+a)lTVMWOef>G%OO,aA9mhs_]bhXgXfA]/qOb1e`9%tQqXKZ7C-<&NHcE&7PtbCij_`7<%XC@_?H8.Hp6>K49XK\TSs3AAk8OT4:2F=Z5Na>ac&RlWB[**E12?!-kp$Z%eK%no+gH9)JCMWIt0+PR4Cmaf7Cq[]>[Q%n'^*:/ml)92gS+F?pd"$_6a&?]>%#CV'WODqI/Z!4J;Z!4J;Z!4J;Z!4J;Z!.gR2=+B1`,u"Id>Z$l@&Z+k"d=@n(qX)qM0B]t:_)S7(GpSH%&a2=k(Z@O]75!K]Gmdo;a)2N'WQnreE9`',k<*.q,P&Y!*k4UBo1M]%9:RMK@Hq\(6#tWc./7#ge)B.mKlcsXGkqS8o2f?iQ\5RY^A?%PPYCXcMSLg.U7!`d6QBZAGYW>tHc7^R(da:G/el3%MolhMqBS$*5^817uabdA2\L)CD*cq!]G[$4pG;]X#e]I#_kKX+A\r6d!`)A@-7iP.Sr;\23$:$<="MU@,%ah'VcapH%r93m:L]en$h'I3jVJR"-N7=CiJfKmCi/k,O/tG'5Q6$8[LA?k,G07_J,ZqThd47FKEt#QaI2eVT>$BW&XJ0KMpunKfK5C&'55bVmD-dbD')@EOZG?>h89nS?E;1QCM(!&b0M(m+:9im@+CE'KpWfP:'R7A`.$*nA:O.n:`8LRd>B&lW2FoYXK=/$X+d5O8MIh]2:'KKd-^U@:FT*!@hn9,&GJk(eT$GCuF4jFb\R2'P'"aV$45nh%pdaJf"AL\c1c*Y3g=`0L;1;jTRR2"m$:SC\`Cj%rmsse02aCM[$,f/ZE"!3:<7'?$&,DDVaoXTu?h35I7CJRg5.][9@A:6I;>b8?ct154Zld.DLT@*79Z$Hq"=EPRJ:eY!^ds/F9BfheSP[uPJZJGactkk"PL[oc4F.A1*sETE6iqfsn^EP<@*``ciUA"(H-cP3:67>E[plgU[plgU[plgU[plgU[plfjH@+;HfWEf.fWEf.fWEf.fWEf.fWEf.LgD18e]@)XWDkr=H49-^ej8K_^I%G=s+0'BY&=c%JBI'B),Eq[5NT;fBsZK@EZYJnC,d;i+P/^Oo\,>#mdpjJT0WhM#(^N_LDr:CtSqU*B=Q-[MCiJlpo^7@lmr/GTPG;>QXeGDhI(7*ena6ItglLIY@/*c@q4>J99*Z#5>@00W\A1#F\#Z[KNia7.mE0"eST`qhmgh_ErHiMTl6Y)pEuQ)^Zldl$=q4UdS;2uij`(%\045YHG\G+U6CeYd^7lW+[QK>[c)HJf[2-t9*s_[<*.cq82o1+!'l`^0)3>24D+<2),N%t)T\mcrgXhH\t21/=W*MT5;q"rtJ!r9#3omGr*8'_E/Y?U1M6(maP\9N!EgEtBu3rUAC5dl4f]S%o"T[+:p:sV;fcY"q#(fG^3BngCNm\gK9P6jPGd?6O$A57(X)ot8AMYc)e&K,F`;(+kmUEa$2#m33f-)kNjgE:q_((dJ!10Xg'B_AB!I)m5de&)AZ>/tG33(XAS%F2.VUo)=g$i2?VQ"Q[q0XhG7:I.S#(,9b-1;0]2"#;`RbNr;oXl!GOMV91\e,eII#ic!btPr!CMfMD#8^&oKB&mVhl1&U@$O$L.I*1?+n08#N_(I9>)K:e0O%l^XrK"G$JE8mc;@*ak8E8g.T33[T3XBtE;GV>sJZ^ptW5L_LpTqP29,K:Q5U^b<`hJZlHbjMrhB*K;p,Qbr1X>N!ZCZQPmEGH5UJ_<8U%Dj:)R\Dmq)eqP@N`JNiFm$4J"_f=c);B[L7m!5)nM>9"dNEC"c2dE&B)*T"]+qpm]+qpm]+qpm]+qpm]+qpmd9FD(`GWY4`GWY4`GWY4`GWY4`GWY47J-H/X[[EAHE&86ePHKP^AJ+;a,YauT779)5Q;NfRifGFT76p1&]r(ubXog'q$"i%WqZf]S6S7-#%Z:*BQ!q?A[1@_/b0.FlV9$_D2l`sa67\KqnjT`8)$jdl4F>E^uYs%6"Z^tDdA(G-[u3..t99s6NcRREZO)5L\JU`K0/%,h)1:PLs#IoW[b2;@sngA]mTuL*A-d0Ob4dQn*&_YY]\Du\9[HcgqS%PB$ZnUNg5-j'a<>a6.UiZaR4d[bHJh%c.+LsAJOF.B/"K!=SUkI0aP-C_V,_tiV_r(E9,q@OM.uAlR%^c-eu4P&[lR^#;Z7DpVkHC*W^P=Cu;l+rqXZ+Y]ePpn:$uXJ&Q6sIB/j&2aH6CkAh6d?K#i/jSMuS'?5ZP5uK2CHjrJeJWq'u9N-?kaK.tAcb[<,5`1s$VJkYCL-ti^J^e3j8>_`?_70"c?rH66OBZ83U_h*6/jGatC.\VD:[NqD#>2e;g*(9DTX2gmAW+dWE.W31pT[R6QG>9`F`mYr(ej)FSQpMfBV=cfa85?3p0,2\.r4*hU^KoWK/"?Poe4>K:N=LA6k+576im181.ko**[.0t[^TPWUhE:2cn34s/ogphYB<\@SZ\#s'>fpHejT)%IbaD"J"!qXV*+$i([jTe`T7f2Gk+h2R_$uB+^$E@uM!VqU^rW;?L5;h53DhEck+4T+_KO]@)67`t/R<*#VZ"$9h5(I0@Kq&2)-Y@DNpBUCYrOlsU?ZQJ5Mp-U`^?Y.&6I1=Ah?rLJ^:"6e=E0-9=X`$F#0-"JL-I5,K`>?pJ.n48?onS62aI&#CWF-cE4e%2a6pE&K96AUl%2EO$IZKq.EdC^qtIq<<@_MHc5i!'%Aj(hRUN[7[plgU[plgU[plgU[plgU[j$-FfWEf.fWEf.fWEf.fWEf.fWEf.fWBs9+1p(ElrK-V^_8d1p%pY_YDF)Y$FE.\nh6([U*)<`Xt)$`4>5l>kusR@/CTp7&f8[^u+BC]q9Q]+Oa&g5\PE%Y9hn+k8B-c'=*W&NZ!Q5#;r`)IKdeuVA=bOe-DEXKTm((X<%Pgd6OjPqCpA%c-\B'Bh1KSbe[JhL[r-_YLd9ZcoOI,oOSpL&U-!.AlkESD\P0JV$0;rU5&!LhWU7,+JP8rDGqF<#ga/FYShOM*eSF7oPNlMm>>?\jeD5_3L&jjn!fflV%tjer\a2pK\&`HM4XbMgd1FB/AA?;#HETipR5Q4PN.LoaJZ(d6&Uu_B'RqeGG05ApXb0k-4_Zu#B6?iTJ8@U+Wo!aqiB?dr*^(9o5rPp:NTG"'O3*h/(etpRkla+?f"oV3-Xc>U6a6=CEDZZc,H8XLOAt,me&#P_T)%L8+E(&T<,uNl.a).a"%`t\=WQt!`-[g>?J&Lt]BhL[YR;7#_@;b\(GE\6b?)O;g'[C*l93)iI4aCUY6VB$l.fgQQRm3McYfL"3=Y*cH4EX@#%]?P]O>#+)Sg?ed$[Km,kW-XS\,J?CoW0%Pn)GA(6!>H;X0b7AhjB=W@hl9*71g`bL")1/9kj(+fXc[FkVraYkKCo;c*;9&[KRGoV1Y0E5[$)hX$n1sRqDE;:Bj]$a:l^*AXFr\qbX4)kk1)5@^.KPsmFM1c($pqrf+_sOim6i+IfU+9A&I/()=_GkWWLU7%]$_p9P<.dV>s37Ab(?^)6N0F87g/*R:Kahacf)sWs*eO.Xkh%Yf-9s6:og\\:B%q#.h#1UKD1N=W(bY+8'Y:5mUH)+#C*!>cp0c?6@qoLkI!4cupdYU>?;:YDPA7hET&n'oXOO*?ZOT;p?DZ6'SM#*R,lXO?P%#l.#-,hK,6XNQkEBCtjJ8,6SlOLP0Ao[*`^4-#^KpbX%@5531T;ZD"'MWl=INO?q1EZk43&cN+A9)('Z^j9N-8h#"$O+Ogm]*G%j#;XAY7RM"p)<;)K_=iH$+67cm;adJ,mg;NAB_=m2(JOJM&TY:5@ieK\O%'I#Z8)d-7M0fYYfBY$RRp*!]<\T#ADH"/(OL8a3KV?@$Jl#,CmfDZgCBV2Epj(2dif0!;h@mW#6!ngqVnmShKYu9?$tfa!pS-&qemSi,1r1[pTr_Y\ha'Y!@Z]iWpF\25Ze"W;E4BPVrn+@*Xk9c.Xk9c.Xbmn+'tY3m("!8:h2:$Gh2:$Gh2:$Gh5]DcXk9c.Xb].@lrG@D>LhN>$$A+*E;S5:h^/:@IOG`@;gIbS%I\QHH#WGYCVqij7=A+7X00@rgGdujTtI>Un6Tmlk;i25%rgL]*B88>$I2tl%Hjoo_mq:AiN.(rR^hChhVT44lj_S2ld]t:qH].sf8[DFlSXRs)"6tl@X+O@Rd9URC0,l#4HGW`lIF3eY5rqjjP8`Y1:>@)m9*jWEW^"l>"/\hREfgY#WBmRl0-[nh5?4[:SppmQSt]T#^j9=c9UFKY+il?FU>_:&$o%3putJr#jlm.5lhV)?1Wt27t:VStWi8C`!MdW37JL$tfa!pS.5TO&n*l-'T,qr&]_58.9NV.JT7HeFF%:rSAX.'tY3m'tY3m't[Jn@^fgU@^dQX!3f\4>HqD;>HqD;>HqBI*4lrt'tY4.#CtWFA9P!ea,Y[thoaBA&.,^2reiT'r>O!fK72cONKP@G]g[U$T!Lr*99&6.bT.8g\%2(5lTS*$cnPrk6AU?n_[m:R"u=88%5MZPT)IdL^0W!%!4h4foa?l*BOKIiaE1UI9H1-n$)t;4.qM#bh[Z2K'BCpuU,upP=42cIUu??!Ed:PE&HO['!dT_eU"kf\*[TVuFm5"oq&gSh"*mRAb&hop8+,r^QJ>qb&U;F_,^#HKp!]2U5q_\r11QEN[=72)_nHo-^Qr&pXK=j=iB>-2".[;\e"+VP'[N*+8XOaKAQtHHCRuit1F^W@4P.4UXh10[N;e`H(<7oUotpqY+H*=1OfV_FiDo/XDc(Gere`c8`GsGZ<3J>d)HHR#_aAjen=T^WIeEWf:F[FumEH+*`2=\-s+G`jIn'5Co=E\G=0H2C\iM7J;]'L\cI]r5srDWaeO/WtQS)UgDgIU@KW'YQ+5jlKJ-6WrMb:IoQI;NGkb^?[>R4r4qdOalB"lZ(ZX>`Fg9nV]L=YSN1[p4nd6pe>X+RW+V`K9YGZ6TR,gQhlDd'#5,o%&#erGqcdg]$dYbq&&+a/Hg5Tnna%^ta9-oghu&!(6+sl("ng9j_s5!dqeJ&Qe?=6]bY3toWR2m^a8c"WTpPe[d*-cn(3dp!D[<)YSQ_+58qVq9)FmmY*Wp]`/\(&:]KXu?k]_^OCr(#l35lL&IGH9X"k#^h$O$BA!I<7k?o9UiSTf;_HetuVnn'CE!'>qM-'V8pupXkKjKb80C'C0DRD`/2E><\)F\^I*>J,Z')Ht;das4>0&J^=C[2%H]fS:QI_;6eel.g"7/#fe^8f]qi[dnY0Hgs,hfuG27Ro_8BB:jKT?+kJX4nk9jP^a`]G5gGpFk+W!c\Lu(X58;H^O"sl5H^c)LDDlMchJ"cjsq9.75W:$6@os::h>WqfU'C*uc*`rC@mrp:s4nmh1C\>ubn#?8(]W$AL_]Pkms8-`5hS'#5pYGQl^J&-9Zg-oB9Jh7Jo$m6CR6cdY1.o:,%5+5`j]]'F_.S)=-NlF[(>QTBHbYNhsNp8[^#/h6lNIX1Cce3aa2U0`-<2:^:7Tg&A5$[)5s,Pg2G:]:3X5?Hn*@qote?hr`pT5WiYper$3WR7F4[,X)l2gp7RIg_*HZWd@@U$+>W"e"Z#PP"o"d]->,biP@D8iqm>Ht<_H5$);2pY/W6+!nS0,eQ./u>s3C02-+!_B>=40eQoqg)QU'Al7;&Jl/NkbL7=NpJ*%[dc`#$"^JM>i/h$`Lr7\>[pepp12:l)7>qP_aXM7^0-bOQtF#DV#Wr+>1qsZa+eD7"ITDVAg^N`r4?G!06p09fQ`?"d1HfaTcFlUmf2)@.`/t=u*r+eN@nl&PpoYo[iZaj*GFgnDU9sq"!]hrp]25n5nNN1t",rIdnXKK"9oZOD2a(p,*m(#+V%[Onp&gPTje[UNIGXk6[d349RVMMS\m[ac.0X5b9D>gTM,*cqG9u"neL)TVndG?;1PI[jh??rIsccr+6bmdSJ0U-AQr5J)@/j`mjB&8,ALcASSTELkpjf[-F8dVT4G@jB2GQNEZ$TbI1ka&_i1[`O6s7,-("^"`RVPKjh/0FnVm%J>eP5[?+YJZq-1KN="c!%n-`l)WghTmWiGBOeAZL,P^gR>9)U@@R;&/^moT1AbKA`%hfo+@^:iKVDWUoNGM),pW_EorX5UcF2*TN68)^5]:iE9&cSNr(TaG%+))]k"Xo(p2)sgT((;GgcFafa_*WM#b.(k95<^]>D?Q\$[D8iq5e_!p!'AJC]779Q9os(X-?sC>AecBpW_!C9F=8/\Hqd3X2rNEu;hE&/Rq-2]&uUr5SP:_XCl0ho[YQKROX@?@,fipb@6pc2B-)@I(NC-!U0#nTP`CI[,B@D%;'&r4D;[&j-(S6:=4@;B:#BF`hZHt;&2RZTl(4LK*?#2#8,,,F*D7(,5C@@`12qIRHhZgh\g>Q@eMd%1s1Lq=N+,I!]2*?;UN+gT18MpVEGEe_*j$Y+>SZZ)uYZ<(?9MEBBG7Cb$\RU7u.%Z)uU+cE@?(83;:U:8K&eMMR(ekh&p?Yc[W#bMJRl>"=YK0qQd:t_^[%.J0;s`T!VMGes#]nUJ,/!%qXS@>[UNGAfVNcjWJZLfW%;C^Z)uRlJBG.g:K9eN6tHtbWcY[L=kQ;5'b^QI=Hhi`Abic\p6d;Y?sfhslYKG3mIfc,KioE\C=;/+XgM1#;r*YSA[OhIZYU40:[M8cB!.`=5k?fQ;]Lp%^lI*X-lK4@QWqsk@Flr;1.^g)H$31&+W,-9#[M8cB!.^&=>Ht:1!!!"8goB+Dn%KUfpt25XlKqD2D>!26`D_Y2`O5gJ!!"JfgPThO!!!",j4ICK.f]PL!#rE4[X.J?B@Yp*GJ9YljkK(sKp.C2`O5gJ!!"JfgPThO!!!",j4ID/ZE7FgHd,DD@Lel/9oh;Dr:B82cPsX%ZfV@r0CXR=fn?i]FdN5;i/8qp4oT`l")#hPj$-E?;'-alU\q:dX12U9gZ4\=1O`UGN8Mjg!!&LDD8iqm>Ht:1!!'6CCb)q/gPThO!!%P/@p>5@[do&f5=G65l`BWoDk@at#CP%r#rniAT<7-$."u:E>r7#tro&;gJ)7hJHB$g,h_MndW_>AnrAJ"@^66@Ti28.%4n##iDmQVd5@H%SHi;[sg[4a8s3SJm?4?V!oQ/:T(A`ICB6*f3oq`O$i&Thifg!W'S6pNppm:$m*c>`-/miIbo]Q;U!.^?eghc=S@4Nf'6=3+aQh+tNMQ/llZd.g,U)Lm$U^TQn"`qW("rSqhdf-0lo0Q+b2e5q0mNo\[50B4/9Y:/hBE#oK2s/,R8cp*TKA,Zdu`j_l'k',)@08T.p)8=:tbI=D,X.Pbu$Mb(Eq^D0Wl;uppa\Oth00/sAr70X%A?kXL"98G;B%d(05.0Be0BESMeR2a>@U$+>fN)f=!!!##`3s,ZZ)uYZ!!!#O34;iOCod'Xf\b]Cb0QF=1qkX@_L=W9a6J--NZVbdgWC&S7uX'ToS)f[o@JsDlH^;sQ1&>F2pC_X^PmZP?b;rPjl]j%K>hc&J#3/'^3BJjqNpR+0>CE"@K,Zf]@S\LhGh8Ur"[NU'Il?7b6O9H`@m`8"hre#`m64-YMF,OYACtVn-#m@j58tf8c\nlYZ]PdXa8^d(#+U_`O95[!<<+-&)2tY`O95[!<<+-1U*uRH!C*d5(5iF)obs0+0/a(IN\#25OLVP?c(Vp=h83m1)r6%HR=[nX8@S?iT'*!q-/4Iq8DlkH1qug_XjRNOnj.qmI?O$pT@@Trj5!+=j>$J31!;fN.=B0CYLbl'hkW!!)?o[M@P3*S=Bm!!'eTfN)ghF^SDS!!!"C?sBn$J31!;fN%tP!!"p;D8ipb!!!#'EGR/6'`\46J;n&CZ)n!+!!$gTgPThO!!!",j4ICK.f]PL!#rte@Trj5!!(Y2[M@O(!!!#7`j)Yu$!,NY0MJWLs!!$EefN)f=z)ooBr>6+^(!8'9>(#'&q!!'gSX`I^Segn0DgBmo\!5KYa(#'&q!!'fH?s@Ke[b;)h!!&\/m+_-;o!du=]19QAk;bCVfV:n?]2WuiSRPg.XT/>$!:49$Z)n!+!!$g>[aeDpX*jsJ!!"LmbBmSnrg(7pp8Sp8Hq*r-!2);fX#OoGz`F2ui@9Wa4!!"DWgF<]f$31&+5]PFWES+:l!!!"V_mYH?[K6F/!)OZD6+^(!%8?3.Lt2?!!!!aES+<3fN%tP!!%no[Yhu2!WW3#:`QoD*4?R^!!%Q/YcZohXT/>$!#13*'o-W0!!!"l3,GWTCb#Jc!!'uH>K(#T!<<*"-k=u]%bhZ.87UB(A!;/E9mCb#K69l)<[5j;`^`F2sO5\X\3!<>_.gF<]f$33[j30*of3b8Y'`]oMkfH8uK_E7PC!<@9L[T+Q?JF6k7i7AkrgLP+/pZ&je'Sf>V`4_M+Bf&i/9'>R8US+Um?a?56(Df-VFF>m_lPk_mTVsd_N9m!0e#&u")Z*KuMGuKteRoP;t]KEYH$mZ*U:a2]W@]S@]rDJ-<2O\04nFnYlFb-YcZohXT5"NYcRm*jb%CbLM[1pV1EIe!%8q*X#OoG!%8;#DC_&KkBh@?!VQ">DlQlG30kM\/!3hE!'o-W0!2Y6`"TTqmCo]O3.f^t,Cb#KNq-[FG@9Wa4!!"DWgF<]f$31&+5]PFWES+:l!!!"V_mYH?[K6F/!)OZD6+^(!%8?3.Lt2?!!!!aES+<3fN%tP!!%no[Yhu2!WW3#:`QoD*4?R^!!%Q/YcZohXT/>$!#13*'o-W0!!!"l3,GWTCb#Jc!!'uH>K(#T!<<*"-k=u]%bh\$S((-eV:)1P<5pkqe@\A?E'X5Sqi^Lp,6+S^r-EqB`O:ZA[K6F/jaq=QPR=j!*4?R^!%8Y"/"fkGXl?Re!!#9ppnmR1PVR\)G/-4UDO>bAY1[=__XEke`qS([J+Z&U@9^]Z>6+_SEl#0c8d3s!%bhYcZpOqJ?B9!6UQ+J^h0Z"k.=9>PYnV)aA61,rK,29s*rLWbP4gfo[L9T[^6KiioNb!'k7->61RYD&%hC"TSNp'AEjB?#6Q$]51^IK5`0!>MWIH+TMM`D=@;DI\KbcN)\^NqFAeunAb?-$fC&!lFnKMnd>31e?s]X@LdJ2IMJ>tX&1n0Ht;,b1Ka7G1j!!#i@r0ah5'\Fk2AiobFG8F/XlA]QD<6u(s''8g8_!nB\[(*!rbo)tru!]p!#jq>Csq$i0.F3#poDX-0`iiioP*Cb#Jc?*_mTCo^ZS/%-1YZ*!$\Q*RN4Cb#JcDIZni@U$+>Y`*E6a00T/Cod&FhS62p+6==4o<#IbWr!EIAU\+daJ%!$1"XYtk)[O>Fj5$0!mr`kLVV^(loe"eOL^hWiJ(5e0C$G6+`n\(F_t/%-2,#2:U;gF?Z:!PTZ=S'bhq5TMY0En2fuA@D+!TWW0'275*9rH)aqonA1?XS;l#[8(uJeJ+/PGih7jpg\VJZf3W;of5!/,JVOc:`l:G)3g$MSll[fN%tPr%5>lgPTj%YJIYNq3;p!YFYVV4J"8*`ZI"?Qqtsbgsi(&XT/@R7,bTFGNAnZFU:8p*QY<7r&jsUriYacr5&V$F+KD+o_UY]1Y^Z=e_)`qlC<"r9Y5W9n^#b5pH$k(QQ+K>0AG$f1\o=dBi:9NhGVZ`I7YH.]1F%C]MVtEd%\gVBiXP;K.s3KJ5Shp\2:CeNl5#6R1pk807isu=Jn?^9G>)@)"!'i*D(#+U_Km7F7Q!ZQ+C'D$\!!':V@<4EqUf\f4,VpJU">gubif%oYag#%rL9/fD<1J*l-l=J;V.[s)3<$nC&k*%9[b,KJ@UU!O"rU&%D=d;NieREPrAMVZ(V6+:BA0Re7DRK&IDR8a?PSpp[b-.=P[0#(i!.\0fX4WKeXLm(KZbM32KsJP'>5=GiX]Ah6!<<[hD&)qFRs"K%BD/g=X\^q.6+_CLB?XCD7ZJ8=&I;n"[6[LT4a^%iTfEg>^fu?EbR%8,um"4W0T?9o)06*4Akc[K6G:'l9r'ca1p#E-5tIPTR>6*4Akc[b;XKBDPj1]+_ogDLlF`^J'4EnrHBI_Z,kVhr9t/hrUIar9sdV$?'[1bG5P2C]I(1\?3W'YOI)tI),L"pjn3MSc[Lb5.h[K7g4pJ$@L?,hR.J:e-3!r-WP-D(JYcT+Xe^e,47;OISjc=6nH^W,Vi7cjb.!9@,3,GXOD7)7RX\$q/GJLlc/Dhn2n/>3T\PqpkAYQ3d`7]0C7h]KM1R$U;e;b=EA/c+pbs>63BAfN)f=[M@f,Xl?Re,.?$6?sBn6-_\6^P[?tLHU(liLe/_;mtYVDeU7moi74@NE8oVl%toK)p,$/Q\SO];aNYAoJKWK4f85L`$KQdk.#/BSkqq;[&\s(qbS=3YZ!D:AQ3a2M"8GrJ)U-=\2R6AfN*"E&5%pp%a^`c(dUVSFV_!)P_nD<:6W\MRcu)1TgAj'0NqWV7;1l]Y\p?d2fp5MT%ho"!g_qIfCOit&AC?%.mq-gL]Lpn,P%N#r<7Rr(,ao;cPCSPl3b$gQ"8kLJX<7\)b*Uu$Qu;2pO4e;#.>WUKc>+4Oe]e>iQF_n0[@b?*6A,GXPo-U(I'NCbufQ;@Yc.@&.H.^Sd.J%Mhp2c.rT@69M\V*4Akc[b:_i(#')2m`)\E>Ht:AO)5VeD&'=X2Sec0^ZYQ\ao1S+n9*.WS)XIu]jJdOm/1.IJaf/pr:>U)>PVnADasN)[Ch=,IqF13pk'8e-G3bKrB1:66406$jX2JPBi_@U:N;p]IQjk5Aa)b$-]ChW^\1%75I3Stprg;l1]FNfN8JkEMq6bu^.S;Lj"L&hlXPj6A^,<%tqso`+bc9dfj%N3bf"HVi_mYH?[Yi^K(#T7;T#!`O95[!SC-!._?B@u]Zl[);"j;Y7knG+ng=+N"b]WMNmFjg2F,F,OetMcNK/=lmADj&\ZH,+j?I.MLPd%biIB>AXhXK^Rb]Ht3gIuAg=!e8$:,Io5)'$2#Vbq?#$PYt/L;(Wm2[ae,]>G9QOXl?Re,.83d!39L3m1cuD8fcY9%biIB>6+`.MJudRbGE"tU&2HLOni5ZoD#"MGa\%0XRHn7"V\UXq[VJ6l]t5A<'$4?a])#HlqL,sK3CI7[CqbrA_#5BW9.\9Q-.=OCbCo)>#b+bC%^$>^>7T(KN^PSbEe]kp(_q9NSTY4'o-W@Z)n!+=9[GoVm*:"lI]-WfN&U=$35TVYcW'UgBsd;D&%hC'sXk@!*D\"Xo-7KTD=U0A%lIN=kF7N4uBD(KXo\k)SbdN9rGO2r*=aOj2YXkEb&17!pd&THEV(b>u5IPr2#jSb,WkJ=g]rM;0+NRp#-.8C3hp=O$@_a?+JOf'$3[=bp:hLNuqDd;].GS(TGg07HKDd9O1<-b[_mYHTB=5tN>FoL`X3dGa82)L>m2dUE'p\aedp%W$`eaFT)>s85S%JAY3a4+$`T28TAc`#._Pj7X?:oR\h,uY1d#OaV<,dp\m[T18S63Uk'!@WnD[6:[K98BgM2)>X\aK!]79CYHLg"j,'o-W@Z)piJp^%207Vo,B`jS4e?sCTY>=E?Y<%re)8=K$EKO4tWOqft6WkdXa2W0Lp^k7SQ\A/]=^FO]O&$N>[+40p$rq3HBeU@0TXa^67-e811h5B\Ok66"s04%^ErTT7*2tu]:^\HnHlCb&I=[M=>0fN-bND^!jBV2fC-LM[d2X\^bM#+JYcEC^A.+1FN@U$f[>=E?Y<"-2MJ7>dc[Mdg,AV4h7LM[d2X\^b)>0/!LLOLfS:s%?jgEV*Ap"a.KWCq/%/)OAX%W55@ln-n,56&j[V-.oP>V;e;5,2[J,El,)/uc.e"dP"/q3F78=(/:KCo]O3X,(VHMSZ_&:b9'*p0_*ur33<_YcT+X'e0FB$:(lKdlI_K`LDu>,8r$,">n[CVh4pgR3YF-2c5N;<66%RA;g=i_K)Q)'4,<+/k6r"2N:+IDh'3"_P?Q)sgQ;mM1b?*5RRl)\#Qr*$8U^k(`>,@CER\.p)F?6=Ile/gO*%Y)>[T+_Nac2n-tR3F[M@O(n^pl^fN&U=$9O,^"e_*bXk6Zj/&Yq%`F2t>Cb+kN*SFKPcb0;GpsG-%^AEW%h_0FWJ6ah`bYu0n'>*caQdC8)p6;(Zlau+8%.*_#3!_L\pp0B.b,fdbBNR3IEf'D4X^F^0[jhouf;De3lb`29`"[5Aj:t`,fAGe$.89<261k*>cjP82G`[THg^7a?8ImT,'VU_M!KBhA6/S]YaUY^L8?/>2PLXb>ph,*k'G?>l1X]h:o@TGYkQXd%p.A_dr'<8Zk?DTE8.[s/3mCZY"6J,=YfN&U=$9O,^"e_*bXk6Zj/&Yq%`F2t>Cb+j#[M=\Z)nRuD&%hC'sXmFU\nOKgbK7Yo?&`Q^Ta,Bp4IMI=$rEpcG\i0L`/Ndq@G7=u)WQreJlKVMKrV_k)H-\?jmdu`)G-"D\FJMob_jp#Y8?)UFKR.du2>,Wm6`TD%N9]fVWQF[$NK9u:2OhpWcD]"!2c+,==E?YlmT:WJ5XCq@U$+>&Bf%r5<2Qlsc+M6W'>]&':=MAt=#8M\Yj-T9\U!i*4hlmD/cO,X*u07A:k@@@hY:>`e*grL])4-QGDqtpaHoN^e7'V/.N,5(U6Y4gatGQcOB$AnO]je*;Y0K\18>J]8GQg0M2Y');CZa=ro;D_Ls#=r(%_'D5Y1Eelj-AZ2oI,G5`L24DncPgq*,(W^LT*ATMoBQV4?T0A=RKFCn_PA^]grPuMq[B^+bR78ZZg1MPr0,F_7Q^P]/*UJQj#=E?YCd#3AJ25*P@U$+>&I]tLXT231AM*piHYUad;TbW2B;QKqkif6CV&.Xu_RuUYi\oLb:*8F:&iX=-J2@=fN&U=C)(NpdL*du!`7:sK(#T76@lYr.b#sBC>dh]RL=e/`S2UO4#u^?\A4dJH),3I`#%u/\QJ(Um8\g16kgqjLe);rSQ@hND?PJec@Y\5H`#HB%60H68^]DW6+QI2)R+jll'@4Mu$0E#mGj_'\HH8SD`R`qD3plD>Cg+N'F_(K>g'thrW2-iSf[O*e,4N2?&Qs\'R?%]W'l=T3l=-[JRT6_Vq+SMc/JX@r=%]NDS40=g/RhSX`'oHiCLM[d2Xk6Z/fN&"A't+k3MJ\&lCo]O3X,(W3[Yho0!e@JYXk6Zj/&Yq%`F2t>gUjT)s1l7e]ORNl^G-6;s'CBYanH!XO+6P2/4jFD/PB:HMR>!Cg\Q&0>mLM[d2Xk6Yt[M8et`jT>\Z)nRuD&%hC'sXmn<["md!8PT&@U$+>&Lfklk0kfBaJe(V&_2?2?$174W4L\dQ!@"_9KHN=P>Ec!('(F7JSeD*DOLN?r.)U:>\e_1rN#Grqn(.@GE'qXC#cP#f5ql0bG9&,J("8Cp^Qg*^W0S8D8n7,ZLRf>Hj3`Gn0t?MD,U$;/uV-mcDf4=[/0?8TDJ?8K^.oq;]d"D:uD0/+4S1=eu@R+mZ;b[l-nq5S*fLg-U1MRXn-:P0VO5U12?VlrSW(($HKT4_mYHT=EA/^W!X=fN%u[fN)f=[M@f,Xl?ReU@$c;iC[i?GFO$CLZX]o&+^UtcNXkjIk=]tN6:IUQEV1Q0D*fS0UNeE#\t8uH]EApRHMoRI;#jefN%u%(>F^``O8)q[T+-V>PV"df5XLgr5.E.]nRKNhrP[JbClciq7FMI[&C0VIIjSjpl/X#s5`cs1,V4p"pXp'Dss@ako*K!,;X(V?p]h^:T:@oH8VSH)ZnTXeLafI,-Xo][[?:FWG)La^*5?"lP:Oh>gf%%4-,OZ^Un%NpB^%9f(p$TG!W'bKo;/a3j;B:5T<5/+u]mKNIp#a(De3!,jTGlt\U+/?:Y!^Z%Ee^!OmLM%Fh8*3m3l%PX#OprLi(,>@TrlK.bIdck/9Bi%kaFK"dY)V!HdX&O*l;OLLuKt2jDO&CkH`rKMDE*KI3Z$4aAK^\K@KYo0B2rOu2[tK6d>g(5cCDhj1#2KIu\2T^k^@K%&jYBjp@HI5X-9J(%h[mokP%qtnfodhUcBjGeetPb`,NT0PbQ"_8/sXcO\u#/XDR8a?PaOCFX3oli2;ECKosWDOWXE/`[M@P3,M6%$U#9"g[UNGA=?j5oNbubD67fQF*4Akc[edSIV8/4=pq0P`UUEq6YC^W1[K<[^Co\Q1MJ\&LCo]O3X([8pKA@X=rO$96R1j29H,KEXgA4$6mltsoY4LdmF2JtTrpSQZesA2#'.2=Ab*oQSmqBq(N/XdQ_-o2`4JWbTk#>e5V$;:Ee?,$aITBEW+fj`=.Fll"Xr?#`<,6-IC2.Q^"2,AJ\SardH+[I+1lnYY,#V#0n(mqhiHs8HTC=64!/fkK.DDq$-aN4P38k\\s6N\Bmt]jL/?lkrr';cZ9DDBC9aqnAJQoXMq,W^p2a4)9YC&7(Ep:fDat:r/M0qs'lg6I\PY.hi!,OZF87>`-Xk6\L)f2Q7Co_5r[oN3n&jEl$2^NiHn^FT;/Hno$EdjkDIuD%,]-UG7bLuN7Cb<+MHt$B1o(=B%kg#?j[$mCUW8@LcQ+$E]:X5rbp-(>kZ(Pu>Dc$%HBpDA(<)lYpC?]D0=0!sS933dFlDeTAiH1!(jb6K09APt-c:9@Jb,JW(U\mt>]NY^_9)q5^_JSC1-%6_]f^\-qE)MCNf\pt,:Oi?M_gej8]Ma7!&"f?.:Ddt"^Mrs)\s=)A^:Uki"*H)Y;?"mnUf3CZ=I`7f'UR+j.c3rNm`]tfN*gK[Yhu2MRI_5Kf?E^r8.@\H,8!un;"qHc]IBF[fQ`i[6>U^c2,XQ?$ho@0[&@ijo6/\s4Xk@qiB-;k8)RLc2fdX3j5F$-h9t_W;>4C2)mRu()Bh`A7AXuZo+iKe^r?mkcef:C/o,qIHpE6f@6Y'D5sLT>5?@AYB]b9>:JYA1&P/`%r&m&^B0a1OTAQ5gfFEaEQMHB&"8^%:\]@Rpk814Mc&M1A;l5ba7J4VU9LS]8^0!Zh^/;aK4ju%3KWh/If,dWp7TWH?9*(2*R=,ID)s:R>TMLHqo*=]NHQ03VCn^+01A`e&AQs$Lg=]MC.f`e,D8iqm>9P'B.Lt2_MV(t!Y\r)oCb#Lt'&/:\`O8)q[T+=iEq,ZI(+7=M!'_j>p_]'\HmGY[7&q6Dm&`0a2(\h54.=9kFO0RTC1Gc@PFC[^D^0%-oqrGDYR[dG:eP.NYLt(En9(hoNX0u6WWkG;tF`dAXk/McXeU?`X8(Z;9/);\cQrF"<\Ck+b/cA4D.I6;HGI\WD>`q;b]u]lM83EW;H$FUn2t4Ht:1ll`_OgPTj%G\jE?Co`A/`O95[Z)n#-Jo/K8@TsusgF<]f.b``r(%TtAoc%8r/Sk/3.d+&h>SI+\QFi.su5"#qHJhR8eB`TK7m6ZmPr`u4;*FEa+]V`.Y?KWqeW$#H[Ij-j(&uD_.T1h7'rBIU8AFG-Dp6g4UMcV#6F!ZF\Z)nRuD&%hC'sXm`(>F^`"^nC9Xk6Zj/&Yq%`F2t>41)*sSDI0%g<9Bo3#Aq+g#\P>=1P.h:"cSHq`cJn3]a1utT9=*pOl;fM0D5s_@>?s5CTFUDi9XQd=Wa%S_R7pB;U'9Y^;n@?8ffsVo[QDt+-f_tkB?WAWg)Mn=9S%9]!*$7C>8;D2$ti"[kI:TEo&8P3_M>t84J*Da_l!#q8:QPIT((FGW(55:+&u7qWK)FL)u*)l;GXA^c9Io:^id7*`Ua#DM'8#t.e,P`DVo1?@Y`CoLciNqh5O_XRg#;rN]VG!c63T\S#7K#V_pK5=KY`Fh:X-%rc2:0aHW\/[ufN)gh/\7q?m4!!Q\)A*?!O``t$:("f>Ht<_-.4S!P?V"%HWnImZ\EJd^qJW@)[X*)Vr(4l9@U!9SfN)f=!+gn%[6=A]"VkE?SNlKs5EeBMdrWkGN9F`mDWA2:86VC'iqY"mO"gn^C-lVr:\PH(a&;`Cl?qu#)(ePb/(`^ZhjT@,U.CsX*/`iKX>f/Fa0Icp,V#L%[ehj=Q\o<]S:2MH)&_&jZtgOj@NV$]>T`]YB@oAu,bQV1P3%^J6,kKd"cr*:g:GLBY#8uWPt-Y^i*9Q!T[W@H`8[T.6MK;uNXV.*Z6Xg!*'DmS&m<,]d^/0r=^O#Lqk9=4QO0QtgF&<:.rdlH4fAFmS;qFnJY5nrp)>Ip21N`F$^<^VCR;[!q0o;/Tm\VdBDIo-SkXi5L4R-55m0$K&-&5;N;JebZ^SpgCM[[r^BB>?EX>55u%SbpClfdn@F:5Ht:1PVfi!cJ<`R'hTG".Lt2_@U!]S'e:D)/"Wn!.[aO<9@)Jj-5Y1ube-Op;egJn?B("?X6Wi&eEHCdnlM8#*#_[5X(kUV9s(G!CK<;Mq/0MW;BLC-?CglP\f)WW:fER!C1_ca:!F*Gl0/Li1>bd>RH:E!F<[K9:>fN)f=[M@f,Xl?Re,.?#;Mn:d_QX8#(m28b[YICRSZ%O#:(ph4^?#?q==.5\N9;p_H!EJ%0TXqa^<-qi9C9#%FRd9h"V)++2k2n7\8nM)Wo)GTCrtBL(!"!!k^>L$<3WGXrGV2uUF.Aj.k.g\jJ6sZ$D$mHj'?C>8p]U`O=lHg[LD1gT?^`/0JapdH*qQ#$_7XO^BRDEQ2SQq\c.g7!>PrD6s(:E;2pAnR^C&jmNu3@>Qhb:SCWlbVMe@u50`&(j2*U7%DY^X/Kc!#I2DpGml^*@UZVR,g'4X&Qf:,a;^2-m$2:Lj4a)@mi-[O:+%lLAF(PgPKWrqY&)jf*m%tCD33Rk4cRrbUDH;%nuObu6-7O;JI`F2t>Co]/-[TWjh$:#J:>Ht<_trViW.p%Q2)7:fqRX\sB-3aINApaai`&tSB3tS(md69XZ^F5sXa$OD[JX4%^555_P+&Mc1drj]+4koI)#[ls4fN*G>Oe97-`#LQ3Lu]Z>LJPW2?84)OJ(X;3-pMptO&B:Cr^?3NikDPmU!gE8T5El"bKn<$LUbOIcPlD_j_(^lB7AG,MY(cIDt/hLO.!_jmPj+BHXg!HlKXsBD]V$;`l?Kmd_u60nBDG#0pYg0NjbtVhK>H:m,9GeV[)'[D]PoZVn\U!O$@b\27Lf1Z&s\X*_NJT-E"/sS6GFnNhDQ>Xl?Re,.?$VYcZPYCb&mP@p?4?fN*gK[Yhu2MV(rK_Rrt8lu$0BJ^o*\,I1-)2NVl/);gq67UEb]E4:,UOCX8^CQPtko?>W/MFgY5\%?*.jYCK2BcbgisuY!pu@DJ2iU$Bqf;5i>^nnXJ,JiW%6ptoanS_j?`BZ0je)%4nbM=FCQ0:J@?&9Fi?].T.t:gs42GjJO#9/Har``]N'A6X?0A,HKob3%3egX5_h,I=DHM%gjj_ZgqUG+4f;Nm(%BHNGVptV4euM_V%&q]gnicqrUO)!Plg!--*`ZQ+YIZfZWhjE3,ni;H[ZcWSHa0^4YcT+XeOHdFfN)f=?rpiBZ)uYZLrZr]_mYHTJ6e.O`O95[+WfAf%biIB>8>IkoA!,%b%:-TdoeOd3ifi<-<3^nTLu")2)%"ek3#Y-qR%6,>_nXE8)/P7f0j(Coo>*olPi[f*M$ptO]5>gX_Ms*?Ca2YX/9MclJe(4Q-+$f`UIMr10rYW&Wk@K/.&-(_PQW_L=W5:(Xc^YL?6Y1fN&-(A$.h*SdB4mAWSW)(8>e]9.^2t^ZjCH!hl$TI@^;N@P`C*,tg+O0*8X/1r:"puK)&knm;g5jl;K::SZ70Ib*l2j0@m)LnO6GVf<1:9XNK4SYksCO[tN)-i\tlO8=uabl#TXUS$EqCb&n;#e-*!G%Um8Z`m5[n1k1H&/5Hn>7*J2LY!U(Yjh@>$J_6BN`sUq$f;Rh5Pd%:Lpm&.efN)e.[YfL9A6Z=@JDGut'e?qlfN+q1Co]OEV/.Zje_7:1@\51(@l7)PY*6bb5$RV2;sa2J`lG&MY]@*$iAmTG^>SrB)#U.&Kj3W.<*p2]nu0C5;bHpDc3=]$,ccn"VE.ph0sT8so*9K4(lks^lGQN'u'V,\iWWTB>@m8'R-8=W;tX/.mIATJ1>Q\dl67Km4)`F2t>CocR#Xk6Zj/"f55X]An8Z)t6hD&%hC'sXlua0oG]Z)rN`_7!O(D8is#1:C1&[T18S.UFl&W:&V>Q&62h0fu9[P7q\MDG^!::8k"]HBh'7PqSIPS'I?qWRSeZ>+!XfB>:ASc-<8n\kW_/%]HhI-Iq#1Y'Rl>H#fMj(Is24IReH-9OEI;s]jT37Uc.NBuQk17+c'P#Yf:[`GtZ?aLcDmqrYeJZ-k8#G#8n!F&"n='LGH3IW-4o@5fr+XYp.QQl03i]`nX@;E2p!!WOBHp_TXnY=@JJ62657E7o+)4n!lL>Y*pKAYOROSB?5%(9ks].57/\X1>c3fst,9RAi_//EC%3-7JnL<2QOu.UgZq9=mpo+!&hpPZf!:C=Bq@PR"Ws*4Akc[ON?QMJX[;V?"4LgPTje[R**b>b1c_S!;,U,dVt+Ei270`hlC*%\0B9Vt5HC[$7b$X0^DcJ(;Z5GM.Zr#U[e:3];;\01)tH]4%&hQXI;5ut:gNqaRMol^Z[1,GGIJK(mo.[[e&q^VEdsALh""64re9))\&k7`rKniiQ"neCXmigpZ,E%"M)SuC(s*S^hc0WpT/Q]1m.AUEJ/o2=.j#\m9UiS+rmUWEj*pU.q:lrHrg+W)'@Z!]GMHPb^Vq;e^1$s0n=P]4%su1g+-^N!?e6#kDt]SGis-"O+.Y;_?1!a=BNn;O]QQol9]adFn:DQ"S5tge.J<,`c"b,pf(mt9T;ekm>Li)qK'MZnU=PX@fP``eW1Ok)?iY*\n2%htRf)T^caiYK!d*C#dh;i2J+:6UbB#.4db9gLFk3l#N98L_6O6\@CDrPg=7m>]S6Gr:7f^0+,lT7ssGbODi6#N3Apb8]rI(Tt[55P>,*k/g9ceQ4E@QX;`RDquhZa\a/*bQP.L%O&T=IAaukEl#1>Coa\R[UNGQ6?WKJ/%-2IMR[)!\R8VZ[aeDd>Ht:9+Zfb6(#+U_7GP,L>d1==gM.,7!V@TIp5]a$P4;pf![qFTlLtb[_kIs_OcaWC40nogQ6p%>fF-`D#L6*#KaTCKfKV1u#C?5T:b4rZT8-j^!_]@Mf\:Tf7SsBPEcZ223AE>'#cC0?iQBS`U9Z7PkklbjM,GfpB/Aeh'7u5s-It[W"hIQ:o3O_d;83_"&4VA>>^m#&m8(lPX%S%N8Mimn:X0>oL&=iqbDnaClD1)&3C7@Il#,^cFP`r[U>>ISTU3f^"mmr`gZWRJ1uIqrlK(u0N@'&D?!YqKG#o!!o''^F3>KCeVrlse:S!'oICB9mgt)d\oum*f)m.(*i\P6+Hgb9rYPdVr][NF(;r^'SH#j&P\$C(Z[*rGf\R8VZ[ac.$>Ht:9+Zfe7(#+U_7GP,L>d1==gM.,#Xk6[-OIZF,MJ^>@,&Z%60%a3ZD7'Q.eBneACgnCL8QG]tje9D>6)_tOAKO[-9YcpI`$cU[-Kp2Pj\b510t_u$#40(O"oV=*`b#MqPC\GI1q[i"%#dn-1![Zb&7rRUIQ7dY^6QF9b5]>CUF##telUP2U?lGhYh,t/!I[ANI+UV9oFZQ"3[)Fuh,\j&eJQ\foqGO$<3AGOa^3!$I-IIVjm&`[:\uU<&c5b0dn]9FDIc4Ob11`PkbiFai,SOm?TnL?rpV#f,EKJL_>eb)%t*Hi]A]rBot'oGq!2;TL6"If148kpHf--`IM`"(,L=9"r8\ajbD0GXJ,.8R(rmeANigD5Jo0V$D.V@#>C^S0[N^Ck%+nTs/%-14_mXU%[PD["/\nf(>7j2F#&Gfu(#+VU@9^9M>8am"(5O&SChs0M/3GmS"LUiO5:Dn)b.r_q+W,P(M<.r\F_LuEK,>)X%)]?d;5iBg*_)&A#SYDE'j565YFhN5?Ed6"1NF."=S%<0rHT#LqL/otf"japeU@,>f`/-M4ae[NZ#o.i3"P_m\8#Cb)q/+_56$[V?On/(3jiX^&*4%,5M)YcZPYKTM`*gT"8XX[p(A[W93m12O";0IESH1GCWkm2K2)p>FG&09#gX)#ITXASE"DbgA/sso-6Xr_B%LXu5Gqck?$FR"9$'a62*+,bJ1mOqE*+9@F\0:'NXN8cT$,;1cNjlQ5c.sOj*L308o&u-k*@8qt:f@aBWL`ha(#+TWZ7TKh23a?7_mUcV%bo,0gWHb&l2fXsD++``QE[J09$5ms>EO)aD<6@dA_:%QVu$)Hin2m3XBqho?+>B'!9t>+e6*Zdoc9oobK_bNIoXt;7r1[;DEE%VFbs+\[&@EPYCP2"^!8mtF-q4`>,5)eJ6N8jn=(C<7'^#XGB)#=8lUG=[2#;sRrj[#i[Iaj)5hTb:c3utbp$au=/>AYFi(#+TWZ9r#([0j>WBm8310%a3ZD7+ZAPbCo0*V=Id9hQ.L$QTg_Qn,`plY'Vcm*ohHmIJ[?5>`53$eE.pn_prkSIFW(qb+X$M[UNIGXU$(\*S=E;JSdh:&%7`2[Zt9*Z)uYZKFkF!Coc^6[N_7IgWB]Sb1*Vsm&fSPp6tAul!4kmLQW89?1eBuYh;umV7_1#mo815"5<#meG3,qMrSb6=+\>b,B.7B%XRqkU:19c3<-[,G/[<"7_'.*D6(U>[nI&NSW;N,H4(Q%*Z"*hdn)i4F]d!PUB]6*#_*O(Klb,W"MJO;(\A;8GZ<%6U&"D:YTU<]XVC`,#(,t2KkJ]J+8sAh3'A=u>Lt\#e?MGeqt;dmp6j+nM8qi9cTTh_T7>uGgq3;!I.X\]nB!&lJ7&4s!Y4s[n4r^7e@*ds?EO1E8BYCF\R8VZ[M@PSD++^RlbKrD12JJh0sIcbYcS>gMJ^>@,(u&#?s>K+[MA$DfN'WWAT7H/WTUhjg^D&%ghE-Yk#(;19&p"Y,S2gSk.ntGM*6XpJh)94`S7>Z#OaL3:G&Uc%b0:3A/*I9"[\.g^m5Y(+SrUPUJd1$[iM,i1K&4972QH5HKqJ'BHLB"oTtpfcoBo2[3$5pDkJlG,]C*K1Gm"*;fcBk75If'9Fh/>N/HhUj%B?uk$+.kLuHgZ,t@BK`gL0%b"#Dlk,[ecaC/V7j$Jo,)OIe-GR0L$`VT44[s'f4djuG`"=q\2[V?Hiu>CB*[f"7N%r+rC8[YB7h\h3eLT_&a)^reu?gWD18@"*52L1,"0kn_KUVA"jg*1IpD*1VOV.>5_%U$o2%+NQfXE_tL?N)joN%ICYD_j=`C#*0bH_6XqjiQ\ML]RF>kN_QUl0J[T_K-dgO?sC0L>8ajagPTi:#U/NL[V?:g/(/^IX^&*4%,6YV`O6tDOEFr82$^Q)krdU!0%a3:X)2FWK793amB=+sh\UW9oCo\IF\[C,6YcS0SUuPie2&(BroI73`Bm8310%a3ZD,gZe[l/RN[M9s=F<#+tL19V+5/jrSm1.mn"l%2LDn_KSr>"95Knk>JKf=]e"[/TO'n.:$Um_06oF[XXeSEQ6)tjV;2K;e8T:CFXiotikYjB3V`A(IIGJTqo'C'eGlZIYcH4g_E*JW,58!ceI`Y>-&<^F5(.q8hJq[5+#je0&IWI3.g>uO`Eh!@m1#U(4Ah,[`a:J(uE8<*MQ[?oJQHhs*nV2n$^^nY_pB4#UP]m,2>1GmQJn:`9@?T8U.PeX5gi9W<\E$*L2Fo<@TsF2a?$Q-)@G5VF>.M](MkV>[UNIGXU$(\*S=C%Kl'7>(q,\;[ZtPl>NpeiqhM5q'EriPQ!S1J(:p_U>P:88T16sT.HROgXCibGPr7AVLdP9-"0;$q`aK^+6PCfLXpi.:?\H+F_slfrDAX(G0T%V>2Ha_30Ns2lbpn[S`D3a\84hZtXYP]>!_X7#4jM9WnbO,245,C4%PhXcT5IA!uq)Dg@LP\;,`[24k0S]GE6t1F4Dc&ffW,ZA/>LY/r,mGET&TMCR*n6j`>_*MF^T)dA7"5/,FqeaC(MkV>[eelGKWV@h,I"9UZ!gk!2MZ/".bIdth-jNu?s=MWec5UlCi)morKN?%1)B[;Z'rqQ>ToT(bJTL1>9/L\i_:6pG@3%\_](#+U&%^m,:'\HH&/%-14_mXU%[PD["Fd?H?Z)pRW?sAagJSiB7@TsF'Cb$<;5[R?r63D\]cJoj"_SpSV4JUG/7("'o%0H'J)TbXhs?JQ1DMi4q^B=`*_]-jaq>\fN.=R[UNI'`kf)-SH@QgYcZPY`!P2@"l%2(Xk&&?`O6tMK5F%<"h'\)>Ht;d'=O/6[ZtPl>M7nuDL]F4DSlB^=FI_4XR!,5Z,=V2?hVOGWCj0FWN,9HP00jY_mu1LQs7kOKul':=mUdoKml!Cd0E`RQf-rW'HFhC!&J[(E-6FAAlklDQR?3ZFW+kX-XjIK'[4eF_>/p:=NhJP:;!T55N4PMR\'Q9S88g$QgI^@Qa%W0lk=kI-YtTq+mEt4[aNp]*C8FP-NH=UBM%Hh*Z"B-r0d&=TIYCrpqHqp_B0M7qOsKT3aGDA1[;[pa.%*)%ed*Cq=u5i]B9f3?4>c2Mc9,l_'M'(;hFo?O2)k:n4EE1;r-qe^],"^rp"(inV;>I$SNTPrI"^:*\5.=\H%AH&(suF*O_4@[Zt9*I338U[Mohec^)EFM:bcP_YqS60!`WET'4$&r]Kaoj<(c:\;=g3N;&;]EuJD;u)6B>U4D%oh/uM*d=,m70qSLfPRH\ksVGeJq!=k-\;gX5./a%322o;>gP]6U62;H0E$5D$\FC:F>rhF&a6^Blbk=PdfqkF8uI(H#ki1!Rd`>lgDV&6Jcc*=4EGfac:g[rl?=-@Mk>J'pO,4.cX32o++/#F*^27e5QCX.I-mb7n/"=h"Fe)R2XJ'A_<$@VG2JmG@2qR[:dK7?Cb$<Ht:9+_2VGCb)q/gPQP/eq%\W[UNGQ2f'u\Cb&H![aJ71=eTtJs!qu8b$L-W8Al8mLQ/u3p=>^+%/!t@LQRo?`iqLH.1W&.Hl0tQ/\S/c?4So2oMXeW7MlZ?KfrF#"IR^ZT$hqF1:,i93q&(ft3+('$m-5JS.b)SiPU103q2_E8`kEm2Le/&4*k-oCfXl@9^9M>8akLo3bc76:cmJ[V@R6/(-/VX^&*4%,7e-YcS0SUr-SE2&Wh;knr&R0%a4%IVlKT:"]2lPb5R9F0SfFbG8r2jcO/Lk?DI`W.3Pbe;)!-Y)69[Ucfu1PTE?F^E7BnG6R;Nbfd'=HnDdl<,='OaA0Ng/,T$boJLkZ^Tc5ktK`10%a3ZD:L2i!I@X0En"fZET0K\E<1'Y]>q\&pBCtSonXcK9&=HY->$5YcS>gWXZ1N;Yh*^M@`*X#ht5R`O6t.fN'WWVl1#U(dQD8iqm>7if1.i3"P_mX:^loV:4i`XnmBO/qR_T0A6g:'q-C*U4e`d^+(&CN=3k$.*#=Kg%s)modj^7=Jh2NgE#HL-?.Irl3ZJplZMBg)>&g7o%&a6[A8p3Fne:+FB[bL#iQ:hNl*@0A)*6s)!q0T:pHZD-Ph"PpChMP(/QDV;fZn=V+ncEjO`Tu>*7otL62$0m3-+A?m9XN?KSD<6@dA_:%#!8EAB6J<*](#+U_7GP,L>d1==gSt]j>7j1mHc!4#>Ht;d)n)">[Zt9*[1g`8r[;[mH5tY,A#GF%B)>SS4PS'C@5B;?#Wt!N+Zg%CXn4C$/Y!Vp$9@'@JmNKjEr(7m3iEl/SeC`'HKj"7on%[!3$[2i%LH'c%c/6?/d`I^LN=77I;4h9]@nP^#U]dMZi;65,PnBg.-S:iTucV*1[n.`*e+%W.CbOti9XngQ958-ij%P(cjL;1n[W`1lEu(CSTkkdpr^dP6Eap-\WF>6j?nA$4%Wga\R8VZ[T,E*[N^Bd[XrA8[UNGQ2f'u\Cb*E3C+%Y7KFlR4YcZPYCb+M"D<6@dA_:%#JH"KHL#35_iNP!d]I`9m9E/_>*n\'dIh@D=]iXL9\fMkY*#J5ZHceUS5.-Rkm^(>`9kdLI[d!)0*jqCNQ$/^#@(Y$VsJ+"jL\A&:JrjSN:fdS"L\i:-pS]JV743R-\?$G8BrqIf7e5OuX0->HU^@:^Fnd1==gSt]j>ESd![N_MRYcZPYCb+M"D<6@dA_:%#!8EC\(Ub&%on%&"[UNGQ2f'u\Cb*E3C+&X]dms%CTp_\U^]4?LE8`o'A+O3*[L-3I0E.J.(`FEKi=;jaNNuDfV?p)K`<@r7/3JF;diPMp#qiKrRmD%7`oqZlS:NYb!$2^075#.dJKPiCP)Nqm5%&_8uGMM[+n^c?(p+%[$s5k^(kf!3h6)J0J>OA>S<>**V*pbkq]^N/N]NFV%ouO3@[/gm.52R^+Wp*jM@>;B+f+siTm\$Lj+;mt95pADlfb$%@)0'NXC$nNOJ#@9^9M>8akL42J?LFb+Bu8A/D8Z)uYZ`!tJD"l%2(XkF)i'r_RW.miM)gPTje[N]VA<\E$*L2GHFkRUF,Ont=A/FEjg*8-D*CUP=ia1Zd[kR-uEFg]qlqRM]VZ/]#[8iZn:IK`9qQm]_i2S@I.?kZVCG-F9(Kn\VgX\9IE#`:o;/pYWXes7j2ZiOaTR"(-QR0`5nA)>M>1Zg`VA:;HVt>_%*GK[gWB]Sb-8#%!4EVV&8Wl*'r_eR7i6!.i3"P_mX:^fN+e6YcZPYUdj!;1#%S&7@^Ta>d1==gT$gKcNh%>?9H(hge)0IjrT2c(;K@3I@_'B9WnTn.[SQC@$R3!r(b#%7gm@1;hjebrlem7c/50%a3ZD:MCcX[mkK>Ht;$NNfN'$JUG[0Pi6UCb*E3C+%Y7UqX(8fN+e;fN&H8D+-K&[Zq6/Q!mn)'.KQd4VCN#-.RE&GXup).;bpF;jo`CP[5M3Nk,o_12=*BpZ^:"laJ]dG3L7J3c@To`*:1j;'`$+C`C,P-@nJF5R7)ELh!D<6@dA_:%SO5lO*Vk9VF'!?5.UrfjCfN+e;fN-85E?estOZ%u3jaq>\fN*ZA?a_lMat=gM<)*eS.=0gk$fqhjQR:NUrPnLHKQi+l$L\9#-9N[R=ST#fPd$:gC]9BLF:'I6V$HBp"b#HtTRTm*rrg+fK)Tb@^BgG=3rSQ.T[O+[&O$hLNo;$Fa"hA>r]k8GZI?Wk@C2N4>\QXJnB>V)t_6u+8.mgZtCb)q/W=cR=X'f.oG)'qrJo,)Oo_Dg+k22fqiLq.[IcP::'LBoK&l$W0D"'p&qNn**&0q_/:bd[-e:!KT!]#"Ke/PTEV+rX]ElSn<0H*k^%?GH5>_5IjBClkdX%tm\'H(s.*/7iH.;3o#WQD;C7!J_aSh2cj7:5/b-C7:;[T,3DmHQ'&TY/L]K3ubVn$au=/>7n/h@9^"=8<'jU=p[N]8Z_RWBm8310%a3ZD+2P>V-\#8"#FdEqrN,)d>9$Uf13$F]##,4:.ok:3%O4cfm\RbFa_E8[YB7\A@l<[Poa+T4O4=4Jf`m+">-8W"l4i,ZdRN,3iPa'djo+Pfu'^P#l;Ug_&aZ)n0?a36[`)s0j]P%Is;GUA0Q9WdNX'gcPS2K%/g%p)>Jj!Igj'^_?Bf8A,G4$qZbut$U/t:os8UHaM>>@&'dogk`mA07qHB+/)\O0Jo0V$D.V@#KPY#JAC8=+SnoKHg1jJ%(]";`7)'jMn$!IWSgdiRqT+2k/EjRKleauF'6ML1/NoShKMH?ark97pj8(ODI!H=tgb$:DOELjq@t8@,T)012_\[WuVQ%ap$PBYcS2a^9F`lLI:6?bX[nGUX]bn_MR5H].i3"P_mUb"qpN]sdd)s#G3l.!bH(%/d9Og%"[ON9PUuG9lGECCb%i\05N/I'r_eR\fN*ZA?^f>B\fSJc+q't?TiYE7U;%&]#nICs$[TF19@0kTs/hsgVIMqcDD#JSO>>]c>=KF;:UH?#;XC4-=4qGUZ7YrM\$or;:V1'(ZOt)IZedXD%!1k&QNJ'p-8A1NZ'T,:_]VRQ"R^\Jj28Z*eFf3os7n@-b-:^[ZE8:0Cb$<AGa6P@U"s5@9YT,H_8tlUeP9%\R8VZ[M9t?(Ub(5MUVpdWl`ojbdJ^4$JW],gWHb&#hcr![]Sn)ToL;`lr&G[TUX:ulo?Wa5F<_`N87P2PTFsj\_+B$qk1?(Q'+H_[.(u4,PF!pqU,+ikeT4c?kdpk)Gji[<\>[PNlnT3PScbtnmVm$^&n7^of175.*b.21:G_.LMc.)D.V@#KPY#J;[,'($T,Y<\E$*L2BB#p4[?P8<'jU)@G5VF>.M](MkV>[N]8Z_R;5!K/Z-2Q^$rH^E^r.]*02eAV<3u%Q!ec)Gmns@Gsqsm^VY1@-d^T]fQbFa,9AM:X6jUdD3^i*tIqF_V#e;mX=O6S8ajaW=?:9P@7[XNe)'/Jo,)OEIgMc95d:8#]K.HH?c\CBh+*mrOp\Z?4lef>c++*ncI-o7Hi:ATDJURJ<>[Au!WYcUIZ_7"C#[PDYL6FJO`.me!(D:KWYIe-G)7C8'gD@:5+Z5GR*UHj\;;lq3:,jPI.P(rghs,`269$R`(\DOl;f@$SMtH.[8O"NQ7FGl-&;$j$qXSU!YI->Y1KCb*E3,%USf[N_M:fN&H8D+-K&[Zq6/Q!ml/Z@-.c&Q0iiX+nL"+rq*Hap$PBYcS2a^9F^FW=cbEoI6=YV2)WG@]q0@*"4Cb=4qH@Lc='Tm*FkgbsD-eCS/FeGO:0thDtl@r9@G[hQAAJfBs=ANAnV&n%=&kEVEQ(mC,j-?14:SI/>IBo8SghgMcG2Dn`q-?G(4t#!j+rED0jeK!4BV"7tu\R8VZ[M9t?(Ub&%28Ze:%W!ZDH*FDUYcS>gMNI[s;C*b"V`[j%Cb%he`,;Ws,3>&oZ+k,17MjVh9j_JX\$AddHOof!gXNC[CUQ0aZLpq?c7)s.6OsBM#tC$f.o4#)/ATnK'.`qaX1OaSILs:S?A2rD#=G[':$()Php>0K@<89=TlY$EFqAI?(MkV>[N_MrChdou5?7GVO)7=K[`Ob>Nmp:fkmo?j]-V5f[g9'7'f[iPZQNkhah;BHL0m+)nEn(l86!-cC3PpTTROiKJ83M"/@QT\qa-H0eC3b/3tS`h`O95[&N=MV(MkV>[N_MZfN*`D7CFX]/%-2IMR[)!\R8VZ[M9rC@uiQ,1:j^)^q&m2*nuR6)G+Wn4bZh/`X\VmTZ^;u6."AkSO30Dfg9&K$gSPChB1RPY#'>d^7a.`:[(/No0t?G.EcC/7@!ndYO;Y!Z<8$`4q+2A>k:jUQd8aja+n^J)`O95[D)9gFCb)q/EPo5*_6u+8.miM+gPTje[b>>tXk6Zj/)l;#jaq>\fN+e+GdOP@5E0Y+A`8W%cUP@.JkhuC0+QO;^G%l:$fa3Oc`*lMW4es%l/[XuW;u=PqgKFJI:na-fO+>!eqD]M];\kKADugFKE`34H+<"+S3?(^K8cn?_eq!<=6_74pVMTV!sX*Me_^[o$#^/3]$O1LPOO\'Wh@,'3A:;8pfu1:s)3Ka8(.@`qU7C%"2#uah4I?W?Jud\S=nK"Xc;Z=QTBbCoC0/ScGP-\k^>EJikr+#a5EY>bOEN2-2?OC:;TO#j$!1cdoYI'Ie"K6Zg0AojO`kIe-G)7C9ZNK&nd2tHN6Xgqm/VH.dL[B8eD[SK]NqpOg%<['ksalg"WI[.U`3?b]Th9l\+5,-6aj\uJTp(^/SF)/cB&#NK%fr]8M:N^FXUqM`#o:&ocVcbT'/Aa8]jhirIAPX^!m=O.pqEmFmg_)4F3_&BNQA(q:qM=:^DZu]%ooAN/iJO;WUCIQUlM\&^.ATnIFLp%tn=d'/*#A26kf#i[H:,1mfPQmo`[UUrGSe*jg:-S@d7*ik';*.uSh-BQ0>T_UZS7>3@Mm!P*IO[-@9^9M>8ajaWK""hAaPh&C<[372moB,aL5P^Z)tG>Cb)q/gPWLL>Ie-G)7C9ZNNEY$m?_a+bmf"Y[A&#h[UNIGXgSIN/%-2IMR[)!\R8VZ[M>bN4^.K)GB8?G7I7jIrGBP',@SX.[ET1YHWRVW1`7e5!UU(?QTaR0!=Zk:9[K\Z@Cq'Vbg?fe5*E5@eFY:#UKC3E&4%/NZ108Fp&\>&0<"bQ/=)rhRXuZ6jg#Cq5.ZtG,*MCYefg%9"gCtsTPd`Z=-ZEBeGY4j"4o)oW6;-NcX@C$2%.I/\m:^[ZFm[UX&WBm[VE;#@@L\4^,GOP'D-P#h^@'[>4\eL"J#sdnh[]"Pa#a$UFGA-b-)CTeu\(6Fh^-7oM!)ra0*4AVgB(QN5J/8rt.A6E"9VTegYk1AA?c`G[_X63nb%8GiA`$n=prl`/0&`A&IfsM'7,QB,^&BPmB_ff(`!3Vo#l__6u+8.oI=4['6ZA[M@PSD7/b=><16Y%`<"KYo=8pTTgn7a`"]:`(p+fU&.0n'O&R_7?DBn&;M92DBs*+OTorbG@UT8q.'YqBdpfXSt\fPj#/6@W`?5UAdc_lka(A(#YP:-9DOBPmb$c@9\l=^pZjjD8iqm>AZ1KAZ1K"h*h%U?jrYP5Js-kSE-,Up:5mN8RlBb#D%QU+RT,Ia1N7_X$L1(cqF@4HU$f7i3G"g1`i#NE>aKHDM^`=h)J^+[K53A+omllk`lFt8RS?J3PO#bk@]C;$mOr?XVslR(?j8t2=h@mf:4V>0TM(<(f/A47Br(Z4jT:hWcK5^:F5=`n'-ZA@A\fN)N=fZ/_1_R,95nTg"jTjo^gblIq+MYAEust2!A"u`7%"dT=inR/ek_N58=A!@/EK$nZ_DP)q.pr618QkS_F!ZVFZoTBRMC.Q\pWW>mp!s3YUJcAjcpI:q$5ICkcX338[kN$K[p@F4grIhq[bV-i\0s2oq0(:I41=d)f.e6o6c$[n5;-1t[?`7A`V'BukRm3NELl<-+rZ)uYZgD..s6Xa2]%Yei^Jo,)O-*a88:/:3)UKtX)?^Wk"9KH;ZZ,<.PC%l:PeM$n`NFa=)nAKQqmNPXC:!DX/c_nu=6bg"H\cHX2RoQ9*J4=n]O_;bA$/54@,M&X?OAU5'9N"*\GpL*[KN.V+"JX74n:m\/?4J5GBOO7"fPs)(,CeiYa]Y5gJO+U9YYK#0a!`:$/';N?DK-a(ZH65'U.3cqHFdXCf(Y"lc:Iqk[*Id(u]#QOLu>(%H60Qp[bVg;?&-BMc=/%-2IMR[)!\R8VZ[M>bTCb$lL/%-2IWhX!,Z)uYZ`!tJD"l%2(X[o"e:LP8:fLM/hFPPBS3p7,,q&).N2[`E2I2k`<$!>Jq_9@9[>ZmJIG6\?2_XnIGSR7&IS:OO_'q2W4@t,@cjXg'&<>^EM(mdTLEd%q<_%[lW\-9483Ok;H>g=t;e]]4Baj7f"g^IH5cT^8rFp?6o9YeX6oE4C%CXh4P\s/b;/(kfMS=>7+\LG%YSVF`"d_098:cF_'ZCG!/TU2:).uWFaVf-g2k_Dt^mci['Y+VOp4-pX%/aI,IVk.5F>C@Q70QpZ7N9E7[a$N)e-U@tP*sk.FoV]#Hr(>?+`^)m$M-gVI$Ms>,_LE:Q$i5$A#k&+Hr90S,brukaKf[HQ>9W,&@iHTQ@buTI#u1mEi5Zq0J[rFEF7Y7cpNOOD^70bY^O.!op6O\/:L8g#HVoZB1=kB78P>apISahTl0,Wc^KPmb$c@9\jT_7"C$[UNIGXZ@B/(#+U_7GP,L>d1==gPXJe[ZqN7(#+U_e^:V'fN)f=ieD=3Jo,)OWV!OckjIqU\H>[#@\^bR7P]+D)ibc2gR=iBj;_YOUJFc]<0WLqtI=koKL>a<$ZX\iWB;%L(>KTm@E"qT\FZ8moRFnsD[$C3#Jl]#Q]ntVPqD8),TM[Kilk]RM]IhnQ[)@GHkXPTaE)ua#d/3]Q_N+iUNEsC?_M?"c$$p9!4R1+*r1*.a[C:J`NfOt7q]C1fk8",Dna\Zp^HZ^Mc@c#.R"c.M_pe,.Vf0FBI^]RMg3!cE4>[S@Ic1[eh[%c)e83":LJ#b&7F`r6tqL;QiSWBT;P5nd$\h]ILu*f"_l$@RC0`pjo<]g3K:;WYVi1m/]U__@$=&qaU07jG7L;)8FLOZ4D9]$Fr+!*8!2(r`7HfBeb-TPhHSci,=t>oA6&=:g\bCY/A_^3o,Cdn`17m7L:C\Vg7e*T_=1fN'""gPTje[N]VA<\E$*L2B?t&)2tY`O95[FXV&V[M@PS\7&UP?s=MW'kof(O_M.a.tG=;hUXW.!O9+?V`3l`N!&9j0q9:(KmnIN7c#0LAOdF4+rm2EKZf96\2lhbj'WUjBEa.L15qr-==pL3$Vd-aXGhl$4*4st5iYYph)hAAQ_f00q*%oKs_T^FR>b3$i9+-UQaMRQ\S=`AX>onbOMkb6*DAY"O%6`Y?r%MA]*.s.W,DgJu.neoAH"duBM?1/%-2IMR[)!\R8VZ[M:0^3&Tjb`F[67r]!2/AJ":m>+ERq`J72A\RelF]a_l"@VKBj`fUeDHi)dGe08.bRXoI('h800N:/XR4X6_f@2S09[C3_'S0"&Kq`k&u*^+`PIeD5gGjOKME;tKmiVE(HiR^Rq_aB3>M^RHI;s3+jYE$HjkIuQR%ig3lO.:s9T"k9t.sU^MBmAe4-)e".Eqfc"IdAmRFRU.Fk0-8=kht(^bioL3G>+>`E8VQqH1DsQErT!]m-?Isk`Jg5`:7d(n`+8U^?VaPO2;RNcbd$/cb[?`?gsIQ2PtF1E';Ko4RJLJ@kqq$n0%a3ZD+,?RgPTje[UNH`-u:EB(#+VU@9^9M>8ajaBfp2^[M@PSD:P>aXk6Zj/)l;#jaq>\fN+eVfZ0\/PFbg-6B?(eQk8nZMY4T5Y?KRKDouLi:YBe#JpLAh9@3E"kS8.m[rNG-@1USc$p[&LiUjto>[5LiQ%aK#HE0m*;FPS&/;WCUPCqDB=()CfN\A2%Hf9-D)*q4cT)](XP+YmbMl)40<.<[i0d0=N%.,Kn*0/Ub085k_6V3\KM+S!7d?lf1]BiL6ZF@H\Y4GqLg$_:TR#P'jJ2J\fN+eVfZ,/iMJ^>@g;r#?3I9@Z9nmN([UNGQ2f'u\Cb*E3+q;FR%bXm!/%3tthG25@bI2.@Cb)q/gPWLL>Ie-G)7C8o(b#OkSU@4@=/R8Lp1RS>;0t!b118bUR!']jm6f7h@+XWC@CZC:dJs]g/m-=+6SIre_!!'1]fQA[Vl-0oF"e$/@KC4J`MO']3"*-r@_W28-Kc&?Qf+;56h5^^"X0u(33)_;BFEN9YPso2Y0a%0q2P?c[^)s5mil#oKOnS-a%m$]$*bD0?=I/VV6RIBm<[M%*V.0(ISmR5WnY!F:8VCVE_R=L$[PDYLdP1%H0&)8#`O;c_Coc^6[UNIGXb[q)Pmb$c@9\kK@1RS8gMDP`gf_hT8IgCNOr*&k;_Q1Ps_Z)2M/>R)fcgG4-^WZSQE'qujZ+a4VDVi).Dr&!gGjPjNEFg6Y](IMbEVV<$EpYVEp[&^*J,^[:p"OCnn"$L5S"57!R"oJ>>KI:)PD+"h!\968(WY^sR^S*IQ9l8=9%d0JV6%_FGk9Y3*r"6-0!/P\=7plVF=3:#^%Fl!/M\?pkU(CfUR,4+%%IlNiFX-7[r5!YrkU_ppnMo7<0#r8Hia)XJYci8dDNlK%h*jM\b#=]eNk%l#-P*U^A@,DR)p2T\gMDPaM(#+U_`O>&RfN)f=[Ml%ENkfI['jg@?")m)2$^^&>Tt0nl_Y9"`!j%p10T'p*Nf,TIc8uF4_$hJrk;?&%L&9>Wp"FXgin/rHC'eoZ9DobS*M*d[Uh$S=>(BcfX0$^aaa#h7N/H5CNdMphV&M`NT!N(LK4ppqh=OeC-qGNU*WaI^TZ_V\A`4m`St8BYpZ5g(CcY$au=/>EOYKO'pXACb*<0,+SeiMJ^>@,&Z%60%a3ZD+,@t4b@6LZ)n#\MKB2A/%-2IMR[)!\R8VZ[Mb(&5\`,)DcKF05i#'Zh/O=6S2+^f"Z,sm;8rQI[#2p1OIL[u)cGF2%Q"%4&8g`jZ3k3_$g&C\ZqiF@Bf!drR0.HLp:'k86]7bqB*BAKokd74.K"bJ[31CqVI\q4O?f-].sh6hC-6bGC9]$q>tp*^^,>YM)4XEX++O2:I.+a4q"U$Xi74mOE,)Ze^\rdDa_S!TAk(NM'd3o7A$sRqaJNZEpM2q*sk*15s'e#3B<'B`QH'S:S$,2rMr`CTtFc+'uO'"\t,<_0fi9k&QC,(_;?u#"BpMrGWWDnIgeo/6n^48Shj?g"i4I7.u\`St3>AS/(DZ_q-Q+esGu38%oeOXn8j&Mr)2%fMC0jGfisr)tjX+>IL+5.9k]N78N)NfmDA);ar_9h5,S1kIj[MY2'?@mbPqBo?SG0DnU2urooDjE;07Mi3'a`iU6G9,eeI,55Y8EnF\`c^peJ/JT&8N*:A+H,eS*a2QZhHTS^A#HMt.+F;A[C(MkV>[NZ0u5*4DtCo[f$%CR!cF4aM*gPTi:S?T,#YcS>gMDPb=5[ms&XWBG[fN+fm@9Z0:/%-14_R=L$[PDYLdP1%BYms3E$r@X[\?!)]HVTPQA$[28"G(\U^WFRh:U_D5ro@bXn8Tp*QBu):VG?.[ce[3>h3CIp0a^W@2Kq#`C6`?:o\D+IN'%,O_CD`EO)aD<6@dA_:%Z@G$2>[M@P3]jkOsYcUIf@9YT,I=l>dddF?A>d1==gPRfr4chLS4r+&=iG%9>K`;3[r!_nc1;4'q^B3.Z&q=+kMnT&*#LJ&:ZE,K+hat0UYe;VJe:e*?37PJ$c?J8=?m)rJQ;t_rCbNM-f9Yo1h[+9BtCd4cNg;r?D\fN+eVk^fNYUn^j/\Cs;Q4UuVnU4kdB%lI=M'@,Hh6fdNCC*?!,A\_&t;Gja7(=%o:"-ne-o!e\l\M7aW^8VkSE%S:bgk#`YI/o4)8a^RBc_Zh&-5=BJ1sr%D;YS;3$qAn_A2Kj'OjEC"M@%p?Ohr)i`!G[5PcGYZUsh@T<<"*S34o?\]++ltf<2cI=gH'kqmE<\E$*L2B?t#2@;)Xk6[M_dQcW$FU[`GM#qKfN*`D72jLL`Y.uq_+'c*ofH@o4c(Y`!GEslkkiA+&Ve90`)8fNX:E(^cbiF7nbfr@E+N`)RQ(DE?kF<@9+3V5d41*mV8UOVhq.X+\2Z2D`s,#+?h+h`Pj`"@>Ch4)dneigDEVh&0Dr;7TUVZeLDOYKG$F4)op)3A7SaE<$SMe^Lp$5M62UU>_Lf!rpd[UT>rRI-"[2W&'C9FcD2Wfp?b\W1075P^GJF)6S='`Cj?s4KSq2S^i]$&s@'OP+F3f7?NuU@bjnmbA\NH?/SpCY(EX(e[/N#:,%)Oc9iTE[6$/EMa7!bkAj:M*AGZ0EnAOVVset0H;/TJW"T+bDTke$PSAaS'P)2I5SrGZXh(7+M[W8Ajb3Ah!%^D/-SA.t@BV?@o5c3pf^#DDgT*V\82hs06UZnEm"XTenkr2pF"$-.^?_S6G(ph<<6>A7""-q2l_%r=E(29gRt*"cBQiGF;6a4lr3TE"QgI,rn/JVsmZm('G(Nu]6lf5JsO(S:L>^@nJ2nAV>7F3QMTF&S.%(sM40ocmaW!mgn-4XGEqbUm$=#08l(S*Rd/LdCW*Ul(H@$IecpSAXZhk]O]GeRYQ`&g1?))@fdD4)B(kVeJ#JYmE5(+CLrc`jC?[P$H07FkWB3t?QG'=b\luX,*N35GAHQ"4:A(^_*NO/k*.i3"P_mUbb!NZS/[T2-k>ES'c[V@5@$`+$]MR5H].i3"P_mUbb!NZS/[T2-k>ES'c[V@5@$`+$]MR5H].i3"P_mUbbai%(,7W6[P2:a^VRj_%5^0E>ROej\*7;&aL`",s5hlYX$lD;:9;e]%o7VhZ7h8>1j%&7ij,Y45]AC+$^H-T[SiT"=c^deslC*CV5>IoeCEbhR[Zq6/Q!ml/dU_!2c%U"'C4U6P.bIdth-jNu?s=MW'd6;+D:MnDl4c\'Sg7uZs&";@]j,L/p8^7NDI+l[@HCunN"X$1%&4("]GRgMHsmT^YZrs1pHr%4)An0bJM3I=gH'kqmE<\E$*L2B?b+bZp!gT"8XX[p(A[W93m12JI-#U*_!;VJ-Wf_=1RU@&t;>H/nc'>Q"KMo>qnK,iCU0&cU0B^YhqM>Na)=Fb0Nf;of77_T_V./%'h(L\"(G0[0fdMUV;0%a3ZD++^RKWG:1Wl_KI8B8NSEl#1>Cb%gX+_2VG<_\l>Z/kNPTc?ah&G%#4_nOPgTiITS(]86gQIQ?\$Ap\AMTL`E6=#UZaKJ5A;IW*m!VnaD_Y,O5j9AW=S$5PZ`0sE'ShO1._;f\fN*Y^Q^%(lASB#j,,?NhXW!)1cO/EaZo`(S(MkV>[N_N0fH[-'i!XiSRMU(6l[jT-o3FX@U$Ju(;0.=!$hYrss[g4GQtd[R,C4p=4geoOti=C#%T8pau0)=?aE^-&dD$23k]KcfP_;YJ0*,,ek(?7nHUV4=4V[us6F/E@6kHUTnS?@o_8)1$`9lA2t@;8LCd:Q/_m>_GCFJt-bedpZIk?s=MW'd8QiD+-uc_mX;.Cb*rMYcV07XUNsAO@I*q,,CuB>;[,'($T,Y<\E$*L2B@M,LN3I?>XeCoN1"aTI9)i_Ri.LE)t?W<6&0'Nr"lG?NKdKU&4GXTOUMuR$Rk@m'b?+k`2=N`;"8f:PE@G:OG=ur^Os7H;2b[LlOE9R6M(j*o3I+_@seF@%[4rr`m41T'eTu3`q%W^OI"7Z3JTL8+=NX8N8PkLMsqM"ccKdSc:!7_HQn8OVYdAEl#1>Cb%gj$/:?!NeVE$.bIdth-jNu?s=MW'd8QiD+-uc_mX:pCb*s%YcV07XUNsAO@BjekSQle:[Kf^(j8HsAZc@5RMC1@PeE#^/rg83_HLfYpuD]p$gb=-:WC]`*E;r'QkZENh84XRF;\p>SO.HlQkfTGfX[f1P@oSH5u6e>D_'Yo_>Y0/2d(h&n$r_1X!'TLFrDDa49S0oo'i]`VVjiApdb,/'=ZpF^\\^/pYldpHVYH*k4p7+YKr!1;e7pQ+$e_A@2&mLeXm^n&Srs6Cb*E3,,C@*XU+0)fN(_$D+-Ji[Zq6/Q!ml/dR`"kKQK%eX!Y`m+rpd?ap$PBYcS1F,`tN'ThfCGBH6:2U?aQqn]F&Q2mPYk>Nt(*-[q8a5OanDXquE9Z]C`)@3>*cI"QR^DCbYop"UDsoZYjRP%OoE^=>#kT(r/9m2#nrN2a-458B1a$\E9^,=/5?llNF_ClFiJO^5VLBmO&#J4mJ_og:C\fN*Y^'"/O#!4Go)^p[ujfN+g(@9^9M>8aja+jD;ZZKtFe]h6F:#D%lh"E@n#i&Y5bCDcp.c3nrBW;F$16$/mqDR;X>cT3Q&pSC)6He`(C:U,/:+-(7\PBQ'Z)7J65,\o*#KNI=X_ap_UpeDAl+befS>_6bC`8*XB[qtjjSmbrldok?sC0L>8aja+jItIm3leOSUgZiZ`Vpmh.O/rP@7[XNe)'/Jo,)O#L9bm6ZesR<_\9]^$p]o<"mYBeFM-@eQ]/)Qmn/okVE!#fs@F>3(eI]Y#ujOO"pOn.?E-Y@u%D)WX1%DjTA6do3rTW;5,e!`)nV-C1Ko)KjbH0;hC\b6=Y$i2?Aa\%u*@V<^oYWLWq0''?SOq:2T\($,76^&De3[4Z#Vb:\:Z`f3XFTq\Q[Mr%P3f'\b*L>7j1mj0<*ID8iqm>M2*a[Nb)KgM6+;\#rSEX-d`m#U,2JNY/]7gPTiZml]?^Zo`*)[I;n^7^9()[M9s=1_IE10+"+`R*D9CD-U<0gW9cU6k9V(+?V4Q5hI[$0%bBTQMd-Bm:6>/%:)Ht:^7a/">2cNF?OfjfU65FT[8C8!+RCJSR(r,.(ZIj/RE*>4E4>5pCpQV=p=<7+J+m=7KKhm@S5mL@*"jKsD^crMS&Tm=Bi?R3!*=hE]_Q=O4s<[p\;IC0j6[I:.q$hpXKO8iQ)IS2M5-*-f'GV0-i*:iT\3.)g!mou.4jn1,Ko"B5WacXDkm->URq-63\N#1UTrAS:7>EZ2&pn_f;GYMdk7@D76jSJP]jA`!%^&.$GUn!Gp3To$5)Mh"&5X_94e`R%Y,6!KUf.fb)7,e[%K"mI;'P]U'pC@LZZPi_ef9df2LM[D7ddXcgm17.;'bD22aYID%^GU7VoLkB8gn3lbWi84!FH("DV$D%Yg-M]LfpUfs$bj&oBUF)VDH)TI.EEW_4+L2ji4dTb('9X]<\Ur.o/*Hb%!s0bH"^"jZ@D;O?`Wa-FrPg:%H=hI9+)Xg1C*8n+OnH0CFtIVs_a:YHtOH[qrcXOLaAH,dJ>R=Pl?VUQChu?*1E9l^mIWG=.r`EDY(aZkWQ@//[*@1:.d579dSXJ[V!Lg8[PF!*?f^Mk#om)sMGo'R9YD:5#e\bb"&Fu(3q2@MX4DV_FWp64?DZ=2YeCGC4n*N<;H85)D2ngLd_?-:n;^#b_"*_mo_k61H*69]\9thc?FVg;hgFa_m-;a9K83XlL=\'$gL'.)]:7*f^\Mf_OoP:40BE03`S9s-:H-Cd4$)K,T6t!P\i:ng^6t3%/p,0.XrrYO#Q)lEHL7rZ.)nbbNdL?&YIhJak8i6!l]OAS@_\_@BIa&_=>7*^Q03q2U9/)ZW,$(I\Y-&sZkWSV$:7rsH%'EWg5<=j\q[Y^$ehUK>6+`R!e17,#Wt]AS#,7R_NGFdNSA2V]C-+k%,MF5L?fL8+XeqJKcPooO5%fUe\"WUd8Xf*1p28*T$Y:\*c4-GC=R.DVK/2DVEMas7J;UjP+TYPZtU;QQPWV-b"#4QKMH>aBZG)U!]iK%JD:g:=#qi>Km=gE[\(Im,^X`NR2DGa5TW[aLtqjbdX@Ab1W(GKf3lqC#h->_OK6Ti#f6jlDgC#N^Z:"7jm>ZDS6%Q*_9C"TSO\LUJ\[d;*+NogJjPKA?)'o;uuIU7F]A0)Lcq^0L#*B,sPZi%ujHOoL;bj9+s&r\t7bq4Nu"5Wg;,+/NNdGO\W7IJ.$F=p(LHKaF%Do(5c%r=NX4h$50)8nep,$nt4'@r4;oPi^9n1s@(?NcH4g\24Q7Ygcq9Xna0#7u+c?J%.m.(&Fb,M\uRh*X47mE?I'l=*S!"4OiWXNapR*\m<-D7JSWu5S$!.Yf:[]0aQeX4]aYU6$FBWE$![T]p<"or-_&Lj(!!(1OD,mC6BWL4-8>3.n'gc-P<\nu1g'Rgf\a^ut=`GhQ>;cZfhib-]^/V;Z%H?hTY5mGnpb:D(0+RGh,(H@>eIe[6l?7,N*=f)`/"a`"!nY[m!cR[Zck^logVptSj\to7_2Z7`j_ap#maDu)*sO>QIhFpQ:'YD6+5r7_hmGV7f.^]CgqGWoY?r?6)um9PNXZfd2g9?6cQAaFLC`:-:Hu0]I^8.2I.>lGEk2kERH>"Tg+3']F3jg[Q8irO?A#u/8[g[!\mT@tm+]RO3.4"r-k>(9Z2\N;,7HcpSTAn>SS-jt_83BPCg)BIOh[[McU!WZ=WBIheo[]0Pc$f1D$9pD@aJ/_'l?q[Zk]Z/BWJPu.EC%H="-NrfrYJ@Qt?YusJja.?TaHAd,;W6k;5%_PkN\')Ijm,'ME:A/mcZo$Y-;Wms=03iDq/Ld!:-?kN\eKD'Pn2+-TV#[;n@,skoQakm+0(CKO.;dEY:]4TI-Su^90R@Agq@c9?FhsE:S2Kf[r7>KcZck@\)(e\Rl?t&kKf.1VP[+6in11lEk"WR^A`(r;B@gO.PG-JPBZIZOE^+$b?VJ$MoD2;Yo5]gTri"/)/(N#J/*^FWZPn)g5<=j-&&e%X_+6.!!$%.g8]UpX_96=$C2C[C5oT#RS1XRViX_`YB1]`!*Bj`>e4"pg:IF4Pti`#?ZM^!Scg.JDfMAY37?W(#qh81.D1Z?o@(1EVp:@`D4Gk=38`ihm)SWSl2.&J8C('m68M9K<5,!s>6C743B6q%p@OEeJ`-iF#:JW[E7qDNqm*,49_S1GmH],g*=)G]AQMCThLRE7h)d7dq^,i\hjF>maXkS'^33UGcrRO(gj@FL!!(21KhF@A[DL9kZk[E]9+#N)>KshtD$9pD9N8NDdoIt-D+.[VG:9!@]e'(D`dk^k_Y0_1F3$&$p]i30WJ,3CbSta*^Uk`.4^LsT-_J5[l\'.$)WGI#E"NqQl1ef-_*tP:1FJ2=1Ma#sZAW'JBQcmPLFO!'lq@UpIG[^kWCmuph-Y9QIOUHNXYbn+rBWE"a.fb)<6)\U9/)Z=9<0:[FS@n82#Sq!!"]#BhbD>ilL[s^<7InQ/oR*e]ZFZ8;B\!@AJ*IGT>W#S4jGJHM.1("KMS9q=`u9%2ErMZ1[-`+1tM<8:R02cAKb->7;#h6/it6Jq(XmX)J!:QYoh+$lk%+5XdGC2C9%GW[]PSXQa@KE"TSP,[\9g:/(t?m%rFa>!<<,8GG2-P/(t?m%rKi^D$9n>!/nlB#Hr+7#k0GAKX=@aEOoP)]"WLeJ;tQ:?K&]JD:7dNn1#n-:V+dI]Vpp(RAkSem%g/Ab0&sM(>bCGWN=>*a5trU6$hD=nE?gpQc5Xl'f<5Xl'f<g1`\(-NA5L.T,FM-Rc\K6,6Hl.*<2jt9$A"-tZ/*X=SL[(ei)#,OT#IafMS-j&Kc\l8Lh:j1Fe>WrRlDsen=(bPT4l.Uu*ZC-LmYo:/47:34roeY'_R$`5j1j4tJ+q_>qV[rE(h"MX2m?q2mcpo^C.Xh]_^Fl4Iu*r&a*$U,&JQeT[#*l"3S_'7X6_A_d-0&8%)V,)!cFBWjqkN%aM?1Q[HS)ihr&\2u7/c#/phiJf.T9mkes-\92h[[`:IXbG%Hg+ISjm''dCRpXOcF:p.QXqg\,]*_$,MVM=M>d!co-&DQkWVRBd8g5I!"BuN[\Bl(!!$CJcrRLgD$>uN[T\&_V15#iB@XKP_[>/&41hg\]!Sq%fIE9ZcPrjQtf83lN0*nB"JXR@L&"aq*^VnIaJQX;a?M9>#H:Sr[Ndk-RgKV4?_:s*eTf:)n",rufP/I%_g,iDd661PNKc(FE^uPa2((Us'RnV.WQBq9EVn;pk^.P?9AI_Po4BkBb8Coq>skjk2f9H^3@NbfRcn@WU1D:nB\Y:XW:N't^e6].IlMEoSa1b1b5[As.d#gg(S6b-]_[6Xj6Q$l4+DKHdT3^i+sLL68mBQtmt\?g<@;W@-aXU4+sL&@D)HgX+5.''S[?q;/@qq`!!&[CnAlc:i4IF]nQkR[F>&^EZe:kmjU*c,ai\EX+6LF1Y/-]iX=>K%9rJVsZR7QS68m-+m!Q2)Y^L1K5@-6,'p`L2PtDp^Rjq"UO"1nkA1j@l"jiNnGmGH"aSp&e9pU\#aHq;[dZkWQ@5f5om/KqJ9XBoS@3MEPT!!&[:lPU's:kW/(t=B&J5g.D7,&FLg!$89AZ'(@7k(u&)oaH5S!>pNoZMG;[`G(*^0(pSjQ,P]"7kC/2L4=p^O6!fB)2'T]AuWN>3*72pW@>7ccBajh(>7GmM!-TcRjG2lR@,Fc@DG/k%1\t[cX2RXK@1qp6L(qG.-4j]j7`qST"2q_7p-=K+A%;MRGi>6sPr(4e8m^WuVca&_F&^`]n[Y8`%(-;][sgKfj\N9BhFS?,%S13a1XVBDtX%O[&g9%XI0q=kRopY\ZLC6s_p(7Lo'6aNh6+nndo;H0;6/o&@2ll&E@foZEc4[^+`HYE/1q`NNh<]eR'9cT0\83[S(V[`L[Z:L?K-LkrPhBrh&&>N)$8[[LQ-FU,C-Q=,3hh=e5rm-0V,"$L\#^\^lSS(%dl+X/+>rTN_d>FjOdkDoZ"VA^T1)+K7SUAFue(,.=I,H_N4:r\Eq.I^DuM,P[f@%Ek&=540Iq\l3]Tpj\Tm-*$+7+51Iu2?9-Ni-1;?R8Dc;Wdk4,p3p#"%]=^@)G.>#Vm(aW%g=IqF&%7`Dm?/^mI:`;1jletE*9q7)@fp#Bjr[$nOcTE&O,rp)J"?mlg>l*)2mU3YNr4[jWSmGW>N#-mN&XTQ/@6./KntPpHDRaDQF=Xf.;_LX+X/,idR[SB/T$2W;VJ.N[MfHuK%n-;i*apZH;b;J?PX^Zr]>&A/amVB?1%CIfPmH&*pAphrU]\4kN0cmO7Y?p/Vo4=LkrS+*:!!U?0u"BT*8!qIgC3#:(PC$o>JK)KV>M].mucn7)Ur9D+.YP+sJ3Tio4h9[d"=i"rDp06#Y@\g"5%0s520%6$e7)gGc:XJ,JPljJO*eOFR#6Ij8c?A?\7B0A%:)4WG]l'*jF/`_f*-d8l'ZLkpk&=6:=407)[(!J8I.Z$j<]Kp#&frg%L^')XOSMDor"H%QQGs0@SBsJ#$Ft1%pOgRcT9*f#`dG6S_ra*>&kq&J8*&Bj3_>]GYMn4qF/)NY1H2K>e-a>L?K-LkpkCCL5_P[R*AM6q"u4]B7kJ&7g@t_-kV%g^;=1h&Wu$gM1i7:Cd&?9A_MWf-u,odp$']^;W[_Hn.TQ6q"uDCYDf.K(jnY"#%@UoPfaK:E1o\(e9QALUNqZ&.oKd&_EDW'lAY\LkpkCMmm][.N=^lb=%1giLB_O4;"+(RO4ns423"VSgNX09O6c80I(ic-,=I_(*)VU(W!iT`KgAjL@i;*OPDpVOl'`]ch`\mfn/%GQYe/PbpjgN;8'7j4?o\V`J$Z613K4Da3^uraf>PSfGbCNIXDhHpMrt>5ZpugS%z!3kI-5jff,#ONSPHXQ<9^'F\`!=+4?_%GY-E+h3o*$``B#E'88;+"R8_Oz!*5V3AF;aqL[cGJK)KQ5L$F(d)X$31&+!2/2AX_93bz=?NrjQ#2csr3qX`X2WIo+Qs7%#1iqV0_/an..FDg57.5ibO*-3?urP$GTQp#b'OH&4sBu?'Y+,Be/KI'HdM1h]Ee-Ol?i$h*,m#[)&s76$AXAb__L.5ENhE2*&Y)/Bk:T\c?DBIa'b%#f$'TN6%1!N7qjX3.5rZ)88=r.g?HlsWEB^QRq@')`'"rL6CYD.ToPkd.ibn4tZbk4\pBIBY)mejfiCN<7]RJ@`^PFqKo`#nL>JO#&.W@#@2o\>dAi&knA1s\.n^^Ps2loK%!"A!7V7O&o)h_!73-5r;ij$4D=ICh?/*8of`(o%QG#i%#tU+KgR(Z.d)Y@V,!mjd8g6D-&c[@TN6%1!N949/(t=1('%h`!2pW;IfSaLg8]0tq)=2]7$cFh*";al8=u4Ai1%NsU:_N%$GHjp_J]E>I;h?CejfiCN<7]RJ@`^PFq61f4(u#$UXl0$X:q+ePZkWQl!6-ns:b0'T!7WU-6+^(!!#8AcrQD\-<-@`PmRBSa,.SrN#W4Q`k7>kE%mM1#QT"e5XMT6#QPbHY!2pZ:HG*A:u?nTkC!!!#L5[.5[KrJ0gG#d!u.2`*c!!!"$[8\sE:V/%bW)Z![WZ#P$z!2om7<@,!ez!*"KW=to1kXerkq7=)fOzTH74r:qrHfW-.X3*4-F\!!!!a_a7QZ+g_sa!!!!a_a7SX&(R1Dz!*Hqa\iC[_>//A`zYe8Js3?!TT^Wul[!!!#'][XMQzzzzzzzzz!!!",2=^\I3#`Xb~> +endstream +endobj +45 0 obj +<< /Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595 842 ] +/Resources 3 0 R +/Contents 42 0 R +/Annots 46 0 R +>> +endobj +46 0 obj +[ +47 0 R +] +endobj +47 0 obj +<< /Type /Annot +/Subtype /Link +/Rect [ 237.049 290.829 276.541 281.829 ] +/C [ 0 0 0 ] +/Border [ 0 0 0 ] +/A << /URI (../download/kabeja-latest-src.zip) +/S /URI >> +/H /I +>> +endobj +48 0 obj +<< /Length 1333 /Filter [ /ASCII85Decode /FlateDecode ] + >> +stream +GasaohijNf&:X@\U&+"+'?^II6Y(5.8THsig6m+FFZ]!_qOk`X,6s#KS?pu7s5!n^8D(WZ5Ch=sX5-RDG5(rYn_JBYpO_=Z_Lp;,CU7D$-8\&_bHOcijA?.D;2A6e4p"[koW\+9nUA)Pht`(:K!rdQJ--#gpc40+]t$M7k;d3[TKfVZR8oMchHZhjd.[>M<NNCYf>.HhJ>d&;piVU9u=XI9(QLc\2e@Y8gB'3GoSk<=FS)s("\E\.HSE-]1DjI\(nIpB`T/_jB/7j[GLC?@bJ%p&Sq/*GUHnO"uETiYF`5^<*m2#^_s'^/E_X.mTYt$CG>mc=4"qoh#>T[ISH)VEZ(P_-..oV(O8%CQL,fFS(X]?80GQ$c`FnqZ_WCsTXie,B\aH8.Y8Lo$3lAXoZ56e"Z=*aLMX8uJ5.b!#:qbnfhqs1GBhMWS1a)1H][d&qB:n3AJ'?Z5lP13ioN_q1hZr[cDK7E2')6;fiB;OaBR`db_$Z.d_jBf].C1C"tCI3HZRla_R$!RKrg?fP&4jZCs4(c8i%E@%m5:Tr#lk`bk#*4U`OJp!'85:eP$+JpZ8b!&CB4ojs>RP9O;@c^gFnbW8#_8MN?k_ML!`t$/6NW*r<8=#VEB#TS#Q+r$$>i\2F8IdN;cbTn.jN@DRSKj/"?[.q&g7kh;CUj2t\@<^>e3M4=luMA_#l,&ZO85jr?aR^TH#AQn[l-f!m@l4f3a;[R*U[hG?pe5k%k6UU(?1pHYX^#sP[m5[!UBJ8cMo#&(DlbB%ee,'(/OTX;!.:i.XR6e*jK1YU/[1+7q`"3D$r`"a&QofK%L"7;:t(IN5_$>*Tk(T]':( +endstream +endobj +49 0 obj +<< /Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595 842 ] +/Resources 3 0 R +/Contents 48 0 R +/Annots 50 0 R +>> +endobj +50 0 obj +[ +51 0 R +] +endobj +51 0 obj +<< /Type /Annot +/Subtype /Link +/Rect [ 350.272 296.655 382.258 287.655 ] +/C [ 0 0 0 ] +/Border [ 0 0 0 ] +/A << /URI (http://www.inkscape.org) +/S /URI >> +/H /I +>> +endobj +52 0 obj +<< /Length 1570 /Filter [ /ASCII85Decode /FlateDecode ] + >> +stream +Gat=+968iG&AII3E&9`11DNR`":8\[(WVRtBps4F1l&(98:i,,'VY*Va1q(@":9UABt;aGii]MDD]dV;>YR^Ie'Yr"i=,N=p*(+n_O.eQOkAck*J`U>_u#D;kkcbI@H;e.B2ZM:'JHofAr$JKHL:I8j5?;tLp>S;A`iqN\!:[:ohiL,*`3[dc6s&e*-coAAcHuLS!FS[0ObX7KR&e)TD6nHiI;h%N,,qfCMO3Rn5]Jnm`#,_oWHa.O8\6V3kDg)oH4g8j8Rs/"?dLZZ79"\WeUAV<.(Ah##-]IKBYrM]2ZpbsRNNJ2NgG<4`rC!_/q5MR]RL)LA)4fXc0LC,ICpr[d4&LU]m\LLMEMEmgX'46r'2<3G.R]ci(P2;Hq3Q,RRjih+IHc*MK@7FUGAkZ=nQS7AK\4cqsf770r?A9Tgtj`n^d^r6C9(:HQn[u`jeN!eA@S3,1l*/99iVJn2TUB3D3OgUW1L/?Diup%,2FsB;)>Q+XbI/..^tUQ$0+rdDFC9"3'64ejRICr%6Z[`Ii`FO$l>d2Bl@0[cmj4bj8o(b=/E$QW#*DicelBWPPZOT\arV:Y"Hu5eC:gA6pUg3T85D.laXH@LN,OUdU)pKElqa=J$q.lrBkl3=?8dELXBbg$VgG!k_FnW-m:?b9,(r`iibj&8Q%"fE%;]P7Bp0h]7H%).ThL,[J.D/R:UMA,c$bX5Ash5)LdOOO3CLh$?qdDaI8;ON)?*L-[(MgrlNQDgO?g'd%hP8E1B\0%a463mNJM>jiOY'3faM*)ra-k>LAV=^H:&]N*\m#P$d,NdeU.rh%>.6ACk3fdSn8_%Uoo/WO-*/Tt%%1aH@iML!q)-[NrC\J)M%H`QG[+kCeAg"Z[KHC;sXk7j%hI5q+oYo&m6aJ'5g?*W's1=&B!a44bi%uj$@'@+IU,$lVi(s[=PQOG^7Ig6b+<_?6-[$[me(VOcdWQRI3&_)Q2ujt(qHiBQ)sG1Va/SN&)6)qIEP+h'[NA[sA0SL/Q5S-*;+0m)N$8_)8!0QX*j-L&\tL;/B;$PksWcILY6i(h*2q]`Nue%/DZg-urG!pJ;Ld5^da'o[28=(/U7KgFeFVQJFJ?A8&D/aPe&Y"G"#&5ldWHlfp-l1d4GpNf6$f>ekn:nOJ=8QBY7-YE,Q!$ub"`W~> +endstream +endobj +53 0 obj +<> +stream +Gb"-VfkXR]s$-#!5N$C^HI[p[GgQnm+G_.l'G6H?,!dc;Tb>=:<)QqMdCRgR7ZG$f[GN^bo6sD_),1d2RPq>s%qs')B?p'3b;84LqB)VB%Yqs\E&aB%KY(7QiGQWnE&\gILVr(iq@`3sh:'PAW$"oJTFsPuJr3%k4]t`[#6#WFgoWOU%Yqs\E&\h4?c(X!pMdV$E&\gILVr(i3.2*WX&l/OG?<1!5LLWCdRp1I[%oQK/!JP380f>;(%I*eMmS>JE]BS?Od<(rkW.XA3.iN)r8DT!D!7Ua0&u35ShB^#ih,K9'a1NF<$J8A:sks$6"QiFG@5F"ibl`o%-6oc%>Vjs:uUFFLGN>Uh28fZLVnCin?i^\_td-fit$o$@)Lg#pMSNJ8k%''ZpeZ980WKp>2`1"occ7;eKT3+W^Q8o31PP^gKF@!F2[$V##"ad_r2$Vcp^$%`m]W)?0]nX5Lfca#ZM\?6r:"YU-[>)0-uOg'mD/c4J?AlgJYHUrJH,5i6&Xf)F9>.p1Ff0q)?'s/W=Qo?M[HOFmY,5=D-23D"D]V^Yk"RkCX6.fqO@\hc3ra:Oph44^QJME$Mu1[fPSbep)f^-($-dD.1a=r$OV92eqBltA_:0-KJhq(-n/5*c$9uFb%2t]Dnrr*@486S@,XNp9$bV`r_+/p?I3+dKabq5/_G;+#b+TGKpCa\X=XrL8U1<%<#AGP?@aEcI'DnA"<4OtTsR.@-"k*!oTBV%:2<[H:5>)NA$G`-)f.L;\PBWNatkL]=6Qm^8chW.4g#.sX=..YeHJ1%Sl9&t\a2A\oMC]Wq-?V=9bU[6j*J-?GIBsFB56!\m7qRHXLuM&([=hLWua1YjmYWet6Z3ZEp[;mVFtdY6[DX\KIt5l%O!;KlnlAk"Y/#qTX\a>T!=gr>i8]s;i0FZ)SCK/W[pi5-TJAk,KF/)eQk+Q('mD1r/eW'HX`VkbJ[rNlt7H9S*!eF[6bLf@.&C=gDE"f/pb#`:T5o4#%Tq'5)6\^2294Co6RPG^i(2qd7%OU".=+^=fN5kMu%`BC(&+_]Ono@DN7=OC7Sr)88>/^t]SMI!a"9FP?ED#mV6;OCA+p",`,L(*(r!kg+E#5,Q5L@lA^a>]UqY_>FrRbWGP5$I;+JmR[eD::Z82a3QBqVJ!3XOs;-;He8RW-S:^4/-8I>3j@nN"S5C30`Qe47Akc7I+/\aT59.sPAut:b(cXc3\3DH%Y]CWT]eoPjrOsud7Mf0_M2u)(f6H'[%?'0^HH<'0^"B!7Ak7#X^#s?"kk@4O#ZXb8IaOo+mrVVLu.^$2:*\!kJrlSGkU3l2/ic8hbX1KE?43A)2(4;O5SW:M&pii\9?aCme4$VIKrPLFTeS-rX$?i47H16%#:l^Ycfe_L[QQuCS_Ab.MFLU_(M*SHk6eEGm&J38)WRB;>@9U.I=$_#.s:N?uMV%AEs=Gg3XWj:7)H3QduTX\eV87KW59B&ZR4lgj$foMS%ESR(/J-m0B%=HSb>+S,NMfP(!kBm!n^-L/osKph$SpSWC[tS?_fG%_5e`\)M;ucVFD`O"H"Rm)_V1i!b.NT:!5*G:W)^K4f]&gQD2^9UreaqQ`iqJQ#.TL0"#_H@J;_QT9H"hJpG,=^iu9/5tC)OR'L*M'^`#Vl+_urs7\4kh!b)OY7(R>UphTC_-;?kH`mY?(Anun=C5AQ]W5rDILf+6Ur1CY*b]us(OWuq&df*Q@FkE9R!G>>M@Oo?rdd+t\$$Z]*GC/amcuR;p_P@6f*5.afhcWaJQW63@+Q\8'Pst)g&(6SWHoG>%Q-ViT`BJH:PQj#n&*AA:-cY07[U_>!)*@)!uhcCK)B!D_t4$h'HBrCE)./6D,I"rO;DLMBRtI+gL8q&C)AgD/^3)#l8i#LL&5(ZHc,?tJQCBO0,3hm(Ku0QI@q$]*0=U[r\,&SDhFG_gS*Pe?gtTib[/(%)a#sE\M"3n>G&cqUOHQssm&H.92.9Cn%J]/u_aB`rl-8,/t(*&CNZBI1OnuAjc"r2S-(7oX`*=ouRn+OQ,mg_VQi@kt:nA<;/!@:7:iBUBK(8%a^-)YVTZfqe?hWomAEf8k[#X-A%*nX53?r?Ti1.(Ye$4Bk$&,S&(mT'GJnri[nJDGhWU)E:?97qH=EOXqF`>E+R'6btpA23'B,dq_g((#2X5L$=V,/+\!lo'YnAhAPE9>/WaPV(AVJ`SlJfXS.J,=Y-HhIM1:Fq#84q26N%q4M'.kkehQ`t;p9t6p?^n4V$Yl8SN*,Ptur*M(mnTkYILD$iUfF?J[_[!q]%`#6*c#B@^L4X9o@EPd&aP.rU#9SMUZ2_8S]DO?oB0C(@DF)+!q_3H-(\5&e6GZFKe=UJ`gEdgitCP;g5[ccj=c%[g86M\c]!2KW59B&ZR3X=K')5WSqa6h23r\!HGU.DT*H&mgjUmmT/,F(h81'G:W)^N%t&*E46`bh28qiR%@h*&Q(qY,54Mq9j%h6>8gr8cZ`g=-UZjB6\`+V1ZVIO=*u"-DlAD1)t(W=ZJ(o$f*JcN9i#?p?0d42TCh^&.mAmJ3Uc`0lV>LFnm)6CI.>DjWCuqDYdeQ_IhSMgk4-%'@7f7eStEPN2/MmZfqb12_L\I'KpoEm(V;o^"5uQp8bo:^!n("Jgh!iVSnp@H?'GaIQW?3V/QQNmj>'e@7VS8T[;eWfrONYn"ck%m]A$f4!n,M;W[W*6(atLVg?l0Q$2gB`%*KaSdS1-;@hUgQ#Tp5:UQepWJ&!SjN`G#`BQYZ&cq1;F')VS%6bji%b)kU6(8U?4)KEp=E=ltQ8QJ1p$M70*9(:O+IZ,-$ie:Flbf:q#08gmhfD-FU%P#q=rSA'G@Mp5*N4Z(F8*TAftTh%a^1@IF9bKE\fXBWrX,:DFH%b2kaJt"7M]ir&VW;Sme4=JC>'/"EpsnST=GV)c.iQA^Fk/$1Og&2\-dDqe7F!"acSl7ne[7T[0q^(mY'SJ9ou]T&j@1;!#n@U'0.[c7>.ZGPnC#D<*6*9:oWDk`SG9Z:&I9fQ/&Lu_9h1Z`SHE`'mH\ZF&X6#kI?#f$'C"oIqEA6\)M;Eh.lHGmfVrRakc5&$n^mJgo\(jEOQi?8+cn,Nr/R@&:%sfB8.1GX$P+7Sr(g<):OcX*KdQ3I6$k8O\o$a@D\=6aP!FWDXj@g^EF[,FJ"iqP>Tf\_t]Be(q7&t[A=qaD\b5g]q+::oMUV:Q63pIVZAldBR[7"UR-9*-ddlacd)i`YqJ$o^k>FbgeF&1oB7jK.p<,:o8CDRGQntQK(.=G&dY9S6Ue72O$;#h9PRUOY,H]YSJ%W]bXU$:5jrpisC4FIR3o"K`Z5OO-mj6'7GUE";H.U63H_Y?ib_?\a7(hm>'*HrX-2)b9:Nd;A_?*%?-ji'1U7""/G&X#,;NL^mOr<@/,[F@I/RYpu8oFY+c(RC>NA91%,)NS%SthTDLF'pi[`iB(c%.?sMYSQr(:57M]in&Tdr%*tQshm\\b.l.DE.;WK3f6R(\^W-V8XTmB%ZKdmLr)QGgQXghT?J!C$r[('?5%sKPl(';=.S,OSTbZi_jHa&&M7&3EPf!2;Nksd6f3uPEM_MF.-KGLI/?+/id`\df[4m&.)uQJC-Y$u^q/UO$9\`SV;`7WBdG>)Z51eTg/ZsNHY;9g0'9)b\+FH(a,8BOKn%3lB)M$]?ZRP3kmd41sfFLCU>%,_UAgfe"RWG,6jrS>j_V]+dWstC^\]X,1o09f_Is70=fY=JXf^T0PT>haBNj#-B^6Q+`C?aI'rMHjK1Q5&hi?!G>6b0)^_]%#ntorKtOgrS/(->Z1Kg4Y.b#q9jZL1aBb??VT?J15&2@:JI9aB>;&R'>R0j=WY''2'f[@TuMQV,q)'kr#-1(bj!r!BW$.&G_"#6gLj$c7-F0\SEh8eBKp[;X$3_>?q`,;tHGuiB0db("SV]edCE5af@&fh5&R9Y-NtI>C$d"j`bRNGJ*rX,t*X2G@A(*/9LP)SQq8&_S=J<.q7VPnC#D<*6*9:oWDk`SKe]:<]W!pH5gm>B..3DT1Gsh``ce&G_"#6gLj$k&//oMS%Esg#)U)nt(UPG:W)^go\(jrS&^^'-a%[H"anA`8%I!H+,Os]HT3WQUDVgYQVh?%8%lPZ5JFZOapj++bZVO+I%>_MeY\-OR.X^"PJfJM1Ln_*__o:-!j*H?.glbN!MsT$kt'!YPRm_e4:3uq,]DRWfmEOkfZK//+fND1CCfI=4XJ$;Y7OY'%$#5qlqo_\$Bh\1@$t!SmD?;"K!(*=so6THt3^G&.H;/h%]i;#5rQ'ZYcdAO8B95`jX$YSi"bl$sOFJeX&m:H'HTfFWp$+@dXf0F\<@(=9-T&P$ftO;9im-\2cEh1"?)T9VqP87iKF1Br`#!m0j5^QARH&qPRE!r[e**QOFO79pE*7LV)*plrGhQ?,Rsc/Q*atGj,i;D$&$;BRq4@eIMsZ##"JPp;Gbi+`9l54\a'rTeC=taZcBNLmqhoT%K,eOL,`n=;(6ecgQb'lnL:)VW7dS8MC)nWe\Ae"455(d5j*101>IU]\,EJJJO%Y+eTPk1VuBjs!'$m$ii"Q*%_/Y2.hLa-9R)'5SMU'[!K,f)pm002pAB!oP0%&<`mt;+5Z-@@+&'(.8k]V94D>K.ST]KS'id'Sm\HfLcuY[coPQ;+1LA(]aD(2^+!V?AN8YYgQaUMf-V/)(Ja7!,UIApj/TI87l]eP"QOSSg%>T/5615f0Ir!0[e^PMlA.5ks<-=KYc5+/t,AL"97G%K/#7ifif4$?%!aljhVDEW@7?O[I5)0mQ4)*f10MOe:VWMpO$E54di/WF6Ci%=X&bm2N&OfU$=pTK^&jY(90(DXghST\*D.!F1:.HohKJ8ibl`kMD=fjE4=hE`SHE`c/Hf\^9"p4#a?Z6C<#%]>BgL,=!74BM-7E;!V'+u:(qNE]#"+Xu@VK5HB:qmIk()@@#.C4W&e9GS5,!2BSdeV;9FWO?JQL*;#j;`85qfn1S]+B+)al1@m&P5S![BjuIctqQ*N/"(ljDl9ag7[s;#$U5=NZ2OD0!BK]!3+/j2kZ5:'!%cAFGehhB?tk):A/Wg**U(tIQ4B3qJ.dr/$FYNCdg1[H!'7p0/%Y06AK"aB=0._E\=6CF?)k%6ZHELT%00$I+Y_B;gVj^ZoDFW'esd[ahVZ8b*4>d&M;Ru?l[qmdVZG/JM0WbDm\+3m!Ji/\f81uKfBMC(AW'3tIZXNTYE*YPSg'&!#kegp_r->tbR3OXJf,a?75g#C&>AATAVB=T'c-4t?E"=PgRV33#"K&PXTZG$K.uYucesl_^VYfQLOlSL@&C,b]-tB/3.(!7UnS&]9c5.$(sX3"""YbV&iWWtdjam7h_2Vt[SOD2kqGq:gI$SK[kr%='++8C25$quY\$j2roAH>^>'&YWD>,.[n39*6L("]Ga#E8pBU@-]R-V?4=AKHH)d"%*M`6g\1+AM;EiR&V5:71bAnWBlpKbtPWdjuB_,f>&2t7tIEcTLsZpKC(qI:,e5%/]D;5_S0'D!Tr54?ub_Gcrb>o8lmQuNgKu,e/^[\2#KNVqC*8]%qp;-M@WC355jL:e*p)Jf5UK82)(:<=DA[dO_OUL:qK;!P+f2`9jg^Z/3Cs8"7-FG,KgY4CBT)I:inqm-=;!4m.TtZ"5T8`2;Mp,=B\T*.Vquht'*tGq&V<]hL$^?M;;TmqC_)Ve8f\b>Q!fM0f_hs6dhoC:*KW)GELKH]bY];:N[3mDR]M2q"mjTGc44^B..3DT1Fh07a(D'6CYBU"01"\Qa'_ibl`kMRsUI/+-HnXghU*"n81r!9S1<6]8QVDn'#bqeifX8MSSg2-kdsZ3N5>%jOOP#?p`*BB00fSPAEN_hoaui8]k_JoIA'es3Cgm@-&Mm$S#bK`"*%Qh1u-4l*-LW$)\!2KU?H&"W!);foD1LmH?br+,,Cigc.=5;4Ba5sFC29u)RX:<=[Gib8Yi&_fpg"K]<8E/pM[JFYSt.QHdR:TamNel;^)4M"NBkZNG0FVJr+6.<.R+D"82@fTpdp3B5hb"8NNIoJnB&]m_t9p,_!bugokRXFekK^@SU/H>4D8T3KsESZ@E2._JaO)Cq4Z>SaR)7!;34!Gk\tkH;E:O+KjeT02#(\Ff._+/=I>I3*gSB1"tAbe"+,4mNRa)E$j$2Ul5-WBr&n,YVkjm3DH[9X:*'ES!'bDT!7Rip"a"=iEp4bb3qQ@t?T.YFN:^\)Qd!GaBL#I6UA(@*T(Z/*baCRSG5)[a&m?@g??f"fZt&&L7]VaKFE!h_^NoSLI>A,90G)*\V6cgmeZ^oX2Qm?['<[7<@FO:HjN%]=24lqDE6aO*s:L8e8DCZM-Z)(h;nQTjQ+](!_K972C]DMa<<2F)tk.Cq._ZYR[=2rhgZ%+`:_$'p;?_a,sZ&&X1X9CF(PH+6U%1+LO]>0&^2Zu)RaS="AqMfg#!-?a9-b@gOgF<_j1bt^jPs:rKibQ&#d3Bh7=)38ln:BlK,7"hej8mFpsm'Ei6II5D(?jr59-_oRtXJY#)urAt6I^!h+$K'gq.?;P!U(DJk0oN_>na8^g_$0,F0r4,)CK@W0P.9b@W\=Z2ocj4t`-Xr#d?a9seDudTh1C?%D?OKKI%j-YTPB\JK$<3[3HZeB:pmX4D"a]fejspbVK?_mD%E=>F"lITWKPd40_stXZ_hd9D"9"ger9O`_(%pt,fs#qM$D9R2#ML;IH]a!i^4T8/$]PTQi+[+ah7Ihq;:/Vc55]J([Wis[X]YtNNuS.g%7BhTp--P7@uS)Ogo\(jEOXqF`SHE`'mD1J(h;q"EOXqF`SHE`'mD1rjnQ)GG?ZoTh#hu@;oek;\u1;^(#99e'Ap"-%99m@6dCAT+MV0UQa2t-OBe78LU)''5mmL_E7PHM[!iJ2r6Pm4UIU;o?aam-"nRYfmqDupq8,.rFTn_J<8P+j<3gCH/I/kHW4f#Cmbb'u_V$_QaeJ6TT&i_"5?"_kp&Z-am4J"(aoTl>+C)I%#3H[:^sCcd_k2_X^_\YB1OLW)2[AD/4(N7q4kM6kJSiKtlcu,Qp)Wu9D:96C('2t$57[Yse##fn9R.%n5RFu7OicS>pVZ13L&m9?3Y9^5"Vg#n"hLgm-N7TR-6$3],Df_6LoTiJ6D:(cu=DA65d4*4:HZAZLC))Vp$;SajqG@o0UG'hk#N)X5So[c2p9HTbml^U"]2L.uID?(e*ULOF$4L>0Q%?3`c7"5%o"6G>q9V06g:+Cpd;Hr%:jA(Zl"m&TF'-?k3*FmY6?N1%,!.p(<;[<&G.l3PTD2Xe5.Y`N$-J`B^'rI9A&,)Zn2?][35@8+F>)?#%V?'&[aqV(QF`b^BNie&,`"gTNg8.cZH#0$G1!;W+"[<3t2gK+3E+9MSC%9?lK7'l@h9lrDX65!Zgpm7L0Wm">kGRLBjK)'s5C?"'RT$OS[.UgV6.W0'm?T9+:m'9MK]Xi2=nYl9V(3VPWMB..3DT1Fh]+nh71%t=N>B..3DT1Fh]+oN?mT,9$`n9&+DUj*C>./Mb,U*Gk^.'dX9q_@J61WMk\@iLH5T@e97Sp`,+F._(BpWHjsJ=>9WU3hM.VL`1981Iql2*_JQ]RV([))=Q).D[FKdZ[=aUUOR$B!D.#pfe_e`+^Z?MM^':8C<,Xpe_.Ko]hT-H4^Gn88DZDSK2"W2>kZ_N]qbfM+k0g#iUl'pU'6u/ZOo"RVlg7C)k#S2#l`s)0LP4=C9%NWEB&b.CF^JDME$JZ!O@2qWG53Bdm_))KeNZ"Tkh#JOU#a6,cb-0sr%cZP5X'#?hJgE5@k;5l2\;+WXIl*F%;>edAlQW21ErV*NL8T`&0j2ZYKH/LbPcm(lIQ4'J9hk^D1MD?6k,g'_`)(%blY./jF44`s"_WqdU,Qe>c*0ui&_I1[!6/+-HnXghST\)M;Eh23r,(jfcJXghST\)M;Eh28fZG:UZMA*iT&\*CY2rNLMiR&0qU8K1QI'9[>C&oejOj)J-E$6@6E/)a)HUQA/0Jdn-7P&Z;U&jS+HU,F9l(3Cm>kXZPP8njA$3hctW@N$MUQ:lUO11`a$l+iKn*0QjJ7,nV"isCO^@ZX2NTd+7XN[qdaHAZ:USu.j(7I.8js!h^j^5Up=NVI7*'=;r9aQ],(oR<0Pd[pLM0@N#6MG]U,pad<10GgmId5VcpZNo5?h]lPrH#W=e9kg5Gi+eDgp:=]M*'/kp+CHWVj[#?N'ek"!3JpU?c8]d,SR?)J.t5)V>jtjB..3DY:HJ>J9hgfU)R;VPQVtOs(Ff^bKCSoIr[,_30H_3*$l4gL]%NcqgBJ#]/7,g0ofiI\<#O;$@@q!mB$-ZqS;Vfa9^!m]n^+(p:C:MAe*'ic6"X,)-SI9*NKGJaH"TD:scoPGu.3qWT=XAH1``DqH$*=)nh;*eL>m60.-^mUBoo32Qb!<>fjWLt[_/$1:S_1CT;GJo/%L>631YJRqF23%ERHdR-6cS[^3!ZrO>)"(HupO#s(Dg-LPI5)>X.QQ?<6)\L9^&n[l7VZD:?%Kp\V9r?QaL7+;4jQb,uIF0p$.]jaML$:HHT9J$\+Ds4";5aSE$K;#ndL'g\%ds'3A(o/tl@V-0F6Nt@56StZ,ge_7e$C7fF@k#d.?,j.$5_gB6h]52g1HeB:k`WqBA;JnS7+4fb-"7%OgQ7`:0eAu38CTE2[_1O#)FW%Y]F0/V!6r/nb:Z_EQmmYt8.a1*$rK@qg:M3#!a:B4H_kT$&2daZV$l^"3G*qLQK"W^A#V_GT=2&)9+Wn9"qac=a&Kl1-&=TjLrUeqXYA*f`d7I\0,_>C/2IPD>6=!LEUT`WAjBsAM1%Bra[!IjDQ-,F4/7a-'CGUFNGL,Kt(uMV1g&W8?RaMn[JV5*73mL6AJ/oT[@/B[H]_l&+l$!L*16p@%&"0FI0*76*io)Tke&6hl9=]*Ell;!nu&c*(PcMW`2`>pZWhg\HH"4j^sLNA/^KYq6&5mph$db"s4S9$h#45[Pj)6d$,!lr6X41p`TVcK%XS:5IR>6H!0UR4H;$qmcMu[uo@)bGX2,?Z`6BrD\$jl]&`4p=%4r\Qa'_ibl`kMRsUIX4Qeqgo\(jEOXqF`SIQ_\6BClgo\(jEOXqF`SIO!mT.$i1>K"A>B..3DT1G3n$lR2.bq0&h5utW"-o#4bG33Qf.W`s:MVOakqd%?L`LI5J,9h['mCKc/A-&]O"ZO,j;D0VL`;.d&I<.d[bP0YA+6UW;p4Gd31Gqfm@/^6%Kqc3(pK2IXOUCYO,@F7gCL,J_QIAiT?+ME:%BD>eY;$1c5E@W!T?`#C:$t^DWIYmmCT;X1k8GdUNrhLsZP!9pbMFlWI2S\.OB!G)\$"%bY]i8lf1u>abuT0#,BVU%:_L3k7n\KLT-2;/\b_'O[:\;oh-s]V;fF/ZB)FIf9'Vt6mAY3&*&F?oU1j`eU!l]=]oWtBN,!n[_rRXkR,S=Cj;Uu+CTN2YZ/,2Gld?h]*<@&l-qj]-[IgPpM8F"blD98&RD`"P()N4(&7b&&ZDe2!`PC-C%ri[H6I?tC)AR%!lke$AXLimg]fWY2^)+\m6R[!ttK"H7O*:\oA;j3<8]s;,`%cg.J$qY3:1.#X_r/BQC$dWpX,ERl;t:mE-qE0@eY1L;nspi:Zr_k@o^]*Irp9(8MR7W4R0cDVr1n>UIiJp1Pgq@bL)J\^B<@U$relL[[S(B8YjfN<;j8*>sEk*/B=@_,n=5!=DmPSl(4=&lH6I-Rh3\J&W4ckbKc%f7>8HR8WDN],[p\6Es^ibl`kMRukA\6Es^ibl`kMRumGEOQhp\6Es^ibm9UG:W)^go^F(]+oN?mT/,F\6JVHGH8Q1]@@jEX!LCT6KYps9CTI?!IDI.>rpD@"a@m0nFXg9GlI'?lhOI&#nK,dK;5#hLjms@p#hlc98E?7$DF\C2EZ9U&0=&-5VfLZP6WPHEOd&%&IBF=#c87>/Ln[7T6J/=L!*ldmP?PBeL%N[S`$G%d/@X4l@[rJW&QIpHhn!h4a77YSihWA0:kKe@_eK$&[/l+[LF*,QCiopcQDiLpe_8iSidU.mJIh_;DH8lX<2pCL1a:DiPg_qT]ol%1%KAkLV,lRpb]?5HgVh)4*?PAqaC7PR`C'DZ)+Z'.?SF97_Wirr:FDW";FO7ELd*3I%@EDI$,J2^GS&uOcNJ>2$ifY)\:m+eu\ng8edF1rOnD9[:_c%\s04*I/F:=N=[@O5M/F2$pt4H)M0kC1OLIriq5[>2[!X1N.m_cq`qbIm5!Mc?;uGmdMXQ5hp;Lp*pei9tmjT)h`Q\NGq?4jqs2!1l.Q.0Z%[7)_0q3c[qWd5.FPG#$(De@/5[X0QdbtQA]W0%I7k=g+?\l&qm@i1jE$!WbI2LpZc2*aH<,71=.bGmN[(bO\'nrV?LB*pb>&.VpN[YQ`lp3kq`_*Mm;=#^k)IRl`WO(WL>ku/s<`5ke0UL4:b)EAd8;$/TJ*/TgRWaun=4Gk@JSPP#Ondu9F)*N9S'Sn;I^(RmC."b;[)$82f/&XJbkj1jUs$VTP-2XO"K_0&AqrN'!,qmVO=ghp&r:TtB4Eus.1;P92<3Rr/ZH=Pa4\6Es^ibl`kMS%F)EOXqF`SHE`'mH^mj)-a,EOXqF`SHE`'mD1r+Zi?o]i0%Dp[jS)IO^'jS9:3`1>4Ngr36kH@n%aYW+qe3cJ_Ol_84F;--+^Ce1_?34WNgB\JESqM\A>@HdEA`3;>6hVaDZdE9]4-CVgCAAcM[q5_)I..^2g!7:DiN'Wb)=6%+s*Wti&U=$A!DjN*!]>&=f.\Xl,5efb1XHe`l(*>!@6XV^f->P:U_@8b#eF`ck9Ap^://`%LtaEOF4lE)c'.iY\9D@D4H[X8dl%\NY"XF;p3Em;1.:,18/SLIO-C/?k*?[e#1dYj!\0Zd6;8R5cJAC22!ZDh=o^=-@4n]aUG)(FGcB<0=*L"!jKV["l!HbR(oqAQ[Gu67U2_3bFXmV.&K._n.tOuP;k_Un$DEctd,*U\M51:O=&/kOBRr)]2Gm,&=N#ee7FmcAJ/u7OK0B,+__6@A5F-2?os!=U&1#/kDZe'k4/W7-U2gK/4$:VZAlCGFGklaPgCSH^L0>7<=%>m0u0k3EIE;=Ytm+uph:7]'$kK>NrUrcQNFB"&U*\\fg<7V8HTP,4e/RAoCM\a*ad:4;CdNnTslr]W5/K_S&k-,p4o6=4=qR-bm&=J7SWZj`E+98khI8F)4LWNI&JGp9H+^\0c5ehQ;X!YE5mc((dTK4)i?B..;M7XLH/+-HnXghU.*I"R#Nk9c+`8\nGI98PRc41p$HSdE%]6>B"XCe]!UeGr_Wr[>M@/=qo-a&&EIP4UI^`^iG)pe<*[-A\e,-.,/Nc2_r9+1>7brjnCs((Yde3ab[:8mf^TY,rc'6?ELdjJ_pI>c`OerC\,]\Y"0PW__l.Q^_VnE0^l3D$_2N/6]IfDUj*-.[U4Noal.bo,qoi&CEk,LkHpu8a/0th0qfW^,0TS84]'sGUC(JnH9mtl%DK`MP20e;eS?X)4m3Q&ChfbN3n-f'"%d[n_tFZqlPU%q?bfOhk^R/AsFFN:A:\>.P?;hl+-3Pn6lreM@-&Z]a8T3\-B5YL-9m4"hN$HmS/-Bp;$B9;k`=L%6/h)&tD-k!L5SoiTAZ`E:$7$<*VHph4D=;T4;Kan(H^*'R5$Ln:ea;#mS0mae4MuB@(jc*'/9a@l<_;c?J1+f/7J8h.r9Zqs:&V9kC"#+0Z0utm%$6_24#7p2(qMOcQ78O%U3XrblB_5gK-20W/kJcuWdmr43R**jO:^#5DWSpQ.D1AimpT?J)N0!Z\s/$HfQ$%;0QPJA'"C6R#M<;9O]3:P/8O`2E?@Om?e#K4@Fp"ha?sl!nCBDZbJ3!:=VTck21gO\d2B#t)Rk^pIAf>/1kdJHnooTV&ER:EW"OqW(3riW;4VMYfK(;jpTP2>YGi1E/YN[%^\:#*)806FWFZum0]Emekg>VnA(-$ZA&PcVMJE%A'@JuL/d&gOFj&DMP_[nP&81%:)jN02KFeh:M,ZnBa$Dul#J8Rm9^qkHGm<_r?oZQ2lViQK*KtZ'eg]SEH>_'pp-:9WK^t*@65SosDVgp_B..3DT1Fh]+oOj/DRA;>B..3DT1Fh]@D7H,6'g]XghST\)M;Eh28gE(@G5YXghST\)M;Eh*k'7)q-[2W152f5di.)]R$LrWH`m.k.qD+/CoPp7QL51m;Z([O9A!_\Q]_SQsMpu-H/k5X*=]<6H'BZ;3Y4pZ7e>,PYm4cObss!D,/Ao(Ge6fG`+8D%/?.)qM3HF6CgKrFL+gmJS*+X7*pVD4BJYO[DCs*VsjF=,lq*FtJSbpl356:U5Fjf&E#K7(.+M6W]1TLLRaTt^#MaU8F"?g`$p+=qeo1q&]AcY:E3kX/FDHTPt\G=3H)PH'GHK`^*TMtk2>4.?'8+nNR$k9:O)q^GdF=OQg2H[_:$nPQS)48Da.,1+"QIu\'QjT/<"+';iSOt)\m<\_odO(p)?O8Gk"aUOP'6+_X.(X<(2@RAG+iDt(O.%V@PH1;[^d;*$+1i/npi0[=p@hob3/V20Yp;>0C8)]ee-XcV%Sab#s++p9lJSnWUO>T"Hi\:.:8SC%)_Q9/4JK6]MpT'UsQ)b^0m'o0^F>"oATZ]#t\@;tsTI"%CXLV/Q[gIRKGlbqGHk#t5QG\PXB>CcOTG?"TDInJddj:)t"jUJi!>STUW,/l80baZA9YdWK2k^*.3QPISC(_e$6)^i"J30l1pgN-'GjP;6;@ORR?9oVHbZP:[Uf:d^7M%+td#'r>]]MFPE(%`?13:Z6-c7G,@n+#p,K\0['9&'pN5#/bH=`m%+X[VRsO4adP$gpIf=mG8?F54>Oi$nC&7\6Es^ibl`kMS%F)EOXqF`SHE`'mH^mj)-a,EOXqF`SHE`'mD1rr]\]HA$\D5TO8Z`i\jo9$F19IYHJ\@`?Y7!l>%PA=F)KYJ'Uqq>\4Opi@rb=QUCH5j%sm+$r6bm".J[*,TI2.a60`:kk7^R9lTc+1$mOK*Wl>!TILDRO:F+JVVVO5k$S$L5M^n`qBaDS4Zi'O$/7Q1.9Z)BPP'_m;5QoZ2Io%D;f.^PW!cm@1tLE8=1<3h67'c=4Y5OY6n>M6ZE$J.hjX@$_N6n*#[`J',%SR:=M/^j,`0%[fa?K]Ga8#rX;!jlr+`c@4LV*=:V2TJRaBV@]SGYH!l$F,a_[2,L$.)1!Ecs!l`@7K=Kl\#lX?rN(e3kl(qSr>7Z7aqVg(\95s]u$ru[DBNAA1oH>29G8&8&S-Rf5JKEY9R-d^mk74#ql\/,iIK["J5(T+85)+@?j?rq%ARJ%-O1k/]Z)"u)5Q:_e4RqJ;*dHTD#mn_ZKIg73+bYP1"3?JS%o:XAZ@f$`_i<4-Ls[FYoGRbi02;(lS#@&7(,$GGGm7q[Veqi6Tls5V_j`RhgS*dR<"Z)bJZ*dm`[d;aDJ4>D]$MPl&,XXM%/'FRr[&kf\R'arS6'J$ZZ(Z.cb?LAP*/Z(E_"Uu,u?/eh590E77#=N\+-#ogJ=5mKD)0'cs:W2Z9MaaZ^MPuXNc$CrgW/.f8QtWQ"7SV+!2c&otm@XFV)=d&L0q=,i4+"E72Y3ZX^F5OZ'He_PH,-.#[Y,qnI&X0$-uN*ns4MrLhBDnQ'N_$\B?99(q1rU54OV-6GICDh+@Ios?Aj&,@AG@lYD?M];!nu'fkmlp8OnR"'n(Jk(tkMdsuA+F+m8C!Es:5W\UIn;d"iig:W1M=Zgs*e&Il^`N`2/Cd"%mP;7Y^L6pANieiQ4ZcU0,0[*'RdNdW)b)sd!nZh=KtbOpqa^6LUOLX-"hh>[W66Hg<-ggCFe";A)l:c[?YMXf2f&V`fFo9Y<&hg>[+bIEc'plb-fdP\@-Epjk@kbQ#!Gjj4`e!Nbb];C9+0=58K%KD\Hs7#Q%/gfr,4;:gLSU?1Je7Qhj)n+7nP(Ij>S%CY,['ldr6S4*PKQ#7g):CY,[#q[`$/Q#]X(iqGC3@W3G$0>IFZGlAN*Lu87#Ab!s1Seo.dmcWT+(S;B=jZ2W:J'L3kps4qMK6$Foo9S%aOZX7A?>uXW!E$mQg>;p1g;*;]IptSlksE>GCH9;:4"-7o[Wd7Jk;422YfI)]ahS];9mV+8Y;75sFHbS.X;E.ScKN&9I$Z'X.H!GG87oMSW=f7#dR'p4uiMj:gON\(rC^s5ac#eRRJM0A^lAf_X@[MdiYiKL)g*&6\OYk]\V-;ge678&WH_Sfute_dh]6?[l92GiaDE`q/(#-^k2n\Zk%Vf*pVM:_ap.DAIWtr79Wk'XukDS+u*KIkTI=mG5H^TL!H"18_j0MgL>'4>pS+Zo"p;<$S'KM(&ZMtg?6D=7E;M5%\X_S[@$^N/J'GA*#EC6kJW)WI:>uJ;9W7U;68WY:=PGJ1-lJ/^?e.j@H/+XJ(7RSHdu`5I,du,Apqno2*8`d:H]q;NL"68C8+SKM/p-Tm^`?`Z#[lNZ"h;L':!s;\GNEj`2_?\`Nhq)MU,>*&PJF>-G$gMMHTD_.:2tfQUJMa&X@A^Q7Q>crq5F2`JZtYDt32Sh\8;DnI>$@J))a6Hi7f$o\^NT08\h3f*'qMi,U''4M5(p*Fer^pM(W^Y>7;3J.#PPd6FL#-gimG^2`*YjWl;SH3h_kOBhC7n]E:H\/1&_)]4VpN%u%-.hKME/JZ5#nc'aiui5P.T1Z&l7IIOE7B]d?Ef'JeZ1HuKoIdjLbs+>O6]%&Ih1_D)Hl)e$[_-*7n5oX^#)@[W66Hg1kG/>Ih1_D<9Ko[FGEB9\3%fi!<Zpi^>IdOgnb=n"B)9]hUL7LX.^"fi'<(>+\?V\4?!TN)^)NKVBV*YHS^/JLhnIj,X]RQlCLF$CF'h+%TTj$.mj.CO+s00Ydg9?`ke;p:[,OdPt7qdTQkO$u($&SS5Gr13IL[4:s(lC]&OAst3:[iAm=t(C((<)\.7U4"T'k(2WKDD#s>Nca&6C0*T):>DUM>i0;XWdsaa2Rl.!>-C/+gToYj^T7K5kbc9MDF0bImZm`?q)1^i`9%%M,T%L0r.c:51;++Krc[BW+AAjHq\?Y^I7]!3DhC&LeH*S3LAn5O64SRBshe+3kVAO7!T".#S^$:iBl5:ofFAT?J)BQ[C"6Rm/uHk!t"jY92#:=#@h#BEUc?,TMLQZ!t[M0l-c)0k^K`@eT/bio=/L`!W``3c4!s+6Hrng%'um'bLTe0hP*&l)S1&j']=3Vk)qTlTCKHBNX-SWCb86!M9,EOpnU`bFWqM8l.Z(*m'>825LfI(aMtr9sM@\l&&@:N>HouJIfWoe9#_SY7jPcjWXZB,i-:BTTLtXLgOpQf0QD]Ih1_D<9Ko[FHP3*+)uV>Ih1_D<9Ko[?YO.;/gC6g<-ggCFe";Y,s%]jnS-#g+$B4^%e*_>B(o9XS.Ks/LOYElBSH,L31?fD20LRp5X#W>Lf_k_.K?->;<_L"c1.#?7q$<,Tf^_&'\h+"N^kZ*Yi2MA^UM#lEDE+C[bqt&cK,=BO(A/n1^AN)Og8QBiK-t87:&&^na0E@]sI""VD3g&&W>i)?Ic45EdJOi0VS6)#q^U@^#"K.l=#q+AL?4hZ'g2@>52*3C.,O3'LUe%F(32#C26&C?7Y,MTUN"QNaWsbDF?#pNCVp51/>BX<;2GNJqP#gH#(dq8Q5b%+>f_0o`+W-mGbd$4c=)1Tsi?M>GT),-H91J!d0;&Bu=N#(ikRe4QH4l&&'0YDJAMr-F_H]`2\7GqflK0O;&[JdAB%&N'oidEDuEL\!UP/"]bS6G6P6I'C:*oEmE"9od@RdAU$`5`cZXopC%BK>o95,:WuUIJ$*U_*$UM1F1;%_*:no)&*_C/#:"(KIH.THi?U.WXhgA__e.$BWi5of")Ss`F'oDW&)mkIj6.&r)kCKQ[qLa[`rPh+9+Qt.!F/B>BYFs;o:nt.s-5]-JQk@SH78-6V!AcWT-BhG308ZW6N_/C&7P,iEj:r,2#uX7)qbFT#96s+@]+,@bSjk)jQe$;aD8,;BrZOeXU:pm[I9ud:hA.QdXR3YXb9Q!WBljAp+WpT!1WK)6K'9at+`*o]D&>Q5Gac&jT$EgL9>Ih1_D<9Ko[?YMXf2f&V>[+bIEc'?ELhj'5inDP_Q"qo%Ih1_D<9Ko[?YMXf2h9n\@.hWY,tU0eLt;+Kr@LQd;s]-aRpR6krg6]]uNREn*#66q;)F>KB]Q4Q\NFg'D(h&=*lu"L0j"-$s,niHr/l[LIA<>X%U1qn0FAt&_R:J`EjF9l1W>'o^j+7g$B<5krg?tH<>>5sdrt-r59o')j_8Oti9/UnW*+G@[c\t:,`IqYp[!r\*\i4'OX$(%p$nYmt&XQ*a(f]7!g28QE&CT@d$g<+CTa0E._Ec#rAgh="1[FKb5N(jf6ClgA2h+Jr@MN*1I'absm_/%F+Hg38Mq54LZn:`&f',-9s9g8!Xs-'"p?mh)g@nN=((aaC@(iB5/dFO>K@B%9d6T#?ONSKkYMDq?q9)3A0B%:@q@/`j)GemW>mCbLqM\aSSM\jYP*DVtPWhgcQe32W?g2S+q98..3f2c73CFe";?QNHV9bQ&YY,tr53KE,n!NrP0>C@*dX^#(YH#RUX8R,K1[W66H30#cu\@.j-[V?ns9$UXpjd><$egY4,X?Zf+V3LE`m9fgpNMI:(7_nNsnqh*M@>hYC[$@cbp+>UK?iKikq"a6V^Cc`?7\D81SM9G.E?el)&SnF^,qI95)2pS";OfksFAb)HWaD85CkrB\hMR2b^E.IY<(!0>;&:KAEO$mf^"),lajp_m[)sR@pPSWZQAP3Gq?;m?I;2#@HUGfMAOnkb?5AG_rE/\N8n,Ae\`5ZpQO;>FY-#DTf2f&VDG4;>9g,Y]>[+bIEZE,f4Kbek>CA6/X^#)dR(0SnH['p'>OC7S;.P"`MuV;uWrlgZHi#iVhNNc_5bk`J`&+/](DXYb$VaO,=m.=uiI.1!s$u51/8dM1J\Q>0YF!oX?#q5T&^gMj1-.NF2mJgfD;&dga.`bkC)!85+C%a(eA!]c_PE`%`c/Wub80UCiAtDoe:TCt<*tk8Q:`FO=pPE?o_=8%R_?cBegg>6-@X[[/fCFe";NoN)4_mPbFX"V>tQ#!E>'\?AaLMNqfS)`5F[?]c3cGX[=Q)^s8q8.3):Q)!M[VT,"HFrm/lhbbsA$1,WK6'9t9*qXZ&_6Fsi$m*9@5O34-D(iV@DB'bocc-fj7gOIs7h@ol]&Bl5MuC:GjG%S`P::-]D2-dYDN64-e<239K`*@rt4.[n[*OO`Xg$U1S,9kIeO.G/s\m>k!TdC7=E5f_pH2MAlU[_P-E5jU:^cLS7jc0U@%HC.(3tr.lM>'-oPp,/2lkJ,<##H0=L=4/G:.;/Y7=OLS>j`M4#I",OYH[2oU"?lQPfZ'9A"5T)#Yddjr0K;]fga2J/27kJq3l8DN+$#j^%2>R;l_6"GugONFV:]dd2o.3UA06g9A7"5HSSVq@G87IXL]*-nkl83G6-KRK@pP\qY(`?lXBKn:h>7HlXA4D!2&\:k>?Pd:/O("!AGU-C+8EombdS>JDmZ6dl7PQ_b0+jK*GPOc5C"C&-C=:en$/(Uh++p^_3#L6("$/>HRLm7nEhQTkDilnk-,Ll%EKOjF;[@"0BQ7SCP)F7D/QPIbb*9TNif2f&V>[+bI9#n?)CFe";Y,r\aELcRWg<-ggCFe";l+"0BD<9Ko[?]c3N\__]>>8.&os[PFO0RG6i3d(sg?Qbq4ebp>&Zqb_d4hr.Tgu>>XV?*cgZJK]=]fP6d)-BP:##E!_d*FCW3esf4t&%R^EDBYr@amBm1UGID%RjAgFee0m1Yu`kJXBkh;Z*_)aqBr'NSEI2?H1V:@neNrqjDYX:Mq'*tYh`:6^[MU7F8Pl_ZQ!h0GWLfuq"Hr/Jb8dd:2BH:M+SgX@Htrfa6J4j8^Xk'ej"5ujRhBLTO3'!>fM`DHE.orEcE8j)bQ.QP=Dn%J=Ii)[0j(6r@$5^&\8#XqS7`?\6M*,Gn(pmgl2b$!-KJgT,E.9C9GS?R?Dg3%/7+kT=Ad"4kr+N2n=PF-aa#+.4rEe$l2MRKgrJi)RUT-2D;"1pucdj8hlEEt;?>V'599:Tf%K!MEIKR\C[#"_C\,).CJrc(Q&cpW0&A,/otW_Y0rDTdT[]@1-o\c2#7F6NK<.eQ-ca1"RXd='GDh?P$*4Op1eQBMhd"^b&c9ME#s_?Z`qMJ7KcJS\f[2`LhT1)F6hds$jtI*9TtJCFe";Y,tr5NAoKp>Ih1_D<9KoE?*":)qS,nX^#)@[Mj(g\[HNqjk@kbQ/aia1H)D<-EF92c$;f!fXjRWhnC%.>Hrfl'u'L@S&DD]+,WrV-Z6KVB!M3=je?#%Msl.6L:I8tHc:6:ec"BS7',(t/%-K,`9sdqhI8kEpCE.*hYO"Gf.pgkk3ZWoqC]&?GXM*l-cFi@`0MgmPSI%IL'('"1>#(]VFiQnIfAu#6s(mq#9UH_giiR3U0,PFK'g;oI9=/YVuIG)h1)VQj3>>q]C*7/4SHH+ik(8"8,V;e-cA8#'[1'bRM?F#1P.ZC[A$d6CnY683]KqP#PRQsX-PCO]j6C^VWXnVQEoMVPtT&eSQc6/AN&:+`t+#DS(EXMSD!hD?+ip.k8dbc#fOfqc^'JU[TbH0]8dpDqfZlk[$8fnd3Zi9X0X/lU(LACM8=qfp)XrL:6Hdc0AChIi&Y%6jls;JCK:^%A]r(N!frHJj['b+`&LsnN1m?X>;`[8cZXlr\U[+bIEc'pll3hQJjk@kbQ"qnjE?&U2\@.j-[L0#t#oSlr.IV&fR+eS#S4gMK=M/%E\F$`.M*M%%'esY+/?rmY-_aKjL`%ui'kGB7UfLGe0\YgNmt_.:]>U`J26lgV9,u,67+<%bs*WiAd0R'fh59RKiJ-B%GAfju:7`+(o7LMsTfu>SKu.T*Al'(84T:_Xop/h#OG"6N2m*fYHhp7l^3f;`++ksdpcr-OgpU'&W=WME">[?nn9eU;&V1;IO:EasVpLANZI:1iK!LJqL\C0LB28+-RaZ$$"PTm=k^Lp%E2TqoWg)rboibCd)/P,FAgG`(`E]mFoM[-+io5[@iq04!5n>"uH9_o27tPoXX\]Z6/ac's,*VOH*J_]1Qp5BJqUJ4BDm9f?gF:FVPnAdd3kNoN*__6oPD/([h)X\s.Ujk@kbQ"qnjE?&Ur\@-Epjk@kb<@Y/R>[+bIEc'ntNoQ'+f2e*cCS[7dScO;If*MIP&.R/*6FLhJ.f0ojsgJlZ*Bc'7)/tE_nDR5``d=(qSLr-H*j%;LOp";Qr93K(G6k/PCg_QB/F9*=p%UK0nN!sd\DK0-Y0(9(7IqiZ3B9%_ccT=(f(4;jHVi&#pU(QJ)kom#]$qGY*%^3k/@-@:qX[$*a)3M`0Vc;jn*6$pU*(AA3W]^cIEHiYY,GLhVcrN\"`$6kinC]S5d%elc"$]_0iiq84E_[b%85h)3#pPS9,\X/#T$R*N(INdN>WdL.OO$1u.X:QNn*:`t3A4WA3KE-)'s=ZD>Ih1_D3]uo/([h)X^#'jNoN+Z_R5YE/([h)X\s.Ujk@kbQ"qnjE?&Ur\@.j-[bA!'[HKWb:L)ekb9r7:L=MLZ(ZduEYVM:j.@YL`e.\plHLRUu`5bM/M>:otMpHS0`NGt)d?fjg`uD4?Ya,lnD-A6Wrm`OY\_k(DIf7EYin<5&/tW(0T0si0'VfBCU>Ye`mGaoS=89"F&B'61?8RG#%F]K+:_HtkXVJI.*Z"Xb,LKd+6m6<&W-M:238#!1q=,,m*qkHX>LnY-$Q"U.CKHDlHa\gGmR(Gsa"!rKfV0K5;"W#2+DbM_4]h,&[ncQ#!m_O/Gi##:)l:<44XBp]HFZhE!Z2(H"G@;sM)9$d;(hR.I0t6$*6N&`T"lqN/062/WKSpMrY]!LCM7X+`F@"WOWg^N4%PF*PS%S2Y)m]ZG?gfC:A'ADD:RU,SD\C5LM@s2kQ2eqHZFh\gY^j`Ejf8(UJ_B@=j[Y8_J6-[I`Gr.7gh>d5P&cecMm)pa)SQ_>OGai#b)@]TZP_^%/$S)AJ(/I@d1a4Js3"Z\OCKXa8+0Bg<-hR0WqN_>E+>P/([h)X^#'jNoN+Z_R5YEX'o7;\[ECaf2f&V>[+bIEZE,>`eA3/nS,&.RMYAYAXF5*Tmcel/A?:=9Vn+1Tt[!m&Qd)qdb,mIMS8".^NrXk>/*sOh=R,fZ>oP>XC&;-XB>=UYT)i+F2I#9r5B)QC1?ptNT0`,^#I\\4lY[V(iFI:hC"=*ML#&R:C'otl3Y2j)$!_Q/^k?Y;(\X[Q3G<#_CHSfnWQ\gggEgS'bd6@bR.C+d7TJUJqiAf0lpTiB\(,DuKEQtn5(ipYi\WZ@]lg[X0#P;`+P)k[+45hjNC%Jf-NELKC#o,[Q%i>EZc&AjqIfP&R!T>`j%c0;:UAmbS39gq?c]a%j)TPq9f3JY5Iq4:PbW-r<$KS'4'M!qL9C)NCC0N&sYeM-t\Ks;Vr'6KlZ=S#R]D)VCD3[(A:A7qk+c3$fZ9/.]0mn@mT3.R:H+^20W<,?2gh-:+5`S'%>^38^M['Y?8JKSu>_s1"/A8*QN064Lhh?D06T'[W64BXgkg.H[+bI\dD\H\[Ir->['ocY,tr5\[HMua-f&mXfhN57QRA@>UJFH0J:`#49TQHg4\QH^*'H"tmhfn(`$\#g6>WE\`D^/dpS)o&WEQ>PrSM-AlJ#SK%s=s-iuRO+iE+]C_.Q4_@a/#I[+4-&?KWGl_9g1oWW[]6sJRSI*l9g,Y]>[%Nd:[W3A.\LLigV/!&tSpsf1PP:i"K>!S434$A+'Odh6[.RL^)ZdG3Pjs0NI*@d$f74/q'U?Ec\mRk,82fNU+&5R*YRAIH/XOIG?DKQE.ijfEH3V.fBS6OTjfNm-/=s'C!lF/C%'bp)D[!Z`1_UeXN*o_$'Ajp/kPhD&DNm2;,GARTWCI@TMP:jJA#?f^EAd6#]p]P?U/B*i)qN>$WCKW7_e(J>P;KL(e9Af(eP+.j,Mkq5]V_1t\SDW5b4dhEiYnmm=&gu5Fmo"ro9]Q?]#IHk7ur]'iAFlfVC2H2X6CS\cd[65=V]tD_*4E=[Q?=#Snfk.<`]r<.Db0#b-dLMX)!K+X!t0WCFe";@hDf![FNe45jB7Hm2\>NY-"i;Y,tr5$.i5B_<0Io[?YO.CPQ]+.BTpl/([g3&Qdhse^Xmil5DVK*BcHdXf`2;XhI]eMXsl.YUlMP3EhBS6Cf3L6I6GJs,-o)8H%J];KU>Rd^3IM-:g[eQLkH'hTrE(dB>UnrHC8rZjU=0CUmM!%!]7&nhCI6sp&JL@RfUB/:h*]`CAu-hq`t?eeAAWUdB$$Z>m/7?\a*f:d(lQ;1F_d5lm?3`PI(QWe`>H.k?+/>t&GHc,4G^Y$k>U7DCKJA]DdZX&?tNP3Rj^RO9;b-fcaKU0Tb[(L/d'C0iWk5][D0>5cD)H<<>GZJ=CTC@!j$E,@JW"3n7(eSD4YOqXsD;(Q#JZ046S>@`$jMWKcZLl5nM@`?c@U:4pQi2P6W4r)UGT=E%+>:O`O.**\K6r;-aH<;!l9'1V&6qVT%&k-3XQmSh?`\Hj'k.*n9A'Y$&Yt_gmT'[c1N(n]=)Vh[SoZm;g.^_M+0(oI3fKiNM1h4;\.%q*:inZD/U\=CZVi*Jh*ZaO#V5hV^U]=`K%(d7D!#NoI,oB]SELn[(Yug;L]2`t&3M.u\lCsq"E%b;HmY*?l;6Q!&$qfO,7irL:O6d\=?&-ADSXW$L4Z+ZDcAJ,D_)kI[Df?Ldn-ZP<9RK78^g_q<+FA$U1+3G4+!6W5bFbgI*4B.ukW5+@m0"A\f)h^,DQu(c\6'M'R=;XCmB;!R`Bp1VE+#Tr[WT:)kISY#?!@FQlfc15R'Zr<`jUK;UhMnQW@H0gktcaV.cm1n5.buU&Z&s/3-8iC(p.[q&bP!01G,ABPf[@p1;TL-(`Ih?gj-p\Jm1_Tm1LAh/ecHX]6:7lm:mp<=BNh*p*?/-XCLfpQ@QD;NiUQ`$DO;H,ABVYd<0QGfWoLVW0T3u^u"H&dsFd\Frq:(c?9i_N9Y(LJ$Pg%7==Hen`tDV,rT[H/_F?Fh7Q3Rq>GZKM@S8"7Zap\DcaZDR$tsU5eG`'0nrYm8G8cD2lL&4s?7Q-FR_q-+]-)'tMOcZ#eY\;(ZEKL[3s)dk3IgTI!Ag.[s:/a#7bp5\!k\Ci%t<7b#R`Z$4e8d=(ASaS$Yjm@9AtNNt93DM>L"BWIr&OY2gs&34]KQe7P(oY&pqdARgK]i#R'ctXci(#dlh[?YMXf2f&V>[+bIEc'plb-dLM/([h)X^#)@[W66Hg<-ggCFe";Y,tr5\[HNqjk@kbQ#!E>?X(59iq"@q('K80`KJoKle!8@m5c@j/tF@B?TKW">Oe]Vm5ZT+NpdWs="P-[]N(uQ)KW(Yo,iH,g*8QPJ:&g'.qh\Y?5:_`,1&`R5q\E1I0+srn(bMb;_&U$Y?lHKI.6RY@[+X/:;3)i&Pt&jKe3@`\K4%bCqIcmirmWJ5GPpZCU]23ZT\rD(4@[2#!!2N"$rWF'ia`JV9Womd/L%pI"`d6Zd!IVl=GRc9^hG`o9OXpB0R0m6WmB[>NAI\,Xu1=<1Y_X$/C+;m^l8*HB&>MrU1EW(VfdroA]^us$KTu<@($p#%J(^$<"TubO0tB4#p+R"Nbj/I9;SCq3"MWFl'BGK?.]:"GuXlDP7gDNLEBUN$nHH6&(Y67bB=Ak;-T?ng3:fDnIFnl[a.'#N_-4V*CRgV[qLI)g;![\Ih1_D<9Ko[?YMXf2f&V>[+bI]&C'I04/s1=D\dRH:0"!#sPC25I+?E,98eS7gugm@J:]L@A]od3g]En!i=STFc89ZL$Wef5PD^4ohn)LL\C0L]j6Bsdia/;bn[r,CAX7$#QW<*\l+ASQ-$gLE?*K,0tQ'Ggf#V(8>Nf3m+=kF-sqfa*08F5*E7A'kr+4r1/pOi?d$EH"'*J9K[BY071)mh%Y$G_P-D"/l^s.8V0fJp*ZLEJ=hMUKOd]$nq2G+d7DPRPr?IGKY]rn4c-S)@iCp+:&Ka6.:qJdE^!cM!&!\+5qsK"eHbrV`pL'T=%V!@`\'fsl4ehLEa`+\\):!)NfL7&\j@TH`dl%WqV87m+@Irnng5]*l5ZT^;k?eZdL4@6DB>f#X3I'OdP_1Y]2ZR`F5L7Yl?i1YS_HCX,k.D=&S_u(1mQHd29GCLu);D?]k<@f5;>JYU'&aQq18FW,tLr`p'K1FigHDGRbW()&eYT7bn_l/CpnP(fcXt$NUU$Ln/FZJ$kNWsN(4s*.8@P:p=hu*[)@+L$JML#8BIA5PdBA`Hg_OT:T?]E*N(LU5V%`&ZecM*b>)`]hIFD,s6G/_1mh88HSZ]X*TJ>ub&c!j1p)'mclAnsW^.F4oA@.B)hOSs,lH^ns!p.)2ibIQ.3iGQpo^:MkYjCo]j6Br]jh_2Q!=_J@o=`R7E'#1c>iAWi'sf\Jk=W7`45n*Or[$oo7%q9b4OFLi?-S52p9^>`%]"r]q1RBP*FG:sZ0inm&.<+L9f0ut6r8k2j&@H)]Tm7_f2f&V>[+bIEc'plb-dLM/([h)X^#)@[W66Hg<-ggCFe";Y,tr5\[HNqjk@kbQ"qo%HQ677`8%Fit]fjD(Ik).?:_r-9'lje:(p:[NFfRs=;@qmk^O58^Jt1MjE95j3IS^0TZM'/&-JrGsPSX_n*!7Up#R4n[3.5MH2MEN.Td1VK%tf^@F?oUR1+*qWK/U.uP1g(R0'sD-mrUor4j<+KQ4=WH\C@[NOc1m^lQI^a"X/$hAT:R@ad)$*@efk0KMCCacE<1!kq0,,ZFrl"s]/'RkS_K$s+uk8OJXn(YHQd&0,*l-mM\KirNs]\1.3.n]9r4YH)c9,cr#]fp^s8>EK&))mZ54Zc^Ju??Qorean@+VT[J,GP8ZPIHSn:Pq=*CR8diQ3\;3_5\%W@GfLC=j9peNa&*BLb^iXf06h5Pg2/oXjS+9CUHuM)!AKqVNY'($fg3;7uYk4+aBu^[GLF]ZM.Z1=0^$%2/!*c(!8lRU[`1^\mngJh+3mI$h=OFk9oCMJ,Ps%JIPQ#n+qi;'3=L\4om5G2/J+K7M#jT'4qdr,4gd2HC`N5_[+bIEc'plb-dLM/([h)X^#)@[W66Hg<-ggCFe";Y,tr5\[HNqjk@kbQ"qo%Z8mBQ.qlttB2:4Y8&nfL]()JTn(BXblJh*`oT+pJ6SJC<@S.h^/FSVZ@Gj0fn-U*#TOSIhS$_j]f\DYr[P:+<%`6Oo8+%&LhcDOI1&j1=,id#P3r)n$Rj14r!dgE7nV9>4E:jW=2E^$HQAR2fj2MQPb8M/46?Fe,ld[W9W-n\cpk7u9LWV.&Z?+MH0Sin;h6N\uI\fg3/lYq0*/#U^`&f7_#J!fj;eOCG(-Kl@>bOu/86=dRr'M(`S,r[h;.cu;V#O;P`-;4ToGQ\4u^jJBr>7A;4="S2(>9e\g73`_JinU0h^/Met*'`1.d3',`-B"^aR#pcmGUDmO!pad-RjaT)Fg)Y[n7R%L<]>3HIgF[=HP>cSfBLl^1G2n_P=#Z(l+t[iM'!;kC;4MH8Bf-YSo#CuY.r9\_top57F=BjBipd\"GplY5)[anRoH+f6:O(G6%Q9BXW.']_Va[_(;-P>ic<#/F+'"gM?m31kB/S,':`]AlX(AY;mTf!rX)mE%.U9J;G^B-pE^_^r@HT!=J?%h/(<]?8c'aZ>5:3^We'#?olMAm.r6!mJMR[+bIEc'plb-dLM/([h)X^#)@[W66Hg<-ggCFe";Y,tr5\[HNqjk@kbQ"qo%M]).lD5;h'g\rEq"T+j.L==(rU]D8`7GX&'XAnkF/&V4niPe'8%QaY9o7\HbKV56n5!@_N!Z;4CMmF7SPO&arI-IUS%,4R,86tcaA_77]4o3D#YqM30TSZ:/`Ujua]'UbnL0D<:;Tc$;E8Zuo,8N2:c/W[u,EkDZ6^SuS[CZ<``"9'ZJpqccaN5lL\@%91PM]:898T8fu2p=:3es5^g['qHQ"Hn9D08Rt[FHSTA0k1XS"$sd(CEc(JpZZUG.eS2I5m8GI![r+d*^?eeYfn#6kCFe";Y,s&58i+pk86`e&d^(,d>=ChL]`##m"N'>^gM[mudL'_,5sA-tAjY4/%q+tEaYThjMiP%Ek7b#/*D)2?G^duk[PP1"M:!-8fpgWO`)8AGT,@CnpqF[i-Ur=Oq"DYIB747E,"(oEB:_/G(_%b\Wl2=l[OX'FPD5u+9[3kVU[hB:.m-SgD,j.i.l#2@V:9Ho@b`/?*)6sP-:V,pd.Z_h`9a3Y8N`SpZsba<0cLa)lu6EW37ncgYUO?R@MD+8]U'Ill,jHlnJ#S0Q82hch%YDND)GuU:T[7u5N[+bIg?[I-io\s0O)(e)F)C$mb-fbW0\9?(B!/7@>Ih3%ES"6X?!D_@,[=PrRVOG*<[5hreRd?5_rf[q[?YMXm+Q/(W.u\hp:oGu2]6u;U&QKlC*BI;'7AVa6J[9"dFcHGr!(/3e">8X@OW2Cn(#>pM1pd`.$6cgou&8CB_98T2s`k7EhP7S[T'8\/i^9FrB/Y-*h-=Qis%8Wgbc>7[+bIP.A#AD)IWATkg_#Y,tr5\[HNq2/Esfjk;2aARgma2u_j0YDZTu]D8=n`/2-CU,[5VUp+9T4cRRI/*!T>,FA@i9g_,:?qQ.^C-0O>A$]^D!fZmlch_59B=mf2;c<0pB!\hKh(759f'HeOHT%qGCd-)@G'^VeT_R5:h)j%KgpmIZf:CS.6OYGRr0>T%N0k,nlBt2#Q($69hYi;+lm1gZil3J=e[u;"NG1r;m;*,`O@;];<17$%;1G!]1[5enUCh<"rQ>X#(i!ik)2.;ip2FLKPnT^#hfNuSE4196YQnhg,R!./,BNANp%.,VV3na!qH0oE8PdTGD0bg[Z>O8#k>*s]=-mfFl8aL>Mai[("L#+N;W['L(>9jCl[+bIEc'plb-fc"#-r$FWA4g'D0:9N[FJj?&ZLYE6BnMlD3/mGaR4>f.*($"MAn$VsT-?4d`Maj4FiCE&a]K7GR0=`MX!/>5b.nehZ7DL]="![<&B^7$X.D0ETj,6cQ&uGoXdXSd_$p;Q=.9U"EHnI`A^CV3FEoekt"#*UMg0jr_p8cQ;#Me+2eB;HgmZ)NQgr>tQ$$$2,;eM5T-26#\K83";Yuf(2QXeuK`&j!b$BSO-dd+uTj/bUO_bcSr5A7>>U[8PC&7Y@G%8TmagZD=aOa6q/TL_\OM#SPlPJLcBqA!rmuh;$^#GLg8IY>3&QVbFYS(pcTLcA+=1m!M?*Ed3S^$r:2jfVe(fR.AuI9NH=+Z60!WNO+aTf5@W#XiKd=Fj:h"fln6cermsf"0E)ZMX]XA8%NM#j*:`j&r1_L.PgnN%AKtV8li#s0ir>NWk[C%NM%JiE`S-rXbt!'Q#!G"2:kmn9dXN)?u8d2/KFt>[+bI\nZ;'2.]7NY-"jf\[G+K1-)tTl87*nQX!b*[PI"!lB5q`@<6;Ig<-hRLM<"mU/?nZC*c`\PnPXA;9OmP^36Qm(,&i:/gUPJ@2BT[\_.uJ[s!gLllipV[ZEilbVg/DoC=:*`E`mOdLWCMO(Oah._g)T-Zs9>/A4M,'Fj1ZQG2O6WP'o_=kf<9VF"J<"+gb-lX&#QWL886"Kb)c\Frb$,@j>MK6C[OOCXu+i!3q?$Ka9&P.@h?56FiAemj2YH(q4F"cd"5(p\*FI#9,\H42/*oHiI!CMQ14aBp`FILP+=Wl'JQqj7,`a`eOG6t-\;`O[.FSH/A&U>:GeA>Ih1_D)IWi[W66Hg<+;*?!FkJ)Cr1">Ih1_D<9Jddb!"Z`ZYEd&0Q!p3X@D:_gI@*2$bA0ConH!UQW&SqMLXVO`)__Y+IH&%8s7::\6>II3oTIP.4LftZ^jfVQs1!FmCPJJ:E7]MGaqZl=$,Vn]B?A6QlJplNqk<65mP\TjR\k04BW4+rG=]D^9;F.kDR/];f?JC5l',tP*JH&DEc<_rq:SC5el]Rd=B7bc$td$X3E41_=o>FcFeTHH.q?7:j$gEa??D%fDMDAC2&DAEWCr`b&@?;W07KPN*i<`GfB+iWH1"rIi1bATKN_4#G2:A]4[?W-0]#7Jr`fA-C"h)dB>n]6)&g;W?5j4EKEtB,:Z^@,)'b5Z.oHQiB%7udasL`VTbY$,,duN')S70%YO]c&H%TTgKFJCOELn?rgBu_OH][WPIGB"^PQrIFd0e0'fd4bcLI;2"JG#V$UMi`(h,WS*\I-:bb&rOeFpD7GI2A4LVlqO7.a5h1A*QFP36[AcXmG%_V^<+5>nFPUMm,[E9Gb.;,Ym%&g)2XlT9O*C)3WOdQGqlPVS+jY6L>NbLX>E[-8@\XSW][0?A_l(YUCO5G%64n#W\3`ijUa"r"VN`Nj9O)4cN"$Dk_?op`g]_3CZ=/C=1PR?B"%t4uRXFOWJ`10n#6Tou?(rkX@HcqY]GKkdrNWK3U0X\*%CU^1.4B+hgMfT>#9o6?4Ofe\@2+PWg,%C6.rai_mnN*KSc>r\pu`Fssr0'n*W'\hO[,BQBMWsc)45&[U+>[+bIR[CO0nHBNSEhXHEML)BMZG$3GpTCCG[l5!a4agebbkK*&J,6g&qPd90LEC%p-J&r/(l1X-(R'7&SI`/1$bbPhpO$8jR6=3uYhI7FcPWA$\H%A^h2h*Xc7'W?%"(.#:d]Sc^a9P9VmM[?"IkTj(SZ)!\%>90H!BU,1WJdN!BQ7kS:'[3.*V)mlj?BL'S56d2V;!],B#"Q>$m\bPuK3qP3dL0a!jHY8F3'*]6tl9`\JE8+4:s0'=/VpHI+RsI_46YPtf5?#Z7rDL!lJKM:jn?m1Tr90h,8/tcXY-8F,(u!N(8VY9r7F]_)p>#mii?4g'FW8uO%qCA'M,i:_)^OLN2DH-i/E0XQ"qhe//o:%3fpH!F"]jH`$Bpi$82HhTJ@DKd1mVtTlQl0E#T;>@JM[W3=O4UfEc'plC-:Y4lB5q`cPPm#b-fcUNK@qVEJCE-/([fHk'7:[6e>A0k1[tceJB-hGAT3OUJTQCY-#^tr4BCXD<9K/>HY)5>KL,S?$'rVq9!ct[FI^tI.7uI2oTJmrQKH`0&6HbLjIAJEgOn(jUg[212^_[@2B\tBHU!aQ?&;T0Am:,q`abp+d2_cp=6L>6EB>/m?.b$;@E?Z)'t9WKN30f',^[OdHkn$J($cWQZ+euCS6_=!h$?AP0m5"SF9E:hZ)Ot^K57rK`TS#c0s+QH(hp&^D5_N0JAd4*:)[)9b!^n["@kSaQ#\>fZdT)Q^kO8oYk&\LElELRS2?19gNI@WbXt!E,cdQ^?_^7^4nT\sg)aIotj[P']:2%Z80IZ9u.VgQ\D3ntdak*A/(7rrnW9OdmVM6^r,18GY.P2R.>m0gNYdm.+ulAmH[N]OW:[BDr7nCs&/EQHl:],'ncFDIobU)k#e`m5D,f2h-*TrtM&>E,"408saA"ZEV;bI,m!:*?fW/([fWf2gog3lSL,Vn'6VD'a7?jkB!7X?@r@[[O9pW,!p8<[/s;$Y(,SJPBt(Ec!\6'1hKDb-dMY[FI6r:2t.$Bs+RC>KL,S\[K'fCX3_o@Y"e@^rJkB&P1]q`,TO1eK>e5;[>R-&=+&'.:Rl/XH:L;d!N-n:?d*;s+5/[Y\I;D)jk3#?/kuM$A@i@G=KN7f>aG*,?rfpLHrqVr?g0.Z+c_\lggMo><+R[pjrJpZl4V@a*`LN_A/-g1GbOY\k*)W[4?$'PmWKD=CShON6i?^P+YlmT[.DT2r5%_(GQ%'9m'8b#*FZTCEVjOrBM9rcX6[+,ZF4D&'tg4+omkCfn#G*8/"k\@*=+.+GYiCTF^P)qS,]k1Zia>[+bIEc#@qF`$6ob-_uHg<-ggCFe";f@4&0?$:)Hg<-ggCTFKiWp8<\[?\tDQ"qo%<`3r!K$.+3/XB/m.BX.JWh*t&[quSL``[AfEe`TTa3PCG+>jB[R!QW8^,n*(Ckf'MR)S_!cH]?-rf'G!=n\QZOAh92K6h!d)Q!l`9\8h\qL-g27+2-;U)N(1+2L]Tu);9K)J7ZgSV8WA'a-9(@7\TP1i7@7a$JK'$%)n>aQ>Io*(*&niSF)b<5.nhR#HP9]bA&l::ddo+.,Dn:S^=m`Jk/PF`C+Q%p/[L50XcPng<-ggCTHumCTGX]XZg[+X^#(i#[5h\URI0ff2f&V7LX@MPdn/BD)G?E>[*2&Y-"k`.+GYiCFbenk,tgIc*c(jf2f&VN2(1kV`YH+be(<(D)GdigSMirQ#!G*>2e1M<-)o!ogYX=e5e7%63Q7%d>YY*<:(@jkKFW+V';qi?Lbd+4t^_FCr;!M,-"^4(_t#C[+.PDn,@tF`0O,eKlt9*e5g`2A.YS"A`ke[HBNM>nr4NDHu-dg%aCjoI`A^Cg%j=h$CL-Wr+!-78n'l1=_"JE@#TuF8B_QG9",mj[JAHl7Z)]J.'desLZsC7fQGXlG'.1+aGOTk!"533Kp;`u1(baq:;tl`gD/9h%NAU,i`)/U`O]lP;?!/Z#25&"F_9*6"2Gt+,*442Vq?9TB=Ehlm>$D[0B<*BA?Wu9-:@KC2@cq.%bC%P.F`g:R?h#nA\TKTSpW./_hY\X;taCq,\3;%6fQJ8!K+*;)b'*fbV"_F;u's;Vf(X_P^"Nfo&2I'%01_heGc1nopC/AYUM:gl@Ne%f2`P>Wo;[S[?YO.'Haop]&;:Wio\t[lA\,9>Ih0\1$N\s[FGH4Ih3=r9T3L[W64B_KE#`>[,Ih22KXUa=07GRK>$a&&QtdcUT?d=%K]+X_&,J]!O:aE!G10/?pYC2"W"8QQR#&2&W)aUF:S/9N$.i*[iQQK0M&dVk(t:)_$s9ARNae,1,t%O"D&Bal_SEWpfE?Csr#2]V46[%TK#G"Lpcl<\I*6M_k-Qgdh%4>?cb+aV)8kVan;uCJp8!_^Q7_>N[7.'QS0eqD$Eb"22gG%WK28sING`$(^Y"au1pYnka=Tu_q2Nq/jY_Aa:adI38jMMVG'g-*cgYf?eM-YmjN/B@!0E]sV\%7K:]L>68!ni.Lb%6HgU-:WD3!m_N!P\#Kl:.,q+P%T8X)b:Q'`Q0@1rUd\W+'R4@0W,1[b'kR(!T>cYRb9]09k)[*.:%4aAokE'N]EU6g>b_I/E7fVX<#Iu_>M1cggZ3"e>aOnMup0?9`+79,1o8'`Qg'dA$uVV]+pD%cji4e&D4)-1sjO'[+bIEc!ZGZT5Y+Ec'plb-fcRa_Ik`^$r*/KB"-_9B%%sI3tQca_]@^/rF]>R)imN`8%o0":),6;%OD,`IEWNZMQ&^,[%Ic!]sQ4K6Ert`oAuTm'OuiB'2On$JQcQ7MOE%`(a=f#q'XM`X;Aik^q9\'NYa]-gYTB@S6]uj;^",TlH(it5EmUVF6Fpl._IbGV_PigUo"B/r[8ddkiQ)1M@RF!9n2J71^Pg2djW?HE(iAcBm>7r/n]>_)+YWmrZN+=:I4$sXT/?F#PZ^Wnc_'rd:8;u!apUV4YVd39G^'CkU^'tB1RWrC9@N:(1[&Z2g=9@igGmmhj-Q2fUb_E(0jk@kbQ#!GjQtn5(<[6Bd`Q$BqY,s=e[W65MQtn5(<\i9-Y,t0HKH3diXi>(XXfgOIC@9g@R[S"Bf2a-O6H-snn#icF\[HNqQ'c>;f2aZY!hM,,c5E(c90L?^r]3S_5<@auRkCI7aQrB7#\sH8QrD_jm*]UoNKD==o?8B24@^6Rgu_)fq5a6n(oo-KT0AD%S37ni.:m8n',1]7P!U$/aT3Bdno+*5u:7>=D"F9Q>69Z83b?;I%6a^t\_T3!U5c"pSQKV6&g&k"eR-4L%DB;EF4qNTRGn0IPLWa'gB[;r_\;uqR(+ZfKB>1VF0P*(L.1NZQd$Qp5b7qd4>!!\$]Q52;MQe2'-Qd\o0r:AL7DIU*RJBc*b-dLM/([h^1"THm>[)WjmB3Qr>Ih22>\(FS]&_Sf[?WJu`O1tH/"(0'f2e*^<\M/UU'Q?7&VUr3Pg>2bHpNFn7SHW"5nH@S6ppfAKJ=.gOdq`)/Z&MJ=TSSr7DlB7GZUQLg.51j`,I8.2s+qimn9CUp8At[rBjsBCF)om(1JXhtmrZ2,AMg6QYf;*s)QN?l0.X":%7)(^C9PJfkjW5ct,0j4LRLfT$F6ZK&ZajR0s+Cr`t07rBVUP-'c04%l:d;PZia[qiI\X%4!fOfUSV^V,(Ge^u`>f@k"!7?2rh[$oZsZh\Ih>i]DKRK[WokgjBg9;C6.9$%!.2uhuL0K7XoU7W4aO6p'jBHMYi>-P_VVK=,&d<'bYS1>]s9h,th0[f2b8XoutY2]ldBsM_BVM-g6tgRo-(?gR/_41OJha41W/bG\dBE'f,0F_5[PD(KaDA7m[^mU(A%()J>FDV9LfQB;RBFr$CS"SbZ8X84BKa-YFDZ<2@9mD`&6h`DJ=G*^"Y_VOWh\C4^jG?:5eQc#ZPWk1A0DCuq9+$I1NSlrMMmqh;P`am&A`kZ5f`]cMITItD`UE;4&1Vi<=UOSe-_=V099O?f*1X%c$=sU%.)-VZXLfmB?Nn:ZrQk.jlOs%:k0sYK$7>r8`Joo(lLFF(`+3u3G6B<1H0362H^ThD`Vn;1H`=qALi^ZR+rt:oH-:heu2AJ%V$0lDr@^*`7DOD6*LH1BjVlTSqK653#fg<8uU0q57a:KW.&`R4>K=YB.jFi;f+:0gqoGcN>@VVVQjMb7+l;$;pbeu-CG*)qk88D%5$;YfC+:jZr7OB:p5#\q!%#8mJ;C7K=6OcnEKF0%aS;[MdBDob*YA4:jQi[t3RC@:Hd9?%GL1[GM/=[Gp9-]FDU6A@C2G>FDVS(0A^\AugiI/Bh-6AuiC"3&4^+XishrA@;/Z-$mj@C@pqaXsZ_Xisf^'j6p+2U#3?DfB6q10^0KWl]'7\hq8sT!u9SghAEq=1`P4Q1i#lmS^RDSI>1>-LChRDT\1ZdVR[Y.M2,KjGQAILmV0DJ@JgbajH4?0;tkqlnQ0/N1)lK/W_cW@5U'sZ'cjhGd!.Odh)^b`TjXn%5EBcAkgdCtGI1aON8.lHW.Rs^,Yo3",[)lB1A_#=O:K05j+m[.6:V&ra=Z\Rn]WE.h`&VC/'*c6ABO5LBJMef;/(XZ"F)Dc]]MFE'l7>eA3\AufcIJ_=f%lafqM>FDT[Ah12faD>Fr10`9]Zdkr+lKu_CQnC"JLMN70b&"J&.PP'9I9edhAh12faD>Fr$CS$?2.65)SqSUeKT)-q?=E9TR_]cerRTOLqqN-ZOBh'irpYNZMk`rMYfi_9gZVjcBG`6GFU;@rb\(PUQf%Vqo;@9nKaP()8A`-VC`ha0g$Jck/3WghiCT9P\U*Jj!.*JVAl%p4G>H;lY8GO\$eQ>DRakQHnGM?-oTtHis>I&=YWLU-'\l9pN"%h2)K%%_35uMD.Y>]WV-3r?=DhBW,^_o_0-TR4D)Q=)*di/Kt"1ifKo*N1R1=[%W5Qesuu5k,!,b4DcK8Hf@Pr_nJRgiF-'UX_/"2bdp?GX:'g_G6?REMY>b#3XN+qE7C>c#fulNBu-#jFgf[Q,MeRI1M//DQ.[WWAueY4Q.`/KFZ3Nq1L"-YR^1VhCh:%1>FDVYQ.]nokn7^=)QV(_Rq=1WLb71e`bF-Z4pO!E8?fCtu>90+r&:SZgMr>HkYD7W"<&=H9LL(>frVJbmAtJIu(;p)g,@$,.*k:s)n@cU4l^Ya*h544g+'p>D`5=DYXeDe@ig*4:]NbiaA=i!E##SjIWI'.`_>(1IT$9j>252KBq_>r`2j55nd%uC%jLg;5\O%(C=jiKSjM_m6=#@YQc3d4A9R=V]],f^uEp/.%n[a0,RQrn_@X(d:DLkd`6"&QD@,qe_;,f[]8&71LV?:2?^s"SSp>Hc!Y3_fC[(<%fYO`p,8aSh"]i/NpKYk(EUG$:ShU5eAEmR)TQKmm2B*fkkDD;L>JsoS^64S,(j6:T9\hQqld[aL)e067q^hP&BV`i]H4)*pTR@Hfe!R7XZGj]nGV$KkOe]7>$nl-V-'L's\)Xj_k$-3oVM-SH3CtY%WoY"l,o9^q+nsUf/oC9FXji#'ijkF5SVuM-KhMFZN:4,YuTNrOP8CL-2R7B6#@0oqrs+B9"V]"oFf>:%)9At>45.oTaLAUB"n4NFG\6HK#?4?S^9Aqh<0]D9%'ml`So/mQL.3r2HF3\"[YjPo,?s7/j=Q^cS(aV(#g`f[&:QZ]:dFQZ);kHA"]uggIUY@/u1>?(<3\?*;>p![-AuSK]bD=RHd*I.3N.(r$\+H0-"GqR=R);`o7(gJ_Y"1t]:b_SC]#&K<97*(l>5&t`8R?a6Oc$7lX#U]s*0UkTB8+mLQ:F_\?.9@24JOV\Zb/?DLHU)>6oumBb?/#pdicT,f?dR`bEQlGXU;c=^*nK4uW!/A4`S_U8;?rY^MBY@bY="sIXe79d3^@dDl&"5++s,>,_E-e!7B'",=V"j'F@ts@!7ZRs;k2O`Ch:&tOkK$4g$7tDd(8P\Ah14<[PfsHD4%GKR,Z=jAuh$Hb%t',T$:<2MG28qAufdL6__g$YhVYZ5/r1!C:AX)tAkeNrfT/;PC=Bm&9/qQUP7=EM+UPSji#K$!ei%DK(3sqB-X4M#rn]RFk79E1__tZI*"iGRIF-$L>=p%f7%(E,MqOj)p6Q5c;jnK(L0)+gTIuZB&oIe)?rA>,T>aMd,g/;+Ccr&fOAT!,h=mT$B\[0$>N:N(Tfu>kQ*re%)?)+01Hqj?q-\>&rWs1#S/_lF+qS%]95`]`um7ifiU2BRONhnoG0Z1l"[Ak65E8>?8))YWX0!j**fue,B[PD&m9XKQ-lE&\(K$78-/$mb/)Vf/:/P0!enfIpAh12f"h+9W2)g1iR`jZbm=Ekiqr'3ar,:O1(Y6GV*,:6F40OG>i?-nm5()k!E-M+C\C4V"\C2A+],^84NeCKFLVfRslF._k97s?kR(c*Z9?qf5?*/4*jC+ph`+m8eVfT?p8?cfR-jJR::DAaPnE(&gPIk^$&d^$UkYgt^+eI'a'E?%a/mBeW(^hiuLn([e;&U_VeR+3VW@6WOXXk!(oSIH06/>6*$s@8nja76&/0GEC7"!orZd@/(UoYL>h9&V:4W1']4..j%'LJ4d[2*SW1jU5q6j7jA7hZ%.4igoQH;otV[0NL&4.Md29MO#gLT.TI^8R^mUIaluKsZ.$5sSjZ$Uu-$/cF&-mM!+IL7EZ4Of8F7nQR!D'-uAmFc_K9'=1`6GBBKl@rdLmkUA`F=@eZH21`j0^MMgGC8!$)kS.k:A]h2/ndb\10^0KbZ;WWduN,(Ch:''0mdqFVGJE<(iHMrp&&R6(acF?SroMbLO$@T#GiAB]#d5lI$a4]BiK`98SaKamgH-B]D(UNgph7D_5&oS,GW2oCj'?$D)(C?C&2TL3V:3&>Jo1W]7k;[)QDgHoJB<_)acmNn>HD2SH9/dI3nbKU*ShHD"W9]hj_F37G21OARFQk20V`P:8fR&u65gdR(ZJk,?5ITEG/7Ci.^)bZQ9U?`4i!oC.1*<"kqfd_dam?3"hd>cjK?+=*i>X@7:SMf8-;a#E9Z9OF,R^I=3,t2S%$I*%t,^H%XKmdLWQ:?bZ7GKTnoVmk`F3Ik@.n;-Kg3P(qL/8/kheq8Yh+#[1-d$c`:aF[W(WAY.KBMGnY`*oCt;.A@\903+:O\+Po.uYM9DU.R1+OB6q7FUKn%7Fl,ou%iZp^N4lBL>5i[tlbr8u@\'?-+[M9h,lgTmf(o0=Q"V!Lr9n%=gqUC#Ke='5a[4E,eM]E1I[,kU$\KgMCH010`k]Ch:'/QFkgbdqiU(.O25Q>FDU:l??dI10^0K9$(m,]#`B;A[^D^R)B?aHnA@=O3[X.iKA%"-sRB=\6kGkiR\8[ANkI\^lurf]qde97lMRFEaE9,os[Qpc>RLG:4J`fcgfmKe'_X7kAgg!L%Yu^`T'[2DbL4ZJ4+BMmS9#T-o9\]'-d_gFeEHh;%3Cs2oMDRYdP]$e,q?p\$EZL[Ep]n8H20^Um'XA&J$\EFIq(sdKmEgXsXR3M,pIqn:`JmH@1\!`5>PNgQ8n/1_kRaaQWJs1F-%hn9'Uu_WNNL57Vp2O&>M7_?eRI7K7!0Wl*>g[9tT5ePeu%T(:@CF@@D^;C4\A;6FRknJ2G"XisgXWuRP02U#3?YGp3tCpcuLX3AXA>FDV%'n_:dA]h20$%j?[PD'LBf3?1m^a@Sm<1;@mk,DoK\&8eE5/eCnFCt:g[0\j0-1FLpRhF1I,MHJ$K([P^Bl!#]F\E<2T+?oCZ*K9Gbm2\E7&ZQKDjlQ'B,?jX3T""*b0Q4/WQ@*).;AM&u<.-#$W9,jV_B;]h$AJR]4l&_WrSH':CVpEMA4Do*i541?BBJOM]JZ'T>o)9Zuaj.HR6=4@@7r+k*lUBBVr_La51J>._k-/`2+GXB)D41q50t\fA&1d(MJ%1u0bL\(l+[,otga;D4u./%SC4/V]OF3m:,ROUh6kd\6+*58s#PrQ\Wc+jVQ7EJ:mo)sl>]#Im4L;F,%`3Wq\3Y_CFe&p)5!,#^GT*&XH+$s83mh0gH,SETC*9^,L4dZjD1N,HOXQisB;D_VG6BXG)u'9n8oFMCH2lH^&96s:!>Q-9Qt6onIb@j4'"7_s2>Bm!D*N]'t&er/F&BFT,c3gu:/KlXY_Aa2_IC'?KWkr<.;raO=)>4>l`:b_HL_WNL)7t4#q>/A-Q6\$"Rf"Dh6eC.ERAW&*q?CoQtL?VunMBPp)Q.a;rPp!:hnSGWP:kP13Xanq]+J@d%G^ErLO5TR_N"'4k5Oj/Dg5W6IIZjs8nTm9?i/itL-P^+lbiU+GpPRY[UQQ%9$YZ,1G#<4U#Ls4N2kJu]%E.NEf.#b\sb"b9TmJfI:f4%GU=fe*9jK$CJ#)mkUnK]S:T"bb\u@8Q9fo%C?`n5B^tOLnPtp,LQhB0'Vi8FF(+o"%RX,Y/p'h)qcO@;'!'f^#LP)@C6.;4q@8*`BPD_BMbf6*`raM`,"IZC938EsB$,]0$S6B36LHD(&E%/5ij#I']lI:[[Y%B3?f-._'ZVWBB)=QA/37N4[e"IUY)J)Q&>)U=NW6aPk$51so(-_A`ABqf":K=0`M6BmS.NV:a1>dKi/-IGg_='.V176i?kYl'Ue$$$0'!$D[G97qo:QZT1!*^4&Xebu1j4d`_N,P)5;!`ZS$#^,514qb"[1e<0\$%$LE0IXg_p0))tn1m:m1XJT"8As@SA!KM[!huB%QMV&pgS%c;rNtIiS(K=Y^ukq0S[!;QV47+%VB0)=9R>p]6CJ_hY3G.`da*@5$tEGPM2/XY.+!T&N!l0i[)KODoC>RajOPB?)PW9,U7HG";*nOi8;CjQBh3T=2WPW<238:[V$@;=)a#^,$5V4`kZ?+K<_QOt6)HWEkVqf"(Gd(sqAT^LoVWi>7N6A@Io7W#Qrg[24JPY\U1Pp^Q.a;rFfmp:lLbq0hM1`Hi?AL,E:=sND/D,MM0`??IC;FPKH'hf>G@&n',AZ^-&Q>ienX`(YH..rkll7hir?aY$%_5AQK%BHrC.@2Vh"-/R'9I7GH/L07JCJqn'X`94kVJi6:Z'QL&V$$Dp2YVlm#YE7nl=AI)m\gc0PLU!r*U(q2paYOVGCptg$7r[>Fd]WRB=Vf9[-UM/$kMoC;XjfX3=V>MbMArAufc1#@t8(DmhE*RB=\6DkC6I6aN'2C0TN=[MSu??I60b;[;cdMp.`7dl3?ToRejA+=VfQRN6t#aXg<3aKK14Jt`".3X@ll423a&[_TZ&=6L4g$\bu@o4n\m;+'8J,\.S*,-PZq=9.]B+6[h*[NVM;#bN83Zp`+[S%PUf^0D^?%G^t.AiR+HEc)gt1#>]\L7>Hd6iam6`i?1B3Zg+[l/\hWPA!YW$PK7\Ff!YElfpa'q:/$f_*l*>W'hV'6#N5-0ct0&ZFSMR?fscse;9j[(0/qJ69;cE3,iN=10^0KEb)U^2d>[B7"T$O@qMbL10^0KFrF^KA*Xl9Q.[Wt[PD(S,dZ%b10[0qRB:QWdWJ]*I[s'S`,YDpKQU;I-?'6p[!/R4F"V^HRY;k#C:N5TDh@6K%)GW7Eu[0q5H>?oP_ns5m@W]`*N+e!(t6op1R(9E.W=&-T=I5E&[l0)eQ%)#%OC%!;OLgEXUD5'(JGYYW5`dCPY,aq/KDuu/)W\LoJ\TLr;LjV)eQ,Y8d(=N:1Ab;PsitGWfr8%7#Pd'kHn$Z=j0oNPuD9H][fDj:ILcI(XJJNL6b=KJHX4uAh12fNm(Nk?e8bSXgT_,:l2YR8ZSr9KP%7W9(X78bZ7)hOVgeTCpr%O>?t&LOL03E"%9=4PC&dBXYKWg$5SVYI,)4G8fGjQ0%KoDS@QII/S/sf3\j12$\SEEB3shX,Gq<%kWQ`SUnt4K=s,am^Vj8bB-T0\.^hCZO!><5D27F&$M8.Ti[ZE_<;%I-jP5#$2EPe4qHX@*Z?I84TM=R99G$jjB/\]WMbmL/gua,\j>@,0_s,HVS'O9<^$_CN(TIELKX3m-)G?B0o8PV4CMdb13**H+h]m/(O*Fg_6BQ;c=\HM0?&Qntf<#QuaPcZjH9lL`fKF3DGhg7aAoJ7T3'Z)??4dDK6?n9@PK>FF#6QX&NSLbA:au10`k]Cpduc)F9V.Cc/Sd'@kLO1g?5^b\@I8-#F*o,W\]L0jAKpWI\*Mh\3OJ69V6D3ZN/?+d)>O.Q,G\OpKcpGh?i?NNqB[;!&f6'TE+27/\`e^;Gp>Es'LC'iH;D%3Wn3_n-Y>A[B>JQAf.'=fJW4f>/<*-)$&On+;X29`Uo#hjrVfPIrqRZ;9+&d:qX/(&Hb-#otb@rfb/Fa::CFk9t8m^/:t*09CZk/0.7Ht0\63u6])?4FYgjCn=Nf,EW*5//(dG(21#l86DTf]k'0C+k:eS2qP=7bH?U+.b`M_c@GlbH`\BZ7O2Q75A)8XishBA@AcpbH`\BZA-M@%9Nn6=dX0A*;T=U]fE)rD,ipKBNRjNEPPSnFA+^NoD3nBW/'.D4icrS^Lq.BM=sJbT1Spmlp0LBG;48)JI0SRH@V;DMHZQ=X3bAQ_B3[PD'TX\-]OAQb=1=dEV.Q.a;r(%/Gq_Yn?sh!6PH^]'42KV*X3+ahm_Xmdtb)u)W>fcU4]mp6J'k3;\\A#0t_G*ZkdHu-2*?<^PBo?>o\.t$@OnZXp'fugTObH`\BR_$^DAh12f.@I:hbH`\BZE0`T>FDV;Rb%u3gZdj3MIkhF:X`Xj9GNZhM.s,I=)h.4j6MTfYbM`\uh\X#qfu)dHT-%0T$3/q1h[4l$?`sc'>H>G,iF_lGqXLdJK%\;P/Bb=MbF6#dV;DMHZQ=X3bAQ_B3[PD'TX\-]OAQb=1=dEV.Q.a;rFDTca_YNkQ=X3bAIXpXb%tXt.ODEdAQb=1=dCpEAh14<:2I>l>7A!-%u64JG/BgD;RkUi%X4B5iGNE`][C!mGM7+HAZNH3r)rgKX$.:_g2D^I4%f\MRc2_n:55[iu5;+eW/*/H:r%I1XaWqDt6LWGY\,I#rsN)Atad?-n5aK7Frl`p[QKR)L`B1o^8(qe^\,cH%(XYS$3P&.%W.tRB=\63AOfMk,#)DN\5KeX0f6ee]M,kAuj`6ZdmF*e6?)aZdmDRbZ;'O\m!FDVYPM%EA03,E%FKmW+V55K>O=&2XbM"qhU5SpXbLFr[[LdXeRE-k%C;>QWY/MVm5Mo\mUCFKgC4,]WMdTtpcmXB5B,3piRR'g\C3DMjp76X'jk5/)sk93_SF-9/(eTbrE+AP*iI,R"U2%!'.qMEE`Kdast6"iRF8uQY?IQEogB7+Ma5SF"00/UXs*/AQ(8h&0Dluo73`QErWtn[rs6UCn[@S?d?gIjBQ0BR3WC0Ah13Qfd]L(X0g)O6Y3^+0qP9nXcD)7XNX`*OP-Y>bZ:!?[PD'TXish@bAEtK,C)f!5c6COCahV\'QTSCi)9/rHZr1BC2rdg7EW.]6RZ.[iugacll8gg[\>k2i77[7k^BOtqf@1t-ms9b>mVrHFF9PZ*L\$Y^m%O?kc7ch"8<^fq94IMY?`i>P4R&u*TC::E#W^LB<`GB[BZISX">nr*rp`+U\4WhE((I&FKoT+aQ[CbDhF%bK:FDV;<]Mp>NP;bG-6fcrN?WSQ*uFHAnnc[/uhXVo?M&TPP?`rWNYTtLk%'Uq'X?X2U9mDLZg-=DFOg(&hf>5c6-\5%[G-tqbI^;D.6O#eXi@B2>*uFHAnnc[/uhFrb-.K#DRS9db3A"nUo>'"9[-UJ?MbB+u6]<[PD'TX`@s\10`jA:ieR"m<7U`nh/?i$;[O2X0F.P(1sV@R@:7ZM^f=,>VTGgk%rRpK;uf%J\1l3^[S5'_l&PHK[7B>07<2UkJNd9SdHRSkFqCk^\7?iHFFbm[S"']S.FNPeLuYah"sE_B%\YR"WUoAU;%=dl,ZT[Q2&4A,)aCB+Rr&!o--?k`ES0PV=V8r'%1D*e^l1t/4Ro]IHifi,X0Tn$-e'GZ3jY+)C7@$fdP4s+QJ&9-Bhbui\Ri4\4PB#2l`UY:XD+fK&8l^S_CNCRR*n%\iP][h"T9W7BNm`O:Q*eoqLa(V)ml,?C^AQ0GJQTq$F/PBPaVnkpddWcmXP]_3lnSn.@VU"]+d4jjHWP7p+7i\qDXUdRW4"C%jU9X"VFXUnRtVFM"CSoB]Id68gH!)O`5^N1T*-c)'7=pnUqZk5,\mE.hLleJOZ,n`lo?.e[PUpak%)D-@QfpX&S8C+>FDU6A@C2G>J4p?UTNA=_+XishRbA=Rp[X,R07GEY$Du.:XZ"F)]0p83)J-?4>@!JqY.=PsE:;&TS\OEsc9ccP1EZ%.#Ne\DhtlsSiBMbR42^OeS+hY=NZ8IO>>*r:epOtA>931A_Ms7:iA5+ALM*6]oIWLm&XNfi)hfN],-a."PXh'2nq%nU'hZ\%M.Y.(4>DY4>"m+EWe/r!M(B93A.%-!hpm3G%=j/RbA2o_$.JX.2'nMo9Y2kp2]mCJh3AFc#\9cMUKs^.bH!\jgm=ps#7B05@3n\72m%>FDU6A@=6t>uZYSbuS>>frD+d,Iag,&t,2jdUhPYZdh#^.kQh8.T8@d2f#G,W/4"%MV6-gA[]aDfue,R;'dtT>E)WpX0P?Vgq'd^A88PFQ^ML1%bkD8C'O0tlj=+[8(SM.q-)@9f>26dq\FK0/231l@I(:):)HUFS>P9@@02/Jur<(8okCU6\WFDV;<]Mp>%F)7`FgUC&>Wm3jbt68uFih^@ch@Sqh,fhRD!Q"t$ZTUiVof!b[R4_^Cp]gU4gLW3U:%d*46:+WM7A1N5'*#MX_*Ugr09)jBL%n2`:/+Sk'q>l@h:7>@LX"ui;mY"Tl)^`Y_[Va]WlEi)@^b!e10\UaXm4:.fP7h'(l#.,WK-Y`iEiPsm^717^ce%lPF#t="B"0>H-^d']<9Fm(X1:RP!a$dPSl0%aYY!D(S<V*14![::[M194_kHg+&XG\72o#WnNA>[^p"6#SOJ/fd^?@WsC#XQ.a;r[8Sg(,uZB[U9@^Ig^d-h?rFNW-f6a*"4`.=Rr"]OMV6ki!Q^mgO\cC&f,a/*D.*$R1CNE'Skaskr-@&Zg[Dacq*:hX40rA,cq>Hn(W2OlY5idf.X)fJ6omtmKn030rg?Pf/S_cW+!?"'M;bZ8=+ZW3%0r/hN'5MYYo$\.^<=+r`\q/EON'^g/Mm^D8pV:_fYn65Ud`ubdMS'0dHaB!\7IDe9#h9?!q^N4FH/%X9_"Sr)9+"m1fTkYlAA?,ZF]]Pea<0X`Of!Pj#/J9MuY!AU6>E)WpX3)mCQ!gRb@4V=mK0t>>=e9ASXcWN+1a?hUXk>pWQ'd[Ho6ai<#:[Y+KkerW\n%%]9WjbbbZ8>V*1!=,`N%V6Wh;ajElDj+[PD(KaD@+jZdmE8bZ85=frB)8FX:->;mY"Td4An1U!JZNe"!18V8cnPV,",eM>8C8X3)mCQ!gRbbuR21f%JAc20@!C4YNt*XfRF1Z&B;@Auj+>XfhZTn4NRKGdTX&$dV$N5(@H&I-0WG_ah=_KjS2:/3J.7\)EgkHu4,1I5p##*sqNjGE@\<=ZL;@k1%MW2StEWb>?Mc-fue,B[]2u4/$kMoC1_%cWgn*8$'r``Cc/S&bZ7*#AULb_.@[H@MoojI[b?S?Y.sE$n4II[][g3k\!r/i^\lbt_^eC;#s\IVItfo5T-&=FiUDE3h[BJ][m(Z-[r6aNghG&fO0,k-V9W;i5$R7d7NC7&?n?HWM?FUW-r"Bk&h,2C6!iA65:a[SS@fK_>-&H">R2rQUnc"-$4NW(C=V:F`7[)UeQ?CkWgn*8$'r_U2kIKfm(`f$b`&b@.eU^/,aG;s6K9R#=#b,p-.KE*b?VXSkEafDCh:&tOkIln[?GjYCc*f4XX^5R=+[8(2-Xp_/fZqDl\o\hWj*CG0j@fV10^0KbZ5t2Ch:'/8\AWCR[2/uPuFh9_,?\iXgUh<%\Te)f+=@^V9E4n@sD;,N8Og]fV_a..rqAn>Ymn5POF3b:gRHejc#=[K7#+$>E&\[APUA%OKWVQ2Z#1(V@U0SoZ2T0Z;T!BkP.$4CZbg#!u5a9O\m9TqE[6keSc=,q2WQDCG+&+oT.UC8^Om-*oEo0r3!l_)b$I@$^qTOo&'j##I)sgb3S6NDacB\87[Djksj`[?fbq5_RJU6]-Z!5f:7.lpHAen_L4ZO.g?ij_[2;*Y4WOInocFH`)RkLR=8k@1C@u5u[J!8P?E4qr`E!u(3cSs^I-0M3n;u4g%CT^NX1b8=O'%?=bDe]U=H8ZT\4(NQ+!fHnEse5c9:umkI[\7G6L8m*Fh3Ym!b[jA'%VNp(+mO:?<8BtC<@:RYt#.@jk75arrkY'I*K1p]MuWo`0EpV?FslEC@S>kF_1)8+gA?IJ5d-YM/TWECr]C>,$`1ZFP09)nNU/M]CE>qq*L<"VdADA9\PndC$rBE!]AN@oZ+tp=Ys*W,NO]'\8qDLec0"?'8=/*k_FjW%q#N&!E_T(TVel5rAc&0Zdkr+Wr*95[bRB:(-Aucg933uVE10[JMVOEk)C9)"rZ^'2nA@C2K>Etf]bZ5Zp/$mdMbA9%g*G;g\;.clNe5Z#p>AY)aA[X?uKgoXS67]0-ph4:`ghaY>mN5^EpUZ@R3stBRrNF+opAZcCcojT$+7II0qqXWu;J`bpCP5bM"2B<]<-UrLbQ_;9B@V-_?<:s-!Y'Q;0ptu&4b]gNDt-Mq(o:ui_heNhGa(fdN0HUOXYOhVn=XfcY#\fd36B?t((/HD3UKa><"S=J'fI:o9IGoHnrW8Bf/#.l=TqX`Sf&b\NKa=!!Za]nOImQYHT^4_KbdSAdB2V_8[FaVD.Ifue,r,IKrfh]\.%ARBfJrH^Fi<>P]a?KWiNeP`PN%*jZ'+B(+^9IHK$r(O_9S?NC+DtCfR5CnMBR,#QMaUE`C14R)mF#uOD;``rVG_Xo4]7(dI!Yb,X:"fNY)p*NXF5_ldmMT%]^:$I&1:@uh`HC?VHIln\9"X-N?W.:cI$5BMY2)Fob^9MSL`M_3gt;j=\'&+U"O'/O=J4MmC@2N],W_5RB>b>fkRS31Cm?D<[C%IH/[JI1>*uF8]6%:W)u)4`W>(ptbuR3$`GB+oR[D<"*OD$a8i1="L"jd@_W?e\_._XoR.F?+:TfI+Fm"hlg0MKpH_2/M/[cRBb;\&i_MN38S#sn8UW@7_[`Ye6fue+gj-iU!ajb,aZrtURAugd1Cpduc10]UZ:RKm0ZRan76:B)VQ`S/$mdEA@C2K>FDT]j'sUR[CFpp%X4?LiRM6Zr7:TZ"fZaDg3K`_8%W2[me#b-iT[W_IjiU-S100055J=>FU#o9OhOh4B%%Kse3^%9-QYH!W]$pD_pIUm;,57rX9I'H'+*g.L=p=N9-^.ad$kVAV=4nT\O,(\[7[g4%^_a0,^)Q^-+8i(("2[B"`MZOGTeDTXb@N8n[hgs5UO4]cGQL@k9H8tqZQ8K35uFLC:38d(!RERb]GBmD4-3_OFMk++B_B6->`mlQ$#sg/AWp,f5,$,g;[16f@jZY>!Q$GE1C8=<[c;jEMOcMs>1]?'rU6<^UmLt:KV,1KVLG.,PN`_XC0/JmA[X?u+`]MG=Za`AA[X?ueLn2Y:mnFDbuSbLfkOU0Ch:%1>9S#G>?O&0Ch:%)_,eOQcCp`h`P^ZhDu3CVma/[%ch,p!gY>mj)#fk_IOJG.WUM"Eo:=i).X]j=GD:;d>No0qf?2$94IdOe&cW8Dk7,D,"L'.lkH-fQXVK8sWYHR([F')Q[n?%RF)E:-_eca8<@V0a?dgV)Hm+B`2q[e35YQ+Xe06V[2@Ja\:4+hq:a)BqFU$ci:7`@pk=*%KGW$ElS!8YZ80E']/H>Do81rFPURo>PN9u)aj?I74AmT4&^kdFC^3mt6[SDnbs2priEE(B26(08H_[r68I7$$SH=@'tXi;NjM?K[4!.P8!WY0\F%Y:X@p)McO;AS&<=6(+i)bA9&I`lD,n<[3!2hb2p8rp7[6G_^J)b#c@MfeLh1Kb/6$P>8C8X3*2%N@qP;KTb$2CfRq5Aui2ZCpbcMQ,8`afkMK^>EtI3S_7cC10[bEfkPVgO0-"W`POF4aSSPD+G^-XJ%0,?Pr-c*(>R:AU^]0dB\^.Jr*Oga):5*>HXn2t6P8LjrL$6@k"Ho..Eos!aB/F25"WUA[%Nh5m6seRQM+pa>j]Sl&oh)lgOB+C)qt&MIqXCSk+1f2C?dQYtUpkA>HR4Q3o6RfiT!r+.C?\^@'Ri8"b)*]-,5:,OFGZN<``GI93tZUX.Aq7Qb(;,W+9f(/cm#r2T+[34,)_t(NYQlFcs!,@79.b+X[5#k;,(6UUP7p\$02TCeXf2rJ.H'n4"3i'4Z"f4?aXN4CeV-di"DIG0;QL5p=ZHL_'Yi.BV40rUercVm?pm>FDV5,dZ%J@[O:G10[IBAuj'WR'"S5gZAsOQ.a;P-kXd10jC'JbZ6_Z>7E0=fd\S[eRW4!Wgndrb&"J&hCr0%XfR0gn]V`SeRd'-$Xr72[G),](%cG$oTeoQs,Zo/htrc?/UZ`bD\%&Smk;Q%JP$rE4UsH7I@EmV48A@hni=g9*:;IRt*dq.#rglH5/4_Jb\^XN203(:nANuLP<[fKAdU+!bHE@acFaS"WXi?]]l@D9$&72Li$a!Lt=WfWrAAQc$"G;H%H^Bh80%d!i$k3&4X:$])B\$Ve5S4,P-4.;C&gVSZBsc4Bj(2qX$/[Be>\mlD*\n5!@"J+D1hiL=_s-Oa4]]KoP+Z^'4D:^``T=a4=#%':Ban6>F(a=.I0[r+Y&aY5ALc%>?5e-`d'O0YNsH[OF7uuKk=,$'D]p?:JtIRh(]XqFLfMHT%_Yc8S(C57Ma;.J@gH.X/D&;I22HRp7,4LPqUT_ALbUAMZfoWZGq4=/@%i=29XVW[7eMXDIX5PXHFWgV(>@.isFPFK;T=6R[NE^"qXYO+KX_(1;X3*2%RB=\6Auju>>-lBJ>8_Q:_o>T*'FF$f^rBg"V!=Xn'OWsB=ZT!`!\&u.^-C:5m%RB:L?[[OeO<^W^OR]SKlZ$ok/l.n;2U,97/$i5IRB<>=ZdhldVIlkV;DMHZQ=X3bAQ_B3[PD'TX\-]OAQb=1=dEV.Q.a;r[1cd;g'cjMJ+3EqgOAe.n9Xu>n8`Rnr5`CJ*^5#Eeo8+kRrGG(>$0HmH1A<3c!UK;R#Zg$:7kVrYHK#YS#n6bZ7O2)X;R8Ub%tXt.ODEdAQb=1=dCpEAh13QfrC:\PKS<_B6AN5kn](HSp3BD>/dsSV=<$b%rp^RB8$`Z7O2)XJ%CRRB=\6V.@$?/Bb=MbHclFCh:'/M64@kq=(k2r^s]XCPEe!,N1;)qLda>T)ML[QE1!=r7&3Y#bU>I$S+eSouV[nJ+KNjKumO=;bh:?'1oSF5iD$721AQb=1=dCpfRB=\6Auefb>?R8'=dEW%6Y3\]>FDTca_YNkQ=X3bAIXpXb&"I!>AZCj2"9M[JacjP(&ii0r'0/Tqs-HRY;VsZJ,Y2g_eX&4Ybq?E+9#VU^;8*s:3/&Cmk0AkY-3Vg&^4:AAQb=1=k;)6[PD'TX\-]OAQb=1=dEV.Q.a;rA[X'7Z^#*)Q=X3b2,n0DndOpi5<;8YB669$X:jrH6mt5SNdL+>Ou:UC:2Y%T/_9^XGpVrZ7O2)/Bb>rXspX+J>CJ-CkU^$*FCL:FmfEZ_Dg;_5Q%Lm%Ym8jbH'SRCirO`f3&CR]8a&Jb%t(]bZ:$@=dEW%ekhd:bZ8>V;DMHZQ=X3bAQ_B3[PD&moXr^HB;tBNX]C`(_H1+CdI>1@p5s<0IPJLhDhd#;6fDH&n*'31>e%%X.(m9C4A<7u6qs>jC!;R-Ff*O]6>&`jmjuoGMS;i21r2SWgsRtD_g75Kit_rA/+KhZ6c0aT;7Vj'W:M3]7e>'Zck:B\FWgk%eV$MopNCe0rFOH7Fd5cPo,H`02594Kd!OWWO$T=U%FXGN9&:hj[h:\[_-4g/Y+&-+k)3HM$+L28@5(F9g.I&ln9CJ8:)`SE/ld;$&P1Hk1iRfYA.WDN65lA-F,&mQ3J91Ug!19bp"l\9U;g+LOMm%[cbN@DC`BJ=q$n&bZ;-mCj"$>A[^='Sb3b$jK.K)MeXsZ6)+&#JgI#1aYYAV9easGM,qkMF&$ijktj%>eV;cBm5(QklC?OB#:2iN[0..GP^5uTc"pt"WZX&S>FDV%nV+]RMZV=^op2b#]&k=\:9:?S=_UaDP%Z9"?0F)5QaVX7O=OqDTh7F7(-/G+cD"L$7$))qZs\`'E\bm2=VFIc9;5F-b+)D$6ori@Cpd][HM\+b[Q8'0g-LQm=Y7HX(8]m9?o)#TXX]-#-c/mdpH")Ha4BCiS`ZVs(Dap/\udZ9Q)S0QcT_#8\C"Cc:RA3W("*D3V%?ks("%?$I\C?sDB16LZB/B9$Z<']=r6]_=%MLf+\h-ETjp0BB1RgI,9:OA/M.LtE.uoOW*2NjBYb<-jHc*%H]V]M?$*N)EVlE,>`Cp5V=8.dFAq[:#5%e'[IMN$bJ6CW_JbFFYX*Nn8PLlbtH(?)*,#dZg`1G#PkH:A\_``tt/"AW*;JjJhOJ*LE^bFof&b_]]UqRUAmgW&16U?EE;C#\9CQPo+]a8C<9_F>VLTW/1#'L][qqo?oMT9i)q_PS72eXi;NjQ.]oMSZpBPAug'\FCXL!T5C>E]+4rk[4V:*cC22m[Nb%rpB>P1%:n8`S&I.CAq][AtVDD`6JCV<3IZZI&XLB19QaUo,/R)h4dt^!+AY0>sL$F,Ma'5Bl8mo%`LEd_D_.85>)W>_l(!lg[\c\W6\3cUU01>E;K'9BC]MXD2_hm6t"M$kKYniF&WM4-Z3\IEYG^glB;bElR7+F/gnN&b=S52SlH6I[\Xj;a:IHqp4DJ*D9hGW!BA[\U?Ah13Qfo#'^XisiA,%\*Gfd^O@g,*#>OP-X'D&Fd7X&7WuCh:$^RB=\6Ah0u4=dZ>8Fd]WNA,::a!3%Cn]$M#@i=VR+j+L"QEe%`,$cNU@-%`m]X_PZ:3)DAl,+aj`Yd7^O=?^k'CW\4'8;?<&K6/bZm=:>p\,-teC<-CsY6IAkGLKdaS<,]?Ol2XMDdKXqqO.m/3T&6DDjQIjmuFm;CmpD2as@"`!nLkB;%XNNZDi,qAWh(ip5#"HW^YLDF`c4$,u(ZH;B@PBFAiuTg@3i&j`KPCPr)V0HRPaUhc4E"(MNgd^JrnHC1>FPu>p7:58_8u+g-ld)9"=)D/=ftcZVTMG98]%2;JJn]$HZHrk)`q[ZVXpL*#R#Q/JQa\Lb71Q.[Wt[PD'TX[W^rZ^'4dCh:'/0O*'PZW2EJ=ibDj[PD&a0XK;ag$415Z6L)eQ.[LCI>/210`:UhWh.KqJ:CnV&`lJm=a)WO+^khp#Y[Q$VTIIhXaS=E-im)K"^kE3-!eiB%`&+j6$c%Lb1Y4Nk]pR)lDLnA_(>@@unPZ_*3aUS!ep3!rBH>eo%@&6@qm6&76nT(2TK9C\]b12Ms>CJF,Oo[AY,TIoZf)sEJq&(&Aasl//2*"$=&cMcg]MuM"5MXN5joo=8;H==b82tP!mb"U"!&&O4>;>)P[(D#(r@ab&jZ]Y!o1aggZX,[ud8W4`<'dFWZ=)^8R'(at.j6Uq_0A?1\KqY>`hSj*nF4F]!=CFt8_IdkYPb>1>B5-Xe'n@k6\#f#riPMomIf+5`6h1b@geTTU.Xisi=b%tXt10^0KbZ;-)W7f=0A[X?uD47TlOP-X'Of@$VCh:%1>A]h2bZ8=+Z^'4D;F#9ACh:'/<\UkFfr>Hb>oE(=(;b!<"hcc8?L>/;2h1cViF_C@\6o$+f3KJI\9g.3Z1$Nirhg^L'Q,c@Z5(Ock8dYj=@Vrp!F$IKB3o.8eA[chN@,+rbi];6GLJ`l^W3fZd)`!fFd_/*S\AbQ/aAOR\4&Kc=!q0rMkFWOc0GqJ`XhirP,fmn$LnS+IkH--L!tAkl+&$F*]SfAGL6cK*iYMD>:.f7;:bStbD"&4Ndlr)DPD?Q>\A\^QosY":o<5sHgd:1=qe4q;R-lo?(8mc?qIc(+u[lINu9MZ*US%A#QEaJfsRrCn_[0iGo*NI1&9plYIB$L`K@rpZ$d*tKH@U%$pZ_SFDV%MCctPRqA]/10\U_XisfiN@;-`VV16dbZ8>V.Vs7`Q!qs'ot(fDW)@6k\#7aJh9#dn.nYK\3pL7(,FFdg[]"'4A:?[\h8/B;lKr21Lt`t*JhRgrbXcu".`)1(mTIc?T7&RMh3C^:l>HEd,80&3WobuBII/:k]aHcHHns?ThulZ+_CV#"45#8@%G3BMWe:,:.7!/F!/X+SD.R:O.(WL<&FRkX!s#G%S'=\;AZjM`\h>^rD3]VWB(EK!G6Vc6#,VB*Yd$0q=>c&9%:8>;Fm!3)rXJt+UF.?&If+6Ik10C9/G.Agq]k-m-JEnF"=7h=P=FLV70Uqaa;(Zj/)@O050k#@Ft$"H"kq(&@N)V>J`C;%hqX@-7S;@+O^WrLI?@a=&WAA>rEOEPNNZQ.hChjr_-Sp`A]h20$%j?[]72Ff3T3[^%o)-2[runXXo0-H]-j+j%/s[?ZAO0`3HZ-Hggr"Gjb(giHP4942Uk*[DOAQpVQ=Z,N/c02Rh(R,PXktsX5Q[+O!d&.SL2-58bJr**.+=U6#2T\@s`Z]oO>C%Jno3uiMp=%-W<,@ZJBb@*QDW36s7\HFh4YjW,?WsX2CrHaEp]W",Nij2pb=SZci#0\47lYS`X1CuDKd4&OmX+VL@\Zm`'TCZ:\9bOqnkFB-GpLe\>VTHNXisg+10^0KbZ8>V9s`@UU-*%gb_Dk7Ah14<72+`"Z^'2nA@!9l10\UaXkmA;Zdkr+l@R5\AueO?F\TC#=q%TVk/6TK_=1'@DW'O*f=pshnGI;Or1WlbD>;HWp^b6f5B^\LeS0bZ5/$sH+g90hR.F?+erPTab?"J3c6J&bgF%`dSo,\GJJqj-"^uFZZ_TZ5ej1T)k#FQhKh.W&"'IkiCr6l9L`U.O10LFJ%PY@o=F$GX2-EaT[KkS3*Obeu)K4#XCj0S87LBH:a71inLXmSl%bK'^]%8,6[`oK<-Qq\C42W0lik"<.TP8\GN``.G`1`bW,ku(mRdQOK9]c]7`Fb:JH`)OC7Y<9@)rPc]SfobqnQ_bjFPp(J!W\7)6T@/bZ8>V*1bZ5FDV;<]T:#MV2anCh:&t@B8Ng(qNjS=Ut2Ks>[d(TsiWXi(T0=+Ko?`-KR:Rlq1]j/]@+Pk3D[Xs4$5%A4HS+H9\*.CHBZpJN(LiA&io"8$9QH%SXaW6r*>,o$b07c!_cqFbJG'#^\4(10GA]]EqA7j"N4SW),D@NV$d`-%Z610j0_^0q>i?P]QNj@9kS2kl?`Xm.FKQ[,Jr+/II2sYnHF4QJaCJ%R?>YL?&2Cbq"Y"5>Q]h>EVBA[3>%V7(FV,!a9hkDKBGT`C18UrI?p^9LKQS^E\&YtsdZj2OZqnX/5Q%g_"2?H;K'R3;XisgXWuRP0bZ8=+ShXGdR'!Z*[ONf6Q.a;r&eRl>GBnVPU"tmkqFPLW7)*W?:7!N=sMSs`-^G'=u#uPRh>Nm&m=S2rK&kqB3YgSb+A1MLs`#)H5dLsDt>bQ?SY>[,,r,gVLpsIQ]]Z$,P1X3MMb"*:96>L5=0k37u#>(>=7k>hT#'1e2j9G^gBJGm$l0]/,P7Z1c`Lqn[nL%J;*5g*;f$_%ND.L:?q8FaQEXisgX.rLcW2U#4T10[bEfue,r0=-qsb%rr0bZ5b)_+5ln-g[+oO6SMk)]WnlgJ#iXskkn_cFFHVoEi$Xk&kMWnV,`et99nL=M0:R@:.@Vc9(p!gVueg*ul&S@3/VGE"Y0OI8K=1/SG(SV9c/8easo(JulD>&@4o%H^VDd:.pY@PY,f0Z6b"g1$M_hO5']%EuRKn;eT:m_:"Eb-QH3AuhUL;mVbBb%tXt)Ci(Yfue,rOP+BL7LT8P2-Xot,'T#-ZW0'aZkg`![;!(L6Y'r?10^0KbZ7)B[PD'TXV*BnD:OFC5c/.oX\.ZW;.m=0LS*-!RB8BlDF8V:b(cC+J(V/V[%B59ABFQm>o#Ve[/$(,lQSd\l447j$a%PmM(CLX`$3/8h)RT(LhG?l6QGq<^F*^%0L-9B4G-hH@60\hgU0tiV+V-*dr`/W-QW.=#q.8*K[/-$Apf`?]hHW88N33ekS2k.N`[tZ'-%"oFVb8n&kF,[$3"<*hX/qCX#fk7+7Lj`\`/2K0"A-='Ic@8OV!CH.i0TGqNNDULM.t^*CXhAP?9_BQ(9`W":/_i8UotXh48qa6ZWM;lsOX>n,\KQ%5t*QWN,Z;YI4)'b#RP%mCb_hA%t60mGHd,hR1thjYD9+NN;m#_jFqo3TbQmXnaRn[bl1dV-%5Z/1&$hmHHj#^un:tWQYM0E-t$e$3u[4gsI!c_HLnpZ+hVbX9&3GK3M3@JBobb]MRcKlpEX6jl,bC)S0C-159,/UJ!Xes:D(c]JX#Y4@3:WhkeIahmuUEc)6Vn$-l>&0)0jdCq[fWL#5;4POYjSTZqgfbLO_4#\AtLh>4[Z'nLOM5Hbtn9s$K)Z8=e&-tWHi"`=YDktZj9;HcZJaH0?I^:P&9X$&aMt.IrHNl89:?H3h*B0W#_%HnK*NG>m*$k!SB@S4VbA_#@eA]A[;qj"-fJ=m&LAD(N6VQ'Spi@Q';S!Y'+E.i$7nt4jURh[F=,'hkbOb#QUKQgqXAkICQM)^+i+2c0P+F->lnM6fgHSP0Y20>0kHEb,B#(S>NQa9H&'Znk!PY,LikYc@L.@?d2@Nm%/WkVS5Hd.+@0Ddsb\0s(6-%U>99.)m^[Q!80^5#0j_465>heP!rTE3!rYE2u/.[gKUuAajZ>E3!rY54G"q>A]+!>s>H2X)P+YWsKAU2)uL1ga_)/gkpQtXgZ-L_Q>kP>OCZGP_<7p>O@k\\5g%=_&\87Kj.iN>91DVj:Z@<,F#k@Qeks;Y3XtJnrr)u.+q^*.f%D?qBmSM4Sqgo5Q0?m-+D^8,K$?V-$t(&r=-ZH)S\4CUTl5#8pcK"^i6oC3uV?e+:OD]dYc!ipOc25&!`]g0IXbpY7RHY=%13E39/(+YRe"*+82H6aYon-kC"ifSXDPcN/jnp-gAJd=<9=^"S(/43/5m*6SKq>J8LG1nl'D_90,1B-/_.&M$_O>c7`F\o8?i]%a-)#YoW%i+ZSh#"o:MP`^1.2@B;p=51In'5)\gmd-A=TAG@hg]FMDZEN+R`^mCH33n"TL5TR9J,q+hS3$ap&c!p:=1T__b^_".e@%S&OY!N=cKJ[O)J#>'nnos,6J3J(j8Y@`l_)NE'WT.oUdk_p=2$/V;+$29Wp$jO?*0Lr'qemeuSPt7U>59dWTDY,)$'dCM]@%@'1K)mE:>gbOj'^XLCH.=J7:mnUmYB72kF^<.d?#$DO(-t25)uOiOSL2Wi>i.WSQd+.+$(ZHHF`QP>4F#r.blN/WXltK_QC\W_QC\W%KNCriE"o<]-\A4'lFb(2'Ki=-:bSrG.:P^-qKj,RR>MWB_bul"1GHt3=M*M""P.,UZf=TmB10C+uq&fY3^Is%CGAemTmfu'^nt,UU9$->*V36hg`=g1:"*#hHU.5(V8d@u0YrOcL"_:$h#AWB7NI*p,HlRZ1O-9hb?sdJe9'Gd4%[7Mi8=Q%!3Iq\16YAJ+^cmIW+XO)GRgT?^oO2j3T>Q]:q2"R!K'uF\*'VFTjK"@n*\dfBWT-c8:E:k0U/42E#OUL_hLbe&+LA70QM\Pu0T!RrhC5fU'D8;o'%&mbiF`#"^ls_QBKQ\.*T5BXfIO8/*)U*E'DnLoNG(s%gJcau9?LmE%R_`!T58k]oIdk[A]'uKj.7XiDu/[#P;-RlIaLR9;"!)_]:bN2CQ,p5Q5!2>HYT@jIOn0?S\t[7*2F+ITZ04\%f'+rU781jJ`C!?IJ"plc?Vr@0r:5^A,Z#P\e$*VRA/8-_$YH3m=]+N.]9K7O35[f3KDqbSL1m#:H[`FWf:>&ErW,*Q\1M>[]65O8jU0"9!2kOjg$A=WI8LE]jdOEVkA3+=pb"+ai7^,c.k7qnN/Yq)<5t'q'!Kj$nlV/Ipl?4-1l@C.,6<-.bq$7_QC\WG,;23KQ*u2X)P*DcoKl2ga_+%#e/Lr\!dI>&\[2j-"DKR(>2-cS%H/JMU>On'iGM_lOP3(.3-*Os8;mNh/ac[27o(u'TSpIhU/8fTVAT:4$MYC%]:iag$/*E>];/B>MKf\]V;Ee_o:`+@7=VDaH6.^B%lnk/,.(9"%-;kq$(@,uKutk7VLUO#PsrOPh4-@q4Yi0cHke,!*L=fKn=1S`iDYMI)\"'Rs*2:[)[X:l:dRJ9aLB";ko_n%QNP'T;g%?Tn`G)M_htbdR>1(eR+Vl5W013\U^5n==`WTGlj8I1OHfCJDoHfXegFG7cGj1.W9Qn01A!]&L)u6tZHqgg2gk8lR:ucq_jPj*`G"?@J6Vogb(j2T>D6;S6+Bq)8>#Wp&lCj>D68r_QDObkA[Ip@HGD/_QA!$X7_aSP'=S!m3Q_PiPKX^0>G/)nlN=">06.*J#hZ1qKK\RZ8eS%U_U3iIqS(%GCP798+ZlaDqKj-Cc(cM%@TX3EHPsH]Kg&6!]m]Z;65oA*hI$@NJBM"o\V2+)cE(o";!I0)n'``cCklAnbGZ6b.9OgY#lc9/Ka::*Kf5.+(J/We+"L$i=lgs>*)(D%t'K$[.;C0^QTgH1$&O+A*P&*6W2?f>@GE`0c)2PG3hEIP<-EDll=qkWhNVUT4/^r213;231+/#6H&@_/!RNDo>iY[TdhAIEp^m>D6:8>O;Jb&8i5#'lFb('lJ._LSQ3NWf:tumCh)oO2A$9X`e]bdILPa>Mja4aj7Zfk=S3:F![;?f54kG0dG,B]cOWMl.tcM\dbn0DKp*fqeqYR'5.>R.-%R4RBBSh3E1\S\(FB!TR1@J$3"TfsbmlqbaM(K95XZM[AI`^0K:Q8aAAitYc4K%LoYU^SM2'PBSpnbgS6hA^3Wh*:jO"c*d#'=g>kXT:ESLQ#^qe0,iZ0-Tp;gTZ"7V1gG,(LpEZ=HN5PJ2eT==^QZ6U"l6q_0g"f%JHDVFf+',3u;o\bS$(`5AB*NK@1dN6D:r3OU;VM(gA(q6\-e=t@c)L&VIllUtm9?s(GQ/$`@d?5%?b1fQIk3#Bdo@H0.nr8.r9$+s:1F3:db+CK6Wgds$u.kR[f\Sa(u;C@XH0R>oPpA??Q2ZEYId/l*<>3u>g=7'F@pMe5)F\T6OlN!b<;6<"MI"q!7ou\@9W2V$2X(#6SVdIM\3Pf`XU*i&oJG%'lMP,iE"oN&WC@nR*:g'Y=#;V"8-E3%6&X",@KC-13c)XuSi[lRKA>D6:8>D69uKj0Ot/Krna/)9D^=VK&tXZ")!Y(Ubpm;T+?^jB]tghO2Y>I#r4WoU9&SpC1;P4^W/8kqPHABE/)s3?eH`VG[Nd7h[(B:g^m/tFIp)pO_:>Ff%APjg-s(LMQ`jI512^&^O&%YaHH]VbkP1#&3m9q5i%!XM#[L[S>"/maZ5&E9&eVh9%'#"9V@)5&tr%$*B[8`t=$,K"5D0o_8&/]Fa>_1q_Ijs>,u1P^Qp$4/#^UX&6Id$`;[Fa':X"b"a]-[j$u3_W!J`'fgd(^(hqX&F"JAqc:oKk0dX//fBRO;l95h09;h3Utjh5/De?cLBM#oZRsCL8/s1,GT.$_Vp'NqTpNL>D69U&)gRJACUiF#hEdD<%KMTFV5BjQsp#T5gliZ\A^nU>AF'kMQCfgc_?a>8#i]5X51FR!aPYP#Xt=kPuldIQ/@^eH(7eAQTQcI\h\!iT-!_n.g$R7;@7##ND+h/thf[3fkDe$ZL7bJK[@uGiWoNgsH/OTa!k<-l2FKHauDXO`V=cQ-h<>/p^:.a-[%@*tATS`Q-'q8_R<#R_o1L`=.'!TL3)\A"!7P!0Bk#U$%+JPd#`MF^T=VY_>pqQXEN**?n;9b7\b/Ma39dE)AHf6Su`h0JAY(q_/dtnbWGMA5MIA=2@=NS)LL$J;K=_@2@/C*$[<*Ydb,#"PE4pis7?&@W]V!('J]nYB)rr1"YXlo\oJ*Vi6CX/6na0M!iNRU[a%ho=mPiraVm'?%fc%,mUp5he6obd=&\i:Tr76Ut!sJ[9q7h8YkA$)WP/K8*Ta>D6;S6+GI!E3!rY%cLHXiE!WXc\ro_'lFb(76fa3>N&W35e,A*@*iknE2u=8Z_5IVmu5O::*P20R7I^fTG9M_%tj^6*=KmjGsi]K0#=9D,i\kM64\1*qWV]J"@cdN=G(RD-fB-k'_>4jR?E+T(<3/'1s@tCcYbdSFmpJbiKT'0;],Fo&f/I2I1MH1V"$Y"+UI4hI9sm#0q>[,*SM$VhB8'XX5hhD?R:JL5VoIKSIYq*ME^A[Hjn>sK`1".E)XfW:8g:TidQog!*?'5-$UGKBcQ!Chtn8>':cX$]&u9OXW#295OHo1s"i*-``P^7@L(po`(Z]>YC4VJ%]1Cr\M7#IicO+@A)17E2)KE1/tl:TJ9gkq3#NQ>Hs%C1+;!gQ3\diT1[?'25^/Xu"\2lucVo7`W/j.5rgfm/Z&oGii,c?q7JK45d/fFS=TQYi!-\)]^hq8^D3oYB$C*mm6CqgMe_=L0C?>5=,hB'##DE(9kGCT4&2HXhq3WXnj0q.blN/MWWku>N&TrG\4Hc\CH&4"+[H1RGh3$H`_Y)ppi#M?fY^nt^j@X1S%;$9u^o^*LFq"kO;K[4irTu/hQOL*\=_H@k>pd@+g9S`NWCNr[QbQkTt#61P&6dWtfnL**H'[BM#<;rd*9TTaT8@-)/V/*5pq5+dsMe@.hWL:>U3mO5ETQ;?=Jo1=4*0jY@\-(!d44(Jb`TV`15K:"SS>Xkf:;WK&6!Eej^pci?Su*loclYKH]\^1=HmZ@k[Bb\'+Bo'Z7bVrXs#Y3W=#2CSCVJ,+3.E%k@&!jseN/`A21CF+n:8lg]T--nf*VW@F3<[@C'Y_bolH,MB6q+Ws*oBm*i(STcY%d%,BFeBfh4Fb'B.inPUAVP0nKFT[DZ;Yd@>(*.J6_H763;*uN)1iQelS_.%?Y3^P^1Zl97q0g.&0H?6O$;>5E!"6=0gQk#r&O/\/6'WD[s'fB5CF:1K6_b'RmHfR3odS$(FhMaVaH3s/He`"3.RMh2*c4P`tPDh734#+,F$6@g!i^Be%pOHosh2<=,4Z.DV/X,lp_K30T09_n;*D\4CSu/(/0f``Ynd7!CQ[XpO0gt3r7g`),!OVq5k,PDn%j1)N=#jTL6ROH]WYq>[YVJe+A),@b,Jtkl\O,GliO/n&>C^5Eph*Kj078og-)f\5a^-.blN/lI>&\2(iP`DA@%H$,WgeQ,9Z?Xhq2`+l"R&WXs%_DRCSQ2W7]kiDs#H\5g-_9#@^IX`e\7Y"+I@M^:Uf$U8"h[LR8W[rb_US1FEY:OfZ\H"!Sggkm8H5AJsc]!_MlCaOgp5+%qX3#c:3TG.4hrRS<)^88/<>RYm8Bb=]8sHE-t[tIJaObJ%48-XZQu='n'c`pFX\DHtrgD'[V_+Tea/#6]e@TKkX;;;g1dYikZ+cN37Dd45";?m_Vr]Hl/4TpnUO(-%-k2j(4I?oDHE3!rYE2u/.[gKSO[gKUu%(@,sSjg.h\5g%="6!8c<\3#UghIIT>Ep^m>;8OUD6:8>O@8dX6jl,nI]Zh?33a9Xhq2`E@^HBSN-.=aa;q>hNIWHn!?XYAnF]oo5>+BrJjD27'T+W3=`l@:aaU9bl/%O6F_%,+M*")%2c5fFb7hVl_+&p]"V\NWq"-F'bW#1HF_QiN.NIIhD,@V$%`<7'qffMPT*R7US";G>O1-H]S64do,X3i1?E&%(b8n2Z%0rr47L>c;p^.dW43K=#)^fum]dX5KBN]5QdmWda?q5fE1_5O'-KXqYagDA@&s+2Y.sXhq3WXnG/meTSIQp^">9[gKT*(q3[U=Xa*:htaAe5.(H`Bh$/CD!TD?]D988)\&is8:c'S@bmsMY+^\l'CQ9aZZX=fd>N>>/nGi=%l20.T3rT3\+WAUR^Q-&@IO)KM5`5qo(L[`T-ol1:mTP'9Chb+"rAj/?q*IUJ8q2%:F;;%J%q[UOdOrRAA7`UM?3m\C?-.Y=9Y*`(S8*$(s:*)hV8h4*\E7`"Ba6)^^<$o68lh?1tU8WWP^+4lkYhV)0D&pqCA,8A]'uKj/\=LuV@BeU\GC[gKU5":Q2d'lFb('lLE"DA@%(DA@&s&%j=Locf"%i(N't*[GNpqhu2u807c'qV%QCd(J^3b?S)r']Y<5`))g;6a3&[1/!-0W+-@Y)GKs3&$VPU40/Ur%>1B;3?.QV%Aq#Sb`l8GX_:Jko)de7%S7@3N&l2(4,$2kVFG,r-*q'4$jqia1**["]l4gY8)A5r%b(!m#)J&C4CITY],ra8N9N2GSDMhJ)b/W*U`WcKBB#!<383;GP[JGS!3SKu3"*5ea9U/H.:.3OG98N)+-AQ[_@ZJZDm@qqs3q':0iJolA&ijG8t<^m$VoRJ(+[u*]!3gDQniUU%^r6b5g9>j]5IoVDf-Gec^Ibp"bA]e)%2I@'ACfWaaK7:kjY3`X)P+YX0E4R'lFb('lFb(2&1dKKj3pL:FFq4>_H=8>D69%%,k7K9&Wh0Dsct%rAEPG##q048?P",?ct2D:Odf:dVY6)L3mN=^9$9SP^!@=&j2I;lsl?9pPrfPGM)\qI@jQsN7@*5a2_]C+fXM6JSop])6EK3?6'8$8fGE0'Xd0Z0Bo<]hUbXD`b`RSJqM<@5/ngHp"o3X4SicFDCa9C2J+1o\MF,f"La[\]Q(H+Rns!2<+?\lHrfp81QUPKJTGHh_Je)NQ`R$.blN/WXltKp'd3rSOBgl\(V1u$F^AO$F^AO'"lK,XgZ-LXoqp^>D69U!X9+C$F^AOnftUN\(V1u\m16"D!2AHXi?&bpZdE9D2)8#^JS5:-SPsachcM"FFq?\#@/lUcM&A.\apd7P^NLnLJ)5T4^GAee+sklAS"AdK:.lq/o^1`T3hQ(NuotDSZJ*mHqEa1"[N\&5nF1N1;^01Xhq3[6F^#,"@3S%6*M`RXhq3WXi<];<=f:!&-P;'-c3"BjP9%AZ("C@K=MUCeb[F9akXa,aTm=o2bIu"qr*^9B1=1kr7dbgMi0A;_ke"mcYkA$Qs9@j(I\5g%=\CF[e[gI^0#_F0)p-cDj\5g&h=9uACJfk>N+:.[/\CI(=>9,kMA'&[D>6;:n)sj>b6-1eY]3d"tmg!n[F"<_+?bYQlOq7QgYEfT`B1ga0$ROq9:o`L&W=hhIX^6D6I#3goDA<:?&-P91]^?'7$F^AO)@PM)5nF/b&-Th@#e(/M$F^o]iDr5U"@3S%_4CqAHBWEN>EAbLa_5t!A7[SG=WTb21)rDXnt1C25F$WUcTYA"R6UXTajX$M;6mPa>Omp6rq@^SbB"ulB:gg`[gI^0#_F0)Y!I_FKj078NJ2>P+:*QA#_HG[KNj.7Kj0OjE2t)eJfk>N?r)G[^"KsHd@3a_K=R0GY2nGd^/jgds7q!fTDu+0>k3I?]VFOPI-;e$CTFd'17I)H%;tk:g2b="[6_q1o4L_!2/^A[Rar#`FuWOo/Rb`0)U2V*/b(kb,)E-`23`!H,f*-pgMafq#*@;aMGhm?nDkY_3oE;3UoaTZR_lFY6VA8+e4;qur%3tN0kO@WaJ:2Pk<@=<^_9CY\Edc!&,hsm).bq$7_QA,BIpH$EqHAiSf[MDn*ZAeGQkSaIoaY=F*8W4brIeDRbhumc6E>(+6]E&6$?:J8NA[8]&c2-@Gk5Ymh!3(p0$C>>1WM!OYGXQ_R#d&3MRRo]^N(O#XLF"I'fol#nKbAI-Zg35VmT[Bo_RYi]QWmll0/lPN-i1O3_2mem;kVD>JOah'UK9Ld3GQ&a,qjFTR"Z]b&'FY"+H9Jn5CI#09-"pnR$Z'5ZWR%C&3OF'L4,p&`bHK1*kgM=?F]SI)JUsMHX1..L@Sj!]s6Vo1e40m)Lg1+B;WmTk;r7gY[a)T!(&o1,V5-\Gq@F("V9"J=2Q1%$L$/c)LcA=)M<>eDtCs[%L(1&n5sSYa0?SKD=GOdCogAR5P,N75&8k+An+\S(>!7gg.#XtfU+)n[gKSO\*ATbX$%&4FXb20_QEO$11Q#B[?iu1C-14NpY;[,4u;S9Ys,K"\(Ymt)oc\FMTt-ANC_g&ljasj"lWM@FZ\5g&hIT'j[E3&\QLKeVN>P4TbeBqp+I4Wr^(?&;@Y%be@NCC*T>c/0J)jT5fA#:C(l:oR+TT1><_ns-rP8_2mXJ]CjN,A+;0$u"WPg(*h!3i'mk+A'"5bRGNGghVI@SR);jld-W+A=:CnKEXG%9^0NLjF2If(tg-,GMf(^hQJF>r@$UHZ?&cV2%?hQVD:e`V)"e8_oa6UM(r%.6&mNTQ3Cdg/[-jTYrG33\/s[[sT%)K-ecLQ2uPgLuSqJ^OA5S>k=X<+(J*C$gR6F>90Z[/8um/_[uD[T'jD,Qmqum3\Y,W8jD*#@9u`O?r1+!&@X(_&feN63mKu-!\3TIqHO76jjSc(*pl5=LDMT0RG[8eK+(SsLD9MlLW8O[N)itqfYM&p_SX^Uk,#@VgnBdFp[%%%jFfR0*S_ea-Tal'f]9P=MIE^sAO7@tcZ\M^"S)bV'mD_U4Hnd9'?D3ShN!LVPmu_&Y<-C'Sp>hhI6qODd,"cngf;FZ4=6'$sFak!(ndTd%LA0Vo%fB;\/jZPu*PAADmGK--oS=bVJA0d30cg9Jg\qVj_+M`POmiqf<4+ZOCK/T>P'(iso4bFhsi]o8s"MN\U))2fno=e+7)/W@Xf#5Va6bi8@9\1r,>`E:Le55SeUc_Q4q6f+_YjX"RKiJW$l`L&F;MnpM!J7m`hJW^7"SD#&E&gdQb#>/B.\AX^p;"Eu`*oa!2,O[o(3/ZZ6PcuZPjfG`g-clRLCEL%MZ]k]I#m/k4A"?,#<_O&ld30[Y#7$hlLZT^35n/Tnk5aXaN\,A:f10r(&;2(h3"[o?VJ!4J@MI(4iTB9UGK4YP5Lb6F//,@_*ubmjd$uQ6b%@pCm'P_PiE"o!Gg7Cl-\5g%=\5g&h]1crb1K'-Fq>;e*@`"D@?5da.A/Jls[/:I2&l`HR]"(n_IRkKl"h',b->PeRbnOu,?O3r?E#\Ph&@e[`6A]W$d@:j?6V!WFK->VnU9TQfc.t0u`o:%72ZXllXf1:9e6$np9;86PmK/;l\Jo$Uiq/_.;VCMp\>8/=lXS-t&@Z]+=<8)ibBo]l*5$?<`#6Uips9-`G(+'mcYOf_Wq/+rnM&^TG::eKr5D69UJoId4_4]afiE!SM:UjE7SMX:45a?@;9jagK-jfN(+TMT%J$^cDme!3^K`?:SRQ-:4Gf.?%Psjp^e)%[:pb`_jp#ViEDk@2@@3C@osRTJB$#Q)=a(dcuELC?.nK6Z\4.&6.e&F<40tAjJ8.+<4\llgW2T]86Mm^d1uc5fm/$B(6nXGp\T^iW8Mf;"o1l;M.3W:J/M8l/>A#bWQalS+ps,U6lBY5?q(H&^*Q_Crdh2HH+t5(f5iu9QS3o8jaWqZ0@W2G:OMgV.@`_^>UC-?O9E^1MqF.J:%*E]Lpks3?l3])T\=J+tG#sD5_Is,4$I\B,=#`O;_RN[jlgP45J+k=UlW8j8e&?(I.Z:kerNsWM&!?@8cgH+iLiN!u$YO;jKhLQ3,Hb]/XIEl(=d17P5+8_94E=)"'5<9?7k`F0`Nub1Zl/4ILh17lV#IC'Hr=F,l1\#E+,nCAWR1djEedejAWo*#jZhZjsm`.A]R*@r^PVbKPga_)/go:n%Xhq3WXhq3S(N))>(Cdh\[gKSO[gKU50#F_;8%;R0;Rf`:GP=WO%a=W*eZH0q'NE5(BB`3#Pa;40$&I"#!JnKCaT9&/1;U\jt`++/^uf]*VHVdo9$Z.[]8>m&=/+;$I&SjuC6AM`1K`_Hd_Rg9=T?U^HVaW=%S,!5iSAF3?G!B1+`gglO_;p`L^YtT"=?D\T")?3*b'S-u?FR4)'6KkR"kogp3eGBh_;S+fFN6X16t+W'HW[-&3ME3jk2iUMsHVc!0e$dd*SOHVF(YCJgfm$Xgi798]1*gA&lu*j1^d_*F?t^=N!76%Y':BI/p11?P['_^MH:ILLgnN\:mX:,nN)^;aLro\$Cb$$1scbY885U"V.=)+!3U22Ct`Cq&NQ8]m%4hVA9,n62KZ[V/[%"5#6rM7[o+SiE"ol2V+!RN)_SDA@%h#e/MdH*7^=_QC8`XY*u9E2u>03eppn>D6:TL;S&AUUFm+oJ^'I2>4O\H:LIY*<3U#.]\>XJ*J`$uq=h"Wl)Jhkm1FP<%Uj1tU%g%2;4d1g:hnX_Bp'6LK#qUUP@IQ`NJ6&2*4Q9rs97T7UMRt6q+Zuq]GMj'+5TQbh^7j+3090S/1tI(*qg9Kd15,$g$!Fa,@rP$Y@>5S3%CZ\R$Fb%s9#@^IXU=#fiE!Q%DRC@"FV,#oDA@%(DA@&3iLnukefu7e=WK,Zh":LDU#btZ+"I*-Dgf.VV\r1MM8e#.VrlT(^A$,tao+Gm/%PQ)T9Oa%JO`?Sqr.9BejduNX:CRh7\`m.YE>pJq&S]64+I6GagK-j]GBl.7^"f5[8=D(ZR9;!AEb`Q\gO6t^&ajO/p(X.J`*r@eH-k>2,h>Dl.dfVuX0N52g\lD+WK>C="Vo='B&S.OCFsJR/p7N#WbXu,q&mf5HAh,"4?s_`\@]'-"H_1t;%NYM(85.^C!.>Jo:*TJ"4b44ZGm@c`389NUPgH,]f3),>'5eP&'lMP,iDuH,mRnH\(]a<5e'h(qr]*A;^97urq:%\MurLKb3h:6hmiB1eKQ:6r\tcCEQ9\RrC;iurOn0k'U;-.\=!_].K?*-HQ1A$>(@9a\o"8)RGl>VIfJ&Eg@6Qcf]YJ]L-3o)+H=lV[F5ds7SghQkN0`L[WgPNtek-,B(V,5>"?4#W/`a#f!(]^EuaZZnD@EbWgleA:'Rk0+jPTHX.CD:"&RN!r!!_cSH96ZC;-I]1/WUu-sjR7aPeRgs3&MMVrsO6LnB_0P^)l&H-R"4Ii7kh4g>:C"o!oL'.s'm0e@bg]n[gDq[s[mEGSqKuM=d4)nGYm14=64%8?)O+W0^LC[?DVeJ]8fBika+%eX*I#.!5.eS`Tj`qqm6D!#ZZ@9@%XL%_s6=!i[DfA_pC<8`WWUCB`rV1tcuG>nJ)5`BD'(h"m^B$G@t1b9D2:j3lE1V]:mo_9+hQtf!M+/ti*AUi^N=G%_3g7!iE"ol+6n<&lhmf-n@g=keSRDni^;bJ&UTD5U>=7Z#SIT1@.A#Dr5o\K>+0AQ.uacjae03K/V;psT)_hB,a=C!O>qtukFCR/1eL;A^?#=u<%j)u(jP'2=-Q/LS$lu#`=Dg[-j4o8EH:OKqhr[PPK4-5QQgcApef)Z";:PW!MC9.4TiUef$fgJeWki;+NdikUt^4Dt+3Ihe:"D2*&Z_k0u5J_4)kpq<+X)WaroA\C2iNpXaijAc87*c=nDriFQTc22SSTaboFOr[^W>fIWQZO.'6%PSb;OO@LBA^f"9W&%.oBd\j[r;&hf)B?a4*?>lPaDLI/sT#>@tFsY9`&cZa%W\9iKnT!Drq#6n@K(S_Bn>jI?quBGa3PbOT1?'joRgZ.J,%_[n]+;E5u3a'%^2eJ;*l9Bgdf+dp[O&fiHMNuj!A**>!lVipq8).P0'p])E1k>5pkA:ga_*Z&&PG$7C^mkiDu;+'lN\b\CHjp@c:AHC)hn29b%@:[gKUu's,9S_Q=1(s(#NDk47u:hM_CSR\RrAe43kAG)rI&2T3X;li>9Rqf_eq0-]oq>)pVO0XaJ.!q1di"dV4H^$er^s'B1D`9;,ugj2Q)V,AcR+g`Kk2L6r,`3olGB0ai0$rF]<<)DG26A@N`1@@9+&=QRP>-4V/rka^HG_&S,<^#:5Q4mL\qaW[4CUV&ff9QOCj)EtdZ$[,]=El+(>k(L-M/A).7CgL!jRQKoqFTfs++&W]j3]t_V0mq1\_^q%F1QQ@>8E9g3WT;="Z'+e!b0ju\fH"cqe6&iB6-C^3FQ',.1Z4$2(YPi1L0VAX7dDA@'>#N8_BD6:8>A]."9blVfP9\k_>UeGXghJ@plLG[c,i!,jga_)O#e(/M.X:-2>D6:8>D69U^o`W]X:=;bDSG)=9:gV1q^(jW_ic+fXd2*Am%EEDO3a/?qhK5=GbE0**9$ka%X8B711gMU(1ZFcs2@2Qj&cR7;12$:@d.Oo_FV75f7\kR[&=EI4PE!;TEDN.1L$Z\=Eut.?Nk#nPL(\ugh=$/YP9"=*p.bo[fN)k]lt*K'K0G4A!31(slL6p"61H@`!#Ek0XPdC+f(4l,Pin/^mWk(;2TJK`\BF-O;=Jnj@lT!u5X/(-0.!_;*CG*o:/CR",nB_LK+H!*^Jo1o:5Ip1@KgTaU+r^d,;1u!QfHE\;A^V5.blN/WXltK_Q=1()C4ofF>O;Yp%CZ\Rg(b:j"CDtllF;icF3jQ,**aU_0!Q[J8$fol4R?S)#m_`RGNqjoG9eIV[da[c@"@jT0FnjLUrkX8"7qc<#59-nMLqc9A0\57tZc8'Yu]4Z&0@O;f/c(0a%%\JV)nSfE/PDBjG+$#1A!U&a-du&TNUN$XQ6^iA\$nI(+pjkAIITc1(F@aOP*N4@1^<.#El$tWN&?/$9@"SCM0h1*N,MFhMZ9]JPV\Nu5*KE&/Js2YX"JuUWC#f9^a$.Kfhj^:aX?]!DOQj7s/4O[p1VlI$=tpe:3GHdn"'"@i_qfP^7tcocbVob\(6#7D3#%5$F^AOl@X&Vc#B_&X)P+YX7>-h(N't*F[^3T[gKSO[i,Y53TD=t+-oq"#^Fo>WO8VYl_r#aDKI^#;UY1g\dAbqWS1@_[ba6!7_YFf`@;C4rj=2#%#HKXq.[)U`a6bPa;\*O'*%k"H%FZWu%d0hUP1?dtd>I^81?.??FXVO6"-lTR(u=p>S1&^O:6HKH6+Ja9nFVDEp6V[Ec[>AmES\WfAa1o5(%e+"(uOah)rc"1.Aeduk5;M4:mp&[NAWTlDck5`>-Wfl]8dVI*LalN>R-@&1q#Cl[JQX#hIMOA6AfYq:P[^.Ci$JXH_rrW,ffX4)D@uaAEJ/eKJS=Rqs5>!R>%tm)_:-$)F2iX>)`[j/'^bQTWuaiR_u8ocWnnl\IW$hd(GTa4N&DRJF'=XPjglQ=8AfT)oR_7O+bth5mQ3>Uq,qIo>k\9#W5.jWQa**a$UPVS:c9%MP8h!ha5sO.1*Hj[gKV0K5dl1X)P+YX0$?ABt.idEYJQ^h9P/,ANZO-CVIncpI2Nnd`Wld;1oNo#.n-\#*9bL)B9*'J=`ag!'4/c!d)*[t6!=X[Dnc?(hna[.@n(iBLZ!pAjM"YnIr&j)HBe0/]@-$Vh5:=V<3X;J::`2(C=L062GM)8@mfcN?jq>&)]PrUuj*UJCj(lQf;V#2+HoZ7o%SD]\b&8AnIYIF(A"uOL:ElQ@*\lm)#.FY-RE/tf@4A0LdV]l?8N;lL">0hN#!!Viclj_-lppeln6&>=j8!H;`=Qi0>&j)f4:Y_p3J6=?fT6_h/sT;OrrPQEj"kf`D68r_QC8aXY-dZ_QA,.ga_+EM?pZu[gKS_$fP-M_`eiRFf5ST$F_L<>A]."?![bh>P1Co$'lGlE_Q>/?I;CHPFl_3"-#;h),qkl4Q(/`:PRJA#/m04>FE4*dI<;c*F`='c@rS_aD<\SO=[#h@>+R/\/tFEDK3Jd#GGHHdD]irZ5O!>32BuR(VIs*&Rt'TuRf[dj*9)>Y]d-F0?XHak6$_O=Pt(ta7Z;)(khqoBtfIPj/s;1,m`6X'".ga_)/go:n%XgZ*K_Q>kP>D69%!*Cf-.bsD6;K6F^%*XWGE6KTu2mSZ;*MuNsoa+9&IkK8]iI25aS4bj&3Z-Aj^'-F0/p-D0'cM?]9IILR%i8*J;R"sjdGb$e@5_(pM*G3,CYnf;-Qu_&@,-bi5Qra^#o,^)-p$k.R_Zd,A%f:rb`*M=B]9rUGRO,Ji,l5Ae6^GW6^a;3$*%T'#N8_BImX^eH`\d4USbt"X`HBm(nLOQY6`^7e%n]!#srfDCB4./8`/M%l"/Eg+h*2N<9$4/_'9t6mLK2h>'gWIS,8m7!=]LOmTqPb1eN/QWXinK%me:EA"u-r8Lr]YnD-\)e,)5Z#aG,%q!NplhlIj4A659@(KW+!k:/)6h2b.C7foUZ4R5S`Z!`%`A4lu(*7=uC2E@3:;dVsMpS(S[lrC=ILI%9R3(j]uRZVSdARE3!rY4p\WD-/@c0_Q@,N\%7B7Wrm]\\5g&h0)#a_g'kI%h"eji`qSY8X%C.#iE"o<]+AipDH-tOg'Y=#]Us/DX`1=[Wt*u8iDtS5u)`;Z,^LH%X4Lkn8`>#ZgEdEf]Nd$[-n*R5@@k1U=:U1a*Q7mgpd_k;s2>Tb^uLEY$"du%_23M3/rMo3hHDBH:95ukq9RMdYh*.nkD.&!pUjZ3h/"4If5bGmNB1B3s.b.cE^K1T]ZIEs:mm4b?@o//+^c;8J!dP7@5Dd-NBo9Y;teHt1CaJTX\-o_$/T8ja)?=_0YV&h$F0nfkh#iB^"P9gLBJoJM^j:Tk76bf158>3>+kbAT[.KRIBS0>bO_QC\WqB4QCgo:p'[2j.-Gq1oa[q^O=_QC\Wp2aD0_QC\W$?R,&eOI(!jKKk_>9,31Xhq1IiE"^l>5Shd[9d2DCQMTc]t^;a<_p!hdJd&KcO<$Qn(1Bl;YkY]_gM2^[`ls-s9lF/\.[L/'GqGU#aUV+"S9BUER5Lo6O-UXa#Ni$pes!Ve;Iqctj]Kp,\PeO#&V.8/c*\7TJ?9U)sRc0sdn:N'*Q7473:0c3#s4Xo)MBVDB3"qf"'/MO!oI4Q?#GhWt&>I-$hu:@S+1I6e0L;1c,7kVXpBR'Hh.+0eLfj^7YJl=)SD@Lh*r3sA6#9ut?;l1D4&8@MY*AdG(SJ(KJo4'(RjEI]'`h>1P8#*Le04jC6/.-YKNj.7Kj449\CFWieOB8k#e(/Mg?!H0Tq?;)m;T+F/%'EZE3!rY>mRoS,M[$SKNj]lKj078Kj3pGWeO_pLKfI:Kj078m/rCjDA@%(DA@%H3O]nYc]me8FET&I(U"TElQo>t3*#Opl`VsE>aR*G+3j29Z+/?fSP^M#'Kh_BnM&0O@om@p\@4f6amMYZS@+h@=%X$+KEcf1NjFlli)XI^%Bo@9pjL$0jAqLQE5E`tP!er2N^4]\WEV6gY^sXH**!Nq1EF';%>SkH$NhTgf/bT=AoV/PHA@6'md4son@jFS0a(OR1-X8k>UoWBPZO9RKl6=MR5/pO8F.@ug'A1aZBX!r6s;\,97kJL_dom3FG3qQ>D6;S6+Bq)pH8iD@<]6j.b5"0i$XLHaK.@UA\c5#-bR)Q8OS;2:c>1B]FrH'&N.1Db>,fV8t`^s5W/6\-b+kju;lJj=D>7He?Or+UJTN_B\s31rt\V[dbu-AX$GRJR.I&n[i5ET7$Y5P/(WA?ekl>RPd$qWmjR[gKTZj@J61YCp+c#n.D`'lI#bD"DVHc#B`,r?pCc9)]fJ2(@nN@r\PZ7mC1_Z923/H8o-74TB6>b1^mX/Kb#=,p3&E&![Q(<_?C_9-nAkR?I7%a\HG?`k$)r5+F9/)=5H9c^uYs7^s1[LI[Tuh,J$,S?V?t(60#2q#eTp`?T;KT5dgWZ8%Y`^g\AmDHpAYV-p<`$6epA!G-+7/h1Q,Ggeh:mI[:H\,iCW!X?T+Adh%`!3,PJ)&c_pKBP+2GN-kCop\003%bM7lXHLh,!1e&P3b==/>X4O7OD;OT225opu+]KI_6j[VfmVt$QbhH$3aMXc!%29^:&"!*=CRX-2(sVR79e2/_I_K`:1Dn0<4l]TP(^Dn)dI"&X%BP)e*bGL^id>JGVA'R5=^'2\dO)ZqK=\n/Wkt\2p`O9'd14kf?4"FVo_'B,_J,(kQ=.FRs(YO0YtC_o&UnXhq4:+P\I%W^,ZbX)P+F^)Cn>#"+&JKj3s8B*XiDX&m0?_QCiLkA[In_4]afiE!R"VY^\/]!S)KX)P+Fc,6[#Xhq1Y$YSW5\%3,gFh(.u>@$OQiDsklDKY$md?=`23=o9%9QOl6%kUkE^7pucbE9#hB5qX>1c*9#D0NO.BE(KGl@%%r>nrA[7Y^8sFC/AVL@%bV"i!m4Gs/=#5L_BTYrPp!.FraKu:XC0Ek4WcKa&?SI9R'j2*.T3FgqMq/$*p[L^#fllj8^DW.B_nmhfT#Ga'53:#q5h\--^0(XYp3.H:EPh/5T$mRhip\7[j=7!685G3,k)&T/>$'lMP,iDuH,R?;$pu;+4CS+i$bA%8=IKSq"k^D`'"k-9-?AX^LLlVY#UN$CM%U^@@%^?Nj*'cXW]b8X!0R"$nIV>cCs7'/pW=0f?B::pUU:`#R)m0+FlX>)(,mJ#BgW(`$_qd/Y8,;JeSct`;[f91E[p&,VSAKG-/(V5;BJjJ[aPL451$(ln6"Qdqr>G*uIQq:Jr&93"@8J?Fp5R&q\#\GT%,q(aW*s0oV?^R'cV=tl1g\phdE>lWASh4h4`/:!<#`l&%CP(>[osu3Q\6t,3X)P+Y.k64I2le^O5N%4M&(g=3uk7CNp,/k[TjLkkjS!m!B$'Qpb&%?VL'[P)t#(;4.iP3pt$NN]PCkYJZ>1VG&sl.(G`$MDb&IQ9J\T;o3FH`"'T]e$1G.PN#H7KZ,5fBFJl)T+,]"9mq3j3tgK[SR"P^J^neWc-Z_:`t5s-M5iP;4(M0.!*[4.(rD-1a.e5;<'903PQMLVSiAQ6&c=QgpNBq*oZW_T[kO-459PMs5k?Ab;9X6JBuMj\D>_*aKNj.7Kj449\CH:PX)KT.\o=]hX8ZMLiE"oN&U]7C^n/@*iknE3!rYE3&AFX)P+YX)P+YX)S\gFX^um8\!;o\5g&h38Ef?Z&b.Y#4j-[X0pp.P2YDWP-r\H#tt[UF>.UO]raNrpsB`,ef0`UR:nE*(!R&Mrb$1RZ+/Z$eFpjfJ`0L`:LM.f3=\(YIDsU/ZkBqH,*M@,2i?5e'h(j$#)l&+M^\sYJPoThoP9ng3[ph!(D$UWYEq2\2qJjg,\$&q,`si\(.o/FjVqMpiV_kPD#3(_R2%56/Vq2m40beB<7`fN&*">%=l9$:Np@]pY48!VMAW?boqp^1+r\_3H2D9WF$G^c-S*Z79!^*+cPd*qbMVg`]L\h9Je"bIh!gOWi<%!W3M^:[NauYR@U_EKipW(O.C^VWmI>!N1<:aiYs(>Q]I:R%#IgF?k>C(>I4R8lX?6oI$"DH)]-]FuhrHa[pf7V])a2)2CjG<=U&TMVn9nC[]d!6B$u3;4:Dl6EpOrjKNj#tHObdf`h:,k[HG@oPc2EOA:D69eO]rhhG&tc=0OM+?>hG1TCrpuNCVq0\(8^lM^]&;r/P#f=KWi"oE22O*P4Rk_Q+Xidb4fK"KD``\3kdr">5/?u";$q75@AYH`@$mQ;u4+R"aZBG3D;7+s\n,Z1sJ3dp^GH&,IsqX2A+cRA`J;2!:(nr)=Us+.fYkAI`CE'6c0-jfU.1palmo)_t-QVBQ,K:5&)W$i"9s]&p#S\6hJp#"rNSK7$Ne$@o_E;ikAE&#ZPBo8//&@HP/qu"`H_Fe^tZb7ubYL*U0_>8nEKgHt!?9%Jq!_";Bj0oChneA:GjQ>JAAi6RE8FP+)H$h-NugnTm:%eGK*du'od,Fd*FLZ[B'+q\pA*fdVm2`.Xhq3WXnj0q.bq$8DRC3sFV3S5j+8GkXhq3WXW7:)\5g&h!>'-+3>aU..bq$8DA@%hn,_pO"?"&up)LqZ)<"WVJg&"5_QC\W*;r.4m'A9GCYZI6k%\CG4VrUH%HrRn;!E3"%!_\0K0\T;CVY-n.-J5G00BdY&0Z`0otKQK]%mcNiF:'UP'i=8!k*r06\NXp%A;.D_!HG8:\[ZDgu3pPa%;MMP!Qgng_J1/"\&4#A;ZZ@KouTte`6/T0ZgYi@!8-Ei+^R]T2Jd\pYZ3d$37]AYW$'lFb(2(h]hga_)/ga_)/ghOD+\!e;q_QC8`Xhq1ejAncg/fD?KZftIm*R72f4'CcX3o"JW4B$:ooWVkTk38&^kDkn!=W`s"5.t9CNGpBQ&H?kM2?!7+SrW)aNY3Dr8F(-6Z?`2j5\-B4%2)FkN5+kN5N^"g#jg;Z6',IlJDEf(D`OW2R]3jcI6KTR$nY2DIX!_([81QEL,TMH.C9/+ID=2F.X$#ED4a&j?!s%'Vhst8TR?V7TqZ/LkhX9c[pKi3#`9^e_u6m+4IK6/2rXf"aEOR@]t.PDPDeTlUUT+)uC4.2s/Zc#!3h?u\s:_IX\DY6KX-UQZ5^YJJ6pmihNJtj`H[$Y`BOl`"gr^[,chMl4q<'C2kh29B5$e;,M!<]Uo7Vk!H`,5\V/2M&+1(]FkD"ch*f&\bDL52\;Gu(FGRc$%^5H9?4=YcNCKMT,H!'c?>^s^L5ut^.-"17$F^AO$F^AORP)IZ-3o1;&\6Fnrq2mVNd^7)96dg-S1cn92CNk0r4/!BQWoTKp]rS/ghCLJdQ.dt7N!icN\0\GiM&'jCNeTBq*#I6XRkDo/=b2;aqf&'I9C6R?]DTTnc[1rIMe=6fU*>hKDOAC8YkU+8'@)B@)At:H`=D:lJuI4UXc/X6SsA=WQe[fc"Pfdt$V!B4KaXKg!!t2cd.;qH/VPJms^VmPguFgi,JJIc,Xj&E-[K4aO]!tL9LIU&e35)g-:$+f;S=^9"l]c"lU\Ud5?&%C7$[gKSW_QC\W_Q>.Q\CE+ga0#4%Chn9U/-6^C"HS5nF/b&-QnoKNj.7Kj0OjE2t)eJfk>N?r)G[Kj078NJ2>P+:*QA#_HG[KNj.7?(9VaD6P8.$`?U'Gi=$A\5a(C5nF/bE"+#H.blN/C+P$B"[N\&5nF0G,2=['.bnbiKNeUG&-P91"FD?J.bs;-k>j*cq3(cM^&.Sal>HY%5QAN8]jes4"Uc*3/6P;1#RNp*+VZ(E'G1N)q'I:_&s5S8KV'^5eDs@NUd05m0cg#Vl-4?_4O)pS.A#Z3\GKq:HG?ZRB9$hFh]tIs/j0utR5=fcRIbM[pAL*c=E%3u[c69)iSibSiSf'no?=S,pjWm\=9*Hnq;A:)!OWYVE>W+j>BL%W't;`N1u)+o4?P_g4?P_g$P'W\[hZC&MMBlCLPLY?LPLY?B>NQ8ijO.kgPSg3NBMXhaqnK4Ad\Ng(S'6;LPLY?LPLY?B>Jl)D)F="cj]Q%^hbENcd*VccZ24(s5jZ\TDSh4ZepP0%M(sRH[sk.gZllj[hTDa%hB0]%hI!<_emA0`GN#WiO7b)iSibSiSi`uE4E$[XgkK61u)+o4?P_g4?P_g$dQ*0"oD=qFpgPUcALPLY?LPKNYiO7aSijN%Z:!Z6lOiRGu5OE9D@1tJ.iU?"6)7D#3OfF$D7gf@3o\?1"#G^+IXG^+HK*,[9E.rMC&%C[&_%hB0]%hB2sK#;HED=q_R(PCB0G/hG(N`Q?iSibSiSibS=`CmQ\?2@I[S"J)!rWW&TfC7i4bUrI&X]#7#W"9s_Xo6MN=WkLe,sDa)OEolafEb3hWC>bqu,II3amSTZ);L9Jb2c)?F7MUg(eX0B8hRN-EY3P6s?Q\h6>3Nq1i\_Dd9i'OLqCkZ>Nl(SP6^X74(1q.o2n]RI1D@XtU]Sf",\AP%4):0m3gKX%:@a_4AM[6TJ^'/Rh58g3r<$u\1Q/\7j[X6Z5/VDQ-:``W#L^M$O=MugZW^g.9fjO&jZ[F9^"*685OIngp@h_;f(,X*I&hUTB:a=c33c(3sPPu^hq&-`GP8LiO7aSijN=OB*k%DC]TTDQ=Qe[hZ@e\(0JId3-f,C+BW6*c-V*^'G/>a.P($KM*+F#>]sam+,obZIV9n9ac,;.Yh"/Xu[f72:mJ$AbPJ`2g7:K(:*-53m>I(GIecP58%2.OBe`Ho[5L4cmC@1nHe_mKG@@si5oUT*k\Pq#)BLF_I(i2pg)>U^XTV^mI4nN?`h!j&g(*mLdj]FUcS_L;/o$"-UNB?H!p(%uq55,DP*WAK>.@ZZ>ZtBQAU3a2W[6d'nfh8*Y.hh[d)/u2b/st_pT6RH2,mcOFe8?IO[\0V+90Z%:NGQNY.g?iBbUG6j+Eu2*r&me!^BpC!Csg@)Qbm$S3?7s]59"Et'tO?M]/Rka%E>^@G*D.+SKKOT:=K`o-hm*9sUdkj<):JOg=,mgHrs4:$'(*KP;po#Nq=&[rLa't;^$KA2:m.rHkT.rHkT.rHkTWtuM['t4peeY8ed?sacMpusjWN!,h=)M)aG"qsl/mDnhF@^gls8IllSi,T[NgLs4;,H'CltV,s?n6Qk$f'[GR"aUlb/\nVii8J*C&PQk25[(,U7cBP+c/M43&1a$p64fM$TE)o#"8e_fD/0H@4cC#:XOoeNX+ct]*WK:@5+2%0=-!!cEI-'FPk@`o<]pPe&r9;WPb^68Oc)$Coq0)c?/$E@0,,\'XE3_;'3T\,WdOt=R:(=]OKU,(@XD#AR])D4biMhB*ke>B*lP-]?`:gPXaCgPXaCgPXbN`PcW4D8gA"\4ED'ifR"2mG`C.L]h/\cCL%DLYD$S9,E+:lkY?WHqlhLRZ0T2`L_Ddo.#!U/$PN_o\3CK+G-l+'b)6H/QT@/b$SVs'pJ%7JQ(elf)(nIu8k[=r5d;/[=C,(O^DES*I:T81sO+@`cG3T5`=2d$"F8g752baXqe(iH\](#t_juMndPXah5)3p&/(b4oP7Y?Ho@4gr:tU_?Z,cCQH,T?243+)h,o\K"n8dHqlKE*e9P)07"*jokuJVUceeD=t8#C[=Vq:4k)s--Er('^am`-!IV8[8up]6rLEPotgd>Bp-DUpGks2E@(5aFHPA/4"Q:fgn:Ru">-3K308P.%UQW^qfts3n:j`K/f_OlPru*di0KO1\F!H6XeT-hDC5hoDq;7Zd@^1?3-t^EG?biJjF@C_!Mj":7"HqBa(D#1.c*"$LUD+T1<-]UEm#(o@h"GXb0DiEZi]Z!S;+6"BuFTRY=rmiMJ'*d&S9B1.L3)0eA"m!\*OT]:hb39Vi7*\r]0MP.IJb-npeoa>^QD?*dn32kCj<%?FCEATNNdQs-A@G`ATK27Q*O`Q-LBHX@aFH_YWHV^]Yh):*mg'G:E>/8cfV%uip6uE-/X/s(4NrAIeiEf]F9"&quug?>*=C$$5DC2%[tO,crUs7:,:=`VD)`-_/6Z4a!',ik!f`'*4=^GejG@R1b?Z8DM0pO*SPq%'Q$#q[!NgF]VrHe%6a*M']!V4k\4stHk>LX9bAZ<*pE$0K+HD^_m,/Cn4CV(30Cor:9BjG".g%ssP7FM:DM5?/K[3Dk_l'CfTuFVG_OXmSeq^iFr?V_kmY$NDl*1!Y#2#0(0$O=hSBR2]Yj'AXf[62qgRMKE/[/O7eh1e=q/+c++rds1'/o"pKIs*__+R9._CenQluYd,]#F_d#s?kL%JiR9IbXRl,AaP;$e=WSqGgWK92XL"AWJIJhn8d6#L9Ee87*1m3Wd>2k.Xf`<`l@/F_EFoC,Yt#2#65O_R6ECeY`>8oLSFJCcQ0s.g&"Ut=&H_s@a6a"rD89]9*.E)=]C0C',dl0rPeE*g,?OTF?Vb(Qf71LToFKKC-,Hd\J/NKCV(!t6,)_6u'#%%@AUfpE)79cLpYB,B(cc:VO"],MZ4m=M2ohLPHTmt:61&&IePqng/Od!S)lq;P=dqW9U'IdpcaIf1_*^H;n\Da"EXofp6=lO(")(OW[qs0]VW>Asst%0l$p2*n.b!*p?Rpl.>eP+E0<1,B]P2'X,bAnJhoRlA4Md_7;DPH\2_FUi?I$:hS="GaGoTBt>;LUV,TcZei.DmHgh[n5?4_Tj0@0h]$jG;n=3Rg"$1mY747B#1TN?A=rU$g1K:F9"os(AM#mXbOFP,1sVTUI(i^FVDEp3>;CuHRHIt[6rT[4iP.k45eB>4!FLgf7j2#;B1/_5LSj_.pk:4Z1O/tllc4NoHQ?qaTq=U(T66GpKpO"6/M@n^od(?JEu*B#rQq0#ktJ.GOn'Ee_IhB57F#IppC;odR=fg`U.1#J0-lD<^Q`[WO%UfX=(L%gSn?05lA>=[I",3h4ur!QTD\_s-!ochfKU[sdN1e%SN7oaLWW[<*f\YSg%DA>CV;YR-0sA:jNj-?'s]%'JrVi6:$\p?XBh3%W^g?NS7a]>=19?>-cH5r9L5=>U/o_+oeL>51Xa2ZP1g&JDc?^hq&-`GNS2`GNS2`GNS2`GNS2`GNS2`GNS2`GNS2`GNS2`GNS2`GNS2`GNS2`GNS2`GP;7[T-'\%/#Au/PQ\SQ->[SBo>TIB]LHWko#Ss3*KsqS/k8HG%'QoSZr-RrK$XFrjUgf2tt4H@l]H-IcM@,*^9[tSiI%BI^lbPMr4O?Q[ZFM"aBR3W1[g$q1U9_D=u7P];VV'7VJl=JDOZN_LY[KE!0iG+rZ6NGi,6)$&D)\0JYTr_ZQn%,,L.DE>VcE(jcNu%nC#REXZQW-PeKr3Td0KcTEeCc==I2]s/FfO+fiDW&@5V7pd'@NhP)NfL&.cc%0*'#Sjb8$&0(/>3N@h1jg0d/[k`[?GeES/Vo"Y/%'l%gVA%CPI,W)R+pA^Z*N?_Y#@=Gk![p$X#1q!=bRY3I-?X,b#oWc)<:*JGrmYVZLCWmMLaBn&F[8e()d.Te3t9,j[DdV`csPU4^G[,b_RhW.$:D;e!]1X\.G)Qp#rll<_Q_oB-;K@UtfH>$8X+jnqcWV8CK9lX)Bh1J%EHptE(o5$L2]1Z\@P\M[7/0k.U8*R8Z(3G8*s2'g]rk+VVdLY5BJpV\LTqJ(>na_U3f%.'m]"05eQQ#/V&.1iB'o\rE7M68noe.X=d?pctqc3d*_9d:"LFMgd6P.#^dI&hU*)&C):.Nh$_V*1'F#+o@W6`hq>'bd:!0P%KBH0k"a9%3uI`O/>N](G39Jd=\#fTSph?_Je1^'A:6bPCc>eD"Zal:`VP+BbTNgI.T4Y_Xt2hFd1TCbK8=G8^eMn8?r;tJCe5dM&ek%Mde4n)o,.f,SN9O'6/L!]ZFm,_.f;37\Soe22,t?!.fd0h]I?[fo\5XrN+$NB@pOM+`.>co`@?hb0Uh82]LFHqRK.sW\"&*Ob$radE?m]YJ9^``dp[!L24hHEc+2MW.2GE3PJ^I_23qj=^Si@,,f<<$?[60he.ZELqKpgWPRe*2N(aaV_R.bb-[o`(-#TbWq>HLu-(IN&)/l>4-;Ku?u.D;7K#%^&JU2YA%)E>K\4o?Z*.K)[n#aa/H"'oLCe7GG]8p-Pi@,AC"I';rA.]MQYH\GN)l7^J1mm5^];rB`])VWN-&n_/j:@!BoKn6n+&A!8t!dB==9d+]G%Rfb$_1]]8pUr0J5T97%_NI,*r-;dd>/t(1f`F1&\]UVA^dg=2ECk[EsD4,PXrD&;t^!^JpMK%;H@60Gk=N6!"6f44q*G\?39C\?39C\?39C\?39C\?39C\?39C\?39C\?39C\?39C\?39C\?39C\?39C\?2?t[YdSe@%79r84eCN@i6gN5\ej1u0=MAI](Li6b@n#Di(`XTAXT$%"(`;OndI@Ii6\R7'C]Yq1VdXm`AhfLU+,Dp5'@ZHR8e&i&fdI*U_I8]pLS,G/3d.F=67OFqLlN!=1KBN`7/5hrOE4A\Q6XN<)P(1:PT\*aR@-sji7(q,-5@OmX/4lk2W%0VC10S8TXNoM^MaeLq&IWo:)jn,*uAt'5s740WamVDPXI@.Vl([_0EW"cFLKi77%j;;.uB;_ktRfQGrj3-g+!U$Wr<-HWn=S;I/l1O@NAt;2(2(g1.g:/#tZa*tNf5?-`.s]M`iG^\K+4#M+UU`(H,Fpdu@jb'ioZ_/*Ie,To?,$]@\+3ofmlEQZ/qu*Q)j4i88Q.6#9R&\(SC=Rj8p%et[^7mD\MuY?MVe:3SgoqhP8\[ks>KZQ>W]+bto5$J4Z"+,p9Yln&&TjG1_"68DW;hq*pn-0RZ0t\+g@lMq4u`PVF/QhH?_QSOcmJS7Sq[102^*;;2?`T)a;lFM-Qdqa$Xpp6KgD=a`I3dd7XTed;ZdDt?*u"RU@YM8?qWrn]Tfr0fiHO*]<^@3l)dJ=?MtsaBC1FtG6qUtG[EKS]a%oXG6#@=r]#$=DLQX-DFc_$rXNh9ru1*k/8IfhQqO9='!P!jP%$,2Q9`7SKc[u^7@1b0!\LPDbEljMM6j7IVdaLIVZnV"MC^djMq[G2l#;@qNb,/>::rW^O=OUc8[u<2T_#:g^8-ML>?#"P;M.,*"YQcWWnSc.Z\6`8KrP#;o'@jjiEL%6I7'A_^(1!\2h>1?#!G+uL]gr@P7RA>Z+:L$qEe"a;%25\gfE32gfE32gfE32gfE32gfE32gfE32gfE32gfE32gfE32gfE32gfE32gfE32gfE32c[K)haN90MZl7M)I^\QRuak'6oQ"#fht*iV5,BN)$MXAQql'$Zt[^^e>Xl+$CW0kGe^I+n^+H4YE\1e,i&F*=C7a^MXcs2lX)I'onh#:7RSEJpMea<7`#&u2j-oSQfuiG&pdapn>?%XTTcC9WfFq&eKL%;^h'-:?%?AV&Bq("V/^2r77GofT\mSg4Rl&>44q#8Y=K@(HR/G.m!C$>Q\o)rMC^ecNRjdLf+bA[PZ2a"Q9h>OlD@%M=djQoPsE)t?29d;e5jH1UGK"fG(7D5Qs;;'D9dfk4Zd%`pWG8$HP_WP#nsrE!4C@qnImTtj:mR7S:mm%a+P,(@4(H3E:'NAoeoKKc\%Xdf3g/E#c:iZQuTV^02+=:J[.po;Ut'dMFrblcl#rte(!mWg9km1NGr!o1U)nB=TdQb?OqXghZ-a0YD4Xo2o*(a"@M<@W6<6rdPlb06YMR_R@Bjtmlk^(-?rjF%D7ki250-F&"qtTBkTX[FIs2W:7m,udq<+Ml:m)j\t(#gL%!iO^qBddF1\-\`<1`V@DqIIA6V&NeaVYS.RVj[.D24:-1'>3]aW#kg78E9mLnZieU,`VnC;m&(C,WN:S34XkKh'=oA9U1L6-aE#>Q7#^6m\c3Uk_TF)^B!*uFT5q#QB@'aUf%<$`7q'W-t):t79`b[g>P7$AXZJ7m7\P3@Z&(%>bq')&X(TpHdNN+]rf8"Lbb"JP,U4oUb]8oXa[gT`.YVT&nEEFb3fYO_jM/p%NDroeFZS+37K2!(U#W6a#]*FJZB49HA_6FZ2^a5[#[C?#q&F4K>DOkbP5dP4F"$c"_eRlQrr(96Nku44rGWkYDM4TGD3fVK9$k>^qnhWeF*o+"H5N[8OAthLH2PTY)*_pg#TAogiD^[[MAb@#87(Y08M0>O>7[?dHH'NNbQ?%<&@U$h(22hN;KnJ[K:O9_s)1-@Gu$:cP)]*kmj+DTRRkbsI7d.$[CnRl<[i)m=j55M6FQ2dQUPli2O5%mL3cVe98.o2"aXAM.HiUh@#GPEqslQl:T@;^(7g"FD5Ae_Q_b_g"?I:`@&=hPAZ4N3ktm*Qka\`Lda'SC_4NB[iA^#aD#u;gfTQNN]kT76P01:9W7rQ8hG&Y%\(/j'0`5f,7,JU9V_b%eAZqt\h6`id-Qq^sFQ:%FL)OcUgW&"f^M[&Ik>,X5k"LC?0.5b4LYe\eS'KC8'3`"*IWre64\eWKZOLoenBQ[Ba=!f>)FpJlZ1fSQ0X_FO4GELL=[WKVUl@d&AIE89mB-k21[oq:FSS_,Y`)8in%c!%6_:t=d^4rE@C,cV;a6-:Op`gK"DEs'A3`N`[5\]g!aRfE=^BT1TR&Do(o$Vr0T1[Gs@DbC1E$SMhm81^_N3.'>AA%>PgMDQ/9WgDiP\$[uc3_td=<>ckJ&D7(>,L,L_&42>HI95S(8MM&1r!U)@MJp%j.1h0po)$"T#-Zk]#TVnk/3m6@;/$4S7@4T:"G/;P5Ll`tm?B.>r0*FEa:2jpT?oOC(_b^@d@k"pI-/d5[/Q03HPX;FR%,._=+Ac&H_5\[b<#%`?$a2"05kuGaXgeUu1*KgN`6*dIfc!+@A*B:,RSHWJ(ZtUPR=\$I#+()#Si%).Cg[&(-nhX*X&M6-1Qir.LVoIV?jbKMP7_\"PU57?WRF`RSmhLPs`a]_DrZc"h4u+i%S1Gp&pg@Vl=/tC!gQ1c/h_n7;MD+`#Z_^,=(NQ%IC7Z4SQ/!A;[Qef-.&M;X]?Wd[&t"ZT3+ct'3\];[9FTbuVYpjP:[W\dO\66,`r,0O%pR.k@5eL"S"&$:AH.Wp@"BG<:W@+,mB*G9#.'d31h`nc.^3Y;^n`I_SZrkcL2nsb.Y7#^Y$/'T^7KBSH9lI%!1iX$fPKYWd$K>U="Vr.-HW1u%$b4gI3%J"Ba_a,e^WZ4eQ`/f>s?bPMP7#L!pU4AYj&3^d9$H.h-D`!MF"GH!i*.kY`saZ:]ss3.2_\g@*t9l\N4(OQ9_!A0^;6FC;5uJjiTAAo3r8"?(Z/R'h-lg&IY=T7-%gBT,q?lLZB1e!5Ja?OhBl$"tmcTJPI-Z_[s"qR^.b(P#Li%!=Gh@+LYF4]A[tdL#P4&\YU[N&?l.eQ.5q>:o%h_5s\0@F>K`?+$>"V)))$SM6VR`OoMpM@Hs(RAK"_@]g*/hs.:tpbQja^;esD$>;un=oR8aY#I:WbLYtQj:K$d[%#"*A;4cu5+24DeSk<@c^\)DKER0QX>lC+s?O_,@&$Y7`Z,.BGCY:$L&KqhS6V$0Kp%`Z3Ioc;l=uqK1JN'k#IUJ5I[2'^30E3r?$9a.OjcH4fB6+gmJMp.K7_=]5H(>mZnk!\LD%Q@cBI!3DWP<:[Z:VA&5'ARNn"!UVM(/@2D%Tr2DM(5$o++f1iMF1JT%G-s=WNBg."(J-MP)&R.H^bYe5/jd+.dIDs:hTd]AS\?(YF_*fkP\kSBr4eCrUq[<^S`HFQGc7/W7=EkgQZcQ3/-Qduf:Yd8AI>(1SX-Ae,=4coMQJ_Snce)hY!j/;=L&meJ`:TW]dLXhauuUE8VoS[L$3n*PY>=AT>V-4p\R,h*"Q7JQg0G':;@Hd.pb3Q[ugPRUC?ePfNPka4XdT6.GUg5D984==d5F-N0L#P#cY-_J2XA"'kl\'Q8&pNko=m+d*J?HW)b/jlhdKW?-08Zi#.kg^C"M/pMkq%9jQ\o'fo#pKpd8C&Fg'VfNl+gG?!-a&:Rd7=0>kO/E>ZpVSkYinuJl['Fl_N$7G1LDY8]7V<.gt&#Yk!bd+D_@bQ_ac=i#$a5`=/$Y$/YNeNotZ#'RT^SFoA@g'lnTVu_*@\^4G*1fT"':*\E8i2\Y!F0-%E[:XC0#q^9\BUsQUkI;F)@$dCC(3%kE_/IdiMcoORXl.ZtU!6IChDt`q2ep-Ddm6X/IPJRJ<4#6llYF:;?NmUd$>>a\[`T;U\gh[N&`)-^bu"8c=sGFlDoTXnl58si,5JeAZl;.UL8#=K'()<'J@M^:]p@F?+(+0elRL-Nl\-ik[XCDgS+e2>)=$m%7]j;lCbQ$#i8`*plsj*5\FeVlh029eY]!p6!KT.WWfsAGF^odCOHZel`.a5Wtah%0<)&dlH6n@>:S-h8`_C+%>(dg,)*M/Hni>r/L4\',%"[<]Ap$D_a`aX9&dTt!X62<_m4A,t`)00jug],Pjr`7I&`@d\O_d)pH,iKTcM$pYmP\$ZF'+4&V'lMj:7lK#rc>7J]fBRP"1qJPlJ?96,4/'s=(/\.[CqJ,NNPBJMsGmMmSC3/ld=fRVOeBei4+TSqV!3q,$cJZl="=rOM./%_<@TihJ(LB1QsD:$iVF>R`dVK-W5lbMi982]=C(7_NWBQhok=1o)1[9Dd-e3LY,E7G6bj`Tn'2MmaHQ8t"Nl0*2^jD2%miY1Kn'\XJLP!p!V3Z:\T)@''/5H?<'==$("RDa=Z37'Kf,Bd'b[t,(\T:T0nf7mV1o\Q&eGG6W60JpJQr8%tbps;Xu'6\E/"*NEAOE9\Las%VlELF&@s06$\U`G*8$c-s[2Ae"N[5mtJe*b^38&m!;6PK.O8"$M1tY"Q`jljBH>#L":OAXN+N(_*9/FoPNI=A,t^dB&6HEVsl^Ri([*u*5qh:q2nffT;g`o7S2C\]H)h'Ua106P4G8ThOTP[TLY_p^#Wg5n\@7^)n;>iJOE$GLr#sjgE>?3.)`t6N!(]\X*/afL@AWC8%@+W+67\m\)^Zr??o[(+1YP[-dQ-$^Jb4uV\,HDNSo$G"hP(Em$<,%HDW8(1\_qjTH00DAWb2%(X6HDk%;Hg(-G>*[+Y-1G6gC1e>raJZPM=kX"YJ#Je^Dn>/AT3fEIVb!:FGDGbc+Q*np#3d,NQ*dqqq.K;VkFX!bY8jPsrl[Rh6R]Cb$Lm>*c>9f?[i$XT_G4AH9/B+ORrcr9X!"FlWnF:53F2Xi^0\$HiRliOkc^=b,nB!##A?DeZg$M5)nRN'',CkVLO.s*UOTNu;J''Oml+%=kQjr13;I*ET!4&"#PA-Gc8$'K5'glU__of>f4O1BBklK?O[luU[-^I`*SClmqthdfC-[^[*."aj(e+Xr`(#;*K'-ohH,OrDcsDRCBm:kR#ZbDVc#r6).M6h?)CD#jk3Jka"C'G/upU5RU_&VmHk*hr[ktD-heSp[X3Uc/ihUM7ksD2f?`5NUg">;KlL>p1*)iJ3NGo9r-RncJ+Ng[+h9kFl#tflFqt4,tNqm$d+Ck#c+k"#=Hm^Ldf4SP1/B)KX#20%#4`-([V9A.rHkDRG3VRMVF$CMVF$CMVF$CMVF$CMVF$ClIkWjkAb'N.rHkT.rHkT.rHkT.rHkT.rHkTX/FTN-]T3u88g##[lY]RmZmo@U^KNJG.;8QK'\t53-a0aLMltHE*a>kkI%M/[8gAW?0$,6f=DaL/`_$]Zt)TUkHtWJV7bC"]=%bgo,?TC[hka5=UuRc!U*q>B@ju40<#,h?P[:;Q<<_QQ+_>cp`;lN,BTaEG?TPMC2LCFMpnsK?aJ[_h=&U&ZeM.d8SFULh9GIO"CJJAr(\KDfaZ:\[5nHZm$G+f!P4hI2eWE)91V6"H.;5"eq).E%;ej'q!D6uS_\/.Tp%A3Y'TRuC4QkSg6t^^hIM.j??u&p>3o:'D))KB'@=/NCWedY'LFr6k6OJd-+#m_ClcqDfBb8Fh]]A\KbfFEjrK1*Sjd[Vpl_A,8f+n\^3=X]haA)?;cg:C4;-I3IHu0J"i&kCaZpi67I'Vb+j8nl=4$I<6/Z7HZcY7oT:J`^$-1`1O5X5+<\'i`AJ7N%7?UJ9p5q>n0[b=[)9=%T>&\SImTNgF@95Hi8CFS^F\W%n6;8./D2D&M2:r:;kh;k_c"d8bK`@5_N3S0_/6W:W]E[S33j&sq89-2D02c8:SVHVq;/F?hD2o"O>I.\D;Yg>R=EHn_K]9)UR9YSgCX%d;br=A;K>)@Z)<&_tu&+,gMq]AEmqKAO(MTi,D`=E)^g!S+HkTYM_'mt0\oS)$C&a=mB^BaU^]-/6ZJ64'*nRqn8dI%b-[c4aT[c4aT[c4aT[c4aT[c4aT[c4aT[c4aT[c4aT[c4aT[c4aT[c4aT[c4`A/ob*8>EEia:Rj;^CI%C+bJ\G3sS:gIBMPSHJYq-D?K$GTq#L*(=Pi4HU$E:K4u0&8A$KtB2mTh4dF6Lpj4_@#b+>.@WdPpn+7>0Y4Ih:'0KGA;XL7WO@&GILZ3qqKY_HhK7o\beIQhYdiMh7EuI[sithgODN:Enhgf8q/FFEb2MOq!MKcGl&""\T\qT:()"=#pjf!5j>t_:KGTsPj>FE?EPiVXPbQBh"i&TeL8.Q)%(9\!VC+Xlhu.4X_uU6l49@I7om%Lif/r&ePUdP-SKms5%qoZ"?Kd2F@`0+,SdK+'e$fnVt:3.h%hIJY(NmO!34628G>AJ=U8)X^BAtI+KXodX2WDoqL(;##!6EEdEeEEdEeXTl6Lqn$iP1%l.;[c4aT[c4aT[S"MU`GP:/iO33F2f:.cr^#=?gf?(!>9,eg%C&G/KS*UpNs;DAe,t,]:3\J^!!]/p(lYi=:i@]ioEKkqdplWT.*tEQQk50u90H1^K"-W>[DXZCHPeo-LkHg"0!0#&]!&hm!;b_ALdcY5&J8^W$NaU?E&O/Y\]G2<2SDp;faL2fM1T3uL0>VIf,>pJ!aVUSL=n*&=n6"b"Q^8MHE.gMl4)Zf1r3!q#R1qCTWRsf]O-UP`n9S'2k%ouKu$.gOp@LQqa!DPIK588Xag!r?54/%09(7[8j>l"1>jQBg"4.#u#He5F9c-(UPXXh6tl-@hoi5XkCi6JafiR[+_5Z:M_P[2j$1\=1!+kGBW_*A5n,6/%.m%5*9r,PYS6m1HQaF@5U=b]rY?:Y&,!d6fR4Tb3"30I9T22T\O>9X9P>Ub0(-Cp+<'6qk,SXJ9[k/#5c8&(N%;gLQ(j7&Emj4\eaOkpV?FN-p5"(R,\+d!/q?\""g55)B0\g5q=>#8)>AReBi.VN8,M*^:l!(%*%9*r;g=P(#9&LEZu(r>!e9_TK`X&otc2=d#q`gI1)06#K1r#5e4'kSu/u[m6n_PBV_qblb"J@t#L@*a(!3NSOmr"dc)Z&DHrGR9L\+=!OekX:LSdfek'^P-X6$M$)$US2G!-EA[5qDm>GB.^4VPY\Jp95R7-HBP,H4hPP`aD-%St:UlM/eoORY6OfLG1nU![i&qiVlXTL'M2WnGWFC]6tF^&&hqAmj>LY[hZ@e[hZ@e\()//D8d?%X2&SkD8gA2D8gA2D8gA"+Dr]I/&iE1&T0+:Wu%S6EcR1-,h`Fl\FBB6QQR1V!,Z69BLqDc#XBTf$2!Pkq]ai-Ns^`_%44F"BXGRXS_KgBc3PG-0)5+fGEAE1%d4^1dUu^.(\8]fj#860K%(:XE0o&\rNQ@pL,sjV73pXph&Tgp':h2=h9a^?Kh/EMH38"^LEr1=H\A*,0[s6I:fCX([$QSjH_AJ]"-IgF'!W"TqOI'O^-1Cq2aRG64EtH3b7G,*!<(c!g=su,O,(??2p`'/#Q#WZkB;YO\tD:E%Ilt.9TG)4?0gJ=!/q=3i5&5S%/7eNEaf_rjl(cD+P3*f'o(?24cJ5Wf+CpBTWm83[gF]*T.G_^Y!a`SpPu0#0`b#DW(Bco:Es$%VU8%P3D+G*_0\\?AHLC97+H4^67'rPM[ENR;*nGhN[tZ0)JmC2oTr!e&GrI!kF3G^'0,&.*MG/1f/q7BjrGIZGKRiZYNCCS5nF#\qX]Ig#&<3loOt!2jn!_!Ja$]XJga@Ne91!^KEBkm[4gi5Dlf0Jt]pdkaoV+e*4eP0f"2j5Ue<^LNe"N')=b6c6d*]]n\F.@?PFK@;3/6R::nC:+C`/UAhTRg8t/.B*ke>B*ke>aTg'Fug(D^c#c30)hJODlfQ7[_"f3imc9;C.hq/Iko5;>R3W&O;L!$\fTRVMd)bE.9PSW,.F6?<8_1VXDXk3;6]Jg1[W#lY7G*j1t#ZQWP08K/%r!l*m;>B8$GOXlJ=ci=IFso#cLW2A2W)Y;a)2tKgjJ2J.\"A/'_7iHtiVk6a,XnNY-1q&h+,E7^b7Ec2AV7^o#_it#TWA+_gBF8;O?SpX!>1%r*@MZog-?3eTI8pN&>]E:q!'6gWCcmFpKun@SNGekhg^92++=4CT6p^D^:G,@aIsfIN@SFP*)>X,6Z8n2kXXEj*^:A%?\5B%%j4RVrLrh0q6sb\`XJLf8?W5gL:6QYh*Aa?o@;Zb0_)@QlHM72&akC)E"@ne%)Phj*9cahoF:,;c=YdpR/tnlrrMH:Y(]4JhZl3e.f";C@pu%ZUZcp/^:&4roEMpYY"kSj._@"R-:.Gc4:hPi$5aZI"kn9X#GU_.Y8:U'()U<3e,S]DN%rB*ke>;=,7@k5E5`GNS2`GN"*DC]TTDC`^D@r+TDXgkM4"`5!?dit\b:5'\aF4/Q=FNBf_@3*]J5Gu8Dr==8[l1C:fc^b::XceN3#S+TK*YdD?$+06Om8/9qWE+Oq4haV>-dVI4[@nH+j/0"X[6S/]nUTCg9V$1@r[m)R=XVe8N;iR"I),B^2rs#\9[aCTO[>6B31oN9@*\\*On9QNe4R=hN;kacF7hsaeA@"(nj'c@,\Qj>B*ke>B*ke>;=,7qfgu,ijRjTijN#%[hZ@e[hWD30t&:]KR-h\mlU&S7J^NMd*pqXC*MAXKAD!L,nrNNOJcmAT*V?Ss1qM73rD_!)e]7`>:o=`]]I=0;%r0X!'97Lk]gEM2Z8J-q"+5u@E8)$n=S?B*8LX-416n]euSM3&^!d%HW4YYSWdVa?0,u8pM`R-maV^8_%)XN@`rVQ)1Rhkk\4[>W*])&TpIfm&pKEE71D8d?%loCeV.lrBsWk8VGDqb>8&UcJ3>RoDkm3PkuQ3Oa/'6L\Zi;<+Q_/OlDkhA5Lh#YQW*!Z8E]WS+GP.tg$Bp%[.NbE_5ObPObfTMCgEk[l]>n3\9`E+OKuIoJD=oPqX,*9(3DFO/jNue(VQH31[q]]`_qmPg+OnjMs1i9/re7K!Uk;r7[K6>rgQ#;Fr;#Y)TQA%"WLin\_Y[hWD3Z"K]7Xm#Y?8ufLu"m?c)diZ<7oYYto9<9MNCroL#"6*g=TFAKo+C`$ii'#tGN@%o.l\r17*]1`>8]T>#mU7(4;n.MD)u7&3Hg#Hf;"!?ohmb-q.;c8dnOjP6%gks7$jGs]?aD=tBt[c4aT[c4`)N%t%p^hq&-`GNS2od"N]EEdEe0ub&W;/of[>NI*+`@%61Rj%#j;[/qHWq#T0[3Bj^7?Qn[kuUQLr58P1W<[#9oi=]@-_cY#Q<4"Fs7%)Are_4k,2X9&UJ4d7tMr#RZ2-GVC+lOo>@Q76=o![M"a9:r!b_7#6lRr1gG!%k1LF]uk3HjK!0Y;PC3)&(-\!?@BOn(h1H6btC-OH(a9VP!\?,Fuig.GR`.q=Mm=2no(D5FAAeUNOddT5)E(h8N8Ls]8WC2r"n<&mgi/t\HCjc8)6).GB]UMQ+)LiD*,a2TD\SS1Ab/0r7C#uBtnbdcKmbN@uN.^>cG&Zn#g(gp9B$mhAGCmICk9VT=SphJnoj'^b?$"95MT1D.F4668rd"+VnBER/iT$\bI-H#E]#PO9oZ\J&[3gVJ"S`'dBg2mNR)(+.r>H+K\Zj"Mt7JO7U(k]eaMVOOs_.0IE160ccc4Ic15nsn]AD.mk.0Zb!!%Pm/dlr*oITB4j0RBNe^*fY*(V1t)%mP'MM+II,;G?D8['IK&iJB8>6+^h\$VF/!WW3Y:0W_TZfGWW?,h/QiQ765)\84H*-m$ZX5m1#B?QM#iUUBeYMX[K6GZhInEV"TSO=S@4m=b$;:2qgl.!?5IV!TrD>"23)_j4]9n[l7XT`Q*8jiO:+O8^9+)o)e#Y1RWG;kK/TAWiq^nEg\0P'$uCM)fpKQ?s,Jh5e"&+B8t5HT2e,!IrZZ_OCUmM,V'KG8WUg2aDFta4F1:;!>ips"3ea[#J-b6Zk]eTFrOgAc9KZ-D7-87`iF1B\'dasna]u-l]Q=CA.I,0jeJ").W]jl/M#p'TFZAgF+5BA=ZHFH\$EARNR)(+g%T*SO7c9K[X/F?U#Ze/p@cgm\J80B/q&eW6CKZ97P9#>6lD$:<`D?J,%q$4L-XgAhI%X&e!0$Z]./T!AJNN>7j0],NjJe:eQKK[q=ACbTJ^0d!bl*BKA`?&+iY%9f*JcmB'LX4^#NWEp1e*:'1Ir$`i+QgMVoB?E3^rWr=*IISmHe!!"^,[Ml'G!!%Nu[+.Ph[plbu25S&kB)r!_Kf*H)DnDtXW.hsbC'ne]!!%u) +endstream +endobj +54 0 obj +<< /Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595 842 ] +/Resources 3 0 R +/Contents 52 0 R +/Annots 55 0 R +>> +endobj +55 0 obj +[ +56 0 R +] +endobj +56 0 obj +<< /Type /Annot +/Subtype /Link +/Rect [ 211.822 386.842 277.174 378.842 ] +/C [ 0 0 0 ] +/Border [ 0 0 0 ] +/A << /URI (http://downloads.sourceforge.net/kabeja/kabeja-0.3-src.zip?modtime=1165501366&big_mirror=0) +/S /URI >> +/H /I +>> +endobj +57 0 obj +<< /Length 2310 /Filter [ /ASCII85Decode /FlateDecode ] + >> +stream +Gat=-=``=U&:W67i:tEcYn5b^14AX(]C%CFa(cumWXk0o8TZ50iSe;;kIVuF@KD=K;IsY=cR<620(5er]+"!&DKjZaL-k7a4=d:rGu;NWm39!YoD?"iVZb<@o$(O'j';YP+`+rL<1afW`"sn<`Y/3'Yp'h<^i8==+^mkYl;$W^R.oS8PB17on-Y=O>r76lhlao)D*8#oMo2eS#]a&>8DUuZY71tY8Wd/3a$4Y[lUY`P8Gn/1n[d?,aGt<"`'Z]e,b.bAI!E9b,1ZQGeVO4^-&Ct;f=>RAto`tAi`lE/D+_Zpmq%PeJcu!I1h9CUqB&<<$s&W]42d`5nkpLn'IXdbqsaDDj^._R2$Gm(it[ar9O@'.C1smXNNG)RA/tg[<0UTeQuAc%;egQ0PZk+<,WL%CW?pI7m(L@CKdQAq^j9034;TahpiO(o7B33Gr6:cJO:WlG-Y]`$=\mLP&Cp99NMDRQBqr)=f:l!,)):-+nT_%5O;0@TN"?RcW?X?2XJ,sa+ZD"$_jjqZsSR)Y"2aMj'[N!J3[@Sn(jOI3NgH>VC%jqKFghZ-LZIP_]Xh@M*u[R3:oetA73$fQ)==\#Tc(GKo]l;DsO^WOYqQ!3^Q9*.mO4[!rAB8#kC[#0H'-9+t^T_Gk#sVj"k1L=Vh9?X_D>j`faoE@2[lV6S+A_%d`Ld#RN)G)VS(@GE4M>Tt:r,kC@A:L[M^XL[PbV+APHU/ZR>k.*,2?/3$/9dAn4?@YUnc=g<219Va0"]c6%dZ9EGJX7r1K+"*h%,F]r"Hm#?.Dtg$Z'mGL$inK%GHOb%Ya;R-(M62A4ZdBkiCXJZjHi5u2,NAKYciVJ=7E6gd)p]e5>9rM/[`(jF(N]F1%cEN.tjSI4,bp4i1BmJ)49V@tb]D>P5>\%U$m/Ot@A3uJ^''S^pf6U8JRE*>.Y(\UV,+Q5VDQ6)i`gFmb3YUJ^.Vc![rK.llWj"@G'Wm$Pqc<1G"1);Pf5(5uQaATX9/H!9G3D4mm?F0E15K2j3o\l?k+q$sU^uFKa@>a\G/b;UY+U\j;Y68FnsSrkC9G;9k.d9Obm-2;4X?Nq*mhP$iEb\0`2i@5'\&,EMTa^5%[X^I1ob2LcakU^"1$8A!SQf5!,E9o6j>@\*kn+YQaP;#A"5e1"!a0DV5Krj+.:g:%8DRP@pu>)g@ihrTWk7k2i0,S?2ro(7%\0-RC!JVNL9O]um=9?'EP4%KZ#nc*[\WSnqE_U`?l\j!f0QMQ);!n>;(2i2a:F/q]c!:*Rk0\a0"&`51c0Qhrr%[5YDr&qf':gibY,7B3;Wp.).pdk"n4sB=C3,!)a@AA&8H"#:.ZuX9W4Pic_%&"<7IHBIJ*Ep\?Tj?3Kb:_Ro`4"IlR[S@uCEKm=>/o^M[E_.:M?m#n/=MOAU8u52X?O%<4NtuELjP*4_l&R!F-\b61rKS4&e;0\VAtt;8P*:2%:fO+DAqHFaXIglHr$`ejOA%;Skh#RlQI=ef\CQPo$9cJ:BU^c]0RCg2Y!67?HT4,5iV3M:;fdl]3,`a0snnXoJWBbm@VZS,#SW+ZeK-E=(J]$<'$bN)V=UC%STmZ[<$ +endstream +endobj +58 0 obj +<< /Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595 842 ] +/Resources 3 0 R +/Contents 57 0 R +/Annots 59 0 R +>> +endobj +59 0 obj +[ +60 0 R +61 0 R +] +endobj +60 0 obj +<< /Type /Annot +/Subtype /Link +/Rect [ 470.239 692.055 489.742 683.055 ] +/C [ 0 0 0 ] +/Border [ 0 0 0 ] +/A << /URI (http://xml.apache.org/batik/) +/S /URI >> +/H /I +>> +endobj +61 0 obj +<< /Type /Annot +/Subtype /Link +/Rect [ 113.533 407.055 152.53 398.055 ] +/C [ 0 0 0 ] +/Border [ 0 0 0 ] +/A << /URI (processing.html) +/S /URI >> +/H /I +>> +endobj +62 0 obj +<< /Length 1590 /Filter [ /ASCII85Decode /FlateDecode ] + >> +stream +Gat%$gMYb*&:O:SkV3*IRabVFlpJ+i1lEtE7GX]RH63un[aiHn8l:G)7K7d+=&Q?f36jlZC3V^!1H[JAomCdATDY3e'KPZh2Vlp^,d\/,+tKlbjC-AT*J-fr=AoHOaL25XSgL'WfCR,NcEfijXnd9p!J"8hreO!^<3IY]Z<^qaGLetp#baoW?YfXRB,7pV(qHd!YAkLGZ;K9.AAqI[0/'H,m:"ZFie>E'29Ml=fj1,P`PiWBicLr5jh)/JqVJ';rGSoOjO@B"jIOg8&r^3o."1b0hj_WYmbj5S^`%NZhOO`9pjmY3BQ*D<41?Ld,*%?3"[-JLCfce[tU*;/6rRG9QOo]=i@)SF']U..qI);E,.1+a)OY$l_Q5.u@F-ZYCQfMt&ZAi\>%\_*SR/jVMRUH`uQ!TkV$=,ELKCT\+i>\M=@'Q3?;N-T0jg^=5'Z>#*M@6:"-kjAVd&+QmIP#L._IUqN2(D:aXNMl'Ic>8Jk=QGnsm?)nE;C8?l8Qt`g]4I]tPm/&0MU"3:k'5$:&+&$OS0Z*s<*7;5O@?#m\DS5<11mDJnf1`q>3?q.R)a+/i08\dq=ZJ1PtmlhMtjtbPuMG0O+qQm#D7+?qq#)(JABRHlEY2;"fmNfrX_16^be`"1C]hO*i!(X[2X''q\-/<4:c%5\K-7ik=ZI"+7cQD8/q-.Cut1Zdh6%UdoMoKd">=emAR.&TO"LprE+9O1.h7VY;9[8$<9^)ag_1JX5>VZ,`_0u-(M+-\s(Kn?7fsT>4q%"+c0-'/(^O=.m_dmIDiT5Ad@$9?Z2<'"GLX(@33j.gW8X/A!_1@e:5g]MIMUQ%W83j/IXI6hFX)$`X2Ja"?h-iF(p5WFsqSSk!@Qe_gl2d*fAfD3T3K-0h,3d^?h7OYoa[^p1je$"r\R3LX>.Ni1SUTZ?$H+Sj4M=2Nr6Ap8L_U'9l#29T;;'k*hC)Bd)Xa4Z;K=KEaT`48Ag[>n,PXY\`bkjM)R*BS4TAJ'/I<\8q5_@rjJHE)m75(Rq13`W/Z+kcB"cYk9N@&IY3GNId!W3,%*m#tWCMk/GmSkrXd@iHtDVTt.&bi8/=QhHUJ9Wi"l$ck\Vg\E:3V_po#LEkf*rlVl-P>E-4t\G"0XMkq*sB:s=I.TA6fN]jZtc3)C[^#pI8SPR'.sk.I2ogfQUoa-l!J.@#_1o&Wtlo6DsHsoolUD +endstream +endobj +63 0 obj +<< /Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595 842 ] +/Resources 3 0 R +/Contents 62 0 R +>> +endobj +64 0 obj +<< /Length 1990 /Filter [ /ASCII85Decode /FlateDecode ] + >> +stream +Gat=,=``=U&:W67i8dJ$`"9bSPNK]dAPZL]EQ?3Z<@7lIOMuqu=;(2P:B#U,Q`r_G\Pr=?`,^nLHXIY;]9peYPJ8G&M-]mZGPe:r8`UH;NNLQaLi<0Vk>FY,coQ>eT/]lnXkUs9PIHIlm+f&o@U"c``!-CpZJgjJ0l=n/9g"J?Mll[LoU;$[09<2Ea1"?D=r?QalEOoK]1]IF01f&^-M\NdZX"p4=3Kk!kk1)2LUHpQ#FdUt6#T\f:J0q;VEioB"Hc4@?=5[,@#],[YkalsKhn.ebA!E[;MNI\T=6Mrg&1d/_r]nDr9EqQft4;C!S!ZT5?+RoZTBe)3k=3aYnG/rS)`*O?]FPem&>0tTKOqP;/[!7T%.S$/i?"KZ0Crk#^_uU@.\&Ij]aE[fci0O%TibtNJUD@fs7KUED)=e;U'/'b;+`XA5??so1G.rV:bbX(K+=glnY])_87nq`_b<)D4\pMVS$*`XuR5B-!;iN1;@#*>C?7Xpi8OtHN!j6bN6@:q<5Qk35F5E+NeWFfL%,I,9'jbV1uMOb(u0.I8S62'4/aZjQ`RRfW9+.e'=&W17j](9QPJ(=n6E,Z@ibNE/2eaP_[!m4Ak8acW(Gnj)KISdpdNjV5V2t7Cp@hO'IV`Cq05d[UZd(C.C6H;TVQk99kmS`s&CV$G;N!&[AK/;J@\+=p,o-d,$Wq;$'$+4*N:A["F1Nmt,s@MS$+`H_-(g7NC!#bOcTobPu*fI4D[ZaJ#Y7Hd08>%kA-@DF^hg]q,di":oq^Ug9h#.nC=&%A$f3S[(l>CL4H_(m3oY_$tfe7A=q1a%l7Co1-5@1/kiFkb,R`B-fL@C^e1gW8r(M&meS4XBl>@c4(lsH@Ob@I(nNaI2]KpI0K`N4O)fO15Im9rE5Hc%53N`Z.PkNbuPg=';kMYC*Rm]^Ge8*eETWl:beYAA1Jq3'd`:<]0*'0!#kYi/DVWT)0(;lOf3KAU@G#em=S:D7$U8u3QNj>[/'RD!XaBfa[f#*<\+,c)SH"HOa)qe4<\=@CFSel)2I%eWBar?ehk@We;iuksmX>ki2lJ4^VAUnR_&OO9,q%%5)@,\nIc"r;$h#lg`!L9IHh8\.L50`Q#_LE$=(XndTIW?U44Zr./ah6H@%[eKl%',Y&IBXOLS`fmF5%10[](l6a8[KZ"SWY@bQ7AC-o(Z9`Bin..nUj^&.cJ[mJDeO_:UeTZIM1MC-F<>!8V;ogugbS=C[WSo#,gnoY6`&QSPa+SMZt6+"sGgt&)lA/_0@I\O8_BGiG>/tCR2,@g/8jE5-aHiuKpB9F(.(u*Fan7=o_]TOt%Wbi#T9[SS!][`0`iM&1fW?:p5E-cQ%98t2&%F@f=T+XPU(lC-C&Hr/CjQSuoPjTK"AA\pg3^dCA8Jm4:Xo$A06^tUYB>\llfenRc/%d]Y%O! +endstream +endobj +65 0 obj +<< /Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595 842 ] +/Resources 3 0 R +/Contents 64 0 R +/Annots 66 0 R +>> +endobj +66 0 obj +[ +67 0 R +68 0 R +69 0 R +70 0 R +71 0 R +] +endobj +67 0 obj +<< /Type /Annot +/Subtype /Link +/Rect [ 179.521 325.755 207.52 316.755 ] +/C [ 0 0 0 ] +/Border [ 0 0 0 ] +/A << /URI (http://cocoon.apache.org) +/S /URI >> +/H /I +>> +endobj +68 0 obj +<< /Type /Annot +/Subtype /Link +/Rect [ 206.473 276.255 261.967 267.255 ] +/C [ 0 0 0 ] +/Border [ 0 0 0 ] +/A << /URI (javadoc/org/kabeja/dxf/DXFDocument.html) +/S /URI >> +/H /I +>> +endobj +69 0 obj +<< /Type /Annot +/Subtype /Link +/Rect [ 100.285 242.055 122.776 233.055 ] +/C [ 0 0 0 ] +/Border [ 0 0 0 ] +/A << /URI (javadoc/org/kabeja/parser/Parser.html) +/S /URI >> +/H /I +>> +endobj +70 0 obj +<< /Type /Annot +/Subtype /Link +/Rect [ 219.526 192.555 275.02 183.555 ] +/C [ 0 0 0 ] +/Border [ 0 0 0 ] +/A << /URI (javadoc/org/kabeja/dxf/DXFDocument.html) +/S /URI >> +/H /I +>> +endobj +71 0 obj +<< /Type /Annot +/Subtype /Link +/Rect [ 100.285 170.955 150.784 161.955 ] +/C [ 0 0 0 ] +/Border [ 0 0 0 ] +/A << /URI (javadoc/org/kabeja/processing/PostProcessor.html) +/S /URI >> +/H /I +>> +endobj +72 0 obj +<< /Length 1685 /Filter [ /ASCII85Decode /FlateDecode ] + >> +stream +Gatm<968iG&AII3YWTmg#f;3i:Y^mLa.DpCkZF6mVs],!+:9hl."#-?-U53V3J%l>eW,q1`O/RnE=;mlOJI]4*`W//sgmZ$k?EQ6.1X7Hb3+n-N0FRAYmlB3gD/PV-u;o(_\$a>7WQ+I^S9s1(+J,`5e6q"&@p:c]X#Je6kUm:dOqUITl?#@Pk:F[/Hjb(.3-`!*<`rY8'5H3EmX!AmJuCS;L1=d!GKT&$F^:Ih_,^j,ok[>r\#Q=H%hE4LhRR(eJZg'0\`1V2ZY00"$+=#UP=q]]?@N?73dWPf$j&=UK7T9r5@&EAEHOH,\hJE,Cdis-\HU8Dkl($*$=h%JXmfQ?MKFpgZf?-cKtg[0l0FBSOFg#0A(+<>KfD%[D6JR!#:j0F!QEj`JkFeb'L^/iQQ^>8>/:t6:ZY._p"h2Z+OeP*5i`1L>TQSd#k)Jf1FGsSJb>J]*6;DKk+$dG(&Jk$iMd`5f"7)o=W$XuR=)Wc&LDbS[JE)cLu)M<`Pe=VLahDqIe&bSYG!5Q&B5&.`=OckEh!*)5)0!h,crGa^lYW_#6A_:PX[MPYIad3JsgftTuaqDF]fCgifORPr0l-W=8/%W-W$lN:'FhpD#2n"-(,kugb1m6r+V@-qWoQB=#0QgWLd-7l"^[&[_)1[Vbegl[LMfA7@RMS`D?nnC;`2M!!P*#.Mi5$^qcgpe].;%,lT+C_tlI;=^,#QcNOeme3jjC2F3@k_/Ha9P7pnT@h"5DZsPIYdG5\O`#B>9oW=boQ&3Y=.Gap6YU*1pB4B49??.!9m/f+XTrWo.t_l'YDiI9QJ:^Gc!CFR^3J##W2kFC;+HoW,8(hZHh6S^B]*`S&5f3g$RsER?T4:+1UW0CSKTFGCQ&VhtE+bW7`"1&@NOmX(^WVLI:#Q#MS6iER>af52K&4#L8(K2DM3]C^n9l)Qp-V)@hfb)]_`5n@cAeg\do%Jo,]nr"+@cI>24(SlAb023-lSH.-??bL6+.pgq%Y':^-j`42_f<`g6;l(7r'3\SL02VM6UcnlM/lH$,$faN"I2=3JsY^O^SHcCNbPB@@N'+JRD#P+K2qgJ+@bT$')t&+!9fIe1.!8O=1*_71Ef@2cdturfAFfli';1Q_6NEVmleTt+]@5>'V$O2pq2SqH6Ga+chUPJT`HiL[:L9^_g>N5:-<>81H]E#>D66gQg*L&"@O1npa]A%h/g2M"#b4bYd,8hCFj'?o5Sa@daX_2-ju7tDo2Hb10E0XY>6~> +endstream +endobj +73 0 obj +<< /Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595 842 ] +/Resources 3 0 R +/Contents 72 0 R +/Annots 74 0 R +>> +endobj +74 0 obj +[ +75 0 R +76 0 R +77 0 R +78 0 R +79 0 R +80 0 R +] +endobj +75 0 obj +<< /Type /Annot +/Subtype /Link +/Rect [ 259.747 698.355 315.241 689.355 ] +/C [ 0 0 0 ] +/Border [ 0 0 0 ] +/A << /URI (javadoc/org/kabeja/dxf/DXFDocument.html) +/S /URI >> +/H /I +>> +endobj +76 0 obj +<< /Type /Annot +/Subtype /Link +/Rect [ 100.285 676.755 154.267 667.755 ] +/C [ 0 0 0 ] +/Border [ 0 0 0 ] +/A << /URI (javadoc/org/kabeja/xml/SAXGenerator.html) +/S /URI >> +/H /I +>> +endobj +77 0 obj +<< /Type /Annot +/Subtype /Link +/Rect [ 100.285 605.655 137.788 596.655 ] +/C [ 0 0 0 ] +/Border [ 0 0 0 ] +/A << /URI (javadoc/org/kabeja/xml/SAXFilter.html) +/S /URI >> +/H /I +>> +endobj +78 0 obj +<< /Type /Annot +/Subtype /Link +/Rect [ 100.285 534.555 152.773 525.555 ] +/C [ 0 0 0 ] +/Border [ 0 0 0 ] +/A << /URI (javadoc/org/kabeja/xml/SAXSerializer.html) +/S /URI >> +/H /I +>> +endobj +79 0 obj +<< /Type /Annot +/Subtype /Link +/Rect [ 253.762 485.055 309.256 476.055 ] +/C [ 0 0 0 ] +/Border [ 0 0 0 ] +/A << /URI (javadoc/org/kabeja/dxf/DXFDocument.html) +/S /URI >> +/H /I +>> +endobj +80 0 obj +<< /Type /Annot +/Subtype /Link +/Rect [ 100.285 429.255 161.764 420.255 ] +/C [ 0 0 0 ] +/Border [ 0 0 0 ] +/A << /URI (javadoc/org/kabeja/io/StreamGenerator.html) +/S /URI >> +/H /I +>> +endobj +81 0 obj +<< /Length 2565 /Filter [ /ASCII85Decode /FlateDecode ] + >> +stream +Gatm>;0/Kl&q9SYT]R\%Q,nK;&6HJFQ"24?ZZil747Vb+e`@j.NGU!Z]RZ3frV@7"67iDrLt^pDDU[nM>5biIm$ku\rF5K@bXE-+J'Oq'qClDCEcL/n5"!77:4PLg7A4ea\NXItR5g86?Y26Tg&-ji%(XYm4`gE#T&]Bkc\XbmmR>2-4D1p?rd41QI%=kl;HA9slho(3r:JgiY(p\7F-Vu(S>H6-\f\EUdtic7E;s/*asSg&l!g("CAU>2E>pbDR_UMmaQh-^3]\P2;bp!]Vk+)2kE)f:bY]B%!keaqqJr0U\(+BQ*B#RuE[+b@^1TofO)"R%d9Ss45#*![Q>!5?)D'Qsrnh>d3-K=Z7PC)L@9C=GJl^Q3;^LE4\WQ(Vq2Bl-F0&7^j,rEL,!=gIp/j#h--kMioub#OnNFeX"iS8Wq&V([=UT49JOp+NXF)->QF)WF0&_(ZB'/ec(6qu)Q0j+njNC$8eAWh_BaX5^pi^"Sgp19JtK2a1JZ79lbd`_c)]1p7>t%3AGH':Va_0EG@ZEWGIsPp,bT4<8miURMt3;$&4gPa@o_gqs&R3V;j?O$LQ`_hE\NK+,%%0d>o(&l4J7[Z(j8Z]iqE5>WE>GU\jiRbk"qP)FD]/5]iL@h^1r!@d)Dk1b=a?b7ZLY_EOkf4mE0DLTm3[*djR[)qHg](_OWp8\dte%OEkg0ae\1o7\SO?O1eJYL?bck6tW-kJO.1Fh!\"E%=]%jVC7s"qb`=9NdedWIEY*Bci[AS+AF':OoE.])QhnHhePjI-PQf]RMj0(aDU;3RC"nj28chRg]GRIT(0%W:OMkrq`60`>4YrIeJeC:/#7(/--g]0q^ZO'T^G!a@D;K;?hrf,cVqhJqHt+l=&Q["YaKctpjPcIP[Bdr2R5,qhMY=-5;I7jVBL>HcTSZ*$KTL<7.a>lM-7O+0?#je/E_?:G;I=01Fr_a%+>hc&KHNoe])("=b.&,#CI]U$8u<8)9uFX]o-P*M'L)*n1o%$.>C!##mc)i.8&;>VJWq1@:F"!ais8L^*r!)449W9KG\Bs>o(1l$ir/iO6Lfo(3^o`=Jl0>`W7ek8\rM&mGl'Z=oDH"cAG_QQ2DAr!86J58U`TS`1P[i$5#1(@CE!+QjUjE;=b.IAX4HGP\lsi0[j7'7qE.lpaEnnU,%'?VZG$E&28\\V2+nL_8Wk/k'(\3A0lkpJG_r5,rN7ZsJ-PcWa`.hWqe0@!:>Dj-fNWZa*H%8X&,["t"tY%gJ0bppbVDit!E1V82D95+4`V'<"VlVP*OU&.o[]B+Y51_nkTjJ4#,T1D-8TE75ea6eIliBG6ONEiaF$i,o)#iPL6h=^141IS\Q4p=AF&Belui+F=_+njN*d%*S#^Ap[B&BeT]i+F%Q8)YLZUqZmsa)]@.7DR5/)NNds0QfOu&.(HLlIsn3d$2X#l?X%2+h)?unbUGr);a)?ScV3C]PXZ&n2$*6#4V5s[/iGpKW9=PA5V8t'Q;%NSj\Pe(_gn*Etn^?2S?H(Oh@M!GqQPcXbD`A9q%%$D+G94j\sV#@e&R?c"ZHH!M=tl:cT(3M_EE_r;_W=C[EMVRr)chJb!o8fi-D3,EbNISL*f>lH+mdJOo?H74_=-h'_)b:=B;j'>Qhe+.]a#Y3B]mN@Ja9h,LW)MI8)2/:[G\P%ATokO`G:&/aA^M8EnmY0/ +endstream +endobj +82 0 obj +<< /Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595 842 ] +/Resources 3 0 R +/Contents 81 0 R +/Annots 83 0 R +>> +endobj +83 0 obj +[ +84 0 R +] +endobj +84 0 obj +<< /Type /Annot +/Subtype /Link +/Rect [ 154.015 442.955 189.763 433.955 ] +/C [ 0 0 0 ] +/Border [ 0 0 0 ] +/A << /URI (resources/crash.svg) +/S /URI >> +/H /I +>> +endobj +85 0 obj +<< /Length 3018 /Filter [ /ASCII85Decode /FlateDecode ] + >> +stream +Gatn+>uTK;'Sc)P'u"K;:b>>+X\0"82`lC=A@q5FpO]5Ub:FqjUc[%T^G8@&#u.MmStWi2)01,s][7tY_Vt0(B/86;GGeJZpeuUol!%0^^?V.nfs\#)m?I=YWg0aTk1/Xchf`?+>[s$026PQ2f%n5ZD5URdD_KLEX/>?ZRQ.ZRZ?^,ehWUt@FZ''/;\+;V3rINn2lcOFeS1p"gJkLteXnK)VFQj1oBFBebNc9Gp?SS!RP7,X$40eo_[H;NcHhS9Rg5;D_fo)KofE)5q>Fpp@6?0$#6L5Wf\3:p4^X@>4;I>LOdtlA8,>'W^V%1i?!]+#<_)pe5">!Ba8#OXEV[r$Q^clUf!;Sm`H/G%]>rM]206_=C=:I))\.X`&"A`UsZAQU'W>!=[/65-4F:a3@gTSq/&gDdZV;o\jN*nRIKg2S@1I9O4;<%5!n8e?utFU&*_b4IdHg$K<8^&r&O3_5n(0_\AH#Qc2D/,nP@MK4-dgLF4^4>NCNl+c?_?j[gOb>c9!,X1de5K8BucUnPa?T"%LmI+('YS<8!\T&FZQ9OuOZkmK=kk2],Ri@20Iorq5itBjO63mbYAWLWme,=RLRnuu6$ES%^Ydm#mZqp7Uuc'Z7dn"1.CQ<(/kk6$K<>9;RP_BR_HKUdJ[\@C/X--9EGH.1QXF>7_70p<_codbi,9CkCC.p2@E9XE=ZOoc[?e&$H+H0A6=*=#W''QnLmd9Q"ToYU=GOIA#5=Mcl'%<&q?q^:RAm%"op!?c7d7%X!X=GHHVH:uYD(BG)W"JOLS+]'Y!=lDm:<=Ua?O&QLMgMS^Lg!5<1qgS/rB_7CXWTH-V%N):F9h/k%FOMh"GCnuN)6Ehj4A>Sae>%LGK\(X1$c5*368->(;Z:ZU`#4_j[^JZ[2`qD((u5[/=MeNI1U%rRcpg\.3!)9$E6TaM^:Ju]2nSWmS^]e:B!49.6SCITh@B9X9\>PU^pC/8mbO6!gc15M%>@&80=G7Pe2$q$Xl[>ZFaLDT(L_0aCeUqR`B&);Zq_!-:D7Y5W^!YpO*!Q[4?[&c02%3D7X\oJo,AXi<_K)D/CFRBkXcIp]0[0p)UaDO+OD6+0CJ7`+'4E(#me.r,7=\;j[^KMRR#7B*XEcl'G,-g6XCJBX?>abqr--Fq#9:-[kR!c(P'oNDdEE;n%ss?D35u!EG2>)Fm_2;.#RmJk('^.#*DP4Os+LDL@jGm^'7q.ocrB-Lnk:pQ6Uf[R]g]I:]1R-"%/iUlcTYTjC(9.7(q?s8.a8*,NW+`7TSRe18qL@eoC9@:rF,2a)i2!`Pn*9k?sQc1P>6c+r/7C2Q\&+d/(_=+RF0$3/9[BcR*lL@VRI.(8#3c#H?WC]I8,qRrC5.j6HmVo&acWW,T%scm9ZWhLg(kdYB8)V([6H"QG_$jEV8Jj[^Jb]5-'js5nM/HP(9)7CF"+bEG,O]hhG1f7[?AO$2iae>/eW&tZefW&iceSa@/8dNN916([[U;MOgPH:tckk?N[E_N8CmR$AnEGi!JF7:&LrZF""=T(IT0Kkd?h3aA2afY/,!PD0iGGg\KEQt"1kakPgq0HkBA7@s-Z>))ZXMG)XGjs&^rLck(@YT2oF1RE-KIKTj`9+\D>?rW`iiS>KWEJ$IW)t1/eG9%[p)VYZfC?!T<$.&@W;;.m[RSM&<@1]r%,,p0kAOmo?n!(NP3s%$c8@"ms3RW]G4,]Tke2&d(iR+_hl,+4,JqL[Dj.3Uahh>:&*nq,kC=:I<#toO!CXpsTCLe2uWmCC!9-6QQfHhYC(GIO1qXC"^__4%]JP.,k047nBoO0bp`a(XG6eE$)X?7>b-[h)WF0$_2gP5SCMf"7n2/-a/KIT*"qi>$4e5/1Fn__YqU(V3)dX7$A,6(PfOEWQg3U7=Gl.I)dsO=>-UZ +endstream +endobj +86 0 obj +<< /Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595 842 ] +/Resources 3 0 R +/Contents 85 0 R +>> +endobj +87 0 obj +<< /Length 2061 /Filter [ /ASCII85Decode /FlateDecode ] + >> +stream +Gatn*9lo&I&;KZM'g*fJ,6U8^^sPaPeT!dA.SVsp*\rSBd>VqQZBIu]I6j9OQ3g.LMii(;CbBq(=*U(Ig3UJ<4?M)Y<2-O]=,XZdZB/',rlN;#;/9OH[2%9gC3`bVoAm@kVba?5_YWIp\]s(]Q(%@Cr^^LG%"tOgQm_<&35pH=,2hI=r=G0S.iJ2,@[`l+4^re`qAO&eY,f1O:jV9>@CbEX/JU]n`$8Qi?uKf3>CJta6iijo/M(uOpr^'lm3WGXbCg3f#s4=oB^etdinR[J";R?GNJTr%`DYi?t?di)-ACbo#u/6TfY+!-h%qAS"$YEB,eYam3`g&n\V^UCB-Un/?KGN-]bF>XmgK)#_)=7q!;PJk7DhD7.LR2Q6pmE5,[U/?W9g0A!'^<\`lflAF.K(_Mg&o.h>9J!:ViAH=d'hsM@$$C^0HuY`l$4(h^7.M!>Q6pmE9nB&%RfWXt!g*lpMIf@#?;k6Oo6b`^L=?o&XZX_CC^LmSIXV*-[C:N8oXs'o1JRXM3oOh5q&P9JV=buo^T1DbausKYq>SY)bJ,\`?KH>3#^cqMndDC`-@(uUVu1hh,N'jZaY9AiQK7"mT#JtGeH$MMks;F6ahtG/a!9X<2*MuoXF]_r`:TnF&>"m.bB+YJ+@.SK@%X@oNohcAKjG7j1`\p,9Z2'rjl[&9PD2\j`I;FEM?p_KD#'`[4/?KFK#C*,N6CH7&*[F8_?*Y-BU*b/1*FU&nB7L5lQZ+3?JU1I^LXd.Ekh,tX`*L6A\cSgq-[Bskp]3?eJ2_uTM$>*7[iQLH+Yg7/5(rUu2p)CRqk;$ajiN9h`odVO#t4=h.$c3*Qp.G3\OSm&?,D^$!GZ1;*hLD4fK9rj!$PJbPff1PaJKu9H1YqeA7&ag9d\Em(p/BPeN/dK#0*$km<\YrK!jC(6B.JNMULNH^fg"SGdLP9nB[r+tY^N$[;h!AD8P%Dh#S_t1C2;.PB0LA^%*ZgO&Y.j@3m.Ti41maUZ7u*;TUfqAR,G`4(:eeZhisf#S2EZSq+XRg89C"slPE69D_-4IfP7T!1$!lmpW/@&)iUtlT&=epq`*U:m)\oB>-$`V+G(?/I#sm>m%'eK[>'Z9df5(]MSZTI\lR<%S&HR+I;(Eh[0)OTS9%\[W]NGU]_ITY3Po&'&cI9mSAS_@ZZsC1TsXQH*.\4;T"<+^,kNb*+s///F0.I;<]p(,h(>@Ua&"#g]tsZd\d@n"25Xc81YdLq1g>RO0c8Y4Vp>TLP)CNQ1LZr49FXVtb;9XfT)K?P:X/p/TdoP#m9D-J@+PZ<6q5EPiqsINAnaM&%Fo?SC'`"YiUt!5gc"'Cdo[B/L8`?eN]G&H]n)i$sKIkCIs$utYrrZp^lE1~> +endstream +endobj +88 0 obj +<< /Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595 842 ] +/Resources 3 0 R +/Contents 87 0 R +>> +endobj +89 0 obj +<< /Length 2581 /Filter [ /ASCII85Decode /FlateDecode ] + >> +stream +Gau0F=``U]&q9SY@&YVUSuONiqq/BGZ(7>"G.d@MWDoAmLkI$IGUNQ+NVD%CK+u9/"XoOs[3*Tpa4K-S?_BVI?/.VLr,L]JOo2JM(J/:%8SZ4N@L$=T\P?\IBkfZ:CN4)@/q1D,\3D@F;`VliCr_OIZ(>H\IU\o.VQT;4a[pOXB\Ot^B\.I2"n/Rk`J#Q2YoNO]Xjjhte?`UCZG"&[SkA>#bK&e$]+:NOhc[]s:I"%Cq@_^8ME"*U09,?QM,2]oO7ptR)e=^_G*9G:n5ZTW>Jc4BS5\K47u"hLm3IN`el@Cs3@qYs]ff,,M'eL$:(d@C&OI:'-/ltG9$ogLk51J1p!b'_+C2u_XXFZq06DOUr0,@h=*!sYb@i3cqeRFN99/a[`U$@DjqI^Da(6oL@65M7C+-W4k\d5*e7q(m8>$T5X!$8pD8\<6Ok;%N++=,?-lMd?%idX7]L2eW%&d=`6Lq@\"=$2#T^[HGD];Kfl!g^p/>8De1gP[PRCMn$N0YYh%-;r$%G=G*@KKDfAE_=&e=61RV)MZlg)f-A!7Cn?1[0#d/t'6P9nX`W"?h<5HO?rqs^dZA;Mruj3=M!0/oMq52UiU"7GS!`gc/3>9q2*mCsb2Dk928)=J#-hL'd"HMIF.=cP50Mo/D1Y)T=,"fk`-C)$A`C>;So'AFP)cF2l'N@Tf".>mZ(UnfaWZD"p!CaKl@E`Q7e%qC!qW"HFA6':r4Y'HSIR@Ng(J3-:lK.)*.9Ji9agI<=s5s+7-/(i21LdmF^RfIT9^q=QOX78J:?IfKH%Qei?B5L5@`af-iZ?Ti1R\+/DXBrY][TkZqeu$;="=kK8Ym-%[g1F?+p>;ia[%KR#FK#p.1b4/a@SJF7!DM%l+PrEU-9XEK8;Z#\F@hSBDED"I;JKDb9N(8:`fWrK^8G;]dVa,s'LY6C8>h8&V\RQ9@lST/M9%`Q)'WVL#DhWZeEmZ3_8,,)5/YGO`_1\2H2YnVg#!O,b;s:O&CM:BL5=uiW/bIi(Tfn:)i"Zc[*(;]bYoWQ>/=IU\HH9hLT/9)"UTK$4UDKr?NVZ!RkI4dY-O'X3Dp]^+Q4F0F[*HEp5DT1hCtQKP?(>'.eTNWOB?QFS3rpH/RZ36@s"bbJlhRl@T"3JSUiWXBAg/0dprLdie;"GT`hVf='&H+]NW\uT/F&`BY1OIW^X&bN'[>;6L9]p>-lW&hCB?Nncfr7oBNoq+($o(eg="fbYigKH=pTSX^388FaAcNltUG#E')\4cs(^;Rb4Q85?R:p+"q`-)6nUAA%U^AWO/DFq*eAsE$!LadIkaPh%YPM>#%."6/P''hjFD`[jBN)>'<83CI"UIrbD%IdrO%Mm(&6^4\=2@:WU$KupnD3/Y>eGoJQFi?Om?cPFJY2=ZDufAeK'k"GXhY=Vn$A&A/)RUATTn:4$]",IOX!AL8`KR82iaXU[Of/"VB;hu=H;*ajF.lS')]IT3B[YiFa`"9![At7pLtZJ=,E9RFrH'8Rb1r2oK-F%D.EBaq9k8Bl`5%&rrK?]Jsc~> +endstream +endobj +90 0 obj +<< /Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595 842 ] +/Resources 3 0 R +/Contents 89 0 R +>> +endobj +91 0 obj +<< /Length 2648 /Filter [ /ASCII85Decode /FlateDecode ] + >> +stream +Gb!;f?*E:s&UjDW&FS!VYZ<&QZK1'ug[/I.+DHuX"@[5NBSj1NPspImm.fJ)ne]WnUfYeFBQEiUD4)T'B?n_kU%J$$jPA#?QUqlDB'(aKh`e`G'M0.d(."N+@2qM619:,&!7K?tZmkDLT:XsR1SMflp@S4eB@#:3QZJ`Y:3:apTY-.X$fLHIC5lsd3$Vf*lec$k$jRoTiJYJDT6o'@LF/FB'IG=_B0r&3W:!AD`+=80?OA73XodAXui<#r$qBRdqOpsZjP(%'CYpO$khrA[cl!unfL,Z=@$##S]I%R2CKEj;N^r(0SPqoEeNEnr<)s/"aM>8,LYC#VueAfX:O&WMQ2I>ETp"lo3+W>T\]0F@,0mhKVA2fWEd_,/Qs/N--',-FO40BRGZcH6pTe>Qg6]8-R3eCKg!j[,gcJTmV"^l>EQ+KZ8BT^p\Is7QR.g\\'!M-SMGfpCGMU\LKAg5'c`Uk^2=JR&0:;%5Ke`E\B#"_i4>ZGo&purKQ]9[-DPO/fQtK=Q+mVUjJg()flr8gA(qBFu+P?PXH6PPr$VS%`\;:0?8N+g8/DRT-_Qrl2'(4F8Z<[BYKmT+3QE7:'Pi=c(%'XC#qXk5M>T;iF^V,'s?joTt0TBo%8)2%;m>4G!J`PT[3jVDm,S#/Khgm(\"!m1o,pq-uVST]Ibje9ZEb]A)/sP/X\d#WNdF@(')NafBnK;eG''`HLS[R\-nPUoV_12*`i>UNVF-ReT1`eQ"MMh+p2c":4SI.CZj/qNN;pf.D&/R`Mq)hF"*Al'T&F)'/-d/A)[,PmELn)2\=Snb=grCH'C*i.Dn@KBE3eO:dKadJR^T$;n9YlADQ@]'Rm=M7I\n&9a8SFe:!oS_b.4d9S+4+@>1jEBr3NafYjP1Y93c$Tc6H=6G?_m.h.nq3\gT@Qql>iu&IA5eDq?56Vah8:^(aF^[r\>$Pn%IiLqXd(_?o0`\*eNi?B0]CA=`F&GbucbV,&8+I]6k8PQ<()js,/aOfd<^0TFu:bb/V9S!""VQL)XK9iO5Q2YIoI_CpVWmIe"0M4`e0;)['0pr`([B)B)[F+?7/!O:E>cCjiW!1V6MQuK9Sh2[=GH^nh,eo>7>\,JLetI#",e:aen-&JE,5TDfm:K`7c'mZ!`1YAdZ^(Z!8MUufjJo,;4-BeW8.?&Fgic1*Ss50oQQ$SP8Q"D+6A7_q@9iXk.s^R.K2:BRp[[;14*^>CnmAYFM&MSAIY>m]_:BD@8Ig^gb*m=]FHhe&&T>Qdiis6PRL=jF#Sh"&\W7h2>]>^#iRa!8_c6&^k[Y0obchPMqXj,il2dqT8HKDC.p7%D)p8FG6\*_]o"%&5>#Qq9A!9gd8llYgr^^S<=oHe`HXY/<4uc@-5,TI@D^&c*N/4-P3us7I;6\O!@5am\C!RMJln0;8`hu;B^_!s/EMfCEIA%2-S+bVMGV"eCKUF?kJH:XK%^SDr_%W+'$2EUN%.BUf+4,65rL$`4S2@q*]D'X!r*;Le.P_E>TfA,B#A(nlGQA=Gn!lFLo']S4MQc#&<#t7)hkRJQUfkJ-*P><\o8\/*F6HUQ4uC]Hl!h`UO\10^KP='tBa4=WDdEVY +endstream +endobj +92 0 obj +<< /Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595 842 ] +/Resources 3 0 R +/Contents 91 0 R +>> +endobj +93 0 obj +<< /Length 3053 /Filter [ /ASCII85Decode /FlateDecode ] + >> +stream +GauHN?$"c3&UjDW@/\Ma-KZU';53oa`,_U'O^21_1in'e+:=8cQQgZ?d^&k#6%'S_.6uMPFQttVPX+YGp[%>$"[>d97am8[/cpOLd=:$DmF0[F,k?T5_!=LI*s](&m=]pJk^-BNddn,JEGp$jc\p,uMdL@20C]-_]!r%<"%"Zfs$CYNhqoIbr2:Q\e$\r9LS(mOkZpVsTU1.1Z`UcGo=;EYbETQ#S(q8EZIgY3>ZKpeZ=4PUo,PKEV!DH)3>W'cZ:`3N"S'#4@+oU1YfNSsSr*MQ:l(/[P+t0;*Ec)MES.W9OF1f-UH-Xq]Kfcg.r`e0gT_AYm>HDO/(q`Oi5*HDXEehB;A&X/[]U':3jQ10<(4M&.c'"mknLWo)31pt:&MXCR&$34R7j\@oSWMC2[o3%F>M,]VP1>I%G?p&iM1De^L.+K8T^RGb(]7:&,8F4eD=,8N7@-f^M#ej;+)6I`WH8^?!hDl![T=%S&nHn_c0DV-UpDbZ.iT<*cF+4`@/_A]hRa9J.T^p8k&LZal[7!Cj$E-.<9S#]IWSQjN*9TnOju^&eeO(=-0-?O[a`6T)_Fj9Hr)DP9^87kWfaHXV=2Qn%]ch%HpNI-NBORN,E\bQ>LkInJub&E`]H"'Fc>GZN//En[>R@:n][,+6,dPnu-6+WI62WnkQlO&)T6RH>hM&BHCh-;KG6ZZuASg6U\es`fDil4G@]Ck04@Z[%b29-V?^$XtrqHCSr9q^\5!jq]qb/"9$&auZ18(Ta6Dql9KaR[rI(DtjP3rG%B-td-lSD?f:kqp-Iu9(:uDk])LQJLPj;92@G,*Y;no=#1:ElA[$n_X243:_-'3WhKeD%,Sal:ti;>FD*6;Ra0'>ArpMlK[\6'`i#4$4'l+C7u_$.qpcQBtg3F^*X^)T>*Mt,i(\bJ:7*'_#D1@,lHrtnPHh*"J@o>??=iFFtj_5$H?5fpX[olrO3S)E`ok4u.812pA:+,C3FpHA!@gGfLe(YI*S_QrB`flmIn`9$"qe.a=T>$@-^3nE'++>9gNi,)^l2#!SSW"W+"#oGEV#=D5SX''1Bmc[!E+7/jp-gJ+?ieJUcs64(nAEf(YeZ6nH'A6M,iO64ZtB2UW9Ef:K-k2mkWb,0Z-&j)9erU:OEPgkqhpQXWBI"65D``]5?'/@-Ag.na5)`oe%XFMXOKq>lgsR3]b;:*\LtAHV3g*^VgG9u0X>ip6U`5L)FEoc9"I.if9ItI\o&l&FM+rD!/?Ko.q.Irc[fbH-rP'q\cRkTE'PkuM1#nMt',N3b/Bc6@m0HnZULDN;BgleQ:43',g>-M8m&`@,R^qu\'UT5j$#7?./CB`ufU=Aun$YK9BK4V8,VTi+a]E&iF]QRg=:([Ff&AN5aK+-37tE-II[\Xf#0]AQHi+M1dhQYKN?Q2])P]Bi"$!@4!OUCg1=V_Ubb"4486"..+iLeSG**lpPhkZ'4dg.oSH1S*D3ei9_[LZ7/`VkM\3f2n?Nc+OFB-,QPk0mU>Zg8:fROY&Fmi9D=scg]l_5^s=>5lfb$j0bb8,5LDW"1n3Ma;G+`>i?h_RPKBe%a2Xd]B;*p>2fnWG0gVB,b+^m'jfK8Z@FH8'&8@>)iaMI?#l>o2XHpCSMa>$KBDXE83%fX[ceGIl.T&"l`0e#"?;Qp%m)Fs@JK"#q5%potI!@+th.C;VY\g?0gFT[#XE$Q@N6\H&hF:T2^,Pbk--aQ@$R'j7*Ki096JF@'8B]nLFbPUU*DZ?$Ds;[<+Kl_;bm"hU=Xf4_;FlWdCAVUUH1+E52)0NFZS:-$eRhf?I)$R+?N&K^l,'IO=k65h9Ph,a]ZXs$I?%$<^0pe>XJ-nDV![PcCT&n*ljJdK=\RESrqW>!'0!9s*CZd0N@KSNN>9GYod1u0!7G*Y?&)+ZrA)C,"fYT$L]bXCQK0j0<4r[i:]<;s*L3j+I]DWnAI*N`W7ss*(`]AnjgT9WeZ#?qVj;P-@Z)>r2$_8^5oing%FlTY`B3=cM398jfE!PBbM#C:CZSO$&@c:6fS='aW9h?%T.+d8,VYn__%dqL6L>SaB;B>BoUiV*8E0SP=M<)M&,KTkMKc8I"b*@p=)N#*=0A`$k3lZCo/hS2d&`%e,jOUnqu'j1ms/[4^$XhSe:+ahY`#Clg!nVW]LB/4V(h926.0nU'RF3KT=hoT-)!Qe`SMa-UL(6mI+=&?2_Y&V#SZh*b)$'V+aE-h~> +endstream +endobj +94 0 obj +<< /Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595 842 ] +/Resources 3 0 R +/Contents 93 0 R +>> +endobj +95 0 obj +<< /Length 840 /Filter [ /ASCII85Decode /FlateDecode ] + >> +stream +Gasan9iKe#&A@sBBQA\BU.G9JgJ`Vf?"c"4V@6CLE#dQY9O\rDY2S9i-8A[rbhsJ8B5:RehsP5T,@_K,NsNl=\69uL5:HC-c7bmDmJU@LK]a(WC!/PEEN,X8Et,!XS3X`r51+:tEENT=Um49!LUZ\@Hi)4.n^kZ`?/NT%kPAH5g3+E"CQK>tQb)1<^8Nk\`h+[duS2C([?K>rf3-,@_69[%VNZ+kDg2F2Qi+*(&f0+46kYigb"97!C"^E6#SiS5S4O22WT%mb)C^ol1Jj?:OfBaoI#(#7kuij88[5AIB7&X/k-3bRH@tSsKCrmrC(Q%C%8Ng0&=s<7Df:uoCZ6t&^+F4ID0\(R\XCarB"d?;3TM7"dQ#=N@W*$_jrC#c>P3g3q,ONrT"6SrfCR8M6*?MZR]F5C(X_r`dr<2X%Fn[*`>J1V`Cj5H[44`^ei">YTHE<2-#=e9rV>~> +endstream +endobj +96 0 obj +<< /Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595 842 ] +/Resources 3 0 R +/Contents 95 0 R +>> +endobj +97 0 obj +<< /Type /Font +/Subtype /Type1 +/Name /F1 +/BaseFont /Helvetica +/Encoding /WinAnsiEncoding >> +endobj +98 0 obj +<< /Type /Font +/Subtype /Type1 +/Name /F5 +/BaseFont /Times-Roman +/Encoding /WinAnsiEncoding >> +endobj +99 0 obj +<< /Type /Font +/Subtype /Type1 +/Name /F3 +/BaseFont /Helvetica-Bold +/Encoding /WinAnsiEncoding >> +endobj +100 0 obj +<< /Type /Font +/Subtype /Type1 +/Name /F7 +/BaseFont /Times-Bold +/Encoding /WinAnsiEncoding >> +endobj +1 0 obj +<< /Type /Pages +/Count 23 +/Kids [6 0 R 8 0 R 10 0 R 12 0 R 14 0 R 19 0 R 22 0 R 30 0 R 36 0 R 45 0 R 49 0 R 54 0 R 58 0 R 63 0 R 65 0 R 73 0 R 82 0 R 86 0 R 88 0 R 90 0 R 92 0 R 94 0 R 96 0 R ] >> +endobj +2 0 obj +<< /Type /Catalog +/Pages 1 0 R + >> +endobj +3 0 obj +<< +/Font << /F1 97 0 R /F5 98 0 R /F3 99 0 R /F7 100 0 R >> +/ProcSet [ /PDF /ImageC /Text ] /XObject <> +>> +endobj +xref +0 101 +0000000000 65535 f +0000648387 00000 n +0000648599 00000 n +0000648649 00000 n +0000000015 00000 n +0000000071 00000 n +0000000274 00000 n +0000000380 00000 n +0000001978 00000 n +0000002084 00000 n +0000003058 00000 n +0000003165 00000 n +0000003424 00000 n +0000003532 00000 n +0000005537 00000 n +0000005660 00000 n +0000005687 00000 n +0000005862 00000 n +0000006847 00000 n +0000121846 00000 n +0000121954 00000 n +0000124245 00000 n +0000218851 00000 n +0000218974 00000 n +0000219022 00000 n +0000219203 00000 n +0000219379 00000 n +0000219555 00000 n +0000219744 00000 n +0000221694 00000 n +0000294242 00000 n +0000294365 00000 n +0000294392 00000 n +0000294529 00000 n +0000294597 00000 n +0000294669 00000 n +0000297217 00000 n +0000297340 00000 n +0000297388 00000 n +0000297569 00000 n +0000297748 00000 n +0000297919 00000 n +0000298100 00000 n +0000299115 00000 n +0000383556 00000 n +0000468482 00000 n +0000468605 00000 n +0000468632 00000 n +0000468819 00000 n +0000470245 00000 n +0000470368 00000 n +0000470395 00000 n +0000470572 00000 n +0000472235 00000 n +0000618123 00000 n +0000618246 00000 n +0000618273 00000 n +0000618517 00000 n +0000620920 00000 n +0000621043 00000 n +0000621077 00000 n +0000621259 00000 n +0000621427 00000 n +0000623110 00000 n +0000623218 00000 n +0000625301 00000 n +0000625424 00000 n +0000625479 00000 n +0000625656 00000 n +0000625849 00000 n +0000626040 00000 n +0000626232 00000 n +0000626434 00000 n +0000628212 00000 n +0000628335 00000 n +0000628397 00000 n +0000628590 00000 n +0000628784 00000 n +0000628975 00000 n +0000629170 00000 n +0000629363 00000 n +0000629559 00000 n +0000632217 00000 n +0000632340 00000 n +0000632367 00000 n +0000632540 00000 n +0000635651 00000 n +0000635759 00000 n +0000637913 00000 n +0000638021 00000 n +0000640695 00000 n +0000640803 00000 n +0000643544 00000 n +0000643652 00000 n +0000646798 00000 n +0000646906 00000 n +0000647838 00000 n +0000647946 00000 n +0000648054 00000 n +0000648164 00000 n +0000648277 00000 n +trailer +<< +/Size 101 +/Root 2 0 R +/Info 4 0 R +>> +startxref +648855 +%%EOF diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/font.xml b/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/font.xml new file mode 100644 index 00000000..37977be4 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/font.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/kabeja.exe b/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/kabeja.exe new file mode 100644 index 00000000..2508e781 Binary files /dev/null and b/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/kabeja.exe differ diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/kabeja.sh b/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/kabeja.sh new file mode 100755 index 00000000..e0e1fdc6 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/kabeja.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +JAVA_MEM=256m + + + +java -Xmx$JAVA_MEM -jar launcher.jar $@ diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/launcher.jar b/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/launcher.jar new file mode 100644 index 00000000..72685e74 Binary files /dev/null and b/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/launcher.jar differ diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/legal/LICENSE.ant-contib b/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/legal/LICENSE.ant-contib new file mode 100644 index 00000000..4d8c2fb7 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/legal/LICENSE.ant-contib @@ -0,0 +1,47 @@ +/* + * The Apache Software License, Version 1.1 + * + * Copyright (c) 2001-2003 Ant-Contrib project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The end-user documentation included with the redistribution, if + * any, must include the following acknowlegement: + * "This product includes software developed by the + * Ant-Contrib project (http://sourceforge.net/projects/ant-contrib)." + * Alternately, this acknowlegement may appear in the software itself, + * if and wherever such third-party acknowlegements normally appear. + * + * 4. The name Ant-Contrib must not be used to endorse or promote products + * derived from this software without prior written permission. For + * written permission, please contact + * ant-contrib-developers@lists.sourceforge.net. + * + * 5. Products derived from this software may not be called "Ant-Contrib" + * nor may "Ant-Contrib" appear in their names without prior written + * permission of the Ant-Contrib project. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE ANT-CONTRIB PROJECT OR ITS + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * ==================================================================== + */ diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/legal/LICENSE.batik b/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/legal/LICENSE.batik new file mode 100644 index 00000000..3e4e3d00 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/legal/LICENSE.batik @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. \ No newline at end of file diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/legal/LICENSE.js.txt b/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/legal/LICENSE.js.txt new file mode 100644 index 00000000..a5549298 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/legal/LICENSE.js.txt @@ -0,0 +1,584 @@ + +This distribution includes the Mozilla Rhino 1.5 release 4.1 binary +distribution without code modifications. +You can also get that distribution from the following URL: +ftp://ftp.mozilla.org/pub/js/ +Source code for Rhino is available on Mozilla web site: +http://www.mozilla.org/rhino +Rhino is licensed under the NPL (Netscape Public License) which +is duplicated below. + +============================================================================== + +AMENDMENTS + + The Netscape Public License Version 1.1 ("NPL") consists of the + Mozilla Public License Version 1.1 with the following Amendments, + including Exhibit A-Netscape Public License. Files identified with + "Exhibit A-Netscape Public License" are governed by the Netscape + Public License Version 1.1. + + Additional Terms applicable to the Netscape Public License. + I. Effect. + These additional terms described in this Netscape Public + License -- Amendments shall apply to the Mozilla Communicator + client code and to all Covered Code under this License. + + II. "Netscape's Branded Code" means Covered Code that Netscape + distributes and/or permits others to distribute under one or more + trademark(s) which are controlled by Netscape but which are not + licensed for use under this License. + + III. Netscape and logo. + This License does not grant any rights to use the trademarks + "Netscape", the "Netscape N and horizon" logo or the "Netscape + lighthouse" logo, "Netcenter", "Gecko", "Java" or "JavaScript", + "Smart Browsing" even if such marks are included in the Original + Code or Modifications. + + IV. Inability to Comply Due to Contractual Obligation. + Prior to licensing the Original Code under this License, Netscape + has licensed third party code for use in Netscape's Branded Code. + To the extent that Netscape is limited contractually from making + such third party code available under this License, Netscape may + choose to reintegrate such code into Covered Code without being + required to distribute such code in Source Code form, even if + such code would otherwise be considered "Modifications" under + this License. + + V. Use of Modifications and Covered Code by Initial Developer. + V.1. In General. + The obligations of Section 3 apply to Netscape, except to + the extent specified in this Amendment, Section V.2 and V.3. + + V.2. Other Products. + Netscape may include Covered Code in products other than the + Netscape's Branded Code which are released by Netscape + during the two (2) years following the release date of the + Original Code, without such additional products becoming + subject to the terms of this License, and may license such + additional products on different terms from those contained + in this License. + + V.3. Alternative Licensing. + Netscape may license the Source Code of Netscape's Branded + Code, including Modifications incorporated therein, without + such Netscape Branded Code becoming subject to the terms of + this License, and may license such Netscape Branded Code on + different terms from those contained in this License. + + VI. Litigation. + Notwithstanding the limitations of Section 11 above, the + provisions regarding litigation in Section 11(a), (b) and (c) of + the License shall apply to all disputes relating to this License. + + EXHIBIT A-Netscape Public License. + + "The contents of this file are subject to the Netscape Public + License Version 1.1 (the "License"); you may not use this file + except in compliance with the License. You may obtain a copy of + the License at http://www.mozilla.org/NPL/ + + Software distributed under the License is distributed on an "AS + IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or + implied. See the License for the specific language governing + rights and limitations under the License. + + The Original Code is Mozilla Communicator client code, released + March 31, 1998. + + The Initial Developer of the Original Code is Netscape + Communications Corporation. Portions created by Netscape are + Copyright (C) 1998-1999 Netscape Communications Corporation. All + Rights Reserved. + + Contributor(s): ______________________________________. + + Alternatively, the contents of this file may be used under the + terms of the _____ license (the "[___] License"), in which case + the provisions of [______] License are applicable instead of + those above. If you wish to allow use of your version of this + file only under the terms of the [____] License and not to allow + others to use your version of this file under the NPL, indicate + your decision by deleting the provisions above and replace them + with the notice and other provisions required by the [___] + License. If you do not delete the provisions above, a recipient + may use your version of this file under either the NPL or the + [___] License." + + ---------------------------------------------------------------------- + + MOZILLA PUBLIC LICENSE + Version 1.1 + + --------------- + +1. Definitions. + + 1.0.1. "Commercial Use" means distribution or otherwise making the + Covered Code available to a third party. + + 1.1. "Contributor" means each entity that creates or contributes to + the creation of Modifications. + + 1.2. "Contributor Version" means the combination of the Original + Code, prior Modifications used by a Contributor, and the Modifications + made by that particular Contributor. + + 1.3. "Covered Code" means the Original Code or Modifications or the + combination of the Original Code and Modifications, in each case + including portions thereof. + + 1.4. "Electronic Distribution Mechanism" means a mechanism generally + accepted in the software development community for the electronic + transfer of data. + + 1.5. "Executable" means Covered Code in any form other than Source + Code. + + 1.6. "Initial Developer" means the individual or entity identified + as the Initial Developer in the Source Code notice required by Exhibit + A. + + 1.7. "Larger Work" means a work which combines Covered Code or + portions thereof with code not governed by the terms of this License. + + 1.8. "License" means this document. + + 1.8.1. "Licensable" means having the right to grant, to the maximum + extent possible, whether at the time of the initial grant or + subsequently acquired, any and all of the rights conveyed herein. + + 1.9. "Modifications" means any addition to or deletion from the + substance or structure of either the Original Code or any previous + Modifications. When Covered Code is released as a series of files, a + Modification is: + A. Any addition to or deletion from the contents of a file + containing Original Code or previous Modifications. + + B. Any new file that contains any part of the Original Code or + previous Modifications. + + 1.10. "Original Code" means Source Code of computer software code + which is described in the Source Code notice required by Exhibit A as + Original Code, and which, at the time of its release under this + License is not already Covered Code governed by this License. + + 1.10.1. "Patent Claims" means any patent claim(s), now owned or + hereafter acquired, including without limitation, method, process, + and apparatus claims, in any patent Licensable by grantor. + + 1.11. "Source Code" means the preferred form of the Covered Code for + making modifications to it, including all modules it contains, plus + any associated interface definition files, scripts used to control + compilation and installation of an Executable, or source code + differential comparisons against either the Original Code or another + well known, available Covered Code of the Contributor's choice. The + Source Code can be in a compressed or archival form, provided the + appropriate decompression or de-archiving software is widely available + for no charge. + + 1.12. "You" (or "Your") means an individual or a legal entity + exercising rights under, and complying with all of the terms of, this + License or a future version of this License issued under Section 6.1. + For legal entities, "You" includes any entity which controls, is + controlled by, or is under common control with You. For purposes of + this definition, "control" means (a) the power, direct or indirect, + to cause the direction or management of such entity, whether by + contract or otherwise, or (b) ownership of more than fifty percent + (50%) of the outstanding shares or beneficial ownership of such + entity. + +2. Source Code License. + + 2.1. The Initial Developer Grant. + The Initial Developer hereby grants You a world-wide, royalty-free, + non-exclusive license, subject to third party intellectual property + claims: + (a) under intellectual property rights (other than patent or + trademark) Licensable by Initial Developer to use, reproduce, + modify, display, perform, sublicense and distribute the Original + Code (or portions thereof) with or without Modifications, and/or + as part of a Larger Work; and + + (b) under Patents Claims infringed by the making, using or + selling of Original Code, to make, have made, use, practice, + sell, and offer for sale, and/or otherwise dispose of the + Original Code (or portions thereof). + + (c) the licenses granted in this Section 2.1(a) and (b) are + effective on the date Initial Developer first distributes + Original Code under the terms of this License. + + (d) Notwithstanding Section 2.1(b) above, no patent license is + granted: 1) for code that You delete from the Original Code; 2) + separate from the Original Code; or 3) for infringements caused + by: i) the modification of the Original Code or ii) the + combination of the Original Code with other software or devices. + + 2.2. Contributor Grant. + Subject to third party intellectual property claims, each Contributor + hereby grants You a world-wide, royalty-free, non-exclusive license + + (a) under intellectual property rights (other than patent or + trademark) Licensable by Contributor, to use, reproduce, modify, + display, perform, sublicense and distribute the Modifications + created by such Contributor (or portions thereof) either on an + unmodified basis, with other Modifications, as Covered Code + and/or as part of a Larger Work; and + + (b) under Patent Claims infringed by the making, using, or + selling of Modifications made by that Contributor either alone + and/or in combination with its Contributor Version (or portions + of such combination), to make, use, sell, offer for sale, have + made, and/or otherwise dispose of: 1) Modifications made by that + Contributor (or portions thereof); and 2) the combination of + Modifications made by that Contributor with its Contributor + Version (or portions of such combination). + + (c) the licenses granted in Sections 2.2(a) and 2.2(b) are + effective on the date Contributor first makes Commercial Use of + the Covered Code. + + (d) Notwithstanding Section 2.2(b) above, no patent license is + granted: 1) for any code that Contributor has deleted from the + Contributor Version; 2) separate from the Contributor Version; + 3) for infringements caused by: i) third party modifications of + Contributor Version or ii) the combination of Modifications made + by that Contributor with other software (except as part of the + Contributor Version) or other devices; or 4) under Patent Claims + infringed by Covered Code in the absence of Modifications made by + that Contributor. + +3. Distribution Obligations. + + 3.1. Application of License. + The Modifications which You create or to which You contribute are + governed by the terms of this License, including without limitation + Section 2.2. The Source Code version of Covered Code may be + distributed only under the terms of this License or a future version + of this License released under Section 6.1, and You must include a + copy of this License with every copy of the Source Code You + distribute. You may not offer or impose any terms on any Source Code + version that alters or restricts the applicable version of this + License or the recipients' rights hereunder. However, You may include + an additional document offering the additional rights described in + Section 3.5. + + 3.2. Availability of Source Code. + Any Modification which You create or to which You contribute must be + made available in Source Code form under the terms of this License + either on the same media as an Executable version or via an accepted + Electronic Distribution Mechanism to anyone to whom you made an + Executable version available; and if made available via Electronic + Distribution Mechanism, must remain available for at least twelve (12) + months after the date it initially became available, or at least six + (6) months after a subsequent version of that particular Modification + has been made available to such recipients. You are responsible for + ensuring that the Source Code version remains available even if the + Electronic Distribution Mechanism is maintained by a third party. + + 3.3. Description of Modifications. + You must cause all Covered Code to which You contribute to contain a + file documenting the changes You made to create that Covered Code and + the date of any change. You must include a prominent statement that + the Modification is derived, directly or indirectly, from Original + Code provided by the Initial Developer and including the name of the + Initial Developer in (a) the Source Code, and (b) in any notice in an + Executable version or related documentation in which You describe the + origin or ownership of the Covered Code. + + 3.4. Intellectual Property Matters + (a) Third Party Claims. + If Contributor has knowledge that a license under a third party's + intellectual property rights is required to exercise the rights + granted by such Contributor under Sections 2.1 or 2.2, + Contributor must include a text file with the Source Code + distribution titled "LEGAL" which describes the claim and the + party making the claim in sufficient detail that a recipient will + know whom to contact. If Contributor obtains such knowledge after + the Modification is made available as described in Section 3.2, + Contributor shall promptly modify the LEGAL file in all copies + Contributor makes available thereafter and shall take other steps + (such as notifying appropriate mailing lists or newsgroups) + reasonably calculated to inform those who received the Covered + Code that new knowledge has been obtained. + + (b) Contributor APIs. + If Contributor's Modifications include an application programming + interface and Contributor has knowledge of patent licenses which + are reasonably necessary to implement that API, Contributor must + also include this information in the LEGAL file. + + (c) Representations. + Contributor represents that, except as disclosed pursuant to + Section 3.4(a) above, Contributor believes that Contributor's + Modifications are Contributor's original creation(s) and/or + Contributor has sufficient rights to grant the rights conveyed by + this License. + + 3.5. Required Notices. + You must duplicate the notice in Exhibit A in each file of the Source + Code. If it is not possible to put such notice in a particular Source + Code file due to its structure, then You must include such notice in a + location (such as a relevant directory) where a user would be likely + to look for such a notice. If You created one or more Modification(s) + You may add your name as a Contributor to the notice described in + Exhibit A. You must also duplicate this License in any documentation + for the Source Code where You describe recipients' rights or ownership + rights relating to Covered Code. You may choose to offer, and to + charge a fee for, warranty, support, indemnity or liability + obligations to one or more recipients of Covered Code. However, You + may do so only on Your own behalf, and not on behalf of the Initial + Developer or any Contributor. You must make it absolutely clear than + any such warranty, support, indemnity or liability obligation is + offered by You alone, and You hereby agree to indemnify the Initial + Developer and every Contributor for any liability incurred by the + Initial Developer or such Contributor as a result of warranty, + support, indemnity or liability terms You offer. + + 3.6. Distribution of Executable Versions. + You may distribute Covered Code in Executable form only if the + requirements of Section 3.1-3.5 have been met for that Covered Code, + and if You include a notice stating that the Source Code version of + the Covered Code is available under the terms of this License, + including a description of how and where You have fulfilled the + obligations of Section 3.2. The notice must be conspicuously included + in any notice in an Executable version, related documentation or + collateral in which You describe recipients' rights relating to the + Covered Code. You may distribute the Executable version of Covered + Code or ownership rights under a license of Your choice, which may + contain terms different from this License, provided that You are in + compliance with the terms of this License and that the license for the + Executable version does not attempt to limit or alter the recipient's + rights in the Source Code version from the rights set forth in this + License. If You distribute the Executable version under a different + license You must make it absolutely clear that any terms which differ + from this License are offered by You alone, not by the Initial + Developer or any Contributor. You hereby agree to indemnify the + Initial Developer and every Contributor for any liability incurred by + the Initial Developer or such Contributor as a result of any such + terms You offer. + + 3.7. Larger Works. + You may create a Larger Work by combining Covered Code with other code + not governed by the terms of this License and distribute the Larger + Work as a single product. In such a case, You must make sure the + requirements of this License are fulfilled for the Covered Code. + +4. Inability to Comply Due to Statute or Regulation. + + If it is impossible for You to comply with any of the terms of this + License with respect to some or all of the Covered Code due to + statute, judicial order, or regulation then You must: (a) comply with + the terms of this License to the maximum extent possible; and (b) + describe the limitations and the code they affect. Such description + must be included in the LEGAL file described in Section 3.4 and must + be included with all distributions of the Source Code. Except to the + extent prohibited by statute or regulation, such description must be + sufficiently detailed for a recipient of ordinary skill to be able to + understand it. + +5. Application of this License. + + This License applies to code to which the Initial Developer has + attached the notice in Exhibit A and to related Covered Code. + +6. Versions of the License. + + 6.1. New Versions. + Netscape Communications Corporation ("Netscape") may publish revised + and/or new versions of the License from time to time. Each version + will be given a distinguishing version number. + + 6.2. Effect of New Versions. + Once Covered Code has been published under a particular version of the + License, You may always continue to use it under the terms of that + version. You may also choose to use such Covered Code under the terms + of any subsequent version of the License published by Netscape. No one + other than Netscape has the right to modify the terms applicable to + Covered Code created under this License. + + 6.3. Derivative Works. + If You create or use a modified version of this License (which you may + only do in order to apply it to code which is not already Covered Code + governed by this License), You must (a) rename Your license so that + the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape", + "MPL", "NPL" or any confusingly similar phrase do not appear in your + license (except to note that your license differs from this License) + and (b) otherwise make it clear that Your version of the license + contains terms which differ from the Mozilla Public License and + Netscape Public License. (Filling in the name of the Initial + Developer, Original Code or Contributor in the notice described in + Exhibit A shall not of themselves be deemed to be modifications of + this License.) + +7. DISCLAIMER OF WARRANTY. + + COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF + DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. + THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE + IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, + YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE + COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER + OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF + ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. + +8. TERMINATION. + + 8.1. This License and the rights granted hereunder will terminate + automatically if You fail to comply with terms herein and fail to cure + such breach within 30 days of becoming aware of the breach. All + sublicenses to the Covered Code which are properly granted shall + survive any termination of this License. Provisions which, by their + nature, must remain in effect beyond the termination of this License + shall survive. + + 8.2. If You initiate litigation by asserting a patent infringement + claim (excluding declatory judgment actions) against Initial Developer + or a Contributor (the Initial Developer or Contributor against whom + You file such action is referred to as "Participant") alleging that: + + (a) such Participant's Contributor Version directly or indirectly + infringes any patent, then any and all rights granted by such + Participant to You under Sections 2.1 and/or 2.2 of this License + shall, upon 60 days notice from Participant terminate prospectively, + unless if within 60 days after receipt of notice You either: (i) + agree in writing to pay Participant a mutually agreeable reasonable + royalty for Your past and future use of Modifications made by such + Participant, or (ii) withdraw Your litigation claim with respect to + the Contributor Version against such Participant. If within 60 days + of notice, a reasonable royalty and payment arrangement are not + mutually agreed upon in writing by the parties or the litigation claim + is not withdrawn, the rights granted by Participant to You under + Sections 2.1 and/or 2.2 automatically terminate at the expiration of + the 60 day notice period specified above. + + (b) any software, hardware, or device, other than such Participant's + Contributor Version, directly or indirectly infringes any patent, then + any rights granted to You by such Participant under Sections 2.1(b) + and 2.2(b) are revoked effective as of the date You first made, used, + sold, distributed, or had made, Modifications made by that + Participant. + + 8.3. If You assert a patent infringement claim against Participant + alleging that such Participant's Contributor Version directly or + indirectly infringes any patent where such claim is resolved (such as + by license or settlement) prior to the initiation of patent + infringement litigation, then the reasonable value of the licenses + granted by such Participant under Sections 2.1 or 2.2 shall be taken + into account in determining the amount or value of any payment or + license. + + 8.4. In the event of termination under Sections 8.1 or 8.2 above, + all end user license agreements (excluding distributors and resellers) + which have been validly granted by You or any distributor hereunder + prior to termination shall survive termination. + +9. LIMITATION OF LIABILITY. + + UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT + (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL + DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, + OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR + ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY + CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, + WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER + COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN + INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF + LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY + RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW + PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE + EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO + THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU. + +10. U.S. GOVERNMENT END USERS. + + The Covered Code is a "commercial item," as that term is defined in + 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer + software" and "commercial computer software documentation," as such + terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 + C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), + all U.S. Government End Users acquire Covered Code with only those + rights set forth herein. + +11. MISCELLANEOUS. + + This License represents the complete agreement concerning subject + matter hereof. If any provision of this License is held to be + unenforceable, such provision shall be reformed only to the extent + necessary to make it enforceable. This License shall be governed by + California law provisions (except to the extent applicable law, if + any, provides otherwise), excluding its conflict-of-law provisions. + With respect to disputes in which at least one party is a citizen of, + or an entity chartered or registered to do business in the United + States of America, any litigation relating to this License shall be + subject to the jurisdiction of the Federal Courts of the Northern + District of California, with venue lying in Santa Clara County, + California, with the losing party responsible for costs, including + without limitation, court costs and reasonable attorneys' fees and + expenses. The application of the United Nations Convention on + Contracts for the International Sale of Goods is expressly excluded. + Any law or regulation which provides that the language of a contract + shall be construed against the drafter shall not apply to this + License. + +12. RESPONSIBILITY FOR CLAIMS. + + As between Initial Developer and the Contributors, each party is + responsible for claims and damages arising, directly or indirectly, + out of its utilization of rights under this License and You agree to + work with Initial Developer and Contributors to distribute such + responsibility on an equitable basis. Nothing herein is intended or + shall be deemed to constitute any admission of liability. + +13. MULTIPLE-LICENSED CODE. + + Initial Developer may designate portions of the Covered Code as + "Multiple-Licensed". "Multiple-Licensed" means that the Initial + Developer permits you to utilize portions of the Covered Code under + Your choice of the NPL or the alternative licenses, if any, specified + by the Initial Developer in the file described in Exhibit A. + +EXHIBIT A -Mozilla Public License. + + ``The contents of this file are subject to the Mozilla Public License + Version 1.1 (the "License"); you may not use this file except in + compliance with the License. You may obtain a copy of the License at + http://www.mozilla.org/MPL/ + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the + License for the specific language governing rights and limitations + under the License. + + The Original Code is ______________________________________. + + The Initial Developer of the Original Code is ________________________. + Portions created by ______________________ are Copyright (C) ______ + _______________________. All Rights Reserved. + + Contributor(s): ______________________________________. + + Alternatively, the contents of this file may be used under the terms + of the _____ license (the "[___] License"), in which case the + provisions of [______] License are applicable instead of those + above. If you wish to allow use of your version of this file only + under the terms of the [____] License and not to allow others to use + your version of this file under the MPL, indicate your decision by + deleting the provisions above and replace them with the notice and + other provisions required by the [___] License. If you do not delete + the provisions above, a recipient may use your version of this file + under either the MPL or the [___] License." + + [NOTE: The text of this Exhibit A may differ slightly from the text of + the notices in the Source Code files of the Original Code. You should + use the text of this Exhibit A rather than the text found in the + Original Code Source Code for Your Modifications.] + + +============================================================================== + + diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/legal/LICENSE.miethxml-toolkit.txt b/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/legal/LICENSE.miethxml-toolkit.txt new file mode 100644 index 00000000..d6456956 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/legal/LICENSE.miethxml-toolkit.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/legal/LICENSE.pdf-transcoder.txt b/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/legal/LICENSE.pdf-transcoder.txt new file mode 100644 index 00000000..3e4e3d00 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/legal/LICENSE.pdf-transcoder.txt @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. \ No newline at end of file diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/legal/LICENSE.txt b/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/legal/LICENSE.txt new file mode 100644 index 00000000..d6456956 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/legal/LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/lib/batik-all.jar b/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/lib/batik-all.jar new file mode 100644 index 00000000..dd9588be Binary files /dev/null and b/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/lib/batik-all.jar differ diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/lib/js.jar b/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/lib/js.jar new file mode 100644 index 00000000..2b926505 Binary files /dev/null and b/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/lib/js.jar differ diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/lib/kabeja-0.4.jar b/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/lib/kabeja-0.4.jar new file mode 100644 index 00000000..49ce629f Binary files /dev/null and b/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/lib/kabeja-0.4.jar differ diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/lib/kabeja-svg-0.4.jar b/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/lib/kabeja-svg-0.4.jar new file mode 100644 index 00000000..bc6f4449 Binary files /dev/null and b/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/lib/kabeja-svg-0.4.jar differ diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/lib/kabeja-xslt.jar b/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/lib/kabeja-xslt.jar new file mode 100644 index 00000000..c9ba6556 Binary files /dev/null and b/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/lib/kabeja-xslt.jar differ diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/lib/miethxml-toolkit.jar b/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/lib/miethxml-toolkit.jar new file mode 100644 index 00000000..337ad869 Binary files /dev/null and b/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/lib/miethxml-toolkit.jar differ diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/lib/miethxml-ui.jar b/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/lib/miethxml-ui.jar new file mode 100644 index 00000000..63635306 Binary files /dev/null and b/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/lib/miethxml-ui.jar differ diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/lib/nothing b/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/lib/nothing new file mode 100644 index 00000000..e69de29b diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/lib/pdf-transcoder.jar b/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/lib/pdf-transcoder.jar new file mode 100644 index 00000000..1a8666eb Binary files /dev/null and b/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/lib/pdf-transcoder.jar differ diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/lib/xml-apis-ext.jar b/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/lib/xml-apis-ext.jar new file mode 100644 index 00000000..a7869d68 Binary files /dev/null and b/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/lib/xml-apis-ext.jar differ diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/lib/xml-apis.jar b/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/lib/xml-apis.jar new file mode 100644 index 00000000..d42c0ea6 Binary files /dev/null and b/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/lib/xml-apis.jar differ diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/samples/dxf/draft1.dxf b/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/samples/dxf/draft1.dxf new file mode 100644 index 00000000..3e16efcf --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/samples/dxf/draft1.dxf @@ -0,0 +1,255532 @@ + 0 +SECTION + 2 +HEADER + 9 +$ACADVER + 1 +AC1009 + 9 +$INSBASE + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$EXTMIN + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$EXTMAX + 10 +42050.0 + 20 +29700.0 + 30 +0.0 + 9 +$LIMMIN + 10 +0.0 + 20 +0.0 + 9 +$LIMMAX + 10 +42050.0 + 20 +29700.0 + 9 +$ORTHOMODE + 70 + 0 + 9 +$REGENMODE + 70 + 1 + 9 +$FILLMODE + 70 + 1 + 9 +$QTEXTMODE + 70 + 0 + 9 +$MIRRTEXT + 70 + 1 + 9 +$DRAGMODE + 70 + 2 + 9 +$LTSCALE + 40 +1000.0 + 9 +$OSMODE + 70 + 0 + 9 +$ATTMODE + 70 + 1 + 9 +$TEXTSIZE + 40 +175.0 + 9 +$TRACEWID + 40 +1.0 + 9 +$TEXTSTYLE + 7 +STANDART + 9 +$CLAYER + 8 +0 + 9 +$CELTYPE + 6 +BYLAYER + 9 +$CECOLOR + 62 + 256 + 9 +$DIMSCALE + 40 +1.0 + 9 +$DIMASZ + 40 +1.0 + 9 +$DIMEXO + 40 +1650.0 + 9 +$DIMDLI + 40 +0.0 + 9 +$DIMRND + 40 +0.0 + 9 +$DIMDLE + 40 +150.0 + 9 +$DIMEXE + 40 +150.0 + 9 +$DIMTP + 40 +0.0 + 9 +$DIMTM + 40 +0.0 + 9 +$DIMTXT + 40 +175.0 + 9 +$DIMCEN + 40 +12.5 + 9 +$DIMTSZ + 40 +0.0 + 9 +$DIMTOL + 70 + 0 + 9 +$DIMLIM + 70 + 0 + 9 +$DIMTIH + 70 + 0 + 9 +$DIMTOH + 70 + 0 + 9 +$DIMSE1 + 70 + 1 + 9 +$DIMSE2 + 70 + 1 + 9 +$DIMTAD + 70 + 1 + 9 +$DIMZIN + 70 + 8 + 9 +$DIMBLK + 1 +MASSHILFSLINIE + 9 +$DIMASO + 70 + 1 + 9 +$DIMSHO + 70 + 0 + 9 +$DIMPOST + 1 + + 9 +$DIMAPOST + 1 + + 9 +$DIMALT + 70 + 0 + 9 +$DIMALTD + 70 + 2 + 9 +$DIMALTF + 40 +25.4 + 9 +$DIMLFAC + 40 +0.0001 + 9 +$DIMTOFL + 70 + 0 + 9 +$DIMTVP + 40 +0.0 + 9 +$DIMTIX + 70 + 0 + 9 +$DIMSOXD + 70 + 0 + 9 +$DIMSAH + 70 + 0 + 9 +$DIMBLK1 + 1 + + 9 +$DIMBLK2 + 1 + + 9 +$DIMSTYLE + 2 +ENTWURFSBEMASSUNG + 9 +$DIMCLRD + 70 + 0 + 9 +$DIMCLRE + 70 + 0 + 9 +$DIMCLRT + 70 + 0 + 9 +$DIMTFAC + 40 +1.0 + 9 +$DIMGAP + 40 +0.0 + 9 +$LUNITS + 70 + 2 + 9 +$LUPREC + 70 + 2 + 9 +$SKETCHINC + 40 +1.0 + 9 +$FILLETRAD + 40 +0.0 + 9 +$AUNITS + 70 + 0 + 9 +$AUPREC + 70 + 0 + 9 +$MENU + 1 +acad + 9 +$ELEVATION + 40 +0.0 + 9 +$PELEVATION + 40 +0.0 + 9 +$THICKNESS + 40 +0.0 + 9 +$LIMCHECK + 70 + 0 + 9 +$BLIPMODE + 70 + 1 + 9 +$CHAMFERA + 40 +0.0 + 9 +$CHAMFERB + 40 +0.0 + 9 +$SKPOLY + 70 + 0 + 9 +$TDCREATE + 40 +2450793.70898 + 9 +$TDUPDATE + 40 +2450818.501965 + 9 +$TDINDWG + 40 +1.433361 + 9 +$TDUSRTIMER + 40 +1.433361 + 9 +$USRTIMER + 70 + 1 + 9 +$ANGBASE + 50 +0.0 + 9 +$ANGDIR + 70 + 0 + 9 +$PDMODE + 70 + 0 + 9 +$PDSIZE + 40 +0.0 + 9 +$PLINEWID + 40 +0.0 + 9 +$COORDS + 70 + 2 + 9 +$SPLFRAME + 70 + 0 + 9 +$SPLINETYPE + 70 + 6 + 9 +$SPLINESEGS + 70 + 8 + 9 +$ATTDIA + 70 + 0 + 9 +$ATTREQ + 70 + 1 + 9 +$HANDLING + 70 + 1 + 9 +$HANDSEED + 5 +3861 + 9 +$SURFTAB1 + 70 + 6 + 9 +$SURFTAB2 + 70 + 6 + 9 +$SURFTYPE + 70 + 6 + 9 +$SURFU + 70 + 6 + 9 +$SURFV + 70 + 6 + 9 +$UCSNAME + 2 +WELT + 9 +$UCSORG + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSXDIR + 10 +1.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSYDIR + 10 +0.0 + 20 +1.0 + 30 +0.0 + 9 +$PUCSNAME + 2 + + 9 +$PUCSORG + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSXDIR + 10 +1.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSYDIR + 10 +0.0 + 20 +1.0 + 30 +0.0 + 9 +$USERI1 + 70 + 0 + 9 +$USERI2 + 70 + 0 + 9 +$USERI3 + 70 + 0 + 9 +$USERI4 + 70 + 0 + 9 +$USERI5 + 70 + 0 + 9 +$USERR1 + 40 +0.0 + 9 +$USERR2 + 40 +0.0 + 9 +$USERR3 + 40 +0.0 + 9 +$USERR4 + 40 +0.0 + 9 +$USERR5 + 40 +0.0 + 9 +$WORLDVIEW + 70 + 1 + 9 +$SHADEDGE + 70 + 3 + 9 +$SHADEDIF + 70 + 70 + 9 +$TILEMODE + 70 + 1 + 9 +$MAXACTVP + 70 + 16 + 9 +$PLIMCHECK + 70 + 0 + 9 +$PEXTMIN + 10 +1.000000E+020 + 20 +1.000000E+020 + 30 +1.000000E+020 + 9 +$PEXTMAX + 10 +-1.000000E+020 + 20 +-1.000000E+020 + 30 +-1.000000E+020 + 9 +$PLIMMIN + 10 +0.0 + 20 +0.0 + 9 +$PLIMMAX + 10 +12.0 + 20 +9.0 + 9 +$UNITMODE + 70 + 0 + 9 +$VISRETAIN + 70 + 0 + 9 +$PLINEGEN + 70 + 0 + 9 +$PSLTSCALE + 70 + 0 + 0 +ENDSEC + 0 +SECTION + 2 +TABLES + 0 +TABLE + 2 +VPORT + 70 + 3 + 0 +VPORT + 2 +*ACTIVE + 70 + 0 + 10 +0.0 + 20 +0.0 + 11 +1.0 + 21 +1.0 + 12 +23706.449376 + 22 +15278.084191 + 13 +0.0 + 23 +0.0 + 14 +5.0 + 24 +5.0 + 15 +10.0 + 25 +10.0 + 16 +0.0 + 26 +0.0 + 36 +1.0 + 17 +0.0 + 27 +0.0 + 37 +0.0 + 40 +30883.554814 + 41 +1.551664 + 42 +50.0 + 43 +0.0 + 44 +0.0 + 50 +0.0 + 51 +0.0 + 71 + 0 + 72 + 100 + 73 + 1 + 74 + 1 + 75 + 1 + 76 + 0 + 77 + 0 + 78 + 2 + 0 +ENDTAB + 0 +TABLE + 2 +LTYPE + 70 + 25 + 0 +LTYPE + 2 +CONTINUOUS + 70 + 0 + 3 +Solid Line + 72 + 65 + 73 + 0 + 40 +0.0 + 0 +LTYPE + 2 +RAND + 70 + 0 + 3 +__ __ . __ __ . __ __ . __ __ . __ __ . __ __ . + 72 + 65 + 73 + 6 + 40 +1.75 + 49 +0.5 + 49 +-0.25 + 49 +0.5 + 49 +-0.25 + 49 +0.0 + 49 +-0.25 + 0 +LTYPE + 2 +RAND2 + 70 + 0 + 3 +__.__.__.__.__.__.__.__.__.__.__.__.__.__.__.__ + 72 + 65 + 73 + 6 + 40 +0.875 + 49 +0.25 + 49 +-0.125 + 49 +0.25 + 49 +-0.125 + 49 +0.0 + 49 +-0.125 + 0 +LTYPE + 2 +RANDX2 + 70 + 0 + 3 +____ ____ . ____ ____ . ____ ____ . __ + 72 + 65 + 73 + 6 + 40 +3.5 + 49 +1.0 + 49 +-0.5 + 49 +1.0 + 49 +-0.5 + 49 +0.0 + 49 +-0.5 + 0 +LTYPE + 2 +MITTE + 70 + 0 + 3 +____ _ ____ _ ____ _ ____ _ ____ _ ____ _ ____ + 72 + 65 + 73 + 4 + 40 +2.0 + 49 +1.25 + 49 +-0.25 + 49 +0.25 + 49 +-0.25 + 0 +LTYPE + 2 +MITTE2 + 70 + 0 + 3 +___ _ ___ _ ___ _ ___ _ ___ _ ___ _ ___ _ ___ _ + 72 + 65 + 73 + 4 + 40 +1.125 + 49 +0.75 + 49 +-0.125 + 49 +0.125 + 49 +-0.125 + 0 +LTYPE + 2 +MITTEX2 + 70 + 0 + 3 +________ __ ________ __ ________ __ _____ + 72 + 65 + 73 + 4 + 40 +4.0 + 49 +2.5 + 49 +-0.5 + 49 +0.5 + 49 +-0.5 + 0 +LTYPE + 2 +STRICHPUNKT + 70 + 0 + 3 +__ . __ . __ . __ . __ . __ . __ . __ . __ . __ + 72 + 65 + 73 + 4 + 40 +1.0 + 49 +0.5 + 49 +-0.25 + 49 +0.0 + 49 +-0.25 + 0 +LTYPE + 2 +STRICHPUNKT2 + 70 + 0 + 3 +_._._._._._._._._._._._._._._._._._._._._._._._ + 72 + 65 + 73 + 4 + 40 +0.5 + 49 +0.25 + 49 +-0.125 + 49 +0.0 + 49 +-0.125 + 0 +LTYPE + 2 +STRICHPUNKTX2 + 70 + 0 + 3 +____ . ____ . ____ . ____ . ____ . __ + 72 + 65 + 73 + 4 + 40 +2.0 + 49 +1.0 + 49 +-0.5 + 49 +0.0 + 49 +-0.5 + 0 +LTYPE + 2 +GESTRICHELT + 70 + 0 + 3 +__ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ + 72 + 65 + 73 + 2 + 40 +0.75 + 49 +0.5 + 49 +-0.25 + 0 +LTYPE + 2 +GESTRICHELT2 + 70 + 0 + 3 +_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ + 72 + 65 + 73 + 2 + 40 +0.375 + 49 +0.25 + 49 +-0.125 + 0 +LTYPE + 2 +GESTRICHELTX2 + 70 + 0 + 3 +____ ____ ____ ____ ____ ____ ____ ____ + 72 + 65 + 73 + 2 + 40 +1.5 + 49 +1.0 + 49 +-0.5 + 0 +LTYPE + 2 +GETRENNT + 70 + 0 + 3 +____ . . ____ . . ____ . . ____ . . ____ . . __ + 72 + 65 + 73 + 6 + 40 +1.25 + 49 +0.5 + 49 +-0.25 + 49 +0.0 + 49 +-0.25 + 49 +0.0 + 49 +-0.25 + 0 +LTYPE + 2 +GETRENNT2 + 70 + 0 + 3 +__..__..__..__..__..__..__..__..__..__..__..__. + 72 + 65 + 73 + 6 + 40 +0.625 + 49 +0.25 + 49 +-0.125 + 49 +0.0 + 49 +-0.125 + 49 +0.0 + 49 +-0.125 + 0 +LTYPE + 2 +GETRENNTX2 + 70 + 0 + 3 +________ . . ________ . . ________ . . + 72 + 65 + 73 + 6 + 40 +2.5 + 49 +1.0 + 49 +-0.5 + 49 +0.0 + 49 +-0.5 + 49 +0.0 + 49 +-0.5 + 0 +LTYPE + 2 +PUNKT + 70 + 0 + 3 +. . . . . . . . . . . . . . . . . . . . . . . . + 72 + 65 + 73 + 2 + 40 +0.25 + 49 +0.0 + 49 +-0.25 + 0 +LTYPE + 2 +PUNKT2 + 70 + 0 + 3 +............................................... + 72 + 65 + 73 + 2 + 40 +0.125 + 49 +0.0 + 49 +-0.125 + 0 +LTYPE + 2 +PUNKTX2 + 70 + 0 + 3 +. . . . . . . . . . . . . . . . + 72 + 65 + 73 + 2 + 40 +0.5 + 49 +0.0 + 49 +-0.5 + 0 +LTYPE + 2 +VERDECKT + 70 + 0 + 3 +__ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ + 72 + 65 + 73 + 2 + 40 +0.375 + 49 +0.25 + 49 +-0.125 + 0 +LTYPE + 2 +VERDECKT2 + 70 + 0 + 3 +_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ + 72 + 65 + 73 + 2 + 40 +0.1875 + 49 +0.125 + 49 +-0.0625 + 0 +LTYPE + 2 +VERDECKTX2 + 70 + 0 + 3 +____ ____ ____ ____ ____ ____ ____ ____ ____ __ + 72 + 65 + 73 + 2 + 40 +0.75 + 49 +0.5 + 49 +-0.25 + 0 +LTYPE + 2 +PHANTOM + 70 + 0 + 3 +______ __ __ ______ __ __ ______ __ __ + 72 + 65 + 73 + 6 + 40 +2.5 + 49 +1.25 + 49 +-0.25 + 49 +0.25 + 49 +-0.25 + 49 +0.25 + 49 +-0.25 + 0 +LTYPE + 2 +PHANTOM2 + 70 + 0 + 3 +___ _ _ ___ _ _ ___ _ _ ___ _ _ ___ _ _ ___ _ _ + 72 + 65 + 73 + 6 + 40 +1.25 + 49 +0.625 + 49 +-0.125 + 49 +0.125 + 49 +-0.125 + 49 +0.125 + 49 +-0.125 + 0 +LTYPE + 2 +PHANTOMX2 + 70 + 0 + 3 +____________ ____ ____ ____________ + 72 + 65 + 73 + 6 + 40 +5.0 + 49 +2.5 + 49 +-0.5 + 49 +0.5 + 49 +-0.5 + 49 +0.5 + 49 +-0.5 + 0 +ENDTAB + 0 +TABLE + 2 +LAYER + 70 + 21 + 0 +LAYER + 2 +0 + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +LAYER + 2 +MAUERWERK + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +LAYER + 2 +TRENNWAENDE + 70 + 0 + 62 + 5 + 6 +CONTINUOUS + 0 +LAYER + 2 +FENSTER + 70 + 0 + 62 + 8 + 6 +CONTINUOUS + 0 +LAYER + 2 +VORSATZSCHALLE + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +LAYER + 2 +DAEMMUNG + 70 + 0 + 62 + 6 + 6 +CONTINUOUS + 0 +LAYER + 2 +BALKONE + 70 + 0 + 62 + 1 + 6 +CONTINUOUS + 0 +LAYER + 2 +SCHORNSTEINE + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +LAYER + 2 +SCHRAFFUR-MAUER + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +LAYER + 2 +SCHRAFFUR-VORMAUER + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +LAYER + 2 +SCHRAFFUR-TRENNWAND + 70 + 0 + 62 + 5 + 6 +CONTINUOUS + 0 +LAYER + 2 +SCHRAFFUR-DAEMMUNG + 70 + 0 + 62 + 6 + 6 +CONTINUOUS + 0 +LAYER + 2 +BEMASSUNG + 70 + 0 + 62 + 3 + 6 +CONTINUOUS + 0 +LAYER + 2 +DEFPOINTS + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +LAYER + 2 +TREPPE + 70 + 0 + 62 + 3 + 6 +CONTINUOUS + 0 +LAYER + 2 +SCHNITTLINIEN + 70 + 0 + 62 + 1 + 6 +STRICHPUNKT + 0 +LAYER + 2 +LEGENDE-35 + 70 + 0 + 62 + 2 + 6 +CONTINUOUS + 0 +LAYER + 2 +SPANNRICHTUNG + 70 + 0 + 62 + 2 + 6 +CONTINUOUS + 0 +LAYER + 2 +LEGENDE-70 + 70 + 0 + 62 + 1 + 6 +CONTINUOUS + 0 +LAYER + 2 +DETAILS + 70 + 0 + 62 + 1 + 6 +GESTRICHELT2 + 0 +LAYER + 2 +LEGENDE + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +ENDTAB + 0 +TABLE + 2 +STYLE + 70 + 2 + 0 +STYLE + 2 +STANDARD + 70 + 0 + 40 +175.0 + 41 +0.75 + 50 +0.0 + 71 + 0 + 42 +175.0 + 3 +C:\ACADWIN\FONTS\TXT.SHX + 4 + + 0 +STYLE + 2 +STANDART + 70 + 0 + 40 +175.0 + 41 +0.75 + 50 +0.0 + 71 + 0 + 42 +175.0 + 3 +C:\ACADWIN\FONTS\TXT.SHX + 4 + + 0 +ENDTAB + 0 +TABLE + 2 +VIEW + 70 + 0 + 0 +ENDTAB + 0 +TABLE + 2 +UCS + 70 + 2 + 0 +UCS + 2 +WELT + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 11 +1.0 + 21 +0.0 + 31 +0.0 + 12 +0.0 + 22 +1.0 + 32 +0.0 + 0 +UCS + 2 +MAUER + 70 + 0 + 10 +5000.0 + 20 +9250.0 + 30 +0.0 + 11 +1.0 + 21 +0.0 + 31 +0.0 + 12 +0.0 + 22 +1.0 + 32 +0.0 + 0 +ENDTAB + 0 +TABLE + 2 +APPID + 70 + 1 + 0 +APPID + 2 +ACAD + 70 + 0 + 0 +ENDTAB + 0 +TABLE + 2 +DIMSTYLE + 70 + 2 + 0 +DIMSTYLE + 2 +ENTWURFSBEMASSUNG + 70 + 0 + 3 + + 4 + + 5 +MASSHILFSLINIE + 6 + + 7 + + 40 +1.0 + 41 +1.0 + 42 +1650.0 + 43 +0.0 + 44 +150.0 + 45 +0.0 + 46 +150.0 + 47 +0.0 + 48 +0.0 +140 +175.0 +141 +12.5 +142 +0.0 +143 +25.4 +144 +0.0001 +145 +0.0 +146 +1.0 +147 +0.0 + 71 + 0 + 72 + 0 + 73 + 0 + 74 + 0 + 75 + 1 + 76 + 1 + 77 + 1 + 78 + 8 +170 + 0 +171 + 2 +172 + 0 +173 + 0 +174 + 1 +175 + 0 +176 + 0 +177 + 0 +178 + 0 + 0 +DIMSTYLE + 2 +ENTWURF2 + 70 + 0 + 3 + + 4 + + 5 +MASSHILFSLINIE + 6 + + 7 + + 40 +1.0 + 41 +0.0 + 42 +2150.0 + 43 +0.0 + 44 +150.0 + 45 +0.0 + 46 +150.0 + 47 +0.0 + 48 +0.0 +140 +175.0 +141 +12.5 +142 +75.0 +143 +25.4 +144 +0.0001 +145 +0.0 +146 +1.0 +147 +0.0 + 71 + 0 + 72 + 0 + 73 + 0 + 74 + 0 + 75 + 0 + 76 + 0 + 77 + 1 + 78 + 0 +170 + 0 +171 + 2 +172 + 0 +173 + 0 +174 + 1 +175 + 0 +176 + 0 +177 + 0 +178 + 0 + 0 +ENDTAB + 0 +ENDSEC + 0 +SECTION + 2 +BLOCKS + 0 +BLOCK + 8 +0 + 2 +$MODEL_SPACE + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +$MODEL_SPACE + 1 + + 0 +ENDBLK + 5 +134 + 8 +0 + 0 +BLOCK + 67 + 1 + 8 +0 + 2 +$PAPER_SPACE + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +$PAPER_SPACE + 1 + + 0 +ENDBLK + 5 +132 + 67 + 1 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X0 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X0 + 1 + + 0 +LINE + 5 +138 + 8 +0 + 62 + 0 + 10 +14875.0 + 20 +20892.766953 + 30 +0.0 + 11 +15240.0 + 21 +21257.766953 + 31 +0.0 + 0 +LINE + 5 +139 + 8 +0 + 62 + 0 + 10 +15732.233047 + 20 +21750.0 + 30 +0.0 + 11 +15865.0 + 21 +21882.766953 + 31 +0.0 + 0 +LINE + 5 +13A + 8 +0 + 62 + 0 + 10 +14875.0 + 20 +21246.320344 + 30 +0.0 + 11 +15240.0 + 21 +21611.320344 + 31 +0.0 + 0 +LINE + 5 +13B + 8 +0 + 62 + 0 + 10 +15378.679656 + 20 +21750.0 + 30 +0.0 + 11 +15743.679656 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +13C + 8 +0 + 62 + 0 + 10 +14875.0 + 20 +21599.873734 + 30 +0.0 + 11 +15390.126266 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +13D + 8 +0 + 62 + 0 + 10 +14671.572875 + 20 +21750.0 + 30 +0.0 + 11 +15036.572875 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +13E + 8 +0 + 62 + 0 + 10 +14318.019485 + 20 +21750.0 + 30 +0.0 + 11 +14683.019485 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +13F + 8 +0 + 62 + 0 + 10 +13964.466094 + 20 +21750.0 + 30 +0.0 + 11 +14329.466094 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +140 + 8 +0 + 62 + 0 + 10 +13610.912703 + 20 +21750.0 + 30 +0.0 + 11 +13975.912703 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +141 + 8 +0 + 62 + 0 + 10 +13257.359313 + 20 +21750.0 + 30 +0.0 + 11 +13622.359313 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +142 + 8 +0 + 62 + 0 + 10 +12903.805922 + 20 +21750.0 + 30 +0.0 + 11 +13268.805922 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +143 + 8 +0 + 62 + 0 + 10 +12550.252532 + 20 +21750.0 + 30 +0.0 + 11 +12915.252532 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +144 + 8 +0 + 62 + 0 + 10 +12196.699141 + 20 +21750.0 + 30 +0.0 + 11 +12561.699141 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +145 + 8 +0 + 62 + 0 + 10 +11843.145751 + 20 +21750.0 + 30 +0.0 + 11 +12208.145751 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +146 + 8 +0 + 62 + 0 + 10 +11489.59236 + 20 +21750.0 + 30 +0.0 + 11 +11854.59236 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +147 + 8 +0 + 62 + 0 + 10 +11250.0 + 20 +21863.961031 + 30 +0.0 + 11 +11501.038969 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +148 + 8 +0 + 62 + 0 + 10 +14875.0 + 20 +20539.213562 + 30 +0.0 + 11 +15240.0 + 21 +20904.213562 + 31 +0.0 + 0 +LINE + 5 +149 + 8 +0 + 62 + 0 + 10 +14875.0 + 20 +20185.660172 + 30 +0.0 + 11 +15240.0 + 21 +20550.660172 + 31 +0.0 + 0 +LINE + 5 +14A + 8 +0 + 62 + 0 + 10 +14875.0 + 20 +19832.106781 + 30 +0.0 + 11 +15240.0 + 21 +20197.106781 + 31 +0.0 + 0 +LINE + 5 +14B + 8 +0 + 62 + 0 + 10 +14875.0 + 20 +19478.553391 + 30 +0.0 + 11 +15240.0 + 21 +19843.553391 + 31 +0.0 + 0 +LINE + 5 +14C + 8 +0 + 62 + 0 + 10 +14875.0 + 20 +19125.0 + 30 +0.0 + 11 +15240.0 + 21 +19490.0 + 31 +0.0 + 0 +LINE + 5 +14D + 8 +0 + 62 + 0 + 10 +14875.0 + 20 +18771.446609 + 30 +0.0 + 11 +15240.0 + 21 +19136.446609 + 31 +0.0 + 0 +LINE + 5 +14E + 8 +0 + 62 + 0 + 10 +14875.0 + 20 +18417.893219 + 30 +0.0 + 11 +15240.0 + 21 +18782.893219 + 31 +0.0 + 0 +LINE + 5 +14F + 8 +0 + 62 + 0 + 10 +14875.0 + 20 +18064.339828 + 30 +0.0 + 11 +15240.0 + 21 +18429.339828 + 31 +0.0 + 0 +LINE + 5 +150 + 8 +0 + 62 + 0 + 10 +14875.0 + 20 +17710.786438 + 30 +0.0 + 11 +15240.0 + 21 +18075.786438 + 31 +0.0 + 0 +LINE + 5 +151 + 8 +0 + 62 + 0 + 10 +14875.0 + 20 +17357.233047 + 30 +0.0 + 11 +15240.0 + 21 +17722.233047 + 31 +0.0 + 0 +LINE + 5 +152 + 8 +0 + 62 + 0 + 10 +15121.320344 + 20 +17250.0 + 30 +0.0 + 11 +15240.0 + 21 +17368.679656 + 31 +0.0 + 0 +ENDBLK + 5 +153 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X1 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X1 + 1 + + 0 +LINE + 5 +155 + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +19856.601718 + 30 +0.0 + 11 +5365.0 + 21 +20221.601718 + 31 +0.0 + 0 +LINE + 5 +156 + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +20210.155108 + 30 +0.0 + 11 +5365.0 + 21 +20575.155108 + 31 +0.0 + 0 +LINE + 5 +157 + 8 +0 + 62 + 0 + 10 +6539.844892 + 20 +21750.0 + 30 +0.0 + 11 +6740.0 + 21 +21950.155108 + 31 +0.0 + 0 +LINE + 5 +158 + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +20563.708499 + 30 +0.0 + 11 +5365.0 + 21 +20928.708499 + 31 +0.0 + 0 +LINE + 5 +159 + 8 +0 + 62 + 0 + 10 +6186.291501 + 20 +21750.0 + 30 +0.0 + 11 +6551.291501 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +15A + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +20917.26189 + 30 +0.0 + 11 +5365.0 + 21 +21282.26189 + 31 +0.0 + 0 +LINE + 5 +15B + 8 +0 + 62 + 0 + 10 +5832.73811 + 20 +21750.0 + 30 +0.0 + 11 +6197.73811 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +15C + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +21270.81528 + 30 +0.0 + 11 +5365.0 + 21 +21635.81528 + 31 +0.0 + 0 +LINE + 5 +15D + 8 +0 + 62 + 0 + 10 +5479.18472 + 20 +21750.0 + 30 +0.0 + 11 +5844.18472 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +15E + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +21624.368671 + 30 +0.0 + 11 +5490.631329 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +15F + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +21977.922061 + 30 +0.0 + 11 +5137.077939 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +160 + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +19503.048327 + 30 +0.0 + 11 +5365.0 + 21 +19868.048327 + 31 +0.0 + 0 +LINE + 5 +161 + 8 +0 + 62 + 0 + 10 +5225.505063 + 20 +19375.0 + 30 +0.0 + 11 +5365.0 + 21 +19514.494937 + 31 +0.0 + 0 +ENDBLK + 5 +162 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X2 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X2 + 1 + + 0 +LINE + 5 +164 + 8 +0 + 62 + 0 + 10 +9721.825407 + 20 +21750.0 + 30 +0.0 + 11 +10086.825407 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +165 + 8 +0 + 62 + 0 + 10 +9368.272016 + 20 +21750.0 + 30 +0.0 + 11 +9733.272016 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +166 + 8 +0 + 62 + 0 + 10 +9014.718626 + 20 +21750.0 + 30 +0.0 + 11 +9379.718626 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +167 + 8 +0 + 62 + 0 + 10 +8661.165235 + 20 +21750.0 + 30 +0.0 + 11 +9026.165235 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +168 + 8 +0 + 62 + 0 + 10 +8500.0 + 20 +21942.388155 + 30 +0.0 + 11 +8672.611845 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +169 + 8 +0 + 62 + 0 + 10 +9750.0 + 20 +21424.621202 + 30 +0.0 + 11 +10240.0 + 21 +21914.621202 + 31 +0.0 + 0 +LINE + 5 +16A + 8 +0 + 62 + 0 + 10 +9750.0 + 20 +21071.067812 + 30 +0.0 + 11 +10115.0 + 21 +21436.067812 + 31 +0.0 + 0 +LINE + 5 +16B + 8 +0 + 62 + 0 + 10 +9907.485579 + 20 +20875.0 + 30 +0.0 + 11 +10115.0 + 21 +21082.514421 + 31 +0.0 + 0 +ENDBLK + 5 +16C + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X3 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X3 + 1 + + 0 +LINE + 5 +16E + 8 +0 + 62 + 0 + 10 +22500.0 + 20 +20739.59236 + 30 +0.0 + 11 +22865.0 + 21 +21104.59236 + 31 +0.0 + 0 +LINE + 5 +16F + 8 +0 + 62 + 0 + 10 +22500.0 + 20 +21093.145751 + 30 +0.0 + 11 +22865.0 + 21 +21458.145751 + 31 +0.0 + 0 +LINE + 5 +170 + 8 +0 + 62 + 0 + 10 +23156.854249 + 20 +21750.0 + 30 +0.0 + 11 +23365.0 + 21 +21958.145751 + 31 +0.0 + 0 +LINE + 5 +171 + 8 +0 + 62 + 0 + 10 +22500.0 + 20 +21446.699141 + 30 +0.0 + 11 +23168.300859 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +172 + 8 +0 + 62 + 0 + 10 +22449.747468 + 20 +21750.0 + 30 +0.0 + 11 +22814.747468 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +173 + 8 +0 + 62 + 0 + 10 +22096.194078 + 20 +21750.0 + 30 +0.0 + 11 +22461.194078 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +174 + 8 +0 + 62 + 0 + 10 +21742.640687 + 20 +21750.0 + 30 +0.0 + 11 +22107.640687 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +175 + 8 +0 + 62 + 0 + 10 +21389.087297 + 20 +21750.0 + 30 +0.0 + 11 +21754.087297 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +176 + 8 +0 + 62 + 0 + 10 +21035.533906 + 20 +21750.0 + 30 +0.0 + 11 +21400.533906 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +177 + 8 +0 + 62 + 0 + 10 +20681.980515 + 20 +21750.0 + 30 +0.0 + 11 +21046.980515 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +178 + 8 +0 + 62 + 0 + 10 +20328.427125 + 20 +21750.0 + 30 +0.0 + 11 +20693.427125 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +179 + 8 +0 + 62 + 0 + 10 +19974.873734 + 20 +21750.0 + 30 +0.0 + 11 +20339.873734 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +17A + 8 +0 + 62 + 0 + 10 +19750.0 + 20 +21878.679656 + 30 +0.0 + 11 +19986.320344 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +17B + 8 +0 + 62 + 0 + 10 +22500.0 + 20 +20386.038969 + 30 +0.0 + 11 +22865.0 + 21 +20751.038969 + 31 +0.0 + 0 +LINE + 5 +17C + 8 +0 + 62 + 0 + 10 +22500.0 + 20 +20032.485579 + 30 +0.0 + 11 +22865.0 + 21 +20397.485579 + 31 +0.0 + 0 +LINE + 5 +17D + 8 +0 + 62 + 0 + 10 +22500.0 + 20 +19678.932188 + 30 +0.0 + 11 +22865.0 + 21 +20043.932188 + 31 +0.0 + 0 +LINE + 5 +17E + 8 +0 + 62 + 0 + 10 +22500.0 + 20 +19325.378798 + 30 +0.0 + 11 +22865.0 + 21 +19690.378798 + 31 +0.0 + 0 +LINE + 5 +17F + 8 +0 + 62 + 0 + 10 +22500.0 + 20 +18971.825407 + 30 +0.0 + 11 +22865.0 + 21 +19336.825407 + 31 +0.0 + 0 +LINE + 5 +180 + 8 +0 + 62 + 0 + 10 +22500.0 + 20 +18618.272016 + 30 +0.0 + 11 +22865.0 + 21 +18983.272016 + 31 +0.0 + 0 +LINE + 5 +181 + 8 +0 + 62 + 0 + 10 +22500.0 + 20 +18264.718626 + 30 +0.0 + 11 +22865.0 + 21 +18629.718626 + 31 +0.0 + 0 +LINE + 5 +182 + 8 +0 + 62 + 0 + 10 +22500.0 + 20 +17911.165235 + 30 +0.0 + 11 +22865.0 + 21 +18276.165235 + 31 +0.0 + 0 +LINE + 5 +183 + 8 +0 + 62 + 0 + 10 +22500.0 + 20 +17557.611845 + 30 +0.0 + 11 +22865.0 + 21 +17922.611845 + 31 +0.0 + 0 +LINE + 5 +184 + 8 +0 + 62 + 0 + 10 +22500.0 + 20 +17204.058454 + 30 +0.0 + 11 +22865.0 + 21 +17569.058454 + 31 +0.0 + 0 +LINE + 5 +185 + 8 +0 + 62 + 0 + 10 +22774.494937 + 20 +17125.0 + 30 +0.0 + 11 +22865.0 + 21 +17215.505063 + 31 +0.0 + 0 +ENDBLK + 5 +186 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X4 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X4 + 1 + + 0 +LINE + 5 +188 + 8 +0 + 62 + 0 + 10 +26375.0 + 20 +20725.505063 + 30 +0.0 + 11 +26740.0 + 21 +21090.505063 + 31 +0.0 + 0 +LINE + 5 +189 + 8 +0 + 62 + 0 + 10 +26375.0 + 20 +21079.058454 + 30 +0.0 + 11 +26740.0 + 21 +21444.058454 + 31 +0.0 + 0 +LINE + 5 +18A + 8 +0 + 62 + 0 + 10 +26375.0 + 20 +21432.611845 + 30 +0.0 + 11 +26740.0 + 21 +21797.611845 + 31 +0.0 + 0 +LINE + 5 +18B + 8 +0 + 62 + 0 + 10 +26338.834765 + 20 +21750.0 + 30 +0.0 + 11 +26703.834765 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +18C + 8 +0 + 62 + 0 + 10 +25985.281374 + 20 +21750.0 + 30 +0.0 + 11 +26350.281374 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +18D + 8 +0 + 62 + 0 + 10 +25631.727984 + 20 +21750.0 + 30 +0.0 + 11 +25996.727984 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +18E + 8 +0 + 62 + 0 + 10 +25278.174593 + 20 +21750.0 + 30 +0.0 + 11 +25643.174593 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +18F + 8 +0 + 62 + 0 + 10 +25250.0 + 20 +22075.378798 + 30 +0.0 + 11 +25289.621202 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +190 + 8 +0 + 62 + 0 + 10 +26375.0 + 20 +20371.951673 + 30 +0.0 + 11 +26740.0 + 21 +20736.951673 + 31 +0.0 + 0 +LINE + 5 +191 + 8 +0 + 62 + 0 + 10 +26375.0 + 20 +20018.398282 + 30 +0.0 + 11 +26740.0 + 21 +20383.398282 + 31 +0.0 + 0 +LINE + 5 +192 + 8 +0 + 62 + 0 + 10 +26375.0 + 20 +19664.844892 + 30 +0.0 + 11 +26740.0 + 21 +20029.844892 + 31 +0.0 + 0 +LINE + 5 +193 + 8 +0 + 62 + 0 + 10 +26375.0 + 20 +19311.291501 + 30 +0.0 + 11 +26740.0 + 21 +19676.291501 + 31 +0.0 + 0 +LINE + 5 +194 + 8 +0 + 62 + 0 + 10 +26375.0 + 20 +18957.73811 + 30 +0.0 + 11 +26740.0 + 21 +19322.73811 + 31 +0.0 + 0 +LINE + 5 +195 + 8 +0 + 62 + 0 + 10 +26375.0 + 20 +18604.18472 + 30 +0.0 + 11 +26740.0 + 21 +18969.18472 + 31 +0.0 + 0 +LINE + 5 +196 + 8 +0 + 62 + 0 + 10 +26499.368671 + 20 +18375.0 + 30 +0.0 + 11 +26740.0 + 21 +18615.631329 + 31 +0.0 + 0 +ENDBLK + 5 +197 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X5 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X5 + 1 + + 0 +LINE + 5 +199 + 8 +0 + 62 + 0 + 10 +25163.582233 + 20 +15625.0 + 30 +0.0 + 11 +25528.582233 + 21 +15990.0 + 31 +0.0 + 0 +LINE + 5 +19A + 8 +0 + 62 + 0 + 10 +26375.0 + 20 +16836.417767 + 30 +0.0 + 11 +26740.0 + 21 +17201.417767 + 31 +0.0 + 0 +LINE + 5 +19B + 8 +0 + 62 + 0 + 10 +24810.028843 + 20 +15625.0 + 30 +0.0 + 11 +25175.028843 + 21 +15990.0 + 31 +0.0 + 0 +LINE + 5 +19C + 8 +0 + 62 + 0 + 10 +26375.0 + 20 +17189.971157 + 30 +0.0 + 11 +26740.0 + 21 +17554.971157 + 31 +0.0 + 0 +LINE + 5 +19D + 8 +0 + 62 + 0 + 10 +24456.475452 + 20 +15625.0 + 30 +0.0 + 11 +24821.475452 + 21 +15990.0 + 31 +0.0 + 0 +LINE + 5 +19E + 8 +0 + 62 + 0 + 10 +26375.0 + 20 +17543.524548 + 30 +0.0 + 11 +26571.475452 + 21 +17740.0 + 31 +0.0 + 0 +LINE + 5 +19F + 8 +0 + 62 + 0 + 10 +24102.922061 + 20 +15625.0 + 30 +0.0 + 11 +24467.922061 + 21 +15990.0 + 31 +0.0 + 0 +LINE + 5 +1A0 + 8 +0 + 62 + 0 + 10 +23749.368671 + 20 +15625.0 + 30 +0.0 + 11 +24114.368671 + 21 +15990.0 + 31 +0.0 + 0 +LINE + 5 +1A1 + 8 +0 + 62 + 0 + 10 +23395.81528 + 20 +15625.0 + 30 +0.0 + 11 +23760.81528 + 21 +15990.0 + 31 +0.0 + 0 +LINE + 5 +1A2 + 8 +0 + 62 + 0 + 10 +23042.26189 + 20 +15625.0 + 30 +0.0 + 11 +23407.26189 + 21 +15990.0 + 31 +0.0 + 0 +LINE + 5 +1A3 + 8 +0 + 62 + 0 + 10 +22688.708499 + 20 +15625.0 + 30 +0.0 + 11 +23053.708499 + 21 +15990.0 + 31 +0.0 + 0 +LINE + 5 +1A4 + 8 +0 + 62 + 0 + 10 +22335.155108 + 20 +15625.0 + 30 +0.0 + 11 +22865.0 + 21 +16154.844892 + 31 +0.0 + 0 +LINE + 5 +1A5 + 8 +0 + 62 + 0 + 10 +22250.0 + 20 +15893.398282 + 30 +0.0 + 11 +22346.601718 + 21 +15990.0 + 31 +0.0 + 0 +LINE + 5 +1A6 + 8 +0 + 62 + 0 + 10 +22500.0 + 20 +16143.398282 + 30 +0.0 + 11 +22596.601718 + 21 +16240.0 + 31 +0.0 + 0 +LINE + 5 +1A7 + 8 +0 + 62 + 0 + 10 +25517.135624 + 20 +15625.0 + 30 +0.0 + 11 +25882.135624 + 21 +15990.0 + 31 +0.0 + 0 +LINE + 5 +1A8 + 8 +0 + 62 + 0 + 10 +26375.0 + 20 +16482.864376 + 30 +0.0 + 11 +26740.0 + 21 +16847.864376 + 31 +0.0 + 0 +LINE + 5 +1A9 + 8 +0 + 62 + 0 + 10 +25870.689014 + 20 +15625.0 + 30 +0.0 + 11 +26235.689014 + 21 +15990.0 + 31 +0.0 + 0 +LINE + 5 +1AA + 8 +0 + 62 + 0 + 10 +26375.0 + 20 +16129.310986 + 30 +0.0 + 11 +26740.0 + 21 +16494.310986 + 31 +0.0 + 0 +LINE + 5 +1AB + 8 +0 + 62 + 0 + 10 +26224.242405 + 20 +15625.0 + 30 +0.0 + 11 +26740.0 + 21 +16140.757595 + 31 +0.0 + 0 +LINE + 5 +1AC + 8 +0 + 62 + 0 + 10 +26375.0 + 20 +15422.204204 + 30 +0.0 + 11 +26740.0 + 21 +15787.204204 + 31 +0.0 + 0 +LINE + 5 +1AD + 8 +0 + 62 + 0 + 10 +26375.0 + 20 +15068.650814 + 30 +0.0 + 11 +26740.0 + 21 +15433.650814 + 31 +0.0 + 0 +LINE + 5 +1AE + 8 +0 + 62 + 0 + 10 +26375.0 + 20 +14715.097423 + 30 +0.0 + 11 +26740.0 + 21 +15080.097423 + 31 +0.0 + 0 +LINE + 5 +1AF + 8 +0 + 62 + 0 + 10 +26375.0 + 20 +14361.544033 + 30 +0.0 + 11 +26740.0 + 21 +14726.544033 + 31 +0.0 + 0 +LINE + 5 +1B0 + 8 +0 + 62 + 0 + 10 +26375.0 + 20 +14007.990642 + 30 +0.0 + 11 +26740.0 + 21 +14372.990642 + 31 +0.0 + 0 +LINE + 5 +1B1 + 8 +0 + 62 + 0 + 10 +26375.0 + 20 +13654.437252 + 30 +0.0 + 11 +26740.0 + 21 +14019.437252 + 31 +0.0 + 0 +LINE + 5 +1B2 + 8 +0 + 62 + 0 + 10 +26375.0 + 20 +13300.883861 + 30 +0.0 + 11 +26740.0 + 21 +13665.883861 + 31 +0.0 + 0 +LINE + 5 +1B3 + 8 +0 + 62 + 0 + 10 +26375.0 + 20 +12947.33047 + 30 +0.0 + 11 +26740.0 + 21 +13312.33047 + 31 +0.0 + 0 +LINE + 5 +1B4 + 8 +0 + 62 + 0 + 10 +26375.0 + 20 +12593.77708 + 30 +0.0 + 11 +26740.0 + 21 +12958.77708 + 31 +0.0 + 0 +LINE + 5 +1B5 + 8 +0 + 62 + 0 + 10 +26375.0 + 20 +12240.223689 + 30 +0.0 + 11 +26740.0 + 21 +12605.223689 + 31 +0.0 + 0 +LINE + 5 +1B6 + 8 +0 + 62 + 0 + 10 +26488.329701 + 20 +12000.0 + 30 +0.0 + 11 +26740.0 + 21 +12251.670299 + 31 +0.0 + 0 +ENDBLK + 5 +1B7 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X6 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X6 + 1 + + 0 +LINE + 5 +1B9 + 8 +0 + 62 + 0 + 10 +9750.0 + 20 +18242.640687 + 30 +0.0 + 11 +10115.0 + 21 +18607.640687 + 31 +0.0 + 0 +LINE + 5 +1BA + 8 +0 + 62 + 0 + 10 +9750.0 + 20 +18596.194078 + 30 +0.0 + 11 +10115.0 + 21 +18961.194078 + 31 +0.0 + 0 +LINE + 5 +1BB + 8 +0 + 62 + 0 + 10 +9750.0 + 20 +18949.747468 + 30 +0.0 + 11 +10115.0 + 21 +19314.747468 + 31 +0.0 + 0 +LINE + 5 +1BC + 8 +0 + 62 + 0 + 10 +9750.0 + 20 +19303.300859 + 30 +0.0 + 11 +10115.0 + 21 +19668.300859 + 31 +0.0 + 0 +LINE + 5 +1BD + 8 +0 + 62 + 0 + 10 +9750.0 + 20 +19656.854249 + 30 +0.0 + 11 +10083.145751 + 21 +19990.0 + 31 +0.0 + 0 +LINE + 5 +1BE + 8 +0 + 62 + 0 + 10 +9000.0 + 20 +17139.087297 + 30 +0.0 + 11 +9100.912703 + 21 +17240.0 + 31 +0.0 + 0 +LINE + 5 +1BF + 8 +0 + 62 + 0 + 10 +9750.0 + 20 +17889.087297 + 30 +0.0 + 11 +10115.0 + 21 +18254.087297 + 31 +0.0 + 0 +LINE + 5 +1C0 + 8 +0 + 62 + 0 + 10 +9089.466094 + 20 +16875.0 + 30 +0.0 + 11 +9454.466094 + 21 +17240.0 + 31 +0.0 + 0 +LINE + 5 +1C1 + 8 +0 + 62 + 0 + 10 +9750.0 + 20 +17535.533906 + 30 +0.0 + 11 +10115.0 + 21 +17900.533906 + 31 +0.0 + 0 +LINE + 5 +1C2 + 8 +0 + 62 + 0 + 10 +9443.019485 + 20 +16875.0 + 30 +0.0 + 11 +10115.0 + 21 +17546.980515 + 31 +0.0 + 0 +LINE + 5 +1C3 + 8 +0 + 62 + 0 + 10 +9750.0 + 20 +16828.427125 + 30 +0.0 + 11 +10115.0 + 21 +17193.427125 + 31 +0.0 + 0 +LINE + 5 +1C4 + 8 +0 + 62 + 0 + 10 +9900.126266 + 20 +16625.0 + 30 +0.0 + 11 +10115.0 + 21 +16839.873734 + 31 +0.0 + 0 +ENDBLK + 5 +1C5 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X7 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X7 + 1 + + 0 +LINE + 5 +1C7 + 8 +0 + 62 + 0 + 10 +6261.038969 + 20 +16875.0 + 30 +0.0 + 11 +6626.038969 + 21 +17240.0 + 31 +0.0 + 0 +LINE + 5 +1C8 + 8 +0 + 62 + 0 + 10 +5157.485579 + 20 +16125.0 + 30 +0.0 + 11 +5365.0 + 21 +16332.514421 + 31 +0.0 + 0 +LINE + 5 +1C9 + 8 +0 + 62 + 0 + 10 +5907.485579 + 20 +16875.0 + 30 +0.0 + 11 +6272.485579 + 21 +17240.0 + 31 +0.0 + 0 +LINE + 5 +1CA + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +16321.067812 + 30 +0.0 + 11 +5365.0 + 21 +16686.067812 + 31 +0.0 + 0 +LINE + 5 +1CB + 8 +0 + 62 + 0 + 10 +5553.932188 + 20 +16875.0 + 30 +0.0 + 11 +5918.932188 + 21 +17240.0 + 31 +0.0 + 0 +LINE + 5 +1CC + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +16674.621202 + 30 +0.0 + 11 +5565.378798 + 21 +17240.0 + 31 +0.0 + 0 +LINE + 5 +1CD + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +17028.174593 + 30 +0.0 + 11 +5365.0 + 21 +17393.174593 + 31 +0.0 + 0 +LINE + 5 +1CE + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +17381.727984 + 30 +0.0 + 11 +5365.0 + 21 +17746.727984 + 31 +0.0 + 0 +LINE + 5 +1CF + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +17735.281374 + 30 +0.0 + 11 +5365.0 + 21 +18100.281374 + 31 +0.0 + 0 +LINE + 5 +1D0 + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +18088.834765 + 30 +0.0 + 11 +5151.165235 + 21 +18240.0 + 31 +0.0 + 0 +LINE + 5 +1D1 + 8 +0 + 62 + 0 + 10 +6614.59236 + 20 +16875.0 + 30 +0.0 + 11 +6979.59236 + 21 +17240.0 + 31 +0.0 + 0 +LINE + 5 +1D2 + 8 +0 + 62 + 0 + 10 +6968.145751 + 20 +16875.0 + 30 +0.0 + 11 +7333.145751 + 21 +17240.0 + 31 +0.0 + 0 +LINE + 5 +1D3 + 8 +0 + 62 + 0 + 10 +7321.699141 + 20 +16875.0 + 30 +0.0 + 11 +7686.699141 + 21 +17240.0 + 31 +0.0 + 0 +LINE + 5 +1D4 + 8 +0 + 62 + 0 + 10 +7675.252532 + 20 +16875.0 + 30 +0.0 + 11 +8040.252532 + 21 +17240.0 + 31 +0.0 + 0 +LINE + 5 +1D5 + 8 +0 + 62 + 0 + 10 +8028.805922 + 20 +16875.0 + 30 +0.0 + 11 +8115.0 + 21 +16961.194078 + 31 +0.0 + 0 +ENDBLK + 5 +1D6 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X8 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X8 + 1 + + 0 +LINE + 5 +1D8 + 8 +0 + 62 + 0 + 10 +8750.0 + 20 +9464.466094 + 30 +0.0 + 11 +8900.533906 + 21 +9615.0 + 31 +0.0 + 0 +LINE + 5 +1D9 + 8 +0 + 62 + 0 + 10 +11660.533906 + 20 +12375.0 + 30 +0.0 + 11 +12025.533906 + 21 +12740.0 + 31 +0.0 + 0 +LINE + 5 +1DA + 8 +0 + 62 + 0 + 10 +9375.0 + 20 +10089.466094 + 30 +0.0 + 11 +9740.0 + 21 +10454.466094 + 31 +0.0 + 0 +LINE + 5 +1DB + 8 +0 + 62 + 0 + 10 +9375.0 + 20 +10443.019485 + 30 +0.0 + 11 +9740.0 + 21 +10808.019485 + 31 +0.0 + 0 +LINE + 5 +1DC + 8 +0 + 62 + 0 + 10 +11306.980515 + 20 +12375.0 + 30 +0.0 + 11 +11671.980515 + 21 +12740.0 + 31 +0.0 + 0 +LINE + 5 +1DD + 8 +0 + 62 + 0 + 10 +9375.0 + 20 +10796.572875 + 30 +0.0 + 11 +9740.0 + 21 +11161.572875 + 31 +0.0 + 0 +LINE + 5 +1DE + 8 +0 + 62 + 0 + 10 +10953.427125 + 20 +12375.0 + 30 +0.0 + 11 +11318.427125 + 21 +12740.0 + 31 +0.0 + 0 +LINE + 5 +1DF + 8 +0 + 62 + 0 + 10 +9375.0 + 20 +11150.126266 + 30 +0.0 + 11 +9740.0 + 21 +11515.126266 + 31 +0.0 + 0 +LINE + 5 +1E0 + 8 +0 + 62 + 0 + 10 +10599.873734 + 20 +12375.0 + 30 +0.0 + 11 +10964.873734 + 21 +12740.0 + 31 +0.0 + 0 +LINE + 5 +1E1 + 8 +0 + 62 + 0 + 10 +9375.0 + 20 +11503.679656 + 30 +0.0 + 11 +9740.0 + 21 +11868.679656 + 31 +0.0 + 0 +LINE + 5 +1E2 + 8 +0 + 62 + 0 + 10 +10246.320344 + 20 +12375.0 + 30 +0.0 + 11 +10611.320344 + 21 +12740.0 + 31 +0.0 + 0 +LINE + 5 +1E3 + 8 +0 + 62 + 0 + 10 +9375.0 + 20 +11857.233047 + 30 +0.0 + 11 +9740.0 + 21 +12222.233047 + 31 +0.0 + 0 +LINE + 5 +1E4 + 8 +0 + 62 + 0 + 10 +9892.766953 + 20 +12375.0 + 30 +0.0 + 11 +10257.766953 + 21 +12740.0 + 31 +0.0 + 0 +LINE + 5 +1E5 + 8 +0 + 62 + 0 + 10 +9375.0 + 20 +12210.786438 + 30 +0.0 + 11 +10115.0 + 21 +12950.786438 + 31 +0.0 + 0 +LINE + 5 +1E6 + 8 +0 + 62 + 0 + 10 +9375.0 + 20 +12564.339828 + 30 +0.0 + 11 +9550.660172 + 21 +12740.0 + 31 +0.0 + 0 +LINE + 5 +1E7 + 8 +0 + 62 + 0 + 10 +9750.0 + 20 +12939.339828 + 30 +0.0 + 11 +9800.660172 + 21 +12990.0 + 31 +0.0 + 0 +LINE + 5 +1E8 + 8 +0 + 62 + 0 + 10 +8889.087297 + 20 +9250.0 + 30 +0.0 + 11 +9254.087297 + 21 +9615.0 + 31 +0.0 + 0 +LINE + 5 +1E9 + 8 +0 + 62 + 0 + 10 +12014.087297 + 20 +12375.0 + 30 +0.0 + 11 +12379.087297 + 21 +12740.0 + 31 +0.0 + 0 +LINE + 5 +1EA + 8 +0 + 62 + 0 + 10 +9375.0 + 20 +9735.912703 + 30 +0.0 + 11 +9740.0 + 21 +10100.912703 + 31 +0.0 + 0 +LINE + 5 +1EB + 8 +0 + 62 + 0 + 10 +9242.640687 + 20 +9250.0 + 30 +0.0 + 11 +9740.0 + 21 +9747.359313 + 31 +0.0 + 0 +LINE + 5 +1EC + 8 +0 + 62 + 0 + 10 +12367.640687 + 20 +12375.0 + 30 +0.0 + 11 +12615.0 + 21 +12622.359313 + 31 +0.0 + 0 +LINE + 5 +1ED + 8 +0 + 62 + 0 + 10 +9596.194078 + 20 +9250.0 + 30 +0.0 + 11 +9865.0 + 21 +9518.805922 + 31 +0.0 + 0 +ENDBLK + 5 +1EE + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X9 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X9 + 1 + + 0 +LINE + 5 +1F0 + 8 +0 + 62 + 0 + 10 +11363.961031 + 20 +9250.0 + 30 +0.0 + 11 +11728.961031 + 21 +9615.0 + 31 +0.0 + 0 +LINE + 5 +1F1 + 8 +0 + 62 + 0 + 10 +14125.0 + 20 +12011.038969 + 30 +0.0 + 11 +14490.0 + 21 +12376.038969 + 31 +0.0 + 0 +LINE + 5 +1F2 + 8 +0 + 62 + 0 + 10 +11250.0 + 20 +9489.59236 + 30 +0.0 + 11 +11375.40764 + 21 +9615.0 + 31 +0.0 + 0 +LINE + 5 +1F3 + 8 +0 + 62 + 0 + 10 +14125.0 + 20 +12364.59236 + 30 +0.0 + 11 +14490.0 + 21 +12729.59236 + 31 +0.0 + 0 +LINE + 5 +1F4 + 8 +0 + 62 + 0 + 10 +13875.0 + 20 +12468.145751 + 30 +0.0 + 11 +14490.0 + 21 +13083.145751 + 31 +0.0 + 0 +LINE + 5 +1F5 + 8 +0 + 62 + 0 + 10 +14125.0 + 20 +13071.699141 + 30 +0.0 + 11 +14490.0 + 21 +13436.699141 + 31 +0.0 + 0 +LINE + 5 +1F6 + 8 +0 + 62 + 0 + 10 +14553.300859 + 20 +13500.0 + 30 +0.0 + 11 +14615.0 + 21 +13561.699141 + 31 +0.0 + 0 +LINE + 5 +1F7 + 8 +0 + 62 + 0 + 10 +14125.0 + 20 +13425.252532 + 30 +0.0 + 11 +14564.747468 + 21 +13865.0 + 31 +0.0 + 0 +LINE + 5 +1F8 + 8 +0 + 62 + 0 + 10 +14125.0 + 20 +13778.805922 + 30 +0.0 + 11 +14211.194078 + 21 +13865.0 + 31 +0.0 + 0 +LINE + 5 +1F9 + 8 +0 + 62 + 0 + 10 +11717.514421 + 20 +9250.0 + 30 +0.0 + 11 +12082.514421 + 21 +9615.0 + 31 +0.0 + 0 +LINE + 5 +1FA + 8 +0 + 62 + 0 + 10 +14125.0 + 20 +11657.485579 + 30 +0.0 + 11 +14490.0 + 21 +12022.485579 + 31 +0.0 + 0 +LINE + 5 +1FB + 8 +0 + 62 + 0 + 10 +12071.067812 + 20 +9250.0 + 30 +0.0 + 11 +12436.067812 + 21 +9615.0 + 31 +0.0 + 0 +LINE + 5 +1FC + 8 +0 + 62 + 0 + 10 +14125.0 + 20 +11303.932188 + 30 +0.0 + 11 +14490.0 + 21 +11668.932188 + 31 +0.0 + 0 +LINE + 5 +1FD + 8 +0 + 62 + 0 + 10 +12424.621202 + 20 +9250.0 + 30 +0.0 + 11 +12789.621202 + 21 +9615.0 + 31 +0.0 + 0 +LINE + 5 +1FE + 8 +0 + 62 + 0 + 10 +14125.0 + 20 +10950.378798 + 30 +0.0 + 11 +14490.0 + 21 +11315.378798 + 31 +0.0 + 0 +LINE + 5 +1FF + 8 +0 + 62 + 0 + 10 +12778.174593 + 20 +9250.0 + 30 +0.0 + 11 +13143.174593 + 21 +9615.0 + 31 +0.0 + 0 +LINE + 5 +200 + 8 +0 + 62 + 0 + 10 +14125.0 + 20 +10596.825407 + 30 +0.0 + 11 +14490.0 + 21 +10961.825407 + 31 +0.0 + 0 +LINE + 5 +201 + 8 +0 + 62 + 0 + 10 +13131.727984 + 20 +9250.0 + 30 +0.0 + 11 +13496.727984 + 21 +9615.0 + 31 +0.0 + 0 +LINE + 5 +202 + 8 +0 + 62 + 0 + 10 +14125.0 + 20 +10243.272016 + 30 +0.0 + 11 +14490.0 + 21 +10608.272016 + 31 +0.0 + 0 +LINE + 5 +203 + 8 +0 + 62 + 0 + 10 +13485.281374 + 20 +9250.0 + 30 +0.0 + 11 +13850.281374 + 21 +9615.0 + 31 +0.0 + 0 +LINE + 5 +204 + 8 +0 + 62 + 0 + 10 +14125.0 + 20 +9889.718626 + 30 +0.0 + 11 +14490.0 + 21 +10254.718626 + 31 +0.0 + 0 +LINE + 5 +205 + 8 +0 + 62 + 0 + 10 +13838.834765 + 20 +9250.0 + 30 +0.0 + 11 +14490.0 + 21 +9901.165235 + 31 +0.0 + 0 +LINE + 5 +206 + 8 +0 + 62 + 0 + 10 +14192.388155 + 20 +9250.0 + 30 +0.0 + 11 +14557.388155 + 21 +9615.0 + 31 +0.0 + 0 +LINE + 5 +207 + 8 +0 + 62 + 0 + 10 +14545.941546 + 20 +9250.0 + 30 +0.0 + 11 +14910.941546 + 21 +9615.0 + 31 +0.0 + 0 +LINE + 5 +208 + 8 +0 + 62 + 0 + 10 +14899.494937 + 20 +9250.0 + 30 +0.0 + 11 +15264.494937 + 21 +9615.0 + 31 +0.0 + 0 +LINE + 5 +209 + 8 +0 + 62 + 0 + 10 +15253.048327 + 20 +9250.0 + 30 +0.0 + 11 +15618.048327 + 21 +9615.0 + 31 +0.0 + 0 +LINE + 5 +20A + 8 +0 + 62 + 0 + 10 +15606.601718 + 20 +9250.0 + 30 +0.0 + 11 +15971.601718 + 21 +9615.0 + 31 +0.0 + 0 +LINE + 5 +20B + 8 +0 + 62 + 0 + 10 +15960.155108 + 20 +9250.0 + 30 +0.0 + 11 +16115.0 + 21 +9404.844892 + 31 +0.0 + 0 +ENDBLK + 5 +20C + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X10 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X10 + 1 + + 0 +LINE + 5 +20E + 8 +0 + 62 + 0 + 10 +17625.0 + 20 +12329.058454 + 30 +0.0 + 11 +17990.0 + 21 +12694.058454 + 31 +0.0 + 0 +LINE + 5 +20F + 8 +0 + 62 + 0 + 10 +17625.0 + 20 +12682.611845 + 30 +0.0 + 11 +17990.0 + 21 +13047.611845 + 31 +0.0 + 0 +LINE + 5 +210 + 8 +0 + 62 + 0 + 10 +17625.0 + 20 +13036.165235 + 30 +0.0 + 11 +17990.0 + 21 +13401.165235 + 31 +0.0 + 0 +LINE + 5 +211 + 8 +0 + 62 + 0 + 10 +17625.0 + 20 +13389.718626 + 30 +0.0 + 11 +17990.0 + 21 +13754.718626 + 31 +0.0 + 0 +LINE + 5 +212 + 8 +0 + 62 + 0 + 10 +17381.727984 + 20 +13500.0 + 30 +0.0 + 11 +17746.727984 + 21 +13865.0 + 31 +0.0 + 0 +LINE + 5 +213 + 8 +0 + 62 + 0 + 10 +17028.174593 + 20 +13500.0 + 30 +0.0 + 11 +17393.174593 + 21 +13865.0 + 31 +0.0 + 0 +LINE + 5 +214 + 8 +0 + 62 + 0 + 10 +16674.621202 + 20 +13500.0 + 30 +0.0 + 11 +17039.621202 + 21 +13865.0 + 31 +0.0 + 0 +LINE + 5 +215 + 8 +0 + 62 + 0 + 10 +16321.067812 + 20 +13500.0 + 30 +0.0 + 11 +16686.067812 + 21 +13865.0 + 31 +0.0 + 0 +LINE + 5 +216 + 8 +0 + 62 + 0 + 10 +15967.514421 + 20 +13500.0 + 30 +0.0 + 11 +16332.514421 + 21 +13865.0 + 31 +0.0 + 0 +LINE + 5 +217 + 8 +0 + 62 + 0 + 10 +15613.961031 + 20 +13500.0 + 30 +0.0 + 11 +16103.961031 + 21 +13990.0 + 31 +0.0 + 0 +LINE + 5 +218 + 8 +0 + 62 + 0 + 10 +15500.0 + 20 +13739.59236 + 30 +0.0 + 11 +15625.40764 + 21 +13865.0 + 31 +0.0 + 0 +LINE + 5 +219 + 8 +0 + 62 + 0 + 10 +15750.0 + 20 +13989.59236 + 30 +0.0 + 11 +15750.40764 + 21 +13990.0 + 31 +0.0 + 0 +LINE + 5 +21A + 8 +0 + 62 + 0 + 10 +17625.0 + 20 +11975.505063 + 30 +0.0 + 11 +17990.0 + 21 +12340.505063 + 31 +0.0 + 0 +LINE + 5 +21B + 8 +0 + 62 + 0 + 10 +17625.0 + 20 +11621.951673 + 30 +0.0 + 11 +17990.0 + 21 +11986.951673 + 31 +0.0 + 0 +LINE + 5 +21C + 8 +0 + 62 + 0 + 10 +17625.0 + 20 +11268.398282 + 30 +0.0 + 11 +17990.0 + 21 +11633.398282 + 31 +0.0 + 0 +LINE + 5 +21D + 8 +0 + 62 + 0 + 10 +17625.0 + 20 +10914.844892 + 30 +0.0 + 11 +17990.0 + 21 +11279.844892 + 31 +0.0 + 0 +LINE + 5 +21E + 8 +0 + 62 + 0 + 10 +17625.0 + 20 +10561.291501 + 30 +0.0 + 11 +17990.0 + 21 +10926.291501 + 31 +0.0 + 0 +LINE + 5 +21F + 8 +0 + 62 + 0 + 10 +17625.0 + 20 +10207.73811 + 30 +0.0 + 11 +17990.0 + 21 +10572.73811 + 31 +0.0 + 0 +LINE + 5 +220 + 8 +0 + 62 + 0 + 10 +17375.0 + 20 +9604.18472 + 30 +0.0 + 11 +17385.81528 + 21 +9615.0 + 31 +0.0 + 0 +LINE + 5 +221 + 8 +0 + 62 + 0 + 10 +17625.0 + 20 +9854.18472 + 30 +0.0 + 11 +17990.0 + 21 +10219.18472 + 31 +0.0 + 0 +LINE + 5 +222 + 8 +0 + 62 + 0 + 10 +17375.0 + 20 +9250.631329 + 30 +0.0 + 11 +17990.0 + 21 +9865.631329 + 31 +0.0 + 0 +LINE + 5 +223 + 8 +0 + 62 + 0 + 10 +17727.922061 + 20 +9250.0 + 30 +0.0 + 11 +18092.922061 + 21 +9615.0 + 31 +0.0 + 0 +LINE + 5 +224 + 8 +0 + 62 + 0 + 10 +18081.475452 + 20 +9250.0 + 30 +0.0 + 11 +18446.475452 + 21 +9615.0 + 31 +0.0 + 0 +LINE + 5 +225 + 8 +0 + 62 + 0 + 10 +18435.028843 + 20 +9250.0 + 30 +0.0 + 11 +18490.0 + 21 +9304.971157 + 31 +0.0 + 0 +ENDBLK + 5 +226 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X11 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X11 + 1 + + 0 +LINE + 5 +228 + 8 +0 + 62 + 0 + 10 +20875.0 + 20 +12043.524548 + 30 +0.0 + 11 +21240.0 + 21 +12408.524548 + 31 +0.0 + 0 +LINE + 5 +229 + 8 +0 + 62 + 0 + 10 +20875.0 + 20 +12397.077939 + 30 +0.0 + 11 +21240.0 + 21 +12762.077939 + 31 +0.0 + 0 +LINE + 5 +22A + 8 +0 + 62 + 0 + 10 +20875.0 + 20 +12750.631329 + 30 +0.0 + 11 +21240.0 + 21 +13115.631329 + 31 +0.0 + 0 +LINE + 5 +22B + 8 +0 + 62 + 0 + 10 +20875.0 + 20 +13104.18472 + 30 +0.0 + 11 +21240.0 + 21 +13469.18472 + 31 +0.0 + 0 +LINE + 5 +22C + 8 +0 + 62 + 0 + 10 +20875.0 + 20 +13457.73811 + 30 +0.0 + 11 +21240.0 + 21 +13822.73811 + 31 +0.0 + 0 +LINE + 5 +22D + 8 +0 + 62 + 0 + 10 +20875.0 + 20 +13811.291501 + 30 +0.0 + 11 +21240.0 + 21 +14176.291501 + 31 +0.0 + 0 +LINE + 5 +22E + 8 +0 + 62 + 0 + 10 +20875.0 + 20 +14164.844892 + 30 +0.0 + 11 +20950.155108 + 21 +14240.0 + 31 +0.0 + 0 +LINE + 5 +22F + 8 +0 + 62 + 0 + 10 +20875.0 + 20 +11689.971157 + 30 +0.0 + 11 +21240.0 + 21 +12054.971157 + 31 +0.0 + 0 +LINE + 5 +230 + 8 +0 + 62 + 0 + 10 +20875.0 + 20 +11336.417767 + 30 +0.0 + 11 +21240.0 + 21 +11701.417767 + 31 +0.0 + 0 +LINE + 5 +231 + 8 +0 + 62 + 0 + 10 +20875.0 + 20 +10982.864376 + 30 +0.0 + 11 +21240.0 + 21 +11347.864376 + 31 +0.0 + 0 +LINE + 5 +232 + 8 +0 + 62 + 0 + 10 +20875.0 + 20 +10629.310986 + 30 +0.0 + 11 +21240.0 + 21 +10994.310986 + 31 +0.0 + 0 +LINE + 5 +233 + 8 +0 + 62 + 0 + 10 +20875.0 + 20 +10275.757595 + 30 +0.0 + 11 +21240.0 + 21 +10640.757595 + 31 +0.0 + 0 +LINE + 5 +234 + 8 +0 + 62 + 0 + 10 +20375.0 + 20 +9422.204204 + 30 +0.0 + 11 +20567.795796 + 21 +9615.0 + 31 +0.0 + 0 +LINE + 5 +235 + 8 +0 + 62 + 0 + 10 +20875.0 + 20 +9922.204204 + 30 +0.0 + 11 +21240.0 + 21 +10287.204204 + 31 +0.0 + 0 +LINE + 5 +236 + 8 +0 + 62 + 0 + 10 +20556.349186 + 20 +9250.0 + 30 +0.0 + 11 +21240.0 + 21 +9933.650814 + 31 +0.0 + 0 +LINE + 5 +237 + 8 +0 + 62 + 0 + 10 +20909.902577 + 20 +9250.0 + 30 +0.0 + 11 +21274.902577 + 21 +9615.0 + 31 +0.0 + 0 +LINE + 5 +238 + 8 +0 + 62 + 0 + 10 +21263.455967 + 20 +9250.0 + 30 +0.0 + 11 +21365.0 + 21 +9351.544033 + 31 +0.0 + 0 +ENDBLK + 5 +239 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X12 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X12 + 1 + + 0 +LINE + 5 +23B + 8 +0 + 62 + 0 + 10 +22324.116139 + 20 +9250.0 + 30 +0.0 + 11 +22689.116139 + 21 +9615.0 + 31 +0.0 + 0 +LINE + 5 +23C + 8 +0 + 62 + 0 + 10 +21970.562748 + 20 +9250.0 + 30 +0.0 + 11 +22335.562748 + 21 +9615.0 + 31 +0.0 + 0 +LINE + 5 +23D + 8 +0 + 62 + 0 + 10 +21875.0 + 20 +9507.990642 + 30 +0.0 + 11 +21982.009358 + 21 +9615.0 + 31 +0.0 + 0 +LINE + 5 +23E + 8 +0 + 62 + 0 + 10 +22677.66953 + 20 +9250.0 + 30 +0.0 + 11 +23042.66953 + 21 +9615.0 + 31 +0.0 + 0 +LINE + 5 +23F + 8 +0 + 62 + 0 + 10 +23031.22292 + 20 +9250.0 + 30 +0.0 + 11 +23240.0 + 21 +9458.77708 + 31 +0.0 + 0 +ENDBLK + 5 +240 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X13 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X13 + 1 + + 0 +LINE + 5 +242 + 8 +0 + 62 + 0 + 10 +25375.0 + 20 +9472.456736 + 30 +0.0 + 11 +25517.543264 + 21 +9615.0 + 31 +0.0 + 0 +LINE + 5 +243 + 8 +0 + 62 + 0 + 10 +25506.096654 + 20 +9250.0 + 30 +0.0 + 11 +25871.096654 + 21 +9615.0 + 31 +0.0 + 0 +LINE + 5 +244 + 8 +0 + 62 + 0 + 10 +26375.0 + 20 +10118.903346 + 30 +0.0 + 11 +26621.096654 + 21 +10365.0 + 31 +0.0 + 0 +LINE + 5 +245 + 8 +0 + 62 + 0 + 10 +25859.650045 + 20 +9250.0 + 30 +0.0 + 11 +26224.650045 + 21 +9615.0 + 31 +0.0 + 0 +LINE + 5 +246 + 8 +0 + 62 + 0 + 10 +26375.0 + 20 +9765.349955 + 30 +0.0 + 11 +26740.0 + 21 +10130.349955 + 31 +0.0 + 0 +LINE + 5 +247 + 8 +0 + 62 + 0 + 10 +26213.203436 + 20 +9250.0 + 30 +0.0 + 11 +26740.0 + 21 +9776.796564 + 31 +0.0 + 0 +LINE + 5 +248 + 8 +0 + 62 + 0 + 10 +26566.756826 + 20 +9250.0 + 30 +0.0 + 11 +26740.0 + 21 +9423.243174 + 31 +0.0 + 0 +ENDBLK + 5 +249 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X14 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X14 + 1 + + 0 +LINE + 5 +24B + 8 +0 + 62 + 0 + 10 +7121.320344 + 20 +9250.0 + 30 +0.0 + 11 +7486.320344 + 21 +9615.0 + 31 +0.0 + 0 +LINE + 5 +24C + 8 +0 + 62 + 0 + 10 +12996.320344 + 20 +15125.0 + 30 +0.0 + 11 +13361.320344 + 21 +15490.0 + 31 +0.0 + 0 +LINE + 5 +24D + 8 +0 + 62 + 0 + 10 +6767.766953 + 20 +9250.0 + 30 +0.0 + 11 +7132.766953 + 21 +9615.0 + 31 +0.0 + 0 +LINE + 5 +24E + 8 +0 + 62 + 0 + 10 +12642.766953 + 20 +15125.0 + 30 +0.0 + 11 +13007.766953 + 21 +15490.0 + 31 +0.0 + 0 +LINE + 5 +24F + 8 +0 + 62 + 0 + 10 +6414.213562 + 20 +9250.0 + 30 +0.0 + 11 +6779.213562 + 21 +9615.0 + 31 +0.0 + 0 +LINE + 5 +250 + 8 +0 + 62 + 0 + 10 +12289.213562 + 20 +15125.0 + 30 +0.0 + 11 +12654.213562 + 21 +15490.0 + 31 +0.0 + 0 +LINE + 5 +251 + 8 +0 + 62 + 0 + 10 +6060.660172 + 20 +9250.0 + 30 +0.0 + 11 +6425.660172 + 21 +9615.0 + 31 +0.0 + 0 +LINE + 5 +252 + 8 +0 + 62 + 0 + 10 +11935.660172 + 20 +15125.0 + 30 +0.0 + 11 +12300.660172 + 21 +15490.0 + 31 +0.0 + 0 +LINE + 5 +253 + 8 +0 + 62 + 0 + 10 +5707.106781 + 20 +9250.0 + 30 +0.0 + 11 +6072.106781 + 21 +9615.0 + 31 +0.0 + 0 +LINE + 5 +254 + 8 +0 + 62 + 0 + 10 +11582.106781 + 20 +15125.0 + 30 +0.0 + 11 +11947.106781 + 21 +15490.0 + 31 +0.0 + 0 +LINE + 5 +255 + 8 +0 + 62 + 0 + 10 +5353.553391 + 20 +9250.0 + 30 +0.0 + 11 +5718.553391 + 21 +9615.0 + 31 +0.0 + 0 +LINE + 5 +256 + 8 +0 + 62 + 0 + 10 +11228.553391 + 20 +15125.0 + 30 +0.0 + 11 +11593.553391 + 21 +15490.0 + 31 +0.0 + 0 +LINE + 5 +257 + 8 +0 + 62 + 0 + 10 +9978.553391 + 20 +13875.0 + 30 +0.0 + 11 +10115.0 + 21 +14011.446609 + 31 +0.0 + 0 +LINE + 5 +258 + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +9250.0 + 30 +0.0 + 11 +5365.0 + 21 +9615.0 + 31 +0.0 + 0 +LINE + 5 +259 + 8 +0 + 62 + 0 + 10 +10875.0 + 20 +15125.0 + 30 +0.0 + 11 +11240.0 + 21 +15490.0 + 31 +0.0 + 0 +LINE + 5 +25A + 8 +0 + 62 + 0 + 10 +9750.0 + 20 +14000.0 + 30 +0.0 + 11 +10115.0 + 21 +14365.0 + 31 +0.0 + 0 +LINE + 5 +25B + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +9603.553391 + 30 +0.0 + 11 +5365.0 + 21 +9968.553391 + 31 +0.0 + 0 +LINE + 5 +25C + 8 +0 + 62 + 0 + 10 +10521.446609 + 20 +15125.0 + 30 +0.0 + 11 +10886.446609 + 21 +15490.0 + 31 +0.0 + 0 +LINE + 5 +25D + 8 +0 + 62 + 0 + 10 +9521.446609 + 20 +14125.0 + 30 +0.0 + 11 +10115.0 + 21 +14718.553391 + 31 +0.0 + 0 +LINE + 5 +25E + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +9957.106781 + 30 +0.0 + 11 +5365.0 + 21 +10322.106781 + 31 +0.0 + 0 +LINE + 5 +25F + 8 +0 + 62 + 0 + 10 +10167.893219 + 20 +15125.0 + 30 +0.0 + 11 +10532.893219 + 21 +15490.0 + 31 +0.0 + 0 +LINE + 5 +260 + 8 +0 + 62 + 0 + 10 +9167.893219 + 20 +14125.0 + 30 +0.0 + 11 +9532.893219 + 21 +14490.0 + 31 +0.0 + 0 +LINE + 5 +261 + 8 +0 + 62 + 0 + 10 +9750.0 + 20 +14707.106781 + 30 +0.0 + 11 +10115.0 + 21 +15072.106781 + 31 +0.0 + 0 +LINE + 5 +262 + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +10310.660172 + 30 +0.0 + 11 +5365.0 + 21 +10675.660172 + 31 +0.0 + 0 +LINE + 5 +263 + 8 +0 + 62 + 0 + 10 +9750.0 + 20 +15060.660172 + 30 +0.0 + 11 +10179.339828 + 21 +15490.0 + 31 +0.0 + 0 +LINE + 5 +264 + 8 +0 + 62 + 0 + 10 +8814.339828 + 20 +14125.0 + 30 +0.0 + 11 +9179.339828 + 21 +14490.0 + 31 +0.0 + 0 +LINE + 5 +265 + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +10664.213562 + 30 +0.0 + 11 +5365.0 + 21 +11029.213562 + 31 +0.0 + 0 +LINE + 5 +266 + 8 +0 + 62 + 0 + 10 +9750.0 + 20 +15414.213562 + 30 +0.0 + 11 +10075.786438 + 21 +15740.0 + 31 +0.0 + 0 +LINE + 5 +267 + 8 +0 + 62 + 0 + 10 +8460.786438 + 20 +14125.0 + 30 +0.0 + 11 +8825.786438 + 21 +14490.0 + 31 +0.0 + 0 +LINE + 5 +268 + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +11017.766953 + 30 +0.0 + 11 +5365.0 + 21 +11382.766953 + 31 +0.0 + 0 +LINE + 5 +269 + 8 +0 + 62 + 0 + 10 +8107.233047 + 20 +14125.0 + 30 +0.0 + 11 +8472.233047 + 21 +14490.0 + 31 +0.0 + 0 +LINE + 5 +26A + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +11371.320344 + 30 +0.0 + 11 +5365.0 + 21 +11736.320344 + 31 +0.0 + 0 +LINE + 5 +26B + 8 +0 + 62 + 0 + 10 +7753.679656 + 20 +14125.0 + 30 +0.0 + 11 +8118.679656 + 21 +14490.0 + 31 +0.0 + 0 +LINE + 5 +26C + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +11724.873734 + 30 +0.0 + 11 +5365.0 + 21 +12089.873734 + 31 +0.0 + 0 +LINE + 5 +26D + 8 +0 + 62 + 0 + 10 +7400.126266 + 20 +14125.0 + 30 +0.0 + 11 +7765.126266 + 21 +14490.0 + 31 +0.0 + 0 +LINE + 5 +26E + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +12078.427125 + 30 +0.0 + 11 +5365.0 + 21 +12443.427125 + 31 +0.0 + 0 +LINE + 5 +26F + 8 +0 + 62 + 0 + 10 +7046.572875 + 20 +14125.0 + 30 +0.0 + 11 +7411.572875 + 21 +14490.0 + 31 +0.0 + 0 +LINE + 5 +270 + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +12431.980515 + 30 +0.0 + 11 +5365.0 + 21 +12796.980515 + 31 +0.0 + 0 +LINE + 5 +271 + 8 +0 + 62 + 0 + 10 +6693.019485 + 20 +14125.0 + 30 +0.0 + 11 +7058.019485 + 21 +14490.0 + 31 +0.0 + 0 +LINE + 5 +272 + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +12785.533906 + 30 +0.0 + 11 +5365.0 + 21 +13150.533906 + 31 +0.0 + 0 +LINE + 5 +273 + 8 +0 + 62 + 0 + 10 +6339.466094 + 20 +14125.0 + 30 +0.0 + 11 +6704.466094 + 21 +14490.0 + 31 +0.0 + 0 +LINE + 5 +274 + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +13139.087297 + 30 +0.0 + 11 +5365.0 + 21 +13504.087297 + 31 +0.0 + 0 +LINE + 5 +275 + 8 +0 + 62 + 0 + 10 +5985.912703 + 20 +14125.0 + 30 +0.0 + 11 +6350.912703 + 21 +14490.0 + 31 +0.0 + 0 +LINE + 5 +276 + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +13492.640687 + 30 +0.0 + 11 +5365.0 + 21 +13857.640687 + 31 +0.0 + 0 +LINE + 5 +277 + 8 +0 + 62 + 0 + 10 +5632.359313 + 20 +14125.0 + 30 +0.0 + 11 +5997.359313 + 21 +14490.0 + 31 +0.0 + 0 +LINE + 5 +278 + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +13846.194078 + 30 +0.0 + 11 +5643.805922 + 21 +14490.0 + 31 +0.0 + 0 +LINE + 5 +279 + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +14199.747468 + 30 +0.0 + 11 +5365.0 + 21 +14564.747468 + 31 +0.0 + 0 +LINE + 5 +27A + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +14553.300859 + 30 +0.0 + 11 +5061.699141 + 21 +14615.0 + 31 +0.0 + 0 +LINE + 5 +27B + 8 +0 + 62 + 0 + 10 +7474.873734 + 20 +9250.0 + 30 +0.0 + 11 +7740.0 + 21 +9515.126266 + 31 +0.0 + 0 +LINE + 5 +27C + 8 +0 + 62 + 0 + 10 +13349.873734 + 20 +15125.0 + 30 +0.0 + 11 +13714.873734 + 21 +15490.0 + 31 +0.0 + 0 +LINE + 5 +27D + 8 +0 + 62 + 0 + 10 +13703.427125 + 20 +15125.0 + 30 +0.0 + 11 +14068.427125 + 21 +15490.0 + 31 +0.0 + 0 +LINE + 5 +27E + 8 +0 + 62 + 0 + 10 +14056.980515 + 20 +15125.0 + 30 +0.0 + 11 +14421.980515 + 21 +15490.0 + 31 +0.0 + 0 +LINE + 5 +27F + 8 +0 + 62 + 0 + 10 +14410.533906 + 20 +15125.0 + 30 +0.0 + 11 +14775.533906 + 21 +15490.0 + 31 +0.0 + 0 +LINE + 5 +280 + 8 +0 + 62 + 0 + 10 +14764.087297 + 20 +15125.0 + 30 +0.0 + 11 +15129.087297 + 21 +15490.0 + 31 +0.0 + 0 +LINE + 5 +281 + 8 +0 + 62 + 0 + 10 +15117.640687 + 20 +15125.0 + 30 +0.0 + 11 +15482.640687 + 21 +15490.0 + 31 +0.0 + 0 +LINE + 5 +282 + 8 +0 + 62 + 0 + 10 +15750.0 + 20 +15757.359313 + 30 +0.0 + 11 +15982.640687 + 21 +15990.0 + 31 +0.0 + 0 +LINE + 5 +283 + 8 +0 + 62 + 0 + 10 +15471.194078 + 20 +15125.0 + 30 +0.0 + 11 +16336.194078 + 21 +15990.0 + 31 +0.0 + 0 +LINE + 5 +284 + 8 +0 + 62 + 0 + 10 +15750.0 + 20 +15050.252532 + 30 +0.0 + 11 +16115.0 + 21 +15415.252532 + 31 +0.0 + 0 +LINE + 5 +285 + 8 +0 + 62 + 0 + 10 +16324.747468 + 20 +15625.0 + 30 +0.0 + 11 +16365.0 + 21 +15665.252532 + 31 +0.0 + 0 +LINE + 5 +286 + 8 +0 + 62 + 0 + 10 +16053.300859 + 20 +15000.0 + 30 +0.0 + 11 +16115.0 + 21 +15061.699141 + 31 +0.0 + 0 +ENDBLK + 5 +287 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X15 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X15 + 1 + + 0 +LINE + 5 +289 + 8 +0 + 62 + 0 + 10 +9342.94193 + 20 +22255.0 + 30 +0.0 + 11 +9457.94193 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +28A + 8 +0 + 62 + 0 + 10 +9166.165235 + 20 +22255.0 + 30 +0.0 + 11 +9281.165235 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +28B + 8 +0 + 62 + 0 + 10 +8989.38854 + 20 +22255.0 + 30 +0.0 + 11 +9104.38854 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +28C + 8 +0 + 62 + 0 + 10 +8812.611845 + 20 +22255.0 + 30 +0.0 + 11 +8927.611845 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +28D + 8 +0 + 62 + 0 + 10 +8635.835149 + 20 +22255.0 + 30 +0.0 + 11 +8750.835149 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +28E + 8 +0 + 62 + 0 + 10 +8500.0 + 20 +22295.941546 + 30 +0.0 + 11 +8574.058454 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +28F + 8 +0 + 62 + 0 + 10 +9519.718626 + 20 +22255.0 + 30 +0.0 + 11 +9634.718626 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +290 + 8 +0 + 62 + 0 + 10 +9696.495321 + 20 +22255.0 + 30 +0.0 + 11 +9811.495321 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +291 + 8 +0 + 62 + 0 + 10 +9873.272016 + 20 +22255.0 + 30 +0.0 + 11 +9988.272016 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +292 + 8 +0 + 62 + 0 + 10 +10050.048712 + 20 +22255.0 + 30 +0.0 + 11 +10165.048712 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +293 + 8 +0 + 62 + 0 + 10 +10226.825407 + 20 +22255.0 + 30 +0.0 + 11 +10240.0 + 21 +22268.174593 + 31 +0.0 + 0 +ENDBLK + 5 +294 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X16 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X16 + 1 + + 0 +LINE + 5 +296 + 8 +0 + 62 + 0 + 10 +13585.582618 + 20 +22255.0 + 30 +0.0 + 11 +13700.582618 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +297 + 8 +0 + 62 + 0 + 10 +13408.805922 + 20 +22255.0 + 30 +0.0 + 11 +13523.805922 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +298 + 8 +0 + 62 + 0 + 10 +13232.029227 + 20 +22255.0 + 30 +0.0 + 11 +13347.029227 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +299 + 8 +0 + 62 + 0 + 10 +13055.252532 + 20 +22255.0 + 30 +0.0 + 11 +13170.252532 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +29A + 8 +0 + 62 + 0 + 10 +12878.475836 + 20 +22255.0 + 30 +0.0 + 11 +12993.475836 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +29B + 8 +0 + 62 + 0 + 10 +12701.699141 + 20 +22255.0 + 30 +0.0 + 11 +12816.699141 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +29C + 8 +0 + 62 + 0 + 10 +12524.922446 + 20 +22255.0 + 30 +0.0 + 11 +12639.922446 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +29D + 8 +0 + 62 + 0 + 10 +12348.145751 + 20 +22255.0 + 30 +0.0 + 11 +12463.145751 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +29E + 8 +0 + 62 + 0 + 10 +12171.369055 + 20 +22255.0 + 30 +0.0 + 11 +12286.369055 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +29F + 8 +0 + 62 + 0 + 10 +11994.59236 + 20 +22255.0 + 30 +0.0 + 11 +12109.59236 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2A0 + 8 +0 + 62 + 0 + 10 +11817.815665 + 20 +22255.0 + 30 +0.0 + 11 +11932.815665 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2A1 + 8 +0 + 62 + 0 + 10 +11641.038969 + 20 +22255.0 + 30 +0.0 + 11 +11756.038969 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2A2 + 8 +0 + 62 + 0 + 10 +11464.262274 + 20 +22255.0 + 30 +0.0 + 11 +11579.262274 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2A3 + 8 +0 + 62 + 0 + 10 +11287.485579 + 20 +22255.0 + 30 +0.0 + 11 +11402.485579 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2A4 + 8 +0 + 62 + 0 + 10 +13762.359313 + 20 +22255.0 + 30 +0.0 + 11 +13877.359313 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2A5 + 8 +0 + 62 + 0 + 10 +13939.136008 + 20 +22255.0 + 30 +0.0 + 11 +14054.136008 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2A6 + 8 +0 + 62 + 0 + 10 +14115.912703 + 20 +22255.0 + 30 +0.0 + 11 +14230.912703 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2A7 + 8 +0 + 62 + 0 + 10 +14292.689399 + 20 +22255.0 + 30 +0.0 + 11 +14407.689399 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2A8 + 8 +0 + 62 + 0 + 10 +14469.466094 + 20 +22255.0 + 30 +0.0 + 11 +14584.466094 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2A9 + 8 +0 + 62 + 0 + 10 +14646.242789 + 20 +22255.0 + 30 +0.0 + 11 +14761.242789 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2AA + 8 +0 + 62 + 0 + 10 +14823.019485 + 20 +22255.0 + 30 +0.0 + 11 +14938.019485 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2AB + 8 +0 + 62 + 0 + 10 +14999.79618 + 20 +22255.0 + 30 +0.0 + 11 +15114.79618 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2AC + 8 +0 + 62 + 0 + 10 +15176.572875 + 20 +22255.0 + 30 +0.0 + 11 +15291.572875 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2AD + 8 +0 + 62 + 0 + 10 +15353.349571 + 20 +22255.0 + 30 +0.0 + 11 +15468.349571 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2AE + 8 +0 + 62 + 0 + 10 +15530.126266 + 20 +22255.0 + 30 +0.0 + 11 +15645.126266 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2AF + 8 +0 + 62 + 0 + 10 +15706.902961 + 20 +22255.0 + 30 +0.0 + 11 +15821.902961 + 21 +22370.0 + 31 +0.0 + 0 +ENDBLK + 5 +2B0 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X17 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X17 + 1 + + 0 +LINE + 5 +2B2 + 8 +0 + 62 + 0 + 10 +17828.223305 + 20 +22255.0 + 30 +0.0 + 11 +17943.223305 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2B3 + 8 +0 + 62 + 0 + 10 +17651.446609 + 20 +22255.0 + 30 +0.0 + 11 +17766.446609 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2B4 + 8 +0 + 62 + 0 + 10 +17474.669914 + 20 +22255.0 + 30 +0.0 + 11 +17589.669914 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2B5 + 8 +0 + 62 + 0 + 10 +17297.893219 + 20 +22255.0 + 30 +0.0 + 11 +17412.893219 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2B6 + 8 +0 + 62 + 0 + 10 +17121.116524 + 20 +22255.0 + 30 +0.0 + 11 +17236.116524 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2B7 + 8 +0 + 62 + 0 + 10 +16944.339828 + 20 +22255.0 + 30 +0.0 + 11 +17059.339828 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2B8 + 8 +0 + 62 + 0 + 10 +16875.0 + 20 +22362.436867 + 30 +0.0 + 11 +16882.563133 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2B9 + 8 +0 + 62 + 0 + 10 +18005.0 + 20 +22255.0 + 30 +0.0 + 11 +18120.0 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2BA + 8 +0 + 62 + 0 + 10 +18181.776695 + 20 +22255.0 + 30 +0.0 + 11 +18296.776695 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2BB + 8 +0 + 62 + 0 + 10 +18358.553391 + 20 +22255.0 + 30 +0.0 + 11 +18473.553391 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2BC + 8 +0 + 62 + 0 + 10 +18535.330086 + 20 +22255.0 + 30 +0.0 + 11 +18650.330086 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2BD + 8 +0 + 62 + 0 + 10 +18712.106781 + 20 +22255.0 + 30 +0.0 + 11 +18740.0 + 21 +22282.893219 + 31 +0.0 + 0 +ENDBLK + 5 +2BE + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X18 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X18 + 1 + + 0 +LINE + 5 +2C0 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +19778.378413 + 30 +0.0 + 11 +4860.0 + 21 +19893.378413 + 31 +0.0 + 0 +LINE + 5 +2C1 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +19955.155108 + 30 +0.0 + 11 +4860.0 + 21 +20070.155108 + 31 +0.0 + 0 +LINE + 5 +2C2 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +20131.931804 + 30 +0.0 + 11 +4860.0 + 21 +20246.931804 + 31 +0.0 + 0 +LINE + 5 +2C3 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +20308.708499 + 30 +0.0 + 11 +4860.0 + 21 +20423.708499 + 31 +0.0 + 0 +LINE + 5 +2C4 + 8 +0 + 62 + 0 + 10 +6691.291501 + 20 +22255.0 + 30 +0.0 + 11 +6740.0 + 21 +22303.708499 + 31 +0.0 + 0 +LINE + 5 +2C5 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +20485.485194 + 30 +0.0 + 11 +4860.0 + 21 +20600.485194 + 31 +0.0 + 0 +LINE + 5 +2C6 + 8 +0 + 62 + 0 + 10 +6514.514806 + 20 +22255.0 + 30 +0.0 + 11 +6629.514806 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2C7 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +20662.26189 + 30 +0.0 + 11 +4860.0 + 21 +20777.26189 + 31 +0.0 + 0 +LINE + 5 +2C8 + 8 +0 + 62 + 0 + 10 +6337.73811 + 20 +22255.0 + 30 +0.0 + 11 +6452.73811 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2C9 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +20839.038585 + 30 +0.0 + 11 +4860.0 + 21 +20954.038585 + 31 +0.0 + 0 +LINE + 5 +2CA + 8 +0 + 62 + 0 + 10 +6160.961415 + 20 +22255.0 + 30 +0.0 + 11 +6275.961415 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2CB + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +21015.81528 + 30 +0.0 + 11 +4860.0 + 21 +21130.81528 + 31 +0.0 + 0 +LINE + 5 +2CC + 8 +0 + 62 + 0 + 10 +5984.18472 + 20 +22255.0 + 30 +0.0 + 11 +6099.18472 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2CD + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +21192.591975 + 30 +0.0 + 11 +4860.0 + 21 +21307.591975 + 31 +0.0 + 0 +LINE + 5 +2CE + 8 +0 + 62 + 0 + 10 +5807.408025 + 20 +22255.0 + 30 +0.0 + 11 +5922.408025 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2CF + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +21369.368671 + 30 +0.0 + 11 +4860.0 + 21 +21484.368671 + 31 +0.0 + 0 +LINE + 5 +2D0 + 8 +0 + 62 + 0 + 10 +5630.631329 + 20 +22255.0 + 30 +0.0 + 11 +5745.631329 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2D1 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +21546.145366 + 30 +0.0 + 11 +4860.0 + 21 +21661.145366 + 31 +0.0 + 0 +LINE + 5 +2D2 + 8 +0 + 62 + 0 + 10 +5453.854634 + 20 +22255.0 + 30 +0.0 + 11 +5568.854634 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2D3 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +21722.922061 + 30 +0.0 + 11 +4860.0 + 21 +21837.922061 + 31 +0.0 + 0 +LINE + 5 +2D4 + 8 +0 + 62 + 0 + 10 +5277.077939 + 20 +22255.0 + 30 +0.0 + 11 +5392.077939 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2D5 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +21899.698757 + 30 +0.0 + 11 +4860.0 + 21 +22014.698757 + 31 +0.0 + 0 +LINE + 5 +2D6 + 8 +0 + 62 + 0 + 10 +5100.301243 + 20 +22255.0 + 30 +0.0 + 11 +5215.301243 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2D7 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +22076.475452 + 30 +0.0 + 11 +4860.0 + 21 +22191.475452 + 31 +0.0 + 0 +LINE + 5 +2D8 + 8 +0 + 62 + 0 + 10 +4923.524548 + 20 +22255.0 + 30 +0.0 + 11 +5038.524548 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2D9 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +22253.252147 + 30 +0.0 + 11 +4861.747853 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2DA + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +19601.601718 + 30 +0.0 + 11 +4860.0 + 21 +19716.601718 + 31 +0.0 + 0 +LINE + 5 +2DB + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +19424.825023 + 30 +0.0 + 11 +4860.0 + 21 +19539.825023 + 31 +0.0 + 0 +ENDBLK + 5 +2DC + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X19 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X19 + 1 + + 0 +LINE + 5 +2DE + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +16949.951288 + 30 +0.0 + 11 +4860.0 + 21 +17064.951288 + 31 +0.0 + 0 +LINE + 5 +2DF + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +17126.727984 + 30 +0.0 + 11 +4860.0 + 21 +17241.727984 + 31 +0.0 + 0 +LINE + 5 +2E0 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +17303.504679 + 30 +0.0 + 11 +4860.0 + 21 +17418.504679 + 31 +0.0 + 0 +LINE + 5 +2E1 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +17480.281374 + 30 +0.0 + 11 +4860.0 + 21 +17595.281374 + 31 +0.0 + 0 +LINE + 5 +2E2 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +17657.05807 + 30 +0.0 + 11 +4860.0 + 21 +17772.05807 + 31 +0.0 + 0 +LINE + 5 +2E3 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +17833.834765 + 30 +0.0 + 11 +4860.0 + 21 +17948.834765 + 31 +0.0 + 0 +LINE + 5 +2E4 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +18010.61146 + 30 +0.0 + 11 +4860.0 + 21 +18125.61146 + 31 +0.0 + 0 +LINE + 5 +2E5 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +18187.388155 + 30 +0.0 + 11 +4797.611845 + 21 +18240.0 + 31 +0.0 + 0 +LINE + 5 +2E6 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +16773.174593 + 30 +0.0 + 11 +4860.0 + 21 +16888.174593 + 31 +0.0 + 0 +LINE + 5 +2E7 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +16596.397898 + 30 +0.0 + 11 +4860.0 + 21 +16711.397898 + 31 +0.0 + 0 +LINE + 5 +2E8 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +16419.621202 + 30 +0.0 + 11 +4860.0 + 21 +16534.621202 + 31 +0.0 + 0 +LINE + 5 +2E9 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +16242.844507 + 30 +0.0 + 11 +4860.0 + 21 +16357.844507 + 31 +0.0 + 0 +LINE + 5 +2EA + 8 +0 + 62 + 0 + 10 +4803.932188 + 20 +16125.0 + 30 +0.0 + 11 +4860.0 + 21 +16181.067812 + 31 +0.0 + 0 +ENDBLK + 5 +2EB + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X20 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X20 + 1 + + 0 +LINE + 5 +2ED + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +10232.436867 + 30 +0.0 + 11 +4860.0 + 21 +10347.436867 + 31 +0.0 + 0 +LINE + 5 +2EE + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +10409.213562 + 30 +0.0 + 11 +4860.0 + 21 +10524.213562 + 31 +0.0 + 0 +LINE + 5 +2EF + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +10585.990258 + 30 +0.0 + 11 +4860.0 + 21 +10700.990258 + 31 +0.0 + 0 +LINE + 5 +2F0 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +10762.766953 + 30 +0.0 + 11 +4860.0 + 21 +10877.766953 + 31 +0.0 + 0 +LINE + 5 +2F1 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +10939.543648 + 30 +0.0 + 11 +4860.0 + 21 +11054.543648 + 31 +0.0 + 0 +LINE + 5 +2F2 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +11116.320344 + 30 +0.0 + 11 +4860.0 + 21 +11231.320344 + 31 +0.0 + 0 +LINE + 5 +2F3 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +11293.097039 + 30 +0.0 + 11 +4860.0 + 21 +11408.097039 + 31 +0.0 + 0 +LINE + 5 +2F4 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +11469.873734 + 30 +0.0 + 11 +4860.0 + 21 +11584.873734 + 31 +0.0 + 0 +LINE + 5 +2F5 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +11646.650429 + 30 +0.0 + 11 +4860.0 + 21 +11761.650429 + 31 +0.0 + 0 +LINE + 5 +2F6 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +11823.427125 + 30 +0.0 + 11 +4860.0 + 21 +11938.427125 + 31 +0.0 + 0 +LINE + 5 +2F7 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +12000.20382 + 30 +0.0 + 11 +4860.0 + 21 +12115.20382 + 31 +0.0 + 0 +LINE + 5 +2F8 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +12176.980515 + 30 +0.0 + 11 +4860.0 + 21 +12291.980515 + 31 +0.0 + 0 +LINE + 5 +2F9 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +12353.757211 + 30 +0.0 + 11 +4860.0 + 21 +12468.757211 + 31 +0.0 + 0 +LINE + 5 +2FA + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +12530.533906 + 30 +0.0 + 11 +4860.0 + 21 +12645.533906 + 31 +0.0 + 0 +LINE + 5 +2FB + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +12707.310601 + 30 +0.0 + 11 +4860.0 + 21 +12822.310601 + 31 +0.0 + 0 +LINE + 5 +2FC + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +12884.087297 + 30 +0.0 + 11 +4860.0 + 21 +12999.087297 + 31 +0.0 + 0 +LINE + 5 +2FD + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +13060.863992 + 30 +0.0 + 11 +4860.0 + 21 +13175.863992 + 31 +0.0 + 0 +LINE + 5 +2FE + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +13237.640687 + 30 +0.0 + 11 +4860.0 + 21 +13352.640687 + 31 +0.0 + 0 +LINE + 5 +2FF + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +13414.417382 + 30 +0.0 + 11 +4860.0 + 21 +13529.417382 + 31 +0.0 + 0 +LINE + 5 +300 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +13591.194078 + 30 +0.0 + 11 +4860.0 + 21 +13706.194078 + 31 +0.0 + 0 +LINE + 5 +301 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +13767.970773 + 30 +0.0 + 11 +4860.0 + 21 +13882.970773 + 31 +0.0 + 0 +LINE + 5 +302 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +13944.747468 + 30 +0.0 + 11 +4860.0 + 21 +14059.747468 + 31 +0.0 + 0 +LINE + 5 +303 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +14121.524164 + 30 +0.0 + 11 +4860.0 + 21 +14236.524164 + 31 +0.0 + 0 +LINE + 5 +304 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +14298.300859 + 30 +0.0 + 11 +4860.0 + 21 +14413.300859 + 31 +0.0 + 0 +LINE + 5 +305 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +14475.077554 + 30 +0.0 + 11 +4860.0 + 21 +14590.077554 + 31 +0.0 + 0 +LINE + 5 +306 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +10055.660172 + 30 +0.0 + 11 +4860.0 + 21 +10170.660172 + 31 +0.0 + 0 +LINE + 5 +307 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +9878.883476 + 30 +0.0 + 11 +4860.0 + 21 +9993.883476 + 31 +0.0 + 0 +LINE + 5 +308 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +9702.106781 + 30 +0.0 + 11 +4860.0 + 21 +9817.106781 + 31 +0.0 + 0 +LINE + 5 +309 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +9525.330086 + 30 +0.0 + 11 +4860.0 + 21 +9640.330086 + 31 +0.0 + 0 +LINE + 5 +30A + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +9348.553391 + 30 +0.0 + 11 +4860.0 + 21 +9463.553391 + 31 +0.0 + 0 +LINE + 5 +30B + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +9171.776695 + 30 +0.0 + 11 +4860.0 + 21 +9286.776695 + 31 +0.0 + 0 +LINE + 5 +30C + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +8995.0 + 30 +0.0 + 11 +4860.0 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +30D + 8 +0 + 62 + 0 + 10 +4921.776695 + 20 +8995.0 + 30 +0.0 + 11 +5036.776695 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +30E + 8 +0 + 62 + 0 + 10 +5098.553391 + 20 +8995.0 + 30 +0.0 + 11 +5213.553391 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +30F + 8 +0 + 62 + 0 + 10 +5275.330086 + 20 +8995.0 + 30 +0.0 + 11 +5390.330086 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +310 + 8 +0 + 62 + 0 + 10 +5452.106781 + 20 +8995.0 + 30 +0.0 + 11 +5567.106781 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +311 + 8 +0 + 62 + 0 + 10 +5628.883476 + 20 +8995.0 + 30 +0.0 + 11 +5743.883476 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +312 + 8 +0 + 62 + 0 + 10 +5805.660172 + 20 +8995.0 + 30 +0.0 + 11 +5920.660172 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +313 + 8 +0 + 62 + 0 + 10 +5982.436867 + 20 +8995.0 + 30 +0.0 + 11 +6097.436867 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +314 + 8 +0 + 62 + 0 + 10 +6159.213562 + 20 +8995.0 + 30 +0.0 + 11 +6274.213562 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +315 + 8 +0 + 62 + 0 + 10 +6335.990258 + 20 +8995.0 + 30 +0.0 + 11 +6450.990258 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +316 + 8 +0 + 62 + 0 + 10 +6512.766953 + 20 +8995.0 + 30 +0.0 + 11 +6627.766953 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +317 + 8 +0 + 62 + 0 + 10 +6689.543648 + 20 +8995.0 + 30 +0.0 + 11 +6804.543648 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +318 + 8 +0 + 62 + 0 + 10 +6866.320344 + 20 +8995.0 + 30 +0.0 + 11 +6981.320344 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +319 + 8 +0 + 62 + 0 + 10 +7043.097039 + 20 +8995.0 + 30 +0.0 + 11 +7158.097039 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +31A + 8 +0 + 62 + 0 + 10 +7219.873734 + 20 +8995.0 + 30 +0.0 + 11 +7334.873734 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +31B + 8 +0 + 62 + 0 + 10 +7396.650429 + 20 +8995.0 + 30 +0.0 + 11 +7511.650429 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +31C + 8 +0 + 62 + 0 + 10 +7573.427125 + 20 +8995.0 + 30 +0.0 + 11 +7688.427125 + 21 +9110.0 + 31 +0.0 + 0 +ENDBLK + 5 +31D + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X21 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X21 + 1 + + 0 +LINE + 5 +31F + 8 +0 + 62 + 0 + 10 +9164.417382 + 20 +8995.0 + 30 +0.0 + 11 +9279.417382 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +320 + 8 +0 + 62 + 0 + 10 +8987.640687 + 20 +8995.0 + 30 +0.0 + 11 +9102.640687 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +321 + 8 +0 + 62 + 0 + 10 +8810.863992 + 20 +8995.0 + 30 +0.0 + 11 +8925.863992 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +322 + 8 +0 + 62 + 0 + 10 +9341.194078 + 20 +8995.0 + 30 +0.0 + 11 +9456.194078 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +323 + 8 +0 + 62 + 0 + 10 +9517.970773 + 20 +8995.0 + 30 +0.0 + 11 +9632.970773 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +324 + 8 +0 + 62 + 0 + 10 +9694.747468 + 20 +8995.0 + 30 +0.0 + 11 +9809.747468 + 21 +9110.0 + 31 +0.0 + 0 +ENDBLK + 5 +325 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X22 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X22 + 1 + + 0 +LINE + 5 +327 + 8 +0 + 62 + 0 + 10 +13583.834765 + 20 +8995.0 + 30 +0.0 + 11 +13698.834765 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +328 + 8 +0 + 62 + 0 + 10 +13407.05807 + 20 +8995.0 + 30 +0.0 + 11 +13522.05807 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +329 + 8 +0 + 62 + 0 + 10 +13230.281374 + 20 +8995.0 + 30 +0.0 + 11 +13345.281374 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +32A + 8 +0 + 62 + 0 + 10 +13053.504679 + 20 +8995.0 + 30 +0.0 + 11 +13168.504679 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +32B + 8 +0 + 62 + 0 + 10 +12876.727984 + 20 +8995.0 + 30 +0.0 + 11 +12991.727984 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +32C + 8 +0 + 62 + 0 + 10 +12699.951288 + 20 +8995.0 + 30 +0.0 + 11 +12814.951288 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +32D + 8 +0 + 62 + 0 + 10 +12523.174593 + 20 +8995.0 + 30 +0.0 + 11 +12638.174593 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +32E + 8 +0 + 62 + 0 + 10 +12346.397898 + 20 +8995.0 + 30 +0.0 + 11 +12461.397898 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +32F + 8 +0 + 62 + 0 + 10 +12169.621202 + 20 +8995.0 + 30 +0.0 + 11 +12284.621202 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +330 + 8 +0 + 62 + 0 + 10 +11992.844507 + 20 +8995.0 + 30 +0.0 + 11 +12107.844507 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +331 + 8 +0 + 62 + 0 + 10 +11816.067812 + 20 +8995.0 + 30 +0.0 + 11 +11931.067812 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +332 + 8 +0 + 62 + 0 + 10 +11639.291117 + 20 +8995.0 + 30 +0.0 + 11 +11754.291117 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +333 + 8 +0 + 62 + 0 + 10 +11462.514421 + 20 +8995.0 + 30 +0.0 + 11 +11577.514421 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +334 + 8 +0 + 62 + 0 + 10 +11285.737726 + 20 +8995.0 + 30 +0.0 + 11 +11400.737726 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +335 + 8 +0 + 62 + 0 + 10 +13760.61146 + 20 +8995.0 + 30 +0.0 + 11 +13875.61146 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +336 + 8 +0 + 62 + 0 + 10 +13937.388155 + 20 +8995.0 + 30 +0.0 + 11 +14052.388155 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +337 + 8 +0 + 62 + 0 + 10 +14114.164851 + 20 +8995.0 + 30 +0.0 + 11 +14229.164851 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +338 + 8 +0 + 62 + 0 + 10 +14290.941546 + 20 +8995.0 + 30 +0.0 + 11 +14405.941546 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +339 + 8 +0 + 62 + 0 + 10 +14467.718241 + 20 +8995.0 + 30 +0.0 + 11 +14582.718241 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +33A + 8 +0 + 62 + 0 + 10 +14644.494937 + 20 +8995.0 + 30 +0.0 + 11 +14759.494937 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +33B + 8 +0 + 62 + 0 + 10 +14821.271632 + 20 +8995.0 + 30 +0.0 + 11 +14936.271632 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +33C + 8 +0 + 62 + 0 + 10 +14998.048327 + 20 +8995.0 + 30 +0.0 + 11 +15113.048327 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +33D + 8 +0 + 62 + 0 + 10 +15174.825023 + 20 +8995.0 + 30 +0.0 + 11 +15289.825023 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +33E + 8 +0 + 62 + 0 + 10 +15351.601718 + 20 +8995.0 + 30 +0.0 + 11 +15466.601718 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +33F + 8 +0 + 62 + 0 + 10 +15528.378413 + 20 +8995.0 + 30 +0.0 + 11 +15643.378413 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +340 + 8 +0 + 62 + 0 + 10 +15705.155108 + 20 +8995.0 + 30 +0.0 + 11 +15820.155108 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +341 + 8 +0 + 62 + 0 + 10 +15881.931804 + 20 +8995.0 + 30 +0.0 + 11 +15996.931804 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +342 + 8 +0 + 62 + 0 + 10 +16058.708499 + 20 +8995.0 + 30 +0.0 + 11 +16115.0 + 21 +9051.291501 + 31 +0.0 + 0 +ENDBLK + 5 +343 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X23 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X23 + 1 + + 0 +LINE + 5 +345 + 8 +0 + 62 + 0 + 10 +17826.475452 + 20 +8995.0 + 30 +0.0 + 11 +17941.475452 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +346 + 8 +0 + 62 + 0 + 10 +17649.698757 + 20 +8995.0 + 30 +0.0 + 11 +17764.698757 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +347 + 8 +0 + 62 + 0 + 10 +17472.922061 + 20 +8995.0 + 30 +0.0 + 11 +17587.922061 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +348 + 8 +0 + 62 + 0 + 10 +17375.0 + 20 +9073.854634 + 30 +0.0 + 11 +17411.145366 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +349 + 8 +0 + 62 + 0 + 10 +18003.252147 + 20 +8995.0 + 30 +0.0 + 11 +18118.252147 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +34A + 8 +0 + 62 + 0 + 10 +18180.028843 + 20 +8995.0 + 30 +0.0 + 11 +18295.028843 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +34B + 8 +0 + 62 + 0 + 10 +18356.805538 + 20 +8995.0 + 30 +0.0 + 11 +18471.805538 + 21 +9110.0 + 31 +0.0 + 0 +ENDBLK + 5 +34C + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X24 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X24 + 1 + + 0 +LINE + 5 +34E + 8 +0 + 62 + 0 + 10 +20654.902577 + 20 +8995.0 + 30 +0.0 + 11 +20769.902577 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +34F + 8 +0 + 62 + 0 + 10 +20478.125881 + 20 +8995.0 + 30 +0.0 + 11 +20593.125881 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +350 + 8 +0 + 62 + 0 + 10 +20375.0 + 20 +9068.650814 + 30 +0.0 + 11 +20416.349186 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +351 + 8 +0 + 62 + 0 + 10 +20831.679272 + 20 +8995.0 + 30 +0.0 + 11 +20946.679272 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +352 + 8 +0 + 62 + 0 + 10 +21008.455967 + 20 +8995.0 + 30 +0.0 + 11 +21123.455967 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +353 + 8 +0 + 62 + 0 + 10 +21185.232663 + 20 +8995.0 + 30 +0.0 + 11 +21300.232663 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +354 + 8 +0 + 62 + 0 + 10 +21362.009358 + 20 +8995.0 + 30 +0.0 + 11 +21365.0 + 21 +8997.990642 + 31 +0.0 + 0 +ENDBLK + 5 +355 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X25 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X25 + 1 + + 0 +LINE + 5 +357 + 8 +0 + 62 + 0 + 10 +22422.66953 + 20 +8995.0 + 30 +0.0 + 11 +22537.66953 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +358 + 8 +0 + 62 + 0 + 10 +22245.892834 + 20 +8995.0 + 30 +0.0 + 11 +22360.892834 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +359 + 8 +0 + 62 + 0 + 10 +22069.116139 + 20 +8995.0 + 30 +0.0 + 11 +22184.116139 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +35A + 8 +0 + 62 + 0 + 10 +21892.339444 + 20 +8995.0 + 30 +0.0 + 11 +22007.339444 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +35B + 8 +0 + 62 + 0 + 10 +22599.446225 + 20 +8995.0 + 30 +0.0 + 11 +22714.446225 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +35C + 8 +0 + 62 + 0 + 10 +22776.22292 + 20 +8995.0 + 30 +0.0 + 11 +22891.22292 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +35D + 8 +0 + 62 + 0 + 10 +22952.999616 + 20 +8995.0 + 30 +0.0 + 11 +23067.999616 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +35E + 8 +0 + 62 + 0 + 10 +23129.776311 + 20 +8995.0 + 30 +0.0 + 11 +23240.0 + 21 +9105.223689 + 31 +0.0 + 0 +ENDBLK + 5 +35F + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X26 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X26 + 1 + + 0 +LINE + 5 +361 + 8 +0 + 62 + 0 + 10 +21363.757211 + 20 +22255.0 + 30 +0.0 + 11 +21478.757211 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +362 + 8 +0 + 62 + 0 + 10 +21186.980515 + 20 +22255.0 + 30 +0.0 + 11 +21301.980515 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +363 + 8 +0 + 62 + 0 + 10 +21010.20382 + 20 +22255.0 + 30 +0.0 + 11 +21125.20382 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +364 + 8 +0 + 62 + 0 + 10 +20833.427125 + 20 +22255.0 + 30 +0.0 + 11 +20948.427125 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +365 + 8 +0 + 62 + 0 + 10 +20656.650429 + 20 +22255.0 + 30 +0.0 + 11 +20771.650429 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +366 + 8 +0 + 62 + 0 + 10 +20479.873734 + 20 +22255.0 + 30 +0.0 + 11 +20594.873734 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +367 + 8 +0 + 62 + 0 + 10 +20303.097039 + 20 +22255.0 + 30 +0.0 + 11 +20418.097039 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +368 + 8 +0 + 62 + 0 + 10 +20126.320344 + 20 +22255.0 + 30 +0.0 + 11 +20241.320344 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +369 + 8 +0 + 62 + 0 + 10 +19949.543648 + 20 +22255.0 + 30 +0.0 + 11 +20064.543648 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +36A + 8 +0 + 62 + 0 + 10 +19772.766953 + 20 +22255.0 + 30 +0.0 + 11 +19887.766953 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +36B + 8 +0 + 62 + 0 + 10 +21540.533906 + 20 +22255.0 + 30 +0.0 + 11 +21655.533906 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +36C + 8 +0 + 62 + 0 + 10 +21717.310601 + 20 +22255.0 + 30 +0.0 + 11 +21832.310601 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +36D + 8 +0 + 62 + 0 + 10 +21894.087297 + 20 +22255.0 + 30 +0.0 + 11 +22009.087297 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +36E + 8 +0 + 62 + 0 + 10 +22070.863992 + 20 +22255.0 + 30 +0.0 + 11 +22185.863992 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +36F + 8 +0 + 62 + 0 + 10 +22247.640687 + 20 +22255.0 + 30 +0.0 + 11 +22362.640687 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +370 + 8 +0 + 62 + 0 + 10 +22424.417382 + 20 +22255.0 + 30 +0.0 + 11 +22539.417382 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +371 + 8 +0 + 62 + 0 + 10 +22601.194078 + 20 +22255.0 + 30 +0.0 + 11 +22716.194078 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +372 + 8 +0 + 62 + 0 + 10 +22777.970773 + 20 +22255.0 + 30 +0.0 + 11 +22892.970773 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +373 + 8 +0 + 62 + 0 + 10 +22954.747468 + 20 +22255.0 + 30 +0.0 + 11 +23069.747468 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +374 + 8 +0 + 62 + 0 + 10 +23131.524164 + 20 +22255.0 + 30 +0.0 + 11 +23246.524164 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +375 + 8 +0 + 62 + 0 + 10 +23308.300859 + 20 +22255.0 + 30 +0.0 + 11 +23365.0 + 21 +22311.699141 + 31 +0.0 + 0 +ENDBLK + 5 +376 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X27 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X27 + 1 + + 0 +LINE + 5 +378 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +21230.505063 + 30 +0.0 + 11 +26995.0 + 21 +21345.505063 + 31 +0.0 + 0 +LINE + 5 +379 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +21407.281759 + 30 +0.0 + 11 +26995.0 + 21 +21522.281759 + 31 +0.0 + 0 +LINE + 5 +37A + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +21584.058454 + 30 +0.0 + 11 +26995.0 + 21 +21699.058454 + 31 +0.0 + 0 +LINE + 5 +37B + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +21760.835149 + 30 +0.0 + 11 +26995.0 + 21 +21875.835149 + 31 +0.0 + 0 +LINE + 5 +37C + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +21937.611845 + 30 +0.0 + 11 +26995.0 + 21 +22052.611845 + 31 +0.0 + 0 +LINE + 5 +37D + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +22114.38854 + 30 +0.0 + 11 +26995.0 + 21 +22229.38854 + 31 +0.0 + 0 +LINE + 5 +37E + 8 +0 + 62 + 0 + 10 +26843.834765 + 20 +22255.0 + 30 +0.0 + 11 +26958.834765 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +37F + 8 +0 + 62 + 0 + 10 +26667.05807 + 20 +22255.0 + 30 +0.0 + 11 +26782.05807 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +380 + 8 +0 + 62 + 0 + 10 +26490.281374 + 20 +22255.0 + 30 +0.0 + 11 +26605.281374 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +381 + 8 +0 + 62 + 0 + 10 +26313.504679 + 20 +22255.0 + 30 +0.0 + 11 +26428.504679 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +382 + 8 +0 + 62 + 0 + 10 +26136.727984 + 20 +22255.0 + 30 +0.0 + 11 +26251.727984 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +383 + 8 +0 + 62 + 0 + 10 +25959.951288 + 20 +22255.0 + 30 +0.0 + 11 +26074.951288 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +384 + 8 +0 + 62 + 0 + 10 +25783.174593 + 20 +22255.0 + 30 +0.0 + 11 +25898.174593 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +385 + 8 +0 + 62 + 0 + 10 +25606.397898 + 20 +22255.0 + 30 +0.0 + 11 +25721.397898 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +386 + 8 +0 + 62 + 0 + 10 +25429.621202 + 20 +22255.0 + 30 +0.0 + 11 +25544.621202 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +387 + 8 +0 + 62 + 0 + 10 +25252.844507 + 20 +22255.0 + 30 +0.0 + 11 +25367.844507 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +388 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +21053.728368 + 30 +0.0 + 11 +26995.0 + 21 +21168.728368 + 31 +0.0 + 0 +LINE + 5 +389 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +20876.951673 + 30 +0.0 + 11 +26995.0 + 21 +20991.951673 + 31 +0.0 + 0 +LINE + 5 +38A + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +20700.174977 + 30 +0.0 + 11 +26995.0 + 21 +20815.174977 + 31 +0.0 + 0 +LINE + 5 +38B + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +20523.398282 + 30 +0.0 + 11 +26995.0 + 21 +20638.398282 + 31 +0.0 + 0 +LINE + 5 +38C + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +20346.621587 + 30 +0.0 + 11 +26995.0 + 21 +20461.621587 + 31 +0.0 + 0 +LINE + 5 +38D + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +20169.844892 + 30 +0.0 + 11 +26995.0 + 21 +20284.844892 + 31 +0.0 + 0 +LINE + 5 +38E + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +19993.068196 + 30 +0.0 + 11 +26995.0 + 21 +20108.068196 + 31 +0.0 + 0 +LINE + 5 +38F + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +19816.291501 + 30 +0.0 + 11 +26995.0 + 21 +19931.291501 + 31 +0.0 + 0 +LINE + 5 +390 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +19639.514806 + 30 +0.0 + 11 +26995.0 + 21 +19754.514806 + 31 +0.0 + 0 +LINE + 5 +391 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +19462.73811 + 30 +0.0 + 11 +26995.0 + 21 +19577.73811 + 31 +0.0 + 0 +LINE + 5 +392 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +19285.961415 + 30 +0.0 + 11 +26995.0 + 21 +19400.961415 + 31 +0.0 + 0 +LINE + 5 +393 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +19109.18472 + 30 +0.0 + 11 +26995.0 + 21 +19224.18472 + 31 +0.0 + 0 +LINE + 5 +394 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +18932.408025 + 30 +0.0 + 11 +26995.0 + 21 +19047.408025 + 31 +0.0 + 0 +LINE + 5 +395 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +18755.631329 + 30 +0.0 + 11 +26995.0 + 21 +18870.631329 + 31 +0.0 + 0 +LINE + 5 +396 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +18578.854634 + 30 +0.0 + 11 +26995.0 + 21 +18693.854634 + 31 +0.0 + 0 +LINE + 5 +397 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +18402.077939 + 30 +0.0 + 11 +26995.0 + 21 +18517.077939 + 31 +0.0 + 0 +ENDBLK + 5 +398 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X28 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X28 + 1 + + 0 +LINE + 5 +39A + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +14866.544033 + 30 +0.0 + 11 +26995.0 + 21 +14981.544033 + 31 +0.0 + 0 +LINE + 5 +39B + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +15043.320728 + 30 +0.0 + 11 +26995.0 + 21 +15158.320728 + 31 +0.0 + 0 +LINE + 5 +39C + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +15220.097423 + 30 +0.0 + 11 +26995.0 + 21 +15335.097423 + 31 +0.0 + 0 +LINE + 5 +39D + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +15396.874119 + 30 +0.0 + 11 +26995.0 + 21 +15511.874119 + 31 +0.0 + 0 +LINE + 5 +39E + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +15573.650814 + 30 +0.0 + 11 +26995.0 + 21 +15688.650814 + 31 +0.0 + 0 +LINE + 5 +39F + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +15750.427509 + 30 +0.0 + 11 +26995.0 + 21 +15865.427509 + 31 +0.0 + 0 +LINE + 5 +3A0 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +15927.204204 + 30 +0.0 + 11 +26995.0 + 21 +16042.204204 + 31 +0.0 + 0 +LINE + 5 +3A1 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +16103.9809 + 30 +0.0 + 11 +26995.0 + 21 +16218.9809 + 31 +0.0 + 0 +LINE + 5 +3A2 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +16280.757595 + 30 +0.0 + 11 +26995.0 + 21 +16395.757595 + 31 +0.0 + 0 +LINE + 5 +3A3 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +16457.53429 + 30 +0.0 + 11 +26995.0 + 21 +16572.53429 + 31 +0.0 + 0 +LINE + 5 +3A4 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +16634.310986 + 30 +0.0 + 11 +26995.0 + 21 +16749.310986 + 31 +0.0 + 0 +LINE + 5 +3A5 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +16811.087681 + 30 +0.0 + 11 +26995.0 + 21 +16926.087681 + 31 +0.0 + 0 +LINE + 5 +3A6 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +16987.864376 + 30 +0.0 + 11 +26995.0 + 21 +17102.864376 + 31 +0.0 + 0 +LINE + 5 +3A7 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +17164.641072 + 30 +0.0 + 11 +26995.0 + 21 +17279.641072 + 31 +0.0 + 0 +LINE + 5 +3A8 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +17341.417767 + 30 +0.0 + 11 +26995.0 + 21 +17456.417767 + 31 +0.0 + 0 +LINE + 5 +3A9 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +17518.194462 + 30 +0.0 + 11 +26995.0 + 21 +17633.194462 + 31 +0.0 + 0 +LINE + 5 +3AA + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +17694.971157 + 30 +0.0 + 11 +26925.028843 + 21 +17740.0 + 31 +0.0 + 0 +LINE + 5 +3AB + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +14689.767337 + 30 +0.0 + 11 +26995.0 + 21 +14804.767337 + 31 +0.0 + 0 +LINE + 5 +3AC + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +14512.990642 + 30 +0.0 + 11 +26995.0 + 21 +14627.990642 + 31 +0.0 + 0 +LINE + 5 +3AD + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +14336.213947 + 30 +0.0 + 11 +26995.0 + 21 +14451.213947 + 31 +0.0 + 0 +LINE + 5 +3AE + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +14159.437252 + 30 +0.0 + 11 +26995.0 + 21 +14274.437252 + 31 +0.0 + 0 +LINE + 5 +3AF + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +13982.660556 + 30 +0.0 + 11 +26995.0 + 21 +14097.660556 + 31 +0.0 + 0 +LINE + 5 +3B0 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +13805.883861 + 30 +0.0 + 11 +26995.0 + 21 +13920.883861 + 31 +0.0 + 0 +LINE + 5 +3B1 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +13629.107166 + 30 +0.0 + 11 +26995.0 + 21 +13744.107166 + 31 +0.0 + 0 +LINE + 5 +3B2 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +13452.33047 + 30 +0.0 + 11 +26995.0 + 21 +13567.33047 + 31 +0.0 + 0 +LINE + 5 +3B3 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +13275.553775 + 30 +0.0 + 11 +26995.0 + 21 +13390.553775 + 31 +0.0 + 0 +LINE + 5 +3B4 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +13098.77708 + 30 +0.0 + 11 +26995.0 + 21 +13213.77708 + 31 +0.0 + 0 +LINE + 5 +3B5 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +12922.000384 + 30 +0.0 + 11 +26995.0 + 21 +13037.000384 + 31 +0.0 + 0 +LINE + 5 +3B6 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +12745.223689 + 30 +0.0 + 11 +26995.0 + 21 +12860.223689 + 31 +0.0 + 0 +LINE + 5 +3B7 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +12568.446994 + 30 +0.0 + 11 +26995.0 + 21 +12683.446994 + 31 +0.0 + 0 +LINE + 5 +3B8 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +12391.670299 + 30 +0.0 + 11 +26995.0 + 21 +12506.670299 + 31 +0.0 + 0 +LINE + 5 +3B9 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +12214.893603 + 30 +0.0 + 11 +26995.0 + 21 +12329.893603 + 31 +0.0 + 0 +LINE + 5 +3BA + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +12038.116908 + 30 +0.0 + 11 +26995.0 + 21 +12153.116908 + 31 +0.0 + 0 +ENDBLK + 5 +3BB + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X29 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X29 + 1 + + 0 +LINE + 5 +3BD + 8 +0 + 62 + 0 + 10 +25427.87335 + 20 +8995.0 + 30 +0.0 + 11 +25542.87335 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +3BE + 8 +0 + 62 + 0 + 10 +25604.650045 + 20 +8995.0 + 30 +0.0 + 11 +25719.650045 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +3BF + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +10270.349955 + 30 +0.0 + 11 +26974.650045 + 21 +10365.0 + 31 +0.0 + 0 +LINE + 5 +3C0 + 8 +0 + 62 + 0 + 10 +25781.42674 + 20 +8995.0 + 30 +0.0 + 11 +25896.42674 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +3C1 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +10093.57326 + 30 +0.0 + 11 +26995.0 + 21 +10208.57326 + 31 +0.0 + 0 +LINE + 5 +3C2 + 8 +0 + 62 + 0 + 10 +25958.203436 + 20 +8995.0 + 30 +0.0 + 11 +26073.203436 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +3C3 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +9916.796564 + 30 +0.0 + 11 +26995.0 + 21 +10031.796564 + 31 +0.0 + 0 +LINE + 5 +3C4 + 8 +0 + 62 + 0 + 10 +26134.980131 + 20 +8995.0 + 30 +0.0 + 11 +26249.980131 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +3C5 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +9740.019869 + 30 +0.0 + 11 +26995.0 + 21 +9855.019869 + 31 +0.0 + 0 +LINE + 5 +3C6 + 8 +0 + 62 + 0 + 10 +26311.756826 + 20 +8995.0 + 30 +0.0 + 11 +26426.756826 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +3C7 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +9563.243174 + 30 +0.0 + 11 +26995.0 + 21 +9678.243174 + 31 +0.0 + 0 +LINE + 5 +3C8 + 8 +0 + 62 + 0 + 10 +26488.533521 + 20 +8995.0 + 30 +0.0 + 11 +26603.533521 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +3C9 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +9386.466479 + 30 +0.0 + 11 +26995.0 + 21 +9501.466479 + 31 +0.0 + 0 +LINE + 5 +3CA + 8 +0 + 62 + 0 + 10 +26665.310217 + 20 +8995.0 + 30 +0.0 + 11 +26780.310217 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +3CB + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +9209.689783 + 30 +0.0 + 11 +26995.0 + 21 +9324.689783 + 31 +0.0 + 0 +LINE + 5 +3CC + 8 +0 + 62 + 0 + 10 +26842.086912 + 20 +8995.0 + 30 +0.0 + 11 +26995.0 + 21 +9147.913088 + 31 +0.0 + 0 +ENDBLK + 5 +3CD + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X30 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X30 + 1 + + 0 +LINE + 5 +3CF + 8 +0 + 62 + 0 + 10 +21332.26189 + 20 +13915.0 + 30 +0.0 + 11 +21457.26189 + 21 +14040.0 + 31 +0.0 + 0 +LINE + 5 +3D0 + 8 +0 + 62 + 0 + 10 +21240.0 + 20 +13999.514806 + 30 +0.0 + 11 +21280.485194 + 21 +14040.0 + 31 +0.0 + 0 +LINE + 5 +3D1 + 8 +0 + 62 + 0 + 10 +21509.038585 + 20 +13915.0 + 30 +0.0 + 11 +21565.0 + 21 +13970.961415 + 31 +0.0 + 0 +LINE + 5 +3D2 + 8 +0 + 62 + 0 + 10 +21371.42674 + 20 +13915.0 + 30 +0.0 + 11 +21246.42674 + 21 +14040.0 + 31 +0.0 + 0 +LINE + 5 +3D3 + 8 +0 + 62 + 0 + 10 +21548.203436 + 20 +13915.0 + 30 +0.0 + 11 +21423.203436 + 21 +14040.0 + 31 +0.0 + 0 +ENDBLK + 5 +3D4 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X31 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X31 + 1 + + 0 +LINE + 5 +3D6 + 8 +0 + 62 + 0 + 10 +22850.0 + 20 +15432.73811 + 30 +0.0 + 11 +22975.0 + 21 +15557.73811 + 31 +0.0 + 0 +LINE + 5 +3D7 + 8 +0 + 62 + 0 + 10 +22850.0 + 20 +15609.514806 + 30 +0.0 + 11 +22865.485194 + 21 +15625.0 + 31 +0.0 + 0 +LINE + 5 +3D8 + 8 +0 + 62 + 0 + 10 +22850.0 + 20 +15255.961415 + 30 +0.0 + 11 +22975.0 + 21 +15380.961415 + 31 +0.0 + 0 +LINE + 5 +3D9 + 8 +0 + 62 + 0 + 10 +22975.0 + 20 +15316.63056 + 30 +0.0 + 11 +22850.0 + 21 +15441.63056 + 31 +0.0 + 0 +LINE + 5 +3DA + 8 +0 + 62 + 0 + 10 +22889.853865 + 20 +15225.0 + 30 +0.0 + 11 +22850.0 + 21 +15264.853865 + 31 +0.0 + 0 +LINE + 5 +3DB + 8 +0 + 62 + 0 + 10 +22975.0 + 20 +15493.407256 + 30 +0.0 + 11 +22850.0 + 21 +15618.407256 + 31 +0.0 + 0 +ENDBLK + 5 +3DC + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X32 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X32 + 1 + + 0 +LINE + 5 +3DE + 8 +0 + 62 + 0 + 10 +22850.0 + 20 +12250.757595 + 30 +0.0 + 11 +22975.0 + 21 +12375.757595 + 31 +0.0 + 0 +LINE + 5 +3DF + 8 +0 + 62 + 0 + 10 +22850.0 + 20 +12427.53429 + 30 +0.0 + 11 +22975.0 + 21 +12552.53429 + 31 +0.0 + 0 +LINE + 5 +3E0 + 8 +0 + 62 + 0 + 10 +22850.0 + 20 +12604.310986 + 30 +0.0 + 11 +22975.0 + 21 +12729.310986 + 31 +0.0 + 0 +LINE + 5 +3E1 + 8 +0 + 62 + 0 + 10 +22850.0 + 20 +12781.087681 + 30 +0.0 + 11 +22975.0 + 21 +12906.087681 + 31 +0.0 + 0 +LINE + 5 +3E2 + 8 +0 + 62 + 0 + 10 +22850.0 + 20 +12957.864376 + 30 +0.0 + 11 +22975.0 + 21 +13082.864376 + 31 +0.0 + 0 +LINE + 5 +3E3 + 8 +0 + 62 + 0 + 10 +22850.0 + 20 +13134.641072 + 30 +0.0 + 11 +22975.0 + 21 +13259.641072 + 31 +0.0 + 0 +LINE + 5 +3E4 + 8 +0 + 62 + 0 + 10 +22850.0 + 20 +13311.417767 + 30 +0.0 + 11 +22975.0 + 21 +13436.417767 + 31 +0.0 + 0 +LINE + 5 +3E5 + 8 +0 + 62 + 0 + 10 +22850.0 + 20 +13488.194462 + 30 +0.0 + 11 +22975.0 + 21 +13613.194462 + 31 +0.0 + 0 +LINE + 5 +3E6 + 8 +0 + 62 + 0 + 10 +22850.0 + 20 +13664.971157 + 30 +0.0 + 11 +22975.0 + 21 +13789.971157 + 31 +0.0 + 0 +LINE + 5 +3E7 + 8 +0 + 62 + 0 + 10 +22850.0 + 20 +13841.747853 + 30 +0.0 + 11 +22975.0 + 21 +13966.747853 + 31 +0.0 + 0 +LINE + 5 +3E8 + 8 +0 + 62 + 0 + 10 +22746.475452 + 20 +13915.0 + 30 +0.0 + 11 +22975.0 + 21 +14143.524548 + 31 +0.0 + 0 +LINE + 5 +3E9 + 8 +0 + 62 + 0 + 10 +22569.698757 + 20 +13915.0 + 30 +0.0 + 11 +22694.698757 + 21 +14040.0 + 31 +0.0 + 0 +LINE + 5 +3EA + 8 +0 + 62 + 0 + 10 +22850.0 + 20 +14195.301243 + 30 +0.0 + 11 +22975.0 + 21 +14320.301243 + 31 +0.0 + 0 +LINE + 5 +3EB + 8 +0 + 62 + 0 + 10 +22450.0 + 20 +13972.077939 + 30 +0.0 + 11 +22517.922061 + 21 +14040.0 + 31 +0.0 + 0 +LINE + 5 +3EC + 8 +0 + 62 + 0 + 10 +22850.0 + 20 +12073.9809 + 30 +0.0 + 11 +22975.0 + 21 +12198.9809 + 31 +0.0 + 0 +LINE + 5 +3ED + 8 +0 + 62 + 0 + 10 +22850.0 + 20 +11897.204204 + 30 +0.0 + 11 +22975.0 + 21 +12022.204204 + 31 +0.0 + 0 +LINE + 5 +3EE + 8 +0 + 62 + 0 + 10 +22850.0 + 20 +11720.427509 + 30 +0.0 + 11 +22975.0 + 21 +11845.427509 + 31 +0.0 + 0 +LINE + 5 +3EF + 8 +0 + 62 + 0 + 10 +22850.0 + 20 +11543.650814 + 30 +0.0 + 11 +22975.0 + 21 +11668.650814 + 31 +0.0 + 0 +LINE + 5 +3F0 + 8 +0 + 62 + 0 + 10 +22850.0 + 20 +11366.874119 + 30 +0.0 + 11 +22975.0 + 21 +11491.874119 + 31 +0.0 + 0 +LINE + 5 +3F1 + 8 +0 + 62 + 0 + 10 +22850.0 + 20 +11190.097423 + 30 +0.0 + 11 +22975.0 + 21 +11315.097423 + 31 +0.0 + 0 +LINE + 5 +3F2 + 8 +0 + 62 + 0 + 10 +22850.0 + 20 +11013.320728 + 30 +0.0 + 11 +22975.0 + 21 +11138.320728 + 31 +0.0 + 0 +LINE + 5 +3F3 + 8 +0 + 62 + 0 + 10 +22850.0 + 20 +10836.544033 + 30 +0.0 + 11 +22975.0 + 21 +10961.544033 + 31 +0.0 + 0 +LINE + 5 +3F4 + 8 +0 + 62 + 0 + 10 +22850.0 + 20 +10659.767337 + 30 +0.0 + 11 +22975.0 + 21 +10784.767337 + 31 +0.0 + 0 +LINE + 5 +3F5 + 8 +0 + 62 + 0 + 10 +22850.0 + 20 +10482.990642 + 30 +0.0 + 11 +22975.0 + 21 +10607.990642 + 31 +0.0 + 0 +LINE + 5 +3F6 + 8 +0 + 62 + 0 + 10 +22850.0 + 20 +10306.213947 + 30 +0.0 + 11 +22975.0 + 21 +10431.213947 + 31 +0.0 + 0 +LINE + 5 +3F7 + 8 +0 + 62 + 0 + 10 +22850.0 + 20 +10129.437252 + 30 +0.0 + 11 +22975.0 + 21 +10254.437252 + 31 +0.0 + 0 +LINE + 5 +3F8 + 8 +0 + 62 + 0 + 10 +22850.0 + 20 +9952.660556 + 30 +0.0 + 11 +22975.0 + 21 +10077.660556 + 31 +0.0 + 0 +LINE + 5 +3F9 + 8 +0 + 62 + 0 + 10 +22850.0 + 20 +9775.883861 + 30 +0.0 + 11 +22975.0 + 21 +9900.883861 + 31 +0.0 + 0 +LINE + 5 +3FA + 8 +0 + 62 + 0 + 10 +22865.892834 + 20 +9615.0 + 30 +0.0 + 11 +22975.0 + 21 +9724.107166 + 31 +0.0 + 0 +LINE + 5 +3FB + 8 +0 + 62 + 0 + 10 +22975.0 + 20 +11604.319959 + 30 +0.0 + 11 +22850.0 + 21 +11729.319959 + 31 +0.0 + 0 +LINE + 5 +3FC + 8 +0 + 62 + 0 + 10 +22975.0 + 20 +11427.543264 + 30 +0.0 + 11 +22850.0 + 21 +11552.543264 + 31 +0.0 + 0 +LINE + 5 +3FD + 8 +0 + 62 + 0 + 10 +22975.0 + 20 +11250.766569 + 30 +0.0 + 11 +22850.0 + 21 +11375.766569 + 31 +0.0 + 0 +LINE + 5 +3FE + 8 +0 + 62 + 0 + 10 +22975.0 + 20 +11073.989873 + 30 +0.0 + 11 +22850.0 + 21 +11198.989873 + 31 +0.0 + 0 +LINE + 5 +3FF + 8 +0 + 62 + 0 + 10 +22975.0 + 20 +10897.213178 + 30 +0.0 + 11 +22850.0 + 21 +11022.213178 + 31 +0.0 + 0 +LINE + 5 +400 + 8 +0 + 62 + 0 + 10 +22975.0 + 20 +10720.436483 + 30 +0.0 + 11 +22850.0 + 21 +10845.436483 + 31 +0.0 + 0 +LINE + 5 +401 + 8 +0 + 62 + 0 + 10 +22975.0 + 20 +10543.659787 + 30 +0.0 + 11 +22850.0 + 21 +10668.659787 + 31 +0.0 + 0 +LINE + 5 +402 + 8 +0 + 62 + 0 + 10 +22975.0 + 20 +10366.883092 + 30 +0.0 + 11 +22850.0 + 21 +10491.883092 + 31 +0.0 + 0 +LINE + 5 +403 + 8 +0 + 62 + 0 + 10 +22975.0 + 20 +10190.106397 + 30 +0.0 + 11 +22850.0 + 21 +10315.106397 + 31 +0.0 + 0 +LINE + 5 +404 + 8 +0 + 62 + 0 + 10 +22975.0 + 20 +10013.329701 + 30 +0.0 + 11 +22850.0 + 21 +10138.329701 + 31 +0.0 + 0 +LINE + 5 +405 + 8 +0 + 62 + 0 + 10 +22975.0 + 20 +9836.553006 + 30 +0.0 + 11 +22850.0 + 21 +9961.553006 + 31 +0.0 + 0 +LINE + 5 +406 + 8 +0 + 62 + 0 + 10 +22975.0 + 20 +9659.776311 + 30 +0.0 + 11 +22850.0 + 21 +9784.776311 + 31 +0.0 + 0 +LINE + 5 +407 + 8 +0 + 62 + 0 + 10 +22975.0 + 20 +11781.096654 + 30 +0.0 + 11 +22850.0 + 21 +11906.096654 + 31 +0.0 + 0 +LINE + 5 +408 + 8 +0 + 62 + 0 + 10 +22975.0 + 20 +11957.87335 + 30 +0.0 + 11 +22850.0 + 21 +12082.87335 + 31 +0.0 + 0 +LINE + 5 +409 + 8 +0 + 62 + 0 + 10 +22975.0 + 20 +12134.650045 + 30 +0.0 + 11 +22850.0 + 21 +12259.650045 + 31 +0.0 + 0 +LINE + 5 +40A + 8 +0 + 62 + 0 + 10 +22975.0 + 20 +12311.42674 + 30 +0.0 + 11 +22850.0 + 21 +12436.42674 + 31 +0.0 + 0 +LINE + 5 +40B + 8 +0 + 62 + 0 + 10 +22975.0 + 20 +12488.203436 + 30 +0.0 + 11 +22850.0 + 21 +12613.203436 + 31 +0.0 + 0 +LINE + 5 +40C + 8 +0 + 62 + 0 + 10 +22975.0 + 20 +12664.980131 + 30 +0.0 + 11 +22850.0 + 21 +12789.980131 + 31 +0.0 + 0 +LINE + 5 +40D + 8 +0 + 62 + 0 + 10 +22975.0 + 20 +12841.756826 + 30 +0.0 + 11 +22850.0 + 21 +12966.756826 + 31 +0.0 + 0 +LINE + 5 +40E + 8 +0 + 62 + 0 + 10 +22975.0 + 20 +13018.533521 + 30 +0.0 + 11 +22850.0 + 21 +13143.533521 + 31 +0.0 + 0 +LINE + 5 +40F + 8 +0 + 62 + 0 + 10 +22975.0 + 20 +13195.310217 + 30 +0.0 + 11 +22850.0 + 21 +13320.310217 + 31 +0.0 + 0 +LINE + 5 +410 + 8 +0 + 62 + 0 + 10 +22975.0 + 20 +13372.086912 + 30 +0.0 + 11 +22850.0 + 21 +13497.086912 + 31 +0.0 + 0 +LINE + 5 +411 + 8 +0 + 62 + 0 + 10 +22975.0 + 20 +13548.863607 + 30 +0.0 + 11 +22850.0 + 21 +13673.863607 + 31 +0.0 + 0 +LINE + 5 +412 + 8 +0 + 62 + 0 + 10 +22608.863607 + 20 +13915.0 + 30 +0.0 + 11 +22483.863607 + 21 +14040.0 + 31 +0.0 + 0 +LINE + 5 +413 + 8 +0 + 62 + 0 + 10 +22975.0 + 20 +13725.640303 + 30 +0.0 + 11 +22850.0 + 21 +13850.640303 + 31 +0.0 + 0 +LINE + 5 +414 + 8 +0 + 62 + 0 + 10 +22785.640303 + 20 +13915.0 + 30 +0.0 + 11 +22660.640303 + 21 +14040.0 + 31 +0.0 + 0 +LINE + 5 +415 + 8 +0 + 62 + 0 + 10 +22975.0 + 20 +13902.416998 + 30 +0.0 + 11 +22837.416998 + 21 +14040.0 + 31 +0.0 + 0 +LINE + 5 +416 + 8 +0 + 62 + 0 + 10 +22975.0 + 20 +14079.193693 + 30 +0.0 + 11 +22850.0 + 21 +14204.193693 + 31 +0.0 + 0 +LINE + 5 +417 + 8 +0 + 62 + 0 + 10 +22975.0 + 20 +14255.970389 + 30 +0.0 + 11 +22890.970389 + 21 +14340.0 + 31 +0.0 + 0 +ENDBLK + 5 +418 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X33 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X33 + 1 + + 0 +LINE + 5 +41A + 8 +0 + 62 + 0 + 10 +7628.805922 + 20 +16475.0 + 30 +0.0 + 11 +7740.0 + 21 +16586.194078 + 31 +0.0 + 0 +LINE + 5 +41B + 8 +0 + 62 + 0 + 10 +7615.0 + 20 +16637.970773 + 30 +0.0 + 11 +7740.0 + 21 +16762.970773 + 31 +0.0 + 0 +LINE + 5 +41C + 8 +0 + 62 + 0 + 10 +7615.0 + 20 +16814.747468 + 30 +0.0 + 11 +7675.252532 + 21 +16875.0 + 31 +0.0 + 0 +LINE + 5 +41D + 8 +0 + 62 + 0 + 10 +7740.0 + 20 +16586.271632 + 30 +0.0 + 11 +7615.0 + 21 +16711.271632 + 31 +0.0 + 0 +LINE + 5 +41E + 8 +0 + 62 + 0 + 10 +7674.494937 + 20 +16475.0 + 30 +0.0 + 11 +7615.0 + 21 +16534.494937 + 31 +0.0 + 0 +LINE + 5 +41F + 8 +0 + 62 + 0 + 10 +7740.0 + 20 +16763.048327 + 30 +0.0 + 11 +7628.048327 + 21 +16875.0 + 31 +0.0 + 0 +ENDBLK + 5 +420 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X34 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X34 + 1 + + 0 +LINE + 5 +422 + 8 +0 + 62 + 0 + 10 +7615.0 + 20 +14870.20382 + 30 +0.0 + 11 +7740.0 + 21 +14995.20382 + 31 +0.0 + 0 +LINE + 5 +423 + 8 +0 + 62 + 0 + 10 +7615.0 + 20 +15046.980515 + 30 +0.0 + 11 +7740.0 + 21 +15171.980515 + 31 +0.0 + 0 +LINE + 5 +424 + 8 +0 + 62 + 0 + 10 +7615.0 + 20 +15223.757211 + 30 +0.0 + 11 +7740.0 + 21 +15348.757211 + 31 +0.0 + 0 +LINE + 5 +425 + 8 +0 + 62 + 0 + 10 +7615.0 + 20 +15400.533906 + 30 +0.0 + 11 +7740.0 + 21 +15525.533906 + 31 +0.0 + 0 +LINE + 5 +426 + 8 +0 + 62 + 0 + 10 +7615.0 + 20 +15577.310601 + 30 +0.0 + 11 +7627.689399 + 21 +15590.0 + 31 +0.0 + 0 +LINE + 5 +427 + 8 +0 + 62 + 0 + 10 +7615.0 + 20 +14693.427125 + 30 +0.0 + 11 +7740.0 + 21 +14818.427125 + 31 +0.0 + 0 +LINE + 5 +428 + 8 +0 + 62 + 0 + 10 +7615.0 + 20 +14516.650429 + 30 +0.0 + 11 +7740.0 + 21 +14641.650429 + 31 +0.0 + 0 +LINE + 5 +429 + 8 +0 + 62 + 0 + 10 +7740.0 + 20 +14818.504679 + 30 +0.0 + 11 +7615.0 + 21 +14943.504679 + 31 +0.0 + 0 +LINE + 5 +42A + 8 +0 + 62 + 0 + 10 +7740.0 + 20 +14641.727984 + 30 +0.0 + 11 +7615.0 + 21 +14766.727984 + 31 +0.0 + 0 +LINE + 5 +42B + 8 +0 + 62 + 0 + 10 +7714.951288 + 20 +14490.0 + 30 +0.0 + 11 +7615.0 + 21 +14589.951288 + 31 +0.0 + 0 +LINE + 5 +42C + 8 +0 + 62 + 0 + 10 +7740.0 + 20 +14995.281374 + 30 +0.0 + 11 +7615.0 + 21 +15120.281374 + 31 +0.0 + 0 +LINE + 5 +42D + 8 +0 + 62 + 0 + 10 +7740.0 + 20 +15172.05807 + 30 +0.0 + 11 +7615.0 + 21 +15297.05807 + 31 +0.0 + 0 +LINE + 5 +42E + 8 +0 + 62 + 0 + 10 +7740.0 + 20 +15348.834765 + 30 +0.0 + 11 +7615.0 + 21 +15473.834765 + 31 +0.0 + 0 +LINE + 5 +42F + 8 +0 + 62 + 0 + 10 +7740.0 + 20 +15525.61146 + 30 +0.0 + 11 +7675.61146 + 21 +15590.0 + 31 +0.0 + 0 +ENDBLK + 5 +430 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X35 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X35 + 1 + + 0 +LINE + 5 +432 + 8 +0 + 62 + 0 + 10 +11762.563133 + 20 +17250.0 + 30 +0.0 + 11 +11887.563133 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +433 + 8 +0 + 62 + 0 + 10 +11585.786438 + 20 +17250.0 + 30 +0.0 + 11 +11710.786438 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +434 + 8 +0 + 62 + 0 + 10 +11409.009742 + 20 +17250.0 + 30 +0.0 + 11 +11534.009742 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +435 + 8 +0 + 62 + 0 + 10 +11232.233047 + 20 +17250.0 + 30 +0.0 + 11 +11357.233047 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +436 + 8 +0 + 62 + 0 + 10 +11055.456352 + 20 +17250.0 + 30 +0.0 + 11 +11180.456352 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +437 + 8 +0 + 62 + 0 + 10 +10878.679656 + 20 +17250.0 + 30 +0.0 + 11 +11003.679656 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +438 + 8 +0 + 62 + 0 + 10 +10701.902961 + 20 +17250.0 + 30 +0.0 + 11 +10826.902961 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +439 + 8 +0 + 62 + 0 + 10 +10525.126266 + 20 +17250.0 + 30 +0.0 + 11 +10650.126266 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +43A + 8 +0 + 62 + 0 + 10 +10348.349571 + 20 +17250.0 + 30 +0.0 + 11 +10473.349571 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +43B + 8 +0 + 62 + 0 + 10 +10171.572875 + 20 +17250.0 + 30 +0.0 + 11 +10296.572875 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +43C + 8 +0 + 62 + 0 + 10 +10115.0 + 20 +17370.20382 + 30 +0.0 + 11 +10119.79618 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +43D + 8 +0 + 62 + 0 + 10 +11939.339828 + 20 +17250.0 + 30 +0.0 + 11 +12064.339828 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +43E + 8 +0 + 62 + 0 + 10 +12116.116524 + 20 +17250.0 + 30 +0.0 + 11 +12241.116524 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +43F + 8 +0 + 62 + 0 + 10 +12292.893219 + 20 +17250.0 + 30 +0.0 + 11 +12417.893219 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +440 + 8 +0 + 62 + 0 + 10 +12469.669914 + 20 +17250.0 + 30 +0.0 + 11 +12594.669914 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +441 + 8 +0 + 62 + 0 + 10 +12646.446609 + 20 +17250.0 + 30 +0.0 + 11 +12771.446609 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +442 + 8 +0 + 62 + 0 + 10 +12823.223305 + 20 +17250.0 + 30 +0.0 + 11 +12948.223305 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +443 + 8 +0 + 62 + 0 + 10 +13000.0 + 20 +17250.0 + 30 +0.0 + 11 +13125.0 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +444 + 8 +0 + 62 + 0 + 10 +13176.776695 + 20 +17250.0 + 30 +0.0 + 11 +13301.776695 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +445 + 8 +0 + 62 + 0 + 10 +13353.553391 + 20 +17250.0 + 30 +0.0 + 11 +13478.553391 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +446 + 8 +0 + 62 + 0 + 10 +11849.242405 + 20 +17250.0 + 30 +0.0 + 11 +11724.242405 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +447 + 8 +0 + 62 + 0 + 10 +11672.46571 + 20 +17250.0 + 30 +0.0 + 11 +11547.46571 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +448 + 8 +0 + 62 + 0 + 10 +11495.689014 + 20 +17250.0 + 30 +0.0 + 11 +11370.689014 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +449 + 8 +0 + 62 + 0 + 10 +11318.912319 + 20 +17250.0 + 30 +0.0 + 11 +11193.912319 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +44A + 8 +0 + 62 + 0 + 10 +11142.135624 + 20 +17250.0 + 30 +0.0 + 11 +11017.135624 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +44B + 8 +0 + 62 + 0 + 10 +10965.358928 + 20 +17250.0 + 30 +0.0 + 11 +10840.358928 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +44C + 8 +0 + 62 + 0 + 10 +10788.582233 + 20 +17250.0 + 30 +0.0 + 11 +10663.582233 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +44D + 8 +0 + 62 + 0 + 10 +10611.805538 + 20 +17250.0 + 30 +0.0 + 11 +10486.805538 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +44E + 8 +0 + 62 + 0 + 10 +10435.028843 + 20 +17250.0 + 30 +0.0 + 11 +10310.028843 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +44F + 8 +0 + 62 + 0 + 10 +10258.252147 + 20 +17250.0 + 30 +0.0 + 11 +10133.252147 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +450 + 8 +0 + 62 + 0 + 10 +12026.0191 + 20 +17250.0 + 30 +0.0 + 11 +11901.0191 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +451 + 8 +0 + 62 + 0 + 10 +12202.795796 + 20 +17250.0 + 30 +0.0 + 11 +12077.795796 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +452 + 8 +0 + 62 + 0 + 10 +12379.572491 + 20 +17250.0 + 30 +0.0 + 11 +12254.572491 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +453 + 8 +0 + 62 + 0 + 10 +12556.349186 + 20 +17250.0 + 30 +0.0 + 11 +12431.349186 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +454 + 8 +0 + 62 + 0 + 10 +12733.125881 + 20 +17250.0 + 30 +0.0 + 11 +12608.125881 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +455 + 8 +0 + 62 + 0 + 10 +12909.902577 + 20 +17250.0 + 30 +0.0 + 11 +12784.902577 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +456 + 8 +0 + 62 + 0 + 10 +13086.679272 + 20 +17250.0 + 30 +0.0 + 11 +12961.679272 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +457 + 8 +0 + 62 + 0 + 10 +13263.455967 + 20 +17250.0 + 30 +0.0 + 11 +13138.455967 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +458 + 8 +0 + 62 + 0 + 10 +13440.232663 + 20 +17250.0 + 30 +0.0 + 11 +13315.232663 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +459 + 8 +0 + 62 + 0 + 10 +13525.0 + 20 +17342.009358 + 30 +0.0 + 11 +13492.009358 + 21 +17375.0 + 31 +0.0 + 0 +ENDBLK + 5 +45A + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X36 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X36 + 1 + + 0 +LINE + 5 +45C + 8 +0 + 62 + 0 + 10 +14590.990258 + 20 +17250.0 + 30 +0.0 + 11 +14715.990258 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +45D + 8 +0 + 62 + 0 + 10 +14767.766953 + 20 +17250.0 + 30 +0.0 + 11 +14875.0 + 21 +17357.233047 + 31 +0.0 + 0 +LINE + 5 +45E + 8 +0 + 62 + 0 + 10 +14677.66953 + 20 +17250.0 + 30 +0.0 + 11 +14555.0 + 21 +17372.66953 + 31 +0.0 + 0 +LINE + 5 +45F + 8 +0 + 62 + 0 + 10 +14854.446225 + 20 +17250.0 + 30 +0.0 + 11 +14729.446225 + 21 +17375.0 + 31 +0.0 + 0 +ENDBLK + 5 +460 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X37 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X37 + 1 + + 0 +LINE + 5 +462 + 8 +0 + 62 + 0 + 10 +15474.873734 + 20 +17250.0 + 30 +0.0 + 11 +15599.873734 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +463 + 8 +0 + 62 + 0 + 10 +15298.097039 + 20 +17250.0 + 30 +0.0 + 11 +15423.097039 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +464 + 8 +0 + 62 + 0 + 10 +15240.0 + 20 +17368.679656 + 30 +0.0 + 11 +15246.320344 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +465 + 8 +0 + 62 + 0 + 10 +15651.650429 + 20 +17250.0 + 30 +0.0 + 11 +15776.650429 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +466 + 8 +0 + 62 + 0 + 10 +15828.427125 + 20 +17250.0 + 30 +0.0 + 11 +15953.427125 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +467 + 8 +0 + 62 + 0 + 10 +15561.553006 + 20 +17250.0 + 30 +0.0 + 11 +15436.553006 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +468 + 8 +0 + 62 + 0 + 10 +15384.776311 + 20 +17250.0 + 30 +0.0 + 11 +15259.776311 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +469 + 8 +0 + 62 + 0 + 10 +15738.329701 + 20 +17250.0 + 30 +0.0 + 11 +15613.329701 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +46A + 8 +0 + 62 + 0 + 10 +15915.106397 + 20 +17250.0 + 30 +0.0 + 11 +15790.106397 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +46B + 8 +0 + 62 + 0 + 10 +15990.0 + 20 +17351.883092 + 30 +0.0 + 11 +15966.883092 + 21 +17375.0 + 31 +0.0 + 0 +ENDBLK + 5 +46C + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X38 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X38 + 1 + + 0 +LINE + 5 +46E + 8 +0 + 62 + 0 + 10 +17065.863992 + 20 +17250.0 + 30 +0.0 + 11 +17190.863992 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +46F + 8 +0 + 62 + 0 + 10 +16889.087297 + 20 +17250.0 + 30 +0.0 + 11 +17014.087297 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +470 + 8 +0 + 62 + 0 + 10 +17242.640687 + 20 +17250.0 + 30 +0.0 + 11 +17367.640687 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +471 + 8 +0 + 62 + 0 + 10 +17419.417382 + 20 +17250.0 + 30 +0.0 + 11 +17544.417382 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +472 + 8 +0 + 62 + 0 + 10 +17596.194078 + 20 +17250.0 + 30 +0.0 + 11 +17625.0 + 21 +17278.805922 + 31 +0.0 + 0 +LINE + 5 +473 + 8 +0 + 62 + 0 + 10 +17152.543264 + 20 +17250.0 + 30 +0.0 + 11 +17027.543264 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +474 + 8 +0 + 62 + 0 + 10 +16975.766569 + 20 +17250.0 + 30 +0.0 + 11 +16875.0 + 21 +17350.766569 + 31 +0.0 + 0 +LINE + 5 +475 + 8 +0 + 62 + 0 + 10 +17329.319959 + 20 +17250.0 + 30 +0.0 + 11 +17204.319959 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +476 + 8 +0 + 62 + 0 + 10 +17506.096654 + 20 +17250.0 + 30 +0.0 + 11 +17381.096654 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +477 + 8 +0 + 62 + 0 + 10 +17625.0 + 20 +17307.87335 + 30 +0.0 + 11 +17557.87335 + 21 +17375.0 + 31 +0.0 + 0 +ENDBLK + 5 +478 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X39 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X39 + 1 + + 0 +LINE + 5 +47A + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +20768.13782 + 30 +0.0 + 11 +4950.0 + 21 +20768.13782 + 31 +0.0 + 0 +LINE + 5 +47B + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +20789.788455 + 30 +0.0 + 11 +4987.5 + 21 +20789.788455 + 31 +0.0 + 0 +LINE + 5 +47C + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +20811.43909 + 30 +0.0 + 11 +4950.0 + 21 +20811.43909 + 31 +0.0 + 0 +LINE + 5 +47D + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +20833.089725 + 30 +0.0 + 11 +4987.5 + 21 +20833.089725 + 31 +0.0 + 0 +LINE + 5 +47E + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +20854.74036 + 30 +0.0 + 11 +4950.0 + 21 +20854.74036 + 31 +0.0 + 0 +LINE + 5 +47F + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +20876.390995 + 30 +0.0 + 11 +4987.5 + 21 +20876.390995 + 31 +0.0 + 0 +LINE + 5 +480 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +20898.04163 + 30 +0.0 + 11 +4950.0 + 21 +20898.04163 + 31 +0.0 + 0 +LINE + 5 +481 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +20919.692265 + 30 +0.0 + 11 +4987.5 + 21 +20919.692265 + 31 +0.0 + 0 +LINE + 5 +482 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +20941.3429 + 30 +0.0 + 11 +4950.0 + 21 +20941.3429 + 31 +0.0 + 0 +LINE + 5 +483 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +20962.993535 + 30 +0.0 + 11 +4987.5 + 21 +20962.993535 + 31 +0.0 + 0 +LINE + 5 +484 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +20984.64417 + 30 +0.0 + 11 +4950.0 + 21 +20984.64417 + 31 +0.0 + 0 +LINE + 5 +485 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +21006.294805 + 30 +0.0 + 11 +4987.5 + 21 +21006.294805 + 31 +0.0 + 0 +LINE + 5 +486 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +21027.94544 + 30 +0.0 + 11 +4950.0 + 21 +21027.94544 + 31 +0.0 + 0 +LINE + 5 +487 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +21049.596075 + 30 +0.0 + 11 +4987.5 + 21 +21049.596075 + 31 +0.0 + 0 +LINE + 5 +488 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +21071.24671 + 30 +0.0 + 11 +4950.0 + 21 +21071.24671 + 31 +0.0 + 0 +LINE + 5 +489 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +21092.897345 + 30 +0.0 + 11 +4987.5 + 21 +21092.897345 + 31 +0.0 + 0 +LINE + 5 +48A + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +21114.54798 + 30 +0.0 + 11 +4950.0 + 21 +21114.54798 + 31 +0.0 + 0 +LINE + 5 +48B + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +21136.198615 + 30 +0.0 + 11 +4987.5 + 21 +21136.198615 + 31 +0.0 + 0 +LINE + 5 +48C + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +21157.84925 + 30 +0.0 + 11 +4950.0 + 21 +21157.84925 + 31 +0.0 + 0 +LINE + 5 +48D + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +21179.499885 + 30 +0.0 + 11 +4987.5 + 21 +21179.499885 + 31 +0.0 + 0 +LINE + 5 +48E + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +21201.15052 + 30 +0.0 + 11 +4950.0 + 21 +21201.15052 + 31 +0.0 + 0 +LINE + 5 +48F + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +21222.801155 + 30 +0.0 + 11 +4987.5 + 21 +21222.801155 + 31 +0.0 + 0 +LINE + 5 +490 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +21244.45179 + 30 +0.0 + 11 +4950.0 + 21 +21244.45179 + 31 +0.0 + 0 +LINE + 5 +491 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +21266.102425 + 30 +0.0 + 11 +4987.5 + 21 +21266.102425 + 31 +0.0 + 0 +LINE + 5 +492 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +21287.75306 + 30 +0.0 + 11 +4950.0 + 21 +21287.75306 + 31 +0.0 + 0 +LINE + 5 +493 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +21309.403695 + 30 +0.0 + 11 +4987.5 + 21 +21309.403695 + 31 +0.0 + 0 +LINE + 5 +494 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +21331.05433 + 30 +0.0 + 11 +4950.0 + 21 +21331.05433 + 31 +0.0 + 0 +LINE + 5 +495 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +21352.704965 + 30 +0.0 + 11 +4987.5 + 21 +21352.704965 + 31 +0.0 + 0 +LINE + 5 +496 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +21374.3556 + 30 +0.0 + 11 +4950.0 + 21 +21374.3556 + 31 +0.0 + 0 +LINE + 5 +497 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +21396.006235 + 30 +0.0 + 11 +4987.5 + 21 +21396.006235 + 31 +0.0 + 0 +LINE + 5 +498 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +21417.65687 + 30 +0.0 + 11 +4950.0 + 21 +21417.65687 + 31 +0.0 + 0 +LINE + 5 +499 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +21439.307505 + 30 +0.0 + 11 +4987.5 + 21 +21439.307505 + 31 +0.0 + 0 +LINE + 5 +49A + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +21460.95814 + 30 +0.0 + 11 +4950.0 + 21 +21460.95814 + 31 +0.0 + 0 +LINE + 5 +49B + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +21482.608775 + 30 +0.0 + 11 +4987.5 + 21 +21482.608775 + 31 +0.0 + 0 +LINE + 5 +49C + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +21504.25941 + 30 +0.0 + 11 +4950.0 + 21 +21504.25941 + 31 +0.0 + 0 +LINE + 5 +49D + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +21525.910045 + 30 +0.0 + 11 +4987.5 + 21 +21525.910045 + 31 +0.0 + 0 +LINE + 5 +49E + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +21547.56068 + 30 +0.0 + 11 +4950.0 + 21 +21547.56068 + 31 +0.0 + 0 +LINE + 5 +49F + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +21569.211315 + 30 +0.0 + 11 +4987.5 + 21 +21569.211315 + 31 +0.0 + 0 +LINE + 5 +4A0 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +21590.86195 + 30 +0.0 + 11 +4950.0 + 21 +21590.86195 + 31 +0.0 + 0 +LINE + 5 +4A1 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +21612.512585 + 30 +0.0 + 11 +4987.5 + 21 +21612.512585 + 31 +0.0 + 0 +LINE + 5 +4A2 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +21634.16322 + 30 +0.0 + 11 +4950.0 + 21 +21634.16322 + 31 +0.0 + 0 +LINE + 5 +4A3 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +21655.813855 + 30 +0.0 + 11 +4987.5 + 21 +21655.813855 + 31 +0.0 + 0 +LINE + 5 +4A4 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +21677.46449 + 30 +0.0 + 11 +4950.0 + 21 +21677.46449 + 31 +0.0 + 0 +LINE + 5 +4A5 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +21699.115125 + 30 +0.0 + 11 +4987.5 + 21 +21699.115125 + 31 +0.0 + 0 +LINE + 5 +4A6 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +21720.76576 + 30 +0.0 + 11 +4950.0 + 21 +21720.76576 + 31 +0.0 + 0 +LINE + 5 +4A7 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +21742.416395 + 30 +0.0 + 11 +4987.5 + 21 +21742.416395 + 31 +0.0 + 0 +LINE + 5 +4A8 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +21764.06703 + 30 +0.0 + 11 +4950.0 + 21 +21764.06703 + 31 +0.0 + 0 +LINE + 5 +4A9 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +21785.717665 + 30 +0.0 + 11 +4987.5 + 21 +21785.717665 + 31 +0.0 + 0 +LINE + 5 +4AA + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +21807.3683 + 30 +0.0 + 11 +4950.0 + 21 +21807.3683 + 31 +0.0 + 0 +LINE + 5 +4AB + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +21829.018935 + 30 +0.0 + 11 +4987.5 + 21 +21829.018935 + 31 +0.0 + 0 +LINE + 5 +4AC + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +21850.66957 + 30 +0.0 + 11 +4950.0 + 21 +21850.66957 + 31 +0.0 + 0 +LINE + 5 +4AD + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +21872.320205 + 30 +0.0 + 11 +4987.5 + 21 +21872.320205 + 31 +0.0 + 0 +LINE + 5 +4AE + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +21893.97084 + 30 +0.0 + 11 +4950.0 + 21 +21893.97084 + 31 +0.0 + 0 +LINE + 5 +4AF + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +21915.621475 + 30 +0.0 + 11 +4987.5 + 21 +21915.621475 + 31 +0.0 + 0 +LINE + 5 +4B0 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +21937.27211 + 30 +0.0 + 11 +4950.0 + 21 +21937.27211 + 31 +0.0 + 0 +LINE + 5 +4B1 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +21958.922745 + 30 +0.0 + 11 +4987.5 + 21 +21958.922745 + 31 +0.0 + 0 +LINE + 5 +4B2 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +21980.57338 + 30 +0.0 + 11 +4950.0 + 21 +21980.57338 + 31 +0.0 + 0 +LINE + 5 +4B3 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +22002.224015 + 30 +0.0 + 11 +4987.5 + 21 +22002.224015 + 31 +0.0 + 0 +LINE + 5 +4B4 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +22023.87465 + 30 +0.0 + 11 +4950.0 + 21 +22023.87465 + 31 +0.0 + 0 +LINE + 5 +4B5 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +22045.525285 + 30 +0.0 + 11 +4987.5 + 21 +22045.525285 + 31 +0.0 + 0 +LINE + 5 +4B6 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +22067.17592 + 30 +0.0 + 11 +4950.0 + 21 +22067.17592 + 31 +0.0 + 0 +LINE + 5 +4B7 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +22088.826555 + 30 +0.0 + 11 +4987.5 + 21 +22088.826555 + 31 +0.0 + 0 +LINE + 5 +4B8 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +22110.47719 + 30 +0.0 + 11 +4950.0 + 21 +22110.47719 + 31 +0.0 + 0 +LINE + 5 +4B9 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +22132.127825 + 30 +0.0 + 11 +4987.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +4BA + 8 +0 + 62 + 0 + 10 +5037.5 + 20 +22132.127825 + 30 +0.0 + 11 +5062.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +4BB + 8 +0 + 62 + 0 + 10 +5112.5 + 20 +22132.127825 + 30 +0.0 + 11 +5137.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +4BC + 8 +0 + 62 + 0 + 10 +5187.5 + 20 +22132.127825 + 30 +0.0 + 11 +5212.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +4BD + 8 +0 + 62 + 0 + 10 +5262.5 + 20 +22132.127825 + 30 +0.0 + 11 +5287.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +4BE + 8 +0 + 62 + 0 + 10 +5337.5 + 20 +22132.127825 + 30 +0.0 + 11 +5362.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +4BF + 8 +0 + 62 + 0 + 10 +5412.5 + 20 +22132.127825 + 30 +0.0 + 11 +5437.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +4C0 + 8 +0 + 62 + 0 + 10 +5487.5 + 20 +22132.127825 + 30 +0.0 + 11 +5512.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +4C1 + 8 +0 + 62 + 0 + 10 +5562.5 + 20 +22132.127825 + 30 +0.0 + 11 +5587.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +4C2 + 8 +0 + 62 + 0 + 10 +5637.5 + 20 +22132.127825 + 30 +0.0 + 11 +5662.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +4C3 + 8 +0 + 62 + 0 + 10 +5712.5 + 20 +22132.127825 + 30 +0.0 + 11 +5737.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +4C4 + 8 +0 + 62 + 0 + 10 +5787.5 + 20 +22132.127825 + 30 +0.0 + 11 +5812.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +4C5 + 8 +0 + 62 + 0 + 10 +5862.5 + 20 +22132.127825 + 30 +0.0 + 11 +5887.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +4C6 + 8 +0 + 62 + 0 + 10 +5937.5 + 20 +22132.127825 + 30 +0.0 + 11 +5962.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +4C7 + 8 +0 + 62 + 0 + 10 +6012.5 + 20 +22132.127825 + 30 +0.0 + 11 +6037.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +4C8 + 8 +0 + 62 + 0 + 10 +6087.5 + 20 +22132.127825 + 30 +0.0 + 11 +6112.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +4C9 + 8 +0 + 62 + 0 + 10 +6162.5 + 20 +22132.127825 + 30 +0.0 + 11 +6187.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +4CA + 8 +0 + 62 + 0 + 10 +6237.5 + 20 +22132.127825 + 30 +0.0 + 11 +6262.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +4CB + 8 +0 + 62 + 0 + 10 +6312.5 + 20 +22132.127825 + 30 +0.0 + 11 +6337.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +4CC + 8 +0 + 62 + 0 + 10 +6387.5 + 20 +22132.127825 + 30 +0.0 + 11 +6412.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +4CD + 8 +0 + 62 + 0 + 10 +6462.5 + 20 +22132.127825 + 30 +0.0 + 11 +6487.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +4CE + 8 +0 + 62 + 0 + 10 +6537.5 + 20 +22132.127825 + 30 +0.0 + 11 +6562.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +4CF + 8 +0 + 62 + 0 + 10 +6612.5 + 20 +22132.127825 + 30 +0.0 + 11 +6637.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +4D0 + 8 +0 + 62 + 0 + 10 +6687.5 + 20 +22132.127825 + 30 +0.0 + 11 +6712.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +4D1 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +22153.77846 + 30 +0.0 + 11 +4950.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +4D2 + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +22153.77846 + 30 +0.0 + 11 +5025.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +4D3 + 8 +0 + 62 + 0 + 10 +5075.0 + 20 +22153.77846 + 30 +0.0 + 11 +5100.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +4D4 + 8 +0 + 62 + 0 + 10 +5150.0 + 20 +22153.77846 + 30 +0.0 + 11 +5175.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +4D5 + 8 +0 + 62 + 0 + 10 +5225.0 + 20 +22153.77846 + 30 +0.0 + 11 +5250.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +4D6 + 8 +0 + 62 + 0 + 10 +5300.0 + 20 +22153.77846 + 30 +0.0 + 11 +5325.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +4D7 + 8 +0 + 62 + 0 + 10 +5375.0 + 20 +22153.77846 + 30 +0.0 + 11 +5400.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +4D8 + 8 +0 + 62 + 0 + 10 +5450.0 + 20 +22153.77846 + 30 +0.0 + 11 +5475.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +4D9 + 8 +0 + 62 + 0 + 10 +5525.0 + 20 +22153.77846 + 30 +0.0 + 11 +5550.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +4DA + 8 +0 + 62 + 0 + 10 +5600.0 + 20 +22153.77846 + 30 +0.0 + 11 +5625.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +4DB + 8 +0 + 62 + 0 + 10 +5675.0 + 20 +22153.77846 + 30 +0.0 + 11 +5700.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +4DC + 8 +0 + 62 + 0 + 10 +5750.0 + 20 +22153.77846 + 30 +0.0 + 11 +5775.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +4DD + 8 +0 + 62 + 0 + 10 +5825.0 + 20 +22153.77846 + 30 +0.0 + 11 +5850.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +4DE + 8 +0 + 62 + 0 + 10 +5900.0 + 20 +22153.77846 + 30 +0.0 + 11 +5925.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +4DF + 8 +0 + 62 + 0 + 10 +5975.0 + 20 +22153.77846 + 30 +0.0 + 11 +6000.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +4E0 + 8 +0 + 62 + 0 + 10 +6050.0 + 20 +22153.77846 + 30 +0.0 + 11 +6075.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +4E1 + 8 +0 + 62 + 0 + 10 +6125.0 + 20 +22153.77846 + 30 +0.0 + 11 +6150.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +4E2 + 8 +0 + 62 + 0 + 10 +6200.0 + 20 +22153.77846 + 30 +0.0 + 11 +6225.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +4E3 + 8 +0 + 62 + 0 + 10 +6275.0 + 20 +22153.77846 + 30 +0.0 + 11 +6300.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +4E4 + 8 +0 + 62 + 0 + 10 +6350.0 + 20 +22153.77846 + 30 +0.0 + 11 +6375.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +4E5 + 8 +0 + 62 + 0 + 10 +6425.0 + 20 +22153.77846 + 30 +0.0 + 11 +6450.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +4E6 + 8 +0 + 62 + 0 + 10 +6500.0 + 20 +22153.77846 + 30 +0.0 + 11 +6525.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +4E7 + 8 +0 + 62 + 0 + 10 +6575.0 + 20 +22153.77846 + 30 +0.0 + 11 +6600.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +4E8 + 8 +0 + 62 + 0 + 10 +6650.0 + 20 +22153.77846 + 30 +0.0 + 11 +6675.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +4E9 + 8 +0 + 62 + 0 + 10 +6725.0 + 20 +22153.77846 + 30 +0.0 + 11 +6750.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +4EA + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +22175.429095 + 30 +0.0 + 11 +4987.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +4EB + 8 +0 + 62 + 0 + 10 +5037.5 + 20 +22175.429095 + 30 +0.0 + 11 +5062.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +4EC + 8 +0 + 62 + 0 + 10 +5112.5 + 20 +22175.429095 + 30 +0.0 + 11 +5137.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +4ED + 8 +0 + 62 + 0 + 10 +5187.5 + 20 +22175.429095 + 30 +0.0 + 11 +5212.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +4EE + 8 +0 + 62 + 0 + 10 +5262.5 + 20 +22175.429095 + 30 +0.0 + 11 +5287.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +4EF + 8 +0 + 62 + 0 + 10 +5337.5 + 20 +22175.429095 + 30 +0.0 + 11 +5362.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +4F0 + 8 +0 + 62 + 0 + 10 +5412.5 + 20 +22175.429095 + 30 +0.0 + 11 +5437.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +4F1 + 8 +0 + 62 + 0 + 10 +5487.5 + 20 +22175.429095 + 30 +0.0 + 11 +5512.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +4F2 + 8 +0 + 62 + 0 + 10 +5562.5 + 20 +22175.429095 + 30 +0.0 + 11 +5587.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +4F3 + 8 +0 + 62 + 0 + 10 +5637.5 + 20 +22175.429095 + 30 +0.0 + 11 +5662.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +4F4 + 8 +0 + 62 + 0 + 10 +5712.5 + 20 +22175.429095 + 30 +0.0 + 11 +5737.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +4F5 + 8 +0 + 62 + 0 + 10 +5787.5 + 20 +22175.429095 + 30 +0.0 + 11 +5812.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +4F6 + 8 +0 + 62 + 0 + 10 +5862.5 + 20 +22175.429095 + 30 +0.0 + 11 +5887.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +4F7 + 8 +0 + 62 + 0 + 10 +5937.5 + 20 +22175.429095 + 30 +0.0 + 11 +5962.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +4F8 + 8 +0 + 62 + 0 + 10 +6012.5 + 20 +22175.429095 + 30 +0.0 + 11 +6037.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +4F9 + 8 +0 + 62 + 0 + 10 +6087.5 + 20 +22175.429095 + 30 +0.0 + 11 +6112.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +4FA + 8 +0 + 62 + 0 + 10 +6162.5 + 20 +22175.429095 + 30 +0.0 + 11 +6187.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +4FB + 8 +0 + 62 + 0 + 10 +6237.5 + 20 +22175.429095 + 30 +0.0 + 11 +6262.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +4FC + 8 +0 + 62 + 0 + 10 +6312.5 + 20 +22175.429095 + 30 +0.0 + 11 +6337.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +4FD + 8 +0 + 62 + 0 + 10 +6387.5 + 20 +22175.429095 + 30 +0.0 + 11 +6412.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +4FE + 8 +0 + 62 + 0 + 10 +6462.5 + 20 +22175.429095 + 30 +0.0 + 11 +6487.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +4FF + 8 +0 + 62 + 0 + 10 +6537.5 + 20 +22175.429095 + 30 +0.0 + 11 +6562.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +500 + 8 +0 + 62 + 0 + 10 +6612.5 + 20 +22175.429095 + 30 +0.0 + 11 +6637.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +501 + 8 +0 + 62 + 0 + 10 +6687.5 + 20 +22175.429095 + 30 +0.0 + 11 +6712.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +502 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +20746.487185 + 30 +0.0 + 11 +4987.5 + 21 +20746.487185 + 31 +0.0 + 0 +LINE + 5 +503 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +20724.83655 + 30 +0.0 + 11 +4950.0 + 21 +20724.83655 + 31 +0.0 + 0 +LINE + 5 +504 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +20703.185915 + 30 +0.0 + 11 +4987.5 + 21 +20703.185915 + 31 +0.0 + 0 +LINE + 5 +505 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +20681.53528 + 30 +0.0 + 11 +4950.0 + 21 +20681.53528 + 31 +0.0 + 0 +LINE + 5 +506 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +20659.884645 + 30 +0.0 + 11 +4987.5 + 21 +20659.884645 + 31 +0.0 + 0 +LINE + 5 +507 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +20638.23401 + 30 +0.0 + 11 +4950.0 + 21 +20638.23401 + 31 +0.0 + 0 +LINE + 5 +508 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +20616.583375 + 30 +0.0 + 11 +4987.5 + 21 +20616.583375 + 31 +0.0 + 0 +LINE + 5 +509 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +20594.93274 + 30 +0.0 + 11 +4950.0 + 21 +20594.93274 + 31 +0.0 + 0 +LINE + 5 +50A + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +20573.282105 + 30 +0.0 + 11 +4987.5 + 21 +20573.282105 + 31 +0.0 + 0 +LINE + 5 +50B + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +20551.63147 + 30 +0.0 + 11 +4950.0 + 21 +20551.63147 + 31 +0.0 + 0 +LINE + 5 +50C + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +20529.980835 + 30 +0.0 + 11 +4987.5 + 21 +20529.980835 + 31 +0.0 + 0 +LINE + 5 +50D + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +20508.3302 + 30 +0.0 + 11 +4950.0 + 21 +20508.3302 + 31 +0.0 + 0 +LINE + 5 +50E + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +20486.679565 + 30 +0.0 + 11 +4987.5 + 21 +20486.679565 + 31 +0.0 + 0 +LINE + 5 +50F + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +20465.02893 + 30 +0.0 + 11 +4950.0 + 21 +20465.02893 + 31 +0.0 + 0 +LINE + 5 +510 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +20443.378295 + 30 +0.0 + 11 +4987.5 + 21 +20443.378295 + 31 +0.0 + 0 +LINE + 5 +511 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +20421.72766 + 30 +0.0 + 11 +4950.0 + 21 +20421.72766 + 31 +0.0 + 0 +LINE + 5 +512 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +20400.077025 + 30 +0.0 + 11 +4987.5 + 21 +20400.077025 + 31 +0.0 + 0 +LINE + 5 +513 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +20378.42639 + 30 +0.0 + 11 +4950.0 + 21 +20378.42639 + 31 +0.0 + 0 +LINE + 5 +514 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +20356.775755 + 30 +0.0 + 11 +4987.5 + 21 +20356.775755 + 31 +0.0 + 0 +LINE + 5 +515 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +20335.12512 + 30 +0.0 + 11 +4950.0 + 21 +20335.12512 + 31 +0.0 + 0 +LINE + 5 +516 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +20313.474485 + 30 +0.0 + 11 +4987.5 + 21 +20313.474485 + 31 +0.0 + 0 +LINE + 5 +517 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +20291.82385 + 30 +0.0 + 11 +4950.0 + 21 +20291.82385 + 31 +0.0 + 0 +LINE + 5 +518 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +20270.173215 + 30 +0.0 + 11 +4987.5 + 21 +20270.173215 + 31 +0.0 + 0 +LINE + 5 +519 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +20248.52258 + 30 +0.0 + 11 +4950.0 + 21 +20248.52258 + 31 +0.0 + 0 +LINE + 5 +51A + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +20226.871945 + 30 +0.0 + 11 +4987.5 + 21 +20226.871945 + 31 +0.0 + 0 +LINE + 5 +51B + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +20205.22131 + 30 +0.0 + 11 +4950.0 + 21 +20205.22131 + 31 +0.0 + 0 +LINE + 5 +51C + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +20183.570675 + 30 +0.0 + 11 +4987.5 + 21 +20183.570675 + 31 +0.0 + 0 +LINE + 5 +51D + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +20161.92004 + 30 +0.0 + 11 +4950.0 + 21 +20161.92004 + 31 +0.0 + 0 +LINE + 5 +51E + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +20140.269405 + 30 +0.0 + 11 +4987.5 + 21 +20140.269405 + 31 +0.0 + 0 +LINE + 5 +51F + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +20118.61877 + 30 +0.0 + 11 +4950.0 + 21 +20118.61877 + 31 +0.0 + 0 +LINE + 5 +520 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +20096.968135 + 30 +0.0 + 11 +4987.5 + 21 +20096.968135 + 31 +0.0 + 0 +LINE + 5 +521 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +20075.3175 + 30 +0.0 + 11 +4950.0 + 21 +20075.3175 + 31 +0.0 + 0 +LINE + 5 +522 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +20053.666865 + 30 +0.0 + 11 +4987.5 + 21 +20053.666865 + 31 +0.0 + 0 +LINE + 5 +523 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +20032.01623 + 30 +0.0 + 11 +4950.0 + 21 +20032.01623 + 31 +0.0 + 0 +LINE + 5 +524 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +20010.365595 + 30 +0.0 + 11 +4987.5 + 21 +20010.365595 + 31 +0.0 + 0 +LINE + 5 +525 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +19988.71496 + 30 +0.0 + 11 +4950.0 + 21 +19988.71496 + 31 +0.0 + 0 +LINE + 5 +526 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +19967.064325 + 30 +0.0 + 11 +4987.5 + 21 +19967.064325 + 31 +0.0 + 0 +LINE + 5 +527 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +19945.41369 + 30 +0.0 + 11 +4950.0 + 21 +19945.41369 + 31 +0.0 + 0 +LINE + 5 +528 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +19923.763055 + 30 +0.0 + 11 +4987.5 + 21 +19923.763055 + 31 +0.0 + 0 +LINE + 5 +529 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +19902.11242 + 30 +0.0 + 11 +4950.0 + 21 +19902.11242 + 31 +0.0 + 0 +LINE + 5 +52A + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +19880.461785 + 30 +0.0 + 11 +4987.5 + 21 +19880.461785 + 31 +0.0 + 0 +LINE + 5 +52B + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +19858.81115 + 30 +0.0 + 11 +4950.0 + 21 +19858.81115 + 31 +0.0 + 0 +LINE + 5 +52C + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +19837.160515 + 30 +0.0 + 11 +4987.5 + 21 +19837.160515 + 31 +0.0 + 0 +LINE + 5 +52D + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +19815.50988 + 30 +0.0 + 11 +4950.0 + 21 +19815.50988 + 31 +0.0 + 0 +LINE + 5 +52E + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +19793.859245 + 30 +0.0 + 11 +4987.5 + 21 +19793.859245 + 31 +0.0 + 0 +LINE + 5 +52F + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +19772.20861 + 30 +0.0 + 11 +4950.0 + 21 +19772.20861 + 31 +0.0 + 0 +LINE + 5 +530 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +19750.557975 + 30 +0.0 + 11 +4987.5 + 21 +19750.557975 + 31 +0.0 + 0 +LINE + 5 +531 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +19728.90734 + 30 +0.0 + 11 +4950.0 + 21 +19728.90734 + 31 +0.0 + 0 +LINE + 5 +532 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +19707.256705 + 30 +0.0 + 11 +4987.5 + 21 +19707.256705 + 31 +0.0 + 0 +LINE + 5 +533 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +19685.60607 + 30 +0.0 + 11 +4950.0 + 21 +19685.60607 + 31 +0.0 + 0 +LINE + 5 +534 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +19663.955435 + 30 +0.0 + 11 +4987.5 + 21 +19663.955435 + 31 +0.0 + 0 +LINE + 5 +535 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +19642.3048 + 30 +0.0 + 11 +4950.0 + 21 +19642.3048 + 31 +0.0 + 0 +LINE + 5 +536 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +19620.654165 + 30 +0.0 + 11 +4987.5 + 21 +19620.654165 + 31 +0.0 + 0 +LINE + 5 +537 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +19599.00353 + 30 +0.0 + 11 +4950.0 + 21 +19599.00353 + 31 +0.0 + 0 +LINE + 5 +538 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +19577.352895 + 30 +0.0 + 11 +4987.5 + 21 +19577.352895 + 31 +0.0 + 0 +LINE + 5 +539 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +19555.70226 + 30 +0.0 + 11 +4950.0 + 21 +19555.70226 + 31 +0.0 + 0 +LINE + 5 +53A + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +19534.051625 + 30 +0.0 + 11 +4987.5 + 21 +19534.051625 + 31 +0.0 + 0 +LINE + 5 +53B + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +19512.40099 + 30 +0.0 + 11 +4950.0 + 21 +19512.40099 + 31 +0.0 + 0 +LINE + 5 +53C + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +19490.750355 + 30 +0.0 + 11 +4987.5 + 21 +19490.750355 + 31 +0.0 + 0 +LINE + 5 +53D + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +19469.09972 + 30 +0.0 + 11 +4950.0 + 21 +19469.09972 + 31 +0.0 + 0 +LINE + 5 +53E + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +19447.449085 + 30 +0.0 + 11 +4987.5 + 21 +19447.449085 + 31 +0.0 + 0 +LINE + 5 +53F + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +19425.79845 + 30 +0.0 + 11 +4950.0 + 21 +19425.79845 + 31 +0.0 + 0 +LINE + 5 +540 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +19404.147815 + 30 +0.0 + 11 +4987.5 + 21 +19404.147815 + 31 +0.0 + 0 +LINE + 5 +541 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +19382.49718 + 30 +0.0 + 11 +4950.0 + 21 +19382.49718 + 31 +0.0 + 0 +LINE + 5 +542 + 8 +0 + 62 + 0 + 10 +5037.499976 + 20 +22132.127867 + 30 +0.0 + 11 +5024.999976 + 21 +22153.778502 + 31 +0.0 + 0 +LINE + 5 +543 + 8 +0 + 62 + 0 + 10 +4999.999976 + 20 +22153.778502 + 30 +0.0 + 11 +4987.499976 + 21 +22175.429137 + 31 +0.0 + 0 +LINE + 5 +544 + 8 +0 + 62 + 0 + 10 +4999.999976 + 20 +22110.477232 + 30 +0.0 + 11 +4987.499976 + 21 +22132.127867 + 31 +0.0 + 0 +LINE + 5 +545 + 8 +0 + 62 + 0 + 10 +4962.499976 + 20 +22175.429137 + 30 +0.0 + 11 +4951.200733 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +546 + 8 +0 + 62 + 0 + 10 +4999.999976 + 20 +22067.175962 + 30 +0.0 + 11 +4987.499976 + 21 +22088.826597 + 31 +0.0 + 0 +LINE + 5 +547 + 8 +0 + 62 + 0 + 10 +4962.499976 + 20 +22132.127867 + 30 +0.0 + 11 +4949.999976 + 21 +22153.778502 + 31 +0.0 + 0 +LINE + 5 +548 + 8 +0 + 62 + 0 + 10 +4999.999976 + 20 +22023.874692 + 30 +0.0 + 11 +4987.499976 + 21 +22045.525327 + 31 +0.0 + 0 +LINE + 5 +549 + 8 +0 + 62 + 0 + 10 +4962.499976 + 20 +22088.826597 + 30 +0.0 + 11 +4949.999976 + 21 +22110.477232 + 31 +0.0 + 0 +LINE + 5 +54A + 8 +0 + 62 + 0 + 10 +4924.999976 + 20 +22153.778502 + 30 +0.0 + 11 +4920.0 + 21 +22162.438715 + 31 +0.0 + 0 +LINE + 5 +54B + 8 +0 + 62 + 0 + 10 +4999.999976 + 20 +21980.573422 + 30 +0.0 + 11 +4987.499976 + 21 +22002.224057 + 31 +0.0 + 0 +LINE + 5 +54C + 8 +0 + 62 + 0 + 10 +4962.499976 + 20 +22045.525327 + 30 +0.0 + 11 +4949.999976 + 21 +22067.175962 + 31 +0.0 + 0 +LINE + 5 +54D + 8 +0 + 62 + 0 + 10 +4924.999976 + 20 +22110.477232 + 30 +0.0 + 11 +4920.0 + 21 +22119.137445 + 31 +0.0 + 0 +LINE + 5 +54E + 8 +0 + 62 + 0 + 10 +4999.999976 + 20 +21937.272152 + 30 +0.0 + 11 +4987.499976 + 21 +21958.922787 + 31 +0.0 + 0 +LINE + 5 +54F + 8 +0 + 62 + 0 + 10 +4962.499976 + 20 +22002.224057 + 30 +0.0 + 11 +4949.999976 + 21 +22023.874692 + 31 +0.0 + 0 +LINE + 5 +550 + 8 +0 + 62 + 0 + 10 +4924.999976 + 20 +22067.175962 + 30 +0.0 + 11 +4920.0 + 21 +22075.836175 + 31 +0.0 + 0 +LINE + 5 +551 + 8 +0 + 62 + 0 + 10 +4999.999976 + 20 +21893.970881 + 30 +0.0 + 11 +4987.499976 + 21 +21915.621517 + 31 +0.0 + 0 +LINE + 5 +552 + 8 +0 + 62 + 0 + 10 +4962.499976 + 20 +21958.922787 + 30 +0.0 + 11 +4949.999976 + 21 +21980.573422 + 31 +0.0 + 0 +LINE + 5 +553 + 8 +0 + 62 + 0 + 10 +4924.999976 + 20 +22023.874692 + 30 +0.0 + 11 +4920.0 + 21 +22032.534905 + 31 +0.0 + 0 +LINE + 5 +554 + 8 +0 + 62 + 0 + 10 +4999.999976 + 20 +21850.669611 + 30 +0.0 + 11 +4987.499976 + 21 +21872.320246 + 31 +0.0 + 0 +LINE + 5 +555 + 8 +0 + 62 + 0 + 10 +4962.499976 + 20 +21915.621517 + 30 +0.0 + 11 +4949.999976 + 21 +21937.272152 + 31 +0.0 + 0 +LINE + 5 +556 + 8 +0 + 62 + 0 + 10 +4924.999976 + 20 +21980.573422 + 30 +0.0 + 11 +4920.0 + 21 +21989.233635 + 31 +0.0 + 0 +LINE + 5 +557 + 8 +0 + 62 + 0 + 10 +4999.999976 + 20 +21807.368341 + 30 +0.0 + 11 +4987.499976 + 21 +21829.018976 + 31 +0.0 + 0 +LINE + 5 +558 + 8 +0 + 62 + 0 + 10 +4962.499976 + 20 +21872.320246 + 30 +0.0 + 11 +4949.999976 + 21 +21893.970882 + 31 +0.0 + 0 +LINE + 5 +559 + 8 +0 + 62 + 0 + 10 +4924.999976 + 20 +21937.272152 + 30 +0.0 + 11 +4920.0 + 21 +21945.932365 + 31 +0.0 + 0 +LINE + 5 +55A + 8 +0 + 62 + 0 + 10 +4999.999976 + 20 +21764.067071 + 30 +0.0 + 11 +4987.499976 + 21 +21785.717706 + 31 +0.0 + 0 +LINE + 5 +55B + 8 +0 + 62 + 0 + 10 +4962.499976 + 20 +21829.018976 + 30 +0.0 + 11 +4949.999976 + 21 +21850.669611 + 31 +0.0 + 0 +LINE + 5 +55C + 8 +0 + 62 + 0 + 10 +4924.999976 + 20 +21893.970882 + 30 +0.0 + 11 +4920.0 + 21 +21902.631095 + 31 +0.0 + 0 +LINE + 5 +55D + 8 +0 + 62 + 0 + 10 +4999.999976 + 20 +21720.765801 + 30 +0.0 + 11 +4987.499976 + 21 +21742.416436 + 31 +0.0 + 0 +LINE + 5 +55E + 8 +0 + 62 + 0 + 10 +4962.499976 + 20 +21785.717706 + 30 +0.0 + 11 +4949.999976 + 21 +21807.368341 + 31 +0.0 + 0 +LINE + 5 +55F + 8 +0 + 62 + 0 + 10 +4924.999976 + 20 +21850.669611 + 30 +0.0 + 11 +4920.0 + 21 +21859.329825 + 31 +0.0 + 0 +LINE + 5 +560 + 8 +0 + 62 + 0 + 10 +4999.999976 + 20 +21677.464531 + 30 +0.0 + 11 +4987.499976 + 21 +21699.115166 + 31 +0.0 + 0 +LINE + 5 +561 + 8 +0 + 62 + 0 + 10 +4962.499976 + 20 +21742.416436 + 30 +0.0 + 11 +4949.999976 + 21 +21764.067071 + 31 +0.0 + 0 +LINE + 5 +562 + 8 +0 + 62 + 0 + 10 +4924.999976 + 20 +21807.368341 + 30 +0.0 + 11 +4920.0 + 21 +21816.028555 + 31 +0.0 + 0 +LINE + 5 +563 + 8 +0 + 62 + 0 + 10 +4999.999977 + 20 +21634.163261 + 30 +0.0 + 11 +4987.499977 + 21 +21655.813896 + 31 +0.0 + 0 +LINE + 5 +564 + 8 +0 + 62 + 0 + 10 +4962.499977 + 20 +21699.115166 + 30 +0.0 + 11 +4949.999977 + 21 +21720.765801 + 31 +0.0 + 0 +LINE + 5 +565 + 8 +0 + 62 + 0 + 10 +4924.999977 + 20 +21764.067071 + 30 +0.0 + 11 +4920.0 + 21 +21772.727285 + 31 +0.0 + 0 +LINE + 5 +566 + 8 +0 + 62 + 0 + 10 +4999.999977 + 20 +21590.86199 + 30 +0.0 + 11 +4987.499977 + 21 +21612.512626 + 31 +0.0 + 0 +LINE + 5 +567 + 8 +0 + 62 + 0 + 10 +4962.499977 + 20 +21655.813896 + 30 +0.0 + 11 +4949.999977 + 21 +21677.464531 + 31 +0.0 + 0 +LINE + 5 +568 + 8 +0 + 62 + 0 + 10 +4924.999977 + 20 +21720.765801 + 30 +0.0 + 11 +4920.0 + 21 +21729.426015 + 31 +0.0 + 0 +LINE + 5 +569 + 8 +0 + 62 + 0 + 10 +4999.999977 + 20 +21547.56072 + 30 +0.0 + 11 +4987.499977 + 21 +21569.211355 + 31 +0.0 + 0 +LINE + 5 +56A + 8 +0 + 62 + 0 + 10 +4962.499977 + 20 +21612.512626 + 30 +0.0 + 11 +4949.999977 + 21 +21634.163261 + 31 +0.0 + 0 +LINE + 5 +56B + 8 +0 + 62 + 0 + 10 +4924.999977 + 20 +21677.464531 + 30 +0.0 + 11 +4920.0 + 21 +21686.124745 + 31 +0.0 + 0 +LINE + 5 +56C + 8 +0 + 62 + 0 + 10 +4999.999977 + 20 +21504.25945 + 30 +0.0 + 11 +4987.499977 + 21 +21525.910085 + 31 +0.0 + 0 +LINE + 5 +56D + 8 +0 + 62 + 0 + 10 +4962.499977 + 20 +21569.211355 + 30 +0.0 + 11 +4949.999977 + 21 +21590.861991 + 31 +0.0 + 0 +LINE + 5 +56E + 8 +0 + 62 + 0 + 10 +4924.999977 + 20 +21634.163261 + 30 +0.0 + 11 +4920.0 + 21 +21642.823475 + 31 +0.0 + 0 +LINE + 5 +56F + 8 +0 + 62 + 0 + 10 +4999.999977 + 20 +21460.95818 + 30 +0.0 + 11 +4987.499977 + 21 +21482.608815 + 31 +0.0 + 0 +LINE + 5 +570 + 8 +0 + 62 + 0 + 10 +4962.499977 + 20 +21525.910085 + 30 +0.0 + 11 +4949.999977 + 21 +21547.56072 + 31 +0.0 + 0 +LINE + 5 +571 + 8 +0 + 62 + 0 + 10 +4924.999977 + 20 +21590.861991 + 30 +0.0 + 11 +4920.0 + 21 +21599.522205 + 31 +0.0 + 0 +LINE + 5 +572 + 8 +0 + 62 + 0 + 10 +4999.999977 + 20 +21417.65691 + 30 +0.0 + 11 +4987.499977 + 21 +21439.307545 + 31 +0.0 + 0 +LINE + 5 +573 + 8 +0 + 62 + 0 + 10 +4962.499977 + 20 +21482.608815 + 30 +0.0 + 11 +4949.999977 + 21 +21504.25945 + 31 +0.0 + 0 +LINE + 5 +574 + 8 +0 + 62 + 0 + 10 +4924.999977 + 20 +21547.56072 + 30 +0.0 + 11 +4920.0 + 21 +21556.220935 + 31 +0.0 + 0 +LINE + 5 +575 + 8 +0 + 62 + 0 + 10 +4999.999977 + 20 +21374.35564 + 30 +0.0 + 11 +4987.499977 + 21 +21396.006275 + 31 +0.0 + 0 +LINE + 5 +576 + 8 +0 + 62 + 0 + 10 +4962.499977 + 20 +21439.307545 + 30 +0.0 + 11 +4949.999977 + 21 +21460.95818 + 31 +0.0 + 0 +LINE + 5 +577 + 8 +0 + 62 + 0 + 10 +4924.999977 + 20 +21504.25945 + 30 +0.0 + 11 +4920.0 + 21 +21512.919665 + 31 +0.0 + 0 +LINE + 5 +578 + 8 +0 + 62 + 0 + 10 +4999.999977 + 20 +21331.05437 + 30 +0.0 + 11 +4987.499977 + 21 +21352.705005 + 31 +0.0 + 0 +LINE + 5 +579 + 8 +0 + 62 + 0 + 10 +4962.499977 + 20 +21396.006275 + 30 +0.0 + 11 +4949.999977 + 21 +21417.65691 + 31 +0.0 + 0 +LINE + 5 +57A + 8 +0 + 62 + 0 + 10 +4924.999977 + 20 +21460.95818 + 30 +0.0 + 11 +4920.0 + 21 +21469.618395 + 31 +0.0 + 0 +LINE + 5 +57B + 8 +0 + 62 + 0 + 10 +4999.999977 + 20 +21287.753099 + 30 +0.0 + 11 +4987.499977 + 21 +21309.403735 + 31 +0.0 + 0 +LINE + 5 +57C + 8 +0 + 62 + 0 + 10 +4962.499977 + 20 +21352.705005 + 30 +0.0 + 11 +4949.999977 + 21 +21374.35564 + 31 +0.0 + 0 +LINE + 5 +57D + 8 +0 + 62 + 0 + 10 +4924.999977 + 20 +21417.65691 + 30 +0.0 + 11 +4920.0 + 21 +21426.317125 + 31 +0.0 + 0 +LINE + 5 +57E + 8 +0 + 62 + 0 + 10 +4999.999977 + 20 +21244.451829 + 30 +0.0 + 11 +4987.499977 + 21 +21266.102464 + 31 +0.0 + 0 +LINE + 5 +57F + 8 +0 + 62 + 0 + 10 +4962.499977 + 20 +21309.403735 + 30 +0.0 + 11 +4949.999977 + 21 +21331.05437 + 31 +0.0 + 0 +LINE + 5 +580 + 8 +0 + 62 + 0 + 10 +4924.999977 + 20 +21374.35564 + 30 +0.0 + 11 +4920.0 + 21 +21383.015855 + 31 +0.0 + 0 +LINE + 5 +581 + 8 +0 + 62 + 0 + 10 +4999.999977 + 20 +21201.150559 + 30 +0.0 + 11 +4987.499977 + 21 +21222.801194 + 31 +0.0 + 0 +LINE + 5 +582 + 8 +0 + 62 + 0 + 10 +4962.499977 + 20 +21266.102464 + 30 +0.0 + 11 +4949.999977 + 21 +21287.7531 + 31 +0.0 + 0 +LINE + 5 +583 + 8 +0 + 62 + 0 + 10 +4924.999977 + 20 +21331.05437 + 30 +0.0 + 11 +4920.0 + 21 +21339.714585 + 31 +0.0 + 0 +LINE + 5 +584 + 8 +0 + 62 + 0 + 10 +4999.999977 + 20 +21157.849289 + 30 +0.0 + 11 +4987.499977 + 21 +21179.499924 + 31 +0.0 + 0 +LINE + 5 +585 + 8 +0 + 62 + 0 + 10 +4962.499977 + 20 +21222.801194 + 30 +0.0 + 11 +4949.999977 + 21 +21244.451829 + 31 +0.0 + 0 +LINE + 5 +586 + 8 +0 + 62 + 0 + 10 +4924.999977 + 20 +21287.7531 + 30 +0.0 + 11 +4920.0 + 21 +21296.413315 + 31 +0.0 + 0 +LINE + 5 +587 + 8 +0 + 62 + 0 + 10 +4999.999978 + 20 +21114.548019 + 30 +0.0 + 11 +4987.499978 + 21 +21136.198654 + 31 +0.0 + 0 +LINE + 5 +588 + 8 +0 + 62 + 0 + 10 +4962.499978 + 20 +21179.499924 + 30 +0.0 + 11 +4949.999978 + 21 +21201.150559 + 31 +0.0 + 0 +LINE + 5 +589 + 8 +0 + 62 + 0 + 10 +4924.999978 + 20 +21244.451829 + 30 +0.0 + 11 +4920.0 + 21 +21253.112045 + 31 +0.0 + 0 +LINE + 5 +58A + 8 +0 + 62 + 0 + 10 +4999.999978 + 20 +21071.246749 + 30 +0.0 + 11 +4987.499978 + 21 +21092.897384 + 31 +0.0 + 0 +LINE + 5 +58B + 8 +0 + 62 + 0 + 10 +4962.499978 + 20 +21136.198654 + 30 +0.0 + 11 +4949.999978 + 21 +21157.849289 + 31 +0.0 + 0 +LINE + 5 +58C + 8 +0 + 62 + 0 + 10 +4924.999978 + 20 +21201.150559 + 30 +0.0 + 11 +4920.0 + 21 +21209.810775 + 31 +0.0 + 0 +LINE + 5 +58D + 8 +0 + 62 + 0 + 10 +4999.999978 + 20 +21027.945479 + 30 +0.0 + 11 +4987.499978 + 21 +21049.596114 + 31 +0.0 + 0 +LINE + 5 +58E + 8 +0 + 62 + 0 + 10 +4962.499978 + 20 +21092.897384 + 30 +0.0 + 11 +4949.999978 + 21 +21114.548019 + 31 +0.0 + 0 +LINE + 5 +58F + 8 +0 + 62 + 0 + 10 +4924.999978 + 20 +21157.849289 + 30 +0.0 + 11 +4920.0 + 21 +21166.509505 + 31 +0.0 + 0 +LINE + 5 +590 + 8 +0 + 62 + 0 + 10 +4999.999978 + 20 +20984.644208 + 30 +0.0 + 11 +4987.499978 + 21 +21006.294844 + 31 +0.0 + 0 +LINE + 5 +591 + 8 +0 + 62 + 0 + 10 +4962.499978 + 20 +21049.596114 + 30 +0.0 + 11 +4949.999978 + 21 +21071.246749 + 31 +0.0 + 0 +LINE + 5 +592 + 8 +0 + 62 + 0 + 10 +4924.999978 + 20 +21114.548019 + 30 +0.0 + 11 +4920.0 + 21 +21123.208235 + 31 +0.0 + 0 +LINE + 5 +593 + 8 +0 + 62 + 0 + 10 +4999.999978 + 20 +20941.342938 + 30 +0.0 + 11 +4987.499978 + 21 +20962.993573 + 31 +0.0 + 0 +LINE + 5 +594 + 8 +0 + 62 + 0 + 10 +4962.499978 + 20 +21006.294844 + 30 +0.0 + 11 +4949.999978 + 21 +21027.945479 + 31 +0.0 + 0 +LINE + 5 +595 + 8 +0 + 62 + 0 + 10 +4924.999978 + 20 +21071.246749 + 30 +0.0 + 11 +4920.0 + 21 +21079.906965 + 31 +0.0 + 0 +LINE + 5 +596 + 8 +0 + 62 + 0 + 10 +4999.999978 + 20 +20898.041668 + 30 +0.0 + 11 +4987.499978 + 21 +20919.692303 + 31 +0.0 + 0 +LINE + 5 +597 + 8 +0 + 62 + 0 + 10 +4962.499978 + 20 +20962.993573 + 30 +0.0 + 11 +4949.999978 + 21 +20984.644209 + 31 +0.0 + 0 +LINE + 5 +598 + 8 +0 + 62 + 0 + 10 +4924.999978 + 20 +21027.945479 + 30 +0.0 + 11 +4920.0 + 21 +21036.605695 + 31 +0.0 + 0 +LINE + 5 +599 + 8 +0 + 62 + 0 + 10 +4999.999978 + 20 +20854.740398 + 30 +0.0 + 11 +4987.499978 + 21 +20876.391033 + 31 +0.0 + 0 +LINE + 5 +59A + 8 +0 + 62 + 0 + 10 +4962.499978 + 20 +20919.692303 + 30 +0.0 + 11 +4949.999978 + 21 +20941.342938 + 31 +0.0 + 0 +LINE + 5 +59B + 8 +0 + 62 + 0 + 10 +4924.999978 + 20 +20984.644209 + 30 +0.0 + 11 +4920.0 + 21 +20993.304425 + 31 +0.0 + 0 +LINE + 5 +59C + 8 +0 + 62 + 0 + 10 +4999.999978 + 20 +20811.439128 + 30 +0.0 + 11 +4987.499978 + 21 +20833.089763 + 31 +0.0 + 0 +LINE + 5 +59D + 8 +0 + 62 + 0 + 10 +4962.499978 + 20 +20876.391033 + 30 +0.0 + 11 +4949.999978 + 21 +20898.041668 + 31 +0.0 + 0 +LINE + 5 +59E + 8 +0 + 62 + 0 + 10 +4924.999978 + 20 +20941.342938 + 30 +0.0 + 11 +4920.0 + 21 +20950.003155 + 31 +0.0 + 0 +LINE + 5 +59F + 8 +0 + 62 + 0 + 10 +4999.999978 + 20 +20768.137858 + 30 +0.0 + 11 +4987.499978 + 21 +20789.788493 + 31 +0.0 + 0 +LINE + 5 +5A0 + 8 +0 + 62 + 0 + 10 +4962.499978 + 20 +20833.089763 + 30 +0.0 + 11 +4949.999978 + 21 +20854.740398 + 31 +0.0 + 0 +LINE + 5 +5A1 + 8 +0 + 62 + 0 + 10 +4924.999978 + 20 +20898.041668 + 30 +0.0 + 11 +4920.0 + 21 +20906.701885 + 31 +0.0 + 0 +LINE + 5 +5A2 + 8 +0 + 62 + 0 + 10 +4999.999978 + 20 +20724.836588 + 30 +0.0 + 11 +4987.499978 + 21 +20746.487223 + 31 +0.0 + 0 +LINE + 5 +5A3 + 8 +0 + 62 + 0 + 10 +4962.499978 + 20 +20789.788493 + 30 +0.0 + 11 +4949.999978 + 21 +20811.439128 + 31 +0.0 + 0 +LINE + 5 +5A4 + 8 +0 + 62 + 0 + 10 +4924.999978 + 20 +20854.740398 + 30 +0.0 + 11 +4920.0 + 21 +20863.400615 + 31 +0.0 + 0 +LINE + 5 +5A5 + 8 +0 + 62 + 0 + 10 +4999.999978 + 20 +20681.535317 + 30 +0.0 + 11 +4987.499978 + 21 +20703.185953 + 31 +0.0 + 0 +LINE + 5 +5A6 + 8 +0 + 62 + 0 + 10 +4962.499978 + 20 +20746.487223 + 30 +0.0 + 11 +4949.999978 + 21 +20768.137858 + 31 +0.0 + 0 +LINE + 5 +5A7 + 8 +0 + 62 + 0 + 10 +4924.999978 + 20 +20811.439128 + 30 +0.0 + 11 +4920.0 + 21 +20820.099345 + 31 +0.0 + 0 +LINE + 5 +5A8 + 8 +0 + 62 + 0 + 10 +4999.999978 + 20 +20638.234047 + 30 +0.0 + 11 +4987.499978 + 21 +20659.884682 + 31 +0.0 + 0 +LINE + 5 +5A9 + 8 +0 + 62 + 0 + 10 +4962.499978 + 20 +20703.185953 + 30 +0.0 + 11 +4949.999978 + 21 +20724.836588 + 31 +0.0 + 0 +LINE + 5 +5AA + 8 +0 + 62 + 0 + 10 +4924.999978 + 20 +20768.137858 + 30 +0.0 + 11 +4920.0 + 21 +20776.798075 + 31 +0.0 + 0 +LINE + 5 +5AB + 8 +0 + 62 + 0 + 10 +4999.999979 + 20 +20594.932777 + 30 +0.0 + 11 +4987.499979 + 21 +20616.583412 + 31 +0.0 + 0 +LINE + 5 +5AC + 8 +0 + 62 + 0 + 10 +4962.499979 + 20 +20659.884682 + 30 +0.0 + 11 +4949.999979 + 21 +20681.535318 + 31 +0.0 + 0 +LINE + 5 +5AD + 8 +0 + 62 + 0 + 10 +4924.999979 + 20 +20724.836588 + 30 +0.0 + 11 +4920.0 + 21 +20733.496805 + 31 +0.0 + 0 +LINE + 5 +5AE + 8 +0 + 62 + 0 + 10 +4999.999979 + 20 +20551.631507 + 30 +0.0 + 11 +4987.499979 + 21 +20573.282142 + 31 +0.0 + 0 +LINE + 5 +5AF + 8 +0 + 62 + 0 + 10 +4962.499979 + 20 +20616.583412 + 30 +0.0 + 11 +4949.999979 + 21 +20638.234047 + 31 +0.0 + 0 +LINE + 5 +5B0 + 8 +0 + 62 + 0 + 10 +4924.999979 + 20 +20681.535318 + 30 +0.0 + 11 +4920.0 + 21 +20690.195535 + 31 +0.0 + 0 +LINE + 5 +5B1 + 8 +0 + 62 + 0 + 10 +4999.999979 + 20 +20508.330237 + 30 +0.0 + 11 +4987.499979 + 21 +20529.980872 + 31 +0.0 + 0 +LINE + 5 +5B2 + 8 +0 + 62 + 0 + 10 +4962.499979 + 20 +20573.282142 + 30 +0.0 + 11 +4949.999979 + 21 +20594.932777 + 31 +0.0 + 0 +LINE + 5 +5B3 + 8 +0 + 62 + 0 + 10 +4924.999979 + 20 +20638.234047 + 30 +0.0 + 11 +4920.0 + 21 +20646.894265 + 31 +0.0 + 0 +LINE + 5 +5B4 + 8 +0 + 62 + 0 + 10 +4999.999979 + 20 +20465.028967 + 30 +0.0 + 11 +4987.499979 + 21 +20486.679602 + 31 +0.0 + 0 +LINE + 5 +5B5 + 8 +0 + 62 + 0 + 10 +4962.499979 + 20 +20529.980872 + 30 +0.0 + 11 +4949.999979 + 21 +20551.631507 + 31 +0.0 + 0 +LINE + 5 +5B6 + 8 +0 + 62 + 0 + 10 +4924.999979 + 20 +20594.932777 + 30 +0.0 + 11 +4920.0 + 21 +20603.592995 + 31 +0.0 + 0 +LINE + 5 +5B7 + 8 +0 + 62 + 0 + 10 +4999.999979 + 20 +20421.727697 + 30 +0.0 + 11 +4987.499979 + 21 +20443.378332 + 31 +0.0 + 0 +LINE + 5 +5B8 + 8 +0 + 62 + 0 + 10 +4962.499979 + 20 +20486.679602 + 30 +0.0 + 11 +4949.999979 + 21 +20508.330237 + 31 +0.0 + 0 +LINE + 5 +5B9 + 8 +0 + 62 + 0 + 10 +4924.999979 + 20 +20551.631507 + 30 +0.0 + 11 +4920.0 + 21 +20560.291725 + 31 +0.0 + 0 +LINE + 5 +5BA + 8 +0 + 62 + 0 + 10 +4999.999979 + 20 +20378.426426 + 30 +0.0 + 11 +4987.499979 + 21 +20400.077062 + 31 +0.0 + 0 +LINE + 5 +5BB + 8 +0 + 62 + 0 + 10 +4962.499979 + 20 +20443.378332 + 30 +0.0 + 11 +4949.999979 + 21 +20465.028967 + 31 +0.0 + 0 +LINE + 5 +5BC + 8 +0 + 62 + 0 + 10 +4924.999979 + 20 +20508.330237 + 30 +0.0 + 11 +4920.0 + 21 +20516.990455 + 31 +0.0 + 0 +LINE + 5 +5BD + 8 +0 + 62 + 0 + 10 +4999.999979 + 20 +20335.125156 + 30 +0.0 + 11 +4987.499979 + 21 +20356.775791 + 31 +0.0 + 0 +LINE + 5 +5BE + 8 +0 + 62 + 0 + 10 +4962.499979 + 20 +20400.077062 + 30 +0.0 + 11 +4949.999979 + 21 +20421.727697 + 31 +0.0 + 0 +LINE + 5 +5BF + 8 +0 + 62 + 0 + 10 +4924.999979 + 20 +20465.028967 + 30 +0.0 + 11 +4920.0 + 21 +20473.689185 + 31 +0.0 + 0 +LINE + 5 +5C0 + 8 +0 + 62 + 0 + 10 +4999.999979 + 20 +20291.823886 + 30 +0.0 + 11 +4987.499979 + 21 +20313.474521 + 31 +0.0 + 0 +LINE + 5 +5C1 + 8 +0 + 62 + 0 + 10 +4962.499979 + 20 +20356.775791 + 30 +0.0 + 11 +4949.999979 + 21 +20378.426427 + 31 +0.0 + 0 +LINE + 5 +5C2 + 8 +0 + 62 + 0 + 10 +4924.999979 + 20 +20421.727697 + 30 +0.0 + 11 +4920.0 + 21 +20430.387915 + 31 +0.0 + 0 +LINE + 5 +5C3 + 8 +0 + 62 + 0 + 10 +4999.999979 + 20 +20248.522616 + 30 +0.0 + 11 +4987.499979 + 21 +20270.173251 + 31 +0.0 + 0 +LINE + 5 +5C4 + 8 +0 + 62 + 0 + 10 +4962.499979 + 20 +20313.474521 + 30 +0.0 + 11 +4949.999979 + 21 +20335.125156 + 31 +0.0 + 0 +LINE + 5 +5C5 + 8 +0 + 62 + 0 + 10 +4924.999979 + 20 +20378.426427 + 30 +0.0 + 11 +4920.0 + 21 +20387.086645 + 31 +0.0 + 0 +LINE + 5 +5C6 + 8 +0 + 62 + 0 + 10 +4999.999979 + 20 +20205.221346 + 30 +0.0 + 11 +4987.499979 + 21 +20226.871981 + 31 +0.0 + 0 +LINE + 5 +5C7 + 8 +0 + 62 + 0 + 10 +4962.499979 + 20 +20270.173251 + 30 +0.0 + 11 +4949.999979 + 21 +20291.823886 + 31 +0.0 + 0 +LINE + 5 +5C8 + 8 +0 + 62 + 0 + 10 +4924.999979 + 20 +20335.125156 + 30 +0.0 + 11 +4920.0 + 21 +20343.785375 + 31 +0.0 + 0 +LINE + 5 +5C9 + 8 +0 + 62 + 0 + 10 +4999.999979 + 20 +20161.920076 + 30 +0.0 + 11 +4987.499979 + 21 +20183.570711 + 31 +0.0 + 0 +LINE + 5 +5CA + 8 +0 + 62 + 0 + 10 +4962.499979 + 20 +20226.871981 + 30 +0.0 + 11 +4949.999979 + 21 +20248.522616 + 31 +0.0 + 0 +LINE + 5 +5CB + 8 +0 + 62 + 0 + 10 +4924.999979 + 20 +20291.823886 + 30 +0.0 + 11 +4920.0 + 21 +20300.484105 + 31 +0.0 + 0 +LINE + 5 +5CC + 8 +0 + 62 + 0 + 10 +4999.999979 + 20 +20118.618806 + 30 +0.0 + 11 +4987.499979 + 21 +20140.269441 + 31 +0.0 + 0 +LINE + 5 +5CD + 8 +0 + 62 + 0 + 10 +4962.499979 + 20 +20183.570711 + 30 +0.0 + 11 +4949.999979 + 21 +20205.221346 + 31 +0.0 + 0 +LINE + 5 +5CE + 8 +0 + 62 + 0 + 10 +4924.999979 + 20 +20248.522616 + 30 +0.0 + 11 +4920.0 + 21 +20257.182835 + 31 +0.0 + 0 +LINE + 5 +5CF + 8 +0 + 62 + 0 + 10 +4999.99998 + 20 +20075.317535 + 30 +0.0 + 11 +4987.49998 + 21 +20096.968171 + 31 +0.0 + 0 +LINE + 5 +5D0 + 8 +0 + 62 + 0 + 10 +4962.49998 + 20 +20140.269441 + 30 +0.0 + 11 +4949.99998 + 21 +20161.920076 + 31 +0.0 + 0 +LINE + 5 +5D1 + 8 +0 + 62 + 0 + 10 +4924.99998 + 20 +20205.221346 + 30 +0.0 + 11 +4920.0 + 21 +20213.881565 + 31 +0.0 + 0 +LINE + 5 +5D2 + 8 +0 + 62 + 0 + 10 +4999.99998 + 20 +20032.016265 + 30 +0.0 + 11 +4987.49998 + 21 +20053.6669 + 31 +0.0 + 0 +LINE + 5 +5D3 + 8 +0 + 62 + 0 + 10 +4962.49998 + 20 +20096.968171 + 30 +0.0 + 11 +4949.99998 + 21 +20118.618806 + 31 +0.0 + 0 +LINE + 5 +5D4 + 8 +0 + 62 + 0 + 10 +4924.99998 + 20 +20161.920076 + 30 +0.0 + 11 +4920.0 + 21 +20170.580295 + 31 +0.0 + 0 +LINE + 5 +5D5 + 8 +0 + 62 + 0 + 10 +4999.99998 + 20 +19988.714995 + 30 +0.0 + 11 +4987.49998 + 21 +20010.36563 + 31 +0.0 + 0 +LINE + 5 +5D6 + 8 +0 + 62 + 0 + 10 +4962.49998 + 20 +20053.6669 + 30 +0.0 + 11 +4949.99998 + 21 +20075.317536 + 31 +0.0 + 0 +LINE + 5 +5D7 + 8 +0 + 62 + 0 + 10 +4924.99998 + 20 +20118.618806 + 30 +0.0 + 11 +4920.0 + 21 +20127.279025 + 31 +0.0 + 0 +LINE + 5 +5D8 + 8 +0 + 62 + 0 + 10 +4999.99998 + 20 +19945.413725 + 30 +0.0 + 11 +4987.49998 + 21 +19967.06436 + 31 +0.0 + 0 +LINE + 5 +5D9 + 8 +0 + 62 + 0 + 10 +4962.49998 + 20 +20010.36563 + 30 +0.0 + 11 +4949.99998 + 21 +20032.016265 + 31 +0.0 + 0 +LINE + 5 +5DA + 8 +0 + 62 + 0 + 10 +4924.99998 + 20 +20075.317536 + 30 +0.0 + 11 +4920.0 + 21 +20083.977755 + 31 +0.0 + 0 +LINE + 5 +5DB + 8 +0 + 62 + 0 + 10 +4999.99998 + 20 +19902.112455 + 30 +0.0 + 11 +4987.49998 + 21 +19923.76309 + 31 +0.0 + 0 +LINE + 5 +5DC + 8 +0 + 62 + 0 + 10 +4962.49998 + 20 +19967.06436 + 30 +0.0 + 11 +4949.99998 + 21 +19988.714995 + 31 +0.0 + 0 +LINE + 5 +5DD + 8 +0 + 62 + 0 + 10 +4924.99998 + 20 +20032.016265 + 30 +0.0 + 11 +4920.0 + 21 +20040.676485 + 31 +0.0 + 0 +LINE + 5 +5DE + 8 +0 + 62 + 0 + 10 +4999.99998 + 20 +19858.811185 + 30 +0.0 + 11 +4987.49998 + 21 +19880.46182 + 31 +0.0 + 0 +LINE + 5 +5DF + 8 +0 + 62 + 0 + 10 +4962.49998 + 20 +19923.76309 + 30 +0.0 + 11 +4949.99998 + 21 +19945.413725 + 31 +0.0 + 0 +LINE + 5 +5E0 + 8 +0 + 62 + 0 + 10 +4924.99998 + 20 +19988.714995 + 30 +0.0 + 11 +4920.0 + 21 +19997.375215 + 31 +0.0 + 0 +LINE + 5 +5E1 + 8 +0 + 62 + 0 + 10 +4999.99998 + 20 +19815.509915 + 30 +0.0 + 11 +4987.49998 + 21 +19837.16055 + 31 +0.0 + 0 +LINE + 5 +5E2 + 8 +0 + 62 + 0 + 10 +4962.49998 + 20 +19880.46182 + 30 +0.0 + 11 +4949.99998 + 21 +19902.112455 + 31 +0.0 + 0 +LINE + 5 +5E3 + 8 +0 + 62 + 0 + 10 +4924.99998 + 20 +19945.413725 + 30 +0.0 + 11 +4920.0 + 21 +19954.073945 + 31 +0.0 + 0 +LINE + 5 +5E4 + 8 +0 + 62 + 0 + 10 +4999.99998 + 20 +19772.208644 + 30 +0.0 + 11 +4987.49998 + 21 +19793.85928 + 31 +0.0 + 0 +LINE + 5 +5E5 + 8 +0 + 62 + 0 + 10 +4962.49998 + 20 +19837.16055 + 30 +0.0 + 11 +4949.99998 + 21 +19858.811185 + 31 +0.0 + 0 +LINE + 5 +5E6 + 8 +0 + 62 + 0 + 10 +4924.99998 + 20 +19902.112455 + 30 +0.0 + 11 +4920.0 + 21 +19910.772675 + 31 +0.0 + 0 +LINE + 5 +5E7 + 8 +0 + 62 + 0 + 10 +4999.99998 + 20 +19728.907374 + 30 +0.0 + 11 +4987.49998 + 21 +19750.558009 + 31 +0.0 + 0 +LINE + 5 +5E8 + 8 +0 + 62 + 0 + 10 +4962.49998 + 20 +19793.85928 + 30 +0.0 + 11 +4949.99998 + 21 +19815.509915 + 31 +0.0 + 0 +LINE + 5 +5E9 + 8 +0 + 62 + 0 + 10 +4924.99998 + 20 +19858.811185 + 30 +0.0 + 11 +4920.0 + 21 +19867.471405 + 31 +0.0 + 0 +LINE + 5 +5EA + 8 +0 + 62 + 0 + 10 +4999.99998 + 20 +19685.606104 + 30 +0.0 + 11 +4987.49998 + 21 +19707.256739 + 31 +0.0 + 0 +LINE + 5 +5EB + 8 +0 + 62 + 0 + 10 +4962.49998 + 20 +19750.558009 + 30 +0.0 + 11 +4949.99998 + 21 +19772.208645 + 31 +0.0 + 0 +LINE + 5 +5EC + 8 +0 + 62 + 0 + 10 +4924.99998 + 20 +19815.509915 + 30 +0.0 + 11 +4920.0 + 21 +19824.170135 + 31 +0.0 + 0 +LINE + 5 +5ED + 8 +0 + 62 + 0 + 10 +4999.99998 + 20 +19642.304834 + 30 +0.0 + 11 +4987.49998 + 21 +19663.955469 + 31 +0.0 + 0 +LINE + 5 +5EE + 8 +0 + 62 + 0 + 10 +4962.49998 + 20 +19707.256739 + 30 +0.0 + 11 +4949.99998 + 21 +19728.907374 + 31 +0.0 + 0 +LINE + 5 +5EF + 8 +0 + 62 + 0 + 10 +4924.99998 + 20 +19772.208645 + 30 +0.0 + 11 +4920.0 + 21 +19780.868865 + 31 +0.0 + 0 +LINE + 5 +5F0 + 8 +0 + 62 + 0 + 10 +4999.99998 + 20 +19599.003564 + 30 +0.0 + 11 +4987.49998 + 21 +19620.654199 + 31 +0.0 + 0 +LINE + 5 +5F1 + 8 +0 + 62 + 0 + 10 +4962.49998 + 20 +19663.955469 + 30 +0.0 + 11 +4949.99998 + 21 +19685.606104 + 31 +0.0 + 0 +LINE + 5 +5F2 + 8 +0 + 62 + 0 + 10 +4924.99998 + 20 +19728.907374 + 30 +0.0 + 11 +4920.0 + 21 +19737.567595 + 31 +0.0 + 0 +LINE + 5 +5F3 + 8 +0 + 62 + 0 + 10 +4999.99998 + 20 +19555.702294 + 30 +0.0 + 11 +4987.49998 + 21 +19577.352929 + 31 +0.0 + 0 +LINE + 5 +5F4 + 8 +0 + 62 + 0 + 10 +4962.49998 + 20 +19620.654199 + 30 +0.0 + 11 +4949.99998 + 21 +19642.304834 + 31 +0.0 + 0 +LINE + 5 +5F5 + 8 +0 + 62 + 0 + 10 +4924.99998 + 20 +19685.606104 + 30 +0.0 + 11 +4920.0 + 21 +19694.266325 + 31 +0.0 + 0 +LINE + 5 +5F6 + 8 +0 + 62 + 0 + 10 +4999.999981 + 20 +19512.401024 + 30 +0.0 + 11 +4987.499981 + 21 +19534.051659 + 31 +0.0 + 0 +LINE + 5 +5F7 + 8 +0 + 62 + 0 + 10 +4962.499981 + 20 +19577.352929 + 30 +0.0 + 11 +4949.999981 + 21 +19599.003564 + 31 +0.0 + 0 +LINE + 5 +5F8 + 8 +0 + 62 + 0 + 10 +4924.999981 + 20 +19642.304834 + 30 +0.0 + 11 +4920.0 + 21 +19650.965055 + 31 +0.0 + 0 +LINE + 5 +5F9 + 8 +0 + 62 + 0 + 10 +4999.999981 + 20 +19469.099753 + 30 +0.0 + 11 +4987.499981 + 21 +19490.750389 + 31 +0.0 + 0 +LINE + 5 +5FA + 8 +0 + 62 + 0 + 10 +4962.499981 + 20 +19534.051659 + 30 +0.0 + 11 +4949.999981 + 21 +19555.702294 + 31 +0.0 + 0 +LINE + 5 +5FB + 8 +0 + 62 + 0 + 10 +4924.999981 + 20 +19599.003564 + 30 +0.0 + 11 +4920.0 + 21 +19607.663785 + 31 +0.0 + 0 +LINE + 5 +5FC + 8 +0 + 62 + 0 + 10 +4999.999981 + 20 +19425.798483 + 30 +0.0 + 11 +4987.499981 + 21 +19447.449118 + 31 +0.0 + 0 +LINE + 5 +5FD + 8 +0 + 62 + 0 + 10 +4962.499981 + 20 +19490.750389 + 30 +0.0 + 11 +4949.999981 + 21 +19512.401024 + 31 +0.0 + 0 +LINE + 5 +5FE + 8 +0 + 62 + 0 + 10 +4924.999981 + 20 +19555.702294 + 30 +0.0 + 11 +4920.0 + 21 +19564.362515 + 31 +0.0 + 0 +LINE + 5 +5FF + 8 +0 + 62 + 0 + 10 +4999.999981 + 20 +19382.497213 + 30 +0.0 + 11 +4987.499981 + 21 +19404.147848 + 31 +0.0 + 0 +LINE + 5 +600 + 8 +0 + 62 + 0 + 10 +4962.499981 + 20 +19447.449118 + 30 +0.0 + 11 +4949.999981 + 21 +19469.099754 + 31 +0.0 + 0 +LINE + 5 +601 + 8 +0 + 62 + 0 + 10 +4924.999981 + 20 +19512.401024 + 30 +0.0 + 11 +4920.0 + 21 +19521.061245 + 31 +0.0 + 0 +LINE + 5 +602 + 8 +0 + 62 + 0 + 10 +4962.499981 + 20 +19404.147848 + 30 +0.0 + 11 +4949.999981 + 21 +19425.798483 + 31 +0.0 + 0 +LINE + 5 +603 + 8 +0 + 62 + 0 + 10 +4924.999981 + 20 +19469.099754 + 30 +0.0 + 11 +4920.0 + 21 +19477.759975 + 31 +0.0 + 0 +LINE + 5 +604 + 8 +0 + 62 + 0 + 10 +4960.82369 + 20 +19363.75 + 30 +0.0 + 11 +4949.999981 + 21 +19382.497213 + 31 +0.0 + 0 +LINE + 5 +605 + 8 +0 + 62 + 0 + 10 +4924.999981 + 20 +19425.798483 + 30 +0.0 + 11 +4920.0 + 21 +19434.458705 + 31 +0.0 + 0 +LINE + 5 +606 + 8 +0 + 62 + 0 + 10 +4924.999981 + 20 +19382.497213 + 30 +0.0 + 11 +4920.0 + 21 +19391.157435 + 31 +0.0 + 0 +LINE + 5 +607 + 8 +0 + 62 + 0 + 10 +5072.388754 + 20 +22115.0 + 30 +0.0 + 11 +5062.499975 + 21 +22132.127867 + 31 +0.0 + 0 +LINE + 5 +608 + 8 +0 + 62 + 0 + 10 +5037.499975 + 20 +22175.429137 + 30 +0.0 + 11 +5026.200733 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +609 + 8 +0 + 62 + 0 + 10 +5074.999975 + 20 +22153.778502 + 30 +0.0 + 11 +5062.499975 + 21 +22175.429137 + 31 +0.0 + 0 +LINE + 5 +60A + 8 +0 + 62 + 0 + 10 +5112.499975 + 20 +22132.127867 + 30 +0.0 + 11 +5099.999975 + 21 +22153.778502 + 31 +0.0 + 0 +LINE + 5 +60B + 8 +0 + 62 + 0 + 10 +5147.388754 + 20 +22115.0 + 30 +0.0 + 11 +5137.499975 + 21 +22132.127867 + 31 +0.0 + 0 +LINE + 5 +60C + 8 +0 + 62 + 0 + 10 +5112.499975 + 20 +22175.429137 + 30 +0.0 + 11 +5101.200732 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +60D + 8 +0 + 62 + 0 + 10 +5149.999975 + 20 +22153.778502 + 30 +0.0 + 11 +5137.499975 + 21 +22175.429137 + 31 +0.0 + 0 +LINE + 5 +60E + 8 +0 + 62 + 0 + 10 +5187.499975 + 20 +22132.127867 + 30 +0.0 + 11 +5174.999975 + 21 +22153.778502 + 31 +0.0 + 0 +LINE + 5 +60F + 8 +0 + 62 + 0 + 10 +5222.388753 + 20 +22115.0 + 30 +0.0 + 11 +5212.499975 + 21 +22132.127867 + 31 +0.0 + 0 +LINE + 5 +610 + 8 +0 + 62 + 0 + 10 +5187.499975 + 20 +22175.429137 + 30 +0.0 + 11 +5176.200732 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +611 + 8 +0 + 62 + 0 + 10 +5224.999975 + 20 +22153.778502 + 30 +0.0 + 11 +5212.499975 + 21 +22175.429137 + 31 +0.0 + 0 +LINE + 5 +612 + 8 +0 + 62 + 0 + 10 +5262.499975 + 20 +22132.127867 + 30 +0.0 + 11 +5249.999975 + 21 +22153.778502 + 31 +0.0 + 0 +LINE + 5 +613 + 8 +0 + 62 + 0 + 10 +5297.388753 + 20 +22115.0 + 30 +0.0 + 11 +5287.499975 + 21 +22132.127867 + 31 +0.0 + 0 +LINE + 5 +614 + 8 +0 + 62 + 0 + 10 +5262.499975 + 20 +22175.429137 + 30 +0.0 + 11 +5251.200732 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +615 + 8 +0 + 62 + 0 + 10 +5299.999975 + 20 +22153.778502 + 30 +0.0 + 11 +5287.499975 + 21 +22175.429137 + 31 +0.0 + 0 +LINE + 5 +616 + 8 +0 + 62 + 0 + 10 +5337.499975 + 20 +22132.127867 + 30 +0.0 + 11 +5324.999975 + 21 +22153.778502 + 31 +0.0 + 0 +LINE + 5 +617 + 8 +0 + 62 + 0 + 10 +5372.388753 + 20 +22115.0 + 30 +0.0 + 11 +5362.499974 + 21 +22132.127867 + 31 +0.0 + 0 +LINE + 5 +618 + 8 +0 + 62 + 0 + 10 +5337.499974 + 20 +22175.429137 + 30 +0.0 + 11 +5326.200731 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +619 + 8 +0 + 62 + 0 + 10 +5374.999974 + 20 +22153.778502 + 30 +0.0 + 11 +5362.499974 + 21 +22175.429137 + 31 +0.0 + 0 +LINE + 5 +61A + 8 +0 + 62 + 0 + 10 +5412.499974 + 20 +22132.127866 + 30 +0.0 + 11 +5399.999974 + 21 +22153.778502 + 31 +0.0 + 0 +LINE + 5 +61B + 8 +0 + 62 + 0 + 10 +5447.388752 + 20 +22115.0 + 30 +0.0 + 11 +5437.499974 + 21 +22132.127866 + 31 +0.0 + 0 +LINE + 5 +61C + 8 +0 + 62 + 0 + 10 +5412.499974 + 20 +22175.429137 + 30 +0.0 + 11 +5401.200731 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +61D + 8 +0 + 62 + 0 + 10 +5449.999974 + 20 +22153.778501 + 30 +0.0 + 11 +5437.499974 + 21 +22175.429137 + 31 +0.0 + 0 +LINE + 5 +61E + 8 +0 + 62 + 0 + 10 +5487.499974 + 20 +22132.127866 + 30 +0.0 + 11 +5474.999974 + 21 +22153.778501 + 31 +0.0 + 0 +LINE + 5 +61F + 8 +0 + 62 + 0 + 10 +5522.388752 + 20 +22115.0 + 30 +0.0 + 11 +5512.499974 + 21 +22132.127866 + 31 +0.0 + 0 +LINE + 5 +620 + 8 +0 + 62 + 0 + 10 +5487.499974 + 20 +22175.429136 + 30 +0.0 + 11 +5476.200731 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +621 + 8 +0 + 62 + 0 + 10 +5524.999974 + 20 +22153.778501 + 30 +0.0 + 11 +5512.499974 + 21 +22175.429136 + 31 +0.0 + 0 +LINE + 5 +622 + 8 +0 + 62 + 0 + 10 +5562.499974 + 20 +22132.127866 + 30 +0.0 + 11 +5549.999974 + 21 +22153.778501 + 31 +0.0 + 0 +LINE + 5 +623 + 8 +0 + 62 + 0 + 10 +5597.388752 + 20 +22115.0 + 30 +0.0 + 11 +5587.499974 + 21 +22132.127866 + 31 +0.0 + 0 +LINE + 5 +624 + 8 +0 + 62 + 0 + 10 +5562.499974 + 20 +22175.429136 + 30 +0.0 + 11 +5551.20073 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +625 + 8 +0 + 62 + 0 + 10 +5599.999974 + 20 +22153.778501 + 30 +0.0 + 11 +5587.499974 + 21 +22175.429136 + 31 +0.0 + 0 +LINE + 5 +626 + 8 +0 + 62 + 0 + 10 +5637.499974 + 20 +22132.127866 + 30 +0.0 + 11 +5624.999974 + 21 +22153.778501 + 31 +0.0 + 0 +LINE + 5 +627 + 8 +0 + 62 + 0 + 10 +5672.388751 + 20 +22115.0 + 30 +0.0 + 11 +5662.499973 + 21 +22132.127866 + 31 +0.0 + 0 +LINE + 5 +628 + 8 +0 + 62 + 0 + 10 +5637.499973 + 20 +22175.429136 + 30 +0.0 + 11 +5626.20073 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +629 + 8 +0 + 62 + 0 + 10 +5674.999973 + 20 +22153.778501 + 30 +0.0 + 11 +5662.499973 + 21 +22175.429136 + 31 +0.0 + 0 +LINE + 5 +62A + 8 +0 + 62 + 0 + 10 +5712.499973 + 20 +22132.127866 + 30 +0.0 + 11 +5699.999973 + 21 +22153.778501 + 31 +0.0 + 0 +LINE + 5 +62B + 8 +0 + 62 + 0 + 10 +5747.388751 + 20 +22115.0 + 30 +0.0 + 11 +5737.499973 + 21 +22132.127866 + 31 +0.0 + 0 +LINE + 5 +62C + 8 +0 + 62 + 0 + 10 +5712.499973 + 20 +22175.429136 + 30 +0.0 + 11 +5701.20073 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +62D + 8 +0 + 62 + 0 + 10 +5749.999973 + 20 +22153.778501 + 30 +0.0 + 11 +5737.499973 + 21 +22175.429136 + 31 +0.0 + 0 +LINE + 5 +62E + 8 +0 + 62 + 0 + 10 +5787.499973 + 20 +22132.127866 + 30 +0.0 + 11 +5774.999973 + 21 +22153.778501 + 31 +0.0 + 0 +LINE + 5 +62F + 8 +0 + 62 + 0 + 10 +5822.388751 + 20 +22115.0 + 30 +0.0 + 11 +5812.499973 + 21 +22132.127866 + 31 +0.0 + 0 +LINE + 5 +630 + 8 +0 + 62 + 0 + 10 +5787.499973 + 20 +22175.429136 + 30 +0.0 + 11 +5776.200729 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +631 + 8 +0 + 62 + 0 + 10 +5824.999973 + 20 +22153.778501 + 30 +0.0 + 11 +5812.499973 + 21 +22175.429136 + 31 +0.0 + 0 +LINE + 5 +632 + 8 +0 + 62 + 0 + 10 +5862.499973 + 20 +22132.127866 + 30 +0.0 + 11 +5849.999973 + 21 +22153.778501 + 31 +0.0 + 0 +LINE + 5 +633 + 8 +0 + 62 + 0 + 10 +5897.38875 + 20 +22115.0 + 30 +0.0 + 11 +5887.499973 + 21 +22132.127866 + 31 +0.0 + 0 +LINE + 5 +634 + 8 +0 + 62 + 0 + 10 +5862.499973 + 20 +22175.429136 + 30 +0.0 + 11 +5851.200729 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +635 + 8 +0 + 62 + 0 + 10 +5899.999973 + 20 +22153.778501 + 30 +0.0 + 11 +5887.499973 + 21 +22175.429136 + 31 +0.0 + 0 +LINE + 5 +636 + 8 +0 + 62 + 0 + 10 +5937.499973 + 20 +22132.127865 + 30 +0.0 + 11 +5924.999973 + 21 +22153.778501 + 31 +0.0 + 0 +LINE + 5 +637 + 8 +0 + 62 + 0 + 10 +5972.38875 + 20 +22115.0 + 30 +0.0 + 11 +5962.499972 + 21 +22132.127865 + 31 +0.0 + 0 +LINE + 5 +638 + 8 +0 + 62 + 0 + 10 +5937.499972 + 20 +22175.429136 + 30 +0.0 + 11 +5926.200729 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +639 + 8 +0 + 62 + 0 + 10 +5974.999972 + 20 +22153.7785 + 30 +0.0 + 11 +5962.499972 + 21 +22175.429136 + 31 +0.0 + 0 +LINE + 5 +63A + 8 +0 + 62 + 0 + 10 +6012.499972 + 20 +22132.127865 + 30 +0.0 + 11 +5999.999972 + 21 +22153.7785 + 31 +0.0 + 0 +LINE + 5 +63B + 8 +0 + 62 + 0 + 10 +6047.38875 + 20 +22115.0 + 30 +0.0 + 11 +6037.499972 + 21 +22132.127865 + 31 +0.0 + 0 +LINE + 5 +63C + 8 +0 + 62 + 0 + 10 +6012.499972 + 20 +22175.429135 + 30 +0.0 + 11 +6001.200728 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +63D + 8 +0 + 62 + 0 + 10 +6049.999972 + 20 +22153.7785 + 30 +0.0 + 11 +6037.499972 + 21 +22175.429135 + 31 +0.0 + 0 +LINE + 5 +63E + 8 +0 + 62 + 0 + 10 +6087.499972 + 20 +22132.127865 + 30 +0.0 + 11 +6074.999972 + 21 +22153.7785 + 31 +0.0 + 0 +LINE + 5 +63F + 8 +0 + 62 + 0 + 10 +6122.38875 + 20 +22115.0 + 30 +0.0 + 11 +6112.499972 + 21 +22132.127865 + 31 +0.0 + 0 +LINE + 5 +640 + 8 +0 + 62 + 0 + 10 +6087.499972 + 20 +22175.429135 + 30 +0.0 + 11 +6076.200728 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +641 + 8 +0 + 62 + 0 + 10 +6124.999972 + 20 +22153.7785 + 30 +0.0 + 11 +6112.499972 + 21 +22175.429135 + 31 +0.0 + 0 +LINE + 5 +642 + 8 +0 + 62 + 0 + 10 +6162.499972 + 20 +22132.127865 + 30 +0.0 + 11 +6149.999972 + 21 +22153.7785 + 31 +0.0 + 0 +LINE + 5 +643 + 8 +0 + 62 + 0 + 10 +6197.388749 + 20 +22115.0 + 30 +0.0 + 11 +6187.499972 + 21 +22132.127865 + 31 +0.0 + 0 +LINE + 5 +644 + 8 +0 + 62 + 0 + 10 +6162.499972 + 20 +22175.429135 + 30 +0.0 + 11 +6151.200728 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +645 + 8 +0 + 62 + 0 + 10 +6199.999972 + 20 +22153.7785 + 30 +0.0 + 11 +6187.499972 + 21 +22175.429135 + 31 +0.0 + 0 +LINE + 5 +646 + 8 +0 + 62 + 0 + 10 +6237.499972 + 20 +22132.127865 + 30 +0.0 + 11 +6224.999972 + 21 +22153.7785 + 31 +0.0 + 0 +LINE + 5 +647 + 8 +0 + 62 + 0 + 10 +6272.388749 + 20 +22115.0 + 30 +0.0 + 11 +6262.499971 + 21 +22132.127865 + 31 +0.0 + 0 +LINE + 5 +648 + 8 +0 + 62 + 0 + 10 +6237.499971 + 20 +22175.429135 + 30 +0.0 + 11 +6226.200727 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +649 + 8 +0 + 62 + 0 + 10 +6274.999971 + 20 +22153.7785 + 30 +0.0 + 11 +6262.499971 + 21 +22175.429135 + 31 +0.0 + 0 +LINE + 5 +64A + 8 +0 + 62 + 0 + 10 +6312.499971 + 20 +22132.127865 + 30 +0.0 + 11 +6299.999971 + 21 +22153.7785 + 31 +0.0 + 0 +LINE + 5 +64B + 8 +0 + 62 + 0 + 10 +6347.388749 + 20 +22115.0 + 30 +0.0 + 11 +6337.499971 + 21 +22132.127865 + 31 +0.0 + 0 +LINE + 5 +64C + 8 +0 + 62 + 0 + 10 +6312.499971 + 20 +22175.429135 + 30 +0.0 + 11 +6301.200727 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +64D + 8 +0 + 62 + 0 + 10 +6349.999971 + 20 +22153.7785 + 30 +0.0 + 11 +6337.499971 + 21 +22175.429135 + 31 +0.0 + 0 +LINE + 5 +64E + 8 +0 + 62 + 0 + 10 +6387.499971 + 20 +22132.127865 + 30 +0.0 + 11 +6374.999971 + 21 +22153.7785 + 31 +0.0 + 0 +LINE + 5 +64F + 8 +0 + 62 + 0 + 10 +6422.388748 + 20 +22115.0 + 30 +0.0 + 11 +6412.499971 + 21 +22132.127865 + 31 +0.0 + 0 +LINE + 5 +650 + 8 +0 + 62 + 0 + 10 +6387.499971 + 20 +22175.429135 + 30 +0.0 + 11 +6376.200727 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +651 + 8 +0 + 62 + 0 + 10 +6424.999971 + 20 +22153.7785 + 30 +0.0 + 11 +6412.499971 + 21 +22175.429135 + 31 +0.0 + 0 +LINE + 5 +652 + 8 +0 + 62 + 0 + 10 +6462.499971 + 20 +22132.127864 + 30 +0.0 + 11 +6449.999971 + 21 +22153.7785 + 31 +0.0 + 0 +LINE + 5 +653 + 8 +0 + 62 + 0 + 10 +6497.388748 + 20 +22115.0 + 30 +0.0 + 11 +6487.499971 + 21 +22132.127864 + 31 +0.0 + 0 +LINE + 5 +654 + 8 +0 + 62 + 0 + 10 +6462.499971 + 20 +22175.429135 + 30 +0.0 + 11 +6451.200726 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +655 + 8 +0 + 62 + 0 + 10 +6499.999971 + 20 +22153.778499 + 30 +0.0 + 11 +6487.499971 + 21 +22175.429135 + 31 +0.0 + 0 +LINE + 5 +656 + 8 +0 + 62 + 0 + 10 +6537.499971 + 20 +22132.127864 + 30 +0.0 + 11 +6524.999971 + 21 +22153.778499 + 31 +0.0 + 0 +LINE + 5 +657 + 8 +0 + 62 + 0 + 10 +6572.388748 + 20 +22115.0 + 30 +0.0 + 11 +6562.499971 + 21 +22132.127864 + 31 +0.0 + 0 +LINE + 5 +658 + 8 +0 + 62 + 0 + 10 +6537.499971 + 20 +22175.429134 + 30 +0.0 + 11 +6526.200726 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +659 + 8 +0 + 62 + 0 + 10 +6574.99997 + 20 +22153.778499 + 30 +0.0 + 11 +6562.49997 + 21 +22175.429134 + 31 +0.0 + 0 +LINE + 5 +65A + 8 +0 + 62 + 0 + 10 +6612.49997 + 20 +22132.127864 + 30 +0.0 + 11 +6599.99997 + 21 +22153.778499 + 31 +0.0 + 0 +LINE + 5 +65B + 8 +0 + 62 + 0 + 10 +6647.388747 + 20 +22115.0 + 30 +0.0 + 11 +6637.49997 + 21 +22132.127864 + 31 +0.0 + 0 +LINE + 5 +65C + 8 +0 + 62 + 0 + 10 +6612.49997 + 20 +22175.429134 + 30 +0.0 + 11 +6601.200726 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +65D + 8 +0 + 62 + 0 + 10 +6649.99997 + 20 +22153.778499 + 30 +0.0 + 11 +6637.49997 + 21 +22175.429134 + 31 +0.0 + 0 +LINE + 5 +65E + 8 +0 + 62 + 0 + 10 +6687.49997 + 20 +22132.127864 + 30 +0.0 + 11 +6674.99997 + 21 +22153.778499 + 31 +0.0 + 0 +LINE + 5 +65F + 8 +0 + 62 + 0 + 10 +6722.388747 + 20 +22115.0 + 30 +0.0 + 11 +6712.49997 + 21 +22132.127864 + 31 +0.0 + 0 +LINE + 5 +660 + 8 +0 + 62 + 0 + 10 +6687.49997 + 20 +22175.429134 + 30 +0.0 + 11 +6676.200725 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +661 + 8 +0 + 62 + 0 + 10 +6724.99997 + 20 +22153.778499 + 30 +0.0 + 11 +6712.49997 + 21 +22175.429134 + 31 +0.0 + 0 +LINE + 5 +662 + 8 +0 + 62 + 0 + 10 +6751.25 + 20 +22151.613383 + 30 +0.0 + 11 +6749.99997 + 21 +22153.778499 + 31 +0.0 + 0 +LINE + 5 +663 + 8 +0 + 62 + 0 + 10 +6751.25 + 20 +22194.914653 + 30 +0.0 + 11 +6751.200725 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +664 + 8 +0 + 62 + 0 + 10 +6637.500019 + 20 +22132.12787 + 30 +0.0 + 11 +6650.000019 + 21 +22153.778505 + 31 +0.0 + 0 +LINE + 5 +665 + 8 +0 + 62 + 0 + 10 +6602.611239 + 20 +22115.0 + 30 +0.0 + 11 +6612.500019 + 21 +22132.12787 + 31 +0.0 + 0 +LINE + 5 +666 + 8 +0 + 62 + 0 + 10 +6637.500019 + 20 +22175.42914 + 30 +0.0 + 11 +6648.79926 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +667 + 8 +0 + 62 + 0 + 10 +4989.176311 + 20 +19363.75 + 30 +0.0 + 11 +5000.0 + 21 +19382.49718 + 31 +0.0 + 0 +LINE + 5 +668 + 8 +0 + 62 + 0 + 10 +6600.000019 + 20 +22153.778505 + 30 +0.0 + 11 +6612.500019 + 21 +22175.42914 + 31 +0.0 + 0 +LINE + 5 +669 + 8 +0 + 62 + 0 + 10 +4987.500019 + 20 +19404.147848 + 30 +0.0 + 11 +5000.0 + 21 +19425.79845 + 31 +0.0 + 0 +LINE + 5 +66A + 8 +0 + 62 + 0 + 10 +6562.500019 + 20 +22132.12787 + 30 +0.0 + 11 +6575.000019 + 21 +22153.778505 + 31 +0.0 + 0 +LINE + 5 +66B + 8 +0 + 62 + 0 + 10 +4950.000019 + 20 +19382.497213 + 30 +0.0 + 11 +4962.500019 + 21 +19404.147848 + 31 +0.0 + 0 +LINE + 5 +66C + 8 +0 + 62 + 0 + 10 +4987.500019 + 20 +19447.449118 + 30 +0.0 + 11 +5000.0 + 21 +19469.09972 + 31 +0.0 + 0 +LINE + 5 +66D + 8 +0 + 62 + 0 + 10 +6527.611239 + 20 +22115.0 + 30 +0.0 + 11 +6537.500019 + 21 +22132.12787 + 31 +0.0 + 0 +LINE + 5 +66E + 8 +0 + 62 + 0 + 10 +6562.500019 + 20 +22175.42914 + 30 +0.0 + 11 +6573.79926 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +66F + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +19373.836925 + 30 +0.0 + 11 +4925.000019 + 21 +19382.497213 + 31 +0.0 + 0 +LINE + 5 +670 + 8 +0 + 62 + 0 + 10 +4950.000019 + 20 +19425.798483 + 30 +0.0 + 11 +4962.500019 + 21 +19447.449118 + 31 +0.0 + 0 +LINE + 5 +671 + 8 +0 + 62 + 0 + 10 +4987.500019 + 20 +19490.750389 + 30 +0.0 + 11 +5000.0 + 21 +19512.40099 + 31 +0.0 + 0 +LINE + 5 +672 + 8 +0 + 62 + 0 + 10 +6525.000019 + 20 +22153.778505 + 30 +0.0 + 11 +6537.500019 + 21 +22175.42914 + 31 +0.0 + 0 +LINE + 5 +673 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +19417.138195 + 30 +0.0 + 11 +4925.00002 + 21 +19425.798483 + 31 +0.0 + 0 +LINE + 5 +674 + 8 +0 + 62 + 0 + 10 +4950.00002 + 20 +19469.099753 + 30 +0.0 + 11 +4962.50002 + 21 +19490.750388 + 31 +0.0 + 0 +LINE + 5 +675 + 8 +0 + 62 + 0 + 10 +4987.50002 + 20 +19534.051659 + 30 +0.0 + 11 +5000.0 + 21 +19555.70226 + 31 +0.0 + 0 +LINE + 5 +676 + 8 +0 + 62 + 0 + 10 +6487.50002 + 20 +22132.12787 + 30 +0.0 + 11 +6500.00002 + 21 +22153.778505 + 31 +0.0 + 0 +LINE + 5 +677 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +19460.439465 + 30 +0.0 + 11 +4925.00002 + 21 +19469.099753 + 31 +0.0 + 0 +LINE + 5 +678 + 8 +0 + 62 + 0 + 10 +4950.00002 + 20 +19512.401024 + 30 +0.0 + 11 +4962.50002 + 21 +19534.051659 + 31 +0.0 + 0 +LINE + 5 +679 + 8 +0 + 62 + 0 + 10 +4987.50002 + 20 +19577.352929 + 30 +0.0 + 11 +5000.0 + 21 +19599.00353 + 31 +0.0 + 0 +LINE + 5 +67A + 8 +0 + 62 + 0 + 10 +6452.611239 + 20 +22115.0 + 30 +0.0 + 11 +6462.50002 + 21 +22132.12787 + 31 +0.0 + 0 +LINE + 5 +67B + 8 +0 + 62 + 0 + 10 +6487.50002 + 20 +22175.42914 + 30 +0.0 + 11 +6498.799261 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +67C + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +19503.740735 + 30 +0.0 + 11 +4925.00002 + 21 +19512.401023 + 31 +0.0 + 0 +LINE + 5 +67D + 8 +0 + 62 + 0 + 10 +4950.00002 + 20 +19555.702294 + 30 +0.0 + 11 +4962.50002 + 21 +19577.352929 + 31 +0.0 + 0 +LINE + 5 +67E + 8 +0 + 62 + 0 + 10 +4987.50002 + 20 +19620.654199 + 30 +0.0 + 11 +5000.0 + 21 +19642.3048 + 31 +0.0 + 0 +LINE + 5 +67F + 8 +0 + 62 + 0 + 10 +6450.00002 + 20 +22153.778505 + 30 +0.0 + 11 +6462.50002 + 21 +22175.42914 + 31 +0.0 + 0 +LINE + 5 +680 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +19547.042005 + 30 +0.0 + 11 +4925.00002 + 21 +19555.702294 + 31 +0.0 + 0 +LINE + 5 +681 + 8 +0 + 62 + 0 + 10 +4950.00002 + 20 +19599.003564 + 30 +0.0 + 11 +4962.50002 + 21 +19620.654199 + 31 +0.0 + 0 +LINE + 5 +682 + 8 +0 + 62 + 0 + 10 +4987.50002 + 20 +19663.955469 + 30 +0.0 + 11 +5000.0 + 21 +19685.60607 + 31 +0.0 + 0 +LINE + 5 +683 + 8 +0 + 62 + 0 + 10 +6412.50002 + 20 +22132.12787 + 30 +0.0 + 11 +6425.00002 + 21 +22153.778505 + 31 +0.0 + 0 +LINE + 5 +684 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +19590.343275 + 30 +0.0 + 11 +4925.00002 + 21 +19599.003564 + 31 +0.0 + 0 +LINE + 5 +685 + 8 +0 + 62 + 0 + 10 +4950.00002 + 20 +19642.304834 + 30 +0.0 + 11 +4962.50002 + 21 +19663.955469 + 31 +0.0 + 0 +LINE + 5 +686 + 8 +0 + 62 + 0 + 10 +4987.50002 + 20 +19707.256739 + 30 +0.0 + 11 +5000.0 + 21 +19728.90734 + 31 +0.0 + 0 +LINE + 5 +687 + 8 +0 + 62 + 0 + 10 +6377.61124 + 20 +22115.0 + 30 +0.0 + 11 +6387.50002 + 21 +22132.12787 + 31 +0.0 + 0 +LINE + 5 +688 + 8 +0 + 62 + 0 + 10 +6412.50002 + 20 +22175.42914 + 30 +0.0 + 11 +6423.799261 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +689 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +19633.644545 + 30 +0.0 + 11 +4925.00002 + 21 +19642.304834 + 31 +0.0 + 0 +LINE + 5 +68A + 8 +0 + 62 + 0 + 10 +4950.00002 + 20 +19685.606104 + 30 +0.0 + 11 +4962.50002 + 21 +19707.256739 + 31 +0.0 + 0 +LINE + 5 +68B + 8 +0 + 62 + 0 + 10 +4987.50002 + 20 +19750.558009 + 30 +0.0 + 11 +5000.0 + 21 +19772.20861 + 31 +0.0 + 0 +LINE + 5 +68C + 8 +0 + 62 + 0 + 10 +6375.00002 + 20 +22153.778505 + 30 +0.0 + 11 +6387.50002 + 21 +22175.42914 + 31 +0.0 + 0 +LINE + 5 +68D + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +19676.945815 + 30 +0.0 + 11 +4925.00002 + 21 +19685.606104 + 31 +0.0 + 0 +LINE + 5 +68E + 8 +0 + 62 + 0 + 10 +4950.00002 + 20 +19728.907374 + 30 +0.0 + 11 +4962.50002 + 21 +19750.558009 + 31 +0.0 + 0 +LINE + 5 +68F + 8 +0 + 62 + 0 + 10 +4987.50002 + 20 +19793.85928 + 30 +0.0 + 11 +5000.0 + 21 +19815.50988 + 31 +0.0 + 0 +LINE + 5 +690 + 8 +0 + 62 + 0 + 10 +6337.50002 + 20 +22132.12787 + 30 +0.0 + 11 +6350.00002 + 21 +22153.778505 + 31 +0.0 + 0 +LINE + 5 +691 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +19720.247085 + 30 +0.0 + 11 +4925.00002 + 21 +19728.907374 + 31 +0.0 + 0 +LINE + 5 +692 + 8 +0 + 62 + 0 + 10 +4950.00002 + 20 +19772.208644 + 30 +0.0 + 11 +4962.50002 + 21 +19793.859279 + 31 +0.0 + 0 +LINE + 5 +693 + 8 +0 + 62 + 0 + 10 +4987.50002 + 20 +19837.16055 + 30 +0.0 + 11 +5000.0 + 21 +19858.81115 + 31 +0.0 + 0 +LINE + 5 +694 + 8 +0 + 62 + 0 + 10 +6302.61124 + 20 +22115.0 + 30 +0.0 + 11 +6312.50002 + 21 +22132.12787 + 31 +0.0 + 0 +LINE + 5 +695 + 8 +0 + 62 + 0 + 10 +6337.50002 + 20 +22175.42914 + 30 +0.0 + 11 +6348.799261 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +696 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +19763.548355 + 30 +0.0 + 11 +4925.00002 + 21 +19772.208644 + 31 +0.0 + 0 +LINE + 5 +697 + 8 +0 + 62 + 0 + 10 +4950.00002 + 20 +19815.509915 + 30 +0.0 + 11 +4962.50002 + 21 +19837.16055 + 31 +0.0 + 0 +LINE + 5 +698 + 8 +0 + 62 + 0 + 10 +4987.50002 + 20 +19880.46182 + 30 +0.0 + 11 +5000.0 + 21 +19902.11242 + 31 +0.0 + 0 +LINE + 5 +699 + 8 +0 + 62 + 0 + 10 +6300.00002 + 20 +22153.778505 + 30 +0.0 + 11 +6312.50002 + 21 +22175.42914 + 31 +0.0 + 0 +LINE + 5 +69A + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +19806.849625 + 30 +0.0 + 11 +4925.00002 + 21 +19815.509914 + 31 +0.0 + 0 +LINE + 5 +69B + 8 +0 + 62 + 0 + 10 +4950.00002 + 20 +19858.811185 + 30 +0.0 + 11 +4962.50002 + 21 +19880.46182 + 31 +0.0 + 0 +LINE + 5 +69C + 8 +0 + 62 + 0 + 10 +4987.50002 + 20 +19923.76309 + 30 +0.0 + 11 +5000.0 + 21 +19945.41369 + 31 +0.0 + 0 +LINE + 5 +69D + 8 +0 + 62 + 0 + 10 +6262.50002 + 20 +22132.12787 + 30 +0.0 + 11 +6275.00002 + 21 +22153.778505 + 31 +0.0 + 0 +LINE + 5 +69E + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +19850.150895 + 30 +0.0 + 11 +4925.00002 + 21 +19858.811185 + 31 +0.0 + 0 +LINE + 5 +69F + 8 +0 + 62 + 0 + 10 +4950.00002 + 20 +19902.112455 + 30 +0.0 + 11 +4962.50002 + 21 +19923.76309 + 31 +0.0 + 0 +LINE + 5 +6A0 + 8 +0 + 62 + 0 + 10 +4987.50002 + 20 +19967.06436 + 30 +0.0 + 11 +5000.0 + 21 +19988.71496 + 31 +0.0 + 0 +LINE + 5 +6A1 + 8 +0 + 62 + 0 + 10 +6227.61124 + 20 +22115.0 + 30 +0.0 + 11 +6237.50002 + 21 +22132.12787 + 31 +0.0 + 0 +LINE + 5 +6A2 + 8 +0 + 62 + 0 + 10 +6262.50002 + 20 +22175.42914 + 30 +0.0 + 11 +6273.799262 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +6A3 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +19893.452165 + 30 +0.0 + 11 +4925.00002 + 21 +19902.112455 + 31 +0.0 + 0 +LINE + 5 +6A4 + 8 +0 + 62 + 0 + 10 +4950.00002 + 20 +19945.413725 + 30 +0.0 + 11 +4962.50002 + 21 +19967.06436 + 31 +0.0 + 0 +LINE + 5 +6A5 + 8 +0 + 62 + 0 + 10 +4987.50002 + 20 +20010.36563 + 30 +0.0 + 11 +5000.0 + 21 +20032.01623 + 31 +0.0 + 0 +LINE + 5 +6A6 + 8 +0 + 62 + 0 + 10 +6225.00002 + 20 +22153.778505 + 30 +0.0 + 11 +6237.50002 + 21 +22175.42914 + 31 +0.0 + 0 +LINE + 5 +6A7 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +19936.753435 + 30 +0.0 + 11 +4925.00002 + 21 +19945.413725 + 31 +0.0 + 0 +LINE + 5 +6A8 + 8 +0 + 62 + 0 + 10 +4950.00002 + 20 +19988.714995 + 30 +0.0 + 11 +4962.50002 + 21 +20010.36563 + 31 +0.0 + 0 +LINE + 5 +6A9 + 8 +0 + 62 + 0 + 10 +4987.50002 + 20 +20053.6669 + 30 +0.0 + 11 +5000.0 + 21 +20075.3175 + 31 +0.0 + 0 +LINE + 5 +6AA + 8 +0 + 62 + 0 + 10 +6187.50002 + 20 +22132.127869 + 30 +0.0 + 11 +6200.00002 + 21 +22153.778505 + 31 +0.0 + 0 +LINE + 5 +6AB + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +19980.054705 + 30 +0.0 + 11 +4925.000021 + 21 +19988.714995 + 31 +0.0 + 0 +LINE + 5 +6AC + 8 +0 + 62 + 0 + 10 +4950.000021 + 20 +20032.016265 + 30 +0.0 + 11 +4962.500021 + 21 +20053.6669 + 31 +0.0 + 0 +LINE + 5 +6AD + 8 +0 + 62 + 0 + 10 +4987.500021 + 20 +20096.968171 + 30 +0.0 + 11 +5000.0 + 21 +20118.61877 + 31 +0.0 + 0 +LINE + 5 +6AE + 8 +0 + 62 + 0 + 10 +6152.611241 + 20 +22115.0 + 30 +0.0 + 11 +6162.500021 + 21 +22132.127869 + 31 +0.0 + 0 +LINE + 5 +6AF + 8 +0 + 62 + 0 + 10 +6187.500021 + 20 +22175.42914 + 30 +0.0 + 11 +6198.799262 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +6B0 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +20023.355975 + 30 +0.0 + 11 +4925.000021 + 21 +20032.016265 + 31 +0.0 + 0 +LINE + 5 +6B1 + 8 +0 + 62 + 0 + 10 +4950.000021 + 20 +20075.317535 + 30 +0.0 + 11 +4962.500021 + 21 +20096.96817 + 31 +0.0 + 0 +LINE + 5 +6B2 + 8 +0 + 62 + 0 + 10 +4987.500021 + 20 +20140.269441 + 30 +0.0 + 11 +5000.0 + 21 +20161.92004 + 31 +0.0 + 0 +LINE + 5 +6B3 + 8 +0 + 62 + 0 + 10 +6150.000021 + 20 +22153.778504 + 30 +0.0 + 11 +6162.500021 + 21 +22175.42914 + 31 +0.0 + 0 +LINE + 5 +6B4 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +20066.657245 + 30 +0.0 + 11 +4925.000021 + 21 +20075.317535 + 31 +0.0 + 0 +LINE + 5 +6B5 + 8 +0 + 62 + 0 + 10 +4950.000021 + 20 +20118.618806 + 30 +0.0 + 11 +4962.500021 + 21 +20140.269441 + 31 +0.0 + 0 +LINE + 5 +6B6 + 8 +0 + 62 + 0 + 10 +4987.500021 + 20 +20183.570711 + 30 +0.0 + 11 +5000.0 + 21 +20205.22131 + 31 +0.0 + 0 +LINE + 5 +6B7 + 8 +0 + 62 + 0 + 10 +6112.500021 + 20 +22132.127869 + 30 +0.0 + 11 +6125.000021 + 21 +22153.778504 + 31 +0.0 + 0 +LINE + 5 +6B8 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +20109.958515 + 30 +0.0 + 11 +4925.000021 + 21 +20118.618805 + 31 +0.0 + 0 +LINE + 5 +6B9 + 8 +0 + 62 + 0 + 10 +4950.000021 + 20 +20161.920076 + 30 +0.0 + 11 +4962.500021 + 21 +20183.570711 + 31 +0.0 + 0 +LINE + 5 +6BA + 8 +0 + 62 + 0 + 10 +4987.500021 + 20 +20226.871981 + 30 +0.0 + 11 +5000.0 + 21 +20248.52258 + 31 +0.0 + 0 +LINE + 5 +6BB + 8 +0 + 62 + 0 + 10 +6077.611241 + 20 +22115.0 + 30 +0.0 + 11 +6087.500021 + 21 +22132.127869 + 31 +0.0 + 0 +LINE + 5 +6BC + 8 +0 + 62 + 0 + 10 +6112.500021 + 20 +22175.429139 + 30 +0.0 + 11 +6123.799262 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +6BD + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +20153.259785 + 30 +0.0 + 11 +4925.000021 + 21 +20161.920076 + 31 +0.0 + 0 +LINE + 5 +6BE + 8 +0 + 62 + 0 + 10 +4950.000021 + 20 +20205.221346 + 30 +0.0 + 11 +4962.500021 + 21 +20226.871981 + 31 +0.0 + 0 +LINE + 5 +6BF + 8 +0 + 62 + 0 + 10 +4987.500021 + 20 +20270.173251 + 30 +0.0 + 11 +5000.0 + 21 +20291.82385 + 31 +0.0 + 0 +LINE + 5 +6C0 + 8 +0 + 62 + 0 + 10 +6075.000021 + 20 +22153.778504 + 30 +0.0 + 11 +6087.500021 + 21 +22175.429139 + 31 +0.0 + 0 +LINE + 5 +6C1 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +20196.561055 + 30 +0.0 + 11 +4925.000021 + 21 +20205.221346 + 31 +0.0 + 0 +LINE + 5 +6C2 + 8 +0 + 62 + 0 + 10 +4950.000021 + 20 +20248.522616 + 30 +0.0 + 11 +4962.500021 + 21 +20270.173251 + 31 +0.0 + 0 +LINE + 5 +6C3 + 8 +0 + 62 + 0 + 10 +4987.500021 + 20 +20313.474521 + 30 +0.0 + 11 +5000.0 + 21 +20335.12512 + 31 +0.0 + 0 +LINE + 5 +6C4 + 8 +0 + 62 + 0 + 10 +6037.500021 + 20 +22132.127869 + 30 +0.0 + 11 +6050.000021 + 21 +22153.778504 + 31 +0.0 + 0 +LINE + 5 +6C5 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +20239.862325 + 30 +0.0 + 11 +4925.000021 + 21 +20248.522616 + 31 +0.0 + 0 +LINE + 5 +6C6 + 8 +0 + 62 + 0 + 10 +4950.000021 + 20 +20291.823886 + 30 +0.0 + 11 +4962.500021 + 21 +20313.474521 + 31 +0.0 + 0 +LINE + 5 +6C7 + 8 +0 + 62 + 0 + 10 +4987.500021 + 20 +20356.775791 + 30 +0.0 + 11 +5000.0 + 21 +20378.42639 + 31 +0.0 + 0 +LINE + 5 +6C8 + 8 +0 + 62 + 0 + 10 +6002.611241 + 20 +22115.0 + 30 +0.0 + 11 +6012.500021 + 21 +22132.127869 + 31 +0.0 + 0 +LINE + 5 +6C9 + 8 +0 + 62 + 0 + 10 +6037.500021 + 20 +22175.429139 + 30 +0.0 + 11 +6048.799263 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +6CA + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +20283.163595 + 30 +0.0 + 11 +4925.000021 + 21 +20291.823886 + 31 +0.0 + 0 +LINE + 5 +6CB + 8 +0 + 62 + 0 + 10 +4950.000021 + 20 +20335.125156 + 30 +0.0 + 11 +4962.500021 + 21 +20356.775791 + 31 +0.0 + 0 +LINE + 5 +6CC + 8 +0 + 62 + 0 + 10 +4987.500021 + 20 +20400.077062 + 30 +0.0 + 11 +5000.0 + 21 +20421.72766 + 31 +0.0 + 0 +LINE + 5 +6CD + 8 +0 + 62 + 0 + 10 +6000.000021 + 20 +22153.778504 + 30 +0.0 + 11 +6012.500021 + 21 +22175.429139 + 31 +0.0 + 0 +LINE + 5 +6CE + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +20326.464865 + 30 +0.0 + 11 +4925.000021 + 21 +20335.125156 + 31 +0.0 + 0 +LINE + 5 +6CF + 8 +0 + 62 + 0 + 10 +4950.000021 + 20 +20378.426426 + 30 +0.0 + 11 +4962.500021 + 21 +20400.077061 + 31 +0.0 + 0 +LINE + 5 +6D0 + 8 +0 + 62 + 0 + 10 +4987.500021 + 20 +20443.378332 + 30 +0.0 + 11 +5000.0 + 21 +20465.02893 + 31 +0.0 + 0 +LINE + 5 +6D1 + 8 +0 + 62 + 0 + 10 +5962.500021 + 20 +22132.127869 + 30 +0.0 + 11 +5975.000021 + 21 +22153.778504 + 31 +0.0 + 0 +LINE + 5 +6D2 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +20369.766135 + 30 +0.0 + 11 +4925.000021 + 21 +20378.426426 + 31 +0.0 + 0 +LINE + 5 +6D3 + 8 +0 + 62 + 0 + 10 +4950.000021 + 20 +20421.727697 + 30 +0.0 + 11 +4962.500021 + 21 +20443.378332 + 31 +0.0 + 0 +LINE + 5 +6D4 + 8 +0 + 62 + 0 + 10 +4987.500021 + 20 +20486.679602 + 30 +0.0 + 11 +5000.0 + 21 +20508.3302 + 31 +0.0 + 0 +LINE + 5 +6D5 + 8 +0 + 62 + 0 + 10 +5927.611242 + 20 +22115.0 + 30 +0.0 + 11 +5937.500021 + 21 +22132.127869 + 31 +0.0 + 0 +LINE + 5 +6D6 + 8 +0 + 62 + 0 + 10 +5962.500021 + 20 +22175.429139 + 30 +0.0 + 11 +5973.799263 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +6D7 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +20413.067405 + 30 +0.0 + 11 +4925.000021 + 21 +20421.727696 + 31 +0.0 + 0 +LINE + 5 +6D8 + 8 +0 + 62 + 0 + 10 +4950.000021 + 20 +20465.028967 + 30 +0.0 + 11 +4962.500021 + 21 +20486.679602 + 31 +0.0 + 0 +LINE + 5 +6D9 + 8 +0 + 62 + 0 + 10 +4987.500021 + 20 +20529.980872 + 30 +0.0 + 11 +5000.0 + 21 +20551.63147 + 31 +0.0 + 0 +LINE + 5 +6DA + 8 +0 + 62 + 0 + 10 +5925.000021 + 20 +22153.778504 + 30 +0.0 + 11 +5937.500021 + 21 +22175.429139 + 31 +0.0 + 0 +LINE + 5 +6DB + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +20456.368675 + 30 +0.0 + 11 +4925.000021 + 21 +20465.028967 + 31 +0.0 + 0 +LINE + 5 +6DC + 8 +0 + 62 + 0 + 10 +4950.000021 + 20 +20508.330237 + 30 +0.0 + 11 +4962.500021 + 21 +20529.980872 + 31 +0.0 + 0 +LINE + 5 +6DD + 8 +0 + 62 + 0 + 10 +4987.500021 + 20 +20573.282142 + 30 +0.0 + 11 +5000.0 + 21 +20594.93274 + 31 +0.0 + 0 +LINE + 5 +6DE + 8 +0 + 62 + 0 + 10 +5887.500021 + 20 +22132.127869 + 30 +0.0 + 11 +5900.000021 + 21 +22153.778504 + 31 +0.0 + 0 +LINE + 5 +6DF + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +20499.669945 + 30 +0.0 + 11 +4925.000022 + 21 +20508.330237 + 31 +0.0 + 0 +LINE + 5 +6E0 + 8 +0 + 62 + 0 + 10 +4950.000022 + 20 +20551.631507 + 30 +0.0 + 11 +4962.500022 + 21 +20573.282142 + 31 +0.0 + 0 +LINE + 5 +6E1 + 8 +0 + 62 + 0 + 10 +4987.500022 + 20 +20616.583412 + 30 +0.0 + 11 +5000.0 + 21 +20638.23401 + 31 +0.0 + 0 +LINE + 5 +6E2 + 8 +0 + 62 + 0 + 10 +5852.611242 + 20 +22115.0 + 30 +0.0 + 11 +5862.500022 + 21 +22132.127869 + 31 +0.0 + 0 +LINE + 5 +6E3 + 8 +0 + 62 + 0 + 10 +5887.500022 + 20 +22175.429139 + 30 +0.0 + 11 +5898.799263 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +6E4 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +20542.971215 + 30 +0.0 + 11 +4925.000022 + 21 +20551.631507 + 31 +0.0 + 0 +LINE + 5 +6E5 + 8 +0 + 62 + 0 + 10 +4950.000022 + 20 +20594.932777 + 30 +0.0 + 11 +4962.500022 + 21 +20616.583412 + 31 +0.0 + 0 +LINE + 5 +6E6 + 8 +0 + 62 + 0 + 10 +4987.500022 + 20 +20659.884682 + 30 +0.0 + 11 +5000.0 + 21 +20681.53528 + 31 +0.0 + 0 +LINE + 5 +6E7 + 8 +0 + 62 + 0 + 10 +5850.000022 + 20 +22153.778504 + 30 +0.0 + 11 +5862.500022 + 21 +22175.429139 + 31 +0.0 + 0 +LINE + 5 +6E8 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +20586.272485 + 30 +0.0 + 11 +4925.000022 + 21 +20594.932777 + 31 +0.0 + 0 +LINE + 5 +6E9 + 8 +0 + 62 + 0 + 10 +4950.000022 + 20 +20638.234047 + 30 +0.0 + 11 +4962.500022 + 21 +20659.884682 + 31 +0.0 + 0 +LINE + 5 +6EA + 8 +0 + 62 + 0 + 10 +4987.500022 + 20 +20703.185953 + 30 +0.0 + 11 +5000.0 + 21 +20724.83655 + 31 +0.0 + 0 +LINE + 5 +6EB + 8 +0 + 62 + 0 + 10 +5812.500022 + 20 +22132.127869 + 30 +0.0 + 11 +5825.000022 + 21 +22153.778504 + 31 +0.0 + 0 +LINE + 5 +6EC + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +20629.573755 + 30 +0.0 + 11 +4925.000022 + 21 +20638.234047 + 31 +0.0 + 0 +LINE + 5 +6ED + 8 +0 + 62 + 0 + 10 +4950.000022 + 20 +20681.535317 + 30 +0.0 + 11 +4962.500022 + 21 +20703.185952 + 31 +0.0 + 0 +LINE + 5 +6EE + 8 +0 + 62 + 0 + 10 +4987.500022 + 20 +20746.487223 + 30 +0.0 + 11 +5000.0 + 21 +20768.13782 + 31 +0.0 + 0 +LINE + 5 +6EF + 8 +0 + 62 + 0 + 10 +5777.611242 + 20 +22115.0 + 30 +0.0 + 11 +5787.500022 + 21 +22132.127869 + 31 +0.0 + 0 +LINE + 5 +6F0 + 8 +0 + 62 + 0 + 10 +5812.500022 + 20 +22175.429139 + 30 +0.0 + 11 +5823.799264 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +6F1 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +20672.875025 + 30 +0.0 + 11 +4925.000022 + 21 +20681.535317 + 31 +0.0 + 0 +LINE + 5 +6F2 + 8 +0 + 62 + 0 + 10 +4950.000022 + 20 +20724.836588 + 30 +0.0 + 11 +4962.500022 + 21 +20746.487223 + 31 +0.0 + 0 +LINE + 5 +6F3 + 8 +0 + 62 + 0 + 10 +4987.500022 + 20 +20789.788493 + 30 +0.0 + 11 +5000.0 + 21 +20811.43909 + 31 +0.0 + 0 +LINE + 5 +6F4 + 8 +0 + 62 + 0 + 10 +5775.000022 + 20 +22153.778504 + 30 +0.0 + 11 +5787.500022 + 21 +22175.429139 + 31 +0.0 + 0 +LINE + 5 +6F5 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +20716.176295 + 30 +0.0 + 11 +4925.000022 + 21 +20724.836587 + 31 +0.0 + 0 +LINE + 5 +6F6 + 8 +0 + 62 + 0 + 10 +4950.000022 + 20 +20768.137858 + 30 +0.0 + 11 +4962.500022 + 21 +20789.788493 + 31 +0.0 + 0 +LINE + 5 +6F7 + 8 +0 + 62 + 0 + 10 +4987.500022 + 20 +20833.089763 + 30 +0.0 + 11 +5000.0 + 21 +20854.74036 + 31 +0.0 + 0 +LINE + 5 +6F8 + 8 +0 + 62 + 0 + 10 +5737.500022 + 20 +22132.127869 + 30 +0.0 + 11 +5750.000022 + 21 +22153.778504 + 31 +0.0 + 0 +LINE + 5 +6F9 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +20759.477565 + 30 +0.0 + 11 +4925.000022 + 21 +20768.137858 + 31 +0.0 + 0 +LINE + 5 +6FA + 8 +0 + 62 + 0 + 10 +4950.000022 + 20 +20811.439128 + 30 +0.0 + 11 +4962.500022 + 21 +20833.089763 + 31 +0.0 + 0 +LINE + 5 +6FB + 8 +0 + 62 + 0 + 10 +4987.500022 + 20 +20876.391033 + 30 +0.0 + 11 +5000.0 + 21 +20898.04163 + 31 +0.0 + 0 +LINE + 5 +6FC + 8 +0 + 62 + 0 + 10 +5702.611243 + 20 +22115.0 + 30 +0.0 + 11 +5712.500022 + 21 +22132.127869 + 31 +0.0 + 0 +LINE + 5 +6FD + 8 +0 + 62 + 0 + 10 +5737.500022 + 20 +22175.429139 + 30 +0.0 + 11 +5748.799264 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +6FE + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +20802.778835 + 30 +0.0 + 11 +4925.000022 + 21 +20811.439128 + 31 +0.0 + 0 +LINE + 5 +6FF + 8 +0 + 62 + 0 + 10 +4950.000022 + 20 +20854.740398 + 30 +0.0 + 11 +4962.500022 + 21 +20876.391033 + 31 +0.0 + 0 +LINE + 5 +700 + 8 +0 + 62 + 0 + 10 +4987.500022 + 20 +20919.692303 + 30 +0.0 + 11 +5000.0 + 21 +20941.3429 + 31 +0.0 + 0 +LINE + 5 +701 + 8 +0 + 62 + 0 + 10 +5700.000022 + 20 +22153.778504 + 30 +0.0 + 11 +5712.500022 + 21 +22175.429139 + 31 +0.0 + 0 +LINE + 5 +702 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +20846.080105 + 30 +0.0 + 11 +4925.000022 + 21 +20854.740398 + 31 +0.0 + 0 +LINE + 5 +703 + 8 +0 + 62 + 0 + 10 +4950.000022 + 20 +20898.041668 + 30 +0.0 + 11 +4962.500022 + 21 +20919.692303 + 31 +0.0 + 0 +LINE + 5 +704 + 8 +0 + 62 + 0 + 10 +4987.500022 + 20 +20962.993573 + 30 +0.0 + 11 +5000.0 + 21 +20984.64417 + 31 +0.0 + 0 +LINE + 5 +705 + 8 +0 + 62 + 0 + 10 +5662.500022 + 20 +22132.127868 + 30 +0.0 + 11 +5675.000022 + 21 +22153.778504 + 31 +0.0 + 0 +LINE + 5 +706 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +20889.381375 + 30 +0.0 + 11 +4925.000022 + 21 +20898.041668 + 31 +0.0 + 0 +LINE + 5 +707 + 8 +0 + 62 + 0 + 10 +4950.000022 + 20 +20941.342938 + 30 +0.0 + 11 +4962.500022 + 21 +20962.993573 + 31 +0.0 + 0 +LINE + 5 +708 + 8 +0 + 62 + 0 + 10 +4987.500022 + 20 +21006.294844 + 30 +0.0 + 11 +5000.0 + 21 +21027.94544 + 31 +0.0 + 0 +LINE + 5 +709 + 8 +0 + 62 + 0 + 10 +5627.611243 + 20 +22115.0 + 30 +0.0 + 11 +5637.500022 + 21 +22132.127868 + 31 +0.0 + 0 +LINE + 5 +70A + 8 +0 + 62 + 0 + 10 +5662.500022 + 20 +22175.429139 + 30 +0.0 + 11 +5673.799264 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +70B + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +20932.682645 + 30 +0.0 + 11 +4925.000022 + 21 +20941.342938 + 31 +0.0 + 0 +LINE + 5 +70C + 8 +0 + 62 + 0 + 10 +4950.000022 + 20 +20984.644208 + 30 +0.0 + 11 +4962.500022 + 21 +21006.294843 + 31 +0.0 + 0 +LINE + 5 +70D + 8 +0 + 62 + 0 + 10 +4987.500022 + 20 +21049.596114 + 30 +0.0 + 11 +5000.0 + 21 +21071.24671 + 31 +0.0 + 0 +LINE + 5 +70E + 8 +0 + 62 + 0 + 10 +5625.000022 + 20 +22153.778503 + 30 +0.0 + 11 +5637.500022 + 21 +22175.429139 + 31 +0.0 + 0 +LINE + 5 +70F + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +20975.983915 + 30 +0.0 + 11 +4925.000022 + 21 +20984.644208 + 31 +0.0 + 0 +LINE + 5 +710 + 8 +0 + 62 + 0 + 10 +4950.000022 + 20 +21027.945479 + 30 +0.0 + 11 +4962.500022 + 21 +21049.596114 + 31 +0.0 + 0 +LINE + 5 +711 + 8 +0 + 62 + 0 + 10 +4987.500022 + 20 +21092.897384 + 30 +0.0 + 11 +5000.0 + 21 +21114.54798 + 31 +0.0 + 0 +LINE + 5 +712 + 8 +0 + 62 + 0 + 10 +5587.500022 + 20 +22132.127868 + 30 +0.0 + 11 +5600.000022 + 21 +22153.778503 + 31 +0.0 + 0 +LINE + 5 +713 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +21019.285185 + 30 +0.0 + 11 +4925.000023 + 21 +21027.945478 + 31 +0.0 + 0 +LINE + 5 +714 + 8 +0 + 62 + 0 + 10 +4950.000023 + 20 +21071.246749 + 30 +0.0 + 11 +4962.500023 + 21 +21092.897384 + 31 +0.0 + 0 +LINE + 5 +715 + 8 +0 + 62 + 0 + 10 +4987.500023 + 20 +21136.198654 + 30 +0.0 + 11 +5000.0 + 21 +21157.84925 + 31 +0.0 + 0 +LINE + 5 +716 + 8 +0 + 62 + 0 + 10 +5552.611243 + 20 +22115.0 + 30 +0.0 + 11 +5562.500023 + 21 +22132.127868 + 31 +0.0 + 0 +LINE + 5 +717 + 8 +0 + 62 + 0 + 10 +5587.500023 + 20 +22175.429138 + 30 +0.0 + 11 +5598.799265 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +718 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +21062.586455 + 30 +0.0 + 11 +4925.000023 + 21 +21071.246749 + 31 +0.0 + 0 +LINE + 5 +719 + 8 +0 + 62 + 0 + 10 +4950.000023 + 20 +21114.548019 + 30 +0.0 + 11 +4962.500023 + 21 +21136.198654 + 31 +0.0 + 0 +LINE + 5 +71A + 8 +0 + 62 + 0 + 10 +4987.500023 + 20 +21179.499924 + 30 +0.0 + 11 +5000.0 + 21 +21201.15052 + 31 +0.0 + 0 +LINE + 5 +71B + 8 +0 + 62 + 0 + 10 +5550.000023 + 20 +22153.778503 + 30 +0.0 + 11 +5562.500023 + 21 +22175.429138 + 31 +0.0 + 0 +LINE + 5 +71C + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +21105.887725 + 30 +0.0 + 11 +4925.000023 + 21 +21114.548019 + 31 +0.0 + 0 +LINE + 5 +71D + 8 +0 + 62 + 0 + 10 +4950.000023 + 20 +21157.849289 + 30 +0.0 + 11 +4962.500023 + 21 +21179.499924 + 31 +0.0 + 0 +LINE + 5 +71E + 8 +0 + 62 + 0 + 10 +4987.500023 + 20 +21222.801194 + 30 +0.0 + 11 +5000.0 + 21 +21244.45179 + 31 +0.0 + 0 +LINE + 5 +71F + 8 +0 + 62 + 0 + 10 +5512.500023 + 20 +22132.127868 + 30 +0.0 + 11 +5525.000023 + 21 +22153.778503 + 31 +0.0 + 0 +LINE + 5 +720 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +21149.188995 + 30 +0.0 + 11 +4925.000023 + 21 +21157.849289 + 31 +0.0 + 0 +LINE + 5 +721 + 8 +0 + 62 + 0 + 10 +4950.000023 + 20 +21201.150559 + 30 +0.0 + 11 +4962.500023 + 21 +21222.801194 + 31 +0.0 + 0 +LINE + 5 +722 + 8 +0 + 62 + 0 + 10 +4987.500023 + 20 +21266.102464 + 30 +0.0 + 11 +5000.0 + 21 +21287.75306 + 31 +0.0 + 0 +LINE + 5 +723 + 8 +0 + 62 + 0 + 10 +5477.611243 + 20 +22115.0 + 30 +0.0 + 11 +5487.500023 + 21 +22132.127868 + 31 +0.0 + 0 +LINE + 5 +724 + 8 +0 + 62 + 0 + 10 +5512.500023 + 20 +22175.429138 + 30 +0.0 + 11 +5523.799265 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +725 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +21192.490265 + 30 +0.0 + 11 +4925.000023 + 21 +21201.150559 + 31 +0.0 + 0 +LINE + 5 +726 + 8 +0 + 62 + 0 + 10 +4950.000023 + 20 +21244.451829 + 30 +0.0 + 11 +4962.500023 + 21 +21266.102464 + 31 +0.0 + 0 +LINE + 5 +727 + 8 +0 + 62 + 0 + 10 +4987.500023 + 20 +21309.403735 + 30 +0.0 + 11 +5000.0 + 21 +21331.05433 + 31 +0.0 + 0 +LINE + 5 +728 + 8 +0 + 62 + 0 + 10 +5475.000023 + 20 +22153.778503 + 30 +0.0 + 11 +5487.500023 + 21 +22175.429138 + 31 +0.0 + 0 +LINE + 5 +729 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +21235.791535 + 30 +0.0 + 11 +4925.000023 + 21 +21244.451829 + 31 +0.0 + 0 +LINE + 5 +72A + 8 +0 + 62 + 0 + 10 +4950.000023 + 20 +21287.753099 + 30 +0.0 + 11 +4962.500023 + 21 +21309.403734 + 31 +0.0 + 0 +LINE + 5 +72B + 8 +0 + 62 + 0 + 10 +4987.500023 + 20 +21352.705005 + 30 +0.0 + 11 +5000.0 + 21 +21374.3556 + 31 +0.0 + 0 +LINE + 5 +72C + 8 +0 + 62 + 0 + 10 +5437.500023 + 20 +22132.127868 + 30 +0.0 + 11 +5450.000023 + 21 +22153.778503 + 31 +0.0 + 0 +LINE + 5 +72D + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +21279.092805 + 30 +0.0 + 11 +4925.000023 + 21 +21287.753099 + 31 +0.0 + 0 +LINE + 5 +72E + 8 +0 + 62 + 0 + 10 +4950.000023 + 20 +21331.05437 + 30 +0.0 + 11 +4962.500023 + 21 +21352.705005 + 31 +0.0 + 0 +LINE + 5 +72F + 8 +0 + 62 + 0 + 10 +4987.500023 + 20 +21396.006275 + 30 +0.0 + 11 +5000.0 + 21 +21417.65687 + 31 +0.0 + 0 +LINE + 5 +730 + 8 +0 + 62 + 0 + 10 +5402.611244 + 20 +22115.0 + 30 +0.0 + 11 +5412.500023 + 21 +22132.127868 + 31 +0.0 + 0 +LINE + 5 +731 + 8 +0 + 62 + 0 + 10 +5437.500023 + 20 +22175.429138 + 30 +0.0 + 11 +5448.799265 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +732 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +21322.394075 + 30 +0.0 + 11 +4925.000023 + 21 +21331.054369 + 31 +0.0 + 0 +LINE + 5 +733 + 8 +0 + 62 + 0 + 10 +4950.000023 + 20 +21374.35564 + 30 +0.0 + 11 +4962.500023 + 21 +21396.006275 + 31 +0.0 + 0 +LINE + 5 +734 + 8 +0 + 62 + 0 + 10 +4987.500023 + 20 +21439.307545 + 30 +0.0 + 11 +5000.0 + 21 +21460.95814 + 31 +0.0 + 0 +LINE + 5 +735 + 8 +0 + 62 + 0 + 10 +5400.000023 + 20 +22153.778503 + 30 +0.0 + 11 +5412.500023 + 21 +22175.429138 + 31 +0.0 + 0 +LINE + 5 +736 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +21365.695345 + 30 +0.0 + 11 +4925.000023 + 21 +21374.35564 + 31 +0.0 + 0 +LINE + 5 +737 + 8 +0 + 62 + 0 + 10 +4950.000023 + 20 +21417.65691 + 30 +0.0 + 11 +4962.500023 + 21 +21439.307545 + 31 +0.0 + 0 +LINE + 5 +738 + 8 +0 + 62 + 0 + 10 +4987.500023 + 20 +21482.608815 + 30 +0.0 + 11 +5000.0 + 21 +21504.25941 + 31 +0.0 + 0 +LINE + 5 +739 + 8 +0 + 62 + 0 + 10 +5362.500023 + 20 +22132.127868 + 30 +0.0 + 11 +5375.000023 + 21 +22153.778503 + 31 +0.0 + 0 +LINE + 5 +73A + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +21408.996615 + 30 +0.0 + 11 +4925.000023 + 21 +21417.65691 + 31 +0.0 + 0 +LINE + 5 +73B + 8 +0 + 62 + 0 + 10 +4950.000023 + 20 +21460.95818 + 30 +0.0 + 11 +4962.500023 + 21 +21482.608815 + 31 +0.0 + 0 +LINE + 5 +73C + 8 +0 + 62 + 0 + 10 +4987.500023 + 20 +21525.910085 + 30 +0.0 + 11 +5000.0 + 21 +21547.56068 + 31 +0.0 + 0 +LINE + 5 +73D + 8 +0 + 62 + 0 + 10 +5327.611244 + 20 +22115.0 + 30 +0.0 + 11 +5337.500023 + 21 +22132.127868 + 31 +0.0 + 0 +LINE + 5 +73E + 8 +0 + 62 + 0 + 10 +5362.500023 + 20 +22175.429138 + 30 +0.0 + 11 +5373.799266 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +73F + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +21452.297885 + 30 +0.0 + 11 +4925.000023 + 21 +21460.95818 + 31 +0.0 + 0 +LINE + 5 +740 + 8 +0 + 62 + 0 + 10 +4950.000023 + 20 +21504.25945 + 30 +0.0 + 11 +4962.500023 + 21 +21525.910085 + 31 +0.0 + 0 +LINE + 5 +741 + 8 +0 + 62 + 0 + 10 +4987.500023 + 20 +21569.211355 + 30 +0.0 + 11 +5000.0 + 21 +21590.86195 + 31 +0.0 + 0 +LINE + 5 +742 + 8 +0 + 62 + 0 + 10 +5325.000023 + 20 +22153.778503 + 30 +0.0 + 11 +5337.500023 + 21 +22175.429138 + 31 +0.0 + 0 +LINE + 5 +743 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +21495.599155 + 30 +0.0 + 11 +4925.000023 + 21 +21504.25945 + 31 +0.0 + 0 +LINE + 5 +744 + 8 +0 + 62 + 0 + 10 +4950.000023 + 20 +21547.56072 + 30 +0.0 + 11 +4962.500023 + 21 +21569.211355 + 31 +0.0 + 0 +LINE + 5 +745 + 8 +0 + 62 + 0 + 10 +4987.500023 + 20 +21612.512625 + 30 +0.0 + 11 +5000.0 + 21 +21634.16322 + 31 +0.0 + 0 +LINE + 5 +746 + 8 +0 + 62 + 0 + 10 +5287.500023 + 20 +22132.127868 + 30 +0.0 + 11 +5300.000023 + 21 +22153.778503 + 31 +0.0 + 0 +LINE + 5 +747 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +21538.900425 + 30 +0.0 + 11 +4925.000024 + 21 +21547.56072 + 31 +0.0 + 0 +LINE + 5 +748 + 8 +0 + 62 + 0 + 10 +4950.000024 + 20 +21590.86199 + 30 +0.0 + 11 +4962.500024 + 21 +21612.512625 + 31 +0.0 + 0 +LINE + 5 +749 + 8 +0 + 62 + 0 + 10 +4987.500024 + 20 +21655.813896 + 30 +0.0 + 11 +5000.0 + 21 +21677.46449 + 31 +0.0 + 0 +LINE + 5 +74A + 8 +0 + 62 + 0 + 10 +5252.611244 + 20 +22115.0 + 30 +0.0 + 11 +5262.500024 + 21 +22132.127868 + 31 +0.0 + 0 +LINE + 5 +74B + 8 +0 + 62 + 0 + 10 +5287.500024 + 20 +22175.429138 + 30 +0.0 + 11 +5298.799266 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +74C + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +21582.201695 + 30 +0.0 + 11 +4925.000024 + 21 +21590.86199 + 31 +0.0 + 0 +LINE + 5 +74D + 8 +0 + 62 + 0 + 10 +4950.000024 + 20 +21634.16326 + 30 +0.0 + 11 +4962.500024 + 21 +21655.813896 + 31 +0.0 + 0 +LINE + 5 +74E + 8 +0 + 62 + 0 + 10 +4987.500024 + 20 +21699.115166 + 30 +0.0 + 11 +5000.0 + 21 +21720.76576 + 31 +0.0 + 0 +LINE + 5 +74F + 8 +0 + 62 + 0 + 10 +5250.000024 + 20 +22153.778503 + 30 +0.0 + 11 +5262.500024 + 21 +22175.429138 + 31 +0.0 + 0 +LINE + 5 +750 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +21625.502965 + 30 +0.0 + 11 +4925.000024 + 21 +21634.16326 + 31 +0.0 + 0 +LINE + 5 +751 + 8 +0 + 62 + 0 + 10 +4950.000024 + 20 +21677.464531 + 30 +0.0 + 11 +4962.500024 + 21 +21699.115166 + 31 +0.0 + 0 +LINE + 5 +752 + 8 +0 + 62 + 0 + 10 +4987.500024 + 20 +21742.416436 + 30 +0.0 + 11 +5000.0 + 21 +21764.06703 + 31 +0.0 + 0 +LINE + 5 +753 + 8 +0 + 62 + 0 + 10 +5212.500024 + 20 +22132.127868 + 30 +0.0 + 11 +5225.000024 + 21 +22153.778503 + 31 +0.0 + 0 +LINE + 5 +754 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +21668.804235 + 30 +0.0 + 11 +4925.000024 + 21 +21677.464531 + 31 +0.0 + 0 +LINE + 5 +755 + 8 +0 + 62 + 0 + 10 +4950.000024 + 20 +21720.765801 + 30 +0.0 + 11 +4962.500024 + 21 +21742.416436 + 31 +0.0 + 0 +LINE + 5 +756 + 8 +0 + 62 + 0 + 10 +4987.500024 + 20 +21785.717706 + 30 +0.0 + 11 +5000.0 + 21 +21807.3683 + 31 +0.0 + 0 +LINE + 5 +757 + 8 +0 + 62 + 0 + 10 +5177.611245 + 20 +22115.0 + 30 +0.0 + 11 +5187.500024 + 21 +22132.127868 + 31 +0.0 + 0 +LINE + 5 +758 + 8 +0 + 62 + 0 + 10 +5212.500024 + 20 +22175.429138 + 30 +0.0 + 11 +5223.799266 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +759 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +21712.105505 + 30 +0.0 + 11 +4925.000024 + 21 +21720.765801 + 31 +0.0 + 0 +LINE + 5 +75A + 8 +0 + 62 + 0 + 10 +4950.000024 + 20 +21764.067071 + 30 +0.0 + 11 +4962.500024 + 21 +21785.717706 + 31 +0.0 + 0 +LINE + 5 +75B + 8 +0 + 62 + 0 + 10 +4987.500024 + 20 +21829.018976 + 30 +0.0 + 11 +5000.0 + 21 +21850.66957 + 31 +0.0 + 0 +LINE + 5 +75C + 8 +0 + 62 + 0 + 10 +5175.000024 + 20 +22153.778503 + 30 +0.0 + 11 +5187.500024 + 21 +22175.429138 + 31 +0.0 + 0 +LINE + 5 +75D + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +21755.406775 + 30 +0.0 + 11 +4925.000024 + 21 +21764.067071 + 31 +0.0 + 0 +LINE + 5 +75E + 8 +0 + 62 + 0 + 10 +4950.000024 + 20 +21807.368341 + 30 +0.0 + 11 +4962.500024 + 21 +21829.018976 + 31 +0.0 + 0 +LINE + 5 +75F + 8 +0 + 62 + 0 + 10 +4987.500024 + 20 +21872.320246 + 30 +0.0 + 11 +5000.0 + 21 +21893.97084 + 31 +0.0 + 0 +LINE + 5 +760 + 8 +0 + 62 + 0 + 10 +5137.500024 + 20 +22132.127867 + 30 +0.0 + 11 +5150.000024 + 21 +22153.778503 + 31 +0.0 + 0 +LINE + 5 +761 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +21798.708045 + 30 +0.0 + 11 +4925.000024 + 21 +21807.368341 + 31 +0.0 + 0 +LINE + 5 +762 + 8 +0 + 62 + 0 + 10 +4950.000024 + 20 +21850.669611 + 30 +0.0 + 11 +4962.500024 + 21 +21872.320246 + 31 +0.0 + 0 +LINE + 5 +763 + 8 +0 + 62 + 0 + 10 +4987.500024 + 20 +21915.621516 + 30 +0.0 + 11 +5000.0 + 21 +21937.27211 + 31 +0.0 + 0 +LINE + 5 +764 + 8 +0 + 62 + 0 + 10 +5102.611245 + 20 +22115.0 + 30 +0.0 + 11 +5112.500024 + 21 +22132.127867 + 31 +0.0 + 0 +LINE + 5 +765 + 8 +0 + 62 + 0 + 10 +5137.500024 + 20 +22175.429138 + 30 +0.0 + 11 +5148.799267 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +766 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +21842.009315 + 30 +0.0 + 11 +4925.000024 + 21 +21850.669611 + 31 +0.0 + 0 +LINE + 5 +767 + 8 +0 + 62 + 0 + 10 +4950.000024 + 20 +21893.970881 + 30 +0.0 + 11 +4962.500024 + 21 +21915.621516 + 31 +0.0 + 0 +LINE + 5 +768 + 8 +0 + 62 + 0 + 10 +4987.500024 + 20 +21958.922787 + 30 +0.0 + 11 +5000.0 + 21 +21980.57338 + 31 +0.0 + 0 +LINE + 5 +769 + 8 +0 + 62 + 0 + 10 +5100.000024 + 20 +22153.778502 + 30 +0.0 + 11 +5112.500024 + 21 +22175.429138 + 31 +0.0 + 0 +LINE + 5 +76A + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +21885.310585 + 30 +0.0 + 11 +4925.000024 + 21 +21893.970881 + 31 +0.0 + 0 +LINE + 5 +76B + 8 +0 + 62 + 0 + 10 +4950.000024 + 20 +21937.272151 + 30 +0.0 + 11 +4962.500024 + 21 +21958.922787 + 31 +0.0 + 0 +LINE + 5 +76C + 8 +0 + 62 + 0 + 10 +4987.500024 + 20 +22002.224057 + 30 +0.0 + 11 +5000.0 + 21 +22023.87465 + 31 +0.0 + 0 +LINE + 5 +76D + 8 +0 + 62 + 0 + 10 +5062.500024 + 20 +22132.127867 + 30 +0.0 + 11 +5075.000024 + 21 +22153.778502 + 31 +0.0 + 0 +LINE + 5 +76E + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +21928.611855 + 30 +0.0 + 11 +4925.000024 + 21 +21937.272151 + 31 +0.0 + 0 +LINE + 5 +76F + 8 +0 + 62 + 0 + 10 +4950.000024 + 20 +21980.573422 + 30 +0.0 + 11 +4962.500024 + 21 +22002.224057 + 31 +0.0 + 0 +LINE + 5 +770 + 8 +0 + 62 + 0 + 10 +4987.500024 + 20 +22045.525327 + 30 +0.0 + 11 +5000.0 + 21 +22067.17592 + 31 +0.0 + 0 +LINE + 5 +771 + 8 +0 + 62 + 0 + 10 +5027.611245 + 20 +22115.0 + 30 +0.0 + 11 +5037.500024 + 21 +22132.127867 + 31 +0.0 + 0 +LINE + 5 +772 + 8 +0 + 62 + 0 + 10 +5062.500024 + 20 +22175.429137 + 30 +0.0 + 11 +5073.799267 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +773 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +21971.913125 + 30 +0.0 + 11 +4925.000024 + 21 +21980.573422 + 31 +0.0 + 0 +LINE + 5 +774 + 8 +0 + 62 + 0 + 10 +4950.000024 + 20 +22023.874692 + 30 +0.0 + 11 +4962.500024 + 21 +22045.525327 + 31 +0.0 + 0 +LINE + 5 +775 + 8 +0 + 62 + 0 + 10 +4987.500024 + 20 +22088.826597 + 30 +0.0 + 11 +5000.0 + 21 +22110.47719 + 31 +0.0 + 0 +LINE + 5 +776 + 8 +0 + 62 + 0 + 10 +5025.000024 + 20 +22153.778502 + 30 +0.0 + 11 +5037.500024 + 21 +22175.429137 + 31 +0.0 + 0 +LINE + 5 +777 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +22015.214395 + 30 +0.0 + 11 +4925.000024 + 21 +22023.874692 + 31 +0.0 + 0 +LINE + 5 +778 + 8 +0 + 62 + 0 + 10 +4950.000024 + 20 +22067.175962 + 30 +0.0 + 11 +4962.500024 + 21 +22088.826597 + 31 +0.0 + 0 +LINE + 5 +779 + 8 +0 + 62 + 0 + 10 +4987.500024 + 20 +22132.127867 + 30 +0.0 + 11 +5000.000024 + 21 +22153.778502 + 31 +0.0 + 0 +LINE + 5 +77A + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +22058.515665 + 30 +0.0 + 11 +4925.000024 + 21 +22067.175962 + 31 +0.0 + 0 +LINE + 5 +77B + 8 +0 + 62 + 0 + 10 +4950.000024 + 20 +22110.477232 + 30 +0.0 + 11 +4962.500024 + 21 +22132.127867 + 31 +0.0 + 0 +LINE + 5 +77C + 8 +0 + 62 + 0 + 10 +4987.500024 + 20 +22175.429137 + 30 +0.0 + 11 +4998.799267 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +77D + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +22101.816935 + 30 +0.0 + 11 +4925.000025 + 21 +22110.477232 + 31 +0.0 + 0 +LINE + 5 +77E + 8 +0 + 62 + 0 + 10 +4950.000025 + 20 +22153.778502 + 30 +0.0 + 11 +4962.500025 + 21 +22175.429137 + 31 +0.0 + 0 +LINE + 5 +77F + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +22145.118205 + 30 +0.0 + 11 +4925.000025 + 21 +22153.778502 + 31 +0.0 + 0 +LINE + 5 +780 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +22188.419475 + 30 +0.0 + 11 +4923.799268 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +781 + 8 +0 + 62 + 0 + 10 +6675.000019 + 20 +22153.778505 + 30 +0.0 + 11 +6687.500019 + 21 +22175.429141 + 31 +0.0 + 0 +LINE + 5 +782 + 8 +0 + 62 + 0 + 10 +6677.611238 + 20 +22115.0 + 30 +0.0 + 11 +6687.500019 + 21 +22132.12787 + 31 +0.0 + 0 +LINE + 5 +783 + 8 +0 + 62 + 0 + 10 +6712.500019 + 20 +22175.429141 + 30 +0.0 + 11 +6723.79926 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +784 + 8 +0 + 62 + 0 + 10 +6712.500019 + 20 +22132.12787 + 30 +0.0 + 11 +6725.000019 + 21 +22153.778506 + 31 +0.0 + 0 +LINE + 5 +785 + 8 +0 + 62 + 0 + 10 +6750.000019 + 20 +22153.778506 + 30 +0.0 + 11 +6751.25 + 21 +22155.943537 + 31 +0.0 + 0 +ENDBLK + 5 +786 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X40 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X40 + 1 + + 0 +LINE + 5 +788 + 8 +0 + 62 + 0 + 10 +8525.0 + 20 +22153.77846 + 30 +0.0 + 11 +8550.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +789 + 8 +0 + 62 + 0 + 10 +8600.0 + 20 +22153.77846 + 30 +0.0 + 11 +8625.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +78A + 8 +0 + 62 + 0 + 10 +8675.0 + 20 +22153.77846 + 30 +0.0 + 11 +8700.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +78B + 8 +0 + 62 + 0 + 10 +8750.0 + 20 +22153.77846 + 30 +0.0 + 11 +8775.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +78C + 8 +0 + 62 + 0 + 10 +8825.0 + 20 +22153.77846 + 30 +0.0 + 11 +8850.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +78D + 8 +0 + 62 + 0 + 10 +8900.0 + 20 +22153.77846 + 30 +0.0 + 11 +8925.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +78E + 8 +0 + 62 + 0 + 10 +8975.0 + 20 +22153.77846 + 30 +0.0 + 11 +9000.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +78F + 8 +0 + 62 + 0 + 10 +9050.0 + 20 +22153.77846 + 30 +0.0 + 11 +9075.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +790 + 8 +0 + 62 + 0 + 10 +9125.0 + 20 +22153.77846 + 30 +0.0 + 11 +9150.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +791 + 8 +0 + 62 + 0 + 10 +9200.0 + 20 +22153.77846 + 30 +0.0 + 11 +9225.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +792 + 8 +0 + 62 + 0 + 10 +9275.0 + 20 +22153.77846 + 30 +0.0 + 11 +9300.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +793 + 8 +0 + 62 + 0 + 10 +9350.0 + 20 +22153.77846 + 30 +0.0 + 11 +9375.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +794 + 8 +0 + 62 + 0 + 10 +9425.0 + 20 +22153.77846 + 30 +0.0 + 11 +9450.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +795 + 8 +0 + 62 + 0 + 10 +9500.0 + 20 +22153.77846 + 30 +0.0 + 11 +9525.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +796 + 8 +0 + 62 + 0 + 10 +9575.0 + 20 +22153.77846 + 30 +0.0 + 11 +9600.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +797 + 8 +0 + 62 + 0 + 10 +9650.0 + 20 +22153.77846 + 30 +0.0 + 11 +9675.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +798 + 8 +0 + 62 + 0 + 10 +9725.0 + 20 +22153.77846 + 30 +0.0 + 11 +9750.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +799 + 8 +0 + 62 + 0 + 10 +9800.0 + 20 +22153.77846 + 30 +0.0 + 11 +9825.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +79A + 8 +0 + 62 + 0 + 10 +9875.0 + 20 +22153.77846 + 30 +0.0 + 11 +9900.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +79B + 8 +0 + 62 + 0 + 10 +9950.0 + 20 +22153.77846 + 30 +0.0 + 11 +9975.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +79C + 8 +0 + 62 + 0 + 10 +10025.0 + 20 +22153.77846 + 30 +0.0 + 11 +10050.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +79D + 8 +0 + 62 + 0 + 10 +10100.0 + 20 +22153.77846 + 30 +0.0 + 11 +10125.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +79E + 8 +0 + 62 + 0 + 10 +10175.0 + 20 +22153.77846 + 30 +0.0 + 11 +10200.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +79F + 8 +0 + 62 + 0 + 10 +10250.0 + 20 +22153.77846 + 30 +0.0 + 11 +10251.25 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +7A0 + 8 +0 + 62 + 0 + 10 +8488.75 + 20 +22175.429095 + 30 +0.0 + 11 +8512.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +7A1 + 8 +0 + 62 + 0 + 10 +8562.5 + 20 +22175.429095 + 30 +0.0 + 11 +8587.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +7A2 + 8 +0 + 62 + 0 + 10 +8637.5 + 20 +22175.429095 + 30 +0.0 + 11 +8662.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +7A3 + 8 +0 + 62 + 0 + 10 +8712.5 + 20 +22175.429095 + 30 +0.0 + 11 +8737.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +7A4 + 8 +0 + 62 + 0 + 10 +8787.5 + 20 +22175.429095 + 30 +0.0 + 11 +8812.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +7A5 + 8 +0 + 62 + 0 + 10 +8862.5 + 20 +22175.429095 + 30 +0.0 + 11 +8887.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +7A6 + 8 +0 + 62 + 0 + 10 +8937.5 + 20 +22175.429095 + 30 +0.0 + 11 +8962.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +7A7 + 8 +0 + 62 + 0 + 10 +9012.5 + 20 +22175.429095 + 30 +0.0 + 11 +9037.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +7A8 + 8 +0 + 62 + 0 + 10 +9087.5 + 20 +22175.429095 + 30 +0.0 + 11 +9112.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +7A9 + 8 +0 + 62 + 0 + 10 +9162.5 + 20 +22175.429095 + 30 +0.0 + 11 +9187.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +7AA + 8 +0 + 62 + 0 + 10 +9237.5 + 20 +22175.429095 + 30 +0.0 + 11 +9262.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +7AB + 8 +0 + 62 + 0 + 10 +9312.5 + 20 +22175.429095 + 30 +0.0 + 11 +9337.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +7AC + 8 +0 + 62 + 0 + 10 +9387.5 + 20 +22175.429095 + 30 +0.0 + 11 +9412.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +7AD + 8 +0 + 62 + 0 + 10 +9462.5 + 20 +22175.429095 + 30 +0.0 + 11 +9487.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +7AE + 8 +0 + 62 + 0 + 10 +9537.5 + 20 +22175.429095 + 30 +0.0 + 11 +9562.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +7AF + 8 +0 + 62 + 0 + 10 +9612.5 + 20 +22175.429095 + 30 +0.0 + 11 +9637.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +7B0 + 8 +0 + 62 + 0 + 10 +9687.5 + 20 +22175.429095 + 30 +0.0 + 11 +9712.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +7B1 + 8 +0 + 62 + 0 + 10 +9762.5 + 20 +22175.429095 + 30 +0.0 + 11 +9787.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +7B2 + 8 +0 + 62 + 0 + 10 +9837.5 + 20 +22175.429095 + 30 +0.0 + 11 +9862.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +7B3 + 8 +0 + 62 + 0 + 10 +9912.5 + 20 +22175.429095 + 30 +0.0 + 11 +9937.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +7B4 + 8 +0 + 62 + 0 + 10 +9987.5 + 20 +22175.429095 + 30 +0.0 + 11 +10012.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +7B5 + 8 +0 + 62 + 0 + 10 +10062.5 + 20 +22175.429095 + 30 +0.0 + 11 +10087.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +7B6 + 8 +0 + 62 + 0 + 10 +10137.5 + 20 +22175.429095 + 30 +0.0 + 11 +10162.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +7B7 + 8 +0 + 62 + 0 + 10 +10212.5 + 20 +22175.429095 + 30 +0.0 + 11 +10237.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +7B8 + 8 +0 + 62 + 0 + 10 +8488.75 + 20 +22132.127825 + 30 +0.0 + 11 +8512.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +7B9 + 8 +0 + 62 + 0 + 10 +8562.5 + 20 +22132.127825 + 30 +0.0 + 11 +8587.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +7BA + 8 +0 + 62 + 0 + 10 +8637.5 + 20 +22132.127825 + 30 +0.0 + 11 +8662.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +7BB + 8 +0 + 62 + 0 + 10 +8712.5 + 20 +22132.127825 + 30 +0.0 + 11 +8737.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +7BC + 8 +0 + 62 + 0 + 10 +8787.5 + 20 +22132.127825 + 30 +0.0 + 11 +8812.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +7BD + 8 +0 + 62 + 0 + 10 +8862.5 + 20 +22132.127825 + 30 +0.0 + 11 +8887.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +7BE + 8 +0 + 62 + 0 + 10 +8937.5 + 20 +22132.127825 + 30 +0.0 + 11 +8962.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +7BF + 8 +0 + 62 + 0 + 10 +9012.5 + 20 +22132.127825 + 30 +0.0 + 11 +9037.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +7C0 + 8 +0 + 62 + 0 + 10 +9087.5 + 20 +22132.127825 + 30 +0.0 + 11 +9112.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +7C1 + 8 +0 + 62 + 0 + 10 +9162.5 + 20 +22132.127825 + 30 +0.0 + 11 +9187.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +7C2 + 8 +0 + 62 + 0 + 10 +9237.5 + 20 +22132.127825 + 30 +0.0 + 11 +9262.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +7C3 + 8 +0 + 62 + 0 + 10 +9312.5 + 20 +22132.127825 + 30 +0.0 + 11 +9337.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +7C4 + 8 +0 + 62 + 0 + 10 +9387.5 + 20 +22132.127825 + 30 +0.0 + 11 +9412.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +7C5 + 8 +0 + 62 + 0 + 10 +9462.5 + 20 +22132.127825 + 30 +0.0 + 11 +9487.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +7C6 + 8 +0 + 62 + 0 + 10 +9537.5 + 20 +22132.127825 + 30 +0.0 + 11 +9562.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +7C7 + 8 +0 + 62 + 0 + 10 +9612.5 + 20 +22132.127825 + 30 +0.0 + 11 +9637.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +7C8 + 8 +0 + 62 + 0 + 10 +9687.5 + 20 +22132.127825 + 30 +0.0 + 11 +9712.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +7C9 + 8 +0 + 62 + 0 + 10 +9762.5 + 20 +22132.127825 + 30 +0.0 + 11 +9787.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +7CA + 8 +0 + 62 + 0 + 10 +9837.5 + 20 +22132.127825 + 30 +0.0 + 11 +9862.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +7CB + 8 +0 + 62 + 0 + 10 +9912.5 + 20 +22132.127825 + 30 +0.0 + 11 +9937.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +7CC + 8 +0 + 62 + 0 + 10 +9987.5 + 20 +22132.127825 + 30 +0.0 + 11 +10012.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +7CD + 8 +0 + 62 + 0 + 10 +10062.5 + 20 +22132.127825 + 30 +0.0 + 11 +10087.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +7CE + 8 +0 + 62 + 0 + 10 +10137.5 + 20 +22132.127825 + 30 +0.0 + 11 +10162.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +7CF + 8 +0 + 62 + 0 + 10 +10212.5 + 20 +22132.127825 + 30 +0.0 + 11 +10237.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +7D0 + 8 +0 + 62 + 0 + 10 +9349.999961 + 20 +22153.778494 + 30 +0.0 + 11 +9337.499961 + 21 +22175.429129 + 31 +0.0 + 0 +LINE + 5 +7D1 + 8 +0 + 62 + 0 + 10 +9347.388735 + 20 +22115.0 + 30 +0.0 + 11 +9337.499961 + 21 +22132.127859 + 31 +0.0 + 0 +LINE + 5 +7D2 + 8 +0 + 62 + 0 + 10 +9312.499961 + 20 +22175.429129 + 30 +0.0 + 11 +9301.200714 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +7D3 + 8 +0 + 62 + 0 + 10 +9312.499961 + 20 +22132.127859 + 30 +0.0 + 11 +9299.999961 + 21 +22153.778494 + 31 +0.0 + 0 +LINE + 5 +7D4 + 8 +0 + 62 + 0 + 10 +9274.999962 + 20 +22153.778494 + 30 +0.0 + 11 +9262.499962 + 21 +22175.429129 + 31 +0.0 + 0 +LINE + 5 +7D5 + 8 +0 + 62 + 0 + 10 +9272.388736 + 20 +22115.0 + 30 +0.0 + 11 +9262.499962 + 21 +22132.127859 + 31 +0.0 + 0 +LINE + 5 +7D6 + 8 +0 + 62 + 0 + 10 +9237.499962 + 20 +22175.429129 + 30 +0.0 + 11 +9226.200714 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +7D7 + 8 +0 + 62 + 0 + 10 +9237.499962 + 20 +22132.127859 + 30 +0.0 + 11 +9224.999962 + 21 +22153.778494 + 31 +0.0 + 0 +LINE + 5 +7D8 + 8 +0 + 62 + 0 + 10 +9199.999962 + 20 +22153.778494 + 30 +0.0 + 11 +9187.499962 + 21 +22175.429129 + 31 +0.0 + 0 +LINE + 5 +7D9 + 8 +0 + 62 + 0 + 10 +9197.388736 + 20 +22115.0 + 30 +0.0 + 11 +9187.499962 + 21 +22132.127859 + 31 +0.0 + 0 +LINE + 5 +7DA + 8 +0 + 62 + 0 + 10 +9162.499962 + 20 +22175.429129 + 30 +0.0 + 11 +9151.200715 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +7DB + 8 +0 + 62 + 0 + 10 +9162.499962 + 20 +22132.127859 + 30 +0.0 + 11 +9149.999962 + 21 +22153.778494 + 31 +0.0 + 0 +LINE + 5 +7DC + 8 +0 + 62 + 0 + 10 +9124.999962 + 20 +22153.778494 + 30 +0.0 + 11 +9112.499962 + 21 +22175.42913 + 31 +0.0 + 0 +LINE + 5 +7DD + 8 +0 + 62 + 0 + 10 +9122.388736 + 20 +22115.0 + 30 +0.0 + 11 +9112.499962 + 21 +22132.127859 + 31 +0.0 + 0 +LINE + 5 +7DE + 8 +0 + 62 + 0 + 10 +9087.499962 + 20 +22175.42913 + 30 +0.0 + 11 +9076.200715 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +7DF + 8 +0 + 62 + 0 + 10 +9087.499962 + 20 +22132.127859 + 30 +0.0 + 11 +9074.999962 + 21 +22153.778495 + 31 +0.0 + 0 +LINE + 5 +7E0 + 8 +0 + 62 + 0 + 10 +9049.999962 + 20 +22153.778495 + 30 +0.0 + 11 +9037.499962 + 21 +22175.42913 + 31 +0.0 + 0 +LINE + 5 +7E1 + 8 +0 + 62 + 0 + 10 +9047.388737 + 20 +22115.0 + 30 +0.0 + 11 +9037.499962 + 21 +22132.12786 + 31 +0.0 + 0 +LINE + 5 +7E2 + 8 +0 + 62 + 0 + 10 +9012.499962 + 20 +22175.42913 + 30 +0.0 + 11 +9001.200715 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +7E3 + 8 +0 + 62 + 0 + 10 +9012.499962 + 20 +22132.12786 + 30 +0.0 + 11 +8999.999962 + 21 +22153.778495 + 31 +0.0 + 0 +LINE + 5 +7E4 + 8 +0 + 62 + 0 + 10 +8974.999963 + 20 +22153.778495 + 30 +0.0 + 11 +8962.499963 + 21 +22175.42913 + 31 +0.0 + 0 +LINE + 5 +7E5 + 8 +0 + 62 + 0 + 10 +8972.388737 + 20 +22115.0 + 30 +0.0 + 11 +8962.499963 + 21 +22132.12786 + 31 +0.0 + 0 +LINE + 5 +7E6 + 8 +0 + 62 + 0 + 10 +8937.499963 + 20 +22175.42913 + 30 +0.0 + 11 +8926.200716 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +7E7 + 8 +0 + 62 + 0 + 10 +8937.499963 + 20 +22132.12786 + 30 +0.0 + 11 +8924.999963 + 21 +22153.778495 + 31 +0.0 + 0 +LINE + 5 +7E8 + 8 +0 + 62 + 0 + 10 +8899.999963 + 20 +22153.778495 + 30 +0.0 + 11 +8887.499963 + 21 +22175.42913 + 31 +0.0 + 0 +LINE + 5 +7E9 + 8 +0 + 62 + 0 + 10 +8897.388737 + 20 +22115.0 + 30 +0.0 + 11 +8887.499963 + 21 +22132.12786 + 31 +0.0 + 0 +LINE + 5 +7EA + 8 +0 + 62 + 0 + 10 +8862.499963 + 20 +22175.42913 + 30 +0.0 + 11 +8851.200716 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +7EB + 8 +0 + 62 + 0 + 10 +8862.499963 + 20 +22132.12786 + 30 +0.0 + 11 +8849.999963 + 21 +22153.778495 + 31 +0.0 + 0 +LINE + 5 +7EC + 8 +0 + 62 + 0 + 10 +8824.999963 + 20 +22153.778495 + 30 +0.0 + 11 +8812.499963 + 21 +22175.42913 + 31 +0.0 + 0 +LINE + 5 +7ED + 8 +0 + 62 + 0 + 10 +8822.388738 + 20 +22115.0 + 30 +0.0 + 11 +8812.499963 + 21 +22132.12786 + 31 +0.0 + 0 +LINE + 5 +7EE + 8 +0 + 62 + 0 + 10 +8787.499963 + 20 +22175.42913 + 30 +0.0 + 11 +8776.200716 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +7EF + 8 +0 + 62 + 0 + 10 +8787.499963 + 20 +22132.12786 + 30 +0.0 + 11 +8774.999963 + 21 +22153.778495 + 31 +0.0 + 0 +LINE + 5 +7F0 + 8 +0 + 62 + 0 + 10 +8749.999963 + 20 +22153.778495 + 30 +0.0 + 11 +8737.499963 + 21 +22175.42913 + 31 +0.0 + 0 +LINE + 5 +7F1 + 8 +0 + 62 + 0 + 10 +8747.388738 + 20 +22115.0 + 30 +0.0 + 11 +8737.499963 + 21 +22132.12786 + 31 +0.0 + 0 +LINE + 5 +7F2 + 8 +0 + 62 + 0 + 10 +8712.499963 + 20 +22175.42913 + 30 +0.0 + 11 +8701.200717 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +7F3 + 8 +0 + 62 + 0 + 10 +8712.499963 + 20 +22132.12786 + 30 +0.0 + 11 +8699.999963 + 21 +22153.778495 + 31 +0.0 + 0 +LINE + 5 +7F4 + 8 +0 + 62 + 0 + 10 +8674.999964 + 20 +22153.778495 + 30 +0.0 + 11 +8662.499964 + 21 +22175.42913 + 31 +0.0 + 0 +LINE + 5 +7F5 + 8 +0 + 62 + 0 + 10 +8672.388738 + 20 +22115.0 + 30 +0.0 + 11 +8662.499964 + 21 +22132.12786 + 31 +0.0 + 0 +LINE + 5 +7F6 + 8 +0 + 62 + 0 + 10 +8637.499964 + 20 +22175.42913 + 30 +0.0 + 11 +8626.200717 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +7F7 + 8 +0 + 62 + 0 + 10 +8637.499964 + 20 +22132.12786 + 30 +0.0 + 11 +8624.999964 + 21 +22153.778495 + 31 +0.0 + 0 +LINE + 5 +7F8 + 8 +0 + 62 + 0 + 10 +8599.999964 + 20 +22153.778495 + 30 +0.0 + 11 +8587.499964 + 21 +22175.429131 + 31 +0.0 + 0 +LINE + 5 +7F9 + 8 +0 + 62 + 0 + 10 +8597.388739 + 20 +22115.0 + 30 +0.0 + 11 +8587.499964 + 21 +22132.12786 + 31 +0.0 + 0 +LINE + 5 +7FA + 8 +0 + 62 + 0 + 10 +8562.499964 + 20 +22175.429131 + 30 +0.0 + 11 +8551.200717 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +7FB + 8 +0 + 62 + 0 + 10 +8562.499964 + 20 +22132.12786 + 30 +0.0 + 11 +8549.999964 + 21 +22153.778496 + 31 +0.0 + 0 +LINE + 5 +7FC + 8 +0 + 62 + 0 + 10 +8524.999964 + 20 +22153.778496 + 30 +0.0 + 11 +8512.499964 + 21 +22175.429131 + 31 +0.0 + 0 +LINE + 5 +7FD + 8 +0 + 62 + 0 + 10 +8522.388739 + 20 +22115.0 + 30 +0.0 + 11 +8512.499964 + 21 +22132.127861 + 31 +0.0 + 0 +LINE + 5 +7FE + 8 +0 + 62 + 0 + 10 +9387.499961 + 20 +22132.127859 + 30 +0.0 + 11 +9374.999961 + 21 +22153.778494 + 31 +0.0 + 0 +LINE + 5 +7FF + 8 +0 + 62 + 0 + 10 +9422.388735 + 20 +22115.0 + 30 +0.0 + 11 +9412.499961 + 21 +22132.127859 + 31 +0.0 + 0 +LINE + 5 +800 + 8 +0 + 62 + 0 + 10 +9387.499961 + 20 +22175.429129 + 30 +0.0 + 11 +9376.200714 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +801 + 8 +0 + 62 + 0 + 10 +9424.999961 + 20 +22153.778494 + 30 +0.0 + 11 +9412.499961 + 21 +22175.429129 + 31 +0.0 + 0 +LINE + 5 +802 + 8 +0 + 62 + 0 + 10 +9462.499961 + 20 +22132.127859 + 30 +0.0 + 11 +9449.999961 + 21 +22153.778494 + 31 +0.0 + 0 +LINE + 5 +803 + 8 +0 + 62 + 0 + 10 +9497.388735 + 20 +22115.0 + 30 +0.0 + 11 +9487.499961 + 21 +22132.127859 + 31 +0.0 + 0 +LINE + 5 +804 + 8 +0 + 62 + 0 + 10 +9462.499961 + 20 +22175.429129 + 30 +0.0 + 11 +9451.200713 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +805 + 8 +0 + 62 + 0 + 10 +9499.999961 + 20 +22153.778494 + 30 +0.0 + 11 +9487.499961 + 21 +22175.429129 + 31 +0.0 + 0 +LINE + 5 +806 + 8 +0 + 62 + 0 + 10 +9537.499961 + 20 +22132.127859 + 30 +0.0 + 11 +9524.999961 + 21 +22153.778494 + 31 +0.0 + 0 +LINE + 5 +807 + 8 +0 + 62 + 0 + 10 +9572.388734 + 20 +22115.0 + 30 +0.0 + 11 +9562.499961 + 21 +22132.127859 + 31 +0.0 + 0 +LINE + 5 +808 + 8 +0 + 62 + 0 + 10 +9537.499961 + 20 +22175.429129 + 30 +0.0 + 11 +9526.200713 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +809 + 8 +0 + 62 + 0 + 10 +9574.999961 + 20 +22153.778494 + 30 +0.0 + 11 +9562.499961 + 21 +22175.429129 + 31 +0.0 + 0 +LINE + 5 +80A + 8 +0 + 62 + 0 + 10 +9612.499961 + 20 +22132.127858 + 30 +0.0 + 11 +9599.999961 + 21 +22153.778494 + 31 +0.0 + 0 +LINE + 5 +80B + 8 +0 + 62 + 0 + 10 +9647.388734 + 20 +22115.0 + 30 +0.0 + 11 +9637.49996 + 21 +22132.127858 + 31 +0.0 + 0 +LINE + 5 +80C + 8 +0 + 62 + 0 + 10 +9612.49996 + 20 +22175.429129 + 30 +0.0 + 11 +9601.200713 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +80D + 8 +0 + 62 + 0 + 10 +9649.99996 + 20 +22153.778493 + 30 +0.0 + 11 +9637.49996 + 21 +22175.429129 + 31 +0.0 + 0 +LINE + 5 +80E + 8 +0 + 62 + 0 + 10 +9687.49996 + 20 +22132.127858 + 30 +0.0 + 11 +9674.99996 + 21 +22153.778493 + 31 +0.0 + 0 +LINE + 5 +80F + 8 +0 + 62 + 0 + 10 +9722.388734 + 20 +22115.0 + 30 +0.0 + 11 +9712.49996 + 21 +22132.127858 + 31 +0.0 + 0 +LINE + 5 +810 + 8 +0 + 62 + 0 + 10 +9687.49996 + 20 +22175.429128 + 30 +0.0 + 11 +9676.200712 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +811 + 8 +0 + 62 + 0 + 10 +9724.99996 + 20 +22153.778493 + 30 +0.0 + 11 +9712.49996 + 21 +22175.429128 + 31 +0.0 + 0 +LINE + 5 +812 + 8 +0 + 62 + 0 + 10 +9762.49996 + 20 +22132.127858 + 30 +0.0 + 11 +9749.99996 + 21 +22153.778493 + 31 +0.0 + 0 +LINE + 5 +813 + 8 +0 + 62 + 0 + 10 +9797.388733 + 20 +22115.0 + 30 +0.0 + 11 +9787.49996 + 21 +22132.127858 + 31 +0.0 + 0 +LINE + 5 +814 + 8 +0 + 62 + 0 + 10 +9762.49996 + 20 +22175.429128 + 30 +0.0 + 11 +9751.200712 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +815 + 8 +0 + 62 + 0 + 10 +9799.99996 + 20 +22153.778493 + 30 +0.0 + 11 +9787.49996 + 21 +22175.429128 + 31 +0.0 + 0 +LINE + 5 +816 + 8 +0 + 62 + 0 + 10 +9837.49996 + 20 +22132.127858 + 30 +0.0 + 11 +9824.99996 + 21 +22153.778493 + 31 +0.0 + 0 +LINE + 5 +817 + 8 +0 + 62 + 0 + 10 +9872.388733 + 20 +22115.0 + 30 +0.0 + 11 +9862.49996 + 21 +22132.127858 + 31 +0.0 + 0 +LINE + 5 +818 + 8 +0 + 62 + 0 + 10 +9837.49996 + 20 +22175.429128 + 30 +0.0 + 11 +9826.200712 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +819 + 8 +0 + 62 + 0 + 10 +9874.99996 + 20 +22153.778493 + 30 +0.0 + 11 +9862.49996 + 21 +22175.429128 + 31 +0.0 + 0 +LINE + 5 +81A + 8 +0 + 62 + 0 + 10 +9912.49996 + 20 +22132.127858 + 30 +0.0 + 11 +9899.99996 + 21 +22153.778493 + 31 +0.0 + 0 +LINE + 5 +81B + 8 +0 + 62 + 0 + 10 +9947.388733 + 20 +22115.0 + 30 +0.0 + 11 +9937.499959 + 21 +22132.127858 + 31 +0.0 + 0 +LINE + 5 +81C + 8 +0 + 62 + 0 + 10 +9912.499959 + 20 +22175.429128 + 30 +0.0 + 11 +9901.200711 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +81D + 8 +0 + 62 + 0 + 10 +9949.999959 + 20 +22153.778493 + 30 +0.0 + 11 +9937.499959 + 21 +22175.429128 + 31 +0.0 + 0 +LINE + 5 +81E + 8 +0 + 62 + 0 + 10 +9987.499959 + 20 +22132.127858 + 30 +0.0 + 11 +9974.999959 + 21 +22153.778493 + 31 +0.0 + 0 +LINE + 5 +81F + 8 +0 + 62 + 0 + 10 +10022.388732 + 20 +22115.0 + 30 +0.0 + 11 +10012.499959 + 21 +22132.127858 + 31 +0.0 + 0 +LINE + 5 +820 + 8 +0 + 62 + 0 + 10 +9987.499959 + 20 +22175.429128 + 30 +0.0 + 11 +9976.200711 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +821 + 8 +0 + 62 + 0 + 10 +10024.999959 + 20 +22153.778493 + 30 +0.0 + 11 +10012.499959 + 21 +22175.429128 + 31 +0.0 + 0 +LINE + 5 +822 + 8 +0 + 62 + 0 + 10 +10062.499959 + 20 +22132.127858 + 30 +0.0 + 11 +10049.999959 + 21 +22153.778493 + 31 +0.0 + 0 +LINE + 5 +823 + 8 +0 + 62 + 0 + 10 +10097.388732 + 20 +22115.0 + 30 +0.0 + 11 +10087.499959 + 21 +22132.127858 + 31 +0.0 + 0 +LINE + 5 +824 + 8 +0 + 62 + 0 + 10 +10062.499959 + 20 +22175.429128 + 30 +0.0 + 11 +10051.200711 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +825 + 8 +0 + 62 + 0 + 10 +10099.999959 + 20 +22153.778493 + 30 +0.0 + 11 +10087.499959 + 21 +22175.429128 + 31 +0.0 + 0 +LINE + 5 +826 + 8 +0 + 62 + 0 + 10 +10137.499959 + 20 +22132.127857 + 30 +0.0 + 11 +10124.999959 + 21 +22153.778493 + 31 +0.0 + 0 +LINE + 5 +827 + 8 +0 + 62 + 0 + 10 +10172.388732 + 20 +22115.0 + 30 +0.0 + 11 +10162.499959 + 21 +22132.127857 + 31 +0.0 + 0 +LINE + 5 +828 + 8 +0 + 62 + 0 + 10 +10137.499959 + 20 +22175.429128 + 30 +0.0 + 11 +10126.20071 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +829 + 8 +0 + 62 + 0 + 10 +10174.999959 + 20 +22153.778492 + 30 +0.0 + 11 +10162.499959 + 21 +22175.429128 + 31 +0.0 + 0 +LINE + 5 +82A + 8 +0 + 62 + 0 + 10 +10212.499959 + 20 +22132.127857 + 30 +0.0 + 11 +10199.999959 + 21 +22153.778492 + 31 +0.0 + 0 +LINE + 5 +82B + 8 +0 + 62 + 0 + 10 +10247.388731 + 20 +22115.0 + 30 +0.0 + 11 +10237.499958 + 21 +22132.127857 + 31 +0.0 + 0 +LINE + 5 +82C + 8 +0 + 62 + 0 + 10 +10212.499958 + 20 +22175.429127 + 30 +0.0 + 11 +10201.20071 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +82D + 8 +0 + 62 + 0 + 10 +10249.999958 + 20 +22153.778492 + 30 +0.0 + 11 +10237.499958 + 21 +22175.429127 + 31 +0.0 + 0 +LINE + 5 +82E + 8 +0 + 62 + 0 + 10 +9375.00001 + 20 +22153.778511 + 30 +0.0 + 11 +9387.50001 + 21 +22175.429146 + 31 +0.0 + 0 +LINE + 5 +82F + 8 +0 + 62 + 0 + 10 +9337.50001 + 20 +22132.127875 + 30 +0.0 + 11 +9350.00001 + 21 +22153.778511 + 31 +0.0 + 0 +LINE + 5 +830 + 8 +0 + 62 + 0 + 10 +9302.611227 + 20 +22115.0 + 30 +0.0 + 11 +9312.50001 + 21 +22132.127875 + 31 +0.0 + 0 +LINE + 5 +831 + 8 +0 + 62 + 0 + 10 +9337.50001 + 20 +22175.429146 + 30 +0.0 + 11 +9348.799248 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +832 + 8 +0 + 62 + 0 + 10 +9300.00001 + 20 +22153.77851 + 30 +0.0 + 11 +9312.50001 + 21 +22175.429146 + 31 +0.0 + 0 +LINE + 5 +833 + 8 +0 + 62 + 0 + 10 +9262.50001 + 20 +22132.127875 + 30 +0.0 + 11 +9275.00001 + 21 +22153.77851 + 31 +0.0 + 0 +LINE + 5 +834 + 8 +0 + 62 + 0 + 10 +9227.611227 + 20 +22115.0 + 30 +0.0 + 11 +9237.50001 + 21 +22132.127875 + 31 +0.0 + 0 +LINE + 5 +835 + 8 +0 + 62 + 0 + 10 +9262.50001 + 20 +22175.429145 + 30 +0.0 + 11 +9273.799249 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +836 + 8 +0 + 62 + 0 + 10 +9225.000011 + 20 +22153.77851 + 30 +0.0 + 11 +9237.500011 + 21 +22175.429145 + 31 +0.0 + 0 +LINE + 5 +837 + 8 +0 + 62 + 0 + 10 +9187.500011 + 20 +22132.127875 + 30 +0.0 + 11 +9200.000011 + 21 +22153.77851 + 31 +0.0 + 0 +LINE + 5 +838 + 8 +0 + 62 + 0 + 10 +9152.611227 + 20 +22115.0 + 30 +0.0 + 11 +9162.500011 + 21 +22132.127875 + 31 +0.0 + 0 +LINE + 5 +839 + 8 +0 + 62 + 0 + 10 +9187.500011 + 20 +22175.429145 + 30 +0.0 + 11 +9198.799249 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +83A + 8 +0 + 62 + 0 + 10 +9150.000011 + 20 +22153.77851 + 30 +0.0 + 11 +9162.500011 + 21 +22175.429145 + 31 +0.0 + 0 +LINE + 5 +83B + 8 +0 + 62 + 0 + 10 +9112.500011 + 20 +22132.127875 + 30 +0.0 + 11 +9125.000011 + 21 +22153.77851 + 31 +0.0 + 0 +LINE + 5 +83C + 8 +0 + 62 + 0 + 10 +9077.611228 + 20 +22115.0 + 30 +0.0 + 11 +9087.500011 + 21 +22132.127875 + 31 +0.0 + 0 +LINE + 5 +83D + 8 +0 + 62 + 0 + 10 +9112.500011 + 20 +22175.429145 + 30 +0.0 + 11 +9123.799249 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +83E + 8 +0 + 62 + 0 + 10 +9075.000011 + 20 +22153.77851 + 30 +0.0 + 11 +9087.500011 + 21 +22175.429145 + 31 +0.0 + 0 +LINE + 5 +83F + 8 +0 + 62 + 0 + 10 +9037.500011 + 20 +22132.127875 + 30 +0.0 + 11 +9050.000011 + 21 +22153.77851 + 31 +0.0 + 0 +LINE + 5 +840 + 8 +0 + 62 + 0 + 10 +9002.611228 + 20 +22115.0 + 30 +0.0 + 11 +9012.500011 + 21 +22132.127875 + 31 +0.0 + 0 +LINE + 5 +841 + 8 +0 + 62 + 0 + 10 +9037.500011 + 20 +22175.429145 + 30 +0.0 + 11 +9048.79925 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +842 + 8 +0 + 62 + 0 + 10 +9000.000011 + 20 +22153.77851 + 30 +0.0 + 11 +9012.500011 + 21 +22175.429145 + 31 +0.0 + 0 +LINE + 5 +843 + 8 +0 + 62 + 0 + 10 +8962.500011 + 20 +22132.127875 + 30 +0.0 + 11 +8975.000011 + 21 +22153.77851 + 31 +0.0 + 0 +LINE + 5 +844 + 8 +0 + 62 + 0 + 10 +8927.611228 + 20 +22115.0 + 30 +0.0 + 11 +8937.500011 + 21 +22132.127875 + 31 +0.0 + 0 +LINE + 5 +845 + 8 +0 + 62 + 0 + 10 +8962.500011 + 20 +22175.429145 + 30 +0.0 + 11 +8973.79925 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +846 + 8 +0 + 62 + 0 + 10 +8925.000012 + 20 +22153.77851 + 30 +0.0 + 11 +8937.500012 + 21 +22175.429145 + 31 +0.0 + 0 +LINE + 5 +847 + 8 +0 + 62 + 0 + 10 +8887.500012 + 20 +22132.127875 + 30 +0.0 + 11 +8900.000012 + 21 +22153.77851 + 31 +0.0 + 0 +LINE + 5 +848 + 8 +0 + 62 + 0 + 10 +8852.611229 + 20 +22115.0 + 30 +0.0 + 11 +8862.500012 + 21 +22132.127875 + 31 +0.0 + 0 +LINE + 5 +849 + 8 +0 + 62 + 0 + 10 +8887.500012 + 20 +22175.429145 + 30 +0.0 + 11 +8898.79925 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +84A + 8 +0 + 62 + 0 + 10 +8850.000012 + 20 +22153.77851 + 30 +0.0 + 11 +8862.500012 + 21 +22175.429145 + 31 +0.0 + 0 +LINE + 5 +84B + 8 +0 + 62 + 0 + 10 +8812.500012 + 20 +22132.127874 + 30 +0.0 + 11 +8825.000012 + 21 +22153.77851 + 31 +0.0 + 0 +LINE + 5 +84C + 8 +0 + 62 + 0 + 10 +8777.611229 + 20 +22115.0 + 30 +0.0 + 11 +8787.500012 + 21 +22132.127874 + 31 +0.0 + 0 +LINE + 5 +84D + 8 +0 + 62 + 0 + 10 +8812.500012 + 20 +22175.429145 + 30 +0.0 + 11 +8823.799251 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +84E + 8 +0 + 62 + 0 + 10 +8775.000012 + 20 +22153.778509 + 30 +0.0 + 11 +8787.500012 + 21 +22175.429145 + 31 +0.0 + 0 +LINE + 5 +84F + 8 +0 + 62 + 0 + 10 +8737.500012 + 20 +22132.127874 + 30 +0.0 + 11 +8750.000012 + 21 +22153.778509 + 31 +0.0 + 0 +LINE + 5 +850 + 8 +0 + 62 + 0 + 10 +8702.611229 + 20 +22115.0 + 30 +0.0 + 11 +8712.500012 + 21 +22132.127874 + 31 +0.0 + 0 +LINE + 5 +851 + 8 +0 + 62 + 0 + 10 +8737.500012 + 20 +22175.429144 + 30 +0.0 + 11 +8748.799251 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +852 + 8 +0 + 62 + 0 + 10 +8700.000012 + 20 +22153.778509 + 30 +0.0 + 11 +8712.500012 + 21 +22175.429144 + 31 +0.0 + 0 +LINE + 5 +853 + 8 +0 + 62 + 0 + 10 +8662.500012 + 20 +22132.127874 + 30 +0.0 + 11 +8675.000012 + 21 +22153.778509 + 31 +0.0 + 0 +LINE + 5 +854 + 8 +0 + 62 + 0 + 10 +8627.61123 + 20 +22115.0 + 30 +0.0 + 11 +8637.500012 + 21 +22132.127874 + 31 +0.0 + 0 +LINE + 5 +855 + 8 +0 + 62 + 0 + 10 +8662.500012 + 20 +22175.429144 + 30 +0.0 + 11 +8673.799251 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +856 + 8 +0 + 62 + 0 + 10 +8625.000013 + 20 +22153.778509 + 30 +0.0 + 11 +8637.500013 + 21 +22175.429144 + 31 +0.0 + 0 +LINE + 5 +857 + 8 +0 + 62 + 0 + 10 +8587.500013 + 20 +22132.127874 + 30 +0.0 + 11 +8600.000013 + 21 +22153.778509 + 31 +0.0 + 0 +LINE + 5 +858 + 8 +0 + 62 + 0 + 10 +8552.61123 + 20 +22115.0 + 30 +0.0 + 11 +8562.500013 + 21 +22132.127874 + 31 +0.0 + 0 +LINE + 5 +859 + 8 +0 + 62 + 0 + 10 +8587.500013 + 20 +22175.429144 + 30 +0.0 + 11 +8598.799252 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +85A + 8 +0 + 62 + 0 + 10 +8550.000013 + 20 +22153.778509 + 30 +0.0 + 11 +8562.500013 + 21 +22175.429144 + 31 +0.0 + 0 +LINE + 5 +85B + 8 +0 + 62 + 0 + 10 +8512.500013 + 20 +22132.127874 + 30 +0.0 + 11 +8525.000013 + 21 +22153.778509 + 31 +0.0 + 0 +LINE + 5 +85C + 8 +0 + 62 + 0 + 10 +8512.500013 + 20 +22175.429144 + 30 +0.0 + 11 +8523.799252 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +85D + 8 +0 + 62 + 0 + 10 +9377.611226 + 20 +22115.0 + 30 +0.0 + 11 +9387.50001 + 21 +22132.127876 + 31 +0.0 + 0 +LINE + 5 +85E + 8 +0 + 62 + 0 + 10 +9412.50001 + 20 +22175.429146 + 30 +0.0 + 11 +9423.799248 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +85F + 8 +0 + 62 + 0 + 10 +9412.50001 + 20 +22132.127876 + 30 +0.0 + 11 +9425.00001 + 21 +22153.778511 + 31 +0.0 + 0 +LINE + 5 +860 + 8 +0 + 62 + 0 + 10 +9450.00001 + 20 +22153.778511 + 30 +0.0 + 11 +9462.50001 + 21 +22175.429146 + 31 +0.0 + 0 +LINE + 5 +861 + 8 +0 + 62 + 0 + 10 +9452.611226 + 20 +22115.0 + 30 +0.0 + 11 +9462.50001 + 21 +22132.127876 + 31 +0.0 + 0 +LINE + 5 +862 + 8 +0 + 62 + 0 + 10 +9487.50001 + 20 +22175.429146 + 30 +0.0 + 11 +9498.799248 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +863 + 8 +0 + 62 + 0 + 10 +9487.50001 + 20 +22132.127876 + 30 +0.0 + 11 +9500.00001 + 21 +22153.778511 + 31 +0.0 + 0 +LINE + 5 +864 + 8 +0 + 62 + 0 + 10 +9525.00001 + 20 +22153.778511 + 30 +0.0 + 11 +9537.50001 + 21 +22175.429146 + 31 +0.0 + 0 +LINE + 5 +865 + 8 +0 + 62 + 0 + 10 +9527.611226 + 20 +22115.0 + 30 +0.0 + 11 +9537.50001 + 21 +22132.127876 + 31 +0.0 + 0 +LINE + 5 +866 + 8 +0 + 62 + 0 + 10 +9562.50001 + 20 +22175.429146 + 30 +0.0 + 11 +9573.799247 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +867 + 8 +0 + 62 + 0 + 10 +9562.500009 + 20 +22132.127876 + 30 +0.0 + 11 +9575.000009 + 21 +22153.778511 + 31 +0.0 + 0 +LINE + 5 +868 + 8 +0 + 62 + 0 + 10 +9600.000009 + 20 +22153.778511 + 30 +0.0 + 11 +9612.500009 + 21 +22175.429146 + 31 +0.0 + 0 +LINE + 5 +869 + 8 +0 + 62 + 0 + 10 +9602.611225 + 20 +22115.0 + 30 +0.0 + 11 +9612.500009 + 21 +22132.127876 + 31 +0.0 + 0 +LINE + 5 +86A + 8 +0 + 62 + 0 + 10 +9637.500009 + 20 +22175.429146 + 30 +0.0 + 11 +9648.799247 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +86B + 8 +0 + 62 + 0 + 10 +9637.500009 + 20 +22132.127876 + 30 +0.0 + 11 +9650.000009 + 21 +22153.778511 + 31 +0.0 + 0 +LINE + 5 +86C + 8 +0 + 62 + 0 + 10 +9675.000009 + 20 +22153.778511 + 30 +0.0 + 11 +9687.500009 + 21 +22175.429146 + 31 +0.0 + 0 +LINE + 5 +86D + 8 +0 + 62 + 0 + 10 +9677.611225 + 20 +22115.0 + 30 +0.0 + 11 +9687.500009 + 21 +22132.127876 + 31 +0.0 + 0 +LINE + 5 +86E + 8 +0 + 62 + 0 + 10 +9712.500009 + 20 +22175.429146 + 30 +0.0 + 11 +9723.799247 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +86F + 8 +0 + 62 + 0 + 10 +9712.500009 + 20 +22132.127876 + 30 +0.0 + 11 +9725.000009 + 21 +22153.778511 + 31 +0.0 + 0 +LINE + 5 +870 + 8 +0 + 62 + 0 + 10 +9750.000009 + 20 +22153.778511 + 30 +0.0 + 11 +9762.500009 + 21 +22175.429146 + 31 +0.0 + 0 +LINE + 5 +871 + 8 +0 + 62 + 0 + 10 +9752.611225 + 20 +22115.0 + 30 +0.0 + 11 +9762.500009 + 21 +22132.127876 + 31 +0.0 + 0 +LINE + 5 +872 + 8 +0 + 62 + 0 + 10 +9787.500009 + 20 +22175.429146 + 30 +0.0 + 11 +9798.799246 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +873 + 8 +0 + 62 + 0 + 10 +9787.500009 + 20 +22132.127876 + 30 +0.0 + 11 +9800.000009 + 21 +22153.778511 + 31 +0.0 + 0 +LINE + 5 +874 + 8 +0 + 62 + 0 + 10 +9825.000009 + 20 +22153.778511 + 30 +0.0 + 11 +9837.500009 + 21 +22175.429147 + 31 +0.0 + 0 +LINE + 5 +875 + 8 +0 + 62 + 0 + 10 +9827.611224 + 20 +22115.0 + 30 +0.0 + 11 +9837.500009 + 21 +22132.127876 + 31 +0.0 + 0 +LINE + 5 +876 + 8 +0 + 62 + 0 + 10 +9862.500009 + 20 +22175.429147 + 30 +0.0 + 11 +9873.799246 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +877 + 8 +0 + 62 + 0 + 10 +9862.500008 + 20 +22132.127876 + 30 +0.0 + 11 +9875.000008 + 21 +22153.778512 + 31 +0.0 + 0 +LINE + 5 +878 + 8 +0 + 62 + 0 + 10 +9900.000008 + 20 +22153.778512 + 30 +0.0 + 11 +9912.500008 + 21 +22175.429147 + 31 +0.0 + 0 +LINE + 5 +879 + 8 +0 + 62 + 0 + 10 +9902.611224 + 20 +22115.0 + 30 +0.0 + 11 +9912.500008 + 21 +22132.127877 + 31 +0.0 + 0 +LINE + 5 +87A + 8 +0 + 62 + 0 + 10 +9937.500008 + 20 +22175.429147 + 30 +0.0 + 11 +9948.799246 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +87B + 8 +0 + 62 + 0 + 10 +9937.500008 + 20 +22132.127877 + 30 +0.0 + 11 +9950.000008 + 21 +22153.778512 + 31 +0.0 + 0 +LINE + 5 +87C + 8 +0 + 62 + 0 + 10 +9975.000008 + 20 +22153.778512 + 30 +0.0 + 11 +9987.500008 + 21 +22175.429147 + 31 +0.0 + 0 +LINE + 5 +87D + 8 +0 + 62 + 0 + 10 +9977.611224 + 20 +22115.0 + 30 +0.0 + 11 +9987.500008 + 21 +22132.127877 + 31 +0.0 + 0 +LINE + 5 +87E + 8 +0 + 62 + 0 + 10 +10012.500008 + 20 +22175.429147 + 30 +0.0 + 11 +10023.799245 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +87F + 8 +0 + 62 + 0 + 10 +10012.500008 + 20 +22132.127877 + 30 +0.0 + 11 +10025.000008 + 21 +22153.778512 + 31 +0.0 + 0 +LINE + 5 +880 + 8 +0 + 62 + 0 + 10 +10050.000008 + 20 +22153.778512 + 30 +0.0 + 11 +10062.500008 + 21 +22175.429147 + 31 +0.0 + 0 +LINE + 5 +881 + 8 +0 + 62 + 0 + 10 +10052.611224 + 20 +22115.0 + 30 +0.0 + 11 +10062.500008 + 21 +22132.127877 + 31 +0.0 + 0 +LINE + 5 +882 + 8 +0 + 62 + 0 + 10 +10087.500008 + 20 +22175.429147 + 30 +0.0 + 11 +10098.799245 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +883 + 8 +0 + 62 + 0 + 10 +10087.500008 + 20 +22132.127877 + 30 +0.0 + 11 +10100.000008 + 21 +22153.778512 + 31 +0.0 + 0 +LINE + 5 +884 + 8 +0 + 62 + 0 + 10 +10125.000008 + 20 +22153.778512 + 30 +0.0 + 11 +10137.500008 + 21 +22175.429147 + 31 +0.0 + 0 +LINE + 5 +885 + 8 +0 + 62 + 0 + 10 +10127.611223 + 20 +22115.0 + 30 +0.0 + 11 +10137.500008 + 21 +22132.127877 + 31 +0.0 + 0 +LINE + 5 +886 + 8 +0 + 62 + 0 + 10 +10162.500008 + 20 +22175.429147 + 30 +0.0 + 11 +10173.799245 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +887 + 8 +0 + 62 + 0 + 10 +10162.500007 + 20 +22132.127877 + 30 +0.0 + 11 +10175.000007 + 21 +22153.778512 + 31 +0.0 + 0 +LINE + 5 +888 + 8 +0 + 62 + 0 + 10 +10200.000007 + 20 +22153.778512 + 30 +0.0 + 11 +10212.500007 + 21 +22175.429147 + 31 +0.0 + 0 +LINE + 5 +889 + 8 +0 + 62 + 0 + 10 +10202.611223 + 20 +22115.0 + 30 +0.0 + 11 +10212.500007 + 21 +22132.127877 + 31 +0.0 + 0 +LINE + 5 +88A + 8 +0 + 62 + 0 + 10 +10237.500007 + 20 +22175.429147 + 30 +0.0 + 11 +10248.799244 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +88B + 8 +0 + 62 + 0 + 10 +10237.500007 + 20 +22132.127877 + 30 +0.0 + 11 +10250.000007 + 21 +22153.778512 + 31 +0.0 + 0 +ENDBLK + 5 +88C + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X41 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X41 + 1 + + 0 +LINE + 5 +88E + 8 +0 + 62 + 0 + 10 +11238.75 + 20 +22153.77846 + 30 +0.0 + 11 +11250.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +88F + 8 +0 + 62 + 0 + 10 +11300.0 + 20 +22153.77846 + 30 +0.0 + 11 +11325.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +890 + 8 +0 + 62 + 0 + 10 +11375.0 + 20 +22153.77846 + 30 +0.0 + 11 +11400.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +891 + 8 +0 + 62 + 0 + 10 +11450.0 + 20 +22153.77846 + 30 +0.0 + 11 +11475.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +892 + 8 +0 + 62 + 0 + 10 +11525.0 + 20 +22153.77846 + 30 +0.0 + 11 +11550.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +893 + 8 +0 + 62 + 0 + 10 +11600.0 + 20 +22153.77846 + 30 +0.0 + 11 +11625.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +894 + 8 +0 + 62 + 0 + 10 +11675.0 + 20 +22153.77846 + 30 +0.0 + 11 +11700.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +895 + 8 +0 + 62 + 0 + 10 +11750.0 + 20 +22153.77846 + 30 +0.0 + 11 +11775.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +896 + 8 +0 + 62 + 0 + 10 +11825.0 + 20 +22153.77846 + 30 +0.0 + 11 +11850.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +897 + 8 +0 + 62 + 0 + 10 +11900.0 + 20 +22153.77846 + 30 +0.0 + 11 +11925.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +898 + 8 +0 + 62 + 0 + 10 +11975.0 + 20 +22153.77846 + 30 +0.0 + 11 +12000.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +899 + 8 +0 + 62 + 0 + 10 +12050.0 + 20 +22153.77846 + 30 +0.0 + 11 +12075.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +89A + 8 +0 + 62 + 0 + 10 +12125.0 + 20 +22153.77846 + 30 +0.0 + 11 +12150.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +89B + 8 +0 + 62 + 0 + 10 +12200.0 + 20 +22153.77846 + 30 +0.0 + 11 +12225.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +89C + 8 +0 + 62 + 0 + 10 +12275.0 + 20 +22153.77846 + 30 +0.0 + 11 +12300.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +89D + 8 +0 + 62 + 0 + 10 +12350.0 + 20 +22153.77846 + 30 +0.0 + 11 +12375.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +89E + 8 +0 + 62 + 0 + 10 +12425.0 + 20 +22153.77846 + 30 +0.0 + 11 +12450.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +89F + 8 +0 + 62 + 0 + 10 +12500.0 + 20 +22153.77846 + 30 +0.0 + 11 +12525.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8A0 + 8 +0 + 62 + 0 + 10 +12575.0 + 20 +22153.77846 + 30 +0.0 + 11 +12600.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8A1 + 8 +0 + 62 + 0 + 10 +12650.0 + 20 +22153.77846 + 30 +0.0 + 11 +12675.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8A2 + 8 +0 + 62 + 0 + 10 +12725.0 + 20 +22153.77846 + 30 +0.0 + 11 +12750.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8A3 + 8 +0 + 62 + 0 + 10 +12800.0 + 20 +22153.77846 + 30 +0.0 + 11 +12825.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8A4 + 8 +0 + 62 + 0 + 10 +12875.0 + 20 +22153.77846 + 30 +0.0 + 11 +12900.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8A5 + 8 +0 + 62 + 0 + 10 +12950.0 + 20 +22153.77846 + 30 +0.0 + 11 +12975.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8A6 + 8 +0 + 62 + 0 + 10 +13025.0 + 20 +22153.77846 + 30 +0.0 + 11 +13050.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8A7 + 8 +0 + 62 + 0 + 10 +13100.0 + 20 +22153.77846 + 30 +0.0 + 11 +13125.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8A8 + 8 +0 + 62 + 0 + 10 +13175.0 + 20 +22153.77846 + 30 +0.0 + 11 +13200.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8A9 + 8 +0 + 62 + 0 + 10 +13250.0 + 20 +22153.77846 + 30 +0.0 + 11 +13275.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8AA + 8 +0 + 62 + 0 + 10 +13325.0 + 20 +22153.77846 + 30 +0.0 + 11 +13350.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8AB + 8 +0 + 62 + 0 + 10 +13400.0 + 20 +22153.77846 + 30 +0.0 + 11 +13425.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8AC + 8 +0 + 62 + 0 + 10 +13475.0 + 20 +22153.77846 + 30 +0.0 + 11 +13500.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8AD + 8 +0 + 62 + 0 + 10 +13550.0 + 20 +22153.77846 + 30 +0.0 + 11 +13575.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8AE + 8 +0 + 62 + 0 + 10 +13625.0 + 20 +22153.77846 + 30 +0.0 + 11 +13650.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8AF + 8 +0 + 62 + 0 + 10 +13700.0 + 20 +22153.77846 + 30 +0.0 + 11 +13725.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8B0 + 8 +0 + 62 + 0 + 10 +13775.0 + 20 +22153.77846 + 30 +0.0 + 11 +13800.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8B1 + 8 +0 + 62 + 0 + 10 +13850.0 + 20 +22153.77846 + 30 +0.0 + 11 +13875.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8B2 + 8 +0 + 62 + 0 + 10 +13925.0 + 20 +22153.77846 + 30 +0.0 + 11 +13950.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8B3 + 8 +0 + 62 + 0 + 10 +14000.0 + 20 +22153.77846 + 30 +0.0 + 11 +14025.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8B4 + 8 +0 + 62 + 0 + 10 +14075.0 + 20 +22153.77846 + 30 +0.0 + 11 +14100.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8B5 + 8 +0 + 62 + 0 + 10 +14150.0 + 20 +22153.77846 + 30 +0.0 + 11 +14175.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8B6 + 8 +0 + 62 + 0 + 10 +14225.0 + 20 +22153.77846 + 30 +0.0 + 11 +14250.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8B7 + 8 +0 + 62 + 0 + 10 +14300.0 + 20 +22153.77846 + 30 +0.0 + 11 +14325.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8B8 + 8 +0 + 62 + 0 + 10 +14375.0 + 20 +22153.77846 + 30 +0.0 + 11 +14400.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8B9 + 8 +0 + 62 + 0 + 10 +14450.0 + 20 +22153.77846 + 30 +0.0 + 11 +14475.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8BA + 8 +0 + 62 + 0 + 10 +14525.0 + 20 +22153.77846 + 30 +0.0 + 11 +14550.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8BB + 8 +0 + 62 + 0 + 10 +14600.0 + 20 +22153.77846 + 30 +0.0 + 11 +14625.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8BC + 8 +0 + 62 + 0 + 10 +14675.0 + 20 +22153.77846 + 30 +0.0 + 11 +14700.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8BD + 8 +0 + 62 + 0 + 10 +14750.0 + 20 +22153.77846 + 30 +0.0 + 11 +14775.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8BE + 8 +0 + 62 + 0 + 10 +14825.0 + 20 +22153.77846 + 30 +0.0 + 11 +14850.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8BF + 8 +0 + 62 + 0 + 10 +14900.0 + 20 +22153.77846 + 30 +0.0 + 11 +14925.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8C0 + 8 +0 + 62 + 0 + 10 +14975.0 + 20 +22153.77846 + 30 +0.0 + 11 +15000.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8C1 + 8 +0 + 62 + 0 + 10 +15050.0 + 20 +22153.77846 + 30 +0.0 + 11 +15075.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8C2 + 8 +0 + 62 + 0 + 10 +15125.0 + 20 +22153.77846 + 30 +0.0 + 11 +15150.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8C3 + 8 +0 + 62 + 0 + 10 +15200.0 + 20 +22153.77846 + 30 +0.0 + 11 +15225.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8C4 + 8 +0 + 62 + 0 + 10 +15275.0 + 20 +22153.77846 + 30 +0.0 + 11 +15300.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8C5 + 8 +0 + 62 + 0 + 10 +15350.0 + 20 +22153.77846 + 30 +0.0 + 11 +15375.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8C6 + 8 +0 + 62 + 0 + 10 +15425.0 + 20 +22153.77846 + 30 +0.0 + 11 +15450.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8C7 + 8 +0 + 62 + 0 + 10 +15500.0 + 20 +22153.77846 + 30 +0.0 + 11 +15525.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8C8 + 8 +0 + 62 + 0 + 10 +15575.0 + 20 +22153.77846 + 30 +0.0 + 11 +15600.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8C9 + 8 +0 + 62 + 0 + 10 +15650.0 + 20 +22153.77846 + 30 +0.0 + 11 +15675.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8CA + 8 +0 + 62 + 0 + 10 +15725.0 + 20 +22153.77846 + 30 +0.0 + 11 +15750.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8CB + 8 +0 + 62 + 0 + 10 +15800.0 + 20 +22153.77846 + 30 +0.0 + 11 +15825.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8CC + 8 +0 + 62 + 0 + 10 +15875.0 + 20 +22153.77846 + 30 +0.0 + 11 +15876.25 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8CD + 8 +0 + 62 + 0 + 10 +11262.5 + 20 +22175.429095 + 30 +0.0 + 11 +11287.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8CE + 8 +0 + 62 + 0 + 10 +11337.5 + 20 +22175.429095 + 30 +0.0 + 11 +11362.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8CF + 8 +0 + 62 + 0 + 10 +11412.5 + 20 +22175.429095 + 30 +0.0 + 11 +11437.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8D0 + 8 +0 + 62 + 0 + 10 +11487.5 + 20 +22175.429095 + 30 +0.0 + 11 +11512.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8D1 + 8 +0 + 62 + 0 + 10 +11562.5 + 20 +22175.429095 + 30 +0.0 + 11 +11587.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8D2 + 8 +0 + 62 + 0 + 10 +11637.5 + 20 +22175.429095 + 30 +0.0 + 11 +11662.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8D3 + 8 +0 + 62 + 0 + 10 +11712.5 + 20 +22175.429095 + 30 +0.0 + 11 +11737.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8D4 + 8 +0 + 62 + 0 + 10 +11787.5 + 20 +22175.429095 + 30 +0.0 + 11 +11812.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8D5 + 8 +0 + 62 + 0 + 10 +11862.5 + 20 +22175.429095 + 30 +0.0 + 11 +11887.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8D6 + 8 +0 + 62 + 0 + 10 +11937.5 + 20 +22175.429095 + 30 +0.0 + 11 +11962.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8D7 + 8 +0 + 62 + 0 + 10 +12012.5 + 20 +22175.429095 + 30 +0.0 + 11 +12037.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8D8 + 8 +0 + 62 + 0 + 10 +12087.5 + 20 +22175.429095 + 30 +0.0 + 11 +12112.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8D9 + 8 +0 + 62 + 0 + 10 +12162.5 + 20 +22175.429095 + 30 +0.0 + 11 +12187.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8DA + 8 +0 + 62 + 0 + 10 +12237.5 + 20 +22175.429095 + 30 +0.0 + 11 +12262.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8DB + 8 +0 + 62 + 0 + 10 +12312.5 + 20 +22175.429095 + 30 +0.0 + 11 +12337.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8DC + 8 +0 + 62 + 0 + 10 +12387.5 + 20 +22175.429095 + 30 +0.0 + 11 +12412.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8DD + 8 +0 + 62 + 0 + 10 +12462.5 + 20 +22175.429095 + 30 +0.0 + 11 +12487.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8DE + 8 +0 + 62 + 0 + 10 +12537.5 + 20 +22175.429095 + 30 +0.0 + 11 +12562.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8DF + 8 +0 + 62 + 0 + 10 +12612.5 + 20 +22175.429095 + 30 +0.0 + 11 +12637.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8E0 + 8 +0 + 62 + 0 + 10 +12687.5 + 20 +22175.429095 + 30 +0.0 + 11 +12712.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8E1 + 8 +0 + 62 + 0 + 10 +12762.5 + 20 +22175.429095 + 30 +0.0 + 11 +12787.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8E2 + 8 +0 + 62 + 0 + 10 +12837.5 + 20 +22175.429095 + 30 +0.0 + 11 +12862.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8E3 + 8 +0 + 62 + 0 + 10 +12912.5 + 20 +22175.429095 + 30 +0.0 + 11 +12937.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8E4 + 8 +0 + 62 + 0 + 10 +12987.5 + 20 +22175.429095 + 30 +0.0 + 11 +13012.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8E5 + 8 +0 + 62 + 0 + 10 +13062.5 + 20 +22175.429095 + 30 +0.0 + 11 +13087.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8E6 + 8 +0 + 62 + 0 + 10 +13137.5 + 20 +22175.429095 + 30 +0.0 + 11 +13162.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8E7 + 8 +0 + 62 + 0 + 10 +13212.5 + 20 +22175.429095 + 30 +0.0 + 11 +13237.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8E8 + 8 +0 + 62 + 0 + 10 +13287.5 + 20 +22175.429095 + 30 +0.0 + 11 +13312.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8E9 + 8 +0 + 62 + 0 + 10 +13362.5 + 20 +22175.429095 + 30 +0.0 + 11 +13387.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8EA + 8 +0 + 62 + 0 + 10 +13437.5 + 20 +22175.429095 + 30 +0.0 + 11 +13462.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8EB + 8 +0 + 62 + 0 + 10 +13512.5 + 20 +22175.429095 + 30 +0.0 + 11 +13537.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8EC + 8 +0 + 62 + 0 + 10 +13587.5 + 20 +22175.429095 + 30 +0.0 + 11 +13612.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8ED + 8 +0 + 62 + 0 + 10 +13662.5 + 20 +22175.429095 + 30 +0.0 + 11 +13687.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8EE + 8 +0 + 62 + 0 + 10 +13737.5 + 20 +22175.429095 + 30 +0.0 + 11 +13762.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8EF + 8 +0 + 62 + 0 + 10 +13812.5 + 20 +22175.429095 + 30 +0.0 + 11 +13837.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8F0 + 8 +0 + 62 + 0 + 10 +13887.5 + 20 +22175.429095 + 30 +0.0 + 11 +13912.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8F1 + 8 +0 + 62 + 0 + 10 +13962.5 + 20 +22175.429095 + 30 +0.0 + 11 +13987.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8F2 + 8 +0 + 62 + 0 + 10 +14037.5 + 20 +22175.429095 + 30 +0.0 + 11 +14062.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8F3 + 8 +0 + 62 + 0 + 10 +14112.5 + 20 +22175.429095 + 30 +0.0 + 11 +14137.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8F4 + 8 +0 + 62 + 0 + 10 +14187.5 + 20 +22175.429095 + 30 +0.0 + 11 +14212.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8F5 + 8 +0 + 62 + 0 + 10 +14262.5 + 20 +22175.429095 + 30 +0.0 + 11 +14287.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8F6 + 8 +0 + 62 + 0 + 10 +14337.5 + 20 +22175.429095 + 30 +0.0 + 11 +14362.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8F7 + 8 +0 + 62 + 0 + 10 +14412.5 + 20 +22175.429095 + 30 +0.0 + 11 +14437.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8F8 + 8 +0 + 62 + 0 + 10 +14487.5 + 20 +22175.429095 + 30 +0.0 + 11 +14512.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8F9 + 8 +0 + 62 + 0 + 10 +14562.5 + 20 +22175.429095 + 30 +0.0 + 11 +14587.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8FA + 8 +0 + 62 + 0 + 10 +14637.5 + 20 +22175.429095 + 30 +0.0 + 11 +14662.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8FB + 8 +0 + 62 + 0 + 10 +14712.5 + 20 +22175.429095 + 30 +0.0 + 11 +14737.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8FC + 8 +0 + 62 + 0 + 10 +14787.5 + 20 +22175.429095 + 30 +0.0 + 11 +14812.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8FD + 8 +0 + 62 + 0 + 10 +14862.5 + 20 +22175.429095 + 30 +0.0 + 11 +14887.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8FE + 8 +0 + 62 + 0 + 10 +14937.5 + 20 +22175.429095 + 30 +0.0 + 11 +14962.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8FF + 8 +0 + 62 + 0 + 10 +15012.5 + 20 +22175.429095 + 30 +0.0 + 11 +15037.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +900 + 8 +0 + 62 + 0 + 10 +15087.5 + 20 +22175.429095 + 30 +0.0 + 11 +15112.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +901 + 8 +0 + 62 + 0 + 10 +15162.5 + 20 +22175.429095 + 30 +0.0 + 11 +15187.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +902 + 8 +0 + 62 + 0 + 10 +15237.5 + 20 +22175.429095 + 30 +0.0 + 11 +15262.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +903 + 8 +0 + 62 + 0 + 10 +15312.5 + 20 +22175.429095 + 30 +0.0 + 11 +15337.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +904 + 8 +0 + 62 + 0 + 10 +15387.5 + 20 +22175.429095 + 30 +0.0 + 11 +15412.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +905 + 8 +0 + 62 + 0 + 10 +15462.5 + 20 +22175.429095 + 30 +0.0 + 11 +15487.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +906 + 8 +0 + 62 + 0 + 10 +15537.5 + 20 +22175.429095 + 30 +0.0 + 11 +15562.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +907 + 8 +0 + 62 + 0 + 10 +15612.5 + 20 +22175.429095 + 30 +0.0 + 11 +15637.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +908 + 8 +0 + 62 + 0 + 10 +15687.5 + 20 +22175.429095 + 30 +0.0 + 11 +15712.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +909 + 8 +0 + 62 + 0 + 10 +15762.5 + 20 +22175.429095 + 30 +0.0 + 11 +15787.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +90A + 8 +0 + 62 + 0 + 10 +15837.5 + 20 +22175.429095 + 30 +0.0 + 11 +15862.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +90B + 8 +0 + 62 + 0 + 10 +11262.5 + 20 +22132.127825 + 30 +0.0 + 11 +11287.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +90C + 8 +0 + 62 + 0 + 10 +11337.5 + 20 +22132.127825 + 30 +0.0 + 11 +11362.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +90D + 8 +0 + 62 + 0 + 10 +11412.5 + 20 +22132.127825 + 30 +0.0 + 11 +11437.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +90E + 8 +0 + 62 + 0 + 10 +11487.5 + 20 +22132.127825 + 30 +0.0 + 11 +11512.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +90F + 8 +0 + 62 + 0 + 10 +11562.5 + 20 +22132.127825 + 30 +0.0 + 11 +11587.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +910 + 8 +0 + 62 + 0 + 10 +11637.5 + 20 +22132.127825 + 30 +0.0 + 11 +11662.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +911 + 8 +0 + 62 + 0 + 10 +11712.5 + 20 +22132.127825 + 30 +0.0 + 11 +11737.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +912 + 8 +0 + 62 + 0 + 10 +11787.5 + 20 +22132.127825 + 30 +0.0 + 11 +11812.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +913 + 8 +0 + 62 + 0 + 10 +11862.5 + 20 +22132.127825 + 30 +0.0 + 11 +11887.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +914 + 8 +0 + 62 + 0 + 10 +11937.5 + 20 +22132.127825 + 30 +0.0 + 11 +11962.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +915 + 8 +0 + 62 + 0 + 10 +12012.5 + 20 +22132.127825 + 30 +0.0 + 11 +12037.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +916 + 8 +0 + 62 + 0 + 10 +12087.5 + 20 +22132.127825 + 30 +0.0 + 11 +12112.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +917 + 8 +0 + 62 + 0 + 10 +12162.5 + 20 +22132.127825 + 30 +0.0 + 11 +12187.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +918 + 8 +0 + 62 + 0 + 10 +12237.5 + 20 +22132.127825 + 30 +0.0 + 11 +12262.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +919 + 8 +0 + 62 + 0 + 10 +12312.5 + 20 +22132.127825 + 30 +0.0 + 11 +12337.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +91A + 8 +0 + 62 + 0 + 10 +12387.5 + 20 +22132.127825 + 30 +0.0 + 11 +12412.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +91B + 8 +0 + 62 + 0 + 10 +12462.5 + 20 +22132.127825 + 30 +0.0 + 11 +12487.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +91C + 8 +0 + 62 + 0 + 10 +12537.5 + 20 +22132.127825 + 30 +0.0 + 11 +12562.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +91D + 8 +0 + 62 + 0 + 10 +12612.5 + 20 +22132.127825 + 30 +0.0 + 11 +12637.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +91E + 8 +0 + 62 + 0 + 10 +12687.5 + 20 +22132.127825 + 30 +0.0 + 11 +12712.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +91F + 8 +0 + 62 + 0 + 10 +12762.5 + 20 +22132.127825 + 30 +0.0 + 11 +12787.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +920 + 8 +0 + 62 + 0 + 10 +12837.5 + 20 +22132.127825 + 30 +0.0 + 11 +12862.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +921 + 8 +0 + 62 + 0 + 10 +12912.5 + 20 +22132.127825 + 30 +0.0 + 11 +12937.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +922 + 8 +0 + 62 + 0 + 10 +12987.5 + 20 +22132.127825 + 30 +0.0 + 11 +13012.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +923 + 8 +0 + 62 + 0 + 10 +13062.5 + 20 +22132.127825 + 30 +0.0 + 11 +13087.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +924 + 8 +0 + 62 + 0 + 10 +13137.5 + 20 +22132.127825 + 30 +0.0 + 11 +13162.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +925 + 8 +0 + 62 + 0 + 10 +13212.5 + 20 +22132.127825 + 30 +0.0 + 11 +13237.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +926 + 8 +0 + 62 + 0 + 10 +13287.5 + 20 +22132.127825 + 30 +0.0 + 11 +13312.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +927 + 8 +0 + 62 + 0 + 10 +13362.5 + 20 +22132.127825 + 30 +0.0 + 11 +13387.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +928 + 8 +0 + 62 + 0 + 10 +13437.5 + 20 +22132.127825 + 30 +0.0 + 11 +13462.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +929 + 8 +0 + 62 + 0 + 10 +13512.5 + 20 +22132.127825 + 30 +0.0 + 11 +13537.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +92A + 8 +0 + 62 + 0 + 10 +13587.5 + 20 +22132.127825 + 30 +0.0 + 11 +13612.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +92B + 8 +0 + 62 + 0 + 10 +13662.5 + 20 +22132.127825 + 30 +0.0 + 11 +13687.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +92C + 8 +0 + 62 + 0 + 10 +13737.5 + 20 +22132.127825 + 30 +0.0 + 11 +13762.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +92D + 8 +0 + 62 + 0 + 10 +13812.5 + 20 +22132.127825 + 30 +0.0 + 11 +13837.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +92E + 8 +0 + 62 + 0 + 10 +13887.5 + 20 +22132.127825 + 30 +0.0 + 11 +13912.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +92F + 8 +0 + 62 + 0 + 10 +13962.5 + 20 +22132.127825 + 30 +0.0 + 11 +13987.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +930 + 8 +0 + 62 + 0 + 10 +14037.5 + 20 +22132.127825 + 30 +0.0 + 11 +14062.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +931 + 8 +0 + 62 + 0 + 10 +14112.5 + 20 +22132.127825 + 30 +0.0 + 11 +14137.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +932 + 8 +0 + 62 + 0 + 10 +14187.5 + 20 +22132.127825 + 30 +0.0 + 11 +14212.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +933 + 8 +0 + 62 + 0 + 10 +14262.5 + 20 +22132.127825 + 30 +0.0 + 11 +14287.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +934 + 8 +0 + 62 + 0 + 10 +14337.5 + 20 +22132.127825 + 30 +0.0 + 11 +14362.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +935 + 8 +0 + 62 + 0 + 10 +14412.5 + 20 +22132.127825 + 30 +0.0 + 11 +14437.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +936 + 8 +0 + 62 + 0 + 10 +14487.5 + 20 +22132.127825 + 30 +0.0 + 11 +14512.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +937 + 8 +0 + 62 + 0 + 10 +14562.5 + 20 +22132.127825 + 30 +0.0 + 11 +14587.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +938 + 8 +0 + 62 + 0 + 10 +14637.5 + 20 +22132.127825 + 30 +0.0 + 11 +14662.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +939 + 8 +0 + 62 + 0 + 10 +14712.5 + 20 +22132.127825 + 30 +0.0 + 11 +14737.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +93A + 8 +0 + 62 + 0 + 10 +14787.5 + 20 +22132.127825 + 30 +0.0 + 11 +14812.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +93B + 8 +0 + 62 + 0 + 10 +14862.5 + 20 +22132.127825 + 30 +0.0 + 11 +14887.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +93C + 8 +0 + 62 + 0 + 10 +14937.5 + 20 +22132.127825 + 30 +0.0 + 11 +14962.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +93D + 8 +0 + 62 + 0 + 10 +15012.5 + 20 +22132.127825 + 30 +0.0 + 11 +15037.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +93E + 8 +0 + 62 + 0 + 10 +15087.5 + 20 +22132.127825 + 30 +0.0 + 11 +15112.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +93F + 8 +0 + 62 + 0 + 10 +15162.5 + 20 +22132.127825 + 30 +0.0 + 11 +15187.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +940 + 8 +0 + 62 + 0 + 10 +15237.5 + 20 +22132.127825 + 30 +0.0 + 11 +15262.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +941 + 8 +0 + 62 + 0 + 10 +15312.5 + 20 +22132.127825 + 30 +0.0 + 11 +15337.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +942 + 8 +0 + 62 + 0 + 10 +15387.5 + 20 +22132.127825 + 30 +0.0 + 11 +15412.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +943 + 8 +0 + 62 + 0 + 10 +15462.5 + 20 +22132.127825 + 30 +0.0 + 11 +15487.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +944 + 8 +0 + 62 + 0 + 10 +15537.5 + 20 +22132.127825 + 30 +0.0 + 11 +15562.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +945 + 8 +0 + 62 + 0 + 10 +15612.5 + 20 +22132.127825 + 30 +0.0 + 11 +15637.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +946 + 8 +0 + 62 + 0 + 10 +15687.5 + 20 +22132.127825 + 30 +0.0 + 11 +15712.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +947 + 8 +0 + 62 + 0 + 10 +15762.5 + 20 +22132.127825 + 30 +0.0 + 11 +15787.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +948 + 8 +0 + 62 + 0 + 10 +15837.5 + 20 +22132.127825 + 30 +0.0 + 11 +15862.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +949 + 8 +0 + 62 + 0 + 10 +13549.999948 + 20 +22153.778486 + 30 +0.0 + 11 +13537.499948 + 21 +22175.429121 + 31 +0.0 + 0 +LINE + 5 +94A + 8 +0 + 62 + 0 + 10 +13547.388717 + 20 +22115.0 + 30 +0.0 + 11 +13537.499948 + 21 +22132.127851 + 31 +0.0 + 0 +LINE + 5 +94B + 8 +0 + 62 + 0 + 10 +13512.499948 + 20 +22175.429121 + 30 +0.0 + 11 +13501.200696 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +94C + 8 +0 + 62 + 0 + 10 +13512.499948 + 20 +22132.127851 + 30 +0.0 + 11 +13499.999948 + 21 +22153.778486 + 31 +0.0 + 0 +LINE + 5 +94D + 8 +0 + 62 + 0 + 10 +13474.999948 + 20 +22153.778486 + 30 +0.0 + 11 +13462.499948 + 21 +22175.429121 + 31 +0.0 + 0 +LINE + 5 +94E + 8 +0 + 62 + 0 + 10 +13472.388717 + 20 +22115.0 + 30 +0.0 + 11 +13462.499948 + 21 +22132.127851 + 31 +0.0 + 0 +LINE + 5 +94F + 8 +0 + 62 + 0 + 10 +13437.499948 + 20 +22175.429121 + 30 +0.0 + 11 +13426.200696 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +950 + 8 +0 + 62 + 0 + 10 +13437.499948 + 20 +22132.127851 + 30 +0.0 + 11 +13424.999948 + 21 +22153.778486 + 31 +0.0 + 0 +LINE + 5 +951 + 8 +0 + 62 + 0 + 10 +13399.999948 + 20 +22153.778486 + 30 +0.0 + 11 +13387.499948 + 21 +22175.429121 + 31 +0.0 + 0 +LINE + 5 +952 + 8 +0 + 62 + 0 + 10 +13397.388718 + 20 +22115.0 + 30 +0.0 + 11 +13387.499948 + 21 +22132.127851 + 31 +0.0 + 0 +LINE + 5 +953 + 8 +0 + 62 + 0 + 10 +13362.499948 + 20 +22175.429122 + 30 +0.0 + 11 +13351.200696 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +954 + 8 +0 + 62 + 0 + 10 +13362.499948 + 20 +22132.127851 + 30 +0.0 + 11 +13349.999948 + 21 +22153.778486 + 31 +0.0 + 0 +LINE + 5 +955 + 8 +0 + 62 + 0 + 10 +13324.999948 + 20 +22153.778487 + 30 +0.0 + 11 +13312.499948 + 21 +22175.429122 + 31 +0.0 + 0 +LINE + 5 +956 + 8 +0 + 62 + 0 + 10 +13322.388718 + 20 +22115.0 + 30 +0.0 + 11 +13312.499948 + 21 +22132.127851 + 31 +0.0 + 0 +LINE + 5 +957 + 8 +0 + 62 + 0 + 10 +13287.499948 + 20 +22175.429122 + 30 +0.0 + 11 +13276.200697 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +958 + 8 +0 + 62 + 0 + 10 +13287.499948 + 20 +22132.127852 + 30 +0.0 + 11 +13274.999948 + 21 +22153.778487 + 31 +0.0 + 0 +LINE + 5 +959 + 8 +0 + 62 + 0 + 10 +13249.999949 + 20 +22153.778487 + 30 +0.0 + 11 +13237.499949 + 21 +22175.429122 + 31 +0.0 + 0 +LINE + 5 +95A + 8 +0 + 62 + 0 + 10 +13247.388718 + 20 +22115.0 + 30 +0.0 + 11 +13237.499949 + 21 +22132.127852 + 31 +0.0 + 0 +LINE + 5 +95B + 8 +0 + 62 + 0 + 10 +13212.499949 + 20 +22175.429122 + 30 +0.0 + 11 +13201.200697 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +95C + 8 +0 + 62 + 0 + 10 +13212.499949 + 20 +22132.127852 + 30 +0.0 + 11 +13199.999949 + 21 +22153.778487 + 31 +0.0 + 0 +LINE + 5 +95D + 8 +0 + 62 + 0 + 10 +13174.999949 + 20 +22153.778487 + 30 +0.0 + 11 +13162.499949 + 21 +22175.429122 + 31 +0.0 + 0 +LINE + 5 +95E + 8 +0 + 62 + 0 + 10 +13172.388719 + 20 +22115.0 + 30 +0.0 + 11 +13162.499949 + 21 +22132.127852 + 31 +0.0 + 0 +LINE + 5 +95F + 8 +0 + 62 + 0 + 10 +13137.499949 + 20 +22175.429122 + 30 +0.0 + 11 +13126.200697 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +960 + 8 +0 + 62 + 0 + 10 +13137.499949 + 20 +22132.127852 + 30 +0.0 + 11 +13124.999949 + 21 +22153.778487 + 31 +0.0 + 0 +LINE + 5 +961 + 8 +0 + 62 + 0 + 10 +13099.999949 + 20 +22153.778487 + 30 +0.0 + 11 +13087.499949 + 21 +22175.429122 + 31 +0.0 + 0 +LINE + 5 +962 + 8 +0 + 62 + 0 + 10 +13097.388719 + 20 +22115.0 + 30 +0.0 + 11 +13087.499949 + 21 +22132.127852 + 31 +0.0 + 0 +LINE + 5 +963 + 8 +0 + 62 + 0 + 10 +13062.499949 + 20 +22175.429122 + 30 +0.0 + 11 +13051.200697 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +964 + 8 +0 + 62 + 0 + 10 +13062.499949 + 20 +22132.127852 + 30 +0.0 + 11 +13049.999949 + 21 +22153.778487 + 31 +0.0 + 0 +LINE + 5 +965 + 8 +0 + 62 + 0 + 10 +13024.999949 + 20 +22153.778487 + 30 +0.0 + 11 +13012.499949 + 21 +22175.429122 + 31 +0.0 + 0 +LINE + 5 +966 + 8 +0 + 62 + 0 + 10 +13022.388719 + 20 +22115.0 + 30 +0.0 + 11 +13012.499949 + 21 +22132.127852 + 31 +0.0 + 0 +LINE + 5 +967 + 8 +0 + 62 + 0 + 10 +12987.499949 + 20 +22175.429122 + 30 +0.0 + 11 +12976.200698 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +968 + 8 +0 + 62 + 0 + 10 +12987.499949 + 20 +22132.127852 + 30 +0.0 + 11 +12974.999949 + 21 +22153.778487 + 31 +0.0 + 0 +LINE + 5 +969 + 8 +0 + 62 + 0 + 10 +12949.99995 + 20 +22153.778487 + 30 +0.0 + 11 +12937.49995 + 21 +22175.429122 + 31 +0.0 + 0 +LINE + 5 +96A + 8 +0 + 62 + 0 + 10 +12947.38872 + 20 +22115.0 + 30 +0.0 + 11 +12937.49995 + 21 +22132.127852 + 31 +0.0 + 0 +LINE + 5 +96B + 8 +0 + 62 + 0 + 10 +12912.49995 + 20 +22175.429122 + 30 +0.0 + 11 +12901.200698 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +96C + 8 +0 + 62 + 0 + 10 +12912.49995 + 20 +22132.127852 + 30 +0.0 + 11 +12899.99995 + 21 +22153.778487 + 31 +0.0 + 0 +LINE + 5 +96D + 8 +0 + 62 + 0 + 10 +12874.99995 + 20 +22153.778487 + 30 +0.0 + 11 +12862.49995 + 21 +22175.429122 + 31 +0.0 + 0 +LINE + 5 +96E + 8 +0 + 62 + 0 + 10 +12872.38872 + 20 +22115.0 + 30 +0.0 + 11 +12862.49995 + 21 +22132.127852 + 31 +0.0 + 0 +LINE + 5 +96F + 8 +0 + 62 + 0 + 10 +12837.49995 + 20 +22175.429123 + 30 +0.0 + 11 +12826.200698 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +970 + 8 +0 + 62 + 0 + 10 +12837.49995 + 20 +22132.127852 + 30 +0.0 + 11 +12824.99995 + 21 +22153.778487 + 31 +0.0 + 0 +LINE + 5 +971 + 8 +0 + 62 + 0 + 10 +12799.99995 + 20 +22153.778488 + 30 +0.0 + 11 +12787.49995 + 21 +22175.429123 + 31 +0.0 + 0 +LINE + 5 +972 + 8 +0 + 62 + 0 + 10 +12797.38872 + 20 +22115.0 + 30 +0.0 + 11 +12787.49995 + 21 +22132.127852 + 31 +0.0 + 0 +LINE + 5 +973 + 8 +0 + 62 + 0 + 10 +12762.49995 + 20 +22175.429123 + 30 +0.0 + 11 +12751.200699 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +974 + 8 +0 + 62 + 0 + 10 +12762.49995 + 20 +22132.127853 + 30 +0.0 + 11 +12749.99995 + 21 +22153.778488 + 31 +0.0 + 0 +LINE + 5 +975 + 8 +0 + 62 + 0 + 10 +12724.99995 + 20 +22153.778488 + 30 +0.0 + 11 +12712.49995 + 21 +22175.429123 + 31 +0.0 + 0 +LINE + 5 +976 + 8 +0 + 62 + 0 + 10 +12722.388721 + 20 +22115.0 + 30 +0.0 + 11 +12712.49995 + 21 +22132.127853 + 31 +0.0 + 0 +LINE + 5 +977 + 8 +0 + 62 + 0 + 10 +12687.49995 + 20 +22175.429123 + 30 +0.0 + 11 +12676.200699 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +978 + 8 +0 + 62 + 0 + 10 +12687.49995 + 20 +22132.127853 + 30 +0.0 + 11 +12674.99995 + 21 +22153.778488 + 31 +0.0 + 0 +LINE + 5 +979 + 8 +0 + 62 + 0 + 10 +12649.999951 + 20 +22153.778488 + 30 +0.0 + 11 +12637.499951 + 21 +22175.429123 + 31 +0.0 + 0 +LINE + 5 +97A + 8 +0 + 62 + 0 + 10 +12647.388721 + 20 +22115.0 + 30 +0.0 + 11 +12637.499951 + 21 +22132.127853 + 31 +0.0 + 0 +LINE + 5 +97B + 8 +0 + 62 + 0 + 10 +12612.499951 + 20 +22175.429123 + 30 +0.0 + 11 +12601.200699 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +97C + 8 +0 + 62 + 0 + 10 +12612.499951 + 20 +22132.127853 + 30 +0.0 + 11 +12599.999951 + 21 +22153.778488 + 31 +0.0 + 0 +LINE + 5 +97D + 8 +0 + 62 + 0 + 10 +12574.999951 + 20 +22153.778488 + 30 +0.0 + 11 +12562.499951 + 21 +22175.429123 + 31 +0.0 + 0 +LINE + 5 +97E + 8 +0 + 62 + 0 + 10 +12572.388721 + 20 +22115.0 + 30 +0.0 + 11 +12562.499951 + 21 +22132.127853 + 31 +0.0 + 0 +LINE + 5 +97F + 8 +0 + 62 + 0 + 10 +12537.499951 + 20 +22175.429123 + 30 +0.0 + 11 +12526.2007 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +980 + 8 +0 + 62 + 0 + 10 +12537.499951 + 20 +22132.127853 + 30 +0.0 + 11 +12524.999951 + 21 +22153.778488 + 31 +0.0 + 0 +LINE + 5 +981 + 8 +0 + 62 + 0 + 10 +12499.999951 + 20 +22153.778488 + 30 +0.0 + 11 +12487.499951 + 21 +22175.429123 + 31 +0.0 + 0 +LINE + 5 +982 + 8 +0 + 62 + 0 + 10 +12497.388722 + 20 +22115.0 + 30 +0.0 + 11 +12487.499951 + 21 +22132.127853 + 31 +0.0 + 0 +LINE + 5 +983 + 8 +0 + 62 + 0 + 10 +12462.499951 + 20 +22175.429123 + 30 +0.0 + 11 +12451.2007 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +984 + 8 +0 + 62 + 0 + 10 +12462.499951 + 20 +22132.127853 + 30 +0.0 + 11 +12449.999951 + 21 +22153.778488 + 31 +0.0 + 0 +LINE + 5 +985 + 8 +0 + 62 + 0 + 10 +12424.999951 + 20 +22153.778488 + 30 +0.0 + 11 +12412.499951 + 21 +22175.429123 + 31 +0.0 + 0 +LINE + 5 +986 + 8 +0 + 62 + 0 + 10 +12422.388722 + 20 +22115.0 + 30 +0.0 + 11 +12412.499951 + 21 +22132.127853 + 31 +0.0 + 0 +LINE + 5 +987 + 8 +0 + 62 + 0 + 10 +12387.499951 + 20 +22175.429123 + 30 +0.0 + 11 +12376.2007 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +988 + 8 +0 + 62 + 0 + 10 +12387.499951 + 20 +22132.127853 + 30 +0.0 + 11 +12374.999951 + 21 +22153.778488 + 31 +0.0 + 0 +LINE + 5 +989 + 8 +0 + 62 + 0 + 10 +12349.999951 + 20 +22153.778488 + 30 +0.0 + 11 +12337.499951 + 21 +22175.429123 + 31 +0.0 + 0 +LINE + 5 +98A + 8 +0 + 62 + 0 + 10 +12347.388722 + 20 +22115.0 + 30 +0.0 + 11 +12337.499952 + 21 +22132.127853 + 31 +0.0 + 0 +LINE + 5 +98B + 8 +0 + 62 + 0 + 10 +12312.499952 + 20 +22175.429124 + 30 +0.0 + 11 +12301.200701 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +98C + 8 +0 + 62 + 0 + 10 +12312.499952 + 20 +22132.127853 + 30 +0.0 + 11 +12299.999952 + 21 +22153.778488 + 31 +0.0 + 0 +LINE + 5 +98D + 8 +0 + 62 + 0 + 10 +12274.999952 + 20 +22153.778489 + 30 +0.0 + 11 +12262.499952 + 21 +22175.429124 + 31 +0.0 + 0 +LINE + 5 +98E + 8 +0 + 62 + 0 + 10 +12272.388723 + 20 +22115.0 + 30 +0.0 + 11 +12262.499952 + 21 +22132.127853 + 31 +0.0 + 0 +LINE + 5 +98F + 8 +0 + 62 + 0 + 10 +12237.499952 + 20 +22175.429124 + 30 +0.0 + 11 +12226.200701 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +990 + 8 +0 + 62 + 0 + 10 +12237.499952 + 20 +22132.127854 + 30 +0.0 + 11 +12224.999952 + 21 +22153.778489 + 31 +0.0 + 0 +LINE + 5 +991 + 8 +0 + 62 + 0 + 10 +12199.999952 + 20 +22153.778489 + 30 +0.0 + 11 +12187.499952 + 21 +22175.429124 + 31 +0.0 + 0 +LINE + 5 +992 + 8 +0 + 62 + 0 + 10 +12197.388723 + 20 +22115.0 + 30 +0.0 + 11 +12187.499952 + 21 +22132.127854 + 31 +0.0 + 0 +LINE + 5 +993 + 8 +0 + 62 + 0 + 10 +12162.499952 + 20 +22175.429124 + 30 +0.0 + 11 +12151.200701 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +994 + 8 +0 + 62 + 0 + 10 +12162.499952 + 20 +22132.127854 + 30 +0.0 + 11 +12149.999952 + 21 +22153.778489 + 31 +0.0 + 0 +LINE + 5 +995 + 8 +0 + 62 + 0 + 10 +12124.999952 + 20 +22153.778489 + 30 +0.0 + 11 +12112.499952 + 21 +22175.429124 + 31 +0.0 + 0 +LINE + 5 +996 + 8 +0 + 62 + 0 + 10 +12122.388723 + 20 +22115.0 + 30 +0.0 + 11 +12112.499952 + 21 +22132.127854 + 31 +0.0 + 0 +LINE + 5 +997 + 8 +0 + 62 + 0 + 10 +12087.499952 + 20 +22175.429124 + 30 +0.0 + 11 +12076.200702 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +998 + 8 +0 + 62 + 0 + 10 +12087.499952 + 20 +22132.127854 + 30 +0.0 + 11 +12074.999952 + 21 +22153.778489 + 31 +0.0 + 0 +LINE + 5 +999 + 8 +0 + 62 + 0 + 10 +12049.999952 + 20 +22153.778489 + 30 +0.0 + 11 +12037.499952 + 21 +22175.429124 + 31 +0.0 + 0 +LINE + 5 +99A + 8 +0 + 62 + 0 + 10 +12047.388724 + 20 +22115.0 + 30 +0.0 + 11 +12037.499953 + 21 +22132.127854 + 31 +0.0 + 0 +LINE + 5 +99B + 8 +0 + 62 + 0 + 10 +12012.499953 + 20 +22175.429124 + 30 +0.0 + 11 +12001.200702 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +99C + 8 +0 + 62 + 0 + 10 +12012.499953 + 20 +22132.127854 + 30 +0.0 + 11 +11999.999953 + 21 +22153.778489 + 31 +0.0 + 0 +LINE + 5 +99D + 8 +0 + 62 + 0 + 10 +11974.999953 + 20 +22153.778489 + 30 +0.0 + 11 +11962.499953 + 21 +22175.429124 + 31 +0.0 + 0 +LINE + 5 +99E + 8 +0 + 62 + 0 + 10 +11972.388724 + 20 +22115.0 + 30 +0.0 + 11 +11962.499953 + 21 +22132.127854 + 31 +0.0 + 0 +LINE + 5 +99F + 8 +0 + 62 + 0 + 10 +11937.499953 + 20 +22175.429124 + 30 +0.0 + 11 +11926.200702 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +9A0 + 8 +0 + 62 + 0 + 10 +11937.499953 + 20 +22132.127854 + 30 +0.0 + 11 +11924.999953 + 21 +22153.778489 + 31 +0.0 + 0 +LINE + 5 +9A1 + 8 +0 + 62 + 0 + 10 +11899.999953 + 20 +22153.778489 + 30 +0.0 + 11 +11887.499953 + 21 +22175.429124 + 31 +0.0 + 0 +LINE + 5 +9A2 + 8 +0 + 62 + 0 + 10 +11897.388724 + 20 +22115.0 + 30 +0.0 + 11 +11887.499953 + 21 +22132.127854 + 31 +0.0 + 0 +LINE + 5 +9A3 + 8 +0 + 62 + 0 + 10 +11862.499953 + 20 +22175.429124 + 30 +0.0 + 11 +11851.200703 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +9A4 + 8 +0 + 62 + 0 + 10 +11862.499953 + 20 +22132.127854 + 30 +0.0 + 11 +11849.999953 + 21 +22153.778489 + 31 +0.0 + 0 +LINE + 5 +9A5 + 8 +0 + 62 + 0 + 10 +11824.999953 + 20 +22153.778489 + 30 +0.0 + 11 +11812.499953 + 21 +22175.429124 + 31 +0.0 + 0 +LINE + 5 +9A6 + 8 +0 + 62 + 0 + 10 +11822.388725 + 20 +22115.0 + 30 +0.0 + 11 +11812.499953 + 21 +22132.127854 + 31 +0.0 + 0 +LINE + 5 +9A7 + 8 +0 + 62 + 0 + 10 +11787.499953 + 20 +22175.429125 + 30 +0.0 + 11 +11776.200703 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +9A8 + 8 +0 + 62 + 0 + 10 +11787.499953 + 20 +22132.127854 + 30 +0.0 + 11 +11774.999953 + 21 +22153.778489 + 31 +0.0 + 0 +LINE + 5 +9A9 + 8 +0 + 62 + 0 + 10 +11749.999953 + 20 +22153.77849 + 30 +0.0 + 11 +11737.499953 + 21 +22175.429125 + 31 +0.0 + 0 +LINE + 5 +9AA + 8 +0 + 62 + 0 + 10 +11747.388725 + 20 +22115.0 + 30 +0.0 + 11 +11737.499954 + 21 +22132.127854 + 31 +0.0 + 0 +LINE + 5 +9AB + 8 +0 + 62 + 0 + 10 +11712.499954 + 20 +22175.429125 + 30 +0.0 + 11 +11701.200703 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +9AC + 8 +0 + 62 + 0 + 10 +11712.499954 + 20 +22132.127855 + 30 +0.0 + 11 +11699.999954 + 21 +22153.77849 + 31 +0.0 + 0 +LINE + 5 +9AD + 8 +0 + 62 + 0 + 10 +11674.999954 + 20 +22153.77849 + 30 +0.0 + 11 +11662.499954 + 21 +22175.429125 + 31 +0.0 + 0 +LINE + 5 +9AE + 8 +0 + 62 + 0 + 10 +11672.388725 + 20 +22115.0 + 30 +0.0 + 11 +11662.499954 + 21 +22132.127855 + 31 +0.0 + 0 +LINE + 5 +9AF + 8 +0 + 62 + 0 + 10 +11637.499954 + 20 +22175.429125 + 30 +0.0 + 11 +11626.200704 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +9B0 + 8 +0 + 62 + 0 + 10 +11637.499954 + 20 +22132.127855 + 30 +0.0 + 11 +11624.999954 + 21 +22153.77849 + 31 +0.0 + 0 +LINE + 5 +9B1 + 8 +0 + 62 + 0 + 10 +11599.999954 + 20 +22153.77849 + 30 +0.0 + 11 +11587.499954 + 21 +22175.429125 + 31 +0.0 + 0 +LINE + 5 +9B2 + 8 +0 + 62 + 0 + 10 +11597.388726 + 20 +22115.0 + 30 +0.0 + 11 +11587.499954 + 21 +22132.127855 + 31 +0.0 + 0 +LINE + 5 +9B3 + 8 +0 + 62 + 0 + 10 +11562.499954 + 20 +22175.429125 + 30 +0.0 + 11 +11551.200704 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +9B4 + 8 +0 + 62 + 0 + 10 +11562.499954 + 20 +22132.127855 + 30 +0.0 + 11 +11549.999954 + 21 +22153.77849 + 31 +0.0 + 0 +LINE + 5 +9B5 + 8 +0 + 62 + 0 + 10 +11524.999954 + 20 +22153.77849 + 30 +0.0 + 11 +11512.499954 + 21 +22175.429125 + 31 +0.0 + 0 +LINE + 5 +9B6 + 8 +0 + 62 + 0 + 10 +11522.388726 + 20 +22115.0 + 30 +0.0 + 11 +11512.499954 + 21 +22132.127855 + 31 +0.0 + 0 +LINE + 5 +9B7 + 8 +0 + 62 + 0 + 10 +11487.499954 + 20 +22175.429125 + 30 +0.0 + 11 +11476.200704 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +9B8 + 8 +0 + 62 + 0 + 10 +11487.499954 + 20 +22132.127855 + 30 +0.0 + 11 +11474.999954 + 21 +22153.77849 + 31 +0.0 + 0 +LINE + 5 +9B9 + 8 +0 + 62 + 0 + 10 +11449.999954 + 20 +22153.77849 + 30 +0.0 + 11 +11437.499954 + 21 +22175.429125 + 31 +0.0 + 0 +LINE + 5 +9BA + 8 +0 + 62 + 0 + 10 +11447.388726 + 20 +22115.0 + 30 +0.0 + 11 +11437.499955 + 21 +22132.127855 + 31 +0.0 + 0 +LINE + 5 +9BB + 8 +0 + 62 + 0 + 10 +11412.499955 + 20 +22175.429125 + 30 +0.0 + 11 +11401.200705 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +9BC + 8 +0 + 62 + 0 + 10 +11412.499955 + 20 +22132.127855 + 30 +0.0 + 11 +11399.999955 + 21 +22153.77849 + 31 +0.0 + 0 +LINE + 5 +9BD + 8 +0 + 62 + 0 + 10 +11374.999955 + 20 +22153.77849 + 30 +0.0 + 11 +11362.499955 + 21 +22175.429125 + 31 +0.0 + 0 +LINE + 5 +9BE + 8 +0 + 62 + 0 + 10 +11372.388727 + 20 +22115.0 + 30 +0.0 + 11 +11362.499955 + 21 +22132.127855 + 31 +0.0 + 0 +LINE + 5 +9BF + 8 +0 + 62 + 0 + 10 +11337.499955 + 20 +22175.429125 + 30 +0.0 + 11 +11326.200705 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +9C0 + 8 +0 + 62 + 0 + 10 +11337.499955 + 20 +22132.127855 + 30 +0.0 + 11 +11324.999955 + 21 +22153.77849 + 31 +0.0 + 0 +LINE + 5 +9C1 + 8 +0 + 62 + 0 + 10 +11299.999955 + 20 +22153.77849 + 30 +0.0 + 11 +11287.499955 + 21 +22175.429125 + 31 +0.0 + 0 +LINE + 5 +9C2 + 8 +0 + 62 + 0 + 10 +11297.388727 + 20 +22115.0 + 30 +0.0 + 11 +11287.499955 + 21 +22132.127855 + 31 +0.0 + 0 +LINE + 5 +9C3 + 8 +0 + 62 + 0 + 10 +11262.499955 + 20 +22175.429126 + 30 +0.0 + 11 +11251.200705 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +9C4 + 8 +0 + 62 + 0 + 10 +11262.499955 + 20 +22132.127855 + 30 +0.0 + 11 +11249.999955 + 21 +22153.77849 + 31 +0.0 + 0 +LINE + 5 +9C5 + 8 +0 + 62 + 0 + 10 +13587.499947 + 20 +22132.127851 + 30 +0.0 + 11 +13574.999947 + 21 +22153.778486 + 31 +0.0 + 0 +LINE + 5 +9C6 + 8 +0 + 62 + 0 + 10 +13622.388717 + 20 +22115.0 + 30 +0.0 + 11 +13612.499947 + 21 +22132.127851 + 31 +0.0 + 0 +LINE + 5 +9C7 + 8 +0 + 62 + 0 + 10 +13587.499947 + 20 +22175.429121 + 30 +0.0 + 11 +13576.200695 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +9C8 + 8 +0 + 62 + 0 + 10 +13624.999947 + 20 +22153.778486 + 30 +0.0 + 11 +13612.499947 + 21 +22175.429121 + 31 +0.0 + 0 +LINE + 5 +9C9 + 8 +0 + 62 + 0 + 10 +13662.499947 + 20 +22132.127851 + 30 +0.0 + 11 +13649.999947 + 21 +22153.778486 + 31 +0.0 + 0 +LINE + 5 +9CA + 8 +0 + 62 + 0 + 10 +13697.388716 + 20 +22115.0 + 30 +0.0 + 11 +13687.499947 + 21 +22132.127851 + 31 +0.0 + 0 +LINE + 5 +9CB + 8 +0 + 62 + 0 + 10 +13662.499947 + 20 +22175.429121 + 30 +0.0 + 11 +13651.200695 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +9CC + 8 +0 + 62 + 0 + 10 +13699.999947 + 20 +22153.778486 + 30 +0.0 + 11 +13687.499947 + 21 +22175.429121 + 31 +0.0 + 0 +LINE + 5 +9CD + 8 +0 + 62 + 0 + 10 +13737.499947 + 20 +22132.127851 + 30 +0.0 + 11 +13724.999947 + 21 +22153.778486 + 31 +0.0 + 0 +LINE + 5 +9CE + 8 +0 + 62 + 0 + 10 +13772.388716 + 20 +22115.0 + 30 +0.0 + 11 +13762.499947 + 21 +22132.127851 + 31 +0.0 + 0 +LINE + 5 +9CF + 8 +0 + 62 + 0 + 10 +13737.499947 + 20 +22175.429121 + 30 +0.0 + 11 +13726.200695 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +9D0 + 8 +0 + 62 + 0 + 10 +13774.999947 + 20 +22153.778486 + 30 +0.0 + 11 +13762.499947 + 21 +22175.429121 + 31 +0.0 + 0 +LINE + 5 +9D1 + 8 +0 + 62 + 0 + 10 +13812.499947 + 20 +22132.127851 + 30 +0.0 + 11 +13799.999947 + 21 +22153.778486 + 31 +0.0 + 0 +LINE + 5 +9D2 + 8 +0 + 62 + 0 + 10 +13847.388716 + 20 +22115.0 + 30 +0.0 + 11 +13837.499947 + 21 +22132.12785 + 31 +0.0 + 0 +LINE + 5 +9D3 + 8 +0 + 62 + 0 + 10 +13812.499947 + 20 +22175.429121 + 30 +0.0 + 11 +13801.200694 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +9D4 + 8 +0 + 62 + 0 + 10 +13849.999947 + 20 +22153.778486 + 30 +0.0 + 11 +13837.499947 + 21 +22175.429121 + 31 +0.0 + 0 +LINE + 5 +9D5 + 8 +0 + 62 + 0 + 10 +13887.499946 + 20 +22132.12785 + 30 +0.0 + 11 +13874.999946 + 21 +22153.778485 + 31 +0.0 + 0 +LINE + 5 +9D6 + 8 +0 + 62 + 0 + 10 +13922.388715 + 20 +22115.0 + 30 +0.0 + 11 +13912.499946 + 21 +22132.12785 + 31 +0.0 + 0 +LINE + 5 +9D7 + 8 +0 + 62 + 0 + 10 +13887.499946 + 20 +22175.429121 + 30 +0.0 + 11 +13876.200694 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +9D8 + 8 +0 + 62 + 0 + 10 +13924.999946 + 20 +22153.778485 + 30 +0.0 + 11 +13912.499946 + 21 +22175.42912 + 31 +0.0 + 0 +LINE + 5 +9D9 + 8 +0 + 62 + 0 + 10 +13962.499946 + 20 +22132.12785 + 30 +0.0 + 11 +13949.999946 + 21 +22153.778485 + 31 +0.0 + 0 +LINE + 5 +9DA + 8 +0 + 62 + 0 + 10 +13997.388715 + 20 +22115.0 + 30 +0.0 + 11 +13987.499946 + 21 +22132.12785 + 31 +0.0 + 0 +LINE + 5 +9DB + 8 +0 + 62 + 0 + 10 +13962.499946 + 20 +22175.42912 + 30 +0.0 + 11 +13951.200694 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +9DC + 8 +0 + 62 + 0 + 10 +13999.999946 + 20 +22153.778485 + 30 +0.0 + 11 +13987.499946 + 21 +22175.42912 + 31 +0.0 + 0 +LINE + 5 +9DD + 8 +0 + 62 + 0 + 10 +14037.499946 + 20 +22132.12785 + 30 +0.0 + 11 +14024.999946 + 21 +22153.778485 + 31 +0.0 + 0 +LINE + 5 +9DE + 8 +0 + 62 + 0 + 10 +14072.388715 + 20 +22115.0 + 30 +0.0 + 11 +14062.499946 + 21 +22132.12785 + 31 +0.0 + 0 +LINE + 5 +9DF + 8 +0 + 62 + 0 + 10 +14037.499946 + 20 +22175.42912 + 30 +0.0 + 11 +14026.200693 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +9E0 + 8 +0 + 62 + 0 + 10 +14074.999946 + 20 +22153.778485 + 30 +0.0 + 11 +14062.499946 + 21 +22175.42912 + 31 +0.0 + 0 +LINE + 5 +9E1 + 8 +0 + 62 + 0 + 10 +14112.499946 + 20 +22132.12785 + 30 +0.0 + 11 +14099.999946 + 21 +22153.778485 + 31 +0.0 + 0 +LINE + 5 +9E2 + 8 +0 + 62 + 0 + 10 +14147.388714 + 20 +22115.0 + 30 +0.0 + 11 +14137.499946 + 21 +22132.12785 + 31 +0.0 + 0 +LINE + 5 +9E3 + 8 +0 + 62 + 0 + 10 +14112.499946 + 20 +22175.42912 + 30 +0.0 + 11 +14101.200693 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +9E4 + 8 +0 + 62 + 0 + 10 +14149.999946 + 20 +22153.778485 + 30 +0.0 + 11 +14137.499946 + 21 +22175.42912 + 31 +0.0 + 0 +LINE + 5 +9E5 + 8 +0 + 62 + 0 + 10 +14187.499946 + 20 +22132.12785 + 30 +0.0 + 11 +14174.999946 + 21 +22153.778485 + 31 +0.0 + 0 +LINE + 5 +9E6 + 8 +0 + 62 + 0 + 10 +14222.388714 + 20 +22115.0 + 30 +0.0 + 11 +14212.499945 + 21 +22132.12785 + 31 +0.0 + 0 +LINE + 5 +9E7 + 8 +0 + 62 + 0 + 10 +14187.499945 + 20 +22175.42912 + 30 +0.0 + 11 +14176.200693 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +9E8 + 8 +0 + 62 + 0 + 10 +14224.999945 + 20 +22153.778485 + 30 +0.0 + 11 +14212.499945 + 21 +22175.42912 + 31 +0.0 + 0 +LINE + 5 +9E9 + 8 +0 + 62 + 0 + 10 +14262.499945 + 20 +22132.12785 + 30 +0.0 + 11 +14249.999945 + 21 +22153.778485 + 31 +0.0 + 0 +LINE + 5 +9EA + 8 +0 + 62 + 0 + 10 +14297.388714 + 20 +22115.0 + 30 +0.0 + 11 +14287.499945 + 21 +22132.12785 + 31 +0.0 + 0 +LINE + 5 +9EB + 8 +0 + 62 + 0 + 10 +14262.499945 + 20 +22175.42912 + 30 +0.0 + 11 +14251.200692 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +9EC + 8 +0 + 62 + 0 + 10 +14299.999945 + 20 +22153.778485 + 30 +0.0 + 11 +14287.499945 + 21 +22175.42912 + 31 +0.0 + 0 +LINE + 5 +9ED + 8 +0 + 62 + 0 + 10 +14337.499945 + 20 +22132.12785 + 30 +0.0 + 11 +14324.999945 + 21 +22153.778485 + 31 +0.0 + 0 +LINE + 5 +9EE + 8 +0 + 62 + 0 + 10 +14372.388713 + 20 +22115.0 + 30 +0.0 + 11 +14362.499945 + 21 +22132.12785 + 31 +0.0 + 0 +LINE + 5 +9EF + 8 +0 + 62 + 0 + 10 +14337.499945 + 20 +22175.42912 + 30 +0.0 + 11 +14326.200692 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +9F0 + 8 +0 + 62 + 0 + 10 +14374.999945 + 20 +22153.778485 + 30 +0.0 + 11 +14362.499945 + 21 +22175.42912 + 31 +0.0 + 0 +LINE + 5 +9F1 + 8 +0 + 62 + 0 + 10 +14412.499945 + 20 +22132.127849 + 30 +0.0 + 11 +14399.999945 + 21 +22153.778485 + 31 +0.0 + 0 +LINE + 5 +9F2 + 8 +0 + 62 + 0 + 10 +14447.388713 + 20 +22115.0 + 30 +0.0 + 11 +14437.499945 + 21 +22132.127849 + 31 +0.0 + 0 +LINE + 5 +9F3 + 8 +0 + 62 + 0 + 10 +14412.499945 + 20 +22175.42912 + 30 +0.0 + 11 +14401.200692 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +9F4 + 8 +0 + 62 + 0 + 10 +14449.999945 + 20 +22153.778484 + 30 +0.0 + 11 +14437.499945 + 21 +22175.42912 + 31 +0.0 + 0 +LINE + 5 +9F5 + 8 +0 + 62 + 0 + 10 +14487.499945 + 20 +22132.127849 + 30 +0.0 + 11 +14474.999945 + 21 +22153.778484 + 31 +0.0 + 0 +LINE + 5 +9F6 + 8 +0 + 62 + 0 + 10 +14522.388713 + 20 +22115.0 + 30 +0.0 + 11 +14512.499944 + 21 +22132.127849 + 31 +0.0 + 0 +LINE + 5 +9F7 + 8 +0 + 62 + 0 + 10 +14487.499944 + 20 +22175.429119 + 30 +0.0 + 11 +14476.200691 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +9F8 + 8 +0 + 62 + 0 + 10 +14524.999944 + 20 +22153.778484 + 30 +0.0 + 11 +14512.499944 + 21 +22175.429119 + 31 +0.0 + 0 +LINE + 5 +9F9 + 8 +0 + 62 + 0 + 10 +14562.499944 + 20 +22132.127849 + 30 +0.0 + 11 +14549.999944 + 21 +22153.778484 + 31 +0.0 + 0 +LINE + 5 +9FA + 8 +0 + 62 + 0 + 10 +14597.388712 + 20 +22115.0 + 30 +0.0 + 11 +14587.499944 + 21 +22132.127849 + 31 +0.0 + 0 +LINE + 5 +9FB + 8 +0 + 62 + 0 + 10 +14562.499944 + 20 +22175.429119 + 30 +0.0 + 11 +14551.200691 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +9FC + 8 +0 + 62 + 0 + 10 +14599.999944 + 20 +22153.778484 + 30 +0.0 + 11 +14587.499944 + 21 +22175.429119 + 31 +0.0 + 0 +LINE + 5 +9FD + 8 +0 + 62 + 0 + 10 +14637.499944 + 20 +22132.127849 + 30 +0.0 + 11 +14624.999944 + 21 +22153.778484 + 31 +0.0 + 0 +LINE + 5 +9FE + 8 +0 + 62 + 0 + 10 +14672.388712 + 20 +22115.0 + 30 +0.0 + 11 +14662.499944 + 21 +22132.127849 + 31 +0.0 + 0 +LINE + 5 +9FF + 8 +0 + 62 + 0 + 10 +14637.499944 + 20 +22175.429119 + 30 +0.0 + 11 +14626.200691 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A00 + 8 +0 + 62 + 0 + 10 +14674.999944 + 20 +22153.778484 + 30 +0.0 + 11 +14662.499944 + 21 +22175.429119 + 31 +0.0 + 0 +LINE + 5 +A01 + 8 +0 + 62 + 0 + 10 +14712.499944 + 20 +22132.127849 + 30 +0.0 + 11 +14699.999944 + 21 +22153.778484 + 31 +0.0 + 0 +LINE + 5 +A02 + 8 +0 + 62 + 0 + 10 +14747.388712 + 20 +22115.0 + 30 +0.0 + 11 +14737.499944 + 21 +22132.127849 + 31 +0.0 + 0 +LINE + 5 +A03 + 8 +0 + 62 + 0 + 10 +14712.499944 + 20 +22175.429119 + 30 +0.0 + 11 +14701.20069 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A04 + 8 +0 + 62 + 0 + 10 +14749.999944 + 20 +22153.778484 + 30 +0.0 + 11 +14737.499944 + 21 +22175.429119 + 31 +0.0 + 0 +LINE + 5 +A05 + 8 +0 + 62 + 0 + 10 +14787.499944 + 20 +22132.127849 + 30 +0.0 + 11 +14774.999944 + 21 +22153.778484 + 31 +0.0 + 0 +LINE + 5 +A06 + 8 +0 + 62 + 0 + 10 +14822.388711 + 20 +22115.0 + 30 +0.0 + 11 +14812.499943 + 21 +22132.127849 + 31 +0.0 + 0 +LINE + 5 +A07 + 8 +0 + 62 + 0 + 10 +14787.499943 + 20 +22175.429119 + 30 +0.0 + 11 +14776.20069 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A08 + 8 +0 + 62 + 0 + 10 +14824.999943 + 20 +22153.778484 + 30 +0.0 + 11 +14812.499943 + 21 +22175.429119 + 31 +0.0 + 0 +LINE + 5 +A09 + 8 +0 + 62 + 0 + 10 +14862.499943 + 20 +22132.127849 + 30 +0.0 + 11 +14849.999943 + 21 +22153.778484 + 31 +0.0 + 0 +LINE + 5 +A0A + 8 +0 + 62 + 0 + 10 +14897.388711 + 20 +22115.0 + 30 +0.0 + 11 +14887.499943 + 21 +22132.127849 + 31 +0.0 + 0 +LINE + 5 +A0B + 8 +0 + 62 + 0 + 10 +14862.499943 + 20 +22175.429119 + 30 +0.0 + 11 +14851.20069 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A0C + 8 +0 + 62 + 0 + 10 +14899.999943 + 20 +22153.778484 + 30 +0.0 + 11 +14887.499943 + 21 +22175.429119 + 31 +0.0 + 0 +LINE + 5 +A0D + 8 +0 + 62 + 0 + 10 +14937.499943 + 20 +22132.127848 + 30 +0.0 + 11 +14924.999943 + 21 +22153.778484 + 31 +0.0 + 0 +LINE + 5 +A0E + 8 +0 + 62 + 0 + 10 +14972.388711 + 20 +22115.0 + 30 +0.0 + 11 +14962.499943 + 21 +22132.127848 + 31 +0.0 + 0 +LINE + 5 +A0F + 8 +0 + 62 + 0 + 10 +14937.499943 + 20 +22175.429119 + 30 +0.0 + 11 +14926.200689 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A10 + 8 +0 + 62 + 0 + 10 +14974.999943 + 20 +22153.778483 + 30 +0.0 + 11 +14962.499943 + 21 +22175.429119 + 31 +0.0 + 0 +LINE + 5 +A11 + 8 +0 + 62 + 0 + 10 +15012.499943 + 20 +22132.127848 + 30 +0.0 + 11 +14999.999943 + 21 +22153.778483 + 31 +0.0 + 0 +LINE + 5 +A12 + 8 +0 + 62 + 0 + 10 +15047.388711 + 20 +22115.0 + 30 +0.0 + 11 +15037.499943 + 21 +22132.127848 + 31 +0.0 + 0 +LINE + 5 +A13 + 8 +0 + 62 + 0 + 10 +15012.499943 + 20 +22175.429118 + 30 +0.0 + 11 +15001.200689 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A14 + 8 +0 + 62 + 0 + 10 +15049.999943 + 20 +22153.778483 + 30 +0.0 + 11 +15037.499943 + 21 +22175.429118 + 31 +0.0 + 0 +LINE + 5 +A15 + 8 +0 + 62 + 0 + 10 +15087.499943 + 20 +22132.127848 + 30 +0.0 + 11 +15074.999943 + 21 +22153.778483 + 31 +0.0 + 0 +LINE + 5 +A16 + 8 +0 + 62 + 0 + 10 +15122.38871 + 20 +22115.0 + 30 +0.0 + 11 +15112.499942 + 21 +22132.127848 + 31 +0.0 + 0 +LINE + 5 +A17 + 8 +0 + 62 + 0 + 10 +15087.499942 + 20 +22175.429118 + 30 +0.0 + 11 +15076.200689 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A18 + 8 +0 + 62 + 0 + 10 +15124.999942 + 20 +22153.778483 + 30 +0.0 + 11 +15112.499942 + 21 +22175.429118 + 31 +0.0 + 0 +LINE + 5 +A19 + 8 +0 + 62 + 0 + 10 +15162.499942 + 20 +22132.127848 + 30 +0.0 + 11 +15149.999942 + 21 +22153.778483 + 31 +0.0 + 0 +LINE + 5 +A1A + 8 +0 + 62 + 0 + 10 +15197.38871 + 20 +22115.0 + 30 +0.0 + 11 +15187.499942 + 21 +22132.127848 + 31 +0.0 + 0 +LINE + 5 +A1B + 8 +0 + 62 + 0 + 10 +15162.499942 + 20 +22175.429118 + 30 +0.0 + 11 +15151.200688 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A1C + 8 +0 + 62 + 0 + 10 +15199.999942 + 20 +22153.778483 + 30 +0.0 + 11 +15187.499942 + 21 +22175.429118 + 31 +0.0 + 0 +LINE + 5 +A1D + 8 +0 + 62 + 0 + 10 +15237.499942 + 20 +22132.127848 + 30 +0.0 + 11 +15224.999942 + 21 +22153.778483 + 31 +0.0 + 0 +LINE + 5 +A1E + 8 +0 + 62 + 0 + 10 +15272.38871 + 20 +22115.0 + 30 +0.0 + 11 +15262.499942 + 21 +22132.127848 + 31 +0.0 + 0 +LINE + 5 +A1F + 8 +0 + 62 + 0 + 10 +15237.499942 + 20 +22175.429118 + 30 +0.0 + 11 +15226.200688 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A20 + 8 +0 + 62 + 0 + 10 +15274.999942 + 20 +22153.778483 + 30 +0.0 + 11 +15262.499942 + 21 +22175.429118 + 31 +0.0 + 0 +LINE + 5 +A21 + 8 +0 + 62 + 0 + 10 +15312.499942 + 20 +22132.127848 + 30 +0.0 + 11 +15299.999942 + 21 +22153.778483 + 31 +0.0 + 0 +LINE + 5 +A22 + 8 +0 + 62 + 0 + 10 +15347.388709 + 20 +22115.0 + 30 +0.0 + 11 +15337.499942 + 21 +22132.127848 + 31 +0.0 + 0 +LINE + 5 +A23 + 8 +0 + 62 + 0 + 10 +15312.499942 + 20 +22175.429118 + 30 +0.0 + 11 +15301.200688 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A24 + 8 +0 + 62 + 0 + 10 +15349.999942 + 20 +22153.778483 + 30 +0.0 + 11 +15337.499942 + 21 +22175.429118 + 31 +0.0 + 0 +LINE + 5 +A25 + 8 +0 + 62 + 0 + 10 +15387.499942 + 20 +22132.127848 + 30 +0.0 + 11 +15374.999942 + 21 +22153.778483 + 31 +0.0 + 0 +LINE + 5 +A26 + 8 +0 + 62 + 0 + 10 +15422.388709 + 20 +22115.0 + 30 +0.0 + 11 +15412.499941 + 21 +22132.127848 + 31 +0.0 + 0 +LINE + 5 +A27 + 8 +0 + 62 + 0 + 10 +15387.499941 + 20 +22175.429118 + 30 +0.0 + 11 +15376.200687 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A28 + 8 +0 + 62 + 0 + 10 +15424.999941 + 20 +22153.778483 + 30 +0.0 + 11 +15412.499941 + 21 +22175.429118 + 31 +0.0 + 0 +LINE + 5 +A29 + 8 +0 + 62 + 0 + 10 +15462.499941 + 20 +22132.127847 + 30 +0.0 + 11 +15449.999941 + 21 +22153.778483 + 31 +0.0 + 0 +LINE + 5 +A2A + 8 +0 + 62 + 0 + 10 +15497.388709 + 20 +22115.0 + 30 +0.0 + 11 +15487.499941 + 21 +22132.127847 + 31 +0.0 + 0 +LINE + 5 +A2B + 8 +0 + 62 + 0 + 10 +15462.499941 + 20 +22175.429118 + 30 +0.0 + 11 +15451.200687 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A2C + 8 +0 + 62 + 0 + 10 +15499.999941 + 20 +22153.778482 + 30 +0.0 + 11 +15487.499941 + 21 +22175.429118 + 31 +0.0 + 0 +LINE + 5 +A2D + 8 +0 + 62 + 0 + 10 +15537.499941 + 20 +22132.127847 + 30 +0.0 + 11 +15524.999941 + 21 +22153.778482 + 31 +0.0 + 0 +LINE + 5 +A2E + 8 +0 + 62 + 0 + 10 +15572.388708 + 20 +22115.0 + 30 +0.0 + 11 +15562.499941 + 21 +22132.127847 + 31 +0.0 + 0 +LINE + 5 +A2F + 8 +0 + 62 + 0 + 10 +15537.499941 + 20 +22175.429117 + 30 +0.0 + 11 +15526.200687 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A30 + 8 +0 + 62 + 0 + 10 +15574.999941 + 20 +22153.778482 + 30 +0.0 + 11 +15562.499941 + 21 +22175.429117 + 31 +0.0 + 0 +LINE + 5 +A31 + 8 +0 + 62 + 0 + 10 +15612.499941 + 20 +22132.127847 + 30 +0.0 + 11 +15599.999941 + 21 +22153.778482 + 31 +0.0 + 0 +LINE + 5 +A32 + 8 +0 + 62 + 0 + 10 +15647.388708 + 20 +22115.0 + 30 +0.0 + 11 +15637.499941 + 21 +22132.127847 + 31 +0.0 + 0 +LINE + 5 +A33 + 8 +0 + 62 + 0 + 10 +15612.499941 + 20 +22175.429117 + 30 +0.0 + 11 +15601.200686 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A34 + 8 +0 + 62 + 0 + 10 +15649.999941 + 20 +22153.778482 + 30 +0.0 + 11 +15637.499941 + 21 +22175.429117 + 31 +0.0 + 0 +LINE + 5 +A35 + 8 +0 + 62 + 0 + 10 +15687.499941 + 20 +22132.127847 + 30 +0.0 + 11 +15674.999941 + 21 +22153.778482 + 31 +0.0 + 0 +LINE + 5 +A36 + 8 +0 + 62 + 0 + 10 +15722.388708 + 20 +22115.0 + 30 +0.0 + 11 +15712.499941 + 21 +22132.127847 + 31 +0.0 + 0 +LINE + 5 +A37 + 8 +0 + 62 + 0 + 10 +15687.499941 + 20 +22175.429117 + 30 +0.0 + 11 +15676.200686 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A38 + 8 +0 + 62 + 0 + 10 +15724.99994 + 20 +22153.778482 + 30 +0.0 + 11 +15712.49994 + 21 +22175.429117 + 31 +0.0 + 0 +LINE + 5 +A39 + 8 +0 + 62 + 0 + 10 +15762.49994 + 20 +22132.127847 + 30 +0.0 + 11 +15749.99994 + 21 +22153.778482 + 31 +0.0 + 0 +LINE + 5 +A3A + 8 +0 + 62 + 0 + 10 +15797.388707 + 20 +22115.0 + 30 +0.0 + 11 +15787.49994 + 21 +22132.127847 + 31 +0.0 + 0 +LINE + 5 +A3B + 8 +0 + 62 + 0 + 10 +15762.49994 + 20 +22175.429117 + 30 +0.0 + 11 +15751.200686 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A3C + 8 +0 + 62 + 0 + 10 +15799.99994 + 20 +22153.778482 + 30 +0.0 + 11 +15787.49994 + 21 +22175.429117 + 31 +0.0 + 0 +LINE + 5 +A3D + 8 +0 + 62 + 0 + 10 +15837.49994 + 20 +22132.127847 + 30 +0.0 + 11 +15824.99994 + 21 +22153.778482 + 31 +0.0 + 0 +LINE + 5 +A3E + 8 +0 + 62 + 0 + 10 +15872.388707 + 20 +22115.0 + 30 +0.0 + 11 +15862.49994 + 21 +22132.127847 + 31 +0.0 + 0 +LINE + 5 +A3F + 8 +0 + 62 + 0 + 10 +15837.49994 + 20 +22175.429117 + 30 +0.0 + 11 +15826.200685 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A40 + 8 +0 + 62 + 0 + 10 +15874.99994 + 20 +22153.778482 + 30 +0.0 + 11 +15862.49994 + 21 +22175.429117 + 31 +0.0 + 0 +LINE + 5 +A41 + 8 +0 + 62 + 0 + 10 +13537.499996 + 20 +22132.127883 + 30 +0.0 + 11 +13549.999996 + 21 +22153.778518 + 31 +0.0 + 0 +LINE + 5 +A42 + 8 +0 + 62 + 0 + 10 +13502.611208 + 20 +22115.0 + 30 +0.0 + 11 +13512.499996 + 21 +22132.127883 + 31 +0.0 + 0 +LINE + 5 +A43 + 8 +0 + 62 + 0 + 10 +13537.499996 + 20 +22175.429154 + 30 +0.0 + 11 +13548.79923 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A44 + 8 +0 + 62 + 0 + 10 +13499.999997 + 20 +22153.778518 + 30 +0.0 + 11 +13512.499997 + 21 +22175.429153 + 31 +0.0 + 0 +LINE + 5 +A45 + 8 +0 + 62 + 0 + 10 +13462.499997 + 20 +22132.127883 + 30 +0.0 + 11 +13474.999997 + 21 +22153.778518 + 31 +0.0 + 0 +LINE + 5 +A46 + 8 +0 + 62 + 0 + 10 +13427.611209 + 20 +22115.0 + 30 +0.0 + 11 +13437.499997 + 21 +22132.127883 + 31 +0.0 + 0 +LINE + 5 +A47 + 8 +0 + 62 + 0 + 10 +13462.499997 + 20 +22175.429153 + 30 +0.0 + 11 +13473.79923 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A48 + 8 +0 + 62 + 0 + 10 +13424.999997 + 20 +22153.778518 + 30 +0.0 + 11 +13437.499997 + 21 +22175.429153 + 31 +0.0 + 0 +LINE + 5 +A49 + 8 +0 + 62 + 0 + 10 +13387.499997 + 20 +22132.127883 + 30 +0.0 + 11 +13399.999997 + 21 +22153.778518 + 31 +0.0 + 0 +LINE + 5 +A4A + 8 +0 + 62 + 0 + 10 +13352.611209 + 20 +22115.0 + 30 +0.0 + 11 +13362.499997 + 21 +22132.127883 + 31 +0.0 + 0 +LINE + 5 +A4B + 8 +0 + 62 + 0 + 10 +13387.499997 + 20 +22175.429153 + 30 +0.0 + 11 +13398.799231 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A4C + 8 +0 + 62 + 0 + 10 +13349.999997 + 20 +22153.778518 + 30 +0.0 + 11 +13362.499997 + 21 +22175.429153 + 31 +0.0 + 0 +LINE + 5 +A4D + 8 +0 + 62 + 0 + 10 +13312.499997 + 20 +22132.127883 + 30 +0.0 + 11 +13324.999997 + 21 +22153.778518 + 31 +0.0 + 0 +LINE + 5 +A4E + 8 +0 + 62 + 0 + 10 +13277.611209 + 20 +22115.0 + 30 +0.0 + 11 +13287.499997 + 21 +22132.127883 + 31 +0.0 + 0 +LINE + 5 +A4F + 8 +0 + 62 + 0 + 10 +13312.499997 + 20 +22175.429153 + 30 +0.0 + 11 +13323.799231 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A50 + 8 +0 + 62 + 0 + 10 +13274.999997 + 20 +22153.778518 + 30 +0.0 + 11 +13287.499997 + 21 +22175.429153 + 31 +0.0 + 0 +LINE + 5 +A51 + 8 +0 + 62 + 0 + 10 +13237.499997 + 20 +22132.127883 + 30 +0.0 + 11 +13249.999997 + 21 +22153.778518 + 31 +0.0 + 0 +LINE + 5 +A52 + 8 +0 + 62 + 0 + 10 +13202.61121 + 20 +22115.0 + 30 +0.0 + 11 +13212.499997 + 21 +22132.127883 + 31 +0.0 + 0 +LINE + 5 +A53 + 8 +0 + 62 + 0 + 10 +13237.499997 + 20 +22175.429153 + 30 +0.0 + 11 +13248.799231 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A54 + 8 +0 + 62 + 0 + 10 +13199.999998 + 20 +22153.778518 + 30 +0.0 + 11 +13212.499998 + 21 +22175.429153 + 31 +0.0 + 0 +LINE + 5 +A55 + 8 +0 + 62 + 0 + 10 +13162.499998 + 20 +22132.127883 + 30 +0.0 + 11 +13174.999998 + 21 +22153.778518 + 31 +0.0 + 0 +LINE + 5 +A56 + 8 +0 + 62 + 0 + 10 +13127.61121 + 20 +22115.0 + 30 +0.0 + 11 +13137.499998 + 21 +22132.127883 + 31 +0.0 + 0 +LINE + 5 +A57 + 8 +0 + 62 + 0 + 10 +13162.499998 + 20 +22175.429153 + 30 +0.0 + 11 +13173.799232 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A58 + 8 +0 + 62 + 0 + 10 +13124.999998 + 20 +22153.778518 + 30 +0.0 + 11 +13137.499998 + 21 +22175.429153 + 31 +0.0 + 0 +LINE + 5 +A59 + 8 +0 + 62 + 0 + 10 +13087.499998 + 20 +22132.127883 + 30 +0.0 + 11 +13099.999998 + 21 +22153.778518 + 31 +0.0 + 0 +LINE + 5 +A5A + 8 +0 + 62 + 0 + 10 +13052.61121 + 20 +22115.0 + 30 +0.0 + 11 +13062.499998 + 21 +22132.127882 + 31 +0.0 + 0 +LINE + 5 +A5B + 8 +0 + 62 + 0 + 10 +13087.499998 + 20 +22175.429153 + 30 +0.0 + 11 +13098.799232 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A5C + 8 +0 + 62 + 0 + 10 +13049.999998 + 20 +22153.778518 + 30 +0.0 + 11 +13062.499998 + 21 +22175.429153 + 31 +0.0 + 0 +LINE + 5 +A5D + 8 +0 + 62 + 0 + 10 +13012.499998 + 20 +22132.127882 + 30 +0.0 + 11 +13024.999998 + 21 +22153.778517 + 31 +0.0 + 0 +LINE + 5 +A5E + 8 +0 + 62 + 0 + 10 +12977.611211 + 20 +22115.0 + 30 +0.0 + 11 +12987.499998 + 21 +22132.127882 + 31 +0.0 + 0 +LINE + 5 +A5F + 8 +0 + 62 + 0 + 10 +13012.499998 + 20 +22175.429153 + 30 +0.0 + 11 +13023.799232 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A60 + 8 +0 + 62 + 0 + 10 +12974.999998 + 20 +22153.778517 + 30 +0.0 + 11 +12987.499998 + 21 +22175.429152 + 31 +0.0 + 0 +LINE + 5 +A61 + 8 +0 + 62 + 0 + 10 +12937.499998 + 20 +22132.127882 + 30 +0.0 + 11 +12949.999998 + 21 +22153.778517 + 31 +0.0 + 0 +LINE + 5 +A62 + 8 +0 + 62 + 0 + 10 +12902.611211 + 20 +22115.0 + 30 +0.0 + 11 +12912.499998 + 21 +22132.127882 + 31 +0.0 + 0 +LINE + 5 +A63 + 8 +0 + 62 + 0 + 10 +12937.499998 + 20 +22175.429152 + 30 +0.0 + 11 +12948.799233 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A64 + 8 +0 + 62 + 0 + 10 +12899.999999 + 20 +22153.778517 + 30 +0.0 + 11 +12912.499999 + 21 +22175.429152 + 31 +0.0 + 0 +LINE + 5 +A65 + 8 +0 + 62 + 0 + 10 +12862.499999 + 20 +22132.127882 + 30 +0.0 + 11 +12874.999999 + 21 +22153.778517 + 31 +0.0 + 0 +LINE + 5 +A66 + 8 +0 + 62 + 0 + 10 +12827.611211 + 20 +22115.0 + 30 +0.0 + 11 +12837.499999 + 21 +22132.127882 + 31 +0.0 + 0 +LINE + 5 +A67 + 8 +0 + 62 + 0 + 10 +12862.499999 + 20 +22175.429152 + 30 +0.0 + 11 +12873.799233 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A68 + 8 +0 + 62 + 0 + 10 +12824.999999 + 20 +22153.778517 + 30 +0.0 + 11 +12837.499999 + 21 +22175.429152 + 31 +0.0 + 0 +LINE + 5 +A69 + 8 +0 + 62 + 0 + 10 +12787.499999 + 20 +22132.127882 + 30 +0.0 + 11 +12799.999999 + 21 +22153.778517 + 31 +0.0 + 0 +LINE + 5 +A6A + 8 +0 + 62 + 0 + 10 +12752.611212 + 20 +22115.0 + 30 +0.0 + 11 +12762.499999 + 21 +22132.127882 + 31 +0.0 + 0 +LINE + 5 +A6B + 8 +0 + 62 + 0 + 10 +12787.499999 + 20 +22175.429152 + 30 +0.0 + 11 +12798.799233 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A6C + 8 +0 + 62 + 0 + 10 +12749.999999 + 20 +22153.778517 + 30 +0.0 + 11 +12762.499999 + 21 +22175.429152 + 31 +0.0 + 0 +LINE + 5 +A6D + 8 +0 + 62 + 0 + 10 +12712.499999 + 20 +22132.127882 + 30 +0.0 + 11 +12724.999999 + 21 +22153.778517 + 31 +0.0 + 0 +LINE + 5 +A6E + 8 +0 + 62 + 0 + 10 +12677.611212 + 20 +22115.0 + 30 +0.0 + 11 +12687.499999 + 21 +22132.127882 + 31 +0.0 + 0 +LINE + 5 +A6F + 8 +0 + 62 + 0 + 10 +12712.499999 + 20 +22175.429152 + 30 +0.0 + 11 +12723.799234 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A70 + 8 +0 + 62 + 0 + 10 +12674.999999 + 20 +22153.778517 + 30 +0.0 + 11 +12687.499999 + 21 +22175.429152 + 31 +0.0 + 0 +LINE + 5 +A71 + 8 +0 + 62 + 0 + 10 +12637.499999 + 20 +22132.127882 + 30 +0.0 + 11 +12649.999999 + 21 +22153.778517 + 31 +0.0 + 0 +LINE + 5 +A72 + 8 +0 + 62 + 0 + 10 +12602.611212 + 20 +22115.0 + 30 +0.0 + 11 +12612.499999 + 21 +22132.127882 + 31 +0.0 + 0 +LINE + 5 +A73 + 8 +0 + 62 + 0 + 10 +12637.499999 + 20 +22175.429152 + 30 +0.0 + 11 +12648.799234 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A74 + 8 +0 + 62 + 0 + 10 +12600.0 + 20 +22153.778517 + 30 +0.0 + 11 +12612.5 + 21 +22175.429152 + 31 +0.0 + 0 +LINE + 5 +A75 + 8 +0 + 62 + 0 + 10 +12562.5 + 20 +22132.127882 + 30 +0.0 + 11 +12575.0 + 21 +22153.778517 + 31 +0.0 + 0 +LINE + 5 +A76 + 8 +0 + 62 + 0 + 10 +12527.611213 + 20 +22115.0 + 30 +0.0 + 11 +12537.5 + 21 +22132.127881 + 31 +0.0 + 0 +LINE + 5 +A77 + 8 +0 + 62 + 0 + 10 +12562.5 + 20 +22175.429152 + 30 +0.0 + 11 +12573.799234 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A78 + 8 +0 + 62 + 0 + 10 +12525.0 + 20 +22153.778517 + 30 +0.0 + 11 +12537.5 + 21 +22175.429152 + 31 +0.0 + 0 +LINE + 5 +A79 + 8 +0 + 62 + 0 + 10 +12487.5 + 20 +22132.127881 + 30 +0.0 + 11 +12500.0 + 21 +22153.778516 + 31 +0.0 + 0 +LINE + 5 +A7A + 8 +0 + 62 + 0 + 10 +12452.611213 + 20 +22115.0 + 30 +0.0 + 11 +12462.5 + 21 +22132.127881 + 31 +0.0 + 0 +LINE + 5 +A7B + 8 +0 + 62 + 0 + 10 +12487.5 + 20 +22175.429152 + 30 +0.0 + 11 +12498.799235 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A7C + 8 +0 + 62 + 0 + 10 +12450.0 + 20 +22153.778516 + 30 +0.0 + 11 +12462.5 + 21 +22175.429151 + 31 +0.0 + 0 +LINE + 5 +A7D + 8 +0 + 62 + 0 + 10 +12412.5 + 20 +22132.127881 + 30 +0.0 + 11 +12425.0 + 21 +22153.778516 + 31 +0.0 + 0 +LINE + 5 +A7E + 8 +0 + 62 + 0 + 10 +12377.611213 + 20 +22115.0 + 30 +0.0 + 11 +12387.5 + 21 +22132.127881 + 31 +0.0 + 0 +LINE + 5 +A7F + 8 +0 + 62 + 0 + 10 +12412.5 + 20 +22175.429151 + 30 +0.0 + 11 +12423.799235 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A80 + 8 +0 + 62 + 0 + 10 +12375.0 + 20 +22153.778516 + 30 +0.0 + 11 +12387.5 + 21 +22175.429151 + 31 +0.0 + 0 +LINE + 5 +A81 + 8 +0 + 62 + 0 + 10 +12337.5 + 20 +22132.127881 + 30 +0.0 + 11 +12350.0 + 21 +22153.778516 + 31 +0.0 + 0 +LINE + 5 +A82 + 8 +0 + 62 + 0 + 10 +12302.611214 + 20 +22115.0 + 30 +0.0 + 11 +12312.5 + 21 +22132.127881 + 31 +0.0 + 0 +LINE + 5 +A83 + 8 +0 + 62 + 0 + 10 +12337.5 + 20 +22175.429151 + 30 +0.0 + 11 +12348.799235 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A84 + 8 +0 + 62 + 0 + 10 +12300.0 + 20 +22153.778516 + 30 +0.0 + 11 +12312.5 + 21 +22175.429151 + 31 +0.0 + 0 +LINE + 5 +A85 + 8 +0 + 62 + 0 + 10 +12262.500001 + 20 +22132.127881 + 30 +0.0 + 11 +12275.000001 + 21 +22153.778516 + 31 +0.0 + 0 +LINE + 5 +A86 + 8 +0 + 62 + 0 + 10 +12227.611214 + 20 +22115.0 + 30 +0.0 + 11 +12237.500001 + 21 +22132.127881 + 31 +0.0 + 0 +LINE + 5 +A87 + 8 +0 + 62 + 0 + 10 +12262.500001 + 20 +22175.429151 + 30 +0.0 + 11 +12273.799236 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A88 + 8 +0 + 62 + 0 + 10 +12225.000001 + 20 +22153.778516 + 30 +0.0 + 11 +12237.500001 + 21 +22175.429151 + 31 +0.0 + 0 +LINE + 5 +A89 + 8 +0 + 62 + 0 + 10 +12187.500001 + 20 +22132.127881 + 30 +0.0 + 11 +12200.000001 + 21 +22153.778516 + 31 +0.0 + 0 +LINE + 5 +A8A + 8 +0 + 62 + 0 + 10 +12152.611214 + 20 +22115.0 + 30 +0.0 + 11 +12162.500001 + 21 +22132.127881 + 31 +0.0 + 0 +LINE + 5 +A8B + 8 +0 + 62 + 0 + 10 +12187.500001 + 20 +22175.429151 + 30 +0.0 + 11 +12198.799236 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A8C + 8 +0 + 62 + 0 + 10 +12150.000001 + 20 +22153.778516 + 30 +0.0 + 11 +12162.500001 + 21 +22175.429151 + 31 +0.0 + 0 +LINE + 5 +A8D + 8 +0 + 62 + 0 + 10 +12112.500001 + 20 +22132.127881 + 30 +0.0 + 11 +12125.000001 + 21 +22153.778516 + 31 +0.0 + 0 +LINE + 5 +A8E + 8 +0 + 62 + 0 + 10 +12077.611215 + 20 +22115.0 + 30 +0.0 + 11 +12087.500001 + 21 +22132.127881 + 31 +0.0 + 0 +LINE + 5 +A8F + 8 +0 + 62 + 0 + 10 +12112.500001 + 20 +22175.429151 + 30 +0.0 + 11 +12123.799236 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A90 + 8 +0 + 62 + 0 + 10 +12075.000001 + 20 +22153.778516 + 30 +0.0 + 11 +12087.500001 + 21 +22175.429151 + 31 +0.0 + 0 +LINE + 5 +A91 + 8 +0 + 62 + 0 + 10 +12037.500001 + 20 +22132.127881 + 30 +0.0 + 11 +12050.000001 + 21 +22153.778516 + 31 +0.0 + 0 +LINE + 5 +A92 + 8 +0 + 62 + 0 + 10 +12002.611215 + 20 +22115.0 + 30 +0.0 + 11 +12012.500001 + 21 +22132.12788 + 31 +0.0 + 0 +LINE + 5 +A93 + 8 +0 + 62 + 0 + 10 +12037.500001 + 20 +22175.429151 + 30 +0.0 + 11 +12048.799237 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A94 + 8 +0 + 62 + 0 + 10 +12000.000001 + 20 +22153.778516 + 30 +0.0 + 11 +12012.500001 + 21 +22175.429151 + 31 +0.0 + 0 +LINE + 5 +A95 + 8 +0 + 62 + 0 + 10 +11962.500002 + 20 +22132.12788 + 30 +0.0 + 11 +11975.000002 + 21 +22153.778515 + 31 +0.0 + 0 +LINE + 5 +A96 + 8 +0 + 62 + 0 + 10 +11927.611215 + 20 +22115.0 + 30 +0.0 + 11 +11937.500002 + 21 +22132.12788 + 31 +0.0 + 0 +LINE + 5 +A97 + 8 +0 + 62 + 0 + 10 +11962.500002 + 20 +22175.429151 + 30 +0.0 + 11 +11973.799237 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A98 + 8 +0 + 62 + 0 + 10 +11925.000002 + 20 +22153.778515 + 30 +0.0 + 11 +11937.500002 + 21 +22175.42915 + 31 +0.0 + 0 +LINE + 5 +A99 + 8 +0 + 62 + 0 + 10 +11887.500002 + 20 +22132.12788 + 30 +0.0 + 11 +11900.000002 + 21 +22153.778515 + 31 +0.0 + 0 +LINE + 5 +A9A + 8 +0 + 62 + 0 + 10 +11852.611216 + 20 +22115.0 + 30 +0.0 + 11 +11862.500002 + 21 +22132.12788 + 31 +0.0 + 0 +LINE + 5 +A9B + 8 +0 + 62 + 0 + 10 +11887.500002 + 20 +22175.42915 + 30 +0.0 + 11 +11898.799237 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A9C + 8 +0 + 62 + 0 + 10 +11850.000002 + 20 +22153.778515 + 30 +0.0 + 11 +11862.500002 + 21 +22175.42915 + 31 +0.0 + 0 +LINE + 5 +A9D + 8 +0 + 62 + 0 + 10 +11812.500002 + 20 +22132.12788 + 30 +0.0 + 11 +11825.000002 + 21 +22153.778515 + 31 +0.0 + 0 +LINE + 5 +A9E + 8 +0 + 62 + 0 + 10 +11777.611216 + 20 +22115.0 + 30 +0.0 + 11 +11787.500002 + 21 +22132.12788 + 31 +0.0 + 0 +LINE + 5 +A9F + 8 +0 + 62 + 0 + 10 +11812.500002 + 20 +22175.42915 + 30 +0.0 + 11 +11823.799238 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +AA0 + 8 +0 + 62 + 0 + 10 +11775.000002 + 20 +22153.778515 + 30 +0.0 + 11 +11787.500002 + 21 +22175.42915 + 31 +0.0 + 0 +LINE + 5 +AA1 + 8 +0 + 62 + 0 + 10 +11737.500002 + 20 +22132.12788 + 30 +0.0 + 11 +11750.000002 + 21 +22153.778515 + 31 +0.0 + 0 +LINE + 5 +AA2 + 8 +0 + 62 + 0 + 10 +11702.611216 + 20 +22115.0 + 30 +0.0 + 11 +11712.500002 + 21 +22132.12788 + 31 +0.0 + 0 +LINE + 5 +AA3 + 8 +0 + 62 + 0 + 10 +11737.500002 + 20 +22175.42915 + 30 +0.0 + 11 +11748.799238 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +AA4 + 8 +0 + 62 + 0 + 10 +11700.000002 + 20 +22153.778515 + 30 +0.0 + 11 +11712.500002 + 21 +22175.42915 + 31 +0.0 + 0 +LINE + 5 +AA5 + 8 +0 + 62 + 0 + 10 +11662.500003 + 20 +22132.12788 + 30 +0.0 + 11 +11675.000003 + 21 +22153.778515 + 31 +0.0 + 0 +LINE + 5 +AA6 + 8 +0 + 62 + 0 + 10 +11627.611217 + 20 +22115.0 + 30 +0.0 + 11 +11637.500003 + 21 +22132.12788 + 31 +0.0 + 0 +LINE + 5 +AA7 + 8 +0 + 62 + 0 + 10 +11662.500003 + 20 +22175.42915 + 30 +0.0 + 11 +11673.799238 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +AA8 + 8 +0 + 62 + 0 + 10 +11625.000003 + 20 +22153.778515 + 30 +0.0 + 11 +11637.500003 + 21 +22175.42915 + 31 +0.0 + 0 +LINE + 5 +AA9 + 8 +0 + 62 + 0 + 10 +11587.500003 + 20 +22132.12788 + 30 +0.0 + 11 +11600.000003 + 21 +22153.778515 + 31 +0.0 + 0 +LINE + 5 +AAA + 8 +0 + 62 + 0 + 10 +11552.611217 + 20 +22115.0 + 30 +0.0 + 11 +11562.500003 + 21 +22132.12788 + 31 +0.0 + 0 +LINE + 5 +AAB + 8 +0 + 62 + 0 + 10 +11587.500003 + 20 +22175.42915 + 30 +0.0 + 11 +11598.799238 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +AAC + 8 +0 + 62 + 0 + 10 +11550.000003 + 20 +22153.778515 + 30 +0.0 + 11 +11562.500003 + 21 +22175.42915 + 31 +0.0 + 0 +LINE + 5 +AAD + 8 +0 + 62 + 0 + 10 +11512.500003 + 20 +22132.12788 + 30 +0.0 + 11 +11525.000003 + 21 +22153.778515 + 31 +0.0 + 0 +LINE + 5 +AAE + 8 +0 + 62 + 0 + 10 +11477.611217 + 20 +22115.0 + 30 +0.0 + 11 +11487.500003 + 21 +22132.127879 + 31 +0.0 + 0 +LINE + 5 +AAF + 8 +0 + 62 + 0 + 10 +11512.500003 + 20 +22175.42915 + 30 +0.0 + 11 +11523.799239 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +AB0 + 8 +0 + 62 + 0 + 10 +11475.000003 + 20 +22153.778515 + 30 +0.0 + 11 +11487.500003 + 21 +22175.42915 + 31 +0.0 + 0 +LINE + 5 +AB1 + 8 +0 + 62 + 0 + 10 +11437.500003 + 20 +22132.127879 + 30 +0.0 + 11 +11450.000003 + 21 +22153.778514 + 31 +0.0 + 0 +LINE + 5 +AB2 + 8 +0 + 62 + 0 + 10 +11402.611218 + 20 +22115.0 + 30 +0.0 + 11 +11412.500003 + 21 +22132.127879 + 31 +0.0 + 0 +LINE + 5 +AB3 + 8 +0 + 62 + 0 + 10 +11437.500003 + 20 +22175.42915 + 30 +0.0 + 11 +11448.799239 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +AB4 + 8 +0 + 62 + 0 + 10 +11400.000003 + 20 +22153.778514 + 30 +0.0 + 11 +11412.500003 + 21 +22175.429149 + 31 +0.0 + 0 +LINE + 5 +AB5 + 8 +0 + 62 + 0 + 10 +11362.500004 + 20 +22132.127879 + 30 +0.0 + 11 +11375.000004 + 21 +22153.778514 + 31 +0.0 + 0 +LINE + 5 +AB6 + 8 +0 + 62 + 0 + 10 +11327.611218 + 20 +22115.0 + 30 +0.0 + 11 +11337.500004 + 21 +22132.127879 + 31 +0.0 + 0 +LINE + 5 +AB7 + 8 +0 + 62 + 0 + 10 +11362.500004 + 20 +22175.429149 + 30 +0.0 + 11 +11373.799239 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +AB8 + 8 +0 + 62 + 0 + 10 +11325.000004 + 20 +22153.778514 + 30 +0.0 + 11 +11337.500004 + 21 +22175.429149 + 31 +0.0 + 0 +LINE + 5 +AB9 + 8 +0 + 62 + 0 + 10 +11287.500004 + 20 +22132.127879 + 30 +0.0 + 11 +11300.000004 + 21 +22153.778514 + 31 +0.0 + 0 +LINE + 5 +ABA + 8 +0 + 62 + 0 + 10 +11252.611218 + 20 +22115.0 + 30 +0.0 + 11 +11262.500004 + 21 +22132.127879 + 31 +0.0 + 0 +LINE + 5 +ABB + 8 +0 + 62 + 0 + 10 +11287.500004 + 20 +22175.429149 + 30 +0.0 + 11 +11298.79924 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +ABC + 8 +0 + 62 + 0 + 10 +11250.000004 + 20 +22153.778514 + 30 +0.0 + 11 +11262.500004 + 21 +22175.429149 + 31 +0.0 + 0 +LINE + 5 +ABD + 8 +0 + 62 + 0 + 10 +13574.999996 + 20 +22153.778519 + 30 +0.0 + 11 +13587.499996 + 21 +22175.429154 + 31 +0.0 + 0 +LINE + 5 +ABE + 8 +0 + 62 + 0 + 10 +13577.611208 + 20 +22115.0 + 30 +0.0 + 11 +13587.499996 + 21 +22132.127883 + 31 +0.0 + 0 +LINE + 5 +ABF + 8 +0 + 62 + 0 + 10 +13612.499996 + 20 +22175.429154 + 30 +0.0 + 11 +13623.79923 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +AC0 + 8 +0 + 62 + 0 + 10 +13612.499996 + 20 +22132.127884 + 30 +0.0 + 11 +13624.999996 + 21 +22153.778519 + 31 +0.0 + 0 +LINE + 5 +AC1 + 8 +0 + 62 + 0 + 10 +13649.999996 + 20 +22153.778519 + 30 +0.0 + 11 +13662.499996 + 21 +22175.429154 + 31 +0.0 + 0 +LINE + 5 +AC2 + 8 +0 + 62 + 0 + 10 +13652.611208 + 20 +22115.0 + 30 +0.0 + 11 +13662.499996 + 21 +22132.127884 + 31 +0.0 + 0 +LINE + 5 +AC3 + 8 +0 + 62 + 0 + 10 +13687.499996 + 20 +22175.429154 + 30 +0.0 + 11 +13698.799229 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +AC4 + 8 +0 + 62 + 0 + 10 +13687.499996 + 20 +22132.127884 + 30 +0.0 + 11 +13699.999996 + 21 +22153.778519 + 31 +0.0 + 0 +LINE + 5 +AC5 + 8 +0 + 62 + 0 + 10 +13724.999996 + 20 +22153.778519 + 30 +0.0 + 11 +13737.499996 + 21 +22175.429154 + 31 +0.0 + 0 +LINE + 5 +AC6 + 8 +0 + 62 + 0 + 10 +13727.611207 + 20 +22115.0 + 30 +0.0 + 11 +13737.499996 + 21 +22132.127884 + 31 +0.0 + 0 +LINE + 5 +AC7 + 8 +0 + 62 + 0 + 10 +13762.499996 + 20 +22175.429154 + 30 +0.0 + 11 +13773.799229 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +AC8 + 8 +0 + 62 + 0 + 10 +13762.499996 + 20 +22132.127884 + 30 +0.0 + 11 +13774.999996 + 21 +22153.778519 + 31 +0.0 + 0 +LINE + 5 +AC9 + 8 +0 + 62 + 0 + 10 +13799.999996 + 20 +22153.778519 + 30 +0.0 + 11 +13812.499996 + 21 +22175.429154 + 31 +0.0 + 0 +LINE + 5 +ACA + 8 +0 + 62 + 0 + 10 +13802.611207 + 20 +22115.0 + 30 +0.0 + 11 +13812.499995 + 21 +22132.127884 + 31 +0.0 + 0 +LINE + 5 +ACB + 8 +0 + 62 + 0 + 10 +13837.499995 + 20 +22175.429154 + 30 +0.0 + 11 +13848.799229 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +ACC + 8 +0 + 62 + 0 + 10 +13837.499995 + 20 +22132.127884 + 30 +0.0 + 11 +13849.999995 + 21 +22153.778519 + 31 +0.0 + 0 +LINE + 5 +ACD + 8 +0 + 62 + 0 + 10 +13874.999995 + 20 +22153.778519 + 30 +0.0 + 11 +13887.499995 + 21 +22175.429154 + 31 +0.0 + 0 +LINE + 5 +ACE + 8 +0 + 62 + 0 + 10 +13877.611207 + 20 +22115.0 + 30 +0.0 + 11 +13887.499995 + 21 +22132.127884 + 31 +0.0 + 0 +LINE + 5 +ACF + 8 +0 + 62 + 0 + 10 +13912.499995 + 20 +22175.429154 + 30 +0.0 + 11 +13923.799228 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +AD0 + 8 +0 + 62 + 0 + 10 +13912.499995 + 20 +22132.127884 + 30 +0.0 + 11 +13924.999995 + 21 +22153.778519 + 31 +0.0 + 0 +LINE + 5 +AD1 + 8 +0 + 62 + 0 + 10 +13949.999995 + 20 +22153.778519 + 30 +0.0 + 11 +13962.499995 + 21 +22175.429154 + 31 +0.0 + 0 +LINE + 5 +AD2 + 8 +0 + 62 + 0 + 10 +13952.611206 + 20 +22115.0 + 30 +0.0 + 11 +13962.499995 + 21 +22132.127884 + 31 +0.0 + 0 +LINE + 5 +AD3 + 8 +0 + 62 + 0 + 10 +13987.499995 + 20 +22175.429154 + 30 +0.0 + 11 +13998.799228 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +AD4 + 8 +0 + 62 + 0 + 10 +13987.499995 + 20 +22132.127884 + 30 +0.0 + 11 +13999.999995 + 21 +22153.778519 + 31 +0.0 + 0 +LINE + 5 +AD5 + 8 +0 + 62 + 0 + 10 +14024.999995 + 20 +22153.778519 + 30 +0.0 + 11 +14037.499995 + 21 +22175.429154 + 31 +0.0 + 0 +LINE + 5 +AD6 + 8 +0 + 62 + 0 + 10 +14027.611206 + 20 +22115.0 + 30 +0.0 + 11 +14037.499995 + 21 +22132.127884 + 31 +0.0 + 0 +LINE + 5 +AD7 + 8 +0 + 62 + 0 + 10 +14062.499995 + 20 +22175.429155 + 30 +0.0 + 11 +14073.799228 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +AD8 + 8 +0 + 62 + 0 + 10 +14062.499995 + 20 +22132.127884 + 30 +0.0 + 11 +14074.999995 + 21 +22153.778519 + 31 +0.0 + 0 +LINE + 5 +AD9 + 8 +0 + 62 + 0 + 10 +14099.999995 + 20 +22153.77852 + 30 +0.0 + 11 +14112.499995 + 21 +22175.429155 + 31 +0.0 + 0 +LINE + 5 +ADA + 8 +0 + 62 + 0 + 10 +14102.611206 + 20 +22115.0 + 30 +0.0 + 11 +14112.499995 + 21 +22132.127884 + 31 +0.0 + 0 +LINE + 5 +ADB + 8 +0 + 62 + 0 + 10 +14137.499995 + 20 +22175.429155 + 30 +0.0 + 11 +14148.799227 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +ADC + 8 +0 + 62 + 0 + 10 +14137.499994 + 20 +22132.127885 + 30 +0.0 + 11 +14149.999994 + 21 +22153.77852 + 31 +0.0 + 0 +LINE + 5 +ADD + 8 +0 + 62 + 0 + 10 +14174.999994 + 20 +22153.77852 + 30 +0.0 + 11 +14187.499994 + 21 +22175.429155 + 31 +0.0 + 0 +LINE + 5 +ADE + 8 +0 + 62 + 0 + 10 +14177.611205 + 20 +22115.0 + 30 +0.0 + 11 +14187.499994 + 21 +22132.127885 + 31 +0.0 + 0 +LINE + 5 +ADF + 8 +0 + 62 + 0 + 10 +14212.499994 + 20 +22175.429155 + 30 +0.0 + 11 +14223.799227 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +AE0 + 8 +0 + 62 + 0 + 10 +14212.499994 + 20 +22132.127885 + 30 +0.0 + 11 +14224.999994 + 21 +22153.77852 + 31 +0.0 + 0 +LINE + 5 +AE1 + 8 +0 + 62 + 0 + 10 +14249.999994 + 20 +22153.77852 + 30 +0.0 + 11 +14262.499994 + 21 +22175.429155 + 31 +0.0 + 0 +LINE + 5 +AE2 + 8 +0 + 62 + 0 + 10 +14252.611205 + 20 +22115.0 + 30 +0.0 + 11 +14262.499994 + 21 +22132.127885 + 31 +0.0 + 0 +LINE + 5 +AE3 + 8 +0 + 62 + 0 + 10 +14287.499994 + 20 +22175.429155 + 30 +0.0 + 11 +14298.799227 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +AE4 + 8 +0 + 62 + 0 + 10 +14287.499994 + 20 +22132.127885 + 30 +0.0 + 11 +14299.999994 + 21 +22153.77852 + 31 +0.0 + 0 +LINE + 5 +AE5 + 8 +0 + 62 + 0 + 10 +14324.999994 + 20 +22153.77852 + 30 +0.0 + 11 +14337.499994 + 21 +22175.429155 + 31 +0.0 + 0 +LINE + 5 +AE6 + 8 +0 + 62 + 0 + 10 +14327.611205 + 20 +22115.0 + 30 +0.0 + 11 +14337.499994 + 21 +22132.127885 + 31 +0.0 + 0 +LINE + 5 +AE7 + 8 +0 + 62 + 0 + 10 +14362.499994 + 20 +22175.429155 + 30 +0.0 + 11 +14373.799226 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +AE8 + 8 +0 + 62 + 0 + 10 +14362.499994 + 20 +22132.127885 + 30 +0.0 + 11 +14374.999994 + 21 +22153.77852 + 31 +0.0 + 0 +LINE + 5 +AE9 + 8 +0 + 62 + 0 + 10 +14399.999994 + 20 +22153.77852 + 30 +0.0 + 11 +14412.499994 + 21 +22175.429155 + 31 +0.0 + 0 +LINE + 5 +AEA + 8 +0 + 62 + 0 + 10 +14402.611204 + 20 +22115.0 + 30 +0.0 + 11 +14412.499994 + 21 +22132.127885 + 31 +0.0 + 0 +LINE + 5 +AEB + 8 +0 + 62 + 0 + 10 +14437.499994 + 20 +22175.429155 + 30 +0.0 + 11 +14448.799226 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +AEC + 8 +0 + 62 + 0 + 10 +14437.499993 + 20 +22132.127885 + 30 +0.0 + 11 +14449.999993 + 21 +22153.77852 + 31 +0.0 + 0 +LINE + 5 +AED + 8 +0 + 62 + 0 + 10 +14474.999993 + 20 +22153.77852 + 30 +0.0 + 11 +14487.499993 + 21 +22175.429155 + 31 +0.0 + 0 +LINE + 5 +AEE + 8 +0 + 62 + 0 + 10 +14477.611204 + 20 +22115.0 + 30 +0.0 + 11 +14487.499993 + 21 +22132.127885 + 31 +0.0 + 0 +LINE + 5 +AEF + 8 +0 + 62 + 0 + 10 +14512.499993 + 20 +22175.429155 + 30 +0.0 + 11 +14523.799226 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +AF0 + 8 +0 + 62 + 0 + 10 +14512.499993 + 20 +22132.127885 + 30 +0.0 + 11 +14524.999993 + 21 +22153.77852 + 31 +0.0 + 0 +LINE + 5 +AF1 + 8 +0 + 62 + 0 + 10 +14549.999993 + 20 +22153.77852 + 30 +0.0 + 11 +14562.499993 + 21 +22175.429155 + 31 +0.0 + 0 +LINE + 5 +AF2 + 8 +0 + 62 + 0 + 10 +14552.611204 + 20 +22115.0 + 30 +0.0 + 11 +14562.499993 + 21 +22132.127885 + 31 +0.0 + 0 +LINE + 5 +AF3 + 8 +0 + 62 + 0 + 10 +14587.499993 + 20 +22175.429156 + 30 +0.0 + 11 +14598.799225 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +AF4 + 8 +0 + 62 + 0 + 10 +14587.499993 + 20 +22132.127885 + 30 +0.0 + 11 +14599.999993 + 21 +22153.77852 + 31 +0.0 + 0 +LINE + 5 +AF5 + 8 +0 + 62 + 0 + 10 +14624.999993 + 20 +22153.778521 + 30 +0.0 + 11 +14637.499993 + 21 +22175.429156 + 31 +0.0 + 0 +LINE + 5 +AF6 + 8 +0 + 62 + 0 + 10 +14627.611204 + 20 +22115.0 + 30 +0.0 + 11 +14637.499993 + 21 +22132.127885 + 31 +0.0 + 0 +LINE + 5 +AF7 + 8 +0 + 62 + 0 + 10 +14662.499993 + 20 +22175.429156 + 30 +0.0 + 11 +14673.799225 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +AF8 + 8 +0 + 62 + 0 + 10 +14662.499993 + 20 +22132.127886 + 30 +0.0 + 11 +14674.999993 + 21 +22153.778521 + 31 +0.0 + 0 +LINE + 5 +AF9 + 8 +0 + 62 + 0 + 10 +14699.999993 + 20 +22153.778521 + 30 +0.0 + 11 +14712.499993 + 21 +22175.429156 + 31 +0.0 + 0 +LINE + 5 +AFA + 8 +0 + 62 + 0 + 10 +14702.611203 + 20 +22115.0 + 30 +0.0 + 11 +14712.499993 + 21 +22132.127886 + 31 +0.0 + 0 +LINE + 5 +AFB + 8 +0 + 62 + 0 + 10 +14737.499993 + 20 +22175.429156 + 30 +0.0 + 11 +14748.799225 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +AFC + 8 +0 + 62 + 0 + 10 +14737.499992 + 20 +22132.127886 + 30 +0.0 + 11 +14749.999992 + 21 +22153.778521 + 31 +0.0 + 0 +LINE + 5 +AFD + 8 +0 + 62 + 0 + 10 +14774.999992 + 20 +22153.778521 + 30 +0.0 + 11 +14787.499992 + 21 +22175.429156 + 31 +0.0 + 0 +LINE + 5 +AFE + 8 +0 + 62 + 0 + 10 +14777.611203 + 20 +22115.0 + 30 +0.0 + 11 +14787.499992 + 21 +22132.127886 + 31 +0.0 + 0 +LINE + 5 +AFF + 8 +0 + 62 + 0 + 10 +14812.499992 + 20 +22175.429156 + 30 +0.0 + 11 +14823.799224 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +B00 + 8 +0 + 62 + 0 + 10 +14812.499992 + 20 +22132.127886 + 30 +0.0 + 11 +14824.999992 + 21 +22153.778521 + 31 +0.0 + 0 +LINE + 5 +B01 + 8 +0 + 62 + 0 + 10 +14849.999992 + 20 +22153.778521 + 30 +0.0 + 11 +14862.499992 + 21 +22175.429156 + 31 +0.0 + 0 +LINE + 5 +B02 + 8 +0 + 62 + 0 + 10 +14852.611203 + 20 +22115.0 + 30 +0.0 + 11 +14862.499992 + 21 +22132.127886 + 31 +0.0 + 0 +LINE + 5 +B03 + 8 +0 + 62 + 0 + 10 +14887.499992 + 20 +22175.429156 + 30 +0.0 + 11 +14898.799224 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +B04 + 8 +0 + 62 + 0 + 10 +14887.499992 + 20 +22132.127886 + 30 +0.0 + 11 +14899.999992 + 21 +22153.778521 + 31 +0.0 + 0 +LINE + 5 +B05 + 8 +0 + 62 + 0 + 10 +14924.999992 + 20 +22153.778521 + 30 +0.0 + 11 +14937.499992 + 21 +22175.429156 + 31 +0.0 + 0 +LINE + 5 +B06 + 8 +0 + 62 + 0 + 10 +14927.611202 + 20 +22115.0 + 30 +0.0 + 11 +14937.499992 + 21 +22132.127886 + 31 +0.0 + 0 +LINE + 5 +B07 + 8 +0 + 62 + 0 + 10 +14962.499992 + 20 +22175.429156 + 30 +0.0 + 11 +14973.799224 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +B08 + 8 +0 + 62 + 0 + 10 +14962.499992 + 20 +22132.127886 + 30 +0.0 + 11 +14974.999992 + 21 +22153.778521 + 31 +0.0 + 0 +LINE + 5 +B09 + 8 +0 + 62 + 0 + 10 +14999.999992 + 20 +22153.778521 + 30 +0.0 + 11 +15012.499992 + 21 +22175.429156 + 31 +0.0 + 0 +LINE + 5 +B0A + 8 +0 + 62 + 0 + 10 +15002.611202 + 20 +22115.0 + 30 +0.0 + 11 +15012.499992 + 21 +22132.127886 + 31 +0.0 + 0 +LINE + 5 +B0B + 8 +0 + 62 + 0 + 10 +15037.499992 + 20 +22175.429156 + 30 +0.0 + 11 +15048.799223 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +B0C + 8 +0 + 62 + 0 + 10 +15037.499991 + 20 +22132.127886 + 30 +0.0 + 11 +15049.999991 + 21 +22153.778521 + 31 +0.0 + 0 +LINE + 5 +B0D + 8 +0 + 62 + 0 + 10 +15074.999991 + 20 +22153.778521 + 30 +0.0 + 11 +15087.499991 + 21 +22175.429156 + 31 +0.0 + 0 +LINE + 5 +B0E + 8 +0 + 62 + 0 + 10 +15077.611202 + 20 +22115.0 + 30 +0.0 + 11 +15087.499991 + 21 +22132.127886 + 31 +0.0 + 0 +LINE + 5 +B0F + 8 +0 + 62 + 0 + 10 +15112.499991 + 20 +22175.429156 + 30 +0.0 + 11 +15123.799223 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +B10 + 8 +0 + 62 + 0 + 10 +15112.499991 + 20 +22132.127886 + 30 +0.0 + 11 +15124.999991 + 21 +22153.778521 + 31 +0.0 + 0 +LINE + 5 +B11 + 8 +0 + 62 + 0 + 10 +15149.999991 + 20 +22153.778521 + 30 +0.0 + 11 +15162.499991 + 21 +22175.429157 + 31 +0.0 + 0 +LINE + 5 +B12 + 8 +0 + 62 + 0 + 10 +15152.611201 + 20 +22115.0 + 30 +0.0 + 11 +15162.499991 + 21 +22132.127886 + 31 +0.0 + 0 +LINE + 5 +B13 + 8 +0 + 62 + 0 + 10 +15187.499991 + 20 +22175.429157 + 30 +0.0 + 11 +15198.799223 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +B14 + 8 +0 + 62 + 0 + 10 +15187.499991 + 20 +22132.127886 + 30 +0.0 + 11 +15199.999991 + 21 +22153.778522 + 31 +0.0 + 0 +LINE + 5 +B15 + 8 +0 + 62 + 0 + 10 +15224.999991 + 20 +22153.778522 + 30 +0.0 + 11 +15237.499991 + 21 +22175.429157 + 31 +0.0 + 0 +LINE + 5 +B16 + 8 +0 + 62 + 0 + 10 +15227.611201 + 20 +22115.0 + 30 +0.0 + 11 +15237.499991 + 21 +22132.127887 + 31 +0.0 + 0 +LINE + 5 +B17 + 8 +0 + 62 + 0 + 10 +15262.499991 + 20 +22175.429157 + 30 +0.0 + 11 +15273.799222 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +B18 + 8 +0 + 62 + 0 + 10 +15262.499991 + 20 +22132.127887 + 30 +0.0 + 11 +15274.999991 + 21 +22153.778522 + 31 +0.0 + 0 +LINE + 5 +B19 + 8 +0 + 62 + 0 + 10 +15299.999991 + 20 +22153.778522 + 30 +0.0 + 11 +15312.499991 + 21 +22175.429157 + 31 +0.0 + 0 +LINE + 5 +B1A + 8 +0 + 62 + 0 + 10 +15302.611201 + 20 +22115.0 + 30 +0.0 + 11 +15312.499991 + 21 +22132.127887 + 31 +0.0 + 0 +LINE + 5 +B1B + 8 +0 + 62 + 0 + 10 +15337.499991 + 20 +22175.429157 + 30 +0.0 + 11 +15348.799222 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +B1C + 8 +0 + 62 + 0 + 10 +15337.49999 + 20 +22132.127887 + 30 +0.0 + 11 +15349.99999 + 21 +22153.778522 + 31 +0.0 + 0 +LINE + 5 +B1D + 8 +0 + 62 + 0 + 10 +15374.99999 + 20 +22153.778522 + 30 +0.0 + 11 +15387.49999 + 21 +22175.429157 + 31 +0.0 + 0 +LINE + 5 +B1E + 8 +0 + 62 + 0 + 10 +15377.6112 + 20 +22115.0 + 30 +0.0 + 11 +15387.49999 + 21 +22132.127887 + 31 +0.0 + 0 +LINE + 5 +B1F + 8 +0 + 62 + 0 + 10 +15412.49999 + 20 +22175.429157 + 30 +0.0 + 11 +15423.799222 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +B20 + 8 +0 + 62 + 0 + 10 +15412.49999 + 20 +22132.127887 + 30 +0.0 + 11 +15424.99999 + 21 +22153.778522 + 31 +0.0 + 0 +LINE + 5 +B21 + 8 +0 + 62 + 0 + 10 +15449.99999 + 20 +22153.778522 + 30 +0.0 + 11 +15462.49999 + 21 +22175.429157 + 31 +0.0 + 0 +LINE + 5 +B22 + 8 +0 + 62 + 0 + 10 +15452.6112 + 20 +22115.0 + 30 +0.0 + 11 +15462.49999 + 21 +22132.127887 + 31 +0.0 + 0 +LINE + 5 +B23 + 8 +0 + 62 + 0 + 10 +15487.49999 + 20 +22175.429157 + 30 +0.0 + 11 +15498.799221 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +B24 + 8 +0 + 62 + 0 + 10 +15487.49999 + 20 +22132.127887 + 30 +0.0 + 11 +15499.99999 + 21 +22153.778522 + 31 +0.0 + 0 +LINE + 5 +B25 + 8 +0 + 62 + 0 + 10 +15524.99999 + 20 +22153.778522 + 30 +0.0 + 11 +15537.49999 + 21 +22175.429157 + 31 +0.0 + 0 +LINE + 5 +B26 + 8 +0 + 62 + 0 + 10 +15527.6112 + 20 +22115.0 + 30 +0.0 + 11 +15537.49999 + 21 +22132.127887 + 31 +0.0 + 0 +LINE + 5 +B27 + 8 +0 + 62 + 0 + 10 +15562.49999 + 20 +22175.429157 + 30 +0.0 + 11 +15573.799221 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +B28 + 8 +0 + 62 + 0 + 10 +15562.49999 + 20 +22132.127887 + 30 +0.0 + 11 +15574.99999 + 21 +22153.778522 + 31 +0.0 + 0 +LINE + 5 +B29 + 8 +0 + 62 + 0 + 10 +15599.99999 + 20 +22153.778522 + 30 +0.0 + 11 +15612.49999 + 21 +22175.429157 + 31 +0.0 + 0 +LINE + 5 +B2A + 8 +0 + 62 + 0 + 10 +15602.611199 + 20 +22115.0 + 30 +0.0 + 11 +15612.49999 + 21 +22132.127887 + 31 +0.0 + 0 +LINE + 5 +B2B + 8 +0 + 62 + 0 + 10 +15637.49999 + 20 +22175.429157 + 30 +0.0 + 11 +15648.799221 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +B2C + 8 +0 + 62 + 0 + 10 +15637.49999 + 20 +22132.127887 + 30 +0.0 + 11 +15649.99999 + 21 +22153.778522 + 31 +0.0 + 0 +LINE + 5 +B2D + 8 +0 + 62 + 0 + 10 +15674.999989 + 20 +22153.778522 + 30 +0.0 + 11 +15687.499989 + 21 +22175.429158 + 31 +0.0 + 0 +LINE + 5 +B2E + 8 +0 + 62 + 0 + 10 +15677.611199 + 20 +22115.0 + 30 +0.0 + 11 +15687.499989 + 21 +22132.127887 + 31 +0.0 + 0 +LINE + 5 +B2F + 8 +0 + 62 + 0 + 10 +15712.499989 + 20 +22175.429158 + 30 +0.0 + 11 +15723.79922 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +B30 + 8 +0 + 62 + 0 + 10 +15712.499989 + 20 +22132.127887 + 30 +0.0 + 11 +15724.999989 + 21 +22153.778523 + 31 +0.0 + 0 +LINE + 5 +B31 + 8 +0 + 62 + 0 + 10 +15749.999989 + 20 +22153.778523 + 30 +0.0 + 11 +15762.499989 + 21 +22175.429158 + 31 +0.0 + 0 +LINE + 5 +B32 + 8 +0 + 62 + 0 + 10 +15752.611199 + 20 +22115.0 + 30 +0.0 + 11 +15762.499989 + 21 +22132.127888 + 31 +0.0 + 0 +LINE + 5 +B33 + 8 +0 + 62 + 0 + 10 +15787.499989 + 20 +22175.429158 + 30 +0.0 + 11 +15798.79922 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +B34 + 8 +0 + 62 + 0 + 10 +15787.499989 + 20 +22132.127888 + 30 +0.0 + 11 +15799.999989 + 21 +22153.778523 + 31 +0.0 + 0 +LINE + 5 +B35 + 8 +0 + 62 + 0 + 10 +15824.999989 + 20 +22153.778523 + 30 +0.0 + 11 +15837.499989 + 21 +22175.429158 + 31 +0.0 + 0 +LINE + 5 +B36 + 8 +0 + 62 + 0 + 10 +15827.611198 + 20 +22115.0 + 30 +0.0 + 11 +15837.499989 + 21 +22132.127888 + 31 +0.0 + 0 +LINE + 5 +B37 + 8 +0 + 62 + 0 + 10 +15862.499989 + 20 +22175.429158 + 30 +0.0 + 11 +15873.79922 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +B38 + 8 +0 + 62 + 0 + 10 +15862.499989 + 20 +22132.127888 + 30 +0.0 + 11 +15874.999989 + 21 +22153.778523 + 31 +0.0 + 0 +ENDBLK + 5 +B39 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X42 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X42 + 1 + + 0 +LINE + 5 +B3B + 8 +0 + 62 + 0 + 10 +16863.75 + 20 +22153.77846 + 30 +0.0 + 11 +16875.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +B3C + 8 +0 + 62 + 0 + 10 +16925.0 + 20 +22153.77846 + 30 +0.0 + 11 +16950.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +B3D + 8 +0 + 62 + 0 + 10 +17000.0 + 20 +22153.77846 + 30 +0.0 + 11 +17025.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +B3E + 8 +0 + 62 + 0 + 10 +17075.0 + 20 +22153.77846 + 30 +0.0 + 11 +17100.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +B3F + 8 +0 + 62 + 0 + 10 +17150.0 + 20 +22153.77846 + 30 +0.0 + 11 +17175.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +B40 + 8 +0 + 62 + 0 + 10 +17225.0 + 20 +22153.77846 + 30 +0.0 + 11 +17250.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +B41 + 8 +0 + 62 + 0 + 10 +17300.0 + 20 +22153.77846 + 30 +0.0 + 11 +17325.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +B42 + 8 +0 + 62 + 0 + 10 +17375.0 + 20 +22153.77846 + 30 +0.0 + 11 +17400.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +B43 + 8 +0 + 62 + 0 + 10 +17450.0 + 20 +22153.77846 + 30 +0.0 + 11 +17475.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +B44 + 8 +0 + 62 + 0 + 10 +17525.0 + 20 +22153.77846 + 30 +0.0 + 11 +17550.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +B45 + 8 +0 + 62 + 0 + 10 +17600.0 + 20 +22153.77846 + 30 +0.0 + 11 +17625.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +B46 + 8 +0 + 62 + 0 + 10 +17675.0 + 20 +22153.77846 + 30 +0.0 + 11 +17700.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +B47 + 8 +0 + 62 + 0 + 10 +17750.0 + 20 +22153.77846 + 30 +0.0 + 11 +17775.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +B48 + 8 +0 + 62 + 0 + 10 +17825.0 + 20 +22153.77846 + 30 +0.0 + 11 +17850.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +B49 + 8 +0 + 62 + 0 + 10 +17900.0 + 20 +22153.77846 + 30 +0.0 + 11 +17925.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +B4A + 8 +0 + 62 + 0 + 10 +17975.0 + 20 +22153.77846 + 30 +0.0 + 11 +18000.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +B4B + 8 +0 + 62 + 0 + 10 +18050.0 + 20 +22153.77846 + 30 +0.0 + 11 +18075.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +B4C + 8 +0 + 62 + 0 + 10 +18125.0 + 20 +22153.77846 + 30 +0.0 + 11 +18150.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +B4D + 8 +0 + 62 + 0 + 10 +18200.0 + 20 +22153.77846 + 30 +0.0 + 11 +18225.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +B4E + 8 +0 + 62 + 0 + 10 +18275.0 + 20 +22153.77846 + 30 +0.0 + 11 +18300.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +B4F + 8 +0 + 62 + 0 + 10 +18350.0 + 20 +22153.77846 + 30 +0.0 + 11 +18375.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +B50 + 8 +0 + 62 + 0 + 10 +18425.0 + 20 +22153.77846 + 30 +0.0 + 11 +18450.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +B51 + 8 +0 + 62 + 0 + 10 +18500.0 + 20 +22153.77846 + 30 +0.0 + 11 +18525.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +B52 + 8 +0 + 62 + 0 + 10 +18575.0 + 20 +22153.77846 + 30 +0.0 + 11 +18600.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +B53 + 8 +0 + 62 + 0 + 10 +18650.0 + 20 +22153.77846 + 30 +0.0 + 11 +18675.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +B54 + 8 +0 + 62 + 0 + 10 +18725.0 + 20 +22153.77846 + 30 +0.0 + 11 +18750.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +B55 + 8 +0 + 62 + 0 + 10 +16887.5 + 20 +22175.429095 + 30 +0.0 + 11 +16912.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +B56 + 8 +0 + 62 + 0 + 10 +16962.5 + 20 +22175.429095 + 30 +0.0 + 11 +16987.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +B57 + 8 +0 + 62 + 0 + 10 +17037.5 + 20 +22175.429095 + 30 +0.0 + 11 +17062.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +B58 + 8 +0 + 62 + 0 + 10 +17112.5 + 20 +22175.429095 + 30 +0.0 + 11 +17137.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +B59 + 8 +0 + 62 + 0 + 10 +17187.5 + 20 +22175.429095 + 30 +0.0 + 11 +17212.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +B5A + 8 +0 + 62 + 0 + 10 +17262.5 + 20 +22175.429095 + 30 +0.0 + 11 +17287.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +B5B + 8 +0 + 62 + 0 + 10 +17337.5 + 20 +22175.429095 + 30 +0.0 + 11 +17362.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +B5C + 8 +0 + 62 + 0 + 10 +17412.5 + 20 +22175.429095 + 30 +0.0 + 11 +17437.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +B5D + 8 +0 + 62 + 0 + 10 +17487.5 + 20 +22175.429095 + 30 +0.0 + 11 +17512.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +B5E + 8 +0 + 62 + 0 + 10 +17562.5 + 20 +22175.429095 + 30 +0.0 + 11 +17587.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +B5F + 8 +0 + 62 + 0 + 10 +17637.5 + 20 +22175.429095 + 30 +0.0 + 11 +17662.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +B60 + 8 +0 + 62 + 0 + 10 +17712.5 + 20 +22175.429095 + 30 +0.0 + 11 +17737.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +B61 + 8 +0 + 62 + 0 + 10 +17787.5 + 20 +22175.429095 + 30 +0.0 + 11 +17812.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +B62 + 8 +0 + 62 + 0 + 10 +17862.5 + 20 +22175.429095 + 30 +0.0 + 11 +17887.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +B63 + 8 +0 + 62 + 0 + 10 +17937.5 + 20 +22175.429095 + 30 +0.0 + 11 +17962.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +B64 + 8 +0 + 62 + 0 + 10 +18012.5 + 20 +22175.429095 + 30 +0.0 + 11 +18037.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +B65 + 8 +0 + 62 + 0 + 10 +18087.5 + 20 +22175.429095 + 30 +0.0 + 11 +18112.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +B66 + 8 +0 + 62 + 0 + 10 +18162.5 + 20 +22175.429095 + 30 +0.0 + 11 +18187.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +B67 + 8 +0 + 62 + 0 + 10 +18237.5 + 20 +22175.429095 + 30 +0.0 + 11 +18262.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +B68 + 8 +0 + 62 + 0 + 10 +18312.5 + 20 +22175.429095 + 30 +0.0 + 11 +18337.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +B69 + 8 +0 + 62 + 0 + 10 +18387.5 + 20 +22175.429095 + 30 +0.0 + 11 +18412.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +B6A + 8 +0 + 62 + 0 + 10 +18462.5 + 20 +22175.429095 + 30 +0.0 + 11 +18487.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +B6B + 8 +0 + 62 + 0 + 10 +18537.5 + 20 +22175.429095 + 30 +0.0 + 11 +18562.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +B6C + 8 +0 + 62 + 0 + 10 +18612.5 + 20 +22175.429095 + 30 +0.0 + 11 +18637.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +B6D + 8 +0 + 62 + 0 + 10 +18687.5 + 20 +22175.429095 + 30 +0.0 + 11 +18712.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +B6E + 8 +0 + 62 + 0 + 10 +16887.5 + 20 +22132.127825 + 30 +0.0 + 11 +16912.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +B6F + 8 +0 + 62 + 0 + 10 +16962.5 + 20 +22132.127825 + 30 +0.0 + 11 +16987.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +B70 + 8 +0 + 62 + 0 + 10 +17037.5 + 20 +22132.127825 + 30 +0.0 + 11 +17062.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +B71 + 8 +0 + 62 + 0 + 10 +17112.5 + 20 +22132.127825 + 30 +0.0 + 11 +17137.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +B72 + 8 +0 + 62 + 0 + 10 +17187.5 + 20 +22132.127825 + 30 +0.0 + 11 +17212.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +B73 + 8 +0 + 62 + 0 + 10 +17262.5 + 20 +22132.127825 + 30 +0.0 + 11 +17287.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +B74 + 8 +0 + 62 + 0 + 10 +17337.5 + 20 +22132.127825 + 30 +0.0 + 11 +17362.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +B75 + 8 +0 + 62 + 0 + 10 +17412.5 + 20 +22132.127825 + 30 +0.0 + 11 +17437.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +B76 + 8 +0 + 62 + 0 + 10 +17487.5 + 20 +22132.127825 + 30 +0.0 + 11 +17512.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +B77 + 8 +0 + 62 + 0 + 10 +17562.5 + 20 +22132.127825 + 30 +0.0 + 11 +17587.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +B78 + 8 +0 + 62 + 0 + 10 +17637.5 + 20 +22132.127825 + 30 +0.0 + 11 +17662.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +B79 + 8 +0 + 62 + 0 + 10 +17712.5 + 20 +22132.127825 + 30 +0.0 + 11 +17737.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +B7A + 8 +0 + 62 + 0 + 10 +17787.5 + 20 +22132.127825 + 30 +0.0 + 11 +17812.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +B7B + 8 +0 + 62 + 0 + 10 +17862.5 + 20 +22132.127825 + 30 +0.0 + 11 +17887.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +B7C + 8 +0 + 62 + 0 + 10 +17937.5 + 20 +22132.127825 + 30 +0.0 + 11 +17962.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +B7D + 8 +0 + 62 + 0 + 10 +18012.5 + 20 +22132.127825 + 30 +0.0 + 11 +18037.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +B7E + 8 +0 + 62 + 0 + 10 +18087.5 + 20 +22132.127825 + 30 +0.0 + 11 +18112.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +B7F + 8 +0 + 62 + 0 + 10 +18162.5 + 20 +22132.127825 + 30 +0.0 + 11 +18187.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +B80 + 8 +0 + 62 + 0 + 10 +18237.5 + 20 +22132.127825 + 30 +0.0 + 11 +18262.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +B81 + 8 +0 + 62 + 0 + 10 +18312.5 + 20 +22132.127825 + 30 +0.0 + 11 +18337.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +B82 + 8 +0 + 62 + 0 + 10 +18387.5 + 20 +22132.127825 + 30 +0.0 + 11 +18412.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +B83 + 8 +0 + 62 + 0 + 10 +18462.5 + 20 +22132.127825 + 30 +0.0 + 11 +18487.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +B84 + 8 +0 + 62 + 0 + 10 +18537.5 + 20 +22132.127825 + 30 +0.0 + 11 +18562.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +B85 + 8 +0 + 62 + 0 + 10 +18612.5 + 20 +22132.127825 + 30 +0.0 + 11 +18637.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +B86 + 8 +0 + 62 + 0 + 10 +18687.5 + 20 +22132.127825 + 30 +0.0 + 11 +18712.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +B87 + 8 +0 + 62 + 0 + 10 +17822.388698 + 20 +22115.0 + 30 +0.0 + 11 +17812.499934 + 21 +22132.127843 + 31 +0.0 + 0 +LINE + 5 +B88 + 8 +0 + 62 + 0 + 10 +17787.499934 + 20 +22175.429113 + 30 +0.0 + 11 +17776.200677 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +B89 + 8 +0 + 62 + 0 + 10 +17787.499934 + 20 +22132.127843 + 30 +0.0 + 11 +17774.999934 + 21 +22153.778478 + 31 +0.0 + 0 +LINE + 5 +B8A + 8 +0 + 62 + 0 + 10 +17749.999934 + 20 +22153.778478 + 30 +0.0 + 11 +17737.499934 + 21 +22175.429113 + 31 +0.0 + 0 +LINE + 5 +B8B + 8 +0 + 62 + 0 + 10 +17747.388699 + 20 +22115.0 + 30 +0.0 + 11 +17737.499934 + 21 +22132.127843 + 31 +0.0 + 0 +LINE + 5 +B8C + 8 +0 + 62 + 0 + 10 +17712.499934 + 20 +22175.429113 + 30 +0.0 + 11 +17701.200677 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +B8D + 8 +0 + 62 + 0 + 10 +17712.499934 + 20 +22132.127843 + 30 +0.0 + 11 +17699.999934 + 21 +22153.778478 + 31 +0.0 + 0 +LINE + 5 +B8E + 8 +0 + 62 + 0 + 10 +17674.999934 + 20 +22153.778478 + 30 +0.0 + 11 +17662.499934 + 21 +22175.429113 + 31 +0.0 + 0 +LINE + 5 +B8F + 8 +0 + 62 + 0 + 10 +17672.388699 + 20 +22115.0 + 30 +0.0 + 11 +17662.499934 + 21 +22132.127843 + 31 +0.0 + 0 +LINE + 5 +B90 + 8 +0 + 62 + 0 + 10 +17637.499934 + 20 +22175.429113 + 30 +0.0 + 11 +17626.200678 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +B91 + 8 +0 + 62 + 0 + 10 +17637.499934 + 20 +22132.127843 + 30 +0.0 + 11 +17624.999934 + 21 +22153.778478 + 31 +0.0 + 0 +LINE + 5 +B92 + 8 +0 + 62 + 0 + 10 +17599.999934 + 20 +22153.778478 + 30 +0.0 + 11 +17587.499934 + 21 +22175.429114 + 31 +0.0 + 0 +LINE + 5 +B93 + 8 +0 + 62 + 0 + 10 +17597.388699 + 20 +22115.0 + 30 +0.0 + 11 +17587.499934 + 21 +22132.127843 + 31 +0.0 + 0 +LINE + 5 +B94 + 8 +0 + 62 + 0 + 10 +17562.499934 + 20 +22175.429114 + 30 +0.0 + 11 +17551.200678 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +B95 + 8 +0 + 62 + 0 + 10 +17562.499934 + 20 +22132.127843 + 30 +0.0 + 11 +17549.999934 + 21 +22153.778479 + 31 +0.0 + 0 +LINE + 5 +B96 + 8 +0 + 62 + 0 + 10 +17524.999935 + 20 +22153.778479 + 30 +0.0 + 11 +17512.499935 + 21 +22175.429114 + 31 +0.0 + 0 +LINE + 5 +B97 + 8 +0 + 62 + 0 + 10 +17522.3887 + 20 +22115.0 + 30 +0.0 + 11 +17512.499935 + 21 +22132.127844 + 31 +0.0 + 0 +LINE + 5 +B98 + 8 +0 + 62 + 0 + 10 +17487.499935 + 20 +22175.429114 + 30 +0.0 + 11 +17476.200678 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +B99 + 8 +0 + 62 + 0 + 10 +17487.499935 + 20 +22132.127844 + 30 +0.0 + 11 +17474.999935 + 21 +22153.778479 + 31 +0.0 + 0 +LINE + 5 +B9A + 8 +0 + 62 + 0 + 10 +17449.999935 + 20 +22153.778479 + 30 +0.0 + 11 +17437.499935 + 21 +22175.429114 + 31 +0.0 + 0 +LINE + 5 +B9B + 8 +0 + 62 + 0 + 10 +17447.3887 + 20 +22115.0 + 30 +0.0 + 11 +17437.499935 + 21 +22132.127844 + 31 +0.0 + 0 +LINE + 5 +B9C + 8 +0 + 62 + 0 + 10 +17412.499935 + 20 +22175.429114 + 30 +0.0 + 11 +17401.200678 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +B9D + 8 +0 + 62 + 0 + 10 +17412.499935 + 20 +22132.127844 + 30 +0.0 + 11 +17399.999935 + 21 +22153.778479 + 31 +0.0 + 0 +LINE + 5 +B9E + 8 +0 + 62 + 0 + 10 +17374.999935 + 20 +22153.778479 + 30 +0.0 + 11 +17362.499935 + 21 +22175.429114 + 31 +0.0 + 0 +LINE + 5 +B9F + 8 +0 + 62 + 0 + 10 +17372.3887 + 20 +22115.0 + 30 +0.0 + 11 +17362.499935 + 21 +22132.127844 + 31 +0.0 + 0 +LINE + 5 +BA0 + 8 +0 + 62 + 0 + 10 +17337.499935 + 20 +22175.429114 + 30 +0.0 + 11 +17326.200679 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +BA1 + 8 +0 + 62 + 0 + 10 +17337.499935 + 20 +22132.127844 + 30 +0.0 + 11 +17324.999935 + 21 +22153.778479 + 31 +0.0 + 0 +LINE + 5 +BA2 + 8 +0 + 62 + 0 + 10 +17299.999935 + 20 +22153.778479 + 30 +0.0 + 11 +17287.499935 + 21 +22175.429114 + 31 +0.0 + 0 +LINE + 5 +BA3 + 8 +0 + 62 + 0 + 10 +17297.388701 + 20 +22115.0 + 30 +0.0 + 11 +17287.499935 + 21 +22132.127844 + 31 +0.0 + 0 +LINE + 5 +BA4 + 8 +0 + 62 + 0 + 10 +17262.499935 + 20 +22175.429114 + 30 +0.0 + 11 +17251.200679 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +BA5 + 8 +0 + 62 + 0 + 10 +17262.499935 + 20 +22132.127844 + 30 +0.0 + 11 +17249.999935 + 21 +22153.778479 + 31 +0.0 + 0 +LINE + 5 +BA6 + 8 +0 + 62 + 0 + 10 +17224.999936 + 20 +22153.778479 + 30 +0.0 + 11 +17212.499936 + 21 +22175.429114 + 31 +0.0 + 0 +LINE + 5 +BA7 + 8 +0 + 62 + 0 + 10 +17222.388701 + 20 +22115.0 + 30 +0.0 + 11 +17212.499936 + 21 +22132.127844 + 31 +0.0 + 0 +LINE + 5 +BA8 + 8 +0 + 62 + 0 + 10 +17187.499936 + 20 +22175.429114 + 30 +0.0 + 11 +17176.200679 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +BA9 + 8 +0 + 62 + 0 + 10 +17187.499936 + 20 +22132.127844 + 30 +0.0 + 11 +17174.999936 + 21 +22153.778479 + 31 +0.0 + 0 +LINE + 5 +BAA + 8 +0 + 62 + 0 + 10 +17149.999936 + 20 +22153.778479 + 30 +0.0 + 11 +17137.499936 + 21 +22175.429114 + 31 +0.0 + 0 +LINE + 5 +BAB + 8 +0 + 62 + 0 + 10 +17147.388701 + 20 +22115.0 + 30 +0.0 + 11 +17137.499936 + 21 +22132.127844 + 31 +0.0 + 0 +LINE + 5 +BAC + 8 +0 + 62 + 0 + 10 +17112.499936 + 20 +22175.429114 + 30 +0.0 + 11 +17101.20068 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +BAD + 8 +0 + 62 + 0 + 10 +17112.499936 + 20 +22132.127844 + 30 +0.0 + 11 +17099.999936 + 21 +22153.778479 + 31 +0.0 + 0 +LINE + 5 +BAE + 8 +0 + 62 + 0 + 10 +17074.999936 + 20 +22153.778479 + 30 +0.0 + 11 +17062.499936 + 21 +22175.429115 + 31 +0.0 + 0 +LINE + 5 +BAF + 8 +0 + 62 + 0 + 10 +17072.388702 + 20 +22115.0 + 30 +0.0 + 11 +17062.499936 + 21 +22132.127844 + 31 +0.0 + 0 +LINE + 5 +BB0 + 8 +0 + 62 + 0 + 10 +17037.499936 + 20 +22175.429115 + 30 +0.0 + 11 +17026.20068 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +BB1 + 8 +0 + 62 + 0 + 10 +17037.499936 + 20 +22132.127844 + 30 +0.0 + 11 +17024.999936 + 21 +22153.77848 + 31 +0.0 + 0 +LINE + 5 +BB2 + 8 +0 + 62 + 0 + 10 +16999.999936 + 20 +22153.77848 + 30 +0.0 + 11 +16987.499936 + 21 +22175.429115 + 31 +0.0 + 0 +LINE + 5 +BB3 + 8 +0 + 62 + 0 + 10 +16997.388702 + 20 +22115.0 + 30 +0.0 + 11 +16987.499936 + 21 +22132.127845 + 31 +0.0 + 0 +LINE + 5 +BB4 + 8 +0 + 62 + 0 + 10 +16962.499936 + 20 +22175.429115 + 30 +0.0 + 11 +16951.20068 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +BB5 + 8 +0 + 62 + 0 + 10 +16962.499936 + 20 +22132.127845 + 30 +0.0 + 11 +16949.999936 + 21 +22153.77848 + 31 +0.0 + 0 +LINE + 5 +BB6 + 8 +0 + 62 + 0 + 10 +16924.999937 + 20 +22153.77848 + 30 +0.0 + 11 +16912.499937 + 21 +22175.429115 + 31 +0.0 + 0 +LINE + 5 +BB7 + 8 +0 + 62 + 0 + 10 +16922.388702 + 20 +22115.0 + 30 +0.0 + 11 +16912.499937 + 21 +22132.127845 + 31 +0.0 + 0 +LINE + 5 +BB8 + 8 +0 + 62 + 0 + 10 +16887.499937 + 20 +22175.429115 + 30 +0.0 + 11 +16876.200681 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +BB9 + 8 +0 + 62 + 0 + 10 +16887.499937 + 20 +22132.127845 + 30 +0.0 + 11 +16874.999937 + 21 +22153.77848 + 31 +0.0 + 0 +LINE + 5 +BBA + 8 +0 + 62 + 0 + 10 +17824.999934 + 20 +22153.778478 + 30 +0.0 + 11 +17812.499934 + 21 +22175.429113 + 31 +0.0 + 0 +LINE + 5 +BBB + 8 +0 + 62 + 0 + 10 +17862.499933 + 20 +22132.127843 + 30 +0.0 + 11 +17849.999933 + 21 +22153.778478 + 31 +0.0 + 0 +LINE + 5 +BBC + 8 +0 + 62 + 0 + 10 +17897.388698 + 20 +22115.0 + 30 +0.0 + 11 +17887.499933 + 21 +22132.127843 + 31 +0.0 + 0 +LINE + 5 +BBD + 8 +0 + 62 + 0 + 10 +17862.499933 + 20 +22175.429113 + 30 +0.0 + 11 +17851.200677 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +BBE + 8 +0 + 62 + 0 + 10 +17899.999933 + 20 +22153.778478 + 30 +0.0 + 11 +17887.499933 + 21 +22175.429113 + 31 +0.0 + 0 +LINE + 5 +BBF + 8 +0 + 62 + 0 + 10 +17937.499933 + 20 +22132.127843 + 30 +0.0 + 11 +17924.999933 + 21 +22153.778478 + 31 +0.0 + 0 +LINE + 5 +BC0 + 8 +0 + 62 + 0 + 10 +17972.388698 + 20 +22115.0 + 30 +0.0 + 11 +17962.499933 + 21 +22132.127843 + 31 +0.0 + 0 +LINE + 5 +BC1 + 8 +0 + 62 + 0 + 10 +17937.499933 + 20 +22175.429113 + 30 +0.0 + 11 +17926.200676 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +BC2 + 8 +0 + 62 + 0 + 10 +17974.999933 + 20 +22153.778478 + 30 +0.0 + 11 +17962.499933 + 21 +22175.429113 + 31 +0.0 + 0 +LINE + 5 +BC3 + 8 +0 + 62 + 0 + 10 +18012.499933 + 20 +22132.127843 + 30 +0.0 + 11 +17999.999933 + 21 +22153.778478 + 31 +0.0 + 0 +LINE + 5 +BC4 + 8 +0 + 62 + 0 + 10 +18047.388697 + 20 +22115.0 + 30 +0.0 + 11 +18037.499933 + 21 +22132.127843 + 31 +0.0 + 0 +LINE + 5 +BC5 + 8 +0 + 62 + 0 + 10 +18012.499933 + 20 +22175.429113 + 30 +0.0 + 11 +18001.200676 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +BC6 + 8 +0 + 62 + 0 + 10 +18049.999933 + 20 +22153.778478 + 30 +0.0 + 11 +18037.499933 + 21 +22175.429113 + 31 +0.0 + 0 +LINE + 5 +BC7 + 8 +0 + 62 + 0 + 10 +18087.499933 + 20 +22132.127842 + 30 +0.0 + 11 +18074.999933 + 21 +22153.778478 + 31 +0.0 + 0 +LINE + 5 +BC8 + 8 +0 + 62 + 0 + 10 +18122.388697 + 20 +22115.0 + 30 +0.0 + 11 +18112.499933 + 21 +22132.127842 + 31 +0.0 + 0 +LINE + 5 +BC9 + 8 +0 + 62 + 0 + 10 +18087.499933 + 20 +22175.429113 + 30 +0.0 + 11 +18076.200676 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +BCA + 8 +0 + 62 + 0 + 10 +18124.999933 + 20 +22153.778477 + 30 +0.0 + 11 +18112.499933 + 21 +22175.429113 + 31 +0.0 + 0 +LINE + 5 +BCB + 8 +0 + 62 + 0 + 10 +18162.499932 + 20 +22132.127842 + 30 +0.0 + 11 +18149.999932 + 21 +22153.778477 + 31 +0.0 + 0 +LINE + 5 +BCC + 8 +0 + 62 + 0 + 10 +18197.388697 + 20 +22115.0 + 30 +0.0 + 11 +18187.499932 + 21 +22132.127842 + 31 +0.0 + 0 +LINE + 5 +BCD + 8 +0 + 62 + 0 + 10 +18162.499932 + 20 +22175.429112 + 30 +0.0 + 11 +18151.200675 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +BCE + 8 +0 + 62 + 0 + 10 +18199.999932 + 20 +22153.778477 + 30 +0.0 + 11 +18187.499932 + 21 +22175.429112 + 31 +0.0 + 0 +LINE + 5 +BCF + 8 +0 + 62 + 0 + 10 +18237.499932 + 20 +22132.127842 + 30 +0.0 + 11 +18224.999932 + 21 +22153.778477 + 31 +0.0 + 0 +LINE + 5 +BD0 + 8 +0 + 62 + 0 + 10 +18272.388696 + 20 +22115.0 + 30 +0.0 + 11 +18262.499932 + 21 +22132.127842 + 31 +0.0 + 0 +LINE + 5 +BD1 + 8 +0 + 62 + 0 + 10 +18237.499932 + 20 +22175.429112 + 30 +0.0 + 11 +18226.200675 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +BD2 + 8 +0 + 62 + 0 + 10 +18274.999932 + 20 +22153.778477 + 30 +0.0 + 11 +18262.499932 + 21 +22175.429112 + 31 +0.0 + 0 +LINE + 5 +BD3 + 8 +0 + 62 + 0 + 10 +18312.499932 + 20 +22132.127842 + 30 +0.0 + 11 +18299.999932 + 21 +22153.778477 + 31 +0.0 + 0 +LINE + 5 +BD4 + 8 +0 + 62 + 0 + 10 +18347.388696 + 20 +22115.0 + 30 +0.0 + 11 +18337.499932 + 21 +22132.127842 + 31 +0.0 + 0 +LINE + 5 +BD5 + 8 +0 + 62 + 0 + 10 +18312.499932 + 20 +22175.429112 + 30 +0.0 + 11 +18301.200675 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +BD6 + 8 +0 + 62 + 0 + 10 +18349.999932 + 20 +22153.778477 + 30 +0.0 + 11 +18337.499932 + 21 +22175.429112 + 31 +0.0 + 0 +LINE + 5 +BD7 + 8 +0 + 62 + 0 + 10 +18387.499932 + 20 +22132.127842 + 30 +0.0 + 11 +18374.999932 + 21 +22153.778477 + 31 +0.0 + 0 +LINE + 5 +BD8 + 8 +0 + 62 + 0 + 10 +18422.388696 + 20 +22115.0 + 30 +0.0 + 11 +18412.499932 + 21 +22132.127842 + 31 +0.0 + 0 +LINE + 5 +BD9 + 8 +0 + 62 + 0 + 10 +18387.499932 + 20 +22175.429112 + 30 +0.0 + 11 +18376.200674 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +BDA + 8 +0 + 62 + 0 + 10 +18424.999932 + 20 +22153.778477 + 30 +0.0 + 11 +18412.499932 + 21 +22175.429112 + 31 +0.0 + 0 +LINE + 5 +BDB + 8 +0 + 62 + 0 + 10 +18462.499932 + 20 +22132.127842 + 30 +0.0 + 11 +18449.999932 + 21 +22153.778477 + 31 +0.0 + 0 +LINE + 5 +BDC + 8 +0 + 62 + 0 + 10 +18497.388695 + 20 +22115.0 + 30 +0.0 + 11 +18487.499931 + 21 +22132.127842 + 31 +0.0 + 0 +LINE + 5 +BDD + 8 +0 + 62 + 0 + 10 +18462.499931 + 20 +22175.429112 + 30 +0.0 + 11 +18451.200674 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +BDE + 8 +0 + 62 + 0 + 10 +18499.999931 + 20 +22153.778477 + 30 +0.0 + 11 +18487.499931 + 21 +22175.429112 + 31 +0.0 + 0 +LINE + 5 +BDF + 8 +0 + 62 + 0 + 10 +18537.499931 + 20 +22132.127842 + 30 +0.0 + 11 +18524.999931 + 21 +22153.778477 + 31 +0.0 + 0 +LINE + 5 +BE0 + 8 +0 + 62 + 0 + 10 +18572.388695 + 20 +22115.0 + 30 +0.0 + 11 +18562.499931 + 21 +22132.127842 + 31 +0.0 + 0 +LINE + 5 +BE1 + 8 +0 + 62 + 0 + 10 +18537.499931 + 20 +22175.429112 + 30 +0.0 + 11 +18526.200674 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +BE2 + 8 +0 + 62 + 0 + 10 +18574.999931 + 20 +22153.778477 + 30 +0.0 + 11 +18562.499931 + 21 +22175.429112 + 31 +0.0 + 0 +LINE + 5 +BE3 + 8 +0 + 62 + 0 + 10 +18612.499931 + 20 +22132.127841 + 30 +0.0 + 11 +18599.999931 + 21 +22153.778477 + 31 +0.0 + 0 +LINE + 5 +BE4 + 8 +0 + 62 + 0 + 10 +18647.388695 + 20 +22115.0 + 30 +0.0 + 11 +18637.499931 + 21 +22132.127841 + 31 +0.0 + 0 +LINE + 5 +BE5 + 8 +0 + 62 + 0 + 10 +18612.499931 + 20 +22175.429112 + 30 +0.0 + 11 +18601.200673 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +BE6 + 8 +0 + 62 + 0 + 10 +18649.999931 + 20 +22153.778476 + 30 +0.0 + 11 +18637.499931 + 21 +22175.429112 + 31 +0.0 + 0 +LINE + 5 +BE7 + 8 +0 + 62 + 0 + 10 +18687.499931 + 20 +22132.127841 + 30 +0.0 + 11 +18674.999931 + 21 +22153.778476 + 31 +0.0 + 0 +LINE + 5 +BE8 + 8 +0 + 62 + 0 + 10 +18722.388694 + 20 +22115.0 + 30 +0.0 + 11 +18712.499931 + 21 +22132.127841 + 31 +0.0 + 0 +LINE + 5 +BE9 + 8 +0 + 62 + 0 + 10 +18687.499931 + 20 +22175.429111 + 30 +0.0 + 11 +18676.200673 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +BEA + 8 +0 + 62 + 0 + 10 +18724.999931 + 20 +22153.778476 + 30 +0.0 + 11 +18712.499931 + 21 +22175.429111 + 31 +0.0 + 0 +LINE + 5 +BEB + 8 +0 + 62 + 0 + 10 +18751.25 + 20 +22151.613292 + 30 +0.0 + 11 +18749.999931 + 21 +22153.778476 + 31 +0.0 + 0 +LINE + 5 +BEC + 8 +0 + 62 + 0 + 10 +18751.25 + 20 +22194.914562 + 30 +0.0 + 11 +18751.200673 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +BED + 8 +0 + 62 + 0 + 10 +17777.61119 + 20 +22115.0 + 30 +0.0 + 11 +17787.499982 + 21 +22132.127891 + 31 +0.0 + 0 +LINE + 5 +BEE + 8 +0 + 62 + 0 + 10 +17812.499982 + 20 +22175.429162 + 30 +0.0 + 11 +17823.799211 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +BEF + 8 +0 + 62 + 0 + 10 +17774.999983 + 20 +22153.778526 + 30 +0.0 + 11 +17787.499983 + 21 +22175.429162 + 31 +0.0 + 0 +LINE + 5 +BF0 + 8 +0 + 62 + 0 + 10 +17737.499983 + 20 +22132.127891 + 30 +0.0 + 11 +17749.999983 + 21 +22153.778526 + 31 +0.0 + 0 +LINE + 5 +BF1 + 8 +0 + 62 + 0 + 10 +17702.61119 + 20 +22115.0 + 30 +0.0 + 11 +17712.499983 + 21 +22132.127891 + 31 +0.0 + 0 +LINE + 5 +BF2 + 8 +0 + 62 + 0 + 10 +17737.499983 + 20 +22175.429161 + 30 +0.0 + 11 +17748.799212 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +BF3 + 8 +0 + 62 + 0 + 10 +17699.999983 + 20 +22153.778526 + 30 +0.0 + 11 +17712.499983 + 21 +22175.429161 + 31 +0.0 + 0 +LINE + 5 +BF4 + 8 +0 + 62 + 0 + 10 +17662.499983 + 20 +22132.127891 + 30 +0.0 + 11 +17674.999983 + 21 +22153.778526 + 31 +0.0 + 0 +LINE + 5 +BF5 + 8 +0 + 62 + 0 + 10 +17627.61119 + 20 +22115.0 + 30 +0.0 + 11 +17637.499983 + 21 +22132.127891 + 31 +0.0 + 0 +LINE + 5 +BF6 + 8 +0 + 62 + 0 + 10 +17662.499983 + 20 +22175.429161 + 30 +0.0 + 11 +17673.799212 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +BF7 + 8 +0 + 62 + 0 + 10 +17624.999983 + 20 +22153.778526 + 30 +0.0 + 11 +17637.499983 + 21 +22175.429161 + 31 +0.0 + 0 +LINE + 5 +BF8 + 8 +0 + 62 + 0 + 10 +17587.499983 + 20 +22132.127891 + 30 +0.0 + 11 +17599.999983 + 21 +22153.778526 + 31 +0.0 + 0 +LINE + 5 +BF9 + 8 +0 + 62 + 0 + 10 +17552.611191 + 20 +22115.0 + 30 +0.0 + 11 +17562.499983 + 21 +22132.127891 + 31 +0.0 + 0 +LINE + 5 +BFA + 8 +0 + 62 + 0 + 10 +17587.499983 + 20 +22175.429161 + 30 +0.0 + 11 +17598.799212 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +BFB + 8 +0 + 62 + 0 + 10 +17549.999983 + 20 +22153.778526 + 30 +0.0 + 11 +17562.499983 + 21 +22175.429161 + 31 +0.0 + 0 +LINE + 5 +BFC + 8 +0 + 62 + 0 + 10 +17512.499983 + 20 +22132.127891 + 30 +0.0 + 11 +17524.999983 + 21 +22153.778526 + 31 +0.0 + 0 +LINE + 5 +BFD + 8 +0 + 62 + 0 + 10 +17477.611191 + 20 +22115.0 + 30 +0.0 + 11 +17487.499983 + 21 +22132.127891 + 31 +0.0 + 0 +LINE + 5 +BFE + 8 +0 + 62 + 0 + 10 +17512.499983 + 20 +22175.429161 + 30 +0.0 + 11 +17523.799213 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +BFF + 8 +0 + 62 + 0 + 10 +17474.999984 + 20 +22153.778526 + 30 +0.0 + 11 +17487.499984 + 21 +22175.429161 + 31 +0.0 + 0 +LINE + 5 +C00 + 8 +0 + 62 + 0 + 10 +17437.499984 + 20 +22132.127891 + 30 +0.0 + 11 +17449.999984 + 21 +22153.778526 + 31 +0.0 + 0 +LINE + 5 +C01 + 8 +0 + 62 + 0 + 10 +17402.611191 + 20 +22115.0 + 30 +0.0 + 11 +17412.499984 + 21 +22132.127891 + 31 +0.0 + 0 +LINE + 5 +C02 + 8 +0 + 62 + 0 + 10 +17437.499984 + 20 +22175.429161 + 30 +0.0 + 11 +17448.799213 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +C03 + 8 +0 + 62 + 0 + 10 +17399.999984 + 20 +22153.778526 + 30 +0.0 + 11 +17412.499984 + 21 +22175.429161 + 31 +0.0 + 0 +LINE + 5 +C04 + 8 +0 + 62 + 0 + 10 +17362.499984 + 20 +22132.127891 + 30 +0.0 + 11 +17374.999984 + 21 +22153.778526 + 31 +0.0 + 0 +LINE + 5 +C05 + 8 +0 + 62 + 0 + 10 +17327.611192 + 20 +22115.0 + 30 +0.0 + 11 +17337.499984 + 21 +22132.127891 + 31 +0.0 + 0 +LINE + 5 +C06 + 8 +0 + 62 + 0 + 10 +17362.499984 + 20 +22175.429161 + 30 +0.0 + 11 +17373.799213 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +C07 + 8 +0 + 62 + 0 + 10 +17324.999984 + 20 +22153.778526 + 30 +0.0 + 11 +17337.499984 + 21 +22175.429161 + 31 +0.0 + 0 +LINE + 5 +C08 + 8 +0 + 62 + 0 + 10 +17287.499984 + 20 +22132.12789 + 30 +0.0 + 11 +17299.999984 + 21 +22153.778526 + 31 +0.0 + 0 +LINE + 5 +C09 + 8 +0 + 62 + 0 + 10 +17252.611192 + 20 +22115.0 + 30 +0.0 + 11 +17262.499984 + 21 +22132.12789 + 31 +0.0 + 0 +LINE + 5 +C0A + 8 +0 + 62 + 0 + 10 +17287.499984 + 20 +22175.429161 + 30 +0.0 + 11 +17298.799214 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +C0B + 8 +0 + 62 + 0 + 10 +17249.999984 + 20 +22153.778525 + 30 +0.0 + 11 +17262.499984 + 21 +22175.429161 + 31 +0.0 + 0 +LINE + 5 +C0C + 8 +0 + 62 + 0 + 10 +17212.499984 + 20 +22132.12789 + 30 +0.0 + 11 +17224.999984 + 21 +22153.778525 + 31 +0.0 + 0 +LINE + 5 +C0D + 8 +0 + 62 + 0 + 10 +17177.611192 + 20 +22115.0 + 30 +0.0 + 11 +17187.499984 + 21 +22132.12789 + 31 +0.0 + 0 +LINE + 5 +C0E + 8 +0 + 62 + 0 + 10 +17212.499984 + 20 +22175.42916 + 30 +0.0 + 11 +17223.799214 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +C0F + 8 +0 + 62 + 0 + 10 +17174.999985 + 20 +22153.778525 + 30 +0.0 + 11 +17187.499985 + 21 +22175.42916 + 31 +0.0 + 0 +LINE + 5 +C10 + 8 +0 + 62 + 0 + 10 +17137.499985 + 20 +22132.12789 + 30 +0.0 + 11 +17149.999985 + 21 +22153.778525 + 31 +0.0 + 0 +LINE + 5 +C11 + 8 +0 + 62 + 0 + 10 +17102.611193 + 20 +22115.0 + 30 +0.0 + 11 +17112.499985 + 21 +22132.12789 + 31 +0.0 + 0 +LINE + 5 +C12 + 8 +0 + 62 + 0 + 10 +17137.499985 + 20 +22175.42916 + 30 +0.0 + 11 +17148.799214 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +C13 + 8 +0 + 62 + 0 + 10 +17099.999985 + 20 +22153.778525 + 30 +0.0 + 11 +17112.499985 + 21 +22175.42916 + 31 +0.0 + 0 +LINE + 5 +C14 + 8 +0 + 62 + 0 + 10 +17062.499985 + 20 +22132.12789 + 30 +0.0 + 11 +17074.999985 + 21 +22153.778525 + 31 +0.0 + 0 +LINE + 5 +C15 + 8 +0 + 62 + 0 + 10 +17027.611193 + 20 +22115.0 + 30 +0.0 + 11 +17037.499985 + 21 +22132.12789 + 31 +0.0 + 0 +LINE + 5 +C16 + 8 +0 + 62 + 0 + 10 +17062.499985 + 20 +22175.42916 + 30 +0.0 + 11 +17073.799215 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +C17 + 8 +0 + 62 + 0 + 10 +17024.999985 + 20 +22153.778525 + 30 +0.0 + 11 +17037.499985 + 21 +22175.42916 + 31 +0.0 + 0 +LINE + 5 +C18 + 8 +0 + 62 + 0 + 10 +16987.499985 + 20 +22132.12789 + 30 +0.0 + 11 +16999.999985 + 21 +22153.778525 + 31 +0.0 + 0 +LINE + 5 +C19 + 8 +0 + 62 + 0 + 10 +16952.611193 + 20 +22115.0 + 30 +0.0 + 11 +16962.499985 + 21 +22132.12789 + 31 +0.0 + 0 +LINE + 5 +C1A + 8 +0 + 62 + 0 + 10 +16987.499985 + 20 +22175.42916 + 30 +0.0 + 11 +16998.799215 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +C1B + 8 +0 + 62 + 0 + 10 +16949.999985 + 20 +22153.778525 + 30 +0.0 + 11 +16962.499985 + 21 +22175.42916 + 31 +0.0 + 0 +LINE + 5 +C1C + 8 +0 + 62 + 0 + 10 +16912.499985 + 20 +22132.12789 + 30 +0.0 + 11 +16924.999985 + 21 +22153.778525 + 31 +0.0 + 0 +LINE + 5 +C1D + 8 +0 + 62 + 0 + 10 +16877.611194 + 20 +22115.0 + 30 +0.0 + 11 +16887.499985 + 21 +22132.12789 + 31 +0.0 + 0 +LINE + 5 +C1E + 8 +0 + 62 + 0 + 10 +16912.499985 + 20 +22175.42916 + 30 +0.0 + 11 +16923.799215 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +C1F + 8 +0 + 62 + 0 + 10 +16874.999985 + 20 +22153.778525 + 30 +0.0 + 11 +16887.499985 + 21 +22175.42916 + 31 +0.0 + 0 +LINE + 5 +C20 + 8 +0 + 62 + 0 + 10 +17812.499982 + 20 +22132.127891 + 30 +0.0 + 11 +17824.999982 + 21 +22153.778527 + 31 +0.0 + 0 +LINE + 5 +C21 + 8 +0 + 62 + 0 + 10 +17849.999982 + 20 +22153.778527 + 30 +0.0 + 11 +17862.499982 + 21 +22175.429162 + 31 +0.0 + 0 +LINE + 5 +C22 + 8 +0 + 62 + 0 + 10 +17852.611189 + 20 +22115.0 + 30 +0.0 + 11 +17862.499982 + 21 +22132.127892 + 31 +0.0 + 0 +LINE + 5 +C23 + 8 +0 + 62 + 0 + 10 +17887.499982 + 20 +22175.429162 + 30 +0.0 + 11 +17898.799211 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +C24 + 8 +0 + 62 + 0 + 10 +17887.499982 + 20 +22132.127892 + 30 +0.0 + 11 +17899.999982 + 21 +22153.778527 + 31 +0.0 + 0 +LINE + 5 +C25 + 8 +0 + 62 + 0 + 10 +17924.999982 + 20 +22153.778527 + 30 +0.0 + 11 +17937.499982 + 21 +22175.429162 + 31 +0.0 + 0 +LINE + 5 +C26 + 8 +0 + 62 + 0 + 10 +17927.611189 + 20 +22115.0 + 30 +0.0 + 11 +17937.499982 + 21 +22132.127892 + 31 +0.0 + 0 +LINE + 5 +C27 + 8 +0 + 62 + 0 + 10 +17962.499982 + 20 +22175.429162 + 30 +0.0 + 11 +17973.799211 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +C28 + 8 +0 + 62 + 0 + 10 +17962.499982 + 20 +22132.127892 + 30 +0.0 + 11 +17974.999982 + 21 +22153.778527 + 31 +0.0 + 0 +LINE + 5 +C29 + 8 +0 + 62 + 0 + 10 +17999.999982 + 20 +22153.778527 + 30 +0.0 + 11 +18012.499982 + 21 +22175.429162 + 31 +0.0 + 0 +LINE + 5 +C2A + 8 +0 + 62 + 0 + 10 +18002.611189 + 20 +22115.0 + 30 +0.0 + 11 +18012.499982 + 21 +22132.127892 + 31 +0.0 + 0 +LINE + 5 +C2B + 8 +0 + 62 + 0 + 10 +18037.499982 + 20 +22175.429162 + 30 +0.0 + 11 +18048.79921 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +C2C + 8 +0 + 62 + 0 + 10 +18037.499982 + 20 +22132.127892 + 30 +0.0 + 11 +18049.999982 + 21 +22153.778527 + 31 +0.0 + 0 +LINE + 5 +C2D + 8 +0 + 62 + 0 + 10 +18074.999982 + 20 +22153.778527 + 30 +0.0 + 11 +18087.499982 + 21 +22175.429162 + 31 +0.0 + 0 +LINE + 5 +C2E + 8 +0 + 62 + 0 + 10 +18077.611188 + 20 +22115.0 + 30 +0.0 + 11 +18087.499981 + 21 +22132.127892 + 31 +0.0 + 0 +LINE + 5 +C2F + 8 +0 + 62 + 0 + 10 +18112.499981 + 20 +22175.429162 + 30 +0.0 + 11 +18123.79921 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +C30 + 8 +0 + 62 + 0 + 10 +18112.499981 + 20 +22132.127892 + 30 +0.0 + 11 +18124.999981 + 21 +22153.778527 + 31 +0.0 + 0 +LINE + 5 +C31 + 8 +0 + 62 + 0 + 10 +18149.999981 + 20 +22153.778527 + 30 +0.0 + 11 +18162.499981 + 21 +22175.429162 + 31 +0.0 + 0 +LINE + 5 +C32 + 8 +0 + 62 + 0 + 10 +18152.611188 + 20 +22115.0 + 30 +0.0 + 11 +18162.499981 + 21 +22132.127892 + 31 +0.0 + 0 +LINE + 5 +C33 + 8 +0 + 62 + 0 + 10 +18187.499981 + 20 +22175.429162 + 30 +0.0 + 11 +18198.79921 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +C34 + 8 +0 + 62 + 0 + 10 +18187.499981 + 20 +22132.127892 + 30 +0.0 + 11 +18199.999981 + 21 +22153.778527 + 31 +0.0 + 0 +LINE + 5 +C35 + 8 +0 + 62 + 0 + 10 +18224.999981 + 20 +22153.778527 + 30 +0.0 + 11 +18237.499981 + 21 +22175.429162 + 31 +0.0 + 0 +LINE + 5 +C36 + 8 +0 + 62 + 0 + 10 +18227.611188 + 20 +22115.0 + 30 +0.0 + 11 +18237.499981 + 21 +22132.127892 + 31 +0.0 + 0 +LINE + 5 +C37 + 8 +0 + 62 + 0 + 10 +18262.499981 + 20 +22175.429162 + 30 +0.0 + 11 +18273.799209 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +C38 + 8 +0 + 62 + 0 + 10 +18262.499981 + 20 +22132.127892 + 30 +0.0 + 11 +18274.999981 + 21 +22153.778527 + 31 +0.0 + 0 +LINE + 5 +C39 + 8 +0 + 62 + 0 + 10 +18299.999981 + 20 +22153.778527 + 30 +0.0 + 11 +18312.499981 + 21 +22175.429163 + 31 +0.0 + 0 +LINE + 5 +C3A + 8 +0 + 62 + 0 + 10 +18302.611187 + 20 +22115.0 + 30 +0.0 + 11 +18312.499981 + 21 +22132.127892 + 31 +0.0 + 0 +LINE + 5 +C3B + 8 +0 + 62 + 0 + 10 +18337.499981 + 20 +22175.429163 + 30 +0.0 + 11 +18348.799209 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +C3C + 8 +0 + 62 + 0 + 10 +18337.499981 + 20 +22132.127892 + 30 +0.0 + 11 +18349.999981 + 21 +22153.778528 + 31 +0.0 + 0 +LINE + 5 +C3D + 8 +0 + 62 + 0 + 10 +18374.999981 + 20 +22153.778528 + 30 +0.0 + 11 +18387.499981 + 21 +22175.429163 + 31 +0.0 + 0 +LINE + 5 +C3E + 8 +0 + 62 + 0 + 10 +18377.611187 + 20 +22115.0 + 30 +0.0 + 11 +18387.49998 + 21 +22132.127893 + 31 +0.0 + 0 +LINE + 5 +C3F + 8 +0 + 62 + 0 + 10 +18412.49998 + 20 +22175.429163 + 30 +0.0 + 11 +18423.799209 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +C40 + 8 +0 + 62 + 0 + 10 +18412.49998 + 20 +22132.127893 + 30 +0.0 + 11 +18424.99998 + 21 +22153.778528 + 31 +0.0 + 0 +LINE + 5 +C41 + 8 +0 + 62 + 0 + 10 +18449.99998 + 20 +22153.778528 + 30 +0.0 + 11 +18462.49998 + 21 +22175.429163 + 31 +0.0 + 0 +LINE + 5 +C42 + 8 +0 + 62 + 0 + 10 +18452.611187 + 20 +22115.0 + 30 +0.0 + 11 +18462.49998 + 21 +22132.127893 + 31 +0.0 + 0 +LINE + 5 +C43 + 8 +0 + 62 + 0 + 10 +18487.49998 + 20 +22175.429163 + 30 +0.0 + 11 +18498.799208 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +C44 + 8 +0 + 62 + 0 + 10 +18487.49998 + 20 +22132.127893 + 30 +0.0 + 11 +18499.99998 + 21 +22153.778528 + 31 +0.0 + 0 +LINE + 5 +C45 + 8 +0 + 62 + 0 + 10 +18524.99998 + 20 +22153.778528 + 30 +0.0 + 11 +18537.49998 + 21 +22175.429163 + 31 +0.0 + 0 +LINE + 5 +C46 + 8 +0 + 62 + 0 + 10 +18527.611186 + 20 +22115.0 + 30 +0.0 + 11 +18537.49998 + 21 +22132.127893 + 31 +0.0 + 0 +LINE + 5 +C47 + 8 +0 + 62 + 0 + 10 +18562.49998 + 20 +22175.429163 + 30 +0.0 + 11 +18573.799208 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +C48 + 8 +0 + 62 + 0 + 10 +18562.49998 + 20 +22132.127893 + 30 +0.0 + 11 +18574.99998 + 21 +22153.778528 + 31 +0.0 + 0 +LINE + 5 +C49 + 8 +0 + 62 + 0 + 10 +18599.99998 + 20 +22153.778528 + 30 +0.0 + 11 +18612.49998 + 21 +22175.429163 + 31 +0.0 + 0 +LINE + 5 +C4A + 8 +0 + 62 + 0 + 10 +18602.611186 + 20 +22115.0 + 30 +0.0 + 11 +18612.49998 + 21 +22132.127893 + 31 +0.0 + 0 +LINE + 5 +C4B + 8 +0 + 62 + 0 + 10 +18637.49998 + 20 +22175.429163 + 30 +0.0 + 11 +18648.799208 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +C4C + 8 +0 + 62 + 0 + 10 +18637.49998 + 20 +22132.127893 + 30 +0.0 + 11 +18649.99998 + 21 +22153.778528 + 31 +0.0 + 0 +LINE + 5 +C4D + 8 +0 + 62 + 0 + 10 +18674.99998 + 20 +22153.778528 + 30 +0.0 + 11 +18687.49998 + 21 +22175.429163 + 31 +0.0 + 0 +LINE + 5 +C4E + 8 +0 + 62 + 0 + 10 +18677.611186 + 20 +22115.0 + 30 +0.0 + 11 +18687.49998 + 21 +22132.127893 + 31 +0.0 + 0 +LINE + 5 +C4F + 8 +0 + 62 + 0 + 10 +18712.49998 + 20 +22175.429163 + 30 +0.0 + 11 +18723.799207 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +C50 + 8 +0 + 62 + 0 + 10 +18712.499979 + 20 +22132.127893 + 30 +0.0 + 11 +18724.999979 + 21 +22153.778528 + 31 +0.0 + 0 +LINE + 5 +C51 + 8 +0 + 62 + 0 + 10 +18749.999979 + 20 +22153.778528 + 30 +0.0 + 11 +18751.25 + 21 +22155.943628 + 31 +0.0 + 0 +ENDBLK + 5 +C52 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X43 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X43 + 1 + + 0 +LINE + 5 +C54 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +17174.13241 + 30 +0.0 + 11 +4950.0 + 21 +17174.13241 + 31 +0.0 + 0 +LINE + 5 +C55 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +17195.783045 + 30 +0.0 + 11 +4987.5 + 21 +17195.783045 + 31 +0.0 + 0 +LINE + 5 +C56 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +17217.43368 + 30 +0.0 + 11 +4950.0 + 21 +17217.43368 + 31 +0.0 + 0 +LINE + 5 +C57 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +17239.084315 + 30 +0.0 + 11 +4987.5 + 21 +17239.084315 + 31 +0.0 + 0 +LINE + 5 +C58 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +17260.73495 + 30 +0.0 + 11 +4950.0 + 21 +17260.73495 + 31 +0.0 + 0 +LINE + 5 +C59 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +17282.385585 + 30 +0.0 + 11 +4987.5 + 21 +17282.385585 + 31 +0.0 + 0 +LINE + 5 +C5A + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +17304.03622 + 30 +0.0 + 11 +4950.0 + 21 +17304.03622 + 31 +0.0 + 0 +LINE + 5 +C5B + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +17325.686855 + 30 +0.0 + 11 +4987.5 + 21 +17325.686855 + 31 +0.0 + 0 +LINE + 5 +C5C + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +17347.33749 + 30 +0.0 + 11 +4950.0 + 21 +17347.33749 + 31 +0.0 + 0 +LINE + 5 +C5D + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +17368.988125 + 30 +0.0 + 11 +4987.5 + 21 +17368.988125 + 31 +0.0 + 0 +LINE + 5 +C5E + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +17390.63876 + 30 +0.0 + 11 +4950.0 + 21 +17390.63876 + 31 +0.0 + 0 +LINE + 5 +C5F + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +17412.289395 + 30 +0.0 + 11 +4987.5 + 21 +17412.289395 + 31 +0.0 + 0 +LINE + 5 +C60 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +17433.94003 + 30 +0.0 + 11 +4950.0 + 21 +17433.94003 + 31 +0.0 + 0 +LINE + 5 +C61 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +17455.590665 + 30 +0.0 + 11 +4987.5 + 21 +17455.590665 + 31 +0.0 + 0 +LINE + 5 +C62 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +17477.2413 + 30 +0.0 + 11 +4950.0 + 21 +17477.2413 + 31 +0.0 + 0 +LINE + 5 +C63 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +17498.891935 + 30 +0.0 + 11 +4987.5 + 21 +17498.891935 + 31 +0.0 + 0 +LINE + 5 +C64 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +17520.54257 + 30 +0.0 + 11 +4950.0 + 21 +17520.54257 + 31 +0.0 + 0 +LINE + 5 +C65 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +17542.193205 + 30 +0.0 + 11 +4987.5 + 21 +17542.193205 + 31 +0.0 + 0 +LINE + 5 +C66 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +17563.84384 + 30 +0.0 + 11 +4950.0 + 21 +17563.84384 + 31 +0.0 + 0 +LINE + 5 +C67 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +17585.494475 + 30 +0.0 + 11 +4987.5 + 21 +17585.494475 + 31 +0.0 + 0 +LINE + 5 +C68 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +17607.14511 + 30 +0.0 + 11 +4950.0 + 21 +17607.14511 + 31 +0.0 + 0 +LINE + 5 +C69 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +17628.795745 + 30 +0.0 + 11 +4987.5 + 21 +17628.795745 + 31 +0.0 + 0 +LINE + 5 +C6A + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +17650.44638 + 30 +0.0 + 11 +4950.0 + 21 +17650.44638 + 31 +0.0 + 0 +LINE + 5 +C6B + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +17672.097015 + 30 +0.0 + 11 +4987.5 + 21 +17672.097015 + 31 +0.0 + 0 +LINE + 5 +C6C + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +17693.74765 + 30 +0.0 + 11 +4950.0 + 21 +17693.74765 + 31 +0.0 + 0 +LINE + 5 +C6D + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +17715.398285 + 30 +0.0 + 11 +4987.5 + 21 +17715.398285 + 31 +0.0 + 0 +LINE + 5 +C6E + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +17737.04892 + 30 +0.0 + 11 +4950.0 + 21 +17737.04892 + 31 +0.0 + 0 +LINE + 5 +C6F + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +17758.699555 + 30 +0.0 + 11 +4987.5 + 21 +17758.699555 + 31 +0.0 + 0 +LINE + 5 +C70 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +17780.35019 + 30 +0.0 + 11 +4950.0 + 21 +17780.35019 + 31 +0.0 + 0 +LINE + 5 +C71 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +17802.000825 + 30 +0.0 + 11 +4987.5 + 21 +17802.000825 + 31 +0.0 + 0 +LINE + 5 +C72 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +17823.65146 + 30 +0.0 + 11 +4950.0 + 21 +17823.65146 + 31 +0.0 + 0 +LINE + 5 +C73 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +17845.302095 + 30 +0.0 + 11 +4987.5 + 21 +17845.302095 + 31 +0.0 + 0 +LINE + 5 +C74 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +17866.95273 + 30 +0.0 + 11 +4950.0 + 21 +17866.95273 + 31 +0.0 + 0 +LINE + 5 +C75 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +17888.603365 + 30 +0.0 + 11 +4987.5 + 21 +17888.603365 + 31 +0.0 + 0 +LINE + 5 +C76 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +17910.254 + 30 +0.0 + 11 +4950.0 + 21 +17910.254 + 31 +0.0 + 0 +LINE + 5 +C77 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +17931.904635 + 30 +0.0 + 11 +4987.5 + 21 +17931.904635 + 31 +0.0 + 0 +LINE + 5 +C78 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +17953.55527 + 30 +0.0 + 11 +4950.0 + 21 +17953.55527 + 31 +0.0 + 0 +LINE + 5 +C79 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +17975.205905 + 30 +0.0 + 11 +4987.5 + 21 +17975.205905 + 31 +0.0 + 0 +LINE + 5 +C7A + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +17996.85654 + 30 +0.0 + 11 +4950.0 + 21 +17996.85654 + 31 +0.0 + 0 +LINE + 5 +C7B + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +18018.507175 + 30 +0.0 + 11 +4987.5 + 21 +18018.507175 + 31 +0.0 + 0 +LINE + 5 +C7C + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +18040.15781 + 30 +0.0 + 11 +4950.0 + 21 +18040.15781 + 31 +0.0 + 0 +LINE + 5 +C7D + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +18061.808445 + 30 +0.0 + 11 +4987.5 + 21 +18061.808445 + 31 +0.0 + 0 +LINE + 5 +C7E + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +18083.45908 + 30 +0.0 + 11 +4950.0 + 21 +18083.45908 + 31 +0.0 + 0 +LINE + 5 +C7F + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +18105.109715 + 30 +0.0 + 11 +4987.5 + 21 +18105.109715 + 31 +0.0 + 0 +LINE + 5 +C80 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +18126.76035 + 30 +0.0 + 11 +4950.0 + 21 +18126.76035 + 31 +0.0 + 0 +LINE + 5 +C81 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +18148.410985 + 30 +0.0 + 11 +4987.5 + 21 +18148.410985 + 31 +0.0 + 0 +LINE + 5 +C82 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +18170.06162 + 30 +0.0 + 11 +4950.0 + 21 +18170.06162 + 31 +0.0 + 0 +LINE + 5 +C83 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +18191.712255 + 30 +0.0 + 11 +4987.5 + 21 +18191.712255 + 31 +0.0 + 0 +LINE + 5 +C84 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +18213.36289 + 30 +0.0 + 11 +4950.0 + 21 +18213.36289 + 31 +0.0 + 0 +LINE + 5 +C85 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +18235.013525 + 30 +0.0 + 11 +4987.5 + 21 +18235.013525 + 31 +0.0 + 0 +LINE + 5 +C86 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +17152.481775 + 30 +0.0 + 11 +4987.5 + 21 +17152.481775 + 31 +0.0 + 0 +LINE + 5 +C87 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +17130.83114 + 30 +0.0 + 11 +4950.0 + 21 +17130.83114 + 31 +0.0 + 0 +LINE + 5 +C88 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +17109.180505 + 30 +0.0 + 11 +4987.5 + 21 +17109.180505 + 31 +0.0 + 0 +LINE + 5 +C89 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +17087.52987 + 30 +0.0 + 11 +4950.0 + 21 +17087.52987 + 31 +0.0 + 0 +LINE + 5 +C8A + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +17065.879235 + 30 +0.0 + 11 +4987.5 + 21 +17065.879235 + 31 +0.0 + 0 +LINE + 5 +C8B + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +17044.2286 + 30 +0.0 + 11 +4950.0 + 21 +17044.2286 + 31 +0.0 + 0 +LINE + 5 +C8C + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +17022.577965 + 30 +0.0 + 11 +4987.5 + 21 +17022.577965 + 31 +0.0 + 0 +LINE + 5 +C8D + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +17000.92733 + 30 +0.0 + 11 +4950.0 + 21 +17000.92733 + 31 +0.0 + 0 +LINE + 5 +C8E + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +16979.276695 + 30 +0.0 + 11 +4987.5 + 21 +16979.276695 + 31 +0.0 + 0 +LINE + 5 +C8F + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +16957.62606 + 30 +0.0 + 11 +4950.0 + 21 +16957.62606 + 31 +0.0 + 0 +LINE + 5 +C90 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +16935.975425 + 30 +0.0 + 11 +4987.5 + 21 +16935.975425 + 31 +0.0 + 0 +LINE + 5 +C91 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +16914.32479 + 30 +0.0 + 11 +4950.0 + 21 +16914.32479 + 31 +0.0 + 0 +LINE + 5 +C92 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +16892.674155 + 30 +0.0 + 11 +4987.5 + 21 +16892.674155 + 31 +0.0 + 0 +LINE + 5 +C93 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +16871.02352 + 30 +0.0 + 11 +4950.0 + 21 +16871.02352 + 31 +0.0 + 0 +LINE + 5 +C94 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +16849.372885 + 30 +0.0 + 11 +4987.5 + 21 +16849.372885 + 31 +0.0 + 0 +LINE + 5 +C95 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +16827.72225 + 30 +0.0 + 11 +4950.0 + 21 +16827.72225 + 31 +0.0 + 0 +LINE + 5 +C96 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +16806.071615 + 30 +0.0 + 11 +4987.5 + 21 +16806.071615 + 31 +0.0 + 0 +LINE + 5 +C97 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +16784.42098 + 30 +0.0 + 11 +4950.0 + 21 +16784.42098 + 31 +0.0 + 0 +LINE + 5 +C98 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +16762.770345 + 30 +0.0 + 11 +4987.5 + 21 +16762.770345 + 31 +0.0 + 0 +LINE + 5 +C99 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +16741.11971 + 30 +0.0 + 11 +4950.0 + 21 +16741.11971 + 31 +0.0 + 0 +LINE + 5 +C9A + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +16719.469075 + 30 +0.0 + 11 +4987.5 + 21 +16719.469075 + 31 +0.0 + 0 +LINE + 5 +C9B + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +16697.81844 + 30 +0.0 + 11 +4950.0 + 21 +16697.81844 + 31 +0.0 + 0 +LINE + 5 +C9C + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +16676.167805 + 30 +0.0 + 11 +4987.5 + 21 +16676.167805 + 31 +0.0 + 0 +LINE + 5 +C9D + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +16654.51717 + 30 +0.0 + 11 +4950.0 + 21 +16654.51717 + 31 +0.0 + 0 +LINE + 5 +C9E + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +16632.866535 + 30 +0.0 + 11 +4987.5 + 21 +16632.866535 + 31 +0.0 + 0 +LINE + 5 +C9F + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +16611.2159 + 30 +0.0 + 11 +4950.0 + 21 +16611.2159 + 31 +0.0 + 0 +LINE + 5 +CA0 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +16589.565265 + 30 +0.0 + 11 +4987.5 + 21 +16589.565265 + 31 +0.0 + 0 +LINE + 5 +CA1 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +16567.91463 + 30 +0.0 + 11 +4950.0 + 21 +16567.91463 + 31 +0.0 + 0 +LINE + 5 +CA2 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +16546.263995 + 30 +0.0 + 11 +4987.5 + 21 +16546.263995 + 31 +0.0 + 0 +LINE + 5 +CA3 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +16524.61336 + 30 +0.0 + 11 +4950.0 + 21 +16524.61336 + 31 +0.0 + 0 +LINE + 5 +CA4 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +16502.962725 + 30 +0.0 + 11 +4987.5 + 21 +16502.962725 + 31 +0.0 + 0 +LINE + 5 +CA5 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +16481.31209 + 30 +0.0 + 11 +4950.0 + 21 +16481.31209 + 31 +0.0 + 0 +LINE + 5 +CA6 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +16459.661455 + 30 +0.0 + 11 +4987.5 + 21 +16459.661455 + 31 +0.0 + 0 +LINE + 5 +CA7 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +16438.01082 + 30 +0.0 + 11 +4950.0 + 21 +16438.01082 + 31 +0.0 + 0 +LINE + 5 +CA8 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +16416.360185 + 30 +0.0 + 11 +4987.5 + 21 +16416.360185 + 31 +0.0 + 0 +LINE + 5 +CA9 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +16394.70955 + 30 +0.0 + 11 +4950.0 + 21 +16394.70955 + 31 +0.0 + 0 +LINE + 5 +CAA + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +16373.058915 + 30 +0.0 + 11 +4987.5 + 21 +16373.058915 + 31 +0.0 + 0 +LINE + 5 +CAB + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +16351.40828 + 30 +0.0 + 11 +4950.0 + 21 +16351.40828 + 31 +0.0 + 0 +LINE + 5 +CAC + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +16329.757645 + 30 +0.0 + 11 +4987.5 + 21 +16329.757645 + 31 +0.0 + 0 +LINE + 5 +CAD + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +16308.10701 + 30 +0.0 + 11 +4950.0 + 21 +16308.10701 + 31 +0.0 + 0 +LINE + 5 +CAE + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +16286.456375 + 30 +0.0 + 11 +4987.5 + 21 +16286.456375 + 31 +0.0 + 0 +LINE + 5 +CAF + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +16264.80574 + 30 +0.0 + 11 +4950.0 + 21 +16264.80574 + 31 +0.0 + 0 +LINE + 5 +CB0 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +16243.155105 + 30 +0.0 + 11 +4987.5 + 21 +16243.155105 + 31 +0.0 + 0 +LINE + 5 +CB1 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +16221.50447 + 30 +0.0 + 11 +4950.0 + 21 +16221.50447 + 31 +0.0 + 0 +LINE + 5 +CB2 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +16199.853835 + 30 +0.0 + 11 +4987.5 + 21 +16199.853835 + 31 +0.0 + 0 +LINE + 5 +CB3 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +16178.2032 + 30 +0.0 + 11 +4950.0 + 21 +16178.2032 + 31 +0.0 + 0 +LINE + 5 +CB4 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +16156.552565 + 30 +0.0 + 11 +4987.5 + 21 +16156.552565 + 31 +0.0 + 0 +LINE + 5 +CB5 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +16134.90193 + 30 +0.0 + 11 +4950.0 + 21 +16134.90193 + 31 +0.0 + 0 +LINE + 5 +CB6 + 8 +0 + 62 + 0 + 10 +4999.999985 + 20 +17087.529896 + 30 +0.0 + 11 +4987.499985 + 21 +17109.180531 + 31 +0.0 + 0 +LINE + 5 +CB7 + 8 +0 + 62 + 0 + 10 +4962.499985 + 20 +17152.481801 + 30 +0.0 + 11 +4949.999985 + 21 +17174.132436 + 31 +0.0 + 0 +LINE + 5 +CB8 + 8 +0 + 62 + 0 + 10 +4924.999985 + 20 +17217.433706 + 30 +0.0 + 11 +4920.0 + 21 +17226.093935 + 31 +0.0 + 0 +LINE + 5 +CB9 + 8 +0 + 62 + 0 + 10 +4999.999985 + 20 +17044.228626 + 30 +0.0 + 11 +4987.499985 + 21 +17065.879261 + 31 +0.0 + 0 +LINE + 5 +CBA + 8 +0 + 62 + 0 + 10 +4962.499985 + 20 +17109.180531 + 30 +0.0 + 11 +4949.999985 + 21 +17130.831166 + 31 +0.0 + 0 +LINE + 5 +CBB + 8 +0 + 62 + 0 + 10 +4924.999985 + 20 +17174.132436 + 30 +0.0 + 11 +4920.0 + 21 +17182.792665 + 31 +0.0 + 0 +LINE + 5 +CBC + 8 +0 + 62 + 0 + 10 +4999.999985 + 20 +17000.927355 + 30 +0.0 + 11 +4987.499985 + 21 +17022.57799 + 31 +0.0 + 0 +LINE + 5 +CBD + 8 +0 + 62 + 0 + 10 +4962.499985 + 20 +17065.879261 + 30 +0.0 + 11 +4949.999985 + 21 +17087.529896 + 31 +0.0 + 0 +LINE + 5 +CBE + 8 +0 + 62 + 0 + 10 +4924.999985 + 20 +17130.831166 + 30 +0.0 + 11 +4920.0 + 21 +17139.491395 + 31 +0.0 + 0 +LINE + 5 +CBF + 8 +0 + 62 + 0 + 10 +4999.999985 + 20 +16957.626085 + 30 +0.0 + 11 +4987.499985 + 21 +16979.27672 + 31 +0.0 + 0 +LINE + 5 +CC0 + 8 +0 + 62 + 0 + 10 +4962.499985 + 20 +17022.577991 + 30 +0.0 + 11 +4949.999985 + 21 +17044.228626 + 31 +0.0 + 0 +LINE + 5 +CC1 + 8 +0 + 62 + 0 + 10 +4924.999985 + 20 +17087.529896 + 30 +0.0 + 11 +4920.0 + 21 +17096.190125 + 31 +0.0 + 0 +LINE + 5 +CC2 + 8 +0 + 62 + 0 + 10 +4999.999985 + 20 +16914.324815 + 30 +0.0 + 11 +4987.499985 + 21 +16935.97545 + 31 +0.0 + 0 +LINE + 5 +CC3 + 8 +0 + 62 + 0 + 10 +4962.499985 + 20 +16979.27672 + 30 +0.0 + 11 +4949.999985 + 21 +17000.927355 + 31 +0.0 + 0 +LINE + 5 +CC4 + 8 +0 + 62 + 0 + 10 +4924.999985 + 20 +17044.228626 + 30 +0.0 + 11 +4920.0 + 21 +17052.888855 + 31 +0.0 + 0 +LINE + 5 +CC5 + 8 +0 + 62 + 0 + 10 +4999.999986 + 20 +16871.023545 + 30 +0.0 + 11 +4987.499986 + 21 +16892.67418 + 31 +0.0 + 0 +LINE + 5 +CC6 + 8 +0 + 62 + 0 + 10 +4962.499986 + 20 +16935.97545 + 30 +0.0 + 11 +4949.999986 + 21 +16957.626085 + 31 +0.0 + 0 +LINE + 5 +CC7 + 8 +0 + 62 + 0 + 10 +4924.999986 + 20 +17000.927356 + 30 +0.0 + 11 +4920.0 + 21 +17009.587585 + 31 +0.0 + 0 +LINE + 5 +CC8 + 8 +0 + 62 + 0 + 10 +4999.999986 + 20 +16827.722275 + 30 +0.0 + 11 +4987.499986 + 21 +16849.37291 + 31 +0.0 + 0 +LINE + 5 +CC9 + 8 +0 + 62 + 0 + 10 +4962.499986 + 20 +16892.67418 + 30 +0.0 + 11 +4949.999986 + 21 +16914.324815 + 31 +0.0 + 0 +LINE + 5 +CCA + 8 +0 + 62 + 0 + 10 +4924.999986 + 20 +16957.626085 + 30 +0.0 + 11 +4920.0 + 21 +16966.286315 + 31 +0.0 + 0 +LINE + 5 +CCB + 8 +0 + 62 + 0 + 10 +4999.999986 + 20 +16784.421005 + 30 +0.0 + 11 +4987.499986 + 21 +16806.07164 + 31 +0.0 + 0 +LINE + 5 +CCC + 8 +0 + 62 + 0 + 10 +4962.499986 + 20 +16849.37291 + 30 +0.0 + 11 +4949.999986 + 21 +16871.023545 + 31 +0.0 + 0 +LINE + 5 +CCD + 8 +0 + 62 + 0 + 10 +4924.999986 + 20 +16914.324815 + 30 +0.0 + 11 +4920.0 + 21 +16922.985045 + 31 +0.0 + 0 +LINE + 5 +CCE + 8 +0 + 62 + 0 + 10 +4999.999986 + 20 +16741.119735 + 30 +0.0 + 11 +4987.499986 + 21 +16762.77037 + 31 +0.0 + 0 +LINE + 5 +CCF + 8 +0 + 62 + 0 + 10 +4962.499986 + 20 +16806.07164 + 30 +0.0 + 11 +4949.999986 + 21 +16827.722275 + 31 +0.0 + 0 +LINE + 5 +CD0 + 8 +0 + 62 + 0 + 10 +4924.999986 + 20 +16871.023545 + 30 +0.0 + 11 +4920.0 + 21 +16879.683775 + 31 +0.0 + 0 +LINE + 5 +CD1 + 8 +0 + 62 + 0 + 10 +4999.999986 + 20 +16697.818464 + 30 +0.0 + 11 +4987.499986 + 21 +16719.4691 + 31 +0.0 + 0 +LINE + 5 +CD2 + 8 +0 + 62 + 0 + 10 +4962.499986 + 20 +16762.77037 + 30 +0.0 + 11 +4949.999986 + 21 +16784.421005 + 31 +0.0 + 0 +LINE + 5 +CD3 + 8 +0 + 62 + 0 + 10 +4924.999986 + 20 +16827.722275 + 30 +0.0 + 11 +4920.0 + 21 +16836.382505 + 31 +0.0 + 0 +LINE + 5 +CD4 + 8 +0 + 62 + 0 + 10 +4999.999986 + 20 +16654.517194 + 30 +0.0 + 11 +4987.499986 + 21 +16676.167829 + 31 +0.0 + 0 +LINE + 5 +CD5 + 8 +0 + 62 + 0 + 10 +4962.499986 + 20 +16719.4691 + 30 +0.0 + 11 +4949.999986 + 21 +16741.119735 + 31 +0.0 + 0 +LINE + 5 +CD6 + 8 +0 + 62 + 0 + 10 +4924.999986 + 20 +16784.421005 + 30 +0.0 + 11 +4920.0 + 21 +16793.081235 + 31 +0.0 + 0 +LINE + 5 +CD7 + 8 +0 + 62 + 0 + 10 +4999.999986 + 20 +16611.215924 + 30 +0.0 + 11 +4987.499986 + 21 +16632.866559 + 31 +0.0 + 0 +LINE + 5 +CD8 + 8 +0 + 62 + 0 + 10 +4962.499986 + 20 +16676.167829 + 30 +0.0 + 11 +4949.999986 + 21 +16697.818465 + 31 +0.0 + 0 +LINE + 5 +CD9 + 8 +0 + 62 + 0 + 10 +4924.999986 + 20 +16741.119735 + 30 +0.0 + 11 +4920.0 + 21 +16749.779965 + 31 +0.0 + 0 +LINE + 5 +CDA + 8 +0 + 62 + 0 + 10 +4999.999986 + 20 +16567.914654 + 30 +0.0 + 11 +4987.499986 + 21 +16589.565289 + 31 +0.0 + 0 +LINE + 5 +CDB + 8 +0 + 62 + 0 + 10 +4962.499986 + 20 +16632.866559 + 30 +0.0 + 11 +4949.999986 + 21 +16654.517194 + 31 +0.0 + 0 +LINE + 5 +CDC + 8 +0 + 62 + 0 + 10 +4924.999986 + 20 +16697.818465 + 30 +0.0 + 11 +4920.0 + 21 +16706.478695 + 31 +0.0 + 0 +LINE + 5 +CDD + 8 +0 + 62 + 0 + 10 +4999.999986 + 20 +16524.613384 + 30 +0.0 + 11 +4987.499986 + 21 +16546.264019 + 31 +0.0 + 0 +LINE + 5 +CDE + 8 +0 + 62 + 0 + 10 +4962.499986 + 20 +16589.565289 + 30 +0.0 + 11 +4949.999986 + 21 +16611.215924 + 31 +0.0 + 0 +LINE + 5 +CDF + 8 +0 + 62 + 0 + 10 +4924.999986 + 20 +16654.517194 + 30 +0.0 + 11 +4920.0 + 21 +16663.177425 + 31 +0.0 + 0 +LINE + 5 +CE0 + 8 +0 + 62 + 0 + 10 +4999.999986 + 20 +16481.312114 + 30 +0.0 + 11 +4987.499986 + 21 +16502.962749 + 31 +0.0 + 0 +LINE + 5 +CE1 + 8 +0 + 62 + 0 + 10 +4962.499986 + 20 +16546.264019 + 30 +0.0 + 11 +4949.999986 + 21 +16567.914654 + 31 +0.0 + 0 +LINE + 5 +CE2 + 8 +0 + 62 + 0 + 10 +4924.999986 + 20 +16611.215924 + 30 +0.0 + 11 +4920.0 + 21 +16619.876155 + 31 +0.0 + 0 +LINE + 5 +CE3 + 8 +0 + 62 + 0 + 10 +4999.999986 + 20 +16438.010844 + 30 +0.0 + 11 +4987.499986 + 21 +16459.661479 + 31 +0.0 + 0 +LINE + 5 +CE4 + 8 +0 + 62 + 0 + 10 +4962.499986 + 20 +16502.962749 + 30 +0.0 + 11 +4949.999986 + 21 +16524.613384 + 31 +0.0 + 0 +LINE + 5 +CE5 + 8 +0 + 62 + 0 + 10 +4924.999986 + 20 +16567.914654 + 30 +0.0 + 11 +4920.0 + 21 +16576.574885 + 31 +0.0 + 0 +LINE + 5 +CE6 + 8 +0 + 62 + 0 + 10 +4999.999986 + 20 +16394.709573 + 30 +0.0 + 11 +4987.499986 + 21 +16416.360209 + 31 +0.0 + 0 +LINE + 5 +CE7 + 8 +0 + 62 + 0 + 10 +4962.499986 + 20 +16459.661479 + 30 +0.0 + 11 +4949.999986 + 21 +16481.312114 + 31 +0.0 + 0 +LINE + 5 +CE8 + 8 +0 + 62 + 0 + 10 +4924.999986 + 20 +16524.613384 + 30 +0.0 + 11 +4920.0 + 21 +16533.273615 + 31 +0.0 + 0 +LINE + 5 +CE9 + 8 +0 + 62 + 0 + 10 +4999.999987 + 20 +16351.408303 + 30 +0.0 + 11 +4987.499987 + 21 +16373.058938 + 31 +0.0 + 0 +LINE + 5 +CEA + 8 +0 + 62 + 0 + 10 +4962.499987 + 20 +16416.360209 + 30 +0.0 + 11 +4949.999987 + 21 +16438.010844 + 31 +0.0 + 0 +LINE + 5 +CEB + 8 +0 + 62 + 0 + 10 +4924.999987 + 20 +16481.312114 + 30 +0.0 + 11 +4920.0 + 21 +16489.972345 + 31 +0.0 + 0 +LINE + 5 +CEC + 8 +0 + 62 + 0 + 10 +4999.999987 + 20 +16308.107033 + 30 +0.0 + 11 +4987.499987 + 21 +16329.757668 + 31 +0.0 + 0 +LINE + 5 +CED + 8 +0 + 62 + 0 + 10 +4962.499987 + 20 +16373.058938 + 30 +0.0 + 11 +4949.999987 + 21 +16394.709574 + 31 +0.0 + 0 +LINE + 5 +CEE + 8 +0 + 62 + 0 + 10 +4924.999987 + 20 +16438.010844 + 30 +0.0 + 11 +4920.0 + 21 +16446.671075 + 31 +0.0 + 0 +LINE + 5 +CEF + 8 +0 + 62 + 0 + 10 +4999.999987 + 20 +16264.805763 + 30 +0.0 + 11 +4987.499987 + 21 +16286.456398 + 31 +0.0 + 0 +LINE + 5 +CF0 + 8 +0 + 62 + 0 + 10 +4962.499987 + 20 +16329.757668 + 30 +0.0 + 11 +4949.999987 + 21 +16351.408303 + 31 +0.0 + 0 +LINE + 5 +CF1 + 8 +0 + 62 + 0 + 10 +4924.999987 + 20 +16394.709574 + 30 +0.0 + 11 +4920.0 + 21 +16403.369805 + 31 +0.0 + 0 +LINE + 5 +CF2 + 8 +0 + 62 + 0 + 10 +4999.999987 + 20 +16221.504493 + 30 +0.0 + 11 +4987.499987 + 21 +16243.155128 + 31 +0.0 + 0 +LINE + 5 +CF3 + 8 +0 + 62 + 0 + 10 +4962.499987 + 20 +16286.456398 + 30 +0.0 + 11 +4949.999987 + 21 +16308.107033 + 31 +0.0 + 0 +LINE + 5 +CF4 + 8 +0 + 62 + 0 + 10 +4924.999987 + 20 +16351.408303 + 30 +0.0 + 11 +4920.0 + 21 +16360.068535 + 31 +0.0 + 0 +LINE + 5 +CF5 + 8 +0 + 62 + 0 + 10 +4999.999987 + 20 +16178.203223 + 30 +0.0 + 11 +4987.499987 + 21 +16199.853858 + 31 +0.0 + 0 +LINE + 5 +CF6 + 8 +0 + 62 + 0 + 10 +4962.499987 + 20 +16243.155128 + 30 +0.0 + 11 +4949.999987 + 21 +16264.805763 + 31 +0.0 + 0 +LINE + 5 +CF7 + 8 +0 + 62 + 0 + 10 +4924.999987 + 20 +16308.107033 + 30 +0.0 + 11 +4920.0 + 21 +16316.767265 + 31 +0.0 + 0 +LINE + 5 +CF8 + 8 +0 + 62 + 0 + 10 +4999.999987 + 20 +16134.901953 + 30 +0.0 + 11 +4987.499987 + 21 +16156.552588 + 31 +0.0 + 0 +LINE + 5 +CF9 + 8 +0 + 62 + 0 + 10 +4962.499987 + 20 +16199.853858 + 30 +0.0 + 11 +4949.999987 + 21 +16221.504493 + 31 +0.0 + 0 +LINE + 5 +CFA + 8 +0 + 62 + 0 + 10 +4924.999987 + 20 +16264.805763 + 30 +0.0 + 11 +4920.0 + 21 +16273.465995 + 31 +0.0 + 0 +LINE + 5 +CFB + 8 +0 + 62 + 0 + 10 +4962.499987 + 20 +16156.552588 + 30 +0.0 + 11 +4949.999987 + 21 +16178.203223 + 31 +0.0 + 0 +LINE + 5 +CFC + 8 +0 + 62 + 0 + 10 +4924.999987 + 20 +16221.504493 + 30 +0.0 + 11 +4920.0 + 21 +16230.164725 + 31 +0.0 + 0 +LINE + 5 +CFD + 8 +0 + 62 + 0 + 10 +4962.212073 + 20 +16113.75 + 30 +0.0 + 11 +4949.999987 + 21 +16134.901953 + 31 +0.0 + 0 +LINE + 5 +CFE + 8 +0 + 62 + 0 + 10 +4924.999987 + 20 +16178.203223 + 30 +0.0 + 11 +4920.0 + 21 +16186.863455 + 31 +0.0 + 0 +LINE + 5 +CFF + 8 +0 + 62 + 0 + 10 +4924.999987 + 20 +16134.901953 + 30 +0.0 + 11 +4920.0 + 21 +16143.562185 + 31 +0.0 + 0 +LINE + 5 +D00 + 8 +0 + 62 + 0 + 10 +4999.999985 + 20 +17130.831166 + 30 +0.0 + 11 +4987.499985 + 21 +17152.481801 + 31 +0.0 + 0 +LINE + 5 +D01 + 8 +0 + 62 + 0 + 10 +4962.499985 + 20 +17195.783071 + 30 +0.0 + 11 +4949.999985 + 21 +17217.433706 + 31 +0.0 + 0 +LINE + 5 +D02 + 8 +0 + 62 + 0 + 10 +4924.999985 + 20 +17260.734976 + 30 +0.0 + 11 +4920.0 + 21 +17269.395205 + 31 +0.0 + 0 +LINE + 5 +D03 + 8 +0 + 62 + 0 + 10 +4999.999985 + 20 +17174.132436 + 30 +0.0 + 11 +4987.499985 + 21 +17195.783071 + 31 +0.0 + 0 +LINE + 5 +D04 + 8 +0 + 62 + 0 + 10 +4962.499985 + 20 +17239.084341 + 30 +0.0 + 11 +4949.999985 + 21 +17260.734976 + 31 +0.0 + 0 +LINE + 5 +D05 + 8 +0 + 62 + 0 + 10 +4924.999985 + 20 +17304.036247 + 30 +0.0 + 11 +4920.0 + 21 +17312.696475 + 31 +0.0 + 0 +LINE + 5 +D06 + 8 +0 + 62 + 0 + 10 +4999.999985 + 20 +17217.433706 + 30 +0.0 + 11 +4987.499985 + 21 +17239.084341 + 31 +0.0 + 0 +LINE + 5 +D07 + 8 +0 + 62 + 0 + 10 +4962.499985 + 20 +17282.385611 + 30 +0.0 + 11 +4949.999985 + 21 +17304.036246 + 31 +0.0 + 0 +LINE + 5 +D08 + 8 +0 + 62 + 0 + 10 +4924.999985 + 20 +17347.337517 + 30 +0.0 + 11 +4920.0 + 21 +17355.997745 + 31 +0.0 + 0 +LINE + 5 +D09 + 8 +0 + 62 + 0 + 10 +4999.999985 + 20 +17260.734976 + 30 +0.0 + 11 +4987.499985 + 21 +17282.385611 + 31 +0.0 + 0 +LINE + 5 +D0A + 8 +0 + 62 + 0 + 10 +4962.499985 + 20 +17325.686882 + 30 +0.0 + 11 +4949.999985 + 21 +17347.337517 + 31 +0.0 + 0 +LINE + 5 +D0B + 8 +0 + 62 + 0 + 10 +4924.999985 + 20 +17390.638787 + 30 +0.0 + 11 +4920.0 + 21 +17399.299015 + 31 +0.0 + 0 +LINE + 5 +D0C + 8 +0 + 62 + 0 + 10 +4999.999985 + 20 +17304.036246 + 30 +0.0 + 11 +4987.499985 + 21 +17325.686881 + 31 +0.0 + 0 +LINE + 5 +D0D + 8 +0 + 62 + 0 + 10 +4962.499985 + 20 +17368.988152 + 30 +0.0 + 11 +4949.999985 + 21 +17390.638787 + 31 +0.0 + 0 +LINE + 5 +D0E + 8 +0 + 62 + 0 + 10 +4924.999985 + 20 +17433.940057 + 30 +0.0 + 11 +4920.0 + 21 +17442.600285 + 31 +0.0 + 0 +LINE + 5 +D0F + 8 +0 + 62 + 0 + 10 +4999.999985 + 20 +17347.337517 + 30 +0.0 + 11 +4987.499985 + 21 +17368.988152 + 31 +0.0 + 0 +LINE + 5 +D10 + 8 +0 + 62 + 0 + 10 +4962.499985 + 20 +17412.289422 + 30 +0.0 + 11 +4949.999985 + 21 +17433.940057 + 31 +0.0 + 0 +LINE + 5 +D11 + 8 +0 + 62 + 0 + 10 +4924.999985 + 20 +17477.241327 + 30 +0.0 + 11 +4920.0 + 21 +17485.901555 + 31 +0.0 + 0 +LINE + 5 +D12 + 8 +0 + 62 + 0 + 10 +4999.999985 + 20 +17390.638787 + 30 +0.0 + 11 +4987.499985 + 21 +17412.289422 + 31 +0.0 + 0 +LINE + 5 +D13 + 8 +0 + 62 + 0 + 10 +4962.499985 + 20 +17455.590692 + 30 +0.0 + 11 +4949.999985 + 21 +17477.241327 + 31 +0.0 + 0 +LINE + 5 +D14 + 8 +0 + 62 + 0 + 10 +4924.999985 + 20 +17520.542597 + 30 +0.0 + 11 +4920.0 + 21 +17529.202825 + 31 +0.0 + 0 +LINE + 5 +D15 + 8 +0 + 62 + 0 + 10 +4999.999985 + 20 +17433.940057 + 30 +0.0 + 11 +4987.499985 + 21 +17455.590692 + 31 +0.0 + 0 +LINE + 5 +D16 + 8 +0 + 62 + 0 + 10 +4962.499985 + 20 +17498.891962 + 30 +0.0 + 11 +4949.999985 + 21 +17520.542597 + 31 +0.0 + 0 +LINE + 5 +D17 + 8 +0 + 62 + 0 + 10 +4924.999985 + 20 +17563.843867 + 30 +0.0 + 11 +4920.0 + 21 +17572.504095 + 31 +0.0 + 0 +LINE + 5 +D18 + 8 +0 + 62 + 0 + 10 +4999.999984 + 20 +17477.241327 + 30 +0.0 + 11 +4987.499984 + 21 +17498.891962 + 31 +0.0 + 0 +LINE + 5 +D19 + 8 +0 + 62 + 0 + 10 +4962.499984 + 20 +17542.193232 + 30 +0.0 + 11 +4949.999984 + 21 +17563.843867 + 31 +0.0 + 0 +LINE + 5 +D1A + 8 +0 + 62 + 0 + 10 +4924.999984 + 20 +17607.145138 + 30 +0.0 + 11 +4920.0 + 21 +17615.805365 + 31 +0.0 + 0 +LINE + 5 +D1B + 8 +0 + 62 + 0 + 10 +4999.999984 + 20 +17520.542597 + 30 +0.0 + 11 +4987.499984 + 21 +17542.193232 + 31 +0.0 + 0 +LINE + 5 +D1C + 8 +0 + 62 + 0 + 10 +4962.499984 + 20 +17585.494502 + 30 +0.0 + 11 +4949.999984 + 21 +17607.145137 + 31 +0.0 + 0 +LINE + 5 +D1D + 8 +0 + 62 + 0 + 10 +4924.999984 + 20 +17650.446408 + 30 +0.0 + 11 +4920.0 + 21 +17659.106635 + 31 +0.0 + 0 +LINE + 5 +D1E + 8 +0 + 62 + 0 + 10 +4999.999984 + 20 +17563.843867 + 30 +0.0 + 11 +4987.499984 + 21 +17585.494502 + 31 +0.0 + 0 +LINE + 5 +D1F + 8 +0 + 62 + 0 + 10 +4962.499984 + 20 +17628.795773 + 30 +0.0 + 11 +4949.999984 + 21 +17650.446408 + 31 +0.0 + 0 +LINE + 5 +D20 + 8 +0 + 62 + 0 + 10 +4924.999984 + 20 +17693.747678 + 30 +0.0 + 11 +4920.0 + 21 +17702.407905 + 31 +0.0 + 0 +LINE + 5 +D21 + 8 +0 + 62 + 0 + 10 +4999.999984 + 20 +17607.145137 + 30 +0.0 + 11 +4987.499984 + 21 +17628.795772 + 31 +0.0 + 0 +LINE + 5 +D22 + 8 +0 + 62 + 0 + 10 +4962.499984 + 20 +17672.097043 + 30 +0.0 + 11 +4949.999984 + 21 +17693.747678 + 31 +0.0 + 0 +LINE + 5 +D23 + 8 +0 + 62 + 0 + 10 +4924.999984 + 20 +17737.048948 + 30 +0.0 + 11 +4920.0 + 21 +17745.709175 + 31 +0.0 + 0 +LINE + 5 +D24 + 8 +0 + 62 + 0 + 10 +4999.999984 + 20 +17650.446408 + 30 +0.0 + 11 +4987.499984 + 21 +17672.097043 + 31 +0.0 + 0 +LINE + 5 +D25 + 8 +0 + 62 + 0 + 10 +4962.499984 + 20 +17715.398313 + 30 +0.0 + 11 +4949.999984 + 21 +17737.048948 + 31 +0.0 + 0 +LINE + 5 +D26 + 8 +0 + 62 + 0 + 10 +4924.999984 + 20 +17780.350218 + 30 +0.0 + 11 +4920.0 + 21 +17789.010445 + 31 +0.0 + 0 +LINE + 5 +D27 + 8 +0 + 62 + 0 + 10 +4999.999984 + 20 +17693.747678 + 30 +0.0 + 11 +4987.499984 + 21 +17715.398313 + 31 +0.0 + 0 +LINE + 5 +D28 + 8 +0 + 62 + 0 + 10 +4962.499984 + 20 +17758.699583 + 30 +0.0 + 11 +4949.999984 + 21 +17780.350218 + 31 +0.0 + 0 +LINE + 5 +D29 + 8 +0 + 62 + 0 + 10 +4924.999984 + 20 +17823.651488 + 30 +0.0 + 11 +4920.0 + 21 +17832.311715 + 31 +0.0 + 0 +LINE + 5 +D2A + 8 +0 + 62 + 0 + 10 +4999.999984 + 20 +17737.048948 + 30 +0.0 + 11 +4987.499984 + 21 +17758.699583 + 31 +0.0 + 0 +LINE + 5 +D2B + 8 +0 + 62 + 0 + 10 +4962.499984 + 20 +17802.000853 + 30 +0.0 + 11 +4949.999984 + 21 +17823.651488 + 31 +0.0 + 0 +LINE + 5 +D2C + 8 +0 + 62 + 0 + 10 +4924.999984 + 20 +17866.952758 + 30 +0.0 + 11 +4920.0 + 21 +17875.612985 + 31 +0.0 + 0 +LINE + 5 +D2D + 8 +0 + 62 + 0 + 10 +4999.999984 + 20 +17780.350218 + 30 +0.0 + 11 +4987.499984 + 21 +17802.000853 + 31 +0.0 + 0 +LINE + 5 +D2E + 8 +0 + 62 + 0 + 10 +4962.499984 + 20 +17845.302123 + 30 +0.0 + 11 +4949.999984 + 21 +17866.952758 + 31 +0.0 + 0 +LINE + 5 +D2F + 8 +0 + 62 + 0 + 10 +4924.999984 + 20 +17910.254029 + 30 +0.0 + 11 +4920.0 + 21 +17918.914255 + 31 +0.0 + 0 +LINE + 5 +D30 + 8 +0 + 62 + 0 + 10 +4999.999984 + 20 +17823.651488 + 30 +0.0 + 11 +4987.499984 + 21 +17845.302123 + 31 +0.0 + 0 +LINE + 5 +D31 + 8 +0 + 62 + 0 + 10 +4962.499984 + 20 +17888.603393 + 30 +0.0 + 11 +4949.999984 + 21 +17910.254028 + 31 +0.0 + 0 +LINE + 5 +D32 + 8 +0 + 62 + 0 + 10 +4924.999984 + 20 +17953.555299 + 30 +0.0 + 11 +4920.0 + 21 +17962.215525 + 31 +0.0 + 0 +LINE + 5 +D33 + 8 +0 + 62 + 0 + 10 +4999.999984 + 20 +17866.952758 + 30 +0.0 + 11 +4987.499984 + 21 +17888.603393 + 31 +0.0 + 0 +LINE + 5 +D34 + 8 +0 + 62 + 0 + 10 +4962.499984 + 20 +17931.904664 + 30 +0.0 + 11 +4949.999984 + 21 +17953.555299 + 31 +0.0 + 0 +LINE + 5 +D35 + 8 +0 + 62 + 0 + 10 +4924.999984 + 20 +17996.856569 + 30 +0.0 + 11 +4920.0 + 21 +18005.516795 + 31 +0.0 + 0 +LINE + 5 +D36 + 8 +0 + 62 + 0 + 10 +4999.999984 + 20 +17910.254028 + 30 +0.0 + 11 +4987.499984 + 21 +17931.904663 + 31 +0.0 + 0 +LINE + 5 +D37 + 8 +0 + 62 + 0 + 10 +4962.499984 + 20 +17975.205934 + 30 +0.0 + 11 +4949.999984 + 21 +17996.856569 + 31 +0.0 + 0 +LINE + 5 +D38 + 8 +0 + 62 + 0 + 10 +4924.999984 + 20 +18040.157839 + 30 +0.0 + 11 +4920.0 + 21 +18048.818065 + 31 +0.0 + 0 +LINE + 5 +D39 + 8 +0 + 62 + 0 + 10 +4999.999984 + 20 +17953.555299 + 30 +0.0 + 11 +4987.499984 + 21 +17975.205934 + 31 +0.0 + 0 +LINE + 5 +D3A + 8 +0 + 62 + 0 + 10 +4962.499984 + 20 +18018.507204 + 30 +0.0 + 11 +4949.999984 + 21 +18040.157839 + 31 +0.0 + 0 +LINE + 5 +D3B + 8 +0 + 62 + 0 + 10 +4924.999984 + 20 +18083.459109 + 30 +0.0 + 11 +4920.0 + 21 +18092.119335 + 31 +0.0 + 0 +LINE + 5 +D3C + 8 +0 + 62 + 0 + 10 +4999.999983 + 20 +17996.856569 + 30 +0.0 + 11 +4987.499983 + 21 +18018.507204 + 31 +0.0 + 0 +LINE + 5 +D3D + 8 +0 + 62 + 0 + 10 +4962.499983 + 20 +18061.808474 + 30 +0.0 + 11 +4949.999983 + 21 +18083.459109 + 31 +0.0 + 0 +LINE + 5 +D3E + 8 +0 + 62 + 0 + 10 +4924.999983 + 20 +18126.760379 + 30 +0.0 + 11 +4920.0 + 21 +18135.420605 + 31 +0.0 + 0 +LINE + 5 +D3F + 8 +0 + 62 + 0 + 10 +4999.999983 + 20 +18040.157839 + 30 +0.0 + 11 +4987.499983 + 21 +18061.808474 + 31 +0.0 + 0 +LINE + 5 +D40 + 8 +0 + 62 + 0 + 10 +4962.499983 + 20 +18105.109744 + 30 +0.0 + 11 +4949.999983 + 21 +18126.760379 + 31 +0.0 + 0 +LINE + 5 +D41 + 8 +0 + 62 + 0 + 10 +4924.999983 + 20 +18170.061649 + 30 +0.0 + 11 +4920.0 + 21 +18178.721875 + 31 +0.0 + 0 +LINE + 5 +D42 + 8 +0 + 62 + 0 + 10 +4999.999983 + 20 +18083.459109 + 30 +0.0 + 11 +4987.499983 + 21 +18105.109744 + 31 +0.0 + 0 +LINE + 5 +D43 + 8 +0 + 62 + 0 + 10 +4962.499983 + 20 +18148.411014 + 30 +0.0 + 11 +4949.999983 + 21 +18170.061649 + 31 +0.0 + 0 +LINE + 5 +D44 + 8 +0 + 62 + 0 + 10 +4924.999983 + 20 +18213.36292 + 30 +0.0 + 11 +4920.0 + 21 +18222.023145 + 31 +0.0 + 0 +LINE + 5 +D45 + 8 +0 + 62 + 0 + 10 +4999.999983 + 20 +18126.760379 + 30 +0.0 + 11 +4987.499983 + 21 +18148.411014 + 31 +0.0 + 0 +LINE + 5 +D46 + 8 +0 + 62 + 0 + 10 +4962.499983 + 20 +18191.712284 + 30 +0.0 + 11 +4949.999983 + 21 +18213.362919 + 31 +0.0 + 0 +LINE + 5 +D47 + 8 +0 + 62 + 0 + 10 +4999.999983 + 20 +18170.061649 + 30 +0.0 + 11 +4987.499983 + 21 +18191.712284 + 31 +0.0 + 0 +LINE + 5 +D48 + 8 +0 + 62 + 0 + 10 +4962.499983 + 20 +18235.013555 + 30 +0.0 + 11 +4953.125867 + 21 +18251.25 + 31 +0.0 + 0 +LINE + 5 +D49 + 8 +0 + 62 + 0 + 10 +4999.999983 + 20 +18213.362919 + 30 +0.0 + 11 +4987.499983 + 21 +18235.013554 + 31 +0.0 + 0 +LINE + 5 +D4A + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +17078.869615 + 30 +0.0 + 11 +4925.000015 + 21 +17087.529896 + 31 +0.0 + 0 +LINE + 5 +D4B + 8 +0 + 62 + 0 + 10 +4950.000015 + 20 +17130.831166 + 30 +0.0 + 11 +4962.500015 + 21 +17152.481801 + 31 +0.0 + 0 +LINE + 5 +D4C + 8 +0 + 62 + 0 + 10 +4987.500015 + 20 +17195.783071 + 30 +0.0 + 11 +5000.0 + 21 +17217.43368 + 31 +0.0 + 0 +LINE + 5 +D4D + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +17122.170885 + 30 +0.0 + 11 +4925.000015 + 21 +17130.831166 + 31 +0.0 + 0 +LINE + 5 +D4E + 8 +0 + 62 + 0 + 10 +4950.000015 + 20 +17174.132436 + 30 +0.0 + 11 +4962.500015 + 21 +17195.783071 + 31 +0.0 + 0 +LINE + 5 +D4F + 8 +0 + 62 + 0 + 10 +4987.500015 + 20 +17239.084341 + 30 +0.0 + 11 +5000.0 + 21 +17260.73495 + 31 +0.0 + 0 +LINE + 5 +D50 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +17165.472155 + 30 +0.0 + 11 +4925.000015 + 21 +17174.132436 + 31 +0.0 + 0 +LINE + 5 +D51 + 8 +0 + 62 + 0 + 10 +4950.000015 + 20 +17217.433706 + 30 +0.0 + 11 +4962.500015 + 21 +17239.084341 + 31 +0.0 + 0 +LINE + 5 +D52 + 8 +0 + 62 + 0 + 10 +4987.500015 + 20 +17282.385611 + 30 +0.0 + 11 +5000.0 + 21 +17304.03622 + 31 +0.0 + 0 +LINE + 5 +D53 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +17208.773425 + 30 +0.0 + 11 +4925.000015 + 21 +17217.433706 + 31 +0.0 + 0 +LINE + 5 +D54 + 8 +0 + 62 + 0 + 10 +4950.000015 + 20 +17260.734976 + 30 +0.0 + 11 +4962.500015 + 21 +17282.385611 + 31 +0.0 + 0 +LINE + 5 +D55 + 8 +0 + 62 + 0 + 10 +4987.500015 + 20 +17325.686881 + 30 +0.0 + 11 +5000.0 + 21 +17347.33749 + 31 +0.0 + 0 +LINE + 5 +D56 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +17252.074695 + 30 +0.0 + 11 +4925.000015 + 21 +17260.734976 + 31 +0.0 + 0 +LINE + 5 +D57 + 8 +0 + 62 + 0 + 10 +4950.000015 + 20 +17304.036246 + 30 +0.0 + 11 +4962.500015 + 21 +17325.686881 + 31 +0.0 + 0 +LINE + 5 +D58 + 8 +0 + 62 + 0 + 10 +4987.500015 + 20 +17368.988152 + 30 +0.0 + 11 +5000.0 + 21 +17390.63876 + 31 +0.0 + 0 +LINE + 5 +D59 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +17295.375965 + 30 +0.0 + 11 +4925.000015 + 21 +17304.036246 + 31 +0.0 + 0 +LINE + 5 +D5A + 8 +0 + 62 + 0 + 10 +4950.000015 + 20 +17347.337516 + 30 +0.0 + 11 +4962.500015 + 21 +17368.988152 + 31 +0.0 + 0 +LINE + 5 +D5B + 8 +0 + 62 + 0 + 10 +4987.500015 + 20 +17412.289422 + 30 +0.0 + 11 +5000.0 + 21 +17433.94003 + 31 +0.0 + 0 +LINE + 5 +D5C + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +17338.677235 + 30 +0.0 + 11 +4925.000016 + 21 +17347.337516 + 31 +0.0 + 0 +LINE + 5 +D5D + 8 +0 + 62 + 0 + 10 +4950.000016 + 20 +17390.638787 + 30 +0.0 + 11 +4962.500016 + 21 +17412.289422 + 31 +0.0 + 0 +LINE + 5 +D5E + 8 +0 + 62 + 0 + 10 +4987.500016 + 20 +17455.590692 + 30 +0.0 + 11 +5000.0 + 21 +17477.2413 + 31 +0.0 + 0 +LINE + 5 +D5F + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +17381.978505 + 30 +0.0 + 11 +4925.000016 + 21 +17390.638787 + 31 +0.0 + 0 +LINE + 5 +D60 + 8 +0 + 62 + 0 + 10 +4950.000016 + 20 +17433.940057 + 30 +0.0 + 11 +4962.500016 + 21 +17455.590692 + 31 +0.0 + 0 +LINE + 5 +D61 + 8 +0 + 62 + 0 + 10 +4987.500016 + 20 +17498.891962 + 30 +0.0 + 11 +5000.0 + 21 +17520.54257 + 31 +0.0 + 0 +LINE + 5 +D62 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +17425.279775 + 30 +0.0 + 11 +4925.000016 + 21 +17433.940057 + 31 +0.0 + 0 +LINE + 5 +D63 + 8 +0 + 62 + 0 + 10 +4950.000016 + 20 +17477.241327 + 30 +0.0 + 11 +4962.500016 + 21 +17498.891962 + 31 +0.0 + 0 +LINE + 5 +D64 + 8 +0 + 62 + 0 + 10 +4987.500016 + 20 +17542.193232 + 30 +0.0 + 11 +5000.0 + 21 +17563.84384 + 31 +0.0 + 0 +LINE + 5 +D65 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +17468.581045 + 30 +0.0 + 11 +4925.000016 + 21 +17477.241327 + 31 +0.0 + 0 +LINE + 5 +D66 + 8 +0 + 62 + 0 + 10 +4950.000016 + 20 +17520.542597 + 30 +0.0 + 11 +4962.500016 + 21 +17542.193232 + 31 +0.0 + 0 +LINE + 5 +D67 + 8 +0 + 62 + 0 + 10 +4987.500016 + 20 +17585.494502 + 30 +0.0 + 11 +5000.0 + 21 +17607.14511 + 31 +0.0 + 0 +LINE + 5 +D68 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +17511.882315 + 30 +0.0 + 11 +4925.000016 + 21 +17520.542597 + 31 +0.0 + 0 +LINE + 5 +D69 + 8 +0 + 62 + 0 + 10 +4950.000016 + 20 +17563.843867 + 30 +0.0 + 11 +4962.500016 + 21 +17585.494502 + 31 +0.0 + 0 +LINE + 5 +D6A + 8 +0 + 62 + 0 + 10 +4987.500016 + 20 +17628.795772 + 30 +0.0 + 11 +5000.0 + 21 +17650.44638 + 31 +0.0 + 0 +LINE + 5 +D6B + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +17555.183585 + 30 +0.0 + 11 +4925.000016 + 21 +17563.843867 + 31 +0.0 + 0 +LINE + 5 +D6C + 8 +0 + 62 + 0 + 10 +4950.000016 + 20 +17607.145137 + 30 +0.0 + 11 +4962.500016 + 21 +17628.795772 + 31 +0.0 + 0 +LINE + 5 +D6D + 8 +0 + 62 + 0 + 10 +4987.500016 + 20 +17672.097043 + 30 +0.0 + 11 +5000.0 + 21 +17693.74765 + 31 +0.0 + 0 +LINE + 5 +D6E + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +17598.484855 + 30 +0.0 + 11 +4925.000016 + 21 +17607.145137 + 31 +0.0 + 0 +LINE + 5 +D6F + 8 +0 + 62 + 0 + 10 +4950.000016 + 20 +17650.446407 + 30 +0.0 + 11 +4962.500016 + 21 +17672.097043 + 31 +0.0 + 0 +LINE + 5 +D70 + 8 +0 + 62 + 0 + 10 +4987.500016 + 20 +17715.398313 + 30 +0.0 + 11 +5000.0 + 21 +17737.04892 + 31 +0.0 + 0 +LINE + 5 +D71 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +17641.786125 + 30 +0.0 + 11 +4925.000016 + 21 +17650.446407 + 31 +0.0 + 0 +LINE + 5 +D72 + 8 +0 + 62 + 0 + 10 +4950.000016 + 20 +17693.747678 + 30 +0.0 + 11 +4962.500016 + 21 +17715.398313 + 31 +0.0 + 0 +LINE + 5 +D73 + 8 +0 + 62 + 0 + 10 +4987.500016 + 20 +17758.699583 + 30 +0.0 + 11 +5000.0 + 21 +17780.35019 + 31 +0.0 + 0 +LINE + 5 +D74 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +17685.087395 + 30 +0.0 + 11 +4925.000016 + 21 +17693.747678 + 31 +0.0 + 0 +LINE + 5 +D75 + 8 +0 + 62 + 0 + 10 +4950.000016 + 20 +17737.048948 + 30 +0.0 + 11 +4962.500016 + 21 +17758.699583 + 31 +0.0 + 0 +LINE + 5 +D76 + 8 +0 + 62 + 0 + 10 +4987.500016 + 20 +17802.000853 + 30 +0.0 + 11 +5000.0 + 21 +17823.65146 + 31 +0.0 + 0 +LINE + 5 +D77 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +17728.388665 + 30 +0.0 + 11 +4925.000016 + 21 +17737.048948 + 31 +0.0 + 0 +LINE + 5 +D78 + 8 +0 + 62 + 0 + 10 +4950.000016 + 20 +17780.350218 + 30 +0.0 + 11 +4962.500016 + 21 +17802.000853 + 31 +0.0 + 0 +LINE + 5 +D79 + 8 +0 + 62 + 0 + 10 +4987.500016 + 20 +17845.302123 + 30 +0.0 + 11 +5000.0 + 21 +17866.95273 + 31 +0.0 + 0 +LINE + 5 +D7A + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +17771.689935 + 30 +0.0 + 11 +4925.000016 + 21 +17780.350218 + 31 +0.0 + 0 +LINE + 5 +D7B + 8 +0 + 62 + 0 + 10 +4950.000016 + 20 +17823.651488 + 30 +0.0 + 11 +4962.500016 + 21 +17845.302123 + 31 +0.0 + 0 +LINE + 5 +D7C + 8 +0 + 62 + 0 + 10 +4987.500016 + 20 +17888.603393 + 30 +0.0 + 11 +5000.0 + 21 +17910.254 + 31 +0.0 + 0 +LINE + 5 +D7D + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +17814.991205 + 30 +0.0 + 11 +4925.000016 + 21 +17823.651488 + 31 +0.0 + 0 +LINE + 5 +D7E + 8 +0 + 62 + 0 + 10 +4950.000016 + 20 +17866.952758 + 30 +0.0 + 11 +4962.500016 + 21 +17888.603393 + 31 +0.0 + 0 +LINE + 5 +D7F + 8 +0 + 62 + 0 + 10 +4987.500016 + 20 +17931.904663 + 30 +0.0 + 11 +5000.0 + 21 +17953.55527 + 31 +0.0 + 0 +LINE + 5 +D80 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +17858.292475 + 30 +0.0 + 11 +4925.000017 + 21 +17866.952758 + 31 +0.0 + 0 +LINE + 5 +D81 + 8 +0 + 62 + 0 + 10 +4950.000017 + 20 +17910.254028 + 30 +0.0 + 11 +4962.500017 + 21 +17931.904663 + 31 +0.0 + 0 +LINE + 5 +D82 + 8 +0 + 62 + 0 + 10 +4987.500017 + 20 +17975.205934 + 30 +0.0 + 11 +5000.0 + 21 +17996.85654 + 31 +0.0 + 0 +LINE + 5 +D83 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +17901.593745 + 30 +0.0 + 11 +4925.000017 + 21 +17910.254028 + 31 +0.0 + 0 +LINE + 5 +D84 + 8 +0 + 62 + 0 + 10 +4950.000017 + 20 +17953.555298 + 30 +0.0 + 11 +4962.500017 + 21 +17975.205934 + 31 +0.0 + 0 +LINE + 5 +D85 + 8 +0 + 62 + 0 + 10 +4987.500017 + 20 +18018.507204 + 30 +0.0 + 11 +5000.0 + 21 +18040.15781 + 31 +0.0 + 0 +LINE + 5 +D86 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +17944.895015 + 30 +0.0 + 11 +4925.000017 + 21 +17953.555298 + 31 +0.0 + 0 +LINE + 5 +D87 + 8 +0 + 62 + 0 + 10 +4950.000017 + 20 +17996.856569 + 30 +0.0 + 11 +4962.500017 + 21 +18018.507204 + 31 +0.0 + 0 +LINE + 5 +D88 + 8 +0 + 62 + 0 + 10 +4987.500017 + 20 +18061.808474 + 30 +0.0 + 11 +5000.0 + 21 +18083.45908 + 31 +0.0 + 0 +LINE + 5 +D89 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +17988.196285 + 30 +0.0 + 11 +4925.000017 + 21 +17996.856569 + 31 +0.0 + 0 +LINE + 5 +D8A + 8 +0 + 62 + 0 + 10 +4950.000017 + 20 +18040.157839 + 30 +0.0 + 11 +4962.500017 + 21 +18061.808474 + 31 +0.0 + 0 +LINE + 5 +D8B + 8 +0 + 62 + 0 + 10 +4987.500017 + 20 +18105.109744 + 30 +0.0 + 11 +5000.0 + 21 +18126.76035 + 31 +0.0 + 0 +LINE + 5 +D8C + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +18031.497555 + 30 +0.0 + 11 +4925.000017 + 21 +18040.157839 + 31 +0.0 + 0 +LINE + 5 +D8D + 8 +0 + 62 + 0 + 10 +4950.000017 + 20 +18083.459109 + 30 +0.0 + 11 +4962.500017 + 21 +18105.109744 + 31 +0.0 + 0 +LINE + 5 +D8E + 8 +0 + 62 + 0 + 10 +4987.500017 + 20 +18148.411014 + 30 +0.0 + 11 +5000.0 + 21 +18170.06162 + 31 +0.0 + 0 +LINE + 5 +D8F + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +18074.798825 + 30 +0.0 + 11 +4925.000017 + 21 +18083.459109 + 31 +0.0 + 0 +LINE + 5 +D90 + 8 +0 + 62 + 0 + 10 +4950.000017 + 20 +18126.760379 + 30 +0.0 + 11 +4962.500017 + 21 +18148.411014 + 31 +0.0 + 0 +LINE + 5 +D91 + 8 +0 + 62 + 0 + 10 +4987.500017 + 20 +18191.712284 + 30 +0.0 + 11 +5000.0 + 21 +18213.36289 + 31 +0.0 + 0 +LINE + 5 +D92 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +18118.100095 + 30 +0.0 + 11 +4925.000017 + 21 +18126.760379 + 31 +0.0 + 0 +LINE + 5 +D93 + 8 +0 + 62 + 0 + 10 +4950.000017 + 20 +18170.061649 + 30 +0.0 + 11 +4962.500017 + 21 +18191.712284 + 31 +0.0 + 0 +LINE + 5 +D94 + 8 +0 + 62 + 0 + 10 +4987.500017 + 20 +18235.013554 + 30 +0.0 + 11 +4996.874133 + 21 +18251.25 + 31 +0.0 + 0 +LINE + 5 +D95 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +18161.401365 + 30 +0.0 + 11 +4925.000017 + 21 +18170.061649 + 31 +0.0 + 0 +LINE + 5 +D96 + 8 +0 + 62 + 0 + 10 +4950.000017 + 20 +18213.362919 + 30 +0.0 + 11 +4962.500017 + 21 +18235.013554 + 31 +0.0 + 0 +LINE + 5 +D97 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +18204.702635 + 30 +0.0 + 11 +4925.000017 + 21 +18213.362919 + 31 +0.0 + 0 +LINE + 5 +D98 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +18248.003905 + 30 +0.0 + 11 +4921.874134 + 21 +18251.25 + 31 +0.0 + 0 +LINE + 5 +D99 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +17035.568345 + 30 +0.0 + 11 +4925.000015 + 21 +17044.228625 + 31 +0.0 + 0 +LINE + 5 +D9A + 8 +0 + 62 + 0 + 10 +4950.000015 + 20 +17087.529896 + 30 +0.0 + 11 +4962.500015 + 21 +17109.180531 + 31 +0.0 + 0 +LINE + 5 +D9B + 8 +0 + 62 + 0 + 10 +4987.500015 + 20 +17152.481801 + 30 +0.0 + 11 +5000.0 + 21 +17174.13241 + 31 +0.0 + 0 +LINE + 5 +D9C + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +16992.267075 + 30 +0.0 + 11 +4925.000015 + 21 +17000.927355 + 31 +0.0 + 0 +LINE + 5 +D9D + 8 +0 + 62 + 0 + 10 +4950.000015 + 20 +17044.228625 + 30 +0.0 + 11 +4962.500015 + 21 +17065.879261 + 31 +0.0 + 0 +LINE + 5 +D9E + 8 +0 + 62 + 0 + 10 +4987.500015 + 20 +17109.180531 + 30 +0.0 + 11 +5000.0 + 21 +17130.83114 + 31 +0.0 + 0 +LINE + 5 +D9F + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +16948.965805 + 30 +0.0 + 11 +4925.000015 + 21 +16957.626085 + 31 +0.0 + 0 +LINE + 5 +DA0 + 8 +0 + 62 + 0 + 10 +4950.000015 + 20 +17000.927355 + 30 +0.0 + 11 +4962.500015 + 21 +17022.57799 + 31 +0.0 + 0 +LINE + 5 +DA1 + 8 +0 + 62 + 0 + 10 +4987.500015 + 20 +17065.879261 + 30 +0.0 + 11 +5000.0 + 21 +17087.52987 + 31 +0.0 + 0 +LINE + 5 +DA2 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +16905.664535 + 30 +0.0 + 11 +4925.000015 + 21 +16914.324815 + 31 +0.0 + 0 +LINE + 5 +DA3 + 8 +0 + 62 + 0 + 10 +4950.000015 + 20 +16957.626085 + 30 +0.0 + 11 +4962.500015 + 21 +16979.27672 + 31 +0.0 + 0 +LINE + 5 +DA4 + 8 +0 + 62 + 0 + 10 +4987.500015 + 20 +17022.57799 + 30 +0.0 + 11 +5000.0 + 21 +17044.2286 + 31 +0.0 + 0 +LINE + 5 +DA5 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +16862.363265 + 30 +0.0 + 11 +4925.000015 + 21 +16871.023545 + 31 +0.0 + 0 +LINE + 5 +DA6 + 8 +0 + 62 + 0 + 10 +4950.000015 + 20 +16914.324815 + 30 +0.0 + 11 +4962.500015 + 21 +16935.97545 + 31 +0.0 + 0 +LINE + 5 +DA7 + 8 +0 + 62 + 0 + 10 +4987.500015 + 20 +16979.27672 + 30 +0.0 + 11 +5000.0 + 21 +17000.92733 + 31 +0.0 + 0 +LINE + 5 +DA8 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +16819.061995 + 30 +0.0 + 11 +4925.000015 + 21 +16827.722275 + 31 +0.0 + 0 +LINE + 5 +DA9 + 8 +0 + 62 + 0 + 10 +4950.000015 + 20 +16871.023545 + 30 +0.0 + 11 +4962.500015 + 21 +16892.67418 + 31 +0.0 + 0 +LINE + 5 +DAA + 8 +0 + 62 + 0 + 10 +4987.500015 + 20 +16935.97545 + 30 +0.0 + 11 +5000.0 + 21 +16957.62606 + 31 +0.0 + 0 +LINE + 5 +DAB + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +16775.760725 + 30 +0.0 + 11 +4925.000015 + 21 +16784.421005 + 31 +0.0 + 0 +LINE + 5 +DAC + 8 +0 + 62 + 0 + 10 +4950.000015 + 20 +16827.722275 + 30 +0.0 + 11 +4962.500015 + 21 +16849.37291 + 31 +0.0 + 0 +LINE + 5 +DAD + 8 +0 + 62 + 0 + 10 +4987.500015 + 20 +16892.67418 + 30 +0.0 + 11 +5000.0 + 21 +16914.32479 + 31 +0.0 + 0 +LINE + 5 +DAE + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +16732.459455 + 30 +0.0 + 11 +4925.000014 + 21 +16741.119734 + 31 +0.0 + 0 +LINE + 5 +DAF + 8 +0 + 62 + 0 + 10 +4950.000014 + 20 +16784.421005 + 30 +0.0 + 11 +4962.500014 + 21 +16806.07164 + 31 +0.0 + 0 +LINE + 5 +DB0 + 8 +0 + 62 + 0 + 10 +4987.500014 + 20 +16849.37291 + 30 +0.0 + 11 +5000.0 + 21 +16871.02352 + 31 +0.0 + 0 +LINE + 5 +DB1 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +16689.158185 + 30 +0.0 + 11 +4925.000014 + 21 +16697.818464 + 31 +0.0 + 0 +LINE + 5 +DB2 + 8 +0 + 62 + 0 + 10 +4950.000014 + 20 +16741.119734 + 30 +0.0 + 11 +4962.500014 + 21 +16762.77037 + 31 +0.0 + 0 +LINE + 5 +DB3 + 8 +0 + 62 + 0 + 10 +4987.500014 + 20 +16806.07164 + 30 +0.0 + 11 +5000.0 + 21 +16827.72225 + 31 +0.0 + 0 +LINE + 5 +DB4 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +16645.856915 + 30 +0.0 + 11 +4925.000014 + 21 +16654.517194 + 31 +0.0 + 0 +LINE + 5 +DB5 + 8 +0 + 62 + 0 + 10 +4950.000014 + 20 +16697.818464 + 30 +0.0 + 11 +4962.500014 + 21 +16719.469099 + 31 +0.0 + 0 +LINE + 5 +DB6 + 8 +0 + 62 + 0 + 10 +4987.500014 + 20 +16762.77037 + 30 +0.0 + 11 +5000.0 + 21 +16784.42098 + 31 +0.0 + 0 +LINE + 5 +DB7 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +16602.555645 + 30 +0.0 + 11 +4925.000014 + 21 +16611.215924 + 31 +0.0 + 0 +LINE + 5 +DB8 + 8 +0 + 62 + 0 + 10 +4950.000014 + 20 +16654.517194 + 30 +0.0 + 11 +4962.500014 + 21 +16676.167829 + 31 +0.0 + 0 +LINE + 5 +DB9 + 8 +0 + 62 + 0 + 10 +4987.500014 + 20 +16719.469099 + 30 +0.0 + 11 +5000.0 + 21 +16741.11971 + 31 +0.0 + 0 +LINE + 5 +DBA + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +16559.254375 + 30 +0.0 + 11 +4925.000014 + 21 +16567.914654 + 31 +0.0 + 0 +LINE + 5 +DBB + 8 +0 + 62 + 0 + 10 +4950.000014 + 20 +16611.215924 + 30 +0.0 + 11 +4962.500014 + 21 +16632.866559 + 31 +0.0 + 0 +LINE + 5 +DBC + 8 +0 + 62 + 0 + 10 +4987.500014 + 20 +16676.167829 + 30 +0.0 + 11 +5000.0 + 21 +16697.81844 + 31 +0.0 + 0 +LINE + 5 +DBD + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +16515.953105 + 30 +0.0 + 11 +4925.000014 + 21 +16524.613384 + 31 +0.0 + 0 +LINE + 5 +DBE + 8 +0 + 62 + 0 + 10 +4950.000014 + 20 +16567.914654 + 30 +0.0 + 11 +4962.500014 + 21 +16589.565289 + 31 +0.0 + 0 +LINE + 5 +DBF + 8 +0 + 62 + 0 + 10 +4987.500014 + 20 +16632.866559 + 30 +0.0 + 11 +5000.0 + 21 +16654.51717 + 31 +0.0 + 0 +LINE + 5 +DC0 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +16472.651835 + 30 +0.0 + 11 +4925.000014 + 21 +16481.312114 + 31 +0.0 + 0 +LINE + 5 +DC1 + 8 +0 + 62 + 0 + 10 +4950.000014 + 20 +16524.613384 + 30 +0.0 + 11 +4962.500014 + 21 +16546.264019 + 31 +0.0 + 0 +LINE + 5 +DC2 + 8 +0 + 62 + 0 + 10 +4987.500014 + 20 +16589.565289 + 30 +0.0 + 11 +5000.0 + 21 +16611.2159 + 31 +0.0 + 0 +LINE + 5 +DC3 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +16429.350565 + 30 +0.0 + 11 +4925.000014 + 21 +16438.010843 + 31 +0.0 + 0 +LINE + 5 +DC4 + 8 +0 + 62 + 0 + 10 +4950.000014 + 20 +16481.312114 + 30 +0.0 + 11 +4962.500014 + 21 +16502.962749 + 31 +0.0 + 0 +LINE + 5 +DC5 + 8 +0 + 62 + 0 + 10 +4987.500014 + 20 +16546.264019 + 30 +0.0 + 11 +5000.0 + 21 +16567.91463 + 31 +0.0 + 0 +LINE + 5 +DC6 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +16386.049295 + 30 +0.0 + 11 +4925.000014 + 21 +16394.709573 + 31 +0.0 + 0 +LINE + 5 +DC7 + 8 +0 + 62 + 0 + 10 +4950.000014 + 20 +16438.010843 + 30 +0.0 + 11 +4962.500014 + 21 +16459.661479 + 31 +0.0 + 0 +LINE + 5 +DC8 + 8 +0 + 62 + 0 + 10 +4987.500014 + 20 +16502.962749 + 30 +0.0 + 11 +5000.0 + 21 +16524.61336 + 31 +0.0 + 0 +LINE + 5 +DC9 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +16342.748025 + 30 +0.0 + 11 +4925.000014 + 21 +16351.408303 + 31 +0.0 + 0 +LINE + 5 +DCA + 8 +0 + 62 + 0 + 10 +4950.000014 + 20 +16394.709573 + 30 +0.0 + 11 +4962.500014 + 21 +16416.360208 + 31 +0.0 + 0 +LINE + 5 +DCB + 8 +0 + 62 + 0 + 10 +4987.500014 + 20 +16459.661479 + 30 +0.0 + 11 +5000.0 + 21 +16481.31209 + 31 +0.0 + 0 +LINE + 5 +DCC + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +16299.446755 + 30 +0.0 + 11 +4925.000014 + 21 +16308.107033 + 31 +0.0 + 0 +LINE + 5 +DCD + 8 +0 + 62 + 0 + 10 +4950.000014 + 20 +16351.408303 + 30 +0.0 + 11 +4962.500014 + 21 +16373.058938 + 31 +0.0 + 0 +LINE + 5 +DCE + 8 +0 + 62 + 0 + 10 +4987.500014 + 20 +16416.360208 + 30 +0.0 + 11 +5000.0 + 21 +16438.01082 + 31 +0.0 + 0 +LINE + 5 +DCF + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +16256.145485 + 30 +0.0 + 11 +4925.000014 + 21 +16264.805763 + 31 +0.0 + 0 +LINE + 5 +DD0 + 8 +0 + 62 + 0 + 10 +4950.000014 + 20 +16308.107033 + 30 +0.0 + 11 +4962.500014 + 21 +16329.757668 + 31 +0.0 + 0 +LINE + 5 +DD1 + 8 +0 + 62 + 0 + 10 +4987.500014 + 20 +16373.058938 + 30 +0.0 + 11 +5000.0 + 21 +16394.70955 + 31 +0.0 + 0 +LINE + 5 +DD2 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +16212.844215 + 30 +0.0 + 11 +4925.000013 + 21 +16221.504493 + 31 +0.0 + 0 +LINE + 5 +DD3 + 8 +0 + 62 + 0 + 10 +4950.000013 + 20 +16264.805763 + 30 +0.0 + 11 +4962.500013 + 21 +16286.456398 + 31 +0.0 + 0 +LINE + 5 +DD4 + 8 +0 + 62 + 0 + 10 +4987.500013 + 20 +16329.757668 + 30 +0.0 + 11 +5000.0 + 21 +16351.40828 + 31 +0.0 + 0 +LINE + 5 +DD5 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +16169.542945 + 30 +0.0 + 11 +4925.000013 + 21 +16178.203223 + 31 +0.0 + 0 +LINE + 5 +DD6 + 8 +0 + 62 + 0 + 10 +4950.000013 + 20 +16221.504493 + 30 +0.0 + 11 +4962.500013 + 21 +16243.155128 + 31 +0.0 + 0 +LINE + 5 +DD7 + 8 +0 + 62 + 0 + 10 +4987.500013 + 20 +16286.456398 + 30 +0.0 + 11 +5000.0 + 21 +16308.10701 + 31 +0.0 + 0 +LINE + 5 +DD8 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +16126.241675 + 30 +0.0 + 11 +4925.000013 + 21 +16134.901952 + 31 +0.0 + 0 +LINE + 5 +DD9 + 8 +0 + 62 + 0 + 10 +4950.000013 + 20 +16178.203223 + 30 +0.0 + 11 +4962.500013 + 21 +16199.853858 + 31 +0.0 + 0 +LINE + 5 +DDA + 8 +0 + 62 + 0 + 10 +4987.500013 + 20 +16243.155128 + 30 +0.0 + 11 +5000.0 + 21 +16264.80574 + 31 +0.0 + 0 +LINE + 5 +DDB + 8 +0 + 62 + 0 + 10 +4950.000013 + 20 +16134.901952 + 30 +0.0 + 11 +4962.500013 + 21 +16156.552588 + 31 +0.0 + 0 +LINE + 5 +DDC + 8 +0 + 62 + 0 + 10 +4987.500013 + 20 +16199.853858 + 30 +0.0 + 11 +5000.0 + 21 +16221.50447 + 31 +0.0 + 0 +LINE + 5 +DDD + 8 +0 + 62 + 0 + 10 +4987.500013 + 20 +16156.552588 + 30 +0.0 + 11 +5000.0 + 21 +16178.2032 + 31 +0.0 + 0 +LINE + 5 +DDE + 8 +0 + 62 + 0 + 10 +4987.787928 + 20 +16113.75 + 30 +0.0 + 11 +5000.0 + 21 +16134.90193 + 31 +0.0 + 0 +ENDBLK + 5 +DDF + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X44 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X44 + 1 + + 0 +LINE + 5 +DE1 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +11891.37747 + 30 +0.0 + 11 +4950.0 + 21 +11891.37747 + 31 +0.0 + 0 +LINE + 5 +DE2 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +11913.028105 + 30 +0.0 + 11 +4987.5 + 21 +11913.028105 + 31 +0.0 + 0 +LINE + 5 +DE3 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +11934.67874 + 30 +0.0 + 11 +4950.0 + 21 +11934.67874 + 31 +0.0 + 0 +LINE + 5 +DE4 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +11956.329375 + 30 +0.0 + 11 +4987.5 + 21 +11956.329375 + 31 +0.0 + 0 +LINE + 5 +DE5 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +11977.98001 + 30 +0.0 + 11 +4950.0 + 21 +11977.98001 + 31 +0.0 + 0 +LINE + 5 +DE6 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +11999.630645 + 30 +0.0 + 11 +4987.5 + 21 +11999.630645 + 31 +0.0 + 0 +LINE + 5 +DE7 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +12021.28128 + 30 +0.0 + 11 +4950.0 + 21 +12021.28128 + 31 +0.0 + 0 +LINE + 5 +DE8 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +12042.931915 + 30 +0.0 + 11 +4987.5 + 21 +12042.931915 + 31 +0.0 + 0 +LINE + 5 +DE9 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +12064.58255 + 30 +0.0 + 11 +4950.0 + 21 +12064.58255 + 31 +0.0 + 0 +LINE + 5 +DEA + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +12086.233185 + 30 +0.0 + 11 +4987.5 + 21 +12086.233185 + 31 +0.0 + 0 +LINE + 5 +DEB + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +12107.88382 + 30 +0.0 + 11 +4950.0 + 21 +12107.88382 + 31 +0.0 + 0 +LINE + 5 +DEC + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +12129.534455 + 30 +0.0 + 11 +4987.5 + 21 +12129.534455 + 31 +0.0 + 0 +LINE + 5 +DED + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +12151.18509 + 30 +0.0 + 11 +4950.0 + 21 +12151.18509 + 31 +0.0 + 0 +LINE + 5 +DEE + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +12172.835725 + 30 +0.0 + 11 +4987.5 + 21 +12172.835725 + 31 +0.0 + 0 +LINE + 5 +DEF + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +12194.48636 + 30 +0.0 + 11 +4950.0 + 21 +12194.48636 + 31 +0.0 + 0 +LINE + 5 +DF0 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +12216.136995 + 30 +0.0 + 11 +4987.5 + 21 +12216.136995 + 31 +0.0 + 0 +LINE + 5 +DF1 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +12237.78763 + 30 +0.0 + 11 +4950.0 + 21 +12237.78763 + 31 +0.0 + 0 +LINE + 5 +DF2 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +12259.438265 + 30 +0.0 + 11 +4987.5 + 21 +12259.438265 + 31 +0.0 + 0 +LINE + 5 +DF3 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +12281.0889 + 30 +0.0 + 11 +4950.0 + 21 +12281.0889 + 31 +0.0 + 0 +LINE + 5 +DF4 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +12302.739535 + 30 +0.0 + 11 +4987.5 + 21 +12302.739535 + 31 +0.0 + 0 +LINE + 5 +DF5 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +12324.39017 + 30 +0.0 + 11 +4950.0 + 21 +12324.39017 + 31 +0.0 + 0 +LINE + 5 +DF6 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +12346.040805 + 30 +0.0 + 11 +4987.5 + 21 +12346.040805 + 31 +0.0 + 0 +LINE + 5 +DF7 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +12367.69144 + 30 +0.0 + 11 +4950.0 + 21 +12367.69144 + 31 +0.0 + 0 +LINE + 5 +DF8 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +12389.342075 + 30 +0.0 + 11 +4987.5 + 21 +12389.342075 + 31 +0.0 + 0 +LINE + 5 +DF9 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +12410.99271 + 30 +0.0 + 11 +4950.0 + 21 +12410.99271 + 31 +0.0 + 0 +LINE + 5 +DFA + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +12432.643345 + 30 +0.0 + 11 +4987.5 + 21 +12432.643345 + 31 +0.0 + 0 +LINE + 5 +DFB + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +12454.29398 + 30 +0.0 + 11 +4950.0 + 21 +12454.29398 + 31 +0.0 + 0 +LINE + 5 +DFC + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +12475.944615 + 30 +0.0 + 11 +4987.5 + 21 +12475.944615 + 31 +0.0 + 0 +LINE + 5 +DFD + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +12497.59525 + 30 +0.0 + 11 +4950.0 + 21 +12497.59525 + 31 +0.0 + 0 +LINE + 5 +DFE + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +12519.245885 + 30 +0.0 + 11 +4987.5 + 21 +12519.245885 + 31 +0.0 + 0 +LINE + 5 +DFF + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +12540.89652 + 30 +0.0 + 11 +4950.0 + 21 +12540.89652 + 31 +0.0 + 0 +LINE + 5 +E00 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +12562.547155 + 30 +0.0 + 11 +4987.5 + 21 +12562.547155 + 31 +0.0 + 0 +LINE + 5 +E01 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +12584.19779 + 30 +0.0 + 11 +4950.0 + 21 +12584.19779 + 31 +0.0 + 0 +LINE + 5 +E02 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +12605.848425 + 30 +0.0 + 11 +4987.5 + 21 +12605.848425 + 31 +0.0 + 0 +LINE + 5 +E03 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +12627.49906 + 30 +0.0 + 11 +4950.0 + 21 +12627.49906 + 31 +0.0 + 0 +LINE + 5 +E04 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +12649.149695 + 30 +0.0 + 11 +4987.5 + 21 +12649.149695 + 31 +0.0 + 0 +LINE + 5 +E05 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +12670.80033 + 30 +0.0 + 11 +4950.0 + 21 +12670.80033 + 31 +0.0 + 0 +LINE + 5 +E06 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +12692.450965 + 30 +0.0 + 11 +4987.5 + 21 +12692.450965 + 31 +0.0 + 0 +LINE + 5 +E07 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +12714.1016 + 30 +0.0 + 11 +4950.0 + 21 +12714.1016 + 31 +0.0 + 0 +LINE + 5 +E08 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +12735.752235 + 30 +0.0 + 11 +4987.5 + 21 +12735.752235 + 31 +0.0 + 0 +LINE + 5 +E09 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +12757.40287 + 30 +0.0 + 11 +4950.0 + 21 +12757.40287 + 31 +0.0 + 0 +LINE + 5 +E0A + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +12779.053505 + 30 +0.0 + 11 +4987.5 + 21 +12779.053505 + 31 +0.0 + 0 +LINE + 5 +E0B + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +12800.70414 + 30 +0.0 + 11 +4950.0 + 21 +12800.70414 + 31 +0.0 + 0 +LINE + 5 +E0C + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +12822.354775 + 30 +0.0 + 11 +4987.5 + 21 +12822.354775 + 31 +0.0 + 0 +LINE + 5 +E0D + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +12844.00541 + 30 +0.0 + 11 +4950.0 + 21 +12844.00541 + 31 +0.0 + 0 +LINE + 5 +E0E + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +12865.656045 + 30 +0.0 + 11 +4987.5 + 21 +12865.656045 + 31 +0.0 + 0 +LINE + 5 +E0F + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +12887.30668 + 30 +0.0 + 11 +4950.0 + 21 +12887.30668 + 31 +0.0 + 0 +LINE + 5 +E10 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +12908.957315 + 30 +0.0 + 11 +4987.5 + 21 +12908.957315 + 31 +0.0 + 0 +LINE + 5 +E11 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +12930.60795 + 30 +0.0 + 11 +4950.0 + 21 +12930.60795 + 31 +0.0 + 0 +LINE + 5 +E12 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +12952.258585 + 30 +0.0 + 11 +4987.5 + 21 +12952.258585 + 31 +0.0 + 0 +LINE + 5 +E13 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +12973.90922 + 30 +0.0 + 11 +4950.0 + 21 +12973.90922 + 31 +0.0 + 0 +LINE + 5 +E14 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +12995.559855 + 30 +0.0 + 11 +4987.5 + 21 +12995.559855 + 31 +0.0 + 0 +LINE + 5 +E15 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +13017.21049 + 30 +0.0 + 11 +4950.0 + 21 +13017.21049 + 31 +0.0 + 0 +LINE + 5 +E16 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +13038.861125 + 30 +0.0 + 11 +4987.5 + 21 +13038.861125 + 31 +0.0 + 0 +LINE + 5 +E17 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +13060.51176 + 30 +0.0 + 11 +4950.0 + 21 +13060.51176 + 31 +0.0 + 0 +LINE + 5 +E18 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +13082.162395 + 30 +0.0 + 11 +4987.5 + 21 +13082.162395 + 31 +0.0 + 0 +LINE + 5 +E19 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +13103.81303 + 30 +0.0 + 11 +4950.0 + 21 +13103.81303 + 31 +0.0 + 0 +LINE + 5 +E1A + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +13125.463665 + 30 +0.0 + 11 +4987.5 + 21 +13125.463665 + 31 +0.0 + 0 +LINE + 5 +E1B + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +13147.1143 + 30 +0.0 + 11 +4950.0 + 21 +13147.1143 + 31 +0.0 + 0 +LINE + 5 +E1C + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +13168.764935 + 30 +0.0 + 11 +4987.5 + 21 +13168.764935 + 31 +0.0 + 0 +LINE + 5 +E1D + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +13190.41557 + 30 +0.0 + 11 +4950.0 + 21 +13190.41557 + 31 +0.0 + 0 +LINE + 5 +E1E + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +13212.066205 + 30 +0.0 + 11 +4987.5 + 21 +13212.066205 + 31 +0.0 + 0 +LINE + 5 +E1F + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +13233.71684 + 30 +0.0 + 11 +4950.0 + 21 +13233.71684 + 31 +0.0 + 0 +LINE + 5 +E20 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +13255.367475 + 30 +0.0 + 11 +4987.5 + 21 +13255.367475 + 31 +0.0 + 0 +LINE + 5 +E21 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +13277.01811 + 30 +0.0 + 11 +4950.0 + 21 +13277.01811 + 31 +0.0 + 0 +LINE + 5 +E22 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +13298.668745 + 30 +0.0 + 11 +4987.5 + 21 +13298.668745 + 31 +0.0 + 0 +LINE + 5 +E23 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +13320.31938 + 30 +0.0 + 11 +4950.0 + 21 +13320.31938 + 31 +0.0 + 0 +LINE + 5 +E24 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +13341.970015 + 30 +0.0 + 11 +4987.5 + 21 +13341.970015 + 31 +0.0 + 0 +LINE + 5 +E25 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +13363.62065 + 30 +0.0 + 11 +4950.0 + 21 +13363.62065 + 31 +0.0 + 0 +LINE + 5 +E26 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +13385.271285 + 30 +0.0 + 11 +4987.5 + 21 +13385.271285 + 31 +0.0 + 0 +LINE + 5 +E27 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +13406.92192 + 30 +0.0 + 11 +4950.0 + 21 +13406.92192 + 31 +0.0 + 0 +LINE + 5 +E28 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +13428.572555 + 30 +0.0 + 11 +4987.5 + 21 +13428.572555 + 31 +0.0 + 0 +LINE + 5 +E29 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +13450.22319 + 30 +0.0 + 11 +4950.0 + 21 +13450.22319 + 31 +0.0 + 0 +LINE + 5 +E2A + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +13471.873825 + 30 +0.0 + 11 +4987.5 + 21 +13471.873825 + 31 +0.0 + 0 +LINE + 5 +E2B + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +13493.52446 + 30 +0.0 + 11 +4950.0 + 21 +13493.52446 + 31 +0.0 + 0 +LINE + 5 +E2C + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +13515.175095 + 30 +0.0 + 11 +4987.5 + 21 +13515.175095 + 31 +0.0 + 0 +LINE + 5 +E2D + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +13536.82573 + 30 +0.0 + 11 +4950.0 + 21 +13536.82573 + 31 +0.0 + 0 +LINE + 5 +E2E + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +13558.476365 + 30 +0.0 + 11 +4987.5 + 21 +13558.476365 + 31 +0.0 + 0 +LINE + 5 +E2F + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +13580.127 + 30 +0.0 + 11 +4950.0 + 21 +13580.127 + 31 +0.0 + 0 +LINE + 5 +E30 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +13601.777635 + 30 +0.0 + 11 +4987.5 + 21 +13601.777635 + 31 +0.0 + 0 +LINE + 5 +E31 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +13623.42827 + 30 +0.0 + 11 +4950.0 + 21 +13623.42827 + 31 +0.0 + 0 +LINE + 5 +E32 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +13645.078905 + 30 +0.0 + 11 +4987.5 + 21 +13645.078905 + 31 +0.0 + 0 +LINE + 5 +E33 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +13666.72954 + 30 +0.0 + 11 +4950.0 + 21 +13666.72954 + 31 +0.0 + 0 +LINE + 5 +E34 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +13688.380175 + 30 +0.0 + 11 +4987.5 + 21 +13688.380175 + 31 +0.0 + 0 +LINE + 5 +E35 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +13710.03081 + 30 +0.0 + 11 +4950.0 + 21 +13710.03081 + 31 +0.0 + 0 +LINE + 5 +E36 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +13731.681445 + 30 +0.0 + 11 +4987.5 + 21 +13731.681445 + 31 +0.0 + 0 +LINE + 5 +E37 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +13753.33208 + 30 +0.0 + 11 +4950.0 + 21 +13753.33208 + 31 +0.0 + 0 +LINE + 5 +E38 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +13774.982715 + 30 +0.0 + 11 +4987.5 + 21 +13774.982715 + 31 +0.0 + 0 +LINE + 5 +E39 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +13796.63335 + 30 +0.0 + 11 +4950.0 + 21 +13796.63335 + 31 +0.0 + 0 +LINE + 5 +E3A + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +13818.283985 + 30 +0.0 + 11 +4987.5 + 21 +13818.283985 + 31 +0.0 + 0 +LINE + 5 +E3B + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +13839.93462 + 30 +0.0 + 11 +4950.0 + 21 +13839.93462 + 31 +0.0 + 0 +LINE + 5 +E3C + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +13861.585255 + 30 +0.0 + 11 +4987.5 + 21 +13861.585255 + 31 +0.0 + 0 +LINE + 5 +E3D + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +13883.23589 + 30 +0.0 + 11 +4950.0 + 21 +13883.23589 + 31 +0.0 + 0 +LINE + 5 +E3E + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +13904.886525 + 30 +0.0 + 11 +4987.5 + 21 +13904.886525 + 31 +0.0 + 0 +LINE + 5 +E3F + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +13926.53716 + 30 +0.0 + 11 +4950.0 + 21 +13926.53716 + 31 +0.0 + 0 +LINE + 5 +E40 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +13948.187795 + 30 +0.0 + 11 +4987.5 + 21 +13948.187795 + 31 +0.0 + 0 +LINE + 5 +E41 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +13969.83843 + 30 +0.0 + 11 +4950.0 + 21 +13969.83843 + 31 +0.0 + 0 +LINE + 5 +E42 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +13991.489065 + 30 +0.0 + 11 +4987.5 + 21 +13991.489065 + 31 +0.0 + 0 +LINE + 5 +E43 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +14013.1397 + 30 +0.0 + 11 +4950.0 + 21 +14013.1397 + 31 +0.0 + 0 +LINE + 5 +E44 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +14034.790335 + 30 +0.0 + 11 +4987.5 + 21 +14034.790335 + 31 +0.0 + 0 +LINE + 5 +E45 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +14056.44097 + 30 +0.0 + 11 +4950.0 + 21 +14056.44097 + 31 +0.0 + 0 +LINE + 5 +E46 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +14078.091605 + 30 +0.0 + 11 +4987.5 + 21 +14078.091605 + 31 +0.0 + 0 +LINE + 5 +E47 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +14099.74224 + 30 +0.0 + 11 +4950.0 + 21 +14099.74224 + 31 +0.0 + 0 +LINE + 5 +E48 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +14121.392875 + 30 +0.0 + 11 +4987.5 + 21 +14121.392875 + 31 +0.0 + 0 +LINE + 5 +E49 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +14143.04351 + 30 +0.0 + 11 +4950.0 + 21 +14143.04351 + 31 +0.0 + 0 +LINE + 5 +E4A + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +14164.694145 + 30 +0.0 + 11 +4987.5 + 21 +14164.694145 + 31 +0.0 + 0 +LINE + 5 +E4B + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +14186.34478 + 30 +0.0 + 11 +4950.0 + 21 +14186.34478 + 31 +0.0 + 0 +LINE + 5 +E4C + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +14207.995415 + 30 +0.0 + 11 +4987.5 + 21 +14207.995415 + 31 +0.0 + 0 +LINE + 5 +E4D + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +14229.64605 + 30 +0.0 + 11 +4950.0 + 21 +14229.64605 + 31 +0.0 + 0 +LINE + 5 +E4E + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +14251.296685 + 30 +0.0 + 11 +4987.5 + 21 +14251.296685 + 31 +0.0 + 0 +LINE + 5 +E4F + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +14272.94732 + 30 +0.0 + 11 +4950.0 + 21 +14272.94732 + 31 +0.0 + 0 +LINE + 5 +E50 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +14294.597955 + 30 +0.0 + 11 +4987.5 + 21 +14294.597955 + 31 +0.0 + 0 +LINE + 5 +E51 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +14316.24859 + 30 +0.0 + 11 +4950.0 + 21 +14316.24859 + 31 +0.0 + 0 +LINE + 5 +E52 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +14337.899225 + 30 +0.0 + 11 +4987.5 + 21 +14337.899225 + 31 +0.0 + 0 +LINE + 5 +E53 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +14359.54986 + 30 +0.0 + 11 +4950.0 + 21 +14359.54986 + 31 +0.0 + 0 +LINE + 5 +E54 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +14381.200495 + 30 +0.0 + 11 +4987.5 + 21 +14381.200495 + 31 +0.0 + 0 +LINE + 5 +E55 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +14402.85113 + 30 +0.0 + 11 +4950.0 + 21 +14402.85113 + 31 +0.0 + 0 +LINE + 5 +E56 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +14424.501765 + 30 +0.0 + 11 +4987.5 + 21 +14424.501765 + 31 +0.0 + 0 +LINE + 5 +E57 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +14446.1524 + 30 +0.0 + 11 +4950.0 + 21 +14446.1524 + 31 +0.0 + 0 +LINE + 5 +E58 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +14467.803035 + 30 +0.0 + 11 +4987.5 + 21 +14467.803035 + 31 +0.0 + 0 +LINE + 5 +E59 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +14489.45367 + 30 +0.0 + 11 +4950.0 + 21 +14489.45367 + 31 +0.0 + 0 +LINE + 5 +E5A + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +14511.104305 + 30 +0.0 + 11 +4987.5 + 21 +14511.104305 + 31 +0.0 + 0 +LINE + 5 +E5B + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +14532.75494 + 30 +0.0 + 11 +4950.0 + 21 +14532.75494 + 31 +0.0 + 0 +LINE + 5 +E5C + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +14554.405575 + 30 +0.0 + 11 +4987.5 + 21 +14554.405575 + 31 +0.0 + 0 +LINE + 5 +E5D + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +14576.05621 + 30 +0.0 + 11 +4950.0 + 21 +14576.05621 + 31 +0.0 + 0 +LINE + 5 +E5E + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +14597.706845 + 30 +0.0 + 11 +4987.5 + 21 +14597.706845 + 31 +0.0 + 0 +LINE + 5 +E5F + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +14619.35748 + 30 +0.0 + 11 +4950.0 + 21 +14619.35748 + 31 +0.0 + 0 +LINE + 5 +E60 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +11869.726835 + 30 +0.0 + 11 +4987.5 + 21 +11869.726835 + 31 +0.0 + 0 +LINE + 5 +E61 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +11848.0762 + 30 +0.0 + 11 +4950.0 + 21 +11848.0762 + 31 +0.0 + 0 +LINE + 5 +E62 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +11826.425565 + 30 +0.0 + 11 +4987.5 + 21 +11826.425565 + 31 +0.0 + 0 +LINE + 5 +E63 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +11804.77493 + 30 +0.0 + 11 +4950.0 + 21 +11804.77493 + 31 +0.0 + 0 +LINE + 5 +E64 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +11783.124295 + 30 +0.0 + 11 +4987.5 + 21 +11783.124295 + 31 +0.0 + 0 +LINE + 5 +E65 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +11761.47366 + 30 +0.0 + 11 +4950.0 + 21 +11761.47366 + 31 +0.0 + 0 +LINE + 5 +E66 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +11739.823025 + 30 +0.0 + 11 +4987.5 + 21 +11739.823025 + 31 +0.0 + 0 +LINE + 5 +E67 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +11718.17239 + 30 +0.0 + 11 +4950.0 + 21 +11718.17239 + 31 +0.0 + 0 +LINE + 5 +E68 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +11696.521755 + 30 +0.0 + 11 +4987.5 + 21 +11696.521755 + 31 +0.0 + 0 +LINE + 5 +E69 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +11674.87112 + 30 +0.0 + 11 +4950.0 + 21 +11674.87112 + 31 +0.0 + 0 +LINE + 5 +E6A + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +11653.220485 + 30 +0.0 + 11 +4987.5 + 21 +11653.220485 + 31 +0.0 + 0 +LINE + 5 +E6B + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +11631.56985 + 30 +0.0 + 11 +4950.0 + 21 +11631.56985 + 31 +0.0 + 0 +LINE + 5 +E6C + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +11609.919215 + 30 +0.0 + 11 +4987.5 + 21 +11609.919215 + 31 +0.0 + 0 +LINE + 5 +E6D + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +11588.26858 + 30 +0.0 + 11 +4950.0 + 21 +11588.26858 + 31 +0.0 + 0 +LINE + 5 +E6E + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +11566.617945 + 30 +0.0 + 11 +4987.5 + 21 +11566.617945 + 31 +0.0 + 0 +LINE + 5 +E6F + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +11544.96731 + 30 +0.0 + 11 +4950.0 + 21 +11544.96731 + 31 +0.0 + 0 +LINE + 5 +E70 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +11523.316675 + 30 +0.0 + 11 +4987.5 + 21 +11523.316675 + 31 +0.0 + 0 +LINE + 5 +E71 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +11501.66604 + 30 +0.0 + 11 +4950.0 + 21 +11501.66604 + 31 +0.0 + 0 +LINE + 5 +E72 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +11480.015405 + 30 +0.0 + 11 +4987.5 + 21 +11480.015405 + 31 +0.0 + 0 +LINE + 5 +E73 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +11458.36477 + 30 +0.0 + 11 +4950.0 + 21 +11458.36477 + 31 +0.0 + 0 +LINE + 5 +E74 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +11436.714135 + 30 +0.0 + 11 +4987.5 + 21 +11436.714135 + 31 +0.0 + 0 +LINE + 5 +E75 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +11415.0635 + 30 +0.0 + 11 +4950.0 + 21 +11415.0635 + 31 +0.0 + 0 +LINE + 5 +E76 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +11393.412865 + 30 +0.0 + 11 +4987.5 + 21 +11393.412865 + 31 +0.0 + 0 +LINE + 5 +E77 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +11371.76223 + 30 +0.0 + 11 +4950.0 + 21 +11371.76223 + 31 +0.0 + 0 +LINE + 5 +E78 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +11350.111595 + 30 +0.0 + 11 +4987.5 + 21 +11350.111595 + 31 +0.0 + 0 +LINE + 5 +E79 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +11328.46096 + 30 +0.0 + 11 +4950.0 + 21 +11328.46096 + 31 +0.0 + 0 +LINE + 5 +E7A + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +11306.810325 + 30 +0.0 + 11 +4987.5 + 21 +11306.810325 + 31 +0.0 + 0 +LINE + 5 +E7B + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +11285.15969 + 30 +0.0 + 11 +4950.0 + 21 +11285.15969 + 31 +0.0 + 0 +LINE + 5 +E7C + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +11263.509055 + 30 +0.0 + 11 +4987.5 + 21 +11263.509055 + 31 +0.0 + 0 +LINE + 5 +E7D + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +11241.85842 + 30 +0.0 + 11 +4950.0 + 21 +11241.85842 + 31 +0.0 + 0 +LINE + 5 +E7E + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +11220.207785 + 30 +0.0 + 11 +4987.5 + 21 +11220.207785 + 31 +0.0 + 0 +LINE + 5 +E7F + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +11198.55715 + 30 +0.0 + 11 +4950.0 + 21 +11198.55715 + 31 +0.0 + 0 +LINE + 5 +E80 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +11176.906515 + 30 +0.0 + 11 +4987.5 + 21 +11176.906515 + 31 +0.0 + 0 +LINE + 5 +E81 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +11155.25588 + 30 +0.0 + 11 +4950.0 + 21 +11155.25588 + 31 +0.0 + 0 +LINE + 5 +E82 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +11133.605245 + 30 +0.0 + 11 +4987.5 + 21 +11133.605245 + 31 +0.0 + 0 +LINE + 5 +E83 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +11111.95461 + 30 +0.0 + 11 +4950.0 + 21 +11111.95461 + 31 +0.0 + 0 +LINE + 5 +E84 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +11090.303975 + 30 +0.0 + 11 +4987.5 + 21 +11090.303975 + 31 +0.0 + 0 +LINE + 5 +E85 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +11068.65334 + 30 +0.0 + 11 +4950.0 + 21 +11068.65334 + 31 +0.0 + 0 +LINE + 5 +E86 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +11047.002705 + 30 +0.0 + 11 +4987.5 + 21 +11047.002705 + 31 +0.0 + 0 +LINE + 5 +E87 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +11025.35207 + 30 +0.0 + 11 +4950.0 + 21 +11025.35207 + 31 +0.0 + 0 +LINE + 5 +E88 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +11003.701435 + 30 +0.0 + 11 +4987.5 + 21 +11003.701435 + 31 +0.0 + 0 +LINE + 5 +E89 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +10982.0508 + 30 +0.0 + 11 +4950.0 + 21 +10982.0508 + 31 +0.0 + 0 +LINE + 5 +E8A + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +10960.400165 + 30 +0.0 + 11 +4987.5 + 21 +10960.400165 + 31 +0.0 + 0 +LINE + 5 +E8B + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +10938.74953 + 30 +0.0 + 11 +4950.0 + 21 +10938.74953 + 31 +0.0 + 0 +LINE + 5 +E8C + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +10917.098895 + 30 +0.0 + 11 +4987.5 + 21 +10917.098895 + 31 +0.0 + 0 +LINE + 5 +E8D + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +10895.44826 + 30 +0.0 + 11 +4950.0 + 21 +10895.44826 + 31 +0.0 + 0 +LINE + 5 +E8E + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +10873.797625 + 30 +0.0 + 11 +4987.5 + 21 +10873.797625 + 31 +0.0 + 0 +LINE + 5 +E8F + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +10852.14699 + 30 +0.0 + 11 +4950.0 + 21 +10852.14699 + 31 +0.0 + 0 +LINE + 5 +E90 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +10830.496355 + 30 +0.0 + 11 +4987.5 + 21 +10830.496355 + 31 +0.0 + 0 +LINE + 5 +E91 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +10808.84572 + 30 +0.0 + 11 +4950.0 + 21 +10808.84572 + 31 +0.0 + 0 +LINE + 5 +E92 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +10787.195085 + 30 +0.0 + 11 +4987.5 + 21 +10787.195085 + 31 +0.0 + 0 +LINE + 5 +E93 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +10765.54445 + 30 +0.0 + 11 +4950.0 + 21 +10765.54445 + 31 +0.0 + 0 +LINE + 5 +E94 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +10743.893815 + 30 +0.0 + 11 +4987.5 + 21 +10743.893815 + 31 +0.0 + 0 +LINE + 5 +E95 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +10722.24318 + 30 +0.0 + 11 +4950.0 + 21 +10722.24318 + 31 +0.0 + 0 +LINE + 5 +E96 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +10700.592545 + 30 +0.0 + 11 +4987.5 + 21 +10700.592545 + 31 +0.0 + 0 +LINE + 5 +E97 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +10678.94191 + 30 +0.0 + 11 +4950.0 + 21 +10678.94191 + 31 +0.0 + 0 +LINE + 5 +E98 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +10657.291275 + 30 +0.0 + 11 +4987.5 + 21 +10657.291275 + 31 +0.0 + 0 +LINE + 5 +E99 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +10635.64064 + 30 +0.0 + 11 +4950.0 + 21 +10635.64064 + 31 +0.0 + 0 +LINE + 5 +E9A + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +10613.990005 + 30 +0.0 + 11 +4987.5 + 21 +10613.990005 + 31 +0.0 + 0 +LINE + 5 +E9B + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +10592.33937 + 30 +0.0 + 11 +4950.0 + 21 +10592.33937 + 31 +0.0 + 0 +LINE + 5 +E9C + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +10570.688735 + 30 +0.0 + 11 +4987.5 + 21 +10570.688735 + 31 +0.0 + 0 +LINE + 5 +E9D + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +10549.0381 + 30 +0.0 + 11 +4950.0 + 21 +10549.0381 + 31 +0.0 + 0 +LINE + 5 +E9E + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +10527.387465 + 30 +0.0 + 11 +4987.5 + 21 +10527.387465 + 31 +0.0 + 0 +LINE + 5 +E9F + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +10505.73683 + 30 +0.0 + 11 +4950.0 + 21 +10505.73683 + 31 +0.0 + 0 +LINE + 5 +EA0 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +10484.086195 + 30 +0.0 + 11 +4987.5 + 21 +10484.086195 + 31 +0.0 + 0 +LINE + 5 +EA1 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +10462.43556 + 30 +0.0 + 11 +4950.0 + 21 +10462.43556 + 31 +0.0 + 0 +LINE + 5 +EA2 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +10440.784925 + 30 +0.0 + 11 +4987.5 + 21 +10440.784925 + 31 +0.0 + 0 +LINE + 5 +EA3 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +10419.13429 + 30 +0.0 + 11 +4950.0 + 21 +10419.13429 + 31 +0.0 + 0 +LINE + 5 +EA4 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +10397.483655 + 30 +0.0 + 11 +4987.5 + 21 +10397.483655 + 31 +0.0 + 0 +LINE + 5 +EA5 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +10375.83302 + 30 +0.0 + 11 +4950.0 + 21 +10375.83302 + 31 +0.0 + 0 +LINE + 5 +EA6 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +10354.182385 + 30 +0.0 + 11 +4987.5 + 21 +10354.182385 + 31 +0.0 + 0 +LINE + 5 +EA7 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +10332.53175 + 30 +0.0 + 11 +4950.0 + 21 +10332.53175 + 31 +0.0 + 0 +LINE + 5 +EA8 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +10310.881115 + 30 +0.0 + 11 +4987.5 + 21 +10310.881115 + 31 +0.0 + 0 +LINE + 5 +EA9 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +10289.23048 + 30 +0.0 + 11 +4950.0 + 21 +10289.23048 + 31 +0.0 + 0 +LINE + 5 +EAA + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +10267.579845 + 30 +0.0 + 11 +4987.5 + 21 +10267.579845 + 31 +0.0 + 0 +LINE + 5 +EAB + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +10245.92921 + 30 +0.0 + 11 +4950.0 + 21 +10245.92921 + 31 +0.0 + 0 +LINE + 5 +EAC + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +10224.278575 + 30 +0.0 + 11 +4987.5 + 21 +10224.278575 + 31 +0.0 + 0 +LINE + 5 +EAD + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +10202.62794 + 30 +0.0 + 11 +4950.0 + 21 +10202.62794 + 31 +0.0 + 0 +LINE + 5 +EAE + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +10180.977305 + 30 +0.0 + 11 +4987.5 + 21 +10180.977305 + 31 +0.0 + 0 +LINE + 5 +EAF + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +10159.32667 + 30 +0.0 + 11 +4950.0 + 21 +10159.32667 + 31 +0.0 + 0 +LINE + 5 +EB0 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +10137.676035 + 30 +0.0 + 11 +4987.5 + 21 +10137.676035 + 31 +0.0 + 0 +LINE + 5 +EB1 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +10116.0254 + 30 +0.0 + 11 +4950.0 + 21 +10116.0254 + 31 +0.0 + 0 +LINE + 5 +EB2 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +10094.374765 + 30 +0.0 + 11 +4987.5 + 21 +10094.374765 + 31 +0.0 + 0 +LINE + 5 +EB3 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +10072.72413 + 30 +0.0 + 11 +4950.0 + 21 +10072.72413 + 31 +0.0 + 0 +LINE + 5 +EB4 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +10051.073495 + 30 +0.0 + 11 +4987.5 + 21 +10051.073495 + 31 +0.0 + 0 +LINE + 5 +EB5 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +10029.42286 + 30 +0.0 + 11 +4950.0 + 21 +10029.42286 + 31 +0.0 + 0 +LINE + 5 +EB6 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +10007.772225 + 30 +0.0 + 11 +4987.5 + 21 +10007.772225 + 31 +0.0 + 0 +LINE + 5 +EB7 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +9986.12159 + 30 +0.0 + 11 +4950.0 + 21 +9986.12159 + 31 +0.0 + 0 +LINE + 5 +EB8 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +9964.470955 + 30 +0.0 + 11 +4987.5 + 21 +9964.470955 + 31 +0.0 + 0 +LINE + 5 +EB9 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +9942.82032 + 30 +0.0 + 11 +4950.0 + 21 +9942.82032 + 31 +0.0 + 0 +LINE + 5 +EBA + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +9921.169685 + 30 +0.0 + 11 +4987.5 + 21 +9921.169685 + 31 +0.0 + 0 +LINE + 5 +EBB + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +9899.51905 + 30 +0.0 + 11 +4950.0 + 21 +9899.51905 + 31 +0.0 + 0 +LINE + 5 +EBC + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +9877.868415 + 30 +0.0 + 11 +4987.5 + 21 +9877.868415 + 31 +0.0 + 0 +LINE + 5 +EBD + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +9856.21778 + 30 +0.0 + 11 +4950.0 + 21 +9856.21778 + 31 +0.0 + 0 +LINE + 5 +EBE + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +9834.567145 + 30 +0.0 + 11 +4987.5 + 21 +9834.567145 + 31 +0.0 + 0 +LINE + 5 +EBF + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +9812.91651 + 30 +0.0 + 11 +4950.0 + 21 +9812.91651 + 31 +0.0 + 0 +LINE + 5 +EC0 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +9791.265875 + 30 +0.0 + 11 +4987.5 + 21 +9791.265875 + 31 +0.0 + 0 +LINE + 5 +EC1 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +9769.61524 + 30 +0.0 + 11 +4950.0 + 21 +9769.61524 + 31 +0.0 + 0 +LINE + 5 +EC2 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +9747.964605 + 30 +0.0 + 11 +4987.5 + 21 +9747.964605 + 31 +0.0 + 0 +LINE + 5 +EC3 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +9726.31397 + 30 +0.0 + 11 +4950.0 + 21 +9726.31397 + 31 +0.0 + 0 +LINE + 5 +EC4 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +9704.663335 + 30 +0.0 + 11 +4987.5 + 21 +9704.663335 + 31 +0.0 + 0 +LINE + 5 +EC5 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +9683.0127 + 30 +0.0 + 11 +4950.0 + 21 +9683.0127 + 31 +0.0 + 0 +LINE + 5 +EC6 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +9661.362065 + 30 +0.0 + 11 +4987.5 + 21 +9661.362065 + 31 +0.0 + 0 +LINE + 5 +EC7 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +9639.71143 + 30 +0.0 + 11 +4950.0 + 21 +9639.71143 + 31 +0.0 + 0 +LINE + 5 +EC8 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +9618.060795 + 30 +0.0 + 11 +4987.5 + 21 +9618.060795 + 31 +0.0 + 0 +LINE + 5 +EC9 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +9596.41016 + 30 +0.0 + 11 +4950.0 + 21 +9596.41016 + 31 +0.0 + 0 +LINE + 5 +ECA + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +9574.759525 + 30 +0.0 + 11 +4987.5 + 21 +9574.759525 + 31 +0.0 + 0 +LINE + 5 +ECB + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +9553.10889 + 30 +0.0 + 11 +4950.0 + 21 +9553.10889 + 31 +0.0 + 0 +LINE + 5 +ECC + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +9531.458255 + 30 +0.0 + 11 +4987.5 + 21 +9531.458255 + 31 +0.0 + 0 +LINE + 5 +ECD + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +9509.80762 + 30 +0.0 + 11 +4950.0 + 21 +9509.80762 + 31 +0.0 + 0 +LINE + 5 +ECE + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +9488.156985 + 30 +0.0 + 11 +4987.5 + 21 +9488.156985 + 31 +0.0 + 0 +LINE + 5 +ECF + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +9466.50635 + 30 +0.0 + 11 +4950.0 + 21 +9466.50635 + 31 +0.0 + 0 +LINE + 5 +ED0 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +9444.855715 + 30 +0.0 + 11 +4987.5 + 21 +9444.855715 + 31 +0.0 + 0 +LINE + 5 +ED1 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +9423.20508 + 30 +0.0 + 11 +4950.0 + 21 +9423.20508 + 31 +0.0 + 0 +LINE + 5 +ED2 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +9401.554445 + 30 +0.0 + 11 +4987.5 + 21 +9401.554445 + 31 +0.0 + 0 +LINE + 5 +ED3 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +9379.90381 + 30 +0.0 + 11 +4950.0 + 21 +9379.90381 + 31 +0.0 + 0 +LINE + 5 +ED4 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +9358.253175 + 30 +0.0 + 11 +4987.5 + 21 +9358.253175 + 31 +0.0 + 0 +LINE + 5 +ED5 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +9336.60254 + 30 +0.0 + 11 +4950.0 + 21 +9336.60254 + 31 +0.0 + 0 +LINE + 5 +ED6 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +9314.951905 + 30 +0.0 + 11 +4987.5 + 21 +9314.951905 + 31 +0.0 + 0 +LINE + 5 +ED7 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +9293.30127 + 30 +0.0 + 11 +4950.0 + 21 +9293.30127 + 31 +0.0 + 0 +LINE + 5 +ED8 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +9271.650635 + 30 +0.0 + 11 +4987.5 + 21 +9271.650635 + 31 +0.0 + 0 +LINE + 5 +ED9 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +9250.0 + 30 +0.0 + 11 +4950.0 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +EDA + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +9228.349365 + 30 +0.0 + 11 +4987.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EDB + 8 +0 + 62 + 0 + 10 +5037.5 + 20 +9228.349365 + 30 +0.0 + 11 +5062.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EDC + 8 +0 + 62 + 0 + 10 +5112.5 + 20 +9228.349365 + 30 +0.0 + 11 +5137.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EDD + 8 +0 + 62 + 0 + 10 +5187.5 + 20 +9228.349365 + 30 +0.0 + 11 +5212.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EDE + 8 +0 + 62 + 0 + 10 +5262.5 + 20 +9228.349365 + 30 +0.0 + 11 +5287.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EDF + 8 +0 + 62 + 0 + 10 +5337.5 + 20 +9228.349365 + 30 +0.0 + 11 +5362.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EE0 + 8 +0 + 62 + 0 + 10 +5412.5 + 20 +9228.349365 + 30 +0.0 + 11 +5437.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EE1 + 8 +0 + 62 + 0 + 10 +5487.5 + 20 +9228.349365 + 30 +0.0 + 11 +5512.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EE2 + 8 +0 + 62 + 0 + 10 +5562.5 + 20 +9228.349365 + 30 +0.0 + 11 +5587.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EE3 + 8 +0 + 62 + 0 + 10 +5637.5 + 20 +9228.349365 + 30 +0.0 + 11 +5662.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EE4 + 8 +0 + 62 + 0 + 10 +5712.5 + 20 +9228.349365 + 30 +0.0 + 11 +5737.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EE5 + 8 +0 + 62 + 0 + 10 +5787.5 + 20 +9228.349365 + 30 +0.0 + 11 +5812.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EE6 + 8 +0 + 62 + 0 + 10 +5862.5 + 20 +9228.349365 + 30 +0.0 + 11 +5887.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EE7 + 8 +0 + 62 + 0 + 10 +5937.5 + 20 +9228.349365 + 30 +0.0 + 11 +5962.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EE8 + 8 +0 + 62 + 0 + 10 +6012.5 + 20 +9228.349365 + 30 +0.0 + 11 +6037.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EE9 + 8 +0 + 62 + 0 + 10 +6087.5 + 20 +9228.349365 + 30 +0.0 + 11 +6112.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EEA + 8 +0 + 62 + 0 + 10 +6162.5 + 20 +9228.349365 + 30 +0.0 + 11 +6187.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EEB + 8 +0 + 62 + 0 + 10 +6237.5 + 20 +9228.349365 + 30 +0.0 + 11 +6262.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EEC + 8 +0 + 62 + 0 + 10 +6312.5 + 20 +9228.349365 + 30 +0.0 + 11 +6337.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EED + 8 +0 + 62 + 0 + 10 +6387.5 + 20 +9228.349365 + 30 +0.0 + 11 +6412.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EEE + 8 +0 + 62 + 0 + 10 +6462.5 + 20 +9228.349365 + 30 +0.0 + 11 +6487.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EEF + 8 +0 + 62 + 0 + 10 +6537.5 + 20 +9228.349365 + 30 +0.0 + 11 +6562.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EF0 + 8 +0 + 62 + 0 + 10 +6612.5 + 20 +9228.349365 + 30 +0.0 + 11 +6637.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EF1 + 8 +0 + 62 + 0 + 10 +6687.5 + 20 +9228.349365 + 30 +0.0 + 11 +6712.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EF2 + 8 +0 + 62 + 0 + 10 +6762.5 + 20 +9228.349365 + 30 +0.0 + 11 +6787.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EF3 + 8 +0 + 62 + 0 + 10 +6837.5 + 20 +9228.349365 + 30 +0.0 + 11 +6862.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EF4 + 8 +0 + 62 + 0 + 10 +6912.5 + 20 +9228.349365 + 30 +0.0 + 11 +6937.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EF5 + 8 +0 + 62 + 0 + 10 +6987.5 + 20 +9228.349365 + 30 +0.0 + 11 +7012.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EF6 + 8 +0 + 62 + 0 + 10 +7062.5 + 20 +9228.349365 + 30 +0.0 + 11 +7087.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EF7 + 8 +0 + 62 + 0 + 10 +7137.5 + 20 +9228.349365 + 30 +0.0 + 11 +7162.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EF8 + 8 +0 + 62 + 0 + 10 +7212.5 + 20 +9228.349365 + 30 +0.0 + 11 +7237.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EF9 + 8 +0 + 62 + 0 + 10 +7287.5 + 20 +9228.349365 + 30 +0.0 + 11 +7312.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EFA + 8 +0 + 62 + 0 + 10 +7362.5 + 20 +9228.349365 + 30 +0.0 + 11 +7387.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EFB + 8 +0 + 62 + 0 + 10 +7437.5 + 20 +9228.349365 + 30 +0.0 + 11 +7462.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EFC + 8 +0 + 62 + 0 + 10 +7512.5 + 20 +9228.349365 + 30 +0.0 + 11 +7537.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EFD + 8 +0 + 62 + 0 + 10 +7587.5 + 20 +9228.349365 + 30 +0.0 + 11 +7612.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EFE + 8 +0 + 62 + 0 + 10 +7662.5 + 20 +9228.349365 + 30 +0.0 + 11 +7687.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EFF + 8 +0 + 62 + 0 + 10 +7737.5 + 20 +9228.349365 + 30 +0.0 + 11 +7751.25 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +F00 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +9206.69873 + 30 +0.0 + 11 +4950.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F01 + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +9206.69873 + 30 +0.0 + 11 +5025.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F02 + 8 +0 + 62 + 0 + 10 +5075.0 + 20 +9206.69873 + 30 +0.0 + 11 +5100.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F03 + 8 +0 + 62 + 0 + 10 +5150.0 + 20 +9206.69873 + 30 +0.0 + 11 +5175.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F04 + 8 +0 + 62 + 0 + 10 +5225.0 + 20 +9206.69873 + 30 +0.0 + 11 +5250.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F05 + 8 +0 + 62 + 0 + 10 +5300.0 + 20 +9206.69873 + 30 +0.0 + 11 +5325.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F06 + 8 +0 + 62 + 0 + 10 +5375.0 + 20 +9206.69873 + 30 +0.0 + 11 +5400.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F07 + 8 +0 + 62 + 0 + 10 +5450.0 + 20 +9206.69873 + 30 +0.0 + 11 +5475.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F08 + 8 +0 + 62 + 0 + 10 +5525.0 + 20 +9206.69873 + 30 +0.0 + 11 +5550.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F09 + 8 +0 + 62 + 0 + 10 +5600.0 + 20 +9206.69873 + 30 +0.0 + 11 +5625.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F0A + 8 +0 + 62 + 0 + 10 +5675.0 + 20 +9206.69873 + 30 +0.0 + 11 +5700.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F0B + 8 +0 + 62 + 0 + 10 +5750.0 + 20 +9206.69873 + 30 +0.0 + 11 +5775.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F0C + 8 +0 + 62 + 0 + 10 +5825.0 + 20 +9206.69873 + 30 +0.0 + 11 +5850.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F0D + 8 +0 + 62 + 0 + 10 +5900.0 + 20 +9206.69873 + 30 +0.0 + 11 +5925.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F0E + 8 +0 + 62 + 0 + 10 +5975.0 + 20 +9206.69873 + 30 +0.0 + 11 +6000.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F0F + 8 +0 + 62 + 0 + 10 +6050.0 + 20 +9206.69873 + 30 +0.0 + 11 +6075.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F10 + 8 +0 + 62 + 0 + 10 +6125.0 + 20 +9206.69873 + 30 +0.0 + 11 +6150.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F11 + 8 +0 + 62 + 0 + 10 +6200.0 + 20 +9206.69873 + 30 +0.0 + 11 +6225.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F12 + 8 +0 + 62 + 0 + 10 +6275.0 + 20 +9206.69873 + 30 +0.0 + 11 +6300.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F13 + 8 +0 + 62 + 0 + 10 +6350.0 + 20 +9206.69873 + 30 +0.0 + 11 +6375.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F14 + 8 +0 + 62 + 0 + 10 +6425.0 + 20 +9206.69873 + 30 +0.0 + 11 +6450.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F15 + 8 +0 + 62 + 0 + 10 +6500.0 + 20 +9206.69873 + 30 +0.0 + 11 +6525.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F16 + 8 +0 + 62 + 0 + 10 +6575.0 + 20 +9206.69873 + 30 +0.0 + 11 +6600.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F17 + 8 +0 + 62 + 0 + 10 +6650.0 + 20 +9206.69873 + 30 +0.0 + 11 +6675.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F18 + 8 +0 + 62 + 0 + 10 +6725.0 + 20 +9206.69873 + 30 +0.0 + 11 +6750.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F19 + 8 +0 + 62 + 0 + 10 +6800.0 + 20 +9206.69873 + 30 +0.0 + 11 +6825.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F1A + 8 +0 + 62 + 0 + 10 +6875.0 + 20 +9206.69873 + 30 +0.0 + 11 +6900.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F1B + 8 +0 + 62 + 0 + 10 +6950.0 + 20 +9206.69873 + 30 +0.0 + 11 +6975.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F1C + 8 +0 + 62 + 0 + 10 +7025.0 + 20 +9206.69873 + 30 +0.0 + 11 +7050.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F1D + 8 +0 + 62 + 0 + 10 +7100.0 + 20 +9206.69873 + 30 +0.0 + 11 +7125.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F1E + 8 +0 + 62 + 0 + 10 +7175.0 + 20 +9206.69873 + 30 +0.0 + 11 +7200.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F1F + 8 +0 + 62 + 0 + 10 +7250.0 + 20 +9206.69873 + 30 +0.0 + 11 +7275.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F20 + 8 +0 + 62 + 0 + 10 +7325.0 + 20 +9206.69873 + 30 +0.0 + 11 +7350.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F21 + 8 +0 + 62 + 0 + 10 +7400.0 + 20 +9206.69873 + 30 +0.0 + 11 +7425.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F22 + 8 +0 + 62 + 0 + 10 +7475.0 + 20 +9206.69873 + 30 +0.0 + 11 +7500.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F23 + 8 +0 + 62 + 0 + 10 +7550.0 + 20 +9206.69873 + 30 +0.0 + 11 +7575.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F24 + 8 +0 + 62 + 0 + 10 +7625.0 + 20 +9206.69873 + 30 +0.0 + 11 +7650.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F25 + 8 +0 + 62 + 0 + 10 +7700.0 + 20 +9206.69873 + 30 +0.0 + 11 +7725.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F26 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +9185.048095 + 30 +0.0 + 11 +4987.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F27 + 8 +0 + 62 + 0 + 10 +5037.5 + 20 +9185.048095 + 30 +0.0 + 11 +5062.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F28 + 8 +0 + 62 + 0 + 10 +5112.5 + 20 +9185.048095 + 30 +0.0 + 11 +5137.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F29 + 8 +0 + 62 + 0 + 10 +5187.5 + 20 +9185.048095 + 30 +0.0 + 11 +5212.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F2A + 8 +0 + 62 + 0 + 10 +5262.5 + 20 +9185.048095 + 30 +0.0 + 11 +5287.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F2B + 8 +0 + 62 + 0 + 10 +5337.5 + 20 +9185.048095 + 30 +0.0 + 11 +5362.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F2C + 8 +0 + 62 + 0 + 10 +5412.5 + 20 +9185.048095 + 30 +0.0 + 11 +5437.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F2D + 8 +0 + 62 + 0 + 10 +5487.5 + 20 +9185.048095 + 30 +0.0 + 11 +5512.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F2E + 8 +0 + 62 + 0 + 10 +5562.5 + 20 +9185.048095 + 30 +0.0 + 11 +5587.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F2F + 8 +0 + 62 + 0 + 10 +5637.5 + 20 +9185.048095 + 30 +0.0 + 11 +5662.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F30 + 8 +0 + 62 + 0 + 10 +5712.5 + 20 +9185.048095 + 30 +0.0 + 11 +5737.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F31 + 8 +0 + 62 + 0 + 10 +5787.5 + 20 +9185.048095 + 30 +0.0 + 11 +5812.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F32 + 8 +0 + 62 + 0 + 10 +5862.5 + 20 +9185.048095 + 30 +0.0 + 11 +5887.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F33 + 8 +0 + 62 + 0 + 10 +5937.5 + 20 +9185.048095 + 30 +0.0 + 11 +5962.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F34 + 8 +0 + 62 + 0 + 10 +6012.5 + 20 +9185.048095 + 30 +0.0 + 11 +6037.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F35 + 8 +0 + 62 + 0 + 10 +6087.5 + 20 +9185.048095 + 30 +0.0 + 11 +6112.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F36 + 8 +0 + 62 + 0 + 10 +6162.5 + 20 +9185.048095 + 30 +0.0 + 11 +6187.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F37 + 8 +0 + 62 + 0 + 10 +6237.5 + 20 +9185.048095 + 30 +0.0 + 11 +6262.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F38 + 8 +0 + 62 + 0 + 10 +6312.5 + 20 +9185.048095 + 30 +0.0 + 11 +6337.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F39 + 8 +0 + 62 + 0 + 10 +6387.5 + 20 +9185.048095 + 30 +0.0 + 11 +6412.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F3A + 8 +0 + 62 + 0 + 10 +6462.5 + 20 +9185.048095 + 30 +0.0 + 11 +6487.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F3B + 8 +0 + 62 + 0 + 10 +6537.5 + 20 +9185.048095 + 30 +0.0 + 11 +6562.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F3C + 8 +0 + 62 + 0 + 10 +6612.5 + 20 +9185.048095 + 30 +0.0 + 11 +6637.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F3D + 8 +0 + 62 + 0 + 10 +6687.5 + 20 +9185.048095 + 30 +0.0 + 11 +6712.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F3E + 8 +0 + 62 + 0 + 10 +6762.5 + 20 +9185.048095 + 30 +0.0 + 11 +6787.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F3F + 8 +0 + 62 + 0 + 10 +6837.5 + 20 +9185.048095 + 30 +0.0 + 11 +6862.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F40 + 8 +0 + 62 + 0 + 10 +6912.5 + 20 +9185.048095 + 30 +0.0 + 11 +6937.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F41 + 8 +0 + 62 + 0 + 10 +6987.5 + 20 +9185.048095 + 30 +0.0 + 11 +7012.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F42 + 8 +0 + 62 + 0 + 10 +7062.5 + 20 +9185.048095 + 30 +0.0 + 11 +7087.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F43 + 8 +0 + 62 + 0 + 10 +7137.5 + 20 +9185.048095 + 30 +0.0 + 11 +7162.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F44 + 8 +0 + 62 + 0 + 10 +7212.5 + 20 +9185.048095 + 30 +0.0 + 11 +7237.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F45 + 8 +0 + 62 + 0 + 10 +7287.5 + 20 +9185.048095 + 30 +0.0 + 11 +7312.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F46 + 8 +0 + 62 + 0 + 10 +7362.5 + 20 +9185.048095 + 30 +0.0 + 11 +7387.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F47 + 8 +0 + 62 + 0 + 10 +7437.5 + 20 +9185.048095 + 30 +0.0 + 11 +7462.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F48 + 8 +0 + 62 + 0 + 10 +7512.5 + 20 +9185.048095 + 30 +0.0 + 11 +7537.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F49 + 8 +0 + 62 + 0 + 10 +7587.5 + 20 +9185.048095 + 30 +0.0 + 11 +7612.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F4A + 8 +0 + 62 + 0 + 10 +7662.5 + 20 +9185.048095 + 30 +0.0 + 11 +7687.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F4B + 8 +0 + 62 + 0 + 10 +7737.5 + 20 +9185.048095 + 30 +0.0 + 11 +7751.25 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F4C + 8 +0 + 62 + 0 + 10 +4999.999991 + 20 +14186.344796 + 30 +0.0 + 11 +4987.499991 + 21 +14207.995431 + 31 +0.0 + 0 +LINE + 5 +F4D + 8 +0 + 62 + 0 + 10 +4962.499991 + 20 +14251.296701 + 30 +0.0 + 11 +4949.999991 + 21 +14272.947337 + 31 +0.0 + 0 +LINE + 5 +F4E + 8 +0 + 62 + 0 + 10 +4924.999991 + 20 +14316.248607 + 30 +0.0 + 11 +4920.0 + 21 +14324.908845 + 31 +0.0 + 0 +LINE + 5 +F4F + 8 +0 + 62 + 0 + 10 +4999.999991 + 20 +14143.043526 + 30 +0.0 + 11 +4987.499991 + 21 +14164.694161 + 31 +0.0 + 0 +LINE + 5 +F50 + 8 +0 + 62 + 0 + 10 +4962.499991 + 20 +14207.995431 + 30 +0.0 + 11 +4949.999991 + 21 +14229.646066 + 31 +0.0 + 0 +LINE + 5 +F51 + 8 +0 + 62 + 0 + 10 +4924.999991 + 20 +14272.947337 + 30 +0.0 + 11 +4920.0 + 21 +14281.607575 + 31 +0.0 + 0 +LINE + 5 +F52 + 8 +0 + 62 + 0 + 10 +4999.999991 + 20 +14099.742256 + 30 +0.0 + 11 +4987.499991 + 21 +14121.392891 + 31 +0.0 + 0 +LINE + 5 +F53 + 8 +0 + 62 + 0 + 10 +4962.499991 + 20 +14164.694161 + 30 +0.0 + 11 +4949.999991 + 21 +14186.344796 + 31 +0.0 + 0 +LINE + 5 +F54 + 8 +0 + 62 + 0 + 10 +4924.999991 + 20 +14229.646066 + 30 +0.0 + 11 +4920.0 + 21 +14238.306305 + 31 +0.0 + 0 +LINE + 5 +F55 + 8 +0 + 62 + 0 + 10 +4999.999991 + 20 +14056.440986 + 30 +0.0 + 11 +4987.499991 + 21 +14078.091621 + 31 +0.0 + 0 +LINE + 5 +F56 + 8 +0 + 62 + 0 + 10 +4962.499991 + 20 +14121.392891 + 30 +0.0 + 11 +4949.999991 + 21 +14143.043526 + 31 +0.0 + 0 +LINE + 5 +F57 + 8 +0 + 62 + 0 + 10 +4924.999991 + 20 +14186.344796 + 30 +0.0 + 11 +4920.0 + 21 +14195.005035 + 31 +0.0 + 0 +LINE + 5 +F58 + 8 +0 + 62 + 0 + 10 +4999.999991 + 20 +14013.139716 + 30 +0.0 + 11 +4987.499991 + 21 +14034.790351 + 31 +0.0 + 0 +LINE + 5 +F59 + 8 +0 + 62 + 0 + 10 +4962.499991 + 20 +14078.091621 + 30 +0.0 + 11 +4949.999991 + 21 +14099.742256 + 31 +0.0 + 0 +LINE + 5 +F5A + 8 +0 + 62 + 0 + 10 +4924.999991 + 20 +14143.043526 + 30 +0.0 + 11 +4920.0 + 21 +14151.703765 + 31 +0.0 + 0 +LINE + 5 +F5B + 8 +0 + 62 + 0 + 10 +7737.499991 + 20 +9228.34936 + 30 +0.0 + 11 +7724.999991 + 21 +9249.999995 + 31 +0.0 + 0 +LINE + 5 +F5C + 8 +0 + 62 + 0 + 10 +4999.999991 + 20 +13969.838445 + 30 +0.0 + 11 +4987.499991 + 21 +13991.489081 + 31 +0.0 + 0 +LINE + 5 +F5D + 8 +0 + 62 + 0 + 10 +4962.499991 + 20 +14034.790351 + 30 +0.0 + 11 +4949.999991 + 21 +14056.440986 + 31 +0.0 + 0 +LINE + 5 +F5E + 8 +0 + 62 + 0 + 10 +4924.999991 + 20 +14099.742256 + 30 +0.0 + 11 +4920.0 + 21 +14108.402495 + 31 +0.0 + 0 +LINE + 5 +F5F + 8 +0 + 62 + 0 + 10 +7737.499991 + 20 +9185.04809 + 30 +0.0 + 11 +7724.999991 + 21 +9206.698725 + 31 +0.0 + 0 +LINE + 5 +F60 + 8 +0 + 62 + 0 + 10 +7699.999991 + 20 +9249.999995 + 30 +0.0 + 11 +7699.999988 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +F61 + 8 +0 + 62 + 0 + 10 +4999.999991 + 20 +13926.537175 + 30 +0.0 + 11 +4987.499991 + 21 +13948.18781 + 31 +0.0 + 0 +LINE + 5 +F62 + 8 +0 + 62 + 0 + 10 +4962.499991 + 20 +13991.489081 + 30 +0.0 + 11 +4949.999991 + 21 +14013.139716 + 31 +0.0 + 0 +LINE + 5 +F63 + 8 +0 + 62 + 0 + 10 +4924.999991 + 20 +14056.440986 + 30 +0.0 + 11 +4920.0 + 21 +14065.101225 + 31 +0.0 + 0 +LINE + 5 +F64 + 8 +0 + 62 + 0 + 10 +7699.999991 + 20 +9206.698725 + 30 +0.0 + 11 +7687.499991 + 21 +9228.34936 + 31 +0.0 + 0 +LINE + 5 +F65 + 8 +0 + 62 + 0 + 10 +4999.999991 + 20 +13883.235905 + 30 +0.0 + 11 +4987.499991 + 21 +13904.88654 + 31 +0.0 + 0 +LINE + 5 +F66 + 8 +0 + 62 + 0 + 10 +4962.499991 + 20 +13948.18781 + 30 +0.0 + 11 +4949.999991 + 21 +13969.838446 + 31 +0.0 + 0 +LINE + 5 +F67 + 8 +0 + 62 + 0 + 10 +4924.999991 + 20 +14013.139716 + 30 +0.0 + 11 +4920.0 + 21 +14021.799955 + 31 +0.0 + 0 +LINE + 5 +F68 + 8 +0 + 62 + 0 + 10 +7696.18801 + 20 +9170.0 + 30 +0.0 + 11 +7687.499991 + 21 +9185.04809 + 31 +0.0 + 0 +LINE + 5 +F69 + 8 +0 + 62 + 0 + 10 +7662.499991 + 20 +9228.34936 + 30 +0.0 + 11 +7649.999991 + 21 +9249.999995 + 31 +0.0 + 0 +LINE + 5 +F6A + 8 +0 + 62 + 0 + 10 +4999.999991 + 20 +13839.934635 + 30 +0.0 + 11 +4987.499991 + 21 +13861.58527 + 31 +0.0 + 0 +LINE + 5 +F6B + 8 +0 + 62 + 0 + 10 +4962.499991 + 20 +13904.88654 + 30 +0.0 + 11 +4949.999991 + 21 +13926.537175 + 31 +0.0 + 0 +LINE + 5 +F6C + 8 +0 + 62 + 0 + 10 +4924.999991 + 20 +13969.838446 + 30 +0.0 + 11 +4920.0 + 21 +13978.498685 + 31 +0.0 + 0 +LINE + 5 +F6D + 8 +0 + 62 + 0 + 10 +7662.499991 + 20 +9185.04809 + 30 +0.0 + 11 +7649.999991 + 21 +9206.698725 + 31 +0.0 + 0 +LINE + 5 +F6E + 8 +0 + 62 + 0 + 10 +7624.999991 + 20 +9249.999995 + 30 +0.0 + 11 +7624.999989 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +F6F + 8 +0 + 62 + 0 + 10 +4999.999991 + 20 +13796.633365 + 30 +0.0 + 11 +4987.499991 + 21 +13818.284 + 31 +0.0 + 0 +LINE + 5 +F70 + 8 +0 + 62 + 0 + 10 +4962.499991 + 20 +13861.58527 + 30 +0.0 + 11 +4949.999991 + 21 +13883.235905 + 31 +0.0 + 0 +LINE + 5 +F71 + 8 +0 + 62 + 0 + 10 +4924.999991 + 20 +13926.537175 + 30 +0.0 + 11 +4920.0 + 21 +13935.197415 + 31 +0.0 + 0 +LINE + 5 +F72 + 8 +0 + 62 + 0 + 10 +7624.999991 + 20 +9206.698725 + 30 +0.0 + 11 +7612.499991 + 21 +9228.34936 + 31 +0.0 + 0 +LINE + 5 +F73 + 8 +0 + 62 + 0 + 10 +4999.999991 + 20 +13753.332095 + 30 +0.0 + 11 +4987.499991 + 21 +13774.98273 + 31 +0.0 + 0 +LINE + 5 +F74 + 8 +0 + 62 + 0 + 10 +4962.499991 + 20 +13818.284 + 30 +0.0 + 11 +4949.999991 + 21 +13839.934635 + 31 +0.0 + 0 +LINE + 5 +F75 + 8 +0 + 62 + 0 + 10 +4924.999991 + 20 +13883.235905 + 30 +0.0 + 11 +4920.0 + 21 +13891.896145 + 31 +0.0 + 0 +LINE + 5 +F76 + 8 +0 + 62 + 0 + 10 +7621.18801 + 20 +9170.0 + 30 +0.0 + 11 +7612.499992 + 21 +9185.04809 + 31 +0.0 + 0 +LINE + 5 +F77 + 8 +0 + 62 + 0 + 10 +7587.499992 + 20 +9228.34936 + 30 +0.0 + 11 +7574.999992 + 21 +9249.999995 + 31 +0.0 + 0 +LINE + 5 +F78 + 8 +0 + 62 + 0 + 10 +4999.999992 + 20 +13710.030825 + 30 +0.0 + 11 +4987.499992 + 21 +13731.68146 + 31 +0.0 + 0 +LINE + 5 +F79 + 8 +0 + 62 + 0 + 10 +4962.499992 + 20 +13774.98273 + 30 +0.0 + 11 +4949.999992 + 21 +13796.633365 + 31 +0.0 + 0 +LINE + 5 +F7A + 8 +0 + 62 + 0 + 10 +4924.999992 + 20 +13839.934635 + 30 +0.0 + 11 +4920.0 + 21 +13848.594875 + 31 +0.0 + 0 +LINE + 5 +F7B + 8 +0 + 62 + 0 + 10 +7587.499992 + 20 +9185.04809 + 30 +0.0 + 11 +7574.999992 + 21 +9206.698725 + 31 +0.0 + 0 +LINE + 5 +F7C + 8 +0 + 62 + 0 + 10 +7549.999992 + 20 +9249.999995 + 30 +0.0 + 11 +7549.999989 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +F7D + 8 +0 + 62 + 0 + 10 +4999.999992 + 20 +13666.729554 + 30 +0.0 + 11 +4987.499992 + 21 +13688.38019 + 31 +0.0 + 0 +LINE + 5 +F7E + 8 +0 + 62 + 0 + 10 +4962.499992 + 20 +13731.68146 + 30 +0.0 + 11 +4949.999992 + 21 +13753.332095 + 31 +0.0 + 0 +LINE + 5 +F7F + 8 +0 + 62 + 0 + 10 +4924.999992 + 20 +13796.633365 + 30 +0.0 + 11 +4920.0 + 21 +13805.293605 + 31 +0.0 + 0 +LINE + 5 +F80 + 8 +0 + 62 + 0 + 10 +7549.999992 + 20 +9206.698725 + 30 +0.0 + 11 +7537.499992 + 21 +9228.34936 + 31 +0.0 + 0 +LINE + 5 +F81 + 8 +0 + 62 + 0 + 10 +4999.999992 + 20 +13623.428284 + 30 +0.0 + 11 +4987.499992 + 21 +13645.078919 + 31 +0.0 + 0 +LINE + 5 +F82 + 8 +0 + 62 + 0 + 10 +4962.499992 + 20 +13688.38019 + 30 +0.0 + 11 +4949.999992 + 21 +13710.030825 + 31 +0.0 + 0 +LINE + 5 +F83 + 8 +0 + 62 + 0 + 10 +4924.999992 + 20 +13753.332095 + 30 +0.0 + 11 +4920.0 + 21 +13761.992335 + 31 +0.0 + 0 +LINE + 5 +F84 + 8 +0 + 62 + 0 + 10 +7546.188011 + 20 +9170.0 + 30 +0.0 + 11 +7537.499992 + 21 +9185.04809 + 31 +0.0 + 0 +LINE + 5 +F85 + 8 +0 + 62 + 0 + 10 +7512.499992 + 20 +9228.34936 + 30 +0.0 + 11 +7499.999992 + 21 +9249.999995 + 31 +0.0 + 0 +LINE + 5 +F86 + 8 +0 + 62 + 0 + 10 +4999.999992 + 20 +13580.127014 + 30 +0.0 + 11 +4987.499992 + 21 +13601.777649 + 31 +0.0 + 0 +LINE + 5 +F87 + 8 +0 + 62 + 0 + 10 +4962.499992 + 20 +13645.078919 + 30 +0.0 + 11 +4949.999992 + 21 +13666.729555 + 31 +0.0 + 0 +LINE + 5 +F88 + 8 +0 + 62 + 0 + 10 +4924.999992 + 20 +13710.030825 + 30 +0.0 + 11 +4920.0 + 21 +13718.691065 + 31 +0.0 + 0 +LINE + 5 +F89 + 8 +0 + 62 + 0 + 10 +7512.499992 + 20 +9185.04809 + 30 +0.0 + 11 +7499.999992 + 21 +9206.698725 + 31 +0.0 + 0 +LINE + 5 +F8A + 8 +0 + 62 + 0 + 10 +7474.999992 + 20 +9249.999995 + 30 +0.0 + 11 +7474.999989 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +F8B + 8 +0 + 62 + 0 + 10 +4999.999992 + 20 +13536.825744 + 30 +0.0 + 11 +4987.499992 + 21 +13558.476379 + 31 +0.0 + 0 +LINE + 5 +F8C + 8 +0 + 62 + 0 + 10 +4962.499992 + 20 +13601.777649 + 30 +0.0 + 11 +4949.999992 + 21 +13623.428284 + 31 +0.0 + 0 +LINE + 5 +F8D + 8 +0 + 62 + 0 + 10 +4924.999992 + 20 +13666.729555 + 30 +0.0 + 11 +4920.0 + 21 +13675.389795 + 31 +0.0 + 0 +LINE + 5 +F8E + 8 +0 + 62 + 0 + 10 +7474.999992 + 20 +9206.698725 + 30 +0.0 + 11 +7462.499992 + 21 +9228.34936 + 31 +0.0 + 0 +LINE + 5 +F8F + 8 +0 + 62 + 0 + 10 +4999.999992 + 20 +13493.524474 + 30 +0.0 + 11 +4987.499992 + 21 +13515.175109 + 31 +0.0 + 0 +LINE + 5 +F90 + 8 +0 + 62 + 0 + 10 +4962.499992 + 20 +13558.476379 + 30 +0.0 + 11 +4949.999992 + 21 +13580.127014 + 31 +0.0 + 0 +LINE + 5 +F91 + 8 +0 + 62 + 0 + 10 +4924.999992 + 20 +13623.428284 + 30 +0.0 + 11 +4920.0 + 21 +13632.088525 + 31 +0.0 + 0 +LINE + 5 +F92 + 8 +0 + 62 + 0 + 10 +7471.188011 + 20 +9170.0 + 30 +0.0 + 11 +7462.499992 + 21 +9185.04809 + 31 +0.0 + 0 +LINE + 5 +F93 + 8 +0 + 62 + 0 + 10 +7437.499992 + 20 +9228.34936 + 30 +0.0 + 11 +7424.999992 + 21 +9249.999995 + 31 +0.0 + 0 +LINE + 5 +F94 + 8 +0 + 62 + 0 + 10 +4999.999992 + 20 +13450.223204 + 30 +0.0 + 11 +4987.499992 + 21 +13471.873839 + 31 +0.0 + 0 +LINE + 5 +F95 + 8 +0 + 62 + 0 + 10 +4962.499992 + 20 +13515.175109 + 30 +0.0 + 11 +4949.999992 + 21 +13536.825744 + 31 +0.0 + 0 +LINE + 5 +F96 + 8 +0 + 62 + 0 + 10 +4924.999992 + 20 +13580.127014 + 30 +0.0 + 11 +4920.0 + 21 +13588.787255 + 31 +0.0 + 0 +LINE + 5 +F97 + 8 +0 + 62 + 0 + 10 +7437.499992 + 20 +9185.04809 + 30 +0.0 + 11 +7424.999992 + 21 +9206.698725 + 31 +0.0 + 0 +LINE + 5 +F98 + 8 +0 + 62 + 0 + 10 +7399.999992 + 20 +9249.999995 + 30 +0.0 + 11 +7399.99999 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +F99 + 8 +0 + 62 + 0 + 10 +4999.999992 + 20 +13406.921934 + 30 +0.0 + 11 +4987.499992 + 21 +13428.572569 + 31 +0.0 + 0 +LINE + 5 +F9A + 8 +0 + 62 + 0 + 10 +4962.499992 + 20 +13471.873839 + 30 +0.0 + 11 +4949.999992 + 21 +13493.524474 + 31 +0.0 + 0 +LINE + 5 +F9B + 8 +0 + 62 + 0 + 10 +4924.999992 + 20 +13536.825744 + 30 +0.0 + 11 +4920.0 + 21 +13545.485985 + 31 +0.0 + 0 +LINE + 5 +F9C + 8 +0 + 62 + 0 + 10 +7399.999992 + 20 +9206.698725 + 30 +0.0 + 11 +7387.499992 + 21 +9228.34936 + 31 +0.0 + 0 +LINE + 5 +F9D + 8 +0 + 62 + 0 + 10 +4999.999992 + 20 +13363.620663 + 30 +0.0 + 11 +4987.499992 + 21 +13385.271299 + 31 +0.0 + 0 +LINE + 5 +F9E + 8 +0 + 62 + 0 + 10 +4962.499992 + 20 +13428.572569 + 30 +0.0 + 11 +4949.999992 + 21 +13450.223204 + 31 +0.0 + 0 +LINE + 5 +F9F + 8 +0 + 62 + 0 + 10 +4924.999992 + 20 +13493.524474 + 30 +0.0 + 11 +4920.0 + 21 +13502.184715 + 31 +0.0 + 0 +LINE + 5 +FA0 + 8 +0 + 62 + 0 + 10 +7396.188011 + 20 +9170.0 + 30 +0.0 + 11 +7387.499992 + 21 +9185.04809 + 31 +0.0 + 0 +LINE + 5 +FA1 + 8 +0 + 62 + 0 + 10 +7362.499992 + 20 +9228.34936 + 30 +0.0 + 11 +7349.999992 + 21 +9249.999996 + 31 +0.0 + 0 +LINE + 5 +FA2 + 8 +0 + 62 + 0 + 10 +4999.999992 + 20 +13320.319393 + 30 +0.0 + 11 +4987.499992 + 21 +13341.970028 + 31 +0.0 + 0 +LINE + 5 +FA3 + 8 +0 + 62 + 0 + 10 +4962.499992 + 20 +13385.271299 + 30 +0.0 + 11 +4949.999992 + 21 +13406.921934 + 31 +0.0 + 0 +LINE + 5 +FA4 + 8 +0 + 62 + 0 + 10 +4924.999992 + 20 +13450.223204 + 30 +0.0 + 11 +4920.0 + 21 +13458.883445 + 31 +0.0 + 0 +LINE + 5 +FA5 + 8 +0 + 62 + 0 + 10 +7362.499992 + 20 +9185.04809 + 30 +0.0 + 11 +7349.999992 + 21 +9206.698725 + 31 +0.0 + 0 +LINE + 5 +FA6 + 8 +0 + 62 + 0 + 10 +7324.999992 + 20 +9249.999996 + 30 +0.0 + 11 +7324.99999 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +FA7 + 8 +0 + 62 + 0 + 10 +4999.999992 + 20 +13277.018123 + 30 +0.0 + 11 +4987.499992 + 21 +13298.668758 + 31 +0.0 + 0 +LINE + 5 +FA8 + 8 +0 + 62 + 0 + 10 +4962.499992 + 20 +13341.970028 + 30 +0.0 + 11 +4949.999992 + 21 +13363.620664 + 31 +0.0 + 0 +LINE + 5 +FA9 + 8 +0 + 62 + 0 + 10 +4924.999992 + 20 +13406.921934 + 30 +0.0 + 11 +4920.0 + 21 +13415.582175 + 31 +0.0 + 0 +LINE + 5 +FAA + 8 +0 + 62 + 0 + 10 +7324.999992 + 20 +9206.698725 + 30 +0.0 + 11 +7312.499992 + 21 +9228.349361 + 31 +0.0 + 0 +LINE + 5 +FAB + 8 +0 + 62 + 0 + 10 +4999.999992 + 20 +13233.716853 + 30 +0.0 + 11 +4987.499992 + 21 +13255.367488 + 31 +0.0 + 0 +LINE + 5 +FAC + 8 +0 + 62 + 0 + 10 +4962.499992 + 20 +13298.668758 + 30 +0.0 + 11 +4949.999992 + 21 +13320.319393 + 31 +0.0 + 0 +LINE + 5 +FAD + 8 +0 + 62 + 0 + 10 +4924.999992 + 20 +13363.620664 + 30 +0.0 + 11 +4920.0 + 21 +13372.280905 + 31 +0.0 + 0 +LINE + 5 +FAE + 8 +0 + 62 + 0 + 10 +7321.188012 + 20 +9170.0 + 30 +0.0 + 11 +7312.499993 + 21 +9185.04809 + 31 +0.0 + 0 +LINE + 5 +FAF + 8 +0 + 62 + 0 + 10 +7287.499993 + 20 +9228.349361 + 30 +0.0 + 11 +7274.999993 + 21 +9249.999996 + 31 +0.0 + 0 +LINE + 5 +FB0 + 8 +0 + 62 + 0 + 10 +4999.999993 + 20 +13190.415583 + 30 +0.0 + 11 +4987.499993 + 21 +13212.066218 + 31 +0.0 + 0 +LINE + 5 +FB1 + 8 +0 + 62 + 0 + 10 +4962.499993 + 20 +13255.367488 + 30 +0.0 + 11 +4949.999993 + 21 +13277.018123 + 31 +0.0 + 0 +LINE + 5 +FB2 + 8 +0 + 62 + 0 + 10 +4924.999993 + 20 +13320.319393 + 30 +0.0 + 11 +4920.0 + 21 +13328.979635 + 31 +0.0 + 0 +LINE + 5 +FB3 + 8 +0 + 62 + 0 + 10 +7287.499993 + 20 +9185.04809 + 30 +0.0 + 11 +7274.999993 + 21 +9206.698726 + 31 +0.0 + 0 +LINE + 5 +FB4 + 8 +0 + 62 + 0 + 10 +7249.999993 + 20 +9249.999996 + 30 +0.0 + 11 +7249.99999 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +FB5 + 8 +0 + 62 + 0 + 10 +4999.999993 + 20 +13147.114313 + 30 +0.0 + 11 +4987.499993 + 21 +13168.764948 + 31 +0.0 + 0 +LINE + 5 +FB6 + 8 +0 + 62 + 0 + 10 +4962.499993 + 20 +13212.066218 + 30 +0.0 + 11 +4949.999993 + 21 +13233.716853 + 31 +0.0 + 0 +LINE + 5 +FB7 + 8 +0 + 62 + 0 + 10 +4924.999993 + 20 +13277.018123 + 30 +0.0 + 11 +4920.0 + 21 +13285.678365 + 31 +0.0 + 0 +LINE + 5 +FB8 + 8 +0 + 62 + 0 + 10 +7249.999993 + 20 +9206.698726 + 30 +0.0 + 11 +7237.499993 + 21 +9228.349361 + 31 +0.0 + 0 +LINE + 5 +FB9 + 8 +0 + 62 + 0 + 10 +4999.999993 + 20 +13103.813043 + 30 +0.0 + 11 +4987.499993 + 21 +13125.463678 + 31 +0.0 + 0 +LINE + 5 +FBA + 8 +0 + 62 + 0 + 10 +4962.499993 + 20 +13168.764948 + 30 +0.0 + 11 +4949.999993 + 21 +13190.415583 + 31 +0.0 + 0 +LINE + 5 +FBB + 8 +0 + 62 + 0 + 10 +4924.999993 + 20 +13233.716853 + 30 +0.0 + 11 +4920.0 + 21 +13242.377095 + 31 +0.0 + 0 +LINE + 5 +FBC + 8 +0 + 62 + 0 + 10 +7246.188012 + 20 +9170.0 + 30 +0.0 + 11 +7237.499993 + 21 +9185.048091 + 31 +0.0 + 0 +LINE + 5 +FBD + 8 +0 + 62 + 0 + 10 +7212.499993 + 20 +9228.349361 + 30 +0.0 + 11 +7199.999993 + 21 +9249.999996 + 31 +0.0 + 0 +LINE + 5 +FBE + 8 +0 + 62 + 0 + 10 +4999.999993 + 20 +13060.511772 + 30 +0.0 + 11 +4987.499993 + 21 +13082.162408 + 31 +0.0 + 0 +LINE + 5 +FBF + 8 +0 + 62 + 0 + 10 +4962.499993 + 20 +13125.463678 + 30 +0.0 + 11 +4949.999993 + 21 +13147.114313 + 31 +0.0 + 0 +LINE + 5 +FC0 + 8 +0 + 62 + 0 + 10 +4924.999993 + 20 +13190.415583 + 30 +0.0 + 11 +4920.0 + 21 +13199.075825 + 31 +0.0 + 0 +LINE + 5 +FC1 + 8 +0 + 62 + 0 + 10 +7212.499993 + 20 +9185.048091 + 30 +0.0 + 11 +7199.999993 + 21 +9206.698726 + 31 +0.0 + 0 +LINE + 5 +FC2 + 8 +0 + 62 + 0 + 10 +7174.999993 + 20 +9249.999996 + 30 +0.0 + 11 +7174.99999 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +FC3 + 8 +0 + 62 + 0 + 10 +4999.999993 + 20 +13017.210502 + 30 +0.0 + 11 +4987.499993 + 21 +13038.861137 + 31 +0.0 + 0 +LINE + 5 +FC4 + 8 +0 + 62 + 0 + 10 +4962.499993 + 20 +13082.162408 + 30 +0.0 + 11 +4949.999993 + 21 +13103.813043 + 31 +0.0 + 0 +LINE + 5 +FC5 + 8 +0 + 62 + 0 + 10 +4924.999993 + 20 +13147.114313 + 30 +0.0 + 11 +4920.0 + 21 +13155.774555 + 31 +0.0 + 0 +LINE + 5 +FC6 + 8 +0 + 62 + 0 + 10 +7174.999993 + 20 +9206.698726 + 30 +0.0 + 11 +7162.499993 + 21 +9228.349361 + 31 +0.0 + 0 +LINE + 5 +FC7 + 8 +0 + 62 + 0 + 10 +4999.999993 + 20 +12973.909232 + 30 +0.0 + 11 +4987.499993 + 21 +12995.559867 + 31 +0.0 + 0 +LINE + 5 +FC8 + 8 +0 + 62 + 0 + 10 +4962.499993 + 20 +13038.861137 + 30 +0.0 + 11 +4949.999993 + 21 +13060.511773 + 31 +0.0 + 0 +LINE + 5 +FC9 + 8 +0 + 62 + 0 + 10 +4924.999993 + 20 +13103.813043 + 30 +0.0 + 11 +4920.0 + 21 +13112.473285 + 31 +0.0 + 0 +LINE + 5 +FCA + 8 +0 + 62 + 0 + 10 +7171.188012 + 20 +9170.0 + 30 +0.0 + 11 +7162.499993 + 21 +9185.048091 + 31 +0.0 + 0 +LINE + 5 +FCB + 8 +0 + 62 + 0 + 10 +7137.499993 + 20 +9228.349361 + 30 +0.0 + 11 +7124.999993 + 21 +9249.999996 + 31 +0.0 + 0 +LINE + 5 +FCC + 8 +0 + 62 + 0 + 10 +4999.999993 + 20 +12930.607962 + 30 +0.0 + 11 +4987.499993 + 21 +12952.258597 + 31 +0.0 + 0 +LINE + 5 +FCD + 8 +0 + 62 + 0 + 10 +4962.499993 + 20 +12995.559867 + 30 +0.0 + 11 +4949.999993 + 21 +13017.210502 + 31 +0.0 + 0 +LINE + 5 +FCE + 8 +0 + 62 + 0 + 10 +4924.999993 + 20 +13060.511773 + 30 +0.0 + 11 +4920.0 + 21 +13069.172015 + 31 +0.0 + 0 +LINE + 5 +FCF + 8 +0 + 62 + 0 + 10 +7137.499993 + 20 +9185.048091 + 30 +0.0 + 11 +7124.999993 + 21 +9206.698726 + 31 +0.0 + 0 +LINE + 5 +FD0 + 8 +0 + 62 + 0 + 10 +7099.999993 + 20 +9249.999996 + 30 +0.0 + 11 +7099.999991 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +FD1 + 8 +0 + 62 + 0 + 10 +4999.999993 + 20 +12887.306692 + 30 +0.0 + 11 +4987.499993 + 21 +12908.957327 + 31 +0.0 + 0 +LINE + 5 +FD2 + 8 +0 + 62 + 0 + 10 +4962.499993 + 20 +12952.258597 + 30 +0.0 + 11 +4949.999993 + 21 +12973.909232 + 31 +0.0 + 0 +LINE + 5 +FD3 + 8 +0 + 62 + 0 + 10 +4924.999993 + 20 +13017.210502 + 30 +0.0 + 11 +4920.0 + 21 +13025.870745 + 31 +0.0 + 0 +LINE + 5 +FD4 + 8 +0 + 62 + 0 + 10 +7099.999993 + 20 +9206.698726 + 30 +0.0 + 11 +7087.499993 + 21 +9228.349361 + 31 +0.0 + 0 +LINE + 5 +FD5 + 8 +0 + 62 + 0 + 10 +4999.999993 + 20 +12844.005422 + 30 +0.0 + 11 +4987.499993 + 21 +12865.656057 + 31 +0.0 + 0 +LINE + 5 +FD6 + 8 +0 + 62 + 0 + 10 +4962.499993 + 20 +12908.957327 + 30 +0.0 + 11 +4949.999993 + 21 +12930.607962 + 31 +0.0 + 0 +LINE + 5 +FD7 + 8 +0 + 62 + 0 + 10 +4924.999993 + 20 +12973.909232 + 30 +0.0 + 11 +4920.0 + 21 +12982.569475 + 31 +0.0 + 0 +LINE + 5 +FD8 + 8 +0 + 62 + 0 + 10 +7096.188013 + 20 +9170.0 + 30 +0.0 + 11 +7087.499993 + 21 +9185.048091 + 31 +0.0 + 0 +LINE + 5 +FD9 + 8 +0 + 62 + 0 + 10 +7062.499993 + 20 +9228.349361 + 30 +0.0 + 11 +7049.999993 + 21 +9249.999996 + 31 +0.0 + 0 +LINE + 5 +FDA + 8 +0 + 62 + 0 + 10 +4999.999993 + 20 +12800.704152 + 30 +0.0 + 11 +4987.499993 + 21 +12822.354787 + 31 +0.0 + 0 +LINE + 5 +FDB + 8 +0 + 62 + 0 + 10 +4962.499993 + 20 +12865.656057 + 30 +0.0 + 11 +4949.999993 + 21 +12887.306692 + 31 +0.0 + 0 +LINE + 5 +FDC + 8 +0 + 62 + 0 + 10 +4924.999993 + 20 +12930.607962 + 30 +0.0 + 11 +4920.0 + 21 +12939.268205 + 31 +0.0 + 0 +LINE + 5 +FDD + 8 +0 + 62 + 0 + 10 +7062.499993 + 20 +9185.048091 + 30 +0.0 + 11 +7049.999993 + 21 +9206.698726 + 31 +0.0 + 0 +LINE + 5 +FDE + 8 +0 + 62 + 0 + 10 +7024.999993 + 20 +9249.999996 + 30 +0.0 + 11 +7024.999991 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +FDF + 8 +0 + 62 + 0 + 10 +4999.999993 + 20 +12757.402881 + 30 +0.0 + 11 +4987.499993 + 21 +12779.053517 + 31 +0.0 + 0 +LINE + 5 +FE0 + 8 +0 + 62 + 0 + 10 +4962.499993 + 20 +12822.354787 + 30 +0.0 + 11 +4949.999993 + 21 +12844.005422 + 31 +0.0 + 0 +LINE + 5 +FE1 + 8 +0 + 62 + 0 + 10 +4924.999993 + 20 +12887.306692 + 30 +0.0 + 11 +4920.0 + 21 +12895.966935 + 31 +0.0 + 0 +LINE + 5 +FE2 + 8 +0 + 62 + 0 + 10 +7024.999993 + 20 +9206.698726 + 30 +0.0 + 11 +7012.499993 + 21 +9228.349361 + 31 +0.0 + 0 +LINE + 5 +FE3 + 8 +0 + 62 + 0 + 10 +4999.999993 + 20 +12714.101611 + 30 +0.0 + 11 +4987.499993 + 21 +12735.752246 + 31 +0.0 + 0 +LINE + 5 +FE4 + 8 +0 + 62 + 0 + 10 +4962.499993 + 20 +12779.053517 + 30 +0.0 + 11 +4949.999993 + 21 +12800.704152 + 31 +0.0 + 0 +LINE + 5 +FE5 + 8 +0 + 62 + 0 + 10 +4924.999993 + 20 +12844.005422 + 30 +0.0 + 11 +4920.0 + 21 +12852.665665 + 31 +0.0 + 0 +LINE + 5 +FE6 + 8 +0 + 62 + 0 + 10 +7021.188013 + 20 +9170.0 + 30 +0.0 + 11 +7012.499994 + 21 +9185.048091 + 31 +0.0 + 0 +LINE + 5 +FE7 + 8 +0 + 62 + 0 + 10 +6987.499994 + 20 +9228.349361 + 30 +0.0 + 11 +6974.999994 + 21 +9249.999996 + 31 +0.0 + 0 +LINE + 5 +FE8 + 8 +0 + 62 + 0 + 10 +4999.999994 + 20 +12670.800341 + 30 +0.0 + 11 +4987.499994 + 21 +12692.450976 + 31 +0.0 + 0 +LINE + 5 +FE9 + 8 +0 + 62 + 0 + 10 +4962.499994 + 20 +12735.752246 + 30 +0.0 + 11 +4949.999994 + 21 +12757.402882 + 31 +0.0 + 0 +LINE + 5 +FEA + 8 +0 + 62 + 0 + 10 +4924.999994 + 20 +12800.704152 + 30 +0.0 + 11 +4920.0 + 21 +12809.364395 + 31 +0.0 + 0 +LINE + 5 +FEB + 8 +0 + 62 + 0 + 10 +6987.499994 + 20 +9185.048091 + 30 +0.0 + 11 +6974.999994 + 21 +9206.698726 + 31 +0.0 + 0 +LINE + 5 +FEC + 8 +0 + 62 + 0 + 10 +6949.999994 + 20 +9249.999996 + 30 +0.0 + 11 +6949.999991 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +FED + 8 +0 + 62 + 0 + 10 +4999.999994 + 20 +12627.499071 + 30 +0.0 + 11 +4987.499994 + 21 +12649.149706 + 31 +0.0 + 0 +LINE + 5 +FEE + 8 +0 + 62 + 0 + 10 +4962.499994 + 20 +12692.450976 + 30 +0.0 + 11 +4949.999994 + 21 +12714.101611 + 31 +0.0 + 0 +LINE + 5 +FEF + 8 +0 + 62 + 0 + 10 +4924.999994 + 20 +12757.402882 + 30 +0.0 + 11 +4920.0 + 21 +12766.063125 + 31 +0.0 + 0 +LINE + 5 +FF0 + 8 +0 + 62 + 0 + 10 +6949.999994 + 20 +9206.698726 + 30 +0.0 + 11 +6937.499994 + 21 +9228.349361 + 31 +0.0 + 0 +LINE + 5 +FF1 + 8 +0 + 62 + 0 + 10 +4999.999994 + 20 +12584.197801 + 30 +0.0 + 11 +4987.499994 + 21 +12605.848436 + 31 +0.0 + 0 +LINE + 5 +FF2 + 8 +0 + 62 + 0 + 10 +4962.499994 + 20 +12649.149706 + 30 +0.0 + 11 +4949.999994 + 21 +12670.800341 + 31 +0.0 + 0 +LINE + 5 +FF3 + 8 +0 + 62 + 0 + 10 +4924.999994 + 20 +12714.101611 + 30 +0.0 + 11 +4920.0 + 21 +12722.761855 + 31 +0.0 + 0 +LINE + 5 +FF4 + 8 +0 + 62 + 0 + 10 +6946.188013 + 20 +9170.0 + 30 +0.0 + 11 +6937.499994 + 21 +9185.048091 + 31 +0.0 + 0 +LINE + 5 +FF5 + 8 +0 + 62 + 0 + 10 +6912.499994 + 20 +9228.349361 + 30 +0.0 + 11 +6899.999994 + 21 +9249.999996 + 31 +0.0 + 0 +LINE + 5 +FF6 + 8 +0 + 62 + 0 + 10 +4999.999994 + 20 +12540.896531 + 30 +0.0 + 11 +4987.499994 + 21 +12562.547166 + 31 +0.0 + 0 +LINE + 5 +FF7 + 8 +0 + 62 + 0 + 10 +4962.499994 + 20 +12605.848436 + 30 +0.0 + 11 +4949.999994 + 21 +12627.499071 + 31 +0.0 + 0 +LINE + 5 +FF8 + 8 +0 + 62 + 0 + 10 +4924.999994 + 20 +12670.800341 + 30 +0.0 + 11 +4920.0 + 21 +12679.460585 + 31 +0.0 + 0 +LINE + 5 +FF9 + 8 +0 + 62 + 0 + 10 +6912.499994 + 20 +9185.048091 + 30 +0.0 + 11 +6899.999994 + 21 +9206.698726 + 31 +0.0 + 0 +LINE + 5 +FFA + 8 +0 + 62 + 0 + 10 +6874.999994 + 20 +9249.999996 + 30 +0.0 + 11 +6874.999992 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +FFB + 8 +0 + 62 + 0 + 10 +4999.999994 + 20 +12497.595261 + 30 +0.0 + 11 +4987.499994 + 21 +12519.245896 + 31 +0.0 + 0 +LINE + 5 +FFC + 8 +0 + 62 + 0 + 10 +4962.499994 + 20 +12562.547166 + 30 +0.0 + 11 +4949.999994 + 21 +12584.197801 + 31 +0.0 + 0 +LINE + 5 +FFD + 8 +0 + 62 + 0 + 10 +4924.999994 + 20 +12627.499071 + 30 +0.0 + 11 +4920.0 + 21 +12636.159315 + 31 +0.0 + 0 +LINE + 5 +FFE + 8 +0 + 62 + 0 + 10 +6874.999994 + 20 +9206.698726 + 30 +0.0 + 11 +6862.499994 + 21 +9228.349361 + 31 +0.0 + 0 +LINE + 5 +FFF + 8 +0 + 62 + 0 + 10 +4999.999994 + 20 +12454.293991 + 30 +0.0 + 11 +4987.499994 + 21 +12475.944626 + 31 +0.0 + 0 +LINE + 5 +1000 + 8 +0 + 62 + 0 + 10 +4962.499994 + 20 +12519.245896 + 30 +0.0 + 11 +4949.999994 + 21 +12540.896531 + 31 +0.0 + 0 +LINE + 5 +1001 + 8 +0 + 62 + 0 + 10 +4924.999994 + 20 +12584.197801 + 30 +0.0 + 11 +4920.0 + 21 +12592.858045 + 31 +0.0 + 0 +LINE + 5 +1002 + 8 +0 + 62 + 0 + 10 +6871.188014 + 20 +9170.0 + 30 +0.0 + 11 +6862.499994 + 21 +9185.048091 + 31 +0.0 + 0 +LINE + 5 +1003 + 8 +0 + 62 + 0 + 10 +6837.499994 + 20 +9228.349361 + 30 +0.0 + 11 +6824.999994 + 21 +9249.999997 + 31 +0.0 + 0 +LINE + 5 +1004 + 8 +0 + 62 + 0 + 10 +4999.999994 + 20 +12410.99272 + 30 +0.0 + 11 +4987.499994 + 21 +12432.643355 + 31 +0.0 + 0 +LINE + 5 +1005 + 8 +0 + 62 + 0 + 10 +4962.499994 + 20 +12475.944626 + 30 +0.0 + 11 +4949.999994 + 21 +12497.595261 + 31 +0.0 + 0 +LINE + 5 +1006 + 8 +0 + 62 + 0 + 10 +4924.999994 + 20 +12540.896531 + 30 +0.0 + 11 +4920.0 + 21 +12549.556775 + 31 +0.0 + 0 +LINE + 5 +1007 + 8 +0 + 62 + 0 + 10 +6837.499994 + 20 +9185.048091 + 30 +0.0 + 11 +6824.999994 + 21 +9206.698726 + 31 +0.0 + 0 +LINE + 5 +1008 + 8 +0 + 62 + 0 + 10 +6799.999994 + 20 +9249.999997 + 30 +0.0 + 11 +6799.999992 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1009 + 8 +0 + 62 + 0 + 10 +4999.999994 + 20 +12367.69145 + 30 +0.0 + 11 +4987.499994 + 21 +12389.342085 + 31 +0.0 + 0 +LINE + 5 +100A + 8 +0 + 62 + 0 + 10 +4962.499994 + 20 +12432.643356 + 30 +0.0 + 11 +4949.999994 + 21 +12454.293991 + 31 +0.0 + 0 +LINE + 5 +100B + 8 +0 + 62 + 0 + 10 +4924.999994 + 20 +12497.595261 + 30 +0.0 + 11 +4920.0 + 21 +12506.255505 + 31 +0.0 + 0 +LINE + 5 +100C + 8 +0 + 62 + 0 + 10 +6799.999994 + 20 +9206.698726 + 30 +0.0 + 11 +6787.499994 + 21 +9228.349362 + 31 +0.0 + 0 +LINE + 5 +100D + 8 +0 + 62 + 0 + 10 +4999.999994 + 20 +12324.39018 + 30 +0.0 + 11 +4987.499994 + 21 +12346.040815 + 31 +0.0 + 0 +LINE + 5 +100E + 8 +0 + 62 + 0 + 10 +4962.499994 + 20 +12389.342085 + 30 +0.0 + 11 +4949.999994 + 21 +12410.99272 + 31 +0.0 + 0 +LINE + 5 +100F + 8 +0 + 62 + 0 + 10 +4924.999994 + 20 +12454.293991 + 30 +0.0 + 11 +4920.0 + 21 +12462.954235 + 31 +0.0 + 0 +LINE + 5 +1010 + 8 +0 + 62 + 0 + 10 +6796.188014 + 20 +9170.0 + 30 +0.0 + 11 +6787.499994 + 21 +9185.048091 + 31 +0.0 + 0 +LINE + 5 +1011 + 8 +0 + 62 + 0 + 10 +6762.499994 + 20 +9228.349362 + 30 +0.0 + 11 +6749.999994 + 21 +9249.999997 + 31 +0.0 + 0 +LINE + 5 +1012 + 8 +0 + 62 + 0 + 10 +4999.999994 + 20 +12281.08891 + 30 +0.0 + 11 +4987.499994 + 21 +12302.739545 + 31 +0.0 + 0 +LINE + 5 +1013 + 8 +0 + 62 + 0 + 10 +4962.499994 + 20 +12346.040815 + 30 +0.0 + 11 +4949.999994 + 21 +12367.69145 + 31 +0.0 + 0 +LINE + 5 +1014 + 8 +0 + 62 + 0 + 10 +4924.999994 + 20 +12410.992721 + 30 +0.0 + 11 +4920.0 + 21 +12419.652965 + 31 +0.0 + 0 +LINE + 5 +1015 + 8 +0 + 62 + 0 + 10 +6762.499994 + 20 +9185.048091 + 30 +0.0 + 11 +6749.999994 + 21 +9206.698727 + 31 +0.0 + 0 +LINE + 5 +1016 + 8 +0 + 62 + 0 + 10 +6724.999994 + 20 +9249.999997 + 30 +0.0 + 11 +6724.999992 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1017 + 8 +0 + 62 + 0 + 10 +4999.999994 + 20 +12237.78764 + 30 +0.0 + 11 +4987.499994 + 21 +12259.438275 + 31 +0.0 + 0 +LINE + 5 +1018 + 8 +0 + 62 + 0 + 10 +4962.499994 + 20 +12302.739545 + 30 +0.0 + 11 +4949.999994 + 21 +12324.39018 + 31 +0.0 + 0 +LINE + 5 +1019 + 8 +0 + 62 + 0 + 10 +4924.999994 + 20 +12367.69145 + 30 +0.0 + 11 +4920.0 + 21 +12376.351695 + 31 +0.0 + 0 +LINE + 5 +101A + 8 +0 + 62 + 0 + 10 +6724.999994 + 20 +9206.698727 + 30 +0.0 + 11 +6712.499994 + 21 +9228.349362 + 31 +0.0 + 0 +LINE + 5 +101B + 8 +0 + 62 + 0 + 10 +4999.999994 + 20 +12194.48637 + 30 +0.0 + 11 +4987.499994 + 21 +12216.137005 + 31 +0.0 + 0 +LINE + 5 +101C + 8 +0 + 62 + 0 + 10 +4962.499994 + 20 +12259.438275 + 30 +0.0 + 11 +4949.999994 + 21 +12281.08891 + 31 +0.0 + 0 +LINE + 5 +101D + 8 +0 + 62 + 0 + 10 +4924.999994 + 20 +12324.39018 + 30 +0.0 + 11 +4920.0 + 21 +12333.050425 + 31 +0.0 + 0 +LINE + 5 +101E + 8 +0 + 62 + 0 + 10 +6721.188014 + 20 +9170.0 + 30 +0.0 + 11 +6712.499995 + 21 +9185.048092 + 31 +0.0 + 0 +LINE + 5 +101F + 8 +0 + 62 + 0 + 10 +6687.499995 + 20 +9228.349362 + 30 +0.0 + 11 +6674.999995 + 21 +9249.999997 + 31 +0.0 + 0 +LINE + 5 +1020 + 8 +0 + 62 + 0 + 10 +4999.999995 + 20 +12151.1851 + 30 +0.0 + 11 +4987.499995 + 21 +12172.835735 + 31 +0.0 + 0 +LINE + 5 +1021 + 8 +0 + 62 + 0 + 10 +4962.499995 + 20 +12216.137005 + 30 +0.0 + 11 +4949.999995 + 21 +12237.78764 + 31 +0.0 + 0 +LINE + 5 +1022 + 8 +0 + 62 + 0 + 10 +4924.999995 + 20 +12281.08891 + 30 +0.0 + 11 +4920.0 + 21 +12289.749155 + 31 +0.0 + 0 +LINE + 5 +1023 + 8 +0 + 62 + 0 + 10 +6687.499995 + 20 +9185.048092 + 30 +0.0 + 11 +6674.999995 + 21 +9206.698727 + 31 +0.0 + 0 +LINE + 5 +1024 + 8 +0 + 62 + 0 + 10 +6649.999995 + 20 +9249.999997 + 30 +0.0 + 11 +6649.999993 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1025 + 8 +0 + 62 + 0 + 10 +4999.999995 + 20 +12107.883829 + 30 +0.0 + 11 +4987.499995 + 21 +12129.534464 + 31 +0.0 + 0 +LINE + 5 +1026 + 8 +0 + 62 + 0 + 10 +4962.499995 + 20 +12172.835735 + 30 +0.0 + 11 +4949.999995 + 21 +12194.48637 + 31 +0.0 + 0 +LINE + 5 +1027 + 8 +0 + 62 + 0 + 10 +4924.999995 + 20 +12237.78764 + 30 +0.0 + 11 +4920.0 + 21 +12246.447885 + 31 +0.0 + 0 +LINE + 5 +1028 + 8 +0 + 62 + 0 + 10 +6649.999995 + 20 +9206.698727 + 30 +0.0 + 11 +6637.499995 + 21 +9228.349362 + 31 +0.0 + 0 +LINE + 5 +1029 + 8 +0 + 62 + 0 + 10 +4999.999995 + 20 +12064.582559 + 30 +0.0 + 11 +4987.499995 + 21 +12086.233194 + 31 +0.0 + 0 +LINE + 5 +102A + 8 +0 + 62 + 0 + 10 +4962.499995 + 20 +12129.534465 + 30 +0.0 + 11 +4949.999995 + 21 +12151.1851 + 31 +0.0 + 0 +LINE + 5 +102B + 8 +0 + 62 + 0 + 10 +4924.999995 + 20 +12194.48637 + 30 +0.0 + 11 +4920.0 + 21 +12203.146615 + 31 +0.0 + 0 +LINE + 5 +102C + 8 +0 + 62 + 0 + 10 +6646.188015 + 20 +9170.0 + 30 +0.0 + 11 +6637.499995 + 21 +9185.048092 + 31 +0.0 + 0 +LINE + 5 +102D + 8 +0 + 62 + 0 + 10 +6612.499995 + 20 +9228.349362 + 30 +0.0 + 11 +6599.999995 + 21 +9249.999997 + 31 +0.0 + 0 +LINE + 5 +102E + 8 +0 + 62 + 0 + 10 +4999.999995 + 20 +12021.281289 + 30 +0.0 + 11 +4987.499995 + 21 +12042.931924 + 31 +0.0 + 0 +LINE + 5 +102F + 8 +0 + 62 + 0 + 10 +4962.499995 + 20 +12086.233194 + 30 +0.0 + 11 +4949.999995 + 21 +12107.883829 + 31 +0.0 + 0 +LINE + 5 +1030 + 8 +0 + 62 + 0 + 10 +4924.999995 + 20 +12151.1851 + 30 +0.0 + 11 +4920.0 + 21 +12159.845345 + 31 +0.0 + 0 +LINE + 5 +1031 + 8 +0 + 62 + 0 + 10 +6612.499995 + 20 +9185.048092 + 30 +0.0 + 11 +6599.999995 + 21 +9206.698727 + 31 +0.0 + 0 +LINE + 5 +1032 + 8 +0 + 62 + 0 + 10 +6574.999995 + 20 +9249.999997 + 30 +0.0 + 11 +6574.999993 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1033 + 8 +0 + 62 + 0 + 10 +4999.999995 + 20 +11977.980019 + 30 +0.0 + 11 +4987.499995 + 21 +11999.630654 + 31 +0.0 + 0 +LINE + 5 +1034 + 8 +0 + 62 + 0 + 10 +4962.499995 + 20 +12042.931924 + 30 +0.0 + 11 +4949.999995 + 21 +12064.582559 + 31 +0.0 + 0 +LINE + 5 +1035 + 8 +0 + 62 + 0 + 10 +4924.999995 + 20 +12107.88383 + 30 +0.0 + 11 +4920.0 + 21 +12116.544075 + 31 +0.0 + 0 +LINE + 5 +1036 + 8 +0 + 62 + 0 + 10 +6574.999995 + 20 +9206.698727 + 30 +0.0 + 11 +6562.499995 + 21 +9228.349362 + 31 +0.0 + 0 +LINE + 5 +1037 + 8 +0 + 62 + 0 + 10 +4999.999995 + 20 +11934.678749 + 30 +0.0 + 11 +4987.499995 + 21 +11956.329384 + 31 +0.0 + 0 +LINE + 5 +1038 + 8 +0 + 62 + 0 + 10 +4962.499995 + 20 +11999.630654 + 30 +0.0 + 11 +4949.999995 + 21 +12021.281289 + 31 +0.0 + 0 +LINE + 5 +1039 + 8 +0 + 62 + 0 + 10 +4924.999995 + 20 +12064.582559 + 30 +0.0 + 11 +4920.0 + 21 +12073.242805 + 31 +0.0 + 0 +LINE + 5 +103A + 8 +0 + 62 + 0 + 10 +6571.188015 + 20 +9170.0 + 30 +0.0 + 11 +6562.499995 + 21 +9185.048092 + 31 +0.0 + 0 +LINE + 5 +103B + 8 +0 + 62 + 0 + 10 +6537.499995 + 20 +9228.349362 + 30 +0.0 + 11 +6524.999995 + 21 +9249.999997 + 31 +0.0 + 0 +LINE + 5 +103C + 8 +0 + 62 + 0 + 10 +4999.999995 + 20 +11891.377479 + 30 +0.0 + 11 +4987.499995 + 21 +11913.028114 + 31 +0.0 + 0 +LINE + 5 +103D + 8 +0 + 62 + 0 + 10 +4962.499995 + 20 +11956.329384 + 30 +0.0 + 11 +4949.999995 + 21 +11977.980019 + 31 +0.0 + 0 +LINE + 5 +103E + 8 +0 + 62 + 0 + 10 +4924.999995 + 20 +12021.281289 + 30 +0.0 + 11 +4920.0 + 21 +12029.941535 + 31 +0.0 + 0 +LINE + 5 +103F + 8 +0 + 62 + 0 + 10 +6537.499995 + 20 +9185.048092 + 30 +0.0 + 11 +6524.999995 + 21 +9206.698727 + 31 +0.0 + 0 +LINE + 5 +1040 + 8 +0 + 62 + 0 + 10 +6499.999995 + 20 +9249.999997 + 30 +0.0 + 11 +6499.999993 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1041 + 8 +0 + 62 + 0 + 10 +4999.999995 + 20 +11848.076209 + 30 +0.0 + 11 +4987.499995 + 21 +11869.726844 + 31 +0.0 + 0 +LINE + 5 +1042 + 8 +0 + 62 + 0 + 10 +4962.499995 + 20 +11913.028114 + 30 +0.0 + 11 +4949.999995 + 21 +11934.678749 + 31 +0.0 + 0 +LINE + 5 +1043 + 8 +0 + 62 + 0 + 10 +4924.999995 + 20 +11977.980019 + 30 +0.0 + 11 +4920.0 + 21 +11986.640265 + 31 +0.0 + 0 +LINE + 5 +1044 + 8 +0 + 62 + 0 + 10 +6499.999995 + 20 +9206.698727 + 30 +0.0 + 11 +6487.499995 + 21 +9228.349362 + 31 +0.0 + 0 +LINE + 5 +1045 + 8 +0 + 62 + 0 + 10 +4999.999995 + 20 +11804.774938 + 30 +0.0 + 11 +4987.499995 + 21 +11826.425573 + 31 +0.0 + 0 +LINE + 5 +1046 + 8 +0 + 62 + 0 + 10 +4962.499995 + 20 +11869.726844 + 30 +0.0 + 11 +4949.999995 + 21 +11891.377479 + 31 +0.0 + 0 +LINE + 5 +1047 + 8 +0 + 62 + 0 + 10 +4924.999995 + 20 +11934.678749 + 30 +0.0 + 11 +4920.0 + 21 +11943.338995 + 31 +0.0 + 0 +LINE + 5 +1048 + 8 +0 + 62 + 0 + 10 +6496.188015 + 20 +9170.0 + 30 +0.0 + 11 +6487.499995 + 21 +9185.048092 + 31 +0.0 + 0 +LINE + 5 +1049 + 8 +0 + 62 + 0 + 10 +6462.499995 + 20 +9228.349362 + 30 +0.0 + 11 +6449.999995 + 21 +9249.999997 + 31 +0.0 + 0 +LINE + 5 +104A + 8 +0 + 62 + 0 + 10 +4999.999995 + 20 +11761.473668 + 30 +0.0 + 11 +4987.499995 + 21 +11783.124303 + 31 +0.0 + 0 +LINE + 5 +104B + 8 +0 + 62 + 0 + 10 +4962.499995 + 20 +11826.425574 + 30 +0.0 + 11 +4949.999995 + 21 +11848.076209 + 31 +0.0 + 0 +LINE + 5 +104C + 8 +0 + 62 + 0 + 10 +4924.999995 + 20 +11891.377479 + 30 +0.0 + 11 +4920.0 + 21 +11900.037725 + 31 +0.0 + 0 +LINE + 5 +104D + 8 +0 + 62 + 0 + 10 +6462.499995 + 20 +9185.048092 + 30 +0.0 + 11 +6449.999995 + 21 +9206.698727 + 31 +0.0 + 0 +LINE + 5 +104E + 8 +0 + 62 + 0 + 10 +6424.999995 + 20 +9249.999997 + 30 +0.0 + 11 +6424.999994 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +104F + 8 +0 + 62 + 0 + 10 +4999.999995 + 20 +11718.172398 + 30 +0.0 + 11 +4987.499995 + 21 +11739.823033 + 31 +0.0 + 0 +LINE + 5 +1050 + 8 +0 + 62 + 0 + 10 +4962.499995 + 20 +11783.124303 + 30 +0.0 + 11 +4949.999995 + 21 +11804.774938 + 31 +0.0 + 0 +LINE + 5 +1051 + 8 +0 + 62 + 0 + 10 +4924.999995 + 20 +11848.076209 + 30 +0.0 + 11 +4920.0 + 21 +11856.736455 + 31 +0.0 + 0 +LINE + 5 +1052 + 8 +0 + 62 + 0 + 10 +6424.999995 + 20 +9206.698727 + 30 +0.0 + 11 +6412.499995 + 21 +9228.349362 + 31 +0.0 + 0 +LINE + 5 +1053 + 8 +0 + 62 + 0 + 10 +4999.999995 + 20 +11674.871128 + 30 +0.0 + 11 +4987.499995 + 21 +11696.521763 + 31 +0.0 + 0 +LINE + 5 +1054 + 8 +0 + 62 + 0 + 10 +4962.499995 + 20 +11739.823033 + 30 +0.0 + 11 +4949.999995 + 21 +11761.473668 + 31 +0.0 + 0 +LINE + 5 +1055 + 8 +0 + 62 + 0 + 10 +4924.999995 + 20 +11804.774939 + 30 +0.0 + 11 +4920.0 + 21 +11813.435185 + 31 +0.0 + 0 +LINE + 5 +1056 + 8 +0 + 62 + 0 + 10 +6421.188016 + 20 +9170.0 + 30 +0.0 + 11 +6412.499995 + 21 +9185.048092 + 31 +0.0 + 0 +LINE + 5 +1057 + 8 +0 + 62 + 0 + 10 +6387.499995 + 20 +9228.349362 + 30 +0.0 + 11 +6374.999995 + 21 +9249.999997 + 31 +0.0 + 0 +LINE + 5 +1058 + 8 +0 + 62 + 0 + 10 +4999.999995 + 20 +11631.569858 + 30 +0.0 + 11 +4987.499995 + 21 +11653.220493 + 31 +0.0 + 0 +LINE + 5 +1059 + 8 +0 + 62 + 0 + 10 +4962.499995 + 20 +11696.521763 + 30 +0.0 + 11 +4949.999995 + 21 +11718.172398 + 31 +0.0 + 0 +LINE + 5 +105A + 8 +0 + 62 + 0 + 10 +4924.999995 + 20 +11761.473668 + 30 +0.0 + 11 +4920.0 + 21 +11770.133915 + 31 +0.0 + 0 +LINE + 5 +105B + 8 +0 + 62 + 0 + 10 +6387.499996 + 20 +9185.048092 + 30 +0.0 + 11 +6374.999996 + 21 +9206.698727 + 31 +0.0 + 0 +LINE + 5 +105C + 8 +0 + 62 + 0 + 10 +6349.999996 + 20 +9249.999997 + 30 +0.0 + 11 +6349.999994 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +105D + 8 +0 + 62 + 0 + 10 +4999.999996 + 20 +11588.268588 + 30 +0.0 + 11 +4987.499996 + 21 +11609.919223 + 31 +0.0 + 0 +LINE + 5 +105E + 8 +0 + 62 + 0 + 10 +4962.499996 + 20 +11653.220493 + 30 +0.0 + 11 +4949.999996 + 21 +11674.871128 + 31 +0.0 + 0 +LINE + 5 +105F + 8 +0 + 62 + 0 + 10 +4924.999996 + 20 +11718.172398 + 30 +0.0 + 11 +4920.0 + 21 +11726.832645 + 31 +0.0 + 0 +LINE + 5 +1060 + 8 +0 + 62 + 0 + 10 +6349.999996 + 20 +9206.698727 + 30 +0.0 + 11 +6337.499996 + 21 +9228.349362 + 31 +0.0 + 0 +LINE + 5 +1061 + 8 +0 + 62 + 0 + 10 +4999.999996 + 20 +11544.967318 + 30 +0.0 + 11 +4987.499996 + 21 +11566.617953 + 31 +0.0 + 0 +LINE + 5 +1062 + 8 +0 + 62 + 0 + 10 +4962.499996 + 20 +11609.919223 + 30 +0.0 + 11 +4949.999996 + 21 +11631.569858 + 31 +0.0 + 0 +LINE + 5 +1063 + 8 +0 + 62 + 0 + 10 +4924.999996 + 20 +11674.871128 + 30 +0.0 + 11 +4920.0 + 21 +11683.531375 + 31 +0.0 + 0 +LINE + 5 +1064 + 8 +0 + 62 + 0 + 10 +6346.188016 + 20 +9170.0 + 30 +0.0 + 11 +6337.499996 + 21 +9185.048092 + 31 +0.0 + 0 +LINE + 5 +1065 + 8 +0 + 62 + 0 + 10 +6312.499996 + 20 +9228.349362 + 30 +0.0 + 11 +6299.999996 + 21 +9249.999998 + 31 +0.0 + 0 +LINE + 5 +1066 + 8 +0 + 62 + 0 + 10 +4999.999996 + 20 +11501.666047 + 30 +0.0 + 11 +4987.499996 + 21 +11523.316682 + 31 +0.0 + 0 +LINE + 5 +1067 + 8 +0 + 62 + 0 + 10 +4962.499996 + 20 +11566.617953 + 30 +0.0 + 11 +4949.999996 + 21 +11588.268588 + 31 +0.0 + 0 +LINE + 5 +1068 + 8 +0 + 62 + 0 + 10 +4924.999996 + 20 +11631.569858 + 30 +0.0 + 11 +4920.0 + 21 +11640.230105 + 31 +0.0 + 0 +LINE + 5 +1069 + 8 +0 + 62 + 0 + 10 +6312.499996 + 20 +9185.048092 + 30 +0.0 + 11 +6299.999996 + 21 +9206.698727 + 31 +0.0 + 0 +LINE + 5 +106A + 8 +0 + 62 + 0 + 10 +6274.999996 + 20 +9249.999998 + 30 +0.0 + 11 +6274.999994 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +106B + 8 +0 + 62 + 0 + 10 +4999.999996 + 20 +11458.364777 + 30 +0.0 + 11 +4987.499996 + 21 +11480.015412 + 31 +0.0 + 0 +LINE + 5 +106C + 8 +0 + 62 + 0 + 10 +4962.499996 + 20 +11523.316683 + 30 +0.0 + 11 +4949.999996 + 21 +11544.967318 + 31 +0.0 + 0 +LINE + 5 +106D + 8 +0 + 62 + 0 + 10 +4924.999996 + 20 +11588.268588 + 30 +0.0 + 11 +4920.0 + 21 +11596.928835 + 31 +0.0 + 0 +LINE + 5 +106E + 8 +0 + 62 + 0 + 10 +6274.999996 + 20 +9206.698727 + 30 +0.0 + 11 +6262.499996 + 21 +9228.349363 + 31 +0.0 + 0 +LINE + 5 +106F + 8 +0 + 62 + 0 + 10 +4999.999996 + 20 +11415.063507 + 30 +0.0 + 11 +4987.499996 + 21 +11436.714142 + 31 +0.0 + 0 +LINE + 5 +1070 + 8 +0 + 62 + 0 + 10 +4962.499996 + 20 +11480.015412 + 30 +0.0 + 11 +4949.999996 + 21 +11501.666047 + 31 +0.0 + 0 +LINE + 5 +1071 + 8 +0 + 62 + 0 + 10 +4924.999996 + 20 +11544.967318 + 30 +0.0 + 11 +4920.0 + 21 +11553.627565 + 31 +0.0 + 0 +LINE + 5 +1072 + 8 +0 + 62 + 0 + 10 +6271.188016 + 20 +9170.0 + 30 +0.0 + 11 +6262.499996 + 21 +9185.048092 + 31 +0.0 + 0 +LINE + 5 +1073 + 8 +0 + 62 + 0 + 10 +6237.499996 + 20 +9228.349363 + 30 +0.0 + 11 +6224.999996 + 21 +9249.999998 + 31 +0.0 + 0 +LINE + 5 +1074 + 8 +0 + 62 + 0 + 10 +4999.999996 + 20 +11371.762237 + 30 +0.0 + 11 +4987.499996 + 21 +11393.412872 + 31 +0.0 + 0 +LINE + 5 +1075 + 8 +0 + 62 + 0 + 10 +4962.499996 + 20 +11436.714142 + 30 +0.0 + 11 +4949.999996 + 21 +11458.364777 + 31 +0.0 + 0 +LINE + 5 +1076 + 8 +0 + 62 + 0 + 10 +4924.999996 + 20 +11501.666048 + 30 +0.0 + 11 +4920.0 + 21 +11510.326295 + 31 +0.0 + 0 +LINE + 5 +1077 + 8 +0 + 62 + 0 + 10 +6237.499996 + 20 +9185.048092 + 30 +0.0 + 11 +6224.999996 + 21 +9206.698728 + 31 +0.0 + 0 +LINE + 5 +1078 + 8 +0 + 62 + 0 + 10 +6199.999996 + 20 +9249.999998 + 30 +0.0 + 11 +6199.999995 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1079 + 8 +0 + 62 + 0 + 10 +4999.999996 + 20 +11328.460967 + 30 +0.0 + 11 +4987.499996 + 21 +11350.111602 + 31 +0.0 + 0 +LINE + 5 +107A + 8 +0 + 62 + 0 + 10 +4962.499996 + 20 +11393.412872 + 30 +0.0 + 11 +4949.999996 + 21 +11415.063507 + 31 +0.0 + 0 +LINE + 5 +107B + 8 +0 + 62 + 0 + 10 +4924.999996 + 20 +11458.364777 + 30 +0.0 + 11 +4920.0 + 21 +11467.025025 + 31 +0.0 + 0 +LINE + 5 +107C + 8 +0 + 62 + 0 + 10 +6199.999996 + 20 +9206.698728 + 30 +0.0 + 11 +6187.499996 + 21 +9228.349363 + 31 +0.0 + 0 +LINE + 5 +107D + 8 +0 + 62 + 0 + 10 +4999.999996 + 20 +11285.159697 + 30 +0.0 + 11 +4987.499996 + 21 +11306.810332 + 31 +0.0 + 0 +LINE + 5 +107E + 8 +0 + 62 + 0 + 10 +4962.499996 + 20 +11350.111602 + 30 +0.0 + 11 +4949.999996 + 21 +11371.762237 + 31 +0.0 + 0 +LINE + 5 +107F + 8 +0 + 62 + 0 + 10 +4924.999996 + 20 +11415.063507 + 30 +0.0 + 11 +4920.0 + 21 +11423.723755 + 31 +0.0 + 0 +LINE + 5 +1080 + 8 +0 + 62 + 0 + 10 +6196.188017 + 20 +9170.0 + 30 +0.0 + 11 +6187.499996 + 21 +9185.048093 + 31 +0.0 + 0 +LINE + 5 +1081 + 8 +0 + 62 + 0 + 10 +6162.499996 + 20 +9228.349363 + 30 +0.0 + 11 +6149.999996 + 21 +9249.999998 + 31 +0.0 + 0 +LINE + 5 +1082 + 8 +0 + 62 + 0 + 10 +4999.999996 + 20 +11241.858427 + 30 +0.0 + 11 +4987.499996 + 21 +11263.509062 + 31 +0.0 + 0 +LINE + 5 +1083 + 8 +0 + 62 + 0 + 10 +4962.499996 + 20 +11306.810332 + 30 +0.0 + 11 +4949.999996 + 21 +11328.460967 + 31 +0.0 + 0 +LINE + 5 +1084 + 8 +0 + 62 + 0 + 10 +4924.999996 + 20 +11371.762237 + 30 +0.0 + 11 +4920.0 + 21 +11380.422485 + 31 +0.0 + 0 +LINE + 5 +1085 + 8 +0 + 62 + 0 + 10 +6162.499996 + 20 +9185.048093 + 30 +0.0 + 11 +6149.999996 + 21 +9206.698728 + 31 +0.0 + 0 +LINE + 5 +1086 + 8 +0 + 62 + 0 + 10 +6124.999996 + 20 +9249.999998 + 30 +0.0 + 11 +6124.999995 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1087 + 8 +0 + 62 + 0 + 10 +4999.999996 + 20 +11198.557156 + 30 +0.0 + 11 +4987.499996 + 21 +11220.207791 + 31 +0.0 + 0 +LINE + 5 +1088 + 8 +0 + 62 + 0 + 10 +4962.499996 + 20 +11263.509062 + 30 +0.0 + 11 +4949.999996 + 21 +11285.159697 + 31 +0.0 + 0 +LINE + 5 +1089 + 8 +0 + 62 + 0 + 10 +4924.999996 + 20 +11328.460967 + 30 +0.0 + 11 +4920.0 + 21 +11337.121215 + 31 +0.0 + 0 +LINE + 5 +108A + 8 +0 + 62 + 0 + 10 +6124.999996 + 20 +9206.698728 + 30 +0.0 + 11 +6112.499996 + 21 +9228.349363 + 31 +0.0 + 0 +LINE + 5 +108B + 8 +0 + 62 + 0 + 10 +4999.999996 + 20 +11155.255886 + 30 +0.0 + 11 +4987.499996 + 21 +11176.906521 + 31 +0.0 + 0 +LINE + 5 +108C + 8 +0 + 62 + 0 + 10 +4962.499996 + 20 +11220.207792 + 30 +0.0 + 11 +4949.999996 + 21 +11241.858427 + 31 +0.0 + 0 +LINE + 5 +108D + 8 +0 + 62 + 0 + 10 +4924.999996 + 20 +11285.159697 + 30 +0.0 + 11 +4920.0 + 21 +11293.819945 + 31 +0.0 + 0 +LINE + 5 +108E + 8 +0 + 62 + 0 + 10 +6121.188017 + 20 +9170.0 + 30 +0.0 + 11 +6112.499996 + 21 +9185.048093 + 31 +0.0 + 0 +LINE + 5 +108F + 8 +0 + 62 + 0 + 10 +6087.499996 + 20 +9228.349363 + 30 +0.0 + 11 +6074.999996 + 21 +9249.999998 + 31 +0.0 + 0 +LINE + 5 +1090 + 8 +0 + 62 + 0 + 10 +4999.999996 + 20 +11111.954616 + 30 +0.0 + 11 +4987.499996 + 21 +11133.605251 + 31 +0.0 + 0 +LINE + 5 +1091 + 8 +0 + 62 + 0 + 10 +4962.499996 + 20 +11176.906521 + 30 +0.0 + 11 +4949.999996 + 21 +11198.557156 + 31 +0.0 + 0 +LINE + 5 +1092 + 8 +0 + 62 + 0 + 10 +4924.999996 + 20 +11241.858427 + 30 +0.0 + 11 +4920.0 + 21 +11250.518675 + 31 +0.0 + 0 +LINE + 5 +1093 + 8 +0 + 62 + 0 + 10 +6087.499997 + 20 +9185.048093 + 30 +0.0 + 11 +6074.999997 + 21 +9206.698728 + 31 +0.0 + 0 +LINE + 5 +1094 + 8 +0 + 62 + 0 + 10 +6049.999997 + 20 +9249.999998 + 30 +0.0 + 11 +6049.999995 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1095 + 8 +0 + 62 + 0 + 10 +4999.999997 + 20 +11068.653346 + 30 +0.0 + 11 +4987.499997 + 21 +11090.303981 + 31 +0.0 + 0 +LINE + 5 +1096 + 8 +0 + 62 + 0 + 10 +4962.499997 + 20 +11133.605251 + 30 +0.0 + 11 +4949.999997 + 21 +11155.255886 + 31 +0.0 + 0 +LINE + 5 +1097 + 8 +0 + 62 + 0 + 10 +4924.999997 + 20 +11198.557157 + 30 +0.0 + 11 +4920.0 + 21 +11207.217405 + 31 +0.0 + 0 +LINE + 5 +1098 + 8 +0 + 62 + 0 + 10 +6049.999997 + 20 +9206.698728 + 30 +0.0 + 11 +6037.499997 + 21 +9228.349363 + 31 +0.0 + 0 +LINE + 5 +1099 + 8 +0 + 62 + 0 + 10 +4999.999997 + 20 +11025.352076 + 30 +0.0 + 11 +4987.499997 + 21 +11047.002711 + 31 +0.0 + 0 +LINE + 5 +109A + 8 +0 + 62 + 0 + 10 +4962.499997 + 20 +11090.303981 + 30 +0.0 + 11 +4949.999997 + 21 +11111.954616 + 31 +0.0 + 0 +LINE + 5 +109B + 8 +0 + 62 + 0 + 10 +4924.999997 + 20 +11155.255886 + 30 +0.0 + 11 +4920.0 + 21 +11163.916135 + 31 +0.0 + 0 +LINE + 5 +109C + 8 +0 + 62 + 0 + 10 +6046.188017 + 20 +9170.0 + 30 +0.0 + 11 +6037.499997 + 21 +9185.048093 + 31 +0.0 + 0 +LINE + 5 +109D + 8 +0 + 62 + 0 + 10 +6012.499997 + 20 +9228.349363 + 30 +0.0 + 11 +5999.999997 + 21 +9249.999998 + 31 +0.0 + 0 +LINE + 5 +109E + 8 +0 + 62 + 0 + 10 +4999.999997 + 20 +10982.050806 + 30 +0.0 + 11 +4987.499997 + 21 +11003.701441 + 31 +0.0 + 0 +LINE + 5 +109F + 8 +0 + 62 + 0 + 10 +4962.499997 + 20 +11047.002711 + 30 +0.0 + 11 +4949.999997 + 21 +11068.653346 + 31 +0.0 + 0 +LINE + 5 +10A0 + 8 +0 + 62 + 0 + 10 +4924.999997 + 20 +11111.954616 + 30 +0.0 + 11 +4920.0 + 21 +11120.614865 + 31 +0.0 + 0 +LINE + 5 +10A1 + 8 +0 + 62 + 0 + 10 +6012.499997 + 20 +9185.048093 + 30 +0.0 + 11 +5999.999997 + 21 +9206.698728 + 31 +0.0 + 0 +LINE + 5 +10A2 + 8 +0 + 62 + 0 + 10 +5974.999997 + 20 +9249.999998 + 30 +0.0 + 11 +5974.999996 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +10A3 + 8 +0 + 62 + 0 + 10 +4999.999997 + 20 +10938.749536 + 30 +0.0 + 11 +4987.499997 + 21 +10960.400171 + 31 +0.0 + 0 +LINE + 5 +10A4 + 8 +0 + 62 + 0 + 10 +4962.499997 + 20 +11003.701441 + 30 +0.0 + 11 +4949.999997 + 21 +11025.352076 + 31 +0.0 + 0 +LINE + 5 +10A5 + 8 +0 + 62 + 0 + 10 +4924.999997 + 20 +11068.653346 + 30 +0.0 + 11 +4920.0 + 21 +11077.313595 + 31 +0.0 + 0 +LINE + 5 +10A6 + 8 +0 + 62 + 0 + 10 +5974.999997 + 20 +9206.698728 + 30 +0.0 + 11 +5962.499997 + 21 +9228.349363 + 31 +0.0 + 0 +LINE + 5 +10A7 + 8 +0 + 62 + 0 + 10 +4999.999997 + 20 +10895.448265 + 30 +0.0 + 11 +4987.499997 + 21 +10917.0989 + 31 +0.0 + 0 +LINE + 5 +10A8 + 8 +0 + 62 + 0 + 10 +4962.499997 + 20 +10960.400171 + 30 +0.0 + 11 +4949.999997 + 21 +10982.050806 + 31 +0.0 + 0 +LINE + 5 +10A9 + 8 +0 + 62 + 0 + 10 +4924.999997 + 20 +11025.352076 + 30 +0.0 + 11 +4920.0 + 21 +11034.012325 + 31 +0.0 + 0 +LINE + 5 +10AA + 8 +0 + 62 + 0 + 10 +5971.188017 + 20 +9170.0 + 30 +0.0 + 11 +5962.499997 + 21 +9185.048093 + 31 +0.0 + 0 +LINE + 5 +10AB + 8 +0 + 62 + 0 + 10 +5937.499997 + 20 +9228.349363 + 30 +0.0 + 11 +5924.999997 + 21 +9249.999998 + 31 +0.0 + 0 +LINE + 5 +10AC + 8 +0 + 62 + 0 + 10 +4999.999997 + 20 +10852.146995 + 30 +0.0 + 11 +4987.499997 + 21 +10873.79763 + 31 +0.0 + 0 +LINE + 5 +10AD + 8 +0 + 62 + 0 + 10 +4962.499997 + 20 +10917.098901 + 30 +0.0 + 11 +4949.999997 + 21 +10938.749536 + 31 +0.0 + 0 +LINE + 5 +10AE + 8 +0 + 62 + 0 + 10 +4924.999997 + 20 +10982.050806 + 30 +0.0 + 11 +4920.0 + 21 +10990.711055 + 31 +0.0 + 0 +LINE + 5 +10AF + 8 +0 + 62 + 0 + 10 +5937.499997 + 20 +9185.048093 + 30 +0.0 + 11 +5924.999997 + 21 +9206.698728 + 31 +0.0 + 0 +LINE + 5 +10B0 + 8 +0 + 62 + 0 + 10 +5899.999997 + 20 +9249.999998 + 30 +0.0 + 11 +5899.999996 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +10B1 + 8 +0 + 62 + 0 + 10 +4999.999997 + 20 +10808.845725 + 30 +0.0 + 11 +4987.499997 + 21 +10830.49636 + 31 +0.0 + 0 +LINE + 5 +10B2 + 8 +0 + 62 + 0 + 10 +4962.499997 + 20 +10873.79763 + 30 +0.0 + 11 +4949.999997 + 21 +10895.448265 + 31 +0.0 + 0 +LINE + 5 +10B3 + 8 +0 + 62 + 0 + 10 +4924.999997 + 20 +10938.749536 + 30 +0.0 + 11 +4920.0 + 21 +10947.409785 + 31 +0.0 + 0 +LINE + 5 +10B4 + 8 +0 + 62 + 0 + 10 +5899.999997 + 20 +9206.698728 + 30 +0.0 + 11 +5887.499997 + 21 +9228.349363 + 31 +0.0 + 0 +LINE + 5 +10B5 + 8 +0 + 62 + 0 + 10 +4999.999997 + 20 +10765.544455 + 30 +0.0 + 11 +4987.499997 + 21 +10787.19509 + 31 +0.0 + 0 +LINE + 5 +10B6 + 8 +0 + 62 + 0 + 10 +4962.499997 + 20 +10830.49636 + 30 +0.0 + 11 +4949.999997 + 21 +10852.146995 + 31 +0.0 + 0 +LINE + 5 +10B7 + 8 +0 + 62 + 0 + 10 +4924.999997 + 20 +10895.448266 + 30 +0.0 + 11 +4920.0 + 21 +10904.108515 + 31 +0.0 + 0 +LINE + 5 +10B8 + 8 +0 + 62 + 0 + 10 +5896.188018 + 20 +9170.0 + 30 +0.0 + 11 +5887.499997 + 21 +9185.048093 + 31 +0.0 + 0 +LINE + 5 +10B9 + 8 +0 + 62 + 0 + 10 +5862.499997 + 20 +9228.349363 + 30 +0.0 + 11 +5849.999997 + 21 +9249.999998 + 31 +0.0 + 0 +LINE + 5 +10BA + 8 +0 + 62 + 0 + 10 +4999.999997 + 20 +10722.243185 + 30 +0.0 + 11 +4987.499997 + 21 +10743.89382 + 31 +0.0 + 0 +LINE + 5 +10BB + 8 +0 + 62 + 0 + 10 +4962.499997 + 20 +10787.19509 + 30 +0.0 + 11 +4949.999997 + 21 +10808.845725 + 31 +0.0 + 0 +LINE + 5 +10BC + 8 +0 + 62 + 0 + 10 +4924.999997 + 20 +10852.146995 + 30 +0.0 + 11 +4920.0 + 21 +10860.807245 + 31 +0.0 + 0 +LINE + 5 +10BD + 8 +0 + 62 + 0 + 10 +5862.499997 + 20 +9185.048093 + 30 +0.0 + 11 +5849.999997 + 21 +9206.698728 + 31 +0.0 + 0 +LINE + 5 +10BE + 8 +0 + 62 + 0 + 10 +5824.999997 + 20 +9249.999998 + 30 +0.0 + 11 +5824.999996 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +10BF + 8 +0 + 62 + 0 + 10 +4999.999997 + 20 +10678.941915 + 30 +0.0 + 11 +4987.499997 + 21 +10700.59255 + 31 +0.0 + 0 +LINE + 5 +10C0 + 8 +0 + 62 + 0 + 10 +4962.499997 + 20 +10743.89382 + 30 +0.0 + 11 +4949.999997 + 21 +10765.544455 + 31 +0.0 + 0 +LINE + 5 +10C1 + 8 +0 + 62 + 0 + 10 +4924.999997 + 20 +10808.845725 + 30 +0.0 + 11 +4920.0 + 21 +10817.505975 + 31 +0.0 + 0 +LINE + 5 +10C2 + 8 +0 + 62 + 0 + 10 +5824.999997 + 20 +9206.698728 + 30 +0.0 + 11 +5812.499997 + 21 +9228.349363 + 31 +0.0 + 0 +LINE + 5 +10C3 + 8 +0 + 62 + 0 + 10 +4999.999997 + 20 +10635.640645 + 30 +0.0 + 11 +4987.499997 + 21 +10657.29128 + 31 +0.0 + 0 +LINE + 5 +10C4 + 8 +0 + 62 + 0 + 10 +4962.499997 + 20 +10700.59255 + 30 +0.0 + 11 +4949.999997 + 21 +10722.243185 + 31 +0.0 + 0 +LINE + 5 +10C5 + 8 +0 + 62 + 0 + 10 +4924.999997 + 20 +10765.544455 + 30 +0.0 + 11 +4920.0 + 21 +10774.204705 + 31 +0.0 + 0 +LINE + 5 +10C6 + 8 +0 + 62 + 0 + 10 +5821.188018 + 20 +9170.0 + 30 +0.0 + 11 +5812.499997 + 21 +9185.048093 + 31 +0.0 + 0 +LINE + 5 +10C7 + 8 +0 + 62 + 0 + 10 +5787.499997 + 20 +9228.349363 + 30 +0.0 + 11 +5774.999997 + 21 +9249.999999 + 31 +0.0 + 0 +LINE + 5 +10C8 + 8 +0 + 62 + 0 + 10 +4999.999997 + 20 +10592.339374 + 30 +0.0 + 11 +4987.499997 + 21 +10613.990009 + 31 +0.0 + 0 +LINE + 5 +10C9 + 8 +0 + 62 + 0 + 10 +4962.499997 + 20 +10657.29128 + 30 +0.0 + 11 +4949.999997 + 21 +10678.941915 + 31 +0.0 + 0 +LINE + 5 +10CA + 8 +0 + 62 + 0 + 10 +4924.999997 + 20 +10722.243185 + 30 +0.0 + 11 +4920.0 + 21 +10730.903435 + 31 +0.0 + 0 +LINE + 5 +10CB + 8 +0 + 62 + 0 + 10 +5787.499998 + 20 +9185.048093 + 30 +0.0 + 11 +5774.999998 + 21 +9206.698728 + 31 +0.0 + 0 +LINE + 5 +10CC + 8 +0 + 62 + 0 + 10 +5749.999998 + 20 +9249.999999 + 30 +0.0 + 11 +5749.999997 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +10CD + 8 +0 + 62 + 0 + 10 +4999.999998 + 20 +10549.038104 + 30 +0.0 + 11 +4987.499998 + 21 +10570.688739 + 31 +0.0 + 0 +LINE + 5 +10CE + 8 +0 + 62 + 0 + 10 +4962.499998 + 20 +10613.99001 + 30 +0.0 + 11 +4949.999998 + 21 +10635.640645 + 31 +0.0 + 0 +LINE + 5 +10CF + 8 +0 + 62 + 0 + 10 +4924.999998 + 20 +10678.941915 + 30 +0.0 + 11 +4920.0 + 21 +10687.602165 + 31 +0.0 + 0 +LINE + 5 +10D0 + 8 +0 + 62 + 0 + 10 +5749.999998 + 20 +9206.698728 + 30 +0.0 + 11 +5737.499998 + 21 +9228.349364 + 31 +0.0 + 0 +LINE + 5 +10D1 + 8 +0 + 62 + 0 + 10 +4999.999998 + 20 +10505.736834 + 30 +0.0 + 11 +4987.499998 + 21 +10527.387469 + 31 +0.0 + 0 +LINE + 5 +10D2 + 8 +0 + 62 + 0 + 10 +4962.499998 + 20 +10570.688739 + 30 +0.0 + 11 +4949.999998 + 21 +10592.339374 + 31 +0.0 + 0 +LINE + 5 +10D3 + 8 +0 + 62 + 0 + 10 +4924.999998 + 20 +10635.640645 + 30 +0.0 + 11 +4920.0 + 21 +10644.300895 + 31 +0.0 + 0 +LINE + 5 +10D4 + 8 +0 + 62 + 0 + 10 +5746.188018 + 20 +9170.0 + 30 +0.0 + 11 +5737.499998 + 21 +9185.048093 + 31 +0.0 + 0 +LINE + 5 +10D5 + 8 +0 + 62 + 0 + 10 +5712.499998 + 20 +9228.349364 + 30 +0.0 + 11 +5699.999998 + 21 +9249.999999 + 31 +0.0 + 0 +LINE + 5 +10D6 + 8 +0 + 62 + 0 + 10 +4999.999998 + 20 +10462.435564 + 30 +0.0 + 11 +4987.499998 + 21 +10484.086199 + 31 +0.0 + 0 +LINE + 5 +10D7 + 8 +0 + 62 + 0 + 10 +4962.499998 + 20 +10527.387469 + 30 +0.0 + 11 +4949.999998 + 21 +10549.038104 + 31 +0.0 + 0 +LINE + 5 +10D8 + 8 +0 + 62 + 0 + 10 +4924.999998 + 20 +10592.339375 + 30 +0.0 + 11 +4920.0 + 21 +10600.999625 + 31 +0.0 + 0 +LINE + 5 +10D9 + 8 +0 + 62 + 0 + 10 +5712.499998 + 20 +9185.048093 + 30 +0.0 + 11 +5699.999998 + 21 +9206.698729 + 31 +0.0 + 0 +LINE + 5 +10DA + 8 +0 + 62 + 0 + 10 +5674.999998 + 20 +9249.999999 + 30 +0.0 + 11 +5674.999997 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +10DB + 8 +0 + 62 + 0 + 10 +4999.999998 + 20 +10419.134294 + 30 +0.0 + 11 +4987.499998 + 21 +10440.784929 + 31 +0.0 + 0 +LINE + 5 +10DC + 8 +0 + 62 + 0 + 10 +4962.499998 + 20 +10484.086199 + 30 +0.0 + 11 +4949.999998 + 21 +10505.736834 + 31 +0.0 + 0 +LINE + 5 +10DD + 8 +0 + 62 + 0 + 10 +4924.999998 + 20 +10549.038104 + 30 +0.0 + 11 +4920.0 + 21 +10557.698355 + 31 +0.0 + 0 +LINE + 5 +10DE + 8 +0 + 62 + 0 + 10 +5674.999998 + 20 +9206.698729 + 30 +0.0 + 11 +5662.499998 + 21 +9228.349364 + 31 +0.0 + 0 +LINE + 5 +10DF + 8 +0 + 62 + 0 + 10 +4999.999998 + 20 +10375.833024 + 30 +0.0 + 11 +4987.499998 + 21 +10397.483659 + 31 +0.0 + 0 +LINE + 5 +10E0 + 8 +0 + 62 + 0 + 10 +4962.499998 + 20 +10440.784929 + 30 +0.0 + 11 +4949.999998 + 21 +10462.435564 + 31 +0.0 + 0 +LINE + 5 +10E1 + 8 +0 + 62 + 0 + 10 +4924.999998 + 20 +10505.736834 + 30 +0.0 + 11 +4920.0 + 21 +10514.397085 + 31 +0.0 + 0 +LINE + 5 +10E2 + 8 +0 + 62 + 0 + 10 +5671.188019 + 20 +9170.0 + 30 +0.0 + 11 +5662.499998 + 21 +9185.048094 + 31 +0.0 + 0 +LINE + 5 +10E3 + 8 +0 + 62 + 0 + 10 +5637.499998 + 20 +9228.349364 + 30 +0.0 + 11 +5624.999998 + 21 +9249.999999 + 31 +0.0 + 0 +LINE + 5 +10E4 + 8 +0 + 62 + 0 + 10 +4999.999998 + 20 +10332.531754 + 30 +0.0 + 11 +4987.499998 + 21 +10354.182389 + 31 +0.0 + 0 +LINE + 5 +10E5 + 8 +0 + 62 + 0 + 10 +4962.499998 + 20 +10397.483659 + 30 +0.0 + 11 +4949.999998 + 21 +10419.134294 + 31 +0.0 + 0 +LINE + 5 +10E6 + 8 +0 + 62 + 0 + 10 +4924.999998 + 20 +10462.435564 + 30 +0.0 + 11 +4920.0 + 21 +10471.095815 + 31 +0.0 + 0 +LINE + 5 +10E7 + 8 +0 + 62 + 0 + 10 +5637.499998 + 20 +9185.048094 + 30 +0.0 + 11 +5624.999998 + 21 +9206.698729 + 31 +0.0 + 0 +LINE + 5 +10E8 + 8 +0 + 62 + 0 + 10 +5599.999998 + 20 +9249.999999 + 30 +0.0 + 11 +5599.999997 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +10E9 + 8 +0 + 62 + 0 + 10 +4999.999998 + 20 +10289.230483 + 30 +0.0 + 11 +4987.499998 + 21 +10310.881119 + 31 +0.0 + 0 +LINE + 5 +10EA + 8 +0 + 62 + 0 + 10 +4962.499998 + 20 +10354.182389 + 30 +0.0 + 11 +4949.999998 + 21 +10375.833024 + 31 +0.0 + 0 +LINE + 5 +10EB + 8 +0 + 62 + 0 + 10 +4924.999998 + 20 +10419.134294 + 30 +0.0 + 11 +4920.0 + 21 +10427.794545 + 31 +0.0 + 0 +LINE + 5 +10EC + 8 +0 + 62 + 0 + 10 +5599.999998 + 20 +9206.698729 + 30 +0.0 + 11 +5587.499998 + 21 +9228.349364 + 31 +0.0 + 0 +LINE + 5 +10ED + 8 +0 + 62 + 0 + 10 +4999.999998 + 20 +10245.929213 + 30 +0.0 + 11 +4987.499998 + 21 +10267.579848 + 31 +0.0 + 0 +LINE + 5 +10EE + 8 +0 + 62 + 0 + 10 +4962.499998 + 20 +10310.881119 + 30 +0.0 + 11 +4949.999998 + 21 +10332.531754 + 31 +0.0 + 0 +LINE + 5 +10EF + 8 +0 + 62 + 0 + 10 +4924.999998 + 20 +10375.833024 + 30 +0.0 + 11 +4920.0 + 21 +10384.493275 + 31 +0.0 + 0 +LINE + 5 +10F0 + 8 +0 + 62 + 0 + 10 +5596.188019 + 20 +9170.0 + 30 +0.0 + 11 +5587.499998 + 21 +9185.048094 + 31 +0.0 + 0 +LINE + 5 +10F1 + 8 +0 + 62 + 0 + 10 +5562.499998 + 20 +9228.349364 + 30 +0.0 + 11 +5549.999998 + 21 +9249.999999 + 31 +0.0 + 0 +LINE + 5 +10F2 + 8 +0 + 62 + 0 + 10 +4999.999998 + 20 +10202.627943 + 30 +0.0 + 11 +4987.499998 + 21 +10224.278578 + 31 +0.0 + 0 +LINE + 5 +10F3 + 8 +0 + 62 + 0 + 10 +4962.499998 + 20 +10267.579848 + 30 +0.0 + 11 +4949.999998 + 21 +10289.230484 + 31 +0.0 + 0 +LINE + 5 +10F4 + 8 +0 + 62 + 0 + 10 +4924.999998 + 20 +10332.531754 + 30 +0.0 + 11 +4920.0 + 21 +10341.192005 + 31 +0.0 + 0 +LINE + 5 +10F5 + 8 +0 + 62 + 0 + 10 +5562.499998 + 20 +9185.048094 + 30 +0.0 + 11 +5549.999998 + 21 +9206.698729 + 31 +0.0 + 0 +LINE + 5 +10F6 + 8 +0 + 62 + 0 + 10 +5524.999998 + 20 +9249.999999 + 30 +0.0 + 11 +5524.999998 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +10F7 + 8 +0 + 62 + 0 + 10 +4999.999998 + 20 +10159.326673 + 30 +0.0 + 11 +4987.499998 + 21 +10180.977308 + 31 +0.0 + 0 +LINE + 5 +10F8 + 8 +0 + 62 + 0 + 10 +4962.499998 + 20 +10224.278578 + 30 +0.0 + 11 +4949.999998 + 21 +10245.929213 + 31 +0.0 + 0 +LINE + 5 +10F9 + 8 +0 + 62 + 0 + 10 +4924.999998 + 20 +10289.230484 + 30 +0.0 + 11 +4920.0 + 21 +10297.890735 + 31 +0.0 + 0 +LINE + 5 +10FA + 8 +0 + 62 + 0 + 10 +5524.999998 + 20 +9206.698729 + 30 +0.0 + 11 +5512.499998 + 21 +9228.349364 + 31 +0.0 + 0 +LINE + 5 +10FB + 8 +0 + 62 + 0 + 10 +4999.999998 + 20 +10116.025403 + 30 +0.0 + 11 +4987.499998 + 21 +10137.676038 + 31 +0.0 + 0 +LINE + 5 +10FC + 8 +0 + 62 + 0 + 10 +4962.499998 + 20 +10180.977308 + 30 +0.0 + 11 +4949.999998 + 21 +10202.627943 + 31 +0.0 + 0 +LINE + 5 +10FD + 8 +0 + 62 + 0 + 10 +4924.999998 + 20 +10245.929213 + 30 +0.0 + 11 +4920.0 + 21 +10254.589465 + 31 +0.0 + 0 +LINE + 5 +10FE + 8 +0 + 62 + 0 + 10 +5521.188019 + 20 +9170.0 + 30 +0.0 + 11 +5512.499998 + 21 +9185.048094 + 31 +0.0 + 0 +LINE + 5 +10FF + 8 +0 + 62 + 0 + 10 +5487.499998 + 20 +9228.349364 + 30 +0.0 + 11 +5474.999998 + 21 +9249.999999 + 31 +0.0 + 0 +LINE + 5 +1100 + 8 +0 + 62 + 0 + 10 +4999.999998 + 20 +10072.724133 + 30 +0.0 + 11 +4987.499998 + 21 +10094.374768 + 31 +0.0 + 0 +LINE + 5 +1101 + 8 +0 + 62 + 0 + 10 +4962.499998 + 20 +10137.676038 + 30 +0.0 + 11 +4949.999998 + 21 +10159.326673 + 31 +0.0 + 0 +LINE + 5 +1102 + 8 +0 + 62 + 0 + 10 +4924.999998 + 20 +10202.627943 + 30 +0.0 + 11 +4920.0 + 21 +10211.288195 + 31 +0.0 + 0 +LINE + 5 +1103 + 8 +0 + 62 + 0 + 10 +5487.499999 + 20 +9185.048094 + 30 +0.0 + 11 +5474.999999 + 21 +9206.698729 + 31 +0.0 + 0 +LINE + 5 +1104 + 8 +0 + 62 + 0 + 10 +5449.999999 + 20 +9249.999999 + 30 +0.0 + 11 +5449.999998 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1105 + 8 +0 + 62 + 0 + 10 +4999.999999 + 20 +10029.422863 + 30 +0.0 + 11 +4987.499999 + 21 +10051.073498 + 31 +0.0 + 0 +LINE + 5 +1106 + 8 +0 + 62 + 0 + 10 +4962.499999 + 20 +10094.374768 + 30 +0.0 + 11 +4949.999999 + 21 +10116.025403 + 31 +0.0 + 0 +LINE + 5 +1107 + 8 +0 + 62 + 0 + 10 +4924.999999 + 20 +10159.326673 + 30 +0.0 + 11 +4920.0 + 21 +10167.986925 + 31 +0.0 + 0 +LINE + 5 +1108 + 8 +0 + 62 + 0 + 10 +5449.999999 + 20 +9206.698729 + 30 +0.0 + 11 +5437.499999 + 21 +9228.349364 + 31 +0.0 + 0 +LINE + 5 +1109 + 8 +0 + 62 + 0 + 10 +4999.999999 + 20 +9986.121592 + 30 +0.0 + 11 +4987.499999 + 21 +10007.772228 + 31 +0.0 + 0 +LINE + 5 +110A + 8 +0 + 62 + 0 + 10 +4962.499999 + 20 +10051.073498 + 30 +0.0 + 11 +4949.999999 + 21 +10072.724133 + 31 +0.0 + 0 +LINE + 5 +110B + 8 +0 + 62 + 0 + 10 +4924.999999 + 20 +10116.025403 + 30 +0.0 + 11 +4920.0 + 21 +10124.685655 + 31 +0.0 + 0 +LINE + 5 +110C + 8 +0 + 62 + 0 + 10 +5446.18802 + 20 +9170.0 + 30 +0.0 + 11 +5437.499999 + 21 +9185.048094 + 31 +0.0 + 0 +LINE + 5 +110D + 8 +0 + 62 + 0 + 10 +5412.499999 + 20 +9228.349364 + 30 +0.0 + 11 +5399.999999 + 21 +9249.999999 + 31 +0.0 + 0 +LINE + 5 +110E + 8 +0 + 62 + 0 + 10 +4999.999999 + 20 +9942.820322 + 30 +0.0 + 11 +4987.499999 + 21 +9964.470957 + 31 +0.0 + 0 +LINE + 5 +110F + 8 +0 + 62 + 0 + 10 +4962.499999 + 20 +10007.772228 + 30 +0.0 + 11 +4949.999999 + 21 +10029.422863 + 31 +0.0 + 0 +LINE + 5 +1110 + 8 +0 + 62 + 0 + 10 +4924.999999 + 20 +10072.724133 + 30 +0.0 + 11 +4920.0 + 21 +10081.384385 + 31 +0.0 + 0 +LINE + 5 +1111 + 8 +0 + 62 + 0 + 10 +5412.499999 + 20 +9185.048094 + 30 +0.0 + 11 +5399.999999 + 21 +9206.698729 + 31 +0.0 + 0 +LINE + 5 +1112 + 8 +0 + 62 + 0 + 10 +5374.999999 + 20 +9249.999999 + 30 +0.0 + 11 +5374.999998 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1113 + 8 +0 + 62 + 0 + 10 +4999.999999 + 20 +9899.519052 + 30 +0.0 + 11 +4987.499999 + 21 +9921.169687 + 31 +0.0 + 0 +LINE + 5 +1114 + 8 +0 + 62 + 0 + 10 +4962.499999 + 20 +9964.470957 + 30 +0.0 + 11 +4949.999999 + 21 +9986.121593 + 31 +0.0 + 0 +LINE + 5 +1115 + 8 +0 + 62 + 0 + 10 +4924.999999 + 20 +10029.422863 + 30 +0.0 + 11 +4920.0 + 21 +10038.083115 + 31 +0.0 + 0 +LINE + 5 +1116 + 8 +0 + 62 + 0 + 10 +5374.999999 + 20 +9206.698729 + 30 +0.0 + 11 +5362.499999 + 21 +9228.349364 + 31 +0.0 + 0 +LINE + 5 +1117 + 8 +0 + 62 + 0 + 10 +4999.999999 + 20 +9856.217782 + 30 +0.0 + 11 +4987.499999 + 21 +9877.868417 + 31 +0.0 + 0 +LINE + 5 +1118 + 8 +0 + 62 + 0 + 10 +4962.499999 + 20 +9921.169687 + 30 +0.0 + 11 +4949.999999 + 21 +9942.820322 + 31 +0.0 + 0 +LINE + 5 +1119 + 8 +0 + 62 + 0 + 10 +4924.999999 + 20 +9986.121593 + 30 +0.0 + 11 +4920.0 + 21 +9994.781845 + 31 +0.0 + 0 +LINE + 5 +111A + 8 +0 + 62 + 0 + 10 +5371.18802 + 20 +9170.0 + 30 +0.0 + 11 +5362.499999 + 21 +9185.048094 + 31 +0.0 + 0 +LINE + 5 +111B + 8 +0 + 62 + 0 + 10 +5337.499999 + 20 +9228.349364 + 30 +0.0 + 11 +5324.999999 + 21 +9249.999999 + 31 +0.0 + 0 +LINE + 5 +111C + 8 +0 + 62 + 0 + 10 +4999.999999 + 20 +9812.916512 + 30 +0.0 + 11 +4987.499999 + 21 +9834.567147 + 31 +0.0 + 0 +LINE + 5 +111D + 8 +0 + 62 + 0 + 10 +4962.499999 + 20 +9877.868417 + 30 +0.0 + 11 +4949.999999 + 21 +9899.519052 + 31 +0.0 + 0 +LINE + 5 +111E + 8 +0 + 62 + 0 + 10 +4924.999999 + 20 +9942.820322 + 30 +0.0 + 11 +4920.0 + 21 +9951.480575 + 31 +0.0 + 0 +LINE + 5 +111F + 8 +0 + 62 + 0 + 10 +5337.499999 + 20 +9185.048094 + 30 +0.0 + 11 +5324.999999 + 21 +9206.698729 + 31 +0.0 + 0 +LINE + 5 +1120 + 8 +0 + 62 + 0 + 10 +5299.999999 + 20 +9249.999999 + 30 +0.0 + 11 +5299.999999 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1121 + 8 +0 + 62 + 0 + 10 +4999.999999 + 20 +9769.615242 + 30 +0.0 + 11 +4987.499999 + 21 +9791.265877 + 31 +0.0 + 0 +LINE + 5 +1122 + 8 +0 + 62 + 0 + 10 +4962.499999 + 20 +9834.567147 + 30 +0.0 + 11 +4949.999999 + 21 +9856.217782 + 31 +0.0 + 0 +LINE + 5 +1123 + 8 +0 + 62 + 0 + 10 +4924.999999 + 20 +9899.519052 + 30 +0.0 + 11 +4920.0 + 21 +9908.179305 + 31 +0.0 + 0 +LINE + 5 +1124 + 8 +0 + 62 + 0 + 10 +5299.999999 + 20 +9206.698729 + 30 +0.0 + 11 +5287.499999 + 21 +9228.349364 + 31 +0.0 + 0 +LINE + 5 +1125 + 8 +0 + 62 + 0 + 10 +4999.999999 + 20 +9726.313972 + 30 +0.0 + 11 +4987.499999 + 21 +9747.964607 + 31 +0.0 + 0 +LINE + 5 +1126 + 8 +0 + 62 + 0 + 10 +4962.499999 + 20 +9791.265877 + 30 +0.0 + 11 +4949.999999 + 21 +9812.916512 + 31 +0.0 + 0 +LINE + 5 +1127 + 8 +0 + 62 + 0 + 10 +4924.999999 + 20 +9856.217782 + 30 +0.0 + 11 +4920.0 + 21 +9864.878035 + 31 +0.0 + 0 +LINE + 5 +1128 + 8 +0 + 62 + 0 + 10 +5296.18802 + 20 +9170.0 + 30 +0.0 + 11 +5287.499999 + 21 +9185.048094 + 31 +0.0 + 0 +LINE + 5 +1129 + 8 +0 + 62 + 0 + 10 +5262.499999 + 20 +9228.349364 + 30 +0.0 + 11 +5249.999999 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +112A + 8 +0 + 62 + 0 + 10 +4999.999999 + 20 +9683.012701 + 30 +0.0 + 11 +4987.499999 + 21 +9704.663337 + 31 +0.0 + 0 +LINE + 5 +112B + 8 +0 + 62 + 0 + 10 +4962.499999 + 20 +9747.964607 + 30 +0.0 + 11 +4949.999999 + 21 +9769.615242 + 31 +0.0 + 0 +LINE + 5 +112C + 8 +0 + 62 + 0 + 10 +4924.999999 + 20 +9812.916512 + 30 +0.0 + 11 +4920.0 + 21 +9821.576765 + 31 +0.0 + 0 +LINE + 5 +112D + 8 +0 + 62 + 0 + 10 +5262.499999 + 20 +9185.048094 + 30 +0.0 + 11 +5249.999999 + 21 +9206.698729 + 31 +0.0 + 0 +LINE + 5 +112E + 8 +0 + 62 + 0 + 10 +5224.999999 + 20 +9250.0 + 30 +0.0 + 11 +5224.999999 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +112F + 8 +0 + 62 + 0 + 10 +4999.999999 + 20 +9639.711431 + 30 +0.0 + 11 +4987.499999 + 21 +9661.362066 + 31 +0.0 + 0 +LINE + 5 +1130 + 8 +0 + 62 + 0 + 10 +4962.499999 + 20 +9704.663337 + 30 +0.0 + 11 +4949.999999 + 21 +9726.313972 + 31 +0.0 + 0 +LINE + 5 +1131 + 8 +0 + 62 + 0 + 10 +4924.999999 + 20 +9769.615242 + 30 +0.0 + 11 +4920.0 + 21 +9778.275495 + 31 +0.0 + 0 +LINE + 5 +1132 + 8 +0 + 62 + 0 + 10 +5224.999999 + 20 +9206.698729 + 30 +0.0 + 11 +5212.499999 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1133 + 8 +0 + 62 + 0 + 10 +4999.999999 + 20 +9596.410161 + 30 +0.0 + 11 +4987.499999 + 21 +9618.060796 + 31 +0.0 + 0 +LINE + 5 +1134 + 8 +0 + 62 + 0 + 10 +4962.499999 + 20 +9661.362066 + 30 +0.0 + 11 +4949.999999 + 21 +9683.012702 + 31 +0.0 + 0 +LINE + 5 +1135 + 8 +0 + 62 + 0 + 10 +4924.999999 + 20 +9726.313972 + 30 +0.0 + 11 +4920.0 + 21 +9734.974225 + 31 +0.0 + 0 +LINE + 5 +1136 + 8 +0 + 62 + 0 + 10 +5221.188021 + 20 +9170.0 + 30 +0.0 + 11 +5212.499999 + 21 +9185.048094 + 31 +0.0 + 0 +LINE + 5 +1137 + 8 +0 + 62 + 0 + 10 +5187.499999 + 20 +9228.349365 + 30 +0.0 + 11 +5174.999999 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1138 + 8 +0 + 62 + 0 + 10 +4999.999999 + 20 +9553.108891 + 30 +0.0 + 11 +4987.499999 + 21 +9574.759526 + 31 +0.0 + 0 +LINE + 5 +1139 + 8 +0 + 62 + 0 + 10 +4962.499999 + 20 +9618.060796 + 30 +0.0 + 11 +4949.999999 + 21 +9639.711431 + 31 +0.0 + 0 +LINE + 5 +113A + 8 +0 + 62 + 0 + 10 +4924.999999 + 20 +9683.012702 + 30 +0.0 + 11 +4920.0 + 21 +9691.672955 + 31 +0.0 + 0 +LINE + 5 +113B + 8 +0 + 62 + 0 + 10 +5187.5 + 20 +9185.048094 + 30 +0.0 + 11 +5175.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +113C + 8 +0 + 62 + 0 + 10 +5150.0 + 20 +9250.0 + 30 +0.0 + 11 +5149.999999 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +113D + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +9509.807621 + 30 +0.0 + 11 +4987.5 + 21 +9531.458256 + 31 +0.0 + 0 +LINE + 5 +113E + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +9574.759526 + 30 +0.0 + 11 +4950.0 + 21 +9596.410161 + 31 +0.0 + 0 +LINE + 5 +113F + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +9639.711431 + 30 +0.0 + 11 +4920.0 + 21 +9648.371685 + 31 +0.0 + 0 +LINE + 5 +1140 + 8 +0 + 62 + 0 + 10 +5150.0 + 20 +9206.69873 + 30 +0.0 + 11 +5137.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1141 + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +9466.506351 + 30 +0.0 + 11 +4987.5 + 21 +9488.156986 + 31 +0.0 + 0 +LINE + 5 +1142 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +9531.458256 + 30 +0.0 + 11 +4950.0 + 21 +9553.108891 + 31 +0.0 + 0 +LINE + 5 +1143 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +9596.410161 + 30 +0.0 + 11 +4920.0 + 21 +9605.070415 + 31 +0.0 + 0 +LINE + 5 +1144 + 8 +0 + 62 + 0 + 10 +5146.188021 + 20 +9170.0 + 30 +0.0 + 11 +5137.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +1145 + 8 +0 + 62 + 0 + 10 +5112.5 + 20 +9228.349365 + 30 +0.0 + 11 +5100.0 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1146 + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +9423.205081 + 30 +0.0 + 11 +4987.5 + 21 +9444.855716 + 31 +0.0 + 0 +LINE + 5 +1147 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +9488.156986 + 30 +0.0 + 11 +4950.0 + 21 +9509.807621 + 31 +0.0 + 0 +LINE + 5 +1148 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +9553.108891 + 30 +0.0 + 11 +4920.0 + 21 +9561.769145 + 31 +0.0 + 0 +LINE + 5 +1149 + 8 +0 + 62 + 0 + 10 +5112.5 + 20 +9185.048095 + 30 +0.0 + 11 +5100.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +114A + 8 +0 + 62 + 0 + 10 +5075.0 + 20 +9250.0 + 30 +0.0 + 11 +5075.0 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +114B + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +9379.90381 + 30 +0.0 + 11 +4987.5 + 21 +9401.554446 + 31 +0.0 + 0 +LINE + 5 +114C + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +9444.855716 + 30 +0.0 + 11 +4950.0 + 21 +9466.506351 + 31 +0.0 + 0 +LINE + 5 +114D + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +9509.807621 + 30 +0.0 + 11 +4920.0 + 21 +9518.467875 + 31 +0.0 + 0 +LINE + 5 +114E + 8 +0 + 62 + 0 + 10 +5075.0 + 20 +9206.69873 + 30 +0.0 + 11 +5062.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +114F + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +9336.60254 + 30 +0.0 + 11 +4987.5 + 21 +9358.253175 + 31 +0.0 + 0 +LINE + 5 +1150 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +9401.554446 + 30 +0.0 + 11 +4950.0 + 21 +9423.205081 + 31 +0.0 + 0 +LINE + 5 +1151 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +9466.506351 + 30 +0.0 + 11 +4920.0 + 21 +9475.166605 + 31 +0.0 + 0 +LINE + 5 +1152 + 8 +0 + 62 + 0 + 10 +5071.188021 + 20 +9170.0 + 30 +0.0 + 11 +5062.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +1153 + 8 +0 + 62 + 0 + 10 +5037.5 + 20 +9228.349365 + 30 +0.0 + 11 +5025.0 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1154 + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +9293.30127 + 30 +0.0 + 11 +4987.5 + 21 +9314.951905 + 31 +0.0 + 0 +LINE + 5 +1155 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +9358.253175 + 30 +0.0 + 11 +4950.0 + 21 +9379.903811 + 31 +0.0 + 0 +LINE + 5 +1156 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +9423.205081 + 30 +0.0 + 11 +4920.0 + 21 +9431.865335 + 31 +0.0 + 0 +LINE + 5 +1157 + 8 +0 + 62 + 0 + 10 +5037.5 + 20 +9185.048095 + 30 +0.0 + 11 +5025.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +1158 + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +9250.0 + 30 +0.0 + 11 +4987.5 + 21 +9271.650635 + 31 +0.0 + 0 +LINE + 5 +1159 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +9314.951905 + 30 +0.0 + 11 +4950.0 + 21 +9336.60254 + 31 +0.0 + 0 +LINE + 5 +115A + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +9379.903811 + 30 +0.0 + 11 +4920.0 + 21 +9388.564065 + 31 +0.0 + 0 +LINE + 5 +115B + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +9206.69873 + 30 +0.0 + 11 +4987.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +115C + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +9271.650635 + 30 +0.0 + 11 +4950.0 + 21 +9293.30127 + 31 +0.0 + 0 +LINE + 5 +115D + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +9336.60254 + 30 +0.0 + 11 +4920.0 + 21 +9345.262795 + 31 +0.0 + 0 +LINE + 5 +115E + 8 +0 + 62 + 0 + 10 +4996.188022 + 20 +9170.0 + 30 +0.0 + 11 +4987.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +115F + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +9228.349365 + 30 +0.0 + 11 +4950.0 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1160 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +9293.30127 + 30 +0.0 + 11 +4920.0 + 21 +9301.961525 + 31 +0.0 + 0 +LINE + 5 +1161 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +9185.048095 + 30 +0.0 + 11 +4950.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +1162 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +9250.0 + 30 +0.0 + 11 +4920.0 + 21 +9258.660255 + 31 +0.0 + 0 +LINE + 5 +1163 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +9206.69873 + 30 +0.0 + 11 +4920.0 + 21 +9215.358985 + 31 +0.0 + 0 +LINE + 5 +1164 + 8 +0 + 62 + 0 + 10 +4921.188022 + 20 +9170.0 + 30 +0.0 + 11 +4920.0 + 21 +9172.057715 + 31 +0.0 + 0 +LINE + 5 +1165 + 8 +0 + 62 + 0 + 10 +4999.999991 + 20 +14229.646066 + 30 +0.0 + 11 +4987.499991 + 21 +14251.296701 + 31 +0.0 + 0 +LINE + 5 +1166 + 8 +0 + 62 + 0 + 10 +4962.499991 + 20 +14294.597972 + 30 +0.0 + 11 +4949.999991 + 21 +14316.248607 + 31 +0.0 + 0 +LINE + 5 +1167 + 8 +0 + 62 + 0 + 10 +4924.999991 + 20 +14359.549877 + 30 +0.0 + 11 +4920.0 + 21 +14368.210115 + 31 +0.0 + 0 +LINE + 5 +1168 + 8 +0 + 62 + 0 + 10 +4999.99999 + 20 +14272.947336 + 30 +0.0 + 11 +4987.49999 + 21 +14294.597972 + 31 +0.0 + 0 +LINE + 5 +1169 + 8 +0 + 62 + 0 + 10 +4962.49999 + 20 +14337.899242 + 30 +0.0 + 11 +4949.99999 + 21 +14359.549877 + 31 +0.0 + 0 +LINE + 5 +116A + 8 +0 + 62 + 0 + 10 +4924.99999 + 20 +14402.851147 + 30 +0.0 + 11 +4920.0 + 21 +14411.511385 + 31 +0.0 + 0 +LINE + 5 +116B + 8 +0 + 62 + 0 + 10 +4999.99999 + 20 +14316.248607 + 30 +0.0 + 11 +4987.49999 + 21 +14337.899242 + 31 +0.0 + 0 +LINE + 5 +116C + 8 +0 + 62 + 0 + 10 +4962.49999 + 20 +14381.200512 + 30 +0.0 + 11 +4949.99999 + 21 +14402.851147 + 31 +0.0 + 0 +LINE + 5 +116D + 8 +0 + 62 + 0 + 10 +4924.99999 + 20 +14446.152417 + 30 +0.0 + 11 +4920.0 + 21 +14454.812655 + 31 +0.0 + 0 +LINE + 5 +116E + 8 +0 + 62 + 0 + 10 +4999.99999 + 20 +14359.549877 + 30 +0.0 + 11 +4987.49999 + 21 +14381.200512 + 31 +0.0 + 0 +LINE + 5 +116F + 8 +0 + 62 + 0 + 10 +4962.49999 + 20 +14424.501782 + 30 +0.0 + 11 +4949.99999 + 21 +14446.152417 + 31 +0.0 + 0 +LINE + 5 +1170 + 8 +0 + 62 + 0 + 10 +4924.99999 + 20 +14489.453687 + 30 +0.0 + 11 +4920.0 + 21 +14498.113925 + 31 +0.0 + 0 +LINE + 5 +1171 + 8 +0 + 62 + 0 + 10 +4999.99999 + 20 +14402.851147 + 30 +0.0 + 11 +4987.49999 + 21 +14424.501782 + 31 +0.0 + 0 +LINE + 5 +1172 + 8 +0 + 62 + 0 + 10 +4962.49999 + 20 +14467.803052 + 30 +0.0 + 11 +4949.99999 + 21 +14489.453687 + 31 +0.0 + 0 +LINE + 5 +1173 + 8 +0 + 62 + 0 + 10 +4924.99999 + 20 +14532.754957 + 30 +0.0 + 11 +4920.0 + 21 +14541.415195 + 31 +0.0 + 0 +LINE + 5 +1174 + 8 +0 + 62 + 0 + 10 +4999.99999 + 20 +14446.152417 + 30 +0.0 + 11 +4987.49999 + 21 +14467.803052 + 31 +0.0 + 0 +LINE + 5 +1175 + 8 +0 + 62 + 0 + 10 +4962.49999 + 20 +14511.104322 + 30 +0.0 + 11 +4949.99999 + 21 +14532.754957 + 31 +0.0 + 0 +LINE + 5 +1176 + 8 +0 + 62 + 0 + 10 +4924.99999 + 20 +14576.056228 + 30 +0.0 + 11 +4920.0 + 21 +14584.716465 + 31 +0.0 + 0 +LINE + 5 +1177 + 8 +0 + 62 + 0 + 10 +4999.99999 + 20 +14489.453687 + 30 +0.0 + 11 +4987.49999 + 21 +14511.104322 + 31 +0.0 + 0 +LINE + 5 +1178 + 8 +0 + 62 + 0 + 10 +4962.49999 + 20 +14554.405592 + 30 +0.0 + 11 +4949.99999 + 21 +14576.056228 + 31 +0.0 + 0 +LINE + 5 +1179 + 8 +0 + 62 + 0 + 10 +4924.99999 + 20 +14619.357498 + 30 +0.0 + 11 +4921.020602 + 21 +14626.25 + 31 +0.0 + 0 +LINE + 5 +117A + 8 +0 + 62 + 0 + 10 +4999.99999 + 20 +14532.754957 + 30 +0.0 + 11 +4987.49999 + 21 +14554.405592 + 31 +0.0 + 0 +LINE + 5 +117B + 8 +0 + 62 + 0 + 10 +4962.49999 + 20 +14597.706863 + 30 +0.0 + 11 +4949.99999 + 21 +14619.357498 + 31 +0.0 + 0 +LINE + 5 +117C + 8 +0 + 62 + 0 + 10 +4999.99999 + 20 +14576.056227 + 30 +0.0 + 11 +4987.49999 + 21 +14597.706863 + 31 +0.0 + 0 +LINE + 5 +117D + 8 +0 + 62 + 0 + 10 +4999.99999 + 20 +14619.357498 + 30 +0.0 + 11 +4996.020602 + 21 +14626.25 + 31 +0.0 + 0 +LINE + 5 +117E + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +9414.544825 + 30 +0.0 + 11 +4925.000001 + 21 +9423.20508 + 31 +0.0 + 0 +LINE + 5 +117F + 8 +0 + 62 + 0 + 10 +4950.000001 + 20 +9466.506351 + 30 +0.0 + 11 +4962.500001 + 21 +9488.156986 + 31 +0.0 + 0 +LINE + 5 +1180 + 8 +0 + 62 + 0 + 10 +4987.500001 + 20 +9531.458256 + 30 +0.0 + 11 +5000.0 + 21 +9553.10889 + 31 +0.0 + 0 +LINE + 5 +1181 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +9457.846095 + 30 +0.0 + 11 +4925.000001 + 21 +9466.506351 + 31 +0.0 + 0 +LINE + 5 +1182 + 8 +0 + 62 + 0 + 10 +4950.000001 + 20 +9509.807621 + 30 +0.0 + 11 +4962.500001 + 21 +9531.458256 + 31 +0.0 + 0 +LINE + 5 +1183 + 8 +0 + 62 + 0 + 10 +4987.500001 + 20 +9574.759526 + 30 +0.0 + 11 +5000.0 + 21 +9596.41016 + 31 +0.0 + 0 +LINE + 5 +1184 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +9501.147365 + 30 +0.0 + 11 +4925.000001 + 21 +9509.807621 + 31 +0.0 + 0 +LINE + 5 +1185 + 8 +0 + 62 + 0 + 10 +4950.000001 + 20 +9553.108891 + 30 +0.0 + 11 +4962.500001 + 21 +9574.759526 + 31 +0.0 + 0 +LINE + 5 +1186 + 8 +0 + 62 + 0 + 10 +4987.500001 + 20 +9618.060796 + 30 +0.0 + 11 +5000.0 + 21 +9639.71143 + 31 +0.0 + 0 +LINE + 5 +1187 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +9544.448635 + 30 +0.0 + 11 +4925.000001 + 21 +9553.108891 + 31 +0.0 + 0 +LINE + 5 +1188 + 8 +0 + 62 + 0 + 10 +4950.000001 + 20 +9596.410161 + 30 +0.0 + 11 +4962.500001 + 21 +9618.060796 + 31 +0.0 + 0 +LINE + 5 +1189 + 8 +0 + 62 + 0 + 10 +4987.500001 + 20 +9661.362066 + 30 +0.0 + 11 +5000.0 + 21 +9683.0127 + 31 +0.0 + 0 +LINE + 5 +118A + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +9587.749905 + 30 +0.0 + 11 +4925.000001 + 21 +9596.410161 + 31 +0.0 + 0 +LINE + 5 +118B + 8 +0 + 62 + 0 + 10 +4950.000001 + 20 +9639.711431 + 30 +0.0 + 11 +4962.500001 + 21 +9661.362066 + 31 +0.0 + 0 +LINE + 5 +118C + 8 +0 + 62 + 0 + 10 +4987.500001 + 20 +9704.663336 + 30 +0.0 + 11 +5000.0 + 21 +9726.31397 + 31 +0.0 + 0 +LINE + 5 +118D + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +9631.051175 + 30 +0.0 + 11 +4925.000001 + 21 +9639.711431 + 31 +0.0 + 0 +LINE + 5 +118E + 8 +0 + 62 + 0 + 10 +4950.000001 + 20 +9683.012701 + 30 +0.0 + 11 +4962.500001 + 21 +9704.663336 + 31 +0.0 + 0 +LINE + 5 +118F + 8 +0 + 62 + 0 + 10 +4987.500001 + 20 +9747.964607 + 30 +0.0 + 11 +5000.0 + 21 +9769.61524 + 31 +0.0 + 0 +LINE + 5 +1190 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +9674.352445 + 30 +0.0 + 11 +4925.000001 + 21 +9683.012701 + 31 +0.0 + 0 +LINE + 5 +1191 + 8 +0 + 62 + 0 + 10 +4950.000001 + 20 +9726.313971 + 30 +0.0 + 11 +4962.500001 + 21 +9747.964607 + 31 +0.0 + 0 +LINE + 5 +1192 + 8 +0 + 62 + 0 + 10 +4987.500001 + 20 +9791.265877 + 30 +0.0 + 11 +5000.0 + 21 +9812.91651 + 31 +0.0 + 0 +LINE + 5 +1193 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +9717.653715 + 30 +0.0 + 11 +4925.000001 + 21 +9726.313971 + 31 +0.0 + 0 +LINE + 5 +1194 + 8 +0 + 62 + 0 + 10 +4950.000001 + 20 +9769.615242 + 30 +0.0 + 11 +4962.500001 + 21 +9791.265877 + 31 +0.0 + 0 +LINE + 5 +1195 + 8 +0 + 62 + 0 + 10 +4987.500001 + 20 +9834.567147 + 30 +0.0 + 11 +5000.0 + 21 +9856.21778 + 31 +0.0 + 0 +LINE + 5 +1196 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +9760.954985 + 30 +0.0 + 11 +4925.000001 + 21 +9769.615242 + 31 +0.0 + 0 +LINE + 5 +1197 + 8 +0 + 62 + 0 + 10 +4950.000001 + 20 +9812.916512 + 30 +0.0 + 11 +4962.500001 + 21 +9834.567147 + 31 +0.0 + 0 +LINE + 5 +1198 + 8 +0 + 62 + 0 + 10 +4987.500001 + 20 +9877.868417 + 30 +0.0 + 11 +5000.0 + 21 +9899.51905 + 31 +0.0 + 0 +LINE + 5 +1199 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +9804.256255 + 30 +0.0 + 11 +4925.000001 + 21 +9812.916512 + 31 +0.0 + 0 +LINE + 5 +119A + 8 +0 + 62 + 0 + 10 +4950.000001 + 20 +9856.217782 + 30 +0.0 + 11 +4962.500001 + 21 +9877.868417 + 31 +0.0 + 0 +LINE + 5 +119B + 8 +0 + 62 + 0 + 10 +4987.500001 + 20 +9921.169687 + 30 +0.0 + 11 +5000.0 + 21 +9942.82032 + 31 +0.0 + 0 +LINE + 5 +119C + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +9847.557525 + 30 +0.0 + 11 +4925.000001 + 21 +9856.217782 + 31 +0.0 + 0 +LINE + 5 +119D + 8 +0 + 62 + 0 + 10 +4950.000001 + 20 +9899.519052 + 30 +0.0 + 11 +4962.500001 + 21 +9921.169687 + 31 +0.0 + 0 +LINE + 5 +119E + 8 +0 + 62 + 0 + 10 +4987.500001 + 20 +9964.470957 + 30 +0.0 + 11 +5000.0 + 21 +9986.12159 + 31 +0.0 + 0 +LINE + 5 +119F + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +9890.858795 + 30 +0.0 + 11 +4925.000001 + 21 +9899.519052 + 31 +0.0 + 0 +LINE + 5 +11A0 + 8 +0 + 62 + 0 + 10 +4950.000001 + 20 +9942.820322 + 30 +0.0 + 11 +4962.500001 + 21 +9964.470957 + 31 +0.0 + 0 +LINE + 5 +11A1 + 8 +0 + 62 + 0 + 10 +4987.500001 + 20 +10007.772227 + 30 +0.0 + 11 +5000.0 + 21 +10029.42286 + 31 +0.0 + 0 +LINE + 5 +11A2 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +9934.160065 + 30 +0.0 + 11 +4925.000002 + 21 +9942.820322 + 31 +0.0 + 0 +LINE + 5 +11A3 + 8 +0 + 62 + 0 + 10 +4950.000002 + 20 +9986.121592 + 30 +0.0 + 11 +4962.500002 + 21 +10007.772227 + 31 +0.0 + 0 +LINE + 5 +11A4 + 8 +0 + 62 + 0 + 10 +4987.500002 + 20 +10051.073498 + 30 +0.0 + 11 +5000.0 + 21 +10072.72413 + 31 +0.0 + 0 +LINE + 5 +11A5 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +9977.461335 + 30 +0.0 + 11 +4925.000002 + 21 +9986.121592 + 31 +0.0 + 0 +LINE + 5 +11A6 + 8 +0 + 62 + 0 + 10 +4950.000002 + 20 +10029.422862 + 30 +0.0 + 11 +4962.500002 + 21 +10051.073498 + 31 +0.0 + 0 +LINE + 5 +11A7 + 8 +0 + 62 + 0 + 10 +4987.500002 + 20 +10094.374768 + 30 +0.0 + 11 +5000.0 + 21 +10116.0254 + 31 +0.0 + 0 +LINE + 5 +11A8 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +10020.762605 + 30 +0.0 + 11 +4925.000002 + 21 +10029.422862 + 31 +0.0 + 0 +LINE + 5 +11A9 + 8 +0 + 62 + 0 + 10 +4950.000002 + 20 +10072.724133 + 30 +0.0 + 11 +4962.500002 + 21 +10094.374768 + 31 +0.0 + 0 +LINE + 5 +11AA + 8 +0 + 62 + 0 + 10 +4987.500002 + 20 +10137.676038 + 30 +0.0 + 11 +5000.0 + 21 +10159.32667 + 31 +0.0 + 0 +LINE + 5 +11AB + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +10064.063875 + 30 +0.0 + 11 +4925.000002 + 21 +10072.724133 + 31 +0.0 + 0 +LINE + 5 +11AC + 8 +0 + 62 + 0 + 10 +4950.000002 + 20 +10116.025403 + 30 +0.0 + 11 +4962.500002 + 21 +10137.676038 + 31 +0.0 + 0 +LINE + 5 +11AD + 8 +0 + 62 + 0 + 10 +4987.500002 + 20 +10180.977308 + 30 +0.0 + 11 +5000.0 + 21 +10202.62794 + 31 +0.0 + 0 +LINE + 5 +11AE + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +10107.365145 + 30 +0.0 + 11 +4925.000002 + 21 +10116.025403 + 31 +0.0 + 0 +LINE + 5 +11AF + 8 +0 + 62 + 0 + 10 +4950.000002 + 20 +10159.326673 + 30 +0.0 + 11 +4962.500002 + 21 +10180.977308 + 31 +0.0 + 0 +LINE + 5 +11B0 + 8 +0 + 62 + 0 + 10 +4987.500002 + 20 +10224.278578 + 30 +0.0 + 11 +5000.0 + 21 +10245.92921 + 31 +0.0 + 0 +LINE + 5 +11B1 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +10150.666415 + 30 +0.0 + 11 +4925.000002 + 21 +10159.326673 + 31 +0.0 + 0 +LINE + 5 +11B2 + 8 +0 + 62 + 0 + 10 +4950.000002 + 20 +10202.627943 + 30 +0.0 + 11 +4962.500002 + 21 +10224.278578 + 31 +0.0 + 0 +LINE + 5 +11B3 + 8 +0 + 62 + 0 + 10 +4987.500002 + 20 +10267.579848 + 30 +0.0 + 11 +5000.0 + 21 +10289.23048 + 31 +0.0 + 0 +LINE + 5 +11B4 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +10193.967685 + 30 +0.0 + 11 +4925.000002 + 21 +10202.627943 + 31 +0.0 + 0 +LINE + 5 +11B5 + 8 +0 + 62 + 0 + 10 +4950.000002 + 20 +10245.929213 + 30 +0.0 + 11 +4962.500002 + 21 +10267.579848 + 31 +0.0 + 0 +LINE + 5 +11B6 + 8 +0 + 62 + 0 + 10 +4987.500002 + 20 +10310.881118 + 30 +0.0 + 11 +5000.0 + 21 +10332.53175 + 31 +0.0 + 0 +LINE + 5 +11B7 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +10237.268955 + 30 +0.0 + 11 +4925.000002 + 21 +10245.929213 + 31 +0.0 + 0 +LINE + 5 +11B8 + 8 +0 + 62 + 0 + 10 +4950.000002 + 20 +10289.230483 + 30 +0.0 + 11 +4962.500002 + 21 +10310.881118 + 31 +0.0 + 0 +LINE + 5 +11B9 + 8 +0 + 62 + 0 + 10 +4987.500002 + 20 +10354.182389 + 30 +0.0 + 11 +5000.0 + 21 +10375.83302 + 31 +0.0 + 0 +LINE + 5 +11BA + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +10280.570225 + 30 +0.0 + 11 +4925.000002 + 21 +10289.230483 + 31 +0.0 + 0 +LINE + 5 +11BB + 8 +0 + 62 + 0 + 10 +4950.000002 + 20 +10332.531753 + 30 +0.0 + 11 +4962.500002 + 21 +10354.182389 + 31 +0.0 + 0 +LINE + 5 +11BC + 8 +0 + 62 + 0 + 10 +4987.500002 + 20 +10397.483659 + 30 +0.0 + 11 +5000.0 + 21 +10419.13429 + 31 +0.0 + 0 +LINE + 5 +11BD + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +10323.871495 + 30 +0.0 + 11 +4925.000002 + 21 +10332.531753 + 31 +0.0 + 0 +LINE + 5 +11BE + 8 +0 + 62 + 0 + 10 +4950.000002 + 20 +10375.833024 + 30 +0.0 + 11 +4962.500002 + 21 +10397.483659 + 31 +0.0 + 0 +LINE + 5 +11BF + 8 +0 + 62 + 0 + 10 +4987.500002 + 20 +10440.784929 + 30 +0.0 + 11 +5000.0 + 21 +10462.43556 + 31 +0.0 + 0 +LINE + 5 +11C0 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +10367.172765 + 30 +0.0 + 11 +4925.000002 + 21 +10375.833024 + 31 +0.0 + 0 +LINE + 5 +11C1 + 8 +0 + 62 + 0 + 10 +4950.000002 + 20 +10419.134294 + 30 +0.0 + 11 +4962.500002 + 21 +10440.784929 + 31 +0.0 + 0 +LINE + 5 +11C2 + 8 +0 + 62 + 0 + 10 +4987.500002 + 20 +10484.086199 + 30 +0.0 + 11 +5000.0 + 21 +10505.73683 + 31 +0.0 + 0 +LINE + 5 +11C3 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +10410.474035 + 30 +0.0 + 11 +4925.000002 + 21 +10419.134294 + 31 +0.0 + 0 +LINE + 5 +11C4 + 8 +0 + 62 + 0 + 10 +4950.000002 + 20 +10462.435564 + 30 +0.0 + 11 +4962.500002 + 21 +10484.086199 + 31 +0.0 + 0 +LINE + 5 +11C5 + 8 +0 + 62 + 0 + 10 +4987.500002 + 20 +10527.387469 + 30 +0.0 + 11 +5000.0 + 21 +10549.0381 + 31 +0.0 + 0 +LINE + 5 +11C6 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +10453.775305 + 30 +0.0 + 11 +4925.000003 + 21 +10462.435564 + 31 +0.0 + 0 +LINE + 5 +11C7 + 8 +0 + 62 + 0 + 10 +4950.000003 + 20 +10505.736834 + 30 +0.0 + 11 +4962.500003 + 21 +10527.387469 + 31 +0.0 + 0 +LINE + 5 +11C8 + 8 +0 + 62 + 0 + 10 +4987.500003 + 20 +10570.688739 + 30 +0.0 + 11 +5000.0 + 21 +10592.33937 + 31 +0.0 + 0 +LINE + 5 +11C9 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +10497.076575 + 30 +0.0 + 11 +4925.000003 + 21 +10505.736834 + 31 +0.0 + 0 +LINE + 5 +11CA + 8 +0 + 62 + 0 + 10 +4950.000003 + 20 +10549.038104 + 30 +0.0 + 11 +4962.500003 + 21 +10570.688739 + 31 +0.0 + 0 +LINE + 5 +11CB + 8 +0 + 62 + 0 + 10 +4987.500003 + 20 +10613.990009 + 30 +0.0 + 11 +5000.0 + 21 +10635.64064 + 31 +0.0 + 0 +LINE + 5 +11CC + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +10540.377845 + 30 +0.0 + 11 +4925.000003 + 21 +10549.038104 + 31 +0.0 + 0 +LINE + 5 +11CD + 8 +0 + 62 + 0 + 10 +4950.000003 + 20 +10592.339374 + 30 +0.0 + 11 +4962.500003 + 21 +10613.990009 + 31 +0.0 + 0 +LINE + 5 +11CE + 8 +0 + 62 + 0 + 10 +4987.500003 + 20 +10657.29128 + 30 +0.0 + 11 +5000.0 + 21 +10678.94191 + 31 +0.0 + 0 +LINE + 5 +11CF + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +10583.679115 + 30 +0.0 + 11 +4925.000003 + 21 +10592.339374 + 31 +0.0 + 0 +LINE + 5 +11D0 + 8 +0 + 62 + 0 + 10 +4950.000003 + 20 +10635.640644 + 30 +0.0 + 11 +4962.500003 + 21 +10657.29128 + 31 +0.0 + 0 +LINE + 5 +11D1 + 8 +0 + 62 + 0 + 10 +4987.500003 + 20 +10700.59255 + 30 +0.0 + 11 +5000.0 + 21 +10722.24318 + 31 +0.0 + 0 +LINE + 5 +11D2 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +10626.980385 + 30 +0.0 + 11 +4925.000003 + 21 +10635.640644 + 31 +0.0 + 0 +LINE + 5 +11D3 + 8 +0 + 62 + 0 + 10 +4950.000003 + 20 +10678.941915 + 30 +0.0 + 11 +4962.500003 + 21 +10700.59255 + 31 +0.0 + 0 +LINE + 5 +11D4 + 8 +0 + 62 + 0 + 10 +4987.500003 + 20 +10743.89382 + 30 +0.0 + 11 +5000.0 + 21 +10765.54445 + 31 +0.0 + 0 +LINE + 5 +11D5 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +10670.281655 + 30 +0.0 + 11 +4925.000003 + 21 +10678.941915 + 31 +0.0 + 0 +LINE + 5 +11D6 + 8 +0 + 62 + 0 + 10 +4950.000003 + 20 +10722.243185 + 30 +0.0 + 11 +4962.500003 + 21 +10743.89382 + 31 +0.0 + 0 +LINE + 5 +11D7 + 8 +0 + 62 + 0 + 10 +4987.500003 + 20 +10787.19509 + 30 +0.0 + 11 +5000.0 + 21 +10808.84572 + 31 +0.0 + 0 +LINE + 5 +11D8 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +10713.582925 + 30 +0.0 + 11 +4925.000003 + 21 +10722.243185 + 31 +0.0 + 0 +LINE + 5 +11D9 + 8 +0 + 62 + 0 + 10 +4950.000003 + 20 +10765.544455 + 30 +0.0 + 11 +4962.500003 + 21 +10787.19509 + 31 +0.0 + 0 +LINE + 5 +11DA + 8 +0 + 62 + 0 + 10 +4987.500003 + 20 +10830.49636 + 30 +0.0 + 11 +5000.0 + 21 +10852.14699 + 31 +0.0 + 0 +LINE + 5 +11DB + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +10756.884195 + 30 +0.0 + 11 +4925.000003 + 21 +10765.544455 + 31 +0.0 + 0 +LINE + 5 +11DC + 8 +0 + 62 + 0 + 10 +4950.000003 + 20 +10808.845725 + 30 +0.0 + 11 +4962.500003 + 21 +10830.49636 + 31 +0.0 + 0 +LINE + 5 +11DD + 8 +0 + 62 + 0 + 10 +4987.500003 + 20 +10873.79763 + 30 +0.0 + 11 +5000.0 + 21 +10895.44826 + 31 +0.0 + 0 +LINE + 5 +11DE + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +10800.185465 + 30 +0.0 + 11 +4925.000003 + 21 +10808.845725 + 31 +0.0 + 0 +LINE + 5 +11DF + 8 +0 + 62 + 0 + 10 +4950.000003 + 20 +10852.146995 + 30 +0.0 + 11 +4962.500003 + 21 +10873.79763 + 31 +0.0 + 0 +LINE + 5 +11E0 + 8 +0 + 62 + 0 + 10 +4987.500003 + 20 +10917.0989 + 30 +0.0 + 11 +5000.0 + 21 +10938.74953 + 31 +0.0 + 0 +LINE + 5 +11E1 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +10843.486735 + 30 +0.0 + 11 +4925.000003 + 21 +10852.146995 + 31 +0.0 + 0 +LINE + 5 +11E2 + 8 +0 + 62 + 0 + 10 +4950.000003 + 20 +10895.448265 + 30 +0.0 + 11 +4962.500003 + 21 +10917.0989 + 31 +0.0 + 0 +LINE + 5 +11E3 + 8 +0 + 62 + 0 + 10 +4987.500003 + 20 +10960.400171 + 30 +0.0 + 11 +5000.0 + 21 +10982.0508 + 31 +0.0 + 0 +LINE + 5 +11E4 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +10886.788005 + 30 +0.0 + 11 +4925.000003 + 21 +10895.448265 + 31 +0.0 + 0 +LINE + 5 +11E5 + 8 +0 + 62 + 0 + 10 +4950.000003 + 20 +10938.749535 + 30 +0.0 + 11 +4962.500003 + 21 +10960.400171 + 31 +0.0 + 0 +LINE + 5 +11E6 + 8 +0 + 62 + 0 + 10 +4987.500003 + 20 +11003.701441 + 30 +0.0 + 11 +5000.0 + 21 +11025.35207 + 31 +0.0 + 0 +LINE + 5 +11E7 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +10930.089275 + 30 +0.0 + 11 +4925.000003 + 21 +10938.749535 + 31 +0.0 + 0 +LINE + 5 +11E8 + 8 +0 + 62 + 0 + 10 +4950.000003 + 20 +10982.050806 + 30 +0.0 + 11 +4962.500003 + 21 +11003.701441 + 31 +0.0 + 0 +LINE + 5 +11E9 + 8 +0 + 62 + 0 + 10 +4987.500003 + 20 +11047.002711 + 30 +0.0 + 11 +5000.0 + 21 +11068.65334 + 31 +0.0 + 0 +LINE + 5 +11EA + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +10973.390545 + 30 +0.0 + 11 +4925.000004 + 21 +10982.050806 + 31 +0.0 + 0 +LINE + 5 +11EB + 8 +0 + 62 + 0 + 10 +4950.000004 + 20 +11025.352076 + 30 +0.0 + 11 +4962.500004 + 21 +11047.002711 + 31 +0.0 + 0 +LINE + 5 +11EC + 8 +0 + 62 + 0 + 10 +4987.500004 + 20 +11090.303981 + 30 +0.0 + 11 +5000.0 + 21 +11111.95461 + 31 +0.0 + 0 +LINE + 5 +11ED + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +11016.691815 + 30 +0.0 + 11 +4925.000004 + 21 +11025.352076 + 31 +0.0 + 0 +LINE + 5 +11EE + 8 +0 + 62 + 0 + 10 +4950.000004 + 20 +11068.653346 + 30 +0.0 + 11 +4962.500004 + 21 +11090.303981 + 31 +0.0 + 0 +LINE + 5 +11EF + 8 +0 + 62 + 0 + 10 +4987.500004 + 20 +11133.605251 + 30 +0.0 + 11 +5000.0 + 21 +11155.25588 + 31 +0.0 + 0 +LINE + 5 +11F0 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +11059.993085 + 30 +0.0 + 11 +4925.000004 + 21 +11068.653346 + 31 +0.0 + 0 +LINE + 5 +11F1 + 8 +0 + 62 + 0 + 10 +4950.000004 + 20 +11111.954616 + 30 +0.0 + 11 +4962.500004 + 21 +11133.605251 + 31 +0.0 + 0 +LINE + 5 +11F2 + 8 +0 + 62 + 0 + 10 +4987.500004 + 20 +11176.906521 + 30 +0.0 + 11 +5000.0 + 21 +11198.55715 + 31 +0.0 + 0 +LINE + 5 +11F3 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +11103.294355 + 30 +0.0 + 11 +4925.000004 + 21 +11111.954616 + 31 +0.0 + 0 +LINE + 5 +11F4 + 8 +0 + 62 + 0 + 10 +4950.000004 + 20 +11155.255886 + 30 +0.0 + 11 +4962.500004 + 21 +11176.906521 + 31 +0.0 + 0 +LINE + 5 +11F5 + 8 +0 + 62 + 0 + 10 +4987.500004 + 20 +11220.207791 + 30 +0.0 + 11 +5000.0 + 21 +11241.85842 + 31 +0.0 + 0 +LINE + 5 +11F6 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +11146.595625 + 30 +0.0 + 11 +4925.000004 + 21 +11155.255886 + 31 +0.0 + 0 +LINE + 5 +11F7 + 8 +0 + 62 + 0 + 10 +4950.000004 + 20 +11198.557156 + 30 +0.0 + 11 +4962.500004 + 21 +11220.207791 + 31 +0.0 + 0 +LINE + 5 +11F8 + 8 +0 + 62 + 0 + 10 +4987.500004 + 20 +11263.509062 + 30 +0.0 + 11 +5000.0 + 21 +11285.15969 + 31 +0.0 + 0 +LINE + 5 +11F9 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +11189.896895 + 30 +0.0 + 11 +4925.000004 + 21 +11198.557156 + 31 +0.0 + 0 +LINE + 5 +11FA + 8 +0 + 62 + 0 + 10 +4950.000004 + 20 +11241.858426 + 30 +0.0 + 11 +4962.500004 + 21 +11263.509062 + 31 +0.0 + 0 +LINE + 5 +11FB + 8 +0 + 62 + 0 + 10 +4987.500004 + 20 +11306.810332 + 30 +0.0 + 11 +5000.0 + 21 +11328.46096 + 31 +0.0 + 0 +LINE + 5 +11FC + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +11233.198165 + 30 +0.0 + 11 +4925.000004 + 21 +11241.858426 + 31 +0.0 + 0 +LINE + 5 +11FD + 8 +0 + 62 + 0 + 10 +4950.000004 + 20 +11285.159697 + 30 +0.0 + 11 +4962.500004 + 21 +11306.810332 + 31 +0.0 + 0 +LINE + 5 +11FE + 8 +0 + 62 + 0 + 10 +4987.500004 + 20 +11350.111602 + 30 +0.0 + 11 +5000.0 + 21 +11371.76223 + 31 +0.0 + 0 +LINE + 5 +11FF + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +11276.499435 + 30 +0.0 + 11 +4925.000004 + 21 +11285.159697 + 31 +0.0 + 0 +LINE + 5 +1200 + 8 +0 + 62 + 0 + 10 +4950.000004 + 20 +11328.460967 + 30 +0.0 + 11 +4962.500004 + 21 +11350.111602 + 31 +0.0 + 0 +LINE + 5 +1201 + 8 +0 + 62 + 0 + 10 +4987.500004 + 20 +11393.412872 + 30 +0.0 + 11 +5000.0 + 21 +11415.0635 + 31 +0.0 + 0 +LINE + 5 +1202 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +11319.800705 + 30 +0.0 + 11 +4925.000004 + 21 +11328.460967 + 31 +0.0 + 0 +LINE + 5 +1203 + 8 +0 + 62 + 0 + 10 +4950.000004 + 20 +11371.762237 + 30 +0.0 + 11 +4962.500004 + 21 +11393.412872 + 31 +0.0 + 0 +LINE + 5 +1204 + 8 +0 + 62 + 0 + 10 +4987.500004 + 20 +11436.714142 + 30 +0.0 + 11 +5000.0 + 21 +11458.36477 + 31 +0.0 + 0 +LINE + 5 +1205 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +11363.101975 + 30 +0.0 + 11 +4925.000004 + 21 +11371.762237 + 31 +0.0 + 0 +LINE + 5 +1206 + 8 +0 + 62 + 0 + 10 +4950.000004 + 20 +11415.063507 + 30 +0.0 + 11 +4962.500004 + 21 +11436.714142 + 31 +0.0 + 0 +LINE + 5 +1207 + 8 +0 + 62 + 0 + 10 +4987.500004 + 20 +11480.015412 + 30 +0.0 + 11 +5000.0 + 21 +11501.66604 + 31 +0.0 + 0 +LINE + 5 +1208 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +11406.403245 + 30 +0.0 + 11 +4925.000004 + 21 +11415.063507 + 31 +0.0 + 0 +LINE + 5 +1209 + 8 +0 + 62 + 0 + 10 +4950.000004 + 20 +11458.364777 + 30 +0.0 + 11 +4962.500004 + 21 +11480.015412 + 31 +0.0 + 0 +LINE + 5 +120A + 8 +0 + 62 + 0 + 10 +4987.500004 + 20 +11523.316682 + 30 +0.0 + 11 +5000.0 + 21 +11544.96731 + 31 +0.0 + 0 +LINE + 5 +120B + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +11449.704515 + 30 +0.0 + 11 +4925.000004 + 21 +11458.364777 + 31 +0.0 + 0 +LINE + 5 +120C + 8 +0 + 62 + 0 + 10 +4950.000004 + 20 +11501.666047 + 30 +0.0 + 11 +4962.500004 + 21 +11523.316682 + 31 +0.0 + 0 +LINE + 5 +120D + 8 +0 + 62 + 0 + 10 +4987.500004 + 20 +11566.617953 + 30 +0.0 + 11 +5000.0 + 21 +11588.26858 + 31 +0.0 + 0 +LINE + 5 +120E + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +11493.005785 + 30 +0.0 + 11 +4925.000005 + 21 +11501.666047 + 31 +0.0 + 0 +LINE + 5 +120F + 8 +0 + 62 + 0 + 10 +4950.000005 + 20 +11544.967317 + 30 +0.0 + 11 +4962.500005 + 21 +11566.617953 + 31 +0.0 + 0 +LINE + 5 +1210 + 8 +0 + 62 + 0 + 10 +4987.500005 + 20 +11609.919223 + 30 +0.0 + 11 +5000.0 + 21 +11631.56985 + 31 +0.0 + 0 +LINE + 5 +1211 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +11536.307055 + 30 +0.0 + 11 +4925.000005 + 21 +11544.967317 + 31 +0.0 + 0 +LINE + 5 +1212 + 8 +0 + 62 + 0 + 10 +4950.000005 + 20 +11588.268588 + 30 +0.0 + 11 +4962.500005 + 21 +11609.919223 + 31 +0.0 + 0 +LINE + 5 +1213 + 8 +0 + 62 + 0 + 10 +4987.500005 + 20 +11653.220493 + 30 +0.0 + 11 +5000.0 + 21 +11674.87112 + 31 +0.0 + 0 +LINE + 5 +1214 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +11579.608325 + 30 +0.0 + 11 +4925.000005 + 21 +11588.268588 + 31 +0.0 + 0 +LINE + 5 +1215 + 8 +0 + 62 + 0 + 10 +4950.000005 + 20 +11631.569858 + 30 +0.0 + 11 +4962.500005 + 21 +11653.220493 + 31 +0.0 + 0 +LINE + 5 +1216 + 8 +0 + 62 + 0 + 10 +4987.500005 + 20 +11696.521763 + 30 +0.0 + 11 +5000.0 + 21 +11718.17239 + 31 +0.0 + 0 +LINE + 5 +1217 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +11622.909595 + 30 +0.0 + 11 +4925.000005 + 21 +11631.569858 + 31 +0.0 + 0 +LINE + 5 +1218 + 8 +0 + 62 + 0 + 10 +4950.000005 + 20 +11674.871128 + 30 +0.0 + 11 +4962.500005 + 21 +11696.521763 + 31 +0.0 + 0 +LINE + 5 +1219 + 8 +0 + 62 + 0 + 10 +4987.500005 + 20 +11739.823033 + 30 +0.0 + 11 +5000.0 + 21 +11761.47366 + 31 +0.0 + 0 +LINE + 5 +121A + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +11666.210865 + 30 +0.0 + 11 +4925.000005 + 21 +11674.871128 + 31 +0.0 + 0 +LINE + 5 +121B + 8 +0 + 62 + 0 + 10 +4950.000005 + 20 +11718.172398 + 30 +0.0 + 11 +4962.500005 + 21 +11739.823033 + 31 +0.0 + 0 +LINE + 5 +121C + 8 +0 + 62 + 0 + 10 +4987.500005 + 20 +11783.124303 + 30 +0.0 + 11 +5000.0 + 21 +11804.77493 + 31 +0.0 + 0 +LINE + 5 +121D + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +11709.512135 + 30 +0.0 + 11 +4925.000005 + 21 +11718.172398 + 31 +0.0 + 0 +LINE + 5 +121E + 8 +0 + 62 + 0 + 10 +4950.000005 + 20 +11761.473668 + 30 +0.0 + 11 +4962.500005 + 21 +11783.124303 + 31 +0.0 + 0 +LINE + 5 +121F + 8 +0 + 62 + 0 + 10 +4987.500005 + 20 +11826.425573 + 30 +0.0 + 11 +5000.0 + 21 +11848.0762 + 31 +0.0 + 0 +LINE + 5 +1220 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +11752.813405 + 30 +0.0 + 11 +4925.000005 + 21 +11761.473668 + 31 +0.0 + 0 +LINE + 5 +1221 + 8 +0 + 62 + 0 + 10 +4950.000005 + 20 +11804.774938 + 30 +0.0 + 11 +4962.500005 + 21 +11826.425573 + 31 +0.0 + 0 +LINE + 5 +1222 + 8 +0 + 62 + 0 + 10 +4987.500005 + 20 +11869.726844 + 30 +0.0 + 11 +5000.0 + 21 +11891.37747 + 31 +0.0 + 0 +LINE + 5 +1223 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +11796.114675 + 30 +0.0 + 11 +4925.000005 + 21 +11804.774938 + 31 +0.0 + 0 +LINE + 5 +1224 + 8 +0 + 62 + 0 + 10 +4950.000005 + 20 +11848.076208 + 30 +0.0 + 11 +4962.500005 + 21 +11869.726844 + 31 +0.0 + 0 +LINE + 5 +1225 + 8 +0 + 62 + 0 + 10 +4987.500005 + 20 +11913.028114 + 30 +0.0 + 11 +5000.0 + 21 +11934.67874 + 31 +0.0 + 0 +LINE + 5 +1226 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +11839.415945 + 30 +0.0 + 11 +4925.000005 + 21 +11848.076208 + 31 +0.0 + 0 +LINE + 5 +1227 + 8 +0 + 62 + 0 + 10 +4950.000005 + 20 +11891.377479 + 30 +0.0 + 11 +4962.500005 + 21 +11913.028114 + 31 +0.0 + 0 +LINE + 5 +1228 + 8 +0 + 62 + 0 + 10 +4987.500005 + 20 +11956.329384 + 30 +0.0 + 11 +5000.0 + 21 +11977.98001 + 31 +0.0 + 0 +LINE + 5 +1229 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +11882.717215 + 30 +0.0 + 11 +4925.000005 + 21 +11891.377479 + 31 +0.0 + 0 +LINE + 5 +122A + 8 +0 + 62 + 0 + 10 +4950.000005 + 20 +11934.678749 + 30 +0.0 + 11 +4962.500005 + 21 +11956.329384 + 31 +0.0 + 0 +LINE + 5 +122B + 8 +0 + 62 + 0 + 10 +4987.500005 + 20 +11999.630654 + 30 +0.0 + 11 +5000.0 + 21 +12021.28128 + 31 +0.0 + 0 +LINE + 5 +122C + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +11926.018485 + 30 +0.0 + 11 +4925.000005 + 21 +11934.678749 + 31 +0.0 + 0 +LINE + 5 +122D + 8 +0 + 62 + 0 + 10 +4950.000005 + 20 +11977.980019 + 30 +0.0 + 11 +4962.500005 + 21 +11999.630654 + 31 +0.0 + 0 +LINE + 5 +122E + 8 +0 + 62 + 0 + 10 +4987.500005 + 20 +12042.931924 + 30 +0.0 + 11 +5000.0 + 21 +12064.58255 + 31 +0.0 + 0 +LINE + 5 +122F + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +11969.319755 + 30 +0.0 + 11 +4925.000005 + 21 +11977.980019 + 31 +0.0 + 0 +LINE + 5 +1230 + 8 +0 + 62 + 0 + 10 +4950.000005 + 20 +12021.281289 + 30 +0.0 + 11 +4962.500005 + 21 +12042.931924 + 31 +0.0 + 0 +LINE + 5 +1231 + 8 +0 + 62 + 0 + 10 +4987.500005 + 20 +12086.233194 + 30 +0.0 + 11 +5000.0 + 21 +12107.88382 + 31 +0.0 + 0 +LINE + 5 +1232 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +12012.621025 + 30 +0.0 + 11 +4925.000005 + 21 +12021.281289 + 31 +0.0 + 0 +LINE + 5 +1233 + 8 +0 + 62 + 0 + 10 +4950.000005 + 20 +12064.582559 + 30 +0.0 + 11 +4962.500005 + 21 +12086.233194 + 31 +0.0 + 0 +LINE + 5 +1234 + 8 +0 + 62 + 0 + 10 +4987.500005 + 20 +12129.534464 + 30 +0.0 + 11 +5000.0 + 21 +12151.18509 + 31 +0.0 + 0 +LINE + 5 +1235 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +12055.922295 + 30 +0.0 + 11 +4925.000006 + 21 +12064.582559 + 31 +0.0 + 0 +LINE + 5 +1236 + 8 +0 + 62 + 0 + 10 +4950.000006 + 20 +12107.883829 + 30 +0.0 + 11 +4962.500006 + 21 +12129.534464 + 31 +0.0 + 0 +LINE + 5 +1237 + 8 +0 + 62 + 0 + 10 +4987.500006 + 20 +12172.835735 + 30 +0.0 + 11 +5000.0 + 21 +12194.48636 + 31 +0.0 + 0 +LINE + 5 +1238 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +12099.223565 + 30 +0.0 + 11 +4925.000006 + 21 +12107.883829 + 31 +0.0 + 0 +LINE + 5 +1239 + 8 +0 + 62 + 0 + 10 +4950.000006 + 20 +12151.185099 + 30 +0.0 + 11 +4962.500006 + 21 +12172.835735 + 31 +0.0 + 0 +LINE + 5 +123A + 8 +0 + 62 + 0 + 10 +4987.500006 + 20 +12216.137005 + 30 +0.0 + 11 +5000.0 + 21 +12237.78763 + 31 +0.0 + 0 +LINE + 5 +123B + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +12142.524835 + 30 +0.0 + 11 +4925.000006 + 21 +12151.185099 + 31 +0.0 + 0 +LINE + 5 +123C + 8 +0 + 62 + 0 + 10 +4950.000006 + 20 +12194.48637 + 30 +0.0 + 11 +4962.500006 + 21 +12216.137005 + 31 +0.0 + 0 +LINE + 5 +123D + 8 +0 + 62 + 0 + 10 +4987.500006 + 20 +12259.438275 + 30 +0.0 + 11 +5000.0 + 21 +12281.0889 + 31 +0.0 + 0 +LINE + 5 +123E + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +12185.826105 + 30 +0.0 + 11 +4925.000006 + 21 +12194.48637 + 31 +0.0 + 0 +LINE + 5 +123F + 8 +0 + 62 + 0 + 10 +4950.000006 + 20 +12237.78764 + 30 +0.0 + 11 +4962.500006 + 21 +12259.438275 + 31 +0.0 + 0 +LINE + 5 +1240 + 8 +0 + 62 + 0 + 10 +4987.500006 + 20 +12302.739545 + 30 +0.0 + 11 +5000.0 + 21 +12324.39017 + 31 +0.0 + 0 +LINE + 5 +1241 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +12229.127375 + 30 +0.0 + 11 +4925.000006 + 21 +12237.78764 + 31 +0.0 + 0 +LINE + 5 +1242 + 8 +0 + 62 + 0 + 10 +4950.000006 + 20 +12281.08891 + 30 +0.0 + 11 +4962.500006 + 21 +12302.739545 + 31 +0.0 + 0 +LINE + 5 +1243 + 8 +0 + 62 + 0 + 10 +4987.500006 + 20 +12346.040815 + 30 +0.0 + 11 +5000.0 + 21 +12367.69144 + 31 +0.0 + 0 +LINE + 5 +1244 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +12272.428645 + 30 +0.0 + 11 +4925.000006 + 21 +12281.08891 + 31 +0.0 + 0 +LINE + 5 +1245 + 8 +0 + 62 + 0 + 10 +4950.000006 + 20 +12324.39018 + 30 +0.0 + 11 +4962.500006 + 21 +12346.040815 + 31 +0.0 + 0 +LINE + 5 +1246 + 8 +0 + 62 + 0 + 10 +4987.500006 + 20 +12389.342085 + 30 +0.0 + 11 +5000.0 + 21 +12410.99271 + 31 +0.0 + 0 +LINE + 5 +1247 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +12315.729915 + 30 +0.0 + 11 +4925.000006 + 21 +12324.39018 + 31 +0.0 + 0 +LINE + 5 +1248 + 8 +0 + 62 + 0 + 10 +4950.000006 + 20 +12367.69145 + 30 +0.0 + 11 +4962.500006 + 21 +12389.342085 + 31 +0.0 + 0 +LINE + 5 +1249 + 8 +0 + 62 + 0 + 10 +4987.500006 + 20 +12432.643355 + 30 +0.0 + 11 +5000.0 + 21 +12454.29398 + 31 +0.0 + 0 +LINE + 5 +124A + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +12359.031185 + 30 +0.0 + 11 +4925.000006 + 21 +12367.69145 + 31 +0.0 + 0 +LINE + 5 +124B + 8 +0 + 62 + 0 + 10 +4950.000006 + 20 +12410.99272 + 30 +0.0 + 11 +4962.500006 + 21 +12432.643355 + 31 +0.0 + 0 +LINE + 5 +124C + 8 +0 + 62 + 0 + 10 +4987.500006 + 20 +12475.944626 + 30 +0.0 + 11 +5000.0 + 21 +12497.59525 + 31 +0.0 + 0 +LINE + 5 +124D + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +12402.332455 + 30 +0.0 + 11 +4925.000006 + 21 +12410.99272 + 31 +0.0 + 0 +LINE + 5 +124E + 8 +0 + 62 + 0 + 10 +4950.000006 + 20 +12454.29399 + 30 +0.0 + 11 +4962.500006 + 21 +12475.944626 + 31 +0.0 + 0 +LINE + 5 +124F + 8 +0 + 62 + 0 + 10 +4987.500006 + 20 +12519.245896 + 30 +0.0 + 11 +5000.0 + 21 +12540.89652 + 31 +0.0 + 0 +LINE + 5 +1250 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +12445.633725 + 30 +0.0 + 11 +4925.000006 + 21 +12454.29399 + 31 +0.0 + 0 +LINE + 5 +1251 + 8 +0 + 62 + 0 + 10 +4950.000006 + 20 +12497.595261 + 30 +0.0 + 11 +4962.500006 + 21 +12519.245896 + 31 +0.0 + 0 +LINE + 5 +1252 + 8 +0 + 62 + 0 + 10 +4987.500006 + 20 +12562.547166 + 30 +0.0 + 11 +5000.0 + 21 +12584.19779 + 31 +0.0 + 0 +LINE + 5 +1253 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +12488.934995 + 30 +0.0 + 11 +4925.000006 + 21 +12497.595261 + 31 +0.0 + 0 +LINE + 5 +1254 + 8 +0 + 62 + 0 + 10 +4950.000006 + 20 +12540.896531 + 30 +0.0 + 11 +4962.500006 + 21 +12562.547166 + 31 +0.0 + 0 +LINE + 5 +1255 + 8 +0 + 62 + 0 + 10 +4987.500006 + 20 +12605.848436 + 30 +0.0 + 11 +5000.0 + 21 +12627.49906 + 31 +0.0 + 0 +LINE + 5 +1256 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +12532.236265 + 30 +0.0 + 11 +4925.000006 + 21 +12540.896531 + 31 +0.0 + 0 +LINE + 5 +1257 + 8 +0 + 62 + 0 + 10 +4950.000006 + 20 +12584.197801 + 30 +0.0 + 11 +4962.500006 + 21 +12605.848436 + 31 +0.0 + 0 +LINE + 5 +1258 + 8 +0 + 62 + 0 + 10 +4987.500006 + 20 +12649.149706 + 30 +0.0 + 11 +5000.0 + 21 +12670.80033 + 31 +0.0 + 0 +LINE + 5 +1259 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +12575.537535 + 30 +0.0 + 11 +4925.000007 + 21 +12584.197801 + 31 +0.0 + 0 +LINE + 5 +125A + 8 +0 + 62 + 0 + 10 +4950.000007 + 20 +12627.499071 + 30 +0.0 + 11 +4962.500007 + 21 +12649.149706 + 31 +0.0 + 0 +LINE + 5 +125B + 8 +0 + 62 + 0 + 10 +4987.500007 + 20 +12692.450976 + 30 +0.0 + 11 +5000.0 + 21 +12714.1016 + 31 +0.0 + 0 +LINE + 5 +125C + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +12618.838805 + 30 +0.0 + 11 +4925.000007 + 21 +12627.499071 + 31 +0.0 + 0 +LINE + 5 +125D + 8 +0 + 62 + 0 + 10 +4950.000007 + 20 +12670.800341 + 30 +0.0 + 11 +4962.500007 + 21 +12692.450976 + 31 +0.0 + 0 +LINE + 5 +125E + 8 +0 + 62 + 0 + 10 +4987.500007 + 20 +12735.752246 + 30 +0.0 + 11 +5000.0 + 21 +12757.40287 + 31 +0.0 + 0 +LINE + 5 +125F + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +12662.140075 + 30 +0.0 + 11 +4925.000007 + 21 +12670.800341 + 31 +0.0 + 0 +LINE + 5 +1260 + 8 +0 + 62 + 0 + 10 +4950.000007 + 20 +12714.101611 + 30 +0.0 + 11 +4962.500007 + 21 +12735.752246 + 31 +0.0 + 0 +LINE + 5 +1261 + 8 +0 + 62 + 0 + 10 +4987.500007 + 20 +12779.053517 + 30 +0.0 + 11 +5000.0 + 21 +12800.70414 + 31 +0.0 + 0 +LINE + 5 +1262 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +12705.441345 + 30 +0.0 + 11 +4925.000007 + 21 +12714.101611 + 31 +0.0 + 0 +LINE + 5 +1263 + 8 +0 + 62 + 0 + 10 +4950.000007 + 20 +12757.402881 + 30 +0.0 + 11 +4962.500007 + 21 +12779.053516 + 31 +0.0 + 0 +LINE + 5 +1264 + 8 +0 + 62 + 0 + 10 +4987.500007 + 20 +12822.354787 + 30 +0.0 + 11 +5000.0 + 21 +12844.00541 + 31 +0.0 + 0 +LINE + 5 +1265 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +12748.742615 + 30 +0.0 + 11 +4925.000007 + 21 +12757.402881 + 31 +0.0 + 0 +LINE + 5 +1266 + 8 +0 + 62 + 0 + 10 +4950.000007 + 20 +12800.704152 + 30 +0.0 + 11 +4962.500007 + 21 +12822.354787 + 31 +0.0 + 0 +LINE + 5 +1267 + 8 +0 + 62 + 0 + 10 +4987.500007 + 20 +12865.656057 + 30 +0.0 + 11 +5000.0 + 21 +12887.30668 + 31 +0.0 + 0 +LINE + 5 +1268 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +12792.043885 + 30 +0.0 + 11 +4925.000007 + 21 +12800.704151 + 31 +0.0 + 0 +LINE + 5 +1269 + 8 +0 + 62 + 0 + 10 +4950.000007 + 20 +12844.005422 + 30 +0.0 + 11 +4962.500007 + 21 +12865.656057 + 31 +0.0 + 0 +LINE + 5 +126A + 8 +0 + 62 + 0 + 10 +4987.500007 + 20 +12908.957327 + 30 +0.0 + 11 +5000.0 + 21 +12930.60795 + 31 +0.0 + 0 +LINE + 5 +126B + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +12835.345155 + 30 +0.0 + 11 +4925.000007 + 21 +12844.005422 + 31 +0.0 + 0 +LINE + 5 +126C + 8 +0 + 62 + 0 + 10 +4950.000007 + 20 +12887.306692 + 30 +0.0 + 11 +4962.500007 + 21 +12908.957327 + 31 +0.0 + 0 +LINE + 5 +126D + 8 +0 + 62 + 0 + 10 +4987.500007 + 20 +12952.258597 + 30 +0.0 + 11 +5000.0 + 21 +12973.90922 + 31 +0.0 + 0 +LINE + 5 +126E + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +12878.646425 + 30 +0.0 + 11 +4925.000007 + 21 +12887.306692 + 31 +0.0 + 0 +LINE + 5 +126F + 8 +0 + 62 + 0 + 10 +4950.000007 + 20 +12930.607962 + 30 +0.0 + 11 +4962.500007 + 21 +12952.258597 + 31 +0.0 + 0 +LINE + 5 +1270 + 8 +0 + 62 + 0 + 10 +4987.500007 + 20 +12995.559867 + 30 +0.0 + 11 +5000.0 + 21 +13017.21049 + 31 +0.0 + 0 +LINE + 5 +1271 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +12921.947695 + 30 +0.0 + 11 +4925.000007 + 21 +12930.607962 + 31 +0.0 + 0 +LINE + 5 +1272 + 8 +0 + 62 + 0 + 10 +4950.000007 + 20 +12973.909232 + 30 +0.0 + 11 +4962.500007 + 21 +12995.559867 + 31 +0.0 + 0 +LINE + 5 +1273 + 8 +0 + 62 + 0 + 10 +4987.500007 + 20 +13038.861137 + 30 +0.0 + 11 +5000.0 + 21 +13060.51176 + 31 +0.0 + 0 +LINE + 5 +1274 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +12965.248965 + 30 +0.0 + 11 +4925.000007 + 21 +12973.909232 + 31 +0.0 + 0 +LINE + 5 +1275 + 8 +0 + 62 + 0 + 10 +4950.000007 + 20 +13017.210502 + 30 +0.0 + 11 +4962.500007 + 21 +13038.861137 + 31 +0.0 + 0 +LINE + 5 +1276 + 8 +0 + 62 + 0 + 10 +4987.500007 + 20 +13082.162408 + 30 +0.0 + 11 +5000.0 + 21 +13103.81303 + 31 +0.0 + 0 +LINE + 5 +1277 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +13008.550235 + 30 +0.0 + 11 +4925.000007 + 21 +13017.210502 + 31 +0.0 + 0 +LINE + 5 +1278 + 8 +0 + 62 + 0 + 10 +4950.000007 + 20 +13060.511772 + 30 +0.0 + 11 +4962.500007 + 21 +13082.162407 + 31 +0.0 + 0 +LINE + 5 +1279 + 8 +0 + 62 + 0 + 10 +4987.500007 + 20 +13125.463678 + 30 +0.0 + 11 +5000.0 + 21 +13147.1143 + 31 +0.0 + 0 +LINE + 5 +127A + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +13051.851505 + 30 +0.0 + 11 +4925.000007 + 21 +13060.511772 + 31 +0.0 + 0 +LINE + 5 +127B + 8 +0 + 62 + 0 + 10 +4950.000007 + 20 +13103.813043 + 30 +0.0 + 11 +4962.500007 + 21 +13125.463678 + 31 +0.0 + 0 +LINE + 5 +127C + 8 +0 + 62 + 0 + 10 +4987.500007 + 20 +13168.764948 + 30 +0.0 + 11 +5000.0 + 21 +13190.41557 + 31 +0.0 + 0 +LINE + 5 +127D + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +13095.152775 + 30 +0.0 + 11 +4925.000008 + 21 +13103.813042 + 31 +0.0 + 0 +LINE + 5 +127E + 8 +0 + 62 + 0 + 10 +4950.000008 + 20 +13147.114313 + 30 +0.0 + 11 +4962.500008 + 21 +13168.764948 + 31 +0.0 + 0 +LINE + 5 +127F + 8 +0 + 62 + 0 + 10 +4987.500008 + 20 +13212.066218 + 30 +0.0 + 11 +5000.0 + 21 +13233.71684 + 31 +0.0 + 0 +LINE + 5 +1280 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +13138.454045 + 30 +0.0 + 11 +4925.000008 + 21 +13147.114313 + 31 +0.0 + 0 +LINE + 5 +1281 + 8 +0 + 62 + 0 + 10 +4950.000008 + 20 +13190.415583 + 30 +0.0 + 11 +4962.500008 + 21 +13212.066218 + 31 +0.0 + 0 +LINE + 5 +1282 + 8 +0 + 62 + 0 + 10 +4987.500008 + 20 +13255.367488 + 30 +0.0 + 11 +5000.0 + 21 +13277.01811 + 31 +0.0 + 0 +LINE + 5 +1283 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +13181.755315 + 30 +0.0 + 11 +4925.000008 + 21 +13190.415583 + 31 +0.0 + 0 +LINE + 5 +1284 + 8 +0 + 62 + 0 + 10 +4950.000008 + 20 +13233.716853 + 30 +0.0 + 11 +4962.500008 + 21 +13255.367488 + 31 +0.0 + 0 +LINE + 5 +1285 + 8 +0 + 62 + 0 + 10 +4987.500008 + 20 +13298.668758 + 30 +0.0 + 11 +5000.0 + 21 +13320.31938 + 31 +0.0 + 0 +LINE + 5 +1286 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +13225.056585 + 30 +0.0 + 11 +4925.000008 + 21 +13233.716853 + 31 +0.0 + 0 +LINE + 5 +1287 + 8 +0 + 62 + 0 + 10 +4950.000008 + 20 +13277.018123 + 30 +0.0 + 11 +4962.500008 + 21 +13298.668758 + 31 +0.0 + 0 +LINE + 5 +1288 + 8 +0 + 62 + 0 + 10 +4987.500008 + 20 +13341.970028 + 30 +0.0 + 11 +5000.0 + 21 +13363.62065 + 31 +0.0 + 0 +LINE + 5 +1289 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +13268.357855 + 30 +0.0 + 11 +4925.000008 + 21 +13277.018123 + 31 +0.0 + 0 +LINE + 5 +128A + 8 +0 + 62 + 0 + 10 +4950.000008 + 20 +13320.319393 + 30 +0.0 + 11 +4962.500008 + 21 +13341.970028 + 31 +0.0 + 0 +LINE + 5 +128B + 8 +0 + 62 + 0 + 10 +4987.500008 + 20 +13385.271299 + 30 +0.0 + 11 +5000.0 + 21 +13406.92192 + 31 +0.0 + 0 +LINE + 5 +128C + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +13311.659125 + 30 +0.0 + 11 +4925.000008 + 21 +13320.319393 + 31 +0.0 + 0 +LINE + 5 +128D + 8 +0 + 62 + 0 + 10 +4950.000008 + 20 +13363.620663 + 30 +0.0 + 11 +4962.500008 + 21 +13385.271298 + 31 +0.0 + 0 +LINE + 5 +128E + 8 +0 + 62 + 0 + 10 +4987.500008 + 20 +13428.572569 + 30 +0.0 + 11 +5000.0 + 21 +13450.22319 + 31 +0.0 + 0 +LINE + 5 +128F + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +13354.960395 + 30 +0.0 + 11 +4925.000008 + 21 +13363.620663 + 31 +0.0 + 0 +LINE + 5 +1290 + 8 +0 + 62 + 0 + 10 +4950.000008 + 20 +13406.921934 + 30 +0.0 + 11 +4962.500008 + 21 +13428.572569 + 31 +0.0 + 0 +LINE + 5 +1291 + 8 +0 + 62 + 0 + 10 +4987.500008 + 20 +13471.873839 + 30 +0.0 + 11 +5000.0 + 21 +13493.52446 + 31 +0.0 + 0 +LINE + 5 +1292 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +13398.261665 + 30 +0.0 + 11 +4925.000008 + 21 +13406.921933 + 31 +0.0 + 0 +LINE + 5 +1293 + 8 +0 + 62 + 0 + 10 +4950.000008 + 20 +13450.223204 + 30 +0.0 + 11 +4962.500008 + 21 +13471.873839 + 31 +0.0 + 0 +LINE + 5 +1294 + 8 +0 + 62 + 0 + 10 +4987.500008 + 20 +13515.175109 + 30 +0.0 + 11 +5000.0 + 21 +13536.82573 + 31 +0.0 + 0 +LINE + 5 +1295 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +13441.562935 + 30 +0.0 + 11 +4925.000008 + 21 +13450.223204 + 31 +0.0 + 0 +LINE + 5 +1296 + 8 +0 + 62 + 0 + 10 +4950.000008 + 20 +13493.524474 + 30 +0.0 + 11 +4962.500008 + 21 +13515.175109 + 31 +0.0 + 0 +LINE + 5 +1297 + 8 +0 + 62 + 0 + 10 +4987.500008 + 20 +13558.476379 + 30 +0.0 + 11 +5000.0 + 21 +13580.127 + 31 +0.0 + 0 +LINE + 5 +1298 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +13484.864205 + 30 +0.0 + 11 +4925.000008 + 21 +13493.524474 + 31 +0.0 + 0 +LINE + 5 +1299 + 8 +0 + 62 + 0 + 10 +4950.000008 + 20 +13536.825744 + 30 +0.0 + 11 +4962.500008 + 21 +13558.476379 + 31 +0.0 + 0 +LINE + 5 +129A + 8 +0 + 62 + 0 + 10 +4987.500008 + 20 +13601.777649 + 30 +0.0 + 11 +5000.0 + 21 +13623.42827 + 31 +0.0 + 0 +LINE + 5 +129B + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +13528.165475 + 30 +0.0 + 11 +4925.000008 + 21 +13536.825744 + 31 +0.0 + 0 +LINE + 5 +129C + 8 +0 + 62 + 0 + 10 +4950.000008 + 20 +13580.127014 + 30 +0.0 + 11 +4962.500008 + 21 +13601.777649 + 31 +0.0 + 0 +LINE + 5 +129D + 8 +0 + 62 + 0 + 10 +4987.500008 + 20 +13645.078919 + 30 +0.0 + 11 +5000.0 + 21 +13666.72954 + 31 +0.0 + 0 +LINE + 5 +129E + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +13571.466745 + 30 +0.0 + 11 +4925.000008 + 21 +13580.127014 + 31 +0.0 + 0 +LINE + 5 +129F + 8 +0 + 62 + 0 + 10 +4950.000008 + 20 +13623.428284 + 30 +0.0 + 11 +4962.500008 + 21 +13645.078919 + 31 +0.0 + 0 +LINE + 5 +12A0 + 8 +0 + 62 + 0 + 10 +4987.500008 + 20 +13688.38019 + 30 +0.0 + 11 +5000.0 + 21 +13710.03081 + 31 +0.0 + 0 +LINE + 5 +12A1 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +13614.768015 + 30 +0.0 + 11 +4925.000009 + 21 +13623.428284 + 31 +0.0 + 0 +LINE + 5 +12A2 + 8 +0 + 62 + 0 + 10 +4950.000009 + 20 +13666.729554 + 30 +0.0 + 11 +4962.500009 + 21 +13688.380189 + 31 +0.0 + 0 +LINE + 5 +12A3 + 8 +0 + 62 + 0 + 10 +4987.500009 + 20 +13731.68146 + 30 +0.0 + 11 +5000.0 + 21 +13753.33208 + 31 +0.0 + 0 +LINE + 5 +12A4 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +13658.069285 + 30 +0.0 + 11 +4925.000009 + 21 +13666.729554 + 31 +0.0 + 0 +LINE + 5 +12A5 + 8 +0 + 62 + 0 + 10 +4950.000009 + 20 +13710.030825 + 30 +0.0 + 11 +4962.500009 + 21 +13731.68146 + 31 +0.0 + 0 +LINE + 5 +12A6 + 8 +0 + 62 + 0 + 10 +4987.500009 + 20 +13774.98273 + 30 +0.0 + 11 +5000.0 + 21 +13796.63335 + 31 +0.0 + 0 +LINE + 5 +12A7 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +13701.370555 + 30 +0.0 + 11 +4925.000009 + 21 +13710.030824 + 31 +0.0 + 0 +LINE + 5 +12A8 + 8 +0 + 62 + 0 + 10 +4950.000009 + 20 +13753.332095 + 30 +0.0 + 11 +4962.500009 + 21 +13774.98273 + 31 +0.0 + 0 +LINE + 5 +12A9 + 8 +0 + 62 + 0 + 10 +4987.500009 + 20 +13818.284 + 30 +0.0 + 11 +5000.0 + 21 +13839.93462 + 31 +0.0 + 0 +LINE + 5 +12AA + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +13744.671825 + 30 +0.0 + 11 +4925.000009 + 21 +13753.332095 + 31 +0.0 + 0 +LINE + 5 +12AB + 8 +0 + 62 + 0 + 10 +4950.000009 + 20 +13796.633365 + 30 +0.0 + 11 +4962.500009 + 21 +13818.284 + 31 +0.0 + 0 +LINE + 5 +12AC + 8 +0 + 62 + 0 + 10 +4987.500009 + 20 +13861.58527 + 30 +0.0 + 11 +5000.0 + 21 +13883.23589 + 31 +0.0 + 0 +LINE + 5 +12AD + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +13787.973095 + 30 +0.0 + 11 +4925.000009 + 21 +13796.633365 + 31 +0.0 + 0 +LINE + 5 +12AE + 8 +0 + 62 + 0 + 10 +4950.000009 + 20 +13839.934635 + 30 +0.0 + 11 +4962.500009 + 21 +13861.58527 + 31 +0.0 + 0 +LINE + 5 +12AF + 8 +0 + 62 + 0 + 10 +4987.500009 + 20 +13904.88654 + 30 +0.0 + 11 +5000.0 + 21 +13926.53716 + 31 +0.0 + 0 +LINE + 5 +12B0 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +13831.274365 + 30 +0.0 + 11 +4925.000009 + 21 +13839.934635 + 31 +0.0 + 0 +LINE + 5 +12B1 + 8 +0 + 62 + 0 + 10 +4950.000009 + 20 +13883.235905 + 30 +0.0 + 11 +4962.500009 + 21 +13904.88654 + 31 +0.0 + 0 +LINE + 5 +12B2 + 8 +0 + 62 + 0 + 10 +4987.500009 + 20 +13948.18781 + 30 +0.0 + 11 +5000.0 + 21 +13969.83843 + 31 +0.0 + 0 +LINE + 5 +12B3 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +13874.575635 + 30 +0.0 + 11 +4925.000009 + 21 +13883.235905 + 31 +0.0 + 0 +LINE + 5 +12B4 + 8 +0 + 62 + 0 + 10 +4950.000009 + 20 +13926.537175 + 30 +0.0 + 11 +4962.500009 + 21 +13948.18781 + 31 +0.0 + 0 +LINE + 5 +12B5 + 8 +0 + 62 + 0 + 10 +4987.500009 + 20 +13991.489081 + 30 +0.0 + 11 +5000.0 + 21 +14013.1397 + 31 +0.0 + 0 +LINE + 5 +12B6 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +13917.876905 + 30 +0.0 + 11 +4925.000009 + 21 +13926.537175 + 31 +0.0 + 0 +LINE + 5 +12B7 + 8 +0 + 62 + 0 + 10 +4950.000009 + 20 +13969.838445 + 30 +0.0 + 11 +4962.500009 + 21 +13991.48908 + 31 +0.0 + 0 +LINE + 5 +12B8 + 8 +0 + 62 + 0 + 10 +4987.500009 + 20 +14034.790351 + 30 +0.0 + 11 +5000.0 + 21 +14056.44097 + 31 +0.0 + 0 +LINE + 5 +12B9 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +13961.178175 + 30 +0.0 + 11 +4925.000009 + 21 +13969.838445 + 31 +0.0 + 0 +LINE + 5 +12BA + 8 +0 + 62 + 0 + 10 +4950.000009 + 20 +14013.139716 + 30 +0.0 + 11 +4962.500009 + 21 +14034.790351 + 31 +0.0 + 0 +LINE + 5 +12BB + 8 +0 + 62 + 0 + 10 +4987.500009 + 20 +14078.091621 + 30 +0.0 + 11 +5000.0 + 21 +14099.74224 + 31 +0.0 + 0 +LINE + 5 +12BC + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +14004.479445 + 30 +0.0 + 11 +4925.000009 + 21 +14013.139715 + 31 +0.0 + 0 +LINE + 5 +12BD + 8 +0 + 62 + 0 + 10 +4950.000009 + 20 +14056.440986 + 30 +0.0 + 11 +4962.500009 + 21 +14078.091621 + 31 +0.0 + 0 +LINE + 5 +12BE + 8 +0 + 62 + 0 + 10 +4987.500009 + 20 +14121.392891 + 30 +0.0 + 11 +5000.0 + 21 +14143.04351 + 31 +0.0 + 0 +LINE + 5 +12BF + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +14047.780715 + 30 +0.0 + 11 +4925.000009 + 21 +14056.440986 + 31 +0.0 + 0 +LINE + 5 +12C0 + 8 +0 + 62 + 0 + 10 +4950.000009 + 20 +14099.742256 + 30 +0.0 + 11 +4962.500009 + 21 +14121.392891 + 31 +0.0 + 0 +LINE + 5 +12C1 + 8 +0 + 62 + 0 + 10 +4987.500009 + 20 +14164.694161 + 30 +0.0 + 11 +5000.0 + 21 +14186.34478 + 31 +0.0 + 0 +LINE + 5 +12C2 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +14091.081985 + 30 +0.0 + 11 +4925.000009 + 21 +14099.742256 + 31 +0.0 + 0 +LINE + 5 +12C3 + 8 +0 + 62 + 0 + 10 +4950.000009 + 20 +14143.043526 + 30 +0.0 + 11 +4962.500009 + 21 +14164.694161 + 31 +0.0 + 0 +LINE + 5 +12C4 + 8 +0 + 62 + 0 + 10 +4987.500009 + 20 +14207.995431 + 30 +0.0 + 11 +5000.0 + 21 +14229.64605 + 31 +0.0 + 0 +LINE + 5 +12C5 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +14134.383255 + 30 +0.0 + 11 +4925.00001 + 21 +14143.043526 + 31 +0.0 + 0 +LINE + 5 +12C6 + 8 +0 + 62 + 0 + 10 +4950.00001 + 20 +14186.344796 + 30 +0.0 + 11 +4962.50001 + 21 +14207.995431 + 31 +0.0 + 0 +LINE + 5 +12C7 + 8 +0 + 62 + 0 + 10 +4987.50001 + 20 +14251.296701 + 30 +0.0 + 11 +5000.0 + 21 +14272.94732 + 31 +0.0 + 0 +LINE + 5 +12C8 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +14177.684525 + 30 +0.0 + 11 +4925.00001 + 21 +14186.344796 + 31 +0.0 + 0 +LINE + 5 +12C9 + 8 +0 + 62 + 0 + 10 +4950.00001 + 20 +14229.646066 + 30 +0.0 + 11 +4962.50001 + 21 +14251.296701 + 31 +0.0 + 0 +LINE + 5 +12CA + 8 +0 + 62 + 0 + 10 +4987.50001 + 20 +14294.597972 + 30 +0.0 + 11 +5000.0 + 21 +14316.24859 + 31 +0.0 + 0 +LINE + 5 +12CB + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +14220.985795 + 30 +0.0 + 11 +4925.00001 + 21 +14229.646066 + 31 +0.0 + 0 +LINE + 5 +12CC + 8 +0 + 62 + 0 + 10 +4950.00001 + 20 +14272.947336 + 30 +0.0 + 11 +4962.50001 + 21 +14294.597971 + 31 +0.0 + 0 +LINE + 5 +12CD + 8 +0 + 62 + 0 + 10 +4987.50001 + 20 +14337.899242 + 30 +0.0 + 11 +5000.0 + 21 +14359.54986 + 31 +0.0 + 0 +LINE + 5 +12CE + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +14264.287065 + 30 +0.0 + 11 +4925.00001 + 21 +14272.947336 + 31 +0.0 + 0 +LINE + 5 +12CF + 8 +0 + 62 + 0 + 10 +4950.00001 + 20 +14316.248607 + 30 +0.0 + 11 +4962.50001 + 21 +14337.899242 + 31 +0.0 + 0 +LINE + 5 +12D0 + 8 +0 + 62 + 0 + 10 +4987.50001 + 20 +14381.200512 + 30 +0.0 + 11 +5000.0 + 21 +14402.85113 + 31 +0.0 + 0 +LINE + 5 +12D1 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +14307.588335 + 30 +0.0 + 11 +4925.00001 + 21 +14316.248606 + 31 +0.0 + 0 +LINE + 5 +12D2 + 8 +0 + 62 + 0 + 10 +4950.00001 + 20 +14359.549877 + 30 +0.0 + 11 +4962.50001 + 21 +14381.200512 + 31 +0.0 + 0 +LINE + 5 +12D3 + 8 +0 + 62 + 0 + 10 +4987.50001 + 20 +14424.501782 + 30 +0.0 + 11 +5000.0 + 21 +14446.1524 + 31 +0.0 + 0 +LINE + 5 +12D4 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +14350.889605 + 30 +0.0 + 11 +4925.00001 + 21 +14359.549877 + 31 +0.0 + 0 +LINE + 5 +12D5 + 8 +0 + 62 + 0 + 10 +4950.00001 + 20 +14402.851147 + 30 +0.0 + 11 +4962.50001 + 21 +14424.501782 + 31 +0.0 + 0 +LINE + 5 +12D6 + 8 +0 + 62 + 0 + 10 +4987.50001 + 20 +14467.803052 + 30 +0.0 + 11 +5000.0 + 21 +14489.45367 + 31 +0.0 + 0 +LINE + 5 +12D7 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +14394.190875 + 30 +0.0 + 11 +4925.00001 + 21 +14402.851147 + 31 +0.0 + 0 +LINE + 5 +12D8 + 8 +0 + 62 + 0 + 10 +4950.00001 + 20 +14446.152417 + 30 +0.0 + 11 +4962.50001 + 21 +14467.803052 + 31 +0.0 + 0 +LINE + 5 +12D9 + 8 +0 + 62 + 0 + 10 +4987.50001 + 20 +14511.104322 + 30 +0.0 + 11 +5000.0 + 21 +14532.75494 + 31 +0.0 + 0 +LINE + 5 +12DA + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +14437.492145 + 30 +0.0 + 11 +4925.00001 + 21 +14446.152417 + 31 +0.0 + 0 +LINE + 5 +12DB + 8 +0 + 62 + 0 + 10 +4950.00001 + 20 +14489.453687 + 30 +0.0 + 11 +4962.50001 + 21 +14511.104322 + 31 +0.0 + 0 +LINE + 5 +12DC + 8 +0 + 62 + 0 + 10 +4987.50001 + 20 +14554.405592 + 30 +0.0 + 11 +5000.0 + 21 +14576.05621 + 31 +0.0 + 0 +LINE + 5 +12DD + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +14480.793415 + 30 +0.0 + 11 +4925.00001 + 21 +14489.453687 + 31 +0.0 + 0 +LINE + 5 +12DE + 8 +0 + 62 + 0 + 10 +4950.00001 + 20 +14532.754957 + 30 +0.0 + 11 +4962.50001 + 21 +14554.405592 + 31 +0.0 + 0 +LINE + 5 +12DF + 8 +0 + 62 + 0 + 10 +4987.50001 + 20 +14597.706863 + 30 +0.0 + 11 +5000.0 + 21 +14619.35748 + 31 +0.0 + 0 +LINE + 5 +12E0 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +14524.094685 + 30 +0.0 + 11 +4925.00001 + 21 +14532.754957 + 31 +0.0 + 0 +LINE + 5 +12E1 + 8 +0 + 62 + 0 + 10 +4950.00001 + 20 +14576.056227 + 30 +0.0 + 11 +4962.50001 + 21 +14597.706862 + 31 +0.0 + 0 +LINE + 5 +12E2 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +14567.395955 + 30 +0.0 + 11 +4925.00001 + 21 +14576.056227 + 31 +0.0 + 0 +LINE + 5 +12E3 + 8 +0 + 62 + 0 + 10 +4950.00001 + 20 +14619.357498 + 30 +0.0 + 11 +4953.979398 + 21 +14626.25 + 31 +0.0 + 0 +LINE + 5 +12E4 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +14610.697225 + 30 +0.0 + 11 +4925.00001 + 21 +14619.357497 + 31 +0.0 + 0 +LINE + 5 +12E5 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +9371.243555 + 30 +0.0 + 11 +4925.0 + 21 +9379.90381 + 31 +0.0 + 0 +LINE + 5 +12E6 + 8 +0 + 62 + 0 + 10 +4950.0 + 20 +9423.20508 + 30 +0.0 + 11 +4962.5 + 21 +9444.855716 + 31 +0.0 + 0 +LINE + 5 +12E7 + 8 +0 + 62 + 0 + 10 +4987.5 + 20 +9488.156986 + 30 +0.0 + 11 +5000.0 + 21 +9509.80762 + 31 +0.0 + 0 +LINE + 5 +12E8 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +9327.942285 + 30 +0.0 + 11 +4925.0 + 21 +9336.60254 + 31 +0.0 + 0 +LINE + 5 +12E9 + 8 +0 + 62 + 0 + 10 +4950.0 + 20 +9379.90381 + 30 +0.0 + 11 +4962.5 + 21 +9401.554445 + 31 +0.0 + 0 +LINE + 5 +12EA + 8 +0 + 62 + 0 + 10 +4987.5 + 20 +9444.855716 + 30 +0.0 + 11 +5000.0 + 21 +9466.50635 + 31 +0.0 + 0 +LINE + 5 +12EB + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +9284.641015 + 30 +0.0 + 11 +4925.0 + 21 +9293.30127 + 31 +0.0 + 0 +LINE + 5 +12EC + 8 +0 + 62 + 0 + 10 +4950.0 + 20 +9336.60254 + 30 +0.0 + 11 +4962.5 + 21 +9358.253175 + 31 +0.0 + 0 +LINE + 5 +12ED + 8 +0 + 62 + 0 + 10 +4987.5 + 20 +9401.554445 + 30 +0.0 + 11 +5000.0 + 21 +9423.20508 + 31 +0.0 + 0 +LINE + 5 +12EE + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +9241.339745 + 30 +0.0 + 11 +4925.0 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +12EF + 8 +0 + 62 + 0 + 10 +4950.0 + 20 +9293.30127 + 30 +0.0 + 11 +4962.5 + 21 +9314.951905 + 31 +0.0 + 0 +LINE + 5 +12F0 + 8 +0 + 62 + 0 + 10 +4987.5 + 20 +9358.253175 + 30 +0.0 + 11 +5000.0 + 21 +9379.90381 + 31 +0.0 + 0 +LINE + 5 +12F1 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +9198.038475 + 30 +0.0 + 11 +4925.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +12F2 + 8 +0 + 62 + 0 + 10 +4950.0 + 20 +9250.0 + 30 +0.0 + 11 +4962.5 + 21 +9271.650635 + 31 +0.0 + 0 +LINE + 5 +12F3 + 8 +0 + 62 + 0 + 10 +4987.5 + 20 +9314.951905 + 30 +0.0 + 11 +5000.0 + 21 +9336.60254 + 31 +0.0 + 0 +LINE + 5 +12F4 + 8 +0 + 62 + 0 + 10 +4950.0 + 20 +9206.69873 + 30 +0.0 + 11 +4962.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +12F5 + 8 +0 + 62 + 0 + 10 +4987.5 + 20 +9271.650635 + 30 +0.0 + 11 +5000.0 + 21 +9293.30127 + 31 +0.0 + 0 +LINE + 5 +12F6 + 8 +0 + 62 + 0 + 10 +4953.811978 + 20 +9170.0 + 30 +0.0 + 11 +4962.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +12F7 + 8 +0 + 62 + 0 + 10 +4987.5 + 20 +9228.349365 + 30 +0.0 + 11 +5000.0 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +12F8 + 8 +0 + 62 + 0 + 10 +4987.5 + 20 +9185.048095 + 30 +0.0 + 11 +5000.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +12F9 + 8 +0 + 62 + 0 + 10 +5025.0 + 20 +9206.69873 + 30 +0.0 + 11 +5037.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +12FA + 8 +0 + 62 + 0 + 10 +5028.811978 + 20 +9170.0 + 30 +0.0 + 11 +5037.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +12FB + 8 +0 + 62 + 0 + 10 +5062.5 + 20 +9228.349365 + 30 +0.0 + 11 +5075.0 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +12FC + 8 +0 + 62 + 0 + 10 +5062.5 + 20 +9185.048095 + 30 +0.0 + 11 +5075.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +12FD + 8 +0 + 62 + 0 + 10 +5100.0 + 20 +9206.69873 + 30 +0.0 + 11 +5112.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +12FE + 8 +0 + 62 + 0 + 10 +5103.811978 + 20 +9170.0 + 30 +0.0 + 11 +5112.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +12FF + 8 +0 + 62 + 0 + 10 +5137.5 + 20 +9228.349365 + 30 +0.0 + 11 +5149.999999 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1300 + 8 +0 + 62 + 0 + 10 +5137.499999 + 20 +9185.048095 + 30 +0.0 + 11 +5149.999999 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +1301 + 8 +0 + 62 + 0 + 10 +5174.999999 + 20 +9206.69873 + 30 +0.0 + 11 +5187.499999 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1302 + 8 +0 + 62 + 0 + 10 +5178.811977 + 20 +9170.0 + 30 +0.0 + 11 +5187.499999 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +1303 + 8 +0 + 62 + 0 + 10 +5212.499999 + 20 +9228.349365 + 30 +0.0 + 11 +5224.999999 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1304 + 8 +0 + 62 + 0 + 10 +5212.499999 + 20 +9185.048095 + 30 +0.0 + 11 +5224.999999 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +1305 + 8 +0 + 62 + 0 + 10 +5249.999999 + 20 +9206.69873 + 30 +0.0 + 11 +5262.499999 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1306 + 8 +0 + 62 + 0 + 10 +5253.811977 + 20 +9170.0 + 30 +0.0 + 11 +5262.499999 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +1307 + 8 +0 + 62 + 0 + 10 +5287.499999 + 20 +9228.349365 + 30 +0.0 + 11 +5299.999999 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1308 + 8 +0 + 62 + 0 + 10 +5287.499999 + 20 +9185.048095 + 30 +0.0 + 11 +5299.999999 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +1309 + 8 +0 + 62 + 0 + 10 +5324.999999 + 20 +9206.69873 + 30 +0.0 + 11 +5337.499999 + 21 +9228.349366 + 31 +0.0 + 0 +LINE + 5 +130A + 8 +0 + 62 + 0 + 10 +5328.811977 + 20 +9170.0 + 30 +0.0 + 11 +5337.499999 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +130B + 8 +0 + 62 + 0 + 10 +5362.499999 + 20 +9228.349366 + 30 +0.0 + 11 +5374.999998 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +130C + 8 +0 + 62 + 0 + 10 +5362.499999 + 20 +9185.048095 + 30 +0.0 + 11 +5374.999999 + 21 +9206.698731 + 31 +0.0 + 0 +LINE + 5 +130D + 8 +0 + 62 + 0 + 10 +5399.999999 + 20 +9206.698731 + 30 +0.0 + 11 +5412.499999 + 21 +9228.349366 + 31 +0.0 + 0 +LINE + 5 +130E + 8 +0 + 62 + 0 + 10 +5403.811976 + 20 +9170.0 + 30 +0.0 + 11 +5412.499999 + 21 +9185.048096 + 31 +0.0 + 0 +LINE + 5 +130F + 8 +0 + 62 + 0 + 10 +5437.499999 + 20 +9228.349366 + 30 +0.0 + 11 +5449.999998 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1310 + 8 +0 + 62 + 0 + 10 +5437.499998 + 20 +9185.048096 + 30 +0.0 + 11 +5449.999998 + 21 +9206.698731 + 31 +0.0 + 0 +LINE + 5 +1311 + 8 +0 + 62 + 0 + 10 +5474.999998 + 20 +9206.698731 + 30 +0.0 + 11 +5487.499998 + 21 +9228.349366 + 31 +0.0 + 0 +LINE + 5 +1312 + 8 +0 + 62 + 0 + 10 +5478.811976 + 20 +9170.0 + 30 +0.0 + 11 +5487.499998 + 21 +9185.048096 + 31 +0.0 + 0 +LINE + 5 +1313 + 8 +0 + 62 + 0 + 10 +5512.499998 + 20 +9228.349366 + 30 +0.0 + 11 +5524.999998 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1314 + 8 +0 + 62 + 0 + 10 +5512.499998 + 20 +9185.048096 + 30 +0.0 + 11 +5524.999998 + 21 +9206.698731 + 31 +0.0 + 0 +LINE + 5 +1315 + 8 +0 + 62 + 0 + 10 +5549.999998 + 20 +9206.698731 + 30 +0.0 + 11 +5562.499998 + 21 +9228.349366 + 31 +0.0 + 0 +LINE + 5 +1316 + 8 +0 + 62 + 0 + 10 +5553.811976 + 20 +9170.0 + 30 +0.0 + 11 +5562.499998 + 21 +9185.048096 + 31 +0.0 + 0 +LINE + 5 +1317 + 8 +0 + 62 + 0 + 10 +5587.499998 + 20 +9228.349366 + 30 +0.0 + 11 +5599.999997 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1318 + 8 +0 + 62 + 0 + 10 +5587.499998 + 20 +9185.048096 + 30 +0.0 + 11 +5599.999998 + 21 +9206.698731 + 31 +0.0 + 0 +LINE + 5 +1319 + 8 +0 + 62 + 0 + 10 +5624.999998 + 20 +9206.698731 + 30 +0.0 + 11 +5637.499998 + 21 +9228.349366 + 31 +0.0 + 0 +LINE + 5 +131A + 8 +0 + 62 + 0 + 10 +5628.811976 + 20 +9170.0 + 30 +0.0 + 11 +5637.499998 + 21 +9185.048096 + 31 +0.0 + 0 +LINE + 5 +131B + 8 +0 + 62 + 0 + 10 +5662.499998 + 20 +9228.349366 + 30 +0.0 + 11 +5674.999997 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +131C + 8 +0 + 62 + 0 + 10 +5662.499998 + 20 +9185.048096 + 30 +0.0 + 11 +5674.999998 + 21 +9206.698731 + 31 +0.0 + 0 +LINE + 5 +131D + 8 +0 + 62 + 0 + 10 +5699.999998 + 20 +9206.698731 + 30 +0.0 + 11 +5712.499998 + 21 +9228.349366 + 31 +0.0 + 0 +LINE + 5 +131E + 8 +0 + 62 + 0 + 10 +5703.811975 + 20 +9170.0 + 30 +0.0 + 11 +5712.499998 + 21 +9185.048096 + 31 +0.0 + 0 +LINE + 5 +131F + 8 +0 + 62 + 0 + 10 +5737.499998 + 20 +9228.349366 + 30 +0.0 + 11 +5749.999997 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1320 + 8 +0 + 62 + 0 + 10 +5737.499997 + 20 +9185.048096 + 30 +0.0 + 11 +5749.999997 + 21 +9206.698731 + 31 +0.0 + 0 +LINE + 5 +1321 + 8 +0 + 62 + 0 + 10 +5774.999997 + 20 +9206.698731 + 30 +0.0 + 11 +5787.499997 + 21 +9228.349366 + 31 +0.0 + 0 +LINE + 5 +1322 + 8 +0 + 62 + 0 + 10 +5778.811975 + 20 +9170.0 + 30 +0.0 + 11 +5787.499997 + 21 +9185.048096 + 31 +0.0 + 0 +LINE + 5 +1323 + 8 +0 + 62 + 0 + 10 +5812.499997 + 20 +9228.349366 + 30 +0.0 + 11 +5824.999996 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1324 + 8 +0 + 62 + 0 + 10 +5812.499997 + 20 +9185.048096 + 30 +0.0 + 11 +5824.999997 + 21 +9206.698731 + 31 +0.0 + 0 +LINE + 5 +1325 + 8 +0 + 62 + 0 + 10 +5849.999997 + 20 +9206.698731 + 30 +0.0 + 11 +5862.499997 + 21 +9228.349367 + 31 +0.0 + 0 +LINE + 5 +1326 + 8 +0 + 62 + 0 + 10 +5853.811975 + 20 +9170.0 + 30 +0.0 + 11 +5862.499997 + 21 +9185.048096 + 31 +0.0 + 0 +LINE + 5 +1327 + 8 +0 + 62 + 0 + 10 +5887.499997 + 20 +9228.349367 + 30 +0.0 + 11 +5899.999996 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1328 + 8 +0 + 62 + 0 + 10 +5887.499997 + 20 +9185.048096 + 30 +0.0 + 11 +5899.999997 + 21 +9206.698732 + 31 +0.0 + 0 +LINE + 5 +1329 + 8 +0 + 62 + 0 + 10 +5924.999997 + 20 +9206.698732 + 30 +0.0 + 11 +5937.499997 + 21 +9228.349367 + 31 +0.0 + 0 +LINE + 5 +132A + 8 +0 + 62 + 0 + 10 +5928.811974 + 20 +9170.0 + 30 +0.0 + 11 +5937.499997 + 21 +9185.048097 + 31 +0.0 + 0 +LINE + 5 +132B + 8 +0 + 62 + 0 + 10 +5962.499997 + 20 +9228.349367 + 30 +0.0 + 11 +5974.999996 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +132C + 8 +0 + 62 + 0 + 10 +5962.499997 + 20 +9185.048097 + 30 +0.0 + 11 +5974.999997 + 21 +9206.698732 + 31 +0.0 + 0 +LINE + 5 +132D + 8 +0 + 62 + 0 + 10 +5999.999997 + 20 +9206.698732 + 30 +0.0 + 11 +6012.499997 + 21 +9228.349367 + 31 +0.0 + 0 +LINE + 5 +132E + 8 +0 + 62 + 0 + 10 +6003.811974 + 20 +9170.0 + 30 +0.0 + 11 +6012.499997 + 21 +9185.048097 + 31 +0.0 + 0 +LINE + 5 +132F + 8 +0 + 62 + 0 + 10 +6037.499997 + 20 +9228.349367 + 30 +0.0 + 11 +6049.999995 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1330 + 8 +0 + 62 + 0 + 10 +6037.499996 + 20 +9185.048097 + 30 +0.0 + 11 +6049.999996 + 21 +9206.698732 + 31 +0.0 + 0 +LINE + 5 +1331 + 8 +0 + 62 + 0 + 10 +6074.999996 + 20 +9206.698732 + 30 +0.0 + 11 +6087.499996 + 21 +9228.349367 + 31 +0.0 + 0 +LINE + 5 +1332 + 8 +0 + 62 + 0 + 10 +6078.811974 + 20 +9170.0 + 30 +0.0 + 11 +6087.499996 + 21 +9185.048097 + 31 +0.0 + 0 +LINE + 5 +1333 + 8 +0 + 62 + 0 + 10 +6112.499996 + 20 +9228.349367 + 30 +0.0 + 11 +6124.999995 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1334 + 8 +0 + 62 + 0 + 10 +6112.499996 + 20 +9185.048097 + 30 +0.0 + 11 +6124.999996 + 21 +9206.698732 + 31 +0.0 + 0 +LINE + 5 +1335 + 8 +0 + 62 + 0 + 10 +6149.999996 + 20 +9206.698732 + 30 +0.0 + 11 +6162.499996 + 21 +9228.349367 + 31 +0.0 + 0 +LINE + 5 +1336 + 8 +0 + 62 + 0 + 10 +6153.811973 + 20 +9170.0 + 30 +0.0 + 11 +6162.499996 + 21 +9185.048097 + 31 +0.0 + 0 +LINE + 5 +1337 + 8 +0 + 62 + 0 + 10 +6187.499996 + 20 +9228.349367 + 30 +0.0 + 11 +6199.999995 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1338 + 8 +0 + 62 + 0 + 10 +6187.499996 + 20 +9185.048097 + 30 +0.0 + 11 +6199.999996 + 21 +9206.698732 + 31 +0.0 + 0 +LINE + 5 +1339 + 8 +0 + 62 + 0 + 10 +6224.999996 + 20 +9206.698732 + 30 +0.0 + 11 +6237.499996 + 21 +9228.349367 + 31 +0.0 + 0 +LINE + 5 +133A + 8 +0 + 62 + 0 + 10 +6228.811973 + 20 +9170.0 + 30 +0.0 + 11 +6237.499996 + 21 +9185.048097 + 31 +0.0 + 0 +LINE + 5 +133B + 8 +0 + 62 + 0 + 10 +6262.499996 + 20 +9228.349367 + 30 +0.0 + 11 +6274.999994 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +133C + 8 +0 + 62 + 0 + 10 +6262.499996 + 20 +9185.048097 + 30 +0.0 + 11 +6274.999996 + 21 +9206.698732 + 31 +0.0 + 0 +LINE + 5 +133D + 8 +0 + 62 + 0 + 10 +6299.999996 + 20 +9206.698732 + 30 +0.0 + 11 +6312.499996 + 21 +9228.349367 + 31 +0.0 + 0 +LINE + 5 +133E + 8 +0 + 62 + 0 + 10 +6303.811973 + 20 +9170.0 + 30 +0.0 + 11 +6312.499996 + 21 +9185.048097 + 31 +0.0 + 0 +LINE + 5 +133F + 8 +0 + 62 + 0 + 10 +6337.499996 + 20 +9228.349367 + 30 +0.0 + 11 +6349.999994 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1340 + 8 +0 + 62 + 0 + 10 +6337.499995 + 20 +9185.048097 + 30 +0.0 + 11 +6349.999995 + 21 +9206.698732 + 31 +0.0 + 0 +LINE + 5 +1341 + 8 +0 + 62 + 0 + 10 +6374.999995 + 20 +9206.698732 + 30 +0.0 + 11 +6387.499995 + 21 +9228.349368 + 31 +0.0 + 0 +LINE + 5 +1342 + 8 +0 + 62 + 0 + 10 +6378.811972 + 20 +9170.0 + 30 +0.0 + 11 +6387.499995 + 21 +9185.048097 + 31 +0.0 + 0 +LINE + 5 +1343 + 8 +0 + 62 + 0 + 10 +6412.499995 + 20 +9228.349368 + 30 +0.0 + 11 +6424.999994 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1344 + 8 +0 + 62 + 0 + 10 +6412.499995 + 20 +9185.048097 + 30 +0.0 + 11 +6424.999995 + 21 +9206.698733 + 31 +0.0 + 0 +LINE + 5 +1345 + 8 +0 + 62 + 0 + 10 +6449.999995 + 20 +9206.698733 + 30 +0.0 + 11 +6462.499995 + 21 +9228.349368 + 31 +0.0 + 0 +LINE + 5 +1346 + 8 +0 + 62 + 0 + 10 +6453.811972 + 20 +9170.0 + 30 +0.0 + 11 +6462.499995 + 21 +9185.048098 + 31 +0.0 + 0 +LINE + 5 +1347 + 8 +0 + 62 + 0 + 10 +6487.499995 + 20 +9228.349368 + 30 +0.0 + 11 +6499.999993 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1348 + 8 +0 + 62 + 0 + 10 +6487.499995 + 20 +9185.048098 + 30 +0.0 + 11 +6499.999995 + 21 +9206.698733 + 31 +0.0 + 0 +LINE + 5 +1349 + 8 +0 + 62 + 0 + 10 +6524.999995 + 20 +9206.698733 + 30 +0.0 + 11 +6537.499995 + 21 +9228.349368 + 31 +0.0 + 0 +LINE + 5 +134A + 8 +0 + 62 + 0 + 10 +6528.811972 + 20 +9170.0 + 30 +0.0 + 11 +6537.499995 + 21 +9185.048098 + 31 +0.0 + 0 +LINE + 5 +134B + 8 +0 + 62 + 0 + 10 +6562.499995 + 20 +9228.349368 + 30 +0.0 + 11 +6574.999993 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +134C + 8 +0 + 62 + 0 + 10 +6562.499995 + 20 +9185.048098 + 30 +0.0 + 11 +6574.999995 + 21 +9206.698733 + 31 +0.0 + 0 +LINE + 5 +134D + 8 +0 + 62 + 0 + 10 +6599.999995 + 20 +9206.698733 + 30 +0.0 + 11 +6612.499995 + 21 +9228.349368 + 31 +0.0 + 0 +LINE + 5 +134E + 8 +0 + 62 + 0 + 10 +6603.811971 + 20 +9170.0 + 30 +0.0 + 11 +6612.499995 + 21 +9185.048098 + 31 +0.0 + 0 +LINE + 5 +134F + 8 +0 + 62 + 0 + 10 +6637.499995 + 20 +9228.349368 + 30 +0.0 + 11 +6649.999993 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1350 + 8 +0 + 62 + 0 + 10 +6637.499995 + 20 +9185.048098 + 30 +0.0 + 11 +6649.999995 + 21 +9206.698733 + 31 +0.0 + 0 +LINE + 5 +1351 + 8 +0 + 62 + 0 + 10 +6674.999994 + 20 +9206.698733 + 30 +0.0 + 11 +6687.499994 + 21 +9228.349368 + 31 +0.0 + 0 +LINE + 5 +1352 + 8 +0 + 62 + 0 + 10 +6678.811971 + 20 +9170.0 + 30 +0.0 + 11 +6687.499994 + 21 +9185.048098 + 31 +0.0 + 0 +LINE + 5 +1353 + 8 +0 + 62 + 0 + 10 +6712.499994 + 20 +9228.349368 + 30 +0.0 + 11 +6724.999992 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1354 + 8 +0 + 62 + 0 + 10 +6712.499994 + 20 +9185.048098 + 30 +0.0 + 11 +6724.999994 + 21 +9206.698733 + 31 +0.0 + 0 +LINE + 5 +1355 + 8 +0 + 62 + 0 + 10 +6749.999994 + 20 +9206.698733 + 30 +0.0 + 11 +6762.499994 + 21 +9228.349368 + 31 +0.0 + 0 +LINE + 5 +1356 + 8 +0 + 62 + 0 + 10 +6753.811971 + 20 +9170.0 + 30 +0.0 + 11 +6762.499994 + 21 +9185.048098 + 31 +0.0 + 0 +LINE + 5 +1357 + 8 +0 + 62 + 0 + 10 +6787.499994 + 20 +9228.349368 + 30 +0.0 + 11 +6799.999992 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1358 + 8 +0 + 62 + 0 + 10 +6787.499994 + 20 +9185.048098 + 30 +0.0 + 11 +6799.999994 + 21 +9206.698733 + 31 +0.0 + 0 +LINE + 5 +1359 + 8 +0 + 62 + 0 + 10 +6824.999994 + 20 +9206.698733 + 30 +0.0 + 11 +6837.499994 + 21 +9228.349368 + 31 +0.0 + 0 +LINE + 5 +135A + 8 +0 + 62 + 0 + 10 +6828.81197 + 20 +9170.0 + 30 +0.0 + 11 +6837.499994 + 21 +9185.048098 + 31 +0.0 + 0 +LINE + 5 +135B + 8 +0 + 62 + 0 + 10 +6862.499994 + 20 +9228.349368 + 30 +0.0 + 11 +6874.999992 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +135C + 8 +0 + 62 + 0 + 10 +6862.499994 + 20 +9185.048098 + 30 +0.0 + 11 +6874.999994 + 21 +9206.698733 + 31 +0.0 + 0 +LINE + 5 +135D + 8 +0 + 62 + 0 + 10 +6899.999994 + 20 +9206.698733 + 30 +0.0 + 11 +6912.499994 + 21 +9228.349369 + 31 +0.0 + 0 +LINE + 5 +135E + 8 +0 + 62 + 0 + 10 +6903.81197 + 20 +9170.0 + 30 +0.0 + 11 +6912.499994 + 21 +9185.048098 + 31 +0.0 + 0 +LINE + 5 +135F + 8 +0 + 62 + 0 + 10 +6937.499994 + 20 +9228.349369 + 30 +0.0 + 11 +6949.999991 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1360 + 8 +0 + 62 + 0 + 10 +6937.499994 + 20 +9185.048098 + 30 +0.0 + 11 +6949.999994 + 21 +9206.698734 + 31 +0.0 + 0 +LINE + 5 +1361 + 8 +0 + 62 + 0 + 10 +6974.999993 + 20 +9206.698734 + 30 +0.0 + 11 +6987.499993 + 21 +9228.349369 + 31 +0.0 + 0 +LINE + 5 +1362 + 8 +0 + 62 + 0 + 10 +6978.81197 + 20 +9170.0 + 30 +0.0 + 11 +6987.499993 + 21 +9185.048099 + 31 +0.0 + 0 +LINE + 5 +1363 + 8 +0 + 62 + 0 + 10 +7012.499993 + 20 +9228.349369 + 30 +0.0 + 11 +7024.999991 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1364 + 8 +0 + 62 + 0 + 10 +7012.499993 + 20 +9185.048099 + 30 +0.0 + 11 +7024.999993 + 21 +9206.698734 + 31 +0.0 + 0 +LINE + 5 +1365 + 8 +0 + 62 + 0 + 10 +7049.999993 + 20 +9206.698734 + 30 +0.0 + 11 +7062.499993 + 21 +9228.349369 + 31 +0.0 + 0 +LINE + 5 +1366 + 8 +0 + 62 + 0 + 10 +7053.811969 + 20 +9170.0 + 30 +0.0 + 11 +7062.499993 + 21 +9185.048099 + 31 +0.0 + 0 +LINE + 5 +1367 + 8 +0 + 62 + 0 + 10 +7087.499993 + 20 +9228.349369 + 30 +0.0 + 11 +7099.999991 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1368 + 8 +0 + 62 + 0 + 10 +7087.499993 + 20 +9185.048099 + 30 +0.0 + 11 +7099.999993 + 21 +9206.698734 + 31 +0.0 + 0 +LINE + 5 +1369 + 8 +0 + 62 + 0 + 10 +7124.999993 + 20 +9206.698734 + 30 +0.0 + 11 +7137.499993 + 21 +9228.349369 + 31 +0.0 + 0 +LINE + 5 +136A + 8 +0 + 62 + 0 + 10 +7128.811969 + 20 +9170.0 + 30 +0.0 + 11 +7137.499993 + 21 +9185.048099 + 31 +0.0 + 0 +LINE + 5 +136B + 8 +0 + 62 + 0 + 10 +7162.499993 + 20 +9228.349369 + 30 +0.0 + 11 +7174.99999 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +136C + 8 +0 + 62 + 0 + 10 +7162.499993 + 20 +9185.048099 + 30 +0.0 + 11 +7174.999993 + 21 +9206.698734 + 31 +0.0 + 0 +LINE + 5 +136D + 8 +0 + 62 + 0 + 10 +7199.999993 + 20 +9206.698734 + 30 +0.0 + 11 +7212.499993 + 21 +9228.349369 + 31 +0.0 + 0 +LINE + 5 +136E + 8 +0 + 62 + 0 + 10 +7203.811969 + 20 +9170.0 + 30 +0.0 + 11 +7212.499993 + 21 +9185.048099 + 31 +0.0 + 0 +LINE + 5 +136F + 8 +0 + 62 + 0 + 10 +7237.499993 + 20 +9228.349369 + 30 +0.0 + 11 +7249.99999 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1370 + 8 +0 + 62 + 0 + 10 +7237.499993 + 20 +9185.048099 + 30 +0.0 + 11 +7249.999993 + 21 +9206.698734 + 31 +0.0 + 0 +LINE + 5 +1371 + 8 +0 + 62 + 0 + 10 +7274.999992 + 20 +9206.698734 + 30 +0.0 + 11 +7287.499992 + 21 +9228.349369 + 31 +0.0 + 0 +LINE + 5 +1372 + 8 +0 + 62 + 0 + 10 +7278.811968 + 20 +9170.0 + 30 +0.0 + 11 +7287.499992 + 21 +9185.048099 + 31 +0.0 + 0 +LINE + 5 +1373 + 8 +0 + 62 + 0 + 10 +7312.499992 + 20 +9228.349369 + 30 +0.0 + 11 +7324.99999 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1374 + 8 +0 + 62 + 0 + 10 +7312.499992 + 20 +9185.048099 + 30 +0.0 + 11 +7324.999992 + 21 +9206.698734 + 31 +0.0 + 0 +LINE + 5 +1375 + 8 +0 + 62 + 0 + 10 +7349.999992 + 20 +9206.698734 + 30 +0.0 + 11 +7362.499992 + 21 +9228.349369 + 31 +0.0 + 0 +LINE + 5 +1376 + 8 +0 + 62 + 0 + 10 +7353.811968 + 20 +9170.0 + 30 +0.0 + 11 +7362.499992 + 21 +9185.048099 + 31 +0.0 + 0 +LINE + 5 +1377 + 8 +0 + 62 + 0 + 10 +7387.499992 + 20 +9228.349369 + 30 +0.0 + 11 +7399.99999 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1378 + 8 +0 + 62 + 0 + 10 +7387.499992 + 20 +9185.048099 + 30 +0.0 + 11 +7399.999992 + 21 +9206.698734 + 31 +0.0 + 0 +LINE + 5 +1379 + 8 +0 + 62 + 0 + 10 +7424.999992 + 20 +9206.698734 + 30 +0.0 + 11 +7437.499992 + 21 +9228.34937 + 31 +0.0 + 0 +LINE + 5 +137A + 8 +0 + 62 + 0 + 10 +7428.811968 + 20 +9170.0 + 30 +0.0 + 11 +7437.499992 + 21 +9185.048099 + 31 +0.0 + 0 +LINE + 5 +137B + 8 +0 + 62 + 0 + 10 +7462.499992 + 20 +9228.34937 + 30 +0.0 + 11 +7474.999989 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +137C + 8 +0 + 62 + 0 + 10 +7462.499992 + 20 +9185.048099 + 30 +0.0 + 11 +7474.999992 + 21 +9206.698735 + 31 +0.0 + 0 +LINE + 5 +137D + 8 +0 + 62 + 0 + 10 +7499.999992 + 20 +9206.698735 + 30 +0.0 + 11 +7512.499992 + 21 +9228.34937 + 31 +0.0 + 0 +LINE + 5 +137E + 8 +0 + 62 + 0 + 10 +7503.811967 + 20 +9170.0 + 30 +0.0 + 11 +7512.499992 + 21 +9185.0481 + 31 +0.0 + 0 +LINE + 5 +137F + 8 +0 + 62 + 0 + 10 +7537.499992 + 20 +9228.34937 + 30 +0.0 + 11 +7549.999989 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1380 + 8 +0 + 62 + 0 + 10 +7537.499992 + 20 +9185.0481 + 30 +0.0 + 11 +7549.999992 + 21 +9206.698735 + 31 +0.0 + 0 +LINE + 5 +1381 + 8 +0 + 62 + 0 + 10 +7574.999991 + 20 +9206.698735 + 30 +0.0 + 11 +7587.499991 + 21 +9228.34937 + 31 +0.0 + 0 +LINE + 5 +1382 + 8 +0 + 62 + 0 + 10 +7578.811967 + 20 +9170.0 + 30 +0.0 + 11 +7587.499991 + 21 +9185.0481 + 31 +0.0 + 0 +LINE + 5 +1383 + 8 +0 + 62 + 0 + 10 +7612.499991 + 20 +9228.34937 + 30 +0.0 + 11 +7624.999989 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1384 + 8 +0 + 62 + 0 + 10 +7612.499991 + 20 +9185.0481 + 30 +0.0 + 11 +7624.999991 + 21 +9206.698735 + 31 +0.0 + 0 +LINE + 5 +1385 + 8 +0 + 62 + 0 + 10 +7649.999991 + 20 +9206.698735 + 30 +0.0 + 11 +7662.499991 + 21 +9228.34937 + 31 +0.0 + 0 +LINE + 5 +1386 + 8 +0 + 62 + 0 + 10 +7653.811967 + 20 +9170.0 + 30 +0.0 + 11 +7662.499991 + 21 +9185.0481 + 31 +0.0 + 0 +LINE + 5 +1387 + 8 +0 + 62 + 0 + 10 +7687.499991 + 20 +9228.34937 + 30 +0.0 + 11 +7699.999988 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1388 + 8 +0 + 62 + 0 + 10 +7687.499991 + 20 +9185.0481 + 30 +0.0 + 11 +7699.999991 + 21 +9206.698735 + 31 +0.0 + 0 +LINE + 5 +1389 + 8 +0 + 62 + 0 + 10 +7724.999991 + 20 +9206.698735 + 30 +0.0 + 11 +7737.499991 + 21 +9228.34937 + 31 +0.0 + 0 +LINE + 5 +138A + 8 +0 + 62 + 0 + 10 +7728.811966 + 20 +9170.0 + 30 +0.0 + 11 +7737.499991 + 21 +9185.0481 + 31 +0.0 + 0 +ENDBLK + 5 +138B + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X45 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X45 + 1 + + 0 +LINE + 5 +138D + 8 +0 + 62 + 0 + 10 +8787.5 + 20 +9228.349365 + 30 +0.0 + 11 +8812.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +138E + 8 +0 + 62 + 0 + 10 +8862.5 + 20 +9228.349365 + 30 +0.0 + 11 +8887.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +138F + 8 +0 + 62 + 0 + 10 +8937.5 + 20 +9228.349365 + 30 +0.0 + 11 +8962.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1390 + 8 +0 + 62 + 0 + 10 +9012.5 + 20 +9228.349365 + 30 +0.0 + 11 +9037.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1391 + 8 +0 + 62 + 0 + 10 +9087.5 + 20 +9228.349365 + 30 +0.0 + 11 +9112.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1392 + 8 +0 + 62 + 0 + 10 +9162.5 + 20 +9228.349365 + 30 +0.0 + 11 +9187.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1393 + 8 +0 + 62 + 0 + 10 +9237.5 + 20 +9228.349365 + 30 +0.0 + 11 +9262.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1394 + 8 +0 + 62 + 0 + 10 +9312.5 + 20 +9228.349365 + 30 +0.0 + 11 +9337.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1395 + 8 +0 + 62 + 0 + 10 +9387.5 + 20 +9228.349365 + 30 +0.0 + 11 +9412.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1396 + 8 +0 + 62 + 0 + 10 +9462.5 + 20 +9228.349365 + 30 +0.0 + 11 +9487.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1397 + 8 +0 + 62 + 0 + 10 +9537.5 + 20 +9228.349365 + 30 +0.0 + 11 +9562.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1398 + 8 +0 + 62 + 0 + 10 +9612.5 + 20 +9228.349365 + 30 +0.0 + 11 +9637.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1399 + 8 +0 + 62 + 0 + 10 +9687.5 + 20 +9228.349365 + 30 +0.0 + 11 +9712.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +139A + 8 +0 + 62 + 0 + 10 +9762.5 + 20 +9228.349365 + 30 +0.0 + 11 +9787.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +139B + 8 +0 + 62 + 0 + 10 +9837.5 + 20 +9228.349365 + 30 +0.0 + 11 +9862.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +139C + 8 +0 + 62 + 0 + 10 +8750.0 + 20 +9206.69873 + 30 +0.0 + 11 +8775.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +139D + 8 +0 + 62 + 0 + 10 +8825.0 + 20 +9206.69873 + 30 +0.0 + 11 +8850.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +139E + 8 +0 + 62 + 0 + 10 +8900.0 + 20 +9206.69873 + 30 +0.0 + 11 +8925.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +139F + 8 +0 + 62 + 0 + 10 +8975.0 + 20 +9206.69873 + 30 +0.0 + 11 +9000.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +13A0 + 8 +0 + 62 + 0 + 10 +9050.0 + 20 +9206.69873 + 30 +0.0 + 11 +9075.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +13A1 + 8 +0 + 62 + 0 + 10 +9125.0 + 20 +9206.69873 + 30 +0.0 + 11 +9150.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +13A2 + 8 +0 + 62 + 0 + 10 +9200.0 + 20 +9206.69873 + 30 +0.0 + 11 +9225.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +13A3 + 8 +0 + 62 + 0 + 10 +9275.0 + 20 +9206.69873 + 30 +0.0 + 11 +9300.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +13A4 + 8 +0 + 62 + 0 + 10 +9350.0 + 20 +9206.69873 + 30 +0.0 + 11 +9375.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +13A5 + 8 +0 + 62 + 0 + 10 +9425.0 + 20 +9206.69873 + 30 +0.0 + 11 +9450.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +13A6 + 8 +0 + 62 + 0 + 10 +9500.0 + 20 +9206.69873 + 30 +0.0 + 11 +9525.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +13A7 + 8 +0 + 62 + 0 + 10 +9575.0 + 20 +9206.69873 + 30 +0.0 + 11 +9600.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +13A8 + 8 +0 + 62 + 0 + 10 +9650.0 + 20 +9206.69873 + 30 +0.0 + 11 +9675.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +13A9 + 8 +0 + 62 + 0 + 10 +9725.0 + 20 +9206.69873 + 30 +0.0 + 11 +9750.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +13AA + 8 +0 + 62 + 0 + 10 +9800.0 + 20 +9206.69873 + 30 +0.0 + 11 +9825.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +13AB + 8 +0 + 62 + 0 + 10 +9875.0 + 20 +9206.69873 + 30 +0.0 + 11 +9876.25 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +13AC + 8 +0 + 62 + 0 + 10 +8787.5 + 20 +9185.048095 + 30 +0.0 + 11 +8812.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +13AD + 8 +0 + 62 + 0 + 10 +8862.5 + 20 +9185.048095 + 30 +0.0 + 11 +8887.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +13AE + 8 +0 + 62 + 0 + 10 +8937.5 + 20 +9185.048095 + 30 +0.0 + 11 +8962.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +13AF + 8 +0 + 62 + 0 + 10 +9012.5 + 20 +9185.048095 + 30 +0.0 + 11 +9037.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +13B0 + 8 +0 + 62 + 0 + 10 +9087.5 + 20 +9185.048095 + 30 +0.0 + 11 +9112.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +13B1 + 8 +0 + 62 + 0 + 10 +9162.5 + 20 +9185.048095 + 30 +0.0 + 11 +9187.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +13B2 + 8 +0 + 62 + 0 + 10 +9237.5 + 20 +9185.048095 + 30 +0.0 + 11 +9262.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +13B3 + 8 +0 + 62 + 0 + 10 +9312.5 + 20 +9185.048095 + 30 +0.0 + 11 +9337.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +13B4 + 8 +0 + 62 + 0 + 10 +9387.5 + 20 +9185.048095 + 30 +0.0 + 11 +9412.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +13B5 + 8 +0 + 62 + 0 + 10 +9462.5 + 20 +9185.048095 + 30 +0.0 + 11 +9487.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +13B6 + 8 +0 + 62 + 0 + 10 +9537.5 + 20 +9185.048095 + 30 +0.0 + 11 +9562.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +13B7 + 8 +0 + 62 + 0 + 10 +9612.5 + 20 +9185.048095 + 30 +0.0 + 11 +9637.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +13B8 + 8 +0 + 62 + 0 + 10 +9687.5 + 20 +9185.048095 + 30 +0.0 + 11 +9712.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +13B9 + 8 +0 + 62 + 0 + 10 +9762.5 + 20 +9185.048095 + 30 +0.0 + 11 +9787.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +13BA + 8 +0 + 62 + 0 + 10 +9837.5 + 20 +9185.048095 + 30 +0.0 + 11 +9862.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +13BB + 8 +0 + 62 + 0 + 10 +9312.499986 + 20 +9185.048087 + 30 +0.0 + 11 +9299.999986 + 21 +9206.698722 + 31 +0.0 + 0 +LINE + 5 +13BC + 8 +0 + 62 + 0 + 10 +9274.999986 + 20 +9249.999992 + 30 +0.0 + 11 +9274.999981 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +13BD + 8 +0 + 62 + 0 + 10 +9274.999986 + 20 +9206.698722 + 30 +0.0 + 11 +9262.499986 + 21 +9228.349357 + 31 +0.0 + 0 +LINE + 5 +13BE + 8 +0 + 62 + 0 + 10 +9271.188003 + 20 +9170.0 + 30 +0.0 + 11 +9262.499986 + 21 +9185.048087 + 31 +0.0 + 0 +LINE + 5 +13BF + 8 +0 + 62 + 0 + 10 +9237.499986 + 20 +9228.349357 + 30 +0.0 + 11 +9224.999986 + 21 +9249.999992 + 31 +0.0 + 0 +LINE + 5 +13C0 + 8 +0 + 62 + 0 + 10 +9237.499986 + 20 +9185.048087 + 30 +0.0 + 11 +9224.999986 + 21 +9206.698722 + 31 +0.0 + 0 +LINE + 5 +13C1 + 8 +0 + 62 + 0 + 10 +9199.999986 + 20 +9249.999992 + 30 +0.0 + 11 +9199.999982 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +13C2 + 8 +0 + 62 + 0 + 10 +9199.999986 + 20 +9206.698722 + 30 +0.0 + 11 +9187.499986 + 21 +9228.349357 + 31 +0.0 + 0 +LINE + 5 +13C3 + 8 +0 + 62 + 0 + 10 +9196.188003 + 20 +9170.0 + 30 +0.0 + 11 +9187.499986 + 21 +9185.048087 + 31 +0.0 + 0 +LINE + 5 +13C4 + 8 +0 + 62 + 0 + 10 +9162.499986 + 20 +9228.349357 + 30 +0.0 + 11 +9149.999986 + 21 +9249.999992 + 31 +0.0 + 0 +LINE + 5 +13C5 + 8 +0 + 62 + 0 + 10 +9162.499986 + 20 +9185.048087 + 30 +0.0 + 11 +9149.999986 + 21 +9206.698722 + 31 +0.0 + 0 +LINE + 5 +13C6 + 8 +0 + 62 + 0 + 10 +9124.999986 + 20 +9249.999992 + 30 +0.0 + 11 +9124.999982 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +13C7 + 8 +0 + 62 + 0 + 10 +9124.999987 + 20 +9206.698722 + 30 +0.0 + 11 +9112.499987 + 21 +9228.349357 + 31 +0.0 + 0 +LINE + 5 +13C8 + 8 +0 + 62 + 0 + 10 +9121.188004 + 20 +9170.0 + 30 +0.0 + 11 +9112.499987 + 21 +9185.048087 + 31 +0.0 + 0 +LINE + 5 +13C9 + 8 +0 + 62 + 0 + 10 +9087.499987 + 20 +9228.349357 + 30 +0.0 + 11 +9074.999987 + 21 +9249.999992 + 31 +0.0 + 0 +LINE + 5 +13CA + 8 +0 + 62 + 0 + 10 +9087.499987 + 20 +9185.048087 + 30 +0.0 + 11 +9074.999987 + 21 +9206.698722 + 31 +0.0 + 0 +LINE + 5 +13CB + 8 +0 + 62 + 0 + 10 +9049.999987 + 20 +9249.999992 + 30 +0.0 + 11 +9049.999982 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +13CC + 8 +0 + 62 + 0 + 10 +9049.999987 + 20 +9206.698722 + 30 +0.0 + 11 +9037.499987 + 21 +9228.349357 + 31 +0.0 + 0 +LINE + 5 +13CD + 8 +0 + 62 + 0 + 10 +9046.188004 + 20 +9170.0 + 30 +0.0 + 11 +9037.499987 + 21 +9185.048087 + 31 +0.0 + 0 +LINE + 5 +13CE + 8 +0 + 62 + 0 + 10 +9012.499987 + 20 +9228.349357 + 30 +0.0 + 11 +8999.999987 + 21 +9249.999992 + 31 +0.0 + 0 +LINE + 5 +13CF + 8 +0 + 62 + 0 + 10 +9012.499987 + 20 +9185.048087 + 30 +0.0 + 11 +8999.999987 + 21 +9206.698722 + 31 +0.0 + 0 +LINE + 5 +13D0 + 8 +0 + 62 + 0 + 10 +8974.999987 + 20 +9249.999992 + 30 +0.0 + 11 +8974.999983 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +13D1 + 8 +0 + 62 + 0 + 10 +8974.999987 + 20 +9206.698722 + 30 +0.0 + 11 +8962.499987 + 21 +9228.349357 + 31 +0.0 + 0 +LINE + 5 +13D2 + 8 +0 + 62 + 0 + 10 +8971.188004 + 20 +9170.0 + 30 +0.0 + 11 +8962.499987 + 21 +9185.048087 + 31 +0.0 + 0 +LINE + 5 +13D3 + 8 +0 + 62 + 0 + 10 +8937.499987 + 20 +9228.349357 + 30 +0.0 + 11 +8924.999987 + 21 +9249.999993 + 31 +0.0 + 0 +LINE + 5 +13D4 + 8 +0 + 62 + 0 + 10 +8937.499987 + 20 +9185.048087 + 30 +0.0 + 11 +8924.999987 + 21 +9206.698722 + 31 +0.0 + 0 +LINE + 5 +13D5 + 8 +0 + 62 + 0 + 10 +8899.999987 + 20 +9249.999993 + 30 +0.0 + 11 +8899.999983 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +13D6 + 8 +0 + 62 + 0 + 10 +8899.999987 + 20 +9206.698722 + 30 +0.0 + 11 +8887.499987 + 21 +9228.349358 + 31 +0.0 + 0 +LINE + 5 +13D7 + 8 +0 + 62 + 0 + 10 +8896.188005 + 20 +9170.0 + 30 +0.0 + 11 +8887.499987 + 21 +9185.048087 + 31 +0.0 + 0 +LINE + 5 +13D8 + 8 +0 + 62 + 0 + 10 +8862.499987 + 20 +9228.349358 + 30 +0.0 + 11 +8849.999987 + 21 +9249.999993 + 31 +0.0 + 0 +LINE + 5 +13D9 + 8 +0 + 62 + 0 + 10 +8862.499987 + 20 +9185.048087 + 30 +0.0 + 11 +8849.999987 + 21 +9206.698723 + 31 +0.0 + 0 +LINE + 5 +13DA + 8 +0 + 62 + 0 + 10 +8824.999987 + 20 +9249.999993 + 30 +0.0 + 11 +8824.999983 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +13DB + 8 +0 + 62 + 0 + 10 +8824.999988 + 20 +9206.698723 + 30 +0.0 + 11 +8812.499988 + 21 +9228.349358 + 31 +0.0 + 0 +LINE + 5 +13DC + 8 +0 + 62 + 0 + 10 +8821.188005 + 20 +9170.0 + 30 +0.0 + 11 +8812.499988 + 21 +9185.048088 + 31 +0.0 + 0 +LINE + 5 +13DD + 8 +0 + 62 + 0 + 10 +8787.499988 + 20 +9228.349358 + 30 +0.0 + 11 +8774.999988 + 21 +9249.999993 + 31 +0.0 + 0 +LINE + 5 +13DE + 8 +0 + 62 + 0 + 10 +8787.499988 + 20 +9185.048088 + 30 +0.0 + 11 +8774.999988 + 21 +9206.698723 + 31 +0.0 + 0 +LINE + 5 +13DF + 8 +0 + 62 + 0 + 10 +8749.999988 + 20 +9249.999993 + 30 +0.0 + 11 +8749.999984 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +13E0 + 8 +0 + 62 + 0 + 10 +8749.999988 + 20 +9206.698723 + 30 +0.0 + 11 +8738.75 + 21 +9226.184273 + 31 +0.0 + 0 +LINE + 5 +13E1 + 8 +0 + 62 + 0 + 10 +8746.188005 + 20 +9170.0 + 30 +0.0 + 11 +8738.75 + 21 +9182.883003 + 31 +0.0 + 0 +LINE + 5 +13E2 + 8 +0 + 62 + 0 + 10 +9346.188003 + 20 +9170.0 + 30 +0.0 + 11 +9337.499986 + 21 +9185.048087 + 31 +0.0 + 0 +LINE + 5 +13E3 + 8 +0 + 62 + 0 + 10 +9312.499986 + 20 +9228.349357 + 30 +0.0 + 11 +9299.999986 + 21 +9249.999992 + 31 +0.0 + 0 +LINE + 5 +13E4 + 8 +0 + 62 + 0 + 10 +9349.999986 + 20 +9206.698722 + 30 +0.0 + 11 +9337.499986 + 21 +9228.349357 + 31 +0.0 + 0 +LINE + 5 +13E5 + 8 +0 + 62 + 0 + 10 +9387.499986 + 20 +9185.048086 + 30 +0.0 + 11 +9374.999986 + 21 +9206.698722 + 31 +0.0 + 0 +LINE + 5 +13E6 + 8 +0 + 62 + 0 + 10 +9349.999986 + 20 +9249.999992 + 30 +0.0 + 11 +9349.999981 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +13E7 + 8 +0 + 62 + 0 + 10 +9421.188002 + 20 +9170.0 + 30 +0.0 + 11 +9412.499986 + 21 +9185.048086 + 31 +0.0 + 0 +LINE + 5 +13E8 + 8 +0 + 62 + 0 + 10 +9387.499986 + 20 +9228.349357 + 30 +0.0 + 11 +9374.999986 + 21 +9249.999992 + 31 +0.0 + 0 +LINE + 5 +13E9 + 8 +0 + 62 + 0 + 10 +9424.999986 + 20 +9206.698721 + 30 +0.0 + 11 +9412.499986 + 21 +9228.349357 + 31 +0.0 + 0 +LINE + 5 +13EA + 8 +0 + 62 + 0 + 10 +9462.499985 + 20 +9185.048086 + 30 +0.0 + 11 +9449.999985 + 21 +9206.698721 + 31 +0.0 + 0 +LINE + 5 +13EB + 8 +0 + 62 + 0 + 10 +9424.999985 + 20 +9249.999992 + 30 +0.0 + 11 +9424.999981 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +13EC + 8 +0 + 62 + 0 + 10 +9496.188002 + 20 +9170.0 + 30 +0.0 + 11 +9487.499985 + 21 +9185.048086 + 31 +0.0 + 0 +LINE + 5 +13ED + 8 +0 + 62 + 0 + 10 +9462.499985 + 20 +9228.349356 + 30 +0.0 + 11 +9449.999985 + 21 +9249.999992 + 31 +0.0 + 0 +LINE + 5 +13EE + 8 +0 + 62 + 0 + 10 +9499.999985 + 20 +9206.698721 + 30 +0.0 + 11 +9487.499985 + 21 +9228.349356 + 31 +0.0 + 0 +LINE + 5 +13EF + 8 +0 + 62 + 0 + 10 +9537.499985 + 20 +9185.048086 + 30 +0.0 + 11 +9524.999985 + 21 +9206.698721 + 31 +0.0 + 0 +LINE + 5 +13F0 + 8 +0 + 62 + 0 + 10 +9499.999985 + 20 +9249.999991 + 30 +0.0 + 11 +9499.99998 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +13F1 + 8 +0 + 62 + 0 + 10 +9571.188002 + 20 +9170.0 + 30 +0.0 + 11 +9562.499985 + 21 +9185.048086 + 31 +0.0 + 0 +LINE + 5 +13F2 + 8 +0 + 62 + 0 + 10 +9537.499985 + 20 +9228.349356 + 30 +0.0 + 11 +9524.999985 + 21 +9249.999991 + 31 +0.0 + 0 +LINE + 5 +13F3 + 8 +0 + 62 + 0 + 10 +9574.999985 + 20 +9206.698721 + 30 +0.0 + 11 +9562.499985 + 21 +9228.349356 + 31 +0.0 + 0 +LINE + 5 +13F4 + 8 +0 + 62 + 0 + 10 +9612.499985 + 20 +9185.048086 + 30 +0.0 + 11 +9599.999985 + 21 +9206.698721 + 31 +0.0 + 0 +LINE + 5 +13F5 + 8 +0 + 62 + 0 + 10 +9574.999985 + 20 +9249.999991 + 30 +0.0 + 11 +9574.99998 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +13F6 + 8 +0 + 62 + 0 + 10 +9646.188001 + 20 +9170.0 + 30 +0.0 + 11 +9637.499985 + 21 +9185.048086 + 31 +0.0 + 0 +LINE + 5 +13F7 + 8 +0 + 62 + 0 + 10 +9612.499985 + 20 +9228.349356 + 30 +0.0 + 11 +9599.999985 + 21 +9249.999991 + 31 +0.0 + 0 +LINE + 5 +13F8 + 8 +0 + 62 + 0 + 10 +9649.999985 + 20 +9206.698721 + 30 +0.0 + 11 +9637.499985 + 21 +9228.349356 + 31 +0.0 + 0 +LINE + 5 +13F9 + 8 +0 + 62 + 0 + 10 +9687.499985 + 20 +9185.048086 + 30 +0.0 + 11 +9674.999985 + 21 +9206.698721 + 31 +0.0 + 0 +LINE + 5 +13FA + 8 +0 + 62 + 0 + 10 +9649.999985 + 20 +9249.999991 + 30 +0.0 + 11 +9649.99998 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +13FB + 8 +0 + 62 + 0 + 10 +9721.188001 + 20 +9170.0 + 30 +0.0 + 11 +9712.499985 + 21 +9185.048086 + 31 +0.0 + 0 +LINE + 5 +13FC + 8 +0 + 62 + 0 + 10 +9687.499985 + 20 +9228.349356 + 30 +0.0 + 11 +9674.999985 + 21 +9249.999991 + 31 +0.0 + 0 +LINE + 5 +13FD + 8 +0 + 62 + 0 + 10 +9724.999985 + 20 +9206.698721 + 30 +0.0 + 11 +9712.499985 + 21 +9228.349356 + 31 +0.0 + 0 +LINE + 5 +13FE + 8 +0 + 62 + 0 + 10 +9762.499985 + 20 +9185.048086 + 30 +0.0 + 11 +9749.999985 + 21 +9206.698721 + 31 +0.0 + 0 +LINE + 5 +13FF + 8 +0 + 62 + 0 + 10 +9724.999985 + 20 +9249.999991 + 30 +0.0 + 11 +9724.999979 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1400 + 8 +0 + 62 + 0 + 10 +9796.188001 + 20 +9170.0 + 30 +0.0 + 11 +9787.499984 + 21 +9185.048086 + 31 +0.0 + 0 +LINE + 5 +1401 + 8 +0 + 62 + 0 + 10 +9762.499984 + 20 +9228.349356 + 30 +0.0 + 11 +9749.999984 + 21 +9249.999991 + 31 +0.0 + 0 +LINE + 5 +1402 + 8 +0 + 62 + 0 + 10 +9799.999984 + 20 +9206.698721 + 30 +0.0 + 11 +9787.499984 + 21 +9228.349356 + 31 +0.0 + 0 +LINE + 5 +1403 + 8 +0 + 62 + 0 + 10 +9837.499984 + 20 +9185.048086 + 30 +0.0 + 11 +9824.999984 + 21 +9206.698721 + 31 +0.0 + 0 +LINE + 5 +1404 + 8 +0 + 62 + 0 + 10 +9799.999984 + 20 +9249.999991 + 30 +0.0 + 11 +9799.999979 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1405 + 8 +0 + 62 + 0 + 10 +9871.188 + 20 +9170.0 + 30 +0.0 + 11 +9862.499984 + 21 +9185.048086 + 31 +0.0 + 0 +LINE + 5 +1406 + 8 +0 + 62 + 0 + 10 +9837.499984 + 20 +9228.349356 + 30 +0.0 + 11 +9824.999984 + 21 +9249.999991 + 31 +0.0 + 0 +LINE + 5 +1407 + 8 +0 + 62 + 0 + 10 +9874.999984 + 20 +9206.698721 + 30 +0.0 + 11 +9862.499984 + 21 +9228.349356 + 31 +0.0 + 0 +LINE + 5 +1408 + 8 +0 + 62 + 0 + 10 +9874.999984 + 20 +9249.999991 + 30 +0.0 + 11 +9874.999979 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1409 + 8 +0 + 62 + 0 + 10 +9299.999986 + 20 +9206.698738 + 30 +0.0 + 11 +9312.499986 + 21 +9228.349373 + 31 +0.0 + 0 +LINE + 5 +140A + 8 +0 + 62 + 0 + 10 +9262.499986 + 20 +9185.048103 + 30 +0.0 + 11 +9274.999986 + 21 +9206.698738 + 31 +0.0 + 0 +LINE + 5 +140B + 8 +0 + 62 + 0 + 10 +9228.81196 + 20 +9170.0 + 30 +0.0 + 11 +9237.499986 + 21 +9185.048103 + 31 +0.0 + 0 +LINE + 5 +140C + 8 +0 + 62 + 0 + 10 +9262.499986 + 20 +9228.349373 + 30 +0.0 + 11 +9274.999981 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +140D + 8 +0 + 62 + 0 + 10 +9224.999986 + 20 +9206.698738 + 30 +0.0 + 11 +9237.499986 + 21 +9228.349373 + 31 +0.0 + 0 +LINE + 5 +140E + 8 +0 + 62 + 0 + 10 +9187.499986 + 20 +9185.048103 + 30 +0.0 + 11 +9199.999986 + 21 +9206.698738 + 31 +0.0 + 0 +LINE + 5 +140F + 8 +0 + 62 + 0 + 10 +9153.81196 + 20 +9170.0 + 30 +0.0 + 11 +9162.499986 + 21 +9185.048103 + 31 +0.0 + 0 +LINE + 5 +1410 + 8 +0 + 62 + 0 + 10 +9187.499986 + 20 +9228.349373 + 30 +0.0 + 11 +9199.999982 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1411 + 8 +0 + 62 + 0 + 10 +9149.999986 + 20 +9206.698738 + 30 +0.0 + 11 +9162.499986 + 21 +9228.349373 + 31 +0.0 + 0 +LINE + 5 +1412 + 8 +0 + 62 + 0 + 10 +9112.499986 + 20 +9185.048103 + 30 +0.0 + 11 +9124.999986 + 21 +9206.698738 + 31 +0.0 + 0 +LINE + 5 +1413 + 8 +0 + 62 + 0 + 10 +9078.81196 + 20 +9170.0 + 30 +0.0 + 11 +9087.499986 + 21 +9185.048103 + 31 +0.0 + 0 +LINE + 5 +1414 + 8 +0 + 62 + 0 + 10 +9112.499986 + 20 +9228.349373 + 30 +0.0 + 11 +9124.999982 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1415 + 8 +0 + 62 + 0 + 10 +9074.999987 + 20 +9206.698738 + 30 +0.0 + 11 +9087.499987 + 21 +9228.349373 + 31 +0.0 + 0 +LINE + 5 +1416 + 8 +0 + 62 + 0 + 10 +9037.499987 + 20 +9185.048102 + 30 +0.0 + 11 +9049.999987 + 21 +9206.698738 + 31 +0.0 + 0 +LINE + 5 +1417 + 8 +0 + 62 + 0 + 10 +9003.811961 + 20 +9170.0 + 30 +0.0 + 11 +9012.499987 + 21 +9185.048102 + 31 +0.0 + 0 +LINE + 5 +1418 + 8 +0 + 62 + 0 + 10 +9037.499987 + 20 +9228.349373 + 30 +0.0 + 11 +9049.999982 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1419 + 8 +0 + 62 + 0 + 10 +8999.999987 + 20 +9206.698737 + 30 +0.0 + 11 +9012.499987 + 21 +9228.349373 + 31 +0.0 + 0 +LINE + 5 +141A + 8 +0 + 62 + 0 + 10 +8962.499987 + 20 +9185.048102 + 30 +0.0 + 11 +8974.999987 + 21 +9206.698737 + 31 +0.0 + 0 +LINE + 5 +141B + 8 +0 + 62 + 0 + 10 +8928.811961 + 20 +9170.0 + 30 +0.0 + 11 +8937.499987 + 21 +9185.048102 + 31 +0.0 + 0 +LINE + 5 +141C + 8 +0 + 62 + 0 + 10 +8962.499987 + 20 +9228.349372 + 30 +0.0 + 11 +8974.999983 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +141D + 8 +0 + 62 + 0 + 10 +8924.999987 + 20 +9206.698737 + 30 +0.0 + 11 +8937.499987 + 21 +9228.349372 + 31 +0.0 + 0 +LINE + 5 +141E + 8 +0 + 62 + 0 + 10 +8887.499987 + 20 +9185.048102 + 30 +0.0 + 11 +8899.999987 + 21 +9206.698737 + 31 +0.0 + 0 +LINE + 5 +141F + 8 +0 + 62 + 0 + 10 +8853.811961 + 20 +9170.0 + 30 +0.0 + 11 +8862.499987 + 21 +9185.048102 + 31 +0.0 + 0 +LINE + 5 +1420 + 8 +0 + 62 + 0 + 10 +8887.499987 + 20 +9228.349372 + 30 +0.0 + 11 +8899.999983 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1421 + 8 +0 + 62 + 0 + 10 +8849.999987 + 20 +9206.698737 + 30 +0.0 + 11 +8862.499987 + 21 +9228.349372 + 31 +0.0 + 0 +LINE + 5 +1422 + 8 +0 + 62 + 0 + 10 +8812.499987 + 20 +9185.048102 + 30 +0.0 + 11 +8824.999987 + 21 +9206.698737 + 31 +0.0 + 0 +LINE + 5 +1423 + 8 +0 + 62 + 0 + 10 +8778.811962 + 20 +9170.0 + 30 +0.0 + 11 +8787.499987 + 21 +9185.048102 + 31 +0.0 + 0 +LINE + 5 +1424 + 8 +0 + 62 + 0 + 10 +8812.499987 + 20 +9228.349372 + 30 +0.0 + 11 +8824.999983 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1425 + 8 +0 + 62 + 0 + 10 +8774.999988 + 20 +9206.698737 + 30 +0.0 + 11 +8787.499988 + 21 +9228.349372 + 31 +0.0 + 0 +LINE + 5 +1426 + 8 +0 + 62 + 0 + 10 +8738.75 + 20 +9187.213187 + 30 +0.0 + 11 +8749.999988 + 21 +9206.698737 + 31 +0.0 + 0 +LINE + 5 +1427 + 8 +0 + 62 + 0 + 10 +8738.75 + 20 +9230.514457 + 30 +0.0 + 11 +8749.999984 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1428 + 8 +0 + 62 + 0 + 10 +9303.811959 + 20 +9170.0 + 30 +0.0 + 11 +9312.499986 + 21 +9185.048103 + 31 +0.0 + 0 +LINE + 5 +1429 + 8 +0 + 62 + 0 + 10 +9337.499986 + 20 +9228.349373 + 30 +0.0 + 11 +9349.999981 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +142A + 8 +0 + 62 + 0 + 10 +9337.499986 + 20 +9185.048103 + 30 +0.0 + 11 +9349.999986 + 21 +9206.698738 + 31 +0.0 + 0 +LINE + 5 +142B + 8 +0 + 62 + 0 + 10 +9374.999986 + 20 +9206.698738 + 30 +0.0 + 11 +9387.499986 + 21 +9228.349373 + 31 +0.0 + 0 +LINE + 5 +142C + 8 +0 + 62 + 0 + 10 +9378.811959 + 20 +9170.0 + 30 +0.0 + 11 +9387.499985 + 21 +9185.048103 + 31 +0.0 + 0 +LINE + 5 +142D + 8 +0 + 62 + 0 + 10 +9412.499985 + 20 +9228.349373 + 30 +0.0 + 11 +9424.999981 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +142E + 8 +0 + 62 + 0 + 10 +9412.499985 + 20 +9185.048103 + 30 +0.0 + 11 +9424.999985 + 21 +9206.698738 + 31 +0.0 + 0 +LINE + 5 +142F + 8 +0 + 62 + 0 + 10 +9449.999985 + 20 +9206.698738 + 30 +0.0 + 11 +9462.499985 + 21 +9228.349373 + 31 +0.0 + 0 +LINE + 5 +1430 + 8 +0 + 62 + 0 + 10 +9453.811959 + 20 +9170.0 + 30 +0.0 + 11 +9462.499985 + 21 +9185.048103 + 31 +0.0 + 0 +LINE + 5 +1431 + 8 +0 + 62 + 0 + 10 +9487.499985 + 20 +9228.349373 + 30 +0.0 + 11 +9499.99998 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1432 + 8 +0 + 62 + 0 + 10 +9487.499985 + 20 +9185.048103 + 30 +0.0 + 11 +9499.999985 + 21 +9206.698738 + 31 +0.0 + 0 +LINE + 5 +1433 + 8 +0 + 62 + 0 + 10 +9524.999985 + 20 +9206.698738 + 30 +0.0 + 11 +9537.499985 + 21 +9228.349374 + 31 +0.0 + 0 +LINE + 5 +1434 + 8 +0 + 62 + 0 + 10 +9528.811958 + 20 +9170.0 + 30 +0.0 + 11 +9537.499985 + 21 +9185.048103 + 31 +0.0 + 0 +LINE + 5 +1435 + 8 +0 + 62 + 0 + 10 +9562.499985 + 20 +9228.349374 + 30 +0.0 + 11 +9574.99998 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1436 + 8 +0 + 62 + 0 + 10 +9562.499985 + 20 +9185.048103 + 30 +0.0 + 11 +9574.999985 + 21 +9206.698739 + 31 +0.0 + 0 +LINE + 5 +1437 + 8 +0 + 62 + 0 + 10 +9599.999985 + 20 +9206.698739 + 30 +0.0 + 11 +9612.499985 + 21 +9228.349374 + 31 +0.0 + 0 +LINE + 5 +1438 + 8 +0 + 62 + 0 + 10 +9603.811958 + 20 +9170.0 + 30 +0.0 + 11 +9612.499985 + 21 +9185.048104 + 31 +0.0 + 0 +LINE + 5 +1439 + 8 +0 + 62 + 0 + 10 +9637.499985 + 20 +9228.349374 + 30 +0.0 + 11 +9649.99998 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +143A + 8 +0 + 62 + 0 + 10 +9637.499985 + 20 +9185.048104 + 30 +0.0 + 11 +9649.999985 + 21 +9206.698739 + 31 +0.0 + 0 +LINE + 5 +143B + 8 +0 + 62 + 0 + 10 +9674.999985 + 20 +9206.698739 + 30 +0.0 + 11 +9687.499985 + 21 +9228.349374 + 31 +0.0 + 0 +LINE + 5 +143C + 8 +0 + 62 + 0 + 10 +9678.811958 + 20 +9170.0 + 30 +0.0 + 11 +9687.499985 + 21 +9185.048104 + 31 +0.0 + 0 +LINE + 5 +143D + 8 +0 + 62 + 0 + 10 +9712.499985 + 20 +9228.349374 + 30 +0.0 + 11 +9724.999979 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +143E + 8 +0 + 62 + 0 + 10 +9712.499984 + 20 +9185.048104 + 30 +0.0 + 11 +9724.999984 + 21 +9206.698739 + 31 +0.0 + 0 +LINE + 5 +143F + 8 +0 + 62 + 0 + 10 +9749.999984 + 20 +9206.698739 + 30 +0.0 + 11 +9762.499984 + 21 +9228.349374 + 31 +0.0 + 0 +LINE + 5 +1440 + 8 +0 + 62 + 0 + 10 +9753.811957 + 20 +9170.0 + 30 +0.0 + 11 +9762.499984 + 21 +9185.048104 + 31 +0.0 + 0 +LINE + 5 +1441 + 8 +0 + 62 + 0 + 10 +9787.499984 + 20 +9228.349374 + 30 +0.0 + 11 +9799.999979 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1442 + 8 +0 + 62 + 0 + 10 +9787.499984 + 20 +9185.048104 + 30 +0.0 + 11 +9799.999984 + 21 +9206.698739 + 31 +0.0 + 0 +LINE + 5 +1443 + 8 +0 + 62 + 0 + 10 +9824.999984 + 20 +9206.698739 + 30 +0.0 + 11 +9837.499984 + 21 +9228.349374 + 31 +0.0 + 0 +LINE + 5 +1444 + 8 +0 + 62 + 0 + 10 +9828.811957 + 20 +9170.0 + 30 +0.0 + 11 +9837.499984 + 21 +9185.048104 + 31 +0.0 + 0 +LINE + 5 +1445 + 8 +0 + 62 + 0 + 10 +9862.499984 + 20 +9228.349374 + 30 +0.0 + 11 +9874.999979 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1446 + 8 +0 + 62 + 0 + 10 +9862.499984 + 20 +9185.048104 + 30 +0.0 + 11 +9874.999984 + 21 +9206.698739 + 31 +0.0 + 0 +ENDBLK + 5 +1447 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X46 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X46 + 1 + + 0 +LINE + 5 +1449 + 8 +0 + 62 + 0 + 10 +11262.5 + 20 +9228.349365 + 30 +0.0 + 11 +11287.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +144A + 8 +0 + 62 + 0 + 10 +11337.5 + 20 +9228.349365 + 30 +0.0 + 11 +11362.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +144B + 8 +0 + 62 + 0 + 10 +11412.5 + 20 +9228.349365 + 30 +0.0 + 11 +11437.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +144C + 8 +0 + 62 + 0 + 10 +11487.5 + 20 +9228.349365 + 30 +0.0 + 11 +11512.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +144D + 8 +0 + 62 + 0 + 10 +11562.5 + 20 +9228.349365 + 30 +0.0 + 11 +11587.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +144E + 8 +0 + 62 + 0 + 10 +11637.5 + 20 +9228.349365 + 30 +0.0 + 11 +11662.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +144F + 8 +0 + 62 + 0 + 10 +11712.5 + 20 +9228.349365 + 30 +0.0 + 11 +11737.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1450 + 8 +0 + 62 + 0 + 10 +11787.5 + 20 +9228.349365 + 30 +0.0 + 11 +11812.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1451 + 8 +0 + 62 + 0 + 10 +11862.5 + 20 +9228.349365 + 30 +0.0 + 11 +11887.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1452 + 8 +0 + 62 + 0 + 10 +11937.5 + 20 +9228.349365 + 30 +0.0 + 11 +11962.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1453 + 8 +0 + 62 + 0 + 10 +12012.5 + 20 +9228.349365 + 30 +0.0 + 11 +12037.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1454 + 8 +0 + 62 + 0 + 10 +12087.5 + 20 +9228.349365 + 30 +0.0 + 11 +12112.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1455 + 8 +0 + 62 + 0 + 10 +12162.5 + 20 +9228.349365 + 30 +0.0 + 11 +12187.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1456 + 8 +0 + 62 + 0 + 10 +12237.5 + 20 +9228.349365 + 30 +0.0 + 11 +12262.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1457 + 8 +0 + 62 + 0 + 10 +12312.5 + 20 +9228.349365 + 30 +0.0 + 11 +12337.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1458 + 8 +0 + 62 + 0 + 10 +12387.5 + 20 +9228.349365 + 30 +0.0 + 11 +12412.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1459 + 8 +0 + 62 + 0 + 10 +12462.5 + 20 +9228.349365 + 30 +0.0 + 11 +12487.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +145A + 8 +0 + 62 + 0 + 10 +12537.5 + 20 +9228.349365 + 30 +0.0 + 11 +12562.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +145B + 8 +0 + 62 + 0 + 10 +12612.5 + 20 +9228.349365 + 30 +0.0 + 11 +12637.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +145C + 8 +0 + 62 + 0 + 10 +12687.5 + 20 +9228.349365 + 30 +0.0 + 11 +12712.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +145D + 8 +0 + 62 + 0 + 10 +12762.5 + 20 +9228.349365 + 30 +0.0 + 11 +12787.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +145E + 8 +0 + 62 + 0 + 10 +12837.5 + 20 +9228.349365 + 30 +0.0 + 11 +12862.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +145F + 8 +0 + 62 + 0 + 10 +12912.5 + 20 +9228.349365 + 30 +0.0 + 11 +12937.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1460 + 8 +0 + 62 + 0 + 10 +12987.5 + 20 +9228.349365 + 30 +0.0 + 11 +13012.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1461 + 8 +0 + 62 + 0 + 10 +13062.5 + 20 +9228.349365 + 30 +0.0 + 11 +13087.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1462 + 8 +0 + 62 + 0 + 10 +13137.5 + 20 +9228.349365 + 30 +0.0 + 11 +13162.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1463 + 8 +0 + 62 + 0 + 10 +13212.5 + 20 +9228.349365 + 30 +0.0 + 11 +13237.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1464 + 8 +0 + 62 + 0 + 10 +13287.5 + 20 +9228.349365 + 30 +0.0 + 11 +13312.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1465 + 8 +0 + 62 + 0 + 10 +13362.5 + 20 +9228.349365 + 30 +0.0 + 11 +13387.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1466 + 8 +0 + 62 + 0 + 10 +13437.5 + 20 +9228.349365 + 30 +0.0 + 11 +13462.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1467 + 8 +0 + 62 + 0 + 10 +13512.5 + 20 +9228.349365 + 30 +0.0 + 11 +13537.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1468 + 8 +0 + 62 + 0 + 10 +13587.5 + 20 +9228.349365 + 30 +0.0 + 11 +13612.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1469 + 8 +0 + 62 + 0 + 10 +13662.5 + 20 +9228.349365 + 30 +0.0 + 11 +13687.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +146A + 8 +0 + 62 + 0 + 10 +13737.5 + 20 +9228.349365 + 30 +0.0 + 11 +13762.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +146B + 8 +0 + 62 + 0 + 10 +13812.5 + 20 +9228.349365 + 30 +0.0 + 11 +13837.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +146C + 8 +0 + 62 + 0 + 10 +13887.5 + 20 +9228.349365 + 30 +0.0 + 11 +13912.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +146D + 8 +0 + 62 + 0 + 10 +13962.5 + 20 +9228.349365 + 30 +0.0 + 11 +13987.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +146E + 8 +0 + 62 + 0 + 10 +14037.5 + 20 +9228.349365 + 30 +0.0 + 11 +14062.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +146F + 8 +0 + 62 + 0 + 10 +14112.5 + 20 +9228.349365 + 30 +0.0 + 11 +14137.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1470 + 8 +0 + 62 + 0 + 10 +14187.5 + 20 +9228.349365 + 30 +0.0 + 11 +14212.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1471 + 8 +0 + 62 + 0 + 10 +14262.5 + 20 +9228.349365 + 30 +0.0 + 11 +14287.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1472 + 8 +0 + 62 + 0 + 10 +14337.5 + 20 +9228.349365 + 30 +0.0 + 11 +14362.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1473 + 8 +0 + 62 + 0 + 10 +14412.5 + 20 +9228.349365 + 30 +0.0 + 11 +14437.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1474 + 8 +0 + 62 + 0 + 10 +14487.5 + 20 +9228.349365 + 30 +0.0 + 11 +14512.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1475 + 8 +0 + 62 + 0 + 10 +14562.5 + 20 +9228.349365 + 30 +0.0 + 11 +14587.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1476 + 8 +0 + 62 + 0 + 10 +14637.5 + 20 +9228.349365 + 30 +0.0 + 11 +14662.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1477 + 8 +0 + 62 + 0 + 10 +14712.5 + 20 +9228.349365 + 30 +0.0 + 11 +14737.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1478 + 8 +0 + 62 + 0 + 10 +14787.5 + 20 +9228.349365 + 30 +0.0 + 11 +14812.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1479 + 8 +0 + 62 + 0 + 10 +14862.5 + 20 +9228.349365 + 30 +0.0 + 11 +14887.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +147A + 8 +0 + 62 + 0 + 10 +14937.5 + 20 +9228.349365 + 30 +0.0 + 11 +14962.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +147B + 8 +0 + 62 + 0 + 10 +15012.5 + 20 +9228.349365 + 30 +0.0 + 11 +15037.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +147C + 8 +0 + 62 + 0 + 10 +15087.5 + 20 +9228.349365 + 30 +0.0 + 11 +15112.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +147D + 8 +0 + 62 + 0 + 10 +15162.5 + 20 +9228.349365 + 30 +0.0 + 11 +15187.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +147E + 8 +0 + 62 + 0 + 10 +15237.5 + 20 +9228.349365 + 30 +0.0 + 11 +15262.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +147F + 8 +0 + 62 + 0 + 10 +15312.5 + 20 +9228.349365 + 30 +0.0 + 11 +15337.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1480 + 8 +0 + 62 + 0 + 10 +15387.5 + 20 +9228.349365 + 30 +0.0 + 11 +15412.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1481 + 8 +0 + 62 + 0 + 10 +15462.5 + 20 +9228.349365 + 30 +0.0 + 11 +15487.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1482 + 8 +0 + 62 + 0 + 10 +15537.5 + 20 +9228.349365 + 30 +0.0 + 11 +15562.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1483 + 8 +0 + 62 + 0 + 10 +15612.5 + 20 +9228.349365 + 30 +0.0 + 11 +15637.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1484 + 8 +0 + 62 + 0 + 10 +15687.5 + 20 +9228.349365 + 30 +0.0 + 11 +15712.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1485 + 8 +0 + 62 + 0 + 10 +15762.5 + 20 +9228.349365 + 30 +0.0 + 11 +15787.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1486 + 8 +0 + 62 + 0 + 10 +15837.5 + 20 +9228.349365 + 30 +0.0 + 11 +15862.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1487 + 8 +0 + 62 + 0 + 10 +15912.5 + 20 +9228.349365 + 30 +0.0 + 11 +15937.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1488 + 8 +0 + 62 + 0 + 10 +15987.5 + 20 +9228.349365 + 30 +0.0 + 11 +16012.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1489 + 8 +0 + 62 + 0 + 10 +16062.5 + 20 +9228.349365 + 30 +0.0 + 11 +16087.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +148A + 8 +0 + 62 + 0 + 10 +11238.75 + 20 +9206.69873 + 30 +0.0 + 11 +11250.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +148B + 8 +0 + 62 + 0 + 10 +11300.0 + 20 +9206.69873 + 30 +0.0 + 11 +11325.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +148C + 8 +0 + 62 + 0 + 10 +11375.0 + 20 +9206.69873 + 30 +0.0 + 11 +11400.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +148D + 8 +0 + 62 + 0 + 10 +11450.0 + 20 +9206.69873 + 30 +0.0 + 11 +11475.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +148E + 8 +0 + 62 + 0 + 10 +11525.0 + 20 +9206.69873 + 30 +0.0 + 11 +11550.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +148F + 8 +0 + 62 + 0 + 10 +11600.0 + 20 +9206.69873 + 30 +0.0 + 11 +11625.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +1490 + 8 +0 + 62 + 0 + 10 +11675.0 + 20 +9206.69873 + 30 +0.0 + 11 +11700.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +1491 + 8 +0 + 62 + 0 + 10 +11750.0 + 20 +9206.69873 + 30 +0.0 + 11 +11775.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +1492 + 8 +0 + 62 + 0 + 10 +11825.0 + 20 +9206.69873 + 30 +0.0 + 11 +11850.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +1493 + 8 +0 + 62 + 0 + 10 +11900.0 + 20 +9206.69873 + 30 +0.0 + 11 +11925.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +1494 + 8 +0 + 62 + 0 + 10 +11975.0 + 20 +9206.69873 + 30 +0.0 + 11 +12000.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +1495 + 8 +0 + 62 + 0 + 10 +12050.0 + 20 +9206.69873 + 30 +0.0 + 11 +12075.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +1496 + 8 +0 + 62 + 0 + 10 +12125.0 + 20 +9206.69873 + 30 +0.0 + 11 +12150.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +1497 + 8 +0 + 62 + 0 + 10 +12200.0 + 20 +9206.69873 + 30 +0.0 + 11 +12225.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +1498 + 8 +0 + 62 + 0 + 10 +12275.0 + 20 +9206.69873 + 30 +0.0 + 11 +12300.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +1499 + 8 +0 + 62 + 0 + 10 +12350.0 + 20 +9206.69873 + 30 +0.0 + 11 +12375.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +149A + 8 +0 + 62 + 0 + 10 +12425.0 + 20 +9206.69873 + 30 +0.0 + 11 +12450.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +149B + 8 +0 + 62 + 0 + 10 +12500.0 + 20 +9206.69873 + 30 +0.0 + 11 +12525.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +149C + 8 +0 + 62 + 0 + 10 +12575.0 + 20 +9206.69873 + 30 +0.0 + 11 +12600.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +149D + 8 +0 + 62 + 0 + 10 +12650.0 + 20 +9206.69873 + 30 +0.0 + 11 +12675.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +149E + 8 +0 + 62 + 0 + 10 +12725.0 + 20 +9206.69873 + 30 +0.0 + 11 +12750.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +149F + 8 +0 + 62 + 0 + 10 +12800.0 + 20 +9206.69873 + 30 +0.0 + 11 +12825.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14A0 + 8 +0 + 62 + 0 + 10 +12875.0 + 20 +9206.69873 + 30 +0.0 + 11 +12900.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14A1 + 8 +0 + 62 + 0 + 10 +12950.0 + 20 +9206.69873 + 30 +0.0 + 11 +12975.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14A2 + 8 +0 + 62 + 0 + 10 +13025.0 + 20 +9206.69873 + 30 +0.0 + 11 +13050.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14A3 + 8 +0 + 62 + 0 + 10 +13100.0 + 20 +9206.69873 + 30 +0.0 + 11 +13125.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14A4 + 8 +0 + 62 + 0 + 10 +13175.0 + 20 +9206.69873 + 30 +0.0 + 11 +13200.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14A5 + 8 +0 + 62 + 0 + 10 +13250.0 + 20 +9206.69873 + 30 +0.0 + 11 +13275.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14A6 + 8 +0 + 62 + 0 + 10 +13325.0 + 20 +9206.69873 + 30 +0.0 + 11 +13350.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14A7 + 8 +0 + 62 + 0 + 10 +13400.0 + 20 +9206.69873 + 30 +0.0 + 11 +13425.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14A8 + 8 +0 + 62 + 0 + 10 +13475.0 + 20 +9206.69873 + 30 +0.0 + 11 +13500.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14A9 + 8 +0 + 62 + 0 + 10 +13550.0 + 20 +9206.69873 + 30 +0.0 + 11 +13575.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14AA + 8 +0 + 62 + 0 + 10 +13625.0 + 20 +9206.69873 + 30 +0.0 + 11 +13650.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14AB + 8 +0 + 62 + 0 + 10 +13700.0 + 20 +9206.69873 + 30 +0.0 + 11 +13725.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14AC + 8 +0 + 62 + 0 + 10 +13775.0 + 20 +9206.69873 + 30 +0.0 + 11 +13800.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14AD + 8 +0 + 62 + 0 + 10 +13850.0 + 20 +9206.69873 + 30 +0.0 + 11 +13875.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14AE + 8 +0 + 62 + 0 + 10 +13925.0 + 20 +9206.69873 + 30 +0.0 + 11 +13950.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14AF + 8 +0 + 62 + 0 + 10 +14000.0 + 20 +9206.69873 + 30 +0.0 + 11 +14025.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14B0 + 8 +0 + 62 + 0 + 10 +14075.0 + 20 +9206.69873 + 30 +0.0 + 11 +14100.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14B1 + 8 +0 + 62 + 0 + 10 +14150.0 + 20 +9206.69873 + 30 +0.0 + 11 +14175.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14B2 + 8 +0 + 62 + 0 + 10 +14225.0 + 20 +9206.69873 + 30 +0.0 + 11 +14250.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14B3 + 8 +0 + 62 + 0 + 10 +14300.0 + 20 +9206.69873 + 30 +0.0 + 11 +14325.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14B4 + 8 +0 + 62 + 0 + 10 +14375.0 + 20 +9206.69873 + 30 +0.0 + 11 +14400.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14B5 + 8 +0 + 62 + 0 + 10 +14450.0 + 20 +9206.69873 + 30 +0.0 + 11 +14475.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14B6 + 8 +0 + 62 + 0 + 10 +14525.0 + 20 +9206.69873 + 30 +0.0 + 11 +14550.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14B7 + 8 +0 + 62 + 0 + 10 +14600.0 + 20 +9206.69873 + 30 +0.0 + 11 +14625.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14B8 + 8 +0 + 62 + 0 + 10 +14675.0 + 20 +9206.69873 + 30 +0.0 + 11 +14700.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14B9 + 8 +0 + 62 + 0 + 10 +14750.0 + 20 +9206.69873 + 30 +0.0 + 11 +14775.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14BA + 8 +0 + 62 + 0 + 10 +14825.0 + 20 +9206.69873 + 30 +0.0 + 11 +14850.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14BB + 8 +0 + 62 + 0 + 10 +14900.0 + 20 +9206.69873 + 30 +0.0 + 11 +14925.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14BC + 8 +0 + 62 + 0 + 10 +14975.0 + 20 +9206.69873 + 30 +0.0 + 11 +15000.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14BD + 8 +0 + 62 + 0 + 10 +15050.0 + 20 +9206.69873 + 30 +0.0 + 11 +15075.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14BE + 8 +0 + 62 + 0 + 10 +15125.0 + 20 +9206.69873 + 30 +0.0 + 11 +15150.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14BF + 8 +0 + 62 + 0 + 10 +15200.0 + 20 +9206.69873 + 30 +0.0 + 11 +15225.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14C0 + 8 +0 + 62 + 0 + 10 +15275.0 + 20 +9206.69873 + 30 +0.0 + 11 +15300.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14C1 + 8 +0 + 62 + 0 + 10 +15350.0 + 20 +9206.69873 + 30 +0.0 + 11 +15375.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14C2 + 8 +0 + 62 + 0 + 10 +15425.0 + 20 +9206.69873 + 30 +0.0 + 11 +15450.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14C3 + 8 +0 + 62 + 0 + 10 +15500.0 + 20 +9206.69873 + 30 +0.0 + 11 +15525.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14C4 + 8 +0 + 62 + 0 + 10 +15575.0 + 20 +9206.69873 + 30 +0.0 + 11 +15600.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14C5 + 8 +0 + 62 + 0 + 10 +15650.0 + 20 +9206.69873 + 30 +0.0 + 11 +15675.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14C6 + 8 +0 + 62 + 0 + 10 +15725.0 + 20 +9206.69873 + 30 +0.0 + 11 +15750.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14C7 + 8 +0 + 62 + 0 + 10 +15800.0 + 20 +9206.69873 + 30 +0.0 + 11 +15825.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14C8 + 8 +0 + 62 + 0 + 10 +15875.0 + 20 +9206.69873 + 30 +0.0 + 11 +15900.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14C9 + 8 +0 + 62 + 0 + 10 +15950.0 + 20 +9206.69873 + 30 +0.0 + 11 +15975.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14CA + 8 +0 + 62 + 0 + 10 +16025.0 + 20 +9206.69873 + 30 +0.0 + 11 +16050.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14CB + 8 +0 + 62 + 0 + 10 +16100.0 + 20 +9206.69873 + 30 +0.0 + 11 +16125.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14CC + 8 +0 + 62 + 0 + 10 +11262.5 + 20 +9185.048095 + 30 +0.0 + 11 +11287.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14CD + 8 +0 + 62 + 0 + 10 +11337.5 + 20 +9185.048095 + 30 +0.0 + 11 +11362.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14CE + 8 +0 + 62 + 0 + 10 +11412.5 + 20 +9185.048095 + 30 +0.0 + 11 +11437.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14CF + 8 +0 + 62 + 0 + 10 +11487.5 + 20 +9185.048095 + 30 +0.0 + 11 +11512.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14D0 + 8 +0 + 62 + 0 + 10 +11562.5 + 20 +9185.048095 + 30 +0.0 + 11 +11587.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14D1 + 8 +0 + 62 + 0 + 10 +11637.5 + 20 +9185.048095 + 30 +0.0 + 11 +11662.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14D2 + 8 +0 + 62 + 0 + 10 +11712.5 + 20 +9185.048095 + 30 +0.0 + 11 +11737.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14D3 + 8 +0 + 62 + 0 + 10 +11787.5 + 20 +9185.048095 + 30 +0.0 + 11 +11812.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14D4 + 8 +0 + 62 + 0 + 10 +11862.5 + 20 +9185.048095 + 30 +0.0 + 11 +11887.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14D5 + 8 +0 + 62 + 0 + 10 +11937.5 + 20 +9185.048095 + 30 +0.0 + 11 +11962.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14D6 + 8 +0 + 62 + 0 + 10 +12012.5 + 20 +9185.048095 + 30 +0.0 + 11 +12037.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14D7 + 8 +0 + 62 + 0 + 10 +12087.5 + 20 +9185.048095 + 30 +0.0 + 11 +12112.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14D8 + 8 +0 + 62 + 0 + 10 +12162.5 + 20 +9185.048095 + 30 +0.0 + 11 +12187.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14D9 + 8 +0 + 62 + 0 + 10 +12237.5 + 20 +9185.048095 + 30 +0.0 + 11 +12262.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14DA + 8 +0 + 62 + 0 + 10 +12312.5 + 20 +9185.048095 + 30 +0.0 + 11 +12337.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14DB + 8 +0 + 62 + 0 + 10 +12387.5 + 20 +9185.048095 + 30 +0.0 + 11 +12412.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14DC + 8 +0 + 62 + 0 + 10 +12462.5 + 20 +9185.048095 + 30 +0.0 + 11 +12487.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14DD + 8 +0 + 62 + 0 + 10 +12537.5 + 20 +9185.048095 + 30 +0.0 + 11 +12562.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14DE + 8 +0 + 62 + 0 + 10 +12612.5 + 20 +9185.048095 + 30 +0.0 + 11 +12637.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14DF + 8 +0 + 62 + 0 + 10 +12687.5 + 20 +9185.048095 + 30 +0.0 + 11 +12712.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14E0 + 8 +0 + 62 + 0 + 10 +12762.5 + 20 +9185.048095 + 30 +0.0 + 11 +12787.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14E1 + 8 +0 + 62 + 0 + 10 +12837.5 + 20 +9185.048095 + 30 +0.0 + 11 +12862.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14E2 + 8 +0 + 62 + 0 + 10 +12912.5 + 20 +9185.048095 + 30 +0.0 + 11 +12937.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14E3 + 8 +0 + 62 + 0 + 10 +12987.5 + 20 +9185.048095 + 30 +0.0 + 11 +13012.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14E4 + 8 +0 + 62 + 0 + 10 +13062.5 + 20 +9185.048095 + 30 +0.0 + 11 +13087.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14E5 + 8 +0 + 62 + 0 + 10 +13137.5 + 20 +9185.048095 + 30 +0.0 + 11 +13162.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14E6 + 8 +0 + 62 + 0 + 10 +13212.5 + 20 +9185.048095 + 30 +0.0 + 11 +13237.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14E7 + 8 +0 + 62 + 0 + 10 +13287.5 + 20 +9185.048095 + 30 +0.0 + 11 +13312.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14E8 + 8 +0 + 62 + 0 + 10 +13362.5 + 20 +9185.048095 + 30 +0.0 + 11 +13387.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14E9 + 8 +0 + 62 + 0 + 10 +13437.5 + 20 +9185.048095 + 30 +0.0 + 11 +13462.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14EA + 8 +0 + 62 + 0 + 10 +13512.5 + 20 +9185.048095 + 30 +0.0 + 11 +13537.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14EB + 8 +0 + 62 + 0 + 10 +13587.5 + 20 +9185.048095 + 30 +0.0 + 11 +13612.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14EC + 8 +0 + 62 + 0 + 10 +13662.5 + 20 +9185.048095 + 30 +0.0 + 11 +13687.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14ED + 8 +0 + 62 + 0 + 10 +13737.5 + 20 +9185.048095 + 30 +0.0 + 11 +13762.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14EE + 8 +0 + 62 + 0 + 10 +13812.5 + 20 +9185.048095 + 30 +0.0 + 11 +13837.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14EF + 8 +0 + 62 + 0 + 10 +13887.5 + 20 +9185.048095 + 30 +0.0 + 11 +13912.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14F0 + 8 +0 + 62 + 0 + 10 +13962.5 + 20 +9185.048095 + 30 +0.0 + 11 +13987.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14F1 + 8 +0 + 62 + 0 + 10 +14037.5 + 20 +9185.048095 + 30 +0.0 + 11 +14062.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14F2 + 8 +0 + 62 + 0 + 10 +14112.5 + 20 +9185.048095 + 30 +0.0 + 11 +14137.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14F3 + 8 +0 + 62 + 0 + 10 +14187.5 + 20 +9185.048095 + 30 +0.0 + 11 +14212.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14F4 + 8 +0 + 62 + 0 + 10 +14262.5 + 20 +9185.048095 + 30 +0.0 + 11 +14287.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14F5 + 8 +0 + 62 + 0 + 10 +14337.5 + 20 +9185.048095 + 30 +0.0 + 11 +14362.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14F6 + 8 +0 + 62 + 0 + 10 +14412.5 + 20 +9185.048095 + 30 +0.0 + 11 +14437.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14F7 + 8 +0 + 62 + 0 + 10 +14487.5 + 20 +9185.048095 + 30 +0.0 + 11 +14512.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14F8 + 8 +0 + 62 + 0 + 10 +14562.5 + 20 +9185.048095 + 30 +0.0 + 11 +14587.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14F9 + 8 +0 + 62 + 0 + 10 +14637.5 + 20 +9185.048095 + 30 +0.0 + 11 +14662.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14FA + 8 +0 + 62 + 0 + 10 +14712.5 + 20 +9185.048095 + 30 +0.0 + 11 +14737.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14FB + 8 +0 + 62 + 0 + 10 +14787.5 + 20 +9185.048095 + 30 +0.0 + 11 +14812.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14FC + 8 +0 + 62 + 0 + 10 +14862.5 + 20 +9185.048095 + 30 +0.0 + 11 +14887.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14FD + 8 +0 + 62 + 0 + 10 +14937.5 + 20 +9185.048095 + 30 +0.0 + 11 +14962.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14FE + 8 +0 + 62 + 0 + 10 +15012.5 + 20 +9185.048095 + 30 +0.0 + 11 +15037.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14FF + 8 +0 + 62 + 0 + 10 +15087.5 + 20 +9185.048095 + 30 +0.0 + 11 +15112.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +1500 + 8 +0 + 62 + 0 + 10 +15162.5 + 20 +9185.048095 + 30 +0.0 + 11 +15187.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +1501 + 8 +0 + 62 + 0 + 10 +15237.5 + 20 +9185.048095 + 30 +0.0 + 11 +15262.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +1502 + 8 +0 + 62 + 0 + 10 +15312.5 + 20 +9185.048095 + 30 +0.0 + 11 +15337.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +1503 + 8 +0 + 62 + 0 + 10 +15387.5 + 20 +9185.048095 + 30 +0.0 + 11 +15412.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +1504 + 8 +0 + 62 + 0 + 10 +15462.5 + 20 +9185.048095 + 30 +0.0 + 11 +15487.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +1505 + 8 +0 + 62 + 0 + 10 +15537.5 + 20 +9185.048095 + 30 +0.0 + 11 +15562.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +1506 + 8 +0 + 62 + 0 + 10 +15612.5 + 20 +9185.048095 + 30 +0.0 + 11 +15637.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +1507 + 8 +0 + 62 + 0 + 10 +15687.5 + 20 +9185.048095 + 30 +0.0 + 11 +15712.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +1508 + 8 +0 + 62 + 0 + 10 +15762.5 + 20 +9185.048095 + 30 +0.0 + 11 +15787.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +1509 + 8 +0 + 62 + 0 + 10 +15837.5 + 20 +9185.048095 + 30 +0.0 + 11 +15862.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +150A + 8 +0 + 62 + 0 + 10 +15912.5 + 20 +9185.048095 + 30 +0.0 + 11 +15937.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +150B + 8 +0 + 62 + 0 + 10 +15987.5 + 20 +9185.048095 + 30 +0.0 + 11 +16012.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +150C + 8 +0 + 62 + 0 + 10 +16062.5 + 20 +9185.048095 + 30 +0.0 + 11 +16087.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +150D + 8 +0 + 62 + 0 + 10 +13696.187984 + 20 +9170.0 + 30 +0.0 + 11 +13687.499972 + 21 +9185.048078 + 31 +0.0 + 0 +LINE + 5 +150E + 8 +0 + 62 + 0 + 10 +13662.499972 + 20 +9228.349349 + 30 +0.0 + 11 +13649.999972 + 21 +9249.999984 + 31 +0.0 + 0 +LINE + 5 +150F + 8 +0 + 62 + 0 + 10 +13662.499972 + 20 +9185.048078 + 30 +0.0 + 11 +13649.999972 + 21 +9206.698713 + 31 +0.0 + 0 +LINE + 5 +1510 + 8 +0 + 62 + 0 + 10 +13624.999972 + 20 +9249.999984 + 30 +0.0 + 11 +13624.999962 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1511 + 8 +0 + 62 + 0 + 10 +13624.999972 + 20 +9206.698714 + 30 +0.0 + 11 +13612.499972 + 21 +9228.349349 + 31 +0.0 + 0 +LINE + 5 +1512 + 8 +0 + 62 + 0 + 10 +13621.187984 + 20 +9170.0 + 30 +0.0 + 11 +13612.499972 + 21 +9185.048078 + 31 +0.0 + 0 +LINE + 5 +1513 + 8 +0 + 62 + 0 + 10 +13587.499972 + 20 +9228.349349 + 30 +0.0 + 11 +13574.999972 + 21 +9249.999984 + 31 +0.0 + 0 +LINE + 5 +1514 + 8 +0 + 62 + 0 + 10 +13587.499972 + 20 +9185.048079 + 30 +0.0 + 11 +13574.999972 + 21 +9206.698714 + 31 +0.0 + 0 +LINE + 5 +1515 + 8 +0 + 62 + 0 + 10 +13549.999972 + 20 +9249.999984 + 30 +0.0 + 11 +13549.999963 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1516 + 8 +0 + 62 + 0 + 10 +13549.999972 + 20 +9206.698714 + 30 +0.0 + 11 +13537.499972 + 21 +9228.349349 + 31 +0.0 + 0 +LINE + 5 +1517 + 8 +0 + 62 + 0 + 10 +13546.187984 + 20 +9170.0 + 30 +0.0 + 11 +13537.499972 + 21 +9185.048079 + 31 +0.0 + 0 +LINE + 5 +1518 + 8 +0 + 62 + 0 + 10 +13512.499972 + 20 +9228.349349 + 30 +0.0 + 11 +13499.999972 + 21 +9249.999984 + 31 +0.0 + 0 +LINE + 5 +1519 + 8 +0 + 62 + 0 + 10 +13512.499972 + 20 +9185.048079 + 30 +0.0 + 11 +13499.999972 + 21 +9206.698714 + 31 +0.0 + 0 +LINE + 5 +151A + 8 +0 + 62 + 0 + 10 +13474.999972 + 20 +9249.999984 + 30 +0.0 + 11 +13474.999963 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +151B + 8 +0 + 62 + 0 + 10 +13474.999972 + 20 +9206.698714 + 30 +0.0 + 11 +13462.499972 + 21 +9228.349349 + 31 +0.0 + 0 +LINE + 5 +151C + 8 +0 + 62 + 0 + 10 +13471.187985 + 20 +9170.0 + 30 +0.0 + 11 +13462.499972 + 21 +9185.048079 + 31 +0.0 + 0 +LINE + 5 +151D + 8 +0 + 62 + 0 + 10 +13437.499972 + 20 +9228.349349 + 30 +0.0 + 11 +13424.999972 + 21 +9249.999984 + 31 +0.0 + 0 +LINE + 5 +151E + 8 +0 + 62 + 0 + 10 +13437.499972 + 20 +9185.048079 + 30 +0.0 + 11 +13424.999972 + 21 +9206.698714 + 31 +0.0 + 0 +LINE + 5 +151F + 8 +0 + 62 + 0 + 10 +13399.999972 + 20 +9249.999984 + 30 +0.0 + 11 +13399.999963 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1520 + 8 +0 + 62 + 0 + 10 +13399.999973 + 20 +9206.698714 + 30 +0.0 + 11 +13387.499973 + 21 +9228.349349 + 31 +0.0 + 0 +LINE + 5 +1521 + 8 +0 + 62 + 0 + 10 +13396.187985 + 20 +9170.0 + 30 +0.0 + 11 +13387.499973 + 21 +9185.048079 + 31 +0.0 + 0 +LINE + 5 +1522 + 8 +0 + 62 + 0 + 10 +13362.499973 + 20 +9228.349349 + 30 +0.0 + 11 +13349.999973 + 21 +9249.999984 + 31 +0.0 + 0 +LINE + 5 +1523 + 8 +0 + 62 + 0 + 10 +13362.499973 + 20 +9185.048079 + 30 +0.0 + 11 +13349.999973 + 21 +9206.698714 + 31 +0.0 + 0 +LINE + 5 +1524 + 8 +0 + 62 + 0 + 10 +13324.999973 + 20 +9249.999984 + 30 +0.0 + 11 +13324.999964 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1525 + 8 +0 + 62 + 0 + 10 +13324.999973 + 20 +9206.698714 + 30 +0.0 + 11 +13312.499973 + 21 +9228.349349 + 31 +0.0 + 0 +LINE + 5 +1526 + 8 +0 + 62 + 0 + 10 +13321.187985 + 20 +9170.0 + 30 +0.0 + 11 +13312.499973 + 21 +9185.048079 + 31 +0.0 + 0 +LINE + 5 +1527 + 8 +0 + 62 + 0 + 10 +13287.499973 + 20 +9228.349349 + 30 +0.0 + 11 +13274.999973 + 21 +9249.999984 + 31 +0.0 + 0 +LINE + 5 +1528 + 8 +0 + 62 + 0 + 10 +13287.499973 + 20 +9185.048079 + 30 +0.0 + 11 +13274.999973 + 21 +9206.698714 + 31 +0.0 + 0 +LINE + 5 +1529 + 8 +0 + 62 + 0 + 10 +13249.999973 + 20 +9249.999984 + 30 +0.0 + 11 +13249.999964 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +152A + 8 +0 + 62 + 0 + 10 +13249.999973 + 20 +9206.698714 + 30 +0.0 + 11 +13237.499973 + 21 +9228.349349 + 31 +0.0 + 0 +LINE + 5 +152B + 8 +0 + 62 + 0 + 10 +13246.187986 + 20 +9170.0 + 30 +0.0 + 11 +13237.499973 + 21 +9185.048079 + 31 +0.0 + 0 +LINE + 5 +152C + 8 +0 + 62 + 0 + 10 +13212.499973 + 20 +9228.349349 + 30 +0.0 + 11 +13199.999973 + 21 +9249.999984 + 31 +0.0 + 0 +LINE + 5 +152D + 8 +0 + 62 + 0 + 10 +13212.499973 + 20 +9185.048079 + 30 +0.0 + 11 +13199.999973 + 21 +9206.698714 + 31 +0.0 + 0 +LINE + 5 +152E + 8 +0 + 62 + 0 + 10 +13174.999973 + 20 +9249.999985 + 30 +0.0 + 11 +13174.999964 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +152F + 8 +0 + 62 + 0 + 10 +13174.999973 + 20 +9206.698714 + 30 +0.0 + 11 +13162.499973 + 21 +9228.349349 + 31 +0.0 + 0 +LINE + 5 +1530 + 8 +0 + 62 + 0 + 10 +13171.187986 + 20 +9170.0 + 30 +0.0 + 11 +13162.499973 + 21 +9185.048079 + 31 +0.0 + 0 +LINE + 5 +1531 + 8 +0 + 62 + 0 + 10 +13137.499973 + 20 +9228.34935 + 30 +0.0 + 11 +13124.999973 + 21 +9249.999985 + 31 +0.0 + 0 +LINE + 5 +1532 + 8 +0 + 62 + 0 + 10 +13137.499973 + 20 +9185.048079 + 30 +0.0 + 11 +13124.999973 + 21 +9206.698714 + 31 +0.0 + 0 +LINE + 5 +1533 + 8 +0 + 62 + 0 + 10 +13099.999973 + 20 +9249.999985 + 30 +0.0 + 11 +13099.999965 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1534 + 8 +0 + 62 + 0 + 10 +13099.999974 + 20 +9206.698715 + 30 +0.0 + 11 +13087.499974 + 21 +9228.34935 + 31 +0.0 + 0 +LINE + 5 +1535 + 8 +0 + 62 + 0 + 10 +13096.187986 + 20 +9170.0 + 30 +0.0 + 11 +13087.499974 + 21 +9185.048079 + 31 +0.0 + 0 +LINE + 5 +1536 + 8 +0 + 62 + 0 + 10 +13062.499974 + 20 +9228.34935 + 30 +0.0 + 11 +13049.999974 + 21 +9249.999985 + 31 +0.0 + 0 +LINE + 5 +1537 + 8 +0 + 62 + 0 + 10 +13062.499974 + 20 +9185.04808 + 30 +0.0 + 11 +13049.999974 + 21 +9206.698715 + 31 +0.0 + 0 +LINE + 5 +1538 + 8 +0 + 62 + 0 + 10 +13024.999974 + 20 +9249.999985 + 30 +0.0 + 11 +13024.999965 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1539 + 8 +0 + 62 + 0 + 10 +13024.999974 + 20 +9206.698715 + 30 +0.0 + 11 +13012.499974 + 21 +9228.34935 + 31 +0.0 + 0 +LINE + 5 +153A + 8 +0 + 62 + 0 + 10 +13021.187987 + 20 +9170.0 + 30 +0.0 + 11 +13012.499974 + 21 +9185.04808 + 31 +0.0 + 0 +LINE + 5 +153B + 8 +0 + 62 + 0 + 10 +12987.499974 + 20 +9228.34935 + 30 +0.0 + 11 +12974.999974 + 21 +9249.999985 + 31 +0.0 + 0 +LINE + 5 +153C + 8 +0 + 62 + 0 + 10 +12987.499974 + 20 +9185.04808 + 30 +0.0 + 11 +12974.999974 + 21 +9206.698715 + 31 +0.0 + 0 +LINE + 5 +153D + 8 +0 + 62 + 0 + 10 +12949.999974 + 20 +9249.999985 + 30 +0.0 + 11 +12949.999965 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +153E + 8 +0 + 62 + 0 + 10 +12949.999974 + 20 +9206.698715 + 30 +0.0 + 11 +12937.499974 + 21 +9228.34935 + 31 +0.0 + 0 +LINE + 5 +153F + 8 +0 + 62 + 0 + 10 +12946.187987 + 20 +9170.0 + 30 +0.0 + 11 +12937.499974 + 21 +9185.04808 + 31 +0.0 + 0 +LINE + 5 +1540 + 8 +0 + 62 + 0 + 10 +12912.499974 + 20 +9228.34935 + 30 +0.0 + 11 +12899.999974 + 21 +9249.999985 + 31 +0.0 + 0 +LINE + 5 +1541 + 8 +0 + 62 + 0 + 10 +12912.499974 + 20 +9185.04808 + 30 +0.0 + 11 +12899.999974 + 21 +9206.698715 + 31 +0.0 + 0 +LINE + 5 +1542 + 8 +0 + 62 + 0 + 10 +12874.999974 + 20 +9249.999985 + 30 +0.0 + 11 +12874.999966 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1543 + 8 +0 + 62 + 0 + 10 +12874.999974 + 20 +9206.698715 + 30 +0.0 + 11 +12862.499974 + 21 +9228.34935 + 31 +0.0 + 0 +LINE + 5 +1544 + 8 +0 + 62 + 0 + 10 +12871.187987 + 20 +9170.0 + 30 +0.0 + 11 +12862.499974 + 21 +9185.04808 + 31 +0.0 + 0 +LINE + 5 +1545 + 8 +0 + 62 + 0 + 10 +12837.499974 + 20 +9228.34935 + 30 +0.0 + 11 +12824.999974 + 21 +9249.999985 + 31 +0.0 + 0 +LINE + 5 +1546 + 8 +0 + 62 + 0 + 10 +12837.499974 + 20 +9185.04808 + 30 +0.0 + 11 +12824.999974 + 21 +9206.698715 + 31 +0.0 + 0 +LINE + 5 +1547 + 8 +0 + 62 + 0 + 10 +12799.999974 + 20 +9249.999985 + 30 +0.0 + 11 +12799.999966 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1548 + 8 +0 + 62 + 0 + 10 +12799.999975 + 20 +9206.698715 + 30 +0.0 + 11 +12787.499975 + 21 +9228.34935 + 31 +0.0 + 0 +LINE + 5 +1549 + 8 +0 + 62 + 0 + 10 +12796.187988 + 20 +9170.0 + 30 +0.0 + 11 +12787.499975 + 21 +9185.04808 + 31 +0.0 + 0 +LINE + 5 +154A + 8 +0 + 62 + 0 + 10 +12762.499975 + 20 +9228.34935 + 30 +0.0 + 11 +12749.999975 + 21 +9249.999985 + 31 +0.0 + 0 +LINE + 5 +154B + 8 +0 + 62 + 0 + 10 +12762.499975 + 20 +9185.04808 + 30 +0.0 + 11 +12749.999975 + 21 +9206.698715 + 31 +0.0 + 0 +LINE + 5 +154C + 8 +0 + 62 + 0 + 10 +12724.999975 + 20 +9249.999985 + 30 +0.0 + 11 +12724.999966 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +154D + 8 +0 + 62 + 0 + 10 +12724.999975 + 20 +9206.698715 + 30 +0.0 + 11 +12712.499975 + 21 +9228.34935 + 31 +0.0 + 0 +LINE + 5 +154E + 8 +0 + 62 + 0 + 10 +12721.187988 + 20 +9170.0 + 30 +0.0 + 11 +12712.499975 + 21 +9185.04808 + 31 +0.0 + 0 +LINE + 5 +154F + 8 +0 + 62 + 0 + 10 +12687.499975 + 20 +9228.34935 + 30 +0.0 + 11 +12674.999975 + 21 +9249.999985 + 31 +0.0 + 0 +LINE + 5 +1550 + 8 +0 + 62 + 0 + 10 +12687.499975 + 20 +9185.04808 + 30 +0.0 + 11 +12674.999975 + 21 +9206.698715 + 31 +0.0 + 0 +LINE + 5 +1551 + 8 +0 + 62 + 0 + 10 +12649.999975 + 20 +9249.999986 + 30 +0.0 + 11 +12649.999967 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1552 + 8 +0 + 62 + 0 + 10 +12649.999975 + 20 +9206.698715 + 30 +0.0 + 11 +12637.499975 + 21 +9228.34935 + 31 +0.0 + 0 +LINE + 5 +1553 + 8 +0 + 62 + 0 + 10 +12646.187988 + 20 +9170.0 + 30 +0.0 + 11 +12637.499975 + 21 +9185.04808 + 31 +0.0 + 0 +LINE + 5 +1554 + 8 +0 + 62 + 0 + 10 +12612.499975 + 20 +9228.349351 + 30 +0.0 + 11 +12599.999975 + 21 +9249.999986 + 31 +0.0 + 0 +LINE + 5 +1555 + 8 +0 + 62 + 0 + 10 +12612.499975 + 20 +9185.04808 + 30 +0.0 + 11 +12599.999975 + 21 +9206.698715 + 31 +0.0 + 0 +LINE + 5 +1556 + 8 +0 + 62 + 0 + 10 +12574.999975 + 20 +9249.999986 + 30 +0.0 + 11 +12574.999967 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1557 + 8 +0 + 62 + 0 + 10 +12574.999975 + 20 +9206.698716 + 30 +0.0 + 11 +12562.499975 + 21 +9228.349351 + 31 +0.0 + 0 +LINE + 5 +1558 + 8 +0 + 62 + 0 + 10 +12571.187989 + 20 +9170.0 + 30 +0.0 + 11 +12562.499975 + 21 +9185.04808 + 31 +0.0 + 0 +LINE + 5 +1559 + 8 +0 + 62 + 0 + 10 +12537.499975 + 20 +9228.349351 + 30 +0.0 + 11 +12524.999975 + 21 +9249.999986 + 31 +0.0 + 0 +LINE + 5 +155A + 8 +0 + 62 + 0 + 10 +12537.499975 + 20 +9185.048081 + 30 +0.0 + 11 +12524.999975 + 21 +9206.698716 + 31 +0.0 + 0 +LINE + 5 +155B + 8 +0 + 62 + 0 + 10 +12499.999975 + 20 +9249.999986 + 30 +0.0 + 11 +12499.999967 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +155C + 8 +0 + 62 + 0 + 10 +12499.999976 + 20 +9206.698716 + 30 +0.0 + 11 +12487.499976 + 21 +9228.349351 + 31 +0.0 + 0 +LINE + 5 +155D + 8 +0 + 62 + 0 + 10 +12496.187989 + 20 +9170.0 + 30 +0.0 + 11 +12487.499976 + 21 +9185.048081 + 31 +0.0 + 0 +LINE + 5 +155E + 8 +0 + 62 + 0 + 10 +12462.499976 + 20 +9228.349351 + 30 +0.0 + 11 +12449.999976 + 21 +9249.999986 + 31 +0.0 + 0 +LINE + 5 +155F + 8 +0 + 62 + 0 + 10 +12462.499976 + 20 +9185.048081 + 30 +0.0 + 11 +12449.999976 + 21 +9206.698716 + 31 +0.0 + 0 +LINE + 5 +1560 + 8 +0 + 62 + 0 + 10 +12424.999976 + 20 +9249.999986 + 30 +0.0 + 11 +12424.999968 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1561 + 8 +0 + 62 + 0 + 10 +12424.999976 + 20 +9206.698716 + 30 +0.0 + 11 +12412.499976 + 21 +9228.349351 + 31 +0.0 + 0 +LINE + 5 +1562 + 8 +0 + 62 + 0 + 10 +12421.187989 + 20 +9170.0 + 30 +0.0 + 11 +12412.499976 + 21 +9185.048081 + 31 +0.0 + 0 +LINE + 5 +1563 + 8 +0 + 62 + 0 + 10 +12387.499976 + 20 +9228.349351 + 30 +0.0 + 11 +12374.999976 + 21 +9249.999986 + 31 +0.0 + 0 +LINE + 5 +1564 + 8 +0 + 62 + 0 + 10 +12387.499976 + 20 +9185.048081 + 30 +0.0 + 11 +12374.999976 + 21 +9206.698716 + 31 +0.0 + 0 +LINE + 5 +1565 + 8 +0 + 62 + 0 + 10 +12349.999976 + 20 +9249.999986 + 30 +0.0 + 11 +12349.999968 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1566 + 8 +0 + 62 + 0 + 10 +12349.999976 + 20 +9206.698716 + 30 +0.0 + 11 +12337.499976 + 21 +9228.349351 + 31 +0.0 + 0 +LINE + 5 +1567 + 8 +0 + 62 + 0 + 10 +12346.18799 + 20 +9170.0 + 30 +0.0 + 11 +12337.499976 + 21 +9185.048081 + 31 +0.0 + 0 +LINE + 5 +1568 + 8 +0 + 62 + 0 + 10 +12312.499976 + 20 +9228.349351 + 30 +0.0 + 11 +12299.999976 + 21 +9249.999986 + 31 +0.0 + 0 +LINE + 5 +1569 + 8 +0 + 62 + 0 + 10 +12312.499976 + 20 +9185.048081 + 30 +0.0 + 11 +12299.999976 + 21 +9206.698716 + 31 +0.0 + 0 +LINE + 5 +156A + 8 +0 + 62 + 0 + 10 +12274.999976 + 20 +9249.999986 + 30 +0.0 + 11 +12274.999968 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +156B + 8 +0 + 62 + 0 + 10 +12274.999976 + 20 +9206.698716 + 30 +0.0 + 11 +12262.499976 + 21 +9228.349351 + 31 +0.0 + 0 +LINE + 5 +156C + 8 +0 + 62 + 0 + 10 +12271.18799 + 20 +9170.0 + 30 +0.0 + 11 +12262.499976 + 21 +9185.048081 + 31 +0.0 + 0 +LINE + 5 +156D + 8 +0 + 62 + 0 + 10 +12237.499976 + 20 +9228.349351 + 30 +0.0 + 11 +12224.999976 + 21 +9249.999986 + 31 +0.0 + 0 +LINE + 5 +156E + 8 +0 + 62 + 0 + 10 +12237.499976 + 20 +9185.048081 + 30 +0.0 + 11 +12224.999976 + 21 +9206.698716 + 31 +0.0 + 0 +LINE + 5 +156F + 8 +0 + 62 + 0 + 10 +12199.999976 + 20 +9249.999986 + 30 +0.0 + 11 +12199.999969 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1570 + 8 +0 + 62 + 0 + 10 +12199.999976 + 20 +9206.698716 + 30 +0.0 + 11 +12187.499976 + 21 +9228.349351 + 31 +0.0 + 0 +LINE + 5 +1571 + 8 +0 + 62 + 0 + 10 +12196.18799 + 20 +9170.0 + 30 +0.0 + 11 +12187.499977 + 21 +9185.048081 + 31 +0.0 + 0 +LINE + 5 +1572 + 8 +0 + 62 + 0 + 10 +12162.499977 + 20 +9228.349351 + 30 +0.0 + 11 +12149.999977 + 21 +9249.999986 + 31 +0.0 + 0 +LINE + 5 +1573 + 8 +0 + 62 + 0 + 10 +12162.499977 + 20 +9185.048081 + 30 +0.0 + 11 +12149.999977 + 21 +9206.698716 + 31 +0.0 + 0 +LINE + 5 +1574 + 8 +0 + 62 + 0 + 10 +12124.999977 + 20 +9249.999987 + 30 +0.0 + 11 +12124.999969 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1575 + 8 +0 + 62 + 0 + 10 +12124.999977 + 20 +9206.698716 + 30 +0.0 + 11 +12112.499977 + 21 +9228.349351 + 31 +0.0 + 0 +LINE + 5 +1576 + 8 +0 + 62 + 0 + 10 +12121.187991 + 20 +9170.0 + 30 +0.0 + 11 +12112.499977 + 21 +9185.048081 + 31 +0.0 + 0 +LINE + 5 +1577 + 8 +0 + 62 + 0 + 10 +12087.499977 + 20 +9228.349352 + 30 +0.0 + 11 +12074.999977 + 21 +9249.999987 + 31 +0.0 + 0 +LINE + 5 +1578 + 8 +0 + 62 + 0 + 10 +12087.499977 + 20 +9185.048081 + 30 +0.0 + 11 +12074.999977 + 21 +9206.698716 + 31 +0.0 + 0 +LINE + 5 +1579 + 8 +0 + 62 + 0 + 10 +12049.999977 + 20 +9249.999987 + 30 +0.0 + 11 +12049.999969 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +157A + 8 +0 + 62 + 0 + 10 +12049.999977 + 20 +9206.698717 + 30 +0.0 + 11 +12037.499977 + 21 +9228.349352 + 31 +0.0 + 0 +LINE + 5 +157B + 8 +0 + 62 + 0 + 10 +12046.187991 + 20 +9170.0 + 30 +0.0 + 11 +12037.499977 + 21 +9185.048081 + 31 +0.0 + 0 +LINE + 5 +157C + 8 +0 + 62 + 0 + 10 +12012.499977 + 20 +9228.349352 + 30 +0.0 + 11 +11999.999977 + 21 +9249.999987 + 31 +0.0 + 0 +LINE + 5 +157D + 8 +0 + 62 + 0 + 10 +12012.499977 + 20 +9185.048082 + 30 +0.0 + 11 +11999.999977 + 21 +9206.698717 + 31 +0.0 + 0 +LINE + 5 +157E + 8 +0 + 62 + 0 + 10 +11974.999977 + 20 +9249.999987 + 30 +0.0 + 11 +11974.99997 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +157F + 8 +0 + 62 + 0 + 10 +11974.999977 + 20 +9206.698717 + 30 +0.0 + 11 +11962.499977 + 21 +9228.349352 + 31 +0.0 + 0 +LINE + 5 +1580 + 8 +0 + 62 + 0 + 10 +11971.187991 + 20 +9170.0 + 30 +0.0 + 11 +11962.499977 + 21 +9185.048082 + 31 +0.0 + 0 +LINE + 5 +1581 + 8 +0 + 62 + 0 + 10 +11937.499977 + 20 +9228.349352 + 30 +0.0 + 11 +11924.999977 + 21 +9249.999987 + 31 +0.0 + 0 +LINE + 5 +1582 + 8 +0 + 62 + 0 + 10 +11937.499977 + 20 +9185.048082 + 30 +0.0 + 11 +11924.999977 + 21 +9206.698717 + 31 +0.0 + 0 +LINE + 5 +1583 + 8 +0 + 62 + 0 + 10 +11899.999977 + 20 +9249.999987 + 30 +0.0 + 11 +11899.99997 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1584 + 8 +0 + 62 + 0 + 10 +11899.999977 + 20 +9206.698717 + 30 +0.0 + 11 +11887.499977 + 21 +9228.349352 + 31 +0.0 + 0 +LINE + 5 +1585 + 8 +0 + 62 + 0 + 10 +11896.187992 + 20 +9170.0 + 30 +0.0 + 11 +11887.499978 + 21 +9185.048082 + 31 +0.0 + 0 +LINE + 5 +1586 + 8 +0 + 62 + 0 + 10 +11862.499978 + 20 +9228.349352 + 30 +0.0 + 11 +11849.999978 + 21 +9249.999987 + 31 +0.0 + 0 +LINE + 5 +1587 + 8 +0 + 62 + 0 + 10 +11862.499978 + 20 +9185.048082 + 30 +0.0 + 11 +11849.999978 + 21 +9206.698717 + 31 +0.0 + 0 +LINE + 5 +1588 + 8 +0 + 62 + 0 + 10 +11824.999978 + 20 +9249.999987 + 30 +0.0 + 11 +11824.99997 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1589 + 8 +0 + 62 + 0 + 10 +11824.999978 + 20 +9206.698717 + 30 +0.0 + 11 +11812.499978 + 21 +9228.349352 + 31 +0.0 + 0 +LINE + 5 +158A + 8 +0 + 62 + 0 + 10 +11821.187992 + 20 +9170.0 + 30 +0.0 + 11 +11812.499978 + 21 +9185.048082 + 31 +0.0 + 0 +LINE + 5 +158B + 8 +0 + 62 + 0 + 10 +11787.499978 + 20 +9228.349352 + 30 +0.0 + 11 +11774.999978 + 21 +9249.999987 + 31 +0.0 + 0 +LINE + 5 +158C + 8 +0 + 62 + 0 + 10 +11787.499978 + 20 +9185.048082 + 30 +0.0 + 11 +11774.999978 + 21 +9206.698717 + 31 +0.0 + 0 +LINE + 5 +158D + 8 +0 + 62 + 0 + 10 +11749.999978 + 20 +9249.999987 + 30 +0.0 + 11 +11749.999971 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +158E + 8 +0 + 62 + 0 + 10 +11749.999978 + 20 +9206.698717 + 30 +0.0 + 11 +11737.499978 + 21 +9228.349352 + 31 +0.0 + 0 +LINE + 5 +158F + 8 +0 + 62 + 0 + 10 +11746.187992 + 20 +9170.0 + 30 +0.0 + 11 +11737.499978 + 21 +9185.048082 + 31 +0.0 + 0 +LINE + 5 +1590 + 8 +0 + 62 + 0 + 10 +11712.499978 + 20 +9228.349352 + 30 +0.0 + 11 +11699.999978 + 21 +9249.999987 + 31 +0.0 + 0 +LINE + 5 +1591 + 8 +0 + 62 + 0 + 10 +11712.499978 + 20 +9185.048082 + 30 +0.0 + 11 +11699.999978 + 21 +9206.698717 + 31 +0.0 + 0 +LINE + 5 +1592 + 8 +0 + 62 + 0 + 10 +11674.999978 + 20 +9249.999987 + 30 +0.0 + 11 +11674.999971 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1593 + 8 +0 + 62 + 0 + 10 +11674.999978 + 20 +9206.698717 + 30 +0.0 + 11 +11662.499978 + 21 +9228.349352 + 31 +0.0 + 0 +LINE + 5 +1594 + 8 +0 + 62 + 0 + 10 +11671.187993 + 20 +9170.0 + 30 +0.0 + 11 +11662.499978 + 21 +9185.048082 + 31 +0.0 + 0 +LINE + 5 +1595 + 8 +0 + 62 + 0 + 10 +11637.499978 + 20 +9228.349352 + 30 +0.0 + 11 +11624.999978 + 21 +9249.999987 + 31 +0.0 + 0 +LINE + 5 +1596 + 8 +0 + 62 + 0 + 10 +11637.499978 + 20 +9185.048082 + 30 +0.0 + 11 +11624.999978 + 21 +9206.698717 + 31 +0.0 + 0 +LINE + 5 +1597 + 8 +0 + 62 + 0 + 10 +11599.999978 + 20 +9249.999988 + 30 +0.0 + 11 +11599.999971 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1598 + 8 +0 + 62 + 0 + 10 +11599.999978 + 20 +9206.698717 + 30 +0.0 + 11 +11587.499978 + 21 +9228.349352 + 31 +0.0 + 0 +LINE + 5 +1599 + 8 +0 + 62 + 0 + 10 +11596.187993 + 20 +9170.0 + 30 +0.0 + 11 +11587.499979 + 21 +9185.048082 + 31 +0.0 + 0 +LINE + 5 +159A + 8 +0 + 62 + 0 + 10 +11562.499979 + 20 +9228.349353 + 30 +0.0 + 11 +11549.999979 + 21 +9249.999988 + 31 +0.0 + 0 +LINE + 5 +159B + 8 +0 + 62 + 0 + 10 +11562.499979 + 20 +9185.048082 + 30 +0.0 + 11 +11549.999979 + 21 +9206.698717 + 31 +0.0 + 0 +LINE + 5 +159C + 8 +0 + 62 + 0 + 10 +11524.999979 + 20 +9249.999988 + 30 +0.0 + 11 +11524.999971 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +159D + 8 +0 + 62 + 0 + 10 +11524.999979 + 20 +9206.698718 + 30 +0.0 + 11 +11512.499979 + 21 +9228.349353 + 31 +0.0 + 0 +LINE + 5 +159E + 8 +0 + 62 + 0 + 10 +11521.187993 + 20 +9170.0 + 30 +0.0 + 11 +11512.499979 + 21 +9185.048082 + 31 +0.0 + 0 +LINE + 5 +159F + 8 +0 + 62 + 0 + 10 +11487.499979 + 20 +9228.349353 + 30 +0.0 + 11 +11474.999979 + 21 +9249.999988 + 31 +0.0 + 0 +LINE + 5 +15A0 + 8 +0 + 62 + 0 + 10 +11487.499979 + 20 +9185.048083 + 30 +0.0 + 11 +11474.999979 + 21 +9206.698718 + 31 +0.0 + 0 +LINE + 5 +15A1 + 8 +0 + 62 + 0 + 10 +11449.999979 + 20 +9249.999988 + 30 +0.0 + 11 +11449.999972 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +15A2 + 8 +0 + 62 + 0 + 10 +11449.999979 + 20 +9206.698718 + 30 +0.0 + 11 +11437.499979 + 21 +9228.349353 + 31 +0.0 + 0 +LINE + 5 +15A3 + 8 +0 + 62 + 0 + 10 +11446.187994 + 20 +9170.0 + 30 +0.0 + 11 +11437.499979 + 21 +9185.048083 + 31 +0.0 + 0 +LINE + 5 +15A4 + 8 +0 + 62 + 0 + 10 +11412.499979 + 20 +9228.349353 + 30 +0.0 + 11 +11399.999979 + 21 +9249.999988 + 31 +0.0 + 0 +LINE + 5 +15A5 + 8 +0 + 62 + 0 + 10 +11412.499979 + 20 +9185.048083 + 30 +0.0 + 11 +11399.999979 + 21 +9206.698718 + 31 +0.0 + 0 +LINE + 5 +15A6 + 8 +0 + 62 + 0 + 10 +11374.999979 + 20 +9249.999988 + 30 +0.0 + 11 +11374.999972 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +15A7 + 8 +0 + 62 + 0 + 10 +11374.999979 + 20 +9206.698718 + 30 +0.0 + 11 +11362.499979 + 21 +9228.349353 + 31 +0.0 + 0 +LINE + 5 +15A8 + 8 +0 + 62 + 0 + 10 +11371.187994 + 20 +9170.0 + 30 +0.0 + 11 +11362.499979 + 21 +9185.048083 + 31 +0.0 + 0 +LINE + 5 +15A9 + 8 +0 + 62 + 0 + 10 +11337.499979 + 20 +9228.349353 + 30 +0.0 + 11 +11324.999979 + 21 +9249.999988 + 31 +0.0 + 0 +LINE + 5 +15AA + 8 +0 + 62 + 0 + 10 +11337.499979 + 20 +9185.048083 + 30 +0.0 + 11 +11324.999979 + 21 +9206.698718 + 31 +0.0 + 0 +LINE + 5 +15AB + 8 +0 + 62 + 0 + 10 +11299.999979 + 20 +9249.999988 + 30 +0.0 + 11 +11299.999972 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +15AC + 8 +0 + 62 + 0 + 10 +11299.999979 + 20 +9206.698718 + 30 +0.0 + 11 +11287.499979 + 21 +9228.349353 + 31 +0.0 + 0 +LINE + 5 +15AD + 8 +0 + 62 + 0 + 10 +11296.187994 + 20 +9170.0 + 30 +0.0 + 11 +11287.49998 + 21 +9185.048083 + 31 +0.0 + 0 +LINE + 5 +15AE + 8 +0 + 62 + 0 + 10 +11262.49998 + 20 +9228.349353 + 30 +0.0 + 11 +11249.99998 + 21 +9249.999988 + 31 +0.0 + 0 +LINE + 5 +15AF + 8 +0 + 62 + 0 + 10 +11262.49998 + 20 +9185.048083 + 30 +0.0 + 11 +11249.99998 + 21 +9206.698718 + 31 +0.0 + 0 +LINE + 5 +15B0 + 8 +0 + 62 + 0 + 10 +13699.999972 + 20 +9206.698713 + 30 +0.0 + 11 +13687.499972 + 21 +9228.349348 + 31 +0.0 + 0 +LINE + 5 +15B1 + 8 +0 + 62 + 0 + 10 +13737.499971 + 20 +9185.048078 + 30 +0.0 + 11 +13724.999971 + 21 +9206.698713 + 31 +0.0 + 0 +LINE + 5 +15B2 + 8 +0 + 62 + 0 + 10 +13699.999971 + 20 +9249.999984 + 30 +0.0 + 11 +13699.999962 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +15B3 + 8 +0 + 62 + 0 + 10 +13771.187983 + 20 +9170.0 + 30 +0.0 + 11 +13762.499971 + 21 +9185.048078 + 31 +0.0 + 0 +LINE + 5 +15B4 + 8 +0 + 62 + 0 + 10 +13737.499971 + 20 +9228.349348 + 30 +0.0 + 11 +13724.999971 + 21 +9249.999983 + 31 +0.0 + 0 +LINE + 5 +15B5 + 8 +0 + 62 + 0 + 10 +13774.999971 + 20 +9206.698713 + 30 +0.0 + 11 +13762.499971 + 21 +9228.349348 + 31 +0.0 + 0 +LINE + 5 +15B6 + 8 +0 + 62 + 0 + 10 +13812.499971 + 20 +9185.048078 + 30 +0.0 + 11 +13799.999971 + 21 +9206.698713 + 31 +0.0 + 0 +LINE + 5 +15B7 + 8 +0 + 62 + 0 + 10 +13774.999971 + 20 +9249.999983 + 30 +0.0 + 11 +13774.999962 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +15B8 + 8 +0 + 62 + 0 + 10 +13846.187983 + 20 +9170.0 + 30 +0.0 + 11 +13837.499971 + 21 +9185.048078 + 31 +0.0 + 0 +LINE + 5 +15B9 + 8 +0 + 62 + 0 + 10 +13812.499971 + 20 +9228.349348 + 30 +0.0 + 11 +13799.999971 + 21 +9249.999983 + 31 +0.0 + 0 +LINE + 5 +15BA + 8 +0 + 62 + 0 + 10 +13849.999971 + 20 +9206.698713 + 30 +0.0 + 11 +13837.499971 + 21 +9228.349348 + 31 +0.0 + 0 +LINE + 5 +15BB + 8 +0 + 62 + 0 + 10 +13887.499971 + 20 +9185.048078 + 30 +0.0 + 11 +13874.999971 + 21 +9206.698713 + 31 +0.0 + 0 +LINE + 5 +15BC + 8 +0 + 62 + 0 + 10 +13849.999971 + 20 +9249.999983 + 30 +0.0 + 11 +13849.999961 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +15BD + 8 +0 + 62 + 0 + 10 +13921.187983 + 20 +9170.0 + 30 +0.0 + 11 +13912.499971 + 21 +9185.048078 + 31 +0.0 + 0 +LINE + 5 +15BE + 8 +0 + 62 + 0 + 10 +13887.499971 + 20 +9228.349348 + 30 +0.0 + 11 +13874.999971 + 21 +9249.999983 + 31 +0.0 + 0 +LINE + 5 +15BF + 8 +0 + 62 + 0 + 10 +13924.999971 + 20 +9206.698713 + 30 +0.0 + 11 +13912.499971 + 21 +9228.349348 + 31 +0.0 + 0 +LINE + 5 +15C0 + 8 +0 + 62 + 0 + 10 +13962.499971 + 20 +9185.048078 + 30 +0.0 + 11 +13949.999971 + 21 +9206.698713 + 31 +0.0 + 0 +LINE + 5 +15C1 + 8 +0 + 62 + 0 + 10 +13924.999971 + 20 +9249.999983 + 30 +0.0 + 11 +13924.999961 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +15C2 + 8 +0 + 62 + 0 + 10 +13996.187982 + 20 +9170.0 + 30 +0.0 + 11 +13987.499971 + 21 +9185.048078 + 31 +0.0 + 0 +LINE + 5 +15C3 + 8 +0 + 62 + 0 + 10 +13962.499971 + 20 +9228.349348 + 30 +0.0 + 11 +13949.999971 + 21 +9249.999983 + 31 +0.0 + 0 +LINE + 5 +15C4 + 8 +0 + 62 + 0 + 10 +13999.999971 + 20 +9206.698713 + 30 +0.0 + 11 +13987.499971 + 21 +9228.349348 + 31 +0.0 + 0 +LINE + 5 +15C5 + 8 +0 + 62 + 0 + 10 +14037.499971 + 20 +9185.048078 + 30 +0.0 + 11 +14024.999971 + 21 +9206.698713 + 31 +0.0 + 0 +LINE + 5 +15C6 + 8 +0 + 62 + 0 + 10 +13999.999971 + 20 +9249.999983 + 30 +0.0 + 11 +13999.999961 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +15C7 + 8 +0 + 62 + 0 + 10 +14071.187982 + 20 +9170.0 + 30 +0.0 + 11 +14062.49997 + 21 +9185.048078 + 31 +0.0 + 0 +LINE + 5 +15C8 + 8 +0 + 62 + 0 + 10 +14037.49997 + 20 +9228.349348 + 30 +0.0 + 11 +14024.99997 + 21 +9249.999983 + 31 +0.0 + 0 +LINE + 5 +15C9 + 8 +0 + 62 + 0 + 10 +14074.99997 + 20 +9206.698713 + 30 +0.0 + 11 +14062.49997 + 21 +9228.349348 + 31 +0.0 + 0 +LINE + 5 +15CA + 8 +0 + 62 + 0 + 10 +14112.49997 + 20 +9185.048078 + 30 +0.0 + 11 +14099.99997 + 21 +9206.698713 + 31 +0.0 + 0 +LINE + 5 +15CB + 8 +0 + 62 + 0 + 10 +14074.99997 + 20 +9249.999983 + 30 +0.0 + 11 +14074.99996 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +15CC + 8 +0 + 62 + 0 + 10 +14146.187982 + 20 +9170.0 + 30 +0.0 + 11 +14137.49997 + 21 +9185.048077 + 31 +0.0 + 0 +LINE + 5 +15CD + 8 +0 + 62 + 0 + 10 +14112.49997 + 20 +9228.349348 + 30 +0.0 + 11 +14099.99997 + 21 +9249.999983 + 31 +0.0 + 0 +LINE + 5 +15CE + 8 +0 + 62 + 0 + 10 +14149.99997 + 20 +9206.698713 + 30 +0.0 + 11 +14137.49997 + 21 +9228.349348 + 31 +0.0 + 0 +LINE + 5 +15CF + 8 +0 + 62 + 0 + 10 +14187.49997 + 20 +9185.048077 + 30 +0.0 + 11 +14174.99997 + 21 +9206.698712 + 31 +0.0 + 0 +LINE + 5 +15D0 + 8 +0 + 62 + 0 + 10 +14149.99997 + 20 +9249.999983 + 30 +0.0 + 11 +14149.99996 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +15D1 + 8 +0 + 62 + 0 + 10 +14221.187981 + 20 +9170.0 + 30 +0.0 + 11 +14212.49997 + 21 +9185.048077 + 31 +0.0 + 0 +LINE + 5 +15D2 + 8 +0 + 62 + 0 + 10 +14187.49997 + 20 +9228.349348 + 30 +0.0 + 11 +14174.99997 + 21 +9249.999983 + 31 +0.0 + 0 +LINE + 5 +15D3 + 8 +0 + 62 + 0 + 10 +14224.99997 + 20 +9206.698712 + 30 +0.0 + 11 +14212.49997 + 21 +9228.349347 + 31 +0.0 + 0 +LINE + 5 +15D4 + 8 +0 + 62 + 0 + 10 +14262.49997 + 20 +9185.048077 + 30 +0.0 + 11 +14249.99997 + 21 +9206.698712 + 31 +0.0 + 0 +LINE + 5 +15D5 + 8 +0 + 62 + 0 + 10 +14224.99997 + 20 +9249.999983 + 30 +0.0 + 11 +14224.99996 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +15D6 + 8 +0 + 62 + 0 + 10 +14296.187981 + 20 +9170.0 + 30 +0.0 + 11 +14287.49997 + 21 +9185.048077 + 31 +0.0 + 0 +LINE + 5 +15D7 + 8 +0 + 62 + 0 + 10 +14262.49997 + 20 +9228.349347 + 30 +0.0 + 11 +14249.99997 + 21 +9249.999982 + 31 +0.0 + 0 +LINE + 5 +15D8 + 8 +0 + 62 + 0 + 10 +14299.99997 + 20 +9206.698712 + 30 +0.0 + 11 +14287.49997 + 21 +9228.349347 + 31 +0.0 + 0 +LINE + 5 +15D9 + 8 +0 + 62 + 0 + 10 +14337.49997 + 20 +9185.048077 + 30 +0.0 + 11 +14324.99997 + 21 +9206.698712 + 31 +0.0 + 0 +LINE + 5 +15DA + 8 +0 + 62 + 0 + 10 +14299.99997 + 20 +9249.999982 + 30 +0.0 + 11 +14299.999959 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +15DB + 8 +0 + 62 + 0 + 10 +14371.187981 + 20 +9170.0 + 30 +0.0 + 11 +14362.499969 + 21 +9185.048077 + 31 +0.0 + 0 +LINE + 5 +15DC + 8 +0 + 62 + 0 + 10 +14337.499969 + 20 +9228.349347 + 30 +0.0 + 11 +14324.999969 + 21 +9249.999982 + 31 +0.0 + 0 +LINE + 5 +15DD + 8 +0 + 62 + 0 + 10 +14374.999969 + 20 +9206.698712 + 30 +0.0 + 11 +14362.499969 + 21 +9228.349347 + 31 +0.0 + 0 +LINE + 5 +15DE + 8 +0 + 62 + 0 + 10 +14412.499969 + 20 +9185.048077 + 30 +0.0 + 11 +14399.999969 + 21 +9206.698712 + 31 +0.0 + 0 +LINE + 5 +15DF + 8 +0 + 62 + 0 + 10 +14374.999969 + 20 +9249.999982 + 30 +0.0 + 11 +14374.999959 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +15E0 + 8 +0 + 62 + 0 + 10 +14446.18798 + 20 +9170.0 + 30 +0.0 + 11 +14437.499969 + 21 +9185.048077 + 31 +0.0 + 0 +LINE + 5 +15E1 + 8 +0 + 62 + 0 + 10 +14412.499969 + 20 +9228.349347 + 30 +0.0 + 11 +14399.999969 + 21 +9249.999982 + 31 +0.0 + 0 +LINE + 5 +15E2 + 8 +0 + 62 + 0 + 10 +14449.999969 + 20 +9206.698712 + 30 +0.0 + 11 +14437.499969 + 21 +9228.349347 + 31 +0.0 + 0 +LINE + 5 +15E3 + 8 +0 + 62 + 0 + 10 +14487.499969 + 20 +9185.048077 + 30 +0.0 + 11 +14474.999969 + 21 +9206.698712 + 31 +0.0 + 0 +LINE + 5 +15E4 + 8 +0 + 62 + 0 + 10 +14449.999969 + 20 +9249.999982 + 30 +0.0 + 11 +14449.999959 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +15E5 + 8 +0 + 62 + 0 + 10 +14521.18798 + 20 +9170.0 + 30 +0.0 + 11 +14512.499969 + 21 +9185.048077 + 31 +0.0 + 0 +LINE + 5 +15E6 + 8 +0 + 62 + 0 + 10 +14487.499969 + 20 +9228.349347 + 30 +0.0 + 11 +14474.999969 + 21 +9249.999982 + 31 +0.0 + 0 +LINE + 5 +15E7 + 8 +0 + 62 + 0 + 10 +14524.999969 + 20 +9206.698712 + 30 +0.0 + 11 +14512.499969 + 21 +9228.349347 + 31 +0.0 + 0 +LINE + 5 +15E8 + 8 +0 + 62 + 0 + 10 +14562.499969 + 20 +9185.048077 + 30 +0.0 + 11 +14549.999969 + 21 +9206.698712 + 31 +0.0 + 0 +LINE + 5 +15E9 + 8 +0 + 62 + 0 + 10 +14524.999969 + 20 +9249.999982 + 30 +0.0 + 11 +14524.999958 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +15EA + 8 +0 + 62 + 0 + 10 +14596.18798 + 20 +9170.0 + 30 +0.0 + 11 +14587.499969 + 21 +9185.048077 + 31 +0.0 + 0 +LINE + 5 +15EB + 8 +0 + 62 + 0 + 10 +14562.499969 + 20 +9228.349347 + 30 +0.0 + 11 +14549.999969 + 21 +9249.999982 + 31 +0.0 + 0 +LINE + 5 +15EC + 8 +0 + 62 + 0 + 10 +14599.999969 + 20 +9206.698712 + 30 +0.0 + 11 +14587.499969 + 21 +9228.349347 + 31 +0.0 + 0 +LINE + 5 +15ED + 8 +0 + 62 + 0 + 10 +14637.499969 + 20 +9185.048077 + 30 +0.0 + 11 +14624.999969 + 21 +9206.698712 + 31 +0.0 + 0 +LINE + 5 +15EE + 8 +0 + 62 + 0 + 10 +14599.999969 + 20 +9249.999982 + 30 +0.0 + 11 +14599.999958 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +15EF + 8 +0 + 62 + 0 + 10 +14671.187979 + 20 +9170.0 + 30 +0.0 + 11 +14662.499968 + 21 +9185.048077 + 31 +0.0 + 0 +LINE + 5 +15F0 + 8 +0 + 62 + 0 + 10 +14637.499968 + 20 +9228.349347 + 30 +0.0 + 11 +14624.999968 + 21 +9249.999982 + 31 +0.0 + 0 +LINE + 5 +15F1 + 8 +0 + 62 + 0 + 10 +14674.999968 + 20 +9206.698712 + 30 +0.0 + 11 +14662.499968 + 21 +9228.349347 + 31 +0.0 + 0 +LINE + 5 +15F2 + 8 +0 + 62 + 0 + 10 +14712.499968 + 20 +9185.048076 + 30 +0.0 + 11 +14699.999968 + 21 +9206.698712 + 31 +0.0 + 0 +LINE + 5 +15F3 + 8 +0 + 62 + 0 + 10 +14674.999968 + 20 +9249.999982 + 30 +0.0 + 11 +14674.999958 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +15F4 + 8 +0 + 62 + 0 + 10 +14746.187979 + 20 +9170.0 + 30 +0.0 + 11 +14737.499968 + 21 +9185.048076 + 31 +0.0 + 0 +LINE + 5 +15F5 + 8 +0 + 62 + 0 + 10 +14712.499968 + 20 +9228.349347 + 30 +0.0 + 11 +14699.999968 + 21 +9249.999982 + 31 +0.0 + 0 +LINE + 5 +15F6 + 8 +0 + 62 + 0 + 10 +14749.999968 + 20 +9206.698711 + 30 +0.0 + 11 +14737.499968 + 21 +9228.349347 + 31 +0.0 + 0 +LINE + 5 +15F7 + 8 +0 + 62 + 0 + 10 +14787.499968 + 20 +9185.048076 + 30 +0.0 + 11 +14774.999968 + 21 +9206.698711 + 31 +0.0 + 0 +LINE + 5 +15F8 + 8 +0 + 62 + 0 + 10 +14749.999968 + 20 +9249.999982 + 30 +0.0 + 11 +14749.999957 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +15F9 + 8 +0 + 62 + 0 + 10 +14821.187979 + 20 +9170.0 + 30 +0.0 + 11 +14812.499968 + 21 +9185.048076 + 31 +0.0 + 0 +LINE + 5 +15FA + 8 +0 + 62 + 0 + 10 +14787.499968 + 20 +9228.349346 + 30 +0.0 + 11 +14774.999968 + 21 +9249.999982 + 31 +0.0 + 0 +LINE + 5 +15FB + 8 +0 + 62 + 0 + 10 +14824.999968 + 20 +9206.698711 + 30 +0.0 + 11 +14812.499968 + 21 +9228.349346 + 31 +0.0 + 0 +LINE + 5 +15FC + 8 +0 + 62 + 0 + 10 +14862.499968 + 20 +9185.048076 + 30 +0.0 + 11 +14849.999968 + 21 +9206.698711 + 31 +0.0 + 0 +LINE + 5 +15FD + 8 +0 + 62 + 0 + 10 +14824.999968 + 20 +9249.999981 + 30 +0.0 + 11 +14824.999957 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +15FE + 8 +0 + 62 + 0 + 10 +14896.187978 + 20 +9170.0 + 30 +0.0 + 11 +14887.499968 + 21 +9185.048076 + 31 +0.0 + 0 +LINE + 5 +15FF + 8 +0 + 62 + 0 + 10 +14862.499968 + 20 +9228.349346 + 30 +0.0 + 11 +14849.999968 + 21 +9249.999981 + 31 +0.0 + 0 +LINE + 5 +1600 + 8 +0 + 62 + 0 + 10 +14899.999968 + 20 +9206.698711 + 30 +0.0 + 11 +14887.499968 + 21 +9228.349346 + 31 +0.0 + 0 +LINE + 5 +1601 + 8 +0 + 62 + 0 + 10 +14937.499968 + 20 +9185.048076 + 30 +0.0 + 11 +14924.999968 + 21 +9206.698711 + 31 +0.0 + 0 +LINE + 5 +1602 + 8 +0 + 62 + 0 + 10 +14899.999968 + 20 +9249.999981 + 30 +0.0 + 11 +14899.999957 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1603 + 8 +0 + 62 + 0 + 10 +14971.187978 + 20 +9170.0 + 30 +0.0 + 11 +14962.499967 + 21 +9185.048076 + 31 +0.0 + 0 +LINE + 5 +1604 + 8 +0 + 62 + 0 + 10 +14937.499967 + 20 +9228.349346 + 30 +0.0 + 11 +14924.999967 + 21 +9249.999981 + 31 +0.0 + 0 +LINE + 5 +1605 + 8 +0 + 62 + 0 + 10 +14974.999967 + 20 +9206.698711 + 30 +0.0 + 11 +14962.499967 + 21 +9228.349346 + 31 +0.0 + 0 +LINE + 5 +1606 + 8 +0 + 62 + 0 + 10 +15012.499967 + 20 +9185.048076 + 30 +0.0 + 11 +14999.999967 + 21 +9206.698711 + 31 +0.0 + 0 +LINE + 5 +1607 + 8 +0 + 62 + 0 + 10 +14974.999967 + 20 +9249.999981 + 30 +0.0 + 11 +14974.999956 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1608 + 8 +0 + 62 + 0 + 10 +15046.187978 + 20 +9170.0 + 30 +0.0 + 11 +15037.499967 + 21 +9185.048076 + 31 +0.0 + 0 +LINE + 5 +1609 + 8 +0 + 62 + 0 + 10 +15012.499967 + 20 +9228.349346 + 30 +0.0 + 11 +14999.999967 + 21 +9249.999981 + 31 +0.0 + 0 +LINE + 5 +160A + 8 +0 + 62 + 0 + 10 +15049.999967 + 20 +9206.698711 + 30 +0.0 + 11 +15037.499967 + 21 +9228.349346 + 31 +0.0 + 0 +LINE + 5 +160B + 8 +0 + 62 + 0 + 10 +15087.499967 + 20 +9185.048076 + 30 +0.0 + 11 +15074.999967 + 21 +9206.698711 + 31 +0.0 + 0 +LINE + 5 +160C + 8 +0 + 62 + 0 + 10 +15049.999967 + 20 +9249.999981 + 30 +0.0 + 11 +15049.999956 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +160D + 8 +0 + 62 + 0 + 10 +15121.187978 + 20 +9170.0 + 30 +0.0 + 11 +15112.499967 + 21 +9185.048076 + 31 +0.0 + 0 +LINE + 5 +160E + 8 +0 + 62 + 0 + 10 +15087.499967 + 20 +9228.349346 + 30 +0.0 + 11 +15074.999967 + 21 +9249.999981 + 31 +0.0 + 0 +LINE + 5 +160F + 8 +0 + 62 + 0 + 10 +15124.999967 + 20 +9206.698711 + 30 +0.0 + 11 +15112.499967 + 21 +9228.349346 + 31 +0.0 + 0 +LINE + 5 +1610 + 8 +0 + 62 + 0 + 10 +15162.499967 + 20 +9185.048076 + 30 +0.0 + 11 +15149.999967 + 21 +9206.698711 + 31 +0.0 + 0 +LINE + 5 +1611 + 8 +0 + 62 + 0 + 10 +15124.999967 + 20 +9249.999981 + 30 +0.0 + 11 +15124.999956 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1612 + 8 +0 + 62 + 0 + 10 +15196.187977 + 20 +9170.0 + 30 +0.0 + 11 +15187.499967 + 21 +9185.048076 + 31 +0.0 + 0 +LINE + 5 +1613 + 8 +0 + 62 + 0 + 10 +15162.499967 + 20 +9228.349346 + 30 +0.0 + 11 +15149.999967 + 21 +9249.999981 + 31 +0.0 + 0 +LINE + 5 +1614 + 8 +0 + 62 + 0 + 10 +15199.999967 + 20 +9206.698711 + 30 +0.0 + 11 +15187.499967 + 21 +9228.349346 + 31 +0.0 + 0 +LINE + 5 +1615 + 8 +0 + 62 + 0 + 10 +15237.499967 + 20 +9185.048075 + 30 +0.0 + 11 +15224.999967 + 21 +9206.698711 + 31 +0.0 + 0 +LINE + 5 +1616 + 8 +0 + 62 + 0 + 10 +15199.999967 + 20 +9249.999981 + 30 +0.0 + 11 +15199.999955 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1617 + 8 +0 + 62 + 0 + 10 +15271.187977 + 20 +9170.0 + 30 +0.0 + 11 +15262.499966 + 21 +9185.048075 + 31 +0.0 + 0 +LINE + 5 +1618 + 8 +0 + 62 + 0 + 10 +15237.499966 + 20 +9228.349346 + 30 +0.0 + 11 +15224.999966 + 21 +9249.999981 + 31 +0.0 + 0 +LINE + 5 +1619 + 8 +0 + 62 + 0 + 10 +15274.999966 + 20 +9206.69871 + 30 +0.0 + 11 +15262.499966 + 21 +9228.349346 + 31 +0.0 + 0 +LINE + 5 +161A + 8 +0 + 62 + 0 + 10 +15312.499966 + 20 +9185.048075 + 30 +0.0 + 11 +15299.999966 + 21 +9206.69871 + 31 +0.0 + 0 +LINE + 5 +161B + 8 +0 + 62 + 0 + 10 +15274.999966 + 20 +9249.999981 + 30 +0.0 + 11 +15274.999955 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +161C + 8 +0 + 62 + 0 + 10 +15346.187977 + 20 +9170.0 + 30 +0.0 + 11 +15337.499966 + 21 +9185.048075 + 31 +0.0 + 0 +LINE + 5 +161D + 8 +0 + 62 + 0 + 10 +15312.499966 + 20 +9228.349345 + 30 +0.0 + 11 +15299.999966 + 21 +9249.999981 + 31 +0.0 + 0 +LINE + 5 +161E + 8 +0 + 62 + 0 + 10 +15349.999966 + 20 +9206.69871 + 30 +0.0 + 11 +15337.499966 + 21 +9228.349345 + 31 +0.0 + 0 +LINE + 5 +161F + 8 +0 + 62 + 0 + 10 +15387.499966 + 20 +9185.048075 + 30 +0.0 + 11 +15374.999966 + 21 +9206.69871 + 31 +0.0 + 0 +LINE + 5 +1620 + 8 +0 + 62 + 0 + 10 +15349.999966 + 20 +9249.99998 + 30 +0.0 + 11 +15349.999955 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1621 + 8 +0 + 62 + 0 + 10 +15421.187976 + 20 +9170.0 + 30 +0.0 + 11 +15412.499966 + 21 +9185.048075 + 31 +0.0 + 0 +LINE + 5 +1622 + 8 +0 + 62 + 0 + 10 +15387.499966 + 20 +9228.349345 + 30 +0.0 + 11 +15374.999966 + 21 +9249.99998 + 31 +0.0 + 0 +LINE + 5 +1623 + 8 +0 + 62 + 0 + 10 +15424.999966 + 20 +9206.69871 + 30 +0.0 + 11 +15412.499966 + 21 +9228.349345 + 31 +0.0 + 0 +LINE + 5 +1624 + 8 +0 + 62 + 0 + 10 +15462.499966 + 20 +9185.048075 + 30 +0.0 + 11 +15449.999966 + 21 +9206.69871 + 31 +0.0 + 0 +LINE + 5 +1625 + 8 +0 + 62 + 0 + 10 +15424.999966 + 20 +9249.99998 + 30 +0.0 + 11 +15424.999954 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1626 + 8 +0 + 62 + 0 + 10 +15496.187976 + 20 +9170.0 + 30 +0.0 + 11 +15487.499966 + 21 +9185.048075 + 31 +0.0 + 0 +LINE + 5 +1627 + 8 +0 + 62 + 0 + 10 +15462.499966 + 20 +9228.349345 + 30 +0.0 + 11 +15449.999966 + 21 +9249.99998 + 31 +0.0 + 0 +LINE + 5 +1628 + 8 +0 + 62 + 0 + 10 +15499.999966 + 20 +9206.69871 + 30 +0.0 + 11 +15487.499966 + 21 +9228.349345 + 31 +0.0 + 0 +LINE + 5 +1629 + 8 +0 + 62 + 0 + 10 +15537.499966 + 20 +9185.048075 + 30 +0.0 + 11 +15524.999966 + 21 +9206.69871 + 31 +0.0 + 0 +LINE + 5 +162A + 8 +0 + 62 + 0 + 10 +15499.999966 + 20 +9249.99998 + 30 +0.0 + 11 +15499.999954 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +162B + 8 +0 + 62 + 0 + 10 +15571.187976 + 20 +9170.0 + 30 +0.0 + 11 +15562.499966 + 21 +9185.048075 + 31 +0.0 + 0 +LINE + 5 +162C + 8 +0 + 62 + 0 + 10 +15537.499966 + 20 +9228.349345 + 30 +0.0 + 11 +15524.999966 + 21 +9249.99998 + 31 +0.0 + 0 +LINE + 5 +162D + 8 +0 + 62 + 0 + 10 +15574.999965 + 20 +9206.69871 + 30 +0.0 + 11 +15562.499965 + 21 +9228.349345 + 31 +0.0 + 0 +LINE + 5 +162E + 8 +0 + 62 + 0 + 10 +15612.499965 + 20 +9185.048075 + 30 +0.0 + 11 +15599.999965 + 21 +9206.69871 + 31 +0.0 + 0 +LINE + 5 +162F + 8 +0 + 62 + 0 + 10 +15574.999965 + 20 +9249.99998 + 30 +0.0 + 11 +15574.999954 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1630 + 8 +0 + 62 + 0 + 10 +15646.187975 + 20 +9170.0 + 30 +0.0 + 11 +15637.499965 + 21 +9185.048075 + 31 +0.0 + 0 +LINE + 5 +1631 + 8 +0 + 62 + 0 + 10 +15612.499965 + 20 +9228.349345 + 30 +0.0 + 11 +15599.999965 + 21 +9249.99998 + 31 +0.0 + 0 +LINE + 5 +1632 + 8 +0 + 62 + 0 + 10 +15649.999965 + 20 +9206.69871 + 30 +0.0 + 11 +15637.499965 + 21 +9228.349345 + 31 +0.0 + 0 +LINE + 5 +1633 + 8 +0 + 62 + 0 + 10 +15687.499965 + 20 +9185.048075 + 30 +0.0 + 11 +15674.999965 + 21 +9206.69871 + 31 +0.0 + 0 +LINE + 5 +1634 + 8 +0 + 62 + 0 + 10 +15649.999965 + 20 +9249.99998 + 30 +0.0 + 11 +15649.999953 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1635 + 8 +0 + 62 + 0 + 10 +15721.187975 + 20 +9170.0 + 30 +0.0 + 11 +15712.499965 + 21 +9185.048075 + 31 +0.0 + 0 +LINE + 5 +1636 + 8 +0 + 62 + 0 + 10 +15687.499965 + 20 +9228.349345 + 30 +0.0 + 11 +15674.999965 + 21 +9249.99998 + 31 +0.0 + 0 +LINE + 5 +1637 + 8 +0 + 62 + 0 + 10 +15724.999965 + 20 +9206.69871 + 30 +0.0 + 11 +15712.499965 + 21 +9228.349345 + 31 +0.0 + 0 +LINE + 5 +1638 + 8 +0 + 62 + 0 + 10 +15762.499965 + 20 +9185.048074 + 30 +0.0 + 11 +15749.999965 + 21 +9206.69871 + 31 +0.0 + 0 +LINE + 5 +1639 + 8 +0 + 62 + 0 + 10 +15724.999965 + 20 +9249.99998 + 30 +0.0 + 11 +15724.999953 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +163A + 8 +0 + 62 + 0 + 10 +15796.187975 + 20 +9170.0 + 30 +0.0 + 11 +15787.499965 + 21 +9185.048074 + 31 +0.0 + 0 +LINE + 5 +163B + 8 +0 + 62 + 0 + 10 +15762.499965 + 20 +9228.349345 + 30 +0.0 + 11 +15749.999965 + 21 +9249.99998 + 31 +0.0 + 0 +LINE + 5 +163C + 8 +0 + 62 + 0 + 10 +15799.999965 + 20 +9206.698709 + 30 +0.0 + 11 +15787.499965 + 21 +9228.349345 + 31 +0.0 + 0 +LINE + 5 +163D + 8 +0 + 62 + 0 + 10 +15837.499965 + 20 +9185.048074 + 30 +0.0 + 11 +15824.999965 + 21 +9206.698709 + 31 +0.0 + 0 +LINE + 5 +163E + 8 +0 + 62 + 0 + 10 +15799.999965 + 20 +9249.99998 + 30 +0.0 + 11 +15799.999953 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +163F + 8 +0 + 62 + 0 + 10 +15871.187974 + 20 +9170.0 + 30 +0.0 + 11 +15862.499965 + 21 +9185.048074 + 31 +0.0 + 0 +LINE + 5 +1640 + 8 +0 + 62 + 0 + 10 +15837.499965 + 20 +9228.349344 + 30 +0.0 + 11 +15824.999965 + 21 +9249.99998 + 31 +0.0 + 0 +LINE + 5 +1641 + 8 +0 + 62 + 0 + 10 +15874.999964 + 20 +9206.698709 + 30 +0.0 + 11 +15862.499964 + 21 +9228.349344 + 31 +0.0 + 0 +LINE + 5 +1642 + 8 +0 + 62 + 0 + 10 +15912.499964 + 20 +9185.048074 + 30 +0.0 + 11 +15899.999964 + 21 +9206.698709 + 31 +0.0 + 0 +LINE + 5 +1643 + 8 +0 + 62 + 0 + 10 +15874.999964 + 20 +9249.999979 + 30 +0.0 + 11 +15874.999952 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1644 + 8 +0 + 62 + 0 + 10 +15946.187974 + 20 +9170.0 + 30 +0.0 + 11 +15937.499964 + 21 +9185.048074 + 31 +0.0 + 0 +LINE + 5 +1645 + 8 +0 + 62 + 0 + 10 +15912.499964 + 20 +9228.349344 + 30 +0.0 + 11 +15899.999964 + 21 +9249.999979 + 31 +0.0 + 0 +LINE + 5 +1646 + 8 +0 + 62 + 0 + 10 +15949.999964 + 20 +9206.698709 + 30 +0.0 + 11 +15937.499964 + 21 +9228.349344 + 31 +0.0 + 0 +LINE + 5 +1647 + 8 +0 + 62 + 0 + 10 +15987.499964 + 20 +9185.048074 + 30 +0.0 + 11 +15974.999964 + 21 +9206.698709 + 31 +0.0 + 0 +LINE + 5 +1648 + 8 +0 + 62 + 0 + 10 +15949.999964 + 20 +9249.999979 + 30 +0.0 + 11 +15949.999952 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1649 + 8 +0 + 62 + 0 + 10 +16021.187974 + 20 +9170.0 + 30 +0.0 + 11 +16012.499964 + 21 +9185.048074 + 31 +0.0 + 0 +LINE + 5 +164A + 8 +0 + 62 + 0 + 10 +15987.499964 + 20 +9228.349344 + 30 +0.0 + 11 +15974.999964 + 21 +9249.999979 + 31 +0.0 + 0 +LINE + 5 +164B + 8 +0 + 62 + 0 + 10 +16024.999964 + 20 +9206.698709 + 30 +0.0 + 11 +16012.499964 + 21 +9228.349344 + 31 +0.0 + 0 +LINE + 5 +164C + 8 +0 + 62 + 0 + 10 +16062.499964 + 20 +9185.048074 + 30 +0.0 + 11 +16049.999964 + 21 +9206.698709 + 31 +0.0 + 0 +LINE + 5 +164D + 8 +0 + 62 + 0 + 10 +16024.999964 + 20 +9249.999979 + 30 +0.0 + 11 +16024.999952 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +164E + 8 +0 + 62 + 0 + 10 +16096.187973 + 20 +9170.0 + 30 +0.0 + 11 +16087.499964 + 21 +9185.048074 + 31 +0.0 + 0 +LINE + 5 +164F + 8 +0 + 62 + 0 + 10 +16062.499964 + 20 +9228.349344 + 30 +0.0 + 11 +16049.999964 + 21 +9249.999979 + 31 +0.0 + 0 +LINE + 5 +1650 + 8 +0 + 62 + 0 + 10 +16099.999964 + 20 +9206.698709 + 30 +0.0 + 11 +16087.499964 + 21 +9228.349344 + 31 +0.0 + 0 +LINE + 5 +1651 + 8 +0 + 62 + 0 + 10 +16126.25 + 20 +9204.533582 + 30 +0.0 + 11 +16124.999964 + 21 +9206.698709 + 31 +0.0 + 0 +LINE + 5 +1652 + 8 +0 + 62 + 0 + 10 +16099.999964 + 20 +9249.999979 + 30 +0.0 + 11 +16099.999951 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1653 + 8 +0 + 62 + 0 + 10 +16126.25 + 20 +9247.834852 + 30 +0.0 + 11 +16124.999964 + 21 +9249.999979 + 31 +0.0 + 0 +LINE + 5 +1654 + 8 +0 + 62 + 0 + 10 +13653.81194 + 20 +9170.0 + 30 +0.0 + 11 +13662.499971 + 21 +9185.048111 + 31 +0.0 + 0 +LINE + 5 +1655 + 8 +0 + 62 + 0 + 10 +13687.499971 + 20 +9228.349381 + 30 +0.0 + 11 +13699.999962 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1656 + 8 +0 + 62 + 0 + 10 +13649.999972 + 20 +9206.698746 + 30 +0.0 + 11 +13662.499972 + 21 +9228.349381 + 31 +0.0 + 0 +LINE + 5 +1657 + 8 +0 + 62 + 0 + 10 +13612.499972 + 20 +9185.048111 + 30 +0.0 + 11 +13624.999972 + 21 +9206.698746 + 31 +0.0 + 0 +LINE + 5 +1658 + 8 +0 + 62 + 0 + 10 +13578.811941 + 20 +9170.0 + 30 +0.0 + 11 +13587.499972 + 21 +9185.048111 + 31 +0.0 + 0 +LINE + 5 +1659 + 8 +0 + 62 + 0 + 10 +13612.499972 + 20 +9228.349381 + 30 +0.0 + 11 +13624.999962 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +165A + 8 +0 + 62 + 0 + 10 +13574.999972 + 20 +9206.698746 + 30 +0.0 + 11 +13587.499972 + 21 +9228.349381 + 31 +0.0 + 0 +LINE + 5 +165B + 8 +0 + 62 + 0 + 10 +13537.499972 + 20 +9185.048111 + 30 +0.0 + 11 +13549.999972 + 21 +9206.698746 + 31 +0.0 + 0 +LINE + 5 +165C + 8 +0 + 62 + 0 + 10 +13503.811941 + 20 +9170.0 + 30 +0.0 + 11 +13512.499972 + 21 +9185.048111 + 31 +0.0 + 0 +LINE + 5 +165D + 8 +0 + 62 + 0 + 10 +13537.499972 + 20 +9228.349381 + 30 +0.0 + 11 +13549.999963 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +165E + 8 +0 + 62 + 0 + 10 +13499.999972 + 20 +9206.698746 + 30 +0.0 + 11 +13512.499972 + 21 +9228.349381 + 31 +0.0 + 0 +LINE + 5 +165F + 8 +0 + 62 + 0 + 10 +13462.499972 + 20 +9185.048111 + 30 +0.0 + 11 +13474.999972 + 21 +9206.698746 + 31 +0.0 + 0 +LINE + 5 +1660 + 8 +0 + 62 + 0 + 10 +13428.811941 + 20 +9170.0 + 30 +0.0 + 11 +13437.499972 + 21 +9185.048111 + 31 +0.0 + 0 +LINE + 5 +1661 + 8 +0 + 62 + 0 + 10 +13462.499972 + 20 +9228.349381 + 30 +0.0 + 11 +13474.999963 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1662 + 8 +0 + 62 + 0 + 10 +13424.999972 + 20 +9206.698746 + 30 +0.0 + 11 +13437.499972 + 21 +9228.349381 + 31 +0.0 + 0 +LINE + 5 +1663 + 8 +0 + 62 + 0 + 10 +13387.499972 + 20 +9185.048111 + 30 +0.0 + 11 +13399.999972 + 21 +9206.698746 + 31 +0.0 + 0 +LINE + 5 +1664 + 8 +0 + 62 + 0 + 10 +13353.811942 + 20 +9170.0 + 30 +0.0 + 11 +13362.499972 + 21 +9185.048111 + 31 +0.0 + 0 +LINE + 5 +1665 + 8 +0 + 62 + 0 + 10 +13387.499972 + 20 +9228.349381 + 30 +0.0 + 11 +13399.999963 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1666 + 8 +0 + 62 + 0 + 10 +13349.999973 + 20 +9206.698746 + 30 +0.0 + 11 +13362.499973 + 21 +9228.349381 + 31 +0.0 + 0 +LINE + 5 +1667 + 8 +0 + 62 + 0 + 10 +13312.499973 + 20 +9185.048111 + 30 +0.0 + 11 +13324.999973 + 21 +9206.698746 + 31 +0.0 + 0 +LINE + 5 +1668 + 8 +0 + 62 + 0 + 10 +13278.811942 + 20 +9170.0 + 30 +0.0 + 11 +13287.499973 + 21 +9185.04811 + 31 +0.0 + 0 +LINE + 5 +1669 + 8 +0 + 62 + 0 + 10 +13312.499973 + 20 +9228.349381 + 30 +0.0 + 11 +13324.999964 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +166A + 8 +0 + 62 + 0 + 10 +13274.999973 + 20 +9206.698746 + 30 +0.0 + 11 +13287.499973 + 21 +9228.349381 + 31 +0.0 + 0 +LINE + 5 +166B + 8 +0 + 62 + 0 + 10 +13237.499973 + 20 +9185.04811 + 30 +0.0 + 11 +13249.999973 + 21 +9206.698745 + 31 +0.0 + 0 +LINE + 5 +166C + 8 +0 + 62 + 0 + 10 +13203.811942 + 20 +9170.0 + 30 +0.0 + 11 +13212.499973 + 21 +9185.04811 + 31 +0.0 + 0 +LINE + 5 +166D + 8 +0 + 62 + 0 + 10 +13237.499973 + 20 +9228.349381 + 30 +0.0 + 11 +13249.999964 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +166E + 8 +0 + 62 + 0 + 10 +13199.999973 + 20 +9206.698745 + 30 +0.0 + 11 +13212.499973 + 21 +9228.34938 + 31 +0.0 + 0 +LINE + 5 +166F + 8 +0 + 62 + 0 + 10 +13162.499973 + 20 +9185.04811 + 30 +0.0 + 11 +13174.999973 + 21 +9206.698745 + 31 +0.0 + 0 +LINE + 5 +1670 + 8 +0 + 62 + 0 + 10 +13128.811943 + 20 +9170.0 + 30 +0.0 + 11 +13137.499973 + 21 +9185.04811 + 31 +0.0 + 0 +LINE + 5 +1671 + 8 +0 + 62 + 0 + 10 +13162.499973 + 20 +9228.34938 + 30 +0.0 + 11 +13174.999964 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1672 + 8 +0 + 62 + 0 + 10 +13124.999973 + 20 +9206.698745 + 30 +0.0 + 11 +13137.499973 + 21 +9228.34938 + 31 +0.0 + 0 +LINE + 5 +1673 + 8 +0 + 62 + 0 + 10 +13087.499973 + 20 +9185.04811 + 30 +0.0 + 11 +13099.999973 + 21 +9206.698745 + 31 +0.0 + 0 +LINE + 5 +1674 + 8 +0 + 62 + 0 + 10 +13053.811943 + 20 +9170.0 + 30 +0.0 + 11 +13062.499973 + 21 +9185.04811 + 31 +0.0 + 0 +LINE + 5 +1675 + 8 +0 + 62 + 0 + 10 +13087.499973 + 20 +9228.34938 + 30 +0.0 + 11 +13099.999965 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1676 + 8 +0 + 62 + 0 + 10 +13049.999974 + 20 +9206.698745 + 30 +0.0 + 11 +13062.499974 + 21 +9228.34938 + 31 +0.0 + 0 +LINE + 5 +1677 + 8 +0 + 62 + 0 + 10 +13012.499974 + 20 +9185.04811 + 30 +0.0 + 11 +13024.999974 + 21 +9206.698745 + 31 +0.0 + 0 +LINE + 5 +1678 + 8 +0 + 62 + 0 + 10 +12978.811943 + 20 +9170.0 + 30 +0.0 + 11 +12987.499974 + 21 +9185.04811 + 31 +0.0 + 0 +LINE + 5 +1679 + 8 +0 + 62 + 0 + 10 +13012.499974 + 20 +9228.34938 + 30 +0.0 + 11 +13024.999965 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +167A + 8 +0 + 62 + 0 + 10 +12974.999974 + 20 +9206.698745 + 30 +0.0 + 11 +12987.499974 + 21 +9228.34938 + 31 +0.0 + 0 +LINE + 5 +167B + 8 +0 + 62 + 0 + 10 +12937.499974 + 20 +9185.04811 + 30 +0.0 + 11 +12949.999974 + 21 +9206.698745 + 31 +0.0 + 0 +LINE + 5 +167C + 8 +0 + 62 + 0 + 10 +12903.811944 + 20 +9170.0 + 30 +0.0 + 11 +12912.499974 + 21 +9185.04811 + 31 +0.0 + 0 +LINE + 5 +167D + 8 +0 + 62 + 0 + 10 +12937.499974 + 20 +9228.34938 + 30 +0.0 + 11 +12949.999965 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +167E + 8 +0 + 62 + 0 + 10 +12899.999974 + 20 +9206.698745 + 30 +0.0 + 11 +12912.499974 + 21 +9228.34938 + 31 +0.0 + 0 +LINE + 5 +167F + 8 +0 + 62 + 0 + 10 +12862.499974 + 20 +9185.04811 + 30 +0.0 + 11 +12874.999974 + 21 +9206.698745 + 31 +0.0 + 0 +LINE + 5 +1680 + 8 +0 + 62 + 0 + 10 +12828.811944 + 20 +9170.0 + 30 +0.0 + 11 +12837.499974 + 21 +9185.04811 + 31 +0.0 + 0 +LINE + 5 +1681 + 8 +0 + 62 + 0 + 10 +12862.499974 + 20 +9228.34938 + 30 +0.0 + 11 +12874.999966 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1682 + 8 +0 + 62 + 0 + 10 +12824.999974 + 20 +9206.698745 + 30 +0.0 + 11 +12837.499974 + 21 +9228.34938 + 31 +0.0 + 0 +LINE + 5 +1683 + 8 +0 + 62 + 0 + 10 +12787.499974 + 20 +9185.04811 + 30 +0.0 + 11 +12799.999974 + 21 +9206.698745 + 31 +0.0 + 0 +LINE + 5 +1684 + 8 +0 + 62 + 0 + 10 +12753.811944 + 20 +9170.0 + 30 +0.0 + 11 +12762.499974 + 21 +9185.048109 + 31 +0.0 + 0 +LINE + 5 +1685 + 8 +0 + 62 + 0 + 10 +12787.499974 + 20 +9228.34938 + 30 +0.0 + 11 +12799.999966 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1686 + 8 +0 + 62 + 0 + 10 +12749.999975 + 20 +9206.698745 + 30 +0.0 + 11 +12762.499975 + 21 +9228.34938 + 31 +0.0 + 0 +LINE + 5 +1687 + 8 +0 + 62 + 0 + 10 +12712.499975 + 20 +9185.048109 + 30 +0.0 + 11 +12724.999975 + 21 +9206.698744 + 31 +0.0 + 0 +LINE + 5 +1688 + 8 +0 + 62 + 0 + 10 +12678.811945 + 20 +9170.0 + 30 +0.0 + 11 +12687.499975 + 21 +9185.048109 + 31 +0.0 + 0 +LINE + 5 +1689 + 8 +0 + 62 + 0 + 10 +12712.499975 + 20 +9228.34938 + 30 +0.0 + 11 +12724.999966 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +168A + 8 +0 + 62 + 0 + 10 +12674.999975 + 20 +9206.698744 + 30 +0.0 + 11 +12687.499975 + 21 +9228.349379 + 31 +0.0 + 0 +LINE + 5 +168B + 8 +0 + 62 + 0 + 10 +12637.499975 + 20 +9185.048109 + 30 +0.0 + 11 +12649.999975 + 21 +9206.698744 + 31 +0.0 + 0 +LINE + 5 +168C + 8 +0 + 62 + 0 + 10 +12603.811945 + 20 +9170.0 + 30 +0.0 + 11 +12612.499975 + 21 +9185.048109 + 31 +0.0 + 0 +LINE + 5 +168D + 8 +0 + 62 + 0 + 10 +12637.499975 + 20 +9228.349379 + 30 +0.0 + 11 +12649.999967 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +168E + 8 +0 + 62 + 0 + 10 +12599.999975 + 20 +9206.698744 + 30 +0.0 + 11 +12612.499975 + 21 +9228.349379 + 31 +0.0 + 0 +LINE + 5 +168F + 8 +0 + 62 + 0 + 10 +12562.499975 + 20 +9185.048109 + 30 +0.0 + 11 +12574.999975 + 21 +9206.698744 + 31 +0.0 + 0 +LINE + 5 +1690 + 8 +0 + 62 + 0 + 10 +12528.811945 + 20 +9170.0 + 30 +0.0 + 11 +12537.499975 + 21 +9185.048109 + 31 +0.0 + 0 +LINE + 5 +1691 + 8 +0 + 62 + 0 + 10 +12562.499975 + 20 +9228.349379 + 30 +0.0 + 11 +12574.999967 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1692 + 8 +0 + 62 + 0 + 10 +12524.999975 + 20 +9206.698744 + 30 +0.0 + 11 +12537.499975 + 21 +9228.349379 + 31 +0.0 + 0 +LINE + 5 +1693 + 8 +0 + 62 + 0 + 10 +12487.499975 + 20 +9185.048109 + 30 +0.0 + 11 +12499.999975 + 21 +9206.698744 + 31 +0.0 + 0 +LINE + 5 +1694 + 8 +0 + 62 + 0 + 10 +12453.811946 + 20 +9170.0 + 30 +0.0 + 11 +12462.499975 + 21 +9185.048109 + 31 +0.0 + 0 +LINE + 5 +1695 + 8 +0 + 62 + 0 + 10 +12487.499975 + 20 +9228.349379 + 30 +0.0 + 11 +12499.999967 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1696 + 8 +0 + 62 + 0 + 10 +12449.999976 + 20 +9206.698744 + 30 +0.0 + 11 +12462.499976 + 21 +9228.349379 + 31 +0.0 + 0 +LINE + 5 +1697 + 8 +0 + 62 + 0 + 10 +12412.499976 + 20 +9185.048109 + 30 +0.0 + 11 +12424.999976 + 21 +9206.698744 + 31 +0.0 + 0 +LINE + 5 +1698 + 8 +0 + 62 + 0 + 10 +12378.811946 + 20 +9170.0 + 30 +0.0 + 11 +12387.499976 + 21 +9185.048109 + 31 +0.0 + 0 +LINE + 5 +1699 + 8 +0 + 62 + 0 + 10 +12412.499976 + 20 +9228.349379 + 30 +0.0 + 11 +12424.999968 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +169A + 8 +0 + 62 + 0 + 10 +12374.999976 + 20 +9206.698744 + 30 +0.0 + 11 +12387.499976 + 21 +9228.349379 + 31 +0.0 + 0 +LINE + 5 +169B + 8 +0 + 62 + 0 + 10 +12337.499976 + 20 +9185.048109 + 30 +0.0 + 11 +12349.999976 + 21 +9206.698744 + 31 +0.0 + 0 +LINE + 5 +169C + 8 +0 + 62 + 0 + 10 +12303.811946 + 20 +9170.0 + 30 +0.0 + 11 +12312.499976 + 21 +9185.048109 + 31 +0.0 + 0 +LINE + 5 +169D + 8 +0 + 62 + 0 + 10 +12337.499976 + 20 +9228.349379 + 30 +0.0 + 11 +12349.999968 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +169E + 8 +0 + 62 + 0 + 10 +12299.999976 + 20 +9206.698744 + 30 +0.0 + 11 +12312.499976 + 21 +9228.349379 + 31 +0.0 + 0 +LINE + 5 +169F + 8 +0 + 62 + 0 + 10 +12262.499976 + 20 +9185.048109 + 30 +0.0 + 11 +12274.999976 + 21 +9206.698744 + 31 +0.0 + 0 +LINE + 5 +16A0 + 8 +0 + 62 + 0 + 10 +12228.811947 + 20 +9170.0 + 30 +0.0 + 11 +12237.499976 + 21 +9185.048108 + 31 +0.0 + 0 +LINE + 5 +16A1 + 8 +0 + 62 + 0 + 10 +12262.499976 + 20 +9228.349379 + 30 +0.0 + 11 +12274.999968 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +16A2 + 8 +0 + 62 + 0 + 10 +12224.999976 + 20 +9206.698744 + 30 +0.0 + 11 +12237.499976 + 21 +9228.349379 + 31 +0.0 + 0 +LINE + 5 +16A3 + 8 +0 + 62 + 0 + 10 +12187.499976 + 20 +9185.048108 + 30 +0.0 + 11 +12199.999976 + 21 +9206.698743 + 31 +0.0 + 0 +LINE + 5 +16A4 + 8 +0 + 62 + 0 + 10 +12153.811947 + 20 +9170.0 + 30 +0.0 + 11 +12162.499976 + 21 +9185.048108 + 31 +0.0 + 0 +LINE + 5 +16A5 + 8 +0 + 62 + 0 + 10 +12187.499976 + 20 +9228.349379 + 30 +0.0 + 11 +12199.999969 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +16A6 + 8 +0 + 62 + 0 + 10 +12149.999976 + 20 +9206.698743 + 30 +0.0 + 11 +12162.499976 + 21 +9228.349378 + 31 +0.0 + 0 +LINE + 5 +16A7 + 8 +0 + 62 + 0 + 10 +12112.499977 + 20 +9185.048108 + 30 +0.0 + 11 +12124.999977 + 21 +9206.698743 + 31 +0.0 + 0 +LINE + 5 +16A8 + 8 +0 + 62 + 0 + 10 +12078.811947 + 20 +9170.0 + 30 +0.0 + 11 +12087.499977 + 21 +9185.048108 + 31 +0.0 + 0 +LINE + 5 +16A9 + 8 +0 + 62 + 0 + 10 +12112.499977 + 20 +9228.349378 + 30 +0.0 + 11 +12124.999969 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +16AA + 8 +0 + 62 + 0 + 10 +12074.999977 + 20 +9206.698743 + 30 +0.0 + 11 +12087.499977 + 21 +9228.349378 + 31 +0.0 + 0 +LINE + 5 +16AB + 8 +0 + 62 + 0 + 10 +12037.499977 + 20 +9185.048108 + 30 +0.0 + 11 +12049.999977 + 21 +9206.698743 + 31 +0.0 + 0 +LINE + 5 +16AC + 8 +0 + 62 + 0 + 10 +12003.811948 + 20 +9170.0 + 30 +0.0 + 11 +12012.499977 + 21 +9185.048108 + 31 +0.0 + 0 +LINE + 5 +16AD + 8 +0 + 62 + 0 + 10 +12037.499977 + 20 +9228.349378 + 30 +0.0 + 11 +12049.999969 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +16AE + 8 +0 + 62 + 0 + 10 +11999.999977 + 20 +9206.698743 + 30 +0.0 + 11 +12012.499977 + 21 +9228.349378 + 31 +0.0 + 0 +LINE + 5 +16AF + 8 +0 + 62 + 0 + 10 +11962.499977 + 20 +9185.048108 + 30 +0.0 + 11 +11974.999977 + 21 +9206.698743 + 31 +0.0 + 0 +LINE + 5 +16B0 + 8 +0 + 62 + 0 + 10 +11928.811948 + 20 +9170.0 + 30 +0.0 + 11 +11937.499977 + 21 +9185.048108 + 31 +0.0 + 0 +LINE + 5 +16B1 + 8 +0 + 62 + 0 + 10 +11962.499977 + 20 +9228.349378 + 30 +0.0 + 11 +11974.99997 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +16B2 + 8 +0 + 62 + 0 + 10 +11924.999977 + 20 +9206.698743 + 30 +0.0 + 11 +11937.499977 + 21 +9228.349378 + 31 +0.0 + 0 +LINE + 5 +16B3 + 8 +0 + 62 + 0 + 10 +11887.499977 + 20 +9185.048108 + 30 +0.0 + 11 +11899.999977 + 21 +9206.698743 + 31 +0.0 + 0 +LINE + 5 +16B4 + 8 +0 + 62 + 0 + 10 +11853.811948 + 20 +9170.0 + 30 +0.0 + 11 +11862.499977 + 21 +9185.048108 + 31 +0.0 + 0 +LINE + 5 +16B5 + 8 +0 + 62 + 0 + 10 +11887.499977 + 20 +9228.349378 + 30 +0.0 + 11 +11899.99997 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +16B6 + 8 +0 + 62 + 0 + 10 +11849.999977 + 20 +9206.698743 + 30 +0.0 + 11 +11862.499977 + 21 +9228.349378 + 31 +0.0 + 0 +LINE + 5 +16B7 + 8 +0 + 62 + 0 + 10 +11812.499978 + 20 +9185.048108 + 30 +0.0 + 11 +11824.999978 + 21 +9206.698743 + 31 +0.0 + 0 +LINE + 5 +16B8 + 8 +0 + 62 + 0 + 10 +11778.811949 + 20 +9170.0 + 30 +0.0 + 11 +11787.499978 + 21 +9185.048108 + 31 +0.0 + 0 +LINE + 5 +16B9 + 8 +0 + 62 + 0 + 10 +11812.499978 + 20 +9228.349378 + 30 +0.0 + 11 +11824.99997 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +16BA + 8 +0 + 62 + 0 + 10 +11774.999978 + 20 +9206.698743 + 30 +0.0 + 11 +11787.499978 + 21 +9228.349378 + 31 +0.0 + 0 +LINE + 5 +16BB + 8 +0 + 62 + 0 + 10 +11737.499978 + 20 +9185.048108 + 30 +0.0 + 11 +11749.999978 + 21 +9206.698743 + 31 +0.0 + 0 +LINE + 5 +16BC + 8 +0 + 62 + 0 + 10 +11703.811949 + 20 +9170.0 + 30 +0.0 + 11 +11712.499978 + 21 +9185.048107 + 31 +0.0 + 0 +LINE + 5 +16BD + 8 +0 + 62 + 0 + 10 +11737.499978 + 20 +9228.349378 + 30 +0.0 + 11 +11749.999971 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +16BE + 8 +0 + 62 + 0 + 10 +11699.999978 + 20 +9206.698743 + 30 +0.0 + 11 +11712.499978 + 21 +9228.349378 + 31 +0.0 + 0 +LINE + 5 +16BF + 8 +0 + 62 + 0 + 10 +11662.499978 + 20 +9185.048107 + 30 +0.0 + 11 +11674.999978 + 21 +9206.698742 + 31 +0.0 + 0 +LINE + 5 +16C0 + 8 +0 + 62 + 0 + 10 +11628.811949 + 20 +9170.0 + 30 +0.0 + 11 +11637.499978 + 21 +9185.048107 + 31 +0.0 + 0 +LINE + 5 +16C1 + 8 +0 + 62 + 0 + 10 +11662.499978 + 20 +9228.349378 + 30 +0.0 + 11 +11674.999971 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +16C2 + 8 +0 + 62 + 0 + 10 +11624.999978 + 20 +9206.698742 + 30 +0.0 + 11 +11637.499978 + 21 +9228.349377 + 31 +0.0 + 0 +LINE + 5 +16C3 + 8 +0 + 62 + 0 + 10 +11587.499978 + 20 +9185.048107 + 30 +0.0 + 11 +11599.999978 + 21 +9206.698742 + 31 +0.0 + 0 +LINE + 5 +16C4 + 8 +0 + 62 + 0 + 10 +11553.81195 + 20 +9170.0 + 30 +0.0 + 11 +11562.499978 + 21 +9185.048107 + 31 +0.0 + 0 +LINE + 5 +16C5 + 8 +0 + 62 + 0 + 10 +11587.499978 + 20 +9228.349377 + 30 +0.0 + 11 +11599.999971 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +16C6 + 8 +0 + 62 + 0 + 10 +11549.999978 + 20 +9206.698742 + 30 +0.0 + 11 +11562.499978 + 21 +9228.349377 + 31 +0.0 + 0 +LINE + 5 +16C7 + 8 +0 + 62 + 0 + 10 +11512.499979 + 20 +9185.048107 + 30 +0.0 + 11 +11524.999979 + 21 +9206.698742 + 31 +0.0 + 0 +LINE + 5 +16C8 + 8 +0 + 62 + 0 + 10 +11478.81195 + 20 +9170.0 + 30 +0.0 + 11 +11487.499979 + 21 +9185.048107 + 31 +0.0 + 0 +LINE + 5 +16C9 + 8 +0 + 62 + 0 + 10 +11512.499979 + 20 +9228.349377 + 30 +0.0 + 11 +11524.999971 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +16CA + 8 +0 + 62 + 0 + 10 +11474.999979 + 20 +9206.698742 + 30 +0.0 + 11 +11487.499979 + 21 +9228.349377 + 31 +0.0 + 0 +LINE + 5 +16CB + 8 +0 + 62 + 0 + 10 +11437.499979 + 20 +9185.048107 + 30 +0.0 + 11 +11449.999979 + 21 +9206.698742 + 31 +0.0 + 0 +LINE + 5 +16CC + 8 +0 + 62 + 0 + 10 +11403.81195 + 20 +9170.0 + 30 +0.0 + 11 +11412.499979 + 21 +9185.048107 + 31 +0.0 + 0 +LINE + 5 +16CD + 8 +0 + 62 + 0 + 10 +11437.499979 + 20 +9228.349377 + 30 +0.0 + 11 +11449.999972 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +16CE + 8 +0 + 62 + 0 + 10 +11399.999979 + 20 +9206.698742 + 30 +0.0 + 11 +11412.499979 + 21 +9228.349377 + 31 +0.0 + 0 +LINE + 5 +16CF + 8 +0 + 62 + 0 + 10 +11362.499979 + 20 +9185.048107 + 30 +0.0 + 11 +11374.999979 + 21 +9206.698742 + 31 +0.0 + 0 +LINE + 5 +16D0 + 8 +0 + 62 + 0 + 10 +11328.811951 + 20 +9170.0 + 30 +0.0 + 11 +11337.499979 + 21 +9185.048107 + 31 +0.0 + 0 +LINE + 5 +16D1 + 8 +0 + 62 + 0 + 10 +11362.499979 + 20 +9228.349377 + 30 +0.0 + 11 +11374.999972 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +16D2 + 8 +0 + 62 + 0 + 10 +11324.999979 + 20 +9206.698742 + 30 +0.0 + 11 +11337.499979 + 21 +9228.349377 + 31 +0.0 + 0 +LINE + 5 +16D3 + 8 +0 + 62 + 0 + 10 +11287.499979 + 20 +9185.048107 + 30 +0.0 + 11 +11299.999979 + 21 +9206.698742 + 31 +0.0 + 0 +LINE + 5 +16D4 + 8 +0 + 62 + 0 + 10 +11253.811951 + 20 +9170.0 + 30 +0.0 + 11 +11262.499979 + 21 +9185.048107 + 31 +0.0 + 0 +LINE + 5 +16D5 + 8 +0 + 62 + 0 + 10 +11287.499979 + 20 +9228.349377 + 30 +0.0 + 11 +11299.999972 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +16D6 + 8 +0 + 62 + 0 + 10 +11249.999979 + 20 +9206.698742 + 30 +0.0 + 11 +11262.499979 + 21 +9228.349377 + 31 +0.0 + 0 +LINE + 5 +16D7 + 8 +0 + 62 + 0 + 10 +13687.499971 + 20 +9185.048111 + 30 +0.0 + 11 +13699.999971 + 21 +9206.698746 + 31 +0.0 + 0 +LINE + 5 +16D8 + 8 +0 + 62 + 0 + 10 +13724.999971 + 20 +9206.698746 + 30 +0.0 + 11 +13737.499971 + 21 +9228.349381 + 31 +0.0 + 0 +LINE + 5 +16D9 + 8 +0 + 62 + 0 + 10 +13728.81194 + 20 +9170.0 + 30 +0.0 + 11 +13737.499971 + 21 +9185.048111 + 31 +0.0 + 0 +LINE + 5 +16DA + 8 +0 + 62 + 0 + 10 +13762.499971 + 20 +9228.349382 + 30 +0.0 + 11 +13774.999962 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +16DB + 8 +0 + 62 + 0 + 10 +13762.499971 + 20 +9185.048111 + 30 +0.0 + 11 +13774.999971 + 21 +9206.698746 + 31 +0.0 + 0 +LINE + 5 +16DC + 8 +0 + 62 + 0 + 10 +13799.999971 + 20 +9206.698747 + 30 +0.0 + 11 +13812.499971 + 21 +9228.349382 + 31 +0.0 + 0 +LINE + 5 +16DD + 8 +0 + 62 + 0 + 10 +13803.81194 + 20 +9170.0 + 30 +0.0 + 11 +13812.499971 + 21 +9185.048111 + 31 +0.0 + 0 +LINE + 5 +16DE + 8 +0 + 62 + 0 + 10 +13837.499971 + 20 +9228.349382 + 30 +0.0 + 11 +13849.999961 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +16DF + 8 +0 + 62 + 0 + 10 +13837.499971 + 20 +9185.048112 + 30 +0.0 + 11 +13849.999971 + 21 +9206.698747 + 31 +0.0 + 0 +LINE + 5 +16E0 + 8 +0 + 62 + 0 + 10 +13874.999971 + 20 +9206.698747 + 30 +0.0 + 11 +13887.499971 + 21 +9228.349382 + 31 +0.0 + 0 +LINE + 5 +16E1 + 8 +0 + 62 + 0 + 10 +13878.811939 + 20 +9170.0 + 30 +0.0 + 11 +13887.499971 + 21 +9185.048112 + 31 +0.0 + 0 +LINE + 5 +16E2 + 8 +0 + 62 + 0 + 10 +13912.499971 + 20 +9228.349382 + 30 +0.0 + 11 +13924.999961 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +16E3 + 8 +0 + 62 + 0 + 10 +13912.499971 + 20 +9185.048112 + 30 +0.0 + 11 +13924.999971 + 21 +9206.698747 + 31 +0.0 + 0 +LINE + 5 +16E4 + 8 +0 + 62 + 0 + 10 +13949.999971 + 20 +9206.698747 + 30 +0.0 + 11 +13962.499971 + 21 +9228.349382 + 31 +0.0 + 0 +LINE + 5 +16E5 + 8 +0 + 62 + 0 + 10 +13953.811939 + 20 +9170.0 + 30 +0.0 + 11 +13962.499971 + 21 +9185.048112 + 31 +0.0 + 0 +LINE + 5 +16E6 + 8 +0 + 62 + 0 + 10 +13987.499971 + 20 +9228.349382 + 30 +0.0 + 11 +13999.999961 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +16E7 + 8 +0 + 62 + 0 + 10 +13987.49997 + 20 +9185.048112 + 30 +0.0 + 11 +13999.99997 + 21 +9206.698747 + 31 +0.0 + 0 +LINE + 5 +16E8 + 8 +0 + 62 + 0 + 10 +14024.99997 + 20 +9206.698747 + 30 +0.0 + 11 +14037.49997 + 21 +9228.349382 + 31 +0.0 + 0 +LINE + 5 +16E9 + 8 +0 + 62 + 0 + 10 +14028.811939 + 20 +9170.0 + 30 +0.0 + 11 +14037.49997 + 21 +9185.048112 + 31 +0.0 + 0 +LINE + 5 +16EA + 8 +0 + 62 + 0 + 10 +14062.49997 + 20 +9228.349382 + 30 +0.0 + 11 +14074.99996 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +16EB + 8 +0 + 62 + 0 + 10 +14062.49997 + 20 +9185.048112 + 30 +0.0 + 11 +14074.99997 + 21 +9206.698747 + 31 +0.0 + 0 +LINE + 5 +16EC + 8 +0 + 62 + 0 + 10 +14099.99997 + 20 +9206.698747 + 30 +0.0 + 11 +14112.49997 + 21 +9228.349382 + 31 +0.0 + 0 +LINE + 5 +16ED + 8 +0 + 62 + 0 + 10 +14103.811938 + 20 +9170.0 + 30 +0.0 + 11 +14112.49997 + 21 +9185.048112 + 31 +0.0 + 0 +LINE + 5 +16EE + 8 +0 + 62 + 0 + 10 +14137.49997 + 20 +9228.349382 + 30 +0.0 + 11 +14149.99996 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +16EF + 8 +0 + 62 + 0 + 10 +14137.49997 + 20 +9185.048112 + 30 +0.0 + 11 +14149.99997 + 21 +9206.698747 + 31 +0.0 + 0 +LINE + 5 +16F0 + 8 +0 + 62 + 0 + 10 +14174.99997 + 20 +9206.698747 + 30 +0.0 + 11 +14187.49997 + 21 +9228.349382 + 31 +0.0 + 0 +LINE + 5 +16F1 + 8 +0 + 62 + 0 + 10 +14178.811938 + 20 +9170.0 + 30 +0.0 + 11 +14187.49997 + 21 +9185.048112 + 31 +0.0 + 0 +LINE + 5 +16F2 + 8 +0 + 62 + 0 + 10 +14212.49997 + 20 +9228.349382 + 30 +0.0 + 11 +14224.99996 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +16F3 + 8 +0 + 62 + 0 + 10 +14212.49997 + 20 +9185.048112 + 30 +0.0 + 11 +14224.99997 + 21 +9206.698747 + 31 +0.0 + 0 +LINE + 5 +16F4 + 8 +0 + 62 + 0 + 10 +14249.99997 + 20 +9206.698747 + 30 +0.0 + 11 +14262.49997 + 21 +9228.349382 + 31 +0.0 + 0 +LINE + 5 +16F5 + 8 +0 + 62 + 0 + 10 +14253.811938 + 20 +9170.0 + 30 +0.0 + 11 +14262.49997 + 21 +9185.048112 + 31 +0.0 + 0 +LINE + 5 +16F6 + 8 +0 + 62 + 0 + 10 +14287.49997 + 20 +9228.349383 + 30 +0.0 + 11 +14299.999959 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +16F7 + 8 +0 + 62 + 0 + 10 +14287.499969 + 20 +9185.048112 + 30 +0.0 + 11 +14299.999969 + 21 +9206.698747 + 31 +0.0 + 0 +LINE + 5 +16F8 + 8 +0 + 62 + 0 + 10 +14324.999969 + 20 +9206.698748 + 30 +0.0 + 11 +14337.499969 + 21 +9228.349383 + 31 +0.0 + 0 +LINE + 5 +16F9 + 8 +0 + 62 + 0 + 10 +14328.811937 + 20 +9170.0 + 30 +0.0 + 11 +14337.499969 + 21 +9185.048112 + 31 +0.0 + 0 +LINE + 5 +16FA + 8 +0 + 62 + 0 + 10 +14362.499969 + 20 +9228.349383 + 30 +0.0 + 11 +14374.999959 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +16FB + 8 +0 + 62 + 0 + 10 +14362.499969 + 20 +9185.048113 + 30 +0.0 + 11 +14374.999969 + 21 +9206.698748 + 31 +0.0 + 0 +LINE + 5 +16FC + 8 +0 + 62 + 0 + 10 +14399.999969 + 20 +9206.698748 + 30 +0.0 + 11 +14412.499969 + 21 +9228.349383 + 31 +0.0 + 0 +LINE + 5 +16FD + 8 +0 + 62 + 0 + 10 +14403.811937 + 20 +9170.0 + 30 +0.0 + 11 +14412.499969 + 21 +9185.048113 + 31 +0.0 + 0 +LINE + 5 +16FE + 8 +0 + 62 + 0 + 10 +14437.499969 + 20 +9228.349383 + 30 +0.0 + 11 +14449.999959 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +16FF + 8 +0 + 62 + 0 + 10 +14437.499969 + 20 +9185.048113 + 30 +0.0 + 11 +14449.999969 + 21 +9206.698748 + 31 +0.0 + 0 +LINE + 5 +1700 + 8 +0 + 62 + 0 + 10 +14474.999969 + 20 +9206.698748 + 30 +0.0 + 11 +14487.499969 + 21 +9228.349383 + 31 +0.0 + 0 +LINE + 5 +1701 + 8 +0 + 62 + 0 + 10 +14478.811937 + 20 +9170.0 + 30 +0.0 + 11 +14487.499969 + 21 +9185.048113 + 31 +0.0 + 0 +LINE + 5 +1702 + 8 +0 + 62 + 0 + 10 +14512.499969 + 20 +9228.349383 + 30 +0.0 + 11 +14524.999958 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1703 + 8 +0 + 62 + 0 + 10 +14512.499969 + 20 +9185.048113 + 30 +0.0 + 11 +14524.999969 + 21 +9206.698748 + 31 +0.0 + 0 +LINE + 5 +1704 + 8 +0 + 62 + 0 + 10 +14549.999969 + 20 +9206.698748 + 30 +0.0 + 11 +14562.499969 + 21 +9228.349383 + 31 +0.0 + 0 +LINE + 5 +1705 + 8 +0 + 62 + 0 + 10 +14553.811937 + 20 +9170.0 + 30 +0.0 + 11 +14562.499969 + 21 +9185.048113 + 31 +0.0 + 0 +LINE + 5 +1706 + 8 +0 + 62 + 0 + 10 +14587.499969 + 20 +9228.349383 + 30 +0.0 + 11 +14599.999958 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1707 + 8 +0 + 62 + 0 + 10 +14587.499968 + 20 +9185.048113 + 30 +0.0 + 11 +14599.999968 + 21 +9206.698748 + 31 +0.0 + 0 +LINE + 5 +1708 + 8 +0 + 62 + 0 + 10 +14624.999968 + 20 +9206.698748 + 30 +0.0 + 11 +14637.499968 + 21 +9228.349383 + 31 +0.0 + 0 +LINE + 5 +1709 + 8 +0 + 62 + 0 + 10 +14628.811936 + 20 +9170.0 + 30 +0.0 + 11 +14637.499968 + 21 +9185.048113 + 31 +0.0 + 0 +LINE + 5 +170A + 8 +0 + 62 + 0 + 10 +14662.499968 + 20 +9228.349383 + 30 +0.0 + 11 +14674.999958 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +170B + 8 +0 + 62 + 0 + 10 +14662.499968 + 20 +9185.048113 + 30 +0.0 + 11 +14674.999968 + 21 +9206.698748 + 31 +0.0 + 0 +LINE + 5 +170C + 8 +0 + 62 + 0 + 10 +14699.999968 + 20 +9206.698748 + 30 +0.0 + 11 +14712.499968 + 21 +9228.349383 + 31 +0.0 + 0 +LINE + 5 +170D + 8 +0 + 62 + 0 + 10 +14703.811936 + 20 +9170.0 + 30 +0.0 + 11 +14712.499968 + 21 +9185.048113 + 31 +0.0 + 0 +LINE + 5 +170E + 8 +0 + 62 + 0 + 10 +14737.499968 + 20 +9228.349383 + 30 +0.0 + 11 +14749.999957 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +170F + 8 +0 + 62 + 0 + 10 +14737.499968 + 20 +9185.048113 + 30 +0.0 + 11 +14749.999968 + 21 +9206.698748 + 31 +0.0 + 0 +LINE + 5 +1710 + 8 +0 + 62 + 0 + 10 +14774.999968 + 20 +9206.698748 + 30 +0.0 + 11 +14787.499968 + 21 +9228.349383 + 31 +0.0 + 0 +LINE + 5 +1711 + 8 +0 + 62 + 0 + 10 +14778.811936 + 20 +9170.0 + 30 +0.0 + 11 +14787.499968 + 21 +9185.048113 + 31 +0.0 + 0 +LINE + 5 +1712 + 8 +0 + 62 + 0 + 10 +14812.499968 + 20 +9228.349383 + 30 +0.0 + 11 +14824.999957 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1713 + 8 +0 + 62 + 0 + 10 +14812.499968 + 20 +9185.048113 + 30 +0.0 + 11 +14824.999968 + 21 +9206.698748 + 31 +0.0 + 0 +LINE + 5 +1714 + 8 +0 + 62 + 0 + 10 +14849.999968 + 20 +9206.698748 + 30 +0.0 + 11 +14862.499968 + 21 +9228.349384 + 31 +0.0 + 0 +LINE + 5 +1715 + 8 +0 + 62 + 0 + 10 +14853.811935 + 20 +9170.0 + 30 +0.0 + 11 +14862.499968 + 21 +9185.048113 + 31 +0.0 + 0 +LINE + 5 +1716 + 8 +0 + 62 + 0 + 10 +14887.499968 + 20 +9228.349384 + 30 +0.0 + 11 +14899.999957 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1717 + 8 +0 + 62 + 0 + 10 +14887.499967 + 20 +9185.048113 + 30 +0.0 + 11 +14899.999967 + 21 +9206.698749 + 31 +0.0 + 0 +LINE + 5 +1718 + 8 +0 + 62 + 0 + 10 +14924.999967 + 20 +9206.698749 + 30 +0.0 + 11 +14937.499967 + 21 +9228.349384 + 31 +0.0 + 0 +LINE + 5 +1719 + 8 +0 + 62 + 0 + 10 +14928.811935 + 20 +9170.0 + 30 +0.0 + 11 +14937.499967 + 21 +9185.048114 + 31 +0.0 + 0 +LINE + 5 +171A + 8 +0 + 62 + 0 + 10 +14962.499967 + 20 +9228.349384 + 30 +0.0 + 11 +14974.999956 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +171B + 8 +0 + 62 + 0 + 10 +14962.499967 + 20 +9185.048114 + 30 +0.0 + 11 +14974.999967 + 21 +9206.698749 + 31 +0.0 + 0 +LINE + 5 +171C + 8 +0 + 62 + 0 + 10 +14999.999967 + 20 +9206.698749 + 30 +0.0 + 11 +15012.499967 + 21 +9228.349384 + 31 +0.0 + 0 +LINE + 5 +171D + 8 +0 + 62 + 0 + 10 +15003.811935 + 20 +9170.0 + 30 +0.0 + 11 +15012.499967 + 21 +9185.048114 + 31 +0.0 + 0 +LINE + 5 +171E + 8 +0 + 62 + 0 + 10 +15037.499967 + 20 +9228.349384 + 30 +0.0 + 11 +15049.999956 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +171F + 8 +0 + 62 + 0 + 10 +15037.499967 + 20 +9185.048114 + 30 +0.0 + 11 +15049.999967 + 21 +9206.698749 + 31 +0.0 + 0 +LINE + 5 +1720 + 8 +0 + 62 + 0 + 10 +15074.999967 + 20 +9206.698749 + 30 +0.0 + 11 +15087.499967 + 21 +9228.349384 + 31 +0.0 + 0 +LINE + 5 +1721 + 8 +0 + 62 + 0 + 10 +15078.811934 + 20 +9170.0 + 30 +0.0 + 11 +15087.499967 + 21 +9185.048114 + 31 +0.0 + 0 +LINE + 5 +1722 + 8 +0 + 62 + 0 + 10 +15112.499967 + 20 +9228.349384 + 30 +0.0 + 11 +15124.999956 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1723 + 8 +0 + 62 + 0 + 10 +15112.499967 + 20 +9185.048114 + 30 +0.0 + 11 +15124.999967 + 21 +9206.698749 + 31 +0.0 + 0 +LINE + 5 +1724 + 8 +0 + 62 + 0 + 10 +15149.999967 + 20 +9206.698749 + 30 +0.0 + 11 +15162.499967 + 21 +9228.349384 + 31 +0.0 + 0 +LINE + 5 +1725 + 8 +0 + 62 + 0 + 10 +15153.811934 + 20 +9170.0 + 30 +0.0 + 11 +15162.499967 + 21 +9185.048114 + 31 +0.0 + 0 +LINE + 5 +1726 + 8 +0 + 62 + 0 + 10 +15187.499967 + 20 +9228.349384 + 30 +0.0 + 11 +15199.999955 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1727 + 8 +0 + 62 + 0 + 10 +15187.499966 + 20 +9185.048114 + 30 +0.0 + 11 +15199.999966 + 21 +9206.698749 + 31 +0.0 + 0 +LINE + 5 +1728 + 8 +0 + 62 + 0 + 10 +15224.999966 + 20 +9206.698749 + 30 +0.0 + 11 +15237.499966 + 21 +9228.349384 + 31 +0.0 + 0 +LINE + 5 +1729 + 8 +0 + 62 + 0 + 10 +15228.811934 + 20 +9170.0 + 30 +0.0 + 11 +15237.499966 + 21 +9185.048114 + 31 +0.0 + 0 +LINE + 5 +172A + 8 +0 + 62 + 0 + 10 +15262.499966 + 20 +9228.349384 + 30 +0.0 + 11 +15274.999955 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +172B + 8 +0 + 62 + 0 + 10 +15262.499966 + 20 +9185.048114 + 30 +0.0 + 11 +15274.999966 + 21 +9206.698749 + 31 +0.0 + 0 +LINE + 5 +172C + 8 +0 + 62 + 0 + 10 +15299.999966 + 20 +9206.698749 + 30 +0.0 + 11 +15312.499966 + 21 +9228.349384 + 31 +0.0 + 0 +LINE + 5 +172D + 8 +0 + 62 + 0 + 10 +15303.811933 + 20 +9170.0 + 30 +0.0 + 11 +15312.499966 + 21 +9185.048114 + 31 +0.0 + 0 +LINE + 5 +172E + 8 +0 + 62 + 0 + 10 +15337.499966 + 20 +9228.349384 + 30 +0.0 + 11 +15349.999955 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +172F + 8 +0 + 62 + 0 + 10 +15337.499966 + 20 +9185.048114 + 30 +0.0 + 11 +15349.999966 + 21 +9206.698749 + 31 +0.0 + 0 +LINE + 5 +1730 + 8 +0 + 62 + 0 + 10 +15374.999966 + 20 +9206.698749 + 30 +0.0 + 11 +15387.499966 + 21 +9228.349385 + 31 +0.0 + 0 +LINE + 5 +1731 + 8 +0 + 62 + 0 + 10 +15378.811933 + 20 +9170.0 + 30 +0.0 + 11 +15387.499966 + 21 +9185.048114 + 31 +0.0 + 0 +LINE + 5 +1732 + 8 +0 + 62 + 0 + 10 +15412.499966 + 20 +9228.349385 + 30 +0.0 + 11 +15424.999954 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1733 + 8 +0 + 62 + 0 + 10 +15412.499966 + 20 +9185.048114 + 30 +0.0 + 11 +15424.999966 + 21 +9206.69875 + 31 +0.0 + 0 +LINE + 5 +1734 + 8 +0 + 62 + 0 + 10 +15449.999966 + 20 +9206.69875 + 30 +0.0 + 11 +15462.499966 + 21 +9228.349385 + 31 +0.0 + 0 +LINE + 5 +1735 + 8 +0 + 62 + 0 + 10 +15453.811933 + 20 +9170.0 + 30 +0.0 + 11 +15462.499966 + 21 +9185.048115 + 31 +0.0 + 0 +LINE + 5 +1736 + 8 +0 + 62 + 0 + 10 +15487.499966 + 20 +9228.349385 + 30 +0.0 + 11 +15499.999954 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1737 + 8 +0 + 62 + 0 + 10 +15487.499966 + 20 +9185.048115 + 30 +0.0 + 11 +15499.999966 + 21 +9206.69875 + 31 +0.0 + 0 +LINE + 5 +1738 + 8 +0 + 62 + 0 + 10 +15524.999965 + 20 +9206.69875 + 30 +0.0 + 11 +15537.499965 + 21 +9228.349385 + 31 +0.0 + 0 +LINE + 5 +1739 + 8 +0 + 62 + 0 + 10 +15528.811932 + 20 +9170.0 + 30 +0.0 + 11 +15537.499965 + 21 +9185.048115 + 31 +0.0 + 0 +LINE + 5 +173A + 8 +0 + 62 + 0 + 10 +15562.499965 + 20 +9228.349385 + 30 +0.0 + 11 +15574.999954 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +173B + 8 +0 + 62 + 0 + 10 +15562.499965 + 20 +9185.048115 + 30 +0.0 + 11 +15574.999965 + 21 +9206.69875 + 31 +0.0 + 0 +LINE + 5 +173C + 8 +0 + 62 + 0 + 10 +15599.999965 + 20 +9206.69875 + 30 +0.0 + 11 +15612.499965 + 21 +9228.349385 + 31 +0.0 + 0 +LINE + 5 +173D + 8 +0 + 62 + 0 + 10 +15603.811932 + 20 +9170.0 + 30 +0.0 + 11 +15612.499965 + 21 +9185.048115 + 31 +0.0 + 0 +LINE + 5 +173E + 8 +0 + 62 + 0 + 10 +15637.499965 + 20 +9228.349385 + 30 +0.0 + 11 +15649.999953 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +173F + 8 +0 + 62 + 0 + 10 +15637.499965 + 20 +9185.048115 + 30 +0.0 + 11 +15649.999965 + 21 +9206.69875 + 31 +0.0 + 0 +LINE + 5 +1740 + 8 +0 + 62 + 0 + 10 +15674.999965 + 20 +9206.69875 + 30 +0.0 + 11 +15687.499965 + 21 +9228.349385 + 31 +0.0 + 0 +LINE + 5 +1741 + 8 +0 + 62 + 0 + 10 +15678.811932 + 20 +9170.0 + 30 +0.0 + 11 +15687.499965 + 21 +9185.048115 + 31 +0.0 + 0 +LINE + 5 +1742 + 8 +0 + 62 + 0 + 10 +15712.499965 + 20 +9228.349385 + 30 +0.0 + 11 +15724.999953 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1743 + 8 +0 + 62 + 0 + 10 +15712.499965 + 20 +9185.048115 + 30 +0.0 + 11 +15724.999965 + 21 +9206.69875 + 31 +0.0 + 0 +LINE + 5 +1744 + 8 +0 + 62 + 0 + 10 +15749.999965 + 20 +9206.69875 + 30 +0.0 + 11 +15762.499965 + 21 +9228.349385 + 31 +0.0 + 0 +LINE + 5 +1745 + 8 +0 + 62 + 0 + 10 +15753.811931 + 20 +9170.0 + 30 +0.0 + 11 +15762.499965 + 21 +9185.048115 + 31 +0.0 + 0 +LINE + 5 +1746 + 8 +0 + 62 + 0 + 10 +15787.499965 + 20 +9228.349385 + 30 +0.0 + 11 +15799.999953 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1747 + 8 +0 + 62 + 0 + 10 +15787.499965 + 20 +9185.048115 + 30 +0.0 + 11 +15799.999965 + 21 +9206.69875 + 31 +0.0 + 0 +LINE + 5 +1748 + 8 +0 + 62 + 0 + 10 +15824.999964 + 20 +9206.69875 + 30 +0.0 + 11 +15837.499964 + 21 +9228.349385 + 31 +0.0 + 0 +LINE + 5 +1749 + 8 +0 + 62 + 0 + 10 +15828.811931 + 20 +9170.0 + 30 +0.0 + 11 +15837.499964 + 21 +9185.048115 + 31 +0.0 + 0 +LINE + 5 +174A + 8 +0 + 62 + 0 + 10 +15862.499964 + 20 +9228.349385 + 30 +0.0 + 11 +15874.999952 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +174B + 8 +0 + 62 + 0 + 10 +15862.499964 + 20 +9185.048115 + 30 +0.0 + 11 +15874.999964 + 21 +9206.69875 + 31 +0.0 + 0 +LINE + 5 +174C + 8 +0 + 62 + 0 + 10 +15899.999964 + 20 +9206.69875 + 30 +0.0 + 11 +15912.499964 + 21 +9228.349386 + 31 +0.0 + 0 +LINE + 5 +174D + 8 +0 + 62 + 0 + 10 +15903.811931 + 20 +9170.0 + 30 +0.0 + 11 +15912.499964 + 21 +9185.048115 + 31 +0.0 + 0 +LINE + 5 +174E + 8 +0 + 62 + 0 + 10 +15937.499964 + 20 +9228.349386 + 30 +0.0 + 11 +15949.999952 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +174F + 8 +0 + 62 + 0 + 10 +15937.499964 + 20 +9185.048115 + 30 +0.0 + 11 +15949.999964 + 21 +9206.698751 + 31 +0.0 + 0 +LINE + 5 +1750 + 8 +0 + 62 + 0 + 10 +15974.999964 + 20 +9206.698751 + 30 +0.0 + 11 +15987.499964 + 21 +9228.349386 + 31 +0.0 + 0 +LINE + 5 +1751 + 8 +0 + 62 + 0 + 10 +15978.81193 + 20 +9170.0 + 30 +0.0 + 11 +15987.499964 + 21 +9185.048116 + 31 +0.0 + 0 +LINE + 5 +1752 + 8 +0 + 62 + 0 + 10 +16012.499964 + 20 +9228.349386 + 30 +0.0 + 11 +16024.999952 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1753 + 8 +0 + 62 + 0 + 10 +16012.499964 + 20 +9185.048116 + 30 +0.0 + 11 +16024.999964 + 21 +9206.698751 + 31 +0.0 + 0 +LINE + 5 +1754 + 8 +0 + 62 + 0 + 10 +16049.999964 + 20 +9206.698751 + 30 +0.0 + 11 +16062.499964 + 21 +9228.349386 + 31 +0.0 + 0 +LINE + 5 +1755 + 8 +0 + 62 + 0 + 10 +16053.81193 + 20 +9170.0 + 30 +0.0 + 11 +16062.499964 + 21 +9185.048116 + 31 +0.0 + 0 +LINE + 5 +1756 + 8 +0 + 62 + 0 + 10 +16087.499964 + 20 +9228.349386 + 30 +0.0 + 11 +16099.999951 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1757 + 8 +0 + 62 + 0 + 10 +16087.499964 + 20 +9185.048116 + 30 +0.0 + 11 +16099.999964 + 21 +9206.698751 + 31 +0.0 + 0 +LINE + 5 +1758 + 8 +0 + 62 + 0 + 10 +16124.999963 + 20 +9206.698751 + 30 +0.0 + 11 +16126.25 + 21 +9208.863878 + 31 +0.0 + 0 +ENDBLK + 5 +1759 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X47 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X47 + 1 + + 0 +LINE + 5 +175B + 8 +0 + 62 + 0 + 10 +17412.5 + 20 +9228.349365 + 30 +0.0 + 11 +17437.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +175C + 8 +0 + 62 + 0 + 10 +17487.5 + 20 +9228.349365 + 30 +0.0 + 11 +17512.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +175D + 8 +0 + 62 + 0 + 10 +17562.5 + 20 +9228.349365 + 30 +0.0 + 11 +17587.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +175E + 8 +0 + 62 + 0 + 10 +17637.5 + 20 +9228.349365 + 30 +0.0 + 11 +17662.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +175F + 8 +0 + 62 + 0 + 10 +17712.5 + 20 +9228.349365 + 30 +0.0 + 11 +17737.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1760 + 8 +0 + 62 + 0 + 10 +17787.5 + 20 +9228.349365 + 30 +0.0 + 11 +17812.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1761 + 8 +0 + 62 + 0 + 10 +17862.5 + 20 +9228.349365 + 30 +0.0 + 11 +17887.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1762 + 8 +0 + 62 + 0 + 10 +17937.5 + 20 +9228.349365 + 30 +0.0 + 11 +17962.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1763 + 8 +0 + 62 + 0 + 10 +18012.5 + 20 +9228.349365 + 30 +0.0 + 11 +18037.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1764 + 8 +0 + 62 + 0 + 10 +18087.5 + 20 +9228.349365 + 30 +0.0 + 11 +18112.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1765 + 8 +0 + 62 + 0 + 10 +18162.5 + 20 +9228.349365 + 30 +0.0 + 11 +18187.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1766 + 8 +0 + 62 + 0 + 10 +18237.5 + 20 +9228.349365 + 30 +0.0 + 11 +18262.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1767 + 8 +0 + 62 + 0 + 10 +18312.5 + 20 +9228.349365 + 30 +0.0 + 11 +18337.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1768 + 8 +0 + 62 + 0 + 10 +18387.5 + 20 +9228.349365 + 30 +0.0 + 11 +18412.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1769 + 8 +0 + 62 + 0 + 10 +18462.5 + 20 +9228.349365 + 30 +0.0 + 11 +18487.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +176A + 8 +0 + 62 + 0 + 10 +17375.0 + 20 +9206.69873 + 30 +0.0 + 11 +17400.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +176B + 8 +0 + 62 + 0 + 10 +17450.0 + 20 +9206.69873 + 30 +0.0 + 11 +17475.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +176C + 8 +0 + 62 + 0 + 10 +17525.0 + 20 +9206.69873 + 30 +0.0 + 11 +17550.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +176D + 8 +0 + 62 + 0 + 10 +17600.0 + 20 +9206.69873 + 30 +0.0 + 11 +17625.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +176E + 8 +0 + 62 + 0 + 10 +17675.0 + 20 +9206.69873 + 30 +0.0 + 11 +17700.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +176F + 8 +0 + 62 + 0 + 10 +17750.0 + 20 +9206.69873 + 30 +0.0 + 11 +17775.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +1770 + 8 +0 + 62 + 0 + 10 +17825.0 + 20 +9206.69873 + 30 +0.0 + 11 +17850.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +1771 + 8 +0 + 62 + 0 + 10 +17900.0 + 20 +9206.69873 + 30 +0.0 + 11 +17925.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +1772 + 8 +0 + 62 + 0 + 10 +17975.0 + 20 +9206.69873 + 30 +0.0 + 11 +18000.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +1773 + 8 +0 + 62 + 0 + 10 +18050.0 + 20 +9206.69873 + 30 +0.0 + 11 +18075.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +1774 + 8 +0 + 62 + 0 + 10 +18125.0 + 20 +9206.69873 + 30 +0.0 + 11 +18150.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +1775 + 8 +0 + 62 + 0 + 10 +18200.0 + 20 +9206.69873 + 30 +0.0 + 11 +18225.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +1776 + 8 +0 + 62 + 0 + 10 +18275.0 + 20 +9206.69873 + 30 +0.0 + 11 +18300.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +1777 + 8 +0 + 62 + 0 + 10 +18350.0 + 20 +9206.69873 + 30 +0.0 + 11 +18375.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +1778 + 8 +0 + 62 + 0 + 10 +18425.0 + 20 +9206.69873 + 30 +0.0 + 11 +18450.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +1779 + 8 +0 + 62 + 0 + 10 +18500.0 + 20 +9206.69873 + 30 +0.0 + 11 +18501.25 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +177A + 8 +0 + 62 + 0 + 10 +17412.5 + 20 +9185.048095 + 30 +0.0 + 11 +17437.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +177B + 8 +0 + 62 + 0 + 10 +17487.5 + 20 +9185.048095 + 30 +0.0 + 11 +17512.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +177C + 8 +0 + 62 + 0 + 10 +17562.5 + 20 +9185.048095 + 30 +0.0 + 11 +17587.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +177D + 8 +0 + 62 + 0 + 10 +17637.5 + 20 +9185.048095 + 30 +0.0 + 11 +17662.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +177E + 8 +0 + 62 + 0 + 10 +17712.5 + 20 +9185.048095 + 30 +0.0 + 11 +17737.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +177F + 8 +0 + 62 + 0 + 10 +17787.5 + 20 +9185.048095 + 30 +0.0 + 11 +17812.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +1780 + 8 +0 + 62 + 0 + 10 +17862.5 + 20 +9185.048095 + 30 +0.0 + 11 +17887.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +1781 + 8 +0 + 62 + 0 + 10 +17937.5 + 20 +9185.048095 + 30 +0.0 + 11 +17962.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +1782 + 8 +0 + 62 + 0 + 10 +18012.5 + 20 +9185.048095 + 30 +0.0 + 11 +18037.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +1783 + 8 +0 + 62 + 0 + 10 +18087.5 + 20 +9185.048095 + 30 +0.0 + 11 +18112.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +1784 + 8 +0 + 62 + 0 + 10 +18162.5 + 20 +9185.048095 + 30 +0.0 + 11 +18187.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +1785 + 8 +0 + 62 + 0 + 10 +18237.5 + 20 +9185.048095 + 30 +0.0 + 11 +18262.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +1786 + 8 +0 + 62 + 0 + 10 +18312.5 + 20 +9185.048095 + 30 +0.0 + 11 +18337.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +1787 + 8 +0 + 62 + 0 + 10 +18387.5 + 20 +9185.048095 + 30 +0.0 + 11 +18412.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +1788 + 8 +0 + 62 + 0 + 10 +18462.5 + 20 +9185.048095 + 30 +0.0 + 11 +18487.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +1789 + 8 +0 + 62 + 0 + 10 +17937.499958 + 20 +9185.04807 + 30 +0.0 + 11 +17924.999958 + 21 +9206.698705 + 31 +0.0 + 0 +LINE + 5 +178A + 8 +0 + 62 + 0 + 10 +17899.999958 + 20 +9249.999976 + 30 +0.0 + 11 +17899.999944 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +178B + 8 +0 + 62 + 0 + 10 +17899.999958 + 20 +9206.698705 + 30 +0.0 + 11 +17887.499958 + 21 +9228.349341 + 31 +0.0 + 0 +LINE + 5 +178C + 8 +0 + 62 + 0 + 10 +17896.187965 + 20 +9170.0 + 30 +0.0 + 11 +17887.499958 + 21 +9185.04807 + 31 +0.0 + 0 +LINE + 5 +178D + 8 +0 + 62 + 0 + 10 +17862.499958 + 20 +9228.349341 + 30 +0.0 + 11 +17849.999958 + 21 +9249.999976 + 31 +0.0 + 0 +LINE + 5 +178E + 8 +0 + 62 + 0 + 10 +17862.499958 + 20 +9185.04807 + 30 +0.0 + 11 +17849.999958 + 21 +9206.698706 + 31 +0.0 + 0 +LINE + 5 +178F + 8 +0 + 62 + 0 + 10 +17824.999958 + 20 +9249.999976 + 30 +0.0 + 11 +17824.999944 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1790 + 8 +0 + 62 + 0 + 10 +17824.999958 + 20 +9206.698706 + 30 +0.0 + 11 +17812.499958 + 21 +9228.349341 + 31 +0.0 + 0 +LINE + 5 +1791 + 8 +0 + 62 + 0 + 10 +17821.187966 + 20 +9170.0 + 30 +0.0 + 11 +17812.499958 + 21 +9185.048071 + 31 +0.0 + 0 +LINE + 5 +1792 + 8 +0 + 62 + 0 + 10 +17787.499958 + 20 +9228.349341 + 30 +0.0 + 11 +17774.999958 + 21 +9249.999976 + 31 +0.0 + 0 +LINE + 5 +1793 + 8 +0 + 62 + 0 + 10 +17787.499958 + 20 +9185.048071 + 30 +0.0 + 11 +17774.999958 + 21 +9206.698706 + 31 +0.0 + 0 +LINE + 5 +1794 + 8 +0 + 62 + 0 + 10 +17749.999958 + 20 +9249.999976 + 30 +0.0 + 11 +17749.999944 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1795 + 8 +0 + 62 + 0 + 10 +17749.999958 + 20 +9206.698706 + 30 +0.0 + 11 +17737.499958 + 21 +9228.349341 + 31 +0.0 + 0 +LINE + 5 +1796 + 8 +0 + 62 + 0 + 10 +17746.187966 + 20 +9170.0 + 30 +0.0 + 11 +17737.499958 + 21 +9185.048071 + 31 +0.0 + 0 +LINE + 5 +1797 + 8 +0 + 62 + 0 + 10 +17712.499958 + 20 +9228.349341 + 30 +0.0 + 11 +17699.999958 + 21 +9249.999976 + 31 +0.0 + 0 +LINE + 5 +1798 + 8 +0 + 62 + 0 + 10 +17712.499958 + 20 +9185.048071 + 30 +0.0 + 11 +17699.999958 + 21 +9206.698706 + 31 +0.0 + 0 +LINE + 5 +1799 + 8 +0 + 62 + 0 + 10 +17674.999958 + 20 +9249.999976 + 30 +0.0 + 11 +17674.999945 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +179A + 8 +0 + 62 + 0 + 10 +17674.999959 + 20 +9206.698706 + 30 +0.0 + 11 +17662.499959 + 21 +9228.349341 + 31 +0.0 + 0 +LINE + 5 +179B + 8 +0 + 62 + 0 + 10 +17671.187966 + 20 +9170.0 + 30 +0.0 + 11 +17662.499959 + 21 +9185.048071 + 31 +0.0 + 0 +LINE + 5 +179C + 8 +0 + 62 + 0 + 10 +17637.499959 + 20 +9228.349341 + 30 +0.0 + 11 +17624.999959 + 21 +9249.999976 + 31 +0.0 + 0 +LINE + 5 +179D + 8 +0 + 62 + 0 + 10 +17637.499959 + 20 +9185.048071 + 30 +0.0 + 11 +17624.999959 + 21 +9206.698706 + 31 +0.0 + 0 +LINE + 5 +179E + 8 +0 + 62 + 0 + 10 +17599.999959 + 20 +9249.999976 + 30 +0.0 + 11 +17599.999945 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +179F + 8 +0 + 62 + 0 + 10 +17599.999959 + 20 +9206.698706 + 30 +0.0 + 11 +17587.499959 + 21 +9228.349341 + 31 +0.0 + 0 +LINE + 5 +17A0 + 8 +0 + 62 + 0 + 10 +17596.187967 + 20 +9170.0 + 30 +0.0 + 11 +17587.499959 + 21 +9185.048071 + 31 +0.0 + 0 +LINE + 5 +17A1 + 8 +0 + 62 + 0 + 10 +17562.499959 + 20 +9228.349341 + 30 +0.0 + 11 +17549.999959 + 21 +9249.999976 + 31 +0.0 + 0 +LINE + 5 +17A2 + 8 +0 + 62 + 0 + 10 +17562.499959 + 20 +9185.048071 + 30 +0.0 + 11 +17549.999959 + 21 +9206.698706 + 31 +0.0 + 0 +LINE + 5 +17A3 + 8 +0 + 62 + 0 + 10 +17524.999959 + 20 +9249.999976 + 30 +0.0 + 11 +17524.999945 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +17A4 + 8 +0 + 62 + 0 + 10 +17524.999959 + 20 +9206.698706 + 30 +0.0 + 11 +17512.499959 + 21 +9228.349341 + 31 +0.0 + 0 +LINE + 5 +17A5 + 8 +0 + 62 + 0 + 10 +17521.187967 + 20 +9170.0 + 30 +0.0 + 11 +17512.499959 + 21 +9185.048071 + 31 +0.0 + 0 +LINE + 5 +17A6 + 8 +0 + 62 + 0 + 10 +17487.499959 + 20 +9228.349341 + 30 +0.0 + 11 +17474.999959 + 21 +9249.999976 + 31 +0.0 + 0 +LINE + 5 +17A7 + 8 +0 + 62 + 0 + 10 +17487.499959 + 20 +9185.048071 + 30 +0.0 + 11 +17474.999959 + 21 +9206.698706 + 31 +0.0 + 0 +LINE + 5 +17A8 + 8 +0 + 62 + 0 + 10 +17449.999959 + 20 +9249.999976 + 30 +0.0 + 11 +17449.999946 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +17A9 + 8 +0 + 62 + 0 + 10 +17449.999959 + 20 +9206.698706 + 30 +0.0 + 11 +17437.499959 + 21 +9228.349341 + 31 +0.0 + 0 +LINE + 5 +17AA + 8 +0 + 62 + 0 + 10 +17446.187967 + 20 +9170.0 + 30 +0.0 + 11 +17437.499959 + 21 +9185.048071 + 31 +0.0 + 0 +LINE + 5 +17AB + 8 +0 + 62 + 0 + 10 +17412.499959 + 20 +9228.349341 + 30 +0.0 + 11 +17399.999959 + 21 +9249.999977 + 31 +0.0 + 0 +LINE + 5 +17AC + 8 +0 + 62 + 0 + 10 +17412.499959 + 20 +9185.048071 + 30 +0.0 + 11 +17399.999959 + 21 +9206.698706 + 31 +0.0 + 0 +LINE + 5 +17AD + 8 +0 + 62 + 0 + 10 +17374.999959 + 20 +9249.999977 + 30 +0.0 + 11 +17374.999946 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +17AE + 8 +0 + 62 + 0 + 10 +17374.99996 + 20 +9206.698706 + 30 +0.0 + 11 +17363.75 + 21 +9226.184208 + 31 +0.0 + 0 +LINE + 5 +17AF + 8 +0 + 62 + 0 + 10 +17371.187968 + 20 +9170.0 + 30 +0.0 + 11 +17363.75 + 21 +9182.882938 + 31 +0.0 + 0 +LINE + 5 +17B0 + 8 +0 + 62 + 0 + 10 +17971.187965 + 20 +9170.0 + 30 +0.0 + 11 +17962.499958 + 21 +9185.04807 + 31 +0.0 + 0 +LINE + 5 +17B1 + 8 +0 + 62 + 0 + 10 +17937.499958 + 20 +9228.34934 + 30 +0.0 + 11 +17924.999958 + 21 +9249.999976 + 31 +0.0 + 0 +LINE + 5 +17B2 + 8 +0 + 62 + 0 + 10 +17974.999958 + 20 +9206.698705 + 30 +0.0 + 11 +17962.499958 + 21 +9228.34934 + 31 +0.0 + 0 +LINE + 5 +17B3 + 8 +0 + 62 + 0 + 10 +18012.499957 + 20 +9185.04807 + 30 +0.0 + 11 +17999.999957 + 21 +9206.698705 + 31 +0.0 + 0 +LINE + 5 +17B4 + 8 +0 + 62 + 0 + 10 +17974.999957 + 20 +9249.999975 + 30 +0.0 + 11 +17974.999943 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +17B5 + 8 +0 + 62 + 0 + 10 +18046.187965 + 20 +9170.0 + 30 +0.0 + 11 +18037.499957 + 21 +9185.04807 + 31 +0.0 + 0 +LINE + 5 +17B6 + 8 +0 + 62 + 0 + 10 +18012.499957 + 20 +9228.34934 + 30 +0.0 + 11 +17999.999957 + 21 +9249.999975 + 31 +0.0 + 0 +LINE + 5 +17B7 + 8 +0 + 62 + 0 + 10 +18049.999957 + 20 +9206.698705 + 30 +0.0 + 11 +18037.499957 + 21 +9228.34934 + 31 +0.0 + 0 +LINE + 5 +17B8 + 8 +0 + 62 + 0 + 10 +18087.499957 + 20 +9185.04807 + 30 +0.0 + 11 +18074.999957 + 21 +9206.698705 + 31 +0.0 + 0 +LINE + 5 +17B9 + 8 +0 + 62 + 0 + 10 +18049.999957 + 20 +9249.999975 + 30 +0.0 + 11 +18049.999943 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +17BA + 8 +0 + 62 + 0 + 10 +18121.187964 + 20 +9170.0 + 30 +0.0 + 11 +18112.499957 + 21 +9185.04807 + 31 +0.0 + 0 +LINE + 5 +17BB + 8 +0 + 62 + 0 + 10 +18087.499957 + 20 +9228.34934 + 30 +0.0 + 11 +18074.999957 + 21 +9249.999975 + 31 +0.0 + 0 +LINE + 5 +17BC + 8 +0 + 62 + 0 + 10 +18124.999957 + 20 +9206.698705 + 30 +0.0 + 11 +18112.499957 + 21 +9228.34934 + 31 +0.0 + 0 +LINE + 5 +17BD + 8 +0 + 62 + 0 + 10 +18162.499957 + 20 +9185.04807 + 30 +0.0 + 11 +18149.999957 + 21 +9206.698705 + 31 +0.0 + 0 +LINE + 5 +17BE + 8 +0 + 62 + 0 + 10 +18124.999957 + 20 +9249.999975 + 30 +0.0 + 11 +18124.999943 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +17BF + 8 +0 + 62 + 0 + 10 +18196.187964 + 20 +9170.0 + 30 +0.0 + 11 +18187.499957 + 21 +9185.04807 + 31 +0.0 + 0 +LINE + 5 +17C0 + 8 +0 + 62 + 0 + 10 +18162.499957 + 20 +9228.34934 + 30 +0.0 + 11 +18149.999957 + 21 +9249.999975 + 31 +0.0 + 0 +LINE + 5 +17C1 + 8 +0 + 62 + 0 + 10 +18199.999957 + 20 +9206.698705 + 30 +0.0 + 11 +18187.499957 + 21 +9228.34934 + 31 +0.0 + 0 +LINE + 5 +17C2 + 8 +0 + 62 + 0 + 10 +18237.499957 + 20 +9185.04807 + 30 +0.0 + 11 +18224.999957 + 21 +9206.698705 + 31 +0.0 + 0 +LINE + 5 +17C3 + 8 +0 + 62 + 0 + 10 +18199.999957 + 20 +9249.999975 + 30 +0.0 + 11 +18199.999942 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +17C4 + 8 +0 + 62 + 0 + 10 +18271.187964 + 20 +9170.0 + 30 +0.0 + 11 +18262.499957 + 21 +9185.04807 + 31 +0.0 + 0 +LINE + 5 +17C5 + 8 +0 + 62 + 0 + 10 +18237.499957 + 20 +9228.34934 + 30 +0.0 + 11 +18224.999957 + 21 +9249.999975 + 31 +0.0 + 0 +LINE + 5 +17C6 + 8 +0 + 62 + 0 + 10 +18274.999957 + 20 +9206.698705 + 30 +0.0 + 11 +18262.499957 + 21 +9228.34934 + 31 +0.0 + 0 +LINE + 5 +17C7 + 8 +0 + 62 + 0 + 10 +18312.499956 + 20 +9185.04807 + 30 +0.0 + 11 +18299.999956 + 21 +9206.698705 + 31 +0.0 + 0 +LINE + 5 +17C8 + 8 +0 + 62 + 0 + 10 +18274.999956 + 20 +9249.999975 + 30 +0.0 + 11 +18274.999942 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +17C9 + 8 +0 + 62 + 0 + 10 +18346.187963 + 20 +9170.0 + 30 +0.0 + 11 +18337.499956 + 21 +9185.04807 + 31 +0.0 + 0 +LINE + 5 +17CA + 8 +0 + 62 + 0 + 10 +18312.499956 + 20 +9228.34934 + 30 +0.0 + 11 +18299.999956 + 21 +9249.999975 + 31 +0.0 + 0 +LINE + 5 +17CB + 8 +0 + 62 + 0 + 10 +18349.999956 + 20 +9206.698705 + 30 +0.0 + 11 +18337.499956 + 21 +9228.34934 + 31 +0.0 + 0 +LINE + 5 +17CC + 8 +0 + 62 + 0 + 10 +18387.499956 + 20 +9185.048069 + 30 +0.0 + 11 +18374.999956 + 21 +9206.698705 + 31 +0.0 + 0 +LINE + 5 +17CD + 8 +0 + 62 + 0 + 10 +18349.999956 + 20 +9249.999975 + 30 +0.0 + 11 +18349.999942 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +17CE + 8 +0 + 62 + 0 + 10 +18421.187963 + 20 +9170.0 + 30 +0.0 + 11 +18412.499956 + 21 +9185.048069 + 31 +0.0 + 0 +LINE + 5 +17CF + 8 +0 + 62 + 0 + 10 +18387.499956 + 20 +9228.34934 + 30 +0.0 + 11 +18374.999956 + 21 +9249.999975 + 31 +0.0 + 0 +LINE + 5 +17D0 + 8 +0 + 62 + 0 + 10 +18424.999956 + 20 +9206.698704 + 30 +0.0 + 11 +18412.499956 + 21 +9228.34934 + 31 +0.0 + 0 +LINE + 5 +17D1 + 8 +0 + 62 + 0 + 10 +18462.499956 + 20 +9185.048069 + 30 +0.0 + 11 +18449.999956 + 21 +9206.698704 + 31 +0.0 + 0 +LINE + 5 +17D2 + 8 +0 + 62 + 0 + 10 +18424.999956 + 20 +9249.999975 + 30 +0.0 + 11 +18424.999941 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +17D3 + 8 +0 + 62 + 0 + 10 +18496.187963 + 20 +9170.0 + 30 +0.0 + 11 +18487.499956 + 21 +9185.048069 + 31 +0.0 + 0 +LINE + 5 +17D4 + 8 +0 + 62 + 0 + 10 +18462.499956 + 20 +9228.349339 + 30 +0.0 + 11 +18449.999956 + 21 +9249.999975 + 31 +0.0 + 0 +LINE + 5 +17D5 + 8 +0 + 62 + 0 + 10 +18499.999956 + 20 +9206.698704 + 30 +0.0 + 11 +18487.499956 + 21 +9228.349339 + 31 +0.0 + 0 +LINE + 5 +17D6 + 8 +0 + 62 + 0 + 10 +18499.999956 + 20 +9249.999974 + 30 +0.0 + 11 +18499.999941 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +17D7 + 8 +0 + 62 + 0 + 10 +17924.999958 + 20 +9206.698754 + 30 +0.0 + 11 +17937.499958 + 21 +9228.349389 + 31 +0.0 + 0 +LINE + 5 +17D8 + 8 +0 + 62 + 0 + 10 +17887.499958 + 20 +9185.048119 + 30 +0.0 + 11 +17899.999958 + 21 +9206.698754 + 31 +0.0 + 0 +LINE + 5 +17D9 + 8 +0 + 62 + 0 + 10 +17853.811922 + 20 +9170.0 + 30 +0.0 + 11 +17862.499958 + 21 +9185.048119 + 31 +0.0 + 0 +LINE + 5 +17DA + 8 +0 + 62 + 0 + 10 +17887.499958 + 20 +9228.349389 + 30 +0.0 + 11 +17899.999944 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +17DB + 8 +0 + 62 + 0 + 10 +17849.999958 + 20 +9206.698754 + 30 +0.0 + 11 +17862.499958 + 21 +9228.349389 + 31 +0.0 + 0 +LINE + 5 +17DC + 8 +0 + 62 + 0 + 10 +17812.499958 + 20 +9185.048119 + 30 +0.0 + 11 +17824.999958 + 21 +9206.698754 + 31 +0.0 + 0 +LINE + 5 +17DD + 8 +0 + 62 + 0 + 10 +17778.811922 + 20 +9170.0 + 30 +0.0 + 11 +17787.499958 + 21 +9185.048119 + 31 +0.0 + 0 +LINE + 5 +17DE + 8 +0 + 62 + 0 + 10 +17812.499958 + 20 +9228.349389 + 30 +0.0 + 11 +17824.999944 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +17DF + 8 +0 + 62 + 0 + 10 +17774.999958 + 20 +9206.698754 + 30 +0.0 + 11 +17787.499958 + 21 +9228.349389 + 31 +0.0 + 0 +LINE + 5 +17E0 + 8 +0 + 62 + 0 + 10 +17737.499958 + 20 +9185.048119 + 30 +0.0 + 11 +17749.999958 + 21 +9206.698754 + 31 +0.0 + 0 +LINE + 5 +17E1 + 8 +0 + 62 + 0 + 10 +17703.811923 + 20 +9170.0 + 30 +0.0 + 11 +17712.499958 + 21 +9185.048119 + 31 +0.0 + 0 +LINE + 5 +17E2 + 8 +0 + 62 + 0 + 10 +17737.499958 + 20 +9228.349389 + 30 +0.0 + 11 +17749.999944 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +17E3 + 8 +0 + 62 + 0 + 10 +17699.999958 + 20 +9206.698754 + 30 +0.0 + 11 +17712.499958 + 21 +9228.349389 + 31 +0.0 + 0 +LINE + 5 +17E4 + 8 +0 + 62 + 0 + 10 +17662.499958 + 20 +9185.048119 + 30 +0.0 + 11 +17674.999958 + 21 +9206.698754 + 31 +0.0 + 0 +LINE + 5 +17E5 + 8 +0 + 62 + 0 + 10 +17628.811923 + 20 +9170.0 + 30 +0.0 + 11 +17637.499958 + 21 +9185.048119 + 31 +0.0 + 0 +LINE + 5 +17E6 + 8 +0 + 62 + 0 + 10 +17662.499958 + 20 +9228.349389 + 30 +0.0 + 11 +17674.999945 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +17E7 + 8 +0 + 62 + 0 + 10 +17624.999959 + 20 +9206.698754 + 30 +0.0 + 11 +17637.499959 + 21 +9228.349389 + 31 +0.0 + 0 +LINE + 5 +17E8 + 8 +0 + 62 + 0 + 10 +17587.499959 + 20 +9185.048119 + 30 +0.0 + 11 +17599.999959 + 21 +9206.698754 + 31 +0.0 + 0 +LINE + 5 +17E9 + 8 +0 + 62 + 0 + 10 +17553.811923 + 20 +9170.0 + 30 +0.0 + 11 +17562.499959 + 21 +9185.048119 + 31 +0.0 + 0 +LINE + 5 +17EA + 8 +0 + 62 + 0 + 10 +17587.499959 + 20 +9228.349389 + 30 +0.0 + 11 +17599.999945 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +17EB + 8 +0 + 62 + 0 + 10 +17549.999959 + 20 +9206.698754 + 30 +0.0 + 11 +17562.499959 + 21 +9228.349389 + 31 +0.0 + 0 +LINE + 5 +17EC + 8 +0 + 62 + 0 + 10 +17512.499959 + 20 +9185.048118 + 30 +0.0 + 11 +17524.999959 + 21 +9206.698754 + 31 +0.0 + 0 +LINE + 5 +17ED + 8 +0 + 62 + 0 + 10 +17478.811924 + 20 +9170.0 + 30 +0.0 + 11 +17487.499959 + 21 +9185.048118 + 31 +0.0 + 0 +LINE + 5 +17EE + 8 +0 + 62 + 0 + 10 +17512.499959 + 20 +9228.349389 + 30 +0.0 + 11 +17524.999945 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +17EF + 8 +0 + 62 + 0 + 10 +17474.999959 + 20 +9206.698753 + 30 +0.0 + 11 +17487.499959 + 21 +9228.349389 + 31 +0.0 + 0 +LINE + 5 +17F0 + 8 +0 + 62 + 0 + 10 +17437.499959 + 20 +9185.048118 + 30 +0.0 + 11 +17449.999959 + 21 +9206.698753 + 31 +0.0 + 0 +LINE + 5 +17F1 + 8 +0 + 62 + 0 + 10 +17403.811924 + 20 +9170.0 + 30 +0.0 + 11 +17412.499959 + 21 +9185.048118 + 31 +0.0 + 0 +LINE + 5 +17F2 + 8 +0 + 62 + 0 + 10 +17437.499959 + 20 +9228.349388 + 30 +0.0 + 11 +17449.999946 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +17F3 + 8 +0 + 62 + 0 + 10 +17399.999959 + 20 +9206.698753 + 30 +0.0 + 11 +17412.499959 + 21 +9228.349388 + 31 +0.0 + 0 +LINE + 5 +17F4 + 8 +0 + 62 + 0 + 10 +17363.75 + 20 +9187.213252 + 30 +0.0 + 11 +17374.999959 + 21 +9206.698753 + 31 +0.0 + 0 +LINE + 5 +17F5 + 8 +0 + 62 + 0 + 10 +17363.75 + 20 +9230.514522 + 30 +0.0 + 11 +17374.999946 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +17F6 + 8 +0 + 62 + 0 + 10 +17928.811922 + 20 +9170.0 + 30 +0.0 + 11 +17937.499957 + 21 +9185.048119 + 31 +0.0 + 0 +LINE + 5 +17F7 + 8 +0 + 62 + 0 + 10 +17962.499957 + 20 +9228.349389 + 30 +0.0 + 11 +17974.999943 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +17F8 + 8 +0 + 62 + 0 + 10 +17962.499957 + 20 +9185.048119 + 30 +0.0 + 11 +17974.999957 + 21 +9206.698754 + 31 +0.0 + 0 +LINE + 5 +17F9 + 8 +0 + 62 + 0 + 10 +17999.999957 + 20 +9206.698754 + 30 +0.0 + 11 +18012.499957 + 21 +9228.34939 + 31 +0.0 + 0 +LINE + 5 +17FA + 8 +0 + 62 + 0 + 10 +18003.811921 + 20 +9170.0 + 30 +0.0 + 11 +18012.499957 + 21 +9185.048119 + 31 +0.0 + 0 +LINE + 5 +17FB + 8 +0 + 62 + 0 + 10 +18037.499957 + 20 +9228.34939 + 30 +0.0 + 11 +18049.999943 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +17FC + 8 +0 + 62 + 0 + 10 +18037.499957 + 20 +9185.048119 + 30 +0.0 + 11 +18049.999957 + 21 +9206.698755 + 31 +0.0 + 0 +LINE + 5 +17FD + 8 +0 + 62 + 0 + 10 +18074.999957 + 20 +9206.698755 + 30 +0.0 + 11 +18087.499957 + 21 +9228.34939 + 31 +0.0 + 0 +LINE + 5 +17FE + 8 +0 + 62 + 0 + 10 +18078.811921 + 20 +9170.0 + 30 +0.0 + 11 +18087.499957 + 21 +9185.04812 + 31 +0.0 + 0 +LINE + 5 +17FF + 8 +0 + 62 + 0 + 10 +18112.499957 + 20 +9228.34939 + 30 +0.0 + 11 +18124.999943 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1800 + 8 +0 + 62 + 0 + 10 +18112.499957 + 20 +9185.04812 + 30 +0.0 + 11 +18124.999957 + 21 +9206.698755 + 31 +0.0 + 0 +LINE + 5 +1801 + 8 +0 + 62 + 0 + 10 +18149.999957 + 20 +9206.698755 + 30 +0.0 + 11 +18162.499957 + 21 +9228.34939 + 31 +0.0 + 0 +LINE + 5 +1802 + 8 +0 + 62 + 0 + 10 +18153.811921 + 20 +9170.0 + 30 +0.0 + 11 +18162.499957 + 21 +9185.04812 + 31 +0.0 + 0 +LINE + 5 +1803 + 8 +0 + 62 + 0 + 10 +18187.499957 + 20 +9228.34939 + 30 +0.0 + 11 +18199.999942 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1804 + 8 +0 + 62 + 0 + 10 +18187.499957 + 20 +9185.04812 + 30 +0.0 + 11 +18199.999957 + 21 +9206.698755 + 31 +0.0 + 0 +LINE + 5 +1805 + 8 +0 + 62 + 0 + 10 +18224.999957 + 20 +9206.698755 + 30 +0.0 + 11 +18237.499957 + 21 +9228.34939 + 31 +0.0 + 0 +LINE + 5 +1806 + 8 +0 + 62 + 0 + 10 +18228.81192 + 20 +9170.0 + 30 +0.0 + 11 +18237.499956 + 21 +9185.04812 + 31 +0.0 + 0 +LINE + 5 +1807 + 8 +0 + 62 + 0 + 10 +18262.499956 + 20 +9228.34939 + 30 +0.0 + 11 +18274.999942 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1808 + 8 +0 + 62 + 0 + 10 +18262.499956 + 20 +9185.04812 + 30 +0.0 + 11 +18274.999956 + 21 +9206.698755 + 31 +0.0 + 0 +LINE + 5 +1809 + 8 +0 + 62 + 0 + 10 +18299.999956 + 20 +9206.698755 + 30 +0.0 + 11 +18312.499956 + 21 +9228.34939 + 31 +0.0 + 0 +LINE + 5 +180A + 8 +0 + 62 + 0 + 10 +18303.81192 + 20 +9170.0 + 30 +0.0 + 11 +18312.499956 + 21 +9185.04812 + 31 +0.0 + 0 +LINE + 5 +180B + 8 +0 + 62 + 0 + 10 +18337.499956 + 20 +9228.34939 + 30 +0.0 + 11 +18349.999942 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +180C + 8 +0 + 62 + 0 + 10 +18337.499956 + 20 +9185.04812 + 30 +0.0 + 11 +18349.999956 + 21 +9206.698755 + 31 +0.0 + 0 +LINE + 5 +180D + 8 +0 + 62 + 0 + 10 +18374.999956 + 20 +9206.698755 + 30 +0.0 + 11 +18387.499956 + 21 +9228.34939 + 31 +0.0 + 0 +LINE + 5 +180E + 8 +0 + 62 + 0 + 10 +18378.81192 + 20 +9170.0 + 30 +0.0 + 11 +18387.499956 + 21 +9185.04812 + 31 +0.0 + 0 +LINE + 5 +180F + 8 +0 + 62 + 0 + 10 +18412.499956 + 20 +9228.34939 + 30 +0.0 + 11 +18424.999941 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1810 + 8 +0 + 62 + 0 + 10 +18412.499956 + 20 +9185.04812 + 30 +0.0 + 11 +18424.999956 + 21 +9206.698755 + 31 +0.0 + 0 +LINE + 5 +1811 + 8 +0 + 62 + 0 + 10 +18449.999956 + 20 +9206.698755 + 30 +0.0 + 11 +18462.499956 + 21 +9228.34939 + 31 +0.0 + 0 +LINE + 5 +1812 + 8 +0 + 62 + 0 + 10 +18453.811919 + 20 +9170.0 + 30 +0.0 + 11 +18462.499956 + 21 +9185.04812 + 31 +0.0 + 0 +LINE + 5 +1813 + 8 +0 + 62 + 0 + 10 +18487.499956 + 20 +9228.34939 + 30 +0.0 + 11 +18499.999941 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1814 + 8 +0 + 62 + 0 + 10 +18487.499956 + 20 +9185.04812 + 30 +0.0 + 11 +18499.999956 + 21 +9206.698755 + 31 +0.0 + 0 +ENDBLK + 5 +1815 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X48 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X48 + 1 + + 0 +LINE + 5 +1817 + 8 +0 + 62 + 0 + 10 +19775.0 + 20 +22153.77846 + 30 +0.0 + 11 +19800.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1818 + 8 +0 + 62 + 0 + 10 +19850.0 + 20 +22153.77846 + 30 +0.0 + 11 +19875.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1819 + 8 +0 + 62 + 0 + 10 +19925.0 + 20 +22153.77846 + 30 +0.0 + 11 +19950.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +181A + 8 +0 + 62 + 0 + 10 +20000.0 + 20 +22153.77846 + 30 +0.0 + 11 +20025.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +181B + 8 +0 + 62 + 0 + 10 +20075.0 + 20 +22153.77846 + 30 +0.0 + 11 +20100.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +181C + 8 +0 + 62 + 0 + 10 +20150.0 + 20 +22153.77846 + 30 +0.0 + 11 +20175.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +181D + 8 +0 + 62 + 0 + 10 +20225.0 + 20 +22153.77846 + 30 +0.0 + 11 +20250.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +181E + 8 +0 + 62 + 0 + 10 +20300.0 + 20 +22153.77846 + 30 +0.0 + 11 +20325.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +181F + 8 +0 + 62 + 0 + 10 +20375.0 + 20 +22153.77846 + 30 +0.0 + 11 +20400.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1820 + 8 +0 + 62 + 0 + 10 +20450.0 + 20 +22153.77846 + 30 +0.0 + 11 +20475.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1821 + 8 +0 + 62 + 0 + 10 +20525.0 + 20 +22153.77846 + 30 +0.0 + 11 +20550.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1822 + 8 +0 + 62 + 0 + 10 +20600.0 + 20 +22153.77846 + 30 +0.0 + 11 +20625.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1823 + 8 +0 + 62 + 0 + 10 +20675.0 + 20 +22153.77846 + 30 +0.0 + 11 +20700.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1824 + 8 +0 + 62 + 0 + 10 +20750.0 + 20 +22153.77846 + 30 +0.0 + 11 +20775.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1825 + 8 +0 + 62 + 0 + 10 +20825.0 + 20 +22153.77846 + 30 +0.0 + 11 +20850.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1826 + 8 +0 + 62 + 0 + 10 +20900.0 + 20 +22153.77846 + 30 +0.0 + 11 +20925.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1827 + 8 +0 + 62 + 0 + 10 +20975.0 + 20 +22153.77846 + 30 +0.0 + 11 +21000.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1828 + 8 +0 + 62 + 0 + 10 +21050.0 + 20 +22153.77846 + 30 +0.0 + 11 +21075.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1829 + 8 +0 + 62 + 0 + 10 +21125.0 + 20 +22153.77846 + 30 +0.0 + 11 +21150.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +182A + 8 +0 + 62 + 0 + 10 +21200.0 + 20 +22153.77846 + 30 +0.0 + 11 +21225.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +182B + 8 +0 + 62 + 0 + 10 +21275.0 + 20 +22153.77846 + 30 +0.0 + 11 +21300.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +182C + 8 +0 + 62 + 0 + 10 +21350.0 + 20 +22153.77846 + 30 +0.0 + 11 +21375.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +182D + 8 +0 + 62 + 0 + 10 +21425.0 + 20 +22153.77846 + 30 +0.0 + 11 +21450.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +182E + 8 +0 + 62 + 0 + 10 +21500.0 + 20 +22153.77846 + 30 +0.0 + 11 +21525.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +182F + 8 +0 + 62 + 0 + 10 +21575.0 + 20 +22153.77846 + 30 +0.0 + 11 +21600.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1830 + 8 +0 + 62 + 0 + 10 +21650.0 + 20 +22153.77846 + 30 +0.0 + 11 +21675.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1831 + 8 +0 + 62 + 0 + 10 +21725.0 + 20 +22153.77846 + 30 +0.0 + 11 +21750.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1832 + 8 +0 + 62 + 0 + 10 +21800.0 + 20 +22153.77846 + 30 +0.0 + 11 +21825.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1833 + 8 +0 + 62 + 0 + 10 +21875.0 + 20 +22153.77846 + 30 +0.0 + 11 +21900.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1834 + 8 +0 + 62 + 0 + 10 +21950.0 + 20 +22153.77846 + 30 +0.0 + 11 +21975.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1835 + 8 +0 + 62 + 0 + 10 +22025.0 + 20 +22153.77846 + 30 +0.0 + 11 +22050.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1836 + 8 +0 + 62 + 0 + 10 +22100.0 + 20 +22153.77846 + 30 +0.0 + 11 +22125.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1837 + 8 +0 + 62 + 0 + 10 +22175.0 + 20 +22153.77846 + 30 +0.0 + 11 +22200.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1838 + 8 +0 + 62 + 0 + 10 +22250.0 + 20 +22153.77846 + 30 +0.0 + 11 +22275.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1839 + 8 +0 + 62 + 0 + 10 +22325.0 + 20 +22153.77846 + 30 +0.0 + 11 +22350.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +183A + 8 +0 + 62 + 0 + 10 +22400.0 + 20 +22153.77846 + 30 +0.0 + 11 +22425.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +183B + 8 +0 + 62 + 0 + 10 +22475.0 + 20 +22153.77846 + 30 +0.0 + 11 +22500.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +183C + 8 +0 + 62 + 0 + 10 +22550.0 + 20 +22153.77846 + 30 +0.0 + 11 +22575.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +183D + 8 +0 + 62 + 0 + 10 +22625.0 + 20 +22153.77846 + 30 +0.0 + 11 +22650.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +183E + 8 +0 + 62 + 0 + 10 +22700.0 + 20 +22153.77846 + 30 +0.0 + 11 +22725.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +183F + 8 +0 + 62 + 0 + 10 +22775.0 + 20 +22153.77846 + 30 +0.0 + 11 +22800.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1840 + 8 +0 + 62 + 0 + 10 +22850.0 + 20 +22153.77846 + 30 +0.0 + 11 +22875.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1841 + 8 +0 + 62 + 0 + 10 +22925.0 + 20 +22153.77846 + 30 +0.0 + 11 +22950.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1842 + 8 +0 + 62 + 0 + 10 +23000.0 + 20 +22153.77846 + 30 +0.0 + 11 +23025.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1843 + 8 +0 + 62 + 0 + 10 +23075.0 + 20 +22153.77846 + 30 +0.0 + 11 +23100.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1844 + 8 +0 + 62 + 0 + 10 +23150.0 + 20 +22153.77846 + 30 +0.0 + 11 +23175.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1845 + 8 +0 + 62 + 0 + 10 +23225.0 + 20 +22153.77846 + 30 +0.0 + 11 +23250.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1846 + 8 +0 + 62 + 0 + 10 +23300.0 + 20 +22153.77846 + 30 +0.0 + 11 +23325.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1847 + 8 +0 + 62 + 0 + 10 +23375.0 + 20 +22153.77846 + 30 +0.0 + 11 +23375.75 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1848 + 8 +0 + 62 + 0 + 10 +19738.25 + 20 +22175.429095 + 30 +0.0 + 11 +19762.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1849 + 8 +0 + 62 + 0 + 10 +19812.5 + 20 +22175.429095 + 30 +0.0 + 11 +19837.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +184A + 8 +0 + 62 + 0 + 10 +19887.5 + 20 +22175.429095 + 30 +0.0 + 11 +19912.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +184B + 8 +0 + 62 + 0 + 10 +19962.5 + 20 +22175.429095 + 30 +0.0 + 11 +19987.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +184C + 8 +0 + 62 + 0 + 10 +20037.5 + 20 +22175.429095 + 30 +0.0 + 11 +20062.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +184D + 8 +0 + 62 + 0 + 10 +20112.5 + 20 +22175.429095 + 30 +0.0 + 11 +20137.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +184E + 8 +0 + 62 + 0 + 10 +20187.5 + 20 +22175.429095 + 30 +0.0 + 11 +20212.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +184F + 8 +0 + 62 + 0 + 10 +20262.5 + 20 +22175.429095 + 30 +0.0 + 11 +20287.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1850 + 8 +0 + 62 + 0 + 10 +20337.5 + 20 +22175.429095 + 30 +0.0 + 11 +20362.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1851 + 8 +0 + 62 + 0 + 10 +20412.5 + 20 +22175.429095 + 30 +0.0 + 11 +20437.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1852 + 8 +0 + 62 + 0 + 10 +20487.5 + 20 +22175.429095 + 30 +0.0 + 11 +20512.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1853 + 8 +0 + 62 + 0 + 10 +20562.5 + 20 +22175.429095 + 30 +0.0 + 11 +20587.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1854 + 8 +0 + 62 + 0 + 10 +20637.5 + 20 +22175.429095 + 30 +0.0 + 11 +20662.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1855 + 8 +0 + 62 + 0 + 10 +20712.5 + 20 +22175.429095 + 30 +0.0 + 11 +20737.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1856 + 8 +0 + 62 + 0 + 10 +20787.5 + 20 +22175.429095 + 30 +0.0 + 11 +20812.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1857 + 8 +0 + 62 + 0 + 10 +20862.5 + 20 +22175.429095 + 30 +0.0 + 11 +20887.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1858 + 8 +0 + 62 + 0 + 10 +20937.5 + 20 +22175.429095 + 30 +0.0 + 11 +20962.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1859 + 8 +0 + 62 + 0 + 10 +21012.5 + 20 +22175.429095 + 30 +0.0 + 11 +21037.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +185A + 8 +0 + 62 + 0 + 10 +21087.5 + 20 +22175.429095 + 30 +0.0 + 11 +21112.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +185B + 8 +0 + 62 + 0 + 10 +21162.5 + 20 +22175.429095 + 30 +0.0 + 11 +21187.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +185C + 8 +0 + 62 + 0 + 10 +21237.5 + 20 +22175.429095 + 30 +0.0 + 11 +21262.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +185D + 8 +0 + 62 + 0 + 10 +21312.5 + 20 +22175.429095 + 30 +0.0 + 11 +21337.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +185E + 8 +0 + 62 + 0 + 10 +21387.5 + 20 +22175.429095 + 30 +0.0 + 11 +21412.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +185F + 8 +0 + 62 + 0 + 10 +21462.5 + 20 +22175.429095 + 30 +0.0 + 11 +21487.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1860 + 8 +0 + 62 + 0 + 10 +21537.5 + 20 +22175.429095 + 30 +0.0 + 11 +21562.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1861 + 8 +0 + 62 + 0 + 10 +21612.5 + 20 +22175.429095 + 30 +0.0 + 11 +21637.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1862 + 8 +0 + 62 + 0 + 10 +21687.5 + 20 +22175.429095 + 30 +0.0 + 11 +21712.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1863 + 8 +0 + 62 + 0 + 10 +21762.5 + 20 +22175.429095 + 30 +0.0 + 11 +21787.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1864 + 8 +0 + 62 + 0 + 10 +21837.5 + 20 +22175.429095 + 30 +0.0 + 11 +21862.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1865 + 8 +0 + 62 + 0 + 10 +21912.5 + 20 +22175.429095 + 30 +0.0 + 11 +21937.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1866 + 8 +0 + 62 + 0 + 10 +21987.5 + 20 +22175.429095 + 30 +0.0 + 11 +22012.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1867 + 8 +0 + 62 + 0 + 10 +22062.5 + 20 +22175.429095 + 30 +0.0 + 11 +22087.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1868 + 8 +0 + 62 + 0 + 10 +22137.5 + 20 +22175.429095 + 30 +0.0 + 11 +22162.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1869 + 8 +0 + 62 + 0 + 10 +22212.5 + 20 +22175.429095 + 30 +0.0 + 11 +22237.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +186A + 8 +0 + 62 + 0 + 10 +22287.5 + 20 +22175.429095 + 30 +0.0 + 11 +22312.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +186B + 8 +0 + 62 + 0 + 10 +22362.5 + 20 +22175.429095 + 30 +0.0 + 11 +22387.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +186C + 8 +0 + 62 + 0 + 10 +22437.5 + 20 +22175.429095 + 30 +0.0 + 11 +22462.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +186D + 8 +0 + 62 + 0 + 10 +22512.5 + 20 +22175.429095 + 30 +0.0 + 11 +22537.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +186E + 8 +0 + 62 + 0 + 10 +22587.5 + 20 +22175.429095 + 30 +0.0 + 11 +22612.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +186F + 8 +0 + 62 + 0 + 10 +22662.5 + 20 +22175.429095 + 30 +0.0 + 11 +22687.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1870 + 8 +0 + 62 + 0 + 10 +22737.5 + 20 +22175.429095 + 30 +0.0 + 11 +22762.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1871 + 8 +0 + 62 + 0 + 10 +22812.5 + 20 +22175.429095 + 30 +0.0 + 11 +22837.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1872 + 8 +0 + 62 + 0 + 10 +22887.5 + 20 +22175.429095 + 30 +0.0 + 11 +22912.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1873 + 8 +0 + 62 + 0 + 10 +22962.5 + 20 +22175.429095 + 30 +0.0 + 11 +22987.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1874 + 8 +0 + 62 + 0 + 10 +23037.5 + 20 +22175.429095 + 30 +0.0 + 11 +23062.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1875 + 8 +0 + 62 + 0 + 10 +23112.5 + 20 +22175.429095 + 30 +0.0 + 11 +23137.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1876 + 8 +0 + 62 + 0 + 10 +23187.5 + 20 +22175.429095 + 30 +0.0 + 11 +23212.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1877 + 8 +0 + 62 + 0 + 10 +23262.5 + 20 +22175.429095 + 30 +0.0 + 11 +23287.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1878 + 8 +0 + 62 + 0 + 10 +23337.5 + 20 +22175.429095 + 30 +0.0 + 11 +23362.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1879 + 8 +0 + 62 + 0 + 10 +19738.25 + 20 +22132.127825 + 30 +0.0 + 11 +19762.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +187A + 8 +0 + 62 + 0 + 10 +19812.5 + 20 +22132.127825 + 30 +0.0 + 11 +19837.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +187B + 8 +0 + 62 + 0 + 10 +19887.5 + 20 +22132.127825 + 30 +0.0 + 11 +19912.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +187C + 8 +0 + 62 + 0 + 10 +19962.5 + 20 +22132.127825 + 30 +0.0 + 11 +19987.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +187D + 8 +0 + 62 + 0 + 10 +20037.5 + 20 +22132.127825 + 30 +0.0 + 11 +20062.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +187E + 8 +0 + 62 + 0 + 10 +20112.5 + 20 +22132.127825 + 30 +0.0 + 11 +20137.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +187F + 8 +0 + 62 + 0 + 10 +20187.5 + 20 +22132.127825 + 30 +0.0 + 11 +20212.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1880 + 8 +0 + 62 + 0 + 10 +20262.5 + 20 +22132.127825 + 30 +0.0 + 11 +20287.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1881 + 8 +0 + 62 + 0 + 10 +20337.5 + 20 +22132.127825 + 30 +0.0 + 11 +20362.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1882 + 8 +0 + 62 + 0 + 10 +20412.5 + 20 +22132.127825 + 30 +0.0 + 11 +20437.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1883 + 8 +0 + 62 + 0 + 10 +20487.5 + 20 +22132.127825 + 30 +0.0 + 11 +20512.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1884 + 8 +0 + 62 + 0 + 10 +20562.5 + 20 +22132.127825 + 30 +0.0 + 11 +20587.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1885 + 8 +0 + 62 + 0 + 10 +20637.5 + 20 +22132.127825 + 30 +0.0 + 11 +20662.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1886 + 8 +0 + 62 + 0 + 10 +20712.5 + 20 +22132.127825 + 30 +0.0 + 11 +20737.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1887 + 8 +0 + 62 + 0 + 10 +20787.5 + 20 +22132.127825 + 30 +0.0 + 11 +20812.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1888 + 8 +0 + 62 + 0 + 10 +20862.5 + 20 +22132.127825 + 30 +0.0 + 11 +20887.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1889 + 8 +0 + 62 + 0 + 10 +20937.5 + 20 +22132.127825 + 30 +0.0 + 11 +20962.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +188A + 8 +0 + 62 + 0 + 10 +21012.5 + 20 +22132.127825 + 30 +0.0 + 11 +21037.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +188B + 8 +0 + 62 + 0 + 10 +21087.5 + 20 +22132.127825 + 30 +0.0 + 11 +21112.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +188C + 8 +0 + 62 + 0 + 10 +21162.5 + 20 +22132.127825 + 30 +0.0 + 11 +21187.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +188D + 8 +0 + 62 + 0 + 10 +21237.5 + 20 +22132.127825 + 30 +0.0 + 11 +21262.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +188E + 8 +0 + 62 + 0 + 10 +21312.5 + 20 +22132.127825 + 30 +0.0 + 11 +21337.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +188F + 8 +0 + 62 + 0 + 10 +21387.5 + 20 +22132.127825 + 30 +0.0 + 11 +21412.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1890 + 8 +0 + 62 + 0 + 10 +21462.5 + 20 +22132.127825 + 30 +0.0 + 11 +21487.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1891 + 8 +0 + 62 + 0 + 10 +21537.5 + 20 +22132.127825 + 30 +0.0 + 11 +21562.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1892 + 8 +0 + 62 + 0 + 10 +21612.5 + 20 +22132.127825 + 30 +0.0 + 11 +21637.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1893 + 8 +0 + 62 + 0 + 10 +21687.5 + 20 +22132.127825 + 30 +0.0 + 11 +21712.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1894 + 8 +0 + 62 + 0 + 10 +21762.5 + 20 +22132.127825 + 30 +0.0 + 11 +21787.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1895 + 8 +0 + 62 + 0 + 10 +21837.5 + 20 +22132.127825 + 30 +0.0 + 11 +21862.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1896 + 8 +0 + 62 + 0 + 10 +21912.5 + 20 +22132.127825 + 30 +0.0 + 11 +21937.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1897 + 8 +0 + 62 + 0 + 10 +21987.5 + 20 +22132.127825 + 30 +0.0 + 11 +22012.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1898 + 8 +0 + 62 + 0 + 10 +22062.5 + 20 +22132.127825 + 30 +0.0 + 11 +22087.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1899 + 8 +0 + 62 + 0 + 10 +22137.5 + 20 +22132.127825 + 30 +0.0 + 11 +22162.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +189A + 8 +0 + 62 + 0 + 10 +22212.5 + 20 +22132.127825 + 30 +0.0 + 11 +22237.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +189B + 8 +0 + 62 + 0 + 10 +22287.5 + 20 +22132.127825 + 30 +0.0 + 11 +22312.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +189C + 8 +0 + 62 + 0 + 10 +22362.5 + 20 +22132.127825 + 30 +0.0 + 11 +22387.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +189D + 8 +0 + 62 + 0 + 10 +22437.5 + 20 +22132.127825 + 30 +0.0 + 11 +22462.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +189E + 8 +0 + 62 + 0 + 10 +22512.5 + 20 +22132.127825 + 30 +0.0 + 11 +22537.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +189F + 8 +0 + 62 + 0 + 10 +22587.5 + 20 +22132.127825 + 30 +0.0 + 11 +22612.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +18A0 + 8 +0 + 62 + 0 + 10 +22662.5 + 20 +22132.127825 + 30 +0.0 + 11 +22687.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +18A1 + 8 +0 + 62 + 0 + 10 +22737.5 + 20 +22132.127825 + 30 +0.0 + 11 +22762.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +18A2 + 8 +0 + 62 + 0 + 10 +22812.5 + 20 +22132.127825 + 30 +0.0 + 11 +22837.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +18A3 + 8 +0 + 62 + 0 + 10 +22887.5 + 20 +22132.127825 + 30 +0.0 + 11 +22912.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +18A4 + 8 +0 + 62 + 0 + 10 +22962.5 + 20 +22132.127825 + 30 +0.0 + 11 +22987.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +18A5 + 8 +0 + 62 + 0 + 10 +23037.5 + 20 +22132.127825 + 30 +0.0 + 11 +23062.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +18A6 + 8 +0 + 62 + 0 + 10 +23112.5 + 20 +22132.127825 + 30 +0.0 + 11 +23137.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +18A7 + 8 +0 + 62 + 0 + 10 +23187.5 + 20 +22132.127825 + 30 +0.0 + 11 +23212.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +18A8 + 8 +0 + 62 + 0 + 10 +23262.5 + 20 +22132.127825 + 30 +0.0 + 11 +23287.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +18A9 + 8 +0 + 62 + 0 + 10 +23337.5 + 20 +22132.127825 + 30 +0.0 + 11 +23362.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +18AA + 8 +0 + 62 + 0 + 10 +21572.388682 + 20 +22115.0 + 30 +0.0 + 11 +21562.499921 + 21 +22132.127836 + 31 +0.0 + 0 +LINE + 5 +18AB + 8 +0 + 62 + 0 + 10 +21537.499921 + 20 +22175.429106 + 30 +0.0 + 11 +21526.20066 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +18AC + 8 +0 + 62 + 0 + 10 +21537.499921 + 20 +22132.127836 + 30 +0.0 + 11 +21524.999921 + 21 +22153.778471 + 31 +0.0 + 0 +LINE + 5 +18AD + 8 +0 + 62 + 0 + 10 +21499.999922 + 20 +22153.778471 + 30 +0.0 + 11 +21487.499922 + 21 +22175.429106 + 31 +0.0 + 0 +LINE + 5 +18AE + 8 +0 + 62 + 0 + 10 +21497.388682 + 20 +22115.0 + 30 +0.0 + 11 +21487.499922 + 21 +22132.127836 + 31 +0.0 + 0 +LINE + 5 +18AF + 8 +0 + 62 + 0 + 10 +21462.499922 + 20 +22175.429106 + 30 +0.0 + 11 +21451.200661 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +18B0 + 8 +0 + 62 + 0 + 10 +21462.499922 + 20 +22132.127836 + 30 +0.0 + 11 +21449.999922 + 21 +22153.778471 + 31 +0.0 + 0 +LINE + 5 +18B1 + 8 +0 + 62 + 0 + 10 +21424.999922 + 20 +22153.778471 + 30 +0.0 + 11 +21412.499922 + 21 +22175.429106 + 31 +0.0 + 0 +LINE + 5 +18B2 + 8 +0 + 62 + 0 + 10 +21422.388683 + 20 +22115.0 + 30 +0.0 + 11 +21412.499922 + 21 +22132.127836 + 31 +0.0 + 0 +LINE + 5 +18B3 + 8 +0 + 62 + 0 + 10 +21387.499922 + 20 +22175.429106 + 30 +0.0 + 11 +21376.200661 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +18B4 + 8 +0 + 62 + 0 + 10 +21387.499922 + 20 +22132.127836 + 30 +0.0 + 11 +21374.999922 + 21 +22153.778471 + 31 +0.0 + 0 +LINE + 5 +18B5 + 8 +0 + 62 + 0 + 10 +21349.999922 + 20 +22153.778471 + 30 +0.0 + 11 +21337.499922 + 21 +22175.429106 + 31 +0.0 + 0 +LINE + 5 +18B6 + 8 +0 + 62 + 0 + 10 +21347.388683 + 20 +22115.0 + 30 +0.0 + 11 +21337.499922 + 21 +22132.127836 + 31 +0.0 + 0 +LINE + 5 +18B7 + 8 +0 + 62 + 0 + 10 +21312.499922 + 20 +22175.429106 + 30 +0.0 + 11 +21301.200661 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +18B8 + 8 +0 + 62 + 0 + 10 +21312.499922 + 20 +22132.127836 + 30 +0.0 + 11 +21299.999922 + 21 +22153.778471 + 31 +0.0 + 0 +LINE + 5 +18B9 + 8 +0 + 62 + 0 + 10 +21274.999922 + 20 +22153.778471 + 30 +0.0 + 11 +21262.499922 + 21 +22175.429107 + 31 +0.0 + 0 +LINE + 5 +18BA + 8 +0 + 62 + 0 + 10 +21272.388683 + 20 +22115.0 + 30 +0.0 + 11 +21262.499922 + 21 +22132.127836 + 31 +0.0 + 0 +LINE + 5 +18BB + 8 +0 + 62 + 0 + 10 +21237.499922 + 20 +22175.429107 + 30 +0.0 + 11 +21226.200662 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +18BC + 8 +0 + 62 + 0 + 10 +21237.499922 + 20 +22132.127836 + 30 +0.0 + 11 +21224.999922 + 21 +22153.778472 + 31 +0.0 + 0 +LINE + 5 +18BD + 8 +0 + 62 + 0 + 10 +21199.999922 + 20 +22153.778472 + 30 +0.0 + 11 +21187.499922 + 21 +22175.429107 + 31 +0.0 + 0 +LINE + 5 +18BE + 8 +0 + 62 + 0 + 10 +21197.388684 + 20 +22115.0 + 30 +0.0 + 11 +21187.499923 + 21 +22132.127837 + 31 +0.0 + 0 +LINE + 5 +18BF + 8 +0 + 62 + 0 + 10 +21162.499923 + 20 +22175.429107 + 30 +0.0 + 11 +21151.200662 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +18C0 + 8 +0 + 62 + 0 + 10 +21162.499923 + 20 +22132.127837 + 30 +0.0 + 11 +21149.999923 + 21 +22153.778472 + 31 +0.0 + 0 +LINE + 5 +18C1 + 8 +0 + 62 + 0 + 10 +21124.999923 + 20 +22153.778472 + 30 +0.0 + 11 +21112.499923 + 21 +22175.429107 + 31 +0.0 + 0 +LINE + 5 +18C2 + 8 +0 + 62 + 0 + 10 +21122.388684 + 20 +22115.0 + 30 +0.0 + 11 +21112.499923 + 21 +22132.127837 + 31 +0.0 + 0 +LINE + 5 +18C3 + 8 +0 + 62 + 0 + 10 +21087.499923 + 20 +22175.429107 + 30 +0.0 + 11 +21076.200662 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +18C4 + 8 +0 + 62 + 0 + 10 +21087.499923 + 20 +22132.127837 + 30 +0.0 + 11 +21074.999923 + 21 +22153.778472 + 31 +0.0 + 0 +LINE + 5 +18C5 + 8 +0 + 62 + 0 + 10 +21049.999923 + 20 +22153.778472 + 30 +0.0 + 11 +21037.499923 + 21 +22175.429107 + 31 +0.0 + 0 +LINE + 5 +18C6 + 8 +0 + 62 + 0 + 10 +21047.388684 + 20 +22115.0 + 30 +0.0 + 11 +21037.499923 + 21 +22132.127837 + 31 +0.0 + 0 +LINE + 5 +18C7 + 8 +0 + 62 + 0 + 10 +21012.499923 + 20 +22175.429107 + 30 +0.0 + 11 +21001.200663 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +18C8 + 8 +0 + 62 + 0 + 10 +21012.499923 + 20 +22132.127837 + 30 +0.0 + 11 +20999.999923 + 21 +22153.778472 + 31 +0.0 + 0 +LINE + 5 +18C9 + 8 +0 + 62 + 0 + 10 +20974.999923 + 20 +22153.778472 + 30 +0.0 + 11 +20962.499923 + 21 +22175.429107 + 31 +0.0 + 0 +LINE + 5 +18CA + 8 +0 + 62 + 0 + 10 +20972.388685 + 20 +22115.0 + 30 +0.0 + 11 +20962.499923 + 21 +22132.127837 + 31 +0.0 + 0 +LINE + 5 +18CB + 8 +0 + 62 + 0 + 10 +20937.499923 + 20 +22175.429107 + 30 +0.0 + 11 +20926.200663 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +18CC + 8 +0 + 62 + 0 + 10 +20937.499923 + 20 +22132.127837 + 30 +0.0 + 11 +20924.999923 + 21 +22153.778472 + 31 +0.0 + 0 +LINE + 5 +18CD + 8 +0 + 62 + 0 + 10 +20899.999923 + 20 +22153.778472 + 30 +0.0 + 11 +20887.499923 + 21 +22175.429107 + 31 +0.0 + 0 +LINE + 5 +18CE + 8 +0 + 62 + 0 + 10 +20897.388685 + 20 +22115.0 + 30 +0.0 + 11 +20887.499924 + 21 +22132.127837 + 31 +0.0 + 0 +LINE + 5 +18CF + 8 +0 + 62 + 0 + 10 +20862.499924 + 20 +22175.429107 + 30 +0.0 + 11 +20851.200663 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +18D0 + 8 +0 + 62 + 0 + 10 +20862.499924 + 20 +22132.127837 + 30 +0.0 + 11 +20849.999924 + 21 +22153.778472 + 31 +0.0 + 0 +LINE + 5 +18D1 + 8 +0 + 62 + 0 + 10 +20824.999924 + 20 +22153.778472 + 30 +0.0 + 11 +20812.499924 + 21 +22175.429107 + 31 +0.0 + 0 +LINE + 5 +18D2 + 8 +0 + 62 + 0 + 10 +20822.388685 + 20 +22115.0 + 30 +0.0 + 11 +20812.499924 + 21 +22132.127837 + 31 +0.0 + 0 +LINE + 5 +18D3 + 8 +0 + 62 + 0 + 10 +20787.499924 + 20 +22175.429107 + 30 +0.0 + 11 +20776.200664 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +18D4 + 8 +0 + 62 + 0 + 10 +20787.499924 + 20 +22132.127837 + 30 +0.0 + 11 +20774.999924 + 21 +22153.778472 + 31 +0.0 + 0 +LINE + 5 +18D5 + 8 +0 + 62 + 0 + 10 +20749.999924 + 20 +22153.778472 + 30 +0.0 + 11 +20737.499924 + 21 +22175.429108 + 31 +0.0 + 0 +LINE + 5 +18D6 + 8 +0 + 62 + 0 + 10 +20747.388686 + 20 +22115.0 + 30 +0.0 + 11 +20737.499924 + 21 +22132.127837 + 31 +0.0 + 0 +LINE + 5 +18D7 + 8 +0 + 62 + 0 + 10 +20712.499924 + 20 +22175.429108 + 30 +0.0 + 11 +20701.200664 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +18D8 + 8 +0 + 62 + 0 + 10 +20712.499924 + 20 +22132.127837 + 30 +0.0 + 11 +20699.999924 + 21 +22153.778473 + 31 +0.0 + 0 +LINE + 5 +18D9 + 8 +0 + 62 + 0 + 10 +20674.999924 + 20 +22153.778473 + 30 +0.0 + 11 +20662.499924 + 21 +22175.429108 + 31 +0.0 + 0 +LINE + 5 +18DA + 8 +0 + 62 + 0 + 10 +20672.388686 + 20 +22115.0 + 30 +0.0 + 11 +20662.499924 + 21 +22132.127838 + 31 +0.0 + 0 +LINE + 5 +18DB + 8 +0 + 62 + 0 + 10 +20637.499924 + 20 +22175.429108 + 30 +0.0 + 11 +20626.200664 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +18DC + 8 +0 + 62 + 0 + 10 +20637.499924 + 20 +22132.127838 + 30 +0.0 + 11 +20624.999924 + 21 +22153.778473 + 31 +0.0 + 0 +LINE + 5 +18DD + 8 +0 + 62 + 0 + 10 +20599.999924 + 20 +22153.778473 + 30 +0.0 + 11 +20587.499924 + 21 +22175.429108 + 31 +0.0 + 0 +LINE + 5 +18DE + 8 +0 + 62 + 0 + 10 +20597.388686 + 20 +22115.0 + 30 +0.0 + 11 +20587.499925 + 21 +22132.127838 + 31 +0.0 + 0 +LINE + 5 +18DF + 8 +0 + 62 + 0 + 10 +20562.499925 + 20 +22175.429108 + 30 +0.0 + 11 +20551.200665 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +18E0 + 8 +0 + 62 + 0 + 10 +20562.499925 + 20 +22132.127838 + 30 +0.0 + 11 +20549.999925 + 21 +22153.778473 + 31 +0.0 + 0 +LINE + 5 +18E1 + 8 +0 + 62 + 0 + 10 +20524.999925 + 20 +22153.778473 + 30 +0.0 + 11 +20512.499925 + 21 +22175.429108 + 31 +0.0 + 0 +LINE + 5 +18E2 + 8 +0 + 62 + 0 + 10 +20522.388687 + 20 +22115.0 + 30 +0.0 + 11 +20512.499925 + 21 +22132.127838 + 31 +0.0 + 0 +LINE + 5 +18E3 + 8 +0 + 62 + 0 + 10 +20487.499925 + 20 +22175.429108 + 30 +0.0 + 11 +20476.200665 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +18E4 + 8 +0 + 62 + 0 + 10 +20487.499925 + 20 +22132.127838 + 30 +0.0 + 11 +20474.999925 + 21 +22153.778473 + 31 +0.0 + 0 +LINE + 5 +18E5 + 8 +0 + 62 + 0 + 10 +20449.999925 + 20 +22153.778473 + 30 +0.0 + 11 +20437.499925 + 21 +22175.429108 + 31 +0.0 + 0 +LINE + 5 +18E6 + 8 +0 + 62 + 0 + 10 +20447.388687 + 20 +22115.0 + 30 +0.0 + 11 +20437.499925 + 21 +22132.127838 + 31 +0.0 + 0 +LINE + 5 +18E7 + 8 +0 + 62 + 0 + 10 +20412.499925 + 20 +22175.429108 + 30 +0.0 + 11 +20401.200665 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +18E8 + 8 +0 + 62 + 0 + 10 +20412.499925 + 20 +22132.127838 + 30 +0.0 + 11 +20399.999925 + 21 +22153.778473 + 31 +0.0 + 0 +LINE + 5 +18E9 + 8 +0 + 62 + 0 + 10 +20374.999925 + 20 +22153.778473 + 30 +0.0 + 11 +20362.499925 + 21 +22175.429108 + 31 +0.0 + 0 +LINE + 5 +18EA + 8 +0 + 62 + 0 + 10 +20372.388687 + 20 +22115.0 + 30 +0.0 + 11 +20362.499925 + 21 +22132.127838 + 31 +0.0 + 0 +LINE + 5 +18EB + 8 +0 + 62 + 0 + 10 +20337.499925 + 20 +22175.429108 + 30 +0.0 + 11 +20326.200666 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +18EC + 8 +0 + 62 + 0 + 10 +20337.499925 + 20 +22132.127838 + 30 +0.0 + 11 +20324.999925 + 21 +22153.778473 + 31 +0.0 + 0 +LINE + 5 +18ED + 8 +0 + 62 + 0 + 10 +20299.999925 + 20 +22153.778473 + 30 +0.0 + 11 +20287.499925 + 21 +22175.429108 + 31 +0.0 + 0 +LINE + 5 +18EE + 8 +0 + 62 + 0 + 10 +20297.388688 + 20 +22115.0 + 30 +0.0 + 11 +20287.499926 + 21 +22132.127838 + 31 +0.0 + 0 +LINE + 5 +18EF + 8 +0 + 62 + 0 + 10 +20262.499926 + 20 +22175.429108 + 30 +0.0 + 11 +20251.200666 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +18F0 + 8 +0 + 62 + 0 + 10 +20262.499926 + 20 +22132.127838 + 30 +0.0 + 11 +20249.999926 + 21 +22153.778473 + 31 +0.0 + 0 +LINE + 5 +18F1 + 8 +0 + 62 + 0 + 10 +20224.999926 + 20 +22153.778473 + 30 +0.0 + 11 +20212.499926 + 21 +22175.429109 + 31 +0.0 + 0 +LINE + 5 +18F2 + 8 +0 + 62 + 0 + 10 +20222.388688 + 20 +22115.0 + 30 +0.0 + 11 +20212.499926 + 21 +22132.127838 + 31 +0.0 + 0 +LINE + 5 +18F3 + 8 +0 + 62 + 0 + 10 +20187.499926 + 20 +22175.429109 + 30 +0.0 + 11 +20176.200666 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +18F4 + 8 +0 + 62 + 0 + 10 +20187.499926 + 20 +22132.127838 + 30 +0.0 + 11 +20174.999926 + 21 +22153.778474 + 31 +0.0 + 0 +LINE + 5 +18F5 + 8 +0 + 62 + 0 + 10 +20149.999926 + 20 +22153.778474 + 30 +0.0 + 11 +20137.499926 + 21 +22175.429109 + 31 +0.0 + 0 +LINE + 5 +18F6 + 8 +0 + 62 + 0 + 10 +20147.388688 + 20 +22115.0 + 30 +0.0 + 11 +20137.499926 + 21 +22132.127839 + 31 +0.0 + 0 +LINE + 5 +18F7 + 8 +0 + 62 + 0 + 10 +20112.499926 + 20 +22175.429109 + 30 +0.0 + 11 +20101.200667 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +18F8 + 8 +0 + 62 + 0 + 10 +20112.499926 + 20 +22132.127839 + 30 +0.0 + 11 +20099.999926 + 21 +22153.778474 + 31 +0.0 + 0 +LINE + 5 +18F9 + 8 +0 + 62 + 0 + 10 +20074.999926 + 20 +22153.778474 + 30 +0.0 + 11 +20062.499926 + 21 +22175.429109 + 31 +0.0 + 0 +LINE + 5 +18FA + 8 +0 + 62 + 0 + 10 +20072.388689 + 20 +22115.0 + 30 +0.0 + 11 +20062.499926 + 21 +22132.127839 + 31 +0.0 + 0 +LINE + 5 +18FB + 8 +0 + 62 + 0 + 10 +20037.499926 + 20 +22175.429109 + 30 +0.0 + 11 +20026.200667 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +18FC + 8 +0 + 62 + 0 + 10 +20037.499926 + 20 +22132.127839 + 30 +0.0 + 11 +20024.999926 + 21 +22153.778474 + 31 +0.0 + 0 +LINE + 5 +18FD + 8 +0 + 62 + 0 + 10 +19999.999926 + 20 +22153.778474 + 30 +0.0 + 11 +19987.499926 + 21 +22175.429109 + 31 +0.0 + 0 +LINE + 5 +18FE + 8 +0 + 62 + 0 + 10 +19997.388689 + 20 +22115.0 + 30 +0.0 + 11 +19987.499927 + 21 +22132.127839 + 31 +0.0 + 0 +LINE + 5 +18FF + 8 +0 + 62 + 0 + 10 +19962.499927 + 20 +22175.429109 + 30 +0.0 + 11 +19951.200667 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1900 + 8 +0 + 62 + 0 + 10 +19962.499927 + 20 +22132.127839 + 30 +0.0 + 11 +19949.999927 + 21 +22153.778474 + 31 +0.0 + 0 +LINE + 5 +1901 + 8 +0 + 62 + 0 + 10 +19924.999927 + 20 +22153.778474 + 30 +0.0 + 11 +19912.499927 + 21 +22175.429109 + 31 +0.0 + 0 +LINE + 5 +1902 + 8 +0 + 62 + 0 + 10 +19922.388689 + 20 +22115.0 + 30 +0.0 + 11 +19912.499927 + 21 +22132.127839 + 31 +0.0 + 0 +LINE + 5 +1903 + 8 +0 + 62 + 0 + 10 +19887.499927 + 20 +22175.429109 + 30 +0.0 + 11 +19876.200668 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1904 + 8 +0 + 62 + 0 + 10 +19887.499927 + 20 +22132.127839 + 30 +0.0 + 11 +19874.999927 + 21 +22153.778474 + 31 +0.0 + 0 +LINE + 5 +1905 + 8 +0 + 62 + 0 + 10 +19849.999927 + 20 +22153.778474 + 30 +0.0 + 11 +19837.499927 + 21 +22175.429109 + 31 +0.0 + 0 +LINE + 5 +1906 + 8 +0 + 62 + 0 + 10 +19847.38869 + 20 +22115.0 + 30 +0.0 + 11 +19837.499927 + 21 +22132.127839 + 31 +0.0 + 0 +LINE + 5 +1907 + 8 +0 + 62 + 0 + 10 +19812.499927 + 20 +22175.429109 + 30 +0.0 + 11 +19801.200668 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1908 + 8 +0 + 62 + 0 + 10 +19812.499927 + 20 +22132.127839 + 30 +0.0 + 11 +19799.999927 + 21 +22153.778474 + 31 +0.0 + 0 +LINE + 5 +1909 + 8 +0 + 62 + 0 + 10 +19774.999927 + 20 +22153.778474 + 30 +0.0 + 11 +19762.499927 + 21 +22175.429109 + 31 +0.0 + 0 +LINE + 5 +190A + 8 +0 + 62 + 0 + 10 +19772.38869 + 20 +22115.0 + 30 +0.0 + 11 +19762.499927 + 21 +22132.127839 + 31 +0.0 + 0 +LINE + 5 +190B + 8 +0 + 62 + 0 + 10 +21574.999921 + 20 +22153.778471 + 30 +0.0 + 11 +21562.499921 + 21 +22175.429106 + 31 +0.0 + 0 +LINE + 5 +190C + 8 +0 + 62 + 0 + 10 +21612.499921 + 20 +22132.127836 + 30 +0.0 + 11 +21599.999921 + 21 +22153.778471 + 31 +0.0 + 0 +LINE + 5 +190D + 8 +0 + 62 + 0 + 10 +21647.388682 + 20 +22115.0 + 30 +0.0 + 11 +21637.499921 + 21 +22132.127836 + 31 +0.0 + 0 +LINE + 5 +190E + 8 +0 + 62 + 0 + 10 +21612.499921 + 20 +22175.429106 + 30 +0.0 + 11 +21601.20066 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +190F + 8 +0 + 62 + 0 + 10 +21649.999921 + 20 +22153.778471 + 30 +0.0 + 11 +21637.499921 + 21 +22175.429106 + 31 +0.0 + 0 +LINE + 5 +1910 + 8 +0 + 62 + 0 + 10 +21687.499921 + 20 +22132.127836 + 30 +0.0 + 11 +21674.999921 + 21 +22153.778471 + 31 +0.0 + 0 +LINE + 5 +1911 + 8 +0 + 62 + 0 + 10 +21722.388681 + 20 +22115.0 + 30 +0.0 + 11 +21712.499921 + 21 +22132.127836 + 31 +0.0 + 0 +LINE + 5 +1912 + 8 +0 + 62 + 0 + 10 +21687.499921 + 20 +22175.429106 + 30 +0.0 + 11 +21676.20066 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1913 + 8 +0 + 62 + 0 + 10 +21724.999921 + 20 +22153.778471 + 30 +0.0 + 11 +21712.499921 + 21 +22175.429106 + 31 +0.0 + 0 +LINE + 5 +1914 + 8 +0 + 62 + 0 + 10 +21762.499921 + 20 +22132.127836 + 30 +0.0 + 11 +21749.999921 + 21 +22153.778471 + 31 +0.0 + 0 +LINE + 5 +1915 + 8 +0 + 62 + 0 + 10 +21797.388681 + 20 +22115.0 + 30 +0.0 + 11 +21787.499921 + 21 +22132.127835 + 31 +0.0 + 0 +LINE + 5 +1916 + 8 +0 + 62 + 0 + 10 +21762.499921 + 20 +22175.429106 + 30 +0.0 + 11 +21751.200659 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1917 + 8 +0 + 62 + 0 + 10 +21799.999921 + 20 +22153.778471 + 30 +0.0 + 11 +21787.499921 + 21 +22175.429106 + 31 +0.0 + 0 +LINE + 5 +1918 + 8 +0 + 62 + 0 + 10 +21837.49992 + 20 +22132.127835 + 30 +0.0 + 11 +21824.99992 + 21 +22153.77847 + 31 +0.0 + 0 +LINE + 5 +1919 + 8 +0 + 62 + 0 + 10 +21872.388681 + 20 +22115.0 + 30 +0.0 + 11 +21862.49992 + 21 +22132.127835 + 31 +0.0 + 0 +LINE + 5 +191A + 8 +0 + 62 + 0 + 10 +21837.49992 + 20 +22175.429106 + 30 +0.0 + 11 +21826.200659 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +191B + 8 +0 + 62 + 0 + 10 +21874.99992 + 20 +22153.77847 + 30 +0.0 + 11 +21862.49992 + 21 +22175.429105 + 31 +0.0 + 0 +LINE + 5 +191C + 8 +0 + 62 + 0 + 10 +21912.49992 + 20 +22132.127835 + 30 +0.0 + 11 +21899.99992 + 21 +22153.77847 + 31 +0.0 + 0 +LINE + 5 +191D + 8 +0 + 62 + 0 + 10 +21947.38868 + 20 +22115.0 + 30 +0.0 + 11 +21937.49992 + 21 +22132.127835 + 31 +0.0 + 0 +LINE + 5 +191E + 8 +0 + 62 + 0 + 10 +21912.49992 + 20 +22175.429105 + 30 +0.0 + 11 +21901.200659 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +191F + 8 +0 + 62 + 0 + 10 +21949.99992 + 20 +22153.77847 + 30 +0.0 + 11 +21937.49992 + 21 +22175.429105 + 31 +0.0 + 0 +LINE + 5 +1920 + 8 +0 + 62 + 0 + 10 +21987.49992 + 20 +22132.127835 + 30 +0.0 + 11 +21974.99992 + 21 +22153.77847 + 31 +0.0 + 0 +LINE + 5 +1921 + 8 +0 + 62 + 0 + 10 +22022.38868 + 20 +22115.0 + 30 +0.0 + 11 +22012.49992 + 21 +22132.127835 + 31 +0.0 + 0 +LINE + 5 +1922 + 8 +0 + 62 + 0 + 10 +21987.49992 + 20 +22175.429105 + 30 +0.0 + 11 +21976.200658 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1923 + 8 +0 + 62 + 0 + 10 +22024.99992 + 20 +22153.77847 + 30 +0.0 + 11 +22012.49992 + 21 +22175.429105 + 31 +0.0 + 0 +LINE + 5 +1924 + 8 +0 + 62 + 0 + 10 +22062.49992 + 20 +22132.127835 + 30 +0.0 + 11 +22049.99992 + 21 +22153.77847 + 31 +0.0 + 0 +LINE + 5 +1925 + 8 +0 + 62 + 0 + 10 +22097.38868 + 20 +22115.0 + 30 +0.0 + 11 +22087.49992 + 21 +22132.127835 + 31 +0.0 + 0 +LINE + 5 +1926 + 8 +0 + 62 + 0 + 10 +22062.49992 + 20 +22175.429105 + 30 +0.0 + 11 +22051.200658 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1927 + 8 +0 + 62 + 0 + 10 +22099.99992 + 20 +22153.77847 + 30 +0.0 + 11 +22087.49992 + 21 +22175.429105 + 31 +0.0 + 0 +LINE + 5 +1928 + 8 +0 + 62 + 0 + 10 +22137.499919 + 20 +22132.127835 + 30 +0.0 + 11 +22124.999919 + 21 +22153.77847 + 31 +0.0 + 0 +LINE + 5 +1929 + 8 +0 + 62 + 0 + 10 +22172.388679 + 20 +22115.0 + 30 +0.0 + 11 +22162.499919 + 21 +22132.127835 + 31 +0.0 + 0 +LINE + 5 +192A + 8 +0 + 62 + 0 + 10 +22137.499919 + 20 +22175.429105 + 30 +0.0 + 11 +22126.200658 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +192B + 8 +0 + 62 + 0 + 10 +22174.999919 + 20 +22153.77847 + 30 +0.0 + 11 +22162.499919 + 21 +22175.429105 + 31 +0.0 + 0 +LINE + 5 +192C + 8 +0 + 62 + 0 + 10 +22212.499919 + 20 +22132.127835 + 30 +0.0 + 11 +22199.999919 + 21 +22153.77847 + 31 +0.0 + 0 +LINE + 5 +192D + 8 +0 + 62 + 0 + 10 +22247.388679 + 20 +22115.0 + 30 +0.0 + 11 +22237.499919 + 21 +22132.127835 + 31 +0.0 + 0 +LINE + 5 +192E + 8 +0 + 62 + 0 + 10 +22212.499919 + 20 +22175.429105 + 30 +0.0 + 11 +22201.200658 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +192F + 8 +0 + 62 + 0 + 10 +22249.999919 + 20 +22153.77847 + 30 +0.0 + 11 +22237.499919 + 21 +22175.429105 + 31 +0.0 + 0 +LINE + 5 +1930 + 8 +0 + 62 + 0 + 10 +22287.499919 + 20 +22132.127835 + 30 +0.0 + 11 +22274.999919 + 21 +22153.77847 + 31 +0.0 + 0 +LINE + 5 +1931 + 8 +0 + 62 + 0 + 10 +22322.388679 + 20 +22115.0 + 30 +0.0 + 11 +22312.499919 + 21 +22132.127834 + 31 +0.0 + 0 +LINE + 5 +1932 + 8 +0 + 62 + 0 + 10 +22287.499919 + 20 +22175.429105 + 30 +0.0 + 11 +22276.200657 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1933 + 8 +0 + 62 + 0 + 10 +22324.999919 + 20 +22153.77847 + 30 +0.0 + 11 +22312.499919 + 21 +22175.429105 + 31 +0.0 + 0 +LINE + 5 +1934 + 8 +0 + 62 + 0 + 10 +22362.499919 + 20 +22132.127834 + 30 +0.0 + 11 +22349.999919 + 21 +22153.778469 + 31 +0.0 + 0 +LINE + 5 +1935 + 8 +0 + 62 + 0 + 10 +22397.388678 + 20 +22115.0 + 30 +0.0 + 11 +22387.499919 + 21 +22132.127834 + 31 +0.0 + 0 +LINE + 5 +1936 + 8 +0 + 62 + 0 + 10 +22362.499919 + 20 +22175.429105 + 30 +0.0 + 11 +22351.200657 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1937 + 8 +0 + 62 + 0 + 10 +22399.999919 + 20 +22153.778469 + 30 +0.0 + 11 +22387.499919 + 21 +22175.429104 + 31 +0.0 + 0 +LINE + 5 +1938 + 8 +0 + 62 + 0 + 10 +22437.499918 + 20 +22132.127834 + 30 +0.0 + 11 +22424.999918 + 21 +22153.778469 + 31 +0.0 + 0 +LINE + 5 +1939 + 8 +0 + 62 + 0 + 10 +22472.388678 + 20 +22115.0 + 30 +0.0 + 11 +22462.499918 + 21 +22132.127834 + 31 +0.0 + 0 +LINE + 5 +193A + 8 +0 + 62 + 0 + 10 +22437.499918 + 20 +22175.429104 + 30 +0.0 + 11 +22426.200657 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +193B + 8 +0 + 62 + 0 + 10 +22474.999918 + 20 +22153.778469 + 30 +0.0 + 11 +22462.499918 + 21 +22175.429104 + 31 +0.0 + 0 +LINE + 5 +193C + 8 +0 + 62 + 0 + 10 +22512.499918 + 20 +22132.127834 + 30 +0.0 + 11 +22499.999918 + 21 +22153.778469 + 31 +0.0 + 0 +LINE + 5 +193D + 8 +0 + 62 + 0 + 10 +22547.388678 + 20 +22115.0 + 30 +0.0 + 11 +22537.499918 + 21 +22132.127834 + 31 +0.0 + 0 +LINE + 5 +193E + 8 +0 + 62 + 0 + 10 +22512.499918 + 20 +22175.429104 + 30 +0.0 + 11 +22501.200656 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +193F + 8 +0 + 62 + 0 + 10 +22549.999918 + 20 +22153.778469 + 30 +0.0 + 11 +22537.499918 + 21 +22175.429104 + 31 +0.0 + 0 +LINE + 5 +1940 + 8 +0 + 62 + 0 + 10 +22587.499918 + 20 +22132.127834 + 30 +0.0 + 11 +22574.999918 + 21 +22153.778469 + 31 +0.0 + 0 +LINE + 5 +1941 + 8 +0 + 62 + 0 + 10 +22622.388677 + 20 +22115.0 + 30 +0.0 + 11 +22612.499918 + 21 +22132.127834 + 31 +0.0 + 0 +LINE + 5 +1942 + 8 +0 + 62 + 0 + 10 +22587.499918 + 20 +22175.429104 + 30 +0.0 + 11 +22576.200656 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1943 + 8 +0 + 62 + 0 + 10 +22624.999918 + 20 +22153.778469 + 30 +0.0 + 11 +22612.499918 + 21 +22175.429104 + 31 +0.0 + 0 +LINE + 5 +1944 + 8 +0 + 62 + 0 + 10 +22662.499918 + 20 +22132.127834 + 30 +0.0 + 11 +22649.999918 + 21 +22153.778469 + 31 +0.0 + 0 +LINE + 5 +1945 + 8 +0 + 62 + 0 + 10 +22697.388677 + 20 +22115.0 + 30 +0.0 + 11 +22687.499918 + 21 +22132.127834 + 31 +0.0 + 0 +LINE + 5 +1946 + 8 +0 + 62 + 0 + 10 +22662.499918 + 20 +22175.429104 + 30 +0.0 + 11 +22651.200656 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1947 + 8 +0 + 62 + 0 + 10 +22699.999918 + 20 +22153.778469 + 30 +0.0 + 11 +22687.499918 + 21 +22175.429104 + 31 +0.0 + 0 +LINE + 5 +1948 + 8 +0 + 62 + 0 + 10 +22737.499917 + 20 +22132.127834 + 30 +0.0 + 11 +22724.999917 + 21 +22153.778469 + 31 +0.0 + 0 +LINE + 5 +1949 + 8 +0 + 62 + 0 + 10 +22772.388677 + 20 +22115.0 + 30 +0.0 + 11 +22762.499917 + 21 +22132.127834 + 31 +0.0 + 0 +LINE + 5 +194A + 8 +0 + 62 + 0 + 10 +22737.499917 + 20 +22175.429104 + 30 +0.0 + 11 +22726.200655 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +194B + 8 +0 + 62 + 0 + 10 +22774.999917 + 20 +22153.778469 + 30 +0.0 + 11 +22762.499917 + 21 +22175.429104 + 31 +0.0 + 0 +LINE + 5 +194C + 8 +0 + 62 + 0 + 10 +22812.499917 + 20 +22132.127834 + 30 +0.0 + 11 +22799.999917 + 21 +22153.778469 + 31 +0.0 + 0 +LINE + 5 +194D + 8 +0 + 62 + 0 + 10 +22847.388676 + 20 +22115.0 + 30 +0.0 + 11 +22837.499917 + 21 +22132.127833 + 31 +0.0 + 0 +LINE + 5 +194E + 8 +0 + 62 + 0 + 10 +22812.499917 + 20 +22175.429104 + 30 +0.0 + 11 +22801.200655 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +194F + 8 +0 + 62 + 0 + 10 +22849.999917 + 20 +22153.778469 + 30 +0.0 + 11 +22837.499917 + 21 +22175.429104 + 31 +0.0 + 0 +LINE + 5 +1950 + 8 +0 + 62 + 0 + 10 +22887.499917 + 20 +22132.127833 + 30 +0.0 + 11 +22874.999917 + 21 +22153.778468 + 31 +0.0 + 0 +LINE + 5 +1951 + 8 +0 + 62 + 0 + 10 +22922.388676 + 20 +22115.0 + 30 +0.0 + 11 +22912.499917 + 21 +22132.127833 + 31 +0.0 + 0 +LINE + 5 +1952 + 8 +0 + 62 + 0 + 10 +22887.499917 + 20 +22175.429104 + 30 +0.0 + 11 +22876.200655 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1953 + 8 +0 + 62 + 0 + 10 +22924.999917 + 20 +22153.778468 + 30 +0.0 + 11 +22912.499917 + 21 +22175.429103 + 31 +0.0 + 0 +LINE + 5 +1954 + 8 +0 + 62 + 0 + 10 +22962.499917 + 20 +22132.127833 + 30 +0.0 + 11 +22949.999917 + 21 +22153.778468 + 31 +0.0 + 0 +LINE + 5 +1955 + 8 +0 + 62 + 0 + 10 +22997.388676 + 20 +22115.0 + 30 +0.0 + 11 +22987.499917 + 21 +22132.127833 + 31 +0.0 + 0 +LINE + 5 +1956 + 8 +0 + 62 + 0 + 10 +22962.499917 + 20 +22175.429103 + 30 +0.0 + 11 +22951.200654 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1957 + 8 +0 + 62 + 0 + 10 +22999.999917 + 20 +22153.778468 + 30 +0.0 + 11 +22987.499917 + 21 +22175.429103 + 31 +0.0 + 0 +LINE + 5 +1958 + 8 +0 + 62 + 0 + 10 +23037.499917 + 20 +22132.127833 + 30 +0.0 + 11 +23024.999917 + 21 +22153.778468 + 31 +0.0 + 0 +LINE + 5 +1959 + 8 +0 + 62 + 0 + 10 +23072.388675 + 20 +22115.0 + 30 +0.0 + 11 +23062.499916 + 21 +22132.127833 + 31 +0.0 + 0 +LINE + 5 +195A + 8 +0 + 62 + 0 + 10 +23037.499916 + 20 +22175.429103 + 30 +0.0 + 11 +23026.200654 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +195B + 8 +0 + 62 + 0 + 10 +23074.999916 + 20 +22153.778468 + 30 +0.0 + 11 +23062.499916 + 21 +22175.429103 + 31 +0.0 + 0 +LINE + 5 +195C + 8 +0 + 62 + 0 + 10 +23112.499916 + 20 +22132.127833 + 30 +0.0 + 11 +23099.999916 + 21 +22153.778468 + 31 +0.0 + 0 +LINE + 5 +195D + 8 +0 + 62 + 0 + 10 +23147.388675 + 20 +22115.0 + 30 +0.0 + 11 +23137.499916 + 21 +22132.127833 + 31 +0.0 + 0 +LINE + 5 +195E + 8 +0 + 62 + 0 + 10 +23112.499916 + 20 +22175.429103 + 30 +0.0 + 11 +23101.200654 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +195F + 8 +0 + 62 + 0 + 10 +23149.999916 + 20 +22153.778468 + 30 +0.0 + 11 +23137.499916 + 21 +22175.429103 + 31 +0.0 + 0 +LINE + 5 +1960 + 8 +0 + 62 + 0 + 10 +23187.499916 + 20 +22132.127833 + 30 +0.0 + 11 +23174.999916 + 21 +22153.778468 + 31 +0.0 + 0 +LINE + 5 +1961 + 8 +0 + 62 + 0 + 10 +23222.388675 + 20 +22115.0 + 30 +0.0 + 11 +23212.499916 + 21 +22132.127833 + 31 +0.0 + 0 +LINE + 5 +1962 + 8 +0 + 62 + 0 + 10 +23187.499916 + 20 +22175.429103 + 30 +0.0 + 11 +23176.200653 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1963 + 8 +0 + 62 + 0 + 10 +23224.999916 + 20 +22153.778468 + 30 +0.0 + 11 +23212.499916 + 21 +22175.429103 + 31 +0.0 + 0 +LINE + 5 +1964 + 8 +0 + 62 + 0 + 10 +23262.499916 + 20 +22132.127833 + 30 +0.0 + 11 +23249.999916 + 21 +22153.778468 + 31 +0.0 + 0 +LINE + 5 +1965 + 8 +0 + 62 + 0 + 10 +23297.388674 + 20 +22115.0 + 30 +0.0 + 11 +23287.499916 + 21 +22132.127833 + 31 +0.0 + 0 +LINE + 5 +1966 + 8 +0 + 62 + 0 + 10 +23262.499916 + 20 +22175.429103 + 30 +0.0 + 11 +23251.200653 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1967 + 8 +0 + 62 + 0 + 10 +23299.999916 + 20 +22153.778468 + 30 +0.0 + 11 +23287.499916 + 21 +22175.429103 + 31 +0.0 + 0 +LINE + 5 +1968 + 8 +0 + 62 + 0 + 10 +23337.499916 + 20 +22132.127833 + 30 +0.0 + 11 +23324.999916 + 21 +22153.778468 + 31 +0.0 + 0 +LINE + 5 +1969 + 8 +0 + 62 + 0 + 10 +23372.388674 + 20 +22115.0 + 30 +0.0 + 11 +23362.499915 + 21 +22132.127832 + 31 +0.0 + 0 +LINE + 5 +196A + 8 +0 + 62 + 0 + 10 +23337.499915 + 20 +22175.429103 + 30 +0.0 + 11 +23326.200653 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +196B + 8 +0 + 62 + 0 + 10 +23374.999915 + 20 +22153.778468 + 30 +0.0 + 11 +23362.499915 + 21 +22175.429103 + 31 +0.0 + 0 +LINE + 5 +196C + 8 +0 + 62 + 0 + 10 +21527.611173 + 20 +22115.0 + 30 +0.0 + 11 +21537.49997 + 21 +22132.127899 + 31 +0.0 + 0 +LINE + 5 +196D + 8 +0 + 62 + 0 + 10 +21562.49997 + 20 +22175.429169 + 30 +0.0 + 11 +21573.799195 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +196E + 8 +0 + 62 + 0 + 10 +21524.99997 + 20 +22153.778534 + 30 +0.0 + 11 +21537.49997 + 21 +22175.429169 + 31 +0.0 + 0 +LINE + 5 +196F + 8 +0 + 62 + 0 + 10 +21487.49997 + 20 +22132.127898 + 30 +0.0 + 11 +21499.99997 + 21 +22153.778534 + 31 +0.0 + 0 +LINE + 5 +1970 + 8 +0 + 62 + 0 + 10 +21452.611174 + 20 +22115.0 + 30 +0.0 + 11 +21462.49997 + 21 +22132.127898 + 31 +0.0 + 0 +LINE + 5 +1971 + 8 +0 + 62 + 0 + 10 +21487.49997 + 20 +22175.429169 + 30 +0.0 + 11 +21498.799195 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1972 + 8 +0 + 62 + 0 + 10 +21449.999971 + 20 +22153.778533 + 30 +0.0 + 11 +21462.499971 + 21 +22175.429169 + 31 +0.0 + 0 +LINE + 5 +1973 + 8 +0 + 62 + 0 + 10 +21412.499971 + 20 +22132.127898 + 30 +0.0 + 11 +21424.999971 + 21 +22153.778533 + 31 +0.0 + 0 +LINE + 5 +1974 + 8 +0 + 62 + 0 + 10 +21377.611174 + 20 +22115.0 + 30 +0.0 + 11 +21387.499971 + 21 +22132.127898 + 31 +0.0 + 0 +LINE + 5 +1975 + 8 +0 + 62 + 0 + 10 +21412.499971 + 20 +22175.429168 + 30 +0.0 + 11 +21423.799196 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1976 + 8 +0 + 62 + 0 + 10 +21374.999971 + 20 +22153.778533 + 30 +0.0 + 11 +21387.499971 + 21 +22175.429168 + 31 +0.0 + 0 +LINE + 5 +1977 + 8 +0 + 62 + 0 + 10 +21337.499971 + 20 +22132.127898 + 30 +0.0 + 11 +21349.999971 + 21 +22153.778533 + 31 +0.0 + 0 +LINE + 5 +1978 + 8 +0 + 62 + 0 + 10 +21302.611174 + 20 +22115.0 + 30 +0.0 + 11 +21312.499971 + 21 +22132.127898 + 31 +0.0 + 0 +LINE + 5 +1979 + 8 +0 + 62 + 0 + 10 +21337.499971 + 20 +22175.429168 + 30 +0.0 + 11 +21348.799196 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +197A + 8 +0 + 62 + 0 + 10 +21299.999971 + 20 +22153.778533 + 30 +0.0 + 11 +21312.499971 + 21 +22175.429168 + 31 +0.0 + 0 +LINE + 5 +197B + 8 +0 + 62 + 0 + 10 +21262.499971 + 20 +22132.127898 + 30 +0.0 + 11 +21274.999971 + 21 +22153.778533 + 31 +0.0 + 0 +LINE + 5 +197C + 8 +0 + 62 + 0 + 10 +21227.611175 + 20 +22115.0 + 30 +0.0 + 11 +21237.499971 + 21 +22132.127898 + 31 +0.0 + 0 +LINE + 5 +197D + 8 +0 + 62 + 0 + 10 +21262.499971 + 20 +22175.429168 + 30 +0.0 + 11 +21273.799196 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +197E + 8 +0 + 62 + 0 + 10 +21224.999971 + 20 +22153.778533 + 30 +0.0 + 11 +21237.499971 + 21 +22175.429168 + 31 +0.0 + 0 +LINE + 5 +197F + 8 +0 + 62 + 0 + 10 +21187.499971 + 20 +22132.127898 + 30 +0.0 + 11 +21199.999971 + 21 +22153.778533 + 31 +0.0 + 0 +LINE + 5 +1980 + 8 +0 + 62 + 0 + 10 +21152.611175 + 20 +22115.0 + 30 +0.0 + 11 +21162.499971 + 21 +22132.127898 + 31 +0.0 + 0 +LINE + 5 +1981 + 8 +0 + 62 + 0 + 10 +21187.499971 + 20 +22175.429168 + 30 +0.0 + 11 +21198.799197 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1982 + 8 +0 + 62 + 0 + 10 +21149.999971 + 20 +22153.778533 + 30 +0.0 + 11 +21162.499971 + 21 +22175.429168 + 31 +0.0 + 0 +LINE + 5 +1983 + 8 +0 + 62 + 0 + 10 +21112.499972 + 20 +22132.127898 + 30 +0.0 + 11 +21124.999972 + 21 +22153.778533 + 31 +0.0 + 0 +LINE + 5 +1984 + 8 +0 + 62 + 0 + 10 +21077.611175 + 20 +22115.0 + 30 +0.0 + 11 +21087.499972 + 21 +22132.127898 + 31 +0.0 + 0 +LINE + 5 +1985 + 8 +0 + 62 + 0 + 10 +21112.499972 + 20 +22175.429168 + 30 +0.0 + 11 +21123.799197 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1986 + 8 +0 + 62 + 0 + 10 +21074.999972 + 20 +22153.778533 + 30 +0.0 + 11 +21087.499972 + 21 +22175.429168 + 31 +0.0 + 0 +LINE + 5 +1987 + 8 +0 + 62 + 0 + 10 +21037.499972 + 20 +22132.127898 + 30 +0.0 + 11 +21049.999972 + 21 +22153.778533 + 31 +0.0 + 0 +LINE + 5 +1988 + 8 +0 + 62 + 0 + 10 +21002.611176 + 20 +22115.0 + 30 +0.0 + 11 +21012.499972 + 21 +22132.127898 + 31 +0.0 + 0 +LINE + 5 +1989 + 8 +0 + 62 + 0 + 10 +21037.499972 + 20 +22175.429168 + 30 +0.0 + 11 +21048.799197 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +198A + 8 +0 + 62 + 0 + 10 +20999.999972 + 20 +22153.778533 + 30 +0.0 + 11 +21012.499972 + 21 +22175.429168 + 31 +0.0 + 0 +LINE + 5 +198B + 8 +0 + 62 + 0 + 10 +20962.499972 + 20 +22132.127897 + 30 +0.0 + 11 +20974.999972 + 21 +22153.778533 + 31 +0.0 + 0 +LINE + 5 +198C + 8 +0 + 62 + 0 + 10 +20927.611176 + 20 +22115.0 + 30 +0.0 + 11 +20937.499972 + 21 +22132.127897 + 31 +0.0 + 0 +LINE + 5 +198D + 8 +0 + 62 + 0 + 10 +20962.499972 + 20 +22175.429168 + 30 +0.0 + 11 +20973.799198 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +198E + 8 +0 + 62 + 0 + 10 +20924.999972 + 20 +22153.778532 + 30 +0.0 + 11 +20937.499972 + 21 +22175.429168 + 31 +0.0 + 0 +LINE + 5 +198F + 8 +0 + 62 + 0 + 10 +20887.499972 + 20 +22132.127897 + 30 +0.0 + 11 +20899.999972 + 21 +22153.778532 + 31 +0.0 + 0 +LINE + 5 +1990 + 8 +0 + 62 + 0 + 10 +20852.611176 + 20 +22115.0 + 30 +0.0 + 11 +20862.499972 + 21 +22132.127897 + 31 +0.0 + 0 +LINE + 5 +1991 + 8 +0 + 62 + 0 + 10 +20887.499972 + 20 +22175.429167 + 30 +0.0 + 11 +20898.799198 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1992 + 8 +0 + 62 + 0 + 10 +20849.999972 + 20 +22153.778532 + 30 +0.0 + 11 +20862.499972 + 21 +22175.429167 + 31 +0.0 + 0 +LINE + 5 +1993 + 8 +0 + 62 + 0 + 10 +20812.499973 + 20 +22132.127897 + 30 +0.0 + 11 +20824.999973 + 21 +22153.778532 + 31 +0.0 + 0 +LINE + 5 +1994 + 8 +0 + 62 + 0 + 10 +20777.611177 + 20 +22115.0 + 30 +0.0 + 11 +20787.499973 + 21 +22132.127897 + 31 +0.0 + 0 +LINE + 5 +1995 + 8 +0 + 62 + 0 + 10 +20812.499973 + 20 +22175.429167 + 30 +0.0 + 11 +20823.799198 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1996 + 8 +0 + 62 + 0 + 10 +20774.999973 + 20 +22153.778532 + 30 +0.0 + 11 +20787.499973 + 21 +22175.429167 + 31 +0.0 + 0 +LINE + 5 +1997 + 8 +0 + 62 + 0 + 10 +20737.499973 + 20 +22132.127897 + 30 +0.0 + 11 +20749.999973 + 21 +22153.778532 + 31 +0.0 + 0 +LINE + 5 +1998 + 8 +0 + 62 + 0 + 10 +20702.611177 + 20 +22115.0 + 30 +0.0 + 11 +20712.499973 + 21 +22132.127897 + 31 +0.0 + 0 +LINE + 5 +1999 + 8 +0 + 62 + 0 + 10 +20737.499973 + 20 +22175.429167 + 30 +0.0 + 11 +20748.799198 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +199A + 8 +0 + 62 + 0 + 10 +20699.999973 + 20 +22153.778532 + 30 +0.0 + 11 +20712.499973 + 21 +22175.429167 + 31 +0.0 + 0 +LINE + 5 +199B + 8 +0 + 62 + 0 + 10 +20662.499973 + 20 +22132.127897 + 30 +0.0 + 11 +20674.999973 + 21 +22153.778532 + 31 +0.0 + 0 +LINE + 5 +199C + 8 +0 + 62 + 0 + 10 +20627.611177 + 20 +22115.0 + 30 +0.0 + 11 +20637.499973 + 21 +22132.127897 + 31 +0.0 + 0 +LINE + 5 +199D + 8 +0 + 62 + 0 + 10 +20662.499973 + 20 +22175.429167 + 30 +0.0 + 11 +20673.799199 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +199E + 8 +0 + 62 + 0 + 10 +20624.999973 + 20 +22153.778532 + 30 +0.0 + 11 +20637.499973 + 21 +22175.429167 + 31 +0.0 + 0 +LINE + 5 +199F + 8 +0 + 62 + 0 + 10 +20587.499973 + 20 +22132.127897 + 30 +0.0 + 11 +20599.999973 + 21 +22153.778532 + 31 +0.0 + 0 +LINE + 5 +19A0 + 8 +0 + 62 + 0 + 10 +20552.611178 + 20 +22115.0 + 30 +0.0 + 11 +20562.499973 + 21 +22132.127897 + 31 +0.0 + 0 +LINE + 5 +19A1 + 8 +0 + 62 + 0 + 10 +20587.499973 + 20 +22175.429167 + 30 +0.0 + 11 +20598.799199 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +19A2 + 8 +0 + 62 + 0 + 10 +20549.999973 + 20 +22153.778532 + 30 +0.0 + 11 +20562.499973 + 21 +22175.429167 + 31 +0.0 + 0 +LINE + 5 +19A3 + 8 +0 + 62 + 0 + 10 +20512.499974 + 20 +22132.127897 + 30 +0.0 + 11 +20524.999974 + 21 +22153.778532 + 31 +0.0 + 0 +LINE + 5 +19A4 + 8 +0 + 62 + 0 + 10 +20477.611178 + 20 +22115.0 + 30 +0.0 + 11 +20487.499974 + 21 +22132.127897 + 31 +0.0 + 0 +LINE + 5 +19A5 + 8 +0 + 62 + 0 + 10 +20512.499974 + 20 +22175.429167 + 30 +0.0 + 11 +20523.799199 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +19A6 + 8 +0 + 62 + 0 + 10 +20474.999974 + 20 +22153.778532 + 30 +0.0 + 11 +20487.499974 + 21 +22175.429167 + 31 +0.0 + 0 +LINE + 5 +19A7 + 8 +0 + 62 + 0 + 10 +20437.499974 + 20 +22132.127896 + 30 +0.0 + 11 +20449.999974 + 21 +22153.778532 + 31 +0.0 + 0 +LINE + 5 +19A8 + 8 +0 + 62 + 0 + 10 +20402.611178 + 20 +22115.0 + 30 +0.0 + 11 +20412.499974 + 21 +22132.127896 + 31 +0.0 + 0 +LINE + 5 +19A9 + 8 +0 + 62 + 0 + 10 +20437.499974 + 20 +22175.429167 + 30 +0.0 + 11 +20448.7992 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +19AA + 8 +0 + 62 + 0 + 10 +20399.999974 + 20 +22153.778531 + 30 +0.0 + 11 +20412.499974 + 21 +22175.429167 + 31 +0.0 + 0 +LINE + 5 +19AB + 8 +0 + 62 + 0 + 10 +20362.499974 + 20 +22132.127896 + 30 +0.0 + 11 +20374.999974 + 21 +22153.778531 + 31 +0.0 + 0 +LINE + 5 +19AC + 8 +0 + 62 + 0 + 10 +20327.611179 + 20 +22115.0 + 30 +0.0 + 11 +20337.499974 + 21 +22132.127896 + 31 +0.0 + 0 +LINE + 5 +19AD + 8 +0 + 62 + 0 + 10 +20362.499974 + 20 +22175.429166 + 30 +0.0 + 11 +20373.7992 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +19AE + 8 +0 + 62 + 0 + 10 +20324.999974 + 20 +22153.778531 + 30 +0.0 + 11 +20337.499974 + 21 +22175.429166 + 31 +0.0 + 0 +LINE + 5 +19AF + 8 +0 + 62 + 0 + 10 +20287.499974 + 20 +22132.127896 + 30 +0.0 + 11 +20299.999974 + 21 +22153.778531 + 31 +0.0 + 0 +LINE + 5 +19B0 + 8 +0 + 62 + 0 + 10 +20252.611179 + 20 +22115.0 + 30 +0.0 + 11 +20262.499974 + 21 +22132.127896 + 31 +0.0 + 0 +LINE + 5 +19B1 + 8 +0 + 62 + 0 + 10 +20287.499974 + 20 +22175.429166 + 30 +0.0 + 11 +20298.7992 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +19B2 + 8 +0 + 62 + 0 + 10 +20249.999974 + 20 +22153.778531 + 30 +0.0 + 11 +20262.499974 + 21 +22175.429166 + 31 +0.0 + 0 +LINE + 5 +19B3 + 8 +0 + 62 + 0 + 10 +20212.499975 + 20 +22132.127896 + 30 +0.0 + 11 +20224.999975 + 21 +22153.778531 + 31 +0.0 + 0 +LINE + 5 +19B4 + 8 +0 + 62 + 0 + 10 +20177.611179 + 20 +22115.0 + 30 +0.0 + 11 +20187.499975 + 21 +22132.127896 + 31 +0.0 + 0 +LINE + 5 +19B5 + 8 +0 + 62 + 0 + 10 +20212.499975 + 20 +22175.429166 + 30 +0.0 + 11 +20223.799201 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +19B6 + 8 +0 + 62 + 0 + 10 +20174.999975 + 20 +22153.778531 + 30 +0.0 + 11 +20187.499975 + 21 +22175.429166 + 31 +0.0 + 0 +LINE + 5 +19B7 + 8 +0 + 62 + 0 + 10 +20137.499975 + 20 +22132.127896 + 30 +0.0 + 11 +20149.999975 + 21 +22153.778531 + 31 +0.0 + 0 +LINE + 5 +19B8 + 8 +0 + 62 + 0 + 10 +20102.61118 + 20 +22115.0 + 30 +0.0 + 11 +20112.499975 + 21 +22132.127896 + 31 +0.0 + 0 +LINE + 5 +19B9 + 8 +0 + 62 + 0 + 10 +20137.499975 + 20 +22175.429166 + 30 +0.0 + 11 +20148.799201 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +19BA + 8 +0 + 62 + 0 + 10 +20099.999975 + 20 +22153.778531 + 30 +0.0 + 11 +20112.499975 + 21 +22175.429166 + 31 +0.0 + 0 +LINE + 5 +19BB + 8 +0 + 62 + 0 + 10 +20062.499975 + 20 +22132.127896 + 30 +0.0 + 11 +20074.999975 + 21 +22153.778531 + 31 +0.0 + 0 +LINE + 5 +19BC + 8 +0 + 62 + 0 + 10 +20027.61118 + 20 +22115.0 + 30 +0.0 + 11 +20037.499975 + 21 +22132.127896 + 31 +0.0 + 0 +LINE + 5 +19BD + 8 +0 + 62 + 0 + 10 +20062.499975 + 20 +22175.429166 + 30 +0.0 + 11 +20073.799201 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +19BE + 8 +0 + 62 + 0 + 10 +20024.999975 + 20 +22153.778531 + 30 +0.0 + 11 +20037.499975 + 21 +22175.429166 + 31 +0.0 + 0 +LINE + 5 +19BF + 8 +0 + 62 + 0 + 10 +19987.499975 + 20 +22132.127896 + 30 +0.0 + 11 +19999.999975 + 21 +22153.778531 + 31 +0.0 + 0 +LINE + 5 +19C0 + 8 +0 + 62 + 0 + 10 +19952.61118 + 20 +22115.0 + 30 +0.0 + 11 +19962.499975 + 21 +22132.127896 + 31 +0.0 + 0 +LINE + 5 +19C1 + 8 +0 + 62 + 0 + 10 +19987.499975 + 20 +22175.429166 + 30 +0.0 + 11 +19998.799202 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +19C2 + 8 +0 + 62 + 0 + 10 +19949.999975 + 20 +22153.778531 + 30 +0.0 + 11 +19962.499975 + 21 +22175.429166 + 31 +0.0 + 0 +LINE + 5 +19C3 + 8 +0 + 62 + 0 + 10 +19912.499976 + 20 +22132.127895 + 30 +0.0 + 11 +19924.999976 + 21 +22153.778531 + 31 +0.0 + 0 +LINE + 5 +19C4 + 8 +0 + 62 + 0 + 10 +19877.611181 + 20 +22115.0 + 30 +0.0 + 11 +19887.499976 + 21 +22132.127895 + 31 +0.0 + 0 +LINE + 5 +19C5 + 8 +0 + 62 + 0 + 10 +19912.499976 + 20 +22175.429166 + 30 +0.0 + 11 +19923.799202 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +19C6 + 8 +0 + 62 + 0 + 10 +19874.999976 + 20 +22153.77853 + 30 +0.0 + 11 +19887.499976 + 21 +22175.429166 + 31 +0.0 + 0 +LINE + 5 +19C7 + 8 +0 + 62 + 0 + 10 +19837.499976 + 20 +22132.127895 + 30 +0.0 + 11 +19849.999976 + 21 +22153.77853 + 31 +0.0 + 0 +LINE + 5 +19C8 + 8 +0 + 62 + 0 + 10 +19802.611181 + 20 +22115.0 + 30 +0.0 + 11 +19812.499976 + 21 +22132.127895 + 31 +0.0 + 0 +LINE + 5 +19C9 + 8 +0 + 62 + 0 + 10 +19837.499976 + 20 +22175.429165 + 30 +0.0 + 11 +19848.799202 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +19CA + 8 +0 + 62 + 0 + 10 +19799.999976 + 20 +22153.77853 + 30 +0.0 + 11 +19812.499976 + 21 +22175.429165 + 31 +0.0 + 0 +LINE + 5 +19CB + 8 +0 + 62 + 0 + 10 +19762.499976 + 20 +22132.127895 + 30 +0.0 + 11 +19774.999976 + 21 +22153.77853 + 31 +0.0 + 0 +LINE + 5 +19CC + 8 +0 + 62 + 0 + 10 +19762.499976 + 20 +22175.429165 + 30 +0.0 + 11 +19773.799203 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +19CD + 8 +0 + 62 + 0 + 10 +21562.49997 + 20 +22132.127899 + 30 +0.0 + 11 +21574.99997 + 21 +22153.778534 + 31 +0.0 + 0 +LINE + 5 +19CE + 8 +0 + 62 + 0 + 10 +21599.99997 + 20 +22153.778534 + 30 +0.0 + 11 +21612.49997 + 21 +22175.429169 + 31 +0.0 + 0 +LINE + 5 +19CF + 8 +0 + 62 + 0 + 10 +21602.611173 + 20 +22115.0 + 30 +0.0 + 11 +21612.49997 + 21 +22132.127899 + 31 +0.0 + 0 +LINE + 5 +19D0 + 8 +0 + 62 + 0 + 10 +21637.49997 + 20 +22175.429169 + 30 +0.0 + 11 +21648.799195 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +19D1 + 8 +0 + 62 + 0 + 10 +21637.49997 + 20 +22132.127899 + 30 +0.0 + 11 +21649.99997 + 21 +22153.778534 + 31 +0.0 + 0 +LINE + 5 +19D2 + 8 +0 + 62 + 0 + 10 +21674.99997 + 20 +22153.778534 + 30 +0.0 + 11 +21687.49997 + 21 +22175.429169 + 31 +0.0 + 0 +LINE + 5 +19D3 + 8 +0 + 62 + 0 + 10 +21677.611173 + 20 +22115.0 + 30 +0.0 + 11 +21687.49997 + 21 +22132.127899 + 31 +0.0 + 0 +LINE + 5 +19D4 + 8 +0 + 62 + 0 + 10 +21712.49997 + 20 +22175.429169 + 30 +0.0 + 11 +21723.799194 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +19D5 + 8 +0 + 62 + 0 + 10 +21712.49997 + 20 +22132.127899 + 30 +0.0 + 11 +21724.99997 + 21 +22153.778534 + 31 +0.0 + 0 +LINE + 5 +19D6 + 8 +0 + 62 + 0 + 10 +21749.99997 + 20 +22153.778534 + 30 +0.0 + 11 +21762.49997 + 21 +22175.429169 + 31 +0.0 + 0 +LINE + 5 +19D7 + 8 +0 + 62 + 0 + 10 +21752.611172 + 20 +22115.0 + 30 +0.0 + 11 +21762.499969 + 21 +22132.127899 + 31 +0.0 + 0 +LINE + 5 +19D8 + 8 +0 + 62 + 0 + 10 +21787.499969 + 20 +22175.429169 + 30 +0.0 + 11 +21798.799194 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +19D9 + 8 +0 + 62 + 0 + 10 +21787.499969 + 20 +22132.127899 + 30 +0.0 + 11 +21799.999969 + 21 +22153.778534 + 31 +0.0 + 0 +LINE + 5 +19DA + 8 +0 + 62 + 0 + 10 +21824.999969 + 20 +22153.778534 + 30 +0.0 + 11 +21837.499969 + 21 +22175.429169 + 31 +0.0 + 0 +LINE + 5 +19DB + 8 +0 + 62 + 0 + 10 +21827.611172 + 20 +22115.0 + 30 +0.0 + 11 +21837.499969 + 21 +22132.127899 + 31 +0.0 + 0 +LINE + 5 +19DC + 8 +0 + 62 + 0 + 10 +21862.499969 + 20 +22175.429169 + 30 +0.0 + 11 +21873.799194 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +19DD + 8 +0 + 62 + 0 + 10 +21862.499969 + 20 +22132.127899 + 30 +0.0 + 11 +21874.999969 + 21 +22153.778534 + 31 +0.0 + 0 +LINE + 5 +19DE + 8 +0 + 62 + 0 + 10 +21899.999969 + 20 +22153.778534 + 30 +0.0 + 11 +21912.499969 + 21 +22175.429169 + 31 +0.0 + 0 +LINE + 5 +19DF + 8 +0 + 62 + 0 + 10 +21902.611172 + 20 +22115.0 + 30 +0.0 + 11 +21912.499969 + 21 +22132.127899 + 31 +0.0 + 0 +LINE + 5 +19E0 + 8 +0 + 62 + 0 + 10 +21937.499969 + 20 +22175.429169 + 30 +0.0 + 11 +21948.799193 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +19E1 + 8 +0 + 62 + 0 + 10 +21937.499969 + 20 +22132.127899 + 30 +0.0 + 11 +21949.999969 + 21 +22153.778534 + 31 +0.0 + 0 +LINE + 5 +19E2 + 8 +0 + 62 + 0 + 10 +21974.999969 + 20 +22153.778534 + 30 +0.0 + 11 +21987.499969 + 21 +22175.42917 + 31 +0.0 + 0 +LINE + 5 +19E3 + 8 +0 + 62 + 0 + 10 +21977.611171 + 20 +22115.0 + 30 +0.0 + 11 +21987.499969 + 21 +22132.127899 + 31 +0.0 + 0 +LINE + 5 +19E4 + 8 +0 + 62 + 0 + 10 +22012.499969 + 20 +22175.42917 + 30 +0.0 + 11 +22023.799193 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +19E5 + 8 +0 + 62 + 0 + 10 +22012.499969 + 20 +22132.127899 + 30 +0.0 + 11 +22024.999969 + 21 +22153.778535 + 31 +0.0 + 0 +LINE + 5 +19E6 + 8 +0 + 62 + 0 + 10 +22049.999969 + 20 +22153.778535 + 30 +0.0 + 11 +22062.499969 + 21 +22175.42917 + 31 +0.0 + 0 +LINE + 5 +19E7 + 8 +0 + 62 + 0 + 10 +22052.611171 + 20 +22115.0 + 30 +0.0 + 11 +22062.499968 + 21 +22132.1279 + 31 +0.0 + 0 +LINE + 5 +19E8 + 8 +0 + 62 + 0 + 10 +22087.499968 + 20 +22175.42917 + 30 +0.0 + 11 +22098.799193 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +19E9 + 8 +0 + 62 + 0 + 10 +22087.499968 + 20 +22132.1279 + 30 +0.0 + 11 +22099.999968 + 21 +22153.778535 + 31 +0.0 + 0 +LINE + 5 +19EA + 8 +0 + 62 + 0 + 10 +22124.999968 + 20 +22153.778535 + 30 +0.0 + 11 +22137.499968 + 21 +22175.42917 + 31 +0.0 + 0 +LINE + 5 +19EB + 8 +0 + 62 + 0 + 10 +22127.611171 + 20 +22115.0 + 30 +0.0 + 11 +22137.499968 + 21 +22132.1279 + 31 +0.0 + 0 +LINE + 5 +19EC + 8 +0 + 62 + 0 + 10 +22162.499968 + 20 +22175.42917 + 30 +0.0 + 11 +22173.799192 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +19ED + 8 +0 + 62 + 0 + 10 +22162.499968 + 20 +22132.1279 + 30 +0.0 + 11 +22174.999968 + 21 +22153.778535 + 31 +0.0 + 0 +LINE + 5 +19EE + 8 +0 + 62 + 0 + 10 +22199.999968 + 20 +22153.778535 + 30 +0.0 + 11 +22212.499968 + 21 +22175.42917 + 31 +0.0 + 0 +LINE + 5 +19EF + 8 +0 + 62 + 0 + 10 +22202.61117 + 20 +22115.0 + 30 +0.0 + 11 +22212.499968 + 21 +22132.1279 + 31 +0.0 + 0 +LINE + 5 +19F0 + 8 +0 + 62 + 0 + 10 +22237.499968 + 20 +22175.42917 + 30 +0.0 + 11 +22248.799192 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +19F1 + 8 +0 + 62 + 0 + 10 +22237.499968 + 20 +22132.1279 + 30 +0.0 + 11 +22249.999968 + 21 +22153.778535 + 31 +0.0 + 0 +LINE + 5 +19F2 + 8 +0 + 62 + 0 + 10 +22274.999968 + 20 +22153.778535 + 30 +0.0 + 11 +22287.499968 + 21 +22175.42917 + 31 +0.0 + 0 +LINE + 5 +19F3 + 8 +0 + 62 + 0 + 10 +22277.61117 + 20 +22115.0 + 30 +0.0 + 11 +22287.499968 + 21 +22132.1279 + 31 +0.0 + 0 +LINE + 5 +19F4 + 8 +0 + 62 + 0 + 10 +22312.499968 + 20 +22175.42917 + 30 +0.0 + 11 +22323.799192 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +19F5 + 8 +0 + 62 + 0 + 10 +22312.499968 + 20 +22132.1279 + 30 +0.0 + 11 +22324.999968 + 21 +22153.778535 + 31 +0.0 + 0 +LINE + 5 +19F6 + 8 +0 + 62 + 0 + 10 +22349.999968 + 20 +22153.778535 + 30 +0.0 + 11 +22362.499968 + 21 +22175.42917 + 31 +0.0 + 0 +LINE + 5 +19F7 + 8 +0 + 62 + 0 + 10 +22352.61117 + 20 +22115.0 + 30 +0.0 + 11 +22362.499967 + 21 +22132.1279 + 31 +0.0 + 0 +LINE + 5 +19F8 + 8 +0 + 62 + 0 + 10 +22387.499967 + 20 +22175.42917 + 30 +0.0 + 11 +22398.799191 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +19F9 + 8 +0 + 62 + 0 + 10 +22387.499967 + 20 +22132.1279 + 30 +0.0 + 11 +22399.999967 + 21 +22153.778535 + 31 +0.0 + 0 +LINE + 5 +19FA + 8 +0 + 62 + 0 + 10 +22424.999967 + 20 +22153.778535 + 30 +0.0 + 11 +22437.499967 + 21 +22175.42917 + 31 +0.0 + 0 +LINE + 5 +19FB + 8 +0 + 62 + 0 + 10 +22427.611169 + 20 +22115.0 + 30 +0.0 + 11 +22437.499967 + 21 +22132.1279 + 31 +0.0 + 0 +LINE + 5 +19FC + 8 +0 + 62 + 0 + 10 +22462.499967 + 20 +22175.42917 + 30 +0.0 + 11 +22473.799191 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +19FD + 8 +0 + 62 + 0 + 10 +22462.499967 + 20 +22132.1279 + 30 +0.0 + 11 +22474.999967 + 21 +22153.778535 + 31 +0.0 + 0 +LINE + 5 +19FE + 8 +0 + 62 + 0 + 10 +22499.999967 + 20 +22153.778535 + 30 +0.0 + 11 +22512.499967 + 21 +22175.42917 + 31 +0.0 + 0 +LINE + 5 +19FF + 8 +0 + 62 + 0 + 10 +22502.611169 + 20 +22115.0 + 30 +0.0 + 11 +22512.499967 + 21 +22132.1279 + 31 +0.0 + 0 +LINE + 5 +1A00 + 8 +0 + 62 + 0 + 10 +22537.499967 + 20 +22175.429171 + 30 +0.0 + 11 +22548.799191 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1A01 + 8 +0 + 62 + 0 + 10 +22537.499967 + 20 +22132.1279 + 30 +0.0 + 11 +22549.999967 + 21 +22153.778535 + 31 +0.0 + 0 +LINE + 5 +1A02 + 8 +0 + 62 + 0 + 10 +22574.999967 + 20 +22153.778536 + 30 +0.0 + 11 +22587.499967 + 21 +22175.429171 + 31 +0.0 + 0 +LINE + 5 +1A03 + 8 +0 + 62 + 0 + 10 +22577.611169 + 20 +22115.0 + 30 +0.0 + 11 +22587.499967 + 21 +22132.1279 + 31 +0.0 + 0 +LINE + 5 +1A04 + 8 +0 + 62 + 0 + 10 +22612.499967 + 20 +22175.429171 + 30 +0.0 + 11 +22623.79919 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1A05 + 8 +0 + 62 + 0 + 10 +22612.499967 + 20 +22132.127901 + 30 +0.0 + 11 +22624.999967 + 21 +22153.778536 + 31 +0.0 + 0 +LINE + 5 +1A06 + 8 +0 + 62 + 0 + 10 +22649.999967 + 20 +22153.778536 + 30 +0.0 + 11 +22662.499967 + 21 +22175.429171 + 31 +0.0 + 0 +LINE + 5 +1A07 + 8 +0 + 62 + 0 + 10 +22652.611168 + 20 +22115.0 + 30 +0.0 + 11 +22662.499966 + 21 +22132.127901 + 31 +0.0 + 0 +LINE + 5 +1A08 + 8 +0 + 62 + 0 + 10 +22687.499966 + 20 +22175.429171 + 30 +0.0 + 11 +22698.79919 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1A09 + 8 +0 + 62 + 0 + 10 +22687.499966 + 20 +22132.127901 + 30 +0.0 + 11 +22699.999966 + 21 +22153.778536 + 31 +0.0 + 0 +LINE + 5 +1A0A + 8 +0 + 62 + 0 + 10 +22724.999966 + 20 +22153.778536 + 30 +0.0 + 11 +22737.499966 + 21 +22175.429171 + 31 +0.0 + 0 +LINE + 5 +1A0B + 8 +0 + 62 + 0 + 10 +22727.611168 + 20 +22115.0 + 30 +0.0 + 11 +22737.499966 + 21 +22132.127901 + 31 +0.0 + 0 +LINE + 5 +1A0C + 8 +0 + 62 + 0 + 10 +22762.499966 + 20 +22175.429171 + 30 +0.0 + 11 +22773.79919 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1A0D + 8 +0 + 62 + 0 + 10 +22762.499966 + 20 +22132.127901 + 30 +0.0 + 11 +22774.999966 + 21 +22153.778536 + 31 +0.0 + 0 +LINE + 5 +1A0E + 8 +0 + 62 + 0 + 10 +22799.999966 + 20 +22153.778536 + 30 +0.0 + 11 +22812.499966 + 21 +22175.429171 + 31 +0.0 + 0 +LINE + 5 +1A0F + 8 +0 + 62 + 0 + 10 +22802.611168 + 20 +22115.0 + 30 +0.0 + 11 +22812.499966 + 21 +22132.127901 + 31 +0.0 + 0 +LINE + 5 +1A10 + 8 +0 + 62 + 0 + 10 +22837.499966 + 20 +22175.429171 + 30 +0.0 + 11 +22848.799189 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1A11 + 8 +0 + 62 + 0 + 10 +22837.499966 + 20 +22132.127901 + 30 +0.0 + 11 +22849.999966 + 21 +22153.778536 + 31 +0.0 + 0 +LINE + 5 +1A12 + 8 +0 + 62 + 0 + 10 +22874.999966 + 20 +22153.778536 + 30 +0.0 + 11 +22887.499966 + 21 +22175.429171 + 31 +0.0 + 0 +LINE + 5 +1A13 + 8 +0 + 62 + 0 + 10 +22877.611167 + 20 +22115.0 + 30 +0.0 + 11 +22887.499966 + 21 +22132.127901 + 31 +0.0 + 0 +LINE + 5 +1A14 + 8 +0 + 62 + 0 + 10 +22912.499966 + 20 +22175.429171 + 30 +0.0 + 11 +22923.799189 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1A15 + 8 +0 + 62 + 0 + 10 +22912.499966 + 20 +22132.127901 + 30 +0.0 + 11 +22924.999966 + 21 +22153.778536 + 31 +0.0 + 0 +LINE + 5 +1A16 + 8 +0 + 62 + 0 + 10 +22949.999966 + 20 +22153.778536 + 30 +0.0 + 11 +22962.499966 + 21 +22175.429171 + 31 +0.0 + 0 +LINE + 5 +1A17 + 8 +0 + 62 + 0 + 10 +22952.611167 + 20 +22115.0 + 30 +0.0 + 11 +22962.499966 + 21 +22132.127901 + 31 +0.0 + 0 +LINE + 5 +1A18 + 8 +0 + 62 + 0 + 10 +22987.499966 + 20 +22175.429171 + 30 +0.0 + 11 +22998.799189 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1A19 + 8 +0 + 62 + 0 + 10 +22987.499965 + 20 +22132.127901 + 30 +0.0 + 11 +22999.999965 + 21 +22153.778536 + 31 +0.0 + 0 +LINE + 5 +1A1A + 8 +0 + 62 + 0 + 10 +23024.999965 + 20 +22153.778536 + 30 +0.0 + 11 +23037.499965 + 21 +22175.429171 + 31 +0.0 + 0 +LINE + 5 +1A1B + 8 +0 + 62 + 0 + 10 +23027.611167 + 20 +22115.0 + 30 +0.0 + 11 +23037.499965 + 21 +22132.127901 + 31 +0.0 + 0 +LINE + 5 +1A1C + 8 +0 + 62 + 0 + 10 +23062.499965 + 20 +22175.429172 + 30 +0.0 + 11 +23073.799188 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1A1D + 8 +0 + 62 + 0 + 10 +23062.499965 + 20 +22132.127901 + 30 +0.0 + 11 +23074.999965 + 21 +22153.778536 + 31 +0.0 + 0 +LINE + 5 +1A1E + 8 +0 + 62 + 0 + 10 +23099.999965 + 20 +22153.778537 + 30 +0.0 + 11 +23112.499965 + 21 +22175.429172 + 31 +0.0 + 0 +LINE + 5 +1A1F + 8 +0 + 62 + 0 + 10 +23102.611166 + 20 +22115.0 + 30 +0.0 + 11 +23112.499965 + 21 +22132.127901 + 31 +0.0 + 0 +LINE + 5 +1A20 + 8 +0 + 62 + 0 + 10 +23137.499965 + 20 +22175.429172 + 30 +0.0 + 11 +23148.799188 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1A21 + 8 +0 + 62 + 0 + 10 +23137.499965 + 20 +22132.127902 + 30 +0.0 + 11 +23149.999965 + 21 +22153.778537 + 31 +0.0 + 0 +LINE + 5 +1A22 + 8 +0 + 62 + 0 + 10 +23174.999965 + 20 +22153.778537 + 30 +0.0 + 11 +23187.499965 + 21 +22175.429172 + 31 +0.0 + 0 +LINE + 5 +1A23 + 8 +0 + 62 + 0 + 10 +23177.611166 + 20 +22115.0 + 30 +0.0 + 11 +23187.499965 + 21 +22132.127902 + 31 +0.0 + 0 +LINE + 5 +1A24 + 8 +0 + 62 + 0 + 10 +23212.499965 + 20 +22175.429172 + 30 +0.0 + 11 +23223.799188 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1A25 + 8 +0 + 62 + 0 + 10 +23212.499965 + 20 +22132.127902 + 30 +0.0 + 11 +23224.999965 + 21 +22153.778537 + 31 +0.0 + 0 +LINE + 5 +1A26 + 8 +0 + 62 + 0 + 10 +23249.999965 + 20 +22153.778537 + 30 +0.0 + 11 +23262.499965 + 21 +22175.429172 + 31 +0.0 + 0 +LINE + 5 +1A27 + 8 +0 + 62 + 0 + 10 +23252.611166 + 20 +22115.0 + 30 +0.0 + 11 +23262.499965 + 21 +22132.127902 + 31 +0.0 + 0 +LINE + 5 +1A28 + 8 +0 + 62 + 0 + 10 +23287.499965 + 20 +22175.429172 + 30 +0.0 + 11 +23298.799187 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1A29 + 8 +0 + 62 + 0 + 10 +23287.499964 + 20 +22132.127902 + 30 +0.0 + 11 +23299.999964 + 21 +22153.778537 + 31 +0.0 + 0 +LINE + 5 +1A2A + 8 +0 + 62 + 0 + 10 +23324.999964 + 20 +22153.778537 + 30 +0.0 + 11 +23337.499964 + 21 +22175.429172 + 31 +0.0 + 0 +LINE + 5 +1A2B + 8 +0 + 62 + 0 + 10 +23327.611165 + 20 +22115.0 + 30 +0.0 + 11 +23337.499964 + 21 +22132.127902 + 31 +0.0 + 0 +LINE + 5 +1A2C + 8 +0 + 62 + 0 + 10 +23362.499964 + 20 +22175.429172 + 30 +0.0 + 11 +23373.799187 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1A2D + 8 +0 + 62 + 0 + 10 +23362.499964 + 20 +22132.127902 + 30 +0.0 + 11 +23374.999964 + 21 +22153.778537 + 31 +0.0 + 0 +ENDBLK + 5 +1A2E + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X49 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X49 + 1 + + 0 +LINE + 5 +1A30 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +20270.173215 + 30 +0.0 + 11 +26812.5 + 21 +20270.173215 + 31 +0.0 + 0 +LINE + 5 +1A31 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +20291.82385 + 30 +0.0 + 11 +26775.0 + 21 +20291.82385 + 31 +0.0 + 0 +LINE + 5 +1A32 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +20313.474485 + 30 +0.0 + 11 +26812.5 + 21 +20313.474485 + 31 +0.0 + 0 +LINE + 5 +1A33 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +20335.12512 + 30 +0.0 + 11 +26775.0 + 21 +20335.12512 + 31 +0.0 + 0 +LINE + 5 +1A34 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +20356.775755 + 30 +0.0 + 11 +26812.5 + 21 +20356.775755 + 31 +0.0 + 0 +LINE + 5 +1A35 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +20378.42639 + 30 +0.0 + 11 +26775.0 + 21 +20378.42639 + 31 +0.0 + 0 +LINE + 5 +1A36 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +20400.077025 + 30 +0.0 + 11 +26812.5 + 21 +20400.077025 + 31 +0.0 + 0 +LINE + 5 +1A37 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +20421.72766 + 30 +0.0 + 11 +26775.0 + 21 +20421.72766 + 31 +0.0 + 0 +LINE + 5 +1A38 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +20443.378295 + 30 +0.0 + 11 +26812.5 + 21 +20443.378295 + 31 +0.0 + 0 +LINE + 5 +1A39 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +20465.02893 + 30 +0.0 + 11 +26775.0 + 21 +20465.02893 + 31 +0.0 + 0 +LINE + 5 +1A3A + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +20486.679565 + 30 +0.0 + 11 +26812.5 + 21 +20486.679565 + 31 +0.0 + 0 +LINE + 5 +1A3B + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +20508.3302 + 30 +0.0 + 11 +26775.0 + 21 +20508.3302 + 31 +0.0 + 0 +LINE + 5 +1A3C + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +20529.980835 + 30 +0.0 + 11 +26812.5 + 21 +20529.980835 + 31 +0.0 + 0 +LINE + 5 +1A3D + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +20551.63147 + 30 +0.0 + 11 +26775.0 + 21 +20551.63147 + 31 +0.0 + 0 +LINE + 5 +1A3E + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +20573.282105 + 30 +0.0 + 11 +26812.5 + 21 +20573.282105 + 31 +0.0 + 0 +LINE + 5 +1A3F + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +20594.93274 + 30 +0.0 + 11 +26775.0 + 21 +20594.93274 + 31 +0.0 + 0 +LINE + 5 +1A40 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +20616.583375 + 30 +0.0 + 11 +26812.5 + 21 +20616.583375 + 31 +0.0 + 0 +LINE + 5 +1A41 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +20638.23401 + 30 +0.0 + 11 +26775.0 + 21 +20638.23401 + 31 +0.0 + 0 +LINE + 5 +1A42 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +20659.884645 + 30 +0.0 + 11 +26812.5 + 21 +20659.884645 + 31 +0.0 + 0 +LINE + 5 +1A43 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +20681.53528 + 30 +0.0 + 11 +26775.0 + 21 +20681.53528 + 31 +0.0 + 0 +LINE + 5 +1A44 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +20703.185915 + 30 +0.0 + 11 +26812.5 + 21 +20703.185915 + 31 +0.0 + 0 +LINE + 5 +1A45 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +20724.83655 + 30 +0.0 + 11 +26775.0 + 21 +20724.83655 + 31 +0.0 + 0 +LINE + 5 +1A46 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +20746.487185 + 30 +0.0 + 11 +26812.5 + 21 +20746.487185 + 31 +0.0 + 0 +LINE + 5 +1A47 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +20768.13782 + 30 +0.0 + 11 +26775.0 + 21 +20768.13782 + 31 +0.0 + 0 +LINE + 5 +1A48 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +20789.788455 + 30 +0.0 + 11 +26812.5 + 21 +20789.788455 + 31 +0.0 + 0 +LINE + 5 +1A49 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +20811.43909 + 30 +0.0 + 11 +26775.0 + 21 +20811.43909 + 31 +0.0 + 0 +LINE + 5 +1A4A + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +20833.089725 + 30 +0.0 + 11 +26812.5 + 21 +20833.089725 + 31 +0.0 + 0 +LINE + 5 +1A4B + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +20854.74036 + 30 +0.0 + 11 +26775.0 + 21 +20854.74036 + 31 +0.0 + 0 +LINE + 5 +1A4C + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +20876.390995 + 30 +0.0 + 11 +26812.5 + 21 +20876.390995 + 31 +0.0 + 0 +LINE + 5 +1A4D + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +20898.04163 + 30 +0.0 + 11 +26775.0 + 21 +20898.04163 + 31 +0.0 + 0 +LINE + 5 +1A4E + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +20919.692265 + 30 +0.0 + 11 +26812.5 + 21 +20919.692265 + 31 +0.0 + 0 +LINE + 5 +1A4F + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +20941.3429 + 30 +0.0 + 11 +26775.0 + 21 +20941.3429 + 31 +0.0 + 0 +LINE + 5 +1A50 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +20962.993535 + 30 +0.0 + 11 +26812.5 + 21 +20962.993535 + 31 +0.0 + 0 +LINE + 5 +1A51 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +20984.64417 + 30 +0.0 + 11 +26775.0 + 21 +20984.64417 + 31 +0.0 + 0 +LINE + 5 +1A52 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +21006.294805 + 30 +0.0 + 11 +26812.5 + 21 +21006.294805 + 31 +0.0 + 0 +LINE + 5 +1A53 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +21027.94544 + 30 +0.0 + 11 +26775.0 + 21 +21027.94544 + 31 +0.0 + 0 +LINE + 5 +1A54 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +21049.596075 + 30 +0.0 + 11 +26812.5 + 21 +21049.596075 + 31 +0.0 + 0 +LINE + 5 +1A55 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +21071.24671 + 30 +0.0 + 11 +26775.0 + 21 +21071.24671 + 31 +0.0 + 0 +LINE + 5 +1A56 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +21092.897345 + 30 +0.0 + 11 +26812.5 + 21 +21092.897345 + 31 +0.0 + 0 +LINE + 5 +1A57 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +21114.54798 + 30 +0.0 + 11 +26775.0 + 21 +21114.54798 + 31 +0.0 + 0 +LINE + 5 +1A58 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +21136.198615 + 30 +0.0 + 11 +26812.5 + 21 +21136.198615 + 31 +0.0 + 0 +LINE + 5 +1A59 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +21157.84925 + 30 +0.0 + 11 +26775.0 + 21 +21157.84925 + 31 +0.0 + 0 +LINE + 5 +1A5A + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +21179.499885 + 30 +0.0 + 11 +26812.5 + 21 +21179.499885 + 31 +0.0 + 0 +LINE + 5 +1A5B + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +21201.15052 + 30 +0.0 + 11 +26775.0 + 21 +21201.15052 + 31 +0.0 + 0 +LINE + 5 +1A5C + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +21222.801155 + 30 +0.0 + 11 +26812.5 + 21 +21222.801155 + 31 +0.0 + 0 +LINE + 5 +1A5D + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +21244.45179 + 30 +0.0 + 11 +26775.0 + 21 +21244.45179 + 31 +0.0 + 0 +LINE + 5 +1A5E + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +21266.102425 + 30 +0.0 + 11 +26812.5 + 21 +21266.102425 + 31 +0.0 + 0 +LINE + 5 +1A5F + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +21287.75306 + 30 +0.0 + 11 +26775.0 + 21 +21287.75306 + 31 +0.0 + 0 +LINE + 5 +1A60 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +21309.403695 + 30 +0.0 + 11 +26812.5 + 21 +21309.403695 + 31 +0.0 + 0 +LINE + 5 +1A61 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +21331.05433 + 30 +0.0 + 11 +26775.0 + 21 +21331.05433 + 31 +0.0 + 0 +LINE + 5 +1A62 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +21352.704965 + 30 +0.0 + 11 +26812.5 + 21 +21352.704965 + 31 +0.0 + 0 +LINE + 5 +1A63 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +21374.3556 + 30 +0.0 + 11 +26775.0 + 21 +21374.3556 + 31 +0.0 + 0 +LINE + 5 +1A64 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +21396.006235 + 30 +0.0 + 11 +26812.5 + 21 +21396.006235 + 31 +0.0 + 0 +LINE + 5 +1A65 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +21417.65687 + 30 +0.0 + 11 +26775.0 + 21 +21417.65687 + 31 +0.0 + 0 +LINE + 5 +1A66 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +21439.307505 + 30 +0.0 + 11 +26812.5 + 21 +21439.307505 + 31 +0.0 + 0 +LINE + 5 +1A67 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +21460.95814 + 30 +0.0 + 11 +26775.0 + 21 +21460.95814 + 31 +0.0 + 0 +LINE + 5 +1A68 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +21482.608775 + 30 +0.0 + 11 +26812.5 + 21 +21482.608775 + 31 +0.0 + 0 +LINE + 5 +1A69 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +21504.25941 + 30 +0.0 + 11 +26775.0 + 21 +21504.25941 + 31 +0.0 + 0 +LINE + 5 +1A6A + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +21525.910045 + 30 +0.0 + 11 +26812.5 + 21 +21525.910045 + 31 +0.0 + 0 +LINE + 5 +1A6B + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +21547.56068 + 30 +0.0 + 11 +26775.0 + 21 +21547.56068 + 31 +0.0 + 0 +LINE + 5 +1A6C + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +21569.211315 + 30 +0.0 + 11 +26812.5 + 21 +21569.211315 + 31 +0.0 + 0 +LINE + 5 +1A6D + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +21590.86195 + 30 +0.0 + 11 +26775.0 + 21 +21590.86195 + 31 +0.0 + 0 +LINE + 5 +1A6E + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +21612.512585 + 30 +0.0 + 11 +26812.5 + 21 +21612.512585 + 31 +0.0 + 0 +LINE + 5 +1A6F + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +21634.16322 + 30 +0.0 + 11 +26775.0 + 21 +21634.16322 + 31 +0.0 + 0 +LINE + 5 +1A70 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +21655.813855 + 30 +0.0 + 11 +26812.5 + 21 +21655.813855 + 31 +0.0 + 0 +LINE + 5 +1A71 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +21677.46449 + 30 +0.0 + 11 +26775.0 + 21 +21677.46449 + 31 +0.0 + 0 +LINE + 5 +1A72 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +21699.115125 + 30 +0.0 + 11 +26812.5 + 21 +21699.115125 + 31 +0.0 + 0 +LINE + 5 +1A73 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +21720.76576 + 30 +0.0 + 11 +26775.0 + 21 +21720.76576 + 31 +0.0 + 0 +LINE + 5 +1A74 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +21742.416395 + 30 +0.0 + 11 +26812.5 + 21 +21742.416395 + 31 +0.0 + 0 +LINE + 5 +1A75 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +21764.06703 + 30 +0.0 + 11 +26775.0 + 21 +21764.06703 + 31 +0.0 + 0 +LINE + 5 +1A76 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +21785.717665 + 30 +0.0 + 11 +26812.5 + 21 +21785.717665 + 31 +0.0 + 0 +LINE + 5 +1A77 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +21807.3683 + 30 +0.0 + 11 +26775.0 + 21 +21807.3683 + 31 +0.0 + 0 +LINE + 5 +1A78 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +21829.018935 + 30 +0.0 + 11 +26812.5 + 21 +21829.018935 + 31 +0.0 + 0 +LINE + 5 +1A79 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +21850.66957 + 30 +0.0 + 11 +26775.0 + 21 +21850.66957 + 31 +0.0 + 0 +LINE + 5 +1A7A + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +21872.320205 + 30 +0.0 + 11 +26812.5 + 21 +21872.320205 + 31 +0.0 + 0 +LINE + 5 +1A7B + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +21893.97084 + 30 +0.0 + 11 +26775.0 + 21 +21893.97084 + 31 +0.0 + 0 +LINE + 5 +1A7C + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +21915.621475 + 30 +0.0 + 11 +26812.5 + 21 +21915.621475 + 31 +0.0 + 0 +LINE + 5 +1A7D + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +21937.27211 + 30 +0.0 + 11 +26775.0 + 21 +21937.27211 + 31 +0.0 + 0 +LINE + 5 +1A7E + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +21958.922745 + 30 +0.0 + 11 +26812.5 + 21 +21958.922745 + 31 +0.0 + 0 +LINE + 5 +1A7F + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +21980.57338 + 30 +0.0 + 11 +26775.0 + 21 +21980.57338 + 31 +0.0 + 0 +LINE + 5 +1A80 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +22002.224015 + 30 +0.0 + 11 +26812.5 + 21 +22002.224015 + 31 +0.0 + 0 +LINE + 5 +1A81 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +22023.87465 + 30 +0.0 + 11 +26775.0 + 21 +22023.87465 + 31 +0.0 + 0 +LINE + 5 +1A82 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +22045.525285 + 30 +0.0 + 11 +26812.5 + 21 +22045.525285 + 31 +0.0 + 0 +LINE + 5 +1A83 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +22067.17592 + 30 +0.0 + 11 +26775.0 + 21 +22067.17592 + 31 +0.0 + 0 +LINE + 5 +1A84 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +22088.826555 + 30 +0.0 + 11 +26812.5 + 21 +22088.826555 + 31 +0.0 + 0 +LINE + 5 +1A85 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +22110.47719 + 30 +0.0 + 11 +26775.0 + 21 +22110.47719 + 31 +0.0 + 0 +LINE + 5 +1A86 + 8 +0 + 62 + 0 + 10 +25287.5 + 20 +22132.127825 + 30 +0.0 + 11 +25312.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1A87 + 8 +0 + 62 + 0 + 10 +25362.5 + 20 +22132.127825 + 30 +0.0 + 11 +25387.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1A88 + 8 +0 + 62 + 0 + 10 +25437.5 + 20 +22132.127825 + 30 +0.0 + 11 +25462.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1A89 + 8 +0 + 62 + 0 + 10 +25512.5 + 20 +22132.127825 + 30 +0.0 + 11 +25537.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1A8A + 8 +0 + 62 + 0 + 10 +25587.5 + 20 +22132.127825 + 30 +0.0 + 11 +25612.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1A8B + 8 +0 + 62 + 0 + 10 +25662.5 + 20 +22132.127825 + 30 +0.0 + 11 +25687.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1A8C + 8 +0 + 62 + 0 + 10 +25737.5 + 20 +22132.127825 + 30 +0.0 + 11 +25762.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1A8D + 8 +0 + 62 + 0 + 10 +25812.5 + 20 +22132.127825 + 30 +0.0 + 11 +25837.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1A8E + 8 +0 + 62 + 0 + 10 +25887.5 + 20 +22132.127825 + 30 +0.0 + 11 +25912.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1A8F + 8 +0 + 62 + 0 + 10 +25962.5 + 20 +22132.127825 + 30 +0.0 + 11 +25987.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1A90 + 8 +0 + 62 + 0 + 10 +26037.5 + 20 +22132.127825 + 30 +0.0 + 11 +26062.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1A91 + 8 +0 + 62 + 0 + 10 +26112.5 + 20 +22132.127825 + 30 +0.0 + 11 +26137.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1A92 + 8 +0 + 62 + 0 + 10 +26187.5 + 20 +22132.127825 + 30 +0.0 + 11 +26212.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1A93 + 8 +0 + 62 + 0 + 10 +26262.5 + 20 +22132.127825 + 30 +0.0 + 11 +26287.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1A94 + 8 +0 + 62 + 0 + 10 +26337.5 + 20 +22132.127825 + 30 +0.0 + 11 +26362.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1A95 + 8 +0 + 62 + 0 + 10 +26412.5 + 20 +22132.127825 + 30 +0.0 + 11 +26437.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1A96 + 8 +0 + 62 + 0 + 10 +26487.5 + 20 +22132.127825 + 30 +0.0 + 11 +26512.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1A97 + 8 +0 + 62 + 0 + 10 +26562.5 + 20 +22132.127825 + 30 +0.0 + 11 +26587.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1A98 + 8 +0 + 62 + 0 + 10 +26637.5 + 20 +22132.127825 + 30 +0.0 + 11 +26662.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1A99 + 8 +0 + 62 + 0 + 10 +26712.5 + 20 +22132.127825 + 30 +0.0 + 11 +26737.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1A9A + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +22132.127825 + 30 +0.0 + 11 +26812.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1A9B + 8 +0 + 62 + 0 + 10 +25250.0 + 20 +22153.77846 + 30 +0.0 + 11 +25275.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1A9C + 8 +0 + 62 + 0 + 10 +25325.0 + 20 +22153.77846 + 30 +0.0 + 11 +25350.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1A9D + 8 +0 + 62 + 0 + 10 +25400.0 + 20 +22153.77846 + 30 +0.0 + 11 +25425.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1A9E + 8 +0 + 62 + 0 + 10 +25475.0 + 20 +22153.77846 + 30 +0.0 + 11 +25500.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1A9F + 8 +0 + 62 + 0 + 10 +25550.0 + 20 +22153.77846 + 30 +0.0 + 11 +25575.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1AA0 + 8 +0 + 62 + 0 + 10 +25625.0 + 20 +22153.77846 + 30 +0.0 + 11 +25650.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1AA1 + 8 +0 + 62 + 0 + 10 +25700.0 + 20 +22153.77846 + 30 +0.0 + 11 +25725.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1AA2 + 8 +0 + 62 + 0 + 10 +25775.0 + 20 +22153.77846 + 30 +0.0 + 11 +25800.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1AA3 + 8 +0 + 62 + 0 + 10 +25850.0 + 20 +22153.77846 + 30 +0.0 + 11 +25875.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1AA4 + 8 +0 + 62 + 0 + 10 +25925.0 + 20 +22153.77846 + 30 +0.0 + 11 +25950.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1AA5 + 8 +0 + 62 + 0 + 10 +26000.0 + 20 +22153.77846 + 30 +0.0 + 11 +26025.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1AA6 + 8 +0 + 62 + 0 + 10 +26075.0 + 20 +22153.77846 + 30 +0.0 + 11 +26100.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1AA7 + 8 +0 + 62 + 0 + 10 +26150.0 + 20 +22153.77846 + 30 +0.0 + 11 +26175.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1AA8 + 8 +0 + 62 + 0 + 10 +26225.0 + 20 +22153.77846 + 30 +0.0 + 11 +26250.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1AA9 + 8 +0 + 62 + 0 + 10 +26300.0 + 20 +22153.77846 + 30 +0.0 + 11 +26325.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1AAA + 8 +0 + 62 + 0 + 10 +26375.0 + 20 +22153.77846 + 30 +0.0 + 11 +26400.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1AAB + 8 +0 + 62 + 0 + 10 +26450.0 + 20 +22153.77846 + 30 +0.0 + 11 +26475.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1AAC + 8 +0 + 62 + 0 + 10 +26525.0 + 20 +22153.77846 + 30 +0.0 + 11 +26550.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1AAD + 8 +0 + 62 + 0 + 10 +26600.0 + 20 +22153.77846 + 30 +0.0 + 11 +26625.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1AAE + 8 +0 + 62 + 0 + 10 +26675.0 + 20 +22153.77846 + 30 +0.0 + 11 +26700.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1AAF + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +22153.77846 + 30 +0.0 + 11 +26775.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1AB0 + 8 +0 + 62 + 0 + 10 +25287.5 + 20 +22175.429095 + 30 +0.0 + 11 +25312.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1AB1 + 8 +0 + 62 + 0 + 10 +25362.5 + 20 +22175.429095 + 30 +0.0 + 11 +25387.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1AB2 + 8 +0 + 62 + 0 + 10 +25437.5 + 20 +22175.429095 + 30 +0.0 + 11 +25462.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1AB3 + 8 +0 + 62 + 0 + 10 +25512.5 + 20 +22175.429095 + 30 +0.0 + 11 +25537.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1AB4 + 8 +0 + 62 + 0 + 10 +25587.5 + 20 +22175.429095 + 30 +0.0 + 11 +25612.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1AB5 + 8 +0 + 62 + 0 + 10 +25662.5 + 20 +22175.429095 + 30 +0.0 + 11 +25687.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1AB6 + 8 +0 + 62 + 0 + 10 +25737.5 + 20 +22175.429095 + 30 +0.0 + 11 +25762.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1AB7 + 8 +0 + 62 + 0 + 10 +25812.5 + 20 +22175.429095 + 30 +0.0 + 11 +25837.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1AB8 + 8 +0 + 62 + 0 + 10 +25887.5 + 20 +22175.429095 + 30 +0.0 + 11 +25912.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1AB9 + 8 +0 + 62 + 0 + 10 +25962.5 + 20 +22175.429095 + 30 +0.0 + 11 +25987.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1ABA + 8 +0 + 62 + 0 + 10 +26037.5 + 20 +22175.429095 + 30 +0.0 + 11 +26062.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1ABB + 8 +0 + 62 + 0 + 10 +26112.5 + 20 +22175.429095 + 30 +0.0 + 11 +26137.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1ABC + 8 +0 + 62 + 0 + 10 +26187.5 + 20 +22175.429095 + 30 +0.0 + 11 +26212.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1ABD + 8 +0 + 62 + 0 + 10 +26262.5 + 20 +22175.429095 + 30 +0.0 + 11 +26287.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1ABE + 8 +0 + 62 + 0 + 10 +26337.5 + 20 +22175.429095 + 30 +0.0 + 11 +26362.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1ABF + 8 +0 + 62 + 0 + 10 +26412.5 + 20 +22175.429095 + 30 +0.0 + 11 +26437.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1AC0 + 8 +0 + 62 + 0 + 10 +26487.5 + 20 +22175.429095 + 30 +0.0 + 11 +26512.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1AC1 + 8 +0 + 62 + 0 + 10 +26562.5 + 20 +22175.429095 + 30 +0.0 + 11 +26587.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1AC2 + 8 +0 + 62 + 0 + 10 +26637.5 + 20 +22175.429095 + 30 +0.0 + 11 +26662.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1AC3 + 8 +0 + 62 + 0 + 10 +26712.5 + 20 +22175.429095 + 30 +0.0 + 11 +26737.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1AC4 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +22175.429095 + 30 +0.0 + 11 +26812.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1AC5 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +20248.52258 + 30 +0.0 + 11 +26775.0 + 21 +20248.52258 + 31 +0.0 + 0 +LINE + 5 +1AC6 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +20226.871945 + 30 +0.0 + 11 +26812.5 + 21 +20226.871945 + 31 +0.0 + 0 +LINE + 5 +1AC7 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +20205.22131 + 30 +0.0 + 11 +26775.0 + 21 +20205.22131 + 31 +0.0 + 0 +LINE + 5 +1AC8 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +20183.570675 + 30 +0.0 + 11 +26812.5 + 21 +20183.570675 + 31 +0.0 + 0 +LINE + 5 +1AC9 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +20161.92004 + 30 +0.0 + 11 +26775.0 + 21 +20161.92004 + 31 +0.0 + 0 +LINE + 5 +1ACA + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +20140.269405 + 30 +0.0 + 11 +26812.5 + 21 +20140.269405 + 31 +0.0 + 0 +LINE + 5 +1ACB + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +20118.61877 + 30 +0.0 + 11 +26775.0 + 21 +20118.61877 + 31 +0.0 + 0 +LINE + 5 +1ACC + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +20096.968135 + 30 +0.0 + 11 +26812.5 + 21 +20096.968135 + 31 +0.0 + 0 +LINE + 5 +1ACD + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +20075.3175 + 30 +0.0 + 11 +26775.0 + 21 +20075.3175 + 31 +0.0 + 0 +LINE + 5 +1ACE + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +20053.666865 + 30 +0.0 + 11 +26812.5 + 21 +20053.666865 + 31 +0.0 + 0 +LINE + 5 +1ACF + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +20032.01623 + 30 +0.0 + 11 +26775.0 + 21 +20032.01623 + 31 +0.0 + 0 +LINE + 5 +1AD0 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +20010.365595 + 30 +0.0 + 11 +26812.5 + 21 +20010.365595 + 31 +0.0 + 0 +LINE + 5 +1AD1 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +19988.71496 + 30 +0.0 + 11 +26775.0 + 21 +19988.71496 + 31 +0.0 + 0 +LINE + 5 +1AD2 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +19967.064325 + 30 +0.0 + 11 +26812.5 + 21 +19967.064325 + 31 +0.0 + 0 +LINE + 5 +1AD3 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +19945.41369 + 30 +0.0 + 11 +26775.0 + 21 +19945.41369 + 31 +0.0 + 0 +LINE + 5 +1AD4 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +19923.763055 + 30 +0.0 + 11 +26812.5 + 21 +19923.763055 + 31 +0.0 + 0 +LINE + 5 +1AD5 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +19902.11242 + 30 +0.0 + 11 +26775.0 + 21 +19902.11242 + 31 +0.0 + 0 +LINE + 5 +1AD6 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +19880.461785 + 30 +0.0 + 11 +26812.5 + 21 +19880.461785 + 31 +0.0 + 0 +LINE + 5 +1AD7 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +19858.81115 + 30 +0.0 + 11 +26775.0 + 21 +19858.81115 + 31 +0.0 + 0 +LINE + 5 +1AD8 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +19837.160515 + 30 +0.0 + 11 +26812.5 + 21 +19837.160515 + 31 +0.0 + 0 +LINE + 5 +1AD9 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +19815.50988 + 30 +0.0 + 11 +26775.0 + 21 +19815.50988 + 31 +0.0 + 0 +LINE + 5 +1ADA + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +19793.859245 + 30 +0.0 + 11 +26812.5 + 21 +19793.859245 + 31 +0.0 + 0 +LINE + 5 +1ADB + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +19772.20861 + 30 +0.0 + 11 +26775.0 + 21 +19772.20861 + 31 +0.0 + 0 +LINE + 5 +1ADC + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +19750.557975 + 30 +0.0 + 11 +26812.5 + 21 +19750.557975 + 31 +0.0 + 0 +LINE + 5 +1ADD + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +19728.90734 + 30 +0.0 + 11 +26775.0 + 21 +19728.90734 + 31 +0.0 + 0 +LINE + 5 +1ADE + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +19707.256705 + 30 +0.0 + 11 +26812.5 + 21 +19707.256705 + 31 +0.0 + 0 +LINE + 5 +1ADF + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +19685.60607 + 30 +0.0 + 11 +26775.0 + 21 +19685.60607 + 31 +0.0 + 0 +LINE + 5 +1AE0 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +19663.955435 + 30 +0.0 + 11 +26812.5 + 21 +19663.955435 + 31 +0.0 + 0 +LINE + 5 +1AE1 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +19642.3048 + 30 +0.0 + 11 +26775.0 + 21 +19642.3048 + 31 +0.0 + 0 +LINE + 5 +1AE2 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +19620.654165 + 30 +0.0 + 11 +26812.5 + 21 +19620.654165 + 31 +0.0 + 0 +LINE + 5 +1AE3 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +19599.00353 + 30 +0.0 + 11 +26775.0 + 21 +19599.00353 + 31 +0.0 + 0 +LINE + 5 +1AE4 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +19577.352895 + 30 +0.0 + 11 +26812.5 + 21 +19577.352895 + 31 +0.0 + 0 +LINE + 5 +1AE5 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +19555.70226 + 30 +0.0 + 11 +26775.0 + 21 +19555.70226 + 31 +0.0 + 0 +LINE + 5 +1AE6 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +19534.051625 + 30 +0.0 + 11 +26812.5 + 21 +19534.051625 + 31 +0.0 + 0 +LINE + 5 +1AE7 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +19512.40099 + 30 +0.0 + 11 +26775.0 + 21 +19512.40099 + 31 +0.0 + 0 +LINE + 5 +1AE8 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +19490.750355 + 30 +0.0 + 11 +26812.5 + 21 +19490.750355 + 31 +0.0 + 0 +LINE + 5 +1AE9 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +19469.09972 + 30 +0.0 + 11 +26775.0 + 21 +19469.09972 + 31 +0.0 + 0 +LINE + 5 +1AEA + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +19447.449085 + 30 +0.0 + 11 +26812.5 + 21 +19447.449085 + 31 +0.0 + 0 +LINE + 5 +1AEB + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +19425.79845 + 30 +0.0 + 11 +26775.0 + 21 +19425.79845 + 31 +0.0 + 0 +LINE + 5 +1AEC + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +19404.147815 + 30 +0.0 + 11 +26812.5 + 21 +19404.147815 + 31 +0.0 + 0 +LINE + 5 +1AED + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +19382.49718 + 30 +0.0 + 11 +26775.0 + 21 +19382.49718 + 31 +0.0 + 0 +LINE + 5 +1AEE + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +19360.846545 + 30 +0.0 + 11 +26812.5 + 21 +19360.846545 + 31 +0.0 + 0 +LINE + 5 +1AEF + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +19339.19591 + 30 +0.0 + 11 +26775.0 + 21 +19339.19591 + 31 +0.0 + 0 +LINE + 5 +1AF0 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +19317.545275 + 30 +0.0 + 11 +26812.5 + 21 +19317.545275 + 31 +0.0 + 0 +LINE + 5 +1AF1 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +19295.89464 + 30 +0.0 + 11 +26775.0 + 21 +19295.89464 + 31 +0.0 + 0 +LINE + 5 +1AF2 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +19274.244005 + 30 +0.0 + 11 +26812.5 + 21 +19274.244005 + 31 +0.0 + 0 +LINE + 5 +1AF3 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +19252.59337 + 30 +0.0 + 11 +26775.0 + 21 +19252.59337 + 31 +0.0 + 0 +LINE + 5 +1AF4 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +19230.942735 + 30 +0.0 + 11 +26812.5 + 21 +19230.942735 + 31 +0.0 + 0 +LINE + 5 +1AF5 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +19209.2921 + 30 +0.0 + 11 +26775.0 + 21 +19209.2921 + 31 +0.0 + 0 +LINE + 5 +1AF6 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +19187.641465 + 30 +0.0 + 11 +26812.5 + 21 +19187.641465 + 31 +0.0 + 0 +LINE + 5 +1AF7 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +19165.99083 + 30 +0.0 + 11 +26775.0 + 21 +19165.99083 + 31 +0.0 + 0 +LINE + 5 +1AF8 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +19144.340195 + 30 +0.0 + 11 +26812.5 + 21 +19144.340195 + 31 +0.0 + 0 +LINE + 5 +1AF9 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +19122.68956 + 30 +0.0 + 11 +26775.0 + 21 +19122.68956 + 31 +0.0 + 0 +LINE + 5 +1AFA + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +19101.038925 + 30 +0.0 + 11 +26812.5 + 21 +19101.038925 + 31 +0.0 + 0 +LINE + 5 +1AFB + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +19079.38829 + 30 +0.0 + 11 +26775.0 + 21 +19079.38829 + 31 +0.0 + 0 +LINE + 5 +1AFC + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +19057.737655 + 30 +0.0 + 11 +26812.5 + 21 +19057.737655 + 31 +0.0 + 0 +LINE + 5 +1AFD + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +19036.08702 + 30 +0.0 + 11 +26775.0 + 21 +19036.08702 + 31 +0.0 + 0 +LINE + 5 +1AFE + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +19014.436385 + 30 +0.0 + 11 +26812.5 + 21 +19014.436385 + 31 +0.0 + 0 +LINE + 5 +1AFF + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +18992.78575 + 30 +0.0 + 11 +26775.0 + 21 +18992.78575 + 31 +0.0 + 0 +LINE + 5 +1B00 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +18971.135115 + 30 +0.0 + 11 +26812.5 + 21 +18971.135115 + 31 +0.0 + 0 +LINE + 5 +1B01 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +18949.48448 + 30 +0.0 + 11 +26775.0 + 21 +18949.48448 + 31 +0.0 + 0 +LINE + 5 +1B02 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +18927.833845 + 30 +0.0 + 11 +26812.5 + 21 +18927.833845 + 31 +0.0 + 0 +LINE + 5 +1B03 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +18906.18321 + 30 +0.0 + 11 +26775.0 + 21 +18906.18321 + 31 +0.0 + 0 +LINE + 5 +1B04 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +18884.532575 + 30 +0.0 + 11 +26812.5 + 21 +18884.532575 + 31 +0.0 + 0 +LINE + 5 +1B05 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +18862.88194 + 30 +0.0 + 11 +26775.0 + 21 +18862.88194 + 31 +0.0 + 0 +LINE + 5 +1B06 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +18841.231305 + 30 +0.0 + 11 +26812.5 + 21 +18841.231305 + 31 +0.0 + 0 +LINE + 5 +1B07 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +18819.58067 + 30 +0.0 + 11 +26775.0 + 21 +18819.58067 + 31 +0.0 + 0 +LINE + 5 +1B08 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +18797.930035 + 30 +0.0 + 11 +26812.5 + 21 +18797.930035 + 31 +0.0 + 0 +LINE + 5 +1B09 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +18776.2794 + 30 +0.0 + 11 +26775.0 + 21 +18776.2794 + 31 +0.0 + 0 +LINE + 5 +1B0A + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +18754.628765 + 30 +0.0 + 11 +26812.5 + 21 +18754.628765 + 31 +0.0 + 0 +LINE + 5 +1B0B + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +18732.97813 + 30 +0.0 + 11 +26775.0 + 21 +18732.97813 + 31 +0.0 + 0 +LINE + 5 +1B0C + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +18711.327495 + 30 +0.0 + 11 +26812.5 + 21 +18711.327495 + 31 +0.0 + 0 +LINE + 5 +1B0D + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +18689.67686 + 30 +0.0 + 11 +26775.0 + 21 +18689.67686 + 31 +0.0 + 0 +LINE + 5 +1B0E + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +18668.026225 + 30 +0.0 + 11 +26812.5 + 21 +18668.026225 + 31 +0.0 + 0 +LINE + 5 +1B0F + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +18646.37559 + 30 +0.0 + 11 +26775.0 + 21 +18646.37559 + 31 +0.0 + 0 +LINE + 5 +1B10 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +18624.724955 + 30 +0.0 + 11 +26812.5 + 21 +18624.724955 + 31 +0.0 + 0 +LINE + 5 +1B11 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +18603.07432 + 30 +0.0 + 11 +26775.0 + 21 +18603.07432 + 31 +0.0 + 0 +LINE + 5 +1B12 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +18581.423685 + 30 +0.0 + 11 +26812.5 + 21 +18581.423685 + 31 +0.0 + 0 +LINE + 5 +1B13 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +18559.77305 + 30 +0.0 + 11 +26775.0 + 21 +18559.77305 + 31 +0.0 + 0 +LINE + 5 +1B14 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +18538.122415 + 30 +0.0 + 11 +26812.5 + 21 +18538.122415 + 31 +0.0 + 0 +LINE + 5 +1B15 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +18516.47178 + 30 +0.0 + 11 +26775.0 + 21 +18516.47178 + 31 +0.0 + 0 +LINE + 5 +1B16 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +18494.821145 + 30 +0.0 + 11 +26812.5 + 21 +18494.821145 + 31 +0.0 + 0 +LINE + 5 +1B17 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +18473.17051 + 30 +0.0 + 11 +26775.0 + 21 +18473.17051 + 31 +0.0 + 0 +LINE + 5 +1B18 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +18451.519875 + 30 +0.0 + 11 +26812.5 + 21 +18451.519875 + 31 +0.0 + 0 +LINE + 5 +1B19 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +18429.86924 + 30 +0.0 + 11 +26775.0 + 21 +18429.86924 + 31 +0.0 + 0 +LINE + 5 +1B1A + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +18408.218605 + 30 +0.0 + 11 +26812.5 + 21 +18408.218605 + 31 +0.0 + 0 +LINE + 5 +1B1B + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +18386.56797 + 30 +0.0 + 11 +26775.0 + 21 +18386.56797 + 31 +0.0 + 0 +LINE + 5 +1B1C + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +18364.917335 + 30 +0.0 + 11 +26812.5 + 21 +18364.917335 + 31 +0.0 + 0 +LINE + 5 +1B1D + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +18871.542029 + 30 +0.0 + 11 +26812.49991 + 21 +18884.532565 + 31 +0.0 + 0 +LINE + 5 +1B1E + 8 +0 + 62 + 0 + 10 +26787.49991 + 20 +18927.833835 + 30 +0.0 + 11 +26774.99991 + 21 +18949.484471 + 31 +0.0 + 0 +LINE + 5 +1B1F + 8 +0 + 62 + 0 + 10 +26749.99991 + 20 +18992.785741 + 30 +0.0 + 11 +26740.0 + 21 +19010.106093 + 31 +0.0 + 0 +LINE + 5 +1B20 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +18828.240759 + 30 +0.0 + 11 +26812.49991 + 21 +18841.231295 + 31 +0.0 + 0 +LINE + 5 +1B21 + 8 +0 + 62 + 0 + 10 +26787.49991 + 20 +18884.532565 + 30 +0.0 + 11 +26774.99991 + 21 +18906.1832 + 31 +0.0 + 0 +LINE + 5 +1B22 + 8 +0 + 62 + 0 + 10 +26749.99991 + 20 +18949.484471 + 30 +0.0 + 11 +26740.0 + 21 +18966.804823 + 31 +0.0 + 0 +LINE + 5 +1B23 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +18784.939489 + 30 +0.0 + 11 +26812.49991 + 21 +18797.930025 + 31 +0.0 + 0 +LINE + 5 +1B24 + 8 +0 + 62 + 0 + 10 +26787.49991 + 20 +18841.231295 + 30 +0.0 + 11 +26774.99991 + 21 +18862.88193 + 31 +0.0 + 0 +LINE + 5 +1B25 + 8 +0 + 62 + 0 + 10 +26749.99991 + 20 +18906.1832 + 30 +0.0 + 11 +26740.0 + 21 +18923.503553 + 31 +0.0 + 0 +LINE + 5 +1B26 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +18741.638219 + 30 +0.0 + 11 +26812.499911 + 21 +18754.628755 + 31 +0.0 + 0 +LINE + 5 +1B27 + 8 +0 + 62 + 0 + 10 +26787.499911 + 20 +18797.930025 + 30 +0.0 + 11 +26774.999911 + 21 +18819.58066 + 31 +0.0 + 0 +LINE + 5 +1B28 + 8 +0 + 62 + 0 + 10 +26749.999911 + 20 +18862.88193 + 30 +0.0 + 11 +26740.0 + 21 +18880.202283 + 31 +0.0 + 0 +LINE + 5 +1B29 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +18698.336949 + 30 +0.0 + 11 +26812.499911 + 21 +18711.327485 + 31 +0.0 + 0 +LINE + 5 +1B2A + 8 +0 + 62 + 0 + 10 +26787.499911 + 20 +18754.628755 + 30 +0.0 + 11 +26774.999911 + 21 +18776.27939 + 31 +0.0 + 0 +LINE + 5 +1B2B + 8 +0 + 62 + 0 + 10 +26749.999911 + 20 +18819.58066 + 30 +0.0 + 11 +26740.0 + 21 +18836.901013 + 31 +0.0 + 0 +LINE + 5 +1B2C + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +18655.035679 + 30 +0.0 + 11 +26812.499911 + 21 +18668.026215 + 31 +0.0 + 0 +LINE + 5 +1B2D + 8 +0 + 62 + 0 + 10 +26787.499911 + 20 +18711.327485 + 30 +0.0 + 11 +26774.999911 + 21 +18732.97812 + 31 +0.0 + 0 +LINE + 5 +1B2E + 8 +0 + 62 + 0 + 10 +26749.999911 + 20 +18776.27939 + 30 +0.0 + 11 +26740.0 + 21 +18793.599743 + 31 +0.0 + 0 +LINE + 5 +1B2F + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +18611.734409 + 30 +0.0 + 11 +26812.499911 + 21 +18624.724944 + 31 +0.0 + 0 +LINE + 5 +1B30 + 8 +0 + 62 + 0 + 10 +26787.499911 + 20 +18668.026215 + 30 +0.0 + 11 +26774.999911 + 21 +18689.67685 + 31 +0.0 + 0 +LINE + 5 +1B31 + 8 +0 + 62 + 0 + 10 +26749.999911 + 20 +18732.97812 + 30 +0.0 + 11 +26740.0 + 21 +18750.298473 + 31 +0.0 + 0 +LINE + 5 +1B32 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +18568.433139 + 30 +0.0 + 11 +26812.499911 + 21 +18581.423674 + 31 +0.0 + 0 +LINE + 5 +1B33 + 8 +0 + 62 + 0 + 10 +26787.499911 + 20 +18624.724944 + 30 +0.0 + 11 +26774.999911 + 21 +18646.37558 + 31 +0.0 + 0 +LINE + 5 +1B34 + 8 +0 + 62 + 0 + 10 +26749.999911 + 20 +18689.67685 + 30 +0.0 + 11 +26740.0 + 21 +18706.997203 + 31 +0.0 + 0 +LINE + 5 +1B35 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +18525.131869 + 30 +0.0 + 11 +26812.499911 + 21 +18538.122404 + 31 +0.0 + 0 +LINE + 5 +1B36 + 8 +0 + 62 + 0 + 10 +26787.499911 + 20 +18581.423674 + 30 +0.0 + 11 +26774.999911 + 21 +18603.074309 + 31 +0.0 + 0 +LINE + 5 +1B37 + 8 +0 + 62 + 0 + 10 +26749.999911 + 20 +18646.37558 + 30 +0.0 + 11 +26740.0 + 21 +18663.695933 + 31 +0.0 + 0 +LINE + 5 +1B38 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +18481.830599 + 30 +0.0 + 11 +26812.499911 + 21 +18494.821134 + 31 +0.0 + 0 +LINE + 5 +1B39 + 8 +0 + 62 + 0 + 10 +26787.499911 + 20 +18538.122404 + 30 +0.0 + 11 +26774.999911 + 21 +18559.773039 + 31 +0.0 + 0 +LINE + 5 +1B3A + 8 +0 + 62 + 0 + 10 +26749.999911 + 20 +18603.074309 + 30 +0.0 + 11 +26740.0 + 21 +18620.394663 + 31 +0.0 + 0 +LINE + 5 +1B3B + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +18438.529329 + 30 +0.0 + 11 +26812.499911 + 21 +18451.519864 + 31 +0.0 + 0 +LINE + 5 +1B3C + 8 +0 + 62 + 0 + 10 +26787.499911 + 20 +18494.821134 + 30 +0.0 + 11 +26774.999911 + 21 +18516.471769 + 31 +0.0 + 0 +LINE + 5 +1B3D + 8 +0 + 62 + 0 + 10 +26749.999911 + 20 +18559.773039 + 30 +0.0 + 11 +26740.0 + 21 +18577.093393 + 31 +0.0 + 0 +LINE + 5 +1B3E + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +18395.228059 + 30 +0.0 + 11 +26812.499911 + 21 +18408.218594 + 31 +0.0 + 0 +LINE + 5 +1B3F + 8 +0 + 62 + 0 + 10 +26787.499911 + 20 +18451.519864 + 30 +0.0 + 11 +26774.999911 + 21 +18473.170499 + 31 +0.0 + 0 +LINE + 5 +1B40 + 8 +0 + 62 + 0 + 10 +26749.999911 + 20 +18516.471769 + 30 +0.0 + 11 +26740.0 + 21 +18533.792123 + 31 +0.0 + 0 +LINE + 5 +1B41 + 8 +0 + 62 + 0 + 10 +26813.173866 + 20 +18363.75 + 30 +0.0 + 11 +26812.499911 + 21 +18364.917324 + 31 +0.0 + 0 +LINE + 5 +1B42 + 8 +0 + 62 + 0 + 10 +26787.499911 + 20 +18408.218594 + 30 +0.0 + 11 +26774.999911 + 21 +18429.869229 + 31 +0.0 + 0 +LINE + 5 +1B43 + 8 +0 + 62 + 0 + 10 +26749.999911 + 20 +18473.170499 + 30 +0.0 + 11 +26740.0 + 21 +18490.490853 + 31 +0.0 + 0 +LINE + 5 +1B44 + 8 +0 + 62 + 0 + 10 +26787.499911 + 20 +18364.917324 + 30 +0.0 + 11 +26774.999911 + 21 +18386.567959 + 31 +0.0 + 0 +LINE + 5 +1B45 + 8 +0 + 62 + 0 + 10 +26749.999911 + 20 +18429.869229 + 30 +0.0 + 11 +26740.0 + 21 +18447.189583 + 31 +0.0 + 0 +LINE + 5 +1B46 + 8 +0 + 62 + 0 + 10 +26749.999911 + 20 +18386.567959 + 30 +0.0 + 11 +26740.0 + 21 +18403.888313 + 31 +0.0 + 0 +LINE + 5 +1B47 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +18914.843299 + 30 +0.0 + 11 +26812.49991 + 21 +18927.833835 + 31 +0.0 + 0 +LINE + 5 +1B48 + 8 +0 + 62 + 0 + 10 +26787.49991 + 20 +18971.135106 + 30 +0.0 + 11 +26774.99991 + 21 +18992.785741 + 31 +0.0 + 0 +LINE + 5 +1B49 + 8 +0 + 62 + 0 + 10 +26749.99991 + 20 +19036.087011 + 30 +0.0 + 11 +26740.0 + 21 +19053.407363 + 31 +0.0 + 0 +LINE + 5 +1B4A + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +18958.144569 + 30 +0.0 + 11 +26812.49991 + 21 +18971.135106 + 31 +0.0 + 0 +LINE + 5 +1B4B + 8 +0 + 62 + 0 + 10 +26787.49991 + 20 +19014.436376 + 30 +0.0 + 11 +26774.99991 + 21 +19036.087011 + 31 +0.0 + 0 +LINE + 5 +1B4C + 8 +0 + 62 + 0 + 10 +26749.99991 + 20 +19079.388281 + 30 +0.0 + 11 +26740.0 + 21 +19096.708633 + 31 +0.0 + 0 +LINE + 5 +1B4D + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +19001.445839 + 30 +0.0 + 11 +26812.49991 + 21 +19014.436376 + 31 +0.0 + 0 +LINE + 5 +1B4E + 8 +0 + 62 + 0 + 10 +26787.49991 + 20 +19057.737646 + 30 +0.0 + 11 +26774.99991 + 21 +19079.388281 + 31 +0.0 + 0 +LINE + 5 +1B4F + 8 +0 + 62 + 0 + 10 +26749.99991 + 20 +19122.689551 + 30 +0.0 + 11 +26740.0 + 21 +19140.009903 + 31 +0.0 + 0 +LINE + 5 +1B50 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +19044.747109 + 30 +0.0 + 11 +26812.49991 + 21 +19057.737646 + 31 +0.0 + 0 +LINE + 5 +1B51 + 8 +0 + 62 + 0 + 10 +26787.49991 + 20 +19101.038916 + 30 +0.0 + 11 +26774.99991 + 21 +19122.689551 + 31 +0.0 + 0 +LINE + 5 +1B52 + 8 +0 + 62 + 0 + 10 +26749.99991 + 20 +19165.990821 + 30 +0.0 + 11 +26740.0 + 21 +19183.311173 + 31 +0.0 + 0 +LINE + 5 +1B53 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +19088.048379 + 30 +0.0 + 11 +26812.49991 + 21 +19101.038916 + 31 +0.0 + 0 +LINE + 5 +1B54 + 8 +0 + 62 + 0 + 10 +26787.49991 + 20 +19144.340186 + 30 +0.0 + 11 +26774.99991 + 21 +19165.990821 + 31 +0.0 + 0 +LINE + 5 +1B55 + 8 +0 + 62 + 0 + 10 +26749.99991 + 20 +19209.292091 + 30 +0.0 + 11 +26740.0 + 21 +19226.612443 + 31 +0.0 + 0 +LINE + 5 +1B56 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +19131.349649 + 30 +0.0 + 11 +26812.49991 + 21 +19144.340186 + 31 +0.0 + 0 +LINE + 5 +1B57 + 8 +0 + 62 + 0 + 10 +26787.49991 + 20 +19187.641456 + 30 +0.0 + 11 +26774.99991 + 21 +19209.292091 + 31 +0.0 + 0 +LINE + 5 +1B58 + 8 +0 + 62 + 0 + 10 +26749.99991 + 20 +19252.593362 + 30 +0.0 + 11 +26740.0 + 21 +19269.913713 + 31 +0.0 + 0 +LINE + 5 +1B59 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +19174.650919 + 30 +0.0 + 11 +26812.49991 + 21 +19187.641456 + 31 +0.0 + 0 +LINE + 5 +1B5A + 8 +0 + 62 + 0 + 10 +26787.49991 + 20 +19230.942726 + 30 +0.0 + 11 +26774.99991 + 21 +19252.593362 + 31 +0.0 + 0 +LINE + 5 +1B5B + 8 +0 + 62 + 0 + 10 +26749.99991 + 20 +19295.894632 + 30 +0.0 + 11 +26740.0 + 21 +19313.214983 + 31 +0.0 + 0 +LINE + 5 +1B5C + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +19217.952189 + 30 +0.0 + 11 +26812.49991 + 21 +19230.942726 + 31 +0.0 + 0 +LINE + 5 +1B5D + 8 +0 + 62 + 0 + 10 +26787.49991 + 20 +19274.243997 + 30 +0.0 + 11 +26774.99991 + 21 +19295.894632 + 31 +0.0 + 0 +LINE + 5 +1B5E + 8 +0 + 62 + 0 + 10 +26749.99991 + 20 +19339.195902 + 30 +0.0 + 11 +26740.0 + 21 +19356.516253 + 31 +0.0 + 0 +LINE + 5 +1B5F + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +19261.253459 + 30 +0.0 + 11 +26812.49991 + 21 +19274.243997 + 31 +0.0 + 0 +LINE + 5 +1B60 + 8 +0 + 62 + 0 + 10 +26787.49991 + 20 +19317.545267 + 30 +0.0 + 11 +26774.99991 + 21 +19339.195902 + 31 +0.0 + 0 +LINE + 5 +1B61 + 8 +0 + 62 + 0 + 10 +26749.99991 + 20 +19382.497172 + 30 +0.0 + 11 +26740.0 + 21 +19399.817523 + 31 +0.0 + 0 +LINE + 5 +1B62 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +19304.554729 + 30 +0.0 + 11 +26812.499909 + 21 +19317.545267 + 31 +0.0 + 0 +LINE + 5 +1B63 + 8 +0 + 62 + 0 + 10 +26787.499909 + 20 +19360.846537 + 30 +0.0 + 11 +26774.999909 + 21 +19382.497172 + 31 +0.0 + 0 +LINE + 5 +1B64 + 8 +0 + 62 + 0 + 10 +26749.999909 + 20 +19425.798442 + 30 +0.0 + 11 +26740.0 + 21 +19443.118793 + 31 +0.0 + 0 +LINE + 5 +1B65 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +19347.855999 + 30 +0.0 + 11 +26812.499909 + 21 +19360.846537 + 31 +0.0 + 0 +LINE + 5 +1B66 + 8 +0 + 62 + 0 + 10 +26787.499909 + 20 +19404.147807 + 30 +0.0 + 11 +26774.999909 + 21 +19425.798442 + 31 +0.0 + 0 +LINE + 5 +1B67 + 8 +0 + 62 + 0 + 10 +26749.999909 + 20 +19469.099712 + 30 +0.0 + 11 +26740.0 + 21 +19486.420063 + 31 +0.0 + 0 +LINE + 5 +1B68 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +19391.157269 + 30 +0.0 + 11 +26812.499909 + 21 +19404.147807 + 31 +0.0 + 0 +LINE + 5 +1B69 + 8 +0 + 62 + 0 + 10 +26787.499909 + 20 +19447.449077 + 30 +0.0 + 11 +26774.999909 + 21 +19469.099712 + 31 +0.0 + 0 +LINE + 5 +1B6A + 8 +0 + 62 + 0 + 10 +26749.999909 + 20 +19512.400982 + 30 +0.0 + 11 +26740.0 + 21 +19529.721333 + 31 +0.0 + 0 +LINE + 5 +1B6B + 8 +0 + 62 + 0 + 10 +25247.388666 + 20 +22115.0 + 30 +0.0 + 11 +25238.75 + 21 +22129.962608 + 31 +0.0 + 0 +LINE + 5 +1B6C + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +19434.458539 + 30 +0.0 + 11 +26812.499909 + 21 +19447.449077 + 31 +0.0 + 0 +LINE + 5 +1B6D + 8 +0 + 62 + 0 + 10 +26787.499909 + 20 +19490.750347 + 30 +0.0 + 11 +26774.999909 + 21 +19512.400982 + 31 +0.0 + 0 +LINE + 5 +1B6E + 8 +0 + 62 + 0 + 10 +26749.999909 + 20 +19555.702253 + 30 +0.0 + 11 +26740.0 + 21 +19573.022603 + 31 +0.0 + 0 +LINE + 5 +1B6F + 8 +0 + 62 + 0 + 10 +25249.999909 + 20 +22153.778464 + 30 +0.0 + 11 +25238.75 + 21 +22173.263878 + 31 +0.0 + 0 +LINE + 5 +1B70 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +19477.759809 + 30 +0.0 + 11 +26812.499909 + 21 +19490.750347 + 31 +0.0 + 0 +LINE + 5 +1B71 + 8 +0 + 62 + 0 + 10 +26787.499909 + 20 +19534.051617 + 30 +0.0 + 11 +26774.999909 + 21 +19555.702253 + 31 +0.0 + 0 +LINE + 5 +1B72 + 8 +0 + 62 + 0 + 10 +26749.999909 + 20 +19599.003523 + 30 +0.0 + 11 +26740.0 + 21 +19616.323873 + 31 +0.0 + 0 +LINE + 5 +1B73 + 8 +0 + 62 + 0 + 10 +25287.499909 + 20 +22132.127829 + 30 +0.0 + 11 +25274.999909 + 21 +22153.778464 + 31 +0.0 + 0 +LINE + 5 +1B74 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +19521.061079 + 30 +0.0 + 11 +26812.499909 + 21 +19534.051617 + 31 +0.0 + 0 +LINE + 5 +1B75 + 8 +0 + 62 + 0 + 10 +26787.499909 + 20 +19577.352888 + 30 +0.0 + 11 +26774.999909 + 21 +19599.003523 + 31 +0.0 + 0 +LINE + 5 +1B76 + 8 +0 + 62 + 0 + 10 +26749.999909 + 20 +19642.304793 + 30 +0.0 + 11 +26740.0 + 21 +19659.625143 + 31 +0.0 + 0 +LINE + 5 +1B77 + 8 +0 + 62 + 0 + 10 +25322.388666 + 20 +22115.0 + 30 +0.0 + 11 +25312.499909 + 21 +22132.127829 + 31 +0.0 + 0 +LINE + 5 +1B78 + 8 +0 + 62 + 0 + 10 +25287.499909 + 20 +22175.429099 + 30 +0.0 + 11 +25276.200644 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1B79 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +19564.362349 + 30 +0.0 + 11 +26812.499909 + 21 +19577.352888 + 31 +0.0 + 0 +LINE + 5 +1B7A + 8 +0 + 62 + 0 + 10 +26787.499909 + 20 +19620.654158 + 30 +0.0 + 11 +26774.999909 + 21 +19642.304793 + 31 +0.0 + 0 +LINE + 5 +1B7B + 8 +0 + 62 + 0 + 10 +26749.999909 + 20 +19685.606063 + 30 +0.0 + 11 +26740.0 + 21 +19702.926413 + 31 +0.0 + 0 +LINE + 5 +1B7C + 8 +0 + 62 + 0 + 10 +25324.999909 + 20 +22153.778464 + 30 +0.0 + 11 +25312.499909 + 21 +22175.429099 + 31 +0.0 + 0 +LINE + 5 +1B7D + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +19607.663619 + 30 +0.0 + 11 +26812.499909 + 21 +19620.654158 + 31 +0.0 + 0 +LINE + 5 +1B7E + 8 +0 + 62 + 0 + 10 +26787.499909 + 20 +19663.955428 + 30 +0.0 + 11 +26774.999909 + 21 +19685.606063 + 31 +0.0 + 0 +LINE + 5 +1B7F + 8 +0 + 62 + 0 + 10 +26749.999909 + 20 +19728.907333 + 30 +0.0 + 11 +26740.0 + 21 +19746.227683 + 31 +0.0 + 0 +LINE + 5 +1B80 + 8 +0 + 62 + 0 + 10 +25362.499909 + 20 +22132.127829 + 30 +0.0 + 11 +25349.999909 + 21 +22153.778464 + 31 +0.0 + 0 +LINE + 5 +1B81 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +19650.964889 + 30 +0.0 + 11 +26812.499909 + 21 +19663.955428 + 31 +0.0 + 0 +LINE + 5 +1B82 + 8 +0 + 62 + 0 + 10 +26787.499909 + 20 +19707.256698 + 30 +0.0 + 11 +26774.999909 + 21 +19728.907333 + 31 +0.0 + 0 +LINE + 5 +1B83 + 8 +0 + 62 + 0 + 10 +26749.999909 + 20 +19772.208603 + 30 +0.0 + 11 +26740.0 + 21 +19789.528953 + 31 +0.0 + 0 +LINE + 5 +1B84 + 8 +0 + 62 + 0 + 10 +25397.388665 + 20 +22115.0 + 30 +0.0 + 11 +25387.499909 + 21 +22132.127829 + 31 +0.0 + 0 +LINE + 5 +1B85 + 8 +0 + 62 + 0 + 10 +25362.499909 + 20 +22175.429099 + 30 +0.0 + 11 +25351.200644 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1B86 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +19694.266159 + 30 +0.0 + 11 +26812.499909 + 21 +19707.256698 + 31 +0.0 + 0 +LINE + 5 +1B87 + 8 +0 + 62 + 0 + 10 +26787.499909 + 20 +19750.557968 + 30 +0.0 + 11 +26774.999909 + 21 +19772.208603 + 31 +0.0 + 0 +LINE + 5 +1B88 + 8 +0 + 62 + 0 + 10 +26749.999909 + 20 +19815.509873 + 30 +0.0 + 11 +26740.0 + 21 +19832.830223 + 31 +0.0 + 0 +LINE + 5 +1B89 + 8 +0 + 62 + 0 + 10 +25399.999909 + 20 +22153.778464 + 30 +0.0 + 11 +25387.499909 + 21 +22175.429099 + 31 +0.0 + 0 +LINE + 5 +1B8A + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +19737.567429 + 30 +0.0 + 11 +26812.499909 + 21 +19750.557968 + 31 +0.0 + 0 +LINE + 5 +1B8B + 8 +0 + 62 + 0 + 10 +26787.499909 + 20 +19793.859238 + 30 +0.0 + 11 +26774.999909 + 21 +19815.509873 + 31 +0.0 + 0 +LINE + 5 +1B8C + 8 +0 + 62 + 0 + 10 +26749.999909 + 20 +19858.811144 + 30 +0.0 + 11 +26740.0 + 21 +19876.131493 + 31 +0.0 + 0 +LINE + 5 +1B8D + 8 +0 + 62 + 0 + 10 +25437.499909 + 20 +22132.127829 + 30 +0.0 + 11 +25424.999909 + 21 +22153.778464 + 31 +0.0 + 0 +LINE + 5 +1B8E + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +19780.868699 + 30 +0.0 + 11 +26812.499909 + 21 +19793.859238 + 31 +0.0 + 0 +LINE + 5 +1B8F + 8 +0 + 62 + 0 + 10 +26787.499909 + 20 +19837.160508 + 30 +0.0 + 11 +26774.999909 + 21 +19858.811144 + 31 +0.0 + 0 +LINE + 5 +1B90 + 8 +0 + 62 + 0 + 10 +26749.999909 + 20 +19902.112414 + 30 +0.0 + 11 +26740.0 + 21 +19919.432763 + 31 +0.0 + 0 +LINE + 5 +1B91 + 8 +0 + 62 + 0 + 10 +25472.388665 + 20 +22115.0 + 30 +0.0 + 11 +25462.499909 + 21 +22132.127829 + 31 +0.0 + 0 +LINE + 5 +1B92 + 8 +0 + 62 + 0 + 10 +25437.499909 + 20 +22175.429099 + 30 +0.0 + 11 +25426.200643 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1B93 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +19824.169969 + 30 +0.0 + 11 +26812.499908 + 21 +19837.160508 + 31 +0.0 + 0 +LINE + 5 +1B94 + 8 +0 + 62 + 0 + 10 +26787.499908 + 20 +19880.461779 + 30 +0.0 + 11 +26774.999908 + 21 +19902.112414 + 31 +0.0 + 0 +LINE + 5 +1B95 + 8 +0 + 62 + 0 + 10 +26749.999908 + 20 +19945.413684 + 30 +0.0 + 11 +26740.0 + 21 +19962.734033 + 31 +0.0 + 0 +LINE + 5 +1B96 + 8 +0 + 62 + 0 + 10 +25474.999908 + 20 +22153.778464 + 30 +0.0 + 11 +25462.499908 + 21 +22175.429099 + 31 +0.0 + 0 +LINE + 5 +1B97 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +19867.471239 + 30 +0.0 + 11 +26812.499908 + 21 +19880.461779 + 31 +0.0 + 0 +LINE + 5 +1B98 + 8 +0 + 62 + 0 + 10 +26787.499908 + 20 +19923.763049 + 30 +0.0 + 11 +26774.999908 + 21 +19945.413684 + 31 +0.0 + 0 +LINE + 5 +1B99 + 8 +0 + 62 + 0 + 10 +26749.999908 + 20 +19988.714954 + 30 +0.0 + 11 +26740.0 + 21 +20006.035303 + 31 +0.0 + 0 +LINE + 5 +1B9A + 8 +0 + 62 + 0 + 10 +25512.499908 + 20 +22132.127828 + 30 +0.0 + 11 +25499.999908 + 21 +22153.778464 + 31 +0.0 + 0 +LINE + 5 +1B9B + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +19910.772509 + 30 +0.0 + 11 +26812.499908 + 21 +19923.763049 + 31 +0.0 + 0 +LINE + 5 +1B9C + 8 +0 + 62 + 0 + 10 +26787.499908 + 20 +19967.064319 + 30 +0.0 + 11 +26774.999908 + 21 +19988.714954 + 31 +0.0 + 0 +LINE + 5 +1B9D + 8 +0 + 62 + 0 + 10 +26749.999908 + 20 +20032.016224 + 30 +0.0 + 11 +26740.0 + 21 +20049.336573 + 31 +0.0 + 0 +LINE + 5 +1B9E + 8 +0 + 62 + 0 + 10 +25547.388665 + 20 +22115.0 + 30 +0.0 + 11 +25537.499908 + 21 +22132.127828 + 31 +0.0 + 0 +LINE + 5 +1B9F + 8 +0 + 62 + 0 + 10 +25512.499908 + 20 +22175.429099 + 30 +0.0 + 11 +25501.200643 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1BA0 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +19954.073779 + 30 +0.0 + 11 +26812.499908 + 21 +19967.064319 + 31 +0.0 + 0 +LINE + 5 +1BA1 + 8 +0 + 62 + 0 + 10 +26787.499908 + 20 +20010.365589 + 30 +0.0 + 11 +26774.999908 + 21 +20032.016224 + 31 +0.0 + 0 +LINE + 5 +1BA2 + 8 +0 + 62 + 0 + 10 +26749.999908 + 20 +20075.317494 + 30 +0.0 + 11 +26740.0 + 21 +20092.637843 + 31 +0.0 + 0 +LINE + 5 +1BA3 + 8 +0 + 62 + 0 + 10 +25549.999908 + 20 +22153.778463 + 30 +0.0 + 11 +25537.499908 + 21 +22175.429099 + 31 +0.0 + 0 +LINE + 5 +1BA4 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +19997.375049 + 30 +0.0 + 11 +26812.499908 + 21 +20010.365589 + 31 +0.0 + 0 +LINE + 5 +1BA5 + 8 +0 + 62 + 0 + 10 +26787.499908 + 20 +20053.666859 + 30 +0.0 + 11 +26774.999908 + 21 +20075.317494 + 31 +0.0 + 0 +LINE + 5 +1BA6 + 8 +0 + 62 + 0 + 10 +26749.999908 + 20 +20118.618764 + 30 +0.0 + 11 +26740.0 + 21 +20135.939113 + 31 +0.0 + 0 +LINE + 5 +1BA7 + 8 +0 + 62 + 0 + 10 +25587.499908 + 20 +22132.127828 + 30 +0.0 + 11 +25574.999908 + 21 +22153.778463 + 31 +0.0 + 0 +LINE + 5 +1BA8 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +20040.676319 + 30 +0.0 + 11 +26812.499908 + 21 +20053.666859 + 31 +0.0 + 0 +LINE + 5 +1BA9 + 8 +0 + 62 + 0 + 10 +26787.499908 + 20 +20096.968129 + 30 +0.0 + 11 +26774.999908 + 21 +20118.618764 + 31 +0.0 + 0 +LINE + 5 +1BAA + 8 +0 + 62 + 0 + 10 +26749.999908 + 20 +20161.920035 + 30 +0.0 + 11 +26740.0 + 21 +20179.240383 + 31 +0.0 + 0 +LINE + 5 +1BAB + 8 +0 + 62 + 0 + 10 +25622.388664 + 20 +22115.0 + 30 +0.0 + 11 +25612.499908 + 21 +22132.127828 + 31 +0.0 + 0 +LINE + 5 +1BAC + 8 +0 + 62 + 0 + 10 +25587.499908 + 20 +22175.429098 + 30 +0.0 + 11 +25576.200643 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1BAD + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +20083.977589 + 30 +0.0 + 11 +26812.499908 + 21 +20096.968129 + 31 +0.0 + 0 +LINE + 5 +1BAE + 8 +0 + 62 + 0 + 10 +26787.499908 + 20 +20140.269399 + 30 +0.0 + 11 +26774.999908 + 21 +20161.920035 + 31 +0.0 + 0 +LINE + 5 +1BAF + 8 +0 + 62 + 0 + 10 +26749.999908 + 20 +20205.221305 + 30 +0.0 + 11 +26740.0 + 21 +20222.541653 + 31 +0.0 + 0 +LINE + 5 +1BB0 + 8 +0 + 62 + 0 + 10 +25624.999908 + 20 +22153.778463 + 30 +0.0 + 11 +25612.499908 + 21 +22175.429098 + 31 +0.0 + 0 +LINE + 5 +1BB1 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +20127.278859 + 30 +0.0 + 11 +26812.499908 + 21 +20140.269399 + 31 +0.0 + 0 +LINE + 5 +1BB2 + 8 +0 + 62 + 0 + 10 +26787.499908 + 20 +20183.57067 + 30 +0.0 + 11 +26774.999908 + 21 +20205.221305 + 31 +0.0 + 0 +LINE + 5 +1BB3 + 8 +0 + 62 + 0 + 10 +26749.999908 + 20 +20248.522575 + 30 +0.0 + 11 +26740.0 + 21 +20265.842923 + 31 +0.0 + 0 +LINE + 5 +1BB4 + 8 +0 + 62 + 0 + 10 +25662.499908 + 20 +22132.127828 + 30 +0.0 + 11 +25649.999908 + 21 +22153.778463 + 31 +0.0 + 0 +LINE + 5 +1BB5 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +20170.580129 + 30 +0.0 + 11 +26812.499908 + 21 +20183.57067 + 31 +0.0 + 0 +LINE + 5 +1BB6 + 8 +0 + 62 + 0 + 10 +26787.499908 + 20 +20226.87194 + 30 +0.0 + 11 +26774.999908 + 21 +20248.522575 + 31 +0.0 + 0 +LINE + 5 +1BB7 + 8 +0 + 62 + 0 + 10 +26749.999908 + 20 +20291.823845 + 30 +0.0 + 11 +26740.0 + 21 +20309.144193 + 31 +0.0 + 0 +LINE + 5 +1BB8 + 8 +0 + 62 + 0 + 10 +25697.388664 + 20 +22115.0 + 30 +0.0 + 11 +25687.499908 + 21 +22132.127828 + 31 +0.0 + 0 +LINE + 5 +1BB9 + 8 +0 + 62 + 0 + 10 +25662.499908 + 20 +22175.429098 + 30 +0.0 + 11 +25651.200642 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1BBA + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +20213.881399 + 30 +0.0 + 11 +26812.499908 + 21 +20226.87194 + 31 +0.0 + 0 +LINE + 5 +1BBB + 8 +0 + 62 + 0 + 10 +26787.499908 + 20 +20270.17321 + 30 +0.0 + 11 +26774.999908 + 21 +20291.823845 + 31 +0.0 + 0 +LINE + 5 +1BBC + 8 +0 + 62 + 0 + 10 +26749.999908 + 20 +20335.125115 + 30 +0.0 + 11 +26740.0 + 21 +20352.445463 + 31 +0.0 + 0 +LINE + 5 +1BBD + 8 +0 + 62 + 0 + 10 +25699.999908 + 20 +22153.778463 + 30 +0.0 + 11 +25687.499908 + 21 +22175.429098 + 31 +0.0 + 0 +LINE + 5 +1BBE + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +20257.182669 + 30 +0.0 + 11 +26812.499908 + 21 +20270.17321 + 31 +0.0 + 0 +LINE + 5 +1BBF + 8 +0 + 62 + 0 + 10 +26787.499908 + 20 +20313.47448 + 30 +0.0 + 11 +26774.999908 + 21 +20335.125115 + 31 +0.0 + 0 +LINE + 5 +1BC0 + 8 +0 + 62 + 0 + 10 +26749.999908 + 20 +20378.426385 + 30 +0.0 + 11 +26740.0 + 21 +20395.746733 + 31 +0.0 + 0 +LINE + 5 +1BC1 + 8 +0 + 62 + 0 + 10 +25737.499908 + 20 +22132.127828 + 30 +0.0 + 11 +25724.999908 + 21 +22153.778463 + 31 +0.0 + 0 +LINE + 5 +1BC2 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +20300.483939 + 30 +0.0 + 11 +26812.499908 + 21 +20313.47448 + 31 +0.0 + 0 +LINE + 5 +1BC3 + 8 +0 + 62 + 0 + 10 +26787.499908 + 20 +20356.77575 + 30 +0.0 + 11 +26774.999908 + 21 +20378.426385 + 31 +0.0 + 0 +LINE + 5 +1BC4 + 8 +0 + 62 + 0 + 10 +26749.999908 + 20 +20421.727655 + 30 +0.0 + 11 +26740.0 + 21 +20439.048003 + 31 +0.0 + 0 +LINE + 5 +1BC5 + 8 +0 + 62 + 0 + 10 +25772.388664 + 20 +22115.0 + 30 +0.0 + 11 +25762.499908 + 21 +22132.127828 + 31 +0.0 + 0 +LINE + 5 +1BC6 + 8 +0 + 62 + 0 + 10 +25737.499908 + 20 +22175.429098 + 30 +0.0 + 11 +25726.200642 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1BC7 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +20343.785209 + 30 +0.0 + 11 +26812.499907 + 21 +20356.77575 + 31 +0.0 + 0 +LINE + 5 +1BC8 + 8 +0 + 62 + 0 + 10 +26787.499907 + 20 +20400.07702 + 30 +0.0 + 11 +26774.999907 + 21 +20421.727655 + 31 +0.0 + 0 +LINE + 5 +1BC9 + 8 +0 + 62 + 0 + 10 +26749.999907 + 20 +20465.028926 + 30 +0.0 + 11 +26740.0 + 21 +20482.349273 + 31 +0.0 + 0 +LINE + 5 +1BCA + 8 +0 + 62 + 0 + 10 +25774.999907 + 20 +22153.778463 + 30 +0.0 + 11 +25762.499907 + 21 +22175.429098 + 31 +0.0 + 0 +LINE + 5 +1BCB + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +20387.086479 + 30 +0.0 + 11 +26812.499907 + 21 +20400.07702 + 31 +0.0 + 0 +LINE + 5 +1BCC + 8 +0 + 62 + 0 + 10 +26787.499907 + 20 +20443.37829 + 30 +0.0 + 11 +26774.999907 + 21 +20465.028926 + 31 +0.0 + 0 +LINE + 5 +1BCD + 8 +0 + 62 + 0 + 10 +26749.999907 + 20 +20508.330196 + 30 +0.0 + 11 +26740.0 + 21 +20525.650543 + 31 +0.0 + 0 +LINE + 5 +1BCE + 8 +0 + 62 + 0 + 10 +25812.499907 + 20 +22132.127828 + 30 +0.0 + 11 +25799.999907 + 21 +22153.778463 + 31 +0.0 + 0 +LINE + 5 +1BCF + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +20430.387749 + 30 +0.0 + 11 +26812.499907 + 21 +20443.37829 + 31 +0.0 + 0 +LINE + 5 +1BD0 + 8 +0 + 62 + 0 + 10 +26787.499907 + 20 +20486.679561 + 30 +0.0 + 11 +26774.999907 + 21 +20508.330196 + 31 +0.0 + 0 +LINE + 5 +1BD1 + 8 +0 + 62 + 0 + 10 +26749.999907 + 20 +20551.631466 + 30 +0.0 + 11 +26740.0 + 21 +20568.951813 + 31 +0.0 + 0 +LINE + 5 +1BD2 + 8 +0 + 62 + 0 + 10 +25847.388663 + 20 +22115.0 + 30 +0.0 + 11 +25837.499907 + 21 +22132.127828 + 31 +0.0 + 0 +LINE + 5 +1BD3 + 8 +0 + 62 + 0 + 10 +25812.499907 + 20 +22175.429098 + 30 +0.0 + 11 +25801.200642 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1BD4 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +20473.689019 + 30 +0.0 + 11 +26812.499907 + 21 +20486.679561 + 31 +0.0 + 0 +LINE + 5 +1BD5 + 8 +0 + 62 + 0 + 10 +26787.499907 + 20 +20529.980831 + 30 +0.0 + 11 +26774.999907 + 21 +20551.631466 + 31 +0.0 + 0 +LINE + 5 +1BD6 + 8 +0 + 62 + 0 + 10 +26749.999907 + 20 +20594.932736 + 30 +0.0 + 11 +26740.0 + 21 +20612.253083 + 31 +0.0 + 0 +LINE + 5 +1BD7 + 8 +0 + 62 + 0 + 10 +25849.999907 + 20 +22153.778463 + 30 +0.0 + 11 +25837.499907 + 21 +22175.429098 + 31 +0.0 + 0 +LINE + 5 +1BD8 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +20516.990289 + 30 +0.0 + 11 +26812.499907 + 21 +20529.980831 + 31 +0.0 + 0 +LINE + 5 +1BD9 + 8 +0 + 62 + 0 + 10 +26787.499907 + 20 +20573.282101 + 30 +0.0 + 11 +26774.999907 + 21 +20594.932736 + 31 +0.0 + 0 +LINE + 5 +1BDA + 8 +0 + 62 + 0 + 10 +26749.999907 + 20 +20638.234006 + 30 +0.0 + 11 +26740.0 + 21 +20655.554353 + 31 +0.0 + 0 +LINE + 5 +1BDB + 8 +0 + 62 + 0 + 10 +25887.499907 + 20 +22132.127828 + 30 +0.0 + 11 +25874.999907 + 21 +22153.778463 + 31 +0.0 + 0 +LINE + 5 +1BDC + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +20560.291559 + 30 +0.0 + 11 +26812.499907 + 21 +20573.282101 + 31 +0.0 + 0 +LINE + 5 +1BDD + 8 +0 + 62 + 0 + 10 +26787.499907 + 20 +20616.583371 + 30 +0.0 + 11 +26774.999907 + 21 +20638.234006 + 31 +0.0 + 0 +LINE + 5 +1BDE + 8 +0 + 62 + 0 + 10 +26749.999907 + 20 +20681.535276 + 30 +0.0 + 11 +26740.0 + 21 +20698.855623 + 31 +0.0 + 0 +LINE + 5 +1BDF + 8 +0 + 62 + 0 + 10 +25922.388663 + 20 +22115.0 + 30 +0.0 + 11 +25912.499907 + 21 +22132.127828 + 31 +0.0 + 0 +LINE + 5 +1BE0 + 8 +0 + 62 + 0 + 10 +25887.499907 + 20 +22175.429098 + 30 +0.0 + 11 +25876.200641 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1BE1 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +20603.592829 + 30 +0.0 + 11 +26812.499907 + 21 +20616.583371 + 31 +0.0 + 0 +LINE + 5 +1BE2 + 8 +0 + 62 + 0 + 10 +26787.499907 + 20 +20659.884641 + 30 +0.0 + 11 +26774.999907 + 21 +20681.535276 + 31 +0.0 + 0 +LINE + 5 +1BE3 + 8 +0 + 62 + 0 + 10 +26749.999907 + 20 +20724.836546 + 30 +0.0 + 11 +26740.0 + 21 +20742.156893 + 31 +0.0 + 0 +LINE + 5 +1BE4 + 8 +0 + 62 + 0 + 10 +25924.999907 + 20 +22153.778463 + 30 +0.0 + 11 +25912.499907 + 21 +22175.429098 + 31 +0.0 + 0 +LINE + 5 +1BE5 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +20646.894099 + 30 +0.0 + 11 +26812.499907 + 21 +20659.884641 + 31 +0.0 + 0 +LINE + 5 +1BE6 + 8 +0 + 62 + 0 + 10 +26787.499907 + 20 +20703.185911 + 30 +0.0 + 11 +26774.999907 + 21 +20724.836546 + 31 +0.0 + 0 +LINE + 5 +1BE7 + 8 +0 + 62 + 0 + 10 +26749.999907 + 20 +20768.137817 + 30 +0.0 + 11 +26740.0 + 21 +20785.458163 + 31 +0.0 + 0 +LINE + 5 +1BE8 + 8 +0 + 62 + 0 + 10 +25962.499907 + 20 +22132.127828 + 30 +0.0 + 11 +25949.999907 + 21 +22153.778463 + 31 +0.0 + 0 +LINE + 5 +1BE9 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +20690.195369 + 30 +0.0 + 11 +26812.499907 + 21 +20703.185911 + 31 +0.0 + 0 +LINE + 5 +1BEA + 8 +0 + 62 + 0 + 10 +26787.499907 + 20 +20746.487181 + 30 +0.0 + 11 +26774.999907 + 21 +20768.137817 + 31 +0.0 + 0 +LINE + 5 +1BEB + 8 +0 + 62 + 0 + 10 +26749.999907 + 20 +20811.439087 + 30 +0.0 + 11 +26740.0 + 21 +20828.759433 + 31 +0.0 + 0 +LINE + 5 +1BEC + 8 +0 + 62 + 0 + 10 +25997.388663 + 20 +22115.0 + 30 +0.0 + 11 +25987.499907 + 21 +22132.127828 + 31 +0.0 + 0 +LINE + 5 +1BED + 8 +0 + 62 + 0 + 10 +25962.499907 + 20 +22175.429098 + 30 +0.0 + 11 +25951.200641 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1BEE + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +20733.496639 + 30 +0.0 + 11 +26812.499907 + 21 +20746.487181 + 31 +0.0 + 0 +LINE + 5 +1BEF + 8 +0 + 62 + 0 + 10 +26787.499907 + 20 +20789.788452 + 30 +0.0 + 11 +26774.999907 + 21 +20811.439087 + 31 +0.0 + 0 +LINE + 5 +1BF0 + 8 +0 + 62 + 0 + 10 +26749.999907 + 20 +20854.740357 + 30 +0.0 + 11 +26740.0 + 21 +20872.060703 + 31 +0.0 + 0 +LINE + 5 +1BF1 + 8 +0 + 62 + 0 + 10 +25999.999907 + 20 +22153.778463 + 30 +0.0 + 11 +25987.499907 + 21 +22175.429098 + 31 +0.0 + 0 +LINE + 5 +1BF2 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +20776.797909 + 30 +0.0 + 11 +26812.499907 + 21 +20789.788452 + 31 +0.0 + 0 +LINE + 5 +1BF3 + 8 +0 + 62 + 0 + 10 +26787.499907 + 20 +20833.089722 + 30 +0.0 + 11 +26774.999907 + 21 +20854.740357 + 31 +0.0 + 0 +LINE + 5 +1BF4 + 8 +0 + 62 + 0 + 10 +26749.999907 + 20 +20898.041627 + 30 +0.0 + 11 +26740.0 + 21 +20915.361973 + 31 +0.0 + 0 +LINE + 5 +1BF5 + 8 +0 + 62 + 0 + 10 +26037.499907 + 20 +22132.127827 + 30 +0.0 + 11 +26024.999907 + 21 +22153.778463 + 31 +0.0 + 0 +LINE + 5 +1BF6 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +20820.099179 + 30 +0.0 + 11 +26812.499907 + 21 +20833.089722 + 31 +0.0 + 0 +LINE + 5 +1BF7 + 8 +0 + 62 + 0 + 10 +26787.499907 + 20 +20876.390992 + 30 +0.0 + 11 +26774.999907 + 21 +20898.041627 + 31 +0.0 + 0 +LINE + 5 +1BF8 + 8 +0 + 62 + 0 + 10 +26749.999907 + 20 +20941.342897 + 30 +0.0 + 11 +26740.0 + 21 +20958.663243 + 31 +0.0 + 0 +LINE + 5 +1BF9 + 8 +0 + 62 + 0 + 10 +26072.388662 + 20 +22115.0 + 30 +0.0 + 11 +26062.499907 + 21 +22132.127827 + 31 +0.0 + 0 +LINE + 5 +1BFA + 8 +0 + 62 + 0 + 10 +26037.499907 + 20 +22175.429098 + 30 +0.0 + 11 +26026.200641 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1BFB + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +20863.400449 + 30 +0.0 + 11 +26812.499907 + 21 +20876.390992 + 31 +0.0 + 0 +LINE + 5 +1BFC + 8 +0 + 62 + 0 + 10 +26787.499907 + 20 +20919.692262 + 30 +0.0 + 11 +26774.999907 + 21 +20941.342897 + 31 +0.0 + 0 +LINE + 5 +1BFD + 8 +0 + 62 + 0 + 10 +26749.999907 + 20 +20984.644167 + 30 +0.0 + 11 +26740.0 + 21 +21001.964513 + 31 +0.0 + 0 +LINE + 5 +1BFE + 8 +0 + 62 + 0 + 10 +26074.999907 + 20 +22153.778462 + 30 +0.0 + 11 +26062.499907 + 21 +22175.429098 + 31 +0.0 + 0 +LINE + 5 +1BFF + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +20906.701719 + 30 +0.0 + 11 +26812.499906 + 21 +20919.692262 + 31 +0.0 + 0 +LINE + 5 +1C00 + 8 +0 + 62 + 0 + 10 +26787.499906 + 20 +20962.993532 + 30 +0.0 + 11 +26774.999906 + 21 +20984.644167 + 31 +0.0 + 0 +LINE + 5 +1C01 + 8 +0 + 62 + 0 + 10 +26749.999906 + 20 +21027.945437 + 30 +0.0 + 11 +26740.0 + 21 +21045.265783 + 31 +0.0 + 0 +LINE + 5 +1C02 + 8 +0 + 62 + 0 + 10 +26112.499906 + 20 +22132.127827 + 30 +0.0 + 11 +26099.999906 + 21 +22153.778462 + 31 +0.0 + 0 +LINE + 5 +1C03 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +20950.002989 + 30 +0.0 + 11 +26812.499906 + 21 +20962.993532 + 31 +0.0 + 0 +LINE + 5 +1C04 + 8 +0 + 62 + 0 + 10 +26787.499906 + 20 +21006.294802 + 30 +0.0 + 11 +26774.999906 + 21 +21027.945437 + 31 +0.0 + 0 +LINE + 5 +1C05 + 8 +0 + 62 + 0 + 10 +26749.999906 + 20 +21071.246708 + 30 +0.0 + 11 +26740.0 + 21 +21088.567053 + 31 +0.0 + 0 +LINE + 5 +1C06 + 8 +0 + 62 + 0 + 10 +26147.388662 + 20 +22115.0 + 30 +0.0 + 11 +26137.499906 + 21 +22132.127827 + 31 +0.0 + 0 +LINE + 5 +1C07 + 8 +0 + 62 + 0 + 10 +26112.499906 + 20 +22175.429097 + 30 +0.0 + 11 +26101.20064 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1C08 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +20993.304259 + 30 +0.0 + 11 +26812.499906 + 21 +21006.294802 + 31 +0.0 + 0 +LINE + 5 +1C09 + 8 +0 + 62 + 0 + 10 +26787.499906 + 20 +21049.596072 + 30 +0.0 + 11 +26774.999906 + 21 +21071.246708 + 31 +0.0 + 0 +LINE + 5 +1C0A + 8 +0 + 62 + 0 + 10 +26749.999906 + 20 +21114.547978 + 30 +0.0 + 11 +26740.0 + 21 +21131.868323 + 31 +0.0 + 0 +LINE + 5 +1C0B + 8 +0 + 62 + 0 + 10 +26149.999906 + 20 +22153.778462 + 30 +0.0 + 11 +26137.499906 + 21 +22175.429097 + 31 +0.0 + 0 +LINE + 5 +1C0C + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +21036.605529 + 30 +0.0 + 11 +26812.499906 + 21 +21049.596072 + 31 +0.0 + 0 +LINE + 5 +1C0D + 8 +0 + 62 + 0 + 10 +26787.499906 + 20 +21092.897343 + 30 +0.0 + 11 +26774.999906 + 21 +21114.547978 + 31 +0.0 + 0 +LINE + 5 +1C0E + 8 +0 + 62 + 0 + 10 +26749.999906 + 20 +21157.849248 + 30 +0.0 + 11 +26740.0 + 21 +21175.169593 + 31 +0.0 + 0 +LINE + 5 +1C0F + 8 +0 + 62 + 0 + 10 +26187.499906 + 20 +22132.127827 + 30 +0.0 + 11 +26174.999906 + 21 +22153.778462 + 31 +0.0 + 0 +LINE + 5 +1C10 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +21079.906799 + 30 +0.0 + 11 +26812.499906 + 21 +21092.897343 + 31 +0.0 + 0 +LINE + 5 +1C11 + 8 +0 + 62 + 0 + 10 +26787.499906 + 20 +21136.198613 + 30 +0.0 + 11 +26774.999906 + 21 +21157.849248 + 31 +0.0 + 0 +LINE + 5 +1C12 + 8 +0 + 62 + 0 + 10 +26749.999906 + 20 +21201.150518 + 30 +0.0 + 11 +26740.0 + 21 +21218.470863 + 31 +0.0 + 0 +LINE + 5 +1C13 + 8 +0 + 62 + 0 + 10 +26222.388662 + 20 +22115.0 + 30 +0.0 + 11 +26212.499906 + 21 +22132.127827 + 31 +0.0 + 0 +LINE + 5 +1C14 + 8 +0 + 62 + 0 + 10 +26187.499906 + 20 +22175.429097 + 30 +0.0 + 11 +26176.20064 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1C15 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +21123.208069 + 30 +0.0 + 11 +26812.499906 + 21 +21136.198613 + 31 +0.0 + 0 +LINE + 5 +1C16 + 8 +0 + 62 + 0 + 10 +26787.499906 + 20 +21179.499883 + 30 +0.0 + 11 +26774.999906 + 21 +21201.150518 + 31 +0.0 + 0 +LINE + 5 +1C17 + 8 +0 + 62 + 0 + 10 +26749.999906 + 20 +21244.451788 + 30 +0.0 + 11 +26740.0 + 21 +21261.772133 + 31 +0.0 + 0 +LINE + 5 +1C18 + 8 +0 + 62 + 0 + 10 +26224.999906 + 20 +22153.778462 + 30 +0.0 + 11 +26212.499906 + 21 +22175.429097 + 31 +0.0 + 0 +LINE + 5 +1C19 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +21166.509339 + 30 +0.0 + 11 +26812.499906 + 21 +21179.499883 + 31 +0.0 + 0 +LINE + 5 +1C1A + 8 +0 + 62 + 0 + 10 +26787.499906 + 20 +21222.801153 + 30 +0.0 + 11 +26774.999906 + 21 +21244.451788 + 31 +0.0 + 0 +LINE + 5 +1C1B + 8 +0 + 62 + 0 + 10 +26749.999906 + 20 +21287.753058 + 30 +0.0 + 11 +26740.0 + 21 +21305.073403 + 31 +0.0 + 0 +LINE + 5 +1C1C + 8 +0 + 62 + 0 + 10 +26262.499906 + 20 +22132.127827 + 30 +0.0 + 11 +26249.999906 + 21 +22153.778462 + 31 +0.0 + 0 +LINE + 5 +1C1D + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +21209.810609 + 30 +0.0 + 11 +26812.499906 + 21 +21222.801153 + 31 +0.0 + 0 +LINE + 5 +1C1E + 8 +0 + 62 + 0 + 10 +26787.499906 + 20 +21266.102423 + 30 +0.0 + 11 +26774.999906 + 21 +21287.753058 + 31 +0.0 + 0 +LINE + 5 +1C1F + 8 +0 + 62 + 0 + 10 +26749.999906 + 20 +21331.054328 + 30 +0.0 + 11 +26740.0 + 21 +21348.374673 + 31 +0.0 + 0 +LINE + 5 +1C20 + 8 +0 + 62 + 0 + 10 +26297.388661 + 20 +22115.0 + 30 +0.0 + 11 +26287.499906 + 21 +22132.127827 + 31 +0.0 + 0 +LINE + 5 +1C21 + 8 +0 + 62 + 0 + 10 +26262.499906 + 20 +22175.429097 + 30 +0.0 + 11 +26251.20064 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1C22 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +21253.111879 + 30 +0.0 + 11 +26812.499906 + 21 +21266.102423 + 31 +0.0 + 0 +LINE + 5 +1C23 + 8 +0 + 62 + 0 + 10 +26787.499906 + 20 +21309.403693 + 30 +0.0 + 11 +26774.999906 + 21 +21331.054328 + 31 +0.0 + 0 +LINE + 5 +1C24 + 8 +0 + 62 + 0 + 10 +26749.999906 + 20 +21374.355599 + 30 +0.0 + 11 +26740.0 + 21 +21391.675943 + 31 +0.0 + 0 +LINE + 5 +1C25 + 8 +0 + 62 + 0 + 10 +26299.999906 + 20 +22153.778462 + 30 +0.0 + 11 +26287.499906 + 21 +22175.429097 + 31 +0.0 + 0 +LINE + 5 +1C26 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +21296.413149 + 30 +0.0 + 11 +26812.499906 + 21 +21309.403693 + 31 +0.0 + 0 +LINE + 5 +1C27 + 8 +0 + 62 + 0 + 10 +26787.499906 + 20 +21352.704963 + 30 +0.0 + 11 +26774.999906 + 21 +21374.355599 + 31 +0.0 + 0 +LINE + 5 +1C28 + 8 +0 + 62 + 0 + 10 +26749.999906 + 20 +21417.656869 + 30 +0.0 + 11 +26740.0 + 21 +21434.977213 + 31 +0.0 + 0 +LINE + 5 +1C29 + 8 +0 + 62 + 0 + 10 +26337.499906 + 20 +22132.127827 + 30 +0.0 + 11 +26324.999906 + 21 +22153.778462 + 31 +0.0 + 0 +LINE + 5 +1C2A + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +21339.714419 + 30 +0.0 + 11 +26812.499906 + 21 +21352.704963 + 31 +0.0 + 0 +LINE + 5 +1C2B + 8 +0 + 62 + 0 + 10 +26787.499906 + 20 +21396.006234 + 30 +0.0 + 11 +26774.999906 + 21 +21417.656869 + 31 +0.0 + 0 +LINE + 5 +1C2C + 8 +0 + 62 + 0 + 10 +26749.999906 + 20 +21460.958139 + 30 +0.0 + 11 +26740.0 + 21 +21478.278483 + 31 +0.0 + 0 +LINE + 5 +1C2D + 8 +0 + 62 + 0 + 10 +26372.388661 + 20 +22115.0 + 30 +0.0 + 11 +26362.499906 + 21 +22132.127827 + 31 +0.0 + 0 +LINE + 5 +1C2E + 8 +0 + 62 + 0 + 10 +26337.499906 + 20 +22175.429097 + 30 +0.0 + 11 +26326.200639 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1C2F + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +21383.015689 + 30 +0.0 + 11 +26812.499906 + 21 +21396.006234 + 31 +0.0 + 0 +LINE + 5 +1C30 + 8 +0 + 62 + 0 + 10 +26787.499906 + 20 +21439.307504 + 30 +0.0 + 11 +26774.999906 + 21 +21460.958139 + 31 +0.0 + 0 +LINE + 5 +1C31 + 8 +0 + 62 + 0 + 10 +26749.999906 + 20 +21504.259409 + 30 +0.0 + 11 +26740.0 + 21 +21521.579753 + 31 +0.0 + 0 +LINE + 5 +1C32 + 8 +0 + 62 + 0 + 10 +26374.999906 + 20 +22153.778462 + 30 +0.0 + 11 +26362.499906 + 21 +22175.429097 + 31 +0.0 + 0 +LINE + 5 +1C33 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +21426.316959 + 30 +0.0 + 11 +26812.499905 + 21 +21439.307504 + 31 +0.0 + 0 +LINE + 5 +1C34 + 8 +0 + 62 + 0 + 10 +26787.499905 + 20 +21482.608774 + 30 +0.0 + 11 +26774.999905 + 21 +21504.259409 + 31 +0.0 + 0 +LINE + 5 +1C35 + 8 +0 + 62 + 0 + 10 +26749.999905 + 20 +21547.560679 + 30 +0.0 + 11 +26740.0 + 21 +21564.881023 + 31 +0.0 + 0 +LINE + 5 +1C36 + 8 +0 + 62 + 0 + 10 +26412.499905 + 20 +22132.127827 + 30 +0.0 + 11 +26399.999905 + 21 +22153.778462 + 31 +0.0 + 0 +LINE + 5 +1C37 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +21469.618229 + 30 +0.0 + 11 +26812.499905 + 21 +21482.608774 + 31 +0.0 + 0 +LINE + 5 +1C38 + 8 +0 + 62 + 0 + 10 +26787.499905 + 20 +21525.910044 + 30 +0.0 + 11 +26774.999905 + 21 +21547.560679 + 31 +0.0 + 0 +LINE + 5 +1C39 + 8 +0 + 62 + 0 + 10 +26749.999905 + 20 +21590.861949 + 30 +0.0 + 11 +26740.0 + 21 +21608.182293 + 31 +0.0 + 0 +LINE + 5 +1C3A + 8 +0 + 62 + 0 + 10 +26447.388661 + 20 +22115.0 + 30 +0.0 + 11 +26437.499905 + 21 +22132.127827 + 31 +0.0 + 0 +LINE + 5 +1C3B + 8 +0 + 62 + 0 + 10 +26412.499905 + 20 +22175.429097 + 30 +0.0 + 11 +26401.200639 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1C3C + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +21512.919499 + 30 +0.0 + 11 +26812.499905 + 21 +21525.910044 + 31 +0.0 + 0 +LINE + 5 +1C3D + 8 +0 + 62 + 0 + 10 +26787.499905 + 20 +21569.211314 + 30 +0.0 + 11 +26774.999905 + 21 +21590.861949 + 31 +0.0 + 0 +LINE + 5 +1C3E + 8 +0 + 62 + 0 + 10 +26749.999905 + 20 +21634.163219 + 30 +0.0 + 11 +26740.0 + 21 +21651.483563 + 31 +0.0 + 0 +LINE + 5 +1C3F + 8 +0 + 62 + 0 + 10 +26449.999905 + 20 +22153.778462 + 30 +0.0 + 11 +26437.499905 + 21 +22175.429097 + 31 +0.0 + 0 +LINE + 5 +1C40 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +21556.220769 + 30 +0.0 + 11 +26812.499905 + 21 +21569.211314 + 31 +0.0 + 0 +LINE + 5 +1C41 + 8 +0 + 62 + 0 + 10 +26787.499905 + 20 +21612.512584 + 30 +0.0 + 11 +26774.999905 + 21 +21634.163219 + 31 +0.0 + 0 +LINE + 5 +1C42 + 8 +0 + 62 + 0 + 10 +26749.999905 + 20 +21677.46449 + 30 +0.0 + 11 +26740.0 + 21 +21694.784833 + 31 +0.0 + 0 +LINE + 5 +1C43 + 8 +0 + 62 + 0 + 10 +26487.499905 + 20 +22132.127827 + 30 +0.0 + 11 +26474.999905 + 21 +22153.778462 + 31 +0.0 + 0 +LINE + 5 +1C44 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +21599.522039 + 30 +0.0 + 11 +26812.499905 + 21 +21612.512584 + 31 +0.0 + 0 +LINE + 5 +1C45 + 8 +0 + 62 + 0 + 10 +26787.499905 + 20 +21655.813854 + 30 +0.0 + 11 +26774.999905 + 21 +21677.46449 + 31 +0.0 + 0 +LINE + 5 +1C46 + 8 +0 + 62 + 0 + 10 +26749.999905 + 20 +21720.76576 + 30 +0.0 + 11 +26740.0 + 21 +21738.086103 + 31 +0.0 + 0 +LINE + 5 +1C47 + 8 +0 + 62 + 0 + 10 +26522.38866 + 20 +22115.0 + 30 +0.0 + 11 +26512.499905 + 21 +22132.127827 + 31 +0.0 + 0 +LINE + 5 +1C48 + 8 +0 + 62 + 0 + 10 +26487.499905 + 20 +22175.429097 + 30 +0.0 + 11 +26476.200639 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1C49 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +21642.823309 + 30 +0.0 + 11 +26812.499905 + 21 +21655.813854 + 31 +0.0 + 0 +LINE + 5 +1C4A + 8 +0 + 62 + 0 + 10 +26787.499905 + 20 +21699.115125 + 30 +0.0 + 11 +26774.999905 + 21 +21720.76576 + 31 +0.0 + 0 +LINE + 5 +1C4B + 8 +0 + 62 + 0 + 10 +26749.999905 + 20 +21764.06703 + 30 +0.0 + 11 +26740.0 + 21 +21781.387373 + 31 +0.0 + 0 +LINE + 5 +1C4C + 8 +0 + 62 + 0 + 10 +26524.999905 + 20 +22153.778462 + 30 +0.0 + 11 +26512.499905 + 21 +22175.429097 + 31 +0.0 + 0 +LINE + 5 +1C4D + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +21686.124579 + 30 +0.0 + 11 +26812.499905 + 21 +21699.115125 + 31 +0.0 + 0 +LINE + 5 +1C4E + 8 +0 + 62 + 0 + 10 +26787.499905 + 20 +21742.416395 + 30 +0.0 + 11 +26774.999905 + 21 +21764.06703 + 31 +0.0 + 0 +LINE + 5 +1C4F + 8 +0 + 62 + 0 + 10 +26749.999905 + 20 +21807.3683 + 30 +0.0 + 11 +26740.0 + 21 +21824.688643 + 31 +0.0 + 0 +LINE + 5 +1C50 + 8 +0 + 62 + 0 + 10 +26562.499905 + 20 +22132.127826 + 30 +0.0 + 11 +26549.999905 + 21 +22153.778462 + 31 +0.0 + 0 +LINE + 5 +1C51 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +21729.425849 + 30 +0.0 + 11 +26812.499905 + 21 +21742.416395 + 31 +0.0 + 0 +LINE + 5 +1C52 + 8 +0 + 62 + 0 + 10 +26787.499905 + 20 +21785.717665 + 30 +0.0 + 11 +26774.999905 + 21 +21807.3683 + 31 +0.0 + 0 +LINE + 5 +1C53 + 8 +0 + 62 + 0 + 10 +26749.999905 + 20 +21850.66957 + 30 +0.0 + 11 +26740.0 + 21 +21867.989913 + 31 +0.0 + 0 +LINE + 5 +1C54 + 8 +0 + 62 + 0 + 10 +26597.38866 + 20 +22115.0 + 30 +0.0 + 11 +26587.499905 + 21 +22132.127826 + 31 +0.0 + 0 +LINE + 5 +1C55 + 8 +0 + 62 + 0 + 10 +26562.499905 + 20 +22175.429097 + 30 +0.0 + 11 +26551.200639 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1C56 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +21772.727119 + 30 +0.0 + 11 +26812.499905 + 21 +21785.717665 + 31 +0.0 + 0 +LINE + 5 +1C57 + 8 +0 + 62 + 0 + 10 +26787.499905 + 20 +21829.018935 + 30 +0.0 + 11 +26774.999905 + 21 +21850.66957 + 31 +0.0 + 0 +LINE + 5 +1C58 + 8 +0 + 62 + 0 + 10 +26749.999905 + 20 +21893.97084 + 30 +0.0 + 11 +26740.0 + 21 +21911.291183 + 31 +0.0 + 0 +LINE + 5 +1C59 + 8 +0 + 62 + 0 + 10 +26599.999905 + 20 +22153.778461 + 30 +0.0 + 11 +26587.499905 + 21 +22175.429097 + 31 +0.0 + 0 +LINE + 5 +1C5A + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +21816.028389 + 30 +0.0 + 11 +26812.499905 + 21 +21829.018935 + 31 +0.0 + 0 +LINE + 5 +1C5B + 8 +0 + 62 + 0 + 10 +26787.499905 + 20 +21872.320205 + 30 +0.0 + 11 +26774.999905 + 21 +21893.97084 + 31 +0.0 + 0 +LINE + 5 +1C5C + 8 +0 + 62 + 0 + 10 +26749.999905 + 20 +21937.27211 + 30 +0.0 + 11 +26740.0 + 21 +21954.592453 + 31 +0.0 + 0 +LINE + 5 +1C5D + 8 +0 + 62 + 0 + 10 +26637.499905 + 20 +22132.127826 + 30 +0.0 + 11 +26624.999905 + 21 +22153.778461 + 31 +0.0 + 0 +LINE + 5 +1C5E + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +21859.329659 + 30 +0.0 + 11 +26812.499905 + 21 +21872.320205 + 31 +0.0 + 0 +LINE + 5 +1C5F + 8 +0 + 62 + 0 + 10 +26787.499905 + 20 +21915.621475 + 30 +0.0 + 11 +26774.999905 + 21 +21937.27211 + 31 +0.0 + 0 +LINE + 5 +1C60 + 8 +0 + 62 + 0 + 10 +26749.999905 + 20 +21980.573381 + 30 +0.0 + 11 +26740.0 + 21 +21997.893723 + 31 +0.0 + 0 +LINE + 5 +1C61 + 8 +0 + 62 + 0 + 10 +26672.38866 + 20 +22115.0 + 30 +0.0 + 11 +26662.499905 + 21 +22132.127826 + 31 +0.0 + 0 +LINE + 5 +1C62 + 8 +0 + 62 + 0 + 10 +26637.499905 + 20 +22175.429096 + 30 +0.0 + 11 +26626.200638 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1C63 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +21902.630929 + 30 +0.0 + 11 +26812.499905 + 21 +21915.621475 + 31 +0.0 + 0 +LINE + 5 +1C64 + 8 +0 + 62 + 0 + 10 +26787.499905 + 20 +21958.922745 + 30 +0.0 + 11 +26774.999905 + 21 +21980.573381 + 31 +0.0 + 0 +LINE + 5 +1C65 + 8 +0 + 62 + 0 + 10 +26749.999905 + 20 +22023.874651 + 30 +0.0 + 11 +26740.0 + 21 +22041.194993 + 31 +0.0 + 0 +LINE + 5 +1C66 + 8 +0 + 62 + 0 + 10 +26674.999905 + 20 +22153.778461 + 30 +0.0 + 11 +26662.499905 + 21 +22175.429096 + 31 +0.0 + 0 +LINE + 5 +1C67 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +21945.932199 + 30 +0.0 + 11 +26812.499904 + 21 +21958.922745 + 31 +0.0 + 0 +LINE + 5 +1C68 + 8 +0 + 62 + 0 + 10 +26787.499904 + 20 +22002.224016 + 30 +0.0 + 11 +26774.999904 + 21 +22023.874651 + 31 +0.0 + 0 +LINE + 5 +1C69 + 8 +0 + 62 + 0 + 10 +26749.999904 + 20 +22067.175921 + 30 +0.0 + 11 +26740.0 + 21 +22084.496263 + 31 +0.0 + 0 +LINE + 5 +1C6A + 8 +0 + 62 + 0 + 10 +26712.499904 + 20 +22132.127826 + 30 +0.0 + 11 +26699.999904 + 21 +22153.778461 + 31 +0.0 + 0 +LINE + 5 +1C6B + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +21989.233469 + 30 +0.0 + 11 +26812.499904 + 21 +22002.224016 + 31 +0.0 + 0 +LINE + 5 +1C6C + 8 +0 + 62 + 0 + 10 +26787.499904 + 20 +22045.525286 + 30 +0.0 + 11 +26774.999904 + 21 +22067.175921 + 31 +0.0 + 0 +LINE + 5 +1C6D + 8 +0 + 62 + 0 + 10 +26749.999904 + 20 +22110.477191 + 30 +0.0 + 11 +26737.499904 + 21 +22132.127826 + 31 +0.0 + 0 +LINE + 5 +1C6E + 8 +0 + 62 + 0 + 10 +26712.499904 + 20 +22175.429096 + 30 +0.0 + 11 +26701.200638 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1C6F + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +22032.534739 + 30 +0.0 + 11 +26812.499904 + 21 +22045.525286 + 31 +0.0 + 0 +LINE + 5 +1C70 + 8 +0 + 62 + 0 + 10 +26787.499904 + 20 +22088.826556 + 30 +0.0 + 11 +26774.999904 + 21 +22110.477191 + 31 +0.0 + 0 +LINE + 5 +1C71 + 8 +0 + 62 + 0 + 10 +26749.999904 + 20 +22153.778461 + 30 +0.0 + 11 +26737.499904 + 21 +22175.429096 + 31 +0.0 + 0 +LINE + 5 +1C72 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +22075.836009 + 30 +0.0 + 11 +26812.499904 + 21 +22088.826556 + 31 +0.0 + 0 +LINE + 5 +1C73 + 8 +0 + 62 + 0 + 10 +26787.499904 + 20 +22132.127826 + 30 +0.0 + 11 +26774.999904 + 21 +22153.778461 + 31 +0.0 + 0 +LINE + 5 +1C74 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +22119.137279 + 30 +0.0 + 11 +26812.499904 + 21 +22132.127826 + 31 +0.0 + 0 +LINE + 5 +1C75 + 8 +0 + 62 + 0 + 10 +26787.499904 + 20 +22175.429096 + 30 +0.0 + 11 +26776.200638 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1C76 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +22162.438549 + 30 +0.0 + 11 +26812.499904 + 21 +22175.429096 + 31 +0.0 + 0 +LINE + 5 +1C77 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +21530.240337 + 30 +0.0 + 11 +26749.999952 + 21 +21547.560761 + 31 +0.0 + 0 +LINE + 5 +1C78 + 8 +0 + 62 + 0 + 10 +26774.999952 + 20 +21590.862032 + 30 +0.0 + 11 +26787.499952 + 21 +21612.512667 + 31 +0.0 + 0 +LINE + 5 +1C79 + 8 +0 + 62 + 0 + 10 +26812.499952 + 20 +21655.813937 + 30 +0.0 + 11 +26820.0 + 21 +21668.804401 + 31 +0.0 + 0 +LINE + 5 +1C7A + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +21573.541607 + 30 +0.0 + 11 +26749.999952 + 21 +21590.862032 + 31 +0.0 + 0 +LINE + 5 +1C7B + 8 +0 + 62 + 0 + 10 +26774.999952 + 20 +21634.163302 + 30 +0.0 + 11 +26787.499952 + 21 +21655.813937 + 31 +0.0 + 0 +LINE + 5 +1C7C + 8 +0 + 62 + 0 + 10 +26812.499952 + 20 +21699.115207 + 30 +0.0 + 11 +26820.0 + 21 +21712.105671 + 31 +0.0 + 0 +LINE + 5 +1C7D + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +21616.842877 + 30 +0.0 + 11 +26749.999952 + 21 +21634.163302 + 31 +0.0 + 0 +LINE + 5 +1C7E + 8 +0 + 62 + 0 + 10 +26774.999952 + 20 +21677.464572 + 30 +0.0 + 11 +26787.499952 + 21 +21699.115207 + 31 +0.0 + 0 +LINE + 5 +1C7F + 8 +0 + 62 + 0 + 10 +26812.499952 + 20 +21742.416477 + 30 +0.0 + 11 +26820.0 + 21 +21755.406941 + 31 +0.0 + 0 +LINE + 5 +1C80 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +21660.144147 + 30 +0.0 + 11 +26749.999952 + 21 +21677.464572 + 31 +0.0 + 0 +LINE + 5 +1C81 + 8 +0 + 62 + 0 + 10 +26774.999952 + 20 +21720.765842 + 30 +0.0 + 11 +26787.499952 + 21 +21742.416477 + 31 +0.0 + 0 +LINE + 5 +1C82 + 8 +0 + 62 + 0 + 10 +26812.499952 + 20 +21785.717747 + 30 +0.0 + 11 +26820.0 + 21 +21798.708211 + 31 +0.0 + 0 +LINE + 5 +1C83 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +21703.445417 + 30 +0.0 + 11 +26749.999952 + 21 +21720.765842 + 31 +0.0 + 0 +LINE + 5 +1C84 + 8 +0 + 62 + 0 + 10 +26774.999952 + 20 +21764.067112 + 30 +0.0 + 11 +26787.499952 + 21 +21785.717747 + 31 +0.0 + 0 +LINE + 5 +1C85 + 8 +0 + 62 + 0 + 10 +26812.499952 + 20 +21829.019018 + 30 +0.0 + 11 +26820.0 + 21 +21842.009481 + 31 +0.0 + 0 +LINE + 5 +1C86 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +21746.746687 + 30 +0.0 + 11 +26749.999952 + 21 +21764.067112 + 31 +0.0 + 0 +LINE + 5 +1C87 + 8 +0 + 62 + 0 + 10 +26774.999952 + 20 +21807.368382 + 30 +0.0 + 11 +26787.499952 + 21 +21829.019017 + 31 +0.0 + 0 +LINE + 5 +1C88 + 8 +0 + 62 + 0 + 10 +26812.499952 + 20 +21872.320288 + 30 +0.0 + 11 +26820.0 + 21 +21885.310751 + 31 +0.0 + 0 +LINE + 5 +1C89 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +21790.047957 + 30 +0.0 + 11 +26749.999952 + 21 +21807.368382 + 31 +0.0 + 0 +LINE + 5 +1C8A + 8 +0 + 62 + 0 + 10 +26774.999952 + 20 +21850.669653 + 30 +0.0 + 11 +26787.499952 + 21 +21872.320288 + 31 +0.0 + 0 +LINE + 5 +1C8B + 8 +0 + 62 + 0 + 10 +26812.499952 + 20 +21915.621558 + 30 +0.0 + 11 +26820.0 + 21 +21928.612021 + 31 +0.0 + 0 +LINE + 5 +1C8C + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +21833.349227 + 30 +0.0 + 11 +26749.999953 + 21 +21850.669652 + 31 +0.0 + 0 +LINE + 5 +1C8D + 8 +0 + 62 + 0 + 10 +26774.999953 + 20 +21893.970923 + 30 +0.0 + 11 +26787.499953 + 21 +21915.621558 + 31 +0.0 + 0 +LINE + 5 +1C8E + 8 +0 + 62 + 0 + 10 +26812.499953 + 20 +21958.922828 + 30 +0.0 + 11 +26820.0 + 21 +21971.913291 + 31 +0.0 + 0 +LINE + 5 +1C8F + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +21876.650497 + 30 +0.0 + 11 +26749.999953 + 21 +21893.970923 + 31 +0.0 + 0 +LINE + 5 +1C90 + 8 +0 + 62 + 0 + 10 +26774.999953 + 20 +21937.272193 + 30 +0.0 + 11 +26787.499953 + 21 +21958.922828 + 31 +0.0 + 0 +LINE + 5 +1C91 + 8 +0 + 62 + 0 + 10 +26812.499953 + 20 +22002.224098 + 30 +0.0 + 11 +26820.0 + 21 +22015.214561 + 31 +0.0 + 0 +LINE + 5 +1C92 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +21919.951767 + 30 +0.0 + 11 +26749.999953 + 21 +21937.272193 + 31 +0.0 + 0 +LINE + 5 +1C93 + 8 +0 + 62 + 0 + 10 +26774.999953 + 20 +21980.573463 + 30 +0.0 + 11 +26787.499953 + 21 +22002.224098 + 31 +0.0 + 0 +LINE + 5 +1C94 + 8 +0 + 62 + 0 + 10 +26812.499953 + 20 +22045.525368 + 30 +0.0 + 11 +26820.0 + 21 +22058.515831 + 31 +0.0 + 0 +LINE + 5 +1C95 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +21963.253037 + 30 +0.0 + 11 +26749.999953 + 21 +21980.573463 + 31 +0.0 + 0 +LINE + 5 +1C96 + 8 +0 + 62 + 0 + 10 +26774.999953 + 20 +22023.874733 + 30 +0.0 + 11 +26787.499953 + 21 +22045.525368 + 31 +0.0 + 0 +LINE + 5 +1C97 + 8 +0 + 62 + 0 + 10 +26812.499953 + 20 +22088.826638 + 30 +0.0 + 11 +26820.0 + 21 +22101.817101 + 31 +0.0 + 0 +LINE + 5 +1C98 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +22006.554307 + 30 +0.0 + 11 +26749.999953 + 21 +22023.874733 + 31 +0.0 + 0 +LINE + 5 +1C99 + 8 +0 + 62 + 0 + 10 +26774.999953 + 20 +22067.176003 + 30 +0.0 + 11 +26787.499953 + 21 +22088.826638 + 31 +0.0 + 0 +LINE + 5 +1C9A + 8 +0 + 62 + 0 + 10 +26812.499953 + 20 +22132.127908 + 30 +0.0 + 11 +26820.0 + 21 +22145.118371 + 31 +0.0 + 0 +LINE + 5 +1C9B + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +22049.855577 + 30 +0.0 + 11 +26749.999953 + 21 +22067.176003 + 31 +0.0 + 0 +LINE + 5 +1C9C + 8 +0 + 62 + 0 + 10 +26774.999953 + 20 +22110.477273 + 30 +0.0 + 11 +26787.499953 + 21 +22132.127908 + 31 +0.0 + 0 +LINE + 5 +1C9D + 8 +0 + 62 + 0 + 10 +26812.499953 + 20 +22175.429179 + 30 +0.0 + 11 +26820.0 + 21 +22188.419641 + 31 +0.0 + 0 +LINE + 5 +1C9E + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +22093.156847 + 30 +0.0 + 11 +26749.999953 + 21 +22110.477273 + 31 +0.0 + 0 +LINE + 5 +1C9F + 8 +0 + 62 + 0 + 10 +26774.999953 + 20 +22153.778543 + 30 +0.0 + 11 +26787.499953 + 21 +22175.429179 + 31 +0.0 + 0 +LINE + 5 +1CA0 + 8 +0 + 62 + 0 + 10 +26737.499953 + 20 +22132.127908 + 30 +0.0 + 11 +26749.999953 + 21 +22153.778543 + 31 +0.0 + 0 +LINE + 5 +1CA1 + 8 +0 + 62 + 0 + 10 +26702.611151 + 20 +22115.0 + 30 +0.0 + 11 +26712.499953 + 21 +22132.127908 + 31 +0.0 + 0 +LINE + 5 +1CA2 + 8 +0 + 62 + 0 + 10 +26737.499953 + 20 +22175.429178 + 30 +0.0 + 11 +26748.799172 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1CA3 + 8 +0 + 62 + 0 + 10 +26699.999953 + 20 +22153.778543 + 30 +0.0 + 11 +26712.499953 + 21 +22175.429178 + 31 +0.0 + 0 +LINE + 5 +1CA4 + 8 +0 + 62 + 0 + 10 +26662.499953 + 20 +22132.127908 + 30 +0.0 + 11 +26674.999953 + 21 +22153.778543 + 31 +0.0 + 0 +LINE + 5 +1CA5 + 8 +0 + 62 + 0 + 10 +26627.611151 + 20 +22115.0 + 30 +0.0 + 11 +26637.499953 + 21 +22132.127908 + 31 +0.0 + 0 +LINE + 5 +1CA6 + 8 +0 + 62 + 0 + 10 +26662.499953 + 20 +22175.429178 + 30 +0.0 + 11 +26673.799173 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1CA7 + 8 +0 + 62 + 0 + 10 +26624.999954 + 20 +22153.778543 + 30 +0.0 + 11 +26637.499954 + 21 +22175.429178 + 31 +0.0 + 0 +LINE + 5 +1CA8 + 8 +0 + 62 + 0 + 10 +26587.499954 + 20 +22132.127908 + 30 +0.0 + 11 +26599.999954 + 21 +22153.778543 + 31 +0.0 + 0 +LINE + 5 +1CA9 + 8 +0 + 62 + 0 + 10 +26552.611151 + 20 +22115.0 + 30 +0.0 + 11 +26562.499954 + 21 +22132.127908 + 31 +0.0 + 0 +LINE + 5 +1CAA + 8 +0 + 62 + 0 + 10 +26587.499954 + 20 +22175.429178 + 30 +0.0 + 11 +26598.799173 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1CAB + 8 +0 + 62 + 0 + 10 +26549.999954 + 20 +22153.778543 + 30 +0.0 + 11 +26562.499954 + 21 +22175.429178 + 31 +0.0 + 0 +LINE + 5 +1CAC + 8 +0 + 62 + 0 + 10 +26512.499954 + 20 +22132.127908 + 30 +0.0 + 11 +26524.999954 + 21 +22153.778543 + 31 +0.0 + 0 +LINE + 5 +1CAD + 8 +0 + 62 + 0 + 10 +26477.611152 + 20 +22115.0 + 30 +0.0 + 11 +26487.499954 + 21 +22132.127908 + 31 +0.0 + 0 +LINE + 5 +1CAE + 8 +0 + 62 + 0 + 10 +26512.499954 + 20 +22175.429178 + 30 +0.0 + 11 +26523.799173 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1CAF + 8 +0 + 62 + 0 + 10 +26474.999954 + 20 +22153.778543 + 30 +0.0 + 11 +26487.499954 + 21 +22175.429178 + 31 +0.0 + 0 +LINE + 5 +1CB0 + 8 +0 + 62 + 0 + 10 +26437.499954 + 20 +22132.127908 + 30 +0.0 + 11 +26449.999954 + 21 +22153.778543 + 31 +0.0 + 0 +LINE + 5 +1CB1 + 8 +0 + 62 + 0 + 10 +26402.611152 + 20 +22115.0 + 30 +0.0 + 11 +26412.499954 + 21 +22132.127908 + 31 +0.0 + 0 +LINE + 5 +1CB2 + 8 +0 + 62 + 0 + 10 +26437.499954 + 20 +22175.429178 + 30 +0.0 + 11 +26448.799174 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1CB3 + 8 +0 + 62 + 0 + 10 +26399.999954 + 20 +22153.778543 + 30 +0.0 + 11 +26412.499954 + 21 +22175.429178 + 31 +0.0 + 0 +LINE + 5 +1CB4 + 8 +0 + 62 + 0 + 10 +26362.499954 + 20 +22132.127908 + 30 +0.0 + 11 +26374.999954 + 21 +22153.778543 + 31 +0.0 + 0 +LINE + 5 +1CB5 + 8 +0 + 62 + 0 + 10 +26327.611152 + 20 +22115.0 + 30 +0.0 + 11 +26337.499954 + 21 +22132.127908 + 31 +0.0 + 0 +LINE + 5 +1CB6 + 8 +0 + 62 + 0 + 10 +26362.499954 + 20 +22175.429178 + 30 +0.0 + 11 +26373.799174 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1CB7 + 8 +0 + 62 + 0 + 10 +26324.999955 + 20 +22153.778543 + 30 +0.0 + 11 +26337.499955 + 21 +22175.429178 + 31 +0.0 + 0 +LINE + 5 +1CB8 + 8 +0 + 62 + 0 + 10 +26287.499955 + 20 +22132.127908 + 30 +0.0 + 11 +26299.999955 + 21 +22153.778543 + 31 +0.0 + 0 +LINE + 5 +1CB9 + 8 +0 + 62 + 0 + 10 +26252.611153 + 20 +22115.0 + 30 +0.0 + 11 +26262.499955 + 21 +22132.127907 + 31 +0.0 + 0 +LINE + 5 +1CBA + 8 +0 + 62 + 0 + 10 +26287.499955 + 20 +22175.429178 + 30 +0.0 + 11 +26298.799174 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1CBB + 8 +0 + 62 + 0 + 10 +26249.999955 + 20 +22153.778543 + 30 +0.0 + 11 +26262.499955 + 21 +22175.429178 + 31 +0.0 + 0 +LINE + 5 +1CBC + 8 +0 + 62 + 0 + 10 +26212.499955 + 20 +22132.127907 + 30 +0.0 + 11 +26224.999955 + 21 +22153.778542 + 31 +0.0 + 0 +LINE + 5 +1CBD + 8 +0 + 62 + 0 + 10 +26177.611153 + 20 +22115.0 + 30 +0.0 + 11 +26187.499955 + 21 +22132.127907 + 31 +0.0 + 0 +LINE + 5 +1CBE + 8 +0 + 62 + 0 + 10 +26212.499955 + 20 +22175.429178 + 30 +0.0 + 11 +26223.799175 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1CBF + 8 +0 + 62 + 0 + 10 +26174.999955 + 20 +22153.778542 + 30 +0.0 + 11 +26187.499955 + 21 +22175.429177 + 31 +0.0 + 0 +LINE + 5 +1CC0 + 8 +0 + 62 + 0 + 10 +26137.499955 + 20 +22132.127907 + 30 +0.0 + 11 +26149.999955 + 21 +22153.778542 + 31 +0.0 + 0 +LINE + 5 +1CC1 + 8 +0 + 62 + 0 + 10 +26102.611153 + 20 +22115.0 + 30 +0.0 + 11 +26112.499955 + 21 +22132.127907 + 31 +0.0 + 0 +LINE + 5 +1CC2 + 8 +0 + 62 + 0 + 10 +26137.499955 + 20 +22175.429177 + 30 +0.0 + 11 +26148.799175 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1CC3 + 8 +0 + 62 + 0 + 10 +26099.999955 + 20 +22153.778542 + 30 +0.0 + 11 +26112.499955 + 21 +22175.429177 + 31 +0.0 + 0 +LINE + 5 +1CC4 + 8 +0 + 62 + 0 + 10 +26062.499955 + 20 +22132.127907 + 30 +0.0 + 11 +26074.999955 + 21 +22153.778542 + 31 +0.0 + 0 +LINE + 5 +1CC5 + 8 +0 + 62 + 0 + 10 +26027.611154 + 20 +22115.0 + 30 +0.0 + 11 +26037.499955 + 21 +22132.127907 + 31 +0.0 + 0 +LINE + 5 +1CC6 + 8 +0 + 62 + 0 + 10 +26062.499955 + 20 +22175.429177 + 30 +0.0 + 11 +26073.799175 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1CC7 + 8 +0 + 62 + 0 + 10 +26024.999956 + 20 +22153.778542 + 30 +0.0 + 11 +26037.499956 + 21 +22175.429177 + 31 +0.0 + 0 +LINE + 5 +1CC8 + 8 +0 + 62 + 0 + 10 +25987.499956 + 20 +22132.127907 + 30 +0.0 + 11 +25999.999956 + 21 +22153.778542 + 31 +0.0 + 0 +LINE + 5 +1CC9 + 8 +0 + 62 + 0 + 10 +25952.611154 + 20 +22115.0 + 30 +0.0 + 11 +25962.499956 + 21 +22132.127907 + 31 +0.0 + 0 +LINE + 5 +1CCA + 8 +0 + 62 + 0 + 10 +25987.499956 + 20 +22175.429177 + 30 +0.0 + 11 +25998.799176 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1CCB + 8 +0 + 62 + 0 + 10 +25949.999956 + 20 +22153.778542 + 30 +0.0 + 11 +25962.499956 + 21 +22175.429177 + 31 +0.0 + 0 +LINE + 5 +1CCC + 8 +0 + 62 + 0 + 10 +25912.499956 + 20 +22132.127907 + 30 +0.0 + 11 +25924.999956 + 21 +22153.778542 + 31 +0.0 + 0 +LINE + 5 +1CCD + 8 +0 + 62 + 0 + 10 +25877.611154 + 20 +22115.0 + 30 +0.0 + 11 +25887.499956 + 21 +22132.127907 + 31 +0.0 + 0 +LINE + 5 +1CCE + 8 +0 + 62 + 0 + 10 +25912.499956 + 20 +22175.429177 + 30 +0.0 + 11 +25923.799176 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1CCF + 8 +0 + 62 + 0 + 10 +25874.999956 + 20 +22153.778542 + 30 +0.0 + 11 +25887.499956 + 21 +22175.429177 + 31 +0.0 + 0 +LINE + 5 +1CD0 + 8 +0 + 62 + 0 + 10 +25837.499956 + 20 +22132.127907 + 30 +0.0 + 11 +25849.999956 + 21 +22153.778542 + 31 +0.0 + 0 +LINE + 5 +1CD1 + 8 +0 + 62 + 0 + 10 +25802.611155 + 20 +22115.0 + 30 +0.0 + 11 +25812.499956 + 21 +22132.127907 + 31 +0.0 + 0 +LINE + 5 +1CD2 + 8 +0 + 62 + 0 + 10 +25837.499956 + 20 +22175.429177 + 30 +0.0 + 11 +25848.799176 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1CD3 + 8 +0 + 62 + 0 + 10 +25799.999956 + 20 +22153.778542 + 30 +0.0 + 11 +25812.499956 + 21 +22175.429177 + 31 +0.0 + 0 +LINE + 5 +1CD4 + 8 +0 + 62 + 0 + 10 +25762.499956 + 20 +22132.127907 + 30 +0.0 + 11 +25774.999956 + 21 +22153.778542 + 31 +0.0 + 0 +LINE + 5 +1CD5 + 8 +0 + 62 + 0 + 10 +25727.611155 + 20 +22115.0 + 30 +0.0 + 11 +25737.499956 + 21 +22132.127906 + 31 +0.0 + 0 +LINE + 5 +1CD6 + 8 +0 + 62 + 0 + 10 +25762.499956 + 20 +22175.429177 + 30 +0.0 + 11 +25773.799177 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1CD7 + 8 +0 + 62 + 0 + 10 +25724.999956 + 20 +22153.778542 + 30 +0.0 + 11 +25737.499956 + 21 +22175.429177 + 31 +0.0 + 0 +LINE + 5 +1CD8 + 8 +0 + 62 + 0 + 10 +25687.499957 + 20 +22132.127906 + 30 +0.0 + 11 +25699.999957 + 21 +22153.778541 + 31 +0.0 + 0 +LINE + 5 +1CD9 + 8 +0 + 62 + 0 + 10 +25652.611155 + 20 +22115.0 + 30 +0.0 + 11 +25662.499957 + 21 +22132.127906 + 31 +0.0 + 0 +LINE + 5 +1CDA + 8 +0 + 62 + 0 + 10 +25687.499957 + 20 +22175.429177 + 30 +0.0 + 11 +25698.799177 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1CDB + 8 +0 + 62 + 0 + 10 +25649.999957 + 20 +22153.778541 + 30 +0.0 + 11 +25662.499957 + 21 +22175.429176 + 31 +0.0 + 0 +LINE + 5 +1CDC + 8 +0 + 62 + 0 + 10 +25612.499957 + 20 +22132.127906 + 30 +0.0 + 11 +25624.999957 + 21 +22153.778541 + 31 +0.0 + 0 +LINE + 5 +1CDD + 8 +0 + 62 + 0 + 10 +25577.611156 + 20 +22115.0 + 30 +0.0 + 11 +25587.499957 + 21 +22132.127906 + 31 +0.0 + 0 +LINE + 5 +1CDE + 8 +0 + 62 + 0 + 10 +25612.499957 + 20 +22175.429176 + 30 +0.0 + 11 +25623.799177 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1CDF + 8 +0 + 62 + 0 + 10 +25574.999957 + 20 +22153.778541 + 30 +0.0 + 11 +25587.499957 + 21 +22175.429176 + 31 +0.0 + 0 +LINE + 5 +1CE0 + 8 +0 + 62 + 0 + 10 +25537.499957 + 20 +22132.127906 + 30 +0.0 + 11 +25549.999957 + 21 +22153.778541 + 31 +0.0 + 0 +LINE + 5 +1CE1 + 8 +0 + 62 + 0 + 10 +25502.611156 + 20 +22115.0 + 30 +0.0 + 11 +25512.499957 + 21 +22132.127906 + 31 +0.0 + 0 +LINE + 5 +1CE2 + 8 +0 + 62 + 0 + 10 +25537.499957 + 20 +22175.429176 + 30 +0.0 + 11 +25548.799178 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1CE3 + 8 +0 + 62 + 0 + 10 +25499.999957 + 20 +22153.778541 + 30 +0.0 + 11 +25512.499957 + 21 +22175.429176 + 31 +0.0 + 0 +LINE + 5 +1CE4 + 8 +0 + 62 + 0 + 10 +25462.499957 + 20 +22132.127906 + 30 +0.0 + 11 +25474.999957 + 21 +22153.778541 + 31 +0.0 + 0 +LINE + 5 +1CE5 + 8 +0 + 62 + 0 + 10 +25427.611156 + 20 +22115.0 + 30 +0.0 + 11 +25437.499957 + 21 +22132.127906 + 31 +0.0 + 0 +LINE + 5 +1CE6 + 8 +0 + 62 + 0 + 10 +25462.499957 + 20 +22175.429176 + 30 +0.0 + 11 +25473.799178 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1CE7 + 8 +0 + 62 + 0 + 10 +25424.999957 + 20 +22153.778541 + 30 +0.0 + 11 +25437.499957 + 21 +22175.429176 + 31 +0.0 + 0 +LINE + 5 +1CE8 + 8 +0 + 62 + 0 + 10 +25387.499958 + 20 +22132.127906 + 30 +0.0 + 11 +25399.999958 + 21 +22153.778541 + 31 +0.0 + 0 +LINE + 5 +1CE9 + 8 +0 + 62 + 0 + 10 +25352.611157 + 20 +22115.0 + 30 +0.0 + 11 +25362.499958 + 21 +22132.127906 + 31 +0.0 + 0 +LINE + 5 +1CEA + 8 +0 + 62 + 0 + 10 +25387.499958 + 20 +22175.429176 + 30 +0.0 + 11 +25398.799178 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1CEB + 8 +0 + 62 + 0 + 10 +25349.999958 + 20 +22153.778541 + 30 +0.0 + 11 +25362.499958 + 21 +22175.429176 + 31 +0.0 + 0 +LINE + 5 +1CEC + 8 +0 + 62 + 0 + 10 +25312.499958 + 20 +22132.127906 + 30 +0.0 + 11 +25324.999958 + 21 +22153.778541 + 31 +0.0 + 0 +LINE + 5 +1CED + 8 +0 + 62 + 0 + 10 +25277.611157 + 20 +22115.0 + 30 +0.0 + 11 +25287.499958 + 21 +22132.127906 + 31 +0.0 + 0 +LINE + 5 +1CEE + 8 +0 + 62 + 0 + 10 +25312.499958 + 20 +22175.429176 + 30 +0.0 + 11 +25323.799179 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1CEF + 8 +0 + 62 + 0 + 10 +25274.999958 + 20 +22153.778541 + 30 +0.0 + 11 +25287.499958 + 21 +22175.429176 + 31 +0.0 + 0 +LINE + 5 +1CF0 + 8 +0 + 62 + 0 + 10 +25238.75 + 20 +22134.293042 + 30 +0.0 + 11 +25249.999958 + 21 +22153.778541 + 31 +0.0 + 0 +LINE + 5 +1CF1 + 8 +0 + 62 + 0 + 10 +25238.75 + 20 +22177.594312 + 30 +0.0 + 11 +25248.799179 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1CF2 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +21486.939067 + 30 +0.0 + 11 +26749.999952 + 21 +21504.259491 + 31 +0.0 + 0 +LINE + 5 +1CF3 + 8 +0 + 62 + 0 + 10 +26774.999952 + 20 +21547.560762 + 30 +0.0 + 11 +26787.499952 + 21 +21569.211397 + 31 +0.0 + 0 +LINE + 5 +1CF4 + 8 +0 + 62 + 0 + 10 +26812.499952 + 20 +21612.512667 + 30 +0.0 + 11 +26820.0 + 21 +21625.503131 + 31 +0.0 + 0 +LINE + 5 +1CF5 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +21443.637797 + 30 +0.0 + 11 +26749.999952 + 21 +21460.958221 + 31 +0.0 + 0 +LINE + 5 +1CF6 + 8 +0 + 62 + 0 + 10 +26774.999952 + 20 +21504.259491 + 30 +0.0 + 11 +26787.499952 + 21 +21525.910126 + 31 +0.0 + 0 +LINE + 5 +1CF7 + 8 +0 + 62 + 0 + 10 +26812.499952 + 20 +21569.211397 + 30 +0.0 + 11 +26820.0 + 21 +21582.201861 + 31 +0.0 + 0 +LINE + 5 +1CF8 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +21400.336527 + 30 +0.0 + 11 +26749.999952 + 21 +21417.656951 + 31 +0.0 + 0 +LINE + 5 +1CF9 + 8 +0 + 62 + 0 + 10 +26774.999952 + 20 +21460.958221 + 30 +0.0 + 11 +26787.499952 + 21 +21482.608856 + 31 +0.0 + 0 +LINE + 5 +1CFA + 8 +0 + 62 + 0 + 10 +26812.499952 + 20 +21525.910127 + 30 +0.0 + 11 +26820.0 + 21 +21538.900591 + 31 +0.0 + 0 +LINE + 5 +1CFB + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +21357.035257 + 30 +0.0 + 11 +26749.999952 + 21 +21374.355681 + 31 +0.0 + 0 +LINE + 5 +1CFC + 8 +0 + 62 + 0 + 10 +26774.999952 + 20 +21417.656951 + 30 +0.0 + 11 +26787.499952 + 21 +21439.307586 + 31 +0.0 + 0 +LINE + 5 +1CFD + 8 +0 + 62 + 0 + 10 +26812.499952 + 20 +21482.608856 + 30 +0.0 + 11 +26820.0 + 21 +21495.599321 + 31 +0.0 + 0 +LINE + 5 +1CFE + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +21313.733987 + 30 +0.0 + 11 +26749.999952 + 21 +21331.054411 + 31 +0.0 + 0 +LINE + 5 +1CFF + 8 +0 + 62 + 0 + 10 +26774.999952 + 20 +21374.355681 + 30 +0.0 + 11 +26787.499952 + 21 +21396.006316 + 31 +0.0 + 0 +LINE + 5 +1D00 + 8 +0 + 62 + 0 + 10 +26812.499952 + 20 +21439.307586 + 30 +0.0 + 11 +26820.0 + 21 +21452.298051 + 31 +0.0 + 0 +LINE + 5 +1D01 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +21270.432717 + 30 +0.0 + 11 +26749.999951 + 21 +21287.753141 + 31 +0.0 + 0 +LINE + 5 +1D02 + 8 +0 + 62 + 0 + 10 +26774.999951 + 20 +21331.054411 + 30 +0.0 + 11 +26787.499951 + 21 +21352.705046 + 31 +0.0 + 0 +LINE + 5 +1D03 + 8 +0 + 62 + 0 + 10 +26812.499951 + 20 +21396.006316 + 30 +0.0 + 11 +26820.0 + 21 +21408.996781 + 31 +0.0 + 0 +LINE + 5 +1D04 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +21227.131447 + 30 +0.0 + 11 +26749.999951 + 21 +21244.45187 + 31 +0.0 + 0 +LINE + 5 +1D05 + 8 +0 + 62 + 0 + 10 +26774.999951 + 20 +21287.753141 + 30 +0.0 + 11 +26787.499951 + 21 +21309.403776 + 31 +0.0 + 0 +LINE + 5 +1D06 + 8 +0 + 62 + 0 + 10 +26812.499951 + 20 +21352.705046 + 30 +0.0 + 11 +26820.0 + 21 +21365.695511 + 31 +0.0 + 0 +LINE + 5 +1D07 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +21183.830177 + 30 +0.0 + 11 +26749.999951 + 21 +21201.1506 + 31 +0.0 + 0 +LINE + 5 +1D08 + 8 +0 + 62 + 0 + 10 +26774.999951 + 20 +21244.451871 + 30 +0.0 + 11 +26787.499951 + 21 +21266.102506 + 31 +0.0 + 0 +LINE + 5 +1D09 + 8 +0 + 62 + 0 + 10 +26812.499951 + 20 +21309.403776 + 30 +0.0 + 11 +26820.0 + 21 +21322.394241 + 31 +0.0 + 0 +LINE + 5 +1D0A + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +21140.528907 + 30 +0.0 + 11 +26749.999951 + 21 +21157.84933 + 31 +0.0 + 0 +LINE + 5 +1D0B + 8 +0 + 62 + 0 + 10 +26774.999951 + 20 +21201.1506 + 30 +0.0 + 11 +26787.499951 + 21 +21222.801235 + 31 +0.0 + 0 +LINE + 5 +1D0C + 8 +0 + 62 + 0 + 10 +26812.499951 + 20 +21266.102506 + 30 +0.0 + 11 +26820.0 + 21 +21279.092971 + 31 +0.0 + 0 +LINE + 5 +1D0D + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +21097.227637 + 30 +0.0 + 11 +26749.999951 + 21 +21114.54806 + 31 +0.0 + 0 +LINE + 5 +1D0E + 8 +0 + 62 + 0 + 10 +26774.999951 + 20 +21157.84933 + 30 +0.0 + 11 +26787.499951 + 21 +21179.499965 + 31 +0.0 + 0 +LINE + 5 +1D0F + 8 +0 + 62 + 0 + 10 +26812.499951 + 20 +21222.801236 + 30 +0.0 + 11 +26820.0 + 21 +21235.791701 + 31 +0.0 + 0 +LINE + 5 +1D10 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +21053.926367 + 30 +0.0 + 11 +26749.999951 + 21 +21071.24679 + 31 +0.0 + 0 +LINE + 5 +1D11 + 8 +0 + 62 + 0 + 10 +26774.999951 + 20 +21114.54806 + 30 +0.0 + 11 +26787.499951 + 21 +21136.198695 + 31 +0.0 + 0 +LINE + 5 +1D12 + 8 +0 + 62 + 0 + 10 +26812.499951 + 20 +21179.499965 + 30 +0.0 + 11 +26820.0 + 21 +21192.490431 + 31 +0.0 + 0 +LINE + 5 +1D13 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +21010.625097 + 30 +0.0 + 11 +26749.999951 + 21 +21027.94552 + 31 +0.0 + 0 +LINE + 5 +1D14 + 8 +0 + 62 + 0 + 10 +26774.999951 + 20 +21071.24679 + 30 +0.0 + 11 +26787.499951 + 21 +21092.897425 + 31 +0.0 + 0 +LINE + 5 +1D15 + 8 +0 + 62 + 0 + 10 +26812.499951 + 20 +21136.198695 + 30 +0.0 + 11 +26820.0 + 21 +21149.189161 + 31 +0.0 + 0 +LINE + 5 +1D16 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +20967.323827 + 30 +0.0 + 11 +26749.999951 + 21 +20984.64425 + 31 +0.0 + 0 +LINE + 5 +1D17 + 8 +0 + 62 + 0 + 10 +26774.999951 + 20 +21027.94552 + 30 +0.0 + 11 +26787.499951 + 21 +21049.596155 + 31 +0.0 + 0 +LINE + 5 +1D18 + 8 +0 + 62 + 0 + 10 +26812.499951 + 20 +21092.897425 + 30 +0.0 + 11 +26820.0 + 21 +21105.887891 + 31 +0.0 + 0 +LINE + 5 +1D19 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +20924.022557 + 30 +0.0 + 11 +26749.999951 + 21 +20941.342979 + 31 +0.0 + 0 +LINE + 5 +1D1A + 8 +0 + 62 + 0 + 10 +26774.999951 + 20 +20984.64425 + 30 +0.0 + 11 +26787.499951 + 21 +21006.294885 + 31 +0.0 + 0 +LINE + 5 +1D1B + 8 +0 + 62 + 0 + 10 +26812.499951 + 20 +21049.596155 + 30 +0.0 + 11 +26820.0 + 21 +21062.586621 + 31 +0.0 + 0 +LINE + 5 +1D1C + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +20880.721287 + 30 +0.0 + 11 +26749.999951 + 21 +20898.041709 + 31 +0.0 + 0 +LINE + 5 +1D1D + 8 +0 + 62 + 0 + 10 +26774.999951 + 20 +20941.34298 + 30 +0.0 + 11 +26787.499951 + 21 +20962.993615 + 31 +0.0 + 0 +LINE + 5 +1D1E + 8 +0 + 62 + 0 + 10 +26812.499951 + 20 +21006.294885 + 30 +0.0 + 11 +26820.0 + 21 +21019.285351 + 31 +0.0 + 0 +LINE + 5 +1D1F + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +20837.420017 + 30 +0.0 + 11 +26749.999951 + 21 +20854.740439 + 31 +0.0 + 0 +LINE + 5 +1D20 + 8 +0 + 62 + 0 + 10 +26774.999951 + 20 +20898.041709 + 30 +0.0 + 11 +26787.499951 + 21 +20919.692344 + 31 +0.0 + 0 +LINE + 5 +1D21 + 8 +0 + 62 + 0 + 10 +26812.499951 + 20 +20962.993615 + 30 +0.0 + 11 +26820.0 + 21 +20975.984081 + 31 +0.0 + 0 +LINE + 5 +1D22 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +20794.118747 + 30 +0.0 + 11 +26749.999951 + 21 +20811.439169 + 31 +0.0 + 0 +LINE + 5 +1D23 + 8 +0 + 62 + 0 + 10 +26774.999951 + 20 +20854.740439 + 30 +0.0 + 11 +26787.499951 + 21 +20876.391074 + 31 +0.0 + 0 +LINE + 5 +1D24 + 8 +0 + 62 + 0 + 10 +26812.499951 + 20 +20919.692345 + 30 +0.0 + 11 +26820.0 + 21 +20932.682811 + 31 +0.0 + 0 +LINE + 5 +1D25 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +20750.817477 + 30 +0.0 + 11 +26749.999951 + 21 +20768.137899 + 31 +0.0 + 0 +LINE + 5 +1D26 + 8 +0 + 62 + 0 + 10 +26774.999951 + 20 +20811.439169 + 30 +0.0 + 11 +26787.499951 + 21 +20833.089804 + 31 +0.0 + 0 +LINE + 5 +1D27 + 8 +0 + 62 + 0 + 10 +26812.499951 + 20 +20876.391074 + 30 +0.0 + 11 +26820.0 + 21 +20889.381541 + 31 +0.0 + 0 +LINE + 5 +1D28 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +20707.516207 + 30 +0.0 + 11 +26749.99995 + 21 +20724.836629 + 31 +0.0 + 0 +LINE + 5 +1D29 + 8 +0 + 62 + 0 + 10 +26774.99995 + 20 +20768.137899 + 30 +0.0 + 11 +26787.49995 + 21 +20789.788534 + 31 +0.0 + 0 +LINE + 5 +1D2A + 8 +0 + 62 + 0 + 10 +26812.49995 + 20 +20833.089804 + 30 +0.0 + 11 +26820.0 + 21 +20846.080271 + 31 +0.0 + 0 +LINE + 5 +1D2B + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +20664.214937 + 30 +0.0 + 11 +26749.99995 + 21 +20681.535359 + 31 +0.0 + 0 +LINE + 5 +1D2C + 8 +0 + 62 + 0 + 10 +26774.99995 + 20 +20724.836629 + 30 +0.0 + 11 +26787.49995 + 21 +20746.487264 + 31 +0.0 + 0 +LINE + 5 +1D2D + 8 +0 + 62 + 0 + 10 +26812.49995 + 20 +20789.788534 + 30 +0.0 + 11 +26820.0 + 21 +20802.779001 + 31 +0.0 + 0 +LINE + 5 +1D2E + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +20620.913667 + 30 +0.0 + 11 +26749.99995 + 21 +20638.234088 + 31 +0.0 + 0 +LINE + 5 +1D2F + 8 +0 + 62 + 0 + 10 +26774.99995 + 20 +20681.535359 + 30 +0.0 + 11 +26787.49995 + 21 +20703.185994 + 31 +0.0 + 0 +LINE + 5 +1D30 + 8 +0 + 62 + 0 + 10 +26812.49995 + 20 +20746.487264 + 30 +0.0 + 11 +26820.0 + 21 +20759.477731 + 31 +0.0 + 0 +LINE + 5 +1D31 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +20577.612397 + 30 +0.0 + 11 +26749.99995 + 21 +20594.932818 + 31 +0.0 + 0 +LINE + 5 +1D32 + 8 +0 + 62 + 0 + 10 +26774.99995 + 20 +20638.234089 + 30 +0.0 + 11 +26787.49995 + 21 +20659.884724 + 31 +0.0 + 0 +LINE + 5 +1D33 + 8 +0 + 62 + 0 + 10 +26812.49995 + 20 +20703.185994 + 30 +0.0 + 11 +26820.0 + 21 +20716.176461 + 31 +0.0 + 0 +LINE + 5 +1D34 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +20534.311127 + 30 +0.0 + 11 +26749.99995 + 21 +20551.631548 + 31 +0.0 + 0 +LINE + 5 +1D35 + 8 +0 + 62 + 0 + 10 +26774.99995 + 20 +20594.932818 + 30 +0.0 + 11 +26787.49995 + 21 +20616.583453 + 31 +0.0 + 0 +LINE + 5 +1D36 + 8 +0 + 62 + 0 + 10 +26812.49995 + 20 +20659.884724 + 30 +0.0 + 11 +26820.0 + 21 +20672.875191 + 31 +0.0 + 0 +LINE + 5 +1D37 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +20491.009857 + 30 +0.0 + 11 +26749.99995 + 21 +20508.330278 + 31 +0.0 + 0 +LINE + 5 +1D38 + 8 +0 + 62 + 0 + 10 +26774.99995 + 20 +20551.631548 + 30 +0.0 + 11 +26787.49995 + 21 +20573.282183 + 31 +0.0 + 0 +LINE + 5 +1D39 + 8 +0 + 62 + 0 + 10 +26812.49995 + 20 +20616.583454 + 30 +0.0 + 11 +26820.0 + 21 +20629.573921 + 31 +0.0 + 0 +LINE + 5 +1D3A + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +20447.708587 + 30 +0.0 + 11 +26749.99995 + 21 +20465.029008 + 31 +0.0 + 0 +LINE + 5 +1D3B + 8 +0 + 62 + 0 + 10 +26774.99995 + 20 +20508.330278 + 30 +0.0 + 11 +26787.49995 + 21 +20529.980913 + 31 +0.0 + 0 +LINE + 5 +1D3C + 8 +0 + 62 + 0 + 10 +26812.49995 + 20 +20573.282183 + 30 +0.0 + 11 +26820.0 + 21 +20586.272651 + 31 +0.0 + 0 +LINE + 5 +1D3D + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +20404.407317 + 30 +0.0 + 11 +26749.99995 + 21 +20421.727738 + 31 +0.0 + 0 +LINE + 5 +1D3E + 8 +0 + 62 + 0 + 10 +26774.99995 + 20 +20465.029008 + 30 +0.0 + 11 +26787.49995 + 21 +20486.679643 + 31 +0.0 + 0 +LINE + 5 +1D3F + 8 +0 + 62 + 0 + 10 +26812.49995 + 20 +20529.980913 + 30 +0.0 + 11 +26820.0 + 21 +20542.971381 + 31 +0.0 + 0 +LINE + 5 +1D40 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +20361.106047 + 30 +0.0 + 11 +26749.99995 + 21 +20378.426468 + 31 +0.0 + 0 +LINE + 5 +1D41 + 8 +0 + 62 + 0 + 10 +26774.99995 + 20 +20421.727738 + 30 +0.0 + 11 +26787.49995 + 21 +20443.378373 + 31 +0.0 + 0 +LINE + 5 +1D42 + 8 +0 + 62 + 0 + 10 +26812.49995 + 20 +20486.679643 + 30 +0.0 + 11 +26820.0 + 21 +20499.670111 + 31 +0.0 + 0 +LINE + 5 +1D43 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +20317.804777 + 30 +0.0 + 11 +26749.99995 + 21 +20335.125197 + 31 +0.0 + 0 +LINE + 5 +1D44 + 8 +0 + 62 + 0 + 10 +26774.99995 + 20 +20378.426468 + 30 +0.0 + 11 +26787.49995 + 21 +20400.077103 + 31 +0.0 + 0 +LINE + 5 +1D45 + 8 +0 + 62 + 0 + 10 +26812.49995 + 20 +20443.378373 + 30 +0.0 + 11 +26820.0 + 21 +20456.368841 + 31 +0.0 + 0 +LINE + 5 +1D46 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +20274.503507 + 30 +0.0 + 11 +26749.99995 + 21 +20291.823927 + 31 +0.0 + 0 +LINE + 5 +1D47 + 8 +0 + 62 + 0 + 10 +26774.99995 + 20 +20335.125198 + 30 +0.0 + 11 +26787.49995 + 21 +20356.775833 + 31 +0.0 + 0 +LINE + 5 +1D48 + 8 +0 + 62 + 0 + 10 +26812.49995 + 20 +20400.077103 + 30 +0.0 + 11 +26820.0 + 21 +20413.067571 + 31 +0.0 + 0 +LINE + 5 +1D49 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +20231.202237 + 30 +0.0 + 11 +26749.99995 + 21 +20248.522657 + 31 +0.0 + 0 +LINE + 5 +1D4A + 8 +0 + 62 + 0 + 10 +26774.99995 + 20 +20291.823927 + 30 +0.0 + 11 +26787.49995 + 21 +20313.474562 + 31 +0.0 + 0 +LINE + 5 +1D4B + 8 +0 + 62 + 0 + 10 +26812.49995 + 20 +20356.775833 + 30 +0.0 + 11 +26820.0 + 21 +20369.766301 + 31 +0.0 + 0 +LINE + 5 +1D4C + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +20187.900967 + 30 +0.0 + 11 +26749.999949 + 21 +20205.221387 + 31 +0.0 + 0 +LINE + 5 +1D4D + 8 +0 + 62 + 0 + 10 +26774.999949 + 20 +20248.522657 + 30 +0.0 + 11 +26787.499949 + 21 +20270.173292 + 31 +0.0 + 0 +LINE + 5 +1D4E + 8 +0 + 62 + 0 + 10 +26812.499949 + 20 +20313.474563 + 30 +0.0 + 11 +26820.0 + 21 +20326.465031 + 31 +0.0 + 0 +LINE + 5 +1D4F + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +20144.599697 + 30 +0.0 + 11 +26749.999949 + 21 +20161.920117 + 31 +0.0 + 0 +LINE + 5 +1D50 + 8 +0 + 62 + 0 + 10 +26774.999949 + 20 +20205.221387 + 30 +0.0 + 11 +26787.499949 + 21 +20226.872022 + 31 +0.0 + 0 +LINE + 5 +1D51 + 8 +0 + 62 + 0 + 10 +26812.499949 + 20 +20270.173292 + 30 +0.0 + 11 +26820.0 + 21 +20283.163761 + 31 +0.0 + 0 +LINE + 5 +1D52 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +20101.298427 + 30 +0.0 + 11 +26749.999949 + 21 +20118.618847 + 31 +0.0 + 0 +LINE + 5 +1D53 + 8 +0 + 62 + 0 + 10 +26774.999949 + 20 +20161.920117 + 30 +0.0 + 11 +26787.499949 + 21 +20183.570752 + 31 +0.0 + 0 +LINE + 5 +1D54 + 8 +0 + 62 + 0 + 10 +26812.499949 + 20 +20226.872022 + 30 +0.0 + 11 +26820.0 + 21 +20239.862491 + 31 +0.0 + 0 +LINE + 5 +1D55 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +20057.997157 + 30 +0.0 + 11 +26749.999949 + 21 +20075.317577 + 31 +0.0 + 0 +LINE + 5 +1D56 + 8 +0 + 62 + 0 + 10 +26774.999949 + 20 +20118.618847 + 30 +0.0 + 11 +26787.499949 + 21 +20140.269482 + 31 +0.0 + 0 +LINE + 5 +1D57 + 8 +0 + 62 + 0 + 10 +26812.499949 + 20 +20183.570752 + 30 +0.0 + 11 +26820.0 + 21 +20196.561221 + 31 +0.0 + 0 +LINE + 5 +1D58 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +20014.695887 + 30 +0.0 + 11 +26749.999949 + 21 +20032.016306 + 31 +0.0 + 0 +LINE + 5 +1D59 + 8 +0 + 62 + 0 + 10 +26774.999949 + 20 +20075.317577 + 30 +0.0 + 11 +26787.499949 + 21 +20096.968212 + 31 +0.0 + 0 +LINE + 5 +1D5A + 8 +0 + 62 + 0 + 10 +26812.499949 + 20 +20140.269482 + 30 +0.0 + 11 +26820.0 + 21 +20153.259951 + 31 +0.0 + 0 +LINE + 5 +1D5B + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +19971.394617 + 30 +0.0 + 11 +26749.999949 + 21 +19988.715036 + 31 +0.0 + 0 +LINE + 5 +1D5C + 8 +0 + 62 + 0 + 10 +26774.999949 + 20 +20032.016307 + 30 +0.0 + 11 +26787.499949 + 21 +20053.666942 + 31 +0.0 + 0 +LINE + 5 +1D5D + 8 +0 + 62 + 0 + 10 +26812.499949 + 20 +20096.968212 + 30 +0.0 + 11 +26820.0 + 21 +20109.958681 + 31 +0.0 + 0 +LINE + 5 +1D5E + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +19928.093347 + 30 +0.0 + 11 +26749.999949 + 21 +19945.413766 + 31 +0.0 + 0 +LINE + 5 +1D5F + 8 +0 + 62 + 0 + 10 +26774.999949 + 20 +19988.715036 + 30 +0.0 + 11 +26787.499949 + 21 +20010.365671 + 31 +0.0 + 0 +LINE + 5 +1D60 + 8 +0 + 62 + 0 + 10 +26812.499949 + 20 +20053.666942 + 30 +0.0 + 11 +26820.0 + 21 +20066.657411 + 31 +0.0 + 0 +LINE + 5 +1D61 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +19884.792077 + 30 +0.0 + 11 +26749.999949 + 21 +19902.112496 + 31 +0.0 + 0 +LINE + 5 +1D62 + 8 +0 + 62 + 0 + 10 +26774.999949 + 20 +19945.413766 + 30 +0.0 + 11 +26787.499949 + 21 +19967.064401 + 31 +0.0 + 0 +LINE + 5 +1D63 + 8 +0 + 62 + 0 + 10 +26812.499949 + 20 +20010.365672 + 30 +0.0 + 11 +26820.0 + 21 +20023.356141 + 31 +0.0 + 0 +LINE + 5 +1D64 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +19841.490807 + 30 +0.0 + 11 +26749.999949 + 21 +19858.811226 + 31 +0.0 + 0 +LINE + 5 +1D65 + 8 +0 + 62 + 0 + 10 +26774.999949 + 20 +19902.112496 + 30 +0.0 + 11 +26787.499949 + 21 +19923.763131 + 31 +0.0 + 0 +LINE + 5 +1D66 + 8 +0 + 62 + 0 + 10 +26812.499949 + 20 +19967.064401 + 30 +0.0 + 11 +26820.0 + 21 +19980.054871 + 31 +0.0 + 0 +LINE + 5 +1D67 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +19798.189537 + 30 +0.0 + 11 +26749.999949 + 21 +19815.509956 + 31 +0.0 + 0 +LINE + 5 +1D68 + 8 +0 + 62 + 0 + 10 +26774.999949 + 20 +19858.811226 + 30 +0.0 + 11 +26787.499949 + 21 +19880.461861 + 31 +0.0 + 0 +LINE + 5 +1D69 + 8 +0 + 62 + 0 + 10 +26812.499949 + 20 +19923.763131 + 30 +0.0 + 11 +26820.0 + 21 +19936.753601 + 31 +0.0 + 0 +LINE + 5 +1D6A + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +19754.888267 + 30 +0.0 + 11 +26749.999949 + 21 +19772.208686 + 31 +0.0 + 0 +LINE + 5 +1D6B + 8 +0 + 62 + 0 + 10 +26774.999949 + 20 +19815.509956 + 30 +0.0 + 11 +26787.499949 + 21 +19837.160591 + 31 +0.0 + 0 +LINE + 5 +1D6C + 8 +0 + 62 + 0 + 10 +26812.499949 + 20 +19880.461861 + 30 +0.0 + 11 +26820.0 + 21 +19893.452331 + 31 +0.0 + 0 +LINE + 5 +1D6D + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +19711.586997 + 30 +0.0 + 11 +26749.999949 + 21 +19728.907415 + 31 +0.0 + 0 +LINE + 5 +1D6E + 8 +0 + 62 + 0 + 10 +26774.999949 + 20 +19772.208686 + 30 +0.0 + 11 +26787.499949 + 21 +19793.859321 + 31 +0.0 + 0 +LINE + 5 +1D6F + 8 +0 + 62 + 0 + 10 +26812.499949 + 20 +19837.160591 + 30 +0.0 + 11 +26820.0 + 21 +19850.151061 + 31 +0.0 + 0 +LINE + 5 +1D70 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +19668.285727 + 30 +0.0 + 11 +26749.999948 + 21 +19685.606145 + 31 +0.0 + 0 +LINE + 5 +1D71 + 8 +0 + 62 + 0 + 10 +26774.999948 + 20 +19728.907416 + 30 +0.0 + 11 +26787.499948 + 21 +19750.558051 + 31 +0.0 + 0 +LINE + 5 +1D72 + 8 +0 + 62 + 0 + 10 +26812.499948 + 20 +19793.859321 + 30 +0.0 + 11 +26820.0 + 21 +19806.849791 + 31 +0.0 + 0 +LINE + 5 +1D73 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +19624.984457 + 30 +0.0 + 11 +26749.999948 + 21 +19642.304875 + 31 +0.0 + 0 +LINE + 5 +1D74 + 8 +0 + 62 + 0 + 10 +26774.999948 + 20 +19685.606145 + 30 +0.0 + 11 +26787.499948 + 21 +19707.25678 + 31 +0.0 + 0 +LINE + 5 +1D75 + 8 +0 + 62 + 0 + 10 +26812.499948 + 20 +19750.558051 + 30 +0.0 + 11 +26820.0 + 21 +19763.548521 + 31 +0.0 + 0 +LINE + 5 +1D76 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +19581.683187 + 30 +0.0 + 11 +26749.999948 + 21 +19599.003605 + 31 +0.0 + 0 +LINE + 5 +1D77 + 8 +0 + 62 + 0 + 10 +26774.999948 + 20 +19642.304875 + 30 +0.0 + 11 +26787.499948 + 21 +19663.95551 + 31 +0.0 + 0 +LINE + 5 +1D78 + 8 +0 + 62 + 0 + 10 +26812.499948 + 20 +19707.256781 + 30 +0.0 + 11 +26820.0 + 21 +19720.247251 + 31 +0.0 + 0 +LINE + 5 +1D79 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +19538.381917 + 30 +0.0 + 11 +26749.999948 + 21 +19555.702335 + 31 +0.0 + 0 +LINE + 5 +1D7A + 8 +0 + 62 + 0 + 10 +26774.999948 + 20 +19599.003605 + 30 +0.0 + 11 +26787.499948 + 21 +19620.65424 + 31 +0.0 + 0 +LINE + 5 +1D7B + 8 +0 + 62 + 0 + 10 +26812.499948 + 20 +19663.95551 + 30 +0.0 + 11 +26820.0 + 21 +19676.945981 + 31 +0.0 + 0 +LINE + 5 +1D7C + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +19495.080647 + 30 +0.0 + 11 +26749.999948 + 21 +19512.401065 + 31 +0.0 + 0 +LINE + 5 +1D7D + 8 +0 + 62 + 0 + 10 +26774.999948 + 20 +19555.702335 + 30 +0.0 + 11 +26787.499948 + 21 +19577.35297 + 31 +0.0 + 0 +LINE + 5 +1D7E + 8 +0 + 62 + 0 + 10 +26812.499948 + 20 +19620.65424 + 30 +0.0 + 11 +26820.0 + 21 +19633.644711 + 31 +0.0 + 0 +LINE + 5 +1D7F + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +19451.779377 + 30 +0.0 + 11 +26749.999948 + 21 +19469.099795 + 31 +0.0 + 0 +LINE + 5 +1D80 + 8 +0 + 62 + 0 + 10 +26774.999948 + 20 +19512.401065 + 30 +0.0 + 11 +26787.499948 + 21 +19534.0517 + 31 +0.0 + 0 +LINE + 5 +1D81 + 8 +0 + 62 + 0 + 10 +26812.499948 + 20 +19577.35297 + 30 +0.0 + 11 +26820.0 + 21 +19590.343441 + 31 +0.0 + 0 +LINE + 5 +1D82 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +19408.478107 + 30 +0.0 + 11 +26749.999948 + 21 +19425.798525 + 31 +0.0 + 0 +LINE + 5 +1D83 + 8 +0 + 62 + 0 + 10 +26774.999948 + 20 +19469.099795 + 30 +0.0 + 11 +26787.499948 + 21 +19490.75043 + 31 +0.0 + 0 +LINE + 5 +1D84 + 8 +0 + 62 + 0 + 10 +26812.499948 + 20 +19534.0517 + 30 +0.0 + 11 +26820.0 + 21 +19547.042171 + 31 +0.0 + 0 +LINE + 5 +1D85 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +19365.176837 + 30 +0.0 + 11 +26749.999948 + 21 +19382.497254 + 31 +0.0 + 0 +LINE + 5 +1D86 + 8 +0 + 62 + 0 + 10 +26774.999948 + 20 +19425.798525 + 30 +0.0 + 11 +26787.499948 + 21 +19447.44916 + 31 +0.0 + 0 +LINE + 5 +1D87 + 8 +0 + 62 + 0 + 10 +26812.499948 + 20 +19490.75043 + 30 +0.0 + 11 +26820.0 + 21 +19503.740901 + 31 +0.0 + 0 +LINE + 5 +1D88 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +19321.875567 + 30 +0.0 + 11 +26749.999948 + 21 +19339.195984 + 31 +0.0 + 0 +LINE + 5 +1D89 + 8 +0 + 62 + 0 + 10 +26774.999948 + 20 +19382.497254 + 30 +0.0 + 11 +26787.499948 + 21 +19404.14789 + 31 +0.0 + 0 +LINE + 5 +1D8A + 8 +0 + 62 + 0 + 10 +26812.499948 + 20 +19447.44916 + 30 +0.0 + 11 +26820.0 + 21 +19460.439631 + 31 +0.0 + 0 +LINE + 5 +1D8B + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +19278.574297 + 30 +0.0 + 11 +26749.999948 + 21 +19295.894714 + 31 +0.0 + 0 +LINE + 5 +1D8C + 8 +0 + 62 + 0 + 10 +26774.999948 + 20 +19339.195984 + 30 +0.0 + 11 +26787.499948 + 21 +19360.846619 + 31 +0.0 + 0 +LINE + 5 +1D8D + 8 +0 + 62 + 0 + 10 +26812.499948 + 20 +19404.14789 + 30 +0.0 + 11 +26820.0 + 21 +19417.138361 + 31 +0.0 + 0 +LINE + 5 +1D8E + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +19235.273027 + 30 +0.0 + 11 +26749.999948 + 21 +19252.593444 + 31 +0.0 + 0 +LINE + 5 +1D8F + 8 +0 + 62 + 0 + 10 +26774.999948 + 20 +19295.894714 + 30 +0.0 + 11 +26787.499948 + 21 +19317.545349 + 31 +0.0 + 0 +LINE + 5 +1D90 + 8 +0 + 62 + 0 + 10 +26812.499948 + 20 +19360.846619 + 30 +0.0 + 11 +26820.0 + 21 +19373.837091 + 31 +0.0 + 0 +LINE + 5 +1D91 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +19191.971757 + 30 +0.0 + 11 +26749.999948 + 21 +19209.292174 + 31 +0.0 + 0 +LINE + 5 +1D92 + 8 +0 + 62 + 0 + 10 +26774.999948 + 20 +19252.593444 + 30 +0.0 + 11 +26787.499948 + 21 +19274.244079 + 31 +0.0 + 0 +LINE + 5 +1D93 + 8 +0 + 62 + 0 + 10 +26812.499948 + 20 +19317.545349 + 30 +0.0 + 11 +26820.0 + 21 +19330.535821 + 31 +0.0 + 0 +LINE + 5 +1D94 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +19148.670487 + 30 +0.0 + 11 +26749.999947 + 21 +19165.990904 + 31 +0.0 + 0 +LINE + 5 +1D95 + 8 +0 + 62 + 0 + 10 +26774.999947 + 20 +19209.292174 + 30 +0.0 + 11 +26787.499947 + 21 +19230.942809 + 31 +0.0 + 0 +LINE + 5 +1D96 + 8 +0 + 62 + 0 + 10 +26812.499947 + 20 +19274.244079 + 30 +0.0 + 11 +26820.0 + 21 +19287.234551 + 31 +0.0 + 0 +LINE + 5 +1D97 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +19105.369217 + 30 +0.0 + 11 +26749.999947 + 21 +19122.689634 + 31 +0.0 + 0 +LINE + 5 +1D98 + 8 +0 + 62 + 0 + 10 +26774.999947 + 20 +19165.990904 + 30 +0.0 + 11 +26787.499947 + 21 +19187.641539 + 31 +0.0 + 0 +LINE + 5 +1D99 + 8 +0 + 62 + 0 + 10 +26812.499947 + 20 +19230.942809 + 30 +0.0 + 11 +26820.0 + 21 +19243.933281 + 31 +0.0 + 0 +LINE + 5 +1D9A + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +19062.067947 + 30 +0.0 + 11 +26749.999947 + 21 +19079.388363 + 31 +0.0 + 0 +LINE + 5 +1D9B + 8 +0 + 62 + 0 + 10 +26774.999947 + 20 +19122.689634 + 30 +0.0 + 11 +26787.499947 + 21 +19144.340269 + 31 +0.0 + 0 +LINE + 5 +1D9C + 8 +0 + 62 + 0 + 10 +26812.499947 + 20 +19187.641539 + 30 +0.0 + 11 +26820.0 + 21 +19200.632011 + 31 +0.0 + 0 +LINE + 5 +1D9D + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +19018.766677 + 30 +0.0 + 11 +26749.999947 + 21 +19036.087093 + 31 +0.0 + 0 +LINE + 5 +1D9E + 8 +0 + 62 + 0 + 10 +26774.999947 + 20 +19079.388363 + 30 +0.0 + 11 +26787.499947 + 21 +19101.038999 + 31 +0.0 + 0 +LINE + 5 +1D9F + 8 +0 + 62 + 0 + 10 +26812.499947 + 20 +19144.340269 + 30 +0.0 + 11 +26820.0 + 21 +19157.330741 + 31 +0.0 + 0 +LINE + 5 +1DA0 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +18975.465407 + 30 +0.0 + 11 +26749.999947 + 21 +18992.785823 + 31 +0.0 + 0 +LINE + 5 +1DA1 + 8 +0 + 62 + 0 + 10 +26774.999947 + 20 +19036.087093 + 30 +0.0 + 11 +26787.499947 + 21 +19057.737728 + 31 +0.0 + 0 +LINE + 5 +1DA2 + 8 +0 + 62 + 0 + 10 +26812.499947 + 20 +19101.038999 + 30 +0.0 + 11 +26820.0 + 21 +19114.029471 + 31 +0.0 + 0 +LINE + 5 +1DA3 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +18932.164137 + 30 +0.0 + 11 +26749.999947 + 21 +18949.484553 + 31 +0.0 + 0 +LINE + 5 +1DA4 + 8 +0 + 62 + 0 + 10 +26774.999947 + 20 +18992.785823 + 30 +0.0 + 11 +26787.499947 + 21 +19014.436458 + 31 +0.0 + 0 +LINE + 5 +1DA5 + 8 +0 + 62 + 0 + 10 +26812.499947 + 20 +19057.737728 + 30 +0.0 + 11 +26820.0 + 21 +19070.728201 + 31 +0.0 + 0 +LINE + 5 +1DA6 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +18888.862867 + 30 +0.0 + 11 +26749.999947 + 21 +18906.183283 + 31 +0.0 + 0 +LINE + 5 +1DA7 + 8 +0 + 62 + 0 + 10 +26774.999947 + 20 +18949.484553 + 30 +0.0 + 11 +26787.499947 + 21 +18971.135188 + 31 +0.0 + 0 +LINE + 5 +1DA8 + 8 +0 + 62 + 0 + 10 +26812.499947 + 20 +19014.436458 + 30 +0.0 + 11 +26820.0 + 21 +19027.426931 + 31 +0.0 + 0 +LINE + 5 +1DA9 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +18845.561597 + 30 +0.0 + 11 +26749.999947 + 21 +18862.882013 + 31 +0.0 + 0 +LINE + 5 +1DAA + 8 +0 + 62 + 0 + 10 +26774.999947 + 20 +18906.183283 + 30 +0.0 + 11 +26787.499947 + 21 +18927.833918 + 31 +0.0 + 0 +LINE + 5 +1DAB + 8 +0 + 62 + 0 + 10 +26812.499947 + 20 +18971.135188 + 30 +0.0 + 11 +26820.0 + 21 +18984.125661 + 31 +0.0 + 0 +LINE + 5 +1DAC + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +18802.260327 + 30 +0.0 + 11 +26749.999947 + 21 +18819.580743 + 31 +0.0 + 0 +LINE + 5 +1DAD + 8 +0 + 62 + 0 + 10 +26774.999947 + 20 +18862.882013 + 30 +0.0 + 11 +26787.499947 + 21 +18884.532648 + 31 +0.0 + 0 +LINE + 5 +1DAE + 8 +0 + 62 + 0 + 10 +26812.499947 + 20 +18927.833918 + 30 +0.0 + 11 +26820.0 + 21 +18940.824391 + 31 +0.0 + 0 +LINE + 5 +1DAF + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +18758.959057 + 30 +0.0 + 11 +26749.999947 + 21 +18776.279472 + 31 +0.0 + 0 +LINE + 5 +1DB0 + 8 +0 + 62 + 0 + 10 +26774.999947 + 20 +18819.580743 + 30 +0.0 + 11 +26787.499947 + 21 +18841.231378 + 31 +0.0 + 0 +LINE + 5 +1DB1 + 8 +0 + 62 + 0 + 10 +26812.499947 + 20 +18884.532648 + 30 +0.0 + 11 +26820.0 + 21 +18897.523121 + 31 +0.0 + 0 +LINE + 5 +1DB2 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +18715.657787 + 30 +0.0 + 11 +26749.999947 + 21 +18732.978202 + 31 +0.0 + 0 +LINE + 5 +1DB3 + 8 +0 + 62 + 0 + 10 +26774.999947 + 20 +18776.279472 + 30 +0.0 + 11 +26787.499947 + 21 +18797.930108 + 31 +0.0 + 0 +LINE + 5 +1DB4 + 8 +0 + 62 + 0 + 10 +26812.499947 + 20 +18841.231378 + 30 +0.0 + 11 +26820.0 + 21 +18854.221851 + 31 +0.0 + 0 +LINE + 5 +1DB5 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +18672.356517 + 30 +0.0 + 11 +26749.999947 + 21 +18689.676932 + 31 +0.0 + 0 +LINE + 5 +1DB6 + 8 +0 + 62 + 0 + 10 +26774.999947 + 20 +18732.978202 + 30 +0.0 + 11 +26787.499947 + 21 +18754.628837 + 31 +0.0 + 0 +LINE + 5 +1DB7 + 8 +0 + 62 + 0 + 10 +26812.499947 + 20 +18797.930108 + 30 +0.0 + 11 +26820.0 + 21 +18810.920581 + 31 +0.0 + 0 +LINE + 5 +1DB8 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +18629.055247 + 30 +0.0 + 11 +26749.999946 + 21 +18646.375662 + 31 +0.0 + 0 +LINE + 5 +1DB9 + 8 +0 + 62 + 0 + 10 +26774.999946 + 20 +18689.676932 + 30 +0.0 + 11 +26787.499946 + 21 +18711.327567 + 31 +0.0 + 0 +LINE + 5 +1DBA + 8 +0 + 62 + 0 + 10 +26812.499946 + 20 +18754.628837 + 30 +0.0 + 11 +26820.0 + 21 +18767.619311 + 31 +0.0 + 0 +LINE + 5 +1DBB + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +18585.753977 + 30 +0.0 + 11 +26749.999946 + 21 +18603.074392 + 31 +0.0 + 0 +LINE + 5 +1DBC + 8 +0 + 62 + 0 + 10 +26774.999946 + 20 +18646.375662 + 30 +0.0 + 11 +26787.499946 + 21 +18668.026297 + 31 +0.0 + 0 +LINE + 5 +1DBD + 8 +0 + 62 + 0 + 10 +26812.499946 + 20 +18711.327567 + 30 +0.0 + 11 +26820.0 + 21 +18724.318041 + 31 +0.0 + 0 +LINE + 5 +1DBE + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +18542.452707 + 30 +0.0 + 11 +26749.999946 + 21 +18559.773122 + 31 +0.0 + 0 +LINE + 5 +1DBF + 8 +0 + 62 + 0 + 10 +26774.999946 + 20 +18603.074392 + 30 +0.0 + 11 +26787.499946 + 21 +18624.725027 + 31 +0.0 + 0 +LINE + 5 +1DC0 + 8 +0 + 62 + 0 + 10 +26812.499946 + 20 +18668.026297 + 30 +0.0 + 11 +26820.0 + 21 +18681.016771 + 31 +0.0 + 0 +LINE + 5 +1DC1 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +18499.151437 + 30 +0.0 + 11 +26749.999946 + 21 +18516.471852 + 31 +0.0 + 0 +LINE + 5 +1DC2 + 8 +0 + 62 + 0 + 10 +26774.999946 + 20 +18559.773122 + 30 +0.0 + 11 +26787.499946 + 21 +18581.423757 + 31 +0.0 + 0 +LINE + 5 +1DC3 + 8 +0 + 62 + 0 + 10 +26812.499946 + 20 +18624.725027 + 30 +0.0 + 11 +26820.0 + 21 +18637.715501 + 31 +0.0 + 0 +LINE + 5 +1DC4 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +18455.850167 + 30 +0.0 + 11 +26749.999946 + 21 +18473.170581 + 31 +0.0 + 0 +LINE + 5 +1DC5 + 8 +0 + 62 + 0 + 10 +26774.999946 + 20 +18516.471852 + 30 +0.0 + 11 +26787.499946 + 21 +18538.122487 + 31 +0.0 + 0 +LINE + 5 +1DC6 + 8 +0 + 62 + 0 + 10 +26812.499946 + 20 +18581.423757 + 30 +0.0 + 11 +26820.0 + 21 +18594.414231 + 31 +0.0 + 0 +LINE + 5 +1DC7 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +18412.548897 + 30 +0.0 + 11 +26749.999946 + 21 +18429.869311 + 31 +0.0 + 0 +LINE + 5 +1DC8 + 8 +0 + 62 + 0 + 10 +26774.999946 + 20 +18473.170581 + 30 +0.0 + 11 +26787.499946 + 21 +18494.821217 + 31 +0.0 + 0 +LINE + 5 +1DC9 + 8 +0 + 62 + 0 + 10 +26812.499946 + 20 +18538.122487 + 30 +0.0 + 11 +26820.0 + 21 +18551.112961 + 31 +0.0 + 0 +LINE + 5 +1DCA + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +18369.247627 + 30 +0.0 + 11 +26749.999946 + 21 +18386.568041 + 31 +0.0 + 0 +LINE + 5 +1DCB + 8 +0 + 62 + 0 + 10 +26774.999946 + 20 +18429.869311 + 30 +0.0 + 11 +26787.499946 + 21 +18451.519946 + 31 +0.0 + 0 +LINE + 5 +1DCC + 8 +0 + 62 + 0 + 10 +26812.499946 + 20 +18494.821217 + 30 +0.0 + 11 +26820.0 + 21 +18507.811691 + 31 +0.0 + 0 +LINE + 5 +1DCD + 8 +0 + 62 + 0 + 10 +26774.999946 + 20 +18386.568041 + 30 +0.0 + 11 +26787.499946 + 21 +18408.218676 + 31 +0.0 + 0 +LINE + 5 +1DCE + 8 +0 + 62 + 0 + 10 +26812.499946 + 20 +18451.519946 + 30 +0.0 + 11 +26820.0 + 21 +18464.510421 + 31 +0.0 + 0 +LINE + 5 +1DCF + 8 +0 + 62 + 0 + 10 +26786.825944 + 20 +18363.75 + 30 +0.0 + 11 +26787.499946 + 21 +18364.917406 + 31 +0.0 + 0 +LINE + 5 +1DD0 + 8 +0 + 62 + 0 + 10 +26812.499946 + 20 +18408.218676 + 30 +0.0 + 11 +26820.0 + 21 +18421.209151 + 31 +0.0 + 0 +LINE + 5 +1DD1 + 8 +0 + 62 + 0 + 10 +26812.499946 + 20 +18364.917406 + 30 +0.0 + 11 +26820.0 + 21 +18377.907881 + 31 +0.0 + 0 +ENDBLK + 5 +1DD2 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X50 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X50 + 1 + + 0 +LINE + 5 +1DD4 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +14857.514465 + 30 +0.0 + 11 +26812.5 + 21 +14857.514465 + 31 +0.0 + 0 +LINE + 5 +1DD5 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +14879.1651 + 30 +0.0 + 11 +26775.0 + 21 +14879.1651 + 31 +0.0 + 0 +LINE + 5 +1DD6 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +14900.815735 + 30 +0.0 + 11 +26812.5 + 21 +14900.815735 + 31 +0.0 + 0 +LINE + 5 +1DD7 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +14922.46637 + 30 +0.0 + 11 +26775.0 + 21 +14922.46637 + 31 +0.0 + 0 +LINE + 5 +1DD8 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +14944.117005 + 30 +0.0 + 11 +26812.5 + 21 +14944.117005 + 31 +0.0 + 0 +LINE + 5 +1DD9 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +14965.76764 + 30 +0.0 + 11 +26775.0 + 21 +14965.76764 + 31 +0.0 + 0 +LINE + 5 +1DDA + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +14987.418275 + 30 +0.0 + 11 +26812.5 + 21 +14987.418275 + 31 +0.0 + 0 +LINE + 5 +1DDB + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +15009.06891 + 30 +0.0 + 11 +26775.0 + 21 +15009.06891 + 31 +0.0 + 0 +LINE + 5 +1DDC + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +15030.719545 + 30 +0.0 + 11 +26812.5 + 21 +15030.719545 + 31 +0.0 + 0 +LINE + 5 +1DDD + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +15052.37018 + 30 +0.0 + 11 +26775.0 + 21 +15052.37018 + 31 +0.0 + 0 +LINE + 5 +1DDE + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +15074.020815 + 30 +0.0 + 11 +26812.5 + 21 +15074.020815 + 31 +0.0 + 0 +LINE + 5 +1DDF + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +15095.67145 + 30 +0.0 + 11 +26775.0 + 21 +15095.67145 + 31 +0.0 + 0 +LINE + 5 +1DE0 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +15117.322085 + 30 +0.0 + 11 +26812.5 + 21 +15117.322085 + 31 +0.0 + 0 +LINE + 5 +1DE1 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +15138.97272 + 30 +0.0 + 11 +26775.0 + 21 +15138.97272 + 31 +0.0 + 0 +LINE + 5 +1DE2 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +15160.623355 + 30 +0.0 + 11 +26812.5 + 21 +15160.623355 + 31 +0.0 + 0 +LINE + 5 +1DE3 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +15182.27399 + 30 +0.0 + 11 +26775.0 + 21 +15182.27399 + 31 +0.0 + 0 +LINE + 5 +1DE4 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +15203.924625 + 30 +0.0 + 11 +26812.5 + 21 +15203.924625 + 31 +0.0 + 0 +LINE + 5 +1DE5 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +15225.57526 + 30 +0.0 + 11 +26775.0 + 21 +15225.57526 + 31 +0.0 + 0 +LINE + 5 +1DE6 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +15247.225895 + 30 +0.0 + 11 +26812.5 + 21 +15247.225895 + 31 +0.0 + 0 +LINE + 5 +1DE7 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +15268.87653 + 30 +0.0 + 11 +26775.0 + 21 +15268.87653 + 31 +0.0 + 0 +LINE + 5 +1DE8 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +15290.527165 + 30 +0.0 + 11 +26812.5 + 21 +15290.527165 + 31 +0.0 + 0 +LINE + 5 +1DE9 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +15312.1778 + 30 +0.0 + 11 +26775.0 + 21 +15312.1778 + 31 +0.0 + 0 +LINE + 5 +1DEA + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +15333.828435 + 30 +0.0 + 11 +26812.5 + 21 +15333.828435 + 31 +0.0 + 0 +LINE + 5 +1DEB + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +15355.47907 + 30 +0.0 + 11 +26775.0 + 21 +15355.47907 + 31 +0.0 + 0 +LINE + 5 +1DEC + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +15377.129705 + 30 +0.0 + 11 +26812.5 + 21 +15377.129705 + 31 +0.0 + 0 +LINE + 5 +1DED + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +15398.78034 + 30 +0.0 + 11 +26775.0 + 21 +15398.78034 + 31 +0.0 + 0 +LINE + 5 +1DEE + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +15420.430975 + 30 +0.0 + 11 +26812.5 + 21 +15420.430975 + 31 +0.0 + 0 +LINE + 5 +1DEF + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +15442.08161 + 30 +0.0 + 11 +26775.0 + 21 +15442.08161 + 31 +0.0 + 0 +LINE + 5 +1DF0 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +15463.732245 + 30 +0.0 + 11 +26812.5 + 21 +15463.732245 + 31 +0.0 + 0 +LINE + 5 +1DF1 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +15485.38288 + 30 +0.0 + 11 +26775.0 + 21 +15485.38288 + 31 +0.0 + 0 +LINE + 5 +1DF2 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +15507.033515 + 30 +0.0 + 11 +26812.5 + 21 +15507.033515 + 31 +0.0 + 0 +LINE + 5 +1DF3 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +15528.68415 + 30 +0.0 + 11 +26775.0 + 21 +15528.68415 + 31 +0.0 + 0 +LINE + 5 +1DF4 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +15550.334785 + 30 +0.0 + 11 +26812.5 + 21 +15550.334785 + 31 +0.0 + 0 +LINE + 5 +1DF5 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +15571.98542 + 30 +0.0 + 11 +26775.0 + 21 +15571.98542 + 31 +0.0 + 0 +LINE + 5 +1DF6 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +15593.636055 + 30 +0.0 + 11 +26812.5 + 21 +15593.636055 + 31 +0.0 + 0 +LINE + 5 +1DF7 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +15615.28669 + 30 +0.0 + 11 +26775.0 + 21 +15615.28669 + 31 +0.0 + 0 +LINE + 5 +1DF8 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +15636.937325 + 30 +0.0 + 11 +26812.5 + 21 +15636.937325 + 31 +0.0 + 0 +LINE + 5 +1DF9 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +15658.58796 + 30 +0.0 + 11 +26775.0 + 21 +15658.58796 + 31 +0.0 + 0 +LINE + 5 +1DFA + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +15680.238595 + 30 +0.0 + 11 +26812.5 + 21 +15680.238595 + 31 +0.0 + 0 +LINE + 5 +1DFB + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +15701.88923 + 30 +0.0 + 11 +26775.0 + 21 +15701.88923 + 31 +0.0 + 0 +LINE + 5 +1DFC + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +15723.539865 + 30 +0.0 + 11 +26812.5 + 21 +15723.539865 + 31 +0.0 + 0 +LINE + 5 +1DFD + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +15745.1905 + 30 +0.0 + 11 +26775.0 + 21 +15745.1905 + 31 +0.0 + 0 +LINE + 5 +1DFE + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +15766.841135 + 30 +0.0 + 11 +26812.5 + 21 +15766.841135 + 31 +0.0 + 0 +LINE + 5 +1DFF + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +15788.49177 + 30 +0.0 + 11 +26775.0 + 21 +15788.49177 + 31 +0.0 + 0 +LINE + 5 +1E00 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +15810.142405 + 30 +0.0 + 11 +26812.5 + 21 +15810.142405 + 31 +0.0 + 0 +LINE + 5 +1E01 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +15831.79304 + 30 +0.0 + 11 +26775.0 + 21 +15831.79304 + 31 +0.0 + 0 +LINE + 5 +1E02 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +15853.443675 + 30 +0.0 + 11 +26812.5 + 21 +15853.443675 + 31 +0.0 + 0 +LINE + 5 +1E03 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +15875.09431 + 30 +0.0 + 11 +26775.0 + 21 +15875.09431 + 31 +0.0 + 0 +LINE + 5 +1E04 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +15896.744945 + 30 +0.0 + 11 +26812.5 + 21 +15896.744945 + 31 +0.0 + 0 +LINE + 5 +1E05 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +15918.39558 + 30 +0.0 + 11 +26775.0 + 21 +15918.39558 + 31 +0.0 + 0 +LINE + 5 +1E06 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +15940.046215 + 30 +0.0 + 11 +26812.5 + 21 +15940.046215 + 31 +0.0 + 0 +LINE + 5 +1E07 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +15961.69685 + 30 +0.0 + 11 +26775.0 + 21 +15961.69685 + 31 +0.0 + 0 +LINE + 5 +1E08 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +15983.347485 + 30 +0.0 + 11 +26812.5 + 21 +15983.347485 + 31 +0.0 + 0 +LINE + 5 +1E09 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +16004.99812 + 30 +0.0 + 11 +26775.0 + 21 +16004.99812 + 31 +0.0 + 0 +LINE + 5 +1E0A + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +16026.648755 + 30 +0.0 + 11 +26812.5 + 21 +16026.648755 + 31 +0.0 + 0 +LINE + 5 +1E0B + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +16048.29939 + 30 +0.0 + 11 +26775.0 + 21 +16048.29939 + 31 +0.0 + 0 +LINE + 5 +1E0C + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +16069.950025 + 30 +0.0 + 11 +26812.5 + 21 +16069.950025 + 31 +0.0 + 0 +LINE + 5 +1E0D + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +16091.60066 + 30 +0.0 + 11 +26775.0 + 21 +16091.60066 + 31 +0.0 + 0 +LINE + 5 +1E0E + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +16113.251295 + 30 +0.0 + 11 +26812.5 + 21 +16113.251295 + 31 +0.0 + 0 +LINE + 5 +1E0F + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +16134.90193 + 30 +0.0 + 11 +26775.0 + 21 +16134.90193 + 31 +0.0 + 0 +LINE + 5 +1E10 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +16156.552565 + 30 +0.0 + 11 +26812.5 + 21 +16156.552565 + 31 +0.0 + 0 +LINE + 5 +1E11 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +16178.2032 + 30 +0.0 + 11 +26775.0 + 21 +16178.2032 + 31 +0.0 + 0 +LINE + 5 +1E12 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +16199.853835 + 30 +0.0 + 11 +26812.5 + 21 +16199.853835 + 31 +0.0 + 0 +LINE + 5 +1E13 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +16221.50447 + 30 +0.0 + 11 +26775.0 + 21 +16221.50447 + 31 +0.0 + 0 +LINE + 5 +1E14 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +16243.155105 + 30 +0.0 + 11 +26812.5 + 21 +16243.155105 + 31 +0.0 + 0 +LINE + 5 +1E15 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +16264.80574 + 30 +0.0 + 11 +26775.0 + 21 +16264.80574 + 31 +0.0 + 0 +LINE + 5 +1E16 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +16286.456375 + 30 +0.0 + 11 +26812.5 + 21 +16286.456375 + 31 +0.0 + 0 +LINE + 5 +1E17 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +16308.10701 + 30 +0.0 + 11 +26775.0 + 21 +16308.10701 + 31 +0.0 + 0 +LINE + 5 +1E18 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +16329.757645 + 30 +0.0 + 11 +26812.5 + 21 +16329.757645 + 31 +0.0 + 0 +LINE + 5 +1E19 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +16351.40828 + 30 +0.0 + 11 +26775.0 + 21 +16351.40828 + 31 +0.0 + 0 +LINE + 5 +1E1A + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +16373.058915 + 30 +0.0 + 11 +26812.5 + 21 +16373.058915 + 31 +0.0 + 0 +LINE + 5 +1E1B + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +16394.70955 + 30 +0.0 + 11 +26775.0 + 21 +16394.70955 + 31 +0.0 + 0 +LINE + 5 +1E1C + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +16416.360185 + 30 +0.0 + 11 +26812.5 + 21 +16416.360185 + 31 +0.0 + 0 +LINE + 5 +1E1D + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +16438.01082 + 30 +0.0 + 11 +26775.0 + 21 +16438.01082 + 31 +0.0 + 0 +LINE + 5 +1E1E + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +16459.661455 + 30 +0.0 + 11 +26812.5 + 21 +16459.661455 + 31 +0.0 + 0 +LINE + 5 +1E1F + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +16481.31209 + 30 +0.0 + 11 +26775.0 + 21 +16481.31209 + 31 +0.0 + 0 +LINE + 5 +1E20 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +16502.962725 + 30 +0.0 + 11 +26812.5 + 21 +16502.962725 + 31 +0.0 + 0 +LINE + 5 +1E21 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +16524.61336 + 30 +0.0 + 11 +26775.0 + 21 +16524.61336 + 31 +0.0 + 0 +LINE + 5 +1E22 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +16546.263995 + 30 +0.0 + 11 +26812.5 + 21 +16546.263995 + 31 +0.0 + 0 +LINE + 5 +1E23 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +16567.91463 + 30 +0.0 + 11 +26775.0 + 21 +16567.91463 + 31 +0.0 + 0 +LINE + 5 +1E24 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +16589.565265 + 30 +0.0 + 11 +26812.5 + 21 +16589.565265 + 31 +0.0 + 0 +LINE + 5 +1E25 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +16611.2159 + 30 +0.0 + 11 +26775.0 + 21 +16611.2159 + 31 +0.0 + 0 +LINE + 5 +1E26 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +16632.866535 + 30 +0.0 + 11 +26812.5 + 21 +16632.866535 + 31 +0.0 + 0 +LINE + 5 +1E27 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +16654.51717 + 30 +0.0 + 11 +26775.0 + 21 +16654.51717 + 31 +0.0 + 0 +LINE + 5 +1E28 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +16676.167805 + 30 +0.0 + 11 +26812.5 + 21 +16676.167805 + 31 +0.0 + 0 +LINE + 5 +1E29 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +16697.81844 + 30 +0.0 + 11 +26775.0 + 21 +16697.81844 + 31 +0.0 + 0 +LINE + 5 +1E2A + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +16719.469075 + 30 +0.0 + 11 +26812.5 + 21 +16719.469075 + 31 +0.0 + 0 +LINE + 5 +1E2B + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +16741.11971 + 30 +0.0 + 11 +26775.0 + 21 +16741.11971 + 31 +0.0 + 0 +LINE + 5 +1E2C + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +16762.770345 + 30 +0.0 + 11 +26812.5 + 21 +16762.770345 + 31 +0.0 + 0 +LINE + 5 +1E2D + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +16784.42098 + 30 +0.0 + 11 +26775.0 + 21 +16784.42098 + 31 +0.0 + 0 +LINE + 5 +1E2E + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +16806.071615 + 30 +0.0 + 11 +26812.5 + 21 +16806.071615 + 31 +0.0 + 0 +LINE + 5 +1E2F + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +16827.72225 + 30 +0.0 + 11 +26775.0 + 21 +16827.72225 + 31 +0.0 + 0 +LINE + 5 +1E30 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +16849.372885 + 30 +0.0 + 11 +26812.5 + 21 +16849.372885 + 31 +0.0 + 0 +LINE + 5 +1E31 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +16871.02352 + 30 +0.0 + 11 +26775.0 + 21 +16871.02352 + 31 +0.0 + 0 +LINE + 5 +1E32 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +16892.674155 + 30 +0.0 + 11 +26812.5 + 21 +16892.674155 + 31 +0.0 + 0 +LINE + 5 +1E33 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +16914.32479 + 30 +0.0 + 11 +26775.0 + 21 +16914.32479 + 31 +0.0 + 0 +LINE + 5 +1E34 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +16935.975425 + 30 +0.0 + 11 +26812.5 + 21 +16935.975425 + 31 +0.0 + 0 +LINE + 5 +1E35 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +16957.62606 + 30 +0.0 + 11 +26775.0 + 21 +16957.62606 + 31 +0.0 + 0 +LINE + 5 +1E36 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +16979.276695 + 30 +0.0 + 11 +26812.5 + 21 +16979.276695 + 31 +0.0 + 0 +LINE + 5 +1E37 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +17000.92733 + 30 +0.0 + 11 +26775.0 + 21 +17000.92733 + 31 +0.0 + 0 +LINE + 5 +1E38 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +17022.577965 + 30 +0.0 + 11 +26812.5 + 21 +17022.577965 + 31 +0.0 + 0 +LINE + 5 +1E39 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +17044.2286 + 30 +0.0 + 11 +26775.0 + 21 +17044.2286 + 31 +0.0 + 0 +LINE + 5 +1E3A + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +17065.879235 + 30 +0.0 + 11 +26812.5 + 21 +17065.879235 + 31 +0.0 + 0 +LINE + 5 +1E3B + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +17087.52987 + 30 +0.0 + 11 +26775.0 + 21 +17087.52987 + 31 +0.0 + 0 +LINE + 5 +1E3C + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +17109.180505 + 30 +0.0 + 11 +26812.5 + 21 +17109.180505 + 31 +0.0 + 0 +LINE + 5 +1E3D + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +17130.83114 + 30 +0.0 + 11 +26775.0 + 21 +17130.83114 + 31 +0.0 + 0 +LINE + 5 +1E3E + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +17152.481775 + 30 +0.0 + 11 +26812.5 + 21 +17152.481775 + 31 +0.0 + 0 +LINE + 5 +1E3F + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +17174.13241 + 30 +0.0 + 11 +26775.0 + 21 +17174.13241 + 31 +0.0 + 0 +LINE + 5 +1E40 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +17195.783045 + 30 +0.0 + 11 +26812.5 + 21 +17195.783045 + 31 +0.0 + 0 +LINE + 5 +1E41 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +17217.43368 + 30 +0.0 + 11 +26775.0 + 21 +17217.43368 + 31 +0.0 + 0 +LINE + 5 +1E42 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +17239.084315 + 30 +0.0 + 11 +26812.5 + 21 +17239.084315 + 31 +0.0 + 0 +LINE + 5 +1E43 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +17260.73495 + 30 +0.0 + 11 +26775.0 + 21 +17260.73495 + 31 +0.0 + 0 +LINE + 5 +1E44 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +17282.385585 + 30 +0.0 + 11 +26812.5 + 21 +17282.385585 + 31 +0.0 + 0 +LINE + 5 +1E45 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +17304.03622 + 30 +0.0 + 11 +26775.0 + 21 +17304.03622 + 31 +0.0 + 0 +LINE + 5 +1E46 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +17325.686855 + 30 +0.0 + 11 +26812.5 + 21 +17325.686855 + 31 +0.0 + 0 +LINE + 5 +1E47 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +17347.33749 + 30 +0.0 + 11 +26775.0 + 21 +17347.33749 + 31 +0.0 + 0 +LINE + 5 +1E48 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +17368.988125 + 30 +0.0 + 11 +26812.5 + 21 +17368.988125 + 31 +0.0 + 0 +LINE + 5 +1E49 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +17390.63876 + 30 +0.0 + 11 +26775.0 + 21 +17390.63876 + 31 +0.0 + 0 +LINE + 5 +1E4A + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +17412.289395 + 30 +0.0 + 11 +26812.5 + 21 +17412.289395 + 31 +0.0 + 0 +LINE + 5 +1E4B + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +17433.94003 + 30 +0.0 + 11 +26775.0 + 21 +17433.94003 + 31 +0.0 + 0 +LINE + 5 +1E4C + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +17455.590665 + 30 +0.0 + 11 +26812.5 + 21 +17455.590665 + 31 +0.0 + 0 +LINE + 5 +1E4D + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +17477.2413 + 30 +0.0 + 11 +26775.0 + 21 +17477.2413 + 31 +0.0 + 0 +LINE + 5 +1E4E + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +17498.891935 + 30 +0.0 + 11 +26812.5 + 21 +17498.891935 + 31 +0.0 + 0 +LINE + 5 +1E4F + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +17520.54257 + 30 +0.0 + 11 +26775.0 + 21 +17520.54257 + 31 +0.0 + 0 +LINE + 5 +1E50 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +17542.193205 + 30 +0.0 + 11 +26812.5 + 21 +17542.193205 + 31 +0.0 + 0 +LINE + 5 +1E51 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +17563.84384 + 30 +0.0 + 11 +26775.0 + 21 +17563.84384 + 31 +0.0 + 0 +LINE + 5 +1E52 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +17585.494475 + 30 +0.0 + 11 +26812.5 + 21 +17585.494475 + 31 +0.0 + 0 +LINE + 5 +1E53 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +17607.14511 + 30 +0.0 + 11 +26775.0 + 21 +17607.14511 + 31 +0.0 + 0 +LINE + 5 +1E54 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +17628.795745 + 30 +0.0 + 11 +26812.5 + 21 +17628.795745 + 31 +0.0 + 0 +LINE + 5 +1E55 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +17650.44638 + 30 +0.0 + 11 +26775.0 + 21 +17650.44638 + 31 +0.0 + 0 +LINE + 5 +1E56 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +17672.097015 + 30 +0.0 + 11 +26812.5 + 21 +17672.097015 + 31 +0.0 + 0 +LINE + 5 +1E57 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +17693.74765 + 30 +0.0 + 11 +26775.0 + 21 +17693.74765 + 31 +0.0 + 0 +LINE + 5 +1E58 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +17715.398285 + 30 +0.0 + 11 +26812.5 + 21 +17715.398285 + 31 +0.0 + 0 +LINE + 5 +1E59 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +17737.04892 + 30 +0.0 + 11 +26775.0 + 21 +17737.04892 + 31 +0.0 + 0 +LINE + 5 +1E5A + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +14835.86383 + 30 +0.0 + 11 +26775.0 + 21 +14835.86383 + 31 +0.0 + 0 +LINE + 5 +1E5B + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +14814.213195 + 30 +0.0 + 11 +26812.5 + 21 +14814.213195 + 31 +0.0 + 0 +LINE + 5 +1E5C + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +14792.56256 + 30 +0.0 + 11 +26775.0 + 21 +14792.56256 + 31 +0.0 + 0 +LINE + 5 +1E5D + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +14770.911925 + 30 +0.0 + 11 +26812.5 + 21 +14770.911925 + 31 +0.0 + 0 +LINE + 5 +1E5E + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +14749.26129 + 30 +0.0 + 11 +26775.0 + 21 +14749.26129 + 31 +0.0 + 0 +LINE + 5 +1E5F + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +14727.610655 + 30 +0.0 + 11 +26812.5 + 21 +14727.610655 + 31 +0.0 + 0 +LINE + 5 +1E60 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +14705.96002 + 30 +0.0 + 11 +26775.0 + 21 +14705.96002 + 31 +0.0 + 0 +LINE + 5 +1E61 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +14684.309385 + 30 +0.0 + 11 +26812.5 + 21 +14684.309385 + 31 +0.0 + 0 +LINE + 5 +1E62 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +14662.65875 + 30 +0.0 + 11 +26775.0 + 21 +14662.65875 + 31 +0.0 + 0 +LINE + 5 +1E63 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +14641.008115 + 30 +0.0 + 11 +26812.5 + 21 +14641.008115 + 31 +0.0 + 0 +LINE + 5 +1E64 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +14619.35748 + 30 +0.0 + 11 +26775.0 + 21 +14619.35748 + 31 +0.0 + 0 +LINE + 5 +1E65 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +14597.706845 + 30 +0.0 + 11 +26812.5 + 21 +14597.706845 + 31 +0.0 + 0 +LINE + 5 +1E66 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +14576.05621 + 30 +0.0 + 11 +26775.0 + 21 +14576.05621 + 31 +0.0 + 0 +LINE + 5 +1E67 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +14554.405575 + 30 +0.0 + 11 +26812.5 + 21 +14554.405575 + 31 +0.0 + 0 +LINE + 5 +1E68 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +14532.75494 + 30 +0.0 + 11 +26775.0 + 21 +14532.75494 + 31 +0.0 + 0 +LINE + 5 +1E69 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +14511.104305 + 30 +0.0 + 11 +26812.5 + 21 +14511.104305 + 31 +0.0 + 0 +LINE + 5 +1E6A + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +14489.45367 + 30 +0.0 + 11 +26775.0 + 21 +14489.45367 + 31 +0.0 + 0 +LINE + 5 +1E6B + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +14467.803035 + 30 +0.0 + 11 +26812.5 + 21 +14467.803035 + 31 +0.0 + 0 +LINE + 5 +1E6C + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +14446.1524 + 30 +0.0 + 11 +26775.0 + 21 +14446.1524 + 31 +0.0 + 0 +LINE + 5 +1E6D + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +14424.501765 + 30 +0.0 + 11 +26812.5 + 21 +14424.501765 + 31 +0.0 + 0 +LINE + 5 +1E6E + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +14402.85113 + 30 +0.0 + 11 +26775.0 + 21 +14402.85113 + 31 +0.0 + 0 +LINE + 5 +1E6F + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +14381.200495 + 30 +0.0 + 11 +26812.5 + 21 +14381.200495 + 31 +0.0 + 0 +LINE + 5 +1E70 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +14359.54986 + 30 +0.0 + 11 +26775.0 + 21 +14359.54986 + 31 +0.0 + 0 +LINE + 5 +1E71 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +14337.899225 + 30 +0.0 + 11 +26812.5 + 21 +14337.899225 + 31 +0.0 + 0 +LINE + 5 +1E72 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +14316.24859 + 30 +0.0 + 11 +26775.0 + 21 +14316.24859 + 31 +0.0 + 0 +LINE + 5 +1E73 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +14294.597955 + 30 +0.0 + 11 +26812.5 + 21 +14294.597955 + 31 +0.0 + 0 +LINE + 5 +1E74 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +14272.94732 + 30 +0.0 + 11 +26775.0 + 21 +14272.94732 + 31 +0.0 + 0 +LINE + 5 +1E75 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +14251.296685 + 30 +0.0 + 11 +26812.5 + 21 +14251.296685 + 31 +0.0 + 0 +LINE + 5 +1E76 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +14229.64605 + 30 +0.0 + 11 +26775.0 + 21 +14229.64605 + 31 +0.0 + 0 +LINE + 5 +1E77 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +14207.995415 + 30 +0.0 + 11 +26812.5 + 21 +14207.995415 + 31 +0.0 + 0 +LINE + 5 +1E78 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +14186.34478 + 30 +0.0 + 11 +26775.0 + 21 +14186.34478 + 31 +0.0 + 0 +LINE + 5 +1E79 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +14164.694145 + 30 +0.0 + 11 +26812.5 + 21 +14164.694145 + 31 +0.0 + 0 +LINE + 5 +1E7A + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +14143.04351 + 30 +0.0 + 11 +26775.0 + 21 +14143.04351 + 31 +0.0 + 0 +LINE + 5 +1E7B + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +14121.392875 + 30 +0.0 + 11 +26812.5 + 21 +14121.392875 + 31 +0.0 + 0 +LINE + 5 +1E7C + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +14099.74224 + 30 +0.0 + 11 +26775.0 + 21 +14099.74224 + 31 +0.0 + 0 +LINE + 5 +1E7D + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +14078.091605 + 30 +0.0 + 11 +26812.5 + 21 +14078.091605 + 31 +0.0 + 0 +LINE + 5 +1E7E + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +14056.44097 + 30 +0.0 + 11 +26775.0 + 21 +14056.44097 + 31 +0.0 + 0 +LINE + 5 +1E7F + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +14034.790335 + 30 +0.0 + 11 +26812.5 + 21 +14034.790335 + 31 +0.0 + 0 +LINE + 5 +1E80 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +14013.1397 + 30 +0.0 + 11 +26775.0 + 21 +14013.1397 + 31 +0.0 + 0 +LINE + 5 +1E81 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +13991.489065 + 30 +0.0 + 11 +26812.5 + 21 +13991.489065 + 31 +0.0 + 0 +LINE + 5 +1E82 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +13969.83843 + 30 +0.0 + 11 +26775.0 + 21 +13969.83843 + 31 +0.0 + 0 +LINE + 5 +1E83 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +13948.187795 + 30 +0.0 + 11 +26812.5 + 21 +13948.187795 + 31 +0.0 + 0 +LINE + 5 +1E84 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +13926.53716 + 30 +0.0 + 11 +26775.0 + 21 +13926.53716 + 31 +0.0 + 0 +LINE + 5 +1E85 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +13904.886525 + 30 +0.0 + 11 +26812.5 + 21 +13904.886525 + 31 +0.0 + 0 +LINE + 5 +1E86 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +13883.23589 + 30 +0.0 + 11 +26775.0 + 21 +13883.23589 + 31 +0.0 + 0 +LINE + 5 +1E87 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +13861.585255 + 30 +0.0 + 11 +26812.5 + 21 +13861.585255 + 31 +0.0 + 0 +LINE + 5 +1E88 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +13839.93462 + 30 +0.0 + 11 +26775.0 + 21 +13839.93462 + 31 +0.0 + 0 +LINE + 5 +1E89 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +13818.283985 + 30 +0.0 + 11 +26812.5 + 21 +13818.283985 + 31 +0.0 + 0 +LINE + 5 +1E8A + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +13796.63335 + 30 +0.0 + 11 +26775.0 + 21 +13796.63335 + 31 +0.0 + 0 +LINE + 5 +1E8B + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +13774.982715 + 30 +0.0 + 11 +26812.5 + 21 +13774.982715 + 31 +0.0 + 0 +LINE + 5 +1E8C + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +13753.33208 + 30 +0.0 + 11 +26775.0 + 21 +13753.33208 + 31 +0.0 + 0 +LINE + 5 +1E8D + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +13731.681445 + 30 +0.0 + 11 +26812.5 + 21 +13731.681445 + 31 +0.0 + 0 +LINE + 5 +1E8E + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +13710.03081 + 30 +0.0 + 11 +26775.0 + 21 +13710.03081 + 31 +0.0 + 0 +LINE + 5 +1E8F + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +13688.380175 + 30 +0.0 + 11 +26812.5 + 21 +13688.380175 + 31 +0.0 + 0 +LINE + 5 +1E90 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +13666.72954 + 30 +0.0 + 11 +26775.0 + 21 +13666.72954 + 31 +0.0 + 0 +LINE + 5 +1E91 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +13645.078905 + 30 +0.0 + 11 +26812.5 + 21 +13645.078905 + 31 +0.0 + 0 +LINE + 5 +1E92 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +13623.42827 + 30 +0.0 + 11 +26775.0 + 21 +13623.42827 + 31 +0.0 + 0 +LINE + 5 +1E93 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +13601.777635 + 30 +0.0 + 11 +26812.5 + 21 +13601.777635 + 31 +0.0 + 0 +LINE + 5 +1E94 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +13580.127 + 30 +0.0 + 11 +26775.0 + 21 +13580.127 + 31 +0.0 + 0 +LINE + 5 +1E95 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +13558.476365 + 30 +0.0 + 11 +26812.5 + 21 +13558.476365 + 31 +0.0 + 0 +LINE + 5 +1E96 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +13536.82573 + 30 +0.0 + 11 +26775.0 + 21 +13536.82573 + 31 +0.0 + 0 +LINE + 5 +1E97 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +13515.175095 + 30 +0.0 + 11 +26812.5 + 21 +13515.175095 + 31 +0.0 + 0 +LINE + 5 +1E98 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +13493.52446 + 30 +0.0 + 11 +26775.0 + 21 +13493.52446 + 31 +0.0 + 0 +LINE + 5 +1E99 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +13471.873825 + 30 +0.0 + 11 +26812.5 + 21 +13471.873825 + 31 +0.0 + 0 +LINE + 5 +1E9A + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +13450.22319 + 30 +0.0 + 11 +26775.0 + 21 +13450.22319 + 31 +0.0 + 0 +LINE + 5 +1E9B + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +13428.572555 + 30 +0.0 + 11 +26812.5 + 21 +13428.572555 + 31 +0.0 + 0 +LINE + 5 +1E9C + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +13406.92192 + 30 +0.0 + 11 +26775.0 + 21 +13406.92192 + 31 +0.0 + 0 +LINE + 5 +1E9D + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +13385.271285 + 30 +0.0 + 11 +26812.5 + 21 +13385.271285 + 31 +0.0 + 0 +LINE + 5 +1E9E + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +13363.62065 + 30 +0.0 + 11 +26775.0 + 21 +13363.62065 + 31 +0.0 + 0 +LINE + 5 +1E9F + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +13341.970015 + 30 +0.0 + 11 +26812.5 + 21 +13341.970015 + 31 +0.0 + 0 +LINE + 5 +1EA0 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +13320.31938 + 30 +0.0 + 11 +26775.0 + 21 +13320.31938 + 31 +0.0 + 0 +LINE + 5 +1EA1 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +13298.668745 + 30 +0.0 + 11 +26812.5 + 21 +13298.668745 + 31 +0.0 + 0 +LINE + 5 +1EA2 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +13277.01811 + 30 +0.0 + 11 +26775.0 + 21 +13277.01811 + 31 +0.0 + 0 +LINE + 5 +1EA3 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +13255.367475 + 30 +0.0 + 11 +26812.5 + 21 +13255.367475 + 31 +0.0 + 0 +LINE + 5 +1EA4 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +13233.71684 + 30 +0.0 + 11 +26775.0 + 21 +13233.71684 + 31 +0.0 + 0 +LINE + 5 +1EA5 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +13212.066205 + 30 +0.0 + 11 +26812.5 + 21 +13212.066205 + 31 +0.0 + 0 +LINE + 5 +1EA6 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +13190.41557 + 30 +0.0 + 11 +26775.0 + 21 +13190.41557 + 31 +0.0 + 0 +LINE + 5 +1EA7 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +13168.764935 + 30 +0.0 + 11 +26812.5 + 21 +13168.764935 + 31 +0.0 + 0 +LINE + 5 +1EA8 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +13147.1143 + 30 +0.0 + 11 +26775.0 + 21 +13147.1143 + 31 +0.0 + 0 +LINE + 5 +1EA9 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +13125.463665 + 30 +0.0 + 11 +26812.5 + 21 +13125.463665 + 31 +0.0 + 0 +LINE + 5 +1EAA + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +13103.81303 + 30 +0.0 + 11 +26775.0 + 21 +13103.81303 + 31 +0.0 + 0 +LINE + 5 +1EAB + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +13082.162395 + 30 +0.0 + 11 +26812.5 + 21 +13082.162395 + 31 +0.0 + 0 +LINE + 5 +1EAC + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +13060.51176 + 30 +0.0 + 11 +26775.0 + 21 +13060.51176 + 31 +0.0 + 0 +LINE + 5 +1EAD + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +13038.861125 + 30 +0.0 + 11 +26812.5 + 21 +13038.861125 + 31 +0.0 + 0 +LINE + 5 +1EAE + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +13017.21049 + 30 +0.0 + 11 +26775.0 + 21 +13017.21049 + 31 +0.0 + 0 +LINE + 5 +1EAF + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +12995.559855 + 30 +0.0 + 11 +26812.5 + 21 +12995.559855 + 31 +0.0 + 0 +LINE + 5 +1EB0 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +12973.90922 + 30 +0.0 + 11 +26775.0 + 21 +12973.90922 + 31 +0.0 + 0 +LINE + 5 +1EB1 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +12952.258585 + 30 +0.0 + 11 +26812.5 + 21 +12952.258585 + 31 +0.0 + 0 +LINE + 5 +1EB2 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +12930.60795 + 30 +0.0 + 11 +26775.0 + 21 +12930.60795 + 31 +0.0 + 0 +LINE + 5 +1EB3 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +12908.957315 + 30 +0.0 + 11 +26812.5 + 21 +12908.957315 + 31 +0.0 + 0 +LINE + 5 +1EB4 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +12887.30668 + 30 +0.0 + 11 +26775.0 + 21 +12887.30668 + 31 +0.0 + 0 +LINE + 5 +1EB5 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +12865.656045 + 30 +0.0 + 11 +26812.5 + 21 +12865.656045 + 31 +0.0 + 0 +LINE + 5 +1EB6 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +12844.00541 + 30 +0.0 + 11 +26775.0 + 21 +12844.00541 + 31 +0.0 + 0 +LINE + 5 +1EB7 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +12822.354775 + 30 +0.0 + 11 +26812.5 + 21 +12822.354775 + 31 +0.0 + 0 +LINE + 5 +1EB8 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +12800.70414 + 30 +0.0 + 11 +26775.0 + 21 +12800.70414 + 31 +0.0 + 0 +LINE + 5 +1EB9 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +12779.053505 + 30 +0.0 + 11 +26812.5 + 21 +12779.053505 + 31 +0.0 + 0 +LINE + 5 +1EBA + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +12757.40287 + 30 +0.0 + 11 +26775.0 + 21 +12757.40287 + 31 +0.0 + 0 +LINE + 5 +1EBB + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +12735.752235 + 30 +0.0 + 11 +26812.5 + 21 +12735.752235 + 31 +0.0 + 0 +LINE + 5 +1EBC + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +12714.1016 + 30 +0.0 + 11 +26775.0 + 21 +12714.1016 + 31 +0.0 + 0 +LINE + 5 +1EBD + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +12692.450965 + 30 +0.0 + 11 +26812.5 + 21 +12692.450965 + 31 +0.0 + 0 +LINE + 5 +1EBE + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +12670.80033 + 30 +0.0 + 11 +26775.0 + 21 +12670.80033 + 31 +0.0 + 0 +LINE + 5 +1EBF + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +12649.149695 + 30 +0.0 + 11 +26812.5 + 21 +12649.149695 + 31 +0.0 + 0 +LINE + 5 +1EC0 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +12627.49906 + 30 +0.0 + 11 +26775.0 + 21 +12627.49906 + 31 +0.0 + 0 +LINE + 5 +1EC1 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +12605.848425 + 30 +0.0 + 11 +26812.5 + 21 +12605.848425 + 31 +0.0 + 0 +LINE + 5 +1EC2 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +12584.19779 + 30 +0.0 + 11 +26775.0 + 21 +12584.19779 + 31 +0.0 + 0 +LINE + 5 +1EC3 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +12562.547155 + 30 +0.0 + 11 +26812.5 + 21 +12562.547155 + 31 +0.0 + 0 +LINE + 5 +1EC4 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +12540.89652 + 30 +0.0 + 11 +26775.0 + 21 +12540.89652 + 31 +0.0 + 0 +LINE + 5 +1EC5 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +12519.245885 + 30 +0.0 + 11 +26812.5 + 21 +12519.245885 + 31 +0.0 + 0 +LINE + 5 +1EC6 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +12497.59525 + 30 +0.0 + 11 +26775.0 + 21 +12497.59525 + 31 +0.0 + 0 +LINE + 5 +1EC7 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +12475.944615 + 30 +0.0 + 11 +26812.5 + 21 +12475.944615 + 31 +0.0 + 0 +LINE + 5 +1EC8 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +12454.29398 + 30 +0.0 + 11 +26775.0 + 21 +12454.29398 + 31 +0.0 + 0 +LINE + 5 +1EC9 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +12432.643345 + 30 +0.0 + 11 +26812.5 + 21 +12432.643345 + 31 +0.0 + 0 +LINE + 5 +1ECA + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +12410.99271 + 30 +0.0 + 11 +26775.0 + 21 +12410.99271 + 31 +0.0 + 0 +LINE + 5 +1ECB + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +12389.342075 + 30 +0.0 + 11 +26812.5 + 21 +12389.342075 + 31 +0.0 + 0 +LINE + 5 +1ECC + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +12367.69144 + 30 +0.0 + 11 +26775.0 + 21 +12367.69144 + 31 +0.0 + 0 +LINE + 5 +1ECD + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +12346.040805 + 30 +0.0 + 11 +26812.5 + 21 +12346.040805 + 31 +0.0 + 0 +LINE + 5 +1ECE + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +12324.39017 + 30 +0.0 + 11 +26775.0 + 21 +12324.39017 + 31 +0.0 + 0 +LINE + 5 +1ECF + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +12302.739535 + 30 +0.0 + 11 +26812.5 + 21 +12302.739535 + 31 +0.0 + 0 +LINE + 5 +1ED0 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +12281.0889 + 30 +0.0 + 11 +26775.0 + 21 +12281.0889 + 31 +0.0 + 0 +LINE + 5 +1ED1 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +12259.438265 + 30 +0.0 + 11 +26812.5 + 21 +12259.438265 + 31 +0.0 + 0 +LINE + 5 +1ED2 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +12237.78763 + 30 +0.0 + 11 +26775.0 + 21 +12237.78763 + 31 +0.0 + 0 +LINE + 5 +1ED3 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +12216.136995 + 30 +0.0 + 11 +26812.5 + 21 +12216.136995 + 31 +0.0 + 0 +LINE + 5 +1ED4 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +12194.48636 + 30 +0.0 + 11 +26775.0 + 21 +12194.48636 + 31 +0.0 + 0 +LINE + 5 +1ED5 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +12172.835725 + 30 +0.0 + 11 +26812.5 + 21 +12172.835725 + 31 +0.0 + 0 +LINE + 5 +1ED6 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +12151.18509 + 30 +0.0 + 11 +26775.0 + 21 +12151.18509 + 31 +0.0 + 0 +LINE + 5 +1ED7 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +12129.534455 + 30 +0.0 + 11 +26812.5 + 21 +12129.534455 + 31 +0.0 + 0 +LINE + 5 +1ED8 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +12107.88382 + 30 +0.0 + 11 +26775.0 + 21 +12107.88382 + 31 +0.0 + 0 +LINE + 5 +1ED9 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +12086.233185 + 30 +0.0 + 11 +26812.5 + 21 +12086.233185 + 31 +0.0 + 0 +LINE + 5 +1EDA + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +12064.58255 + 30 +0.0 + 11 +26775.0 + 21 +12064.58255 + 31 +0.0 + 0 +LINE + 5 +1EDB + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +12042.931915 + 30 +0.0 + 11 +26812.5 + 21 +12042.931915 + 31 +0.0 + 0 +LINE + 5 +1EDC + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +12021.28128 + 30 +0.0 + 11 +26775.0 + 21 +12021.28128 + 31 +0.0 + 0 +LINE + 5 +1EDD + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +11999.630645 + 30 +0.0 + 11 +26812.5 + 21 +11999.630645 + 31 +0.0 + 0 +LINE + 5 +1EDE + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +14757.921379 + 30 +0.0 + 11 +26812.499918 + 21 +14770.911902 + 31 +0.0 + 0 +LINE + 5 +1EDF + 8 +0 + 62 + 0 + 10 +26787.499918 + 20 +14814.213172 + 30 +0.0 + 11 +26774.999918 + 21 +14835.863807 + 31 +0.0 + 0 +LINE + 5 +1EE0 + 8 +0 + 62 + 0 + 10 +26749.999918 + 20 +14879.165077 + 30 +0.0 + 11 +26740.0 + 21 +14896.485443 + 31 +0.0 + 0 +LINE + 5 +1EE1 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +14714.620109 + 30 +0.0 + 11 +26812.499918 + 21 +14727.610632 + 31 +0.0 + 0 +LINE + 5 +1EE2 + 8 +0 + 62 + 0 + 10 +26787.499918 + 20 +14770.911902 + 30 +0.0 + 11 +26774.999918 + 21 +14792.562537 + 31 +0.0 + 0 +LINE + 5 +1EE3 + 8 +0 + 62 + 0 + 10 +26749.999918 + 20 +14835.863807 + 30 +0.0 + 11 +26740.0 + 21 +14853.184173 + 31 +0.0 + 0 +LINE + 5 +1EE4 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +14671.318839 + 30 +0.0 + 11 +26812.499918 + 21 +14684.309362 + 31 +0.0 + 0 +LINE + 5 +1EE5 + 8 +0 + 62 + 0 + 10 +26787.499918 + 20 +14727.610632 + 30 +0.0 + 11 +26774.999918 + 21 +14749.261267 + 31 +0.0 + 0 +LINE + 5 +1EE6 + 8 +0 + 62 + 0 + 10 +26749.999918 + 20 +14792.562537 + 30 +0.0 + 11 +26740.0 + 21 +14809.882903 + 31 +0.0 + 0 +LINE + 5 +1EE7 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +14628.017569 + 30 +0.0 + 11 +26812.499918 + 21 +14641.008091 + 31 +0.0 + 0 +LINE + 5 +1EE8 + 8 +0 + 62 + 0 + 10 +26787.499918 + 20 +14684.309362 + 30 +0.0 + 11 +26774.999918 + 21 +14705.959997 + 31 +0.0 + 0 +LINE + 5 +1EE9 + 8 +0 + 62 + 0 + 10 +26749.999918 + 20 +14749.261267 + 30 +0.0 + 11 +26740.0 + 21 +14766.581633 + 31 +0.0 + 0 +LINE + 5 +1EEA + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +14584.716299 + 30 +0.0 + 11 +26812.499918 + 21 +14597.706821 + 31 +0.0 + 0 +LINE + 5 +1EEB + 8 +0 + 62 + 0 + 10 +26787.499918 + 20 +14641.008091 + 30 +0.0 + 11 +26774.999918 + 21 +14662.658727 + 31 +0.0 + 0 +LINE + 5 +1EEC + 8 +0 + 62 + 0 + 10 +26749.999918 + 20 +14705.959997 + 30 +0.0 + 11 +26740.0 + 21 +14723.280363 + 31 +0.0 + 0 +LINE + 5 +1EED + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +14541.415029 + 30 +0.0 + 11 +26812.499918 + 21 +14554.405551 + 31 +0.0 + 0 +LINE + 5 +1EEE + 8 +0 + 62 + 0 + 10 +26787.499918 + 20 +14597.706821 + 30 +0.0 + 11 +26774.999918 + 21 +14619.357456 + 31 +0.0 + 0 +LINE + 5 +1EEF + 8 +0 + 62 + 0 + 10 +26749.999918 + 20 +14662.658727 + 30 +0.0 + 11 +26740.0 + 21 +14679.979093 + 31 +0.0 + 0 +LINE + 5 +1EF0 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +14498.113759 + 30 +0.0 + 11 +26812.499919 + 21 +14511.104281 + 31 +0.0 + 0 +LINE + 5 +1EF1 + 8 +0 + 62 + 0 + 10 +26787.499919 + 20 +14554.405551 + 30 +0.0 + 11 +26774.999919 + 21 +14576.056186 + 31 +0.0 + 0 +LINE + 5 +1EF2 + 8 +0 + 62 + 0 + 10 +26749.999919 + 20 +14619.357456 + 30 +0.0 + 11 +26740.0 + 21 +14636.677823 + 31 +0.0 + 0 +LINE + 5 +1EF3 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +14454.812489 + 30 +0.0 + 11 +26812.499919 + 21 +14467.803011 + 31 +0.0 + 0 +LINE + 5 +1EF4 + 8 +0 + 62 + 0 + 10 +26787.499919 + 20 +14511.104281 + 30 +0.0 + 11 +26774.999919 + 21 +14532.754916 + 31 +0.0 + 0 +LINE + 5 +1EF5 + 8 +0 + 62 + 0 + 10 +26749.999919 + 20 +14576.056186 + 30 +0.0 + 11 +26740.0 + 21 +14593.376553 + 31 +0.0 + 0 +LINE + 5 +1EF6 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +14411.511219 + 30 +0.0 + 11 +26812.499919 + 21 +14424.501741 + 31 +0.0 + 0 +LINE + 5 +1EF7 + 8 +0 + 62 + 0 + 10 +26787.499919 + 20 +14467.803011 + 30 +0.0 + 11 +26774.999919 + 21 +14489.453646 + 31 +0.0 + 0 +LINE + 5 +1EF8 + 8 +0 + 62 + 0 + 10 +26749.999919 + 20 +14532.754916 + 30 +0.0 + 11 +26740.0 + 21 +14550.075283 + 31 +0.0 + 0 +LINE + 5 +1EF9 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +14368.209949 + 30 +0.0 + 11 +26812.499919 + 21 +14381.200471 + 31 +0.0 + 0 +LINE + 5 +1EFA + 8 +0 + 62 + 0 + 10 +26787.499919 + 20 +14424.501741 + 30 +0.0 + 11 +26774.999919 + 21 +14446.152376 + 31 +0.0 + 0 +LINE + 5 +1EFB + 8 +0 + 62 + 0 + 10 +26749.999919 + 20 +14489.453646 + 30 +0.0 + 11 +26740.0 + 21 +14506.774013 + 31 +0.0 + 0 +LINE + 5 +1EFC + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +14324.908679 + 30 +0.0 + 11 +26812.499919 + 21 +14337.8992 + 31 +0.0 + 0 +LINE + 5 +1EFD + 8 +0 + 62 + 0 + 10 +26787.499919 + 20 +14381.200471 + 30 +0.0 + 11 +26774.999919 + 21 +14402.851106 + 31 +0.0 + 0 +LINE + 5 +1EFE + 8 +0 + 62 + 0 + 10 +26749.999919 + 20 +14446.152376 + 30 +0.0 + 11 +26740.0 + 21 +14463.472743 + 31 +0.0 + 0 +LINE + 5 +1EFF + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +14281.607409 + 30 +0.0 + 11 +26812.499919 + 21 +14294.59793 + 31 +0.0 + 0 +LINE + 5 +1F00 + 8 +0 + 62 + 0 + 10 +26787.499919 + 20 +14337.8992 + 30 +0.0 + 11 +26774.999919 + 21 +14359.549836 + 31 +0.0 + 0 +LINE + 5 +1F01 + 8 +0 + 62 + 0 + 10 +26749.999919 + 20 +14402.851106 + 30 +0.0 + 11 +26740.0 + 21 +14420.171473 + 31 +0.0 + 0 +LINE + 5 +1F02 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +14238.306139 + 30 +0.0 + 11 +26812.499919 + 21 +14251.29666 + 31 +0.0 + 0 +LINE + 5 +1F03 + 8 +0 + 62 + 0 + 10 +26787.499919 + 20 +14294.59793 + 30 +0.0 + 11 +26774.999919 + 21 +14316.248565 + 31 +0.0 + 0 +LINE + 5 +1F04 + 8 +0 + 62 + 0 + 10 +26749.999919 + 20 +14359.549836 + 30 +0.0 + 11 +26740.0 + 21 +14376.870203 + 31 +0.0 + 0 +LINE + 5 +1F05 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +14195.004869 + 30 +0.0 + 11 +26812.499919 + 21 +14207.99539 + 31 +0.0 + 0 +LINE + 5 +1F06 + 8 +0 + 62 + 0 + 10 +26787.499919 + 20 +14251.29666 + 30 +0.0 + 11 +26774.999919 + 21 +14272.947295 + 31 +0.0 + 0 +LINE + 5 +1F07 + 8 +0 + 62 + 0 + 10 +26749.999919 + 20 +14316.248565 + 30 +0.0 + 11 +26740.0 + 21 +14333.568933 + 31 +0.0 + 0 +LINE + 5 +1F08 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +14151.703599 + 30 +0.0 + 11 +26812.499919 + 21 +14164.69412 + 31 +0.0 + 0 +LINE + 5 +1F09 + 8 +0 + 62 + 0 + 10 +26787.499919 + 20 +14207.99539 + 30 +0.0 + 11 +26774.999919 + 21 +14229.646025 + 31 +0.0 + 0 +LINE + 5 +1F0A + 8 +0 + 62 + 0 + 10 +26749.999919 + 20 +14272.947295 + 30 +0.0 + 11 +26740.0 + 21 +14290.267663 + 31 +0.0 + 0 +LINE + 5 +1F0B + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +14108.402329 + 30 +0.0 + 11 +26812.499919 + 21 +14121.39285 + 31 +0.0 + 0 +LINE + 5 +1F0C + 8 +0 + 62 + 0 + 10 +26787.499919 + 20 +14164.69412 + 30 +0.0 + 11 +26774.999919 + 21 +14186.344755 + 31 +0.0 + 0 +LINE + 5 +1F0D + 8 +0 + 62 + 0 + 10 +26749.999919 + 20 +14229.646025 + 30 +0.0 + 11 +26740.0 + 21 +14246.966393 + 31 +0.0 + 0 +LINE + 5 +1F0E + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +14065.101059 + 30 +0.0 + 11 +26812.499919 + 21 +14078.09158 + 31 +0.0 + 0 +LINE + 5 +1F0F + 8 +0 + 62 + 0 + 10 +26787.499919 + 20 +14121.39285 + 30 +0.0 + 11 +26774.999919 + 21 +14143.043485 + 31 +0.0 + 0 +LINE + 5 +1F10 + 8 +0 + 62 + 0 + 10 +26749.999919 + 20 +14186.344755 + 30 +0.0 + 11 +26740.0 + 21 +14203.665123 + 31 +0.0 + 0 +LINE + 5 +1F11 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +14021.799789 + 30 +0.0 + 11 +26812.499919 + 21 +14034.790309 + 31 +0.0 + 0 +LINE + 5 +1F12 + 8 +0 + 62 + 0 + 10 +26787.499919 + 20 +14078.09158 + 30 +0.0 + 11 +26774.999919 + 21 +14099.742215 + 31 +0.0 + 0 +LINE + 5 +1F13 + 8 +0 + 62 + 0 + 10 +26749.999919 + 20 +14143.043485 + 30 +0.0 + 11 +26740.0 + 21 +14160.363853 + 31 +0.0 + 0 +LINE + 5 +1F14 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +13978.498519 + 30 +0.0 + 11 +26812.49992 + 21 +13991.489039 + 31 +0.0 + 0 +LINE + 5 +1F15 + 8 +0 + 62 + 0 + 10 +26787.49992 + 20 +14034.790309 + 30 +0.0 + 11 +26774.99992 + 21 +14056.440945 + 31 +0.0 + 0 +LINE + 5 +1F16 + 8 +0 + 62 + 0 + 10 +26749.99992 + 20 +14099.742215 + 30 +0.0 + 11 +26740.0 + 21 +14117.062583 + 31 +0.0 + 0 +LINE + 5 +1F17 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +13935.197249 + 30 +0.0 + 11 +26812.49992 + 21 +13948.187769 + 31 +0.0 + 0 +LINE + 5 +1F18 + 8 +0 + 62 + 0 + 10 +26787.49992 + 20 +13991.489039 + 30 +0.0 + 11 +26774.99992 + 21 +14013.139674 + 31 +0.0 + 0 +LINE + 5 +1F19 + 8 +0 + 62 + 0 + 10 +26749.99992 + 20 +14056.440945 + 30 +0.0 + 11 +26740.0 + 21 +14073.761313 + 31 +0.0 + 0 +LINE + 5 +1F1A + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +13891.895979 + 30 +0.0 + 11 +26812.49992 + 21 +13904.886499 + 31 +0.0 + 0 +LINE + 5 +1F1B + 8 +0 + 62 + 0 + 10 +26787.49992 + 20 +13948.187769 + 30 +0.0 + 11 +26774.99992 + 21 +13969.838404 + 31 +0.0 + 0 +LINE + 5 +1F1C + 8 +0 + 62 + 0 + 10 +26749.99992 + 20 +14013.139674 + 30 +0.0 + 11 +26740.0 + 21 +14030.460043 + 31 +0.0 + 0 +LINE + 5 +1F1D + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +13848.594709 + 30 +0.0 + 11 +26812.49992 + 21 +13861.585229 + 31 +0.0 + 0 +LINE + 5 +1F1E + 8 +0 + 62 + 0 + 10 +26787.49992 + 20 +13904.886499 + 30 +0.0 + 11 +26774.99992 + 21 +13926.537134 + 31 +0.0 + 0 +LINE + 5 +1F1F + 8 +0 + 62 + 0 + 10 +26749.99992 + 20 +13969.838404 + 30 +0.0 + 11 +26740.0 + 21 +13987.158773 + 31 +0.0 + 0 +LINE + 5 +1F20 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +13805.293439 + 30 +0.0 + 11 +26812.49992 + 21 +13818.283959 + 31 +0.0 + 0 +LINE + 5 +1F21 + 8 +0 + 62 + 0 + 10 +26787.49992 + 20 +13861.585229 + 30 +0.0 + 11 +26774.99992 + 21 +13883.235864 + 31 +0.0 + 0 +LINE + 5 +1F22 + 8 +0 + 62 + 0 + 10 +26749.99992 + 20 +13926.537134 + 30 +0.0 + 11 +26740.0 + 21 +13943.857503 + 31 +0.0 + 0 +LINE + 5 +1F23 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +13761.992169 + 30 +0.0 + 11 +26812.49992 + 21 +13774.982689 + 31 +0.0 + 0 +LINE + 5 +1F24 + 8 +0 + 62 + 0 + 10 +26787.49992 + 20 +13818.283959 + 30 +0.0 + 11 +26774.99992 + 21 +13839.934594 + 31 +0.0 + 0 +LINE + 5 +1F25 + 8 +0 + 62 + 0 + 10 +26749.99992 + 20 +13883.235864 + 30 +0.0 + 11 +26740.0 + 21 +13900.556233 + 31 +0.0 + 0 +LINE + 5 +1F26 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +13718.690899 + 30 +0.0 + 11 +26812.49992 + 21 +13731.681418 + 31 +0.0 + 0 +LINE + 5 +1F27 + 8 +0 + 62 + 0 + 10 +26787.49992 + 20 +13774.982689 + 30 +0.0 + 11 +26774.99992 + 21 +13796.633324 + 31 +0.0 + 0 +LINE + 5 +1F28 + 8 +0 + 62 + 0 + 10 +26749.99992 + 20 +13839.934594 + 30 +0.0 + 11 +26740.0 + 21 +13857.254963 + 31 +0.0 + 0 +LINE + 5 +1F29 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +13675.389629 + 30 +0.0 + 11 +26812.49992 + 21 +13688.380148 + 31 +0.0 + 0 +LINE + 5 +1F2A + 8 +0 + 62 + 0 + 10 +26787.49992 + 20 +13731.681418 + 30 +0.0 + 11 +26774.99992 + 21 +13753.332054 + 31 +0.0 + 0 +LINE + 5 +1F2B + 8 +0 + 62 + 0 + 10 +26749.99992 + 20 +13796.633324 + 30 +0.0 + 11 +26740.0 + 21 +13813.953693 + 31 +0.0 + 0 +LINE + 5 +1F2C + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +13632.088359 + 30 +0.0 + 11 +26812.49992 + 21 +13645.078878 + 31 +0.0 + 0 +LINE + 5 +1F2D + 8 +0 + 62 + 0 + 10 +26787.49992 + 20 +13688.380148 + 30 +0.0 + 11 +26774.99992 + 21 +13710.030783 + 31 +0.0 + 0 +LINE + 5 +1F2E + 8 +0 + 62 + 0 + 10 +26749.99992 + 20 +13753.332054 + 30 +0.0 + 11 +26740.0 + 21 +13770.652423 + 31 +0.0 + 0 +LINE + 5 +1F2F + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +13588.787089 + 30 +0.0 + 11 +26812.49992 + 21 +13601.777608 + 31 +0.0 + 0 +LINE + 5 +1F30 + 8 +0 + 62 + 0 + 10 +26787.49992 + 20 +13645.078878 + 30 +0.0 + 11 +26774.99992 + 21 +13666.729513 + 31 +0.0 + 0 +LINE + 5 +1F31 + 8 +0 + 62 + 0 + 10 +26749.99992 + 20 +13710.030783 + 30 +0.0 + 11 +26740.0 + 21 +13727.351153 + 31 +0.0 + 0 +LINE + 5 +1F32 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +13545.485819 + 30 +0.0 + 11 +26812.49992 + 21 +13558.476338 + 31 +0.0 + 0 +LINE + 5 +1F33 + 8 +0 + 62 + 0 + 10 +26787.49992 + 20 +13601.777608 + 30 +0.0 + 11 +26774.99992 + 21 +13623.428243 + 31 +0.0 + 0 +LINE + 5 +1F34 + 8 +0 + 62 + 0 + 10 +26749.99992 + 20 +13666.729513 + 30 +0.0 + 11 +26740.0 + 21 +13684.049883 + 31 +0.0 + 0 +LINE + 5 +1F35 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +13502.184549 + 30 +0.0 + 11 +26812.49992 + 21 +13515.175068 + 31 +0.0 + 0 +LINE + 5 +1F36 + 8 +0 + 62 + 0 + 10 +26787.49992 + 20 +13558.476338 + 30 +0.0 + 11 +26774.99992 + 21 +13580.126973 + 31 +0.0 + 0 +LINE + 5 +1F37 + 8 +0 + 62 + 0 + 10 +26749.99992 + 20 +13623.428243 + 30 +0.0 + 11 +26740.0 + 21 +13640.748613 + 31 +0.0 + 0 +LINE + 5 +1F38 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +13458.883279 + 30 +0.0 + 11 +26812.499921 + 21 +13471.873798 + 31 +0.0 + 0 +LINE + 5 +1F39 + 8 +0 + 62 + 0 + 10 +26787.499921 + 20 +13515.175068 + 30 +0.0 + 11 +26774.999921 + 21 +13536.825703 + 31 +0.0 + 0 +LINE + 5 +1F3A + 8 +0 + 62 + 0 + 10 +26749.999921 + 20 +13580.126973 + 30 +0.0 + 11 +26740.0 + 21 +13597.447343 + 31 +0.0 + 0 +LINE + 5 +1F3B + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +13415.582009 + 30 +0.0 + 11 +26812.499921 + 21 +13428.572527 + 31 +0.0 + 0 +LINE + 5 +1F3C + 8 +0 + 62 + 0 + 10 +26787.499921 + 20 +13471.873798 + 30 +0.0 + 11 +26774.999921 + 21 +13493.524433 + 31 +0.0 + 0 +LINE + 5 +1F3D + 8 +0 + 62 + 0 + 10 +26749.999921 + 20 +13536.825703 + 30 +0.0 + 11 +26740.0 + 21 +13554.146073 + 31 +0.0 + 0 +LINE + 5 +1F3E + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +13372.280739 + 30 +0.0 + 11 +26812.499921 + 21 +13385.271257 + 31 +0.0 + 0 +LINE + 5 +1F3F + 8 +0 + 62 + 0 + 10 +26787.499921 + 20 +13428.572527 + 30 +0.0 + 11 +26774.999921 + 21 +13450.223163 + 31 +0.0 + 0 +LINE + 5 +1F40 + 8 +0 + 62 + 0 + 10 +26749.999921 + 20 +13493.524433 + 30 +0.0 + 11 +26740.0 + 21 +13510.844803 + 31 +0.0 + 0 +LINE + 5 +1F41 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +13328.979469 + 30 +0.0 + 11 +26812.499921 + 21 +13341.969987 + 31 +0.0 + 0 +LINE + 5 +1F42 + 8 +0 + 62 + 0 + 10 +26787.499921 + 20 +13385.271257 + 30 +0.0 + 11 +26774.999921 + 21 +13406.921892 + 31 +0.0 + 0 +LINE + 5 +1F43 + 8 +0 + 62 + 0 + 10 +26749.999921 + 20 +13450.223163 + 30 +0.0 + 11 +26740.0 + 21 +13467.543533 + 31 +0.0 + 0 +LINE + 5 +1F44 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +13285.678199 + 30 +0.0 + 11 +26812.499921 + 21 +13298.668717 + 31 +0.0 + 0 +LINE + 5 +1F45 + 8 +0 + 62 + 0 + 10 +26787.499921 + 20 +13341.969987 + 30 +0.0 + 11 +26774.999921 + 21 +13363.620622 + 31 +0.0 + 0 +LINE + 5 +1F46 + 8 +0 + 62 + 0 + 10 +26749.999921 + 20 +13406.921892 + 30 +0.0 + 11 +26740.0 + 21 +13424.242263 + 31 +0.0 + 0 +LINE + 5 +1F47 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +13242.376929 + 30 +0.0 + 11 +26812.499921 + 21 +13255.367447 + 31 +0.0 + 0 +LINE + 5 +1F48 + 8 +0 + 62 + 0 + 10 +26787.499921 + 20 +13298.668717 + 30 +0.0 + 11 +26774.999921 + 21 +13320.319352 + 31 +0.0 + 0 +LINE + 5 +1F49 + 8 +0 + 62 + 0 + 10 +26749.999921 + 20 +13363.620622 + 30 +0.0 + 11 +26740.0 + 21 +13380.940993 + 31 +0.0 + 0 +LINE + 5 +1F4A + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +13199.075659 + 30 +0.0 + 11 +26812.499921 + 21 +13212.066177 + 31 +0.0 + 0 +LINE + 5 +1F4B + 8 +0 + 62 + 0 + 10 +26787.499921 + 20 +13255.367447 + 30 +0.0 + 11 +26774.999921 + 21 +13277.018082 + 31 +0.0 + 0 +LINE + 5 +1F4C + 8 +0 + 62 + 0 + 10 +26749.999921 + 20 +13320.319352 + 30 +0.0 + 11 +26740.0 + 21 +13337.639723 + 31 +0.0 + 0 +LINE + 5 +1F4D + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +13155.774389 + 30 +0.0 + 11 +26812.499921 + 21 +13168.764907 + 31 +0.0 + 0 +LINE + 5 +1F4E + 8 +0 + 62 + 0 + 10 +26787.499921 + 20 +13212.066177 + 30 +0.0 + 11 +26774.999921 + 21 +13233.716812 + 31 +0.0 + 0 +LINE + 5 +1F4F + 8 +0 + 62 + 0 + 10 +26749.999921 + 20 +13277.018082 + 30 +0.0 + 11 +26740.0 + 21 +13294.338453 + 31 +0.0 + 0 +LINE + 5 +1F50 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +13112.473119 + 30 +0.0 + 11 +26812.499921 + 21 +13125.463636 + 31 +0.0 + 0 +LINE + 5 +1F51 + 8 +0 + 62 + 0 + 10 +26787.499921 + 20 +13168.764907 + 30 +0.0 + 11 +26774.999921 + 21 +13190.415542 + 31 +0.0 + 0 +LINE + 5 +1F52 + 8 +0 + 62 + 0 + 10 +26749.999921 + 20 +13233.716812 + 30 +0.0 + 11 +26740.0 + 21 +13251.037183 + 31 +0.0 + 0 +LINE + 5 +1F53 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +13069.171849 + 30 +0.0 + 11 +26812.499921 + 21 +13082.162366 + 31 +0.0 + 0 +LINE + 5 +1F54 + 8 +0 + 62 + 0 + 10 +26787.499921 + 20 +13125.463636 + 30 +0.0 + 11 +26774.999921 + 21 +13147.114272 + 31 +0.0 + 0 +LINE + 5 +1F55 + 8 +0 + 62 + 0 + 10 +26749.999921 + 20 +13190.415542 + 30 +0.0 + 11 +26740.0 + 21 +13207.735913 + 31 +0.0 + 0 +LINE + 5 +1F56 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +13025.870579 + 30 +0.0 + 11 +26812.499921 + 21 +13038.861096 + 31 +0.0 + 0 +LINE + 5 +1F57 + 8 +0 + 62 + 0 + 10 +26787.499921 + 20 +13082.162366 + 30 +0.0 + 11 +26774.999921 + 21 +13103.813001 + 31 +0.0 + 0 +LINE + 5 +1F58 + 8 +0 + 62 + 0 + 10 +26749.999921 + 20 +13147.114272 + 30 +0.0 + 11 +26740.0 + 21 +13164.434643 + 31 +0.0 + 0 +LINE + 5 +1F59 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +12982.569309 + 30 +0.0 + 11 +26812.499921 + 21 +12995.559826 + 31 +0.0 + 0 +LINE + 5 +1F5A + 8 +0 + 62 + 0 + 10 +26787.499921 + 20 +13038.861096 + 30 +0.0 + 11 +26774.999921 + 21 +13060.511731 + 31 +0.0 + 0 +LINE + 5 +1F5B + 8 +0 + 62 + 0 + 10 +26749.999921 + 20 +13103.813001 + 30 +0.0 + 11 +26740.0 + 21 +13121.133373 + 31 +0.0 + 0 +LINE + 5 +1F5C + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +12939.268039 + 30 +0.0 + 11 +26812.499922 + 21 +12952.258556 + 31 +0.0 + 0 +LINE + 5 +1F5D + 8 +0 + 62 + 0 + 10 +26787.499922 + 20 +12995.559826 + 30 +0.0 + 11 +26774.999922 + 21 +13017.210461 + 31 +0.0 + 0 +LINE + 5 +1F5E + 8 +0 + 62 + 0 + 10 +26749.999922 + 20 +13060.511731 + 30 +0.0 + 11 +26740.0 + 21 +13077.832103 + 31 +0.0 + 0 +LINE + 5 +1F5F + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +12895.966769 + 30 +0.0 + 11 +26812.499922 + 21 +12908.957286 + 31 +0.0 + 0 +LINE + 5 +1F60 + 8 +0 + 62 + 0 + 10 +26787.499922 + 20 +12952.258556 + 30 +0.0 + 11 +26774.999922 + 21 +12973.909191 + 31 +0.0 + 0 +LINE + 5 +1F61 + 8 +0 + 62 + 0 + 10 +26749.999922 + 20 +13017.210461 + 30 +0.0 + 11 +26740.0 + 21 +13034.530833 + 31 +0.0 + 0 +LINE + 5 +1F62 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +12852.665499 + 30 +0.0 + 11 +26812.499922 + 21 +12865.656016 + 31 +0.0 + 0 +LINE + 5 +1F63 + 8 +0 + 62 + 0 + 10 +26787.499922 + 20 +12908.957286 + 30 +0.0 + 11 +26774.999922 + 21 +12930.607921 + 31 +0.0 + 0 +LINE + 5 +1F64 + 8 +0 + 62 + 0 + 10 +26749.999922 + 20 +12973.909191 + 30 +0.0 + 11 +26740.0 + 21 +12991.229563 + 31 +0.0 + 0 +LINE + 5 +1F65 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +12809.364229 + 30 +0.0 + 11 +26812.499922 + 21 +12822.354745 + 31 +0.0 + 0 +LINE + 5 +1F66 + 8 +0 + 62 + 0 + 10 +26787.499922 + 20 +12865.656016 + 30 +0.0 + 11 +26774.999922 + 21 +12887.306651 + 31 +0.0 + 0 +LINE + 5 +1F67 + 8 +0 + 62 + 0 + 10 +26749.999922 + 20 +12930.607921 + 30 +0.0 + 11 +26740.0 + 21 +12947.928293 + 31 +0.0 + 0 +LINE + 5 +1F68 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +12766.062959 + 30 +0.0 + 11 +26812.499922 + 21 +12779.053475 + 31 +0.0 + 0 +LINE + 5 +1F69 + 8 +0 + 62 + 0 + 10 +26787.499922 + 20 +12822.354745 + 30 +0.0 + 11 +26774.999922 + 21 +12844.005381 + 31 +0.0 + 0 +LINE + 5 +1F6A + 8 +0 + 62 + 0 + 10 +26749.999922 + 20 +12887.306651 + 30 +0.0 + 11 +26740.0 + 21 +12904.627023 + 31 +0.0 + 0 +LINE + 5 +1F6B + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +12722.761689 + 30 +0.0 + 11 +26812.499922 + 21 +12735.752205 + 31 +0.0 + 0 +LINE + 5 +1F6C + 8 +0 + 62 + 0 + 10 +26787.499922 + 20 +12779.053475 + 30 +0.0 + 11 +26774.999922 + 21 +12800.70411 + 31 +0.0 + 0 +LINE + 5 +1F6D + 8 +0 + 62 + 0 + 10 +26749.999922 + 20 +12844.005381 + 30 +0.0 + 11 +26740.0 + 21 +12861.325753 + 31 +0.0 + 0 +LINE + 5 +1F6E + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +12679.460419 + 30 +0.0 + 11 +26812.499922 + 21 +12692.450935 + 31 +0.0 + 0 +LINE + 5 +1F6F + 8 +0 + 62 + 0 + 10 +26787.499922 + 20 +12735.752205 + 30 +0.0 + 11 +26774.999922 + 21 +12757.40284 + 31 +0.0 + 0 +LINE + 5 +1F70 + 8 +0 + 62 + 0 + 10 +26749.999922 + 20 +12800.70411 + 30 +0.0 + 11 +26740.0 + 21 +12818.024483 + 31 +0.0 + 0 +LINE + 5 +1F71 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +12636.159149 + 30 +0.0 + 11 +26812.499922 + 21 +12649.149665 + 31 +0.0 + 0 +LINE + 5 +1F72 + 8 +0 + 62 + 0 + 10 +26787.499922 + 20 +12692.450935 + 30 +0.0 + 11 +26774.999922 + 21 +12714.10157 + 31 +0.0 + 0 +LINE + 5 +1F73 + 8 +0 + 62 + 0 + 10 +26749.999922 + 20 +12757.40284 + 30 +0.0 + 11 +26740.0 + 21 +12774.723213 + 31 +0.0 + 0 +LINE + 5 +1F74 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +12592.857879 + 30 +0.0 + 11 +26812.499922 + 21 +12605.848395 + 31 +0.0 + 0 +LINE + 5 +1F75 + 8 +0 + 62 + 0 + 10 +26787.499922 + 20 +12649.149665 + 30 +0.0 + 11 +26774.999922 + 21 +12670.8003 + 31 +0.0 + 0 +LINE + 5 +1F76 + 8 +0 + 62 + 0 + 10 +26749.999922 + 20 +12714.10157 + 30 +0.0 + 11 +26740.0 + 21 +12731.421943 + 31 +0.0 + 0 +LINE + 5 +1F77 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +12549.556609 + 30 +0.0 + 11 +26812.499922 + 21 +12562.547125 + 31 +0.0 + 0 +LINE + 5 +1F78 + 8 +0 + 62 + 0 + 10 +26787.499922 + 20 +12605.848395 + 30 +0.0 + 11 +26774.999922 + 21 +12627.49903 + 31 +0.0 + 0 +LINE + 5 +1F79 + 8 +0 + 62 + 0 + 10 +26749.999922 + 20 +12670.8003 + 30 +0.0 + 11 +26740.0 + 21 +12688.120673 + 31 +0.0 + 0 +LINE + 5 +1F7A + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +12506.255339 + 30 +0.0 + 11 +26812.499922 + 21 +12519.245854 + 31 +0.0 + 0 +LINE + 5 +1F7B + 8 +0 + 62 + 0 + 10 +26787.499922 + 20 +12562.547125 + 30 +0.0 + 11 +26774.999922 + 21 +12584.19776 + 31 +0.0 + 0 +LINE + 5 +1F7C + 8 +0 + 62 + 0 + 10 +26749.999922 + 20 +12627.49903 + 30 +0.0 + 11 +26740.0 + 21 +12644.819403 + 31 +0.0 + 0 +LINE + 5 +1F7D + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +12462.954069 + 30 +0.0 + 11 +26812.499922 + 21 +12475.944584 + 31 +0.0 + 0 +LINE + 5 +1F7E + 8 +0 + 62 + 0 + 10 +26787.499922 + 20 +12519.245854 + 30 +0.0 + 11 +26774.999922 + 21 +12540.89649 + 31 +0.0 + 0 +LINE + 5 +1F7F + 8 +0 + 62 + 0 + 10 +26749.999922 + 20 +12584.19776 + 30 +0.0 + 11 +26740.0 + 21 +12601.518133 + 31 +0.0 + 0 +LINE + 5 +1F80 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +12419.652799 + 30 +0.0 + 11 +26812.499922 + 21 +12432.643314 + 31 +0.0 + 0 +LINE + 5 +1F81 + 8 +0 + 62 + 0 + 10 +26787.499922 + 20 +12475.944584 + 30 +0.0 + 11 +26774.999922 + 21 +12497.595219 + 31 +0.0 + 0 +LINE + 5 +1F82 + 8 +0 + 62 + 0 + 10 +26749.999922 + 20 +12540.89649 + 30 +0.0 + 11 +26740.0 + 21 +12558.216863 + 31 +0.0 + 0 +LINE + 5 +1F83 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +12376.351529 + 30 +0.0 + 11 +26812.499923 + 21 +12389.342044 + 31 +0.0 + 0 +LINE + 5 +1F84 + 8 +0 + 62 + 0 + 10 +26787.499923 + 20 +12432.643314 + 30 +0.0 + 11 +26774.999923 + 21 +12454.293949 + 31 +0.0 + 0 +LINE + 5 +1F85 + 8 +0 + 62 + 0 + 10 +26749.999923 + 20 +12497.595219 + 30 +0.0 + 11 +26740.0 + 21 +12514.915593 + 31 +0.0 + 0 +LINE + 5 +1F86 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +12333.050259 + 30 +0.0 + 11 +26812.499923 + 21 +12346.040774 + 31 +0.0 + 0 +LINE + 5 +1F87 + 8 +0 + 62 + 0 + 10 +26787.499923 + 20 +12389.342044 + 30 +0.0 + 11 +26774.999923 + 21 +12410.992679 + 31 +0.0 + 0 +LINE + 5 +1F88 + 8 +0 + 62 + 0 + 10 +26749.999923 + 20 +12454.293949 + 30 +0.0 + 11 +26740.0 + 21 +12471.614323 + 31 +0.0 + 0 +LINE + 5 +1F89 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +12289.748989 + 30 +0.0 + 11 +26812.499923 + 21 +12302.739504 + 31 +0.0 + 0 +LINE + 5 +1F8A + 8 +0 + 62 + 0 + 10 +26787.499923 + 20 +12346.040774 + 30 +0.0 + 11 +26774.999923 + 21 +12367.691409 + 31 +0.0 + 0 +LINE + 5 +1F8B + 8 +0 + 62 + 0 + 10 +26749.999923 + 20 +12410.992679 + 30 +0.0 + 11 +26740.0 + 21 +12428.313053 + 31 +0.0 + 0 +LINE + 5 +1F8C + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +12246.447719 + 30 +0.0 + 11 +26812.499923 + 21 +12259.438234 + 31 +0.0 + 0 +LINE + 5 +1F8D + 8 +0 + 62 + 0 + 10 +26787.499923 + 20 +12302.739504 + 30 +0.0 + 11 +26774.999923 + 21 +12324.390139 + 31 +0.0 + 0 +LINE + 5 +1F8E + 8 +0 + 62 + 0 + 10 +26749.999923 + 20 +12367.691409 + 30 +0.0 + 11 +26740.0 + 21 +12385.011783 + 31 +0.0 + 0 +LINE + 5 +1F8F + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +12203.146449 + 30 +0.0 + 11 +26812.499923 + 21 +12216.136963 + 31 +0.0 + 0 +LINE + 5 +1F90 + 8 +0 + 62 + 0 + 10 +26787.499923 + 20 +12259.438234 + 30 +0.0 + 11 +26774.999923 + 21 +12281.088869 + 31 +0.0 + 0 +LINE + 5 +1F91 + 8 +0 + 62 + 0 + 10 +26749.999923 + 20 +12324.390139 + 30 +0.0 + 11 +26740.0 + 21 +12341.710513 + 31 +0.0 + 0 +LINE + 5 +1F92 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +12159.845179 + 30 +0.0 + 11 +26812.499923 + 21 +12172.835693 + 31 +0.0 + 0 +LINE + 5 +1F93 + 8 +0 + 62 + 0 + 10 +26787.499923 + 20 +12216.136963 + 30 +0.0 + 11 +26774.999923 + 21 +12237.787599 + 31 +0.0 + 0 +LINE + 5 +1F94 + 8 +0 + 62 + 0 + 10 +26749.999923 + 20 +12281.088869 + 30 +0.0 + 11 +26740.0 + 21 +12298.409243 + 31 +0.0 + 0 +LINE + 5 +1F95 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +12116.543909 + 30 +0.0 + 11 +26812.499923 + 21 +12129.534423 + 31 +0.0 + 0 +LINE + 5 +1F96 + 8 +0 + 62 + 0 + 10 +26787.499923 + 20 +12172.835693 + 30 +0.0 + 11 +26774.999923 + 21 +12194.486328 + 31 +0.0 + 0 +LINE + 5 +1F97 + 8 +0 + 62 + 0 + 10 +26749.999923 + 20 +12237.787599 + 30 +0.0 + 11 +26740.0 + 21 +12255.107973 + 31 +0.0 + 0 +LINE + 5 +1F98 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +12073.242639 + 30 +0.0 + 11 +26812.499923 + 21 +12086.233153 + 31 +0.0 + 0 +LINE + 5 +1F99 + 8 +0 + 62 + 0 + 10 +26787.499923 + 20 +12129.534423 + 30 +0.0 + 11 +26774.999923 + 21 +12151.185058 + 31 +0.0 + 0 +LINE + 5 +1F9A + 8 +0 + 62 + 0 + 10 +26749.999923 + 20 +12194.486328 + 30 +0.0 + 11 +26740.0 + 21 +12211.806703 + 31 +0.0 + 0 +LINE + 5 +1F9B + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +12029.941369 + 30 +0.0 + 11 +26812.499923 + 21 +12042.931883 + 31 +0.0 + 0 +LINE + 5 +1F9C + 8 +0 + 62 + 0 + 10 +26787.499923 + 20 +12086.233153 + 30 +0.0 + 11 +26774.999923 + 21 +12107.883788 + 31 +0.0 + 0 +LINE + 5 +1F9D + 8 +0 + 62 + 0 + 10 +26749.999923 + 20 +12151.185058 + 30 +0.0 + 11 +26740.0 + 21 +12168.505433 + 31 +0.0 + 0 +LINE + 5 +1F9E + 8 +0 + 62 + 0 + 10 +26818.781848 + 20 +11988.75 + 30 +0.0 + 11 +26812.499923 + 21 +11999.630613 + 31 +0.0 + 0 +LINE + 5 +1F9F + 8 +0 + 62 + 0 + 10 +26787.499923 + 20 +12042.931883 + 30 +0.0 + 11 +26774.999923 + 21 +12064.582518 + 31 +0.0 + 0 +LINE + 5 +1FA0 + 8 +0 + 62 + 0 + 10 +26749.999923 + 20 +12107.883788 + 30 +0.0 + 11 +26740.0 + 21 +12125.204163 + 31 +0.0 + 0 +LINE + 5 +1FA1 + 8 +0 + 62 + 0 + 10 +26787.499923 + 20 +11999.630613 + 30 +0.0 + 11 +26774.999923 + 21 +12021.281248 + 31 +0.0 + 0 +LINE + 5 +1FA2 + 8 +0 + 62 + 0 + 10 +26749.999923 + 20 +12064.582518 + 30 +0.0 + 11 +26740.0 + 21 +12081.902893 + 31 +0.0 + 0 +LINE + 5 +1FA3 + 8 +0 + 62 + 0 + 10 +26749.999923 + 20 +12021.281248 + 30 +0.0 + 11 +26740.0 + 21 +12038.601623 + 31 +0.0 + 0 +LINE + 5 +1FA4 + 8 +0 + 62 + 0 + 10 +26743.781848 + 20 +11988.75 + 30 +0.0 + 11 +26740.0 + 21 +11995.300353 + 31 +0.0 + 0 +LINE + 5 +1FA5 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +14801.222649 + 30 +0.0 + 11 +26812.499918 + 21 +14814.213172 + 31 +0.0 + 0 +LINE + 5 +1FA6 + 8 +0 + 62 + 0 + 10 +26787.499918 + 20 +14857.514442 + 30 +0.0 + 11 +26774.999918 + 21 +14879.165077 + 31 +0.0 + 0 +LINE + 5 +1FA7 + 8 +0 + 62 + 0 + 10 +26749.999918 + 20 +14922.466347 + 30 +0.0 + 11 +26740.0 + 21 +14939.786713 + 31 +0.0 + 0 +LINE + 5 +1FA8 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +14844.523919 + 30 +0.0 + 11 +26812.499918 + 21 +14857.514442 + 31 +0.0 + 0 +LINE + 5 +1FA9 + 8 +0 + 62 + 0 + 10 +26787.499918 + 20 +14900.815712 + 30 +0.0 + 11 +26774.999918 + 21 +14922.466347 + 31 +0.0 + 0 +LINE + 5 +1FAA + 8 +0 + 62 + 0 + 10 +26749.999918 + 20 +14965.767618 + 30 +0.0 + 11 +26740.0 + 21 +14983.087983 + 31 +0.0 + 0 +LINE + 5 +1FAB + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +14887.825189 + 30 +0.0 + 11 +26812.499918 + 21 +14900.815712 + 31 +0.0 + 0 +LINE + 5 +1FAC + 8 +0 + 62 + 0 + 10 +26787.499918 + 20 +14944.116982 + 30 +0.0 + 11 +26774.999918 + 21 +14965.767618 + 31 +0.0 + 0 +LINE + 5 +1FAD + 8 +0 + 62 + 0 + 10 +26749.999918 + 20 +15009.068888 + 30 +0.0 + 11 +26740.0 + 21 +15026.389253 + 31 +0.0 + 0 +LINE + 5 +1FAE + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +14931.126459 + 30 +0.0 + 11 +26812.499918 + 21 +14944.116982 + 31 +0.0 + 0 +LINE + 5 +1FAF + 8 +0 + 62 + 0 + 10 +26787.499918 + 20 +14987.418253 + 30 +0.0 + 11 +26774.999918 + 21 +15009.068888 + 31 +0.0 + 0 +LINE + 5 +1FB0 + 8 +0 + 62 + 0 + 10 +26749.999918 + 20 +15052.370158 + 30 +0.0 + 11 +26740.0 + 21 +15069.690523 + 31 +0.0 + 0 +LINE + 5 +1FB1 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +14974.427729 + 30 +0.0 + 11 +26812.499918 + 21 +14987.418253 + 31 +0.0 + 0 +LINE + 5 +1FB2 + 8 +0 + 62 + 0 + 10 +26787.499918 + 20 +15030.719523 + 30 +0.0 + 11 +26774.999918 + 21 +15052.370158 + 31 +0.0 + 0 +LINE + 5 +1FB3 + 8 +0 + 62 + 0 + 10 +26749.999918 + 20 +15095.671428 + 30 +0.0 + 11 +26740.0 + 21 +15112.991793 + 31 +0.0 + 0 +LINE + 5 +1FB4 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +15017.728999 + 30 +0.0 + 11 +26812.499918 + 21 +15030.719523 + 31 +0.0 + 0 +LINE + 5 +1FB5 + 8 +0 + 62 + 0 + 10 +26787.499918 + 20 +15074.020793 + 30 +0.0 + 11 +26774.999918 + 21 +15095.671428 + 31 +0.0 + 0 +LINE + 5 +1FB6 + 8 +0 + 62 + 0 + 10 +26749.999918 + 20 +15138.972698 + 30 +0.0 + 11 +26740.0 + 21 +15156.293063 + 31 +0.0 + 0 +LINE + 5 +1FB7 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +15061.030269 + 30 +0.0 + 11 +26812.499917 + 21 +15074.020793 + 31 +0.0 + 0 +LINE + 5 +1FB8 + 8 +0 + 62 + 0 + 10 +26787.499917 + 20 +15117.322063 + 30 +0.0 + 11 +26774.999917 + 21 +15138.972698 + 31 +0.0 + 0 +LINE + 5 +1FB9 + 8 +0 + 62 + 0 + 10 +26749.999917 + 20 +15182.273968 + 30 +0.0 + 11 +26740.0 + 21 +15199.594333 + 31 +0.0 + 0 +LINE + 5 +1FBA + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +15104.331539 + 30 +0.0 + 11 +26812.499917 + 21 +15117.322063 + 31 +0.0 + 0 +LINE + 5 +1FBB + 8 +0 + 62 + 0 + 10 +26787.499917 + 20 +15160.623333 + 30 +0.0 + 11 +26774.999917 + 21 +15182.273968 + 31 +0.0 + 0 +LINE + 5 +1FBC + 8 +0 + 62 + 0 + 10 +26749.999917 + 20 +15225.575238 + 30 +0.0 + 11 +26740.0 + 21 +15242.895603 + 31 +0.0 + 0 +LINE + 5 +1FBD + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +15147.632809 + 30 +0.0 + 11 +26812.499917 + 21 +15160.623333 + 31 +0.0 + 0 +LINE + 5 +1FBE + 8 +0 + 62 + 0 + 10 +26787.499917 + 20 +15203.924603 + 30 +0.0 + 11 +26774.999917 + 21 +15225.575238 + 31 +0.0 + 0 +LINE + 5 +1FBF + 8 +0 + 62 + 0 + 10 +26749.999917 + 20 +15268.876509 + 30 +0.0 + 11 +26740.0 + 21 +15286.196873 + 31 +0.0 + 0 +LINE + 5 +1FC0 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +15190.934079 + 30 +0.0 + 11 +26812.499917 + 21 +15203.924603 + 31 +0.0 + 0 +LINE + 5 +1FC1 + 8 +0 + 62 + 0 + 10 +26787.499917 + 20 +15247.225873 + 30 +0.0 + 11 +26774.999917 + 21 +15268.876509 + 31 +0.0 + 0 +LINE + 5 +1FC2 + 8 +0 + 62 + 0 + 10 +26749.999917 + 20 +15312.177779 + 30 +0.0 + 11 +26740.0 + 21 +15329.498143 + 31 +0.0 + 0 +LINE + 5 +1FC3 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +15234.235349 + 30 +0.0 + 11 +26812.499917 + 21 +15247.225873 + 31 +0.0 + 0 +LINE + 5 +1FC4 + 8 +0 + 62 + 0 + 10 +26787.499917 + 20 +15290.527144 + 30 +0.0 + 11 +26774.999917 + 21 +15312.177779 + 31 +0.0 + 0 +LINE + 5 +1FC5 + 8 +0 + 62 + 0 + 10 +26749.999917 + 20 +15355.479049 + 30 +0.0 + 11 +26740.0 + 21 +15372.799413 + 31 +0.0 + 0 +LINE + 5 +1FC6 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +15277.536619 + 30 +0.0 + 11 +26812.499917 + 21 +15290.527144 + 31 +0.0 + 0 +LINE + 5 +1FC7 + 8 +0 + 62 + 0 + 10 +26787.499917 + 20 +15333.828414 + 30 +0.0 + 11 +26774.999917 + 21 +15355.479049 + 31 +0.0 + 0 +LINE + 5 +1FC8 + 8 +0 + 62 + 0 + 10 +26749.999917 + 20 +15398.780319 + 30 +0.0 + 11 +26740.0 + 21 +15416.100683 + 31 +0.0 + 0 +LINE + 5 +1FC9 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +15320.837889 + 30 +0.0 + 11 +26812.499917 + 21 +15333.828414 + 31 +0.0 + 0 +LINE + 5 +1FCA + 8 +0 + 62 + 0 + 10 +26787.499917 + 20 +15377.129684 + 30 +0.0 + 11 +26774.999917 + 21 +15398.780319 + 31 +0.0 + 0 +LINE + 5 +1FCB + 8 +0 + 62 + 0 + 10 +26749.999917 + 20 +15442.081589 + 30 +0.0 + 11 +26740.0 + 21 +15459.401953 + 31 +0.0 + 0 +LINE + 5 +1FCC + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +15364.139159 + 30 +0.0 + 11 +26812.499917 + 21 +15377.129684 + 31 +0.0 + 0 +LINE + 5 +1FCD + 8 +0 + 62 + 0 + 10 +26787.499917 + 20 +15420.430954 + 30 +0.0 + 11 +26774.999917 + 21 +15442.081589 + 31 +0.0 + 0 +LINE + 5 +1FCE + 8 +0 + 62 + 0 + 10 +26749.999917 + 20 +15485.382859 + 30 +0.0 + 11 +26740.0 + 21 +15502.703223 + 31 +0.0 + 0 +LINE + 5 +1FCF + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +15407.440429 + 30 +0.0 + 11 +26812.499917 + 21 +15420.430954 + 31 +0.0 + 0 +LINE + 5 +1FD0 + 8 +0 + 62 + 0 + 10 +26787.499917 + 20 +15463.732224 + 30 +0.0 + 11 +26774.999917 + 21 +15485.382859 + 31 +0.0 + 0 +LINE + 5 +1FD1 + 8 +0 + 62 + 0 + 10 +26749.999917 + 20 +15528.684129 + 30 +0.0 + 11 +26740.0 + 21 +15546.004493 + 31 +0.0 + 0 +LINE + 5 +1FD2 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +15450.741699 + 30 +0.0 + 11 +26812.499917 + 21 +15463.732224 + 31 +0.0 + 0 +LINE + 5 +1FD3 + 8 +0 + 62 + 0 + 10 +26787.499917 + 20 +15507.033494 + 30 +0.0 + 11 +26774.999917 + 21 +15528.684129 + 31 +0.0 + 0 +LINE + 5 +1FD4 + 8 +0 + 62 + 0 + 10 +26749.999917 + 20 +15571.9854 + 30 +0.0 + 11 +26740.0 + 21 +15589.305763 + 31 +0.0 + 0 +LINE + 5 +1FD5 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +15494.042969 + 30 +0.0 + 11 +26812.499917 + 21 +15507.033494 + 31 +0.0 + 0 +LINE + 5 +1FD6 + 8 +0 + 62 + 0 + 10 +26787.499917 + 20 +15550.334764 + 30 +0.0 + 11 +26774.999917 + 21 +15571.9854 + 31 +0.0 + 0 +LINE + 5 +1FD7 + 8 +0 + 62 + 0 + 10 +26749.999917 + 20 +15615.28667 + 30 +0.0 + 11 +26740.0 + 21 +15632.607033 + 31 +0.0 + 0 +LINE + 5 +1FD8 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +15537.344239 + 30 +0.0 + 11 +26812.499917 + 21 +15550.334764 + 31 +0.0 + 0 +LINE + 5 +1FD9 + 8 +0 + 62 + 0 + 10 +26787.499917 + 20 +15593.636035 + 30 +0.0 + 11 +26774.999917 + 21 +15615.28667 + 31 +0.0 + 0 +LINE + 5 +1FDA + 8 +0 + 62 + 0 + 10 +26749.999917 + 20 +15658.58794 + 30 +0.0 + 11 +26740.0 + 21 +15675.908303 + 31 +0.0 + 0 +LINE + 5 +1FDB + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +15580.645509 + 30 +0.0 + 11 +26812.499917 + 21 +15593.636035 + 31 +0.0 + 0 +LINE + 5 +1FDC + 8 +0 + 62 + 0 + 10 +26787.499917 + 20 +15636.937305 + 30 +0.0 + 11 +26774.999917 + 21 +15658.58794 + 31 +0.0 + 0 +LINE + 5 +1FDD + 8 +0 + 62 + 0 + 10 +26749.999917 + 20 +15701.88921 + 30 +0.0 + 11 +26740.0 + 21 +15719.209573 + 31 +0.0 + 0 +LINE + 5 +1FDE + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +15623.946779 + 30 +0.0 + 11 +26812.499916 + 21 +15636.937305 + 31 +0.0 + 0 +LINE + 5 +1FDF + 8 +0 + 62 + 0 + 10 +26787.499916 + 20 +15680.238575 + 30 +0.0 + 11 +26774.999916 + 21 +15701.88921 + 31 +0.0 + 0 +LINE + 5 +1FE0 + 8 +0 + 62 + 0 + 10 +26749.999916 + 20 +15745.19048 + 30 +0.0 + 11 +26740.0 + 21 +15762.510843 + 31 +0.0 + 0 +LINE + 5 +1FE1 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +15667.248049 + 30 +0.0 + 11 +26812.499916 + 21 +15680.238575 + 31 +0.0 + 0 +LINE + 5 +1FE2 + 8 +0 + 62 + 0 + 10 +26787.499916 + 20 +15723.539845 + 30 +0.0 + 11 +26774.999916 + 21 +15745.19048 + 31 +0.0 + 0 +LINE + 5 +1FE3 + 8 +0 + 62 + 0 + 10 +26749.999916 + 20 +15788.49175 + 30 +0.0 + 11 +26740.0 + 21 +15805.812113 + 31 +0.0 + 0 +LINE + 5 +1FE4 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +15710.549319 + 30 +0.0 + 11 +26812.499916 + 21 +15723.539845 + 31 +0.0 + 0 +LINE + 5 +1FE5 + 8 +0 + 62 + 0 + 10 +26787.499916 + 20 +15766.841115 + 30 +0.0 + 11 +26774.999916 + 21 +15788.49175 + 31 +0.0 + 0 +LINE + 5 +1FE6 + 8 +0 + 62 + 0 + 10 +26749.999916 + 20 +15831.79302 + 30 +0.0 + 11 +26740.0 + 21 +15849.113383 + 31 +0.0 + 0 +LINE + 5 +1FE7 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +15753.850589 + 30 +0.0 + 11 +26812.499916 + 21 +15766.841115 + 31 +0.0 + 0 +LINE + 5 +1FE8 + 8 +0 + 62 + 0 + 10 +26787.499916 + 20 +15810.142385 + 30 +0.0 + 11 +26774.999916 + 21 +15831.79302 + 31 +0.0 + 0 +LINE + 5 +1FE9 + 8 +0 + 62 + 0 + 10 +26749.999916 + 20 +15875.094291 + 30 +0.0 + 11 +26740.0 + 21 +15892.414653 + 31 +0.0 + 0 +LINE + 5 +1FEA + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +15797.151859 + 30 +0.0 + 11 +26812.499916 + 21 +15810.142385 + 31 +0.0 + 0 +LINE + 5 +1FEB + 8 +0 + 62 + 0 + 10 +26787.499916 + 20 +15853.443655 + 30 +0.0 + 11 +26774.999916 + 21 +15875.094291 + 31 +0.0 + 0 +LINE + 5 +1FEC + 8 +0 + 62 + 0 + 10 +26749.999916 + 20 +15918.395561 + 30 +0.0 + 11 +26740.0 + 21 +15935.715923 + 31 +0.0 + 0 +LINE + 5 +1FED + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +15840.453129 + 30 +0.0 + 11 +26812.499916 + 21 +15853.443655 + 31 +0.0 + 0 +LINE + 5 +1FEE + 8 +0 + 62 + 0 + 10 +26787.499916 + 20 +15896.744926 + 30 +0.0 + 11 +26774.999916 + 21 +15918.395561 + 31 +0.0 + 0 +LINE + 5 +1FEF + 8 +0 + 62 + 0 + 10 +26749.999916 + 20 +15961.696831 + 30 +0.0 + 11 +26740.0 + 21 +15979.017193 + 31 +0.0 + 0 +LINE + 5 +1FF0 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +15883.754399 + 30 +0.0 + 11 +26812.499916 + 21 +15896.744926 + 31 +0.0 + 0 +LINE + 5 +1FF1 + 8 +0 + 62 + 0 + 10 +26787.499916 + 20 +15940.046196 + 30 +0.0 + 11 +26774.999916 + 21 +15961.696831 + 31 +0.0 + 0 +LINE + 5 +1FF2 + 8 +0 + 62 + 0 + 10 +26749.999916 + 20 +16004.998101 + 30 +0.0 + 11 +26740.0 + 21 +16022.318463 + 31 +0.0 + 0 +LINE + 5 +1FF3 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +15927.055669 + 30 +0.0 + 11 +26812.499916 + 21 +15940.046196 + 31 +0.0 + 0 +LINE + 5 +1FF4 + 8 +0 + 62 + 0 + 10 +26787.499916 + 20 +15983.347466 + 30 +0.0 + 11 +26774.999916 + 21 +16004.998101 + 31 +0.0 + 0 +LINE + 5 +1FF5 + 8 +0 + 62 + 0 + 10 +26749.999916 + 20 +16048.299371 + 30 +0.0 + 11 +26740.0 + 21 +16065.619733 + 31 +0.0 + 0 +LINE + 5 +1FF6 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +15970.356939 + 30 +0.0 + 11 +26812.499916 + 21 +15983.347466 + 31 +0.0 + 0 +LINE + 5 +1FF7 + 8 +0 + 62 + 0 + 10 +26787.499916 + 20 +16026.648736 + 30 +0.0 + 11 +26774.999916 + 21 +16048.299371 + 31 +0.0 + 0 +LINE + 5 +1FF8 + 8 +0 + 62 + 0 + 10 +26749.999916 + 20 +16091.600641 + 30 +0.0 + 11 +26740.0 + 21 +16108.921003 + 31 +0.0 + 0 +LINE + 5 +1FF9 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +16013.658209 + 30 +0.0 + 11 +26812.499916 + 21 +16026.648736 + 31 +0.0 + 0 +LINE + 5 +1FFA + 8 +0 + 62 + 0 + 10 +26787.499916 + 20 +16069.950006 + 30 +0.0 + 11 +26774.999916 + 21 +16091.600641 + 31 +0.0 + 0 +LINE + 5 +1FFB + 8 +0 + 62 + 0 + 10 +26749.999916 + 20 +16134.901911 + 30 +0.0 + 11 +26740.0 + 21 +16152.222273 + 31 +0.0 + 0 +LINE + 5 +1FFC + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +16056.959479 + 30 +0.0 + 11 +26812.499916 + 21 +16069.950006 + 31 +0.0 + 0 +LINE + 5 +1FFD + 8 +0 + 62 + 0 + 10 +26787.499916 + 20 +16113.251276 + 30 +0.0 + 11 +26774.999916 + 21 +16134.901911 + 31 +0.0 + 0 +LINE + 5 +1FFE + 8 +0 + 62 + 0 + 10 +26749.999916 + 20 +16178.203182 + 30 +0.0 + 11 +26740.0 + 21 +16195.523543 + 31 +0.0 + 0 +LINE + 5 +1FFF + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +16100.260749 + 30 +0.0 + 11 +26812.499916 + 21 +16113.251276 + 31 +0.0 + 0 +LINE + 5 +2000 + 8 +0 + 62 + 0 + 10 +26787.499916 + 20 +16156.552546 + 30 +0.0 + 11 +26774.999916 + 21 +16178.203182 + 31 +0.0 + 0 +LINE + 5 +2001 + 8 +0 + 62 + 0 + 10 +26749.999916 + 20 +16221.504452 + 30 +0.0 + 11 +26740.0 + 21 +16238.824813 + 31 +0.0 + 0 +LINE + 5 +2002 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +16143.562019 + 30 +0.0 + 11 +26812.499915 + 21 +16156.552546 + 31 +0.0 + 0 +LINE + 5 +2003 + 8 +0 + 62 + 0 + 10 +26787.499915 + 20 +16199.853817 + 30 +0.0 + 11 +26774.999915 + 21 +16221.504452 + 31 +0.0 + 0 +LINE + 5 +2004 + 8 +0 + 62 + 0 + 10 +26749.999915 + 20 +16264.805722 + 30 +0.0 + 11 +26740.0 + 21 +16282.126083 + 31 +0.0 + 0 +LINE + 5 +2005 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +16186.863289 + 30 +0.0 + 11 +26812.499915 + 21 +16199.853817 + 31 +0.0 + 0 +LINE + 5 +2006 + 8 +0 + 62 + 0 + 10 +26787.499915 + 20 +16243.155087 + 30 +0.0 + 11 +26774.999915 + 21 +16264.805722 + 31 +0.0 + 0 +LINE + 5 +2007 + 8 +0 + 62 + 0 + 10 +26749.999915 + 20 +16308.106992 + 30 +0.0 + 11 +26740.0 + 21 +16325.427353 + 31 +0.0 + 0 +LINE + 5 +2008 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +16230.164559 + 30 +0.0 + 11 +26812.499915 + 21 +16243.155087 + 31 +0.0 + 0 +LINE + 5 +2009 + 8 +0 + 62 + 0 + 10 +26787.499915 + 20 +16286.456357 + 30 +0.0 + 11 +26774.999915 + 21 +16308.106992 + 31 +0.0 + 0 +LINE + 5 +200A + 8 +0 + 62 + 0 + 10 +26749.999915 + 20 +16351.408262 + 30 +0.0 + 11 +26740.0 + 21 +16368.728623 + 31 +0.0 + 0 +LINE + 5 +200B + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +16273.465829 + 30 +0.0 + 11 +26812.499915 + 21 +16286.456357 + 31 +0.0 + 0 +LINE + 5 +200C + 8 +0 + 62 + 0 + 10 +26787.499915 + 20 +16329.757627 + 30 +0.0 + 11 +26774.999915 + 21 +16351.408262 + 31 +0.0 + 0 +LINE + 5 +200D + 8 +0 + 62 + 0 + 10 +26749.999915 + 20 +16394.709532 + 30 +0.0 + 11 +26740.0 + 21 +16412.029893 + 31 +0.0 + 0 +LINE + 5 +200E + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +16316.767099 + 30 +0.0 + 11 +26812.499915 + 21 +16329.757627 + 31 +0.0 + 0 +LINE + 5 +200F + 8 +0 + 62 + 0 + 10 +26787.499915 + 20 +16373.058897 + 30 +0.0 + 11 +26774.999915 + 21 +16394.709532 + 31 +0.0 + 0 +LINE + 5 +2010 + 8 +0 + 62 + 0 + 10 +26749.999915 + 20 +16438.010802 + 30 +0.0 + 11 +26740.0 + 21 +16455.331163 + 31 +0.0 + 0 +LINE + 5 +2011 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +16360.068369 + 30 +0.0 + 11 +26812.499915 + 21 +16373.058897 + 31 +0.0 + 0 +LINE + 5 +2012 + 8 +0 + 62 + 0 + 10 +26787.499915 + 20 +16416.360167 + 30 +0.0 + 11 +26774.999915 + 21 +16438.010802 + 31 +0.0 + 0 +LINE + 5 +2013 + 8 +0 + 62 + 0 + 10 +26749.999915 + 20 +16481.312073 + 30 +0.0 + 11 +26740.0 + 21 +16498.632433 + 31 +0.0 + 0 +LINE + 5 +2014 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +16403.369639 + 30 +0.0 + 11 +26812.499915 + 21 +16416.360167 + 31 +0.0 + 0 +LINE + 5 +2015 + 8 +0 + 62 + 0 + 10 +26787.499915 + 20 +16459.661437 + 30 +0.0 + 11 +26774.999915 + 21 +16481.312072 + 31 +0.0 + 0 +LINE + 5 +2016 + 8 +0 + 62 + 0 + 10 +26749.999915 + 20 +16524.613343 + 30 +0.0 + 11 +26740.0 + 21 +16541.933703 + 31 +0.0 + 0 +LINE + 5 +2017 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +16446.670909 + 30 +0.0 + 11 +26812.499915 + 21 +16459.661437 + 31 +0.0 + 0 +LINE + 5 +2018 + 8 +0 + 62 + 0 + 10 +26787.499915 + 20 +16502.962708 + 30 +0.0 + 11 +26774.999915 + 21 +16524.613343 + 31 +0.0 + 0 +LINE + 5 +2019 + 8 +0 + 62 + 0 + 10 +26749.999915 + 20 +16567.914613 + 30 +0.0 + 11 +26740.0 + 21 +16585.234973 + 31 +0.0 + 0 +LINE + 5 +201A + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +16489.972179 + 30 +0.0 + 11 +26812.499915 + 21 +16502.962707 + 31 +0.0 + 0 +LINE + 5 +201B + 8 +0 + 62 + 0 + 10 +26787.499915 + 20 +16546.263978 + 30 +0.0 + 11 +26774.999915 + 21 +16567.914613 + 31 +0.0 + 0 +LINE + 5 +201C + 8 +0 + 62 + 0 + 10 +26749.999915 + 20 +16611.215883 + 30 +0.0 + 11 +26740.0 + 21 +16628.536243 + 31 +0.0 + 0 +LINE + 5 +201D + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +16533.273449 + 30 +0.0 + 11 +26812.499915 + 21 +16546.263978 + 31 +0.0 + 0 +LINE + 5 +201E + 8 +0 + 62 + 0 + 10 +26787.499915 + 20 +16589.565248 + 30 +0.0 + 11 +26774.999915 + 21 +16611.215883 + 31 +0.0 + 0 +LINE + 5 +201F + 8 +0 + 62 + 0 + 10 +26749.999915 + 20 +16654.517153 + 30 +0.0 + 11 +26740.0 + 21 +16671.837513 + 31 +0.0 + 0 +LINE + 5 +2020 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +16576.574719 + 30 +0.0 + 11 +26812.499915 + 21 +16589.565248 + 31 +0.0 + 0 +LINE + 5 +2021 + 8 +0 + 62 + 0 + 10 +26787.499915 + 20 +16632.866518 + 30 +0.0 + 11 +26774.999915 + 21 +16654.517153 + 31 +0.0 + 0 +LINE + 5 +2022 + 8 +0 + 62 + 0 + 10 +26749.999915 + 20 +16697.818423 + 30 +0.0 + 11 +26740.0 + 21 +16715.138783 + 31 +0.0 + 0 +LINE + 5 +2023 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +16619.875989 + 30 +0.0 + 11 +26812.499915 + 21 +16632.866518 + 31 +0.0 + 0 +LINE + 5 +2024 + 8 +0 + 62 + 0 + 10 +26787.499915 + 20 +16676.167788 + 30 +0.0 + 11 +26774.999915 + 21 +16697.818423 + 31 +0.0 + 0 +LINE + 5 +2025 + 8 +0 + 62 + 0 + 10 +26749.999915 + 20 +16741.119693 + 30 +0.0 + 11 +26740.0 + 21 +16758.440053 + 31 +0.0 + 0 +LINE + 5 +2026 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +16663.177259 + 30 +0.0 + 11 +26812.499914 + 21 +16676.167788 + 31 +0.0 + 0 +LINE + 5 +2027 + 8 +0 + 62 + 0 + 10 +26787.499914 + 20 +16719.469058 + 30 +0.0 + 11 +26774.999914 + 21 +16741.119693 + 31 +0.0 + 0 +LINE + 5 +2028 + 8 +0 + 62 + 0 + 10 +26749.999914 + 20 +16784.420964 + 30 +0.0 + 11 +26740.0 + 21 +16801.741323 + 31 +0.0 + 0 +LINE + 5 +2029 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +16706.478529 + 30 +0.0 + 11 +26812.499914 + 21 +16719.469058 + 31 +0.0 + 0 +LINE + 5 +202A + 8 +0 + 62 + 0 + 10 +26787.499914 + 20 +16762.770328 + 30 +0.0 + 11 +26774.999914 + 21 +16784.420963 + 31 +0.0 + 0 +LINE + 5 +202B + 8 +0 + 62 + 0 + 10 +26749.999914 + 20 +16827.722234 + 30 +0.0 + 11 +26740.0 + 21 +16845.042593 + 31 +0.0 + 0 +LINE + 5 +202C + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +16749.779799 + 30 +0.0 + 11 +26812.499914 + 21 +16762.770328 + 31 +0.0 + 0 +LINE + 5 +202D + 8 +0 + 62 + 0 + 10 +26787.499914 + 20 +16806.071599 + 30 +0.0 + 11 +26774.999914 + 21 +16827.722234 + 31 +0.0 + 0 +LINE + 5 +202E + 8 +0 + 62 + 0 + 10 +26749.999914 + 20 +16871.023504 + 30 +0.0 + 11 +26740.0 + 21 +16888.343863 + 31 +0.0 + 0 +LINE + 5 +202F + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +16793.081069 + 30 +0.0 + 11 +26812.499914 + 21 +16806.071598 + 31 +0.0 + 0 +LINE + 5 +2030 + 8 +0 + 62 + 0 + 10 +26787.499914 + 20 +16849.372869 + 30 +0.0 + 11 +26774.999914 + 21 +16871.023504 + 31 +0.0 + 0 +LINE + 5 +2031 + 8 +0 + 62 + 0 + 10 +26749.999914 + 20 +16914.324774 + 30 +0.0 + 11 +26740.0 + 21 +16931.645133 + 31 +0.0 + 0 +LINE + 5 +2032 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +16836.382339 + 30 +0.0 + 11 +26812.499914 + 21 +16849.372869 + 31 +0.0 + 0 +LINE + 5 +2033 + 8 +0 + 62 + 0 + 10 +26787.499914 + 20 +16892.674139 + 30 +0.0 + 11 +26774.999914 + 21 +16914.324774 + 31 +0.0 + 0 +LINE + 5 +2034 + 8 +0 + 62 + 0 + 10 +26749.999914 + 20 +16957.626044 + 30 +0.0 + 11 +26740.0 + 21 +16974.946403 + 31 +0.0 + 0 +LINE + 5 +2035 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +16879.683609 + 30 +0.0 + 11 +26812.499914 + 21 +16892.674139 + 31 +0.0 + 0 +LINE + 5 +2036 + 8 +0 + 62 + 0 + 10 +26787.499914 + 20 +16935.975409 + 30 +0.0 + 11 +26774.999914 + 21 +16957.626044 + 31 +0.0 + 0 +LINE + 5 +2037 + 8 +0 + 62 + 0 + 10 +26749.999914 + 20 +17000.927314 + 30 +0.0 + 11 +26740.0 + 21 +17018.247673 + 31 +0.0 + 0 +LINE + 5 +2038 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +16922.984879 + 30 +0.0 + 11 +26812.499914 + 21 +16935.975409 + 31 +0.0 + 0 +LINE + 5 +2039 + 8 +0 + 62 + 0 + 10 +26787.499914 + 20 +16979.276679 + 30 +0.0 + 11 +26774.999914 + 21 +17000.927314 + 31 +0.0 + 0 +LINE + 5 +203A + 8 +0 + 62 + 0 + 10 +26749.999914 + 20 +17044.228584 + 30 +0.0 + 11 +26740.0 + 21 +17061.548943 + 31 +0.0 + 0 +LINE + 5 +203B + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +16966.286149 + 30 +0.0 + 11 +26812.499914 + 21 +16979.276679 + 31 +0.0 + 0 +LINE + 5 +203C + 8 +0 + 62 + 0 + 10 +26787.499914 + 20 +17022.577949 + 30 +0.0 + 11 +26774.999914 + 21 +17044.228584 + 31 +0.0 + 0 +LINE + 5 +203D + 8 +0 + 62 + 0 + 10 +26749.999914 + 20 +17087.529855 + 30 +0.0 + 11 +26740.0 + 21 +17104.850213 + 31 +0.0 + 0 +LINE + 5 +203E + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +17009.587419 + 30 +0.0 + 11 +26812.499914 + 21 +17022.577949 + 31 +0.0 + 0 +LINE + 5 +203F + 8 +0 + 62 + 0 + 10 +26787.499914 + 20 +17065.879219 + 30 +0.0 + 11 +26774.999914 + 21 +17087.529854 + 31 +0.0 + 0 +LINE + 5 +2040 + 8 +0 + 62 + 0 + 10 +26749.999914 + 20 +17130.831125 + 30 +0.0 + 11 +26740.0 + 21 +17148.151483 + 31 +0.0 + 0 +LINE + 5 +2041 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +17052.888689 + 30 +0.0 + 11 +26812.499914 + 21 +17065.879219 + 31 +0.0 + 0 +LINE + 5 +2042 + 8 +0 + 62 + 0 + 10 +26787.499914 + 20 +17109.18049 + 30 +0.0 + 11 +26774.999914 + 21 +17130.831125 + 31 +0.0 + 0 +LINE + 5 +2043 + 8 +0 + 62 + 0 + 10 +26749.999914 + 20 +17174.132395 + 30 +0.0 + 11 +26740.0 + 21 +17191.452753 + 31 +0.0 + 0 +LINE + 5 +2044 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +17096.189959 + 30 +0.0 + 11 +26812.499914 + 21 +17109.180489 + 31 +0.0 + 0 +LINE + 5 +2045 + 8 +0 + 62 + 0 + 10 +26787.499914 + 20 +17152.48176 + 30 +0.0 + 11 +26774.999914 + 21 +17174.132395 + 31 +0.0 + 0 +LINE + 5 +2046 + 8 +0 + 62 + 0 + 10 +26749.999914 + 20 +17217.433665 + 30 +0.0 + 11 +26740.0 + 21 +17234.754023 + 31 +0.0 + 0 +LINE + 5 +2047 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +17139.491229 + 30 +0.0 + 11 +26812.499914 + 21 +17152.48176 + 31 +0.0 + 0 +LINE + 5 +2048 + 8 +0 + 62 + 0 + 10 +26787.499914 + 20 +17195.78303 + 30 +0.0 + 11 +26774.999914 + 21 +17217.433665 + 31 +0.0 + 0 +LINE + 5 +2049 + 8 +0 + 62 + 0 + 10 +26749.999914 + 20 +17260.734935 + 30 +0.0 + 11 +26740.0 + 21 +17278.055293 + 31 +0.0 + 0 +LINE + 5 +204A + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +17182.792499 + 30 +0.0 + 11 +26812.499913 + 21 +17195.78303 + 31 +0.0 + 0 +LINE + 5 +204B + 8 +0 + 62 + 0 + 10 +26787.499913 + 20 +17239.0843 + 30 +0.0 + 11 +26774.999913 + 21 +17260.734935 + 31 +0.0 + 0 +LINE + 5 +204C + 8 +0 + 62 + 0 + 10 +26749.999913 + 20 +17304.036205 + 30 +0.0 + 11 +26740.0 + 21 +17321.356563 + 31 +0.0 + 0 +LINE + 5 +204D + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +17226.093769 + 30 +0.0 + 11 +26812.499913 + 21 +17239.0843 + 31 +0.0 + 0 +LINE + 5 +204E + 8 +0 + 62 + 0 + 10 +26787.499913 + 20 +17282.38557 + 30 +0.0 + 11 +26774.999913 + 21 +17304.036205 + 31 +0.0 + 0 +LINE + 5 +204F + 8 +0 + 62 + 0 + 10 +26749.999913 + 20 +17347.337475 + 30 +0.0 + 11 +26740.0 + 21 +17364.657833 + 31 +0.0 + 0 +LINE + 5 +2050 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +17269.395039 + 30 +0.0 + 11 +26812.499913 + 21 +17282.38557 + 31 +0.0 + 0 +LINE + 5 +2051 + 8 +0 + 62 + 0 + 10 +26787.499913 + 20 +17325.68684 + 30 +0.0 + 11 +26774.999913 + 21 +17347.337475 + 31 +0.0 + 0 +LINE + 5 +2052 + 8 +0 + 62 + 0 + 10 +26749.999913 + 20 +17390.638746 + 30 +0.0 + 11 +26740.0 + 21 +17407.959103 + 31 +0.0 + 0 +LINE + 5 +2053 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +17312.696309 + 30 +0.0 + 11 +26812.499913 + 21 +17325.68684 + 31 +0.0 + 0 +LINE + 5 +2054 + 8 +0 + 62 + 0 + 10 +26787.499913 + 20 +17368.98811 + 30 +0.0 + 11 +26774.999913 + 21 +17390.638745 + 31 +0.0 + 0 +LINE + 5 +2055 + 8 +0 + 62 + 0 + 10 +26749.999913 + 20 +17433.940016 + 30 +0.0 + 11 +26740.0 + 21 +17451.260373 + 31 +0.0 + 0 +LINE + 5 +2056 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +17355.997579 + 30 +0.0 + 11 +26812.499913 + 21 +17368.98811 + 31 +0.0 + 0 +LINE + 5 +2057 + 8 +0 + 62 + 0 + 10 +26787.499913 + 20 +17412.289381 + 30 +0.0 + 11 +26774.999913 + 21 +17433.940016 + 31 +0.0 + 0 +LINE + 5 +2058 + 8 +0 + 62 + 0 + 10 +26749.999913 + 20 +17477.241286 + 30 +0.0 + 11 +26740.0 + 21 +17494.561643 + 31 +0.0 + 0 +LINE + 5 +2059 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +17399.298849 + 30 +0.0 + 11 +26812.499913 + 21 +17412.28938 + 31 +0.0 + 0 +LINE + 5 +205A + 8 +0 + 62 + 0 + 10 +26787.499913 + 20 +17455.590651 + 30 +0.0 + 11 +26774.999913 + 21 +17477.241286 + 31 +0.0 + 0 +LINE + 5 +205B + 8 +0 + 62 + 0 + 10 +26749.999913 + 20 +17520.542556 + 30 +0.0 + 11 +26740.0 + 21 +17537.862913 + 31 +0.0 + 0 +LINE + 5 +205C + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +17442.600119 + 30 +0.0 + 11 +26812.499913 + 21 +17455.590651 + 31 +0.0 + 0 +LINE + 5 +205D + 8 +0 + 62 + 0 + 10 +26787.499913 + 20 +17498.891921 + 30 +0.0 + 11 +26774.999913 + 21 +17520.542556 + 31 +0.0 + 0 +LINE + 5 +205E + 8 +0 + 62 + 0 + 10 +26749.999913 + 20 +17563.843826 + 30 +0.0 + 11 +26740.0 + 21 +17581.164183 + 31 +0.0 + 0 +LINE + 5 +205F + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +17485.901389 + 30 +0.0 + 11 +26812.499913 + 21 +17498.891921 + 31 +0.0 + 0 +LINE + 5 +2060 + 8 +0 + 62 + 0 + 10 +26787.499913 + 20 +17542.193191 + 30 +0.0 + 11 +26774.999913 + 21 +17563.843826 + 31 +0.0 + 0 +LINE + 5 +2061 + 8 +0 + 62 + 0 + 10 +26749.999913 + 20 +17607.145096 + 30 +0.0 + 11 +26740.0 + 21 +17624.465453 + 31 +0.0 + 0 +LINE + 5 +2062 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +17529.202659 + 30 +0.0 + 11 +26812.499913 + 21 +17542.193191 + 31 +0.0 + 0 +LINE + 5 +2063 + 8 +0 + 62 + 0 + 10 +26787.499913 + 20 +17585.494461 + 30 +0.0 + 11 +26774.999913 + 21 +17607.145096 + 31 +0.0 + 0 +LINE + 5 +2064 + 8 +0 + 62 + 0 + 10 +26749.999913 + 20 +17650.446366 + 30 +0.0 + 11 +26740.0 + 21 +17667.766723 + 31 +0.0 + 0 +LINE + 5 +2065 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +17572.503929 + 30 +0.0 + 11 +26812.499913 + 21 +17585.494461 + 31 +0.0 + 0 +LINE + 5 +2066 + 8 +0 + 62 + 0 + 10 +26787.499913 + 20 +17628.795731 + 30 +0.0 + 11 +26774.999913 + 21 +17650.446366 + 31 +0.0 + 0 +LINE + 5 +2067 + 8 +0 + 62 + 0 + 10 +26749.999913 + 20 +17693.747637 + 30 +0.0 + 11 +26740.0 + 21 +17711.067993 + 31 +0.0 + 0 +LINE + 5 +2068 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +17615.805199 + 30 +0.0 + 11 +26812.499913 + 21 +17628.795731 + 31 +0.0 + 0 +LINE + 5 +2069 + 8 +0 + 62 + 0 + 10 +26787.499913 + 20 +17672.097001 + 30 +0.0 + 11 +26774.999913 + 21 +17693.747636 + 31 +0.0 + 0 +LINE + 5 +206A + 8 +0 + 62 + 0 + 10 +26749.999913 + 20 +17737.048907 + 30 +0.0 + 11 +26741.800908 + 21 +17751.25 + 31 +0.0 + 0 +LINE + 5 +206B + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +17659.106469 + 30 +0.0 + 11 +26812.499913 + 21 +17672.097001 + 31 +0.0 + 0 +LINE + 5 +206C + 8 +0 + 62 + 0 + 10 +26787.499913 + 20 +17715.398272 + 30 +0.0 + 11 +26774.999913 + 21 +17737.048907 + 31 +0.0 + 0 +LINE + 5 +206D + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +17702.407739 + 30 +0.0 + 11 +26812.499912 + 21 +17715.398271 + 31 +0.0 + 0 +LINE + 5 +206E + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +17745.709009 + 30 +0.0 + 11 +26816.800907 + 21 +17751.25 + 31 +0.0 + 0 +LINE + 5 +206F + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +14818.543487 + 30 +0.0 + 11 +26749.999939 + 21 +14835.863889 + 31 +0.0 + 0 +LINE + 5 +2070 + 8 +0 + 62 + 0 + 10 +26774.999939 + 20 +14879.16516 + 30 +0.0 + 11 +26787.499939 + 21 +14900.815795 + 31 +0.0 + 0 +LINE + 5 +2071 + 8 +0 + 62 + 0 + 10 +26812.499939 + 20 +14944.117065 + 30 +0.0 + 11 +26820.0 + 21 +14957.107551 + 31 +0.0 + 0 +LINE + 5 +2072 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +14861.844757 + 30 +0.0 + 11 +26749.999939 + 21 +14879.16516 + 31 +0.0 + 0 +LINE + 5 +2073 + 8 +0 + 62 + 0 + 10 +26774.999939 + 20 +14922.46643 + 30 +0.0 + 11 +26787.499939 + 21 +14944.117065 + 31 +0.0 + 0 +LINE + 5 +2074 + 8 +0 + 62 + 0 + 10 +26812.499939 + 20 +14987.418335 + 30 +0.0 + 11 +26820.0 + 21 +15000.408821 + 31 +0.0 + 0 +LINE + 5 +2075 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +14905.146027 + 30 +0.0 + 11 +26749.999939 + 21 +14922.46643 + 31 +0.0 + 0 +LINE + 5 +2076 + 8 +0 + 62 + 0 + 10 +26774.999939 + 20 +14965.7677 + 30 +0.0 + 11 +26787.499939 + 21 +14987.418335 + 31 +0.0 + 0 +LINE + 5 +2077 + 8 +0 + 62 + 0 + 10 +26812.499939 + 20 +15030.719605 + 30 +0.0 + 11 +26820.0 + 21 +15043.710091 + 31 +0.0 + 0 +LINE + 5 +2078 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +14948.447297 + 30 +0.0 + 11 +26749.99994 + 21 +14965.7677 + 31 +0.0 + 0 +LINE + 5 +2079 + 8 +0 + 62 + 0 + 10 +26774.99994 + 20 +15009.06897 + 30 +0.0 + 11 +26787.49994 + 21 +15030.719605 + 31 +0.0 + 0 +LINE + 5 +207A + 8 +0 + 62 + 0 + 10 +26812.49994 + 20 +15074.020875 + 30 +0.0 + 11 +26820.0 + 21 +15087.011361 + 31 +0.0 + 0 +LINE + 5 +207B + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +14991.748567 + 30 +0.0 + 11 +26749.99994 + 21 +15009.06897 + 31 +0.0 + 0 +LINE + 5 +207C + 8 +0 + 62 + 0 + 10 +26774.99994 + 20 +15052.37024 + 30 +0.0 + 11 +26787.49994 + 21 +15074.020875 + 31 +0.0 + 0 +LINE + 5 +207D + 8 +0 + 62 + 0 + 10 +26812.49994 + 20 +15117.322146 + 30 +0.0 + 11 +26820.0 + 21 +15130.312631 + 31 +0.0 + 0 +LINE + 5 +207E + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +15035.049837 + 30 +0.0 + 11 +26749.99994 + 21 +15052.37024 + 31 +0.0 + 0 +LINE + 5 +207F + 8 +0 + 62 + 0 + 10 +26774.99994 + 20 +15095.67151 + 30 +0.0 + 11 +26787.49994 + 21 +15117.322145 + 31 +0.0 + 0 +LINE + 5 +2080 + 8 +0 + 62 + 0 + 10 +26812.49994 + 20 +15160.623416 + 30 +0.0 + 11 +26820.0 + 21 +15173.613901 + 31 +0.0 + 0 +LINE + 5 +2081 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +15078.351107 + 30 +0.0 + 11 +26749.99994 + 21 +15095.67151 + 31 +0.0 + 0 +LINE + 5 +2082 + 8 +0 + 62 + 0 + 10 +26774.99994 + 20 +15138.972781 + 30 +0.0 + 11 +26787.49994 + 21 +15160.623416 + 31 +0.0 + 0 +LINE + 5 +2083 + 8 +0 + 62 + 0 + 10 +26812.49994 + 20 +15203.924686 + 30 +0.0 + 11 +26820.0 + 21 +15216.915171 + 31 +0.0 + 0 +LINE + 5 +2084 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +15121.652377 + 30 +0.0 + 11 +26749.99994 + 21 +15138.97278 + 31 +0.0 + 0 +LINE + 5 +2085 + 8 +0 + 62 + 0 + 10 +26774.99994 + 20 +15182.274051 + 30 +0.0 + 11 +26787.49994 + 21 +15203.924686 + 31 +0.0 + 0 +LINE + 5 +2086 + 8 +0 + 62 + 0 + 10 +26812.49994 + 20 +15247.225956 + 30 +0.0 + 11 +26820.0 + 21 +15260.216441 + 31 +0.0 + 0 +LINE + 5 +2087 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +15164.953647 + 30 +0.0 + 11 +26749.99994 + 21 +15182.274051 + 31 +0.0 + 0 +LINE + 5 +2088 + 8 +0 + 62 + 0 + 10 +26774.99994 + 20 +15225.575321 + 30 +0.0 + 11 +26787.49994 + 21 +15247.225956 + 31 +0.0 + 0 +LINE + 5 +2089 + 8 +0 + 62 + 0 + 10 +26812.49994 + 20 +15290.527226 + 30 +0.0 + 11 +26820.0 + 21 +15303.517711 + 31 +0.0 + 0 +LINE + 5 +208A + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +15208.254917 + 30 +0.0 + 11 +26749.99994 + 21 +15225.575321 + 31 +0.0 + 0 +LINE + 5 +208B + 8 +0 + 62 + 0 + 10 +26774.99994 + 20 +15268.876591 + 30 +0.0 + 11 +26787.49994 + 21 +15290.527226 + 31 +0.0 + 0 +LINE + 5 +208C + 8 +0 + 62 + 0 + 10 +26812.49994 + 20 +15333.828496 + 30 +0.0 + 11 +26820.0 + 21 +15346.818981 + 31 +0.0 + 0 +LINE + 5 +208D + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +15251.556187 + 30 +0.0 + 11 +26749.99994 + 21 +15268.876591 + 31 +0.0 + 0 +LINE + 5 +208E + 8 +0 + 62 + 0 + 10 +26774.99994 + 20 +15312.177861 + 30 +0.0 + 11 +26787.49994 + 21 +15333.828496 + 31 +0.0 + 0 +LINE + 5 +208F + 8 +0 + 62 + 0 + 10 +26812.49994 + 20 +15377.129766 + 30 +0.0 + 11 +26820.0 + 21 +15390.120251 + 31 +0.0 + 0 +LINE + 5 +2090 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +15294.857457 + 30 +0.0 + 11 +26749.99994 + 21 +15312.177861 + 31 +0.0 + 0 +LINE + 5 +2091 + 8 +0 + 62 + 0 + 10 +26774.99994 + 20 +15355.479131 + 30 +0.0 + 11 +26787.49994 + 21 +15377.129766 + 31 +0.0 + 0 +LINE + 5 +2092 + 8 +0 + 62 + 0 + 10 +26812.49994 + 20 +15420.431036 + 30 +0.0 + 11 +26820.0 + 21 +15433.421521 + 31 +0.0 + 0 +LINE + 5 +2093 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +15338.158727 + 30 +0.0 + 11 +26749.99994 + 21 +15355.479131 + 31 +0.0 + 0 +LINE + 5 +2094 + 8 +0 + 62 + 0 + 10 +26774.99994 + 20 +15398.780401 + 30 +0.0 + 11 +26787.49994 + 21 +15420.431036 + 31 +0.0 + 0 +LINE + 5 +2095 + 8 +0 + 62 + 0 + 10 +26812.49994 + 20 +15463.732307 + 30 +0.0 + 11 +26820.0 + 21 +15476.722791 + 31 +0.0 + 0 +LINE + 5 +2096 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +15381.459997 + 30 +0.0 + 11 +26749.99994 + 21 +15398.780401 + 31 +0.0 + 0 +LINE + 5 +2097 + 8 +0 + 62 + 0 + 10 +26774.99994 + 20 +15442.081671 + 30 +0.0 + 11 +26787.49994 + 21 +15463.732307 + 31 +0.0 + 0 +LINE + 5 +2098 + 8 +0 + 62 + 0 + 10 +26812.49994 + 20 +15507.033577 + 30 +0.0 + 11 +26820.0 + 21 +15520.024061 + 31 +0.0 + 0 +LINE + 5 +2099 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +15424.761267 + 30 +0.0 + 11 +26749.99994 + 21 +15442.081671 + 31 +0.0 + 0 +LINE + 5 +209A + 8 +0 + 62 + 0 + 10 +26774.99994 + 20 +15485.382942 + 30 +0.0 + 11 +26787.49994 + 21 +15507.033577 + 31 +0.0 + 0 +LINE + 5 +209B + 8 +0 + 62 + 0 + 10 +26812.49994 + 20 +15550.334847 + 30 +0.0 + 11 +26820.0 + 21 +15563.325331 + 31 +0.0 + 0 +LINE + 5 +209C + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +15468.062537 + 30 +0.0 + 11 +26749.999941 + 21 +15485.382942 + 31 +0.0 + 0 +LINE + 5 +209D + 8 +0 + 62 + 0 + 10 +26774.999941 + 20 +15528.684212 + 30 +0.0 + 11 +26787.499941 + 21 +15550.334847 + 31 +0.0 + 0 +LINE + 5 +209E + 8 +0 + 62 + 0 + 10 +26812.499941 + 20 +15593.636117 + 30 +0.0 + 11 +26820.0 + 21 +15606.626601 + 31 +0.0 + 0 +LINE + 5 +209F + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +15511.363807 + 30 +0.0 + 11 +26749.999941 + 21 +15528.684212 + 31 +0.0 + 0 +LINE + 5 +20A0 + 8 +0 + 62 + 0 + 10 +26774.999941 + 20 +15571.985482 + 30 +0.0 + 11 +26787.499941 + 21 +15593.636117 + 31 +0.0 + 0 +LINE + 5 +20A1 + 8 +0 + 62 + 0 + 10 +26812.499941 + 20 +15636.937387 + 30 +0.0 + 11 +26820.0 + 21 +15649.927871 + 31 +0.0 + 0 +LINE + 5 +20A2 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +15554.665077 + 30 +0.0 + 11 +26749.999941 + 21 +15571.985482 + 31 +0.0 + 0 +LINE + 5 +20A3 + 8 +0 + 62 + 0 + 10 +26774.999941 + 20 +15615.286752 + 30 +0.0 + 11 +26787.499941 + 21 +15636.937387 + 31 +0.0 + 0 +LINE + 5 +20A4 + 8 +0 + 62 + 0 + 10 +26812.499941 + 20 +15680.238657 + 30 +0.0 + 11 +26820.0 + 21 +15693.229141 + 31 +0.0 + 0 +LINE + 5 +20A5 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +15597.966347 + 30 +0.0 + 11 +26749.999941 + 21 +15615.286752 + 31 +0.0 + 0 +LINE + 5 +20A6 + 8 +0 + 62 + 0 + 10 +26774.999941 + 20 +15658.588022 + 30 +0.0 + 11 +26787.499941 + 21 +15680.238657 + 31 +0.0 + 0 +LINE + 5 +20A7 + 8 +0 + 62 + 0 + 10 +26812.499941 + 20 +15723.539927 + 30 +0.0 + 11 +26820.0 + 21 +15736.530411 + 31 +0.0 + 0 +LINE + 5 +20A8 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +15641.267617 + 30 +0.0 + 11 +26749.999941 + 21 +15658.588022 + 31 +0.0 + 0 +LINE + 5 +20A9 + 8 +0 + 62 + 0 + 10 +26774.999941 + 20 +15701.889292 + 30 +0.0 + 11 +26787.499941 + 21 +15723.539927 + 31 +0.0 + 0 +LINE + 5 +20AA + 8 +0 + 62 + 0 + 10 +26812.499941 + 20 +15766.841198 + 30 +0.0 + 11 +26820.0 + 21 +15779.831681 + 31 +0.0 + 0 +LINE + 5 +20AB + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +15684.568887 + 30 +0.0 + 11 +26749.999941 + 21 +15701.889292 + 31 +0.0 + 0 +LINE + 5 +20AC + 8 +0 + 62 + 0 + 10 +26774.999941 + 20 +15745.190562 + 30 +0.0 + 11 +26787.499941 + 21 +15766.841198 + 31 +0.0 + 0 +LINE + 5 +20AD + 8 +0 + 62 + 0 + 10 +26812.499941 + 20 +15810.142468 + 30 +0.0 + 11 +26820.0 + 21 +15823.132951 + 31 +0.0 + 0 +LINE + 5 +20AE + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +15727.870157 + 30 +0.0 + 11 +26749.999941 + 21 +15745.190562 + 31 +0.0 + 0 +LINE + 5 +20AF + 8 +0 + 62 + 0 + 10 +26774.999941 + 20 +15788.491833 + 30 +0.0 + 11 +26787.499941 + 21 +15810.142468 + 31 +0.0 + 0 +LINE + 5 +20B0 + 8 +0 + 62 + 0 + 10 +26812.499941 + 20 +15853.443738 + 30 +0.0 + 11 +26820.0 + 21 +15866.434221 + 31 +0.0 + 0 +LINE + 5 +20B1 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +15771.171427 + 30 +0.0 + 11 +26749.999941 + 21 +15788.491833 + 31 +0.0 + 0 +LINE + 5 +20B2 + 8 +0 + 62 + 0 + 10 +26774.999941 + 20 +15831.793103 + 30 +0.0 + 11 +26787.499941 + 21 +15853.443738 + 31 +0.0 + 0 +LINE + 5 +20B3 + 8 +0 + 62 + 0 + 10 +26812.499941 + 20 +15896.745008 + 30 +0.0 + 11 +26820.0 + 21 +15909.735491 + 31 +0.0 + 0 +LINE + 5 +20B4 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +15814.472697 + 30 +0.0 + 11 +26749.999941 + 21 +15831.793103 + 31 +0.0 + 0 +LINE + 5 +20B5 + 8 +0 + 62 + 0 + 10 +26774.999941 + 20 +15875.094373 + 30 +0.0 + 11 +26787.499941 + 21 +15896.745008 + 31 +0.0 + 0 +LINE + 5 +20B6 + 8 +0 + 62 + 0 + 10 +26812.499941 + 20 +15940.046278 + 30 +0.0 + 11 +26820.0 + 21 +15953.036761 + 31 +0.0 + 0 +LINE + 5 +20B7 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +15857.773967 + 30 +0.0 + 11 +26749.999941 + 21 +15875.094373 + 31 +0.0 + 0 +LINE + 5 +20B8 + 8 +0 + 62 + 0 + 10 +26774.999941 + 20 +15918.395643 + 30 +0.0 + 11 +26787.499941 + 21 +15940.046278 + 31 +0.0 + 0 +LINE + 5 +20B9 + 8 +0 + 62 + 0 + 10 +26812.499941 + 20 +15983.347548 + 30 +0.0 + 11 +26820.0 + 21 +15996.338031 + 31 +0.0 + 0 +LINE + 5 +20BA + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +15901.075237 + 30 +0.0 + 11 +26749.999941 + 21 +15918.395643 + 31 +0.0 + 0 +LINE + 5 +20BB + 8 +0 + 62 + 0 + 10 +26774.999941 + 20 +15961.696913 + 30 +0.0 + 11 +26787.499941 + 21 +15983.347548 + 31 +0.0 + 0 +LINE + 5 +20BC + 8 +0 + 62 + 0 + 10 +26812.499941 + 20 +16026.648818 + 30 +0.0 + 11 +26820.0 + 21 +16039.639301 + 31 +0.0 + 0 +LINE + 5 +20BD + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +15944.376507 + 30 +0.0 + 11 +26749.999941 + 21 +15961.696913 + 31 +0.0 + 0 +LINE + 5 +20BE + 8 +0 + 62 + 0 + 10 +26774.999941 + 20 +16004.998183 + 30 +0.0 + 11 +26787.499941 + 21 +16026.648818 + 31 +0.0 + 0 +LINE + 5 +20BF + 8 +0 + 62 + 0 + 10 +26812.499941 + 20 +16069.950089 + 30 +0.0 + 11 +26820.0 + 21 +16082.940571 + 31 +0.0 + 0 +LINE + 5 +20C0 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +15987.677777 + 30 +0.0 + 11 +26749.999941 + 21 +16004.998183 + 31 +0.0 + 0 +LINE + 5 +20C1 + 8 +0 + 62 + 0 + 10 +26774.999941 + 20 +16048.299453 + 30 +0.0 + 11 +26787.499941 + 21 +16069.950089 + 31 +0.0 + 0 +LINE + 5 +20C2 + 8 +0 + 62 + 0 + 10 +26812.499941 + 20 +16113.251359 + 30 +0.0 + 11 +26820.0 + 21 +16126.241841 + 31 +0.0 + 0 +LINE + 5 +20C3 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +16030.979047 + 30 +0.0 + 11 +26749.999942 + 21 +16048.299453 + 31 +0.0 + 0 +LINE + 5 +20C4 + 8 +0 + 62 + 0 + 10 +26774.999942 + 20 +16091.600724 + 30 +0.0 + 11 +26787.499942 + 21 +16113.251359 + 31 +0.0 + 0 +LINE + 5 +20C5 + 8 +0 + 62 + 0 + 10 +26812.499942 + 20 +16156.552629 + 30 +0.0 + 11 +26820.0 + 21 +16169.543111 + 31 +0.0 + 0 +LINE + 5 +20C6 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +16074.280317 + 30 +0.0 + 11 +26749.999942 + 21 +16091.600724 + 31 +0.0 + 0 +LINE + 5 +20C7 + 8 +0 + 62 + 0 + 10 +26774.999942 + 20 +16134.901994 + 30 +0.0 + 11 +26787.499942 + 21 +16156.552629 + 31 +0.0 + 0 +LINE + 5 +20C8 + 8 +0 + 62 + 0 + 10 +26812.499942 + 20 +16199.853899 + 30 +0.0 + 11 +26820.0 + 21 +16212.844381 + 31 +0.0 + 0 +LINE + 5 +20C9 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +16117.581587 + 30 +0.0 + 11 +26749.999942 + 21 +16134.901994 + 31 +0.0 + 0 +LINE + 5 +20CA + 8 +0 + 62 + 0 + 10 +26774.999942 + 20 +16178.203264 + 30 +0.0 + 11 +26787.499942 + 21 +16199.853899 + 31 +0.0 + 0 +LINE + 5 +20CB + 8 +0 + 62 + 0 + 10 +26812.499942 + 20 +16243.155169 + 30 +0.0 + 11 +26820.0 + 21 +16256.145651 + 31 +0.0 + 0 +LINE + 5 +20CC + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +16160.882857 + 30 +0.0 + 11 +26749.999942 + 21 +16178.203264 + 31 +0.0 + 0 +LINE + 5 +20CD + 8 +0 + 62 + 0 + 10 +26774.999942 + 20 +16221.504534 + 30 +0.0 + 11 +26787.499942 + 21 +16243.155169 + 31 +0.0 + 0 +LINE + 5 +20CE + 8 +0 + 62 + 0 + 10 +26812.499942 + 20 +16286.456439 + 30 +0.0 + 11 +26820.0 + 21 +16299.446921 + 31 +0.0 + 0 +LINE + 5 +20CF + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +16204.184127 + 30 +0.0 + 11 +26749.999942 + 21 +16221.504534 + 31 +0.0 + 0 +LINE + 5 +20D0 + 8 +0 + 62 + 0 + 10 +26774.999942 + 20 +16264.805804 + 30 +0.0 + 11 +26787.499942 + 21 +16286.456439 + 31 +0.0 + 0 +LINE + 5 +20D1 + 8 +0 + 62 + 0 + 10 +26812.499942 + 20 +16329.757709 + 30 +0.0 + 11 +26820.0 + 21 +16342.748191 + 31 +0.0 + 0 +LINE + 5 +20D2 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +16247.485397 + 30 +0.0 + 11 +26749.999942 + 21 +16264.805804 + 31 +0.0 + 0 +LINE + 5 +20D3 + 8 +0 + 62 + 0 + 10 +26774.999942 + 20 +16308.107074 + 30 +0.0 + 11 +26787.499942 + 21 +16329.757709 + 31 +0.0 + 0 +LINE + 5 +20D4 + 8 +0 + 62 + 0 + 10 +26812.499942 + 20 +16373.05898 + 30 +0.0 + 11 +26820.0 + 21 +16386.049461 + 31 +0.0 + 0 +LINE + 5 +20D5 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +16290.786667 + 30 +0.0 + 11 +26749.999942 + 21 +16308.107074 + 31 +0.0 + 0 +LINE + 5 +20D6 + 8 +0 + 62 + 0 + 10 +26774.999942 + 20 +16351.408344 + 30 +0.0 + 11 +26787.499942 + 21 +16373.05898 + 31 +0.0 + 0 +LINE + 5 +20D7 + 8 +0 + 62 + 0 + 10 +26812.499942 + 20 +16416.36025 + 30 +0.0 + 11 +26820.0 + 21 +16429.350731 + 31 +0.0 + 0 +LINE + 5 +20D8 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +16334.087937 + 30 +0.0 + 11 +26749.999942 + 21 +16351.408344 + 31 +0.0 + 0 +LINE + 5 +20D9 + 8 +0 + 62 + 0 + 10 +26774.999942 + 20 +16394.709615 + 30 +0.0 + 11 +26787.499942 + 21 +16416.36025 + 31 +0.0 + 0 +LINE + 5 +20DA + 8 +0 + 62 + 0 + 10 +26812.499942 + 20 +16459.66152 + 30 +0.0 + 11 +26820.0 + 21 +16472.652001 + 31 +0.0 + 0 +LINE + 5 +20DB + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +16377.389207 + 30 +0.0 + 11 +26749.999942 + 21 +16394.709615 + 31 +0.0 + 0 +LINE + 5 +20DC + 8 +0 + 62 + 0 + 10 +26774.999942 + 20 +16438.010885 + 30 +0.0 + 11 +26787.499942 + 21 +16459.66152 + 31 +0.0 + 0 +LINE + 5 +20DD + 8 +0 + 62 + 0 + 10 +26812.499942 + 20 +16502.96279 + 30 +0.0 + 11 +26820.0 + 21 +16515.953271 + 31 +0.0 + 0 +LINE + 5 +20DE + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +16420.690477 + 30 +0.0 + 11 +26749.999942 + 21 +16438.010885 + 31 +0.0 + 0 +LINE + 5 +20DF + 8 +0 + 62 + 0 + 10 +26774.999942 + 20 +16481.312155 + 30 +0.0 + 11 +26787.499942 + 21 +16502.96279 + 31 +0.0 + 0 +LINE + 5 +20E0 + 8 +0 + 62 + 0 + 10 +26812.499942 + 20 +16546.26406 + 30 +0.0 + 11 +26820.0 + 21 +16559.254541 + 31 +0.0 + 0 +LINE + 5 +20E1 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +16463.991747 + 30 +0.0 + 11 +26749.999942 + 21 +16481.312155 + 31 +0.0 + 0 +LINE + 5 +20E2 + 8 +0 + 62 + 0 + 10 +26774.999942 + 20 +16524.613425 + 30 +0.0 + 11 +26787.499942 + 21 +16546.26406 + 31 +0.0 + 0 +LINE + 5 +20E3 + 8 +0 + 62 + 0 + 10 +26812.499942 + 20 +16589.56533 + 30 +0.0 + 11 +26820.0 + 21 +16602.555811 + 31 +0.0 + 0 +LINE + 5 +20E4 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +16507.293017 + 30 +0.0 + 11 +26749.999942 + 21 +16524.613425 + 31 +0.0 + 0 +LINE + 5 +20E5 + 8 +0 + 62 + 0 + 10 +26774.999942 + 20 +16567.914695 + 30 +0.0 + 11 +26787.499942 + 21 +16589.56533 + 31 +0.0 + 0 +LINE + 5 +20E6 + 8 +0 + 62 + 0 + 10 +26812.499942 + 20 +16632.8666 + 30 +0.0 + 11 +26820.0 + 21 +16645.857081 + 31 +0.0 + 0 +LINE + 5 +20E7 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +16550.594287 + 30 +0.0 + 11 +26749.999943 + 21 +16567.914695 + 31 +0.0 + 0 +LINE + 5 +20E8 + 8 +0 + 62 + 0 + 10 +26774.999943 + 20 +16611.215965 + 30 +0.0 + 11 +26787.499943 + 21 +16632.8666 + 31 +0.0 + 0 +LINE + 5 +20E9 + 8 +0 + 62 + 0 + 10 +26812.499943 + 20 +16676.167871 + 30 +0.0 + 11 +26820.0 + 21 +16689.158351 + 31 +0.0 + 0 +LINE + 5 +20EA + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +16593.895557 + 30 +0.0 + 11 +26749.999943 + 21 +16611.215965 + 31 +0.0 + 0 +LINE + 5 +20EB + 8 +0 + 62 + 0 + 10 +26774.999943 + 20 +16654.517235 + 30 +0.0 + 11 +26787.499943 + 21 +16676.167871 + 31 +0.0 + 0 +LINE + 5 +20EC + 8 +0 + 62 + 0 + 10 +26812.499943 + 20 +16719.469141 + 30 +0.0 + 11 +26820.0 + 21 +16732.459621 + 31 +0.0 + 0 +LINE + 5 +20ED + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +16637.196827 + 30 +0.0 + 11 +26749.999943 + 21 +16654.517235 + 31 +0.0 + 0 +LINE + 5 +20EE + 8 +0 + 62 + 0 + 10 +26774.999943 + 20 +16697.818506 + 30 +0.0 + 11 +26787.499943 + 21 +16719.469141 + 31 +0.0 + 0 +LINE + 5 +20EF + 8 +0 + 62 + 0 + 10 +26812.499943 + 20 +16762.770411 + 30 +0.0 + 11 +26820.0 + 21 +16775.760891 + 31 +0.0 + 0 +LINE + 5 +20F0 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +16680.498097 + 30 +0.0 + 11 +26749.999943 + 21 +16697.818506 + 31 +0.0 + 0 +LINE + 5 +20F1 + 8 +0 + 62 + 0 + 10 +26774.999943 + 20 +16741.119776 + 30 +0.0 + 11 +26787.499943 + 21 +16762.770411 + 31 +0.0 + 0 +LINE + 5 +20F2 + 8 +0 + 62 + 0 + 10 +26812.499943 + 20 +16806.071681 + 30 +0.0 + 11 +26820.0 + 21 +16819.062161 + 31 +0.0 + 0 +LINE + 5 +20F3 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +16723.799367 + 30 +0.0 + 11 +26749.999943 + 21 +16741.119776 + 31 +0.0 + 0 +LINE + 5 +20F4 + 8 +0 + 62 + 0 + 10 +26774.999943 + 20 +16784.421046 + 30 +0.0 + 11 +26787.499943 + 21 +16806.071681 + 31 +0.0 + 0 +LINE + 5 +20F5 + 8 +0 + 62 + 0 + 10 +26812.499943 + 20 +16849.372951 + 30 +0.0 + 11 +26820.0 + 21 +16862.363431 + 31 +0.0 + 0 +LINE + 5 +20F6 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +16767.100637 + 30 +0.0 + 11 +26749.999943 + 21 +16784.421046 + 31 +0.0 + 0 +LINE + 5 +20F7 + 8 +0 + 62 + 0 + 10 +26774.999943 + 20 +16827.722316 + 30 +0.0 + 11 +26787.499943 + 21 +16849.372951 + 31 +0.0 + 0 +LINE + 5 +20F8 + 8 +0 + 62 + 0 + 10 +26812.499943 + 20 +16892.674221 + 30 +0.0 + 11 +26820.0 + 21 +16905.664701 + 31 +0.0 + 0 +LINE + 5 +20F9 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +16810.401907 + 30 +0.0 + 11 +26749.999943 + 21 +16827.722316 + 31 +0.0 + 0 +LINE + 5 +20FA + 8 +0 + 62 + 0 + 10 +26774.999943 + 20 +16871.023586 + 30 +0.0 + 11 +26787.499943 + 21 +16892.674221 + 31 +0.0 + 0 +LINE + 5 +20FB + 8 +0 + 62 + 0 + 10 +26812.499943 + 20 +16935.975491 + 30 +0.0 + 11 +26820.0 + 21 +16948.965971 + 31 +0.0 + 0 +LINE + 5 +20FC + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +16853.703177 + 30 +0.0 + 11 +26749.999943 + 21 +16871.023586 + 31 +0.0 + 0 +LINE + 5 +20FD + 8 +0 + 62 + 0 + 10 +26774.999943 + 20 +16914.324856 + 30 +0.0 + 11 +26787.499943 + 21 +16935.975491 + 31 +0.0 + 0 +LINE + 5 +20FE + 8 +0 + 62 + 0 + 10 +26812.499943 + 20 +16979.276762 + 30 +0.0 + 11 +26820.0 + 21 +16992.267241 + 31 +0.0 + 0 +LINE + 5 +20FF + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +16897.004447 + 30 +0.0 + 11 +26749.999943 + 21 +16914.324856 + 31 +0.0 + 0 +LINE + 5 +2100 + 8 +0 + 62 + 0 + 10 +26774.999943 + 20 +16957.626126 + 30 +0.0 + 11 +26787.499943 + 21 +16979.276762 + 31 +0.0 + 0 +LINE + 5 +2101 + 8 +0 + 62 + 0 + 10 +26812.499943 + 20 +17022.578032 + 30 +0.0 + 11 +26820.0 + 21 +17035.568511 + 31 +0.0 + 0 +LINE + 5 +2102 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +16940.305717 + 30 +0.0 + 11 +26749.999943 + 21 +16957.626126 + 31 +0.0 + 0 +LINE + 5 +2103 + 8 +0 + 62 + 0 + 10 +26774.999943 + 20 +17000.927397 + 30 +0.0 + 11 +26787.499943 + 21 +17022.578032 + 31 +0.0 + 0 +LINE + 5 +2104 + 8 +0 + 62 + 0 + 10 +26812.499943 + 20 +17065.879302 + 30 +0.0 + 11 +26820.0 + 21 +17078.869781 + 31 +0.0 + 0 +LINE + 5 +2105 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +16983.606987 + 30 +0.0 + 11 +26749.999943 + 21 +17000.927397 + 31 +0.0 + 0 +LINE + 5 +2106 + 8 +0 + 62 + 0 + 10 +26774.999943 + 20 +17044.228667 + 30 +0.0 + 11 +26787.499943 + 21 +17065.879302 + 31 +0.0 + 0 +LINE + 5 +2107 + 8 +0 + 62 + 0 + 10 +26812.499943 + 20 +17109.180572 + 30 +0.0 + 11 +26820.0 + 21 +17122.171051 + 31 +0.0 + 0 +LINE + 5 +2108 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +17026.908257 + 30 +0.0 + 11 +26749.999943 + 21 +17044.228667 + 31 +0.0 + 0 +LINE + 5 +2109 + 8 +0 + 62 + 0 + 10 +26774.999943 + 20 +17087.529937 + 30 +0.0 + 11 +26787.499943 + 21 +17109.180572 + 31 +0.0 + 0 +LINE + 5 +210A + 8 +0 + 62 + 0 + 10 +26812.499943 + 20 +17152.481842 + 30 +0.0 + 11 +26820.0 + 21 +17165.472321 + 31 +0.0 + 0 +LINE + 5 +210B + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +17070.209527 + 30 +0.0 + 11 +26749.999944 + 21 +17087.529937 + 31 +0.0 + 0 +LINE + 5 +210C + 8 +0 + 62 + 0 + 10 +26774.999944 + 20 +17130.831207 + 30 +0.0 + 11 +26787.499944 + 21 +17152.481842 + 31 +0.0 + 0 +LINE + 5 +210D + 8 +0 + 62 + 0 + 10 +26812.499944 + 20 +17195.783112 + 30 +0.0 + 11 +26820.0 + 21 +17208.773591 + 31 +0.0 + 0 +LINE + 5 +210E + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +17113.510797 + 30 +0.0 + 11 +26749.999944 + 21 +17130.831207 + 31 +0.0 + 0 +LINE + 5 +210F + 8 +0 + 62 + 0 + 10 +26774.999944 + 20 +17174.132477 + 30 +0.0 + 11 +26787.499944 + 21 +17195.783112 + 31 +0.0 + 0 +LINE + 5 +2110 + 8 +0 + 62 + 0 + 10 +26812.499944 + 20 +17239.084382 + 30 +0.0 + 11 +26820.0 + 21 +17252.074861 + 31 +0.0 + 0 +LINE + 5 +2111 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +17156.812067 + 30 +0.0 + 11 +26749.999944 + 21 +17174.132477 + 31 +0.0 + 0 +LINE + 5 +2112 + 8 +0 + 62 + 0 + 10 +26774.999944 + 20 +17217.433747 + 30 +0.0 + 11 +26787.499944 + 21 +17239.084382 + 31 +0.0 + 0 +LINE + 5 +2113 + 8 +0 + 62 + 0 + 10 +26812.499944 + 20 +17282.385653 + 30 +0.0 + 11 +26820.0 + 21 +17295.376131 + 31 +0.0 + 0 +LINE + 5 +2114 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +17200.113337 + 30 +0.0 + 11 +26749.999944 + 21 +17217.433747 + 31 +0.0 + 0 +LINE + 5 +2115 + 8 +0 + 62 + 0 + 10 +26774.999944 + 20 +17260.735017 + 30 +0.0 + 11 +26787.499944 + 21 +17282.385653 + 31 +0.0 + 0 +LINE + 5 +2116 + 8 +0 + 62 + 0 + 10 +26812.499944 + 20 +17325.686923 + 30 +0.0 + 11 +26820.0 + 21 +17338.677401 + 31 +0.0 + 0 +LINE + 5 +2117 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +17243.414607 + 30 +0.0 + 11 +26749.999944 + 21 +17260.735017 + 31 +0.0 + 0 +LINE + 5 +2118 + 8 +0 + 62 + 0 + 10 +26774.999944 + 20 +17304.036288 + 30 +0.0 + 11 +26787.499944 + 21 +17325.686923 + 31 +0.0 + 0 +LINE + 5 +2119 + 8 +0 + 62 + 0 + 10 +26812.499944 + 20 +17368.988193 + 30 +0.0 + 11 +26820.0 + 21 +17381.978671 + 31 +0.0 + 0 +LINE + 5 +211A + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +17286.715877 + 30 +0.0 + 11 +26749.999944 + 21 +17304.036288 + 31 +0.0 + 0 +LINE + 5 +211B + 8 +0 + 62 + 0 + 10 +26774.999944 + 20 +17347.337558 + 30 +0.0 + 11 +26787.499944 + 21 +17368.988193 + 31 +0.0 + 0 +LINE + 5 +211C + 8 +0 + 62 + 0 + 10 +26812.499944 + 20 +17412.289463 + 30 +0.0 + 11 +26820.0 + 21 +17425.279941 + 31 +0.0 + 0 +LINE + 5 +211D + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +17330.017147 + 30 +0.0 + 11 +26749.999944 + 21 +17347.337558 + 31 +0.0 + 0 +LINE + 5 +211E + 8 +0 + 62 + 0 + 10 +26774.999944 + 20 +17390.638828 + 30 +0.0 + 11 +26787.499944 + 21 +17412.289463 + 31 +0.0 + 0 +LINE + 5 +211F + 8 +0 + 62 + 0 + 10 +26812.499944 + 20 +17455.590733 + 30 +0.0 + 11 +26820.0 + 21 +17468.581211 + 31 +0.0 + 0 +LINE + 5 +2120 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +17373.318417 + 30 +0.0 + 11 +26749.999944 + 21 +17390.638828 + 31 +0.0 + 0 +LINE + 5 +2121 + 8 +0 + 62 + 0 + 10 +26774.999944 + 20 +17433.940098 + 30 +0.0 + 11 +26787.499944 + 21 +17455.590733 + 31 +0.0 + 0 +LINE + 5 +2122 + 8 +0 + 62 + 0 + 10 +26812.499944 + 20 +17498.892003 + 30 +0.0 + 11 +26820.0 + 21 +17511.882481 + 31 +0.0 + 0 +LINE + 5 +2123 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +17416.619687 + 30 +0.0 + 11 +26749.999944 + 21 +17433.940098 + 31 +0.0 + 0 +LINE + 5 +2124 + 8 +0 + 62 + 0 + 10 +26774.999944 + 20 +17477.241368 + 30 +0.0 + 11 +26787.499944 + 21 +17498.892003 + 31 +0.0 + 0 +LINE + 5 +2125 + 8 +0 + 62 + 0 + 10 +26812.499944 + 20 +17542.193273 + 30 +0.0 + 11 +26820.0 + 21 +17555.183751 + 31 +0.0 + 0 +LINE + 5 +2126 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +17459.920957 + 30 +0.0 + 11 +26749.999944 + 21 +17477.241368 + 31 +0.0 + 0 +LINE + 5 +2127 + 8 +0 + 62 + 0 + 10 +26774.999944 + 20 +17520.542638 + 30 +0.0 + 11 +26787.499944 + 21 +17542.193273 + 31 +0.0 + 0 +LINE + 5 +2128 + 8 +0 + 62 + 0 + 10 +26812.499944 + 20 +17585.494544 + 30 +0.0 + 11 +26820.0 + 21 +17598.485021 + 31 +0.0 + 0 +LINE + 5 +2129 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +17503.222227 + 30 +0.0 + 11 +26749.999944 + 21 +17520.542638 + 31 +0.0 + 0 +LINE + 5 +212A + 8 +0 + 62 + 0 + 10 +26774.999944 + 20 +17563.843908 + 30 +0.0 + 11 +26787.499944 + 21 +17585.494544 + 31 +0.0 + 0 +LINE + 5 +212B + 8 +0 + 62 + 0 + 10 +26812.499944 + 20 +17628.795814 + 30 +0.0 + 11 +26820.0 + 21 +17641.786291 + 31 +0.0 + 0 +LINE + 5 +212C + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +17546.523497 + 30 +0.0 + 11 +26749.999944 + 21 +17563.843908 + 31 +0.0 + 0 +LINE + 5 +212D + 8 +0 + 62 + 0 + 10 +26774.999944 + 20 +17607.145179 + 30 +0.0 + 11 +26787.499944 + 21 +17628.795814 + 31 +0.0 + 0 +LINE + 5 +212E + 8 +0 + 62 + 0 + 10 +26812.499944 + 20 +17672.097084 + 30 +0.0 + 11 +26820.0 + 21 +17685.087561 + 31 +0.0 + 0 +LINE + 5 +212F + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +17589.824767 + 30 +0.0 + 11 +26749.999945 + 21 +17607.145179 + 31 +0.0 + 0 +LINE + 5 +2130 + 8 +0 + 62 + 0 + 10 +26774.999945 + 20 +17650.446449 + 30 +0.0 + 11 +26787.499945 + 21 +17672.097084 + 31 +0.0 + 0 +LINE + 5 +2131 + 8 +0 + 62 + 0 + 10 +26812.499945 + 20 +17715.398354 + 30 +0.0 + 11 +26820.0 + 21 +17728.388831 + 31 +0.0 + 0 +LINE + 5 +2132 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +17633.126037 + 30 +0.0 + 11 +26749.999945 + 21 +17650.446449 + 31 +0.0 + 0 +LINE + 5 +2133 + 8 +0 + 62 + 0 + 10 +26774.999945 + 20 +17693.747719 + 30 +0.0 + 11 +26787.499945 + 21 +17715.398354 + 31 +0.0 + 0 +LINE + 5 +2134 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +17676.427307 + 30 +0.0 + 11 +26749.999945 + 21 +17693.747719 + 31 +0.0 + 0 +LINE + 5 +2135 + 8 +0 + 62 + 0 + 10 +26774.999945 + 20 +17737.048989 + 30 +0.0 + 11 +26783.198902 + 21 +17751.25 + 31 +0.0 + 0 +LINE + 5 +2136 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +17719.728577 + 30 +0.0 + 11 +26749.999945 + 21 +17737.048989 + 31 +0.0 + 0 +LINE + 5 +2137 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +14775.242217 + 30 +0.0 + 11 +26749.999939 + 21 +14792.562619 + 31 +0.0 + 0 +LINE + 5 +2138 + 8 +0 + 62 + 0 + 10 +26774.999939 + 20 +14835.86389 + 30 +0.0 + 11 +26787.499939 + 21 +14857.514525 + 31 +0.0 + 0 +LINE + 5 +2139 + 8 +0 + 62 + 0 + 10 +26812.499939 + 20 +14900.815795 + 30 +0.0 + 11 +26820.0 + 21 +14913.806281 + 31 +0.0 + 0 +LINE + 5 +213A + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +14731.940947 + 30 +0.0 + 11 +26749.999939 + 21 +14749.261349 + 31 +0.0 + 0 +LINE + 5 +213B + 8 +0 + 62 + 0 + 10 +26774.999939 + 20 +14792.562619 + 30 +0.0 + 11 +26787.499939 + 21 +14814.213254 + 31 +0.0 + 0 +LINE + 5 +213C + 8 +0 + 62 + 0 + 10 +26812.499939 + 20 +14857.514525 + 30 +0.0 + 11 +26820.0 + 21 +14870.505011 + 31 +0.0 + 0 +LINE + 5 +213D + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +14688.639677 + 30 +0.0 + 11 +26749.999939 + 21 +14705.960079 + 31 +0.0 + 0 +LINE + 5 +213E + 8 +0 + 62 + 0 + 10 +26774.999939 + 20 +14749.261349 + 30 +0.0 + 11 +26787.499939 + 21 +14770.911984 + 31 +0.0 + 0 +LINE + 5 +213F + 8 +0 + 62 + 0 + 10 +26812.499939 + 20 +14814.213255 + 30 +0.0 + 11 +26820.0 + 21 +14827.203741 + 31 +0.0 + 0 +LINE + 5 +2140 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +14645.338407 + 30 +0.0 + 11 +26749.999939 + 21 +14662.658809 + 31 +0.0 + 0 +LINE + 5 +2141 + 8 +0 + 62 + 0 + 10 +26774.999939 + 20 +14705.960079 + 30 +0.0 + 11 +26787.499939 + 21 +14727.610714 + 31 +0.0 + 0 +LINE + 5 +2142 + 8 +0 + 62 + 0 + 10 +26812.499939 + 20 +14770.911984 + 30 +0.0 + 11 +26820.0 + 21 +14783.902471 + 31 +0.0 + 0 +LINE + 5 +2143 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +14602.037137 + 30 +0.0 + 11 +26749.999939 + 21 +14619.357539 + 31 +0.0 + 0 +LINE + 5 +2144 + 8 +0 + 62 + 0 + 10 +26774.999939 + 20 +14662.658809 + 30 +0.0 + 11 +26787.499939 + 21 +14684.309444 + 31 +0.0 + 0 +LINE + 5 +2145 + 8 +0 + 62 + 0 + 10 +26812.499939 + 20 +14727.610714 + 30 +0.0 + 11 +26820.0 + 21 +14740.601201 + 31 +0.0 + 0 +LINE + 5 +2146 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +14558.735867 + 30 +0.0 + 11 +26749.999939 + 21 +14576.056269 + 31 +0.0 + 0 +LINE + 5 +2147 + 8 +0 + 62 + 0 + 10 +26774.999939 + 20 +14619.357539 + 30 +0.0 + 11 +26787.499939 + 21 +14641.008174 + 31 +0.0 + 0 +LINE + 5 +2148 + 8 +0 + 62 + 0 + 10 +26812.499939 + 20 +14684.309444 + 30 +0.0 + 11 +26820.0 + 21 +14697.299931 + 31 +0.0 + 0 +LINE + 5 +2149 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +14515.434597 + 30 +0.0 + 11 +26749.999939 + 21 +14532.754998 + 31 +0.0 + 0 +LINE + 5 +214A + 8 +0 + 62 + 0 + 10 +26774.999939 + 20 +14576.056269 + 30 +0.0 + 11 +26787.499939 + 21 +14597.706904 + 31 +0.0 + 0 +LINE + 5 +214B + 8 +0 + 62 + 0 + 10 +26812.499939 + 20 +14641.008174 + 30 +0.0 + 11 +26820.0 + 21 +14653.998661 + 31 +0.0 + 0 +LINE + 5 +214C + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +14472.133327 + 30 +0.0 + 11 +26749.999939 + 21 +14489.453728 + 31 +0.0 + 0 +LINE + 5 +214D + 8 +0 + 62 + 0 + 10 +26774.999939 + 20 +14532.754999 + 30 +0.0 + 11 +26787.499939 + 21 +14554.405634 + 31 +0.0 + 0 +LINE + 5 +214E + 8 +0 + 62 + 0 + 10 +26812.499939 + 20 +14597.706904 + 30 +0.0 + 11 +26820.0 + 21 +14610.697391 + 31 +0.0 + 0 +LINE + 5 +214F + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +14428.832057 + 30 +0.0 + 11 +26749.999939 + 21 +14446.152458 + 31 +0.0 + 0 +LINE + 5 +2150 + 8 +0 + 62 + 0 + 10 +26774.999939 + 20 +14489.453728 + 30 +0.0 + 11 +26787.499939 + 21 +14511.104363 + 31 +0.0 + 0 +LINE + 5 +2151 + 8 +0 + 62 + 0 + 10 +26812.499939 + 20 +14554.405634 + 30 +0.0 + 11 +26820.0 + 21 +14567.396121 + 31 +0.0 + 0 +LINE + 5 +2152 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +14385.530787 + 30 +0.0 + 11 +26749.999938 + 21 +14402.851188 + 31 +0.0 + 0 +LINE + 5 +2153 + 8 +0 + 62 + 0 + 10 +26774.999938 + 20 +14446.152458 + 30 +0.0 + 11 +26787.499938 + 21 +14467.803093 + 31 +0.0 + 0 +LINE + 5 +2154 + 8 +0 + 62 + 0 + 10 +26812.499938 + 20 +14511.104364 + 30 +0.0 + 11 +26820.0 + 21 +14524.094851 + 31 +0.0 + 0 +LINE + 5 +2155 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +14342.229517 + 30 +0.0 + 11 +26749.999938 + 21 +14359.549918 + 31 +0.0 + 0 +LINE + 5 +2156 + 8 +0 + 62 + 0 + 10 +26774.999938 + 20 +14402.851188 + 30 +0.0 + 11 +26787.499938 + 21 +14424.501823 + 31 +0.0 + 0 +LINE + 5 +2157 + 8 +0 + 62 + 0 + 10 +26812.499938 + 20 +14467.803093 + 30 +0.0 + 11 +26820.0 + 21 +14480.793581 + 31 +0.0 + 0 +LINE + 5 +2158 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +14298.928247 + 30 +0.0 + 11 +26749.999938 + 21 +14316.248648 + 31 +0.0 + 0 +LINE + 5 +2159 + 8 +0 + 62 + 0 + 10 +26774.999938 + 20 +14359.549918 + 30 +0.0 + 11 +26787.499938 + 21 +14381.200553 + 31 +0.0 + 0 +LINE + 5 +215A + 8 +0 + 62 + 0 + 10 +26812.499938 + 20 +14424.501823 + 30 +0.0 + 11 +26820.0 + 21 +14437.492311 + 31 +0.0 + 0 +LINE + 5 +215B + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +14255.626977 + 30 +0.0 + 11 +26749.999938 + 21 +14272.947378 + 31 +0.0 + 0 +LINE + 5 +215C + 8 +0 + 62 + 0 + 10 +26774.999938 + 20 +14316.248648 + 30 +0.0 + 11 +26787.499938 + 21 +14337.899283 + 31 +0.0 + 0 +LINE + 5 +215D + 8 +0 + 62 + 0 + 10 +26812.499938 + 20 +14381.200553 + 30 +0.0 + 11 +26820.0 + 21 +14394.191041 + 31 +0.0 + 0 +LINE + 5 +215E + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +14212.325707 + 30 +0.0 + 11 +26749.999938 + 21 +14229.646107 + 31 +0.0 + 0 +LINE + 5 +215F + 8 +0 + 62 + 0 + 10 +26774.999938 + 20 +14272.947378 + 30 +0.0 + 11 +26787.499938 + 21 +14294.598013 + 31 +0.0 + 0 +LINE + 5 +2160 + 8 +0 + 62 + 0 + 10 +26812.499938 + 20 +14337.899283 + 30 +0.0 + 11 +26820.0 + 21 +14350.889771 + 31 +0.0 + 0 +LINE + 5 +2161 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +14169.024437 + 30 +0.0 + 11 +26749.999938 + 21 +14186.344837 + 31 +0.0 + 0 +LINE + 5 +2162 + 8 +0 + 62 + 0 + 10 +26774.999938 + 20 +14229.646108 + 30 +0.0 + 11 +26787.499938 + 21 +14251.296743 + 31 +0.0 + 0 +LINE + 5 +2163 + 8 +0 + 62 + 0 + 10 +26812.499938 + 20 +14294.598013 + 30 +0.0 + 11 +26820.0 + 21 +14307.588501 + 31 +0.0 + 0 +LINE + 5 +2164 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +14125.723167 + 30 +0.0 + 11 +26749.999938 + 21 +14143.043567 + 31 +0.0 + 0 +LINE + 5 +2165 + 8 +0 + 62 + 0 + 10 +26774.999938 + 20 +14186.344837 + 30 +0.0 + 11 +26787.499938 + 21 +14207.995472 + 31 +0.0 + 0 +LINE + 5 +2166 + 8 +0 + 62 + 0 + 10 +26812.499938 + 20 +14251.296743 + 30 +0.0 + 11 +26820.0 + 21 +14264.287231 + 31 +0.0 + 0 +LINE + 5 +2167 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +14082.421897 + 30 +0.0 + 11 +26749.999938 + 21 +14099.742297 + 31 +0.0 + 0 +LINE + 5 +2168 + 8 +0 + 62 + 0 + 10 +26774.999938 + 20 +14143.043567 + 30 +0.0 + 11 +26787.499938 + 21 +14164.694202 + 31 +0.0 + 0 +LINE + 5 +2169 + 8 +0 + 62 + 0 + 10 +26812.499938 + 20 +14207.995473 + 30 +0.0 + 11 +26820.0 + 21 +14220.985961 + 31 +0.0 + 0 +LINE + 5 +216A + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +14039.120627 + 30 +0.0 + 11 +26749.999938 + 21 +14056.441027 + 31 +0.0 + 0 +LINE + 5 +216B + 8 +0 + 62 + 0 + 10 +26774.999938 + 20 +14099.742297 + 30 +0.0 + 11 +26787.499938 + 21 +14121.392932 + 31 +0.0 + 0 +LINE + 5 +216C + 8 +0 + 62 + 0 + 10 +26812.499938 + 20 +14164.694202 + 30 +0.0 + 11 +26820.0 + 21 +14177.684691 + 31 +0.0 + 0 +LINE + 5 +216D + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +13995.819357 + 30 +0.0 + 11 +26749.999938 + 21 +14013.139757 + 31 +0.0 + 0 +LINE + 5 +216E + 8 +0 + 62 + 0 + 10 +26774.999938 + 20 +14056.441027 + 30 +0.0 + 11 +26787.499938 + 21 +14078.091662 + 31 +0.0 + 0 +LINE + 5 +216F + 8 +0 + 62 + 0 + 10 +26812.499938 + 20 +14121.392932 + 30 +0.0 + 11 +26820.0 + 21 +14134.383421 + 31 +0.0 + 0 +LINE + 5 +2170 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +13952.518087 + 30 +0.0 + 11 +26749.999938 + 21 +13969.838487 + 31 +0.0 + 0 +LINE + 5 +2171 + 8 +0 + 62 + 0 + 10 +26774.999938 + 20 +14013.139757 + 30 +0.0 + 11 +26787.499938 + 21 +14034.790392 + 31 +0.0 + 0 +LINE + 5 +2172 + 8 +0 + 62 + 0 + 10 +26812.499938 + 20 +14078.091662 + 30 +0.0 + 11 +26820.0 + 21 +14091.082151 + 31 +0.0 + 0 +LINE + 5 +2173 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +13909.216817 + 30 +0.0 + 11 +26749.999938 + 21 +13926.537216 + 31 +0.0 + 0 +LINE + 5 +2174 + 8 +0 + 62 + 0 + 10 +26774.999938 + 20 +13969.838487 + 30 +0.0 + 11 +26787.499938 + 21 +13991.489122 + 31 +0.0 + 0 +LINE + 5 +2175 + 8 +0 + 62 + 0 + 10 +26812.499938 + 20 +14034.790392 + 30 +0.0 + 11 +26820.0 + 21 +14047.780881 + 31 +0.0 + 0 +LINE + 5 +2176 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +13865.915547 + 30 +0.0 + 11 +26749.999937 + 21 +13883.235946 + 31 +0.0 + 0 +LINE + 5 +2177 + 8 +0 + 62 + 0 + 10 +26774.999937 + 20 +13926.537217 + 30 +0.0 + 11 +26787.499937 + 21 +13948.187852 + 31 +0.0 + 0 +LINE + 5 +2178 + 8 +0 + 62 + 0 + 10 +26812.499937 + 20 +13991.489122 + 30 +0.0 + 11 +26820.0 + 21 +14004.479611 + 31 +0.0 + 0 +LINE + 5 +2179 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +13822.614277 + 30 +0.0 + 11 +26749.999937 + 21 +13839.934676 + 31 +0.0 + 0 +LINE + 5 +217A + 8 +0 + 62 + 0 + 10 +26774.999937 + 20 +13883.235946 + 30 +0.0 + 11 +26787.499937 + 21 +13904.886581 + 31 +0.0 + 0 +LINE + 5 +217B + 8 +0 + 62 + 0 + 10 +26812.499937 + 20 +13948.187852 + 30 +0.0 + 11 +26820.0 + 21 +13961.178341 + 31 +0.0 + 0 +LINE + 5 +217C + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +13779.313007 + 30 +0.0 + 11 +26749.999937 + 21 +13796.633406 + 31 +0.0 + 0 +LINE + 5 +217D + 8 +0 + 62 + 0 + 10 +26774.999937 + 20 +13839.934676 + 30 +0.0 + 11 +26787.499937 + 21 +13861.585311 + 31 +0.0 + 0 +LINE + 5 +217E + 8 +0 + 62 + 0 + 10 +26812.499937 + 20 +13904.886582 + 30 +0.0 + 11 +26820.0 + 21 +13917.877071 + 31 +0.0 + 0 +LINE + 5 +217F + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +13736.011737 + 30 +0.0 + 11 +26749.999937 + 21 +13753.332136 + 31 +0.0 + 0 +LINE + 5 +2180 + 8 +0 + 62 + 0 + 10 +26774.999937 + 20 +13796.633406 + 30 +0.0 + 11 +26787.499937 + 21 +13818.284041 + 31 +0.0 + 0 +LINE + 5 +2181 + 8 +0 + 62 + 0 + 10 +26812.499937 + 20 +13861.585311 + 30 +0.0 + 11 +26820.0 + 21 +13874.575801 + 31 +0.0 + 0 +LINE + 5 +2182 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +13692.710467 + 30 +0.0 + 11 +26749.999937 + 21 +13710.030866 + 31 +0.0 + 0 +LINE + 5 +2183 + 8 +0 + 62 + 0 + 10 +26774.999937 + 20 +13753.332136 + 30 +0.0 + 11 +26787.499937 + 21 +13774.982771 + 31 +0.0 + 0 +LINE + 5 +2184 + 8 +0 + 62 + 0 + 10 +26812.499937 + 20 +13818.284041 + 30 +0.0 + 11 +26820.0 + 21 +13831.274531 + 31 +0.0 + 0 +LINE + 5 +2185 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +13649.409197 + 30 +0.0 + 11 +26749.999937 + 21 +13666.729596 + 31 +0.0 + 0 +LINE + 5 +2186 + 8 +0 + 62 + 0 + 10 +26774.999937 + 20 +13710.030866 + 30 +0.0 + 11 +26787.499937 + 21 +13731.681501 + 31 +0.0 + 0 +LINE + 5 +2187 + 8 +0 + 62 + 0 + 10 +26812.499937 + 20 +13774.982771 + 30 +0.0 + 11 +26820.0 + 21 +13787.973261 + 31 +0.0 + 0 +LINE + 5 +2188 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +13606.107927 + 30 +0.0 + 11 +26749.999937 + 21 +13623.428325 + 31 +0.0 + 0 +LINE + 5 +2189 + 8 +0 + 62 + 0 + 10 +26774.999937 + 20 +13666.729596 + 30 +0.0 + 11 +26787.499937 + 21 +13688.380231 + 31 +0.0 + 0 +LINE + 5 +218A + 8 +0 + 62 + 0 + 10 +26812.499937 + 20 +13731.681501 + 30 +0.0 + 11 +26820.0 + 21 +13744.671991 + 31 +0.0 + 0 +LINE + 5 +218B + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +13562.806657 + 30 +0.0 + 11 +26749.999937 + 21 +13580.127055 + 31 +0.0 + 0 +LINE + 5 +218C + 8 +0 + 62 + 0 + 10 +26774.999937 + 20 +13623.428326 + 30 +0.0 + 11 +26787.499937 + 21 +13645.078961 + 31 +0.0 + 0 +LINE + 5 +218D + 8 +0 + 62 + 0 + 10 +26812.499937 + 20 +13688.380231 + 30 +0.0 + 11 +26820.0 + 21 +13701.370721 + 31 +0.0 + 0 +LINE + 5 +218E + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +13519.505387 + 30 +0.0 + 11 +26749.999937 + 21 +13536.825785 + 31 +0.0 + 0 +LINE + 5 +218F + 8 +0 + 62 + 0 + 10 +26774.999937 + 20 +13580.127055 + 30 +0.0 + 11 +26787.499937 + 21 +13601.77769 + 31 +0.0 + 0 +LINE + 5 +2190 + 8 +0 + 62 + 0 + 10 +26812.499937 + 20 +13645.078961 + 30 +0.0 + 11 +26820.0 + 21 +13658.069451 + 31 +0.0 + 0 +LINE + 5 +2191 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +13476.204117 + 30 +0.0 + 11 +26749.999937 + 21 +13493.524515 + 31 +0.0 + 0 +LINE + 5 +2192 + 8 +0 + 62 + 0 + 10 +26774.999937 + 20 +13536.825785 + 30 +0.0 + 11 +26787.499937 + 21 +13558.47642 + 31 +0.0 + 0 +LINE + 5 +2193 + 8 +0 + 62 + 0 + 10 +26812.499937 + 20 +13601.777691 + 30 +0.0 + 11 +26820.0 + 21 +13614.768181 + 31 +0.0 + 0 +LINE + 5 +2194 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +13432.902847 + 30 +0.0 + 11 +26749.999937 + 21 +13450.223245 + 31 +0.0 + 0 +LINE + 5 +2195 + 8 +0 + 62 + 0 + 10 +26774.999937 + 20 +13493.524515 + 30 +0.0 + 11 +26787.499937 + 21 +13515.17515 + 31 +0.0 + 0 +LINE + 5 +2196 + 8 +0 + 62 + 0 + 10 +26812.499937 + 20 +13558.47642 + 30 +0.0 + 11 +26820.0 + 21 +13571.466911 + 31 +0.0 + 0 +LINE + 5 +2197 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +13389.601577 + 30 +0.0 + 11 +26749.999937 + 21 +13406.921975 + 31 +0.0 + 0 +LINE + 5 +2198 + 8 +0 + 62 + 0 + 10 +26774.999937 + 20 +13450.223245 + 30 +0.0 + 11 +26787.499937 + 21 +13471.87388 + 31 +0.0 + 0 +LINE + 5 +2199 + 8 +0 + 62 + 0 + 10 +26812.499937 + 20 +13515.17515 + 30 +0.0 + 11 +26820.0 + 21 +13528.165641 + 31 +0.0 + 0 +LINE + 5 +219A + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +13346.300307 + 30 +0.0 + 11 +26749.999936 + 21 +13363.620705 + 31 +0.0 + 0 +LINE + 5 +219B + 8 +0 + 62 + 0 + 10 +26774.999936 + 20 +13406.921975 + 30 +0.0 + 11 +26787.499936 + 21 +13428.57261 + 31 +0.0 + 0 +LINE + 5 +219C + 8 +0 + 62 + 0 + 10 +26812.499936 + 20 +13471.87388 + 30 +0.0 + 11 +26820.0 + 21 +13484.864371 + 31 +0.0 + 0 +LINE + 5 +219D + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +13302.999037 + 30 +0.0 + 11 +26749.999936 + 21 +13320.319434 + 31 +0.0 + 0 +LINE + 5 +219E + 8 +0 + 62 + 0 + 10 +26774.999936 + 20 +13363.620705 + 30 +0.0 + 11 +26787.499936 + 21 +13385.27134 + 31 +0.0 + 0 +LINE + 5 +219F + 8 +0 + 62 + 0 + 10 +26812.499936 + 20 +13428.57261 + 30 +0.0 + 11 +26820.0 + 21 +13441.563101 + 31 +0.0 + 0 +LINE + 5 +21A0 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +13259.697767 + 30 +0.0 + 11 +26749.999936 + 21 +13277.018164 + 31 +0.0 + 0 +LINE + 5 +21A1 + 8 +0 + 62 + 0 + 10 +26774.999936 + 20 +13320.319435 + 30 +0.0 + 11 +26787.499936 + 21 +13341.97007 + 31 +0.0 + 0 +LINE + 5 +21A2 + 8 +0 + 62 + 0 + 10 +26812.499936 + 20 +13385.27134 + 30 +0.0 + 11 +26820.0 + 21 +13398.261831 + 31 +0.0 + 0 +LINE + 5 +21A3 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +13216.396497 + 30 +0.0 + 11 +26749.999936 + 21 +13233.716894 + 31 +0.0 + 0 +LINE + 5 +21A4 + 8 +0 + 62 + 0 + 10 +26774.999936 + 20 +13277.018164 + 30 +0.0 + 11 +26787.499936 + 21 +13298.668799 + 31 +0.0 + 0 +LINE + 5 +21A5 + 8 +0 + 62 + 0 + 10 +26812.499936 + 20 +13341.97007 + 30 +0.0 + 11 +26820.0 + 21 +13354.960561 + 31 +0.0 + 0 +LINE + 5 +21A6 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +13173.095227 + 30 +0.0 + 11 +26749.999936 + 21 +13190.415624 + 31 +0.0 + 0 +LINE + 5 +21A7 + 8 +0 + 62 + 0 + 10 +26774.999936 + 20 +13233.716894 + 30 +0.0 + 11 +26787.499936 + 21 +13255.367529 + 31 +0.0 + 0 +LINE + 5 +21A8 + 8 +0 + 62 + 0 + 10 +26812.499936 + 20 +13298.6688 + 30 +0.0 + 11 +26820.0 + 21 +13311.659291 + 31 +0.0 + 0 +LINE + 5 +21A9 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +13129.793957 + 30 +0.0 + 11 +26749.999936 + 21 +13147.114354 + 31 +0.0 + 0 +LINE + 5 +21AA + 8 +0 + 62 + 0 + 10 +26774.999936 + 20 +13190.415624 + 30 +0.0 + 11 +26787.499936 + 21 +13212.066259 + 31 +0.0 + 0 +LINE + 5 +21AB + 8 +0 + 62 + 0 + 10 +26812.499936 + 20 +13255.367529 + 30 +0.0 + 11 +26820.0 + 21 +13268.358021 + 31 +0.0 + 0 +LINE + 5 +21AC + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +13086.492687 + 30 +0.0 + 11 +26749.999936 + 21 +13103.813084 + 31 +0.0 + 0 +LINE + 5 +21AD + 8 +0 + 62 + 0 + 10 +26774.999936 + 20 +13147.114354 + 30 +0.0 + 11 +26787.499936 + 21 +13168.764989 + 31 +0.0 + 0 +LINE + 5 +21AE + 8 +0 + 62 + 0 + 10 +26812.499936 + 20 +13212.066259 + 30 +0.0 + 11 +26820.0 + 21 +13225.056751 + 31 +0.0 + 0 +LINE + 5 +21AF + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +13043.191417 + 30 +0.0 + 11 +26749.999936 + 21 +13060.511814 + 31 +0.0 + 0 +LINE + 5 +21B0 + 8 +0 + 62 + 0 + 10 +26774.999936 + 20 +13103.813084 + 30 +0.0 + 11 +26787.499936 + 21 +13125.463719 + 31 +0.0 + 0 +LINE + 5 +21B1 + 8 +0 + 62 + 0 + 10 +26812.499936 + 20 +13168.764989 + 30 +0.0 + 11 +26820.0 + 21 +13181.755481 + 31 +0.0 + 0 +LINE + 5 +21B2 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +12999.890147 + 30 +0.0 + 11 +26749.999936 + 21 +13017.210544 + 31 +0.0 + 0 +LINE + 5 +21B3 + 8 +0 + 62 + 0 + 10 +26774.999936 + 20 +13060.511814 + 30 +0.0 + 11 +26787.499936 + 21 +13082.162449 + 31 +0.0 + 0 +LINE + 5 +21B4 + 8 +0 + 62 + 0 + 10 +26812.499936 + 20 +13125.463719 + 30 +0.0 + 11 +26820.0 + 21 +13138.454211 + 31 +0.0 + 0 +LINE + 5 +21B5 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +12956.588877 + 30 +0.0 + 11 +26749.999936 + 21 +12973.909273 + 31 +0.0 + 0 +LINE + 5 +21B6 + 8 +0 + 62 + 0 + 10 +26774.999936 + 20 +13017.210544 + 30 +0.0 + 11 +26787.499936 + 21 +13038.861179 + 31 +0.0 + 0 +LINE + 5 +21B7 + 8 +0 + 62 + 0 + 10 +26812.499936 + 20 +13082.162449 + 30 +0.0 + 11 +26820.0 + 21 +13095.152941 + 31 +0.0 + 0 +LINE + 5 +21B8 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +12913.287607 + 30 +0.0 + 11 +26749.999936 + 21 +12930.608003 + 31 +0.0 + 0 +LINE + 5 +21B9 + 8 +0 + 62 + 0 + 10 +26774.999936 + 20 +12973.909273 + 30 +0.0 + 11 +26787.499936 + 21 +12995.559909 + 31 +0.0 + 0 +LINE + 5 +21BA + 8 +0 + 62 + 0 + 10 +26812.499936 + 20 +13038.861179 + 30 +0.0 + 11 +26820.0 + 21 +13051.851671 + 31 +0.0 + 0 +LINE + 5 +21BB + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +12869.986337 + 30 +0.0 + 11 +26749.999936 + 21 +12887.306733 + 31 +0.0 + 0 +LINE + 5 +21BC + 8 +0 + 62 + 0 + 10 +26774.999936 + 20 +12930.608003 + 30 +0.0 + 11 +26787.499936 + 21 +12952.258638 + 31 +0.0 + 0 +LINE + 5 +21BD + 8 +0 + 62 + 0 + 10 +26812.499936 + 20 +12995.559909 + 30 +0.0 + 11 +26820.0 + 21 +13008.550401 + 31 +0.0 + 0 +LINE + 5 +21BE + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +12826.685067 + 30 +0.0 + 11 +26749.999936 + 21 +12844.005463 + 31 +0.0 + 0 +LINE + 5 +21BF + 8 +0 + 62 + 0 + 10 +26774.999936 + 20 +12887.306733 + 30 +0.0 + 11 +26787.499936 + 21 +12908.957368 + 31 +0.0 + 0 +LINE + 5 +21C0 + 8 +0 + 62 + 0 + 10 +26812.499936 + 20 +12952.258638 + 30 +0.0 + 11 +26820.0 + 21 +12965.249131 + 31 +0.0 + 0 +LINE + 5 +21C1 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +12783.383797 + 30 +0.0 + 11 +26749.999935 + 21 +12800.704193 + 31 +0.0 + 0 +LINE + 5 +21C2 + 8 +0 + 62 + 0 + 10 +26774.999935 + 20 +12844.005463 + 30 +0.0 + 11 +26787.499935 + 21 +12865.656098 + 31 +0.0 + 0 +LINE + 5 +21C3 + 8 +0 + 62 + 0 + 10 +26812.499935 + 20 +12908.957368 + 30 +0.0 + 11 +26820.0 + 21 +12921.947861 + 31 +0.0 + 0 +LINE + 5 +21C4 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +12740.082527 + 30 +0.0 + 11 +26749.999935 + 21 +12757.402923 + 31 +0.0 + 0 +LINE + 5 +21C5 + 8 +0 + 62 + 0 + 10 +26774.999935 + 20 +12800.704193 + 30 +0.0 + 11 +26787.499935 + 21 +12822.354828 + 31 +0.0 + 0 +LINE + 5 +21C6 + 8 +0 + 62 + 0 + 10 +26812.499935 + 20 +12865.656098 + 30 +0.0 + 11 +26820.0 + 21 +12878.646591 + 31 +0.0 + 0 +LINE + 5 +21C7 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +12696.781257 + 30 +0.0 + 11 +26749.999935 + 21 +12714.101653 + 31 +0.0 + 0 +LINE + 5 +21C8 + 8 +0 + 62 + 0 + 10 +26774.999935 + 20 +12757.402923 + 30 +0.0 + 11 +26787.499935 + 21 +12779.053558 + 31 +0.0 + 0 +LINE + 5 +21C9 + 8 +0 + 62 + 0 + 10 +26812.499935 + 20 +12822.354828 + 30 +0.0 + 11 +26820.0 + 21 +12835.345321 + 31 +0.0 + 0 +LINE + 5 +21CA + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +12653.479987 + 30 +0.0 + 11 +26749.999935 + 21 +12670.800382 + 31 +0.0 + 0 +LINE + 5 +21CB + 8 +0 + 62 + 0 + 10 +26774.999935 + 20 +12714.101653 + 30 +0.0 + 11 +26787.499935 + 21 +12735.752288 + 31 +0.0 + 0 +LINE + 5 +21CC + 8 +0 + 62 + 0 + 10 +26812.499935 + 20 +12779.053558 + 30 +0.0 + 11 +26820.0 + 21 +12792.044051 + 31 +0.0 + 0 +LINE + 5 +21CD + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +12610.178717 + 30 +0.0 + 11 +26749.999935 + 21 +12627.499112 + 31 +0.0 + 0 +LINE + 5 +21CE + 8 +0 + 62 + 0 + 10 +26774.999935 + 20 +12670.800382 + 30 +0.0 + 11 +26787.499935 + 21 +12692.451018 + 31 +0.0 + 0 +LINE + 5 +21CF + 8 +0 + 62 + 0 + 10 +26812.499935 + 20 +12735.752288 + 30 +0.0 + 11 +26820.0 + 21 +12748.742781 + 31 +0.0 + 0 +LINE + 5 +21D0 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +12566.877447 + 30 +0.0 + 11 +26749.999935 + 21 +12584.197842 + 31 +0.0 + 0 +LINE + 5 +21D1 + 8 +0 + 62 + 0 + 10 +26774.999935 + 20 +12627.499112 + 30 +0.0 + 11 +26787.499935 + 21 +12649.149747 + 31 +0.0 + 0 +LINE + 5 +21D2 + 8 +0 + 62 + 0 + 10 +26812.499935 + 20 +12692.451018 + 30 +0.0 + 11 +26820.0 + 21 +12705.441511 + 31 +0.0 + 0 +LINE + 5 +21D3 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +12523.576177 + 30 +0.0 + 11 +26749.999935 + 21 +12540.896572 + 31 +0.0 + 0 +LINE + 5 +21D4 + 8 +0 + 62 + 0 + 10 +26774.999935 + 20 +12584.197842 + 30 +0.0 + 11 +26787.499935 + 21 +12605.848477 + 31 +0.0 + 0 +LINE + 5 +21D5 + 8 +0 + 62 + 0 + 10 +26812.499935 + 20 +12649.149747 + 30 +0.0 + 11 +26820.0 + 21 +12662.140241 + 31 +0.0 + 0 +LINE + 5 +21D6 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +12480.274907 + 30 +0.0 + 11 +26749.999935 + 21 +12497.595302 + 31 +0.0 + 0 +LINE + 5 +21D7 + 8 +0 + 62 + 0 + 10 +26774.999935 + 20 +12540.896572 + 30 +0.0 + 11 +26787.499935 + 21 +12562.547207 + 31 +0.0 + 0 +LINE + 5 +21D8 + 8 +0 + 62 + 0 + 10 +26812.499935 + 20 +12605.848477 + 30 +0.0 + 11 +26820.0 + 21 +12618.838971 + 31 +0.0 + 0 +LINE + 5 +21D9 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +12436.973637 + 30 +0.0 + 11 +26749.999935 + 21 +12454.294032 + 31 +0.0 + 0 +LINE + 5 +21DA + 8 +0 + 62 + 0 + 10 +26774.999935 + 20 +12497.595302 + 30 +0.0 + 11 +26787.499935 + 21 +12519.245937 + 31 +0.0 + 0 +LINE + 5 +21DB + 8 +0 + 62 + 0 + 10 +26812.499935 + 20 +12562.547207 + 30 +0.0 + 11 +26820.0 + 21 +12575.537701 + 31 +0.0 + 0 +LINE + 5 +21DC + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +12393.672367 + 30 +0.0 + 11 +26749.999935 + 21 +12410.992762 + 31 +0.0 + 0 +LINE + 5 +21DD + 8 +0 + 62 + 0 + 10 +26774.999935 + 20 +12454.294032 + 30 +0.0 + 11 +26787.499935 + 21 +12475.944667 + 31 +0.0 + 0 +LINE + 5 +21DE + 8 +0 + 62 + 0 + 10 +26812.499935 + 20 +12519.245937 + 30 +0.0 + 11 +26820.0 + 21 +12532.236431 + 31 +0.0 + 0 +LINE + 5 +21DF + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +12350.371097 + 30 +0.0 + 11 +26749.999935 + 21 +12367.691491 + 31 +0.0 + 0 +LINE + 5 +21E0 + 8 +0 + 62 + 0 + 10 +26774.999935 + 20 +12410.992762 + 30 +0.0 + 11 +26787.499935 + 21 +12432.643397 + 31 +0.0 + 0 +LINE + 5 +21E1 + 8 +0 + 62 + 0 + 10 +26812.499935 + 20 +12475.944667 + 30 +0.0 + 11 +26820.0 + 21 +12488.935161 + 31 +0.0 + 0 +LINE + 5 +21E2 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +12307.069827 + 30 +0.0 + 11 +26749.999935 + 21 +12324.390221 + 31 +0.0 + 0 +LINE + 5 +21E3 + 8 +0 + 62 + 0 + 10 +26774.999935 + 20 +12367.691491 + 30 +0.0 + 11 +26787.499935 + 21 +12389.342127 + 31 +0.0 + 0 +LINE + 5 +21E4 + 8 +0 + 62 + 0 + 10 +26812.499935 + 20 +12432.643397 + 30 +0.0 + 11 +26820.0 + 21 +12445.633891 + 31 +0.0 + 0 +LINE + 5 +21E5 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +12263.768557 + 30 +0.0 + 11 +26749.999934 + 21 +12281.088951 + 31 +0.0 + 0 +LINE + 5 +21E6 + 8 +0 + 62 + 0 + 10 +26774.999934 + 20 +12324.390221 + 30 +0.0 + 11 +26787.499934 + 21 +12346.040856 + 31 +0.0 + 0 +LINE + 5 +21E7 + 8 +0 + 62 + 0 + 10 +26812.499934 + 20 +12389.342127 + 30 +0.0 + 11 +26820.0 + 21 +12402.332621 + 31 +0.0 + 0 +LINE + 5 +21E8 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +12220.467287 + 30 +0.0 + 11 +26749.999934 + 21 +12237.787681 + 31 +0.0 + 0 +LINE + 5 +21E9 + 8 +0 + 62 + 0 + 10 +26774.999934 + 20 +12281.088951 + 30 +0.0 + 11 +26787.499934 + 21 +12302.739586 + 31 +0.0 + 0 +LINE + 5 +21EA + 8 +0 + 62 + 0 + 10 +26812.499934 + 20 +12346.040856 + 30 +0.0 + 11 +26820.0 + 21 +12359.031351 + 31 +0.0 + 0 +LINE + 5 +21EB + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +12177.166017 + 30 +0.0 + 11 +26749.999934 + 21 +12194.486411 + 31 +0.0 + 0 +LINE + 5 +21EC + 8 +0 + 62 + 0 + 10 +26774.999934 + 20 +12237.787681 + 30 +0.0 + 11 +26787.499934 + 21 +12259.438316 + 31 +0.0 + 0 +LINE + 5 +21ED + 8 +0 + 62 + 0 + 10 +26812.499934 + 20 +12302.739586 + 30 +0.0 + 11 +26820.0 + 21 +12315.730081 + 31 +0.0 + 0 +LINE + 5 +21EE + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +12133.864747 + 30 +0.0 + 11 +26749.999934 + 21 +12151.185141 + 31 +0.0 + 0 +LINE + 5 +21EF + 8 +0 + 62 + 0 + 10 +26774.999934 + 20 +12194.486411 + 30 +0.0 + 11 +26787.499934 + 21 +12216.137046 + 31 +0.0 + 0 +LINE + 5 +21F0 + 8 +0 + 62 + 0 + 10 +26812.499934 + 20 +12259.438316 + 30 +0.0 + 11 +26820.0 + 21 +12272.428811 + 31 +0.0 + 0 +LINE + 5 +21F1 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +12090.563477 + 30 +0.0 + 11 +26749.999934 + 21 +12107.883871 + 31 +0.0 + 0 +LINE + 5 +21F2 + 8 +0 + 62 + 0 + 10 +26774.999934 + 20 +12151.185141 + 30 +0.0 + 11 +26787.499934 + 21 +12172.835776 + 31 +0.0 + 0 +LINE + 5 +21F3 + 8 +0 + 62 + 0 + 10 +26812.499934 + 20 +12216.137046 + 30 +0.0 + 11 +26820.0 + 21 +12229.127541 + 31 +0.0 + 0 +LINE + 5 +21F4 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +12047.262207 + 30 +0.0 + 11 +26749.999934 + 21 +12064.5826 + 31 +0.0 + 0 +LINE + 5 +21F5 + 8 +0 + 62 + 0 + 10 +26774.999934 + 20 +12107.883871 + 30 +0.0 + 11 +26787.499934 + 21 +12129.534506 + 31 +0.0 + 0 +LINE + 5 +21F6 + 8 +0 + 62 + 0 + 10 +26812.499934 + 20 +12172.835776 + 30 +0.0 + 11 +26820.0 + 21 +12185.826271 + 31 +0.0 + 0 +LINE + 5 +21F7 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +12003.960937 + 30 +0.0 + 11 +26749.999934 + 21 +12021.28133 + 31 +0.0 + 0 +LINE + 5 +21F8 + 8 +0 + 62 + 0 + 10 +26774.999934 + 20 +12064.5826 + 30 +0.0 + 11 +26787.499934 + 21 +12086.233236 + 31 +0.0 + 0 +LINE + 5 +21F9 + 8 +0 + 62 + 0 + 10 +26812.499934 + 20 +12129.534506 + 30 +0.0 + 11 +26820.0 + 21 +12142.525001 + 31 +0.0 + 0 +LINE + 5 +21FA + 8 +0 + 62 + 0 + 10 +26774.999934 + 20 +12021.28133 + 30 +0.0 + 11 +26787.499934 + 21 +12042.931965 + 31 +0.0 + 0 +LINE + 5 +21FB + 8 +0 + 62 + 0 + 10 +26812.499934 + 20 +12086.233236 + 30 +0.0 + 11 +26820.0 + 21 +12099.223731 + 31 +0.0 + 0 +LINE + 5 +21FC + 8 +0 + 62 + 0 + 10 +26781.217961 + 20 +11988.75 + 30 +0.0 + 11 +26787.499934 + 21 +11999.630695 + 31 +0.0 + 0 +LINE + 5 +21FD + 8 +0 + 62 + 0 + 10 +26812.499934 + 20 +12042.931965 + 30 +0.0 + 11 +26820.0 + 21 +12055.922461 + 31 +0.0 + 0 +LINE + 5 +21FE + 8 +0 + 62 + 0 + 10 +26812.499934 + 20 +11999.630695 + 30 +0.0 + 11 +26820.0 + 21 +12012.621191 + 31 +0.0 + 0 +ENDBLK + 5 +21FF + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X51 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X51 + 1 + + 0 +LINE + 5 +2201 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +9769.61524 + 30 +0.0 + 11 +26775.0 + 21 +9769.61524 + 31 +0.0 + 0 +LINE + 5 +2202 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +9791.265875 + 30 +0.0 + 11 +26812.5 + 21 +9791.265875 + 31 +0.0 + 0 +LINE + 5 +2203 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +9812.91651 + 30 +0.0 + 11 +26775.0 + 21 +9812.91651 + 31 +0.0 + 0 +LINE + 5 +2204 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +9834.567145 + 30 +0.0 + 11 +26812.5 + 21 +9834.567145 + 31 +0.0 + 0 +LINE + 5 +2205 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +9856.21778 + 30 +0.0 + 11 +26775.0 + 21 +9856.21778 + 31 +0.0 + 0 +LINE + 5 +2206 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +9877.868415 + 30 +0.0 + 11 +26812.5 + 21 +9877.868415 + 31 +0.0 + 0 +LINE + 5 +2207 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +9899.51905 + 30 +0.0 + 11 +26775.0 + 21 +9899.51905 + 31 +0.0 + 0 +LINE + 5 +2208 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +9921.169685 + 30 +0.0 + 11 +26812.5 + 21 +9921.169685 + 31 +0.0 + 0 +LINE + 5 +2209 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +9942.82032 + 30 +0.0 + 11 +26775.0 + 21 +9942.82032 + 31 +0.0 + 0 +LINE + 5 +220A + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +9964.470955 + 30 +0.0 + 11 +26812.5 + 21 +9964.470955 + 31 +0.0 + 0 +LINE + 5 +220B + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +9986.12159 + 30 +0.0 + 11 +26775.0 + 21 +9986.12159 + 31 +0.0 + 0 +LINE + 5 +220C + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +10007.772225 + 30 +0.0 + 11 +26812.5 + 21 +10007.772225 + 31 +0.0 + 0 +LINE + 5 +220D + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +10029.42286 + 30 +0.0 + 11 +26775.0 + 21 +10029.42286 + 31 +0.0 + 0 +LINE + 5 +220E + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +10051.073495 + 30 +0.0 + 11 +26812.5 + 21 +10051.073495 + 31 +0.0 + 0 +LINE + 5 +220F + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +10072.72413 + 30 +0.0 + 11 +26775.0 + 21 +10072.72413 + 31 +0.0 + 0 +LINE + 5 +2210 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +10094.374765 + 30 +0.0 + 11 +26812.5 + 21 +10094.374765 + 31 +0.0 + 0 +LINE + 5 +2211 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +10116.0254 + 30 +0.0 + 11 +26775.0 + 21 +10116.0254 + 31 +0.0 + 0 +LINE + 5 +2212 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +10137.676035 + 30 +0.0 + 11 +26812.5 + 21 +10137.676035 + 31 +0.0 + 0 +LINE + 5 +2213 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +10159.32667 + 30 +0.0 + 11 +26775.0 + 21 +10159.32667 + 31 +0.0 + 0 +LINE + 5 +2214 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +10180.977305 + 30 +0.0 + 11 +26812.5 + 21 +10180.977305 + 31 +0.0 + 0 +LINE + 5 +2215 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +10202.62794 + 30 +0.0 + 11 +26775.0 + 21 +10202.62794 + 31 +0.0 + 0 +LINE + 5 +2216 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +10224.278575 + 30 +0.0 + 11 +26812.5 + 21 +10224.278575 + 31 +0.0 + 0 +LINE + 5 +2217 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +10245.92921 + 30 +0.0 + 11 +26775.0 + 21 +10245.92921 + 31 +0.0 + 0 +LINE + 5 +2218 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +10267.579845 + 30 +0.0 + 11 +26812.5 + 21 +10267.579845 + 31 +0.0 + 0 +LINE + 5 +2219 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +10289.23048 + 30 +0.0 + 11 +26775.0 + 21 +10289.23048 + 31 +0.0 + 0 +LINE + 5 +221A + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +10310.881115 + 30 +0.0 + 11 +26812.5 + 21 +10310.881115 + 31 +0.0 + 0 +LINE + 5 +221B + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +10332.53175 + 30 +0.0 + 11 +26775.0 + 21 +10332.53175 + 31 +0.0 + 0 +LINE + 5 +221C + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +10354.182385 + 30 +0.0 + 11 +26812.5 + 21 +10354.182385 + 31 +0.0 + 0 +LINE + 5 +221D + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +10375.83302 + 30 +0.0 + 11 +26775.0 + 21 +10375.83302 + 31 +0.0 + 0 +LINE + 5 +221E + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +9747.964605 + 30 +0.0 + 11 +26812.5 + 21 +9747.964605 + 31 +0.0 + 0 +LINE + 5 +221F + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +9726.31397 + 30 +0.0 + 11 +26775.0 + 21 +9726.31397 + 31 +0.0 + 0 +LINE + 5 +2220 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +9704.663335 + 30 +0.0 + 11 +26812.5 + 21 +9704.663335 + 31 +0.0 + 0 +LINE + 5 +2221 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +9683.0127 + 30 +0.0 + 11 +26775.0 + 21 +9683.0127 + 31 +0.0 + 0 +LINE + 5 +2222 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +9661.362065 + 30 +0.0 + 11 +26812.5 + 21 +9661.362065 + 31 +0.0 + 0 +LINE + 5 +2223 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +9639.71143 + 30 +0.0 + 11 +26775.0 + 21 +9639.71143 + 31 +0.0 + 0 +LINE + 5 +2224 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +9618.060795 + 30 +0.0 + 11 +26812.5 + 21 +9618.060795 + 31 +0.0 + 0 +LINE + 5 +2225 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +9596.41016 + 30 +0.0 + 11 +26775.0 + 21 +9596.41016 + 31 +0.0 + 0 +LINE + 5 +2226 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +9574.759525 + 30 +0.0 + 11 +26812.5 + 21 +9574.759525 + 31 +0.0 + 0 +LINE + 5 +2227 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +9553.10889 + 30 +0.0 + 11 +26775.0 + 21 +9553.10889 + 31 +0.0 + 0 +LINE + 5 +2228 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +9531.458255 + 30 +0.0 + 11 +26812.5 + 21 +9531.458255 + 31 +0.0 + 0 +LINE + 5 +2229 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +9509.80762 + 30 +0.0 + 11 +26775.0 + 21 +9509.80762 + 31 +0.0 + 0 +LINE + 5 +222A + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +9488.156985 + 30 +0.0 + 11 +26812.5 + 21 +9488.156985 + 31 +0.0 + 0 +LINE + 5 +222B + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +9466.50635 + 30 +0.0 + 11 +26775.0 + 21 +9466.50635 + 31 +0.0 + 0 +LINE + 5 +222C + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +9444.855715 + 30 +0.0 + 11 +26812.5 + 21 +9444.855715 + 31 +0.0 + 0 +LINE + 5 +222D + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +9423.20508 + 30 +0.0 + 11 +26775.0 + 21 +9423.20508 + 31 +0.0 + 0 +LINE + 5 +222E + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +9401.554445 + 30 +0.0 + 11 +26812.5 + 21 +9401.554445 + 31 +0.0 + 0 +LINE + 5 +222F + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +9379.90381 + 30 +0.0 + 11 +26775.0 + 21 +9379.90381 + 31 +0.0 + 0 +LINE + 5 +2230 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +9358.253175 + 30 +0.0 + 11 +26812.5 + 21 +9358.253175 + 31 +0.0 + 0 +LINE + 5 +2231 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +9336.60254 + 30 +0.0 + 11 +26775.0 + 21 +9336.60254 + 31 +0.0 + 0 +LINE + 5 +2232 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +9314.951905 + 30 +0.0 + 11 +26812.5 + 21 +9314.951905 + 31 +0.0 + 0 +LINE + 5 +2233 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +9293.30127 + 30 +0.0 + 11 +26775.0 + 21 +9293.30127 + 31 +0.0 + 0 +LINE + 5 +2234 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +9271.650635 + 30 +0.0 + 11 +26812.5 + 21 +9271.650635 + 31 +0.0 + 0 +LINE + 5 +2235 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +9250.0 + 30 +0.0 + 11 +26775.0 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2236 + 8 +0 + 62 + 0 + 10 +25363.75 + 20 +9228.349365 + 30 +0.0 + 11 +25387.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +2237 + 8 +0 + 62 + 0 + 10 +25437.5 + 20 +9228.349365 + 30 +0.0 + 11 +25462.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +2238 + 8 +0 + 62 + 0 + 10 +25512.5 + 20 +9228.349365 + 30 +0.0 + 11 +25537.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +2239 + 8 +0 + 62 + 0 + 10 +25587.5 + 20 +9228.349365 + 30 +0.0 + 11 +25612.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +223A + 8 +0 + 62 + 0 + 10 +25662.5 + 20 +9228.349365 + 30 +0.0 + 11 +25687.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +223B + 8 +0 + 62 + 0 + 10 +25737.5 + 20 +9228.349365 + 30 +0.0 + 11 +25762.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +223C + 8 +0 + 62 + 0 + 10 +25812.5 + 20 +9228.349365 + 30 +0.0 + 11 +25837.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +223D + 8 +0 + 62 + 0 + 10 +25887.5 + 20 +9228.349365 + 30 +0.0 + 11 +25912.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +223E + 8 +0 + 62 + 0 + 10 +25962.5 + 20 +9228.349365 + 30 +0.0 + 11 +25987.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +223F + 8 +0 + 62 + 0 + 10 +26037.5 + 20 +9228.349365 + 30 +0.0 + 11 +26062.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +2240 + 8 +0 + 62 + 0 + 10 +26112.5 + 20 +9228.349365 + 30 +0.0 + 11 +26137.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +2241 + 8 +0 + 62 + 0 + 10 +26187.5 + 20 +9228.349365 + 30 +0.0 + 11 +26212.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +2242 + 8 +0 + 62 + 0 + 10 +26262.5 + 20 +9228.349365 + 30 +0.0 + 11 +26287.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +2243 + 8 +0 + 62 + 0 + 10 +26337.5 + 20 +9228.349365 + 30 +0.0 + 11 +26362.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +2244 + 8 +0 + 62 + 0 + 10 +26412.5 + 20 +9228.349365 + 30 +0.0 + 11 +26437.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +2245 + 8 +0 + 62 + 0 + 10 +26487.5 + 20 +9228.349365 + 30 +0.0 + 11 +26512.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +2246 + 8 +0 + 62 + 0 + 10 +26562.5 + 20 +9228.349365 + 30 +0.0 + 11 +26587.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +2247 + 8 +0 + 62 + 0 + 10 +26637.5 + 20 +9228.349365 + 30 +0.0 + 11 +26662.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +2248 + 8 +0 + 62 + 0 + 10 +26712.5 + 20 +9228.349365 + 30 +0.0 + 11 +26737.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +2249 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +9228.349365 + 30 +0.0 + 11 +26812.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +224A + 8 +0 + 62 + 0 + 10 +25400.0 + 20 +9206.69873 + 30 +0.0 + 11 +25425.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +224B + 8 +0 + 62 + 0 + 10 +25475.0 + 20 +9206.69873 + 30 +0.0 + 11 +25500.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +224C + 8 +0 + 62 + 0 + 10 +25550.0 + 20 +9206.69873 + 30 +0.0 + 11 +25575.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +224D + 8 +0 + 62 + 0 + 10 +25625.0 + 20 +9206.69873 + 30 +0.0 + 11 +25650.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +224E + 8 +0 + 62 + 0 + 10 +25700.0 + 20 +9206.69873 + 30 +0.0 + 11 +25725.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +224F + 8 +0 + 62 + 0 + 10 +25775.0 + 20 +9206.69873 + 30 +0.0 + 11 +25800.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +2250 + 8 +0 + 62 + 0 + 10 +25850.0 + 20 +9206.69873 + 30 +0.0 + 11 +25875.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +2251 + 8 +0 + 62 + 0 + 10 +25925.0 + 20 +9206.69873 + 30 +0.0 + 11 +25950.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +2252 + 8 +0 + 62 + 0 + 10 +26000.0 + 20 +9206.69873 + 30 +0.0 + 11 +26025.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +2253 + 8 +0 + 62 + 0 + 10 +26075.0 + 20 +9206.69873 + 30 +0.0 + 11 +26100.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +2254 + 8 +0 + 62 + 0 + 10 +26150.0 + 20 +9206.69873 + 30 +0.0 + 11 +26175.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +2255 + 8 +0 + 62 + 0 + 10 +26225.0 + 20 +9206.69873 + 30 +0.0 + 11 +26250.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +2256 + 8 +0 + 62 + 0 + 10 +26300.0 + 20 +9206.69873 + 30 +0.0 + 11 +26325.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +2257 + 8 +0 + 62 + 0 + 10 +26375.0 + 20 +9206.69873 + 30 +0.0 + 11 +26400.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +2258 + 8 +0 + 62 + 0 + 10 +26450.0 + 20 +9206.69873 + 30 +0.0 + 11 +26475.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +2259 + 8 +0 + 62 + 0 + 10 +26525.0 + 20 +9206.69873 + 30 +0.0 + 11 +26550.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +225A + 8 +0 + 62 + 0 + 10 +26600.0 + 20 +9206.69873 + 30 +0.0 + 11 +26625.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +225B + 8 +0 + 62 + 0 + 10 +26675.0 + 20 +9206.69873 + 30 +0.0 + 11 +26700.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +225C + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +9206.69873 + 30 +0.0 + 11 +26775.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +225D + 8 +0 + 62 + 0 + 10 +25363.75 + 20 +9185.048095 + 30 +0.0 + 11 +25387.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +225E + 8 +0 + 62 + 0 + 10 +25437.5 + 20 +9185.048095 + 30 +0.0 + 11 +25462.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +225F + 8 +0 + 62 + 0 + 10 +25512.5 + 20 +9185.048095 + 30 +0.0 + 11 +25537.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +2260 + 8 +0 + 62 + 0 + 10 +25587.5 + 20 +9185.048095 + 30 +0.0 + 11 +25612.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +2261 + 8 +0 + 62 + 0 + 10 +25662.5 + 20 +9185.048095 + 30 +0.0 + 11 +25687.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +2262 + 8 +0 + 62 + 0 + 10 +25737.5 + 20 +9185.048095 + 30 +0.0 + 11 +25762.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +2263 + 8 +0 + 62 + 0 + 10 +25812.5 + 20 +9185.048095 + 30 +0.0 + 11 +25837.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +2264 + 8 +0 + 62 + 0 + 10 +25887.5 + 20 +9185.048095 + 30 +0.0 + 11 +25912.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +2265 + 8 +0 + 62 + 0 + 10 +25962.5 + 20 +9185.048095 + 30 +0.0 + 11 +25987.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +2266 + 8 +0 + 62 + 0 + 10 +26037.5 + 20 +9185.048095 + 30 +0.0 + 11 +26062.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +2267 + 8 +0 + 62 + 0 + 10 +26112.5 + 20 +9185.048095 + 30 +0.0 + 11 +26137.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +2268 + 8 +0 + 62 + 0 + 10 +26187.5 + 20 +9185.048095 + 30 +0.0 + 11 +26212.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +2269 + 8 +0 + 62 + 0 + 10 +26262.5 + 20 +9185.048095 + 30 +0.0 + 11 +26287.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +226A + 8 +0 + 62 + 0 + 10 +26337.5 + 20 +9185.048095 + 30 +0.0 + 11 +26362.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +226B + 8 +0 + 62 + 0 + 10 +26412.5 + 20 +9185.048095 + 30 +0.0 + 11 +26437.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +226C + 8 +0 + 62 + 0 + 10 +26487.5 + 20 +9185.048095 + 30 +0.0 + 11 +26512.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +226D + 8 +0 + 62 + 0 + 10 +26562.5 + 20 +9185.048095 + 30 +0.0 + 11 +26587.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +226E + 8 +0 + 62 + 0 + 10 +26637.5 + 20 +9185.048095 + 30 +0.0 + 11 +26662.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +226F + 8 +0 + 62 + 0 + 10 +26712.5 + 20 +9185.048095 + 30 +0.0 + 11 +26737.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +2270 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +9185.048095 + 30 +0.0 + 11 +26812.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +2271 + 8 +0 + 62 + 0 + 10 +26412.49993 + 20 +9185.048054 + 30 +0.0 + 11 +26399.99993 + 21 +9206.698689 + 31 +0.0 + 0 +LINE + 5 +2272 + 8 +0 + 62 + 0 + 10 +26374.99993 + 20 +9249.99996 + 30 +0.0 + 11 +26374.999907 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2273 + 8 +0 + 62 + 0 + 10 +26374.99993 + 20 +9206.698689 + 30 +0.0 + 11 +26362.49993 + 21 +9228.349325 + 31 +0.0 + 0 +LINE + 5 +2274 + 8 +0 + 62 + 0 + 10 +26371.187928 + 20 +9170.0 + 30 +0.0 + 11 +26362.49993 + 21 +9185.048054 + 31 +0.0 + 0 +LINE + 5 +2275 + 8 +0 + 62 + 0 + 10 +26337.49993 + 20 +9228.349325 + 30 +0.0 + 11 +26324.99993 + 21 +9249.99996 + 31 +0.0 + 0 +LINE + 5 +2276 + 8 +0 + 62 + 0 + 10 +26337.49993 + 20 +9185.048054 + 30 +0.0 + 11 +26324.99993 + 21 +9206.69869 + 31 +0.0 + 0 +LINE + 5 +2277 + 8 +0 + 62 + 0 + 10 +26299.99993 + 20 +9249.99996 + 30 +0.0 + 11 +26299.999907 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2278 + 8 +0 + 62 + 0 + 10 +26299.99993 + 20 +9206.69869 + 30 +0.0 + 11 +26287.49993 + 21 +9228.349325 + 31 +0.0 + 0 +LINE + 5 +2279 + 8 +0 + 62 + 0 + 10 +26296.187929 + 20 +9170.0 + 30 +0.0 + 11 +26287.49993 + 21 +9185.048055 + 31 +0.0 + 0 +LINE + 5 +227A + 8 +0 + 62 + 0 + 10 +26262.49993 + 20 +9228.349325 + 30 +0.0 + 11 +26249.99993 + 21 +9249.99996 + 31 +0.0 + 0 +LINE + 5 +227B + 8 +0 + 62 + 0 + 10 +26262.49993 + 20 +9185.048055 + 30 +0.0 + 11 +26249.99993 + 21 +9206.69869 + 31 +0.0 + 0 +LINE + 5 +227C + 8 +0 + 62 + 0 + 10 +26224.99993 + 20 +9249.99996 + 30 +0.0 + 11 +26224.999907 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +227D + 8 +0 + 62 + 0 + 10 +26224.999931 + 20 +9206.69869 + 30 +0.0 + 11 +26212.499931 + 21 +9228.349325 + 31 +0.0 + 0 +LINE + 5 +227E + 8 +0 + 62 + 0 + 10 +26221.187929 + 20 +9170.0 + 30 +0.0 + 11 +26212.499931 + 21 +9185.048055 + 31 +0.0 + 0 +LINE + 5 +227F + 8 +0 + 62 + 0 + 10 +26187.499931 + 20 +9228.349325 + 30 +0.0 + 11 +26174.999931 + 21 +9249.99996 + 31 +0.0 + 0 +LINE + 5 +2280 + 8 +0 + 62 + 0 + 10 +26187.499931 + 20 +9185.048055 + 30 +0.0 + 11 +26174.999931 + 21 +9206.69869 + 31 +0.0 + 0 +LINE + 5 +2281 + 8 +0 + 62 + 0 + 10 +26149.999931 + 20 +9249.99996 + 30 +0.0 + 11 +26149.999908 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2282 + 8 +0 + 62 + 0 + 10 +26149.999931 + 20 +9206.69869 + 30 +0.0 + 11 +26137.499931 + 21 +9228.349325 + 31 +0.0 + 0 +LINE + 5 +2283 + 8 +0 + 62 + 0 + 10 +26146.187929 + 20 +9170.0 + 30 +0.0 + 11 +26137.499931 + 21 +9185.048055 + 31 +0.0 + 0 +LINE + 5 +2284 + 8 +0 + 62 + 0 + 10 +26112.499931 + 20 +9228.349325 + 30 +0.0 + 11 +26099.999931 + 21 +9249.99996 + 31 +0.0 + 0 +LINE + 5 +2285 + 8 +0 + 62 + 0 + 10 +26112.499931 + 20 +9185.048055 + 30 +0.0 + 11 +26099.999931 + 21 +9206.69869 + 31 +0.0 + 0 +LINE + 5 +2286 + 8 +0 + 62 + 0 + 10 +26074.999931 + 20 +9249.99996 + 30 +0.0 + 11 +26074.999908 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2287 + 8 +0 + 62 + 0 + 10 +26074.999931 + 20 +9206.69869 + 30 +0.0 + 11 +26062.499931 + 21 +9228.349325 + 31 +0.0 + 0 +LINE + 5 +2288 + 8 +0 + 62 + 0 + 10 +26071.18793 + 20 +9170.0 + 30 +0.0 + 11 +26062.499931 + 21 +9185.048055 + 31 +0.0 + 0 +LINE + 5 +2289 + 8 +0 + 62 + 0 + 10 +26037.499931 + 20 +9228.349325 + 30 +0.0 + 11 +26024.999931 + 21 +9249.99996 + 31 +0.0 + 0 +LINE + 5 +228A + 8 +0 + 62 + 0 + 10 +26037.499931 + 20 +9185.048055 + 30 +0.0 + 11 +26024.999931 + 21 +9206.69869 + 31 +0.0 + 0 +LINE + 5 +228B + 8 +0 + 62 + 0 + 10 +25999.999931 + 20 +9249.99996 + 30 +0.0 + 11 +25999.999908 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +228C + 8 +0 + 62 + 0 + 10 +25999.999931 + 20 +9206.69869 + 30 +0.0 + 11 +25987.499931 + 21 +9228.349325 + 31 +0.0 + 0 +LINE + 5 +228D + 8 +0 + 62 + 0 + 10 +25996.18793 + 20 +9170.0 + 30 +0.0 + 11 +25987.499931 + 21 +9185.048055 + 31 +0.0 + 0 +LINE + 5 +228E + 8 +0 + 62 + 0 + 10 +25962.499931 + 20 +9228.349325 + 30 +0.0 + 11 +25949.999931 + 21 +9249.99996 + 31 +0.0 + 0 +LINE + 5 +228F + 8 +0 + 62 + 0 + 10 +25962.499931 + 20 +9185.048055 + 30 +0.0 + 11 +25949.999931 + 21 +9206.69869 + 31 +0.0 + 0 +LINE + 5 +2290 + 8 +0 + 62 + 0 + 10 +25924.999931 + 20 +9249.99996 + 30 +0.0 + 11 +25924.999909 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2291 + 8 +0 + 62 + 0 + 10 +25924.999932 + 20 +9206.69869 + 30 +0.0 + 11 +25912.499932 + 21 +9228.349325 + 31 +0.0 + 0 +LINE + 5 +2292 + 8 +0 + 62 + 0 + 10 +25921.18793 + 20 +9170.0 + 30 +0.0 + 11 +25912.499932 + 21 +9185.048055 + 31 +0.0 + 0 +LINE + 5 +2293 + 8 +0 + 62 + 0 + 10 +25887.499932 + 20 +9228.349325 + 30 +0.0 + 11 +25874.999932 + 21 +9249.99996 + 31 +0.0 + 0 +LINE + 5 +2294 + 8 +0 + 62 + 0 + 10 +25887.499932 + 20 +9185.048055 + 30 +0.0 + 11 +25874.999932 + 21 +9206.69869 + 31 +0.0 + 0 +LINE + 5 +2295 + 8 +0 + 62 + 0 + 10 +25849.999932 + 20 +9249.999961 + 30 +0.0 + 11 +25849.999909 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2296 + 8 +0 + 62 + 0 + 10 +25849.999932 + 20 +9206.69869 + 30 +0.0 + 11 +25837.499932 + 21 +9228.349325 + 31 +0.0 + 0 +LINE + 5 +2297 + 8 +0 + 62 + 0 + 10 +25846.187931 + 20 +9170.0 + 30 +0.0 + 11 +25837.499932 + 21 +9185.048055 + 31 +0.0 + 0 +LINE + 5 +2298 + 8 +0 + 62 + 0 + 10 +25812.499932 + 20 +9228.349326 + 30 +0.0 + 11 +25799.999932 + 21 +9249.999961 + 31 +0.0 + 0 +LINE + 5 +2299 + 8 +0 + 62 + 0 + 10 +25812.499932 + 20 +9185.048055 + 30 +0.0 + 11 +25799.999932 + 21 +9206.69869 + 31 +0.0 + 0 +LINE + 5 +229A + 8 +0 + 62 + 0 + 10 +25774.999932 + 20 +9249.999961 + 30 +0.0 + 11 +25774.999909 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +229B + 8 +0 + 62 + 0 + 10 +25774.999932 + 20 +9206.698691 + 30 +0.0 + 11 +25762.499932 + 21 +9228.349326 + 31 +0.0 + 0 +LINE + 5 +229C + 8 +0 + 62 + 0 + 10 +25771.187931 + 20 +9170.0 + 30 +0.0 + 11 +25762.499932 + 21 +9185.048055 + 31 +0.0 + 0 +LINE + 5 +229D + 8 +0 + 62 + 0 + 10 +25737.499932 + 20 +9228.349326 + 30 +0.0 + 11 +25724.999932 + 21 +9249.999961 + 31 +0.0 + 0 +LINE + 5 +229E + 8 +0 + 62 + 0 + 10 +25737.499932 + 20 +9185.048056 + 30 +0.0 + 11 +25724.999932 + 21 +9206.698691 + 31 +0.0 + 0 +LINE + 5 +229F + 8 +0 + 62 + 0 + 10 +25699.999932 + 20 +9249.999961 + 30 +0.0 + 11 +25699.99991 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +22A0 + 8 +0 + 62 + 0 + 10 +25699.999932 + 20 +9206.698691 + 30 +0.0 + 11 +25687.499932 + 21 +9228.349326 + 31 +0.0 + 0 +LINE + 5 +22A1 + 8 +0 + 62 + 0 + 10 +25696.187931 + 20 +9170.0 + 30 +0.0 + 11 +25687.499932 + 21 +9185.048056 + 31 +0.0 + 0 +LINE + 5 +22A2 + 8 +0 + 62 + 0 + 10 +25662.499932 + 20 +9228.349326 + 30 +0.0 + 11 +25649.999932 + 21 +9249.999961 + 31 +0.0 + 0 +LINE + 5 +22A3 + 8 +0 + 62 + 0 + 10 +25662.499932 + 20 +9185.048056 + 30 +0.0 + 11 +25649.999932 + 21 +9206.698691 + 31 +0.0 + 0 +LINE + 5 +22A4 + 8 +0 + 62 + 0 + 10 +25624.999932 + 20 +9249.999961 + 30 +0.0 + 11 +25624.99991 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +22A5 + 8 +0 + 62 + 0 + 10 +25624.999932 + 20 +9206.698691 + 30 +0.0 + 11 +25612.499932 + 21 +9228.349326 + 31 +0.0 + 0 +LINE + 5 +22A6 + 8 +0 + 62 + 0 + 10 +25621.187932 + 20 +9170.0 + 30 +0.0 + 11 +25612.499933 + 21 +9185.048056 + 31 +0.0 + 0 +LINE + 5 +22A7 + 8 +0 + 62 + 0 + 10 +25587.499933 + 20 +9228.349326 + 30 +0.0 + 11 +25574.999933 + 21 +9249.999961 + 31 +0.0 + 0 +LINE + 5 +22A8 + 8 +0 + 62 + 0 + 10 +25587.499933 + 20 +9185.048056 + 30 +0.0 + 11 +25574.999933 + 21 +9206.698691 + 31 +0.0 + 0 +LINE + 5 +22A9 + 8 +0 + 62 + 0 + 10 +25549.999933 + 20 +9249.999961 + 30 +0.0 + 11 +25549.99991 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +22AA + 8 +0 + 62 + 0 + 10 +25549.999933 + 20 +9206.698691 + 30 +0.0 + 11 +25537.499933 + 21 +9228.349326 + 31 +0.0 + 0 +LINE + 5 +22AB + 8 +0 + 62 + 0 + 10 +25546.187932 + 20 +9170.0 + 30 +0.0 + 11 +25537.499933 + 21 +9185.048056 + 31 +0.0 + 0 +LINE + 5 +22AC + 8 +0 + 62 + 0 + 10 +25512.499933 + 20 +9228.349326 + 30 +0.0 + 11 +25499.999933 + 21 +9249.999961 + 31 +0.0 + 0 +LINE + 5 +22AD + 8 +0 + 62 + 0 + 10 +25512.499933 + 20 +9185.048056 + 30 +0.0 + 11 +25499.999933 + 21 +9206.698691 + 31 +0.0 + 0 +LINE + 5 +22AE + 8 +0 + 62 + 0 + 10 +25474.999933 + 20 +9249.999961 + 30 +0.0 + 11 +25474.999911 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +22AF + 8 +0 + 62 + 0 + 10 +25474.999933 + 20 +9206.698691 + 30 +0.0 + 11 +25462.499933 + 21 +9228.349326 + 31 +0.0 + 0 +LINE + 5 +22B0 + 8 +0 + 62 + 0 + 10 +25471.187932 + 20 +9170.0 + 30 +0.0 + 11 +25462.499933 + 21 +9185.048056 + 31 +0.0 + 0 +LINE + 5 +22B1 + 8 +0 + 62 + 0 + 10 +25437.499933 + 20 +9228.349326 + 30 +0.0 + 11 +25424.999933 + 21 +9249.999961 + 31 +0.0 + 0 +LINE + 5 +22B2 + 8 +0 + 62 + 0 + 10 +25437.499933 + 20 +9185.048056 + 30 +0.0 + 11 +25424.999933 + 21 +9206.698691 + 31 +0.0 + 0 +LINE + 5 +22B3 + 8 +0 + 62 + 0 + 10 +25399.999933 + 20 +9249.999961 + 30 +0.0 + 11 +25399.999911 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +22B4 + 8 +0 + 62 + 0 + 10 +25399.999933 + 20 +9206.698691 + 30 +0.0 + 11 +25387.499933 + 21 +9228.349326 + 31 +0.0 + 0 +LINE + 5 +22B5 + 8 +0 + 62 + 0 + 10 +25396.187933 + 20 +9170.0 + 30 +0.0 + 11 +25387.499933 + 21 +9185.048056 + 31 +0.0 + 0 +LINE + 5 +22B6 + 8 +0 + 62 + 0 + 10 +26446.187928 + 20 +9170.0 + 30 +0.0 + 11 +26437.49993 + 21 +9185.048054 + 31 +0.0 + 0 +LINE + 5 +22B7 + 8 +0 + 62 + 0 + 10 +26412.49993 + 20 +9228.349324 + 30 +0.0 + 11 +26399.99993 + 21 +9249.99996 + 31 +0.0 + 0 +LINE + 5 +22B8 + 8 +0 + 62 + 0 + 10 +26449.99993 + 20 +9206.698689 + 30 +0.0 + 11 +26437.49993 + 21 +9228.349324 + 31 +0.0 + 0 +LINE + 5 +22B9 + 8 +0 + 62 + 0 + 10 +26487.49993 + 20 +9185.048054 + 30 +0.0 + 11 +26474.99993 + 21 +9206.698689 + 31 +0.0 + 0 +LINE + 5 +22BA + 8 +0 + 62 + 0 + 10 +26449.99993 + 20 +9249.999959 + 30 +0.0 + 11 +26449.999906 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +22BB + 8 +0 + 62 + 0 + 10 +26521.187928 + 20 +9170.0 + 30 +0.0 + 11 +26512.49993 + 21 +9185.048054 + 31 +0.0 + 0 +LINE + 5 +22BC + 8 +0 + 62 + 0 + 10 +26487.49993 + 20 +9228.349324 + 30 +0.0 + 11 +26474.99993 + 21 +9249.999959 + 31 +0.0 + 0 +LINE + 5 +22BD + 8 +0 + 62 + 0 + 10 +26524.99993 + 20 +9206.698689 + 30 +0.0 + 11 +26512.49993 + 21 +9228.349324 + 31 +0.0 + 0 +LINE + 5 +22BE + 8 +0 + 62 + 0 + 10 +26562.499929 + 20 +9185.048054 + 30 +0.0 + 11 +26549.999929 + 21 +9206.698689 + 31 +0.0 + 0 +LINE + 5 +22BF + 8 +0 + 62 + 0 + 10 +26524.999929 + 20 +9249.999959 + 30 +0.0 + 11 +26524.999906 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +22C0 + 8 +0 + 62 + 0 + 10 +26596.187927 + 20 +9170.0 + 30 +0.0 + 11 +26587.499929 + 21 +9185.048054 + 31 +0.0 + 0 +LINE + 5 +22C1 + 8 +0 + 62 + 0 + 10 +26562.499929 + 20 +9228.349324 + 30 +0.0 + 11 +26549.999929 + 21 +9249.999959 + 31 +0.0 + 0 +LINE + 5 +22C2 + 8 +0 + 62 + 0 + 10 +26599.999929 + 20 +9206.698689 + 30 +0.0 + 11 +26587.499929 + 21 +9228.349324 + 31 +0.0 + 0 +LINE + 5 +22C3 + 8 +0 + 62 + 0 + 10 +26637.499929 + 20 +9185.048054 + 30 +0.0 + 11 +26624.999929 + 21 +9206.698689 + 31 +0.0 + 0 +LINE + 5 +22C4 + 8 +0 + 62 + 0 + 10 +26599.999929 + 20 +9249.999959 + 30 +0.0 + 11 +26599.999906 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +22C5 + 8 +0 + 62 + 0 + 10 +26671.187927 + 20 +9170.0 + 30 +0.0 + 11 +26662.499929 + 21 +9185.048054 + 31 +0.0 + 0 +LINE + 5 +22C6 + 8 +0 + 62 + 0 + 10 +26637.499929 + 20 +9228.349324 + 30 +0.0 + 11 +26624.999929 + 21 +9249.999959 + 31 +0.0 + 0 +LINE + 5 +22C7 + 8 +0 + 62 + 0 + 10 +26674.999929 + 20 +9206.698689 + 30 +0.0 + 11 +26662.499929 + 21 +9228.349324 + 31 +0.0 + 0 +LINE + 5 +22C8 + 8 +0 + 62 + 0 + 10 +26712.499929 + 20 +9185.048054 + 30 +0.0 + 11 +26699.999929 + 21 +9206.698689 + 31 +0.0 + 0 +LINE + 5 +22C9 + 8 +0 + 62 + 0 + 10 +26674.999929 + 20 +9249.999959 + 30 +0.0 + 11 +26674.999905 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +22CA + 8 +0 + 62 + 0 + 10 +26746.187927 + 20 +9170.0 + 30 +0.0 + 11 +26737.499929 + 21 +9185.048054 + 31 +0.0 + 0 +LINE + 5 +22CB + 8 +0 + 62 + 0 + 10 +26712.499929 + 20 +9228.349324 + 30 +0.0 + 11 +26699.999929 + 21 +9249.999959 + 31 +0.0 + 0 +LINE + 5 +22CC + 8 +0 + 62 + 0 + 10 +26749.999929 + 20 +9206.698689 + 30 +0.0 + 11 +26737.499929 + 21 +9228.349324 + 31 +0.0 + 0 +LINE + 5 +22CD + 8 +0 + 62 + 0 + 10 +26787.499929 + 20 +9185.048054 + 30 +0.0 + 11 +26774.999929 + 21 +9206.698689 + 31 +0.0 + 0 +LINE + 5 +22CE + 8 +0 + 62 + 0 + 10 +26749.999929 + 20 +9249.999959 + 30 +0.0 + 11 +26740.0 + 21 +9267.320343 + 31 +0.0 + 0 +LINE + 5 +22CF + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +9172.057549 + 30 +0.0 + 11 +26812.499929 + 21 +9185.048054 + 31 +0.0 + 0 +LINE + 5 +22D0 + 8 +0 + 62 + 0 + 10 +26787.499929 + 20 +9228.349324 + 30 +0.0 + 11 +26774.999929 + 21 +9249.999959 + 31 +0.0 + 0 +LINE + 5 +22D1 + 8 +0 + 62 + 0 + 10 +26749.999929 + 20 +9293.301229 + 30 +0.0 + 11 +26740.0 + 21 +9310.621613 + 31 +0.0 + 0 +LINE + 5 +22D2 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +9215.358819 + 30 +0.0 + 11 +26812.499929 + 21 +9228.349324 + 31 +0.0 + 0 +LINE + 5 +22D3 + 8 +0 + 62 + 0 + 10 +26787.499929 + 20 +9271.650594 + 30 +0.0 + 11 +26774.999929 + 21 +9293.301229 + 31 +0.0 + 0 +LINE + 5 +22D4 + 8 +0 + 62 + 0 + 10 +26749.999929 + 20 +9336.602499 + 30 +0.0 + 11 +26740.0 + 21 +9353.922883 + 31 +0.0 + 0 +LINE + 5 +22D5 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +9258.660089 + 30 +0.0 + 11 +26812.499928 + 21 +9271.650594 + 31 +0.0 + 0 +LINE + 5 +22D6 + 8 +0 + 62 + 0 + 10 +26787.499928 + 20 +9314.951864 + 30 +0.0 + 11 +26774.999928 + 21 +9336.602499 + 31 +0.0 + 0 +LINE + 5 +22D7 + 8 +0 + 62 + 0 + 10 +26749.999928 + 20 +9379.903769 + 30 +0.0 + 11 +26740.0 + 21 +9397.224153 + 31 +0.0 + 0 +LINE + 5 +22D8 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +9301.961359 + 30 +0.0 + 11 +26812.499928 + 21 +9314.951864 + 31 +0.0 + 0 +LINE + 5 +22D9 + 8 +0 + 62 + 0 + 10 +26787.499928 + 20 +9358.253134 + 30 +0.0 + 11 +26774.999928 + 21 +9379.903769 + 31 +0.0 + 0 +LINE + 5 +22DA + 8 +0 + 62 + 0 + 10 +26749.999928 + 20 +9423.205039 + 30 +0.0 + 11 +26740.0 + 21 +9440.525423 + 31 +0.0 + 0 +LINE + 5 +22DB + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +9345.262629 + 30 +0.0 + 11 +26812.499928 + 21 +9358.253134 + 31 +0.0 + 0 +LINE + 5 +22DC + 8 +0 + 62 + 0 + 10 +26787.499928 + 20 +9401.554404 + 30 +0.0 + 11 +26774.999928 + 21 +9423.205039 + 31 +0.0 + 0 +LINE + 5 +22DD + 8 +0 + 62 + 0 + 10 +26749.999928 + 20 +9466.50631 + 30 +0.0 + 11 +26740.0 + 21 +9483.826693 + 31 +0.0 + 0 +LINE + 5 +22DE + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +9388.563899 + 30 +0.0 + 11 +26812.499928 + 21 +9401.554404 + 31 +0.0 + 0 +LINE + 5 +22DF + 8 +0 + 62 + 0 + 10 +26787.499928 + 20 +9444.855674 + 30 +0.0 + 11 +26774.999928 + 21 +9466.50631 + 31 +0.0 + 0 +LINE + 5 +22E0 + 8 +0 + 62 + 0 + 10 +26749.999928 + 20 +9509.80758 + 30 +0.0 + 11 +26740.0 + 21 +9527.127963 + 31 +0.0 + 0 +LINE + 5 +22E1 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +9431.865169 + 30 +0.0 + 11 +26812.499928 + 21 +9444.855674 + 31 +0.0 + 0 +LINE + 5 +22E2 + 8 +0 + 62 + 0 + 10 +26787.499928 + 20 +9488.156945 + 30 +0.0 + 11 +26774.999928 + 21 +9509.80758 + 31 +0.0 + 0 +LINE + 5 +22E3 + 8 +0 + 62 + 0 + 10 +26749.999928 + 20 +9553.10885 + 30 +0.0 + 11 +26740.0 + 21 +9570.429233 + 31 +0.0 + 0 +LINE + 5 +22E4 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +9475.166439 + 30 +0.0 + 11 +26812.499928 + 21 +9488.156945 + 31 +0.0 + 0 +LINE + 5 +22E5 + 8 +0 + 62 + 0 + 10 +26787.499928 + 20 +9531.458215 + 30 +0.0 + 11 +26774.999928 + 21 +9553.10885 + 31 +0.0 + 0 +LINE + 5 +22E6 + 8 +0 + 62 + 0 + 10 +26749.999928 + 20 +9596.41012 + 30 +0.0 + 11 +26740.0 + 21 +9613.730503 + 31 +0.0 + 0 +LINE + 5 +22E7 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +9518.467709 + 30 +0.0 + 11 +26812.499928 + 21 +9531.458215 + 31 +0.0 + 0 +LINE + 5 +22E8 + 8 +0 + 62 + 0 + 10 +26787.499928 + 20 +9574.759485 + 30 +0.0 + 11 +26774.999928 + 21 +9596.41012 + 31 +0.0 + 0 +LINE + 5 +22E9 + 8 +0 + 62 + 0 + 10 +26749.999928 + 20 +9639.71139 + 30 +0.0 + 11 +26740.0 + 21 +9657.031773 + 31 +0.0 + 0 +LINE + 5 +22EA + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +9561.768979 + 30 +0.0 + 11 +26812.499928 + 21 +9574.759485 + 31 +0.0 + 0 +LINE + 5 +22EB + 8 +0 + 62 + 0 + 10 +26787.499928 + 20 +9618.060755 + 30 +0.0 + 11 +26774.999928 + 21 +9639.71139 + 31 +0.0 + 0 +LINE + 5 +22EC + 8 +0 + 62 + 0 + 10 +26749.999928 + 20 +9683.01266 + 30 +0.0 + 11 +26740.0 + 21 +9700.333043 + 31 +0.0 + 0 +LINE + 5 +22ED + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +9605.070249 + 30 +0.0 + 11 +26812.499928 + 21 +9618.060755 + 31 +0.0 + 0 +LINE + 5 +22EE + 8 +0 + 62 + 0 + 10 +26787.499928 + 20 +9661.362025 + 30 +0.0 + 11 +26774.999928 + 21 +9683.01266 + 31 +0.0 + 0 +LINE + 5 +22EF + 8 +0 + 62 + 0 + 10 +26749.999928 + 20 +9726.31393 + 30 +0.0 + 11 +26740.0 + 21 +9743.634313 + 31 +0.0 + 0 +LINE + 5 +22F0 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +9648.371519 + 30 +0.0 + 11 +26812.499928 + 21 +9661.362025 + 31 +0.0 + 0 +LINE + 5 +22F1 + 8 +0 + 62 + 0 + 10 +26787.499928 + 20 +9704.663295 + 30 +0.0 + 11 +26774.999928 + 21 +9726.31393 + 31 +0.0 + 0 +LINE + 5 +22F2 + 8 +0 + 62 + 0 + 10 +26749.999928 + 20 +9769.615201 + 30 +0.0 + 11 +26740.0 + 21 +9786.935583 + 31 +0.0 + 0 +LINE + 5 +22F3 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +9691.672789 + 30 +0.0 + 11 +26812.499928 + 21 +9704.663295 + 31 +0.0 + 0 +LINE + 5 +22F4 + 8 +0 + 62 + 0 + 10 +26787.499928 + 20 +9747.964565 + 30 +0.0 + 11 +26774.999928 + 21 +9769.6152 + 31 +0.0 + 0 +LINE + 5 +22F5 + 8 +0 + 62 + 0 + 10 +26749.999928 + 20 +9812.916471 + 30 +0.0 + 11 +26740.0 + 21 +9830.236853 + 31 +0.0 + 0 +LINE + 5 +22F6 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +9734.974059 + 30 +0.0 + 11 +26812.499928 + 21 +9747.964565 + 31 +0.0 + 0 +LINE + 5 +22F7 + 8 +0 + 62 + 0 + 10 +26787.499928 + 20 +9791.265836 + 30 +0.0 + 11 +26774.999928 + 21 +9812.916471 + 31 +0.0 + 0 +LINE + 5 +22F8 + 8 +0 + 62 + 0 + 10 +26749.999928 + 20 +9856.217741 + 30 +0.0 + 11 +26740.0 + 21 +9873.538123 + 31 +0.0 + 0 +LINE + 5 +22F9 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +9778.275329 + 30 +0.0 + 11 +26812.499927 + 21 +9791.265835 + 31 +0.0 + 0 +LINE + 5 +22FA + 8 +0 + 62 + 0 + 10 +26787.499927 + 20 +9834.567106 + 30 +0.0 + 11 +26774.999927 + 21 +9856.217741 + 31 +0.0 + 0 +LINE + 5 +22FB + 8 +0 + 62 + 0 + 10 +26749.999927 + 20 +9899.519011 + 30 +0.0 + 11 +26740.0 + 21 +9916.839393 + 31 +0.0 + 0 +LINE + 5 +22FC + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +9821.576599 + 30 +0.0 + 11 +26812.499927 + 21 +9834.567106 + 31 +0.0 + 0 +LINE + 5 +22FD + 8 +0 + 62 + 0 + 10 +26787.499927 + 20 +9877.868376 + 30 +0.0 + 11 +26774.999927 + 21 +9899.519011 + 31 +0.0 + 0 +LINE + 5 +22FE + 8 +0 + 62 + 0 + 10 +26749.999927 + 20 +9942.820281 + 30 +0.0 + 11 +26740.0 + 21 +9960.140663 + 31 +0.0 + 0 +LINE + 5 +22FF + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +9864.877869 + 30 +0.0 + 11 +26812.499927 + 21 +9877.868376 + 31 +0.0 + 0 +LINE + 5 +2300 + 8 +0 + 62 + 0 + 10 +26787.499927 + 20 +9921.169646 + 30 +0.0 + 11 +26774.999927 + 21 +9942.820281 + 31 +0.0 + 0 +LINE + 5 +2301 + 8 +0 + 62 + 0 + 10 +26749.999927 + 20 +9986.121551 + 30 +0.0 + 11 +26740.0 + 21 +10003.441933 + 31 +0.0 + 0 +LINE + 5 +2302 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +9908.179139 + 30 +0.0 + 11 +26812.499927 + 21 +9921.169646 + 31 +0.0 + 0 +LINE + 5 +2303 + 8 +0 + 62 + 0 + 10 +26787.499927 + 20 +9964.470916 + 30 +0.0 + 11 +26774.999927 + 21 +9986.121551 + 31 +0.0 + 0 +LINE + 5 +2304 + 8 +0 + 62 + 0 + 10 +26749.999927 + 20 +10029.422821 + 30 +0.0 + 11 +26740.0 + 21 +10046.743203 + 31 +0.0 + 0 +LINE + 5 +2305 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +9951.480409 + 30 +0.0 + 11 +26812.499927 + 21 +9964.470916 + 31 +0.0 + 0 +LINE + 5 +2306 + 8 +0 + 62 + 0 + 10 +26787.499927 + 20 +10007.772186 + 30 +0.0 + 11 +26774.999927 + 21 +10029.422821 + 31 +0.0 + 0 +LINE + 5 +2307 + 8 +0 + 62 + 0 + 10 +26749.999927 + 20 +10072.724092 + 30 +0.0 + 11 +26740.0 + 21 +10090.044473 + 31 +0.0 + 0 +LINE + 5 +2308 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +9994.781679 + 30 +0.0 + 11 +26812.499927 + 21 +10007.772186 + 31 +0.0 + 0 +LINE + 5 +2309 + 8 +0 + 62 + 0 + 10 +26787.499927 + 20 +10051.073456 + 30 +0.0 + 11 +26774.999927 + 21 +10072.724091 + 31 +0.0 + 0 +LINE + 5 +230A + 8 +0 + 62 + 0 + 10 +26749.999927 + 20 +10116.025362 + 30 +0.0 + 11 +26740.0 + 21 +10133.345743 + 31 +0.0 + 0 +LINE + 5 +230B + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +10038.082949 + 30 +0.0 + 11 +26812.499927 + 21 +10051.073456 + 31 +0.0 + 0 +LINE + 5 +230C + 8 +0 + 62 + 0 + 10 +26787.499927 + 20 +10094.374727 + 30 +0.0 + 11 +26774.999927 + 21 +10116.025362 + 31 +0.0 + 0 +LINE + 5 +230D + 8 +0 + 62 + 0 + 10 +26749.999927 + 20 +10159.326632 + 30 +0.0 + 11 +26740.0 + 21 +10176.647013 + 31 +0.0 + 0 +LINE + 5 +230E + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +10081.384219 + 30 +0.0 + 11 +26812.499927 + 21 +10094.374726 + 31 +0.0 + 0 +LINE + 5 +230F + 8 +0 + 62 + 0 + 10 +26787.499927 + 20 +10137.675997 + 30 +0.0 + 11 +26774.999927 + 21 +10159.326632 + 31 +0.0 + 0 +LINE + 5 +2310 + 8 +0 + 62 + 0 + 10 +26749.999927 + 20 +10202.627902 + 30 +0.0 + 11 +26740.0 + 21 +10219.948283 + 31 +0.0 + 0 +LINE + 5 +2311 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +10124.685489 + 30 +0.0 + 11 +26812.499927 + 21 +10137.675997 + 31 +0.0 + 0 +LINE + 5 +2312 + 8 +0 + 62 + 0 + 10 +26787.499927 + 20 +10180.977267 + 30 +0.0 + 11 +26774.999927 + 21 +10202.627902 + 31 +0.0 + 0 +LINE + 5 +2313 + 8 +0 + 62 + 0 + 10 +26749.999927 + 20 +10245.929172 + 30 +0.0 + 11 +26740.0 + 21 +10263.249553 + 31 +0.0 + 0 +LINE + 5 +2314 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +10167.986759 + 30 +0.0 + 11 +26812.499927 + 21 +10180.977267 + 31 +0.0 + 0 +LINE + 5 +2315 + 8 +0 + 62 + 0 + 10 +26787.499927 + 20 +10224.278537 + 30 +0.0 + 11 +26774.999927 + 21 +10245.929172 + 31 +0.0 + 0 +LINE + 5 +2316 + 8 +0 + 62 + 0 + 10 +26749.999927 + 20 +10289.230442 + 30 +0.0 + 11 +26740.0 + 21 +10306.550823 + 31 +0.0 + 0 +LINE + 5 +2317 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +10211.288029 + 30 +0.0 + 11 +26812.499927 + 21 +10224.278537 + 31 +0.0 + 0 +LINE + 5 +2318 + 8 +0 + 62 + 0 + 10 +26787.499927 + 20 +10267.579807 + 30 +0.0 + 11 +26774.999927 + 21 +10289.230442 + 31 +0.0 + 0 +LINE + 5 +2319 + 8 +0 + 62 + 0 + 10 +26749.999927 + 20 +10332.531712 + 30 +0.0 + 11 +26740.0 + 21 +10349.852093 + 31 +0.0 + 0 +LINE + 5 +231A + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +10254.589299 + 30 +0.0 + 11 +26812.499927 + 21 +10267.579807 + 31 +0.0 + 0 +LINE + 5 +231B + 8 +0 + 62 + 0 + 10 +26787.499927 + 20 +10310.881077 + 30 +0.0 + 11 +26774.999927 + 21 +10332.531712 + 31 +0.0 + 0 +LINE + 5 +231C + 8 +0 + 62 + 0 + 10 +26749.999927 + 20 +10375.832983 + 30 +0.0 + 11 +26749.759161 + 21 +10376.25 + 31 +0.0 + 0 +LINE + 5 +231D + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +10297.890569 + 30 +0.0 + 11 +26812.499927 + 21 +10310.881077 + 31 +0.0 + 0 +LINE + 5 +231E + 8 +0 + 62 + 0 + 10 +26787.499927 + 20 +10354.182347 + 30 +0.0 + 11 +26774.999927 + 21 +10375.832982 + 31 +0.0 + 0 +LINE + 5 +231F + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +10341.191839 + 30 +0.0 + 11 +26812.499926 + 21 +10354.182347 + 31 +0.0 + 0 +LINE + 5 +2320 + 8 +0 + 62 + 0 + 10 +25728.811888 + 20 +9170.0 + 30 +0.0 + 11 +25737.499932 + 21 +9185.048134 + 31 +0.0 + 0 +LINE + 5 +2321 + 8 +0 + 62 + 0 + 10 +25762.499932 + 20 +9228.349404 + 30 +0.0 + 11 +25774.999909 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2322 + 8 +0 + 62 + 0 + 10 +25724.999932 + 20 +9206.698769 + 30 +0.0 + 11 +25737.499932 + 21 +9228.349404 + 31 +0.0 + 0 +LINE + 5 +2323 + 8 +0 + 62 + 0 + 10 +25687.499932 + 20 +9185.048134 + 30 +0.0 + 11 +25699.999932 + 21 +9206.698769 + 31 +0.0 + 0 +LINE + 5 +2324 + 8 +0 + 62 + 0 + 10 +25653.811888 + 20 +9170.0 + 30 +0.0 + 11 +25662.499932 + 21 +9185.048134 + 31 +0.0 + 0 +LINE + 5 +2325 + 8 +0 + 62 + 0 + 10 +25687.499932 + 20 +9228.349404 + 30 +0.0 + 11 +25699.99991 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2326 + 8 +0 + 62 + 0 + 10 +25649.999932 + 20 +9206.698769 + 30 +0.0 + 11 +25662.499932 + 21 +9228.349404 + 31 +0.0 + 0 +LINE + 5 +2327 + 8 +0 + 62 + 0 + 10 +25612.499932 + 20 +9185.048134 + 30 +0.0 + 11 +25624.999932 + 21 +9206.698769 + 31 +0.0 + 0 +LINE + 5 +2328 + 8 +0 + 62 + 0 + 10 +25578.811888 + 20 +9170.0 + 30 +0.0 + 11 +25587.499932 + 21 +9185.048134 + 31 +0.0 + 0 +LINE + 5 +2329 + 8 +0 + 62 + 0 + 10 +25612.499932 + 20 +9228.349404 + 30 +0.0 + 11 +25624.99991 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +232A + 8 +0 + 62 + 0 + 10 +25574.999932 + 20 +9206.698769 + 30 +0.0 + 11 +25587.499932 + 21 +9228.349404 + 31 +0.0 + 0 +LINE + 5 +232B + 8 +0 + 62 + 0 + 10 +25537.499933 + 20 +9185.048134 + 30 +0.0 + 11 +25549.999933 + 21 +9206.698769 + 31 +0.0 + 0 +LINE + 5 +232C + 8 +0 + 62 + 0 + 10 +25503.811889 + 20 +9170.0 + 30 +0.0 + 11 +25512.499933 + 21 +9185.048134 + 31 +0.0 + 0 +LINE + 5 +232D + 8 +0 + 62 + 0 + 10 +25537.499933 + 20 +9228.349404 + 30 +0.0 + 11 +25549.99991 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +232E + 8 +0 + 62 + 0 + 10 +25499.999933 + 20 +9206.698769 + 30 +0.0 + 11 +25512.499933 + 21 +9228.349404 + 31 +0.0 + 0 +LINE + 5 +232F + 8 +0 + 62 + 0 + 10 +25462.499933 + 20 +9185.048134 + 30 +0.0 + 11 +25474.999933 + 21 +9206.698769 + 31 +0.0 + 0 +LINE + 5 +2330 + 8 +0 + 62 + 0 + 10 +25428.811889 + 20 +9170.0 + 30 +0.0 + 11 +25437.499933 + 21 +9185.048133 + 31 +0.0 + 0 +LINE + 5 +2331 + 8 +0 + 62 + 0 + 10 +25462.499933 + 20 +9228.349404 + 30 +0.0 + 11 +25474.999911 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2332 + 8 +0 + 62 + 0 + 10 +25424.999933 + 20 +9206.698769 + 30 +0.0 + 11 +25437.499933 + 21 +9228.349404 + 31 +0.0 + 0 +LINE + 5 +2333 + 8 +0 + 62 + 0 + 10 +25387.499933 + 20 +9185.048133 + 30 +0.0 + 11 +25399.999933 + 21 +9206.698768 + 31 +0.0 + 0 +LINE + 5 +2334 + 8 +0 + 62 + 0 + 10 +25387.499933 + 20 +9228.349404 + 30 +0.0 + 11 +25399.999911 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2335 + 8 +0 + 62 + 0 + 10 +25762.499932 + 20 +9185.048134 + 30 +0.0 + 11 +25774.999932 + 21 +9206.698769 + 31 +0.0 + 0 +LINE + 5 +2336 + 8 +0 + 62 + 0 + 10 +25799.999932 + 20 +9206.698769 + 30 +0.0 + 11 +25812.499932 + 21 +9228.349404 + 31 +0.0 + 0 +LINE + 5 +2337 + 8 +0 + 62 + 0 + 10 +25803.811887 + 20 +9170.0 + 30 +0.0 + 11 +25812.499932 + 21 +9185.048134 + 31 +0.0 + 0 +LINE + 5 +2338 + 8 +0 + 62 + 0 + 10 +25837.499932 + 20 +9228.349404 + 30 +0.0 + 11 +25849.999909 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2339 + 8 +0 + 62 + 0 + 10 +25837.499932 + 20 +9185.048134 + 30 +0.0 + 11 +25849.999932 + 21 +9206.698769 + 31 +0.0 + 0 +LINE + 5 +233A + 8 +0 + 62 + 0 + 10 +25874.999932 + 20 +9206.698769 + 30 +0.0 + 11 +25887.499932 + 21 +9228.349404 + 31 +0.0 + 0 +LINE + 5 +233B + 8 +0 + 62 + 0 + 10 +25878.811887 + 20 +9170.0 + 30 +0.0 + 11 +25887.499931 + 21 +9185.048134 + 31 +0.0 + 0 +LINE + 5 +233C + 8 +0 + 62 + 0 + 10 +25912.499931 + 20 +9228.349405 + 30 +0.0 + 11 +25924.999909 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +233D + 8 +0 + 62 + 0 + 10 +25912.499931 + 20 +9185.048134 + 30 +0.0 + 11 +25924.999931 + 21 +9206.698769 + 31 +0.0 + 0 +LINE + 5 +233E + 8 +0 + 62 + 0 + 10 +25949.999931 + 20 +9206.69877 + 30 +0.0 + 11 +25962.499931 + 21 +9228.349405 + 31 +0.0 + 0 +LINE + 5 +233F + 8 +0 + 62 + 0 + 10 +25953.811887 + 20 +9170.0 + 30 +0.0 + 11 +25962.499931 + 21 +9185.048134 + 31 +0.0 + 0 +LINE + 5 +2340 + 8 +0 + 62 + 0 + 10 +25987.499931 + 20 +9228.349405 + 30 +0.0 + 11 +25999.999908 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2341 + 8 +0 + 62 + 0 + 10 +25987.499931 + 20 +9185.048135 + 30 +0.0 + 11 +25999.999931 + 21 +9206.69877 + 31 +0.0 + 0 +LINE + 5 +2342 + 8 +0 + 62 + 0 + 10 +26024.999931 + 20 +9206.69877 + 30 +0.0 + 11 +26037.499931 + 21 +9228.349405 + 31 +0.0 + 0 +LINE + 5 +2343 + 8 +0 + 62 + 0 + 10 +26028.811886 + 20 +9170.0 + 30 +0.0 + 11 +26037.499931 + 21 +9185.048135 + 31 +0.0 + 0 +LINE + 5 +2344 + 8 +0 + 62 + 0 + 10 +26062.499931 + 20 +9228.349405 + 30 +0.0 + 11 +26074.999908 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2345 + 8 +0 + 62 + 0 + 10 +26062.499931 + 20 +9185.048135 + 30 +0.0 + 11 +26074.999931 + 21 +9206.69877 + 31 +0.0 + 0 +LINE + 5 +2346 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +10358.512677 + 30 +0.0 + 11 +26749.999931 + 21 +10375.833065 + 31 +0.0 + 0 +LINE + 5 +2347 + 8 +0 + 62 + 0 + 10 +26099.999931 + 20 +9206.69877 + 30 +0.0 + 11 +26112.499931 + 21 +9228.349405 + 31 +0.0 + 0 +LINE + 5 +2348 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +10315.211407 + 30 +0.0 + 11 +26749.999931 + 21 +10332.531795 + 31 +0.0 + 0 +LINE + 5 +2349 + 8 +0 + 62 + 0 + 10 +26774.999931 + 20 +10375.833065 + 30 +0.0 + 11 +26775.240648 + 21 +10376.25 + 31 +0.0 + 0 +LINE + 5 +234A + 8 +0 + 62 + 0 + 10 +26103.811886 + 20 +9170.0 + 30 +0.0 + 11 +26112.499931 + 21 +9185.048135 + 31 +0.0 + 0 +LINE + 5 +234B + 8 +0 + 62 + 0 + 10 +26137.499931 + 20 +9228.349405 + 30 +0.0 + 11 +26149.999908 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +234C + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +10271.910137 + 30 +0.0 + 11 +26749.999931 + 21 +10289.230525 + 31 +0.0 + 0 +LINE + 5 +234D + 8 +0 + 62 + 0 + 10 +26774.999931 + 20 +10332.531795 + 30 +0.0 + 11 +26787.499931 + 21 +10354.18243 + 31 +0.0 + 0 +LINE + 5 +234E + 8 +0 + 62 + 0 + 10 +26137.499931 + 20 +9185.048135 + 30 +0.0 + 11 +26149.999931 + 21 +9206.69877 + 31 +0.0 + 0 +LINE + 5 +234F + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +10228.608867 + 30 +0.0 + 11 +26749.999931 + 21 +10245.929254 + 31 +0.0 + 0 +LINE + 5 +2350 + 8 +0 + 62 + 0 + 10 +26774.999931 + 20 +10289.230525 + 30 +0.0 + 11 +26787.499931 + 21 +10310.88116 + 31 +0.0 + 0 +LINE + 5 +2351 + 8 +0 + 62 + 0 + 10 +26812.499931 + 20 +10354.18243 + 30 +0.0 + 11 +26820.0 + 21 +10367.172931 + 31 +0.0 + 0 +LINE + 5 +2352 + 8 +0 + 62 + 0 + 10 +26174.999931 + 20 +9206.69877 + 30 +0.0 + 11 +26187.499931 + 21 +9228.349405 + 31 +0.0 + 0 +LINE + 5 +2353 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +10185.307597 + 30 +0.0 + 11 +26749.999931 + 21 +10202.627984 + 31 +0.0 + 0 +LINE + 5 +2354 + 8 +0 + 62 + 0 + 10 +26774.999931 + 20 +10245.929254 + 30 +0.0 + 11 +26787.499931 + 21 +10267.57989 + 31 +0.0 + 0 +LINE + 5 +2355 + 8 +0 + 62 + 0 + 10 +26812.499931 + 20 +10310.88116 + 30 +0.0 + 11 +26820.0 + 21 +10323.871661 + 31 +0.0 + 0 +LINE + 5 +2356 + 8 +0 + 62 + 0 + 10 +26178.811886 + 20 +9170.0 + 30 +0.0 + 11 +26187.49993 + 21 +9185.048135 + 31 +0.0 + 0 +LINE + 5 +2357 + 8 +0 + 62 + 0 + 10 +26212.49993 + 20 +9228.349405 + 30 +0.0 + 11 +26224.999907 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2358 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +10142.006327 + 30 +0.0 + 11 +26749.99993 + 21 +10159.326714 + 31 +0.0 + 0 +LINE + 5 +2359 + 8 +0 + 62 + 0 + 10 +26774.99993 + 20 +10202.627984 + 30 +0.0 + 11 +26787.49993 + 21 +10224.278619 + 31 +0.0 + 0 +LINE + 5 +235A + 8 +0 + 62 + 0 + 10 +26812.49993 + 20 +10267.57989 + 30 +0.0 + 11 +26820.0 + 21 +10280.570391 + 31 +0.0 + 0 +LINE + 5 +235B + 8 +0 + 62 + 0 + 10 +26212.49993 + 20 +9185.048135 + 30 +0.0 + 11 +26224.99993 + 21 +9206.69877 + 31 +0.0 + 0 +LINE + 5 +235C + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +10098.705057 + 30 +0.0 + 11 +26749.99993 + 21 +10116.025444 + 31 +0.0 + 0 +LINE + 5 +235D + 8 +0 + 62 + 0 + 10 +26774.99993 + 20 +10159.326714 + 30 +0.0 + 11 +26787.49993 + 21 +10180.977349 + 31 +0.0 + 0 +LINE + 5 +235E + 8 +0 + 62 + 0 + 10 +26812.49993 + 20 +10224.278619 + 30 +0.0 + 11 +26820.0 + 21 +10237.269121 + 31 +0.0 + 0 +LINE + 5 +235F + 8 +0 + 62 + 0 + 10 +26249.99993 + 20 +9206.69877 + 30 +0.0 + 11 +26262.49993 + 21 +9228.349405 + 31 +0.0 + 0 +LINE + 5 +2360 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +10055.403787 + 30 +0.0 + 11 +26749.99993 + 21 +10072.724174 + 31 +0.0 + 0 +LINE + 5 +2361 + 8 +0 + 62 + 0 + 10 +26774.99993 + 20 +10116.025444 + 30 +0.0 + 11 +26787.49993 + 21 +10137.676079 + 31 +0.0 + 0 +LINE + 5 +2362 + 8 +0 + 62 + 0 + 10 +26812.49993 + 20 +10180.977349 + 30 +0.0 + 11 +26820.0 + 21 +10193.967851 + 31 +0.0 + 0 +LINE + 5 +2363 + 8 +0 + 62 + 0 + 10 +26253.811885 + 20 +9170.0 + 30 +0.0 + 11 +26262.49993 + 21 +9185.048135 + 31 +0.0 + 0 +LINE + 5 +2364 + 8 +0 + 62 + 0 + 10 +26287.49993 + 20 +9228.349405 + 30 +0.0 + 11 +26299.999907 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2365 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +10012.102517 + 30 +0.0 + 11 +26749.99993 + 21 +10029.422904 + 31 +0.0 + 0 +LINE + 5 +2366 + 8 +0 + 62 + 0 + 10 +26774.99993 + 20 +10072.724174 + 30 +0.0 + 11 +26787.49993 + 21 +10094.374809 + 31 +0.0 + 0 +LINE + 5 +2367 + 8 +0 + 62 + 0 + 10 +26812.49993 + 20 +10137.676079 + 30 +0.0 + 11 +26820.0 + 21 +10150.666581 + 31 +0.0 + 0 +LINE + 5 +2368 + 8 +0 + 62 + 0 + 10 +26287.49993 + 20 +9185.048135 + 30 +0.0 + 11 +26299.99993 + 21 +9206.69877 + 31 +0.0 + 0 +LINE + 5 +2369 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +9968.801247 + 30 +0.0 + 11 +26749.99993 + 21 +9986.121634 + 31 +0.0 + 0 +LINE + 5 +236A + 8 +0 + 62 + 0 + 10 +26774.99993 + 20 +10029.422904 + 30 +0.0 + 11 +26787.49993 + 21 +10051.073539 + 31 +0.0 + 0 +LINE + 5 +236B + 8 +0 + 62 + 0 + 10 +26812.49993 + 20 +10094.374809 + 30 +0.0 + 11 +26820.0 + 21 +10107.365311 + 31 +0.0 + 0 +LINE + 5 +236C + 8 +0 + 62 + 0 + 10 +26324.99993 + 20 +9206.69877 + 30 +0.0 + 11 +26337.49993 + 21 +9228.349405 + 31 +0.0 + 0 +LINE + 5 +236D + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +9925.499977 + 30 +0.0 + 11 +26749.99993 + 21 +9942.820363 + 31 +0.0 + 0 +LINE + 5 +236E + 8 +0 + 62 + 0 + 10 +26774.99993 + 20 +9986.121634 + 30 +0.0 + 11 +26787.49993 + 21 +10007.772269 + 31 +0.0 + 0 +LINE + 5 +236F + 8 +0 + 62 + 0 + 10 +26812.49993 + 20 +10051.073539 + 30 +0.0 + 11 +26820.0 + 21 +10064.064041 + 31 +0.0 + 0 +LINE + 5 +2370 + 8 +0 + 62 + 0 + 10 +26328.811885 + 20 +9170.0 + 30 +0.0 + 11 +26337.49993 + 21 +9185.048135 + 31 +0.0 + 0 +LINE + 5 +2371 + 8 +0 + 62 + 0 + 10 +26362.49993 + 20 +9228.349405 + 30 +0.0 + 11 +26374.999907 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2372 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +9882.198707 + 30 +0.0 + 11 +26749.99993 + 21 +9899.519093 + 31 +0.0 + 0 +LINE + 5 +2373 + 8 +0 + 62 + 0 + 10 +26774.99993 + 20 +9942.820363 + 30 +0.0 + 11 +26787.49993 + 21 +9964.470999 + 31 +0.0 + 0 +LINE + 5 +2374 + 8 +0 + 62 + 0 + 10 +26812.49993 + 20 +10007.772269 + 30 +0.0 + 11 +26820.0 + 21 +10020.762771 + 31 +0.0 + 0 +LINE + 5 +2375 + 8 +0 + 62 + 0 + 10 +26362.49993 + 20 +9185.048135 + 30 +0.0 + 11 +26374.99993 + 21 +9206.69877 + 31 +0.0 + 0 +LINE + 5 +2376 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +9838.897437 + 30 +0.0 + 11 +26749.99993 + 21 +9856.217823 + 31 +0.0 + 0 +LINE + 5 +2377 + 8 +0 + 62 + 0 + 10 +26774.99993 + 20 +9899.519093 + 30 +0.0 + 11 +26787.49993 + 21 +9921.169728 + 31 +0.0 + 0 +LINE + 5 +2378 + 8 +0 + 62 + 0 + 10 +26812.49993 + 20 +9964.470999 + 30 +0.0 + 11 +26820.0 + 21 +9977.461501 + 31 +0.0 + 0 +LINE + 5 +2379 + 8 +0 + 62 + 0 + 10 +26399.99993 + 20 +9206.69877 + 30 +0.0 + 11 +26412.49993 + 21 +9228.349405 + 31 +0.0 + 0 +LINE + 5 +237A + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +9795.596167 + 30 +0.0 + 11 +26749.99993 + 21 +9812.916553 + 31 +0.0 + 0 +LINE + 5 +237B + 8 +0 + 62 + 0 + 10 +26774.99993 + 20 +9856.217823 + 30 +0.0 + 11 +26787.49993 + 21 +9877.868458 + 31 +0.0 + 0 +LINE + 5 +237C + 8 +0 + 62 + 0 + 10 +26812.49993 + 20 +9921.169728 + 30 +0.0 + 11 +26820.0 + 21 +9934.160231 + 31 +0.0 + 0 +LINE + 5 +237D + 8 +0 + 62 + 0 + 10 +26403.811885 + 20 +9170.0 + 30 +0.0 + 11 +26412.49993 + 21 +9185.048135 + 31 +0.0 + 0 +LINE + 5 +237E + 8 +0 + 62 + 0 + 10 +26437.49993 + 20 +9228.349405 + 30 +0.0 + 11 +26449.999906 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +237F + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +9752.294897 + 30 +0.0 + 11 +26749.99993 + 21 +9769.615283 + 31 +0.0 + 0 +LINE + 5 +2380 + 8 +0 + 62 + 0 + 10 +26774.99993 + 20 +9812.916553 + 30 +0.0 + 11 +26787.49993 + 21 +9834.567188 + 31 +0.0 + 0 +LINE + 5 +2381 + 8 +0 + 62 + 0 + 10 +26812.49993 + 20 +9877.868458 + 30 +0.0 + 11 +26820.0 + 21 +9890.858961 + 31 +0.0 + 0 +LINE + 5 +2382 + 8 +0 + 62 + 0 + 10 +26437.49993 + 20 +9185.048135 + 30 +0.0 + 11 +26449.99993 + 21 +9206.69877 + 31 +0.0 + 0 +LINE + 5 +2383 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +9708.993627 + 30 +0.0 + 11 +26749.99993 + 21 +9726.314013 + 31 +0.0 + 0 +LINE + 5 +2384 + 8 +0 + 62 + 0 + 10 +26774.99993 + 20 +9769.615283 + 30 +0.0 + 11 +26787.49993 + 21 +9791.265918 + 31 +0.0 + 0 +LINE + 5 +2385 + 8 +0 + 62 + 0 + 10 +26812.49993 + 20 +9834.567188 + 30 +0.0 + 11 +26820.0 + 21 +9847.557691 + 31 +0.0 + 0 +LINE + 5 +2386 + 8 +0 + 62 + 0 + 10 +26474.99993 + 20 +9206.69877 + 30 +0.0 + 11 +26487.49993 + 21 +9228.349406 + 31 +0.0 + 0 +LINE + 5 +2387 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +9665.692357 + 30 +0.0 + 11 +26749.99993 + 21 +9683.012743 + 31 +0.0 + 0 +LINE + 5 +2388 + 8 +0 + 62 + 0 + 10 +26774.99993 + 20 +9726.314013 + 30 +0.0 + 11 +26787.49993 + 21 +9747.964648 + 31 +0.0 + 0 +LINE + 5 +2389 + 8 +0 + 62 + 0 + 10 +26812.49993 + 20 +9791.265918 + 30 +0.0 + 11 +26820.0 + 21 +9804.256421 + 31 +0.0 + 0 +LINE + 5 +238A + 8 +0 + 62 + 0 + 10 +26478.811884 + 20 +9170.0 + 30 +0.0 + 11 +26487.499929 + 21 +9185.048135 + 31 +0.0 + 0 +LINE + 5 +238B + 8 +0 + 62 + 0 + 10 +26512.499929 + 20 +9228.349406 + 30 +0.0 + 11 +26524.999906 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +238C + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +9622.391087 + 30 +0.0 + 11 +26749.999929 + 21 +9639.711472 + 31 +0.0 + 0 +LINE + 5 +238D + 8 +0 + 62 + 0 + 10 +26774.999929 + 20 +9683.012743 + 30 +0.0 + 11 +26787.499929 + 21 +9704.663378 + 31 +0.0 + 0 +LINE + 5 +238E + 8 +0 + 62 + 0 + 10 +26812.499929 + 20 +9747.964648 + 30 +0.0 + 11 +26820.0 + 21 +9760.955151 + 31 +0.0 + 0 +LINE + 5 +238F + 8 +0 + 62 + 0 + 10 +26512.499929 + 20 +9185.048135 + 30 +0.0 + 11 +26524.999929 + 21 +9206.698771 + 31 +0.0 + 0 +LINE + 5 +2390 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +9579.089817 + 30 +0.0 + 11 +26749.999929 + 21 +9596.410202 + 31 +0.0 + 0 +LINE + 5 +2391 + 8 +0 + 62 + 0 + 10 +26774.999929 + 20 +9639.711472 + 30 +0.0 + 11 +26787.499929 + 21 +9661.362108 + 31 +0.0 + 0 +LINE + 5 +2392 + 8 +0 + 62 + 0 + 10 +26812.499929 + 20 +9704.663378 + 30 +0.0 + 11 +26820.0 + 21 +9717.653881 + 31 +0.0 + 0 +LINE + 5 +2393 + 8 +0 + 62 + 0 + 10 +26549.999929 + 20 +9206.698771 + 30 +0.0 + 11 +26562.499929 + 21 +9228.349406 + 31 +0.0 + 0 +LINE + 5 +2394 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +9535.788547 + 30 +0.0 + 11 +26749.999929 + 21 +9553.108932 + 31 +0.0 + 0 +LINE + 5 +2395 + 8 +0 + 62 + 0 + 10 +26774.999929 + 20 +9596.410202 + 30 +0.0 + 11 +26787.499929 + 21 +9618.060837 + 31 +0.0 + 0 +LINE + 5 +2396 + 8 +0 + 62 + 0 + 10 +26812.499929 + 20 +9661.362108 + 30 +0.0 + 11 +26820.0 + 21 +9674.352611 + 31 +0.0 + 0 +LINE + 5 +2397 + 8 +0 + 62 + 0 + 10 +26553.811884 + 20 +9170.0 + 30 +0.0 + 11 +26562.499929 + 21 +9185.048136 + 31 +0.0 + 0 +LINE + 5 +2398 + 8 +0 + 62 + 0 + 10 +26587.499929 + 20 +9228.349406 + 30 +0.0 + 11 +26599.999906 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2399 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +9492.487277 + 30 +0.0 + 11 +26749.999929 + 21 +9509.807662 + 31 +0.0 + 0 +LINE + 5 +239A + 8 +0 + 62 + 0 + 10 +26774.999929 + 20 +9553.108932 + 30 +0.0 + 11 +26787.499929 + 21 +9574.759567 + 31 +0.0 + 0 +LINE + 5 +239B + 8 +0 + 62 + 0 + 10 +26812.499929 + 20 +9618.060837 + 30 +0.0 + 11 +26820.0 + 21 +9631.051341 + 31 +0.0 + 0 +LINE + 5 +239C + 8 +0 + 62 + 0 + 10 +26587.499929 + 20 +9185.048136 + 30 +0.0 + 11 +26599.999929 + 21 +9206.698771 + 31 +0.0 + 0 +LINE + 5 +239D + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +9449.186007 + 30 +0.0 + 11 +26749.999929 + 21 +9466.506392 + 31 +0.0 + 0 +LINE + 5 +239E + 8 +0 + 62 + 0 + 10 +26774.999929 + 20 +9509.807662 + 30 +0.0 + 11 +26787.499929 + 21 +9531.458297 + 31 +0.0 + 0 +LINE + 5 +239F + 8 +0 + 62 + 0 + 10 +26812.499929 + 20 +9574.759567 + 30 +0.0 + 11 +26820.0 + 21 +9587.750071 + 31 +0.0 + 0 +LINE + 5 +23A0 + 8 +0 + 62 + 0 + 10 +26624.999929 + 20 +9206.698771 + 30 +0.0 + 11 +26637.499929 + 21 +9228.349406 + 31 +0.0 + 0 +LINE + 5 +23A1 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +9405.884737 + 30 +0.0 + 11 +26749.999929 + 21 +9423.205122 + 31 +0.0 + 0 +LINE + 5 +23A2 + 8 +0 + 62 + 0 + 10 +26774.999929 + 20 +9466.506392 + 30 +0.0 + 11 +26787.499929 + 21 +9488.157027 + 31 +0.0 + 0 +LINE + 5 +23A3 + 8 +0 + 62 + 0 + 10 +26812.499929 + 20 +9531.458297 + 30 +0.0 + 11 +26820.0 + 21 +9544.448801 + 31 +0.0 + 0 +LINE + 5 +23A4 + 8 +0 + 62 + 0 + 10 +26628.811884 + 20 +9170.0 + 30 +0.0 + 11 +26637.499929 + 21 +9185.048136 + 31 +0.0 + 0 +LINE + 5 +23A5 + 8 +0 + 62 + 0 + 10 +26662.499929 + 20 +9228.349406 + 30 +0.0 + 11 +26674.999905 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +23A6 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +9362.583467 + 30 +0.0 + 11 +26749.999929 + 21 +9379.903852 + 31 +0.0 + 0 +LINE + 5 +23A7 + 8 +0 + 62 + 0 + 10 +26774.999929 + 20 +9423.205122 + 30 +0.0 + 11 +26787.499929 + 21 +9444.855757 + 31 +0.0 + 0 +LINE + 5 +23A8 + 8 +0 + 62 + 0 + 10 +26812.499929 + 20 +9488.157027 + 30 +0.0 + 11 +26820.0 + 21 +9501.147531 + 31 +0.0 + 0 +LINE + 5 +23A9 + 8 +0 + 62 + 0 + 10 +26662.499929 + 20 +9185.048136 + 30 +0.0 + 11 +26674.999929 + 21 +9206.698771 + 31 +0.0 + 0 +LINE + 5 +23AA + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +9319.282197 + 30 +0.0 + 11 +26749.999929 + 21 +9336.602581 + 31 +0.0 + 0 +LINE + 5 +23AB + 8 +0 + 62 + 0 + 10 +26774.999929 + 20 +9379.903852 + 30 +0.0 + 11 +26787.499929 + 21 +9401.554487 + 31 +0.0 + 0 +LINE + 5 +23AC + 8 +0 + 62 + 0 + 10 +26812.499929 + 20 +9444.855757 + 30 +0.0 + 11 +26820.0 + 21 +9457.846261 + 31 +0.0 + 0 +LINE + 5 +23AD + 8 +0 + 62 + 0 + 10 +26699.999929 + 20 +9206.698771 + 30 +0.0 + 11 +26712.499929 + 21 +9228.349406 + 31 +0.0 + 0 +LINE + 5 +23AE + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +9275.980927 + 30 +0.0 + 11 +26749.999929 + 21 +9293.301311 + 31 +0.0 + 0 +LINE + 5 +23AF + 8 +0 + 62 + 0 + 10 +26774.999929 + 20 +9336.602581 + 30 +0.0 + 11 +26787.499929 + 21 +9358.253217 + 31 +0.0 + 0 +LINE + 5 +23B0 + 8 +0 + 62 + 0 + 10 +26812.499929 + 20 +9401.554487 + 30 +0.0 + 11 +26820.0 + 21 +9414.544991 + 31 +0.0 + 0 +LINE + 5 +23B1 + 8 +0 + 62 + 0 + 10 +26703.811883 + 20 +9170.0 + 30 +0.0 + 11 +26712.499929 + 21 +9185.048136 + 31 +0.0 + 0 +LINE + 5 +23B2 + 8 +0 + 62 + 0 + 10 +26737.499929 + 20 +9228.349406 + 30 +0.0 + 11 +26749.999929 + 21 +9250.000041 + 31 +0.0 + 0 +LINE + 5 +23B3 + 8 +0 + 62 + 0 + 10 +26774.999929 + 20 +9293.301311 + 30 +0.0 + 11 +26787.499929 + 21 +9314.951946 + 31 +0.0 + 0 +LINE + 5 +23B4 + 8 +0 + 62 + 0 + 10 +26812.499929 + 20 +9358.253217 + 30 +0.0 + 11 +26820.0 + 21 +9371.243721 + 31 +0.0 + 0 +LINE + 5 +23B5 + 8 +0 + 62 + 0 + 10 +26737.499929 + 20 +9185.048136 + 30 +0.0 + 11 +26749.999929 + 21 +9206.698771 + 31 +0.0 + 0 +LINE + 5 +23B6 + 8 +0 + 62 + 0 + 10 +26774.999929 + 20 +9250.000041 + 30 +0.0 + 11 +26787.499929 + 21 +9271.650676 + 31 +0.0 + 0 +LINE + 5 +23B7 + 8 +0 + 62 + 0 + 10 +26812.499929 + 20 +9314.951946 + 30 +0.0 + 11 +26820.0 + 21 +9327.942451 + 31 +0.0 + 0 +LINE + 5 +23B8 + 8 +0 + 62 + 0 + 10 +26774.999929 + 20 +9206.698771 + 30 +0.0 + 11 +26787.499929 + 21 +9228.349406 + 31 +0.0 + 0 +LINE + 5 +23B9 + 8 +0 + 62 + 0 + 10 +26812.499929 + 20 +9271.650676 + 30 +0.0 + 11 +26820.0 + 21 +9284.641181 + 31 +0.0 + 0 +LINE + 5 +23BA + 8 +0 + 62 + 0 + 10 +26778.811883 + 20 +9170.0 + 30 +0.0 + 11 +26787.499928 + 21 +9185.048136 + 31 +0.0 + 0 +LINE + 5 +23BB + 8 +0 + 62 + 0 + 10 +26812.499928 + 20 +9228.349406 + 30 +0.0 + 11 +26820.0 + 21 +9241.339911 + 31 +0.0 + 0 +LINE + 5 +23BC + 8 +0 + 62 + 0 + 10 +26812.499928 + 20 +9185.048136 + 30 +0.0 + 11 +26820.0 + 21 +9198.038641 + 31 +0.0 + 0 +ENDBLK + 5 +23BD + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X52 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X52 + 1 + + 0 +LINE + 5 +23BF + 8 +0 + 62 + 0 + 10 +21912.5 + 20 +9228.349365 + 30 +0.0 + 11 +21937.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +23C0 + 8 +0 + 62 + 0 + 10 +21987.5 + 20 +9228.349365 + 30 +0.0 + 11 +22012.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +23C1 + 8 +0 + 62 + 0 + 10 +22062.5 + 20 +9228.349365 + 30 +0.0 + 11 +22087.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +23C2 + 8 +0 + 62 + 0 + 10 +22137.5 + 20 +9228.349365 + 30 +0.0 + 11 +22162.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +23C3 + 8 +0 + 62 + 0 + 10 +22212.5 + 20 +9228.349365 + 30 +0.0 + 11 +22237.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +23C4 + 8 +0 + 62 + 0 + 10 +22287.5 + 20 +9228.349365 + 30 +0.0 + 11 +22312.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +23C5 + 8 +0 + 62 + 0 + 10 +22362.5 + 20 +9228.349365 + 30 +0.0 + 11 +22387.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +23C6 + 8 +0 + 62 + 0 + 10 +22437.5 + 20 +9228.349365 + 30 +0.0 + 11 +22462.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +23C7 + 8 +0 + 62 + 0 + 10 +22512.5 + 20 +9228.349365 + 30 +0.0 + 11 +22537.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +23C8 + 8 +0 + 62 + 0 + 10 +22587.5 + 20 +9228.349365 + 30 +0.0 + 11 +22612.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +23C9 + 8 +0 + 62 + 0 + 10 +22662.5 + 20 +9228.349365 + 30 +0.0 + 11 +22687.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +23CA + 8 +0 + 62 + 0 + 10 +22737.5 + 20 +9228.349365 + 30 +0.0 + 11 +22762.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +23CB + 8 +0 + 62 + 0 + 10 +22812.5 + 20 +9228.349365 + 30 +0.0 + 11 +22837.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +23CC + 8 +0 + 62 + 0 + 10 +22887.5 + 20 +9228.349365 + 30 +0.0 + 11 +22912.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +23CD + 8 +0 + 62 + 0 + 10 +22962.5 + 20 +9228.349365 + 30 +0.0 + 11 +22987.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +23CE + 8 +0 + 62 + 0 + 10 +23037.5 + 20 +9228.349365 + 30 +0.0 + 11 +23062.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +23CF + 8 +0 + 62 + 0 + 10 +23112.5 + 20 +9228.349365 + 30 +0.0 + 11 +23137.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +23D0 + 8 +0 + 62 + 0 + 10 +23187.5 + 20 +9228.349365 + 30 +0.0 + 11 +23212.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +23D1 + 8 +0 + 62 + 0 + 10 +21875.0 + 20 +9206.69873 + 30 +0.0 + 11 +21900.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +23D2 + 8 +0 + 62 + 0 + 10 +21950.0 + 20 +9206.69873 + 30 +0.0 + 11 +21975.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +23D3 + 8 +0 + 62 + 0 + 10 +22025.0 + 20 +9206.69873 + 30 +0.0 + 11 +22050.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +23D4 + 8 +0 + 62 + 0 + 10 +22100.0 + 20 +9206.69873 + 30 +0.0 + 11 +22125.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +23D5 + 8 +0 + 62 + 0 + 10 +22175.0 + 20 +9206.69873 + 30 +0.0 + 11 +22200.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +23D6 + 8 +0 + 62 + 0 + 10 +22250.0 + 20 +9206.69873 + 30 +0.0 + 11 +22275.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +23D7 + 8 +0 + 62 + 0 + 10 +22325.0 + 20 +9206.69873 + 30 +0.0 + 11 +22350.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +23D8 + 8 +0 + 62 + 0 + 10 +22400.0 + 20 +9206.69873 + 30 +0.0 + 11 +22425.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +23D9 + 8 +0 + 62 + 0 + 10 +22475.0 + 20 +9206.69873 + 30 +0.0 + 11 +22500.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +23DA + 8 +0 + 62 + 0 + 10 +22550.0 + 20 +9206.69873 + 30 +0.0 + 11 +22575.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +23DB + 8 +0 + 62 + 0 + 10 +22625.0 + 20 +9206.69873 + 30 +0.0 + 11 +22650.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +23DC + 8 +0 + 62 + 0 + 10 +22700.0 + 20 +9206.69873 + 30 +0.0 + 11 +22725.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +23DD + 8 +0 + 62 + 0 + 10 +22775.0 + 20 +9206.69873 + 30 +0.0 + 11 +22800.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +23DE + 8 +0 + 62 + 0 + 10 +22850.0 + 20 +9206.69873 + 30 +0.0 + 11 +22875.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +23DF + 8 +0 + 62 + 0 + 10 +22925.0 + 20 +9206.69873 + 30 +0.0 + 11 +22950.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +23E0 + 8 +0 + 62 + 0 + 10 +23000.0 + 20 +9206.69873 + 30 +0.0 + 11 +23025.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +23E1 + 8 +0 + 62 + 0 + 10 +23075.0 + 20 +9206.69873 + 30 +0.0 + 11 +23100.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +23E2 + 8 +0 + 62 + 0 + 10 +23150.0 + 20 +9206.69873 + 30 +0.0 + 11 +23175.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +23E3 + 8 +0 + 62 + 0 + 10 +23225.0 + 20 +9206.69873 + 30 +0.0 + 11 +23250.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +23E4 + 8 +0 + 62 + 0 + 10 +21912.5 + 20 +9185.048095 + 30 +0.0 + 11 +21937.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +23E5 + 8 +0 + 62 + 0 + 10 +21987.5 + 20 +9185.048095 + 30 +0.0 + 11 +22012.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +23E6 + 8 +0 + 62 + 0 + 10 +22062.5 + 20 +9185.048095 + 30 +0.0 + 11 +22087.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +23E7 + 8 +0 + 62 + 0 + 10 +22137.5 + 20 +9185.048095 + 30 +0.0 + 11 +22162.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +23E8 + 8 +0 + 62 + 0 + 10 +22212.5 + 20 +9185.048095 + 30 +0.0 + 11 +22237.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +23E9 + 8 +0 + 62 + 0 + 10 +22287.5 + 20 +9185.048095 + 30 +0.0 + 11 +22312.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +23EA + 8 +0 + 62 + 0 + 10 +22362.5 + 20 +9185.048095 + 30 +0.0 + 11 +22387.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +23EB + 8 +0 + 62 + 0 + 10 +22437.5 + 20 +9185.048095 + 30 +0.0 + 11 +22462.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +23EC + 8 +0 + 62 + 0 + 10 +22512.5 + 20 +9185.048095 + 30 +0.0 + 11 +22537.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +23ED + 8 +0 + 62 + 0 + 10 +22587.5 + 20 +9185.048095 + 30 +0.0 + 11 +22612.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +23EE + 8 +0 + 62 + 0 + 10 +22662.5 + 20 +9185.048095 + 30 +0.0 + 11 +22687.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +23EF + 8 +0 + 62 + 0 + 10 +22737.5 + 20 +9185.048095 + 30 +0.0 + 11 +22762.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +23F0 + 8 +0 + 62 + 0 + 10 +22812.5 + 20 +9185.048095 + 30 +0.0 + 11 +22837.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +23F1 + 8 +0 + 62 + 0 + 10 +22887.5 + 20 +9185.048095 + 30 +0.0 + 11 +22912.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +23F2 + 8 +0 + 62 + 0 + 10 +22962.5 + 20 +9185.048095 + 30 +0.0 + 11 +22987.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +23F3 + 8 +0 + 62 + 0 + 10 +23037.5 + 20 +9185.048095 + 30 +0.0 + 11 +23062.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +23F4 + 8 +0 + 62 + 0 + 10 +23112.5 + 20 +9185.048095 + 30 +0.0 + 11 +23137.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +23F5 + 8 +0 + 62 + 0 + 10 +23187.5 + 20 +9185.048095 + 30 +0.0 + 11 +23212.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +23F6 + 8 +0 + 62 + 0 + 10 +22549.999943 + 20 +9206.698697 + 30 +0.0 + 11 +22537.499943 + 21 +9228.349332 + 31 +0.0 + 0 +LINE + 5 +23F7 + 8 +0 + 62 + 0 + 10 +22546.187945 + 20 +9170.0 + 30 +0.0 + 11 +22537.499943 + 21 +9185.048062 + 31 +0.0 + 0 +LINE + 5 +23F8 + 8 +0 + 62 + 0 + 10 +22512.499943 + 20 +9228.349332 + 30 +0.0 + 11 +22499.999943 + 21 +9249.999967 + 31 +0.0 + 0 +LINE + 5 +23F9 + 8 +0 + 62 + 0 + 10 +22512.499943 + 20 +9185.048062 + 30 +0.0 + 11 +22499.999943 + 21 +9206.698697 + 31 +0.0 + 0 +LINE + 5 +23FA + 8 +0 + 62 + 0 + 10 +22474.999943 + 20 +9249.999967 + 30 +0.0 + 11 +22474.999924 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +23FB + 8 +0 + 62 + 0 + 10 +22474.999943 + 20 +9206.698697 + 30 +0.0 + 11 +22462.499943 + 21 +9228.349332 + 31 +0.0 + 0 +LINE + 5 +23FC + 8 +0 + 62 + 0 + 10 +22471.187945 + 20 +9170.0 + 30 +0.0 + 11 +22462.499943 + 21 +9185.048062 + 31 +0.0 + 0 +LINE + 5 +23FD + 8 +0 + 62 + 0 + 10 +22437.499943 + 20 +9228.349332 + 30 +0.0 + 11 +22424.999943 + 21 +9249.999967 + 31 +0.0 + 0 +LINE + 5 +23FE + 8 +0 + 62 + 0 + 10 +22437.499943 + 20 +9185.048062 + 30 +0.0 + 11 +22424.999943 + 21 +9206.698697 + 31 +0.0 + 0 +LINE + 5 +23FF + 8 +0 + 62 + 0 + 10 +22399.999943 + 20 +9249.999967 + 30 +0.0 + 11 +22399.999924 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2400 + 8 +0 + 62 + 0 + 10 +22399.999943 + 20 +9206.698697 + 30 +0.0 + 11 +22387.499943 + 21 +9228.349332 + 31 +0.0 + 0 +LINE + 5 +2401 + 8 +0 + 62 + 0 + 10 +22396.187946 + 20 +9170.0 + 30 +0.0 + 11 +22387.499943 + 21 +9185.048062 + 31 +0.0 + 0 +LINE + 5 +2402 + 8 +0 + 62 + 0 + 10 +22362.499943 + 20 +9228.349332 + 30 +0.0 + 11 +22349.999943 + 21 +9249.999967 + 31 +0.0 + 0 +LINE + 5 +2403 + 8 +0 + 62 + 0 + 10 +22362.499943 + 20 +9185.048062 + 30 +0.0 + 11 +22349.999943 + 21 +9206.698697 + 31 +0.0 + 0 +LINE + 5 +2404 + 8 +0 + 62 + 0 + 10 +22324.999943 + 20 +9249.999967 + 30 +0.0 + 11 +22324.999924 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2405 + 8 +0 + 62 + 0 + 10 +22324.999943 + 20 +9206.698697 + 30 +0.0 + 11 +22312.499943 + 21 +9228.349332 + 31 +0.0 + 0 +LINE + 5 +2406 + 8 +0 + 62 + 0 + 10 +22321.187946 + 20 +9170.0 + 30 +0.0 + 11 +22312.499943 + 21 +9185.048062 + 31 +0.0 + 0 +LINE + 5 +2407 + 8 +0 + 62 + 0 + 10 +22287.499943 + 20 +9228.349332 + 30 +0.0 + 11 +22274.999943 + 21 +9249.999967 + 31 +0.0 + 0 +LINE + 5 +2408 + 8 +0 + 62 + 0 + 10 +22287.499943 + 20 +9185.048062 + 30 +0.0 + 11 +22274.999943 + 21 +9206.698697 + 31 +0.0 + 0 +LINE + 5 +2409 + 8 +0 + 62 + 0 + 10 +22249.999943 + 20 +9249.999967 + 30 +0.0 + 11 +22249.999925 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +240A + 8 +0 + 62 + 0 + 10 +22249.999944 + 20 +9206.698697 + 30 +0.0 + 11 +22237.499944 + 21 +9228.349332 + 31 +0.0 + 0 +LINE + 5 +240B + 8 +0 + 62 + 0 + 10 +22246.187946 + 20 +9170.0 + 30 +0.0 + 11 +22237.499944 + 21 +9185.048062 + 31 +0.0 + 0 +LINE + 5 +240C + 8 +0 + 62 + 0 + 10 +22212.499944 + 20 +9228.349332 + 30 +0.0 + 11 +22199.999944 + 21 +9249.999967 + 31 +0.0 + 0 +LINE + 5 +240D + 8 +0 + 62 + 0 + 10 +22212.499944 + 20 +9185.048062 + 30 +0.0 + 11 +22199.999944 + 21 +9206.698697 + 31 +0.0 + 0 +LINE + 5 +240E + 8 +0 + 62 + 0 + 10 +22174.999944 + 20 +9249.999968 + 30 +0.0 + 11 +22174.999925 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +240F + 8 +0 + 62 + 0 + 10 +22174.999944 + 20 +9206.698697 + 30 +0.0 + 11 +22162.499944 + 21 +9228.349332 + 31 +0.0 + 0 +LINE + 5 +2410 + 8 +0 + 62 + 0 + 10 +22171.187947 + 20 +9170.0 + 30 +0.0 + 11 +22162.499944 + 21 +9185.048062 + 31 +0.0 + 0 +LINE + 5 +2411 + 8 +0 + 62 + 0 + 10 +22137.499944 + 20 +9228.349333 + 30 +0.0 + 11 +22124.999944 + 21 +9249.999968 + 31 +0.0 + 0 +LINE + 5 +2412 + 8 +0 + 62 + 0 + 10 +22137.499944 + 20 +9185.048062 + 30 +0.0 + 11 +22124.999944 + 21 +9206.698697 + 31 +0.0 + 0 +LINE + 5 +2413 + 8 +0 + 62 + 0 + 10 +22099.999944 + 20 +9249.999968 + 30 +0.0 + 11 +22099.999925 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2414 + 8 +0 + 62 + 0 + 10 +22099.999944 + 20 +9206.698698 + 30 +0.0 + 11 +22087.499944 + 21 +9228.349333 + 31 +0.0 + 0 +LINE + 5 +2415 + 8 +0 + 62 + 0 + 10 +22096.187947 + 20 +9170.0 + 30 +0.0 + 11 +22087.499944 + 21 +9185.048062 + 31 +0.0 + 0 +LINE + 5 +2416 + 8 +0 + 62 + 0 + 10 +22062.499944 + 20 +9228.349333 + 30 +0.0 + 11 +22049.999944 + 21 +9249.999968 + 31 +0.0 + 0 +LINE + 5 +2417 + 8 +0 + 62 + 0 + 10 +22062.499944 + 20 +9185.048063 + 30 +0.0 + 11 +22049.999944 + 21 +9206.698698 + 31 +0.0 + 0 +LINE + 5 +2418 + 8 +0 + 62 + 0 + 10 +22024.999944 + 20 +9249.999968 + 30 +0.0 + 11 +22024.999926 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2419 + 8 +0 + 62 + 0 + 10 +22024.999944 + 20 +9206.698698 + 30 +0.0 + 11 +22012.499944 + 21 +9228.349333 + 31 +0.0 + 0 +LINE + 5 +241A + 8 +0 + 62 + 0 + 10 +22021.187947 + 20 +9170.0 + 30 +0.0 + 11 +22012.499944 + 21 +9185.048063 + 31 +0.0 + 0 +LINE + 5 +241B + 8 +0 + 62 + 0 + 10 +21987.499944 + 20 +9228.349333 + 30 +0.0 + 11 +21974.999944 + 21 +9249.999968 + 31 +0.0 + 0 +LINE + 5 +241C + 8 +0 + 62 + 0 + 10 +21987.499944 + 20 +9185.048063 + 30 +0.0 + 11 +21974.999944 + 21 +9206.698698 + 31 +0.0 + 0 +LINE + 5 +241D + 8 +0 + 62 + 0 + 10 +21949.999944 + 20 +9249.999968 + 30 +0.0 + 11 +21949.999926 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +241E + 8 +0 + 62 + 0 + 10 +21949.999945 + 20 +9206.698698 + 30 +0.0 + 11 +21937.499945 + 21 +9228.349333 + 31 +0.0 + 0 +LINE + 5 +241F + 8 +0 + 62 + 0 + 10 +21946.187948 + 20 +9170.0 + 30 +0.0 + 11 +21937.499945 + 21 +9185.048063 + 31 +0.0 + 0 +LINE + 5 +2420 + 8 +0 + 62 + 0 + 10 +21912.499945 + 20 +9228.349333 + 30 +0.0 + 11 +21899.999945 + 21 +9249.999968 + 31 +0.0 + 0 +LINE + 5 +2421 + 8 +0 + 62 + 0 + 10 +21912.499945 + 20 +9185.048063 + 30 +0.0 + 11 +21899.999945 + 21 +9206.698698 + 31 +0.0 + 0 +LINE + 5 +2422 + 8 +0 + 62 + 0 + 10 +21874.999945 + 20 +9249.999968 + 30 +0.0 + 11 +21874.999926 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2423 + 8 +0 + 62 + 0 + 10 +21874.999945 + 20 +9206.698698 + 30 +0.0 + 11 +21863.75 + 21 +9226.184174 + 31 +0.0 + 0 +LINE + 5 +2424 + 8 +0 + 62 + 0 + 10 +21871.187948 + 20 +9170.0 + 30 +0.0 + 11 +21863.75 + 21 +9182.882904 + 31 +0.0 + 0 +LINE + 5 +2425 + 8 +0 + 62 + 0 + 10 +22587.499942 + 20 +9185.048062 + 30 +0.0 + 11 +22574.999942 + 21 +9206.698697 + 31 +0.0 + 0 +LINE + 5 +2426 + 8 +0 + 62 + 0 + 10 +22549.999942 + 20 +9249.999967 + 30 +0.0 + 11 +22549.999923 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2427 + 8 +0 + 62 + 0 + 10 +22621.187945 + 20 +9170.0 + 30 +0.0 + 11 +22612.499942 + 21 +9185.048061 + 31 +0.0 + 0 +LINE + 5 +2428 + 8 +0 + 62 + 0 + 10 +22587.499942 + 20 +9228.349332 + 30 +0.0 + 11 +22574.999942 + 21 +9249.999967 + 31 +0.0 + 0 +LINE + 5 +2429 + 8 +0 + 62 + 0 + 10 +22624.999942 + 20 +9206.698697 + 30 +0.0 + 11 +22612.499942 + 21 +9228.349332 + 31 +0.0 + 0 +LINE + 5 +242A + 8 +0 + 62 + 0 + 10 +22662.499942 + 20 +9185.048061 + 30 +0.0 + 11 +22649.999942 + 21 +9206.698696 + 31 +0.0 + 0 +LINE + 5 +242B + 8 +0 + 62 + 0 + 10 +22624.999942 + 20 +9249.999967 + 30 +0.0 + 11 +22624.999923 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +242C + 8 +0 + 62 + 0 + 10 +22696.187944 + 20 +9170.0 + 30 +0.0 + 11 +22687.499942 + 21 +9185.048061 + 31 +0.0 + 0 +LINE + 5 +242D + 8 +0 + 62 + 0 + 10 +22662.499942 + 20 +9228.349332 + 30 +0.0 + 11 +22649.999942 + 21 +9249.999967 + 31 +0.0 + 0 +LINE + 5 +242E + 8 +0 + 62 + 0 + 10 +22699.999942 + 20 +9206.698696 + 30 +0.0 + 11 +22687.499942 + 21 +9228.349331 + 31 +0.0 + 0 +LINE + 5 +242F + 8 +0 + 62 + 0 + 10 +22737.499942 + 20 +9185.048061 + 30 +0.0 + 11 +22724.999942 + 21 +9206.698696 + 31 +0.0 + 0 +LINE + 5 +2430 + 8 +0 + 62 + 0 + 10 +22699.999942 + 20 +9249.999967 + 30 +0.0 + 11 +22699.999923 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2431 + 8 +0 + 62 + 0 + 10 +22771.187944 + 20 +9170.0 + 30 +0.0 + 11 +22762.499942 + 21 +9185.048061 + 31 +0.0 + 0 +LINE + 5 +2432 + 8 +0 + 62 + 0 + 10 +22737.499942 + 20 +9228.349331 + 30 +0.0 + 11 +22724.999942 + 21 +9249.999966 + 31 +0.0 + 0 +LINE + 5 +2433 + 8 +0 + 62 + 0 + 10 +22774.999942 + 20 +9206.698696 + 30 +0.0 + 11 +22762.499942 + 21 +9228.349331 + 31 +0.0 + 0 +LINE + 5 +2434 + 8 +0 + 62 + 0 + 10 +22812.499942 + 20 +9185.048061 + 30 +0.0 + 11 +22799.999942 + 21 +9206.698696 + 31 +0.0 + 0 +LINE + 5 +2435 + 8 +0 + 62 + 0 + 10 +22774.999942 + 20 +9249.999966 + 30 +0.0 + 11 +22774.999922 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2436 + 8 +0 + 62 + 0 + 10 +22846.187944 + 20 +9170.0 + 30 +0.0 + 11 +22837.499942 + 21 +9185.048061 + 31 +0.0 + 0 +LINE + 5 +2437 + 8 +0 + 62 + 0 + 10 +22812.499942 + 20 +9228.349331 + 30 +0.0 + 11 +22799.999942 + 21 +9249.999966 + 31 +0.0 + 0 +LINE + 5 +2438 + 8 +0 + 62 + 0 + 10 +22849.999942 + 20 +9206.698696 + 30 +0.0 + 11 +22837.499942 + 21 +9228.349331 + 31 +0.0 + 0 +LINE + 5 +2439 + 8 +0 + 62 + 0 + 10 +22887.499941 + 20 +9185.048061 + 30 +0.0 + 11 +22874.999941 + 21 +9206.698696 + 31 +0.0 + 0 +LINE + 5 +243A + 8 +0 + 62 + 0 + 10 +22849.999941 + 20 +9249.999966 + 30 +0.0 + 11 +22849.999922 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +243B + 8 +0 + 62 + 0 + 10 +22921.187943 + 20 +9170.0 + 30 +0.0 + 11 +22912.499941 + 21 +9185.048061 + 31 +0.0 + 0 +LINE + 5 +243C + 8 +0 + 62 + 0 + 10 +22887.499941 + 20 +9228.349331 + 30 +0.0 + 11 +22874.999941 + 21 +9249.999966 + 31 +0.0 + 0 +LINE + 5 +243D + 8 +0 + 62 + 0 + 10 +22924.999941 + 20 +9206.698696 + 30 +0.0 + 11 +22912.499941 + 21 +9228.349331 + 31 +0.0 + 0 +LINE + 5 +243E + 8 +0 + 62 + 0 + 10 +22962.499941 + 20 +9185.048061 + 30 +0.0 + 11 +22949.999941 + 21 +9206.698696 + 31 +0.0 + 0 +LINE + 5 +243F + 8 +0 + 62 + 0 + 10 +22924.999941 + 20 +9249.999966 + 30 +0.0 + 11 +22924.999922 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2440 + 8 +0 + 62 + 0 + 10 +22996.187943 + 20 +9170.0 + 30 +0.0 + 11 +22987.499941 + 21 +9185.048061 + 31 +0.0 + 0 +LINE + 5 +2441 + 8 +0 + 62 + 0 + 10 +22962.499941 + 20 +9228.349331 + 30 +0.0 + 11 +22949.999941 + 21 +9249.999966 + 31 +0.0 + 0 +LINE + 5 +2442 + 8 +0 + 62 + 0 + 10 +22999.999941 + 20 +9206.698696 + 30 +0.0 + 11 +22987.499941 + 21 +9228.349331 + 31 +0.0 + 0 +LINE + 5 +2443 + 8 +0 + 62 + 0 + 10 +23037.499941 + 20 +9185.048061 + 30 +0.0 + 11 +23024.999941 + 21 +9206.698696 + 31 +0.0 + 0 +LINE + 5 +2444 + 8 +0 + 62 + 0 + 10 +22999.999941 + 20 +9249.999966 + 30 +0.0 + 11 +22999.999921 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2445 + 8 +0 + 62 + 0 + 10 +23071.187943 + 20 +9170.0 + 30 +0.0 + 11 +23062.499941 + 21 +9185.048061 + 31 +0.0 + 0 +LINE + 5 +2446 + 8 +0 + 62 + 0 + 10 +23037.499941 + 20 +9228.349331 + 30 +0.0 + 11 +23024.999941 + 21 +9249.999966 + 31 +0.0 + 0 +LINE + 5 +2447 + 8 +0 + 62 + 0 + 10 +23074.999941 + 20 +9206.698696 + 30 +0.0 + 11 +23062.499941 + 21 +9228.349331 + 31 +0.0 + 0 +LINE + 5 +2448 + 8 +0 + 62 + 0 + 10 +23112.499941 + 20 +9185.048061 + 30 +0.0 + 11 +23099.999941 + 21 +9206.698696 + 31 +0.0 + 0 +LINE + 5 +2449 + 8 +0 + 62 + 0 + 10 +23074.999941 + 20 +9249.999966 + 30 +0.0 + 11 +23074.999921 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +244A + 8 +0 + 62 + 0 + 10 +23146.187942 + 20 +9170.0 + 30 +0.0 + 11 +23137.499941 + 21 +9185.04806 + 31 +0.0 + 0 +LINE + 5 +244B + 8 +0 + 62 + 0 + 10 +23112.499941 + 20 +9228.349331 + 30 +0.0 + 11 +23099.999941 + 21 +9249.999966 + 31 +0.0 + 0 +LINE + 5 +244C + 8 +0 + 62 + 0 + 10 +23149.999941 + 20 +9206.698696 + 30 +0.0 + 11 +23137.499941 + 21 +9228.349331 + 31 +0.0 + 0 +LINE + 5 +244D + 8 +0 + 62 + 0 + 10 +23187.499941 + 20 +9185.04806 + 30 +0.0 + 11 +23174.999941 + 21 +9206.698695 + 31 +0.0 + 0 +LINE + 5 +244E + 8 +0 + 62 + 0 + 10 +23149.999941 + 20 +9249.999966 + 30 +0.0 + 11 +23149.999921 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +244F + 8 +0 + 62 + 0 + 10 +23221.187942 + 20 +9170.0 + 30 +0.0 + 11 +23212.49994 + 21 +9185.04806 + 31 +0.0 + 0 +LINE + 5 +2450 + 8 +0 + 62 + 0 + 10 +23187.49994 + 20 +9228.349331 + 30 +0.0 + 11 +23174.99994 + 21 +9249.999966 + 31 +0.0 + 0 +LINE + 5 +2451 + 8 +0 + 62 + 0 + 10 +23224.99994 + 20 +9206.698695 + 30 +0.0 + 11 +23212.49994 + 21 +9228.34933 + 31 +0.0 + 0 +LINE + 5 +2452 + 8 +0 + 62 + 0 + 10 +23251.25 + 20 +9204.533528 + 30 +0.0 + 11 +23249.99994 + 21 +9206.698695 + 31 +0.0 + 0 +LINE + 5 +2453 + 8 +0 + 62 + 0 + 10 +23224.99994 + 20 +9249.999966 + 30 +0.0 + 11 +23224.99992 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2454 + 8 +0 + 62 + 0 + 10 +23251.25 + 20 +9247.834798 + 30 +0.0 + 11 +23249.99994 + 21 +9249.999965 + 31 +0.0 + 0 +LINE + 5 +2455 + 8 +0 + 62 + 0 + 10 +22537.499942 + 20 +9185.048128 + 30 +0.0 + 11 +22549.999942 + 21 +9206.698763 + 31 +0.0 + 0 +LINE + 5 +2456 + 8 +0 + 62 + 0 + 10 +22503.811902 + 20 +9170.0 + 30 +0.0 + 11 +22512.499942 + 21 +9185.048128 + 31 +0.0 + 0 +LINE + 5 +2457 + 8 +0 + 62 + 0 + 10 +22537.499942 + 20 +9228.349398 + 30 +0.0 + 11 +22549.999923 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2458 + 8 +0 + 62 + 0 + 10 +22499.999943 + 20 +9206.698763 + 30 +0.0 + 11 +22512.499943 + 21 +9228.349398 + 31 +0.0 + 0 +LINE + 5 +2459 + 8 +0 + 62 + 0 + 10 +22462.499943 + 20 +9185.048128 + 30 +0.0 + 11 +22474.999943 + 21 +9206.698763 + 31 +0.0 + 0 +LINE + 5 +245A + 8 +0 + 62 + 0 + 10 +22428.811902 + 20 +9170.0 + 30 +0.0 + 11 +22437.499943 + 21 +9185.048128 + 31 +0.0 + 0 +LINE + 5 +245B + 8 +0 + 62 + 0 + 10 +22462.499943 + 20 +9228.349398 + 30 +0.0 + 11 +22474.999924 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +245C + 8 +0 + 62 + 0 + 10 +22424.999943 + 20 +9206.698763 + 30 +0.0 + 11 +22437.499943 + 21 +9228.349398 + 31 +0.0 + 0 +LINE + 5 +245D + 8 +0 + 62 + 0 + 10 +22387.499943 + 20 +9185.048128 + 30 +0.0 + 11 +22399.999943 + 21 +9206.698763 + 31 +0.0 + 0 +LINE + 5 +245E + 8 +0 + 62 + 0 + 10 +22353.811902 + 20 +9170.0 + 30 +0.0 + 11 +22362.499943 + 21 +9185.048128 + 31 +0.0 + 0 +LINE + 5 +245F + 8 +0 + 62 + 0 + 10 +22387.499943 + 20 +9228.349398 + 30 +0.0 + 11 +22399.999924 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2460 + 8 +0 + 62 + 0 + 10 +22349.999943 + 20 +9206.698763 + 30 +0.0 + 11 +22362.499943 + 21 +9228.349398 + 31 +0.0 + 0 +LINE + 5 +2461 + 8 +0 + 62 + 0 + 10 +22312.499943 + 20 +9185.048128 + 30 +0.0 + 11 +22324.999943 + 21 +9206.698763 + 31 +0.0 + 0 +LINE + 5 +2462 + 8 +0 + 62 + 0 + 10 +22278.811903 + 20 +9170.0 + 30 +0.0 + 11 +22287.499943 + 21 +9185.048127 + 31 +0.0 + 0 +LINE + 5 +2463 + 8 +0 + 62 + 0 + 10 +22312.499943 + 20 +9228.349398 + 30 +0.0 + 11 +22324.999924 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2464 + 8 +0 + 62 + 0 + 10 +22274.999943 + 20 +9206.698763 + 30 +0.0 + 11 +22287.499943 + 21 +9228.349398 + 31 +0.0 + 0 +LINE + 5 +2465 + 8 +0 + 62 + 0 + 10 +22237.499943 + 20 +9185.048127 + 30 +0.0 + 11 +22249.999943 + 21 +9206.698762 + 31 +0.0 + 0 +LINE + 5 +2466 + 8 +0 + 62 + 0 + 10 +22203.811903 + 20 +9170.0 + 30 +0.0 + 11 +22212.499943 + 21 +9185.048127 + 31 +0.0 + 0 +LINE + 5 +2467 + 8 +0 + 62 + 0 + 10 +22237.499943 + 20 +9228.349398 + 30 +0.0 + 11 +22249.999925 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2468 + 8 +0 + 62 + 0 + 10 +22199.999944 + 20 +9206.698762 + 30 +0.0 + 11 +22212.499944 + 21 +9228.349397 + 31 +0.0 + 0 +LINE + 5 +2469 + 8 +0 + 62 + 0 + 10 +22162.499944 + 20 +9185.048127 + 30 +0.0 + 11 +22174.999944 + 21 +9206.698762 + 31 +0.0 + 0 +LINE + 5 +246A + 8 +0 + 62 + 0 + 10 +22128.811903 + 20 +9170.0 + 30 +0.0 + 11 +22137.499944 + 21 +9185.048127 + 31 +0.0 + 0 +LINE + 5 +246B + 8 +0 + 62 + 0 + 10 +22162.499944 + 20 +9228.349397 + 30 +0.0 + 11 +22174.999925 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +246C + 8 +0 + 62 + 0 + 10 +22124.999944 + 20 +9206.698762 + 30 +0.0 + 11 +22137.499944 + 21 +9228.349397 + 31 +0.0 + 0 +LINE + 5 +246D + 8 +0 + 62 + 0 + 10 +22087.499944 + 20 +9185.048127 + 30 +0.0 + 11 +22099.999944 + 21 +9206.698762 + 31 +0.0 + 0 +LINE + 5 +246E + 8 +0 + 62 + 0 + 10 +22053.811904 + 20 +9170.0 + 30 +0.0 + 11 +22062.499944 + 21 +9185.048127 + 31 +0.0 + 0 +LINE + 5 +246F + 8 +0 + 62 + 0 + 10 +22087.499944 + 20 +9228.349397 + 30 +0.0 + 11 +22099.999925 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2470 + 8 +0 + 62 + 0 + 10 +22049.999944 + 20 +9206.698762 + 30 +0.0 + 11 +22062.499944 + 21 +9228.349397 + 31 +0.0 + 0 +LINE + 5 +2471 + 8 +0 + 62 + 0 + 10 +22012.499944 + 20 +9185.048127 + 30 +0.0 + 11 +22024.999944 + 21 +9206.698762 + 31 +0.0 + 0 +LINE + 5 +2472 + 8 +0 + 62 + 0 + 10 +21978.811904 + 20 +9170.0 + 30 +0.0 + 11 +21987.499944 + 21 +9185.048127 + 31 +0.0 + 0 +LINE + 5 +2473 + 8 +0 + 62 + 0 + 10 +22012.499944 + 20 +9228.349397 + 30 +0.0 + 11 +22024.999926 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2474 + 8 +0 + 62 + 0 + 10 +21974.999944 + 20 +9206.698762 + 30 +0.0 + 11 +21987.499944 + 21 +9228.349397 + 31 +0.0 + 0 +LINE + 5 +2475 + 8 +0 + 62 + 0 + 10 +21937.499944 + 20 +9185.048127 + 30 +0.0 + 11 +21949.999944 + 21 +9206.698762 + 31 +0.0 + 0 +LINE + 5 +2476 + 8 +0 + 62 + 0 + 10 +21903.811904 + 20 +9170.0 + 30 +0.0 + 11 +21912.499944 + 21 +9185.048127 + 31 +0.0 + 0 +LINE + 5 +2477 + 8 +0 + 62 + 0 + 10 +21937.499944 + 20 +9228.349397 + 30 +0.0 + 11 +21949.999926 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2478 + 8 +0 + 62 + 0 + 10 +21899.999945 + 20 +9206.698762 + 30 +0.0 + 11 +21912.499945 + 21 +9228.349397 + 31 +0.0 + 0 +LINE + 5 +2479 + 8 +0 + 62 + 0 + 10 +21863.75 + 20 +9187.213286 + 30 +0.0 + 11 +21874.999945 + 21 +9206.698762 + 31 +0.0 + 0 +LINE + 5 +247A + 8 +0 + 62 + 0 + 10 +21863.75 + 20 +9230.514556 + 30 +0.0 + 11 +21874.999926 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +247B + 8 +0 + 62 + 0 + 10 +22574.999942 + 20 +9206.698763 + 30 +0.0 + 11 +22587.499942 + 21 +9228.349398 + 31 +0.0 + 0 +LINE + 5 +247C + 8 +0 + 62 + 0 + 10 +22578.811901 + 20 +9170.0 + 30 +0.0 + 11 +22587.499942 + 21 +9185.048128 + 31 +0.0 + 0 +LINE + 5 +247D + 8 +0 + 62 + 0 + 10 +22612.499942 + 20 +9228.349398 + 30 +0.0 + 11 +22624.999923 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +247E + 8 +0 + 62 + 0 + 10 +22612.499942 + 20 +9185.048128 + 30 +0.0 + 11 +22624.999942 + 21 +9206.698763 + 31 +0.0 + 0 +LINE + 5 +247F + 8 +0 + 62 + 0 + 10 +22649.999942 + 20 +9206.698763 + 30 +0.0 + 11 +22662.499942 + 21 +9228.349398 + 31 +0.0 + 0 +LINE + 5 +2480 + 8 +0 + 62 + 0 + 10 +22653.811901 + 20 +9170.0 + 30 +0.0 + 11 +22662.499942 + 21 +9185.048128 + 31 +0.0 + 0 +LINE + 5 +2481 + 8 +0 + 62 + 0 + 10 +22687.499942 + 20 +9228.349398 + 30 +0.0 + 11 +22699.999923 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2482 + 8 +0 + 62 + 0 + 10 +22687.499942 + 20 +9185.048128 + 30 +0.0 + 11 +22699.999942 + 21 +9206.698763 + 31 +0.0 + 0 +LINE + 5 +2483 + 8 +0 + 62 + 0 + 10 +22724.999942 + 20 +9206.698763 + 30 +0.0 + 11 +22737.499942 + 21 +9228.349398 + 31 +0.0 + 0 +LINE + 5 +2484 + 8 +0 + 62 + 0 + 10 +22728.811901 + 20 +9170.0 + 30 +0.0 + 11 +22737.499942 + 21 +9185.048128 + 31 +0.0 + 0 +LINE + 5 +2485 + 8 +0 + 62 + 0 + 10 +22762.499942 + 20 +9228.349399 + 30 +0.0 + 11 +22774.999922 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2486 + 8 +0 + 62 + 0 + 10 +22762.499942 + 20 +9185.048128 + 30 +0.0 + 11 +22774.999942 + 21 +9206.698763 + 31 +0.0 + 0 +LINE + 5 +2487 + 8 +0 + 62 + 0 + 10 +22799.999942 + 20 +9206.698764 + 30 +0.0 + 11 +22812.499942 + 21 +9228.349399 + 31 +0.0 + 0 +LINE + 5 +2488 + 8 +0 + 62 + 0 + 10 +22803.8119 + 20 +9170.0 + 30 +0.0 + 11 +22812.499941 + 21 +9185.048128 + 31 +0.0 + 0 +LINE + 5 +2489 + 8 +0 + 62 + 0 + 10 +22837.499941 + 20 +9228.349399 + 30 +0.0 + 11 +22849.999922 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +248A + 8 +0 + 62 + 0 + 10 +22837.499941 + 20 +9185.048129 + 30 +0.0 + 11 +22849.999941 + 21 +9206.698764 + 31 +0.0 + 0 +LINE + 5 +248B + 8 +0 + 62 + 0 + 10 +22874.999941 + 20 +9206.698764 + 30 +0.0 + 11 +22887.499941 + 21 +9228.349399 + 31 +0.0 + 0 +LINE + 5 +248C + 8 +0 + 62 + 0 + 10 +22878.8119 + 20 +9170.0 + 30 +0.0 + 11 +22887.499941 + 21 +9185.048129 + 31 +0.0 + 0 +LINE + 5 +248D + 8 +0 + 62 + 0 + 10 +22912.499941 + 20 +9228.349399 + 30 +0.0 + 11 +22924.999922 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +248E + 8 +0 + 62 + 0 + 10 +22912.499941 + 20 +9185.048129 + 30 +0.0 + 11 +22924.999941 + 21 +9206.698764 + 31 +0.0 + 0 +LINE + 5 +248F + 8 +0 + 62 + 0 + 10 +22949.999941 + 20 +9206.698764 + 30 +0.0 + 11 +22962.499941 + 21 +9228.349399 + 31 +0.0 + 0 +LINE + 5 +2490 + 8 +0 + 62 + 0 + 10 +22953.8119 + 20 +9170.0 + 30 +0.0 + 11 +22962.499941 + 21 +9185.048129 + 31 +0.0 + 0 +LINE + 5 +2491 + 8 +0 + 62 + 0 + 10 +22987.499941 + 20 +9228.349399 + 30 +0.0 + 11 +22999.999921 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2492 + 8 +0 + 62 + 0 + 10 +22987.499941 + 20 +9185.048129 + 30 +0.0 + 11 +22999.999941 + 21 +9206.698764 + 31 +0.0 + 0 +LINE + 5 +2493 + 8 +0 + 62 + 0 + 10 +23024.999941 + 20 +9206.698764 + 30 +0.0 + 11 +23037.499941 + 21 +9228.349399 + 31 +0.0 + 0 +LINE + 5 +2494 + 8 +0 + 62 + 0 + 10 +23028.811899 + 20 +9170.0 + 30 +0.0 + 11 +23037.499941 + 21 +9185.048129 + 31 +0.0 + 0 +LINE + 5 +2495 + 8 +0 + 62 + 0 + 10 +23062.499941 + 20 +9228.349399 + 30 +0.0 + 11 +23074.999921 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2496 + 8 +0 + 62 + 0 + 10 +23062.499941 + 20 +9185.048129 + 30 +0.0 + 11 +23074.999941 + 21 +9206.698764 + 31 +0.0 + 0 +LINE + 5 +2497 + 8 +0 + 62 + 0 + 10 +23099.999941 + 20 +9206.698764 + 30 +0.0 + 11 +23112.499941 + 21 +9228.349399 + 31 +0.0 + 0 +LINE + 5 +2498 + 8 +0 + 62 + 0 + 10 +23103.811899 + 20 +9170.0 + 30 +0.0 + 11 +23112.499941 + 21 +9185.048129 + 31 +0.0 + 0 +LINE + 5 +2499 + 8 +0 + 62 + 0 + 10 +23137.499941 + 20 +9228.349399 + 30 +0.0 + 11 +23149.999921 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +249A + 8 +0 + 62 + 0 + 10 +23137.49994 + 20 +9185.048129 + 30 +0.0 + 11 +23149.99994 + 21 +9206.698764 + 31 +0.0 + 0 +LINE + 5 +249B + 8 +0 + 62 + 0 + 10 +23174.99994 + 20 +9206.698764 + 30 +0.0 + 11 +23187.49994 + 21 +9228.349399 + 31 +0.0 + 0 +LINE + 5 +249C + 8 +0 + 62 + 0 + 10 +23178.811899 + 20 +9170.0 + 30 +0.0 + 11 +23187.49994 + 21 +9185.048129 + 31 +0.0 + 0 +LINE + 5 +249D + 8 +0 + 62 + 0 + 10 +23212.49994 + 20 +9228.349399 + 30 +0.0 + 11 +23224.99992 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +249E + 8 +0 + 62 + 0 + 10 +23212.49994 + 20 +9185.048129 + 30 +0.0 + 11 +23224.99994 + 21 +9206.698764 + 31 +0.0 + 0 +LINE + 5 +249F + 8 +0 + 62 + 0 + 10 +23249.99994 + 20 +9206.698764 + 30 +0.0 + 11 +23251.25 + 21 +9208.863932 + 31 +0.0 + 0 +ENDBLK + 5 +24A0 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X53 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X53 + 1 + + 0 +LINE + 5 +24A2 + 8 +0 + 62 + 0 + 10 +20412.5 + 20 +9228.349365 + 30 +0.0 + 11 +20437.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +24A3 + 8 +0 + 62 + 0 + 10 +20487.5 + 20 +9228.349365 + 30 +0.0 + 11 +20512.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +24A4 + 8 +0 + 62 + 0 + 10 +20562.5 + 20 +9228.349365 + 30 +0.0 + 11 +20587.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +24A5 + 8 +0 + 62 + 0 + 10 +20637.5 + 20 +9228.349365 + 30 +0.0 + 11 +20662.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +24A6 + 8 +0 + 62 + 0 + 10 +20712.5 + 20 +9228.349365 + 30 +0.0 + 11 +20737.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +24A7 + 8 +0 + 62 + 0 + 10 +20787.5 + 20 +9228.349365 + 30 +0.0 + 11 +20812.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +24A8 + 8 +0 + 62 + 0 + 10 +20862.5 + 20 +9228.349365 + 30 +0.0 + 11 +20887.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +24A9 + 8 +0 + 62 + 0 + 10 +20937.5 + 20 +9228.349365 + 30 +0.0 + 11 +20962.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +24AA + 8 +0 + 62 + 0 + 10 +21012.5 + 20 +9228.349365 + 30 +0.0 + 11 +21037.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +24AB + 8 +0 + 62 + 0 + 10 +21087.5 + 20 +9228.349365 + 30 +0.0 + 11 +21112.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +24AC + 8 +0 + 62 + 0 + 10 +21162.5 + 20 +9228.349365 + 30 +0.0 + 11 +21187.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +24AD + 8 +0 + 62 + 0 + 10 +21237.5 + 20 +9228.349365 + 30 +0.0 + 11 +21262.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +24AE + 8 +0 + 62 + 0 + 10 +21312.5 + 20 +9228.349365 + 30 +0.0 + 11 +21337.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +24AF + 8 +0 + 62 + 0 + 10 +20375.0 + 20 +9206.69873 + 30 +0.0 + 11 +20400.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +24B0 + 8 +0 + 62 + 0 + 10 +20450.0 + 20 +9206.69873 + 30 +0.0 + 11 +20475.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +24B1 + 8 +0 + 62 + 0 + 10 +20525.0 + 20 +9206.69873 + 30 +0.0 + 11 +20550.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +24B2 + 8 +0 + 62 + 0 + 10 +20600.0 + 20 +9206.69873 + 30 +0.0 + 11 +20625.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +24B3 + 8 +0 + 62 + 0 + 10 +20675.0 + 20 +9206.69873 + 30 +0.0 + 11 +20700.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +24B4 + 8 +0 + 62 + 0 + 10 +20750.0 + 20 +9206.69873 + 30 +0.0 + 11 +20775.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +24B5 + 8 +0 + 62 + 0 + 10 +20825.0 + 20 +9206.69873 + 30 +0.0 + 11 +20850.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +24B6 + 8 +0 + 62 + 0 + 10 +20900.0 + 20 +9206.69873 + 30 +0.0 + 11 +20925.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +24B7 + 8 +0 + 62 + 0 + 10 +20975.0 + 20 +9206.69873 + 30 +0.0 + 11 +21000.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +24B8 + 8 +0 + 62 + 0 + 10 +21050.0 + 20 +9206.69873 + 30 +0.0 + 11 +21075.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +24B9 + 8 +0 + 62 + 0 + 10 +21125.0 + 20 +9206.69873 + 30 +0.0 + 11 +21150.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +24BA + 8 +0 + 62 + 0 + 10 +21200.0 + 20 +9206.69873 + 30 +0.0 + 11 +21225.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +24BB + 8 +0 + 62 + 0 + 10 +21275.0 + 20 +9206.69873 + 30 +0.0 + 11 +21300.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +24BC + 8 +0 + 62 + 0 + 10 +21350.0 + 20 +9206.69873 + 30 +0.0 + 11 +21375.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +24BD + 8 +0 + 62 + 0 + 10 +20412.5 + 20 +9185.048095 + 30 +0.0 + 11 +20437.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +24BE + 8 +0 + 62 + 0 + 10 +20487.5 + 20 +9185.048095 + 30 +0.0 + 11 +20512.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +24BF + 8 +0 + 62 + 0 + 10 +20562.5 + 20 +9185.048095 + 30 +0.0 + 11 +20587.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +24C0 + 8 +0 + 62 + 0 + 10 +20637.5 + 20 +9185.048095 + 30 +0.0 + 11 +20662.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +24C1 + 8 +0 + 62 + 0 + 10 +20712.5 + 20 +9185.048095 + 30 +0.0 + 11 +20737.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +24C2 + 8 +0 + 62 + 0 + 10 +20787.5 + 20 +9185.048095 + 30 +0.0 + 11 +20812.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +24C3 + 8 +0 + 62 + 0 + 10 +20862.5 + 20 +9185.048095 + 30 +0.0 + 11 +20887.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +24C4 + 8 +0 + 62 + 0 + 10 +20937.5 + 20 +9185.048095 + 30 +0.0 + 11 +20962.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +24C5 + 8 +0 + 62 + 0 + 10 +21012.5 + 20 +9185.048095 + 30 +0.0 + 11 +21037.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +24C6 + 8 +0 + 62 + 0 + 10 +21087.5 + 20 +9185.048095 + 30 +0.0 + 11 +21112.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +24C7 + 8 +0 + 62 + 0 + 10 +21162.5 + 20 +9185.048095 + 30 +0.0 + 11 +21187.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +24C8 + 8 +0 + 62 + 0 + 10 +21237.5 + 20 +9185.048095 + 30 +0.0 + 11 +21262.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +24C9 + 8 +0 + 62 + 0 + 10 +21312.5 + 20 +9185.048095 + 30 +0.0 + 11 +21337.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +24CA + 8 +0 + 62 + 0 + 10 +20862.499948 + 20 +9185.048065 + 30 +0.0 + 11 +20849.999948 + 21 +9206.6987 + 31 +0.0 + 0 +LINE + 5 +24CB + 8 +0 + 62 + 0 + 10 +20824.999948 + 20 +9249.99997 + 30 +0.0 + 11 +20824.999931 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +24CC + 8 +0 + 62 + 0 + 10 +20824.999948 + 20 +9206.6987 + 30 +0.0 + 11 +20812.499948 + 21 +9228.349335 + 31 +0.0 + 0 +LINE + 5 +24CD + 8 +0 + 62 + 0 + 10 +20821.187953 + 20 +9170.0 + 30 +0.0 + 11 +20812.499948 + 21 +9185.048065 + 31 +0.0 + 0 +LINE + 5 +24CE + 8 +0 + 62 + 0 + 10 +20787.499948 + 20 +9228.349335 + 30 +0.0 + 11 +20774.999948 + 21 +9249.99997 + 31 +0.0 + 0 +LINE + 5 +24CF + 8 +0 + 62 + 0 + 10 +20787.499948 + 20 +9185.048065 + 30 +0.0 + 11 +20774.999948 + 21 +9206.6987 + 31 +0.0 + 0 +LINE + 5 +24D0 + 8 +0 + 62 + 0 + 10 +20749.999948 + 20 +9249.99997 + 30 +0.0 + 11 +20749.999931 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +24D1 + 8 +0 + 62 + 0 + 10 +20749.999948 + 20 +9206.6987 + 30 +0.0 + 11 +20737.499948 + 21 +9228.349335 + 31 +0.0 + 0 +LINE + 5 +24D2 + 8 +0 + 62 + 0 + 10 +20746.187953 + 20 +9170.0 + 30 +0.0 + 11 +20737.499949 + 21 +9185.048065 + 31 +0.0 + 0 +LINE + 5 +24D3 + 8 +0 + 62 + 0 + 10 +20712.499949 + 20 +9228.349335 + 30 +0.0 + 11 +20699.999949 + 21 +9249.99997 + 31 +0.0 + 0 +LINE + 5 +24D4 + 8 +0 + 62 + 0 + 10 +20712.499949 + 20 +9185.048065 + 30 +0.0 + 11 +20699.999949 + 21 +9206.6987 + 31 +0.0 + 0 +LINE + 5 +24D5 + 8 +0 + 62 + 0 + 10 +20674.999949 + 20 +9249.99997 + 30 +0.0 + 11 +20674.999932 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +24D6 + 8 +0 + 62 + 0 + 10 +20674.999949 + 20 +9206.6987 + 30 +0.0 + 11 +20662.499949 + 21 +9228.349335 + 31 +0.0 + 0 +LINE + 5 +24D7 + 8 +0 + 62 + 0 + 10 +20671.187953 + 20 +9170.0 + 30 +0.0 + 11 +20662.499949 + 21 +9185.048065 + 31 +0.0 + 0 +LINE + 5 +24D8 + 8 +0 + 62 + 0 + 10 +20637.499949 + 20 +9228.349335 + 30 +0.0 + 11 +20624.999949 + 21 +9249.99997 + 31 +0.0 + 0 +LINE + 5 +24D9 + 8 +0 + 62 + 0 + 10 +20637.499949 + 20 +9185.048065 + 30 +0.0 + 11 +20624.999949 + 21 +9206.6987 + 31 +0.0 + 0 +LINE + 5 +24DA + 8 +0 + 62 + 0 + 10 +20599.999949 + 20 +9249.99997 + 30 +0.0 + 11 +20599.999932 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +24DB + 8 +0 + 62 + 0 + 10 +20599.999949 + 20 +9206.6987 + 30 +0.0 + 11 +20587.499949 + 21 +9228.349335 + 31 +0.0 + 0 +LINE + 5 +24DC + 8 +0 + 62 + 0 + 10 +20596.187954 + 20 +9170.0 + 30 +0.0 + 11 +20587.499949 + 21 +9185.048065 + 31 +0.0 + 0 +LINE + 5 +24DD + 8 +0 + 62 + 0 + 10 +20562.499949 + 20 +9228.349335 + 30 +0.0 + 11 +20549.999949 + 21 +9249.999971 + 31 +0.0 + 0 +LINE + 5 +24DE + 8 +0 + 62 + 0 + 10 +20562.499949 + 20 +9185.048065 + 30 +0.0 + 11 +20549.999949 + 21 +9206.6987 + 31 +0.0 + 0 +LINE + 5 +24DF + 8 +0 + 62 + 0 + 10 +20524.999949 + 20 +9249.999971 + 30 +0.0 + 11 +20524.999932 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +24E0 + 8 +0 + 62 + 0 + 10 +20524.999949 + 20 +9206.6987 + 30 +0.0 + 11 +20512.499949 + 21 +9228.349336 + 31 +0.0 + 0 +LINE + 5 +24E1 + 8 +0 + 62 + 0 + 10 +20521.187954 + 20 +9170.0 + 30 +0.0 + 11 +20512.499949 + 21 +9185.048065 + 31 +0.0 + 0 +LINE + 5 +24E2 + 8 +0 + 62 + 0 + 10 +20487.499949 + 20 +9228.349336 + 30 +0.0 + 11 +20474.999949 + 21 +9249.999971 + 31 +0.0 + 0 +LINE + 5 +24E3 + 8 +0 + 62 + 0 + 10 +20487.499949 + 20 +9185.048065 + 30 +0.0 + 11 +20474.999949 + 21 +9206.698701 + 31 +0.0 + 0 +LINE + 5 +24E4 + 8 +0 + 62 + 0 + 10 +20449.999949 + 20 +9249.999971 + 30 +0.0 + 11 +20449.999932 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +24E5 + 8 +0 + 62 + 0 + 10 +20449.999949 + 20 +9206.698701 + 30 +0.0 + 11 +20437.499949 + 21 +9228.349336 + 31 +0.0 + 0 +LINE + 5 +24E6 + 8 +0 + 62 + 0 + 10 +20446.187954 + 20 +9170.0 + 30 +0.0 + 11 +20437.49995 + 21 +9185.048066 + 31 +0.0 + 0 +LINE + 5 +24E7 + 8 +0 + 62 + 0 + 10 +20412.49995 + 20 +9228.349336 + 30 +0.0 + 11 +20399.99995 + 21 +9249.999971 + 31 +0.0 + 0 +LINE + 5 +24E8 + 8 +0 + 62 + 0 + 10 +20412.49995 + 20 +9185.048066 + 30 +0.0 + 11 +20399.99995 + 21 +9206.698701 + 31 +0.0 + 0 +LINE + 5 +24E9 + 8 +0 + 62 + 0 + 10 +20374.99995 + 20 +9249.999971 + 30 +0.0 + 11 +20374.999933 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +24EA + 8 +0 + 62 + 0 + 10 +20374.99995 + 20 +9206.698701 + 30 +0.0 + 11 +20363.75 + 21 +9226.184185 + 31 +0.0 + 0 +LINE + 5 +24EB + 8 +0 + 62 + 0 + 10 +20371.187955 + 20 +9170.0 + 30 +0.0 + 11 +20363.75 + 21 +9182.882915 + 31 +0.0 + 0 +LINE + 5 +24EC + 8 +0 + 62 + 0 + 10 +20896.187952 + 20 +9170.0 + 30 +0.0 + 11 +20887.499948 + 21 +9185.048065 + 31 +0.0 + 0 +LINE + 5 +24ED + 8 +0 + 62 + 0 + 10 +20862.499948 + 20 +9228.349335 + 30 +0.0 + 11 +20849.999948 + 21 +9249.99997 + 31 +0.0 + 0 +LINE + 5 +24EE + 8 +0 + 62 + 0 + 10 +20899.999948 + 20 +9206.6987 + 30 +0.0 + 11 +20887.499948 + 21 +9228.349335 + 31 +0.0 + 0 +LINE + 5 +24EF + 8 +0 + 62 + 0 + 10 +20937.499948 + 20 +9185.048065 + 30 +0.0 + 11 +20924.999948 + 21 +9206.6987 + 31 +0.0 + 0 +LINE + 5 +24F0 + 8 +0 + 62 + 0 + 10 +20899.999948 + 20 +9249.99997 + 30 +0.0 + 11 +20899.999931 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +24F1 + 8 +0 + 62 + 0 + 10 +20971.187952 + 20 +9170.0 + 30 +0.0 + 11 +20962.499948 + 21 +9185.048065 + 31 +0.0 + 0 +LINE + 5 +24F2 + 8 +0 + 62 + 0 + 10 +20937.499948 + 20 +9228.349335 + 30 +0.0 + 11 +20924.999948 + 21 +9249.99997 + 31 +0.0 + 0 +LINE + 5 +24F3 + 8 +0 + 62 + 0 + 10 +20974.999948 + 20 +9206.6987 + 30 +0.0 + 11 +20962.499948 + 21 +9228.349335 + 31 +0.0 + 0 +LINE + 5 +24F4 + 8 +0 + 62 + 0 + 10 +21012.499948 + 20 +9185.048064 + 30 +0.0 + 11 +20999.999948 + 21 +9206.6987 + 31 +0.0 + 0 +LINE + 5 +24F5 + 8 +0 + 62 + 0 + 10 +20974.999948 + 20 +9249.99997 + 30 +0.0 + 11 +20974.99993 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +24F6 + 8 +0 + 62 + 0 + 10 +21046.187952 + 20 +9170.0 + 30 +0.0 + 11 +21037.499948 + 21 +9185.048064 + 31 +0.0 + 0 +LINE + 5 +24F7 + 8 +0 + 62 + 0 + 10 +21012.499948 + 20 +9228.349335 + 30 +0.0 + 11 +20999.999948 + 21 +9249.99997 + 31 +0.0 + 0 +LINE + 5 +24F8 + 8 +0 + 62 + 0 + 10 +21049.999947 + 20 +9206.698699 + 30 +0.0 + 11 +21037.499947 + 21 +9228.349335 + 31 +0.0 + 0 +LINE + 5 +24F9 + 8 +0 + 62 + 0 + 10 +21087.499947 + 20 +9185.048064 + 30 +0.0 + 11 +21074.999947 + 21 +9206.698699 + 31 +0.0 + 0 +LINE + 5 +24FA + 8 +0 + 62 + 0 + 10 +21049.999947 + 20 +9249.99997 + 30 +0.0 + 11 +21049.99993 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +24FB + 8 +0 + 62 + 0 + 10 +21121.187951 + 20 +9170.0 + 30 +0.0 + 11 +21112.499947 + 21 +9185.048064 + 31 +0.0 + 0 +LINE + 5 +24FC + 8 +0 + 62 + 0 + 10 +21087.499947 + 20 +9228.349334 + 30 +0.0 + 11 +21074.999947 + 21 +9249.99997 + 31 +0.0 + 0 +LINE + 5 +24FD + 8 +0 + 62 + 0 + 10 +21124.999947 + 20 +9206.698699 + 30 +0.0 + 11 +21112.499947 + 21 +9228.349334 + 31 +0.0 + 0 +LINE + 5 +24FE + 8 +0 + 62 + 0 + 10 +21162.499947 + 20 +9185.048064 + 30 +0.0 + 11 +21149.999947 + 21 +9206.698699 + 31 +0.0 + 0 +LINE + 5 +24FF + 8 +0 + 62 + 0 + 10 +21124.999947 + 20 +9249.999969 + 30 +0.0 + 11 +21124.99993 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2500 + 8 +0 + 62 + 0 + 10 +21196.187951 + 20 +9170.0 + 30 +0.0 + 11 +21187.499947 + 21 +9185.048064 + 31 +0.0 + 0 +LINE + 5 +2501 + 8 +0 + 62 + 0 + 10 +21162.499947 + 20 +9228.349334 + 30 +0.0 + 11 +21149.999947 + 21 +9249.999969 + 31 +0.0 + 0 +LINE + 5 +2502 + 8 +0 + 62 + 0 + 10 +21199.999947 + 20 +9206.698699 + 30 +0.0 + 11 +21187.499947 + 21 +9228.349334 + 31 +0.0 + 0 +LINE + 5 +2503 + 8 +0 + 62 + 0 + 10 +21237.499947 + 20 +9185.048064 + 30 +0.0 + 11 +21224.999947 + 21 +9206.698699 + 31 +0.0 + 0 +LINE + 5 +2504 + 8 +0 + 62 + 0 + 10 +21199.999947 + 20 +9249.999969 + 30 +0.0 + 11 +21199.999929 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2505 + 8 +0 + 62 + 0 + 10 +21271.187951 + 20 +9170.0 + 30 +0.0 + 11 +21262.499947 + 21 +9185.048064 + 31 +0.0 + 0 +LINE + 5 +2506 + 8 +0 + 62 + 0 + 10 +21237.499947 + 20 +9228.349334 + 30 +0.0 + 11 +21224.999947 + 21 +9249.999969 + 31 +0.0 + 0 +LINE + 5 +2507 + 8 +0 + 62 + 0 + 10 +21274.999947 + 20 +9206.698699 + 30 +0.0 + 11 +21262.499947 + 21 +9228.349334 + 31 +0.0 + 0 +LINE + 5 +2508 + 8 +0 + 62 + 0 + 10 +21312.499947 + 20 +9185.048064 + 30 +0.0 + 11 +21299.999947 + 21 +9206.698699 + 31 +0.0 + 0 +LINE + 5 +2509 + 8 +0 + 62 + 0 + 10 +21274.999947 + 20 +9249.999969 + 30 +0.0 + 11 +21274.999929 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +250A + 8 +0 + 62 + 0 + 10 +21346.18795 + 20 +9170.0 + 30 +0.0 + 11 +21337.499947 + 21 +9185.048064 + 31 +0.0 + 0 +LINE + 5 +250B + 8 +0 + 62 + 0 + 10 +21312.499947 + 20 +9228.349334 + 30 +0.0 + 11 +21299.999947 + 21 +9249.999969 + 31 +0.0 + 0 +LINE + 5 +250C + 8 +0 + 62 + 0 + 10 +21349.999946 + 20 +9206.698699 + 30 +0.0 + 11 +21337.499946 + 21 +9228.349334 + 31 +0.0 + 0 +LINE + 5 +250D + 8 +0 + 62 + 0 + 10 +21376.25 + 20 +9204.533543 + 30 +0.0 + 11 +21374.999946 + 21 +9206.698699 + 31 +0.0 + 0 +LINE + 5 +250E + 8 +0 + 62 + 0 + 10 +21349.999946 + 20 +9249.999969 + 30 +0.0 + 11 +21349.999929 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +250F + 8 +0 + 62 + 0 + 10 +21376.25 + 20 +9247.834813 + 30 +0.0 + 11 +21374.999946 + 21 +9249.999969 + 31 +0.0 + 0 +LINE + 5 +2510 + 8 +0 + 62 + 0 + 10 +20849.999948 + 20 +9206.69876 + 30 +0.0 + 11 +20862.499948 + 21 +9228.349395 + 31 +0.0 + 0 +LINE + 5 +2511 + 8 +0 + 62 + 0 + 10 +20812.499948 + 20 +9185.048125 + 30 +0.0 + 11 +20824.999948 + 21 +9206.69876 + 31 +0.0 + 0 +LINE + 5 +2512 + 8 +0 + 62 + 0 + 10 +20778.811909 + 20 +9170.0 + 30 +0.0 + 11 +20787.499948 + 21 +9185.048125 + 31 +0.0 + 0 +LINE + 5 +2513 + 8 +0 + 62 + 0 + 10 +20812.499948 + 20 +9228.349395 + 30 +0.0 + 11 +20824.999931 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2514 + 8 +0 + 62 + 0 + 10 +20774.999948 + 20 +9206.69876 + 30 +0.0 + 11 +20787.499948 + 21 +9228.349395 + 31 +0.0 + 0 +LINE + 5 +2515 + 8 +0 + 62 + 0 + 10 +20737.499948 + 20 +9185.048125 + 30 +0.0 + 11 +20749.999948 + 21 +9206.69876 + 31 +0.0 + 0 +LINE + 5 +2516 + 8 +0 + 62 + 0 + 10 +20703.81191 + 20 +9170.0 + 30 +0.0 + 11 +20712.499948 + 21 +9185.048125 + 31 +0.0 + 0 +LINE + 5 +2517 + 8 +0 + 62 + 0 + 10 +20737.499948 + 20 +9228.349395 + 30 +0.0 + 11 +20749.999931 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2518 + 8 +0 + 62 + 0 + 10 +20699.999948 + 20 +9206.69876 + 30 +0.0 + 11 +20712.499948 + 21 +9228.349395 + 31 +0.0 + 0 +LINE + 5 +2519 + 8 +0 + 62 + 0 + 10 +20662.499949 + 20 +9185.048124 + 30 +0.0 + 11 +20674.999949 + 21 +9206.69876 + 31 +0.0 + 0 +LINE + 5 +251A + 8 +0 + 62 + 0 + 10 +20628.81191 + 20 +9170.0 + 30 +0.0 + 11 +20637.499949 + 21 +9185.048124 + 31 +0.0 + 0 +LINE + 5 +251B + 8 +0 + 62 + 0 + 10 +20662.499949 + 20 +9228.349395 + 30 +0.0 + 11 +20674.999932 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +251C + 8 +0 + 62 + 0 + 10 +20624.999949 + 20 +9206.698759 + 30 +0.0 + 11 +20637.499949 + 21 +9228.349395 + 31 +0.0 + 0 +LINE + 5 +251D + 8 +0 + 62 + 0 + 10 +20587.499949 + 20 +9185.048124 + 30 +0.0 + 11 +20599.999949 + 21 +9206.698759 + 31 +0.0 + 0 +LINE + 5 +251E + 8 +0 + 62 + 0 + 10 +20553.81191 + 20 +9170.0 + 30 +0.0 + 11 +20562.499949 + 21 +9185.048124 + 31 +0.0 + 0 +LINE + 5 +251F + 8 +0 + 62 + 0 + 10 +20587.499949 + 20 +9228.349394 + 30 +0.0 + 11 +20599.999932 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2520 + 8 +0 + 62 + 0 + 10 +20549.999949 + 20 +9206.698759 + 30 +0.0 + 11 +20562.499949 + 21 +9228.349394 + 31 +0.0 + 0 +LINE + 5 +2521 + 8 +0 + 62 + 0 + 10 +20512.499949 + 20 +9185.048124 + 30 +0.0 + 11 +20524.999949 + 21 +9206.698759 + 31 +0.0 + 0 +LINE + 5 +2522 + 8 +0 + 62 + 0 + 10 +20478.811911 + 20 +9170.0 + 30 +0.0 + 11 +20487.499949 + 21 +9185.048124 + 31 +0.0 + 0 +LINE + 5 +2523 + 8 +0 + 62 + 0 + 10 +20512.499949 + 20 +9228.349394 + 30 +0.0 + 11 +20524.999932 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2524 + 8 +0 + 62 + 0 + 10 +20474.999949 + 20 +9206.698759 + 30 +0.0 + 11 +20487.499949 + 21 +9228.349394 + 31 +0.0 + 0 +LINE + 5 +2525 + 8 +0 + 62 + 0 + 10 +20437.499949 + 20 +9185.048124 + 30 +0.0 + 11 +20449.999949 + 21 +9206.698759 + 31 +0.0 + 0 +LINE + 5 +2526 + 8 +0 + 62 + 0 + 10 +20403.811911 + 20 +9170.0 + 30 +0.0 + 11 +20412.499949 + 21 +9185.048124 + 31 +0.0 + 0 +LINE + 5 +2527 + 8 +0 + 62 + 0 + 10 +20437.499949 + 20 +9228.349394 + 30 +0.0 + 11 +20449.999932 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2528 + 8 +0 + 62 + 0 + 10 +20399.999949 + 20 +9206.698759 + 30 +0.0 + 11 +20412.499949 + 21 +9228.349394 + 31 +0.0 + 0 +LINE + 5 +2529 + 8 +0 + 62 + 0 + 10 +20363.75 + 20 +9187.213275 + 30 +0.0 + 11 +20374.99995 + 21 +9206.698759 + 31 +0.0 + 0 +LINE + 5 +252A + 8 +0 + 62 + 0 + 10 +20363.75 + 20 +9230.514545 + 30 +0.0 + 11 +20374.999933 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +252B + 8 +0 + 62 + 0 + 10 +20853.811909 + 20 +9170.0 + 30 +0.0 + 11 +20862.499948 + 21 +9185.048125 + 31 +0.0 + 0 +LINE + 5 +252C + 8 +0 + 62 + 0 + 10 +20887.499948 + 20 +9228.349395 + 30 +0.0 + 11 +20899.999931 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +252D + 8 +0 + 62 + 0 + 10 +20887.499948 + 20 +9185.048125 + 30 +0.0 + 11 +20899.999948 + 21 +9206.69876 + 31 +0.0 + 0 +LINE + 5 +252E + 8 +0 + 62 + 0 + 10 +20924.999948 + 20 +9206.69876 + 30 +0.0 + 11 +20937.499948 + 21 +9228.349395 + 31 +0.0 + 0 +LINE + 5 +252F + 8 +0 + 62 + 0 + 10 +20928.811909 + 20 +9170.0 + 30 +0.0 + 11 +20937.499948 + 21 +9185.048125 + 31 +0.0 + 0 +LINE + 5 +2530 + 8 +0 + 62 + 0 + 10 +20962.499948 + 20 +9228.349395 + 30 +0.0 + 11 +20974.99993 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2531 + 8 +0 + 62 + 0 + 10 +20962.499948 + 20 +9185.048125 + 30 +0.0 + 11 +20974.999948 + 21 +9206.69876 + 31 +0.0 + 0 +LINE + 5 +2532 + 8 +0 + 62 + 0 + 10 +20999.999947 + 20 +9206.69876 + 30 +0.0 + 11 +21012.499947 + 21 +9228.349395 + 31 +0.0 + 0 +LINE + 5 +2533 + 8 +0 + 62 + 0 + 10 +21003.811908 + 20 +9170.0 + 30 +0.0 + 11 +21012.499947 + 21 +9185.048125 + 31 +0.0 + 0 +LINE + 5 +2534 + 8 +0 + 62 + 0 + 10 +21037.499947 + 20 +9228.349395 + 30 +0.0 + 11 +21049.99993 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2535 + 8 +0 + 62 + 0 + 10 +21037.499947 + 20 +9185.048125 + 30 +0.0 + 11 +21049.999947 + 21 +9206.69876 + 31 +0.0 + 0 +LINE + 5 +2536 + 8 +0 + 62 + 0 + 10 +21074.999947 + 20 +9206.69876 + 30 +0.0 + 11 +21087.499947 + 21 +9228.349395 + 31 +0.0 + 0 +LINE + 5 +2537 + 8 +0 + 62 + 0 + 10 +21078.811908 + 20 +9170.0 + 30 +0.0 + 11 +21087.499947 + 21 +9185.048125 + 31 +0.0 + 0 +LINE + 5 +2538 + 8 +0 + 62 + 0 + 10 +21112.499947 + 20 +9228.349395 + 30 +0.0 + 11 +21124.99993 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2539 + 8 +0 + 62 + 0 + 10 +21112.499947 + 20 +9185.048125 + 30 +0.0 + 11 +21124.999947 + 21 +9206.69876 + 31 +0.0 + 0 +LINE + 5 +253A + 8 +0 + 62 + 0 + 10 +21149.999947 + 20 +9206.69876 + 30 +0.0 + 11 +21162.499947 + 21 +9228.349396 + 31 +0.0 + 0 +LINE + 5 +253B + 8 +0 + 62 + 0 + 10 +21153.811908 + 20 +9170.0 + 30 +0.0 + 11 +21162.499947 + 21 +9185.048125 + 31 +0.0 + 0 +LINE + 5 +253C + 8 +0 + 62 + 0 + 10 +21187.499947 + 20 +9228.349396 + 30 +0.0 + 11 +21199.999929 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +253D + 8 +0 + 62 + 0 + 10 +21187.499947 + 20 +9185.048125 + 30 +0.0 + 11 +21199.999947 + 21 +9206.698761 + 31 +0.0 + 0 +LINE + 5 +253E + 8 +0 + 62 + 0 + 10 +21224.999947 + 20 +9206.698761 + 30 +0.0 + 11 +21237.499947 + 21 +9228.349396 + 31 +0.0 + 0 +LINE + 5 +253F + 8 +0 + 62 + 0 + 10 +21228.811907 + 20 +9170.0 + 30 +0.0 + 11 +21237.499947 + 21 +9185.048126 + 31 +0.0 + 0 +LINE + 5 +2540 + 8 +0 + 62 + 0 + 10 +21262.499947 + 20 +9228.349396 + 30 +0.0 + 11 +21274.999929 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2541 + 8 +0 + 62 + 0 + 10 +21262.499947 + 20 +9185.048126 + 30 +0.0 + 11 +21274.999947 + 21 +9206.698761 + 31 +0.0 + 0 +LINE + 5 +2542 + 8 +0 + 62 + 0 + 10 +21299.999946 + 20 +9206.698761 + 30 +0.0 + 11 +21312.499946 + 21 +9228.349396 + 31 +0.0 + 0 +LINE + 5 +2543 + 8 +0 + 62 + 0 + 10 +21303.811907 + 20 +9170.0 + 30 +0.0 + 11 +21312.499946 + 21 +9185.048126 + 31 +0.0 + 0 +LINE + 5 +2544 + 8 +0 + 62 + 0 + 10 +21337.499946 + 20 +9228.349396 + 30 +0.0 + 11 +21349.999929 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2545 + 8 +0 + 62 + 0 + 10 +21337.499946 + 20 +9185.048126 + 30 +0.0 + 11 +21349.999946 + 21 +9206.698761 + 31 +0.0 + 0 +LINE + 5 +2546 + 8 +0 + 62 + 0 + 10 +21374.999946 + 20 +9206.698761 + 30 +0.0 + 11 +21376.25 + 21 +9208.863917 + 31 +0.0 + 0 +ENDBLK + 5 +2547 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +MASSHILFSLINIE + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +MASSHILFSLINIE + 1 + + 0 +POLYLINE + 5 +2549 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +34A9 + 8 +0 + 10 +-150.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +34AA + 8 +0 + 10 +150.0 + 20 +0.0 + 30 +0.0 + 0 +SEQEND + 5 +34AB + 8 +0 + 0 +POLYLINE + 5 +254D + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +34AC + 8 +0 + 10 +0.0 + 20 +-350.0 + 30 +0.0 + 0 +VERTEX + 5 +34AD + 8 +0 + 10 +0.0 + 20 +350.0 + 30 +0.0 + 0 +SEQEND + 5 +34AE + 8 +0 + 0 +POLYLINE + 5 +2551 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +34AF + 8 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +34B0 + 8 +0 + 10 +53.033009 + 20 +53.033009 + 30 +0.0 + 0 +SEQEND + 5 +34B1 + 8 +0 + 0 +POLYLINE + 5 +2555 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +34B2 + 8 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +34B3 + 8 +0 + 10 +-53.033009 + 20 +-53.033009 + 30 +0.0 + 0 +SEQEND + 5 +34B4 + 8 +0 + 0 +ENDBLK + 5 +2559 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D55 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D55 + 1 + + 0 +LINE + 5 +255B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9746.0 + 20 +11975.0 + 30 +0.0 + 11 +12614.0 + 21 +11975.0 + 31 +0.0 + 0 +INSERT + 5 +255C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9745.0 + 20 +11975.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +255D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +12615.0 + 20 +11975.0 + 30 +0.0 + 0 +TEXT + 5 +255E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +10983.125 + 20 +12062.5 + 30 +0.0 + 40 +175.0 + 1 +2.87 + 41 +0.75 + 72 + 1 + 11 +11180.0 + 21 +12150.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2560 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9745.0 + 20 +12370.0 + 30 +0.0 + 0 +POINT + 5 +2561 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +12615.0 + 20 +12370.0 + 30 +0.0 + 0 +POINT + 5 +2562 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +12615.0 + 20 +11975.0 + 30 +0.0 + 0 +ENDBLK + 5 +2563 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D56 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D56 + 1 + + 0 +LINE + 5 +2565 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +13881.0 + 20 +11975.0 + 30 +0.0 + 11 +14119.0 + 21 +11975.0 + 31 +0.0 + 0 +INSERT + 5 +2566 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +13880.0 + 20 +11975.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2567 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +14120.0 + 20 +11975.0 + 30 +0.0 + 0 +TEXT + 5 +2568 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +13890.625 + 20 +12062.5 + 30 +0.0 + 40 +175.0 + 1 +25 + 41 +0.75 + 72 + 1 + 11 +14000.0 + 21 +12150.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2569 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +13880.0 + 20 +11955.0 + 30 +0.0 + 0 +POINT + 5 +256A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +14120.0 + 20 +11975.0 + 30 +0.0 + 0 +POINT + 5 +256B + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +14120.0 + 20 +11975.0 + 30 +0.0 + 0 +ENDBLK + 5 +256C + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D57 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D57 + 1 + + 0 +LINE + 5 +256E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +5371.0 + 20 +16165.0 + 30 +0.0 + 11 +7619.0 + 21 +16165.0 + 31 +0.0 + 0 +INSERT + 5 +256F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +5370.0 + 20 +16165.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2570 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +7620.0 + 20 +16165.0 + 30 +0.0 + 0 +TEXT + 5 +2571 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +6298.125 + 20 +16252.5 + 30 +0.0 + 40 +175.0 + 1 +2.25 + 41 +0.75 + 72 + 1 + 11 +6495.0 + 21 +16340.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2572 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5370.0 + 20 +16875.0 + 30 +0.0 + 0 +POINT + 5 +2573 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7620.0 + 20 +16875.0 + 30 +0.0 + 0 +POINT + 5 +2574 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7620.0 + 20 +16165.0 + 30 +0.0 + 0 +ENDBLK + 5 +2575 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D58 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D58 + 1 + + 0 +LINE + 5 +2577 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +7619.0 + 20 +16165.0 + 30 +0.0 + 11 +7618.0 + 21 +16165.0 + 31 +0.0 + 0 +LINE + 5 +2578 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +7741.0 + 20 +16165.0 + 30 +0.0 + 11 +7742.0 + 21 +16165.0 + 31 +0.0 + 0 +LINE + 5 +2579 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +7742.0 + 20 +16165.0 + 30 +0.0 + 11 +7917.0 + 21 +16165.0 + 31 +0.0 + 0 +INSERT + 5 +257A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +7620.0 + 20 +16165.0 + 30 +0.0 + 0 +INSERT + 5 +257B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +7740.0 + 20 +16165.0 + 30 +0.0 + 50 +180.0 + 0 +TEXT + 5 +257C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +7742.0 + 20 +16252.5 + 30 +0.0 + 40 +175.0 + 1 +12 + 41 +0.75 + 72 + 1 + 11 +7829.5 + 21 +16340.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +257D + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7620.0 + 20 +16875.0 + 30 +0.0 + 0 +POINT + 5 +257E + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7740.0 + 20 +16195.0 + 30 +0.0 + 0 +POINT + 5 +257F + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7740.0 + 20 +16165.0 + 30 +0.0 + 0 +ENDBLK + 5 +2580 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D59 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D59 + 1 + + 0 +LINE + 5 +2582 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +3500.0 + 20 +14616.0 + 30 +0.0 + 11 +3500.0 + 21 +16124.0 + 31 +0.0 + 0 +INSERT + 5 +2583 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +3500.0 + 20 +14615.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +2584 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +3500.0 + 20 +16125.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +2585 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +3412.5 + 20 +15216.875 + 30 +0.0 + 40 +175.0 + 1 +1.51 + 50 +90.0 + 41 +0.75 + 72 + 1 + 11 +3325.0 + 21 +15370.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2586 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5000.0 + 20 +14615.0 + 30 +0.0 + 0 +POINT + 5 +2587 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5000.0 + 20 +16125.0 + 30 +0.0 + 0 +POINT + 5 +2588 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +3500.0 + 20 +16125.0 + 30 +0.0 + 0 +ENDBLK + 5 +2589 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D60 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D60 + 1 + + 0 +LINE + 5 +258B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +3500.0 + 20 +16126.0 + 30 +0.0 + 11 +3500.0 + 21 +18239.0 + 31 +0.0 + 0 +INSERT + 5 +258C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +3500.0 + 20 +16125.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +258D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +3500.0 + 20 +18240.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +258E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +3412.5 + 20 +17029.375 + 30 +0.0 + 40 +175.0 + 1 +2.11 + 50 +90.0 + 41 +0.75 + 72 + 1 + 11 +3325.0 + 21 +17182.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +258F + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5000.0 + 20 +16125.0 + 30 +0.0 + 0 +POINT + 5 +2590 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5000.0 + 20 +18240.0 + 30 +0.0 + 0 +POINT + 5 +2591 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +3500.0 + 20 +18240.0 + 30 +0.0 + 0 +ENDBLK + 5 +2592 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D61 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D61 + 1 + + 0 +LINE + 5 +2594 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +3500.0 + 20 +18241.0 + 30 +0.0 + 11 +3500.0 + 21 +19374.0 + 31 +0.0 + 0 +INSERT + 5 +2595 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +3500.0 + 20 +18240.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +2596 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +3500.0 + 20 +19375.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +2597 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +3412.5 + 20 +18654.375 + 30 +0.0 + 40 +175.0 + 1 +1.13 + 50 +90.0 + 41 +0.75 + 72 + 1 + 11 +3325.0 + 21 +18807.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2598 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5000.0 + 20 +18240.0 + 30 +0.0 + 0 +POINT + 5 +2599 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5000.0 + 20 +19375.0 + 30 +0.0 + 0 +POINT + 5 +259A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +3500.0 + 20 +19375.0 + 30 +0.0 + 0 +ENDBLK + 5 +259B + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D62 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D62 + 1 + + 0 +LINE + 5 +259D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +3500.0 + 20 +19376.0 + 30 +0.0 + 11 +3500.0 + 21 +22114.0 + 31 +0.0 + 0 +INSERT + 5 +259E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +3500.0 + 20 +19375.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +259F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +3500.0 + 20 +22115.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +25A0 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +3412.5 + 20 +20548.125 + 30 +0.0 + 40 +175.0 + 1 +2.74 + 50 +90.0 + 41 +0.75 + 72 + 1 + 11 +3325.0 + 21 +20745.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +25A1 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5000.0 + 20 +19375.0 + 30 +0.0 + 0 +POINT + 5 +25A2 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5000.0 + 20 +22115.0 + 30 +0.0 + 0 +POINT + 5 +25A3 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +3500.0 + 20 +22115.0 + 30 +0.0 + 0 +ENDBLK + 5 +25A4 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D63 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D63 + 1 + + 0 +LINE + 5 +25A6 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +3500.0 + 20 +9251.0 + 30 +0.0 + 11 +3500.0 + 21 +14614.0 + 31 +0.0 + 0 +INSERT + 5 +25A7 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +3500.0 + 20 +9250.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +25A8 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +3500.0 + 20 +14615.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +25A9 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +3412.5 + 20 +11735.625 + 30 +0.0 + 40 +175.0 + 1 +5.36 + 50 +90.0 + 41 +0.75 + 72 + 1 + 11 +3325.0 + 21 +11932.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +25AA + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5000.0 + 20 +9250.0 + 30 +0.0 + 0 +POINT + 5 +25AB + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5000.0 + 20 +14615.0 + 30 +0.0 + 0 +POINT + 5 +25AC + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +3500.0 + 20 +14615.0 + 30 +0.0 + 0 +ENDBLK + 5 +25AD + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D64 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D64 + 1 + + 0 +LINE + 5 +25AF + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +5366.0 + 20 +18105.0 + 30 +0.0 + 11 +8114.0 + 21 +18105.0 + 31 +0.0 + 0 +INSERT + 5 +25B0 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +5365.0 + 20 +18105.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +25B1 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +8115.0 + 20 +18105.0 + 30 +0.0 + 0 +TEXT + 5 +25B2 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +6543.125 + 20 +18192.5 + 30 +0.0 + 40 +175.0 + 1 +2.75 + 41 +0.75 + 72 + 1 + 11 +6740.0 + 21 +18280.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +25B3 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5365.0 + 20 +17255.0 + 30 +0.0 + 0 +POINT + 5 +25B4 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8115.0 + 20 +17255.0 + 30 +0.0 + 0 +POINT + 5 +25B5 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8115.0 + 20 +18105.0 + 30 +0.0 + 0 +ENDBLK + 5 +25B6 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D65 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D65 + 1 + + 0 +LINE + 5 +25B8 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +8116.0 + 20 +18105.0 + 30 +0.0 + 11 +9004.0 + 21 +18105.0 + 31 +0.0 + 0 +INSERT + 5 +25B9 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +8115.0 + 20 +18105.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +25BA + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9005.0 + 20 +18105.0 + 30 +0.0 + 0 +TEXT + 5 +25BB + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +8450.625 + 20 +18192.5 + 30 +0.0 + 40 +175.0 + 1 +88 + 41 +0.75 + 72 + 1 + 11 +8560.0 + 21 +18280.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +25BC + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8115.0 + 20 +17255.0 + 30 +0.0 + 0 +POINT + 5 +25BD + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9005.0 + 20 +17185.0 + 30 +0.0 + 0 +POINT + 5 +25BE + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9005.0 + 20 +18105.0 + 30 +0.0 + 0 +ENDBLK + 5 +25BF + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D66 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D66 + 1 + + 0 +LINE + 5 +25C1 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9006.0 + 20 +18105.0 + 30 +0.0 + 11 +9749.0 + 21 +18105.0 + 31 +0.0 + 0 +INSERT + 5 +25C2 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9005.0 + 20 +18105.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +25C3 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9750.0 + 20 +18105.0 + 30 +0.0 + 0 +TEXT + 5 +25C4 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9268.125 + 20 +18192.5 + 30 +0.0 + 40 +175.0 + 1 +75 + 41 +0.75 + 72 + 1 + 11 +9377.5 + 21 +18280.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +25C5 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9005.0 + 20 +17185.0 + 30 +0.0 + 0 +POINT + 5 +25C6 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9750.0 + 20 +18100.0 + 30 +0.0 + 0 +POINT + 5 +25C7 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9750.0 + 20 +18105.0 + 30 +0.0 + 0 +ENDBLK + 5 +25C8 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D67 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D67 + 1 + + 0 +LINE + 5 +25CA + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +5001.0 + 20 +26015.0 + 30 +0.0 + 11 +26739.0 + 21 +26015.0 + 31 +0.0 + 0 +INSERT + 5 +25CB + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +5000.0 + 20 +26015.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +25CC + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +26740.0 + 20 +26015.0 + 30 +0.0 + 0 +TEXT + 5 +25CD + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +15629.375 + 20 +26102.5 + 30 +0.0 + 40 +175.0 + 1 +21.74 + 41 +0.75 + 72 + 1 + 11 +15870.0 + 21 +26190.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +25CE + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5000.0 + 20 +22115.0 + 30 +0.0 + 0 +POINT + 5 +25CF + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26740.0 + 20 +22115.0 + 30 +0.0 + 0 +POINT + 5 +25D0 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26740.0 + 20 +26015.0 + 30 +0.0 + 0 +ENDBLK + 5 +25D1 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D68 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D68 + 1 + + 0 +LINE + 5 +25D3 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +5366.0 + 20 +25315.0 + 30 +0.0 + 11 +9749.0 + 21 +25315.0 + 31 +0.0 + 0 +INSERT + 5 +25D4 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +5365.0 + 20 +25315.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +25D5 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9750.0 + 20 +25315.0 + 30 +0.0 + 0 +TEXT + 5 +25D6 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +7360.625 + 20 +25402.5 + 30 +0.0 + 40 +175.0 + 1 +4.38 + 41 +0.75 + 72 + 1 + 11 +7557.5 + 21 +25490.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +25D7 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5365.0 + 20 +22115.0 + 30 +0.0 + 0 +POINT + 5 +25D8 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9750.0 + 20 +21740.0 + 30 +0.0 + 0 +POINT + 5 +25D9 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9750.0 + 20 +25315.0 + 30 +0.0 + 0 +ENDBLK + 5 +25DA + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D69 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D69 + 1 + + 0 +LINE + 5 +25DC + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +5001.0 + 20 +25315.0 + 30 +0.0 + 11 +5364.0 + 21 +25315.0 + 31 +0.0 + 0 +INSERT + 5 +25DD + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +5000.0 + 20 +25315.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +25DE + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +5365.0 + 20 +25315.0 + 30 +0.0 + 0 +TEXT + 5 +25DF + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +5073.125 + 20 +25402.5 + 30 +0.0 + 40 +175.0 + 1 +36 + 41 +0.75 + 72 + 1 + 11 +5182.5 + 21 +25490.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +25E0 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5000.0 + 20 +22115.0 + 30 +0.0 + 0 +POINT + 5 +25E1 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5365.0 + 20 +22115.0 + 30 +0.0 + 0 +POINT + 5 +25E2 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5365.0 + 20 +25315.0 + 30 +0.0 + 0 +ENDBLK + 5 +25E3 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D70 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D70 + 1 + + 0 +LINE + 5 +25E5 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +10111.0 + 20 +25315.0 + 30 +0.0 + 11 +14874.0 + 21 +25315.0 + 31 +0.0 + 0 +INSERT + 5 +25E6 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +10110.0 + 20 +25315.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +25E7 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +14875.0 + 20 +25315.0 + 30 +0.0 + 0 +TEXT + 5 +25E8 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +12295.625 + 20 +25402.5 + 30 +0.0 + 40 +175.0 + 1 +4.76 + 41 +0.75 + 72 + 1 + 11 +12492.5 + 21 +25490.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +25E9 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +10110.0 + 20 +21745.0 + 30 +0.0 + 0 +POINT + 5 +25EA + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +14875.0 + 20 +21735.0 + 30 +0.0 + 0 +POINT + 5 +25EB + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +14875.0 + 20 +25315.0 + 30 +0.0 + 0 +ENDBLK + 5 +25EC + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D71 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D71 + 1 + + 0 +LINE + 5 +25EE + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9751.0 + 20 +25315.0 + 30 +0.0 + 11 +10109.0 + 21 +25315.0 + 31 +0.0 + 0 +INSERT + 5 +25EF + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9750.0 + 20 +25315.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +25F0 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +10110.0 + 20 +25315.0 + 30 +0.0 + 0 +TEXT + 5 +25F1 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9820.625 + 20 +25402.5 + 30 +0.0 + 40 +175.0 + 1 +36 + 41 +0.75 + 72 + 1 + 11 +9930.0 + 21 +25490.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +25F2 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9750.0 + 20 +21740.0 + 30 +0.0 + 0 +POINT + 5 +25F3 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +10110.0 + 20 +21745.0 + 30 +0.0 + 0 +POINT + 5 +25F4 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +10110.0 + 20 +25315.0 + 30 +0.0 + 0 +ENDBLK + 5 +25F5 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D72 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D72 + 1 + + 0 +LINE + 5 +25F7 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +14876.0 + 20 +25315.0 + 30 +0.0 + 11 +15239.0 + 21 +25315.0 + 31 +0.0 + 0 +INSERT + 5 +25F8 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +14875.0 + 20 +25315.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +25F9 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +15240.0 + 20 +25315.0 + 30 +0.0 + 0 +TEXT + 5 +25FA + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +14948.125 + 20 +25402.5 + 30 +0.0 + 40 +175.0 + 1 +36 + 41 +0.75 + 72 + 1 + 11 +15057.5 + 21 +25490.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +25FB + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +14875.0 + 20 +21735.0 + 30 +0.0 + 0 +POINT + 5 +25FC + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15240.0 + 20 +21750.0 + 30 +0.0 + 0 +POINT + 5 +25FD + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15240.0 + 20 +25315.0 + 30 +0.0 + 0 +ENDBLK + 5 +25FE + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D73 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D73 + 1 + + 0 +LINE + 5 +2600 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +15241.0 + 20 +25315.0 + 30 +0.0 + 11 +17614.0 + 21 +25315.0 + 31 +0.0 + 0 +INSERT + 5 +2601 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +15240.0 + 20 +25315.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2602 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +17615.0 + 20 +25315.0 + 30 +0.0 + 0 +TEXT + 5 +2603 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +16230.625 + 20 +25402.5 + 30 +0.0 + 40 +175.0 + 1 +2.38 + 41 +0.75 + 72 + 1 + 11 +16427.5 + 21 +25490.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2604 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15240.0 + 20 +21750.0 + 30 +0.0 + 0 +POINT + 5 +2605 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17615.0 + 20 +21735.0 + 30 +0.0 + 0 +POINT + 5 +2606 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17615.0 + 20 +25315.0 + 30 +0.0 + 0 +ENDBLK + 5 +2607 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D74 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D74 + 1 + + 0 +LINE + 5 +2609 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +17616.0 + 20 +25315.0 + 30 +0.0 + 11 +17994.0 + 21 +25315.0 + 31 +0.0 + 0 +INSERT + 5 +260A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +17615.0 + 20 +25315.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +260B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +17995.0 + 20 +25315.0 + 30 +0.0 + 0 +TEXT + 5 +260C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +17695.625 + 20 +25402.5 + 30 +0.0 + 40 +175.0 + 1 +36 + 41 +0.75 + 72 + 1 + 11 +17805.0 + 21 +25490.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +260D + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17615.0 + 20 +21735.0 + 30 +0.0 + 0 +POINT + 5 +260E + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17995.0 + 20 +21745.0 + 30 +0.0 + 0 +POINT + 5 +260F + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17995.0 + 20 +25315.0 + 30 +0.0 + 0 +ENDBLK + 5 +2610 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D75 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D75 + 1 + + 0 +LINE + 5 +2612 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +17996.0 + 20 +25315.0 + 30 +0.0 + 11 +22499.0 + 21 +25315.0 + 31 +0.0 + 0 +INSERT + 5 +2613 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +17995.0 + 20 +25315.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2614 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +22500.0 + 20 +25315.0 + 30 +0.0 + 0 +TEXT + 5 +2615 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +20072.5 + 20 +25402.5 + 30 +0.0 + 40 +175.0 + 1 +4.51 + 41 +0.75 + 72 + 1 + 11 +20247.5 + 21 +25490.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2616 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17995.0 + 20 +21745.0 + 30 +0.0 + 0 +POINT + 5 +2617 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +22500.0 + 20 +21750.0 + 30 +0.0 + 0 +POINT + 5 +2618 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +22500.0 + 20 +25315.0 + 30 +0.0 + 0 +ENDBLK + 5 +2619 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D76 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D76 + 1 + + 0 +LINE + 5 +261B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +22501.0 + 20 +25315.0 + 30 +0.0 + 11 +22864.0 + 21 +25315.0 + 31 +0.0 + 0 +INSERT + 5 +261C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +22500.0 + 20 +25315.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +261D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +22865.0 + 20 +25315.0 + 30 +0.0 + 0 +TEXT + 5 +261E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +22573.125 + 20 +25402.5 + 30 +0.0 + 40 +175.0 + 1 +36 + 41 +0.75 + 72 + 1 + 11 +22682.5 + 21 +25490.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +261F + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +22500.0 + 20 +21750.0 + 30 +0.0 + 0 +POINT + 5 +2620 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +22865.0 + 20 +21750.0 + 30 +0.0 + 0 +POINT + 5 +2621 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +22865.0 + 20 +25315.0 + 30 +0.0 + 0 +ENDBLK + 5 +2622 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D77 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D77 + 1 + + 0 +LINE + 5 +2624 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +22866.0 + 20 +25315.0 + 30 +0.0 + 11 +26369.0 + 21 +25315.0 + 31 +0.0 + 0 +INSERT + 5 +2625 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +22865.0 + 20 +25315.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2626 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +26370.0 + 20 +25315.0 + 30 +0.0 + 0 +TEXT + 5 +2627 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +24442.5 + 20 +25402.5 + 30 +0.0 + 40 +175.0 + 1 +3.51 + 41 +0.75 + 72 + 1 + 11 +24617.5 + 21 +25490.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2628 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +22865.0 + 20 +21750.0 + 30 +0.0 + 0 +POINT + 5 +2629 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26370.0 + 20 +21740.0 + 30 +0.0 + 0 +POINT + 5 +262A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26370.0 + 20 +25315.0 + 30 +0.0 + 0 +ENDBLK + 5 +262B + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D78 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D78 + 1 + + 0 +LINE + 5 +262D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +26371.0 + 20 +25315.0 + 30 +0.0 + 11 +26739.0 + 21 +25315.0 + 31 +0.0 + 0 +INSERT + 5 +262E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +26370.0 + 20 +25315.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +262F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +26740.0 + 20 +25315.0 + 30 +0.0 + 0 +TEXT + 5 +2630 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +26445.625 + 20 +25402.5 + 30 +0.0 + 40 +175.0 + 1 +36 + 41 +0.75 + 72 + 1 + 11 +26555.0 + 21 +25490.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2631 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26370.0 + 20 +21740.0 + 30 +0.0 + 0 +POINT + 5 +2632 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26740.0 + 20 +22000.0 + 30 +0.0 + 0 +POINT + 5 +2633 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26740.0 + 20 +25315.0 + 30 +0.0 + 0 +ENDBLK + 5 +2634 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D79 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D79 + 1 + + 0 +LINE + 5 +2636 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +25251.0 + 20 +24615.0 + 30 +0.0 + 11 +26739.0 + 21 +24615.0 + 31 +0.0 + 0 +INSERT + 5 +2637 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +25250.0 + 20 +24615.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2638 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +26740.0 + 20 +24615.0 + 30 +0.0 + 0 +TEXT + 5 +2639 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +25820.0 + 20 +24702.5 + 30 +0.0 + 40 +175.0 + 1 +1.49 + 41 +0.75 + 72 + 1 + 11 +25995.0 + 21 +24790.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +263A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +25250.0 + 20 +22115.0 + 30 +0.0 + 0 +POINT + 5 +263B + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26740.0 + 20 +22115.0 + 30 +0.0 + 0 +POINT + 5 +263C + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26740.0 + 20 +24615.0 + 30 +0.0 + 0 +ENDBLK + 5 +263D + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D80 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D80 + 1 + + 0 +LINE + 5 +263F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +19751.0 + 20 +24615.0 + 30 +0.0 + 11 +23364.0 + 21 +24615.0 + 31 +0.0 + 0 +INSERT + 5 +2640 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +19750.0 + 20 +24615.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2641 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +23365.0 + 20 +24615.0 + 30 +0.0 + 0 +TEXT + 5 +2642 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +21382.5 + 20 +24702.5 + 30 +0.0 + 40 +175.0 + 1 +3.61 + 41 +0.75 + 72 + 1 + 11 +21557.5 + 21 +24790.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2643 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +19750.0 + 20 +22115.0 + 30 +0.0 + 0 +POINT + 5 +2644 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +23365.0 + 20 +22115.0 + 30 +0.0 + 0 +POINT + 5 +2645 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +23365.0 + 20 +24615.0 + 30 +0.0 + 0 +ENDBLK + 5 +2646 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D81 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D81 + 1 + + 0 +LINE + 5 +2648 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +18736.0 + 20 +24615.0 + 30 +0.0 + 11 +19749.0 + 21 +24615.0 + 31 +0.0 + 0 +INSERT + 5 +2649 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18735.0 + 20 +24615.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +264A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +19750.0 + 20 +24615.0 + 30 +0.0 + 0 +TEXT + 5 +264B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +19100.3125 + 20 +24702.5 + 30 +0.0 + 40 +175.0 + 1 +1.01 + 41 +0.75 + 72 + 1 + 11 +19242.5 + 21 +24790.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +264C + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +18735.0 + 20 +22105.0 + 30 +0.0 + 0 +POINT + 5 +264D + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +19750.0 + 20 +22115.0 + 30 +0.0 + 0 +POINT + 5 +264E + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +19750.0 + 20 +24615.0 + 30 +0.0 + 0 +ENDBLK + 5 +264F + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D82 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D82 + 1 + + 0 +LINE + 5 +2651 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +16876.0 + 20 +24615.0 + 30 +0.0 + 11 +18734.0 + 21 +24615.0 + 31 +0.0 + 0 +INSERT + 5 +2652 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16875.0 + 20 +24615.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2653 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18735.0 + 20 +24615.0 + 30 +0.0 + 0 +TEXT + 5 +2654 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +17630.0 + 20 +24702.5 + 30 +0.0 + 40 +175.0 + 1 +1.86 + 41 +0.75 + 72 + 1 + 11 +17805.0 + 21 +24790.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2655 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16875.0 + 20 +22105.0 + 30 +0.0 + 0 +POINT + 5 +2656 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +18735.0 + 20 +22105.0 + 30 +0.0 + 0 +POINT + 5 +2657 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +18735.0 + 20 +24615.0 + 30 +0.0 + 0 +ENDBLK + 5 +2658 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D83 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D83 + 1 + + 0 +LINE + 5 +265A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +15861.0 + 20 +24615.0 + 30 +0.0 + 11 +16874.0 + 21 +24615.0 + 31 +0.0 + 0 +INSERT + 5 +265B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +15860.0 + 20 +24615.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +265C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16875.0 + 20 +24615.0 + 30 +0.0 + 0 +TEXT + 5 +265D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +16225.3125 + 20 +24702.5 + 30 +0.0 + 40 +175.0 + 1 +1.01 + 41 +0.75 + 72 + 1 + 11 +16367.5 + 21 +24790.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +265E + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15860.0 + 20 +22105.0 + 30 +0.0 + 0 +POINT + 5 +265F + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16875.0 + 20 +22105.0 + 30 +0.0 + 0 +POINT + 5 +2660 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16875.0 + 20 +24615.0 + 30 +0.0 + 0 +ENDBLK + 5 +2661 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D84 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D84 + 1 + + 0 +LINE + 5 +2663 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +11256.0 + 20 +24615.0 + 30 +0.0 + 11 +15859.0 + 21 +24615.0 + 31 +0.0 + 0 +INSERT + 5 +2664 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +11255.0 + 20 +24615.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2665 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +15860.0 + 20 +24615.0 + 30 +0.0 + 0 +TEXT + 5 +2666 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +13382.5 + 20 +24702.5 + 30 +0.0 + 40 +175.0 + 1 +4.61 + 41 +0.75 + 72 + 1 + 11 +13557.5 + 21 +24790.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2667 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +11255.0 + 20 +22105.0 + 30 +0.0 + 0 +POINT + 5 +2668 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15860.0 + 20 +22105.0 + 30 +0.0 + 0 +POINT + 5 +2669 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15860.0 + 20 +24615.0 + 30 +0.0 + 0 +ENDBLK + 5 +266A + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D85 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D85 + 1 + + 0 +LINE + 5 +266C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +10241.0 + 20 +24615.0 + 30 +0.0 + 11 +11254.0 + 21 +24615.0 + 31 +0.0 + 0 +INSERT + 5 +266D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +10240.0 + 20 +24615.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +266E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +11255.0 + 20 +24615.0 + 30 +0.0 + 0 +TEXT + 5 +266F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +10605.3125 + 20 +24702.5 + 30 +0.0 + 40 +175.0 + 1 +1.01 + 41 +0.75 + 72 + 1 + 11 +10747.5 + 21 +24790.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2670 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +10240.0 + 20 +22115.0 + 30 +0.0 + 0 +POINT + 5 +2671 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +11255.0 + 20 +22105.0 + 30 +0.0 + 0 +POINT + 5 +2672 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +11255.0 + 20 +24615.0 + 30 +0.0 + 0 +ENDBLK + 5 +2673 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D86 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D86 + 1 + + 0 +LINE + 5 +2675 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +8501.0 + 20 +24615.0 + 30 +0.0 + 11 +10239.0 + 21 +24615.0 + 31 +0.0 + 0 +INSERT + 5 +2676 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +8500.0 + 20 +24615.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2677 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +10240.0 + 20 +24615.0 + 30 +0.0 + 0 +TEXT + 5 +2678 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9195.0 + 20 +24702.5 + 30 +0.0 + 40 +175.0 + 1 +1.74 + 41 +0.75 + 72 + 1 + 11 +9370.0 + 21 +24790.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2679 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8500.0 + 20 +22115.0 + 30 +0.0 + 0 +POINT + 5 +267A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +10240.0 + 20 +22115.0 + 30 +0.0 + 0 +POINT + 5 +267B + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +10240.0 + 20 +24615.0 + 30 +0.0 + 0 +ENDBLK + 5 +267C + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D87 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D87 + 1 + + 0 +LINE + 5 +267E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +5001.0 + 20 +24615.0 + 30 +0.0 + 11 +6739.0 + 21 +24615.0 + 31 +0.0 + 0 +INSERT + 5 +267F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +5000.0 + 20 +24615.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2680 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +6740.0 + 20 +24615.0 + 30 +0.0 + 0 +TEXT + 5 +2681 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +5695.0 + 20 +24702.5 + 30 +0.0 + 40 +175.0 + 1 +1.74 + 41 +0.75 + 72 + 1 + 11 +5870.0 + 21 +24790.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2682 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5000.0 + 20 +22115.0 + 30 +0.0 + 0 +POINT + 5 +2683 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +6740.0 + 20 +22115.0 + 30 +0.0 + 0 +POINT + 5 +2684 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +6740.0 + 20 +24615.0 + 30 +0.0 + 0 +ENDBLK + 5 +2685 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D88 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D88 + 1 + + 0 +LINE + 5 +2687 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +23366.0 + 20 +24615.0 + 30 +0.0 + 11 +25249.0 + 21 +24615.0 + 31 +0.0 + 0 +INSERT + 5 +2688 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +23365.0 + 20 +24615.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2689 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +25250.0 + 20 +24615.0 + 30 +0.0 + 0 +TEXT + 5 +268A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +24132.5 + 20 +24702.5 + 30 +0.0 + 40 +175.0 + 1 +1.88 + 41 +0.75 + 72 + 1 + 11 +24307.5 + 21 +24790.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +268B + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +23365.0 + 20 +22115.0 + 30 +0.0 + 0 +POINT + 5 +268C + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +25250.0 + 20 +22115.0 + 30 +0.0 + 0 +POINT + 5 +268D + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +25250.0 + 20 +24615.0 + 30 +0.0 + 0 +ENDBLK + 5 +268E + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D89 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D89 + 1 + + 0 +LINE + 5 +2690 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +6741.0 + 20 +24615.0 + 30 +0.0 + 11 +8499.0 + 21 +24615.0 + 31 +0.0 + 0 +INSERT + 5 +2691 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +6740.0 + 20 +24615.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2692 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +8500.0 + 20 +24615.0 + 30 +0.0 + 0 +TEXT + 5 +2693 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +7445.0 + 20 +24702.5 + 30 +0.0 + 40 +175.0 + 1 +1.76 + 41 +0.75 + 72 + 1 + 11 +7620.0 + 21 +24790.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2694 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +6740.0 + 20 +22115.0 + 30 +0.0 + 0 +POINT + 5 +2695 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8500.0 + 20 +22115.0 + 30 +0.0 + 0 +POINT + 5 +2696 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8500.0 + 20 +24615.0 + 30 +0.0 + 0 +ENDBLK + 5 +2697 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D90 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D90 + 1 + + 0 +LINE + 5 +2699 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +2800.0 + 20 +9251.0 + 30 +0.0 + 11 +2800.0 + 21 +9614.0 + 31 +0.0 + 0 +INSERT + 5 +269A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +2800.0 + 20 +9250.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +269B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +2800.0 + 20 +9615.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +269C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +2712.5 + 20 +9323.125 + 30 +0.0 + 40 +175.0 + 1 +36 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +2625.0 + 21 +9432.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +269D + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5000.0 + 20 +9250.0 + 30 +0.0 + 0 +POINT + 5 +269E + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5000.0 + 20 +9615.0 + 30 +0.0 + 0 +POINT + 5 +269F + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +2800.0 + 20 +9615.0 + 30 +0.0 + 0 +ENDBLK + 5 +26A0 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D91 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D91 + 1 + + 0 +LINE + 5 +26A2 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +2800.0 + 20 +9616.0 + 30 +0.0 + 11 +2800.0 + 21 +14114.0 + 31 +0.0 + 0 +INSERT + 5 +26A3 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +2800.0 + 20 +9615.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +26A4 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +2800.0 + 20 +14115.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +26A5 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +2712.5 + 20 +11690.0 + 30 +0.0 + 40 +175.0 + 1 +4.51 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +2625.0 + 21 +11865.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +26A6 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5000.0 + 20 +9615.0 + 30 +0.0 + 0 +POINT + 5 +26A7 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5365.0 + 20 +14115.0 + 30 +0.0 + 0 +POINT + 5 +26A8 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +2800.0 + 20 +14115.0 + 30 +0.0 + 0 +ENDBLK + 5 +26A9 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D92 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D92 + 1 + + 0 +LINE + 5 +26AB + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +2800.0 + 20 +14116.0 + 30 +0.0 + 11 +2800.0 + 21 +14474.0 + 31 +0.0 + 0 +INSERT + 5 +26AC + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +2800.0 + 20 +14115.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +26AD + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +2800.0 + 20 +14475.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +26AE + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +2712.5 + 20 +14185.625 + 30 +0.0 + 40 +175.0 + 1 +36 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +2625.0 + 21 +14295.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +26AF + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5365.0 + 20 +14115.0 + 30 +0.0 + 0 +POINT + 5 +26B0 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5390.0 + 20 +14475.0 + 30 +0.0 + 0 +POINT + 5 +26B1 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +2800.0 + 20 +14475.0 + 30 +0.0 + 0 +ENDBLK + 5 +26B2 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D93 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D93 + 1 + + 0 +LINE + 5 +26B4 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +2800.0 + 20 +14476.0 + 30 +0.0 + 11 +2800.0 + 21 +16874.0 + 31 +0.0 + 0 +INSERT + 5 +26B5 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +2800.0 + 20 +14475.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +26B6 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +2800.0 + 20 +16875.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +26B7 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +2712.5 + 20 +15478.125 + 30 +0.0 + 40 +175.0 + 1 +2.38 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +2625.0 + 21 +15675.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +26B8 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5390.0 + 20 +14475.0 + 30 +0.0 + 0 +POINT + 5 +26B9 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5365.0 + 20 +16875.0 + 30 +0.0 + 0 +POINT + 5 +26BA + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +2800.0 + 20 +16875.0 + 30 +0.0 + 0 +ENDBLK + 5 +26BB + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D94 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D94 + 1 + + 0 +LINE + 5 +26BD + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +2800.0 + 20 +16876.0 + 30 +0.0 + 11 +2800.0 + 21 +17234.0 + 31 +0.0 + 0 +INSERT + 5 +26BE + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +2800.0 + 20 +16875.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +26BF + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +2800.0 + 20 +17235.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +26C0 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +2712.5 + 20 +16945.625 + 30 +0.0 + 40 +175.0 + 1 +36 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +2625.0 + 21 +17055.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +26C1 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5365.0 + 20 +16875.0 + 30 +0.0 + 0 +POINT + 5 +26C2 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5375.0 + 20 +17235.0 + 30 +0.0 + 0 +POINT + 5 +26C3 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +2800.0 + 20 +17235.0 + 30 +0.0 + 0 +ENDBLK + 5 +26C4 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D95 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D95 + 1 + + 0 +LINE + 5 +26C6 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +2800.0 + 20 +17236.0 + 30 +0.0 + 11 +2800.0 + 21 +21749.0 + 31 +0.0 + 0 +INSERT + 5 +26C7 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +2800.0 + 20 +17235.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +26C8 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +2800.0 + 20 +21750.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +26C9 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +2712.5 + 20 +19317.5 + 30 +0.0 + 40 +175.0 + 1 +4.51 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +2625.0 + 21 +19492.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +26CA + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5375.0 + 20 +17235.0 + 30 +0.0 + 0 +POINT + 5 +26CB + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5355.0 + 20 +21750.0 + 30 +0.0 + 0 +POINT + 5 +26CC + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +2800.0 + 20 +21750.0 + 30 +0.0 + 0 +ENDBLK + 5 +26CD + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D96 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D96 + 1 + + 0 +LINE + 5 +26CF + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +2800.0 + 20 +21751.0 + 30 +0.0 + 11 +2800.0 + 21 +22119.0 + 31 +0.0 + 0 +INSERT + 5 +26D0 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +2800.0 + 20 +21750.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +26D1 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +2800.0 + 20 +22120.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +26D2 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +2712.5 + 20 +21825.625 + 30 +0.0 + 40 +175.0 + 1 +36 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +2625.0 + 21 +21935.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +26D3 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5355.0 + 20 +21750.0 + 30 +0.0 + 0 +POINT + 5 +26D4 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5345.0 + 20 +22120.0 + 30 +0.0 + 0 +POINT + 5 +26D5 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +2800.0 + 20 +22120.0 + 30 +0.0 + 0 +ENDBLK + 5 +26D6 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D97 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D97 + 1 + + 0 +LINE + 5 +26D8 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +10121.0 + 20 +18105.0 + 30 +0.0 + 11 +13529.0 + 21 +18105.0 + 31 +0.0 + 0 +INSERT + 5 +26D9 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +10120.0 + 20 +18105.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +26DA + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +13530.0 + 20 +18105.0 + 30 +0.0 + 0 +TEXT + 5 +26DB + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +11650.0 + 20 +18192.5 + 30 +0.0 + 40 +175.0 + 1 +3.41 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +11825.0 + 21 +18280.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +26DC + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +10120.0 + 20 +17375.0 + 30 +0.0 + 0 +POINT + 5 +26DD + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +13530.0 + 20 +17375.0 + 30 +0.0 + 0 +POINT + 5 +26DE + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +13530.0 + 20 +18105.0 + 30 +0.0 + 0 +ENDBLK + 5 +26DF + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D98 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D98 + 1 + + 0 +LINE + 5 +26E1 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +14561.0 + 20 +18105.0 + 30 +0.0 + 11 +14884.0 + 21 +18105.0 + 31 +0.0 + 0 +INSERT + 5 +26E2 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +14560.0 + 20 +18105.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +26E3 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +14885.0 + 20 +18105.0 + 30 +0.0 + 0 +TEXT + 5 +26E4 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +14613.125 + 20 +18192.5 + 30 +0.0 + 40 +175.0 + 1 +32 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +14722.5 + 21 +18280.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +26E5 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +14560.0 + 20 +17375.0 + 30 +0.0 + 0 +POINT + 5 +26E6 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +14885.0 + 20 +17395.0 + 30 +0.0 + 0 +POINT + 5 +26E7 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +14885.0 + 20 +18105.0 + 30 +0.0 + 0 +ENDBLK + 5 +26E8 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D99 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D99 + 1 + + 0 +LINE + 5 +26EA + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +15236.0 + 20 +18110.0 + 30 +0.0 + 11 +15989.0 + 21 +18110.0 + 31 +0.0 + 0 +INSERT + 5 +26EB + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +15235.0 + 20 +18110.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +26EC + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +15990.0 + 20 +18110.0 + 30 +0.0 + 0 +TEXT + 5 +26ED + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +15503.125 + 20 +18197.5 + 30 +0.0 + 40 +175.0 + 1 +75 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +15612.5 + 21 +18285.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +26EE + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15235.0 + 20 +17380.0 + 30 +0.0 + 0 +POINT + 5 +26EF + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15990.0 + 20 +17380.0 + 30 +0.0 + 0 +POINT + 5 +26F0 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15990.0 + 20 +18110.0 + 30 +0.0 + 0 +ENDBLK + 5 +26F1 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D100 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D100 + 1 + + 0 +LINE + 5 +26F3 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +15991.0 + 20 +18110.0 + 30 +0.0 + 11 +16869.0 + 21 +18110.0 + 31 +0.0 + 0 +INSERT + 5 +26F4 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +15990.0 + 20 +18110.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +26F5 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16870.0 + 20 +18110.0 + 30 +0.0 + 0 +TEXT + 5 +26F6 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +16320.625 + 20 +18197.5 + 30 +0.0 + 40 +175.0 + 1 +88 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +16430.0 + 21 +18285.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +26F7 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15990.0 + 20 +17380.0 + 30 +0.0 + 0 +POINT + 5 +26F8 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16870.0 + 20 +17370.0 + 30 +0.0 + 0 +POINT + 5 +26F9 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16870.0 + 20 +18110.0 + 30 +0.0 + 0 +ENDBLK + 5 +26FA + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D101 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D101 + 1 + + 0 +LINE + 5 +26FC + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +16871.0 + 20 +18110.0 + 30 +0.0 + 11 +17624.0 + 21 +18110.0 + 31 +0.0 + 0 +INSERT + 5 +26FD + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16870.0 + 20 +18110.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +26FE + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +17625.0 + 20 +18110.0 + 30 +0.0 + 0 +TEXT + 5 +26FF + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +17138.125 + 20 +18197.5 + 30 +0.0 + 40 +175.0 + 1 +75 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +17247.5 + 21 +18285.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2700 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16870.0 + 20 +17370.0 + 30 +0.0 + 0 +POINT + 5 +2701 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17625.0 + 20 +17380.0 + 30 +0.0 + 0 +POINT + 5 +2702 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17625.0 + 20 +18110.0 + 30 +0.0 + 0 +ENDBLK + 5 +2703 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D102 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D102 + 1 + + 0 +LINE + 5 +2705 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +17986.0 + 20 +16810.0 + 30 +0.0 + 11 +21359.0 + 21 +16810.0 + 31 +0.0 + 0 +INSERT + 5 +2706 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +17985.0 + 20 +16810.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2707 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +21360.0 + 20 +16810.0 + 30 +0.0 + 0 +TEXT + 5 +2708 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +19475.625 + 20 +16897.5 + 30 +0.0 + 40 +175.0 + 1 +3.37 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +19672.5 + 21 +16985.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2709 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17985.0 + 20 +16005.0 + 30 +0.0 + 0 +POINT + 5 +270A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +21360.0 + 20 +16005.0 + 30 +0.0 + 0 +POINT + 5 +270B + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +21360.0 + 20 +16810.0 + 30 +0.0 + 0 +ENDBLK + 5 +270C + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D103 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D103 + 1 + + 0 +LINE + 5 +270E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +21361.0 + 20 +16810.0 + 30 +0.0 + 11 +22254.0 + 21 +16810.0 + 31 +0.0 + 0 +INSERT + 5 +270F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +21360.0 + 20 +16810.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2710 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +22255.0 + 20 +16810.0 + 30 +0.0 + 0 +TEXT + 5 +2711 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +21698.125 + 20 +16897.5 + 30 +0.0 + 40 +175.0 + 1 +88 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +21807.5 + 21 +16985.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2712 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +21360.0 + 20 +16005.0 + 30 +0.0 + 0 +POINT + 5 +2713 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +22255.0 + 20 +15975.0 + 30 +0.0 + 0 +POINT + 5 +2714 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +22255.0 + 20 +16810.0 + 30 +0.0 + 0 +ENDBLK + 5 +2715 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D104 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D104 + 1 + + 0 +LINE + 5 +2717 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +22256.0 + 20 +16810.0 + 30 +0.0 + 11 +22509.0 + 21 +16810.0 + 31 +0.0 + 0 +INSERT + 5 +2718 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +22255.0 + 20 +16810.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2719 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +22510.0 + 20 +16810.0 + 30 +0.0 + 0 +TEXT + 5 +271A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +22273.125 + 20 +16897.5 + 30 +0.0 + 40 +175.0 + 1 +25 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +22382.5 + 21 +16985.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +271B + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +22255.0 + 20 +15975.0 + 30 +0.0 + 0 +POINT + 5 +271C + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +22510.0 + 20 +16010.0 + 30 +0.0 + 0 +POINT + 5 +271D + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +22510.0 + 20 +16810.0 + 30 +0.0 + 0 +ENDBLK + 5 +271E + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D105 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D105 + 1 + + 0 +LINE + 5 +2720 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +24520.0 + 20 +15986.0 + 30 +0.0 + 11 +24520.0 + 21 +16244.0 + 31 +0.0 + 0 +INSERT + 5 +2721 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +24520.0 + 20 +15985.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +2722 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +24520.0 + 20 +16245.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +2723 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +24432.5 + 20 +16005.625 + 30 +0.0 + 40 +175.0 + 1 +25 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +24345.0 + 21 +16115.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2724 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +22865.0 + 20 +15985.0 + 30 +0.0 + 0 +POINT + 5 +2725 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +22865.0 + 20 +16245.0 + 30 +0.0 + 0 +POINT + 5 +2726 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +24520.0 + 20 +16245.0 + 30 +0.0 + 0 +ENDBLK + 5 +2727 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D106 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D106 + 1 + + 0 +LINE + 5 +2729 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +24520.0 + 20 +16246.0 + 30 +0.0 + 11 +24520.0 + 21 +17129.0 + 31 +0.0 + 0 +INSERT + 5 +272A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +24520.0 + 20 +16245.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +272B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +24520.0 + 20 +17130.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +272C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +24432.5 + 20 +16578.125 + 30 +0.0 + 40 +175.0 + 1 +88 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +24345.0 + 21 +16687.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +272D + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +22865.0 + 20 +16245.0 + 30 +0.0 + 0 +POINT + 5 +272E + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +22845.0 + 20 +17130.0 + 30 +0.0 + 0 +POINT + 5 +272F + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +24520.0 + 20 +17130.0 + 30 +0.0 + 0 +ENDBLK + 5 +2730 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D107 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D107 + 1 + + 0 +LINE + 5 +2732 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +24520.0 + 20 +17131.0 + 30 +0.0 + 11 +24520.0 + 21 +21739.0 + 31 +0.0 + 0 +INSERT + 5 +2733 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +24520.0 + 20 +17130.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +2734 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +24520.0 + 20 +21740.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +2735 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +24432.5 + 20 +19238.125 + 30 +0.0 + 40 +175.0 + 1 +4.62 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +24345.0 + 21 +19435.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2736 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +22845.0 + 20 +17130.0 + 30 +0.0 + 0 +POINT + 5 +2737 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +23355.0 + 20 +21740.0 + 30 +0.0 + 0 +POINT + 5 +2738 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +24520.0 + 20 +21740.0 + 30 +0.0 + 0 +ENDBLK + 5 +2739 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D108 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D108 + 1 + + 0 +LINE + 5 +273B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +28240.0 + 20 +9256.0 + 30 +0.0 + 11 +28240.0 + 21 +10359.0 + 31 +0.0 + 0 +INSERT + 5 +273C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +28240.0 + 20 +9255.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +273D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +28240.0 + 20 +10360.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +273E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +28152.5 + 20 +9676.25 + 30 +0.0 + 40 +175.0 + 1 +1.11 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +28065.0 + 21 +9807.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +273F + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26740.0 + 20 +9255.0 + 30 +0.0 + 0 +POINT + 5 +2740 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26740.0 + 20 +10360.0 + 30 +0.0 + 0 +POINT + 5 +2741 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +28240.0 + 20 +10360.0 + 30 +0.0 + 0 +ENDBLK + 5 +2742 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D109 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D109 + 1 + + 0 +LINE + 5 +2744 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +28240.0 + 20 +10361.0 + 30 +0.0 + 11 +28240.0 + 21 +12009.0 + 31 +0.0 + 0 +INSERT + 5 +2745 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +28240.0 + 20 +10360.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +2746 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +28240.0 + 20 +12010.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +2747 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +28152.5 + 20 +11010.0 + 30 +0.0 + 40 +175.0 + 1 +1.63 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +28065.0 + 21 +11185.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2748 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26740.0 + 20 +10360.0 + 30 +0.0 + 0 +POINT + 5 +2749 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26730.0 + 20 +12010.0 + 30 +0.0 + 0 +POINT + 5 +274A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +28240.0 + 20 +12010.0 + 30 +0.0 + 0 +ENDBLK + 5 +274B + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D110 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D110 + 1 + + 0 +LINE + 5 +274D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +28240.0 + 20 +12011.0 + 30 +0.0 + 11 +28240.0 + 21 +17729.0 + 31 +0.0 + 0 +INSERT + 5 +274E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +28240.0 + 20 +12010.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +274F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +28240.0 + 20 +17730.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +2750 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +28152.5 + 20 +14673.125 + 30 +0.0 + 40 +175.0 + 1 +5.74 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +28065.0 + 21 +14870.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2751 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26730.0 + 20 +12010.0 + 30 +0.0 + 0 +POINT + 5 +2752 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26725.0 + 20 +17730.0 + 30 +0.0 + 0 +POINT + 5 +2753 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +28240.0 + 20 +17730.0 + 30 +0.0 + 0 +ENDBLK + 5 +2754 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D111 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D111 + 1 + + 0 +LINE + 5 +2756 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +28240.0 + 20 +17731.0 + 30 +0.0 + 11 +28240.0 + 21 +18384.0 + 31 +0.0 + 0 +INSERT + 5 +2757 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +28240.0 + 20 +17730.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +2758 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +28240.0 + 20 +18385.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +2759 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +28152.5 + 20 +17948.125 + 30 +0.0 + 40 +175.0 + 1 +63 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +28065.0 + 21 +18057.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +275A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26725.0 + 20 +17730.0 + 30 +0.0 + 0 +POINT + 5 +275B + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26720.0 + 20 +18385.0 + 30 +0.0 + 0 +POINT + 5 +275C + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +28240.0 + 20 +18385.0 + 30 +0.0 + 0 +ENDBLK + 5 +275D + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D112 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D112 + 1 + + 0 +LINE + 5 +275F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +28240.0 + 20 +18386.0 + 30 +0.0 + 11 +28240.0 + 21 +22114.0 + 31 +0.0 + 0 +INSERT + 5 +2760 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +28240.0 + 20 +18385.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +2761 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +28240.0 + 20 +22115.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +2762 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +28152.5 + 20 +20053.125 + 30 +0.0 + 40 +175.0 + 1 +3.74 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +28065.0 + 21 +20250.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2763 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26720.0 + 20 +18385.0 + 30 +0.0 + 0 +POINT + 5 +2764 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26725.0 + 20 +22115.0 + 30 +0.0 + 0 +POINT + 5 +2765 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +28240.0 + 20 +22115.0 + 30 +0.0 + 0 +ENDBLK + 5 +2766 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D113 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D113 + 1 + + 0 +LINE + 5 +2768 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +28940.0 + 20 +9256.0 + 30 +0.0 + 11 +28940.0 + 21 +9614.0 + 31 +0.0 + 0 +INSERT + 5 +2769 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +28940.0 + 20 +9255.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +276A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +28940.0 + 20 +9615.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +276B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +28852.5 + 20 +9325.625 + 30 +0.0 + 40 +175.0 + 1 +36 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +28765.0 + 21 +9435.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +276C + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26685.0 + 20 +9255.0 + 30 +0.0 + 0 +POINT + 5 +276D + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26685.0 + 20 +9615.0 + 30 +0.0 + 0 +POINT + 5 +276E + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +28940.0 + 20 +9615.0 + 30 +0.0 + 0 +ENDBLK + 5 +276F + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D114 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D114 + 1 + + 0 +LINE + 5 +2771 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +28940.0 + 20 +9616.0 + 30 +0.0 + 11 +28940.0 + 21 +15624.0 + 31 +0.0 + 0 +INSERT + 5 +2772 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +28940.0 + 20 +9615.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +2773 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +28940.0 + 20 +15625.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +2774 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +28852.5 + 20 +12455.9375 + 30 +0.0 + 40 +175.0 + 1 +6.01 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +28765.0 + 21 +12620.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2775 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26685.0 + 20 +9615.0 + 30 +0.0 + 0 +POINT + 5 +2776 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26365.0 + 20 +15625.0 + 30 +0.0 + 0 +POINT + 5 +2777 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +28940.0 + 20 +15625.0 + 30 +0.0 + 0 +ENDBLK + 5 +2778 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D115 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D115 + 1 + + 0 +LINE + 5 +277A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +28940.0 + 20 +15626.0 + 30 +0.0 + 11 +28940.0 + 21 +15994.0 + 31 +0.0 + 0 +INSERT + 5 +277B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +28940.0 + 20 +15625.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +277C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +28940.0 + 20 +15995.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +277D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +28852.5 + 20 +15700.625 + 30 +0.0 + 40 +175.0 + 1 +36 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +28765.0 + 21 +15810.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +277E + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26365.0 + 20 +15625.0 + 30 +0.0 + 0 +POINT + 5 +277F + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26365.0 + 20 +15995.0 + 30 +0.0 + 0 +POINT + 5 +2780 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +28940.0 + 20 +15995.0 + 30 +0.0 + 0 +ENDBLK + 5 +2781 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D116 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D116 + 1 + + 0 +LINE + 5 +2783 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +28940.0 + 20 +15996.0 + 30 +0.0 + 11 +28940.0 + 21 +21744.0 + 31 +0.0 + 0 +INSERT + 5 +2784 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +28940.0 + 20 +15995.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +2785 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +28940.0 + 20 +21745.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +2786 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +28852.5 + 20 +18673.125 + 30 +0.0 + 40 +175.0 + 1 +5.76 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +28765.0 + 21 +18870.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2787 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26365.0 + 20 +15995.0 + 30 +0.0 + 0 +POINT + 5 +2788 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26370.0 + 20 +21745.0 + 30 +0.0 + 0 +POINT + 5 +2789 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +28940.0 + 20 +21745.0 + 30 +0.0 + 0 +ENDBLK + 5 +278A + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D117 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D117 + 1 + + 0 +LINE + 5 +278C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +28940.0 + 20 +21746.0 + 30 +0.0 + 11 +28940.0 + 21 +22114.0 + 31 +0.0 + 0 +INSERT + 5 +278D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +28940.0 + 20 +21745.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +278E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +28940.0 + 20 +22115.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +278F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +28852.5 + 20 +21820.625 + 30 +0.0 + 40 +175.0 + 1 +36 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +28765.0 + 21 +21930.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2790 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26370.0 + 20 +21745.0 + 30 +0.0 + 0 +POINT + 5 +2791 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26380.0 + 20 +22115.0 + 30 +0.0 + 0 +POINT + 5 +2792 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +28940.0 + 20 +22115.0 + 30 +0.0 + 0 +ENDBLK + 5 +2793 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D118 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D118 + 1 + + 0 +LINE + 5 +2795 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +29640.0 + 20 +9256.0 + 30 +0.0 + 11 +29640.0 + 21 +22114.0 + 31 +0.0 + 0 +INSERT + 5 +2796 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +29640.0 + 20 +9255.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +2797 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +29640.0 + 20 +22115.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +2798 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +29552.5 + 20 +15444.375 + 30 +0.0 + 40 +175.0 + 1 +12.86 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +29465.0 + 21 +15685.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2799 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26720.0 + 20 +9255.0 + 30 +0.0 + 0 +POINT + 5 +279A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26720.0 + 20 +22115.0 + 30 +0.0 + 0 +POINT + 5 +279B + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +29640.0 + 20 +22115.0 + 30 +0.0 + 0 +ENDBLK + 5 +279C + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D119 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D119 + 1 + + 0 +LINE + 5 +279E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +24520.0 + 20 +15624.0 + 30 +0.0 + 11 +24520.0 + 21 +15241.0 + 31 +0.0 + 0 +INSERT + 5 +279F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +24520.0 + 20 +15625.0 + 30 +0.0 + 50 +90.0 + 0 +INSERT + 5 +27A0 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +24520.0 + 20 +15240.0 + 30 +0.0 + 50 +270.0 + 0 +TEXT + 5 +27A1 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +24432.5 + 20 +15334.0625 + 30 +0.0 + 40 +175.0 + 1 +40 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +24345.0 + 21 +15432.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +27A2 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +22975.0 + 20 +15625.0 + 30 +0.0 + 0 +POINT + 5 +27A3 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +22975.0 + 20 +15240.0 + 30 +0.0 + 0 +POINT + 5 +27A4 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +24520.0 + 20 +15240.0 + 30 +0.0 + 0 +ENDBLK + 5 +27A5 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D120 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D120 + 1 + + 0 +LINE + 5 +27A7 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +24520.0 + 20 +15239.0 + 30 +0.0 + 11 +24520.0 + 21 +14361.0 + 31 +0.0 + 0 +INSERT + 5 +27A8 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +24520.0 + 20 +15240.0 + 30 +0.0 + 50 +90.0 + 0 +INSERT + 5 +27A9 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +24520.0 + 20 +14360.0 + 30 +0.0 + 50 +270.0 + 0 +TEXT + 5 +27AA + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +24432.5 + 20 +14690.625 + 30 +0.0 + 40 +175.0 + 1 +88 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +24345.0 + 21 +14800.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +27AB + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +22975.0 + 20 +15240.0 + 30 +0.0 + 0 +POINT + 5 +27AC + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +22960.0 + 20 +14360.0 + 30 +0.0 + 0 +POINT + 5 +27AD + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +24520.0 + 20 +14360.0 + 30 +0.0 + 0 +ENDBLK + 5 +27AE + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D121 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D121 + 1 + + 0 +LINE + 5 +27B0 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +24520.0 + 20 +14359.0 + 30 +0.0 + 11 +24520.0 + 21 +9626.0 + 31 +0.0 + 0 +INSERT + 5 +27B1 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +24520.0 + 20 +14360.0 + 30 +0.0 + 50 +90.0 + 0 +INSERT + 5 +27B2 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +24520.0 + 20 +9625.0 + 30 +0.0 + 50 +270.0 + 0 +TEXT + 5 +27B3 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +24432.5 + 20 +11795.625 + 30 +0.0 + 40 +175.0 + 1 +4.72 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +24345.0 + 21 +11992.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +27B4 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +22960.0 + 20 +14360.0 + 30 +0.0 + 0 +POINT + 5 +27B5 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +24375.0 + 20 +9625.0 + 30 +0.0 + 0 +POINT + 5 +27B6 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +24520.0 + 20 +9625.0 + 30 +0.0 + 0 +ENDBLK + 5 +27B7 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D122 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D122 + 1 + + 0 +LINE + 5 +27B9 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +13890.0 + 20 +17244.0 + 30 +0.0 + 11 +13890.0 + 21 +17243.0 + 31 +0.0 + 0 +LINE + 5 +27BA + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +13890.0 + 20 +17376.0 + 30 +0.0 + 11 +13890.0 + 21 +17377.0 + 31 +0.0 + 0 +LINE + 5 +27BB + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +13890.0 + 20 +17377.0 + 30 +0.0 + 11 +13890.0 + 21 +17552.0 + 31 +0.0 + 0 +INSERT + 5 +27BC + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +13890.0 + 20 +17245.0 + 30 +0.0 + 50 +90.0 + 0 +INSERT + 5 +27BD + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +13890.0 + 20 +17375.0 + 30 +0.0 + 50 +270.0 + 0 +TEXT + 5 +27BE + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +13802.5 + 20 +17377.0 + 30 +0.0 + 40 +175.0 + 1 +12 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +13715.0 + 21 +17464.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +27BF + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +14555.0 + 20 +17245.0 + 30 +0.0 + 0 +POINT + 5 +27C0 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +14555.0 + 20 +17375.0 + 30 +0.0 + 0 +POINT + 5 +27C1 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +13890.0 + 20 +17375.0 + 30 +0.0 + 0 +ENDBLK + 5 +27C2 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D123 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D123 + 1 + + 0 +LINE + 5 +27C4 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +13890.0 + 20 +17376.0 + 30 +0.0 + 11 +13890.0 + 21 +21749.0 + 31 +0.0 + 0 +INSERT + 5 +27C5 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +13890.0 + 20 +17375.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +27C6 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +13890.0 + 20 +21750.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +27C7 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +13802.5 + 20 +19365.625 + 30 +0.0 + 40 +175.0 + 1 +4.37 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +13715.0 + 21 +19562.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +27C8 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +14555.0 + 20 +17375.0 + 30 +0.0 + 0 +POINT + 5 +27C9 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +13890.0 + 20 +21750.0 + 30 +0.0 + 0 +POINT + 5 +27CA + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +13890.0 + 20 +21750.0 + 30 +0.0 + 0 +ENDBLK + 5 +27CB + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D124 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D124 + 1 + + 0 +LINE + 5 +27CD + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +10725.0 + 20 +15486.0 + 30 +0.0 + 11 +10725.0 + 21 +15739.0 + 31 +0.0 + 0 +INSERT + 5 +27CE + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +10725.0 + 20 +15485.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +27CF + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +10725.0 + 20 +15740.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +27D0 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +10637.5 + 20 +15503.125 + 30 +0.0 + 40 +175.0 + 1 +25 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +10550.0 + 21 +15612.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +27D1 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +10130.0 + 20 +15485.0 + 30 +0.0 + 0 +POINT + 5 +27D2 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +10130.0 + 20 +15740.0 + 30 +0.0 + 0 +POINT + 5 +27D3 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +10725.0 + 20 +15740.0 + 30 +0.0 + 0 +ENDBLK + 5 +27D4 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D125 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D125 + 1 + + 0 +LINE + 5 +27D6 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +10725.0 + 20 +16626.0 + 30 +0.0 + 11 +10725.0 + 21 +17254.0 + 31 +0.0 + 0 +INSERT + 5 +27D7 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +10725.0 + 20 +16625.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +27D8 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +10725.0 + 20 +17255.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +27D9 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +10637.5 + 20 +16830.625 + 30 +0.0 + 40 +175.0 + 1 +62 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +10550.0 + 21 +16940.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +27DA + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +10115.0 + 20 +16625.0 + 30 +0.0 + 0 +POINT + 5 +27DB + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +10715.0 + 20 +17255.0 + 30 +0.0 + 0 +POINT + 5 +27DC + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +10725.0 + 20 +17255.0 + 30 +0.0 + 0 +ENDBLK + 5 +27DD + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D126 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D126 + 1 + + 0 +LINE + 5 +27DF + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +8415.0 + 20 +16491.0 + 30 +0.0 + 11 +8415.0 + 21 +16879.0 + 31 +0.0 + 0 +INSERT + 5 +27E0 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +8415.0 + 20 +16490.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +27E1 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +8415.0 + 20 +16880.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +27E2 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +8327.5 + 20 +16586.5625 + 30 +0.0 + 40 +175.0 + 1 +40 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +8240.0 + 21 +16685.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +27E3 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7730.0 + 20 +16490.0 + 30 +0.0 + 0 +POINT + 5 +27E4 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8115.0 + 20 +16880.0 + 30 +0.0 + 0 +POINT + 5 +27E5 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8415.0 + 20 +16880.0 + 30 +0.0 + 0 +ENDBLK + 5 +27E6 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D127 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D127 + 1 + + 0 +LINE + 5 +27E8 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +8415.0 + 20 +15586.0 + 30 +0.0 + 11 +8415.0 + 21 +16489.0 + 31 +0.0 + 0 +INSERT + 5 +27E9 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +8415.0 + 20 +15585.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +27EA + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +8415.0 + 20 +16490.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +27EB + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +8327.5 + 20 +15928.125 + 30 +0.0 + 40 +175.0 + 1 +88 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +8240.0 + 21 +16037.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +27EC + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7730.0 + 20 +15585.0 + 30 +0.0 + 0 +POINT + 5 +27ED + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7730.0 + 20 +16490.0 + 30 +0.0 + 0 +POINT + 5 +27EE + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8415.0 + 20 +16490.0 + 30 +0.0 + 0 +ENDBLK + 5 +27EF + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D128 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D128 + 1 + + 0 +LINE + 5 +27F1 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +8415.0 + 20 +14491.0 + 30 +0.0 + 11 +8415.0 + 21 +15584.0 + 31 +0.0 + 0 +INSERT + 5 +27F2 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +8415.0 + 20 +14490.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +27F3 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +8415.0 + 20 +15585.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +27F4 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +8327.5 + 20 +14895.3125 + 30 +0.0 + 40 +175.0 + 1 +1.10 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +8240.0 + 21 +15037.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +27F5 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7730.0 + 20 +14490.0 + 30 +0.0 + 0 +POINT + 5 +27F6 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7730.0 + 20 +15585.0 + 30 +0.0 + 0 +POINT + 5 +27F7 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8415.0 + 20 +15585.0 + 30 +0.0 + 0 +ENDBLK + 5 +27F8 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D129 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D129 + 1 + + 0 +LINE + 5 +27FA + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +8405.0 + 20 +19981.0 + 30 +0.0 + 11 +8405.0 + 21 +20874.0 + 31 +0.0 + 0 +INSERT + 5 +27FB + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +8405.0 + 20 +19980.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +27FC + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +8405.0 + 20 +20875.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +27FD + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +8317.5 + 20 +20318.125 + 30 +0.0 + 40 +175.0 + 1 +88 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +8230.0 + 21 +20427.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +27FE + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9750.0 + 20 +19980.0 + 30 +0.0 + 0 +POINT + 5 +27FF + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9755.0 + 20 +20875.0 + 30 +0.0 + 0 +POINT + 5 +2800 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8405.0 + 20 +20875.0 + 30 +0.0 + 0 +ENDBLK + 5 +2801 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D130 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D130 + 1 + + 0 +LINE + 5 +2803 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +8405.0 + 20 +20876.0 + 30 +0.0 + 11 +8405.0 + 21 +21749.0 + 31 +0.0 + 0 +INSERT + 5 +2804 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +8405.0 + 20 +20875.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +2805 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +8405.0 + 20 +21750.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +2806 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +8317.5 + 20 +21203.125 + 30 +0.0 + 40 +175.0 + 1 +87 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +8230.0 + 21 +21312.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2807 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9755.0 + 20 +20875.0 + 30 +0.0 + 0 +POINT + 5 +2808 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9740.0 + 20 +21750.0 + 30 +0.0 + 0 +POINT + 5 +2809 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8405.0 + 20 +21750.0 + 30 +0.0 + 0 +ENDBLK + 5 +280A + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D131 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D131 + 1 + + 0 +LINE + 5 +280C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +8405.0 + 20 +17266.0 + 30 +0.0 + 11 +8405.0 + 21 +19979.0 + 31 +0.0 + 0 +INSERT + 5 +280D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +8405.0 + 20 +17265.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +280E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +8405.0 + 20 +19980.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +280F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +8317.5 + 20 +18031.875 + 30 +0.0 + 40 +175.0 + 1 + 2.75 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +8230.0 + 21 +18622.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2810 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9750.0 + 20 +17265.0 + 30 +0.0 + 0 +POINT + 5 +2811 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9750.0 + 20 +19980.0 + 30 +0.0 + 0 +POINT + 5 +2812 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8405.0 + 20 +19980.0 + 30 +0.0 + 0 +ENDBLK + 5 +2813 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D132 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D132 + 1 + + 0 +LINE + 5 +2815 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +15746.0 + 20 +16480.0 + 30 +0.0 + 11 +16374.0 + 21 +16480.0 + 31 +0.0 + 0 +INSERT + 5 +2816 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +15745.0 + 20 +16480.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2817 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16375.0 + 20 +16480.0 + 30 +0.0 + 0 +TEXT + 5 +2818 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +15972.5 + 20 +16567.5 + 30 +0.0 + 40 +175.0 + 1 +61 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +16060.0 + 21 +16655.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2819 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15745.0 + 20 +15815.0 + 30 +0.0 + 0 +POINT + 5 +281A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16375.0 + 20 +15815.0 + 30 +0.0 + 0 +POINT + 5 +281B + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16375.0 + 20 +16480.0 + 30 +0.0 + 0 +ENDBLK + 5 +281C + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D133 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D133 + 1 + + 0 +LINE + 5 +281E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +17386.0 + 20 +16480.0 + 30 +0.0 + 11 +17634.0 + 21 +16480.0 + 31 +0.0 + 0 +INSERT + 5 +281F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +17385.0 + 20 +16480.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2820 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +17635.0 + 20 +16480.0 + 30 +0.0 + 0 +TEXT + 5 +2821 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +17400.625 + 20 +16567.5 + 30 +0.0 + 40 +175.0 + 1 +25 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +17510.0 + 21 +16655.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2822 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17385.0 + 20 +15975.0 + 30 +0.0 + 0 +POINT + 5 +2823 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17635.0 + 20 +16015.0 + 30 +0.0 + 0 +POINT + 5 +2824 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17635.0 + 20 +16480.0 + 30 +0.0 + 0 +ENDBLK + 5 +2825 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D134 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D134 + 1 + + 0 +LINE + 5 +2827 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +16376.0 + 20 +16480.0 + 30 +0.0 + 11 +17384.0 + 21 +16480.0 + 31 +0.0 + 0 +INSERT + 5 +2828 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16375.0 + 20 +16480.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2829 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +17385.0 + 20 +16480.0 + 30 +0.0 + 0 +TEXT + 5 +282A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +16737.8125 + 20 +16567.5 + 30 +0.0 + 40 +175.0 + 1 +1.01 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +16880.0 + 21 +16655.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +282B + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16375.0 + 20 +15815.0 + 30 +0.0 + 0 +POINT + 5 +282C + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17385.0 + 20 +15975.0 + 30 +0.0 + 0 +POINT + 5 +282D + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17385.0 + 20 +16480.0 + 30 +0.0 + 0 +ENDBLK + 5 +282E + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D135 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D135 + 1 + + 0 +LINE + 5 +2830 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +10725.0 + 20 +15741.0 + 30 +0.0 + 11 +10725.0 + 21 +16624.0 + 31 +0.0 + 0 +INSERT + 5 +2831 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +10725.0 + 20 +15740.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +2832 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +10725.0 + 20 +16625.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +2833 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +10637.5 + 20 +15870.625 + 30 +0.0 + 40 +175.0 + 1 +88 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +10550.0 + 21 +15980.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2834 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +10130.0 + 20 +15740.0 + 30 +0.0 + 0 +POINT + 5 +2835 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +10115.0 + 20 +16625.0 + 30 +0.0 + 0 +POINT + 5 +2836 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +10725.0 + 20 +16625.0 + 30 +0.0 + 0 +ENDBLK + 5 +2837 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D136 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D136 + 1 + + 0 +LINE + 5 +2839 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +10106.0 + 20 +16480.0 + 30 +0.0 + 11 +15744.0 + 21 +16480.0 + 31 +0.0 + 0 +INSERT + 5 +283A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +10105.0 + 20 +16480.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +283B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +15745.0 + 20 +16480.0 + 30 +0.0 + 0 +TEXT + 5 +283C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +12728.125 + 20 +16567.5 + 30 +0.0 + 40 +175.0 + 1 +5.63 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +12925.0 + 21 +16655.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +283D + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +10105.0 + 20 +15495.0 + 30 +0.0 + 0 +POINT + 5 +283E + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15745.0 + 20 +15495.0 + 30 +0.0 + 0 +POINT + 5 +283F + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15745.0 + 20 +16480.0 + 30 +0.0 + 0 +ENDBLK + 5 +2840 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D137 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D137 + 1 + + 0 +LINE + 5 +2842 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +18650.0 + 20 +21744.0 + 30 +0.0 + 11 +18650.0 + 21 +18981.0 + 31 +0.0 + 0 +INSERT + 5 +2843 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18650.0 + 20 +21745.0 + 30 +0.0 + 50 +90.0 + 0 +INSERT + 5 +2844 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18650.0 + 20 +18980.0 + 30 +0.0 + 50 +270.0 + 0 +TEXT + 5 +2845 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +18562.5 + 20 +20165.625 + 30 +0.0 + 40 +175.0 + 1 +2.76 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +18475.0 + 21 +20362.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2846 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17990.0 + 20 +21745.0 + 30 +0.0 + 0 +POINT + 5 +2847 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17990.0 + 20 +18980.0 + 30 +0.0 + 0 +POINT + 5 +2848 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +18650.0 + 20 +18980.0 + 30 +0.0 + 0 +ENDBLK + 5 +2849 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D138 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D138 + 1 + + 0 +LINE + 5 +284B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +18650.0 + 20 +18979.0 + 30 +0.0 + 11 +18650.0 + 21 +17491.0 + 31 +0.0 + 0 +INSERT + 5 +284C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18650.0 + 20 +18980.0 + 30 +0.0 + 50 +90.0 + 0 +INSERT + 5 +284D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18650.0 + 20 +17490.0 + 30 +0.0 + 50 +270.0 + 0 +TEXT + 5 +284E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +18562.5 + 20 +18060.0 + 30 +0.0 + 40 +175.0 + 1 +1.49 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +18475.0 + 21 +18235.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +284F + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17990.0 + 20 +18980.0 + 30 +0.0 + 0 +POINT + 5 +2850 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17990.0 + 20 +17490.0 + 30 +0.0 + 0 +POINT + 5 +2851 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +18650.0 + 20 +17490.0 + 30 +0.0 + 0 +ENDBLK + 5 +2852 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D139 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D139 + 1 + + 0 +LINE + 5 +2854 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +15005.0 + 20 +15486.0 + 30 +0.0 + 11 +15005.0 + 21 +15994.0 + 31 +0.0 + 0 +INSERT + 5 +2855 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +15005.0 + 20 +15485.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +2856 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +15005.0 + 20 +15995.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +2857 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +14917.5 + 20 +15641.5625 + 30 +0.0 + 40 +175.0 + 1 +50 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +14830.0 + 21 +15740.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2858 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15005.0 + 20 +15485.0 + 30 +0.0 + 0 +POINT + 5 +2859 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15005.0 + 20 +15995.0 + 30 +0.0 + 0 +POINT + 5 +285A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15005.0 + 20 +15995.0 + 30 +0.0 + 0 +ENDBLK + 5 +285B + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D140 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D140 + 1 + + 0 +LINE + 5 +285D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +15005.0 + 20 +15996.0 + 30 +0.0 + 11 +15005.0 + 21 +17249.0 + 31 +0.0 + 0 +INSERT + 5 +285E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +15005.0 + 20 +15995.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +285F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +15005.0 + 20 +17250.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +2860 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +14917.5 + 20 +16580.0 + 30 +0.0 + 40 +175.0 + 1 +1.26 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +14830.0 + 21 +16755.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2861 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15005.0 + 20 +15995.0 + 30 +0.0 + 0 +POINT + 5 +2862 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15010.0 + 20 +17250.0 + 30 +0.0 + 0 +POINT + 5 +2863 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15005.0 + 20 +17250.0 + 30 +0.0 + 0 +ENDBLK + 5 +2864 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D141 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D141 + 1 + + 0 +LINE + 5 +2866 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +8745.0 + 20 +9611.0 + 30 +0.0 + 11 +8745.0 + 21 +12739.0 + 31 +0.0 + 0 +INSERT + 5 +2867 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +8745.0 + 20 +9610.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +2868 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +8745.0 + 20 +12740.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +2869 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +8657.5 + 20 +11000.0 + 30 +0.0 + 40 +175.0 + 1 +3.12 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +8570.0 + 21 +11175.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +286A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9010.0 + 20 +9610.0 + 30 +0.0 + 0 +POINT + 5 +286B + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9010.0 + 20 +12740.0 + 30 +0.0 + 0 +POINT + 5 +286C + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8745.0 + 20 +12740.0 + 30 +0.0 + 0 +ENDBLK + 5 +286D + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D142 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D142 + 1 + + 0 +LINE + 5 +286F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +8745.0 + 20 +12741.0 + 30 +0.0 + 11 +8745.0 + 21 +12994.0 + 31 +0.0 + 0 +INSERT + 5 +2870 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +8745.0 + 20 +12740.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +2871 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +8745.0 + 20 +12995.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +2872 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +8657.5 + 20 +12758.125 + 30 +0.0 + 40 +175.0 + 1 +25 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +8570.0 + 21 +12867.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2873 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9010.0 + 20 +12740.0 + 30 +0.0 + 0 +POINT + 5 +2874 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9745.0 + 20 +12995.0 + 30 +0.0 + 0 +POINT + 5 +2875 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8745.0 + 20 +12995.0 + 30 +0.0 + 0 +ENDBLK + 5 +2876 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D143 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D143 + 1 + + 0 +LINE + 5 +2878 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +8745.0 + 20 +12996.0 + 30 +0.0 + 11 +8745.0 + 21 +13874.0 + 31 +0.0 + 0 +INSERT + 5 +2879 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +8745.0 + 20 +12995.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +287A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +8745.0 + 20 +13875.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +287B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +8657.5 + 20 +13325.625 + 30 +0.0 + 40 +175.0 + 1 +88 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +8570.0 + 21 +13435.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +287C + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9745.0 + 20 +12995.0 + 30 +0.0 + 0 +POINT + 5 +287D + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9755.0 + 20 +13875.0 + 30 +0.0 + 0 +POINT + 5 +287E + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8745.0 + 20 +13875.0 + 30 +0.0 + 0 +ENDBLK + 5 +287F + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D144 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D144 + 1 + + 0 +LINE + 5 +2881 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +8745.0 + 20 +13876.0 + 30 +0.0 + 11 +8745.0 + 21 +14129.0 + 31 +0.0 + 0 +INSERT + 5 +2882 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +8745.0 + 20 +13875.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +2883 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +8745.0 + 20 +14130.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +2884 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +8657.5 + 20 +13893.125 + 30 +0.0 + 40 +175.0 + 1 +25 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +8570.0 + 21 +14002.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2885 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9755.0 + 20 +13875.0 + 30 +0.0 + 0 +POINT + 5 +2886 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9735.0 + 20 +14130.0 + 30 +0.0 + 0 +POINT + 5 +2887 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8745.0 + 20 +14130.0 + 30 +0.0 + 0 +ENDBLK + 5 +2888 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D145 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D145 + 1 + + 0 +LINE + 5 +288A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9371.0 + 20 +13450.0 + 30 +0.0 + 11 +9744.0 + 21 +13450.0 + 31 +0.0 + 0 +INSERT + 5 +288B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9370.0 + 20 +13450.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +288C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9745.0 + 20 +13450.0 + 30 +0.0 + 0 +TEXT + 5 +288D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9448.125 + 20 +13537.5 + 30 +0.0 + 40 +175.0 + 1 +37 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +9557.5 + 21 +13625.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +288E + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9370.0 + 20 +12745.0 + 30 +0.0 + 0 +POINT + 5 +288F + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9745.0 + 20 +12745.0 + 30 +0.0 + 0 +POINT + 5 +2890 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9745.0 + 20 +13450.0 + 30 +0.0 + 0 +ENDBLK + 5 +2891 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D146 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D146 + 1 + + 0 +LINE + 5 +2893 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +12616.0 + 20 +11975.0 + 30 +0.0 + 11 +13247.5 + 21 +11975.0 + 31 +0.0 + 0 +LINE + 5 +2894 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +13879.0 + 20 +11975.0 + 30 +0.0 + 11 +13247.5 + 21 +11975.0 + 31 +0.0 + 0 +INSERT + 5 +2895 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +12615.0 + 20 +11975.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2896 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +13880.0 + 20 +11975.0 + 30 +0.0 + 0 +TEXT + 5 +2897 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +12850.0 + 20 +12062.5 + 30 +0.0 + 40 +175.0 + 1 +1.26 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +13025.0 + 21 +12150.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2898 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +12615.0 + 20 +12370.0 + 30 +0.0 + 0 +POINT + 5 +2899 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +13880.0 + 20 +11955.0 + 30 +0.0 + 0 +POINT + 5 +289A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +13880.0 + 20 +11975.0 + 30 +0.0 + 0 +ENDBLK + 5 +289B + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D147 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D147 + 1 + + 0 +LINE + 5 +289D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +13590.0 + 20 +9611.0 + 30 +0.0 + 11 +13590.0 + 21 +12374.0 + 31 +0.0 + 0 +INSERT + 5 +289E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +13590.0 + 20 +9610.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +289F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +13590.0 + 20 +12375.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +28A0 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +13502.5 + 20 +10795.625 + 30 +0.0 + 40 +175.0 + 1 +2.76 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +13415.0 + 21 +10992.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +28A1 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +13775.0 + 20 +9610.0 + 30 +0.0 + 0 +POINT + 5 +28A2 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +13775.0 + 20 +12375.0 + 30 +0.0 + 0 +POINT + 5 +28A3 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +13590.0 + 20 +12375.0 + 30 +0.0 + 0 +ENDBLK + 5 +28A4 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D148 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D148 + 1 + + 0 +LINE + 5 +28A6 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +13590.0 + 20 +12376.0 + 30 +0.0 + 11 +13590.0 + 21 +12744.0 + 31 +0.0 + 0 +INSERT + 5 +28A7 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +13590.0 + 20 +12375.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +28A8 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +13590.0 + 20 +12745.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +28A9 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +13502.5 + 20 +12450.625 + 30 +0.0 + 40 +175.0 + 1 +36 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +13415.0 + 21 +12560.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +28AA + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +13775.0 + 20 +12375.0 + 30 +0.0 + 0 +POINT + 5 +28AB + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +13875.0 + 20 +12745.0 + 30 +0.0 + 0 +POINT + 5 +28AC + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +13590.0 + 20 +12745.0 + 30 +0.0 + 0 +ENDBLK + 5 +28AD + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D149 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D149 + 1 + + 0 +LINE + 5 +28AF + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +13590.0 + 20 +12746.0 + 30 +0.0 + 11 +13590.0 + 21 +13499.0 + 31 +0.0 + 0 +INSERT + 5 +28B0 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +13590.0 + 20 +12745.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +28B1 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +13590.0 + 20 +13500.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +28B2 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +13502.5 + 20 +13013.125 + 30 +0.0 + 40 +175.0 + 1 +76 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +13415.0 + 21 +13122.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +28B3 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +13880.0 + 20 +12745.0 + 30 +0.0 + 0 +POINT + 5 +28B4 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +13880.0 + 20 +13500.0 + 30 +0.0 + 0 +POINT + 5 +28B5 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +13590.0 + 20 +13500.0 + 30 +0.0 + 0 +ENDBLK + 5 +28B6 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D150 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D150 + 1 + + 0 +LINE + 5 +28B8 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +13590.0 + 20 +13501.0 + 30 +0.0 + 11 +13590.0 + 21 +13869.0 + 31 +0.0 + 0 +INSERT + 5 +28B9 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +13590.0 + 20 +13500.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +28BA + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +13590.0 + 20 +13870.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +28BB + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +13502.5 + 20 +13575.625 + 30 +0.0 + 40 +175.0 + 1 +36 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +13415.0 + 21 +13685.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +28BC + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +13880.0 + 20 +13500.0 + 30 +0.0 + 0 +POINT + 5 +28BD + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +14125.0 + 20 +13870.0 + 30 +0.0 + 0 +POINT + 5 +28BE + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +13590.0 + 20 +13870.0 + 30 +0.0 + 0 +ENDBLK + 5 +28BF + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D151 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D151 + 1 + + 0 +LINE + 5 +28C1 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +14484.0 + 20 +11975.0 + 30 +0.0 + 11 +14483.0 + 21 +11975.0 + 31 +0.0 + 0 +LINE + 5 +28C2 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +14621.0 + 20 +11975.0 + 30 +0.0 + 11 +14622.0 + 21 +11975.0 + 31 +0.0 + 0 +LINE + 5 +28C3 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +14622.0 + 20 +11975.0 + 30 +0.0 + 11 +14797.0 + 21 +11975.0 + 31 +0.0 + 0 +INSERT + 5 +28C4 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +14485.0 + 20 +11975.0 + 30 +0.0 + 0 +INSERT + 5 +28C5 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +14620.0 + 20 +11975.0 + 30 +0.0 + 50 +180.0 + 0 +TEXT + 5 +28C6 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +14622.0 + 20 +12062.5 + 30 +0.0 + 40 +175.0 + 1 +12 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +14709.5 + 21 +12150.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +28C7 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +14485.0 + 20 +13495.0 + 30 +0.0 + 0 +POINT + 5 +28C8 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +14620.0 + 20 +13495.0 + 30 +0.0 + 0 +POINT + 5 +28C9 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +14620.0 + 20 +11975.0 + 30 +0.0 + 0 +ENDBLK + 5 +28CA + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D152 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D152 + 1 + + 0 +LINE + 5 +28CC + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +15506.0 + 20 +11975.0 + 30 +0.0 + 11 +17619.0 + 21 +11975.0 + 31 +0.0 + 0 +INSERT + 5 +28CD + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +15505.0 + 20 +11975.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +28CE + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +17620.0 + 20 +11975.0 + 30 +0.0 + 0 +TEXT + 5 +28CF + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +16387.5 + 20 +12062.5 + 30 +0.0 + 40 +175.0 + 1 +2.12 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +16562.5 + 21 +12150.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +28D0 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15505.0 + 20 +11975.0 + 30 +0.0 + 0 +POINT + 5 +28D1 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17620.0 + 20 +11975.0 + 30 +0.0 + 0 +POINT + 5 +28D2 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17620.0 + 20 +11975.0 + 30 +0.0 + 0 +ENDBLK + 5 +28D3 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D153 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D153 + 1 + + 0 +LINE + 5 +28D5 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +16955.0 + 20 +9626.0 + 30 +0.0 + 11 +16955.0 + 21 +13499.0 + 31 +0.0 + 0 +INSERT + 5 +28D6 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16955.0 + 20 +9625.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +28D7 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16955.0 + 20 +13500.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +28D8 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +16867.5 + 20 +10923.125 + 30 +0.0 + 40 +175.0 + 1 +3.88 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +16780.0 + 21 +11120.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +28D9 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17360.0 + 20 +9625.0 + 30 +0.0 + 0 +POINT + 5 +28DA + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17360.0 + 20 +13500.0 + 30 +0.0 + 0 +POINT + 5 +28DB + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16955.0 + 20 +13500.0 + 30 +0.0 + 0 +ENDBLK + 5 +28DC + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D154 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D154 + 1 + + 0 +LINE + 5 +28DE + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +16850.0 + 20 +15634.0 + 30 +0.0 + 11 +16850.0 + 21 +15491.0 + 31 +0.0 + 0 +INSERT + 5 +28DF + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16850.0 + 20 +15635.0 + 30 +0.0 + 50 +90.0 + 0 +INSERT + 5 +28E0 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16850.0 + 20 +15490.0 + 30 +0.0 + 50 +270.0 + 0 +TEXT + 5 +28E1 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +16762.5 + 20 +15667.5 + 30 +0.0 + 40 +175.0 + 1 +13 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +16675.0 + 21 +15755.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +28E2 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16120.0 + 20 +15635.0 + 30 +0.0 + 0 +POINT + 5 +28E3 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16120.0 + 20 +15490.0 + 30 +0.0 + 0 +POINT + 5 +28E4 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16850.0 + 20 +15490.0 + 30 +0.0 + 0 +ENDBLK + 5 +28E5 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D155 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D155 + 1 + + 0 +LINE + 5 +28E7 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +16850.0 + 20 +13974.0 + 30 +0.0 + 11 +16850.0 + 21 +13866.0 + 31 +0.0 + 0 +INSERT + 5 +28E8 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16850.0 + 20 +13975.0 + 30 +0.0 + 50 +90.0 + 0 +INSERT + 5 +28E9 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16850.0 + 20 +13865.0 + 30 +0.0 + 50 +270.0 + 0 +TEXT + 5 +28EA + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +16762.5 + 20 +14012.5 + 30 +0.0 + 40 +175.0 + 1 +12 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +16675.0 + 21 +14100.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +28EB + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16125.0 + 20 +13975.0 + 30 +0.0 + 0 +POINT + 5 +28EC + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16120.0 + 20 +13865.0 + 30 +0.0 + 0 +POINT + 5 +28ED + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16850.0 + 20 +13865.0 + 30 +0.0 + 0 +ENDBLK + 5 +28EE + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D156 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D156 + 1 + + 0 +LINE + 5 +28F0 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +15746.0 + 20 +14495.0 + 30 +0.0 + 11 +16104.0 + 21 +14495.0 + 31 +0.0 + 0 +INSERT + 5 +28F1 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +15745.0 + 20 +14495.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +28F2 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16105.0 + 20 +14495.0 + 30 +0.0 + 0 +TEXT + 5 +28F3 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +15815.625 + 20 +14582.5 + 30 +0.0 + 40 +175.0 + 1 +36 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +15925.0 + 21 +14670.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +28F4 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15745.0 + 20 +13980.0 + 30 +0.0 + 0 +POINT + 5 +28F5 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16105.0 + 20 +13980.0 + 30 +0.0 + 0 +POINT + 5 +28F6 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16105.0 + 20 +14495.0 + 30 +0.0 + 0 +ENDBLK + 5 +28F7 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D157 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D157 + 1 + + 0 +LINE + 5 +28F9 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +21880.0 + 20 +13914.0 + 30 +0.0 + 11 +21880.0 + 21 +9626.0 + 31 +0.0 + 0 +INSERT + 5 +28FA + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +21880.0 + 20 +13915.0 + 30 +0.0 + 50 +90.0 + 0 +INSERT + 5 +28FB + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +21880.0 + 20 +9625.0 + 30 +0.0 + 50 +270.0 + 0 +TEXT + 5 +28FC + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +21792.5 + 20 +11584.0625 + 30 +0.0 + 40 +175.0 + 1 +4.30 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +21705.0 + 21 +11770.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +28FD + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +21565.0 + 20 +13915.0 + 30 +0.0 + 0 +POINT + 5 +28FE + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +21855.0 + 20 +9625.0 + 30 +0.0 + 0 +POINT + 5 +28FF + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +21880.0 + 20 +9625.0 + 30 +0.0 + 0 +ENDBLK + 5 +2900 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D158 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D158 + 1 + + 0 +LINE + 5 +2902 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +21880.0 + 20 +14044.0 + 30 +0.0 + 11 +21880.0 + 21 +13916.0 + 31 +0.0 + 0 +INSERT + 5 +2903 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +21880.0 + 20 +14045.0 + 30 +0.0 + 50 +90.0 + 0 +INSERT + 5 +2904 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +21880.0 + 20 +13915.0 + 30 +0.0 + 50 +270.0 + 0 +TEXT + 5 +2905 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +21792.5 + 20 +13627.5 + 30 +0.0 + 40 +175.0 + 1 +12 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +21705.0 + 21 +13715.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2906 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +21560.0 + 20 +14045.0 + 30 +0.0 + 0 +POINT + 5 +2907 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +21565.0 + 20 +13915.0 + 30 +0.0 + 0 +POINT + 5 +2908 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +21880.0 + 20 +13915.0 + 30 +0.0 + 0 +ENDBLK + 5 +2909 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D159 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D159 + 1 + + 0 +LINE + 5 +290B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +21880.0 + 20 +15249.0 + 30 +0.0 + 11 +21880.0 + 21 +14246.0 + 31 +0.0 + 0 +INSERT + 5 +290C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +21880.0 + 20 +15250.0 + 30 +0.0 + 50 +90.0 + 0 +INSERT + 5 +290D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +21880.0 + 20 +14245.0 + 30 +0.0 + 50 +270.0 + 0 +TEXT + 5 +290E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +21792.5 + 20 +14772.8125 + 30 +0.0 + 40 +175.0 + 1 +1.01 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +21705.0 + 21 +14915.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +290F + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +21235.0 + 20 +15250.0 + 30 +0.0 + 0 +POINT + 5 +2910 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +21225.0 + 20 +14245.0 + 30 +0.0 + 0 +POINT + 5 +2911 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +21880.0 + 20 +14245.0 + 30 +0.0 + 0 +ENDBLK + 5 +2912 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D160 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D160 + 1 + + 0 +LINE + 5 +2914 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +21880.0 + 20 +14244.0 + 30 +0.0 + 11 +21880.0 + 21 +14046.0 + 31 +0.0 + 0 +INSERT + 5 +2915 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +21880.0 + 20 +14245.0 + 30 +0.0 + 50 +90.0 + 0 +INSERT + 5 +2916 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +21880.0 + 20 +14045.0 + 30 +0.0 + 50 +270.0 + 0 +TEXT + 5 +2917 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +21792.5 + 20 +14291.5625 + 30 +0.0 + 40 +175.0 + 1 +20 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +21705.0 + 21 +14390.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2918 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +21225.0 + 20 +14245.0 + 30 +0.0 + 0 +POINT + 5 +2919 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +21560.0 + 20 +14045.0 + 30 +0.0 + 0 +POINT + 5 +291A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +21880.0 + 20 +14045.0 + 30 +0.0 + 0 +ENDBLK + 5 +291B + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D161 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D161 + 1 + + 0 +LINE + 5 +291D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +21880.0 + 20 +15634.0 + 30 +0.0 + 11 +21880.0 + 21 +15251.0 + 31 +0.0 + 0 +INSERT + 5 +291E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +21880.0 + 20 +15635.0 + 30 +0.0 + 50 +90.0 + 0 +INSERT + 5 +291F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +21880.0 + 20 +15250.0 + 30 +0.0 + 50 +270.0 + 0 +TEXT + 5 +2920 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +21792.5 + 20 +15280.625 + 30 +0.0 + 40 +175.0 + 1 +37 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +21705.0 + 21 +15390.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2921 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +21235.0 + 20 +15635.0 + 30 +0.0 + 0 +POINT + 5 +2922 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +21235.0 + 20 +15250.0 + 30 +0.0 + 0 +POINT + 5 +2923 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +21880.0 + 20 +15250.0 + 30 +0.0 + 0 +ENDBLK + 5 +2924 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D162 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D162 + 1 + + 0 +LINE + 5 +2926 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +22456.0 + 20 +12880.0 + 30 +0.0 + 11 +22849.0 + 21 +12880.0 + 31 +0.0 + 0 +INSERT + 5 +2927 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +22455.0 + 20 +12880.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2928 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +22850.0 + 20 +12880.0 + 30 +0.0 + 0 +TEXT + 5 +2929 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +22554.0625 + 20 +12967.5 + 30 +0.0 + 40 +175.0 + 1 +40 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +22652.5 + 21 +13055.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +292A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +22455.0 + 20 +13925.0 + 30 +0.0 + 0 +POINT + 5 +292B + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +22850.0 + 20 +12875.0 + 30 +0.0 + 0 +POINT + 5 +292C + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +22850.0 + 20 +12880.0 + 30 +0.0 + 0 +ENDBLK + 5 +292D + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D163 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D163 + 1 + + 0 +LINE + 5 +292F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +21566.0 + 20 +12880.0 + 30 +0.0 + 11 +22454.0 + 21 +12880.0 + 31 +0.0 + 0 +INSERT + 5 +2930 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +21565.0 + 20 +12880.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2931 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +22455.0 + 20 +12880.0 + 30 +0.0 + 0 +TEXT + 5 +2932 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +22030.625 + 20 +12967.5 + 30 +0.0 + 40 +175.0 + 1 +88 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +22140.0 + 21 +13055.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2933 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +21565.0 + 20 +13920.0 + 30 +0.0 + 0 +POINT + 5 +2934 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +22455.0 + 20 +13925.0 + 30 +0.0 + 0 +POINT + 5 +2935 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +22455.0 + 20 +12880.0 + 30 +0.0 + 0 +ENDBLK + 5 +2936 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D164 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D164 + 1 + + 0 +LINE + 5 +2938 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +21236.0 + 20 +12880.0 + 30 +0.0 + 11 +21564.0 + 21 +12880.0 + 31 +0.0 + 0 +INSERT + 5 +2939 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +21235.0 + 20 +12880.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +293A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +21565.0 + 20 +12880.0 + 30 +0.0 + 0 +TEXT + 5 +293B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +21270.625 + 20 +12967.5 + 30 +0.0 + 40 +175.0 + 1 +32 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +21380.0 + 21 +13055.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +293C + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +21235.0 + 20 +13920.0 + 30 +0.0 + 0 +POINT + 5 +293D + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +21565.0 + 20 +13920.0 + 30 +0.0 + 0 +POINT + 5 +293E + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +21565.0 + 20 +12880.0 + 30 +0.0 + 0 +ENDBLK + 5 +293F + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D165 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D165 + 1 + + 0 +LINE + 5 +2941 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +14621.0 + 20 +11975.0 + 30 +0.0 + 11 +15062.5 + 21 +11975.0 + 31 +0.0 + 0 +LINE + 5 +2942 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +15504.0 + 20 +11975.0 + 30 +0.0 + 11 +15062.5 + 21 +11975.0 + 31 +0.0 + 0 +INSERT + 5 +2943 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +14620.0 + 20 +11975.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2944 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +15505.0 + 20 +11975.0 + 30 +0.0 + 0 +TEXT + 5 +2945 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +15030.625 + 20 +12062.5 + 30 +0.0 + 40 +175.0 + 1 +88 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +15140.0 + 21 +12150.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2946 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +14620.0 + 20 +13495.0 + 30 +0.0 + 0 +POINT + 5 +2947 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15505.0 + 20 +11975.0 + 30 +0.0 + 0 +POINT + 5 +2948 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15505.0 + 20 +11975.0 + 30 +0.0 + 0 +ENDBLK + 5 +2949 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D166 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D166 + 1 + + 0 +LINE + 5 +294B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +16850.0 + 20 +15119.0 + 30 +0.0 + 11 +16850.0 + 21 +14996.0 + 31 +0.0 + 0 +INSERT + 5 +294C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16850.0 + 20 +15120.0 + 30 +0.0 + 50 +90.0 + 0 +INSERT + 5 +294D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16850.0 + 20 +14995.0 + 30 +0.0 + 50 +270.0 + 0 +TEXT + 5 +294E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +16762.5 + 20 +15147.5 + 30 +0.0 + 40 +175.0 + 1 +12 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +16675.0 + 21 +15235.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +294F + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15740.0 + 20 +15120.0 + 30 +0.0 + 0 +POINT + 5 +2950 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16110.0 + 20 +14995.0 + 30 +0.0 + 0 +POINT + 5 +2951 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16850.0 + 20 +14995.0 + 30 +0.0 + 0 +ENDBLK + 5 +2952 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D167 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D167 + 1 + + 0 +LINE + 5 +2954 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +16850.0 + 20 +14994.0 + 30 +0.0 + 11 +16850.0 + 21 +13976.0 + 31 +0.0 + 0 +INSERT + 5 +2955 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16850.0 + 20 +14995.0 + 30 +0.0 + 50 +90.0 + 0 +INSERT + 5 +2956 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16850.0 + 20 +13975.0 + 30 +0.0 + 50 +270.0 + 0 +TEXT + 5 +2957 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +16762.5 + 20 +14452.8125 + 30 +0.0 + 40 +175.0 + 1 +1.01 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +16675.0 + 21 +14595.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2958 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16110.0 + 20 +14995.0 + 30 +0.0 + 0 +POINT + 5 +2959 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16125.0 + 20 +13975.0 + 30 +0.0 + 0 +POINT + 5 +295A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16850.0 + 20 +13975.0 + 30 +0.0 + 0 +ENDBLK + 5 +295B + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D168 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D168 + 1 + + 0 +LINE + 5 +295D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +15005.0 + 20 +15484.0 + 30 +0.0 + 11 +15005.0 + 21 +15116.0 + 31 +0.0 + 0 +INSERT + 5 +295E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +15005.0 + 20 +15485.0 + 30 +0.0 + 50 +90.0 + 0 +INSERT + 5 +295F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +15005.0 + 20 +15115.0 + 30 +0.0 + 50 +270.0 + 0 +TEXT + 5 +2960 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +14902.5 + 20 +14765.625 + 30 +0.0 + 40 +175.0 + 1 +36 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +14815.0 + 21 +14875.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2961 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15005.0 + 20 +15485.0 + 30 +0.0 + 0 +POINT + 5 +2962 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15005.0 + 20 +15115.0 + 30 +0.0 + 0 +POINT + 5 +2963 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15005.0 + 20 +15115.0 + 30 +0.0 + 0 +ENDBLK + 5 +2964 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D169 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D169 + 1 + + 0 +LINE + 5 +2966 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +5001.0 + 20 +6000.0 + 30 +0.0 + 11 +7734.0 + 21 +6000.0 + 31 +0.0 + 0 +INSERT + 5 +2967 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +5000.0 + 20 +6000.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2968 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +7735.0 + 20 +6000.0 + 30 +0.0 + 0 +TEXT + 5 +2969 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +6170.625 + 20 +6087.5 + 30 +0.0 + 40 +175.0 + 1 +2.74 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +6367.5 + 21 +6175.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +296A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5000.0 + 20 +9250.0 + 30 +0.0 + 0 +POINT + 5 +296B + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7735.0 + 20 +9250.0 + 30 +0.0 + 0 +POINT + 5 +296C + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7735.0 + 20 +6000.0 + 30 +0.0 + 0 +ENDBLK + 5 +296D + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D170 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D170 + 1 + + 0 +LINE + 5 +296F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +7736.0 + 20 +6000.0 + 30 +0.0 + 11 +8749.0 + 21 +6000.0 + 31 +0.0 + 0 +INSERT + 5 +2970 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +7735.0 + 20 +6000.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2971 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +8750.0 + 20 +6000.0 + 30 +0.0 + 0 +TEXT + 5 +2972 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +8100.3125 + 20 +6087.5 + 30 +0.0 + 40 +175.0 + 1 +1.01 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +8242.5 + 21 +6175.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2973 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7735.0 + 20 +9250.0 + 30 +0.0 + 0 +POINT + 5 +2974 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8750.0 + 20 +9275.0 + 30 +0.0 + 0 +POINT + 5 +2975 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8750.0 + 20 +6000.0 + 30 +0.0 + 0 +ENDBLK + 5 +2976 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D171 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D171 + 1 + + 0 +LINE + 5 +2978 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +8751.0 + 20 +6000.0 + 30 +0.0 + 11 +9864.0 + 21 +6000.0 + 31 +0.0 + 0 +INSERT + 5 +2979 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +8750.0 + 20 +6000.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +297A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9865.0 + 20 +6000.0 + 30 +0.0 + 0 +TEXT + 5 +297B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9176.25 + 20 +6087.5 + 30 +0.0 + 40 +175.0 + 1 +1.11 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +9307.5 + 21 +6175.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +297C + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8750.0 + 20 +9275.0 + 30 +0.0 + 0 +POINT + 5 +297D + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9865.0 + 20 +9460.0 + 30 +0.0 + 0 +POINT + 5 +297E + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9865.0 + 20 +6000.0 + 30 +0.0 + 0 +ENDBLK + 5 +297F + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D172 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D172 + 1 + + 0 +LINE + 5 +2981 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9866.0 + 20 +6000.0 + 30 +0.0 + 11 +11239.0 + 21 +6000.0 + 31 +0.0 + 0 +INSERT + 5 +2982 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9865.0 + 20 +6000.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2983 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +11240.0 + 20 +6000.0 + 30 +0.0 + 0 +TEXT + 5 +2984 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +10377.5 + 20 +6087.5 + 30 +0.0 + 40 +175.0 + 1 +1.38 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +10552.5 + 21 +6175.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2985 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9865.0 + 20 +9460.0 + 30 +0.0 + 0 +POINT + 5 +2986 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +11240.0 + 20 +9435.0 + 30 +0.0 + 0 +POINT + 5 +2987 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +11240.0 + 20 +6000.0 + 30 +0.0 + 0 +ENDBLK + 5 +2988 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D173 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D173 + 1 + + 0 +LINE + 5 +298A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +11241.0 + 20 +6000.0 + 30 +0.0 + 11 +16109.0 + 21 +6000.0 + 31 +0.0 + 0 +INSERT + 5 +298B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +11240.0 + 20 +6000.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +298C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16110.0 + 20 +6000.0 + 30 +0.0 + 0 +TEXT + 5 +298D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +13478.125 + 20 +6087.5 + 30 +0.0 + 40 +175.0 + 1 +4.86 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +13675.0 + 21 +6175.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +298E + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +11240.0 + 20 +9435.0 + 30 +0.0 + 0 +POINT + 5 +298F + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16110.0 + 20 +9380.0 + 30 +0.0 + 0 +POINT + 5 +2990 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16110.0 + 20 +6000.0 + 30 +0.0 + 0 +ENDBLK + 5 +2991 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D174 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D174 + 1 + + 0 +LINE + 5 +2993 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +16111.0 + 20 +6000.0 + 30 +0.0 + 11 +17369.0 + 21 +6000.0 + 31 +0.0 + 0 +INSERT + 5 +2994 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16110.0 + 20 +6000.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2995 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +17370.0 + 20 +6000.0 + 30 +0.0 + 0 +TEXT + 5 +2996 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +16565.0 + 20 +6087.5 + 30 +0.0 + 40 +175.0 + 1 +1.26 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +16740.0 + 21 +6175.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2997 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16110.0 + 20 +9380.0 + 30 +0.0 + 0 +POINT + 5 +2998 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17370.0 + 20 +9460.0 + 30 +0.0 + 0 +POINT + 5 +2999 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17370.0 + 20 +6000.0 + 30 +0.0 + 0 +ENDBLK + 5 +299A + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D175 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D175 + 1 + + 0 +LINE + 5 +299C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +17371.0 + 20 +6000.0 + 30 +0.0 + 11 +18494.0 + 21 +6000.0 + 31 +0.0 + 0 +INSERT + 5 +299D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +17370.0 + 20 +6000.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +299E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18495.0 + 20 +6000.0 + 30 +0.0 + 0 +TEXT + 5 +299F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +17801.25 + 20 +6087.5 + 30 +0.0 + 40 +175.0 + 1 +1.11 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +17932.5 + 21 +6175.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +29A0 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17370.0 + 20 +9460.0 + 30 +0.0 + 0 +POINT + 5 +29A1 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +18495.0 + 20 +9420.0 + 30 +0.0 + 0 +POINT + 5 +29A2 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +18495.0 + 20 +6000.0 + 30 +0.0 + 0 +ENDBLK + 5 +29A3 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D176 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D176 + 1 + + 0 +LINE + 5 +29A5 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +18496.0 + 20 +6000.0 + 30 +0.0 + 11 +20369.0 + 21 +6000.0 + 31 +0.0 + 0 +INSERT + 5 +29A6 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18495.0 + 20 +6000.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +29A7 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +20370.0 + 20 +6000.0 + 30 +0.0 + 0 +TEXT + 5 +29A8 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +19257.5 + 20 +6087.5 + 30 +0.0 + 40 +175.0 + 1 +1.88 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +19432.5 + 21 +6175.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +29A9 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +18495.0 + 20 +9420.0 + 30 +0.0 + 0 +POINT + 5 +29AA + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +20370.0 + 20 +9390.0 + 30 +0.0 + 0 +POINT + 5 +29AB + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +20370.0 + 20 +6000.0 + 30 +0.0 + 0 +ENDBLK + 5 +29AC + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D177 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D177 + 1 + + 0 +LINE + 5 +29AE + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +20371.0 + 20 +6000.0 + 30 +0.0 + 11 +21369.0 + 21 +6000.0 + 31 +0.0 + 0 +INSERT + 5 +29AF + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +20370.0 + 20 +6000.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +29B0 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +21370.0 + 20 +6000.0 + 30 +0.0 + 0 +TEXT + 5 +29B1 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +20760.625 + 20 +6087.5 + 30 +0.0 + 40 +175.0 + 1 +99 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +20870.0 + 21 +6175.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +29B2 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +20370.0 + 20 +9390.0 + 30 +0.0 + 0 +POINT + 5 +29B3 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +21370.0 + 20 +9355.0 + 30 +0.0 + 0 +POINT + 5 +29B4 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +21370.0 + 20 +6000.0 + 30 +0.0 + 0 +ENDBLK + 5 +29B5 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D178 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D178 + 1 + + 0 +LINE + 5 +29B7 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +21371.0 + 20 +6000.0 + 30 +0.0 + 11 +21869.0 + 21 +6000.0 + 31 +0.0 + 0 +INSERT + 5 +29B8 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +21370.0 + 20 +6000.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +29B9 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +21870.0 + 20 +6000.0 + 30 +0.0 + 0 +TEXT + 5 +29BA + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +21532.5 + 20 +6087.5 + 30 +0.0 + 40 +175.0 + 1 +51 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +21620.0 + 21 +6175.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +29BB + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +21370.0 + 20 +9355.0 + 30 +0.0 + 0 +POINT + 5 +29BC + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +21870.0 + 20 +9360.0 + 30 +0.0 + 0 +POINT + 5 +29BD + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +21870.0 + 20 +6000.0 + 30 +0.0 + 0 +ENDBLK + 5 +29BE + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D179 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D179 + 1 + + 0 +LINE + 5 +29C0 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +21871.0 + 20 +6000.0 + 30 +0.0 + 11 +23239.0 + 21 +6000.0 + 31 +0.0 + 0 +INSERT + 5 +29C1 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +21870.0 + 20 +6000.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +29C2 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +23240.0 + 20 +6000.0 + 30 +0.0 + 0 +TEXT + 5 +29C3 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +22380.0 + 20 +6087.5 + 30 +0.0 + 40 +175.0 + 1 +1.36 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +22555.0 + 21 +6175.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +29C4 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +21870.0 + 20 +9360.0 + 30 +0.0 + 0 +POINT + 5 +29C5 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +23240.0 + 20 +9370.0 + 30 +0.0 + 0 +POINT + 5 +29C6 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +23240.0 + 20 +6000.0 + 30 +0.0 + 0 +ENDBLK + 5 +29C7 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D180 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D180 + 1 + + 0 +LINE + 5 +29C9 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +23241.0 + 20 +6000.0 + 30 +0.0 + 11 +25374.0 + 21 +6000.0 + 31 +0.0 + 0 +INSERT + 5 +29CA + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +23240.0 + 20 +6000.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +29CB + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +25375.0 + 20 +6000.0 + 30 +0.0 + 0 +TEXT + 5 +29CC + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +24132.5 + 20 +6087.5 + 30 +0.0 + 40 +175.0 + 1 +2.13 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +24307.5 + 21 +6175.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +29CD + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +23240.0 + 20 +9370.0 + 30 +0.0 + 0 +POINT + 5 +29CE + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +25375.0 + 20 +9440.0 + 30 +0.0 + 0 +POINT + 5 +29CF + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +25375.0 + 20 +6000.0 + 30 +0.0 + 0 +ENDBLK + 5 +29D0 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D181 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D181 + 1 + + 0 +LINE + 5 +29D2 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +25376.0 + 20 +6000.0 + 30 +0.0 + 11 +26739.0 + 21 +6000.0 + 31 +0.0 + 0 +INSERT + 5 +29D3 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +25375.0 + 20 +6000.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +29D4 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +26740.0 + 20 +6000.0 + 30 +0.0 + 0 +TEXT + 5 +29D5 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +25882.5 + 20 +6087.5 + 30 +0.0 + 40 +175.0 + 1 +1.36 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +26057.5 + 21 +6175.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +29D6 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +25375.0 + 20 +9440.0 + 30 +0.0 + 0 +POINT + 5 +29D7 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26740.0 + 20 +9330.0 + 30 +0.0 + 0 +POINT + 5 +29D8 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26740.0 + 20 +6000.0 + 30 +0.0 + 0 +ENDBLK + 5 +29D9 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D182 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D182 + 1 + + 0 +LINE + 5 +29DB + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +5001.0 + 20 +5300.0 + 30 +0.0 + 11 +5364.0 + 21 +5300.0 + 31 +0.0 + 0 +INSERT + 5 +29DC + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +5000.0 + 20 +5300.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +29DD + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +5365.0 + 20 +5300.0 + 30 +0.0 + 0 +TEXT + 5 +29DE + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +5073.125 + 20 +5387.5 + 30 +0.0 + 40 +175.0 + 1 +36 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +5182.5 + 21 +5475.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +29DF + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5000.0 + 20 +9250.0 + 30 +0.0 + 0 +POINT + 5 +29E0 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5365.0 + 20 +9250.0 + 30 +0.0 + 0 +POINT + 5 +29E1 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5365.0 + 20 +5300.0 + 30 +0.0 + 0 +ENDBLK + 5 +29E2 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D183 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D183 + 1 + + 0 +LINE + 5 +29E4 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +5366.0 + 20 +5300.0 + 30 +0.0 + 11 +9374.0 + 21 +5300.0 + 31 +0.0 + 0 +INSERT + 5 +29E5 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +5365.0 + 20 +5300.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +29E6 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9375.0 + 20 +5300.0 + 30 +0.0 + 0 +TEXT + 5 +29E7 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +7205.9375 + 20 +5387.5 + 30 +0.0 + 40 +175.0 + 1 +4.01 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +7370.0 + 21 +5475.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +29E8 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5365.0 + 20 +9250.0 + 30 +0.0 + 0 +POINT + 5 +29E9 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9375.0 + 20 +9645.0 + 30 +0.0 + 0 +POINT + 5 +29EA + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9375.0 + 20 +5300.0 + 30 +0.0 + 0 +ENDBLK + 5 +29EB + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D184 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D184 + 1 + + 0 +LINE + 5 +29ED + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9751.0 + 20 +5300.0 + 30 +0.0 + 11 +14124.0 + 21 +5300.0 + 31 +0.0 + 0 +INSERT + 5 +29EE + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9750.0 + 20 +5300.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +29EF + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +14125.0 + 20 +5300.0 + 30 +0.0 + 0 +TEXT + 5 +29F0 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +11740.625 + 20 +5387.5 + 30 +0.0 + 40 +175.0 + 1 +4.38 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +11937.5 + 21 +5475.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +29F1 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9750.0 + 20 +9635.0 + 30 +0.0 + 0 +POINT + 5 +29F2 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +14125.0 + 20 +9650.0 + 30 +0.0 + 0 +POINT + 5 +29F3 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +14125.0 + 20 +5300.0 + 30 +0.0 + 0 +ENDBLK + 5 +29F4 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D185 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D185 + 1 + + 0 +LINE + 5 +29F6 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +14126.0 + 20 +5300.0 + 30 +0.0 + 11 +14499.0 + 21 +5300.0 + 31 +0.0 + 0 +INSERT + 5 +29F7 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +14125.0 + 20 +5300.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +29F8 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +14500.0 + 20 +5300.0 + 30 +0.0 + 0 +TEXT + 5 +29F9 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +14203.125 + 20 +5387.5 + 30 +0.0 + 40 +175.0 + 1 +36 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +14312.5 + 21 +5475.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +29FA + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +14125.0 + 20 +9650.0 + 30 +0.0 + 0 +POINT + 5 +29FB + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +14500.0 + 20 +9660.0 + 30 +0.0 + 0 +POINT + 5 +29FC + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +14500.0 + 20 +5300.0 + 30 +0.0 + 0 +ENDBLK + 5 +29FD + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D186 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D186 + 1 + + 0 +LINE + 5 +29FF + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +14501.0 + 20 +5300.0 + 30 +0.0 + 11 +17629.0 + 21 +5300.0 + 31 +0.0 + 0 +INSERT + 5 +2A00 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +14500.0 + 20 +5300.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2A01 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +17630.0 + 20 +5300.0 + 30 +0.0 + 0 +TEXT + 5 +2A02 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +15890.0 + 20 +5387.5 + 30 +0.0 + 40 +175.0 + 1 +3.13 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +16065.0 + 21 +5475.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2A03 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +14500.0 + 20 +9660.0 + 30 +0.0 + 0 +POINT + 5 +2A04 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17630.0 + 20 +9660.0 + 30 +0.0 + 0 +POINT + 5 +2A05 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17630.0 + 20 +5300.0 + 30 +0.0 + 0 +ENDBLK + 5 +2A06 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D187 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D187 + 1 + + 0 +LINE + 5 +2A08 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +17631.0 + 20 +5300.0 + 30 +0.0 + 11 +17999.0 + 21 +5300.0 + 31 +0.0 + 0 +INSERT + 5 +2A09 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +17630.0 + 20 +5300.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2A0A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18000.0 + 20 +5300.0 + 30 +0.0 + 0 +TEXT + 5 +2A0B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +17705.625 + 20 +5387.5 + 30 +0.0 + 40 +175.0 + 1 +36 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +17815.0 + 21 +5475.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2A0C + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17630.0 + 20 +9660.0 + 30 +0.0 + 0 +POINT + 5 +2A0D + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +18000.0 + 20 +9630.0 + 30 +0.0 + 0 +POINT + 5 +2A0E + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +18000.0 + 20 +5300.0 + 30 +0.0 + 0 +ENDBLK + 5 +2A0F + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D188 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D188 + 1 + + 0 +LINE + 5 +2A11 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +18001.0 + 20 +5300.0 + 30 +0.0 + 11 +20869.0 + 21 +5300.0 + 31 +0.0 + 0 +INSERT + 5 +2A12 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18000.0 + 20 +5300.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2A13 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +20870.0 + 20 +5300.0 + 30 +0.0 + 0 +TEXT + 5 +2A14 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +19238.125 + 20 +5387.5 + 30 +0.0 + 40 +175.0 + 1 +2.88 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +19435.0 + 21 +5475.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2A15 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +18000.0 + 20 +9630.0 + 30 +0.0 + 0 +POINT + 5 +2A16 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +20870.0 + 20 +9630.0 + 30 +0.0 + 0 +POINT + 5 +2A17 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +20870.0 + 20 +5300.0 + 30 +0.0 + 0 +ENDBLK + 5 +2A18 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D189 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D189 + 1 + + 0 +LINE + 5 +2A1A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +20871.0 + 20 +5300.0 + 30 +0.0 + 11 +21239.0 + 21 +5300.0 + 31 +0.0 + 0 +INSERT + 5 +2A1B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +20870.0 + 20 +5300.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2A1C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +21240.0 + 20 +5300.0 + 30 +0.0 + 0 +TEXT + 5 +2A1D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +20945.625 + 20 +5387.5 + 30 +0.0 + 40 +175.0 + 1 +36 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +21055.0 + 21 +5475.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2A1E + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +20870.0 + 20 +9630.0 + 30 +0.0 + 0 +POINT + 5 +2A1F + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +21240.0 + 20 +9660.0 + 30 +0.0 + 0 +POINT + 5 +2A20 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +21240.0 + 20 +5300.0 + 30 +0.0 + 0 +ENDBLK + 5 +2A21 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D190 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D190 + 1 + + 0 +LINE + 5 +2A23 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +21241.0 + 20 +5300.0 + 30 +0.0 + 11 +22849.0 + 21 +5300.0 + 31 +0.0 + 0 +INSERT + 5 +2A24 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +21240.0 + 20 +5300.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2A25 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +22850.0 + 20 +5300.0 + 30 +0.0 + 0 +TEXT + 5 +2A26 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +21891.875 + 20 +5387.5 + 30 +0.0 + 40 +175.0 + 1 +1.61 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +22045.0 + 21 +5475.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2A27 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +21240.0 + 20 +9660.0 + 30 +0.0 + 0 +POINT + 5 +2A28 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +22850.0 + 20 +9645.0 + 30 +0.0 + 0 +POINT + 5 +2A29 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +22850.0 + 20 +5300.0 + 30 +0.0 + 0 +ENDBLK + 5 +2A2A + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D191 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D191 + 1 + + 0 +LINE + 5 +2A2C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +22976.0 + 20 +5300.0 + 30 +0.0 + 11 +26374.0 + 21 +5300.0 + 31 +0.0 + 0 +INSERT + 5 +2A2D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +22975.0 + 20 +5300.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2A2E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +26375.0 + 20 +5300.0 + 30 +0.0 + 0 +TEXT + 5 +2A2F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +24489.0625 + 20 +5387.5 + 30 +0.0 + 40 +175.0 + 1 +3.40 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +24675.0 + 21 +5475.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2A30 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +22975.0 + 20 +9650.0 + 30 +0.0 + 0 +POINT + 5 +2A31 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26375.0 + 20 +9670.0 + 30 +0.0 + 0 +POINT + 5 +2A32 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26375.0 + 20 +5300.0 + 30 +0.0 + 0 +ENDBLK + 5 +2A33 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D192 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D192 + 1 + + 0 +LINE + 5 +2A35 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +26376.0 + 20 +5300.0 + 30 +0.0 + 11 +26739.0 + 21 +5300.0 + 31 +0.0 + 0 +INSERT + 5 +2A36 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +26375.0 + 20 +5300.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2A37 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +26740.0 + 20 +5300.0 + 30 +0.0 + 0 +TEXT + 5 +2A38 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +26448.125 + 20 +5387.5 + 30 +0.0 + 40 +175.0 + 1 +36 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +26557.5 + 21 +5475.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2A39 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26375.0 + 20 +9670.0 + 30 +0.0 + 0 +POINT + 5 +2A3A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26740.0 + 20 +9690.0 + 30 +0.0 + 0 +POINT + 5 +2A3B + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26740.0 + 20 +5300.0 + 30 +0.0 + 0 +ENDBLK + 5 +2A3C + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D193 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D193 + 1 + + 0 +LINE + 5 +2A3E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +22851.0 + 20 +5300.0 + 30 +0.0 + 11 +22974.0 + 21 +5300.0 + 31 +0.0 + 0 +INSERT + 5 +2A3F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +22850.0 + 20 +5300.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2A40 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +22975.0 + 20 +5300.0 + 30 +0.0 + 0 +TEXT + 5 +2A41 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +23007.5 + 20 +5387.5 + 30 +0.0 + 40 +175.0 + 1 +12 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +23095.0 + 21 +5475.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2A42 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +22850.0 + 20 +9645.0 + 30 +0.0 + 0 +POINT + 5 +2A43 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +22975.0 + 20 +9650.0 + 30 +0.0 + 0 +POINT + 5 +2A44 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +22975.0 + 20 +5300.0 + 30 +0.0 + 0 +ENDBLK + 5 +2A45 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D194 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D194 + 1 + + 0 +LINE + 5 +2A47 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9376.0 + 20 +5300.0 + 30 +0.0 + 11 +9749.0 + 21 +5300.0 + 31 +0.0 + 0 +INSERT + 5 +2A48 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9375.0 + 20 +5300.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2A49 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9750.0 + 20 +5300.0 + 30 +0.0 + 0 +TEXT + 5 +2A4A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9453.125 + 20 +5387.5 + 30 +0.0 + 40 +175.0 + 1 +36 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +9562.5 + 21 +5475.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2A4B + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9375.0 + 20 +9645.0 + 30 +0.0 + 0 +POINT + 5 +2A4C + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9750.0 + 20 +9635.0 + 30 +0.0 + 0 +POINT + 5 +2A4D + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9750.0 + 20 +5300.0 + 30 +0.0 + 0 +ENDBLK + 5 +2A4E + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D195 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D195 + 1 + + 0 +LINE + 5 +2A50 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +5856.0 + 20 +8070.0 + 30 +0.0 + 11 +8854.0 + 21 +8070.0 + 31 +0.0 + 0 +INSERT + 5 +2A51 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +5855.0 + 20 +8070.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2A52 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +8855.0 + 20 +8070.0 + 30 +0.0 + 0 +TEXT + 5 +2A53 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +7455.0 + 20 +8157.5 + 30 +0.0 + 40 +175.0 + 1 +3.00 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +7630.0 + 21 +8245.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2A54 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5855.0 + 20 +9300.0 + 30 +0.0 + 0 +POINT + 5 +2A55 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8855.0 + 20 +8125.0 + 30 +0.0 + 0 +POINT + 5 +2A56 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8855.0 + 20 +8070.0 + 30 +0.0 + 0 +ENDBLK + 5 +2A57 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D196 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D196 + 1 + + 0 +LINE + 5 +2A59 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +4991.0 + 20 +8070.0 + 30 +0.0 + 11 +5854.0 + 21 +8070.0 + 31 +0.0 + 0 +INSERT + 5 +2A5A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +4990.0 + 20 +8070.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2A5B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +5855.0 + 20 +8070.0 + 30 +0.0 + 0 +TEXT + 5 +2A5C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +5165.625 + 20 +8157.5 + 30 +0.0 + 40 +175.0 + 1 +85 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +5275.0 + 21 +8245.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2A5D + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +4990.0 + 20 +9300.0 + 30 +0.0 + 0 +POINT + 5 +2A5E + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5855.0 + 20 +9300.0 + 30 +0.0 + 0 +POINT + 5 +2A5F + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5855.0 + 20 +8070.0 + 30 +0.0 + 0 +ENDBLK + 5 +2A60 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D197 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D197 + 1 + + 0 +LINE + 5 +2A62 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +2800.0 + 20 +9249.0 + 30 +0.0 + 11 +2800.0 + 21 +7646.0 + 31 +0.0 + 0 +INSERT + 5 +2A63 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +2800.0 + 20 +9250.0 + 30 +0.0 + 50 +90.0 + 0 +INSERT + 5 +2A64 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +2800.0 + 20 +7645.0 + 30 +0.0 + 50 +270.0 + 0 +TEXT + 5 +2A65 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +2712.5 + 20 +8283.4375 + 30 +0.0 + 40 +175.0 + 1 +1.60 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +2625.0 + 21 +8447.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2A66 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5000.0 + 20 +9250.0 + 30 +0.0 + 0 +POINT + 5 +2A67 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5000.0 + 20 +7645.0 + 30 +0.0 + 0 +POINT + 5 +2A68 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +2800.0 + 20 +7645.0 + 30 +0.0 + 0 +ENDBLK + 5 +2A69 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D198 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D198 + 1 + + 0 +LINE + 5 +2A6B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +26046.0 + 20 +8105.0 + 30 +0.0 + 11 +26744.0 + 21 +8105.0 + 31 +0.0 + 0 +INSERT + 5 +2A6C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +26045.0 + 20 +8105.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2A6D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +26745.0 + 20 +8105.0 + 30 +0.0 + 0 +TEXT + 5 +2A6E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +26296.5625 + 20 +8192.5 + 30 +0.0 + 40 +175.0 + 1 +70 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +26395.0 + 21 +8280.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2A6F + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26045.0 + 20 +8095.0 + 30 +0.0 + 0 +POINT + 5 +2A70 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26745.0 + 20 +9300.0 + 30 +0.0 + 0 +POINT + 5 +2A71 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26745.0 + 20 +8105.0 + 30 +0.0 + 0 +ENDBLK + 5 +2A72 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D199 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D199 + 1 + + 0 +LINE + 5 +2A74 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +23031.0 + 20 +8105.0 + 30 +0.0 + 11 +26044.0 + 21 +8105.0 + 31 +0.0 + 0 +INSERT + 5 +2A75 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +23030.0 + 20 +8105.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2A76 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +26045.0 + 20 +8105.0 + 30 +0.0 + 0 +TEXT + 5 +2A77 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +24670.0 + 20 +8192.5 + 30 +0.0 + 40 +175.0 + 1 +3.00 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +24845.0 + 21 +8280.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2A78 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +23030.0 + 20 +8095.0 + 30 +0.0 + 0 +POINT + 5 +2A79 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26045.0 + 20 +8095.0 + 30 +0.0 + 0 +POINT + 5 +2A7A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26045.0 + 20 +8105.0 + 30 +0.0 + 0 +ENDBLK + 5 +2A7B + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D200 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D200 + 1 + + 0 +LINE + 5 +2A7D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +28940.0 + 20 +9254.0 + 30 +0.0 + 11 +28940.0 + 21 +7646.0 + 31 +0.0 + 0 +INSERT + 5 +2A7E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +28940.0 + 20 +9255.0 + 30 +0.0 + 50 +90.0 + 0 +INSERT + 5 +2A7F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +28940.0 + 20 +7645.0 + 30 +0.0 + 50 +270.0 + 0 +TEXT + 5 +2A80 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +28852.5 + 20 +8285.9375 + 30 +0.0 + 40 +175.0 + 1 +1.60 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +28765.0 + 21 +8450.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2A81 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26040.0 + 20 +9255.0 + 30 +0.0 + 0 +POINT + 5 +2A82 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26040.0 + 20 +7645.0 + 30 +0.0 + 0 +POINT + 5 +2A83 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +28940.0 + 20 +7645.0 + 30 +0.0 + 0 +ENDBLK + 5 +2A84 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D201 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D201 + 1 + + 0 +LINE + 5 +2A86 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +13531.0 + 20 +18105.0 + 30 +0.0 + 11 +14559.0 + 21 +18105.0 + 31 +0.0 + 0 +INSERT + 5 +2A87 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +13530.0 + 20 +18105.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2A88 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +14560.0 + 20 +18105.0 + 30 +0.0 + 0 +TEXT + 5 +2A89 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +14010.625 + 20 +18192.5 + 30 +0.0 + 40 +175.0 + 1 +88 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +14120.0 + 21 +18280.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2A8A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +13530.0 + 20 +17375.0 + 30 +0.0 + 0 +POINT + 5 +2A8B + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +14560.0 + 20 +17375.0 + 30 +0.0 + 0 +POINT + 5 +2A8C + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +14560.0 + 20 +18105.0 + 30 +0.0 + 0 +ENDBLK + 5 +2A8D + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X202 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X202 + 1 + + 0 +LINE + 5 +2A8F + 8 +0 + 62 + 0 + 10 +34220.0 + 20 +22560.097423 + 30 +0.0 + 11 +34589.902577 + 21 +22930.0 + 31 +0.0 + 0 +LINE + 5 +2A90 + 8 +0 + 62 + 0 + 10 +34220.0 + 20 +22913.650814 + 30 +0.0 + 11 +34236.349186 + 21 +22930.0 + 31 +0.0 + 0 +LINE + 5 +2A91 + 8 +0 + 62 + 0 + 10 +34443.455967 + 20 +22430.0 + 30 +0.0 + 11 +34943.455967 + 21 +22930.0 + 31 +0.0 + 0 +LINE + 5 +2A92 + 8 +0 + 62 + 0 + 10 +34797.009358 + 20 +22430.0 + 30 +0.0 + 11 +34970.0 + 21 +22602.990642 + 31 +0.0 + 0 +ENDBLK + 5 +2A93 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X203 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X203 + 1 + + 0 +LINE + 5 +2A95 + 8 +0 + 62 + 0 + 10 +34327.339444 + 20 +21430.0 + 30 +0.0 + 11 +34827.339444 + 21 +21930.0 + 31 +0.0 + 0 +LINE + 5 +2A96 + 8 +0 + 62 + 0 + 10 +34220.0 + 20 +21499.437252 + 30 +0.0 + 11 +34650.562748 + 21 +21930.0 + 31 +0.0 + 0 +LINE + 5 +2A97 + 8 +0 + 62 + 0 + 10 +34220.0 + 20 +21676.213947 + 30 +0.0 + 11 +34473.786053 + 21 +21930.0 + 31 +0.0 + 0 +LINE + 5 +2A98 + 8 +0 + 62 + 0 + 10 +34220.0 + 20 +21852.990642 + 30 +0.0 + 11 +34297.009358 + 21 +21930.0 + 31 +0.0 + 0 +LINE + 5 +2A99 + 8 +0 + 62 + 0 + 10 +34504.116139 + 20 +21430.0 + 30 +0.0 + 11 +34970.0 + 21 +21895.883861 + 31 +0.0 + 0 +LINE + 5 +2A9A + 8 +0 + 62 + 0 + 10 +34680.892834 + 20 +21430.0 + 30 +0.0 + 11 +34970.0 + 21 +21719.107166 + 31 +0.0 + 0 +LINE + 5 +2A9B + 8 +0 + 62 + 0 + 10 +34857.66953 + 20 +21430.0 + 30 +0.0 + 11 +34970.0 + 21 +21542.33047 + 31 +0.0 + 0 +ENDBLK + 5 +2A9C + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X204 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X204 + 1 + + 0 +LINE + 5 +2A9E + 8 +0 + 62 + 0 + 10 +34220.0 + 20 +20649.059328 + 30 +0.0 + 11 +34231.25 + 21 +20649.059328 + 31 +0.0 + 0 +LINE + 5 +2A9F + 8 +0 + 62 + 0 + 10 +34306.25 + 20 +20649.059328 + 30 +0.0 + 11 +34343.75 + 21 +20649.059328 + 31 +0.0 + 0 +LINE + 5 +2AA0 + 8 +0 + 62 + 0 + 10 +34418.75 + 20 +20649.059328 + 30 +0.0 + 11 +34456.25 + 21 +20649.059328 + 31 +0.0 + 0 +LINE + 5 +2AA1 + 8 +0 + 62 + 0 + 10 +34531.25 + 20 +20649.059328 + 30 +0.0 + 11 +34568.75 + 21 +20649.059328 + 31 +0.0 + 0 +LINE + 5 +2AA2 + 8 +0 + 62 + 0 + 10 +34643.75 + 20 +20649.059328 + 30 +0.0 + 11 +34681.25 + 21 +20649.059328 + 31 +0.0 + 0 +LINE + 5 +2AA3 + 8 +0 + 62 + 0 + 10 +34756.25 + 20 +20649.059328 + 30 +0.0 + 11 +34793.75 + 21 +20649.059328 + 31 +0.0 + 0 +LINE + 5 +2AA4 + 8 +0 + 62 + 0 + 10 +34868.75 + 20 +20649.059328 + 30 +0.0 + 11 +34906.25 + 21 +20649.059328 + 31 +0.0 + 0 +LINE + 5 +2AA5 + 8 +0 + 62 + 0 + 10 +34250.0 + 20 +20681.53528 + 30 +0.0 + 11 +34287.5 + 21 +20681.53528 + 31 +0.0 + 0 +LINE + 5 +2AA6 + 8 +0 + 62 + 0 + 10 +34362.5 + 20 +20681.53528 + 30 +0.0 + 11 +34400.0 + 21 +20681.53528 + 31 +0.0 + 0 +LINE + 5 +2AA7 + 8 +0 + 62 + 0 + 10 +34475.0 + 20 +20681.53528 + 30 +0.0 + 11 +34512.5 + 21 +20681.53528 + 31 +0.0 + 0 +LINE + 5 +2AA8 + 8 +0 + 62 + 0 + 10 +34587.5 + 20 +20681.53528 + 30 +0.0 + 11 +34625.0 + 21 +20681.53528 + 31 +0.0 + 0 +LINE + 5 +2AA9 + 8 +0 + 62 + 0 + 10 +34700.0 + 20 +20681.53528 + 30 +0.0 + 11 +34737.5 + 21 +20681.53528 + 31 +0.0 + 0 +LINE + 5 +2AAA + 8 +0 + 62 + 0 + 10 +34812.5 + 20 +20681.53528 + 30 +0.0 + 11 +34850.0 + 21 +20681.53528 + 31 +0.0 + 0 +LINE + 5 +2AAB + 8 +0 + 62 + 0 + 10 +34925.0 + 20 +20681.53528 + 30 +0.0 + 11 +34962.5 + 21 +20681.53528 + 31 +0.0 + 0 +LINE + 5 +2AAC + 8 +0 + 62 + 0 + 10 +34220.0 + 20 +20714.011233 + 30 +0.0 + 11 +34231.25 + 21 +20714.011233 + 31 +0.0 + 0 +LINE + 5 +2AAD + 8 +0 + 62 + 0 + 10 +34306.25 + 20 +20714.011233 + 30 +0.0 + 11 +34343.75 + 21 +20714.011233 + 31 +0.0 + 0 +LINE + 5 +2AAE + 8 +0 + 62 + 0 + 10 +34418.75 + 20 +20714.011233 + 30 +0.0 + 11 +34456.25 + 21 +20714.011233 + 31 +0.0 + 0 +LINE + 5 +2AAF + 8 +0 + 62 + 0 + 10 +34531.25 + 20 +20714.011233 + 30 +0.0 + 11 +34568.75 + 21 +20714.011233 + 31 +0.0 + 0 +LINE + 5 +2AB0 + 8 +0 + 62 + 0 + 10 +34643.75 + 20 +20714.011233 + 30 +0.0 + 11 +34681.25 + 21 +20714.011233 + 31 +0.0 + 0 +LINE + 5 +2AB1 + 8 +0 + 62 + 0 + 10 +34756.25 + 20 +20714.011233 + 30 +0.0 + 11 +34793.75 + 21 +20714.011233 + 31 +0.0 + 0 +LINE + 5 +2AB2 + 8 +0 + 62 + 0 + 10 +34868.75 + 20 +20714.011233 + 30 +0.0 + 11 +34906.25 + 21 +20714.011233 + 31 +0.0 + 0 +LINE + 5 +2AB3 + 8 +0 + 62 + 0 + 10 +34250.0 + 20 +20746.487185 + 30 +0.0 + 11 +34287.5 + 21 +20746.487185 + 31 +0.0 + 0 +LINE + 5 +2AB4 + 8 +0 + 62 + 0 + 10 +34362.5 + 20 +20746.487185 + 30 +0.0 + 11 +34400.0 + 21 +20746.487185 + 31 +0.0 + 0 +LINE + 5 +2AB5 + 8 +0 + 62 + 0 + 10 +34475.0 + 20 +20746.487185 + 30 +0.0 + 11 +34512.5 + 21 +20746.487185 + 31 +0.0 + 0 +LINE + 5 +2AB6 + 8 +0 + 62 + 0 + 10 +34587.5 + 20 +20746.487185 + 30 +0.0 + 11 +34625.0 + 21 +20746.487185 + 31 +0.0 + 0 +LINE + 5 +2AB7 + 8 +0 + 62 + 0 + 10 +34700.0 + 20 +20746.487185 + 30 +0.0 + 11 +34737.5 + 21 +20746.487185 + 31 +0.0 + 0 +LINE + 5 +2AB8 + 8 +0 + 62 + 0 + 10 +34812.5 + 20 +20746.487185 + 30 +0.0 + 11 +34850.0 + 21 +20746.487185 + 31 +0.0 + 0 +LINE + 5 +2AB9 + 8 +0 + 62 + 0 + 10 +34925.0 + 20 +20746.487185 + 30 +0.0 + 11 +34962.5 + 21 +20746.487185 + 31 +0.0 + 0 +LINE + 5 +2ABA + 8 +0 + 62 + 0 + 10 +34220.0 + 20 +20778.963138 + 30 +0.0 + 11 +34231.25 + 21 +20778.963138 + 31 +0.0 + 0 +LINE + 5 +2ABB + 8 +0 + 62 + 0 + 10 +34306.25 + 20 +20778.963138 + 30 +0.0 + 11 +34343.75 + 21 +20778.963138 + 31 +0.0 + 0 +LINE + 5 +2ABC + 8 +0 + 62 + 0 + 10 +34418.75 + 20 +20778.963138 + 30 +0.0 + 11 +34456.25 + 21 +20778.963138 + 31 +0.0 + 0 +LINE + 5 +2ABD + 8 +0 + 62 + 0 + 10 +34531.25 + 20 +20778.963138 + 30 +0.0 + 11 +34568.75 + 21 +20778.963138 + 31 +0.0 + 0 +LINE + 5 +2ABE + 8 +0 + 62 + 0 + 10 +34643.75 + 20 +20778.963138 + 30 +0.0 + 11 +34681.25 + 21 +20778.963138 + 31 +0.0 + 0 +LINE + 5 +2ABF + 8 +0 + 62 + 0 + 10 +34756.25 + 20 +20778.963138 + 30 +0.0 + 11 +34793.75 + 21 +20778.963138 + 31 +0.0 + 0 +LINE + 5 +2AC0 + 8 +0 + 62 + 0 + 10 +34868.75 + 20 +20778.963138 + 30 +0.0 + 11 +34906.25 + 21 +20778.963138 + 31 +0.0 + 0 +LINE + 5 +2AC1 + 8 +0 + 62 + 0 + 10 +34250.0 + 20 +20811.43909 + 30 +0.0 + 11 +34287.5 + 21 +20811.43909 + 31 +0.0 + 0 +LINE + 5 +2AC2 + 8 +0 + 62 + 0 + 10 +34362.5 + 20 +20811.43909 + 30 +0.0 + 11 +34400.0 + 21 +20811.43909 + 31 +0.0 + 0 +LINE + 5 +2AC3 + 8 +0 + 62 + 0 + 10 +34475.0 + 20 +20811.43909 + 30 +0.0 + 11 +34512.5 + 21 +20811.43909 + 31 +0.0 + 0 +LINE + 5 +2AC4 + 8 +0 + 62 + 0 + 10 +34587.5 + 20 +20811.43909 + 30 +0.0 + 11 +34625.0 + 21 +20811.43909 + 31 +0.0 + 0 +LINE + 5 +2AC5 + 8 +0 + 62 + 0 + 10 +34700.0 + 20 +20811.43909 + 30 +0.0 + 11 +34737.5 + 21 +20811.43909 + 31 +0.0 + 0 +LINE + 5 +2AC6 + 8 +0 + 62 + 0 + 10 +34812.5 + 20 +20811.43909 + 30 +0.0 + 11 +34850.0 + 21 +20811.43909 + 31 +0.0 + 0 +LINE + 5 +2AC7 + 8 +0 + 62 + 0 + 10 +34925.0 + 20 +20811.43909 + 30 +0.0 + 11 +34962.5 + 21 +20811.43909 + 31 +0.0 + 0 +LINE + 5 +2AC8 + 8 +0 + 62 + 0 + 10 +34220.0 + 20 +20843.915043 + 30 +0.0 + 11 +34231.25 + 21 +20843.915043 + 31 +0.0 + 0 +LINE + 5 +2AC9 + 8 +0 + 62 + 0 + 10 +34306.25 + 20 +20843.915043 + 30 +0.0 + 11 +34343.75 + 21 +20843.915043 + 31 +0.0 + 0 +LINE + 5 +2ACA + 8 +0 + 62 + 0 + 10 +34418.75 + 20 +20843.915043 + 30 +0.0 + 11 +34456.25 + 21 +20843.915043 + 31 +0.0 + 0 +LINE + 5 +2ACB + 8 +0 + 62 + 0 + 10 +34531.25 + 20 +20843.915043 + 30 +0.0 + 11 +34568.75 + 21 +20843.915043 + 31 +0.0 + 0 +LINE + 5 +2ACC + 8 +0 + 62 + 0 + 10 +34643.75 + 20 +20843.915043 + 30 +0.0 + 11 +34681.25 + 21 +20843.915043 + 31 +0.0 + 0 +LINE + 5 +2ACD + 8 +0 + 62 + 0 + 10 +34756.25 + 20 +20843.915043 + 30 +0.0 + 11 +34793.75 + 21 +20843.915043 + 31 +0.0 + 0 +LINE + 5 +2ACE + 8 +0 + 62 + 0 + 10 +34868.75 + 20 +20843.915043 + 30 +0.0 + 11 +34906.25 + 21 +20843.915043 + 31 +0.0 + 0 +LINE + 5 +2ACF + 8 +0 + 62 + 0 + 10 +34250.0 + 20 +20876.390995 + 30 +0.0 + 11 +34287.5 + 21 +20876.390995 + 31 +0.0 + 0 +LINE + 5 +2AD0 + 8 +0 + 62 + 0 + 10 +34362.5 + 20 +20876.390995 + 30 +0.0 + 11 +34400.0 + 21 +20876.390995 + 31 +0.0 + 0 +LINE + 5 +2AD1 + 8 +0 + 62 + 0 + 10 +34475.0 + 20 +20876.390995 + 30 +0.0 + 11 +34512.5 + 21 +20876.390995 + 31 +0.0 + 0 +LINE + 5 +2AD2 + 8 +0 + 62 + 0 + 10 +34587.5 + 20 +20876.390995 + 30 +0.0 + 11 +34625.0 + 21 +20876.390995 + 31 +0.0 + 0 +LINE + 5 +2AD3 + 8 +0 + 62 + 0 + 10 +34700.0 + 20 +20876.390995 + 30 +0.0 + 11 +34737.5 + 21 +20876.390995 + 31 +0.0 + 0 +LINE + 5 +2AD4 + 8 +0 + 62 + 0 + 10 +34812.5 + 20 +20876.390995 + 30 +0.0 + 11 +34850.0 + 21 +20876.390995 + 31 +0.0 + 0 +LINE + 5 +2AD5 + 8 +0 + 62 + 0 + 10 +34925.0 + 20 +20876.390995 + 30 +0.0 + 11 +34962.5 + 21 +20876.390995 + 31 +0.0 + 0 +LINE + 5 +2AD6 + 8 +0 + 62 + 0 + 10 +34220.0 + 20 +20908.866948 + 30 +0.0 + 11 +34231.25 + 21 +20908.866948 + 31 +0.0 + 0 +LINE + 5 +2AD7 + 8 +0 + 62 + 0 + 10 +34306.25 + 20 +20908.866948 + 30 +0.0 + 11 +34343.75 + 21 +20908.866948 + 31 +0.0 + 0 +LINE + 5 +2AD8 + 8 +0 + 62 + 0 + 10 +34418.75 + 20 +20908.866948 + 30 +0.0 + 11 +34456.25 + 21 +20908.866948 + 31 +0.0 + 0 +LINE + 5 +2AD9 + 8 +0 + 62 + 0 + 10 +34531.25 + 20 +20908.866948 + 30 +0.0 + 11 +34568.75 + 21 +20908.866948 + 31 +0.0 + 0 +LINE + 5 +2ADA + 8 +0 + 62 + 0 + 10 +34643.75 + 20 +20908.866948 + 30 +0.0 + 11 +34681.25 + 21 +20908.866948 + 31 +0.0 + 0 +LINE + 5 +2ADB + 8 +0 + 62 + 0 + 10 +34756.25 + 20 +20908.866948 + 30 +0.0 + 11 +34793.75 + 21 +20908.866948 + 31 +0.0 + 0 +LINE + 5 +2ADC + 8 +0 + 62 + 0 + 10 +34868.75 + 20 +20908.866948 + 30 +0.0 + 11 +34906.25 + 21 +20908.866948 + 31 +0.0 + 0 +LINE + 5 +2ADD + 8 +0 + 62 + 0 + 10 +34250.0 + 20 +20616.583375 + 30 +0.0 + 11 +34287.5 + 21 +20616.583375 + 31 +0.0 + 0 +LINE + 5 +2ADE + 8 +0 + 62 + 0 + 10 +34362.5 + 20 +20616.583375 + 30 +0.0 + 11 +34400.0 + 21 +20616.583375 + 31 +0.0 + 0 +LINE + 5 +2ADF + 8 +0 + 62 + 0 + 10 +34475.0 + 20 +20616.583375 + 30 +0.0 + 11 +34512.5 + 21 +20616.583375 + 31 +0.0 + 0 +LINE + 5 +2AE0 + 8 +0 + 62 + 0 + 10 +34587.5 + 20 +20616.583375 + 30 +0.0 + 11 +34625.0 + 21 +20616.583375 + 31 +0.0 + 0 +LINE + 5 +2AE1 + 8 +0 + 62 + 0 + 10 +34700.0 + 20 +20616.583375 + 30 +0.0 + 11 +34737.5 + 21 +20616.583375 + 31 +0.0 + 0 +LINE + 5 +2AE2 + 8 +0 + 62 + 0 + 10 +34812.5 + 20 +20616.583375 + 30 +0.0 + 11 +34850.0 + 21 +20616.583375 + 31 +0.0 + 0 +LINE + 5 +2AE3 + 8 +0 + 62 + 0 + 10 +34925.0 + 20 +20616.583375 + 30 +0.0 + 11 +34962.5 + 21 +20616.583375 + 31 +0.0 + 0 +LINE + 5 +2AE4 + 8 +0 + 62 + 0 + 10 +34220.0 + 20 +20584.107423 + 30 +0.0 + 11 +34231.25 + 21 +20584.107423 + 31 +0.0 + 0 +LINE + 5 +2AE5 + 8 +0 + 62 + 0 + 10 +34306.25 + 20 +20584.107423 + 30 +0.0 + 11 +34343.75 + 21 +20584.107423 + 31 +0.0 + 0 +LINE + 5 +2AE6 + 8 +0 + 62 + 0 + 10 +34418.75 + 20 +20584.107423 + 30 +0.0 + 11 +34456.25 + 21 +20584.107423 + 31 +0.0 + 0 +LINE + 5 +2AE7 + 8 +0 + 62 + 0 + 10 +34531.25 + 20 +20584.107423 + 30 +0.0 + 11 +34568.75 + 21 +20584.107423 + 31 +0.0 + 0 +LINE + 5 +2AE8 + 8 +0 + 62 + 0 + 10 +34643.75 + 20 +20584.107423 + 30 +0.0 + 11 +34681.25 + 21 +20584.107423 + 31 +0.0 + 0 +LINE + 5 +2AE9 + 8 +0 + 62 + 0 + 10 +34756.25 + 20 +20584.107423 + 30 +0.0 + 11 +34793.75 + 21 +20584.107423 + 31 +0.0 + 0 +LINE + 5 +2AEA + 8 +0 + 62 + 0 + 10 +34868.75 + 20 +20584.107423 + 30 +0.0 + 11 +34906.25 + 21 +20584.107423 + 31 +0.0 + 0 +LINE + 5 +2AEB + 8 +0 + 62 + 0 + 10 +34250.0 + 20 +20551.63147 + 30 +0.0 + 11 +34287.5 + 21 +20551.63147 + 31 +0.0 + 0 +LINE + 5 +2AEC + 8 +0 + 62 + 0 + 10 +34362.5 + 20 +20551.63147 + 30 +0.0 + 11 +34400.0 + 21 +20551.63147 + 31 +0.0 + 0 +LINE + 5 +2AED + 8 +0 + 62 + 0 + 10 +34475.0 + 20 +20551.63147 + 30 +0.0 + 11 +34512.5 + 21 +20551.63147 + 31 +0.0 + 0 +LINE + 5 +2AEE + 8 +0 + 62 + 0 + 10 +34587.5 + 20 +20551.63147 + 30 +0.0 + 11 +34625.0 + 21 +20551.63147 + 31 +0.0 + 0 +LINE + 5 +2AEF + 8 +0 + 62 + 0 + 10 +34700.0 + 20 +20551.63147 + 30 +0.0 + 11 +34737.5 + 21 +20551.63147 + 31 +0.0 + 0 +LINE + 5 +2AF0 + 8 +0 + 62 + 0 + 10 +34812.5 + 20 +20551.63147 + 30 +0.0 + 11 +34850.0 + 21 +20551.63147 + 31 +0.0 + 0 +LINE + 5 +2AF1 + 8 +0 + 62 + 0 + 10 +34925.0 + 20 +20551.63147 + 30 +0.0 + 11 +34962.5 + 21 +20551.63147 + 31 +0.0 + 0 +LINE + 5 +2AF2 + 8 +0 + 62 + 0 + 10 +34220.0 + 20 +20519.155518 + 30 +0.0 + 11 +34231.25 + 21 +20519.155518 + 31 +0.0 + 0 +LINE + 5 +2AF3 + 8 +0 + 62 + 0 + 10 +34306.25 + 20 +20519.155518 + 30 +0.0 + 11 +34343.75 + 21 +20519.155518 + 31 +0.0 + 0 +LINE + 5 +2AF4 + 8 +0 + 62 + 0 + 10 +34418.75 + 20 +20519.155518 + 30 +0.0 + 11 +34456.25 + 21 +20519.155518 + 31 +0.0 + 0 +LINE + 5 +2AF5 + 8 +0 + 62 + 0 + 10 +34531.25 + 20 +20519.155518 + 30 +0.0 + 11 +34568.75 + 21 +20519.155518 + 31 +0.0 + 0 +LINE + 5 +2AF6 + 8 +0 + 62 + 0 + 10 +34643.75 + 20 +20519.155518 + 30 +0.0 + 11 +34681.25 + 21 +20519.155518 + 31 +0.0 + 0 +LINE + 5 +2AF7 + 8 +0 + 62 + 0 + 10 +34756.25 + 20 +20519.155518 + 30 +0.0 + 11 +34793.75 + 21 +20519.155518 + 31 +0.0 + 0 +LINE + 5 +2AF8 + 8 +0 + 62 + 0 + 10 +34868.75 + 20 +20519.155518 + 30 +0.0 + 11 +34906.25 + 21 +20519.155518 + 31 +0.0 + 0 +LINE + 5 +2AF9 + 8 +0 + 62 + 0 + 10 +34250.0 + 20 +20486.679565 + 30 +0.0 + 11 +34287.5 + 21 +20486.679565 + 31 +0.0 + 0 +LINE + 5 +2AFA + 8 +0 + 62 + 0 + 10 +34362.5 + 20 +20486.679565 + 30 +0.0 + 11 +34400.0 + 21 +20486.679565 + 31 +0.0 + 0 +LINE + 5 +2AFB + 8 +0 + 62 + 0 + 10 +34475.0 + 20 +20486.679565 + 30 +0.0 + 11 +34512.5 + 21 +20486.679565 + 31 +0.0 + 0 +LINE + 5 +2AFC + 8 +0 + 62 + 0 + 10 +34587.5 + 20 +20486.679565 + 30 +0.0 + 11 +34625.0 + 21 +20486.679565 + 31 +0.0 + 0 +LINE + 5 +2AFD + 8 +0 + 62 + 0 + 10 +34700.0 + 20 +20486.679565 + 30 +0.0 + 11 +34737.5 + 21 +20486.679565 + 31 +0.0 + 0 +LINE + 5 +2AFE + 8 +0 + 62 + 0 + 10 +34812.5 + 20 +20486.679565 + 30 +0.0 + 11 +34850.0 + 21 +20486.679565 + 31 +0.0 + 0 +LINE + 5 +2AFF + 8 +0 + 62 + 0 + 10 +34925.0 + 20 +20486.679565 + 30 +0.0 + 11 +34962.5 + 21 +20486.679565 + 31 +0.0 + 0 +LINE + 5 +2B00 + 8 +0 + 62 + 0 + 10 +34220.0 + 20 +20454.203613 + 30 +0.0 + 11 +34231.25 + 21 +20454.203613 + 31 +0.0 + 0 +LINE + 5 +2B01 + 8 +0 + 62 + 0 + 10 +34306.25 + 20 +20454.203613 + 30 +0.0 + 11 +34343.75 + 21 +20454.203613 + 31 +0.0 + 0 +LINE + 5 +2B02 + 8 +0 + 62 + 0 + 10 +34418.75 + 20 +20454.203613 + 30 +0.0 + 11 +34456.25 + 21 +20454.203613 + 31 +0.0 + 0 +LINE + 5 +2B03 + 8 +0 + 62 + 0 + 10 +34531.25 + 20 +20454.203613 + 30 +0.0 + 11 +34568.75 + 21 +20454.203613 + 31 +0.0 + 0 +LINE + 5 +2B04 + 8 +0 + 62 + 0 + 10 +34643.75 + 20 +20454.203613 + 30 +0.0 + 11 +34681.25 + 21 +20454.203613 + 31 +0.0 + 0 +LINE + 5 +2B05 + 8 +0 + 62 + 0 + 10 +34756.25 + 20 +20454.203613 + 30 +0.0 + 11 +34793.75 + 21 +20454.203613 + 31 +0.0 + 0 +LINE + 5 +2B06 + 8 +0 + 62 + 0 + 10 +34868.75 + 20 +20454.203613 + 30 +0.0 + 11 +34906.25 + 21 +20454.203613 + 31 +0.0 + 0 +LINE + 5 +2B07 + 8 +0 + 62 + 0 + 10 +34699.999881 + 20 +20486.679546 + 30 +0.0 + 11 +34681.249881 + 21 +20519.155498 + 31 +0.0 + 0 +LINE + 5 +2B08 + 8 +0 + 62 + 0 + 10 +34643.749881 + 20 +20584.107404 + 30 +0.0 + 11 +34624.999881 + 21 +20616.583356 + 31 +0.0 + 0 +LINE + 5 +2B09 + 8 +0 + 62 + 0 + 10 +34587.499881 + 20 +20681.535261 + 30 +0.0 + 11 +34568.749881 + 21 +20714.011214 + 31 +0.0 + 0 +LINE + 5 +2B0A + 8 +0 + 62 + 0 + 10 +34531.249881 + 20 +20778.963119 + 30 +0.0 + 11 +34512.499881 + 21 +20811.439072 + 31 +0.0 + 0 +LINE + 5 +2B0B + 8 +0 + 62 + 0 + 10 +34474.999881 + 20 +20876.390977 + 30 +0.0 + 11 +34456.249881 + 21 +20908.86693 + 31 +0.0 + 0 +LINE + 5 +2B0C + 8 +0 + 62 + 0 + 10 +34695.223832 + 20 +20430.0 + 30 +0.0 + 11 +34681.249882 + 21 +20454.203593 + 31 +0.0 + 0 +LINE + 5 +2B0D + 8 +0 + 62 + 0 + 10 +34643.749882 + 20 +20519.155498 + 30 +0.0 + 11 +34624.999882 + 21 +20551.631451 + 31 +0.0 + 0 +LINE + 5 +2B0E + 8 +0 + 62 + 0 + 10 +34587.499882 + 20 +20616.583356 + 30 +0.0 + 11 +34568.749882 + 21 +20649.059309 + 31 +0.0 + 0 +LINE + 5 +2B0F + 8 +0 + 62 + 0 + 10 +34531.249882 + 20 +20714.011214 + 30 +0.0 + 11 +34512.499882 + 21 +20746.487167 + 31 +0.0 + 0 +LINE + 5 +2B10 + 8 +0 + 62 + 0 + 10 +34474.999882 + 20 +20811.439072 + 30 +0.0 + 11 +34456.249882 + 21 +20843.915025 + 31 +0.0 + 0 +LINE + 5 +2B11 + 8 +0 + 62 + 0 + 10 +34418.749882 + 20 +20908.86693 + 30 +0.0 + 11 +34406.548698 + 21 +20930.0 + 31 +0.0 + 0 +LINE + 5 +2B12 + 8 +0 + 62 + 0 + 10 +34643.749882 + 20 +20454.203593 + 30 +0.0 + 11 +34624.999882 + 21 +20486.679546 + 31 +0.0 + 0 +LINE + 5 +2B13 + 8 +0 + 62 + 0 + 10 +34587.499882 + 20 +20551.631451 + 30 +0.0 + 11 +34568.749882 + 21 +20584.107404 + 31 +0.0 + 0 +LINE + 5 +2B14 + 8 +0 + 62 + 0 + 10 +34531.249882 + 20 +20649.059309 + 30 +0.0 + 11 +34512.499882 + 21 +20681.535262 + 31 +0.0 + 0 +LINE + 5 +2B15 + 8 +0 + 62 + 0 + 10 +34474.999882 + 20 +20746.487167 + 30 +0.0 + 11 +34456.249882 + 21 +20778.96312 + 31 +0.0 + 0 +LINE + 5 +2B16 + 8 +0 + 62 + 0 + 10 +34418.749882 + 20 +20843.915025 + 30 +0.0 + 11 +34399.999882 + 21 +20876.390977 + 31 +0.0 + 0 +LINE + 5 +2B17 + 8 +0 + 62 + 0 + 10 +34587.499882 + 20 +20486.679546 + 30 +0.0 + 11 +34568.749882 + 21 +20519.155498 + 31 +0.0 + 0 +LINE + 5 +2B18 + 8 +0 + 62 + 0 + 10 +34531.249882 + 20 +20584.107404 + 30 +0.0 + 11 +34512.499882 + 21 +20616.583356 + 31 +0.0 + 0 +LINE + 5 +2B19 + 8 +0 + 62 + 0 + 10 +34474.999882 + 20 +20681.535262 + 30 +0.0 + 11 +34456.249882 + 21 +20714.011214 + 31 +0.0 + 0 +LINE + 5 +2B1A + 8 +0 + 62 + 0 + 10 +34418.749882 + 20 +20778.96312 + 30 +0.0 + 11 +34399.999882 + 21 +20811.439072 + 31 +0.0 + 0 +LINE + 5 +2B1B + 8 +0 + 62 + 0 + 10 +34362.499882 + 20 +20876.390978 + 30 +0.0 + 11 +34343.749882 + 21 +20908.86693 + 31 +0.0 + 0 +LINE + 5 +2B1C + 8 +0 + 62 + 0 + 10 +34582.723833 + 20 +20430.0 + 30 +0.0 + 11 +34568.749882 + 21 +20454.203593 + 31 +0.0 + 0 +LINE + 5 +2B1D + 8 +0 + 62 + 0 + 10 +34531.249882 + 20 +20519.155499 + 30 +0.0 + 11 +34512.499882 + 21 +20551.631451 + 31 +0.0 + 0 +LINE + 5 +2B1E + 8 +0 + 62 + 0 + 10 +34474.999882 + 20 +20616.583356 + 30 +0.0 + 11 +34456.249882 + 21 +20649.059309 + 31 +0.0 + 0 +LINE + 5 +2B1F + 8 +0 + 62 + 0 + 10 +34418.749882 + 20 +20714.011214 + 30 +0.0 + 11 +34399.999882 + 21 +20746.487167 + 31 +0.0 + 0 +LINE + 5 +2B20 + 8 +0 + 62 + 0 + 10 +34362.499882 + 20 +20811.439072 + 30 +0.0 + 11 +34343.749882 + 21 +20843.915025 + 31 +0.0 + 0 +LINE + 5 +2B21 + 8 +0 + 62 + 0 + 10 +34306.249882 + 20 +20908.86693 + 30 +0.0 + 11 +34294.048698 + 21 +20930.0 + 31 +0.0 + 0 +LINE + 5 +2B22 + 8 +0 + 62 + 0 + 10 +34531.249882 + 20 +20454.203593 + 30 +0.0 + 11 +34512.499882 + 21 +20486.679546 + 31 +0.0 + 0 +LINE + 5 +2B23 + 8 +0 + 62 + 0 + 10 +34474.999882 + 20 +20551.631451 + 30 +0.0 + 11 +34456.249882 + 21 +20584.107404 + 31 +0.0 + 0 +LINE + 5 +2B24 + 8 +0 + 62 + 0 + 10 +34418.749882 + 20 +20649.059309 + 30 +0.0 + 11 +34399.999882 + 21 +20681.535262 + 31 +0.0 + 0 +LINE + 5 +2B25 + 8 +0 + 62 + 0 + 10 +34362.499882 + 20 +20746.487167 + 30 +0.0 + 11 +34343.749882 + 21 +20778.96312 + 31 +0.0 + 0 +LINE + 5 +2B26 + 8 +0 + 62 + 0 + 10 +34306.249882 + 20 +20843.915025 + 30 +0.0 + 11 +34287.499882 + 21 +20876.390978 + 31 +0.0 + 0 +LINE + 5 +2B27 + 8 +0 + 62 + 0 + 10 +34474.999882 + 20 +20486.679546 + 30 +0.0 + 11 +34456.249882 + 21 +20519.155499 + 31 +0.0 + 0 +LINE + 5 +2B28 + 8 +0 + 62 + 0 + 10 +34418.749882 + 20 +20584.107404 + 30 +0.0 + 11 +34399.999882 + 21 +20616.583357 + 31 +0.0 + 0 +LINE + 5 +2B29 + 8 +0 + 62 + 0 + 10 +34362.499882 + 20 +20681.535262 + 30 +0.0 + 11 +34343.749882 + 21 +20714.011215 + 31 +0.0 + 0 +LINE + 5 +2B2A + 8 +0 + 62 + 0 + 10 +34306.249882 + 20 +20778.96312 + 30 +0.0 + 11 +34287.499882 + 21 +20811.439072 + 31 +0.0 + 0 +LINE + 5 +2B2B + 8 +0 + 62 + 0 + 10 +34249.999882 + 20 +20876.390978 + 30 +0.0 + 11 +34231.249882 + 21 +20908.86693 + 31 +0.0 + 0 +LINE + 5 +2B2C + 8 +0 + 62 + 0 + 10 +34470.223833 + 20 +20430.0 + 30 +0.0 + 11 +34456.249882 + 21 +20454.203593 + 31 +0.0 + 0 +LINE + 5 +2B2D + 8 +0 + 62 + 0 + 10 +34418.749882 + 20 +20519.155499 + 30 +0.0 + 11 +34399.999882 + 21 +20551.631451 + 31 +0.0 + 0 +LINE + 5 +2B2E + 8 +0 + 62 + 0 + 10 +34362.499882 + 20 +20616.583357 + 30 +0.0 + 11 +34343.749882 + 21 +20649.059309 + 31 +0.0 + 0 +LINE + 5 +2B2F + 8 +0 + 62 + 0 + 10 +34306.249882 + 20 +20714.011215 + 30 +0.0 + 11 +34287.499882 + 21 +20746.487167 + 31 +0.0 + 0 +LINE + 5 +2B30 + 8 +0 + 62 + 0 + 10 +34249.999882 + 20 +20811.439073 + 30 +0.0 + 11 +34231.249882 + 21 +20843.915025 + 31 +0.0 + 0 +LINE + 5 +2B31 + 8 +0 + 62 + 0 + 10 +34418.749882 + 20 +20454.203594 + 30 +0.0 + 11 +34399.999882 + 21 +20486.679546 + 31 +0.0 + 0 +LINE + 5 +2B32 + 8 +0 + 62 + 0 + 10 +34362.499882 + 20 +20551.631451 + 30 +0.0 + 11 +34343.749882 + 21 +20584.107404 + 31 +0.0 + 0 +LINE + 5 +2B33 + 8 +0 + 62 + 0 + 10 +34306.249882 + 20 +20649.059309 + 30 +0.0 + 11 +34287.499882 + 21 +20681.535262 + 31 +0.0 + 0 +LINE + 5 +2B34 + 8 +0 + 62 + 0 + 10 +34249.999882 + 20 +20746.487167 + 30 +0.0 + 11 +34231.249882 + 21 +20778.96312 + 31 +0.0 + 0 +LINE + 5 +2B35 + 8 +0 + 62 + 0 + 10 +34362.499883 + 20 +20486.679546 + 30 +0.0 + 11 +34343.749883 + 21 +20519.155499 + 31 +0.0 + 0 +LINE + 5 +2B36 + 8 +0 + 62 + 0 + 10 +34306.249883 + 20 +20584.107404 + 30 +0.0 + 11 +34287.499883 + 21 +20616.583357 + 31 +0.0 + 0 +LINE + 5 +2B37 + 8 +0 + 62 + 0 + 10 +34249.999883 + 20 +20681.535262 + 30 +0.0 + 11 +34231.249883 + 21 +20714.011215 + 31 +0.0 + 0 +LINE + 5 +2B38 + 8 +0 + 62 + 0 + 10 +34357.723834 + 20 +20430.0 + 30 +0.0 + 11 +34343.749883 + 21 +20454.203594 + 31 +0.0 + 0 +LINE + 5 +2B39 + 8 +0 + 62 + 0 + 10 +34306.249883 + 20 +20519.155499 + 30 +0.0 + 11 +34287.499883 + 21 +20551.631452 + 31 +0.0 + 0 +LINE + 5 +2B3A + 8 +0 + 62 + 0 + 10 +34249.999883 + 20 +20616.583357 + 30 +0.0 + 11 +34231.249883 + 21 +20649.05931 + 31 +0.0 + 0 +LINE + 5 +2B3B + 8 +0 + 62 + 0 + 10 +34306.249883 + 20 +20454.203594 + 30 +0.0 + 11 +34287.499883 + 21 +20486.679546 + 31 +0.0 + 0 +LINE + 5 +2B3C + 8 +0 + 62 + 0 + 10 +34249.999883 + 20 +20551.631452 + 30 +0.0 + 11 +34231.249883 + 21 +20584.107404 + 31 +0.0 + 0 +LINE + 5 +2B3D + 8 +0 + 62 + 0 + 10 +34249.999883 + 20 +20486.679546 + 30 +0.0 + 11 +34231.249883 + 21 +20519.155499 + 31 +0.0 + 0 +LINE + 5 +2B3E + 8 +0 + 62 + 0 + 10 +34245.223834 + 20 +20430.0 + 30 +0.0 + 11 +34231.249883 + 21 +20454.203594 + 31 +0.0 + 0 +LINE + 5 +2B3F + 8 +0 + 62 + 0 + 10 +34756.249881 + 20 +20454.203593 + 30 +0.0 + 11 +34737.499881 + 21 +20486.679546 + 31 +0.0 + 0 +LINE + 5 +2B40 + 8 +0 + 62 + 0 + 10 +34699.999881 + 20 +20551.631451 + 30 +0.0 + 11 +34681.249881 + 21 +20584.107403 + 31 +0.0 + 0 +LINE + 5 +2B41 + 8 +0 + 62 + 0 + 10 +34643.749881 + 20 +20649.059309 + 30 +0.0 + 11 +34624.999881 + 21 +20681.535261 + 31 +0.0 + 0 +LINE + 5 +2B42 + 8 +0 + 62 + 0 + 10 +34587.499881 + 20 +20746.487167 + 30 +0.0 + 11 +34568.749881 + 21 +20778.963119 + 31 +0.0 + 0 +LINE + 5 +2B43 + 8 +0 + 62 + 0 + 10 +34531.249881 + 20 +20843.915025 + 30 +0.0 + 11 +34512.499881 + 21 +20876.390977 + 31 +0.0 + 0 +LINE + 5 +2B44 + 8 +0 + 62 + 0 + 10 +34807.723832 + 20 +20430.0 + 30 +0.0 + 11 +34793.749881 + 21 +20454.203593 + 31 +0.0 + 0 +LINE + 5 +2B45 + 8 +0 + 62 + 0 + 10 +34756.249881 + 20 +20519.155498 + 30 +0.0 + 11 +34737.499881 + 21 +20551.631451 + 31 +0.0 + 0 +LINE + 5 +2B46 + 8 +0 + 62 + 0 + 10 +34699.999881 + 20 +20616.583356 + 30 +0.0 + 11 +34681.249881 + 21 +20649.059309 + 31 +0.0 + 0 +LINE + 5 +2B47 + 8 +0 + 62 + 0 + 10 +34643.749881 + 20 +20714.011214 + 30 +0.0 + 11 +34624.999881 + 21 +20746.487167 + 31 +0.0 + 0 +LINE + 5 +2B48 + 8 +0 + 62 + 0 + 10 +34587.499881 + 20 +20811.439072 + 30 +0.0 + 11 +34568.749881 + 21 +20843.915025 + 31 +0.0 + 0 +LINE + 5 +2B49 + 8 +0 + 62 + 0 + 10 +34531.249881 + 20 +20908.86693 + 30 +0.0 + 11 +34519.048697 + 21 +20930.0 + 31 +0.0 + 0 +LINE + 5 +2B4A + 8 +0 + 62 + 0 + 10 +34812.499881 + 20 +20486.679545 + 30 +0.0 + 11 +34793.749881 + 21 +20519.155498 + 31 +0.0 + 0 +LINE + 5 +2B4B + 8 +0 + 62 + 0 + 10 +34756.249881 + 20 +20584.107403 + 30 +0.0 + 11 +34737.499881 + 21 +20616.583356 + 31 +0.0 + 0 +LINE + 5 +2B4C + 8 +0 + 62 + 0 + 10 +34699.999881 + 20 +20681.535261 + 30 +0.0 + 11 +34681.249881 + 21 +20714.011214 + 31 +0.0 + 0 +LINE + 5 +2B4D + 8 +0 + 62 + 0 + 10 +34643.749881 + 20 +20778.963119 + 30 +0.0 + 11 +34624.999881 + 21 +20811.439072 + 31 +0.0 + 0 +LINE + 5 +2B4E + 8 +0 + 62 + 0 + 10 +34587.499881 + 20 +20876.390977 + 30 +0.0 + 11 +34568.749881 + 21 +20908.86693 + 31 +0.0 + 0 +LINE + 5 +2B4F + 8 +0 + 62 + 0 + 10 +34868.749881 + 20 +20454.203593 + 30 +0.0 + 11 +34849.999881 + 21 +20486.679545 + 31 +0.0 + 0 +LINE + 5 +2B50 + 8 +0 + 62 + 0 + 10 +34812.499881 + 20 +20551.631451 + 30 +0.0 + 11 +34793.749881 + 21 +20584.107403 + 31 +0.0 + 0 +LINE + 5 +2B51 + 8 +0 + 62 + 0 + 10 +34756.249881 + 20 +20649.059309 + 30 +0.0 + 11 +34737.499881 + 21 +20681.535261 + 31 +0.0 + 0 +LINE + 5 +2B52 + 8 +0 + 62 + 0 + 10 +34699.999881 + 20 +20746.487166 + 30 +0.0 + 11 +34681.249881 + 21 +20778.963119 + 31 +0.0 + 0 +LINE + 5 +2B53 + 8 +0 + 62 + 0 + 10 +34643.749881 + 20 +20843.915024 + 30 +0.0 + 11 +34624.999881 + 21 +20876.390977 + 31 +0.0 + 0 +LINE + 5 +2B54 + 8 +0 + 62 + 0 + 10 +34920.223832 + 20 +20430.0 + 30 +0.0 + 11 +34906.249881 + 21 +20454.203593 + 31 +0.0 + 0 +LINE + 5 +2B55 + 8 +0 + 62 + 0 + 10 +34868.749881 + 20 +20519.155498 + 30 +0.0 + 11 +34849.999881 + 21 +20551.631451 + 31 +0.0 + 0 +LINE + 5 +2B56 + 8 +0 + 62 + 0 + 10 +34812.499881 + 20 +20616.583356 + 30 +0.0 + 11 +34793.749881 + 21 +20649.059308 + 31 +0.0 + 0 +LINE + 5 +2B57 + 8 +0 + 62 + 0 + 10 +34756.249881 + 20 +20714.011214 + 30 +0.0 + 11 +34737.499881 + 21 +20746.487166 + 31 +0.0 + 0 +LINE + 5 +2B58 + 8 +0 + 62 + 0 + 10 +34699.999881 + 20 +20811.439072 + 30 +0.0 + 11 +34681.249881 + 21 +20843.915024 + 31 +0.0 + 0 +LINE + 5 +2B59 + 8 +0 + 62 + 0 + 10 +34643.749881 + 20 +20908.86693 + 30 +0.0 + 11 +34631.548697 + 21 +20930.0 + 31 +0.0 + 0 +LINE + 5 +2B5A + 8 +0 + 62 + 0 + 10 +34924.999881 + 20 +20486.679545 + 30 +0.0 + 11 +34906.249881 + 21 +20519.155498 + 31 +0.0 + 0 +LINE + 5 +2B5B + 8 +0 + 62 + 0 + 10 +34868.749881 + 20 +20584.107403 + 30 +0.0 + 11 +34849.999881 + 21 +20616.583356 + 31 +0.0 + 0 +LINE + 5 +2B5C + 8 +0 + 62 + 0 + 10 +34812.499881 + 20 +20681.535261 + 30 +0.0 + 11 +34793.749881 + 21 +20714.011214 + 31 +0.0 + 0 +LINE + 5 +2B5D + 8 +0 + 62 + 0 + 10 +34756.249881 + 20 +20778.963119 + 30 +0.0 + 11 +34737.499881 + 21 +20811.439072 + 31 +0.0 + 0 +LINE + 5 +2B5E + 8 +0 + 62 + 0 + 10 +34699.999881 + 20 +20876.390977 + 30 +0.0 + 11 +34681.249881 + 21 +20908.86693 + 31 +0.0 + 0 +LINE + 5 +2B5F + 8 +0 + 62 + 0 + 10 +34970.0 + 20 +20473.688957 + 30 +0.0 + 11 +34962.499881 + 21 +20486.679545 + 31 +0.0 + 0 +LINE + 5 +2B60 + 8 +0 + 62 + 0 + 10 +34924.999881 + 20 +20551.63145 + 30 +0.0 + 11 +34906.249881 + 21 +20584.107403 + 31 +0.0 + 0 +LINE + 5 +2B61 + 8 +0 + 62 + 0 + 10 +34868.749881 + 20 +20649.059308 + 30 +0.0 + 11 +34849.999881 + 21 +20681.535261 + 31 +0.0 + 0 +LINE + 5 +2B62 + 8 +0 + 62 + 0 + 10 +34812.499881 + 20 +20746.487166 + 30 +0.0 + 11 +34793.749881 + 21 +20778.963119 + 31 +0.0 + 0 +LINE + 5 +2B63 + 8 +0 + 62 + 0 + 10 +34756.249881 + 20 +20843.915024 + 30 +0.0 + 11 +34737.499881 + 21 +20876.390977 + 31 +0.0 + 0 +LINE + 5 +2B64 + 8 +0 + 62 + 0 + 10 +34970.0 + 20 +20538.640862 + 30 +0.0 + 11 +34962.49988 + 21 +20551.63145 + 31 +0.0 + 0 +LINE + 5 +2B65 + 8 +0 + 62 + 0 + 10 +34924.99988 + 20 +20616.583356 + 30 +0.0 + 11 +34906.24988 + 21 +20649.059308 + 31 +0.0 + 0 +LINE + 5 +2B66 + 8 +0 + 62 + 0 + 10 +34868.74988 + 20 +20714.011214 + 30 +0.0 + 11 +34849.99988 + 21 +20746.487166 + 31 +0.0 + 0 +LINE + 5 +2B67 + 8 +0 + 62 + 0 + 10 +34812.49988 + 20 +20811.439071 + 30 +0.0 + 11 +34793.74988 + 21 +20843.915024 + 31 +0.0 + 0 +LINE + 5 +2B68 + 8 +0 + 62 + 0 + 10 +34756.24988 + 20 +20908.866929 + 30 +0.0 + 11 +34744.048696 + 21 +20930.0 + 31 +0.0 + 0 +LINE + 5 +2B69 + 8 +0 + 62 + 0 + 10 +34970.0 + 20 +20603.592767 + 30 +0.0 + 11 +34962.49988 + 21 +20616.583356 + 31 +0.0 + 0 +LINE + 5 +2B6A + 8 +0 + 62 + 0 + 10 +34924.99988 + 20 +20681.535261 + 30 +0.0 + 11 +34906.24988 + 21 +20714.011213 + 31 +0.0 + 0 +LINE + 5 +2B6B + 8 +0 + 62 + 0 + 10 +34868.74988 + 20 +20778.963119 + 30 +0.0 + 11 +34849.99988 + 21 +20811.439071 + 31 +0.0 + 0 +LINE + 5 +2B6C + 8 +0 + 62 + 0 + 10 +34812.49988 + 20 +20876.390977 + 30 +0.0 + 11 +34793.74988 + 21 +20908.866929 + 31 +0.0 + 0 +LINE + 5 +2B6D + 8 +0 + 62 + 0 + 10 +34970.0 + 20 +20668.544672 + 30 +0.0 + 11 +34962.49988 + 21 +20681.535261 + 31 +0.0 + 0 +LINE + 5 +2B6E + 8 +0 + 62 + 0 + 10 +34924.99988 + 20 +20746.487166 + 30 +0.0 + 11 +34906.24988 + 21 +20778.963119 + 31 +0.0 + 0 +LINE + 5 +2B6F + 8 +0 + 62 + 0 + 10 +34868.74988 + 20 +20843.915024 + 30 +0.0 + 11 +34849.99988 + 21 +20876.390977 + 31 +0.0 + 0 +LINE + 5 +2B70 + 8 +0 + 62 + 0 + 10 +34970.0 + 20 +20733.496577 + 30 +0.0 + 11 +34962.49988 + 21 +20746.487166 + 31 +0.0 + 0 +LINE + 5 +2B71 + 8 +0 + 62 + 0 + 10 +34924.99988 + 20 +20811.439071 + 30 +0.0 + 11 +34906.24988 + 21 +20843.915024 + 31 +0.0 + 0 +LINE + 5 +2B72 + 8 +0 + 62 + 0 + 10 +34868.74988 + 20 +20908.866929 + 30 +0.0 + 11 +34856.548696 + 21 +20930.0 + 31 +0.0 + 0 +LINE + 5 +2B73 + 8 +0 + 62 + 0 + 10 +34970.0 + 20 +20798.448482 + 30 +0.0 + 11 +34962.49988 + 21 +20811.439071 + 31 +0.0 + 0 +LINE + 5 +2B74 + 8 +0 + 62 + 0 + 10 +34924.99988 + 20 +20876.390976 + 30 +0.0 + 11 +34906.24988 + 21 +20908.866929 + 31 +0.0 + 0 +LINE + 5 +2B75 + 8 +0 + 62 + 0 + 10 +34970.0 + 20 +20863.400387 + 30 +0.0 + 11 +34962.49988 + 21 +20876.390976 + 31 +0.0 + 0 +LINE + 5 +2B76 + 8 +0 + 62 + 0 + 10 +34970.0 + 20 +20928.352292 + 30 +0.0 + 11 +34969.048695 + 21 +20930.0 + 31 +0.0 + 0 +LINE + 5 +2B77 + 8 +0 + 62 + 0 + 10 +34456.249925 + 20 +20454.203705 + 30 +0.0 + 11 +34474.999925 + 21 +20486.679658 + 31 +0.0 + 0 +LINE + 5 +2B78 + 8 +0 + 62 + 0 + 10 +34512.499925 + 20 +20551.631563 + 30 +0.0 + 11 +34531.249925 + 21 +20584.107516 + 31 +0.0 + 0 +LINE + 5 +2B79 + 8 +0 + 62 + 0 + 10 +34568.749925 + 20 +20649.059421 + 30 +0.0 + 11 +34587.499925 + 21 +20681.535373 + 31 +0.0 + 0 +LINE + 5 +2B7A + 8 +0 + 62 + 0 + 10 +34624.999925 + 20 +20746.487279 + 30 +0.0 + 11 +34643.749925 + 21 +20778.963231 + 31 +0.0 + 0 +LINE + 5 +2B7B + 8 +0 + 62 + 0 + 10 +34681.249925 + 20 +20843.915137 + 30 +0.0 + 11 +34699.999925 + 21 +20876.391089 + 31 +0.0 + 0 +LINE + 5 +2B7C + 8 +0 + 62 + 0 + 10 +34404.775909 + 20 +20430.0 + 30 +0.0 + 11 +34418.749925 + 21 +20454.203705 + 31 +0.0 + 0 +LINE + 5 +2B7D + 8 +0 + 62 + 0 + 10 +34456.249925 + 20 +20519.15561 + 30 +0.0 + 11 +34474.999925 + 21 +20551.631563 + 31 +0.0 + 0 +LINE + 5 +2B7E + 8 +0 + 62 + 0 + 10 +34512.499925 + 20 +20616.583468 + 30 +0.0 + 11 +34531.249925 + 21 +20649.059421 + 31 +0.0 + 0 +LINE + 5 +2B7F + 8 +0 + 62 + 0 + 10 +34568.749925 + 20 +20714.011326 + 30 +0.0 + 11 +34587.499925 + 21 +20746.487279 + 31 +0.0 + 0 +LINE + 5 +2B80 + 8 +0 + 62 + 0 + 10 +34624.999925 + 20 +20811.439184 + 30 +0.0 + 11 +34643.749925 + 21 +20843.915137 + 31 +0.0 + 0 +LINE + 5 +2B81 + 8 +0 + 62 + 0 + 10 +34681.249925 + 20 +20908.867042 + 30 +0.0 + 11 +34693.451044 + 21 +20930.0 + 31 +0.0 + 0 +LINE + 5 +2B82 + 8 +0 + 62 + 0 + 10 +34399.999925 + 20 +20486.679657 + 30 +0.0 + 11 +34418.749925 + 21 +20519.15561 + 31 +0.0 + 0 +LINE + 5 +2B83 + 8 +0 + 62 + 0 + 10 +34456.249925 + 20 +20584.107515 + 30 +0.0 + 11 +34474.999925 + 21 +20616.583468 + 31 +0.0 + 0 +LINE + 5 +2B84 + 8 +0 + 62 + 0 + 10 +34512.499925 + 20 +20681.535373 + 30 +0.0 + 11 +34531.249925 + 21 +20714.011326 + 31 +0.0 + 0 +LINE + 5 +2B85 + 8 +0 + 62 + 0 + 10 +34568.749925 + 20 +20778.963231 + 30 +0.0 + 11 +34587.499925 + 21 +20811.439184 + 31 +0.0 + 0 +LINE + 5 +2B86 + 8 +0 + 62 + 0 + 10 +34624.999925 + 20 +20876.391089 + 30 +0.0 + 11 +34643.749925 + 21 +20908.867042 + 31 +0.0 + 0 +LINE + 5 +2B87 + 8 +0 + 62 + 0 + 10 +34343.749925 + 20 +20454.203705 + 30 +0.0 + 11 +34362.499925 + 21 +20486.679657 + 31 +0.0 + 0 +LINE + 5 +2B88 + 8 +0 + 62 + 0 + 10 +34399.999925 + 20 +20551.631563 + 30 +0.0 + 11 +34418.749925 + 21 +20584.107515 + 31 +0.0 + 0 +LINE + 5 +2B89 + 8 +0 + 62 + 0 + 10 +34456.249925 + 20 +20649.059421 + 30 +0.0 + 11 +34474.999925 + 21 +20681.535373 + 31 +0.0 + 0 +LINE + 5 +2B8A + 8 +0 + 62 + 0 + 10 +34512.499925 + 20 +20746.487279 + 30 +0.0 + 11 +34531.249925 + 21 +20778.963231 + 31 +0.0 + 0 +LINE + 5 +2B8B + 8 +0 + 62 + 0 + 10 +34568.749925 + 20 +20843.915136 + 30 +0.0 + 11 +34587.499925 + 21 +20876.391089 + 31 +0.0 + 0 +LINE + 5 +2B8C + 8 +0 + 62 + 0 + 10 +34292.27591 + 20 +20430.0 + 30 +0.0 + 11 +34306.249925 + 21 +20454.203705 + 31 +0.0 + 0 +LINE + 5 +2B8D + 8 +0 + 62 + 0 + 10 +34343.749925 + 20 +20519.15561 + 30 +0.0 + 11 +34362.499925 + 21 +20551.631563 + 31 +0.0 + 0 +LINE + 5 +2B8E + 8 +0 + 62 + 0 + 10 +34399.999925 + 20 +20616.583468 + 30 +0.0 + 11 +34418.749925 + 21 +20649.059421 + 31 +0.0 + 0 +LINE + 5 +2B8F + 8 +0 + 62 + 0 + 10 +34456.249925 + 20 +20714.011326 + 30 +0.0 + 11 +34474.999925 + 21 +20746.487278 + 31 +0.0 + 0 +LINE + 5 +2B90 + 8 +0 + 62 + 0 + 10 +34512.499925 + 20 +20811.439184 + 30 +0.0 + 11 +34531.249925 + 21 +20843.915136 + 31 +0.0 + 0 +LINE + 5 +2B91 + 8 +0 + 62 + 0 + 10 +34568.749925 + 20 +20908.867042 + 30 +0.0 + 11 +34580.951044 + 21 +20930.0 + 31 +0.0 + 0 +LINE + 5 +2B92 + 8 +0 + 62 + 0 + 10 +34287.499925 + 20 +20486.679657 + 30 +0.0 + 11 +34306.249925 + 21 +20519.15561 + 31 +0.0 + 0 +LINE + 5 +2B93 + 8 +0 + 62 + 0 + 10 +34343.749925 + 20 +20584.107515 + 30 +0.0 + 11 +34362.499925 + 21 +20616.583468 + 31 +0.0 + 0 +LINE + 5 +2B94 + 8 +0 + 62 + 0 + 10 +34399.999925 + 20 +20681.535373 + 30 +0.0 + 11 +34418.749925 + 21 +20714.011326 + 31 +0.0 + 0 +LINE + 5 +2B95 + 8 +0 + 62 + 0 + 10 +34456.249925 + 20 +20778.963231 + 30 +0.0 + 11 +34474.999925 + 21 +20811.439184 + 31 +0.0 + 0 +LINE + 5 +2B96 + 8 +0 + 62 + 0 + 10 +34512.499925 + 20 +20876.391089 + 30 +0.0 + 11 +34531.249925 + 21 +20908.867042 + 31 +0.0 + 0 +LINE + 5 +2B97 + 8 +0 + 62 + 0 + 10 +34231.249925 + 20 +20454.203705 + 30 +0.0 + 11 +34249.999925 + 21 +20486.679657 + 31 +0.0 + 0 +LINE + 5 +2B98 + 8 +0 + 62 + 0 + 10 +34287.499925 + 20 +20551.631562 + 30 +0.0 + 11 +34306.249925 + 21 +20584.107515 + 31 +0.0 + 0 +LINE + 5 +2B99 + 8 +0 + 62 + 0 + 10 +34343.749925 + 20 +20649.05942 + 30 +0.0 + 11 +34362.499925 + 21 +20681.535373 + 31 +0.0 + 0 +LINE + 5 +2B9A + 8 +0 + 62 + 0 + 10 +34399.999925 + 20 +20746.487278 + 30 +0.0 + 11 +34418.749925 + 21 +20778.963231 + 31 +0.0 + 0 +LINE + 5 +2B9B + 8 +0 + 62 + 0 + 10 +34456.249925 + 20 +20843.915136 + 30 +0.0 + 11 +34474.999925 + 21 +20876.391089 + 31 +0.0 + 0 +LINE + 5 +2B9C + 8 +0 + 62 + 0 + 10 +34231.249926 + 20 +20519.15561 + 30 +0.0 + 11 +34249.999926 + 21 +20551.631562 + 31 +0.0 + 0 +LINE + 5 +2B9D + 8 +0 + 62 + 0 + 10 +34287.499926 + 20 +20616.583468 + 30 +0.0 + 11 +34306.249926 + 21 +20649.05942 + 31 +0.0 + 0 +LINE + 5 +2B9E + 8 +0 + 62 + 0 + 10 +34343.749926 + 20 +20714.011326 + 30 +0.0 + 11 +34362.499926 + 21 +20746.487278 + 31 +0.0 + 0 +LINE + 5 +2B9F + 8 +0 + 62 + 0 + 10 +34399.999926 + 20 +20811.439184 + 30 +0.0 + 11 +34418.749926 + 21 +20843.915136 + 31 +0.0 + 0 +LINE + 5 +2BA0 + 8 +0 + 62 + 0 + 10 +34456.249926 + 20 +20908.867041 + 30 +0.0 + 11 +34468.451045 + 21 +20930.0 + 31 +0.0 + 0 +LINE + 5 +2BA1 + 8 +0 + 62 + 0 + 10 +34231.249926 + 20 +20584.107515 + 30 +0.0 + 11 +34249.999926 + 21 +20616.583468 + 31 +0.0 + 0 +LINE + 5 +2BA2 + 8 +0 + 62 + 0 + 10 +34287.499926 + 20 +20681.535373 + 30 +0.0 + 11 +34306.249926 + 21 +20714.011326 + 31 +0.0 + 0 +LINE + 5 +2BA3 + 8 +0 + 62 + 0 + 10 +34343.749926 + 20 +20778.963231 + 30 +0.0 + 11 +34362.499926 + 21 +20811.439183 + 31 +0.0 + 0 +LINE + 5 +2BA4 + 8 +0 + 62 + 0 + 10 +34399.999926 + 20 +20876.391089 + 30 +0.0 + 11 +34418.749926 + 21 +20908.867041 + 31 +0.0 + 0 +LINE + 5 +2BA5 + 8 +0 + 62 + 0 + 10 +34231.249926 + 20 +20649.05942 + 30 +0.0 + 11 +34249.999926 + 21 +20681.535373 + 31 +0.0 + 0 +LINE + 5 +2BA6 + 8 +0 + 62 + 0 + 10 +34287.499926 + 20 +20746.487278 + 30 +0.0 + 11 +34306.249926 + 21 +20778.963231 + 31 +0.0 + 0 +LINE + 5 +2BA7 + 8 +0 + 62 + 0 + 10 +34343.749926 + 20 +20843.915136 + 30 +0.0 + 11 +34362.499926 + 21 +20876.391089 + 31 +0.0 + 0 +LINE + 5 +2BA8 + 8 +0 + 62 + 0 + 10 +34231.249926 + 20 +20714.011325 + 30 +0.0 + 11 +34249.999926 + 21 +20746.487278 + 31 +0.0 + 0 +LINE + 5 +2BA9 + 8 +0 + 62 + 0 + 10 +34287.499926 + 20 +20811.439183 + 30 +0.0 + 11 +34306.249926 + 21 +20843.915136 + 31 +0.0 + 0 +LINE + 5 +2BAA + 8 +0 + 62 + 0 + 10 +34343.749926 + 20 +20908.867041 + 30 +0.0 + 11 +34355.951045 + 21 +20930.0 + 31 +0.0 + 0 +LINE + 5 +2BAB + 8 +0 + 62 + 0 + 10 +34231.249926 + 20 +20778.963231 + 30 +0.0 + 11 +34249.999926 + 21 +20811.439183 + 31 +0.0 + 0 +LINE + 5 +2BAC + 8 +0 + 62 + 0 + 10 +34287.499926 + 20 +20876.391089 + 30 +0.0 + 11 +34306.249926 + 21 +20908.867041 + 31 +0.0 + 0 +LINE + 5 +2BAD + 8 +0 + 62 + 0 + 10 +34231.249926 + 20 +20843.915136 + 30 +0.0 + 11 +34249.999926 + 21 +20876.391088 + 31 +0.0 + 0 +LINE + 5 +2BAE + 8 +0 + 62 + 0 + 10 +34231.249926 + 20 +20908.867041 + 30 +0.0 + 11 +34243.451046 + 21 +20930.0 + 31 +0.0 + 0 +LINE + 5 +2BAF + 8 +0 + 62 + 0 + 10 +34512.499925 + 20 +20486.679658 + 30 +0.0 + 11 +34531.249925 + 21 +20519.15561 + 31 +0.0 + 0 +LINE + 5 +2BB0 + 8 +0 + 62 + 0 + 10 +34568.749925 + 20 +20584.107516 + 30 +0.0 + 11 +34587.499925 + 21 +20616.583468 + 31 +0.0 + 0 +LINE + 5 +2BB1 + 8 +0 + 62 + 0 + 10 +34624.999925 + 20 +20681.535374 + 30 +0.0 + 11 +34643.749925 + 21 +20714.011326 + 31 +0.0 + 0 +LINE + 5 +2BB2 + 8 +0 + 62 + 0 + 10 +34681.249925 + 20 +20778.963231 + 30 +0.0 + 11 +34699.999925 + 21 +20811.439184 + 31 +0.0 + 0 +LINE + 5 +2BB3 + 8 +0 + 62 + 0 + 10 +34737.499925 + 20 +20876.391089 + 30 +0.0 + 11 +34756.249925 + 21 +20908.867042 + 31 +0.0 + 0 +LINE + 5 +2BB4 + 8 +0 + 62 + 0 + 10 +34517.275909 + 20 +20430.0 + 30 +0.0 + 11 +34531.249924 + 21 +20454.203705 + 31 +0.0 + 0 +LINE + 5 +2BB5 + 8 +0 + 62 + 0 + 10 +34568.749924 + 20 +20519.15561 + 30 +0.0 + 11 +34587.499924 + 21 +20551.631563 + 31 +0.0 + 0 +LINE + 5 +2BB6 + 8 +0 + 62 + 0 + 10 +34624.999924 + 20 +20616.583468 + 30 +0.0 + 11 +34643.749924 + 21 +20649.059421 + 31 +0.0 + 0 +LINE + 5 +2BB7 + 8 +0 + 62 + 0 + 10 +34681.249924 + 20 +20714.011326 + 30 +0.0 + 11 +34699.999924 + 21 +20746.487279 + 31 +0.0 + 0 +LINE + 5 +2BB8 + 8 +0 + 62 + 0 + 10 +34737.499924 + 20 +20811.439184 + 30 +0.0 + 11 +34756.249924 + 21 +20843.915137 + 31 +0.0 + 0 +LINE + 5 +2BB9 + 8 +0 + 62 + 0 + 10 +34793.749924 + 20 +20908.867042 + 30 +0.0 + 11 +34805.951043 + 21 +20930.0 + 31 +0.0 + 0 +LINE + 5 +2BBA + 8 +0 + 62 + 0 + 10 +34568.749924 + 20 +20454.203705 + 30 +0.0 + 11 +34587.499924 + 21 +20486.679658 + 31 +0.0 + 0 +LINE + 5 +2BBB + 8 +0 + 62 + 0 + 10 +34624.999924 + 20 +20551.631563 + 30 +0.0 + 11 +34643.749924 + 21 +20584.107516 + 31 +0.0 + 0 +LINE + 5 +2BBC + 8 +0 + 62 + 0 + 10 +34681.249924 + 20 +20649.059421 + 30 +0.0 + 11 +34699.999924 + 21 +20681.535374 + 31 +0.0 + 0 +LINE + 5 +2BBD + 8 +0 + 62 + 0 + 10 +34737.499924 + 20 +20746.487279 + 30 +0.0 + 11 +34756.249924 + 21 +20778.963232 + 31 +0.0 + 0 +LINE + 5 +2BBE + 8 +0 + 62 + 0 + 10 +34793.749924 + 20 +20843.915137 + 30 +0.0 + 11 +34812.499924 + 21 +20876.39109 + 31 +0.0 + 0 +LINE + 5 +2BBF + 8 +0 + 62 + 0 + 10 +34624.999924 + 20 +20486.679658 + 30 +0.0 + 11 +34643.749924 + 21 +20519.155611 + 31 +0.0 + 0 +LINE + 5 +2BC0 + 8 +0 + 62 + 0 + 10 +34681.249924 + 20 +20584.107516 + 30 +0.0 + 11 +34699.999924 + 21 +20616.583468 + 31 +0.0 + 0 +LINE + 5 +2BC1 + 8 +0 + 62 + 0 + 10 +34737.499924 + 20 +20681.535374 + 30 +0.0 + 11 +34756.249924 + 21 +20714.011326 + 31 +0.0 + 0 +LINE + 5 +2BC2 + 8 +0 + 62 + 0 + 10 +34793.749924 + 20 +20778.963232 + 30 +0.0 + 11 +34812.499924 + 21 +20811.439184 + 31 +0.0 + 0 +LINE + 5 +2BC3 + 8 +0 + 62 + 0 + 10 +34849.999924 + 20 +20876.39109 + 30 +0.0 + 11 +34868.749924 + 21 +20908.867042 + 31 +0.0 + 0 +LINE + 5 +2BC4 + 8 +0 + 62 + 0 + 10 +34629.775908 + 20 +20430.0 + 30 +0.0 + 11 +34643.749924 + 21 +20454.203705 + 31 +0.0 + 0 +LINE + 5 +2BC5 + 8 +0 + 62 + 0 + 10 +34681.249924 + 20 +20519.155611 + 30 +0.0 + 11 +34699.999924 + 21 +20551.631563 + 31 +0.0 + 0 +LINE + 5 +2BC6 + 8 +0 + 62 + 0 + 10 +34737.499924 + 20 +20616.583469 + 30 +0.0 + 11 +34756.249924 + 21 +20649.059421 + 31 +0.0 + 0 +LINE + 5 +2BC7 + 8 +0 + 62 + 0 + 10 +34793.749924 + 20 +20714.011326 + 30 +0.0 + 11 +34812.499924 + 21 +20746.487279 + 31 +0.0 + 0 +LINE + 5 +2BC8 + 8 +0 + 62 + 0 + 10 +34849.999924 + 20 +20811.439184 + 30 +0.0 + 11 +34868.749924 + 21 +20843.915137 + 31 +0.0 + 0 +LINE + 5 +2BC9 + 8 +0 + 62 + 0 + 10 +34906.249924 + 20 +20908.867042 + 30 +0.0 + 11 +34918.451043 + 21 +20930.0 + 31 +0.0 + 0 +LINE + 5 +2BCA + 8 +0 + 62 + 0 + 10 +34681.249924 + 20 +20454.203705 + 30 +0.0 + 11 +34699.999924 + 21 +20486.679658 + 31 +0.0 + 0 +LINE + 5 +2BCB + 8 +0 + 62 + 0 + 10 +34737.499924 + 20 +20551.631563 + 30 +0.0 + 11 +34756.249924 + 21 +20584.107516 + 31 +0.0 + 0 +LINE + 5 +2BCC + 8 +0 + 62 + 0 + 10 +34793.749924 + 20 +20649.059421 + 30 +0.0 + 11 +34812.499924 + 21 +20681.535374 + 31 +0.0 + 0 +LINE + 5 +2BCD + 8 +0 + 62 + 0 + 10 +34849.999924 + 20 +20746.487279 + 30 +0.0 + 11 +34868.749924 + 21 +20778.963232 + 31 +0.0 + 0 +LINE + 5 +2BCE + 8 +0 + 62 + 0 + 10 +34906.249924 + 20 +20843.915137 + 30 +0.0 + 11 +34924.999924 + 21 +20876.39109 + 31 +0.0 + 0 +LINE + 5 +2BCF + 8 +0 + 62 + 0 + 10 +34737.499924 + 20 +20486.679658 + 30 +0.0 + 11 +34756.249924 + 21 +20519.155611 + 31 +0.0 + 0 +LINE + 5 +2BD0 + 8 +0 + 62 + 0 + 10 +34793.749924 + 20 +20584.107516 + 30 +0.0 + 11 +34812.499924 + 21 +20616.583469 + 31 +0.0 + 0 +LINE + 5 +2BD1 + 8 +0 + 62 + 0 + 10 +34849.999924 + 20 +20681.535374 + 30 +0.0 + 11 +34868.749924 + 21 +20714.011327 + 31 +0.0 + 0 +LINE + 5 +2BD2 + 8 +0 + 62 + 0 + 10 +34906.249924 + 20 +20778.963232 + 30 +0.0 + 11 +34924.999924 + 21 +20811.439185 + 31 +0.0 + 0 +LINE + 5 +2BD3 + 8 +0 + 62 + 0 + 10 +34962.499924 + 20 +20876.39109 + 30 +0.0 + 11 +34970.0 + 21 +20889.381603 + 31 +0.0 + 0 +LINE + 5 +2BD4 + 8 +0 + 62 + 0 + 10 +34742.275908 + 20 +20430.0 + 30 +0.0 + 11 +34756.249924 + 21 +20454.203706 + 31 +0.0 + 0 +LINE + 5 +2BD5 + 8 +0 + 62 + 0 + 10 +34793.749924 + 20 +20519.155611 + 30 +0.0 + 11 +34812.499924 + 21 +20551.631563 + 31 +0.0 + 0 +LINE + 5 +2BD6 + 8 +0 + 62 + 0 + 10 +34849.999924 + 20 +20616.583469 + 30 +0.0 + 11 +34868.749924 + 21 +20649.059421 + 31 +0.0 + 0 +LINE + 5 +2BD7 + 8 +0 + 62 + 0 + 10 +34906.249924 + 20 +20714.011327 + 30 +0.0 + 11 +34924.999924 + 21 +20746.487279 + 31 +0.0 + 0 +LINE + 5 +2BD8 + 8 +0 + 62 + 0 + 10 +34962.499924 + 20 +20811.439185 + 30 +0.0 + 11 +34970.0 + 21 +20824.429698 + 31 +0.0 + 0 +LINE + 5 +2BD9 + 8 +0 + 62 + 0 + 10 +34793.749924 + 20 +20454.203706 + 30 +0.0 + 11 +34812.499924 + 21 +20486.679658 + 31 +0.0 + 0 +LINE + 5 +2BDA + 8 +0 + 62 + 0 + 10 +34849.999924 + 20 +20551.631564 + 30 +0.0 + 11 +34868.749924 + 21 +20584.107516 + 31 +0.0 + 0 +LINE + 5 +2BDB + 8 +0 + 62 + 0 + 10 +34906.249924 + 20 +20649.059421 + 30 +0.0 + 11 +34924.999924 + 21 +20681.535374 + 31 +0.0 + 0 +LINE + 5 +2BDC + 8 +0 + 62 + 0 + 10 +34962.499924 + 20 +20746.487279 + 30 +0.0 + 11 +34970.0 + 21 +20759.477793 + 31 +0.0 + 0 +LINE + 5 +2BDD + 8 +0 + 62 + 0 + 10 +34849.999923 + 20 +20486.679658 + 30 +0.0 + 11 +34868.749923 + 21 +20519.155611 + 31 +0.0 + 0 +LINE + 5 +2BDE + 8 +0 + 62 + 0 + 10 +34906.249923 + 20 +20584.107516 + 30 +0.0 + 11 +34924.999923 + 21 +20616.583469 + 31 +0.0 + 0 +LINE + 5 +2BDF + 8 +0 + 62 + 0 + 10 +34962.499923 + 20 +20681.535374 + 30 +0.0 + 11 +34970.0 + 21 +20694.525888 + 31 +0.0 + 0 +LINE + 5 +2BE0 + 8 +0 + 62 + 0 + 10 +34854.775907 + 20 +20430.0 + 30 +0.0 + 11 +34868.749923 + 21 +20454.203706 + 31 +0.0 + 0 +LINE + 5 +2BE1 + 8 +0 + 62 + 0 + 10 +34906.249923 + 20 +20519.155611 + 30 +0.0 + 11 +34924.999923 + 21 +20551.631564 + 31 +0.0 + 0 +LINE + 5 +2BE2 + 8 +0 + 62 + 0 + 10 +34962.499923 + 20 +20616.583469 + 30 +0.0 + 11 +34970.0 + 21 +20629.573983 + 31 +0.0 + 0 +LINE + 5 +2BE3 + 8 +0 + 62 + 0 + 10 +34906.249923 + 20 +20454.203706 + 30 +0.0 + 11 +34924.999923 + 21 +20486.679658 + 31 +0.0 + 0 +LINE + 5 +2BE4 + 8 +0 + 62 + 0 + 10 +34962.499923 + 20 +20551.631564 + 30 +0.0 + 11 +34970.0 + 21 +20564.622078 + 31 +0.0 + 0 +LINE + 5 +2BE5 + 8 +0 + 62 + 0 + 10 +34962.499923 + 20 +20486.679659 + 30 +0.0 + 11 +34970.0 + 21 +20499.670173 + 31 +0.0 + 0 +LINE + 5 +2BE6 + 8 +0 + 62 + 0 + 10 +34967.275907 + 20 +20430.0 + 30 +0.0 + 11 +34970.0 + 21 +20434.718268 + 31 +0.0 + 0 +ENDBLK + 5 +2BE7 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X205 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X205 + 1 + + 0 +LINE + 5 +2BE9 + 8 +0 + 62 + 0 + 10 +34271.883092 + 20 +19430.0 + 30 +0.0 + 11 +34771.883092 + 21 +19930.0 + 31 +0.0 + 0 +LINE + 5 +2BEA + 8 +0 + 62 + 0 + 10 +34220.0 + 20 +19554.893603 + 30 +0.0 + 11 +34595.106397 + 21 +19930.0 + 31 +0.0 + 0 +LINE + 5 +2BEB + 8 +0 + 62 + 0 + 10 +34220.0 + 20 +19731.670299 + 30 +0.0 + 11 +34418.329701 + 21 +19930.0 + 31 +0.0 + 0 +LINE + 5 +2BEC + 8 +0 + 62 + 0 + 10 +34220.0 + 20 +19908.446994 + 30 +0.0 + 11 +34241.553006 + 21 +19930.0 + 31 +0.0 + 0 +LINE + 5 +2BED + 8 +0 + 62 + 0 + 10 +34448.659787 + 20 +19430.0 + 30 +0.0 + 11 +34948.659787 + 21 +19930.0 + 31 +0.0 + 0 +LINE + 5 +2BEE + 8 +0 + 62 + 0 + 10 +34625.436483 + 20 +19430.0 + 30 +0.0 + 11 +34970.0 + 21 +19774.563517 + 31 +0.0 + 0 +LINE + 5 +2BEF + 8 +0 + 62 + 0 + 10 +34802.213178 + 20 +19430.0 + 30 +0.0 + 11 +34970.0 + 21 +19597.786822 + 31 +0.0 + 0 +LINE + 5 +2BF0 + 8 +0 + 62 + 0 + 10 +34771.533137 + 20 +19430.0 + 30 +0.0 + 11 +34271.533137 + 21 +19930.0 + 31 +0.0 + 0 +LINE + 5 +2BF1 + 8 +0 + 62 + 0 + 10 +34594.756442 + 20 +19430.0 + 30 +0.0 + 11 +34220.0 + 21 +19804.756442 + 31 +0.0 + 0 +LINE + 5 +2BF2 + 8 +0 + 62 + 0 + 10 +34417.979746 + 20 +19430.0 + 30 +0.0 + 11 +34220.0 + 21 +19627.979746 + 31 +0.0 + 0 +LINE + 5 +2BF3 + 8 +0 + 62 + 0 + 10 +34241.203051 + 20 +19430.0 + 30 +0.0 + 11 +34220.0 + 21 +19451.203051 + 31 +0.0 + 0 +LINE + 5 +2BF4 + 8 +0 + 62 + 0 + 10 +34948.309832 + 20 +19430.0 + 30 +0.0 + 11 +34448.309832 + 21 +19930.0 + 31 +0.0 + 0 +LINE + 5 +2BF5 + 8 +0 + 62 + 0 + 10 +34970.0 + 20 +19585.086528 + 30 +0.0 + 11 +34625.086528 + 21 +19930.0 + 31 +0.0 + 0 +LINE + 5 +2BF6 + 8 +0 + 62 + 0 + 10 +34970.0 + 20 +19761.863223 + 30 +0.0 + 11 +34801.863223 + 21 +19930.0 + 31 +0.0 + 0 +ENDBLK + 5 +2BF7 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D206 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D206 + 1 + + 0 +LINE + 5 +2BF9 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +33321.0 + 20 +5405.0 + 30 +0.0 + 11 +33894.0 + 21 +5405.0 + 31 +0.0 + 0 +INSERT + 5 +2BFA + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +33320.0 + 20 +5405.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2BFB + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +33895.0 + 20 +5405.0 + 30 +0.0 + 0 +TEXT + 5 +2BFC + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +33541.875 + 20 +5492.5 + 30 +0.0 + 40 +175.0 + 1 +11 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +33607.5 + 21 +5580.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2BFD + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +33320.0 + 20 +6755.0 + 30 +0.0 + 0 +POINT + 5 +2BFE + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +33895.0 + 20 +6755.0 + 30 +0.0 + 0 +POINT + 5 +2BFF + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +33895.0 + 20 +5405.0 + 30 +0.0 + 0 +ENDBLK + 5 +2C00 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D207 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D207 + 1 + + 0 +LINE + 5 +2C02 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +33896.0 + 20 +5405.0 + 30 +0.0 + 11 +34199.0 + 21 +5405.0 + 31 +0.0 + 0 +INSERT + 5 +2C03 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +33895.0 + 20 +5405.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2C04 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +34200.0 + 20 +5405.0 + 30 +0.0 + 0 +TEXT + 5 +2C05 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +34003.75 + 20 +5492.5 + 30 +0.0 + 40 +175.0 + 1 +6 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +34047.5 + 21 +5580.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2C06 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +33895.0 + 20 +6755.0 + 30 +0.0 + 0 +POINT + 5 +2C07 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +34200.0 + 20 +6775.0 + 30 +0.0 + 0 +POINT + 5 +2C08 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +34200.0 + 20 +5405.0 + 30 +0.0 + 0 +ENDBLK + 5 +2C09 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D208 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D208 + 1 + + 0 +LINE + 5 +2C0B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +34201.0 + 20 +5405.0 + 30 +0.0 + 11 +34599.0 + 21 +5405.0 + 31 +0.0 + 0 +INSERT + 5 +2C0C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +34200.0 + 20 +5405.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2C0D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +34600.0 + 20 +5405.0 + 30 +0.0 + 0 +TEXT + 5 +2C0E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +34356.25 + 20 +5492.5 + 30 +0.0 + 40 +175.0 + 1 +8 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +34400.0 + 21 +5580.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2C0F + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +34200.0 + 20 +6775.0 + 30 +0.0 + 0 +POINT + 5 +2C10 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +34600.0 + 20 +6775.0 + 30 +0.0 + 0 +POINT + 5 +2C11 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +34600.0 + 20 +5405.0 + 30 +0.0 + 0 +ENDBLK + 5 +2C12 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D209 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D209 + 1 + + 0 +LINE + 5 +2C14 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +34601.0 + 20 +5405.0 + 30 +0.0 + 11 +36424.0 + 21 +5405.0 + 31 +0.0 + 0 +INSERT + 5 +2C15 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +34600.0 + 20 +5405.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2C16 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +36425.0 + 20 +5405.0 + 30 +0.0 + 0 +TEXT + 5 +2C17 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +35403.125 + 20 +5492.5 + 30 +0.0 + 40 +175.0 + 1 +36 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +35512.5 + 21 +5580.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2C18 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +34600.0 + 20 +6775.0 + 30 +0.0 + 0 +POINT + 5 +2C19 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +36425.0 + 20 +6755.0 + 30 +0.0 + 0 +POINT + 5 +2C1A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +36425.0 + 20 +5405.0 + 30 +0.0 + 0 +ENDBLK + 5 +2C1B + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D210 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D210 + 1 + + 0 +LINE + 5 +2C1D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +36426.0 + 20 +5405.0 + 30 +0.0 + 11 +36504.0 + 21 +5405.0 + 31 +0.0 + 0 +INSERT + 5 +2C1E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +36425.0 + 20 +5405.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2C1F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +36505.0 + 20 +5405.0 + 30 +0.0 + 0 +TEXT + 5 +2C20 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +36558.125 + 20 +5492.5 + 30 +0.0 + 40 +175.0 + 1 +1 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +36580.0 + 21 +5580.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2C21 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +36425.0 + 20 +6755.0 + 30 +0.0 + 0 +POINT + 5 +2C22 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +36505.0 + 20 +6755.0 + 30 +0.0 + 0 +POINT + 5 +2C23 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +36505.0 + 20 +5405.0 + 30 +0.0 + 0 +ENDBLK + 5 +2C24 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D211 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D211 + 1 + + 0 +LINE + 5 +2C26 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +37996.0 + 20 +9155.0 + 30 +0.0 + 11 +38574.0 + 21 +9155.0 + 31 +0.0 + 0 +INSERT + 5 +2C27 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +37995.0 + 20 +9155.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2C28 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +38575.0 + 20 +9155.0 + 30 +0.0 + 0 +TEXT + 5 +2C29 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +38219.375 + 20 +9242.5 + 30 +0.0 + 40 +175.0 + 1 +11 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +38285.0 + 21 +9330.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2C2A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +37995.0 + 20 +10130.0 + 30 +0.0 + 0 +POINT + 5 +2C2B + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +38575.0 + 20 +10130.0 + 30 +0.0 + 0 +POINT + 5 +2C2C + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +38575.0 + 20 +9155.0 + 30 +0.0 + 0 +ENDBLK + 5 +2C2D + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D212 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D212 + 1 + + 0 +LINE + 5 +2C2F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +38576.0 + 20 +9155.0 + 30 +0.0 + 11 +39239.0 + 21 +9155.0 + 31 +0.0 + 0 +INSERT + 5 +2C30 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +38575.0 + 20 +9155.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2C31 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +39240.0 + 20 +9155.0 + 30 +0.0 + 0 +TEXT + 5 +2C32 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +38820.0 + 20 +9242.5 + 30 +0.0 + 40 +175.0 + 1 +13 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +38907.5 + 21 +9330.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2C33 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +38575.0 + 20 +10130.0 + 30 +0.0 + 0 +POINT + 5 +2C34 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +39240.0 + 20 +10720.0 + 30 +0.0 + 0 +POINT + 5 +2C35 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +39240.0 + 20 +9155.0 + 30 +0.0 + 0 +ENDBLK + 5 +2C36 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D213 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D213 + 1 + + 0 +LINE + 5 +2C38 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +39241.0 + 20 +9155.0 + 30 +0.0 + 11 +39834.0 + 21 +9155.0 + 31 +0.0 + 0 +INSERT + 5 +2C39 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +39240.0 + 20 +9155.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2C3A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +39835.0 + 20 +9155.0 + 30 +0.0 + 0 +TEXT + 5 +2C3B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +39471.875 + 20 +9242.5 + 30 +0.0 + 40 +175.0 + 1 +11 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +39537.5 + 21 +9330.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2C3C + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +39240.0 + 20 +10720.0 + 30 +0.0 + 0 +POINT + 5 +2C3D + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +39835.0 + 20 +10125.0 + 30 +0.0 + 0 +POINT + 5 +2C3E + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +39835.0 + 20 +9155.0 + 30 +0.0 + 0 +ENDBLK + 5 +2C3F + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D214 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D214 + 1 + + 0 +LINE + 5 +2C41 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +40740.0 + 20 +13254.0 + 30 +0.0 + 11 +40740.0 + 21 +12626.0 + 31 +0.0 + 0 +INSERT + 5 +2C42 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +40740.0 + 20 +13255.0 + 30 +0.0 + 50 +90.0 + 0 +INSERT + 5 +2C43 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +40740.0 + 20 +12625.0 + 30 +0.0 + 50 +270.0 + 0 +TEXT + 5 +2C44 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +40652.5 + 20 +12852.5 + 30 +0.0 + 40 +175.0 + 1 +12 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +40565.0 + 21 +12940.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2C45 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +39815.0 + 20 +13255.0 + 30 +0.0 + 0 +POINT + 5 +2C46 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +39815.0 + 20 +12625.0 + 30 +0.0 + 0 +POINT + 5 +2C47 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +40740.0 + 20 +12625.0 + 30 +0.0 + 0 +ENDBLK + 5 +2C48 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D215 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D215 + 1 + + 0 +LINE + 5 +2C4A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +40740.0 + 20 +12624.0 + 30 +0.0 + 11 +40740.0 + 21 +11956.0 + 31 +0.0 + 0 +INSERT + 5 +2C4B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +40740.0 + 20 +12625.0 + 30 +0.0 + 50 +90.0 + 0 +INSERT + 5 +2C4C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +40740.0 + 20 +11955.0 + 30 +0.0 + 50 +270.0 + 0 +TEXT + 5 +2C4D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +40652.5 + 20 +12202.5 + 30 +0.0 + 40 +175.0 + 1 +13 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +40565.0 + 21 +12290.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2C4E + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +39815.0 + 20 +12625.0 + 30 +0.0 + 0 +POINT + 5 +2C4F + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +39250.0 + 20 +11955.0 + 30 +0.0 + 0 +POINT + 5 +2C50 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +40740.0 + 20 +11955.0 + 30 +0.0 + 0 +ENDBLK + 5 +2C51 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D216 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D216 + 1 + + 0 +LINE + 5 +2C53 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +40740.0 + 20 +11954.0 + 30 +0.0 + 11 +40740.0 + 21 +11366.0 + 31 +0.0 + 0 +INSERT + 5 +2C54 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +40740.0 + 20 +11955.0 + 30 +0.0 + 50 +90.0 + 0 +INSERT + 5 +2C55 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +40740.0 + 20 +11365.0 + 30 +0.0 + 50 +270.0 + 0 +TEXT + 5 +2C56 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +40652.5 + 20 +11594.375 + 30 +0.0 + 40 +175.0 + 1 +11 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +40565.0 + 21 +11660.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2C57 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +39250.0 + 20 +11955.0 + 30 +0.0 + 0 +POINT + 5 +2C58 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +39240.0 + 20 +11365.0 + 30 +0.0 + 0 +POINT + 5 +2C59 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +40740.0 + 20 +11365.0 + 30 +0.0 + 0 +ENDBLK + 5 +2C5A + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D217 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D217 + 1 + + 0 +LINE + 5 +2C5C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +40740.0 + 20 +11364.0 + 30 +0.0 + 11 +40740.0 + 21 +10706.0 + 31 +0.0 + 0 +INSERT + 5 +2C5D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +40740.0 + 20 +11365.0 + 30 +0.0 + 50 +90.0 + 0 +INSERT + 5 +2C5E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +40740.0 + 20 +10705.0 + 30 +0.0 + 50 +270.0 + 0 +TEXT + 5 +2C5F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +40652.5 + 20 +10947.5 + 30 +0.0 + 40 +175.0 + 1 +13 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +40565.0 + 21 +11035.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2C60 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +39240.0 + 20 +11365.0 + 30 +0.0 + 0 +POINT + 5 +2C61 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +39240.0 + 20 +10705.0 + 30 +0.0 + 0 +POINT + 5 +2C62 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +40740.0 + 20 +10705.0 + 30 +0.0 + 0 +ENDBLK + 5 +2C63 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X218 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X218 + 1 + + 0 +LINE + 5 +2C65 + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +9986.355394 + 30 +0.0 + 11 +34265.625 + 21 +9986.355394 + 31 +0.0 + 0 +LINE + 5 +2C66 + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +9986.355394 + 30 +0.0 + 11 +34546.875 + 21 +9986.355394 + 31 +0.0 + 0 +LINE + 5 +2C67 + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +10067.545275 + 30 +0.0 + 11 +34406.25 + 21 +10067.545275 + 31 +0.0 + 0 +LINE + 5 +2C68 + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +10067.545275 + 30 +0.0 + 11 +34600.0 + 21 +10067.545275 + 31 +0.0 + 0 +LINE + 5 +2C69 + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +10148.735156 + 30 +0.0 + 11 +34265.625 + 21 +10148.735156 + 31 +0.0 + 0 +LINE + 5 +2C6A + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +10148.735156 + 30 +0.0 + 11 +34546.875 + 21 +10148.735156 + 31 +0.0 + 0 +LINE + 5 +2C6B + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +10229.925038 + 30 +0.0 + 11 +34406.25 + 21 +10229.925038 + 31 +0.0 + 0 +LINE + 5 +2C6C + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +10229.925038 + 30 +0.0 + 11 +34600.0 + 21 +10229.925038 + 31 +0.0 + 0 +LINE + 5 +2C6D + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +10311.114919 + 30 +0.0 + 11 +34265.625 + 21 +10311.114919 + 31 +0.0 + 0 +LINE + 5 +2C6E + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +10311.114919 + 30 +0.0 + 11 +34546.875 + 21 +10311.114919 + 31 +0.0 + 0 +LINE + 5 +2C6F + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +10392.3048 + 30 +0.0 + 11 +34406.25 + 21 +10392.3048 + 31 +0.0 + 0 +LINE + 5 +2C70 + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +10392.3048 + 30 +0.0 + 11 +34600.0 + 21 +10392.3048 + 31 +0.0 + 0 +LINE + 5 +2C71 + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +10473.494681 + 30 +0.0 + 11 +34265.625 + 21 +10473.494681 + 31 +0.0 + 0 +LINE + 5 +2C72 + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +10473.494681 + 30 +0.0 + 11 +34546.875 + 21 +10473.494681 + 31 +0.0 + 0 +LINE + 5 +2C73 + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +10554.684563 + 30 +0.0 + 11 +34406.25 + 21 +10554.684563 + 31 +0.0 + 0 +LINE + 5 +2C74 + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +10554.684563 + 30 +0.0 + 11 +34600.0 + 21 +10554.684563 + 31 +0.0 + 0 +LINE + 5 +2C75 + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +10635.874444 + 30 +0.0 + 11 +34265.625 + 21 +10635.874444 + 31 +0.0 + 0 +LINE + 5 +2C76 + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +10635.874444 + 30 +0.0 + 11 +34546.875 + 21 +10635.874444 + 31 +0.0 + 0 +LINE + 5 +2C77 + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +10717.064325 + 30 +0.0 + 11 +34406.25 + 21 +10717.064325 + 31 +0.0 + 0 +LINE + 5 +2C78 + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +10717.064325 + 30 +0.0 + 11 +34600.0 + 21 +10717.064325 + 31 +0.0 + 0 +LINE + 5 +2C79 + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +10798.254206 + 30 +0.0 + 11 +34265.625 + 21 +10798.254206 + 31 +0.0 + 0 +LINE + 5 +2C7A + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +10798.254206 + 30 +0.0 + 11 +34546.875 + 21 +10798.254206 + 31 +0.0 + 0 +LINE + 5 +2C7B + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +10879.444088 + 30 +0.0 + 11 +34406.25 + 21 +10879.444088 + 31 +0.0 + 0 +LINE + 5 +2C7C + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +10879.444088 + 30 +0.0 + 11 +34600.0 + 21 +10879.444088 + 31 +0.0 + 0 +LINE + 5 +2C7D + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +10960.633969 + 30 +0.0 + 11 +34265.625 + 21 +10960.633969 + 31 +0.0 + 0 +LINE + 5 +2C7E + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +10960.633969 + 30 +0.0 + 11 +34546.875 + 21 +10960.633969 + 31 +0.0 + 0 +LINE + 5 +2C7F + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +11041.82385 + 30 +0.0 + 11 +34406.25 + 21 +11041.82385 + 31 +0.0 + 0 +LINE + 5 +2C80 + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +11041.82385 + 30 +0.0 + 11 +34600.0 + 21 +11041.82385 + 31 +0.0 + 0 +LINE + 5 +2C81 + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +11123.013731 + 30 +0.0 + 11 +34265.625 + 21 +11123.013731 + 31 +0.0 + 0 +LINE + 5 +2C82 + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +11123.013731 + 30 +0.0 + 11 +34546.875 + 21 +11123.013731 + 31 +0.0 + 0 +LINE + 5 +2C83 + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +11204.203613 + 30 +0.0 + 11 +34406.25 + 21 +11204.203613 + 31 +0.0 + 0 +LINE + 5 +2C84 + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +11204.203613 + 30 +0.0 + 11 +34600.0 + 21 +11204.203613 + 31 +0.0 + 0 +LINE + 5 +2C85 + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +11285.393494 + 30 +0.0 + 11 +34265.625 + 21 +11285.393494 + 31 +0.0 + 0 +LINE + 5 +2C86 + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +11285.393494 + 30 +0.0 + 11 +34546.875 + 21 +11285.393494 + 31 +0.0 + 0 +LINE + 5 +2C87 + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +11366.583375 + 30 +0.0 + 11 +34406.25 + 21 +11366.583375 + 31 +0.0 + 0 +LINE + 5 +2C88 + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +11366.583375 + 30 +0.0 + 11 +34600.0 + 21 +11366.583375 + 31 +0.0 + 0 +LINE + 5 +2C89 + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +11447.773256 + 30 +0.0 + 11 +34265.625 + 21 +11447.773256 + 31 +0.0 + 0 +LINE + 5 +2C8A + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +11447.773256 + 30 +0.0 + 11 +34546.875 + 21 +11447.773256 + 31 +0.0 + 0 +LINE + 5 +2C8B + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +11528.963138 + 30 +0.0 + 11 +34406.25 + 21 +11528.963138 + 31 +0.0 + 0 +LINE + 5 +2C8C + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +11528.963138 + 30 +0.0 + 11 +34600.0 + 21 +11528.963138 + 31 +0.0 + 0 +LINE + 5 +2C8D + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +11610.153019 + 30 +0.0 + 11 +34265.625 + 21 +11610.153019 + 31 +0.0 + 0 +LINE + 5 +2C8E + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +11610.153019 + 30 +0.0 + 11 +34546.875 + 21 +11610.153019 + 31 +0.0 + 0 +LINE + 5 +2C8F + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +11691.3429 + 30 +0.0 + 11 +34406.25 + 21 +11691.3429 + 31 +0.0 + 0 +LINE + 5 +2C90 + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +11691.3429 + 30 +0.0 + 11 +34600.0 + 21 +11691.3429 + 31 +0.0 + 0 +LINE + 5 +2C91 + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +11772.532781 + 30 +0.0 + 11 +34265.625 + 21 +11772.532781 + 31 +0.0 + 0 +LINE + 5 +2C92 + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +11772.532781 + 30 +0.0 + 11 +34546.875 + 21 +11772.532781 + 31 +0.0 + 0 +LINE + 5 +2C93 + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +11853.722663 + 30 +0.0 + 11 +34406.25 + 21 +11853.722663 + 31 +0.0 + 0 +LINE + 5 +2C94 + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +11853.722663 + 30 +0.0 + 11 +34600.0 + 21 +11853.722663 + 31 +0.0 + 0 +LINE + 5 +2C95 + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +11934.912544 + 30 +0.0 + 11 +34265.625 + 21 +11934.912544 + 31 +0.0 + 0 +LINE + 5 +2C96 + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +11934.912544 + 30 +0.0 + 11 +34546.875 + 21 +11934.912544 + 31 +0.0 + 0 +LINE + 5 +2C97 + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +12016.102425 + 30 +0.0 + 11 +34406.25 + 21 +12016.102425 + 31 +0.0 + 0 +LINE + 5 +2C98 + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +12016.102425 + 30 +0.0 + 11 +34600.0 + 21 +12016.102425 + 31 +0.0 + 0 +LINE + 5 +2C99 + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +12097.292306 + 30 +0.0 + 11 +34265.625 + 21 +12097.292306 + 31 +0.0 + 0 +LINE + 5 +2C9A + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +12097.292306 + 30 +0.0 + 11 +34546.875 + 21 +12097.292306 + 31 +0.0 + 0 +LINE + 5 +2C9B + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +12178.482188 + 30 +0.0 + 11 +34406.25 + 21 +12178.482188 + 31 +0.0 + 0 +LINE + 5 +2C9C + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +12178.482188 + 30 +0.0 + 11 +34600.0 + 21 +12178.482188 + 31 +0.0 + 0 +LINE + 5 +2C9D + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +12259.672069 + 30 +0.0 + 11 +34265.625 + 21 +12259.672069 + 31 +0.0 + 0 +LINE + 5 +2C9E + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +12259.672069 + 30 +0.0 + 11 +34546.875 + 21 +12259.672069 + 31 +0.0 + 0 +LINE + 5 +2C9F + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +12340.86195 + 30 +0.0 + 11 +34406.25 + 21 +12340.86195 + 31 +0.0 + 0 +LINE + 5 +2CA0 + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +12340.86195 + 30 +0.0 + 11 +34600.0 + 21 +12340.86195 + 31 +0.0 + 0 +LINE + 5 +2CA1 + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +12422.051831 + 30 +0.0 + 11 +34265.625 + 21 +12422.051831 + 31 +0.0 + 0 +LINE + 5 +2CA2 + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +12422.051831 + 30 +0.0 + 11 +34546.875 + 21 +12422.051831 + 31 +0.0 + 0 +LINE + 5 +2CA3 + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +12503.241713 + 30 +0.0 + 11 +34406.25 + 21 +12503.241713 + 31 +0.0 + 0 +LINE + 5 +2CA4 + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +12503.241713 + 30 +0.0 + 11 +34600.0 + 21 +12503.241713 + 31 +0.0 + 0 +LINE + 5 +2CA5 + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +12584.431594 + 30 +0.0 + 11 +34265.625 + 21 +12584.431594 + 31 +0.0 + 0 +LINE + 5 +2CA6 + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +12584.431594 + 30 +0.0 + 11 +34546.875 + 21 +12584.431594 + 31 +0.0 + 0 +LINE + 5 +2CA7 + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +12665.621475 + 30 +0.0 + 11 +34406.25 + 21 +12665.621475 + 31 +0.0 + 0 +LINE + 5 +2CA8 + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +12665.621475 + 30 +0.0 + 11 +34600.0 + 21 +12665.621475 + 31 +0.0 + 0 +LINE + 5 +2CA9 + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +12746.811356 + 30 +0.0 + 11 +34265.625 + 21 +12746.811356 + 31 +0.0 + 0 +LINE + 5 +2CAA + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +12746.811356 + 30 +0.0 + 11 +34546.875 + 21 +12746.811356 + 31 +0.0 + 0 +LINE + 5 +2CAB + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +12828.001238 + 30 +0.0 + 11 +34406.25 + 21 +12828.001238 + 31 +0.0 + 0 +LINE + 5 +2CAC + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +12828.001238 + 30 +0.0 + 11 +34600.0 + 21 +12828.001238 + 31 +0.0 + 0 +LINE + 5 +2CAD + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +12909.191119 + 30 +0.0 + 11 +34265.625 + 21 +12909.191119 + 31 +0.0 + 0 +LINE + 5 +2CAE + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +12909.191119 + 30 +0.0 + 11 +34546.875 + 21 +12909.191119 + 31 +0.0 + 0 +LINE + 5 +2CAF + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +12990.381 + 30 +0.0 + 11 +34406.25 + 21 +12990.381 + 31 +0.0 + 0 +LINE + 5 +2CB0 + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +12990.381 + 30 +0.0 + 11 +34600.0 + 21 +12990.381 + 31 +0.0 + 0 +LINE + 5 +2CB1 + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +13071.570881 + 30 +0.0 + 11 +34265.625 + 21 +13071.570881 + 31 +0.0 + 0 +LINE + 5 +2CB2 + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +13071.570881 + 30 +0.0 + 11 +34546.875 + 21 +13071.570881 + 31 +0.0 + 0 +LINE + 5 +2CB3 + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +13152.760763 + 30 +0.0 + 11 +34406.25 + 21 +13152.760763 + 31 +0.0 + 0 +LINE + 5 +2CB4 + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +13152.760763 + 30 +0.0 + 11 +34600.0 + 21 +13152.760763 + 31 +0.0 + 0 +LINE + 5 +2CB5 + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +13233.950644 + 30 +0.0 + 11 +34265.625 + 21 +13233.950644 + 31 +0.0 + 0 +LINE + 5 +2CB6 + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +13233.950644 + 30 +0.0 + 11 +34546.875 + 21 +13233.950644 + 31 +0.0 + 0 +LINE + 5 +2CB7 + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +9905.165513 + 30 +0.0 + 11 +34406.25 + 21 +9905.165513 + 31 +0.0 + 0 +LINE + 5 +2CB8 + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +9905.165513 + 30 +0.0 + 11 +34600.0 + 21 +9905.165513 + 31 +0.0 + 0 +LINE + 5 +2CB9 + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +9823.975631 + 30 +0.0 + 11 +34265.625 + 21 +9823.975631 + 31 +0.0 + 0 +LINE + 5 +2CBA + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +9823.975631 + 30 +0.0 + 11 +34546.875 + 21 +9823.975631 + 31 +0.0 + 0 +LINE + 5 +2CBB + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +9742.78575 + 30 +0.0 + 11 +34406.25 + 21 +9742.78575 + 31 +0.0 + 0 +LINE + 5 +2CBC + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +9742.78575 + 30 +0.0 + 11 +34600.0 + 21 +9742.78575 + 31 +0.0 + 0 +LINE + 5 +2CBD + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +9661.595869 + 30 +0.0 + 11 +34265.625 + 21 +9661.595869 + 31 +0.0 + 0 +LINE + 5 +2CBE + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +9661.595869 + 30 +0.0 + 11 +34546.875 + 21 +9661.595869 + 31 +0.0 + 0 +LINE + 5 +2CBF + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +9580.405988 + 30 +0.0 + 11 +34406.25 + 21 +9580.405988 + 31 +0.0 + 0 +LINE + 5 +2CC0 + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +9580.405988 + 30 +0.0 + 11 +34600.0 + 21 +9580.405988 + 31 +0.0 + 0 +LINE + 5 +2CC1 + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +9499.216106 + 30 +0.0 + 11 +34265.625 + 21 +9499.216106 + 31 +0.0 + 0 +LINE + 5 +2CC2 + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +9499.216106 + 30 +0.0 + 11 +34546.875 + 21 +9499.216106 + 31 +0.0 + 0 +LINE + 5 +2CC3 + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +9418.026225 + 30 +0.0 + 11 +34406.25 + 21 +9418.026225 + 31 +0.0 + 0 +LINE + 5 +2CC4 + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +9418.026225 + 30 +0.0 + 11 +34600.0 + 21 +9418.026225 + 31 +0.0 + 0 +LINE + 5 +2CC5 + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +9336.836344 + 30 +0.0 + 11 +34265.625 + 21 +9336.836344 + 31 +0.0 + 0 +LINE + 5 +2CC6 + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +9336.836344 + 30 +0.0 + 11 +34546.875 + 21 +9336.836344 + 31 +0.0 + 0 +LINE + 5 +2CC7 + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +9255.646463 + 30 +0.0 + 11 +34406.25 + 21 +9255.646463 + 31 +0.0 + 0 +LINE + 5 +2CC8 + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +9255.646463 + 30 +0.0 + 11 +34600.0 + 21 +9255.646463 + 31 +0.0 + 0 +LINE + 5 +2CC9 + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +9174.456581 + 30 +0.0 + 11 +34265.625 + 21 +9174.456581 + 31 +0.0 + 0 +LINE + 5 +2CCA + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +9174.456581 + 30 +0.0 + 11 +34546.875 + 21 +9174.456581 + 31 +0.0 + 0 +LINE + 5 +2CCB + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +9093.2667 + 30 +0.0 + 11 +34406.25 + 21 +9093.2667 + 31 +0.0 + 0 +LINE + 5 +2CCC + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +9093.2667 + 30 +0.0 + 11 +34600.0 + 21 +9093.2667 + 31 +0.0 + 0 +LINE + 5 +2CCD + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +9012.076819 + 30 +0.0 + 11 +34265.625 + 21 +9012.076819 + 31 +0.0 + 0 +LINE + 5 +2CCE + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +9012.076819 + 30 +0.0 + 11 +34546.875 + 21 +9012.076819 + 31 +0.0 + 0 +LINE + 5 +2CCF + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +8930.886938 + 30 +0.0 + 11 +34406.25 + 21 +8930.886938 + 31 +0.0 + 0 +LINE + 5 +2CD0 + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +8930.886938 + 30 +0.0 + 11 +34600.0 + 21 +8930.886938 + 31 +0.0 + 0 +LINE + 5 +2CD1 + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +8849.697056 + 30 +0.0 + 11 +34265.625 + 21 +8849.697056 + 31 +0.0 + 0 +LINE + 5 +2CD2 + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +8849.697056 + 30 +0.0 + 11 +34546.875 + 21 +8849.697056 + 31 +0.0 + 0 +LINE + 5 +2CD3 + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +8768.507175 + 30 +0.0 + 11 +34406.25 + 21 +8768.507175 + 31 +0.0 + 0 +LINE + 5 +2CD4 + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +8768.507175 + 30 +0.0 + 11 +34600.0 + 21 +8768.507175 + 31 +0.0 + 0 +LINE + 5 +2CD5 + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +8687.317294 + 30 +0.0 + 11 +34265.625 + 21 +8687.317294 + 31 +0.0 + 0 +LINE + 5 +2CD6 + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +8687.317294 + 30 +0.0 + 11 +34546.875 + 21 +8687.317294 + 31 +0.0 + 0 +LINE + 5 +2CD7 + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +8606.127413 + 30 +0.0 + 11 +34406.25 + 21 +8606.127413 + 31 +0.0 + 0 +LINE + 5 +2CD8 + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +8606.127413 + 30 +0.0 + 11 +34600.0 + 21 +8606.127413 + 31 +0.0 + 0 +LINE + 5 +2CD9 + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +8524.937531 + 30 +0.0 + 11 +34265.625 + 21 +8524.937531 + 31 +0.0 + 0 +LINE + 5 +2CDA + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +8524.937531 + 30 +0.0 + 11 +34546.875 + 21 +8524.937531 + 31 +0.0 + 0 +LINE + 5 +2CDB + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +8443.74765 + 30 +0.0 + 11 +34406.25 + 21 +8443.74765 + 31 +0.0 + 0 +LINE + 5 +2CDC + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +8443.74765 + 30 +0.0 + 11 +34600.0 + 21 +8443.74765 + 31 +0.0 + 0 +LINE + 5 +2CDD + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +8362.557769 + 30 +0.0 + 11 +34265.625 + 21 +8362.557769 + 31 +0.0 + 0 +LINE + 5 +2CDE + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +8362.557769 + 30 +0.0 + 11 +34546.875 + 21 +8362.557769 + 31 +0.0 + 0 +LINE + 5 +2CDF + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +8281.367888 + 30 +0.0 + 11 +34406.25 + 21 +8281.367888 + 31 +0.0 + 0 +LINE + 5 +2CE0 + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +8281.367888 + 30 +0.0 + 11 +34600.0 + 21 +8281.367888 + 31 +0.0 + 0 +LINE + 5 +2CE1 + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +8200.178006 + 30 +0.0 + 11 +34265.625 + 21 +8200.178006 + 31 +0.0 + 0 +LINE + 5 +2CE2 + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +8200.178006 + 30 +0.0 + 11 +34546.875 + 21 +8200.178006 + 31 +0.0 + 0 +LINE + 5 +2CE3 + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +8118.988125 + 30 +0.0 + 11 +34406.25 + 21 +8118.988125 + 31 +0.0 + 0 +LINE + 5 +2CE4 + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +8118.988125 + 30 +0.0 + 11 +34600.0 + 21 +8118.988125 + 31 +0.0 + 0 +LINE + 5 +2CE5 + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +8037.798244 + 30 +0.0 + 11 +34265.625 + 21 +8037.798244 + 31 +0.0 + 0 +LINE + 5 +2CE6 + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +8037.798244 + 30 +0.0 + 11 +34546.875 + 21 +8037.798244 + 31 +0.0 + 0 +LINE + 5 +2CE7 + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +7956.608363 + 30 +0.0 + 11 +34406.25 + 21 +7956.608363 + 31 +0.0 + 0 +LINE + 5 +2CE8 + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +7956.608363 + 30 +0.0 + 11 +34600.0 + 21 +7956.608363 + 31 +0.0 + 0 +LINE + 5 +2CE9 + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +7875.418481 + 30 +0.0 + 11 +34265.625 + 21 +7875.418481 + 31 +0.0 + 0 +LINE + 5 +2CEA + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +7875.418481 + 30 +0.0 + 11 +34546.875 + 21 +7875.418481 + 31 +0.0 + 0 +LINE + 5 +2CEB + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +7794.2286 + 30 +0.0 + 11 +34406.25 + 21 +7794.2286 + 31 +0.0 + 0 +LINE + 5 +2CEC + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +7794.2286 + 30 +0.0 + 11 +34600.0 + 21 +7794.2286 + 31 +0.0 + 0 +LINE + 5 +2CED + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +7713.038719 + 30 +0.0 + 11 +34265.625 + 21 +7713.038719 + 31 +0.0 + 0 +LINE + 5 +2CEE + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +7713.038719 + 30 +0.0 + 11 +34546.875 + 21 +7713.038719 + 31 +0.0 + 0 +LINE + 5 +2CEF + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +7631.848838 + 30 +0.0 + 11 +34406.25 + 21 +7631.848838 + 31 +0.0 + 0 +LINE + 5 +2CF0 + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +7631.848838 + 30 +0.0 + 11 +34600.0 + 21 +7631.848838 + 31 +0.0 + 0 +LINE + 5 +2CF1 + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +7550.658956 + 30 +0.0 + 11 +34265.625 + 21 +7550.658956 + 31 +0.0 + 0 +LINE + 5 +2CF2 + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +7550.658956 + 30 +0.0 + 11 +34546.875 + 21 +7550.658956 + 31 +0.0 + 0 +LINE + 5 +2CF3 + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +7469.469075 + 30 +0.0 + 11 +34406.25 + 21 +7469.469075 + 31 +0.0 + 0 +LINE + 5 +2CF4 + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +7469.469075 + 30 +0.0 + 11 +34600.0 + 21 +7469.469075 + 31 +0.0 + 0 +LINE + 5 +2CF5 + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +7388.279194 + 30 +0.0 + 11 +34265.625 + 21 +7388.279194 + 31 +0.0 + 0 +LINE + 5 +2CF6 + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +7388.279194 + 30 +0.0 + 11 +34546.875 + 21 +7388.279194 + 31 +0.0 + 0 +LINE + 5 +2CF7 + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +7307.089313 + 30 +0.0 + 11 +34406.25 + 21 +7307.089313 + 31 +0.0 + 0 +LINE + 5 +2CF8 + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +7307.089313 + 30 +0.0 + 11 +34600.0 + 21 +7307.089313 + 31 +0.0 + 0 +LINE + 5 +2CF9 + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +7225.899431 + 30 +0.0 + 11 +34265.625 + 21 +7225.899431 + 31 +0.0 + 0 +LINE + 5 +2CFA + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +7225.899431 + 30 +0.0 + 11 +34546.875 + 21 +7225.899431 + 31 +0.0 + 0 +LINE + 5 +2CFB + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +7144.70955 + 30 +0.0 + 11 +34406.25 + 21 +7144.70955 + 31 +0.0 + 0 +LINE + 5 +2CFC + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +7144.70955 + 30 +0.0 + 11 +34600.0 + 21 +7144.70955 + 31 +0.0 + 0 +LINE + 5 +2CFD + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +7063.519669 + 30 +0.0 + 11 +34265.625 + 21 +7063.519669 + 31 +0.0 + 0 +LINE + 5 +2CFE + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +7063.519669 + 30 +0.0 + 11 +34546.875 + 21 +7063.519669 + 31 +0.0 + 0 +LINE + 5 +2CFF + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +6982.329788 + 30 +0.0 + 11 +34406.25 + 21 +6982.329788 + 31 +0.0 + 0 +LINE + 5 +2D00 + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +6982.329788 + 30 +0.0 + 11 +34600.0 + 21 +6982.329788 + 31 +0.0 + 0 +LINE + 5 +2D01 + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +6901.139906 + 30 +0.0 + 11 +34265.625 + 21 +6901.139906 + 31 +0.0 + 0 +LINE + 5 +2D02 + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +6901.139906 + 30 +0.0 + 11 +34546.875 + 21 +6901.139906 + 31 +0.0 + 0 +LINE + 5 +2D03 + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +6819.950025 + 30 +0.0 + 11 +34406.25 + 21 +6819.950025 + 31 +0.0 + 0 +LINE + 5 +2D04 + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +6819.950025 + 30 +0.0 + 11 +34600.0 + 21 +6819.950025 + 31 +0.0 + 0 +LINE + 5 +2D05 + 8 +0 + 62 + 0 + 10 +34593.749868 + 20 +9580.405953 + 30 +0.0 + 11 +34546.874868 + 21 +9661.595835 + 31 +0.0 + 0 +LINE + 5 +2D06 + 8 +0 + 62 + 0 + 10 +34453.124868 + 20 +9823.975598 + 30 +0.0 + 11 +34406.249868 + 21 +9905.16548 + 31 +0.0 + 0 +LINE + 5 +2D07 + 8 +0 + 62 + 0 + 10 +34312.499868 + 20 +10067.545243 + 30 +0.0 + 11 +34265.624868 + 21 +10148.735125 + 31 +0.0 + 0 +LINE + 5 +2D08 + 8 +0 + 62 + 0 + 10 +34593.749869 + 20 +9418.02619 + 30 +0.0 + 11 +34546.874869 + 21 +9499.216072 + 31 +0.0 + 0 +LINE + 5 +2D09 + 8 +0 + 62 + 0 + 10 +34453.124869 + 20 +9661.595835 + 30 +0.0 + 11 +34406.249869 + 21 +9742.785717 + 31 +0.0 + 0 +LINE + 5 +2D0A + 8 +0 + 62 + 0 + 10 +34312.499869 + 20 +9905.16548 + 30 +0.0 + 11 +34265.624869 + 21 +9986.355362 + 31 +0.0 + 0 +LINE + 5 +2D0B + 8 +0 + 62 + 0 + 10 +34593.749869 + 20 +9255.646427 + 30 +0.0 + 11 +34546.874869 + 21 +9336.836309 + 31 +0.0 + 0 +LINE + 5 +2D0C + 8 +0 + 62 + 0 + 10 +34453.124869 + 20 +9499.216072 + 30 +0.0 + 11 +34406.249869 + 21 +9580.405954 + 31 +0.0 + 0 +LINE + 5 +2D0D + 8 +0 + 62 + 0 + 10 +34312.499869 + 20 +9742.785717 + 30 +0.0 + 11 +34265.624869 + 21 +9823.975599 + 31 +0.0 + 0 +LINE + 5 +2D0E + 8 +0 + 62 + 0 + 10 +34593.749869 + 20 +9093.266664 + 30 +0.0 + 11 +34546.874869 + 21 +9174.456546 + 31 +0.0 + 0 +LINE + 5 +2D0F + 8 +0 + 62 + 0 + 10 +34453.124869 + 20 +9336.836309 + 30 +0.0 + 11 +34406.249869 + 21 +9418.026191 + 31 +0.0 + 0 +LINE + 5 +2D10 + 8 +0 + 62 + 0 + 10 +34312.499869 + 20 +9580.405954 + 30 +0.0 + 11 +34265.624869 + 21 +9661.595836 + 31 +0.0 + 0 +LINE + 5 +2D11 + 8 +0 + 62 + 0 + 10 +34593.74987 + 20 +8930.886901 + 30 +0.0 + 11 +34546.87487 + 21 +9012.076783 + 31 +0.0 + 0 +LINE + 5 +2D12 + 8 +0 + 62 + 0 + 10 +34453.12487 + 20 +9174.456546 + 30 +0.0 + 11 +34406.24987 + 21 +9255.646428 + 31 +0.0 + 0 +LINE + 5 +2D13 + 8 +0 + 62 + 0 + 10 +34312.49987 + 20 +9418.026191 + 30 +0.0 + 11 +34265.62487 + 21 +9499.216073 + 31 +0.0 + 0 +LINE + 5 +2D14 + 8 +0 + 62 + 0 + 10 +34593.74987 + 20 +8768.507138 + 30 +0.0 + 11 +34546.87487 + 21 +8849.69702 + 31 +0.0 + 0 +LINE + 5 +2D15 + 8 +0 + 62 + 0 + 10 +34453.12487 + 20 +9012.076783 + 30 +0.0 + 11 +34406.24987 + 21 +9093.266665 + 31 +0.0 + 0 +LINE + 5 +2D16 + 8 +0 + 62 + 0 + 10 +34312.49987 + 20 +9255.646428 + 30 +0.0 + 11 +34265.62487 + 21 +9336.83631 + 31 +0.0 + 0 +LINE + 5 +2D17 + 8 +0 + 62 + 0 + 10 +34593.74987 + 20 +8606.127375 + 30 +0.0 + 11 +34546.87487 + 21 +8687.317257 + 31 +0.0 + 0 +LINE + 5 +2D18 + 8 +0 + 62 + 0 + 10 +34453.12487 + 20 +8849.69702 + 30 +0.0 + 11 +34406.24987 + 21 +8930.886902 + 31 +0.0 + 0 +LINE + 5 +2D19 + 8 +0 + 62 + 0 + 10 +34312.49987 + 20 +9093.266665 + 30 +0.0 + 11 +34265.62487 + 21 +9174.456546 + 31 +0.0 + 0 +LINE + 5 +2D1A + 8 +0 + 62 + 0 + 10 +34593.749871 + 20 +8443.747612 + 30 +0.0 + 11 +34546.874871 + 21 +8524.937494 + 31 +0.0 + 0 +LINE + 5 +2D1B + 8 +0 + 62 + 0 + 10 +34453.124871 + 20 +8687.317257 + 30 +0.0 + 11 +34406.249871 + 21 +8768.507139 + 31 +0.0 + 0 +LINE + 5 +2D1C + 8 +0 + 62 + 0 + 10 +34312.499871 + 20 +8930.886902 + 30 +0.0 + 11 +34265.624871 + 21 +9012.076783 + 31 +0.0 + 0 +LINE + 5 +2D1D + 8 +0 + 62 + 0 + 10 +34593.749871 + 20 +8281.367849 + 30 +0.0 + 11 +34546.874871 + 21 +8362.557731 + 31 +0.0 + 0 +LINE + 5 +2D1E + 8 +0 + 62 + 0 + 10 +34453.124871 + 20 +8524.937494 + 30 +0.0 + 11 +34406.249871 + 21 +8606.127376 + 31 +0.0 + 0 +LINE + 5 +2D1F + 8 +0 + 62 + 0 + 10 +34312.499871 + 20 +8768.507139 + 30 +0.0 + 11 +34265.624871 + 21 +8849.69702 + 31 +0.0 + 0 +LINE + 5 +2D20 + 8 +0 + 62 + 0 + 10 +34593.749871 + 20 +8118.988086 + 30 +0.0 + 11 +34546.874871 + 21 +8200.177968 + 31 +0.0 + 0 +LINE + 5 +2D21 + 8 +0 + 62 + 0 + 10 +34453.124871 + 20 +8362.557731 + 30 +0.0 + 11 +34406.249871 + 21 +8443.747613 + 31 +0.0 + 0 +LINE + 5 +2D22 + 8 +0 + 62 + 0 + 10 +34312.499871 + 20 +8606.127376 + 30 +0.0 + 11 +34265.624871 + 21 +8687.317257 + 31 +0.0 + 0 +LINE + 5 +2D23 + 8 +0 + 62 + 0 + 10 +34593.749872 + 20 +7956.608323 + 30 +0.0 + 11 +34546.874872 + 21 +8037.798205 + 31 +0.0 + 0 +LINE + 5 +2D24 + 8 +0 + 62 + 0 + 10 +34453.124872 + 20 +8200.177968 + 30 +0.0 + 11 +34406.249872 + 21 +8281.36785 + 31 +0.0 + 0 +LINE + 5 +2D25 + 8 +0 + 62 + 0 + 10 +34312.499872 + 20 +8443.747613 + 30 +0.0 + 11 +34265.624872 + 21 +8524.937494 + 31 +0.0 + 0 +LINE + 5 +2D26 + 8 +0 + 62 + 0 + 10 +34593.749872 + 20 +7794.22856 + 30 +0.0 + 11 +34546.874872 + 21 +7875.418442 + 31 +0.0 + 0 +LINE + 5 +2D27 + 8 +0 + 62 + 0 + 10 +34453.124872 + 20 +8037.798205 + 30 +0.0 + 11 +34406.249872 + 21 +8118.988087 + 31 +0.0 + 0 +LINE + 5 +2D28 + 8 +0 + 62 + 0 + 10 +34312.499872 + 20 +8281.36785 + 30 +0.0 + 11 +34265.624872 + 21 +8362.557731 + 31 +0.0 + 0 +LINE + 5 +2D29 + 8 +0 + 62 + 0 + 10 +34593.749872 + 20 +7631.848797 + 30 +0.0 + 11 +34546.874872 + 21 +7713.038679 + 31 +0.0 + 0 +LINE + 5 +2D2A + 8 +0 + 62 + 0 + 10 +34453.124872 + 20 +7875.418442 + 30 +0.0 + 11 +34406.249872 + 21 +7956.608323 + 31 +0.0 + 0 +LINE + 5 +2D2B + 8 +0 + 62 + 0 + 10 +34312.499872 + 20 +8118.988087 + 30 +0.0 + 11 +34265.624872 + 21 +8200.177968 + 31 +0.0 + 0 +LINE + 5 +2D2C + 8 +0 + 62 + 0 + 10 +34593.749872 + 20 +7469.469034 + 30 +0.0 + 11 +34546.874872 + 21 +7550.658916 + 31 +0.0 + 0 +LINE + 5 +2D2D + 8 +0 + 62 + 0 + 10 +34453.124872 + 20 +7713.038679 + 30 +0.0 + 11 +34406.249872 + 21 +7794.22856 + 31 +0.0 + 0 +LINE + 5 +2D2E + 8 +0 + 62 + 0 + 10 +34312.499872 + 20 +7956.608324 + 30 +0.0 + 11 +34265.624872 + 21 +8037.798205 + 31 +0.0 + 0 +LINE + 5 +2D2F + 8 +0 + 62 + 0 + 10 +34593.749873 + 20 +7307.089271 + 30 +0.0 + 11 +34546.874873 + 21 +7388.279153 + 31 +0.0 + 0 +LINE + 5 +2D30 + 8 +0 + 62 + 0 + 10 +34453.124873 + 20 +7550.658916 + 30 +0.0 + 11 +34406.249873 + 21 +7631.848797 + 31 +0.0 + 0 +LINE + 5 +2D31 + 8 +0 + 62 + 0 + 10 +34312.499873 + 20 +7794.228561 + 30 +0.0 + 11 +34265.624873 + 21 +7875.418442 + 31 +0.0 + 0 +LINE + 5 +2D32 + 8 +0 + 62 + 0 + 10 +34593.749873 + 20 +7144.709508 + 30 +0.0 + 11 +34546.874873 + 21 +7225.89939 + 31 +0.0 + 0 +LINE + 5 +2D33 + 8 +0 + 62 + 0 + 10 +34453.124873 + 20 +7388.279153 + 30 +0.0 + 11 +34406.249873 + 21 +7469.469034 + 31 +0.0 + 0 +LINE + 5 +2D34 + 8 +0 + 62 + 0 + 10 +34312.499873 + 20 +7631.848798 + 30 +0.0 + 11 +34265.624873 + 21 +7713.038679 + 31 +0.0 + 0 +LINE + 5 +2D35 + 8 +0 + 62 + 0 + 10 +34593.749873 + 20 +6982.329745 + 30 +0.0 + 11 +34546.874873 + 21 +7063.519627 + 31 +0.0 + 0 +LINE + 5 +2D36 + 8 +0 + 62 + 0 + 10 +34453.124873 + 20 +7225.89939 + 30 +0.0 + 11 +34406.249873 + 21 +7307.089271 + 31 +0.0 + 0 +LINE + 5 +2D37 + 8 +0 + 62 + 0 + 10 +34312.499873 + 20 +7469.469035 + 30 +0.0 + 11 +34265.624873 + 21 +7550.658916 + 31 +0.0 + 0 +LINE + 5 +2D38 + 8 +0 + 62 + 0 + 10 +34593.749874 + 20 +6819.949982 + 30 +0.0 + 11 +34546.874874 + 21 +6901.139863 + 31 +0.0 + 0 +LINE + 5 +2D39 + 8 +0 + 62 + 0 + 10 +34453.124874 + 20 +7063.519627 + 30 +0.0 + 11 +34406.249874 + 21 +7144.709508 + 31 +0.0 + 0 +LINE + 5 +2D3A + 8 +0 + 62 + 0 + 10 +34312.499874 + 20 +7307.089272 + 30 +0.0 + 11 +34265.624874 + 21 +7388.279153 + 31 +0.0 + 0 +LINE + 5 +2D3B + 8 +0 + 62 + 0 + 10 +34453.124874 + 20 +6901.139864 + 30 +0.0 + 11 +34406.249874 + 21 +6982.329745 + 31 +0.0 + 0 +LINE + 5 +2D3C + 8 +0 + 62 + 0 + 10 +34312.499874 + 20 +7144.709508 + 30 +0.0 + 11 +34265.624874 + 21 +7225.89939 + 31 +0.0 + 0 +LINE + 5 +2D3D + 8 +0 + 62 + 0 + 10 +34446.635515 + 20 +6750.0 + 30 +0.0 + 11 +34406.249874 + 21 +6819.949982 + 31 +0.0 + 0 +LINE + 5 +2D3E + 8 +0 + 62 + 0 + 10 +34312.499874 + 20 +6982.329745 + 30 +0.0 + 11 +34265.624874 + 21 +7063.519627 + 31 +0.0 + 0 +LINE + 5 +2D3F + 8 +0 + 62 + 0 + 10 +34312.499875 + 20 +6819.949982 + 30 +0.0 + 11 +34265.624875 + 21 +6901.139864 + 31 +0.0 + 0 +LINE + 5 +2D40 + 8 +0 + 62 + 0 + 10 +34593.749868 + 20 +9742.785716 + 30 +0.0 + 11 +34546.874868 + 21 +9823.975598 + 31 +0.0 + 0 +LINE + 5 +2D41 + 8 +0 + 62 + 0 + 10 +34453.124868 + 20 +9986.355361 + 30 +0.0 + 11 +34406.249868 + 21 +10067.545243 + 31 +0.0 + 0 +LINE + 5 +2D42 + 8 +0 + 62 + 0 + 10 +34312.499868 + 20 +10229.925006 + 30 +0.0 + 11 +34265.624868 + 21 +10311.114888 + 31 +0.0 + 0 +LINE + 5 +2D43 + 8 +0 + 62 + 0 + 10 +34593.749868 + 20 +9905.16548 + 30 +0.0 + 11 +34546.874868 + 21 +9986.355361 + 31 +0.0 + 0 +LINE + 5 +2D44 + 8 +0 + 62 + 0 + 10 +34453.124868 + 20 +10148.735124 + 30 +0.0 + 11 +34406.249868 + 21 +10229.925006 + 31 +0.0 + 0 +LINE + 5 +2D45 + 8 +0 + 62 + 0 + 10 +34312.499868 + 20 +10392.304769 + 30 +0.0 + 11 +34265.624868 + 21 +10473.494651 + 31 +0.0 + 0 +LINE + 5 +2D46 + 8 +0 + 62 + 0 + 10 +34593.749868 + 20 +10067.545243 + 30 +0.0 + 11 +34546.874868 + 21 +10148.735124 + 31 +0.0 + 0 +LINE + 5 +2D47 + 8 +0 + 62 + 0 + 10 +34453.124868 + 20 +10311.114887 + 30 +0.0 + 11 +34406.249868 + 21 +10392.304769 + 31 +0.0 + 0 +LINE + 5 +2D48 + 8 +0 + 62 + 0 + 10 +34312.499868 + 20 +10554.684532 + 30 +0.0 + 11 +34265.624868 + 21 +10635.874414 + 31 +0.0 + 0 +LINE + 5 +2D49 + 8 +0 + 62 + 0 + 10 +34593.749867 + 20 +10229.925006 + 30 +0.0 + 11 +34546.874867 + 21 +10311.114887 + 31 +0.0 + 0 +LINE + 5 +2D4A + 8 +0 + 62 + 0 + 10 +34453.124867 + 20 +10473.49465 + 30 +0.0 + 11 +34406.249867 + 21 +10554.684532 + 31 +0.0 + 0 +LINE + 5 +2D4B + 8 +0 + 62 + 0 + 10 +34312.499867 + 20 +10717.064295 + 30 +0.0 + 11 +34265.624867 + 21 +10798.254177 + 31 +0.0 + 0 +LINE + 5 +2D4C + 8 +0 + 62 + 0 + 10 +34593.749867 + 20 +10392.304769 + 30 +0.0 + 11 +34546.874867 + 21 +10473.49465 + 31 +0.0 + 0 +LINE + 5 +2D4D + 8 +0 + 62 + 0 + 10 +34453.124867 + 20 +10635.874413 + 30 +0.0 + 11 +34406.249867 + 21 +10717.064295 + 31 +0.0 + 0 +LINE + 5 +2D4E + 8 +0 + 62 + 0 + 10 +34312.499867 + 20 +10879.444058 + 30 +0.0 + 11 +34265.624867 + 21 +10960.63394 + 31 +0.0 + 0 +LINE + 5 +2D4F + 8 +0 + 62 + 0 + 10 +34593.749867 + 20 +10554.684532 + 30 +0.0 + 11 +34546.874867 + 21 +10635.874413 + 31 +0.0 + 0 +LINE + 5 +2D50 + 8 +0 + 62 + 0 + 10 +34453.124867 + 20 +10798.254176 + 30 +0.0 + 11 +34406.249867 + 21 +10879.444058 + 31 +0.0 + 0 +LINE + 5 +2D51 + 8 +0 + 62 + 0 + 10 +34312.499867 + 20 +11041.823821 + 30 +0.0 + 11 +34265.624867 + 21 +11123.013703 + 31 +0.0 + 0 +LINE + 5 +2D52 + 8 +0 + 62 + 0 + 10 +34593.749866 + 20 +10717.064295 + 30 +0.0 + 11 +34546.874866 + 21 +10798.254176 + 31 +0.0 + 0 +LINE + 5 +2D53 + 8 +0 + 62 + 0 + 10 +34453.124866 + 20 +10960.633939 + 30 +0.0 + 11 +34406.249866 + 21 +11041.823821 + 31 +0.0 + 0 +LINE + 5 +2D54 + 8 +0 + 62 + 0 + 10 +34312.499866 + 20 +11204.203584 + 30 +0.0 + 11 +34265.624866 + 21 +11285.393466 + 31 +0.0 + 0 +LINE + 5 +2D55 + 8 +0 + 62 + 0 + 10 +34593.749866 + 20 +10879.444058 + 30 +0.0 + 11 +34546.874866 + 21 +10960.633939 + 31 +0.0 + 0 +LINE + 5 +2D56 + 8 +0 + 62 + 0 + 10 +34453.124866 + 20 +11123.013703 + 30 +0.0 + 11 +34406.249866 + 21 +11204.203584 + 31 +0.0 + 0 +LINE + 5 +2D57 + 8 +0 + 62 + 0 + 10 +34312.499866 + 20 +11366.583347 + 30 +0.0 + 11 +34265.624866 + 21 +11447.773229 + 31 +0.0 + 0 +LINE + 5 +2D58 + 8 +0 + 62 + 0 + 10 +34593.749866 + 20 +11041.823821 + 30 +0.0 + 11 +34546.874866 + 21 +11123.013702 + 31 +0.0 + 0 +LINE + 5 +2D59 + 8 +0 + 62 + 0 + 10 +34453.124866 + 20 +11285.393466 + 30 +0.0 + 11 +34406.249866 + 21 +11366.583347 + 31 +0.0 + 0 +LINE + 5 +2D5A + 8 +0 + 62 + 0 + 10 +34312.499866 + 20 +11528.96311 + 30 +0.0 + 11 +34265.624866 + 21 +11610.152992 + 31 +0.0 + 0 +LINE + 5 +2D5B + 8 +0 + 62 + 0 + 10 +34593.749865 + 20 +11204.203584 + 30 +0.0 + 11 +34546.874865 + 21 +11285.393465 + 31 +0.0 + 0 +LINE + 5 +2D5C + 8 +0 + 62 + 0 + 10 +34453.124865 + 20 +11447.773229 + 30 +0.0 + 11 +34406.249865 + 21 +11528.96311 + 31 +0.0 + 0 +LINE + 5 +2D5D + 8 +0 + 62 + 0 + 10 +34312.499865 + 20 +11691.342873 + 30 +0.0 + 11 +34265.624865 + 21 +11772.532755 + 31 +0.0 + 0 +LINE + 5 +2D5E + 8 +0 + 62 + 0 + 10 +34593.749865 + 20 +11366.583347 + 30 +0.0 + 11 +34546.874865 + 21 +11447.773228 + 31 +0.0 + 0 +LINE + 5 +2D5F + 8 +0 + 62 + 0 + 10 +34453.124865 + 20 +11610.152992 + 30 +0.0 + 11 +34406.249865 + 21 +11691.342873 + 31 +0.0 + 0 +LINE + 5 +2D60 + 8 +0 + 62 + 0 + 10 +34312.499865 + 20 +11853.722636 + 30 +0.0 + 11 +34265.624865 + 21 +11934.912518 + 31 +0.0 + 0 +LINE + 5 +2D61 + 8 +0 + 62 + 0 + 10 +34593.749865 + 20 +11528.96311 + 30 +0.0 + 11 +34546.874865 + 21 +11610.152991 + 31 +0.0 + 0 +LINE + 5 +2D62 + 8 +0 + 62 + 0 + 10 +34453.124865 + 20 +11772.532755 + 30 +0.0 + 11 +34406.249865 + 21 +11853.722636 + 31 +0.0 + 0 +LINE + 5 +2D63 + 8 +0 + 62 + 0 + 10 +34312.499865 + 20 +12016.102399 + 30 +0.0 + 11 +34265.624865 + 21 +12097.292281 + 31 +0.0 + 0 +LINE + 5 +2D64 + 8 +0 + 62 + 0 + 10 +34593.749864 + 20 +11691.342873 + 30 +0.0 + 11 +34546.874864 + 21 +11772.532754 + 31 +0.0 + 0 +LINE + 5 +2D65 + 8 +0 + 62 + 0 + 10 +34453.124864 + 20 +11934.912518 + 30 +0.0 + 11 +34406.249864 + 21 +12016.102399 + 31 +0.0 + 0 +LINE + 5 +2D66 + 8 +0 + 62 + 0 + 10 +34312.499864 + 20 +12178.482162 + 30 +0.0 + 11 +34265.624864 + 21 +12259.672044 + 31 +0.0 + 0 +LINE + 5 +2D67 + 8 +0 + 62 + 0 + 10 +34593.749864 + 20 +11853.722636 + 30 +0.0 + 11 +34546.874864 + 21 +11934.912517 + 31 +0.0 + 0 +LINE + 5 +2D68 + 8 +0 + 62 + 0 + 10 +34453.124864 + 20 +12097.292281 + 30 +0.0 + 11 +34406.249864 + 21 +12178.482162 + 31 +0.0 + 0 +LINE + 5 +2D69 + 8 +0 + 62 + 0 + 10 +34312.499864 + 20 +12340.861926 + 30 +0.0 + 11 +34265.624864 + 21 +12422.051807 + 31 +0.0 + 0 +LINE + 5 +2D6A + 8 +0 + 62 + 0 + 10 +34593.749864 + 20 +12016.102399 + 30 +0.0 + 11 +34546.874864 + 21 +12097.292281 + 31 +0.0 + 0 +LINE + 5 +2D6B + 8 +0 + 62 + 0 + 10 +34453.124864 + 20 +12259.672044 + 30 +0.0 + 11 +34406.249864 + 21 +12340.861925 + 31 +0.0 + 0 +LINE + 5 +2D6C + 8 +0 + 62 + 0 + 10 +34312.499864 + 20 +12503.241689 + 30 +0.0 + 11 +34265.624864 + 21 +12584.43157 + 31 +0.0 + 0 +LINE + 5 +2D6D + 8 +0 + 62 + 0 + 10 +34593.749864 + 20 +12178.482162 + 30 +0.0 + 11 +34546.874864 + 21 +12259.672044 + 31 +0.0 + 0 +LINE + 5 +2D6E + 8 +0 + 62 + 0 + 10 +34453.124864 + 20 +12422.051807 + 30 +0.0 + 11 +34406.249864 + 21 +12503.241688 + 31 +0.0 + 0 +LINE + 5 +2D6F + 8 +0 + 62 + 0 + 10 +34312.499864 + 20 +12665.621452 + 30 +0.0 + 11 +34265.624864 + 21 +12746.811333 + 31 +0.0 + 0 +LINE + 5 +2D70 + 8 +0 + 62 + 0 + 10 +34593.749863 + 20 +12340.861925 + 30 +0.0 + 11 +34546.874863 + 21 +12422.051807 + 31 +0.0 + 0 +LINE + 5 +2D71 + 8 +0 + 62 + 0 + 10 +34453.124863 + 20 +12584.43157 + 30 +0.0 + 11 +34406.249863 + 21 +12665.621451 + 31 +0.0 + 0 +LINE + 5 +2D72 + 8 +0 + 62 + 0 + 10 +34312.499863 + 20 +12828.001215 + 30 +0.0 + 11 +34265.624863 + 21 +12909.191096 + 31 +0.0 + 0 +LINE + 5 +2D73 + 8 +0 + 62 + 0 + 10 +34593.749863 + 20 +12503.241688 + 30 +0.0 + 11 +34546.874863 + 21 +12584.43157 + 31 +0.0 + 0 +LINE + 5 +2D74 + 8 +0 + 62 + 0 + 10 +34453.124863 + 20 +12746.811333 + 30 +0.0 + 11 +34406.249863 + 21 +12828.001214 + 31 +0.0 + 0 +LINE + 5 +2D75 + 8 +0 + 62 + 0 + 10 +34312.499863 + 20 +12990.380978 + 30 +0.0 + 11 +34265.624863 + 21 +13071.570859 + 31 +0.0 + 0 +LINE + 5 +2D76 + 8 +0 + 62 + 0 + 10 +34593.749863 + 20 +12665.621451 + 30 +0.0 + 11 +34546.874863 + 21 +12746.811333 + 31 +0.0 + 0 +LINE + 5 +2D77 + 8 +0 + 62 + 0 + 10 +34453.124863 + 20 +12909.191096 + 30 +0.0 + 11 +34406.249863 + 21 +12990.380977 + 31 +0.0 + 0 +LINE + 5 +2D78 + 8 +0 + 62 + 0 + 10 +34312.499863 + 20 +13152.760741 + 30 +0.0 + 11 +34265.624863 + 21 +13233.950622 + 31 +0.0 + 0 +LINE + 5 +2D79 + 8 +0 + 62 + 0 + 10 +34593.749862 + 20 +12828.001214 + 30 +0.0 + 11 +34546.874862 + 21 +12909.191096 + 31 +0.0 + 0 +LINE + 5 +2D7A + 8 +0 + 62 + 0 + 10 +34453.124862 + 20 +13071.570859 + 30 +0.0 + 11 +34406.249862 + 21 +13152.760741 + 31 +0.0 + 0 +LINE + 5 +2D7B + 8 +0 + 62 + 0 + 10 +34593.749862 + 20 +12990.380977 + 30 +0.0 + 11 +34546.874862 + 21 +13071.570859 + 31 +0.0 + 0 +LINE + 5 +2D7C + 8 +0 + 62 + 0 + 10 +34453.124862 + 20 +13233.950622 + 30 +0.0 + 11 +34443.858749 + 21 +13250.0 + 31 +0.0 + 0 +LINE + 5 +2D7D + 8 +0 + 62 + 0 + 10 +34593.749862 + 20 +13152.76074 + 30 +0.0 + 11 +34546.874862 + 21 +13233.950622 + 31 +0.0 + 0 +LINE + 5 +2D7E + 8 +0 + 62 + 0 + 10 +34265.624906 + 20 +9823.975728 + 30 +0.0 + 11 +34312.499906 + 21 +9905.16561 + 31 +0.0 + 0 +LINE + 5 +2D7F + 8 +0 + 62 + 0 + 10 +34406.249906 + 20 +10067.545373 + 30 +0.0 + 11 +34453.124906 + 21 +10148.735255 + 31 +0.0 + 0 +LINE + 5 +2D80 + 8 +0 + 62 + 0 + 10 +34546.874906 + 20 +10311.115018 + 30 +0.0 + 11 +34593.749906 + 21 +10392.3049 + 31 +0.0 + 0 +LINE + 5 +2D81 + 8 +0 + 62 + 0 + 10 +34265.624907 + 20 +9986.355491 + 30 +0.0 + 11 +34312.499907 + 21 +10067.545373 + 31 +0.0 + 0 +LINE + 5 +2D82 + 8 +0 + 62 + 0 + 10 +34406.249907 + 20 +10229.925136 + 30 +0.0 + 11 +34453.124907 + 21 +10311.115018 + 31 +0.0 + 0 +LINE + 5 +2D83 + 8 +0 + 62 + 0 + 10 +34546.874907 + 20 +10473.494781 + 30 +0.0 + 11 +34593.749907 + 21 +10554.684663 + 31 +0.0 + 0 +LINE + 5 +2D84 + 8 +0 + 62 + 0 + 10 +34265.624907 + 20 +10148.735254 + 30 +0.0 + 11 +34312.499907 + 21 +10229.925136 + 31 +0.0 + 0 +LINE + 5 +2D85 + 8 +0 + 62 + 0 + 10 +34406.249907 + 20 +10392.304899 + 30 +0.0 + 11 +34453.124907 + 21 +10473.494781 + 31 +0.0 + 0 +LINE + 5 +2D86 + 8 +0 + 62 + 0 + 10 +34546.874907 + 20 +10635.874544 + 30 +0.0 + 11 +34593.749907 + 21 +10717.064426 + 31 +0.0 + 0 +LINE + 5 +2D87 + 8 +0 + 62 + 0 + 10 +34265.624907 + 20 +10311.115017 + 30 +0.0 + 11 +34312.499907 + 21 +10392.304899 + 31 +0.0 + 0 +LINE + 5 +2D88 + 8 +0 + 62 + 0 + 10 +34406.249907 + 20 +10554.684662 + 30 +0.0 + 11 +34453.124907 + 21 +10635.874544 + 31 +0.0 + 0 +LINE + 5 +2D89 + 8 +0 + 62 + 0 + 10 +34546.874907 + 20 +10798.254307 + 30 +0.0 + 11 +34593.749907 + 21 +10879.444189 + 31 +0.0 + 0 +LINE + 5 +2D8A + 8 +0 + 62 + 0 + 10 +34265.624908 + 20 +10473.49478 + 30 +0.0 + 11 +34312.499908 + 21 +10554.684662 + 31 +0.0 + 0 +LINE + 5 +2D8B + 8 +0 + 62 + 0 + 10 +34406.249908 + 20 +10717.064425 + 30 +0.0 + 11 +34453.124908 + 21 +10798.254307 + 31 +0.0 + 0 +LINE + 5 +2D8C + 8 +0 + 62 + 0 + 10 +34546.874908 + 20 +10960.63407 + 30 +0.0 + 11 +34593.749908 + 21 +11041.823952 + 31 +0.0 + 0 +LINE + 5 +2D8D + 8 +0 + 62 + 0 + 10 +34265.624908 + 20 +10635.874543 + 30 +0.0 + 11 +34312.499908 + 21 +10717.064425 + 31 +0.0 + 0 +LINE + 5 +2D8E + 8 +0 + 62 + 0 + 10 +34406.249908 + 20 +10879.444188 + 30 +0.0 + 11 +34453.124908 + 21 +10960.63407 + 31 +0.0 + 0 +LINE + 5 +2D8F + 8 +0 + 62 + 0 + 10 +34546.874908 + 20 +11123.013833 + 30 +0.0 + 11 +34593.749908 + 21 +11204.203715 + 31 +0.0 + 0 +LINE + 5 +2D90 + 8 +0 + 62 + 0 + 10 +34265.624908 + 20 +10798.254306 + 30 +0.0 + 11 +34312.499908 + 21 +10879.444188 + 31 +0.0 + 0 +LINE + 5 +2D91 + 8 +0 + 62 + 0 + 10 +34406.249908 + 20 +11041.823951 + 30 +0.0 + 11 +34453.124908 + 21 +11123.013833 + 31 +0.0 + 0 +LINE + 5 +2D92 + 8 +0 + 62 + 0 + 10 +34546.874908 + 20 +11285.393596 + 30 +0.0 + 11 +34593.749908 + 21 +11366.583478 + 31 +0.0 + 0 +LINE + 5 +2D93 + 8 +0 + 62 + 0 + 10 +34265.624908 + 20 +10960.63407 + 30 +0.0 + 11 +34312.499908 + 21 +11041.823951 + 31 +0.0 + 0 +LINE + 5 +2D94 + 8 +0 + 62 + 0 + 10 +34406.249908 + 20 +11204.203714 + 30 +0.0 + 11 +34453.124908 + 21 +11285.393596 + 31 +0.0 + 0 +LINE + 5 +2D95 + 8 +0 + 62 + 0 + 10 +34546.874908 + 20 +11447.773359 + 30 +0.0 + 11 +34593.749908 + 21 +11528.963241 + 31 +0.0 + 0 +LINE + 5 +2D96 + 8 +0 + 62 + 0 + 10 +34265.624909 + 20 +11123.013833 + 30 +0.0 + 11 +34312.499909 + 21 +11204.203714 + 31 +0.0 + 0 +LINE + 5 +2D97 + 8 +0 + 62 + 0 + 10 +34406.249909 + 20 +11366.583477 + 30 +0.0 + 11 +34453.124909 + 21 +11447.773359 + 31 +0.0 + 0 +LINE + 5 +2D98 + 8 +0 + 62 + 0 + 10 +34546.874909 + 20 +11610.153122 + 30 +0.0 + 11 +34593.749909 + 21 +11691.343004 + 31 +0.0 + 0 +LINE + 5 +2D99 + 8 +0 + 62 + 0 + 10 +34265.624909 + 20 +11285.393596 + 30 +0.0 + 11 +34312.499909 + 21 +11366.583477 + 31 +0.0 + 0 +LINE + 5 +2D9A + 8 +0 + 62 + 0 + 10 +34406.249909 + 20 +11528.96324 + 30 +0.0 + 11 +34453.124909 + 21 +11610.153122 + 31 +0.0 + 0 +LINE + 5 +2D9B + 8 +0 + 62 + 0 + 10 +34546.874909 + 20 +11772.532885 + 30 +0.0 + 11 +34593.749909 + 21 +11853.722767 + 31 +0.0 + 0 +LINE + 5 +2D9C + 8 +0 + 62 + 0 + 10 +34265.624909 + 20 +11447.773359 + 30 +0.0 + 11 +34312.499909 + 21 +11528.96324 + 31 +0.0 + 0 +LINE + 5 +2D9D + 8 +0 + 62 + 0 + 10 +34406.249909 + 20 +11691.343003 + 30 +0.0 + 11 +34453.124909 + 21 +11772.532885 + 31 +0.0 + 0 +LINE + 5 +2D9E + 8 +0 + 62 + 0 + 10 +34546.874909 + 20 +11934.912648 + 30 +0.0 + 11 +34593.749909 + 21 +12016.10253 + 31 +0.0 + 0 +LINE + 5 +2D9F + 8 +0 + 62 + 0 + 10 +34265.62491 + 20 +11610.153122 + 30 +0.0 + 11 +34312.49991 + 21 +11691.343003 + 31 +0.0 + 0 +LINE + 5 +2DA0 + 8 +0 + 62 + 0 + 10 +34406.24991 + 20 +11853.722766 + 30 +0.0 + 11 +34453.12491 + 21 +11934.912648 + 31 +0.0 + 0 +LINE + 5 +2DA1 + 8 +0 + 62 + 0 + 10 +34546.87491 + 20 +12097.292411 + 30 +0.0 + 11 +34593.74991 + 21 +12178.482293 + 31 +0.0 + 0 +LINE + 5 +2DA2 + 8 +0 + 62 + 0 + 10 +34265.62491 + 20 +11772.532885 + 30 +0.0 + 11 +34312.49991 + 21 +11853.722766 + 31 +0.0 + 0 +LINE + 5 +2DA3 + 8 +0 + 62 + 0 + 10 +34406.24991 + 20 +12016.102529 + 30 +0.0 + 11 +34453.12491 + 21 +12097.292411 + 31 +0.0 + 0 +LINE + 5 +2DA4 + 8 +0 + 62 + 0 + 10 +34546.87491 + 20 +12259.672174 + 30 +0.0 + 11 +34593.74991 + 21 +12340.862056 + 31 +0.0 + 0 +LINE + 5 +2DA5 + 8 +0 + 62 + 0 + 10 +34265.62491 + 20 +11934.912648 + 30 +0.0 + 11 +34312.49991 + 21 +12016.102529 + 31 +0.0 + 0 +LINE + 5 +2DA6 + 8 +0 + 62 + 0 + 10 +34406.24991 + 20 +12178.482293 + 30 +0.0 + 11 +34453.12491 + 21 +12259.672174 + 31 +0.0 + 0 +LINE + 5 +2DA7 + 8 +0 + 62 + 0 + 10 +34546.87491 + 20 +12422.051937 + 30 +0.0 + 11 +34593.74991 + 21 +12503.241819 + 31 +0.0 + 0 +LINE + 5 +2DA8 + 8 +0 + 62 + 0 + 10 +34265.624911 + 20 +12097.292411 + 30 +0.0 + 11 +34312.499911 + 21 +12178.482292 + 31 +0.0 + 0 +LINE + 5 +2DA9 + 8 +0 + 62 + 0 + 10 +34406.249911 + 20 +12340.862056 + 30 +0.0 + 11 +34453.124911 + 21 +12422.051937 + 31 +0.0 + 0 +LINE + 5 +2DAA + 8 +0 + 62 + 0 + 10 +34546.874911 + 20 +12584.4317 + 30 +0.0 + 11 +34593.749911 + 21 +12665.621582 + 31 +0.0 + 0 +LINE + 5 +2DAB + 8 +0 + 62 + 0 + 10 +34265.624911 + 20 +12259.672174 + 30 +0.0 + 11 +34312.499911 + 21 +12340.862055 + 31 +0.0 + 0 +LINE + 5 +2DAC + 8 +0 + 62 + 0 + 10 +34406.249911 + 20 +12503.241819 + 30 +0.0 + 11 +34453.124911 + 21 +12584.4317 + 31 +0.0 + 0 +LINE + 5 +2DAD + 8 +0 + 62 + 0 + 10 +34546.874911 + 20 +12746.811463 + 30 +0.0 + 11 +34593.749911 + 21 +12828.001345 + 31 +0.0 + 0 +LINE + 5 +2DAE + 8 +0 + 62 + 0 + 10 +34265.624911 + 20 +12422.051937 + 30 +0.0 + 11 +34312.499911 + 21 +12503.241818 + 31 +0.0 + 0 +LINE + 5 +2DAF + 8 +0 + 62 + 0 + 10 +34406.249911 + 20 +12665.621582 + 30 +0.0 + 11 +34453.124911 + 21 +12746.811463 + 31 +0.0 + 0 +LINE + 5 +2DB0 + 8 +0 + 62 + 0 + 10 +34546.874911 + 20 +12909.191226 + 30 +0.0 + 11 +34593.749911 + 21 +12990.381108 + 31 +0.0 + 0 +LINE + 5 +2DB1 + 8 +0 + 62 + 0 + 10 +34265.624912 + 20 +12584.4317 + 30 +0.0 + 11 +34312.499912 + 21 +12665.621581 + 31 +0.0 + 0 +LINE + 5 +2DB2 + 8 +0 + 62 + 0 + 10 +34406.249912 + 20 +12828.001345 + 30 +0.0 + 11 +34453.124912 + 21 +12909.191226 + 31 +0.0 + 0 +LINE + 5 +2DB3 + 8 +0 + 62 + 0 + 10 +34546.874912 + 20 +13071.570989 + 30 +0.0 + 11 +34593.749912 + 21 +13152.760871 + 31 +0.0 + 0 +LINE + 5 +2DB4 + 8 +0 + 62 + 0 + 10 +34265.624912 + 20 +12746.811463 + 30 +0.0 + 11 +34312.499912 + 21 +12828.001344 + 31 +0.0 + 0 +LINE + 5 +2DB5 + 8 +0 + 62 + 0 + 10 +34406.249912 + 20 +12990.381108 + 30 +0.0 + 11 +34453.124912 + 21 +13071.570989 + 31 +0.0 + 0 +LINE + 5 +2DB6 + 8 +0 + 62 + 0 + 10 +34546.874912 + 20 +13233.950752 + 30 +0.0 + 11 +34556.140949 + 21 +13250.0 + 31 +0.0 + 0 +LINE + 5 +2DB7 + 8 +0 + 62 + 0 + 10 +34265.624912 + 20 +12909.191226 + 30 +0.0 + 11 +34312.499912 + 21 +12990.381108 + 31 +0.0 + 0 +LINE + 5 +2DB8 + 8 +0 + 62 + 0 + 10 +34406.249912 + 20 +13152.760871 + 30 +0.0 + 11 +34453.124912 + 21 +13233.950752 + 31 +0.0 + 0 +LINE + 5 +2DB9 + 8 +0 + 62 + 0 + 10 +34265.624912 + 20 +13071.570989 + 30 +0.0 + 11 +34312.499912 + 21 +13152.760871 + 31 +0.0 + 0 +LINE + 5 +2DBA + 8 +0 + 62 + 0 + 10 +34265.624913 + 20 +13233.950752 + 30 +0.0 + 11 +34274.89095 + 21 +13250.0 + 31 +0.0 + 0 +LINE + 5 +2DBB + 8 +0 + 62 + 0 + 10 +34265.624906 + 20 +9661.595965 + 30 +0.0 + 11 +34312.499906 + 21 +9742.785847 + 31 +0.0 + 0 +LINE + 5 +2DBC + 8 +0 + 62 + 0 + 10 +34406.249906 + 20 +9905.16561 + 30 +0.0 + 11 +34453.124906 + 21 +9986.355492 + 31 +0.0 + 0 +LINE + 5 +2DBD + 8 +0 + 62 + 0 + 10 +34546.874906 + 20 +10148.735255 + 30 +0.0 + 11 +34593.749906 + 21 +10229.925136 + 31 +0.0 + 0 +LINE + 5 +2DBE + 8 +0 + 62 + 0 + 10 +34265.624906 + 20 +9499.216202 + 30 +0.0 + 11 +34312.499906 + 21 +9580.406084 + 31 +0.0 + 0 +LINE + 5 +2DBF + 8 +0 + 62 + 0 + 10 +34406.249906 + 20 +9742.785847 + 30 +0.0 + 11 +34453.124906 + 21 +9823.975729 + 31 +0.0 + 0 +LINE + 5 +2DC0 + 8 +0 + 62 + 0 + 10 +34546.874906 + 20 +9986.355492 + 30 +0.0 + 11 +34593.749906 + 21 +10067.545373 + 31 +0.0 + 0 +LINE + 5 +2DC1 + 8 +0 + 62 + 0 + 10 +34265.624905 + 20 +9336.836439 + 30 +0.0 + 11 +34312.499905 + 21 +9418.026321 + 31 +0.0 + 0 +LINE + 5 +2DC2 + 8 +0 + 62 + 0 + 10 +34406.249905 + 20 +9580.406084 + 30 +0.0 + 11 +34453.124905 + 21 +9661.595966 + 31 +0.0 + 0 +LINE + 5 +2DC3 + 8 +0 + 62 + 0 + 10 +34546.874905 + 20 +9823.975729 + 30 +0.0 + 11 +34593.749905 + 21 +9905.16561 + 31 +0.0 + 0 +LINE + 5 +2DC4 + 8 +0 + 62 + 0 + 10 +34265.624905 + 20 +9174.456676 + 30 +0.0 + 11 +34312.499905 + 21 +9255.646558 + 31 +0.0 + 0 +LINE + 5 +2DC5 + 8 +0 + 62 + 0 + 10 +34406.249905 + 20 +9418.026321 + 30 +0.0 + 11 +34453.124905 + 21 +9499.216203 + 31 +0.0 + 0 +LINE + 5 +2DC6 + 8 +0 + 62 + 0 + 10 +34546.874905 + 20 +9661.595966 + 30 +0.0 + 11 +34593.749905 + 21 +9742.785847 + 31 +0.0 + 0 +LINE + 5 +2DC7 + 8 +0 + 62 + 0 + 10 +34265.624905 + 20 +9012.076913 + 30 +0.0 + 11 +34312.499905 + 21 +9093.266795 + 31 +0.0 + 0 +LINE + 5 +2DC8 + 8 +0 + 62 + 0 + 10 +34406.249905 + 20 +9255.646558 + 30 +0.0 + 11 +34453.124905 + 21 +9336.83644 + 31 +0.0 + 0 +LINE + 5 +2DC9 + 8 +0 + 62 + 0 + 10 +34546.874905 + 20 +9499.216203 + 30 +0.0 + 11 +34593.749905 + 21 +9580.406084 + 31 +0.0 + 0 +LINE + 5 +2DCA + 8 +0 + 62 + 0 + 10 +34265.624904 + 20 +8849.69715 + 30 +0.0 + 11 +34312.499904 + 21 +8930.887032 + 31 +0.0 + 0 +LINE + 5 +2DCB + 8 +0 + 62 + 0 + 10 +34406.249904 + 20 +9093.266795 + 30 +0.0 + 11 +34453.124904 + 21 +9174.456677 + 31 +0.0 + 0 +LINE + 5 +2DCC + 8 +0 + 62 + 0 + 10 +34546.874904 + 20 +9336.83644 + 30 +0.0 + 11 +34593.749904 + 21 +9418.026321 + 31 +0.0 + 0 +LINE + 5 +2DCD + 8 +0 + 62 + 0 + 10 +34265.624904 + 20 +8687.317387 + 30 +0.0 + 11 +34312.499904 + 21 +8768.507269 + 31 +0.0 + 0 +LINE + 5 +2DCE + 8 +0 + 62 + 0 + 10 +34406.249904 + 20 +8930.887032 + 30 +0.0 + 11 +34453.124904 + 21 +9012.076913 + 31 +0.0 + 0 +LINE + 5 +2DCF + 8 +0 + 62 + 0 + 10 +34546.874904 + 20 +9174.456677 + 30 +0.0 + 11 +34593.749904 + 21 +9255.646558 + 31 +0.0 + 0 +LINE + 5 +2DD0 + 8 +0 + 62 + 0 + 10 +34265.624904 + 20 +8524.937624 + 30 +0.0 + 11 +34312.499904 + 21 +8606.127506 + 31 +0.0 + 0 +LINE + 5 +2DD1 + 8 +0 + 62 + 0 + 10 +34406.249904 + 20 +8768.507269 + 30 +0.0 + 11 +34453.124904 + 21 +8849.69715 + 31 +0.0 + 0 +LINE + 5 +2DD2 + 8 +0 + 62 + 0 + 10 +34546.874904 + 20 +9012.076914 + 30 +0.0 + 11 +34593.749904 + 21 +9093.266795 + 31 +0.0 + 0 +LINE + 5 +2DD3 + 8 +0 + 62 + 0 + 10 +34265.624904 + 20 +8362.557861 + 30 +0.0 + 11 +34312.499904 + 21 +8443.747743 + 31 +0.0 + 0 +LINE + 5 +2DD4 + 8 +0 + 62 + 0 + 10 +34406.249904 + 20 +8606.127506 + 30 +0.0 + 11 +34453.124904 + 21 +8687.317387 + 31 +0.0 + 0 +LINE + 5 +2DD5 + 8 +0 + 62 + 0 + 10 +34546.874904 + 20 +8849.697151 + 30 +0.0 + 11 +34593.749904 + 21 +8930.887032 + 31 +0.0 + 0 +LINE + 5 +2DD6 + 8 +0 + 62 + 0 + 10 +34265.624903 + 20 +8200.178098 + 30 +0.0 + 11 +34312.499903 + 21 +8281.36798 + 31 +0.0 + 0 +LINE + 5 +2DD7 + 8 +0 + 62 + 0 + 10 +34406.249903 + 20 +8443.747743 + 30 +0.0 + 11 +34453.124903 + 21 +8524.937624 + 31 +0.0 + 0 +LINE + 5 +2DD8 + 8 +0 + 62 + 0 + 10 +34546.874903 + 20 +8687.317388 + 30 +0.0 + 11 +34593.749903 + 21 +8768.507269 + 31 +0.0 + 0 +LINE + 5 +2DD9 + 8 +0 + 62 + 0 + 10 +34265.624903 + 20 +8037.798335 + 30 +0.0 + 11 +34312.499903 + 21 +8118.988217 + 31 +0.0 + 0 +LINE + 5 +2DDA + 8 +0 + 62 + 0 + 10 +34406.249903 + 20 +8281.36798 + 30 +0.0 + 11 +34453.124903 + 21 +8362.557861 + 31 +0.0 + 0 +LINE + 5 +2DDB + 8 +0 + 62 + 0 + 10 +34546.874903 + 20 +8524.937625 + 30 +0.0 + 11 +34593.749903 + 21 +8606.127506 + 31 +0.0 + 0 +LINE + 5 +2DDC + 8 +0 + 62 + 0 + 10 +34265.624903 + 20 +7875.418572 + 30 +0.0 + 11 +34312.499903 + 21 +7956.608454 + 31 +0.0 + 0 +LINE + 5 +2DDD + 8 +0 + 62 + 0 + 10 +34406.249903 + 20 +8118.988217 + 30 +0.0 + 11 +34453.124903 + 21 +8200.178098 + 31 +0.0 + 0 +LINE + 5 +2DDE + 8 +0 + 62 + 0 + 10 +34546.874903 + 20 +8362.557862 + 30 +0.0 + 11 +34593.749903 + 21 +8443.747743 + 31 +0.0 + 0 +LINE + 5 +2DDF + 8 +0 + 62 + 0 + 10 +34265.624902 + 20 +7713.038809 + 30 +0.0 + 11 +34312.499902 + 21 +7794.22869 + 31 +0.0 + 0 +LINE + 5 +2DE0 + 8 +0 + 62 + 0 + 10 +34406.249902 + 20 +7956.608454 + 30 +0.0 + 11 +34453.124902 + 21 +8037.798335 + 31 +0.0 + 0 +LINE + 5 +2DE1 + 8 +0 + 62 + 0 + 10 +34546.874902 + 20 +8200.178098 + 30 +0.0 + 11 +34593.749902 + 21 +8281.36798 + 31 +0.0 + 0 +LINE + 5 +2DE2 + 8 +0 + 62 + 0 + 10 +34265.624902 + 20 +7550.659046 + 30 +0.0 + 11 +34312.499902 + 21 +7631.848927 + 31 +0.0 + 0 +LINE + 5 +2DE3 + 8 +0 + 62 + 0 + 10 +34406.249902 + 20 +7794.228691 + 30 +0.0 + 11 +34453.124902 + 21 +7875.418572 + 31 +0.0 + 0 +LINE + 5 +2DE4 + 8 +0 + 62 + 0 + 10 +34546.874902 + 20 +8037.798335 + 30 +0.0 + 11 +34593.749902 + 21 +8118.988217 + 31 +0.0 + 0 +LINE + 5 +2DE5 + 8 +0 + 62 + 0 + 10 +34265.624902 + 20 +7388.279283 + 30 +0.0 + 11 +34312.499902 + 21 +7469.469164 + 31 +0.0 + 0 +LINE + 5 +2DE6 + 8 +0 + 62 + 0 + 10 +34406.249902 + 20 +7631.848928 + 30 +0.0 + 11 +34453.124902 + 21 +7713.038809 + 31 +0.0 + 0 +LINE + 5 +2DE7 + 8 +0 + 62 + 0 + 10 +34546.874902 + 20 +7875.418572 + 30 +0.0 + 11 +34593.749902 + 21 +7956.608454 + 31 +0.0 + 0 +LINE + 5 +2DE8 + 8 +0 + 62 + 0 + 10 +34265.624901 + 20 +7225.89952 + 30 +0.0 + 11 +34312.499901 + 21 +7307.089401 + 31 +0.0 + 0 +LINE + 5 +2DE9 + 8 +0 + 62 + 0 + 10 +34406.249901 + 20 +7469.469165 + 30 +0.0 + 11 +34453.124901 + 21 +7550.659046 + 31 +0.0 + 0 +LINE + 5 +2DEA + 8 +0 + 62 + 0 + 10 +34546.874901 + 20 +7713.038809 + 30 +0.0 + 11 +34593.749901 + 21 +7794.228691 + 31 +0.0 + 0 +LINE + 5 +2DEB + 8 +0 + 62 + 0 + 10 +34265.624901 + 20 +7063.519757 + 30 +0.0 + 11 +34312.499901 + 21 +7144.709638 + 31 +0.0 + 0 +LINE + 5 +2DEC + 8 +0 + 62 + 0 + 10 +34406.249901 + 20 +7307.089402 + 30 +0.0 + 11 +34453.124901 + 21 +7388.279283 + 31 +0.0 + 0 +LINE + 5 +2DED + 8 +0 + 62 + 0 + 10 +34546.874901 + 20 +7550.659046 + 30 +0.0 + 11 +34593.749901 + 21 +7631.848928 + 31 +0.0 + 0 +LINE + 5 +2DEE + 8 +0 + 62 + 0 + 10 +34265.624901 + 20 +6901.139994 + 30 +0.0 + 11 +34312.499901 + 21 +6982.329875 + 31 +0.0 + 0 +LINE + 5 +2DEF + 8 +0 + 62 + 0 + 10 +34406.249901 + 20 +7144.709639 + 30 +0.0 + 11 +34453.124901 + 21 +7225.89952 + 31 +0.0 + 0 +LINE + 5 +2DF0 + 8 +0 + 62 + 0 + 10 +34546.874901 + 20 +7388.279283 + 30 +0.0 + 11 +34593.749901 + 21 +7469.469165 + 31 +0.0 + 0 +LINE + 5 +2DF1 + 8 +0 + 62 + 0 + 10 +34272.114184 + 20 +6750.0 + 30 +0.0 + 11 +34312.4999 + 21 +6819.950112 + 31 +0.0 + 0 +LINE + 5 +2DF2 + 8 +0 + 62 + 0 + 10 +34406.2499 + 20 +6982.329875 + 30 +0.0 + 11 +34453.1249 + 21 +7063.519757 + 31 +0.0 + 0 +LINE + 5 +2DF3 + 8 +0 + 62 + 0 + 10 +34546.8749 + 20 +7225.89952 + 30 +0.0 + 11 +34593.7499 + 21 +7307.089402 + 31 +0.0 + 0 +LINE + 5 +2DF4 + 8 +0 + 62 + 0 + 10 +34406.2499 + 20 +6819.950112 + 30 +0.0 + 11 +34453.1249 + 21 +6901.139994 + 31 +0.0 + 0 +LINE + 5 +2DF5 + 8 +0 + 62 + 0 + 10 +34546.8749 + 20 +7063.519757 + 30 +0.0 + 11 +34593.7499 + 21 +7144.709639 + 31 +0.0 + 0 +LINE + 5 +2DF6 + 8 +0 + 62 + 0 + 10 +34546.8749 + 20 +6901.139994 + 30 +0.0 + 11 +34593.7499 + 21 +6982.329876 + 31 +0.0 + 0 +LINE + 5 +2DF7 + 8 +0 + 62 + 0 + 10 +34553.364183 + 20 +6750.0 + 30 +0.0 + 11 +34593.7499 + 21 +6819.950113 + 31 +0.0 + 0 +ENDBLK + 5 +2DF8 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X219 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X219 + 1 + + 0 +LINE + 5 +2DFA + 8 +0 + 62 + 0 + 10 +34600.0 + 20 +9320.932573 + 30 +0.0 + 11 +36425.0 + 21 +11145.932573 + 31 +0.0 + 0 +LINE + 5 +2DFB + 8 +0 + 62 + 0 + 10 +34600.0 + 20 +10469.981092 + 30 +0.0 + 11 +36425.0 + 21 +12294.981092 + 31 +0.0 + 0 +LINE + 5 +2DFC + 8 +0 + 62 + 0 + 10 +34600.0 + 20 +11619.029611 + 30 +0.0 + 11 +36230.970389 + 21 +13250.0 + 31 +0.0 + 0 +LINE + 5 +2DFD + 8 +0 + 62 + 0 + 10 +34600.0 + 20 +12768.078131 + 30 +0.0 + 11 +35081.921869 + 21 +13250.0 + 31 +0.0 + 0 +LINE + 5 +2DFE + 8 +0 + 62 + 0 + 10 +34600.0 + 20 +8171.884053 + 30 +0.0 + 11 +36425.0 + 21 +9996.884053 + 31 +0.0 + 0 +LINE + 5 +2DFF + 8 +0 + 62 + 0 + 10 +34600.0 + 20 +7022.835534 + 30 +0.0 + 11 +36425.0 + 21 +8847.835534 + 31 +0.0 + 0 +LINE + 5 +2E00 + 8 +0 + 62 + 0 + 10 +35476.212986 + 20 +6750.0 + 30 +0.0 + 11 +36425.0 + 21 +7698.787014 + 31 +0.0 + 0 +ENDBLK + 5 +2E01 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X220 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X220 + 1 + + 0 +LINE + 5 +2E03 + 8 +0 + 62 + 0 + 10 +33325.0 + 20 +9990.476221 + 30 +0.0 + 11 +33900.0 + 21 +10565.476221 + 31 +0.0 + 0 +LINE + 5 +2E04 + 8 +0 + 62 + 0 + 10 +33325.0 + 20 +10344.029611 + 30 +0.0 + 11 +33900.0 + 21 +10919.029611 + 31 +0.0 + 0 +LINE + 5 +2E05 + 8 +0 + 62 + 0 + 10 +33325.0 + 20 +10697.583002 + 30 +0.0 + 11 +33900.0 + 21 +11272.583002 + 31 +0.0 + 0 +LINE + 5 +2E06 + 8 +0 + 62 + 0 + 10 +33325.0 + 20 +11051.136393 + 30 +0.0 + 11 +33900.0 + 21 +11626.136393 + 31 +0.0 + 0 +LINE + 5 +2E07 + 8 +0 + 62 + 0 + 10 +33325.0 + 20 +11404.689783 + 30 +0.0 + 11 +33900.0 + 21 +11979.689783 + 31 +0.0 + 0 +LINE + 5 +2E08 + 8 +0 + 62 + 0 + 10 +33325.0 + 20 +11758.243174 + 30 +0.0 + 11 +33900.0 + 21 +12333.243174 + 31 +0.0 + 0 +LINE + 5 +2E09 + 8 +0 + 62 + 0 + 10 +33325.0 + 20 +12111.796564 + 30 +0.0 + 11 +33900.0 + 21 +12686.796564 + 31 +0.0 + 0 +LINE + 5 +2E0A + 8 +0 + 62 + 0 + 10 +33325.0 + 20 +12465.349955 + 30 +0.0 + 11 +33900.0 + 21 +13040.349955 + 31 +0.0 + 0 +LINE + 5 +2E0B + 8 +0 + 62 + 0 + 10 +33325.0 + 20 +12818.903346 + 30 +0.0 + 11 +33756.096654 + 21 +13250.0 + 31 +0.0 + 0 +LINE + 5 +2E0C + 8 +0 + 62 + 0 + 10 +33325.0 + 20 +13172.456736 + 30 +0.0 + 11 +33402.543264 + 21 +13250.0 + 31 +0.0 + 0 +LINE + 5 +2E0D + 8 +0 + 62 + 0 + 10 +33325.0 + 20 +9636.92283 + 30 +0.0 + 11 +33900.0 + 21 +10211.92283 + 31 +0.0 + 0 +LINE + 5 +2E0E + 8 +0 + 62 + 0 + 10 +33325.0 + 20 +9283.36944 + 30 +0.0 + 11 +33900.0 + 21 +9858.36944 + 31 +0.0 + 0 +LINE + 5 +2E0F + 8 +0 + 62 + 0 + 10 +33325.0 + 20 +8929.816049 + 30 +0.0 + 11 +33900.0 + 21 +9504.816049 + 31 +0.0 + 0 +LINE + 5 +2E10 + 8 +0 + 62 + 0 + 10 +33325.0 + 20 +8576.262658 + 30 +0.0 + 11 +33900.0 + 21 +9151.262658 + 31 +0.0 + 0 +LINE + 5 +2E11 + 8 +0 + 62 + 0 + 10 +33325.0 + 20 +8222.709268 + 30 +0.0 + 11 +33900.0 + 21 +8797.709268 + 31 +0.0 + 0 +LINE + 5 +2E12 + 8 +0 + 62 + 0 + 10 +33325.0 + 20 +7869.155877 + 30 +0.0 + 11 +33900.0 + 21 +8444.155877 + 31 +0.0 + 0 +LINE + 5 +2E13 + 8 +0 + 62 + 0 + 10 +33325.0 + 20 +7515.602487 + 30 +0.0 + 11 +33900.0 + 21 +8090.602487 + 31 +0.0 + 0 +LINE + 5 +2E14 + 8 +0 + 62 + 0 + 10 +33325.0 + 20 +7162.049096 + 30 +0.0 + 11 +33900.0 + 21 +7737.049096 + 31 +0.0 + 0 +LINE + 5 +2E15 + 8 +0 + 62 + 0 + 10 +33325.0 + 20 +6808.495706 + 30 +0.0 + 11 +33900.0 + 21 +7383.495706 + 31 +0.0 + 0 +LINE + 5 +2E16 + 8 +0 + 62 + 0 + 10 +33620.057685 + 20 +6750.0 + 30 +0.0 + 11 +33900.0 + 21 +7029.942315 + 31 +0.0 + 0 +ENDBLK + 5 +2E17 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D221 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D221 + 1 + + 0 +LINE + 5 +2E19 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +18355.0 + 20 +9656.0 + 30 +0.0 + 11 +18355.0 + 21 +10854.0 + 31 +0.0 + 0 +INSERT + 5 +2E1A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18355.0 + 20 +9655.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +2E1B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18355.0 + 20 +10855.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +2E1C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +18267.5 + 20 +10101.875 + 30 +0.0 + 40 +175.0 + 1 +1.21 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +18180.0 + 21 +10255.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2E1D + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +18365.0 + 20 +9655.0 + 30 +0.0 + 0 +POINT + 5 +2E1E + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +18355.0 + 20 +10855.0 + 30 +0.0 + 0 +POINT + 5 +2E1F + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +18355.0 + 20 +10855.0 + 30 +0.0 + 0 +ENDBLK + 5 +2E20 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D222 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D222 + 1 + + 0 +LINE + 5 +2E22 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +18455.0 + 20 +9626.0 + 30 +0.0 + 11 +18455.0 + 21 +9654.0 + 31 +0.0 + 0 +INSERT + 5 +2E23 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18455.0 + 20 +9625.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +2E24 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18455.0 + 20 +9655.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +2E25 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +18367.5 + 20 +9696.25 + 30 +0.0 + 40 +175.0 + 1 +3 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +18280.0 + 21 +9740.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2E26 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +18465.0 + 20 +9625.0 + 30 +0.0 + 0 +POINT + 5 +2E27 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +18465.0 + 20 +9655.0 + 30 +0.0 + 0 +POINT + 5 +2E28 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +18455.0 + 20 +9655.0 + 30 +0.0 + 0 +ENDBLK + 5 +2E29 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D223 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D223 + 1 + + 0 +LINE + 5 +2E2B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +18445.0 + 20 +13866.0 + 30 +0.0 + 11 +18445.0 + 21 +15624.0 + 31 +0.0 + 0 +INSERT + 5 +2E2C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18445.0 + 20 +13865.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +2E2D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18445.0 + 20 +15625.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +2E2E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +18357.5 + 20 +14570.0 + 30 +0.0 + 40 +175.0 + 1 +1.76 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +18270.0 + 21 +14745.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2E2F + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +18490.0 + 20 +13865.0 + 30 +0.0 + 0 +POINT + 5 +2E30 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +18490.0 + 20 +15625.0 + 30 +0.0 + 0 +POINT + 5 +2E31 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +18445.0 + 20 +15625.0 + 30 +0.0 + 0 +ENDBLK + 5 +2E32 + 8 +0 + 0 +ENDSEC + 0 +SECTION + 2 +ENTITIES + 0 +POLYLINE + 5 +2E33 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +34B5 + 8 +0 + 10 +1000.0 + 20 +250.0 + 30 +0.0 + 0 +VERTEX + 5 +34B6 + 8 +0 + 10 +41800.0 + 20 +250.0 + 30 +0.0 + 0 +VERTEX + 5 +34B7 + 8 +0 + 10 +41800.0 + 20 +29450.0 + 30 +0.0 + 0 +VERTEX + 5 +34B8 + 8 +0 + 10 +1000.0 + 20 +29450.0 + 30 +0.0 + 0 +SEQEND + 5 +34B9 + 8 +0 + 0 +POLYLINE + 5 +2E39 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +34BA + 8 +MAUERWERK + 10 +8750.0 + 20 +9250.0 + 30 +0.0 + 0 +VERTEX + 5 +34BB + 8 +MAUERWERK + 10 +9865.0 + 20 +9250.0 + 30 +0.0 + 0 +VERTEX + 5 +34BC + 8 +MAUERWERK + 10 +9865.0 + 20 +9615.0 + 30 +0.0 + 0 +VERTEX + 5 +34BD + 8 +MAUERWERK + 10 +9740.0 + 20 +9615.0 + 30 +0.0 + 0 +VERTEX + 5 +34BE + 8 +MAUERWERK + 10 +9740.0 + 20 +12375.0 + 30 +0.0 + 0 +VERTEX + 5 +34BF + 8 +MAUERWERK + 10 +12615.0 + 20 +12375.0 + 30 +0.0 + 0 +VERTEX + 5 +34C0 + 8 +MAUERWERK + 10 +12615.0 + 20 +12740.0 + 30 +0.0 + 0 +VERTEX + 5 +34C1 + 8 +MAUERWERK + 10 +10115.0 + 20 +12740.0 + 30 +0.0 + 0 +VERTEX + 5 +34C2 + 8 +MAUERWERK + 10 +10115.0 + 20 +12990.0 + 30 +0.0 + 0 +VERTEX + 5 +34C3 + 8 +MAUERWERK + 10 +9750.0 + 20 +12990.0 + 30 +0.0 + 0 +VERTEX + 5 +34C4 + 8 +MAUERWERK + 10 +9750.0 + 20 +12740.0 + 30 +0.0 + 0 +VERTEX + 5 +34C5 + 8 +MAUERWERK + 10 +9375.0 + 20 +12740.0 + 30 +0.0 + 0 +VERTEX + 5 +34C6 + 8 +MAUERWERK + 10 +9375.0 + 20 +9615.0 + 30 +0.0 + 0 +VERTEX + 5 +34C7 + 8 +MAUERWERK + 10 +8750.0 + 20 +9615.0 + 30 +0.0 + 0 +SEQEND + 5 +34C8 + 8 +MAUERWERK + 0 +POLYLINE + 5 +2E49 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +34C9 + 8 +MAUERWERK + 10 +5000.0 + 20 +16125.0 + 30 +0.0 + 0 +VERTEX + 5 +34CA + 8 +MAUERWERK + 10 +5365.0 + 20 +16125.0 + 30 +0.0 + 0 +VERTEX + 5 +34CB + 8 +MAUERWERK + 10 +5365.0 + 20 +16875.0 + 30 +0.0 + 0 +VERTEX + 5 +34CC + 8 +MAUERWERK + 10 +8115.0 + 20 +16875.0 + 30 +0.0 + 0 +VERTEX + 5 +34CD + 8 +MAUERWERK + 10 +8115.0 + 20 +17240.0 + 30 +0.0 + 0 +VERTEX + 5 +34CE + 8 +MAUERWERK + 10 +5365.0 + 20 +17240.0 + 30 +0.0 + 0 +VERTEX + 5 +34CF + 8 +MAUERWERK + 10 +5365.0 + 20 +18240.0 + 30 +0.0 + 0 +VERTEX + 5 +34D0 + 8 +MAUERWERK + 10 +5000.0 + 20 +18240.0 + 30 +0.0 + 0 +SEQEND + 5 +34D1 + 8 +MAUERWERK + 0 +POLYLINE + 5 +2E53 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +34D2 + 8 +MAUERWERK + 10 +5000.0 + 20 +19375.0 + 30 +0.0 + 0 +VERTEX + 5 +34D3 + 8 +MAUERWERK + 10 +5365.0 + 20 +19375.0 + 30 +0.0 + 0 +VERTEX + 5 +34D4 + 8 +MAUERWERK + 10 +5365.0 + 20 +21750.0 + 30 +0.0 + 0 +VERTEX + 5 +34D5 + 8 +MAUERWERK + 10 +6740.0 + 20 +21750.0 + 30 +0.0 + 0 +VERTEX + 5 +34D6 + 8 +MAUERWERK + 10 +6740.0 + 20 +22115.0 + 30 +0.0 + 0 +VERTEX + 5 +34D7 + 8 +MAUERWERK + 10 +5000.0 + 20 +22115.0 + 30 +0.0 + 0 +SEQEND + 5 +34D8 + 8 +MAUERWERK + 0 +POLYLINE + 5 +2E5B + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +34D9 + 8 +MAUERWERK + 10 +8500.0 + 20 +22115.0 + 30 +0.0 + 0 +VERTEX + 5 +34DA + 8 +MAUERWERK + 10 +8500.0 + 20 +21750.0 + 30 +0.0 + 0 +VERTEX + 5 +34DB + 8 +MAUERWERK + 10 +9750.0 + 20 +21750.0 + 30 +0.0 + 0 +VERTEX + 5 +34DC + 8 +MAUERWERK + 10 +9750.0 + 20 +20875.0 + 30 +0.0 + 0 +VERTEX + 5 +34DD + 8 +MAUERWERK + 10 +10115.0 + 20 +20875.0 + 30 +0.0 + 0 +VERTEX + 5 +34DE + 8 +MAUERWERK + 10 +10115.0 + 20 +21750.0 + 30 +0.0 + 0 +VERTEX + 5 +34DF + 8 +MAUERWERK + 10 +10240.0 + 20 +21750.0 + 30 +0.0 + 0 +VERTEX + 5 +34E0 + 8 +MAUERWERK + 10 +10240.0 + 20 +22115.0 + 30 +0.0 + 0 +SEQEND + 5 +34E1 + 8 +MAUERWERK + 0 +POLYLINE + 5 +2E65 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +34E2 + 8 +MAUERWERK + 10 +9750.0 + 20 +19990.0 + 30 +0.0 + 0 +VERTEX + 5 +34E3 + 8 +MAUERWERK + 10 +9750.0 + 20 +17240.0 + 30 +0.0 + 0 +VERTEX + 5 +34E4 + 8 +MAUERWERK + 10 +9000.0 + 20 +17240.0 + 30 +0.0 + 0 +VERTEX + 5 +34E5 + 8 +MAUERWERK + 10 +9000.0 + 20 +16875.0 + 30 +0.0 + 0 +VERTEX + 5 +34E6 + 8 +MAUERWERK + 10 +9750.0 + 20 +16875.0 + 30 +0.0 + 0 +VERTEX + 5 +34E7 + 8 +MAUERWERK + 10 +9750.0 + 20 +16625.0 + 30 +0.0 + 0 +VERTEX + 5 +34E8 + 8 +MAUERWERK + 10 +10115.0 + 20 +16625.0 + 30 +0.0 + 0 +VERTEX + 5 +34E9 + 8 +MAUERWERK + 10 +10115.0 + 20 +19990.0 + 30 +0.0 + 0 +SEQEND + 5 +34EA + 8 +MAUERWERK + 0 +POLYLINE + 5 +2E6F + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +34EB + 8 +MAUERWERK + 10 +11250.0 + 20 +22115.0 + 30 +0.0 + 0 +VERTEX + 5 +34EC + 8 +MAUERWERK + 10 +11250.0 + 20 +21750.0 + 30 +0.0 + 0 +VERTEX + 5 +34ED + 8 +MAUERWERK + 10 +14875.0 + 20 +21750.0 + 30 +0.0 + 0 +VERTEX + 5 +34EE + 8 +MAUERWERK + 10 +14875.0 + 20 +17250.0 + 30 +0.0 + 0 +VERTEX + 5 +34EF + 8 +MAUERWERK + 10 +15240.0 + 20 +17250.0 + 30 +0.0 + 0 +VERTEX + 5 +34F0 + 8 +MAUERWERK + 10 +15240.0 + 20 +21750.0 + 30 +0.0 + 0 +VERTEX + 5 +34F1 + 8 +MAUERWERK + 10 +15865.0 + 20 +21750.0 + 30 +0.0 + 0 +VERTEX + 5 +34F2 + 8 +MAUERWERK + 10 +15865.0 + 20 +22115.0 + 30 +0.0 + 0 +SEQEND + 5 +34F3 + 8 +MAUERWERK + 0 +POINT + 5 +2E79 + 8 +MAUERWERK + 10 +14875.0 + 20 +21125.0 + 30 +0.0 + 0 +POINT + 5 +2E7A + 8 +MAUERWERK + 10 +15240.0 + 20 +17625.0 + 30 +0.0 + 0 +POINT + 5 +2E7B + 8 +MAUERWERK + 10 +15730.0 + 20 +21750.0 + 30 +0.0 + 0 +POINT + 5 +2E7C + 8 +MAUERWERK + 10 +11750.0 + 20 +22115.0 + 30 +0.0 + 0 +POLYLINE + 5 +2E7D + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +34F4 + 8 +MAUERWERK + 10 +25250.0 + 20 +22115.0 + 30 +0.0 + 0 +VERTEX + 5 +34F5 + 8 +MAUERWERK + 10 +25250.0 + 20 +21750.0 + 30 +0.0 + 0 +VERTEX + 5 +34F6 + 8 +MAUERWERK + 10 +26375.0 + 20 +21750.0 + 30 +0.0 + 0 +VERTEX + 5 +34F7 + 8 +MAUERWERK + 10 +26375.0 + 20 +18375.0 + 30 +0.0 + 0 +VERTEX + 5 +34F8 + 8 +MAUERWERK + 10 +26740.0 + 20 +18375.0 + 30 +0.0 + 0 +VERTEX + 5 +34F9 + 8 +MAUERWERK + 10 +26740.0 + 20 +22115.0 + 30 +0.0 + 0 +SEQEND + 5 +34FA + 8 +MAUERWERK + 0 +POLYLINE + 5 +2E85 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +34FB + 8 +MAUERWERK + 10 +23365.0 + 20 +22115.0 + 30 +0.0 + 0 +VERTEX + 5 +34FC + 8 +MAUERWERK + 10 +19750.0 + 20 +22115.0 + 30 +0.0 + 0 +VERTEX + 5 +34FD + 8 +MAUERWERK + 10 +19750.0 + 20 +21750.0 + 30 +0.0 + 0 +VERTEX + 5 +34FE + 8 +MAUERWERK + 10 +22500.0 + 20 +21750.0 + 30 +0.0 + 0 +VERTEX + 5 +34FF + 8 +MAUERWERK + 10 +22500.0 + 20 +17125.0 + 30 +0.0 + 0 +VERTEX + 5 +3500 + 8 +MAUERWERK + 10 +22865.0 + 20 +17125.0 + 30 +0.0 + 0 +VERTEX + 5 +3501 + 8 +MAUERWERK + 10 +22865.0 + 20 +21750.0 + 30 +0.0 + 0 +VERTEX + 5 +3502 + 8 +MAUERWERK + 10 +23365.0 + 20 +21750.0 + 30 +0.0 + 0 +SEQEND + 5 +3503 + 8 +MAUERWERK + 0 +POLYLINE + 5 +2E8F + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +3504 + 8 +MAUERWERK + 10 +26375.0 + 20 +10365.0 + 30 +0.0 + 0 +VERTEX + 5 +3505 + 8 +MAUERWERK + 10 +26740.0 + 20 +10365.0 + 30 +0.0 + 0 +VERTEX + 5 +3506 + 8 +MAUERWERK + 10 +26740.0 + 20 +9250.0 + 30 +0.0 + 0 +VERTEX + 5 +3507 + 8 +MAUERWERK + 10 +25375.0 + 20 +9250.0 + 30 +0.0 + 0 +VERTEX + 5 +3508 + 8 +MAUERWERK + 10 +25375.0 + 20 +9615.0 + 30 +0.0 + 0 +VERTEX + 5 +3509 + 8 +MAUERWERK + 10 +26375.0 + 20 +9615.0 + 30 +0.0 + 0 +SEQEND + 5 +350A + 8 +MAUERWERK + 0 +POLYLINE + 5 +2E97 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +350B + 8 +MAUERWERK + 10 +23240.0 + 20 +9615.0 + 30 +0.0 + 0 +VERTEX + 5 +350C + 8 +MAUERWERK + 10 +21875.0 + 20 +9615.0 + 30 +0.0 + 0 +VERTEX + 5 +350D + 8 +MAUERWERK + 10 +21875.0 + 20 +9250.0 + 30 +0.0 + 0 +VERTEX + 5 +350E + 8 +MAUERWERK + 10 +23240.0 + 20 +9250.0 + 30 +0.0 + 0 +SEQEND + 5 +350F + 8 +MAUERWERK + 0 +POLYLINE + 5 +2E9D + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +3510 + 8 +MAUERWERK + 10 +21365.0 + 20 +9250.0 + 30 +0.0 + 0 +VERTEX + 5 +3511 + 8 +MAUERWERK + 10 +21365.0 + 20 +9615.0 + 30 +0.0 + 0 +VERTEX + 5 +3512 + 8 +MAUERWERK + 10 +21240.0 + 20 +9615.0 + 30 +0.0 + 0 +VERTEX + 5 +3513 + 8 +MAUERWERK + 10 +21240.0 + 20 +14240.0 + 30 +0.0 + 0 +VERTEX + 5 +3514 + 8 +MAUERWERK + 10 +20875.0 + 20 +14240.0 + 30 +0.0 + 0 +VERTEX + 5 +3515 + 8 +MAUERWERK + 10 +20875.0 + 20 +9615.0 + 30 +0.0 + 0 +VERTEX + 5 +3516 + 8 +MAUERWERK + 10 +20375.0 + 20 +9615.0 + 30 +0.0 + 0 +VERTEX + 5 +3517 + 8 +MAUERWERK + 10 +20375.0 + 20 +9250.0 + 30 +0.0 + 0 +SEQEND + 5 +3518 + 8 +MAUERWERK + 0 +POLYLINE + 5 +2EA7 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +3519 + 8 +MAUERWERK + 10 +11250.0 + 20 +9615.0 + 30 +0.0 + 0 +VERTEX + 5 +351A + 8 +MAUERWERK + 10 +11250.0 + 20 +9250.0 + 30 +0.0 + 0 +VERTEX + 5 +351B + 8 +MAUERWERK + 10 +16115.0 + 20 +9250.0 + 30 +0.0 + 0 +VERTEX + 5 +351C + 8 +MAUERWERK + 10 +16115.0 + 20 +9615.0 + 30 +0.0 + 0 +VERTEX + 5 +351D + 8 +MAUERWERK + 10 +14490.0 + 20 +9615.0 + 30 +0.0 + 0 +VERTEX + 5 +351E + 8 +MAUERWERK + 10 +14490.0 + 20 +13500.0 + 30 +0.0 + 0 +VERTEX + 5 +351F + 8 +MAUERWERK + 10 +14615.0 + 20 +13500.0 + 30 +0.0 + 0 +VERTEX + 5 +3520 + 8 +MAUERWERK + 10 +14615.0 + 20 +13865.0 + 30 +0.0 + 0 +VERTEX + 5 +3521 + 8 +MAUERWERK + 10 +14125.0 + 20 +13865.0 + 30 +0.0 + 0 +VERTEX + 5 +3522 + 8 +MAUERWERK + 10 +14125.0 + 20 +12740.0 + 30 +0.0 + 0 +VERTEX + 5 +3523 + 8 +MAUERWERK + 10 +13875.0 + 20 +12740.0 + 30 +0.0 + 0 +VERTEX + 5 +3524 + 8 +MAUERWERK + 10 +13875.0 + 20 +12375.0 + 30 +0.0 + 0 +VERTEX + 5 +3525 + 8 +MAUERWERK + 10 +14125.0 + 20 +12375.0 + 30 +0.0 + 0 +VERTEX + 5 +3526 + 8 +MAUERWERK + 10 +14125.0 + 20 +9615.0 + 30 +0.0 + 0 +SEQEND + 5 +3527 + 8 +MAUERWERK + 0 +POLYLINE + 5 +2EB7 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +3528 + 8 +MAUERWERK + 10 +18490.0 + 20 +9615.0 + 30 +0.0 + 0 +VERTEX + 5 +3529 + 8 +MAUERWERK + 10 +18490.0 + 20 +9250.0 + 30 +0.0 + 0 +VERTEX + 5 +352A + 8 +MAUERWERK + 10 +17375.0 + 20 +9250.0 + 30 +0.0 + 0 +VERTEX + 5 +352B + 8 +MAUERWERK + 10 +17375.0 + 20 +9615.0 + 30 +0.0 + 0 +VERTEX + 5 +352C + 8 +MAUERWERK + 10 +17625.0 + 20 +9615.0 + 30 +0.0 + 0 +VERTEX + 5 +352D + 8 +MAUERWERK + 10 +17625.0 + 20 +13500.0 + 30 +0.0 + 0 +VERTEX + 5 +352E + 8 +MAUERWERK + 10 +15500.0 + 20 +13500.0 + 30 +0.0 + 0 +VERTEX + 5 +352F + 8 +MAUERWERK + 10 +15500.0 + 20 +13865.0 + 30 +0.0 + 0 +VERTEX + 5 +3530 + 8 +MAUERWERK + 10 +15750.0 + 20 +13865.0 + 30 +0.0 + 0 +VERTEX + 5 +3531 + 8 +MAUERWERK + 10 +15750.0 + 20 +13990.0 + 30 +0.0 + 0 +VERTEX + 5 +3532 + 8 +MAUERWERK + 10 +16115.0 + 20 +13990.0 + 30 +0.0 + 0 +VERTEX + 5 +3533 + 8 +MAUERWERK + 10 +16115.0 + 20 +13865.0 + 30 +0.0 + 0 +VERTEX + 5 +3534 + 8 +MAUERWERK + 10 +17990.0 + 20 +13865.0 + 30 +0.0 + 0 +VERTEX + 5 +3535 + 8 +MAUERWERK + 10 +17990.0 + 20 +9615.0 + 30 +0.0 + 0 +SEQEND + 5 +3536 + 8 +MAUERWERK + 0 +POINT + 5 +2EC7 + 8 +MAUERWERK + 10 +5040.0 + 20 +9250.0 + 30 +0.0 + 0 +POINT + 5 +2EC8 + 8 +MAUERWERK + 10 +6050.0 + 20 +9250.0 + 30 +0.0 + 0 +POINT + 5 +2EC9 + 8 +MAUERWERK + 10 +7060.0 + 20 +9250.0 + 30 +0.0 + 0 +POINT + 5 +2ECA + 8 +MAUERWERK + 10 +7740.0 + 20 +9580.0 + 30 +0.0 + 0 +POINT + 5 +2ECB + 8 +MAUERWERK + 10 +6765.0 + 20 +9615.0 + 30 +0.0 + 0 +POINT + 5 +2ECC + 8 +MAUERWERK + 10 +5755.0 + 20 +9615.0 + 30 +0.0 + 0 +POINT + 5 +2ECD + 8 +MAUERWERK + 10 +5365.0 + 20 +10235.0 + 30 +0.0 + 0 +POINT + 5 +2ECE + 8 +MAUERWERK + 10 +5365.0 + 20 +11245.0 + 30 +0.0 + 0 +POINT + 5 +2ECF + 8 +MAUERWERK + 10 +5365.0 + 20 +12255.0 + 30 +0.0 + 0 +POINT + 5 +2ED0 + 8 +MAUERWERK + 10 +5365.0 + 20 +13265.0 + 30 +0.0 + 0 +POINT + 5 +2ED1 + 8 +MAUERWERK + 10 +5515.0 + 20 +14125.0 + 30 +0.0 + 0 +POINT + 5 +2ED2 + 8 +MAUERWERK + 10 +6525.0 + 20 +14125.0 + 30 +0.0 + 0 +POINT + 5 +2ED3 + 8 +MAUERWERK + 10 +7535.0 + 20 +14125.0 + 30 +0.0 + 0 +POINT + 5 +2ED4 + 8 +MAUERWERK + 10 +8545.0 + 20 +14125.0 + 30 +0.0 + 0 +POINT + 5 +2ED5 + 8 +MAUERWERK + 10 +9555.0 + 20 +14125.0 + 30 +0.0 + 0 +POINT + 5 +2ED6 + 8 +MAUERWERK + 10 +10115.0 + 20 +14075.0 + 30 +0.0 + 0 +POINT + 5 +2ED7 + 8 +MAUERWERK + 10 +10115.0 + 20 +15085.0 + 30 +0.0 + 0 +POINT + 5 +2ED8 + 8 +MAUERWERK + 10 +11085.0 + 20 +15125.0 + 30 +0.0 + 0 +POINT + 5 +2ED9 + 8 +MAUERWERK + 10 +12095.0 + 20 +15125.0 + 30 +0.0 + 0 +POINT + 5 +2EDA + 8 +MAUERWERK + 10 +13105.0 + 20 +15125.0 + 30 +0.0 + 0 +POINT + 5 +2EDB + 8 +MAUERWERK + 10 +14115.0 + 20 +15125.0 + 30 +0.0 + 0 +POINT + 5 +2EDC + 8 +MAUERWERK + 10 +15125.0 + 20 +15125.0 + 30 +0.0 + 0 +POINT + 5 +2EDD + 8 +MAUERWERK + 10 +16010.0 + 20 +15000.0 + 30 +0.0 + 0 +POINT + 5 +2EDE + 8 +MAUERWERK + 10 +16365.0 + 20 +15655.0 + 30 +0.0 + 0 +POINT + 5 +2EDF + 8 +MAUERWERK + 10 +15750.0 + 20 +15930.0 + 30 +0.0 + 0 +POINT + 5 +2EE0 + 8 +MAUERWERK + 10 +15180.0 + 20 +15490.0 + 30 +0.0 + 0 +POINT + 5 +2EE1 + 8 +MAUERWERK + 10 +14170.0 + 20 +15490.0 + 30 +0.0 + 0 +POINT + 5 +2EE2 + 8 +MAUERWERK + 10 +13160.0 + 20 +15490.0 + 30 +0.0 + 0 +POINT + 5 +2EE3 + 8 +MAUERWERK + 10 +12150.0 + 20 +15490.0 + 30 +0.0 + 0 +POINT + 5 +2EE4 + 8 +MAUERWERK + 10 +11140.0 + 20 +15490.0 + 30 +0.0 + 0 +POINT + 5 +2EE5 + 8 +MAUERWERK + 10 +10130.0 + 20 +15490.0 + 30 +0.0 + 0 +POINT + 5 +2EE6 + 8 +MAUERWERK + 10 +9750.0 + 20 +15360.0 + 30 +0.0 + 0 +POINT + 5 +2EE7 + 8 +MAUERWERK + 10 +9610.0 + 20 +14490.0 + 30 +0.0 + 0 +POINT + 5 +2EE8 + 8 +MAUERWERK + 10 +8600.0 + 20 +14490.0 + 30 +0.0 + 0 +POINT + 5 +2EE9 + 8 +MAUERWERK + 10 +7590.0 + 20 +14490.0 + 30 +0.0 + 0 +POINT + 5 +2EEA + 8 +MAUERWERK + 10 +6580.0 + 20 +14490.0 + 30 +0.0 + 0 +POINT + 5 +2EEB + 8 +MAUERWERK + 10 +5570.0 + 20 +14490.0 + 30 +0.0 + 0 +POINT + 5 +2EEC + 8 +MAUERWERK + 10 +5000.0 + 20 +14300.0 + 30 +0.0 + 0 +POINT + 5 +2EED + 8 +MAUERWERK + 10 +5000.0 + 20 +13290.0 + 30 +0.0 + 0 +POINT + 5 +2EEE + 8 +MAUERWERK + 10 +5000.0 + 20 +12280.0 + 30 +0.0 + 0 +POINT + 5 +2EEF + 8 +MAUERWERK + 10 +5000.0 + 20 +11270.0 + 30 +0.0 + 0 +POINT + 5 +2EF0 + 8 +MAUERWERK + 10 +5000.0 + 20 +10260.0 + 30 +0.0 + 0 +POINT + 5 +2EF1 + 8 +MAUERWERK + 10 +26740.0 + 20 +12395.0 + 30 +0.0 + 0 +POINT + 5 +2EF2 + 8 +MAUERWERK + 10 +26740.0 + 20 +15845.0 + 30 +0.0 + 0 +POINT + 5 +2EF3 + 8 +MAUERWERK + 10 +26375.0 + 20 +16550.0 + 30 +0.0 + 0 +POINT + 5 +2EF4 + 8 +MAUERWERK + 10 +23485.0 + 20 +15990.0 + 30 +0.0 + 0 +POINT + 5 +2EF5 + 8 +MAUERWERK + 10 +23100.0 + 20 +15625.0 + 30 +0.0 + 0 +POINT + 5 +2EF6 + 8 +MAUERWERK + 10 +26375.0 + 20 +15450.0 + 30 +0.0 + 0 +POLYLINE + 5 +2EF7 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +3537 + 8 +MAUERWERK + 10 +26375.0 + 20 +12000.0 + 30 +0.0 + 0 +VERTEX + 5 +3538 + 8 +MAUERWERK + 10 +26740.0 + 20 +12000.0 + 30 +0.0 + 0 +VERTEX + 5 +3539 + 8 +MAUERWERK + 10 +26740.0 + 20 +17740.0 + 30 +0.0 + 0 +VERTEX + 5 +353A + 8 +MAUERWERK + 10 +26375.0 + 20 +17740.0 + 30 +0.0 + 0 +VERTEX + 5 +353B + 8 +MAUERWERK + 10 +26375.0 + 20 +15990.0 + 30 +0.0 + 0 +VERTEX + 5 +353C + 8 +MAUERWERK + 10 +22865.0 + 20 +15990.0 + 30 +0.0 + 0 +VERTEX + 5 +353D + 8 +MAUERWERK + 10 +22865.0 + 20 +16240.0 + 30 +0.0 + 0 +VERTEX + 5 +353E + 8 +MAUERWERK + 10 +22500.0 + 20 +16240.0 + 30 +0.0 + 0 +VERTEX + 5 +353F + 8 +MAUERWERK + 10 +22500.0 + 20 +15990.0 + 30 +0.0 + 0 +VERTEX + 5 +3540 + 8 +MAUERWERK + 10 +22250.0 + 20 +15990.0 + 30 +0.0 + 0 +VERTEX + 5 +3541 + 8 +MAUERWERK + 10 +22250.0 + 20 +15625.0 + 30 +0.0 + 0 +VERTEX + 5 +3542 + 8 +MAUERWERK + 10 +26375.0 + 20 +15625.0 + 30 +0.0 + 0 +SEQEND + 5 +3543 + 8 +MAUERWERK + 0 +POLYLINE + 5 +2F05 + 8 +TRENNWAENDE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3544 + 8 +TRENNWAENDE + 10 +22850.0 + 20 +9615.0 + 30 +0.0 + 0 +VERTEX + 5 +3545 + 8 +TRENNWAENDE + 10 +22850.0 + 20 +13915.0 + 30 +0.0 + 0 +VERTEX + 5 +3546 + 8 +TRENNWAENDE + 10 +22450.0 + 20 +13915.0 + 30 +0.0 + 0 +VERTEX + 5 +3547 + 8 +TRENNWAENDE + 10 +22450.0 + 20 +14040.0 + 30 +0.0 + 0 +VERTEX + 5 +3548 + 8 +TRENNWAENDE + 10 +22850.0 + 20 +14040.0 + 30 +0.0 + 0 +VERTEX + 5 +3549 + 8 +TRENNWAENDE + 10 +22850.0 + 20 +14340.0 + 30 +0.0 + 0 +VERTEX + 5 +354A + 8 +TRENNWAENDE + 10 +22975.0 + 20 +14340.0 + 30 +0.0 + 0 +VERTEX + 5 +354B + 8 +TRENNWAENDE + 10 +22975.0 + 20 +9615.0 + 30 +0.0 + 0 +SEQEND + 5 +354C + 8 +TRENNWAENDE + 0 +POLYLINE + 5 +2F0F + 8 +TRENNWAENDE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +354D + 8 +TRENNWAENDE + 10 +22850.0 + 20 +15625.0 + 30 +0.0 + 0 +VERTEX + 5 +354E + 8 +TRENNWAENDE + 10 +22850.0 + 20 +15225.0 + 30 +0.0 + 0 +VERTEX + 5 +354F + 8 +TRENNWAENDE + 10 +22975.0 + 20 +15225.0 + 30 +0.0 + 0 +VERTEX + 5 +3550 + 8 +TRENNWAENDE + 10 +22975.0 + 20 +15625.0 + 30 +0.0 + 0 +SEQEND + 5 +3551 + 8 +TRENNWAENDE + 0 +POLYLINE + 5 +2F15 + 8 +TRENNWAENDE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +3552 + 8 +TRENNWAENDE + 10 +21240.0 + 20 +13915.0 + 30 +0.0 + 0 +VERTEX + 5 +3553 + 8 +TRENNWAENDE + 10 +21565.0 + 20 +13915.0 + 30 +0.0 + 0 +VERTEX + 5 +3554 + 8 +TRENNWAENDE + 10 +21565.0 + 20 +14040.0 + 30 +0.0 + 0 +VERTEX + 5 +3555 + 8 +TRENNWAENDE + 10 +21240.0 + 20 +14040.0 + 30 +0.0 + 0 +SEQEND + 5 +3556 + 8 +TRENNWAENDE + 0 +POLYLINE + 5 +2F1B + 8 +TRENNWAENDE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +3557 + 8 +TRENNWAENDE + 10 +10115.0 + 20 +17375.0 + 30 +0.0 + 0 +VERTEX + 5 +3558 + 8 +TRENNWAENDE + 10 +13525.0 + 20 +17375.0 + 30 +0.0 + 0 +VERTEX + 5 +3559 + 8 +TRENNWAENDE + 10 +13525.0 + 20 +17250.0 + 30 +0.0 + 0 +VERTEX + 5 +355A + 8 +TRENNWAENDE + 10 +10115.0 + 20 +17250.0 + 30 +0.0 + 0 +SEQEND + 5 +355B + 8 +TRENNWAENDE + 0 +POLYLINE + 5 +2F21 + 8 +TRENNWAENDE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +355C + 8 +TRENNWAENDE + 10 +14875.0 + 20 +17375.0 + 30 +0.0 + 0 +VERTEX + 5 +355D + 8 +TRENNWAENDE + 10 +14555.0 + 20 +17375.0 + 30 +0.0 + 0 +VERTEX + 5 +355E + 8 +TRENNWAENDE + 10 +14555.0 + 20 +17250.0 + 30 +0.0 + 0 +VERTEX + 5 +355F + 8 +TRENNWAENDE + 10 +14875.0 + 20 +17250.0 + 30 +0.0 + 0 +SEQEND + 5 +3560 + 8 +TRENNWAENDE + 0 +POLYLINE + 5 +2F27 + 8 +TRENNWAENDE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +3561 + 8 +TRENNWAENDE + 10 +15240.0 + 20 +17375.0 + 30 +0.0 + 0 +VERTEX + 5 +3562 + 8 +TRENNWAENDE + 10 +15990.0 + 20 +17375.0 + 30 +0.0 + 0 +VERTEX + 5 +3563 + 8 +TRENNWAENDE + 10 +15990.0 + 20 +17250.0 + 30 +0.0 + 0 +VERTEX + 5 +3564 + 8 +TRENNWAENDE + 10 +15240.0 + 20 +17250.0 + 30 +0.0 + 0 +SEQEND + 5 +3565 + 8 +TRENNWAENDE + 0 +POLYLINE + 5 +2F2D + 8 +TRENNWAENDE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +3566 + 8 +TRENNWAENDE + 10 +17625.0 + 20 +17375.0 + 30 +0.0 + 0 +VERTEX + 5 +3567 + 8 +TRENNWAENDE + 10 +16875.0 + 20 +17375.0 + 30 +0.0 + 0 +VERTEX + 5 +3568 + 8 +TRENNWAENDE + 10 +16875.0 + 20 +17250.0 + 30 +0.0 + 0 +VERTEX + 5 +3569 + 8 +TRENNWAENDE + 10 +17625.0 + 20 +17250.0 + 30 +0.0 + 0 +SEQEND + 5 +356A + 8 +TRENNWAENDE + 0 +POLYLINE + 5 +2F33 + 8 +TRENNWAENDE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +356B + 8 +TRENNWAENDE + 10 +7615.0 + 20 +16875.0 + 30 +0.0 + 0 +VERTEX + 5 +356C + 8 +TRENNWAENDE + 10 +7615.0 + 20 +16475.0 + 30 +0.0 + 0 +VERTEX + 5 +356D + 8 +TRENNWAENDE + 10 +7740.0 + 20 +16475.0 + 30 +0.0 + 0 +VERTEX + 5 +356E + 8 +TRENNWAENDE + 10 +7740.0 + 20 +16875.0 + 30 +0.0 + 0 +SEQEND + 5 +356F + 8 +TRENNWAENDE + 0 +POLYLINE + 5 +2F39 + 8 +TRENNWAENDE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3570 + 8 +TRENNWAENDE + 10 +7615.0 + 20 +14490.0 + 30 +0.0 + 0 +VERTEX + 5 +3571 + 8 +TRENNWAENDE + 10 +7615.0 + 20 +15590.0 + 30 +0.0 + 0 +VERTEX + 5 +3572 + 8 +TRENNWAENDE + 10 +7740.0 + 20 +15590.0 + 30 +0.0 + 0 +VERTEX + 5 +3573 + 8 +TRENNWAENDE + 10 +7740.0 + 20 +14490.0 + 30 +0.0 + 0 +SEQEND + 5 +3574 + 8 +TRENNWAENDE + 0 +POLYLINE + 5 +2F3F + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3575 + 8 +FENSTER + 10 +6740.0 + 20 +21738.696968 + 30 +0.0 + 0 +VERTEX + 5 +3576 + 8 +FENSTER + 10 +8505.0 + 20 +21738.696968 + 30 +0.0 + 0 +SEQEND + 5 +3577 + 8 +FENSTER + 0 +POLYLINE + 5 +2F43 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3578 + 8 +FENSTER + 10 +10240.0 + 20 +21738.750414 + 30 +0.0 + 0 +VERTEX + 5 +3579 + 8 +FENSTER + 10 +11250.0 + 20 +21738.750414 + 30 +0.0 + 0 +SEQEND + 5 +357A + 8 +FENSTER + 0 +POLYLINE + 5 +2F47 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +357B + 8 +FENSTER + 10 +15865.0 + 20 +21738.749579 + 30 +0.0 + 0 +VERTEX + 5 +357C + 8 +FENSTER + 10 +16880.0 + 20 +21738.749579 + 30 +0.0 + 0 +SEQEND + 5 +357D + 8 +FENSTER + 0 +POLYLINE + 5 +2F4B + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +357E + 8 +FENSTER + 10 +18740.0 + 20 +21738.72851 + 30 +0.0 + 0 +VERTEX + 5 +357F + 8 +FENSTER + 10 +19750.0 + 20 +21738.72851 + 30 +0.0 + 0 +SEQEND + 5 +3580 + 8 +FENSTER + 0 +POLYLINE + 5 +2F4F + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3581 + 8 +FENSTER + 10 +23365.0 + 20 +21738.76512 + 30 +0.0 + 0 +VERTEX + 5 +3582 + 8 +FENSTER + 10 +25255.0 + 20 +21738.76512 + 30 +0.0 + 0 +SEQEND + 5 +3583 + 8 +FENSTER + 0 +POLYLINE + 5 +2F53 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3584 + 8 +FENSTER + 10 +26363.699375 + 20 +18380.0 + 30 +0.0 + 0 +VERTEX + 5 +3585 + 8 +FENSTER + 10 +26363.699375 + 20 +17720.0 + 30 +0.0 + 0 +SEQEND + 5 +3586 + 8 +FENSTER + 0 +POLYLINE + 5 +2F57 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3587 + 8 +FENSTER + 10 +26363.746274 + 20 +12010.0 + 30 +0.0 + 0 +VERTEX + 5 +3588 + 8 +FENSTER + 10 +26363.746274 + 20 +10355.0 + 30 +0.0 + 0 +SEQEND + 5 +3589 + 8 +FENSTER + 0 +POLYLINE + 5 +2F5B + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +358A + 8 +FENSTER + 10 +23231.732275 + 20 +9626.249997 + 30 +0.0 + 0 +VERTEX + 5 +358B + 8 +FENSTER + 10 +25366.732275 + 20 +9626.249997 + 30 +0.0 + 0 +SEQEND + 5 +358C + 8 +FENSTER + 0 +POLYLINE + 5 +2F5F + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +358D + 8 +FENSTER + 10 +21360.0 + 20 +9626.287656 + 30 +0.0 + 0 +VERTEX + 5 +358E + 8 +FENSTER + 10 +21875.0 + 20 +9626.287656 + 30 +0.0 + 0 +SEQEND + 5 +358F + 8 +FENSTER + 0 +POLYLINE + 5 +2F63 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3590 + 8 +FENSTER + 10 +18480.0 + 20 +9626.31444 + 30 +0.0 + 0 +VERTEX + 5 +3591 + 8 +FENSTER + 10 +20380.0 + 20 +9626.31444 + 30 +0.0 + 0 +SEQEND + 5 +3592 + 8 +FENSTER + 0 +POLYLINE + 5 +2F67 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3593 + 8 +FENSTER + 10 +16109.83412 + 20 +9626.263541 + 30 +0.0 + 0 +VERTEX + 5 +3594 + 8 +FENSTER + 10 +17379.83412 + 20 +9626.263541 + 30 +0.0 + 0 +SEQEND + 5 +3595 + 8 +FENSTER + 0 +POLYLINE + 5 +2F6B + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3596 + 8 +FENSTER + 10 +9865.0 + 20 +9626.25 + 30 +0.0 + 0 +VERTEX + 5 +3597 + 8 +FENSTER + 10 +11260.0 + 20 +9626.25 + 30 +0.0 + 0 +SEQEND + 5 +3598 + 8 +FENSTER + 0 +LINE + 5 +2F6F + 8 +FENSTER + 10 +8755.0 + 20 +9615.0 + 30 +0.0 + 11 +8750.0 + 21 +9615.0 + 31 +0.0 + 0 +POLYLINE + 5 +2F70 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3599 + 8 +FENSTER + 10 +7730.0 + 20 +9626.281294 + 30 +0.0 + 0 +VERTEX + 5 +359A + 8 +FENSTER + 10 +8755.0 + 20 +9626.281294 + 30 +0.0 + 0 +SEQEND + 5 +359B + 8 +FENSTER + 0 +POLYLINE + 5 +2F74 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +359C + 8 +FENSTER + 10 +5376.25 + 20 +16130.0 + 30 +0.0 + 0 +VERTEX + 5 +359D + 8 +FENSTER + 10 +5376.25 + 20 +14615.0 + 30 +0.0 + 0 +SEQEND + 5 +359E + 8 +FENSTER + 0 +POLYLINE + 5 +2F78 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +359F + 8 +FENSTER + 10 +5376.260808 + 20 +19390.0 + 30 +0.0 + 0 +VERTEX + 5 +35A0 + 8 +FENSTER + 10 +5376.260808 + 20 +18230.0 + 30 +0.0 + 0 +SEQEND + 5 +35A1 + 8 +FENSTER + 0 +POLYLINE + 5 +2F7C + 8 +VORSATZSCHALLE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +35A2 + 8 +VORSATZSCHALLE + 10 +4745.0 + 20 +8995.0 + 30 +0.0 + 0 +VERTEX + 5 +35A3 + 8 +VORSATZSCHALLE + 10 +7740.0 + 20 +8995.0 + 30 +0.0 + 0 +VERTEX + 5 +35A4 + 8 +VORSATZSCHALLE + 10 +7740.0 + 20 +9110.0 + 30 +0.0 + 0 +VERTEX + 5 +35A5 + 8 +VORSATZSCHALLE + 10 +4860.0 + 20 +9110.0 + 30 +0.0 + 0 +VERTEX + 5 +35A6 + 8 +VORSATZSCHALLE + 10 +4860.0 + 20 +14615.0 + 30 +0.0 + 0 +VERTEX + 5 +35A7 + 8 +VORSATZSCHALLE + 10 +4745.0 + 20 +14615.0 + 30 +0.0 + 0 +SEQEND + 5 +35A8 + 8 +VORSATZSCHALLE + 0 +POLYLINE + 5 +2F84 + 8 +VORSATZSCHALLE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +35A9 + 8 +VORSATZSCHALLE + 10 +8750.0 + 20 +9110.0 + 30 +0.0 + 0 +VERTEX + 5 +35AA + 8 +VORSATZSCHALLE + 10 +8750.0 + 20 +8995.0 + 30 +0.0 + 0 +VERTEX + 5 +35AB + 8 +VORSATZSCHALLE + 10 +9865.0 + 20 +8995.0 + 30 +0.0 + 0 +VERTEX + 5 +35AC + 8 +VORSATZSCHALLE + 10 +9865.0 + 20 +9110.0 + 30 +0.0 + 0 +SEQEND + 5 +35AD + 8 +VORSATZSCHALLE + 0 +POLYLINE + 5 +2F8A + 8 +VORSATZSCHALLE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +35AE + 8 +VORSATZSCHALLE + 10 +11250.0 + 20 +9110.0 + 30 +0.0 + 0 +VERTEX + 5 +35AF + 8 +VORSATZSCHALLE + 10 +11250.0 + 20 +8995.0 + 30 +0.0 + 0 +VERTEX + 5 +35B0 + 8 +VORSATZSCHALLE + 10 +16115.0 + 20 +8995.0 + 30 +0.0 + 0 +VERTEX + 5 +35B1 + 8 +VORSATZSCHALLE + 10 +16115.0 + 20 +9110.0 + 30 +0.0 + 0 +SEQEND + 5 +35B2 + 8 +VORSATZSCHALLE + 0 +POLYLINE + 5 +2F90 + 8 +VORSATZSCHALLE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +35B3 + 8 +VORSATZSCHALLE + 10 +17375.0 + 20 +9110.0 + 30 +0.0 + 0 +VERTEX + 5 +35B4 + 8 +VORSATZSCHALLE + 10 +17375.0 + 20 +8995.0 + 30 +0.0 + 0 +VERTEX + 5 +35B5 + 8 +VORSATZSCHALLE + 10 +18490.0 + 20 +8995.0 + 30 +0.0 + 0 +VERTEX + 5 +35B6 + 8 +VORSATZSCHALLE + 10 +18490.0 + 20 +9110.0 + 30 +0.0 + 0 +SEQEND + 5 +35B7 + 8 +VORSATZSCHALLE + 0 +POLYLINE + 5 +2F96 + 8 +VORSATZSCHALLE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +35B8 + 8 +VORSATZSCHALLE + 10 +20375.0 + 20 +9110.0 + 30 +0.0 + 0 +VERTEX + 5 +35B9 + 8 +VORSATZSCHALLE + 10 +20375.0 + 20 +8995.0 + 30 +0.0 + 0 +VERTEX + 5 +35BA + 8 +VORSATZSCHALLE + 10 +21365.0 + 20 +8995.0 + 30 +0.0 + 0 +VERTEX + 5 +35BB + 8 +VORSATZSCHALLE + 10 +21365.0 + 20 +9110.0 + 30 +0.0 + 0 +SEQEND + 5 +35BC + 8 +VORSATZSCHALLE + 0 +POLYLINE + 5 +2F9C + 8 +VORSATZSCHALLE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +35BD + 8 +VORSATZSCHALLE + 10 +21875.0 + 20 +9110.0 + 30 +0.0 + 0 +VERTEX + 5 +35BE + 8 +VORSATZSCHALLE + 10 +21875.0 + 20 +8995.0 + 30 +0.0 + 0 +VERTEX + 5 +35BF + 8 +VORSATZSCHALLE + 10 +23240.0 + 20 +8995.0 + 30 +0.0 + 0 +VERTEX + 5 +35C0 + 8 +VORSATZSCHALLE + 10 +23240.0 + 20 +9110.0 + 30 +0.0 + 0 +SEQEND + 5 +35C1 + 8 +VORSATZSCHALLE + 0 +POLYLINE + 5 +2FA2 + 8 +VORSATZSCHALLE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +35C2 + 8 +VORSATZSCHALLE + 10 +26880.0 + 20 +10365.0 + 30 +0.0 + 0 +VERTEX + 5 +35C3 + 8 +VORSATZSCHALLE + 10 +26995.0 + 20 +10365.0 + 30 +0.0 + 0 +VERTEX + 5 +35C4 + 8 +VORSATZSCHALLE + 10 +26995.0 + 20 +8995.0 + 30 +0.0 + 0 +VERTEX + 5 +35C5 + 8 +VORSATZSCHALLE + 10 +25375.0 + 20 +8995.0 + 30 +0.0 + 0 +VERTEX + 5 +35C6 + 8 +VORSATZSCHALLE + 10 +25375.0 + 20 +9110.0 + 30 +0.0 + 0 +VERTEX + 5 +35C7 + 8 +VORSATZSCHALLE + 10 +26880.0 + 20 +9110.0 + 30 +0.0 + 0 +SEQEND + 5 +35C8 + 8 +VORSATZSCHALLE + 0 +POLYLINE + 5 +2FAA + 8 +VORSATZSCHALLE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +35C9 + 8 +VORSATZSCHALLE + 10 +26880.0 + 20 +12000.0 + 30 +0.0 + 0 +VERTEX + 5 +35CA + 8 +VORSATZSCHALLE + 10 +26995.0 + 20 +12000.0 + 30 +0.0 + 0 +VERTEX + 5 +35CB + 8 +VORSATZSCHALLE + 10 +26995.0 + 20 +17740.0 + 30 +0.0 + 0 +VERTEX + 5 +35CC + 8 +VORSATZSCHALLE + 10 +26880.0 + 20 +17740.0 + 30 +0.0 + 0 +SEQEND + 5 +35CD + 8 +VORSATZSCHALLE + 0 +POLYLINE + 5 +2FB0 + 8 +VORSATZSCHALLE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +35CE + 8 +VORSATZSCHALLE + 10 +26880.0 + 20 +18375.0 + 30 +0.0 + 0 +VERTEX + 5 +35CF + 8 +VORSATZSCHALLE + 10 +26995.0 + 20 +18375.0 + 30 +0.0 + 0 +VERTEX + 5 +35D0 + 8 +VORSATZSCHALLE + 10 +26995.0 + 20 +22370.0 + 30 +0.0 + 0 +VERTEX + 5 +35D1 + 8 +VORSATZSCHALLE + 10 +25250.0 + 20 +22370.0 + 30 +0.0 + 0 +VERTEX + 5 +35D2 + 8 +VORSATZSCHALLE + 10 +25250.0 + 20 +22255.0 + 30 +0.0 + 0 +VERTEX + 5 +35D3 + 8 +VORSATZSCHALLE + 10 +26880.0 + 20 +22255.0 + 30 +0.0 + 0 +SEQEND + 5 +35D4 + 8 +VORSATZSCHALLE + 0 +POLYLINE + 5 +2FB8 + 8 +VORSATZSCHALLE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +35D5 + 8 +VORSATZSCHALLE + 10 +4745.0 + 20 +19375.0 + 30 +0.0 + 0 +VERTEX + 5 +35D6 + 8 +VORSATZSCHALLE + 10 +4860.0 + 20 +19375.0 + 30 +0.0 + 0 +VERTEX + 5 +35D7 + 8 +VORSATZSCHALLE + 10 +4860.0 + 20 +22255.0 + 30 +0.0 + 0 +VERTEX + 5 +35D8 + 8 +VORSATZSCHALLE + 10 +6740.0 + 20 +22255.0 + 30 +0.0 + 0 +VERTEX + 5 +35D9 + 8 +VORSATZSCHALLE + 10 +6740.0 + 20 +22370.0 + 30 +0.0 + 0 +VERTEX + 5 +35DA + 8 +VORSATZSCHALLE + 10 +4745.0 + 20 +22370.0 + 30 +0.0 + 0 +SEQEND + 5 +35DB + 8 +VORSATZSCHALLE + 0 +POLYLINE + 5 +2FC0 + 8 +VORSATZSCHALLE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +35DC + 8 +VORSATZSCHALLE + 10 +8500.0 + 20 +22255.0 + 30 +0.0 + 0 +VERTEX + 5 +35DD + 8 +VORSATZSCHALLE + 10 +8500.0 + 20 +22370.0 + 30 +0.0 + 0 +VERTEX + 5 +35DE + 8 +VORSATZSCHALLE + 10 +10240.0 + 20 +22370.0 + 30 +0.0 + 0 +VERTEX + 5 +35DF + 8 +VORSATZSCHALLE + 10 +10240.0 + 20 +22255.0 + 30 +0.0 + 0 +SEQEND + 5 +35E0 + 8 +VORSATZSCHALLE + 0 +POLYLINE + 5 +2FC6 + 8 +VORSATZSCHALLE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +35E1 + 8 +VORSATZSCHALLE + 10 +11250.0 + 20 +22255.0 + 30 +0.0 + 0 +VERTEX + 5 +35E2 + 8 +VORSATZSCHALLE + 10 +11250.0 + 20 +22370.0 + 30 +0.0 + 0 +VERTEX + 5 +35E3 + 8 +VORSATZSCHALLE + 10 +15865.0 + 20 +22370.0 + 30 +0.0 + 0 +VERTEX + 5 +35E4 + 8 +VORSATZSCHALLE + 10 +15865.0 + 20 +22255.0 + 30 +0.0 + 0 +SEQEND + 5 +35E5 + 8 +VORSATZSCHALLE + 0 +POLYLINE + 5 +2FCC + 8 +VORSATZSCHALLE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +35E6 + 8 +VORSATZSCHALLE + 10 +16875.0 + 20 +22255.0 + 30 +0.0 + 0 +VERTEX + 5 +35E7 + 8 +VORSATZSCHALLE + 10 +16875.0 + 20 +22370.0 + 30 +0.0 + 0 +VERTEX + 5 +35E8 + 8 +VORSATZSCHALLE + 10 +18740.0 + 20 +22370.0 + 30 +0.0 + 0 +VERTEX + 5 +35E9 + 8 +VORSATZSCHALLE + 10 +18740.0 + 20 +22255.0 + 30 +0.0 + 0 +SEQEND + 5 +35EA + 8 +VORSATZSCHALLE + 0 +POLYLINE + 5 +2FD2 + 8 +VORSATZSCHALLE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +35EB + 8 +VORSATZSCHALLE + 10 +19750.0 + 20 +22255.0 + 30 +0.0 + 0 +VERTEX + 5 +35EC + 8 +VORSATZSCHALLE + 10 +19750.0 + 20 +22370.0 + 30 +0.0 + 0 +VERTEX + 5 +35ED + 8 +VORSATZSCHALLE + 10 +23365.0 + 20 +22370.0 + 30 +0.0 + 0 +VERTEX + 5 +35EE + 8 +VORSATZSCHALLE + 10 +23365.0 + 20 +22255.0 + 30 +0.0 + 0 +SEQEND + 5 +35EF + 8 +VORSATZSCHALLE + 0 +POLYLINE + 5 +2FD8 + 8 +VORSATZSCHALLE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +35F0 + 8 +VORSATZSCHALLE + 10 +4860.0 + 20 +18240.0 + 30 +0.0 + 0 +VERTEX + 5 +35F1 + 8 +VORSATZSCHALLE + 10 +4745.0 + 20 +18240.0 + 30 +0.0 + 0 +VERTEX + 5 +35F2 + 8 +VORSATZSCHALLE + 10 +4745.0 + 20 +16125.0 + 30 +0.0 + 0 +VERTEX + 5 +35F3 + 8 +VORSATZSCHALLE + 10 +4860.0 + 20 +16125.0 + 30 +0.0 + 0 +SEQEND + 5 +35F4 + 8 +VORSATZSCHALLE + 0 +POLYLINE + 5 +2FDE + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +35F5 + 8 +MAUERWERK + 10 +5000.0 + 20 +9250.0 + 30 +0.0 + 0 +VERTEX + 5 +35F6 + 8 +MAUERWERK + 10 +7740.0 + 20 +9250.0 + 30 +0.0 + 0 +SEQEND + 5 +35F7 + 8 +MAUERWERK + 0 +POLYLINE + 5 +2FE2 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +35F8 + 8 +MAUERWERK + 10 +7740.0 + 20 +9250.0 + 30 +0.0 + 0 +VERTEX + 5 +35F9 + 8 +MAUERWERK + 10 +7740.0 + 20 +9615.0 + 30 +0.0 + 0 +VERTEX + 5 +35FA + 8 +MAUERWERK + 10 +5365.0 + 20 +9615.0 + 30 +0.0 + 0 +VERTEX + 5 +35FB + 8 +MAUERWERK + 10 +5365.0 + 20 +14125.0 + 30 +0.0 + 0 +VERTEX + 5 +35FC + 8 +MAUERWERK + 10 +9750.0 + 20 +14125.0 + 30 +0.0 + 0 +VERTEX + 5 +35FD + 8 +MAUERWERK + 10 +9750.0 + 20 +13875.0 + 30 +0.0 + 0 +VERTEX + 5 +35FE + 8 +MAUERWERK + 10 +10115.0 + 20 +13875.0 + 30 +0.0 + 0 +VERTEX + 5 +35FF + 8 +MAUERWERK + 10 +10115.0 + 20 +15125.0 + 30 +0.0 + 0 +VERTEX + 5 +3600 + 8 +MAUERWERK + 10 +15750.0 + 20 +15125.0 + 30 +0.0 + 0 +VERTEX + 5 +3601 + 8 +MAUERWERK + 10 +15750.0 + 20 +15000.0 + 30 +0.0 + 0 +VERTEX + 5 +3602 + 8 +MAUERWERK + 10 +16115.0 + 20 +15000.0 + 30 +0.0 + 0 +VERTEX + 5 +3603 + 8 +MAUERWERK + 10 +16115.0 + 20 +15625.0 + 30 +0.0 + 0 +VERTEX + 5 +3604 + 8 +MAUERWERK + 10 +16365.0 + 20 +15625.0 + 30 +0.0 + 0 +VERTEX + 5 +3605 + 8 +MAUERWERK + 10 +16365.0 + 20 +15990.0 + 30 +0.0 + 0 +VERTEX + 5 +3606 + 8 +MAUERWERK + 10 +15750.0 + 20 +15990.0 + 30 +0.0 + 0 +VERTEX + 5 +3607 + 8 +MAUERWERK + 10 +15750.0 + 20 +15490.0 + 30 +0.0 + 0 +VERTEX + 5 +3608 + 8 +MAUERWERK + 10 +10115.0 + 20 +15490.0 + 30 +0.0 + 0 +VERTEX + 5 +3609 + 8 +MAUERWERK + 10 +10115.0 + 20 +15740.0 + 30 +0.0 + 0 +VERTEX + 5 +360A + 8 +MAUERWERK + 10 +9750.0 + 20 +15740.0 + 30 +0.0 + 0 +VERTEX + 5 +360B + 8 +MAUERWERK + 10 +9750.0 + 20 +14490.0 + 30 +0.0 + 0 +VERTEX + 5 +360C + 8 +MAUERWERK + 10 +5365.0 + 20 +14490.0 + 30 +0.0 + 0 +VERTEX + 5 +360D + 8 +MAUERWERK + 10 +5365.0 + 20 +14615.0 + 30 +0.0 + 0 +VERTEX + 5 +360E + 8 +MAUERWERK + 10 +5000.0 + 20 +14615.0 + 30 +0.0 + 0 +VERTEX + 5 +360F + 8 +MAUERWERK + 10 +5000.0 + 20 +9250.0 + 30 +0.0 + 0 +SEQEND + 5 +3610 + 8 +MAUERWERK + 0 +POLYLINE + 5 +2FFC + 8 +DAEMMUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3611 + 8 +DAEMMUNG + 10 +4920.0 + 20 +9170.0 + 30 +0.0 + 0 +VERTEX + 5 +3612 + 8 +DAEMMUNG + 10 +7751.25 + 20 +9170.0 + 30 +0.0 + 0 +VERTEX + 5 +3613 + 8 +DAEMMUNG + 10 +7751.25 + 20 +9250.0 + 30 +0.0 + 0 +VERTEX + 5 +3614 + 8 +DAEMMUNG + 10 +5000.0 + 20 +9250.0 + 30 +0.0 + 0 +VERTEX + 5 +3615 + 8 +DAEMMUNG + 10 +5000.0 + 20 +14626.25 + 30 +0.0 + 0 +VERTEX + 5 +3616 + 8 +DAEMMUNG + 10 +4920.0 + 20 +14626.25 + 30 +0.0 + 0 +SEQEND + 5 +3617 + 8 +DAEMMUNG + 0 +POLYLINE + 5 +3004 + 8 +DAEMMUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3618 + 8 +DAEMMUNG + 10 +8738.75 + 20 +9250.0 + 30 +0.0 + 0 +VERTEX + 5 +3619 + 8 +DAEMMUNG + 10 +8738.75 + 20 +9170.0 + 30 +0.0 + 0 +VERTEX + 5 +361A + 8 +DAEMMUNG + 10 +9876.25 + 20 +9170.0 + 30 +0.0 + 0 +VERTEX + 5 +361B + 8 +DAEMMUNG + 10 +9876.25 + 20 +9250.0 + 30 +0.0 + 0 +SEQEND + 5 +361C + 8 +DAEMMUNG + 0 +POLYLINE + 5 +300A + 8 +DAEMMUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +361D + 8 +DAEMMUNG + 10 +11238.75 + 20 +9250.0 + 30 +0.0 + 0 +VERTEX + 5 +361E + 8 +DAEMMUNG + 10 +11238.75 + 20 +9170.0 + 30 +0.0 + 0 +VERTEX + 5 +361F + 8 +DAEMMUNG + 10 +16126.25 + 20 +9170.0 + 30 +0.0 + 0 +VERTEX + 5 +3620 + 8 +DAEMMUNG + 10 +16126.25 + 20 +9250.0 + 30 +0.0 + 0 +SEQEND + 5 +3621 + 8 +DAEMMUNG + 0 +POLYLINE + 5 +3010 + 8 +DAEMMUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3622 + 8 +DAEMMUNG + 10 +17363.75 + 20 +9250.0 + 30 +0.0 + 0 +VERTEX + 5 +3623 + 8 +DAEMMUNG + 10 +17363.75 + 20 +9170.0 + 30 +0.0 + 0 +VERTEX + 5 +3624 + 8 +DAEMMUNG + 10 +18501.25 + 20 +9170.0 + 30 +0.0 + 0 +VERTEX + 5 +3625 + 8 +DAEMMUNG + 10 +18501.25 + 20 +9250.0 + 30 +0.0 + 0 +SEQEND + 5 +3626 + 8 +DAEMMUNG + 0 +POLYLINE + 5 +3016 + 8 +DAEMMUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3627 + 8 +DAEMMUNG + 10 +20363.75 + 20 +9250.0 + 30 +0.0 + 0 +VERTEX + 5 +3628 + 8 +DAEMMUNG + 10 +20363.75 + 20 +9170.0 + 30 +0.0 + 0 +VERTEX + 5 +3629 + 8 +DAEMMUNG + 10 +21376.25 + 20 +9170.0 + 30 +0.0 + 0 +VERTEX + 5 +362A + 8 +DAEMMUNG + 10 +21376.25 + 20 +9250.0 + 30 +0.0 + 0 +SEQEND + 5 +362B + 8 +DAEMMUNG + 0 +POLYLINE + 5 +301C + 8 +DAEMMUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +362C + 8 +DAEMMUNG + 10 +21863.75 + 20 +9250.0 + 30 +0.0 + 0 +VERTEX + 5 +362D + 8 +DAEMMUNG + 10 +21863.75 + 20 +9170.0 + 30 +0.0 + 0 +VERTEX + 5 +362E + 8 +DAEMMUNG + 10 +23251.25 + 20 +9170.0 + 30 +0.0 + 0 +VERTEX + 5 +362F + 8 +DAEMMUNG + 10 +23251.25 + 20 +9250.0 + 30 +0.0 + 0 +SEQEND + 5 +3630 + 8 +DAEMMUNG + 0 +POLYLINE + 5 +3022 + 8 +DAEMMUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3631 + 8 +DAEMMUNG + 10 +25363.75 + 20 +9250.0 + 30 +0.0 + 0 +VERTEX + 5 +3632 + 8 +DAEMMUNG + 10 +25363.75 + 20 +9170.0 + 30 +0.0 + 0 +VERTEX + 5 +3633 + 8 +DAEMMUNG + 10 +26820.0 + 20 +9170.0 + 30 +0.0 + 0 +VERTEX + 5 +3634 + 8 +DAEMMUNG + 10 +26820.0 + 20 +10376.25 + 30 +0.0 + 0 +VERTEX + 5 +3635 + 8 +DAEMMUNG + 10 +26740.0 + 20 +10376.25 + 30 +0.0 + 0 +VERTEX + 5 +3636 + 8 +DAEMMUNG + 10 +26740.0 + 20 +9250.0 + 30 +0.0 + 0 +SEQEND + 5 +3637 + 8 +DAEMMUNG + 0 +POLYLINE + 5 +302A + 8 +DAEMMUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3638 + 8 +DAEMMUNG + 10 +26740.0 + 20 +11990.0 + 30 +0.0 + 0 +VERTEX + 5 +3639 + 8 +DAEMMUNG + 10 +26820.0 + 20 +11990.0 + 30 +0.0 + 0 +VERTEX + 5 +363A + 8 +DAEMMUNG + 10 +26820.0 + 20 +17751.25 + 30 +0.0 + 0 +VERTEX + 5 +363B + 8 +DAEMMUNG + 10 +26740.0 + 20 +17751.25 + 30 +0.0 + 0 +SEQEND + 5 +363C + 8 +DAEMMUNG + 0 +POLYLINE + 5 +3030 + 8 +DAEMMUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +363D + 8 +DAEMMUNG + 10 +26820.0 + 20 +22195.0 + 30 +0.0 + 0 +VERTEX + 5 +363E + 8 +DAEMMUNG + 10 +26820.0 + 20 +18443.75 + 30 +0.0 + 0 +VERTEX + 5 +363F + 8 +DAEMMUNG + 10 +26820.0 + 20 +18363.75 + 30 +0.0 + 0 +VERTEX + 5 +3640 + 8 +DAEMMUNG + 10 +26740.0 + 20 +18363.75 + 30 +0.0 + 0 +VERTEX + 5 +3641 + 8 +DAEMMUNG + 10 +26740.0 + 20 +22115.0 + 30 +0.0 + 0 +VERTEX + 5 +3642 + 8 +DAEMMUNG + 10 +25238.75 + 20 +22115.0 + 30 +0.0 + 0 +VERTEX + 5 +3643 + 8 +DAEMMUNG + 10 +25238.75 + 20 +22195.0 + 30 +0.0 + 0 +SEQEND + 5 +3644 + 8 +DAEMMUNG + 0 +POLYLINE + 5 +3039 + 8 +DAEMMUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3645 + 8 +DAEMMUNG + 10 +4920.0 + 20 +22195.0 + 30 +0.0 + 0 +VERTEX + 5 +3646 + 8 +DAEMMUNG + 10 +4920.0 + 20 +19443.75 + 30 +0.0 + 0 +VERTEX + 5 +3647 + 8 +DAEMMUNG + 10 +4920.0 + 20 +19363.75 + 30 +0.0 + 0 +VERTEX + 5 +3648 + 8 +DAEMMUNG + 10 +5000.0 + 20 +19363.75 + 30 +0.0 + 0 +VERTEX + 5 +3649 + 8 +DAEMMUNG + 10 +5000.0 + 20 +22115.0 + 30 +0.0 + 0 +VERTEX + 5 +364A + 8 +DAEMMUNG + 10 +6751.25 + 20 +22115.0 + 30 +0.0 + 0 +VERTEX + 5 +364B + 8 +DAEMMUNG + 10 +6751.25 + 20 +22195.0 + 30 +0.0 + 0 +SEQEND + 5 +364C + 8 +DAEMMUNG + 0 +POLYLINE + 5 +3042 + 8 +DAEMMUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +364D + 8 +DAEMMUNG + 10 +8488.75 + 20 +22115.0 + 30 +0.0 + 0 +VERTEX + 5 +364E + 8 +DAEMMUNG + 10 +8488.75 + 20 +22195.0 + 30 +0.0 + 0 +VERTEX + 5 +364F + 8 +DAEMMUNG + 10 +10251.25 + 20 +22195.0 + 30 +0.0 + 0 +VERTEX + 5 +3650 + 8 +DAEMMUNG + 10 +10251.25 + 20 +22115.0 + 30 +0.0 + 0 +SEQEND + 5 +3651 + 8 +DAEMMUNG + 0 +POLYLINE + 5 +3048 + 8 +DAEMMUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3652 + 8 +DAEMMUNG + 10 +11238.75 + 20 +22115.0 + 30 +0.0 + 0 +VERTEX + 5 +3653 + 8 +DAEMMUNG + 10 +11238.75 + 20 +22195.0 + 30 +0.0 + 0 +VERTEX + 5 +3654 + 8 +DAEMMUNG + 10 +15876.25 + 20 +22195.0 + 30 +0.0 + 0 +VERTEX + 5 +3655 + 8 +DAEMMUNG + 10 +15876.25 + 20 +22115.0 + 30 +0.0 + 0 +SEQEND + 5 +3656 + 8 +DAEMMUNG + 0 +POLYLINE + 5 +304E + 8 +DAEMMUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3657 + 8 +DAEMMUNG + 10 +16863.75 + 20 +22115.0 + 30 +0.0 + 0 +VERTEX + 5 +3658 + 8 +DAEMMUNG + 10 +16863.75 + 20 +22195.0 + 30 +0.0 + 0 +VERTEX + 5 +3659 + 8 +DAEMMUNG + 10 +18751.25 + 20 +22195.0 + 30 +0.0 + 0 +VERTEX + 5 +365A + 8 +DAEMMUNG + 10 +18751.25 + 20 +22115.0 + 30 +0.0 + 0 +SEQEND + 5 +365B + 8 +DAEMMUNG + 0 +POLYLINE + 5 +3054 + 8 +DAEMMUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +365C + 8 +DAEMMUNG + 10 +19738.25 + 20 +22115.0 + 30 +0.0 + 0 +VERTEX + 5 +365D + 8 +DAEMMUNG + 10 +19738.25 + 20 +22195.0 + 30 +0.0 + 0 +VERTEX + 5 +365E + 8 +DAEMMUNG + 10 +23375.75 + 20 +22195.0 + 30 +0.0 + 0 +VERTEX + 5 +365F + 8 +DAEMMUNG + 10 +23375.75 + 20 +22115.0 + 30 +0.0 + 0 +SEQEND + 5 +3660 + 8 +DAEMMUNG + 0 +POLYLINE + 5 +305A + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3661 + 8 +FENSTER + 10 +6740.0 + 20 +22381.250308 + 30 +0.0 + 0 +VERTEX + 5 +3662 + 8 +FENSTER + 10 +8505.0 + 20 +22381.250308 + 30 +0.0 + 0 +SEQEND + 5 +3663 + 8 +FENSTER + 0 +POLYLINE + 5 +305E + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3664 + 8 +FENSTER + 10 +4733.794186 + 20 +19390.0 + 30 +0.0 + 0 +VERTEX + 5 +3665 + 8 +FENSTER + 10 +4733.794186 + 20 +18230.0 + 30 +0.0 + 0 +SEQEND + 5 +3666 + 8 +FENSTER + 0 +POLYLINE + 5 +3062 + 8 +DAEMMUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3667 + 8 +DAEMMUNG + 10 +4920.0 + 20 +16113.75 + 30 +0.0 + 0 +VERTEX + 5 +3668 + 8 +DAEMMUNG + 10 +5000.0 + 20 +16113.75 + 30 +0.0 + 0 +VERTEX + 5 +3669 + 8 +DAEMMUNG + 10 +5000.0 + 20 +18251.25 + 30 +0.0 + 0 +VERTEX + 5 +366A + 8 +DAEMMUNG + 10 +4920.0 + 20 +18251.25 + 30 +0.0 + 0 +SEQEND + 5 +366B + 8 +DAEMMUNG + 0 +POLYLINE + 5 +3068 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +366C + 8 +FENSTER + 10 +4860.00225 + 20 +18251.100556 + 30 +0.0 + 0 +VERTEX + 5 +366D + 8 +FENSTER + 10 +4923.297336 + 20 +18251.100556 + 30 +0.0 + 0 +SEQEND + 5 +366E + 8 +FENSTER + 0 +POLYLINE + 5 +306C + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +366F + 8 +FENSTER + 10 +4733.493167 + 20 +16130.0 + 30 +0.0 + 0 +VERTEX + 5 +3670 + 8 +FENSTER + 10 +4733.493167 + 20 +14615.0 + 30 +0.0 + 0 +SEQEND + 5 +3671 + 8 +FENSTER + 0 +POLYLINE + 5 +3070 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +3672 + 8 +FENSTER + 10 +4853.742083 + 20 +16125.0 + 30 +0.0 + 0 +VERTEX + 5 +3673 + 8 +FENSTER + 10 +5030.0 + 20 +16125.0 + 30 +0.0 + 0 +SEQEND + 5 +3674 + 8 +FENSTER + 0 +POLYLINE + 5 +3074 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +3675 + 8 +FENSTER + 10 +4859.902627 + 20 +14615.0 + 30 +0.0 + 0 +VERTEX + 5 +3676 + 8 +FENSTER + 10 +5020.0 + 20 +14615.0 + 30 +0.0 + 0 +SEQEND + 5 +3677 + 8 +FENSTER + 0 +POLYLINE + 5 +3078 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3678 + 8 +FENSTER + 10 +7730.0 + 20 +8981.423634 + 30 +0.0 + 0 +VERTEX + 5 +3679 + 8 +FENSTER + 10 +8755.0 + 20 +8981.423634 + 30 +0.0 + 0 +SEQEND + 5 +367A + 8 +FENSTER + 0 +POLYLINE + 5 +307C + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +367B + 8 +FENSTER + 10 +7740.0 + 20 +9111.199371 + 30 +0.0 + 0 +VERTEX + 5 +367C + 8 +FENSTER + 10 +7740.0 + 20 +9285.0 + 30 +0.0 + 0 +SEQEND + 5 +367D + 8 +FENSTER + 0 +POLYLINE + 5 +3080 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +367E + 8 +FENSTER + 10 +8750.0 + 20 +9060.0 + 30 +0.0 + 0 +VERTEX + 5 +367F + 8 +FENSTER + 10 +8750.0 + 20 +9280.0 + 30 +0.0 + 0 +SEQEND + 5 +3680 + 8 +FENSTER + 0 +POLYLINE + 5 +3084 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3681 + 8 +FENSTER + 10 +9865.0 + 20 +8984.334044 + 30 +0.0 + 0 +VERTEX + 5 +3682 + 8 +FENSTER + 10 +11260.0 + 20 +8984.334044 + 30 +0.0 + 0 +SEQEND + 5 +3683 + 8 +FENSTER + 0 +POLYLINE + 5 +3088 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +3684 + 8 +FENSTER + 10 +9865.0 + 20 +9295.0 + 30 +0.0 + 0 +VERTEX + 5 +3685 + 8 +FENSTER + 10 +9865.0 + 20 +9075.0 + 30 +0.0 + 0 +SEQEND + 5 +3686 + 8 +FENSTER + 0 +POLYLINE + 5 +308C + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +3687 + 8 +FENSTER + 10 +11250.0 + 20 +9350.0 + 30 +0.0 + 0 +VERTEX + 5 +3688 + 8 +FENSTER + 10 +11250.0 + 20 +9075.0 + 30 +0.0 + 0 +SEQEND + 5 +3689 + 8 +FENSTER + 0 +POLYLINE + 5 +3090 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +368A + 8 +FENSTER + 10 +16110.0 + 20 +8983.714374 + 30 +0.0 + 0 +VERTEX + 5 +368B + 8 +FENSTER + 10 +17380.0 + 20 +8983.714374 + 30 +0.0 + 0 +SEQEND + 5 +368C + 8 +FENSTER + 0 +POLYLINE + 5 +3094 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +368D + 8 +FENSTER + 10 +16115.0 + 20 +9310.0 + 30 +0.0 + 0 +VERTEX + 5 +368E + 8 +FENSTER + 10 +16115.0 + 20 +9087.237065 + 30 +0.0 + 0 +SEQEND + 5 +368F + 8 +FENSTER + 0 +POLYLINE + 5 +3098 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +3690 + 8 +FENSTER + 10 +17375.0 + 20 +9315.0 + 30 +0.0 + 0 +VERTEX + 5 +3691 + 8 +FENSTER + 10 +17375.0 + 20 +9110.026403 + 30 +0.0 + 0 +SEQEND + 5 +3692 + 8 +FENSTER + 0 +POLYLINE + 5 +309C + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3693 + 8 +FENSTER + 10 +18480.0 + 20 +8983.742222 + 30 +0.0 + 0 +VERTEX + 5 +3694 + 8 +FENSTER + 10 +20380.0 + 20 +8983.742222 + 30 +0.0 + 0 +SEQEND + 5 +3695 + 8 +FENSTER + 0 +POLYLINE + 5 +30A0 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +3696 + 8 +FENSTER + 10 +20375.0 + 20 +9280.0 + 30 +0.0 + 0 +VERTEX + 5 +3697 + 8 +FENSTER + 10 +20375.0 + 20 +9119.145747 + 30 +0.0 + 0 +SEQEND + 5 +3698 + 8 +FENSTER + 0 +POLYLINE + 5 +30A4 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +3699 + 8 +FENSTER + 10 +18490.0 + 20 +9320.0 + 30 +0.0 + 0 +VERTEX + 5 +369A + 8 +FENSTER + 10 +18490.0 + 20 +9122.747675 + 30 +0.0 + 0 +SEQEND + 5 +369B + 8 +FENSTER + 0 +POLYLINE + 5 +30A8 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +369C + 8 +FENSTER + 10 +21360.0 + 20 +8983.47638 + 30 +0.0 + 0 +VERTEX + 5 +369D + 8 +FENSTER + 10 +21875.0 + 20 +8983.47638 + 30 +0.0 + 0 +SEQEND + 5 +369E + 8 +FENSTER + 0 +POLYLINE + 5 +30AC + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +369F + 8 +FENSTER + 10 +21365.0 + 20 +9305.0 + 30 +0.0 + 0 +VERTEX + 5 +36A0 + 8 +FENSTER + 10 +21365.0 + 20 +9103.889231 + 30 +0.0 + 0 +SEQEND + 5 +36A1 + 8 +FENSTER + 0 +POLYLINE + 5 +30B0 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +36A2 + 8 +FENSTER + 10 +21875.0 + 20 +9300.0 + 30 +0.0 + 0 +VERTEX + 5 +36A3 + 8 +FENSTER + 10 +21875.0 + 20 +9108.078478 + 30 +0.0 + 0 +SEQEND + 5 +36A4 + 8 +FENSTER + 0 +POLYLINE + 5 +30B4 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +36A5 + 8 +FENSTER + 10 +23240.0 + 20 +9275.0 + 30 +0.0 + 0 +VERTEX + 5 +36A6 + 8 +FENSTER + 10 +23240.0 + 20 +9088.71261 + 30 +0.0 + 0 +SEQEND + 5 +36A7 + 8 +FENSTER + 0 +POLYLINE + 5 +30B8 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +36A8 + 8 +FENSTER + 10 +25375.0 + 20 +9295.0 + 30 +0.0 + 0 +VERTEX + 5 +36A9 + 8 +FENSTER + 10 +25375.0 + 20 +9081.046908 + 30 +0.0 + 0 +SEQEND + 5 +36AA + 8 +FENSTER + 0 +POLYLINE + 5 +30BC + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +36AB + 8 +FENSTER + 10 +23231.732275 + 20 +8983.756213 + 30 +0.0 + 0 +VERTEX + 5 +36AC + 8 +FENSTER + 10 +25366.732275 + 20 +8983.756213 + 30 +0.0 + 0 +SEQEND + 5 +36AD + 8 +FENSTER + 0 +POLYLINE + 5 +30C0 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +36AE + 8 +FENSTER + 10 +27006.25051 + 20 +12010.0 + 30 +0.0 + 0 +VERTEX + 5 +36AF + 8 +FENSTER + 10 +27006.25051 + 20 +10355.0 + 30 +0.0 + 0 +SEQEND + 5 +36B0 + 8 +FENSTER + 0 +POLYLINE + 5 +30C4 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +36B1 + 8 +FENSTER + 10 +26725.965803 + 20 +11999.707383 + 30 +0.0 + 0 +VERTEX + 5 +36B2 + 8 +FENSTER + 10 +26879.383708 + 20 +11999.707383 + 30 +0.0 + 0 +SEQEND + 5 +36B3 + 8 +FENSTER + 0 +POLYLINE + 5 +30C8 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +36B4 + 8 +FENSTER + 10 +26740.0 + 20 +10365.0 + 30 +0.0 + 0 +VERTEX + 5 +36B5 + 8 +FENSTER + 10 +26883.826117 + 20 +10365.0 + 30 +0.0 + 0 +SEQEND + 5 +36B6 + 8 +FENSTER + 0 +POLYLINE + 5 +30CC + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +36B7 + 8 +FENSTER + 10 +27006.264517 + 20 +18380.0 + 30 +0.0 + 0 +VERTEX + 5 +36B8 + 8 +FENSTER + 10 +27006.264517 + 20 +17720.0 + 30 +0.0 + 0 +SEQEND + 5 +36B9 + 8 +FENSTER + 0 +POLYLINE + 5 +30D0 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +36BA + 8 +FENSTER + 10 +26717.517718 + 20 +18375.099979 + 30 +0.0 + 0 +VERTEX + 5 +36BB + 8 +FENSTER + 10 +26865.113764 + 20 +18375.0 + 30 +0.0 + 0 +SEQEND + 5 +36BC + 8 +FENSTER + 0 +POLYLINE + 5 +30D4 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +36BD + 8 +FENSTER + 10 +26700.0 + 20 +17740.0 + 30 +0.0 + 0 +VERTEX + 5 +36BE + 8 +FENSTER + 10 +26875.171862 + 20 +17740.0 + 30 +0.0 + 0 +SEQEND + 5 +36BF + 8 +FENSTER + 0 +POLYLINE + 5 +30D8 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +36C0 + 8 +FENSTER + 10 +25250.0 + 20 +22261.196616 + 30 +0.0 + 0 +VERTEX + 5 +36C1 + 8 +FENSTER + 10 +25250.0 + 20 +22085.0 + 30 +0.0 + 0 +SEQEND + 5 +36C2 + 8 +FENSTER + 0 +POLYLINE + 5 +30DC + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +36C3 + 8 +FENSTER + 10 +23365.0 + 20 +22381.256088 + 30 +0.0 + 0 +VERTEX + 5 +36C4 + 8 +FENSTER + 10 +25255.0 + 20 +22381.256088 + 30 +0.0 + 0 +SEQEND + 5 +36C5 + 8 +FENSTER + 0 +POLYLINE + 5 +30E0 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +36C6 + 8 +FENSTER + 10 +23365.0 + 20 +22100.0 + 30 +0.0 + 0 +VERTEX + 5 +36C7 + 8 +FENSTER + 10 +23365.0 + 20 +22245.591735 + 30 +0.0 + 0 +SEQEND + 5 +36C8 + 8 +FENSTER + 0 +POLYLINE + 5 +30E4 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +36C9 + 8 +FENSTER + 10 +18740.0 + 20 +22381.306986 + 30 +0.0 + 0 +VERTEX + 5 +36CA + 8 +FENSTER + 10 +19750.0 + 20 +22381.306986 + 30 +0.0 + 0 +SEQEND + 5 +36CB + 8 +FENSTER + 0 +POLYLINE + 5 +30E8 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +36CC + 8 +FENSTER + 10 +19750.0 + 20 +22261.364123 + 30 +0.0 + 0 +VERTEX + 5 +36CD + 8 +FENSTER + 10 +19750.0 + 20 +22085.0 + 30 +0.0 + 0 +SEQEND + 5 +36CE + 8 +FENSTER + 0 +POLYLINE + 5 +30EC + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +36CF + 8 +FENSTER + 10 +18740.0 + 20 +22095.0 + 30 +0.0 + 0 +VERTEX + 5 +36D0 + 8 +FENSTER + 10 +18740.0 + 20 +22260.16654 + 30 +0.0 + 0 +SEQEND + 5 +36D1 + 8 +FENSTER + 0 +POLYLINE + 5 +30F0 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +36D2 + 8 +FENSTER + 10 +15865.0 + 20 +22381.251394 + 30 +0.0 + 0 +VERTEX + 5 +36D3 + 8 +FENSTER + 10 +16880.0 + 20 +22381.251394 + 30 +0.0 + 0 +SEQEND + 5 +36D4 + 8 +FENSTER + 0 +POLYLINE + 5 +30F4 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +36D5 + 8 +FENSTER + 10 +16875.0 + 20 +22253.739829 + 30 +0.0 + 0 +VERTEX + 5 +36D6 + 8 +FENSTER + 10 +16875.0 + 20 +22090.0 + 30 +0.0 + 0 +SEQEND + 5 +36D7 + 8 +FENSTER + 0 +POLYLINE + 5 +30F8 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +36D8 + 8 +FENSTER + 10 +15865.0 + 20 +22243.287727 + 30 +0.0 + 0 +VERTEX + 5 +36D9 + 8 +FENSTER + 10 +15865.0 + 20 +22080.0 + 30 +0.0 + 0 +SEQEND + 5 +36DA + 8 +FENSTER + 0 +POLYLINE + 5 +30FC + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +36DB + 8 +FENSTER + 10 +10240.0 + 20 +22381.250977 + 30 +0.0 + 0 +VERTEX + 5 +36DC + 8 +FENSTER + 10 +11250.0 + 20 +22381.250977 + 30 +0.0 + 0 +SEQEND + 5 +36DD + 8 +FENSTER + 0 +POLYLINE + 5 +3100 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +36DE + 8 +FENSTER + 10 +11250.025952 + 20 +22080.0 + 30 +0.0 + 0 +VERTEX + 5 +36DF + 8 +FENSTER + 10 +11250.0 + 20 +22247.225609 + 30 +0.0 + 0 +SEQEND + 5 +36E0 + 8 +FENSTER + 0 +POLYLINE + 5 +3104 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +36E1 + 8 +FENSTER + 10 +10240.0 + 20 +22080.0 + 30 +0.0 + 0 +VERTEX + 5 +36E2 + 8 +FENSTER + 10 +10240.0 + 20 +22243.476199 + 30 +0.0 + 0 +SEQEND + 5 +36E3 + 8 +FENSTER + 0 +POLYLINE + 5 +3108 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +36E4 + 8 +FENSTER + 10 +8500.0 + 20 +22252.650614 + 30 +0.0 + 0 +VERTEX + 5 +36E5 + 8 +FENSTER + 10 +8500.0 + 20 +22090.0 + 30 +0.0 + 0 +SEQEND + 5 +36E6 + 8 +FENSTER + 0 +POLYLINE + 5 +310C + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +36E7 + 8 +FENSTER + 10 +6740.0 + 20 +22243.580917 + 30 +0.0 + 0 +VERTEX + 5 +36E8 + 8 +FENSTER + 10 +6740.0 + 20 +22085.0 + 30 +0.0 + 0 +SEQEND + 5 +36E9 + 8 +FENSTER + 0 +POLYLINE + 5 +3110 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +36EA + 8 +FENSTER + 10 +4867.826474 + 20 +19363.745737 + 30 +0.0 + 0 +VERTEX + 5 +36EB + 8 +FENSTER + 10 +4932.844101 + 20 +19363.745737 + 30 +0.0 + 0 +SEQEND + 5 +36EC + 8 +FENSTER + 0 +POLYLINE + 5 +3114 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +36ED + 8 +MAUERWERK + 10 +21365.0 + 20 +15625.0 + 30 +0.0 + 0 +VERTEX + 5 +36EE + 8 +MAUERWERK + 10 +21365.0 + 20 +15990.0 + 30 +0.0 + 0 +VERTEX + 5 +36EF + 8 +MAUERWERK + 10 +17990.0 + 20 +15990.0 + 30 +0.0 + 0 +VERTEX + 5 +36F0 + 8 +MAUERWERK + 10 +17990.0 + 20 +18988.024968 + 30 +0.0 + 0 +SEQEND + 5 +36F1 + 8 +MAUERWERK + 0 +POLYLINE + 5 +311A + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +36F2 + 8 +MAUERWERK + 10 +17625.0 + 20 +18992.018547 + 30 +0.0 + 0 +VERTEX + 5 +36F3 + 8 +MAUERWERK + 10 +17625.0 + 20 +15990.0 + 30 +0.0 + 0 +VERTEX + 5 +36F4 + 8 +MAUERWERK + 10 +17375.0 + 20 +15990.0 + 30 +0.0 + 0 +VERTEX + 5 +36F5 + 8 +MAUERWERK + 10 +17375.0 + 20 +15625.0 + 30 +0.0 + 0 +VERTEX + 5 +36F6 + 8 +MAUERWERK + 10 +20875.0 + 20 +15625.0 + 30 +0.0 + 0 +VERTEX + 5 +36F7 + 8 +MAUERWERK + 10 +20875.0 + 20 +15250.0 + 30 +0.0 + 0 +VERTEX + 5 +36F8 + 8 +MAUERWERK + 10 +21240.0 + 20 +15250.0 + 30 +0.0 + 0 +VERTEX + 5 +36F9 + 8 +MAUERWERK + 10 +21240.0 + 20 +15625.0 + 30 +0.0 + 0 +VERTEX + 5 +36FA + 8 +MAUERWERK + 10 +21365.0 + 20 +15625.0 + 30 +0.0 + 0 +SEQEND + 5 +36FB + 8 +MAUERWERK + 0 +POLYLINE + 5 +3125 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +36FC + 8 +MAUERWERK + 10 +18740.0 + 20 +21750.0 + 30 +0.0 + 0 +VERTEX + 5 +36FD + 8 +MAUERWERK + 10 +18740.0 + 20 +22115.0 + 30 +0.0 + 0 +VERTEX + 5 +36FE + 8 +MAUERWERK + 10 +16875.0 + 20 +22115.0 + 30 +0.0 + 0 +VERTEX + 5 +36FF + 8 +MAUERWERK + 10 +16875.0 + 20 +21750.0 + 30 +0.0 + 0 +VERTEX + 5 +3700 + 8 +MAUERWERK + 10 +17625.0 + 20 +21750.0 + 30 +0.0 + 0 +VERTEX + 5 +3701 + 8 +MAUERWERK + 10 +17625.0 + 20 +18990.0 + 30 +0.0 + 0 +SEQEND + 5 +3702 + 8 +MAUERWERK + 0 +POLYLINE + 5 +312D + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +3703 + 8 +MAUERWERK + 10 +17990.0 + 20 +18990.0 + 30 +0.0 + 0 +VERTEX + 5 +3704 + 8 +MAUERWERK + 10 +17990.0 + 20 +21750.0 + 30 +0.0 + 0 +VERTEX + 5 +3705 + 8 +MAUERWERK + 10 +18740.0 + 20 +21750.0 + 30 +0.0 + 0 +SEQEND + 5 +3706 + 8 +MAUERWERK + 0 +POLYLINE + 5 +3132 + 8 +SCHORNSTEINE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3707 + 8 +SCHORNSTEINE + 10 +17875.0 + 20 +18865.0 + 30 +0.0 + 0 +VERTEX + 5 +3708 + 8 +SCHORNSTEINE + 10 +17740.0 + 20 +18865.0 + 30 +0.0 + 0 +VERTEX + 5 +3709 + 8 +SCHORNSTEINE + 10 +17740.0 + 20 +18730.0 + 30 +0.0 + 0 +VERTEX + 5 +370A + 8 +SCHORNSTEINE + 10 +17875.0 + 20 +18730.0 + 30 +0.0 + 0 +SEQEND + 5 +370B + 8 +SCHORNSTEINE + 0 +POLYLINE + 5 +3138 + 8 +SCHORNSTEINE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +370C + 8 +SCHORNSTEINE + 10 +17875.0 + 20 +18615.0 + 30 +0.0 + 0 +VERTEX + 5 +370D + 8 +SCHORNSTEINE + 10 +17740.0 + 20 +18615.0 + 30 +0.0 + 0 +VERTEX + 5 +370E + 8 +SCHORNSTEINE + 10 +17740.0 + 20 +18480.0 + 30 +0.0 + 0 +VERTEX + 5 +370F + 8 +SCHORNSTEINE + 10 +17875.0 + 20 +18480.0 + 30 +0.0 + 0 +SEQEND + 5 +3710 + 8 +SCHORNSTEINE + 0 +POLYLINE + 5 +313E + 8 +SCHORNSTEINE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3711 + 8 +SCHORNSTEINE + 10 +17875.0 + 20 +18240.0 + 30 +0.0 + 0 +VERTEX + 5 +3712 + 8 +SCHORNSTEINE + 10 +17740.0 + 20 +18240.0 + 30 +0.0 + 0 +VERTEX + 5 +3713 + 8 +SCHORNSTEINE + 10 +17740.0 + 20 +18105.0 + 30 +0.0 + 0 +VERTEX + 5 +3714 + 8 +SCHORNSTEINE + 10 +17875.0 + 20 +18105.0 + 30 +0.0 + 0 +SEQEND + 5 +3715 + 8 +SCHORNSTEINE + 0 +POLYLINE + 5 +3144 + 8 +SCHORNSTEINE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3716 + 8 +SCHORNSTEINE + 10 +17875.0 + 20 +17990.0 + 30 +0.0 + 0 +VERTEX + 5 +3717 + 8 +SCHORNSTEINE + 10 +17740.0 + 20 +17990.0 + 30 +0.0 + 0 +VERTEX + 5 +3718 + 8 +SCHORNSTEINE + 10 +17740.0 + 20 +17855.0 + 30 +0.0 + 0 +VERTEX + 5 +3719 + 8 +SCHORNSTEINE + 10 +17875.0 + 20 +17855.0 + 30 +0.0 + 0 +SEQEND + 5 +371A + 8 +SCHORNSTEINE + 0 +POLYLINE + 5 +314A + 8 +SCHORNSTEINE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +371B + 8 +SCHORNSTEINE + 10 +17875.0 + 20 +17740.0 + 30 +0.0 + 0 +VERTEX + 5 +371C + 8 +SCHORNSTEINE + 10 +17740.0 + 20 +17740.0 + 30 +0.0 + 0 +VERTEX + 5 +371D + 8 +SCHORNSTEINE + 10 +17740.0 + 20 +17605.0 + 30 +0.0 + 0 +VERTEX + 5 +371E + 8 +SCHORNSTEINE + 10 +17875.0 + 20 +17605.0 + 30 +0.0 + 0 +SEQEND + 5 +371F + 8 +SCHORNSTEINE + 0 +INSERT + 5 +3150 + 8 +SCHRAFFUR-MAUER + 2 +*X0 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +2000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +3151 + 8 +SCHRAFFUR-MAUER + 2 +*X1 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +2000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +3152 + 8 +SCHRAFFUR-MAUER + 2 +*X2 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +2000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +3153 + 8 +SCHRAFFUR-MAUER + 2 +*X3 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +2000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +3154 + 8 +SCHRAFFUR-MAUER + 2 +*X4 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +2000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +3155 + 8 +SCHRAFFUR-MAUER + 2 +*X5 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +2000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +3156 + 8 +SCHRAFFUR-MAUER + 2 +*X6 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +2000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +3157 + 8 +SCHRAFFUR-MAUER + 2 +*X7 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +2000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +3158 + 8 +SCHRAFFUR-MAUER + 2 +*X8 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +2000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +3159 + 8 +SCHRAFFUR-MAUER + 2 +*X9 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +2000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +315A + 8 +SCHRAFFUR-MAUER + 2 +*X10 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +2000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +315B + 8 +SCHRAFFUR-MAUER + 2 +*X11 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +2000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +315C + 8 +SCHRAFFUR-MAUER + 2 +*X12 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +2000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +315D + 8 +SCHRAFFUR-MAUER + 2 +*X13 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +2000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +315E + 8 +SCHRAFFUR-MAUER + 2 +*X14 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +2000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +315F + 8 +SCHRAFFUR-VORMAUER + 2 +*X15 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +1000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +3160 + 8 +SCHRAFFUR-VORMAUER + 2 +*X16 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +1000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +3161 + 8 +SCHRAFFUR-VORMAUER + 2 +*X17 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +1000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +3162 + 8 +SCHRAFFUR-VORMAUER + 2 +*X18 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +1000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +3163 + 8 +SCHRAFFUR-VORMAUER + 2 +*X19 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +1000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +3164 + 8 +SCHRAFFUR-VORMAUER + 2 +*X20 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +1000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +3165 + 8 +SCHRAFFUR-VORMAUER + 2 +*X21 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +1000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +3166 + 8 +SCHRAFFUR-VORMAUER + 2 +*X22 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +1000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +3167 + 8 +SCHRAFFUR-VORMAUER + 2 +*X23 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +1000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +3168 + 8 +SCHRAFFUR-VORMAUER + 2 +*X24 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +1000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +3169 + 8 +SCHRAFFUR-VORMAUER + 2 +*X25 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +1000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +316A + 8 +SCHRAFFUR-VORMAUER + 2 +*X26 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +1000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +316B + 8 +SCHRAFFUR-VORMAUER + 2 +*X27 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +1000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +316C + 8 +SCHRAFFUR-VORMAUER + 2 +*X28 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +1000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +316D + 8 +SCHRAFFUR-VORMAUER + 2 +*X29 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +1000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +316E + 8 +SCHRAFFUR-TRENNWAND + 2 +*X30 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI37,I +1040 +1000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +316F + 8 +SCHRAFFUR-TRENNWAND + 2 +*X31 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI37,I +1040 +1000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +3170 + 8 +SCHRAFFUR-TRENNWAND + 2 +*X32 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI37,I +1040 +1000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +3171 + 8 +SCHRAFFUR-TRENNWAND + 2 +*X33 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI37,I +1040 +1000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +3172 + 8 +SCHRAFFUR-TRENNWAND + 2 +*X34 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI37,I +1040 +1000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +3173 + 8 +SCHRAFFUR-TRENNWAND + 2 +*X35 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI37,I +1040 +1000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +3174 + 8 +SCHRAFFUR-TRENNWAND + 2 +*X36 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI37,I +1040 +1000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +3175 + 8 +SCHRAFFUR-TRENNWAND + 2 +*X37 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI37,I +1040 +1000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +3176 + 8 +SCHRAFFUR-TRENNWAND + 2 +*X38 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI37,I +1040 +1000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +3177 + 8 +SCHRAFFUR-DAEMMUNG + 2 +*X39 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +HONEY,I +1040 +200.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +3178 + 8 +SCHRAFFUR-DAEMMUNG + 2 +*X40 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +HONEY,I +1040 +200.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +3179 + 8 +SCHRAFFUR-DAEMMUNG + 2 +*X41 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +HONEY,I +1040 +200.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +317A + 8 +SCHRAFFUR-DAEMMUNG + 2 +*X42 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +HONEY,I +1040 +200.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +317B + 8 +SCHRAFFUR-DAEMMUNG + 2 +*X43 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +HONEY,I +1040 +200.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +317C + 8 +SCHRAFFUR-DAEMMUNG + 2 +*X44 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +HONEY,I +1040 +200.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +317D + 8 +SCHRAFFUR-DAEMMUNG + 2 +*X45 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +HONEY,I +1040 +200.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +317E + 8 +SCHRAFFUR-DAEMMUNG + 2 +*X46 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +HONEY,I +1040 +200.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +317F + 8 +SCHRAFFUR-DAEMMUNG + 2 +*X47 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +HONEY,I +1040 +200.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +3180 + 8 +SCHRAFFUR-DAEMMUNG + 2 +*X48 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +HONEY,I +1040 +200.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +3181 + 8 +SCHRAFFUR-DAEMMUNG + 2 +*X49 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +HONEY,I +1040 +200.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +3182 + 8 +SCHRAFFUR-DAEMMUNG + 2 +*X50 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +HONEY,I +1040 +200.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +3183 + 8 +SCHRAFFUR-DAEMMUNG + 2 +*X51 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +HONEY,I +1040 +200.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +3184 + 8 +SCHRAFFUR-DAEMMUNG + 2 +*X52 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +HONEY,I +1040 +200.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +3185 + 8 +SCHRAFFUR-DAEMMUNG + 2 +*X53 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +HONEY,I +1040 +200.0 +1040 +0.0 +1002 +} + 0 +POLYLINE + 5 +3186 + 8 +TREPPE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3720 + 8 +TREPPE + 10 +19380.0 + 20 +10855.0 + 30 +0.0 + 0 +VERTEX + 5 +3721 + 8 +TREPPE + 10 +19380.0 + 20 +13865.0 + 30 +0.0 + 0 +VERTEX + 5 +3722 + 8 +TREPPE + 10 +18040.0 + 20 +13865.0 + 30 +0.0 + 0 +VERTEX + 5 +3723 + 8 +TREPPE + 10 +18040.0 + 20 +10855.0 + 30 +0.0 + 0 +SEQEND + 5 +3724 + 8 +TREPPE + 0 +POLYLINE + 5 +318C + 8 +TREPPE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3725 + 8 +TREPPE + 10 +20825.0 + 20 +11156.0 + 30 +0.0 + 0 +VERTEX + 5 +3726 + 8 +TREPPE + 10 +19485.0 + 20 +11156.0 + 30 +0.0 + 0 +SEQEND + 5 +3727 + 8 +TREPPE + 0 +POLYLINE + 5 +3190 + 8 +TREPPE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3728 + 8 +TREPPE + 10 +19380.0 + 20 +11156.0 + 30 +0.0 + 0 +VERTEX + 5 +3729 + 8 +TREPPE + 10 +18040.0 + 20 +11156.0 + 30 +0.0 + 0 +SEQEND + 5 +372A + 8 +TREPPE + 0 +POLYLINE + 5 +3194 + 8 +TREPPE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +372B + 8 +TREPPE + 10 +19380.0 + 20 +11457.0 + 30 +0.0 + 0 +VERTEX + 5 +372C + 8 +TREPPE + 10 +18040.0 + 20 +11457.0 + 30 +0.0 + 0 +SEQEND + 5 +372D + 8 +TREPPE + 0 +POLYLINE + 5 +3198 + 8 +TREPPE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +372E + 8 +TREPPE + 10 +19380.0 + 20 +11758.0 + 30 +0.0 + 0 +VERTEX + 5 +372F + 8 +TREPPE + 10 +18040.0 + 20 +11758.0 + 30 +0.0 + 0 +SEQEND + 5 +3730 + 8 +TREPPE + 0 +POLYLINE + 5 +319C + 8 +TREPPE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3731 + 8 +TREPPE + 10 +19380.0 + 20 +12059.0 + 30 +0.0 + 0 +VERTEX + 5 +3732 + 8 +TREPPE + 10 +18040.0 + 20 +12059.0 + 30 +0.0 + 0 +SEQEND + 5 +3733 + 8 +TREPPE + 0 +POLYLINE + 5 +31A0 + 8 +TREPPE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3734 + 8 +TREPPE + 10 +19380.0 + 20 +12360.0 + 30 +0.0 + 0 +VERTEX + 5 +3735 + 8 +TREPPE + 10 +18040.0 + 20 +12360.0 + 30 +0.0 + 0 +SEQEND + 5 +3736 + 8 +TREPPE + 0 +POLYLINE + 5 +31A4 + 8 +TREPPE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +3737 + 8 +TREPPE + 10 +19380.0 + 20 +12661.0 + 30 +0.0 + 0 +VERTEX + 5 +3738 + 8 +TREPPE + 10 +18040.0 + 20 +12661.0 + 30 +0.0 + 0 +SEQEND + 5 +3739 + 8 +TREPPE + 0 +POLYLINE + 5 +31A8 + 8 +TREPPE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +373A + 8 +TREPPE + 10 +20825.0 + 20 +11457.0 + 30 +0.0 + 0 +VERTEX + 5 +373B + 8 +TREPPE + 10 +19485.0 + 20 +11457.0 + 30 +0.0 + 0 +SEQEND + 5 +373C + 8 +TREPPE + 0 +POLYLINE + 5 +31AC + 8 +TREPPE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +373D + 8 +TREPPE + 10 +19380.0 + 20 +12962.0 + 30 +0.0 + 0 +VERTEX + 5 +373E + 8 +TREPPE + 10 +18040.0 + 20 +12962.0 + 30 +0.0 + 0 +SEQEND + 5 +373F + 8 +TREPPE + 0 +POLYLINE + 5 +31B0 + 8 +TREPPE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +3740 + 8 +TREPPE + 10 +19380.0 + 20 +13263.0 + 30 +0.0 + 0 +VERTEX + 5 +3741 + 8 +TREPPE + 10 +18040.0 + 20 +13263.0 + 30 +0.0 + 0 +SEQEND + 5 +3742 + 8 +TREPPE + 0 +POLYLINE + 5 +31B4 + 8 +TREPPE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +3743 + 8 +TREPPE + 10 +19380.0 + 20 +13564.0 + 30 +0.0 + 0 +VERTEX + 5 +3744 + 8 +TREPPE + 10 +18040.0 + 20 +13564.0 + 30 +0.0 + 0 +SEQEND + 5 +3745 + 8 +TREPPE + 0 +POLYLINE + 5 +31B8 + 8 +TREPPE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3746 + 8 +TREPPE + 10 +20825.0 + 20 +13263.0 + 30 +0.0 + 0 +VERTEX + 5 +3747 + 8 +TREPPE + 10 +19485.0 + 20 +13263.0 + 30 +0.0 + 0 +SEQEND + 5 +3748 + 8 +TREPPE + 0 +POLYLINE + 5 +31BC + 8 +TREPPE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3749 + 8 +TREPPE + 10 +20825.0 + 20 +13564.0 + 30 +0.0 + 0 +VERTEX + 5 +374A + 8 +TREPPE + 10 +19485.0 + 20 +13564.0 + 30 +0.0 + 0 +SEQEND + 5 +374B + 8 +TREPPE + 0 +POLYLINE + 5 +31C0 + 8 +TREPPE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +374C + 8 +TREPPE + 10 +20826.354686 + 20 +12971.134203 + 30 +0.0 + 0 +VERTEX + 5 +374D + 8 +TREPPE + 10 +19481.657999 + 20 +11626.391689 + 30 +0.0 + 0 +SEQEND + 5 +374E + 8 +TREPPE + 0 +POLYLINE + 5 +31C4 + 8 +TREPPE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +374F + 8 +TREPPE + 10 +20827.970522 + 20 +12912.986847 + 30 +0.0 + 0 +VERTEX + 5 +3750 + 8 +TREPPE + 10 +19482.88825 + 20 +11567.710208 + 30 +0.0 + 0 +SEQEND + 5 +3751 + 8 +TREPPE + 0 +POLYLINE + 5 +31C8 + 8 +TREPPE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3752 + 8 +TREPPE + 10 +20825.0 + 20 +11758.0 + 30 +0.0 + 0 +VERTEX + 5 +3753 + 8 +TREPPE + 10 +19673.0 + 20 +11758.0 + 30 +0.0 + 0 +SEQEND + 5 +3754 + 8 +TREPPE + 0 +POLYLINE + 5 +31CC + 8 +TREPPE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3755 + 8 +TREPPE + 10 +19613.0 + 20 +11758.0 + 30 +0.0 + 0 +VERTEX + 5 +3756 + 8 +TREPPE + 10 +19485.0 + 20 +11758.0 + 30 +0.0 + 0 +SEQEND + 5 +3757 + 8 +TREPPE + 0 +POLYLINE + 5 +31D0 + 8 +TREPPE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3758 + 8 +TREPPE + 10 +20825.0 + 20 +12059.0 + 30 +0.0 + 0 +VERTEX + 5 +3759 + 8 +TREPPE + 10 +19974.0 + 20 +12059.0 + 30 +0.0 + 0 +SEQEND + 5 +375A + 8 +TREPPE + 0 +POLYLINE + 5 +31D4 + 8 +TREPPE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +375B + 8 +TREPPE + 10 +19914.0 + 20 +12059.0 + 30 +0.0 + 0 +VERTEX + 5 +375C + 8 +TREPPE + 10 +19485.0 + 20 +12059.0 + 30 +0.0 + 0 +SEQEND + 5 +375D + 8 +TREPPE + 0 +POLYLINE + 5 +31D8 + 8 +TREPPE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +375E + 8 +TREPPE + 10 +20825.0 + 20 +12360.0 + 30 +0.0 + 0 +VERTEX + 5 +375F + 8 +TREPPE + 10 +20275.0 + 20 +12360.0 + 30 +0.0 + 0 +SEQEND + 5 +3760 + 8 +TREPPE + 0 +POLYLINE + 5 +31DC + 8 +TREPPE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3761 + 8 +TREPPE + 10 +20215.0 + 20 +12360.0 + 30 +0.0 + 0 +VERTEX + 5 +3762 + 8 +TREPPE + 10 +19485.0 + 20 +12360.0 + 30 +0.0 + 0 +SEQEND + 5 +3763 + 8 +TREPPE + 0 +POLYLINE + 5 +31E0 + 8 +TREPPE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3764 + 8 +TREPPE + 10 +20825.0 + 20 +12661.0 + 30 +0.0 + 0 +VERTEX + 5 +3765 + 8 +TREPPE + 10 +20576.0 + 20 +12661.0 + 30 +0.0 + 0 +SEQEND + 5 +3766 + 8 +TREPPE + 0 +POLYLINE + 5 +31E4 + 8 +TREPPE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3767 + 8 +TREPPE + 10 +20516.0 + 20 +12661.0 + 30 +0.0 + 0 +VERTEX + 5 +3768 + 8 +TREPPE + 10 +19485.0 + 20 +12661.0 + 30 +0.0 + 0 +SEQEND + 5 +3769 + 8 +TREPPE + 0 +POLYLINE + 5 +31E8 + 8 +TREPPE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +376A + 8 +TREPPE + 10 +20825.0 + 20 +10855.0 + 30 +0.0 + 0 +VERTEX + 5 +376B + 8 +TREPPE + 10 +20825.0 + 20 +12910.0 + 30 +0.0 + 0 +SEQEND + 5 +376C + 8 +TREPPE + 0 +POLYLINE + 5 +31EC + 8 +TREPPE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +376D + 8 +TREPPE + 10 +20817.0 + 20 +12962.0 + 30 +0.0 + 0 +VERTEX + 5 +376E + 8 +TREPPE + 10 +19485.0 + 20 +12962.0 + 30 +0.0 + 0 +SEQEND + 5 +376F + 8 +TREPPE + 0 +POLYLINE + 5 +31F0 + 8 +TREPPE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3770 + 8 +TREPPE + 10 +20825.0 + 20 +12970.0 + 30 +0.0 + 0 +VERTEX + 5 +3771 + 8 +TREPPE + 10 +20825.0 + 20 +13865.0 + 30 +0.0 + 0 +VERTEX + 5 +3772 + 8 +TREPPE + 10 +19485.0 + 20 +13865.0 + 30 +0.0 + 0 +VERTEX + 5 +3773 + 8 +TREPPE + 10 +19485.0 + 20 +11629.733805 + 30 +0.0 + 0 +SEQEND + 5 +3774 + 8 +TREPPE + 0 +POLYLINE + 5 +31F6 + 8 +TREPPE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3775 + 8 +TREPPE + 10 +19485.0 + 20 +11569.822263 + 30 +0.0 + 0 +VERTEX + 5 +3776 + 8 +TREPPE + 10 +19485.0 + 20 +10855.0 + 30 +0.0 + 0 +VERTEX + 5 +3777 + 8 +TREPPE + 10 +20825.0 + 20 +10855.0 + 30 +0.0 + 0 +SEQEND + 5 +3778 + 8 +TREPPE + 0 +POLYLINE + 5 +31FB + 8 +TREPPE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +3779 + 8 +TREPPE + 10 +19372.305199 + 20 +10854.832899 + 30 +0.0 + 0 +VERTEX + 5 +377A + 8 +TREPPE + 10 +19495.0 + 20 +10854.832899 + 30 +0.0 + 0 +SEQEND + 5 +377B + 8 +TREPPE + 0 +POLYLINE + 5 +31FF + 8 +TREPPE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +377C + 8 +TREPPE + 10 +20155.0 + 20 +13865.0 + 30 +0.0 + 0 +VERTEX + 5 +377D + 8 +TREPPE + 10 +20155.0 + 20 +10510.0 + 30 +0.0 + 0 +VERTEX + 5 +377E + 8 +TREPPE + 10 +18710.0 + 20 +10510.0 + 30 +0.0 + 0 +VERTEX + 5 +377F + 8 +TREPPE + 10 +18710.0 + 20 +13865.0 + 30 +0.0 + 0 +SEQEND + 5 +3780 + 8 +TREPPE + 0 +SOLID + 5 +3205 + 8 +TREPPE + 10 +18710.0 + 20 +13870.0 + 30 +0.0 + 11 +18780.0 + 21 +13520.0 + 31 +0.0 + 12 +18640.0 + 22 +13520.0 + 32 +0.0 + 13 +18640.0 + 23 +13520.0 + 33 +0.0 + 0 +POINT + 5 +3206 + 8 +TREPPE + 10 +20155.0 + 20 +13870.0 + 30 +0.0 + 0 +POINT + 5 +3207 + 8 +TREPPE + 10 +20155.0 + 20 +13860.0 + 30 +0.0 + 0 +POINT + 5 +3208 + 8 +TREPPE + 10 +20155.0 + 20 +13865.0 + 30 +0.0 + 0 +POINT + 5 +3209 + 8 +TREPPE + 10 +20150.0 + 20 +13865.0 + 30 +0.0 + 0 +POINT + 5 +320A + 8 +TREPPE + 10 +20155.0 + 20 +13865.0 + 30 +0.0 + 0 +POINT + 5 +320B + 8 +TREPPE + 10 +20180.0 + 20 +13880.0 + 30 +0.0 + 0 +POINT + 5 +320C + 8 +TREPPE + 10 +20150.0 + 20 +13895.0 + 30 +0.0 + 0 +POINT + 5 +320D + 8 +TREPPE + 10 +20145.0 + 20 +13890.0 + 30 +0.0 + 0 +POINT + 5 +320E + 8 +TREPPE + 10 +20125.0 + 20 +13870.0 + 30 +0.0 + 0 +POLYLINE + 5 +320F + 8 +BALKONE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +3781 + 8 +BALKONE + 10 +5850.0 + 20 +8995.0 + 30 +0.0 + 0 +VERTEX + 5 +3782 + 8 +BALKONE + 10 +5850.0 + 20 +7645.0 + 30 +0.0 + 0 +VERTEX + 5 +3783 + 8 +BALKONE + 10 +8850.0 + 20 +7645.0 + 30 +0.0 + 0 +VERTEX + 5 +3784 + 8 +BALKONE + 10 +8850.0 + 20 +8995.0 + 30 +0.0 + 0 +SEQEND + 5 +3785 + 8 +BALKONE + 0 +POLYLINE + 5 +3215 + 8 +BALKONE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +3786 + 8 +BALKONE + 10 +26040.0 + 20 +8995.0 + 30 +0.0 + 0 +VERTEX + 5 +3787 + 8 +BALKONE + 10 +26040.0 + 20 +7645.0 + 30 +0.0 + 0 +VERTEX + 5 +3788 + 8 +BALKONE + 10 +23040.0 + 20 +7645.0 + 30 +0.0 + 0 +VERTEX + 5 +3789 + 8 +BALKONE + 10 +23040.0 + 20 +8995.0 + 30 +0.0 + 0 +SEQEND + 5 +378A + 8 +BALKONE + 0 +POLYLINE + 5 +321B + 8 +SCHNITTLINIEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +378B + 8 +SCHNITTLINIEN + 10 +23600.0 + 20 +6650.0 + 30 +0.0 + 0 +VERTEX + 5 +378C + 8 +SCHNITTLINIEN + 10 +23600.0 + 20 +13455.0 + 30 +0.0 + 0 +VERTEX + 5 +378D + 8 +SCHNITTLINIEN + 10 +21435.0 + 20 +13455.0 + 30 +0.0 + 0 +VERTEX + 5 +378E + 8 +SCHNITTLINIEN + 10 +21510.0 + 20 +23300.0 + 30 +0.0 + 0 +SEQEND + 5 +378F + 8 +SCHNITTLINIEN + 0 +POLYLINE + 5 +3221 + 8 +SCHNITTLINIEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +3790 + 8 +SCHNITTLINIEN + 10 +19720.0 + 20 +7250.0 + 30 +0.0 + 0 +VERTEX + 5 +3791 + 8 +SCHNITTLINIEN + 10 +19720.0 + 20 +15150.0 + 30 +0.0 + 0 +SEQEND + 5 +3792 + 8 +SCHNITTLINIEN + 0 +POLYLINE + 5 +3225 + 8 +SCHNITTLINIEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +3793 + 8 +SCHNITTLINIEN + 10 +5600.0 + 20 +6615.0 + 30 +0.0 + 0 +VERTEX + 5 +3794 + 8 +SCHNITTLINIEN + 10 +5600.0 + 20 +23830.0 + 30 +0.0 + 0 +SEQEND + 5 +3795 + 8 +SCHNITTLINIEN + 0 +SOLID + 5 +3229 + 8 +SCHNITTLINIEN + 10 +19135.0 + 20 +14835.0 + 30 +0.0 + 11 +19475.0 + 21 +14540.0 + 31 +0.0 + 12 +19475.0 + 22 +15130.0 + 32 +0.0 + 13 +19475.0 + 23 +15130.0 + 33 +0.0 + 0 +SOLID + 5 +322A + 8 +SCHNITTLINIEN + 10 +19135.0 + 20 +7600.0 + 30 +0.0 + 11 +19475.0 + 21 +7305.0 + 31 +0.0 + 12 +19475.0 + 22 +7895.0 + 32 +0.0 + 13 +19475.0 + 23 +7895.0 + 33 +0.0 + 0 +SOLID + 5 +322B + 8 +SCHNITTLINIEN + 10 +24245.0 + 20 +6990.0 + 30 +0.0 + 11 +23905.0 + 21 +7285.0 + 31 +0.0 + 12 +23905.0 + 22 +6695.0 + 32 +0.0 + 13 +23905.0 + 23 +6695.0 + 33 +0.0 + 0 +SOLID + 5 +322C + 8 +SCHNITTLINIEN + 10 +22060.0 + 20 +22925.0 + 30 +0.0 + 11 +21720.0 + 21 +23220.0 + 31 +0.0 + 12 +21720.0 + 22 +22630.0 + 32 +0.0 + 13 +21720.0 + 23 +22630.0 + 33 +0.0 + 0 +SOLID + 5 +322D + 8 +SCHNITTLINIEN + 10 +6285.0 + 20 +6940.0 + 30 +0.0 + 11 +5945.0 + 21 +7235.0 + 31 +0.0 + 12 +5945.0 + 22 +6645.0 + 32 +0.0 + 13 +5945.0 + 23 +6645.0 + 33 +0.0 + 0 +SOLID + 5 +322E + 8 +SCHNITTLINIEN + 10 +6285.0 + 20 +23535.0 + 30 +0.0 + 11 +5945.0 + 21 +23830.0 + 31 +0.0 + 12 +5945.0 + 22 +23240.0 + 32 +0.0 + 13 +5945.0 + 23 +23240.0 + 33 +0.0 + 0 +POLYLINE + 5 +322F + 8 +SPANNRICHTUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3796 + 8 +SPANNRICHTUNG + 10 +18955.0 + 20 +9925.0 + 30 +0.0 + 0 +VERTEX + 5 +3797 + 8 +SPANNRICHTUNG + 10 +18680.0 + 20 +10090.0 + 30 +0.0 + 0 +VERTEX + 5 +3798 + 8 +SPANNRICHTUNG + 10 +19549.211617 + 20 +10090.0 + 30 +0.0 + 0 +VERTEX + 5 +3799 + 8 +SPANNRICHTUNG + 10 +19263.423234 + 20 +10255.0 + 30 +0.0 + 0 +SEQEND + 5 +379A + 8 +SPANNRICHTUNG + 0 +POLYLINE + 5 +3235 + 8 +SPANNRICHTUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +379B + 8 +SPANNRICHTUNG + 10 +7260.0 + 20 +8869.211617 + 30 +0.0 + 0 +VERTEX + 5 +379C + 8 +SPANNRICHTUNG + 10 +7260.0 + 20 +8254.211617 + 30 +0.0 + 0 +VERTEX + 5 +379D + 8 +SPANNRICHTUNG + 10 +7375.0 + 20 +8455.0 + 30 +0.0 + 0 +SEQEND + 5 +379E + 8 +SPANNRICHTUNG + 0 +POLYLINE + 5 +323A + 8 +SPANNRICHTUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +379F + 8 +SPANNRICHTUNG + 10 +24405.0 + 20 +8795.0 + 30 +0.0 + 0 +VERTEX + 5 +37A0 + 8 +SPANNRICHTUNG + 10 +24405.0 + 20 +8290.0 + 30 +0.0 + 0 +VERTEX + 5 +37A1 + 8 +SPANNRICHTUNG + 10 +24525.0 + 20 +8460.788383 + 30 +0.0 + 0 +SEQEND + 5 +37A2 + 8 +SPANNRICHTUNG + 0 +LINE + 5 +323F + 8 +0 + 62 + 0 + 10 +17625.0 + 20 +17278.805922 + 30 +0.0 + 11 +17990.0 + 21 +17643.805922 + 31 +0.0 + 0 +LINE + 5 +3240 + 8 +0 + 62 + 0 + 10 +17625.0 + 20 +17632.359313 + 30 +0.0 + 11 +17847.640687 + 21 +17855.0 + 31 +0.0 + 0 +LINE + 5 +3241 + 8 +0 + 62 + 0 + 10 +17625.0 + 20 +17985.912703 + 30 +0.0 + 11 +17744.087297 + 21 +18105.0 + 31 +0.0 + 0 +LINE + 5 +3242 + 8 +0 + 62 + 0 + 10 +17625.0 + 20 +18339.466094 + 30 +0.0 + 11 +17765.533906 + 21 +18480.0 + 31 +0.0 + 0 +LINE + 5 +3243 + 8 +0 + 62 + 0 + 10 +17625.0 + 20 +18693.019485 + 30 +0.0 + 11 +17740.0 + 21 +18808.019485 + 31 +0.0 + 0 +LINE + 5 +3244 + 8 +0 + 62 + 0 + 10 +17625.0 + 20 +19046.572875 + 30 +0.0 + 11 +17990.0 + 21 +19411.572875 + 31 +0.0 + 0 +LINE + 5 +3245 + 8 +0 + 62 + 0 + 10 +17625.0 + 20 +19400.126266 + 30 +0.0 + 11 +17990.0 + 21 +19765.126266 + 31 +0.0 + 0 +LINE + 5 +3246 + 8 +0 + 62 + 0 + 10 +17625.0 + 20 +19753.679656 + 30 +0.0 + 11 +17990.0 + 21 +20118.679656 + 31 +0.0 + 0 +LINE + 5 +3247 + 8 +0 + 62 + 0 + 10 +17625.0 + 20 +20107.233047 + 30 +0.0 + 11 +17990.0 + 21 +20472.233047 + 31 +0.0 + 0 +LINE + 5 +3248 + 8 +0 + 62 + 0 + 10 +17625.0 + 20 +20460.786438 + 30 +0.0 + 11 +17990.0 + 21 +20825.786438 + 31 +0.0 + 0 +LINE + 5 +3249 + 8 +0 + 62 + 0 + 10 +17625.0 + 20 +20814.339828 + 30 +0.0 + 11 +17990.0 + 21 +21179.339828 + 31 +0.0 + 0 +LINE + 5 +324A + 8 +0 + 62 + 0 + 10 +18560.660172 + 20 +21750.0 + 30 +0.0 + 11 +18740.0 + 21 +21929.339828 + 31 +0.0 + 0 +LINE + 5 +324B + 8 +0 + 62 + 0 + 10 +17625.0 + 20 +21167.893219 + 30 +0.0 + 11 +17990.0 + 21 +21532.893219 + 31 +0.0 + 0 +LINE + 5 +324C + 8 +0 + 62 + 0 + 10 +18207.106781 + 20 +21750.0 + 30 +0.0 + 11 +18572.106781 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +324D + 8 +0 + 62 + 0 + 10 +17625.0 + 20 +21521.446609 + 30 +0.0 + 11 +18218.553391 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +324E + 8 +0 + 62 + 0 + 10 +17500.0 + 20 +21750.0 + 30 +0.0 + 11 +17865.0 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +324F + 8 +0 + 62 + 0 + 10 +17146.446609 + 20 +21750.0 + 30 +0.0 + 11 +17511.446609 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +3250 + 8 +0 + 62 + 0 + 10 +16875.0 + 20 +21832.106781 + 30 +0.0 + 11 +17157.893219 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +3251 + 8 +0 + 62 + 0 + 10 +17625.0 + 20 +16925.252532 + 30 +0.0 + 11 +17990.0 + 21 +17290.252532 + 31 +0.0 + 0 +LINE + 5 +3252 + 8 +0 + 62 + 0 + 10 +17625.0 + 20 +16571.699141 + 30 +0.0 + 11 +17990.0 + 21 +16936.699141 + 31 +0.0 + 0 +LINE + 5 +3253 + 8 +0 + 62 + 0 + 10 +17375.0 + 20 +15968.145751 + 30 +0.0 + 11 +17396.854249 + 21 +15990.0 + 31 +0.0 + 0 +LINE + 5 +3254 + 8 +0 + 62 + 0 + 10 +17625.0 + 20 +16218.145751 + 30 +0.0 + 11 +17990.0 + 21 +16583.145751 + 31 +0.0 + 0 +LINE + 5 +3255 + 8 +0 + 62 + 0 + 10 +17385.40764 + 20 +15625.0 + 30 +0.0 + 11 +17990.0 + 21 +16229.59236 + 31 +0.0 + 0 +LINE + 5 +3256 + 8 +0 + 62 + 0 + 10 +17738.961031 + 20 +15625.0 + 30 +0.0 + 11 +18103.961031 + 21 +15990.0 + 31 +0.0 + 0 +LINE + 5 +3257 + 8 +0 + 62 + 0 + 10 +18092.514421 + 20 +15625.0 + 30 +0.0 + 11 +18457.514421 + 21 +15990.0 + 31 +0.0 + 0 +LINE + 5 +3258 + 8 +0 + 62 + 0 + 10 +18446.067812 + 20 +15625.0 + 30 +0.0 + 11 +18811.067812 + 21 +15990.0 + 31 +0.0 + 0 +LINE + 5 +3259 + 8 +0 + 62 + 0 + 10 +18799.621202 + 20 +15625.0 + 30 +0.0 + 11 +19164.621202 + 21 +15990.0 + 31 +0.0 + 0 +LINE + 5 +325A + 8 +0 + 62 + 0 + 10 +19153.174593 + 20 +15625.0 + 30 +0.0 + 11 +19518.174593 + 21 +15990.0 + 31 +0.0 + 0 +LINE + 5 +325B + 8 +0 + 62 + 0 + 10 +19506.727984 + 20 +15625.0 + 30 +0.0 + 11 +19871.727984 + 21 +15990.0 + 31 +0.0 + 0 +LINE + 5 +325C + 8 +0 + 62 + 0 + 10 +19860.281374 + 20 +15625.0 + 30 +0.0 + 11 +20225.281374 + 21 +15990.0 + 31 +0.0 + 0 +LINE + 5 +325D + 8 +0 + 62 + 0 + 10 +20213.834765 + 20 +15625.0 + 30 +0.0 + 11 +20578.834765 + 21 +15990.0 + 31 +0.0 + 0 +LINE + 5 +325E + 8 +0 + 62 + 0 + 10 +20567.388155 + 20 +15625.0 + 30 +0.0 + 11 +20932.388155 + 21 +15990.0 + 31 +0.0 + 0 +LINE + 5 +325F + 8 +0 + 62 + 0 + 10 +20875.0 + 20 +15579.058454 + 30 +0.0 + 11 +21285.941546 + 21 +15990.0 + 31 +0.0 + 0 +LINE + 5 +3260 + 8 +0 + 62 + 0 + 10 +20899.494937 + 20 +15250.0 + 30 +0.0 + 11 +21240.0 + 21 +15590.505063 + 31 +0.0 + 0 +LINE + 5 +3261 + 8 +0 + 62 + 0 + 10 +21274.494937 + 20 +15625.0 + 30 +0.0 + 11 +21365.0 + 21 +15715.505063 + 31 +0.0 + 0 +LINE + 5 +3262 + 8 +0 + 62 + 0 + 10 +17796.980515 + 20 +18865.0 + 30 +0.0 + 11 +17990.0 + 21 +19058.019485 + 31 +0.0 + 0 +LINE + 5 +3263 + 8 +0 + 62 + 0 + 10 +17875.0 + 20 +18589.466094 + 30 +0.0 + 11 +17990.0 + 21 +18704.466094 + 31 +0.0 + 0 +LINE + 5 +3264 + 8 +0 + 62 + 0 + 10 +17875.0 + 20 +18235.912703 + 30 +0.0 + 11 +17990.0 + 21 +18350.912703 + 31 +0.0 + 0 +LINE + 5 +3265 + 8 +0 + 62 + 0 + 10 +17875.0 + 20 +17882.359313 + 30 +0.0 + 11 +17990.0 + 21 +17997.359313 + 31 +0.0 + 0 +POLYLINE + 5 +3266 + 8 +SCHORNSTEINE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +37A3 + 8 +SCHORNSTEINE + 10 +17875.0 + 20 +18105.0 + 30 +0.0 + 0 +VERTEX + 5 +37A4 + 8 +SCHORNSTEINE + 10 +17740.0 + 20 +18235.0 + 30 +0.0 + 0 +SEQEND + 5 +37A5 + 8 +SCHORNSTEINE + 0 +POLYLINE + 5 +326A + 8 +SCHORNSTEINE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +37A6 + 8 +SCHORNSTEINE + 10 +17740.0 + 20 +18110.0 + 30 +0.0 + 0 +VERTEX + 5 +37A7 + 8 +SCHORNSTEINE + 10 +17870.0 + 20 +18235.0 + 30 +0.0 + 0 +SEQEND + 5 +37A8 + 8 +SCHORNSTEINE + 0 +POLYLINE + 5 +326E + 8 +SCHORNSTEINE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +37A9 + 8 +SCHORNSTEINE + 10 +17875.0 + 20 +18485.0 + 30 +0.0 + 0 +VERTEX + 5 +37AA + 8 +SCHORNSTEINE + 10 +17745.0 + 20 +18610.0 + 30 +0.0 + 0 +SEQEND + 5 +37AB + 8 +SCHORNSTEINE + 0 +POLYLINE + 5 +3272 + 8 +SCHORNSTEINE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +37AC + 8 +SCHORNSTEINE + 10 +17745.0 + 20 +18485.0 + 30 +0.0 + 0 +VERTEX + 5 +37AD + 8 +SCHORNSTEINE + 10 +17875.0 + 20 +18610.0 + 30 +0.0 + 0 +SEQEND + 5 +37AE + 8 +SCHORNSTEINE + 0 +POLYLINE + 5 +3276 + 8 +SCHORNSTEINE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +37AF + 8 +SCHORNSTEINE + 10 +17740.0 + 20 +18865.0 + 30 +0.0 + 0 +VERTEX + 5 +37B0 + 8 +SCHORNSTEINE + 10 +17870.0 + 20 +18735.0 + 30 +0.0 + 0 +SEQEND + 5 +37B1 + 8 +SCHORNSTEINE + 0 +POLYLINE + 5 +327A + 8 +SCHORNSTEINE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +37B2 + 8 +SCHORNSTEINE + 10 +17745.0 + 20 +18735.0 + 30 +0.0 + 0 +VERTEX + 5 +37B3 + 8 +SCHORNSTEINE + 10 +17870.0 + 20 +18860.0 + 30 +0.0 + 0 +SEQEND + 5 +37B4 + 8 +SCHORNSTEINE + 0 +POLYLINE + 5 +327E + 8 +SCHORNSTEINE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +37B5 + 8 +SCHORNSTEINE + 10 +17740.0 + 20 +17990.0 + 30 +0.0 + 0 +VERTEX + 5 +37B6 + 8 +SCHORNSTEINE + 10 +17875.0 + 20 +17855.0 + 30 +0.0 + 0 +SEQEND + 5 +37B7 + 8 +SCHORNSTEINE + 0 +POLYLINE + 5 +3282 + 8 +SCHORNSTEINE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +37B8 + 8 +SCHORNSTEINE + 10 +17740.0 + 20 +17855.0 + 30 +0.0 + 0 +VERTEX + 5 +37B9 + 8 +SCHORNSTEINE + 10 +17875.0 + 20 +17990.0 + 30 +0.0 + 0 +SEQEND + 5 +37BA + 8 +SCHORNSTEINE + 0 +POLYLINE + 5 +3286 + 8 +SCHORNSTEINE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +37BB + 8 +SCHORNSTEINE + 10 +17740.0 + 20 +17605.0 + 30 +0.0 + 0 +VERTEX + 5 +37BC + 8 +SCHORNSTEINE + 10 +17875.0 + 20 +17740.0 + 30 +0.0 + 0 +SEQEND + 5 +37BD + 8 +SCHORNSTEINE + 0 +POLYLINE + 5 +328A + 8 +SCHORNSTEINE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +37BE + 8 +SCHORNSTEINE + 10 +17875.0 + 20 +17605.0 + 30 +0.0 + 0 +VERTEX + 5 +37BF + 8 +SCHORNSTEINE + 10 +17740.0 + 20 +17740.0 + 30 +0.0 + 0 +SEQEND + 5 +37C0 + 8 +SCHORNSTEINE + 0 +TEXT + 5 +328F + 8 +LEGENDE-70 + 10 +19900.0 + 20 +7445.0 + 30 +0.0 + 40 +350.0 + 1 +X + 0 +TEXT + 5 +3290 + 8 +LEGENDE-70 + 10 +19900.0 + 20 +14670.0 + 30 +0.0 + 40 +350.0 + 1 +X + 0 +TEXT + 5 +3291 + 8 +LEGENDE-70 + 10 +24485.0 + 20 +6780.0 + 30 +0.0 + 40 +350.0 + 1 +I + 0 +TEXT + 5 +3292 + 8 +LEGENDE-70 + 10 +22305.0 + 20 +22780.0 + 30 +0.0 + 40 +350.0 + 1 +I + 41 +0.5 + 0 +TEXT + 5 +3293 + 8 +LEGENDE-70 + 10 +6485.0 + 20 +6790.0 + 30 +0.0 + 40 +350.0 + 1 +S-DG + 0 +TEXT + 5 +3294 + 8 +LEGENDE-70 + 10 +6485.0 + 20 +23375.0 + 30 +0.0 + 40 +350.0 + 1 +S-DG + 0 +TEXT + 5 +3295 + 8 +LEGENDE-70 + 10 +7625.0 + 20 +22595.0 + 30 +0.0 + 40 +350.0 + 1 +S1 + 0 +TEXT + 5 +3296 + 8 +LEGENDE-70 + 10 +12955.0 + 20 +22580.0 + 30 +0.0 + 40 +350.0 + 1 +W21 + 0 +TEXT + 5 +3297 + 8 +LEGENDE-70 + 10 +20205.0 + 20 +22580.0 + 30 +0.0 + 40 +350.0 + 1 +W22 + 0 +TEXT + 5 +3298 + 8 +LEGENDE-70 + 10 +23890.0 + 20 +22580.0 + 30 +0.0 + 40 +350.0 + 1 +S2 + 0 +TEXT + 5 +3299 + 8 +LEGENDE-70 + 10 +4415.0 + 20 +20490.0 + 30 +0.0 + 40 +350.0 + 1 +W3 + 50 +90.0 + 0 +TEXT + 5 +329A + 8 +LEGENDE-70 + 10 +4465.0 + 20 +11340.0 + 30 +0.0 + 40 +350.0 + 1 +W4 + 50 +90.0 + 0 +TEXT + 5 +329B + 8 +LEGENDE-70 + 10 +6160.0 + 20 +17445.0 + 30 +0.0 + 40 +350.0 + 1 +W25 + 0 +TEXT + 5 +329C + 8 +LEGENDE-70 + 10 +6250.0 + 20 +14645.0 + 30 +0.0 + 40 +350.0 + 1 +W26 + 0 +TEXT + 5 +329D + 8 +LEGENDE-70 + 10 +9620.0 + 20 +18675.0 + 30 +0.0 + 40 +350.0 + 1 +W8 + 50 +90.0 + 0 +TEXT + 5 +329E + 8 +LEGENDE-70 + 10 +6160.0 + 20 +9930.0 + 30 +0.0 + 40 +350.0 + 1 +W23 + 0 +TEXT + 5 +329F + 8 +LEGENDE-70 + 10 +10605.0 + 20 +12890.0 + 30 +0.0 + 40 +350.0 + 1 +W28 + 0 +TEXT + 5 +32A0 + 8 +LEGENDE-70 + 10 +12015.0 + 20 +9895.0 + 30 +0.0 + 40 +350.0 + 1 +W24 + 0 +TEXT + 5 +32A1 + 8 +LEGENDE-70 + 10 +19000.0 + 20 +8415.0 + 30 +0.0 + 40 +350.0 + 1 +S4 + 0 +TEXT + 5 +32A2 + 8 +LEGENDE-70 + 10 +12440.0 + 20 +15605.0 + 30 +0.0 + 40 +350.0 + 1 +W27 + 0 +TEXT + 5 +32A3 + 8 +LEGENDE-70 + 10 +18965.0 + 20 +16115.0 + 30 +0.0 + 40 +350.0 + 1 +W29 + 0 +TEXT + 5 +32A4 + 8 +LEGENDE-70 + 10 +23160.0 + 20 +16090.0 + 30 +0.0 + 40 +350.0 + 1 +W30 + 0 +TEXT + 5 +32A5 + 8 +LEGENDE-70 + 10 +14705.0 + 20 +18675.0 + 30 +0.0 + 40 +350.0 + 1 +W7 + 50 +90.0 + 0 +TEXT + 5 +32A6 + 8 +LEGENDE-70 + 10 +17480.0 + 20 +18680.0 + 30 +0.0 + 40 +350.0 + 1 +W6 + 50 +90.0 + 0 +TEXT + 5 +32A7 + 8 +LEGENDE-70 + 10 +22355.0 + 20 +19100.0 + 30 +0.0 + 40 +350.0 + 1 +W5 + 50 +90.0 + 0 +TEXT + 5 +32A8 + 8 +LEGENDE-70 + 10 +26130.0 + 20 +19345.0 + 30 +0.0 + 40 +350.0 + 1 +W1 + 50 +90.0 + 0 +TEXT + 5 +32A9 + 8 +LEGENDE-70 + 10 +26060.0 + 20 +12355.0 + 30 +0.0 + 40 +350.0 + 1 +W2 + 50 +90.0 + 0 +TEXT + 5 +32AA + 8 +LEGENDE-70 + 10 +26095.0 + 20 +10705.0 + 30 +0.0 + 40 +350.0 + 1 +S3 + 50 +90.0 + 0 +TEXT + 5 +32AB + 8 +LEGENDE-70 + 10 +21655.0 + 20 +10070.0 + 30 +0.0 + 40 +350.0 + 1 +W29 + 50 +90.0 + 0 +TEXT + 5 +32AC + 8 +LEGENDE-70 + 10 +17500.0 + 20 +9915.0 + 30 +0.0 + 40 +350.0 + 1 +W11 + 50 +90.0 + 0 +TEXT + 5 +32AD + 8 +LEGENDE-70 + 10 +14035.0 + 20 +9905.0 + 30 +0.0 + 40 +350.0 + 1 +W10 + 50 +90.0 + 0 +DIMENSION + 5 +32AE + 8 +BEMASSUNG + 2 +*D87 + 10 +6740.0 + 20 +24615.0 + 30 +0.0 + 11 +5870.0 + 21 +24790.0 + 31 +0.0 + 1 +1.74 + 13 +5000.0 + 23 +22115.0 + 33 +0.0 + 14 +6740.0 + 24 +22115.0 + 34 +0.0 + 0 +DIMENSION + 5 +32AF + 8 +BEMASSUNG + 2 +*D89 + 10 +8500.0 + 20 +24615.0 + 30 +0.0 + 11 +7620.0 + 21 +24790.0 + 31 +0.0 + 1 +1.76 + 13 +6740.0 + 23 +22115.0 + 33 +0.0 + 14 +8500.0 + 24 +22115.0 + 34 +0.0 + 0 +DIMENSION + 5 +32B0 + 8 +BEMASSUNG + 2 +*D86 + 10 +10240.0 + 20 +24615.0 + 30 +0.0 + 11 +9370.0 + 21 +24790.0 + 31 +0.0 + 1 +1.74 + 13 +8500.0 + 23 +22115.0 + 33 +0.0 + 14 +10240.0 + 24 +22115.0 + 34 +0.0 + 0 +DIMENSION + 5 +32B1 + 8 +BEMASSUNG + 2 +*D85 + 10 +11255.0 + 20 +24615.0 + 30 +0.0 + 11 +10747.5 + 21 +24790.0 + 31 +0.0 + 1 +1.01 + 13 +10240.0 + 23 +22115.0 + 33 +0.0 + 14 +11255.0 + 24 +22105.0 + 34 +0.0 + 0 +DIMENSION + 5 +32B2 + 8 +BEMASSUNG + 2 +*D84 + 10 +15860.0 + 20 +24615.0 + 30 +0.0 + 11 +13557.5 + 21 +24790.0 + 31 +0.0 + 1 +4.61 + 13 +11255.0 + 23 +22105.0 + 33 +0.0 + 14 +15860.0 + 24 +22105.0 + 34 +0.0 + 0 +DIMENSION + 5 +32B3 + 8 +BEMASSUNG + 2 +*D83 + 10 +16875.0 + 20 +24615.0 + 30 +0.0 + 11 +16367.5 + 21 +24790.0 + 31 +0.0 + 1 +1.01 + 13 +15860.0 + 23 +22105.0 + 33 +0.0 + 14 +16875.0 + 24 +22105.0 + 34 +0.0 + 0 +DIMENSION + 5 +32B4 + 8 +BEMASSUNG + 2 +*D82 + 10 +18735.0 + 20 +24615.0 + 30 +0.0 + 11 +17805.0 + 21 +24790.0 + 31 +0.0 + 1 +1.86 + 13 +16875.0 + 23 +22105.0 + 33 +0.0 + 14 +18735.0 + 24 +22105.0 + 34 +0.0 + 0 +DIMENSION + 5 +32B5 + 8 +BEMASSUNG + 2 +*D81 + 10 +19750.0 + 20 +24615.0 + 30 +0.0 + 11 +19242.5 + 21 +24790.0 + 31 +0.0 + 1 +1.01 + 13 +18735.0 + 23 +22105.0 + 33 +0.0 + 14 +19750.0 + 24 +22115.0 + 34 +0.0 + 0 +DIMENSION + 5 +32B6 + 8 +BEMASSUNG + 2 +*D80 + 10 +23365.0 + 20 +24615.0 + 30 +0.0 + 11 +21557.5 + 21 +24790.0 + 31 +0.0 + 1 +3.61 + 13 +19750.0 + 23 +22115.0 + 33 +0.0 + 14 +23365.0 + 24 +22115.0 + 34 +0.0 + 0 +DIMENSION + 5 +32B7 + 8 +BEMASSUNG + 2 +*D88 + 10 +25250.0 + 20 +24615.0 + 30 +0.0 + 11 +24307.5 + 21 +24790.0 + 31 +0.0 + 1 +1.88 + 13 +23365.0 + 23 +22115.0 + 33 +0.0 + 14 +25250.0 + 24 +22115.0 + 34 +0.0 + 0 +DIMENSION + 5 +32B8 + 8 +BEMASSUNG + 2 +*D79 + 10 +26740.0 + 20 +24615.0 + 30 +0.0 + 11 +25995.0 + 21 +24790.0 + 31 +0.0 + 1 +1.49 + 13 +25250.0 + 23 +22115.0 + 33 +0.0 + 14 +26740.0 + 24 +22115.0 + 34 +0.0 + 0 +DIMENSION + 5 +32B9 + 8 +BEMASSUNG + 2 +*D69 + 10 +5365.0 + 20 +25315.0 + 30 +0.0 + 11 +5182.5 + 21 +25490.0 + 31 +0.0 + 1 +36 + 13 +5000.0 + 23 +22115.0 + 33 +0.0 + 14 +5365.0 + 24 +22115.0 + 34 +0.0 + 0 +DIMENSION + 5 +32BA + 8 +BEMASSUNG + 2 +*D68 + 10 +9750.0 + 20 +25315.0 + 30 +0.0 + 11 +7557.5 + 21 +25490.0 + 31 +0.0 + 1 +4.38 + 13 +5365.0 + 23 +22115.0 + 33 +0.0 + 14 +9750.0 + 24 +21740.0 + 34 +0.0 + 0 +DIMENSION + 5 +32BB + 8 +BEMASSUNG + 2 +*D71 + 10 +10110.0 + 20 +25315.0 + 30 +0.0 + 11 +9930.0 + 21 +25490.0 + 31 +0.0 + 1 +36 + 13 +9750.0 + 23 +21740.0 + 33 +0.0 + 14 +10110.0 + 24 +21745.0 + 34 +0.0 + 0 +DIMENSION + 5 +32BC + 8 +BEMASSUNG + 2 +*D70 + 10 +14875.0 + 20 +25315.0 + 30 +0.0 + 11 +12492.5 + 21 +25490.0 + 31 +0.0 + 1 +4.76 + 13 +10110.0 + 23 +21745.0 + 33 +0.0 + 14 +14875.0 + 24 +21735.0 + 34 +0.0 + 0 +DIMENSION + 5 +32BD + 8 +BEMASSUNG + 2 +*D72 + 10 +15240.0 + 20 +25315.0 + 30 +0.0 + 11 +15057.5 + 21 +25490.0 + 31 +0.0 + 1 +36 + 13 +14875.0 + 23 +21735.0 + 33 +0.0 + 14 +15240.0 + 24 +21750.0 + 34 +0.0 + 0 +DIMENSION + 5 +32BE + 8 +BEMASSUNG + 2 +*D73 + 10 +17615.0 + 20 +25315.0 + 30 +0.0 + 11 +16427.5 + 21 +25490.0 + 31 +0.0 + 1 +2.38 + 13 +15240.0 + 23 +21750.0 + 33 +0.0 + 14 +17615.0 + 24 +21735.0 + 34 +0.0 + 0 +DIMENSION + 5 +32BF + 8 +BEMASSUNG + 2 +*D74 + 10 +17995.0 + 20 +25315.0 + 30 +0.0 + 11 +17805.0 + 21 +25490.0 + 31 +0.0 + 1 +36 + 13 +17615.0 + 23 +21735.0 + 33 +0.0 + 14 +17995.0 + 24 +21745.0 + 34 +0.0 + 0 +DIMENSION + 5 +32C0 + 8 +BEMASSUNG + 2 +*D75 + 10 +22500.0 + 20 +25315.0 + 30 +0.0 + 11 +20247.5 + 21 +25490.0 + 31 +0.0 + 1 +4.51 + 13 +17995.0 + 23 +21745.0 + 33 +0.0 + 14 +22500.0 + 24 +21750.0 + 34 +0.0 + 0 +DIMENSION + 5 +32C1 + 8 +BEMASSUNG + 2 +*D76 + 10 +22865.0 + 20 +25315.0 + 30 +0.0 + 11 +22682.5 + 21 +25490.0 + 31 +0.0 + 1 +36 + 13 +22500.0 + 23 +21750.0 + 33 +0.0 + 14 +22865.0 + 24 +21750.0 + 34 +0.0 + 0 +DIMENSION + 5 +32C2 + 8 +BEMASSUNG + 2 +*D77 + 10 +26370.0 + 20 +25315.0 + 30 +0.0 + 11 +24617.5 + 21 +25490.0 + 31 +0.0 + 1 +3.51 + 13 +22865.0 + 23 +21750.0 + 33 +0.0 + 14 +26370.0 + 24 +21740.0 + 34 +0.0 + 0 +DIMENSION + 5 +32C3 + 8 +BEMASSUNG + 2 +*D78 + 10 +26740.0 + 20 +25315.0 + 30 +0.0 + 11 +26555.0 + 21 +25490.0 + 31 +0.0 + 1 +36 + 13 +26370.0 + 23 +21740.0 + 33 +0.0 + 14 +26740.0 + 24 +22000.0 + 34 +0.0 + 0 +DIMENSION + 5 +32C4 + 8 +BEMASSUNG + 2 +*D67 + 10 +26740.0 + 20 +26015.0 + 30 +0.0 + 11 +15870.0 + 21 +26190.0 + 31 +0.0 + 1 +21.74 + 13 +5000.0 + 23 +22115.0 + 33 +0.0 + 14 +26740.0 + 24 +22115.0 + 34 +0.0 + 0 +DIMENSION + 5 +32C5 + 8 +BEMASSUNG + 2 +*D63 + 10 +3500.0 + 20 +14615.0 + 30 +0.0 + 11 +3325.0 + 21 +11932.5 + 31 +0.0 + 1 +5.36 + 13 +5000.0 + 23 +9250.0 + 33 +0.0 + 14 +5000.0 + 24 +14615.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +32C6 + 8 +BEMASSUNG + 2 +*D59 + 10 +3500.0 + 20 +16125.0 + 30 +0.0 + 11 +3325.0 + 21 +15370.0 + 31 +0.0 + 1 +1.51 + 13 +5000.0 + 23 +14615.0 + 33 +0.0 + 14 +5000.0 + 24 +16125.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +32C7 + 8 +BEMASSUNG + 2 +*D60 + 10 +3500.0 + 20 +18240.0 + 30 +0.0 + 11 +3325.0 + 21 +17182.5 + 31 +0.0 + 1 +2.11 + 13 +5000.0 + 23 +16125.0 + 33 +0.0 + 14 +5000.0 + 24 +18240.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +32C8 + 8 +BEMASSUNG + 2 +*D61 + 10 +3500.0 + 20 +19375.0 + 30 +0.0 + 11 +3325.0 + 21 +18807.5 + 31 +0.0 + 1 +1.13 + 13 +5000.0 + 23 +18240.0 + 33 +0.0 + 14 +5000.0 + 24 +19375.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +32C9 + 8 +BEMASSUNG + 2 +*D62 + 10 +3500.0 + 20 +22115.0 + 30 +0.0 + 11 +3325.0 + 21 +20745.0 + 31 +0.0 + 1 +2.74 + 13 +5000.0 + 23 +19375.0 + 33 +0.0 + 14 +5000.0 + 24 +22115.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +32CA + 8 +BEMASSUNG + 2 +*D64 + 10 +8115.0 + 20 +18105.0 + 30 +0.0 + 11 +6740.0 + 21 +18280.0 + 31 +0.0 + 1 +2.75 + 13 +5365.0 + 23 +17255.0 + 33 +0.0 + 14 +8115.0 + 24 +17255.0 + 34 +0.0 + 0 +DIMENSION + 5 +32CB + 8 +BEMASSUNG + 2 +*D65 + 10 +9005.0 + 20 +18105.0 + 30 +0.0 + 11 +8560.0 + 21 +18280.0 + 31 +0.0 + 1 +88 + 13 +8115.0 + 23 +17255.0 + 33 +0.0 + 14 +9005.0 + 24 +17185.0 + 34 +0.0 + 0 +DIMENSION + 5 +32CC + 8 +BEMASSUNG + 2 +*D66 + 10 +9750.0 + 20 +18105.0 + 30 +0.0 + 11 +9377.5 + 21 +18280.0 + 31 +0.0 + 1 +75 + 13 +9005.0 + 23 +17185.0 + 33 +0.0 + 14 +9750.0 + 24 +18100.0 + 34 +0.0 + 0 +DIMENSION + 5 +32CD + 8 +BEMASSUNG + 2 +*D57 + 10 +7620.0 + 20 +16165.0 + 30 +0.0 + 11 +6495.0 + 21 +16340.0 + 31 +0.0 + 1 +2.25 + 13 +5370.0 + 23 +16875.0 + 33 +0.0 + 14 +7620.0 + 24 +16875.0 + 34 +0.0 + 0 +DIMENSION + 5 +32CE + 8 +BEMASSUNG + 2 +*D58 + 10 +7740.0 + 20 +16165.0 + 30 +0.0 + 11 +7829.5 + 21 +16340.0 + 31 +0.0 + 1 +12 + 13 +7620.0 + 23 +16875.0 + 33 +0.0 + 14 +7740.0 + 24 +16195.0 + 34 +0.0 + 0 +DIMENSION + 5 +32CF + 8 +BEMASSUNG + 2 +*D55 + 10 +12615.0 + 20 +11975.0 + 30 +0.0 + 11 +11180.0 + 21 +12150.0 + 31 +0.0 + 1 +2.87 + 13 +9745.0 + 23 +12370.0 + 33 +0.0 + 14 +12615.0 + 24 +12370.0 + 34 +0.0 + 0 +DIMENSION + 5 +32D0 + 8 +BEMASSUNG + 2 +*D146 + 10 +13880.0 + 20 +11975.0 + 30 +0.0 + 11 +13025.0 + 21 +12150.0 + 31 +0.0 + 70 + 128 + 1 +1.26 + 13 +12615.0 + 23 +12370.0 + 33 +0.0 + 14 +13880.0 + 24 +11955.0 + 34 +0.0 + 0 +DIMENSION + 5 +32D1 + 8 +BEMASSUNG + 2 +*D56 + 10 +14120.0 + 20 +11975.0 + 30 +0.0 + 11 +14000.0 + 21 +12150.0 + 31 +0.0 + 1 +25 + 13 +13880.0 + 23 +11955.0 + 33 +0.0 + 14 +14120.0 + 24 +11975.0 + 34 +0.0 + 0 +TEXT + 5 +32D2 + 8 +BEMASSUNG + 10 +26657.241299 + 20 +25517.290813 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 0 +TEXT + 5 +32D3 + 8 +BEMASSUNG + 10 +24515.928885 + 20 +24822.24712 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 0 +TEXT + 5 +32D4 + 8 +BEMASSUNG + 10 +22779.643546 + 20 +25526.273006 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 0 +TEXT + 5 +32D5 + 8 +BEMASSUNG + 10 +17917.639253 + 20 +25547.220539 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 0 +TEXT + 5 +32D6 + 8 +BEMASSUNG + 10 +15161.804721 + 20 +25526.273006 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 0 +TEXT + 5 +32D7 + 8 +BEMASSUNG + 10 +13778.648316 + 20 +24803.584125 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 0 +TEXT + 5 +32D8 + 8 +BEMASSUNG + 10 +17974.943526 + 20 +24816.921717 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 0 +TEXT + 5 +32D9 + 8 +BEMASSUNG + 10 +21747.188324 + 20 +24806.448018 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 0 +TEXT + 5 +32DA + 8 +BEMASSUNG + 10 +13778.648316 + 20 +24814.057823 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 0 +TEXT + 5 +32DB + 8 +BEMASSUNG + 10 +10027.360287 + 20 +25536.746704 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 0 +TEXT + 5 +32DC + 8 +BEMASSUNG + 10 +7772.360287 + 20 +25536.746704 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 0 +TEXT + 5 +32DD + 8 +BEMASSUNG + 10 +5267.360287 + 20 +25536.746704 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 0 +TEXT + 5 +32DE + 8 +BEMASSUNG + 10 +8675.0 + 20 +18331.746704 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 0 +TEXT + 5 +32DF + 8 +BEMASSUNG + 10 +2610.0 + 20 +22030.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 0 +TEXT + 5 +32E0 + 8 +BEMASSUNG + 10 +2610.0 + 20 +17160.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 0 +TEXT + 5 +32E1 + 8 +BEMASSUNG + 10 +3300.0 + 20 +19020.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 0 +TEXT + 5 +32E2 + 8 +BEMASSUNG + 10 +3300.0 + 20 +17365.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 0 +TEXT + 5 +32E3 + 8 +BEMASSUNG + 10 +2610.0 + 20 +14385.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 0 +TEXT + 5 +32E4 + 8 +BEMASSUNG + 10 +3300.0 + 20 +12135.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 0 +DIMENSION + 5 +32E5 + 8 +BEMASSUNG + 2 +*D90 + 10 +2800.0 + 20 +9615.0 + 30 +0.0 + 11 +2625.0 + 21 +9432.5 + 31 +0.0 + 1 +36 + 13 +5000.0 + 23 +9250.0 + 33 +0.0 + 14 +5000.0 + 24 +9615.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +32E6 + 8 +BEMASSUNG + 2 +*D91 + 10 +2800.0 + 20 +14115.0 + 30 +0.0 + 11 +2625.0 + 21 +11865.0 + 31 +0.0 + 1 +4.51 + 13 +5000.0 + 23 +9615.0 + 33 +0.0 + 14 +5365.0 + 24 +14115.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +32E7 + 8 +BEMASSUNG + 2 +*D92 + 10 +2800.0 + 20 +14475.0 + 30 +0.0 + 11 +2625.0 + 21 +14295.0 + 31 +0.0 + 1 +36 + 13 +5365.0 + 23 +14115.0 + 33 +0.0 + 14 +5390.0 + 24 +14475.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +32E8 + 8 +BEMASSUNG + 2 +*D93 + 10 +2800.0 + 20 +16875.0 + 30 +0.0 + 11 +2625.0 + 21 +15675.0 + 31 +0.0 + 1 +2.38 + 13 +5390.0 + 23 +14475.0 + 33 +0.0 + 14 +5365.0 + 24 +16875.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +32E9 + 8 +BEMASSUNG + 2 +*D94 + 10 +2800.0 + 20 +17235.0 + 30 +0.0 + 11 +2625.0 + 21 +17055.0 + 31 +0.0 + 1 +36 + 13 +5365.0 + 23 +16875.0 + 33 +0.0 + 14 +5375.0 + 24 +17235.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +32EA + 8 +BEMASSUNG + 2 +*D95 + 10 +2800.0 + 20 +21750.0 + 30 +0.0 + 11 +2625.0 + 21 +19492.5 + 31 +0.0 + 1 +4.51 + 13 +5375.0 + 23 +17235.0 + 33 +0.0 + 14 +5355.0 + 24 +21750.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +32EB + 8 +BEMASSUNG + 2 +*D96 + 10 +2800.0 + 20 +22120.0 + 30 +0.0 + 11 +2625.0 + 21 +21935.0 + 31 +0.0 + 1 +36 + 13 +5355.0 + 23 +21750.0 + 33 +0.0 + 14 +5345.0 + 24 +22120.0 + 34 +0.0 + 50 +90.0 + 0 +TEXT + 5 +32EC + 8 +BEMASSUNG + 10 +2610.0 + 20 +15890.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 0 +TEXT + 5 +32ED + 8 +BEMASSUNG + 10 +2610.0 + 20 +9525.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 0 +DIMENSION + 5 +32EE + 8 +BEMASSUNG + 2 +*D97 + 10 +13530.0 + 20 +18105.0 + 30 +0.0 + 11 +11825.0 + 21 +18280.0 + 31 +0.0 + 1 +3.41 + 13 +10120.0 + 23 +17375.0 + 33 +0.0 + 14 +13530.0 + 24 +17375.0 + 34 +0.0 + 0 +DIMENSION + 5 +32EF + 8 +BEMASSUNG + 2 +*D201 + 10 +14560.0 + 20 +18105.0 + 30 +0.0 + 11 +14120.0 + 21 +18280.0 + 31 +0.0 + 70 + 128 + 1 +88 + 13 +13530.0 + 23 +17375.0 + 33 +0.0 + 14 +14560.0 + 24 +17375.0 + 34 +0.0 + 0 +DIMENSION + 5 +32F0 + 8 +BEMASSUNG + 2 +*D98 + 10 +14885.0 + 20 +18105.0 + 30 +0.0 + 11 +14722.5 + 21 +18280.0 + 31 +0.0 + 1 +32 + 13 +14560.0 + 23 +17375.0 + 33 +0.0 + 14 +14885.0 + 24 +17395.0 + 34 +0.0 + 0 +DIMENSION + 5 +32F1 + 8 +BEMASSUNG + 2 +*D99 + 10 +15990.0 + 20 +18110.0 + 30 +0.0 + 11 +15612.5 + 21 +18285.0 + 31 +0.0 + 1 +75 + 13 +15235.0 + 23 +17380.0 + 33 +0.0 + 14 +15990.0 + 24 +17380.0 + 34 +0.0 + 0 +DIMENSION + 5 +32F2 + 8 +BEMASSUNG + 2 +*D100 + 10 +16870.0 + 20 +18110.0 + 30 +0.0 + 11 +16430.0 + 21 +18285.0 + 31 +0.0 + 1 +88 + 13 +15990.0 + 23 +17380.0 + 33 +0.0 + 14 +16870.0 + 24 +17370.0 + 34 +0.0 + 0 +DIMENSION + 5 +32F3 + 8 +BEMASSUNG + 2 +*D101 + 10 +17625.0 + 20 +18110.0 + 30 +0.0 + 11 +17247.5 + 21 +18285.0 + 31 +0.0 + 1 +75 + 13 +16870.0 + 23 +17370.0 + 33 +0.0 + 14 +17625.0 + 24 +17380.0 + 34 +0.0 + 0 +DIMENSION + 5 +32F4 + 8 +BEMASSUNG + 2 +*D102 + 10 +21360.0 + 20 +16810.0 + 30 +0.0 + 11 +19672.5 + 21 +16985.0 + 31 +0.0 + 1 +3.37 + 13 +17985.0 + 23 +16005.0 + 33 +0.0 + 14 +21360.0 + 24 +16005.0 + 34 +0.0 + 0 +DIMENSION + 5 +32F5 + 8 +BEMASSUNG + 2 +*D103 + 10 +22255.0 + 20 +16810.0 + 30 +0.0 + 11 +21807.5 + 21 +16985.0 + 31 +0.0 + 1 +88 + 13 +21360.0 + 23 +16005.0 + 33 +0.0 + 14 +22255.0 + 24 +15975.0 + 34 +0.0 + 0 +DIMENSION + 5 +32F6 + 8 +BEMASSUNG + 2 +*D104 + 10 +22510.0 + 20 +16810.0 + 30 +0.0 + 11 +22382.5 + 21 +16985.0 + 31 +0.0 + 1 +25 + 13 +22255.0 + 23 +15975.0 + 33 +0.0 + 14 +22510.0 + 24 +16010.0 + 34 +0.0 + 0 +TEXT + 5 +32F7 + 8 +BEMASSUNG + 10 +19890.0 + 20 +17015.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +32F8 + 8 +BEMASSUNG + 10 +21950.0 + 20 +17015.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +32F9 + 8 +BEMASSUNG + 10 +16570.0 + 20 +18305.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +32FA + 8 +BEMASSUNG + 10 +14250.0 + 20 +18305.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +DIMENSION + 5 +32FB + 8 +BEMASSUNG + 2 +*D105 + 10 +24520.0 + 20 +16245.0 + 30 +0.0 + 11 +24345.0 + 21 +16115.0 + 31 +0.0 + 1 +25 + 13 +22865.0 + 23 +15985.0 + 33 +0.0 + 14 +22865.0 + 24 +16245.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +32FC + 8 +BEMASSUNG + 2 +*D106 + 10 +24520.0 + 20 +17130.0 + 30 +0.0 + 11 +24345.0 + 21 +16687.5 + 31 +0.0 + 1 +88 + 13 +22865.0 + 23 +16245.0 + 33 +0.0 + 14 +22845.0 + 24 +17130.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +32FD + 8 +BEMASSUNG + 2 +*D107 + 10 +24520.0 + 20 +21740.0 + 30 +0.0 + 11 +24345.0 + 21 +19435.0 + 31 +0.0 + 1 +4.62 + 13 +22845.0 + 23 +17130.0 + 33 +0.0 + 14 +23355.0 + 24 +21740.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +32FE + 8 +BEMASSUNG + 2 +*D108 + 10 +28240.0 + 20 +10360.0 + 30 +0.0 + 11 +28065.0 + 21 +9807.5 + 31 +0.0 + 1 +1.11 + 13 +26740.0 + 23 +9255.0 + 33 +0.0 + 14 +26740.0 + 24 +10360.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +32FF + 8 +BEMASSUNG + 2 +*D109 + 10 +28240.0 + 20 +12010.0 + 30 +0.0 + 11 +28065.0 + 21 +11185.0 + 31 +0.0 + 1 +1.63 + 13 +26740.0 + 23 +10360.0 + 33 +0.0 + 14 +26730.0 + 24 +12010.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +3300 + 8 +BEMASSUNG + 2 +*D110 + 10 +28240.0 + 20 +17730.0 + 30 +0.0 + 11 +28065.0 + 21 +14870.0 + 31 +0.0 + 1 +5.74 + 13 +26730.0 + 23 +12010.0 + 33 +0.0 + 14 +26725.0 + 24 +17730.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +3301 + 8 +BEMASSUNG + 2 +*D111 + 10 +28240.0 + 20 +18385.0 + 30 +0.0 + 11 +28065.0 + 21 +18057.5 + 31 +0.0 + 1 +63 + 13 +26725.0 + 23 +17730.0 + 33 +0.0 + 14 +26720.0 + 24 +18385.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +3302 + 8 +BEMASSUNG + 2 +*D112 + 10 +28240.0 + 20 +22115.0 + 30 +0.0 + 11 +28065.0 + 21 +20250.0 + 31 +0.0 + 1 +3.74 + 13 +26720.0 + 23 +18385.0 + 33 +0.0 + 14 +26725.0 + 24 +22115.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +3303 + 8 +BEMASSUNG + 2 +*D113 + 10 +28940.0 + 20 +9615.0 + 30 +0.0 + 11 +28765.0 + 21 +9435.0 + 31 +0.0 + 1 +36 + 13 +26685.0 + 23 +9255.0 + 33 +0.0 + 14 +26685.0 + 24 +9615.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +3304 + 8 +BEMASSUNG + 2 +*D114 + 10 +28940.0 + 20 +15625.0 + 30 +0.0 + 11 +28765.0 + 21 +12620.0 + 31 +0.0 + 1 +6.01 + 13 +26685.0 + 23 +9615.0 + 33 +0.0 + 14 +26365.0 + 24 +15625.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +3305 + 8 +BEMASSUNG + 2 +*D115 + 10 +28940.0 + 20 +15995.0 + 30 +0.0 + 11 +28765.0 + 21 +15810.0 + 31 +0.0 + 1 +36 + 13 +26365.0 + 23 +15625.0 + 33 +0.0 + 14 +26365.0 + 24 +15995.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +3306 + 8 +BEMASSUNG + 2 +*D116 + 10 +28940.0 + 20 +21745.0 + 30 +0.0 + 11 +28765.0 + 21 +18870.0 + 31 +0.0 + 1 +5.76 + 13 +26365.0 + 23 +15995.0 + 33 +0.0 + 14 +26370.0 + 24 +21745.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +3307 + 8 +BEMASSUNG + 2 +*D117 + 10 +28940.0 + 20 +22115.0 + 30 +0.0 + 11 +28765.0 + 21 +21930.0 + 31 +0.0 + 1 +36 + 13 +26370.0 + 23 +21745.0 + 33 +0.0 + 14 +26380.0 + 24 +22115.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +3308 + 8 +BEMASSUNG + 2 +*D118 + 10 +29640.0 + 20 +22115.0 + 30 +0.0 + 11 +29465.0 + 21 +15685.0 + 31 +0.0 + 1 +12.86 + 13 +26720.0 + 23 +9255.0 + 33 +0.0 + 14 +26720.0 + 24 +22115.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +3309 + 8 +BEMASSUNG + 2 +*D119 + 10 +24520.0 + 20 +15240.0 + 30 +0.0 + 11 +24345.0 + 21 +15432.5 + 31 +0.0 + 1 +40 + 13 +22975.0 + 23 +15625.0 + 33 +0.0 + 14 +22975.0 + 24 +15240.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +330A + 8 +BEMASSUNG + 2 +*D120 + 10 +24520.0 + 20 +14360.0 + 30 +0.0 + 11 +24345.0 + 21 +14800.0 + 31 +0.0 + 1 +88 + 13 +22975.0 + 23 +15240.0 + 33 +0.0 + 14 +22960.0 + 24 +14360.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +330B + 8 +BEMASSUNG + 2 +*D121 + 10 +24520.0 + 20 +9625.0 + 30 +0.0 + 11 +24345.0 + 21 +11992.5 + 31 +0.0 + 1 +4.72 + 13 +22960.0 + 23 +14360.0 + 33 +0.0 + 14 +24375.0 + 24 +9625.0 + 34 +0.0 + 50 +90.0 + 0 +TEXT + 5 +330C + 8 +BEMASSUNG + 10 +24345.0 + 20 +12215.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +330D + 8 +BEMASSUNG + 10 +24345.0 + 20 +14955.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +330E + 8 +BEMASSUNG + 10 +28045.0 + 20 +11410.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +330F + 8 +BEMASSUNG + 10 +28045.0 + 20 +9975.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3310 + 8 +BEMASSUNG + 10 +28735.0 + 20 +9520.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3311 + 8 +BEMASSUNG + 10 +29445.0 + 20 +15915.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3312 + 8 +BEMASSUNG + 10 +28740.0 + 20 +15895.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3313 + 8 +BEMASSUNG + 10 +28045.0 + 20 +18230.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3314 + 8 +BEMASSUNG + 10 +28735.0 + 20 +22015.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3315 + 8 +BEMASSUNG + 10 +24345.0 + 20 +16845.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3316 + 8 +BEMASSUNG + 10 +24345.0 + 20 +19675.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 0 +DIMENSION + 5 +3317 + 8 +BEMASSUNG + 2 +*D128 + 10 +8415.0 + 20 +15585.0 + 30 +0.0 + 11 +8240.0 + 21 +15037.5 + 31 +0.0 + 1 +1.10 + 13 +7730.0 + 23 +14490.0 + 33 +0.0 + 14 +7730.0 + 24 +15585.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +3318 + 8 +BEMASSUNG + 2 +*D127 + 10 +8415.0 + 20 +16490.0 + 30 +0.0 + 11 +8240.0 + 21 +16037.5 + 31 +0.0 + 1 +88 + 13 +7730.0 + 23 +15585.0 + 33 +0.0 + 14 +7730.0 + 24 +16490.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +3319 + 8 +BEMASSUNG + 2 +*D126 + 10 +8415.0 + 20 +16880.0 + 30 +0.0 + 11 +8240.0 + 21 +16685.0 + 31 +0.0 + 1 +40 + 13 +7730.0 + 23 +16490.0 + 33 +0.0 + 14 +8115.0 + 24 +16880.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +331A + 8 +BEMASSUNG + 2 +*D131 + 10 +8405.0 + 20 +19980.0 + 30 +0.0 + 11 +8230.0 + 21 +18622.5 + 31 +0.0 + 1 + 2.75 + 13 +9750.0 + 23 +17265.0 + 33 +0.0 + 14 +9750.0 + 24 +19980.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +331B + 8 +BEMASSUNG + 2 +*D129 + 10 +8405.0 + 20 +20875.0 + 30 +0.0 + 11 +8230.0 + 21 +20427.5 + 31 +0.0 + 1 +88 + 13 +9750.0 + 23 +19980.0 + 33 +0.0 + 14 +9755.0 + 24 +20875.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +331C + 8 +BEMASSUNG + 2 +*D130 + 10 +8405.0 + 20 +21750.0 + 30 +0.0 + 11 +8230.0 + 21 +21312.5 + 31 +0.0 + 1 +87 + 13 +9755.0 + 23 +20875.0 + 33 +0.0 + 14 +9740.0 + 24 +21750.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +331D + 8 +BEMASSUNG + 2 +*D122 + 10 +13890.0 + 20 +17375.0 + 30 +0.0 + 11 +13715.0 + 21 +17464.5 + 31 +0.0 + 1 +12 + 13 +14555.0 + 23 +17245.0 + 33 +0.0 + 14 +14555.0 + 24 +17375.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +331E + 8 +BEMASSUNG + 2 +*D123 + 10 +13890.0 + 20 +21750.0 + 30 +0.0 + 11 +13715.0 + 21 +19562.5 + 31 +0.0 + 1 +4.37 + 13 +14555.0 + 23 +17375.0 + 33 +0.0 + 14 +13890.0 + 24 +21750.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +331F + 8 +BEMASSUNG + 2 +*D124 + 10 +10725.0 + 20 +15740.0 + 30 +0.0 + 11 +10550.0 + 21 +15612.5 + 31 +0.0 + 1 +25 + 13 +10130.0 + 23 +15485.0 + 33 +0.0 + 14 +10130.0 + 24 +15740.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +3320 + 8 +BEMASSUNG + 2 +*D135 + 10 +10725.0 + 20 +16625.0 + 30 +0.0 + 11 +10550.0 + 21 +15980.0 + 31 +0.0 + 70 + 128 + 1 +88 + 13 +10130.0 + 23 +15740.0 + 33 +0.0 + 14 +10115.0 + 24 +16625.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +3321 + 8 +BEMASSUNG + 2 +*D125 + 10 +10725.0 + 20 +17255.0 + 30 +0.0 + 11 +10550.0 + 21 +16940.0 + 31 +0.0 + 1 +62 + 13 +10115.0 + 23 +16625.0 + 33 +0.0 + 14 +10715.0 + 24 +17255.0 + 34 +0.0 + 50 +90.0 + 0 +TEXT + 5 +3322 + 8 +BEMASSUNG + 10 +8098.253296 + 20 +20592.360287 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 0 +TEXT + 5 +3323 + 8 +BEMASSUNG + 10 +8098.253296 + 20 +21482.360287 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 0 +TEXT + 5 +3324 + 8 +BEMASSUNG + 10 +8220.0 + 20 +16167.360287 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 0 +TEXT + 5 +3325 + 8 +BEMASSUNG + 10 +13693.253296 + 20 +19837.360287 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 0 +TEXT + 5 +3326 + 8 +BEMASSUNG + 10 +13693.253296 + 20 +17622.360287 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 0 +TEXT + 5 +3327 + 8 +BEMASSUNG + 10 +10515.0 + 20 +16120.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 0 +TEXT + 5 +3328 + 8 +BEMASSUNG + 10 +10528.253296 + 20 +17087.360287 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 0 +TEXT + 5 +3329 + 8 +BEMASSUNG + 10 +7950.0 + 20 +16366.746704 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 0 +DIMENSION + 5 +332A + 8 +BEMASSUNG + 2 +*D136 + 10 +15745.0 + 20 +16480.0 + 30 +0.0 + 11 +12925.0 + 21 +16655.0 + 31 +0.0 + 1 +5.63 + 13 +10105.0 + 23 +15495.0 + 33 +0.0 + 14 +15745.0 + 24 +15495.0 + 34 +0.0 + 0 +DIMENSION + 5 +332B + 8 +BEMASSUNG + 2 +*D132 + 10 +16375.0 + 20 +16480.0 + 30 +0.0 + 11 +16060.0 + 21 +16655.0 + 31 +0.0 + 1 +61 + 13 +15745.0 + 23 +15815.0 + 33 +0.0 + 14 +16375.0 + 24 +15815.0 + 34 +0.0 + 0 +DIMENSION + 5 +332C + 8 +BEMASSUNG + 2 +*D134 + 10 +17385.0 + 20 +16480.0 + 30 +0.0 + 11 +16880.0 + 21 +16655.0 + 31 +0.0 + 1 +1.01 + 13 +16375.0 + 23 +15815.0 + 33 +0.0 + 14 +17385.0 + 24 +15975.0 + 34 +0.0 + 0 +DIMENSION + 5 +332D + 8 +BEMASSUNG + 2 +*D133 + 10 +17635.0 + 20 +16480.0 + 30 +0.0 + 11 +17510.0 + 21 +16655.0 + 31 +0.0 + 1 +25 + 13 +17385.0 + 23 +15975.0 + 33 +0.0 + 14 +17635.0 + 24 +16015.0 + 34 +0.0 + 0 +DIMENSION + 5 +332E + 8 +BEMASSUNG + 2 +*D137 + 10 +18650.0 + 20 +18980.0 + 30 +0.0 + 11 +18475.0 + 21 +20362.5 + 31 +0.0 + 1 +2.76 + 13 +17990.0 + 23 +21745.0 + 33 +0.0 + 14 +17990.0 + 24 +18980.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +332F + 8 +BEMASSUNG + 2 +*D138 + 10 +18650.0 + 20 +17490.0 + 30 +0.0 + 11 +18475.0 + 21 +18235.0 + 31 +0.0 + 1 +1.49 + 13 +17990.0 + 23 +18980.0 + 33 +0.0 + 14 +17990.0 + 24 +17490.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +3330 + 8 +BEMASSUNG + 2 +*D139 + 10 +15005.0 + 20 +15995.0 + 30 +0.0 + 11 +14830.0 + 21 +15740.0 + 31 +0.0 + 1 +50 + 13 +15005.0 + 23 +15485.0 + 33 +0.0 + 14 +15005.0 + 24 +15995.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +3331 + 8 +BEMASSUNG + 2 +*D140 + 10 +15005.0 + 20 +17250.0 + 30 +0.0 + 11 +14830.0 + 21 +16755.0 + 31 +0.0 + 70 + 128 + 1 +1.26 + 13 +15005.0 + 23 +15995.0 + 33 +0.0 + 14 +15010.0 + 24 +17250.0 + 34 +0.0 + 50 +90.0 + 0 +TEXT + 5 +3332 + 8 +BEMASSUNG + 10 +13170.0 + 20 +16685.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3333 + 8 +BEMASSUNG + 10 +16175.0 + 20 +16685.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +DIMENSION + 5 +3334 + 8 +BEMASSUNG + 2 +*D141 + 10 +8745.0 + 20 +12740.0 + 30 +0.0 + 11 +8570.0 + 21 +11175.0 + 31 +0.0 + 1 +3.12 + 13 +9010.0 + 23 +9610.0 + 33 +0.0 + 14 +9010.0 + 24 +12740.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +3335 + 8 +BEMASSUNG + 2 +*D142 + 10 +8745.0 + 20 +12995.0 + 30 +0.0 + 11 +8570.0 + 21 +12867.5 + 31 +0.0 + 1 +25 + 13 +9010.0 + 23 +12740.0 + 33 +0.0 + 14 +9745.0 + 24 +12995.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +3336 + 8 +BEMASSUNG + 2 +*D143 + 10 +8745.0 + 20 +13875.0 + 30 +0.0 + 11 +8570.0 + 21 +13435.0 + 31 +0.0 + 1 +88 + 13 +9745.0 + 23 +12995.0 + 33 +0.0 + 14 +9755.0 + 24 +13875.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +3337 + 8 +BEMASSUNG + 2 +*D144 + 10 +8745.0 + 20 +14130.0 + 30 +0.0 + 11 +8570.0 + 21 +14002.5 + 31 +0.0 + 1 +25 + 13 +9755.0 + 23 +13875.0 + 33 +0.0 + 14 +9735.0 + 24 +14130.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +3338 + 8 +BEMASSUNG + 2 +*D145 + 10 +9745.0 + 20 +13450.0 + 30 +0.0 + 11 +9557.5 + 21 +13625.0 + 31 +0.0 + 1 +37 + 13 +9370.0 + 23 +12745.0 + 33 +0.0 + 14 +9745.0 + 24 +12745.0 + 34 +0.0 + 0 +DIMENSION + 5 +3339 + 8 +BEMASSUNG + 2 +*D147 + 10 +13590.0 + 20 +12375.0 + 30 +0.0 + 11 +13415.0 + 21 +10992.5 + 31 +0.0 + 1 +2.76 + 13 +13775.0 + 23 +9610.0 + 33 +0.0 + 14 +13775.0 + 24 +12375.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +333A + 8 +BEMASSUNG + 2 +*D148 + 10 +13590.0 + 20 +12745.0 + 30 +0.0 + 11 +13415.0 + 21 +12560.0 + 31 +0.0 + 1 +36 + 13 +13775.0 + 23 +12375.0 + 33 +0.0 + 14 +13875.0 + 24 +12745.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +333B + 8 +BEMASSUNG + 2 +*D149 + 10 +13590.0 + 20 +13500.0 + 30 +0.0 + 11 +13415.0 + 21 +13122.5 + 31 +0.0 + 1 +76 + 13 +13880.0 + 23 +12745.0 + 33 +0.0 + 14 +13880.0 + 24 +13500.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +333C + 8 +BEMASSUNG + 2 +*D150 + 10 +13590.0 + 20 +13870.0 + 30 +0.0 + 11 +13415.0 + 21 +13685.0 + 31 +0.0 + 1 +36 + 13 +13880.0 + 23 +13500.0 + 33 +0.0 + 14 +14125.0 + 24 +13870.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +333D + 8 +BEMASSUNG + 2 +*D151 + 10 +14620.0 + 20 +11975.0 + 30 +0.0 + 11 +14709.5 + 21 +12150.0 + 31 +0.0 + 1 +12 + 13 +14485.0 + 23 +13495.0 + 33 +0.0 + 14 +14620.0 + 24 +13495.0 + 34 +0.0 + 0 +DIMENSION + 5 +333E + 8 +BEMASSUNG + 2 +*D165 + 10 +15505.0 + 20 +11975.0 + 30 +0.0 + 11 +15140.0 + 21 +12150.0 + 31 +0.0 + 70 + 128 + 1 +88 + 13 +14620.0 + 23 +13495.0 + 33 +0.0 + 14 +15505.0 + 24 +11975.0 + 34 +0.0 + 0 +DIMENSION + 5 +333F + 8 +BEMASSUNG + 2 +*D152 + 10 +17620.0 + 20 +11975.0 + 30 +0.0 + 11 +16562.5 + 21 +12150.0 + 31 +0.0 + 1 +2.12 + 13 +15505.0 + 23 +11975.0 + 33 +0.0 + 14 +17620.0 + 24 +11975.0 + 34 +0.0 + 0 +TEXT + 5 +3340 + 8 +BEMASSUNG + 10 +11410.0 + 20 +12165.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3341 + 8 +BEMASSUNG + 10 +14815.0 + 20 +12165.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3342 + 8 +BEMASSUNG + 10 +15265.0 + 20 +12165.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3343 + 8 +BEMASSUNG + 10 +16775.0 + 20 +12165.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3344 + 8 +BEMASSUNG + 10 +9660.0 + 20 +13655.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3345 + 8 +BEMASSUNG + 10 +8545.0 + 20 +11432.360287 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 0 +TEXT + 5 +3346 + 8 +BEMASSUNG + 10 +8545.0 + 20 +13587.360287 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 0 +TEXT + 5 +3347 + 8 +BEMASSUNG + 10 +13385.0 + 20 +12657.360287 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 0 +TEXT + 5 +3348 + 8 +BEMASSUNG + 10 +13385.0 + 20 +13777.360287 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 0 +DIMENSION + 5 +3349 + 8 +BEMASSUNG + 2 +*D153 + 10 +16955.0 + 20 +13500.0 + 30 +0.0 + 11 +16780.0 + 21 +11120.0 + 31 +0.0 + 70 + 128 + 1 +3.88 + 13 +17360.0 + 23 +9625.0 + 33 +0.0 + 14 +17360.0 + 24 +13500.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +334A + 8 +BEMASSUNG + 2 +*D154 + 10 +16850.0 + 20 +15490.0 + 30 +0.0 + 11 +16675.0 + 21 +15755.0 + 31 +0.0 + 70 + 128 + 1 +13 + 13 +16120.0 + 23 +15635.0 + 33 +0.0 + 14 +16120.0 + 24 +15490.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +334B + 8 +BEMASSUNG + 2 +*D166 + 10 +16850.0 + 20 +14995.0 + 30 +0.0 + 11 +16675.0 + 21 +15235.0 + 31 +0.0 + 70 + 128 + 1 +12 + 13 +15740.0 + 23 +15120.0 + 33 +0.0 + 14 +16110.0 + 24 +14995.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +334C + 8 +BEMASSUNG + 2 +*D167 + 10 +16850.0 + 20 +13975.0 + 30 +0.0 + 11 +16675.0 + 21 +14595.0 + 31 +0.0 + 70 + 128 + 1 +1.01 + 13 +16110.0 + 23 +14995.0 + 33 +0.0 + 14 +16125.0 + 24 +13975.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +334D + 8 +BEMASSUNG + 2 +*D155 + 10 +16850.0 + 20 +13865.0 + 30 +0.0 + 11 +16675.0 + 21 +14100.0 + 31 +0.0 + 70 + 128 + 1 +12 + 13 +16125.0 + 23 +13975.0 + 33 +0.0 + 14 +16120.0 + 24 +13865.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +334E + 8 +BEMASSUNG + 2 +*D156 + 10 +16105.0 + 20 +14495.0 + 30 +0.0 + 11 +15925.0 + 21 +14670.0 + 31 +0.0 + 1 +36 + 13 +15745.0 + 23 +13980.0 + 33 +0.0 + 14 +16105.0 + 24 +13980.0 + 34 +0.0 + 0 +DIMENSION + 5 +334F + 8 +BEMASSUNG + 2 +*D161 + 10 +21880.0 + 20 +15250.0 + 30 +0.0 + 11 +21705.0 + 21 +15390.0 + 31 +0.0 + 70 + 128 + 1 +37 + 13 +21235.0 + 23 +15635.0 + 33 +0.0 + 14 +21235.0 + 24 +15250.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +3350 + 8 +BEMASSUNG + 2 +*D159 + 10 +21880.0 + 20 +14245.0 + 30 +0.0 + 11 +21705.0 + 21 +14915.0 + 31 +0.0 + 70 + 128 + 1 +1.01 + 13 +21235.0 + 23 +15250.0 + 33 +0.0 + 14 +21225.0 + 24 +14245.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +3351 + 8 +BEMASSUNG + 2 +*D160 + 10 +21880.0 + 20 +14045.0 + 30 +0.0 + 11 +21705.0 + 21 +14390.0 + 31 +0.0 + 70 + 128 + 1 +20 + 13 +21225.0 + 23 +14245.0 + 33 +0.0 + 14 +21560.0 + 24 +14045.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +3352 + 8 +BEMASSUNG + 2 +*D158 + 10 +21880.0 + 20 +13915.0 + 30 +0.0 + 11 +21705.0 + 21 +13715.0 + 31 +0.0 + 70 + 128 + 1 +12 + 13 +21560.0 + 23 +14045.0 + 33 +0.0 + 14 +21565.0 + 24 +13915.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +3353 + 8 +BEMASSUNG + 2 +*D157 + 10 +21880.0 + 20 +9625.0 + 30 +0.0 + 11 +21705.0 + 21 +11770.0 + 31 +0.0 + 1 +4.30 + 13 +21565.0 + 23 +13915.0 + 33 +0.0 + 14 +21855.0 + 24 +9625.0 + 34 +0.0 + 50 +90.0 + 0 +TEXT + 5 +3354 + 8 +BEMASSUNG + 10 +21705.0 + 20 +13820.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3355 + 8 +BEMASSUNG + 10 +21705.0 + 20 +15525.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 0 +DIMENSION + 5 +3356 + 8 +BEMASSUNG + 2 +*D164 + 10 +21565.0 + 20 +12880.0 + 30 +0.0 + 11 +21380.0 + 21 +13055.0 + 31 +0.0 + 70 + 128 + 1 +32 + 13 +21235.0 + 23 +13920.0 + 33 +0.0 + 14 +21565.0 + 24 +13920.0 + 34 +0.0 + 0 +DIMENSION + 5 +3357 + 8 +BEMASSUNG + 2 +*D163 + 10 +22455.0 + 20 +12880.0 + 30 +0.0 + 11 +22140.0 + 21 +13055.0 + 31 +0.0 + 70 + 128 + 1 +88 + 13 +21565.0 + 23 +13920.0 + 33 +0.0 + 14 +22455.0 + 24 +13925.0 + 34 +0.0 + 0 +DIMENSION + 5 +3358 + 8 +BEMASSUNG + 2 +*D162 + 10 +22850.0 + 20 +12880.0 + 30 +0.0 + 11 +22652.5 + 21 +13055.0 + 31 +0.0 + 1 +40 + 13 +22455.0 + 23 +13925.0 + 33 +0.0 + 14 +22850.0 + 24 +12875.0 + 34 +0.0 + 0 +TEXT + 5 +3359 + 8 +BEMASSUNG + 10 +16010.0 + 20 +14710.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +335A + 8 +BEMASSUNG + 10 +22275.0 + 20 +13100.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +335B + 8 +BEMASSUNG + 10 +21475.0 + 20 +13110.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +335C + 8 +BEMASSUNG + 10 +16775.0 + 20 +11355.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +335D + 8 +BEMASSUNG + 10 +16665.0 + 20 +14210.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +335E + 8 +BEMASSUNG + 10 +14785.0 + 20 +14980.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +335F + 8 +BEMASSUNG + 10 +16665.0 + 20 +15355.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3360 + 8 +BEMASSUNG + 10 +16665.0 + 20 +15860.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 0 +DIMENSION + 5 +3361 + 8 +BEMASSUNG + 2 +*D168 + 10 +15005.0 + 20 +15115.0 + 30 +0.0 + 11 +14815.0 + 21 +14875.0 + 31 +0.0 + 70 + 128 + 1 +36 + 13 +15005.0 + 23 +15485.0 + 33 +0.0 + 14 +15005.0 + 24 +15115.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +3362 + 8 +BEMASSUNG + 2 +*D169 + 10 +7735.0 + 20 +6000.0 + 30 +0.0 + 11 +6367.5 + 21 +6175.0 + 31 +0.0 + 1 +2.74 + 13 +5000.0 + 23 +9250.0 + 33 +0.0 + 14 +7735.0 + 24 +9250.0 + 34 +0.0 + 0 +DIMENSION + 5 +3363 + 8 +BEMASSUNG + 2 +*D170 + 10 +8750.0 + 20 +6000.0 + 30 +0.0 + 11 +8242.5 + 21 +6175.0 + 31 +0.0 + 1 +1.01 + 13 +7735.0 + 23 +9250.0 + 33 +0.0 + 14 +8750.0 + 24 +9275.0 + 34 +0.0 + 0 +DIMENSION + 5 +3364 + 8 +BEMASSUNG + 2 +*D171 + 10 +9865.0 + 20 +6000.0 + 30 +0.0 + 11 +9307.5 + 21 +6175.0 + 31 +0.0 + 1 +1.11 + 13 +8750.0 + 23 +9275.0 + 33 +0.0 + 14 +9865.0 + 24 +9460.0 + 34 +0.0 + 0 +DIMENSION + 5 +3365 + 8 +BEMASSUNG + 2 +*D172 + 10 +11240.0 + 20 +6000.0 + 30 +0.0 + 11 +10552.5 + 21 +6175.0 + 31 +0.0 + 1 +1.38 + 13 +9865.0 + 23 +9460.0 + 33 +0.0 + 14 +11240.0 + 24 +9435.0 + 34 +0.0 + 0 +DIMENSION + 5 +3366 + 8 +BEMASSUNG + 2 +*D173 + 10 +16110.0 + 20 +6000.0 + 30 +0.0 + 11 +13675.0 + 21 +6175.0 + 31 +0.0 + 1 +4.86 + 13 +11240.0 + 23 +9435.0 + 33 +0.0 + 14 +16110.0 + 24 +9380.0 + 34 +0.0 + 0 +DIMENSION + 5 +3367 + 8 +BEMASSUNG + 2 +*D174 + 10 +17370.0 + 20 +6000.0 + 30 +0.0 + 11 +16740.0 + 21 +6175.0 + 31 +0.0 + 1 +1.26 + 13 +16110.0 + 23 +9380.0 + 33 +0.0 + 14 +17370.0 + 24 +9460.0 + 34 +0.0 + 0 +DIMENSION + 5 +3368 + 8 +BEMASSUNG + 2 +*D175 + 10 +18495.0 + 20 +6000.0 + 30 +0.0 + 11 +17932.5 + 21 +6175.0 + 31 +0.0 + 1 +1.11 + 13 +17370.0 + 23 +9460.0 + 33 +0.0 + 14 +18495.0 + 24 +9420.0 + 34 +0.0 + 0 +DIMENSION + 5 +3369 + 8 +BEMASSUNG + 2 +*D176 + 10 +20370.0 + 20 +6000.0 + 30 +0.0 + 11 +19432.5 + 21 +6175.0 + 31 +0.0 + 1 +1.88 + 13 +18495.0 + 23 +9420.0 + 33 +0.0 + 14 +20370.0 + 24 +9390.0 + 34 +0.0 + 0 +DIMENSION + 5 +336A + 8 +BEMASSUNG + 2 +*D177 + 10 +21370.0 + 20 +6000.0 + 30 +0.0 + 11 +20870.0 + 21 +6175.0 + 31 +0.0 + 1 +99 + 13 +20370.0 + 23 +9390.0 + 33 +0.0 + 14 +21370.0 + 24 +9355.0 + 34 +0.0 + 0 +DIMENSION + 5 +336B + 8 +BEMASSUNG + 2 +*D178 + 10 +21870.0 + 20 +6000.0 + 30 +0.0 + 11 +21620.0 + 21 +6175.0 + 31 +0.0 + 1 +51 + 13 +21370.0 + 23 +9355.0 + 33 +0.0 + 14 +21870.0 + 24 +9360.0 + 34 +0.0 + 0 +DIMENSION + 5 +336C + 8 +BEMASSUNG + 2 +*D179 + 10 +23240.0 + 20 +6000.0 + 30 +0.0 + 11 +22555.0 + 21 +6175.0 + 31 +0.0 + 1 +1.36 + 13 +21870.0 + 23 +9360.0 + 33 +0.0 + 14 +23240.0 + 24 +9370.0 + 34 +0.0 + 0 +DIMENSION + 5 +336D + 8 +BEMASSUNG + 2 +*D180 + 10 +25375.0 + 20 +6000.0 + 30 +0.0 + 11 +24307.5 + 21 +6175.0 + 31 +0.0 + 1 +2.13 + 13 +23240.0 + 23 +9370.0 + 33 +0.0 + 14 +25375.0 + 24 +9440.0 + 34 +0.0 + 0 +DIMENSION + 5 +336E + 8 +BEMASSUNG + 2 +*D181 + 10 +26740.0 + 20 +6000.0 + 30 +0.0 + 11 +26057.5 + 21 +6175.0 + 31 +0.0 + 1 +1.36 + 13 +25375.0 + 23 +9440.0 + 33 +0.0 + 14 +26740.0 + 24 +9330.0 + 34 +0.0 + 0 +DIMENSION + 5 +336F + 8 +BEMASSUNG + 2 +*D182 + 10 +5365.0 + 20 +5300.0 + 30 +0.0 + 11 +5182.5 + 21 +5475.0 + 31 +0.0 + 1 +36 + 13 +5000.0 + 23 +9250.0 + 33 +0.0 + 14 +5365.0 + 24 +9250.0 + 34 +0.0 + 0 +DIMENSION + 5 +3370 + 8 +BEMASSUNG + 2 +*D183 + 10 +9375.0 + 20 +5300.0 + 30 +0.0 + 11 +7370.0 + 21 +5475.0 + 31 +0.0 + 1 +4.01 + 13 +5365.0 + 23 +9250.0 + 33 +0.0 + 14 +9375.0 + 24 +9645.0 + 34 +0.0 + 0 +DIMENSION + 5 +3371 + 8 +BEMASSUNG + 2 +*D194 + 10 +9750.0 + 20 +5300.0 + 30 +0.0 + 11 +9562.5 + 21 +5475.0 + 31 +0.0 + 70 + 128 + 1 +36 + 13 +9375.0 + 23 +9645.0 + 33 +0.0 + 14 +9750.0 + 24 +9635.0 + 34 +0.0 + 0 +DIMENSION + 5 +3372 + 8 +BEMASSUNG + 2 +*D184 + 10 +14125.0 + 20 +5300.0 + 30 +0.0 + 11 +11937.5 + 21 +5475.0 + 31 +0.0 + 1 +4.38 + 13 +9750.0 + 23 +9635.0 + 33 +0.0 + 14 +14125.0 + 24 +9650.0 + 34 +0.0 + 0 +DIMENSION + 5 +3373 + 8 +BEMASSUNG + 2 +*D185 + 10 +14500.0 + 20 +5300.0 + 30 +0.0 + 11 +14312.5 + 21 +5475.0 + 31 +0.0 + 1 +36 + 13 +14125.0 + 23 +9650.0 + 33 +0.0 + 14 +14500.0 + 24 +9660.0 + 34 +0.0 + 0 +DIMENSION + 5 +3374 + 8 +BEMASSUNG + 2 +*D186 + 10 +17630.0 + 20 +5300.0 + 30 +0.0 + 11 +16065.0 + 21 +5475.0 + 31 +0.0 + 1 +3.13 + 13 +14500.0 + 23 +9660.0 + 33 +0.0 + 14 +17630.0 + 24 +9660.0 + 34 +0.0 + 0 +DIMENSION + 5 +3375 + 8 +BEMASSUNG + 2 +*D187 + 10 +18000.0 + 20 +5300.0 + 30 +0.0 + 11 +17815.0 + 21 +5475.0 + 31 +0.0 + 1 +36 + 13 +17630.0 + 23 +9660.0 + 33 +0.0 + 14 +18000.0 + 24 +9630.0 + 34 +0.0 + 0 +DIMENSION + 5 +3376 + 8 +BEMASSUNG + 2 +*D188 + 10 +20870.0 + 20 +5300.0 + 30 +0.0 + 11 +19435.0 + 21 +5475.0 + 31 +0.0 + 1 +2.88 + 13 +18000.0 + 23 +9630.0 + 33 +0.0 + 14 +20870.0 + 24 +9630.0 + 34 +0.0 + 0 +DIMENSION + 5 +3377 + 8 +BEMASSUNG + 2 +*D189 + 10 +21240.0 + 20 +5300.0 + 30 +0.0 + 11 +21055.0 + 21 +5475.0 + 31 +0.0 + 1 +36 + 13 +20870.0 + 23 +9630.0 + 33 +0.0 + 14 +21240.0 + 24 +9660.0 + 34 +0.0 + 0 +DIMENSION + 5 +3378 + 8 +BEMASSUNG + 2 +*D190 + 10 +22850.0 + 20 +5300.0 + 30 +0.0 + 11 +22045.0 + 21 +5475.0 + 31 +0.0 + 1 +1.61 + 13 +21240.0 + 23 +9660.0 + 33 +0.0 + 14 +22850.0 + 24 +9645.0 + 34 +0.0 + 0 +DIMENSION + 5 +3379 + 8 +BEMASSUNG + 2 +*D193 + 10 +22975.0 + 20 +5300.0 + 30 +0.0 + 11 +23095.0 + 21 +5475.0 + 31 +0.0 + 70 + 128 + 1 +12 + 13 +22850.0 + 23 +9645.0 + 33 +0.0 + 14 +22975.0 + 24 +9650.0 + 34 +0.0 + 0 +DIMENSION + 5 +337A + 8 +BEMASSUNG + 2 +*D191 + 10 +26375.0 + 20 +5300.0 + 30 +0.0 + 11 +24675.0 + 21 +5475.0 + 31 +0.0 + 1 +3.40 + 13 +22975.0 + 23 +9650.0 + 33 +0.0 + 14 +26375.0 + 24 +9670.0 + 34 +0.0 + 0 +DIMENSION + 5 +337B + 8 +BEMASSUNG + 2 +*D192 + 10 +26740.0 + 20 +5300.0 + 30 +0.0 + 11 +26557.5 + 21 +5475.0 + 31 +0.0 + 1 +36 + 13 +26375.0 + 23 +9670.0 + 33 +0.0 + 14 +26740.0 + 24 +9690.0 + 34 +0.0 + 0 +TEXT + 5 +337C + 8 +BEMASSUNG + 10 +13900.0 + 20 +6185.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +337D + 8 +BEMASSUNG + 10 +10780.0 + 20 +6185.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +337E + 8 +BEMASSUNG + 10 +9485.0 + 20 +6185.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +337F + 8 +BEMASSUNG + 10 +18125.0 + 20 +6185.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3380 + 8 +BEMASSUNG + 10 +9650.0 + 20 +5510.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3381 + 8 +BEMASSUNG + 10 +12185.0 + 20 +5510.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3382 + 8 +BEMASSUNG + 10 +14410.0 + 20 +5510.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3383 + 8 +BEMASSUNG + 10 +16275.0 + 20 +5510.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3384 + 8 +BEMASSUNG + 10 +17915.0 + 20 +5510.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3385 + 8 +BEMASSUNG + 10 +19675.0 + 20 +5510.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3386 + 8 +BEMASSUNG + 10 +19640.0 + 20 +6185.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3387 + 8 +BEMASSUNG + 10 +22745.0 + 20 +6185.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3388 + 8 +BEMASSUNG + 10 +24530.0 + 20 +6185.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3389 + 8 +BEMASSUNG + 10 +26255.0 + 20 +6185.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +338A + 8 +BEMASSUNG + 10 +21140.0 + 20 +5510.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +338B + 8 +BEMASSUNG + 10 +26655.0 + 20 +5510.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +338C + 8 +BEMASSUNG + 10 +5265.0 + 20 +5510.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +DIMENSION + 5 +338D + 8 +BEMASSUNG + 2 +*D196 + 10 +5855.0 + 20 +8070.0 + 30 +0.0 + 11 +5275.0 + 21 +8245.0 + 31 +0.0 + 70 + 128 + 1 +85 + 13 +4990.0 + 23 +9300.0 + 33 +0.0 + 14 +5855.0 + 24 +9300.0 + 34 +0.0 + 0 +DIMENSION + 5 +338E + 8 +BEMASSUNG + 2 +*D195 + 10 +8855.0 + 20 +8070.0 + 30 +0.0 + 11 +7630.0 + 21 +8245.0 + 31 +0.0 + 70 + 128 + 1 +3.00 + 13 +5855.0 + 23 +9300.0 + 33 +0.0 + 14 +8855.0 + 24 +8125.0 + 34 +0.0 + 0 +DIMENSION + 5 +338F + 8 +BEMASSUNG + 2 +*D197 + 10 +2800.0 + 20 +7645.0 + 30 +0.0 + 11 +2625.0 + 21 +8447.5 + 31 +0.0 + 1 +1.60 + 13 +5000.0 + 23 +9250.0 + 33 +0.0 + 14 +5000.0 + 24 +7645.0 + 34 +0.0 + 50 +90.0 + 0 +TEXT + 5 +3390 + 8 +BEMASSUNG + 10 +2610.0 + 20 +8640.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 0 +DIMENSION + 5 +3391 + 8 +BEMASSUNG + 2 +*D199 + 10 +26045.0 + 20 +8105.0 + 30 +0.0 + 11 +24845.0 + 21 +8280.0 + 31 +0.0 + 70 + 128 + 1 +3.00 + 13 +23030.0 + 23 +8095.0 + 33 +0.0 + 14 +26045.0 + 24 +8095.0 + 34 +0.0 + 0 +DIMENSION + 5 +3392 + 8 +BEMASSUNG + 2 +*D198 + 10 +26745.0 + 20 +8105.0 + 30 +0.0 + 11 +26395.0 + 21 +8280.0 + 31 +0.0 + 1 +70 + 13 +26045.0 + 23 +8095.0 + 33 +0.0 + 14 +26745.0 + 24 +9300.0 + 34 +0.0 + 0 +DIMENSION + 5 +3393 + 8 +BEMASSUNG + 2 +*D200 + 10 +28940.0 + 20 +7645.0 + 30 +0.0 + 11 +28765.0 + 21 +8450.0 + 31 +0.0 + 1 +1.60 + 13 +26040.0 + 23 +9255.0 + 33 +0.0 + 14 +26040.0 + 24 +7645.0 + 34 +0.0 + 50 +90.0 + 0 +TEXT + 5 +3394 + 8 +BEMASSUNG + 10 +28735.0 + 20 +8665.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3395 + 8 +LEGENDE-70 + 10 +12585.0 + 20 +17620.0 + 30 +0.0 + 40 +350.0 + 1 +D3 + 41 +0.75 + 7 +STANDART + 0 +CIRCLE + 5 +3396 + 8 +DETAILS + 10 +11740.0 + 20 +17320.0 + 30 +0.0 + 40 +705.0 + 0 +CIRCLE + 5 +3397 + 8 +DETAILS + 10 +26645.0 + 20 +14310.0 + 30 +0.0 + 40 +705.0 + 0 +TEXT + 5 +3398 + 8 +LEGENDE-70 + 10 +34240.0 + 20 +23545.0 + 30 +0.0 + 40 +350.0 + 1 +LEGENDE + 41 +0.75 + 7 +STANDART + 0 +POLYLINE + 5 +3399 + 8 +LEGENDE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +37C1 + 8 +LEGENDE + 10 +34220.0 + 20 +22930.0 + 30 +0.0 + 0 +VERTEX + 5 +37C2 + 8 +LEGENDE + 10 +34970.0 + 20 +22930.0 + 30 +0.0 + 0 +VERTEX + 5 +37C3 + 8 +LEGENDE + 10 +34970.0 + 20 +22430.0 + 30 +0.0 + 0 +VERTEX + 5 +37C4 + 8 +LEGENDE + 10 +34220.0 + 20 +22430.0 + 30 +0.0 + 0 +SEQEND + 5 +37C5 + 8 +LEGENDE + 0 +POLYLINE + 5 +339F + 8 +LEGENDE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +37C6 + 8 +LEGENDE + 10 +34220.0 + 20 +21930.0 + 30 +0.0 + 0 +VERTEX + 5 +37C7 + 8 +LEGENDE + 10 +34970.0 + 20 +21930.0 + 30 +0.0 + 0 +VERTEX + 5 +37C8 + 8 +LEGENDE + 10 +34970.0 + 20 +21430.0 + 30 +0.0 + 0 +VERTEX + 5 +37C9 + 8 +LEGENDE + 10 +34220.0 + 20 +21430.0 + 30 +0.0 + 0 +SEQEND + 5 +37CA + 8 +LEGENDE + 0 +POLYLINE + 5 +33A5 + 8 +LEGENDE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +37CB + 8 +LEGENDE + 10 +34220.0 + 20 +20930.0 + 30 +0.0 + 0 +VERTEX + 5 +37CC + 8 +LEGENDE + 10 +34970.0 + 20 +20930.0 + 30 +0.0 + 0 +VERTEX + 5 +37CD + 8 +LEGENDE + 10 +34970.0 + 20 +20430.0 + 30 +0.0 + 0 +VERTEX + 5 +37CE + 8 +LEGENDE + 10 +34220.0 + 20 +20430.0 + 30 +0.0 + 0 +SEQEND + 5 +37CF + 8 +LEGENDE + 0 +POLYLINE + 5 +33AB + 8 +LEGENDE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +37D0 + 8 +LEGENDE + 10 +34220.0 + 20 +19930.0 + 30 +0.0 + 0 +VERTEX + 5 +37D1 + 8 +LEGENDE + 10 +34970.0 + 20 +19930.0 + 30 +0.0 + 0 +VERTEX + 5 +37D2 + 8 +LEGENDE + 10 +34970.0 + 20 +19430.0 + 30 +0.0 + 0 +VERTEX + 5 +37D3 + 8 +LEGENDE + 10 +34220.0 + 20 +19430.0 + 30 +0.0 + 0 +SEQEND + 5 +37D4 + 8 +LEGENDE + 0 +INSERT + 5 +33B1 + 8 +SCHRAFFUR-MAUER + 2 +*X202 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +2000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +33B2 + 8 +SCHRAFFUR-MAUER + 2 +*X203 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +1000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +33B3 + 8 +SCHRAFFUR-MAUER + 2 +*X204 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +HONEY,I +1040 +300.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +33B4 + 8 +SCHRAFFUR-MAUER + 2 +*X205 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI37,I +1040 +1000.0 +1040 +0.0 +1002 +} + 0 +TEXT + 5 +33B5 + 8 +LEGENDE-35 + 10 +35465.0 + 20 +22540.0 + 30 +0.0 + 40 +175.0 + 1 +DIN 105 Mz-20-1.8-NF + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +33B6 + 8 +LEGENDE-35 + 10 +35450.0 + 20 +21550.0 + 30 +0.0 + 40 +175.0 + 1 +DIN 105 KHLz-20-1.8-NF + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +33B7 + 8 +LEGENDE-35 + 10 +35465.0 + 20 +19530.0 + 30 +0.0 + 40 +175.0 + 1 +DIN 4109 LEICHTE TRENNWAND + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +33B8 + 8 +LEGENDE-35 + 10 +35450.0 + 20 +20535.0 + 30 +0.0 + 40 +175.0 + 1 +MINERALFASERDÄMMUNG + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +33B9 + 8 +LEGENDE-35 + 10 +34220.0 + 20 +17470.0 + 30 +0.0 + 40 +175.0 + 1 +TÜRHÖHE: + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +33BA + 8 +LEGENDE-35 + 10 +34225.0 + 20 +16970.0 + 30 +0.0 + 40 +175.0 + 1 +FENSTERHÖHE: + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +33BB + 8 +LEGENDE-35 + 10 +34225.0 + 20 +16470.0 + 30 +0.0 + 40 +175.0 + 1 +BRÜSTUNGSHÖHE: + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +33BC + 8 +LEGENDE-35 + 10 +34225.0 + 20 +16040.0 + 30 +0.0 + 40 +175.0 + 1 +TREPPE: + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +33BD + 8 +LEGENDE-70 + 10 +32670.0 + 20 +14005.0 + 30 +0.0 + 40 +350.0 + 1 +AUFBAU AUSSENWAND / SCHORNSTEIN + 41 +0.75 + 7 +STANDART + 0 +POLYLINE + 5 +33BE + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +37D5 + 8 +MAUERWERK + 10 +38575.0 + 20 +12625.0 + 30 +0.0 + 0 +VERTEX + 5 +37D6 + 8 +MAUERWERK + 10 +39250.0 + 20 +12625.0 + 30 +0.0 + 0 +VERTEX + 5 +37D7 + 8 +MAUERWERK + 10 +39250.0 + 20 +11950.0 + 30 +0.0 + 0 +VERTEX + 5 +37D8 + 8 +MAUERWERK + 10 +38575.0 + 20 +11950.0 + 30 +0.0 + 0 +SEQEND + 5 +37D9 + 8 +MAUERWERK + 0 +POLYLINE + 5 +33C4 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +37DA + 8 +MAUERWERK + 10 +38575.0 + 20 +11375.0 + 30 +0.0 + 0 +VERTEX + 5 +37DB + 8 +MAUERWERK + 10 +39250.0 + 20 +11375.0 + 30 +0.0 + 0 +VERTEX + 5 +37DC + 8 +MAUERWERK + 10 +39250.0 + 20 +10700.0 + 30 +0.0 + 0 +VERTEX + 5 +37DD + 8 +MAUERWERK + 10 +38575.0 + 20 +10700.0 + 30 +0.0 + 0 +SEQEND + 5 +37DE + 8 +MAUERWERK + 0 +POLYLINE + 5 +33CA + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +37DF + 8 +MAUERWERK + 10 +38570.0 + 20 +11950.0 + 30 +0.0 + 0 +VERTEX + 5 +37E0 + 8 +MAUERWERK + 10 +39250.0 + 20 +12630.0 + 30 +0.0 + 0 +SEQEND + 5 +37E1 + 8 +MAUERWERK + 0 +POLYLINE + 5 +33CE + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +37E2 + 8 +MAUERWERK + 10 +38570.0 + 20 +12630.0 + 30 +0.0 + 0 +VERTEX + 5 +37E3 + 8 +MAUERWERK + 10 +39250.0 + 20 +11950.0 + 30 +0.0 + 0 +SEQEND + 5 +37E4 + 8 +MAUERWERK + 0 +POLYLINE + 5 +33D2 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +37E5 + 8 +MAUERWERK + 10 +38575.0 + 20 +11380.0 + 30 +0.0 + 0 +VERTEX + 5 +37E6 + 8 +MAUERWERK + 10 +39250.0 + 20 +10705.0 + 30 +0.0 + 0 +SEQEND + 5 +37E7 + 8 +MAUERWERK + 0 +POLYLINE + 5 +33D6 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +37E8 + 8 +MAUERWERK + 10 +38575.0 + 20 +10705.0 + 30 +0.0 + 0 +VERTEX + 5 +37E9 + 8 +MAUERWERK + 10 +39245.0 + 20 +11375.0 + 30 +0.0 + 0 +SEQEND + 5 +37EA + 8 +MAUERWERK + 0 +POLYLINE + 5 +33DA + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +37EB + 8 +0 + 10 +32800.0 + 20 +250.0 + 30 +0.0 + 0 +VERTEX + 5 +37EC + 8 +0 + 10 +32800.0 + 20 +3000.0 + 30 +0.0 + 0 +VERTEX + 5 +37ED + 8 +0 + 10 +41800.0 + 20 +3000.0 + 30 +0.0 + 0 +SEQEND + 5 +37EE + 8 +0 + 0 +DIMENSION + 5 +33DF + 8 +BEMASSUNG + 2 +*D206 + 10 +33895.0 + 20 +5405.0 + 30 +0.0 + 11 +33607.5 + 21 +5580.0 + 31 +0.0 + 1 +11 + 13 +33320.0 + 23 +6755.0 + 33 +0.0 + 14 +33895.0 + 24 +6755.0 + 34 +0.0 + 0 +DIMENSION + 5 +33E0 + 8 +BEMASSUNG + 2 +*D207 + 10 +34200.0 + 20 +5405.0 + 30 +0.0 + 11 +34047.5 + 21 +5580.0 + 31 +0.0 + 1 +6 + 13 +33895.0 + 23 +6755.0 + 33 +0.0 + 14 +34200.0 + 24 +6775.0 + 34 +0.0 + 0 +DIMENSION + 5 +33E1 + 8 +BEMASSUNG + 2 +*D208 + 10 +34600.0 + 20 +5405.0 + 30 +0.0 + 11 +34400.0 + 21 +5580.0 + 31 +0.0 + 1 +8 + 13 +34200.0 + 23 +6775.0 + 33 +0.0 + 14 +34600.0 + 24 +6775.0 + 34 +0.0 + 0 +DIMENSION + 5 +33E2 + 8 +BEMASSUNG + 2 +*D209 + 10 +36425.0 + 20 +5405.0 + 30 +0.0 + 11 +35512.5 + 21 +5580.0 + 31 +0.0 + 1 +36 + 13 +34600.0 + 23 +6775.0 + 33 +0.0 + 14 +36425.0 + 24 +6755.0 + 34 +0.0 + 0 +DIMENSION + 5 +33E3 + 8 +BEMASSUNG + 2 +*D210 + 10 +36505.0 + 20 +5405.0 + 30 +0.0 + 11 +36580.0 + 21 +5580.0 + 31 +0.0 + 70 + 128 + 1 +1 + 13 +36425.0 + 23 +6755.0 + 33 +0.0 + 14 +36505.0 + 24 +6755.0 + 34 +0.0 + 0 +TEXT + 5 +33E4 + 8 +BEMASSUNG + 10 +33710.0 + 20 +5610.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +33E5 + 8 +BEMASSUNG + 10 +35655.0 + 20 +5610.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +33E6 + 8 +BEMASSUNG + 10 +36650.0 + 20 +5610.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +DIMENSION + 5 +33E7 + 8 +BEMASSUNG + 2 +*D211 + 10 +38575.0 + 20 +9155.0 + 30 +0.0 + 11 +38285.0 + 21 +9330.0 + 31 +0.0 + 1 +11 + 13 +37995.0 + 23 +10130.0 + 33 +0.0 + 14 +38575.0 + 24 +10130.0 + 34 +0.0 + 0 +DIMENSION + 5 +33E8 + 8 +BEMASSUNG + 2 +*D212 + 10 +39240.0 + 20 +9155.0 + 30 +0.0 + 11 +38907.5 + 21 +9330.0 + 31 +0.0 + 1 +13 + 13 +38575.0 + 23 +10130.0 + 33 +0.0 + 14 +39240.0 + 24 +10720.0 + 34 +0.0 + 0 +DIMENSION + 5 +33E9 + 8 +BEMASSUNG + 2 +*D213 + 10 +39835.0 + 20 +9155.0 + 30 +0.0 + 11 +39537.5 + 21 +9330.0 + 31 +0.0 + 1 +11 + 13 +39240.0 + 23 +10720.0 + 33 +0.0 + 14 +39835.0 + 24 +10125.0 + 34 +0.0 + 0 +DIMENSION + 5 +33EA + 8 +BEMASSUNG + 2 +*D214 + 10 +40740.0 + 20 +12625.0 + 30 +0.0 + 11 +40565.0 + 21 +12940.0 + 31 +0.0 + 1 +12 + 13 +39815.0 + 23 +13255.0 + 33 +0.0 + 14 +39815.0 + 24 +12625.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +33EB + 8 +BEMASSUNG + 2 +*D215 + 10 +40740.0 + 20 +11955.0 + 30 +0.0 + 11 +40565.0 + 21 +12290.0 + 31 +0.0 + 1 +13 + 13 +39815.0 + 23 +12625.0 + 33 +0.0 + 14 +39250.0 + 24 +11955.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +33EC + 8 +BEMASSUNG + 2 +*D216 + 10 +40740.0 + 20 +11365.0 + 30 +0.0 + 11 +40565.0 + 21 +11660.0 + 31 +0.0 + 1 +11 + 13 +39250.0 + 23 +11955.0 + 33 +0.0 + 14 +39240.0 + 24 +11365.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +33ED + 8 +BEMASSUNG + 2 +*D217 + 10 +40740.0 + 20 +10705.0 + 30 +0.0 + 11 +40565.0 + 21 +11035.0 + 31 +0.0 + 1 +13 + 13 +39240.0 + 23 +11365.0 + 33 +0.0 + 14 +39240.0 + 24 +10705.0 + 34 +0.0 + 50 +90.0 + 0 +TEXT + 5 +33EE + 8 +BEMASSUNG + 10 +40515.0 + 20 +13090.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +33EF + 8 +BEMASSUNG + 10 +38395.0 + 20 +9375.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +33F0 + 8 +BEMASSUNG + 10 +40515.0 + 20 +12420.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +33F1 + 8 +BEMASSUNG + 10 +40515.0 + 20 +11755.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +33F2 + 8 +BEMASSUNG + 10 +40515.0 + 20 +11160.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +33F3 + 8 +BEMASSUNG + 10 +39030.0 + 20 +9375.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +33F4 + 8 +BEMASSUNG + 10 +39625.0 + 20 +9375.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +INSERT + 5 +33F5 + 8 +SCHRAFFUR-DAEMMUNG + 2 +*X218 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +HONEY,I +1040 +750.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +33F6 + 8 +SCHRAFFUR-DAEMMUNG + 2 +*X219 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +6500.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +33F7 + 8 +SCHRAFFUR-DAEMMUNG + 2 +*X220 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +2000.0 +1040 +0.0 +1002 +} + 0 +POLYLINE + 5 +33F8 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +37EF + 8 +DETAILS + 10 +32640.0 + 20 +13235.0 + 30 +0.0 + 0 +VERTEX + 5 +37F0 + 8 +DETAILS + 10 +37145.0 + 20 +13235.0 + 30 +0.0 + 0 +SEQEND + 5 +37F1 + 8 +DETAILS + 0 +POLYLINE + 5 +33FC + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +37F2 + 8 +DETAILS + 10 +32640.0 + 20 +6775.0 + 30 +0.0 + 0 +VERTEX + 5 +37F3 + 8 +DETAILS + 10 +37145.0 + 20 +6775.0 + 30 +0.0 + 0 +SEQEND + 5 +37F4 + 8 +DETAILS + 0 +POLYLINE + 5 +3400 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +37F5 + 8 +DETAILS + 10 +37595.0 + 20 +10140.0 + 30 +0.0 + 0 +VERTEX + 5 +37F6 + 8 +DETAILS + 10 +40290.0 + 20 +10140.0 + 30 +0.0 + 0 +SEQEND + 5 +37F7 + 8 +DETAILS + 0 +POLYLINE + 5 +3404 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +37F8 + 8 +MAUERWERK + 10 +33325.0 + 20 +13235.0 + 30 +0.0 + 0 +VERTEX + 5 +37F9 + 8 +MAUERWERK + 10 +33325.0 + 20 +6775.0 + 30 +0.0 + 0 +SEQEND + 5 +37FA + 8 +MAUERWERK + 0 +POLYLINE + 5 +3408 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +37FB + 8 +MAUERWERK + 10 +33900.0 + 20 +6775.0 + 30 +0.0 + 0 +VERTEX + 5 +37FC + 8 +MAUERWERK + 10 +33900.0 + 20 +13235.0 + 30 +0.0 + 0 +SEQEND + 5 +37FD + 8 +MAUERWERK + 0 +POLYLINE + 5 +340C + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +37FE + 8 +MAUERWERK + 10 +34200.0 + 20 +13235.0 + 30 +0.0 + 0 +VERTEX + 5 +37FF + 8 +MAUERWERK + 10 +34200.0 + 20 +6775.0 + 30 +0.0 + 0 +SEQEND + 5 +3800 + 8 +MAUERWERK + 0 +POLYLINE + 5 +3410 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3801 + 8 +MAUERWERK + 10 +34600.0 + 20 +6775.0 + 30 +0.0 + 0 +VERTEX + 5 +3802 + 8 +MAUERWERK + 10 +34600.0 + 20 +13235.0 + 30 +0.0 + 0 +SEQEND + 5 +3803 + 8 +MAUERWERK + 0 +POLYLINE + 5 +3414 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +3804 + 8 +MAUERWERK + 10 +34600.0 + 20 +13235.0 + 30 +0.0 + 0 +VERTEX + 5 +3805 + 8 +MAUERWERK + 10 +34600.0 + 20 +6775.0 + 30 +0.0 + 0 +SEQEND + 5 +3806 + 8 +MAUERWERK + 0 +POLYLINE + 5 +3418 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +3807 + 8 +MAUERWERK + 10 +36425.0 + 20 +6775.0 + 30 +0.0 + 0 +VERTEX + 5 +3808 + 8 +MAUERWERK + 10 +36425.0 + 20 +13235.0 + 30 +0.0 + 0 +SEQEND + 5 +3809 + 8 +MAUERWERK + 0 +POLYLINE + 5 +341C + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +380A + 8 +MAUERWERK + 10 +36500.0 + 20 +13235.0 + 30 +0.0 + 0 +VERTEX + 5 +380B + 8 +MAUERWERK + 10 +36500.0 + 20 +6775.0 + 30 +0.0 + 0 +SEQEND + 5 +380C + 8 +MAUERWERK + 0 +POLYLINE + 5 +3420 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +380D + 8 +MAUERWERK + 10 +36425.0 + 20 +6775.0 + 30 +0.0 + 0 +VERTEX + 5 +380E + 8 +MAUERWERK + 10 +36425.0 + 20 +13235.0 + 30 +0.0 + 0 +SEQEND + 5 +380F + 8 +MAUERWERK + 0 +POLYLINE + 5 +3424 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +3810 + 8 +MAUERWERK + 10 +38000.0 + 20 +13250.0 + 30 +0.0 + 0 +VERTEX + 5 +3811 + 8 +MAUERWERK + 10 +39825.0 + 20 +13250.0 + 30 +0.0 + 0 +VERTEX + 5 +3812 + 8 +MAUERWERK + 10 +39825.0 + 20 +10140.0 + 30 +0.0 + 0 +SEQEND + 5 +3813 + 8 +MAUERWERK + 0 +POLYLINE + 5 +3429 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +3814 + 8 +MAUERWERK + 10 +38000.0 + 20 +10140.0 + 30 +0.0 + 0 +VERTEX + 5 +3815 + 8 +MAUERWERK + 10 +38000.0 + 20 +13250.0 + 30 +0.0 + 0 +SEQEND + 5 +3816 + 8 +MAUERWERK + 0 +POLYLINE + 5 +342D + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +3817 + 8 +MAUERWERK + 10 +3000.0 + 20 +1980.0 + 30 +0.0 + 0 +VERTEX + 5 +3818 + 8 +MAUERWERK + 10 +3000.0 + 20 +5500.0 + 30 +0.0 + 40 +122.5 + 41 +0.0 + 0 +VERTEX + 5 +3819 + 8 +MAUERWERK + 10 +3000.0 + 20 +5850.0 + 30 +0.0 + 40 +0.0 + 41 +0.0 + 0 +SEQEND + 5 +381A + 8 +MAUERWERK + 0 +POLYLINE + 5 +3432 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +381B + 8 +MAUERWERK + 10 +3000.0 + 20 +1980.0 + 30 +0.0 + 0 +VERTEX + 5 +381C + 8 +MAUERWERK + 10 +3000.0 + 20 +5500.0 + 30 +0.0 + 40 +122.5 + 41 +0.0 + 0 +VERTEX + 5 +381D + 8 +MAUERWERK + 10 +3000.0 + 20 +5850.0 + 30 +0.0 + 40 +0.0 + 41 +0.0 + 0 +SEQEND + 5 +381E + 8 +MAUERWERK + 0 +POLYLINE + 5 +3437 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +381F + 8 +MAUERWERK + 10 +2985.0 + 20 +1995.0 + 30 +0.0 + 0 +VERTEX + 5 +3820 + 8 +MAUERWERK + 10 +6505.0 + 20 +1995.0 + 30 +0.0 + 40 +122.5 + 41 +0.0 + 0 +VERTEX + 5 +3821 + 8 +MAUERWERK + 10 +6855.0 + 20 +1995.0 + 30 +0.0 + 40 +0.0 + 41 +0.0 + 0 +SEQEND + 5 +3822 + 8 +MAUERWERK + 0 +TEXT + 5 +343C + 8 +LEGENDE-70 + 10 +2550.0 + 20 +5330.0 + 30 +0.0 + 40 +350.0 + 1 +Y + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +343D + 8 +LEGENDE-70 + 10 +6625.0 + 20 +1385.0 + 30 +0.0 + 40 +350.0 + 1 +Z + 41 +0.75 + 7 +STANDART + 0 +POLYLINE + 5 +343E + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +3823 + 8 +0 + 10 +37300.0 + 20 +250.0 + 30 +0.0 + 0 +VERTEX + 5 +3824 + 8 +0 + 10 +37300.0 + 20 +3000.0 + 30 +0.0 + 0 +SEQEND + 5 +3825 + 8 +0 + 0 +POLYLINE + 5 +3442 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +3826 + 8 +0 + 10 +35050.0 + 20 +250.0 + 30 +0.0 + 0 +VERTEX + 5 +3827 + 8 +0 + 10 +35050.0 + 20 +3000.0 + 30 +0.0 + 0 +SEQEND + 5 +3828 + 8 +0 + 0 +POLYLINE + 5 +3446 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +3829 + 8 +0 + 10 +35050.0 + 20 +1000.0 + 30 +0.0 + 0 +VERTEX + 5 +382A + 8 +0 + 10 +41800.0 + 20 +1000.0 + 30 +0.0 + 0 +SEQEND + 5 +382B + 8 +0 + 0 +POLYLINE + 5 +344A + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +382C + 8 +0 + 10 +35050.0 + 20 +2250.0 + 30 +0.0 + 0 +VERTEX + 5 +382D + 8 +0 + 10 +41790.0 + 20 +2250.0 + 30 +0.0 + 0 +SEQEND + 5 +382E + 8 +0 + 0 +POLYLINE + 5 +344E + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +382F + 8 +0 + 10 +37300.0 + 20 +2750.0 + 30 +0.0 + 0 +VERTEX + 5 +3830 + 8 +0 + 10 +41800.0 + 20 +2750.0 + 30 +0.0 + 0 +SEQEND + 5 +3831 + 8 +0 + 0 +POLYLINE + 5 +3452 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +3832 + 8 +0 + 10 +35050.0 + 20 +500.0 + 30 +0.0 + 0 +VERTEX + 5 +3833 + 8 +0 + 10 +32790.0 + 20 +500.0 + 30 +0.0 + 0 +SEQEND + 5 +3834 + 8 +0 + 0 +POLYLINE + 5 +3456 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +3835 + 8 +0 + 10 +35050.0 + 20 +750.0 + 30 +0.0 + 0 +VERTEX + 5 +3836 + 8 +0 + 10 +32790.0 + 20 +750.0 + 30 +0.0 + 0 +SEQEND + 5 +3837 + 8 +0 + 0 +POLYLINE + 5 +345A + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +3838 + 8 +0 + 10 +35050.0 + 20 +1000.0 + 30 +0.0 + 0 +VERTEX + 5 +3839 + 8 +0 + 10 +32790.0 + 20 +1000.0 + 30 +0.0 + 0 +SEQEND + 5 +383A + 8 +0 + 0 +POLYLINE + 5 +345E + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +383B + 8 +0 + 10 +35050.0 + 20 +1250.0 + 30 +0.0 + 0 +VERTEX + 5 +383C + 8 +0 + 10 +32790.0 + 20 +1250.0 + 30 +0.0 + 0 +SEQEND + 5 +383D + 8 +0 + 0 +POLYLINE + 5 +3462 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +383E + 8 +0 + 10 +35050.0 + 20 +1500.0 + 30 +0.0 + 0 +VERTEX + 5 +383F + 8 +0 + 10 +32790.0 + 20 +1500.0 + 30 +0.0 + 0 +SEQEND + 5 +3840 + 8 +0 + 0 +POLYLINE + 5 +3466 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +3841 + 8 +0 + 10 +35050.0 + 20 +1750.0 + 30 +0.0 + 0 +VERTEX + 5 +3842 + 8 +0 + 10 +32790.0 + 20 +1750.0 + 30 +0.0 + 0 +SEQEND + 5 +3843 + 8 +0 + 0 +POLYLINE + 5 +346A + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +3844 + 8 +0 + 10 +35050.0 + 20 +2000.0 + 30 +0.0 + 0 +VERTEX + 5 +3845 + 8 +0 + 10 +32790.0 + 20 +2000.0 + 30 +0.0 + 0 +SEQEND + 5 +3846 + 8 +0 + 0 +POLYLINE + 5 +346E + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +3847 + 8 +0 + 10 +35050.0 + 20 +2250.0 + 30 +0.0 + 0 +VERTEX + 5 +3848 + 8 +0 + 10 +32790.0 + 20 +2250.0 + 30 +0.0 + 0 +SEQEND + 5 +3849 + 8 +0 + 0 +TEXT + 5 +3472 + 8 +LEGENDE-70 + 10 +37530.0 + 20 +1420.0 + 30 +0.0 + 40 +350.0 + 1 +GRUNDRISS 300/56 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3473 + 8 +LEGENDE-35 + 10 +37530.0 + 20 +485.0 + 30 +0.0 + 40 +175.0 + 1 +Name + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3474 + 8 +LEGENDE-35 + 10 +35640.0 + 20 +485.0 + 30 +0.0 + 40 +175.0 + 1 +001 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3475 + 8 +LEGENDE-35 + 10 +37455.0 + 20 +2375.0 + 30 +0.0 + 40 +175.0 + 1 +MASSTAB 1:50 + 41 +0.75 + 7 +STANDART + 0 +POLYLINE + 5 +3476 + 8 +LEGENDE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 41 +300.0 + 0 +VERTEX + 5 +384A + 8 +LEGENDE + 10 +20010.0 + 20 +9715.0 + 30 +0.0 + 0 +VERTEX + 5 +384B + 8 +LEGENDE + 10 +20010.0 + 20 +9865.0 + 30 +0.0 + 40 +300.0 + 0 +SEQEND + 5 +384C + 8 +LEGENDE + 0 +POLYLINE + 5 +347A + 8 +LEGENDE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 0 +VERTEX + 5 +384D + 8 +LEGENDE + 10 +20015.0 + 20 +10150.0 + 30 +0.0 + 0 +VERTEX + 5 +384E + 8 +LEGENDE + 10 +19865.0 + 20 +10300.0 + 30 +0.0 + 0 +VERTEX + 5 +384F + 8 +LEGENDE + 10 +20165.0 + 20 +10300.0 + 30 +0.0 + 0 +SEQEND + 5 +3850 + 8 +LEGENDE + 0 +DIMENSION + 5 +347F + 8 +BEMASSUNG + 2 +*D222 + 10 +18455.0 + 20 +9655.0 + 30 +0.0 + 11 +18280.0 + 21 +9740.0 + 31 +0.0 + 70 + 128 + 1 +3 + 13 +18465.0 + 23 +9625.0 + 33 +0.0 + 14 +18465.0 + 24 +9655.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +3480 + 8 +BEMASSUNG + 2 +*D221 + 10 +18455.0 + 20 +10855.0 + 30 +0.0 + 11 +18280.0 + 21 +10255.0 + 31 +0.0 + 12 +100.0 + 22 +0.0 + 32 +0.0 + 1 +1.21 + 13 +18465.0 + 23 +9655.0 + 33 +0.0 + 14 +18455.0 + 24 +10855.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +3481 + 8 +BEMASSUNG + 2 +*D223 + 10 +18455.0 + 20 +15625.0 + 30 +0.0 + 11 +18280.0 + 21 +14745.0 + 31 +0.0 + 12 +10.0 + 22 +0.0 + 32 +0.0 + 1 +1.76 + 13 +18500.0 + 23 +13865.0 + 33 +0.0 + 14 +18500.0 + 24 +15625.0 + 34 +0.0 + 50 +90.0 + 0 +TEXT + 5 +3482 + 8 +BEMASSUNG + 10 +36825.0 + 20 +17460.0 + 30 +0.0 + 40 +175.0 + 1 +2.28 ROH ; 2.16 FERTIG + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3483 + 8 +BEMASSUNG + 10 +36825.0 + 20 +16960.0 + 30 +0.0 + 40 +175.0 + 1 +1.23 NG ; 0.74 KG + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3484 + 8 +BEMASSUNG + 10 +36825.0 + 20 +16460.0 + 30 +0.0 + 40 +175.0 + 1 +1.05 NG ; 1.46 KG + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3485 + 8 +BEMASSUNG + 10 +36835.0 + 20 +16025.0 + 30 +0.0 + 40 +175.0 + 1 +9+9 x 16 /30 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3486 + 8 +BEMASSUNG + 10 +37840.0 + 20 +16070.0 + 30 +0.0 + 40 +125.0 + 1 +7 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3487 + 8 +BEMASSUNG + 10 +38345.0 + 20 +16100.0 + 30 +0.0 + 40 +125.0 + 1 +1 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3488 + 8 +BEMASSUNG + 10 +20190.0 + 20 +9805.0 + 30 +0.0 + 40 +175.0 + 1 ++1.50 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3489 + 8 +BEMASSUNG + 10 +20185.0 + 20 +10190.0 + 30 +0.0 + 40 +175.0 + 1 ++1.61 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +348A + 8 +BEMASSUNG + 10 +20660.0 + 20 +10325.0 + 30 +0.0 + 40 +125.0 + 1 +8 + 41 +0.75 + 7 +STANDART + 0 +POLYLINE + 5 +348B + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +3851 + 8 +0 + 10 +41050.0 + 20 +250.0 + 30 +0.0 + 0 +VERTEX + 5 +3852 + 8 +0 + 10 +41050.0 + 20 +990.0 + 30 +0.0 + 0 +SEQEND + 5 +3853 + 8 +0 + 0 +TEXT + 5 +348F + 8 +LEGENDE-35 + 10 +41110.0 + 20 +725.0 + 30 +0.0 + 40 +175.0 + 1 +BLATT + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3490 + 8 +LEGENDE-35 + 10 +41345.0 + 20 +335.0 + 30 +0.0 + 40 +175.0 + 1 +1 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3491 + 8 +BEMASSUNG + 10 +20660.0 + 20 +9930.0 + 30 +0.0 + 40 +125.0 + 1 +3 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3492 + 8 +BEMASSUNG + 10 +20035.0 + 20 +19915.0 + 30 +0.0 + 40 +175.0 + 1 ++0.11 + 41 +0.75 + 7 +STANDART + 0 +POLYLINE + 5 +3493 + 8 +LEGENDE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 0 +VERTEX + 5 +3854 + 8 +LEGENDE + 10 +19865.0 + 20 +19875.0 + 30 +0.0 + 0 +VERTEX + 5 +3855 + 8 +LEGENDE + 10 +19715.0 + 20 +20025.0 + 30 +0.0 + 0 +VERTEX + 5 +3856 + 8 +LEGENDE + 10 +20015.0 + 20 +20025.0 + 30 +0.0 + 0 +SEQEND + 5 +3857 + 8 +LEGENDE + 0 +TEXT + 5 +3498 + 8 +BEMASSUNG + 10 +20040.0 + 20 +19530.0 + 30 +0.0 + 40 +175.0 + 1 +%%p0.00 + 41 +0.75 + 7 +STANDART + 0 +POLYLINE + 5 +3499 + 8 +LEGENDE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 41 +300.0 + 0 +VERTEX + 5 +3858 + 8 +LEGENDE + 10 +19860.0 + 20 +19440.0 + 30 +0.0 + 0 +VERTEX + 5 +3859 + 8 +LEGENDE + 10 +19860.0 + 20 +19590.0 + 30 +0.0 + 40 +300.0 + 0 +SEQEND + 5 +385A + 8 +LEGENDE + 0 +TEXT + 5 +349D + 8 +BEMASSUNG + 10 +20510.0 + 20 +20050.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +349E + 8 +BEMASSUNG + 10 +38485.0 + 20 +17580.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +349F + 8 +LEGENDE-35 + 10 +34225.0 + 20 +15640.0 + 30 +0.0 + 40 +175.0 + 1 +TREPPENFENSTERHÖHE: + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +34A0 + 8 +BEMASSUNG + 10 +36825.0 + 20 +15620.0 + 30 +0.0 + 40 +175.0 + 1 +0.74 + 41 +0.75 + 7 +STANDART + 0 +POLYLINE + 5 +34A1 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 0 +VERTEX + 5 +385B + 8 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +385C + 8 +0 + 10 +42050.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +385D + 8 +0 + 10 +42050.0 + 20 +29700.0 + 30 +0.0 + 0 +VERTEX + 5 +385E + 8 +0 + 10 +0.0 + 20 +29700.0 + 30 +0.0 + 0 +SEQEND + 5 +385F + 8 +0 + 0 +TEXT + 5 +34A7 + 8 +BEMASSUNG + 10 +23200.0 + 20 +5495.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +VIEWPORT + 5 +328E + 67 + 1 + 8 +0 + 10 +6.790131 + 20 +4.5 + 30 +0.0 + 40 +13.580262 + 41 +9.0 + 68 + -1 + 69 + 1 +1001 +ACAD +1000 +MVIEW +1002 +{ +1070 + 16 +1010 +0.0 +1020 +0.0 +1030 +0.0 +1010 +0.0 +1020 +0.0 +1030 +1.0 +1040 +0.0 +1040 +9.0 +1040 +6.790131 +1040 +4.5 +1040 +50.0 +1040 +0.0 +1040 +0.0 +1070 + 0 +1070 + 100 +1070 + 1 +1070 + 1 +1070 + 1 +1070 + 0 +1070 + 0 +1070 + 2 +1040 +0.0 +1040 +0.0 +1040 +0.0 +1040 +5.0 +1040 +5.0 +1040 +10.0 +1040 +10.0 +1070 + 0 +1002 +{ +1002 +} +1002 +} + 0 +ENDSEC + 0 +EOF diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/samples/dxf/draft2.dxf b/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/samples/dxf/draft2.dxf new file mode 100644 index 00000000..28c30f44 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/samples/dxf/draft2.dxf @@ -0,0 +1,118370 @@ + 0 +SECTION + 2 +HEADER + 9 +$ACADVER + 1 +AC1009 + 9 +$INSBASE + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$EXTMIN + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$EXTMAX + 10 +26430.0 + 20 +14850.0 + 30 +0.0 + 9 +$LIMMIN + 10 +0.0 + 20 +0.0 + 9 +$LIMMAX + 10 +21025.0 + 20 +14850.0 + 9 +$ORTHOMODE + 70 + 1 + 9 +$REGENMODE + 70 + 1 + 9 +$FILLMODE + 70 + 1 + 9 +$QTEXTMODE + 70 + 0 + 9 +$MIRRTEXT + 70 + 1 + 9 +$DRAGMODE + 70 + 2 + 9 +$LTSCALE + 40 +175.0 + 9 +$OSMODE + 70 + 0 + 9 +$ATTMODE + 70 + 1 + 9 +$TEXTSIZE + 40 +87.5 + 9 +$TRACEWID + 40 +1.0 + 9 +$TEXTSTYLE + 7 +STANDARD + 9 +$CLAYER + 8 +DRAHTANKER + 9 +$CELTYPE + 6 +BYLAYER + 9 +$CECOLOR + 62 + 256 + 9 +$DIMSCALE + 40 +1.0 + 9 +$DIMASZ + 40 +1.0 + 9 +$DIMEXO + 40 +1.0 + 9 +$DIMDLI + 40 +3.0 + 9 +$DIMRND + 40 +0.0 + 9 +$DIMDLE + 40 +0.0 + 9 +$DIMEXE + 40 +0.5 + 9 +$DIMTP + 40 +0.0 + 9 +$DIMTM + 40 +0.0 + 9 +$DIMTXT + 40 +87.5 + 9 +$DIMCEN + 40 +-0.5 + 9 +$DIMTSZ + 40 +0.0 + 9 +$DIMTOL + 70 + 0 + 9 +$DIMLIM + 70 + 0 + 9 +$DIMTIH + 70 + 0 + 9 +$DIMTOH + 70 + 0 + 9 +$DIMSE1 + 70 + 1 + 9 +$DIMSE2 + 70 + 1 + 9 +$DIMTAD + 70 + 1 + 9 +$DIMZIN + 70 + 8 + 9 +$DIMBLK + 1 +MASSHILFSLINIE + 9 +$DIMASO + 70 + 1 + 9 +$DIMSHO + 70 + 0 + 9 +$DIMPOST + 1 + + 9 +$DIMAPOST + 1 + + 9 +$DIMALT + 70 + 0 + 9 +$DIMALTD + 70 + 2 + 9 +$DIMALTF + 40 +25.4 + 9 +$DIMLFAC + 40 +1.0 + 9 +$DIMTOFL + 70 + 1 + 9 +$DIMTVP + 40 +0.0 + 9 +$DIMTIX + 70 + 1 + 9 +$DIMSOXD + 70 + 0 + 9 +$DIMSAH + 70 + 0 + 9 +$DIMBLK1 + 1 + + 9 +$DIMBLK2 + 1 + + 9 +$DIMSTYLE + 2 +BEMASSUNG + 9 +$DIMCLRD + 70 + 0 + 9 +$DIMCLRE + 70 + 0 + 9 +$DIMCLRT + 70 + 0 + 9 +$DIMTFAC + 40 +1.0 + 9 +$DIMGAP + 40 +0.0 + 9 +$LUNITS + 70 + 2 + 9 +$LUPREC + 70 + 2 + 9 +$SKETCHINC + 40 +1.0 + 9 +$FILLETRAD + 40 +0.0 + 9 +$AUNITS + 70 + 0 + 9 +$AUPREC + 70 + 0 + 9 +$MENU + 1 +acad + 9 +$ELEVATION + 40 +0.0 + 9 +$PELEVATION + 40 +0.0 + 9 +$THICKNESS + 40 +0.0 + 9 +$LIMCHECK + 70 + 0 + 9 +$BLIPMODE + 70 + 1 + 9 +$CHAMFERA + 40 +0.0 + 9 +$CHAMFERB + 40 +0.0 + 9 +$SKPOLY + 70 + 0 + 9 +$TDCREATE + 40 +2450818.514433 + 9 +$TDUPDATE + 40 +2450818.976785 + 9 +$TDINDWG + 40 +0.011021 + 9 +$TDUSRTIMER + 40 +0.011021 + 9 +$USRTIMER + 70 + 1 + 9 +$ANGBASE + 50 +0.0 + 9 +$ANGDIR + 70 + 0 + 9 +$PDMODE + 70 + 0 + 9 +$PDSIZE + 40 +0.0 + 9 +$PLINEWID + 40 +8.75 + 9 +$COORDS + 70 + 2 + 9 +$SPLFRAME + 70 + 0 + 9 +$SPLINETYPE + 70 + 6 + 9 +$SPLINESEGS + 70 + 8 + 9 +$ATTDIA + 70 + 0 + 9 +$ATTREQ + 70 + 1 + 9 +$HANDLING + 70 + 1 + 9 +$HANDSEED + 5 +2A68 + 9 +$SURFTAB1 + 70 + 6 + 9 +$SURFTAB2 + 70 + 6 + 9 +$SURFTYPE + 70 + 6 + 9 +$SURFU + 70 + 6 + 9 +$SURFV + 70 + 6 + 9 +$UCSNAME + 2 +PAPIERURSPRUNG + 9 +$UCSORG + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSXDIR + 10 +1.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSYDIR + 10 +0.0 + 20 +1.0 + 30 +0.0 + 9 +$PUCSNAME + 2 + + 9 +$PUCSORG + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSXDIR + 10 +1.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSYDIR + 10 +0.0 + 20 +1.0 + 30 +0.0 + 9 +$USERI1 + 70 + 0 + 9 +$USERI2 + 70 + 0 + 9 +$USERI3 + 70 + 0 + 9 +$USERI4 + 70 + 0 + 9 +$USERI5 + 70 + 0 + 9 +$USERR1 + 40 +0.0 + 9 +$USERR2 + 40 +0.0 + 9 +$USERR3 + 40 +0.0 + 9 +$USERR4 + 40 +0.0 + 9 +$USERR5 + 40 +0.0 + 9 +$WORLDVIEW + 70 + 1 + 9 +$SHADEDGE + 70 + 3 + 9 +$SHADEDIF + 70 + 70 + 9 +$TILEMODE + 70 + 1 + 9 +$MAXACTVP + 70 + 16 + 9 +$PLIMCHECK + 70 + 0 + 9 +$PEXTMIN + 10 +1.000000E+020 + 20 +1.000000E+020 + 30 +1.000000E+020 + 9 +$PEXTMAX + 10 +-1.000000E+020 + 20 +-1.000000E+020 + 30 +-1.000000E+020 + 9 +$PLIMMIN + 10 +0.0 + 20 +0.0 + 9 +$PLIMMAX + 10 +12.0 + 20 +9.0 + 9 +$UNITMODE + 70 + 0 + 9 +$VISRETAIN + 70 + 0 + 9 +$PLINEGEN + 70 + 0 + 9 +$PSLTSCALE + 70 + 0 + 0 +ENDSEC + 0 +SECTION + 2 +TABLES + 0 +TABLE + 2 +VPORT + 70 + 3 + 0 +VPORT + 2 +*ACTIVE + 70 + 0 + 10 +0.0 + 20 +0.0 + 11 +1.0 + 21 +1.0 + 12 +13215.0 + 22 +8516.664786 + 13 +0.0 + 23 +0.0 + 14 +5.0 + 24 +5.0 + 15 +10.0 + 25 +10.0 + 16 +0.0 + 26 +0.0 + 36 +1.0 + 17 +0.0 + 27 +0.0 + 37 +0.0 + 40 +17033.329571 + 41 +1.551664 + 42 +50.0 + 43 +0.0 + 44 +0.0 + 50 +0.0 + 51 +0.0 + 71 + 0 + 72 + 100 + 73 + 1 + 74 + 1 + 75 + 1 + 76 + 0 + 77 + 0 + 78 + 1 + 0 +ENDTAB + 0 +TABLE + 2 +LTYPE + 70 + 25 + 0 +LTYPE + 2 +CONTINUOUS + 70 + 0 + 3 +Solid Line + 72 + 65 + 73 + 0 + 40 +0.0 + 0 +LTYPE + 2 +RAND + 70 + 0 + 3 +__ __ . __ __ . __ __ . __ __ . __ __ . __ __ . + 72 + 65 + 73 + 6 + 40 +1.75 + 49 +0.5 + 49 +-0.25 + 49 +0.5 + 49 +-0.25 + 49 +0.0 + 49 +-0.25 + 0 +LTYPE + 2 +RAND2 + 70 + 0 + 3 +__.__.__.__.__.__.__.__.__.__.__.__.__.__.__.__ + 72 + 65 + 73 + 6 + 40 +0.875 + 49 +0.25 + 49 +-0.125 + 49 +0.25 + 49 +-0.125 + 49 +0.0 + 49 +-0.125 + 0 +LTYPE + 2 +RANDX2 + 70 + 0 + 3 +____ ____ . ____ ____ . ____ ____ . __ + 72 + 65 + 73 + 6 + 40 +3.5 + 49 +1.0 + 49 +-0.5 + 49 +1.0 + 49 +-0.5 + 49 +0.0 + 49 +-0.5 + 0 +LTYPE + 2 +MITTE + 70 + 0 + 3 +____ _ ____ _ ____ _ ____ _ ____ _ ____ _ ____ + 72 + 65 + 73 + 4 + 40 +2.0 + 49 +1.25 + 49 +-0.25 + 49 +0.25 + 49 +-0.25 + 0 +LTYPE + 2 +MITTE2 + 70 + 0 + 3 +___ _ ___ _ ___ _ ___ _ ___ _ ___ _ ___ _ ___ _ + 72 + 65 + 73 + 4 + 40 +1.125 + 49 +0.75 + 49 +-0.125 + 49 +0.125 + 49 +-0.125 + 0 +LTYPE + 2 +MITTEX2 + 70 + 0 + 3 +________ __ ________ __ ________ __ _____ + 72 + 65 + 73 + 4 + 40 +4.0 + 49 +2.5 + 49 +-0.5 + 49 +0.5 + 49 +-0.5 + 0 +LTYPE + 2 +STRICHPUNKT + 70 + 0 + 3 +__ . __ . __ . __ . __ . __ . __ . __ . __ . __ + 72 + 65 + 73 + 4 + 40 +1.0 + 49 +0.5 + 49 +-0.25 + 49 +0.0 + 49 +-0.25 + 0 +LTYPE + 2 +STRICHPUNKT2 + 70 + 0 + 3 +_._._._._._._._._._._._._._._._._._._._._._._._ + 72 + 65 + 73 + 4 + 40 +0.5 + 49 +0.25 + 49 +-0.125 + 49 +0.0 + 49 +-0.125 + 0 +LTYPE + 2 +STRICHPUNKTX2 + 70 + 0 + 3 +____ . ____ . ____ . ____ . ____ . __ + 72 + 65 + 73 + 4 + 40 +2.0 + 49 +1.0 + 49 +-0.5 + 49 +0.0 + 49 +-0.5 + 0 +LTYPE + 2 +GESTRICHELT + 70 + 0 + 3 +__ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ + 72 + 65 + 73 + 2 + 40 +0.75 + 49 +0.5 + 49 +-0.25 + 0 +LTYPE + 2 +GESTRICHELT2 + 70 + 0 + 3 +_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ + 72 + 65 + 73 + 2 + 40 +0.375 + 49 +0.25 + 49 +-0.125 + 0 +LTYPE + 2 +GESTRICHELTX2 + 70 + 0 + 3 +____ ____ ____ ____ ____ ____ ____ ____ + 72 + 65 + 73 + 2 + 40 +1.5 + 49 +1.0 + 49 +-0.5 + 0 +LTYPE + 2 +GETRENNT + 70 + 0 + 3 +____ . . ____ . . ____ . . ____ . . ____ . . __ + 72 + 65 + 73 + 6 + 40 +1.25 + 49 +0.5 + 49 +-0.25 + 49 +0.0 + 49 +-0.25 + 49 +0.0 + 49 +-0.25 + 0 +LTYPE + 2 +GETRENNT2 + 70 + 0 + 3 +__..__..__..__..__..__..__..__..__..__..__..__. + 72 + 65 + 73 + 6 + 40 +0.625 + 49 +0.25 + 49 +-0.125 + 49 +0.0 + 49 +-0.125 + 49 +0.0 + 49 +-0.125 + 0 +LTYPE + 2 +GETRENNTX2 + 70 + 0 + 3 +________ . . ________ . . ________ . . + 72 + 65 + 73 + 6 + 40 +2.5 + 49 +1.0 + 49 +-0.5 + 49 +0.0 + 49 +-0.5 + 49 +0.0 + 49 +-0.5 + 0 +LTYPE + 2 +PUNKT + 70 + 0 + 3 +. . . . . . . . . . . . . . . . . . . . . . . . + 72 + 65 + 73 + 2 + 40 +0.25 + 49 +0.0 + 49 +-0.25 + 0 +LTYPE + 2 +PUNKT2 + 70 + 0 + 3 +............................................... + 72 + 65 + 73 + 2 + 40 +0.125 + 49 +0.0 + 49 +-0.125 + 0 +LTYPE + 2 +PUNKTX2 + 70 + 0 + 3 +. . . . . . . . . . . . . . . . + 72 + 65 + 73 + 2 + 40 +0.5 + 49 +0.0 + 49 +-0.5 + 0 +LTYPE + 2 +VERDECKT + 70 + 0 + 3 +__ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ + 72 + 65 + 73 + 2 + 40 +0.375 + 49 +0.25 + 49 +-0.125 + 0 +LTYPE + 2 +VERDECKT2 + 70 + 0 + 3 +_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ + 72 + 65 + 73 + 2 + 40 +0.1875 + 49 +0.125 + 49 +-0.0625 + 0 +LTYPE + 2 +VERDECKTX2 + 70 + 0 + 3 +____ ____ ____ ____ ____ ____ ____ ____ ____ __ + 72 + 65 + 73 + 2 + 40 +0.75 + 49 +0.5 + 49 +-0.25 + 0 +LTYPE + 2 +PHANTOM + 70 + 0 + 3 +______ __ __ ______ __ __ ______ __ __ + 72 + 65 + 73 + 6 + 40 +2.5 + 49 +1.25 + 49 +-0.25 + 49 +0.25 + 49 +-0.25 + 49 +0.25 + 49 +-0.25 + 0 +LTYPE + 2 +PHANTOM2 + 70 + 0 + 3 +___ _ _ ___ _ _ ___ _ _ ___ _ _ ___ _ _ ___ _ _ + 72 + 65 + 73 + 6 + 40 +1.25 + 49 +0.625 + 49 +-0.125 + 49 +0.125 + 49 +-0.125 + 49 +0.125 + 49 +-0.125 + 0 +LTYPE + 2 +PHANTOMX2 + 70 + 0 + 3 +____________ ____ ____ ____________ + 72 + 65 + 73 + 6 + 40 +5.0 + 49 +2.5 + 49 +-0.5 + 49 +0.5 + 49 +-0.5 + 49 +0.5 + 49 +-0.5 + 0 +ENDTAB + 0 +TABLE + 2 +LAYER + 70 + 22 + 0 +LAYER + 2 +0 + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +LAYER + 2 +MAUERWERK + 70 + 0 + 62 + 6 + 6 +CONTINUOUS + 0 +LAYER + 2 +VORSATZSCHALE + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +LAYER + 2 +PE-FOLIE + 70 + 0 + 62 + 1 + 6 +GESTRICHELTX2 + 0 +LAYER + 2 +FUNDAMENT + 70 + 0 + 62 + 8 + 6 +CONTINUOUS + 0 +LAYER + 2 +BEMASSUNG + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +LAYER + 2 +STUERTZE + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +LAYER + 2 +ESTRICH + 70 + 0 + 62 + 4 + 6 +CONTINUOUS + 0 +LAYER + 2 +DECKEN + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +LAYER + 2 +DAEMMUNG + 70 + 0 + 62 + 4 + 6 +CONTINUOUS + 0 +LAYER + 2 +TUEREN + 70 + 0 + 62 + 3 + 6 +CONTINUOUS + 0 +LAYER + 2 +ERDBODEN + 70 + 0 + 62 + 5 + 6 +CONTINUOUS + 0 +LAYER + 2 +SCHNITTKANTEN + 70 + 0 + 62 + 1 + 6 +GESTRICHELT + 0 +LAYER + 2 +TRENNWAND + 70 + 0 + 62 + 8 + 6 +CONTINUOUS + 0 +LAYER + 2 +LEGENDE-70 + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +LAYER + 2 +LEGENDE-35 + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +LAYER + 2 +DETAILS + 70 + 0 + 62 + 7 + 6 +GESTRICHELTX2 + 0 +LAYER + 2 +DRAHTANKER + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +LAYER + 2 +SCHRAFFUR + 70 + 0 + 62 + 2 + 6 +CONTINUOUS + 0 +LAYER + 2 +DEFPOINTS + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +LAYER + 2 +HOLZ + 70 + 0 + 62 + 5 + 6 +CONTINUOUS + 0 +LAYER + 2 +SCHORNSTEIN + 70 + 0 + 62 + 1 + 6 +CONTINUOUS + 0 +ENDTAB + 0 +TABLE + 2 +STYLE + 70 + 1 + 0 +STYLE + 2 +STANDARD + 70 + 0 + 40 +0.0 + 41 +1.0 + 50 +0.0 + 71 + 0 + 42 +87.5 + 3 +txt + 4 + + 0 +ENDTAB + 0 +TABLE + 2 +VIEW + 70 + 0 + 0 +ENDTAB + 0 +TABLE + 2 +UCS + 70 + 2 + 0 +UCS + 2 +LOKAL + 70 + 0 + 10 +4125.0 + 20 +5250.0 + 30 +0.0 + 11 +1.0 + 21 +0.0 + 31 +0.0 + 12 +0.0 + 22 +1.0 + 32 +0.0 + 0 +UCS + 2 +PAPIERURSPRUNG + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 11 +1.0 + 21 +0.0 + 31 +0.0 + 12 +0.0 + 22 +1.0 + 32 +0.0 + 0 +ENDTAB + 0 +TABLE + 2 +APPID + 70 + 1 + 0 +APPID + 2 +ACAD + 70 + 0 + 0 +ENDTAB + 0 +TABLE + 2 +DIMSTYLE + 70 + 1 + 0 +DIMSTYLE + 2 +BEMASSUNG + 70 + 0 + 3 + + 4 + + 5 +MASSHILFSLINIE + 6 + + 7 + + 40 +1.0 + 41 +1.0 + 42 +1.0 + 43 +3.0 + 44 +0.5 + 45 +0.0 + 46 +0.0 + 47 +0.0 + 48 +0.0 +140 +87.5 +141 +-0.5 +142 +0.0 +143 +25.4 +144 +1.0 +145 +0.0 +146 +1.0 +147 +0.0 + 71 + 0 + 72 + 0 + 73 + 0 + 74 + 0 + 75 + 1 + 76 + 1 + 77 + 1 + 78 + 8 +170 + 0 +171 + 2 +172 + 1 +173 + 0 +174 + 1 +175 + 0 +176 + 0 +177 + 0 +178 + 0 + 0 +ENDTAB + 0 +ENDSEC + 0 +SECTION + 2 +BLOCKS + 0 +BLOCK + 8 +0 + 2 +$MODEL_SPACE + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +$MODEL_SPACE + 1 + + 0 +ENDBLK + 5 +74 + 8 +0 + 0 +BLOCK + 67 + 1 + 8 +0 + 2 +$PAPER_SPACE + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +$PAPER_SPACE + 1 + + 0 +ENDBLK + 5 +72 + 67 + 1 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +RAHMEN50 + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +RAHMEN50 + 1 + + 0 +POLYLINE + 5 +78 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +1FFE + 8 +0 + 10 +1000.0 + 20 +250.0 + 30 +0.0 + 0 +VERTEX + 5 +1FFF + 8 +0 + 10 +41800.0 + 20 +250.0 + 30 +0.0 + 0 +VERTEX + 5 +2000 + 8 +0 + 10 +41800.0 + 20 +29450.0 + 30 +0.0 + 0 +VERTEX + 5 +2001 + 8 +0 + 10 +1000.0 + 20 +29450.0 + 30 +0.0 + 0 +SEQEND + 5 +2002 + 8 +0 + 0 +POLYLINE + 5 +7E + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +2003 + 8 +0 + 10 +32800.0 + 20 +250.0 + 30 +0.0 + 0 +VERTEX + 5 +2004 + 8 +0 + 10 +32800.0 + 20 +13250.0 + 30 +0.0 + 0 +VERTEX + 5 +2005 + 8 +0 + 10 +41800.0 + 20 +13250.0 + 30 +0.0 + 0 +SEQEND + 5 +2006 + 8 +0 + 0 +POLYLINE + 5 +83 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +2007 + 8 +0 + 10 +39550.0 + 20 +13250.0 + 30 +0.0 + 0 +VERTEX + 5 +2008 + 8 +0 + 10 +39550.0 + 20 +11000.0 + 30 +0.0 + 0 +SEQEND + 5 +2009 + 8 +0 + 0 +POLYLINE + 5 +87 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +200A + 8 +0 + 10 +41800.0 + 20 +12250.0 + 30 +0.0 + 0 +VERTEX + 5 +200B + 8 +0 + 10 +37300.0 + 20 +12250.0 + 30 +0.0 + 0 +SEQEND + 5 +200C + 8 +0 + 0 +POLYLINE + 5 +8B + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +200D + 8 +0 + 10 +41800.0 + 20 +11625.0 + 30 +0.0 + 0 +VERTEX + 5 +200E + 8 +0 + 10 +37300.0 + 20 +11625.0 + 30 +0.0 + 0 +SEQEND + 5 +200F + 8 +0 + 0 +POLYLINE + 5 +8F + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +2010 + 8 +0 + 10 +32800.0 + 20 +11000.0 + 30 +0.0 + 0 +VERTEX + 5 +2011 + 8 +0 + 10 +41800.0 + 20 +11000.0 + 30 +0.0 + 0 +SEQEND + 5 +2012 + 8 +0 + 0 +POLYLINE + 5 +93 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +2013 + 8 +0 + 10 +37300.0 + 20 +13250.0 + 30 +0.0 + 0 +VERTEX + 5 +2014 + 8 +0 + 10 +37300.0 + 20 +6500.0 + 30 +0.0 + 0 +SEQEND + 5 +2015 + 8 +0 + 0 +POLYLINE + 5 +97 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +2016 + 8 +0 + 10 +32800.0 + 20 +8750.0 + 30 +0.0 + 0 +VERTEX + 5 +2017 + 8 +0 + 10 +37300.0 + 20 +8750.0 + 30 +0.0 + 0 +SEQEND + 5 +2018 + 8 +0 + 0 +POLYLINE + 5 +9B + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +2019 + 8 +0 + 10 +32800.0 + 20 +6500.0 + 30 +0.0 + 0 +VERTEX + 5 +201A + 8 +0 + 10 +41800.0 + 20 +6500.0 + 30 +0.0 + 0 +SEQEND + 5 +201B + 8 +0 + 0 +POLYLINE + 5 +9F + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +201C + 8 +0 + 10 +41800.0 + 20 +2000.0 + 30 +0.0 + 0 +VERTEX + 5 +201D + 8 +0 + 10 +32800.0 + 20 +2000.0 + 30 +0.0 + 0 +SEQEND + 5 +201E + 8 +0 + 0 +POLYLINE + 5 +A3 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +201F + 8 +0 + 10 +41800.0 + 20 +950.0 + 30 +0.0 + 0 +VERTEX + 5 +2020 + 8 +0 + 10 +32800.0 + 20 +950.0 + 30 +0.0 + 0 +SEQEND + 5 +2021 + 8 +0 + 0 +POLYLINE + 5 +A7 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +2022 + 8 +0 + 10 +41800.0 + 20 +1300.0 + 30 +0.0 + 0 +VERTEX + 5 +2023 + 8 +0 + 10 +32800.0 + 20 +1300.0 + 30 +0.0 + 0 +SEQEND + 5 +2024 + 8 +0 + 0 +POLYLINE + 5 +AB + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +2025 + 8 +0 + 10 +41800.0 + 20 +1650.0 + 30 +0.0 + 0 +VERTEX + 5 +2026 + 8 +0 + 10 +32800.0 + 20 +1650.0 + 30 +0.0 + 0 +SEQEND + 5 +2027 + 8 +0 + 0 +POLYLINE + 5 +AF + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +2028 + 8 +0 + 10 +41800.0 + 20 +600.0 + 30 +0.0 + 0 +VERTEX + 5 +2029 + 8 +0 + 10 +32800.0 + 20 +600.0 + 30 +0.0 + 0 +SEQEND + 5 +202A + 8 +0 + 0 +POLYLINE + 5 +B3 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +202B + 8 +0 + 10 +35100.0 + 20 +250.0 + 30 +0.0 + 0 +VERTEX + 5 +202C + 8 +0 + 10 +35100.0 + 20 +2000.0 + 30 +0.0 + 0 +SEQEND + 5 +202D + 8 +0 + 0 +POLYLINE + 5 +B7 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +202E + 8 +0 + 10 +33950.0 + 20 +250.0 + 30 +0.0 + 0 +VERTEX + 5 +202F + 8 +0 + 10 +33950.0 + 20 +2000.0 + 30 +0.0 + 0 +SEQEND + 5 +2030 + 8 +0 + 0 +POLYLINE + 5 +BB + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +2031 + 8 +0 + 10 +40650.0 + 20 +250.0 + 30 +0.0 + 0 +VERTEX + 5 +2032 + 8 +0 + 10 +40650.0 + 20 +2000.0 + 30 +0.0 + 0 +SEQEND + 5 +2033 + 8 +0 + 0 +ENDBLK + 5 +BF + 8 +0 + 0 +BLOCK + 8 +0 + 2 +STURZ + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +STURZ + 1 + + 0 +POLYLINE + 5 +C1 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +2034 + 8 +MAUERWERK + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2035 + 8 +MAUERWERK + 10 +0.0 + 20 +-71.0 + 30 +0.0 + 0 +VERTEX + 5 +2036 + 8 +MAUERWERK + 10 +365.0 + 20 +-71.0 + 30 +0.0 + 0 +VERTEX + 5 +2037 + 8 +MAUERWERK + 10 +365.0 + 20 +0.0 + 30 +0.0 + 0 +SEQEND + 5 +2038 + 8 +MAUERWERK + 0 +POLYLINE + 5 +C7 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +2039 + 8 +MAUERWERK + 10 +40.0 + 20 +-1.0 + 30 +0.0 + 0 +VERTEX + 5 +203A + 8 +MAUERWERK + 10 +40.0 + 20 +-36.0 + 30 +0.0 + 0 +VERTEX + 5 +203B + 8 +MAUERWERK + 10 +80.0 + 20 +-36.0 + 30 +0.0 + 0 +VERTEX + 5 +203C + 8 +MAUERWERK + 10 +80.0 + 20 +-6.0 + 30 +0.0 + 0 +SEQEND + 5 +203D + 8 +MAUERWERK + 0 +POLYLINE + 5 +CD + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +203E + 8 +MAUERWERK + 10 +160.0 + 20 +-1.0 + 30 +0.0 + 0 +VERTEX + 5 +203F + 8 +MAUERWERK + 10 +160.0 + 20 +-36.0 + 30 +0.0 + 0 +VERTEX + 5 +2040 + 8 +MAUERWERK + 10 +200.0 + 20 +-36.0 + 30 +0.0 + 0 +VERTEX + 5 +2041 + 8 +MAUERWERK + 10 +200.0 + 20 +-6.0 + 30 +0.0 + 0 +SEQEND + 5 +2042 + 8 +MAUERWERK + 0 +POLYLINE + 5 +D3 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +2043 + 8 +MAUERWERK + 10 +285.0 + 20 +-1.0 + 30 +0.0 + 0 +VERTEX + 5 +2044 + 8 +MAUERWERK + 10 +285.0 + 20 +-36.0 + 30 +0.0 + 0 +VERTEX + 5 +2045 + 8 +MAUERWERK + 10 +325.0 + 20 +-36.0 + 30 +0.0 + 0 +VERTEX + 5 +2046 + 8 +MAUERWERK + 10 +325.0 + 20 +-6.0 + 30 +0.0 + 0 +SEQEND + 5 +2047 + 8 +MAUERWERK + 0 +POLYLINE + 5 +D9 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +2048 + 8 +MAUERWERK + 10 +121.0 + 20 +-71.0 + 30 +0.0 + 0 +VERTEX + 5 +2049 + 8 +MAUERWERK + 10 +121.0 + 20 +0.0 + 30 +0.0 + 0 +SEQEND + 5 +204A + 8 +MAUERWERK + 0 +POLYLINE + 5 +DD + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +204B + 8 +MAUERWERK + 10 +243.0 + 20 +-71.0 + 30 +0.0 + 0 +VERTEX + 5 +204C + 8 +MAUERWERK + 10 +243.0 + 20 +0.0 + 30 +0.0 + 0 +SEQEND + 5 +204D + 8 +MAUERWERK + 0 +ENDBLK + 5 +E1 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +MASSHILFSLINIE + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +MASSHILFSLINIE + 1 + + 0 +POLYLINE + 5 +E3 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +204E + 8 +0 + 10 +75.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +204F + 8 +0 + 10 +-75.0 + 20 +0.0 + 30 +0.0 + 0 +SEQEND + 5 +2050 + 8 +0 + 0 +POLYLINE + 5 +E7 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2051 + 8 +0 + 10 +0.0 + 20 +-175.0 + 30 +0.0 + 0 +VERTEX + 5 +2052 + 8 +0 + 10 +0.0 + 20 +175.0 + 30 +0.0 + 0 +SEQEND + 5 +2053 + 8 +0 + 0 +POLYLINE + 5 +EB + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2054 + 8 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2055 + 8 +0 + 10 +26.516504 + 20 +26.516504 + 30 +0.0 + 0 +SEQEND + 5 +2056 + 8 +0 + 0 +POLYLINE + 5 +EF + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2057 + 8 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2058 + 8 +0 + 10 +-26.516504 + 20 +-26.516504 + 30 +0.0 + 0 +SEQEND + 5 +2059 + 8 +0 + 0 +ENDBLK + 5 +F3 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X3 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X3 + 1 + + 0 +LINE + 5 +F5 + 8 +0 + 62 + 0 + 10 +10328.961031 + 20 +5090.0 + 30 +0.0 + 11 +10488.961031 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +F6 + 8 +0 + 62 + 0 + 10 +9904.696962 + 20 +5090.0 + 30 +0.0 + 11 +10064.696962 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +F7 + 8 +0 + 62 + 0 + 10 +9480.432893 + 20 +5090.0 + 30 +0.0 + 11 +9640.432893 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +F8 + 8 +0 + 62 + 0 + 10 +9056.168825 + 20 +5090.0 + 30 +0.0 + 11 +9216.168825 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +F9 + 8 +0 + 62 + 0 + 10 +8631.904756 + 20 +5090.0 + 30 +0.0 + 11 +8791.904756 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +FA + 8 +0 + 62 + 0 + 10 +8207.640687 + 20 +5090.0 + 30 +0.0 + 11 +8367.640687 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +FB + 8 +0 + 62 + 0 + 10 +7783.376618 + 20 +5090.0 + 30 +0.0 + 11 +7943.376618 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +FC + 8 +0 + 62 + 0 + 10 +7359.11255 + 20 +5090.0 + 30 +0.0 + 11 +7519.11255 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +FD + 8 +0 + 62 + 0 + 10 +6934.848481 + 20 +5090.0 + 30 +0.0 + 11 +7094.848481 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +FE + 8 +0 + 62 + 0 + 10 +6510.584412 + 20 +5090.0 + 30 +0.0 + 11 +6670.584412 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +FF + 8 +0 + 62 + 0 + 10 +6086.320344 + 20 +5090.0 + 30 +0.0 + 11 +6246.320344 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +100 + 8 +0 + 62 + 0 + 10 +5662.056275 + 20 +5090.0 + 30 +0.0 + 11 +5822.056275 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +101 + 8 +0 + 62 + 0 + 10 +5237.792206 + 20 +5090.0 + 30 +0.0 + 11 +5397.792206 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +102 + 8 +0 + 62 + 0 + 10 +4813.528137 + 20 +5090.0 + 30 +0.0 + 11 +4973.528137 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +103 + 8 +0 + 62 + 0 + 10 +4384.264069 + 20 +5085.0 + 30 +0.0 + 11 +4549.264069 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +104 + 8 +0 + 62 + 0 + 10 +10753.225099 + 20 +5090.0 + 30 +0.0 + 11 +10913.225099 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +105 + 8 +0 + 62 + 0 + 10 +11177.489168 + 20 +5090.0 + 30 +0.0 + 11 +11337.489168 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +106 + 8 +0 + 62 + 0 + 10 +11601.753237 + 20 +5090.0 + 30 +0.0 + 11 +11761.753237 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +107 + 8 +0 + 62 + 0 + 10 +12026.017306 + 20 +5090.0 + 30 +0.0 + 11 +12186.017306 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +108 + 8 +0 + 62 + 0 + 10 +12450.281374 + 20 +5090.0 + 30 +0.0 + 11 +12610.281374 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +109 + 8 +0 + 62 + 0 + 10 +12874.545443 + 20 +5090.0 + 30 +0.0 + 11 +13034.545443 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +10A + 8 +0 + 62 + 0 + 10 +13298.809512 + 20 +5090.0 + 30 +0.0 + 11 +13458.809512 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +10B + 8 +0 + 62 + 0 + 10 +13723.07358 + 20 +5090.0 + 30 +0.0 + 11 +13883.07358 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +10C + 8 +0 + 62 + 0 + 10 +14147.337649 + 20 +5090.0 + 30 +0.0 + 11 +14307.337649 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +10D + 8 +0 + 62 + 0 + 10 +14571.601718 + 20 +5090.0 + 30 +0.0 + 11 +14731.601718 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +10E + 8 +0 + 62 + 0 + 10 +14995.865787 + 20 +5090.0 + 30 +0.0 + 11 +15155.865787 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +10F + 8 +0 + 62 + 0 + 10 +15420.129855 + 20 +5090.0 + 30 +0.0 + 11 +15580.129855 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +110 + 8 +0 + 62 + 0 + 10 +15844.393924 + 20 +5090.0 + 30 +0.0 + 11 +16004.393924 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +111 + 8 +0 + 62 + 0 + 10 +16268.657993 + 20 +5090.0 + 30 +0.0 + 11 +16428.657993 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +112 + 8 +0 + 62 + 0 + 10 +16687.922061 + 20 +5085.0 + 30 +0.0 + 11 +16852.922061 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +113 + 8 +0 + 62 + 0 + 10 +10116.828996 + 20 +5090.0 + 30 +0.0 + 11 +10117.72997 + 21 +5090.900974 + 31 +0.0 + 0 +LINE + 5 +114 + 8 +0 + 62 + 0 + 10 +10170.762979 + 20 +5143.933983 + 30 +0.0 + 11 +10276.828996 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +115 + 8 +0 + 62 + 0 + 10 +9692.564927 + 20 +5090.0 + 30 +0.0 + 11 +9746.49891 + 21 +5143.933983 + 31 +0.0 + 0 +LINE + 5 +116 + 8 +0 + 62 + 0 + 10 +9799.531919 + 20 +5196.966991 + 30 +0.0 + 11 +9852.564927 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +117 + 8 +0 + 62 + 0 + 10 +9269.201833 + 20 +5090.900974 + 30 +0.0 + 11 +9375.26785 + 21 +5196.966991 + 31 +0.0 + 0 +LINE + 5 +118 + 8 +0 + 62 + 0 + 10 +8844.03679 + 20 +5090.0 + 30 +0.0 + 11 +8844.937764 + 21 +5090.900974 + 31 +0.0 + 0 +LINE + 5 +119 + 8 +0 + 62 + 0 + 10 +8897.970773 + 20 +5143.933983 + 30 +0.0 + 11 +9004.03679 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +11A + 8 +0 + 62 + 0 + 10 +8419.772721 + 20 +5090.0 + 30 +0.0 + 11 +8473.706704 + 21 +5143.933983 + 31 +0.0 + 0 +LINE + 5 +11B + 8 +0 + 62 + 0 + 10 +8526.739713 + 20 +5196.966991 + 30 +0.0 + 11 +8579.772721 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +11C + 8 +0 + 62 + 0 + 10 +7996.409627 + 20 +5090.900974 + 30 +0.0 + 11 +8102.475644 + 21 +5196.966991 + 31 +0.0 + 0 +LINE + 5 +11D + 8 +0 + 62 + 0 + 10 +7571.244584 + 20 +5090.0 + 30 +0.0 + 11 +7572.145558 + 21 +5090.900974 + 31 +0.0 + 0 +LINE + 5 +11E + 8 +0 + 62 + 0 + 10 +7625.178567 + 20 +5143.933983 + 30 +0.0 + 11 +7731.244584 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +11F + 8 +0 + 62 + 0 + 10 +7146.980515 + 20 +5090.0 + 30 +0.0 + 11 +7200.914498 + 21 +5143.933983 + 31 +0.0 + 0 +LINE + 5 +120 + 8 +0 + 62 + 0 + 10 +7253.947506 + 20 +5196.966991 + 30 +0.0 + 11 +7306.980515 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +121 + 8 +0 + 62 + 0 + 10 +6723.617421 + 20 +5090.900974 + 30 +0.0 + 11 +6829.683438 + 21 +5196.966991 + 31 +0.0 + 0 +LINE + 5 +122 + 8 +0 + 62 + 0 + 10 +6298.452378 + 20 +5090.0 + 30 +0.0 + 11 +6299.353352 + 21 +5090.900974 + 31 +0.0 + 0 +LINE + 5 +123 + 8 +0 + 62 + 0 + 10 +6352.38636 + 20 +5143.933983 + 30 +0.0 + 11 +6458.452378 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +124 + 8 +0 + 62 + 0 + 10 +5874.188309 + 20 +5090.0 + 30 +0.0 + 11 +5928.122292 + 21 +5143.933983 + 31 +0.0 + 0 +LINE + 5 +125 + 8 +0 + 62 + 0 + 10 +5981.1553 + 20 +5196.966991 + 30 +0.0 + 11 +6034.188309 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +126 + 8 +0 + 62 + 0 + 10 +5450.825214 + 20 +5090.900974 + 30 +0.0 + 11 +5556.891232 + 21 +5196.966991 + 31 +0.0 + 0 +LINE + 5 +127 + 8 +0 + 62 + 0 + 10 +5609.92424 + 20 +5250.0 + 30 +0.0 + 11 +5609.92424 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +128 + 8 +0 + 62 + 0 + 10 +5025.660171 + 20 +5090.0 + 30 +0.0 + 11 +5026.561146 + 21 +5090.900974 + 31 +0.0 + 0 +LINE + 5 +129 + 8 +0 + 62 + 0 + 10 +5079.594154 + 20 +5143.933983 + 30 +0.0 + 11 +5185.660171 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +12A + 8 +0 + 62 + 0 + 10 +4601.396103 + 20 +5090.0 + 30 +0.0 + 11 +4655.330086 + 21 +5143.933983 + 31 +0.0 + 0 +LINE + 5 +12B + 8 +0 + 62 + 0 + 10 +4708.363094 + 20 +5196.966991 + 30 +0.0 + 11 +4761.396103 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +12C + 8 +0 + 62 + 0 + 10 +4178.033008 + 20 +5090.900974 + 30 +0.0 + 11 +4284.099025 + 21 +5196.966991 + 31 +0.0 + 0 +LINE + 5 +12D + 8 +0 + 62 + 0 + 10 +4337.132034 + 20 +5250.0 + 30 +0.0 + 11 +4337.132034 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +12E + 8 +0 + 62 + 0 + 10 +10541.994039 + 20 +5090.900974 + 30 +0.0 + 11 +10648.060056 + 21 +5196.966991 + 31 +0.0 + 0 +LINE + 5 +12F + 8 +0 + 62 + 0 + 10 +10965.357133 + 20 +5090.0 + 30 +0.0 + 11 +11019.291116 + 21 +5143.933983 + 31 +0.0 + 0 +LINE + 5 +130 + 8 +0 + 62 + 0 + 10 +11072.324125 + 20 +5196.966991 + 30 +0.0 + 11 +11125.357133 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +131 + 8 +0 + 62 + 0 + 10 +11389.621202 + 20 +5090.0 + 30 +0.0 + 11 +11390.522176 + 21 +5090.900974 + 31 +0.0 + 0 +LINE + 5 +132 + 8 +0 + 62 + 0 + 10 +11443.555185 + 20 +5143.933983 + 30 +0.0 + 11 +11549.621202 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +133 + 8 +0 + 62 + 0 + 10 +11814.786245 + 20 +5090.900974 + 30 +0.0 + 11 +11920.852262 + 21 +5196.966991 + 31 +0.0 + 0 +LINE + 5 +134 + 8 +0 + 62 + 0 + 10 +12238.14934 + 20 +5090.0 + 30 +0.0 + 11 +12292.083322 + 21 +5143.933983 + 31 +0.0 + 0 +LINE + 5 +135 + 8 +0 + 62 + 0 + 10 +12345.116331 + 20 +5196.966991 + 30 +0.0 + 11 +12398.14934 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +136 + 8 +0 + 62 + 0 + 10 +12662.413408 + 20 +5090.0 + 30 +0.0 + 11 +12663.314382 + 21 +5090.900974 + 31 +0.0 + 0 +LINE + 5 +137 + 8 +0 + 62 + 0 + 10 +12716.347391 + 20 +5143.933983 + 30 +0.0 + 11 +12822.413408 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +138 + 8 +0 + 62 + 0 + 10 +13087.578451 + 20 +5090.900974 + 30 +0.0 + 11 +13193.644468 + 21 +5196.966991 + 31 +0.0 + 0 +LINE + 5 +139 + 8 +0 + 62 + 0 + 10 +13510.941546 + 20 +5090.0 + 30 +0.0 + 11 +13564.875528 + 21 +5143.933983 + 31 +0.0 + 0 +LINE + 5 +13A + 8 +0 + 62 + 0 + 10 +13617.908537 + 20 +5196.966991 + 30 +0.0 + 11 +13670.941546 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +13B + 8 +0 + 62 + 0 + 10 +13935.205614 + 20 +5090.0 + 30 +0.0 + 11 +13936.106589 + 21 +5090.900974 + 31 +0.0 + 0 +LINE + 5 +13C + 8 +0 + 62 + 0 + 10 +13989.139597 + 20 +5143.933983 + 30 +0.0 + 11 +14095.205614 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +13D + 8 +0 + 62 + 0 + 10 +14360.370657 + 20 +5090.900974 + 30 +0.0 + 11 +14466.436674 + 21 +5196.966991 + 31 +0.0 + 0 +LINE + 5 +13E + 8 +0 + 62 + 0 + 10 +14783.733752 + 20 +5090.0 + 30 +0.0 + 11 +14837.667735 + 21 +5143.933983 + 31 +0.0 + 0 +LINE + 5 +13F + 8 +0 + 62 + 0 + 10 +14890.700743 + 20 +5196.966991 + 30 +0.0 + 11 +14943.733752 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +140 + 8 +0 + 62 + 0 + 10 +15207.997821 + 20 +5090.0 + 30 +0.0 + 11 +15208.898795 + 21 +5090.900974 + 31 +0.0 + 0 +LINE + 5 +141 + 8 +0 + 62 + 0 + 10 +15261.931803 + 20 +5143.933983 + 30 +0.0 + 11 +15367.997821 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +142 + 8 +0 + 62 + 0 + 10 +15633.162863 + 20 +5090.900974 + 30 +0.0 + 11 +15739.228881 + 21 +5196.966991 + 31 +0.0 + 0 +LINE + 5 +143 + 8 +0 + 62 + 0 + 10 +16056.525958 + 20 +5090.0 + 30 +0.0 + 11 +16110.459941 + 21 +5143.933983 + 31 +0.0 + 0 +LINE + 5 +144 + 8 +0 + 62 + 0 + 10 +16163.492949 + 20 +5196.966991 + 30 +0.0 + 11 +16216.525958 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +145 + 8 +0 + 62 + 0 + 10 +16480.790027 + 20 +5090.0 + 30 +0.0 + 11 +16481.691001 + 21 +5090.900974 + 31 +0.0 + 0 +LINE + 5 +146 + 8 +0 + 62 + 0 + 10 +16534.724009 + 20 +5143.933983 + 30 +0.0 + 11 +16640.790027 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +147 + 8 +0 + 62 + 0 + 10 +16905.95507 + 20 +5090.900974 + 30 +0.0 + 11 +16990.0 + 21 +5174.945905 + 31 +0.0 + 0 +ENDBLK + 5 +148 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D4 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D4 + 1 + + 0 +LINE + 5 +14A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +3761.0 + 20 +3850.0 + 30 +0.0 + 11 +4129.0 + 21 +3850.0 + 31 +0.0 + 0 +INSERT + 5 +14B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +3760.0 + 20 +3850.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +14C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +4130.0 + 20 +3850.0 + 30 +0.0 + 0 +TEXT + 5 +14D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +3872.083333 + 20 +3893.75 + 30 +0.0 + 40 +87.5 + 1 +32 + 72 + 1 + 11 +3945.0 + 21 +3937.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +14F + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +3760.0 + 20 +3650.0 + 30 +0.0 + 0 +POINT + 5 +150 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +4130.0 + 20 +3650.0 + 30 +0.0 + 0 +POINT + 5 +151 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +4130.0 + 20 +3850.0 + 30 +0.0 + 0 +ENDBLK + 5 +152 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D5 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D5 + 1 + + 0 +LINE + 5 +154 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +7196.0 + 20 +3850.0 + 30 +0.0 + 11 +10554.0 + 21 +3850.0 + 31 +0.0 + 0 +INSERT + 5 +155 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +7195.0 + 20 +3850.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +156 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +10555.0 + 20 +3850.0 + 30 +0.0 + 0 +TEXT + 5 +157 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +8743.75 + 20 +3893.75 + 30 +0.0 + 40 +87.5 + 1 +3.37 + 72 + 1 + 11 +8875.0 + 21 +3937.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +158 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7195.0 + 20 +3855.0 + 30 +0.0 + 0 +POINT + 5 +159 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +10555.0 + 20 +4205.0 + 30 +0.0 + 0 +POINT + 5 +15A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +10555.0 + 20 +3850.0 + 30 +0.0 + 0 +ENDBLK + 5 +15B + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D6 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D6 + 1 + + 0 +LINE + 5 +15D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +10556.0 + 20 +3850.0 + 30 +0.0 + 11 +13939.0 + 21 +3850.0 + 31 +0.0 + 0 +INSERT + 5 +15E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +10555.0 + 20 +3850.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +15F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +13940.0 + 20 +3850.0 + 30 +0.0 + 0 +TEXT + 5 +160 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +12116.25 + 20 +3893.75 + 30 +0.0 + 40 +87.5 + 1 +3.37 + 72 + 1 + 11 +12247.5 + 21 +3937.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +161 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +10555.0 + 20 +4205.0 + 30 +0.0 + 0 +POINT + 5 +162 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +13940.0 + 20 +4365.0 + 30 +0.0 + 0 +POINT + 5 +163 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +13940.0 + 20 +3850.0 + 30 +0.0 + 0 +ENDBLK + 5 +164 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D7 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D7 + 1 + + 0 +LINE + 5 +166 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +16986.0 + 20 +3850.0 + 30 +0.0 + 11 +17359.0 + 21 +3850.0 + 31 +0.0 + 0 +INSERT + 5 +167 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16985.0 + 20 +3850.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +168 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +17360.0 + 20 +3850.0 + 30 +0.0 + 0 +TEXT + 5 +169 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +17099.583333 + 20 +3893.75 + 30 +0.0 + 40 +87.5 + 1 +32 + 72 + 1 + 11 +17172.5 + 21 +3937.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +16A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16985.0 + 20 +3840.0 + 30 +0.0 + 0 +POINT + 5 +16B + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17360.0 + 20 +4775.0 + 30 +0.0 + 0 +POINT + 5 +16C + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17360.0 + 20 +3850.0 + 30 +0.0 + 0 +ENDBLK + 5 +16D + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D8 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D8 + 1 + + 0 +LINE + 5 +16F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +4131.0 + 20 +3850.0 + 30 +0.0 + 11 +5889.0 + 21 +3850.0 + 31 +0.0 + 0 +INSERT + 5 +170 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +4130.0 + 20 +3850.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +171 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +5890.0 + 20 +3850.0 + 30 +0.0 + 0 +TEXT + 5 +172 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +4893.333333 + 20 +3893.75 + 30 +0.0 + 40 +87.5 + 1 +1.62 + 72 + 1 + 11 +5010.0 + 21 +3937.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +173 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +4130.0 + 20 +3650.0 + 30 +0.0 + 0 +POINT + 5 +174 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5890.0 + 20 +3860.0 + 30 +0.0 + 0 +POINT + 5 +175 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5890.0 + 20 +3850.0 + 30 +0.0 + 0 +ENDBLK + 5 +176 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D9 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D9 + 1 + + 0 +LINE + 5 +178 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +15226.0 + 20 +3850.0 + 30 +0.0 + 11 +16984.0 + 21 +3850.0 + 31 +0.0 + 0 +INSERT + 5 +179 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +15225.0 + 20 +3850.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +17A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16985.0 + 20 +3850.0 + 30 +0.0 + 0 +TEXT + 5 +17B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +15988.333333 + 20 +3893.75 + 30 +0.0 + 40 +87.5 + 1 +1.62 + 72 + 1 + 11 +16105.0 + 21 +3937.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +17C + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15225.0 + 20 +4035.0 + 30 +0.0 + 0 +POINT + 5 +17D + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16985.0 + 20 +3840.0 + 30 +0.0 + 0 +POINT + 5 +17E + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16985.0 + 20 +3850.0 + 30 +0.0 + 0 +ENDBLK + 5 +17F + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D10 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D10 + 1 + + 0 +LINE + 5 +181 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +13941.0 + 20 +3850.0 + 30 +0.0 + 11 +15224.0 + 21 +3850.0 + 31 +0.0 + 0 +INSERT + 5 +182 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +13940.0 + 20 +3850.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +183 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +15225.0 + 20 +3850.0 + 30 +0.0 + 0 +TEXT + 5 +184 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +14465.833333 + 20 +3893.75 + 30 +0.0 + 40 +87.5 + 1 +1.43 + 72 + 1 + 11 +14582.5 + 21 +3937.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +185 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +13940.0 + 20 +4365.0 + 30 +0.0 + 0 +POINT + 5 +186 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15225.0 + 20 +4035.0 + 30 +0.0 + 0 +POINT + 5 +187 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15225.0 + 20 +3850.0 + 30 +0.0 + 0 +ENDBLK + 5 +188 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D11 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D11 + 1 + + 0 +LINE + 5 +18A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +5891.0 + 20 +3850.0 + 30 +0.0 + 11 +7194.0 + 21 +3850.0 + 31 +0.0 + 0 +INSERT + 5 +18B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +5890.0 + 20 +3850.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +18C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +7195.0 + 20 +3850.0 + 30 +0.0 + 0 +TEXT + 5 +18D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +6425.833333 + 20 +3893.75 + 30 +0.0 + 40 +87.5 + 1 +1.43 + 72 + 1 + 11 +6542.5 + 21 +3937.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +18E + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5890.0 + 20 +3860.0 + 30 +0.0 + 0 +POINT + 5 +18F + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7195.0 + 20 +3855.0 + 30 +0.0 + 0 +POINT + 5 +190 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7195.0 + 20 +3850.0 + 30 +0.0 + 0 +ENDBLK + 5 +191 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D12 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D12 + 1 + + 0 +LINE + 5 +193 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +4131.0 + 20 +3500.0 + 30 +0.0 + 11 +4489.0 + 21 +3500.0 + 31 +0.0 + 0 +INSERT + 5 +194 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +4130.0 + 20 +3500.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +195 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +4490.0 + 20 +3500.0 + 30 +0.0 + 0 +TEXT + 5 +196 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +4237.083333 + 20 +3543.75 + 30 +0.0 + 40 +87.5 + 1 +36 + 72 + 1 + 11 +4310.0 + 21 +3587.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +197 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +4130.0 + 20 +2270.0 + 30 +0.0 + 0 +POINT + 5 +198 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +4490.0 + 20 +2270.0 + 30 +0.0 + 0 +POINT + 5 +199 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +4490.0 + 20 +3500.0 + 30 +0.0 + 0 +ENDBLK + 5 +19A + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D13 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D13 + 1 + + 0 +LINE + 5 +19C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +4491.0 + 20 +3500.0 + 30 +0.0 + 11 +8999.0 + 21 +3500.0 + 31 +0.0 + 0 +INSERT + 5 +19D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +4490.0 + 20 +3500.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +19E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9000.0 + 20 +3500.0 + 30 +0.0 + 0 +TEXT + 5 +19F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +6628.333333 + 20 +3543.75 + 30 +0.0 + 40 +87.5 + 1 +4.51 + 72 + 1 + 11 +6745.0 + 21 +3587.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +1A0 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +4490.0 + 20 +2270.0 + 30 +0.0 + 0 +POINT + 5 +1A1 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9000.0 + 20 +2625.0 + 30 +0.0 + 0 +POINT + 5 +1A2 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9000.0 + 20 +3500.0 + 30 +0.0 + 0 +ENDBLK + 5 +1A3 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D14 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D14 + 1 + + 0 +LINE + 5 +1A5 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9001.0 + 20 +3500.0 + 30 +0.0 + 11 +9364.0 + 21 +3500.0 + 31 +0.0 + 0 +INSERT + 5 +1A6 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9000.0 + 20 +3500.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +1A7 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9365.0 + 20 +3500.0 + 30 +0.0 + 0 +TEXT + 5 +1A8 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9109.583333 + 20 +3543.75 + 30 +0.0 + 40 +87.5 + 1 +36 + 72 + 1 + 11 +9182.5 + 21 +3587.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +1A9 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9000.0 + 20 +2625.0 + 30 +0.0 + 0 +POINT + 5 +1AA + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9365.0 + 20 +3175.0 + 30 +0.0 + 0 +POINT + 5 +1AB + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9365.0 + 20 +3500.0 + 30 +0.0 + 0 +ENDBLK + 5 +1AC + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D15 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D15 + 1 + + 0 +LINE + 5 +1AE + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9366.0 + 20 +3500.0 + 30 +0.0 + 11 +11744.0 + 21 +3500.0 + 31 +0.0 + 0 +INSERT + 5 +1AF + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9365.0 + 20 +3500.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +1B0 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +11745.0 + 20 +3500.0 + 30 +0.0 + 0 +TEXT + 5 +1B1 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +10423.75 + 20 +3543.75 + 30 +0.0 + 40 +87.5 + 1 +2.38 + 72 + 1 + 11 +10555.0 + 21 +3587.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +1B2 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9365.0 + 20 +3175.0 + 30 +0.0 + 0 +POINT + 5 +1B3 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +11745.0 + 20 +3620.0 + 30 +0.0 + 0 +POINT + 5 +1B4 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +11745.0 + 20 +3500.0 + 30 +0.0 + 0 +ENDBLK + 5 +1B5 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D16 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D16 + 1 + + 0 +LINE + 5 +1B7 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +11746.0 + 20 +3500.0 + 30 +0.0 + 11 +12114.0 + 21 +3500.0 + 31 +0.0 + 0 +INSERT + 5 +1B8 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +11745.0 + 20 +3500.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +1B9 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +12115.0 + 20 +3500.0 + 30 +0.0 + 0 +TEXT + 5 +1BA + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +11857.083333 + 20 +3543.75 + 30 +0.0 + 40 +87.5 + 1 +36 + 72 + 1 + 11 +11930.0 + 21 +3587.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +1BB + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +11745.0 + 20 +3620.0 + 30 +0.0 + 0 +POINT + 5 +1BC + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +12115.0 + 20 +3515.0 + 30 +0.0 + 0 +POINT + 5 +1BD + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +12115.0 + 20 +3500.0 + 30 +0.0 + 0 +ENDBLK + 5 +1BE + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D17 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D17 + 1 + + 0 +LINE + 5 +1C0 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +12116.0 + 20 +3500.0 + 30 +0.0 + 11 +16629.0 + 21 +3500.0 + 31 +0.0 + 0 +INSERT + 5 +1C1 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +12115.0 + 20 +3500.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +1C2 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16630.0 + 20 +3500.0 + 30 +0.0 + 0 +TEXT + 5 +1C3 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +14255.833333 + 20 +3543.75 + 30 +0.0 + 40 +87.5 + 1 +4.51 + 72 + 1 + 11 +14372.5 + 21 +3587.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +1C4 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +12115.0 + 20 +3515.0 + 30 +0.0 + 0 +POINT + 5 +1C5 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16630.0 + 20 +3675.0 + 30 +0.0 + 0 +POINT + 5 +1C6 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16630.0 + 20 +3500.0 + 30 +0.0 + 0 +ENDBLK + 5 +1C7 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D18 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D18 + 1 + + 0 +LINE + 5 +1C9 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +16631.0 + 20 +3500.0 + 30 +0.0 + 11 +16984.0 + 21 +3500.0 + 31 +0.0 + 0 +INSERT + 5 +1CA + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16630.0 + 20 +3500.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +1CB + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16985.0 + 20 +3500.0 + 30 +0.0 + 0 +TEXT + 5 +1CC + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +16734.583333 + 20 +3543.75 + 30 +0.0 + 40 +87.5 + 1 +36 + 72 + 1 + 11 +16807.5 + 21 +3587.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +1CD + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16630.0 + 20 +3675.0 + 30 +0.0 + 0 +POINT + 5 +1CE + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16985.0 + 20 +3525.0 + 30 +0.0 + 0 +POINT + 5 +1CF + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16985.0 + 20 +3500.0 + 30 +0.0 + 0 +ENDBLK + 5 +1D0 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D19 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D19 + 1 + + 0 +LINE + 5 +1D2 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +4131.0 + 20 +3150.0 + 30 +0.0 + 11 +16984.0 + 21 +3150.0 + 31 +0.0 + 0 +INSERT + 5 +1D3 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +4130.0 + 20 +3150.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +1D4 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16985.0 + 20 +3150.0 + 30 +0.0 + 0 +TEXT + 5 +1D5 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +10397.083333 + 20 +3193.75 + 30 +0.0 + 40 +87.5 + 1 +12.86 + 72 + 1 + 11 +10557.5 + 21 +3237.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +1D6 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +4130.0 + 20 +2890.0 + 30 +0.0 + 0 +POINT + 5 +1D7 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16985.0 + 20 +2890.0 + 30 +0.0 + 0 +POINT + 5 +1D8 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16985.0 + 20 +3150.0 + 30 +0.0 + 0 +ENDBLK + 5 +1D9 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +DREIECK + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +DREIECK + 1 + + 0 +POLYLINE + 5 +1DB + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 41 +175.0 + 0 +VERTEX + 5 +205A + 8 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +205B + 8 +0 + 10 +0.0 + 20 +87.5 + 30 +0.0 + 40 +175.0 + 0 +SEQEND + 5 +205C + 8 +0 + 0 +ENDBLK + 5 +1DF + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D21 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D21 + 1 + + 0 +LINE + 5 +1E1 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +2375.0 + 20 +5256.0 + 30 +0.0 + 11 +2375.0 + 21 +8299.0 + 31 +0.0 + 0 +INSERT + 5 +1E2 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +2375.0 + 20 +5255.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +1E3 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +2375.0 + 20 +8300.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +1E4 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +2331.25 + 20 +6660.833333 + 30 +0.0 + 40 +87.5 + 1 +3.00 + 50 +90.0 + 72 + 1 + 11 +2287.5 + 21 +6777.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +1E5 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +1140.0 + 20 +5255.0 + 30 +0.0 + 0 +POINT + 5 +1E6 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +1140.0 + 20 +8300.0 + 30 +0.0 + 0 +POINT + 5 +1E7 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +2375.0 + 20 +8300.0 + 30 +0.0 + 0 +ENDBLK + 5 +1E8 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D22 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D22 + 1 + + 0 +LINE + 5 +1EA + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +2375.0 + 20 +8301.0 + 30 +0.0 + 11 +2375.0 + 21 +10604.0 + 31 +0.0 + 0 +INSERT + 5 +1EB + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +2375.0 + 20 +8300.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +1EC + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +2375.0 + 20 +10605.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +1ED + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +2331.25 + 20 +9321.25 + 30 +0.0 + 40 +87.5 + 1 +2.36 + 50 +90.0 + 72 + 1 + 11 +2287.5 + 21 +9452.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +1EE + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +1140.0 + 20 +8300.0 + 30 +0.0 + 0 +POINT + 5 +1EF + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +10560.0 + 20 +10605.0 + 30 +0.0 + 0 +POINT + 5 +1F0 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +2375.0 + 20 +10605.0 + 30 +0.0 + 0 +ENDBLK + 5 +1F1 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D23 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D23 + 1 + + 0 +LINE + 5 +1F3 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +7251.0 + 20 +10505.0 + 30 +0.0 + 11 +8739.0 + 21 +10505.0 + 31 +0.0 + 0 +INSERT + 5 +1F4 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +7250.0 + 20 +10505.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +1F5 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +8740.0 + 20 +10505.0 + 30 +0.0 + 0 +TEXT + 5 +1F6 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +7878.333333 + 20 +10548.75 + 30 +0.0 + 40 +87.5 + 1 +1.49 + 72 + 1 + 11 +7995.0 + 21 +10592.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +1F7 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7250.0 + 20 +10195.0 + 30 +0.0 + 0 +POINT + 5 +1F8 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8740.0 + 20 +10195.0 + 30 +0.0 + 0 +POINT + 5 +1F9 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8740.0 + 20 +10505.0 + 30 +0.0 + 0 +ENDBLK + 5 +1FA + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D24 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D24 + 1 + + 0 +LINE + 5 +1FC + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +3373.151369 + 20 +7103.844606 + 30 +0.0 + 11 +6931.455372 + 21 +9327.784608 + 31 +0.0 + 0 +INSERT + 5 +1FD + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +3372.303371 + 20 +7103.314607 + 30 +0.0 + 50 +212.005383 + 0 +INSERT + 5 +1FE + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +6932.303371 + 20 +9328.314607 + 30 +0.0 + 50 +32.005383 + 0 +TEXT + 5 +1FF + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +5023.999461 + 20 +8187.216747 + 30 +0.0 + 40 +87.5 + 1 +4.20 + 50 +32.005383 + 72 + 1 + 11 +5105.928464 + 21 +8290.014458 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +200 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +3715.0 + 20 +6555.0 + 30 +0.0 + 0 +POINT + 5 +201 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7275.0 + 20 +8780.0 + 30 +0.0 + 0 +POINT + 5 +202 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +6932.303371 + 20 +9328.314607 + 30 +0.0 + 0 +ENDBLK + 5 +203 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D25 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D25 + 1 + + 0 +LINE + 5 +205 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +11023.279211 + 20 +11578.764241 + 30 +0.0 + 11 +14756.582322 + 21 +9249.822809 + 31 +0.0 + 0 +INSERT + 5 +206 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +11022.430766 + 20 +11579.293525 + 30 +0.0 + 50 +148.042904 + 0 +INSERT + 5 +207 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +14757.430766 + 20 +9249.293525 + 30 +0.0 + 50 +328.042904 + 0 +TEXT + 5 +208 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +12807.915158 + 20 +10517.022152 + 30 +0.0 + 40 +87.5 + 1 +4.40 + 50 +328.042904 + 72 + 1 + 11 +12936.243124 + 21 +10488.532433 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +209 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +10555.0 + 20 +10830.0 + 30 +0.0 + 0 +POINT + 5 +20A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +14290.0 + 20 +8500.0 + 30 +0.0 + 0 +POINT + 5 +20B + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +14757.430766 + 20 +9249.293525 + 30 +0.0 + 0 +ENDBLK + 5 +20C + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D26 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D26 + 1 + + 0 +LINE + 5 +20E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +13861.722804 + 20 +8965.83185 + 30 +0.0 + 11 +17354.730878 + 21 +8651.01138 + 31 +0.0 + 0 +INSERT + 5 +20F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +13860.726841 + 20 +8965.921615 + 30 +0.0 + 50 +174.849918 + 0 +INSERT + 5 +210 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +17355.726841 + 20 +8650.921615 + 30 +0.0 + 50 +354.849918 + 0 +TEXT + 5 +211 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +15495.958374 + 20 +8862.467568 + 30 +0.0 + 40 +87.5 + 1 +3.51 + 50 +354.849918 + 72 + 1 + 11 +15616.08127 + 21 +8895.568376 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +212 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +13830.0 + 20 +8625.0 + 30 +0.0 + 0 +POINT + 5 +213 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17325.0 + 20 +8310.0 + 30 +0.0 + 0 +POINT + 5 +214 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17355.726841 + 20 +8650.921615 + 30 +0.0 + 0 +ENDBLK + 5 +215 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +HOEHE + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +HOEHE + 1 + + 0 +POLYLINE + 5 +217 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 0 +VERTEX + 5 +205D + 8 +0 + 10 +0.019553 + 20 +0.17035 + 30 +0.0 + 0 +VERTEX + 5 +205E + 8 +0 + 10 +87.539037 + 20 +87.845238 + 30 +0.0 + 0 +VERTEX + 5 +205F + 8 +0 + 10 +-87.890695 + 20 +87.845238 + 30 +0.0 + 0 +SEQEND + 5 +2060 + 8 +0 + 0 +ENDBLK + 5 +21C + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D28 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D28 + 1 + + 0 +LINE + 5 +21E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +18125.0 + 20 +4501.0 + 30 +0.0 + 11 +18125.0 + 21 +5739.0 + 31 +0.0 + 0 +INSERT + 5 +21F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18125.0 + 20 +4500.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +220 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18125.0 + 20 +5740.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +221 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +18081.25 + 20 +5017.916667 + 30 +0.0 + 40 +87.5 + 1 +1.21 + 50 +90.0 + 72 + 1 + 11 +18037.5 + 21 +5120.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +222 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16970.0 + 20 +4500.0 + 30 +0.0 + 0 +POINT + 5 +223 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16970.0 + 20 +5740.0 + 30 +0.0 + 0 +POINT + 5 +224 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +18125.0 + 20 +5740.0 + 30 +0.0 + 0 +ENDBLK + 5 +225 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D29 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D29 + 1 + + 0 +LINE + 5 +227 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +18125.0 + 20 +5741.0 + 30 +0.0 + 11 +18125.0 + 21 +5949.0 + 31 +0.0 + 0 +INSERT + 5 +228 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18125.0 + 20 +5740.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +229 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18125.0 + 20 +5950.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +22A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +18081.25 + 20 +5786.666667 + 30 +0.0 + 40 +87.5 + 1 +18 + 50 +90.0 + 72 + 1 + 11 +18037.5 + 21 +5845.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +22B + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16970.0 + 20 +5740.0 + 30 +0.0 + 0 +POINT + 5 +22C + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +18120.0 + 20 +5950.0 + 30 +0.0 + 0 +POINT + 5 +22D + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +18125.0 + 20 +5950.0 + 30 +0.0 + 0 +ENDBLK + 5 +22E + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D30 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D30 + 1 + + 0 +LINE + 5 +230 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +18125.0 + 20 +5951.0 + 30 +0.0 + 11 +18125.0 + 21 +7359.0 + 31 +0.0 + 0 +INSERT + 5 +231 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18125.0 + 20 +5950.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +232 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18125.0 + 20 +7360.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +233 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +18081.25 + 20 +6545.625 + 30 +0.0 + 40 +87.5 + 1 +1.40 + 50 +90.0 + 72 + 1 + 11 +18037.5 + 21 +6655.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +234 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +18120.0 + 20 +5950.0 + 30 +0.0 + 0 +POINT + 5 +235 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16855.0 + 20 +7360.0 + 30 +0.0 + 0 +POINT + 5 +236 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +18125.0 + 20 +7360.0 + 30 +0.0 + 0 +ENDBLK + 5 +237 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D31 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D31 + 1 + + 0 +LINE + 5 +239 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +14290.0 + 20 +12856.0 + 30 +0.0 + 11 +14290.0 + 21 +13259.0 + 31 +0.0 + 0 +INSERT + 5 +23A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +14290.0 + 20 +12855.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +23B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +14290.0 + 20 +13260.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +23C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +14246.25 + 20 +12999.166667 + 30 +0.0 + 40 +87.5 + 1 +16 + 50 +90.0 + 72 + 1 + 11 +14202.5 + 21 +13057.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +23D + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +13590.0 + 20 +12855.0 + 30 +0.0 + 0 +POINT + 5 +23E + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +13560.0 + 20 +13260.0 + 30 +0.0 + 0 +POINT + 5 +23F + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +14290.0 + 20 +13260.0 + 30 +0.0 + 0 +ENDBLK + 5 +240 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D32 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D32 + 1 + + 0 +LINE + 5 +242 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +14290.0 + 20 +13261.0 + 30 +0.0 + 11 +14290.0 + 21 +13699.0 + 31 +0.0 + 0 +INSERT + 5 +243 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +14290.0 + 20 +13260.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +244 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +14290.0 + 20 +13700.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +245 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +14246.25 + 20 +13421.666667 + 30 +0.0 + 40 +87.5 + 1 +18 + 50 +90.0 + 72 + 1 + 11 +14202.5 + 21 +13480.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +246 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +13560.0 + 20 +13260.0 + 30 +0.0 + 0 +POINT + 5 +247 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +13580.0 + 20 +13700.0 + 30 +0.0 + 0 +POINT + 5 +248 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +14290.0 + 20 +13700.0 + 30 +0.0 + 0 +ENDBLK + 5 +249 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D33 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D33 + 1 + + 0 +LINE + 5 +24B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +14290.0 + 20 +13701.0 + 30 +0.0 + 11 +14290.0 + 21 +13774.0 + 31 +0.0 + 0 +INSERT + 5 +24C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +14290.0 + 20 +13700.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +24D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +14290.0 + 20 +13775.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +24E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +14246.25 + 20 +13805.833333 + 30 +0.0 + 40 +87.5 + 1 +3 + 50 +90.0 + 72 + 1 + 11 +14202.5 + 21 +13835.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +24F + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +13580.0 + 20 +13700.0 + 30 +0.0 + 0 +POINT + 5 +250 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +13590.0 + 20 +13775.0 + 30 +0.0 + 0 +POINT + 5 +251 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +14290.0 + 20 +13775.0 + 30 +0.0 + 0 +ENDBLK + 5 +252 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D34 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D34 + 1 + + 0 +LINE + 5 +254 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +14290.0 + 20 +12816.0 + 30 +0.0 + 11 +14290.0 + 21 +12854.0 + 31 +0.0 + 0 +INSERT + 5 +255 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +14290.0 + 20 +12815.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +256 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +14290.0 + 20 +12855.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +257 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +14246.25 + 20 +12710.416667 + 30 +0.0 + 40 +87.5 + 1 +1 + 50 +90.0 + 72 + 1 + 11 +14202.5 + 21 +12725.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +258 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +13590.0 + 20 +12815.0 + 30 +0.0 + 0 +POINT + 5 +259 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +13590.0 + 20 +12855.0 + 30 +0.0 + 0 +POINT + 5 +25A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +14290.0 + 20 +12855.0 + 30 +0.0 + 0 +ENDBLK + 5 +25B + 8 +0 + 0 +ENDSEC + 0 +SECTION + 2 +ENTITIES + 0 +POLYLINE + 5 +25C + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +2061 + 8 +0 + 10 +500.0 + 20 +125.0 + 30 +0.0 + 0 +VERTEX + 5 +2062 + 8 +0 + 10 +20900.0 + 20 +125.0 + 30 +0.0 + 0 +VERTEX + 5 +2063 + 8 +0 + 10 +20900.0 + 20 +14725.0 + 30 +0.0 + 0 +VERTEX + 5 +2064 + 8 +0 + 10 +500.0 + 20 +14725.0 + 30 +0.0 + 0 +SEQEND + 5 +2065 + 8 +0 + 0 +POLYLINE + 5 +262 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +2066 + 8 +0 + 10 +20900.0 + 20 +1500.0 + 30 +0.0 + 0 +VERTEX + 5 +2067 + 8 +0 + 10 +16275.0 + 20 +1500.0 + 30 +0.0 + 0 +VERTEX + 5 +2068 + 8 +0 + 10 +16275.0 + 20 +125.0 + 30 +0.0 + 0 +SEQEND + 5 +2069 + 8 +0 + 0 +POLYLINE + 5 +267 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +206A + 8 +0 + 10 +18650.0 + 20 +125.0 + 30 +0.0 + 0 +VERTEX + 5 +206B + 8 +0 + 10 +18650.0 + 20 +1495.0 + 30 +0.0 + 0 +SEQEND + 5 +206C + 8 +0 + 0 +POLYLINE + 5 +26B + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +206D + 8 +0 + 10 +17525.0 + 20 +125.0 + 30 +0.0 + 0 +VERTEX + 5 +206E + 8 +0 + 10 +17525.0 + 20 +1500.0 + 30 +0.0 + 0 +SEQEND + 5 +206F + 8 +0 + 0 +POLYLINE + 5 +26F + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +2070 + 8 +0 + 10 +17525.0 + 20 +500.0 + 30 +0.0 + 0 +VERTEX + 5 +2071 + 8 +0 + 10 +20900.0 + 20 +500.0 + 30 +0.0 + 0 +SEQEND + 5 +2072 + 8 +0 + 0 +POLYLINE + 5 +273 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +2073 + 8 +0 + 10 +17525.0 + 20 +1125.0 + 30 +0.0 + 0 +VERTEX + 5 +2074 + 8 +0 + 10 +20900.0 + 20 +1125.0 + 30 +0.0 + 0 +SEQEND + 5 +2075 + 8 +0 + 0 +POLYLINE + 5 +277 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +2076 + 8 +0 + 10 +17525.0 + 20 +250.0 + 30 +0.0 + 0 +VERTEX + 5 +2077 + 8 +0 + 10 +16275.0 + 20 +250.0 + 30 +0.0 + 0 +SEQEND + 5 +2078 + 8 +0 + 0 +POLYLINE + 5 +27B + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +2079 + 8 +0 + 10 +17525.0 + 20 +375.0 + 30 +0.0 + 0 +VERTEX + 5 +207A + 8 +0 + 10 +16275.0 + 20 +375.0 + 30 +0.0 + 0 +SEQEND + 5 +207B + 8 +0 + 0 +POLYLINE + 5 +27F + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +207C + 8 +0 + 10 +17525.0 + 20 +500.0 + 30 +0.0 + 0 +VERTEX + 5 +207D + 8 +0 + 10 +16275.0 + 20 +500.0 + 30 +0.0 + 0 +SEQEND + 5 +207E + 8 +0 + 0 +POLYLINE + 5 +283 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +207F + 8 +0 + 10 +17525.0 + 20 +625.0 + 30 +0.0 + 0 +VERTEX + 5 +2080 + 8 +0 + 10 +16275.0 + 20 +625.0 + 30 +0.0 + 0 +SEQEND + 5 +2081 + 8 +0 + 0 +POLYLINE + 5 +287 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +2082 + 8 +0 + 10 +17525.0 + 20 +750.0 + 30 +0.0 + 0 +VERTEX + 5 +2083 + 8 +0 + 10 +16275.0 + 20 +750.0 + 30 +0.0 + 0 +SEQEND + 5 +2084 + 8 +0 + 0 +POLYLINE + 5 +28B + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +2085 + 8 +0 + 10 +17525.0 + 20 +875.0 + 30 +0.0 + 0 +VERTEX + 5 +2086 + 8 +0 + 10 +16275.0 + 20 +875.0 + 30 +0.0 + 0 +SEQEND + 5 +2087 + 8 +0 + 0 +POLYLINE + 5 +28F + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +2088 + 8 +0 + 10 +17525.0 + 20 +1000.0 + 30 +0.0 + 0 +VERTEX + 5 +2089 + 8 +0 + 10 +16275.0 + 20 +1000.0 + 30 +0.0 + 0 +SEQEND + 5 +208A + 8 +0 + 0 +POLYLINE + 5 +293 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +208B + 8 +0 + 10 +17525.0 + 20 +1125.0 + 30 +0.0 + 0 +VERTEX + 5 +208C + 8 +0 + 10 +16275.0 + 20 +1125.0 + 30 +0.0 + 0 +SEQEND + 5 +208D + 8 +0 + 0 +POLYLINE + 5 +297 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +208E + 8 +0 + 10 +18650.0 + 20 +1375.0 + 30 +0.0 + 0 +VERTEX + 5 +208F + 8 +0 + 10 +20901.604101 + 20 +1375.0 + 30 +0.0 + 0 +SEQEND + 5 +2090 + 8 +0 + 0 +TEXT + 5 +29B + 8 +LEGENDE-35 + 10 +18745.266644 + 20 +1210.264338 + 30 +0.0 + 40 +87.5 + 1 +MASSTAB 1:25 + 0 +TEXT + 5 +29C + 8 +LEGENDE-35 + 10 +18730.0 + 20 +260.0 + 30 +0.0 + 40 +87.5 + 1 +Name + 0 +TEXT + 5 +29D + 8 +LEGENDE-35 + 10 +17705.0 + 20 +225.0 + 30 +0.0 + 40 +87.5 + 1 +001 + 0 +POLYLINE + 5 +29E + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +2091 + 8 +0 + 10 +20525.0 + 20 +125.0 + 30 +0.0 + 0 +VERTEX + 5 +2092 + 8 +0 + 10 +20525.0 + 20 +495.0 + 30 +0.0 + 0 +SEQEND + 5 +2093 + 8 +0 + 0 +TEXT + 5 +2A2 + 8 +LEGENDE-35 + 10 +20580.0 + 20 +365.0 + 30 +0.0 + 40 +87.5 + 1 +Blatt + 41 +0.75 + 0 +POLYLINE + 5 +2A3 + 8 +PE-FOLIE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +2094 + 8 +PE-FOLIE + 10 +4125.0 + 20 +4512.5 + 30 +0.0 + 0 +VERTEX + 5 +2095 + 8 +PE-FOLIE + 10 +16990.0 + 20 +4512.5 + 30 +0.0 + 0 +SEQEND + 5 +2096 + 8 +PE-FOLIE + 0 +POLYLINE + 5 +2A7 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +2097 + 8 +MAUERWERK + 10 +4125.0 + 20 +4525.0 + 30 +0.0 + 0 +VERTEX + 5 +2098 + 8 +MAUERWERK + 10 +4490.0 + 20 +4525.0 + 30 +0.0 + 0 +VERTEX + 5 +2099 + 8 +MAUERWERK + 10 +4490.0 + 20 +5740.0 + 30 +0.0 + 0 +VERTEX + 5 +209A + 8 +MAUERWERK + 10 +4125.0 + 20 +5740.0 + 30 +0.0 + 0 +SEQEND + 5 +209B + 8 +MAUERWERK + 0 +POLYLINE + 5 +2AD + 8 +PE-FOLIE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +209C + 8 +PE-FOLIE + 10 +4225.684022 + 20 +5752.778177 + 30 +0.0 + 0 +VERTEX + 5 +209D + 8 +PE-FOLIE + 10 +4490.0 + 20 +5752.223381 + 30 +0.0 + 0 +SEQEND + 5 +209E + 8 +PE-FOLIE + 0 +POLYLINE + 5 +2B1 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +209F + 8 +HOLZ + 10 +4217.5 + 20 +5765.0 + 30 +0.0 + 0 +VERTEX + 5 +20A0 + 8 +HOLZ + 10 +4397.5 + 20 +5765.0 + 30 +0.0 + 0 +VERTEX + 5 +20A1 + 8 +HOLZ + 10 +4397.5 + 20 +5945.0 + 30 +0.0 + 0 +VERTEX + 5 +20A2 + 8 +HOLZ + 10 +4217.5 + 20 +5945.0 + 30 +0.0 + 0 +SEQEND + 5 +20A3 + 8 +HOLZ + 0 +POLYLINE + 5 +2B7 + 8 +DECKEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +20A4 + 8 +DECKEN + 10 +4125.0 + 20 +4500.0 + 30 +0.0 + 0 +VERTEX + 5 +20A5 + 8 +DECKEN + 10 +4125.0 + 20 +4335.0 + 30 +0.0 + 0 +VERTEX + 5 +20A6 + 8 +DECKEN + 10 +4490.0 + 20 +4335.0 + 30 +0.0 + 0 +VERTEX + 5 +20A7 + 8 +DECKEN + 10 +4490.0 + 20 +4340.0 + 30 +0.0 + 0 +VERTEX + 5 +20A8 + 8 +DECKEN + 10 +16625.0 + 20 +4340.0 + 30 +0.0 + 0 +VERTEX + 5 +20A9 + 8 +DECKEN + 10 +16625.0 + 20 +4335.0 + 30 +0.0 + 0 +VERTEX + 5 +20AA + 8 +DECKEN + 10 +16990.0 + 20 +4335.0 + 30 +0.0 + 0 +VERTEX + 5 +20AB + 8 +DECKEN + 10 +16990.0 + 20 +4500.0 + 30 +0.0 + 0 +SEQEND + 5 +20AC + 8 +DECKEN + 0 +POLYLINE + 5 +2C1 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +20AD + 8 +HOLZ + 10 +7082.5 + 20 +7495.0 + 30 +0.0 + 0 +VERTEX + 5 +20AE + 8 +HOLZ + 10 +7282.5 + 20 +7495.0 + 30 +0.0 + 0 +VERTEX + 5 +20AF + 8 +HOLZ + 10 +7282.5 + 20 +7735.0 + 30 +0.0 + 0 +VERTEX + 5 +20B0 + 8 +HOLZ + 10 +7082.5 + 20 +7735.0 + 30 +0.0 + 0 +SEQEND + 5 +20B1 + 8 +HOLZ + 0 +POLYLINE + 5 +2C7 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +20B2 + 8 +HOLZ + 10 +4217.5 + 20 +5909.624648 + 30 +0.0 + 0 +VERTEX + 5 +20B3 + 8 +HOLZ + 10 +3804.997602 + 20 +5651.864542 + 30 +0.0 + 0 +VERTEX + 5 +20B4 + 8 +HOLZ + 10 +3711.310187 + 20 +5801.381599 + 30 +0.0 + 0 +VERTEX + 5 +20B5 + 8 +HOLZ + 10 +3790.312391 + 20 +5854.940316 + 30 +0.0 + 0 +VERTEX + 5 +20B6 + 8 +HOLZ + 10 +10557.5 + 20 +10083.548452 + 30 +0.0 + 0 +SEQEND + 5 +20B7 + 8 +HOLZ + 0 +POLYLINE + 5 +2CE + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +20B8 + 8 +HOLZ + 10 +14032.5 + 20 +7495.0 + 30 +0.0 + 0 +VERTEX + 5 +20B9 + 8 +HOLZ + 10 +13832.5 + 20 +7495.0 + 30 +0.0 + 0 +VERTEX + 5 +20BA + 8 +HOLZ + 10 +13832.5 + 20 +7735.0 + 30 +0.0 + 0 +VERTEX + 5 +20BB + 8 +HOLZ + 10 +14032.5 + 20 +7735.0 + 30 +0.0 + 0 +SEQEND + 5 +20BC + 8 +HOLZ + 0 +POLYLINE + 5 +2D4 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +20BD + 8 +HOLZ + 10 +16897.5 + 20 +5765.0 + 30 +0.0 + 0 +VERTEX + 5 +20BE + 8 +HOLZ + 10 +16717.5 + 20 +5765.0 + 30 +0.0 + 0 +VERTEX + 5 +20BF + 8 +HOLZ + 10 +16717.5 + 20 +5945.0 + 30 +0.0 + 0 +VERTEX + 5 +20C0 + 8 +HOLZ + 10 +16897.5 + 20 +5945.0 + 30 +0.0 + 0 +SEQEND + 5 +20C1 + 8 +HOLZ + 0 +POLYLINE + 5 +2DA + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +20C2 + 8 +MAUERWERK + 10 +16990.0 + 20 +4525.0 + 30 +0.0 + 0 +VERTEX + 5 +20C3 + 8 +MAUERWERK + 10 +16625.0 + 20 +4525.0 + 30 +0.0 + 0 +VERTEX + 5 +20C4 + 8 +MAUERWERK + 10 +16625.0 + 20 +5740.0 + 30 +0.0 + 0 +VERTEX + 5 +20C5 + 8 +MAUERWERK + 10 +16990.0 + 20 +5740.0 + 30 +0.0 + 0 +SEQEND + 5 +20C6 + 8 +MAUERWERK + 0 +POLYLINE + 5 +2E0 + 8 +PE-FOLIE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +20C7 + 8 +PE-FOLIE + 10 +16889.315978 + 20 +5752.778177 + 30 +0.0 + 0 +VERTEX + 5 +20C8 + 8 +PE-FOLIE + 10 +16625.0 + 20 +5752.223381 + 30 +0.0 + 0 +SEQEND + 5 +20C9 + 8 +PE-FOLIE + 0 +POLYLINE + 5 +2E4 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +20CA + 8 +HOLZ + 10 +10477.5 + 20 +9596.0 + 30 +0.0 + 0 +VERTEX + 5 +20CB + 8 +HOLZ + 10 +10477.5 + 20 +9856.0 + 30 +0.0 + 0 +VERTEX + 5 +20CC + 8 +HOLZ + 10 +10637.5 + 20 +9856.0 + 30 +0.0 + 0 +VERTEX + 5 +20CD + 8 +HOLZ + 10 +10637.5 + 20 +9596.0 + 30 +0.0 + 0 +SEQEND + 5 +20CE + 8 +HOLZ + 0 +POLYLINE + 5 +2EA + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +20CF + 8 +HOLZ + 10 +10557.5 + 20 +9871.296339 + 30 +0.0 + 0 +VERTEX + 5 +20D0 + 8 +HOLZ + 10 +10533.020741 + 20 +9856.0 + 30 +0.0 + 0 +SEQEND + 5 +20D1 + 8 +HOLZ + 0 +POLYLINE + 5 +2EE + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +20D2 + 8 +HOLZ + 10 +10477.5 + 20 +9821.306791 + 30 +0.0 + 0 +VERTEX + 5 +20D3 + 8 +HOLZ + 10 +7138.711204 + 20 +7735.0 + 30 +0.0 + 0 +SEQEND + 5 +20D4 + 8 +HOLZ + 0 +POLYLINE + 5 +2F2 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +20D5 + 8 +HOLZ + 10 +10557.5 + 20 +9871.296339 + 30 +0.0 + 0 +VERTEX + 5 +20D6 + 8 +HOLZ + 10 +10581.979259 + 20 +9856.0 + 30 +0.0 + 0 +SEQEND + 5 +20D7 + 8 +HOLZ + 0 +POLYLINE + 5 +2F6 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +20D8 + 8 +HOLZ + 10 +10637.5 + 20 +9821.306791 + 30 +0.0 + 0 +VERTEX + 5 +20D9 + 8 +HOLZ + 10 +13976.288796 + 20 +7735.0 + 30 +0.0 + 0 +SEQEND + 5 +20DA + 8 +HOLZ + 0 +POINT + 5 +2FA + 8 +HOLZ + 10 +6441.068013 + 20 +4525.0 + 30 +0.0 + 0 +POINT + 5 +2FB + 8 +HOLZ + 10 +8502.789103 + 20 +4525.0 + 30 +0.0 + 0 +POINT + 5 +2FC + 8 +HOLZ + 10 +10564.510193 + 20 +4525.0 + 30 +0.0 + 0 +POINT + 5 +2FD + 8 +HOLZ + 10 +12626.231282 + 20 +4525.0 + 30 +0.0 + 0 +POINT + 5 +2FE + 8 +HOLZ + 10 +14687.952372 + 20 +4525.0 + 30 +0.0 + 0 +POINT + 5 +2FF + 8 +HOLZ + 10 +16625.0 + 20 +4649.673462 + 30 +0.0 + 0 +POINT + 5 +300 + 8 +HOLZ + 10 +14618.605449 + 20 +4705.0 + 30 +0.0 + 0 +POINT + 5 +301 + 8 +HOLZ + 10 +12556.884359 + 20 +4705.0 + 30 +0.0 + 0 +POINT + 5 +302 + 8 +HOLZ + 10 +10495.163269 + 20 +4705.0 + 30 +0.0 + 0 +POINT + 5 +303 + 8 +HOLZ + 10 +8433.442179 + 20 +4705.0 + 30 +0.0 + 0 +POINT + 5 +304 + 8 +HOLZ + 10 +6371.72109 + 20 +4705.0 + 30 +0.0 + 0 +POLYLINE + 5 +305 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +20DB + 8 +HOLZ + 10 +5816.944191 + 20 +4705.004962 + 30 +0.0 + 0 +VERTEX + 5 +20DC + 8 +HOLZ + 10 +4490.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +20DD + 8 +HOLZ + 10 +4490.0 + 20 +4525.0 + 30 +0.0 + 0 +SEQEND + 5 +20DE + 8 +HOLZ + 0 +POLYLINE + 5 +30A + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +20DF + 8 +HOLZ + 10 +5827.147847 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +20E0 + 8 +HOLZ + 10 +5827.147628 + 20 +4704.999605 + 30 +0.0 + 0 +SEQEND + 5 +20E1 + 8 +HOLZ + 0 +POLYLINE + 5 +30E + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +20E2 + 8 +HOLZ + 10 +7082.5 + 20 +6974.383492 + 30 +0.0 + 0 +VERTEX + 5 +20E3 + 8 +HOLZ + 10 +5851.42476 + 20 +4748.886988 + 30 +0.0 + 0 +SEQEND + 5 +20E4 + 8 +HOLZ + 0 +POLYLINE + 5 +312 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +20E5 + 8 +HOLZ + 10 +7082.367224 + 20 +6974.411882 + 30 +0.0 + 0 +VERTEX + 5 +20E6 + 8 +HOLZ + 10 +7112.367224 + 20 +6974.411882 + 30 +0.0 + 0 +SEQEND + 5 +20E7 + 8 +HOLZ + 0 +POLYLINE + 5 +316 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +20E8 + 8 +HOLZ + 10 +7082.661895 + 20 +6599.209373 + 30 +0.0 + 0 +VERTEX + 5 +20E9 + 8 +HOLZ + 10 +7112.367224 + 20 +6974.411882 + 30 +0.0 + 0 +SEQEND + 5 +20EA + 8 +HOLZ + 0 +POLYLINE + 5 +31A + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +20EB + 8 +HOLZ + 10 +7082.5 + 20 +6602.538277 + 30 +0.0 + 0 +VERTEX + 5 +20EC + 8 +HOLZ + 10 +7082.5 + 20 +4705.0 + 30 +0.0 + 0 +SEQEND + 5 +20ED + 8 +HOLZ + 0 +POLYLINE + 5 +31E + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +20EE + 8 +HOLZ + 10 +5849.618529 + 20 +4751.014033 + 30 +0.0 + 0 +VERTEX + 5 +20EF + 8 +HOLZ + 10 +5855.0 + 20 +4751.014033 + 30 +0.0 + 0 +SEQEND + 5 +20F0 + 8 +HOLZ + 0 +POLYLINE + 5 +322 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +20F1 + 8 +HOLZ + 10 +5851.42476 + 20 +4748.886988 + 30 +0.0 + 0 +VERTEX + 5 +20F2 + 8 +HOLZ + 10 +5960.0 + 20 +4525.0 + 30 +0.0 + 0 +SEQEND + 5 +20F3 + 8 +HOLZ + 0 +POLYLINE + 5 +326 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +20F4 + 8 +HOLZ + 10 +5931.352872 + 20 +4893.378346 + 30 +0.0 + 0 +VERTEX + 5 +20F5 + 8 +HOLZ + 10 +6110.0 + 20 +4525.0 + 30 +0.0 + 0 +SEQEND + 5 +20F6 + 8 +HOLZ + 0 +POLYLINE + 5 +32A + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +20F7 + 8 +DETAILS + 10 +5915.076976 + 20 +4675.125425 + 30 +0.0 + 0 +VERTEX + 5 +20F8 + 8 +DETAILS + 10 +5937.538667 + 20 +4680.786371 + 30 +0.0 + 0 +SEQEND + 5 +20F9 + 8 +DETAILS + 0 +POLYLINE + 5 +32E + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +20FA + 8 +DETAILS + 10 +5950.234431 + 20 +4684.49526 + 30 +0.0 + 0 +VERTEX + 5 +20FB + 8 +DETAILS + 10 +5968.985132 + 20 +4689.37543 + 30 +0.0 + 0 +SEQEND + 5 +20FC + 8 +DETAILS + 0 +POLYLINE + 5 +332 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +20FD + 8 +DETAILS + 10 +5978.555795 + 20 +4691.522709 + 30 +0.0 + 0 +VERTEX + 5 +20FE + 8 +DETAILS + 10 +5995.157911 + 20 +4695.426764 + 30 +0.0 + 0 +SEQEND + 5 +20FF + 8 +DETAILS + 0 +POLYLINE + 5 +336 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2100 + 8 +DETAILS + 10 +6002.18946 + 20 +4696.793209 + 30 +0.0 + 0 +VERTEX + 5 +2101 + 8 +DETAILS + 10 +6017.81506 + 20 +4700.892544 + 30 +0.0 + 0 +SEQEND + 5 +2102 + 8 +DETAILS + 0 +POLYLINE + 5 +33A + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2103 + 8 +DETAILS + 10 +5910.389276 + 20 +4679.224761 + 30 +0.0 + 0 +VERTEX + 5 +2104 + 8 +DETAILS + 10 +5900.818613 + 20 +4691.132263 + 30 +0.0 + 0 +SEQEND + 5 +2105 + 8 +DETAILS + 0 +POLYLINE + 5 +33E + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2106 + 8 +DETAILS + 10 +5895.545024 + 20 +4697.574043 + 30 +0.0 + 0 +VERTEX + 5 +2107 + 8 +DETAILS + 10 +5886.169625 + 20 +4709.091158 + 30 +0.0 + 0 +SEQEND + 5 +2108 + 8 +DETAILS + 0 +POLYLINE + 5 +342 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2109 + 8 +DETAILS + 10 +5880.896036 + 20 +4714.16655 + 30 +0.0 + 0 +VERTEX + 5 +210A + 8 +DETAILS + 10 +5869.958135 + 20 +4726.854887 + 30 +0.0 + 0 +SEQEND + 5 +210B + 8 +DETAILS + 0 +POLYLINE + 5 +346 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +210C + 8 +HOLZ + 10 +5851.42476 + 20 +4748.886988 + 30 +0.0 + 0 +VERTEX + 5 +210D + 8 +HOLZ + 10 +5849.618529 + 20 +4751.014033 + 30 +0.0 + 0 +SEQEND + 5 +210E + 8 +HOLZ + 0 +POLYLINE + 5 +34A + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +210F + 8 +HOLZ + 10 +6023.95213 + 20 +4702.434546 + 30 +0.0 + 0 +VERTEX + 5 +2110 + 8 +HOLZ + 10 +6032.574688 + 20 +4704.574379 + 30 +0.0 + 0 +VERTEX + 5 +2111 + 8 +HOLZ + 10 +7082.5 + 20 +6602.538277 + 30 +0.0 + 0 +SEQEND + 5 +2112 + 8 +HOLZ + 0 +POLYLINE + 5 +34F + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2113 + 8 +HOLZ + 10 +5872.708223 + 20 +4704.999538 + 30 +0.0 + 0 +VERTEX + 5 +2114 + 8 +HOLZ + 10 +5555.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +2115 + 8 +HOLZ + 10 +5555.0 + 20 +4750.0 + 30 +0.0 + 0 +VERTEX + 5 +2116 + 8 +HOLZ + 10 +5855.0 + 20 +4750.0 + 30 +0.0 + 0 +SEQEND + 5 +2117 + 8 +HOLZ + 0 +POLYLINE + 5 +355 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2118 + 8 +HOLZ + 10 +14032.5 + 20 +6974.383492 + 30 +0.0 + 0 +VERTEX + 5 +2119 + 8 +HOLZ + 10 +15263.57524 + 20 +4748.886988 + 30 +0.0 + 0 +SEQEND + 5 +211A + 8 +HOLZ + 0 +POLYLINE + 5 +359 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +211B + 8 +HOLZ + 10 +15091.04787 + 20 +4702.434546 + 30 +0.0 + 0 +VERTEX + 5 +211C + 8 +HOLZ + 10 +15082.425312 + 20 +4704.574379 + 30 +0.0 + 0 +VERTEX + 5 +211D + 8 +HOLZ + 10 +14032.5 + 20 +6602.538277 + 30 +0.0 + 0 +SEQEND + 5 +211E + 8 +HOLZ + 0 +POLYLINE + 5 +35E + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +211F + 8 +HOLZ + 10 +14032.392092 + 20 +6600.0 + 30 +0.0 + 0 +VERTEX + 5 +2120 + 8 +HOLZ + 10 +14002.632776 + 20 +6974.411882 + 30 +0.0 + 0 +SEQEND + 5 +2121 + 8 +HOLZ + 0 +POLYLINE + 5 +362 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2122 + 8 +HOLZ + 10 +15242.291777 + 20 +4704.999538 + 30 +0.0 + 0 +VERTEX + 5 +2123 + 8 +HOLZ + 10 +15560.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +2124 + 8 +HOLZ + 10 +15560.0 + 20 +4750.0 + 30 +0.0 + 0 +VERTEX + 5 +2125 + 8 +HOLZ + 10 +15260.0 + 20 +4750.0 + 30 +0.0 + 0 +SEQEND + 5 +2126 + 8 +HOLZ + 0 +POLYLINE + 5 +368 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2127 + 8 +HOLZ + 10 +15183.647128 + 20 +4893.378346 + 30 +0.0 + 0 +VERTEX + 5 +2128 + 8 +HOLZ + 10 +15005.0 + 20 +4525.0 + 30 +0.0 + 0 +SEQEND + 5 +2129 + 8 +HOLZ + 0 +POLYLINE + 5 +36C + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +212A + 8 +HOLZ + 10 +15263.57524 + 20 +4748.886988 + 30 +0.0 + 0 +VERTEX + 5 +212B + 8 +HOLZ + 10 +15155.0 + 20 +4525.0 + 30 +0.0 + 0 +SEQEND + 5 +212C + 8 +HOLZ + 0 +POLYLINE + 5 +370 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +212D + 8 +HOLZ + 10 +14032.632776 + 20 +6974.411882 + 30 +0.0 + 0 +VERTEX + 5 +212E + 8 +HOLZ + 10 +14002.632776 + 20 +6974.411882 + 30 +0.0 + 0 +SEQEND + 5 +212F + 8 +HOLZ + 0 +POLYLINE + 5 +374 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2130 + 8 +HOLZ + 10 +14032.5 + 20 +6602.538277 + 30 +0.0 + 0 +VERTEX + 5 +2131 + 8 +HOLZ + 10 +14032.5 + 20 +4705.0 + 30 +0.0 + 0 +SEQEND + 5 +2132 + 8 +HOLZ + 0 +POLYLINE + 5 +378 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2133 + 8 +HOLZ + 10 +4490.0 + 20 +4525.0 + 30 +0.0 + 0 +VERTEX + 5 +2134 + 8 +HOLZ + 10 +16625.0 + 20 +4525.0 + 30 +0.0 + 0 +VERTEX + 5 +2135 + 8 +HOLZ + 10 +16625.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +2136 + 8 +HOLZ + 10 +15242.292001 + 20 +4705.0 + 30 +0.0 + 0 +SEQEND + 5 +2137 + 8 +HOLZ + 0 +POLYLINE + 5 +37E + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2138 + 8 +HOLZ + 10 +10557.5 + 20 +7515.0 + 30 +0.0 + 0 +VERTEX + 5 +2139 + 8 +HOLZ + 10 +7282.5 + 20 +7515.0 + 30 +0.0 + 0 +VERTEX + 5 +213A + 8 +HOLZ + 10 +7282.5 + 20 +7495.0 + 30 +0.0 + 0 +VERTEX + 5 +213B + 8 +HOLZ + 10 +7082.5 + 20 +7495.0 + 30 +0.0 + 0 +VERTEX + 5 +213C + 8 +HOLZ + 10 +7082.5 + 20 +7515.0 + 30 +0.0 + 0 +VERTEX + 5 +213D + 8 +HOLZ + 10 +6446.963223 + 20 +7515.0 + 30 +0.0 + 0 +SEQEND + 5 +213E + 8 +HOLZ + 0 +POLYLINE + 5 +386 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +213F + 8 +HOLZ + 10 +6190.909699 + 20 +7355.0 + 30 +0.0 + 0 +VERTEX + 5 +2140 + 8 +HOLZ + 10 +10557.5 + 20 +7355.0 + 30 +0.0 + 0 +SEQEND + 5 +2141 + 8 +HOLZ + 0 +POLYLINE + 5 +38A + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2142 + 8 +DETAILS + 10 +6545.0 + 20 +7365.0 + 30 +0.0 + 0 +VERTEX + 5 +2143 + 8 +DETAILS + 10 +6580.0 + 20 +7385.0 + 30 +0.0 + 0 +SEQEND + 5 +2144 + 8 +DETAILS + 0 +POLYLINE + 5 +38E + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2145 + 8 +HOLZ + 10 +7082.5 + 20 +7699.875341 + 30 +0.0 + 0 +VERTEX + 5 +2146 + 8 +HOLZ + 10 +6786.637608 + 20 +7515.0 + 30 +0.0 + 0 +SEQEND + 5 +2147 + 8 +HOLZ + 0 +POLYLINE + 5 +392 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2148 + 8 +HOLZ + 10 +6530.584083 + 20 +7355.0 + 30 +0.0 + 0 +VERTEX + 5 +2149 + 8 +HOLZ + 10 +4274.112397 + 20 +5945.0 + 30 +0.0 + 0 +SEQEND + 5 +214A + 8 +HOLZ + 0 +POLYLINE + 5 +396 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +214B + 8 +DETAILS + 10 +6595.0 + 20 +7395.0 + 30 +0.0 + 0 +VERTEX + 5 +214C + 8 +DETAILS + 10 +6630.0 + 20 +7415.0 + 30 +0.0 + 0 +SEQEND + 5 +214D + 8 +DETAILS + 0 +POLYLINE + 5 +39A + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +214E + 8 +DETAILS + 10 +6645.0 + 20 +7425.0 + 30 +0.0 + 0 +VERTEX + 5 +214F + 8 +DETAILS + 10 +6680.0 + 20 +7445.0 + 30 +0.0 + 0 +SEQEND + 5 +2150 + 8 +DETAILS + 0 +POLYLINE + 5 +39E + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2151 + 8 +DETAILS + 10 +6695.0 + 20 +7455.0 + 30 +0.0 + 0 +VERTEX + 5 +2152 + 8 +DETAILS + 10 +6730.0 + 20 +7475.0 + 30 +0.0 + 0 +SEQEND + 5 +2153 + 8 +DETAILS + 0 +POLYLINE + 5 +3A2 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2154 + 8 +DETAILS + 10 +6745.0 + 20 +7485.0 + 30 +0.0 + 0 +VERTEX + 5 +2155 + 8 +DETAILS + 10 +6780.0 + 20 +7505.0 + 30 +0.0 + 0 +SEQEND + 5 +2156 + 8 +DETAILS + 0 +POLYLINE + 5 +3A6 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2157 + 8 +HOLZ + 10 +7082.5 + 20 +7355.0 + 30 +0.0 + 0 +VERTEX + 5 +2158 + 8 +HOLZ + 10 +7082.5 + 20 +6974.383492 + 30 +0.0 + 0 +SEQEND + 5 +2159 + 8 +HOLZ + 0 +POLYLINE + 5 +3AA + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +215A + 8 +HOLZ + 10 +7282.5 + 20 +7495.0 + 30 +0.0 + 0 +VERTEX + 5 +215B + 8 +HOLZ + 10 +7082.5 + 20 +7495.0 + 30 +0.0 + 0 +SEQEND + 5 +215C + 8 +HOLZ + 0 +POLYLINE + 5 +3AE + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +215D + 8 +DETAILS + 10 +7282.396934 + 20 +7364.082396 + 30 +0.0 + 0 +VERTEX + 5 +215E + 8 +DETAILS + 10 +7282.396934 + 20 +7389.961937 + 30 +0.0 + 0 +SEQEND + 5 +215F + 8 +DETAILS + 0 +POLYLINE + 5 +3B2 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2160 + 8 +DETAILS + 10 +10317.5 + 20 +7366.578903 + 30 +0.0 + 0 +VERTEX + 5 +2161 + 8 +DETAILS + 10 +10317.5 + 20 +7396.578903 + 30 +0.0 + 0 +SEQEND + 5 +2162 + 8 +DETAILS + 0 +POLYLINE + 5 +3B6 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2163 + 8 +DETAILS + 10 +10317.5 + 20 +7419.321326 + 30 +0.0 + 0 +VERTEX + 5 +2164 + 8 +DETAILS + 10 +10317.5 + 20 +7449.321326 + 30 +0.0 + 0 +SEQEND + 5 +2165 + 8 +DETAILS + 0 +POLYLINE + 5 +3BA + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2166 + 8 +DETAILS + 10 +10317.5 + 20 +7473.337962 + 30 +0.0 + 0 +VERTEX + 5 +2167 + 8 +DETAILS + 10 +10317.5 + 20 +7503.337962 + 30 +0.0 + 0 +SEQEND + 5 +2168 + 8 +DETAILS + 0 +POLYLINE + 5 +3BE + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2169 + 8 +HOLZ + 10 +10477.5 + 20 +7355.0 + 30 +0.0 + 0 +VERTEX + 5 +216A + 8 +HOLZ + 10 +10477.5 + 20 +4705.0 + 30 +0.0 + 0 +SEQEND + 5 +216B + 8 +HOLZ + 0 +POLYLINE + 5 +3C2 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +216C + 8 +DETAILS + 10 +10477.555127 + 20 +7366.578903 + 30 +0.0 + 0 +VERTEX + 5 +216D + 8 +DETAILS + 10 +10477.555127 + 20 +7396.578903 + 30 +0.0 + 0 +SEQEND + 5 +216E + 8 +DETAILS + 0 +POLYLINE + 5 +3C6 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +216F + 8 +DETAILS + 10 +10477.555127 + 20 +7419.321326 + 30 +0.0 + 0 +VERTEX + 5 +2170 + 8 +DETAILS + 10 +10477.555127 + 20 +7449.321326 + 30 +0.0 + 0 +SEQEND + 5 +2171 + 8 +DETAILS + 0 +POLYLINE + 5 +3CA + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2172 + 8 +DETAILS + 10 +10477.555127 + 20 +7473.337962 + 30 +0.0 + 0 +VERTEX + 5 +2173 + 8 +DETAILS + 10 +10477.555127 + 20 +7503.337962 + 30 +0.0 + 0 +SEQEND + 5 +2174 + 8 +DETAILS + 0 +POLYLINE + 5 +3CE + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2175 + 8 +DETAILS + 10 +9567.5 + 20 +7366.578903 + 30 +0.0 + 0 +VERTEX + 5 +2176 + 8 +DETAILS + 10 +9567.5 + 20 +7396.578903 + 30 +0.0 + 0 +SEQEND + 5 +2177 + 8 +DETAILS + 0 +POLYLINE + 5 +3D2 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2178 + 8 +DETAILS + 10 +9567.5 + 20 +7419.321326 + 30 +0.0 + 0 +VERTEX + 5 +2179 + 8 +DETAILS + 10 +9567.5 + 20 +7449.321326 + 30 +0.0 + 0 +SEQEND + 5 +217A + 8 +DETAILS + 0 +POLYLINE + 5 +3D6 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +217B + 8 +DETAILS + 10 +9567.5 + 20 +7473.337962 + 30 +0.0 + 0 +VERTEX + 5 +217C + 8 +DETAILS + 10 +9567.5 + 20 +7503.337962 + 30 +0.0 + 0 +SEQEND + 5 +217D + 8 +DETAILS + 0 +POLYLINE + 5 +3DA + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +217E + 8 +DETAILS + 10 +9407.5 + 20 +7473.337962 + 30 +0.0 + 0 +VERTEX + 5 +217F + 8 +DETAILS + 10 +9407.5 + 20 +7503.337962 + 30 +0.0 + 0 +SEQEND + 5 +2180 + 8 +DETAILS + 0 +POLYLINE + 5 +3DE + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2181 + 8 +DETAILS + 10 +9407.5 + 20 +7419.321326 + 30 +0.0 + 0 +VERTEX + 5 +2182 + 8 +DETAILS + 10 +9407.5 + 20 +7449.321326 + 30 +0.0 + 0 +SEQEND + 5 +2183 + 8 +DETAILS + 0 +POLYLINE + 5 +3E2 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2184 + 8 +DETAILS + 10 +9407.5 + 20 +7366.578903 + 30 +0.0 + 0 +VERTEX + 5 +2185 + 8 +DETAILS + 10 +9407.5 + 20 +7396.578903 + 30 +0.0 + 0 +SEQEND + 5 +2186 + 8 +DETAILS + 0 +POLYLINE + 5 +3E6 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2187 + 8 +DETAILS + 10 +8657.5 + 20 +7366.578903 + 30 +0.0 + 0 +VERTEX + 5 +2188 + 8 +DETAILS + 10 +8657.5 + 20 +7396.578903 + 30 +0.0 + 0 +SEQEND + 5 +2189 + 8 +DETAILS + 0 +POLYLINE + 5 +3EA + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +218A + 8 +DETAILS + 10 +8657.5 + 20 +7419.321326 + 30 +0.0 + 0 +VERTEX + 5 +218B + 8 +DETAILS + 10 +8657.5 + 20 +7449.321326 + 30 +0.0 + 0 +SEQEND + 5 +218C + 8 +DETAILS + 0 +POLYLINE + 5 +3EE + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +218D + 8 +DETAILS + 10 +8657.5 + 20 +7473.337962 + 30 +0.0 + 0 +VERTEX + 5 +218E + 8 +DETAILS + 10 +8657.5 + 20 +7503.337962 + 30 +0.0 + 0 +SEQEND + 5 +218F + 8 +DETAILS + 0 +POLYLINE + 5 +3F2 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2190 + 8 +DETAILS + 10 +8497.5 + 20 +7473.337962 + 30 +0.0 + 0 +VERTEX + 5 +2191 + 8 +DETAILS + 10 +8497.5 + 20 +7503.337962 + 30 +0.0 + 0 +SEQEND + 5 +2192 + 8 +DETAILS + 0 +POLYLINE + 5 +3F6 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2193 + 8 +DETAILS + 10 +8497.5 + 20 +7419.321326 + 30 +0.0 + 0 +VERTEX + 5 +2194 + 8 +DETAILS + 10 +8497.5 + 20 +7449.321326 + 30 +0.0 + 0 +SEQEND + 5 +2195 + 8 +DETAILS + 0 +POLYLINE + 5 +3FA + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2196 + 8 +DETAILS + 10 +8497.5 + 20 +7366.578903 + 30 +0.0 + 0 +VERTEX + 5 +2197 + 8 +DETAILS + 10 +8497.5 + 20 +7396.578903 + 30 +0.0 + 0 +SEQEND + 5 +2198 + 8 +DETAILS + 0 +POLYLINE + 5 +3FE + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2199 + 8 +DETAILS + 10 +7897.5 + 20 +7366.578903 + 30 +0.0 + 0 +VERTEX + 5 +219A + 8 +DETAILS + 10 +7897.5 + 20 +7396.578903 + 30 +0.0 + 0 +SEQEND + 5 +219B + 8 +DETAILS + 0 +POLYLINE + 5 +402 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +219C + 8 +DETAILS + 10 +7897.5 + 20 +7419.321326 + 30 +0.0 + 0 +VERTEX + 5 +219D + 8 +DETAILS + 10 +7897.5 + 20 +7449.321326 + 30 +0.0 + 0 +SEQEND + 5 +219E + 8 +DETAILS + 0 +POLYLINE + 5 +406 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +219F + 8 +DETAILS + 10 +7897.5 + 20 +7473.337962 + 30 +0.0 + 0 +VERTEX + 5 +21A0 + 8 +DETAILS + 10 +7897.5 + 20 +7503.337962 + 30 +0.0 + 0 +SEQEND + 5 +21A1 + 8 +DETAILS + 0 +POLYLINE + 5 +40A + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21A2 + 8 +DETAILS + 10 +7737.5 + 20 +7473.337962 + 30 +0.0 + 0 +VERTEX + 5 +21A3 + 8 +DETAILS + 10 +7737.5 + 20 +7503.337962 + 30 +0.0 + 0 +SEQEND + 5 +21A4 + 8 +DETAILS + 0 +POLYLINE + 5 +40E + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21A5 + 8 +DETAILS + 10 +7737.5 + 20 +7419.321326 + 30 +0.0 + 0 +VERTEX + 5 +21A6 + 8 +DETAILS + 10 +7737.5 + 20 +7449.321326 + 30 +0.0 + 0 +SEQEND + 5 +21A7 + 8 +DETAILS + 0 +POLYLINE + 5 +412 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21A8 + 8 +DETAILS + 10 +7737.5 + 20 +7366.578903 + 30 +0.0 + 0 +VERTEX + 5 +21A9 + 8 +DETAILS + 10 +7737.5 + 20 +7396.578903 + 30 +0.0 + 0 +SEQEND + 5 +21AA + 8 +DETAILS + 0 +POLYLINE + 5 +416 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21AB + 8 +DETAILS + 10 +7282.323786 + 20 +7419.321326 + 30 +0.0 + 0 +VERTEX + 5 +21AC + 8 +DETAILS + 10 +7282.323786 + 20 +7449.321326 + 30 +0.0 + 0 +SEQEND + 5 +21AD + 8 +DETAILS + 0 +POLYLINE + 5 +41A + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21AE + 8 +DETAILS + 10 +7282.323786 + 20 +7473.337962 + 30 +0.0 + 0 +VERTEX + 5 +21AF + 8 +DETAILS + 10 +7282.323786 + 20 +7503.337962 + 30 +0.0 + 0 +SEQEND + 5 +21B0 + 8 +DETAILS + 0 +POLYLINE + 5 +41E + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21B1 + 8 +DETAILS + 10 +7442.323786 + 20 +7473.337962 + 30 +0.0 + 0 +VERTEX + 5 +21B2 + 8 +DETAILS + 10 +7442.323786 + 20 +7503.337962 + 30 +0.0 + 0 +SEQEND + 5 +21B3 + 8 +DETAILS + 0 +POLYLINE + 5 +422 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21B4 + 8 +DETAILS + 10 +7442.323786 + 20 +7419.321326 + 30 +0.0 + 0 +VERTEX + 5 +21B5 + 8 +DETAILS + 10 +7442.323786 + 20 +7449.321326 + 30 +0.0 + 0 +SEQEND + 5 +21B6 + 8 +DETAILS + 0 +POLYLINE + 5 +426 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21B7 + 8 +DETAILS + 10 +7442.396934 + 20 +7364.082396 + 30 +0.0 + 0 +VERTEX + 5 +21B8 + 8 +DETAILS + 10 +7442.396934 + 20 +7389.961937 + 30 +0.0 + 0 +SEQEND + 5 +21B9 + 8 +DETAILS + 0 +POLYLINE + 5 +42A + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21BA + 8 +DETAILS + 10 +7081.668956 + 20 +7473.337962 + 30 +0.0 + 0 +VERTEX + 5 +21BB + 8 +DETAILS + 10 +7081.668956 + 20 +7503.337962 + 30 +0.0 + 0 +SEQEND + 5 +21BC + 8 +DETAILS + 0 +POLYLINE + 5 +42E + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21BD + 8 +DETAILS + 10 +7081.668956 + 20 +7419.321326 + 30 +0.0 + 0 +VERTEX + 5 +21BE + 8 +DETAILS + 10 +7081.668956 + 20 +7449.321326 + 30 +0.0 + 0 +SEQEND + 5 +21BF + 8 +DETAILS + 0 +POLYLINE + 5 +432 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21C0 + 8 +DETAILS + 10 +7081.742105 + 20 +7364.082396 + 30 +0.0 + 0 +VERTEX + 5 +21C1 + 8 +DETAILS + 10 +7081.742105 + 20 +7389.961937 + 30 +0.0 + 0 +SEQEND + 5 +21C2 + 8 +DETAILS + 0 +POLYLINE + 5 +436 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +4.425 + 41 +4.425 + 0 +VERTEX + 5 +21C3 + 8 +DETAILS + 10 +6472.342783 + 20 +7441.053384 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +21C4 + 8 +DETAILS + 10 +6492.292783 + 20 +7441.053384 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +21C5 + 8 +DETAILS + 0 +POLYLINE + 5 +43A + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +4.35 + 41 +4.35 + 0 +VERTEX + 5 +21C6 + 8 +DETAILS + 10 +7146.51 + 20 +7425.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +21C7 + 8 +DETAILS + 10 +7158.49 + 20 +7425.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +21C8 + 8 +DETAILS + 0 +POLYLINE + 5 +43E + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +4.35 + 41 +4.35 + 0 +VERTEX + 5 +21C9 + 8 +DETAILS + 10 +7206.51 + 20 +7425.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +21CA + 8 +DETAILS + 10 +7218.49 + 20 +7425.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +21CB + 8 +DETAILS + 0 +POLYLINE + 5 +442 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21CC + 8 +HOLZ + 10 +14924.090301 + 20 +7355.0 + 30 +0.0 + 0 +VERTEX + 5 +21CD + 8 +HOLZ + 10 +10557.5 + 20 +7355.0 + 30 +0.0 + 0 +SEQEND + 5 +21CE + 8 +HOLZ + 0 +POLYLINE + 5 +446 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21CF + 8 +HOLZ + 10 +10557.5 + 20 +7515.0 + 30 +0.0 + 0 +VERTEX + 5 +21D0 + 8 +HOLZ + 10 +13832.5 + 20 +7515.0 + 30 +0.0 + 0 +VERTEX + 5 +21D1 + 8 +HOLZ + 10 +13832.5 + 20 +7495.0 + 30 +0.0 + 0 +VERTEX + 5 +21D2 + 8 +HOLZ + 10 +14032.5 + 20 +7495.0 + 30 +0.0 + 0 +VERTEX + 5 +21D3 + 8 +HOLZ + 10 +14032.5 + 20 +7515.0 + 30 +0.0 + 0 +VERTEX + 5 +21D4 + 8 +HOLZ + 10 +14668.036777 + 20 +7515.0 + 30 +0.0 + 0 +SEQEND + 5 +21D5 + 8 +HOLZ + 0 +POLYLINE + 5 +44E + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21D6 + 8 +HOLZ + 10 +13832.5 + 20 +7495.0 + 30 +0.0 + 0 +VERTEX + 5 +21D7 + 8 +HOLZ + 10 +14032.5 + 20 +7495.0 + 30 +0.0 + 0 +SEQEND + 5 +21D8 + 8 +HOLZ + 0 +POLYLINE + 5 +452 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21D9 + 8 +DETAILS + 10 +14520.0 + 20 +7395.0 + 30 +0.0 + 0 +VERTEX + 5 +21DA + 8 +DETAILS + 10 +14485.0 + 20 +7415.0 + 30 +0.0 + 0 +SEQEND + 5 +21DB + 8 +DETAILS + 0 +POLYLINE + 5 +456 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +4.425 + 41 +4.425 + 0 +VERTEX + 5 +21DC + 8 +DETAILS + 10 +14642.657217 + 20 +7441.053384 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +21DD + 8 +DETAILS + 10 +14622.707217 + 20 +7441.053384 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +21DE + 8 +DETAILS + 0 +POLYLINE + 5 +45A + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21DF + 8 +DETAILS + 10 +14570.0 + 20 +7365.0 + 30 +0.0 + 0 +VERTEX + 5 +21E0 + 8 +DETAILS + 10 +14535.0 + 20 +7385.0 + 30 +0.0 + 0 +SEQEND + 5 +21E1 + 8 +DETAILS + 0 +POLYLINE + 5 +45E + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21E2 + 8 +DETAILS + 10 +14370.0 + 20 +7485.0 + 30 +0.0 + 0 +VERTEX + 5 +21E3 + 8 +DETAILS + 10 +14336.69541 + 20 +7505.0 + 30 +0.0 + 0 +SEQEND + 5 +21E4 + 8 +DETAILS + 0 +POLYLINE + 5 +462 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21E5 + 8 +DETAILS + 10 +14420.0 + 20 +7455.0 + 30 +0.0 + 0 +VERTEX + 5 +21E6 + 8 +DETAILS + 10 +14385.0 + 20 +7476.807047 + 30 +0.0 + 0 +SEQEND + 5 +21E7 + 8 +DETAILS + 0 +POLYLINE + 5 +466 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21E8 + 8 +DETAILS + 10 +14470.0 + 20 +7425.0 + 30 +0.0 + 0 +VERTEX + 5 +21E9 + 8 +DETAILS + 10 +14435.0 + 20 +7446.929365 + 30 +0.0 + 0 +SEQEND + 5 +21EA + 8 +DETAILS + 0 +POLYLINE + 5 +46A + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +4.35 + 41 +4.35 + 0 +VERTEX + 5 +21EB + 8 +DETAILS + 10 +13908.49 + 20 +7425.0 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +21EC + 8 +DETAILS + 10 +13896.51 + 20 +7425.0 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +21ED + 8 +DETAILS + 0 +POLYLINE + 5 +46E + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +4.35 + 41 +4.35 + 0 +VERTEX + 5 +21EE + 8 +DETAILS + 10 +13968.49 + 20 +7425.0 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +21EF + 8 +DETAILS + 10 +13956.51 + 20 +7425.0 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +21F0 + 8 +DETAILS + 0 +POLYLINE + 5 +472 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21F1 + 8 +DETAILS + 10 +14033.257895 + 20 +7364.082396 + 30 +0.0 + 0 +VERTEX + 5 +21F2 + 8 +DETAILS + 10 +14033.257895 + 20 +7389.961937 + 30 +0.0 + 0 +SEQEND + 5 +21F3 + 8 +DETAILS + 0 +POLYLINE + 5 +476 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21F4 + 8 +DETAILS + 10 +14033.331044 + 20 +7419.321326 + 30 +0.0 + 0 +VERTEX + 5 +21F5 + 8 +DETAILS + 10 +14033.331044 + 20 +7449.321326 + 30 +0.0 + 0 +SEQEND + 5 +21F6 + 8 +DETAILS + 0 +POLYLINE + 5 +47A + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21F7 + 8 +DETAILS + 10 +14033.331044 + 20 +7473.337962 + 30 +0.0 + 0 +VERTEX + 5 +21F8 + 8 +DETAILS + 10 +14033.331044 + 20 +7503.337962 + 30 +0.0 + 0 +SEQEND + 5 +21F9 + 8 +DETAILS + 0 +POLYLINE + 5 +47E + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21FA + 8 +DETAILS + 10 +13832.676214 + 20 +7473.337962 + 30 +0.0 + 0 +VERTEX + 5 +21FB + 8 +DETAILS + 10 +13832.676214 + 20 +7503.337962 + 30 +0.0 + 0 +SEQEND + 5 +21FC + 8 +DETAILS + 0 +POLYLINE + 5 +482 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21FD + 8 +DETAILS + 10 +13832.676214 + 20 +7419.321326 + 30 +0.0 + 0 +VERTEX + 5 +21FE + 8 +DETAILS + 10 +13832.676214 + 20 +7449.321326 + 30 +0.0 + 0 +SEQEND + 5 +21FF + 8 +DETAILS + 0 +POLYLINE + 5 +486 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2200 + 8 +DETAILS + 10 +13832.603066 + 20 +7364.082396 + 30 +0.0 + 0 +VERTEX + 5 +2201 + 8 +DETAILS + 10 +13832.603066 + 20 +7389.961937 + 30 +0.0 + 0 +SEQEND + 5 +2202 + 8 +DETAILS + 0 +POLYLINE + 5 +48A + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2203 + 8 +DETAILS + 10 +13672.676214 + 20 +7419.321326 + 30 +0.0 + 0 +VERTEX + 5 +2204 + 8 +DETAILS + 10 +13672.676214 + 20 +7449.321326 + 30 +0.0 + 0 +SEQEND + 5 +2205 + 8 +DETAILS + 0 +POLYLINE + 5 +48E + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2206 + 8 +DETAILS + 10 +13672.676214 + 20 +7473.337962 + 30 +0.0 + 0 +VERTEX + 5 +2207 + 8 +DETAILS + 10 +13672.676214 + 20 +7503.337962 + 30 +0.0 + 0 +SEQEND + 5 +2208 + 8 +DETAILS + 0 +POLYLINE + 5 +492 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2209 + 8 +DETAILS + 10 +13672.603066 + 20 +7364.082396 + 30 +0.0 + 0 +VERTEX + 5 +220A + 8 +DETAILS + 10 +13672.603066 + 20 +7389.961937 + 30 +0.0 + 0 +SEQEND + 5 +220B + 8 +DETAILS + 0 +POLYLINE + 5 +496 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +220C + 8 +DETAILS + 10 +13377.5 + 20 +7473.337962 + 30 +0.0 + 0 +VERTEX + 5 +220D + 8 +DETAILS + 10 +13377.5 + 20 +7503.337962 + 30 +0.0 + 0 +SEQEND + 5 +220E + 8 +DETAILS + 0 +POLYLINE + 5 +49A + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +220F + 8 +DETAILS + 10 +13377.5 + 20 +7419.321326 + 30 +0.0 + 0 +VERTEX + 5 +2210 + 8 +DETAILS + 10 +13377.5 + 20 +7449.321326 + 30 +0.0 + 0 +SEQEND + 5 +2211 + 8 +DETAILS + 0 +POLYLINE + 5 +49E + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2212 + 8 +DETAILS + 10 +13377.5 + 20 +7366.578903 + 30 +0.0 + 0 +VERTEX + 5 +2213 + 8 +DETAILS + 10 +13377.5 + 20 +7396.578903 + 30 +0.0 + 0 +SEQEND + 5 +2214 + 8 +DETAILS + 0 +POLYLINE + 5 +4A2 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2215 + 8 +DETAILS + 10 +13217.5 + 20 +7366.578903 + 30 +0.0 + 0 +VERTEX + 5 +2216 + 8 +DETAILS + 10 +13217.5 + 20 +7396.578903 + 30 +0.0 + 0 +SEQEND + 5 +2217 + 8 +DETAILS + 0 +POLYLINE + 5 +4A6 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2218 + 8 +DETAILS + 10 +13217.5 + 20 +7419.321326 + 30 +0.0 + 0 +VERTEX + 5 +2219 + 8 +DETAILS + 10 +13217.5 + 20 +7449.321326 + 30 +0.0 + 0 +SEQEND + 5 +221A + 8 +DETAILS + 0 +POLYLINE + 5 +4AA + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +221B + 8 +DETAILS + 10 +13217.5 + 20 +7473.337962 + 30 +0.0 + 0 +VERTEX + 5 +221C + 8 +DETAILS + 10 +13217.5 + 20 +7503.337962 + 30 +0.0 + 0 +SEQEND + 5 +221D + 8 +DETAILS + 0 +POLYLINE + 5 +4AE + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +221E + 8 +DETAILS + 10 +12617.5 + 20 +7366.578903 + 30 +0.0 + 0 +VERTEX + 5 +221F + 8 +DETAILS + 10 +12617.5 + 20 +7396.578903 + 30 +0.0 + 0 +SEQEND + 5 +2220 + 8 +DETAILS + 0 +POLYLINE + 5 +4B2 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2221 + 8 +DETAILS + 10 +12617.5 + 20 +7419.321326 + 30 +0.0 + 0 +VERTEX + 5 +2222 + 8 +DETAILS + 10 +12617.5 + 20 +7449.321326 + 30 +0.0 + 0 +SEQEND + 5 +2223 + 8 +DETAILS + 0 +POLYLINE + 5 +4B6 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2224 + 8 +DETAILS + 10 +12617.5 + 20 +7473.337962 + 30 +0.0 + 0 +VERTEX + 5 +2225 + 8 +DETAILS + 10 +12617.5 + 20 +7503.337962 + 30 +0.0 + 0 +SEQEND + 5 +2226 + 8 +DETAILS + 0 +POLYLINE + 5 +4BA + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2227 + 8 +DETAILS + 10 +12457.5 + 20 +7473.337962 + 30 +0.0 + 0 +VERTEX + 5 +2228 + 8 +DETAILS + 10 +12457.5 + 20 +7503.337962 + 30 +0.0 + 0 +SEQEND + 5 +2229 + 8 +DETAILS + 0 +POLYLINE + 5 +4BE + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +222A + 8 +DETAILS + 10 +12457.5 + 20 +7419.321326 + 30 +0.0 + 0 +VERTEX + 5 +222B + 8 +DETAILS + 10 +12457.5 + 20 +7449.321326 + 30 +0.0 + 0 +SEQEND + 5 +222C + 8 +DETAILS + 0 +POLYLINE + 5 +4C2 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +222D + 8 +DETAILS + 10 +12457.5 + 20 +7366.578903 + 30 +0.0 + 0 +VERTEX + 5 +222E + 8 +DETAILS + 10 +12457.5 + 20 +7396.578903 + 30 +0.0 + 0 +SEQEND + 5 +222F + 8 +DETAILS + 0 +POLYLINE + 5 +4C6 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2230 + 8 +DETAILS + 10 +11707.5 + 20 +7366.578903 + 30 +0.0 + 0 +VERTEX + 5 +2231 + 8 +DETAILS + 10 +11707.5 + 20 +7396.578903 + 30 +0.0 + 0 +SEQEND + 5 +2232 + 8 +DETAILS + 0 +POLYLINE + 5 +4CA + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2233 + 8 +DETAILS + 10 +11707.5 + 20 +7419.321326 + 30 +0.0 + 0 +VERTEX + 5 +2234 + 8 +DETAILS + 10 +11707.5 + 20 +7449.321326 + 30 +0.0 + 0 +SEQEND + 5 +2235 + 8 +DETAILS + 0 +POLYLINE + 5 +4CE + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2236 + 8 +DETAILS + 10 +11707.5 + 20 +7473.337962 + 30 +0.0 + 0 +VERTEX + 5 +2237 + 8 +DETAILS + 10 +11707.5 + 20 +7503.337962 + 30 +0.0 + 0 +SEQEND + 5 +2238 + 8 +DETAILS + 0 +POLYLINE + 5 +4D2 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2239 + 8 +DETAILS + 10 +11547.5 + 20 +7473.337962 + 30 +0.0 + 0 +VERTEX + 5 +223A + 8 +DETAILS + 10 +11547.5 + 20 +7503.337962 + 30 +0.0 + 0 +SEQEND + 5 +223B + 8 +DETAILS + 0 +POLYLINE + 5 +4D6 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +223C + 8 +DETAILS + 10 +11547.5 + 20 +7419.321326 + 30 +0.0 + 0 +VERTEX + 5 +223D + 8 +DETAILS + 10 +11547.5 + 20 +7449.321326 + 30 +0.0 + 0 +SEQEND + 5 +223E + 8 +DETAILS + 0 +POLYLINE + 5 +4DA + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +223F + 8 +DETAILS + 10 +11547.5 + 20 +7366.578903 + 30 +0.0 + 0 +VERTEX + 5 +2240 + 8 +DETAILS + 10 +11547.5 + 20 +7396.578903 + 30 +0.0 + 0 +SEQEND + 5 +2241 + 8 +DETAILS + 0 +POLYLINE + 5 +4DE + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2242 + 8 +DETAILS + 10 +10637.444873 + 20 +7473.337962 + 30 +0.0 + 0 +VERTEX + 5 +2243 + 8 +DETAILS + 10 +10637.444873 + 20 +7503.337962 + 30 +0.0 + 0 +SEQEND + 5 +2244 + 8 +DETAILS + 0 +POLYLINE + 5 +4E2 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2245 + 8 +DETAILS + 10 +10637.444873 + 20 +7419.321326 + 30 +0.0 + 0 +VERTEX + 5 +2246 + 8 +DETAILS + 10 +10637.444873 + 20 +7449.321326 + 30 +0.0 + 0 +SEQEND + 5 +2247 + 8 +DETAILS + 0 +POLYLINE + 5 +4E6 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2248 + 8 +DETAILS + 10 +10637.444873 + 20 +7366.578903 + 30 +0.0 + 0 +VERTEX + 5 +2249 + 8 +DETAILS + 10 +10637.444873 + 20 +7396.578903 + 30 +0.0 + 0 +SEQEND + 5 +224A + 8 +DETAILS + 0 +POLYLINE + 5 +4EA + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +224B + 8 +DETAILS + 10 +10797.5 + 20 +7366.578903 + 30 +0.0 + 0 +VERTEX + 5 +224C + 8 +DETAILS + 10 +10797.5 + 20 +7396.578903 + 30 +0.0 + 0 +SEQEND + 5 +224D + 8 +DETAILS + 0 +POLYLINE + 5 +4EE + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +224E + 8 +DETAILS + 10 +10797.5 + 20 +7419.321326 + 30 +0.0 + 0 +VERTEX + 5 +224F + 8 +DETAILS + 10 +10797.5 + 20 +7449.321326 + 30 +0.0 + 0 +SEQEND + 5 +2250 + 8 +DETAILS + 0 +POLYLINE + 5 +4F2 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2251 + 8 +DETAILS + 10 +10797.5 + 20 +7473.337962 + 30 +0.0 + 0 +VERTEX + 5 +2252 + 8 +DETAILS + 10 +10797.5 + 20 +7503.337962 + 30 +0.0 + 0 +SEQEND + 5 +2253 + 8 +DETAILS + 0 +POLYLINE + 5 +4F6 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2254 + 8 +HOLZ + 10 +10477.5 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +2255 + 8 +HOLZ + 10 +10637.5 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +2256 + 8 +HOLZ + 10 +10637.5 + 20 +7355.0 + 30 +0.0 + 0 +SEQEND + 5 +2257 + 8 +HOLZ + 0 +POLYLINE + 5 +4FB + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2258 + 8 +HOLZ + 10 +10637.5 + 20 +7515.0 + 30 +0.0 + 0 +VERTEX + 5 +2259 + 8 +HOLZ + 10 +10637.5 + 20 +9596.0 + 30 +0.0 + 0 +VERTEX + 5 +225A + 8 +HOLZ + 10 +10477.5 + 20 +9596.0 + 30 +0.0 + 0 +VERTEX + 5 +225B + 8 +HOLZ + 10 +10477.5 + 20 +7515.0 + 30 +0.0 + 0 +SEQEND + 5 +225C + 8 +HOLZ + 0 +POLYLINE + 5 +501 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +225D + 8 +HOLZ + 10 +14032.5 + 20 +7355.0 + 30 +0.0 + 0 +VERTEX + 5 +225E + 8 +HOLZ + 10 +14032.5 + 20 +6974.383492 + 30 +0.0 + 0 +SEQEND + 5 +225F + 8 +HOLZ + 0 +POLYLINE + 5 +505 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2260 + 8 +HOLZ + 10 +13832.5 + 20 +7495.0 + 30 +0.0 + 0 +VERTEX + 5 +2261 + 8 +HOLZ + 10 +14032.5 + 20 +7495.0 + 30 +0.0 + 0 +SEQEND + 5 +2262 + 8 +HOLZ + 0 +POLYLINE + 5 +509 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2263 + 8 +HOLZ + 10 +14032.5 + 20 +7699.875341 + 30 +0.0 + 0 +VERTEX + 5 +2264 + 8 +HOLZ + 10 +14328.362392 + 20 +7515.0 + 30 +0.0 + 0 +SEQEND + 5 +2265 + 8 +HOLZ + 0 +POLYLINE + 5 +50D + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2266 + 8 +HOLZ + 10 +14584.415917 + 20 +7355.0 + 30 +0.0 + 0 +VERTEX + 5 +2267 + 8 +HOLZ + 10 +16840.887603 + 20 +5945.0 + 30 +0.0 + 0 +SEQEND + 5 +2268 + 8 +HOLZ + 0 +POLYLINE + 5 +511 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2269 + 8 +HOLZ + 10 +7366.802004 + 20 +7877.52091 + 30 +0.0 + 0 +VERTEX + 5 +226A + 8 +HOLZ + 10 +7271.416536 + 20 +8030.169567 + 30 +0.0 + 0 +SEQEND + 5 +226B + 8 +HOLZ + 0 +POLYLINE + 5 +515 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +226C + 8 +DETAILS + 10 +6915.0 + 20 +7605.0 + 30 +0.0 + 0 +VERTEX + 5 +226D + 8 +DETAILS + 10 +6895.0 + 20 +7635.0 + 30 +0.0 + 0 +SEQEND + 5 +226E + 8 +DETAILS + 0 +POLYLINE + 5 +519 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +226F + 8 +DETAILS + 10 +6877.414742 + 20 +7665.410305 + 30 +0.0 + 0 +VERTEX + 5 +2270 + 8 +DETAILS + 10 +6857.414742 + 20 +7695.410305 + 30 +0.0 + 0 +SEQEND + 5 +2271 + 8 +DETAILS + 0 +POLYLINE + 5 +51D + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2272 + 8 +DETAILS + 10 +6843.564541 + 20 +7719.608278 + 30 +0.0 + 0 +VERTEX + 5 +2273 + 8 +DETAILS + 10 +6823.564541 + 20 +7749.608278 + 30 +0.0 + 0 +SEQEND + 5 +2274 + 8 +DETAILS + 0 +POLYLINE + 5 +521 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2275 + 8 +DETAILS + 10 +14237.585258 + 20 +7665.410305 + 30 +0.0 + 0 +VERTEX + 5 +2276 + 8 +DETAILS + 10 +14257.585258 + 20 +7695.410305 + 30 +0.0 + 0 +SEQEND + 5 +2277 + 8 +DETAILS + 0 +POLYLINE + 5 +525 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2278 + 8 +DETAILS + 10 +14271.435459 + 20 +7719.608278 + 30 +0.0 + 0 +VERTEX + 5 +2279 + 8 +DETAILS + 10 +14291.435459 + 20 +7749.608278 + 30 +0.0 + 0 +SEQEND + 5 +227A + 8 +DETAILS + 0 +POLYLINE + 5 +529 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +227B + 8 +DETAILS + 10 +14200.0 + 20 +7605.0 + 30 +0.0 + 0 +VERTEX + 5 +227C + 8 +DETAILS + 10 +14220.0 + 20 +7635.0 + 30 +0.0 + 0 +SEQEND + 5 +227D + 8 +DETAILS + 0 +POLYLINE + 5 +52D + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +227E + 8 +HOLZ + 10 +13748.197996 + 20 +7877.52091 + 30 +0.0 + 0 +VERTEX + 5 +227F + 8 +HOLZ + 10 +13843.583464 + 20 +8030.169567 + 30 +0.0 + 0 +SEQEND + 5 +2280 + 8 +HOLZ + 0 +POLYLINE + 5 +531 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2281 + 8 +HOLZ + 10 +16897.5 + 20 +5909.624648 + 30 +0.0 + 0 +VERTEX + 5 +2282 + 8 +HOLZ + 10 +17310.002398 + 20 +5651.864542 + 30 +0.0 + 0 +VERTEX + 5 +2283 + 8 +HOLZ + 10 +17403.689813 + 20 +5801.381599 + 30 +0.0 + 0 +VERTEX + 5 +2284 + 8 +HOLZ + 10 +17324.687609 + 20 +5854.940316 + 30 +0.0 + 0 +VERTEX + 5 +2285 + 8 +HOLZ + 10 +10557.5 + 20 +10083.548452 + 30 +0.0 + 0 +SEQEND + 5 +2286 + 8 +HOLZ + 0 +POLYLINE + 5 +538 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2287 + 8 +DETAILS + 10 +10557.712995 + 20 +9910.919938 + 30 +0.0 + 0 +VERTEX + 5 +2288 + 8 +DETAILS + 10 +10467.712995 + 20 +9910.919938 + 30 +0.0 + 0 +VERTEX + 5 +2289 + 8 +DETAILS + 10 +10467.712995 + 20 +9980.919938 + 30 +0.0 + 0 +VERTEX + 5 +228A + 8 +DETAILS + 10 +10557.712995 + 20 +9980.919938 + 30 +0.0 + 0 +SEQEND + 5 +228B + 8 +DETAILS + 0 +POLYLINE + 5 +53E + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +228C + 8 +DETAILS + 10 +10557.287005 + 20 +9910.919938 + 30 +0.0 + 0 +VERTEX + 5 +228D + 8 +DETAILS + 10 +10647.287005 + 20 +9910.919938 + 30 +0.0 + 0 +VERTEX + 5 +228E + 8 +DETAILS + 10 +10647.287005 + 20 +9980.919938 + 30 +0.0 + 0 +VERTEX + 5 +228F + 8 +DETAILS + 10 +10557.287005 + 20 +9980.919938 + 30 +0.0 + 0 +SEQEND + 5 +2290 + 8 +DETAILS + 0 +POLYLINE + 5 +544 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2291 + 8 +HOLZ + 10 +10557.5 + 20 +9871.296339 + 30 +0.0 + 0 +VERTEX + 5 +2292 + 8 +HOLZ + 10 +10557.5 + 20 +9910.919938 + 30 +0.0 + 0 +SEQEND + 5 +2293 + 8 +HOLZ + 0 +POLYLINE + 5 +548 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2294 + 8 +HOLZ + 10 +10557.5 + 20 +9980.919938 + 30 +0.0 + 0 +VERTEX + 5 +2295 + 8 +HOLZ + 10 +10557.5 + 20 +10082.810074 + 30 +0.0 + 0 +SEQEND + 5 +2296 + 8 +HOLZ + 0 +POLYLINE + 5 +54C + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2297 + 8 +DETAILS + 10 +4250.817185 + 20 +5957.560333 + 30 +0.0 + 0 +VERTEX + 5 +2298 + 8 +DETAILS + 10 +4135.0 + 20 +5957.560333 + 30 +0.0 + 0 +VERTEX + 5 +2299 + 8 +DETAILS + 10 +4135.0 + 20 +6005.0 + 30 +0.0 + 0 +VERTEX + 5 +229A + 8 +DETAILS + 10 +4230.0 + 20 +6005.0 + 30 +0.0 + 0 +VERTEX + 5 +229B + 8 +DETAILS + 10 +4280.0 + 20 +5960.0 + 30 +0.0 + 0 +VERTEX + 5 +229C + 8 +DETAILS + 10 +4355.0 + 20 +5960.0 + 30 +0.0 + 0 +VERTEX + 5 +229D + 8 +DETAILS + 10 +4355.0 + 20 +5956.477785 + 30 +0.0 + 0 +SEQEND + 5 +229E + 8 +DETAILS + 0 +POLYLINE + 5 +555 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +229F + 8 +DETAILS + 10 +4158.9975 + 20 +5990.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +22A0 + 8 +DETAILS + 10 +4161.0025 + 20 +5990.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +22A1 + 8 +DETAILS + 0 +POLYLINE + 5 +559 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +22A2 + 8 +DETAILS + 10 +4158.9975 + 20 +5990.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +22A3 + 8 +DETAILS + 10 +4161.0025 + 20 +5990.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +22A4 + 8 +DETAILS + 0 +POLYLINE + 5 +55D + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +22A5 + 8 +DETAILS + 10 +4183.9975 + 20 +5990.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +22A6 + 8 +DETAILS + 10 +4186.0025 + 20 +5990.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +22A7 + 8 +DETAILS + 0 +POLYLINE + 5 +561 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +22A8 + 8 +DETAILS + 10 +4173.9975 + 20 +5970.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +22A9 + 8 +DETAILS + 10 +4176.0025 + 20 +5970.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +22AA + 8 +DETAILS + 0 +POLYLINE + 5 +565 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +22AB + 8 +DETAILS + 10 +4203.9975 + 20 +5970.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +22AC + 8 +DETAILS + 10 +4206.0025 + 20 +5970.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +22AD + 8 +DETAILS + 0 +POLYLINE + 5 +569 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +22AE + 8 +DETAILS + 10 +5928.9975 + 20 +4810.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +22AF + 8 +DETAILS + 10 +5931.0025 + 20 +4810.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +22B0 + 8 +DETAILS + 0 +POLYLINE + 5 +56D + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +22B1 + 8 +DETAILS + 10 +5903.9975 + 20 +4780.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +22B2 + 8 +DETAILS + 10 +5906.0025 + 20 +4780.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +22B3 + 8 +DETAILS + 0 +POLYLINE + 5 +571 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +22B4 + 8 +DETAILS + 10 +5883.9975 + 20 +4745.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +22B5 + 8 +DETAILS + 10 +5886.0025 + 20 +4745.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +22B6 + 8 +DETAILS + 0 +POLYLINE + 5 +575 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +22B7 + 8 +DETAILS + 10 +5928.9975 + 20 +4810.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +22B8 + 8 +DETAILS + 10 +5931.0025 + 20 +4810.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +22B9 + 8 +DETAILS + 0 +POLYLINE + 5 +579 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +22BA + 8 +DETAILS + 10 +5944.887167 + 20 +4778.814772 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +22BB + 8 +DETAILS + 10 +5946.892167 + 20 +4778.814772 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +22BC + 8 +DETAILS + 0 +POLYLINE + 5 +57D + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +22BD + 8 +DETAILS + 10 +5944.887167 + 20 +4778.814772 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +22BE + 8 +DETAILS + 10 +5946.892167 + 20 +4778.814772 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +22BF + 8 +DETAILS + 0 +POLYLINE + 5 +581 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +22C0 + 8 +DETAILS + 10 +5899.887167 + 20 +4713.814772 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +22C1 + 8 +DETAILS + 10 +5901.892167 + 20 +4713.814772 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +22C2 + 8 +DETAILS + 0 +POLYLINE + 5 +585 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +22C3 + 8 +DETAILS + 10 +5919.887167 + 20 +4748.814772 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +22C4 + 8 +DETAILS + 10 +5921.892167 + 20 +4748.814772 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +22C5 + 8 +DETAILS + 0 +POLYLINE + 5 +589 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +22C6 + 8 +DETAILS + 10 +5935.776835 + 20 +4717.629543 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +22C7 + 8 +DETAILS + 10 +5937.781835 + 20 +4717.629543 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +22C8 + 8 +DETAILS + 0 +POLYLINE + 5 +58D + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +22C9 + 8 +DETAILS + 10 +5960.776835 + 20 +4747.629543 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +22CA + 8 +DETAILS + 10 +5962.781835 + 20 +4747.629543 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +22CB + 8 +DETAILS + 0 +POLYLINE + 5 +591 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +22CC + 8 +DETAILS + 10 +5960.776835 + 20 +4747.629543 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +22CD + 8 +DETAILS + 10 +5962.781835 + 20 +4747.629543 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +22CE + 8 +DETAILS + 0 +POLYLINE + 5 +595 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +22CF + 8 +DETAILS + 10 +5976.666502 + 20 +4716.444315 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +22D0 + 8 +DETAILS + 10 +5978.671502 + 20 +4716.444315 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +22D1 + 8 +DETAILS + 0 +POLYLINE + 5 +599 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +22D2 + 8 +DETAILS + 10 +5976.666502 + 20 +4716.444315 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +22D3 + 8 +DETAILS + 10 +5978.671502 + 20 +4716.444315 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +22D4 + 8 +DETAILS + 0 +POLYLINE + 5 +59D + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +22D5 + 8 +DETAILS + 10 +5915.776835 + 20 +4682.629543 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +22D6 + 8 +DETAILS + 10 +5917.781835 + 20 +4682.629543 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +22D7 + 8 +DETAILS + 0 +POLYLINE + 5 +5A1 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +22D8 + 8 +DETAILS + 10 +5931.666502 + 20 +4651.444315 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +22D9 + 8 +DETAILS + 10 +5933.671502 + 20 +4651.444315 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +22DA + 8 +DETAILS + 0 +POLYLINE + 5 +5A5 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +22DB + 8 +DETAILS + 10 +5992.55617 + 20 +4685.259087 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +22DC + 8 +DETAILS + 10 +5994.56117 + 20 +4685.259087 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +22DD + 8 +DETAILS + 0 +POLYLINE + 5 +5A9 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +22DE + 8 +DETAILS + 10 +5992.55617 + 20 +4685.259087 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +22DF + 8 +DETAILS + 10 +5994.56117 + 20 +4685.259087 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +22E0 + 8 +DETAILS + 0 +POLYLINE + 5 +5AD + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +22E1 + 8 +DETAILS + 10 +5947.55617 + 20 +4620.259087 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +22E2 + 8 +DETAILS + 10 +5949.56117 + 20 +4620.259087 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +22E3 + 8 +DETAILS + 0 +POLYLINE + 5 +5B1 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +22E4 + 8 +DETAILS + 10 +5967.55617 + 20 +4655.259087 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +22E5 + 8 +DETAILS + 10 +5969.56117 + 20 +4655.259087 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +22E6 + 8 +DETAILS + 0 +POLYLINE + 5 +5B5 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +22E7 + 8 +DETAILS + 10 +6008.445837 + 20 +4654.073858 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +22E8 + 8 +DETAILS + 10 +6010.450837 + 20 +4654.073858 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +22E9 + 8 +DETAILS + 0 +POLYLINE + 5 +5B9 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +22EA + 8 +DETAILS + 10 +6008.445837 + 20 +4654.073858 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +22EB + 8 +DETAILS + 10 +6010.450837 + 20 +4654.073858 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +22EC + 8 +DETAILS + 0 +POLYLINE + 5 +5BD + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +22ED + 8 +DETAILS + 10 +5983.445837 + 20 +4624.073858 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +22EE + 8 +DETAILS + 10 +5985.450837 + 20 +4624.073858 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +22EF + 8 +DETAILS + 0 +POLYLINE + 5 +5C1 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +22F0 + 8 +DETAILS + 10 +6024.335505 + 20 +4622.88863 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +22F1 + 8 +DETAILS + 10 +6026.340505 + 20 +4622.88863 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +22F2 + 8 +DETAILS + 0 +POLYLINE + 5 +5C5 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +22F3 + 8 +DETAILS + 10 +6024.335505 + 20 +4622.88863 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +22F4 + 8 +DETAILS + 10 +6026.340505 + 20 +4622.88863 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +22F5 + 8 +DETAILS + 0 +POLYLINE + 5 +5C9 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +22F6 + 8 +DETAILS + 10 +5963.445837 + 20 +4589.073858 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +22F7 + 8 +DETAILS + 10 +5965.450837 + 20 +4589.073858 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +22F8 + 8 +DETAILS + 0 +POLYLINE + 5 +5CD + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +22F9 + 8 +DETAILS + 10 +5979.335505 + 20 +4557.88863 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +22FA + 8 +DETAILS + 10 +5981.340505 + 20 +4557.88863 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +22FB + 8 +DETAILS + 0 +POLYLINE + 5 +5D1 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +22FC + 8 +DETAILS + 10 +5999.335505 + 20 +4592.88863 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +22FD + 8 +DETAILS + 10 +6001.340505 + 20 +4592.88863 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +22FE + 8 +DETAILS + 0 +POLYLINE + 5 +5D5 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +22FF + 8 +DETAILS + 10 +6040.225172 + 20 +4591.703402 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2300 + 8 +DETAILS + 10 +6042.230172 + 20 +4591.703402 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2301 + 8 +DETAILS + 0 +POLYLINE + 5 +5D9 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +2302 + 8 +DETAILS + 10 +6040.225172 + 20 +4591.703402 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2303 + 8 +DETAILS + 10 +6042.230172 + 20 +4591.703402 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2304 + 8 +DETAILS + 0 +POLYLINE + 5 +5DD + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +2305 + 8 +DETAILS + 10 +6056.11484 + 20 +4560.518173 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2306 + 8 +DETAILS + 10 +6058.11984 + 20 +4560.518173 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2307 + 8 +DETAILS + 0 +POLYLINE + 5 +5E1 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +2308 + 8 +DETAILS + 10 +6056.11484 + 20 +4560.518173 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2309 + 8 +DETAILS + 10 +6058.11984 + 20 +4560.518173 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +230A + 8 +DETAILS + 0 +POLYLINE + 5 +5E5 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +230B + 8 +DETAILS + 10 +6015.225172 + 20 +4561.703402 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +230C + 8 +DETAILS + 10 +6017.230172 + 20 +4561.703402 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +230D + 8 +DETAILS + 0 +POLYLINE + 5 +5E9 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +230E + 8 +DETAILS + 10 +15122.44383 + 20 +4685.259087 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +230F + 8 +DETAILS + 10 +15120.43883 + 20 +4685.259087 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +2310 + 8 +DETAILS + 0 +POLYLINE + 5 +5ED + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +2311 + 8 +DETAILS + 10 +15122.44383 + 20 +4685.259087 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +2312 + 8 +DETAILS + 10 +15120.43883 + 20 +4685.259087 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +2313 + 8 +DETAILS + 0 +POLYLINE + 5 +5F1 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +2314 + 8 +DETAILS + 10 +15135.664495 + 20 +4557.88863 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +2315 + 8 +DETAILS + 10 +15133.659495 + 20 +4557.88863 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +2316 + 8 +DETAILS + 0 +POLYLINE + 5 +5F5 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +2317 + 8 +DETAILS + 10 +15151.554163 + 20 +4589.073858 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +2318 + 8 +DETAILS + 10 +15149.549163 + 20 +4589.073858 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +2319 + 8 +DETAILS + 0 +POLYLINE + 5 +5F9 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +231A + 8 +DETAILS + 10 +15131.554163 + 20 +4624.073858 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +231B + 8 +DETAILS + 10 +15129.549163 + 20 +4624.073858 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +231C + 8 +DETAILS + 0 +POLYLINE + 5 +5FD + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +231D + 8 +DETAILS + 10 +15167.44383 + 20 +4620.259087 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +231E + 8 +DETAILS + 10 +15165.43883 + 20 +4620.259087 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +231F + 8 +DETAILS + 0 +POLYLINE + 5 +601 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +2320 + 8 +DETAILS + 10 +15147.44383 + 20 +4655.259087 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +2321 + 8 +DETAILS + 10 +15145.43883 + 20 +4655.259087 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +2322 + 8 +DETAILS + 0 +POLYLINE + 5 +605 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +2323 + 8 +DETAILS + 10 +15183.333498 + 20 +4651.444315 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +2324 + 8 +DETAILS + 10 +15181.328498 + 20 +4651.444315 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +2325 + 8 +DETAILS + 0 +POLYLINE + 5 +609 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +2326 + 8 +DETAILS + 10 +15199.223165 + 20 +4682.629543 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +2327 + 8 +DETAILS + 10 +15197.218165 + 20 +4682.629543 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +2328 + 8 +DETAILS + 0 +POLYLINE + 5 +60D + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +2329 + 8 +DETAILS + 10 +15138.333498 + 20 +4716.444315 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +232A + 8 +DETAILS + 10 +15136.328498 + 20 +4716.444315 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +232B + 8 +DETAILS + 0 +POLYLINE + 5 +611 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +232C + 8 +DETAILS + 10 +15138.333498 + 20 +4716.444315 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +232D + 8 +DETAILS + 10 +15136.328498 + 20 +4716.444315 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +232E + 8 +DETAILS + 0 +POLYLINE + 5 +615 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +232F + 8 +DETAILS + 10 +15154.223165 + 20 +4747.629543 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +2330 + 8 +DETAILS + 10 +15152.218165 + 20 +4747.629543 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +2331 + 8 +DETAILS + 0 +POLYLINE + 5 +619 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +2332 + 8 +DETAILS + 10 +15154.223165 + 20 +4747.629543 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +2333 + 8 +DETAILS + 10 +15152.218165 + 20 +4747.629543 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +2334 + 8 +DETAILS + 0 +POLYLINE + 5 +61D + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +2335 + 8 +DETAILS + 10 +15179.223165 + 20 +4717.629543 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +2336 + 8 +DETAILS + 10 +15177.218165 + 20 +4717.629543 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +2337 + 8 +DETAILS + 0 +POLYLINE + 5 +621 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +2338 + 8 +DETAILS + 10 +15195.112833 + 20 +4748.814772 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +2339 + 8 +DETAILS + 10 +15193.107833 + 20 +4748.814772 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +233A + 8 +DETAILS + 0 +POLYLINE + 5 +625 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +233B + 8 +DETAILS + 10 +15215.112833 + 20 +4713.814772 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +233C + 8 +DETAILS + 10 +15213.107833 + 20 +4713.814772 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +233D + 8 +DETAILS + 0 +POLYLINE + 5 +629 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +233E + 8 +DETAILS + 10 +15170.112833 + 20 +4778.814772 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +233F + 8 +DETAILS + 10 +15168.107833 + 20 +4778.814772 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +2340 + 8 +DETAILS + 0 +POLYLINE + 5 +62D + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +2341 + 8 +DETAILS + 10 +15170.112833 + 20 +4778.814772 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +2342 + 8 +DETAILS + 10 +15168.107833 + 20 +4778.814772 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +2343 + 8 +DETAILS + 0 +POLYLINE + 5 +631 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +2344 + 8 +DETAILS + 10 +15186.0025 + 20 +4810.0 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +2345 + 8 +DETAILS + 10 +15183.9975 + 20 +4810.0 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +2346 + 8 +DETAILS + 0 +POLYLINE + 5 +635 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +2347 + 8 +DETAILS + 10 +15231.0025 + 20 +4745.0 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +2348 + 8 +DETAILS + 10 +15228.9975 + 20 +4745.0 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +2349 + 8 +DETAILS + 0 +POLYLINE + 5 +639 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +234A + 8 +DETAILS + 10 +15211.0025 + 20 +4780.0 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +234B + 8 +DETAILS + 10 +15208.9975 + 20 +4780.0 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +234C + 8 +DETAILS + 0 +POLYLINE + 5 +63D + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +234D + 8 +DETAILS + 10 +15186.0025 + 20 +4810.0 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +234E + 8 +DETAILS + 10 +15183.9975 + 20 +4810.0 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +234F + 8 +DETAILS + 0 +POLYLINE + 5 +641 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2350 + 8 +DETAILS + 10 +15234.103964 + 20 +4714.16655 + 30 +0.0 + 0 +VERTEX + 5 +2351 + 8 +DETAILS + 10 +15245.041865 + 20 +4726.854887 + 30 +0.0 + 0 +SEQEND + 5 +2352 + 8 +DETAILS + 0 +POLYLINE + 5 +645 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2353 + 8 +DETAILS + 10 +15219.454976 + 20 +4697.574043 + 30 +0.0 + 0 +VERTEX + 5 +2354 + 8 +DETAILS + 10 +15228.830375 + 20 +4709.091158 + 30 +0.0 + 0 +SEQEND + 5 +2355 + 8 +DETAILS + 0 +POLYLINE + 5 +649 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2356 + 8 +DETAILS + 10 +15204.610724 + 20 +4679.224761 + 30 +0.0 + 0 +VERTEX + 5 +2357 + 8 +DETAILS + 10 +15214.181387 + 20 +4691.132263 + 30 +0.0 + 0 +SEQEND + 5 +2358 + 8 +DETAILS + 0 +POLYLINE + 5 +64D + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2359 + 8 +DETAILS + 10 +15136.444205 + 20 +4691.522709 + 30 +0.0 + 0 +VERTEX + 5 +235A + 8 +DETAILS + 10 +15119.842089 + 20 +4695.426764 + 30 +0.0 + 0 +SEQEND + 5 +235B + 8 +DETAILS + 0 +POLYLINE + 5 +651 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +235C + 8 +DETAILS + 10 +15164.765569 + 20 +4684.49526 + 30 +0.0 + 0 +VERTEX + 5 +235D + 8 +DETAILS + 10 +15146.014868 + 20 +4689.37543 + 30 +0.0 + 0 +SEQEND + 5 +235E + 8 +DETAILS + 0 +POLYLINE + 5 +655 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +235F + 8 +DETAILS + 10 +15199.923024 + 20 +4675.125425 + 30 +0.0 + 0 +VERTEX + 5 +2360 + 8 +DETAILS + 10 +15177.461333 + 20 +4680.786371 + 30 +0.0 + 0 +SEQEND + 5 +2361 + 8 +DETAILS + 0 +POLYLINE + 5 +659 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +2362 + 8 +DETAILS + 10 +15099.774828 + 20 +4561.703402 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +2363 + 8 +DETAILS + 10 +15097.769828 + 20 +4561.703402 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +2364 + 8 +DETAILS + 0 +POLYLINE + 5 +65D + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +2365 + 8 +DETAILS + 10 +15058.88516 + 20 +4560.518173 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +2366 + 8 +DETAILS + 10 +15056.88016 + 20 +4560.518173 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +2367 + 8 +DETAILS + 0 +POLYLINE + 5 +661 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +2368 + 8 +DETAILS + 10 +15058.88516 + 20 +4560.518173 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +2369 + 8 +DETAILS + 10 +15056.88016 + 20 +4560.518173 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +236A + 8 +DETAILS + 0 +POLYLINE + 5 +665 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +236B + 8 +DETAILS + 10 +15074.774828 + 20 +4591.703402 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +236C + 8 +DETAILS + 10 +15072.769828 + 20 +4591.703402 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +236D + 8 +DETAILS + 0 +POLYLINE + 5 +669 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +236E + 8 +DETAILS + 10 +15074.774828 + 20 +4591.703402 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +236F + 8 +DETAILS + 10 +15072.769828 + 20 +4591.703402 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +2370 + 8 +DETAILS + 0 +POLYLINE + 5 +66D + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +2371 + 8 +DETAILS + 10 +15115.664495 + 20 +4592.88863 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +2372 + 8 +DETAILS + 10 +15113.659495 + 20 +4592.88863 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +2373 + 8 +DETAILS + 0 +POLYLINE + 5 +671 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +2374 + 8 +DETAILS + 10 +15090.664495 + 20 +4622.88863 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +2375 + 8 +DETAILS + 10 +15088.659495 + 20 +4622.88863 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +2376 + 8 +DETAILS + 0 +POLYLINE + 5 +675 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +2377 + 8 +DETAILS + 10 +15090.664495 + 20 +4622.88863 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +2378 + 8 +DETAILS + 10 +15088.659495 + 20 +4622.88863 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +2379 + 8 +DETAILS + 0 +POLYLINE + 5 +679 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +237A + 8 +DETAILS + 10 +15106.554163 + 20 +4654.073858 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +237B + 8 +DETAILS + 10 +15104.549163 + 20 +4654.073858 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +237C + 8 +DETAILS + 0 +POLYLINE + 5 +67D + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +237D + 8 +DETAILS + 10 +15106.554163 + 20 +4654.073858 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +237E + 8 +DETAILS + 10 +15104.549163 + 20 +4654.073858 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +237F + 8 +DETAILS + 0 +POLYLINE + 5 +681 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2380 + 8 +DETAILS + 10 +15112.81054 + 20 +4696.793209 + 30 +0.0 + 0 +VERTEX + 5 +2381 + 8 +DETAILS + 10 +15097.18494 + 20 +4700.892544 + 30 +0.0 + 0 +SEQEND + 5 +2382 + 8 +DETAILS + 0 +POLYLINE + 5 +685 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +2383 + 8 +DETAILS + 10 +10493.9975 + 20 +9965.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2384 + 8 +DETAILS + 10 +10496.0025 + 20 +9965.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2385 + 8 +DETAILS + 0 +POLYLINE + 5 +689 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +2386 + 8 +DETAILS + 10 +10513.9975 + 20 +9965.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2387 + 8 +DETAILS + 10 +10516.0025 + 20 +9965.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2388 + 8 +DETAILS + 0 +POLYLINE + 5 +68D + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +2389 + 8 +DETAILS + 10 +10538.9975 + 20 +9965.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +238A + 8 +DETAILS + 10 +10541.0025 + 20 +9965.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +238B + 8 +DETAILS + 0 +POLYLINE + 5 +691 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +238C + 8 +DETAILS + 10 +10503.9975 + 20 +9945.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +238D + 8 +DETAILS + 10 +10506.0025 + 20 +9945.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +238E + 8 +DETAILS + 0 +POLYLINE + 5 +695 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +238F + 8 +DETAILS + 10 +10528.9975 + 20 +9945.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2390 + 8 +DETAILS + 10 +10531.0025 + 20 +9945.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2391 + 8 +DETAILS + 0 +POLYLINE + 5 +699 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +2392 + 8 +DETAILS + 10 +10493.9975 + 20 +9925.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2393 + 8 +DETAILS + 10 +10496.0025 + 20 +9925.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2394 + 8 +DETAILS + 0 +POLYLINE + 5 +69D + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +2395 + 8 +DETAILS + 10 +10538.9975 + 20 +9925.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2396 + 8 +DETAILS + 10 +10541.0025 + 20 +9925.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2397 + 8 +DETAILS + 0 +POLYLINE + 5 +6A1 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +2398 + 8 +DETAILS + 10 +10513.9975 + 20 +9925.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2399 + 8 +DETAILS + 10 +10516.0025 + 20 +9925.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +239A + 8 +DETAILS + 0 +POLYLINE + 5 +6A5 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +239B + 8 +DETAILS + 10 +10573.9975 + 20 +9965.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +239C + 8 +DETAILS + 10 +10576.0025 + 20 +9965.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +239D + 8 +DETAILS + 0 +POLYLINE + 5 +6A9 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +239E + 8 +DETAILS + 10 +10598.9975 + 20 +9965.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +239F + 8 +DETAILS + 10 +10601.0025 + 20 +9965.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +23A0 + 8 +DETAILS + 0 +POLYLINE + 5 +6AD + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +23A1 + 8 +DETAILS + 10 +10618.9975 + 20 +9965.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +23A2 + 8 +DETAILS + 10 +10621.0025 + 20 +9965.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +23A3 + 8 +DETAILS + 0 +POLYLINE + 5 +6B1 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +23A4 + 8 +DETAILS + 10 +10583.9975 + 20 +9945.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +23A5 + 8 +DETAILS + 10 +10586.0025 + 20 +9945.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +23A6 + 8 +DETAILS + 0 +POLYLINE + 5 +6B5 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +23A7 + 8 +DETAILS + 10 +10608.9975 + 20 +9945.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +23A8 + 8 +DETAILS + 10 +10611.0025 + 20 +9945.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +23A9 + 8 +DETAILS + 0 +POLYLINE + 5 +6B9 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +23AA + 8 +DETAILS + 10 +10573.9975 + 20 +9925.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +23AB + 8 +DETAILS + 10 +10576.0025 + 20 +9925.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +23AC + 8 +DETAILS + 0 +POLYLINE + 5 +6BD + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +23AD + 8 +DETAILS + 10 +10598.9975 + 20 +9925.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +23AE + 8 +DETAILS + 10 +10601.0025 + 20 +9925.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +23AF + 8 +DETAILS + 0 +POLYLINE + 5 +6C1 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +23B0 + 8 +DETAILS + 10 +10618.9975 + 20 +9925.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +23B1 + 8 +DETAILS + 10 +10621.0025 + 20 +9925.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +23B2 + 8 +DETAILS + 0 +POLYLINE + 5 +6C5 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +23B3 + 8 +DETAILS + 10 +7115.817185 + 20 +7745.815039 + 30 +0.0 + 0 +VERTEX + 5 +23B4 + 8 +DETAILS + 10 +7000.0 + 20 +7745.815039 + 30 +0.0 + 0 +VERTEX + 5 +23B5 + 8 +DETAILS + 10 +7000.0 + 20 +7793.254706 + 30 +0.0 + 0 +VERTEX + 5 +23B6 + 8 +DETAILS + 10 +7095.0 + 20 +7793.254706 + 30 +0.0 + 0 +VERTEX + 5 +23B7 + 8 +DETAILS + 10 +7145.0 + 20 +7748.254706 + 30 +0.0 + 0 +VERTEX + 5 +23B8 + 8 +DETAILS + 10 +7220.0 + 20 +7748.254706 + 30 +0.0 + 0 +VERTEX + 5 +23B9 + 8 +DETAILS + 10 +7220.0 + 20 +7744.732491 + 30 +0.0 + 0 +SEQEND + 5 +23BA + 8 +DETAILS + 0 +POLYLINE + 5 +6CE + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +23BB + 8 +DETAILS + 10 +7068.9975 + 20 +7758.254706 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +23BC + 8 +DETAILS + 10 +7071.0025 + 20 +7758.254706 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +23BD + 8 +DETAILS + 0 +POLYLINE + 5 +6D2 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +23BE + 8 +DETAILS + 10 +7038.9975 + 20 +7758.254706 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +23BF + 8 +DETAILS + 10 +7041.0025 + 20 +7758.254706 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +23C0 + 8 +DETAILS + 0 +POLYLINE + 5 +6D6 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +23C1 + 8 +DETAILS + 10 +7048.9975 + 20 +7778.254706 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +23C2 + 8 +DETAILS + 10 +7051.0025 + 20 +7778.254706 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +23C3 + 8 +DETAILS + 0 +POLYLINE + 5 +6DA + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +23C4 + 8 +DETAILS + 10 +7023.9975 + 20 +7778.254706 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +23C5 + 8 +DETAILS + 10 +7026.0025 + 20 +7778.254706 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +23C6 + 8 +DETAILS + 0 +POLYLINE + 5 +6DE + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +23C7 + 8 +DETAILS + 10 +7023.9975 + 20 +7778.254706 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +23C8 + 8 +DETAILS + 10 +7026.0025 + 20 +7778.254706 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +23C9 + 8 +DETAILS + 0 +POLYLINE + 5 +6E2 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +23CA + 8 +DETAILS + 10 +16864.182815 + 20 +5957.560333 + 30 +0.0 + 0 +VERTEX + 5 +23CB + 8 +DETAILS + 10 +16980.0 + 20 +5957.560333 + 30 +0.0 + 0 +VERTEX + 5 +23CC + 8 +DETAILS + 10 +16980.0 + 20 +6005.0 + 30 +0.0 + 0 +VERTEX + 5 +23CD + 8 +DETAILS + 10 +16885.0 + 20 +6005.0 + 30 +0.0 + 0 +VERTEX + 5 +23CE + 8 +DETAILS + 10 +16835.0 + 20 +5960.0 + 30 +0.0 + 0 +VERTEX + 5 +23CF + 8 +DETAILS + 10 +16760.0 + 20 +5960.0 + 30 +0.0 + 0 +VERTEX + 5 +23D0 + 8 +DETAILS + 10 +16760.0 + 20 +5956.477785 + 30 +0.0 + 0 +SEQEND + 5 +23D1 + 8 +DETAILS + 0 +POLYLINE + 5 +6EB + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +23D2 + 8 +DETAILS + 10 +16911.0025 + 20 +5970.0 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +23D3 + 8 +DETAILS + 10 +16908.9975 + 20 +5970.0 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +23D4 + 8 +DETAILS + 0 +POLYLINE + 5 +6EF + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +23D5 + 8 +DETAILS + 10 +16941.0025 + 20 +5970.0 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +23D6 + 8 +DETAILS + 10 +16938.9975 + 20 +5970.0 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +23D7 + 8 +DETAILS + 0 +POLYLINE + 5 +6F3 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +23D8 + 8 +DETAILS + 10 +16931.0025 + 20 +5990.0 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +23D9 + 8 +DETAILS + 10 +16928.9975 + 20 +5990.0 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +23DA + 8 +DETAILS + 0 +POLYLINE + 5 +6F7 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +23DB + 8 +DETAILS + 10 +16956.0025 + 20 +5990.0 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +23DC + 8 +DETAILS + 10 +16953.9975 + 20 +5990.0 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +23DD + 8 +DETAILS + 0 +POLYLINE + 5 +6FB + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +23DE + 8 +DETAILS + 10 +16956.0025 + 20 +5990.0 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +23DF + 8 +DETAILS + 10 +16953.9975 + 20 +5990.0 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +23E0 + 8 +DETAILS + 0 +POLYLINE + 5 +6FF + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +23E1 + 8 +DETAILS + 10 +13999.182815 + 20 +7745.815039 + 30 +0.0 + 0 +VERTEX + 5 +23E2 + 8 +DETAILS + 10 +14115.0 + 20 +7745.815039 + 30 +0.0 + 0 +VERTEX + 5 +23E3 + 8 +DETAILS + 10 +14115.0 + 20 +7793.254706 + 30 +0.0 + 0 +VERTEX + 5 +23E4 + 8 +DETAILS + 10 +14020.0 + 20 +7793.254706 + 30 +0.0 + 0 +VERTEX + 5 +23E5 + 8 +DETAILS + 10 +13970.0 + 20 +7748.254706 + 30 +0.0 + 0 +VERTEX + 5 +23E6 + 8 +DETAILS + 10 +13895.0 + 20 +7748.254706 + 30 +0.0 + 0 +VERTEX + 5 +23E7 + 8 +DETAILS + 10 +13895.0 + 20 +7744.732491 + 30 +0.0 + 0 +SEQEND + 5 +23E8 + 8 +DETAILS + 0 +POLYLINE + 5 +708 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +23E9 + 8 +DETAILS + 10 +14091.0025 + 20 +7778.254706 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +23EA + 8 +DETAILS + 10 +14088.9975 + 20 +7778.254706 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +23EB + 8 +DETAILS + 0 +POLYLINE + 5 +70C + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +23EC + 8 +DETAILS + 10 +14091.0025 + 20 +7778.254706 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +23ED + 8 +DETAILS + 10 +14088.9975 + 20 +7778.254706 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +23EE + 8 +DETAILS + 0 +POLYLINE + 5 +710 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +23EF + 8 +DETAILS + 10 +14066.0025 + 20 +7778.254706 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +23F0 + 8 +DETAILS + 10 +14063.9975 + 20 +7778.254706 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +23F1 + 8 +DETAILS + 0 +POLYLINE + 5 +714 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +23F2 + 8 +DETAILS + 10 +14076.0025 + 20 +7758.254706 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +23F3 + 8 +DETAILS + 10 +14073.9975 + 20 +7758.254706 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +23F4 + 8 +DETAILS + 0 +POLYLINE + 5 +718 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +23F5 + 8 +DETAILS + 10 +14046.0025 + 20 +7758.254706 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +23F6 + 8 +DETAILS + 10 +14043.9975 + 20 +7758.254706 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +23F7 + 8 +DETAILS + 0 +POLYLINE + 5 +71C + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +23F8 + 8 +HOLZ + 10 +16757.5 + 20 +7365.0 + 30 +0.0 + 0 +VERTEX + 5 +23F9 + 8 +HOLZ + 10 +16757.5 + 20 +7485.0 + 30 +0.0 + 0 +VERTEX + 5 +23FA + 8 +HOLZ + 10 +16857.5 + 20 +7485.0 + 30 +0.0 + 0 +VERTEX + 5 +23FB + 8 +HOLZ + 10 +16857.5 + 20 +7365.0 + 30 +0.0 + 0 +SEQEND + 5 +23FC + 8 +HOLZ + 0 +POLYLINE + 5 +722 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +23FD + 8 +HOLZ + 10 +17310.0 + 20 +7425.4 + 30 +0.0 + 0 +VERTEX + 5 +23FE + 8 +HOLZ + 10 +16857.5 + 20 +7464.98862 + 30 +0.0 + 0 +SEQEND + 5 +23FF + 8 +HOLZ + 0 +POLYLINE + 5 +726 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2400 + 8 +DETAILS + 10 +16864.123694 + 20 +7434.615507 + 30 +0.0 + 0 +VERTEX + 5 +2401 + 8 +DETAILS + 10 +16864.123694 + 20 +7574.602207 + 30 +0.0 + 0 +VERTEX + 5 +2402 + 8 +DETAILS + 10 +16908.965186 + 20 +7574.602207 + 30 +0.0 + 0 +VERTEX + 5 +2403 + 8 +DETAILS + 10 +16908.965186 + 20 +7505.222869 + 30 +0.0 + 0 +VERTEX + 5 +2404 + 8 +DETAILS + 10 +16875.0 + 20 +7475.0 + 30 +0.0 + 0 +VERTEX + 5 +2405 + 8 +DETAILS + 10 +16875.0 + 20 +7410.0 + 30 +0.0 + 0 +VERTEX + 5 +2406 + 8 +DETAILS + 10 +16865.0 + 20 +7410.0 + 30 +0.0 + 0 +VERTEX + 5 +2407 + 8 +DETAILS + 10 +16865.0 + 20 +7450.0 + 30 +0.0 + 0 +SEQEND + 5 +2408 + 8 +DETAILS + 0 +POLYLINE + 5 +730 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +2409 + 8 +DETAILS + 10 +16878.9975 + 20 +7555.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +240A + 8 +DETAILS + 10 +16881.0025 + 20 +7555.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +240B + 8 +DETAILS + 0 +POLYLINE + 5 +734 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +240C + 8 +DETAILS + 10 +16893.9975 + 20 +7545.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +240D + 8 +DETAILS + 10 +16896.0025 + 20 +7545.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +240E + 8 +DETAILS + 0 +POLYLINE + 5 +738 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +240F + 8 +DETAILS + 10 +16893.9975 + 20 +7520.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2410 + 8 +DETAILS + 10 +16896.0025 + 20 +7520.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2411 + 8 +DETAILS + 0 +POLYLINE + 5 +73C + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +2412 + 8 +DETAILS + 10 +16878.9975 + 20 +7530.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2413 + 8 +DETAILS + 10 +16881.0025 + 20 +7530.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2414 + 8 +DETAILS + 0 +POLYLINE + 5 +740 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2415 + 8 +DETAILS + 10 +13820.0 + 20 +7670.0 + 30 +0.0 + 0 +VERTEX + 5 +2416 + 8 +DETAILS + 10 +13820.0 + 20 +7825.0 + 30 +0.0 + 0 +VERTEX + 5 +2417 + 8 +DETAILS + 10 +13832.258688 + 20 +7825.0 + 30 +0.0 + 0 +SEQEND + 5 +2418 + 8 +DETAILS + 0 +POLYLINE + 5 +745 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2419 + 8 +DETAILS + 10 +13880.0 + 20 +7795.167917 + 30 +0.0 + 0 +VERTEX + 5 +241A + 8 +DETAILS + 10 +13880.0 + 20 +7765.0 + 30 +0.0 + 0 +VERTEX + 5 +241B + 8 +DETAILS + 10 +13835.0 + 20 +7740.0 + 30 +0.0 + 0 +VERTEX + 5 +241C + 8 +DETAILS + 10 +13835.0 + 20 +7670.0 + 30 +0.0 + 0 +VERTEX + 5 +241D + 8 +DETAILS + 10 +13820.0 + 20 +7670.0 + 30 +0.0 + 0 +SEQEND + 5 +241E + 8 +DETAILS + 0 +POLYLINE + 5 +74C + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +241F + 8 +DETAILS + 10 +13836.69948 + 20 +7809.90568 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2420 + 8 +DETAILS + 10 +13838.70448 + 20 +7809.90568 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2421 + 8 +DETAILS + 0 +POLYLINE + 5 +750 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +2422 + 8 +DETAILS + 10 +13836.69948 + 20 +7776.50941 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2423 + 8 +DETAILS + 10 +13838.70448 + 20 +7776.50941 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2424 + 8 +DETAILS + 0 +POLYLINE + 5 +754 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +2425 + 8 +DETAILS + 10 +13859.918036 + 20 +7783.867891 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2426 + 8 +DETAILS + 10 +13861.923036 + 20 +7783.867891 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2427 + 8 +DETAILS + 0 +POLYLINE + 5 +758 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2428 + 8 +DETAILS + 10 +13830.0 + 20 +7840.0 + 30 +0.0 + 0 +VERTEX + 5 +2429 + 8 +DETAILS + 10 +13830.0 + 20 +7870.0 + 30 +0.0 + 0 +SEQEND + 5 +242A + 8 +DETAILS + 0 +POLYLINE + 5 +75C + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +242B + 8 +DETAILS + 10 +13840.0 + 20 +7870.0 + 30 +0.0 + 0 +VERTEX + 5 +242C + 8 +DETAILS + 10 +13878.476039 + 20 +7867.075464 + 30 +0.0 + 0 +SEQEND + 5 +242D + 8 +DETAILS + 0 +POLYLINE + 5 +760 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +242E + 8 +DETAILS + 10 +13901.727343 + 20 +7864.339587 + 30 +0.0 + 0 +VERTEX + 5 +242F + 8 +DETAILS + 10 +13940.203382 + 20 +7861.415051 + 30 +0.0 + 0 +SEQEND + 5 +2430 + 8 +DETAILS + 0 +POLYLINE + 5 +764 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2431 + 8 +DETAILS + 10 +13966.852553 + 20 +7858.679174 + 30 +0.0 + 0 +VERTEX + 5 +2432 + 8 +DETAILS + 10 +14005.328591 + 20 +7855.754638 + 30 +0.0 + 0 +SEQEND + 5 +2433 + 8 +DETAILS + 0 +POLYLINE + 5 +768 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2434 + 8 +DETAILS + 10 +14034.24295 + 20 +7853.018817 + 30 +0.0 + 0 +VERTEX + 5 +2435 + 8 +DETAILS + 10 +14072.718989 + 20 +7850.09428 + 30 +0.0 + 0 +SEQEND + 5 +2436 + 8 +DETAILS + 0 +POLYLINE + 5 +76C + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2437 + 8 +DETAILS + 10 +14101.067093 + 20 +7846.226376 + 30 +0.0 + 0 +VERTEX + 5 +2438 + 8 +DETAILS + 10 +14139.543132 + 20 +7843.30184 + 30 +0.0 + 0 +SEQEND + 5 +2439 + 8 +DETAILS + 0 +POLYLINE + 5 +770 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +243A + 8 +HOLZ + 10 +14143.126569 + 20 +7843.000301 + 30 +0.0 + 0 +VERTEX + 5 +243B + 8 +HOLZ + 10 +17322.201804 + 20 +7564.867258 + 30 +0.0 + 0 +VERTEX + 5 +243C + 8 +HOLZ + 10 +17310.0 + 20 +7425.4 + 30 +0.0 + 0 +SEQEND + 5 +243D + 8 +HOLZ + 0 +POLYLINE + 5 +775 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +243E + 8 +DETAILS + 10 +14034.80929 + 20 +7712.075419 + 30 +0.0 + 0 +VERTEX + 5 +243F + 8 +DETAILS + 10 +14073.285328 + 20 +7709.150883 + 30 +0.0 + 0 +SEQEND + 5 +2440 + 8 +DETAILS + 0 +POLYLINE + 5 +779 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2441 + 8 +DETAILS + 10 +14097.669312 + 20 +7706.981047 + 30 +0.0 + 0 +VERTEX + 5 +2442 + 8 +DETAILS + 10 +14136.14535 + 20 +7704.056511 + 30 +0.0 + 0 +SEQEND + 5 +2443 + 8 +DETAILS + 0 +POLYLINE + 5 +77D + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2444 + 8 +DETAILS + 10 +14163.927115 + 20 +7700.754648 + 30 +0.0 + 0 +VERTEX + 5 +2445 + 8 +DETAILS + 10 +14202.403154 + 20 +7697.830112 + 30 +0.0 + 0 +SEQEND + 5 +2446 + 8 +DETAILS + 0 +POLYLINE + 5 +781 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2447 + 8 +DETAILS + 10 +14238.113246 + 20 +7693.396167 + 30 +0.0 + 0 +VERTEX + 5 +2448 + 8 +DETAILS + 10 +14276.589284 + 20 +7690.471631 + 30 +0.0 + 0 +SEQEND + 5 +2449 + 8 +DETAILS + 0 +POLYLINE + 5 +785 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +244A + 8 +DETAILS + 10 +14308.90151 + 20 +7687.169768 + 30 +0.0 + 0 +VERTEX + 5 +244B + 8 +DETAILS + 10 +14347.377548 + 20 +7684.245232 + 30 +0.0 + 0 +SEQEND + 5 +244C + 8 +DETAILS + 0 +POLYLINE + 5 +789 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +244D + 8 +DETAILS + 10 +14384.126369 + 20 +7681.361169 + 30 +0.0 + 0 +VERTEX + 5 +244E + 8 +DETAILS + 10 +14422.602408 + 20 +7678.436633 + 30 +0.0 + 0 +SEQEND + 5 +244F + 8 +DETAILS + 0 +POLYLINE + 5 +78D + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2450 + 8 +HOLZ + 10 +16757.5 + 20 +7473.737487 + 30 +0.0 + 0 +VERTEX + 5 +2451 + 8 +HOLZ + 10 +14404.64467 + 20 +7679.585655 + 30 +0.0 + 0 +SEQEND + 5 +2452 + 8 +HOLZ + 0 +POLYLINE + 5 +791 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2453 + 8 +DETAILS + 10 +10325.0 + 20 +4710.0 + 30 +0.0 + 0 +VERTEX + 5 +2454 + 8 +DETAILS + 10 +10325.0 + 20 +4725.0 + 30 +0.0 + 0 +VERTEX + 5 +2455 + 8 +DETAILS + 10 +10455.0 + 20 +4725.0 + 30 +0.0 + 0 +VERTEX + 5 +2456 + 8 +DETAILS + 10 +10455.0 + 20 +4850.0 + 30 +0.0 + 0 +VERTEX + 5 +2457 + 8 +DETAILS + 10 +10475.0 + 20 +4850.0 + 30 +0.0 + 0 +SEQEND + 5 +2458 + 8 +DETAILS + 0 +POLYLINE + 5 +798 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2459 + 8 +DETAILS + 10 +10790.0 + 20 +4710.0 + 30 +0.0 + 0 +VERTEX + 5 +245A + 8 +DETAILS + 10 +10790.0 + 20 +4725.0 + 30 +0.0 + 0 +VERTEX + 5 +245B + 8 +DETAILS + 10 +10660.0 + 20 +4725.0 + 30 +0.0 + 0 +VERTEX + 5 +245C + 8 +DETAILS + 10 +10660.0 + 20 +4850.0 + 30 +0.0 + 0 +VERTEX + 5 +245D + 8 +DETAILS + 10 +10640.0 + 20 +4850.0 + 30 +0.0 + 0 +SEQEND + 5 +245E + 8 +DETAILS + 0 +POLYLINE + 5 +79F + 8 +SCHORNSTEIN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +245F + 8 +SCHORNSTEIN + 10 +8740.0 + 20 +8947.848405 + 30 +0.0 + 0 +VERTEX + 5 +2460 + 8 +SCHORNSTEIN + 10 +8740.0 + 20 +9445.0 + 30 +0.0 + 0 +VERTEX + 5 +2461 + 8 +SCHORNSTEIN + 10 +7250.0 + 20 +9445.0 + 30 +0.0 + 0 +VERTEX + 5 +2462 + 8 +SCHORNSTEIN + 10 +7250.0 + 20 +8016.79307 + 30 +0.0 + 0 +SEQEND + 5 +2463 + 8 +SCHORNSTEIN + 0 +POLYLINE + 5 +7A5 + 8 +SCHORNSTEIN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2464 + 8 +SCHORNSTEIN + 10 +8740.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +2465 + 8 +SCHORNSTEIN + 10 +8740.0 + 20 +7355.0 + 30 +0.0 + 0 +SEQEND + 5 +2466 + 8 +SCHORNSTEIN + 0 +POLYLINE + 5 +7A9 + 8 +SCHORNSTEIN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2467 + 8 +SCHORNSTEIN + 10 +8740.0 + 20 +7515.0 + 30 +0.0 + 0 +VERTEX + 5 +2468 + 8 +SCHORNSTEIN + 10 +8740.0 + 20 +8735.596292 + 30 +0.0 + 0 +SEQEND + 5 +2469 + 8 +SCHORNSTEIN + 0 +POLYLINE + 5 +7AD + 8 +SCHORNSTEIN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +246A + 8 +SCHORNSTEIN + 10 +12740.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +246B + 8 +SCHORNSTEIN + 10 +12740.0 + 20 +7355.0 + 30 +0.0 + 0 +VERTEX + 5 +246C + 8 +SCHORNSTEIN + 10 +14591.819725 + 20 +7355.0 + 30 +0.0 + 0 +SEQEND + 5 +246D + 8 +SCHORNSTEIN + 0 +POLYLINE + 5 +7B2 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +246E + 8 +DETAILS + 10 +4300.0 + 20 +5945.0 + 30 +0.0 + 0 +VERTEX + 5 +246F + 8 +DETAILS + 10 +4300.0 + 20 +5880.0 + 30 +0.0 + 0 +SEQEND + 5 +2470 + 8 +DETAILS + 0 +POLYLINE + 5 +7B6 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2471 + 8 +DETAILS + 10 +4300.0 + 20 +5820.0 + 30 +0.0 + 0 +VERTEX + 5 +2472 + 8 +DETAILS + 10 +4300.0 + 20 +5755.0 + 30 +0.0 + 0 +SEQEND + 5 +2473 + 8 +DETAILS + 0 +POLYLINE + 5 +7BA + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2474 + 8 +DETAILS + 10 +4300.0 + 20 +5695.0 + 30 +0.0 + 0 +VERTEX + 5 +2475 + 8 +DETAILS + 10 +4300.0 + 20 +5630.0 + 30 +0.0 + 0 +SEQEND + 5 +2476 + 8 +DETAILS + 0 +POLYLINE + 5 +7BE + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2477 + 8 +DETAILS + 10 +4300.0 + 20 +5545.0 + 30 +0.0 + 0 +VERTEX + 5 +2478 + 8 +DETAILS + 10 +4300.0 + 20 +5480.0 + 30 +0.0 + 0 +SEQEND + 5 +2479 + 8 +DETAILS + 0 +POLYLINE + 5 +7C2 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +247A + 8 +DETAILS + 10 +4300.0 + 20 +5415.0 + 30 +0.0 + 0 +VERTEX + 5 +247B + 8 +DETAILS + 10 +4300.0 + 20 +5350.0 + 30 +0.0 + 0 +SEQEND + 5 +247C + 8 +DETAILS + 0 +POLYLINE + 5 +7C6 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +247D + 8 +DETAILS + 10 +5635.0 + 20 +4750.0 + 30 +0.0 + 0 +VERTEX + 5 +247E + 8 +DETAILS + 10 +5635.0 + 20 +4730.0 + 30 +0.0 + 0 +SEQEND + 5 +247F + 8 +DETAILS + 0 +POLYLINE + 5 +7CA + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2480 + 8 +DETAILS + 10 +5750.0 + 20 +4710.0 + 30 +0.0 + 0 +VERTEX + 5 +2481 + 8 +DETAILS + 10 +5750.0 + 20 +4690.0 + 30 +0.0 + 0 +SEQEND + 5 +2482 + 8 +DETAILS + 0 +POLYLINE + 5 +7CE + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2483 + 8 +DETAILS + 10 +5635.0 + 20 +4710.0 + 30 +0.0 + 0 +VERTEX + 5 +2484 + 8 +DETAILS + 10 +5635.0 + 20 +4690.0 + 30 +0.0 + 0 +SEQEND + 5 +2485 + 8 +DETAILS + 0 +POLYLINE + 5 +7D2 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2486 + 8 +DETAILS + 10 +5635.0 + 20 +4670.0 + 30 +0.0 + 0 +VERTEX + 5 +2487 + 8 +DETAILS + 10 +5635.0 + 20 +4650.0 + 30 +0.0 + 0 +SEQEND + 5 +2488 + 8 +DETAILS + 0 +POLYLINE + 5 +7D6 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2489 + 8 +DETAILS + 10 +5635.0 + 20 +4630.0 + 30 +0.0 + 0 +VERTEX + 5 +248A + 8 +DETAILS + 10 +5635.0 + 20 +4610.0 + 30 +0.0 + 0 +SEQEND + 5 +248B + 8 +DETAILS + 0 +POLYLINE + 5 +7DA + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +248C + 8 +DETAILS + 10 +5750.0 + 20 +4750.0 + 30 +0.0 + 0 +VERTEX + 5 +248D + 8 +DETAILS + 10 +5750.0 + 20 +4730.0 + 30 +0.0 + 0 +SEQEND + 5 +248E + 8 +DETAILS + 0 +POLYLINE + 5 +7DE + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +248F + 8 +DETAILS + 10 +5750.0 + 20 +4670.0 + 30 +0.0 + 0 +VERTEX + 5 +2490 + 8 +DETAILS + 10 +5750.0 + 20 +4650.0 + 30 +0.0 + 0 +SEQEND + 5 +2491 + 8 +DETAILS + 0 +POLYLINE + 5 +7E2 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2492 + 8 +DETAILS + 10 +5750.0 + 20 +4630.0 + 30 +0.0 + 0 +VERTEX + 5 +2493 + 8 +DETAILS + 10 +5750.0 + 20 +4610.0 + 30 +0.0 + 0 +SEQEND + 5 +2494 + 8 +DETAILS + 0 +POLYLINE + 5 +7E6 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2495 + 8 +DETAILS + 10 +5635.0 + 20 +4590.0 + 30 +0.0 + 0 +VERTEX + 5 +2496 + 8 +DETAILS + 10 +5635.0 + 20 +4570.0 + 30 +0.0 + 0 +SEQEND + 5 +2497 + 8 +DETAILS + 0 +POLYLINE + 5 +7EA + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2498 + 8 +DETAILS + 10 +5635.0 + 20 +4545.0 + 30 +0.0 + 0 +VERTEX + 5 +2499 + 8 +DETAILS + 10 +5635.0 + 20 +4525.0 + 30 +0.0 + 0 +SEQEND + 5 +249A + 8 +DETAILS + 0 +POLYLINE + 5 +7EE + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +249B + 8 +DETAILS + 10 +5750.0 + 20 +4590.0 + 30 +0.0 + 0 +VERTEX + 5 +249C + 8 +DETAILS + 10 +5750.0 + 20 +4570.0 + 30 +0.0 + 0 +SEQEND + 5 +249D + 8 +DETAILS + 0 +POLYLINE + 5 +7F2 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +249E + 8 +DETAILS + 10 +5750.0 + 20 +4545.0 + 30 +0.0 + 0 +VERTEX + 5 +249F + 8 +DETAILS + 10 +5750.0 + 20 +4525.0 + 30 +0.0 + 0 +SEQEND + 5 +24A0 + 8 +DETAILS + 0 +POLYLINE + 5 +7F6 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +24A1 + 8 +DETAILS + 10 +15365.0 + 20 +4545.0 + 30 +0.0 + 0 +VERTEX + 5 +24A2 + 8 +DETAILS + 10 +15365.0 + 20 +4525.0 + 30 +0.0 + 0 +SEQEND + 5 +24A3 + 8 +DETAILS + 0 +POLYLINE + 5 +7FA + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +24A4 + 8 +DETAILS + 10 +15365.0 + 20 +4590.0 + 30 +0.0 + 0 +VERTEX + 5 +24A5 + 8 +DETAILS + 10 +15365.0 + 20 +4570.0 + 30 +0.0 + 0 +SEQEND + 5 +24A6 + 8 +DETAILS + 0 +POLYLINE + 5 +7FE + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +24A7 + 8 +DETAILS + 10 +15480.0 + 20 +4545.0 + 30 +0.0 + 0 +VERTEX + 5 +24A8 + 8 +DETAILS + 10 +15480.0 + 20 +4525.0 + 30 +0.0 + 0 +SEQEND + 5 +24A9 + 8 +DETAILS + 0 +POLYLINE + 5 +802 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +24AA + 8 +DETAILS + 10 +15480.0 + 20 +4590.0 + 30 +0.0 + 0 +VERTEX + 5 +24AB + 8 +DETAILS + 10 +15480.0 + 20 +4570.0 + 30 +0.0 + 0 +SEQEND + 5 +24AC + 8 +DETAILS + 0 +POLYLINE + 5 +806 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +24AD + 8 +DETAILS + 10 +15365.0 + 20 +4630.0 + 30 +0.0 + 0 +VERTEX + 5 +24AE + 8 +DETAILS + 10 +15365.0 + 20 +4610.0 + 30 +0.0 + 0 +SEQEND + 5 +24AF + 8 +DETAILS + 0 +POLYLINE + 5 +80A + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +24B0 + 8 +DETAILS + 10 +15480.0 + 20 +4630.0 + 30 +0.0 + 0 +VERTEX + 5 +24B1 + 8 +DETAILS + 10 +15480.0 + 20 +4610.0 + 30 +0.0 + 0 +SEQEND + 5 +24B2 + 8 +DETAILS + 0 +POLYLINE + 5 +80E + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +24B3 + 8 +DETAILS + 10 +15365.0 + 20 +4670.0 + 30 +0.0 + 0 +VERTEX + 5 +24B4 + 8 +DETAILS + 10 +15365.0 + 20 +4650.0 + 30 +0.0 + 0 +SEQEND + 5 +24B5 + 8 +DETAILS + 0 +POLYLINE + 5 +812 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +24B6 + 8 +DETAILS + 10 +15365.0 + 20 +4750.0 + 30 +0.0 + 0 +VERTEX + 5 +24B7 + 8 +DETAILS + 10 +15365.0 + 20 +4730.0 + 30 +0.0 + 0 +SEQEND + 5 +24B8 + 8 +DETAILS + 0 +POLYLINE + 5 +816 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +24B9 + 8 +DETAILS + 10 +15365.0 + 20 +4710.0 + 30 +0.0 + 0 +VERTEX + 5 +24BA + 8 +DETAILS + 10 +15365.0 + 20 +4690.0 + 30 +0.0 + 0 +SEQEND + 5 +24BB + 8 +DETAILS + 0 +POLYLINE + 5 +81A + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +24BC + 8 +DETAILS + 10 +15480.0 + 20 +4710.0 + 30 +0.0 + 0 +VERTEX + 5 +24BD + 8 +DETAILS + 10 +15480.0 + 20 +4690.0 + 30 +0.0 + 0 +SEQEND + 5 +24BE + 8 +DETAILS + 0 +POLYLINE + 5 +81E + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +24BF + 8 +DETAILS + 10 +15480.0 + 20 +4670.0 + 30 +0.0 + 0 +VERTEX + 5 +24C0 + 8 +DETAILS + 10 +15480.0 + 20 +4650.0 + 30 +0.0 + 0 +SEQEND + 5 +24C1 + 8 +DETAILS + 0 +POLYLINE + 5 +822 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +24C2 + 8 +DETAILS + 10 +15480.0 + 20 +4750.0 + 30 +0.0 + 0 +VERTEX + 5 +24C3 + 8 +DETAILS + 10 +15480.0 + 20 +4730.0 + 30 +0.0 + 0 +SEQEND + 5 +24C4 + 8 +DETAILS + 0 +POLYLINE + 5 +826 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +24C5 + 8 +DETAILS + 10 +16815.0 + 20 +5545.0 + 30 +0.0 + 0 +VERTEX + 5 +24C6 + 8 +DETAILS + 10 +16815.0 + 20 +5480.0 + 30 +0.0 + 0 +SEQEND + 5 +24C7 + 8 +DETAILS + 0 +POLYLINE + 5 +82A + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +24C8 + 8 +DETAILS + 10 +16815.0 + 20 +5415.0 + 30 +0.0 + 0 +VERTEX + 5 +24C9 + 8 +DETAILS + 10 +16815.0 + 20 +5350.0 + 30 +0.0 + 0 +SEQEND + 5 +24CA + 8 +DETAILS + 0 +POLYLINE + 5 +82E + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +24CB + 8 +DETAILS + 10 +16815.0 + 20 +5820.0 + 30 +0.0 + 0 +VERTEX + 5 +24CC + 8 +DETAILS + 10 +16815.0 + 20 +5755.0 + 30 +0.0 + 0 +SEQEND + 5 +24CD + 8 +DETAILS + 0 +POLYLINE + 5 +832 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +24CE + 8 +DETAILS + 10 +16815.0 + 20 +5695.0 + 30 +0.0 + 0 +VERTEX + 5 +24CF + 8 +DETAILS + 10 +16815.0 + 20 +5630.0 + 30 +0.0 + 0 +SEQEND + 5 +24D0 + 8 +DETAILS + 0 +POLYLINE + 5 +836 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +24D1 + 8 +DETAILS + 10 +16815.0 + 20 +5945.0 + 30 +0.0 + 0 +VERTEX + 5 +24D2 + 8 +DETAILS + 10 +16815.0 + 20 +5880.0 + 30 +0.0 + 0 +SEQEND + 5 +24D3 + 8 +DETAILS + 0 +POLYLINE + 5 +83A + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +24D4 + 8 +DETAILS + 10 +6925.0 + 20 +4710.0 + 30 +0.0 + 0 +VERTEX + 5 +24D5 + 8 +DETAILS + 10 +6925.0 + 20 +4725.0 + 30 +0.0 + 0 +VERTEX + 5 +24D6 + 8 +DETAILS + 10 +7055.0 + 20 +4725.0 + 30 +0.0 + 0 +VERTEX + 5 +24D7 + 8 +DETAILS + 10 +7055.0 + 20 +4850.0 + 30 +0.0 + 0 +VERTEX + 5 +24D8 + 8 +DETAILS + 10 +7075.0 + 20 +4850.0 + 30 +0.0 + 0 +SEQEND + 5 +24D9 + 8 +DETAILS + 0 +POLYLINE + 5 +841 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +24DA + 8 +DETAILS + 10 +7435.0 + 20 +4710.0 + 30 +0.0 + 0 +VERTEX + 5 +24DB + 8 +DETAILS + 10 +7435.0 + 20 +4725.0 + 30 +0.0 + 0 +VERTEX + 5 +24DC + 8 +DETAILS + 10 +7305.0 + 20 +4725.0 + 30 +0.0 + 0 +VERTEX + 5 +24DD + 8 +DETAILS + 10 +7305.0 + 20 +4850.0 + 30 +0.0 + 0 +VERTEX + 5 +24DE + 8 +DETAILS + 10 +7285.0 + 20 +4850.0 + 30 +0.0 + 0 +SEQEND + 5 +24DF + 8 +DETAILS + 0 +POLYLINE + 5 +848 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +24E0 + 8 +DETAILS + 10 +7055.0 + 20 +4825.0 + 30 +0.0 + 0 +VERTEX + 5 +24E1 + 8 +DETAILS + 10 +7065.0 + 20 +4825.0 + 30 +0.0 + 0 +VERTEX + 5 +24E2 + 8 +DETAILS + 10 +7075.0 + 20 +4825.0 + 30 +0.0 + 0 +SEQEND + 5 +24E3 + 8 +DETAILS + 0 +POLYLINE + 5 +84D + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +24E4 + 8 +DETAILS + 10 +7095.0 + 20 +4825.0 + 30 +0.0 + 0 +VERTEX + 5 +24E5 + 8 +DETAILS + 10 +7115.0 + 20 +4825.0 + 30 +0.0 + 0 +SEQEND + 5 +24E6 + 8 +DETAILS + 0 +POLYLINE + 5 +851 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +24E7 + 8 +DETAILS + 10 +7055.0 + 20 +4770.0 + 30 +0.0 + 0 +VERTEX + 5 +24E8 + 8 +DETAILS + 10 +7075.0 + 20 +4770.0 + 30 +0.0 + 0 +SEQEND + 5 +24E9 + 8 +DETAILS + 0 +POLYLINE + 5 +855 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +24EA + 8 +DETAILS + 10 +7095.0 + 20 +4770.0 + 30 +0.0 + 0 +VERTEX + 5 +24EB + 8 +DETAILS + 10 +7115.0 + 20 +4770.0 + 30 +0.0 + 0 +SEQEND + 5 +24EC + 8 +DETAILS + 0 +POLYLINE + 5 +859 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +24ED + 8 +DETAILS + 10 +7305.0 + 20 +4830.0 + 30 +0.0 + 0 +VERTEX + 5 +24EE + 8 +DETAILS + 10 +7290.0 + 20 +4830.0 + 30 +0.0 + 0 +SEQEND + 5 +24EF + 8 +DETAILS + 0 +POLYLINE + 5 +85D + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +24F0 + 8 +DETAILS + 10 +7270.0 + 20 +4830.0 + 30 +0.0 + 0 +VERTEX + 5 +24F1 + 8 +DETAILS + 10 +7250.0 + 20 +4830.0 + 30 +0.0 + 0 +SEQEND + 5 +24F2 + 8 +DETAILS + 0 +POLYLINE + 5 +861 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +24F3 + 8 +DETAILS + 10 +7305.0 + 20 +4760.0 + 30 +0.0 + 0 +VERTEX + 5 +24F4 + 8 +DETAILS + 10 +7290.0 + 20 +4760.0 + 30 +0.0 + 0 +SEQEND + 5 +24F5 + 8 +DETAILS + 0 +POLYLINE + 5 +865 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +24F6 + 8 +DETAILS + 10 +7270.0 + 20 +4760.0 + 30 +0.0 + 0 +VERTEX + 5 +24F7 + 8 +DETAILS + 10 +7250.0 + 20 +4760.0 + 30 +0.0 + 0 +SEQEND + 5 +24F8 + 8 +DETAILS + 0 +POLYLINE + 5 +869 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +24F9 + 8 +DETAILS + 10 +7030.0 + 20 +4725.0 + 30 +0.0 + 0 +VERTEX + 5 +24FA + 8 +DETAILS + 10 +7030.0 + 20 +4690.0 + 30 +0.0 + 0 +SEQEND + 5 +24FB + 8 +DETAILS + 0 +POLYLINE + 5 +86D + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +24FC + 8 +DETAILS + 10 +7030.0 + 20 +4675.0 + 30 +0.0 + 0 +VERTEX + 5 +24FD + 8 +DETAILS + 10 +7030.0 + 20 +4635.0 + 30 +0.0 + 0 +SEQEND + 5 +24FE + 8 +DETAILS + 0 +POLYLINE + 5 +871 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +24FF + 8 +DETAILS + 10 +7030.0 + 20 +4615.0 + 30 +0.0 + 0 +VERTEX + 5 +2500 + 8 +DETAILS + 10 +7030.0 + 20 +4590.0 + 30 +0.0 + 0 +SEQEND + 5 +2501 + 8 +DETAILS + 0 +POLYLINE + 5 +875 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2502 + 8 +DETAILS + 10 +6965.0 + 20 +4675.0 + 30 +0.0 + 0 +VERTEX + 5 +2503 + 8 +DETAILS + 10 +6965.0 + 20 +4635.0 + 30 +0.0 + 0 +SEQEND + 5 +2504 + 8 +DETAILS + 0 +POLYLINE + 5 +879 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2505 + 8 +DETAILS + 10 +6965.0 + 20 +4615.0 + 30 +0.0 + 0 +VERTEX + 5 +2506 + 8 +DETAILS + 10 +6965.0 + 20 +4590.0 + 30 +0.0 + 0 +SEQEND + 5 +2507 + 8 +DETAILS + 0 +POLYLINE + 5 +87D + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2508 + 8 +DETAILS + 10 +6965.0 + 20 +4725.0 + 30 +0.0 + 0 +VERTEX + 5 +2509 + 8 +DETAILS + 10 +6965.0 + 20 +4690.0 + 30 +0.0 + 0 +SEQEND + 5 +250A + 8 +DETAILS + 0 +POLYLINE + 5 +881 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +250B + 8 +DETAILS + 10 +7340.0 + 20 +4675.0 + 30 +0.0 + 0 +VERTEX + 5 +250C + 8 +DETAILS + 10 +7340.0 + 20 +4635.0 + 30 +0.0 + 0 +SEQEND + 5 +250D + 8 +DETAILS + 0 +POLYLINE + 5 +885 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +250E + 8 +DETAILS + 10 +7340.0 + 20 +4615.0 + 30 +0.0 + 0 +VERTEX + 5 +250F + 8 +DETAILS + 10 +7340.0 + 20 +4590.0 + 30 +0.0 + 0 +SEQEND + 5 +2510 + 8 +DETAILS + 0 +POLYLINE + 5 +889 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2511 + 8 +DETAILS + 10 +7340.0 + 20 +4725.0 + 30 +0.0 + 0 +VERTEX + 5 +2512 + 8 +DETAILS + 10 +7340.0 + 20 +4690.0 + 30 +0.0 + 0 +SEQEND + 5 +2513 + 8 +DETAILS + 0 +POLYLINE + 5 +88D + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2514 + 8 +DETAILS + 10 +7405.0 + 20 +4675.0 + 30 +0.0 + 0 +VERTEX + 5 +2515 + 8 +DETAILS + 10 +7405.0 + 20 +4635.0 + 30 +0.0 + 0 +SEQEND + 5 +2516 + 8 +DETAILS + 0 +POLYLINE + 5 +891 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2517 + 8 +DETAILS + 10 +7405.0 + 20 +4615.0 + 30 +0.0 + 0 +VERTEX + 5 +2518 + 8 +DETAILS + 10 +7405.0 + 20 +4590.0 + 30 +0.0 + 0 +SEQEND + 5 +2519 + 8 +DETAILS + 0 +POLYLINE + 5 +895 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +251A + 8 +DETAILS + 10 +7405.0 + 20 +4725.0 + 30 +0.0 + 0 +VERTEX + 5 +251B + 8 +DETAILS + 10 +7405.0 + 20 +4690.0 + 30 +0.0 + 0 +SEQEND + 5 +251C + 8 +DETAILS + 0 +POLYLINE + 5 +899 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +251D + 8 +DETAILS + 10 +14150.0 + 20 +4675.0 + 30 +0.0 + 0 +VERTEX + 5 +251E + 8 +DETAILS + 10 +14150.0 + 20 +4635.0 + 30 +0.0 + 0 +SEQEND + 5 +251F + 8 +DETAILS + 0 +POLYLINE + 5 +89D + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2520 + 8 +DETAILS + 10 +14085.0 + 20 +4675.0 + 30 +0.0 + 0 +VERTEX + 5 +2521 + 8 +DETAILS + 10 +14085.0 + 20 +4635.0 + 30 +0.0 + 0 +SEQEND + 5 +2522 + 8 +DETAILS + 0 +POLYLINE + 5 +8A1 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2523 + 8 +DETAILS + 10 +14150.0 + 20 +4615.0 + 30 +0.0 + 0 +VERTEX + 5 +2524 + 8 +DETAILS + 10 +14150.0 + 20 +4590.0 + 30 +0.0 + 0 +SEQEND + 5 +2525 + 8 +DETAILS + 0 +POLYLINE + 5 +8A5 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2526 + 8 +DETAILS + 10 +14085.0 + 20 +4615.0 + 30 +0.0 + 0 +VERTEX + 5 +2527 + 8 +DETAILS + 10 +14085.0 + 20 +4590.0 + 30 +0.0 + 0 +SEQEND + 5 +2528 + 8 +DETAILS + 0 +POLYLINE + 5 +8A9 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2529 + 8 +DETAILS + 10 +14190.0 + 20 +4710.0 + 30 +0.0 + 0 +VERTEX + 5 +252A + 8 +DETAILS + 10 +14190.0 + 20 +4725.0 + 30 +0.0 + 0 +VERTEX + 5 +252B + 8 +DETAILS + 10 +14060.0 + 20 +4725.0 + 30 +0.0 + 0 +VERTEX + 5 +252C + 8 +DETAILS + 10 +14060.0 + 20 +4850.0 + 30 +0.0 + 0 +VERTEX + 5 +252D + 8 +DETAILS + 10 +14040.0 + 20 +4850.0 + 30 +0.0 + 0 +SEQEND + 5 +252E + 8 +DETAILS + 0 +POLYLINE + 5 +8B0 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +252F + 8 +DETAILS + 10 +14150.0 + 20 +4725.0 + 30 +0.0 + 0 +VERTEX + 5 +2530 + 8 +DETAILS + 10 +14150.0 + 20 +4690.0 + 30 +0.0 + 0 +SEQEND + 5 +2531 + 8 +DETAILS + 0 +POLYLINE + 5 +8B4 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2532 + 8 +DETAILS + 10 +14085.0 + 20 +4725.0 + 30 +0.0 + 0 +VERTEX + 5 +2533 + 8 +DETAILS + 10 +14085.0 + 20 +4690.0 + 30 +0.0 + 0 +SEQEND + 5 +2534 + 8 +DETAILS + 0 +POLYLINE + 5 +8B8 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2535 + 8 +DETAILS + 10 +14020.0 + 20 +4770.0 + 30 +0.0 + 0 +VERTEX + 5 +2536 + 8 +DETAILS + 10 +14000.0 + 20 +4770.0 + 30 +0.0 + 0 +SEQEND + 5 +2537 + 8 +DETAILS + 0 +POLYLINE + 5 +8BC + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2538 + 8 +DETAILS + 10 +14060.0 + 20 +4770.0 + 30 +0.0 + 0 +VERTEX + 5 +2539 + 8 +DETAILS + 10 +14040.0 + 20 +4770.0 + 30 +0.0 + 0 +SEQEND + 5 +253A + 8 +DETAILS + 0 +POLYLINE + 5 +8C0 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +253B + 8 +DETAILS + 10 +14020.0 + 20 +4825.0 + 30 +0.0 + 0 +VERTEX + 5 +253C + 8 +DETAILS + 10 +14000.0 + 20 +4825.0 + 30 +0.0 + 0 +SEQEND + 5 +253D + 8 +DETAILS + 0 +POLYLINE + 5 +8C4 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +253E + 8 +DETAILS + 10 +14060.0 + 20 +4825.0 + 30 +0.0 + 0 +VERTEX + 5 +253F + 8 +DETAILS + 10 +14050.0 + 20 +4825.0 + 30 +0.0 + 0 +VERTEX + 5 +2540 + 8 +DETAILS + 10 +14040.0 + 20 +4825.0 + 30 +0.0 + 0 +SEQEND + 5 +2541 + 8 +DETAILS + 0 +POLYLINE + 5 +8C9 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2542 + 8 +DETAILS + 10 +13710.0 + 20 +4675.0 + 30 +0.0 + 0 +VERTEX + 5 +2543 + 8 +DETAILS + 10 +13710.0 + 20 +4635.0 + 30 +0.0 + 0 +SEQEND + 5 +2544 + 8 +DETAILS + 0 +POLYLINE + 5 +8CD + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2545 + 8 +DETAILS + 10 +13775.0 + 20 +4675.0 + 30 +0.0 + 0 +VERTEX + 5 +2546 + 8 +DETAILS + 10 +13775.0 + 20 +4635.0 + 30 +0.0 + 0 +SEQEND + 5 +2547 + 8 +DETAILS + 0 +POLYLINE + 5 +8D1 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2548 + 8 +DETAILS + 10 +13710.0 + 20 +4615.0 + 30 +0.0 + 0 +VERTEX + 5 +2549 + 8 +DETAILS + 10 +13710.0 + 20 +4590.0 + 30 +0.0 + 0 +SEQEND + 5 +254A + 8 +DETAILS + 0 +POLYLINE + 5 +8D5 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +254B + 8 +DETAILS + 10 +13775.0 + 20 +4615.0 + 30 +0.0 + 0 +VERTEX + 5 +254C + 8 +DETAILS + 10 +13775.0 + 20 +4590.0 + 30 +0.0 + 0 +SEQEND + 5 +254D + 8 +DETAILS + 0 +POLYLINE + 5 +8D9 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +254E + 8 +DETAILS + 10 +13680.0 + 20 +4710.0 + 30 +0.0 + 0 +VERTEX + 5 +254F + 8 +DETAILS + 10 +13680.0 + 20 +4725.0 + 30 +0.0 + 0 +VERTEX + 5 +2550 + 8 +DETAILS + 10 +13810.0 + 20 +4725.0 + 30 +0.0 + 0 +VERTEX + 5 +2551 + 8 +DETAILS + 10 +13810.0 + 20 +4850.0 + 30 +0.0 + 0 +VERTEX + 5 +2552 + 8 +DETAILS + 10 +13830.0 + 20 +4850.0 + 30 +0.0 + 0 +SEQEND + 5 +2553 + 8 +DETAILS + 0 +POLYLINE + 5 +8E0 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2554 + 8 +DETAILS + 10 +13710.0 + 20 +4725.0 + 30 +0.0 + 0 +VERTEX + 5 +2555 + 8 +DETAILS + 10 +13710.0 + 20 +4690.0 + 30 +0.0 + 0 +SEQEND + 5 +2556 + 8 +DETAILS + 0 +POLYLINE + 5 +8E4 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2557 + 8 +DETAILS + 10 +13775.0 + 20 +4725.0 + 30 +0.0 + 0 +VERTEX + 5 +2558 + 8 +DETAILS + 10 +13775.0 + 20 +4690.0 + 30 +0.0 + 0 +SEQEND + 5 +2559 + 8 +DETAILS + 0 +POLYLINE + 5 +8E8 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +255A + 8 +DETAILS + 10 +13845.0 + 20 +4760.0 + 30 +0.0 + 0 +VERTEX + 5 +255B + 8 +DETAILS + 10 +13865.0 + 20 +4760.0 + 30 +0.0 + 0 +SEQEND + 5 +255C + 8 +DETAILS + 0 +POLYLINE + 5 +8EC + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +255D + 8 +DETAILS + 10 +13810.0 + 20 +4760.0 + 30 +0.0 + 0 +VERTEX + 5 +255E + 8 +DETAILS + 10 +13825.0 + 20 +4760.0 + 30 +0.0 + 0 +SEQEND + 5 +255F + 8 +DETAILS + 0 +POLYLINE + 5 +8F0 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2560 + 8 +DETAILS + 10 +13845.0 + 20 +4830.0 + 30 +0.0 + 0 +VERTEX + 5 +2561 + 8 +DETAILS + 10 +13865.0 + 20 +4830.0 + 30 +0.0 + 0 +SEQEND + 5 +2562 + 8 +DETAILS + 0 +POLYLINE + 5 +8F4 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2563 + 8 +DETAILS + 10 +13810.0 + 20 +4830.0 + 30 +0.0 + 0 +VERTEX + 5 +2564 + 8 +DETAILS + 10 +13825.0 + 20 +4830.0 + 30 +0.0 + 0 +SEQEND + 5 +2565 + 8 +DETAILS + 0 +POLYLINE + 5 +8F8 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2566 + 8 +DETAILS + 10 +10430.0 + 20 +4675.0 + 30 +0.0 + 0 +VERTEX + 5 +2567 + 8 +DETAILS + 10 +10430.0 + 20 +4635.0 + 30 +0.0 + 0 +SEQEND + 5 +2568 + 8 +DETAILS + 0 +POLYLINE + 5 +8FC + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2569 + 8 +DETAILS + 10 +10365.0 + 20 +4675.0 + 30 +0.0 + 0 +VERTEX + 5 +256A + 8 +DETAILS + 10 +10365.0 + 20 +4635.0 + 30 +0.0 + 0 +SEQEND + 5 +256B + 8 +DETAILS + 0 +POLYLINE + 5 +900 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +256C + 8 +DETAILS + 10 +10430.0 + 20 +4615.0 + 30 +0.0 + 0 +VERTEX + 5 +256D + 8 +DETAILS + 10 +10430.0 + 20 +4590.0 + 30 +0.0 + 0 +SEQEND + 5 +256E + 8 +DETAILS + 0 +POLYLINE + 5 +904 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +256F + 8 +DETAILS + 10 +10365.0 + 20 +4615.0 + 30 +0.0 + 0 +VERTEX + 5 +2570 + 8 +DETAILS + 10 +10365.0 + 20 +4590.0 + 30 +0.0 + 0 +SEQEND + 5 +2571 + 8 +DETAILS + 0 +POLYLINE + 5 +908 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2572 + 8 +DETAILS + 10 +10430.0 + 20 +4725.0 + 30 +0.0 + 0 +VERTEX + 5 +2573 + 8 +DETAILS + 10 +10430.0 + 20 +4690.0 + 30 +0.0 + 0 +SEQEND + 5 +2574 + 8 +DETAILS + 0 +POLYLINE + 5 +90C + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2575 + 8 +DETAILS + 10 +10365.0 + 20 +4725.0 + 30 +0.0 + 0 +VERTEX + 5 +2576 + 8 +DETAILS + 10 +10365.0 + 20 +4690.0 + 30 +0.0 + 0 +SEQEND + 5 +2577 + 8 +DETAILS + 0 +POLYLINE + 5 +910 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2578 + 8 +DETAILS + 10 +10695.0 + 20 +4675.0 + 30 +0.0 + 0 +VERTEX + 5 +2579 + 8 +DETAILS + 10 +10695.0 + 20 +4635.0 + 30 +0.0 + 0 +SEQEND + 5 +257A + 8 +DETAILS + 0 +POLYLINE + 5 +914 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +257B + 8 +DETAILS + 10 +10760.0 + 20 +4675.0 + 30 +0.0 + 0 +VERTEX + 5 +257C + 8 +DETAILS + 10 +10760.0 + 20 +4635.0 + 30 +0.0 + 0 +SEQEND + 5 +257D + 8 +DETAILS + 0 +POLYLINE + 5 +918 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +257E + 8 +DETAILS + 10 +10695.0 + 20 +4615.0 + 30 +0.0 + 0 +VERTEX + 5 +257F + 8 +DETAILS + 10 +10695.0 + 20 +4590.0 + 30 +0.0 + 0 +SEQEND + 5 +2580 + 8 +DETAILS + 0 +POLYLINE + 5 +91C + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2581 + 8 +DETAILS + 10 +10760.0 + 20 +4615.0 + 30 +0.0 + 0 +VERTEX + 5 +2582 + 8 +DETAILS + 10 +10760.0 + 20 +4590.0 + 30 +0.0 + 0 +SEQEND + 5 +2583 + 8 +DETAILS + 0 +POLYLINE + 5 +920 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2584 + 8 +DETAILS + 10 +10695.0 + 20 +4725.0 + 30 +0.0 + 0 +VERTEX + 5 +2585 + 8 +DETAILS + 10 +10695.0 + 20 +4690.0 + 30 +0.0 + 0 +SEQEND + 5 +2586 + 8 +DETAILS + 0 +POLYLINE + 5 +924 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2587 + 8 +DETAILS + 10 +10760.0 + 20 +4725.0 + 30 +0.0 + 0 +VERTEX + 5 +2588 + 8 +DETAILS + 10 +10760.0 + 20 +4690.0 + 30 +0.0 + 0 +SEQEND + 5 +2589 + 8 +DETAILS + 0 +POLYLINE + 5 +928 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +258A + 8 +DETAILS + 10 +10455.0 + 20 +4835.0 + 30 +0.0 + 0 +VERTEX + 5 +258B + 8 +DETAILS + 10 +10475.0 + 20 +4835.0 + 30 +0.0 + 0 +SEQEND + 5 +258C + 8 +DETAILS + 0 +POLYLINE + 5 +92C + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +258D + 8 +DETAILS + 10 +10495.0 + 20 +4835.0 + 30 +0.0 + 0 +VERTEX + 5 +258E + 8 +DETAILS + 10 +10510.0 + 20 +4835.0 + 30 +0.0 + 0 +SEQEND + 5 +258F + 8 +DETAILS + 0 +POLYLINE + 5 +930 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2590 + 8 +DETAILS + 10 +10525.0 + 20 +4835.0 + 30 +0.0 + 0 +VERTEX + 5 +2591 + 8 +DETAILS + 10 +10540.0 + 20 +4835.0 + 30 +0.0 + 0 +SEQEND + 5 +2592 + 8 +DETAILS + 0 +POLYLINE + 5 +934 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2593 + 8 +DETAILS + 10 +10495.0 + 20 +4765.0 + 30 +0.0 + 0 +VERTEX + 5 +2594 + 8 +DETAILS + 10 +10510.0 + 20 +4765.0 + 30 +0.0 + 0 +SEQEND + 5 +2595 + 8 +DETAILS + 0 +POLYLINE + 5 +938 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2596 + 8 +DETAILS + 10 +10525.0 + 20 +4765.0 + 30 +0.0 + 0 +VERTEX + 5 +2597 + 8 +DETAILS + 10 +10540.0 + 20 +4765.0 + 30 +0.0 + 0 +SEQEND + 5 +2598 + 8 +DETAILS + 0 +POLYLINE + 5 +93C + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2599 + 8 +DETAILS + 10 +10455.0 + 20 +4765.0 + 30 +0.0 + 0 +VERTEX + 5 +259A + 8 +DETAILS + 10 +10475.0 + 20 +4765.0 + 30 +0.0 + 0 +SEQEND + 5 +259B + 8 +DETAILS + 0 +POLYLINE + 5 +940 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +259C + 8 +DETAILS + 10 +10660.0 + 20 +4825.0 + 30 +0.0 + 0 +VERTEX + 5 +259D + 8 +DETAILS + 10 +10635.0 + 20 +4825.0 + 30 +0.0 + 0 +SEQEND + 5 +259E + 8 +DETAILS + 0 +POLYLINE + 5 +944 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +259F + 8 +DETAILS + 10 +10620.0 + 20 +4825.0 + 30 +0.0 + 0 +VERTEX + 5 +25A0 + 8 +DETAILS + 10 +10605.0 + 20 +4825.0 + 30 +0.0 + 0 +SEQEND + 5 +25A1 + 8 +DETAILS + 0 +POLYLINE + 5 +948 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +25A2 + 8 +DETAILS + 10 +10590.0 + 20 +4825.0 + 30 +0.0 + 0 +VERTEX + 5 +25A3 + 8 +DETAILS + 10 +10575.0 + 20 +4825.0 + 30 +0.0 + 0 +SEQEND + 5 +25A4 + 8 +DETAILS + 0 +POLYLINE + 5 +94C + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +25A5 + 8 +DETAILS + 10 +10590.0 + 20 +4750.0 + 30 +0.0 + 0 +VERTEX + 5 +25A6 + 8 +DETAILS + 10 +10575.0 + 20 +4750.0 + 30 +0.0 + 0 +SEQEND + 5 +25A7 + 8 +DETAILS + 0 +POLYLINE + 5 +950 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +25A8 + 8 +DETAILS + 10 +10620.0 + 20 +4750.0 + 30 +0.0 + 0 +VERTEX + 5 +25A9 + 8 +DETAILS + 10 +10605.0 + 20 +4750.0 + 30 +0.0 + 0 +SEQEND + 5 +25AA + 8 +DETAILS + 0 +POLYLINE + 5 +954 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +25AB + 8 +DETAILS + 10 +10660.0 + 20 +4750.0 + 30 +0.0 + 0 +VERTEX + 5 +25AC + 8 +DETAILS + 10 +10635.0 + 20 +4750.0 + 30 +0.0 + 0 +SEQEND + 5 +25AD + 8 +DETAILS + 0 +POLYLINE + 5 +958 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +25AE + 8 +DETAILS + 10 +10395.0 + 20 +9990.0 + 30 +0.0 + 0 +VERTEX + 5 +25AF + 8 +DETAILS + 10 +10415.0 + 20 +9950.0 + 30 +0.0 + 0 +SEQEND + 5 +25B0 + 8 +DETAILS + 0 +POLYLINE + 5 +95C + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +25B1 + 8 +DETAILS + 10 +10425.0 + 20 +9930.0 + 30 +0.0 + 0 +VERTEX + 5 +25B2 + 8 +DETAILS + 10 +10445.0 + 20 +9890.0 + 30 +0.0 + 0 +SEQEND + 5 +25B3 + 8 +DETAILS + 0 +POLYLINE + 5 +960 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +25B4 + 8 +DETAILS + 10 +10460.0 + 20 +9865.0 + 30 +0.0 + 0 +VERTEX + 5 +25B5 + 8 +DETAILS + 10 +10480.0 + 20 +9825.0 + 30 +0.0 + 0 +SEQEND + 5 +25B6 + 8 +DETAILS + 0 +POLYLINE + 5 +964 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +25B7 + 8 +DETAILS + 10 +10490.0 + 20 +9805.0 + 30 +0.0 + 0 +VERTEX + 5 +25B8 + 8 +DETAILS + 10 +10510.0 + 20 +9765.0 + 30 +0.0 + 0 +SEQEND + 5 +25B9 + 8 +DETAILS + 0 +POLYLINE + 5 +968 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +25BA + 8 +DETAILS + 10 +10377.671942 + 20 +9982.673146 + 30 +0.0 + 0 +VERTEX + 5 +25BB + 8 +DETAILS + 10 +10408.95109 + 20 +10001.495886 + 30 +0.0 + 0 +SEQEND + 5 +25BC + 8 +DETAILS + 0 +POLYLINE + 5 +96C + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +25BD + 8 +DETAILS + 10 +10737.328058 + 20 +9982.673146 + 30 +0.0 + 0 +VERTEX + 5 +25BE + 8 +DETAILS + 10 +10706.04891 + 20 +10001.495886 + 30 +0.0 + 0 +SEQEND + 5 +25BF + 8 +DETAILS + 0 +POLYLINE + 5 +970 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +25C0 + 8 +DETAILS + 10 +10720.0 + 20 +9990.0 + 30 +0.0 + 0 +VERTEX + 5 +25C1 + 8 +DETAILS + 10 +10700.0 + 20 +9950.0 + 30 +0.0 + 0 +SEQEND + 5 +25C2 + 8 +DETAILS + 0 +POLYLINE + 5 +974 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +25C3 + 8 +DETAILS + 10 +10690.0 + 20 +9930.0 + 30 +0.0 + 0 +VERTEX + 5 +25C4 + 8 +DETAILS + 10 +10670.0 + 20 +9890.0 + 30 +0.0 + 0 +SEQEND + 5 +25C5 + 8 +DETAILS + 0 +POLYLINE + 5 +978 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +25C6 + 8 +DETAILS + 10 +10655.0 + 20 +9865.0 + 30 +0.0 + 0 +VERTEX + 5 +25C7 + 8 +DETAILS + 10 +10635.0 + 20 +9825.0 + 30 +0.0 + 0 +SEQEND + 5 +25C8 + 8 +DETAILS + 0 +POLYLINE + 5 +97C + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +25C9 + 8 +DETAILS + 10 +10625.0 + 20 +9805.0 + 30 +0.0 + 0 +VERTEX + 5 +25CA + 8 +DETAILS + 10 +10605.0 + 20 +9765.0 + 30 +0.0 + 0 +SEQEND + 5 +25CB + 8 +DETAILS + 0 +POLYLINE + 5 +980 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +25CC + 8 +DETAILS + 10 +13989.481111 + 20 +7852.54707 + 30 +0.0 + 0 +VERTEX + 5 +25CD + 8 +DETAILS + 10 +13957.62352 + 20 +7794.171745 + 30 +0.0 + 0 +SEQEND + 5 +25CE + 8 +DETAILS + 0 +POLYLINE + 5 +984 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +25CF + 8 +DETAILS + 10 +13936.385098 + 20 +7758.792741 + 30 +0.0 + 0 +VERTEX + 5 +25D0 + 8 +DETAILS + 10 +13904.527507 + 20 +7700.417416 + 30 +0.0 + 0 +SEQEND + 5 +25D1 + 8 +DETAILS + 0 +POLYLINE + 5 +988 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +25D2 + 8 +DETAILS + 10 +13893.908339 + 20 +7677.421095 + 30 +0.0 + 0 +VERTEX + 5 +25D3 + 8 +DETAILS + 10 +13862.050749 + 20 +7619.04577 + 30 +0.0 + 0 +SEQEND + 5 +25D4 + 8 +DETAILS + 0 +POLYLINE + 5 +98C + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +25D5 + 8 +DETAILS + 10 +13982.00818 + 20 +7864.830542 + 30 +0.0 + 0 +VERTEX + 5 +25D6 + 8 +DETAILS + 10 +14015.039986 + 20 +7863.115472 + 30 +0.0 + 0 +SEQEND + 5 +25D7 + 8 +DETAILS + 0 +POLYLINE + 5 +990 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +991 + 8 +HOLZ + 10 +4357.123981 + 20 +5770.33177 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +992 + 8 +HOLZ + 10 +4357.123981 + 20 +5770.33177 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +993 + 8 +HOLZ + 10 +4356.457573 + 20 +5778.229812 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +994 + 8 +HOLZ + 10 +4356.31141 + 20 +5784.905913 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +995 + 8 +HOLZ + 10 +4356.611169 + 20 +5790.504923 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +996 + 8 +HOLZ + 10 +4357.28253 + 20 +5795.171693 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +997 + 8 +HOLZ + 10 +4358.251173 + 20 +5799.051073 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +998 + 8 +HOLZ + 10 +4359.442778 + 20 +5802.287913 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +999 + 8 +HOLZ + 10 +4360.783023 + 20 +5805.027063 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +99A + 8 +HOLZ + 10 +4362.197588 + 20 +5807.413373 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +99B + 8 +HOLZ + 10 +4363.627635 + 20 +5809.571267 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +99C + 8 +HOLZ + 10 +4365.076263 + 20 +5811.543455 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +99D + 8 +HOLZ + 10 +4366.56205 + 20 +5813.352223 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +99E + 8 +HOLZ + 10 +4368.103578 + 20 +5815.019856 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +99F + 8 +HOLZ + 10 +4369.719427 + 20 +5816.568637 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9A0 + 8 +HOLZ + 10 +4371.428178 + 20 +5818.020852 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9A1 + 8 +HOLZ + 10 +4373.248411 + 20 +5819.398785 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9A2 + 8 +HOLZ + 10 +4375.198705 + 20 +5820.724721 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9A3 + 8 +HOLZ + 10 +4377.287733 + 20 +5822.014136 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9A4 + 8 +HOLZ + 10 +4379.484527 + 20 +5823.255266 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9A5 + 8 +HOLZ + 10 +4381.748211 + 20 +5824.429542 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9A6 + 8 +HOLZ + 10 +4384.037906 + 20 +5825.518393 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9A7 + 8 +HOLZ + 10 +4386.312738 + 20 +5826.503247 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9A8 + 8 +HOLZ + 10 +4388.531828 + 20 +5827.365534 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9A9 + 8 +HOLZ + 10 +4390.654301 + 20 +5828.086683 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9AA + 8 +HOLZ + 10 +4392.639279 + 20 +5828.648122 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9AB + 8 +HOLZ + 10 +4354.587174 + 20 +5793.151224 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +9AC + 8 +HOLZ + 10 +4362.197595 + 20 +5809.631928 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +9AD + 8 +HOLZ + 10 +4373.613183 + 20 +5821.041655 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +9AE + 8 +HOLZ + 10 +4387.565665 + 20 +5827.380404 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +9AF + 8 +HOLZ + 10 +4392.639279 + 20 +5828.648122 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +9B0 + 8 +HOLZ + 0 +POLYLINE + 5 +9B1 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +9B2 + 8 +HOLZ + 10 +4321.608683 + 20 +5771.599542 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +9B3 + 8 +HOLZ + 10 +4321.608683 + 20 +5771.599542 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9B4 + 8 +HOLZ + 10 +4321.807491 + 20 +5779.583626 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9B5 + 8 +HOLZ + 10 +4322.366755 + 20 +5786.505474 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9B6 + 8 +HOLZ + 10 +4323.230735 + 20 +5792.491368 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9B7 + 8 +HOLZ + 10 +4324.343689 + 20 +5797.667585 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9B8 + 8 +HOLZ + 10 +4325.649876 + 20 +5802.160408 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9B9 + 8 +HOLZ + 10 +4327.093557 + 20 +5806.096115 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9BA + 8 +HOLZ + 10 +4328.618989 + 20 +5809.600987 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9BB + 8 +HOLZ + 10 +4330.170431 + 20 +5812.801303 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9BC + 8 +HOLZ + 10 +4331.703293 + 20 +5815.804361 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9BD + 8 +HOLZ + 10 +4333.217572 + 20 +5818.641523 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9BE + 8 +HOLZ + 10 +4334.724419 + 20 +5821.325171 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9BF + 8 +HOLZ + 10 +4336.234981 + 20 +5823.867683 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9C0 + 8 +HOLZ + 10 +4337.760406 + 20 +5826.28144 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9C1 + 8 +HOLZ + 10 +4339.311844 + 20 +5828.578822 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9C2 + 8 +HOLZ + 10 +4340.900441 + 20 +5830.772209 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9C3 + 8 +HOLZ + 10 +4342.537348 + 20 +5832.873982 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9C4 + 8 +HOLZ + 10 +4344.232472 + 20 +5834.896519 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9C5 + 8 +HOLZ + 10 +4345.99077 + 20 +5836.852202 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9C6 + 8 +HOLZ + 10 +4347.815956 + 20 +5838.753411 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9C7 + 8 +HOLZ + 10 +4349.711747 + 20 +5840.612526 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9C8 + 8 +HOLZ + 10 +4351.681859 + 20 +5842.441927 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9C9 + 8 +HOLZ + 10 +4353.730006 + 20 +5844.253996 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9CA + 8 +HOLZ + 10 +4355.859905 + 20 +5846.061112 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9CB + 8 +HOLZ + 10 +4358.075272 + 20 +5847.875655 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9CC + 8 +HOLZ + 10 +4360.398404 + 20 +5849.707531 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9CD + 8 +HOLZ + 10 +4362.925915 + 20 +5851.556739 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9CE + 8 +HOLZ + 10 +4365.773005 + 20 +5853.420802 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9CF + 8 +HOLZ + 10 +4369.05487 + 20 +5855.297246 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9D0 + 8 +HOLZ + 10 +4372.886707 + 20 +5857.183594 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9D1 + 8 +HOLZ + 10 +4377.383714 + 20 +5859.07737 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9D2 + 8 +HOLZ + 10 +4382.661088 + 20 +5860.976098 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9D3 + 8 +HOLZ + 10 +4388.834025 + 20 +5862.877302 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9D4 + 8 +HOLZ + 10 +4321.608683 + 20 +5794.418995 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +9D5 + 8 +HOLZ + 10 +4330.48755 + 20 +5814.702906 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +9D6 + 8 +HOLZ + 10 +4341.903139 + 20 +5833.719153 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +9D7 + 8 +HOLZ + 10 +4357.123981 + 20 +5847.664369 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +9D8 + 8 +HOLZ + 10 +4371.076376 + 20 +5857.806324 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +9D9 + 8 +HOLZ + 10 +4388.834025 + 20 +5862.877302 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +9DA + 8 +HOLZ + 0 +POLYLINE + 5 +9DB + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +9DC + 8 +HOLZ + 10 +4279.75141 + 20 +5772.867259 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +9DD + 8 +HOLZ + 10 +4279.75141 + 20 +5772.867259 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9DE + 8 +HOLZ + 10 +4282.551229 + 20 +5787.268278 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9DF + 8 +HOLZ + 10 +4285.264341 + 20 +5799.293511 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9E0 + 8 +HOLZ + 10 +4287.922951 + 20 +5809.241324 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9E1 + 8 +HOLZ + 10 +4290.559265 + 20 +5817.410082 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9E2 + 8 +HOLZ + 10 +4293.205488 + 20 +5824.098151 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9E3 + 8 +HOLZ + 10 +4295.893827 + 20 +5829.603898 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9E4 + 8 +HOLZ + 10 +4298.656485 + 20 +5834.225689 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9E5 + 8 +HOLZ + 10 +4301.52567 + 20 +5838.261888 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9E6 + 8 +HOLZ + 10 +4304.519136 + 20 +5841.966294 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9E7 + 8 +HOLZ + 10 +4307.596831 + 20 +5845.414426 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9E8 + 8 +HOLZ + 10 +4310.704254 + 20 +5848.637235 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9E9 + 8 +HOLZ + 10 +4313.786903 + 20 +5851.665672 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9EA + 8 +HOLZ + 10 +4316.790277 + 20 +5854.530688 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9EB + 8 +HOLZ + 10 +4319.659874 + 20 +5857.263234 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9EC + 8 +HOLZ + 10 +4322.341191 + 20 +5859.894261 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9ED + 8 +HOLZ + 10 +4324.779727 + 20 +5862.454721 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9EE + 8 +HOLZ + 10 +4326.938735 + 20 +5864.96669 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9EF + 8 +HOLZ + 10 +4328.852485 + 20 +5867.416758 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9F0 + 8 +HOLZ + 10 +4330.573002 + 20 +5869.78264 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9F1 + 8 +HOLZ + 10 +4332.152309 + 20 +5872.042052 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9F2 + 8 +HOLZ + 10 +4333.642432 + 20 +5874.172708 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9F3 + 8 +HOLZ + 10 +4335.095396 + 20 +5876.152325 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9F4 + 8 +HOLZ + 10 +4336.563225 + 20 +5877.958618 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9F5 + 8 +HOLZ + 10 +4338.097943 + 20 +5879.569302 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9F6 + 8 +HOLZ + 10 +4339.742491 + 20 +5880.973235 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9F7 + 8 +HOLZ + 10 +4341.503476 + 20 +5882.203844 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9F8 + 8 +HOLZ + 10 +4343.37842 + 20 +5883.305698 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9F9 + 8 +HOLZ + 10 +4345.364844 + 20 +5884.323366 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9FA + 8 +HOLZ + 10 +4347.460271 + 20 +5885.301417 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9FB + 8 +HOLZ + 10 +4349.662224 + 20 +5886.28442 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9FC + 8 +HOLZ + 10 +4351.968225 + 20 +5887.316944 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9FD + 8 +HOLZ + 10 +4354.375795 + 20 +5888.443558 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9FE + 8 +HOLZ + 10 +4356.878947 + 20 +5889.700784 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9FF + 8 +HOLZ + 10 +4359.457658 + 20 +5891.092955 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A00 + 8 +HOLZ + 10 +4362.088392 + 20 +5892.616357 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A01 + 8 +HOLZ + 10 +4364.747615 + 20 +5894.267276 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A02 + 8 +HOLZ + 10 +4367.411793 + 20 +5896.041999 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A03 + 8 +HOLZ + 10 +4370.057391 + 20 +5897.93681 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A04 + 8 +HOLZ + 10 +4372.660876 + 20 +5899.947997 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A05 + 8 +HOLZ + 10 +4375.198713 + 20 +5902.071844 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A06 + 8 +HOLZ + 10 +4377.651909 + 20 +5904.30175 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A07 + 8 +HOLZ + 10 +4380.019638 + 20 +5906.619555 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A08 + 8 +HOLZ + 10 +4382.305616 + 20 +5909.004214 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A09 + 8 +HOLZ + 10 +4384.513559 + 20 +5911.434678 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A0A + 8 +HOLZ + 10 +4386.64718 + 20 +5913.889901 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A0B + 8 +HOLZ + 10 +4388.710197 + 20 +5916.348836 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A0C + 8 +HOLZ + 10 +4390.706325 + 20 +5918.790436 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A0D + 8 +HOLZ + 10 +4392.639279 + 20 +5921.193653 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A0E + 8 +HOLZ + 10 +4287.361831 + 20 +5814.702906 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A0F + 8 +HOLZ + 10 +4300.045866 + 20 +5841.32562 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A10 + 8 +HOLZ + 10 +4327.950743 + 20 +5862.877302 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A11 + 8 +HOLZ + 10 +4336.829525 + 20 +5881.893495 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A12 + 8 +HOLZ + 10 +4353.318814 + 20 +5886.964527 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A13 + 8 +HOLZ + 10 +4376.14999 + 20 +5900.909743 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A14 + 8 +HOLZ + 10 +4387.565665 + 20 +5914.854958 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A15 + 8 +HOLZ + 10 +4392.639279 + 20 +5921.193653 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +A16 + 8 +HOLZ + 0 +POLYLINE + 5 +A17 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +A18 + 8 +HOLZ + 10 +4258.188507 + 20 +5772.867259 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A19 + 8 +HOLZ + 10 +4258.188507 + 20 +5772.867259 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A1A + 8 +HOLZ + 10 +4260.622519 + 20 +5790.36708 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A1B + 8 +HOLZ + 10 +4263.153143 + 20 +5805.067707 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A1C + 8 +HOLZ + 10 +4265.758084 + 20 +5817.319501 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A1D + 8 +HOLZ + 10 +4268.415048 + 20 +5827.472828 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A1E + 8 +HOLZ + 10 +4271.101737 + 20 +5835.87805 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A1F + 8 +HOLZ + 10 +4273.795856 + 20 +5842.885532 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A20 + 8 +HOLZ + 10 +4276.475109 + 20 +5848.845638 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A21 + 8 +HOLZ + 10 +4279.117201 + 20 +5854.10873 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A22 + 8 +HOLZ + 10 +4281.703139 + 20 +5858.971524 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A23 + 8 +HOLZ + 10 +4284.227143 + 20 +5863.516144 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A24 + 8 +HOLZ + 10 +4286.686736 + 20 +5867.771063 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A25 + 8 +HOLZ + 10 +4289.07944 + 20 +5871.764757 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A26 + 8 +HOLZ + 10 +4291.402779 + 20 +5875.525701 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A27 + 8 +HOLZ + 10 +4293.654275 + 20 +5879.082368 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A28 + 8 +HOLZ + 10 +4295.831452 + 20 +5882.463234 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A29 + 8 +HOLZ + 10 +4297.931832 + 20 +5885.696774 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A2A + 8 +HOLZ + 10 +4299.95975 + 20 +5888.810842 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A2B + 8 +HOLZ + 10 +4301.946793 + 20 +5891.83082 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A2C + 8 +HOLZ + 10 +4303.93136 + 20 +5894.781467 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A2D + 8 +HOLZ + 10 +4305.951848 + 20 +5897.687546 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A2E + 8 +HOLZ + 10 +4308.046657 + 20 +5900.573815 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A2F + 8 +HOLZ + 10 +4310.254184 + 20 +5903.465037 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A30 + 8 +HOLZ + 10 +4312.612829 + 20 +5906.385972 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A31 + 8 +HOLZ + 10 +4315.16099 + 20 +5909.361381 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A32 + 8 +HOLZ + 10 +4317.937066 + 20 +5912.422628 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A33 + 8 +HOLZ + 10 +4320.979455 + 20 +5915.627487 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A34 + 8 +HOLZ + 10 +4324.326558 + 20 +5919.040335 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A35 + 8 +HOLZ + 10 +4328.016774 + 20 +5922.72555 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A36 + 8 +HOLZ + 10 +4332.088502 + 20 +5926.747508 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A37 + 8 +HOLZ + 10 +4336.580141 + 20 +5931.170587 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A38 + 8 +HOLZ + 10 +4341.530092 + 20 +5936.059165 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A39 + 8 +HOLZ + 10 +4346.976753 + 20 +5941.477618 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A3A + 8 +HOLZ + 10 +4264.530568 + 20 +5823.577144 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A3B + 8 +HOLZ + 10 +4279.75141 + 20 +5857.806324 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A3C + 8 +HOLZ + 10 +4298.777419 + 20 +5886.964527 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A3D + 8 +HOLZ + 10 +4312.729901 + 20 +5908.516209 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A3E + 8 +HOLZ + 10 +4331.755911 + 20 +5926.264685 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A3F + 8 +HOLZ + 10 +4346.976753 + 20 +5941.477618 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +A40 + 8 +HOLZ + 0 +POLYLINE + 5 +A41 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +A42 + 8 +HOLZ + 10 +4226.478463 + 20 +5795.686713 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A43 + 8 +HOLZ + 10 +4226.478463 + 20 +5795.686713 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A44 + 8 +HOLZ + 10 +4232.3155 + 20 +5811.513541 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A45 + 8 +HOLZ + 10 +4237.500996 + 20 +5824.962104 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A46 + 8 +HOLZ + 10 +4242.096887 + 20 +5836.328293 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A47 + 8 +HOLZ + 10 +4246.165104 + 20 +5845.907998 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A48 + 8 +HOLZ + 10 +4249.767582 + 20 +5853.997108 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A49 + 8 +HOLZ + 10 +4252.966253 + 20 +5860.891515 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A4A + 8 +HOLZ + 10 +4255.82305 + 20 +5866.887108 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A4B + 8 +HOLZ + 10 +4258.399908 + 20 +5872.279778 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A4C + 8 +HOLZ + 10 +4260.759378 + 20 +5877.322702 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A4D + 8 +HOLZ + 10 +4262.966491 + 20 +5882.098211 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A4E + 8 +HOLZ + 10 +4265.086897 + 20 +5886.64592 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A4F + 8 +HOLZ + 10 +4267.186246 + 20 +5891.005449 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A50 + 8 +HOLZ + 10 +4269.330188 + 20 +5895.216414 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A51 + 8 +HOLZ + 10 +4271.584372 + 20 +5899.318432 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A52 + 8 +HOLZ + 10 +4274.014449 + 20 +5903.351121 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A53 + 8 +HOLZ + 10 +4276.686069 + 20 +5907.354099 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A54 + 8 +HOLZ + 10 +4279.658688 + 20 +5911.361411 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A55 + 8 +HOLZ + 10 +4282.966988 + 20 +5915.384819 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A56 + 8 +HOLZ + 10 +4286.639457 + 20 +5919.430512 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A57 + 8 +HOLZ + 10 +4290.704585 + 20 +5923.50468 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A58 + 8 +HOLZ + 10 +4295.19086 + 20 +5927.613513 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A59 + 8 +HOLZ + 10 +4300.126771 + 20 +5931.763201 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A5A + 8 +HOLZ + 10 +4305.540806 + 20 +5935.959934 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A5B + 8 +HOLZ + 10 +4311.461454 + 20 +5940.209901 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A5C + 8 +HOLZ + 10 +4242.967665 + 20 +5841.32562 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A5D + 8 +HOLZ + 10 +4260.725314 + 20 +5875.5548 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A5E + 8 +HOLZ + 10 +4273.409349 + 20 +5907.248438 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A5F + 8 +HOLZ + 10 +4294.972252 + 20 +5928.800174 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A60 + 8 +HOLZ + 10 +4311.461454 + 20 +5940.209901 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +A61 + 8 +HOLZ + 0 +POLYLINE + 5 +A62 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +A63 + 8 +HOLZ + 10 +4225.210016 + 20 +5890.767733 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A64 + 8 +HOLZ + 10 +4225.210016 + 20 +5890.767733 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A65 + 8 +HOLZ + 10 +4232.077232 + 20 +5899.131894 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A66 + 8 +HOLZ + 10 +4239.24173 + 20 +5907.050362 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A67 + 8 +HOLZ + 10 +4246.525141 + 20 +5914.433999 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A68 + 8 +HOLZ + 10 +4253.749095 + 20 +5921.193667 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A69 + 8 +HOLZ + 10 +4260.735224 + 20 +5927.240229 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A6A + 8 +HOLZ + 10 +4267.305157 + 20 +5932.484547 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A6B + 8 +HOLZ + 10 +4273.280527 + 20 +5936.837483 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A6C + 8 +HOLZ + 10 +4278.482963 + 20 +5940.209901 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A6D + 8 +HOLZ + 10 +4242.967665 + 20 +5913.587187 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A6E + 8 +HOLZ + 10 +4265.798928 + 20 +5932.60338 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A6F + 8 +HOLZ + 10 +4278.482963 + 20 +5940.209901 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +A70 + 8 +HOLZ + 0 +POLYLINE + 5 +A71 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +A72 + 8 +HOLZ + 10 +16866.072109 + 20 +5770.995143 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A73 + 8 +HOLZ + 10 +16866.072109 + 20 +5770.995143 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A74 + 8 +HOLZ + 10 +16867.405513 + 20 +5776.882084 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A75 + 8 +HOLZ + 10 +16869.438562 + 20 +5782.457385 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A76 + 8 +HOLZ + 10 +16872.140837 + 20 +5787.835059 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A77 + 8 +HOLZ + 10 +16875.48192 + 20 +5793.129122 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A78 + 8 +HOLZ + 10 +16879.431392 + 20 +5798.453589 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A79 + 8 +HOLZ + 10 +16883.958833 + 20 +5803.922473 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A7A + 8 +HOLZ + 10 +16889.033824 + 20 +5809.64979 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A7B + 8 +HOLZ + 10 +16894.625947 + 20 +5815.749553 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A7C + 8 +HOLZ + 10 +16868.667952 + 20 +5787.21052 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A7D + 8 +HOLZ + 10 +16879.05115 + 20 +5798.885574 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A7E + 8 +HOLZ + 10 +16894.625947 + 20 +5815.749553 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +A7F + 8 +HOLZ + 0 +POLYLINE + 5 +A80 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +A81 + 8 +HOLZ + 10 +16828.432995 + 20 +5772.292347 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A82 + 8 +HOLZ + 10 +16828.432995 + 20 +5772.292347 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A83 + 8 +HOLZ + 10 +16831.680166 + 20 +5783.30086 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A84 + 8 +HOLZ + 10 +16834.637721 + 20 +5792.620692 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A85 + 8 +HOLZ + 10 +16837.350654 + 20 +5800.4482 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A86 + 8 +HOLZ + 10 +16839.863961 + 20 +5806.979743 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A87 + 8 +HOLZ + 10 +16842.222637 + 20 +5812.411681 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A88 + 8 +HOLZ + 10 +16844.471677 + 20 +5816.940371 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A89 + 8 +HOLZ + 10 +16846.656076 + 20 +5820.762172 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A8A + 8 +HOLZ + 10 +16848.82083 + 20 +5824.073443 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A8B + 8 +HOLZ + 10 +16851.003963 + 20 +5827.044888 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A8C + 8 +HOLZ + 10 +16853.215615 + 20 +5829.744601 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A8D + 8 +HOLZ + 10 +16855.458953 + 20 +5832.215018 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A8E + 8 +HOLZ + 10 +16857.737147 + 20 +5834.49858 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A8F + 8 +HOLZ + 10 +16860.053365 + 20 +5836.637723 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A90 + 8 +HOLZ + 10 +16862.410776 + 20 +5838.674887 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A91 + 8 +HOLZ + 10 +16864.812547 + 20 +5840.652511 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A92 + 8 +HOLZ + 10 +16867.261849 + 20 +5842.613031 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A93 + 8 +HOLZ + 10 +16869.776741 + 20 +5844.590654 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A94 + 8 +HOLZ + 10 +16872.434857 + 20 +5846.586644 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A95 + 8 +HOLZ + 10 +16875.328724 + 20 +5848.594034 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A96 + 8 +HOLZ + 10 +16878.550869 + 20 +5850.605856 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A97 + 8 +HOLZ + 10 +16882.193816 + 20 +5852.615142 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A98 + 8 +HOLZ + 10 +16886.350093 + 20 +5854.614924 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A99 + 8 +HOLZ + 10 +16891.112227 + 20 +5856.598234 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A9A + 8 +HOLZ + 10 +16896.572742 + 20 +5858.558103 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A9B + 8 +HOLZ + 10 +16837.518271 + 20 +5804.074499 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A9C + 8 +HOLZ + 10 +16848.55043 + 20 +5827.424607 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A9D + 8 +HOLZ + 10 +16866.72107 + 20 +5842.34278 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A9E + 8 +HOLZ + 10 +16880.997945 + 20 +5853.369233 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A9F + 8 +HOLZ + 10 +16896.572742 + 20 +5858.558103 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +AA0 + 8 +HOLZ + 0 +POLYLINE + 5 +AA1 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +AA2 + 8 +HOLZ + 10 +16790.79388 + 20 +5772.292347 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +AA3 + 8 +HOLZ + 10 +16790.79388 + 20 +5772.292347 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AA4 + 8 +HOLZ + 10 +16796.154895 + 20 +5786.184785 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AA5 + 8 +HOLZ + 10 +16801.072292 + 20 +5797.449826 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AA6 + 8 +HOLZ + 10 +16805.589166 + 20 +5806.439648 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AA7 + 8 +HOLZ + 10 +16809.74861 + 20 +5813.506429 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AA8 + 8 +HOLZ + 10 +16813.593721 + 20 +5819.002345 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AA9 + 8 +HOLZ + 10 +16817.167592 + 20 +5823.279574 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AAA + 8 +HOLZ + 10 +16820.513318 + 20 +5826.690294 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AAB + 8 +HOLZ + 10 +16823.673993 + 20 +5829.586682 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AAC + 8 +HOLZ + 10 +16826.684684 + 20 +5832.266865 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AAD + 8 +HOLZ + 10 +16829.548349 + 20 +5834.812763 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AAE + 8 +HOLZ + 10 +16832.259918 + 20 +5837.252248 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AAF + 8 +HOLZ + 10 +16834.814319 + 20 +5839.613189 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AB0 + 8 +HOLZ + 10 +16837.206482 + 20 +5841.923456 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AB1 + 8 +HOLZ + 10 +16839.431338 + 20 +5844.21092 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AB2 + 8 +HOLZ + 10 +16841.483816 + 20 +5846.503451 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AB3 + 8 +HOLZ + 10 +16843.358845 + 20 +5848.828919 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AB4 + 8 +HOLZ + 10 +16845.066249 + 20 +5851.21171 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AB5 + 8 +HOLZ + 10 +16846.675421 + 20 +5853.662277 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AB6 + 8 +HOLZ + 10 +16848.27065 + 20 +5856.187586 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AB7 + 8 +HOLZ + 10 +16849.936223 + 20 +5858.794605 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AB8 + 8 +HOLZ + 10 +16851.756429 + 20 +5861.490302 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AB9 + 8 +HOLZ + 10 +16853.815554 + 20 +5864.281645 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +ABA + 8 +HOLZ + 10 +16856.197887 + 20 +5867.175602 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +ABB + 8 +HOLZ + 10 +16858.987715 + 20 +5870.179139 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +ABC + 8 +HOLZ + 10 +16862.241864 + 20 +5873.30767 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +ABD + 8 +HOLZ + 10 +16865.907312 + 20 +5876.610391 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +ABE + 8 +HOLZ + 10 +16869.903573 + 20 +5880.144942 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +ABF + 8 +HOLZ + 10 +16874.150162 + 20 +5883.968963 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AC0 + 8 +HOLZ + 10 +16878.566594 + 20 +5888.140096 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AC1 + 8 +HOLZ + 10 +16883.072385 + 20 +5892.71598 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AC2 + 8 +HOLZ + 10 +16887.58705 + 20 +5897.754257 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AC3 + 8 +HOLZ + 10 +16892.030104 + 20 +5903.312568 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AC4 + 8 +HOLZ + 10 +16805.719716 + 20 +5813.155091 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +AC5 + 8 +HOLZ + 10 +16825.188191 + 20 +5831.316328 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +AC6 + 8 +HOLZ + 10 +16845.305713 + 20 +5848.180308 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +AC7 + 8 +HOLZ + 10 +16853.742029 + 20 +5868.935953 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +AC8 + 8 +HOLZ + 10 +16880.348985 + 20 +5887.745793 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +AC9 + 8 +HOLZ + 10 +16892.030104 + 20 +5903.312568 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +ACA + 8 +HOLZ + 0 +POLYLINE + 5 +ACB + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +ACC + 8 +HOLZ + 10 +16766.782681 + 20 +5772.292347 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +ACD + 8 +HOLZ + 10 +16766.782681 + 20 +5772.292347 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +ACE + 8 +HOLZ + 10 +16771.385228 + 20 +5793.065541 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +ACF + 8 +HOLZ + 10 +16775.921229 + 20 +5809.565734 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AD0 + 8 +HOLZ + 10 +16780.354562 + 20 +5822.384535 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AD1 + 8 +HOLZ + 10 +16784.649103 + 20 +5832.113549 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AD2 + 8 +HOLZ + 10 +16788.768731 + 20 +5839.344384 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AD3 + 8 +HOLZ + 10 +16792.677323 + 20 +5844.668647 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AD4 + 8 +HOLZ + 10 +16796.338756 + 20 +5848.677944 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AD5 + 8 +HOLZ + 10 +16799.716909 + 20 +5851.963883 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AD6 + 8 +HOLZ + 10 +16802.791925 + 20 +5855.022847 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AD7 + 8 +HOLZ + 10 +16805.609011 + 20 +5857.970329 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AD8 + 8 +HOLZ + 10 +16808.229638 + 20 +5860.826599 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AD9 + 8 +HOLZ + 10 +16810.71528 + 20 +5863.611925 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +ADA + 8 +HOLZ + 10 +16813.127408 + 20 +5866.346578 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +ADB + 8 +HOLZ + 10 +16815.527495 + 20 +5869.050827 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +ADC + 8 +HOLZ + 10 +16817.977014 + 20 +5871.74494 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +ADD + 8 +HOLZ + 10 +16820.537436 + 20 +5874.449188 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +ADE + 8 +HOLZ + 10 +16823.256926 + 20 +5877.17814 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +ADF + 8 +HOLZ + 10 +16826.130414 + 20 +5879.92356 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AE0 + 8 +HOLZ + 10 +16829.13952 + 20 +5882.671515 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AE1 + 8 +HOLZ + 10 +16832.265868 + 20 +5885.408068 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AE2 + 8 +HOLZ + 10 +16835.491078 + 20 +5888.119284 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AE3 + 8 +HOLZ + 10 +16838.796772 + 20 +5890.791229 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AE4 + 8 +HOLZ + 10 +16842.164572 + 20 +5893.409967 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AE5 + 8 +HOLZ + 10 +16845.576099 + 20 +5895.961564 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AE6 + 8 +HOLZ + 10 +16849.030085 + 20 +5898.490568 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AE7 + 8 +HOLZ + 10 +16852.593709 + 20 +5901.275472 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AE8 + 8 +HOLZ + 10 +16856.351256 + 20 +5904.653252 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AE9 + 8 +HOLZ + 10 +16860.387017 + 20 +5908.960883 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AEA + 8 +HOLZ + 10 +16864.785278 + 20 +5914.535343 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AEB + 8 +HOLZ + 10 +16869.630328 + 20 +5921.713606 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AEC + 8 +HOLZ + 10 +16875.006454 + 20 +5930.83265 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AED + 8 +HOLZ + 10 +16880.997945 + 20 +5942.229451 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AEE + 8 +HOLZ + 10 +16779.112761 + 20 +5833.910737 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +AEF + 8 +HOLZ + 10 +16803.123874 + 20 +5853.369233 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +AF0 + 8 +HOLZ + 10 +16818.698757 + 20 +5874.124878 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +AF1 + 8 +HOLZ + 10 +16845.305713 + 20 +5896.826385 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +AF2 + 8 +HOLZ + 10 +16864.125227 + 20 +5908.501439 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +AF3 + 8 +HOLZ + 10 +16880.997945 + 20 +5942.229451 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +AF4 + 8 +HOLZ + 0 +POLYLINE + 5 +AF5 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +AF6 + 8 +HOLZ + 10 +16733.037244 + 20 +5772.292347 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +AF7 + 8 +HOLZ + 10 +16733.037244 + 20 +5772.292347 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AF8 + 8 +HOLZ + 10 +16737.741193 + 20 +5791.253255 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AF9 + 8 +HOLZ + 10 +16742.135239 + 20 +5806.195155 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AFA + 8 +HOLZ + 10 +16746.244099 + 20 +5817.690019 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AFB + 8 +HOLZ + 10 +16750.092488 + 20 +5826.30982 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AFC + 8 +HOLZ + 10 +16753.705124 + 20 +5832.62653 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AFD + 8 +HOLZ + 10 +16757.106723 + 20 +5837.212121 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AFE + 8 +HOLZ + 10 +16760.322003 + 20 +5840.638567 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AFF + 8 +HOLZ + 10 +16763.37568 + 20 +5843.477839 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B00 + 8 +HOLZ + 10 +16766.291626 + 20 +5846.213865 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B01 + 8 +HOLZ + 10 +16769.090331 + 20 +5848.978395 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B02 + 8 +HOLZ + 10 +16771.791442 + 20 +5851.815135 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B03 + 8 +HOLZ + 10 +16774.414603 + 20 +5854.767789 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B04 + 8 +HOLZ + 10 +16776.97946 + 20 +5857.880064 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B05 + 8 +HOLZ + 10 +16779.505659 + 20 +5861.195664 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B06 + 8 +HOLZ + 10 +16782.012846 + 20 +5864.758295 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B07 + 8 +HOLZ + 10 +16784.520666 + 20 +5868.611661 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B08 + 8 +HOLZ + 10 +16787.050982 + 20 +5872.77635 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B09 + 8 +HOLZ + 10 +16789.634532 + 20 +5877.180468 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B0A + 8 +HOLZ + 10 +16792.30427 + 20 +5881.729004 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B0B + 8 +HOLZ + 10 +16795.09315 + 20 +5886.326946 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B0C + 8 +HOLZ + 10 +16798.034127 + 20 +5890.879283 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B0D + 8 +HOLZ + 10 +16801.160157 + 20 +5895.291002 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B0E + 8 +HOLZ + 10 +16804.504192 + 20 +5899.467092 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B0F + 8 +HOLZ + 10 +16808.099189 + 20 +5903.312541 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B10 + 8 +HOLZ + 10 +16811.964158 + 20 +5906.793778 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B11 + 8 +HOLZ + 10 +16816.062345 + 20 +5910.122997 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B12 + 8 +HOLZ + 10 +16820.343049 + 20 +5913.573832 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B13 + 8 +HOLZ + 10 +16824.755571 + 20 +5917.419917 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B14 + 8 +HOLZ + 10 +16829.249214 + 20 +5921.934887 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B15 + 8 +HOLZ + 10 +16833.773277 + 20 +5927.392377 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B16 + 8 +HOLZ + 10 +16838.277062 + 20 +5934.06602 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B17 + 8 +HOLZ + 10 +16842.70987 + 20 +5942.229451 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B18 + 8 +HOLZ + 10 +16746.016285 + 20 +5828.721866 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B19 + 8 +HOLZ + 10 +16764.835799 + 20 +5843.639985 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B1A + 8 +HOLZ + 10 +16784.30436 + 20 +5865.044287 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B1B + 8 +HOLZ + 10 +16805.070756 + 20 +5907.852837 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B1C + 8 +HOLZ + 10 +16831.028751 + 20 +5918.230687 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B1D + 8 +HOLZ + 10 +16842.70987 + 20 +5942.229451 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +B1E + 8 +HOLZ + 0 +POLYLINE + 5 +B1F + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +B20 + 8 +HOLZ + 10 +16722.005085 + 20 +5826.776005 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B21 + 8 +HOLZ + 10 +16722.005085 + 20 +5826.776005 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B22 + 8 +HOLZ + 10 +16727.794306 + 20 +5840.869336 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B23 + 8 +HOLZ + 10 +16733.032175 + 20 +5852.263693 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B24 + 8 +HOLZ + 10 +16737.775727 + 20 +5861.330891 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B25 + 8 +HOLZ + 10 +16742.081999 + 20 +5868.442743 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B26 + 8 +HOLZ + 10 +16746.008027 + 20 +5873.971063 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B27 + 8 +HOLZ + 10 +16749.610848 + 20 +5878.287663 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B28 + 8 +HOLZ + 10 +16752.947496 + 20 +5881.764358 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B29 + 8 +HOLZ + 10 +16756.07501 + 20 +5884.772961 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B2A + 8 +HOLZ + 10 +16759.041128 + 20 +5887.624056 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B2B + 8 +HOLZ + 10 +16761.856415 + 20 +5890.383305 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B2C + 8 +HOLZ + 10 +16764.522139 + 20 +5893.055144 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B2D + 8 +HOLZ + 10 +16767.039565 + 20 +5895.644006 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B2E + 8 +HOLZ + 10 +16769.409964 + 20 +5898.154326 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B2F + 8 +HOLZ + 10 +16771.634602 + 20 +5900.590536 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B30 + 8 +HOLZ + 10 +16773.714746 + 20 +5902.957071 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B31 + 8 +HOLZ + 10 +16775.651666 + 20 +5905.258365 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B32 + 8 +HOLZ + 10 +16777.449797 + 20 +5907.501385 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B33 + 8 +HOLZ + 10 +16779.12625 + 20 +5909.703234 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B34 + 8 +HOLZ + 10 +16780.701305 + 20 +5911.883547 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B35 + 8 +HOLZ + 10 +16782.195242 + 20 +5914.061961 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B36 + 8 +HOLZ + 10 +16783.628341 + 20 +5916.25811 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B37 + 8 +HOLZ + 10 +16785.020881 + 20 +5918.491632 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B38 + 8 +HOLZ + 10 +16786.393142 + 20 +5920.782161 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B39 + 8 +HOLZ + 10 +16787.765404 + 20 +5923.149334 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B3A + 8 +HOLZ + 10 +16789.150342 + 20 +5925.605607 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B3B + 8 +HOLZ + 10 +16790.53021 + 20 +5928.134723 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B3C + 8 +HOLZ + 10 +16791.879657 + 20 +5930.713245 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B3D + 8 +HOLZ + 10 +16793.173333 + 20 +5933.317736 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B3E + 8 +HOLZ + 10 +16794.385888 + 20 +5935.924759 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B3F + 8 +HOLZ + 10 +16795.49197 + 20 +5938.510878 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B40 + 8 +HOLZ + 10 +16796.466229 + 20 +5941.052656 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B41 + 8 +HOLZ + 10 +16797.283314 + 20 +5943.526655 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B42 + 8 +HOLZ + 10 +16738.228843 + 20 +5868.287351 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B43 + 8 +HOLZ + 10 +16757.697404 + 20 +5885.799932 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B44 + 8 +HOLZ + 10 +16777.165879 + 20 +5905.906976 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B45 + 8 +HOLZ + 10 +16787.549077 + 20 +5922.122353 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B46 + 8 +HOLZ + 10 +16795.336518 + 20 +5937.040526 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B47 + 8 +HOLZ + 10 +16797.283314 + 20 +5943.526655 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +B48 + 8 +HOLZ + 0 +POLYLINE + 5 +B49 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +B4A + 8 +HOLZ + 10 +16722.654046 + 20 +5900.069449 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B4B + 8 +HOLZ + 10 +16722.654046 + 20 +5900.069449 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B4C + 8 +HOLZ + 10 +16728.646699 + 20 +5905.654889 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B4D + 8 +HOLZ + 10 +16734.091797 + 20 +5910.822274 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B4E + 8 +HOLZ + 10 +16739.171859 + 20 +5915.70082 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B4F + 8 +HOLZ + 10 +16744.069403 + 20 +5920.419746 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B50 + 8 +HOLZ + 10 +16748.966946 + 20 +5925.108268 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B51 + 8 +HOLZ + 10 +16754.047008 + 20 +5929.895605 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B52 + 8 +HOLZ + 10 +16759.492106 + 20 +5934.910973 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B53 + 8 +HOLZ + 10 +16765.484759 + 20 +5940.283591 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B54 + 8 +HOLZ + 10 +16739.526764 + 20 +5915.636224 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B55 + 8 +HOLZ + 10 +16748.612041 + 20 +5925.365418 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B56 + 8 +HOLZ + 10 +16765.484759 + 20 +5940.283591 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +B57 + 8 +HOLZ + 0 +POLYLINE + 5 +B58 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +B59 + 8 +HOLZ + 10 +16829.244152 + 20 +7370.464201 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B5A + 8 +HOLZ + 10 +16829.244152 + 20 +7370.464201 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B5B + 8 +HOLZ + 10 +16832.420803 + 20 +7376.959742 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B5C + 8 +HOLZ + 10 +16835.636867 + 20 +7382.621595 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B5D + 8 +HOLZ + 10 +16838.879206 + 20 +7387.508841 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B5E + 8 +HOLZ + 10 +16842.134683 + 20 +7391.680559 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B5F + 8 +HOLZ + 10 +16845.390159 + 20 +7395.195827 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B60 + 8 +HOLZ + 10 +16848.632498 + 20 +7398.113726 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B61 + 8 +HOLZ + 10 +16851.848562 + 20 +7400.493335 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B62 + 8 +HOLZ + 10 +16855.025213 + 20 +7402.393733 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B63 + 8 +HOLZ + 10 +16837.650993 + 20 +7388.94974 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B64 + 8 +HOLZ + 10 +16846.618372 + 20 +7397.912438 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B65 + 8 +HOLZ + 10 +16855.025213 + 20 +7402.393733 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +B66 + 8 +HOLZ + 0 +POLYLINE + 5 +B67 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +B68 + 8 +HOLZ + 10 +16804.584079 + 20 +7369.90406 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B69 + 8 +HOLZ + 10 +16804.584079 + 20 +7369.90406 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B6A + 8 +HOLZ + 10 +16806.171295 + 20 +7379.880933 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B6B + 8 +HOLZ + 10 +16807.981824 + 20 +7388.118229 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B6C + 8 +HOLZ + 10 +16810.002528 + 20 +7394.845701 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B6D + 8 +HOLZ + 10 +16812.220271 + 20 +7400.293106 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B6E + 8 +HOLZ + 10 +16814.621917 + 20 +7404.690199 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B6F + 8 +HOLZ + 10 +16817.194329 + 20 +7408.266736 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B70 + 8 +HOLZ + 10 +16819.924372 + 20 +7411.252472 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B71 + 8 +HOLZ + 10 +16822.798909 + 20 +7413.877164 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B72 + 8 +HOLZ + 10 +16825.815749 + 20 +7416.342119 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B73 + 8 +HOLZ + 10 +16829.01649 + 20 +7418.734866 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B74 + 8 +HOLZ + 10 +16832.453673 + 20 +7421.114484 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B75 + 8 +HOLZ + 10 +16836.179841 + 20 +7423.540054 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B76 + 8 +HOLZ + 10 +16840.247537 + 20 +7426.070657 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B77 + 8 +HOLZ + 10 +16844.709302 + 20 +7428.765371 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B78 + 8 +HOLZ + 10 +16849.61768 + 20 +7431.68328 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B79 + 8 +HOLZ + 10 +16855.025213 + 20 +7434.883461 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B7A + 8 +HOLZ + 10 +16808.507231 + 20 +7399.032721 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B7B + 8 +HOLZ + 10 +16821.397761 + 20 +7415.277585 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B7C + 8 +HOLZ + 10 +16839.892881 + 20 +7425.920763 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B7D + 8 +HOLZ + 10 +16855.025213 + 20 +7434.883461 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +B7E + 8 +HOLZ + 0 +POLYLINE + 5 +B7F + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +B80 + 8 +HOLZ + 10 +16779.923918 + 20 +7371.024397 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B81 + 8 +HOLZ + 10 +16779.923918 + 20 +7371.024397 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B82 + 8 +HOLZ + 10 +16783.073289 + 20 +7380.470013 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B83 + 8 +HOLZ + 10 +16785.835705 + 20 +7388.34946 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B84 + 8 +HOLZ + 10 +16788.270825 + 20 +7394.855842 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B85 + 8 +HOLZ + 10 +16790.438305 + 20 +7400.182263 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B86 + 8 +HOLZ + 10 +16792.397805 + 20 +7404.521827 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B87 + 8 +HOLZ + 10 +16794.208983 + 20 +7408.067639 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B88 + 8 +HOLZ + 10 +16795.931496 + 20 +7411.012803 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B89 + 8 +HOLZ + 10 +16797.625002 + 20 +7413.550423 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B8A + 8 +HOLZ + 10 +16799.34615 + 20 +7415.850081 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B8B + 8 +HOLZ + 10 +16801.139546 + 20 +7417.987268 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B8C + 8 +HOLZ + 10 +16803.046784 + 20 +7420.013952 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B8D + 8 +HOLZ + 10 +16805.109463 + 20 +7421.982103 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B8E + 8 +HOLZ + 10 +16807.369177 + 20 +7423.943689 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B8F + 8 +HOLZ + 10 +16809.867521 + 20 +7425.950679 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B90 + 8 +HOLZ + 10 +16812.646094 + 20 +7428.055042 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B91 + 8 +HOLZ + 10 +16815.746489 + 20 +7430.308746 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B92 + 8 +HOLZ + 10 +16819.204009 + 20 +7432.748717 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B93 + 8 +HOLZ + 10 +16823.028781 + 20 +7435.351706 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B94 + 8 +HOLZ + 10 +16827.224637 + 20 +7438.079421 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B95 + 8 +HOLZ + 10 +16831.795409 + 20 +7440.89357 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B96 + 8 +HOLZ + 10 +16836.74493 + 20 +7443.75586 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B97 + 8 +HOLZ + 10 +16842.077033 + 20 +7446.628001 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B98 + 8 +HOLZ + 10 +16847.79555 + 20 +7449.471699 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B99 + 8 +HOLZ + 10 +16853.904312 + 20 +7452.248662 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B9A + 8 +HOLZ + 10 +16788.89121 + 20 +7398.47258 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B9B + 8 +HOLZ + 10 +16797.298051 + 20 +7415.837781 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B9C + 8 +HOLZ + 10 +16811.870019 + 20 +7428.161437 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B9D + 8 +HOLZ + 10 +16837.090543 + 20 +7444.966443 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B9E + 8 +HOLZ + 10 +16853.904312 + 20 +7452.248662 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +B9F + 8 +HOLZ + 0 +POLYLINE + 5 +BA0 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +BA1 + 8 +HOLZ + 10 +16764.231136 + 20 +7391.750556 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +BA2 + 8 +HOLZ + 10 +16764.231136 + 20 +7391.750556 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BA3 + 8 +HOLZ + 10 +16768.550394 + 20 +7399.914557 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BA4 + 8 +HOLZ + 10 +16772.303729 + 20 +7406.857569 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BA5 + 8 +HOLZ + 10 +16775.555722 + 20 +7412.724008 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BA6 + 8 +HOLZ + 10 +16778.370957 + 20 +7417.658294 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BA7 + 8 +HOLZ + 10 +16780.814017 + 20 +7421.804844 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BA8 + 8 +HOLZ + 10 +16782.949484 + 20 +7425.308078 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BA9 + 8 +HOLZ + 10 +16784.841941 + 20 +7428.312412 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BAA + 8 +HOLZ + 10 +16786.555971 + 20 +7430.962267 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BAB + 8 +HOLZ + 10 +16788.150867 + 20 +7433.380178 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BAC + 8 +HOLZ + 10 +16789.664758 + 20 +7435.601156 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BAD + 8 +HOLZ + 10 +16791.130484 + 20 +7437.638329 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BAE + 8 +HOLZ + 10 +16792.580884 + 20 +7439.504827 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BAF + 8 +HOLZ + 10 +16794.048799 + 20 +7441.213778 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BB0 + 8 +HOLZ + 10 +16795.567067 + 20 +7442.778311 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BB1 + 8 +HOLZ + 10 +16797.168529 + 20 +7444.211555 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BB2 + 8 +HOLZ + 10 +16798.886023 + 20 +7445.526639 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BB3 + 8 +HOLZ + 10 +16800.746095 + 20 +7446.737237 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BB4 + 8 +HOLZ + 10 +16802.750113 + 20 +7447.859216 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BB5 + 8 +HOLZ + 10 +16804.893153 + 20 +7448.908984 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BB6 + 8 +HOLZ + 10 +16807.170286 + 20 +7449.902955 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BB7 + 8 +HOLZ + 10 +16809.576589 + 20 +7450.857537 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BB8 + 8 +HOLZ + 10 +16812.107134 + 20 +7451.789143 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BB9 + 8 +HOLZ + 10 +16814.756995 + 20 +7452.714184 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BBA + 8 +HOLZ + 10 +16817.521248 + 20 +7453.649071 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BBB + 8 +HOLZ + 10 +16820.408284 + 20 +7454.640848 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BBC + 8 +HOLZ + 10 +16823.479767 + 20 +7455.859098 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BBD + 8 +HOLZ + 10 +16826.81068 + 20 +7457.504038 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BBE + 8 +HOLZ + 10 +16830.476005 + 20 +7459.775883 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BBF + 8 +HOLZ + 10 +16834.550724 + 20 +7462.874851 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BC0 + 8 +HOLZ + 10 +16839.109821 + 20 +7467.001157 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BC1 + 8 +HOLZ + 10 +16844.228276 + 20 +7472.355017 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BC2 + 8 +HOLZ + 10 +16849.981074 + 20 +7479.136649 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BC3 + 8 +HOLZ + 10 +16776.56113 + 20 +7415.277585 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +BC4 + 8 +HOLZ + 10 +16787.770309 + 20 +7433.202928 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +BC5 + 8 +HOLZ + 10 +16797.298051 + 20 +7446.646976 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +BC6 + 8 +HOLZ + 10 +16816.353622 + 20 +7453.369 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +BC7 + 8 +HOLZ + 10 +16833.727841 + 20 +7458.970632 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +BC8 + 8 +HOLZ + 10 +16849.981074 + 20 +7479.136649 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +BC9 + 8 +HOLZ + 0 +POLYLINE + 5 +BCA + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +BCB + 8 +HOLZ + 10 +16760.868348 + 20 +7439.924952 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +BCC + 8 +HOLZ + 10 +16760.868348 + 20 +7439.924952 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BCD + 8 +HOLZ + 10 +16767.126161 + 20 +7444.526376 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BCE + 8 +HOLZ + 10 +16772.521939 + 20 +7448.325291 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BCF + 8 +HOLZ + 10 +16777.165694 + 20 +7451.438218 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BD0 + 8 +HOLZ + 10 +16781.167439 + 20 +7453.981675 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BD1 + 8 +HOLZ + 10 +16784.637186 + 20 +7456.072182 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BD2 + 8 +HOLZ + 10 +16787.684947 + 20 +7457.826259 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BD3 + 8 +HOLZ + 10 +16790.420735 + 20 +7459.360426 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BD4 + 8 +HOLZ + 10 +16792.954561 + 20 +7460.791201 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BD5 + 8 +HOLZ + 10 +16795.386587 + 20 +7462.228539 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BD6 + 8 +HOLZ + 10 +16797.777564 + 20 +7463.756139 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BD7 + 8 +HOLZ + 10 +16800.178393 + 20 +7465.451133 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BD8 + 8 +HOLZ + 10 +16802.639973 + 20 +7467.390653 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BD9 + 8 +HOLZ + 10 +16805.213206 + 20 +7469.651832 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BDA + 8 +HOLZ + 10 +16807.948991 + 20 +7472.311802 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BDB + 8 +HOLZ + 10 +16810.898229 + 20 +7475.447697 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BDC + 8 +HOLZ + 10 +16814.11182 + 20 +7479.136649 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BDD + 8 +HOLZ + 10 +16778.803018 + 20 +7453.369 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +BDE + 8 +HOLZ + 10 +16793.935349 + 20 +7460.651165 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +BDF + 8 +HOLZ + 10 +16805.144529 + 20 +7468.493472 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +BE0 + 8 +HOLZ + 10 +16814.11182 + 20 +7479.136649 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +BE1 + 8 +HOLZ + 0 +POLYLINE + 5 +BE2 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +BE3 + 8 +HOLZ + 10 +16761.989248 + 20 +7465.132514 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +BE4 + 8 +HOLZ + 10 +16761.989248 + 20 +7465.132514 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BE5 + 8 +HOLZ + 10 +16766.821001 + 20 +7467.00009 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BE6 + 8 +HOLZ + 10 +16770.588761 + 20 +7468.519753 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BE7 + 8 +HOLZ + 10 +16773.594651 + 20 +7469.868742 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BE8 + 8 +HOLZ + 10 +16776.140792 + 20 +7471.224298 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BE9 + 8 +HOLZ + 10 +16778.529307 + 20 +7472.76366 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BEA + 8 +HOLZ + 10 +16781.062317 + 20 +7474.664069 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BEB + 8 +HOLZ + 10 +16784.041944 + 20 +7477.102765 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BEC + 8 +HOLZ + 10 +16787.770309 + 20 +7480.256987 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BED + 8 +HOLZ + 10 +16776.56113 + 20 +7470.734147 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +BEE + 8 +HOLZ + 10 +16787.770309 + 20 +7480.256987 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +BEF + 8 +HOLZ + 0 +POLYLINE + 5 +BF0 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +BF1 + 8 +HOLZ + 10 +13968.847437 + 20 +7499.096313 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +BF2 + 8 +HOLZ + 10 +13968.847437 + 20 +7499.096313 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BF3 + 8 +HOLZ + 10 +13972.584324 + 20 +7511.576045 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BF4 + 8 +HOLZ + 10 +13977.426682 + 20 +7523.460825 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BF5 + 8 +HOLZ + 10 +13983.346165 + 20 +7534.495679 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BF6 + 8 +HOLZ + 10 +13990.314429 + 20 +7544.425629 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BF7 + 8 +HOLZ + 10 +13998.303129 + 20 +7552.995699 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BF8 + 8 +HOLZ + 10 +14007.283921 + 20 +7559.950914 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BF9 + 8 +HOLZ + 10 +14017.228461 + 20 +7565.036295 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BFA + 8 +HOLZ + 10 +14028.108404 + 20 +7567.996868 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BFB + 8 +HOLZ + 10 +13977.313314 + 20 +7532.942219 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +BFC + 8 +HOLZ + 10 +13997.873215 + 20 +7563.161731 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +BFD + 8 +HOLZ + 10 +14028.108404 + 20 +7567.996868 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +BFE + 8 +HOLZ + 0 +POLYLINE + 5 +BFF + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +C00 + 8 +HOLZ + 10 +13919.261672 + 20 +7503.93145 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +C01 + 8 +HOLZ + 10 +13919.261672 + 20 +7503.93145 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C02 + 8 +HOLZ + 10 +13927.256105 + 20 +7520.051484 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C03 + 8 +HOLZ + 10 +13934.122618 + 20 +7533.280596 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C04 + 8 +HOLZ + 10 +13940.037188 + 20 +7543.957575 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C05 + 8 +HOLZ + 10 +13945.175797 + 20 +7552.42121 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C06 + 8 +HOLZ + 10 +13949.714422 + 20 +7559.01029 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C07 + 8 +HOLZ + 10 +13953.829044 + 20 +7564.063605 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C08 + 8 +HOLZ + 10 +13957.695641 + 20 +7567.919943 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C09 + 8 +HOLZ + 10 +13961.490194 + 20 +7570.918094 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C0A + 8 +HOLZ + 10 +13965.360335 + 20 +7573.35671 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C0B + 8 +HOLZ + 10 +13969.340316 + 20 +7575.373906 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C0C + 8 +HOLZ + 10 +13973.436042 + 20 +7577.067657 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C0D + 8 +HOLZ + 10 +13977.653418 + 20 +7578.535942 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C0E + 8 +HOLZ + 10 +13981.998349 + 20 +7579.876738 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C0F + 8 +HOLZ + 10 +13986.476739 + 20 +7581.188022 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C10 + 8 +HOLZ + 10 +13991.094496 + 20 +7582.567772 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C11 + 8 +HOLZ + 10 +13995.857523 + 20 +7584.113965 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C12 + 8 +HOLZ + 10 +14000.758143 + 20 +7585.921627 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C13 + 8 +HOLZ + 10 +14005.734352 + 20 +7588.07398 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C14 + 8 +HOLZ + 10 +14010.710561 + 20 +7590.651296 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C15 + 8 +HOLZ + 10 +14015.611183 + 20 +7593.733844 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C16 + 8 +HOLZ + 10 +14020.36063 + 20 +7597.401897 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C17 + 8 +HOLZ + 10 +14024.883315 + 20 +7601.735726 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C18 + 8 +HOLZ + 10 +14029.10365 + 20 +7606.8156 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C19 + 8 +HOLZ + 10 +14032.946048 + 20 +7612.721792 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C1A + 8 +HOLZ + 10 +13942.240481 + 20 +7551.073915 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +C1B + 8 +HOLZ + 10 +13960.38156 + 20 +7576.458345 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +C1C + 8 +HOLZ + 10 +13994.244982 + 20 +7581.293482 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +C1D + 8 +HOLZ + 10 +14023.27076 + 20 +7595.798839 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +C1E + 8 +HOLZ + 10 +14032.946048 + 20 +7612.721792 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +C1F + 8 +HOLZ + 0 +POLYLINE + 5 +C20 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +C21 + 8 +HOLZ + 10 +13880.560693 + 20 +7501.513855 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +C22 + 8 +HOLZ + 10 +13880.560693 + 20 +7501.513855 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C23 + 8 +HOLZ + 10 +13884.959149 + 20 +7518.600103 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C24 + 8 +HOLZ + 10 +13889.103683 + 20 +7532.13319 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C25 + 8 +HOLZ + 10 +13893.02382 + 20 +7542.6396 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C26 + 8 +HOLZ + 10 +13896.749086 + 20 +7550.645812 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C27 + 8 +HOLZ + 10 +13900.309006 + 20 +7556.678309 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C28 + 8 +HOLZ + 10 +13903.733106 + 20 +7561.263573 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C29 + 8 +HOLZ + 10 +13907.05091 + 20 +7564.928084 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C2A + 8 +HOLZ + 10 +13910.291946 + 20 +7568.198325 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C2B + 8 +HOLZ + 10 +13913.485344 + 20 +7571.503588 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C2C + 8 +HOLZ + 10 +13916.658663 + 20 +7574.8844 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C2D + 8 +HOLZ + 10 +13919.839067 + 20 +7578.284099 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C2E + 8 +HOLZ + 10 +13923.053721 + 20 +7581.646025 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C2F + 8 +HOLZ + 10 +13926.32979 + 20 +7584.913515 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C30 + 8 +HOLZ + 10 +13929.694438 + 20 +7588.029908 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C31 + 8 +HOLZ + 10 +13933.174831 + 20 +7590.938542 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C32 + 8 +HOLZ + 10 +13936.798132 + 20 +7593.582755 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C33 + 8 +HOLZ + 10 +13940.58442 + 20 +7595.928313 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C34 + 8 +HOLZ + 10 +13944.525428 + 20 +7598.030699 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C35 + 8 +HOLZ + 10 +13948.605801 + 20 +7599.967821 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C36 + 8 +HOLZ + 10 +13952.810186 + 20 +7601.81759 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C37 + 8 +HOLZ + 10 +13957.123228 + 20 +7603.657915 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C38 + 8 +HOLZ + 10 +13961.529574 + 20 +7605.566705 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C39 + 8 +HOLZ + 10 +13966.01387 + 20 +7607.621871 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C3A + 8 +HOLZ + 10 +13970.560762 + 20 +7609.901322 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C3B + 8 +HOLZ + 10 +13975.197808 + 20 +7612.525071 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C3C + 8 +HOLZ + 10 +13980.124214 + 20 +7615.781541 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C3D + 8 +HOLZ + 10 +13985.582098 + 20 +7620.001258 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C3E + 8 +HOLZ + 10 +13991.813577 + 20 +7625.51475 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C3F + 8 +HOLZ + 10 +13999.060771 + 20 +7632.652543 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C40 + 8 +HOLZ + 10 +14007.565796 + 20 +7641.745163 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C41 + 8 +HOLZ + 10 +14017.570771 + 20 +7653.123136 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C42 + 8 +HOLZ + 10 +14029.317815 + 20 +7667.11699 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C43 + 8 +HOLZ + 10 +13892.654716 + 20 +7552.282713 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +C44 + 8 +HOLZ + 10 +13910.795882 + 20 +7566.78807 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +C45 + 8 +HOLZ + 10 +13934.984015 + 20 +7597.007637 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +C46 + 8 +HOLZ + 10 +13970.056848 + 20 +7606.677911 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +C47 + 8 +HOLZ + 10 +13995.454393 + 20 +7626.018405 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +C48 + 8 +HOLZ + 10 +14029.317815 + 20 +7667.11699 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +C49 + 8 +HOLZ + 0 +POLYLINE + 5 +C4A + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +C4B + 8 +HOLZ + 10 +13846.697271 + 20 +7505.140194 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +C4C + 8 +HOLZ + 10 +13846.697271 + 20 +7505.140194 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C4D + 8 +HOLZ + 10 +13854.93281 + 20 +7526.67025 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C4E + 8 +HOLZ + 10 +13862.4668 + 20 +7544.452374 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C4F + 8 +HOLZ + 10 +13869.391363 + 20 +7558.988257 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C50 + 8 +HOLZ + 10 +13875.798622 + 20 +7570.779591 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C51 + 8 +HOLZ + 10 +13881.7807 + 20 +7580.328068 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C52 + 8 +HOLZ + 10 +13887.429719 + 20 +7588.135379 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C53 + 8 +HOLZ + 10 +13892.837803 + 20 +7594.703216 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C54 + 8 +HOLZ + 10 +13898.097073 + 20 +7600.53327 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C55 + 8 +HOLZ + 10 +13903.281937 + 20 +7606.037913 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C56 + 8 +HOLZ + 10 +13908.395938 + 20 +7611.272232 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C57 + 8 +HOLZ + 10 +13913.424903 + 20 +7616.201994 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C58 + 8 +HOLZ + 10 +13918.354658 + 20 +7620.792966 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C59 + 8 +HOLZ + 10 +13923.171032 + 20 +7625.010914 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C5A + 8 +HOLZ + 10 +13927.85985 + 20 +7628.821607 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C5B + 8 +HOLZ + 10 +13932.406941 + 20 +7632.190809 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C5C + 8 +HOLZ + 10 +13936.798132 + 20 +7635.08429 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C5D + 8 +HOLZ + 10 +13941.03165 + 20 +7637.496145 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C5E + 8 +HOLZ + 10 +13945.155329 + 20 +7639.533797 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C5F + 8 +HOLZ + 10 +13949.229403 + 20 +7641.332998 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C60 + 8 +HOLZ + 10 +13953.314107 + 20 +7643.0295 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C61 + 8 +HOLZ + 10 +13957.469674 + 20 +7644.759054 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C62 + 8 +HOLZ + 10 +13961.756339 + 20 +7646.657414 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C63 + 8 +HOLZ + 10 +13966.234336 + 20 +7648.860332 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C64 + 8 +HOLZ + 10 +13970.963899 + 20 +7651.503559 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C65 + 8 +HOLZ + 10 +13976.015893 + 20 +7654.701206 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C66 + 8 +HOLZ + 10 +13981.503698 + 20 +7658.480816 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C67 + 8 +HOLZ + 10 +13987.551327 + 20 +7662.848292 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C68 + 8 +HOLZ + 10 +13994.282791 + 20 +7667.809536 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C69 + 8 +HOLZ + 10 +14001.822102 + 20 +7673.370448 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C6A + 8 +HOLZ + 10 +14010.29327 + 20 +7679.536931 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C6B + 8 +HOLZ + 10 +14019.820307 + 20 +7686.314887 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C6C + 8 +HOLZ + 10 +14030.527226 + 20 +7693.710217 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C6D + 8 +HOLZ + 10 +13869.675994 + 20 +7567.996868 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +C6E + 8 +HOLZ + 10 +13898.701772 + 20 +7603.051572 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +C6F + 8 +HOLZ + 10 +13938.612248 + 20 +7640.523817 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +C70 + 8 +HOLZ + 10 +13967.638026 + 20 +7645.3589 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +C71 + 8 +HOLZ + 10 +14000.292037 + 20 +7673.160925 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +C72 + 8 +HOLZ + 10 +14030.527226 + 20 +7693.710217 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +C73 + 8 +HOLZ + 0 +POLYLINE + 5 +C74 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +C75 + 8 +HOLZ + 10 +13829.765517 + 20 +7581.293482 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +C76 + 8 +HOLZ + 10 +13829.765517 + 20 +7581.293482 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C77 + 8 +HOLZ + 10 +13838.872879 + 20 +7587.179207 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C78 + 8 +HOLZ + 10 +13847.180663 + 20 +7593.022436 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C79 + 8 +HOLZ + 10 +13854.739656 + 20 +7598.780673 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C7A + 8 +HOLZ + 10 +13861.600642 + 20 +7604.411422 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C7B + 8 +HOLZ + 10 +13867.814407 + 20 +7609.872186 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C7C + 8 +HOLZ + 10 +13873.431738 + 20 +7615.120469 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C7D + 8 +HOLZ + 10 +13878.503418 + 20 +7620.113775 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C7E + 8 +HOLZ + 10 +13883.080234 + 20 +7624.809607 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C7F + 8 +HOLZ + 10 +13887.217696 + 20 +7629.178849 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C80 + 8 +HOLZ + 10 +13890.99021 + 20 +7633.245897 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C81 + 8 +HOLZ + 10 +13894.476908 + 20 +7637.048523 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C82 + 8 +HOLZ + 10 +13897.75692 + 20 +7640.624504 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C83 + 8 +HOLZ + 10 +13900.909377 + 20 +7644.011612 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C84 + 8 +HOLZ + 10 +13904.013411 + 20 +7647.247624 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C85 + 8 +HOLZ + 10 +13907.148151 + 20 +7650.370312 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C86 + 8 +HOLZ + 10 +13910.39273 + 20 +7653.417452 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C87 + 8 +HOLZ + 10 +13913.810728 + 20 +7656.422097 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C88 + 8 +HOLZ + 10 +13917.403521 + 20 +7659.39841 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C89 + 8 +HOLZ + 10 +13921.156939 + 20 +7662.355837 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C8A + 8 +HOLZ + 10 +13925.056808 + 20 +7665.30382 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C8B + 8 +HOLZ + 10 +13929.088956 + 20 +7668.251803 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C8C + 8 +HOLZ + 10 +13933.239209 + 20 +7671.20923 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C8D + 8 +HOLZ + 10 +13937.493397 + 20 +7674.185543 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C8E + 8 +HOLZ + 10 +13941.837344 + 20 +7677.190187 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C8F + 8 +HOLZ + 10 +13946.261998 + 20 +7680.224933 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C90 + 8 +HOLZ + 10 +13950.778775 + 20 +7683.260858 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C91 + 8 +HOLZ + 10 +13955.40421 + 20 +7686.26137 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C92 + 8 +HOLZ + 10 +13960.154838 + 20 +7689.189873 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C93 + 8 +HOLZ + 10 +13965.047193 + 20 +7692.009774 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C94 + 8 +HOLZ + 10 +13970.09781 + 20 +7694.684479 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C95 + 8 +HOLZ + 10 +13975.323225 + 20 +7697.177394 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C96 + 8 +HOLZ + 10 +13980.739972 + 20 +7699.451925 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C97 + 8 +HOLZ + 10 +13986.362223 + 20 +7701.505317 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C98 + 8 +HOLZ + 10 +13992.194703 + 20 +7703.470176 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C99 + 8 +HOLZ + 10 +13998.239773 + 20 +7705.512944 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C9A + 8 +HOLZ + 10 +14004.499795 + 20 +7707.800067 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C9B + 8 +HOLZ + 10 +14010.97713 + 20 +7710.497988 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C9C + 8 +HOLZ + 10 +14017.674142 + 20 +7713.773152 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C9D + 8 +HOLZ + 10 +14024.59319 + 20 +7717.792003 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C9E + 8 +HOLZ + 10 +14031.736637 + 20 +7722.720985 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C9F + 8 +HOLZ + 10 +13855.163062 + 20 +7597.007637 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +CA0 + 8 +HOLZ + 10 +13887.817072 + 20 +7628.435947 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +CA1 + 8 +HOLZ + 10 +13908.37706 + 20 +7653.820376 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +CA2 + 8 +HOLZ + 10 +13941.03107 + 20 +7676.787264 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +CA3 + 8 +HOLZ + 10 +13978.522725 + 20 +7702.171693 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +CA4 + 8 +HOLZ + 10 +14012.386147 + 20 +7708.215574 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +CA5 + 8 +HOLZ + 10 +14031.736637 + 20 +7722.720985 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +CA6 + 8 +HOLZ + 0 +POLYLINE + 5 +CA7 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +CA8 + 8 +HOLZ + 10 +13834.603161 + 20 +7640.523817 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +CA9 + 8 +HOLZ + 10 +13834.603161 + 20 +7640.523817 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CAA + 8 +HOLZ + 10 +13852.681671 + 20 +7649.258561 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CAB + 8 +HOLZ + 10 +13868.116967 + 20 +7657.366486 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CAC + 8 +HOLZ + 10 +13881.213763 + 20 +7664.90071 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CAD + 8 +HOLZ + 10 +13892.276773 + 20 +7671.914355 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CAE + 8 +HOLZ + 10 +13901.61071 + 20 +7678.460542 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CAF + 8 +HOLZ + 10 +13909.520288 + 20 +7684.592391 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CB0 + 8 +HOLZ + 10 +13916.310221 + 20 +7690.363023 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CB1 + 8 +HOLZ + 10 +13922.285221 + 20 +7695.825559 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CB2 + 8 +HOLZ + 10 +13927.71221 + 20 +7701.028397 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CB3 + 8 +HOLZ + 10 +13932.706929 + 20 +7706.001048 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CB4 + 8 +HOLZ + 10 +13937.347328 + 20 +7710.768301 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CB5 + 8 +HOLZ + 10 +13941.711356 + 20 +7715.354945 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CB6 + 8 +HOLZ + 10 +13945.876962 + 20 +7719.785768 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CB7 + 8 +HOLZ + 10 +13949.922095 + 20 +7724.08556 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CB8 + 8 +HOLZ + 10 +13953.924704 + 20 +7728.27911 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CB9 + 8 +HOLZ + 10 +13957.962738 + 20 +7732.391205 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CBA + 8 +HOLZ + 10 +13886.607661 + 20 +7664.699448 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +CBB + 8 +HOLZ + 10 +13927.727549 + 20 +7698.5453 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +CBC + 8 +HOLZ + 10 +13947.078126 + 20 +7721.512187 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +CBD + 8 +HOLZ + 10 +13957.962738 + 20 +7732.391205 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +CBE + 8 +HOLZ + 0 +POLYLINE + 5 +CBF + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +CC0 + 8 +HOLZ + 10 +13838.231394 + 20 +7688.87508 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +CC1 + 8 +HOLZ + 10 +13838.231394 + 20 +7688.87508 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CC2 + 8 +HOLZ + 10 +13846.267335 + 20 +7694.510555 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CC3 + 8 +HOLZ + 10 +13852.630892 + 20 +7699.055293 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CC4 + 8 +HOLZ + 10 +13857.917323 + 20 +7703.005084 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CC5 + 8 +HOLZ + 10 +13862.72188 + 20 +7706.855717 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CC6 + 8 +HOLZ + 10 +13867.63982 + 20 +7711.102982 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CC7 + 8 +HOLZ + 10 +13873.266398 + 20 +7716.242667 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CC8 + 8 +HOLZ + 10 +13880.196867 + 20 +7722.770564 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CC9 + 8 +HOLZ + 10 +13889.026483 + 20 +7731.182462 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CCA + 8 +HOLZ + 10 +13862.419528 + 20 +7705.798032 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +CCB + 8 +HOLZ + 10 +13889.026483 + 20 +7731.182462 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +CCC + 8 +HOLZ + 0 +POLYLINE + 5 +CCD + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +CCE + 8 +HOLZ + 10 +10599.835784 + 20 +9602.096746 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +CCF + 8 +HOLZ + 10 +10599.835784 + 20 +9602.096746 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CD0 + 8 +HOLZ + 10 +10602.226487 + 20 +9611.772071 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CD1 + 8 +HOLZ + 10 +10605.554665 + 20 +9620.19531 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CD2 + 8 +HOLZ + 10 +10609.629505 + 20 +9627.507427 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CD3 + 8 +HOLZ + 10 +10614.260195 + 20 +9633.849384 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CD4 + 8 +HOLZ + 10 +10619.255921 + 20 +9639.362146 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CD5 + 8 +HOLZ + 10 +10624.42587 + 20 +9644.186676 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CD6 + 8 +HOLZ + 10 +10629.57923 + 20 +9648.463938 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CD7 + 8 +HOLZ + 10 +10634.525187 + 20 +9652.334896 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CD8 + 8 +HOLZ + 10 +10604.791413 + 20 +9629.692363 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +CD9 + 8 +HOLZ + 10 +10621.782116 + 20 +9642.428781 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +CDA + 8 +HOLZ + 10 +10634.525187 + 20 +9652.334896 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +CDB + 8 +HOLZ + 0 +POLYLINE + 5 +CDC + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +CDD + 8 +HOLZ + 10 +10564.43847 + 20 +9598.558867 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +CDE + 8 +HOLZ + 10 +10564.43847 + 20 +9598.558867 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CDF + 8 +HOLZ + 10 +10567.127168 + 20 +9610.740767 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CE0 + 8 +HOLZ + 10 +10569.886377 + 20 +9620.922238 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CE1 + 8 +HOLZ + 10 +10572.720246 + 20 +9629.358257 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CE2 + 8 +HOLZ + 10 +10575.632926 + 20 +9636.303801 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CE3 + 8 +HOLZ + 10 +10578.628565 + 20 +9642.013846 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CE4 + 8 +HOLZ + 10 +10581.711313 + 20 +9646.743369 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CE5 + 8 +HOLZ + 10 +10584.885318 + 20 +9650.747347 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CE6 + 8 +HOLZ + 10 +10588.154729 + 20 +9654.280756 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CE7 + 8 +HOLZ + 10 +10591.555499 + 20 +9657.566787 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CE8 + 8 +HOLZ + 10 +10595.250786 + 20 +9660.70149 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CE9 + 8 +HOLZ + 10 +10599.43555 + 20 +9663.749126 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CEA + 8 +HOLZ + 10 +10604.304755 + 20 +9666.773958 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CEB + 8 +HOLZ + 10 +10610.053359 + 20 +9669.84025 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CEC + 8 +HOLZ + 10 +10616.876325 + 20 +9673.012265 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CED + 8 +HOLZ + 10 +10624.968614 + 20 +9676.354265 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CEE + 8 +HOLZ + 10 +10634.525187 + 20 +9679.930513 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CEF + 8 +HOLZ + 10 +10571.518002 + 20 +9633.937818 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +CF0 + 8 +HOLZ + 10 +10587.092799 + 20 +9656.580404 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +CF1 + 8 +HOLZ + 10 +10606.915316 + 20 +9670.024398 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +CF2 + 8 +HOLZ + 10 +10634.525187 + 20 +9679.930513 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +CF3 + 8 +HOLZ + 0 +POLYLINE + 5 +CF4 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +CF5 + 8 +HOLZ + 10 +10533.996873 + 20 +9602.096746 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +CF6 + 8 +HOLZ + 10 +10533.996873 + 20 +9602.096746 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CF7 + 8 +HOLZ + 10 +10538.100614 + 20 +9615.677576 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CF8 + 8 +HOLZ + 10 +10541.93819 + 20 +9626.8952 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CF9 + 8 +HOLZ + 10 +10545.542093 + 20 +9636.039836 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CFA + 8 +HOLZ + 10 +10548.944817 + 20 +9643.401703 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CFB + 8 +HOLZ + 10 +10552.178854 + 20 +9649.27102 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CFC + 8 +HOLZ + 10 +10555.276696 + 20 +9653.938004 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CFD + 8 +HOLZ + 10 +10558.270837 + 20 +9657.692875 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CFE + 8 +HOLZ + 10 +10561.193768 + 20 +9660.82585 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CFF + 8 +HOLZ + 10 +10564.072913 + 20 +9663.587301 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D00 + 8 +HOLZ + 10 +10566.915416 + 20 +9666.068208 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D01 + 8 +HOLZ + 10 +10569.72335 + 20 +9668.319705 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D02 + 8 +HOLZ + 10 +10572.498791 + 20 +9670.392926 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D03 + 8 +HOLZ + 10 +10575.243811 + 20 +9672.339004 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D04 + 8 +HOLZ + 10 +10577.960485 + 20 +9674.209072 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D05 + 8 +HOLZ + 10 +10580.650888 + 20 +9676.054265 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D06 + 8 +HOLZ + 10 +10583.317092 + 20 +9677.925715 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D07 + 8 +HOLZ + 10 +10585.964976 + 20 +9679.860045 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D08 + 8 +HOLZ + 10 +10588.615625 + 20 +9681.835835 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D09 + 8 +HOLZ + 10 +10591.293928 + 20 +9683.817152 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D0A + 8 +HOLZ + 10 +10594.024773 + 20 +9685.768065 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D0B + 8 +HOLZ + 10 +10596.833049 + 20 +9687.652641 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D0C + 8 +HOLZ + 10 +10599.743644 + 20 +9689.43495 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D0D + 8 +HOLZ + 10 +10602.781448 + 20 +9691.07906 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D0E + 8 +HOLZ + 10 +10605.971349 + 20 +9692.549037 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D0F + 8 +HOLZ + 10 +10609.333166 + 20 +9693.822081 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D10 + 8 +HOLZ + 10 +10612.866439 + 20 +9694.927903 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D11 + 8 +HOLZ + 10 +10616.565638 + 20 +9695.909345 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D12 + 8 +HOLZ + 10 +10620.425235 + 20 +9696.809249 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D13 + 8 +HOLZ + 10 +10624.439699 + 20 +9697.670456 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D14 + 8 +HOLZ + 10 +10628.6035 + 20 +9698.535809 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D15 + 8 +HOLZ + 10 +10632.911111 + 20 +9699.448149 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D16 + 8 +HOLZ + 10 +10637.357 + 20 +9700.450318 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D17 + 8 +HOLZ + 10 +10545.323951 + 20 +9641.721205 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +D18 + 8 +HOLZ + 10 +10561.606744 + 20 +9664.363738 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +D19 + 8 +HOLZ + 10 +10583.553077 + 20 +9677.10021 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +D1A + 8 +HOLZ + 10 +10604.083503 + 20 +9694.789712 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +D1B + 8 +HOLZ + 10 +10625.321839 + 20 +9697.620015 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +D1C + 8 +HOLZ + 10 +10637.357 + 20 +9700.450318 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +D1D + 8 +HOLZ + 0 +POLYLINE + 5 +D1E + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +D1F + 8 +HOLZ + 10 +10512.050541 + 20 +9599.974019 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +D20 + 8 +HOLZ + 10 +10512.050541 + 20 +9599.974019 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D21 + 8 +HOLZ + 10 +10514.516463 + 20 +9613.557382 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D22 + 8 +HOLZ + 10 +10517.110292 + 20 +9624.792741 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D23 + 8 +HOLZ + 10 +10519.794002 + 20 +9633.985517 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D24 + 8 +HOLZ + 10 +10522.529569 + 20 +9641.441129 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D25 + 8 +HOLZ + 10 +10525.278966 + 20 +9647.464997 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D26 + 8 +HOLZ + 10 +10528.004168 + 20 +9652.362542 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D27 + 8 +HOLZ + 10 +10530.667149 + 20 +9656.439185 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D28 + 8 +HOLZ + 10 +10533.229884 + 20 +9660.000345 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D29 + 8 +HOLZ + 10 +10535.668635 + 20 +9663.304915 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D2A + 8 +HOLZ + 10 +10538.016819 + 20 +9666.425681 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D2B + 8 +HOLZ + 10 +10540.322138 + 20 +9669.3889 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D2C + 8 +HOLZ + 10 +10542.632296 + 20 +9672.22083 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D2D + 8 +HOLZ + 10 +10544.994997 + 20 +9674.947729 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D2E + 8 +HOLZ + 10 +10547.457944 + 20 +9677.595854 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D2F + 8 +HOLZ + 10 +10550.068842 + 20 +9680.191464 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D30 + 8 +HOLZ + 10 +10552.875394 + 20 +9682.760816 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D31 + 8 +HOLZ + 10 +10555.91355 + 20 +9685.32464 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D32 + 8 +HOLZ + 10 +10559.172249 + 20 +9687.881554 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D33 + 8 +HOLZ + 10 +10562.628674 + 20 +9690.424648 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D34 + 8 +HOLZ + 10 +10566.260013 + 20 +9692.947014 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D35 + 8 +HOLZ + 10 +10570.043448 + 20 +9695.44174 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D36 + 8 +HOLZ + 10 +10573.956165 + 20 +9697.901916 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D37 + 8 +HOLZ + 10 +10577.975349 + 20 +9700.320634 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D38 + 8 +HOLZ + 10 +10582.078185 + 20 +9702.690984 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D39 + 8 +HOLZ + 10 +10586.285183 + 20 +9705.006975 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D3A + 8 +HOLZ + 10 +10590.790153 + 20 +9707.266306 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D3B + 8 +HOLZ + 10 +10595.830232 + 20 +9709.467593 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D3C + 8 +HOLZ + 10 +10601.642554 + 20 +9711.609453 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D3D + 8 +HOLZ + 10 +10608.464256 + 20 +9713.690504 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D3E + 8 +HOLZ + 10 +10616.532474 + 20 +9715.709362 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D3F + 8 +HOLZ + 10 +10626.084343 + 20 +9717.664646 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D40 + 8 +HOLZ + 10 +10637.357 + 20 +9719.554972 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D41 + 8 +HOLZ + 10 +10518.421989 + 20 +9639.598478 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +D42 + 8 +HOLZ + 10 +10534.704783 + 20 +9662.24101 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +D43 + 8 +HOLZ + 10 +10550.27958 + 20 +9682.760816 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +D44 + 8 +HOLZ + 10 +10581.429261 + 20 +9703.280621 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +D45 + 8 +HOLZ + 10 +10604.791413 + 20 +9714.601942 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +D46 + 8 +HOLZ + 10 +10637.357 + 20 +9719.554972 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +D47 + 8 +HOLZ + 0 +POLYLINE + 5 +D48 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +D49 + 8 +HOLZ + 10 +10484.440583 + 20 +9638.890902 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +D4A + 8 +HOLZ + 10 +10484.440583 + 20 +9638.890902 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D4B + 8 +HOLZ + 10 +10493.309968 + 20 +9652.941146 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D4C + 8 +HOLZ + 10 +10501.370466 + 20 +9664.525917 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D4D + 8 +HOLZ + 10 +10508.676002 + 20 +9673.965837 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D4E + 8 +HOLZ + 10 +10515.280504 + 20 +9681.581528 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D4F + 8 +HOLZ + 10 +10521.237897 + 20 +9687.693614 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D50 + 8 +HOLZ + 10 +10526.602109 + 20 +9692.622714 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D51 + 8 +HOLZ + 10 +10531.427065 + 20 +9696.689452 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D52 + 8 +HOLZ + 10 +10535.766691 + 20 +9700.21445 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D53 + 8 +HOLZ + 10 +10539.679523 + 20 +9703.470882 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D54 + 8 +HOLZ + 10 +10543.242532 + 20 +9706.542126 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D55 + 8 +HOLZ + 10 +10546.537297 + 20 +9709.464116 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D56 + 8 +HOLZ + 10 +10549.645396 + 20 +9712.272784 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D57 + 8 +HOLZ + 10 +10552.64841 + 20 +9715.00406 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D58 + 8 +HOLZ + 10 +10555.627917 + 20 +9717.693877 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D59 + 8 +HOLZ + 10 +10558.665497 + 20 +9720.378166 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D5A + 8 +HOLZ + 10 +10561.842729 + 20 +9723.09286 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D5B + 8 +HOLZ + 10 +10565.221834 + 20 +9725.862142 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D5C + 8 +HOLZ + 10 +10568.787604 + 20 +9728.663211 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D5D + 8 +HOLZ + 10 +10572.50547 + 20 +9731.461516 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D5E + 8 +HOLZ + 10 +10576.340866 + 20 +9734.222508 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D5F + 8 +HOLZ + 10 +10580.259224 + 20 +9736.911637 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D60 + 8 +HOLZ + 10 +10584.225977 + 20 +9739.494352 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D61 + 8 +HOLZ + 10 +10588.206558 + 20 +9741.936104 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D62 + 8 +HOLZ + 10 +10592.166399 + 20 +9744.202343 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D63 + 8 +HOLZ + 10 +10596.104118 + 20 +9746.270036 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D64 + 8 +HOLZ + 10 +10600.151073 + 20 +9748.162215 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D65 + 8 +HOLZ + 10 +10604.471805 + 20 +9749.913431 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D66 + 8 +HOLZ + 10 +10609.230856 + 20 +9751.558232 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D67 + 8 +HOLZ + 10 +10614.592768 + 20 +9753.131168 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D68 + 8 +HOLZ + 10 +10620.722084 + 20 +9754.666788 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D69 + 8 +HOLZ + 10 +10627.783345 + 20 +9756.199642 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D6A + 8 +HOLZ + 10 +10635.941093 + 20 +9757.764279 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D6B + 8 +HOLZ + 10 +10509.218728 + 20 +9679.930513 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +D6C + 8 +HOLZ + 10 +10540.368322 + 20 +9702.573045 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +D6D + 8 +HOLZ + 10 +10559.482928 + 20 +9722.385275 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +D6E + 8 +HOLZ + 10 +10592.756338 + 20 +9746.443013 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +D6F + 8 +HOLZ + 10 +10612.578855 + 20 +9753.518825 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +D70 + 8 +HOLZ + 10 +10635.941093 + 20 +9757.764279 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +D71 + 8 +HOLZ + 0 +POLYLINE + 5 +D72 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +D73 + 8 +HOLZ + 10 +10479.484954 + 20 +9708.233705 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +D74 + 8 +HOLZ + 10 +10479.484954 + 20 +9708.233705 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D75 + 8 +HOLZ + 10 +10494.26461 + 20 +9721.832962 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D76 + 8 +HOLZ + 10 +10506.463441 + 20 +9732.648889 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D77 + 8 +HOLZ + 10 +10516.454086 + 20 +9741.082264 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D78 + 8 +HOLZ + 10 +10524.609184 + 20 +9747.533865 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D79 + 8 +HOLZ + 10 +10531.301376 + 20 +9752.404468 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D7A + 8 +HOLZ + 10 +10536.903301 + 20 +9756.09485 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D7B + 8 +HOLZ + 10 +10541.787599 + 20 +9759.005789 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D7C + 8 +HOLZ + 10 +10546.32691 + 20 +9761.538062 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D7D + 8 +HOLZ + 10 +10550.830269 + 20 +9764.019546 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D7E + 8 +HOLZ + 10 +10555.352294 + 20 +9766.486518 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D7F + 8 +HOLZ + 10 +10559.883997 + 20 +9768.902355 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D80 + 8 +HOLZ + 10 +10564.416392 + 20 +9771.230435 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D81 + 8 +HOLZ + 10 +10568.94049 + 20 +9773.434136 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D82 + 8 +HOLZ + 10 +10573.447306 + 20 +9775.476834 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D83 + 8 +HOLZ + 10 +10577.927852 + 20 +9777.321907 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D84 + 8 +HOLZ + 10 +10582.37314 + 20 +9778.932732 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D85 + 8 +HOLZ + 10 +10586.812554 + 20 +9780.28236 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D86 + 8 +HOLZ + 10 +10591.428956 + 20 +9781.382539 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D87 + 8 +HOLZ + 10 +10596.443577 + 20 +9782.254689 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D88 + 8 +HOLZ + 10 +10602.07765 + 20 +9782.920232 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D89 + 8 +HOLZ + 10 +10608.552406 + 20 +9783.400588 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D8A + 8 +HOLZ + 10 +10616.089078 + 20 +9783.717178 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D8B + 8 +HOLZ + 10 +10624.908898 + 20 +9783.891423 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D8C + 8 +HOLZ + 10 +10635.233097 + 20 +9783.944745 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D8D + 8 +HOLZ + 10 +10522.669709 + 20 +9748.56574 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +D8E + 8 +HOLZ + 10 +10546.031947 + 20 +9761.302212 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +D8F + 8 +HOLZ + 10 +10582.84508 + 20 +9781.822018 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +D90 + 8 +HOLZ + 10 +10605.499409 + 20 +9783.944745 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +D91 + 8 +HOLZ + 10 +10635.233097 + 20 +9783.944745 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +D92 + 8 +HOLZ + 0 +POLYLINE + 5 +D93 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +D94 + 8 +HOLZ + 10 +10475.945231 + 20 +9759.179431 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +D95 + 8 +HOLZ + 10 +10475.945231 + 20 +9759.179431 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D96 + 8 +HOLZ + 10 +10487.063251 + 20 +9767.498569 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D97 + 8 +HOLZ + 10 +10497.125569 + 20 +9774.521398 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D98 + 8 +HOLZ + 10 +10506.237963 + 20 +9780.410991 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D99 + 8 +HOLZ + 10 +10514.506211 + 20 +9785.330425 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D9A + 8 +HOLZ + 10 +10522.036091 + 20 +9789.442775 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D9B + 8 +HOLZ + 10 +10528.933379 + 20 +9792.911115 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D9C + 8 +HOLZ + 10 +10535.303855 + 20 +9795.898521 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D9D + 8 +HOLZ + 10 +10541.253296 + 20 +9798.568068 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D9E + 8 +HOLZ + 10 +10546.8778 + 20 +9801.057264 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D9F + 8 +HOLZ + 10 +10552.23475 + 20 +9803.40135 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DA0 + 8 +HOLZ + 10 +10557.37185 + 20 +9805.610001 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DA1 + 8 +HOLZ + 10 +10562.336804 + 20 +9807.69289 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DA2 + 8 +HOLZ + 10 +10567.177313 + 20 +9809.659692 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DA3 + 8 +HOLZ + 10 +10571.941083 + 20 +9811.520081 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DA4 + 8 +HOLZ + 10 +10576.675817 + 20 +9813.283731 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DA5 + 8 +HOLZ + 10 +10581.429217 + 20 +9814.960316 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DA6 + 8 +HOLZ + 10 +10586.270075 + 20 +9816.55951 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DA7 + 8 +HOLZ + 10 +10591.351524 + 20 +9818.090987 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DA8 + 8 +HOLZ + 10 +10596.847785 + 20 +9819.564421 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DA9 + 8 +HOLZ + 10 +10602.933079 + 20 +9820.989484 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DAA + 8 +HOLZ + 10 +10609.781627 + 20 +9822.375851 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DAB + 8 +HOLZ + 10 +10617.56765 + 20 +9823.733195 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DAC + 8 +HOLZ + 10 +10626.465368 + 20 +9825.071189 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DAD + 8 +HOLZ + 10 +10636.649003 + 20 +9826.399507 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DAE + 8 +HOLZ + 10 +10507.094912 + 20 +9783.237169 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +DAF + 8 +HOLZ + 10 +10544.616041 + 20 +9800.219096 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +DB0 + 8 +HOLZ + 10 +10580.721264 + 20 +9815.785816 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +DB1 + 8 +HOLZ + 10 +10607.623226 + 20 +9822.861628 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +DB2 + 8 +HOLZ + 10 +10636.649003 + 20 +9826.399507 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +DB3 + 8 +HOLZ + 0 +POLYLINE + 5 +DB4 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +DB5 + 8 +HOLZ + 10 +10480.90086 + 20 +9803.756974 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +DB6 + 8 +HOLZ + 10 +10480.90086 + 20 +9803.756974 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DB7 + 8 +HOLZ + 10 +10493.990947 + 20 +9812.10005 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DB8 + 8 +HOLZ + 10 +10507.570513 + 20 +9819.290546 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DB9 + 8 +HOLZ + 10 +10521.332597 + 20 +9825.635266 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DBA + 8 +HOLZ + 10 +10534.970238 + 20 +9831.441011 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DBB + 8 +HOLZ + 10 +10548.176477 + 20 +9837.014583 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DBC + 8 +HOLZ + 10 +10560.644352 + 20 +9842.662783 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DBD + 8 +HOLZ + 10 +10572.066904 + 20 +9848.692413 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DBE + 8 +HOLZ + 10 +10582.13717 + 20 +9855.410276 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DBF + 8 +HOLZ + 10 +10514.882267 + 20 +9827.814658 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +DC0 + 8 +HOLZ + 10 +10557.359025 + 20 +9836.305622 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +DC1 + 8 +HOLZ + 10 +10582.13717 + 20 +9855.410276 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +DC2 + 8 +HOLZ + 0 +POLYLINE + 5 +DC3 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +DC4 + 8 +HOLZ + 10 +7247.888607 + 20 +7499.287951 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +DC5 + 8 +HOLZ + 10 +7247.888607 + 20 +7499.287951 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DC6 + 8 +HOLZ + 10 +7248.565208 + 20 +7513.656964 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DC7 + 8 +HOLZ + 10 +7249.407735 + 20 +7524.731313 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DC8 + 8 +HOLZ + 10 +7250.759099 + 20 +7533.284913 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DC9 + 8 +HOLZ + 10 +7252.96221 + 20 +7540.09168 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DCA + 8 +HOLZ + 10 +7256.35998 + 20 +7545.925528 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DCB + 8 +HOLZ + 10 +7261.29532 + 20 +7551.560374 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DCC + 8 +HOLZ + 10 +7268.111141 + 20 +7557.770131 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DCD + 8 +HOLZ + 10 +7277.150354 + 20 +7565.328716 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DCE + 8 +HOLZ + 10 +7249.776453 + 20 +7542.686129 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +DCF + 8 +HOLZ + 10 +7277.150354 + 20 +7565.328716 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +DD0 + 8 +HOLZ + 0 +POLYLINE + 5 +DD1 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +DD2 + 8 +HOLZ + 10 +7201.636156 + 20 +7498.34448 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +DD3 + 8 +HOLZ + 10 +7201.636156 + 20 +7498.34448 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DD4 + 8 +HOLZ + 10 +7204.310775 + 20 +7511.971844 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DD5 + 8 +HOLZ + 10 +7207.369788 + 20 +7523.9574 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DD6 + 8 +HOLZ + 10 +7210.799365 + 20 +7534.472514 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DD7 + 8 +HOLZ + 10 +7214.585681 + 20 +7543.688554 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DD8 + 8 +HOLZ + 10 +7218.714908 + 20 +7551.776889 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DD9 + 8 +HOLZ + 10 +7223.173219 + 20 +7558.908886 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DDA + 8 +HOLZ + 10 +7227.946787 + 20 +7565.255912 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DDB + 8 +HOLZ + 10 +7233.021785 + 20 +7570.989335 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DDC + 8 +HOLZ + 10 +7238.37701 + 20 +7576.262096 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DDD + 8 +HOLZ + 10 +7243.961765 + 20 +7581.153429 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DDE + 8 +HOLZ + 10 +7249.717976 + 20 +7585.724139 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DDF + 8 +HOLZ + 10 +7255.587568 + 20 +7590.035034 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DE0 + 8 +HOLZ + 10 +7261.512469 + 20 +7594.14692 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DE1 + 8 +HOLZ + 10 +7267.434605 + 20 +7598.120604 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DE2 + 8 +HOLZ + 10 +7273.295902 + 20 +7602.016892 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DE3 + 8 +HOLZ + 10 +7279.038287 + 20 +7605.896591 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DE4 + 8 +HOLZ + 10 +7208.243661 + 20 +7537.025523 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +DE5 + 8 +HOLZ + 10 +7229.954024 + 20 +7575.706511 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +DE6 + 8 +HOLZ + 10 +7263.93543 + 20 +7595.518795 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +DE7 + 8 +HOLZ + 10 +7279.038287 + 20 +7605.896591 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +DE8 + 8 +HOLZ + 0 +POLYLINE + 5 +DE9 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +DEA + 8 +HOLZ + 10 +7159.159397 + 20 +7495.514177 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +DEB + 8 +HOLZ + 10 +7159.159397 + 20 +7495.514177 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DEC + 8 +HOLZ + 10 +7163.800064 + 20 +7517.918869 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DED + 8 +HOLZ + 10 +7168.497885 + 20 +7535.977657 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DEE + 8 +HOLZ + 10 +7173.221519 + 20 +7550.253473 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DEF + 8 +HOLZ + 10 +7177.939624 + 20 +7561.309248 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DF0 + 8 +HOLZ + 10 +7182.620858 + 20 +7569.707915 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DF1 + 8 +HOLZ + 10 +7187.23388 + 20 +7576.012404 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DF2 + 8 +HOLZ + 10 +7191.747346 + 20 +7580.785646 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DF3 + 8 +HOLZ + 10 +7196.129916 + 20 +7584.590574 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DF4 + 8 +HOLZ + 10 +7200.367761 + 20 +7587.909962 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DF5 + 8 +HOLZ + 10 +7204.517111 + 20 +7590.905966 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DF6 + 8 +HOLZ + 10 +7208.651712 + 20 +7593.660582 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DF7 + 8 +HOLZ + 10 +7212.845308 + 20 +7596.255809 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DF8 + 8 +HOLZ + 10 +7217.171643 + 20 +7598.773645 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DF9 + 8 +HOLZ + 10 +7221.704461 + 20 +7601.296088 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DFA + 8 +HOLZ + 10 +7226.517508 + 20 +7603.905137 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DFB + 8 +HOLZ + 10 +7231.684528 + 20 +7606.682789 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DFC + 8 +HOLZ + 10 +7237.250688 + 20 +7609.693999 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DFD + 8 +HOLZ + 10 +7243.146855 + 20 +7612.93554 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DFE + 8 +HOLZ + 10 +7249.275317 + 20 +7616.387145 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DFF + 8 +HOLZ + 10 +7255.538363 + 20 +7620.028542 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E00 + 8 +HOLZ + 10 +7261.838282 + 20 +7623.839463 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E01 + 8 +HOLZ + 10 +7268.077363 + 20 +7627.799638 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E02 + 8 +HOLZ + 10 +7274.157895 + 20 +7631.888797 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E03 + 8 +HOLZ + 10 +7279.982167 + 20 +7636.086671 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E04 + 8 +HOLZ + 10 +7171.430441 + 20 +7561.554942 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +E05 + 8 +HOLZ + 10 +7197.860463 + 20 +7588.914665 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +E06 + 8 +HOLZ + 10 +7227.122211 + 20 +7604.009704 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +E07 + 8 +HOLZ + 10 +7264.87931 + 20 +7624.765404 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +E08 + 8 +HOLZ + 10 +7279.982167 + 20 +7636.086671 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +E09 + 8 +HOLZ + 0 +POLYLINE + 5 +E0A + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +E0B + 8 +HOLZ + 10 +7113.850826 + 20 +7497.401064 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +E0C + 8 +HOLZ + 10 +7113.850826 + 20 +7497.401064 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E0D + 8 +HOLZ + 10 +7122.376448 + 20 +7530.001165 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E0E + 8 +HOLZ + 10 +7130.287227 + 20 +7555.568774 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E0F + 8 +HOLZ + 10 +7137.632018 + 20 +7575.07589 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E10 + 8 +HOLZ + 10 +7144.459677 + 20 +7589.494515 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E11 + 8 +HOLZ + 10 +7150.819059 + 20 +7599.796648 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E12 + 8 +HOLZ + 10 +7156.759018 + 20 +7606.95429 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E13 + 8 +HOLZ + 10 +7162.328411 + 20 +7611.939441 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E14 + 8 +HOLZ + 10 +7167.576092 + 20 +7615.724101 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E15 + 8 +HOLZ + 10 +7172.55783 + 20 +7619.123646 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E16 + 8 +HOLZ + 10 +7177.357049 + 20 +7622.326948 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E17 + 8 +HOLZ + 10 +7182.064087 + 20 +7625.366253 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E18 + 8 +HOLZ + 10 +7186.769279 + 20 +7628.273808 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E19 + 8 +HOLZ + 10 +7191.562965 + 20 +7631.08186 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E1A + 8 +HOLZ + 10 +7196.53548 + 20 +7633.822654 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E1B + 8 +HOLZ + 10 +7201.777163 + 20 +7636.528439 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E1C + 8 +HOLZ + 10 +7207.378351 + 20 +7639.231459 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E1D + 8 +HOLZ + 10 +7213.448278 + 20 +7641.9893 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E1E + 8 +HOLZ + 10 +7220.171765 + 20 +7644.960888 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E1F + 8 +HOLZ + 10 +7227.752532 + 20 +7648.330492 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E20 + 8 +HOLZ + 10 +7236.394297 + 20 +7652.282375 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E21 + 8 +HOLZ + 10 +7246.300778 + 20 +7657.000803 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E22 + 8 +HOLZ + 10 +7257.675694 + 20 +7662.670042 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E23 + 8 +HOLZ + 10 +7270.722764 + 20 +7669.474358 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E24 + 8 +HOLZ + 10 +7285.645706 + 20 +7677.598016 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E25 + 8 +HOLZ + 10 +7137.449035 + 20 +7594.575325 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +E26 + 8 +HOLZ + 10 +7170.486562 + 20 +7618.161328 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +E27 + 8 +HOLZ + 10 +7202.580035 + 20 +7638.916974 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +E28 + 8 +HOLZ + 10 +7243.168948 + 20 +7654.012013 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +E29 + 8 +HOLZ + 10 +7285.645706 + 20 +7677.598016 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +E2A + 8 +HOLZ + 0 +POLYLINE + 5 +E2B + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +E2C + 8 +HOLZ + 10 +7081.757265 + 20 +7554.950866 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +E2D + 8 +HOLZ + 10 +7081.757265 + 20 +7554.950866 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E2E + 8 +HOLZ + 10 +7096.185814 + 20 +7576.403985 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E2F + 8 +HOLZ + 10 +7107.895961 + 20 +7593.727712 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E30 + 8 +HOLZ + 10 +7117.310817 + 20 +7607.480373 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E31 + 8 +HOLZ + 10 +7124.853487 + 20 +7618.220291 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E32 + 8 +HOLZ + 10 +7130.947082 + 20 +7626.505792 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E33 + 8 +HOLZ + 10 +7136.014708 + 20 +7632.895201 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E34 + 8 +HOLZ + 10 +7140.479473 + 20 +7637.946841 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E35 + 8 +HOLZ + 10 +7144.764486 + 20 +7642.219039 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E36 + 8 +HOLZ + 10 +7149.217574 + 20 +7646.177371 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E37 + 8 +HOLZ + 10 +7153.885441 + 20 +7649.916428 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E38 + 8 +HOLZ + 10 +7158.739512 + 20 +7653.438051 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E39 + 8 +HOLZ + 10 +7163.751211 + 20 +7656.744083 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E3A + 8 +HOLZ + 10 +7168.891962 + 20 +7659.836368 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E3B + 8 +HOLZ + 10 +7174.133188 + 20 +7662.716746 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E3C + 8 +HOLZ + 10 +7179.446315 + 20 +7665.387061 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E3D + 8 +HOLZ + 10 +7184.802766 + 20 +7667.849156 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E3E + 8 +HOLZ + 10 +7190.181339 + 20 +7670.115928 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E3F + 8 +HOLZ + 10 +7195.590331 + 20 +7672.2445 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E40 + 8 +HOLZ + 10 +7201.045413 + 20 +7674.303051 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E41 + 8 +HOLZ + 10 +7206.562257 + 20 +7676.359759 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E42 + 8 +HOLZ + 10 +7212.156532 + 20 +7678.482802 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E43 + 8 +HOLZ + 10 +7217.843911 + 20 +7680.740358 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E44 + 8 +HOLZ + 10 +7223.640063 + 20 +7683.200607 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E45 + 8 +HOLZ + 10 +7229.560661 + 20 +7685.931726 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E46 + 8 +HOLZ + 10 +7235.616765 + 20 +7688.976096 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E47 + 8 +HOLZ + 10 +7241.801002 + 20 +7692.272911 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E48 + 8 +HOLZ + 10 +7248.101388 + 20 +7695.735565 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E49 + 8 +HOLZ + 10 +7254.50594 + 20 +7699.277456 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E4A + 8 +HOLZ + 10 +7261.002673 + 20 +7702.811977 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E4B + 8 +HOLZ + 10 +7267.579606 + 20 +7706.252526 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E4C + 8 +HOLZ + 10 +7274.224754 + 20 +7709.512497 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E4D + 8 +HOLZ + 10 +7280.926134 + 20 +7712.505286 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E4E + 8 +HOLZ + 10 +7124.234024 + 20 +7618.161328 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +E4F + 8 +HOLZ + 10 +7142.168694 + 20 +7644.577634 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +E50 + 8 +HOLZ + 10 +7184.645452 + 20 +7670.050524 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +E51 + 8 +HOLZ + 10 +7228.066091 + 20 +7682.315206 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +E52 + 8 +HOLZ + 10 +7262.991464 + 20 +7704.957739 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +E53 + 8 +HOLZ + 10 +7280.926134 + 20 +7712.505286 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +E54 + 8 +HOLZ + 0 +POLYLINE + 5 +E55 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +E56 + 8 +HOLZ + 10 +7080.813386 + 20 +7641.747331 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +E57 + 8 +HOLZ + 10 +7080.813386 + 20 +7641.747331 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E58 + 8 +HOLZ + 10 +7097.378513 + 20 +7651.155614 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E59 + 8 +HOLZ + 10 +7111.213259 + 20 +7658.992115 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E5A + 8 +HOLZ + 10 +7122.684499 + 20 +7665.453997 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E5B + 8 +HOLZ + 10 +7132.159113 + 20 +7670.738425 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E5C + 8 +HOLZ + 10 +7140.003977 + 20 +7675.04256 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E5D + 8 +HOLZ + 10 +7146.58597 + 20 +7678.563569 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E5E + 8 +HOLZ + 10 +7152.271968 + 20 +7681.498613 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E5F + 8 +HOLZ + 10 +7157.42885 + 20 +7684.044857 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E60 + 8 +HOLZ + 10 +7162.370489 + 20 +7686.376892 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E61 + 8 +HOLZ + 10 +7167.198746 + 20 +7688.57902 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E62 + 8 +HOLZ + 10 +7171.962475 + 20 +7690.712969 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E63 + 8 +HOLZ + 10 +7176.710535 + 20 +7692.840468 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E64 + 8 +HOLZ + 10 +7181.491779 + 20 +7695.023248 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E65 + 8 +HOLZ + 10 +7186.355065 + 20 +7697.323036 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E66 + 8 +HOLZ + 10 +7191.349248 + 20 +7699.801561 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E67 + 8 +HOLZ + 10 +7196.523184 + 20 +7702.520553 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E68 + 8 +HOLZ + 10 +7201.904529 + 20 +7705.52055 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E69 + 8 +HOLZ + 10 +7207.436128 + 20 +7708.757329 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E6A + 8 +HOLZ + 10 +7213.039629 + 20 +7712.165475 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E6B + 8 +HOLZ + 10 +7218.636677 + 20 +7715.679573 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E6C + 8 +HOLZ + 10 +7224.148917 + 20 +7719.234211 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E6D + 8 +HOLZ + 10 +7229.497997 + 20 +7722.763972 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E6E + 8 +HOLZ + 10 +7234.605561 + 20 +7726.203444 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E6F + 8 +HOLZ + 10 +7239.393255 + 20 +7729.487212 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E70 + 8 +HOLZ + 10 +7128.953683 + 20 +7669.107053 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +E71 + 8 +HOLZ + 10 +7159.159397 + 20 +7686.08898 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +E72 + 8 +HOLZ + 10 +7194.084684 + 20 +7699.297133 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +E73 + 8 +HOLZ + 10 +7227.122211 + 20 +7720.996249 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +E74 + 8 +HOLZ + 10 +7239.393255 + 20 +7729.487212 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +E75 + 8 +HOLZ + 0 +POLYLINE + 5 +E76 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +E77 + 8 +HOLZ + 10 +7087.420891 + 20 +7674.767713 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +E78 + 8 +HOLZ + 10 +7087.420891 + 20 +7674.767713 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E79 + 8 +HOLZ + 10 +7094.673635 + 20 +7686.136888 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E7A + 8 +HOLZ + 10 +7102.789194 + 20 +7695.140095 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E7B + 8 +HOLZ + 10 +7111.479964 + 20 +7702.33013 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E7C + 8 +HOLZ + 10 +7120.458342 + 20 +7708.259791 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E7D + 8 +HOLZ + 10 +7129.436724 + 20 +7713.481874 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E7E + 8 +HOLZ + 10 +7138.127506 + 20 +7718.549177 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E7F + 8 +HOLZ + 10 +7146.243086 + 20 +7724.014496 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E80 + 8 +HOLZ + 10 +7153.495858 + 20 +7730.430629 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E81 + 8 +HOLZ + 10 +7105.355474 + 20 +7708.731512 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +E82 + 8 +HOLZ + 10 +7135.561188 + 20 +7711.561815 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +E83 + 8 +HOLZ + 10 +7153.495858 + 20 +7730.430629 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +E84 + 8 +HOLZ + 0 +POLYLINE + 5 +E85 + 8 +SCHNITTKANTEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +25D8 + 8 +SCHNITTKANTEN + 10 +3705.0 + 20 +3790.0 + 30 +0.0 + 0 +VERTEX + 5 +25D9 + 8 +SCHNITTKANTEN + 10 +17440.0 + 20 +3790.0 + 30 +0.0 + 0 +SEQEND + 5 +25DA + 8 +SCHNITTKANTEN + 0 +INSERT + 5 +E89 + 8 +SCHRAFFUR + 2 +*X3 + 10 +0.0 + 20 +-750.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI33,I +1040 +1200.0 +1040 +0.0 +1002 +} + 0 +LINE + 5 +E8A + 8 +0 + 62 + 0 + 10 +9248.630945 + 20 +3790.0 + 30 +0.0 + 11 +9365.0 + 21 +3906.369055 + 31 +0.0 + 0 +LINE + 5 +E8B + 8 +0 + 62 + 0 + 10 +9071.854249 + 20 +3790.0 + 30 +0.0 + 11 +9365.0 + 21 +4083.145751 + 31 +0.0 + 0 +LINE + 5 +E8C + 8 +0 + 62 + 0 + 10 +9000.0 + 20 +3894.922446 + 30 +0.0 + 11 +9365.0 + 21 +4259.922446 + 31 +0.0 + 0 +LINE + 5 +E8D + 8 +0 + 62 + 0 + 10 +9000.0 + 20 +4071.699141 + 30 +0.0 + 11 +9268.300859 + 21 +4340.0 + 31 +0.0 + 0 +LINE + 5 +E8E + 8 +0 + 62 + 0 + 10 +9000.0 + 20 +4248.475836 + 30 +0.0 + 11 +9091.524164 + 21 +4340.0 + 31 +0.0 + 0 +LINE + 5 +E8F + 8 +0 + 62 + 0 + 10 +4475.660172 + 20 +3790.0 + 30 +0.0 + 11 +4490.0 + 21 +3804.339828 + 31 +0.0 + 0 +LINE + 5 +E90 + 8 +0 + 62 + 0 + 10 +4298.883476 + 20 +3790.0 + 30 +0.0 + 11 +4490.0 + 21 +3981.116524 + 31 +0.0 + 0 +LINE + 5 +E91 + 8 +0 + 62 + 0 + 10 +4125.0 + 20 +3792.893219 + 30 +0.0 + 11 +4490.0 + 21 +4157.893219 + 31 +0.0 + 0 +LINE + 5 +E92 + 8 +0 + 62 + 0 + 10 +4125.0 + 20 +3969.669914 + 30 +0.0 + 11 +4490.0 + 21 +4334.669914 + 31 +0.0 + 0 +LINE + 5 +E93 + 8 +0 + 62 + 0 + 10 +4125.0 + 20 +4146.446609 + 30 +0.0 + 11 +4313.553391 + 21 +4335.0 + 31 +0.0 + 0 +LINE + 5 +E94 + 8 +0 + 62 + 0 + 10 +4125.0 + 20 +4323.223305 + 30 +0.0 + 11 +4136.776695 + 21 +4335.0 + 31 +0.0 + 0 +LINE + 5 +E95 + 8 +0 + 62 + 0 + 10 +4326.776695 + 20 +4525.0 + 30 +0.0 + 11 +4490.0 + 21 +4688.223305 + 31 +0.0 + 0 +LINE + 5 +E96 + 8 +0 + 62 + 0 + 10 +4150.0 + 20 +4525.0 + 30 +0.0 + 11 +4490.0 + 21 +4865.0 + 31 +0.0 + 0 +LINE + 5 +E97 + 8 +0 + 62 + 0 + 10 +4125.0 + 20 +4676.776695 + 30 +0.0 + 11 +4490.0 + 21 +5041.776695 + 31 +0.0 + 0 +LINE + 5 +E98 + 8 +0 + 62 + 0 + 10 +4125.0 + 20 +4853.553391 + 30 +0.0 + 11 +4490.0 + 21 +5218.553391 + 31 +0.0 + 0 +LINE + 5 +E99 + 8 +0 + 62 + 0 + 10 +4125.0 + 20 +5030.330086 + 30 +0.0 + 11 +4490.0 + 21 +5395.330086 + 31 +0.0 + 0 +LINE + 5 +E9A + 8 +0 + 62 + 0 + 10 +4125.0 + 20 +5207.106781 + 30 +0.0 + 11 +4490.0 + 21 +5572.106781 + 31 +0.0 + 0 +LINE + 5 +E9B + 8 +0 + 62 + 0 + 10 +4125.0 + 20 +5383.883476 + 30 +0.0 + 11 +4481.116524 + 21 +5740.0 + 31 +0.0 + 0 +LINE + 5 +E9C + 8 +0 + 62 + 0 + 10 +4125.0 + 20 +5560.660172 + 30 +0.0 + 11 +4304.339828 + 21 +5740.0 + 31 +0.0 + 0 +LINE + 5 +E9D + 8 +0 + 62 + 0 + 10 +4125.0 + 20 +5737.436867 + 30 +0.0 + 11 +4127.563133 + 21 +5740.0 + 31 +0.0 + 0 +LINE + 5 +E9E + 8 +0 + 62 + 0 + 10 +11750.0 + 20 +4170.048712 + 30 +0.0 + 11 +11919.951288 + 21 +4340.0 + 31 +0.0 + 0 +LINE + 5 +E9F + 8 +0 + 62 + 0 + 10 +11750.0 + 20 +3993.272016 + 30 +0.0 + 11 +12096.727984 + 21 +4340.0 + 31 +0.0 + 0 +LINE + 5 +EA0 + 8 +0 + 62 + 0 + 10 +11750.0 + 20 +3816.495321 + 30 +0.0 + 11 +12115.0 + 21 +4181.495321 + 31 +0.0 + 0 +LINE + 5 +EA1 + 8 +0 + 62 + 0 + 10 +11900.281374 + 20 +3790.0 + 30 +0.0 + 11 +12115.0 + 21 +4004.718626 + 31 +0.0 + 0 +LINE + 5 +EA2 + 8 +0 + 62 + 0 + 10 +12077.05807 + 20 +3790.0 + 30 +0.0 + 11 +12115.0 + 21 +3827.94193 + 31 +0.0 + 0 +LINE + 5 +EA3 + 8 +0 + 62 + 0 + 10 +16625.0 + 20 +5686.291501 + 30 +0.0 + 11 +16678.708499 + 21 +5740.0 + 31 +0.0 + 0 +LINE + 5 +EA4 + 8 +0 + 62 + 0 + 10 +16625.0 + 20 +5509.514806 + 30 +0.0 + 11 +16855.485194 + 21 +5740.0 + 31 +0.0 + 0 +LINE + 5 +EA5 + 8 +0 + 62 + 0 + 10 +16625.0 + 20 +5332.73811 + 30 +0.0 + 11 +16990.0 + 21 +5697.73811 + 31 +0.0 + 0 +LINE + 5 +EA6 + 8 +0 + 62 + 0 + 10 +16625.0 + 20 +5155.961415 + 30 +0.0 + 11 +16990.0 + 21 +5520.961415 + 31 +0.0 + 0 +LINE + 5 +EA7 + 8 +0 + 62 + 0 + 10 +16625.0 + 20 +4979.18472 + 30 +0.0 + 11 +16990.0 + 21 +5344.18472 + 31 +0.0 + 0 +LINE + 5 +EA8 + 8 +0 + 62 + 0 + 10 +16625.0 + 20 +4802.408025 + 30 +0.0 + 11 +16990.0 + 21 +5167.408025 + 31 +0.0 + 0 +LINE + 5 +EA9 + 8 +0 + 62 + 0 + 10 +16625.0 + 20 +4625.631329 + 30 +0.0 + 11 +16990.0 + 21 +4990.631329 + 31 +0.0 + 0 +LINE + 5 +EAA + 8 +0 + 62 + 0 + 10 +16701.145366 + 20 +4525.0 + 30 +0.0 + 11 +16990.0 + 21 +4813.854634 + 31 +0.0 + 0 +LINE + 5 +EAB + 8 +0 + 62 + 0 + 10 +16625.0 + 20 +4272.077939 + 30 +0.0 + 11 +16687.922061 + 21 +4335.0 + 31 +0.0 + 0 +LINE + 5 +EAC + 8 +0 + 62 + 0 + 10 +16877.922061 + 20 +4525.0 + 30 +0.0 + 11 +16990.0 + 21 +4637.077939 + 31 +0.0 + 0 +LINE + 5 +EAD + 8 +0 + 62 + 0 + 10 +16625.0 + 20 +4095.301243 + 30 +0.0 + 11 +16864.698757 + 21 +4335.0 + 31 +0.0 + 0 +LINE + 5 +EAE + 8 +0 + 62 + 0 + 10 +16625.0 + 20 +3918.524548 + 30 +0.0 + 11 +16990.0 + 21 +4283.524548 + 31 +0.0 + 0 +LINE + 5 +EAF + 8 +0 + 62 + 0 + 10 +16673.252147 + 20 +3790.0 + 30 +0.0 + 11 +16990.0 + 21 +4106.747853 + 31 +0.0 + 0 +LINE + 5 +EB0 + 8 +0 + 62 + 0 + 10 +16850.028843 + 20 +3790.0 + 30 +0.0 + 11 +16990.0 + 21 +3929.971157 + 31 +0.0 + 0 +LINE + 5 +EB1 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4196.89111 + 30 +0.0 + 11 +4075.0 + 21 +4196.89111 + 31 +0.0 + 0 +LINE + 5 +EB2 + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +4196.89111 + 30 +0.0 + 11 +17050.0 + 21 +4196.89111 + 31 +0.0 + 0 +LINE + 5 +EB3 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4218.541745 + 30 +0.0 + 11 +4112.5 + 21 +4218.541745 + 31 +0.0 + 0 +LINE + 5 +EB4 + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +4218.541745 + 30 +0.0 + 11 +17012.5 + 21 +4218.541745 + 31 +0.0 + 0 +LINE + 5 +EB5 + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +4218.541745 + 30 +0.0 + 11 +17070.0 + 21 +4218.541745 + 31 +0.0 + 0 +LINE + 5 +EB6 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4240.19238 + 30 +0.0 + 11 +4075.0 + 21 +4240.19238 + 31 +0.0 + 0 +LINE + 5 +EB7 + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +4240.19238 + 30 +0.0 + 11 +17050.0 + 21 +4240.19238 + 31 +0.0 + 0 +LINE + 5 +EB8 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4261.843015 + 30 +0.0 + 11 +4112.5 + 21 +4261.843015 + 31 +0.0 + 0 +LINE + 5 +EB9 + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +4261.843015 + 30 +0.0 + 11 +17012.5 + 21 +4261.843015 + 31 +0.0 + 0 +LINE + 5 +EBA + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +4261.843015 + 30 +0.0 + 11 +17070.0 + 21 +4261.843015 + 31 +0.0 + 0 +LINE + 5 +EBB + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4283.49365 + 30 +0.0 + 11 +4075.0 + 21 +4283.49365 + 31 +0.0 + 0 +LINE + 5 +EBC + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +4283.49365 + 30 +0.0 + 11 +17050.0 + 21 +4283.49365 + 31 +0.0 + 0 +LINE + 5 +EBD + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4305.144285 + 30 +0.0 + 11 +4112.5 + 21 +4305.144285 + 31 +0.0 + 0 +LINE + 5 +EBE + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +4305.144285 + 30 +0.0 + 11 +17012.5 + 21 +4305.144285 + 31 +0.0 + 0 +LINE + 5 +EBF + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +4305.144285 + 30 +0.0 + 11 +17070.0 + 21 +4305.144285 + 31 +0.0 + 0 +LINE + 5 +EC0 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4326.79492 + 30 +0.0 + 11 +4075.0 + 21 +4326.79492 + 31 +0.0 + 0 +LINE + 5 +EC1 + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +4326.79492 + 30 +0.0 + 11 +17050.0 + 21 +4326.79492 + 31 +0.0 + 0 +LINE + 5 +EC2 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4348.445555 + 30 +0.0 + 11 +4112.5 + 21 +4348.445555 + 31 +0.0 + 0 +LINE + 5 +EC3 + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +4348.445555 + 30 +0.0 + 11 +17012.5 + 21 +4348.445555 + 31 +0.0 + 0 +LINE + 5 +EC4 + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +4348.445555 + 30 +0.0 + 11 +17070.0 + 21 +4348.445555 + 31 +0.0 + 0 +LINE + 5 +EC5 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4370.09619 + 30 +0.0 + 11 +4075.0 + 21 +4370.09619 + 31 +0.0 + 0 +LINE + 5 +EC6 + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +4370.09619 + 30 +0.0 + 11 +17050.0 + 21 +4370.09619 + 31 +0.0 + 0 +LINE + 5 +EC7 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4391.746825 + 30 +0.0 + 11 +4112.5 + 21 +4391.746825 + 31 +0.0 + 0 +LINE + 5 +EC8 + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +4391.746825 + 30 +0.0 + 11 +17012.5 + 21 +4391.746825 + 31 +0.0 + 0 +LINE + 5 +EC9 + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +4391.746825 + 30 +0.0 + 11 +17070.0 + 21 +4391.746825 + 31 +0.0 + 0 +LINE + 5 +ECA + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4413.39746 + 30 +0.0 + 11 +4075.0 + 21 +4413.39746 + 31 +0.0 + 0 +LINE + 5 +ECB + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +4413.39746 + 30 +0.0 + 11 +17050.0 + 21 +4413.39746 + 31 +0.0 + 0 +LINE + 5 +ECC + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4435.048095 + 30 +0.0 + 11 +4112.5 + 21 +4435.048095 + 31 +0.0 + 0 +LINE + 5 +ECD + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +4435.048095 + 30 +0.0 + 11 +17012.5 + 21 +4435.048095 + 31 +0.0 + 0 +LINE + 5 +ECE + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +4435.048095 + 30 +0.0 + 11 +17070.0 + 21 +4435.048095 + 31 +0.0 + 0 +LINE + 5 +ECF + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4456.69873 + 30 +0.0 + 11 +4075.0 + 21 +4456.69873 + 31 +0.0 + 0 +LINE + 5 +ED0 + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +4456.69873 + 30 +0.0 + 11 +17050.0 + 21 +4456.69873 + 31 +0.0 + 0 +LINE + 5 +ED1 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4478.349365 + 30 +0.0 + 11 +4112.5 + 21 +4478.349365 + 31 +0.0 + 0 +LINE + 5 +ED2 + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +4478.349365 + 30 +0.0 + 11 +17012.5 + 21 +4478.349365 + 31 +0.0 + 0 +LINE + 5 +ED3 + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +4478.349365 + 30 +0.0 + 11 +17070.0 + 21 +4478.349365 + 31 +0.0 + 0 +LINE + 5 +ED4 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4500.0 + 30 +0.0 + 11 +4075.0 + 21 +4500.0 + 31 +0.0 + 0 +LINE + 5 +ED5 + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +4500.0 + 30 +0.0 + 11 +17050.0 + 21 +4500.0 + 31 +0.0 + 0 +LINE + 5 +ED6 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4521.650635 + 30 +0.0 + 11 +4112.5 + 21 +4521.650635 + 31 +0.0 + 0 +LINE + 5 +ED7 + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +4521.650635 + 30 +0.0 + 11 +17012.5 + 21 +4521.650635 + 31 +0.0 + 0 +LINE + 5 +ED8 + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +4521.650635 + 30 +0.0 + 11 +17070.0 + 21 +4521.650635 + 31 +0.0 + 0 +LINE + 5 +ED9 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4543.30127 + 30 +0.0 + 11 +4075.0 + 21 +4543.30127 + 31 +0.0 + 0 +LINE + 5 +EDA + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +4543.30127 + 30 +0.0 + 11 +17050.0 + 21 +4543.30127 + 31 +0.0 + 0 +LINE + 5 +EDB + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4564.951905 + 30 +0.0 + 11 +4112.5 + 21 +4564.951905 + 31 +0.0 + 0 +LINE + 5 +EDC + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +4564.951905 + 30 +0.0 + 11 +17012.5 + 21 +4564.951905 + 31 +0.0 + 0 +LINE + 5 +EDD + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +4564.951905 + 30 +0.0 + 11 +17070.0 + 21 +4564.951905 + 31 +0.0 + 0 +LINE + 5 +EDE + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4586.60254 + 30 +0.0 + 11 +4075.0 + 21 +4586.60254 + 31 +0.0 + 0 +LINE + 5 +EDF + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +4586.60254 + 30 +0.0 + 11 +17050.0 + 21 +4586.60254 + 31 +0.0 + 0 +LINE + 5 +EE0 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4608.253175 + 30 +0.0 + 11 +4112.5 + 21 +4608.253175 + 31 +0.0 + 0 +LINE + 5 +EE1 + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +4608.253175 + 30 +0.0 + 11 +17012.5 + 21 +4608.253175 + 31 +0.0 + 0 +LINE + 5 +EE2 + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +4608.253175 + 30 +0.0 + 11 +17070.0 + 21 +4608.253175 + 31 +0.0 + 0 +LINE + 5 +EE3 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4629.90381 + 30 +0.0 + 11 +4075.0 + 21 +4629.90381 + 31 +0.0 + 0 +LINE + 5 +EE4 + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +4629.90381 + 30 +0.0 + 11 +17050.0 + 21 +4629.90381 + 31 +0.0 + 0 +LINE + 5 +EE5 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4651.554445 + 30 +0.0 + 11 +4112.5 + 21 +4651.554445 + 31 +0.0 + 0 +LINE + 5 +EE6 + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +4651.554445 + 30 +0.0 + 11 +17012.5 + 21 +4651.554445 + 31 +0.0 + 0 +LINE + 5 +EE7 + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +4651.554445 + 30 +0.0 + 11 +17070.0 + 21 +4651.554445 + 31 +0.0 + 0 +LINE + 5 +EE8 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4673.20508 + 30 +0.0 + 11 +4075.0 + 21 +4673.20508 + 31 +0.0 + 0 +LINE + 5 +EE9 + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +4673.20508 + 30 +0.0 + 11 +17050.0 + 21 +4673.20508 + 31 +0.0 + 0 +LINE + 5 +EEA + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4694.855715 + 30 +0.0 + 11 +4112.5 + 21 +4694.855715 + 31 +0.0 + 0 +LINE + 5 +EEB + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +4694.855715 + 30 +0.0 + 11 +17012.5 + 21 +4694.855715 + 31 +0.0 + 0 +LINE + 5 +EEC + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +4694.855715 + 30 +0.0 + 11 +17070.0 + 21 +4694.855715 + 31 +0.0 + 0 +LINE + 5 +EED + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4716.50635 + 30 +0.0 + 11 +4075.0 + 21 +4716.50635 + 31 +0.0 + 0 +LINE + 5 +EEE + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +4716.50635 + 30 +0.0 + 11 +17050.0 + 21 +4716.50635 + 31 +0.0 + 0 +LINE + 5 +EEF + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4738.156985 + 30 +0.0 + 11 +4112.5 + 21 +4738.156985 + 31 +0.0 + 0 +LINE + 5 +EF0 + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +4738.156985 + 30 +0.0 + 11 +17012.5 + 21 +4738.156985 + 31 +0.0 + 0 +LINE + 5 +EF1 + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +4738.156985 + 30 +0.0 + 11 +17070.0 + 21 +4738.156985 + 31 +0.0 + 0 +LINE + 5 +EF2 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4759.80762 + 30 +0.0 + 11 +4075.0 + 21 +4759.80762 + 31 +0.0 + 0 +LINE + 5 +EF3 + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +4759.80762 + 30 +0.0 + 11 +17050.0 + 21 +4759.80762 + 31 +0.0 + 0 +LINE + 5 +EF4 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4781.458255 + 30 +0.0 + 11 +4112.5 + 21 +4781.458255 + 31 +0.0 + 0 +LINE + 5 +EF5 + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +4781.458255 + 30 +0.0 + 11 +17012.5 + 21 +4781.458255 + 31 +0.0 + 0 +LINE + 5 +EF6 + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +4781.458255 + 30 +0.0 + 11 +17070.0 + 21 +4781.458255 + 31 +0.0 + 0 +LINE + 5 +EF7 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4803.10889 + 30 +0.0 + 11 +4075.0 + 21 +4803.10889 + 31 +0.0 + 0 +LINE + 5 +EF8 + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +4803.10889 + 30 +0.0 + 11 +17050.0 + 21 +4803.10889 + 31 +0.0 + 0 +LINE + 5 +EF9 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4824.759525 + 30 +0.0 + 11 +4112.5 + 21 +4824.759525 + 31 +0.0 + 0 +LINE + 5 +EFA + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +4824.759525 + 30 +0.0 + 11 +17012.5 + 21 +4824.759525 + 31 +0.0 + 0 +LINE + 5 +EFB + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +4824.759525 + 30 +0.0 + 11 +17070.0 + 21 +4824.759525 + 31 +0.0 + 0 +LINE + 5 +EFC + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4846.41016 + 30 +0.0 + 11 +4075.0 + 21 +4846.41016 + 31 +0.0 + 0 +LINE + 5 +EFD + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +4846.41016 + 30 +0.0 + 11 +17050.0 + 21 +4846.41016 + 31 +0.0 + 0 +LINE + 5 +EFE + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4868.060795 + 30 +0.0 + 11 +4112.5 + 21 +4868.060795 + 31 +0.0 + 0 +LINE + 5 +EFF + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +4868.060795 + 30 +0.0 + 11 +17012.5 + 21 +4868.060795 + 31 +0.0 + 0 +LINE + 5 +F00 + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +4868.060795 + 30 +0.0 + 11 +17070.0 + 21 +4868.060795 + 31 +0.0 + 0 +LINE + 5 +F01 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4889.71143 + 30 +0.0 + 11 +4075.0 + 21 +4889.71143 + 31 +0.0 + 0 +LINE + 5 +F02 + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +4889.71143 + 30 +0.0 + 11 +17050.0 + 21 +4889.71143 + 31 +0.0 + 0 +LINE + 5 +F03 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4911.362065 + 30 +0.0 + 11 +4112.5 + 21 +4911.362065 + 31 +0.0 + 0 +LINE + 5 +F04 + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +4911.362065 + 30 +0.0 + 11 +17012.5 + 21 +4911.362065 + 31 +0.0 + 0 +LINE + 5 +F05 + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +4911.362065 + 30 +0.0 + 11 +17070.0 + 21 +4911.362065 + 31 +0.0 + 0 +LINE + 5 +F06 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4933.0127 + 30 +0.0 + 11 +4075.0 + 21 +4933.0127 + 31 +0.0 + 0 +LINE + 5 +F07 + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +4933.0127 + 30 +0.0 + 11 +17050.0 + 21 +4933.0127 + 31 +0.0 + 0 +LINE + 5 +F08 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4954.663335 + 30 +0.0 + 11 +4112.5 + 21 +4954.663335 + 31 +0.0 + 0 +LINE + 5 +F09 + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +4954.663335 + 30 +0.0 + 11 +17012.5 + 21 +4954.663335 + 31 +0.0 + 0 +LINE + 5 +F0A + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +4954.663335 + 30 +0.0 + 11 +17070.0 + 21 +4954.663335 + 31 +0.0 + 0 +LINE + 5 +F0B + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4976.31397 + 30 +0.0 + 11 +4075.0 + 21 +4976.31397 + 31 +0.0 + 0 +LINE + 5 +F0C + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +4976.31397 + 30 +0.0 + 11 +17050.0 + 21 +4976.31397 + 31 +0.0 + 0 +LINE + 5 +F0D + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4997.964605 + 30 +0.0 + 11 +4112.5 + 21 +4997.964605 + 31 +0.0 + 0 +LINE + 5 +F0E + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +4997.964605 + 30 +0.0 + 11 +17012.5 + 21 +4997.964605 + 31 +0.0 + 0 +LINE + 5 +F0F + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +4997.964605 + 30 +0.0 + 11 +17070.0 + 21 +4997.964605 + 31 +0.0 + 0 +LINE + 5 +F10 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +5019.61524 + 30 +0.0 + 11 +4075.0 + 21 +5019.61524 + 31 +0.0 + 0 +LINE + 5 +F11 + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +5019.61524 + 30 +0.0 + 11 +17050.0 + 21 +5019.61524 + 31 +0.0 + 0 +LINE + 5 +F12 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +5041.265875 + 30 +0.0 + 11 +4112.5 + 21 +5041.265875 + 31 +0.0 + 0 +LINE + 5 +F13 + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +5041.265875 + 30 +0.0 + 11 +17012.5 + 21 +5041.265875 + 31 +0.0 + 0 +LINE + 5 +F14 + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +5041.265875 + 30 +0.0 + 11 +17070.0 + 21 +5041.265875 + 31 +0.0 + 0 +LINE + 5 +F15 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +5062.91651 + 30 +0.0 + 11 +4075.0 + 21 +5062.91651 + 31 +0.0 + 0 +LINE + 5 +F16 + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +5062.91651 + 30 +0.0 + 11 +17050.0 + 21 +5062.91651 + 31 +0.0 + 0 +LINE + 5 +F17 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +5084.567145 + 30 +0.0 + 11 +4112.5 + 21 +5084.567145 + 31 +0.0 + 0 +LINE + 5 +F18 + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +5084.567145 + 30 +0.0 + 11 +17012.5 + 21 +5084.567145 + 31 +0.0 + 0 +LINE + 5 +F19 + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +5084.567145 + 30 +0.0 + 11 +17070.0 + 21 +5084.567145 + 31 +0.0 + 0 +LINE + 5 +F1A + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +5106.21778 + 30 +0.0 + 11 +4075.0 + 21 +5106.21778 + 31 +0.0 + 0 +LINE + 5 +F1B + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +5106.21778 + 30 +0.0 + 11 +17050.0 + 21 +5106.21778 + 31 +0.0 + 0 +LINE + 5 +F1C + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +5127.868415 + 30 +0.0 + 11 +4112.5 + 21 +5127.868415 + 31 +0.0 + 0 +LINE + 5 +F1D + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +5127.868415 + 30 +0.0 + 11 +17012.5 + 21 +5127.868415 + 31 +0.0 + 0 +LINE + 5 +F1E + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +5127.868415 + 30 +0.0 + 11 +17070.0 + 21 +5127.868415 + 31 +0.0 + 0 +LINE + 5 +F1F + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +5149.51905 + 30 +0.0 + 11 +4075.0 + 21 +5149.51905 + 31 +0.0 + 0 +LINE + 5 +F20 + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +5149.51905 + 30 +0.0 + 11 +17050.0 + 21 +5149.51905 + 31 +0.0 + 0 +LINE + 5 +F21 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +5171.169685 + 30 +0.0 + 11 +4112.5 + 21 +5171.169685 + 31 +0.0 + 0 +LINE + 5 +F22 + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +5171.169685 + 30 +0.0 + 11 +17012.5 + 21 +5171.169685 + 31 +0.0 + 0 +LINE + 5 +F23 + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +5171.169685 + 30 +0.0 + 11 +17070.0 + 21 +5171.169685 + 31 +0.0 + 0 +LINE + 5 +F24 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +5192.82032 + 30 +0.0 + 11 +4075.0 + 21 +5192.82032 + 31 +0.0 + 0 +LINE + 5 +F25 + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +5192.82032 + 30 +0.0 + 11 +17050.0 + 21 +5192.82032 + 31 +0.0 + 0 +LINE + 5 +F26 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +5214.470955 + 30 +0.0 + 11 +4112.5 + 21 +5214.470955 + 31 +0.0 + 0 +LINE + 5 +F27 + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +5214.470955 + 30 +0.0 + 11 +17012.5 + 21 +5214.470955 + 31 +0.0 + 0 +LINE + 5 +F28 + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +5214.470955 + 30 +0.0 + 11 +17070.0 + 21 +5214.470955 + 31 +0.0 + 0 +LINE + 5 +F29 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +5236.12159 + 30 +0.0 + 11 +4075.0 + 21 +5236.12159 + 31 +0.0 + 0 +LINE + 5 +F2A + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +5236.12159 + 30 +0.0 + 11 +17050.0 + 21 +5236.12159 + 31 +0.0 + 0 +LINE + 5 +F2B + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +5257.772225 + 30 +0.0 + 11 +4112.5 + 21 +5257.772225 + 31 +0.0 + 0 +LINE + 5 +F2C + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +5257.772225 + 30 +0.0 + 11 +17012.5 + 21 +5257.772225 + 31 +0.0 + 0 +LINE + 5 +F2D + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +5257.772225 + 30 +0.0 + 11 +17070.0 + 21 +5257.772225 + 31 +0.0 + 0 +LINE + 5 +F2E + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +5279.42286 + 30 +0.0 + 11 +4075.0 + 21 +5279.42286 + 31 +0.0 + 0 +LINE + 5 +F2F + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +5279.42286 + 30 +0.0 + 11 +17050.0 + 21 +5279.42286 + 31 +0.0 + 0 +LINE + 5 +F30 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +5301.073495 + 30 +0.0 + 11 +4112.5 + 21 +5301.073495 + 31 +0.0 + 0 +LINE + 5 +F31 + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +5301.073495 + 30 +0.0 + 11 +17012.5 + 21 +5301.073495 + 31 +0.0 + 0 +LINE + 5 +F32 + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +5301.073495 + 30 +0.0 + 11 +17070.0 + 21 +5301.073495 + 31 +0.0 + 0 +LINE + 5 +F33 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +5322.72413 + 30 +0.0 + 11 +4075.0 + 21 +5322.72413 + 31 +0.0 + 0 +LINE + 5 +F34 + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +5322.72413 + 30 +0.0 + 11 +17050.0 + 21 +5322.72413 + 31 +0.0 + 0 +LINE + 5 +F35 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +5344.374765 + 30 +0.0 + 11 +4112.5 + 21 +5344.374765 + 31 +0.0 + 0 +LINE + 5 +F36 + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +5344.374765 + 30 +0.0 + 11 +17012.5 + 21 +5344.374765 + 31 +0.0 + 0 +LINE + 5 +F37 + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +5344.374765 + 30 +0.0 + 11 +17070.0 + 21 +5344.374765 + 31 +0.0 + 0 +LINE + 5 +F38 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +5366.0254 + 30 +0.0 + 11 +4075.0 + 21 +5366.0254 + 31 +0.0 + 0 +LINE + 5 +F39 + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +5366.0254 + 30 +0.0 + 11 +17050.0 + 21 +5366.0254 + 31 +0.0 + 0 +LINE + 5 +F3A + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +5387.676035 + 30 +0.0 + 11 +4112.5 + 21 +5387.676035 + 31 +0.0 + 0 +LINE + 5 +F3B + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +5387.676035 + 30 +0.0 + 11 +17012.5 + 21 +5387.676035 + 31 +0.0 + 0 +LINE + 5 +F3C + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +5387.676035 + 30 +0.0 + 11 +17070.0 + 21 +5387.676035 + 31 +0.0 + 0 +LINE + 5 +F3D + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +5409.32667 + 30 +0.0 + 11 +4075.0 + 21 +5409.32667 + 31 +0.0 + 0 +LINE + 5 +F3E + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +5409.32667 + 30 +0.0 + 11 +17050.0 + 21 +5409.32667 + 31 +0.0 + 0 +LINE + 5 +F3F + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +5430.977305 + 30 +0.0 + 11 +4112.5 + 21 +5430.977305 + 31 +0.0 + 0 +LINE + 5 +F40 + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +5430.977305 + 30 +0.0 + 11 +17012.5 + 21 +5430.977305 + 31 +0.0 + 0 +LINE + 5 +F41 + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +5430.977305 + 30 +0.0 + 11 +17070.0 + 21 +5430.977305 + 31 +0.0 + 0 +LINE + 5 +F42 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +5452.62794 + 30 +0.0 + 11 +4075.0 + 21 +5452.62794 + 31 +0.0 + 0 +LINE + 5 +F43 + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +5452.62794 + 30 +0.0 + 11 +17050.0 + 21 +5452.62794 + 31 +0.0 + 0 +LINE + 5 +F44 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +5474.278575 + 30 +0.0 + 11 +4112.5 + 21 +5474.278575 + 31 +0.0 + 0 +LINE + 5 +F45 + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +5474.278575 + 30 +0.0 + 11 +17012.5 + 21 +5474.278575 + 31 +0.0 + 0 +LINE + 5 +F46 + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +5474.278575 + 30 +0.0 + 11 +17070.0 + 21 +5474.278575 + 31 +0.0 + 0 +LINE + 5 +F47 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +5495.92921 + 30 +0.0 + 11 +4075.0 + 21 +5495.92921 + 31 +0.0 + 0 +LINE + 5 +F48 + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +5495.92921 + 30 +0.0 + 11 +17050.0 + 21 +5495.92921 + 31 +0.0 + 0 +LINE + 5 +F49 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +5517.579845 + 30 +0.0 + 11 +4112.5 + 21 +5517.579845 + 31 +0.0 + 0 +LINE + 5 +F4A + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +5517.579845 + 30 +0.0 + 11 +17012.5 + 21 +5517.579845 + 31 +0.0 + 0 +LINE + 5 +F4B + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +5517.579845 + 30 +0.0 + 11 +17070.0 + 21 +5517.579845 + 31 +0.0 + 0 +LINE + 5 +F4C + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +5539.23048 + 30 +0.0 + 11 +4075.0 + 21 +5539.23048 + 31 +0.0 + 0 +LINE + 5 +F4D + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +5539.23048 + 30 +0.0 + 11 +17050.0 + 21 +5539.23048 + 31 +0.0 + 0 +LINE + 5 +F4E + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +5560.881115 + 30 +0.0 + 11 +4112.5 + 21 +5560.881115 + 31 +0.0 + 0 +LINE + 5 +F4F + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +5560.881115 + 30 +0.0 + 11 +17012.5 + 21 +5560.881115 + 31 +0.0 + 0 +LINE + 5 +F50 + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +5560.881115 + 30 +0.0 + 11 +17070.0 + 21 +5560.881115 + 31 +0.0 + 0 +LINE + 5 +F51 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +5582.53175 + 30 +0.0 + 11 +4075.0 + 21 +5582.53175 + 31 +0.0 + 0 +LINE + 5 +F52 + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +5582.53175 + 30 +0.0 + 11 +17050.0 + 21 +5582.53175 + 31 +0.0 + 0 +LINE + 5 +F53 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +5604.182385 + 30 +0.0 + 11 +4112.5 + 21 +5604.182385 + 31 +0.0 + 0 +LINE + 5 +F54 + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +5604.182385 + 30 +0.0 + 11 +17012.5 + 21 +5604.182385 + 31 +0.0 + 0 +LINE + 5 +F55 + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +5604.182385 + 30 +0.0 + 11 +17070.0 + 21 +5604.182385 + 31 +0.0 + 0 +LINE + 5 +F56 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +5625.83302 + 30 +0.0 + 11 +4075.0 + 21 +5625.83302 + 31 +0.0 + 0 +LINE + 5 +F57 + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +5625.83302 + 30 +0.0 + 11 +17050.0 + 21 +5625.83302 + 31 +0.0 + 0 +LINE + 5 +F58 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +5647.483655 + 30 +0.0 + 11 +4112.5 + 21 +5647.483655 + 31 +0.0 + 0 +LINE + 5 +F59 + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +5647.483655 + 30 +0.0 + 11 +17012.5 + 21 +5647.483655 + 31 +0.0 + 0 +LINE + 5 +F5A + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +5647.483655 + 30 +0.0 + 11 +17070.0 + 21 +5647.483655 + 31 +0.0 + 0 +LINE + 5 +F5B + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +5669.13429 + 30 +0.0 + 11 +4075.0 + 21 +5669.13429 + 31 +0.0 + 0 +LINE + 5 +F5C + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +5669.13429 + 30 +0.0 + 11 +17050.0 + 21 +5669.13429 + 31 +0.0 + 0 +LINE + 5 +F5D + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +5690.784925 + 30 +0.0 + 11 +4112.5 + 21 +5690.784925 + 31 +0.0 + 0 +LINE + 5 +F5E + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +5690.784925 + 30 +0.0 + 11 +17012.5 + 21 +5690.784925 + 31 +0.0 + 0 +LINE + 5 +F5F + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +5690.784925 + 30 +0.0 + 11 +17070.0 + 21 +5690.784925 + 31 +0.0 + 0 +LINE + 5 +F60 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +5712.43556 + 30 +0.0 + 11 +4075.0 + 21 +5712.43556 + 31 +0.0 + 0 +LINE + 5 +F61 + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +5712.43556 + 30 +0.0 + 11 +17050.0 + 21 +5712.43556 + 31 +0.0 + 0 +LINE + 5 +F62 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +5734.086195 + 30 +0.0 + 11 +4112.5 + 21 +5734.086195 + 31 +0.0 + 0 +LINE + 5 +F63 + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +5734.086195 + 30 +0.0 + 11 +17012.5 + 21 +5734.086195 + 31 +0.0 + 0 +LINE + 5 +F64 + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +5734.086195 + 30 +0.0 + 11 +17070.0 + 21 +5734.086195 + 31 +0.0 + 0 +LINE + 5 +F65 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4175.240475 + 30 +0.0 + 11 +4112.5 + 21 +4175.240475 + 31 +0.0 + 0 +LINE + 5 +F66 + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +4175.240475 + 30 +0.0 + 11 +17012.5 + 21 +4175.240475 + 31 +0.0 + 0 +LINE + 5 +F67 + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +4175.240475 + 30 +0.0 + 11 +17070.0 + 21 +4175.240475 + 31 +0.0 + 0 +LINE + 5 +F68 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4153.58984 + 30 +0.0 + 11 +4075.0 + 21 +4153.58984 + 31 +0.0 + 0 +LINE + 5 +F69 + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +4153.58984 + 30 +0.0 + 11 +17050.0 + 21 +4153.58984 + 31 +0.0 + 0 +LINE + 5 +F6A + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4131.939205 + 30 +0.0 + 11 +4112.5 + 21 +4131.939205 + 31 +0.0 + 0 +LINE + 5 +F6B + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +4131.939205 + 30 +0.0 + 11 +17012.5 + 21 +4131.939205 + 31 +0.0 + 0 +LINE + 5 +F6C + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +4131.939205 + 30 +0.0 + 11 +17070.0 + 21 +4131.939205 + 31 +0.0 + 0 +LINE + 5 +F6D + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4110.28857 + 30 +0.0 + 11 +4075.0 + 21 +4110.28857 + 31 +0.0 + 0 +LINE + 5 +F6E + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +4110.28857 + 30 +0.0 + 11 +17050.0 + 21 +4110.28857 + 31 +0.0 + 0 +LINE + 5 +F6F + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4088.637935 + 30 +0.0 + 11 +4112.5 + 21 +4088.637935 + 31 +0.0 + 0 +LINE + 5 +F70 + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +4088.637935 + 30 +0.0 + 11 +17012.5 + 21 +4088.637935 + 31 +0.0 + 0 +LINE + 5 +F71 + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +4088.637935 + 30 +0.0 + 11 +17070.0 + 21 +4088.637935 + 31 +0.0 + 0 +LINE + 5 +F72 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4066.9873 + 30 +0.0 + 11 +4075.0 + 21 +4066.9873 + 31 +0.0 + 0 +LINE + 5 +F73 + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +4066.9873 + 30 +0.0 + 11 +17050.0 + 21 +4066.9873 + 31 +0.0 + 0 +LINE + 5 +F74 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4045.336665 + 30 +0.0 + 11 +4112.5 + 21 +4045.336665 + 31 +0.0 + 0 +LINE + 5 +F75 + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +4045.336665 + 30 +0.0 + 11 +17012.5 + 21 +4045.336665 + 31 +0.0 + 0 +LINE + 5 +F76 + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +4045.336665 + 30 +0.0 + 11 +17070.0 + 21 +4045.336665 + 31 +0.0 + 0 +LINE + 5 +F77 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4023.68603 + 30 +0.0 + 11 +4075.0 + 21 +4023.68603 + 31 +0.0 + 0 +LINE + 5 +F78 + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +4023.68603 + 30 +0.0 + 11 +17050.0 + 21 +4023.68603 + 31 +0.0 + 0 +LINE + 5 +F79 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4002.035395 + 30 +0.0 + 11 +4112.5 + 21 +4002.035395 + 31 +0.0 + 0 +LINE + 5 +F7A + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +4002.035395 + 30 +0.0 + 11 +17012.5 + 21 +4002.035395 + 31 +0.0 + 0 +LINE + 5 +F7B + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +4002.035395 + 30 +0.0 + 11 +17070.0 + 21 +4002.035395 + 31 +0.0 + 0 +LINE + 5 +F7C + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +3980.38476 + 30 +0.0 + 11 +4075.0 + 21 +3980.38476 + 31 +0.0 + 0 +LINE + 5 +F7D + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +3980.38476 + 30 +0.0 + 11 +17050.0 + 21 +3980.38476 + 31 +0.0 + 0 +LINE + 5 +F7E + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +3958.734125 + 30 +0.0 + 11 +4112.5 + 21 +3958.734125 + 31 +0.0 + 0 +LINE + 5 +F7F + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +3958.734125 + 30 +0.0 + 11 +17012.5 + 21 +3958.734125 + 31 +0.0 + 0 +LINE + 5 +F80 + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +3958.734125 + 30 +0.0 + 11 +17070.0 + 21 +3958.734125 + 31 +0.0 + 0 +LINE + 5 +F81 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +3937.08349 + 30 +0.0 + 11 +4075.0 + 21 +3937.08349 + 31 +0.0 + 0 +LINE + 5 +F82 + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +3937.08349 + 30 +0.0 + 11 +17050.0 + 21 +3937.08349 + 31 +0.0 + 0 +LINE + 5 +F83 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +3915.432855 + 30 +0.0 + 11 +4112.5 + 21 +3915.432855 + 31 +0.0 + 0 +LINE + 5 +F84 + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +3915.432855 + 30 +0.0 + 11 +17012.5 + 21 +3915.432855 + 31 +0.0 + 0 +LINE + 5 +F85 + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +3915.432855 + 30 +0.0 + 11 +17070.0 + 21 +3915.432855 + 31 +0.0 + 0 +LINE + 5 +F86 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +3893.78222 + 30 +0.0 + 11 +4075.0 + 21 +3893.78222 + 31 +0.0 + 0 +LINE + 5 +F87 + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +3893.78222 + 30 +0.0 + 11 +17050.0 + 21 +3893.78222 + 31 +0.0 + 0 +LINE + 5 +F88 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +3872.131585 + 30 +0.0 + 11 +4112.5 + 21 +3872.131585 + 31 +0.0 + 0 +LINE + 5 +F89 + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +3872.131585 + 30 +0.0 + 11 +17012.5 + 21 +3872.131585 + 31 +0.0 + 0 +LINE + 5 +F8A + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +3872.131585 + 30 +0.0 + 11 +17070.0 + 21 +3872.131585 + 31 +0.0 + 0 +LINE + 5 +F8B + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +3850.48095 + 30 +0.0 + 11 +4075.0 + 21 +3850.48095 + 31 +0.0 + 0 +LINE + 5 +F8C + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +3850.48095 + 30 +0.0 + 11 +17050.0 + 21 +3850.48095 + 31 +0.0 + 0 +LINE + 5 +F8D + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +3828.830315 + 30 +0.0 + 11 +4112.5 + 21 +3828.830315 + 31 +0.0 + 0 +LINE + 5 +F8E + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +3828.830315 + 30 +0.0 + 11 +17012.5 + 21 +3828.830315 + 31 +0.0 + 0 +LINE + 5 +F8F + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +3828.830315 + 30 +0.0 + 11 +17070.0 + 21 +3828.830315 + 31 +0.0 + 0 +LINE + 5 +F90 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +3807.17968 + 30 +0.0 + 11 +4075.0 + 21 +3807.17968 + 31 +0.0 + 0 +LINE + 5 +F91 + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +3807.17968 + 30 +0.0 + 11 +17050.0 + 21 +3807.17968 + 31 +0.0 + 0 +LINE + 5 +F92 + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +3785.529045 + 30 +0.0 + 11 +17012.5 + 21 +3785.529045 + 31 +0.0 + 0 +LINE + 5 +F93 + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +3785.529045 + 30 +0.0 + 11 +17070.0 + 21 +3785.529045 + 31 +0.0 + 0 +LINE + 5 +F94 + 8 +0 + 62 + 0 + 10 +4124.999998 + 20 +5712.435564 + 30 +0.0 + 11 +4112.499998 + 21 +5734.086199 + 31 +0.0 + 0 +LINE + 5 +F95 + 8 +0 + 62 + 0 + 10 +4124.999998 + 20 +5669.134294 + 30 +0.0 + 11 +4112.499998 + 21 +5690.784929 + 31 +0.0 + 0 +LINE + 5 +F96 + 8 +0 + 62 + 0 + 10 +4087.499998 + 20 +5734.086199 + 30 +0.0 + 11 +4084.085663 + 21 +5740.0 + 31 +0.0 + 0 +LINE + 5 +F97 + 8 +0 + 62 + 0 + 10 +4124.999998 + 20 +5625.833024 + 30 +0.0 + 11 +4112.499998 + 21 +5647.483659 + 31 +0.0 + 0 +LINE + 5 +F98 + 8 +0 + 62 + 0 + 10 +4087.499998 + 20 +5690.784929 + 30 +0.0 + 11 +4074.999998 + 21 +5712.435564 + 31 +0.0 + 0 +LINE + 5 +F99 + 8 +0 + 62 + 0 + 10 +4124.999998 + 20 +5582.531754 + 30 +0.0 + 11 +4112.499998 + 21 +5604.182389 + 31 +0.0 + 0 +LINE + 5 +F9A + 8 +0 + 62 + 0 + 10 +4087.499998 + 20 +5647.483659 + 30 +0.0 + 11 +4074.999998 + 21 +5669.134294 + 31 +0.0 + 0 +LINE + 5 +F9B + 8 +0 + 62 + 0 + 10 +4049.999998 + 20 +5712.435564 + 30 +0.0 + 11 +4045.0 + 21 +5721.095815 + 31 +0.0 + 0 +LINE + 5 +F9C + 8 +0 + 62 + 0 + 10 +4124.999998 + 20 +5539.230483 + 30 +0.0 + 11 +4112.499998 + 21 +5560.881119 + 31 +0.0 + 0 +LINE + 5 +F9D + 8 +0 + 62 + 0 + 10 +4087.499998 + 20 +5604.182389 + 30 +0.0 + 11 +4074.999998 + 21 +5625.833024 + 31 +0.0 + 0 +LINE + 5 +F9E + 8 +0 + 62 + 0 + 10 +4049.999998 + 20 +5669.134294 + 30 +0.0 + 11 +4045.0 + 21 +5677.794545 + 31 +0.0 + 0 +LINE + 5 +F9F + 8 +0 + 62 + 0 + 10 +4124.999998 + 20 +5495.929213 + 30 +0.0 + 11 +4112.499998 + 21 +5517.579848 + 31 +0.0 + 0 +LINE + 5 +FA0 + 8 +0 + 62 + 0 + 10 +4087.499998 + 20 +5560.881119 + 30 +0.0 + 11 +4074.999998 + 21 +5582.531754 + 31 +0.0 + 0 +LINE + 5 +FA1 + 8 +0 + 62 + 0 + 10 +4049.999998 + 20 +5625.833024 + 30 +0.0 + 11 +4045.0 + 21 +5634.493275 + 31 +0.0 + 0 +LINE + 5 +FA2 + 8 +0 + 62 + 0 + 10 +4124.999998 + 20 +5452.627943 + 30 +0.0 + 11 +4112.499998 + 21 +5474.278578 + 31 +0.0 + 0 +LINE + 5 +FA3 + 8 +0 + 62 + 0 + 10 +4087.499998 + 20 +5517.579848 + 30 +0.0 + 11 +4074.999998 + 21 +5539.230484 + 31 +0.0 + 0 +LINE + 5 +FA4 + 8 +0 + 62 + 0 + 10 +4049.999998 + 20 +5582.531754 + 30 +0.0 + 11 +4045.0 + 21 +5591.192005 + 31 +0.0 + 0 +LINE + 5 +FA5 + 8 +0 + 62 + 0 + 10 +4124.999998 + 20 +5409.326673 + 30 +0.0 + 11 +4112.499998 + 21 +5430.977308 + 31 +0.0 + 0 +LINE + 5 +FA6 + 8 +0 + 62 + 0 + 10 +4087.499998 + 20 +5474.278578 + 30 +0.0 + 11 +4074.999998 + 21 +5495.929213 + 31 +0.0 + 0 +LINE + 5 +FA7 + 8 +0 + 62 + 0 + 10 +4049.999998 + 20 +5539.230484 + 30 +0.0 + 11 +4045.0 + 21 +5547.890735 + 31 +0.0 + 0 +LINE + 5 +FA8 + 8 +0 + 62 + 0 + 10 +4124.999998 + 20 +5366.025403 + 30 +0.0 + 11 +4112.499998 + 21 +5387.676038 + 31 +0.0 + 0 +LINE + 5 +FA9 + 8 +0 + 62 + 0 + 10 +4087.499998 + 20 +5430.977308 + 30 +0.0 + 11 +4074.999998 + 21 +5452.627943 + 31 +0.0 + 0 +LINE + 5 +FAA + 8 +0 + 62 + 0 + 10 +4049.999998 + 20 +5495.929213 + 30 +0.0 + 11 +4045.0 + 21 +5504.589465 + 31 +0.0 + 0 +LINE + 5 +FAB + 8 +0 + 62 + 0 + 10 +4124.999998 + 20 +5322.724133 + 30 +0.0 + 11 +4112.499998 + 21 +5344.374768 + 31 +0.0 + 0 +LINE + 5 +FAC + 8 +0 + 62 + 0 + 10 +4087.499998 + 20 +5387.676038 + 30 +0.0 + 11 +4074.999998 + 21 +5409.326673 + 31 +0.0 + 0 +LINE + 5 +FAD + 8 +0 + 62 + 0 + 10 +4049.999998 + 20 +5452.627943 + 30 +0.0 + 11 +4045.0 + 21 +5461.288195 + 31 +0.0 + 0 +LINE + 5 +FAE + 8 +0 + 62 + 0 + 10 +4124.999999 + 20 +5279.422863 + 30 +0.0 + 11 +4112.499999 + 21 +5301.073498 + 31 +0.0 + 0 +LINE + 5 +FAF + 8 +0 + 62 + 0 + 10 +4087.499999 + 20 +5344.374768 + 30 +0.0 + 11 +4074.999999 + 21 +5366.025403 + 31 +0.0 + 0 +LINE + 5 +FB0 + 8 +0 + 62 + 0 + 10 +4049.999999 + 20 +5409.326673 + 30 +0.0 + 11 +4045.0 + 21 +5417.986925 + 31 +0.0 + 0 +LINE + 5 +FB1 + 8 +0 + 62 + 0 + 10 +4124.999999 + 20 +5236.121592 + 30 +0.0 + 11 +4112.499999 + 21 +5257.772228 + 31 +0.0 + 0 +LINE + 5 +FB2 + 8 +0 + 62 + 0 + 10 +4087.499999 + 20 +5301.073498 + 30 +0.0 + 11 +4074.999999 + 21 +5322.724133 + 31 +0.0 + 0 +LINE + 5 +FB3 + 8 +0 + 62 + 0 + 10 +4049.999999 + 20 +5366.025403 + 30 +0.0 + 11 +4045.0 + 21 +5374.685655 + 31 +0.0 + 0 +LINE + 5 +FB4 + 8 +0 + 62 + 0 + 10 +4124.999999 + 20 +5192.820322 + 30 +0.0 + 11 +4112.499999 + 21 +5214.470957 + 31 +0.0 + 0 +LINE + 5 +FB5 + 8 +0 + 62 + 0 + 10 +4087.499999 + 20 +5257.772228 + 30 +0.0 + 11 +4074.999999 + 21 +5279.422863 + 31 +0.0 + 0 +LINE + 5 +FB6 + 8 +0 + 62 + 0 + 10 +4049.999999 + 20 +5322.724133 + 30 +0.0 + 11 +4045.0 + 21 +5331.384385 + 31 +0.0 + 0 +LINE + 5 +FB7 + 8 +0 + 62 + 0 + 10 +4124.999999 + 20 +5149.519052 + 30 +0.0 + 11 +4112.499999 + 21 +5171.169687 + 31 +0.0 + 0 +LINE + 5 +FB8 + 8 +0 + 62 + 0 + 10 +4087.499999 + 20 +5214.470957 + 30 +0.0 + 11 +4074.999999 + 21 +5236.121593 + 31 +0.0 + 0 +LINE + 5 +FB9 + 8 +0 + 62 + 0 + 10 +4049.999999 + 20 +5279.422863 + 30 +0.0 + 11 +4045.0 + 21 +5288.083115 + 31 +0.0 + 0 +LINE + 5 +FBA + 8 +0 + 62 + 0 + 10 +4124.999999 + 20 +5106.217782 + 30 +0.0 + 11 +4112.499999 + 21 +5127.868417 + 31 +0.0 + 0 +LINE + 5 +FBB + 8 +0 + 62 + 0 + 10 +4087.499999 + 20 +5171.169687 + 30 +0.0 + 11 +4074.999999 + 21 +5192.820322 + 31 +0.0 + 0 +LINE + 5 +FBC + 8 +0 + 62 + 0 + 10 +4049.999999 + 20 +5236.121593 + 30 +0.0 + 11 +4045.0 + 21 +5244.781845 + 31 +0.0 + 0 +LINE + 5 +FBD + 8 +0 + 62 + 0 + 10 +4124.999999 + 20 +5062.916512 + 30 +0.0 + 11 +4112.499999 + 21 +5084.567147 + 31 +0.0 + 0 +LINE + 5 +FBE + 8 +0 + 62 + 0 + 10 +4087.499999 + 20 +5127.868417 + 30 +0.0 + 11 +4074.999999 + 21 +5149.519052 + 31 +0.0 + 0 +LINE + 5 +FBF + 8 +0 + 62 + 0 + 10 +4049.999999 + 20 +5192.820322 + 30 +0.0 + 11 +4045.0 + 21 +5201.480575 + 31 +0.0 + 0 +LINE + 5 +FC0 + 8 +0 + 62 + 0 + 10 +4124.999999 + 20 +5019.615242 + 30 +0.0 + 11 +4112.499999 + 21 +5041.265877 + 31 +0.0 + 0 +LINE + 5 +FC1 + 8 +0 + 62 + 0 + 10 +4087.499999 + 20 +5084.567147 + 30 +0.0 + 11 +4074.999999 + 21 +5106.217782 + 31 +0.0 + 0 +LINE + 5 +FC2 + 8 +0 + 62 + 0 + 10 +4049.999999 + 20 +5149.519052 + 30 +0.0 + 11 +4045.0 + 21 +5158.179305 + 31 +0.0 + 0 +LINE + 5 +FC3 + 8 +0 + 62 + 0 + 10 +4124.999999 + 20 +4976.313972 + 30 +0.0 + 11 +4112.499999 + 21 +4997.964607 + 31 +0.0 + 0 +LINE + 5 +FC4 + 8 +0 + 62 + 0 + 10 +4087.499999 + 20 +5041.265877 + 30 +0.0 + 11 +4074.999999 + 21 +5062.916512 + 31 +0.0 + 0 +LINE + 5 +FC5 + 8 +0 + 62 + 0 + 10 +4049.999999 + 20 +5106.217782 + 30 +0.0 + 11 +4045.0 + 21 +5114.878035 + 31 +0.0 + 0 +LINE + 5 +FC6 + 8 +0 + 62 + 0 + 10 +4124.999999 + 20 +4933.012701 + 30 +0.0 + 11 +4112.499999 + 21 +4954.663337 + 31 +0.0 + 0 +LINE + 5 +FC7 + 8 +0 + 62 + 0 + 10 +4087.499999 + 20 +4997.964607 + 30 +0.0 + 11 +4074.999999 + 21 +5019.615242 + 31 +0.0 + 0 +LINE + 5 +FC8 + 8 +0 + 62 + 0 + 10 +4049.999999 + 20 +5062.916512 + 30 +0.0 + 11 +4045.0 + 21 +5071.576765 + 31 +0.0 + 0 +LINE + 5 +FC9 + 8 +0 + 62 + 0 + 10 +4124.999999 + 20 +4889.711431 + 30 +0.0 + 11 +4112.499999 + 21 +4911.362066 + 31 +0.0 + 0 +LINE + 5 +FCA + 8 +0 + 62 + 0 + 10 +4087.499999 + 20 +4954.663337 + 30 +0.0 + 11 +4074.999999 + 21 +4976.313972 + 31 +0.0 + 0 +LINE + 5 +FCB + 8 +0 + 62 + 0 + 10 +4049.999999 + 20 +5019.615242 + 30 +0.0 + 11 +4045.0 + 21 +5028.275495 + 31 +0.0 + 0 +LINE + 5 +FCC + 8 +0 + 62 + 0 + 10 +4124.999999 + 20 +4846.410161 + 30 +0.0 + 11 +4112.499999 + 21 +4868.060796 + 31 +0.0 + 0 +LINE + 5 +FCD + 8 +0 + 62 + 0 + 10 +4087.499999 + 20 +4911.362066 + 30 +0.0 + 11 +4074.999999 + 21 +4933.012702 + 31 +0.0 + 0 +LINE + 5 +FCE + 8 +0 + 62 + 0 + 10 +4049.999999 + 20 +4976.313972 + 30 +0.0 + 11 +4045.0 + 21 +4984.974225 + 31 +0.0 + 0 +LINE + 5 +FCF + 8 +0 + 62 + 0 + 10 +4124.999999 + 20 +4803.108891 + 30 +0.0 + 11 +4112.499999 + 21 +4824.759526 + 31 +0.0 + 0 +LINE + 5 +FD0 + 8 +0 + 62 + 0 + 10 +4087.499999 + 20 +4868.060796 + 30 +0.0 + 11 +4074.999999 + 21 +4889.711431 + 31 +0.0 + 0 +LINE + 5 +FD1 + 8 +0 + 62 + 0 + 10 +4049.999999 + 20 +4933.012702 + 30 +0.0 + 11 +4045.0 + 21 +4941.672955 + 31 +0.0 + 0 +LINE + 5 +FD2 + 8 +0 + 62 + 0 + 10 +4125.0 + 20 +4759.807621 + 30 +0.0 + 11 +4112.5 + 21 +4781.458256 + 31 +0.0 + 0 +LINE + 5 +FD3 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4824.759526 + 30 +0.0 + 11 +4075.0 + 21 +4846.410161 + 31 +0.0 + 0 +LINE + 5 +FD4 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4889.711431 + 30 +0.0 + 11 +4045.0 + 21 +4898.371685 + 31 +0.0 + 0 +LINE + 5 +FD5 + 8 +0 + 62 + 0 + 10 +4125.0 + 20 +4716.506351 + 30 +0.0 + 11 +4112.5 + 21 +4738.156986 + 31 +0.0 + 0 +LINE + 5 +FD6 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4781.458256 + 30 +0.0 + 11 +4075.0 + 21 +4803.108891 + 31 +0.0 + 0 +LINE + 5 +FD7 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4846.410161 + 30 +0.0 + 11 +4045.0 + 21 +4855.070415 + 31 +0.0 + 0 +LINE + 5 +FD8 + 8 +0 + 62 + 0 + 10 +4125.0 + 20 +4673.205081 + 30 +0.0 + 11 +4112.5 + 21 +4694.855716 + 31 +0.0 + 0 +LINE + 5 +FD9 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4738.156986 + 30 +0.0 + 11 +4075.0 + 21 +4759.807621 + 31 +0.0 + 0 +LINE + 5 +FDA + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4803.108891 + 30 +0.0 + 11 +4045.0 + 21 +4811.769145 + 31 +0.0 + 0 +LINE + 5 +FDB + 8 +0 + 62 + 0 + 10 +4125.0 + 20 +4629.90381 + 30 +0.0 + 11 +4112.5 + 21 +4651.554446 + 31 +0.0 + 0 +LINE + 5 +FDC + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4694.855716 + 30 +0.0 + 11 +4075.0 + 21 +4716.506351 + 31 +0.0 + 0 +LINE + 5 +FDD + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4759.807621 + 30 +0.0 + 11 +4045.0 + 21 +4768.467875 + 31 +0.0 + 0 +LINE + 5 +FDE + 8 +0 + 62 + 0 + 10 +4125.0 + 20 +4586.60254 + 30 +0.0 + 11 +4112.5 + 21 +4608.253175 + 31 +0.0 + 0 +LINE + 5 +FDF + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4651.554446 + 30 +0.0 + 11 +4075.0 + 21 +4673.205081 + 31 +0.0 + 0 +LINE + 5 +FE0 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4716.506351 + 30 +0.0 + 11 +4045.0 + 21 +4725.166605 + 31 +0.0 + 0 +LINE + 5 +FE1 + 8 +0 + 62 + 0 + 10 +4125.0 + 20 +4543.30127 + 30 +0.0 + 11 +4112.5 + 21 +4564.951905 + 31 +0.0 + 0 +LINE + 5 +FE2 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4608.253175 + 30 +0.0 + 11 +4075.0 + 21 +4629.903811 + 31 +0.0 + 0 +LINE + 5 +FE3 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4673.205081 + 30 +0.0 + 11 +4045.0 + 21 +4681.865335 + 31 +0.0 + 0 +LINE + 5 +FE4 + 8 +0 + 62 + 0 + 10 +4125.0 + 20 +4500.0 + 30 +0.0 + 11 +4112.5 + 21 +4521.650635 + 31 +0.0 + 0 +LINE + 5 +FE5 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4564.951905 + 30 +0.0 + 11 +4075.0 + 21 +4586.60254 + 31 +0.0 + 0 +LINE + 5 +FE6 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4629.903811 + 30 +0.0 + 11 +4045.0 + 21 +4638.564065 + 31 +0.0 + 0 +LINE + 5 +FE7 + 8 +0 + 62 + 0 + 10 +4125.0 + 20 +4456.69873 + 30 +0.0 + 11 +4112.5 + 21 +4478.349365 + 31 +0.0 + 0 +LINE + 5 +FE8 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4521.650635 + 30 +0.0 + 11 +4075.0 + 21 +4543.30127 + 31 +0.0 + 0 +LINE + 5 +FE9 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4586.60254 + 30 +0.0 + 11 +4045.0 + 21 +4595.262795 + 31 +0.0 + 0 +LINE + 5 +FEA + 8 +0 + 62 + 0 + 10 +4125.0 + 20 +4413.39746 + 30 +0.0 + 11 +4112.5 + 21 +4435.048095 + 31 +0.0 + 0 +LINE + 5 +FEB + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4478.349365 + 30 +0.0 + 11 +4075.0 + 21 +4500.0 + 31 +0.0 + 0 +LINE + 5 +FEC + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4543.30127 + 30 +0.0 + 11 +4045.0 + 21 +4551.961525 + 31 +0.0 + 0 +LINE + 5 +FED + 8 +0 + 62 + 0 + 10 +4125.0 + 20 +4370.09619 + 30 +0.0 + 11 +4112.5 + 21 +4391.746825 + 31 +0.0 + 0 +LINE + 5 +FEE + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4435.048095 + 30 +0.0 + 11 +4075.0 + 21 +4456.69873 + 31 +0.0 + 0 +LINE + 5 +FEF + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4500.0 + 30 +0.0 + 11 +4045.0 + 21 +4508.660255 + 31 +0.0 + 0 +LINE + 5 +FF0 + 8 +0 + 62 + 0 + 10 +4125.0 + 20 +4326.79492 + 30 +0.0 + 11 +4112.5 + 21 +4348.445555 + 31 +0.0 + 0 +LINE + 5 +FF1 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4391.746825 + 30 +0.0 + 11 +4075.0 + 21 +4413.39746 + 31 +0.0 + 0 +LINE + 5 +FF2 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4456.69873 + 30 +0.0 + 11 +4045.0 + 21 +4465.358985 + 31 +0.0 + 0 +LINE + 5 +FF3 + 8 +0 + 62 + 0 + 10 +4125.0 + 20 +4283.49365 + 30 +0.0 + 11 +4112.5 + 21 +4305.144284 + 31 +0.0 + 0 +LINE + 5 +FF4 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4348.445555 + 30 +0.0 + 11 +4075.0 + 21 +4370.09619 + 31 +0.0 + 0 +LINE + 5 +FF5 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4413.39746 + 30 +0.0 + 11 +4045.0 + 21 +4422.057715 + 31 +0.0 + 0 +LINE + 5 +FF6 + 8 +0 + 62 + 0 + 10 +4125.0 + 20 +4240.19238 + 30 +0.0 + 11 +4112.5 + 21 +4261.843014 + 31 +0.0 + 0 +LINE + 5 +FF7 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4305.144284 + 30 +0.0 + 11 +4075.0 + 21 +4326.79492 + 31 +0.0 + 0 +LINE + 5 +FF8 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4370.09619 + 30 +0.0 + 11 +4045.0 + 21 +4378.756445 + 31 +0.0 + 0 +LINE + 5 +FF9 + 8 +0 + 62 + 0 + 10 +4125.0 + 20 +4196.89111 + 30 +0.0 + 11 +4112.500001 + 21 +4218.541744 + 31 +0.0 + 0 +LINE + 5 +FFA + 8 +0 + 62 + 0 + 10 +4087.500001 + 20 +4261.843014 + 30 +0.0 + 11 +4075.000001 + 21 +4283.493649 + 31 +0.0 + 0 +LINE + 5 +FFB + 8 +0 + 62 + 0 + 10 +4050.000001 + 20 +4326.79492 + 30 +0.0 + 11 +4045.0 + 21 +4335.455175 + 31 +0.0 + 0 +LINE + 5 +FFC + 8 +0 + 62 + 0 + 10 +4125.0 + 20 +4153.58984 + 30 +0.0 + 11 +4112.500001 + 21 +4175.240474 + 31 +0.0 + 0 +LINE + 5 +FFD + 8 +0 + 62 + 0 + 10 +4087.500001 + 20 +4218.541744 + 30 +0.0 + 11 +4075.000001 + 21 +4240.192379 + 31 +0.0 + 0 +LINE + 5 +FFE + 8 +0 + 62 + 0 + 10 +4050.000001 + 20 +4283.493649 + 30 +0.0 + 11 +4045.0 + 21 +4292.153905 + 31 +0.0 + 0 +LINE + 5 +FFF + 8 +0 + 62 + 0 + 10 +4125.0 + 20 +4110.28857 + 30 +0.0 + 11 +4112.500001 + 21 +4131.939204 + 31 +0.0 + 0 +LINE + 5 +1000 + 8 +0 + 62 + 0 + 10 +4087.500001 + 20 +4175.240474 + 30 +0.0 + 11 +4075.000001 + 21 +4196.891109 + 31 +0.0 + 0 +LINE + 5 +1001 + 8 +0 + 62 + 0 + 10 +4050.000001 + 20 +4240.192379 + 30 +0.0 + 11 +4045.0 + 21 +4248.852635 + 31 +0.0 + 0 +LINE + 5 +1002 + 8 +0 + 62 + 0 + 10 +4125.0 + 20 +4066.9873 + 30 +0.0 + 11 +4112.500001 + 21 +4088.637934 + 31 +0.0 + 0 +LINE + 5 +1003 + 8 +0 + 62 + 0 + 10 +4087.500001 + 20 +4131.939204 + 30 +0.0 + 11 +4075.000001 + 21 +4153.589839 + 31 +0.0 + 0 +LINE + 5 +1004 + 8 +0 + 62 + 0 + 10 +4050.000001 + 20 +4196.891109 + 30 +0.0 + 11 +4045.0 + 21 +4205.551365 + 31 +0.0 + 0 +LINE + 5 +1005 + 8 +0 + 62 + 0 + 10 +4125.0 + 20 +4023.68603 + 30 +0.0 + 11 +4112.500001 + 21 +4045.336664 + 31 +0.0 + 0 +LINE + 5 +1006 + 8 +0 + 62 + 0 + 10 +4087.500001 + 20 +4088.637934 + 30 +0.0 + 11 +4075.000001 + 21 +4110.288569 + 31 +0.0 + 0 +LINE + 5 +1007 + 8 +0 + 62 + 0 + 10 +4050.000001 + 20 +4153.589839 + 30 +0.0 + 11 +4045.0 + 21 +4162.250095 + 31 +0.0 + 0 +LINE + 5 +1008 + 8 +0 + 62 + 0 + 10 +4125.0 + 20 +3980.38476 + 30 +0.0 + 11 +4112.500001 + 21 +4002.035393 + 31 +0.0 + 0 +LINE + 5 +1009 + 8 +0 + 62 + 0 + 10 +4087.500001 + 20 +4045.336664 + 30 +0.0 + 11 +4075.000001 + 21 +4066.987299 + 31 +0.0 + 0 +LINE + 5 +100A + 8 +0 + 62 + 0 + 10 +4050.000001 + 20 +4110.288569 + 30 +0.0 + 11 +4045.0 + 21 +4118.948825 + 31 +0.0 + 0 +LINE + 5 +100B + 8 +0 + 62 + 0 + 10 +4125.0 + 20 +3937.08349 + 30 +0.0 + 11 +4112.500001 + 21 +3958.734123 + 31 +0.0 + 0 +LINE + 5 +100C + 8 +0 + 62 + 0 + 10 +4087.500001 + 20 +4002.035393 + 30 +0.0 + 11 +4075.000001 + 21 +4023.686029 + 31 +0.0 + 0 +LINE + 5 +100D + 8 +0 + 62 + 0 + 10 +4050.000001 + 20 +4066.987299 + 30 +0.0 + 11 +4045.0 + 21 +4075.647555 + 31 +0.0 + 0 +LINE + 5 +100E + 8 +0 + 62 + 0 + 10 +4125.0 + 20 +3893.78222 + 30 +0.0 + 11 +4112.500001 + 21 +3915.432853 + 31 +0.0 + 0 +LINE + 5 +100F + 8 +0 + 62 + 0 + 10 +4087.500001 + 20 +3958.734123 + 30 +0.0 + 11 +4075.000001 + 21 +3980.384758 + 31 +0.0 + 0 +LINE + 5 +1010 + 8 +0 + 62 + 0 + 10 +4050.000001 + 20 +4023.686029 + 30 +0.0 + 11 +4045.0 + 21 +4032.346285 + 31 +0.0 + 0 +LINE + 5 +1011 + 8 +0 + 62 + 0 + 10 +4125.0 + 20 +3850.48095 + 30 +0.0 + 11 +4112.500001 + 21 +3872.131583 + 31 +0.0 + 0 +LINE + 5 +1012 + 8 +0 + 62 + 0 + 10 +4087.500001 + 20 +3915.432853 + 30 +0.0 + 11 +4075.000001 + 21 +3937.083488 + 31 +0.0 + 0 +LINE + 5 +1013 + 8 +0 + 62 + 0 + 10 +4050.000001 + 20 +3980.384758 + 30 +0.0 + 11 +4045.0 + 21 +3989.045015 + 31 +0.0 + 0 +LINE + 5 +1014 + 8 +0 + 62 + 0 + 10 +4125.0 + 20 +3807.17968 + 30 +0.0 + 11 +4112.500001 + 21 +3828.830313 + 31 +0.0 + 0 +LINE + 5 +1015 + 8 +0 + 62 + 0 + 10 +4087.500001 + 20 +3872.131583 + 30 +0.0 + 11 +4075.000001 + 21 +3893.782218 + 31 +0.0 + 0 +LINE + 5 +1016 + 8 +0 + 62 + 0 + 10 +4050.000001 + 20 +3937.083488 + 30 +0.0 + 11 +4045.0 + 21 +3945.743745 + 31 +0.0 + 0 +LINE + 5 +1017 + 8 +0 + 62 + 0 + 10 +4087.500001 + 20 +3828.830313 + 30 +0.0 + 11 +4075.000001 + 21 +3850.480948 + 31 +0.0 + 0 +LINE + 5 +1018 + 8 +0 + 62 + 0 + 10 +4050.000001 + 20 +3893.782218 + 30 +0.0 + 11 +4045.0 + 21 +3902.442475 + 31 +0.0 + 0 +LINE + 5 +1019 + 8 +0 + 62 + 0 + 10 +4050.000001 + 20 +3850.480948 + 30 +0.0 + 11 +4045.0 + 21 +3859.141205 + 31 +0.0 + 0 +LINE + 5 +101A + 8 +0 + 62 + 0 + 10 +4050.000002 + 20 +3807.179678 + 30 +0.0 + 11 +4045.0 + 21 +3815.839935 + 31 +0.0 + 0 +LINE + 5 +101B + 8 +0 + 62 + 0 + 10 +17024.999959 + 20 +3807.179653 + 30 +0.0 + 11 +17012.499959 + 21 +3828.830288 + 31 +0.0 + 0 +LINE + 5 +101C + 8 +0 + 62 + 0 + 10 +17062.499959 + 20 +3785.529018 + 30 +0.0 + 11 +17049.999959 + 21 +3807.179653 + 31 +0.0 + 0 +LINE + 5 +101D + 8 +0 + 62 + 0 + 10 +17024.999959 + 20 +3850.480923 + 30 +0.0 + 11 +17012.499959 + 21 +3872.131559 + 31 +0.0 + 0 +LINE + 5 +101E + 8 +0 + 62 + 0 + 10 +17062.499959 + 20 +3828.830288 + 30 +0.0 + 11 +17049.999959 + 21 +3850.480923 + 31 +0.0 + 0 +LINE + 5 +101F + 8 +0 + 62 + 0 + 10 +17024.999959 + 20 +3893.782194 + 30 +0.0 + 11 +17012.499959 + 21 +3915.432829 + 31 +0.0 + 0 +LINE + 5 +1020 + 8 +0 + 62 + 0 + 10 +17062.499959 + 20 +3872.131558 + 30 +0.0 + 11 +17049.999959 + 21 +3893.782194 + 31 +0.0 + 0 +LINE + 5 +1021 + 8 +0 + 62 + 0 + 10 +17024.999959 + 20 +3937.083464 + 30 +0.0 + 11 +17012.499959 + 21 +3958.734099 + 31 +0.0 + 0 +LINE + 5 +1022 + 8 +0 + 62 + 0 + 10 +17062.499959 + 20 +3915.432829 + 30 +0.0 + 11 +17049.999959 + 21 +3937.083464 + 31 +0.0 + 0 +LINE + 5 +1023 + 8 +0 + 62 + 0 + 10 +17024.999959 + 20 +3980.384734 + 30 +0.0 + 11 +17012.499959 + 21 +4002.035369 + 31 +0.0 + 0 +LINE + 5 +1024 + 8 +0 + 62 + 0 + 10 +17062.499959 + 20 +3958.734099 + 30 +0.0 + 11 +17049.999959 + 21 +3980.384734 + 31 +0.0 + 0 +LINE + 5 +1025 + 8 +0 + 62 + 0 + 10 +17024.999959 + 20 +4023.686004 + 30 +0.0 + 11 +17012.499959 + 21 +4045.336639 + 31 +0.0 + 0 +LINE + 5 +1026 + 8 +0 + 62 + 0 + 10 +17062.499959 + 20 +4002.035369 + 30 +0.0 + 11 +17049.999959 + 21 +4023.686004 + 31 +0.0 + 0 +LINE + 5 +1027 + 8 +0 + 62 + 0 + 10 +17024.999959 + 20 +4066.987274 + 30 +0.0 + 11 +17012.499959 + 21 +4088.637909 + 31 +0.0 + 0 +LINE + 5 +1028 + 8 +0 + 62 + 0 + 10 +17062.499958 + 20 +4045.336639 + 30 +0.0 + 11 +17049.999958 + 21 +4066.987274 + 31 +0.0 + 0 +LINE + 5 +1029 + 8 +0 + 62 + 0 + 10 +17024.999958 + 20 +4110.288544 + 30 +0.0 + 11 +17012.499958 + 21 +4131.939179 + 31 +0.0 + 0 +LINE + 5 +102A + 8 +0 + 62 + 0 + 10 +17062.499958 + 20 +4088.637909 + 30 +0.0 + 11 +17049.999958 + 21 +4110.288544 + 31 +0.0 + 0 +LINE + 5 +102B + 8 +0 + 62 + 0 + 10 +17024.999958 + 20 +4153.589814 + 30 +0.0 + 11 +17012.499958 + 21 +4175.24045 + 31 +0.0 + 0 +LINE + 5 +102C + 8 +0 + 62 + 0 + 10 +17062.499958 + 20 +4131.939179 + 30 +0.0 + 11 +17049.999958 + 21 +4153.589814 + 31 +0.0 + 0 +LINE + 5 +102D + 8 +0 + 62 + 0 + 10 +17024.999958 + 20 +4196.891085 + 30 +0.0 + 11 +17012.499958 + 21 +4218.54172 + 31 +0.0 + 0 +LINE + 5 +102E + 8 +0 + 62 + 0 + 10 +17062.499958 + 20 +4175.240449 + 30 +0.0 + 11 +17049.999958 + 21 +4196.891085 + 31 +0.0 + 0 +LINE + 5 +102F + 8 +0 + 62 + 0 + 10 +17024.999958 + 20 +4240.192355 + 30 +0.0 + 11 +17012.499958 + 21 +4261.84299 + 31 +0.0 + 0 +LINE + 5 +1030 + 8 +0 + 62 + 0 + 10 +17062.499958 + 20 +4218.54172 + 30 +0.0 + 11 +17049.999958 + 21 +4240.192355 + 31 +0.0 + 0 +LINE + 5 +1031 + 8 +0 + 62 + 0 + 10 +17024.999958 + 20 +4283.493625 + 30 +0.0 + 11 +17012.499958 + 21 +4305.14426 + 31 +0.0 + 0 +LINE + 5 +1032 + 8 +0 + 62 + 0 + 10 +17062.499958 + 20 +4261.84299 + 30 +0.0 + 11 +17049.999958 + 21 +4283.493625 + 31 +0.0 + 0 +LINE + 5 +1033 + 8 +0 + 62 + 0 + 10 +17024.999958 + 20 +4326.794895 + 30 +0.0 + 11 +17012.499958 + 21 +4348.44553 + 31 +0.0 + 0 +LINE + 5 +1034 + 8 +0 + 62 + 0 + 10 +17062.499958 + 20 +4305.14426 + 30 +0.0 + 11 +17049.999958 + 21 +4326.794895 + 31 +0.0 + 0 +LINE + 5 +1035 + 8 +0 + 62 + 0 + 10 +17024.999958 + 20 +4370.096165 + 30 +0.0 + 11 +17012.499958 + 21 +4391.7468 + 31 +0.0 + 0 +LINE + 5 +1036 + 8 +0 + 62 + 0 + 10 +17062.499958 + 20 +4348.44553 + 30 +0.0 + 11 +17049.999958 + 21 +4370.096165 + 31 +0.0 + 0 +LINE + 5 +1037 + 8 +0 + 62 + 0 + 10 +17024.999958 + 20 +4413.397435 + 30 +0.0 + 11 +17012.499958 + 21 +4435.04807 + 31 +0.0 + 0 +LINE + 5 +1038 + 8 +0 + 62 + 0 + 10 +17062.499958 + 20 +4391.7468 + 30 +0.0 + 11 +17049.999958 + 21 +4413.397435 + 31 +0.0 + 0 +LINE + 5 +1039 + 8 +0 + 62 + 0 + 10 +17024.999958 + 20 +4456.698705 + 30 +0.0 + 11 +17012.499958 + 21 +4478.349341 + 31 +0.0 + 0 +LINE + 5 +103A + 8 +0 + 62 + 0 + 10 +17062.499958 + 20 +4435.04807 + 30 +0.0 + 11 +17049.999958 + 21 +4456.698705 + 31 +0.0 + 0 +LINE + 5 +103B + 8 +0 + 62 + 0 + 10 +17024.999958 + 20 +4499.999976 + 30 +0.0 + 11 +17012.499958 + 21 +4521.650611 + 31 +0.0 + 0 +LINE + 5 +103C + 8 +0 + 62 + 0 + 10 +17062.499958 + 20 +4478.34934 + 30 +0.0 + 11 +17049.999958 + 21 +4499.999976 + 31 +0.0 + 0 +LINE + 5 +103D + 8 +0 + 62 + 0 + 10 +17024.999958 + 20 +4543.301246 + 30 +0.0 + 11 +17012.499958 + 21 +4564.951881 + 31 +0.0 + 0 +LINE + 5 +103E + 8 +0 + 62 + 0 + 10 +17062.499958 + 20 +4521.650611 + 30 +0.0 + 11 +17049.999958 + 21 +4543.301246 + 31 +0.0 + 0 +LINE + 5 +103F + 8 +0 + 62 + 0 + 10 +17024.999958 + 20 +4586.602516 + 30 +0.0 + 11 +17012.499958 + 21 +4608.253151 + 31 +0.0 + 0 +LINE + 5 +1040 + 8 +0 + 62 + 0 + 10 +17062.499957 + 20 +4564.951881 + 30 +0.0 + 11 +17049.999957 + 21 +4586.602516 + 31 +0.0 + 0 +LINE + 5 +1041 + 8 +0 + 62 + 0 + 10 +17024.999957 + 20 +4629.903786 + 30 +0.0 + 11 +17012.499957 + 21 +4651.554421 + 31 +0.0 + 0 +LINE + 5 +1042 + 8 +0 + 62 + 0 + 10 +17062.499957 + 20 +4608.253151 + 30 +0.0 + 11 +17049.999957 + 21 +4629.903786 + 31 +0.0 + 0 +LINE + 5 +1043 + 8 +0 + 62 + 0 + 10 +17024.999957 + 20 +4673.205056 + 30 +0.0 + 11 +17012.499957 + 21 +4694.855691 + 31 +0.0 + 0 +LINE + 5 +1044 + 8 +0 + 62 + 0 + 10 +17062.499957 + 20 +4651.554421 + 30 +0.0 + 11 +17049.999957 + 21 +4673.205056 + 31 +0.0 + 0 +LINE + 5 +1045 + 8 +0 + 62 + 0 + 10 +17024.999957 + 20 +4716.506326 + 30 +0.0 + 11 +17012.499957 + 21 +4738.156961 + 31 +0.0 + 0 +LINE + 5 +1046 + 8 +0 + 62 + 0 + 10 +17062.499957 + 20 +4694.855691 + 30 +0.0 + 11 +17049.999957 + 21 +4716.506326 + 31 +0.0 + 0 +LINE + 5 +1047 + 8 +0 + 62 + 0 + 10 +17024.999957 + 20 +4759.807596 + 30 +0.0 + 11 +17012.499957 + 21 +4781.458232 + 31 +0.0 + 0 +LINE + 5 +1048 + 8 +0 + 62 + 0 + 10 +17062.499957 + 20 +4738.156961 + 30 +0.0 + 11 +17049.999957 + 21 +4759.807596 + 31 +0.0 + 0 +LINE + 5 +1049 + 8 +0 + 62 + 0 + 10 +17024.999957 + 20 +4803.108867 + 30 +0.0 + 11 +17012.499957 + 21 +4824.759502 + 31 +0.0 + 0 +LINE + 5 +104A + 8 +0 + 62 + 0 + 10 +17062.499957 + 20 +4781.458231 + 30 +0.0 + 11 +17049.999957 + 21 +4803.108867 + 31 +0.0 + 0 +LINE + 5 +104B + 8 +0 + 62 + 0 + 10 +17024.999957 + 20 +4846.410137 + 30 +0.0 + 11 +17012.499957 + 21 +4868.060772 + 31 +0.0 + 0 +LINE + 5 +104C + 8 +0 + 62 + 0 + 10 +17062.499957 + 20 +4824.759502 + 30 +0.0 + 11 +17049.999957 + 21 +4846.410137 + 31 +0.0 + 0 +LINE + 5 +104D + 8 +0 + 62 + 0 + 10 +17024.999957 + 20 +4889.711407 + 30 +0.0 + 11 +17012.499957 + 21 +4911.362042 + 31 +0.0 + 0 +LINE + 5 +104E + 8 +0 + 62 + 0 + 10 +17062.499957 + 20 +4868.060772 + 30 +0.0 + 11 +17049.999957 + 21 +4889.711407 + 31 +0.0 + 0 +LINE + 5 +104F + 8 +0 + 62 + 0 + 10 +17024.999957 + 20 +4933.012677 + 30 +0.0 + 11 +17012.499957 + 21 +4954.663312 + 31 +0.0 + 0 +LINE + 5 +1050 + 8 +0 + 62 + 0 + 10 +17062.499957 + 20 +4911.362042 + 30 +0.0 + 11 +17049.999957 + 21 +4933.012677 + 31 +0.0 + 0 +LINE + 5 +1051 + 8 +0 + 62 + 0 + 10 +17024.999957 + 20 +4976.313947 + 30 +0.0 + 11 +17012.499957 + 21 +4997.964582 + 31 +0.0 + 0 +LINE + 5 +1052 + 8 +0 + 62 + 0 + 10 +17062.499957 + 20 +4954.663312 + 30 +0.0 + 11 +17049.999957 + 21 +4976.313947 + 31 +0.0 + 0 +LINE + 5 +1053 + 8 +0 + 62 + 0 + 10 +17024.999957 + 20 +5019.615217 + 30 +0.0 + 11 +17012.499957 + 21 +5041.265852 + 31 +0.0 + 0 +LINE + 5 +1054 + 8 +0 + 62 + 0 + 10 +17062.499957 + 20 +4997.964582 + 30 +0.0 + 11 +17049.999957 + 21 +5019.615217 + 31 +0.0 + 0 +LINE + 5 +1055 + 8 +0 + 62 + 0 + 10 +17024.999957 + 20 +5062.916487 + 30 +0.0 + 11 +17012.499957 + 21 +5084.567123 + 31 +0.0 + 0 +LINE + 5 +1056 + 8 +0 + 62 + 0 + 10 +17062.499957 + 20 +5041.265852 + 30 +0.0 + 11 +17049.999957 + 21 +5062.916487 + 31 +0.0 + 0 +LINE + 5 +1057 + 8 +0 + 62 + 0 + 10 +17024.999957 + 20 +5106.217758 + 30 +0.0 + 11 +17012.499957 + 21 +5127.868393 + 31 +0.0 + 0 +LINE + 5 +1058 + 8 +0 + 62 + 0 + 10 +17062.499956 + 20 +5084.567122 + 30 +0.0 + 11 +17049.999956 + 21 +5106.217758 + 31 +0.0 + 0 +LINE + 5 +1059 + 8 +0 + 62 + 0 + 10 +17024.999956 + 20 +5149.519028 + 30 +0.0 + 11 +17012.499956 + 21 +5171.169663 + 31 +0.0 + 0 +LINE + 5 +105A + 8 +0 + 62 + 0 + 10 +17062.499956 + 20 +5127.868393 + 30 +0.0 + 11 +17049.999956 + 21 +5149.519028 + 31 +0.0 + 0 +LINE + 5 +105B + 8 +0 + 62 + 0 + 10 +17024.999956 + 20 +5192.820298 + 30 +0.0 + 11 +17012.499956 + 21 +5214.470933 + 31 +0.0 + 0 +LINE + 5 +105C + 8 +0 + 62 + 0 + 10 +17062.499956 + 20 +5171.169663 + 30 +0.0 + 11 +17049.999956 + 21 +5192.820298 + 31 +0.0 + 0 +LINE + 5 +105D + 8 +0 + 62 + 0 + 10 +17024.999956 + 20 +5236.121568 + 30 +0.0 + 11 +17012.499956 + 21 +5257.772203 + 31 +0.0 + 0 +LINE + 5 +105E + 8 +0 + 62 + 0 + 10 +17062.499956 + 20 +5214.470933 + 30 +0.0 + 11 +17049.999956 + 21 +5236.121568 + 31 +0.0 + 0 +LINE + 5 +105F + 8 +0 + 62 + 0 + 10 +17024.999956 + 20 +5279.422838 + 30 +0.0 + 11 +17012.499956 + 21 +5301.073473 + 31 +0.0 + 0 +LINE + 5 +1060 + 8 +0 + 62 + 0 + 10 +17062.499956 + 20 +5257.772203 + 30 +0.0 + 11 +17049.999956 + 21 +5279.422838 + 31 +0.0 + 0 +LINE + 5 +1061 + 8 +0 + 62 + 0 + 10 +17024.999956 + 20 +5322.724108 + 30 +0.0 + 11 +17012.499956 + 21 +5344.374743 + 31 +0.0 + 0 +LINE + 5 +1062 + 8 +0 + 62 + 0 + 10 +17062.499956 + 20 +5301.073473 + 30 +0.0 + 11 +17049.999956 + 21 +5322.724108 + 31 +0.0 + 0 +LINE + 5 +1063 + 8 +0 + 62 + 0 + 10 +17024.999956 + 20 +5366.025378 + 30 +0.0 + 11 +17012.499956 + 21 +5387.676014 + 31 +0.0 + 0 +LINE + 5 +1064 + 8 +0 + 62 + 0 + 10 +17062.499956 + 20 +5344.374743 + 30 +0.0 + 11 +17049.999956 + 21 +5366.025378 + 31 +0.0 + 0 +LINE + 5 +1065 + 8 +0 + 62 + 0 + 10 +17024.999956 + 20 +5409.326649 + 30 +0.0 + 11 +17012.499956 + 21 +5430.977284 + 31 +0.0 + 0 +LINE + 5 +1066 + 8 +0 + 62 + 0 + 10 +17062.499956 + 20 +5387.676013 + 30 +0.0 + 11 +17049.999956 + 21 +5409.326649 + 31 +0.0 + 0 +LINE + 5 +1067 + 8 +0 + 62 + 0 + 10 +17024.999956 + 20 +5452.627919 + 30 +0.0 + 11 +17012.499956 + 21 +5474.278554 + 31 +0.0 + 0 +LINE + 5 +1068 + 8 +0 + 62 + 0 + 10 +17062.499956 + 20 +5430.977284 + 30 +0.0 + 11 +17049.999956 + 21 +5452.627919 + 31 +0.0 + 0 +LINE + 5 +1069 + 8 +0 + 62 + 0 + 10 +17024.999956 + 20 +5495.929189 + 30 +0.0 + 11 +17012.499956 + 21 +5517.579824 + 31 +0.0 + 0 +LINE + 5 +106A + 8 +0 + 62 + 0 + 10 +17062.499956 + 20 +5474.278554 + 30 +0.0 + 11 +17049.999956 + 21 +5495.929189 + 31 +0.0 + 0 +LINE + 5 +106B + 8 +0 + 62 + 0 + 10 +17024.999956 + 20 +5539.230459 + 30 +0.0 + 11 +17012.499956 + 21 +5560.881094 + 31 +0.0 + 0 +LINE + 5 +106C + 8 +0 + 62 + 0 + 10 +17062.499956 + 20 +5517.579824 + 30 +0.0 + 11 +17049.999956 + 21 +5539.230459 + 31 +0.0 + 0 +LINE + 5 +106D + 8 +0 + 62 + 0 + 10 +17024.999956 + 20 +5582.531729 + 30 +0.0 + 11 +17012.499956 + 21 +5604.182364 + 31 +0.0 + 0 +LINE + 5 +106E + 8 +0 + 62 + 0 + 10 +17062.499956 + 20 +5560.881094 + 30 +0.0 + 11 +17049.999956 + 21 +5582.531729 + 31 +0.0 + 0 +LINE + 5 +106F + 8 +0 + 62 + 0 + 10 +17024.999956 + 20 +5625.832999 + 30 +0.0 + 11 +17012.499956 + 21 +5647.483634 + 31 +0.0 + 0 +LINE + 5 +1070 + 8 +0 + 62 + 0 + 10 +17062.499956 + 20 +5604.182364 + 30 +0.0 + 11 +17049.999956 + 21 +5625.832999 + 31 +0.0 + 0 +LINE + 5 +1071 + 8 +0 + 62 + 0 + 10 +17024.999956 + 20 +5669.134269 + 30 +0.0 + 11 +17012.499956 + 21 +5690.784905 + 31 +0.0 + 0 +LINE + 5 +1072 + 8 +0 + 62 + 0 + 10 +17062.499955 + 20 +5647.483634 + 30 +0.0 + 11 +17049.999955 + 21 +5669.134269 + 31 +0.0 + 0 +LINE + 5 +1073 + 8 +0 + 62 + 0 + 10 +17024.999955 + 20 +5712.43554 + 30 +0.0 + 11 +17012.499955 + 21 +5734.086175 + 31 +0.0 + 0 +LINE + 5 +1074 + 8 +0 + 62 + 0 + 10 +17062.499955 + 20 +5690.784904 + 30 +0.0 + 11 +17049.999955 + 21 +5712.43554 + 31 +0.0 + 0 +LINE + 5 +1075 + 8 +0 + 62 + 0 + 10 +17062.499955 + 20 +5734.086175 + 30 +0.0 + 11 +17059.085607 + 21 +5740.0 + 31 +0.0 + 0 +LINE + 5 +1076 + 8 +0 + 62 + 0 + 10 +4112.499999 + 20 +3785.529043 + 30 +0.0 + 11 +4124.999999 + 21 +3807.179678 + 31 +0.0 + 0 +LINE + 5 +1077 + 8 +0 + 62 + 0 + 10 +4112.499999 + 20 +3828.830313 + 30 +0.0 + 11 +4124.999999 + 21 +3850.480948 + 31 +0.0 + 0 +LINE + 5 +1078 + 8 +0 + 62 + 0 + 10 +4074.999999 + 20 +3807.179678 + 30 +0.0 + 11 +4087.499999 + 21 +3828.830313 + 31 +0.0 + 0 +LINE + 5 +1079 + 8 +0 + 62 + 0 + 10 +4112.499999 + 20 +3872.131583 + 30 +0.0 + 11 +4124.999999 + 21 +3893.782218 + 31 +0.0 + 0 +LINE + 5 +107A + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +3798.519425 + 30 +0.0 + 11 +4049.999999 + 21 +3807.179678 + 31 +0.0 + 0 +LINE + 5 +107B + 8 +0 + 62 + 0 + 10 +4074.999999 + 20 +3850.480948 + 30 +0.0 + 11 +4087.499999 + 21 +3872.131583 + 31 +0.0 + 0 +LINE + 5 +107C + 8 +0 + 62 + 0 + 10 +4112.499999 + 20 +3915.432853 + 30 +0.0 + 11 +4124.999999 + 21 +3937.083488 + 31 +0.0 + 0 +LINE + 5 +107D + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +3841.820695 + 30 +0.0 + 11 +4049.999999 + 21 +3850.480948 + 31 +0.0 + 0 +LINE + 5 +107E + 8 +0 + 62 + 0 + 10 +4074.999999 + 20 +3893.782218 + 30 +0.0 + 11 +4087.499999 + 21 +3915.432853 + 31 +0.0 + 0 +LINE + 5 +107F + 8 +0 + 62 + 0 + 10 +4112.499999 + 20 +3958.734123 + 30 +0.0 + 11 +4124.999999 + 21 +3980.384758 + 31 +0.0 + 0 +LINE + 5 +1080 + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +3885.121965 + 30 +0.0 + 11 +4049.999999 + 21 +3893.782218 + 31 +0.0 + 0 +LINE + 5 +1081 + 8 +0 + 62 + 0 + 10 +4074.999999 + 20 +3937.083488 + 30 +0.0 + 11 +4087.499999 + 21 +3958.734123 + 31 +0.0 + 0 +LINE + 5 +1082 + 8 +0 + 62 + 0 + 10 +4112.499999 + 20 +4002.035393 + 30 +0.0 + 11 +4124.999999 + 21 +4023.686028 + 31 +0.0 + 0 +LINE + 5 +1083 + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +3928.423235 + 30 +0.0 + 11 +4049.999999 + 21 +3937.083488 + 31 +0.0 + 0 +LINE + 5 +1084 + 8 +0 + 62 + 0 + 10 +4074.999999 + 20 +3980.384758 + 30 +0.0 + 11 +4087.499999 + 21 +4002.035393 + 31 +0.0 + 0 +LINE + 5 +1085 + 8 +0 + 62 + 0 + 10 +4112.499999 + 20 +4045.336663 + 30 +0.0 + 11 +4124.999999 + 21 +4066.987299 + 31 +0.0 + 0 +LINE + 5 +1086 + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +3971.724505 + 30 +0.0 + 11 +4049.999999 + 21 +3980.384758 + 31 +0.0 + 0 +LINE + 5 +1087 + 8 +0 + 62 + 0 + 10 +4074.999999 + 20 +4023.686028 + 30 +0.0 + 11 +4087.499999 + 21 +4045.336663 + 31 +0.0 + 0 +LINE + 5 +1088 + 8 +0 + 62 + 0 + 10 +4112.499999 + 20 +4088.637934 + 30 +0.0 + 11 +4124.999999 + 21 +4110.288569 + 31 +0.0 + 0 +LINE + 5 +1089 + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +4015.025775 + 30 +0.0 + 11 +4049.999999 + 21 +4023.686028 + 31 +0.0 + 0 +LINE + 5 +108A + 8 +0 + 62 + 0 + 10 +4074.999999 + 20 +4066.987298 + 30 +0.0 + 11 +4087.499999 + 21 +4088.637934 + 31 +0.0 + 0 +LINE + 5 +108B + 8 +0 + 62 + 0 + 10 +4112.499999 + 20 +4131.939204 + 30 +0.0 + 11 +4124.999999 + 21 +4153.589839 + 31 +0.0 + 0 +LINE + 5 +108C + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +4058.327045 + 30 +0.0 + 11 +4049.999999 + 21 +4066.987298 + 31 +0.0 + 0 +LINE + 5 +108D + 8 +0 + 62 + 0 + 10 +4074.999999 + 20 +4110.288569 + 30 +0.0 + 11 +4087.499999 + 21 +4131.939204 + 31 +0.0 + 0 +LINE + 5 +108E + 8 +0 + 62 + 0 + 10 +4112.499999 + 20 +4175.240474 + 30 +0.0 + 11 +4124.999999 + 21 +4196.891109 + 31 +0.0 + 0 +LINE + 5 +108F + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +4101.628315 + 30 +0.0 + 11 +4050.0 + 21 +4110.288569 + 31 +0.0 + 0 +LINE + 5 +1090 + 8 +0 + 62 + 0 + 10 +4075.0 + 20 +4153.589839 + 30 +0.0 + 11 +4087.5 + 21 +4175.240474 + 31 +0.0 + 0 +LINE + 5 +1091 + 8 +0 + 62 + 0 + 10 +4112.5 + 20 +4218.541744 + 30 +0.0 + 11 +4125.0 + 21 +4240.192379 + 31 +0.0 + 0 +LINE + 5 +1092 + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +4144.929585 + 30 +0.0 + 11 +4050.0 + 21 +4153.589839 + 31 +0.0 + 0 +LINE + 5 +1093 + 8 +0 + 62 + 0 + 10 +4075.0 + 20 +4196.891109 + 30 +0.0 + 11 +4087.5 + 21 +4218.541744 + 31 +0.0 + 0 +LINE + 5 +1094 + 8 +0 + 62 + 0 + 10 +4112.5 + 20 +4261.843014 + 30 +0.0 + 11 +4125.0 + 21 +4283.493649 + 31 +0.0 + 0 +LINE + 5 +1095 + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +4188.230855 + 30 +0.0 + 11 +4050.0 + 21 +4196.891109 + 31 +0.0 + 0 +LINE + 5 +1096 + 8 +0 + 62 + 0 + 10 +4075.0 + 20 +4240.192379 + 30 +0.0 + 11 +4087.5 + 21 +4261.843014 + 31 +0.0 + 0 +LINE + 5 +1097 + 8 +0 + 62 + 0 + 10 +4112.5 + 20 +4305.144284 + 30 +0.0 + 11 +4125.0 + 21 +4326.794919 + 31 +0.0 + 0 +LINE + 5 +1098 + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +4231.532125 + 30 +0.0 + 11 +4050.0 + 21 +4240.192379 + 31 +0.0 + 0 +LINE + 5 +1099 + 8 +0 + 62 + 0 + 10 +4075.0 + 20 +4283.493649 + 30 +0.0 + 11 +4087.5 + 21 +4305.144284 + 31 +0.0 + 0 +LINE + 5 +109A + 8 +0 + 62 + 0 + 10 +4112.5 + 20 +4348.445554 + 30 +0.0 + 11 +4125.0 + 21 +4370.09619 + 31 +0.0 + 0 +LINE + 5 +109B + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +4274.833395 + 30 +0.0 + 11 +4050.0 + 21 +4283.493649 + 31 +0.0 + 0 +LINE + 5 +109C + 8 +0 + 62 + 0 + 10 +4075.0 + 20 +4326.794919 + 30 +0.0 + 11 +4087.5 + 21 +4348.445554 + 31 +0.0 + 0 +LINE + 5 +109D + 8 +0 + 62 + 0 + 10 +4112.5 + 20 +4391.746825 + 30 +0.0 + 11 +4125.0 + 21 +4413.39746 + 31 +0.0 + 0 +LINE + 5 +109E + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +4318.134665 + 30 +0.0 + 11 +4050.0 + 21 +4326.794919 + 31 +0.0 + 0 +LINE + 5 +109F + 8 +0 + 62 + 0 + 10 +4075.0 + 20 +4370.096189 + 30 +0.0 + 11 +4087.5 + 21 +4391.746825 + 31 +0.0 + 0 +LINE + 5 +10A0 + 8 +0 + 62 + 0 + 10 +4112.5 + 20 +4435.048095 + 30 +0.0 + 11 +4125.0 + 21 +4456.69873 + 31 +0.0 + 0 +LINE + 5 +10A1 + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +4361.435935 + 30 +0.0 + 11 +4050.0 + 21 +4370.096189 + 31 +0.0 + 0 +LINE + 5 +10A2 + 8 +0 + 62 + 0 + 10 +4075.0 + 20 +4413.39746 + 30 +0.0 + 11 +4087.5 + 21 +4435.048095 + 31 +0.0 + 0 +LINE + 5 +10A3 + 8 +0 + 62 + 0 + 10 +4112.5 + 20 +4478.349365 + 30 +0.0 + 11 +4125.0 + 21 +4500.0 + 31 +0.0 + 0 +LINE + 5 +10A4 + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +4404.737205 + 30 +0.0 + 11 +4050.0 + 21 +4413.39746 + 31 +0.0 + 0 +LINE + 5 +10A5 + 8 +0 + 62 + 0 + 10 +4075.0 + 20 +4456.69873 + 30 +0.0 + 11 +4087.5 + 21 +4478.349365 + 31 +0.0 + 0 +LINE + 5 +10A6 + 8 +0 + 62 + 0 + 10 +4112.5 + 20 +4521.650635 + 30 +0.0 + 11 +4125.0 + 21 +4543.30127 + 31 +0.0 + 0 +LINE + 5 +10A7 + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +4448.038475 + 30 +0.0 + 11 +4050.0 + 21 +4456.69873 + 31 +0.0 + 0 +LINE + 5 +10A8 + 8 +0 + 62 + 0 + 10 +4075.0 + 20 +4500.0 + 30 +0.0 + 11 +4087.5 + 21 +4521.650635 + 31 +0.0 + 0 +LINE + 5 +10A9 + 8 +0 + 62 + 0 + 10 +4112.5 + 20 +4564.951905 + 30 +0.0 + 11 +4125.0 + 21 +4586.60254 + 31 +0.0 + 0 +LINE + 5 +10AA + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +4491.339745 + 30 +0.0 + 11 +4050.0 + 21 +4500.0 + 31 +0.0 + 0 +LINE + 5 +10AB + 8 +0 + 62 + 0 + 10 +4075.0 + 20 +4543.30127 + 30 +0.0 + 11 +4087.5 + 21 +4564.951905 + 31 +0.0 + 0 +LINE + 5 +10AC + 8 +0 + 62 + 0 + 10 +4112.5 + 20 +4608.253175 + 30 +0.0 + 11 +4125.0 + 21 +4629.90381 + 31 +0.0 + 0 +LINE + 5 +10AD + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +4534.641015 + 30 +0.0 + 11 +4050.0 + 21 +4543.30127 + 31 +0.0 + 0 +LINE + 5 +10AE + 8 +0 + 62 + 0 + 10 +4075.0 + 20 +4586.60254 + 30 +0.0 + 11 +4087.5 + 21 +4608.253175 + 31 +0.0 + 0 +LINE + 5 +10AF + 8 +0 + 62 + 0 + 10 +4112.5 + 20 +4651.554445 + 30 +0.0 + 11 +4125.0 + 21 +4673.20508 + 31 +0.0 + 0 +LINE + 5 +10B0 + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +4577.942285 + 30 +0.0 + 11 +4050.0 + 21 +4586.60254 + 31 +0.0 + 0 +LINE + 5 +10B1 + 8 +0 + 62 + 0 + 10 +4075.0 + 20 +4629.90381 + 30 +0.0 + 11 +4087.5 + 21 +4651.554445 + 31 +0.0 + 0 +LINE + 5 +10B2 + 8 +0 + 62 + 0 + 10 +4112.5 + 20 +4694.855716 + 30 +0.0 + 11 +4125.0 + 21 +4716.50635 + 31 +0.0 + 0 +LINE + 5 +10B3 + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +4621.243555 + 30 +0.0 + 11 +4050.0 + 21 +4629.90381 + 31 +0.0 + 0 +LINE + 5 +10B4 + 8 +0 + 62 + 0 + 10 +4075.0 + 20 +4673.20508 + 30 +0.0 + 11 +4087.5 + 21 +4694.855716 + 31 +0.0 + 0 +LINE + 5 +10B5 + 8 +0 + 62 + 0 + 10 +4112.5 + 20 +4738.156986 + 30 +0.0 + 11 +4125.0 + 21 +4759.80762 + 31 +0.0 + 0 +LINE + 5 +10B6 + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +4664.544825 + 30 +0.0 + 11 +4050.000001 + 21 +4673.20508 + 31 +0.0 + 0 +LINE + 5 +10B7 + 8 +0 + 62 + 0 + 10 +4075.000001 + 20 +4716.506351 + 30 +0.0 + 11 +4087.500001 + 21 +4738.156986 + 31 +0.0 + 0 +LINE + 5 +10B8 + 8 +0 + 62 + 0 + 10 +4112.500001 + 20 +4781.458256 + 30 +0.0 + 11 +4125.0 + 21 +4803.10889 + 31 +0.0 + 0 +LINE + 5 +10B9 + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +4707.846095 + 30 +0.0 + 11 +4050.000001 + 21 +4716.506351 + 31 +0.0 + 0 +LINE + 5 +10BA + 8 +0 + 62 + 0 + 10 +4075.000001 + 20 +4759.807621 + 30 +0.0 + 11 +4087.500001 + 21 +4781.458256 + 31 +0.0 + 0 +LINE + 5 +10BB + 8 +0 + 62 + 0 + 10 +4112.500001 + 20 +4824.759526 + 30 +0.0 + 11 +4125.0 + 21 +4846.41016 + 31 +0.0 + 0 +LINE + 5 +10BC + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +4751.147365 + 30 +0.0 + 11 +4050.000001 + 21 +4759.807621 + 31 +0.0 + 0 +LINE + 5 +10BD + 8 +0 + 62 + 0 + 10 +4075.000001 + 20 +4803.108891 + 30 +0.0 + 11 +4087.500001 + 21 +4824.759526 + 31 +0.0 + 0 +LINE + 5 +10BE + 8 +0 + 62 + 0 + 10 +4112.500001 + 20 +4868.060796 + 30 +0.0 + 11 +4125.0 + 21 +4889.71143 + 31 +0.0 + 0 +LINE + 5 +10BF + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +4794.448635 + 30 +0.0 + 11 +4050.000001 + 21 +4803.108891 + 31 +0.0 + 0 +LINE + 5 +10C0 + 8 +0 + 62 + 0 + 10 +4075.000001 + 20 +4846.410161 + 30 +0.0 + 11 +4087.500001 + 21 +4868.060796 + 31 +0.0 + 0 +LINE + 5 +10C1 + 8 +0 + 62 + 0 + 10 +4112.500001 + 20 +4911.362066 + 30 +0.0 + 11 +4125.0 + 21 +4933.0127 + 31 +0.0 + 0 +LINE + 5 +10C2 + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +4837.749905 + 30 +0.0 + 11 +4050.000001 + 21 +4846.410161 + 31 +0.0 + 0 +LINE + 5 +10C3 + 8 +0 + 62 + 0 + 10 +4075.000001 + 20 +4889.711431 + 30 +0.0 + 11 +4087.500001 + 21 +4911.362066 + 31 +0.0 + 0 +LINE + 5 +10C4 + 8 +0 + 62 + 0 + 10 +4112.500001 + 20 +4954.663336 + 30 +0.0 + 11 +4125.0 + 21 +4976.31397 + 31 +0.0 + 0 +LINE + 5 +10C5 + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +4881.051175 + 30 +0.0 + 11 +4050.000001 + 21 +4889.711431 + 31 +0.0 + 0 +LINE + 5 +10C6 + 8 +0 + 62 + 0 + 10 +4075.000001 + 20 +4933.012701 + 30 +0.0 + 11 +4087.500001 + 21 +4954.663336 + 31 +0.0 + 0 +LINE + 5 +10C7 + 8 +0 + 62 + 0 + 10 +4112.500001 + 20 +4997.964607 + 30 +0.0 + 11 +4125.0 + 21 +5019.61524 + 31 +0.0 + 0 +LINE + 5 +10C8 + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +4924.352445 + 30 +0.0 + 11 +4050.000001 + 21 +4933.012701 + 31 +0.0 + 0 +LINE + 5 +10C9 + 8 +0 + 62 + 0 + 10 +4075.000001 + 20 +4976.313971 + 30 +0.0 + 11 +4087.500001 + 21 +4997.964607 + 31 +0.0 + 0 +LINE + 5 +10CA + 8 +0 + 62 + 0 + 10 +4112.500001 + 20 +5041.265877 + 30 +0.0 + 11 +4125.0 + 21 +5062.91651 + 31 +0.0 + 0 +LINE + 5 +10CB + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +4967.653715 + 30 +0.0 + 11 +4050.000001 + 21 +4976.313971 + 31 +0.0 + 0 +LINE + 5 +10CC + 8 +0 + 62 + 0 + 10 +4075.000001 + 20 +5019.615242 + 30 +0.0 + 11 +4087.500001 + 21 +5041.265877 + 31 +0.0 + 0 +LINE + 5 +10CD + 8 +0 + 62 + 0 + 10 +4112.500001 + 20 +5084.567147 + 30 +0.0 + 11 +4125.0 + 21 +5106.21778 + 31 +0.0 + 0 +LINE + 5 +10CE + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +5010.954985 + 30 +0.0 + 11 +4050.000001 + 21 +5019.615242 + 31 +0.0 + 0 +LINE + 5 +10CF + 8 +0 + 62 + 0 + 10 +4075.000001 + 20 +5062.916512 + 30 +0.0 + 11 +4087.500001 + 21 +5084.567147 + 31 +0.0 + 0 +LINE + 5 +10D0 + 8 +0 + 62 + 0 + 10 +4112.500001 + 20 +5127.868417 + 30 +0.0 + 11 +4125.0 + 21 +5149.51905 + 31 +0.0 + 0 +LINE + 5 +10D1 + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +5054.256255 + 30 +0.0 + 11 +4050.000001 + 21 +5062.916512 + 31 +0.0 + 0 +LINE + 5 +10D2 + 8 +0 + 62 + 0 + 10 +4075.000001 + 20 +5106.217782 + 30 +0.0 + 11 +4087.500001 + 21 +5127.868417 + 31 +0.0 + 0 +LINE + 5 +10D3 + 8 +0 + 62 + 0 + 10 +4112.500001 + 20 +5171.169687 + 30 +0.0 + 11 +4125.0 + 21 +5192.82032 + 31 +0.0 + 0 +LINE + 5 +10D4 + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +5097.557525 + 30 +0.0 + 11 +4050.000001 + 21 +5106.217782 + 31 +0.0 + 0 +LINE + 5 +10D5 + 8 +0 + 62 + 0 + 10 +4075.000001 + 20 +5149.519052 + 30 +0.0 + 11 +4087.500001 + 21 +5171.169687 + 31 +0.0 + 0 +LINE + 5 +10D6 + 8 +0 + 62 + 0 + 10 +4112.500001 + 20 +5214.470957 + 30 +0.0 + 11 +4125.0 + 21 +5236.12159 + 31 +0.0 + 0 +LINE + 5 +10D7 + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +5140.858795 + 30 +0.0 + 11 +4050.000001 + 21 +5149.519052 + 31 +0.0 + 0 +LINE + 5 +10D8 + 8 +0 + 62 + 0 + 10 +4075.000001 + 20 +5192.820322 + 30 +0.0 + 11 +4087.500001 + 21 +5214.470957 + 31 +0.0 + 0 +LINE + 5 +10D9 + 8 +0 + 62 + 0 + 10 +4112.500001 + 20 +5257.772227 + 30 +0.0 + 11 +4125.0 + 21 +5279.42286 + 31 +0.0 + 0 +LINE + 5 +10DA + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +5184.160065 + 30 +0.0 + 11 +4050.000002 + 21 +5192.820322 + 31 +0.0 + 0 +LINE + 5 +10DB + 8 +0 + 62 + 0 + 10 +4075.000002 + 20 +5236.121592 + 30 +0.0 + 11 +4087.500002 + 21 +5257.772227 + 31 +0.0 + 0 +LINE + 5 +10DC + 8 +0 + 62 + 0 + 10 +4112.500002 + 20 +5301.073498 + 30 +0.0 + 11 +4125.0 + 21 +5322.72413 + 31 +0.0 + 0 +LINE + 5 +10DD + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +5227.461335 + 30 +0.0 + 11 +4050.000002 + 21 +5236.121592 + 31 +0.0 + 0 +LINE + 5 +10DE + 8 +0 + 62 + 0 + 10 +4075.000002 + 20 +5279.422862 + 30 +0.0 + 11 +4087.500002 + 21 +5301.073498 + 31 +0.0 + 0 +LINE + 5 +10DF + 8 +0 + 62 + 0 + 10 +4112.500002 + 20 +5344.374768 + 30 +0.0 + 11 +4125.0 + 21 +5366.0254 + 31 +0.0 + 0 +LINE + 5 +10E0 + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +5270.762605 + 30 +0.0 + 11 +4050.000002 + 21 +5279.422862 + 31 +0.0 + 0 +LINE + 5 +10E1 + 8 +0 + 62 + 0 + 10 +4075.000002 + 20 +5322.724133 + 30 +0.0 + 11 +4087.500002 + 21 +5344.374768 + 31 +0.0 + 0 +LINE + 5 +10E2 + 8 +0 + 62 + 0 + 10 +4112.500002 + 20 +5387.676038 + 30 +0.0 + 11 +4125.0 + 21 +5409.32667 + 31 +0.0 + 0 +LINE + 5 +10E3 + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +5314.063875 + 30 +0.0 + 11 +4050.000002 + 21 +5322.724133 + 31 +0.0 + 0 +LINE + 5 +10E4 + 8 +0 + 62 + 0 + 10 +4075.000002 + 20 +5366.025403 + 30 +0.0 + 11 +4087.500002 + 21 +5387.676038 + 31 +0.0 + 0 +LINE + 5 +10E5 + 8 +0 + 62 + 0 + 10 +4112.500002 + 20 +5430.977308 + 30 +0.0 + 11 +4125.0 + 21 +5452.62794 + 31 +0.0 + 0 +LINE + 5 +10E6 + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +5357.365145 + 30 +0.0 + 11 +4050.000002 + 21 +5366.025403 + 31 +0.0 + 0 +LINE + 5 +10E7 + 8 +0 + 62 + 0 + 10 +4075.000002 + 20 +5409.326673 + 30 +0.0 + 11 +4087.500002 + 21 +5430.977308 + 31 +0.0 + 0 +LINE + 5 +10E8 + 8 +0 + 62 + 0 + 10 +4112.500002 + 20 +5474.278578 + 30 +0.0 + 11 +4125.0 + 21 +5495.92921 + 31 +0.0 + 0 +LINE + 5 +10E9 + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +5400.666415 + 30 +0.0 + 11 +4050.000002 + 21 +5409.326673 + 31 +0.0 + 0 +LINE + 5 +10EA + 8 +0 + 62 + 0 + 10 +4075.000002 + 20 +5452.627943 + 30 +0.0 + 11 +4087.500002 + 21 +5474.278578 + 31 +0.0 + 0 +LINE + 5 +10EB + 8 +0 + 62 + 0 + 10 +4112.500002 + 20 +5517.579848 + 30 +0.0 + 11 +4125.0 + 21 +5539.23048 + 31 +0.0 + 0 +LINE + 5 +10EC + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +5443.967685 + 30 +0.0 + 11 +4050.000002 + 21 +5452.627943 + 31 +0.0 + 0 +LINE + 5 +10ED + 8 +0 + 62 + 0 + 10 +4075.000002 + 20 +5495.929213 + 30 +0.0 + 11 +4087.500002 + 21 +5517.579848 + 31 +0.0 + 0 +LINE + 5 +10EE + 8 +0 + 62 + 0 + 10 +4112.500002 + 20 +5560.881118 + 30 +0.0 + 11 +4125.0 + 21 +5582.53175 + 31 +0.0 + 0 +LINE + 5 +10EF + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +5487.268955 + 30 +0.0 + 11 +4050.000002 + 21 +5495.929213 + 31 +0.0 + 0 +LINE + 5 +10F0 + 8 +0 + 62 + 0 + 10 +4075.000002 + 20 +5539.230483 + 30 +0.0 + 11 +4087.500002 + 21 +5560.881118 + 31 +0.0 + 0 +LINE + 5 +10F1 + 8 +0 + 62 + 0 + 10 +4112.500002 + 20 +5604.182389 + 30 +0.0 + 11 +4125.0 + 21 +5625.83302 + 31 +0.0 + 0 +LINE + 5 +10F2 + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +5530.570225 + 30 +0.0 + 11 +4050.000002 + 21 +5539.230483 + 31 +0.0 + 0 +LINE + 5 +10F3 + 8 +0 + 62 + 0 + 10 +4075.000002 + 20 +5582.531753 + 30 +0.0 + 11 +4087.500002 + 21 +5604.182389 + 31 +0.0 + 0 +LINE + 5 +10F4 + 8 +0 + 62 + 0 + 10 +4112.500002 + 20 +5647.483659 + 30 +0.0 + 11 +4125.0 + 21 +5669.13429 + 31 +0.0 + 0 +LINE + 5 +10F5 + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +5573.871495 + 30 +0.0 + 11 +4050.000002 + 21 +5582.531753 + 31 +0.0 + 0 +LINE + 5 +10F6 + 8 +0 + 62 + 0 + 10 +4075.000002 + 20 +5625.833024 + 30 +0.0 + 11 +4087.500002 + 21 +5647.483659 + 31 +0.0 + 0 +LINE + 5 +10F7 + 8 +0 + 62 + 0 + 10 +4112.500002 + 20 +5690.784929 + 30 +0.0 + 11 +4125.0 + 21 +5712.43556 + 31 +0.0 + 0 +LINE + 5 +10F8 + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +5617.172765 + 30 +0.0 + 11 +4050.000002 + 21 +5625.833024 + 31 +0.0 + 0 +LINE + 5 +10F9 + 8 +0 + 62 + 0 + 10 +4075.000002 + 20 +5669.134294 + 30 +0.0 + 11 +4087.500002 + 21 +5690.784929 + 31 +0.0 + 0 +LINE + 5 +10FA + 8 +0 + 62 + 0 + 10 +4112.500002 + 20 +5734.086199 + 30 +0.0 + 11 +4115.914337 + 21 +5740.0 + 31 +0.0 + 0 +LINE + 5 +10FB + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +5660.474035 + 30 +0.0 + 11 +4050.000002 + 21 +5669.134294 + 31 +0.0 + 0 +LINE + 5 +10FC + 8 +0 + 62 + 0 + 10 +4075.000002 + 20 +5712.435564 + 30 +0.0 + 11 +4087.500002 + 21 +5734.086199 + 31 +0.0 + 0 +LINE + 5 +10FD + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +5703.775305 + 30 +0.0 + 11 +4050.000003 + 21 +5712.435564 + 31 +0.0 + 0 +LINE + 5 +10FE + 8 +0 + 62 + 0 + 10 +17012.49996 + 20 +5734.086223 + 30 +0.0 + 11 +17015.914281 + 21 +5740.0 + 31 +0.0 + 0 +LINE + 5 +10FF + 8 +0 + 62 + 0 + 10 +17012.49996 + 20 +5690.784953 + 30 +0.0 + 11 +17024.99996 + 21 +5712.435588 + 31 +0.0 + 0 +LINE + 5 +1100 + 8 +0 + 62 + 0 + 10 +17012.49996 + 20 +5647.483683 + 30 +0.0 + 11 +17024.99996 + 21 +5669.134318 + 31 +0.0 + 0 +LINE + 5 +1101 + 8 +0 + 62 + 0 + 10 +17049.99996 + 20 +5712.435588 + 30 +0.0 + 11 +17062.49996 + 21 +5734.086224 + 31 +0.0 + 0 +LINE + 5 +1102 + 8 +0 + 62 + 0 + 10 +17012.49996 + 20 +5604.182413 + 30 +0.0 + 11 +17024.99996 + 21 +5625.833048 + 31 +0.0 + 0 +LINE + 5 +1103 + 8 +0 + 62 + 0 + 10 +17049.99996 + 20 +5669.134318 + 30 +0.0 + 11 +17062.49996 + 21 +5690.784953 + 31 +0.0 + 0 +LINE + 5 +1104 + 8 +0 + 62 + 0 + 10 +17012.49996 + 20 +5560.881143 + 30 +0.0 + 11 +17024.99996 + 21 +5582.531778 + 31 +0.0 + 0 +LINE + 5 +1105 + 8 +0 + 62 + 0 + 10 +17049.99996 + 20 +5625.833048 + 30 +0.0 + 11 +17062.49996 + 21 +5647.483683 + 31 +0.0 + 0 +LINE + 5 +1106 + 8 +0 + 62 + 0 + 10 +17012.49996 + 20 +5517.579873 + 30 +0.0 + 11 +17024.99996 + 21 +5539.230508 + 31 +0.0 + 0 +LINE + 5 +1107 + 8 +0 + 62 + 0 + 10 +17049.99996 + 20 +5582.531778 + 30 +0.0 + 11 +17062.49996 + 21 +5604.182413 + 31 +0.0 + 0 +LINE + 5 +1108 + 8 +0 + 62 + 0 + 10 +17012.49996 + 20 +5474.278603 + 30 +0.0 + 11 +17024.99996 + 21 +5495.929238 + 31 +0.0 + 0 +LINE + 5 +1109 + 8 +0 + 62 + 0 + 10 +17049.99996 + 20 +5539.230508 + 30 +0.0 + 11 +17062.49996 + 21 +5560.881143 + 31 +0.0 + 0 +LINE + 5 +110A + 8 +0 + 62 + 0 + 10 +17012.49996 + 20 +5430.977332 + 30 +0.0 + 11 +17024.99996 + 21 +5452.627968 + 31 +0.0 + 0 +LINE + 5 +110B + 8 +0 + 62 + 0 + 10 +17049.99996 + 20 +5495.929238 + 30 +0.0 + 11 +17062.49996 + 21 +5517.579873 + 31 +0.0 + 0 +LINE + 5 +110C + 8 +0 + 62 + 0 + 10 +17012.499959 + 20 +5387.676062 + 30 +0.0 + 11 +17024.999959 + 21 +5409.326697 + 31 +0.0 + 0 +LINE + 5 +110D + 8 +0 + 62 + 0 + 10 +17049.999959 + 20 +5452.627968 + 30 +0.0 + 11 +17062.499959 + 21 +5474.278603 + 31 +0.0 + 0 +LINE + 5 +110E + 8 +0 + 62 + 0 + 10 +17012.499959 + 20 +5344.374792 + 30 +0.0 + 11 +17024.999959 + 21 +5366.025427 + 31 +0.0 + 0 +LINE + 5 +110F + 8 +0 + 62 + 0 + 10 +17049.999959 + 20 +5409.326697 + 30 +0.0 + 11 +17062.499959 + 21 +5430.977333 + 31 +0.0 + 0 +LINE + 5 +1110 + 8 +0 + 62 + 0 + 10 +17012.499959 + 20 +5301.073522 + 30 +0.0 + 11 +17024.999959 + 21 +5322.724157 + 31 +0.0 + 0 +LINE + 5 +1111 + 8 +0 + 62 + 0 + 10 +17049.999959 + 20 +5366.025427 + 30 +0.0 + 11 +17062.499959 + 21 +5387.676062 + 31 +0.0 + 0 +LINE + 5 +1112 + 8 +0 + 62 + 0 + 10 +17012.499959 + 20 +5257.772252 + 30 +0.0 + 11 +17024.999959 + 21 +5279.422887 + 31 +0.0 + 0 +LINE + 5 +1113 + 8 +0 + 62 + 0 + 10 +17049.999959 + 20 +5322.724157 + 30 +0.0 + 11 +17062.499959 + 21 +5344.374792 + 31 +0.0 + 0 +LINE + 5 +1114 + 8 +0 + 62 + 0 + 10 +17012.499959 + 20 +5214.470982 + 30 +0.0 + 11 +17024.999959 + 21 +5236.121617 + 31 +0.0 + 0 +LINE + 5 +1115 + 8 +0 + 62 + 0 + 10 +17049.999959 + 20 +5279.422887 + 30 +0.0 + 11 +17062.499959 + 21 +5301.073522 + 31 +0.0 + 0 +LINE + 5 +1116 + 8 +0 + 62 + 0 + 10 +17012.499959 + 20 +5171.169712 + 30 +0.0 + 11 +17024.999959 + 21 +5192.820347 + 31 +0.0 + 0 +LINE + 5 +1117 + 8 +0 + 62 + 0 + 10 +17049.999959 + 20 +5236.121617 + 30 +0.0 + 11 +17062.499959 + 21 +5257.772252 + 31 +0.0 + 0 +LINE + 5 +1118 + 8 +0 + 62 + 0 + 10 +17012.499959 + 20 +5127.868441 + 30 +0.0 + 11 +17024.999959 + 21 +5149.519077 + 31 +0.0 + 0 +LINE + 5 +1119 + 8 +0 + 62 + 0 + 10 +17049.999959 + 20 +5192.820347 + 30 +0.0 + 11 +17062.499959 + 21 +5214.470982 + 31 +0.0 + 0 +LINE + 5 +111A + 8 +0 + 62 + 0 + 10 +17012.499959 + 20 +5084.567171 + 30 +0.0 + 11 +17024.999959 + 21 +5106.217806 + 31 +0.0 + 0 +LINE + 5 +111B + 8 +0 + 62 + 0 + 10 +17049.999959 + 20 +5149.519077 + 30 +0.0 + 11 +17062.499959 + 21 +5171.169712 + 31 +0.0 + 0 +LINE + 5 +111C + 8 +0 + 62 + 0 + 10 +17012.499959 + 20 +5041.265901 + 30 +0.0 + 11 +17024.999959 + 21 +5062.916536 + 31 +0.0 + 0 +LINE + 5 +111D + 8 +0 + 62 + 0 + 10 +17049.999959 + 20 +5106.217806 + 30 +0.0 + 11 +17062.499959 + 21 +5127.868442 + 31 +0.0 + 0 +LINE + 5 +111E + 8 +0 + 62 + 0 + 10 +17012.499959 + 20 +4997.964631 + 30 +0.0 + 11 +17024.999959 + 21 +5019.615266 + 31 +0.0 + 0 +LINE + 5 +111F + 8 +0 + 62 + 0 + 10 +17049.999959 + 20 +5062.916536 + 30 +0.0 + 11 +17062.499959 + 21 +5084.567171 + 31 +0.0 + 0 +LINE + 5 +1120 + 8 +0 + 62 + 0 + 10 +17012.499959 + 20 +4954.663361 + 30 +0.0 + 11 +17024.999959 + 21 +4976.313996 + 31 +0.0 + 0 +LINE + 5 +1121 + 8 +0 + 62 + 0 + 10 +17049.999959 + 20 +5019.615266 + 30 +0.0 + 11 +17062.499959 + 21 +5041.265901 + 31 +0.0 + 0 +LINE + 5 +1122 + 8 +0 + 62 + 0 + 10 +17012.499959 + 20 +4911.362091 + 30 +0.0 + 11 +17024.999959 + 21 +4933.012726 + 31 +0.0 + 0 +LINE + 5 +1123 + 8 +0 + 62 + 0 + 10 +17049.999959 + 20 +4976.313996 + 30 +0.0 + 11 +17062.499959 + 21 +4997.964631 + 31 +0.0 + 0 +LINE + 5 +1124 + 8 +0 + 62 + 0 + 10 +17012.499958 + 20 +4868.060821 + 30 +0.0 + 11 +17024.999958 + 21 +4889.711456 + 31 +0.0 + 0 +LINE + 5 +1125 + 8 +0 + 62 + 0 + 10 +17049.999958 + 20 +4933.012726 + 30 +0.0 + 11 +17062.499958 + 21 +4954.663361 + 31 +0.0 + 0 +LINE + 5 +1126 + 8 +0 + 62 + 0 + 10 +17012.499958 + 20 +4824.75955 + 30 +0.0 + 11 +17024.999958 + 21 +4846.410186 + 31 +0.0 + 0 +LINE + 5 +1127 + 8 +0 + 62 + 0 + 10 +17049.999958 + 20 +4889.711456 + 30 +0.0 + 11 +17062.499958 + 21 +4911.362091 + 31 +0.0 + 0 +LINE + 5 +1128 + 8 +0 + 62 + 0 + 10 +17012.499958 + 20 +4781.45828 + 30 +0.0 + 11 +17024.999958 + 21 +4803.108915 + 31 +0.0 + 0 +LINE + 5 +1129 + 8 +0 + 62 + 0 + 10 +17049.999958 + 20 +4846.410186 + 30 +0.0 + 11 +17062.499958 + 21 +4868.060821 + 31 +0.0 + 0 +LINE + 5 +112A + 8 +0 + 62 + 0 + 10 +17012.499958 + 20 +4738.15701 + 30 +0.0 + 11 +17024.999958 + 21 +4759.807645 + 31 +0.0 + 0 +LINE + 5 +112B + 8 +0 + 62 + 0 + 10 +17049.999958 + 20 +4803.108915 + 30 +0.0 + 11 +17062.499958 + 21 +4824.759551 + 31 +0.0 + 0 +LINE + 5 +112C + 8 +0 + 62 + 0 + 10 +17012.499958 + 20 +4694.85574 + 30 +0.0 + 11 +17024.999958 + 21 +4716.506375 + 31 +0.0 + 0 +LINE + 5 +112D + 8 +0 + 62 + 0 + 10 +17049.999958 + 20 +4759.807645 + 30 +0.0 + 11 +17062.499958 + 21 +4781.45828 + 31 +0.0 + 0 +LINE + 5 +112E + 8 +0 + 62 + 0 + 10 +17012.499958 + 20 +4651.55447 + 30 +0.0 + 11 +17024.999958 + 21 +4673.205105 + 31 +0.0 + 0 +LINE + 5 +112F + 8 +0 + 62 + 0 + 10 +17049.999958 + 20 +4716.506375 + 30 +0.0 + 11 +17062.499958 + 21 +4738.15701 + 31 +0.0 + 0 +LINE + 5 +1130 + 8 +0 + 62 + 0 + 10 +17012.499958 + 20 +4608.2532 + 30 +0.0 + 11 +17024.999958 + 21 +4629.903835 + 31 +0.0 + 0 +LINE + 5 +1131 + 8 +0 + 62 + 0 + 10 +17049.999958 + 20 +4673.205105 + 30 +0.0 + 11 +17062.499958 + 21 +4694.85574 + 31 +0.0 + 0 +LINE + 5 +1132 + 8 +0 + 62 + 0 + 10 +17012.499958 + 20 +4564.95193 + 30 +0.0 + 11 +17024.999958 + 21 +4586.602565 + 31 +0.0 + 0 +LINE + 5 +1133 + 8 +0 + 62 + 0 + 10 +17049.999958 + 20 +4629.903835 + 30 +0.0 + 11 +17062.499958 + 21 +4651.55447 + 31 +0.0 + 0 +LINE + 5 +1134 + 8 +0 + 62 + 0 + 10 +17012.499958 + 20 +4521.650659 + 30 +0.0 + 11 +17024.999958 + 21 +4543.301295 + 31 +0.0 + 0 +LINE + 5 +1135 + 8 +0 + 62 + 0 + 10 +17049.999958 + 20 +4586.602565 + 30 +0.0 + 11 +17062.499958 + 21 +4608.2532 + 31 +0.0 + 0 +LINE + 5 +1136 + 8 +0 + 62 + 0 + 10 +17012.499958 + 20 +4478.349389 + 30 +0.0 + 11 +17024.999958 + 21 +4500.000024 + 31 +0.0 + 0 +LINE + 5 +1137 + 8 +0 + 62 + 0 + 10 +17049.999958 + 20 +4543.301295 + 30 +0.0 + 11 +17062.499958 + 21 +4564.95193 + 31 +0.0 + 0 +LINE + 5 +1138 + 8 +0 + 62 + 0 + 10 +17012.499958 + 20 +4435.048119 + 30 +0.0 + 11 +17024.999958 + 21 +4456.698754 + 31 +0.0 + 0 +LINE + 5 +1139 + 8 +0 + 62 + 0 + 10 +17049.999958 + 20 +4500.000024 + 30 +0.0 + 11 +17062.499958 + 21 +4521.65066 + 31 +0.0 + 0 +LINE + 5 +113A + 8 +0 + 62 + 0 + 10 +17012.499958 + 20 +4391.746849 + 30 +0.0 + 11 +17024.999958 + 21 +4413.397484 + 31 +0.0 + 0 +LINE + 5 +113B + 8 +0 + 62 + 0 + 10 +17049.999958 + 20 +4456.698754 + 30 +0.0 + 11 +17062.499958 + 21 +4478.349389 + 31 +0.0 + 0 +LINE + 5 +113C + 8 +0 + 62 + 0 + 10 +17012.499957 + 20 +4348.445579 + 30 +0.0 + 11 +17024.999957 + 21 +4370.096214 + 31 +0.0 + 0 +LINE + 5 +113D + 8 +0 + 62 + 0 + 10 +17049.999957 + 20 +4413.397484 + 30 +0.0 + 11 +17062.499957 + 21 +4435.048119 + 31 +0.0 + 0 +LINE + 5 +113E + 8 +0 + 62 + 0 + 10 +17012.499957 + 20 +4305.144309 + 30 +0.0 + 11 +17024.999957 + 21 +4326.794944 + 31 +0.0 + 0 +LINE + 5 +113F + 8 +0 + 62 + 0 + 10 +17049.999957 + 20 +4370.096214 + 30 +0.0 + 11 +17062.499957 + 21 +4391.746849 + 31 +0.0 + 0 +LINE + 5 +1140 + 8 +0 + 62 + 0 + 10 +17012.499957 + 20 +4261.843039 + 30 +0.0 + 11 +17024.999957 + 21 +4283.493674 + 31 +0.0 + 0 +LINE + 5 +1141 + 8 +0 + 62 + 0 + 10 +17049.999957 + 20 +4326.794944 + 30 +0.0 + 11 +17062.499957 + 21 +4348.445579 + 31 +0.0 + 0 +LINE + 5 +1142 + 8 +0 + 62 + 0 + 10 +17012.499957 + 20 +4218.541768 + 30 +0.0 + 11 +17024.999957 + 21 +4240.192404 + 31 +0.0 + 0 +LINE + 5 +1143 + 8 +0 + 62 + 0 + 10 +17049.999957 + 20 +4283.493674 + 30 +0.0 + 11 +17062.499957 + 21 +4305.144309 + 31 +0.0 + 0 +LINE + 5 +1144 + 8 +0 + 62 + 0 + 10 +17012.499957 + 20 +4175.240498 + 30 +0.0 + 11 +17024.999957 + 21 +4196.891133 + 31 +0.0 + 0 +LINE + 5 +1145 + 8 +0 + 62 + 0 + 10 +17049.999957 + 20 +4240.192404 + 30 +0.0 + 11 +17062.499957 + 21 +4261.843039 + 31 +0.0 + 0 +LINE + 5 +1146 + 8 +0 + 62 + 0 + 10 +17012.499957 + 20 +4131.939228 + 30 +0.0 + 11 +17024.999957 + 21 +4153.589863 + 31 +0.0 + 0 +LINE + 5 +1147 + 8 +0 + 62 + 0 + 10 +17049.999957 + 20 +4196.891133 + 30 +0.0 + 11 +17062.499957 + 21 +4218.541769 + 31 +0.0 + 0 +LINE + 5 +1148 + 8 +0 + 62 + 0 + 10 +17012.499957 + 20 +4088.637958 + 30 +0.0 + 11 +17024.999957 + 21 +4110.288593 + 31 +0.0 + 0 +LINE + 5 +1149 + 8 +0 + 62 + 0 + 10 +17049.999957 + 20 +4153.589863 + 30 +0.0 + 11 +17062.499957 + 21 +4175.240498 + 31 +0.0 + 0 +LINE + 5 +114A + 8 +0 + 62 + 0 + 10 +17012.499957 + 20 +4045.336688 + 30 +0.0 + 11 +17024.999957 + 21 +4066.987323 + 31 +0.0 + 0 +LINE + 5 +114B + 8 +0 + 62 + 0 + 10 +17049.999957 + 20 +4110.288593 + 30 +0.0 + 11 +17062.499957 + 21 +4131.939228 + 31 +0.0 + 0 +LINE + 5 +114C + 8 +0 + 62 + 0 + 10 +17012.499957 + 20 +4002.035418 + 30 +0.0 + 11 +17024.999957 + 21 +4023.686053 + 31 +0.0 + 0 +LINE + 5 +114D + 8 +0 + 62 + 0 + 10 +17049.999957 + 20 +4066.987323 + 30 +0.0 + 11 +17062.499957 + 21 +4088.637958 + 31 +0.0 + 0 +LINE + 5 +114E + 8 +0 + 62 + 0 + 10 +17012.499957 + 20 +3958.734148 + 30 +0.0 + 11 +17024.999957 + 21 +3980.384783 + 31 +0.0 + 0 +LINE + 5 +114F + 8 +0 + 62 + 0 + 10 +17049.999957 + 20 +4023.686053 + 30 +0.0 + 11 +17062.499957 + 21 +4045.336688 + 31 +0.0 + 0 +LINE + 5 +1150 + 8 +0 + 62 + 0 + 10 +17012.499957 + 20 +3915.432877 + 30 +0.0 + 11 +17024.999957 + 21 +3937.083513 + 31 +0.0 + 0 +LINE + 5 +1151 + 8 +0 + 62 + 0 + 10 +17049.999957 + 20 +3980.384783 + 30 +0.0 + 11 +17062.499957 + 21 +4002.035418 + 31 +0.0 + 0 +LINE + 5 +1152 + 8 +0 + 62 + 0 + 10 +17012.499957 + 20 +3872.131607 + 30 +0.0 + 11 +17024.999957 + 21 +3893.782242 + 31 +0.0 + 0 +LINE + 5 +1153 + 8 +0 + 62 + 0 + 10 +17049.999957 + 20 +3937.083513 + 30 +0.0 + 11 +17062.499957 + 21 +3958.734148 + 31 +0.0 + 0 +LINE + 5 +1154 + 8 +0 + 62 + 0 + 10 +17012.499956 + 20 +3828.830337 + 30 +0.0 + 11 +17024.999956 + 21 +3850.480972 + 31 +0.0 + 0 +LINE + 5 +1155 + 8 +0 + 62 + 0 + 10 +17049.999956 + 20 +3893.782242 + 30 +0.0 + 11 +17062.499956 + 21 +3915.432878 + 31 +0.0 + 0 +LINE + 5 +1156 + 8 +0 + 62 + 0 + 10 +17012.499956 + 20 +3785.529067 + 30 +0.0 + 11 +17024.999956 + 21 +3807.179702 + 31 +0.0 + 0 +LINE + 5 +1157 + 8 +0 + 62 + 0 + 10 +17049.999956 + 20 +3850.480972 + 30 +0.0 + 11 +17062.499956 + 21 +3872.131607 + 31 +0.0 + 0 +LINE + 5 +1158 + 8 +0 + 62 + 0 + 10 +17049.999956 + 20 +3807.179702 + 30 +0.0 + 11 +17062.499956 + 21 +3828.830337 + 31 +0.0 + 0 +LINE + 5 +1159 + 8 +0 + 62 + 0 + 10 +3971.84659 + 20 +3790.0 + 30 +0.0 + 11 +3985.0 + 21 +3803.15341 + 31 +0.0 + 0 +LINE + 5 +115A + 8 +0 + 62 + 0 + 10 +3892.297077 + 20 +3790.0 + 30 +0.0 + 11 +3985.0 + 21 +3882.702923 + 31 +0.0 + 0 +LINE + 5 +115B + 8 +0 + 62 + 0 + 10 +3870.0 + 20 +3847.252436 + 30 +0.0 + 11 +3985.0 + 21 +3962.252436 + 31 +0.0 + 0 +LINE + 5 +115C + 8 +0 + 62 + 0 + 10 +3870.0 + 20 +3926.801948 + 30 +0.0 + 11 +3985.0 + 21 +4041.801948 + 31 +0.0 + 0 +LINE + 5 +115D + 8 +0 + 62 + 0 + 10 +3870.0 + 20 +4006.351461 + 30 +0.0 + 11 +3985.0 + 21 +4121.351461 + 31 +0.0 + 0 +LINE + 5 +115E + 8 +0 + 62 + 0 + 10 +3870.0 + 20 +4085.900974 + 30 +0.0 + 11 +3985.0 + 21 +4200.900974 + 31 +0.0 + 0 +LINE + 5 +115F + 8 +0 + 62 + 0 + 10 +3870.0 + 20 +4165.450487 + 30 +0.0 + 11 +3985.0 + 21 +4280.450487 + 31 +0.0 + 0 +LINE + 5 +1160 + 8 +0 + 62 + 0 + 10 +3870.0 + 20 +4245.0 + 30 +0.0 + 11 +3985.0 + 21 +4360.0 + 31 +0.0 + 0 +LINE + 5 +1161 + 8 +0 + 62 + 0 + 10 +3870.0 + 20 +4324.549513 + 30 +0.0 + 11 +3985.0 + 21 +4439.549513 + 31 +0.0 + 0 +LINE + 5 +1162 + 8 +0 + 62 + 0 + 10 +3870.0 + 20 +4404.099026 + 30 +0.0 + 11 +3985.0 + 21 +4519.099026 + 31 +0.0 + 0 +LINE + 5 +1163 + 8 +0 + 62 + 0 + 10 +3870.0 + 20 +4483.648539 + 30 +0.0 + 11 +3985.0 + 21 +4598.648539 + 31 +0.0 + 0 +LINE + 5 +1164 + 8 +0 + 62 + 0 + 10 +3870.0 + 20 +4563.198052 + 30 +0.0 + 11 +3985.0 + 21 +4678.198052 + 31 +0.0 + 0 +LINE + 5 +1165 + 8 +0 + 62 + 0 + 10 +3870.0 + 20 +4642.747564 + 30 +0.0 + 11 +3985.0 + 21 +4757.747564 + 31 +0.0 + 0 +LINE + 5 +1166 + 8 +0 + 62 + 0 + 10 +3870.0 + 20 +4722.297077 + 30 +0.0 + 11 +3985.0 + 21 +4837.297077 + 31 +0.0 + 0 +LINE + 5 +1167 + 8 +0 + 62 + 0 + 10 +3870.0 + 20 +4801.84659 + 30 +0.0 + 11 +3985.0 + 21 +4916.84659 + 31 +0.0 + 0 +LINE + 5 +1168 + 8 +0 + 62 + 0 + 10 +3870.0 + 20 +4881.396103 + 30 +0.0 + 11 +3985.0 + 21 +4996.396103 + 31 +0.0 + 0 +LINE + 5 +1169 + 8 +0 + 62 + 0 + 10 +3870.0 + 20 +4960.945616 + 30 +0.0 + 11 +3985.0 + 21 +5075.945616 + 31 +0.0 + 0 +LINE + 5 +116A + 8 +0 + 62 + 0 + 10 +3870.0 + 20 +5040.495129 + 30 +0.0 + 11 +3985.0 + 21 +5155.495129 + 31 +0.0 + 0 +LINE + 5 +116B + 8 +0 + 62 + 0 + 10 +3870.0 + 20 +5120.044642 + 30 +0.0 + 11 +3985.0 + 21 +5235.044642 + 31 +0.0 + 0 +LINE + 5 +116C + 8 +0 + 62 + 0 + 10 +3870.0 + 20 +5199.594155 + 30 +0.0 + 11 +3985.0 + 21 +5314.594155 + 31 +0.0 + 0 +LINE + 5 +116D + 8 +0 + 62 + 0 + 10 +3870.0 + 20 +5279.143667 + 30 +0.0 + 11 +3985.0 + 21 +5394.143667 + 31 +0.0 + 0 +LINE + 5 +116E + 8 +0 + 62 + 0 + 10 +3870.0 + 20 +5358.69318 + 30 +0.0 + 11 +3985.0 + 21 +5473.69318 + 31 +0.0 + 0 +LINE + 5 +116F + 8 +0 + 62 + 0 + 10 +3870.0 + 20 +5438.242693 + 30 +0.0 + 11 +3985.0 + 21 +5553.242693 + 31 +0.0 + 0 +LINE + 5 +1170 + 8 +0 + 62 + 0 + 10 +3870.0 + 20 +5517.792206 + 30 +0.0 + 11 +3985.0 + 21 +5632.792206 + 31 +0.0 + 0 +LINE + 5 +1171 + 8 +0 + 62 + 0 + 10 +3870.0 + 20 +5597.341719 + 30 +0.0 + 11 +3985.0 + 21 +5712.341719 + 31 +0.0 + 0 +LINE + 5 +1172 + 8 +0 + 62 + 0 + 10 +17130.0 + 20 +5731.672093 + 30 +0.0 + 11 +17138.327907 + 21 +5740.0 + 31 +0.0 + 0 +LINE + 5 +1173 + 8 +0 + 62 + 0 + 10 +17130.0 + 20 +5572.573067 + 30 +0.0 + 11 +17245.0 + 21 +5687.573067 + 31 +0.0 + 0 +LINE + 5 +1174 + 8 +0 + 62 + 0 + 10 +17130.0 + 20 +5493.023555 + 30 +0.0 + 11 +17245.0 + 21 +5608.023555 + 31 +0.0 + 0 +LINE + 5 +1175 + 8 +0 + 62 + 0 + 10 +17130.0 + 20 +5413.474042 + 30 +0.0 + 11 +17245.0 + 21 +5528.474042 + 31 +0.0 + 0 +LINE + 5 +1176 + 8 +0 + 62 + 0 + 10 +17130.0 + 20 +5333.924529 + 30 +0.0 + 11 +17245.0 + 21 +5448.924529 + 31 +0.0 + 0 +LINE + 5 +1177 + 8 +0 + 62 + 0 + 10 +17130.0 + 20 +5254.375016 + 30 +0.0 + 11 +17245.0 + 21 +5369.375016 + 31 +0.0 + 0 +LINE + 5 +1178 + 8 +0 + 62 + 0 + 10 +17130.0 + 20 +5174.825503 + 30 +0.0 + 11 +17245.0 + 21 +5289.825503 + 31 +0.0 + 0 +LINE + 5 +1179 + 8 +0 + 62 + 0 + 10 +17130.0 + 20 +5095.27599 + 30 +0.0 + 11 +17245.0 + 21 +5210.27599 + 31 +0.0 + 0 +LINE + 5 +117A + 8 +0 + 62 + 0 + 10 +17130.0 + 20 +5015.726477 + 30 +0.0 + 11 +17245.0 + 21 +5130.726477 + 31 +0.0 + 0 +LINE + 5 +117B + 8 +0 + 62 + 0 + 10 +17130.0 + 20 +4936.176964 + 30 +0.0 + 11 +17245.0 + 21 +5051.176964 + 31 +0.0 + 0 +LINE + 5 +117C + 8 +0 + 62 + 0 + 10 +17130.0 + 20 +4856.627452 + 30 +0.0 + 11 +17245.0 + 21 +4971.627452 + 31 +0.0 + 0 +LINE + 5 +117D + 8 +0 + 62 + 0 + 10 +17130.0 + 20 +4777.077939 + 30 +0.0 + 11 +17245.0 + 21 +4892.077939 + 31 +0.0 + 0 +LINE + 5 +117E + 8 +0 + 62 + 0 + 10 +17130.0 + 20 +4697.528426 + 30 +0.0 + 11 +17245.0 + 21 +4812.528426 + 31 +0.0 + 0 +LINE + 5 +117F + 8 +0 + 62 + 0 + 10 +17130.0 + 20 +4617.978913 + 30 +0.0 + 11 +17245.0 + 21 +4732.978913 + 31 +0.0 + 0 +LINE + 5 +1180 + 8 +0 + 62 + 0 + 10 +17130.0 + 20 +4538.4294 + 30 +0.0 + 11 +17245.0 + 21 +4653.4294 + 31 +0.0 + 0 +LINE + 5 +1181 + 8 +0 + 62 + 0 + 10 +17130.0 + 20 +4458.879887 + 30 +0.0 + 11 +17245.0 + 21 +4573.879887 + 31 +0.0 + 0 +LINE + 5 +1182 + 8 +0 + 62 + 0 + 10 +17130.0 + 20 +4379.330374 + 30 +0.0 + 11 +17245.0 + 21 +4494.330374 + 31 +0.0 + 0 +LINE + 5 +1183 + 8 +0 + 62 + 0 + 10 +17130.0 + 20 +4299.780861 + 30 +0.0 + 11 +17245.0 + 21 +4414.780861 + 31 +0.0 + 0 +LINE + 5 +1184 + 8 +0 + 62 + 0 + 10 +17130.0 + 20 +4220.231348 + 30 +0.0 + 11 +17245.0 + 21 +4335.231348 + 31 +0.0 + 0 +LINE + 5 +1185 + 8 +0 + 62 + 0 + 10 +17130.0 + 20 +4140.681836 + 30 +0.0 + 11 +17245.0 + 21 +4255.681836 + 31 +0.0 + 0 +LINE + 5 +1186 + 8 +0 + 62 + 0 + 10 +17130.0 + 20 +4061.132323 + 30 +0.0 + 11 +17245.0 + 21 +4176.132323 + 31 +0.0 + 0 +LINE + 5 +1187 + 8 +0 + 62 + 0 + 10 +17130.0 + 20 +3981.58281 + 30 +0.0 + 11 +17245.0 + 21 +4096.58281 + 31 +0.0 + 0 +LINE + 5 +1188 + 8 +0 + 62 + 0 + 10 +17130.0 + 20 +3902.033297 + 30 +0.0 + 11 +17245.0 + 21 +4017.033297 + 31 +0.0 + 0 +LINE + 5 +1189 + 8 +0 + 62 + 0 + 10 +17130.0 + 20 +3822.483784 + 30 +0.0 + 11 +17245.0 + 21 +3937.483784 + 31 +0.0 + 0 +LINE + 5 +118A + 8 +0 + 62 + 0 + 10 +17177.065729 + 20 +3790.0 + 30 +0.0 + 11 +17245.0 + 21 +3857.934271 + 31 +0.0 + 0 +POLYLINE + 5 +118B + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +25DB + 8 +MAUERWERK + 10 +4125.0 + 20 +4335.0 + 30 +0.0 + 0 +VERTEX + 5 +25DC + 8 +MAUERWERK + 10 +4125.0 + 20 +3790.0 + 30 +0.0 + 0 +SEQEND + 5 +25DD + 8 +MAUERWERK + 0 +POLYLINE + 5 +118F + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +25DE + 8 +MAUERWERK + 10 +4490.0 + 20 +3790.0 + 30 +0.0 + 0 +VERTEX + 5 +25DF + 8 +MAUERWERK + 10 +4490.0 + 20 +4335.0 + 30 +0.0 + 0 +VERTEX + 5 +25E0 + 8 +MAUERWERK + 10 +4125.0 + 20 +4335.0 + 30 +0.0 + 0 +SEQEND + 5 +25E1 + 8 +MAUERWERK + 0 +POLYLINE + 5 +1194 + 8 +DAEMMUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +25E2 + 8 +DAEMMUNG + 10 +4125.0 + 20 +5740.0 + 30 +0.0 + 0 +VERTEX + 5 +25E3 + 8 +DAEMMUNG + 10 +4045.0 + 20 +5740.0 + 30 +0.0 + 0 +VERTEX + 5 +25E4 + 8 +DAEMMUNG + 10 +4045.0 + 20 +3790.0 + 30 +0.0 + 0 +SEQEND + 5 +25E5 + 8 +DAEMMUNG + 0 +POLYLINE + 5 +1199 + 8 +DAEMMUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +25E6 + 8 +DAEMMUNG + 10 +4125.0 + 20 +3790.0 + 30 +0.0 + 0 +VERTEX + 5 +25E7 + 8 +DAEMMUNG + 10 +4125.0 + 20 +5740.0 + 30 +0.0 + 0 +SEQEND + 5 +25E8 + 8 +DAEMMUNG + 0 +POLYLINE + 5 +119D + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +25E9 + 8 +MAUERWERK + 10 +3870.0 + 20 +5692.482548 + 30 +0.0 + 0 +VERTEX + 5 +25EA + 8 +MAUERWERK + 10 +3870.0 + 20 +3790.0 + 30 +0.0 + 0 +SEQEND + 5 +25EB + 8 +MAUERWERK + 0 +POLYLINE + 5 +11A1 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +25EC + 8 +MAUERWERK + 10 +3985.0 + 20 +3790.0 + 30 +0.0 + 0 +VERTEX + 5 +25ED + 8 +MAUERWERK + 10 +3985.0 + 20 +5740.0 + 30 +0.0 + 0 +VERTEX + 5 +25EE + 8 +MAUERWERK + 10 +3946.043819 + 20 +5740.0 + 30 +0.0 + 0 +SEQEND + 5 +25EF + 8 +MAUERWERK + 0 +POLYLINE + 5 +11A6 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +25F0 + 8 +MAUERWERK + 10 +9000.0 + 20 +4340.0 + 30 +0.0 + 0 +VERTEX + 5 +25F1 + 8 +MAUERWERK + 10 +9000.0 + 20 +3790.0 + 30 +0.0 + 0 +SEQEND + 5 +25F2 + 8 +MAUERWERK + 0 +POLYLINE + 5 +11AA + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +25F3 + 8 +MAUERWERK + 10 +9365.0 + 20 +3790.0 + 30 +0.0 + 0 +VERTEX + 5 +25F4 + 8 +MAUERWERK + 10 +9365.0 + 20 +4340.0 + 30 +0.0 + 0 +VERTEX + 5 +25F5 + 8 +MAUERWERK + 10 +9000.0 + 20 +4340.0 + 30 +0.0 + 0 +SEQEND + 5 +25F6 + 8 +MAUERWERK + 0 +POLYLINE + 5 +11AF + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +25F7 + 8 +MAUERWERK + 10 +11750.0 + 20 +4340.0 + 30 +0.0 + 0 +VERTEX + 5 +25F8 + 8 +MAUERWERK + 10 +11750.0 + 20 +3790.0 + 30 +0.0 + 0 +SEQEND + 5 +25F9 + 8 +MAUERWERK + 0 +POLYLINE + 5 +11B3 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +25FA + 8 +MAUERWERK + 10 +12115.0 + 20 +3790.0 + 30 +0.0 + 0 +VERTEX + 5 +25FB + 8 +MAUERWERK + 10 +12115.0 + 20 +4340.0 + 30 +0.0 + 0 +VERTEX + 5 +25FC + 8 +MAUERWERK + 10 +11750.0 + 20 +4340.0 + 30 +0.0 + 0 +SEQEND + 5 +25FD + 8 +MAUERWERK + 0 +POLYLINE + 5 +11B8 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +25FE + 8 +MAUERWERK + 10 +16625.0 + 20 +4335.0 + 30 +0.0 + 0 +VERTEX + 5 +25FF + 8 +MAUERWERK + 10 +16625.0 + 20 +3790.0 + 30 +0.0 + 0 +SEQEND + 5 +2600 + 8 +MAUERWERK + 0 +POLYLINE + 5 +11BC + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +2601 + 8 +MAUERWERK + 10 +16990.0 + 20 +3790.0 + 30 +0.0 + 0 +VERTEX + 5 +2602 + 8 +MAUERWERK + 10 +16990.0 + 20 +4335.0 + 30 +0.0 + 0 +VERTEX + 5 +2603 + 8 +MAUERWERK + 10 +16625.0 + 20 +4335.0 + 30 +0.0 + 0 +SEQEND + 5 +2604 + 8 +MAUERWERK + 0 +POLYLINE + 5 +11C1 + 8 +DAEMMUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2605 + 8 +DAEMMUNG + 10 +16990.0 + 20 +5740.0 + 30 +0.0 + 0 +VERTEX + 5 +2606 + 8 +DAEMMUNG + 10 +17070.0 + 20 +5740.0 + 30 +0.0 + 0 +VERTEX + 5 +2607 + 8 +DAEMMUNG + 10 +17070.0 + 20 +3790.0 + 30 +0.0 + 0 +SEQEND + 5 +2608 + 8 +DAEMMUNG + 0 +POLYLINE + 5 +11C6 + 8 +DAEMMUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2609 + 8 +DAEMMUNG + 10 +16990.0 + 20 +3790.0 + 30 +0.0 + 0 +VERTEX + 5 +260A + 8 +DAEMMUNG + 10 +16990.0 + 20 +5740.0 + 30 +0.0 + 0 +SEQEND + 5 +260B + 8 +DAEMMUNG + 0 +POLYLINE + 5 +11CA + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +260C + 8 +MAUERWERK + 10 +17245.0 + 20 +5692.482548 + 30 +0.0 + 0 +VERTEX + 5 +260D + 8 +MAUERWERK + 10 +17245.0 + 20 +3790.0 + 30 +0.0 + 0 +SEQEND + 5 +260E + 8 +MAUERWERK + 0 +POLYLINE + 5 +11CE + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +260F + 8 +MAUERWERK + 10 +17130.0 + 20 +3790.0 + 30 +0.0 + 0 +VERTEX + 5 +2610 + 8 +MAUERWERK + 10 +17130.0 + 20 +5740.0 + 30 +0.0 + 0 +VERTEX + 5 +2611 + 8 +MAUERWERK + 10 +17168.956181 + 20 +5740.0 + 30 +0.0 + 0 +SEQEND + 5 +2612 + 8 +MAUERWERK + 0 +POLYLINE + 5 +11D3 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2613 + 8 +HOLZ + 10 +8490.0 + 20 +4525.0 + 30 +0.0 + 0 +VERTEX + 5 +2614 + 8 +HOLZ + 10 +8490.0 + 20 +4705.0 + 30 +0.0 + 0 +SEQEND + 5 +2615 + 8 +HOLZ + 0 +POLYLINE + 5 +11D7 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2616 + 8 +HOLZ + 10 +12625.0 + 20 +4525.0 + 30 +0.0 + 0 +VERTEX + 5 +2617 + 8 +HOLZ + 10 +12625.0 + 20 +4705.0 + 30 +0.0 + 0 +SEQEND + 5 +2618 + 8 +HOLZ + 0 +POLYLINE + 5 +11DB + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2619 + 8 +DETAILS + 10 +4795.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +261A + 8 +DETAILS + 10 +4795.0 + 20 +4680.0 + 30 +0.0 + 0 +SEQEND + 5 +261B + 8 +DETAILS + 0 +POLYLINE + 5 +11DF + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +261C + 8 +DETAILS + 10 +4795.0 + 20 +4665.0 + 30 +0.0 + 0 +VERTEX + 5 +261D + 8 +DETAILS + 10 +4795.0 + 20 +4640.0 + 30 +0.0 + 0 +SEQEND + 5 +261E + 8 +DETAILS + 0 +POLYLINE + 5 +11E3 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +261F + 8 +DETAILS + 10 +4795.0 + 20 +4625.0 + 30 +0.0 + 0 +VERTEX + 5 +2620 + 8 +DETAILS + 10 +4795.0 + 20 +4600.0 + 30 +0.0 + 0 +SEQEND + 5 +2621 + 8 +DETAILS + 0 +POLYLINE + 5 +11E7 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2622 + 8 +DETAILS + 10 +4795.0 + 20 +4585.0 + 30 +0.0 + 0 +VERTEX + 5 +2623 + 8 +DETAILS + 10 +4795.0 + 20 +4560.0 + 30 +0.0 + 0 +SEQEND + 5 +2624 + 8 +DETAILS + 0 +POLYLINE + 5 +11EB + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2625 + 8 +DETAILS + 10 +4795.0 + 20 +4540.0 + 30 +0.0 + 0 +VERTEX + 5 +2626 + 8 +DETAILS + 10 +4795.0 + 20 +4515.0 + 30 +0.0 + 0 +SEQEND + 5 +2627 + 8 +DETAILS + 0 +POLYLINE + 5 +11EF + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2628 + 8 +DETAILS + 10 +4795.0 + 20 +4485.0 + 30 +0.0 + 0 +VERTEX + 5 +2629 + 8 +DETAILS + 10 +4795.0 + 20 +4460.0 + 30 +0.0 + 0 +SEQEND + 5 +262A + 8 +DETAILS + 0 +POLYLINE + 5 +11F3 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +262B + 8 +DETAILS + 10 +4795.0 + 20 +4440.0 + 30 +0.0 + 0 +VERTEX + 5 +262C + 8 +DETAILS + 10 +4795.0 + 20 +4415.0 + 30 +0.0 + 0 +SEQEND + 5 +262D + 8 +DETAILS + 0 +POLYLINE + 5 +11F7 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +262E + 8 +DETAILS + 10 +4795.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +262F + 8 +DETAILS + 10 +4780.0 + 20 +4725.0 + 30 +0.0 + 0 +SEQEND + 5 +2630 + 8 +DETAILS + 0 +POLYLINE + 5 +11FB + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2631 + 8 +DETAILS + 10 +4795.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +2632 + 8 +DETAILS + 10 +4810.0 + 20 +4725.0 + 30 +0.0 + 0 +SEQEND + 5 +2633 + 8 +DETAILS + 0 +POLYLINE + 5 +11FF + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2634 + 8 +DETAILS + 10 +8105.0 + 20 +4665.0 + 30 +0.0 + 0 +VERTEX + 5 +2635 + 8 +DETAILS + 10 +8105.0 + 20 +4640.0 + 30 +0.0 + 0 +SEQEND + 5 +2636 + 8 +DETAILS + 0 +POLYLINE + 5 +1203 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2637 + 8 +DETAILS + 10 +8105.0 + 20 +4440.0 + 30 +0.0 + 0 +VERTEX + 5 +2638 + 8 +DETAILS + 10 +8105.0 + 20 +4415.0 + 30 +0.0 + 0 +SEQEND + 5 +2639 + 8 +DETAILS + 0 +POLYLINE + 5 +1207 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +263A + 8 +DETAILS + 10 +8105.0 + 20 +4485.0 + 30 +0.0 + 0 +VERTEX + 5 +263B + 8 +DETAILS + 10 +8105.0 + 20 +4460.0 + 30 +0.0 + 0 +SEQEND + 5 +263C + 8 +DETAILS + 0 +POLYLINE + 5 +120B + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +263D + 8 +DETAILS + 10 +8105.0 + 20 +4540.0 + 30 +0.0 + 0 +VERTEX + 5 +263E + 8 +DETAILS + 10 +8105.0 + 20 +4515.0 + 30 +0.0 + 0 +SEQEND + 5 +263F + 8 +DETAILS + 0 +POLYLINE + 5 +120F + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2640 + 8 +DETAILS + 10 +8105.0 + 20 +4585.0 + 30 +0.0 + 0 +VERTEX + 5 +2641 + 8 +DETAILS + 10 +8105.0 + 20 +4560.0 + 30 +0.0 + 0 +SEQEND + 5 +2642 + 8 +DETAILS + 0 +POLYLINE + 5 +1213 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2643 + 8 +DETAILS + 10 +8105.0 + 20 +4625.0 + 30 +0.0 + 0 +VERTEX + 5 +2644 + 8 +DETAILS + 10 +8105.0 + 20 +4600.0 + 30 +0.0 + 0 +SEQEND + 5 +2645 + 8 +DETAILS + 0 +POLYLINE + 5 +1217 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2646 + 8 +DETAILS + 10 +8105.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +2647 + 8 +DETAILS + 10 +8120.0 + 20 +4725.0 + 30 +0.0 + 0 +SEQEND + 5 +2648 + 8 +DETAILS + 0 +POLYLINE + 5 +121B + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2649 + 8 +DETAILS + 10 +8105.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +264A + 8 +DETAILS + 10 +8090.0 + 20 +4725.0 + 30 +0.0 + 0 +SEQEND + 5 +264B + 8 +DETAILS + 0 +POLYLINE + 5 +121F + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +264C + 8 +DETAILS + 10 +8105.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +264D + 8 +DETAILS + 10 +8105.0 + 20 +4680.0 + 30 +0.0 + 0 +SEQEND + 5 +264E + 8 +DETAILS + 0 +POLYLINE + 5 +1223 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +264F + 8 +DETAILS + 10 +6615.0 + 20 +4665.0 + 30 +0.0 + 0 +VERTEX + 5 +2650 + 8 +DETAILS + 10 +6615.0 + 20 +4640.0 + 30 +0.0 + 0 +SEQEND + 5 +2651 + 8 +DETAILS + 0 +POLYLINE + 5 +1227 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2652 + 8 +DETAILS + 10 +6615.0 + 20 +4440.0 + 30 +0.0 + 0 +VERTEX + 5 +2653 + 8 +DETAILS + 10 +6615.0 + 20 +4415.0 + 30 +0.0 + 0 +SEQEND + 5 +2654 + 8 +DETAILS + 0 +POLYLINE + 5 +122B + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2655 + 8 +DETAILS + 10 +6615.0 + 20 +4485.0 + 30 +0.0 + 0 +VERTEX + 5 +2656 + 8 +DETAILS + 10 +6615.0 + 20 +4460.0 + 30 +0.0 + 0 +SEQEND + 5 +2657 + 8 +DETAILS + 0 +POLYLINE + 5 +122F + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2658 + 8 +DETAILS + 10 +6615.0 + 20 +4540.0 + 30 +0.0 + 0 +VERTEX + 5 +2659 + 8 +DETAILS + 10 +6615.0 + 20 +4515.0 + 30 +0.0 + 0 +SEQEND + 5 +265A + 8 +DETAILS + 0 +POLYLINE + 5 +1233 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +265B + 8 +DETAILS + 10 +6615.0 + 20 +4585.0 + 30 +0.0 + 0 +VERTEX + 5 +265C + 8 +DETAILS + 10 +6615.0 + 20 +4560.0 + 30 +0.0 + 0 +SEQEND + 5 +265D + 8 +DETAILS + 0 +POLYLINE + 5 +1237 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +265E + 8 +DETAILS + 10 +6615.0 + 20 +4625.0 + 30 +0.0 + 0 +VERTEX + 5 +265F + 8 +DETAILS + 10 +6615.0 + 20 +4600.0 + 30 +0.0 + 0 +SEQEND + 5 +2660 + 8 +DETAILS + 0 +POLYLINE + 5 +123B + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2661 + 8 +DETAILS + 10 +6615.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +2662 + 8 +DETAILS + 10 +6630.0 + 20 +4725.0 + 30 +0.0 + 0 +SEQEND + 5 +2663 + 8 +DETAILS + 0 +POLYLINE + 5 +123F + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2664 + 8 +DETAILS + 10 +6615.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +2665 + 8 +DETAILS + 10 +6600.0 + 20 +4725.0 + 30 +0.0 + 0 +SEQEND + 5 +2666 + 8 +DETAILS + 0 +POLYLINE + 5 +1243 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2667 + 8 +DETAILS + 10 +6615.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +2668 + 8 +DETAILS + 10 +6615.0 + 20 +4680.0 + 30 +0.0 + 0 +SEQEND + 5 +2669 + 8 +DETAILS + 0 +POLYLINE + 5 +1247 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +266A + 8 +DETAILS + 10 +16320.0 + 20 +4665.0 + 30 +0.0 + 0 +VERTEX + 5 +266B + 8 +DETAILS + 10 +16320.0 + 20 +4640.0 + 30 +0.0 + 0 +SEQEND + 5 +266C + 8 +DETAILS + 0 +POLYLINE + 5 +124B + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +266D + 8 +DETAILS + 10 +16320.0 + 20 +4440.0 + 30 +0.0 + 0 +VERTEX + 5 +266E + 8 +DETAILS + 10 +16320.0 + 20 +4415.0 + 30 +0.0 + 0 +SEQEND + 5 +266F + 8 +DETAILS + 0 +POLYLINE + 5 +124F + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2670 + 8 +DETAILS + 10 +16320.0 + 20 +4485.0 + 30 +0.0 + 0 +VERTEX + 5 +2671 + 8 +DETAILS + 10 +16320.0 + 20 +4460.0 + 30 +0.0 + 0 +SEQEND + 5 +2672 + 8 +DETAILS + 0 +POLYLINE + 5 +1253 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2673 + 8 +DETAILS + 10 +16320.0 + 20 +4540.0 + 30 +0.0 + 0 +VERTEX + 5 +2674 + 8 +DETAILS + 10 +16320.0 + 20 +4515.0 + 30 +0.0 + 0 +SEQEND + 5 +2675 + 8 +DETAILS + 0 +POLYLINE + 5 +1257 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2676 + 8 +DETAILS + 10 +16320.0 + 20 +4585.0 + 30 +0.0 + 0 +VERTEX + 5 +2677 + 8 +DETAILS + 10 +16320.0 + 20 +4560.0 + 30 +0.0 + 0 +SEQEND + 5 +2678 + 8 +DETAILS + 0 +POLYLINE + 5 +125B + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2679 + 8 +DETAILS + 10 +16320.0 + 20 +4625.0 + 30 +0.0 + 0 +VERTEX + 5 +267A + 8 +DETAILS + 10 +16320.0 + 20 +4600.0 + 30 +0.0 + 0 +SEQEND + 5 +267B + 8 +DETAILS + 0 +POLYLINE + 5 +125F + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +267C + 8 +DETAILS + 10 +16320.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +267D + 8 +DETAILS + 10 +16305.0 + 20 +4725.0 + 30 +0.0 + 0 +SEQEND + 5 +267E + 8 +DETAILS + 0 +POLYLINE + 5 +1263 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +267F + 8 +DETAILS + 10 +16320.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +2680 + 8 +DETAILS + 10 +16335.0 + 20 +4725.0 + 30 +0.0 + 0 +SEQEND + 5 +2681 + 8 +DETAILS + 0 +POLYLINE + 5 +1267 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2682 + 8 +DETAILS + 10 +16320.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +2683 + 8 +DETAILS + 10 +16320.0 + 20 +4680.0 + 30 +0.0 + 0 +SEQEND + 5 +2684 + 8 +DETAILS + 0 +POLYLINE + 5 +126B + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2685 + 8 +DETAILS + 10 +14500.0 + 20 +4665.0 + 30 +0.0 + 0 +VERTEX + 5 +2686 + 8 +DETAILS + 10 +14500.0 + 20 +4640.0 + 30 +0.0 + 0 +SEQEND + 5 +2687 + 8 +DETAILS + 0 +POLYLINE + 5 +126F + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2688 + 8 +DETAILS + 10 +14500.0 + 20 +4625.0 + 30 +0.0 + 0 +VERTEX + 5 +2689 + 8 +DETAILS + 10 +14500.0 + 20 +4600.0 + 30 +0.0 + 0 +SEQEND + 5 +268A + 8 +DETAILS + 0 +POLYLINE + 5 +1273 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +268B + 8 +DETAILS + 10 +14500.0 + 20 +4585.0 + 30 +0.0 + 0 +VERTEX + 5 +268C + 8 +DETAILS + 10 +14500.0 + 20 +4560.0 + 30 +0.0 + 0 +SEQEND + 5 +268D + 8 +DETAILS + 0 +POLYLINE + 5 +1277 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +268E + 8 +DETAILS + 10 +14500.0 + 20 +4540.0 + 30 +0.0 + 0 +VERTEX + 5 +268F + 8 +DETAILS + 10 +14500.0 + 20 +4515.0 + 30 +0.0 + 0 +SEQEND + 5 +2690 + 8 +DETAILS + 0 +POLYLINE + 5 +127B + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2691 + 8 +DETAILS + 10 +14500.0 + 20 +4485.0 + 30 +0.0 + 0 +VERTEX + 5 +2692 + 8 +DETAILS + 10 +14500.0 + 20 +4460.0 + 30 +0.0 + 0 +SEQEND + 5 +2693 + 8 +DETAILS + 0 +POLYLINE + 5 +127F + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2694 + 8 +DETAILS + 10 +14500.0 + 20 +4440.0 + 30 +0.0 + 0 +VERTEX + 5 +2695 + 8 +DETAILS + 10 +14500.0 + 20 +4415.0 + 30 +0.0 + 0 +SEQEND + 5 +2696 + 8 +DETAILS + 0 +POLYLINE + 5 +1283 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2697 + 8 +DETAILS + 10 +14500.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +2698 + 8 +DETAILS + 10 +14515.0 + 20 +4725.0 + 30 +0.0 + 0 +SEQEND + 5 +2699 + 8 +DETAILS + 0 +POLYLINE + 5 +1287 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +269A + 8 +DETAILS + 10 +14500.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +269B + 8 +DETAILS + 10 +14500.0 + 20 +4680.0 + 30 +0.0 + 0 +SEQEND + 5 +269C + 8 +DETAILS + 0 +POLYLINE + 5 +128B + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +269D + 8 +DETAILS + 10 +14500.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +269E + 8 +DETAILS + 10 +14485.0 + 20 +4725.0 + 30 +0.0 + 0 +SEQEND + 5 +269F + 8 +DETAILS + 0 +POLYLINE + 5 +128F + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +26A0 + 8 +DETAILS + 10 +13010.0 + 20 +4665.0 + 30 +0.0 + 0 +VERTEX + 5 +26A1 + 8 +DETAILS + 10 +13010.0 + 20 +4640.0 + 30 +0.0 + 0 +SEQEND + 5 +26A2 + 8 +DETAILS + 0 +POLYLINE + 5 +1293 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +26A3 + 8 +DETAILS + 10 +13010.0 + 20 +4440.0 + 30 +0.0 + 0 +VERTEX + 5 +26A4 + 8 +DETAILS + 10 +13010.0 + 20 +4415.0 + 30 +0.0 + 0 +SEQEND + 5 +26A5 + 8 +DETAILS + 0 +POLYLINE + 5 +1297 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +26A6 + 8 +DETAILS + 10 +13010.0 + 20 +4485.0 + 30 +0.0 + 0 +VERTEX + 5 +26A7 + 8 +DETAILS + 10 +13010.0 + 20 +4460.0 + 30 +0.0 + 0 +SEQEND + 5 +26A8 + 8 +DETAILS + 0 +POLYLINE + 5 +129B + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +26A9 + 8 +DETAILS + 10 +13010.0 + 20 +4540.0 + 30 +0.0 + 0 +VERTEX + 5 +26AA + 8 +DETAILS + 10 +13010.0 + 20 +4515.0 + 30 +0.0 + 0 +SEQEND + 5 +26AB + 8 +DETAILS + 0 +POLYLINE + 5 +129F + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +26AC + 8 +DETAILS + 10 +13010.0 + 20 +4585.0 + 30 +0.0 + 0 +VERTEX + 5 +26AD + 8 +DETAILS + 10 +13010.0 + 20 +4560.0 + 30 +0.0 + 0 +SEQEND + 5 +26AE + 8 +DETAILS + 0 +POLYLINE + 5 +12A3 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +26AF + 8 +DETAILS + 10 +13010.0 + 20 +4625.0 + 30 +0.0 + 0 +VERTEX + 5 +26B0 + 8 +DETAILS + 10 +13010.0 + 20 +4600.0 + 30 +0.0 + 0 +SEQEND + 5 +26B1 + 8 +DETAILS + 0 +POLYLINE + 5 +12A7 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +26B2 + 8 +DETAILS + 10 +13010.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +26B3 + 8 +DETAILS + 10 +12995.0 + 20 +4725.0 + 30 +0.0 + 0 +SEQEND + 5 +26B4 + 8 +DETAILS + 0 +POLYLINE + 5 +12AB + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +26B5 + 8 +DETAILS + 10 +13010.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +26B6 + 8 +DETAILS + 10 +13025.0 + 20 +4725.0 + 30 +0.0 + 0 +SEQEND + 5 +26B7 + 8 +DETAILS + 0 +POLYLINE + 5 +12AF + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +26B8 + 8 +DETAILS + 10 +13010.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +26B9 + 8 +DETAILS + 10 +13010.0 + 20 +4680.0 + 30 +0.0 + 0 +SEQEND + 5 +26BA + 8 +DETAILS + 0 +POLYLINE + 5 +12B3 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +26BB + 8 +DETAILS + 10 +10155.0 + 20 +4665.0 + 30 +0.0 + 0 +VERTEX + 5 +26BC + 8 +DETAILS + 10 +10155.0 + 20 +4640.0 + 30 +0.0 + 0 +SEQEND + 5 +26BD + 8 +DETAILS + 0 +POLYLINE + 5 +12B7 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +26BE + 8 +DETAILS + 10 +10155.0 + 20 +4440.0 + 30 +0.0 + 0 +VERTEX + 5 +26BF + 8 +DETAILS + 10 +10155.0 + 20 +4415.0 + 30 +0.0 + 0 +SEQEND + 5 +26C0 + 8 +DETAILS + 0 +POLYLINE + 5 +12BB + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +26C1 + 8 +DETAILS + 10 +10155.0 + 20 +4485.0 + 30 +0.0 + 0 +VERTEX + 5 +26C2 + 8 +DETAILS + 10 +10155.0 + 20 +4460.0 + 30 +0.0 + 0 +SEQEND + 5 +26C3 + 8 +DETAILS + 0 +POLYLINE + 5 +12BF + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +26C4 + 8 +DETAILS + 10 +10155.0 + 20 +4540.0 + 30 +0.0 + 0 +VERTEX + 5 +26C5 + 8 +DETAILS + 10 +10155.0 + 20 +4515.0 + 30 +0.0 + 0 +SEQEND + 5 +26C6 + 8 +DETAILS + 0 +POLYLINE + 5 +12C3 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +26C7 + 8 +DETAILS + 10 +10155.0 + 20 +4585.0 + 30 +0.0 + 0 +VERTEX + 5 +26C8 + 8 +DETAILS + 10 +10155.0 + 20 +4560.0 + 30 +0.0 + 0 +SEQEND + 5 +26C9 + 8 +DETAILS + 0 +POLYLINE + 5 +12C7 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +26CA + 8 +DETAILS + 10 +10155.0 + 20 +4625.0 + 30 +0.0 + 0 +VERTEX + 5 +26CB + 8 +DETAILS + 10 +10155.0 + 20 +4600.0 + 30 +0.0 + 0 +SEQEND + 5 +26CC + 8 +DETAILS + 0 +POLYLINE + 5 +12CB + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +26CD + 8 +DETAILS + 10 +10155.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +26CE + 8 +DETAILS + 10 +10170.0 + 20 +4725.0 + 30 +0.0 + 0 +SEQEND + 5 +26CF + 8 +DETAILS + 0 +POLYLINE + 5 +12CF + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +26D0 + 8 +DETAILS + 10 +10155.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +26D1 + 8 +DETAILS + 10 +10140.0 + 20 +4725.0 + 30 +0.0 + 0 +SEQEND + 5 +26D2 + 8 +DETAILS + 0 +POLYLINE + 5 +12D3 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +26D3 + 8 +DETAILS + 10 +10155.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +26D4 + 8 +DETAILS + 10 +10155.0 + 20 +4680.0 + 30 +0.0 + 0 +SEQEND + 5 +26D5 + 8 +DETAILS + 0 +POLYLINE + 5 +12D7 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +26D6 + 8 +DETAILS + 10 +8840.0 + 20 +4665.0 + 30 +0.0 + 0 +VERTEX + 5 +26D7 + 8 +DETAILS + 10 +8840.0 + 20 +4640.0 + 30 +0.0 + 0 +SEQEND + 5 +26D8 + 8 +DETAILS + 0 +POLYLINE + 5 +12DB + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +26D9 + 8 +DETAILS + 10 +8840.0 + 20 +4625.0 + 30 +0.0 + 0 +VERTEX + 5 +26DA + 8 +DETAILS + 10 +8840.0 + 20 +4600.0 + 30 +0.0 + 0 +SEQEND + 5 +26DB + 8 +DETAILS + 0 +POLYLINE + 5 +12DF + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +26DC + 8 +DETAILS + 10 +8840.0 + 20 +4585.0 + 30 +0.0 + 0 +VERTEX + 5 +26DD + 8 +DETAILS + 10 +8840.0 + 20 +4560.0 + 30 +0.0 + 0 +SEQEND + 5 +26DE + 8 +DETAILS + 0 +POLYLINE + 5 +12E3 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +26DF + 8 +DETAILS + 10 +8840.0 + 20 +4540.0 + 30 +0.0 + 0 +VERTEX + 5 +26E0 + 8 +DETAILS + 10 +8840.0 + 20 +4515.0 + 30 +0.0 + 0 +SEQEND + 5 +26E1 + 8 +DETAILS + 0 +POLYLINE + 5 +12E7 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +26E2 + 8 +DETAILS + 10 +8840.0 + 20 +4485.0 + 30 +0.0 + 0 +VERTEX + 5 +26E3 + 8 +DETAILS + 10 +8840.0 + 20 +4460.0 + 30 +0.0 + 0 +SEQEND + 5 +26E4 + 8 +DETAILS + 0 +POLYLINE + 5 +12EB + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +26E5 + 8 +DETAILS + 10 +8840.0 + 20 +4440.0 + 30 +0.0 + 0 +VERTEX + 5 +26E6 + 8 +DETAILS + 10 +8840.0 + 20 +4415.0 + 30 +0.0 + 0 +SEQEND + 5 +26E7 + 8 +DETAILS + 0 +POLYLINE + 5 +12EF + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +26E8 + 8 +DETAILS + 10 +8840.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +26E9 + 8 +DETAILS + 10 +8840.0 + 20 +4680.0 + 30 +0.0 + 0 +SEQEND + 5 +26EA + 8 +DETAILS + 0 +POLYLINE + 5 +12F3 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +26EB + 8 +DETAILS + 10 +8840.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +26EC + 8 +DETAILS + 10 +8825.0 + 20 +4725.0 + 30 +0.0 + 0 +SEQEND + 5 +26ED + 8 +DETAILS + 0 +POLYLINE + 5 +12F7 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +26EE + 8 +DETAILS + 10 +8840.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +26EF + 8 +DETAILS + 10 +8855.0 + 20 +4725.0 + 30 +0.0 + 0 +SEQEND + 5 +26F0 + 8 +DETAILS + 0 +POLYLINE + 5 +12FB + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +26F1 + 8 +DETAILS + 10 +12275.0 + 20 +4665.0 + 30 +0.0 + 0 +VERTEX + 5 +26F2 + 8 +DETAILS + 10 +12275.0 + 20 +4640.0 + 30 +0.0 + 0 +SEQEND + 5 +26F3 + 8 +DETAILS + 0 +POLYLINE + 5 +12FF + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +26F4 + 8 +DETAILS + 10 +12275.0 + 20 +4440.0 + 30 +0.0 + 0 +VERTEX + 5 +26F5 + 8 +DETAILS + 10 +12275.0 + 20 +4415.0 + 30 +0.0 + 0 +SEQEND + 5 +26F6 + 8 +DETAILS + 0 +POLYLINE + 5 +1303 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +26F7 + 8 +DETAILS + 10 +12275.0 + 20 +4485.0 + 30 +0.0 + 0 +VERTEX + 5 +26F8 + 8 +DETAILS + 10 +12275.0 + 20 +4460.0 + 30 +0.0 + 0 +SEQEND + 5 +26F9 + 8 +DETAILS + 0 +POLYLINE + 5 +1307 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +26FA + 8 +DETAILS + 10 +12275.0 + 20 +4540.0 + 30 +0.0 + 0 +VERTEX + 5 +26FB + 8 +DETAILS + 10 +12275.0 + 20 +4515.0 + 30 +0.0 + 0 +SEQEND + 5 +26FC + 8 +DETAILS + 0 +POLYLINE + 5 +130B + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +26FD + 8 +DETAILS + 10 +12275.0 + 20 +4585.0 + 30 +0.0 + 0 +VERTEX + 5 +26FE + 8 +DETAILS + 10 +12275.0 + 20 +4560.0 + 30 +0.0 + 0 +SEQEND + 5 +26FF + 8 +DETAILS + 0 +POLYLINE + 5 +130F + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2700 + 8 +DETAILS + 10 +12275.0 + 20 +4625.0 + 30 +0.0 + 0 +VERTEX + 5 +2701 + 8 +DETAILS + 10 +12275.0 + 20 +4600.0 + 30 +0.0 + 0 +SEQEND + 5 +2702 + 8 +DETAILS + 0 +POLYLINE + 5 +1313 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2703 + 8 +DETAILS + 10 +12275.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +2704 + 8 +DETAILS + 10 +12260.0 + 20 +4725.0 + 30 +0.0 + 0 +SEQEND + 5 +2705 + 8 +DETAILS + 0 +POLYLINE + 5 +1317 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2706 + 8 +DETAILS + 10 +12275.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +2707 + 8 +DETAILS + 10 +12290.0 + 20 +4725.0 + 30 +0.0 + 0 +SEQEND + 5 +2708 + 8 +DETAILS + 0 +POLYLINE + 5 +131B + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2709 + 8 +DETAILS + 10 +12275.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +270A + 8 +DETAILS + 10 +12275.0 + 20 +4680.0 + 30 +0.0 + 0 +SEQEND + 5 +270B + 8 +DETAILS + 0 +POLYLINE + 5 +131F + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +270C + 8 +DETAILS + 10 +10960.0 + 20 +4665.0 + 30 +0.0 + 0 +VERTEX + 5 +270D + 8 +DETAILS + 10 +10960.0 + 20 +4640.0 + 30 +0.0 + 0 +SEQEND + 5 +270E + 8 +DETAILS + 0 +POLYLINE + 5 +1323 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +270F + 8 +DETAILS + 10 +10960.0 + 20 +4625.0 + 30 +0.0 + 0 +VERTEX + 5 +2710 + 8 +DETAILS + 10 +10960.0 + 20 +4600.0 + 30 +0.0 + 0 +SEQEND + 5 +2711 + 8 +DETAILS + 0 +POLYLINE + 5 +1327 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2712 + 8 +DETAILS + 10 +10960.0 + 20 +4585.0 + 30 +0.0 + 0 +VERTEX + 5 +2713 + 8 +DETAILS + 10 +10960.0 + 20 +4560.0 + 30 +0.0 + 0 +SEQEND + 5 +2714 + 8 +DETAILS + 0 +POLYLINE + 5 +132B + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2715 + 8 +DETAILS + 10 +10960.0 + 20 +4540.0 + 30 +0.0 + 0 +VERTEX + 5 +2716 + 8 +DETAILS + 10 +10960.0 + 20 +4515.0 + 30 +0.0 + 0 +SEQEND + 5 +2717 + 8 +DETAILS + 0 +POLYLINE + 5 +132F + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2718 + 8 +DETAILS + 10 +10960.0 + 20 +4485.0 + 30 +0.0 + 0 +VERTEX + 5 +2719 + 8 +DETAILS + 10 +10960.0 + 20 +4460.0 + 30 +0.0 + 0 +SEQEND + 5 +271A + 8 +DETAILS + 0 +POLYLINE + 5 +1333 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +271B + 8 +DETAILS + 10 +10960.0 + 20 +4440.0 + 30 +0.0 + 0 +VERTEX + 5 +271C + 8 +DETAILS + 10 +10960.0 + 20 +4415.0 + 30 +0.0 + 0 +SEQEND + 5 +271D + 8 +DETAILS + 0 +POLYLINE + 5 +1337 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +271E + 8 +DETAILS + 10 +10960.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +271F + 8 +DETAILS + 10 +10960.0 + 20 +4680.0 + 30 +0.0 + 0 +SEQEND + 5 +2720 + 8 +DETAILS + 0 +POLYLINE + 5 +133B + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2721 + 8 +DETAILS + 10 +10960.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +2722 + 8 +DETAILS + 10 +10975.0 + 20 +4725.0 + 30 +0.0 + 0 +SEQEND + 5 +2723 + 8 +DETAILS + 0 +POLYLINE + 5 +133F + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2724 + 8 +DETAILS + 10 +10960.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +2725 + 8 +DETAILS + 10 +10945.0 + 20 +4725.0 + 30 +0.0 + 0 +SEQEND + 5 +2726 + 8 +DETAILS + 0 +POLYLINE + 5 +1343 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2727 + 8 +DETAILS + 10 +6995.0 + 20 +6825.0 + 30 +0.0 + 0 +VERTEX + 5 +2728 + 8 +DETAILS + 10 +7040.0 + 20 +6805.0 + 30 +0.0 + 0 +SEQEND + 5 +2729 + 8 +DETAILS + 0 +POLYLINE + 5 +1347 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +272A + 8 +DETAILS + 10 +7060.0 + 20 +6795.0 + 30 +0.0 + 0 +VERTEX + 5 +272B + 8 +DETAILS + 10 +7105.0 + 20 +6775.0 + 30 +0.0 + 0 +SEQEND + 5 +272C + 8 +DETAILS + 0 +POLYLINE + 5 +134B + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +272D + 8 +DETAILS + 10 +7135.0 + 20 +6760.0 + 30 +0.0 + 0 +VERTEX + 5 +272E + 8 +DETAILS + 10 +7180.0 + 20 +6740.0 + 30 +0.0 + 0 +SEQEND + 5 +272F + 8 +DETAILS + 0 +POLYLINE + 5 +134F + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2730 + 8 +DETAILS + 10 +7210.0 + 20 +6725.0 + 30 +0.0 + 0 +VERTEX + 5 +2731 + 8 +DETAILS + 10 +7255.0 + 20 +6705.0 + 30 +0.0 + 0 +SEQEND + 5 +2732 + 8 +DETAILS + 0 +POLYLINE + 5 +1353 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2733 + 8 +DETAILS + 10 +7275.0 + 20 +6695.0 + 30 +0.0 + 0 +VERTEX + 5 +2734 + 8 +DETAILS + 10 +7282.5 + 20 +6691.666667 + 30 +0.0 + 0 +SEQEND + 5 +2735 + 8 +DETAILS + 0 +POLYLINE + 5 +1357 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2736 + 8 +DETAILS + 10 +6995.0 + 20 +6825.0 + 30 +0.0 + 0 +VERTEX + 5 +2737 + 8 +DETAILS + 10 +6985.0 + 20 +6855.0 + 30 +0.0 + 0 +SEQEND + 5 +2738 + 8 +DETAILS + 0 +POLYLINE + 5 +135B + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2739 + 8 +DETAILS + 10 +6995.0 + 20 +6825.0 + 30 +0.0 + 0 +VERTEX + 5 +273A + 8 +DETAILS + 10 +6965.0 + 20 +6815.0 + 30 +0.0 + 0 +SEQEND + 5 +273B + 8 +DETAILS + 0 +POLYLINE + 5 +135F + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +273C + 8 +DETAILS + 10 +7285.0 + 20 +6690.0 + 30 +0.0 + 0 +VERTEX + 5 +273D + 8 +DETAILS + 10 +7310.0 + 20 +6710.0 + 30 +0.0 + 0 +SEQEND + 5 +273E + 8 +DETAILS + 0 +POLYLINE + 5 +1363 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +273F + 8 +DETAILS + 10 +7285.0 + 20 +6690.0 + 30 +0.0 + 0 +VERTEX + 5 +2740 + 8 +DETAILS + 10 +7305.0 + 20 +6665.0 + 30 +0.0 + 0 +SEQEND + 5 +2741 + 8 +DETAILS + 0 +POLYLINE + 5 +1367 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2742 + 8 +DETAILS + 10 +13830.0 + 20 +6690.0 + 30 +0.0 + 0 +VERTEX + 5 +2743 + 8 +DETAILS + 10 +13810.0 + 20 +6665.0 + 30 +0.0 + 0 +SEQEND + 5 +2744 + 8 +DETAILS + 0 +POLYLINE + 5 +136B + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2745 + 8 +DETAILS + 10 +13905.0 + 20 +6725.0 + 30 +0.0 + 0 +VERTEX + 5 +2746 + 8 +DETAILS + 10 +13860.0 + 20 +6705.0 + 30 +0.0 + 0 +SEQEND + 5 +2747 + 8 +DETAILS + 0 +POLYLINE + 5 +136F + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2748 + 8 +DETAILS + 10 +14120.0 + 20 +6825.0 + 30 +0.0 + 0 +VERTEX + 5 +2749 + 8 +DETAILS + 10 +14075.0 + 20 +6805.0 + 30 +0.0 + 0 +SEQEND + 5 +274A + 8 +DETAILS + 0 +POLYLINE + 5 +1373 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +274B + 8 +DETAILS + 10 +14120.0 + 20 +6825.0 + 30 +0.0 + 0 +VERTEX + 5 +274C + 8 +DETAILS + 10 +14150.0 + 20 +6815.0 + 30 +0.0 + 0 +SEQEND + 5 +274D + 8 +DETAILS + 0 +POLYLINE + 5 +1377 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +274E + 8 +DETAILS + 10 +14120.0 + 20 +6825.0 + 30 +0.0 + 0 +VERTEX + 5 +274F + 8 +DETAILS + 10 +14130.0 + 20 +6855.0 + 30 +0.0 + 0 +SEQEND + 5 +2750 + 8 +DETAILS + 0 +POLYLINE + 5 +137B + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2751 + 8 +DETAILS + 10 +13980.0 + 20 +6760.0 + 30 +0.0 + 0 +VERTEX + 5 +2752 + 8 +DETAILS + 10 +13935.0 + 20 +6740.0 + 30 +0.0 + 0 +SEQEND + 5 +2753 + 8 +DETAILS + 0 +POLYLINE + 5 +137F + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2754 + 8 +DETAILS + 10 +14055.0 + 20 +6795.0 + 30 +0.0 + 0 +VERTEX + 5 +2755 + 8 +DETAILS + 10 +14010.0 + 20 +6775.0 + 30 +0.0 + 0 +SEQEND + 5 +2756 + 8 +DETAILS + 0 +POLYLINE + 5 +1383 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2757 + 8 +DETAILS + 10 +13830.0 + 20 +6690.0 + 30 +0.0 + 0 +VERTEX + 5 +2758 + 8 +DETAILS + 10 +13805.0 + 20 +6710.0 + 30 +0.0 + 0 +SEQEND + 5 +2759 + 8 +DETAILS + 0 +POLYLINE + 5 +1387 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +275A + 8 +DETAILS + 10 +13840.0 + 20 +6695.0 + 30 +0.0 + 0 +VERTEX + 5 +275B + 8 +DETAILS + 10 +13832.5 + 20 +6691.666667 + 30 +0.0 + 0 +SEQEND + 5 +275C + 8 +DETAILS + 0 +POLYLINE + 5 +138B + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +275D + 8 +DETAILS + 10 +3915.0 + 20 +3880.0 + 30 +0.0 + 0 +VERTEX + 5 +275E + 8 +DETAILS + 10 +3945.0 + 20 +3880.0 + 30 +0.0 + 0 +SEQEND + 5 +275F + 8 +DETAILS + 0 +POLYLINE + 5 +138F + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2760 + 8 +DETAILS + 10 +3960.0 + 20 +3880.0 + 30 +0.0 + 0 +VERTEX + 5 +2761 + 8 +DETAILS + 10 +3985.0 + 20 +3880.0 + 30 +0.0 + 0 +SEQEND + 5 +2762 + 8 +DETAILS + 0 +POLYLINE + 5 +1393 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2763 + 8 +DETAILS + 10 +3990.0 + 20 +3880.0 + 30 +0.0 + 0 +VERTEX + 5 +2764 + 8 +DETAILS + 10 +4045.0 + 20 +3880.0 + 30 +0.0 + 0 +SEQEND + 5 +2765 + 8 +DETAILS + 0 +POLYLINE + 5 +1397 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2766 + 8 +DETAILS + 10 +4060.0 + 20 +3880.0 + 30 +0.0 + 0 +VERTEX + 5 +2767 + 8 +DETAILS + 10 +4085.0 + 20 +3880.0 + 30 +0.0 + 0 +SEQEND + 5 +2768 + 8 +DETAILS + 0 +POLYLINE + 5 +139B + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2769 + 8 +DETAILS + 10 +4100.0 + 20 +3880.0 + 30 +0.0 + 0 +VERTEX + 5 +276A + 8 +DETAILS + 10 +4125.0 + 20 +3880.0 + 30 +0.0 + 0 +SEQEND + 5 +276B + 8 +DETAILS + 0 +POLYLINE + 5 +139F + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +276C + 8 +DETAILS + 10 +4145.0 + 20 +3880.0 + 30 +0.0 + 0 +VERTEX + 5 +276D + 8 +DETAILS + 10 +4165.0 + 20 +3880.0 + 30 +0.0 + 0 +SEQEND + 5 +276E + 8 +DETAILS + 0 +POLYLINE + 5 +13A3 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +276F + 8 +DETAILS + 10 +4185.0 + 20 +3880.0 + 30 +0.0 + 0 +VERTEX + 5 +2770 + 8 +DETAILS + 10 +4215.0 + 20 +3880.0 + 30 +0.0 + 0 +SEQEND + 5 +2771 + 8 +DETAILS + 0 +POLYLINE + 5 +13A7 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2772 + 8 +DETAILS + 10 +4005.0 + 20 +3910.0 + 30 +0.0 + 0 +VERTEX + 5 +2773 + 8 +DETAILS + 10 +4005.0 + 20 +3850.0 + 30 +0.0 + 0 +SEQEND + 5 +2774 + 8 +DETAILS + 0 +POLYLINE + 5 +13AB + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2775 + 8 +DETAILS + 10 +4035.646689 + 20 +3894.975816 + 30 +0.0 + 0 +VERTEX + 5 +2776 + 8 +DETAILS + 10 +4035.646689 + 20 +3864.975816 + 30 +0.0 + 0 +SEQEND + 5 +2777 + 8 +DETAILS + 0 +POLYLINE + 5 +13AF + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2778 + 8 +DETAILS + 10 +3915.0 + 20 +4184.005135 + 30 +0.0 + 0 +VERTEX + 5 +2779 + 8 +DETAILS + 10 +3945.0 + 20 +4184.005135 + 30 +0.0 + 0 +SEQEND + 5 +277A + 8 +DETAILS + 0 +POLYLINE + 5 +13B3 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +277B + 8 +DETAILS + 10 +3960.0 + 20 +4184.005135 + 30 +0.0 + 0 +VERTEX + 5 +277C + 8 +DETAILS + 10 +3985.0 + 20 +4184.005135 + 30 +0.0 + 0 +SEQEND + 5 +277D + 8 +DETAILS + 0 +POLYLINE + 5 +13B7 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +277E + 8 +DETAILS + 10 +3990.0 + 20 +4184.005135 + 30 +0.0 + 0 +VERTEX + 5 +277F + 8 +DETAILS + 10 +4045.0 + 20 +4184.005135 + 30 +0.0 + 0 +SEQEND + 5 +2780 + 8 +DETAILS + 0 +POLYLINE + 5 +13BB + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2781 + 8 +DETAILS + 10 +4005.0 + 20 +4214.005135 + 30 +0.0 + 0 +VERTEX + 5 +2782 + 8 +DETAILS + 10 +4005.0 + 20 +4154.005135 + 30 +0.0 + 0 +SEQEND + 5 +2783 + 8 +DETAILS + 0 +POLYLINE + 5 +13BF + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2784 + 8 +DETAILS + 10 +4035.646689 + 20 +4198.980952 + 30 +0.0 + 0 +VERTEX + 5 +2785 + 8 +DETAILS + 10 +4035.646689 + 20 +4168.980952 + 30 +0.0 + 0 +SEQEND + 5 +2786 + 8 +DETAILS + 0 +POLYLINE + 5 +13C3 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2787 + 8 +DETAILS + 10 +4060.0 + 20 +4184.005135 + 30 +0.0 + 0 +VERTEX + 5 +2788 + 8 +DETAILS + 10 +4085.0 + 20 +4184.005135 + 30 +0.0 + 0 +SEQEND + 5 +2789 + 8 +DETAILS + 0 +POLYLINE + 5 +13C7 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +278A + 8 +DETAILS + 10 +4100.0 + 20 +4184.005135 + 30 +0.0 + 0 +VERTEX + 5 +278B + 8 +DETAILS + 10 +4125.0 + 20 +4184.005135 + 30 +0.0 + 0 +SEQEND + 5 +278C + 8 +DETAILS + 0 +POLYLINE + 5 +13CB + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +278D + 8 +DETAILS + 10 +4145.0 + 20 +4184.005135 + 30 +0.0 + 0 +VERTEX + 5 +278E + 8 +DETAILS + 10 +4165.0 + 20 +4184.005135 + 30 +0.0 + 0 +SEQEND + 5 +278F + 8 +DETAILS + 0 +POLYLINE + 5 +13CF + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2790 + 8 +DETAILS + 10 +4185.0 + 20 +4184.005135 + 30 +0.0 + 0 +VERTEX + 5 +2791 + 8 +DETAILS + 10 +4215.0 + 20 +4184.005135 + 30 +0.0 + 0 +SEQEND + 5 +2792 + 8 +DETAILS + 0 +POLYLINE + 5 +13D3 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2793 + 8 +DETAILS + 10 +3915.0 + 20 +4647.638341 + 30 +0.0 + 0 +VERTEX + 5 +2794 + 8 +DETAILS + 10 +3945.0 + 20 +4647.638341 + 30 +0.0 + 0 +SEQEND + 5 +2795 + 8 +DETAILS + 0 +POLYLINE + 5 +13D7 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2796 + 8 +DETAILS + 10 +3960.0 + 20 +4647.638341 + 30 +0.0 + 0 +VERTEX + 5 +2797 + 8 +DETAILS + 10 +3985.0 + 20 +4647.638341 + 30 +0.0 + 0 +SEQEND + 5 +2798 + 8 +DETAILS + 0 +POLYLINE + 5 +13DB + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2799 + 8 +DETAILS + 10 +4005.0 + 20 +4677.638341 + 30 +0.0 + 0 +VERTEX + 5 +279A + 8 +DETAILS + 10 +4005.0 + 20 +4617.638341 + 30 +0.0 + 0 +SEQEND + 5 +279B + 8 +DETAILS + 0 +POLYLINE + 5 +13DF + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +279C + 8 +DETAILS + 10 +3990.0 + 20 +4647.638341 + 30 +0.0 + 0 +VERTEX + 5 +279D + 8 +DETAILS + 10 +4045.0 + 20 +4647.638341 + 30 +0.0 + 0 +SEQEND + 5 +279E + 8 +DETAILS + 0 +POLYLINE + 5 +13E3 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +279F + 8 +DETAILS + 10 +4035.646689 + 20 +4662.614157 + 30 +0.0 + 0 +VERTEX + 5 +27A0 + 8 +DETAILS + 10 +4035.646689 + 20 +4632.614157 + 30 +0.0 + 0 +SEQEND + 5 +27A1 + 8 +DETAILS + 0 +POLYLINE + 5 +13E7 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +27A2 + 8 +DETAILS + 10 +4060.0 + 20 +4647.638341 + 30 +0.0 + 0 +VERTEX + 5 +27A3 + 8 +DETAILS + 10 +4085.0 + 20 +4647.638341 + 30 +0.0 + 0 +SEQEND + 5 +27A4 + 8 +DETAILS + 0 +POLYLINE + 5 +13EB + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +27A5 + 8 +DETAILS + 10 +4100.0 + 20 +4647.638341 + 30 +0.0 + 0 +VERTEX + 5 +27A6 + 8 +DETAILS + 10 +4125.0 + 20 +4647.638341 + 30 +0.0 + 0 +SEQEND + 5 +27A7 + 8 +DETAILS + 0 +POLYLINE + 5 +13EF + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +27A8 + 8 +DETAILS + 10 +4185.0 + 20 +4647.638341 + 30 +0.0 + 0 +VERTEX + 5 +27A9 + 8 +DETAILS + 10 +4215.0 + 20 +4647.638341 + 30 +0.0 + 0 +SEQEND + 5 +27AA + 8 +DETAILS + 0 +POLYLINE + 5 +13F3 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +27AB + 8 +DETAILS + 10 +4145.0 + 20 +4647.638341 + 30 +0.0 + 0 +VERTEX + 5 +27AC + 8 +DETAILS + 10 +4165.0 + 20 +4647.638341 + 30 +0.0 + 0 +SEQEND + 5 +27AD + 8 +DETAILS + 0 +POLYLINE + 5 +13F7 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +27AE + 8 +DETAILS + 10 +3915.0 + 20 +4938.630057 + 30 +0.0 + 0 +VERTEX + 5 +27AF + 8 +DETAILS + 10 +3945.0 + 20 +4938.630057 + 30 +0.0 + 0 +SEQEND + 5 +27B0 + 8 +DETAILS + 0 +POLYLINE + 5 +13FB + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +27B1 + 8 +DETAILS + 10 +3960.0 + 20 +4938.630057 + 30 +0.0 + 0 +VERTEX + 5 +27B2 + 8 +DETAILS + 10 +3985.0 + 20 +4938.630057 + 30 +0.0 + 0 +SEQEND + 5 +27B3 + 8 +DETAILS + 0 +POLYLINE + 5 +13FF + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +27B4 + 8 +DETAILS + 10 +4005.0 + 20 +4968.630057 + 30 +0.0 + 0 +VERTEX + 5 +27B5 + 8 +DETAILS + 10 +4005.0 + 20 +4908.630057 + 30 +0.0 + 0 +SEQEND + 5 +27B6 + 8 +DETAILS + 0 +POLYLINE + 5 +1403 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +27B7 + 8 +DETAILS + 10 +3990.0 + 20 +4938.630057 + 30 +0.0 + 0 +VERTEX + 5 +27B8 + 8 +DETAILS + 10 +4045.0 + 20 +4938.630057 + 30 +0.0 + 0 +SEQEND + 5 +27B9 + 8 +DETAILS + 0 +POLYLINE + 5 +1407 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +27BA + 8 +DETAILS + 10 +4035.646689 + 20 +4953.605874 + 30 +0.0 + 0 +VERTEX + 5 +27BB + 8 +DETAILS + 10 +4035.646689 + 20 +4923.605874 + 30 +0.0 + 0 +SEQEND + 5 +27BC + 8 +DETAILS + 0 +POLYLINE + 5 +140B + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +27BD + 8 +DETAILS + 10 +4060.0 + 20 +4938.630057 + 30 +0.0 + 0 +VERTEX + 5 +27BE + 8 +DETAILS + 10 +4085.0 + 20 +4938.630057 + 30 +0.0 + 0 +SEQEND + 5 +27BF + 8 +DETAILS + 0 +POLYLINE + 5 +140F + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +27C0 + 8 +DETAILS + 10 +4100.0 + 20 +4938.630057 + 30 +0.0 + 0 +VERTEX + 5 +27C1 + 8 +DETAILS + 10 +4125.0 + 20 +4938.630057 + 30 +0.0 + 0 +SEQEND + 5 +27C2 + 8 +DETAILS + 0 +POLYLINE + 5 +1413 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +27C3 + 8 +DETAILS + 10 +4145.0 + 20 +4938.630057 + 30 +0.0 + 0 +VERTEX + 5 +27C4 + 8 +DETAILS + 10 +4165.0 + 20 +4938.630057 + 30 +0.0 + 0 +SEQEND + 5 +27C5 + 8 +DETAILS + 0 +POLYLINE + 5 +1417 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +27C6 + 8 +DETAILS + 10 +4185.0 + 20 +4938.630057 + 30 +0.0 + 0 +VERTEX + 5 +27C7 + 8 +DETAILS + 10 +4215.0 + 20 +4938.630057 + 30 +0.0 + 0 +SEQEND + 5 +27C8 + 8 +DETAILS + 0 +POLYLINE + 5 +141B + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +27C9 + 8 +DETAILS + 10 +3915.0 + 20 +5279.376847 + 30 +0.0 + 0 +VERTEX + 5 +27CA + 8 +DETAILS + 10 +3945.0 + 20 +5279.376847 + 30 +0.0 + 0 +SEQEND + 5 +27CB + 8 +DETAILS + 0 +POLYLINE + 5 +141F + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +27CC + 8 +DETAILS + 10 +3960.0 + 20 +5279.376847 + 30 +0.0 + 0 +VERTEX + 5 +27CD + 8 +DETAILS + 10 +3985.0 + 20 +5279.376847 + 30 +0.0 + 0 +SEQEND + 5 +27CE + 8 +DETAILS + 0 +POLYLINE + 5 +1423 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +27CF + 8 +DETAILS + 10 +4005.0 + 20 +5309.376847 + 30 +0.0 + 0 +VERTEX + 5 +27D0 + 8 +DETAILS + 10 +4005.0 + 20 +5249.376847 + 30 +0.0 + 0 +SEQEND + 5 +27D1 + 8 +DETAILS + 0 +POLYLINE + 5 +1427 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +27D2 + 8 +DETAILS + 10 +3990.0 + 20 +5279.376847 + 30 +0.0 + 0 +VERTEX + 5 +27D3 + 8 +DETAILS + 10 +4045.0 + 20 +5279.376847 + 30 +0.0 + 0 +SEQEND + 5 +27D4 + 8 +DETAILS + 0 +POLYLINE + 5 +142B + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +27D5 + 8 +DETAILS + 10 +4035.646689 + 20 +5294.352664 + 30 +0.0 + 0 +VERTEX + 5 +27D6 + 8 +DETAILS + 10 +4035.646689 + 20 +5264.352664 + 30 +0.0 + 0 +SEQEND + 5 +27D7 + 8 +DETAILS + 0 +POLYLINE + 5 +142F + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +27D8 + 8 +DETAILS + 10 +4060.0 + 20 +5279.376847 + 30 +0.0 + 0 +VERTEX + 5 +27D9 + 8 +DETAILS + 10 +4085.0 + 20 +5279.376847 + 30 +0.0 + 0 +SEQEND + 5 +27DA + 8 +DETAILS + 0 +POLYLINE + 5 +1433 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +27DB + 8 +DETAILS + 10 +4100.0 + 20 +5279.376847 + 30 +0.0 + 0 +VERTEX + 5 +27DC + 8 +DETAILS + 10 +4125.0 + 20 +5279.376847 + 30 +0.0 + 0 +SEQEND + 5 +27DD + 8 +DETAILS + 0 +POLYLINE + 5 +1437 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +27DE + 8 +DETAILS + 10 +4145.0 + 20 +5279.376847 + 30 +0.0 + 0 +VERTEX + 5 +27DF + 8 +DETAILS + 10 +4165.0 + 20 +5279.376847 + 30 +0.0 + 0 +SEQEND + 5 +27E0 + 8 +DETAILS + 0 +POLYLINE + 5 +143B + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +27E1 + 8 +DETAILS + 10 +4185.0 + 20 +5279.376847 + 30 +0.0 + 0 +VERTEX + 5 +27E2 + 8 +DETAILS + 10 +4215.0 + 20 +5279.376847 + 30 +0.0 + 0 +SEQEND + 5 +27E3 + 8 +DETAILS + 0 +POLYLINE + 5 +143F + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +27E4 + 8 +DETAILS + 10 +3915.0 + 20 +5668.370933 + 30 +0.0 + 0 +VERTEX + 5 +27E5 + 8 +DETAILS + 10 +3945.0 + 20 +5668.370933 + 30 +0.0 + 0 +SEQEND + 5 +27E6 + 8 +DETAILS + 0 +POLYLINE + 5 +1443 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +27E7 + 8 +DETAILS + 10 +3960.0 + 20 +5668.370933 + 30 +0.0 + 0 +VERTEX + 5 +27E8 + 8 +DETAILS + 10 +3985.0 + 20 +5668.370933 + 30 +0.0 + 0 +SEQEND + 5 +27E9 + 8 +DETAILS + 0 +POLYLINE + 5 +1447 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +27EA + 8 +DETAILS + 10 +4005.0 + 20 +5698.370933 + 30 +0.0 + 0 +VERTEX + 5 +27EB + 8 +DETAILS + 10 +4005.0 + 20 +5638.370933 + 30 +0.0 + 0 +SEQEND + 5 +27EC + 8 +DETAILS + 0 +POLYLINE + 5 +144B + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +27ED + 8 +DETAILS + 10 +3990.0 + 20 +5668.370933 + 30 +0.0 + 0 +VERTEX + 5 +27EE + 8 +DETAILS + 10 +4045.0 + 20 +5668.370933 + 30 +0.0 + 0 +SEQEND + 5 +27EF + 8 +DETAILS + 0 +POLYLINE + 5 +144F + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +27F0 + 8 +DETAILS + 10 +4035.646689 + 20 +5683.346749 + 30 +0.0 + 0 +VERTEX + 5 +27F1 + 8 +DETAILS + 10 +4035.646689 + 20 +5653.346749 + 30 +0.0 + 0 +SEQEND + 5 +27F2 + 8 +DETAILS + 0 +POLYLINE + 5 +1453 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +27F3 + 8 +DETAILS + 10 +4060.0 + 20 +5668.370933 + 30 +0.0 + 0 +VERTEX + 5 +27F4 + 8 +DETAILS + 10 +4085.0 + 20 +5668.370933 + 30 +0.0 + 0 +SEQEND + 5 +27F5 + 8 +DETAILS + 0 +POLYLINE + 5 +1457 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +27F6 + 8 +DETAILS + 10 +4100.0 + 20 +5668.370933 + 30 +0.0 + 0 +VERTEX + 5 +27F7 + 8 +DETAILS + 10 +4125.0 + 20 +5668.370933 + 30 +0.0 + 0 +SEQEND + 5 +27F8 + 8 +DETAILS + 0 +POLYLINE + 5 +145B + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +27F9 + 8 +DETAILS + 10 +4145.0 + 20 +5668.370933 + 30 +0.0 + 0 +VERTEX + 5 +27FA + 8 +DETAILS + 10 +4165.0 + 20 +5668.370933 + 30 +0.0 + 0 +SEQEND + 5 +27FB + 8 +DETAILS + 0 +POLYLINE + 5 +145F + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +27FC + 8 +DETAILS + 10 +4185.0 + 20 +5668.370933 + 30 +0.0 + 0 +VERTEX + 5 +27FD + 8 +DETAILS + 10 +4215.0 + 20 +5668.370933 + 30 +0.0 + 0 +SEQEND + 5 +27FE + 8 +DETAILS + 0 +POLYLINE + 5 +1463 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +27FF + 8 +DETAILS + 10 +17200.0 + 20 +4184.005135 + 30 +0.0 + 0 +VERTEX + 5 +2800 + 8 +DETAILS + 10 +17170.0 + 20 +4184.005135 + 30 +0.0 + 0 +SEQEND + 5 +2801 + 8 +DETAILS + 0 +POLYLINE + 5 +1467 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2802 + 8 +DETAILS + 10 +17155.0 + 20 +4184.005135 + 30 +0.0 + 0 +VERTEX + 5 +2803 + 8 +DETAILS + 10 +17130.0 + 20 +4184.005135 + 30 +0.0 + 0 +SEQEND + 5 +2804 + 8 +DETAILS + 0 +POLYLINE + 5 +146B + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2805 + 8 +DETAILS + 10 +17125.0 + 20 +4184.005135 + 30 +0.0 + 0 +VERTEX + 5 +2806 + 8 +DETAILS + 10 +17070.0 + 20 +4184.005135 + 30 +0.0 + 0 +SEQEND + 5 +2807 + 8 +DETAILS + 0 +POLYLINE + 5 +146F + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2808 + 8 +DETAILS + 10 +17110.0 + 20 +4214.005135 + 30 +0.0 + 0 +VERTEX + 5 +2809 + 8 +DETAILS + 10 +17110.0 + 20 +4154.005135 + 30 +0.0 + 0 +SEQEND + 5 +280A + 8 +DETAILS + 0 +POLYLINE + 5 +1473 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +280B + 8 +DETAILS + 10 +17079.353311 + 20 +4198.980952 + 30 +0.0 + 0 +VERTEX + 5 +280C + 8 +DETAILS + 10 +17079.353311 + 20 +4168.980952 + 30 +0.0 + 0 +SEQEND + 5 +280D + 8 +DETAILS + 0 +POLYLINE + 5 +1477 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +280E + 8 +DETAILS + 10 +17055.0 + 20 +4184.005135 + 30 +0.0 + 0 +VERTEX + 5 +280F + 8 +DETAILS + 10 +17030.0 + 20 +4184.005135 + 30 +0.0 + 0 +SEQEND + 5 +2810 + 8 +DETAILS + 0 +POLYLINE + 5 +147B + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2811 + 8 +DETAILS + 10 +17015.0 + 20 +4184.005135 + 30 +0.0 + 0 +VERTEX + 5 +2812 + 8 +DETAILS + 10 +16990.0 + 20 +4184.005135 + 30 +0.0 + 0 +SEQEND + 5 +2813 + 8 +DETAILS + 0 +POLYLINE + 5 +147F + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2814 + 8 +DETAILS + 10 +16970.0 + 20 +4184.005135 + 30 +0.0 + 0 +VERTEX + 5 +2815 + 8 +DETAILS + 10 +16950.0 + 20 +4184.005135 + 30 +0.0 + 0 +SEQEND + 5 +2816 + 8 +DETAILS + 0 +POLYLINE + 5 +1483 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2817 + 8 +DETAILS + 10 +16930.0 + 20 +4184.005135 + 30 +0.0 + 0 +VERTEX + 5 +2818 + 8 +DETAILS + 10 +16900.0 + 20 +4184.005135 + 30 +0.0 + 0 +SEQEND + 5 +2819 + 8 +DETAILS + 0 +POLYLINE + 5 +1487 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +281A + 8 +DETAILS + 10 +17200.0 + 20 +3880.0 + 30 +0.0 + 0 +VERTEX + 5 +281B + 8 +DETAILS + 10 +17170.0 + 20 +3880.0 + 30 +0.0 + 0 +SEQEND + 5 +281C + 8 +DETAILS + 0 +POLYLINE + 5 +148B + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +281D + 8 +DETAILS + 10 +17155.0 + 20 +3880.0 + 30 +0.0 + 0 +VERTEX + 5 +281E + 8 +DETAILS + 10 +17130.0 + 20 +3880.0 + 30 +0.0 + 0 +SEQEND + 5 +281F + 8 +DETAILS + 0 +POLYLINE + 5 +148F + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2820 + 8 +DETAILS + 10 +17125.0 + 20 +3880.0 + 30 +0.0 + 0 +VERTEX + 5 +2821 + 8 +DETAILS + 10 +17070.0 + 20 +3880.0 + 30 +0.0 + 0 +SEQEND + 5 +2822 + 8 +DETAILS + 0 +POLYLINE + 5 +1493 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2823 + 8 +DETAILS + 10 +17110.0 + 20 +3910.0 + 30 +0.0 + 0 +VERTEX + 5 +2824 + 8 +DETAILS + 10 +17110.0 + 20 +3850.0 + 30 +0.0 + 0 +SEQEND + 5 +2825 + 8 +DETAILS + 0 +POLYLINE + 5 +1497 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2826 + 8 +DETAILS + 10 +17079.353311 + 20 +3894.975816 + 30 +0.0 + 0 +VERTEX + 5 +2827 + 8 +DETAILS + 10 +17079.353311 + 20 +3864.975816 + 30 +0.0 + 0 +SEQEND + 5 +2828 + 8 +DETAILS + 0 +POLYLINE + 5 +149B + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2829 + 8 +DETAILS + 10 +17055.0 + 20 +3880.0 + 30 +0.0 + 0 +VERTEX + 5 +282A + 8 +DETAILS + 10 +17030.0 + 20 +3880.0 + 30 +0.0 + 0 +SEQEND + 5 +282B + 8 +DETAILS + 0 +POLYLINE + 5 +149F + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +282C + 8 +DETAILS + 10 +17015.0 + 20 +3880.0 + 30 +0.0 + 0 +VERTEX + 5 +282D + 8 +DETAILS + 10 +16990.0 + 20 +3880.0 + 30 +0.0 + 0 +SEQEND + 5 +282E + 8 +DETAILS + 0 +POLYLINE + 5 +14A3 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +282F + 8 +DETAILS + 10 +16970.0 + 20 +3880.0 + 30 +0.0 + 0 +VERTEX + 5 +2830 + 8 +DETAILS + 10 +16950.0 + 20 +3880.0 + 30 +0.0 + 0 +SEQEND + 5 +2831 + 8 +DETAILS + 0 +POLYLINE + 5 +14A7 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2832 + 8 +DETAILS + 10 +16930.0 + 20 +3880.0 + 30 +0.0 + 0 +VERTEX + 5 +2833 + 8 +DETAILS + 10 +16900.0 + 20 +3880.0 + 30 +0.0 + 0 +SEQEND + 5 +2834 + 8 +DETAILS + 0 +POLYLINE + 5 +14AB + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2835 + 8 +DETAILS + 10 +17200.0 + 20 +4938.630057 + 30 +0.0 + 0 +VERTEX + 5 +2836 + 8 +DETAILS + 10 +17170.0 + 20 +4938.630057 + 30 +0.0 + 0 +SEQEND + 5 +2837 + 8 +DETAILS + 0 +POLYLINE + 5 +14AF + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2838 + 8 +DETAILS + 10 +17155.0 + 20 +4938.630057 + 30 +0.0 + 0 +VERTEX + 5 +2839 + 8 +DETAILS + 10 +17130.0 + 20 +4938.630057 + 30 +0.0 + 0 +SEQEND + 5 +283A + 8 +DETAILS + 0 +POLYLINE + 5 +14B3 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +283B + 8 +DETAILS + 10 +17125.0 + 20 +4938.630057 + 30 +0.0 + 0 +VERTEX + 5 +283C + 8 +DETAILS + 10 +17070.0 + 20 +4938.630057 + 30 +0.0 + 0 +SEQEND + 5 +283D + 8 +DETAILS + 0 +POLYLINE + 5 +14B7 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +283E + 8 +DETAILS + 10 +17110.0 + 20 +4968.630057 + 30 +0.0 + 0 +VERTEX + 5 +283F + 8 +DETAILS + 10 +17110.0 + 20 +4908.630057 + 30 +0.0 + 0 +SEQEND + 5 +2840 + 8 +DETAILS + 0 +POLYLINE + 5 +14BB + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2841 + 8 +DETAILS + 10 +17079.353311 + 20 +4953.605874 + 30 +0.0 + 0 +VERTEX + 5 +2842 + 8 +DETAILS + 10 +17079.353311 + 20 +4923.605874 + 30 +0.0 + 0 +SEQEND + 5 +2843 + 8 +DETAILS + 0 +POLYLINE + 5 +14BF + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2844 + 8 +DETAILS + 10 +17055.0 + 20 +4938.630057 + 30 +0.0 + 0 +VERTEX + 5 +2845 + 8 +DETAILS + 10 +17030.0 + 20 +4938.630057 + 30 +0.0 + 0 +SEQEND + 5 +2846 + 8 +DETAILS + 0 +POLYLINE + 5 +14C3 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2847 + 8 +DETAILS + 10 +17015.0 + 20 +4938.630057 + 30 +0.0 + 0 +VERTEX + 5 +2848 + 8 +DETAILS + 10 +16990.0 + 20 +4938.630057 + 30 +0.0 + 0 +SEQEND + 5 +2849 + 8 +DETAILS + 0 +POLYLINE + 5 +14C7 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +284A + 8 +DETAILS + 10 +16970.0 + 20 +4938.630057 + 30 +0.0 + 0 +VERTEX + 5 +284B + 8 +DETAILS + 10 +16950.0 + 20 +4938.630057 + 30 +0.0 + 0 +SEQEND + 5 +284C + 8 +DETAILS + 0 +POLYLINE + 5 +14CB + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +284D + 8 +DETAILS + 10 +16930.0 + 20 +4938.630057 + 30 +0.0 + 0 +VERTEX + 5 +284E + 8 +DETAILS + 10 +16900.0 + 20 +4938.630057 + 30 +0.0 + 0 +SEQEND + 5 +284F + 8 +DETAILS + 0 +POLYLINE + 5 +14CF + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2850 + 8 +DETAILS + 10 +17200.0 + 20 +4647.638341 + 30 +0.0 + 0 +VERTEX + 5 +2851 + 8 +DETAILS + 10 +17170.0 + 20 +4647.638341 + 30 +0.0 + 0 +SEQEND + 5 +2852 + 8 +DETAILS + 0 +POLYLINE + 5 +14D3 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2853 + 8 +DETAILS + 10 +17155.0 + 20 +4647.638341 + 30 +0.0 + 0 +VERTEX + 5 +2854 + 8 +DETAILS + 10 +17130.0 + 20 +4647.638341 + 30 +0.0 + 0 +SEQEND + 5 +2855 + 8 +DETAILS + 0 +POLYLINE + 5 +14D7 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2856 + 8 +DETAILS + 10 +17125.0 + 20 +4647.638341 + 30 +0.0 + 0 +VERTEX + 5 +2857 + 8 +DETAILS + 10 +17070.0 + 20 +4647.638341 + 30 +0.0 + 0 +SEQEND + 5 +2858 + 8 +DETAILS + 0 +POLYLINE + 5 +14DB + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2859 + 8 +DETAILS + 10 +17110.0 + 20 +4677.638341 + 30 +0.0 + 0 +VERTEX + 5 +285A + 8 +DETAILS + 10 +17110.0 + 20 +4617.638341 + 30 +0.0 + 0 +SEQEND + 5 +285B + 8 +DETAILS + 0 +POLYLINE + 5 +14DF + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +285C + 8 +DETAILS + 10 +17079.353311 + 20 +4662.614157 + 30 +0.0 + 0 +VERTEX + 5 +285D + 8 +DETAILS + 10 +17079.353311 + 20 +4632.614157 + 30 +0.0 + 0 +SEQEND + 5 +285E + 8 +DETAILS + 0 +POLYLINE + 5 +14E3 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +285F + 8 +DETAILS + 10 +17055.0 + 20 +4647.638341 + 30 +0.0 + 0 +VERTEX + 5 +2860 + 8 +DETAILS + 10 +17030.0 + 20 +4647.638341 + 30 +0.0 + 0 +SEQEND + 5 +2861 + 8 +DETAILS + 0 +POLYLINE + 5 +14E7 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2862 + 8 +DETAILS + 10 +17015.0 + 20 +4647.638341 + 30 +0.0 + 0 +VERTEX + 5 +2863 + 8 +DETAILS + 10 +16990.0 + 20 +4647.638341 + 30 +0.0 + 0 +SEQEND + 5 +2864 + 8 +DETAILS + 0 +POLYLINE + 5 +14EB + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2865 + 8 +DETAILS + 10 +16970.0 + 20 +4647.638341 + 30 +0.0 + 0 +VERTEX + 5 +2866 + 8 +DETAILS + 10 +16950.0 + 20 +4647.638341 + 30 +0.0 + 0 +SEQEND + 5 +2867 + 8 +DETAILS + 0 +POLYLINE + 5 +14EF + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2868 + 8 +DETAILS + 10 +16930.0 + 20 +4647.638341 + 30 +0.0 + 0 +VERTEX + 5 +2869 + 8 +DETAILS + 10 +16900.0 + 20 +4647.638341 + 30 +0.0 + 0 +SEQEND + 5 +286A + 8 +DETAILS + 0 +POLYLINE + 5 +14F3 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +286B + 8 +DETAILS + 10 +17200.0 + 20 +5279.376847 + 30 +0.0 + 0 +VERTEX + 5 +286C + 8 +DETAILS + 10 +17170.0 + 20 +5279.376847 + 30 +0.0 + 0 +SEQEND + 5 +286D + 8 +DETAILS + 0 +POLYLINE + 5 +14F7 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +286E + 8 +DETAILS + 10 +17155.0 + 20 +5279.376847 + 30 +0.0 + 0 +VERTEX + 5 +286F + 8 +DETAILS + 10 +17130.0 + 20 +5279.376847 + 30 +0.0 + 0 +SEQEND + 5 +2870 + 8 +DETAILS + 0 +POLYLINE + 5 +14FB + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2871 + 8 +DETAILS + 10 +17110.0 + 20 +5309.376847 + 30 +0.0 + 0 +VERTEX + 5 +2872 + 8 +DETAILS + 10 +17110.0 + 20 +5249.376847 + 30 +0.0 + 0 +SEQEND + 5 +2873 + 8 +DETAILS + 0 +POLYLINE + 5 +14FF + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2874 + 8 +DETAILS + 10 +17125.0 + 20 +5279.376847 + 30 +0.0 + 0 +VERTEX + 5 +2875 + 8 +DETAILS + 10 +17070.0 + 20 +5279.376847 + 30 +0.0 + 0 +SEQEND + 5 +2876 + 8 +DETAILS + 0 +POLYLINE + 5 +1503 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2877 + 8 +DETAILS + 10 +17079.353311 + 20 +5294.352664 + 30 +0.0 + 0 +VERTEX + 5 +2878 + 8 +DETAILS + 10 +17079.353311 + 20 +5264.352664 + 30 +0.0 + 0 +SEQEND + 5 +2879 + 8 +DETAILS + 0 +POLYLINE + 5 +1507 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +287A + 8 +DETAILS + 10 +17055.0 + 20 +5279.376847 + 30 +0.0 + 0 +VERTEX + 5 +287B + 8 +DETAILS + 10 +17030.0 + 20 +5279.376847 + 30 +0.0 + 0 +SEQEND + 5 +287C + 8 +DETAILS + 0 +LINE + 5 +150B + 8 +0 + 62 + 0 + 10 +17065.0 + 20 +5279.42286 + 30 +0.0 + 11 +17040.0 + 21 +5279.42286 + 31 +0.0 + 0 +POLYLINE + 5 +150C + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +287D + 8 +DETAILS + 10 +17015.0 + 20 +5279.376847 + 30 +0.0 + 0 +VERTEX + 5 +287E + 8 +DETAILS + 10 +16990.0 + 20 +5279.376847 + 30 +0.0 + 0 +SEQEND + 5 +287F + 8 +DETAILS + 0 +POLYLINE + 5 +1510 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2880 + 8 +DETAILS + 10 +16970.0 + 20 +5279.376847 + 30 +0.0 + 0 +VERTEX + 5 +2881 + 8 +DETAILS + 10 +16950.0 + 20 +5279.376847 + 30 +0.0 + 0 +SEQEND + 5 +2882 + 8 +DETAILS + 0 +POLYLINE + 5 +1514 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2883 + 8 +DETAILS + 10 +16930.0 + 20 +5279.376847 + 30 +0.0 + 0 +VERTEX + 5 +2884 + 8 +DETAILS + 10 +16900.0 + 20 +5279.376847 + 30 +0.0 + 0 +SEQEND + 5 +2885 + 8 +DETAILS + 0 +POLYLINE + 5 +1518 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2886 + 8 +DETAILS + 10 +17200.0 + 20 +5668.370933 + 30 +0.0 + 0 +VERTEX + 5 +2887 + 8 +DETAILS + 10 +17170.0 + 20 +5668.370933 + 30 +0.0 + 0 +SEQEND + 5 +2888 + 8 +DETAILS + 0 +POLYLINE + 5 +151C + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2889 + 8 +DETAILS + 10 +17155.0 + 20 +5668.370933 + 30 +0.0 + 0 +VERTEX + 5 +288A + 8 +DETAILS + 10 +17130.0 + 20 +5668.370933 + 30 +0.0 + 0 +SEQEND + 5 +288B + 8 +DETAILS + 0 +POLYLINE + 5 +1520 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +288C + 8 +DETAILS + 10 +17110.0 + 20 +5698.370933 + 30 +0.0 + 0 +VERTEX + 5 +288D + 8 +DETAILS + 10 +17110.0 + 20 +5638.370933 + 30 +0.0 + 0 +SEQEND + 5 +288E + 8 +DETAILS + 0 +POLYLINE + 5 +1524 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +288F + 8 +DETAILS + 10 +17125.0 + 20 +5668.370933 + 30 +0.0 + 0 +VERTEX + 5 +2890 + 8 +DETAILS + 10 +17070.0 + 20 +5668.370933 + 30 +0.0 + 0 +SEQEND + 5 +2891 + 8 +DETAILS + 0 +POLYLINE + 5 +1528 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2892 + 8 +DETAILS + 10 +17079.353311 + 20 +5683.346749 + 30 +0.0 + 0 +VERTEX + 5 +2893 + 8 +DETAILS + 10 +17079.353311 + 20 +5653.346749 + 30 +0.0 + 0 +SEQEND + 5 +2894 + 8 +DETAILS + 0 +POLYLINE + 5 +152C + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2895 + 8 +DETAILS + 10 +17055.0 + 20 +5668.370933 + 30 +0.0 + 0 +VERTEX + 5 +2896 + 8 +DETAILS + 10 +17030.0 + 20 +5668.370933 + 30 +0.0 + 0 +SEQEND + 5 +2897 + 8 +DETAILS + 0 +POLYLINE + 5 +1530 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2898 + 8 +DETAILS + 10 +17015.0 + 20 +5668.370933 + 30 +0.0 + 0 +VERTEX + 5 +2899 + 8 +DETAILS + 10 +16990.0 + 20 +5668.370933 + 30 +0.0 + 0 +SEQEND + 5 +289A + 8 +DETAILS + 0 +POLYLINE + 5 +1534 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +289B + 8 +DETAILS + 10 +16970.0 + 20 +5668.370933 + 30 +0.0 + 0 +VERTEX + 5 +289C + 8 +DETAILS + 10 +16950.0 + 20 +5668.370933 + 30 +0.0 + 0 +SEQEND + 5 +289D + 8 +DETAILS + 0 +POLYLINE + 5 +1538 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +289E + 8 +DETAILS + 10 +16930.0 + 20 +5668.370933 + 30 +0.0 + 0 +VERTEX + 5 +289F + 8 +DETAILS + 10 +16900.0 + 20 +5668.370933 + 30 +0.0 + 0 +SEQEND + 5 +28A0 + 8 +DETAILS + 0 +POLYLINE + 5 +153C + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +28A1 + 8 +HOLZ + 10 +7080.0 + 20 +6555.0 + 30 +0.0 + 0 +VERTEX + 5 +28A2 + 8 +HOLZ + 10 +7285.0 + 20 +6555.0 + 30 +0.0 + 0 +SEQEND + 5 +28A3 + 8 +HOLZ + 0 +POLYLINE + 5 +1540 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +28A4 + 8 +HOLZ + 10 +7285.0 + 20 +6281.0 + 30 +0.0 + 0 +VERTEX + 5 +28A5 + 8 +HOLZ + 10 +7080.0 + 20 +6281.0 + 30 +0.0 + 0 +SEQEND + 5 +28A6 + 8 +HOLZ + 0 +POLYLINE + 5 +1544 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1545 + 8 +HOLZ + 10 +7088.07284 + 20 +6503.677065 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1546 + 8 +HOLZ + 10 +7088.07284 + 20 +6503.677065 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1547 + 8 +HOLZ + 10 +7096.604084 + 20 +6503.761117 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1548 + 8 +HOLZ + 10 +7103.533424 + 20 +6503.996953 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1549 + 8 +HOLZ + 10 +7109.081304 + 20 +6504.360091 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +154A + 8 +HOLZ + 10 +7113.468172 + 20 +6504.826051 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +154B + 8 +HOLZ + 10 +7116.914472 + 20 +6505.370351 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +154C + 8 +HOLZ + 10 +7119.640651 + 20 +6505.968509 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +154D + 8 +HOLZ + 10 +7121.867154 + 20 +6506.596046 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +154E + 8 +HOLZ + 10 +7123.814428 + 20 +6507.22848 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +154F + 8 +HOLZ + 10 +7125.667401 + 20 +6507.845001 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1550 + 8 +HOLZ + 10 +7127.468938 + 20 +6508.439489 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1551 + 8 +HOLZ + 10 +7129.226388 + 20 +6509.009497 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1552 + 8 +HOLZ + 10 +7130.947096 + 20 +6509.552575 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1553 + 8 +HOLZ + 10 +7132.638412 + 20 +6510.066276 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1554 + 8 +HOLZ + 10 +7134.307684 + 20 +6510.548151 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1555 + 8 +HOLZ + 10 +7135.962258 + 20 +6510.995753 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1556 + 8 +HOLZ + 10 +7137.609483 + 20 +6511.406632 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1557 + 8 +HOLZ + 10 +7139.255482 + 20 +6511.78038 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1558 + 8 +HOLZ + 10 +7140.90148 + 20 +6512.124751 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1559 + 8 +HOLZ + 10 +7142.547477 + 20 +6512.449536 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +155A + 8 +HOLZ + 10 +7144.193473 + 20 +6512.764529 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +155B + 8 +HOLZ + 10 +7145.839469 + 20 +6513.079522 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +155C + 8 +HOLZ + 10 +7147.485464 + 20 +6513.404307 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +155D + 8 +HOLZ + 10 +7149.131458 + 20 +6513.748678 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +155E + 8 +HOLZ + 10 +7150.777452 + 20 +6514.122427 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +155F + 8 +HOLZ + 10 +7152.423447 + 20 +6514.533918 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1560 + 8 +HOLZ + 10 +7154.069441 + 20 +6514.985803 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1561 + 8 +HOLZ + 10 +7155.715435 + 20 +6515.479307 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1562 + 8 +HOLZ + 10 +7157.36143 + 20 +6516.015653 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1563 + 8 +HOLZ + 10 +7159.007424 + 20 +6516.596065 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1564 + 8 +HOLZ + 10 +7160.653418 + 20 +6517.221768 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1565 + 8 +HOLZ + 10 +7162.299413 + 20 +6517.893984 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1566 + 8 +HOLZ + 10 +7163.945407 + 20 +6518.613938 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1567 + 8 +HOLZ + 10 +7165.587727 + 20 +6519.382039 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1568 + 8 +HOLZ + 10 +7167.208003 + 20 +6520.195429 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1569 + 8 +HOLZ + 10 +7168.784189 + 20 +6521.050437 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +156A + 8 +HOLZ + 10 +7170.294242 + 20 +6521.943391 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +156B + 8 +HOLZ + 10 +7171.716117 + 20 +6522.870619 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +156C + 8 +HOLZ + 10 +7173.027769 + 20 +6523.828449 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +156D + 8 +HOLZ + 10 +7174.207154 + 20 +6524.813209 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +156E + 8 +HOLZ + 10 +7175.232227 + 20 +6525.821227 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +156F + 8 +HOLZ + 10 +7176.090946 + 20 +6526.849239 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1570 + 8 +HOLZ + 10 +7176.811273 + 20 +6527.895613 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1571 + 8 +HOLZ + 10 +7177.431175 + 20 +6528.959125 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1572 + 8 +HOLZ + 10 +7177.988618 + 20 +6530.03855 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1573 + 8 +HOLZ + 10 +7178.521567 + 20 +6531.132664 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1574 + 8 +HOLZ + 10 +7179.067987 + 20 +6532.240243 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1575 + 8 +HOLZ + 10 +7179.665844 + 20 +6533.360063 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1576 + 8 +HOLZ + 10 +7180.353103 + 20 +6534.4909 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1577 + 8 +HOLZ + 10 +7181.162016 + 20 +6535.627652 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1578 + 8 +HOLZ + 10 +7182.10197 + 20 +6536.749715 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1579 + 8 +HOLZ + 10 +7183.176642 + 20 +6537.832608 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +157A + 8 +HOLZ + 10 +7184.389704 + 20 +6538.851848 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +157B + 8 +HOLZ + 10 +7185.744832 + 20 +6539.782956 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +157C + 8 +HOLZ + 10 +7187.245699 + 20 +6540.601449 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +157D + 8 +HOLZ + 10 +7188.89598 + 20 +6541.282846 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +157E + 8 +HOLZ + 10 +7190.699349 + 20 +6541.802666 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +157F + 8 +HOLZ + 10 +7192.654582 + 20 +6542.144791 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1580 + 8 +HOLZ + 10 +7194.740858 + 20 +6542.326563 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1581 + 8 +HOLZ + 10 +7196.932459 + 20 +6542.373688 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1582 + 8 +HOLZ + 10 +7199.203666 + 20 +6542.31187 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1583 + 8 +HOLZ + 10 +7201.52876 + 20 +6542.166816 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1584 + 8 +HOLZ + 10 +7203.882022 + 20 +6541.96423 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1585 + 8 +HOLZ + 10 +7206.237734 + 20 +6541.729819 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1586 + 8 +HOLZ + 10 +7208.570176 + 20 +6541.489288 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1587 + 8 +HOLZ + 10 +7210.864754 + 20 +6541.266199 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1588 + 8 +HOLZ + 10 +7213.151372 + 20 +6541.075549 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1589 + 8 +HOLZ + 10 +7215.471056 + 20 +6540.930189 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +158A + 8 +HOLZ + 10 +7217.864835 + 20 +6540.842973 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +158B + 8 +HOLZ + 10 +7220.373737 + 20 +6540.826753 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +158C + 8 +HOLZ + 10 +7223.038787 + 20 +6540.894382 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +158D + 8 +HOLZ + 10 +7225.901015 + 20 +6541.058713 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +158E + 8 +HOLZ + 10 +7229.001448 + 20 +6541.332599 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +158F + 8 +HOLZ + 10 +7232.353149 + 20 +6541.734603 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1590 + 8 +HOLZ + 10 +7235.857325 + 20 +6542.306141 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1591 + 8 +HOLZ + 10 +7239.387218 + 20 +6543.094339 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1592 + 8 +HOLZ + 10 +7242.81607 + 20 +6544.146321 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1593 + 8 +HOLZ + 10 +7246.017125 + 20 +6545.509214 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1594 + 8 +HOLZ + 10 +7248.863625 + 20 +6547.230145 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1595 + 8 +HOLZ + 10 +7251.228812 + 20 +6549.356239 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1596 + 8 +HOLZ + 10 +7252.985928 + 20 +6551.934622 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1597 + 8 +HOLZ + 10 +7113.15465 + 20 +6503.677065 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1598 + 8 +HOLZ + 10 +7124.441455 + 20 +6507.43738 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1599 + 8 +HOLZ + 10 +7137.609498 + 20 +6511.824451 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +159A + 8 +HOLZ + 10 +7150.777452 + 20 +6513.704608 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +159B + 8 +HOLZ + 10 +7163.945407 + 20 +6518.091679 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +159C + 8 +HOLZ + 10 +7177.113361 + 20 +6525.612308 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +159D + 8 +HOLZ + 10 +7178.99451 + 20 +6534.386449 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +159E + 8 +HOLZ + 10 +7189.027217 + 20 +6543.787291 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +159F + 8 +HOLZ + 10 +7209.092717 + 20 +6541.280378 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +15A0 + 8 +HOLZ + 10 +7226.02297 + 20 +6540.026922 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +15A1 + 8 +HOLZ + 10 +7249.223718 + 20 +6544.413992 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +15A2 + 8 +HOLZ + 10 +7252.985928 + 20 +6551.934622 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +15A3 + 8 +HOLZ + 0 +POLYLINE + 5 +15A4 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +15A5 + 8 +HOLZ + 10 +7087.44579 + 20 +6449.778981 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +15A6 + 8 +HOLZ + 10 +7087.44579 + 20 +6449.778981 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15A7 + 8 +HOLZ + 10 +7096.078787 + 20 +6453.101106 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15A8 + 8 +HOLZ + 10 +7103.308894 + 20 +6455.204059 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15A9 + 8 +HOLZ + 10 +7109.34982 + 20 +6456.278796 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15AA + 8 +HOLZ + 10 +7114.415274 + 20 +6456.51627 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15AB + 8 +HOLZ + 10 +7118.718968 + 20 +6456.107435 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15AC + 8 +HOLZ + 10 +7122.474609 + 20 +6455.243247 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15AD + 8 +HOLZ + 10 +7125.895908 + 20 +6454.11466 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15AE + 8 +HOLZ + 10 +7129.196574 + 20 +6452.912627 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15AF + 8 +HOLZ + 10 +7132.549903 + 20 +6451.801379 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15B0 + 8 +HOLZ + 10 +7135.967528 + 20 +6450.838242 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15B1 + 8 +HOLZ + 10 +7139.420669 + 20 +6450.053817 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15B2 + 8 +HOLZ + 10 +7142.880547 + 20 +6449.478708 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15B3 + 8 +HOLZ + 10 +7146.31838 + 20 +6449.143516 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15B4 + 8 +HOLZ + 10 +7149.705388 + 20 +6449.078842 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15B5 + 8 +HOLZ + 10 +7153.012791 + 20 +6449.315289 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15B6 + 8 +HOLZ + 10 +7156.211809 + 20 +6449.883459 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15B7 + 8 +HOLZ + 10 +7159.277233 + 20 +6450.801712 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15B8 + 8 +HOLZ + 10 +7162.198144 + 20 +6452.039447 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15B9 + 8 +HOLZ + 10 +7164.967192 + 20 +6453.553821 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15BA + 8 +HOLZ + 10 +7167.577029 + 20 +6455.301992 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15BB + 8 +HOLZ + 10 +7170.020308 + 20 +6457.241117 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15BC + 8 +HOLZ + 10 +7172.28968 + 20 +6459.328354 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15BD + 8 +HOLZ + 10 +7174.377797 + 20 +6461.520861 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15BE + 8 +HOLZ + 10 +7176.27731 + 20 +6463.775794 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15BF + 8 +HOLZ + 10 +7177.98924 + 20 +6466.055616 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15C0 + 8 +HOLZ + 10 +7179.548084 + 20 +6468.344006 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15C1 + 8 +HOLZ + 10 +7180.996704 + 20 +6470.629948 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15C2 + 8 +HOLZ + 10 +7182.377966 + 20 +6472.902425 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15C3 + 8 +HOLZ + 10 +7183.734733 + 20 +6475.15042 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15C4 + 8 +HOLZ + 10 +7185.109871 + 20 +6477.362918 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15C5 + 8 +HOLZ + 10 +7186.546244 + 20 +6479.528901 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15C6 + 8 +HOLZ + 10 +7188.086715 + 20 +6481.637354 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15C7 + 8 +HOLZ + 10 +7189.763536 + 20 +6483.673383 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15C8 + 8 +HOLZ + 10 +7191.566501 + 20 +6485.606591 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15C9 + 8 +HOLZ + 10 +7193.474788 + 20 +6487.402704 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15CA + 8 +HOLZ + 10 +7195.467579 + 20 +6489.027448 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15CB + 8 +HOLZ + 10 +7197.524054 + 20 +6490.446549 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15CC + 8 +HOLZ + 10 +7199.623391 + 20 +6491.625733 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15CD + 8 +HOLZ + 10 +7201.744772 + 20 +6492.530726 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15CE + 8 +HOLZ + 10 +7203.867377 + 20 +6493.127253 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15CF + 8 +HOLZ + 10 +7205.9761 + 20 +6493.391651 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15D0 + 8 +HOLZ + 10 +7208.078698 + 20 +6493.342687 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15D1 + 8 +HOLZ + 10 +7210.188644 + 20 +6493.009739 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15D2 + 8 +HOLZ + 10 +7212.31941 + 20 +6492.422186 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15D3 + 8 +HOLZ + 10 +7214.484468 + 20 +6491.609405 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15D4 + 8 +HOLZ + 10 +7216.697289 + 20 +6490.600774 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15D5 + 8 +HOLZ + 10 +7218.971346 + 20 +6489.425671 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15D6 + 8 +HOLZ + 10 +7221.320112 + 20 +6488.113473 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15D7 + 8 +HOLZ + 10 +7223.751955 + 20 +6486.696618 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15D8 + 8 +HOLZ + 10 +7226.254831 + 20 +6485.219785 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15D9 + 8 +HOLZ + 10 +7228.811596 + 20 +6483.730712 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15DA + 8 +HOLZ + 10 +7231.405103 + 20 +6482.277137 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15DB + 8 +HOLZ + 10 +7234.018206 + 20 +6480.906799 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15DC + 8 +HOLZ + 10 +7236.633759 + 20 +6479.667436 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15DD + 8 +HOLZ + 10 +7239.234616 + 20 +6478.606786 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15DE + 8 +HOLZ + 10 +7241.803631 + 20 +6477.772589 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15DF + 8 +HOLZ + 10 +7244.323045 + 20 +6477.204421 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15E0 + 8 +HOLZ + 10 +7246.772651 + 20 +6476.909219 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15E1 + 8 +HOLZ + 10 +7249.131629 + 20 +6476.885759 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15E2 + 8 +HOLZ + 10 +7251.379159 + 20 +6477.132818 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15E3 + 8 +HOLZ + 10 +7253.494422 + 20 +6477.649171 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15E4 + 8 +HOLZ + 10 +7255.456597 + 20 +6478.433593 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15E5 + 8 +HOLZ + 10 +7257.244865 + 20 +6479.484862 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15E6 + 8 +HOLZ + 10 +7258.838406 + 20 +6480.801753 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15E7 + 8 +HOLZ + 10 +7260.224769 + 20 +6482.377533 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15E8 + 8 +HOLZ + 10 +7261.424977 + 20 +6484.183438 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15E9 + 8 +HOLZ + 10 +7262.468424 + 20 +6486.185193 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15EA + 8 +HOLZ + 10 +7263.384501 + 20 +6488.348525 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15EB + 8 +HOLZ + 10 +7264.202602 + 20 +6490.639159 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15EC + 8 +HOLZ + 10 +7264.95212 + 20 +6493.022823 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15ED + 8 +HOLZ + 10 +7265.662445 + 20 +6495.465242 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15EE + 8 +HOLZ + 10 +7266.362973 + 20 +6497.932143 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15EF + 8 +HOLZ + 10 +7267.078501 + 20 +6500.390985 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15F0 + 8 +HOLZ + 10 +7267.815461 + 20 +6502.816166 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15F1 + 8 +HOLZ + 10 +7268.57569 + 20 +6505.183816 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15F2 + 8 +HOLZ + 10 +7269.361024 + 20 +6507.470065 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15F3 + 8 +HOLZ + 10 +7270.173303 + 20 +6509.651045 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15F4 + 8 +HOLZ + 10 +7271.014362 + 20 +6511.702884 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15F5 + 8 +HOLZ + 10 +7271.886039 + 20 +6513.601715 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15F6 + 8 +HOLZ + 10 +7272.790173 + 20 +6515.323668 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15F7 + 8 +HOLZ + 10 +7273.73064 + 20 +6516.847524 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15F8 + 8 +HOLZ + 10 +7274.719485 + 20 +6518.162678 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15F9 + 8 +HOLZ + 10 +7275.770791 + 20 +6519.261171 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15FA + 8 +HOLZ + 10 +7276.898641 + 20 +6520.13505 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15FB + 8 +HOLZ + 10 +7278.117121 + 20 +6520.776357 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15FC + 8 +HOLZ + 10 +7279.440314 + 20 +6521.177137 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15FD + 8 +HOLZ + 10 +7280.882303 + 20 +6521.329434 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15FE + 8 +HOLZ + 10 +7282.457173 + 20 +6521.225293 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15FF + 8 +HOLZ + 10 +7112.5276 + 20 +6460.43328 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1600 + 8 +HOLZ + 10 +7128.203753 + 20 +6451.659194 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1601 + 8 +HOLZ + 10 +7157.67491 + 20 +6446.018666 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1602 + 8 +HOLZ + 10 +7178.367461 + 20 +6463.566894 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1603 + 8 +HOLZ + 10 +7186.519106 + 20 +6482.368523 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1604 + 8 +HOLZ + 10 +7204.076408 + 20 +6496.783136 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1605 + 8 +HOLZ + 10 +7220.379523 + 20 +6489.262452 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1606 + 8 +HOLZ + 10 +7242.326172 + 20 +6474.847893 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1607 + 8 +HOLZ + 10 +7261.137574 + 20 +6477.981507 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1608 + 8 +HOLZ + 10 +7266.153971 + 20 +6498.036593 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1609 + 8 +HOLZ + 10 +7272.424379 + 20 +6517.464978 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +160A + 8 +HOLZ + 10 +7278.067826 + 20 +6521.851993 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +160B + 8 +HOLZ + 10 +7282.457173 + 20 +6521.225293 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +160C + 8 +HOLZ + 0 +POLYLINE + 5 +160D + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +160E + 8 +HOLZ + 10 +7085.564641 + 20 +6387.106811 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +160F + 8 +HOLZ + 10 +7085.564641 + 20 +6387.106811 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1610 + 8 +HOLZ + 10 +7098.873744 + 20 +6392.103355 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1611 + 8 +HOLZ + 10 +7109.443813 + 20 +6395.527584 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1612 + 8 +HOLZ + 10 +7117.680833 + 20 +6397.657973 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1613 + 8 +HOLZ + 10 +7123.990793 + 20 +6398.772997 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1614 + 8 +HOLZ + 10 +7128.779678 + 20 +6399.151133 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1615 + 8 +HOLZ + 10 +7132.453476 + 20 +6399.070855 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1616 + 8 +HOLZ + 10 +7135.418173 + 20 +6398.810638 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1617 + 8 +HOLZ + 10 +7138.079756 + 20 +6398.648959 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1618 + 8 +HOLZ + 10 +7140.769913 + 20 +6398.807984 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1619 + 8 +HOLZ + 10 +7143.52314 + 20 +6399.284655 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +161A + 8 +HOLZ + 10 +7146.299635 + 20 +6400.019603 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +161B + 8 +HOLZ + 10 +7149.059596 + 20 +6400.953463 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +161C + 8 +HOLZ + 10 +7151.763219 + 20 +6402.026866 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +161D + 8 +HOLZ + 10 +7154.370702 + 20 +6403.180446 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +161E + 8 +HOLZ + 10 +7156.842244 + 20 +6404.354835 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +161F + 8 +HOLZ + 10 +7159.138041 + 20 +6405.490667 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1620 + 8 +HOLZ + 10 +7161.230028 + 20 +6406.535613 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1621 + 8 +HOLZ + 10 +7163.137085 + 20 +6407.465497 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1622 + 8 +HOLZ + 10 +7164.889831 + 20 +6408.263182 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1623 + 8 +HOLZ + 10 +7166.518883 + 20 +6408.911532 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1624 + 8 +HOLZ + 10 +7168.054858 + 20 +6409.393408 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1625 + 8 +HOLZ + 10 +7169.528375 + 20 +6409.691674 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1626 + 8 +HOLZ + 10 +7170.970051 + 20 +6409.789194 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1627 + 8 +HOLZ + 10 +7172.410504 + 20 +6409.668828 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1628 + 8 +HOLZ + 10 +7173.87586 + 20 +6409.324662 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1629 + 8 +HOLZ + 10 +7175.374284 + 20 +6408.795662 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +162A + 8 +HOLZ + 10 +7176.909451 + 20 +6408.132014 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +162B + 8 +HOLZ + 10 +7178.485032 + 20 +6407.383905 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +162C + 8 +HOLZ + 10 +7180.104704 + 20 +6406.601522 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +162D + 8 +HOLZ + 10 +7181.772138 + 20 +6405.835052 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +162E + 8 +HOLZ + 10 +7183.49101 + 20 +6405.134681 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +162F + 8 +HOLZ + 10 +7185.264992 + 20 +6404.550598 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1630 + 8 +HOLZ + 10 +7187.094085 + 20 +6404.123603 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1631 + 8 +HOLZ + 10 +7188.963592 + 20 +6403.856961 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1632 + 8 +HOLZ + 10 +7190.855142 + 20 +6403.744551 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1633 + 8 +HOLZ + 10 +7192.750366 + 20 +6403.780254 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1634 + 8 +HOLZ + 10 +7194.630893 + 20 +6403.957948 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1635 + 8 +HOLZ + 10 +7196.478352 + 20 +6404.271513 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1636 + 8 +HOLZ + 10 +7198.274373 + 20 +6404.71483 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1637 + 8 +HOLZ + 10 +7200.000585 + 20 +6405.281776 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1638 + 8 +HOLZ + 10 +7201.646171 + 20 +6405.968068 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1639 + 8 +HOLZ + 10 +7203.230522 + 20 +6406.776767 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +163A + 8 +HOLZ + 10 +7204.780581 + 20 +6407.712768 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +163B + 8 +HOLZ + 10 +7206.323292 + 20 +6408.780968 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +163C + 8 +HOLZ + 10 +7207.885598 + 20 +6409.986263 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +163D + 8 +HOLZ + 10 +7209.494443 + 20 +6411.333549 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +163E + 8 +HOLZ + 10 +7211.17677 + 20 +6412.827723 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +163F + 8 +HOLZ + 10 +7212.959523 + 20 +6414.473681 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1640 + 8 +HOLZ + 10 +7214.860461 + 20 +6416.271423 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1641 + 8 +HOLZ + 10 +7216.860599 + 20 +6418.201365 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1642 + 8 +HOLZ + 10 +7218.931771 + 20 +6420.239024 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1643 + 8 +HOLZ + 10 +7221.045807 + 20 +6422.359919 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1644 + 8 +HOLZ + 10 +7223.17454 + 20 +6424.53957 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1645 + 8 +HOLZ + 10 +7225.289801 + 20 +6426.753496 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1646 + 8 +HOLZ + 10 +7227.363422 + 20 +6428.977214 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1647 + 8 +HOLZ + 10 +7229.367234 + 20 +6431.186243 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1648 + 8 +HOLZ + 10 +7231.284603 + 20 +6433.358755 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1649 + 8 +HOLZ + 10 +7233.145023 + 20 +6435.483529 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +164A + 8 +HOLZ + 10 +7234.989522 + 20 +6437.551997 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +164B + 8 +HOLZ + 10 +7236.859126 + 20 +6439.555589 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +164C + 8 +HOLZ + 10 +7238.794865 + 20 +6441.485737 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +164D + 8 +HOLZ + 10 +7240.837765 + 20 +6443.333873 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +164E + 8 +HOLZ + 10 +7243.028854 + 20 +6445.091429 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +164F + 8 +HOLZ + 10 +7245.409159 + 20 +6446.749836 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1650 + 8 +HOLZ + 10 +7248.020933 + 20 +6448.304197 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1651 + 8 +HOLZ + 10 +7250.911327 + 20 +6449.764305 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1652 + 8 +HOLZ + 10 +7254.128716 + 20 +6451.143625 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1653 + 8 +HOLZ + 10 +7257.721475 + 20 +6452.455621 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1654 + 8 +HOLZ + 10 +7261.73798 + 20 +6453.713759 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1655 + 8 +HOLZ + 10 +7266.226607 + 20 +6454.931502 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1656 + 8 +HOLZ + 10 +7271.235731 + 20 +6456.122316 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1657 + 8 +HOLZ + 10 +7276.813727 + 20 +6457.299666 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1658 + 8 +HOLZ + 10 +7125.068505 + 20 +6402.774881 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1659 + 8 +HOLZ + 10 +7136.982448 + 20 +6394.627496 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +165A + 8 +HOLZ + 10 +7161.437208 + 20 +6406.535196 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +165B + 8 +HOLZ + 10 +7172.096964 + 20 +6412.175723 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +165C + 8 +HOLZ + 10 +7184.637957 + 20 +6402.774881 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +165D + 8 +HOLZ + 10 +7200.94116 + 20 +6404.028338 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +165E + 8 +HOLZ + 10 +7211.600916 + 20 +6412.802424 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +165F + 8 +HOLZ + 10 +7230.412317 + 20 +6431.604053 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1660 + 8 +HOLZ + 10 +7242.953222 + 20 +6447.898824 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1661 + 8 +HOLZ + 10 +7261.137574 + 20 +6454.166052 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1662 + 8 +HOLZ + 10 +7276.813727 + 20 +6457.299666 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1663 + 8 +HOLZ + 0 +POLYLINE + 5 +1664 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1665 + 8 +HOLZ + 10 +7086.818741 + 20 +6345.116482 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1666 + 8 +HOLZ + 10 +7086.818741 + 20 +6345.116482 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1667 + 8 +HOLZ + 10 +7093.712069 + 20 +6344.816282 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1668 + 8 +HOLZ + 10 +7100.286362 + 20 +6345.241338 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1669 + 8 +HOLZ + 10 +7106.545906 + 20 +6346.264961 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +166A + 8 +HOLZ + 10 +7112.494987 + 20 +6347.76046 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +166B + 8 +HOLZ + 10 +7118.137892 + 20 +6349.601145 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +166C + 8 +HOLZ + 10 +7123.478908 + 20 +6351.660325 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +166D + 8 +HOLZ + 10 +7128.522322 + 20 +6353.81131 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +166E + 8 +HOLZ + 10 +7133.272419 + 20 +6355.92741 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +166F + 8 +HOLZ + 10 +7137.734916 + 20 +6357.900296 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1670 + 8 +HOLZ + 10 +7141.921243 + 20 +6359.695081 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1671 + 8 +HOLZ + 10 +7145.84426 + 20 +6361.29524 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1672 + 8 +HOLZ + 10 +7149.516825 + 20 +6362.684248 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1673 + 8 +HOLZ + 10 +7152.951799 + 20 +6363.845582 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1674 + 8 +HOLZ + 10 +7156.16204 + 20 +6364.762714 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1675 + 8 +HOLZ + 10 +7159.160409 + 20 +6365.419121 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1676 + 8 +HOLZ + 10 +7161.959764 + 20 +6365.798278 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1677 + 8 +HOLZ + 10 +7164.574292 + 20 +6365.892738 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1678 + 8 +HOLZ + 10 +7167.023486 + 20 +6365.731368 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1679 + 8 +HOLZ + 10 +7169.328166 + 20 +6365.352114 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +167A + 8 +HOLZ + 10 +7171.509151 + 20 +6364.792923 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +167B + 8 +HOLZ + 10 +7173.587262 + 20 +6364.091739 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +167C + 8 +HOLZ + 10 +7175.583317 + 20 +6363.286509 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +167D + 8 +HOLZ + 10 +7177.518138 + 20 +6362.415179 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +167E + 8 +HOLZ + 10 +7179.412543 + 20 +6361.515694 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +167F + 8 +HOLZ + 10 +7181.286333 + 20 +6360.620901 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1680 + 8 +HOLZ + 10 +7183.155224 + 20 +6359.743243 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1681 + 8 +HOLZ + 10 +7185.033912 + 20 +6358.890066 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1682 + 8 +HOLZ + 10 +7186.937095 + 20 +6358.068715 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1683 + 8 +HOLZ + 10 +7188.879468 + 20 +6357.286534 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1684 + 8 +HOLZ + 10 +7190.875729 + 20 +6356.550867 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1685 + 8 +HOLZ + 10 +7192.940573 + 20 +6355.86906 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1686 + 8 +HOLZ + 10 +7195.088696 + 20 +6355.248457 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1687 + 8 +HOLZ + 10 +7197.327857 + 20 +6354.699259 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1688 + 8 +HOLZ + 10 +7199.63805 + 20 +6354.243091 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1689 + 8 +HOLZ + 10 +7201.992333 + 20 +6353.904434 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +168A + 8 +HOLZ + 10 +7204.363762 + 20 +6353.707769 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +168B + 8 +HOLZ + 10 +7206.725393 + 20 +6353.677578 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +168C + 8 +HOLZ + 10 +7209.050283 + 20 +6353.838342 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +168D + 8 +HOLZ + 10 +7211.311488 + 20 +6354.214541 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +168E + 8 +HOLZ + 10 +7213.482065 + 20 +6354.830657 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +168F + 8 +HOLZ + 10 +7215.539764 + 20 +6355.702194 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1690 + 8 +HOLZ + 10 +7217.481117 + 20 +6356.808752 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1691 + 8 +HOLZ + 10 +7219.307348 + 20 +6358.120953 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1692 + 8 +HOLZ + 10 +7221.019682 + 20 +6359.609419 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1693 + 8 +HOLZ + 10 +7222.619343 + 20 +6361.244772 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1694 + 8 +HOLZ + 10 +7224.107557 + 20 +6362.997636 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1695 + 8 +HOLZ + 10 +7225.485548 + 20 +6364.838633 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1696 + 8 +HOLZ + 10 +7226.754542 + 20 +6366.738384 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1697 + 8 +HOLZ + 10 +7227.919641 + 20 +6368.671593 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1698 + 8 +HOLZ + 10 +7229.001461 + 20 +6370.629284 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1699 + 8 +HOLZ + 10 +7230.024496 + 20 +6372.606559 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +169A + 8 +HOLZ + 10 +7231.01324 + 20 +6374.598523 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +169B + 8 +HOLZ + 10 +7231.992185 + 20 +6376.600279 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +169C + 8 +HOLZ + 10 +7232.985827 + 20 +6378.60693 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +169D + 8 +HOLZ + 10 +7234.018659 + 20 +6380.613582 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +169E + 8 +HOLZ + 10 +7235.115175 + 20 +6382.615336 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +169F + 8 +HOLZ + 10 +7236.294969 + 20 +6384.609032 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16A0 + 8 +HOLZ + 10 +7237.558042 + 20 +6386.598443 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16A1 + 8 +HOLZ + 10 +7238.899495 + 20 +6388.589078 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16A2 + 8 +HOLZ + 10 +7240.314429 + 20 +6390.586444 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16A3 + 8 +HOLZ + 10 +7241.797946 + 20 +6392.596051 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16A4 + 8 +HOLZ + 10 +7243.345147 + 20 +6394.623408 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16A5 + 8 +HOLZ + 10 +7244.951132 + 20 +6396.674021 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16A6 + 8 +HOLZ + 10 +7246.611004 + 20 +6398.7534 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16A7 + 8 +HOLZ + 10 +7248.361299 + 20 +6400.86236 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16A8 + 8 +HOLZ + 10 +7250.404298 + 20 +6402.98295 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16A9 + 8 +HOLZ + 10 +7252.983717 + 20 +6405.092524 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16AA + 8 +HOLZ + 10 +7256.343272 + 20 +6407.168437 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16AB + 8 +HOLZ + 10 +7260.726679 + 20 +6409.188044 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16AC + 8 +HOLZ + 10 +7266.377654 + 20 +6411.1287 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16AD + 8 +HOLZ + 10 +7273.539914 + 20 +6412.967761 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16AE + 8 +HOLZ + 10 +7282.457173 + 20 +6414.682581 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16AF + 8 +HOLZ + 10 +7105.630142 + 20 +6343.236325 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +16B0 + 8 +HOLZ + 10 +7136.355399 + 20 +6357.650883 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +16B1 + 8 +HOLZ + 10 +7163.945407 + 20 +6368.931883 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +16B2 + 8 +HOLZ + 10 +7179.62156 + 20 +6361.411253 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +16B3 + 8 +HOLZ + 10 +7194.043614 + 20 +6354.517269 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +16B4 + 8 +HOLZ + 10 +7214.736164 + 20 +6352.010411 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +16B5 + 8 +HOLZ + 10 +7227.904118 + 20 +6366.425025 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +16B6 + 8 +HOLZ + 10 +7234.174615 + 20 +6382.719796 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +16B7 + 8 +HOLZ + 10 +7246.08847 + 20 +6398.387811 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +16B8 + 8 +HOLZ + 10 +7256.121176 + 20 +6410.295511 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +16B9 + 8 +HOLZ + 10 +7282.457173 + 20 +6414.682581 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +16BA + 8 +HOLZ + 0 +POLYLINE + 5 +16BB + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +16BC + 8 +HOLZ + 10 +7083.056443 + 20 +6308.766626 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +16BD + 8 +HOLZ + 10 +7083.056443 + 20 +6308.766626 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16BE + 8 +HOLZ + 10 +7092.901491 + 20 +6309.412614 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16BF + 8 +HOLZ + 10 +7100.973787 + 20 +6310.350545 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16C0 + 8 +HOLZ + 10 +7107.528682 + 20 +6311.490452 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16C1 + 8 +HOLZ + 10 +7112.821525 + 20 +6312.742363 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16C2 + 8 +HOLZ + 10 +7117.107666 + 20 +6314.016309 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16C3 + 8 +HOLZ + 10 +7120.642454 + 20 +6315.222321 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16C4 + 8 +HOLZ + 10 +7123.681241 + 20 +6316.270429 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16C5 + 8 +HOLZ + 10 +7126.479374 + 20 +6317.070664 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16C6 + 8 +HOLZ + 10 +7129.246687 + 20 +6317.555496 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16C7 + 8 +HOLZ + 10 +7132.010938 + 20 +6317.747164 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16C8 + 8 +HOLZ + 10 +7134.75437 + 20 +6317.690345 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16C9 + 8 +HOLZ + 10 +7137.459224 + 20 +6317.42972 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16CA + 8 +HOLZ + 10 +7140.107742 + 20 +6317.009965 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16CB + 8 +HOLZ + 10 +7142.682166 + 20 +6316.475761 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16CC + 8 +HOLZ + 10 +7145.164736 + 20 +6315.871786 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16CD + 8 +HOLZ + 10 +7147.537696 + 20 +6315.242718 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16CE + 8 +HOLZ + 10 +7149.791961 + 20 +6314.629461 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16CF + 8 +HOLZ + 10 +7151.953148 + 20 +6314.057824 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16D0 + 8 +HOLZ + 10 +7154.05555 + 20 +6313.549839 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16D1 + 8 +HOLZ + 10 +7156.133457 + 20 +6313.127539 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16D2 + 8 +HOLZ + 10 +7158.221162 + 20 +6312.812957 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16D3 + 8 +HOLZ + 10 +7160.352957 + 20 +6312.628127 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16D4 + 8 +HOLZ + 10 +7162.563133 + 20 +6312.59508 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16D5 + 8 +HOLZ + 10 +7164.885981 + 20 +6312.73585 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16D6 + 8 +HOLZ + 10 +7167.340894 + 20 +6313.064514 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16D7 + 8 +HOLZ + 10 +7169.88766 + 20 +6313.563323 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16D8 + 8 +HOLZ + 10 +7172.471167 + 20 +6314.20657 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16D9 + 8 +HOLZ + 10 +7175.036303 + 20 +6314.968552 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16DA + 8 +HOLZ + 10 +7177.527957 + 20 +6315.823562 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16DB + 8 +HOLZ + 10 +7179.891017 + 20 +6316.745895 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16DC + 8 +HOLZ + 10 +7182.070371 + 20 +6317.709846 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16DD + 8 +HOLZ + 10 +7184.010907 + 20 +6318.68971 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16DE + 8 +HOLZ + 10 +7185.696092 + 20 +6319.666308 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16DF + 8 +HOLZ + 10 +7187.263705 + 20 +6320.646578 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16E0 + 8 +HOLZ + 10 +7188.890101 + 20 +6321.643986 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16E1 + 8 +HOLZ + 10 +7190.75164 + 20 +6322.671995 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16E2 + 8 +HOLZ + 10 +7193.024677 + 20 +6323.74407 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16E3 + 8 +HOLZ + 10 +7195.885569 + 20 +6324.873677 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16E4 + 8 +HOLZ + 10 +7199.510675 + 20 +6326.074281 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16E5 + 8 +HOLZ + 10 +7204.076349 + 20 +6327.359346 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16E6 + 8 +HOLZ + 10 +7209.681693 + 20 +6328.728056 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16E7 + 8 +HOLZ + 10 +7216.116771 + 20 +6330.122472 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16E8 + 8 +HOLZ + 10 +7223.094391 + 20 +6331.470375 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16E9 + 8 +HOLZ + 10 +7230.327362 + 20 +6332.699544 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16EA + 8 +HOLZ + 10 +7237.528491 + 20 +6333.737758 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16EB + 8 +HOLZ + 10 +7244.410586 + 20 +6334.512798 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16EC + 8 +HOLZ + 10 +7250.686456 + 20 +6334.952444 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16ED + 8 +HOLZ + 10 +7256.068908 + 20 +6334.984476 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16EE + 8 +HOLZ + 10 +7260.358519 + 20 +6334.572171 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16EF + 8 +HOLZ + 10 +7263.70695 + 20 +6333.820799 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16F0 + 8 +HOLZ + 10 +7266.35363 + 20 +6332.871128 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16F1 + 8 +HOLZ + 10 +7268.537987 + 20 +6331.863927 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16F2 + 8 +HOLZ + 10 +7270.499451 + 20 +6330.939962 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16F3 + 8 +HOLZ + 10 +7272.477451 + 20 +6330.240002 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16F4 + 8 +HOLZ + 10 +7274.711416 + 20 +6329.904815 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16F5 + 8 +HOLZ + 10 +7277.440776 + 20 +6330.075168 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16F6 + 8 +HOLZ + 10 +7111.90055 + 20 +6310.020028 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +16F7 + 8 +HOLZ + 10 +7126.322604 + 20 +6320.674326 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +16F8 + 8 +HOLZ + 10 +7148.896303 + 20 +6315.033799 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +16F9 + 8 +HOLZ + 10 +7163.318357 + 20 +6310.646783 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +16FA + 8 +HOLZ + 10 +7187.146156 + 20 +6318.794169 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +16FB + 8 +HOLZ + 10 +7192.162465 + 20 +6326.314798 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +16FC + 8 +HOLZ + 10 +7268.662081 + 20 +6340.102711 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +16FD + 8 +HOLZ + 10 +7269.289131 + 20 +6328.821712 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +16FE + 8 +HOLZ + 10 +7277.440776 + 20 +6330.075168 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +16FF + 8 +HOLZ + 0 +POLYLINE + 5 +1700 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1701 + 8 +HOLZ + 10 +14031.943557 + 20 +6308.766626 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1702 + 8 +HOLZ + 10 +14031.943557 + 20 +6308.766626 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1703 + 8 +HOLZ + 10 +14022.098509 + 20 +6309.412614 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1704 + 8 +HOLZ + 10 +14014.026213 + 20 +6310.350545 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1705 + 8 +HOLZ + 10 +14007.471318 + 20 +6311.490452 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1706 + 8 +HOLZ + 10 +14002.178475 + 20 +6312.742363 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1707 + 8 +HOLZ + 10 +13997.892334 + 20 +6314.016309 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1708 + 8 +HOLZ + 10 +13994.357546 + 20 +6315.222321 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1709 + 8 +HOLZ + 10 +13991.318759 + 20 +6316.270429 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +170A + 8 +HOLZ + 10 +13988.520626 + 20 +6317.070664 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +170B + 8 +HOLZ + 10 +13985.753313 + 20 +6317.555496 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +170C + 8 +HOLZ + 10 +13982.989062 + 20 +6317.747164 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +170D + 8 +HOLZ + 10 +13980.24563 + 20 +6317.690345 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +170E + 8 +HOLZ + 10 +13977.540776 + 20 +6317.42972 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +170F + 8 +HOLZ + 10 +13974.892258 + 20 +6317.009965 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1710 + 8 +HOLZ + 10 +13972.317834 + 20 +6316.475761 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1711 + 8 +HOLZ + 10 +13969.835264 + 20 +6315.871786 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1712 + 8 +HOLZ + 10 +13967.462304 + 20 +6315.242718 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1713 + 8 +HOLZ + 10 +13965.208039 + 20 +6314.629461 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1714 + 8 +HOLZ + 10 +13963.046852 + 20 +6314.057824 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1715 + 8 +HOLZ + 10 +13960.94445 + 20 +6313.549839 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1716 + 8 +HOLZ + 10 +13958.866543 + 20 +6313.127539 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1717 + 8 +HOLZ + 10 +13956.778838 + 20 +6312.812957 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1718 + 8 +HOLZ + 10 +13954.647043 + 20 +6312.628127 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1719 + 8 +HOLZ + 10 +13952.436867 + 20 +6312.59508 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +171A + 8 +HOLZ + 10 +13950.114019 + 20 +6312.73585 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +171B + 8 +HOLZ + 10 +13947.659106 + 20 +6313.064514 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +171C + 8 +HOLZ + 10 +13945.11234 + 20 +6313.563323 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +171D + 8 +HOLZ + 10 +13942.528833 + 20 +6314.20657 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +171E + 8 +HOLZ + 10 +13939.963697 + 20 +6314.968552 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +171F + 8 +HOLZ + 10 +13937.472043 + 20 +6315.823562 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1720 + 8 +HOLZ + 10 +13935.108983 + 20 +6316.745895 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1721 + 8 +HOLZ + 10 +13932.929629 + 20 +6317.709846 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1722 + 8 +HOLZ + 10 +13930.989093 + 20 +6318.68971 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1723 + 8 +HOLZ + 10 +13929.303908 + 20 +6319.666308 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1724 + 8 +HOLZ + 10 +13927.736295 + 20 +6320.646578 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1725 + 8 +HOLZ + 10 +13926.109899 + 20 +6321.643986 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1726 + 8 +HOLZ + 10 +13924.24836 + 20 +6322.671995 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1727 + 8 +HOLZ + 10 +13921.975323 + 20 +6323.74407 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1728 + 8 +HOLZ + 10 +13919.114431 + 20 +6324.873677 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1729 + 8 +HOLZ + 10 +13915.489325 + 20 +6326.074281 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +172A + 8 +HOLZ + 10 +13910.923651 + 20 +6327.359346 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +172B + 8 +HOLZ + 10 +13905.318307 + 20 +6328.728056 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +172C + 8 +HOLZ + 10 +13898.883229 + 20 +6330.122472 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +172D + 8 +HOLZ + 10 +13891.905609 + 20 +6331.470375 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +172E + 8 +HOLZ + 10 +13884.672638 + 20 +6332.699544 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +172F + 8 +HOLZ + 10 +13877.471509 + 20 +6333.737758 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1730 + 8 +HOLZ + 10 +13870.589414 + 20 +6334.512798 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1731 + 8 +HOLZ + 10 +13864.313544 + 20 +6334.952444 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1732 + 8 +HOLZ + 10 +13858.931092 + 20 +6334.984476 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1733 + 8 +HOLZ + 10 +13854.641481 + 20 +6334.572171 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1734 + 8 +HOLZ + 10 +13851.29305 + 20 +6333.820799 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1735 + 8 +HOLZ + 10 +13848.64637 + 20 +6332.871128 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1736 + 8 +HOLZ + 10 +13846.462013 + 20 +6331.863927 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1737 + 8 +HOLZ + 10 +13844.500549 + 20 +6330.939962 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1738 + 8 +HOLZ + 10 +13842.522549 + 20 +6330.240002 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1739 + 8 +HOLZ + 10 +13840.288584 + 20 +6329.904815 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +173A + 8 +HOLZ + 10 +13837.559224 + 20 +6330.075168 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +173B + 8 +HOLZ + 10 +14003.09945 + 20 +6310.020028 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +173C + 8 +HOLZ + 10 +13988.677396 + 20 +6320.674326 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +173D + 8 +HOLZ + 10 +13966.103697 + 20 +6315.033799 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +173E + 8 +HOLZ + 10 +13951.681643 + 20 +6310.646783 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +173F + 8 +HOLZ + 10 +13927.853844 + 20 +6318.794169 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1740 + 8 +HOLZ + 10 +13922.837535 + 20 +6326.314798 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1741 + 8 +HOLZ + 10 +13846.337919 + 20 +6340.102711 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1742 + 8 +HOLZ + 10 +13845.710869 + 20 +6328.821712 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1743 + 8 +HOLZ + 10 +13837.559224 + 20 +6330.075168 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1744 + 8 +HOLZ + 0 +POLYLINE + 5 +1745 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1746 + 8 +HOLZ + 10 +14028.181259 + 20 +6345.116482 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1747 + 8 +HOLZ + 10 +14028.181259 + 20 +6345.116482 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1748 + 8 +HOLZ + 10 +14021.287931 + 20 +6344.816282 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1749 + 8 +HOLZ + 10 +14014.713638 + 20 +6345.241338 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +174A + 8 +HOLZ + 10 +14008.454094 + 20 +6346.264961 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +174B + 8 +HOLZ + 10 +14002.505013 + 20 +6347.76046 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +174C + 8 +HOLZ + 10 +13996.862108 + 20 +6349.601145 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +174D + 8 +HOLZ + 10 +13991.521092 + 20 +6351.660325 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +174E + 8 +HOLZ + 10 +13986.477678 + 20 +6353.81131 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +174F + 8 +HOLZ + 10 +13981.727581 + 20 +6355.92741 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1750 + 8 +HOLZ + 10 +13977.265084 + 20 +6357.900296 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1751 + 8 +HOLZ + 10 +13973.078757 + 20 +6359.695081 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1752 + 8 +HOLZ + 10 +13969.15574 + 20 +6361.29524 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1753 + 8 +HOLZ + 10 +13965.483175 + 20 +6362.684248 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1754 + 8 +HOLZ + 10 +13962.048201 + 20 +6363.845582 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1755 + 8 +HOLZ + 10 +13958.83796 + 20 +6364.762714 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1756 + 8 +HOLZ + 10 +13955.839591 + 20 +6365.419121 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1757 + 8 +HOLZ + 10 +13953.040236 + 20 +6365.798278 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1758 + 8 +HOLZ + 10 +13950.425708 + 20 +6365.892738 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1759 + 8 +HOLZ + 10 +13947.976514 + 20 +6365.731368 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +175A + 8 +HOLZ + 10 +13945.671834 + 20 +6365.352114 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +175B + 8 +HOLZ + 10 +13943.490849 + 20 +6364.792923 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +175C + 8 +HOLZ + 10 +13941.412738 + 20 +6364.091739 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +175D + 8 +HOLZ + 10 +13939.416683 + 20 +6363.286509 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +175E + 8 +HOLZ + 10 +13937.481862 + 20 +6362.415179 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +175F + 8 +HOLZ + 10 +13935.587457 + 20 +6361.515694 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1760 + 8 +HOLZ + 10 +13933.713667 + 20 +6360.620901 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1761 + 8 +HOLZ + 10 +13931.844776 + 20 +6359.743243 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1762 + 8 +HOLZ + 10 +13929.966088 + 20 +6358.890066 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1763 + 8 +HOLZ + 10 +13928.062905 + 20 +6358.068715 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1764 + 8 +HOLZ + 10 +13926.120532 + 20 +6357.286534 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1765 + 8 +HOLZ + 10 +13924.124271 + 20 +6356.550867 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1766 + 8 +HOLZ + 10 +13922.059427 + 20 +6355.86906 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1767 + 8 +HOLZ + 10 +13919.911304 + 20 +6355.248457 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1768 + 8 +HOLZ + 10 +13917.672143 + 20 +6354.699259 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1769 + 8 +HOLZ + 10 +13915.36195 + 20 +6354.243091 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +176A + 8 +HOLZ + 10 +13913.007667 + 20 +6353.904434 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +176B + 8 +HOLZ + 10 +13910.636238 + 20 +6353.707769 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +176C + 8 +HOLZ + 10 +13908.274607 + 20 +6353.677578 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +176D + 8 +HOLZ + 10 +13905.949717 + 20 +6353.838342 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +176E + 8 +HOLZ + 10 +13903.688512 + 20 +6354.214541 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +176F + 8 +HOLZ + 10 +13901.517935 + 20 +6354.830657 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1770 + 8 +HOLZ + 10 +13899.460236 + 20 +6355.702194 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1771 + 8 +HOLZ + 10 +13897.518883 + 20 +6356.808752 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1772 + 8 +HOLZ + 10 +13895.692652 + 20 +6358.120953 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1773 + 8 +HOLZ + 10 +13893.980318 + 20 +6359.609419 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1774 + 8 +HOLZ + 10 +13892.380657 + 20 +6361.244772 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1775 + 8 +HOLZ + 10 +13890.892443 + 20 +6362.997636 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1776 + 8 +HOLZ + 10 +13889.514452 + 20 +6364.838633 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1777 + 8 +HOLZ + 10 +13888.245458 + 20 +6366.738384 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1778 + 8 +HOLZ + 10 +13887.080359 + 20 +6368.671593 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1779 + 8 +HOLZ + 10 +13885.998539 + 20 +6370.629284 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +177A + 8 +HOLZ + 10 +13884.975504 + 20 +6372.606559 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +177B + 8 +HOLZ + 10 +13883.98676 + 20 +6374.598523 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +177C + 8 +HOLZ + 10 +13883.007815 + 20 +6376.600279 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +177D + 8 +HOLZ + 10 +13882.014173 + 20 +6378.60693 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +177E + 8 +HOLZ + 10 +13880.981341 + 20 +6380.613582 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +177F + 8 +HOLZ + 10 +13879.884825 + 20 +6382.615336 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1780 + 8 +HOLZ + 10 +13878.705031 + 20 +6384.609032 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1781 + 8 +HOLZ + 10 +13877.441958 + 20 +6386.598443 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1782 + 8 +HOLZ + 10 +13876.100505 + 20 +6388.589078 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1783 + 8 +HOLZ + 10 +13874.685571 + 20 +6390.586444 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1784 + 8 +HOLZ + 10 +13873.202054 + 20 +6392.596051 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1785 + 8 +HOLZ + 10 +13871.654853 + 20 +6394.623408 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1786 + 8 +HOLZ + 10 +13870.048868 + 20 +6396.674021 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1787 + 8 +HOLZ + 10 +13868.388996 + 20 +6398.7534 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1788 + 8 +HOLZ + 10 +13866.638701 + 20 +6400.86236 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1789 + 8 +HOLZ + 10 +13864.595702 + 20 +6402.98295 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +178A + 8 +HOLZ + 10 +13862.016283 + 20 +6405.092524 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +178B + 8 +HOLZ + 10 +13858.656728 + 20 +6407.168437 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +178C + 8 +HOLZ + 10 +13854.273321 + 20 +6409.188044 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +178D + 8 +HOLZ + 10 +13848.622346 + 20 +6411.1287 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +178E + 8 +HOLZ + 10 +13841.460086 + 20 +6412.967761 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +178F + 8 +HOLZ + 10 +13832.542827 + 20 +6414.682581 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1790 + 8 +HOLZ + 10 +14009.369858 + 20 +6343.236325 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1791 + 8 +HOLZ + 10 +13978.644601 + 20 +6357.650883 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1792 + 8 +HOLZ + 10 +13951.054593 + 20 +6368.931883 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1793 + 8 +HOLZ + 10 +13935.37844 + 20 +6361.411253 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1794 + 8 +HOLZ + 10 +13920.956386 + 20 +6354.517269 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1795 + 8 +HOLZ + 10 +13900.263836 + 20 +6352.010411 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1796 + 8 +HOLZ + 10 +13887.095882 + 20 +6366.425025 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1797 + 8 +HOLZ + 10 +13880.825385 + 20 +6382.719796 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1798 + 8 +HOLZ + 10 +13868.91153 + 20 +6398.387811 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1799 + 8 +HOLZ + 10 +13858.878824 + 20 +6410.295511 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +179A + 8 +HOLZ + 10 +13832.542827 + 20 +6414.682581 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +179B + 8 +HOLZ + 0 +POLYLINE + 5 +179C + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +179D + 8 +HOLZ + 10 +14029.435359 + 20 +6387.106811 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +179E + 8 +HOLZ + 10 +14029.435359 + 20 +6387.106811 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +179F + 8 +HOLZ + 10 +14016.126256 + 20 +6392.103355 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17A0 + 8 +HOLZ + 10 +14005.556187 + 20 +6395.527584 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17A1 + 8 +HOLZ + 10 +13997.319167 + 20 +6397.657973 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17A2 + 8 +HOLZ + 10 +13991.009207 + 20 +6398.772997 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17A3 + 8 +HOLZ + 10 +13986.220322 + 20 +6399.151133 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17A4 + 8 +HOLZ + 10 +13982.546524 + 20 +6399.070855 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17A5 + 8 +HOLZ + 10 +13979.581827 + 20 +6398.810638 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17A6 + 8 +HOLZ + 10 +13976.920244 + 20 +6398.648959 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17A7 + 8 +HOLZ + 10 +13974.230087 + 20 +6398.807984 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17A8 + 8 +HOLZ + 10 +13971.47686 + 20 +6399.284655 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17A9 + 8 +HOLZ + 10 +13968.700365 + 20 +6400.019603 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17AA + 8 +HOLZ + 10 +13965.940404 + 20 +6400.953463 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17AB + 8 +HOLZ + 10 +13963.236781 + 20 +6402.026866 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17AC + 8 +HOLZ + 10 +13960.629298 + 20 +6403.180446 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17AD + 8 +HOLZ + 10 +13958.157756 + 20 +6404.354835 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17AE + 8 +HOLZ + 10 +13955.861959 + 20 +6405.490667 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17AF + 8 +HOLZ + 10 +13953.769972 + 20 +6406.535613 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17B0 + 8 +HOLZ + 10 +13951.862915 + 20 +6407.465497 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17B1 + 8 +HOLZ + 10 +13950.110169 + 20 +6408.263182 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17B2 + 8 +HOLZ + 10 +13948.481117 + 20 +6408.911532 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17B3 + 8 +HOLZ + 10 +13946.945142 + 20 +6409.393408 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17B4 + 8 +HOLZ + 10 +13945.471625 + 20 +6409.691674 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17B5 + 8 +HOLZ + 10 +13944.029949 + 20 +6409.789194 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17B6 + 8 +HOLZ + 10 +13942.589496 + 20 +6409.668828 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17B7 + 8 +HOLZ + 10 +13941.12414 + 20 +6409.324662 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17B8 + 8 +HOLZ + 10 +13939.625716 + 20 +6408.795662 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17B9 + 8 +HOLZ + 10 +13938.090549 + 20 +6408.132014 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17BA + 8 +HOLZ + 10 +13936.514968 + 20 +6407.383905 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17BB + 8 +HOLZ + 10 +13934.895296 + 20 +6406.601522 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17BC + 8 +HOLZ + 10 +13933.227862 + 20 +6405.835052 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17BD + 8 +HOLZ + 10 +13931.50899 + 20 +6405.134681 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17BE + 8 +HOLZ + 10 +13929.735008 + 20 +6404.550598 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17BF + 8 +HOLZ + 10 +13927.905915 + 20 +6404.123603 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17C0 + 8 +HOLZ + 10 +13926.036408 + 20 +6403.856961 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17C1 + 8 +HOLZ + 10 +13924.144858 + 20 +6403.744551 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17C2 + 8 +HOLZ + 10 +13922.249634 + 20 +6403.780254 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17C3 + 8 +HOLZ + 10 +13920.369107 + 20 +6403.957948 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17C4 + 8 +HOLZ + 10 +13918.521648 + 20 +6404.271513 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17C5 + 8 +HOLZ + 10 +13916.725627 + 20 +6404.71483 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17C6 + 8 +HOLZ + 10 +13914.999415 + 20 +6405.281776 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17C7 + 8 +HOLZ + 10 +13913.353829 + 20 +6405.968068 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17C8 + 8 +HOLZ + 10 +13911.769478 + 20 +6406.776767 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17C9 + 8 +HOLZ + 10 +13910.219419 + 20 +6407.712768 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17CA + 8 +HOLZ + 10 +13908.676708 + 20 +6408.780968 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17CB + 8 +HOLZ + 10 +13907.114402 + 20 +6409.986263 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17CC + 8 +HOLZ + 10 +13905.505557 + 20 +6411.333549 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17CD + 8 +HOLZ + 10 +13903.82323 + 20 +6412.827723 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17CE + 8 +HOLZ + 10 +13902.040477 + 20 +6414.473681 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17CF + 8 +HOLZ + 10 +13900.139539 + 20 +6416.271423 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17D0 + 8 +HOLZ + 10 +13898.139401 + 20 +6418.201365 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17D1 + 8 +HOLZ + 10 +13896.068229 + 20 +6420.239024 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17D2 + 8 +HOLZ + 10 +13893.954193 + 20 +6422.359919 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17D3 + 8 +HOLZ + 10 +13891.82546 + 20 +6424.53957 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17D4 + 8 +HOLZ + 10 +13889.710199 + 20 +6426.753496 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17D5 + 8 +HOLZ + 10 +13887.636578 + 20 +6428.977214 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17D6 + 8 +HOLZ + 10 +13885.632766 + 20 +6431.186243 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17D7 + 8 +HOLZ + 10 +13883.715397 + 20 +6433.358755 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17D8 + 8 +HOLZ + 10 +13881.854977 + 20 +6435.483529 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17D9 + 8 +HOLZ + 10 +13880.010478 + 20 +6437.551997 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17DA + 8 +HOLZ + 10 +13878.140874 + 20 +6439.555589 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17DB + 8 +HOLZ + 10 +13876.205135 + 20 +6441.485737 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17DC + 8 +HOLZ + 10 +13874.162235 + 20 +6443.333873 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17DD + 8 +HOLZ + 10 +13871.971146 + 20 +6445.091429 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17DE + 8 +HOLZ + 10 +13869.590841 + 20 +6446.749836 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17DF + 8 +HOLZ + 10 +13866.979067 + 20 +6448.304197 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17E0 + 8 +HOLZ + 10 +13864.088673 + 20 +6449.764305 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17E1 + 8 +HOLZ + 10 +13860.871284 + 20 +6451.143625 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17E2 + 8 +HOLZ + 10 +13857.278525 + 20 +6452.455621 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17E3 + 8 +HOLZ + 10 +13853.26202 + 20 +6453.713759 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17E4 + 8 +HOLZ + 10 +13848.773393 + 20 +6454.931502 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17E5 + 8 +HOLZ + 10 +13843.764269 + 20 +6456.122316 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17E6 + 8 +HOLZ + 10 +13838.186273 + 20 +6457.299666 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17E7 + 8 +HOLZ + 10 +13989.931495 + 20 +6402.774881 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +17E8 + 8 +HOLZ + 10 +13978.017552 + 20 +6394.627496 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +17E9 + 8 +HOLZ + 10 +13953.562792 + 20 +6406.535196 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +17EA + 8 +HOLZ + 10 +13942.903036 + 20 +6412.175723 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +17EB + 8 +HOLZ + 10 +13930.362043 + 20 +6402.774881 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +17EC + 8 +HOLZ + 10 +13914.05884 + 20 +6404.028338 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +17ED + 8 +HOLZ + 10 +13903.399084 + 20 +6412.802424 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +17EE + 8 +HOLZ + 10 +13884.587683 + 20 +6431.604053 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +17EF + 8 +HOLZ + 10 +13872.046778 + 20 +6447.898824 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +17F0 + 8 +HOLZ + 10 +13853.862426 + 20 +6454.166052 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +17F1 + 8 +HOLZ + 10 +13838.186273 + 20 +6457.299666 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +17F2 + 8 +HOLZ + 0 +POLYLINE + 5 +17F3 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +17F4 + 8 +HOLZ + 10 +14027.55421 + 20 +6449.778981 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +17F5 + 8 +HOLZ + 10 +14027.55421 + 20 +6449.778981 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17F6 + 8 +HOLZ + 10 +14018.921213 + 20 +6453.101106 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17F7 + 8 +HOLZ + 10 +14011.691106 + 20 +6455.204059 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17F8 + 8 +HOLZ + 10 +14005.65018 + 20 +6456.278796 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17F9 + 8 +HOLZ + 10 +14000.584726 + 20 +6456.51627 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17FA + 8 +HOLZ + 10 +13996.281032 + 20 +6456.107435 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17FB + 8 +HOLZ + 10 +13992.525391 + 20 +6455.243247 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17FC + 8 +HOLZ + 10 +13989.104092 + 20 +6454.11466 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17FD + 8 +HOLZ + 10 +13985.803426 + 20 +6452.912627 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17FE + 8 +HOLZ + 10 +13982.450097 + 20 +6451.801379 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17FF + 8 +HOLZ + 10 +13979.032472 + 20 +6450.838242 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1800 + 8 +HOLZ + 10 +13975.579331 + 20 +6450.053817 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1801 + 8 +HOLZ + 10 +13972.119453 + 20 +6449.478708 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1802 + 8 +HOLZ + 10 +13968.68162 + 20 +6449.143516 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1803 + 8 +HOLZ + 10 +13965.294612 + 20 +6449.078842 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1804 + 8 +HOLZ + 10 +13961.987209 + 20 +6449.315289 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1805 + 8 +HOLZ + 10 +13958.788191 + 20 +6449.883459 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1806 + 8 +HOLZ + 10 +13955.722767 + 20 +6450.801712 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1807 + 8 +HOLZ + 10 +13952.801856 + 20 +6452.039447 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1808 + 8 +HOLZ + 10 +13950.032808 + 20 +6453.553821 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1809 + 8 +HOLZ + 10 +13947.422971 + 20 +6455.301992 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +180A + 8 +HOLZ + 10 +13944.979692 + 20 +6457.241117 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +180B + 8 +HOLZ + 10 +13942.71032 + 20 +6459.328354 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +180C + 8 +HOLZ + 10 +13940.622203 + 20 +6461.520861 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +180D + 8 +HOLZ + 10 +13938.72269 + 20 +6463.775794 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +180E + 8 +HOLZ + 10 +13937.01076 + 20 +6466.055616 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +180F + 8 +HOLZ + 10 +13935.451916 + 20 +6468.344006 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1810 + 8 +HOLZ + 10 +13934.003296 + 20 +6470.629948 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1811 + 8 +HOLZ + 10 +13932.622034 + 20 +6472.902425 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1812 + 8 +HOLZ + 10 +13931.265267 + 20 +6475.15042 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1813 + 8 +HOLZ + 10 +13929.890129 + 20 +6477.362918 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1814 + 8 +HOLZ + 10 +13928.453756 + 20 +6479.528901 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1815 + 8 +HOLZ + 10 +13926.913285 + 20 +6481.637354 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1816 + 8 +HOLZ + 10 +13925.236464 + 20 +6483.673383 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1817 + 8 +HOLZ + 10 +13923.433499 + 20 +6485.606591 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1818 + 8 +HOLZ + 10 +13921.525212 + 20 +6487.402704 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1819 + 8 +HOLZ + 10 +13919.532421 + 20 +6489.027448 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +181A + 8 +HOLZ + 10 +13917.475946 + 20 +6490.446549 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +181B + 8 +HOLZ + 10 +13915.376609 + 20 +6491.625733 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +181C + 8 +HOLZ + 10 +13913.255228 + 20 +6492.530726 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +181D + 8 +HOLZ + 10 +13911.132623 + 20 +6493.127253 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +181E + 8 +HOLZ + 10 +13909.0239 + 20 +6493.391651 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +181F + 8 +HOLZ + 10 +13906.921302 + 20 +6493.342687 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1820 + 8 +HOLZ + 10 +13904.811356 + 20 +6493.009739 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1821 + 8 +HOLZ + 10 +13902.68059 + 20 +6492.422186 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1822 + 8 +HOLZ + 10 +13900.515532 + 20 +6491.609405 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1823 + 8 +HOLZ + 10 +13898.302711 + 20 +6490.600774 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1824 + 8 +HOLZ + 10 +13896.028654 + 20 +6489.425671 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1825 + 8 +HOLZ + 10 +13893.679888 + 20 +6488.113473 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1826 + 8 +HOLZ + 10 +13891.248045 + 20 +6486.696618 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1827 + 8 +HOLZ + 10 +13888.745169 + 20 +6485.219785 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1828 + 8 +HOLZ + 10 +13886.188404 + 20 +6483.730712 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1829 + 8 +HOLZ + 10 +13883.594897 + 20 +6482.277137 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +182A + 8 +HOLZ + 10 +13880.981794 + 20 +6480.906799 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +182B + 8 +HOLZ + 10 +13878.366241 + 20 +6479.667436 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +182C + 8 +HOLZ + 10 +13875.765384 + 20 +6478.606786 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +182D + 8 +HOLZ + 10 +13873.196369 + 20 +6477.772589 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +182E + 8 +HOLZ + 10 +13870.676955 + 20 +6477.204421 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +182F + 8 +HOLZ + 10 +13868.227349 + 20 +6476.909219 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1830 + 8 +HOLZ + 10 +13865.868371 + 20 +6476.885759 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1831 + 8 +HOLZ + 10 +13863.620841 + 20 +6477.132818 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1832 + 8 +HOLZ + 10 +13861.505578 + 20 +6477.649171 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1833 + 8 +HOLZ + 10 +13859.543403 + 20 +6478.433593 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1834 + 8 +HOLZ + 10 +13857.755135 + 20 +6479.484862 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1835 + 8 +HOLZ + 10 +13856.161594 + 20 +6480.801753 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1836 + 8 +HOLZ + 10 +13854.775231 + 20 +6482.377533 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1837 + 8 +HOLZ + 10 +13853.575023 + 20 +6484.183438 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1838 + 8 +HOLZ + 10 +13852.531576 + 20 +6486.185193 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1839 + 8 +HOLZ + 10 +13851.615499 + 20 +6488.348525 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +183A + 8 +HOLZ + 10 +13850.797398 + 20 +6490.639159 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +183B + 8 +HOLZ + 10 +13850.04788 + 20 +6493.022823 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +183C + 8 +HOLZ + 10 +13849.337555 + 20 +6495.465242 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +183D + 8 +HOLZ + 10 +13848.637027 + 20 +6497.932143 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +183E + 8 +HOLZ + 10 +13847.921499 + 20 +6500.390985 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +183F + 8 +HOLZ + 10 +13847.184539 + 20 +6502.816166 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1840 + 8 +HOLZ + 10 +13846.42431 + 20 +6505.183816 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1841 + 8 +HOLZ + 10 +13845.638976 + 20 +6507.470065 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1842 + 8 +HOLZ + 10 +13844.826697 + 20 +6509.651045 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1843 + 8 +HOLZ + 10 +13843.985638 + 20 +6511.702884 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1844 + 8 +HOLZ + 10 +13843.113961 + 20 +6513.601715 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1845 + 8 +HOLZ + 10 +13842.209827 + 20 +6515.323668 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1846 + 8 +HOLZ + 10 +13841.26936 + 20 +6516.847524 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1847 + 8 +HOLZ + 10 +13840.280515 + 20 +6518.162678 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1848 + 8 +HOLZ + 10 +13839.229209 + 20 +6519.261171 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1849 + 8 +HOLZ + 10 +13838.101359 + 20 +6520.13505 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +184A + 8 +HOLZ + 10 +13836.882879 + 20 +6520.776357 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +184B + 8 +HOLZ + 10 +13835.559686 + 20 +6521.177137 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +184C + 8 +HOLZ + 10 +13834.117697 + 20 +6521.329434 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +184D + 8 +HOLZ + 10 +13832.542827 + 20 +6521.225293 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +184E + 8 +HOLZ + 10 +14002.4724 + 20 +6460.43328 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +184F + 8 +HOLZ + 10 +13986.796247 + 20 +6451.659194 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1850 + 8 +HOLZ + 10 +13957.32509 + 20 +6446.018666 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1851 + 8 +HOLZ + 10 +13936.632539 + 20 +6463.566894 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1852 + 8 +HOLZ + 10 +13928.480894 + 20 +6482.368523 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1853 + 8 +HOLZ + 10 +13910.923592 + 20 +6496.783136 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1854 + 8 +HOLZ + 10 +13894.620477 + 20 +6489.262452 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1855 + 8 +HOLZ + 10 +13872.673828 + 20 +6474.847893 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1856 + 8 +HOLZ + 10 +13853.862426 + 20 +6477.981507 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1857 + 8 +HOLZ + 10 +13848.846029 + 20 +6498.036593 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1858 + 8 +HOLZ + 10 +13842.575621 + 20 +6517.464978 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1859 + 8 +HOLZ + 10 +13836.932174 + 20 +6521.851993 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +185A + 8 +HOLZ + 10 +13832.542827 + 20 +6521.225293 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +185B + 8 +HOLZ + 0 +POLYLINE + 5 +185C + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +185D + 8 +HOLZ + 10 +14026.92716 + 20 +6503.677065 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +185E + 8 +HOLZ + 10 +14026.92716 + 20 +6503.677065 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +185F + 8 +HOLZ + 10 +14018.395916 + 20 +6503.761117 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1860 + 8 +HOLZ + 10 +14011.466576 + 20 +6503.996953 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1861 + 8 +HOLZ + 10 +14005.918696 + 20 +6504.360091 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1862 + 8 +HOLZ + 10 +14001.531828 + 20 +6504.826051 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1863 + 8 +HOLZ + 10 +13998.085528 + 20 +6505.370351 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1864 + 8 +HOLZ + 10 +13995.359349 + 20 +6505.968509 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1865 + 8 +HOLZ + 10 +13993.132846 + 20 +6506.596046 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1866 + 8 +HOLZ + 10 +13991.185572 + 20 +6507.22848 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1867 + 8 +HOLZ + 10 +13989.332599 + 20 +6507.845001 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1868 + 8 +HOLZ + 10 +13987.531062 + 20 +6508.439489 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1869 + 8 +HOLZ + 10 +13985.773612 + 20 +6509.009497 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +186A + 8 +HOLZ + 10 +13984.052904 + 20 +6509.552575 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +186B + 8 +HOLZ + 10 +13982.361588 + 20 +6510.066276 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +186C + 8 +HOLZ + 10 +13980.692316 + 20 +6510.548151 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +186D + 8 +HOLZ + 10 +13979.037742 + 20 +6510.995753 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +186E + 8 +HOLZ + 10 +13977.390517 + 20 +6511.406632 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +186F + 8 +HOLZ + 10 +13975.744518 + 20 +6511.78038 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1870 + 8 +HOLZ + 10 +13974.09852 + 20 +6512.124751 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1871 + 8 +HOLZ + 10 +13972.452523 + 20 +6512.449536 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1872 + 8 +HOLZ + 10 +13970.806527 + 20 +6512.764529 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1873 + 8 +HOLZ + 10 +13969.160531 + 20 +6513.079522 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1874 + 8 +HOLZ + 10 +13967.514536 + 20 +6513.404307 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1875 + 8 +HOLZ + 10 +13965.868542 + 20 +6513.748678 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1876 + 8 +HOLZ + 10 +13964.222548 + 20 +6514.122427 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1877 + 8 +HOLZ + 10 +13962.576553 + 20 +6514.533918 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1878 + 8 +HOLZ + 10 +13960.930559 + 20 +6514.985803 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1879 + 8 +HOLZ + 10 +13959.284565 + 20 +6515.479307 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +187A + 8 +HOLZ + 10 +13957.63857 + 20 +6516.015653 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +187B + 8 +HOLZ + 10 +13955.992576 + 20 +6516.596065 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +187C + 8 +HOLZ + 10 +13954.346582 + 20 +6517.221768 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +187D + 8 +HOLZ + 10 +13952.700587 + 20 +6517.893984 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +187E + 8 +HOLZ + 10 +13951.054593 + 20 +6518.613938 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +187F + 8 +HOLZ + 10 +13949.412273 + 20 +6519.382039 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1880 + 8 +HOLZ + 10 +13947.791997 + 20 +6520.195429 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1881 + 8 +HOLZ + 10 +13946.215811 + 20 +6521.050437 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1882 + 8 +HOLZ + 10 +13944.705758 + 20 +6521.943391 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1883 + 8 +HOLZ + 10 +13943.283883 + 20 +6522.870619 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1884 + 8 +HOLZ + 10 +13941.972231 + 20 +6523.828449 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1885 + 8 +HOLZ + 10 +13940.792846 + 20 +6524.813209 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1886 + 8 +HOLZ + 10 +13939.767773 + 20 +6525.821227 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1887 + 8 +HOLZ + 10 +13938.909054 + 20 +6526.849239 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1888 + 8 +HOLZ + 10 +13938.188727 + 20 +6527.895613 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1889 + 8 +HOLZ + 10 +13937.568825 + 20 +6528.959125 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +188A + 8 +HOLZ + 10 +13937.011382 + 20 +6530.03855 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +188B + 8 +HOLZ + 10 +13936.478433 + 20 +6531.132664 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +188C + 8 +HOLZ + 10 +13935.932013 + 20 +6532.240243 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +188D + 8 +HOLZ + 10 +13935.334156 + 20 +6533.360063 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +188E + 8 +HOLZ + 10 +13934.646897 + 20 +6534.4909 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +188F + 8 +HOLZ + 10 +13933.837984 + 20 +6535.627652 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1890 + 8 +HOLZ + 10 +13932.89803 + 20 +6536.749715 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1891 + 8 +HOLZ + 10 +13931.823358 + 20 +6537.832608 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1892 + 8 +HOLZ + 10 +13930.610296 + 20 +6538.851848 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1893 + 8 +HOLZ + 10 +13929.255168 + 20 +6539.782956 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1894 + 8 +HOLZ + 10 +13927.754301 + 20 +6540.601449 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1895 + 8 +HOLZ + 10 +13926.10402 + 20 +6541.282846 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1896 + 8 +HOLZ + 10 +13924.300651 + 20 +6541.802666 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1897 + 8 +HOLZ + 10 +13922.345418 + 20 +6542.144791 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1898 + 8 +HOLZ + 10 +13920.259142 + 20 +6542.326563 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1899 + 8 +HOLZ + 10 +13918.067541 + 20 +6542.373688 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +189A + 8 +HOLZ + 10 +13915.796334 + 20 +6542.31187 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +189B + 8 +HOLZ + 10 +13913.47124 + 20 +6542.166816 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +189C + 8 +HOLZ + 10 +13911.117978 + 20 +6541.96423 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +189D + 8 +HOLZ + 10 +13908.762266 + 20 +6541.729819 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +189E + 8 +HOLZ + 10 +13906.429824 + 20 +6541.489288 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +189F + 8 +HOLZ + 10 +13904.135246 + 20 +6541.266199 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +18A0 + 8 +HOLZ + 10 +13901.848628 + 20 +6541.075549 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +18A1 + 8 +HOLZ + 10 +13899.528944 + 20 +6540.930189 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +18A2 + 8 +HOLZ + 10 +13897.135165 + 20 +6540.842973 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +18A3 + 8 +HOLZ + 10 +13894.626263 + 20 +6540.826753 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +18A4 + 8 +HOLZ + 10 +13891.961213 + 20 +6540.894382 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +18A5 + 8 +HOLZ + 10 +13889.098985 + 20 +6541.058713 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +18A6 + 8 +HOLZ + 10 +13885.998552 + 20 +6541.332599 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +18A7 + 8 +HOLZ + 10 +13882.646851 + 20 +6541.734603 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +18A8 + 8 +HOLZ + 10 +13879.142675 + 20 +6542.306141 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +18A9 + 8 +HOLZ + 10 +13875.612782 + 20 +6543.094339 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +18AA + 8 +HOLZ + 10 +13872.18393 + 20 +6544.146321 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +18AB + 8 +HOLZ + 10 +13868.982875 + 20 +6545.509214 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +18AC + 8 +HOLZ + 10 +13866.136375 + 20 +6547.230145 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +18AD + 8 +HOLZ + 10 +13863.771188 + 20 +6549.356239 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +18AE + 8 +HOLZ + 10 +13862.014072 + 20 +6551.934622 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +18AF + 8 +HOLZ + 10 +14001.84535 + 20 +6503.677065 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +18B0 + 8 +HOLZ + 10 +13990.558545 + 20 +6507.43738 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +18B1 + 8 +HOLZ + 10 +13977.390502 + 20 +6511.824451 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +18B2 + 8 +HOLZ + 10 +13964.222548 + 20 +6513.704608 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +18B3 + 8 +HOLZ + 10 +13951.054593 + 20 +6518.091679 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +18B4 + 8 +HOLZ + 10 +13937.886639 + 20 +6525.612308 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +18B5 + 8 +HOLZ + 10 +13936.00549 + 20 +6534.386449 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +18B6 + 8 +HOLZ + 10 +13925.972783 + 20 +6543.787291 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +18B7 + 8 +HOLZ + 10 +13905.907283 + 20 +6541.280378 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +18B8 + 8 +HOLZ + 10 +13888.97703 + 20 +6540.026922 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +18B9 + 8 +HOLZ + 10 +13865.776282 + 20 +6544.413992 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +18BA + 8 +HOLZ + 10 +13862.014072 + 20 +6551.934622 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +18BB + 8 +HOLZ + 0 +POLYLINE + 5 +18BC + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +28A7 + 8 +HOLZ + 10 +13830.0 + 20 +6281.0 + 30 +0.0 + 0 +VERTEX + 5 +28A8 + 8 +HOLZ + 10 +14035.0 + 20 +6281.0 + 30 +0.0 + 0 +SEQEND + 5 +28A9 + 8 +HOLZ + 0 +POLYLINE + 5 +18C0 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +28AA + 8 +HOLZ + 10 +14035.0 + 20 +6555.0 + 30 +0.0 + 0 +VERTEX + 5 +28AB + 8 +HOLZ + 10 +13830.0 + 20 +6555.0 + 30 +0.0 + 0 +SEQEND + 5 +28AC + 8 +HOLZ + 0 +TEXT + 5 +18C4 + 8 +LEGENDE-70 + 10 +6615.0 + 20 +13995.0 + 30 +0.0 + 40 +175.0 + 1 +AUSSCHNITT DECKE NG/DG + 0 +TEXT + 5 +18C5 + 8 +LEGENDE-70 + 10 +8490.0 + 20 +13690.0 + 30 +0.0 + 40 +87.5 + 1 +M 1:10 + 0 +POLYLINE + 5 +18C6 + 8 +SCHNITTKANTEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +28AD + 8 +SCHNITTKANTEN + 10 +11555.0 + 20 +13995.0 + 30 +0.0 + 0 +VERTEX + 5 +28AE + 8 +SCHNITTKANTEN + 10 +11555.0 + 20 +12575.0 + 30 +0.0 + 0 +SEQEND + 5 +28AF + 8 +SCHNITTKANTEN + 0 +POLYLINE + 5 +18CA + 8 +SCHNITTKANTEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +28B0 + 8 +SCHNITTKANTEN + 10 +13605.0 + 20 +13995.0 + 30 +0.0 + 0 +VERTEX + 5 +28B1 + 8 +SCHNITTKANTEN + 10 +13605.0 + 20 +12575.0 + 30 +0.0 + 0 +SEQEND + 5 +28B2 + 8 +SCHNITTKANTEN + 0 +LINE + 5 +18CE + 8 +0 + 62 + 0 + 10 +11625.0 + 20 +13477.2413 + 30 +0.0 + 11 +11687.5 + 21 +13477.2413 + 31 +0.0 + 0 +LINE + 5 +18CF + 8 +0 + 62 + 0 + 10 +11812.5 + 20 +13477.2413 + 30 +0.0 + 11 +11875.0 + 21 +13477.2413 + 31 +0.0 + 0 +LINE + 5 +18D0 + 8 +0 + 62 + 0 + 10 +12000.0 + 20 +13477.2413 + 30 +0.0 + 11 +12062.5 + 21 +13477.2413 + 31 +0.0 + 0 +LINE + 5 +18D1 + 8 +0 + 62 + 0 + 10 +12187.5 + 20 +13477.2413 + 30 +0.0 + 11 +12250.0 + 21 +13477.2413 + 31 +0.0 + 0 +LINE + 5 +18D2 + 8 +0 + 62 + 0 + 10 +12375.0 + 20 +13477.2413 + 30 +0.0 + 11 +12437.5 + 21 +13477.2413 + 31 +0.0 + 0 +LINE + 5 +18D3 + 8 +0 + 62 + 0 + 10 +12562.5 + 20 +13477.2413 + 30 +0.0 + 11 +12625.0 + 21 +13477.2413 + 31 +0.0 + 0 +LINE + 5 +18D4 + 8 +0 + 62 + 0 + 10 +12750.0 + 20 +13477.2413 + 30 +0.0 + 11 +12812.5 + 21 +13477.2413 + 31 +0.0 + 0 +LINE + 5 +18D5 + 8 +0 + 62 + 0 + 10 +12937.5 + 20 +13477.2413 + 30 +0.0 + 11 +13000.0 + 21 +13477.2413 + 31 +0.0 + 0 +LINE + 5 +18D6 + 8 +0 + 62 + 0 + 10 +13125.0 + 20 +13477.2413 + 30 +0.0 + 11 +13187.5 + 21 +13477.2413 + 31 +0.0 + 0 +LINE + 5 +18D7 + 8 +0 + 62 + 0 + 10 +13312.5 + 20 +13477.2413 + 30 +0.0 + 11 +13375.0 + 21 +13477.2413 + 31 +0.0 + 0 +LINE + 5 +18D8 + 8 +0 + 62 + 0 + 10 +13500.0 + 20 +13477.2413 + 30 +0.0 + 11 +13562.5 + 21 +13477.2413 + 31 +0.0 + 0 +LINE + 5 +18D9 + 8 +0 + 62 + 0 + 10 +11555.0 + 20 +13531.367888 + 30 +0.0 + 11 +11593.75 + 21 +13531.367888 + 31 +0.0 + 0 +LINE + 5 +18DA + 8 +0 + 62 + 0 + 10 +11718.75 + 20 +13531.367888 + 30 +0.0 + 11 +11781.25 + 21 +13531.367888 + 31 +0.0 + 0 +LINE + 5 +18DB + 8 +0 + 62 + 0 + 10 +11906.25 + 20 +13531.367888 + 30 +0.0 + 11 +11968.75 + 21 +13531.367888 + 31 +0.0 + 0 +LINE + 5 +18DC + 8 +0 + 62 + 0 + 10 +12093.75 + 20 +13531.367888 + 30 +0.0 + 11 +12156.25 + 21 +13531.367888 + 31 +0.0 + 0 +LINE + 5 +18DD + 8 +0 + 62 + 0 + 10 +12281.25 + 20 +13531.367888 + 30 +0.0 + 11 +12343.75 + 21 +13531.367888 + 31 +0.0 + 0 +LINE + 5 +18DE + 8 +0 + 62 + 0 + 10 +12468.75 + 20 +13531.367888 + 30 +0.0 + 11 +12531.25 + 21 +13531.367888 + 31 +0.0 + 0 +LINE + 5 +18DF + 8 +0 + 62 + 0 + 10 +12656.25 + 20 +13531.367888 + 30 +0.0 + 11 +12718.75 + 21 +13531.367888 + 31 +0.0 + 0 +LINE + 5 +18E0 + 8 +0 + 62 + 0 + 10 +12843.75 + 20 +13531.367888 + 30 +0.0 + 11 +12906.25 + 21 +13531.367888 + 31 +0.0 + 0 +LINE + 5 +18E1 + 8 +0 + 62 + 0 + 10 +13031.25 + 20 +13531.367888 + 30 +0.0 + 11 +13093.75 + 21 +13531.367888 + 31 +0.0 + 0 +LINE + 5 +18E2 + 8 +0 + 62 + 0 + 10 +13218.75 + 20 +13531.367888 + 30 +0.0 + 11 +13281.25 + 21 +13531.367888 + 31 +0.0 + 0 +LINE + 5 +18E3 + 8 +0 + 62 + 0 + 10 +13406.25 + 20 +13531.367888 + 30 +0.0 + 11 +13468.75 + 21 +13531.367888 + 31 +0.0 + 0 +LINE + 5 +18E4 + 8 +0 + 62 + 0 + 10 +13593.75 + 20 +13531.367888 + 30 +0.0 + 11 +13605.0 + 21 +13531.367888 + 31 +0.0 + 0 +LINE + 5 +18E5 + 8 +0 + 62 + 0 + 10 +11625.0 + 20 +13585.494475 + 30 +0.0 + 11 +11687.5 + 21 +13585.494475 + 31 +0.0 + 0 +LINE + 5 +18E6 + 8 +0 + 62 + 0 + 10 +11812.5 + 20 +13585.494475 + 30 +0.0 + 11 +11875.0 + 21 +13585.494475 + 31 +0.0 + 0 +LINE + 5 +18E7 + 8 +0 + 62 + 0 + 10 +12000.0 + 20 +13585.494475 + 30 +0.0 + 11 +12062.5 + 21 +13585.494475 + 31 +0.0 + 0 +LINE + 5 +18E8 + 8 +0 + 62 + 0 + 10 +12187.5 + 20 +13585.494475 + 30 +0.0 + 11 +12250.0 + 21 +13585.494475 + 31 +0.0 + 0 +LINE + 5 +18E9 + 8 +0 + 62 + 0 + 10 +12375.0 + 20 +13585.494475 + 30 +0.0 + 11 +12437.5 + 21 +13585.494475 + 31 +0.0 + 0 +LINE + 5 +18EA + 8 +0 + 62 + 0 + 10 +12562.5 + 20 +13585.494475 + 30 +0.0 + 11 +12625.0 + 21 +13585.494475 + 31 +0.0 + 0 +LINE + 5 +18EB + 8 +0 + 62 + 0 + 10 +12750.0 + 20 +13585.494475 + 30 +0.0 + 11 +12812.5 + 21 +13585.494475 + 31 +0.0 + 0 +LINE + 5 +18EC + 8 +0 + 62 + 0 + 10 +12937.5 + 20 +13585.494475 + 30 +0.0 + 11 +13000.0 + 21 +13585.494475 + 31 +0.0 + 0 +LINE + 5 +18ED + 8 +0 + 62 + 0 + 10 +13125.0 + 20 +13585.494475 + 30 +0.0 + 11 +13187.5 + 21 +13585.494475 + 31 +0.0 + 0 +LINE + 5 +18EE + 8 +0 + 62 + 0 + 10 +13312.5 + 20 +13585.494475 + 30 +0.0 + 11 +13375.0 + 21 +13585.494475 + 31 +0.0 + 0 +LINE + 5 +18EF + 8 +0 + 62 + 0 + 10 +13500.0 + 20 +13585.494475 + 30 +0.0 + 11 +13562.5 + 21 +13585.494475 + 31 +0.0 + 0 +LINE + 5 +18F0 + 8 +0 + 62 + 0 + 10 +11555.0 + 20 +13639.621063 + 30 +0.0 + 11 +11593.75 + 21 +13639.621063 + 31 +0.0 + 0 +LINE + 5 +18F1 + 8 +0 + 62 + 0 + 10 +11718.75 + 20 +13639.621063 + 30 +0.0 + 11 +11781.25 + 21 +13639.621063 + 31 +0.0 + 0 +LINE + 5 +18F2 + 8 +0 + 62 + 0 + 10 +11906.25 + 20 +13639.621063 + 30 +0.0 + 11 +11968.75 + 21 +13639.621063 + 31 +0.0 + 0 +LINE + 5 +18F3 + 8 +0 + 62 + 0 + 10 +12093.75 + 20 +13639.621063 + 30 +0.0 + 11 +12156.25 + 21 +13639.621063 + 31 +0.0 + 0 +LINE + 5 +18F4 + 8 +0 + 62 + 0 + 10 +12281.25 + 20 +13639.621063 + 30 +0.0 + 11 +12343.75 + 21 +13639.621063 + 31 +0.0 + 0 +LINE + 5 +18F5 + 8 +0 + 62 + 0 + 10 +12468.75 + 20 +13639.621063 + 30 +0.0 + 11 +12531.25 + 21 +13639.621063 + 31 +0.0 + 0 +LINE + 5 +18F6 + 8 +0 + 62 + 0 + 10 +12656.25 + 20 +13639.621063 + 30 +0.0 + 11 +12718.75 + 21 +13639.621063 + 31 +0.0 + 0 +LINE + 5 +18F7 + 8 +0 + 62 + 0 + 10 +12843.75 + 20 +13639.621063 + 30 +0.0 + 11 +12906.25 + 21 +13639.621063 + 31 +0.0 + 0 +LINE + 5 +18F8 + 8 +0 + 62 + 0 + 10 +13031.25 + 20 +13639.621063 + 30 +0.0 + 11 +13093.75 + 21 +13639.621063 + 31 +0.0 + 0 +LINE + 5 +18F9 + 8 +0 + 62 + 0 + 10 +13218.75 + 20 +13639.621063 + 30 +0.0 + 11 +13281.25 + 21 +13639.621063 + 31 +0.0 + 0 +LINE + 5 +18FA + 8 +0 + 62 + 0 + 10 +13406.25 + 20 +13639.621063 + 30 +0.0 + 11 +13468.75 + 21 +13639.621063 + 31 +0.0 + 0 +LINE + 5 +18FB + 8 +0 + 62 + 0 + 10 +11625.0 + 20 +13693.74765 + 30 +0.0 + 11 +11687.5 + 21 +13693.74765 + 31 +0.0 + 0 +LINE + 5 +18FC + 8 +0 + 62 + 0 + 10 +11812.5 + 20 +13693.74765 + 30 +0.0 + 11 +11875.0 + 21 +13693.74765 + 31 +0.0 + 0 +LINE + 5 +18FD + 8 +0 + 62 + 0 + 10 +12000.0 + 20 +13693.74765 + 30 +0.0 + 11 +12062.5 + 21 +13693.74765 + 31 +0.0 + 0 +LINE + 5 +18FE + 8 +0 + 62 + 0 + 10 +12187.5 + 20 +13693.74765 + 30 +0.0 + 11 +12250.0 + 21 +13693.74765 + 31 +0.0 + 0 +LINE + 5 +18FF + 8 +0 + 62 + 0 + 10 +12375.0 + 20 +13693.74765 + 30 +0.0 + 11 +12437.5 + 21 +13693.74765 + 31 +0.0 + 0 +LINE + 5 +1900 + 8 +0 + 62 + 0 + 10 +12562.5 + 20 +13693.74765 + 30 +0.0 + 11 +12625.0 + 21 +13693.74765 + 31 +0.0 + 0 +LINE + 5 +1901 + 8 +0 + 62 + 0 + 10 +12750.0 + 20 +13693.74765 + 30 +0.0 + 11 +12812.5 + 21 +13693.74765 + 31 +0.0 + 0 +LINE + 5 +1902 + 8 +0 + 62 + 0 + 10 +12937.5 + 20 +13693.74765 + 30 +0.0 + 11 +13000.0 + 21 +13693.74765 + 31 +0.0 + 0 +LINE + 5 +1903 + 8 +0 + 62 + 0 + 10 +13125.0 + 20 +13693.74765 + 30 +0.0 + 11 +13187.5 + 21 +13693.74765 + 31 +0.0 + 0 +LINE + 5 +1904 + 8 +0 + 62 + 0 + 10 +13312.5 + 20 +13693.74765 + 30 +0.0 + 11 +13375.0 + 21 +13693.74765 + 31 +0.0 + 0 +LINE + 5 +1905 + 8 +0 + 62 + 0 + 10 +13500.0 + 20 +13693.74765 + 30 +0.0 + 11 +13562.5 + 21 +13693.74765 + 31 +0.0 + 0 +LINE + 5 +1906 + 8 +0 + 62 + 0 + 10 +11555.0 + 20 +13423.114713 + 30 +0.0 + 11 +11593.75 + 21 +13423.114713 + 31 +0.0 + 0 +LINE + 5 +1907 + 8 +0 + 62 + 0 + 10 +11718.75 + 20 +13423.114713 + 30 +0.0 + 11 +11781.25 + 21 +13423.114713 + 31 +0.0 + 0 +LINE + 5 +1908 + 8 +0 + 62 + 0 + 10 +11906.25 + 20 +13423.114713 + 30 +0.0 + 11 +11968.75 + 21 +13423.114713 + 31 +0.0 + 0 +LINE + 5 +1909 + 8 +0 + 62 + 0 + 10 +12093.75 + 20 +13423.114713 + 30 +0.0 + 11 +12156.25 + 21 +13423.114713 + 31 +0.0 + 0 +LINE + 5 +190A + 8 +0 + 62 + 0 + 10 +12281.25 + 20 +13423.114713 + 30 +0.0 + 11 +12343.75 + 21 +13423.114713 + 31 +0.0 + 0 +LINE + 5 +190B + 8 +0 + 62 + 0 + 10 +12468.75 + 20 +13423.114713 + 30 +0.0 + 11 +12531.25 + 21 +13423.114713 + 31 +0.0 + 0 +LINE + 5 +190C + 8 +0 + 62 + 0 + 10 +12656.25 + 20 +13423.114713 + 30 +0.0 + 11 +12718.75 + 21 +13423.114713 + 31 +0.0 + 0 +LINE + 5 +190D + 8 +0 + 62 + 0 + 10 +12843.75 + 20 +13423.114713 + 30 +0.0 + 11 +12906.25 + 21 +13423.114713 + 31 +0.0 + 0 +LINE + 5 +190E + 8 +0 + 62 + 0 + 10 +13031.25 + 20 +13423.114713 + 30 +0.0 + 11 +13093.75 + 21 +13423.114713 + 31 +0.0 + 0 +LINE + 5 +190F + 8 +0 + 62 + 0 + 10 +13218.75 + 20 +13423.114713 + 30 +0.0 + 11 +13281.25 + 21 +13423.114713 + 31 +0.0 + 0 +LINE + 5 +1910 + 8 +0 + 62 + 0 + 10 +13406.25 + 20 +13423.114713 + 30 +0.0 + 11 +13468.75 + 21 +13423.114713 + 31 +0.0 + 0 +LINE + 5 +1911 + 8 +0 + 62 + 0 + 10 +13593.75 + 20 +13423.114713 + 30 +0.0 + 11 +13605.0 + 21 +13423.114713 + 31 +0.0 + 0 +LINE + 5 +1912 + 8 +0 + 62 + 0 + 10 +11625.0 + 20 +13368.988125 + 30 +0.0 + 11 +11687.5 + 21 +13368.988125 + 31 +0.0 + 0 +LINE + 5 +1913 + 8 +0 + 62 + 0 + 10 +11812.5 + 20 +13368.988125 + 30 +0.0 + 11 +11875.0 + 21 +13368.988125 + 31 +0.0 + 0 +LINE + 5 +1914 + 8 +0 + 62 + 0 + 10 +12000.0 + 20 +13368.988125 + 30 +0.0 + 11 +12062.5 + 21 +13368.988125 + 31 +0.0 + 0 +LINE + 5 +1915 + 8 +0 + 62 + 0 + 10 +12187.5 + 20 +13368.988125 + 30 +0.0 + 11 +12250.0 + 21 +13368.988125 + 31 +0.0 + 0 +LINE + 5 +1916 + 8 +0 + 62 + 0 + 10 +12375.0 + 20 +13368.988125 + 30 +0.0 + 11 +12437.5 + 21 +13368.988125 + 31 +0.0 + 0 +LINE + 5 +1917 + 8 +0 + 62 + 0 + 10 +12562.5 + 20 +13368.988125 + 30 +0.0 + 11 +12625.0 + 21 +13368.988125 + 31 +0.0 + 0 +LINE + 5 +1918 + 8 +0 + 62 + 0 + 10 +12750.0 + 20 +13368.988125 + 30 +0.0 + 11 +12812.5 + 21 +13368.988125 + 31 +0.0 + 0 +LINE + 5 +1919 + 8 +0 + 62 + 0 + 10 +12937.5 + 20 +13368.988125 + 30 +0.0 + 11 +13000.0 + 21 +13368.988125 + 31 +0.0 + 0 +LINE + 5 +191A + 8 +0 + 62 + 0 + 10 +13125.0 + 20 +13368.988125 + 30 +0.0 + 11 +13187.5 + 21 +13368.988125 + 31 +0.0 + 0 +LINE + 5 +191B + 8 +0 + 62 + 0 + 10 +13312.5 + 20 +13368.988125 + 30 +0.0 + 11 +13375.0 + 21 +13368.988125 + 31 +0.0 + 0 +LINE + 5 +191C + 8 +0 + 62 + 0 + 10 +13500.0 + 20 +13368.988125 + 30 +0.0 + 11 +13562.5 + 21 +13368.988125 + 31 +0.0 + 0 +LINE + 5 +191D + 8 +0 + 62 + 0 + 10 +11555.0 + 20 +13314.861538 + 30 +0.0 + 11 +11593.75 + 21 +13314.861538 + 31 +0.0 + 0 +LINE + 5 +191E + 8 +0 + 62 + 0 + 10 +11718.75 + 20 +13314.861538 + 30 +0.0 + 11 +11781.25 + 21 +13314.861538 + 31 +0.0 + 0 +LINE + 5 +191F + 8 +0 + 62 + 0 + 10 +11906.25 + 20 +13314.861538 + 30 +0.0 + 11 +11968.75 + 21 +13314.861538 + 31 +0.0 + 0 +LINE + 5 +1920 + 8 +0 + 62 + 0 + 10 +12093.75 + 20 +13314.861538 + 30 +0.0 + 11 +12156.25 + 21 +13314.861538 + 31 +0.0 + 0 +LINE + 5 +1921 + 8 +0 + 62 + 0 + 10 +12281.25 + 20 +13314.861538 + 30 +0.0 + 11 +12343.75 + 21 +13314.861538 + 31 +0.0 + 0 +LINE + 5 +1922 + 8 +0 + 62 + 0 + 10 +12468.75 + 20 +13314.861538 + 30 +0.0 + 11 +12531.25 + 21 +13314.861538 + 31 +0.0 + 0 +LINE + 5 +1923 + 8 +0 + 62 + 0 + 10 +12656.25 + 20 +13314.861538 + 30 +0.0 + 11 +12718.75 + 21 +13314.861538 + 31 +0.0 + 0 +LINE + 5 +1924 + 8 +0 + 62 + 0 + 10 +12843.75 + 20 +13314.861538 + 30 +0.0 + 11 +12906.25 + 21 +13314.861538 + 31 +0.0 + 0 +LINE + 5 +1925 + 8 +0 + 62 + 0 + 10 +13031.25 + 20 +13314.861538 + 30 +0.0 + 11 +13093.75 + 21 +13314.861538 + 31 +0.0 + 0 +LINE + 5 +1926 + 8 +0 + 62 + 0 + 10 +13218.75 + 20 +13314.861538 + 30 +0.0 + 11 +13281.25 + 21 +13314.861538 + 31 +0.0 + 0 +LINE + 5 +1927 + 8 +0 + 62 + 0 + 10 +13406.25 + 20 +13314.861538 + 30 +0.0 + 11 +13468.75 + 21 +13314.861538 + 31 +0.0 + 0 +LINE + 5 +1928 + 8 +0 + 62 + 0 + 10 +13593.749953 + 20 +13639.621072 + 30 +0.0 + 11 +13562.499953 + 21 +13693.74766 + 31 +0.0 + 0 +LINE + 5 +1929 + 8 +0 + 62 + 0 + 10 +13593.749953 + 20 +13531.367897 + 30 +0.0 + 11 +13562.499953 + 21 +13585.494484 + 31 +0.0 + 0 +LINE + 5 +192A + 8 +0 + 62 + 0 + 10 +13499.999953 + 20 +13693.74766 + 30 +0.0 + 11 +13496.390163 + 21 +13700.0 + 31 +0.0 + 0 +LINE + 5 +192B + 8 +0 + 62 + 0 + 10 +13593.749954 + 20 +13423.114721 + 30 +0.0 + 11 +13562.499954 + 21 +13477.241309 + 31 +0.0 + 0 +LINE + 5 +192C + 8 +0 + 62 + 0 + 10 +13499.999954 + 20 +13585.494485 + 30 +0.0 + 11 +13468.749954 + 21 +13639.621072 + 31 +0.0 + 0 +LINE + 5 +192D + 8 +0 + 62 + 0 + 10 +13593.749954 + 20 +13314.861546 + 30 +0.0 + 11 +13562.499954 + 21 +13368.988134 + 31 +0.0 + 0 +LINE + 5 +192E + 8 +0 + 62 + 0 + 10 +13499.999954 + 20 +13477.241309 + 30 +0.0 + 11 +13468.749954 + 21 +13531.367897 + 31 +0.0 + 0 +LINE + 5 +192F + 8 +0 + 62 + 0 + 10 +13406.249954 + 20 +13639.621072 + 30 +0.0 + 11 +13374.999954 + 21 +13693.74766 + 31 +0.0 + 0 +LINE + 5 +1930 + 8 +0 + 62 + 0 + 10 +13499.999954 + 20 +13368.988134 + 30 +0.0 + 11 +13468.749954 + 21 +13423.114722 + 31 +0.0 + 0 +LINE + 5 +1931 + 8 +0 + 62 + 0 + 10 +13406.249954 + 20 +13531.367897 + 30 +0.0 + 11 +13374.999954 + 21 +13585.494485 + 31 +0.0 + 0 +LINE + 5 +1932 + 8 +0 + 62 + 0 + 10 +13312.499954 + 20 +13693.74766 + 30 +0.0 + 11 +13308.890164 + 21 +13700.0 + 31 +0.0 + 0 +LINE + 5 +1933 + 8 +0 + 62 + 0 + 10 +13491.467023 + 20 +13275.514429 + 30 +0.0 + 11 +13468.749954 + 21 +13314.861546 + 31 +0.0 + 0 +LINE + 5 +1934 + 8 +0 + 62 + 0 + 10 +13406.249954 + 20 +13423.114722 + 30 +0.0 + 11 +13374.999954 + 21 +13477.241309 + 31 +0.0 + 0 +LINE + 5 +1935 + 8 +0 + 62 + 0 + 10 +13312.499954 + 20 +13585.494485 + 30 +0.0 + 11 +13281.249954 + 21 +13639.621073 + 31 +0.0 + 0 +LINE + 5 +1936 + 8 +0 + 62 + 0 + 10 +13406.249954 + 20 +13314.861546 + 30 +0.0 + 11 +13374.999954 + 21 +13368.988134 + 31 +0.0 + 0 +LINE + 5 +1937 + 8 +0 + 62 + 0 + 10 +13312.499954 + 20 +13477.24131 + 30 +0.0 + 11 +13281.249954 + 21 +13531.367897 + 31 +0.0 + 0 +LINE + 5 +1938 + 8 +0 + 62 + 0 + 10 +13218.749954 + 20 +13639.621073 + 30 +0.0 + 11 +13187.499954 + 21 +13693.747661 + 31 +0.0 + 0 +LINE + 5 +1939 + 8 +0 + 62 + 0 + 10 +13312.499955 + 20 +13368.988134 + 30 +0.0 + 11 +13281.249955 + 21 +13423.114722 + 31 +0.0 + 0 +LINE + 5 +193A + 8 +0 + 62 + 0 + 10 +13218.749955 + 20 +13531.367897 + 30 +0.0 + 11 +13187.499955 + 21 +13585.494485 + 31 +0.0 + 0 +LINE + 5 +193B + 8 +0 + 62 + 0 + 10 +13124.999955 + 20 +13693.747661 + 30 +0.0 + 11 +13121.390165 + 21 +13700.0 + 31 +0.0 + 0 +LINE + 5 +193C + 8 +0 + 62 + 0 + 10 +13303.986181 + 20 +13275.481248 + 30 +0.0 + 11 +13281.249955 + 21 +13314.861547 + 31 +0.0 + 0 +LINE + 5 +193D + 8 +0 + 62 + 0 + 10 +13218.749955 + 20 +13423.114722 + 30 +0.0 + 11 +13187.499955 + 21 +13477.24131 + 31 +0.0 + 0 +LINE + 5 +193E + 8 +0 + 62 + 0 + 10 +13124.999955 + 20 +13585.494485 + 30 +0.0 + 11 +13093.749955 + 21 +13639.621073 + 31 +0.0 + 0 +LINE + 5 +193F + 8 +0 + 62 + 0 + 10 +13218.749955 + 20 +13314.861547 + 30 +0.0 + 11 +13187.499955 + 21 +13368.988134 + 31 +0.0 + 0 +LINE + 5 +1940 + 8 +0 + 62 + 0 + 10 +13124.999955 + 20 +13477.24131 + 30 +0.0 + 11 +13093.749955 + 21 +13531.367898 + 31 +0.0 + 0 +LINE + 5 +1941 + 8 +0 + 62 + 0 + 10 +13031.249955 + 20 +13639.621073 + 30 +0.0 + 11 +12999.999955 + 21 +13693.747661 + 31 +0.0 + 0 +LINE + 5 +1942 + 8 +0 + 62 + 0 + 10 +13124.999955 + 20 +13368.988135 + 30 +0.0 + 11 +13093.749955 + 21 +13423.114722 + 31 +0.0 + 0 +LINE + 5 +1943 + 8 +0 + 62 + 0 + 10 +13031.249955 + 20 +13531.367898 + 30 +0.0 + 11 +12999.999955 + 21 +13585.494486 + 31 +0.0 + 0 +LINE + 5 +1944 + 8 +0 + 62 + 0 + 10 +12937.499955 + 20 +13693.747661 + 30 +0.0 + 11 +12933.890166 + 21 +13700.0 + 31 +0.0 + 0 +LINE + 5 +1945 + 8 +0 + 62 + 0 + 10 +13116.505339 + 20 +13275.448066 + 30 +0.0 + 11 +13093.749955 + 21 +13314.861547 + 31 +0.0 + 0 +LINE + 5 +1946 + 8 +0 + 62 + 0 + 10 +13031.249955 + 20 +13423.114722 + 30 +0.0 + 11 +12999.999955 + 21 +13477.24131 + 31 +0.0 + 0 +LINE + 5 +1947 + 8 +0 + 62 + 0 + 10 +12937.499955 + 20 +13585.494486 + 30 +0.0 + 11 +12906.249955 + 21 +13639.621073 + 31 +0.0 + 0 +LINE + 5 +1948 + 8 +0 + 62 + 0 + 10 +13031.249956 + 20 +13314.861547 + 30 +0.0 + 11 +12999.999956 + 21 +13368.988135 + 31 +0.0 + 0 +LINE + 5 +1949 + 8 +0 + 62 + 0 + 10 +12937.499956 + 20 +13477.24131 + 30 +0.0 + 11 +12906.249956 + 21 +13531.367898 + 31 +0.0 + 0 +LINE + 5 +194A + 8 +0 + 62 + 0 + 10 +12843.749956 + 20 +13639.621073 + 30 +0.0 + 11 +12812.499956 + 21 +13693.747661 + 31 +0.0 + 0 +LINE + 5 +194B + 8 +0 + 62 + 0 + 10 +12937.499956 + 20 +13368.988135 + 30 +0.0 + 11 +12906.249956 + 21 +13423.114723 + 31 +0.0 + 0 +LINE + 5 +194C + 8 +0 + 62 + 0 + 10 +12843.749956 + 20 +13531.367898 + 30 +0.0 + 11 +12812.499956 + 21 +13585.494486 + 31 +0.0 + 0 +LINE + 5 +194D + 8 +0 + 62 + 0 + 10 +12749.999956 + 20 +13693.747661 + 30 +0.0 + 11 +12746.390166 + 21 +13700.0 + 31 +0.0 + 0 +LINE + 5 +194E + 8 +0 + 62 + 0 + 10 +12929.024498 + 20 +13275.414884 + 30 +0.0 + 11 +12906.249956 + 21 +13314.861547 + 31 +0.0 + 0 +LINE + 5 +194F + 8 +0 + 62 + 0 + 10 +12843.749956 + 20 +13423.114723 + 30 +0.0 + 11 +12812.499956 + 21 +13477.241311 + 31 +0.0 + 0 +LINE + 5 +1950 + 8 +0 + 62 + 0 + 10 +12749.999956 + 20 +13585.494486 + 30 +0.0 + 11 +12718.749956 + 21 +13639.621074 + 31 +0.0 + 0 +LINE + 5 +1951 + 8 +0 + 62 + 0 + 10 +12843.749956 + 20 +13314.861547 + 30 +0.0 + 11 +12812.499956 + 21 +13368.988135 + 31 +0.0 + 0 +LINE + 5 +1952 + 8 +0 + 62 + 0 + 10 +12749.999956 + 20 +13477.241311 + 30 +0.0 + 11 +12718.749956 + 21 +13531.367898 + 31 +0.0 + 0 +LINE + 5 +1953 + 8 +0 + 62 + 0 + 10 +12656.249956 + 20 +13639.621074 + 30 +0.0 + 11 +12624.999956 + 21 +13693.747662 + 31 +0.0 + 0 +LINE + 5 +1954 + 8 +0 + 62 + 0 + 10 +12749.999956 + 20 +13368.988135 + 30 +0.0 + 11 +12718.749956 + 21 +13423.114723 + 31 +0.0 + 0 +LINE + 5 +1955 + 8 +0 + 62 + 0 + 10 +12656.249956 + 20 +13531.367898 + 30 +0.0 + 11 +12624.999956 + 21 +13585.494486 + 31 +0.0 + 0 +LINE + 5 +1956 + 8 +0 + 62 + 0 + 10 +12562.499956 + 20 +13693.747662 + 30 +0.0 + 11 +12558.890167 + 21 +13700.0 + 31 +0.0 + 0 +LINE + 5 +1957 + 8 +0 + 62 + 0 + 10 +12741.543656 + 20 +13275.381702 + 30 +0.0 + 11 +12718.749957 + 21 +13314.861548 + 31 +0.0 + 0 +LINE + 5 +1958 + 8 +0 + 62 + 0 + 10 +12656.249957 + 20 +13423.114723 + 30 +0.0 + 11 +12624.999957 + 21 +13477.241311 + 31 +0.0 + 0 +LINE + 5 +1959 + 8 +0 + 62 + 0 + 10 +12562.499957 + 20 +13585.494486 + 30 +0.0 + 11 +12531.249957 + 21 +13639.621074 + 31 +0.0 + 0 +LINE + 5 +195A + 8 +0 + 62 + 0 + 10 +12656.249957 + 20 +13314.861548 + 30 +0.0 + 11 +12624.999957 + 21 +13368.988136 + 31 +0.0 + 0 +LINE + 5 +195B + 8 +0 + 62 + 0 + 10 +12562.499957 + 20 +13477.241311 + 30 +0.0 + 11 +12531.249957 + 21 +13531.367899 + 31 +0.0 + 0 +LINE + 5 +195C + 8 +0 + 62 + 0 + 10 +12468.749957 + 20 +13639.621074 + 30 +0.0 + 11 +12437.499957 + 21 +13693.747662 + 31 +0.0 + 0 +LINE + 5 +195D + 8 +0 + 62 + 0 + 10 +12562.499957 + 20 +13368.988136 + 30 +0.0 + 11 +12531.249957 + 21 +13423.114723 + 31 +0.0 + 0 +LINE + 5 +195E + 8 +0 + 62 + 0 + 10 +12468.749957 + 20 +13531.367899 + 30 +0.0 + 11 +12437.499957 + 21 +13585.494487 + 31 +0.0 + 0 +LINE + 5 +195F + 8 +0 + 62 + 0 + 10 +12374.999957 + 20 +13693.747662 + 30 +0.0 + 11 +12371.390168 + 21 +13700.0 + 31 +0.0 + 0 +LINE + 5 +1960 + 8 +0 + 62 + 0 + 10 +12554.062814 + 20 +13275.34852 + 30 +0.0 + 11 +12531.249957 + 21 +13314.861548 + 31 +0.0 + 0 +LINE + 5 +1961 + 8 +0 + 62 + 0 + 10 +12468.749957 + 20 +13423.114723 + 30 +0.0 + 11 +12437.499957 + 21 +13477.241311 + 31 +0.0 + 0 +LINE + 5 +1962 + 8 +0 + 62 + 0 + 10 +12374.999957 + 20 +13585.494487 + 30 +0.0 + 11 +12343.749957 + 21 +13639.621074 + 31 +0.0 + 0 +LINE + 5 +1963 + 8 +0 + 62 + 0 + 10 +12468.749957 + 20 +13314.861548 + 30 +0.0 + 11 +12437.499957 + 21 +13368.988136 + 31 +0.0 + 0 +LINE + 5 +1964 + 8 +0 + 62 + 0 + 10 +12374.999957 + 20 +13477.241311 + 30 +0.0 + 11 +12343.749957 + 21 +13531.367899 + 31 +0.0 + 0 +LINE + 5 +1965 + 8 +0 + 62 + 0 + 10 +12281.249957 + 20 +13639.621075 + 30 +0.0 + 11 +12249.999957 + 21 +13693.747662 + 31 +0.0 + 0 +LINE + 5 +1966 + 8 +0 + 62 + 0 + 10 +12374.999958 + 20 +13368.988136 + 30 +0.0 + 11 +12343.749958 + 21 +13423.114724 + 31 +0.0 + 0 +LINE + 5 +1967 + 8 +0 + 62 + 0 + 10 +12281.249958 + 20 +13531.367899 + 30 +0.0 + 11 +12249.999958 + 21 +13585.494487 + 31 +0.0 + 0 +LINE + 5 +1968 + 8 +0 + 62 + 0 + 10 +12187.499958 + 20 +13693.747662 + 30 +0.0 + 11 +12183.890169 + 21 +13700.0 + 31 +0.0 + 0 +LINE + 5 +1969 + 8 +0 + 62 + 0 + 10 +12366.581973 + 20 +13275.315338 + 30 +0.0 + 11 +12343.749958 + 21 +13314.861548 + 31 +0.0 + 0 +LINE + 5 +196A + 8 +0 + 62 + 0 + 10 +12281.249958 + 20 +13423.114724 + 30 +0.0 + 11 +12249.999958 + 21 +13477.241312 + 31 +0.0 + 0 +LINE + 5 +196B + 8 +0 + 62 + 0 + 10 +12187.499958 + 20 +13585.494487 + 30 +0.0 + 11 +12156.249958 + 21 +13639.621075 + 31 +0.0 + 0 +LINE + 5 +196C + 8 +0 + 62 + 0 + 10 +12281.249958 + 20 +13314.861548 + 30 +0.0 + 11 +12249.999958 + 21 +13368.988136 + 31 +0.0 + 0 +LINE + 5 +196D + 8 +0 + 62 + 0 + 10 +12187.499958 + 20 +13477.241312 + 30 +0.0 + 11 +12156.249958 + 21 +13531.367899 + 31 +0.0 + 0 +LINE + 5 +196E + 8 +0 + 62 + 0 + 10 +12093.749958 + 20 +13639.621075 + 30 +0.0 + 11 +12062.499958 + 21 +13693.747663 + 31 +0.0 + 0 +LINE + 5 +196F + 8 +0 + 62 + 0 + 10 +12187.499958 + 20 +13368.988136 + 30 +0.0 + 11 +12156.249958 + 21 +13423.114724 + 31 +0.0 + 0 +LINE + 5 +1970 + 8 +0 + 62 + 0 + 10 +12093.749958 + 20 +13531.3679 + 30 +0.0 + 11 +12062.499958 + 21 +13585.494487 + 31 +0.0 + 0 +LINE + 5 +1971 + 8 +0 + 62 + 0 + 10 +11999.999958 + 20 +13693.747663 + 30 +0.0 + 11 +11996.39017 + 21 +13700.0 + 31 +0.0 + 0 +LINE + 5 +1972 + 8 +0 + 62 + 0 + 10 +12179.101131 + 20 +13275.282157 + 30 +0.0 + 11 +12156.249958 + 21 +13314.861549 + 31 +0.0 + 0 +LINE + 5 +1973 + 8 +0 + 62 + 0 + 10 +12093.749958 + 20 +13423.114724 + 30 +0.0 + 11 +12062.499958 + 21 +13477.241312 + 31 +0.0 + 0 +LINE + 5 +1974 + 8 +0 + 62 + 0 + 10 +11999.999958 + 20 +13585.494487 + 30 +0.0 + 11 +11968.749958 + 21 +13639.621075 + 31 +0.0 + 0 +LINE + 5 +1975 + 8 +0 + 62 + 0 + 10 +12093.749959 + 20 +13314.861549 + 30 +0.0 + 11 +12062.499959 + 21 +13368.988137 + 31 +0.0 + 0 +LINE + 5 +1976 + 8 +0 + 62 + 0 + 10 +11999.999959 + 20 +13477.241312 + 30 +0.0 + 11 +11968.749959 + 21 +13531.3679 + 31 +0.0 + 0 +LINE + 5 +1977 + 8 +0 + 62 + 0 + 10 +11906.249959 + 20 +13639.621075 + 30 +0.0 + 11 +11874.999959 + 21 +13693.747663 + 31 +0.0 + 0 +LINE + 5 +1978 + 8 +0 + 62 + 0 + 10 +11999.999959 + 20 +13368.988137 + 30 +0.0 + 11 +11968.749959 + 21 +13423.114724 + 31 +0.0 + 0 +LINE + 5 +1979 + 8 +0 + 62 + 0 + 10 +11906.249959 + 20 +13531.3679 + 30 +0.0 + 11 +11874.999959 + 21 +13585.494488 + 31 +0.0 + 0 +LINE + 5 +197A + 8 +0 + 62 + 0 + 10 +11812.499959 + 20 +13693.747663 + 30 +0.0 + 11 +11808.89017 + 21 +13700.0 + 31 +0.0 + 0 +LINE + 5 +197B + 8 +0 + 62 + 0 + 10 +11991.620289 + 20 +13275.248975 + 30 +0.0 + 11 +11968.749959 + 21 +13314.861549 + 31 +0.0 + 0 +LINE + 5 +197C + 8 +0 + 62 + 0 + 10 +11906.249959 + 20 +13423.114725 + 30 +0.0 + 11 +11874.999959 + 21 +13477.241312 + 31 +0.0 + 0 +LINE + 5 +197D + 8 +0 + 62 + 0 + 10 +11812.499959 + 20 +13585.494488 + 30 +0.0 + 11 +11781.249959 + 21 +13639.621076 + 31 +0.0 + 0 +LINE + 5 +197E + 8 +0 + 62 + 0 + 10 +11906.249959 + 20 +13314.861549 + 30 +0.0 + 11 +11874.999959 + 21 +13368.988137 + 31 +0.0 + 0 +LINE + 5 +197F + 8 +0 + 62 + 0 + 10 +11812.499959 + 20 +13477.241312 + 30 +0.0 + 11 +11781.249959 + 21 +13531.3679 + 31 +0.0 + 0 +LINE + 5 +1980 + 8 +0 + 62 + 0 + 10 +11718.749959 + 20 +13639.621076 + 30 +0.0 + 11 +11687.499959 + 21 +13693.747663 + 31 +0.0 + 0 +LINE + 5 +1981 + 8 +0 + 62 + 0 + 10 +11812.499959 + 20 +13368.988137 + 30 +0.0 + 11 +11781.249959 + 21 +13423.114725 + 31 +0.0 + 0 +LINE + 5 +1982 + 8 +0 + 62 + 0 + 10 +11718.749959 + 20 +13531.3679 + 30 +0.0 + 11 +11687.499959 + 21 +13585.494488 + 31 +0.0 + 0 +LINE + 5 +1983 + 8 +0 + 62 + 0 + 10 +11624.999959 + 20 +13693.747663 + 30 +0.0 + 11 +11621.390171 + 21 +13700.0 + 31 +0.0 + 0 +LINE + 5 +1984 + 8 +0 + 62 + 0 + 10 +11804.139448 + 20 +13275.215793 + 30 +0.0 + 11 +11781.24996 + 21 +13314.861549 + 31 +0.0 + 0 +LINE + 5 +1985 + 8 +0 + 62 + 0 + 10 +11718.74996 + 20 +13423.114725 + 30 +0.0 + 11 +11687.49996 + 21 +13477.241313 + 31 +0.0 + 0 +LINE + 5 +1986 + 8 +0 + 62 + 0 + 10 +11624.99996 + 20 +13585.494488 + 30 +0.0 + 11 +11593.74996 + 21 +13639.621076 + 31 +0.0 + 0 +LINE + 5 +1987 + 8 +0 + 62 + 0 + 10 +11718.74996 + 20 +13314.86155 + 30 +0.0 + 11 +11687.49996 + 21 +13368.988137 + 31 +0.0 + 0 +LINE + 5 +1988 + 8 +0 + 62 + 0 + 10 +11624.99996 + 20 +13477.241313 + 30 +0.0 + 11 +11593.74996 + 21 +13531.367901 + 31 +0.0 + 0 +LINE + 5 +1989 + 8 +0 + 62 + 0 + 10 +11624.99996 + 20 +13368.988137 + 30 +0.0 + 11 +11593.74996 + 21 +13423.114725 + 31 +0.0 + 0 +LINE + 5 +198A + 8 +0 + 62 + 0 + 10 +11616.658606 + 20 +13275.182611 + 30 +0.0 + 11 +11593.74996 + 21 +13314.86155 + 31 +0.0 + 0 +LINE + 5 +198B + 8 +0 + 62 + 0 + 10 +13571.041026 + 20 +13275.528513 + 30 +0.0 + 11 +13593.749984 + 21 +13314.861582 + 31 +0.0 + 0 +LINE + 5 +198C + 8 +0 + 62 + 0 + 10 +13562.499984 + 20 +13368.988169 + 30 +0.0 + 11 +13593.749984 + 21 +13423.114757 + 31 +0.0 + 0 +LINE + 5 +198D + 8 +0 + 62 + 0 + 10 +13468.749985 + 20 +13314.861582 + 30 +0.0 + 11 +13499.999985 + 21 +13368.988169 + 31 +0.0 + 0 +LINE + 5 +198E + 8 +0 + 62 + 0 + 10 +13562.499985 + 20 +13477.241345 + 30 +0.0 + 11 +13593.749985 + 21 +13531.367933 + 31 +0.0 + 0 +LINE + 5 +198F + 8 +0 + 62 + 0 + 10 +13383.521866 + 20 +13275.495324 + 30 +0.0 + 11 +13406.249985 + 21 +13314.861581 + 31 +0.0 + 0 +LINE + 5 +1990 + 8 +0 + 62 + 0 + 10 +13468.749985 + 20 +13423.114757 + 30 +0.0 + 11 +13499.999985 + 21 +13477.241345 + 31 +0.0 + 0 +LINE + 5 +1991 + 8 +0 + 62 + 0 + 10 +13562.499985 + 20 +13585.49452 + 30 +0.0 + 11 +13593.749985 + 21 +13639.621108 + 31 +0.0 + 0 +LINE + 5 +1992 + 8 +0 + 62 + 0 + 10 +13374.999985 + 20 +13368.988169 + 30 +0.0 + 11 +13406.249985 + 21 +13423.114757 + 31 +0.0 + 0 +LINE + 5 +1993 + 8 +0 + 62 + 0 + 10 +13468.749985 + 20 +13531.367932 + 30 +0.0 + 11 +13499.999985 + 21 +13585.49452 + 31 +0.0 + 0 +LINE + 5 +1994 + 8 +0 + 62 + 0 + 10 +13562.499985 + 20 +13693.747696 + 30 +0.0 + 11 +13566.109755 + 21 +13700.0 + 31 +0.0 + 0 +LINE + 5 +1995 + 8 +0 + 62 + 0 + 10 +13281.249985 + 20 +13314.861581 + 30 +0.0 + 11 +13312.499985 + 21 +13368.988169 + 31 +0.0 + 0 +LINE + 5 +1996 + 8 +0 + 62 + 0 + 10 +13374.999985 + 20 +13477.241344 + 30 +0.0 + 11 +13406.249985 + 21 +13531.367932 + 31 +0.0 + 0 +LINE + 5 +1997 + 8 +0 + 62 + 0 + 10 +13468.749985 + 20 +13639.621108 + 30 +0.0 + 11 +13499.999985 + 21 +13693.747695 + 31 +0.0 + 0 +LINE + 5 +1998 + 8 +0 + 62 + 0 + 10 +13196.002705 + 20 +13275.462136 + 30 +0.0 + 11 +13218.749985 + 21 +13314.861581 + 31 +0.0 + 0 +LINE + 5 +1999 + 8 +0 + 62 + 0 + 10 +13281.249985 + 20 +13423.114757 + 30 +0.0 + 11 +13312.499985 + 21 +13477.241344 + 31 +0.0 + 0 +LINE + 5 +199A + 8 +0 + 62 + 0 + 10 +13374.999985 + 20 +13585.49452 + 30 +0.0 + 11 +13406.249985 + 21 +13639.621108 + 31 +0.0 + 0 +LINE + 5 +199B + 8 +0 + 62 + 0 + 10 +13187.499986 + 20 +13368.988169 + 30 +0.0 + 11 +13218.749986 + 21 +13423.114756 + 31 +0.0 + 0 +LINE + 5 +199C + 8 +0 + 62 + 0 + 10 +13281.249986 + 20 +13531.367932 + 30 +0.0 + 11 +13312.499986 + 21 +13585.49452 + 31 +0.0 + 0 +LINE + 5 +199D + 8 +0 + 62 + 0 + 10 +13374.999986 + 20 +13693.747695 + 30 +0.0 + 11 +13378.609756 + 21 +13700.0 + 31 +0.0 + 0 +LINE + 5 +199E + 8 +0 + 62 + 0 + 10 +13093.749986 + 20 +13314.861581 + 30 +0.0 + 11 +13124.999986 + 21 +13368.988169 + 31 +0.0 + 0 +LINE + 5 +199F + 8 +0 + 62 + 0 + 10 +13187.499986 + 20 +13477.241344 + 30 +0.0 + 11 +13218.749986 + 21 +13531.367932 + 31 +0.0 + 0 +LINE + 5 +19A0 + 8 +0 + 62 + 0 + 10 +13281.249986 + 20 +13639.621107 + 30 +0.0 + 11 +13312.499986 + 21 +13693.747695 + 31 +0.0 + 0 +LINE + 5 +19A1 + 8 +0 + 62 + 0 + 10 +13008.483544 + 20 +13275.428947 + 30 +0.0 + 11 +13031.249986 + 21 +13314.861581 + 31 +0.0 + 0 +LINE + 5 +19A2 + 8 +0 + 62 + 0 + 10 +13093.749986 + 20 +13423.114756 + 30 +0.0 + 11 +13124.999986 + 21 +13477.241344 + 31 +0.0 + 0 +LINE + 5 +19A3 + 8 +0 + 62 + 0 + 10 +13187.499986 + 20 +13585.494519 + 30 +0.0 + 11 +13218.749986 + 21 +13639.621107 + 31 +0.0 + 0 +LINE + 5 +19A4 + 8 +0 + 62 + 0 + 10 +12999.999986 + 20 +13368.988168 + 30 +0.0 + 11 +13031.249986 + 21 +13423.114756 + 31 +0.0 + 0 +LINE + 5 +19A5 + 8 +0 + 62 + 0 + 10 +13093.749986 + 20 +13531.367932 + 30 +0.0 + 11 +13124.999986 + 21 +13585.494519 + 31 +0.0 + 0 +LINE + 5 +19A6 + 8 +0 + 62 + 0 + 10 +13187.499986 + 20 +13693.747695 + 30 +0.0 + 11 +13191.109756 + 21 +13700.0 + 31 +0.0 + 0 +LINE + 5 +19A7 + 8 +0 + 62 + 0 + 10 +12906.249986 + 20 +13314.861581 + 30 +0.0 + 11 +12937.499986 + 21 +13368.988168 + 31 +0.0 + 0 +LINE + 5 +19A8 + 8 +0 + 62 + 0 + 10 +12999.999986 + 20 +13477.241344 + 30 +0.0 + 11 +13031.249986 + 21 +13531.367931 + 31 +0.0 + 0 +LINE + 5 +19A9 + 8 +0 + 62 + 0 + 10 +13093.749986 + 20 +13639.621107 + 30 +0.0 + 11 +13124.999986 + 21 +13693.747695 + 31 +0.0 + 0 +LINE + 5 +19AA + 8 +0 + 62 + 0 + 10 +12820.964384 + 20 +13275.395759 + 30 +0.0 + 11 +12843.749987 + 21 +13314.86158 + 31 +0.0 + 0 +LINE + 5 +19AB + 8 +0 + 62 + 0 + 10 +12906.249987 + 20 +13423.114756 + 30 +0.0 + 11 +12937.499987 + 21 +13477.241344 + 31 +0.0 + 0 +LINE + 5 +19AC + 8 +0 + 62 + 0 + 10 +12999.999987 + 20 +13585.494519 + 30 +0.0 + 11 +13031.249987 + 21 +13639.621107 + 31 +0.0 + 0 +LINE + 5 +19AD + 8 +0 + 62 + 0 + 10 +12812.499987 + 20 +13368.988168 + 30 +0.0 + 11 +12843.749987 + 21 +13423.114756 + 31 +0.0 + 0 +LINE + 5 +19AE + 8 +0 + 62 + 0 + 10 +12906.249987 + 20 +13531.367931 + 30 +0.0 + 11 +12937.499987 + 21 +13585.494519 + 31 +0.0 + 0 +LINE + 5 +19AF + 8 +0 + 62 + 0 + 10 +12999.999987 + 20 +13693.747694 + 30 +0.0 + 11 +13003.609757 + 21 +13700.0 + 31 +0.0 + 0 +LINE + 5 +19B0 + 8 +0 + 62 + 0 + 10 +12718.749987 + 20 +13314.86158 + 30 +0.0 + 11 +12749.999987 + 21 +13368.988168 + 31 +0.0 + 0 +LINE + 5 +19B1 + 8 +0 + 62 + 0 + 10 +12812.499987 + 20 +13477.241343 + 30 +0.0 + 11 +12843.749987 + 21 +13531.367931 + 31 +0.0 + 0 +LINE + 5 +19B2 + 8 +0 + 62 + 0 + 10 +12906.249987 + 20 +13639.621107 + 30 +0.0 + 11 +12937.499987 + 21 +13693.747694 + 31 +0.0 + 0 +LINE + 5 +19B3 + 8 +0 + 62 + 0 + 10 +12633.445223 + 20 +13275.36257 + 30 +0.0 + 11 +12656.249987 + 21 +13314.86158 + 31 +0.0 + 0 +LINE + 5 +19B4 + 8 +0 + 62 + 0 + 10 +12718.749987 + 20 +13423.114756 + 30 +0.0 + 11 +12749.999987 + 21 +13477.241343 + 31 +0.0 + 0 +LINE + 5 +19B5 + 8 +0 + 62 + 0 + 10 +12812.499987 + 20 +13585.494519 + 30 +0.0 + 11 +12843.749987 + 21 +13639.621106 + 31 +0.0 + 0 +LINE + 5 +19B6 + 8 +0 + 62 + 0 + 10 +12624.999988 + 20 +13368.988168 + 30 +0.0 + 11 +12656.249988 + 21 +13423.114755 + 31 +0.0 + 0 +LINE + 5 +19B7 + 8 +0 + 62 + 0 + 10 +12718.749988 + 20 +13531.367931 + 30 +0.0 + 11 +12749.999988 + 21 +13585.494519 + 31 +0.0 + 0 +LINE + 5 +19B8 + 8 +0 + 62 + 0 + 10 +12812.499988 + 20 +13693.747694 + 30 +0.0 + 11 +12816.109758 + 21 +13700.0 + 31 +0.0 + 0 +LINE + 5 +19B9 + 8 +0 + 62 + 0 + 10 +12531.249988 + 20 +13314.86158 + 30 +0.0 + 11 +12562.499988 + 21 +13368.988168 + 31 +0.0 + 0 +LINE + 5 +19BA + 8 +0 + 62 + 0 + 10 +12624.999988 + 20 +13477.241343 + 30 +0.0 + 11 +12656.249988 + 21 +13531.367931 + 31 +0.0 + 0 +LINE + 5 +19BB + 8 +0 + 62 + 0 + 10 +12718.749988 + 20 +13639.621106 + 30 +0.0 + 11 +12749.999988 + 21 +13693.747694 + 31 +0.0 + 0 +LINE + 5 +19BC + 8 +0 + 62 + 0 + 10 +12445.926063 + 20 +13275.329381 + 30 +0.0 + 11 +12468.749988 + 21 +13314.86158 + 31 +0.0 + 0 +LINE + 5 +19BD + 8 +0 + 62 + 0 + 10 +12531.249988 + 20 +13423.114755 + 30 +0.0 + 11 +12562.499988 + 21 +13477.241343 + 31 +0.0 + 0 +LINE + 5 +19BE + 8 +0 + 62 + 0 + 10 +12624.999988 + 20 +13585.494518 + 30 +0.0 + 11 +12656.249988 + 21 +13639.621106 + 31 +0.0 + 0 +LINE + 5 +19BF + 8 +0 + 62 + 0 + 10 +12437.499988 + 20 +13368.988167 + 30 +0.0 + 11 +12468.749988 + 21 +13423.114755 + 31 +0.0 + 0 +LINE + 5 +19C0 + 8 +0 + 62 + 0 + 10 +12531.249988 + 20 +13531.367931 + 30 +0.0 + 11 +12562.499988 + 21 +13585.494518 + 31 +0.0 + 0 +LINE + 5 +19C1 + 8 +0 + 62 + 0 + 10 +12624.999988 + 20 +13693.747694 + 30 +0.0 + 11 +12628.609759 + 21 +13700.0 + 31 +0.0 + 0 +LINE + 5 +19C2 + 8 +0 + 62 + 0 + 10 +12343.749988 + 20 +13314.861579 + 30 +0.0 + 11 +12374.999988 + 21 +13368.988167 + 31 +0.0 + 0 +LINE + 5 +19C3 + 8 +0 + 62 + 0 + 10 +12437.499988 + 20 +13477.241343 + 30 +0.0 + 11 +12468.749988 + 21 +13531.36793 + 31 +0.0 + 0 +LINE + 5 +19C4 + 8 +0 + 62 + 0 + 10 +12531.249988 + 20 +13639.621106 + 30 +0.0 + 11 +12562.499988 + 21 +13693.747694 + 31 +0.0 + 0 +LINE + 5 +19C5 + 8 +0 + 62 + 0 + 10 +12258.406902 + 20 +13275.296193 + 30 +0.0 + 11 +12281.249989 + 21 +13314.861579 + 31 +0.0 + 0 +LINE + 5 +19C6 + 8 +0 + 62 + 0 + 10 +12343.749989 + 20 +13423.114755 + 30 +0.0 + 11 +12374.999989 + 21 +13477.241343 + 31 +0.0 + 0 +LINE + 5 +19C7 + 8 +0 + 62 + 0 + 10 +12437.499989 + 20 +13585.494518 + 30 +0.0 + 11 +12468.749989 + 21 +13639.621106 + 31 +0.0 + 0 +LINE + 5 +19C8 + 8 +0 + 62 + 0 + 10 +12249.999989 + 20 +13368.988167 + 30 +0.0 + 11 +12281.249989 + 21 +13423.114755 + 31 +0.0 + 0 +LINE + 5 +19C9 + 8 +0 + 62 + 0 + 10 +12343.749989 + 20 +13531.36793 + 30 +0.0 + 11 +12374.999989 + 21 +13585.494518 + 31 +0.0 + 0 +LINE + 5 +19CA + 8 +0 + 62 + 0 + 10 +12437.499989 + 20 +13693.747693 + 30 +0.0 + 11 +12441.10976 + 21 +13700.0 + 31 +0.0 + 0 +LINE + 5 +19CB + 8 +0 + 62 + 0 + 10 +12156.249989 + 20 +13314.861579 + 30 +0.0 + 11 +12187.499989 + 21 +13368.988167 + 31 +0.0 + 0 +LINE + 5 +19CC + 8 +0 + 62 + 0 + 10 +12249.999989 + 20 +13477.241342 + 30 +0.0 + 11 +12281.249989 + 21 +13531.36793 + 31 +0.0 + 0 +LINE + 5 +19CD + 8 +0 + 62 + 0 + 10 +12343.749989 + 20 +13639.621106 + 30 +0.0 + 11 +12374.999989 + 21 +13693.747693 + 31 +0.0 + 0 +LINE + 5 +19CE + 8 +0 + 62 + 0 + 10 +12070.887741 + 20 +13275.263004 + 30 +0.0 + 11 +12093.749989 + 21 +13314.861579 + 31 +0.0 + 0 +LINE + 5 +19CF + 8 +0 + 62 + 0 + 10 +12156.249989 + 20 +13423.114754 + 30 +0.0 + 11 +12187.499989 + 21 +13477.241342 + 31 +0.0 + 0 +LINE + 5 +19D0 + 8 +0 + 62 + 0 + 10 +12249.999989 + 20 +13585.494518 + 30 +0.0 + 11 +12281.249989 + 21 +13639.621105 + 31 +0.0 + 0 +LINE + 5 +19D1 + 8 +0 + 62 + 0 + 10 +12062.499989 + 20 +13368.988167 + 30 +0.0 + 11 +12093.749989 + 21 +13423.114754 + 31 +0.0 + 0 +LINE + 5 +19D2 + 8 +0 + 62 + 0 + 10 +12156.249989 + 20 +13531.36793 + 30 +0.0 + 11 +12187.499989 + 21 +13585.494518 + 31 +0.0 + 0 +LINE + 5 +19D3 + 8 +0 + 62 + 0 + 10 +12249.999989 + 20 +13693.747693 + 30 +0.0 + 11 +12253.60976 + 21 +13700.0 + 31 +0.0 + 0 +LINE + 5 +19D4 + 8 +0 + 62 + 0 + 10 +11968.74999 + 20 +13314.861579 + 30 +0.0 + 11 +11999.99999 + 21 +13368.988167 + 31 +0.0 + 0 +LINE + 5 +19D5 + 8 +0 + 62 + 0 + 10 +12062.49999 + 20 +13477.241342 + 30 +0.0 + 11 +12093.74999 + 21 +13531.36793 + 31 +0.0 + 0 +LINE + 5 +19D6 + 8 +0 + 62 + 0 + 10 +12156.24999 + 20 +13639.621105 + 30 +0.0 + 11 +12187.49999 + 21 +13693.747693 + 31 +0.0 + 0 +LINE + 5 +19D7 + 8 +0 + 62 + 0 + 10 +11883.368581 + 20 +13275.229816 + 30 +0.0 + 11 +11906.24999 + 21 +13314.861579 + 31 +0.0 + 0 +LINE + 5 +19D8 + 8 +0 + 62 + 0 + 10 +11968.74999 + 20 +13423.114754 + 30 +0.0 + 11 +11999.99999 + 21 +13477.241342 + 31 +0.0 + 0 +LINE + 5 +19D9 + 8 +0 + 62 + 0 + 10 +12062.49999 + 20 +13585.494517 + 30 +0.0 + 11 +12093.74999 + 21 +13639.621105 + 31 +0.0 + 0 +LINE + 5 +19DA + 8 +0 + 62 + 0 + 10 +11874.99999 + 20 +13368.988166 + 30 +0.0 + 11 +11906.24999 + 21 +13423.114754 + 31 +0.0 + 0 +LINE + 5 +19DB + 8 +0 + 62 + 0 + 10 +11968.74999 + 20 +13531.367929 + 30 +0.0 + 11 +11999.99999 + 21 +13585.494517 + 31 +0.0 + 0 +LINE + 5 +19DC + 8 +0 + 62 + 0 + 10 +12062.49999 + 20 +13693.747693 + 30 +0.0 + 11 +12066.109761 + 21 +13700.0 + 31 +0.0 + 0 +LINE + 5 +19DD + 8 +0 + 62 + 0 + 10 +11781.24999 + 20 +13314.861578 + 30 +0.0 + 11 +11812.49999 + 21 +13368.988166 + 31 +0.0 + 0 +LINE + 5 +19DE + 8 +0 + 62 + 0 + 10 +11874.99999 + 20 +13477.241342 + 30 +0.0 + 11 +11906.24999 + 21 +13531.367929 + 31 +0.0 + 0 +LINE + 5 +19DF + 8 +0 + 62 + 0 + 10 +11968.74999 + 20 +13639.621105 + 30 +0.0 + 11 +11999.99999 + 21 +13693.747693 + 31 +0.0 + 0 +LINE + 5 +19E0 + 8 +0 + 62 + 0 + 10 +11695.84942 + 20 +13275.196627 + 30 +0.0 + 11 +11718.74999 + 21 +13314.861578 + 31 +0.0 + 0 +LINE + 5 +19E1 + 8 +0 + 62 + 0 + 10 +11781.24999 + 20 +13423.114754 + 30 +0.0 + 11 +11812.49999 + 21 +13477.241342 + 31 +0.0 + 0 +LINE + 5 +19E2 + 8 +0 + 62 + 0 + 10 +11874.99999 + 20 +13585.494517 + 30 +0.0 + 11 +11906.24999 + 21 +13639.621105 + 31 +0.0 + 0 +LINE + 5 +19E3 + 8 +0 + 62 + 0 + 10 +11687.499991 + 20 +13368.988166 + 30 +0.0 + 11 +11718.749991 + 21 +13423.114754 + 31 +0.0 + 0 +LINE + 5 +19E4 + 8 +0 + 62 + 0 + 10 +11781.249991 + 20 +13531.367929 + 30 +0.0 + 11 +11812.499991 + 21 +13585.494517 + 31 +0.0 + 0 +LINE + 5 +19E5 + 8 +0 + 62 + 0 + 10 +11874.999991 + 20 +13693.747692 + 30 +0.0 + 11 +11878.609762 + 21 +13700.0 + 31 +0.0 + 0 +LINE + 5 +19E6 + 8 +0 + 62 + 0 + 10 +11593.749991 + 20 +13314.861578 + 30 +0.0 + 11 +11624.999991 + 21 +13368.988166 + 31 +0.0 + 0 +LINE + 5 +19E7 + 8 +0 + 62 + 0 + 10 +11687.499991 + 20 +13477.241341 + 30 +0.0 + 11 +11718.749991 + 21 +13531.367929 + 31 +0.0 + 0 +LINE + 5 +19E8 + 8 +0 + 62 + 0 + 10 +11781.249991 + 20 +13639.621104 + 30 +0.0 + 11 +11812.499991 + 21 +13693.747692 + 31 +0.0 + 0 +LINE + 5 +19E9 + 8 +0 + 62 + 0 + 10 +11593.749991 + 20 +13423.114753 + 30 +0.0 + 11 +11624.999991 + 21 +13477.241341 + 31 +0.0 + 0 +LINE + 5 +19EA + 8 +0 + 62 + 0 + 10 +11687.499991 + 20 +13585.494517 + 30 +0.0 + 11 +11718.749991 + 21 +13639.621104 + 31 +0.0 + 0 +LINE + 5 +19EB + 8 +0 + 62 + 0 + 10 +11593.749991 + 20 +13531.367929 + 30 +0.0 + 11 +11624.999991 + 21 +13585.494517 + 31 +0.0 + 0 +LINE + 5 +19EC + 8 +0 + 62 + 0 + 10 +11687.499991 + 20 +13693.747692 + 30 +0.0 + 11 +11691.109763 + 21 +13700.0 + 31 +0.0 + 0 +LINE + 5 +19ED + 8 +0 + 62 + 0 + 10 +11593.749991 + 20 +13639.621104 + 30 +0.0 + 11 +11624.999991 + 21 +13693.747692 + 31 +0.0 + 0 +LINE + 5 +19EE + 8 +0 + 62 + 0 + 10 +12785.660172 + 20 +12850.0 + 30 +0.0 + 11 +13185.660172 + 21 +13250.0 + 31 +0.0 + 0 +LINE + 5 +19EF + 8 +0 + 62 + 0 + 10 +11725.0 + 20 +12850.0 + 30 +0.0 + 11 +12125.0 + 21 +13250.0 + 31 +0.0 + 0 +LINE + 5 +19F0 + 8 +0 + 62 + 0 + 10 +13315.990257 + 20 +12850.0 + 30 +0.0 + 11 +13405.776502 + 21 +12939.786245 + 31 +0.0 + 0 +LINE + 5 +19F1 + 8 +0 + 62 + 0 + 10 +13538.359024 + 20 +13072.368767 + 30 +0.0 + 11 +13605.0 + 21 +13139.009743 + 31 +0.0 + 0 +LINE + 5 +19F2 + 8 +0 + 62 + 0 + 10 +12255.330085 + 20 +12850.0 + 30 +0.0 + 11 +12477.698852 + 21 +13072.368767 + 31 +0.0 + 0 +LINE + 5 +19F3 + 8 +0 + 62 + 0 + 10 +12610.281373 + 20 +13204.951288 + 30 +0.0 + 11 +12655.330085 + 21 +13250.0 + 31 +0.0 + 0 +POLYLINE + 5 +19F4 + 8 +DECKEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +28B3 + 8 +DECKEN + 10 +13605.0 + 20 +13775.0 + 30 +0.0 + 0 +VERTEX + 5 +28B4 + 8 +DECKEN + 10 +11555.0 + 20 +13775.0 + 30 +0.0 + 0 +SEQEND + 5 +28B5 + 8 +DECKEN + 0 +POLYLINE + 5 +19F8 + 8 +DECKEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +28B6 + 8 +DECKEN + 10 +13605.0 + 20 +13700.0 + 30 +0.0 + 0 +VERTEX + 5 +28B7 + 8 +DECKEN + 10 +11555.0 + 20 +13700.0 + 30 +0.0 + 0 +SEQEND + 5 +28B8 + 8 +DECKEN + 0 +POLYLINE + 5 +19FC + 8 +DECKEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +28B9 + 8 +DECKEN + 10 +13605.0 + 20 +13250.0 + 30 +0.0 + 0 +VERTEX + 5 +28BA + 8 +DECKEN + 10 +11555.0 + 20 +13250.0 + 30 +0.0 + 0 +SEQEND + 5 +28BB + 8 +DECKEN + 0 +POLYLINE + 5 +1A00 + 8 +PE-FOLIE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +28BC + 8 +PE-FOLIE + 10 +11555.0 + 20 +13262.660165 + 30 +0.0 + 0 +VERTEX + 5 +28BD + 8 +PE-FOLIE + 10 +13605.0 + 20 +13262.869635 + 30 +0.0 + 0 +SEQEND + 5 +28BE + 8 +PE-FOLIE + 0 +POLYLINE + 5 +1A04 + 8 +DECKEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +28BF + 8 +DECKEN + 10 +11555.0 + 20 +13275.171698 + 30 +0.0 + 0 +VERTEX + 5 +28C0 + 8 +DECKEN + 10 +13605.0 + 20 +13275.534523 + 30 +0.0 + 0 +SEQEND + 5 +28C1 + 8 +DECKEN + 0 +POLYLINE + 5 +1A08 + 8 +DECKEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +28C2 + 8 +DECKEN + 10 +11555.0 + 20 +12850.0 + 30 +0.0 + 0 +VERTEX + 5 +28C3 + 8 +DECKEN + 10 +13605.0 + 20 +12850.0 + 30 +0.0 + 0 +SEQEND + 5 +28C4 + 8 +DECKEN + 0 +POLYLINE + 5 +1A0C + 8 +DECKEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +28C5 + 8 +DECKEN + 10 +11555.0 + 20 +13700.0 + 30 +0.0 + 0 +VERTEX + 5 +28C6 + 8 +DECKEN + 10 +13605.0 + 20 +13700.0 + 30 +0.0 + 0 +SEQEND + 5 +28C7 + 8 +DECKEN + 0 +POLYLINE + 5 +1A10 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +28C8 + 8 +DETAILS + 10 +11955.0 + 20 +13775.0 + 30 +0.0 + 0 +VERTEX + 5 +28C9 + 8 +DETAILS + 10 +11955.0 + 20 +13705.0 + 30 +0.0 + 0 +SEQEND + 5 +28CA + 8 +DETAILS + 0 +POLYLINE + 5 +1A14 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +28CB + 8 +DETAILS + 10 +12455.0 + 20 +13775.0 + 30 +0.0 + 0 +VERTEX + 5 +28CC + 8 +DETAILS + 10 +12455.0 + 20 +13705.0 + 30 +0.0 + 0 +SEQEND + 5 +28CD + 8 +DETAILS + 0 +POLYLINE + 5 +1A18 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +28CE + 8 +DETAILS + 10 +12955.0 + 20 +13775.0 + 30 +0.0 + 0 +VERTEX + 5 +28CF + 8 +DETAILS + 10 +12955.0 + 20 +13705.0 + 30 +0.0 + 0 +SEQEND + 5 +28D0 + 8 +DETAILS + 0 +POLYLINE + 5 +1A1C + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +28D1 + 8 +DETAILS + 10 +13455.0 + 20 +13775.0 + 30 +0.0 + 0 +VERTEX + 5 +28D2 + 8 +DETAILS + 10 +13455.0 + 20 +13705.0 + 30 +0.0 + 0 +SEQEND + 5 +28D3 + 8 +DETAILS + 0 +POLYLINE + 5 +1A20 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1A21 + 8 +DETAILS + 10 +11890.0 + 20 +13705.0 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A22 + 8 +DETAILS + 10 +11890.0 + 20 +13705.0 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A23 + 8 +DETAILS + 10 +11894.188794 + 20 +13710.344564 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A24 + 8 +DETAILS + 10 +11898.066408 + 20 +13715.005599 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A25 + 8 +DETAILS + 10 +11901.713079 + 20 +13719.023527 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A26 + 8 +DETAILS + 10 +11905.209046 + 20 +13722.438772 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A27 + 8 +DETAILS + 10 +11908.634546 + 20 +13725.291756 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A28 + 8 +DETAILS + 10 +11912.069816 + 20 +13727.622902 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A29 + 8 +DETAILS + 10 +11915.595095 + 20 +13729.472632 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A2A + 8 +DETAILS + 10 +11919.290621 + 20 +13730.88137 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A2B + 8 +DETAILS + 10 +11923.205515 + 20 +13731.897403 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A2C + 8 +DETAILS + 10 +11927.264437 + 20 +13732.600491 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A2D + 8 +DETAILS + 10 +11931.360931 + 20 +13733.078257 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A2E + 8 +DETAILS + 10 +11935.388541 + 20 +13733.418327 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A2F + 8 +DETAILS + 10 +11939.240811 + 20 +13733.708323 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A30 + 8 +DETAILS + 10 +11942.811284 + 20 +13734.035871 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A31 + 8 +DETAILS + 10 +11945.993506 + 20 +13734.488595 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A32 + 8 +DETAILS + 10 +11948.681019 + 20 +13735.15412 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A33 + 8 +DETAILS + 10 +11901.656347 + 20 +13720.199473 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A34 + 8 +DETAILS + 10 +11916.618791 + 20 +13735.15412 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A35 + 8 +DETAILS + 10 +11942.268556 + 20 +13733.017765 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A36 + 8 +DETAILS + 10 +11948.681019 + 20 +13735.15412 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1A37 + 8 +DETAILS + 0 +POLYLINE + 5 +1A38 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1A39 + 8 +DETAILS + 10 +11824.706963 + 20 +13711.653945 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A3A + 8 +DETAILS + 10 +11824.706963 + 20 +13711.653945 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A3B + 8 +DETAILS + 10 +11836.291966 + 20 +13722.373399 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A3C + 8 +DETAILS + 10 +11848.453085 + 20 +13730.914744 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A3D + 8 +DETAILS + 10 +11860.964881 + 20 +13737.903875 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A3E + 8 +DETAILS + 10 +11873.601919 + 20 +13743.966685 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A3F + 8 +DETAILS + 10 +11886.13876 + 20 +13749.729068 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A40 + 8 +DETAILS + 10 +11898.349969 + 20 +13755.816916 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A41 + 8 +DETAILS + 10 +11910.010106 + 20 +13762.856125 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A42 + 8 +DETAILS + 10 +11920.893737 + 20 +13771.472586 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A43 + 8 +DETAILS + 10 +11854.631763 + 20 +13743.699648 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A44 + 8 +DETAILS + 10 +11893.106455 + 20 +13745.836002 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A45 + 8 +DETAILS + 10 +11920.893737 + 20 +13771.472586 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1A46 + 8 +DETAILS + 0 +POLYLINE + 5 +1A47 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1A48 + 8 +DETAILS + 10 +11781.957237 + 20 +13707.381181 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A49 + 8 +DETAILS + 10 +11781.957237 + 20 +13707.381181 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A4A + 8 +DETAILS + 10 +11788.644191 + 20 +13716.832159 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A4B + 8 +DETAILS + 10 +11794.37303 + 20 +13724.505602 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A4C + 8 +DETAILS + 10 +11799.287786 + 20 +13730.626832 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A4D + 8 +DETAILS + 10 +11803.532488 + 20 +13735.42117 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A4E + 8 +DETAILS + 10 +11807.251167 + 20 +13739.113937 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A4F + 8 +DETAILS + 10 +11810.587853 + 20 +13741.930455 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A50 + 8 +DETAILS + 10 +11813.686577 + 20 +13744.096044 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A51 + 8 +DETAILS + 10 +11816.691369 + 20 +13745.836025 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A52 + 8 +DETAILS + 10 +11819.719124 + 20 +13747.343382 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A53 + 8 +DETAILS + 10 +11822.778191 + 20 +13748.681748 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A54 + 8 +DETAILS + 10 +11825.849784 + 20 +13749.882417 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A55 + 8 +DETAILS + 10 +11828.915115 + 20 +13750.976684 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A56 + 8 +DETAILS + 10 +11831.955398 + 20 +13751.995843 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A57 + 8 +DETAILS + 10 +11834.951846 + 20 +13752.97119 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A58 + 8 +DETAILS + 10 +11837.885673 + 20 +13753.934018 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A59 + 8 +DETAILS + 10 +11840.738092 + 20 +13754.915623 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A5A + 8 +DETAILS + 10 +11843.487185 + 20 +13755.943127 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A5B + 8 +DETAILS + 10 +11846.09851 + 20 +13757.026961 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A5C + 8 +DETAILS + 10 +11848.534492 + 20 +13758.173384 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A5D + 8 +DETAILS + 10 +11850.757559 + 20 +13759.388656 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A5E + 8 +DETAILS + 10 +11852.730136 + 20 +13760.679036 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A5F + 8 +DETAILS + 10 +11854.414649 + 20 +13762.050782 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A60 + 8 +DETAILS + 10 +11855.773526 + 20 +13763.510155 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A61 + 8 +DETAILS + 10 +11856.769192 + 20 +13765.063412 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A62 + 8 +DETAILS + 10 +11801.194627 + 20 +13735.15412 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A63 + 8 +DETAILS + 10 +11816.156983 + 20 +13747.972412 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A64 + 8 +DETAILS + 10 +11841.806836 + 20 +13754.38153 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A65 + 8 +DETAILS + 10 +11854.631763 + 20 +13760.790648 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A66 + 8 +DETAILS + 10 +11856.769192 + 20 +13765.063412 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1A67 + 8 +DETAILS + 0 +POLYLINE + 5 +1A68 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1A69 + 8 +DETAILS + 10 +11705.007765 + 20 +13705.244827 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A6A + 8 +DETAILS + 10 +11705.007765 + 20 +13705.244827 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A6B + 8 +DETAILS + 10 +11714.234036 + 20 +13713.343865 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A6C + 8 +DETAILS + 10 +11725.514287 + 20 +13721.568084 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A6D + 8 +DETAILS + 10 +11738.297451 + 20 +13729.842376 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A6E + 8 +DETAILS + 10 +11752.03246 + 20 +13738.091635 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A6F + 8 +DETAILS + 10 +11766.168245 + 20 +13746.240751 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A70 + 8 +DETAILS + 10 +11780.153737 + 20 +13754.214619 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A71 + 8 +DETAILS + 10 +11793.43787 + 20 +13761.93813 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A72 + 8 +DETAILS + 10 +11805.469573 + 20 +13769.336176 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A73 + 8 +DETAILS + 10 +11726.382672 + 20 +13726.608592 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A74 + 8 +DETAILS + 10 +11775.544774 + 20 +13750.108766 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A75 + 8 +DETAILS + 10 +11805.469573 + 20 +13769.336176 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1A76 + 8 +DETAILS + 0 +POLYLINE + 5 +1A77 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1A78 + 8 +DETAILS + 10 +11649.433201 + 20 +13711.653945 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A79 + 8 +DETAILS + 10 +11649.433201 + 20 +13711.653945 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A7A + 8 +DETAILS + 10 +11661.097526 + 20 +13721.146648 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A7B + 8 +DETAILS + 10 +11673.413115 + 20 +13729.112172 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A7C + 8 +DETAILS + 10 +11686.029285 + 20 +13736.026196 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A7D + 8 +DETAILS + 10 +11698.595357 + 20 +13742.364399 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A7E + 8 +DETAILS + 10 +11710.760649 + 20 +13748.60246 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A7F + 8 +DETAILS + 10 +11722.174478 + 20 +13755.216059 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A80 + 8 +DETAILS + 10 +11732.486165 + 20 +13762.680875 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A81 + 8 +DETAILS + 10 +11741.345028 + 20 +13771.472586 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A82 + 8 +DETAILS + 10 +11679.358 + 20 +13739.426884 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A83 + 8 +DETAILS + 10 +11719.970209 + 20 +13745.836002 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A84 + 8 +DETAILS + 10 +11741.345028 + 20 +13771.472586 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1A85 + 8 +DETAILS + 0 +POLYLINE + 5 +1A86 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1A87 + 8 +DETAILS + 10 +11587.446173 + 20 +13703.108417 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A88 + 8 +DETAILS + 10 +11587.446173 + 20 +13703.108417 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A89 + 8 +DETAILS + 10 +11593.758429 + 20 +13712.518711 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A8A + 8 +DETAILS + 10 +11599.870294 + 20 +13720.107657 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A8B + 8 +DETAILS + 10 +11605.781768 + 20 +13726.156908 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A8C + 8 +DETAILS + 10 +11611.492852 + 20 +13730.948113 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A8D + 8 +DETAILS + 10 +11617.003548 + 20 +13734.762927 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A8E + 8 +DETAILS + 10 +11622.313854 + 20 +13737.883 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A8F + 8 +DETAILS + 10 +11627.423774 + 20 +13740.589984 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A90 + 8 +DETAILS + 10 +11632.333306 + 20 +13743.165531 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A91 + 8 +DETAILS + 10 +11637.042452 + 20 +13745.85374 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A92 + 8 +DETAILS + 10 +11641.551211 + 20 +13748.748494 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A93 + 8 +DETAILS + 10 +11645.859581 + 20 +13751.906123 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A94 + 8 +DETAILS + 10 +11649.967561 + 20 +13755.382956 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A95 + 8 +DETAILS + 10 +11653.87515 + 20 +13759.235325 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A96 + 8 +DETAILS + 10 +11657.582346 + 20 +13763.519559 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A97 + 8 +DETAILS + 10 +11661.089149 + 20 +13768.291987 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A98 + 8 +DETAILS + 10 +11664.395556 + 20 +13773.60894 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A99 + 8 +DETAILS + 10 +11604.546046 + 20 +13730.881356 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A9A + 8 +DETAILS + 10 +11634.470757 + 20 +13741.563238 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A9B + 8 +DETAILS + 10 +11655.845664 + 20 +13758.654294 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A9C + 8 +DETAILS + 10 +11664.395556 + 20 +13773.60894 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1A9D + 8 +DETAILS + 0 +POLYLINE + 5 +1A9E + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1A9F + 8 +DETAILS + 10 +11563.933837 + 20 +13739.426884 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1AA0 + 8 +DETAILS + 10 +11563.933837 + 20 +13739.426884 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AA1 + 8 +DETAILS + 10 +11568.250531 + 20 +13740.883128 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AA2 + 8 +DETAILS + 10 +11572.016161 + 20 +13742.264266 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AA3 + 8 +DETAILS + 10 +11575.881991 + 20 +13743.895759 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AA4 + 8 +DETAILS + 10 +11580.499286 + 20 +13746.103074 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AA5 + 8 +DETAILS + 10 +11586.51931 + 20 +13749.211673 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AA6 + 8 +DETAILS + 10 +11594.593328 + 20 +13753.547022 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AA7 + 8 +DETAILS + 10 +11605.372603 + 20 +13759.434583 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AA8 + 8 +DETAILS + 10 +11619.508401 + 20 +13767.199822 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AA9 + 8 +DETAILS + 10 +11576.758675 + 20 +13743.699648 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1AAA + 8 +DETAILS + 10 +11619.508401 + 20 +13767.199822 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1AAB + 8 +DETAILS + 0 +POLYLINE + 5 +1AAC + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1AAD + 8 +DETAILS + 10 +12406.102815 + 20 +13703.108417 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1AAE + 8 +DETAILS + 10 +12406.102815 + 20 +13703.108417 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AAF + 8 +DETAILS + 10 +12411.797206 + 20 +13712.325728 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AB0 + 8 +DETAILS + 10 +12416.389457 + 20 +13719.565218 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AB1 + 8 +DETAILS + 10 +12420.380539 + 20 +13725.45278 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AB2 + 8 +DETAILS + 10 +12424.271425 + 20 +13730.614305 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AB3 + 8 +DETAILS + 10 +12428.563087 + 20 +13735.675685 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AB4 + 8 +DETAILS + 10 +12433.756497 + 20 +13741.262814 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AB5 + 8 +DETAILS + 10 +12440.352629 + 20 +13748.001583 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AB6 + 8 +DETAILS + 10 +12448.852453 + 20 +13756.517884 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AB7 + 8 +DETAILS + 10 +12423.202688 + 20 +13730.881356 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1AB8 + 8 +DETAILS + 10 +12448.852453 + 20 +13756.517884 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1AB9 + 8 +DETAILS + 0 +POLYLINE + 5 +1ABA + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1ABB + 8 +DETAILS + 10 +12324.878397 + 20 +13703.108417 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1ABC + 8 +DETAILS + 10 +12324.878397 + 20 +13703.108417 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1ABD + 8 +DETAILS + 10 +12327.77465 + 20 +13709.559281 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1ABE + 8 +DETAILS + 10 +12331.616488 + 20 +13714.658217 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1ABF + 8 +DETAILS + 10 +12336.347553 + 20 +13718.655583 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AC0 + 8 +DETAILS + 10 +12341.911484 + 20 +13721.801736 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AC1 + 8 +DETAILS + 10 +12348.251922 + 20 +13724.347033 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AC2 + 8 +DETAILS + 10 +12355.312509 + 20 +13726.54183 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AC3 + 8 +DETAILS + 10 +12363.036885 + 20 +13728.636486 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AC4 + 8 +DETAILS + 10 +12371.36869 + 20 +13730.881356 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AC5 + 8 +DETAILS + 10 +12380.201469 + 20 +13733.497589 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AC6 + 8 +DETAILS + 10 +12389.228374 + 20 +13736.5895 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AC7 + 8 +DETAILS + 10 +12398.092463 + 20 +13740.232197 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AC8 + 8 +DETAILS + 10 +12406.436791 + 20 +13744.500784 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AC9 + 8 +DETAILS + 10 +12413.904416 + 20 +13749.470369 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1ACA + 8 +DETAILS + 10 +12420.138394 + 20 +13755.216059 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1ACB + 8 +DETAILS + 10 +12424.781781 + 20 +13761.812959 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1ACC + 8 +DETAILS + 10 +12427.477634 + 20 +13769.336176 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1ACD + 8 +DETAILS + 10 +12331.290861 + 20 +13722.335828 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1ACE + 8 +DETAILS + 10 +12365.490606 + 20 +13726.608592 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1ACF + 8 +DETAILS + 10 +12423.202688 + 20 +13747.972412 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1AD0 + 8 +DETAILS + 10 +12427.477634 + 20 +13769.336176 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1AD1 + 8 +DETAILS + 0 +POLYLINE + 5 +1AD2 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1AD3 + 8 +DETAILS + 10 +12269.303745 + 20 +13707.381181 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1AD4 + 8 +DETAILS + 10 +12269.303745 + 20 +13707.381181 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AD5 + 8 +DETAILS + 10 +12277.74201 + 20 +13715.429115 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AD6 + 8 +DETAILS + 10 +12285.510224 + 20 +13722.093827 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AD7 + 8 +DETAILS + 10 +12292.739892 + 20 +13727.59438 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AD8 + 8 +DETAILS + 10 +12299.56252 + 20 +13732.149835 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AD9 + 8 +DETAILS + 10 +12306.109613 + 20 +13735.979255 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1ADA + 8 +DETAILS + 10 +12312.512675 + 20 +13739.301703 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1ADB + 8 +DETAILS + 10 +12318.903214 + 20 +13742.336239 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1ADC + 8 +DETAILS + 10 +12325.412733 + 20 +13745.301927 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1ADD + 8 +DETAILS + 10 +12332.114291 + 20 +13748.367758 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1ADE + 8 +DETAILS + 10 +12338.847159 + 20 +13751.502436 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1ADF + 8 +DETAILS + 10 +12345.392162 + 20 +13754.624596 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AE0 + 8 +DETAILS + 10 +12351.530124 + 20 +13757.652873 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AE1 + 8 +DETAILS + 10 +12357.041868 + 20 +13760.505899 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AE2 + 8 +DETAILS + 10 +12361.708218 + 20 +13763.10231 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AE3 + 8 +DETAILS + 10 +12365.309999 + 20 +13765.36074 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AE4 + 8 +DETAILS + 10 +12367.628035 + 20 +13767.199822 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AE5 + 8 +DETAILS + 10 +12292.816081 + 20 +13730.881356 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1AE6 + 8 +DETAILS + 10 +12322.74088 + 20 +13743.699648 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1AE7 + 8 +DETAILS + 10 +12363.353089 + 20 +13762.927058 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1AE8 + 8 +DETAILS + 10 +12367.628035 + 20 +13767.199822 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1AE9 + 8 +DETAILS + 0 +POLYLINE + 5 +1AEA + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1AEB + 8 +DETAILS + 10 +12209.454146 + 20 +13707.381181 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1AEC + 8 +DETAILS + 10 +12209.454146 + 20 +13707.381181 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AED + 8 +DETAILS + 10 +12216.567971 + 20 +13714.108481 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AEE + 8 +DETAILS + 10 +12223.481404 + 20 +13719.940755 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AEF + 8 +DETAILS + 10 +12230.194447 + 20 +13724.984405 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AF0 + 8 +DETAILS + 10 +12236.707098 + 20 +13729.345834 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AF1 + 8 +DETAILS + 10 +12243.01936 + 20 +13733.131441 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AF2 + 8 +DETAILS + 10 +12249.131232 + 20 +13736.44763 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AF3 + 8 +DETAILS + 10 +12255.042714 + 20 +13739.4008 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AF4 + 8 +DETAILS + 10 +12260.753808 + 20 +13742.097354 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AF5 + 8 +DETAILS + 10 +12266.256164 + 20 +13744.652039 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AF6 + 8 +DETAILS + 10 +12271.508035 + 20 +13747.212982 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AF7 + 8 +DETAILS + 10 +12276.459322 + 20 +13749.936657 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AF8 + 8 +DETAILS + 10 +12281.059929 + 20 +13752.979537 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AF9 + 8 +DETAILS + 10 +12285.259758 + 20 +13756.498097 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AFA + 8 +DETAILS + 10 +12289.00871 + 20 +13760.648809 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AFB + 8 +DETAILS + 10 +12292.25669 + 20 +13765.588148 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AFC + 8 +DETAILS + 10 +12294.953598 + 20 +13771.472586 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AFD + 8 +DETAILS + 10 +12228.691536 + 20 +13726.608592 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1AFE + 8 +DETAILS + 10 +12262.891281 + 20 +13743.699648 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1AFF + 8 +DETAILS + 10 +12288.541135 + 20 +13754.38153 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B00 + 8 +DETAILS + 10 +12294.953598 + 20 +13771.472586 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1B01 + 8 +DETAILS + 0 +POLYLINE + 5 +1B02 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1B03 + 8 +DETAILS + 10 +12153.879581 + 20 +13703.108417 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B04 + 8 +DETAILS + 10 +12153.879581 + 20 +13703.108417 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B05 + 8 +DETAILS + 10 +12157.937458 + 20 +13713.127923 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B06 + 8 +DETAILS + 10 +12162.09553 + 20 +13720.975579 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B07 + 8 +DETAILS + 10 +12166.353798 + 20 +13726.983107 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B08 + 8 +DETAILS + 10 +12170.712261 + 20 +13731.482233 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B09 + 8 +DETAILS + 10 +12175.17092 + 20 +13734.804679 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B0A + 8 +DETAILS + 10 +12179.729773 + 20 +13737.282169 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B0B + 8 +DETAILS + 10 +12184.388821 + 20 +13739.246428 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B0C + 8 +DETAILS + 10 +12189.148063 + 20 +13741.029177 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B0D + 8 +DETAILS + 10 +12194.0075 + 20 +13742.920415 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B0E + 8 +DETAILS + 10 +12198.967131 + 20 +13745.043234 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B0F + 8 +DETAILS + 10 +12204.026958 + 20 +13747.478999 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B10 + 8 +DETAILS + 10 +12209.186981 + 20 +13750.309077 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B11 + 8 +DETAILS + 10 +12214.447201 + 20 +13753.614832 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B12 + 8 +DETAILS + 10 +12219.807619 + 20 +13757.477631 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B13 + 8 +DETAILS + 10 +12225.268236 + 20 +13761.978839 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B14 + 8 +DETAILS + 10 +12230.829053 + 20 +13767.199822 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B15 + 8 +DETAILS + 10 +12164.566991 + 20 +13733.017765 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B16 + 8 +DETAILS + 10 +12188.079327 + 20 +13739.426884 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B17 + 8 +DETAILS + 10 +12215.866609 + 20 +13752.245176 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B18 + 8 +DETAILS + 10 +12230.829053 + 20 +13767.199822 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1B19 + 8 +DETAILS + 0 +POLYLINE + 5 +1B1A + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1B1B + 8 +DETAILS + 10 +12091.892553 + 20 +13705.244827 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B1C + 8 +DETAILS + 10 +12091.892553 + 20 +13705.244827 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B1D + 8 +DETAILS + 10 +12097.312442 + 20 +13714.469439 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B1E + 8 +DETAILS + 10 +12102.387913 + 20 +13721.559757 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B1F + 8 +DETAILS + 10 +12107.175327 + 20 +13726.885057 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B20 + 8 +DETAILS + 10 +12111.731043 + 20 +13730.814615 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B21 + 8 +DETAILS + 10 +12116.111419 + 20 +13733.717709 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B22 + 8 +DETAILS + 10 +12120.372816 + 20 +13735.963616 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B23 + 8 +DETAILS + 10 +12124.571592 + 20 +13737.921611 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B24 + 8 +DETAILS + 10 +12128.764107 + 20 +13739.960972 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B25 + 8 +DETAILS + 10 +12132.985846 + 20 +13742.388387 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B26 + 8 +DETAILS + 10 +12137.1888 + 20 +13745.260185 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B27 + 8 +DETAILS + 10 +12141.304084 + 20 +13748.57011 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B28 + 8 +DETAILS + 10 +12145.262814 + 20 +13752.311902 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B29 + 8 +DETAILS + 10 +12148.996108 + 20 +13756.479304 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B2A + 8 +DETAILS + 10 +12152.43508 + 20 +13761.066058 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B2B + 8 +DETAILS + 10 +12155.510848 + 20 +13766.065904 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B2C + 8 +DETAILS + 10 +12158.154527 + 20 +13771.472586 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B2D + 8 +DETAILS + 10 +12106.854909 + 20 +13733.017765 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B2E + 8 +DETAILS + 10 +12128.229728 + 20 +13735.15412 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B2F + 8 +DETAILS + 10 +12151.742064 + 20 +13756.517884 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B30 + 8 +DETAILS + 10 +12158.154527 + 20 +13771.472586 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1B31 + 8 +DETAILS + 0 +POLYLINE + 5 +1B32 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1B33 + 8 +DETAILS + 10 +12044.867881 + 20 +13709.517591 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B34 + 8 +DETAILS + 10 +12044.867881 + 20 +13709.517591 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B35 + 8 +DETAILS + 10 +12048.266133 + 20 +13716.809228 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B36 + 8 +DETAILS + 10 +12052.015072 + 20 +13722.786492 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B37 + 8 +DETAILS + 10 +12056.064599 + 20 +13727.637152 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B38 + 8 +DETAILS + 10 +12060.364616 + 20 +13731.548975 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B39 + 8 +DETAILS + 10 +12064.865025 + 20 +13734.709729 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B3A + 8 +DETAILS + 10 +12069.515729 + 20 +13737.307181 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B3B + 8 +DETAILS + 10 +12074.266629 + 20 +13739.5291 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B3C + 8 +DETAILS + 10 +12079.067626 + 20 +13741.563252 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B3D + 8 +DETAILS + 10 +12083.897848 + 20 +13743.58906 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B3E + 8 +DETAILS + 10 +12088.853311 + 20 +13745.752565 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B3F + 8 +DETAILS + 10 +12094.059258 + 20 +13748.191462 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B40 + 8 +DETAILS + 10 +12099.640932 + 20 +13751.043447 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B41 + 8 +DETAILS + 10 +12105.723573 + 20 +13754.446215 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B42 + 8 +DETAILS + 10 +12112.432425 + 20 +13758.537463 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B43 + 8 +DETAILS + 10 +12119.892729 + 20 +13763.454885 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B44 + 8 +DETAILS + 10 +12128.229728 + 20 +13769.336176 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B45 + 8 +DETAILS + 10 +12053.417773 + 20 +13730.881356 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B46 + 8 +DETAILS + 10 +12079.067626 + 20 +13741.563238 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B47 + 8 +DETAILS + 10 +12104.71748 + 20 +13752.245176 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B48 + 8 +DETAILS + 10 +12128.229728 + 20 +13769.336176 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1B49 + 8 +DETAILS + 0 +POLYLINE + 5 +1B4A + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1B4B + 8 +DETAILS + 10 +11989.293228 + 20 +13707.381181 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B4C + 8 +DETAILS + 10 +11989.293228 + 20 +13707.381181 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B4D + 8 +DETAILS + 10 +11995.563746 + 20 +13716.181229 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B4E + 8 +DETAILS + 10 +12004.188837 + 20 +13724.90617 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B4F + 8 +DETAILS + 10 +12014.316847 + 20 +13733.480897 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B50 + 8 +DETAILS + 10 +12025.096123 + 20 +13741.830303 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B51 + 8 +DETAILS + 10 +12035.67501 + 20 +13749.879282 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B52 + 8 +DETAILS + 10 +12045.201855 + 20 +13757.552727 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B53 + 8 +DETAILS + 10 +12052.825006 + 20 +13764.77553 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B54 + 8 +DETAILS + 10 +12057.692807 + 20 +13771.472586 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B55 + 8 +DETAILS + 10 +12002.118155 + 20 +13730.881356 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B56 + 8 +DETAILS + 10 +12049.142827 + 20 +13754.38153 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B57 + 8 +DETAILS + 10 +12057.692807 + 20 +13771.472586 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1B58 + 8 +DETAILS + 0 +POLYLINE + 5 +1B59 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +28D4 + 8 +DETAILS + 10 +11957.231 + 20 +13743.699648 + 30 +0.0 + 0 +VERTEX + 5 +28D5 + 8 +DETAILS + 10 +11997.843209 + 20 +13765.063412 + 30 +0.0 + 0 +VERTEX + 5 +28D6 + 8 +DETAILS + 10 +12002.118155 + 20 +13771.472586 + 30 +0.0 + 0 +SEQEND + 5 +28D7 + 8 +DETAILS + 0 +POLYLINE + 5 +1B5E + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1B5F + 8 +DETAILS + 10 +12653.879581 + 20 +13703.108417 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B60 + 8 +DETAILS + 10 +12653.879581 + 20 +13703.108417 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B61 + 8 +DETAILS + 10 +12657.937458 + 20 +13713.127923 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B62 + 8 +DETAILS + 10 +12662.09553 + 20 +13720.975579 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B63 + 8 +DETAILS + 10 +12666.353798 + 20 +13726.983107 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B64 + 8 +DETAILS + 10 +12670.712261 + 20 +13731.482233 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B65 + 8 +DETAILS + 10 +12675.17092 + 20 +13734.804679 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B66 + 8 +DETAILS + 10 +12679.729773 + 20 +13737.282169 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B67 + 8 +DETAILS + 10 +12684.388821 + 20 +13739.246428 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B68 + 8 +DETAILS + 10 +12689.148063 + 20 +13741.029177 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B69 + 8 +DETAILS + 10 +12694.0075 + 20 +13742.920415 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B6A + 8 +DETAILS + 10 +12698.967131 + 20 +13745.043234 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B6B + 8 +DETAILS + 10 +12704.026958 + 20 +13747.478999 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B6C + 8 +DETAILS + 10 +12709.186981 + 20 +13750.309077 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B6D + 8 +DETAILS + 10 +12714.447201 + 20 +13753.614832 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B6E + 8 +DETAILS + 10 +12719.807619 + 20 +13757.477631 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B6F + 8 +DETAILS + 10 +12725.268236 + 20 +13761.978839 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B70 + 8 +DETAILS + 10 +12730.829053 + 20 +13767.199822 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B71 + 8 +DETAILS + 10 +12664.566991 + 20 +13733.017765 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B72 + 8 +DETAILS + 10 +12688.079327 + 20 +13739.426884 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B73 + 8 +DETAILS + 10 +12715.866609 + 20 +13752.245176 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B74 + 8 +DETAILS + 10 +12730.829053 + 20 +13767.199822 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1B75 + 8 +DETAILS + 0 +POLYLINE + 5 +1B76 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1B77 + 8 +DETAILS + 10 +12591.892553 + 20 +13705.244827 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B78 + 8 +DETAILS + 10 +12591.892553 + 20 +13705.244827 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B79 + 8 +DETAILS + 10 +12597.312442 + 20 +13714.469439 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B7A + 8 +DETAILS + 10 +12602.387913 + 20 +13721.559757 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B7B + 8 +DETAILS + 10 +12607.175327 + 20 +13726.885057 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B7C + 8 +DETAILS + 10 +12611.731043 + 20 +13730.814615 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B7D + 8 +DETAILS + 10 +12616.111419 + 20 +13733.717709 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B7E + 8 +DETAILS + 10 +12620.372816 + 20 +13735.963616 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B7F + 8 +DETAILS + 10 +12624.571592 + 20 +13737.921611 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B80 + 8 +DETAILS + 10 +12628.764107 + 20 +13739.960972 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B81 + 8 +DETAILS + 10 +12632.985846 + 20 +13742.388387 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B82 + 8 +DETAILS + 10 +12637.1888 + 20 +13745.260185 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B83 + 8 +DETAILS + 10 +12641.304084 + 20 +13748.57011 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B84 + 8 +DETAILS + 10 +12645.262814 + 20 +13752.311902 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B85 + 8 +DETAILS + 10 +12648.996108 + 20 +13756.479304 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B86 + 8 +DETAILS + 10 +12652.43508 + 20 +13761.066058 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B87 + 8 +DETAILS + 10 +12655.510848 + 20 +13766.065904 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B88 + 8 +DETAILS + 10 +12658.154527 + 20 +13771.472586 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B89 + 8 +DETAILS + 10 +12606.854909 + 20 +13733.017765 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B8A + 8 +DETAILS + 10 +12628.229728 + 20 +13735.15412 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B8B + 8 +DETAILS + 10 +12651.742064 + 20 +13756.517884 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B8C + 8 +DETAILS + 10 +12658.154527 + 20 +13771.472586 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1B8D + 8 +DETAILS + 0 +POLYLINE + 5 +1B8E + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1B8F + 8 +DETAILS + 10 +12544.867881 + 20 +13709.517591 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B90 + 8 +DETAILS + 10 +12544.867881 + 20 +13709.517591 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B91 + 8 +DETAILS + 10 +12548.266133 + 20 +13716.809228 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B92 + 8 +DETAILS + 10 +12552.015072 + 20 +13722.786492 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B93 + 8 +DETAILS + 10 +12556.064599 + 20 +13727.637152 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B94 + 8 +DETAILS + 10 +12560.364616 + 20 +13731.548975 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B95 + 8 +DETAILS + 10 +12564.865025 + 20 +13734.709729 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B96 + 8 +DETAILS + 10 +12569.515729 + 20 +13737.307181 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B97 + 8 +DETAILS + 10 +12574.266629 + 20 +13739.5291 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B98 + 8 +DETAILS + 10 +12579.067626 + 20 +13741.563252 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B99 + 8 +DETAILS + 10 +12583.897848 + 20 +13743.58906 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B9A + 8 +DETAILS + 10 +12588.853311 + 20 +13745.752565 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B9B + 8 +DETAILS + 10 +12594.059258 + 20 +13748.191462 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B9C + 8 +DETAILS + 10 +12599.640932 + 20 +13751.043447 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B9D + 8 +DETAILS + 10 +12605.723573 + 20 +13754.446215 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B9E + 8 +DETAILS + 10 +12612.432425 + 20 +13758.537463 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B9F + 8 +DETAILS + 10 +12619.892729 + 20 +13763.454885 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BA0 + 8 +DETAILS + 10 +12628.229728 + 20 +13769.336176 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BA1 + 8 +DETAILS + 10 +12553.417773 + 20 +13730.881356 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1BA2 + 8 +DETAILS + 10 +12579.067626 + 20 +13741.563238 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1BA3 + 8 +DETAILS + 10 +12604.71748 + 20 +13752.245176 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1BA4 + 8 +DETAILS + 10 +12628.229728 + 20 +13769.336176 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1BA5 + 8 +DETAILS + 0 +POLYLINE + 5 +1BA6 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1BA7 + 8 +DETAILS + 10 +12489.293228 + 20 +13707.381181 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1BA8 + 8 +DETAILS + 10 +12489.293228 + 20 +13707.381181 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BA9 + 8 +DETAILS + 10 +12495.563746 + 20 +13716.181229 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BAA + 8 +DETAILS + 10 +12504.188837 + 20 +13724.90617 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BAB + 8 +DETAILS + 10 +12514.316847 + 20 +13733.480897 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BAC + 8 +DETAILS + 10 +12525.096123 + 20 +13741.830303 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BAD + 8 +DETAILS + 10 +12535.67501 + 20 +13749.879282 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BAE + 8 +DETAILS + 10 +12545.201855 + 20 +13757.552727 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BAF + 8 +DETAILS + 10 +12552.825006 + 20 +13764.77553 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BB0 + 8 +DETAILS + 10 +12557.692807 + 20 +13771.472586 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BB1 + 8 +DETAILS + 10 +12502.118155 + 20 +13730.881356 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1BB2 + 8 +DETAILS + 10 +12549.142827 + 20 +13754.38153 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1BB3 + 8 +DETAILS + 10 +12557.692807 + 20 +13771.472586 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1BB4 + 8 +DETAILS + 0 +POLYLINE + 5 +1BB5 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1BB6 + 8 +DETAILS + 10 +12824.878397 + 20 +13703.108417 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1BB7 + 8 +DETAILS + 10 +12824.878397 + 20 +13703.108417 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BB8 + 8 +DETAILS + 10 +12827.77465 + 20 +13709.559281 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BB9 + 8 +DETAILS + 10 +12831.616488 + 20 +13714.658217 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BBA + 8 +DETAILS + 10 +12836.347553 + 20 +13718.655583 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BBB + 8 +DETAILS + 10 +12841.911484 + 20 +13721.801736 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BBC + 8 +DETAILS + 10 +12848.251922 + 20 +13724.347033 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BBD + 8 +DETAILS + 10 +12855.312509 + 20 +13726.54183 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BBE + 8 +DETAILS + 10 +12863.036885 + 20 +13728.636486 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BBF + 8 +DETAILS + 10 +12871.36869 + 20 +13730.881356 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BC0 + 8 +DETAILS + 10 +12880.201469 + 20 +13733.497589 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BC1 + 8 +DETAILS + 10 +12889.228374 + 20 +13736.5895 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BC2 + 8 +DETAILS + 10 +12898.092463 + 20 +13740.232197 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BC3 + 8 +DETAILS + 10 +12906.436791 + 20 +13744.500784 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BC4 + 8 +DETAILS + 10 +12913.904416 + 20 +13749.470369 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BC5 + 8 +DETAILS + 10 +12920.138394 + 20 +13755.216059 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BC6 + 8 +DETAILS + 10 +12924.781781 + 20 +13761.812959 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BC7 + 8 +DETAILS + 10 +12927.477634 + 20 +13769.336176 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BC8 + 8 +DETAILS + 10 +12831.290861 + 20 +13722.335828 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1BC9 + 8 +DETAILS + 10 +12865.490606 + 20 +13726.608592 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1BCA + 8 +DETAILS + 10 +12923.202688 + 20 +13747.972412 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1BCB + 8 +DETAILS + 10 +12927.477634 + 20 +13769.336176 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1BCC + 8 +DETAILS + 0 +POLYLINE + 5 +1BCD + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1BCE + 8 +DETAILS + 10 +12769.303745 + 20 +13707.381181 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1BCF + 8 +DETAILS + 10 +12769.303745 + 20 +13707.381181 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BD0 + 8 +DETAILS + 10 +12777.74201 + 20 +13715.429115 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BD1 + 8 +DETAILS + 10 +12785.510224 + 20 +13722.093827 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BD2 + 8 +DETAILS + 10 +12792.739892 + 20 +13727.59438 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BD3 + 8 +DETAILS + 10 +12799.56252 + 20 +13732.149835 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BD4 + 8 +DETAILS + 10 +12806.109613 + 20 +13735.979255 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BD5 + 8 +DETAILS + 10 +12812.512675 + 20 +13739.301703 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BD6 + 8 +DETAILS + 10 +12818.903214 + 20 +13742.336239 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BD7 + 8 +DETAILS + 10 +12825.412733 + 20 +13745.301927 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BD8 + 8 +DETAILS + 10 +12832.114291 + 20 +13748.367758 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BD9 + 8 +DETAILS + 10 +12838.847159 + 20 +13751.502436 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BDA + 8 +DETAILS + 10 +12845.392162 + 20 +13754.624596 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BDB + 8 +DETAILS + 10 +12851.530124 + 20 +13757.652873 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BDC + 8 +DETAILS + 10 +12857.041868 + 20 +13760.505899 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BDD + 8 +DETAILS + 10 +12861.708218 + 20 +13763.10231 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BDE + 8 +DETAILS + 10 +12865.309999 + 20 +13765.36074 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BDF + 8 +DETAILS + 10 +12867.628035 + 20 +13767.199822 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BE0 + 8 +DETAILS + 10 +12792.816081 + 20 +13730.881356 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1BE1 + 8 +DETAILS + 10 +12822.74088 + 20 +13743.699648 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1BE2 + 8 +DETAILS + 10 +12863.353089 + 20 +13762.927058 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1BE3 + 8 +DETAILS + 10 +12867.628035 + 20 +13767.199822 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1BE4 + 8 +DETAILS + 0 +POLYLINE + 5 +1BE5 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1BE6 + 8 +DETAILS + 10 +12709.454146 + 20 +13707.381181 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1BE7 + 8 +DETAILS + 10 +12709.454146 + 20 +13707.381181 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BE8 + 8 +DETAILS + 10 +12716.567971 + 20 +13714.108481 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BE9 + 8 +DETAILS + 10 +12723.481404 + 20 +13719.940755 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BEA + 8 +DETAILS + 10 +12730.194447 + 20 +13724.984405 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BEB + 8 +DETAILS + 10 +12736.707098 + 20 +13729.345834 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BEC + 8 +DETAILS + 10 +12743.01936 + 20 +13733.131441 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BED + 8 +DETAILS + 10 +12749.131232 + 20 +13736.44763 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BEE + 8 +DETAILS + 10 +12755.042714 + 20 +13739.4008 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BEF + 8 +DETAILS + 10 +12760.753808 + 20 +13742.097354 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BF0 + 8 +DETAILS + 10 +12766.256164 + 20 +13744.652039 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BF1 + 8 +DETAILS + 10 +12771.508035 + 20 +13747.212982 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BF2 + 8 +DETAILS + 10 +12776.459322 + 20 +13749.936657 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BF3 + 8 +DETAILS + 10 +12781.059929 + 20 +13752.979537 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BF4 + 8 +DETAILS + 10 +12785.259758 + 20 +13756.498097 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BF5 + 8 +DETAILS + 10 +12789.00871 + 20 +13760.648809 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BF6 + 8 +DETAILS + 10 +12792.25669 + 20 +13765.588148 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BF7 + 8 +DETAILS + 10 +12794.953598 + 20 +13771.472586 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BF8 + 8 +DETAILS + 10 +12728.691536 + 20 +13726.608592 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1BF9 + 8 +DETAILS + 10 +12762.891281 + 20 +13743.699648 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1BFA + 8 +DETAILS + 10 +12788.541135 + 20 +13754.38153 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1BFB + 8 +DETAILS + 10 +12794.953598 + 20 +13771.472586 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1BFC + 8 +DETAILS + 0 +POLYLINE + 5 +1BFD + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1BFE + 8 +DETAILS + 10 +12906.102815 + 20 +13703.108417 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1BFF + 8 +DETAILS + 10 +12906.102815 + 20 +13703.108417 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C00 + 8 +DETAILS + 10 +12911.797206 + 20 +13712.325728 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C01 + 8 +DETAILS + 10 +12916.389457 + 20 +13719.565218 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C02 + 8 +DETAILS + 10 +12920.380539 + 20 +13725.45278 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C03 + 8 +DETAILS + 10 +12924.271425 + 20 +13730.614305 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C04 + 8 +DETAILS + 10 +12928.563087 + 20 +13735.675685 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C05 + 8 +DETAILS + 10 +12933.756497 + 20 +13741.262814 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C06 + 8 +DETAILS + 10 +12940.352629 + 20 +13748.001583 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C07 + 8 +DETAILS + 10 +12948.852453 + 20 +13756.517884 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C08 + 8 +DETAILS + 10 +12923.202688 + 20 +13730.881356 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1C09 + 8 +DETAILS + 10 +12948.852453 + 20 +13756.517884 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1C0A + 8 +DETAILS + 0 +POLYLINE + 5 +1C0B + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +28D8 + 8 +DETAILS + 10 +12457.231 + 20 +13743.699648 + 30 +0.0 + 0 +VERTEX + 5 +28D9 + 8 +DETAILS + 10 +12497.843209 + 20 +13765.063412 + 30 +0.0 + 0 +VERTEX + 5 +28DA + 8 +DETAILS + 10 +12502.118155 + 20 +13771.472586 + 30 +0.0 + 0 +SEQEND + 5 +28DB + 8 +DETAILS + 0 +LINE + 5 +1C10 + 8 +0 + 62 + 0 + 10 +12562.49999 + 20 +13693.747693 + 30 +0.0 + 11 +12566.109761 + 21 +13700.0 + 31 +0.0 + 0 +LINE + 5 +1C11 + 8 +0 + 62 + 0 + 10 +12499.999958 + 20 +13693.747663 + 30 +0.0 + 11 +12496.39017 + 21 +13700.0 + 31 +0.0 + 0 +LINE + 5 +1C12 + 8 +0 + 62 + 0 + 10 +12500.0 + 20 +13693.74765 + 30 +0.0 + 11 +12562.5 + 21 +13693.74765 + 31 +0.0 + 0 +LINE + 5 +1C13 + 8 +0 + 62 + 0 + 10 +12749.999989 + 20 +13693.747693 + 30 +0.0 + 11 +12753.60976 + 21 +13700.0 + 31 +0.0 + 0 +LINE + 5 +1C14 + 8 +0 + 62 + 0 + 10 +12687.499958 + 20 +13693.747662 + 30 +0.0 + 11 +12683.890169 + 21 +13700.0 + 31 +0.0 + 0 +LINE + 5 +1C15 + 8 +0 + 62 + 0 + 10 +12687.5 + 20 +13693.74765 + 30 +0.0 + 11 +12750.0 + 21 +13693.74765 + 31 +0.0 + 0 +LINE + 5 +1C16 + 8 +0 + 62 + 0 + 10 +12937.499989 + 20 +13693.747693 + 30 +0.0 + 11 +12941.10976 + 21 +13700.0 + 31 +0.0 + 0 +LINE + 5 +1C17 + 8 +0 + 62 + 0 + 10 +12874.999957 + 20 +13693.747662 + 30 +0.0 + 11 +12871.390168 + 21 +13700.0 + 31 +0.0 + 0 +LINE + 5 +1C18 + 8 +0 + 62 + 0 + 10 +12875.0 + 20 +13693.74765 + 30 +0.0 + 11 +12937.5 + 21 +13693.74765 + 31 +0.0 + 0 +LINE + 5 +1C19 + 8 +0 + 62 + 0 + 10 +13062.49999 + 20 +13693.747693 + 30 +0.0 + 11 +13066.109761 + 21 +13700.0 + 31 +0.0 + 0 +POLYLINE + 5 +1C1A + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1C1B + 8 +DETAILS + 10 +13044.867881 + 20 +13709.517591 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1C1C + 8 +DETAILS + 10 +13044.867881 + 20 +13709.517591 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C1D + 8 +DETAILS + 10 +13048.266133 + 20 +13716.809228 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C1E + 8 +DETAILS + 10 +13052.015072 + 20 +13722.786492 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C1F + 8 +DETAILS + 10 +13056.064599 + 20 +13727.637152 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C20 + 8 +DETAILS + 10 +13060.364616 + 20 +13731.548975 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C21 + 8 +DETAILS + 10 +13064.865025 + 20 +13734.709729 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C22 + 8 +DETAILS + 10 +13069.515729 + 20 +13737.307181 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C23 + 8 +DETAILS + 10 +13074.266629 + 20 +13739.5291 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C24 + 8 +DETAILS + 10 +13079.067626 + 20 +13741.563252 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C25 + 8 +DETAILS + 10 +13083.897848 + 20 +13743.58906 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C26 + 8 +DETAILS + 10 +13088.853311 + 20 +13745.752565 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C27 + 8 +DETAILS + 10 +13094.059258 + 20 +13748.191462 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C28 + 8 +DETAILS + 10 +13099.640932 + 20 +13751.043447 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C29 + 8 +DETAILS + 10 +13105.723573 + 20 +13754.446215 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C2A + 8 +DETAILS + 10 +13112.432425 + 20 +13758.537463 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C2B + 8 +DETAILS + 10 +13119.892729 + 20 +13763.454885 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C2C + 8 +DETAILS + 10 +13128.229728 + 20 +13769.336176 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C2D + 8 +DETAILS + 10 +13053.417773 + 20 +13730.881356 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1C2E + 8 +DETAILS + 10 +13079.067626 + 20 +13741.563238 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1C2F + 8 +DETAILS + 10 +13104.71748 + 20 +13752.245176 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1C30 + 8 +DETAILS + 10 +13128.229728 + 20 +13769.336176 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1C31 + 8 +DETAILS + 0 +LINE + 5 +1C32 + 8 +0 + 62 + 0 + 10 +13062.5 + 20 +13693.74765 + 30 +0.0 + 11 +13125.0 + 21 +13693.74765 + 31 +0.0 + 0 +LINE + 5 +1C33 + 8 +0 + 62 + 0 + 10 +13000.0 + 20 +13693.74765 + 30 +0.0 + 11 +13062.5 + 21 +13693.74765 + 31 +0.0 + 0 +LINE + 5 +1C34 + 8 +0 + 62 + 0 + 10 +12999.999958 + 20 +13693.747663 + 30 +0.0 + 11 +12996.39017 + 21 +13700.0 + 31 +0.0 + 0 +POLYLINE + 5 +1C35 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +28DC + 8 +DETAILS + 10 +12957.231 + 20 +13743.699648 + 30 +0.0 + 0 +VERTEX + 5 +28DD + 8 +DETAILS + 10 +12997.843209 + 20 +13765.063412 + 30 +0.0 + 0 +VERTEX + 5 +28DE + 8 +DETAILS + 10 +13002.118155 + 20 +13771.472586 + 30 +0.0 + 0 +SEQEND + 5 +28DF + 8 +DETAILS + 0 +POLYLINE + 5 +1C3A + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1C3B + 8 +DETAILS + 10 +12989.293228 + 20 +13707.381181 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1C3C + 8 +DETAILS + 10 +12989.293228 + 20 +13707.381181 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C3D + 8 +DETAILS + 10 +12995.563746 + 20 +13716.181229 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C3E + 8 +DETAILS + 10 +13004.188837 + 20 +13724.90617 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C3F + 8 +DETAILS + 10 +13014.316847 + 20 +13733.480897 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C40 + 8 +DETAILS + 10 +13025.096123 + 20 +13741.830303 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C41 + 8 +DETAILS + 10 +13035.67501 + 20 +13749.879282 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C42 + 8 +DETAILS + 10 +13045.201855 + 20 +13757.552727 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C43 + 8 +DETAILS + 10 +13052.825006 + 20 +13764.77553 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C44 + 8 +DETAILS + 10 +13057.692807 + 20 +13771.472586 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C45 + 8 +DETAILS + 10 +13002.118155 + 20 +13730.881356 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1C46 + 8 +DETAILS + 10 +13049.142827 + 20 +13754.38153 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1C47 + 8 +DETAILS + 10 +13057.692807 + 20 +13771.472586 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1C48 + 8 +DETAILS + 0 +LINE + 5 +1C49 + 8 +0 + 62 + 0 + 10 +13062.499956 + 20 +13693.747662 + 30 +0.0 + 11 +13058.890167 + 21 +13700.0 + 31 +0.0 + 0 +POLYLINE + 5 +1C4A + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1C4B + 8 +DETAILS + 10 +13209.454146 + 20 +13707.381181 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1C4C + 8 +DETAILS + 10 +13209.454146 + 20 +13707.381181 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C4D + 8 +DETAILS + 10 +13216.567971 + 20 +13714.108481 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C4E + 8 +DETAILS + 10 +13223.481404 + 20 +13719.940755 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C4F + 8 +DETAILS + 10 +13230.194447 + 20 +13724.984405 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C50 + 8 +DETAILS + 10 +13236.707098 + 20 +13729.345834 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C51 + 8 +DETAILS + 10 +13243.01936 + 20 +13733.131441 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C52 + 8 +DETAILS + 10 +13249.131232 + 20 +13736.44763 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C53 + 8 +DETAILS + 10 +13255.042714 + 20 +13739.4008 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C54 + 8 +DETAILS + 10 +13260.753808 + 20 +13742.097354 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C55 + 8 +DETAILS + 10 +13266.256164 + 20 +13744.652039 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C56 + 8 +DETAILS + 10 +13271.508035 + 20 +13747.212982 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C57 + 8 +DETAILS + 10 +13276.459322 + 20 +13749.936657 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C58 + 8 +DETAILS + 10 +13281.059929 + 20 +13752.979537 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C59 + 8 +DETAILS + 10 +13285.259758 + 20 +13756.498097 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C5A + 8 +DETAILS + 10 +13289.00871 + 20 +13760.648809 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C5B + 8 +DETAILS + 10 +13292.25669 + 20 +13765.588148 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C5C + 8 +DETAILS + 10 +13294.953598 + 20 +13771.472586 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C5D + 8 +DETAILS + 10 +13228.691536 + 20 +13726.608592 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1C5E + 8 +DETAILS + 10 +13262.891281 + 20 +13743.699648 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1C5F + 8 +DETAILS + 10 +13288.541135 + 20 +13754.38153 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1C60 + 8 +DETAILS + 10 +13294.953598 + 20 +13771.472586 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1C61 + 8 +DETAILS + 0 +POLYLINE + 5 +1C62 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1C63 + 8 +DETAILS + 10 +13269.303745 + 20 +13707.381181 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1C64 + 8 +DETAILS + 10 +13269.303745 + 20 +13707.381181 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C65 + 8 +DETAILS + 10 +13277.74201 + 20 +13715.429115 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C66 + 8 +DETAILS + 10 +13285.510224 + 20 +13722.093827 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C67 + 8 +DETAILS + 10 +13292.739892 + 20 +13727.59438 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C68 + 8 +DETAILS + 10 +13299.56252 + 20 +13732.149835 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C69 + 8 +DETAILS + 10 +13306.109613 + 20 +13735.979255 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C6A + 8 +DETAILS + 10 +13312.512675 + 20 +13739.301703 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C6B + 8 +DETAILS + 10 +13318.903214 + 20 +13742.336239 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C6C + 8 +DETAILS + 10 +13325.412733 + 20 +13745.301927 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C6D + 8 +DETAILS + 10 +13332.114291 + 20 +13748.367758 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C6E + 8 +DETAILS + 10 +13338.847159 + 20 +13751.502436 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C6F + 8 +DETAILS + 10 +13345.392162 + 20 +13754.624596 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C70 + 8 +DETAILS + 10 +13351.530124 + 20 +13757.652873 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C71 + 8 +DETAILS + 10 +13357.041868 + 20 +13760.505899 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C72 + 8 +DETAILS + 10 +13361.708218 + 20 +13763.10231 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C73 + 8 +DETAILS + 10 +13365.309999 + 20 +13765.36074 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C74 + 8 +DETAILS + 10 +13367.628035 + 20 +13767.199822 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C75 + 8 +DETAILS + 10 +13292.816081 + 20 +13730.881356 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1C76 + 8 +DETAILS + 10 +13322.74088 + 20 +13743.699648 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1C77 + 8 +DETAILS + 10 +13363.353089 + 20 +13762.927058 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1C78 + 8 +DETAILS + 10 +13367.628035 + 20 +13767.199822 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1C79 + 8 +DETAILS + 0 +LINE + 5 +1C7A + 8 +0 + 62 + 0 + 10 +13250.0 + 20 +13693.74765 + 30 +0.0 + 11 +13312.5 + 21 +13693.74765 + 31 +0.0 + 0 +LINE + 5 +1C7B + 8 +0 + 62 + 0 + 10 +13187.5 + 20 +13693.74765 + 30 +0.0 + 11 +13250.0 + 21 +13693.74765 + 31 +0.0 + 0 +LINE + 5 +1C7C + 8 +0 + 62 + 0 + 10 +13187.499958 + 20 +13693.747662 + 30 +0.0 + 11 +13183.890169 + 21 +13700.0 + 31 +0.0 + 0 +LINE + 5 +1C7D + 8 +0 + 62 + 0 + 10 +13249.999989 + 20 +13693.747693 + 30 +0.0 + 11 +13253.60976 + 21 +13700.0 + 31 +0.0 + 0 +POLYLINE + 5 +1C7E + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1C7F + 8 +DETAILS + 10 +13091.892553 + 20 +13705.244827 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1C80 + 8 +DETAILS + 10 +13091.892553 + 20 +13705.244827 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C81 + 8 +DETAILS + 10 +13097.312442 + 20 +13714.469439 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C82 + 8 +DETAILS + 10 +13102.387913 + 20 +13721.559757 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C83 + 8 +DETAILS + 10 +13107.175327 + 20 +13726.885057 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C84 + 8 +DETAILS + 10 +13111.731043 + 20 +13730.814615 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C85 + 8 +DETAILS + 10 +13116.111419 + 20 +13733.717709 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C86 + 8 +DETAILS + 10 +13120.372816 + 20 +13735.963616 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C87 + 8 +DETAILS + 10 +13124.571592 + 20 +13737.921611 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C88 + 8 +DETAILS + 10 +13128.764107 + 20 +13739.960972 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C89 + 8 +DETAILS + 10 +13132.985846 + 20 +13742.388387 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C8A + 8 +DETAILS + 10 +13137.1888 + 20 +13745.260185 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C8B + 8 +DETAILS + 10 +13141.304084 + 20 +13748.57011 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C8C + 8 +DETAILS + 10 +13145.262814 + 20 +13752.311902 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C8D + 8 +DETAILS + 10 +13148.996108 + 20 +13756.479304 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C8E + 8 +DETAILS + 10 +13152.43508 + 20 +13761.066058 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C8F + 8 +DETAILS + 10 +13155.510848 + 20 +13766.065904 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C90 + 8 +DETAILS + 10 +13158.154527 + 20 +13771.472586 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C91 + 8 +DETAILS + 10 +13106.854909 + 20 +13733.017765 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1C92 + 8 +DETAILS + 10 +13128.229728 + 20 +13735.15412 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1C93 + 8 +DETAILS + 10 +13151.742064 + 20 +13756.517884 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1C94 + 8 +DETAILS + 10 +13158.154527 + 20 +13771.472586 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1C95 + 8 +DETAILS + 0 +POLYLINE + 5 +1C96 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1C97 + 8 +DETAILS + 10 +13153.879581 + 20 +13703.108417 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1C98 + 8 +DETAILS + 10 +13153.879581 + 20 +13703.108417 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C99 + 8 +DETAILS + 10 +13157.937458 + 20 +13713.127923 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C9A + 8 +DETAILS + 10 +13162.09553 + 20 +13720.975579 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C9B + 8 +DETAILS + 10 +13166.353798 + 20 +13726.983107 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C9C + 8 +DETAILS + 10 +13170.712261 + 20 +13731.482233 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C9D + 8 +DETAILS + 10 +13175.17092 + 20 +13734.804679 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C9E + 8 +DETAILS + 10 +13179.729773 + 20 +13737.282169 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C9F + 8 +DETAILS + 10 +13184.388821 + 20 +13739.246428 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CA0 + 8 +DETAILS + 10 +13189.148063 + 20 +13741.029177 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CA1 + 8 +DETAILS + 10 +13194.0075 + 20 +13742.920415 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CA2 + 8 +DETAILS + 10 +13198.967131 + 20 +13745.043234 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CA3 + 8 +DETAILS + 10 +13204.026958 + 20 +13747.478999 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CA4 + 8 +DETAILS + 10 +13209.186981 + 20 +13750.309077 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CA5 + 8 +DETAILS + 10 +13214.447201 + 20 +13753.614832 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CA6 + 8 +DETAILS + 10 +13219.807619 + 20 +13757.477631 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CA7 + 8 +DETAILS + 10 +13225.268236 + 20 +13761.978839 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CA8 + 8 +DETAILS + 10 +13230.829053 + 20 +13767.199822 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CA9 + 8 +DETAILS + 10 +13164.566991 + 20 +13733.017765 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1CAA + 8 +DETAILS + 10 +13188.079327 + 20 +13739.426884 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1CAB + 8 +DETAILS + 10 +13215.866609 + 20 +13752.245176 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1CAC + 8 +DETAILS + 10 +13230.829053 + 20 +13767.199822 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1CAD + 8 +DETAILS + 0 +LINE + 5 +1CAE + 8 +0 + 62 + 0 + 10 +13124.999988 + 20 +13693.747694 + 30 +0.0 + 11 +13128.609759 + 21 +13700.0 + 31 +0.0 + 0 +LINE + 5 +1CAF + 8 +0 + 62 + 0 + 10 +13249.999956 + 20 +13693.747661 + 30 +0.0 + 11 +13246.390166 + 21 +13700.0 + 31 +0.0 + 0 +LINE + 5 +1CB0 + 8 +0 + 62 + 0 + 10 +13375.0 + 20 +13693.74765 + 30 +0.0 + 11 +13437.5 + 21 +13693.74765 + 31 +0.0 + 0 +LINE + 5 +1CB1 + 8 +0 + 62 + 0 + 10 +13374.999957 + 20 +13693.747662 + 30 +0.0 + 11 +13371.390168 + 21 +13700.0 + 31 +0.0 + 0 +LINE + 5 +1CB2 + 8 +0 + 62 + 0 + 10 +13437.499989 + 20 +13693.747693 + 30 +0.0 + 11 +13441.10976 + 21 +13700.0 + 31 +0.0 + 0 +POLYLINE + 5 +1CB3 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1CB4 + 8 +DETAILS + 10 +13406.102815 + 20 +13703.108417 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1CB5 + 8 +DETAILS + 10 +13406.102815 + 20 +13703.108417 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CB6 + 8 +DETAILS + 10 +13411.797206 + 20 +13712.325728 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CB7 + 8 +DETAILS + 10 +13416.389457 + 20 +13719.565218 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CB8 + 8 +DETAILS + 10 +13420.380539 + 20 +13725.45278 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CB9 + 8 +DETAILS + 10 +13424.271425 + 20 +13730.614305 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CBA + 8 +DETAILS + 10 +13428.563087 + 20 +13735.675685 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CBB + 8 +DETAILS + 10 +13433.756497 + 20 +13741.262814 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CBC + 8 +DETAILS + 10 +13440.352629 + 20 +13748.001583 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CBD + 8 +DETAILS + 10 +13448.852453 + 20 +13756.517884 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CBE + 8 +DETAILS + 10 +13423.202688 + 20 +13730.881356 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1CBF + 8 +DETAILS + 10 +13448.852453 + 20 +13756.517884 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1CC0 + 8 +DETAILS + 0 +POLYLINE + 5 +1CC1 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1CC2 + 8 +DETAILS + 10 +13324.878397 + 20 +13703.108417 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1CC3 + 8 +DETAILS + 10 +13324.878397 + 20 +13703.108417 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CC4 + 8 +DETAILS + 10 +13327.77465 + 20 +13709.559281 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CC5 + 8 +DETAILS + 10 +13331.616488 + 20 +13714.658217 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CC6 + 8 +DETAILS + 10 +13336.347553 + 20 +13718.655583 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CC7 + 8 +DETAILS + 10 +13341.911484 + 20 +13721.801736 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CC8 + 8 +DETAILS + 10 +13348.251922 + 20 +13724.347033 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CC9 + 8 +DETAILS + 10 +13355.312509 + 20 +13726.54183 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CCA + 8 +DETAILS + 10 +13363.036885 + 20 +13728.636486 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CCB + 8 +DETAILS + 10 +13371.36869 + 20 +13730.881356 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CCC + 8 +DETAILS + 10 +13380.201469 + 20 +13733.497589 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CCD + 8 +DETAILS + 10 +13389.228374 + 20 +13736.5895 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CCE + 8 +DETAILS + 10 +13398.092463 + 20 +13740.232197 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CCF + 8 +DETAILS + 10 +13406.436791 + 20 +13744.500784 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CD0 + 8 +DETAILS + 10 +13413.904416 + 20 +13749.470369 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CD1 + 8 +DETAILS + 10 +13420.138394 + 20 +13755.216059 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CD2 + 8 +DETAILS + 10 +13424.781781 + 20 +13761.812959 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CD3 + 8 +DETAILS + 10 +13427.477634 + 20 +13769.336176 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CD4 + 8 +DETAILS + 10 +13331.290861 + 20 +13722.335828 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1CD5 + 8 +DETAILS + 10 +13365.490606 + 20 +13726.608592 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1CD6 + 8 +DETAILS + 10 +13423.202688 + 20 +13747.972412 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1CD7 + 8 +DETAILS + 10 +13427.477634 + 20 +13769.336176 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1CD8 + 8 +DETAILS + 0 +LINE + 5 +1CD9 + 8 +0 + 62 + 0 + 10 +13312.499988 + 20 +13693.747694 + 30 +0.0 + 11 +13316.109758 + 21 +13700.0 + 31 +0.0 + 0 +LINE + 5 +1CDA + 8 +0 + 62 + 0 + 10 +13437.499955 + 20 +13693.747661 + 30 +0.0 + 11 +13433.890166 + 21 +13700.0 + 31 +0.0 + 0 +POLYLINE + 5 +1CDB + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1CDC + 8 +DETAILS + 10 +13459.882731 + 20 +13737.290529 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1CDD + 8 +DETAILS + 10 +13459.882731 + 20 +13737.290529 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CDE + 8 +DETAILS + 10 +13471.196368 + 20 +13738.062455 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CDF + 8 +DETAILS + 10 +13479.854848 + 20 +13739.059704 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CE0 + 8 +DETAILS + 10 +13486.409244 + 20 +13740.707882 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CE1 + 8 +DETAILS + 10 +13491.410624 + 20 +13743.432596 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CE2 + 8 +DETAILS + 10 +13495.41006 + 20 +13747.659453 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CE3 + 8 +DETAILS + 10 +13498.958621 + 20 +13753.814058 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CE4 + 8 +DETAILS + 10 +13502.607379 + 20 +13762.322019 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CE5 + 8 +DETAILS + 10 +13506.907403 + 20 +13773.60894 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CE6 + 8 +DETAILS + 10 +13494.082477 + 20 +13739.426884 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1CE7 + 8 +DETAILS + 10 +13506.907403 + 20 +13773.60894 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1CE8 + 8 +DETAILS + 0 +POLYLINE + 5 +1CE9 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1CEA + 8 +DETAILS + 10 +13491.945048 + 20 +13711.653945 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1CEB + 8 +DETAILS + 10 +13491.945048 + 20 +13711.653945 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CEC + 8 +DETAILS + 10 +13503.104222 + 20 +13718.60553 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CED + 8 +DETAILS + 10 +13513.887661 + 20 +13726.408325 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CEE + 8 +DETAILS + 10 +13523.919637 + 20 +13734.711832 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CEF + 8 +DETAILS + 10 +13532.824424 + 20 +13743.165552 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CF0 + 8 +DETAILS + 10 +13540.226294 + 20 +13751.418987 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CF1 + 8 +DETAILS + 10 +13545.749519 + 20 +13759.121636 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CF2 + 8 +DETAILS + 10 +13549.018374 + 20 +13765.923002 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CF3 + 8 +DETAILS + 10 +13549.657129 + 20 +13771.472586 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CF4 + 8 +DETAILS + 10 +13521.869847 + 20 +13728.745001 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1CF5 + 8 +DETAILS + 10 +13551.794558 + 20 +13758.654294 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1CF6 + 8 +DETAILS + 10 +13549.657129 + 20 +13771.472586 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1CF7 + 8 +DETAILS + 0 +POLYLINE + 5 +1CF8 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1CF9 + 8 +DETAILS + 10 +13558.207022 + 20 +13700.972063 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1CFA + 8 +DETAILS + 10 +13558.207022 + 20 +13700.972063 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CFB + 8 +DETAILS + 10 +13564.182168 + 20 +13711.412985 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CFC + 8 +DETAILS + 10 +13569.336973 + 20 +13720.408096 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CFD + 8 +DETAILS + 10 +13573.752844 + 20 +13728.113869 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CFE + 8 +DETAILS + 10 +13577.51119 + 20 +13734.686778 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CFF + 8 +DETAILS + 10 +13580.693417 + 20 +13740.283297 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1D00 + 8 +DETAILS + 10 +13583.380933 + 20 +13745.059897 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1D01 + 8 +DETAILS + 10 +13585.655147 + 20 +13749.173052 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1D02 + 8 +DETAILS + 10 +13587.597464 + 20 +13752.779237 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1D03 + 8 +DETAILS + 10 +13589.272594 + 20 +13756.022405 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1D04 + 8 +DETAILS + 10 +13590.678449 + 20 +13758.996439 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1D05 + 8 +DETAILS + 10 +13591.796243 + 20 +13761.782706 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1D06 + 8 +DETAILS + 10 +13592.60719 + 20 +13764.46257 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1D07 + 8 +DETAILS + 10 +13593.092502 + 20 +13767.117395 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1D08 + 8 +DETAILS + 10 +13593.233393 + 20 +13769.828548 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1D09 + 8 +DETAILS + 10 +13593.011077 + 20 +13772.677393 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1D0A + 8 +DETAILS + 10 +13592.406767 + 20 +13775.745295 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1D0B + 8 +DETAILS + 10 +13575.306895 + 20 +13730.881356 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1D0C + 8 +DETAILS + 10 +13590.269338 + 20 +13756.517884 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1D0D + 8 +DETAILS + 10 +13594.544284 + 20 +13767.199822 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1D0E + 8 +DETAILS + 10 +13592.406767 + 20 +13775.745295 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1D0F + 8 +DETAILS + 0 +POLYLINE + 5 +1D10 + 8 +DECKEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +28E0 + 8 +DECKEN + 10 +11555.0 + 20 +12812.5 + 30 +0.0 + 0 +VERTEX + 5 +28E1 + 8 +DECKEN + 10 +13605.0 + 20 +12812.5 + 30 +0.0 + 0 +SEQEND + 5 +28E2 + 8 +DECKEN + 0 +TEXT + 5 +1D14 + 8 +DETAILS + 10 +9225.0 + 20 +13365.0 + 30 +0.0 + 40 +87.5 + 1 +DIELUNG + 0 +TEXT + 5 +1D15 + 8 +DETAILS + 10 +9225.0 + 20 +13115.0 + 30 +0.0 + 40 +87.5 + 1 +PS-WÄDÄ + 0 +TEXT + 5 +1D16 + 8 +DETAILS + 10 +9225.0 + 20 +12865.0 + 30 +0.0 + 40 +87.5 + 1 +GIPSPUTZ + 0 +POLYLINE + 5 +1D17 + 8 +BEMASSUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +28E3 + 8 +BEMASSUNG + 10 +10030.0 + 20 +13410.0 + 30 +0.0 + 0 +VERTEX + 5 +28E4 + 8 +BEMASSUNG + 10 +11075.0 + 20 +13410.0 + 30 +0.0 + 0 +VERTEX + 5 +28E5 + 8 +BEMASSUNG + 10 +11075.0 + 20 +13745.0 + 30 +0.0 + 0 +VERTEX + 5 +28E6 + 8 +BEMASSUNG + 10 +11375.0 + 20 +13745.0 + 30 +0.0 + 0 +SEQEND + 5 +28E7 + 8 +BEMASSUNG + 0 +POLYLINE + 5 +1D1D + 8 +BEMASSUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +28E8 + 8 +BEMASSUNG + 10 +10030.0 + 20 +13170.0 + 30 +0.0 + 0 +VERTEX + 5 +28E9 + 8 +BEMASSUNG + 10 +11250.0 + 20 +13170.0 + 30 +0.0 + 0 +VERTEX + 5 +28EA + 8 +BEMASSUNG + 10 +11250.0 + 20 +13470.0 + 30 +0.0 + 0 +VERTEX + 5 +28EB + 8 +BEMASSUNG + 10 +11375.0 + 20 +13470.0 + 30 +0.0 + 0 +SEQEND + 5 +28EC + 8 +BEMASSUNG + 0 +POLYLINE + 5 +1D23 + 8 +BEMASSUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +28ED + 8 +BEMASSUNG + 10 +10035.0 + 20 +12920.0 + 30 +0.0 + 0 +VERTEX + 5 +28EE + 8 +BEMASSUNG + 10 +11265.0 + 20 +12920.0 + 30 +0.0 + 0 +VERTEX + 5 +28EF + 8 +BEMASSUNG + 10 +11265.0 + 20 +12825.0 + 30 +0.0 + 0 +VERTEX + 5 +28F0 + 8 +BEMASSUNG + 10 +11375.0 + 20 +12825.0 + 30 +0.0 + 0 +SEQEND + 5 +28F1 + 8 +BEMASSUNG + 0 +DIMENSION + 5 +1D29 + 8 +BEMASSUNG + 2 +*D4 + 10 +4130.0 + 20 +3100.0 + 30 +0.0 + 11 +3945.0 + 21 +3187.5 + 31 +0.0 + 12 +0.0 + 22 +-750.0 + 32 +0.0 + 1 +32 + 13 +3760.0 + 23 +2900.0 + 33 +0.0 + 14 +4130.0 + 24 +2900.0 + 34 +0.0 + 0 +DIMENSION + 5 +1D2A + 8 +BEMASSUNG + 2 +*D8 + 10 +5890.0 + 20 +3100.0 + 30 +0.0 + 11 +5010.0 + 21 +3187.5 + 31 +0.0 + 12 +0.0 + 22 +-750.0 + 32 +0.0 + 1 +1.62 + 13 +4130.0 + 23 +2900.0 + 33 +0.0 + 14 +5890.0 + 24 +3110.0 + 34 +0.0 + 0 +DIMENSION + 5 +1D2B + 8 +BEMASSUNG + 2 +*D11 + 10 +7195.0 + 20 +3100.0 + 30 +0.0 + 11 +6542.5 + 21 +3187.5 + 31 +0.0 + 12 +0.0 + 22 +-750.0 + 32 +0.0 + 1 +1.43 + 13 +5890.0 + 23 +3110.0 + 33 +0.0 + 14 +7195.0 + 24 +3105.0 + 34 +0.0 + 0 +DIMENSION + 5 +1D2C + 8 +BEMASSUNG + 2 +*D5 + 10 +10555.0 + 20 +3100.0 + 30 +0.0 + 11 +8875.0 + 21 +3187.5 + 31 +0.0 + 12 +0.0 + 22 +-750.0 + 32 +0.0 + 1 +3.37 + 13 +7195.0 + 23 +3105.0 + 33 +0.0 + 14 +10555.0 + 24 +3455.0 + 34 +0.0 + 0 +DIMENSION + 5 +1D2D + 8 +BEMASSUNG + 2 +*D6 + 10 +13940.0 + 20 +3100.0 + 30 +0.0 + 11 +12247.5 + 21 +3187.5 + 31 +0.0 + 12 +0.0 + 22 +-750.0 + 32 +0.0 + 1 +3.37 + 13 +10555.0 + 23 +3455.0 + 33 +0.0 + 14 +13940.0 + 24 +3615.0 + 34 +0.0 + 0 +DIMENSION + 5 +1D2E + 8 +BEMASSUNG + 2 +*D10 + 10 +15225.0 + 20 +3100.0 + 30 +0.0 + 11 +14582.5 + 21 +3187.5 + 31 +0.0 + 12 +0.0 + 22 +-750.0 + 32 +0.0 + 1 +1.43 + 13 +13940.0 + 23 +3615.0 + 33 +0.0 + 14 +15225.0 + 24 +3285.0 + 34 +0.0 + 0 +DIMENSION + 5 +1D2F + 8 +BEMASSUNG + 2 +*D9 + 10 +16985.0 + 20 +3100.0 + 30 +0.0 + 11 +16105.0 + 21 +3187.5 + 31 +0.0 + 12 +0.0 + 22 +-750.0 + 32 +0.0 + 1 +1.62 + 13 +15225.0 + 23 +3285.0 + 33 +0.0 + 14 +16985.0 + 24 +3090.0 + 34 +0.0 + 0 +DIMENSION + 5 +1D30 + 8 +BEMASSUNG + 2 +*D7 + 10 +17360.0 + 20 +3100.0 + 30 +0.0 + 11 +17172.5 + 21 +3187.5 + 31 +0.0 + 12 +0.0 + 22 +-750.0 + 32 +0.0 + 1 +32 + 13 +16985.0 + 23 +3090.0 + 33 +0.0 + 14 +17360.0 + 24 +4025.0 + 34 +0.0 + 0 +TEXT + 5 +1D31 + 8 +BEMASSUNG + 10 +6685.0 + 20 +3220.0 + 30 +0.0 + 40 +62.5 + 1 +8 + 0 +TEXT + 5 +1D32 + 8 +BEMASSUNG + 10 +9020.0 + 20 +3220.0 + 30 +0.0 + 40 +62.5 + 1 +5 + 0 +TEXT + 5 +1D33 + 8 +BEMASSUNG + 10 +12400.0 + 20 +3220.0 + 30 +0.0 + 40 +62.5 + 1 +5 + 0 +TEXT + 5 +1D34 + 8 +BEMASSUNG + 10 +14715.0 + 20 +3220.0 + 30 +0.0 + 40 +62.5 + 1 +8 + 0 +DIMENSION + 5 +1D35 + 8 +BEMASSUNG + 2 +*D12 + 10 +4490.0 + 20 +2750.0 + 30 +0.0 + 11 +4310.0 + 21 +2837.5 + 31 +0.0 + 12 +0.0 + 22 +-750.0 + 32 +0.0 + 1 +36 + 13 +4130.0 + 23 +1520.0 + 33 +0.0 + 14 +4490.0 + 24 +1520.0 + 34 +0.0 + 0 +DIMENSION + 5 +1D36 + 8 +BEMASSUNG + 2 +*D13 + 10 +9000.0 + 20 +2750.0 + 30 +0.0 + 11 +6745.0 + 21 +2837.5 + 31 +0.0 + 12 +0.0 + 22 +-750.0 + 32 +0.0 + 1 +4.51 + 13 +4490.0 + 23 +1520.0 + 33 +0.0 + 14 +9000.0 + 24 +1875.0 + 34 +0.0 + 0 +DIMENSION + 5 +1D37 + 8 +BEMASSUNG + 2 +*D14 + 10 +9365.0 + 20 +2750.0 + 30 +0.0 + 11 +9182.5 + 21 +2837.5 + 31 +0.0 + 12 +0.0 + 22 +-750.0 + 32 +0.0 + 1 +36 + 13 +9000.0 + 23 +1875.0 + 33 +0.0 + 14 +9365.0 + 24 +2425.0 + 34 +0.0 + 0 +DIMENSION + 5 +1D38 + 8 +BEMASSUNG + 2 +*D15 + 10 +11745.0 + 20 +2750.0 + 30 +0.0 + 11 +10555.0 + 21 +2837.5 + 31 +0.0 + 12 +0.0 + 22 +-750.0 + 32 +0.0 + 1 +2.38 + 13 +9365.0 + 23 +2425.0 + 33 +0.0 + 14 +11745.0 + 24 +2870.0 + 34 +0.0 + 0 +DIMENSION + 5 +1D39 + 8 +BEMASSUNG + 2 +*D16 + 10 +12115.0 + 20 +2750.0 + 30 +0.0 + 11 +11930.0 + 21 +2837.5 + 31 +0.0 + 12 +0.0 + 22 +-750.0 + 32 +0.0 + 1 +36 + 13 +11745.0 + 23 +2870.0 + 33 +0.0 + 14 +12115.0 + 24 +2765.0 + 34 +0.0 + 0 +DIMENSION + 5 +1D3A + 8 +BEMASSUNG + 2 +*D17 + 10 +16630.0 + 20 +2750.0 + 30 +0.0 + 11 +14372.5 + 21 +2837.5 + 31 +0.0 + 12 +0.0 + 22 +-750.0 + 32 +0.0 + 1 +4.51 + 13 +12115.0 + 23 +2765.0 + 33 +0.0 + 14 +16630.0 + 24 +2925.0 + 34 +0.0 + 0 +DIMENSION + 5 +1D3B + 8 +BEMASSUNG + 2 +*D18 + 10 +16985.0 + 20 +2750.0 + 30 +0.0 + 11 +16807.5 + 21 +2837.5 + 31 +0.0 + 12 +0.0 + 22 +-750.0 + 32 +0.0 + 1 +36 + 13 +16630.0 + 23 +2925.0 + 33 +0.0 + 14 +16985.0 + 24 +2775.0 + 34 +0.0 + 0 +TEXT + 5 +1D3C + 8 +BEMASSUNG + 10 +12025.0 + 20 +2850.0 + 30 +0.0 + 40 +62.5 + 1 +5 + 0 +TEXT + 5 +1D3D + 8 +BEMASSUNG + 10 +16900.0 + 20 +2850.0 + 30 +0.0 + 40 +62.5 + 1 +5 + 0 +TEXT + 5 +1D3E + 8 +BEMASSUNG + 10 +10700.0 + 20 +2850.0 + 30 +0.0 + 40 +62.5 + 1 +5 + 0 +TEXT + 5 +1D3F + 8 +BEMASSUNG + 10 +9270.0 + 20 +2850.0 + 30 +0.0 + 40 +62.5 + 1 +5 + 0 +TEXT + 5 +1D40 + 8 +BEMASSUNG + 10 +4395.0 + 20 +2850.0 + 30 +0.0 + 40 +62.5 + 1 +5 + 0 +DIMENSION + 5 +1D41 + 8 +BEMASSUNG + 2 +*D19 + 10 +16985.0 + 20 +2400.0 + 30 +0.0 + 11 +10557.5 + 21 +2487.5 + 31 +0.0 + 12 +0.0 + 22 +-750.0 + 32 +0.0 + 1 +12.86 + 13 +4130.0 + 23 +2140.0 + 33 +0.0 + 14 +16985.0 + 24 +2140.0 + 34 +0.0 + 0 +TEXT + 5 +1D42 + 8 +BEMASSUNG + 10 +10725.0 + 20 +2505.0 + 30 +0.0 + 40 +62.5 + 1 +5 + 0 +DIMENSION + 5 +1D43 + 8 +LEGENDE-35 + 2 +*D21 + 10 +18245.0 + 20 +7545.0 + 30 +0.0 + 11 +18157.5 + 21 +6022.5 + 31 +0.0 + 12 +15870.0 + 22 +-755.0 + 32 +0.0 + 1 +3.00 + 13 +17010.0 + 23 +4500.0 + 33 +0.0 + 14 +17010.0 + 24 +7545.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +1D44 + 8 +LEGENDE-35 + 2 +*D22 + 10 +18245.0 + 20 +9850.0 + 30 +0.0 + 11 +18157.5 + 21 +8697.5 + 31 +0.0 + 12 +15870.0 + 22 +-755.0 + 32 +0.0 + 1 +2.36 + 13 +17010.0 + 23 +7545.0 + 33 +0.0 + 14 +26430.0 + 24 +9850.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +1D45 + 8 +LEGENDE-35 + 2 +*D23 + 10 +8740.0 + 20 +9755.0 + 30 +0.0 + 11 +7995.0 + 21 +9842.5 + 31 +0.0 + 12 +0.0 + 22 +-750.0 + 32 +0.0 + 1 +1.49 + 13 +7250.0 + 23 +9445.0 + 33 +0.0 + 14 +8740.0 + 24 +9445.0 + 34 +0.0 + 0 +DIMENSION + 5 +1D46 + 8 +LEGENDE-35 + 2 +*D24 + 10 +6932.303371 + 20 +8578.314607 + 30 +0.0 + 11 +5105.928464 + 21 +7540.014458 + 31 +0.0 + 12 +0.0 + 22 +-750.0 + 32 +0.0 + 70 + 1 + 1 +4.20 + 13 +3715.0 + 23 +5805.0 + 33 +0.0 + 14 +7275.0 + 24 +8030.0 + 34 +0.0 + 0 +DIMENSION + 5 +1D47 + 8 +LEGENDE-35 + 2 +*D25 + 10 +14757.430766 + 20 +8499.293525 + 30 +0.0 + 11 +12936.243124 + 21 +9738.532433 + 31 +0.0 + 12 +0.0 + 22 +-750.0 + 32 +0.0 + 70 + 1 + 1 +4.40 + 13 +10555.0 + 23 +10080.0 + 33 +0.0 + 14 +14290.0 + 24 +7750.0 + 34 +0.0 + 0 +DIMENSION + 5 +1D48 + 8 +LEGENDE-35 + 2 +*D26 + 10 +17355.726841 + 20 +7900.921615 + 30 +0.0 + 11 +15616.08127 + 21 +8145.568376 + 31 +0.0 + 12 +0.0 + 22 +-750.0 + 32 +0.0 + 70 + 1 + 1 +3.51 + 13 +13830.0 + 23 +7875.0 + 33 +0.0 + 14 +17325.0 + 24 +7560.0 + 34 +0.0 + 0 +INSERT + 5 +1D49 + 8 +0 + 2 +HOEHE + 10 +9865.0 + 20 +4720.0 + 30 +0.0 + 0 +INSERT + 5 +1D4A + 8 +0 + 2 +HOEHE + 10 +9865.0 + 20 +7520.0 + 30 +0.0 + 0 +INSERT + 5 +1D4B + 8 +0 + 2 +HOEHE + 10 +9875.0 + 20 +9855.0 + 30 +0.0 + 0 +DIMENSION + 5 +1D4C + 8 +0 + 2 +*D28 + 10 +17895.0 + 20 +5740.0 + 30 +0.0 + 11 +17807.5 + 21 +5120.0 + 31 +0.0 + 12 +-230.0 + 22 +0.0 + 32 +0.0 + 1 +1.21 + 13 +16740.0 + 23 +4500.0 + 33 +0.0 + 14 +16740.0 + 24 +5740.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +1D4D + 8 +0 + 2 +*D29 + 10 +17895.0 + 20 +5950.0 + 30 +0.0 + 11 +17807.5 + 21 +5845.0 + 31 +0.0 + 12 +-230.0 + 22 +0.0 + 32 +0.0 + 1 +18 + 13 +16740.0 + 23 +5740.0 + 33 +0.0 + 14 +17890.0 + 24 +5950.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +1D4E + 8 +0 + 2 +*D30 + 10 +17895.0 + 20 +7360.0 + 30 +0.0 + 11 +17807.5 + 21 +6655.0 + 31 +0.0 + 12 +-230.0 + 22 +0.0 + 32 +0.0 + 1 +1.40 + 13 +17890.0 + 23 +5950.0 + 33 +0.0 + 14 +16625.0 + 24 +7360.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +1D4F + 8 +0 + 2 +*D34 + 10 +14290.0 + 20 +12855.0 + 30 +0.0 + 11 +14202.5 + 21 +12725.0 + 31 +0.0 + 70 + 128 + 1 +1 + 13 +13590.0 + 23 +12815.0 + 33 +0.0 + 14 +13590.0 + 24 +12855.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +1D50 + 8 +0 + 2 +*D31 + 10 +14290.0 + 20 +13260.0 + 30 +0.0 + 11 +14202.5 + 21 +13057.5 + 31 +0.0 + 1 +16 + 13 +13590.0 + 23 +12855.0 + 33 +0.0 + 14 +13560.0 + 24 +13260.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +1D51 + 8 +0 + 2 +*D32 + 10 +14290.0 + 20 +13700.0 + 30 +0.0 + 11 +14202.5 + 21 +13480.0 + 31 +0.0 + 1 +18 + 13 +13560.0 + 23 +13260.0 + 33 +0.0 + 14 +13580.0 + 24 +13700.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +1D52 + 8 +0 + 2 +*D33 + 10 +14290.0 + 20 +13775.0 + 30 +0.0 + 11 +14202.5 + 21 +13835.0 + 31 +0.0 + 70 + 128 + 1 +3 + 13 +13580.0 + 23 +13700.0 + 33 +0.0 + 14 +13590.0 + 24 +13775.0 + 34 +0.0 + 50 +90.0 + 0 +TEXT + 5 +1D53 + 8 +0 + 10 +14185.0 + 20 +12740.0 + 30 +0.0 + 40 +62.5 + 1 +5 + 50 +90.0 + 0 +TEXT + 5 +1D54 + 8 +0 + 10 +17790.0 + 20 +5225.0 + 30 +0.0 + 40 +62.5 + 1 +5 + 50 +90.0 + 0 +POLYLINE + 5 +1D55 + 8 +BEMASSUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +28F2 + 8 +BEMASSUNG + 10 +9760.0 + 20 +9855.0 + 30 +0.0 + 0 +VERTEX + 5 +28F3 + 8 +BEMASSUNG + 10 +10120.0 + 20 +9855.0 + 30 +0.0 + 0 +SEQEND + 5 +28F4 + 8 +BEMASSUNG + 0 +TEXT + 5 +1D59 + 8 +BEMASSUNG + 10 +9790.0 + 20 +9960.0 + 30 +0.0 + 40 +87.5 + 1 ++5.36 + 0 +TEXT + 5 +1D5A + 8 +BEMASSUNG + 10 +9790.0 + 20 +7640.0 + 30 +0.0 + 40 +87.5 + 1 ++3.00 + 0 +TEXT + 5 +1D5B + 8 +BEMASSUNG + 10 +9790.0 + 20 +4830.0 + 30 +0.0 + 40 +87.5 + 1 ++0.18 + 0 +POLYLINE + 5 +1D5C + 8 +BEMASSUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +28F5 + 8 +BEMASSUNG + 10 +18345.0 + 20 +4500.0 + 30 +0.0 + 0 +VERTEX + 5 +28F6 + 8 +BEMASSUNG + 10 +19330.0 + 20 +4500.0 + 30 +0.0 + 0 +SEQEND + 5 +28F7 + 8 +BEMASSUNG + 0 +INSERT + 5 +1D60 + 8 +BEMASSUNG + 2 +DREIECK + 10 +19145.0 + 20 +4500.0 + 30 +0.0 + 0 +TEXT + 5 +1D61 + 8 +BEMASSUNG + 10 +19050.0 + 20 +4620.0 + 30 +0.0 + 40 +87.5 + 1 +%%p0.00 + 0 +CIRCLE + 5 +1D62 + 8 +BEMASSUNG + 10 +6130.0 + 20 +6420.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1D63 + 8 +BEMASSUNG + 10 +9200.0 + 20 +8505.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1D64 + 8 +BEMASSUNG + 10 +7910.0 + 20 +7750.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1D65 + 8 +BEMASSUNG + 10 +7910.0 + 20 +7060.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1D66 + 8 +BEMASSUNG + 10 +8520.0 + 20 +7750.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1D67 + 8 +BEMASSUNG + 10 +7910.0 + 20 +6600.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1D68 + 8 +BEMASSUNG + 10 +6270.0 + 20 +7750.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1D69 + 8 +BEMASSUNG + 10 +7910.0 + 20 +5145.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1D6A + 8 +BEMASSUNG + 10 +8350.0 + 20 +5145.0 + 30 +0.0 + 40 +125.0 + 0 +POLYLINE + 5 +1D6B + 8 +BEMASSUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +28F8 + 8 +BEMASSUNG + 10 +8350.0 + 20 +5020.0 + 30 +0.0 + 0 +VERTEX + 5 +28F9 + 8 +BEMASSUNG + 10 +8350.0 + 20 +4710.0 + 30 +0.0 + 0 +SEQEND + 5 +28FA + 8 +BEMASSUNG + 0 +POLYLINE + 5 +1D6F + 8 +BEMASSUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +28FB + 8 +BEMASSUNG + 10 +7785.0 + 20 +5140.0 + 30 +0.0 + 0 +VERTEX + 5 +28FC + 8 +BEMASSUNG + 10 +7280.0 + 20 +5140.0 + 30 +0.0 + 0 +SEQEND + 5 +28FD + 8 +BEMASSUNG + 0 +POLYLINE + 5 +1D73 + 8 +BEMASSUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +28FE + 8 +BEMASSUNG + 10 +7785.0 + 20 +6600.0 + 30 +0.0 + 0 +VERTEX + 5 +28FF + 8 +BEMASSUNG + 10 +7330.0 + 20 +6675.0 + 30 +0.0 + 0 +SEQEND + 5 +2900 + 8 +BEMASSUNG + 0 +POLYLINE + 5 +1D77 + 8 +BEMASSUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2901 + 8 +BEMASSUNG + 10 +7785.0 + 20 +7060.0 + 30 +0.0 + 0 +VERTEX + 5 +2902 + 8 +BEMASSUNG + 10 +7145.0 + 20 +7065.0 + 30 +0.0 + 0 +VERTEX + 5 +2903 + 8 +BEMASSUNG + 10 +7145.0 + 20 +7390.0 + 30 +0.0 + 0 +SEQEND + 5 +2904 + 8 +BEMASSUNG + 0 +POLYLINE + 5 +1D7C + 8 +BEMASSUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2905 + 8 +BEMASSUNG + 10 +7215.0 + 20 +7065.0 + 30 +0.0 + 0 +VERTEX + 5 +2906 + 8 +BEMASSUNG + 10 +7215.0 + 20 +7385.0 + 30 +0.0 + 0 +SEQEND + 5 +2907 + 8 +BEMASSUNG + 0 +POLYLINE + 5 +1D80 + 8 +BEMASSUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2908 + 8 +BEMASSUNG + 10 +7785.0 + 20 +7740.0 + 30 +0.0 + 0 +VERTEX + 5 +2909 + 8 +BEMASSUNG + 10 +7285.0 + 20 +7655.0 + 30 +0.0 + 0 +SEQEND + 5 +290A + 8 +BEMASSUNG + 0 +POLYLINE + 5 +1D84 + 8 +BEMASSUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +290B + 8 +BEMASSUNG + 10 +8450.0 + 20 +7650.0 + 30 +0.0 + 0 +VERTEX + 5 +290C + 8 +BEMASSUNG + 10 +8405.0 + 20 +7515.0 + 30 +0.0 + 0 +SEQEND + 5 +290D + 8 +BEMASSUNG + 0 +POLYLINE + 5 +1D88 + 8 +BEMASSUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +290E + 8 +BEMASSUNG + 10 +9105.0 + 20 +8585.0 + 30 +0.0 + 0 +VERTEX + 5 +290F + 8 +BEMASSUNG + 10 +8875.0 + 20 +8815.0 + 30 +0.0 + 0 +SEQEND + 5 +2910 + 8 +BEMASSUNG + 0 +POLYLINE + 5 +1D8C + 8 +BEMASSUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2911 + 8 +BEMASSUNG + 10 +6350.0 + 20 +7655.0 + 30 +0.0 + 0 +VERTEX + 5 +2912 + 8 +BEMASSUNG + 10 +6480.0 + 20 +7445.0 + 30 +0.0 + 0 +SEQEND + 5 +2913 + 8 +BEMASSUNG + 0 +POLYLINE + 5 +1D90 + 8 +BEMASSUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2914 + 8 +BEMASSUNG + 10 +6040.0 + 20 +6505.0 + 30 +0.0 + 0 +VERTEX + 5 +2915 + 8 +BEMASSUNG + 10 +5680.0 + 20 +6820.0 + 30 +0.0 + 0 +SEQEND + 5 +2916 + 8 +BEMASSUNG + 0 +CIRCLE + 5 +1D94 + 8 +BEMASSUNG + 10 +5020.0 + 20 +5845.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1D95 + 8 +BEMASSUNG + 10 +4000.0 + 20 +6410.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1D96 + 8 +BEMASSUNG + 10 +6810.0 + 20 +5445.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1D97 + 8 +BEMASSUNG + 10 +5785.0 + 20 +5210.0 + 30 +0.0 + 40 +125.0 + 0 +POLYLINE + 5 +1D98 + 8 +BEMASSUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2917 + 8 +BEMASSUNG + 10 +4101.10061 + 20 +6337.02211 + 30 +0.0 + 0 +VERTEX + 5 +2918 + 8 +BEMASSUNG + 10 +4205.0 + 20 +5995.0 + 30 +0.0 + 0 +SEQEND + 5 +2919 + 8 +BEMASSUNG + 0 +POLYLINE + 5 +1D9C + 8 +BEMASSUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +291A + 8 +BEMASSUNG + 10 +4895.0 + 20 +5845.0 + 30 +0.0 + 0 +VERTEX + 5 +291B + 8 +BEMASSUNG + 10 +4390.0 + 20 +5845.0 + 30 +0.0 + 0 +SEQEND + 5 +291C + 8 +BEMASSUNG + 0 +POLYLINE + 5 +1DA0 + 8 +BEMASSUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +291D + 8 +BEMASSUNG + 10 +5785.0 + 20 +5085.0 + 30 +0.0 + 0 +VERTEX + 5 +291E + 8 +BEMASSUNG + 10 +5890.0 + 20 +4820.0 + 30 +0.0 + 0 +SEQEND + 5 +291F + 8 +BEMASSUNG + 0 +POLYLINE + 5 +1DA4 + 8 +BEMASSUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2920 + 8 +BEMASSUNG + 10 +6685.0 + 20 +5445.0 + 30 +0.0 + 0 +VERTEX + 5 +2921 + 8 +BEMASSUNG + 10 +6435.0 + 20 +5445.0 + 30 +0.0 + 0 +SEQEND + 5 +2922 + 8 +BEMASSUNG + 0 +CIRCLE + 5 +1DA8 + 8 +BEMASSUNG + 10 +8980.0 + 20 +5145.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1DA9 + 8 +BEMASSUNG + 10 +9395.0 + 20 +5145.0 + 30 +0.0 + 40 +125.0 + 0 +POLYLINE + 5 +1DAA + 8 +BEMASSUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2923 + 8 +BEMASSUNG + 10 +8975.0 + 20 +5020.0 + 30 +0.0 + 0 +VERTEX + 5 +2924 + 8 +BEMASSUNG + 10 +8975.0 + 20 +4515.0 + 30 +0.0 + 0 +SEQEND + 5 +2925 + 8 +BEMASSUNG + 0 +POLYLINE + 5 +1DAE + 8 +BEMASSUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2926 + 8 +BEMASSUNG + 10 +9400.0 + 20 +5020.0 + 30 +0.0 + 0 +VERTEX + 5 +2927 + 8 +BEMASSUNG + 10 +9400.0 + 20 +4420.0 + 30 +0.0 + 0 +SEQEND + 5 +2928 + 8 +BEMASSUNG + 0 +TEXT + 5 +1DB2 + 8 +BEMASSUNG + 10 +9185.416667 + 20 +8461.25 + 30 +0.0 + 40 +87.5 + 1 +1 + 72 + 4 + 11 +9200.0 + 21 +8505.0 + 31 +0.0 + 0 +TEXT + 5 +1DB3 + 8 +BEMASSUNG + 10 +8500.833333 + 20 +7696.25 + 30 +0.0 + 40 +87.5 + 1 +3 + 72 + 4 + 11 +8530.0 + 21 +7740.0 + 31 +0.0 + 0 +TEXT + 5 +1DB4 + 8 +BEMASSUNG + 10 +7870.833333 + 20 +7716.25 + 30 +0.0 + 40 +87.5 + 1 +4 + 72 + 4 + 11 +7900.0 + 21 +7760.0 + 31 +0.0 + 0 +TEXT + 5 +1DB5 + 8 +BEMASSUNG + 10 +6105.833333 + 20 +6371.25 + 30 +0.0 + 40 +87.5 + 1 +2 + 72 + 4 + 11 +6135.0 + 21 +6415.0 + 31 +0.0 + 0 +TEXT + 5 +1DB6 + 8 +BEMASSUNG + 10 +6775.833333 + 20 +5406.25 + 30 +0.0 + 40 +87.5 + 1 +5 + 72 + 4 + 11 +6805.0 + 21 +5450.0 + 31 +0.0 + 0 +TEXT + 5 +1DB7 + 8 +BEMASSUNG + 10 +7885.833333 + 20 +5096.25 + 30 +0.0 + 40 +87.5 + 1 +6 + 72 + 4 + 11 +7915.0 + 21 +5140.0 + 31 +0.0 + 0 +TEXT + 5 +1DB8 + 8 +BEMASSUNG + 10 +5005.833333 + 20 +5791.25 + 30 +0.0 + 40 +87.5 + 1 +7 + 72 + 4 + 11 +5035.0 + 21 +5835.0 + 31 +0.0 + 0 +TEXT + 5 +1DB9 + 8 +BEMASSUNG + 10 +8315.833333 + 20 +5101.25 + 30 +0.0 + 40 +87.5 + 1 +8 + 72 + 4 + 11 +8345.0 + 21 +5145.0 + 31 +0.0 + 0 +TEXT + 5 +1DBA + 8 +LEGENDE-70 + 10 +1450.0 + 20 +13955.0 + 30 +0.0 + 40 +175.0 + 1 +LEGENDE + 0 +CIRCLE + 5 +1DBB + 8 +BEMASSUNG + 10 +1395.0 + 20 +13475.0 + 30 +0.0 + 40 +125.0 + 0 +TEXT + 5 +1DBC + 8 +LEGENDE-35 + 10 +1380.416667 + 20 +13426.25 + 30 +0.0 + 40 +87.5 + 1 +1 + 72 + 4 + 11 +1395.0 + 21 +13470.0 + 31 +0.0 + 0 +CIRCLE + 5 +1DBD + 8 +BEMASSUNG + 10 +1395.0 + 20 +13185.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1DBE + 8 +BEMASSUNG + 10 +1395.0 + 20 +12895.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1DBF + 8 +BEMASSUNG + 10 +1395.0 + 20 +12605.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1DC0 + 8 +BEMASSUNG + 10 +1395.0 + 20 +12315.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1DC1 + 8 +BEMASSUNG + 10 +1395.0 + 20 +12025.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1DC2 + 8 +BEMASSUNG + 10 +1395.0 + 20 +11735.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1DC3 + 8 +BEMASSUNG + 10 +1395.0 + 20 +11445.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1DC4 + 8 +BEMASSUNG + 10 +1395.0 + 20 +11155.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1DC5 + 8 +BEMASSUNG + 10 +1395.0 + 20 +10865.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1DC6 + 8 +BEMASSUNG + 10 +1395.0 + 20 +10575.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1DC7 + 8 +BEMASSUNG + 10 +1395.0 + 20 +10285.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1DC8 + 8 +BEMASSUNG + 10 +1395.0 + 20 +9995.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1DC9 + 8 +BEMASSUNG + 10 +1395.0 + 20 +9705.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1DCA + 8 +BEMASSUNG + 10 +1395.0 + 20 +9415.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1DCB + 8 +BEMASSUNG + 10 +1395.0 + 20 +9125.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1DCC + 8 +BEMASSUNG + 10 +1395.0 + 20 +8835.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1DCD + 8 +BEMASSUNG + 10 +1395.0 + 20 +8545.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1DCE + 8 +BEMASSUNG + 10 +1395.0 + 20 +8255.0 + 30 +0.0 + 40 +125.0 + 0 +TEXT + 5 +1DCF + 8 +LEGENDE-35 + 10 +1355.833333 + 20 +13146.25 + 30 +0.0 + 40 +87.5 + 1 +2 + 72 + 4 + 11 +1385.0 + 21 +13190.0 + 31 +0.0 + 0 +TEXT + 5 +1DD0 + 8 +LEGENDE-35 + 10 +1365.833333 + 20 +12856.25 + 30 +0.0 + 40 +87.5 + 1 +3 + 72 + 4 + 11 +1395.0 + 21 +12900.0 + 31 +0.0 + 0 +TEXT + 5 +1DD1 + 8 +LEGENDE-35 + 10 +1355.833333 + 20 +12556.25 + 30 +0.0 + 40 +87.5 + 1 +4 + 72 + 4 + 11 +1385.0 + 21 +12600.0 + 31 +0.0 + 0 +TEXT + 5 +1DD2 + 8 +LEGENDE-35 + 10 +1370.833333 + 20 +12271.25 + 30 +0.0 + 40 +87.5 + 1 +5 + 72 + 4 + 11 +1400.0 + 21 +12315.0 + 31 +0.0 + 0 +TEXT + 5 +1DD3 + 8 +LEGENDE-35 + 10 +1375.833333 + 20 +11996.25 + 30 +0.0 + 40 +87.5 + 1 +6 + 72 + 4 + 11 +1405.0 + 21 +12040.0 + 31 +0.0 + 0 +TEXT + 5 +1DD4 + 8 +LEGENDE-35 + 10 +1365.833333 + 20 +11701.25 + 30 +0.0 + 40 +87.5 + 1 +7 + 72 + 4 + 11 +1395.0 + 21 +11745.0 + 31 +0.0 + 0 +TEXT + 5 +1DD5 + 8 +LEGENDE-35 + 10 +1365.833333 + 20 +11401.25 + 30 +0.0 + 40 +87.5 + 1 +8 + 72 + 4 + 11 +1395.0 + 21 +11445.0 + 31 +0.0 + 0 +TEXT + 5 +1DD6 + 8 +LEGENDE-35 + 10 +1360.833333 + 20 +11096.25 + 30 +0.0 + 40 +87.5 + 1 +9 + 72 + 4 + 11 +1390.0 + 21 +11140.0 + 31 +0.0 + 0 +TEXT + 5 +1DD7 + 8 +LEGENDE-35 + 10 +1358.958333 + 20 +10826.25 + 30 +0.0 + 40 +87.5 + 1 +10 + 72 + 4 + 11 +1410.0 + 21 +10870.0 + 31 +0.0 + 0 +TEXT + 5 +1DD8 + 8 +LEGENDE-35 + 10 +1356.25 + 20 +10531.25 + 30 +0.0 + 40 +87.5 + 1 +11 + 72 + 4 + 11 +1400.0 + 21 +10575.0 + 31 +0.0 + 0 +TEXT + 5 +1DD9 + 8 +LEGENDE-35 + 10 +1341.666667 + 20 +10221.25 + 30 +0.0 + 40 +87.5 + 1 +12 + 72 + 4 + 11 +1400.0 + 21 +10265.0 + 31 +0.0 + 0 +TEXT + 5 +1DDA + 8 +LEGENDE-35 + 10 +1331.666667 + 20 +9951.25 + 30 +0.0 + 40 +87.5 + 1 +13 + 72 + 4 + 11 +1390.0 + 21 +9995.0 + 31 +0.0 + 0 +TEXT + 5 +1DDB + 8 +LEGENDE-35 + 10 +1336.666667 + 20 +9671.25 + 30 +0.0 + 40 +87.5 + 1 +14 + 72 + 4 + 11 +1395.0 + 21 +9715.0 + 31 +0.0 + 0 +TEXT + 5 +1DDC + 8 +LEGENDE-35 + 10 +1341.666667 + 20 +9376.25 + 30 +0.0 + 40 +87.5 + 1 +15 + 72 + 4 + 11 +1400.0 + 21 +9420.0 + 31 +0.0 + 0 +TEXT + 5 +1DDD + 8 +LEGENDE-35 + 10 +1331.666667 + 20 +9061.25 + 30 +0.0 + 40 +87.5 + 1 +16 + 72 + 4 + 11 +1390.0 + 21 +9105.0 + 31 +0.0 + 0 +TEXT + 5 +1DDE + 8 +LEGENDE-35 + 10 +1336.666667 + 20 +8781.25 + 30 +0.0 + 40 +87.5 + 1 +17 + 72 + 4 + 11 +1395.0 + 21 +8825.0 + 31 +0.0 + 0 +TEXT + 5 +1DDF + 8 +LEGENDE-35 + 10 +1341.666667 + 20 +8486.25 + 30 +0.0 + 40 +87.5 + 1 +18 + 72 + 4 + 11 +1400.0 + 21 +8530.0 + 31 +0.0 + 0 +TEXT + 5 +1DE0 + 8 +LEGENDE-35 + 10 +1316.666667 + 20 +8186.25 + 30 +0.0 + 40 +87.5 + 1 +19 + 72 + 4 + 11 +1375.0 + 21 +8230.0 + 31 +0.0 + 0 +TEXT + 5 +1DE1 + 8 +LEGENDE-35 + 10 +1621.834543 + 20 +13421.828626 + 30 +0.0 + 40 +87.5 + 1 +POS 2 + 72 + 4 + 11 +1826.00121 + 21 +13465.578626 + 31 +0.0 + 0 +TEXT + 5 +1DE2 + 8 +LEGENDE-35 + 10 +1621.988991 + 20 +13131.25 + 30 +0.0 + 40 +87.5 + 1 +POS 1 + 72 + 4 + 11 +1811.572324 + 21 +13175.0 + 31 +0.0 + 0 +TEXT + 5 +1DE3 + 8 +LEGENDE-35 + 10 +1621.666667 + 20 +12841.25 + 30 +0.0 + 40 +87.5 + 1 +POS 16 + 72 + 4 + 11 +1855.0 + 21 +12885.0 + 31 +0.0 + 0 +TEXT + 5 +1DE4 + 8 +LEGENDE-35 + 10 +1626.278865 + 20 +12551.25 + 30 +0.0 + 40 +87.5 + 1 +POS 8 + 72 + 4 + 11 +1830.445532 + 21 +12595.0 + 31 +0.0 + 0 +TEXT + 5 +1DE5 + 8 +LEGENDE-35 + 10 +1621.666667 + 20 +12261.25 + 30 +0.0 + 40 +87.5 + 1 +POS 17 + 72 + 4 + 11 +1855.0 + 21 +12305.0 + 31 +0.0 + 0 +TEXT + 5 +1DE6 + 8 +LEGENDE-35 + 10 +1621.666667 + 20 +11971.25 + 30 +0.0 + 40 +87.5 + 1 +POS 13 + 72 + 4 + 11 +1855.0 + 21 +12015.0 + 31 +0.0 + 0 +TEXT + 5 +1DE7 + 8 +LEGENDE-35 + 10 +1622.282372 + 20 +11681.720375 + 30 +0.0 + 40 +87.5 + 1 +POS 10 + 72 + 4 + 11 +1848.324039 + 21 +11725.470375 + 31 +0.0 + 0 +TEXT + 5 +1DE8 + 8 +LEGENDE-35 + 10 +1621.733705 + 20 +11391.25 + 30 +0.0 + 40 +87.5 + 1 +POS 24 + 72 + 4 + 11 +1869.650372 + 21 +11435.0 + 31 +0.0 + 0 +TEXT + 5 +1DE9 + 8 +LEGENDE-35 + 10 +1621.666667 + 20 +11101.25 + 30 +0.0 + 40 +87.5 + 1 +POS 12 + 72 + 4 + 11 +1855.0 + 21 +11145.0 + 31 +0.0 + 0 +TEXT + 5 +1DEA + 8 +LEGENDE-35 + 10 +1621.988991 + 20 +10811.25 + 30 +0.0 + 40 +87.5 + 1 +POS 7 + 72 + 4 + 11 +1826.155657 + 21 +10855.0 + 31 +0.0 + 0 +TEXT + 5 +1DEB + 8 +LEGENDE-35 + 10 +1622.561615 + 20 +10520.230592 + 30 +0.0 + 40 +87.5 + 1 +POS 20 + 72 + 4 + 11 +1863.186615 + 21 +10563.980592 + 31 +0.0 + 0 +TEXT + 5 +1DEC + 8 +LEGENDE-35 + 10 +1621.666667 + 20 +10231.25 + 30 +0.0 + 40 +87.5 + 1 +POS 21 + 72 + 4 + 11 +1855.0 + 21 +10275.0 + 31 +0.0 + 0 +TEXT + 5 +1DED + 8 +LEGENDE-35 + 10 +1623.060305 + 20 +9932.919087 + 30 +0.0 + 40 +87.5 + 1 +POS 22 + 72 + 4 + 11 +1870.976972 + 21 +9976.669087 + 31 +0.0 + 0 +CIRCLE + 5 +1DEE + 8 +BEMASSUNG + 10 +9405.0 + 20 +6665.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1DEF + 8 +BEMASSUNG + 10 +11240.0 + 20 +6665.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1DF0 + 8 +BEMASSUNG + 10 +11240.0 + 20 +5145.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1DF1 + 8 +BEMASSUNG + 10 +15760.0 + 20 +7130.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1DF2 + 8 +BEMASSUNG + 10 +17415.0 + 20 +7115.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1DF3 + 8 +BEMASSUNG + 10 +17415.0 + 20 +6280.0 + 30 +0.0 + 40 +125.0 + 0 +POLYLINE + 5 +1DF4 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2929 + 8 +LEGENDE-35 + 10 +15760.0 + 20 +7255.0 + 30 +0.0 + 0 +VERTEX + 5 +292A + 8 +LEGENDE-35 + 10 +15760.0 + 20 +7560.0 + 30 +0.0 + 0 +SEQEND + 5 +292B + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +1DF8 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +292C + 8 +LEGENDE-35 + 10 +17326.525084 + 20 +7203.265264 + 30 +0.0 + 0 +VERTEX + 5 +292D + 8 +LEGENDE-35 + 10 +16855.0 + 20 +7380.0 + 30 +0.0 + 0 +SEQEND + 5 +292E + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +1DFC + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +292F + 8 +LEGENDE-35 + 10 +17290.071118 + 20 +6280.793494 + 30 +0.0 + 0 +VERTEX + 5 +2930 + 8 +LEGENDE-35 + 10 +16860.21552 + 20 +6280.793494 + 30 +0.0 + 0 +SEQEND + 5 +2931 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +1E00 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2932 + 8 +LEGENDE-35 + 10 +11114.725311 + 20 +6665.664001 + 30 +0.0 + 0 +VERTEX + 5 +2933 + 8 +LEGENDE-35 + 10 +10638.838913 + 20 +6665.664001 + 30 +0.0 + 0 +SEQEND + 5 +2934 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +1E04 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2935 + 8 +LEGENDE-35 + 10 +11151.552386 + 20 +5056.67299 + 30 +0.0 + 0 +VERTEX + 5 +2936 + 8 +LEGENDE-35 + 10 +10663.322645 + 20 +4809.171305 + 30 +0.0 + 0 +SEQEND + 5 +2937 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +1E08 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2938 + 8 +LEGENDE-35 + 10 +9280.134358 + 20 +6665.854545 + 30 +0.0 + 0 +VERTEX + 5 +2939 + 8 +LEGENDE-35 + 10 +8740.758683 + 20 +6665.854545 + 30 +0.0 + 0 +SEQEND + 5 +293A + 8 +LEGENDE-35 + 0 +CIRCLE + 5 +1E0C + 8 +BEMASSUNG + 10 +10184.280346 + 20 +9332.034676 + 30 +0.0 + 40 +125.0 + 0 +POLYLINE + 5 +1E0D + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +293B + 8 +LEGENDE-35 + 10 +10257.568146 + 20 +9433.283077 + 30 +0.0 + 0 +VERTEX + 5 +293C + 8 +LEGENDE-35 + 10 +10475.477384 + 20 +9660.984177 + 30 +0.0 + 0 +SEQEND + 5 +293D + 8 +LEGENDE-35 + 0 +CIRCLE + 5 +1E11 + 8 +BEMASSUNG + 10 +5020.0 + 20 +5264.7418 + 30 +0.0 + 40 +125.0 + 0 +POLYLINE + 5 +1E12 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +293E + 8 +LEGENDE-35 + 10 +4894.359634 + 20 +5258.46652 + 30 +0.0 + 0 +VERTEX + 5 +293F + 8 +LEGENDE-35 + 10 +4485.394725 + 20 +5258.46652 + 30 +0.0 + 0 +SEQEND + 5 +2940 + 8 +LEGENDE-35 + 0 +TEXT + 5 +1E16 + 8 +LEGENDE-35 + 10 +11207.07242 + 20 +6614.037448 + 30 +0.0 + 40 +87.5 + 1 +9 + 72 + 4 + 11 +11236.239087 + 21 +6657.787448 + 31 +0.0 + 0 +TEXT + 5 +1E17 + 8 +LEGENDE-35 + 10 +10130.690719 + 20 +9283.383852 + 30 +0.0 + 40 +87.5 + 1 +10 + 72 + 4 + 11 +10181.732386 + 21 +9327.133852 + 31 +0.0 + 0 +TEXT + 5 +1E18 + 8 +LEGENDE-35 + 10 +15721.926243 + 20 +7083.643251 + 30 +0.0 + 40 +87.5 + 1 +11 + 72 + 4 + 11 +15765.676243 + 21 +7127.393251 + 31 +0.0 + 0 +TEXT + 5 +1E19 + 8 +LEGENDE-35 + 10 +17347.015724 + 20 +7067.763137 + 30 +0.0 + 40 +87.5 + 1 +12 + 72 + 4 + 11 +17405.349058 + 21 +7111.513137 + 31 +0.0 + 0 +TEXT + 5 +1E1A + 8 +LEGENDE-35 + 10 +17366.081614 + 20 +6235.646893 + 30 +0.0 + 40 +87.5 + 1 +13 + 72 + 4 + 11 +17424.414948 + 21 +6279.396893 + 31 +0.0 + 0 +TEXT + 5 +1E1B + 8 +LEGENDE-35 + 10 +9340.82076 + 20 +6613.831037 + 30 +0.0 + 40 +87.5 + 1 +14 + 72 + 4 + 11 +9399.154093 + 21 +6657.581037 + 31 +0.0 + 0 +CIRCLE + 5 +1E1C + 8 +BEMASSUNG + 10 +15605.0 + 20 +5145.0 + 30 +0.0 + 40 +125.0 + 0 +POLYLINE + 5 +1E1D + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2941 + 8 +LEGENDE-35 + 10 +15556.912309 + 20 +5029.691846 + 30 +0.0 + 0 +VERTEX + 5 +2942 + 8 +LEGENDE-35 + 10 +15520.0 + 20 +4750.0 + 30 +0.0 + 0 +SEQEND + 5 +2943 + 8 +LEGENDE-35 + 0 +TEXT + 5 +1E21 + 8 +LEGENDE-35 + 10 +4958.096108 + 20 +5218.924713 + 30 +0.0 + 40 +87.5 + 1 +15 + 72 + 4 + 11 +5016.429441 + 21 +5262.674713 + 31 +0.0 + 0 +TEXT + 5 +1E22 + 8 +LEGENDE-35 + 10 +8911.232818 + 20 +5104.715156 + 30 +0.0 + 40 +87.5 + 1 +16 + 72 + 4 + 11 +8969.566152 + 21 +5148.465156 + 31 +0.0 + 0 +TEXT + 5 +1E23 + 8 +LEGENDE-35 + 10 +9391.087606 + 20 +5148.088807 + 30 +0.0 + 40 +3.189831 + 1 +17 + 50 +44.985205 + 72 + 4 + 11 +9391.464211 + 21 +5150.720187 + 31 +0.0 + 0 +TEXT + 5 +1E24 + 8 +LEGENDE-35 + 10 +9341.666667 + 20 +5101.25 + 30 +0.0 + 40 +87.5 + 1 +17 + 72 + 4 + 11 +9400.0 + 21 +5145.0 + 31 +0.0 + 0 +TEXT + 5 +1E25 + 8 +LEGENDE-35 + 10 +2321.834543 + 20 +13421.828626 + 30 +0.0 + 40 +87.5 + 1 +SPARREN + 0 +TEXT + 5 +1E26 + 8 +LEGENDE-35 + 10 +2321.988991 + 20 +13131.25 + 30 +0.0 + 40 +87.5 + 1 +SPARREN + 0 +TEXT + 5 +1E27 + 8 +LEGENDE-35 + 10 +2321.666667 + 20 +12841.25 + 30 +0.0 + 40 +87.5 + 1 +ZANGE + 0 +TEXT + 5 +1E28 + 8 +LEGENDE-35 + 10 +2326.278865 + 20 +12551.25 + 30 +0.0 + 40 +87.5 + 1 +MITTELPFETTE + 0 +TEXT + 5 +1E29 + 8 +LEGENDE-35 + 10 +2321.666667 + 20 +12261.25 + 30 +0.0 + 40 +87.5 + 1 +STREBE + 0 +TEXT + 5 +1E2A + 8 +LEGENDE-35 + 10 +2321.666667 + 20 +11971.25 + 30 +0.0 + 40 +87.5 + 1 +STIEL + 0 +TEXT + 5 +1E2B + 8 +LEGENDE-35 + 10 +2322.282372 + 20 +11681.720375 + 30 +0.0 + 40 +87.5 + 1 +FUSSPFETTE + 0 +TEXT + 5 +1E2C + 8 +LEGENDE-35 + 10 +2321.733705 + 20 +11391.25 + 30 +0.0 + 40 +87.5 + 1 +FUSSCHWELLE + 0 +TEXT + 5 +1E2D + 8 +LEGENDE-35 + 10 +2321.666667 + 20 +11101.25 + 30 +0.0 + 40 +87.5 + 1 +STIEL + 0 +TEXT + 5 +1E2E + 8 +LEGENDE-35 + 10 +2321.988991 + 20 +10811.25 + 30 +0.0 + 40 +87.5 + 1 +FIRSTPFETTE + 0 +TEXT + 5 +1E2F + 8 +LEGENDE-35 + 10 +2322.561615 + 20 +10520.230592 + 30 +0.0 + 40 +87.5 + 1 +GAUBENSPARREN + 0 +TEXT + 5 +1E30 + 8 +LEGENDE-35 + 10 +2321.666667 + 20 +10231.25 + 30 +0.0 + 40 +87.5 + 1 +GAUBENSTURZ + 0 +TEXT + 5 +1E31 + 8 +LEGENDE-35 + 10 +2323.060305 + 20 +9932.919087 + 30 +0.0 + 40 +87.5 + 1 +GAUBENSTIEL + 0 +TEXT + 5 +1E32 + 8 +LEGENDE-35 + 10 +3633.834543 + 20 +13421.828626 + 30 +0.0 + 40 +87.5 + 1 +NH S10 + 0 +TEXT + 5 +1E33 + 8 +LEGENDE-35 + 10 +3633.834543 + 20 +13131.828626 + 30 +0.0 + 40 +87.5 + 1 +NH S10 + 0 +TEXT + 5 +1E34 + 8 +LEGENDE-35 + 10 +3633.834543 + 20 +12841.828626 + 30 +0.0 + 40 +87.5 + 1 +NH S10 + 0 +TEXT + 5 +1E35 + 8 +LEGENDE-35 + 10 +3633.834543 + 20 +12551.828626 + 30 +0.0 + 40 +87.5 + 1 +NH S10 + 0 +TEXT + 5 +1E36 + 8 +LEGENDE-35 + 10 +3633.834543 + 20 +12261.828626 + 30 +0.0 + 40 +87.5 + 1 +NH S10 + 0 +TEXT + 5 +1E37 + 8 +LEGENDE-35 + 10 +3633.834543 + 20 +11971.828626 + 30 +0.0 + 40 +87.5 + 1 +NH S10 + 0 +TEXT + 5 +1E38 + 8 +LEGENDE-35 + 10 +3633.834543 + 20 +11681.828626 + 30 +0.0 + 40 +87.5 + 1 +NH S10 + 0 +TEXT + 5 +1E39 + 8 +LEGENDE-35 + 10 +3633.834543 + 20 +11391.828626 + 30 +0.0 + 40 +87.5 + 1 +NH S10 + 0 +TEXT + 5 +1E3A + 8 +LEGENDE-35 + 10 +3633.834543 + 20 +11101.828626 + 30 +0.0 + 40 +87.5 + 1 +NH S10 + 0 +TEXT + 5 +1E3B + 8 +LEGENDE-35 + 10 +3633.834543 + 20 +10811.828626 + 30 +0.0 + 40 +87.5 + 1 +NH S10 + 0 +TEXT + 5 +1E3C + 8 +LEGENDE-35 + 10 +3633.834543 + 20 +10521.828626 + 30 +0.0 + 40 +87.5 + 1 +NH S10 + 0 +TEXT + 5 +1E3D + 8 +LEGENDE-35 + 10 +3633.834543 + 20 +10231.828626 + 30 +0.0 + 40 +87.5 + 1 +NH S10 + 0 +TEXT + 5 +1E3E + 8 +LEGENDE-35 + 10 +3633.834543 + 20 +9941.828626 + 30 +0.0 + 40 +87.5 + 1 +NH S10 + 0 +TEXT + 5 +1E3F + 8 +LEGENDE-35 + 10 +4233.834543 + 20 +13421.828626 + 30 +0.0 + 40 +87.5 + 1 +8/18 + 0 +TEXT + 5 +1E40 + 8 +LEGENDE-35 + 10 +4233.834543 + 20 +13131.828626 + 30 +0.0 + 40 +87.5 + 1 +8/18 + 0 +TEXT + 5 +1E41 + 8 +LEGENDE-35 + 10 +4230.0 + 20 +12835.0 + 30 +0.0 + 40 +87.5 + 1 +2x6/16 + 0 +TEXT + 5 +1E42 + 8 +LEGENDE-35 + 10 +4215.0 + 20 +12550.0 + 30 +0.0 + 40 +87.5 + 1 +24/20 + 0 +TEXT + 5 +1E43 + 8 +LEGENDE-35 + 10 +4215.0 + 20 +12260.0 + 30 +0.0 + 40 +87.5 + 1 +18/18 + 0 +TEXT + 5 +1E44 + 8 +LEGENDE-35 + 10 +4215.0 + 20 +11970.0 + 30 +0.0 + 40 +87.5 + 1 +18/20 + 0 +TEXT + 5 +1E45 + 8 +LEGENDE-35 + 10 +4215.0 + 20 +11680.0 + 30 +0.0 + 40 +87.5 + 1 +18/18 + 0 +TEXT + 5 +1E46 + 8 +LEGENDE-35 + 10 +4215.0 + 20 +11390.0 + 30 +0.0 + 40 +87.5 + 1 +18/18 + 0 +TEXT + 5 +1E47 + 8 +LEGENDE-35 + 10 +4215.0 + 20 +11100.0 + 30 +0.0 + 40 +87.5 + 1 +16/16 + 0 +TEXT + 5 +1E48 + 8 +LEGENDE-35 + 10 +4215.0 + 20 +10810.0 + 30 +0.0 + 40 +87.5 + 1 +16/26 + 0 +TEXT + 5 +1E49 + 8 +LEGENDE-35 + 10 +4215.0 + 20 +10520.0 + 30 +0.0 + 40 +87.5 + 1 +8/14 + 0 +TEXT + 5 +1E4A + 8 +LEGENDE-35 + 10 +4215.0 + 20 +10230.0 + 30 +0.0 + 40 +87.5 + 1 +10/12 + 0 +TEXT + 5 +1E4B + 8 +LEGENDE-35 + 10 +4230.0 + 20 +9925.0 + 30 +0.0 + 40 +87.5 + 1 +10/10 + 0 +TEXT + 5 +1E4C + 8 +LEGENDE-35 + 10 +1623.060305 + 20 +9642.919087 + 30 +0.0 + 40 +87.5 + 1 +SCHORNSTEIN 5 ZÜGE + 0 +TEXT + 5 +1E4D + 8 +LEGENDE-35 + 10 +1623.060305 + 20 +9352.919087 + 30 +0.0 + 40 +87.5 + 1 +MW DIN 105 Mz-20-1.8-NF + 0 +TEXT + 5 +1E4E + 8 +LEGENDE-35 + 10 +1623.060305 + 20 +9062.919087 + 30 +0.0 + 40 +87.5 + 1 +PE-FOLIE + 0 +TEXT + 5 +1E4F + 8 +LEGENDE-35 + 10 +1623.060305 + 20 +8772.919087 + 30 +0.0 + 40 +87.5 + 1 +STAHLBETONDECKE B25 ZWEIACHSIG GESPANNT + 0 +TEXT + 5 +1E50 + 8 +LEGENDE-35 + 10 +3941.666667 + 20 +6366.25 + 30 +0.0 + 40 +87.5 + 1 +18 + 72 + 4 + 11 +4000.0 + 21 +6410.0 + 31 +0.0 + 0 +TEXT + 5 +1E51 + 8 +LEGENDE-35 + 10 +6210.0 + 20 +7716.25 + 30 +0.0 + 40 +87.5 + 1 +19 + 72 + 4 + 11 +6268.333333 + 21 +7760.0 + 31 +0.0 + 0 +TEXT + 5 +1E52 + 8 +LEGENDE-35 + 10 +5709.375 + 20 +5166.25 + 30 +0.0 + 40 +87.5 + 1 +20 + 72 + 4 + 11 +5775.0 + 21 +5210.0 + 31 +0.0 + 0 +TEXT + 5 +1E53 + 8 +LEGENDE-35 + 10 +7851.666667 + 20 +7026.25 + 30 +0.0 + 40 +87.5 + 1 +21 + 72 + 4 + 11 +7910.0 + 21 +7070.0 + 31 +0.0 + 0 +TEXT + 5 +1E54 + 8 +LEGENDE-35 + 10 +7837.083333 + 20 +6571.25 + 30 +0.0 + 40 +87.5 + 1 +22 + 72 + 4 + 11 +7910.0 + 21 +6615.0 + 31 +0.0 + 0 +TEXT + 5 +1E55 + 8 +LEGENDE-35 + 10 +11167.083333 + 20 +5106.25 + 30 +0.0 + 40 +87.5 + 1 +23 + 72 + 4 + 11 +11240.0 + 21 +5150.0 + 31 +0.0 + 0 +TEXT + 5 +1E56 + 8 +LEGENDE-35 + 10 +15517.083333 + 20 +5096.25 + 30 +0.0 + 40 +87.5 + 1 +24 + 72 + 4 + 11 +15590.0 + 21 +5140.0 + 31 +0.0 + 0 +CIRCLE + 5 +1E57 + 8 +BEMASSUNG + 10 +13144.280346 + 20 +12312.034676 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1E58 + 8 +BEMASSUNG + 10 +13904.280346 + 20 +12312.034676 + 30 +0.0 + 40 +125.0 + 0 +POLYLINE + 5 +1E59 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2944 + 8 +LEGENDE-35 + 10 +13900.0 + 20 +12436.038075 + 30 +0.0 + 0 +VERTEX + 5 +2945 + 8 +LEGENDE-35 + 10 +13900.0 + 20 +13265.0 + 30 +0.0 + 0 +VERTEX + 5 +2946 + 8 +LEGENDE-35 + 10 +13525.0 + 20 +13265.0 + 30 +0.0 + 0 +SEQEND + 5 +2947 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +1E5E + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2948 + 8 +LEGENDE-35 + 10 +13145.0 + 20 +12436.644763 + 30 +0.0 + 0 +VERTEX + 5 +2949 + 8 +LEGENDE-35 + 10 +13145.0 + 20 +13000.0 + 30 +0.0 + 0 +SEQEND + 5 +294A + 8 +LEGENDE-35 + 0 +TEXT + 5 +1E62 + 8 +LEGENDE-35 + 10 +13084.403036 + 20 +12272.508045 + 30 +0.0 + 40 +87.5 + 1 +17 + 72 + 4 + 11 +13142.736369 + 21 +12316.258045 + 31 +0.0 + 0 +TEXT + 5 +1E63 + 8 +LEGENDE-35 + 10 +13847.287928 + 20 +12278.897646 + 30 +0.0 + 40 +87.5 + 1 +16 + 72 + 4 + 11 +13905.621261 + 21 +12322.647646 + 31 +0.0 + 0 +TEXT + 5 +1E64 + 8 +LEGENDE-35 + 10 +1623.060305 + 20 +8482.919087 + 30 +0.0 + 40 +87.5 + 1 +SPARRENPFETTENANKER TYP 170 / RNa 4.0x40 + 0 +TEXT + 5 +1E65 + 8 +LEGENDE-35 + 10 +1623.060305 + 20 +8192.919087 + 30 +0.0 + 40 +87.5 + 1 +PASSBOLZEN M20 + 0 +TEXT + 5 +1E66 + 8 +LEGENDE-35 + 10 +16710.0 + 20 +13421.828626 + 30 +0.0 + 40 +87.5 + 1 +LOCHBLECH + 72 + 4 + 11 +17089.166667 + 21 +13465.578626 + 31 +0.0 + 0 +TEXT + 5 +1E67 + 8 +LEGENDE-70 + 10 +16500.0 + 20 +13955.0 + 30 +0.0 + 40 +175.0 + 1 +LEGENDE + 0 +CIRCLE + 5 +1E68 + 8 +BEMASSUNG + 10 +16445.0 + 20 +13475.0 + 30 +0.0 + 40 +125.0 + 0 +TEXT + 5 +1E69 + 8 +LEGENDE-35 + 10 +16379.375 + 20 +13426.25 + 30 +0.0 + 40 +87.5 + 1 +20 + 72 + 4 + 11 +16445.0 + 21 +13470.0 + 31 +0.0 + 0 +CIRCLE + 5 +1E6A + 8 +BEMASSUNG + 10 +16395.0 + 20 +5145.0 + 30 +0.0 + 40 +125.0 + 0 +POLYLINE + 5 +1E6B + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +294B + 8 +LEGENDE-35 + 10 +16346.912309 + 20 +5029.691846 + 30 +0.0 + 0 +VERTEX + 5 +294C + 8 +LEGENDE-35 + 10 +16330.0 + 20 +4735.0 + 30 +0.0 + 0 +SEQEND + 5 +294D + 8 +LEGENDE-35 + 0 +TEXT + 5 +1E6F + 8 +LEGENDE-35 + 10 +16322.083333 + 20 +5106.25 + 30 +0.0 + 40 +87.5 + 1 +25 + 72 + 4 + 11 +16395.0 + 21 +5150.0 + 31 +0.0 + 0 +CIRCLE + 5 +1E70 + 8 +BEMASSUNG + 10 +16445.0 + 20 +13185.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1E71 + 8 +BEMASSUNG + 10 +16445.0 + 20 +12895.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1E72 + 8 +BEMASSUNG + 10 +16445.0 + 20 +12605.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1E73 + 8 +BEMASSUNG + 10 +16445.0 + 20 +12315.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1E74 + 8 +BEMASSUNG + 10 +16445.0 + 20 +12025.0 + 30 +0.0 + 40 +125.0 + 0 +TEXT + 5 +1E75 + 8 +LEGENDE-35 + 10 +16371.666667 + 20 +13146.25 + 30 +0.0 + 40 +87.5 + 1 +21 + 72 + 4 + 11 +16430.0 + 21 +13190.0 + 31 +0.0 + 0 +TEXT + 5 +1E76 + 8 +LEGENDE-35 + 10 +16367.083333 + 20 +12850.0 + 30 +0.0 + 40 +87.5 + 1 +22 + 72 + 4 + 11 +16440.0 + 21 +12893.75 + 31 +0.0 + 0 +TEXT + 5 +1E77 + 8 +LEGENDE-35 + 10 +16372.083333 + 20 +12570.0 + 30 +0.0 + 40 +87.5 + 1 +23 + 72 + 4 + 11 +16445.0 + 21 +12613.75 + 31 +0.0 + 0 +TEXT + 5 +1E78 + 8 +LEGENDE-35 + 10 +16367.083333 + 20 +12266.25 + 30 +0.0 + 40 +87.5 + 1 +24 + 72 + 4 + 11 +16440.0 + 21 +12310.0 + 31 +0.0 + 0 +TEXT + 5 +1E79 + 8 +LEGENDE-35 + 10 +16372.083333 + 20 +11991.25 + 30 +0.0 + 40 +87.5 + 1 +25 + 72 + 4 + 11 +16445.0 + 21 +12035.0 + 31 +0.0 + 0 +TEXT + 5 +1E7A + 8 +LEGENDE-35 + 10 +16710.0 + 20 +13131.828626 + 30 +0.0 + 40 +87.5 + 1 +PASSBOLZEN M12 + 0 +TEXT + 5 +1E7B + 8 +LEGENDE-35 + 10 +16710.0 + 20 +12841.828626 + 30 +0.0 + 40 +87.5 + 1 +SICHERUNGSBOLZEN M10 + 0 +TEXT + 5 +1E7C + 8 +LEGENDE-35 + 10 +16710.0 + 20 +12551.828626 + 30 +0.0 + 40 +87.5 + 1 +WINKELVERBINDER TYP 90 /RNa 4.0x40 n=4/SCHENKEL + 0 +TEXT + 5 +1E7D + 8 +LEGENDE-35 + 10 +16710.0 + 20 +12261.828626 + 30 +0.0 + 40 +87.5 + 1 +KNAGGE NH S10 + 0 +TEXT + 5 +1E7E + 8 +LEGENDE-35 + 10 +16710.0 + 20 +11971.828626 + 30 +0.0 + 40 +87.5 + 1 +PETTENANKER M20 + 0 +POLYLINE + 5 +1E7F + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +294E + 8 +DETAILS + 10 +6065.0 + 20 +8300.0 + 30 +0.0 + 0 +VERTEX + 5 +294F + 8 +DETAILS + 10 +6065.0 + 20 +7240.0 + 30 +0.0 + 0 +VERTEX + 5 +2950 + 8 +DETAILS + 10 +8155.0 + 20 +7245.0 + 30 +0.0 + 0 +VERTEX + 5 +2951 + 8 +DETAILS + 10 +8155.0 + 20 +8300.0 + 30 +0.0 + 0 +SEQEND + 5 +2952 + 8 +DETAILS + 0 +TEXT + 5 +1E85 + 8 +DETAILS + 10 +6780.0 + 20 +8060.0 + 30 +0.0 + 40 +175.0 + 1 +D7 + 0 +POLYLINE + 5 +1E86 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +2953 + 8 +DETAILS + 10 +5415.0 + 20 +4950.0 + 30 +0.0 + 0 +VERTEX + 5 +2954 + 8 +DETAILS + 10 +5415.0 + 20 +3890.0 + 30 +0.0 + 0 +VERTEX + 5 +2955 + 8 +DETAILS + 10 +7505.0 + 20 +3890.0 + 30 +0.0 + 0 +VERTEX + 5 +2956 + 8 +DETAILS + 10 +7505.0 + 20 +4950.0 + 30 +0.0 + 0 +SEQEND + 5 +2957 + 8 +DETAILS + 0 +TEXT + 5 +1E8C + 8 +DETAILS + 10 +5480.0 + 20 +3980.0 + 30 +0.0 + 40 +175.0 + 1 +D7 + 0 +TEXT + 5 +1E8D + 8 +DETAILS + 10 +18905.0 + 20 +730.0 + 30 +0.0 + 40 +175.0 + 1 +SCHNITT DG + 0 +TEXT + 5 +1E8E + 8 +DETAILS + 10 +20650.0 + 20 +190.0 + 30 +0.0 + 40 +87.5 + 1 +4 + 0 +CIRCLE + 5 +1E8F + 8 +DETAILS + 10 +11365.0 + 20 +4515.0 + 30 +0.0 + 40 +322.374006 + 0 +TEXT + 5 +1E90 + 8 +DETAILS + 10 +10740.0 + 20 +4090.0 + 30 +0.0 + 40 +87.5 + 1 +AUSSCHNITT + 0 +TEXT + 5 +1E91 + 8 +DETAILS + 10 +10740.0 + 20 +3944.166667 + 30 +0.0 + 40 +87.5 + 1 + DECKE + 0 +POLYLINE + 5 +1E92 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 0 +VERTEX + 5 +2958 + 8 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2959 + 8 +0 + 10 +21025.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +295A + 8 +0 + 10 +21025.0 + 20 +14850.0 + 30 +0.0 + 0 +VERTEX + 5 +295B + 8 +0 + 10 +0.0 + 20 +14850.0 + 30 +0.0 + 0 +SEQEND + 5 +295C + 8 +0 + 0 +POLYLINE + 5 +1E98 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +5.9995 + 41 +5.9995 + 0 +VERTEX + 5 +295D + 8 +MAUERWERK + 10 +4211.99975 + 20 +4235.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +295E + 8 +MAUERWERK + 10 +4218.00025 + 20 +4235.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +295F + 8 +MAUERWERK + 0 +POLYLINE + 5 +1E9C + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +5.9995 + 41 +5.9995 + 0 +VERTEX + 5 +2960 + 8 +MAUERWERK + 10 +4361.99975 + 20 +4235.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2961 + 8 +MAUERWERK + 10 +4368.00025 + 20 +4235.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2962 + 8 +MAUERWERK + 0 +POLYLINE + 5 +1EA0 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +5.9995 + 41 +5.9995 + 0 +VERTEX + 5 +2963 + 8 +MAUERWERK + 10 +9091.99975 + 20 +4260.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2964 + 8 +MAUERWERK + 10 +9098.00025 + 20 +4260.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2965 + 8 +MAUERWERK + 0 +POLYLINE + 5 +1EA4 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +5.9995 + 41 +5.9995 + 0 +VERTEX + 5 +2966 + 8 +MAUERWERK + 10 +9236.99975 + 20 +4260.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2967 + 8 +MAUERWERK + 10 +9243.00025 + 20 +4260.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2968 + 8 +MAUERWERK + 0 +POLYLINE + 5 +1EA8 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +5.9995 + 41 +5.9995 + 0 +VERTEX + 5 +2969 + 8 +MAUERWERK + 10 +12011.99975 + 20 +4260.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +296A + 8 +MAUERWERK + 10 +12018.00025 + 20 +4260.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +296B + 8 +MAUERWERK + 0 +POLYLINE + 5 +1EAC + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +5.9995 + 41 +5.9995 + 0 +VERTEX + 5 +296C + 8 +MAUERWERK + 10 +11866.99975 + 20 +4260.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +296D + 8 +MAUERWERK + 10 +11873.00025 + 20 +4260.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +296E + 8 +MAUERWERK + 0 +POLYLINE + 5 +1EB0 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +5.9995 + 41 +5.9995 + 0 +VERTEX + 5 +296F + 8 +MAUERWERK + 10 +16726.99975 + 20 +4260.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2970 + 8 +MAUERWERK + 10 +16733.00025 + 20 +4260.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2971 + 8 +MAUERWERK + 0 +POLYLINE + 5 +1EB4 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +5.9995 + 41 +5.9995 + 0 +VERTEX + 5 +2972 + 8 +MAUERWERK + 10 +16871.99975 + 20 +4260.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2973 + 8 +MAUERWERK + 10 +16878.00025 + 20 +4260.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2974 + 8 +MAUERWERK + 0 +CIRCLE + 5 +1EB8 + 8 +BEMASSUNG + 10 +12700.0 + 20 +4095.0 + 30 +0.0 + 40 +125.0 + 0 +POLYLINE + 5 +1EB9 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2975 + 8 +0 + 10 +12580.0 + 20 +4130.0 + 30 +0.0 + 0 +VERTEX + 5 +2976 + 8 +0 + 10 +12020.0 + 20 +4255.0 + 30 +0.0 + 0 +SEQEND + 5 +2977 + 8 +0 + 0 +CIRCLE + 5 +1EBD + 8 +BEMASSUNG + 10 +16445.0 + 20 +11735.0 + 30 +0.0 + 40 +125.0 + 0 +TEXT + 5 +1EBE + 8 +BEMASSUNG + 10 +16372.083333 + 20 +11691.25 + 30 +0.0 + 40 +87.5 + 1 +26 + 72 + 4 + 11 +16445.0 + 21 +11735.0 + 31 +0.0 + 0 +TEXT + 5 +1EBF + 8 +BEMASSUNG + 10 +16710.0 + 20 +11681.828626 + 30 +0.0 + 40 +87.5 + 1 +RINGANKER BST III + 0 +TEXT + 5 +1EC0 + 8 +BEMASSUNG + 10 +12627.083333 + 20 +4051.25 + 30 +0.0 + 40 +87.5 + 1 +26 + 72 + 4 + 11 +12700.0 + 21 +4095.0 + 31 +0.0 + 0 +POLYLINE + 5 +1EC1 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2978 + 8 +HOLZ + 10 +16757.5 + 20 +5945.0 + 30 +0.0 + 0 +VERTEX + 5 +2979 + 8 +HOLZ + 10 +16757.5 + 20 +5997.106357 + 30 +0.0 + 0 +SEQEND + 5 +297A + 8 +HOLZ + 0 +POLYLINE + 5 +1EC5 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +297B + 8 +HOLZ + 10 +16757.5 + 20 +6209.35847 + 30 +0.0 + 0 +VERTEX + 5 +297C + 8 +HOLZ + 10 +16757.5 + 20 +7365.0 + 30 +0.0 + 0 +VERTEX + 5 +297D + 8 +HOLZ + 10 +16857.5 + 20 +7365.0 + 30 +0.0 + 0 +VERTEX + 5 +297E + 8 +HOLZ + 10 +16857.5 + 20 +6146.871535 + 30 +0.0 + 0 +SEQEND + 5 +297F + 8 +HOLZ + 0 +POLYLINE + 5 +1ECB + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2980 + 8 +HOLZ + 10 +16840.887603 + 20 +5945.0 + 30 +0.0 + 0 +VERTEX + 5 +2981 + 8 +HOLZ + 10 +16757.5 + 20 +5945.0 + 30 +0.0 + 0 +SEQEND + 5 +2982 + 8 +HOLZ + 0 +POLYLINE + 5 +1ECF + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2983 + 8 +DRAHTANKER + 10 +16756.759748 + 20 +6197.229936 + 30 +0.0 + 0 +VERTEX + 5 +2984 + 8 +DRAHTANKER + 10 +16756.759748 + 20 +6160.664852 + 30 +0.0 + 0 +SEQEND + 5 +2985 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1ED3 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2986 + 8 +DRAHTANKER + 10 +16756.759748 + 20 +6120.775653 + 30 +0.0 + 0 +VERTEX + 5 +2987 + 8 +DRAHTANKER + 10 +16756.759748 + 20 +6084.210569 + 30 +0.0 + 0 +SEQEND + 5 +2988 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1ED7 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2989 + 8 +DRAHTANKER + 10 +16756.759748 + 20 +6038.227117 + 30 +0.0 + 0 +VERTEX + 5 +298A + 8 +DRAHTANKER + 10 +16756.759748 + 20 +6001.662033 + 30 +0.0 + 0 +SEQEND + 5 +298B + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1EDB + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +298C + 8 +DRAHTANKER + 10 +16857.088667 + 20 +6146.814413 + 30 +0.0 + 0 +VERTEX + 5 +298D + 8 +DRAHTANKER + 10 +16857.088667 + 20 +6110.249329 + 30 +0.0 + 0 +SEQEND + 5 +298E + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1EDF + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +298F + 8 +DRAHTANKER + 10 +16857.088667 + 20 +6070.360068 + 30 +0.0 + 0 +VERTEX + 5 +2990 + 8 +DRAHTANKER + 10 +16857.088667 + 20 +6033.794984 + 30 +0.0 + 0 +SEQEND + 5 +2991 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1EE3 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2992 + 8 +DRAHTANKER + 10 +7135.0 + 20 +4825.0 + 30 +0.0 + 0 +VERTEX + 5 +2993 + 8 +DRAHTANKER + 10 +7230.0 + 20 +4825.0 + 30 +0.0 + 0 +VERTEX + 5 +2994 + 8 +DRAHTANKER + 10 +7230.0 + 20 +4610.0 + 30 +0.0 + 0 +VERTEX + 5 +2995 + 8 +DRAHTANKER + 10 +7135.0 + 20 +4610.0 + 30 +0.0 + 0 +SEQEND + 5 +2996 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1EE9 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2997 + 8 +HOLZ + 10 +7135.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +2998 + 8 +HOLZ + 10 +6032.810136 + 20 +4705.0 + 30 +0.0 + 0 +SEQEND + 5 +2999 + 8 +HOLZ + 0 +POLYLINE + 5 +1EED + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +299A + 8 +HOLZ + 10 +7082.5 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +299B + 8 +HOLZ + 10 +7135.0 + 20 +4705.0 + 30 +0.0 + 0 +SEQEND + 5 +299C + 8 +HOLZ + 0 +POLYLINE + 5 +1EF1 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +299D + 8 +HOLZ + 10 +7230.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +299E + 8 +HOLZ + 10 +7282.5 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +299F + 8 +HOLZ + 10 +7282.5 + 20 +7355.0 + 30 +0.0 + 0 +SEQEND + 5 +29A0 + 8 +HOLZ + 0 +POLYLINE + 5 +1EF6 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +29A1 + 8 +DRAHTANKER + 10 +7159.24975 + 20 +4805.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +29A2 + 8 +DRAHTANKER + 10 +7160.75025 + 20 +4805.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +29A3 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1EFA + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +29A4 + 8 +DRAHTANKER + 10 +7179.24975 + 20 +4805.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +29A5 + 8 +DRAHTANKER + 10 +7180.75025 + 20 +4805.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +29A6 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1EFE + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +29A7 + 8 +DRAHTANKER + 10 +7204.24975 + 20 +4805.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +29A8 + 8 +DRAHTANKER + 10 +7205.75025 + 20 +4805.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +29A9 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F02 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +29AA + 8 +DRAHTANKER + 10 +7159.24975 + 20 +4785.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +29AB + 8 +DRAHTANKER + 10 +7160.75025 + 20 +4785.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +29AC + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F06 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +29AD + 8 +DRAHTANKER + 10 +7179.24975 + 20 +4785.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +29AE + 8 +DRAHTANKER + 10 +7180.75025 + 20 +4785.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +29AF + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F0A + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +29B0 + 8 +DRAHTANKER + 10 +7204.24975 + 20 +4785.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +29B1 + 8 +DRAHTANKER + 10 +7205.75025 + 20 +4785.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +29B2 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F0E + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +29B3 + 8 +DRAHTANKER + 10 +7159.24975 + 20 +4765.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +29B4 + 8 +DRAHTANKER + 10 +7160.75025 + 20 +4765.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +29B5 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F12 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +29B6 + 8 +DRAHTANKER + 10 +7179.24975 + 20 +4765.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +29B7 + 8 +DRAHTANKER + 10 +7180.75025 + 20 +4765.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +29B8 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F16 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +29B9 + 8 +DRAHTANKER + 10 +7204.24975 + 20 +4765.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +29BA + 8 +DRAHTANKER + 10 +7205.75025 + 20 +4765.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +29BB + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F1A + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +29BC + 8 +DRAHTANKER + 10 +7159.24975 + 20 +4745.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +29BD + 8 +DRAHTANKER + 10 +7160.75025 + 20 +4745.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +29BE + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F1E + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +29BF + 8 +DRAHTANKER + 10 +7179.24975 + 20 +4745.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +29C0 + 8 +DRAHTANKER + 10 +7180.75025 + 20 +4745.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +29C1 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F22 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +29C2 + 8 +DRAHTANKER + 10 +7204.24975 + 20 +4745.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +29C3 + 8 +DRAHTANKER + 10 +7205.75025 + 20 +4745.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +29C4 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F26 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +29C5 + 8 +DRAHTANKER + 10 +7159.24975 + 20 +4725.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +29C6 + 8 +DRAHTANKER + 10 +7160.75025 + 20 +4725.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +29C7 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F2A + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +29C8 + 8 +DRAHTANKER + 10 +7179.24975 + 20 +4725.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +29C9 + 8 +DRAHTANKER + 10 +7180.75025 + 20 +4725.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +29CA + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F2E + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +29CB + 8 +DRAHTANKER + 10 +7204.24975 + 20 +4725.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +29CC + 8 +DRAHTANKER + 10 +7205.75025 + 20 +4725.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +29CD + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F32 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +29CE + 8 +DRAHTANKER + 10 +7159.24975 + 20 +4705.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +29CF + 8 +DRAHTANKER + 10 +7160.75025 + 20 +4705.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +29D0 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F36 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +29D1 + 8 +DRAHTANKER + 10 +7179.24975 + 20 +4705.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +29D2 + 8 +DRAHTANKER + 10 +7180.75025 + 20 +4705.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +29D3 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F3A + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +29D4 + 8 +DRAHTANKER + 10 +7204.24975 + 20 +4705.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +29D5 + 8 +DRAHTANKER + 10 +7205.75025 + 20 +4705.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +29D6 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F3E + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +29D7 + 8 +DRAHTANKER + 10 +7159.24975 + 20 +4685.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +29D8 + 8 +DRAHTANKER + 10 +7160.75025 + 20 +4685.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +29D9 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F42 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +29DA + 8 +DRAHTANKER + 10 +7179.24975 + 20 +4685.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +29DB + 8 +DRAHTANKER + 10 +7180.75025 + 20 +4685.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +29DC + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F46 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +29DD + 8 +DRAHTANKER + 10 +7204.24975 + 20 +4685.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +29DE + 8 +DRAHTANKER + 10 +7205.75025 + 20 +4685.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +29DF + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F4A + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +29E0 + 8 +DRAHTANKER + 10 +7159.24975 + 20 +4665.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +29E1 + 8 +DRAHTANKER + 10 +7160.75025 + 20 +4665.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +29E2 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F4E + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +29E3 + 8 +DRAHTANKER + 10 +7179.24975 + 20 +4665.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +29E4 + 8 +DRAHTANKER + 10 +7180.75025 + 20 +4665.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +29E5 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F52 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +29E6 + 8 +DRAHTANKER + 10 +7204.24975 + 20 +4665.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +29E7 + 8 +DRAHTANKER + 10 +7205.75025 + 20 +4665.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +29E8 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F56 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +29E9 + 8 +DRAHTANKER + 10 +7159.24975 + 20 +4645.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +29EA + 8 +DRAHTANKER + 10 +7160.75025 + 20 +4645.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +29EB + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F5A + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +29EC + 8 +DRAHTANKER + 10 +7179.24975 + 20 +4645.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +29ED + 8 +DRAHTANKER + 10 +7180.75025 + 20 +4645.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +29EE + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F5E + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +29EF + 8 +DRAHTANKER + 10 +7204.24975 + 20 +4645.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +29F0 + 8 +DRAHTANKER + 10 +7205.75025 + 20 +4645.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +29F1 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F62 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +29F2 + 8 +DRAHTANKER + 10 +7159.24975 + 20 +4625.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +29F3 + 8 +DRAHTANKER + 10 +7160.75025 + 20 +4625.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +29F4 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F66 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +29F5 + 8 +DRAHTANKER + 10 +7179.24975 + 20 +4625.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +29F6 + 8 +DRAHTANKER + 10 +7180.75025 + 20 +4625.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +29F7 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F6A + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +29F8 + 8 +DRAHTANKER + 10 +7204.24975 + 20 +4625.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +29F9 + 8 +DRAHTANKER + 10 +7205.75025 + 20 +4625.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +29FA + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F6E + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +29FB + 8 +DRAHTANKER + 10 +13880.0 + 20 +4825.0 + 30 +0.0 + 0 +VERTEX + 5 +29FC + 8 +DRAHTANKER + 10 +13975.0 + 20 +4825.0 + 30 +0.0 + 0 +VERTEX + 5 +29FD + 8 +DRAHTANKER + 10 +13975.0 + 20 +4610.0 + 30 +0.0 + 0 +VERTEX + 5 +29FE + 8 +DRAHTANKER + 10 +13880.0 + 20 +4610.0 + 30 +0.0 + 0 +SEQEND + 5 +29FF + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F74 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +2A00 + 8 +DRAHTANKER + 10 +13949.24975 + 20 +4625.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2A01 + 8 +DRAHTANKER + 10 +13950.75025 + 20 +4625.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2A02 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F78 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +2A03 + 8 +DRAHTANKER + 10 +13924.24975 + 20 +4625.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2A04 + 8 +DRAHTANKER + 10 +13925.75025 + 20 +4625.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2A05 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F7C + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +2A06 + 8 +DRAHTANKER + 10 +13904.24975 + 20 +4625.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2A07 + 8 +DRAHTANKER + 10 +13905.75025 + 20 +4625.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2A08 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F80 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +2A09 + 8 +DRAHTANKER + 10 +13949.24975 + 20 +4645.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2A0A + 8 +DRAHTANKER + 10 +13950.75025 + 20 +4645.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2A0B + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F84 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +2A0C + 8 +DRAHTANKER + 10 +13924.24975 + 20 +4645.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2A0D + 8 +DRAHTANKER + 10 +13925.75025 + 20 +4645.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2A0E + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F88 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +2A0F + 8 +DRAHTANKER + 10 +13904.24975 + 20 +4645.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2A10 + 8 +DRAHTANKER + 10 +13905.75025 + 20 +4645.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2A11 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F8C + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +2A12 + 8 +DRAHTANKER + 10 +13949.24975 + 20 +4665.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2A13 + 8 +DRAHTANKER + 10 +13950.75025 + 20 +4665.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2A14 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F90 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +2A15 + 8 +DRAHTANKER + 10 +13924.24975 + 20 +4665.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2A16 + 8 +DRAHTANKER + 10 +13925.75025 + 20 +4665.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2A17 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F94 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +2A18 + 8 +DRAHTANKER + 10 +13904.24975 + 20 +4665.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2A19 + 8 +DRAHTANKER + 10 +13905.75025 + 20 +4665.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2A1A + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F98 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +2A1B + 8 +DRAHTANKER + 10 +13949.24975 + 20 +4685.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2A1C + 8 +DRAHTANKER + 10 +13950.75025 + 20 +4685.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2A1D + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F9C + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +2A1E + 8 +DRAHTANKER + 10 +13924.24975 + 20 +4685.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2A1F + 8 +DRAHTANKER + 10 +13925.75025 + 20 +4685.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2A20 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1FA0 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +2A21 + 8 +DRAHTANKER + 10 +13904.24975 + 20 +4685.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2A22 + 8 +DRAHTANKER + 10 +13905.75025 + 20 +4685.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2A23 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1FA4 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +2A24 + 8 +DRAHTANKER + 10 +13949.24975 + 20 +4705.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2A25 + 8 +DRAHTANKER + 10 +13950.75025 + 20 +4705.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2A26 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1FA8 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +2A27 + 8 +DRAHTANKER + 10 +13924.24975 + 20 +4705.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2A28 + 8 +DRAHTANKER + 10 +13925.75025 + 20 +4705.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2A29 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1FAC + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +2A2A + 8 +DRAHTANKER + 10 +13904.24975 + 20 +4705.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2A2B + 8 +DRAHTANKER + 10 +13905.75025 + 20 +4705.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2A2C + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1FB0 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +2A2D + 8 +DRAHTANKER + 10 +13949.24975 + 20 +4725.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2A2E + 8 +DRAHTANKER + 10 +13950.75025 + 20 +4725.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2A2F + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1FB4 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +2A30 + 8 +DRAHTANKER + 10 +13924.24975 + 20 +4725.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2A31 + 8 +DRAHTANKER + 10 +13925.75025 + 20 +4725.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2A32 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1FB8 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +2A33 + 8 +DRAHTANKER + 10 +13904.24975 + 20 +4725.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2A34 + 8 +DRAHTANKER + 10 +13905.75025 + 20 +4725.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2A35 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1FBC + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +2A36 + 8 +DRAHTANKER + 10 +13949.24975 + 20 +4745.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2A37 + 8 +DRAHTANKER + 10 +13950.75025 + 20 +4745.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2A38 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1FC0 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +2A39 + 8 +DRAHTANKER + 10 +13924.24975 + 20 +4745.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2A3A + 8 +DRAHTANKER + 10 +13925.75025 + 20 +4745.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2A3B + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1FC4 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +2A3C + 8 +DRAHTANKER + 10 +13904.24975 + 20 +4745.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2A3D + 8 +DRAHTANKER + 10 +13905.75025 + 20 +4745.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2A3E + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1FC8 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +2A3F + 8 +DRAHTANKER + 10 +13949.24975 + 20 +4765.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2A40 + 8 +DRAHTANKER + 10 +13950.75025 + 20 +4765.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2A41 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1FCC + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +2A42 + 8 +DRAHTANKER + 10 +13924.24975 + 20 +4765.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2A43 + 8 +DRAHTANKER + 10 +13925.75025 + 20 +4765.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2A44 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1FD0 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +2A45 + 8 +DRAHTANKER + 10 +13904.24975 + 20 +4765.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2A46 + 8 +DRAHTANKER + 10 +13905.75025 + 20 +4765.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2A47 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1FD4 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +2A48 + 8 +DRAHTANKER + 10 +13949.24975 + 20 +4785.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2A49 + 8 +DRAHTANKER + 10 +13950.75025 + 20 +4785.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2A4A + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1FD8 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +2A4B + 8 +DRAHTANKER + 10 +13924.24975 + 20 +4785.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2A4C + 8 +DRAHTANKER + 10 +13925.75025 + 20 +4785.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2A4D + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1FDC + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +2A4E + 8 +DRAHTANKER + 10 +13904.24975 + 20 +4785.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2A4F + 8 +DRAHTANKER + 10 +13905.75025 + 20 +4785.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2A50 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1FE0 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +2A51 + 8 +DRAHTANKER + 10 +13949.24975 + 20 +4805.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2A52 + 8 +DRAHTANKER + 10 +13950.75025 + 20 +4805.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2A53 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1FE4 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +2A54 + 8 +DRAHTANKER + 10 +13924.24975 + 20 +4805.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2A55 + 8 +DRAHTANKER + 10 +13925.75025 + 20 +4805.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2A56 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1FE8 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +2A57 + 8 +DRAHTANKER + 10 +13904.24975 + 20 +4805.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2A58 + 8 +DRAHTANKER + 10 +13905.75025 + 20 +4805.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2A59 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1FEC + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2A5A + 8 +HOLZ + 10 +15092.292001 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +2A5B + 8 +HOLZ + 10 +13975.0 + 20 +4705.0 + 30 +0.0 + 0 +SEQEND + 5 +2A5C + 8 +HOLZ + 0 +POLYLINE + 5 +1FF0 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2A5D + 8 +HOLZ + 10 +13880.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +2A5E + 8 +HOLZ + 10 +7230.0 + 20 +4705.0 + 30 +0.0 + 0 +SEQEND + 5 +2A5F + 8 +HOLZ + 0 +POLYLINE + 5 +1FF4 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2A60 + 8 +HOLZ + 10 +14032.5 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +2A61 + 8 +HOLZ + 10 +13975.0 + 20 +4705.0 + 30 +0.0 + 0 +SEQEND + 5 +2A62 + 8 +HOLZ + 0 +POLYLINE + 5 +1FF8 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2A63 + 8 +HOLZ + 10 +13880.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +2A64 + 8 +HOLZ + 10 +13832.5 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +2A65 + 8 +HOLZ + 10 +13832.5 + 20 +7355.0 + 30 +0.0 + 0 +SEQEND + 5 +2A66 + 8 +HOLZ + 0 +ENDSEC + 0 +EOF diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/samples/dxf/draft3.dxf b/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/samples/dxf/draft3.dxf new file mode 100644 index 00000000..9f2a188d --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/samples/dxf/draft3.dxf @@ -0,0 +1,137444 @@ + 0 +SECTION + 2 +HEADER + 9 +$ACADVER + 1 +AC1009 + 9 +$INSBASE + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$EXTMIN + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$EXTMAX + 10 +21025.0 + 20 +14850.0 + 30 +0.0 + 9 +$LIMMIN + 10 +0.0 + 20 +0.0 + 9 +$LIMMAX + 10 +21025.0 + 20 +14850.0 + 9 +$ORTHOMODE + 70 + 1 + 9 +$REGENMODE + 70 + 1 + 9 +$FILLMODE + 70 + 1 + 9 +$QTEXTMODE + 70 + 0 + 9 +$MIRRTEXT + 70 + 1 + 9 +$DRAGMODE + 70 + 2 + 9 +$LTSCALE + 40 +175.0 + 9 +$OSMODE + 70 + 0 + 9 +$ATTMODE + 70 + 1 + 9 +$TEXTSIZE + 40 +175.0 + 9 +$TRACEWID + 40 +1.0 + 9 +$TEXTSTYLE + 7 +STANDARD + 9 +$CLAYER + 8 +LEGENDE-70 + 9 +$CELTYPE + 6 +BYLAYER + 9 +$CECOLOR + 62 + 256 + 9 +$DIMSCALE + 40 +1.0 + 9 +$DIMASZ + 40 +1.0 + 9 +$DIMEXO + 40 +1.0 + 9 +$DIMDLI + 40 +3.0 + 9 +$DIMRND + 40 +0.0 + 9 +$DIMDLE + 40 +0.0 + 9 +$DIMEXE + 40 +0.5 + 9 +$DIMTP + 40 +0.0 + 9 +$DIMTM + 40 +0.0 + 9 +$DIMTXT + 40 +87.5 + 9 +$DIMCEN + 40 +0.5 + 9 +$DIMTSZ + 40 +0.0 + 9 +$DIMTOL + 70 + 0 + 9 +$DIMLIM + 70 + 0 + 9 +$DIMTIH + 70 + 0 + 9 +$DIMTOH + 70 + 0 + 9 +$DIMSE1 + 70 + 1 + 9 +$DIMSE2 + 70 + 1 + 9 +$DIMTAD + 70 + 1 + 9 +$DIMZIN + 70 + 8 + 9 +$DIMBLK + 1 +MASSHILFSLINIE + 9 +$DIMASO + 70 + 1 + 9 +$DIMSHO + 70 + 0 + 9 +$DIMPOST + 1 + + 9 +$DIMAPOST + 1 + + 9 +$DIMALT + 70 + 0 + 9 +$DIMALTD + 70 + 2 + 9 +$DIMALTF + 40 +25.4 + 9 +$DIMLFAC + 40 +1.0 + 9 +$DIMTOFL + 70 + 1 + 9 +$DIMTVP + 40 +0.0 + 9 +$DIMTIX + 70 + 1 + 9 +$DIMSOXD + 70 + 0 + 9 +$DIMSAH + 70 + 0 + 9 +$DIMBLK1 + 1 + + 9 +$DIMBLK2 + 1 + + 9 +$DIMSTYLE + 2 +STANDARD + 9 +$DIMCLRD + 70 + 0 + 9 +$DIMCLRE + 70 + 0 + 9 +$DIMCLRT + 70 + 0 + 9 +$DIMTFAC + 40 +1.0 + 9 +$DIMGAP + 40 +0.0 + 9 +$LUNITS + 70 + 2 + 9 +$LUPREC + 70 + 2 + 9 +$SKETCHINC + 40 +1.0 + 9 +$FILLETRAD + 40 +0.0 + 9 +$AUNITS + 70 + 0 + 9 +$AUPREC + 70 + 0 + 9 +$MENU + 1 +acad + 9 +$ELEVATION + 40 +0.0 + 9 +$PELEVATION + 40 +0.0 + 9 +$THICKNESS + 40 +0.0 + 9 +$LIMCHECK + 70 + 0 + 9 +$BLIPMODE + 70 + 1 + 9 +$CHAMFERA + 40 +0.0 + 9 +$CHAMFERB + 40 +0.0 + 9 +$SKPOLY + 70 + 0 + 9 +$TDCREATE + 40 +2450820.494106 + 9 +$TDUPDATE + 40 +2450820.494106 + 9 +$TDINDWG + 40 +0.0 + 9 +$TDUSRTIMER + 40 +0.0 + 9 +$USRTIMER + 70 + 1 + 9 +$ANGBASE + 50 +0.0 + 9 +$ANGDIR + 70 + 0 + 9 +$PDMODE + 70 + 0 + 9 +$PDSIZE + 40 +0.0 + 9 +$PLINEWID + 40 +0.0 + 9 +$COORDS + 70 + 2 + 9 +$SPLFRAME + 70 + 0 + 9 +$SPLINETYPE + 70 + 6 + 9 +$SPLINESEGS + 70 + 8 + 9 +$ATTDIA + 70 + 0 + 9 +$ATTREQ + 70 + 1 + 9 +$HANDLING + 70 + 1 + 9 +$HANDSEED + 5 +2270 + 9 +$SURFTAB1 + 70 + 6 + 9 +$SURFTAB2 + 70 + 6 + 9 +$SURFTYPE + 70 + 6 + 9 +$SURFU + 70 + 6 + 9 +$SURFV + 70 + 6 + 9 +$UCSNAME + 2 +PAPIERURSPRUNG + 9 +$UCSORG + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSXDIR + 10 +1.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSYDIR + 10 +0.0 + 20 +1.0 + 30 +0.0 + 9 +$PUCSNAME + 2 + + 9 +$PUCSORG + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSXDIR + 10 +1.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSYDIR + 10 +0.0 + 20 +1.0 + 30 +0.0 + 9 +$USERI1 + 70 + 0 + 9 +$USERI2 + 70 + 0 + 9 +$USERI3 + 70 + 0 + 9 +$USERI4 + 70 + 0 + 9 +$USERI5 + 70 + 0 + 9 +$USERR1 + 40 +0.0 + 9 +$USERR2 + 40 +0.0 + 9 +$USERR3 + 40 +0.0 + 9 +$USERR4 + 40 +0.0 + 9 +$USERR5 + 40 +0.0 + 9 +$WORLDVIEW + 70 + 1 + 9 +$SHADEDGE + 70 + 3 + 9 +$SHADEDIF + 70 + 70 + 9 +$TILEMODE + 70 + 1 + 9 +$MAXACTVP + 70 + 16 + 9 +$PLIMCHECK + 70 + 0 + 9 +$PEXTMIN + 10 +1.000000E+020 + 20 +1.000000E+020 + 30 +1.000000E+020 + 9 +$PEXTMAX + 10 +-1.000000E+020 + 20 +-1.000000E+020 + 30 +-1.000000E+020 + 9 +$PLIMMIN + 10 +0.0 + 20 +0.0 + 9 +$PLIMMAX + 10 +12.0 + 20 +9.0 + 9 +$UNITMODE + 70 + 0 + 9 +$VISRETAIN + 70 + 0 + 9 +$PLINEGEN + 70 + 0 + 9 +$PSLTSCALE + 70 + 0 + 0 +ENDSEC + 0 +SECTION + 2 +TABLES + 0 +TABLE + 2 +VPORT + 70 + 3 + 0 +VPORT + 2 +*ACTIVE + 70 + 0 + 10 +0.0 + 20 +0.0 + 11 +1.0 + 21 +1.0 + 12 +11853.224688 + 22 +7639.042096 + 13 +0.0 + 23 +0.0 + 14 +5.0 + 24 +5.0 + 15 +10.0 + 25 +10.0 + 16 +0.0 + 26 +0.0 + 36 +1.0 + 17 +0.0 + 27 +0.0 + 37 +0.0 + 40 +15278.084191 + 41 +1.551664 + 42 +50.0 + 43 +0.0 + 44 +0.0 + 50 +0.0 + 51 +0.0 + 71 + 0 + 72 + 100 + 73 + 1 + 74 + 1 + 75 + 1 + 76 + 0 + 77 + 0 + 78 + 0 + 0 +ENDTAB + 0 +TABLE + 2 +LTYPE + 70 + 25 + 0 +LTYPE + 2 +CONTINUOUS + 70 + 0 + 3 +Solid line + 72 + 65 + 73 + 0 + 40 +0.0 + 0 +LTYPE + 2 +RAND + 70 + 0 + 3 +__ __ . __ __ . __ __ . __ __ . __ __ . __ __ . + 72 + 65 + 73 + 6 + 40 +1.75 + 49 +0.5 + 49 +-0.25 + 49 +0.5 + 49 +-0.25 + 49 +0.0 + 49 +-0.25 + 0 +LTYPE + 2 +RAND2 + 70 + 0 + 3 +__.__.__.__.__.__.__.__.__.__.__.__.__.__.__.__ + 72 + 65 + 73 + 6 + 40 +0.875 + 49 +0.25 + 49 +-0.125 + 49 +0.25 + 49 +-0.125 + 49 +0.0 + 49 +-0.125 + 0 +LTYPE + 2 +RANDX2 + 70 + 0 + 3 +____ ____ . ____ ____ . ____ ____ . __ + 72 + 65 + 73 + 6 + 40 +3.5 + 49 +1.0 + 49 +-0.5 + 49 +1.0 + 49 +-0.5 + 49 +0.0 + 49 +-0.5 + 0 +LTYPE + 2 +MITTE + 70 + 0 + 3 +____ _ ____ _ ____ _ ____ _ ____ _ ____ _ ____ + 72 + 65 + 73 + 4 + 40 +2.0 + 49 +1.25 + 49 +-0.25 + 49 +0.25 + 49 +-0.25 + 0 +LTYPE + 2 +MITTE2 + 70 + 0 + 3 +___ _ ___ _ ___ _ ___ _ ___ _ ___ _ ___ _ ___ _ + 72 + 65 + 73 + 4 + 40 +1.125 + 49 +0.75 + 49 +-0.125 + 49 +0.125 + 49 +-0.125 + 0 +LTYPE + 2 +MITTEX2 + 70 + 0 + 3 +________ __ ________ __ ________ __ _____ + 72 + 65 + 73 + 4 + 40 +4.0 + 49 +2.5 + 49 +-0.5 + 49 +0.5 + 49 +-0.5 + 0 +LTYPE + 2 +STRICHPUNKT + 70 + 0 + 3 +__ . __ . __ . __ . __ . __ . __ . __ . __ . __ + 72 + 65 + 73 + 4 + 40 +1.0 + 49 +0.5 + 49 +-0.25 + 49 +0.0 + 49 +-0.25 + 0 +LTYPE + 2 +STRICHPUNKT2 + 70 + 0 + 3 +_._._._._._._._._._._._._._._._._._._._._._._._ + 72 + 65 + 73 + 4 + 40 +0.5 + 49 +0.25 + 49 +-0.125 + 49 +0.0 + 49 +-0.125 + 0 +LTYPE + 2 +STRICHPUNKTX2 + 70 + 0 + 3 +____ . ____ . ____ . ____ . ____ . __ + 72 + 65 + 73 + 4 + 40 +2.0 + 49 +1.0 + 49 +-0.5 + 49 +0.0 + 49 +-0.5 + 0 +LTYPE + 2 +GESTRICHELT + 70 + 0 + 3 +__ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ + 72 + 65 + 73 + 2 + 40 +0.75 + 49 +0.5 + 49 +-0.25 + 0 +LTYPE + 2 +GESTRICHELT2 + 70 + 0 + 3 +_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ + 72 + 65 + 73 + 2 + 40 +0.375 + 49 +0.25 + 49 +-0.125 + 0 +LTYPE + 2 +GESTRICHELTX2 + 70 + 0 + 3 +____ ____ ____ ____ ____ ____ ____ ____ + 72 + 65 + 73 + 2 + 40 +1.5 + 49 +1.0 + 49 +-0.5 + 0 +LTYPE + 2 +GETRENNT + 70 + 0 + 3 +____ . . ____ . . ____ . . ____ . . ____ . . __ + 72 + 65 + 73 + 6 + 40 +1.25 + 49 +0.5 + 49 +-0.25 + 49 +0.0 + 49 +-0.25 + 49 +0.0 + 49 +-0.25 + 0 +LTYPE + 2 +GETRENNT2 + 70 + 0 + 3 +__..__..__..__..__..__..__..__..__..__..__..__. + 72 + 65 + 73 + 6 + 40 +0.625 + 49 +0.25 + 49 +-0.125 + 49 +0.0 + 49 +-0.125 + 49 +0.0 + 49 +-0.125 + 0 +LTYPE + 2 +GETRENNTX2 + 70 + 0 + 3 +________ . . ________ . . ________ . . + 72 + 65 + 73 + 6 + 40 +2.5 + 49 +1.0 + 49 +-0.5 + 49 +0.0 + 49 +-0.5 + 49 +0.0 + 49 +-0.5 + 0 +LTYPE + 2 +PUNKT + 70 + 0 + 3 +. . . . . . . . . . . . . . . . . . . . . . . . + 72 + 65 + 73 + 2 + 40 +0.25 + 49 +0.0 + 49 +-0.25 + 0 +LTYPE + 2 +PUNKT2 + 70 + 0 + 3 +............................................... + 72 + 65 + 73 + 2 + 40 +0.125 + 49 +0.0 + 49 +-0.125 + 0 +LTYPE + 2 +PUNKTX2 + 70 + 0 + 3 +. . . . . . . . . . . . . . . . + 72 + 65 + 73 + 2 + 40 +0.5 + 49 +0.0 + 49 +-0.5 + 0 +LTYPE + 2 +VERDECKT + 70 + 0 + 3 +__ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ + 72 + 65 + 73 + 2 + 40 +0.375 + 49 +0.25 + 49 +-0.125 + 0 +LTYPE + 2 +VERDECKT2 + 70 + 0 + 3 +_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ + 72 + 65 + 73 + 2 + 40 +0.1875 + 49 +0.125 + 49 +-0.0625 + 0 +LTYPE + 2 +VERDECKTX2 + 70 + 0 + 3 +____ ____ ____ ____ ____ ____ ____ ____ ____ __ + 72 + 65 + 73 + 2 + 40 +0.75 + 49 +0.5 + 49 +-0.25 + 0 +LTYPE + 2 +PHANTOM + 70 + 0 + 3 +______ __ __ ______ __ __ ______ __ __ + 72 + 65 + 73 + 6 + 40 +2.5 + 49 +1.25 + 49 +-0.25 + 49 +0.25 + 49 +-0.25 + 49 +0.25 + 49 +-0.25 + 0 +LTYPE + 2 +PHANTOM2 + 70 + 0 + 3 +___ _ _ ___ _ _ ___ _ _ ___ _ _ ___ _ _ ___ _ _ + 72 + 65 + 73 + 6 + 40 +1.25 + 49 +0.625 + 49 +-0.125 + 49 +0.125 + 49 +-0.125 + 49 +0.125 + 49 +-0.125 + 0 +LTYPE + 2 +PHANTOMX2 + 70 + 0 + 3 +____________ ____ ____ ____________ + 72 + 65 + 73 + 6 + 40 +5.0 + 49 +2.5 + 49 +-0.5 + 49 +0.5 + 49 +-0.5 + 49 +0.5 + 49 +-0.5 + 0 +ENDTAB + 0 +TABLE + 2 +LAYER + 70 + 20 + 0 +LAYER + 2 +0 + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +LAYER + 2 +MAUERWERK + 70 + 0 + 62 + 6 + 6 +CONTINUOUS + 0 +LAYER + 2 +VORSATZSCHALE + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +LAYER + 2 +PE-FOLIE + 70 + 0 + 62 + 1 + 6 +GESTRICHELTX2 + 0 +LAYER + 2 +FUNDAMENT + 70 + 0 + 62 + 8 + 6 +CONTINUOUS + 0 +LAYER + 2 +BEMASSUNG + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +LAYER + 2 +STUERTZE + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +LAYER + 2 +ESTRICH + 70 + 0 + 62 + 4 + 6 +CONTINUOUS + 0 +LAYER + 2 +DECKEN + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +LAYER + 2 +DAEMMUNG + 70 + 0 + 62 + 4 + 6 +CONTINUOUS + 0 +LAYER + 2 +TUEREN + 70 + 0 + 62 + 3 + 6 +CONTINUOUS + 0 +LAYER + 2 +ERDBODEN + 70 + 0 + 62 + 5 + 6 +CONTINUOUS + 0 +LAYER + 2 +SCHNITTKANTEN + 70 + 0 + 62 + 1 + 6 +GESTRICHELT + 0 +LAYER + 2 +TRENNWAND + 70 + 0 + 62 + 8 + 6 +CONTINUOUS + 0 +LAYER + 2 +LEGENDE-70 + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +LAYER + 2 +LEGENDE-35 + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +LAYER + 2 +DETAILS + 70 + 0 + 62 + 7 + 6 +GESTRICHELTX2 + 0 +LAYER + 2 +DRAHTANKER + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +LAYER + 2 +SCHRAFFUR + 70 + 0 + 62 + 2 + 6 +CONTINUOUS + 0 +LAYER + 2 +DEFPOINTS + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +ENDTAB + 0 +TABLE + 2 +STYLE + 70 + 1 + 0 +STYLE + 2 +STANDARD + 70 + 0 + 40 +0.0 + 41 +0.75 + 50 +0.0 + 71 + 0 + 42 +175.0 + 3 +C:\ACADWIN\FONTS\TXT.SHX + 4 + + 0 +ENDTAB + 0 +TABLE + 2 +VIEW + 70 + 2 + 0 +VIEW + 2 +OLE1 + 70 + 0 + 40 +2793.796699 + 10 +7175.0 + 20 +11246.898349 + 41 +4460.0 + 11 +0.0 + 21 +0.0 + 31 +1.0 + 12 +0.0 + 22 +0.0 + 32 +0.0 + 42 +50.0 + 43 +0.0 + 44 +0.0 + 50 +0.0 + 71 + 0 + 0 +VIEW + 2 +OLE2 + 70 + 0 + 40 +14850.0 + 10 +11853.224688 + 20 +7425.0 + 41 +23706.449376 + 11 +0.0 + 21 +0.0 + 31 +1.0 + 12 +0.0 + 22 +0.0 + 32 +0.0 + 42 +50.0 + 43 +0.0 + 44 +0.0 + 50 +0.0 + 71 + 0 + 0 +ENDTAB + 0 +TABLE + 2 +UCS + 70 + 2 + 0 +UCS + 2 +LOKAL + 70 + 0 + 10 +4125.0 + 20 +5250.0 + 30 +0.0 + 11 +1.0 + 21 +0.0 + 31 +0.0 + 12 +0.0 + 22 +1.0 + 32 +0.0 + 0 +UCS + 2 +PAPIERURSPRUNG + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 11 +1.0 + 21 +0.0 + 31 +0.0 + 12 +0.0 + 22 +1.0 + 32 +0.0 + 0 +ENDTAB + 0 +TABLE + 2 +APPID + 70 + 1 + 0 +APPID + 2 +ACAD + 70 + 0 + 0 +ENDTAB + 0 +TABLE + 2 +DIMSTYLE + 70 + 1 + 0 +DIMSTYLE + 2 +STANDARD + 70 + 0 + 3 + + 4 + + 5 + + 6 + + 7 + + 40 +1.0 + 41 +0.18 + 42 +0.0625 + 43 +0.38 + 44 +0.18 + 45 +0.0 + 46 +0.0 + 47 +0.0 + 48 +0.0 +140 +0.18 +141 +0.09 +142 +0.0 +143 +25.4 +144 +1.0 +145 +0.0 +146 +1.0 +147 +0.09 + 71 + 0 + 72 + 0 + 73 + 1 + 74 + 1 + 75 + 0 + 76 + 0 + 77 + 0 + 78 + 0 +170 + 0 +171 + 2 +172 + 0 +173 + 0 +174 + 0 +175 + 0 +176 + 0 +177 + 0 +178 + 0 + 0 +ENDTAB + 0 +ENDSEC + 0 +SECTION + 2 +BLOCKS + 0 +BLOCK + 8 +0 + 2 +$MODEL_SPACE + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +$MODEL_SPACE + 1 + + 0 +ENDBLK + 5 +BB + 8 +0 + 0 +BLOCK + 67 + 1 + 8 +0 + 2 +$PAPER_SPACE + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +$PAPER_SPACE + 1 + + 0 +ENDBLK + 5 +B9 + 67 + 1 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +RAHMEN50 + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +RAHMEN50 + 1 + + 0 +POLYLINE + 5 +BF + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +1E98 + 8 +0 + 10 +1000.0 + 20 +250.0 + 30 +0.0 + 0 +VERTEX + 5 +1E99 + 8 +0 + 10 +41800.0 + 20 +250.0 + 30 +0.0 + 0 +VERTEX + 5 +1E9A + 8 +0 + 10 +41800.0 + 20 +29450.0 + 30 +0.0 + 0 +VERTEX + 5 +1E9B + 8 +0 + 10 +1000.0 + 20 +29450.0 + 30 +0.0 + 0 +SEQEND + 5 +1E9C + 8 +0 + 0 +POLYLINE + 5 +C5 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +1E9D + 8 +0 + 10 +32800.0 + 20 +250.0 + 30 +0.0 + 0 +VERTEX + 5 +1E9E + 8 +0 + 10 +32800.0 + 20 +13250.0 + 30 +0.0 + 0 +VERTEX + 5 +1E9F + 8 +0 + 10 +41800.0 + 20 +13250.0 + 30 +0.0 + 0 +SEQEND + 5 +1EA0 + 8 +0 + 0 +POLYLINE + 5 +CA + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +1EA1 + 8 +0 + 10 +39550.0 + 20 +13250.0 + 30 +0.0 + 0 +VERTEX + 5 +1EA2 + 8 +0 + 10 +39550.0 + 20 +11000.0 + 30 +0.0 + 0 +SEQEND + 5 +1EA3 + 8 +0 + 0 +POLYLINE + 5 +CE + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +1EA4 + 8 +0 + 10 +41800.0 + 20 +12250.0 + 30 +0.0 + 0 +VERTEX + 5 +1EA5 + 8 +0 + 10 +37300.0 + 20 +12250.0 + 30 +0.0 + 0 +SEQEND + 5 +1EA6 + 8 +0 + 0 +POLYLINE + 5 +D2 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +1EA7 + 8 +0 + 10 +41800.0 + 20 +11625.0 + 30 +0.0 + 0 +VERTEX + 5 +1EA8 + 8 +0 + 10 +37300.0 + 20 +11625.0 + 30 +0.0 + 0 +SEQEND + 5 +1EA9 + 8 +0 + 0 +POLYLINE + 5 +D6 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +1EAA + 8 +0 + 10 +32800.0 + 20 +11000.0 + 30 +0.0 + 0 +VERTEX + 5 +1EAB + 8 +0 + 10 +41800.0 + 20 +11000.0 + 30 +0.0 + 0 +SEQEND + 5 +1EAC + 8 +0 + 0 +POLYLINE + 5 +DA + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +1EAD + 8 +0 + 10 +37300.0 + 20 +13250.0 + 30 +0.0 + 0 +VERTEX + 5 +1EAE + 8 +0 + 10 +37300.0 + 20 +6500.0 + 30 +0.0 + 0 +SEQEND + 5 +1EAF + 8 +0 + 0 +POLYLINE + 5 +DE + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +1EB0 + 8 +0 + 10 +32800.0 + 20 +8750.0 + 30 +0.0 + 0 +VERTEX + 5 +1EB1 + 8 +0 + 10 +37300.0 + 20 +8750.0 + 30 +0.0 + 0 +SEQEND + 5 +1EB2 + 8 +0 + 0 +POLYLINE + 5 +E2 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +1EB3 + 8 +0 + 10 +32800.0 + 20 +6500.0 + 30 +0.0 + 0 +VERTEX + 5 +1EB4 + 8 +0 + 10 +41800.0 + 20 +6500.0 + 30 +0.0 + 0 +SEQEND + 5 +1EB5 + 8 +0 + 0 +POLYLINE + 5 +E6 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +1EB6 + 8 +0 + 10 +41800.0 + 20 +2000.0 + 30 +0.0 + 0 +VERTEX + 5 +1EB7 + 8 +0 + 10 +32800.0 + 20 +2000.0 + 30 +0.0 + 0 +SEQEND + 5 +1EB8 + 8 +0 + 0 +POLYLINE + 5 +EA + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +1EB9 + 8 +0 + 10 +41800.0 + 20 +950.0 + 30 +0.0 + 0 +VERTEX + 5 +1EBA + 8 +0 + 10 +32800.0 + 20 +950.0 + 30 +0.0 + 0 +SEQEND + 5 +1EBB + 8 +0 + 0 +POLYLINE + 5 +EE + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +1EBC + 8 +0 + 10 +41800.0 + 20 +1300.0 + 30 +0.0 + 0 +VERTEX + 5 +1EBD + 8 +0 + 10 +32800.0 + 20 +1300.0 + 30 +0.0 + 0 +SEQEND + 5 +1EBE + 8 +0 + 0 +POLYLINE + 5 +F2 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +1EBF + 8 +0 + 10 +41800.0 + 20 +1650.0 + 30 +0.0 + 0 +VERTEX + 5 +1EC0 + 8 +0 + 10 +32800.0 + 20 +1650.0 + 30 +0.0 + 0 +SEQEND + 5 +1EC1 + 8 +0 + 0 +POLYLINE + 5 +F6 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +1EC2 + 8 +0 + 10 +41800.0 + 20 +600.0 + 30 +0.0 + 0 +VERTEX + 5 +1EC3 + 8 +0 + 10 +32800.0 + 20 +600.0 + 30 +0.0 + 0 +SEQEND + 5 +1EC4 + 8 +0 + 0 +POLYLINE + 5 +FA + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +1EC5 + 8 +0 + 10 +35100.0 + 20 +250.0 + 30 +0.0 + 0 +VERTEX + 5 +1EC6 + 8 +0 + 10 +35100.0 + 20 +2000.0 + 30 +0.0 + 0 +SEQEND + 5 +1EC7 + 8 +0 + 0 +POLYLINE + 5 +FE + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +1EC8 + 8 +0 + 10 +33950.0 + 20 +250.0 + 30 +0.0 + 0 +VERTEX + 5 +1EC9 + 8 +0 + 10 +33950.0 + 20 +2000.0 + 30 +0.0 + 0 +SEQEND + 5 +1ECA + 8 +0 + 0 +POLYLINE + 5 +102 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +1ECB + 8 +0 + 10 +40650.0 + 20 +250.0 + 30 +0.0 + 0 +VERTEX + 5 +1ECC + 8 +0 + 10 +40650.0 + 20 +2000.0 + 30 +0.0 + 0 +SEQEND + 5 +1ECD + 8 +0 + 0 +ENDBLK + 5 +106 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +STURZ + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +STURZ + 1 + + 0 +POLYLINE + 5 +108 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +1ECE + 8 +MAUERWERK + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1ECF + 8 +MAUERWERK + 10 +0.0 + 20 +-71.0 + 30 +0.0 + 0 +VERTEX + 5 +1ED0 + 8 +MAUERWERK + 10 +365.0 + 20 +-71.0 + 30 +0.0 + 0 +VERTEX + 5 +1ED1 + 8 +MAUERWERK + 10 +365.0 + 20 +0.0 + 30 +0.0 + 0 +SEQEND + 5 +1ED2 + 8 +MAUERWERK + 0 +POLYLINE + 5 +10E + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +1ED3 + 8 +MAUERWERK + 10 +40.0 + 20 +-1.0 + 30 +0.0 + 0 +VERTEX + 5 +1ED4 + 8 +MAUERWERK + 10 +40.0 + 20 +-36.0 + 30 +0.0 + 0 +VERTEX + 5 +1ED5 + 8 +MAUERWERK + 10 +80.0 + 20 +-36.0 + 30 +0.0 + 0 +VERTEX + 5 +1ED6 + 8 +MAUERWERK + 10 +80.0 + 20 +-6.0 + 30 +0.0 + 0 +SEQEND + 5 +1ED7 + 8 +MAUERWERK + 0 +POLYLINE + 5 +114 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +1ED8 + 8 +MAUERWERK + 10 +160.0 + 20 +-1.0 + 30 +0.0 + 0 +VERTEX + 5 +1ED9 + 8 +MAUERWERK + 10 +160.0 + 20 +-36.0 + 30 +0.0 + 0 +VERTEX + 5 +1EDA + 8 +MAUERWERK + 10 +200.0 + 20 +-36.0 + 30 +0.0 + 0 +VERTEX + 5 +1EDB + 8 +MAUERWERK + 10 +200.0 + 20 +-6.0 + 30 +0.0 + 0 +SEQEND + 5 +1EDC + 8 +MAUERWERK + 0 +POLYLINE + 5 +11A + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +1EDD + 8 +MAUERWERK + 10 +285.0 + 20 +-1.0 + 30 +0.0 + 0 +VERTEX + 5 +1EDE + 8 +MAUERWERK + 10 +285.0 + 20 +-36.0 + 30 +0.0 + 0 +VERTEX + 5 +1EDF + 8 +MAUERWERK + 10 +325.0 + 20 +-36.0 + 30 +0.0 + 0 +VERTEX + 5 +1EE0 + 8 +MAUERWERK + 10 +325.0 + 20 +-6.0 + 30 +0.0 + 0 +SEQEND + 5 +1EE1 + 8 +MAUERWERK + 0 +POLYLINE + 5 +120 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +1EE2 + 8 +MAUERWERK + 10 +121.0 + 20 +-71.0 + 30 +0.0 + 0 +VERTEX + 5 +1EE3 + 8 +MAUERWERK + 10 +121.0 + 20 +0.0 + 30 +0.0 + 0 +SEQEND + 5 +1EE4 + 8 +MAUERWERK + 0 +POLYLINE + 5 +124 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +1EE5 + 8 +MAUERWERK + 10 +243.0 + 20 +-71.0 + 30 +0.0 + 0 +VERTEX + 5 +1EE6 + 8 +MAUERWERK + 10 +243.0 + 20 +0.0 + 30 +0.0 + 0 +SEQEND + 5 +1EE7 + 8 +MAUERWERK + 0 +ENDBLK + 5 +128 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +MASSHILFSLINIE + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +MASSHILFSLINIE + 1 + + 0 +POLYLINE + 5 +12A + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1EE8 + 8 +0 + 10 +75.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1EE9 + 8 +0 + 10 +-75.0 + 20 +0.0 + 30 +0.0 + 0 +SEQEND + 5 +1EEA + 8 +0 + 0 +POLYLINE + 5 +12E + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1EEB + 8 +0 + 10 +0.0 + 20 +-175.0 + 30 +0.0 + 0 +VERTEX + 5 +1EEC + 8 +0 + 10 +0.0 + 20 +175.0 + 30 +0.0 + 0 +SEQEND + 5 +1EED + 8 +0 + 0 +POLYLINE + 5 +132 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1EEE + 8 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1EEF + 8 +0 + 10 +26.516504 + 20 +26.516504 + 30 +0.0 + 0 +SEQEND + 5 +1EF0 + 8 +0 + 0 +POLYLINE + 5 +136 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1EF1 + 8 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1EF2 + 8 +0 + 10 +-26.516504 + 20 +-26.516504 + 30 +0.0 + 0 +SEQEND + 5 +1EF3 + 8 +0 + 0 +ENDBLK + 5 +13A + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X3 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X3 + 1 + + 0 +LINE + 5 +13C + 8 +0 + 62 + 0 + 10 +7394.110755 + 20 +10965.0 + 30 +0.0 + 11 +7406.943533 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +13D + 8 +0 + 62 + 0 + 10 +7424.621202 + 20 +10995.510447 + 30 +0.0 + 11 +7442.298872 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +13E + 8 +0 + 62 + 0 + 10 +7459.976542 + 20 +11030.865787 + 30 +0.0 + 11 +7477.654211 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +13F + 8 +0 + 62 + 0 + 10 +7358.755416 + 20 +10965.0 + 30 +0.0 + 11 +7371.588194 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +140 + 8 +0 + 62 + 0 + 10 +7389.265863 + 20 +10995.510447 + 30 +0.0 + 11 +7406.943533 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +141 + 8 +0 + 62 + 0 + 10 +7424.621202 + 20 +11030.865787 + 30 +0.0 + 11 +7442.298872 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +142 + 8 +0 + 62 + 0 + 10 +7323.400077 + 20 +10965.0 + 30 +0.0 + 11 +7336.232855 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +143 + 8 +0 + 62 + 0 + 10 +7353.910524 + 20 +10995.510447 + 30 +0.0 + 11 +7371.588194 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +144 + 8 +0 + 62 + 0 + 10 +7389.265863 + 20 +11030.865787 + 30 +0.0 + 11 +7406.943533 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +145 + 8 +0 + 62 + 0 + 10 +7288.044738 + 20 +10965.0 + 30 +0.0 + 11 +7300.877516 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +146 + 8 +0 + 62 + 0 + 10 +7318.555185 + 20 +10995.510447 + 30 +0.0 + 11 +7336.232855 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +147 + 8 +0 + 62 + 0 + 10 +7353.910524 + 20 +11030.865787 + 30 +0.0 + 11 +7371.588194 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +148 + 8 +0 + 62 + 0 + 10 +7252.689399 + 20 +10965.0 + 30 +0.0 + 11 +7265.522177 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +149 + 8 +0 + 62 + 0 + 10 +7283.199846 + 20 +10995.510447 + 30 +0.0 + 11 +7300.877516 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +14A + 8 +0 + 62 + 0 + 10 +7318.555185 + 20 +11030.865787 + 30 +0.0 + 11 +7336.232855 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +14B + 8 +0 + 62 + 0 + 10 +7217.33406 + 20 +10965.0 + 30 +0.0 + 11 +7230.166838 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +14C + 8 +0 + 62 + 0 + 10 +7247.844507 + 20 +10995.510447 + 30 +0.0 + 11 +7265.522177 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +14D + 8 +0 + 62 + 0 + 10 +7283.199846 + 20 +11030.865787 + 30 +0.0 + 11 +7300.877516 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +14E + 8 +0 + 62 + 0 + 10 +7181.978721 + 20 +10965.0 + 30 +0.0 + 11 +7194.811499 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +14F + 8 +0 + 62 + 0 + 10 +7212.489168 + 20 +10995.510447 + 30 +0.0 + 11 +7230.166838 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +150 + 8 +0 + 62 + 0 + 10 +7247.844507 + 20 +11030.865787 + 30 +0.0 + 11 +7265.522177 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +151 + 8 +0 + 62 + 0 + 10 +7146.623382 + 20 +10965.0 + 30 +0.0 + 11 +7159.45616 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +152 + 8 +0 + 62 + 0 + 10 +7177.133829 + 20 +10995.510447 + 30 +0.0 + 11 +7194.811499 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +153 + 8 +0 + 62 + 0 + 10 +7212.489168 + 20 +11030.865787 + 30 +0.0 + 11 +7230.166838 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +154 + 8 +0 + 62 + 0 + 10 +7111.268043 + 20 +10965.0 + 30 +0.0 + 11 +7124.10082 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +155 + 8 +0 + 62 + 0 + 10 +7141.77849 + 20 +10995.510447 + 30 +0.0 + 11 +7159.45616 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +156 + 8 +0 + 62 + 0 + 10 +7177.133829 + 20 +11030.865787 + 30 +0.0 + 11 +7194.811499 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +157 + 8 +0 + 62 + 0 + 10 +7075.912703 + 20 +10965.0 + 30 +0.0 + 11 +7088.745481 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +158 + 8 +0 + 62 + 0 + 10 +7106.423151 + 20 +10995.510447 + 30 +0.0 + 11 +7124.10082 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +159 + 8 +0 + 62 + 0 + 10 +7141.77849 + 20 +11030.865787 + 30 +0.0 + 11 +7159.45616 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +15A + 8 +0 + 62 + 0 + 10 +7040.557364 + 20 +10965.0 + 30 +0.0 + 11 +7053.390142 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +15B + 8 +0 + 62 + 0 + 10 +7071.067812 + 20 +10995.510447 + 30 +0.0 + 11 +7088.745481 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +15C + 8 +0 + 62 + 0 + 10 +7106.423151 + 20 +11030.865787 + 30 +0.0 + 11 +7124.10082 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +15D + 8 +0 + 62 + 0 + 10 +7005.202025 + 20 +10965.0 + 30 +0.0 + 11 +7018.034803 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +15E + 8 +0 + 62 + 0 + 10 +7035.712473 + 20 +10995.510447 + 30 +0.0 + 11 +7053.390142 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +15F + 8 +0 + 62 + 0 + 10 +7071.067812 + 20 +11030.865787 + 30 +0.0 + 11 +7088.745481 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +160 + 8 +0 + 62 + 0 + 10 +6969.846686 + 20 +10965.0 + 30 +0.0 + 11 +6982.679464 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +161 + 8 +0 + 62 + 0 + 10 +7000.357134 + 20 +10995.510447 + 30 +0.0 + 11 +7018.034803 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +162 + 8 +0 + 62 + 0 + 10 +7035.712473 + 20 +11030.865787 + 30 +0.0 + 11 +7053.390142 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +163 + 8 +0 + 62 + 0 + 10 +6934.491347 + 20 +10965.0 + 30 +0.0 + 11 +6947.324125 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +164 + 8 +0 + 62 + 0 + 10 +6965.001795 + 20 +10995.510447 + 30 +0.0 + 11 +6982.679464 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +165 + 8 +0 + 62 + 0 + 10 +7000.357134 + 20 +11030.865787 + 30 +0.0 + 11 +7018.034803 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +166 + 8 +0 + 62 + 0 + 10 +6899.136008 + 20 +10965.0 + 30 +0.0 + 11 +6911.968786 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +167 + 8 +0 + 62 + 0 + 10 +6929.646456 + 20 +10995.510447 + 30 +0.0 + 11 +6947.324125 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +168 + 8 +0 + 62 + 0 + 10 +6965.001795 + 20 +11030.865787 + 30 +0.0 + 11 +6982.679464 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +169 + 8 +0 + 62 + 0 + 10 +6863.780669 + 20 +10965.0 + 30 +0.0 + 11 +6876.613447 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +16A + 8 +0 + 62 + 0 + 10 +6894.291117 + 20 +10995.510447 + 30 +0.0 + 11 +6911.968786 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +16B + 8 +0 + 62 + 0 + 10 +6929.646456 + 20 +11030.865787 + 30 +0.0 + 11 +6947.324125 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +16C + 8 +0 + 62 + 0 + 10 +6828.42533 + 20 +10965.0 + 30 +0.0 + 11 +6841.258108 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +16D + 8 +0 + 62 + 0 + 10 +6858.935778 + 20 +10995.510447 + 30 +0.0 + 11 +6876.613447 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +16E + 8 +0 + 62 + 0 + 10 +6894.291117 + 20 +11030.865787 + 30 +0.0 + 11 +6911.968786 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +16F + 8 +0 + 62 + 0 + 10 +6793.069991 + 20 +10965.0 + 30 +0.0 + 11 +6805.902769 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +170 + 8 +0 + 62 + 0 + 10 +6823.580438 + 20 +10995.510447 + 30 +0.0 + 11 +6841.258108 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +171 + 8 +0 + 62 + 0 + 10 +6858.935778 + 20 +11030.865787 + 30 +0.0 + 11 +6876.613447 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +172 + 8 +0 + 62 + 0 + 10 +6757.714652 + 20 +10965.0 + 30 +0.0 + 11 +6770.54743 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +173 + 8 +0 + 62 + 0 + 10 +6788.225099 + 20 +10995.510447 + 30 +0.0 + 11 +6805.902769 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +174 + 8 +0 + 62 + 0 + 10 +6823.580438 + 20 +11030.865787 + 30 +0.0 + 11 +6841.258108 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +175 + 8 +0 + 62 + 0 + 10 +6722.359313 + 20 +10965.0 + 30 +0.0 + 11 +6735.192091 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +176 + 8 +0 + 62 + 0 + 10 +6752.86976 + 20 +10995.510447 + 30 +0.0 + 11 +6770.54743 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +177 + 8 +0 + 62 + 0 + 10 +6788.225099 + 20 +11030.865787 + 30 +0.0 + 11 +6805.902769 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +178 + 8 +0 + 62 + 0 + 10 +6717.514421 + 20 +10995.510447 + 30 +0.0 + 11 +6735.192091 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +179 + 8 +0 + 62 + 0 + 10 +6752.86976 + 20 +11030.865787 + 30 +0.0 + 11 +6770.54743 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +17A + 8 +0 + 62 + 0 + 10 +6717.514421 + 20 +11030.865787 + 30 +0.0 + 11 +6735.192091 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +17B + 8 +0 + 62 + 0 + 10 +7429.466094 + 20 +10965.0 + 30 +0.0 + 11 +7442.298872 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +17C + 8 +0 + 62 + 0 + 10 +7459.976542 + 20 +10995.510447 + 30 +0.0 + 11 +7477.654211 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +17D + 8 +0 + 62 + 0 + 10 +7495.331881 + 20 +11030.865787 + 30 +0.0 + 11 +7513.00955 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +17E + 8 +0 + 62 + 0 + 10 +7464.821433 + 20 +10965.0 + 30 +0.0 + 11 +7477.654211 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +17F + 8 +0 + 62 + 0 + 10 +7495.331881 + 20 +10995.510447 + 30 +0.0 + 11 +7513.00955 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +180 + 8 +0 + 62 + 0 + 10 +7530.68722 + 20 +11030.865787 + 30 +0.0 + 11 +7548.364889 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +181 + 8 +0 + 62 + 0 + 10 +7500.176772 + 20 +10965.0 + 30 +0.0 + 11 +7513.00955 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +182 + 8 +0 + 62 + 0 + 10 +7530.68722 + 20 +10995.510447 + 30 +0.0 + 11 +7548.364889 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +183 + 8 +0 + 62 + 0 + 10 +7566.042559 + 20 +11030.865787 + 30 +0.0 + 11 +7583.720228 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +184 + 8 +0 + 62 + 0 + 10 +7535.532111 + 20 +10965.0 + 30 +0.0 + 11 +7548.364889 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +185 + 8 +0 + 62 + 0 + 10 +7566.042559 + 20 +10995.510447 + 30 +0.0 + 11 +7583.720228 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +186 + 8 +0 + 62 + 0 + 10 +7601.397898 + 20 +11030.865787 + 30 +0.0 + 11 +7619.075567 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +187 + 8 +0 + 62 + 0 + 10 +7570.88745 + 20 +10965.0 + 30 +0.0 + 11 +7583.720228 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +188 + 8 +0 + 62 + 0 + 10 +7601.397898 + 20 +10995.510447 + 30 +0.0 + 11 +7619.075567 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +189 + 8 +0 + 62 + 0 + 10 +7636.753237 + 20 +11030.865787 + 30 +0.0 + 11 +7654.430906 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +18A + 8 +0 + 62 + 0 + 10 +7606.242789 + 20 +10965.0 + 30 +0.0 + 11 +7619.075567 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +18B + 8 +0 + 62 + 0 + 10 +7636.753237 + 20 +10995.510447 + 30 +0.0 + 11 +7654.430906 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +18C + 8 +0 + 62 + 0 + 10 +7672.108576 + 20 +11030.865787 + 30 +0.0 + 11 +7689.786245 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +18D + 8 +0 + 62 + 0 + 10 +7641.598128 + 20 +10965.0 + 30 +0.0 + 11 +7654.430906 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +18E + 8 +0 + 62 + 0 + 10 +7672.108576 + 20 +10995.510447 + 30 +0.0 + 11 +7689.786245 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +18F + 8 +0 + 62 + 0 + 10 +7707.463915 + 20 +11030.865787 + 30 +0.0 + 11 +7725.141584 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +190 + 8 +0 + 62 + 0 + 10 +7676.953467 + 20 +10965.0 + 30 +0.0 + 11 +7689.786245 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +191 + 8 +0 + 62 + 0 + 10 +7707.463915 + 20 +10995.510447 + 30 +0.0 + 11 +7725.141584 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +192 + 8 +0 + 62 + 0 + 10 +7742.819254 + 20 +11030.865787 + 30 +0.0 + 11 +7760.496924 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +193 + 8 +0 + 62 + 0 + 10 +7712.308807 + 20 +10965.0 + 30 +0.0 + 11 +7725.141584 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +194 + 8 +0 + 62 + 0 + 10 +7742.819254 + 20 +10995.510447 + 30 +0.0 + 11 +7760.496924 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +195 + 8 +0 + 62 + 0 + 10 +7778.174593 + 20 +11030.865787 + 30 +0.0 + 11 +7795.852263 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +196 + 8 +0 + 62 + 0 + 10 +7747.664146 + 20 +10965.0 + 30 +0.0 + 11 +7760.496924 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +197 + 8 +0 + 62 + 0 + 10 +7778.174593 + 20 +10995.510447 + 30 +0.0 + 11 +7795.852263 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +198 + 8 +0 + 62 + 0 + 10 +7813.529932 + 20 +11030.865787 + 30 +0.0 + 11 +7831.207602 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +199 + 8 +0 + 62 + 0 + 10 +7783.019485 + 20 +10965.0 + 30 +0.0 + 11 +7795.852263 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +19A + 8 +0 + 62 + 0 + 10 +7813.529932 + 20 +10995.510447 + 30 +0.0 + 11 +7831.207602 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +19B + 8 +0 + 62 + 0 + 10 +7848.885271 + 20 +11030.865787 + 30 +0.0 + 11 +7866.562941 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +19C + 8 +0 + 62 + 0 + 10 +7818.374824 + 20 +10965.0 + 30 +0.0 + 11 +7831.207602 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +19D + 8 +0 + 62 + 0 + 10 +7848.885271 + 20 +10995.510447 + 30 +0.0 + 11 +7866.562941 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +19E + 8 +0 + 62 + 0 + 10 +7884.24061 + 20 +11030.865787 + 30 +0.0 + 11 +7901.91828 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +19F + 8 +0 + 62 + 0 + 10 +7853.730163 + 20 +10965.0 + 30 +0.0 + 11 +7866.562941 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +1A0 + 8 +0 + 62 + 0 + 10 +7884.24061 + 20 +10995.510447 + 30 +0.0 + 11 +7901.91828 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +1A1 + 8 +0 + 62 + 0 + 10 +7919.595949 + 20 +11030.865787 + 30 +0.0 + 11 +7937.273619 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +1A2 + 8 +0 + 62 + 0 + 10 +7889.085502 + 20 +10965.0 + 30 +0.0 + 11 +7901.91828 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +1A3 + 8 +0 + 62 + 0 + 10 +7919.595949 + 20 +10995.510447 + 30 +0.0 + 11 +7937.273619 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +1A4 + 8 +0 + 62 + 0 + 10 +7954.951288 + 20 +11030.865787 + 30 +0.0 + 11 +7972.628958 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +1A5 + 8 +0 + 62 + 0 + 10 +7924.440841 + 20 +10965.0 + 30 +0.0 + 11 +7937.273619 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +1A6 + 8 +0 + 62 + 0 + 10 +7954.951288 + 20 +10995.510447 + 30 +0.0 + 11 +7972.628958 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +1A7 + 8 +0 + 62 + 0 + 10 +7990.306627 + 20 +11030.865787 + 30 +0.0 + 11 +8007.984297 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +1A8 + 8 +0 + 62 + 0 + 10 +7959.79618 + 20 +10965.0 + 30 +0.0 + 11 +7972.628958 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +1A9 + 8 +0 + 62 + 0 + 10 +7990.306627 + 20 +10995.510447 + 30 +0.0 + 11 +8007.984297 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +1AA + 8 +0 + 62 + 0 + 10 +8025.661966 + 20 +11030.865787 + 30 +0.0 + 11 +8043.339636 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +1AB + 8 +0 + 62 + 0 + 10 +7995.151519 + 20 +10965.0 + 30 +0.0 + 11 +8007.984297 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +1AC + 8 +0 + 62 + 0 + 10 +8025.661966 + 20 +10995.510447 + 30 +0.0 + 11 +8043.339636 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +1AD + 8 +0 + 62 + 0 + 10 +8061.017306 + 20 +11030.865787 + 30 +0.0 + 11 +8078.694975 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +1AE + 8 +0 + 62 + 0 + 10 +8030.506858 + 20 +10965.0 + 30 +0.0 + 11 +8043.339636 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +1AF + 8 +0 + 62 + 0 + 10 +8061.017306 + 20 +10995.510447 + 30 +0.0 + 11 +8078.694975 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +1B0 + 8 +0 + 62 + 0 + 10 +8096.372645 + 20 +11030.865787 + 30 +0.0 + 11 +8114.050314 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +1B1 + 8 +0 + 62 + 0 + 10 +8065.862197 + 20 +10965.0 + 30 +0.0 + 11 +8078.694975 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +1B2 + 8 +0 + 62 + 0 + 10 +8096.372645 + 20 +10995.510447 + 30 +0.0 + 11 +8114.050314 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +1B3 + 8 +0 + 62 + 0 + 10 +8131.727984 + 20 +11030.865787 + 30 +0.0 + 11 +8149.405653 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +1B4 + 8 +0 + 62 + 0 + 10 +8101.217536 + 20 +10965.0 + 30 +0.0 + 11 +8114.050314 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +1B5 + 8 +0 + 62 + 0 + 10 +8131.727984 + 20 +10995.510447 + 30 +0.0 + 11 +8149.405653 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +1B6 + 8 +0 + 62 + 0 + 10 +8167.083323 + 20 +11030.865787 + 30 +0.0 + 11 +8175.0 + 21 +11038.782464 + 31 +0.0 + 0 +LINE + 5 +1B7 + 8 +0 + 62 + 0 + 10 +8136.572875 + 20 +10965.0 + 30 +0.0 + 11 +8149.405653 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +1B8 + 8 +0 + 62 + 0 + 10 +8167.083323 + 20 +10995.510447 + 30 +0.0 + 11 +8175.0 + 21 +11003.427125 + 31 +0.0 + 0 +LINE + 5 +1B9 + 8 +0 + 62 + 0 + 10 +8171.928214 + 20 +10965.0 + 30 +0.0 + 11 +8175.0 + 21 +10968.071786 + 31 +0.0 + 0 +ENDBLK + 5 +1BA + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X4 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X4 + 1 + + 0 +LINE + 5 +1BC + 8 +0 + 62 + 0 + 10 +6750.0 + 20 +10868.61877 + 30 +0.0 + 11 +6775.0 + 21 +10868.61877 + 31 +0.0 + 0 +LINE + 5 +1BD + 8 +0 + 62 + 0 + 10 +6825.0 + 20 +10868.61877 + 30 +0.0 + 11 +6850.0 + 21 +10868.61877 + 31 +0.0 + 0 +LINE + 5 +1BE + 8 +0 + 62 + 0 + 10 +6900.0 + 20 +10868.61877 + 30 +0.0 + 11 +6925.0 + 21 +10868.61877 + 31 +0.0 + 0 +LINE + 5 +1BF + 8 +0 + 62 + 0 + 10 +6975.0 + 20 +10868.61877 + 30 +0.0 + 11 +7000.0 + 21 +10868.61877 + 31 +0.0 + 0 +LINE + 5 +1C0 + 8 +0 + 62 + 0 + 10 +7050.0 + 20 +10868.61877 + 30 +0.0 + 11 +7075.0 + 21 +10868.61877 + 31 +0.0 + 0 +LINE + 5 +1C1 + 8 +0 + 62 + 0 + 10 +7125.0 + 20 +10868.61877 + 30 +0.0 + 11 +7150.0 + 21 +10868.61877 + 31 +0.0 + 0 +LINE + 5 +1C2 + 8 +0 + 62 + 0 + 10 +7200.0 + 20 +10868.61877 + 30 +0.0 + 11 +7225.0 + 21 +10868.61877 + 31 +0.0 + 0 +LINE + 5 +1C3 + 8 +0 + 62 + 0 + 10 +7275.0 + 20 +10868.61877 + 30 +0.0 + 11 +7300.0 + 21 +10868.61877 + 31 +0.0 + 0 +LINE + 5 +1C4 + 8 +0 + 62 + 0 + 10 +7350.0 + 20 +10868.61877 + 30 +0.0 + 11 +7375.0 + 21 +10868.61877 + 31 +0.0 + 0 +LINE + 5 +1C5 + 8 +0 + 62 + 0 + 10 +7425.0 + 20 +10868.61877 + 30 +0.0 + 11 +7450.0 + 21 +10868.61877 + 31 +0.0 + 0 +LINE + 5 +1C6 + 8 +0 + 62 + 0 + 10 +7500.0 + 20 +10868.61877 + 30 +0.0 + 11 +7525.0 + 21 +10868.61877 + 31 +0.0 + 0 +LINE + 5 +1C7 + 8 +0 + 62 + 0 + 10 +7575.0 + 20 +10868.61877 + 30 +0.0 + 11 +7600.0 + 21 +10868.61877 + 31 +0.0 + 0 +LINE + 5 +1C8 + 8 +0 + 62 + 0 + 10 +7650.0 + 20 +10868.61877 + 30 +0.0 + 11 +7675.0 + 21 +10868.61877 + 31 +0.0 + 0 +LINE + 5 +1C9 + 8 +0 + 62 + 0 + 10 +7725.0 + 20 +10868.61877 + 30 +0.0 + 11 +7750.0 + 21 +10868.61877 + 31 +0.0 + 0 +LINE + 5 +1CA + 8 +0 + 62 + 0 + 10 +7800.0 + 20 +10868.61877 + 30 +0.0 + 11 +7825.0 + 21 +10868.61877 + 31 +0.0 + 0 +LINE + 5 +1CB + 8 +0 + 62 + 0 + 10 +7875.0 + 20 +10868.61877 + 30 +0.0 + 11 +7900.0 + 21 +10868.61877 + 31 +0.0 + 0 +LINE + 5 +1CC + 8 +0 + 62 + 0 + 10 +7950.0 + 20 +10868.61877 + 30 +0.0 + 11 +7975.0 + 21 +10868.61877 + 31 +0.0 + 0 +LINE + 5 +1CD + 8 +0 + 62 + 0 + 10 +8025.0 + 20 +10868.61877 + 30 +0.0 + 11 +8050.0 + 21 +10868.61877 + 31 +0.0 + 0 +LINE + 5 +1CE + 8 +0 + 62 + 0 + 10 +8100.0 + 20 +10868.61877 + 30 +0.0 + 11 +8125.0 + 21 +10868.61877 + 31 +0.0 + 0 +LINE + 5 +1CF + 8 +0 + 62 + 0 + 10 +6712.5 + 20 +10890.269405 + 30 +0.0 + 11 +6737.5 + 21 +10890.269405 + 31 +0.0 + 0 +LINE + 5 +1D0 + 8 +0 + 62 + 0 + 10 +6787.5 + 20 +10890.269405 + 30 +0.0 + 11 +6812.5 + 21 +10890.269405 + 31 +0.0 + 0 +LINE + 5 +1D1 + 8 +0 + 62 + 0 + 10 +6862.5 + 20 +10890.269405 + 30 +0.0 + 11 +6887.5 + 21 +10890.269405 + 31 +0.0 + 0 +LINE + 5 +1D2 + 8 +0 + 62 + 0 + 10 +6937.5 + 20 +10890.269405 + 30 +0.0 + 11 +6962.5 + 21 +10890.269405 + 31 +0.0 + 0 +LINE + 5 +1D3 + 8 +0 + 62 + 0 + 10 +7012.5 + 20 +10890.269405 + 30 +0.0 + 11 +7037.5 + 21 +10890.269405 + 31 +0.0 + 0 +LINE + 5 +1D4 + 8 +0 + 62 + 0 + 10 +7087.5 + 20 +10890.269405 + 30 +0.0 + 11 +7112.5 + 21 +10890.269405 + 31 +0.0 + 0 +LINE + 5 +1D5 + 8 +0 + 62 + 0 + 10 +7162.5 + 20 +10890.269405 + 30 +0.0 + 11 +7187.5 + 21 +10890.269405 + 31 +0.0 + 0 +LINE + 5 +1D6 + 8 +0 + 62 + 0 + 10 +7237.5 + 20 +10890.269405 + 30 +0.0 + 11 +7262.5 + 21 +10890.269405 + 31 +0.0 + 0 +LINE + 5 +1D7 + 8 +0 + 62 + 0 + 10 +7312.5 + 20 +10890.269405 + 30 +0.0 + 11 +7337.5 + 21 +10890.269405 + 31 +0.0 + 0 +LINE + 5 +1D8 + 8 +0 + 62 + 0 + 10 +7387.5 + 20 +10890.269405 + 30 +0.0 + 11 +7412.5 + 21 +10890.269405 + 31 +0.0 + 0 +LINE + 5 +1D9 + 8 +0 + 62 + 0 + 10 +7462.5 + 20 +10890.269405 + 30 +0.0 + 11 +7487.5 + 21 +10890.269405 + 31 +0.0 + 0 +LINE + 5 +1DA + 8 +0 + 62 + 0 + 10 +7537.5 + 20 +10890.269405 + 30 +0.0 + 11 +7562.5 + 21 +10890.269405 + 31 +0.0 + 0 +LINE + 5 +1DB + 8 +0 + 62 + 0 + 10 +7612.5 + 20 +10890.269405 + 30 +0.0 + 11 +7637.5 + 21 +10890.269405 + 31 +0.0 + 0 +LINE + 5 +1DC + 8 +0 + 62 + 0 + 10 +7687.5 + 20 +10890.269405 + 30 +0.0 + 11 +7712.5 + 21 +10890.269405 + 31 +0.0 + 0 +LINE + 5 +1DD + 8 +0 + 62 + 0 + 10 +7762.5 + 20 +10890.269405 + 30 +0.0 + 11 +7787.5 + 21 +10890.269405 + 31 +0.0 + 0 +LINE + 5 +1DE + 8 +0 + 62 + 0 + 10 +7837.5 + 20 +10890.269405 + 30 +0.0 + 11 +7862.5 + 21 +10890.269405 + 31 +0.0 + 0 +LINE + 5 +1DF + 8 +0 + 62 + 0 + 10 +7912.5 + 20 +10890.269405 + 30 +0.0 + 11 +7937.5 + 21 +10890.269405 + 31 +0.0 + 0 +LINE + 5 +1E0 + 8 +0 + 62 + 0 + 10 +7987.5 + 20 +10890.269405 + 30 +0.0 + 11 +8012.5 + 21 +10890.269405 + 31 +0.0 + 0 +LINE + 5 +1E1 + 8 +0 + 62 + 0 + 10 +8062.5 + 20 +10890.269405 + 30 +0.0 + 11 +8087.5 + 21 +10890.269405 + 31 +0.0 + 0 +LINE + 5 +1E2 + 8 +0 + 62 + 0 + 10 +8137.5 + 20 +10890.269405 + 30 +0.0 + 11 +8162.5 + 21 +10890.269405 + 31 +0.0 + 0 +LINE + 5 +1E3 + 8 +0 + 62 + 0 + 10 +6750.0 + 20 +10911.92004 + 30 +0.0 + 11 +6775.0 + 21 +10911.92004 + 31 +0.0 + 0 +LINE + 5 +1E4 + 8 +0 + 62 + 0 + 10 +6825.0 + 20 +10911.92004 + 30 +0.0 + 11 +6850.0 + 21 +10911.92004 + 31 +0.0 + 0 +LINE + 5 +1E5 + 8 +0 + 62 + 0 + 10 +6900.0 + 20 +10911.92004 + 30 +0.0 + 11 +6925.0 + 21 +10911.92004 + 31 +0.0 + 0 +LINE + 5 +1E6 + 8 +0 + 62 + 0 + 10 +6975.0 + 20 +10911.92004 + 30 +0.0 + 11 +7000.0 + 21 +10911.92004 + 31 +0.0 + 0 +LINE + 5 +1E7 + 8 +0 + 62 + 0 + 10 +7050.0 + 20 +10911.92004 + 30 +0.0 + 11 +7075.0 + 21 +10911.92004 + 31 +0.0 + 0 +LINE + 5 +1E8 + 8 +0 + 62 + 0 + 10 +7125.0 + 20 +10911.92004 + 30 +0.0 + 11 +7150.0 + 21 +10911.92004 + 31 +0.0 + 0 +LINE + 5 +1E9 + 8 +0 + 62 + 0 + 10 +7200.0 + 20 +10911.92004 + 30 +0.0 + 11 +7225.0 + 21 +10911.92004 + 31 +0.0 + 0 +LINE + 5 +1EA + 8 +0 + 62 + 0 + 10 +7275.0 + 20 +10911.92004 + 30 +0.0 + 11 +7300.0 + 21 +10911.92004 + 31 +0.0 + 0 +LINE + 5 +1EB + 8 +0 + 62 + 0 + 10 +7350.0 + 20 +10911.92004 + 30 +0.0 + 11 +7375.0 + 21 +10911.92004 + 31 +0.0 + 0 +LINE + 5 +1EC + 8 +0 + 62 + 0 + 10 +7425.0 + 20 +10911.92004 + 30 +0.0 + 11 +7450.0 + 21 +10911.92004 + 31 +0.0 + 0 +LINE + 5 +1ED + 8 +0 + 62 + 0 + 10 +7500.0 + 20 +10911.92004 + 30 +0.0 + 11 +7525.0 + 21 +10911.92004 + 31 +0.0 + 0 +LINE + 5 +1EE + 8 +0 + 62 + 0 + 10 +7575.0 + 20 +10911.92004 + 30 +0.0 + 11 +7600.0 + 21 +10911.92004 + 31 +0.0 + 0 +LINE + 5 +1EF + 8 +0 + 62 + 0 + 10 +7650.0 + 20 +10911.92004 + 30 +0.0 + 11 +7675.0 + 21 +10911.92004 + 31 +0.0 + 0 +LINE + 5 +1F0 + 8 +0 + 62 + 0 + 10 +7725.0 + 20 +10911.92004 + 30 +0.0 + 11 +7750.0 + 21 +10911.92004 + 31 +0.0 + 0 +LINE + 5 +1F1 + 8 +0 + 62 + 0 + 10 +7800.0 + 20 +10911.92004 + 30 +0.0 + 11 +7825.0 + 21 +10911.92004 + 31 +0.0 + 0 +LINE + 5 +1F2 + 8 +0 + 62 + 0 + 10 +7875.0 + 20 +10911.92004 + 30 +0.0 + 11 +7900.0 + 21 +10911.92004 + 31 +0.0 + 0 +LINE + 5 +1F3 + 8 +0 + 62 + 0 + 10 +7950.0 + 20 +10911.92004 + 30 +0.0 + 11 +7975.0 + 21 +10911.92004 + 31 +0.0 + 0 +LINE + 5 +1F4 + 8 +0 + 62 + 0 + 10 +8025.0 + 20 +10911.92004 + 30 +0.0 + 11 +8050.0 + 21 +10911.92004 + 31 +0.0 + 0 +LINE + 5 +1F5 + 8 +0 + 62 + 0 + 10 +8100.0 + 20 +10911.92004 + 30 +0.0 + 11 +8125.0 + 21 +10911.92004 + 31 +0.0 + 0 +LINE + 5 +1F6 + 8 +0 + 62 + 0 + 10 +6712.5 + 20 +10846.968135 + 30 +0.0 + 11 +6737.5 + 21 +10846.968135 + 31 +0.0 + 0 +LINE + 5 +1F7 + 8 +0 + 62 + 0 + 10 +6787.5 + 20 +10846.968135 + 30 +0.0 + 11 +6812.5 + 21 +10846.968135 + 31 +0.0 + 0 +LINE + 5 +1F8 + 8 +0 + 62 + 0 + 10 +6862.5 + 20 +10846.968135 + 30 +0.0 + 11 +6887.5 + 21 +10846.968135 + 31 +0.0 + 0 +LINE + 5 +1F9 + 8 +0 + 62 + 0 + 10 +6937.5 + 20 +10846.968135 + 30 +0.0 + 11 +6962.5 + 21 +10846.968135 + 31 +0.0 + 0 +LINE + 5 +1FA + 8 +0 + 62 + 0 + 10 +7012.5 + 20 +10846.968135 + 30 +0.0 + 11 +7037.5 + 21 +10846.968135 + 31 +0.0 + 0 +LINE + 5 +1FB + 8 +0 + 62 + 0 + 10 +7087.5 + 20 +10846.968135 + 30 +0.0 + 11 +7112.5 + 21 +10846.968135 + 31 +0.0 + 0 +LINE + 5 +1FC + 8 +0 + 62 + 0 + 10 +7162.5 + 20 +10846.968135 + 30 +0.0 + 11 +7187.5 + 21 +10846.968135 + 31 +0.0 + 0 +LINE + 5 +1FD + 8 +0 + 62 + 0 + 10 +7237.5 + 20 +10846.968135 + 30 +0.0 + 11 +7262.5 + 21 +10846.968135 + 31 +0.0 + 0 +LINE + 5 +1FE + 8 +0 + 62 + 0 + 10 +7312.5 + 20 +10846.968135 + 30 +0.0 + 11 +7337.5 + 21 +10846.968135 + 31 +0.0 + 0 +LINE + 5 +1FF + 8 +0 + 62 + 0 + 10 +7387.5 + 20 +10846.968135 + 30 +0.0 + 11 +7412.5 + 21 +10846.968135 + 31 +0.0 + 0 +LINE + 5 +200 + 8 +0 + 62 + 0 + 10 +7462.5 + 20 +10846.968135 + 30 +0.0 + 11 +7487.5 + 21 +10846.968135 + 31 +0.0 + 0 +LINE + 5 +201 + 8 +0 + 62 + 0 + 10 +7537.5 + 20 +10846.968135 + 30 +0.0 + 11 +7562.5 + 21 +10846.968135 + 31 +0.0 + 0 +LINE + 5 +202 + 8 +0 + 62 + 0 + 10 +7612.5 + 20 +10846.968135 + 30 +0.0 + 11 +7637.5 + 21 +10846.968135 + 31 +0.0 + 0 +LINE + 5 +203 + 8 +0 + 62 + 0 + 10 +7687.5 + 20 +10846.968135 + 30 +0.0 + 11 +7712.5 + 21 +10846.968135 + 31 +0.0 + 0 +LINE + 5 +204 + 8 +0 + 62 + 0 + 10 +7762.5 + 20 +10846.968135 + 30 +0.0 + 11 +7787.5 + 21 +10846.968135 + 31 +0.0 + 0 +LINE + 5 +205 + 8 +0 + 62 + 0 + 10 +7837.5 + 20 +10846.968135 + 30 +0.0 + 11 +7862.5 + 21 +10846.968135 + 31 +0.0 + 0 +LINE + 5 +206 + 8 +0 + 62 + 0 + 10 +7912.5 + 20 +10846.968135 + 30 +0.0 + 11 +7937.5 + 21 +10846.968135 + 31 +0.0 + 0 +LINE + 5 +207 + 8 +0 + 62 + 0 + 10 +7987.5 + 20 +10846.968135 + 30 +0.0 + 11 +8012.5 + 21 +10846.968135 + 31 +0.0 + 0 +LINE + 5 +208 + 8 +0 + 62 + 0 + 10 +8062.5 + 20 +10846.968135 + 30 +0.0 + 11 +8087.5 + 21 +10846.968135 + 31 +0.0 + 0 +LINE + 5 +209 + 8 +0 + 62 + 0 + 10 +8137.5 + 20 +10846.968135 + 30 +0.0 + 11 +8162.5 + 21 +10846.968135 + 31 +0.0 + 0 +LINE + 5 +20A + 8 +0 + 62 + 0 + 10 +7424.999955 + 20 +10868.618792 + 30 +0.0 + 11 +7412.499955 + 21 +10890.269427 + 31 +0.0 + 0 +LINE + 5 +20B + 8 +0 + 62 + 0 + 10 +7423.739901 + 20 +10827.5 + 30 +0.0 + 11 +7412.499955 + 21 +10846.968157 + 31 +0.0 + 0 +LINE + 5 +20C + 8 +0 + 62 + 0 + 10 +7387.499955 + 20 +10890.269427 + 30 +0.0 + 11 +7374.999955 + 21 +10911.920062 + 31 +0.0 + 0 +LINE + 5 +20D + 8 +0 + 62 + 0 + 10 +7387.499955 + 20 +10846.968157 + 30 +0.0 + 11 +7374.999955 + 21 +10868.618792 + 31 +0.0 + 0 +LINE + 5 +20E + 8 +0 + 62 + 0 + 10 +7349.999955 + 20 +10911.920062 + 30 +0.0 + 11 +7341.004874 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +20F + 8 +0 + 62 + 0 + 10 +7349.999955 + 20 +10868.618792 + 30 +0.0 + 11 +7337.499955 + 21 +10890.269427 + 31 +0.0 + 0 +LINE + 5 +210 + 8 +0 + 62 + 0 + 10 +7348.739901 + 20 +10827.5 + 30 +0.0 + 11 +7337.499955 + 21 +10846.968157 + 31 +0.0 + 0 +LINE + 5 +211 + 8 +0 + 62 + 0 + 10 +7312.499955 + 20 +10890.269427 + 30 +0.0 + 11 +7299.999955 + 21 +10911.920062 + 31 +0.0 + 0 +LINE + 5 +212 + 8 +0 + 62 + 0 + 10 +7312.499956 + 20 +10846.968157 + 30 +0.0 + 11 +7299.999956 + 21 +10868.618792 + 31 +0.0 + 0 +LINE + 5 +213 + 8 +0 + 62 + 0 + 10 +7274.999956 + 20 +10911.920062 + 30 +0.0 + 11 +7266.004874 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +214 + 8 +0 + 62 + 0 + 10 +7274.999956 + 20 +10868.618792 + 30 +0.0 + 11 +7262.499956 + 21 +10890.269427 + 31 +0.0 + 0 +LINE + 5 +215 + 8 +0 + 62 + 0 + 10 +7273.739901 + 20 +10827.5 + 30 +0.0 + 11 +7262.499956 + 21 +10846.968157 + 31 +0.0 + 0 +LINE + 5 +216 + 8 +0 + 62 + 0 + 10 +7237.499956 + 20 +10890.269427 + 30 +0.0 + 11 +7224.999956 + 21 +10911.920062 + 31 +0.0 + 0 +LINE + 5 +217 + 8 +0 + 62 + 0 + 10 +7237.499956 + 20 +10846.968157 + 30 +0.0 + 11 +7224.999956 + 21 +10868.618792 + 31 +0.0 + 0 +LINE + 5 +218 + 8 +0 + 62 + 0 + 10 +7199.999956 + 20 +10911.920062 + 30 +0.0 + 11 +7191.004874 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +219 + 8 +0 + 62 + 0 + 10 +7199.999956 + 20 +10868.618792 + 30 +0.0 + 11 +7187.499956 + 21 +10890.269427 + 31 +0.0 + 0 +LINE + 5 +21A + 8 +0 + 62 + 0 + 10 +7198.739902 + 20 +10827.5 + 30 +0.0 + 11 +7187.499956 + 21 +10846.968157 + 31 +0.0 + 0 +LINE + 5 +21B + 8 +0 + 62 + 0 + 10 +7162.499956 + 20 +10890.269427 + 30 +0.0 + 11 +7149.999956 + 21 +10911.920062 + 31 +0.0 + 0 +LINE + 5 +21C + 8 +0 + 62 + 0 + 10 +7162.499956 + 20 +10846.968157 + 30 +0.0 + 11 +7149.999956 + 21 +10868.618792 + 31 +0.0 + 0 +LINE + 5 +21D + 8 +0 + 62 + 0 + 10 +7124.999956 + 20 +10911.920062 + 30 +0.0 + 11 +7116.004875 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +21E + 8 +0 + 62 + 0 + 10 +7124.999956 + 20 +10868.618792 + 30 +0.0 + 11 +7112.499956 + 21 +10890.269427 + 31 +0.0 + 0 +LINE + 5 +21F + 8 +0 + 62 + 0 + 10 +7123.739902 + 20 +10827.5 + 30 +0.0 + 11 +7112.499956 + 21 +10846.968157 + 31 +0.0 + 0 +LINE + 5 +220 + 8 +0 + 62 + 0 + 10 +7087.499956 + 20 +10890.269427 + 30 +0.0 + 11 +7074.999956 + 21 +10911.920062 + 31 +0.0 + 0 +LINE + 5 +221 + 8 +0 + 62 + 0 + 10 +7087.499956 + 20 +10846.968157 + 30 +0.0 + 11 +7074.999956 + 21 +10868.618792 + 31 +0.0 + 0 +LINE + 5 +222 + 8 +0 + 62 + 0 + 10 +7049.999956 + 20 +10911.920062 + 30 +0.0 + 11 +7041.004875 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +223 + 8 +0 + 62 + 0 + 10 +7049.999956 + 20 +10868.618792 + 30 +0.0 + 11 +7037.499956 + 21 +10890.269427 + 31 +0.0 + 0 +LINE + 5 +224 + 8 +0 + 62 + 0 + 10 +7048.739902 + 20 +10827.5 + 30 +0.0 + 11 +7037.499956 + 21 +10846.968157 + 31 +0.0 + 0 +LINE + 5 +225 + 8 +0 + 62 + 0 + 10 +7012.499956 + 20 +10890.269427 + 30 +0.0 + 11 +6999.999956 + 21 +10911.920063 + 31 +0.0 + 0 +LINE + 5 +226 + 8 +0 + 62 + 0 + 10 +7012.499956 + 20 +10846.968157 + 30 +0.0 + 11 +6999.999956 + 21 +10868.618792 + 31 +0.0 + 0 +LINE + 5 +227 + 8 +0 + 62 + 0 + 10 +6974.999956 + 20 +10911.920063 + 30 +0.0 + 11 +6966.004875 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +228 + 8 +0 + 62 + 0 + 10 +6974.999957 + 20 +10868.618792 + 30 +0.0 + 11 +6962.499957 + 21 +10890.269428 + 31 +0.0 + 0 +LINE + 5 +229 + 8 +0 + 62 + 0 + 10 +6973.739903 + 20 +10827.5 + 30 +0.0 + 11 +6962.499957 + 21 +10846.968157 + 31 +0.0 + 0 +LINE + 5 +22A + 8 +0 + 62 + 0 + 10 +6937.499957 + 20 +10890.269428 + 30 +0.0 + 11 +6924.999957 + 21 +10911.920063 + 31 +0.0 + 0 +LINE + 5 +22B + 8 +0 + 62 + 0 + 10 +6937.499957 + 20 +10846.968157 + 30 +0.0 + 11 +6924.999957 + 21 +10868.618793 + 31 +0.0 + 0 +LINE + 5 +22C + 8 +0 + 62 + 0 + 10 +6899.999957 + 20 +10911.920063 + 30 +0.0 + 11 +6891.004876 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +22D + 8 +0 + 62 + 0 + 10 +6899.999957 + 20 +10868.618793 + 30 +0.0 + 11 +6887.499957 + 21 +10890.269428 + 31 +0.0 + 0 +LINE + 5 +22E + 8 +0 + 62 + 0 + 10 +6898.739903 + 20 +10827.5 + 30 +0.0 + 11 +6887.499957 + 21 +10846.968158 + 31 +0.0 + 0 +LINE + 5 +22F + 8 +0 + 62 + 0 + 10 +6862.499957 + 20 +10890.269428 + 30 +0.0 + 11 +6849.999957 + 21 +10911.920063 + 31 +0.0 + 0 +LINE + 5 +230 + 8 +0 + 62 + 0 + 10 +6862.499957 + 20 +10846.968158 + 30 +0.0 + 11 +6849.999957 + 21 +10868.618793 + 31 +0.0 + 0 +LINE + 5 +231 + 8 +0 + 62 + 0 + 10 +6824.999957 + 20 +10911.920063 + 30 +0.0 + 11 +6816.004876 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +232 + 8 +0 + 62 + 0 + 10 +6824.999957 + 20 +10868.618793 + 30 +0.0 + 11 +6812.499957 + 21 +10890.269428 + 31 +0.0 + 0 +LINE + 5 +233 + 8 +0 + 62 + 0 + 10 +6823.739903 + 20 +10827.5 + 30 +0.0 + 11 +6812.499957 + 21 +10846.968158 + 31 +0.0 + 0 +LINE + 5 +234 + 8 +0 + 62 + 0 + 10 +6787.499957 + 20 +10890.269428 + 30 +0.0 + 11 +6774.999957 + 21 +10911.920063 + 31 +0.0 + 0 +LINE + 5 +235 + 8 +0 + 62 + 0 + 10 +6787.499957 + 20 +10846.968158 + 30 +0.0 + 11 +6774.999957 + 21 +10868.618793 + 31 +0.0 + 0 +LINE + 5 +236 + 8 +0 + 62 + 0 + 10 +6749.999957 + 20 +10911.920063 + 30 +0.0 + 11 +6741.004876 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +237 + 8 +0 + 62 + 0 + 10 +6749.999957 + 20 +10868.618793 + 30 +0.0 + 11 +6737.499957 + 21 +10890.269428 + 31 +0.0 + 0 +LINE + 5 +238 + 8 +0 + 62 + 0 + 10 +6748.739904 + 20 +10827.5 + 30 +0.0 + 11 +6737.499957 + 21 +10846.968158 + 31 +0.0 + 0 +LINE + 5 +239 + 8 +0 + 62 + 0 + 10 +6712.499957 + 20 +10890.269428 + 30 +0.0 + 11 +6710.0 + 21 +10894.599481 + 31 +0.0 + 0 +LINE + 5 +23A + 8 +0 + 62 + 0 + 10 +6712.499957 + 20 +10846.968158 + 30 +0.0 + 11 +6710.0 + 21 +10851.298211 + 31 +0.0 + 0 +LINE + 5 +23B + 8 +0 + 62 + 0 + 10 +7462.499955 + 20 +10846.968156 + 30 +0.0 + 11 +7449.999955 + 21 +10868.618792 + 31 +0.0 + 0 +LINE + 5 +23C + 8 +0 + 62 + 0 + 10 +7424.999955 + 20 +10911.920062 + 30 +0.0 + 11 +7416.004873 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +23D + 8 +0 + 62 + 0 + 10 +7498.7399 + 20 +10827.5 + 30 +0.0 + 11 +7487.499955 + 21 +10846.968156 + 31 +0.0 + 0 +LINE + 5 +23E + 8 +0 + 62 + 0 + 10 +7462.499955 + 20 +10890.269427 + 30 +0.0 + 11 +7449.999955 + 21 +10911.920062 + 31 +0.0 + 0 +LINE + 5 +23F + 8 +0 + 62 + 0 + 10 +7499.999955 + 20 +10868.618791 + 30 +0.0 + 11 +7487.499955 + 21 +10890.269427 + 31 +0.0 + 0 +LINE + 5 +240 + 8 +0 + 62 + 0 + 10 +7537.499955 + 20 +10846.968156 + 30 +0.0 + 11 +7524.999955 + 21 +10868.618791 + 31 +0.0 + 0 +LINE + 5 +241 + 8 +0 + 62 + 0 + 10 +7499.999955 + 20 +10911.920062 + 30 +0.0 + 11 +7491.004873 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +242 + 8 +0 + 62 + 0 + 10 +7573.7399 + 20 +10827.5 + 30 +0.0 + 11 +7562.499955 + 21 +10846.968156 + 31 +0.0 + 0 +LINE + 5 +243 + 8 +0 + 62 + 0 + 10 +7537.499955 + 20 +10890.269426 + 30 +0.0 + 11 +7524.999955 + 21 +10911.920062 + 31 +0.0 + 0 +LINE + 5 +244 + 8 +0 + 62 + 0 + 10 +7574.999955 + 20 +10868.618791 + 30 +0.0 + 11 +7562.499955 + 21 +10890.269426 + 31 +0.0 + 0 +LINE + 5 +245 + 8 +0 + 62 + 0 + 10 +7612.499955 + 20 +10846.968156 + 30 +0.0 + 11 +7599.999955 + 21 +10868.618791 + 31 +0.0 + 0 +LINE + 5 +246 + 8 +0 + 62 + 0 + 10 +7574.999955 + 20 +10911.920061 + 30 +0.0 + 11 +7566.004873 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +247 + 8 +0 + 62 + 0 + 10 +7648.7399 + 20 +10827.5 + 30 +0.0 + 11 +7637.499954 + 21 +10846.968156 + 31 +0.0 + 0 +LINE + 5 +248 + 8 +0 + 62 + 0 + 10 +7612.499954 + 20 +10890.269426 + 30 +0.0 + 11 +7599.999954 + 21 +10911.920061 + 31 +0.0 + 0 +LINE + 5 +249 + 8 +0 + 62 + 0 + 10 +7649.999954 + 20 +10868.618791 + 30 +0.0 + 11 +7637.499954 + 21 +10890.269426 + 31 +0.0 + 0 +LINE + 5 +24A + 8 +0 + 62 + 0 + 10 +7687.499954 + 20 +10846.968156 + 30 +0.0 + 11 +7674.999954 + 21 +10868.618791 + 31 +0.0 + 0 +LINE + 5 +24B + 8 +0 + 62 + 0 + 10 +7649.999954 + 20 +10911.920061 + 30 +0.0 + 11 +7641.004872 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +24C + 8 +0 + 62 + 0 + 10 +7723.739899 + 20 +10827.5 + 30 +0.0 + 11 +7712.499954 + 21 +10846.968156 + 31 +0.0 + 0 +LINE + 5 +24D + 8 +0 + 62 + 0 + 10 +7687.499954 + 20 +10890.269426 + 30 +0.0 + 11 +7674.999954 + 21 +10911.920061 + 31 +0.0 + 0 +LINE + 5 +24E + 8 +0 + 62 + 0 + 10 +7724.999954 + 20 +10868.618791 + 30 +0.0 + 11 +7712.499954 + 21 +10890.269426 + 31 +0.0 + 0 +LINE + 5 +24F + 8 +0 + 62 + 0 + 10 +7762.499954 + 20 +10846.968156 + 30 +0.0 + 11 +7749.999954 + 21 +10868.618791 + 31 +0.0 + 0 +LINE + 5 +250 + 8 +0 + 62 + 0 + 10 +7724.999954 + 20 +10911.920061 + 30 +0.0 + 11 +7716.004872 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +251 + 8 +0 + 62 + 0 + 10 +7798.739899 + 20 +10827.5 + 30 +0.0 + 11 +7787.499954 + 21 +10846.968156 + 31 +0.0 + 0 +LINE + 5 +252 + 8 +0 + 62 + 0 + 10 +7762.499954 + 20 +10890.269426 + 30 +0.0 + 11 +7749.999954 + 21 +10911.920061 + 31 +0.0 + 0 +LINE + 5 +253 + 8 +0 + 62 + 0 + 10 +7799.999954 + 20 +10868.618791 + 30 +0.0 + 11 +7787.499954 + 21 +10890.269426 + 31 +0.0 + 0 +LINE + 5 +254 + 8 +0 + 62 + 0 + 10 +7837.499954 + 20 +10846.968156 + 30 +0.0 + 11 +7824.999954 + 21 +10868.618791 + 31 +0.0 + 0 +LINE + 5 +255 + 8 +0 + 62 + 0 + 10 +7799.999954 + 20 +10911.920061 + 30 +0.0 + 11 +7791.004872 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +256 + 8 +0 + 62 + 0 + 10 +7873.739899 + 20 +10827.5 + 30 +0.0 + 11 +7862.499954 + 21 +10846.968156 + 31 +0.0 + 0 +LINE + 5 +257 + 8 +0 + 62 + 0 + 10 +7837.499954 + 20 +10890.269426 + 30 +0.0 + 11 +7824.999954 + 21 +10911.920061 + 31 +0.0 + 0 +LINE + 5 +258 + 8 +0 + 62 + 0 + 10 +7874.999954 + 20 +10868.618791 + 30 +0.0 + 11 +7862.499954 + 21 +10890.269426 + 31 +0.0 + 0 +LINE + 5 +259 + 8 +0 + 62 + 0 + 10 +7912.499954 + 20 +10846.968156 + 30 +0.0 + 11 +7899.999954 + 21 +10868.618791 + 31 +0.0 + 0 +LINE + 5 +25A + 8 +0 + 62 + 0 + 10 +7874.999954 + 20 +10911.920061 + 30 +0.0 + 11 +7866.004871 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +25B + 8 +0 + 62 + 0 + 10 +7948.739898 + 20 +10827.5 + 30 +0.0 + 11 +7937.499953 + 21 +10846.968156 + 31 +0.0 + 0 +LINE + 5 +25C + 8 +0 + 62 + 0 + 10 +7912.499953 + 20 +10890.269426 + 30 +0.0 + 11 +7899.999953 + 21 +10911.920061 + 31 +0.0 + 0 +LINE + 5 +25D + 8 +0 + 62 + 0 + 10 +7949.999953 + 20 +10868.618791 + 30 +0.0 + 11 +7937.499953 + 21 +10890.269426 + 31 +0.0 + 0 +LINE + 5 +25E + 8 +0 + 62 + 0 + 10 +7987.499953 + 20 +10846.968155 + 30 +0.0 + 11 +7974.999953 + 21 +10868.618791 + 31 +0.0 + 0 +LINE + 5 +25F + 8 +0 + 62 + 0 + 10 +7949.999953 + 20 +10911.920061 + 30 +0.0 + 11 +7941.004871 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +260 + 8 +0 + 62 + 0 + 10 +8023.739898 + 20 +10827.5 + 30 +0.0 + 11 +8012.499953 + 21 +10846.968155 + 31 +0.0 + 0 +LINE + 5 +261 + 8 +0 + 62 + 0 + 10 +7987.499953 + 20 +10890.269426 + 30 +0.0 + 11 +7974.999953 + 21 +10911.920061 + 31 +0.0 + 0 +LINE + 5 +262 + 8 +0 + 62 + 0 + 10 +8024.999953 + 20 +10868.61879 + 30 +0.0 + 11 +8012.499953 + 21 +10890.269426 + 31 +0.0 + 0 +LINE + 5 +263 + 8 +0 + 62 + 0 + 10 +8062.499953 + 20 +10846.968155 + 30 +0.0 + 11 +8049.999953 + 21 +10868.61879 + 31 +0.0 + 0 +LINE + 5 +264 + 8 +0 + 62 + 0 + 10 +8024.999953 + 20 +10911.920061 + 30 +0.0 + 11 +8016.004871 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +265 + 8 +0 + 62 + 0 + 10 +8098.739898 + 20 +10827.5 + 30 +0.0 + 11 +8087.499953 + 21 +10846.968155 + 31 +0.0 + 0 +LINE + 5 +266 + 8 +0 + 62 + 0 + 10 +8062.499953 + 20 +10890.269425 + 30 +0.0 + 11 +8049.999953 + 21 +10911.920061 + 31 +0.0 + 0 +LINE + 5 +267 + 8 +0 + 62 + 0 + 10 +8099.999953 + 20 +10868.61879 + 30 +0.0 + 11 +8087.499953 + 21 +10890.269425 + 31 +0.0 + 0 +LINE + 5 +268 + 8 +0 + 62 + 0 + 10 +8137.499953 + 20 +10846.968155 + 30 +0.0 + 11 +8124.999953 + 21 +10868.61879 + 31 +0.0 + 0 +LINE + 5 +269 + 8 +0 + 62 + 0 + 10 +8099.999953 + 20 +10911.92006 + 30 +0.0 + 11 +8091.004871 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +26A + 8 +0 + 62 + 0 + 10 +8173.739897 + 20 +10827.5 + 30 +0.0 + 11 +8162.499953 + 21 +10846.968155 + 31 +0.0 + 0 +LINE + 5 +26B + 8 +0 + 62 + 0 + 10 +8137.499953 + 20 +10890.269425 + 30 +0.0 + 11 +8124.999953 + 21 +10911.92006 + 31 +0.0 + 0 +LINE + 5 +26C + 8 +0 + 62 + 0 + 10 +8174.999953 + 20 +10868.61879 + 30 +0.0 + 11 +8162.499953 + 21 +10890.269425 + 31 +0.0 + 0 +LINE + 5 +26D + 8 +0 + 62 + 0 + 10 +8174.999953 + 20 +10911.92006 + 30 +0.0 + 11 +8166.00487 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +26E + 8 +0 + 62 + 0 + 10 +7412.499996 + 20 +10846.968185 + 30 +0.0 + 11 +7424.999996 + 21 +10868.61882 + 31 +0.0 + 0 +LINE + 5 +26F + 8 +0 + 62 + 0 + 10 +7449.999996 + 20 +10911.92009 + 30 +0.0 + 11 +7458.995062 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +270 + 8 +0 + 62 + 0 + 10 +7376.260035 + 20 +10827.5 + 30 +0.0 + 11 +7387.499996 + 21 +10846.968185 + 31 +0.0 + 0 +LINE + 5 +271 + 8 +0 + 62 + 0 + 10 +7412.499996 + 20 +10890.269455 + 30 +0.0 + 11 +7424.999996 + 21 +10911.92009 + 31 +0.0 + 0 +LINE + 5 +272 + 8 +0 + 62 + 0 + 10 +7374.999996 + 20 +10868.61882 + 30 +0.0 + 11 +7387.499996 + 21 +10890.269455 + 31 +0.0 + 0 +LINE + 5 +273 + 8 +0 + 62 + 0 + 10 +7337.499996 + 20 +10846.968184 + 30 +0.0 + 11 +7349.999996 + 21 +10868.61882 + 31 +0.0 + 0 +LINE + 5 +274 + 8 +0 + 62 + 0 + 10 +7374.999996 + 20 +10911.92009 + 30 +0.0 + 11 +7383.995062 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +275 + 8 +0 + 62 + 0 + 10 +7301.260035 + 20 +10827.5 + 30 +0.0 + 11 +7312.499997 + 21 +10846.968184 + 31 +0.0 + 0 +LINE + 5 +276 + 8 +0 + 62 + 0 + 10 +7337.499997 + 20 +10890.269455 + 30 +0.0 + 11 +7349.999997 + 21 +10911.92009 + 31 +0.0 + 0 +LINE + 5 +277 + 8 +0 + 62 + 0 + 10 +7299.999997 + 20 +10868.618819 + 30 +0.0 + 11 +7312.499997 + 21 +10890.269455 + 31 +0.0 + 0 +LINE + 5 +278 + 8 +0 + 62 + 0 + 10 +7262.499997 + 20 +10846.968184 + 30 +0.0 + 11 +7274.999997 + 21 +10868.618819 + 31 +0.0 + 0 +LINE + 5 +279 + 8 +0 + 62 + 0 + 10 +7299.999997 + 20 +10911.92009 + 30 +0.0 + 11 +7308.995062 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +27A + 8 +0 + 62 + 0 + 10 +7226.260035 + 20 +10827.5 + 30 +0.0 + 11 +7237.499997 + 21 +10846.968184 + 31 +0.0 + 0 +LINE + 5 +27B + 8 +0 + 62 + 0 + 10 +7262.499997 + 20 +10890.269454 + 30 +0.0 + 11 +7274.999997 + 21 +10911.92009 + 31 +0.0 + 0 +LINE + 5 +27C + 8 +0 + 62 + 0 + 10 +7224.999997 + 20 +10868.618819 + 30 +0.0 + 11 +7237.499997 + 21 +10890.269454 + 31 +0.0 + 0 +LINE + 5 +27D + 8 +0 + 62 + 0 + 10 +7187.499997 + 20 +10846.968184 + 30 +0.0 + 11 +7199.999997 + 21 +10868.618819 + 31 +0.0 + 0 +LINE + 5 +27E + 8 +0 + 62 + 0 + 10 +7224.999997 + 20 +10911.920089 + 30 +0.0 + 11 +7233.995063 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +27F + 8 +0 + 62 + 0 + 10 +7151.260036 + 20 +10827.5 + 30 +0.0 + 11 +7162.499997 + 21 +10846.968184 + 31 +0.0 + 0 +LINE + 5 +280 + 8 +0 + 62 + 0 + 10 +7187.499997 + 20 +10890.269454 + 30 +0.0 + 11 +7199.999997 + 21 +10911.920089 + 31 +0.0 + 0 +LINE + 5 +281 + 8 +0 + 62 + 0 + 10 +7149.999997 + 20 +10868.618819 + 30 +0.0 + 11 +7162.499997 + 21 +10890.269454 + 31 +0.0 + 0 +LINE + 5 +282 + 8 +0 + 62 + 0 + 10 +7112.499997 + 20 +10846.968184 + 30 +0.0 + 11 +7124.999997 + 21 +10868.618819 + 31 +0.0 + 0 +LINE + 5 +283 + 8 +0 + 62 + 0 + 10 +7149.999997 + 20 +10911.920089 + 30 +0.0 + 11 +7158.995063 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +284 + 8 +0 + 62 + 0 + 10 +7076.260036 + 20 +10827.5 + 30 +0.0 + 11 +7087.499997 + 21 +10846.968184 + 31 +0.0 + 0 +LINE + 5 +285 + 8 +0 + 62 + 0 + 10 +7112.499997 + 20 +10890.269454 + 30 +0.0 + 11 +7124.999997 + 21 +10911.920089 + 31 +0.0 + 0 +LINE + 5 +286 + 8 +0 + 62 + 0 + 10 +7074.999997 + 20 +10868.618819 + 30 +0.0 + 11 +7087.499997 + 21 +10890.269454 + 31 +0.0 + 0 +LINE + 5 +287 + 8 +0 + 62 + 0 + 10 +7037.499997 + 20 +10846.968184 + 30 +0.0 + 11 +7049.999997 + 21 +10868.618819 + 31 +0.0 + 0 +LINE + 5 +288 + 8 +0 + 62 + 0 + 10 +7074.999997 + 20 +10911.920089 + 30 +0.0 + 11 +7083.995063 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +289 + 8 +0 + 62 + 0 + 10 +7001.260036 + 20 +10827.5 + 30 +0.0 + 11 +7012.499998 + 21 +10846.968184 + 31 +0.0 + 0 +LINE + 5 +28A + 8 +0 + 62 + 0 + 10 +7037.499998 + 20 +10890.269454 + 30 +0.0 + 11 +7049.999998 + 21 +10911.920089 + 31 +0.0 + 0 +LINE + 5 +28B + 8 +0 + 62 + 0 + 10 +6999.999998 + 20 +10868.618819 + 30 +0.0 + 11 +7012.499998 + 21 +10890.269454 + 31 +0.0 + 0 +LINE + 5 +28C + 8 +0 + 62 + 0 + 10 +6962.499998 + 20 +10846.968184 + 30 +0.0 + 11 +6974.999998 + 21 +10868.618819 + 31 +0.0 + 0 +LINE + 5 +28D + 8 +0 + 62 + 0 + 10 +6999.999998 + 20 +10911.920089 + 30 +0.0 + 11 +7008.995064 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +28E + 8 +0 + 62 + 0 + 10 +6926.260037 + 20 +10827.5 + 30 +0.0 + 11 +6937.499998 + 21 +10846.968184 + 31 +0.0 + 0 +LINE + 5 +28F + 8 +0 + 62 + 0 + 10 +6962.499998 + 20 +10890.269454 + 30 +0.0 + 11 +6974.999998 + 21 +10911.920089 + 31 +0.0 + 0 +LINE + 5 +290 + 8 +0 + 62 + 0 + 10 +6924.999998 + 20 +10868.618819 + 30 +0.0 + 11 +6937.499998 + 21 +10890.269454 + 31 +0.0 + 0 +LINE + 5 +291 + 8 +0 + 62 + 0 + 10 +6887.499998 + 20 +10846.968184 + 30 +0.0 + 11 +6899.999998 + 21 +10868.618819 + 31 +0.0 + 0 +LINE + 5 +292 + 8 +0 + 62 + 0 + 10 +6924.999998 + 20 +10911.920089 + 30 +0.0 + 11 +6933.995064 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +293 + 8 +0 + 62 + 0 + 10 +6851.260037 + 20 +10827.5 + 30 +0.0 + 11 +6862.499998 + 21 +10846.968184 + 31 +0.0 + 0 +LINE + 5 +294 + 8 +0 + 62 + 0 + 10 +6887.499998 + 20 +10890.269454 + 30 +0.0 + 11 +6899.999998 + 21 +10911.920089 + 31 +0.0 + 0 +LINE + 5 +295 + 8 +0 + 62 + 0 + 10 +6849.999998 + 20 +10868.618819 + 30 +0.0 + 11 +6862.499998 + 21 +10890.269454 + 31 +0.0 + 0 +LINE + 5 +296 + 8 +0 + 62 + 0 + 10 +6812.499998 + 20 +10846.968183 + 30 +0.0 + 11 +6824.999998 + 21 +10868.618819 + 31 +0.0 + 0 +LINE + 5 +297 + 8 +0 + 62 + 0 + 10 +6849.999998 + 20 +10911.920089 + 30 +0.0 + 11 +6858.995064 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +298 + 8 +0 + 62 + 0 + 10 +6776.260037 + 20 +10827.5 + 30 +0.0 + 11 +6787.499998 + 21 +10846.968183 + 31 +0.0 + 0 +LINE + 5 +299 + 8 +0 + 62 + 0 + 10 +6812.499998 + 20 +10890.269454 + 30 +0.0 + 11 +6824.999998 + 21 +10911.920089 + 31 +0.0 + 0 +LINE + 5 +29A + 8 +0 + 62 + 0 + 10 +6774.999998 + 20 +10868.618818 + 30 +0.0 + 11 +6787.499998 + 21 +10890.269454 + 31 +0.0 + 0 +LINE + 5 +29B + 8 +0 + 62 + 0 + 10 +6737.499998 + 20 +10846.968183 + 30 +0.0 + 11 +6749.999998 + 21 +10868.618818 + 31 +0.0 + 0 +LINE + 5 +29C + 8 +0 + 62 + 0 + 10 +6774.999998 + 20 +10911.920089 + 30 +0.0 + 11 +6783.995064 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +29D + 8 +0 + 62 + 0 + 10 +6710.0 + 20 +10842.638059 + 30 +0.0 + 11 +6712.499999 + 21 +10846.968183 + 31 +0.0 + 0 +LINE + 5 +29E + 8 +0 + 62 + 0 + 10 +6737.499999 + 20 +10890.269453 + 30 +0.0 + 11 +6749.999999 + 21 +10911.920089 + 31 +0.0 + 0 +LINE + 5 +29F + 8 +0 + 62 + 0 + 10 +6710.0 + 20 +10885.939329 + 30 +0.0 + 11 +6712.499999 + 21 +10890.269453 + 31 +0.0 + 0 +LINE + 5 +2A0 + 8 +0 + 62 + 0 + 10 +7449.999996 + 20 +10868.61882 + 30 +0.0 + 11 +7462.499996 + 21 +10890.269455 + 31 +0.0 + 0 +LINE + 5 +2A1 + 8 +0 + 62 + 0 + 10 +7451.260034 + 20 +10827.5 + 30 +0.0 + 11 +7462.499996 + 21 +10846.968185 + 31 +0.0 + 0 +LINE + 5 +2A2 + 8 +0 + 62 + 0 + 10 +7487.499996 + 20 +10890.269455 + 30 +0.0 + 11 +7499.999996 + 21 +10911.92009 + 31 +0.0 + 0 +LINE + 5 +2A3 + 8 +0 + 62 + 0 + 10 +7487.499996 + 20 +10846.968185 + 30 +0.0 + 11 +7499.999996 + 21 +10868.61882 + 31 +0.0 + 0 +LINE + 5 +2A4 + 8 +0 + 62 + 0 + 10 +7524.999996 + 20 +10911.92009 + 30 +0.0 + 11 +7533.995061 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +2A5 + 8 +0 + 62 + 0 + 10 +7524.999996 + 20 +10868.61882 + 30 +0.0 + 11 +7537.499996 + 21 +10890.269455 + 31 +0.0 + 0 +LINE + 5 +2A6 + 8 +0 + 62 + 0 + 10 +7526.260034 + 20 +10827.5 + 30 +0.0 + 11 +7537.499996 + 21 +10846.968185 + 31 +0.0 + 0 +LINE + 5 +2A7 + 8 +0 + 62 + 0 + 10 +7562.499996 + 20 +10890.269455 + 30 +0.0 + 11 +7574.999996 + 21 +10911.92009 + 31 +0.0 + 0 +LINE + 5 +2A8 + 8 +0 + 62 + 0 + 10 +7562.499996 + 20 +10846.968185 + 30 +0.0 + 11 +7574.999996 + 21 +10868.61882 + 31 +0.0 + 0 +LINE + 5 +2A9 + 8 +0 + 62 + 0 + 10 +7599.999996 + 20 +10911.92009 + 30 +0.0 + 11 +7608.995061 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +2AA + 8 +0 + 62 + 0 + 10 +7599.999996 + 20 +10868.61882 + 30 +0.0 + 11 +7612.499996 + 21 +10890.269455 + 31 +0.0 + 0 +LINE + 5 +2AB + 8 +0 + 62 + 0 + 10 +7601.260034 + 20 +10827.5 + 30 +0.0 + 11 +7612.499996 + 21 +10846.968185 + 31 +0.0 + 0 +LINE + 5 +2AC + 8 +0 + 62 + 0 + 10 +7637.499996 + 20 +10890.269455 + 30 +0.0 + 11 +7649.999996 + 21 +10911.92009 + 31 +0.0 + 0 +LINE + 5 +2AD + 8 +0 + 62 + 0 + 10 +7637.499995 + 20 +10846.968185 + 30 +0.0 + 11 +7649.999995 + 21 +10868.61882 + 31 +0.0 + 0 +LINE + 5 +2AE + 8 +0 + 62 + 0 + 10 +7674.999995 + 20 +10911.92009 + 30 +0.0 + 11 +7683.995061 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +2AF + 8 +0 + 62 + 0 + 10 +7674.999995 + 20 +10868.61882 + 30 +0.0 + 11 +7687.499995 + 21 +10890.269455 + 31 +0.0 + 0 +LINE + 5 +2B0 + 8 +0 + 62 + 0 + 10 +7676.260033 + 20 +10827.5 + 30 +0.0 + 11 +7687.499995 + 21 +10846.968185 + 31 +0.0 + 0 +LINE + 5 +2B1 + 8 +0 + 62 + 0 + 10 +7712.499995 + 20 +10890.269455 + 30 +0.0 + 11 +7724.999995 + 21 +10911.92009 + 31 +0.0 + 0 +LINE + 5 +2B2 + 8 +0 + 62 + 0 + 10 +7712.499995 + 20 +10846.968185 + 30 +0.0 + 11 +7724.999995 + 21 +10868.61882 + 31 +0.0 + 0 +LINE + 5 +2B3 + 8 +0 + 62 + 0 + 10 +7749.999995 + 20 +10911.92009 + 30 +0.0 + 11 +7758.99506 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +2B4 + 8 +0 + 62 + 0 + 10 +7749.999995 + 20 +10868.61882 + 30 +0.0 + 11 +7762.499995 + 21 +10890.269455 + 31 +0.0 + 0 +LINE + 5 +2B5 + 8 +0 + 62 + 0 + 10 +7751.260033 + 20 +10827.5 + 30 +0.0 + 11 +7762.499995 + 21 +10846.968185 + 31 +0.0 + 0 +LINE + 5 +2B6 + 8 +0 + 62 + 0 + 10 +7787.499995 + 20 +10890.269455 + 30 +0.0 + 11 +7799.999995 + 21 +10911.920091 + 31 +0.0 + 0 +LINE + 5 +2B7 + 8 +0 + 62 + 0 + 10 +7787.499995 + 20 +10846.968185 + 30 +0.0 + 11 +7799.999995 + 21 +10868.61882 + 31 +0.0 + 0 +LINE + 5 +2B8 + 8 +0 + 62 + 0 + 10 +7824.999995 + 20 +10911.920091 + 30 +0.0 + 11 +7833.99506 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +2B9 + 8 +0 + 62 + 0 + 10 +7824.999995 + 20 +10868.61882 + 30 +0.0 + 11 +7837.499995 + 21 +10890.269456 + 31 +0.0 + 0 +LINE + 5 +2BA + 8 +0 + 62 + 0 + 10 +7826.260033 + 20 +10827.5 + 30 +0.0 + 11 +7837.499995 + 21 +10846.968185 + 31 +0.0 + 0 +LINE + 5 +2BB + 8 +0 + 62 + 0 + 10 +7862.499995 + 20 +10890.269456 + 30 +0.0 + 11 +7874.999995 + 21 +10911.920091 + 31 +0.0 + 0 +LINE + 5 +2BC + 8 +0 + 62 + 0 + 10 +7862.499995 + 20 +10846.968185 + 30 +0.0 + 11 +7874.999995 + 21 +10868.618821 + 31 +0.0 + 0 +LINE + 5 +2BD + 8 +0 + 62 + 0 + 10 +7899.999995 + 20 +10911.920091 + 30 +0.0 + 11 +7908.99506 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +2BE + 8 +0 + 62 + 0 + 10 +7899.999995 + 20 +10868.618821 + 30 +0.0 + 11 +7912.499995 + 21 +10890.269456 + 31 +0.0 + 0 +LINE + 5 +2BF + 8 +0 + 62 + 0 + 10 +7901.260032 + 20 +10827.5 + 30 +0.0 + 11 +7912.499995 + 21 +10846.968186 + 31 +0.0 + 0 +LINE + 5 +2C0 + 8 +0 + 62 + 0 + 10 +7937.499995 + 20 +10890.269456 + 30 +0.0 + 11 +7949.999995 + 21 +10911.920091 + 31 +0.0 + 0 +LINE + 5 +2C1 + 8 +0 + 62 + 0 + 10 +7937.499995 + 20 +10846.968186 + 30 +0.0 + 11 +7949.999995 + 21 +10868.618821 + 31 +0.0 + 0 +LINE + 5 +2C2 + 8 +0 + 62 + 0 + 10 +7974.999995 + 20 +10911.920091 + 30 +0.0 + 11 +7983.995059 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +2C3 + 8 +0 + 62 + 0 + 10 +7974.999994 + 20 +10868.618821 + 30 +0.0 + 11 +7987.499994 + 21 +10890.269456 + 31 +0.0 + 0 +LINE + 5 +2C4 + 8 +0 + 62 + 0 + 10 +7976.260032 + 20 +10827.5 + 30 +0.0 + 11 +7987.499994 + 21 +10846.968186 + 31 +0.0 + 0 +LINE + 5 +2C5 + 8 +0 + 62 + 0 + 10 +8012.499994 + 20 +10890.269456 + 30 +0.0 + 11 +8024.999994 + 21 +10911.920091 + 31 +0.0 + 0 +LINE + 5 +2C6 + 8 +0 + 62 + 0 + 10 +8012.499994 + 20 +10846.968186 + 30 +0.0 + 11 +8024.999994 + 21 +10868.618821 + 31 +0.0 + 0 +LINE + 5 +2C7 + 8 +0 + 62 + 0 + 10 +8049.999994 + 20 +10911.920091 + 30 +0.0 + 11 +8058.995059 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +2C8 + 8 +0 + 62 + 0 + 10 +8049.999994 + 20 +10868.618821 + 30 +0.0 + 11 +8062.499994 + 21 +10890.269456 + 31 +0.0 + 0 +LINE + 5 +2C9 + 8 +0 + 62 + 0 + 10 +8051.260032 + 20 +10827.5 + 30 +0.0 + 11 +8062.499994 + 21 +10846.968186 + 31 +0.0 + 0 +LINE + 5 +2CA + 8 +0 + 62 + 0 + 10 +8087.499994 + 20 +10890.269456 + 30 +0.0 + 11 +8099.999994 + 21 +10911.920091 + 31 +0.0 + 0 +LINE + 5 +2CB + 8 +0 + 62 + 0 + 10 +8087.499994 + 20 +10846.968186 + 30 +0.0 + 11 +8099.999994 + 21 +10868.618821 + 31 +0.0 + 0 +LINE + 5 +2CC + 8 +0 + 62 + 0 + 10 +8124.999994 + 20 +10911.920091 + 30 +0.0 + 11 +8133.995059 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +2CD + 8 +0 + 62 + 0 + 10 +8124.999994 + 20 +10868.618821 + 30 +0.0 + 11 +8137.499994 + 21 +10890.269456 + 31 +0.0 + 0 +LINE + 5 +2CE + 8 +0 + 62 + 0 + 10 +8126.260031 + 20 +10827.5 + 30 +0.0 + 11 +8137.499994 + 21 +10846.968186 + 31 +0.0 + 0 +LINE + 5 +2CF + 8 +0 + 62 + 0 + 10 +8162.499994 + 20 +10890.269456 + 30 +0.0 + 11 +8174.999994 + 21 +10911.920091 + 31 +0.0 + 0 +LINE + 5 +2D0 + 8 +0 + 62 + 0 + 10 +8162.499994 + 20 +10846.968186 + 30 +0.0 + 11 +8174.999994 + 21 +10868.618821 + 31 +0.0 + 0 +ENDBLK + 5 +2D1 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X5 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X5 + 1 + + 0 +LINE + 5 +2D3 + 8 +0 + 62 + 0 + 10 +7458.755416 + 20 +11065.0 + 30 +0.0 + 11 +7521.255416 + 21 +11127.5 + 31 +0.0 + 0 +LINE + 5 +2D4 + 8 +0 + 62 + 0 + 10 +7246.623382 + 20 +11065.0 + 30 +0.0 + 11 +7309.123382 + 21 +11127.5 + 31 +0.0 + 0 +LINE + 5 +2D5 + 8 +0 + 62 + 0 + 10 +7034.491347 + 20 +11065.0 + 30 +0.0 + 11 +7096.991347 + 21 +11127.5 + 31 +0.0 + 0 +LINE + 5 +2D6 + 8 +0 + 62 + 0 + 10 +6822.359313 + 20 +11065.0 + 30 +0.0 + 11 +6884.859313 + 21 +11127.5 + 31 +0.0 + 0 +LINE + 5 +2D7 + 8 +0 + 62 + 0 + 10 +7670.88745 + 20 +11065.0 + 30 +0.0 + 11 +7733.38745 + 21 +11127.5 + 31 +0.0 + 0 +LINE + 5 +2D8 + 8 +0 + 62 + 0 + 10 +7883.019485 + 20 +11065.0 + 30 +0.0 + 11 +7945.519485 + 21 +11127.5 + 31 +0.0 + 0 +LINE + 5 +2D9 + 8 +0 + 62 + 0 + 10 +8095.151519 + 20 +11065.0 + 30 +0.0 + 11 +8157.651519 + 21 +11127.5 + 31 +0.0 + 0 +LINE + 5 +2DA + 8 +0 + 62 + 0 + 10 +7494.110755 + 20 +11065.0 + 30 +0.0 + 11 +7556.610755 + 21 +11127.5 + 31 +0.0 + 0 +LINE + 5 +2DB + 8 +0 + 62 + 0 + 10 +7281.978721 + 20 +11065.0 + 30 +0.0 + 11 +7344.478721 + 21 +11127.5 + 31 +0.0 + 0 +LINE + 5 +2DC + 8 +0 + 62 + 0 + 10 +7069.846686 + 20 +11065.0 + 30 +0.0 + 11 +7132.346686 + 21 +11127.5 + 31 +0.0 + 0 +LINE + 5 +2DD + 8 +0 + 62 + 0 + 10 +6857.714652 + 20 +11065.0 + 30 +0.0 + 11 +6920.214652 + 21 +11127.5 + 31 +0.0 + 0 +LINE + 5 +2DE + 8 +0 + 62 + 0 + 10 +7706.242789 + 20 +11065.0 + 30 +0.0 + 11 +7768.742789 + 21 +11127.5 + 31 +0.0 + 0 +LINE + 5 +2DF + 8 +0 + 62 + 0 + 10 +7918.374824 + 20 +11065.0 + 30 +0.0 + 11 +7980.874824 + 21 +11127.5 + 31 +0.0 + 0 +LINE + 5 +2E0 + 8 +0 + 62 + 0 + 10 +8130.506858 + 20 +11065.0 + 30 +0.0 + 11 +8175.0 + 21 +11109.493142 + 31 +0.0 + 0 +LINE + 5 +2E1 + 8 +0 + 62 + 0 + 10 +7529.466094 + 20 +11065.0 + 30 +0.0 + 11 +7591.966094 + 21 +11127.5 + 31 +0.0 + 0 +LINE + 5 +2E2 + 8 +0 + 62 + 0 + 10 +7317.33406 + 20 +11065.0 + 30 +0.0 + 11 +7379.83406 + 21 +11127.5 + 31 +0.0 + 0 +LINE + 5 +2E3 + 8 +0 + 62 + 0 + 10 +7105.202025 + 20 +11065.0 + 30 +0.0 + 11 +7167.702025 + 21 +11127.5 + 31 +0.0 + 0 +LINE + 5 +2E4 + 8 +0 + 62 + 0 + 10 +6893.069991 + 20 +11065.0 + 30 +0.0 + 11 +6955.569991 + 21 +11127.5 + 31 +0.0 + 0 +LINE + 5 +2E5 + 8 +0 + 62 + 0 + 10 +6710.0 + 20 +11094.062043 + 30 +0.0 + 11 +6743.437957 + 21 +11127.5 + 31 +0.0 + 0 +LINE + 5 +2E6 + 8 +0 + 62 + 0 + 10 +7741.598129 + 20 +11065.0 + 30 +0.0 + 11 +7804.098129 + 21 +11127.5 + 31 +0.0 + 0 +LINE + 5 +2E7 + 8 +0 + 62 + 0 + 10 +7953.730163 + 20 +11065.0 + 30 +0.0 + 11 +8016.230163 + 21 +11127.5 + 31 +0.0 + 0 +LINE + 5 +2E8 + 8 +0 + 62 + 0 + 10 +8165.862197 + 20 +11065.0 + 30 +0.0 + 11 +8175.0 + 21 +11074.137803 + 31 +0.0 + 0 +LINE + 5 +2E9 + 8 +0 + 62 + 0 + 10 +7564.821433 + 20 +11065.0 + 30 +0.0 + 11 +7627.321433 + 21 +11127.5 + 31 +0.0 + 0 +LINE + 5 +2EA + 8 +0 + 62 + 0 + 10 +7352.689399 + 20 +11065.0 + 30 +0.0 + 11 +7415.189399 + 21 +11127.5 + 31 +0.0 + 0 +LINE + 5 +2EB + 8 +0 + 62 + 0 + 10 +7140.557364 + 20 +11065.0 + 30 +0.0 + 11 +7203.057364 + 21 +11127.5 + 31 +0.0 + 0 +LINE + 5 +2EC + 8 +0 + 62 + 0 + 10 +6928.42533 + 20 +11065.0 + 30 +0.0 + 11 +6990.92533 + 21 +11127.5 + 31 +0.0 + 0 +LINE + 5 +2ED + 8 +0 + 62 + 0 + 10 +6716.293296 + 20 +11065.0 + 30 +0.0 + 11 +6778.793296 + 21 +11127.5 + 31 +0.0 + 0 +LINE + 5 +2EE + 8 +0 + 62 + 0 + 10 +7776.953468 + 20 +11065.0 + 30 +0.0 + 11 +7839.453468 + 21 +11127.5 + 31 +0.0 + 0 +LINE + 5 +2EF + 8 +0 + 62 + 0 + 10 +7989.085502 + 20 +11065.0 + 30 +0.0 + 11 +8051.585502 + 21 +11127.5 + 31 +0.0 + 0 +ENDBLK + 5 +2F0 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X6 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X6 + 1 + + 0 +LINE + 5 +2F2 + 8 +0 + 62 + 0 + 10 +5738.475836 + 20 +10865.0 + 30 +0.0 + 11 +6603.475836 + 21 +11730.0 + 31 +0.0 + 0 +LINE + 5 +2F3 + 8 +0 + 62 + 0 + 10 +5710.0 + 20 +11013.300859 + 30 +0.0 + 11 +6426.699141 + 21 +11730.0 + 31 +0.0 + 0 +LINE + 5 +2F4 + 8 +0 + 62 + 0 + 10 +5710.0 + 20 +11190.077554 + 30 +0.0 + 11 +6249.922446 + 21 +11730.0 + 31 +0.0 + 0 +LINE + 5 +2F5 + 8 +0 + 62 + 0 + 10 +5710.0 + 20 +11366.854249 + 30 +0.0 + 11 +6073.145751 + 21 +11730.0 + 31 +0.0 + 0 +LINE + 5 +2F6 + 8 +0 + 62 + 0 + 10 +5710.0 + 20 +11543.630945 + 30 +0.0 + 11 +5896.369055 + 21 +11730.0 + 31 +0.0 + 0 +LINE + 5 +2F7 + 8 +0 + 62 + 0 + 10 +5710.0 + 20 +11720.40764 + 30 +0.0 + 11 +5719.59236 + 21 +11730.0 + 31 +0.0 + 0 +LINE + 5 +2F8 + 8 +0 + 62 + 0 + 10 +5915.252532 + 20 +10865.0 + 30 +0.0 + 11 +6630.0 + 21 +11579.747468 + 31 +0.0 + 0 +LINE + 5 +2F9 + 8 +0 + 62 + 0 + 10 +6092.029227 + 20 +10865.0 + 30 +0.0 + 11 +6630.0 + 21 +11402.970773 + 31 +0.0 + 0 +LINE + 5 +2FA + 8 +0 + 62 + 0 + 10 +6268.805922 + 20 +10865.0 + 30 +0.0 + 11 +6630.0 + 21 +11226.194078 + 31 +0.0 + 0 +LINE + 5 +2FB + 8 +0 + 62 + 0 + 10 +6445.582618 + 20 +10865.0 + 30 +0.0 + 11 +6630.0 + 21 +11049.417382 + 31 +0.0 + 0 +LINE + 5 +2FC + 8 +0 + 62 + 0 + 10 +6622.359313 + 20 +10865.0 + 30 +0.0 + 11 +6630.0 + 21 +10872.640687 + 31 +0.0 + 0 +ENDBLK + 5 +2FD + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X7 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X7 + 1 + + 0 +LINE + 5 +2FF + 8 +0 + 62 + 0 + 10 +5512.5 + 20 +11193.378295 + 30 +0.0 + 11 +5537.5 + 21 +11193.378295 + 31 +0.0 + 0 +LINE + 5 +300 + 8 +0 + 62 + 0 + 10 +5587.5 + 20 +11193.378295 + 30 +0.0 + 11 +5612.5 + 21 +11193.378295 + 31 +0.0 + 0 +LINE + 5 +301 + 8 +0 + 62 + 0 + 10 +5662.5 + 20 +11193.378295 + 30 +0.0 + 11 +5687.5 + 21 +11193.378295 + 31 +0.0 + 0 +LINE + 5 +302 + 8 +0 + 62 + 0 + 10 +5550.0 + 20 +11215.02893 + 30 +0.0 + 11 +5575.0 + 21 +11215.02893 + 31 +0.0 + 0 +LINE + 5 +303 + 8 +0 + 62 + 0 + 10 +5625.0 + 20 +11215.02893 + 30 +0.0 + 11 +5650.0 + 21 +11215.02893 + 31 +0.0 + 0 +LINE + 5 +304 + 8 +0 + 62 + 0 + 10 +5700.0 + 20 +11215.02893 + 30 +0.0 + 11 +5710.0 + 21 +11215.02893 + 31 +0.0 + 0 +LINE + 5 +305 + 8 +0 + 62 + 0 + 10 +5512.5 + 20 +11236.679565 + 30 +0.0 + 11 +5537.5 + 21 +11236.679565 + 31 +0.0 + 0 +LINE + 5 +306 + 8 +0 + 62 + 0 + 10 +5587.5 + 20 +11236.679565 + 30 +0.0 + 11 +5612.5 + 21 +11236.679565 + 31 +0.0 + 0 +LINE + 5 +307 + 8 +0 + 62 + 0 + 10 +5662.5 + 20 +11236.679565 + 30 +0.0 + 11 +5687.5 + 21 +11236.679565 + 31 +0.0 + 0 +LINE + 5 +308 + 8 +0 + 62 + 0 + 10 +5550.0 + 20 +11258.3302 + 30 +0.0 + 11 +5575.0 + 21 +11258.3302 + 31 +0.0 + 0 +LINE + 5 +309 + 8 +0 + 62 + 0 + 10 +5625.0 + 20 +11258.3302 + 30 +0.0 + 11 +5650.0 + 21 +11258.3302 + 31 +0.0 + 0 +LINE + 5 +30A + 8 +0 + 62 + 0 + 10 +5700.0 + 20 +11258.3302 + 30 +0.0 + 11 +5710.0 + 21 +11258.3302 + 31 +0.0 + 0 +LINE + 5 +30B + 8 +0 + 62 + 0 + 10 +5512.5 + 20 +11279.980835 + 30 +0.0 + 11 +5537.5 + 21 +11279.980835 + 31 +0.0 + 0 +LINE + 5 +30C + 8 +0 + 62 + 0 + 10 +5587.5 + 20 +11279.980835 + 30 +0.0 + 11 +5612.5 + 21 +11279.980835 + 31 +0.0 + 0 +LINE + 5 +30D + 8 +0 + 62 + 0 + 10 +5662.5 + 20 +11279.980835 + 30 +0.0 + 11 +5687.5 + 21 +11279.980835 + 31 +0.0 + 0 +LINE + 5 +30E + 8 +0 + 62 + 0 + 10 +5550.0 + 20 +11301.63147 + 30 +0.0 + 11 +5575.0 + 21 +11301.63147 + 31 +0.0 + 0 +LINE + 5 +30F + 8 +0 + 62 + 0 + 10 +5625.0 + 20 +11301.63147 + 30 +0.0 + 11 +5650.0 + 21 +11301.63147 + 31 +0.0 + 0 +LINE + 5 +310 + 8 +0 + 62 + 0 + 10 +5700.0 + 20 +11301.63147 + 30 +0.0 + 11 +5710.0 + 21 +11301.63147 + 31 +0.0 + 0 +LINE + 5 +311 + 8 +0 + 62 + 0 + 10 +5512.5 + 20 +11323.282105 + 30 +0.0 + 11 +5537.5 + 21 +11323.282105 + 31 +0.0 + 0 +LINE + 5 +312 + 8 +0 + 62 + 0 + 10 +5587.5 + 20 +11323.282105 + 30 +0.0 + 11 +5612.5 + 21 +11323.282105 + 31 +0.0 + 0 +LINE + 5 +313 + 8 +0 + 62 + 0 + 10 +5662.5 + 20 +11323.282105 + 30 +0.0 + 11 +5687.5 + 21 +11323.282105 + 31 +0.0 + 0 +LINE + 5 +314 + 8 +0 + 62 + 0 + 10 +5550.0 + 20 +11344.93274 + 30 +0.0 + 11 +5575.0 + 21 +11344.93274 + 31 +0.0 + 0 +LINE + 5 +315 + 8 +0 + 62 + 0 + 10 +5625.0 + 20 +11344.93274 + 30 +0.0 + 11 +5650.0 + 21 +11344.93274 + 31 +0.0 + 0 +LINE + 5 +316 + 8 +0 + 62 + 0 + 10 +5700.0 + 20 +11344.93274 + 30 +0.0 + 11 +5710.0 + 21 +11344.93274 + 31 +0.0 + 0 +LINE + 5 +317 + 8 +0 + 62 + 0 + 10 +5512.5 + 20 +11366.583375 + 30 +0.0 + 11 +5537.5 + 21 +11366.583375 + 31 +0.0 + 0 +LINE + 5 +318 + 8 +0 + 62 + 0 + 10 +5587.5 + 20 +11366.583375 + 30 +0.0 + 11 +5612.5 + 21 +11366.583375 + 31 +0.0 + 0 +LINE + 5 +319 + 8 +0 + 62 + 0 + 10 +5662.5 + 20 +11366.583375 + 30 +0.0 + 11 +5687.5 + 21 +11366.583375 + 31 +0.0 + 0 +LINE + 5 +31A + 8 +0 + 62 + 0 + 10 +5550.0 + 20 +11388.23401 + 30 +0.0 + 11 +5575.0 + 21 +11388.23401 + 31 +0.0 + 0 +LINE + 5 +31B + 8 +0 + 62 + 0 + 10 +5625.0 + 20 +11388.23401 + 30 +0.0 + 11 +5650.0 + 21 +11388.23401 + 31 +0.0 + 0 +LINE + 5 +31C + 8 +0 + 62 + 0 + 10 +5700.0 + 20 +11388.23401 + 30 +0.0 + 11 +5710.0 + 21 +11388.23401 + 31 +0.0 + 0 +LINE + 5 +31D + 8 +0 + 62 + 0 + 10 +5512.5 + 20 +11409.884645 + 30 +0.0 + 11 +5537.5 + 21 +11409.884645 + 31 +0.0 + 0 +LINE + 5 +31E + 8 +0 + 62 + 0 + 10 +5587.5 + 20 +11409.884645 + 30 +0.0 + 11 +5612.5 + 21 +11409.884645 + 31 +0.0 + 0 +LINE + 5 +31F + 8 +0 + 62 + 0 + 10 +5662.5 + 20 +11409.884645 + 30 +0.0 + 11 +5687.5 + 21 +11409.884645 + 31 +0.0 + 0 +LINE + 5 +320 + 8 +0 + 62 + 0 + 10 +5550.0 + 20 +11431.53528 + 30 +0.0 + 11 +5575.0 + 21 +11431.53528 + 31 +0.0 + 0 +LINE + 5 +321 + 8 +0 + 62 + 0 + 10 +5625.0 + 20 +11431.53528 + 30 +0.0 + 11 +5650.0 + 21 +11431.53528 + 31 +0.0 + 0 +LINE + 5 +322 + 8 +0 + 62 + 0 + 10 +5700.0 + 20 +11431.53528 + 30 +0.0 + 11 +5710.0 + 21 +11431.53528 + 31 +0.0 + 0 +LINE + 5 +323 + 8 +0 + 62 + 0 + 10 +5512.5 + 20 +11453.185915 + 30 +0.0 + 11 +5537.5 + 21 +11453.185915 + 31 +0.0 + 0 +LINE + 5 +324 + 8 +0 + 62 + 0 + 10 +5587.5 + 20 +11453.185915 + 30 +0.0 + 11 +5612.5 + 21 +11453.185915 + 31 +0.0 + 0 +LINE + 5 +325 + 8 +0 + 62 + 0 + 10 +5662.5 + 20 +11453.185915 + 30 +0.0 + 11 +5687.5 + 21 +11453.185915 + 31 +0.0 + 0 +LINE + 5 +326 + 8 +0 + 62 + 0 + 10 +5550.0 + 20 +11474.83655 + 30 +0.0 + 11 +5575.0 + 21 +11474.83655 + 31 +0.0 + 0 +LINE + 5 +327 + 8 +0 + 62 + 0 + 10 +5625.0 + 20 +11474.83655 + 30 +0.0 + 11 +5650.0 + 21 +11474.83655 + 31 +0.0 + 0 +LINE + 5 +328 + 8 +0 + 62 + 0 + 10 +5700.0 + 20 +11474.83655 + 30 +0.0 + 11 +5710.0 + 21 +11474.83655 + 31 +0.0 + 0 +LINE + 5 +329 + 8 +0 + 62 + 0 + 10 +5512.5 + 20 +11496.487185 + 30 +0.0 + 11 +5537.5 + 21 +11496.487185 + 31 +0.0 + 0 +LINE + 5 +32A + 8 +0 + 62 + 0 + 10 +5587.5 + 20 +11496.487185 + 30 +0.0 + 11 +5612.5 + 21 +11496.487185 + 31 +0.0 + 0 +LINE + 5 +32B + 8 +0 + 62 + 0 + 10 +5662.5 + 20 +11496.487185 + 30 +0.0 + 11 +5687.5 + 21 +11496.487185 + 31 +0.0 + 0 +LINE + 5 +32C + 8 +0 + 62 + 0 + 10 +5550.0 + 20 +11518.13782 + 30 +0.0 + 11 +5575.0 + 21 +11518.13782 + 31 +0.0 + 0 +LINE + 5 +32D + 8 +0 + 62 + 0 + 10 +5625.0 + 20 +11518.13782 + 30 +0.0 + 11 +5650.0 + 21 +11518.13782 + 31 +0.0 + 0 +LINE + 5 +32E + 8 +0 + 62 + 0 + 10 +5700.0 + 20 +11518.13782 + 30 +0.0 + 11 +5710.0 + 21 +11518.13782 + 31 +0.0 + 0 +LINE + 5 +32F + 8 +0 + 62 + 0 + 10 +5512.5 + 20 +11539.788455 + 30 +0.0 + 11 +5537.5 + 21 +11539.788455 + 31 +0.0 + 0 +LINE + 5 +330 + 8 +0 + 62 + 0 + 10 +5587.5 + 20 +11539.788455 + 30 +0.0 + 11 +5612.5 + 21 +11539.788455 + 31 +0.0 + 0 +LINE + 5 +331 + 8 +0 + 62 + 0 + 10 +5662.5 + 20 +11539.788455 + 30 +0.0 + 11 +5687.5 + 21 +11539.788455 + 31 +0.0 + 0 +LINE + 5 +332 + 8 +0 + 62 + 0 + 10 +5550.0 + 20 +11561.43909 + 30 +0.0 + 11 +5575.0 + 21 +11561.43909 + 31 +0.0 + 0 +LINE + 5 +333 + 8 +0 + 62 + 0 + 10 +5625.0 + 20 +11561.43909 + 30 +0.0 + 11 +5650.0 + 21 +11561.43909 + 31 +0.0 + 0 +LINE + 5 +334 + 8 +0 + 62 + 0 + 10 +5700.0 + 20 +11561.43909 + 30 +0.0 + 11 +5710.0 + 21 +11561.43909 + 31 +0.0 + 0 +LINE + 5 +335 + 8 +0 + 62 + 0 + 10 +5512.5 + 20 +11583.089725 + 30 +0.0 + 11 +5537.5 + 21 +11583.089725 + 31 +0.0 + 0 +LINE + 5 +336 + 8 +0 + 62 + 0 + 10 +5587.5 + 20 +11583.089725 + 30 +0.0 + 11 +5612.5 + 21 +11583.089725 + 31 +0.0 + 0 +LINE + 5 +337 + 8 +0 + 62 + 0 + 10 +5662.5 + 20 +11583.089725 + 30 +0.0 + 11 +5687.5 + 21 +11583.089725 + 31 +0.0 + 0 +LINE + 5 +338 + 8 +0 + 62 + 0 + 10 +5550.0 + 20 +11604.74036 + 30 +0.0 + 11 +5575.0 + 21 +11604.74036 + 31 +0.0 + 0 +LINE + 5 +339 + 8 +0 + 62 + 0 + 10 +5625.0 + 20 +11604.74036 + 30 +0.0 + 11 +5650.0 + 21 +11604.74036 + 31 +0.0 + 0 +LINE + 5 +33A + 8 +0 + 62 + 0 + 10 +5700.0 + 20 +11604.74036 + 30 +0.0 + 11 +5710.0 + 21 +11604.74036 + 31 +0.0 + 0 +LINE + 5 +33B + 8 +0 + 62 + 0 + 10 +5512.5 + 20 +11626.390995 + 30 +0.0 + 11 +5537.5 + 21 +11626.390995 + 31 +0.0 + 0 +LINE + 5 +33C + 8 +0 + 62 + 0 + 10 +5587.5 + 20 +11626.390995 + 30 +0.0 + 11 +5612.5 + 21 +11626.390995 + 31 +0.0 + 0 +LINE + 5 +33D + 8 +0 + 62 + 0 + 10 +5662.5 + 20 +11626.390995 + 30 +0.0 + 11 +5687.5 + 21 +11626.390995 + 31 +0.0 + 0 +LINE + 5 +33E + 8 +0 + 62 + 0 + 10 +5550.0 + 20 +11648.04163 + 30 +0.0 + 11 +5575.0 + 21 +11648.04163 + 31 +0.0 + 0 +LINE + 5 +33F + 8 +0 + 62 + 0 + 10 +5625.0 + 20 +11648.04163 + 30 +0.0 + 11 +5650.0 + 21 +11648.04163 + 31 +0.0 + 0 +LINE + 5 +340 + 8 +0 + 62 + 0 + 10 +5700.0 + 20 +11648.04163 + 30 +0.0 + 11 +5710.0 + 21 +11648.04163 + 31 +0.0 + 0 +LINE + 5 +341 + 8 +0 + 62 + 0 + 10 +5512.5 + 20 +11669.692265 + 30 +0.0 + 11 +5537.5 + 21 +11669.692265 + 31 +0.0 + 0 +LINE + 5 +342 + 8 +0 + 62 + 0 + 10 +5587.5 + 20 +11669.692265 + 30 +0.0 + 11 +5612.5 + 21 +11669.692265 + 31 +0.0 + 0 +LINE + 5 +343 + 8 +0 + 62 + 0 + 10 +5662.5 + 20 +11669.692265 + 30 +0.0 + 11 +5687.5 + 21 +11669.692265 + 31 +0.0 + 0 +LINE + 5 +344 + 8 +0 + 62 + 0 + 10 +5550.0 + 20 +11691.3429 + 30 +0.0 + 11 +5575.0 + 21 +11691.3429 + 31 +0.0 + 0 +LINE + 5 +345 + 8 +0 + 62 + 0 + 10 +5625.0 + 20 +11691.3429 + 30 +0.0 + 11 +5650.0 + 21 +11691.3429 + 31 +0.0 + 0 +LINE + 5 +346 + 8 +0 + 62 + 0 + 10 +5700.0 + 20 +11691.3429 + 30 +0.0 + 11 +5710.0 + 21 +11691.3429 + 31 +0.0 + 0 +LINE + 5 +347 + 8 +0 + 62 + 0 + 10 +5512.5 + 20 +11712.993535 + 30 +0.0 + 11 +5537.5 + 21 +11712.993535 + 31 +0.0 + 0 +LINE + 5 +348 + 8 +0 + 62 + 0 + 10 +5587.5 + 20 +11712.993535 + 30 +0.0 + 11 +5612.5 + 21 +11712.993535 + 31 +0.0 + 0 +LINE + 5 +349 + 8 +0 + 62 + 0 + 10 +5662.5 + 20 +11712.993535 + 30 +0.0 + 11 +5687.5 + 21 +11712.993535 + 31 +0.0 + 0 +LINE + 5 +34A + 8 +0 + 62 + 0 + 10 +5550.0 + 20 +11171.72766 + 30 +0.0 + 11 +5575.0 + 21 +11171.72766 + 31 +0.0 + 0 +LINE + 5 +34B + 8 +0 + 62 + 0 + 10 +5625.0 + 20 +11171.72766 + 30 +0.0 + 11 +5650.0 + 21 +11171.72766 + 31 +0.0 + 0 +LINE + 5 +34C + 8 +0 + 62 + 0 + 10 +5700.0 + 20 +11171.72766 + 30 +0.0 + 11 +5710.0 + 21 +11171.72766 + 31 +0.0 + 0 +LINE + 5 +34D + 8 +0 + 62 + 0 + 10 +5512.5 + 20 +11150.077025 + 30 +0.0 + 11 +5537.5 + 21 +11150.077025 + 31 +0.0 + 0 +LINE + 5 +34E + 8 +0 + 62 + 0 + 10 +5587.5 + 20 +11150.077025 + 30 +0.0 + 11 +5612.5 + 21 +11150.077025 + 31 +0.0 + 0 +LINE + 5 +34F + 8 +0 + 62 + 0 + 10 +5662.5 + 20 +11150.077025 + 30 +0.0 + 11 +5687.5 + 21 +11150.077025 + 31 +0.0 + 0 +LINE + 5 +350 + 8 +0 + 62 + 0 + 10 +5550.0 + 20 +11128.42639 + 30 +0.0 + 11 +5575.0 + 21 +11128.42639 + 31 +0.0 + 0 +LINE + 5 +351 + 8 +0 + 62 + 0 + 10 +5625.0 + 20 +11128.42639 + 30 +0.0 + 11 +5650.0 + 21 +11128.42639 + 31 +0.0 + 0 +LINE + 5 +352 + 8 +0 + 62 + 0 + 10 +5700.0 + 20 +11128.42639 + 30 +0.0 + 11 +5710.0 + 21 +11128.42639 + 31 +0.0 + 0 +LINE + 5 +353 + 8 +0 + 62 + 0 + 10 +5512.5 + 20 +11106.775755 + 30 +0.0 + 11 +5537.5 + 21 +11106.775755 + 31 +0.0 + 0 +LINE + 5 +354 + 8 +0 + 62 + 0 + 10 +5587.5 + 20 +11106.775755 + 30 +0.0 + 11 +5612.5 + 21 +11106.775755 + 31 +0.0 + 0 +LINE + 5 +355 + 8 +0 + 62 + 0 + 10 +5662.5 + 20 +11106.775755 + 30 +0.0 + 11 +5687.5 + 21 +11106.775755 + 31 +0.0 + 0 +LINE + 5 +356 + 8 +0 + 62 + 0 + 10 +5550.0 + 20 +11085.12512 + 30 +0.0 + 11 +5575.0 + 21 +11085.12512 + 31 +0.0 + 0 +LINE + 5 +357 + 8 +0 + 62 + 0 + 10 +5625.0 + 20 +11085.12512 + 30 +0.0 + 11 +5650.0 + 21 +11085.12512 + 31 +0.0 + 0 +LINE + 5 +358 + 8 +0 + 62 + 0 + 10 +5700.0 + 20 +11085.12512 + 30 +0.0 + 11 +5710.0 + 21 +11085.12512 + 31 +0.0 + 0 +LINE + 5 +359 + 8 +0 + 62 + 0 + 10 +5512.5 + 20 +11063.474485 + 30 +0.0 + 11 +5537.5 + 21 +11063.474485 + 31 +0.0 + 0 +LINE + 5 +35A + 8 +0 + 62 + 0 + 10 +5587.5 + 20 +11063.474485 + 30 +0.0 + 11 +5612.5 + 21 +11063.474485 + 31 +0.0 + 0 +LINE + 5 +35B + 8 +0 + 62 + 0 + 10 +5662.5 + 20 +11063.474485 + 30 +0.0 + 11 +5687.5 + 21 +11063.474485 + 31 +0.0 + 0 +LINE + 5 +35C + 8 +0 + 62 + 0 + 10 +5550.0 + 20 +11041.82385 + 30 +0.0 + 11 +5575.0 + 21 +11041.82385 + 31 +0.0 + 0 +LINE + 5 +35D + 8 +0 + 62 + 0 + 10 +5625.0 + 20 +11041.82385 + 30 +0.0 + 11 +5650.0 + 21 +11041.82385 + 31 +0.0 + 0 +LINE + 5 +35E + 8 +0 + 62 + 0 + 10 +5700.0 + 20 +11041.82385 + 30 +0.0 + 11 +5710.0 + 21 +11041.82385 + 31 +0.0 + 0 +LINE + 5 +35F + 8 +0 + 62 + 0 + 10 +5512.5 + 20 +11020.173215 + 30 +0.0 + 11 +5537.5 + 21 +11020.173215 + 31 +0.0 + 0 +LINE + 5 +360 + 8 +0 + 62 + 0 + 10 +5587.5 + 20 +11020.173215 + 30 +0.0 + 11 +5612.5 + 21 +11020.173215 + 31 +0.0 + 0 +LINE + 5 +361 + 8 +0 + 62 + 0 + 10 +5662.5 + 20 +11020.173215 + 30 +0.0 + 11 +5687.5 + 21 +11020.173215 + 31 +0.0 + 0 +LINE + 5 +362 + 8 +0 + 62 + 0 + 10 +5550.0 + 20 +10998.52258 + 30 +0.0 + 11 +5575.0 + 21 +10998.52258 + 31 +0.0 + 0 +LINE + 5 +363 + 8 +0 + 62 + 0 + 10 +5625.0 + 20 +10998.52258 + 30 +0.0 + 11 +5650.0 + 21 +10998.52258 + 31 +0.0 + 0 +LINE + 5 +364 + 8 +0 + 62 + 0 + 10 +5700.0 + 20 +10998.52258 + 30 +0.0 + 11 +5710.0 + 21 +10998.52258 + 31 +0.0 + 0 +LINE + 5 +365 + 8 +0 + 62 + 0 + 10 +5512.5 + 20 +10976.871945 + 30 +0.0 + 11 +5537.5 + 21 +10976.871945 + 31 +0.0 + 0 +LINE + 5 +366 + 8 +0 + 62 + 0 + 10 +5587.5 + 20 +10976.871945 + 30 +0.0 + 11 +5612.5 + 21 +10976.871945 + 31 +0.0 + 0 +LINE + 5 +367 + 8 +0 + 62 + 0 + 10 +5662.5 + 20 +10976.871945 + 30 +0.0 + 11 +5687.5 + 21 +10976.871945 + 31 +0.0 + 0 +LINE + 5 +368 + 8 +0 + 62 + 0 + 10 +5550.0 + 20 +10955.22131 + 30 +0.0 + 11 +5575.0 + 21 +10955.22131 + 31 +0.0 + 0 +LINE + 5 +369 + 8 +0 + 62 + 0 + 10 +5625.0 + 20 +10955.22131 + 30 +0.0 + 11 +5650.0 + 21 +10955.22131 + 31 +0.0 + 0 +LINE + 5 +36A + 8 +0 + 62 + 0 + 10 +5700.0 + 20 +10955.22131 + 30 +0.0 + 11 +5710.0 + 21 +10955.22131 + 31 +0.0 + 0 +LINE + 5 +36B + 8 +0 + 62 + 0 + 10 +5512.5 + 20 +10933.570675 + 30 +0.0 + 11 +5537.5 + 21 +10933.570675 + 31 +0.0 + 0 +LINE + 5 +36C + 8 +0 + 62 + 0 + 10 +5587.5 + 20 +10933.570675 + 30 +0.0 + 11 +5612.5 + 21 +10933.570675 + 31 +0.0 + 0 +LINE + 5 +36D + 8 +0 + 62 + 0 + 10 +5662.5 + 20 +10933.570675 + 30 +0.0 + 11 +5687.5 + 21 +10933.570675 + 31 +0.0 + 0 +LINE + 5 +36E + 8 +0 + 62 + 0 + 10 +5550.0 + 20 +10911.92004 + 30 +0.0 + 11 +5575.0 + 21 +10911.92004 + 31 +0.0 + 0 +LINE + 5 +36F + 8 +0 + 62 + 0 + 10 +5625.0 + 20 +10911.92004 + 30 +0.0 + 11 +5650.0 + 21 +10911.92004 + 31 +0.0 + 0 +LINE + 5 +370 + 8 +0 + 62 + 0 + 10 +5700.0 + 20 +10911.92004 + 30 +0.0 + 11 +5710.0 + 21 +10911.92004 + 31 +0.0 + 0 +LINE + 5 +371 + 8 +0 + 62 + 0 + 10 +5512.5 + 20 +10890.269405 + 30 +0.0 + 11 +5537.5 + 21 +10890.269405 + 31 +0.0 + 0 +LINE + 5 +372 + 8 +0 + 62 + 0 + 10 +5587.5 + 20 +10890.269405 + 30 +0.0 + 11 +5612.5 + 21 +10890.269405 + 31 +0.0 + 0 +LINE + 5 +373 + 8 +0 + 62 + 0 + 10 +5662.5 + 20 +10890.269405 + 30 +0.0 + 11 +5687.5 + 21 +10890.269405 + 31 +0.0 + 0 +LINE + 5 +374 + 8 +0 + 62 + 0 + 10 +5550.0 + 20 +10868.61877 + 30 +0.0 + 11 +5575.0 + 21 +10868.61877 + 31 +0.0 + 0 +LINE + 5 +375 + 8 +0 + 62 + 0 + 10 +5625.0 + 20 +10868.61877 + 30 +0.0 + 11 +5650.0 + 21 +10868.61877 + 31 +0.0 + 0 +LINE + 5 +376 + 8 +0 + 62 + 0 + 10 +5700.0 + 20 +10868.61877 + 30 +0.0 + 11 +5710.0 + 21 +10868.61877 + 31 +0.0 + 0 +LINE + 5 +377 + 8 +0 + 62 + 0 + 10 +5512.5 + 20 +10846.968135 + 30 +0.0 + 11 +5537.5 + 21 +10846.968135 + 31 +0.0 + 0 +LINE + 5 +378 + 8 +0 + 62 + 0 + 10 +5587.5 + 20 +10846.968135 + 30 +0.0 + 11 +5612.5 + 21 +10846.968135 + 31 +0.0 + 0 +LINE + 5 +379 + 8 +0 + 62 + 0 + 10 +5662.5 + 20 +10846.968135 + 30 +0.0 + 11 +5687.5 + 21 +10846.968135 + 31 +0.0 + 0 +LINE + 5 +37A + 8 +0 + 62 + 0 + 10 +5550.0 + 20 +10825.3175 + 30 +0.0 + 11 +5575.0 + 21 +10825.3175 + 31 +0.0 + 0 +LINE + 5 +37B + 8 +0 + 62 + 0 + 10 +5625.0 + 20 +10825.3175 + 30 +0.0 + 11 +5650.0 + 21 +10825.3175 + 31 +0.0 + 0 +LINE + 5 +37C + 8 +0 + 62 + 0 + 10 +5512.5 + 20 +10803.666865 + 30 +0.0 + 11 +5537.5 + 21 +10803.666865 + 31 +0.0 + 0 +LINE + 5 +37D + 8 +0 + 62 + 0 + 10 +5587.5 + 20 +10803.666865 + 30 +0.0 + 11 +5612.5 + 21 +10803.666865 + 31 +0.0 + 0 +LINE + 5 +37E + 8 +0 + 62 + 0 + 10 +5550.0 + 20 +10782.01623 + 30 +0.0 + 11 +5575.0 + 21 +10782.01623 + 31 +0.0 + 0 +LINE + 5 +37F + 8 +0 + 62 + 0 + 10 +5512.5 + 20 +10760.365595 + 30 +0.0 + 11 +5537.5 + 21 +10760.365595 + 31 +0.0 + 0 +LINE + 5 +380 + 8 +0 + 62 + 0 + 10 +5587.5 + 20 +10760.365595 + 30 +0.0 + 11 +5598.291572 + 21 +10760.365595 + 31 +0.0 + 0 +LINE + 5 +381 + 8 +0 + 62 + 0 + 10 +5550.0 + 20 +10738.71496 + 30 +0.0 + 11 +5575.0 + 21 +10738.71496 + 31 +0.0 + 0 +LINE + 5 +382 + 8 +0 + 62 + 0 + 10 +5512.5 + 20 +10717.064325 + 30 +0.0 + 11 +5537.5 + 21 +10717.064325 + 31 +0.0 + 0 +LINE + 5 +383 + 8 +0 + 62 + 0 + 10 +5512.5 + 20 +10673.763055 + 30 +0.0 + 11 +5522.357461 + 21 +10673.763055 + 31 +0.0 + 0 +LINE + 5 +384 + 8 +0 + 62 + 0 + 10 +5699.999961 + 20 +10998.522605 + 30 +0.0 + 11 +5687.499961 + 21 +11020.17324 + 31 +0.0 + 0 +LINE + 5 +385 + 8 +0 + 62 + 0 + 10 +5662.499961 + 20 +11063.474511 + 30 +0.0 + 11 +5649.999961 + 21 +11085.125146 + 31 +0.0 + 0 +LINE + 5 +386 + 8 +0 + 62 + 0 + 10 +5624.999961 + 20 +11128.426416 + 30 +0.0 + 11 +5612.499961 + 21 +11150.077051 + 31 +0.0 + 0 +LINE + 5 +387 + 8 +0 + 62 + 0 + 10 +5587.499961 + 20 +11193.378321 + 30 +0.0 + 11 +5574.999961 + 21 +11215.028956 + 31 +0.0 + 0 +LINE + 5 +388 + 8 +0 + 62 + 0 + 10 +5549.999961 + 20 +11258.330226 + 30 +0.0 + 11 +5537.499961 + 21 +11279.980861 + 31 +0.0 + 0 +LINE + 5 +389 + 8 +0 + 62 + 0 + 10 +5512.499961 + 20 +11323.282132 + 30 +0.0 + 11 +5510.0 + 21 +11327.61219 + 31 +0.0 + 0 +LINE + 5 +38A + 8 +0 + 62 + 0 + 10 +5699.999961 + 20 +10955.221335 + 30 +0.0 + 11 +5687.499961 + 21 +10976.87197 + 31 +0.0 + 0 +LINE + 5 +38B + 8 +0 + 62 + 0 + 10 +5662.499961 + 20 +11020.17324 + 30 +0.0 + 11 +5649.999961 + 21 +11041.823875 + 31 +0.0 + 0 +LINE + 5 +38C + 8 +0 + 62 + 0 + 10 +5624.999961 + 20 +11085.125146 + 30 +0.0 + 11 +5612.499961 + 21 +11106.775781 + 31 +0.0 + 0 +LINE + 5 +38D + 8 +0 + 62 + 0 + 10 +5587.499961 + 20 +11150.077051 + 30 +0.0 + 11 +5574.999961 + 21 +11171.727686 + 31 +0.0 + 0 +LINE + 5 +38E + 8 +0 + 62 + 0 + 10 +5549.999961 + 20 +11215.028956 + 30 +0.0 + 11 +5537.499961 + 21 +11236.679591 + 31 +0.0 + 0 +LINE + 5 +38F + 8 +0 + 62 + 0 + 10 +5512.499961 + 20 +11279.980862 + 30 +0.0 + 11 +5510.0 + 21 +11284.31092 + 31 +0.0 + 0 +LINE + 5 +390 + 8 +0 + 62 + 0 + 10 +5699.999961 + 20 +10911.920065 + 30 +0.0 + 11 +5687.499961 + 21 +10933.5707 + 31 +0.0 + 0 +LINE + 5 +391 + 8 +0 + 62 + 0 + 10 +5662.499961 + 20 +10976.87197 + 30 +0.0 + 11 +5649.999961 + 21 +10998.522605 + 31 +0.0 + 0 +LINE + 5 +392 + 8 +0 + 62 + 0 + 10 +5624.999961 + 20 +11041.823876 + 30 +0.0 + 11 +5612.499961 + 21 +11063.474511 + 31 +0.0 + 0 +LINE + 5 +393 + 8 +0 + 62 + 0 + 10 +5587.499961 + 20 +11106.775781 + 30 +0.0 + 11 +5574.999961 + 21 +11128.426416 + 31 +0.0 + 0 +LINE + 5 +394 + 8 +0 + 62 + 0 + 10 +5549.999961 + 20 +11171.727686 + 30 +0.0 + 11 +5537.499961 + 21 +11193.378321 + 31 +0.0 + 0 +LINE + 5 +395 + 8 +0 + 62 + 0 + 10 +5512.499961 + 20 +11236.679591 + 30 +0.0 + 11 +5510.0 + 21 +11241.00965 + 31 +0.0 + 0 +LINE + 5 +396 + 8 +0 + 62 + 0 + 10 +5699.999961 + 20 +10868.618795 + 30 +0.0 + 11 +5687.499961 + 21 +10890.26943 + 31 +0.0 + 0 +LINE + 5 +397 + 8 +0 + 62 + 0 + 10 +5662.499961 + 20 +10933.5707 + 30 +0.0 + 11 +5649.999961 + 21 +10955.221335 + 31 +0.0 + 0 +LINE + 5 +398 + 8 +0 + 62 + 0 + 10 +5624.999961 + 20 +10998.522605 + 30 +0.0 + 11 +5612.499961 + 21 +11020.17324 + 31 +0.0 + 0 +LINE + 5 +399 + 8 +0 + 62 + 0 + 10 +5587.499961 + 20 +11063.474511 + 30 +0.0 + 11 +5574.999961 + 21 +11085.125146 + 31 +0.0 + 0 +LINE + 5 +39A + 8 +0 + 62 + 0 + 10 +5549.999961 + 20 +11128.426416 + 30 +0.0 + 11 +5537.499961 + 21 +11150.077051 + 31 +0.0 + 0 +LINE + 5 +39B + 8 +0 + 62 + 0 + 10 +5512.499961 + 20 +11193.378321 + 30 +0.0 + 11 +5510.0 + 21 +11197.70838 + 31 +0.0 + 0 +LINE + 5 +39C + 8 +0 + 62 + 0 + 10 +5688.636278 + 20 +10845.0 + 30 +0.0 + 11 +5687.499961 + 21 +10846.96816 + 31 +0.0 + 0 +LINE + 5 +39D + 8 +0 + 62 + 0 + 10 +5662.499961 + 20 +10890.26943 + 30 +0.0 + 11 +5649.999961 + 21 +10911.920065 + 31 +0.0 + 0 +LINE + 5 +39E + 8 +0 + 62 + 0 + 10 +5624.999961 + 20 +10955.221335 + 30 +0.0 + 11 +5612.499961 + 21 +10976.87197 + 31 +0.0 + 0 +LINE + 5 +39F + 8 +0 + 62 + 0 + 10 +5587.499961 + 20 +11020.173241 + 30 +0.0 + 11 +5574.999961 + 21 +11041.823876 + 31 +0.0 + 0 +LINE + 5 +3A0 + 8 +0 + 62 + 0 + 10 +5549.999961 + 20 +11085.125146 + 30 +0.0 + 11 +5537.499961 + 21 +11106.775781 + 31 +0.0 + 0 +LINE + 5 +3A1 + 8 +0 + 62 + 0 + 10 +5512.499961 + 20 +11150.077051 + 30 +0.0 + 11 +5510.0 + 21 +11154.40711 + 31 +0.0 + 0 +LINE + 5 +3A2 + 8 +0 + 62 + 0 + 10 +5662.499961 + 20 +10846.96816 + 30 +0.0 + 11 +5649.999961 + 21 +10868.618795 + 31 +0.0 + 0 +LINE + 5 +3A3 + 8 +0 + 62 + 0 + 10 +5624.999961 + 20 +10911.920065 + 30 +0.0 + 11 +5612.499961 + 21 +10933.5707 + 31 +0.0 + 0 +LINE + 5 +3A4 + 8 +0 + 62 + 0 + 10 +5587.499961 + 20 +10976.87197 + 30 +0.0 + 11 +5574.999961 + 21 +10998.522605 + 31 +0.0 + 0 +LINE + 5 +3A5 + 8 +0 + 62 + 0 + 10 +5549.999961 + 20 +11041.823876 + 30 +0.0 + 11 +5537.499961 + 21 +11063.474511 + 31 +0.0 + 0 +LINE + 5 +3A6 + 8 +0 + 62 + 0 + 10 +5512.499961 + 20 +11106.775781 + 30 +0.0 + 11 +5510.0 + 21 +11111.10584 + 31 +0.0 + 0 +LINE + 5 +3A7 + 8 +0 + 62 + 0 + 10 +5652.081294 + 20 +10821.71255 + 30 +0.0 + 11 +5649.999961 + 21 +10825.317525 + 31 +0.0 + 0 +LINE + 5 +3A8 + 8 +0 + 62 + 0 + 10 +5624.999961 + 20 +10868.618795 + 30 +0.0 + 11 +5612.499961 + 21 +10890.26943 + 31 +0.0 + 0 +LINE + 5 +3A9 + 8 +0 + 62 + 0 + 10 +5587.499961 + 20 +10933.5707 + 30 +0.0 + 11 +5574.999961 + 21 +10955.221335 + 31 +0.0 + 0 +LINE + 5 +3AA + 8 +0 + 62 + 0 + 10 +5549.999961 + 20 +10998.522606 + 30 +0.0 + 11 +5537.499961 + 21 +11020.173241 + 31 +0.0 + 0 +LINE + 5 +3AB + 8 +0 + 62 + 0 + 10 +5512.499961 + 20 +11063.474511 + 30 +0.0 + 11 +5510.0 + 21 +11067.80457 + 31 +0.0 + 0 +LINE + 5 +3AC + 8 +0 + 62 + 0 + 10 +5624.999961 + 20 +10825.317525 + 30 +0.0 + 11 +5612.499961 + 21 +10846.96816 + 31 +0.0 + 0 +LINE + 5 +3AD + 8 +0 + 62 + 0 + 10 +5587.499961 + 20 +10890.26943 + 30 +0.0 + 11 +5574.999961 + 21 +10911.920065 + 31 +0.0 + 0 +LINE + 5 +3AE + 8 +0 + 62 + 0 + 10 +5549.999961 + 20 +10955.221335 + 30 +0.0 + 11 +5537.499961 + 21 +10976.87197 + 31 +0.0 + 0 +LINE + 5 +3AF + 8 +0 + 62 + 0 + 10 +5512.499961 + 20 +11020.173241 + 30 +0.0 + 11 +5510.0 + 21 +11024.5033 + 31 +0.0 + 0 +LINE + 5 +3B0 + 8 +0 + 62 + 0 + 10 +5621.932945 + 20 +10787.328483 + 30 +0.0 + 11 +5612.499961 + 21 +10803.66689 + 31 +0.0 + 0 +LINE + 5 +3B1 + 8 +0 + 62 + 0 + 10 +5587.499961 + 20 +10846.96816 + 30 +0.0 + 11 +5574.999961 + 21 +10868.618795 + 31 +0.0 + 0 +LINE + 5 +3B2 + 8 +0 + 62 + 0 + 10 +5549.999961 + 20 +10911.920065 + 30 +0.0 + 11 +5537.499961 + 21 +10933.5707 + 31 +0.0 + 0 +LINE + 5 +3B3 + 8 +0 + 62 + 0 + 10 +5512.499961 + 20 +10976.871971 + 30 +0.0 + 11 +5510.0 + 21 +10981.20203 + 31 +0.0 + 0 +LINE + 5 +3B4 + 8 +0 + 62 + 0 + 10 +5587.499961 + 20 +10803.66689 + 30 +0.0 + 11 +5574.999961 + 21 +10825.317525 + 31 +0.0 + 0 +LINE + 5 +3B5 + 8 +0 + 62 + 0 + 10 +5549.999961 + 20 +10868.618795 + 30 +0.0 + 11 +5537.499961 + 21 +10890.26943 + 31 +0.0 + 0 +LINE + 5 +3B6 + 8 +0 + 62 + 0 + 10 +5512.499961 + 20 +10933.5707 + 30 +0.0 + 11 +5510.0 + 21 +10937.90076 + 31 +0.0 + 0 +LINE + 5 +3B7 + 8 +0 + 62 + 0 + 10 +5587.499961 + 20 +10760.36562 + 30 +0.0 + 11 +5574.999961 + 21 +10782.016255 + 31 +0.0 + 0 +LINE + 5 +3B8 + 8 +0 + 62 + 0 + 10 +5549.999961 + 20 +10825.317525 + 30 +0.0 + 11 +5537.499961 + 21 +10846.96816 + 31 +0.0 + 0 +LINE + 5 +3B9 + 8 +0 + 62 + 0 + 10 +5512.499961 + 20 +10890.26943 + 30 +0.0 + 11 +5510.0 + 21 +10894.59949 + 31 +0.0 + 0 +LINE + 5 +3BA + 8 +0 + 62 + 0 + 10 +5576.710421 + 20 +10735.752381 + 30 +0.0 + 11 +5574.999961 + 21 +10738.714985 + 31 +0.0 + 0 +LINE + 5 +3BB + 8 +0 + 62 + 0 + 10 +5549.999961 + 20 +10782.016255 + 30 +0.0 + 11 +5537.499961 + 21 +10803.66689 + 31 +0.0 + 0 +LINE + 5 +3BC + 8 +0 + 62 + 0 + 10 +5512.499961 + 20 +10846.96816 + 30 +0.0 + 11 +5510.0 + 21 +10851.29822 + 31 +0.0 + 0 +LINE + 5 +3BD + 8 +0 + 62 + 0 + 10 +5549.999961 + 20 +10738.714985 + 30 +0.0 + 11 +5537.499961 + 21 +10760.36562 + 31 +0.0 + 0 +LINE + 5 +3BE + 8 +0 + 62 + 0 + 10 +5512.499961 + 20 +10803.66689 + 30 +0.0 + 11 +5510.0 + 21 +10807.99695 + 31 +0.0 + 0 +LINE + 5 +3BF + 8 +0 + 62 + 0 + 10 +5546.562072 + 20 +10701.368314 + 30 +0.0 + 11 +5537.499962 + 21 +10717.06435 + 31 +0.0 + 0 +LINE + 5 +3C0 + 8 +0 + 62 + 0 + 10 +5512.499962 + 20 +10760.36562 + 30 +0.0 + 11 +5510.0 + 21 +10764.69568 + 31 +0.0 + 0 +LINE + 5 +3C1 + 8 +0 + 62 + 0 + 10 +5512.499962 + 20 +10717.06435 + 30 +0.0 + 11 +5510.0 + 21 +10721.39441 + 31 +0.0 + 0 +LINE + 5 +3C2 + 8 +0 + 62 + 0 + 10 +5512.499962 + 20 +10673.76308 + 30 +0.0 + 11 +5510.0 + 21 +10678.09314 + 31 +0.0 + 0 +LINE + 5 +3C3 + 8 +0 + 62 + 0 + 10 +5699.99996 + 20 +11041.823875 + 30 +0.0 + 11 +5687.49996 + 21 +11063.47451 + 31 +0.0 + 0 +LINE + 5 +3C4 + 8 +0 + 62 + 0 + 10 +5662.49996 + 20 +11106.775781 + 30 +0.0 + 11 +5649.99996 + 21 +11128.426416 + 31 +0.0 + 0 +LINE + 5 +3C5 + 8 +0 + 62 + 0 + 10 +5624.99996 + 20 +11171.727686 + 30 +0.0 + 11 +5612.49996 + 21 +11193.378321 + 31 +0.0 + 0 +LINE + 5 +3C6 + 8 +0 + 62 + 0 + 10 +5587.49996 + 20 +11236.679591 + 30 +0.0 + 11 +5574.99996 + 21 +11258.330226 + 31 +0.0 + 0 +LINE + 5 +3C7 + 8 +0 + 62 + 0 + 10 +5549.99996 + 20 +11301.631497 + 30 +0.0 + 11 +5537.49996 + 21 +11323.282132 + 31 +0.0 + 0 +LINE + 5 +3C8 + 8 +0 + 62 + 0 + 10 +5512.49996 + 20 +11366.583402 + 30 +0.0 + 11 +5510.0 + 21 +11370.91346 + 31 +0.0 + 0 +LINE + 5 +3C9 + 8 +0 + 62 + 0 + 10 +5699.99996 + 20 +11085.125146 + 30 +0.0 + 11 +5687.49996 + 21 +11106.775781 + 31 +0.0 + 0 +LINE + 5 +3CA + 8 +0 + 62 + 0 + 10 +5662.49996 + 20 +11150.077051 + 30 +0.0 + 11 +5649.99996 + 21 +11171.727686 + 31 +0.0 + 0 +LINE + 5 +3CB + 8 +0 + 62 + 0 + 10 +5624.99996 + 20 +11215.028956 + 30 +0.0 + 11 +5612.49996 + 21 +11236.679591 + 31 +0.0 + 0 +LINE + 5 +3CC + 8 +0 + 62 + 0 + 10 +5587.49996 + 20 +11279.980861 + 30 +0.0 + 11 +5574.99996 + 21 +11301.631496 + 31 +0.0 + 0 +LINE + 5 +3CD + 8 +0 + 62 + 0 + 10 +5549.99996 + 20 +11344.932767 + 30 +0.0 + 11 +5537.49996 + 21 +11366.583402 + 31 +0.0 + 0 +LINE + 5 +3CE + 8 +0 + 62 + 0 + 10 +5512.49996 + 20 +11409.884672 + 30 +0.0 + 11 +5510.0 + 21 +11414.21473 + 31 +0.0 + 0 +LINE + 5 +3CF + 8 +0 + 62 + 0 + 10 +5699.99996 + 20 +11128.426416 + 30 +0.0 + 11 +5687.49996 + 21 +11150.077051 + 31 +0.0 + 0 +LINE + 5 +3D0 + 8 +0 + 62 + 0 + 10 +5662.49996 + 20 +11193.378321 + 30 +0.0 + 11 +5649.99996 + 21 +11215.028956 + 31 +0.0 + 0 +LINE + 5 +3D1 + 8 +0 + 62 + 0 + 10 +5624.99996 + 20 +11258.330226 + 30 +0.0 + 11 +5612.49996 + 21 +11279.980861 + 31 +0.0 + 0 +LINE + 5 +3D2 + 8 +0 + 62 + 0 + 10 +5587.49996 + 20 +11323.282132 + 30 +0.0 + 11 +5574.99996 + 21 +11344.932767 + 31 +0.0 + 0 +LINE + 5 +3D3 + 8 +0 + 62 + 0 + 10 +5549.99996 + 20 +11388.234037 + 30 +0.0 + 11 +5537.49996 + 21 +11409.884672 + 31 +0.0 + 0 +LINE + 5 +3D4 + 8 +0 + 62 + 0 + 10 +5512.49996 + 20 +11453.185942 + 30 +0.0 + 11 +5510.0 + 21 +11457.516 + 31 +0.0 + 0 +LINE + 5 +3D5 + 8 +0 + 62 + 0 + 10 +5699.99996 + 20 +11171.727686 + 30 +0.0 + 11 +5687.49996 + 21 +11193.378321 + 31 +0.0 + 0 +LINE + 5 +3D6 + 8 +0 + 62 + 0 + 10 +5662.49996 + 20 +11236.679591 + 30 +0.0 + 11 +5649.99996 + 21 +11258.330226 + 31 +0.0 + 0 +LINE + 5 +3D7 + 8 +0 + 62 + 0 + 10 +5624.99996 + 20 +11301.631496 + 30 +0.0 + 11 +5612.49996 + 21 +11323.282131 + 31 +0.0 + 0 +LINE + 5 +3D8 + 8 +0 + 62 + 0 + 10 +5587.49996 + 20 +11366.583402 + 30 +0.0 + 11 +5574.99996 + 21 +11388.234037 + 31 +0.0 + 0 +LINE + 5 +3D9 + 8 +0 + 62 + 0 + 10 +5549.99996 + 20 +11431.535307 + 30 +0.0 + 11 +5537.49996 + 21 +11453.185942 + 31 +0.0 + 0 +LINE + 5 +3DA + 8 +0 + 62 + 0 + 10 +5512.49996 + 20 +11496.487212 + 30 +0.0 + 11 +5510.0 + 21 +11500.81727 + 31 +0.0 + 0 +LINE + 5 +3DB + 8 +0 + 62 + 0 + 10 +5699.99996 + 20 +11215.028956 + 30 +0.0 + 11 +5687.49996 + 21 +11236.679591 + 31 +0.0 + 0 +LINE + 5 +3DC + 8 +0 + 62 + 0 + 10 +5662.49996 + 20 +11279.980861 + 30 +0.0 + 11 +5649.99996 + 21 +11301.631496 + 31 +0.0 + 0 +LINE + 5 +3DD + 8 +0 + 62 + 0 + 10 +5624.99996 + 20 +11344.932767 + 30 +0.0 + 11 +5612.49996 + 21 +11366.583402 + 31 +0.0 + 0 +LINE + 5 +3DE + 8 +0 + 62 + 0 + 10 +5587.49996 + 20 +11409.884672 + 30 +0.0 + 11 +5574.99996 + 21 +11431.535307 + 31 +0.0 + 0 +LINE + 5 +3DF + 8 +0 + 62 + 0 + 10 +5549.99996 + 20 +11474.836577 + 30 +0.0 + 11 +5537.49996 + 21 +11496.487212 + 31 +0.0 + 0 +LINE + 5 +3E0 + 8 +0 + 62 + 0 + 10 +5512.49996 + 20 +11539.788482 + 30 +0.0 + 11 +5510.0 + 21 +11544.11854 + 31 +0.0 + 0 +LINE + 5 +3E1 + 8 +0 + 62 + 0 + 10 +5699.99996 + 20 +11258.330226 + 30 +0.0 + 11 +5687.49996 + 21 +11279.980861 + 31 +0.0 + 0 +LINE + 5 +3E2 + 8 +0 + 62 + 0 + 10 +5662.49996 + 20 +11323.282131 + 30 +0.0 + 11 +5649.99996 + 21 +11344.932766 + 31 +0.0 + 0 +LINE + 5 +3E3 + 8 +0 + 62 + 0 + 10 +5624.99996 + 20 +11388.234037 + 30 +0.0 + 11 +5612.49996 + 21 +11409.884672 + 31 +0.0 + 0 +LINE + 5 +3E4 + 8 +0 + 62 + 0 + 10 +5587.49996 + 20 +11453.185942 + 30 +0.0 + 11 +5574.99996 + 21 +11474.836577 + 31 +0.0 + 0 +LINE + 5 +3E5 + 8 +0 + 62 + 0 + 10 +5549.99996 + 20 +11518.137847 + 30 +0.0 + 11 +5537.49996 + 21 +11539.788482 + 31 +0.0 + 0 +LINE + 5 +3E6 + 8 +0 + 62 + 0 + 10 +5512.49996 + 20 +11583.089753 + 30 +0.0 + 11 +5510.0 + 21 +11587.41981 + 31 +0.0 + 0 +LINE + 5 +3E7 + 8 +0 + 62 + 0 + 10 +5699.99996 + 20 +11301.631496 + 30 +0.0 + 11 +5687.49996 + 21 +11323.282131 + 31 +0.0 + 0 +LINE + 5 +3E8 + 8 +0 + 62 + 0 + 10 +5662.49996 + 20 +11366.583402 + 30 +0.0 + 11 +5649.99996 + 21 +11388.234037 + 31 +0.0 + 0 +LINE + 5 +3E9 + 8 +0 + 62 + 0 + 10 +5624.99996 + 20 +11431.535307 + 30 +0.0 + 11 +5612.49996 + 21 +11453.185942 + 31 +0.0 + 0 +LINE + 5 +3EA + 8 +0 + 62 + 0 + 10 +5587.49996 + 20 +11496.487212 + 30 +0.0 + 11 +5574.99996 + 21 +11518.137847 + 31 +0.0 + 0 +LINE + 5 +3EB + 8 +0 + 62 + 0 + 10 +5549.99996 + 20 +11561.439117 + 30 +0.0 + 11 +5537.49996 + 21 +11583.089752 + 31 +0.0 + 0 +LINE + 5 +3EC + 8 +0 + 62 + 0 + 10 +5512.49996 + 20 +11626.391023 + 30 +0.0 + 11 +5510.0 + 21 +11630.72108 + 31 +0.0 + 0 +LINE + 5 +3ED + 8 +0 + 62 + 0 + 10 +5699.99996 + 20 +11344.932766 + 30 +0.0 + 11 +5687.49996 + 21 +11366.583401 + 31 +0.0 + 0 +LINE + 5 +3EE + 8 +0 + 62 + 0 + 10 +5662.49996 + 20 +11409.884672 + 30 +0.0 + 11 +5649.99996 + 21 +11431.535307 + 31 +0.0 + 0 +LINE + 5 +3EF + 8 +0 + 62 + 0 + 10 +5624.99996 + 20 +11474.836577 + 30 +0.0 + 11 +5612.49996 + 21 +11496.487212 + 31 +0.0 + 0 +LINE + 5 +3F0 + 8 +0 + 62 + 0 + 10 +5587.49996 + 20 +11539.788482 + 30 +0.0 + 11 +5574.99996 + 21 +11561.439117 + 31 +0.0 + 0 +LINE + 5 +3F1 + 8 +0 + 62 + 0 + 10 +5549.99996 + 20 +11604.740388 + 30 +0.0 + 11 +5537.49996 + 21 +11626.391023 + 31 +0.0 + 0 +LINE + 5 +3F2 + 8 +0 + 62 + 0 + 10 +5512.49996 + 20 +11669.692293 + 30 +0.0 + 11 +5510.0 + 21 +11674.02235 + 31 +0.0 + 0 +LINE + 5 +3F3 + 8 +0 + 62 + 0 + 10 +5699.99996 + 20 +11388.234037 + 30 +0.0 + 11 +5687.49996 + 21 +11409.884672 + 31 +0.0 + 0 +LINE + 5 +3F4 + 8 +0 + 62 + 0 + 10 +5662.49996 + 20 +11453.185942 + 30 +0.0 + 11 +5649.99996 + 21 +11474.836577 + 31 +0.0 + 0 +LINE + 5 +3F5 + 8 +0 + 62 + 0 + 10 +5624.99996 + 20 +11518.137847 + 30 +0.0 + 11 +5612.49996 + 21 +11539.788482 + 31 +0.0 + 0 +LINE + 5 +3F6 + 8 +0 + 62 + 0 + 10 +5587.49996 + 20 +11583.089752 + 30 +0.0 + 11 +5574.99996 + 21 +11604.740387 + 31 +0.0 + 0 +LINE + 5 +3F7 + 8 +0 + 62 + 0 + 10 +5549.99996 + 20 +11648.041658 + 30 +0.0 + 11 +5537.49996 + 21 +11669.692293 + 31 +0.0 + 0 +LINE + 5 +3F8 + 8 +0 + 62 + 0 + 10 +5512.49996 + 20 +11712.993563 + 30 +0.0 + 11 +5510.0 + 21 +11717.32362 + 31 +0.0 + 0 +LINE + 5 +3F9 + 8 +0 + 62 + 0 + 10 +5699.99996 + 20 +11431.535307 + 30 +0.0 + 11 +5687.49996 + 21 +11453.185942 + 31 +0.0 + 0 +LINE + 5 +3FA + 8 +0 + 62 + 0 + 10 +5662.49996 + 20 +11496.487212 + 30 +0.0 + 11 +5649.99996 + 21 +11518.137847 + 31 +0.0 + 0 +LINE + 5 +3FB + 8 +0 + 62 + 0 + 10 +5624.99996 + 20 +11561.439117 + 30 +0.0 + 11 +5612.49996 + 21 +11583.089752 + 31 +0.0 + 0 +LINE + 5 +3FC + 8 +0 + 62 + 0 + 10 +5587.49996 + 20 +11626.391023 + 30 +0.0 + 11 +5574.99996 + 21 +11648.041658 + 31 +0.0 + 0 +LINE + 5 +3FD + 8 +0 + 62 + 0 + 10 +5549.99996 + 20 +11691.342928 + 30 +0.0 + 11 +5537.49996 + 21 +11712.993563 + 31 +0.0 + 0 +LINE + 5 +3FE + 8 +0 + 62 + 0 + 10 +5699.99996 + 20 +11474.836577 + 30 +0.0 + 11 +5687.49996 + 21 +11496.487212 + 31 +0.0 + 0 +LINE + 5 +3FF + 8 +0 + 62 + 0 + 10 +5662.49996 + 20 +11539.788482 + 30 +0.0 + 11 +5649.99996 + 21 +11561.439117 + 31 +0.0 + 0 +LINE + 5 +400 + 8 +0 + 62 + 0 + 10 +5624.99996 + 20 +11604.740387 + 30 +0.0 + 11 +5612.49996 + 21 +11626.391022 + 31 +0.0 + 0 +LINE + 5 +401 + 8 +0 + 62 + 0 + 10 +5587.49996 + 20 +11669.692293 + 30 +0.0 + 11 +5574.99996 + 21 +11691.342928 + 31 +0.0 + 0 +LINE + 5 +402 + 8 +0 + 62 + 0 + 10 +5699.99996 + 20 +11518.137847 + 30 +0.0 + 11 +5687.49996 + 21 +11539.788482 + 31 +0.0 + 0 +LINE + 5 +403 + 8 +0 + 62 + 0 + 10 +5662.49996 + 20 +11583.089752 + 30 +0.0 + 11 +5649.99996 + 21 +11604.740387 + 31 +0.0 + 0 +LINE + 5 +404 + 8 +0 + 62 + 0 + 10 +5624.99996 + 20 +11648.041658 + 30 +0.0 + 11 +5612.49996 + 21 +11669.692293 + 31 +0.0 + 0 +LINE + 5 +405 + 8 +0 + 62 + 0 + 10 +5587.49996 + 20 +11712.993563 + 30 +0.0 + 11 +5577.681288 + 21 +11730.0 + 31 +0.0 + 0 +LINE + 5 +406 + 8 +0 + 62 + 0 + 10 +5699.999959 + 20 +11561.439117 + 30 +0.0 + 11 +5687.499959 + 21 +11583.089752 + 31 +0.0 + 0 +LINE + 5 +407 + 8 +0 + 62 + 0 + 10 +5662.499959 + 20 +11626.391022 + 30 +0.0 + 11 +5649.999959 + 21 +11648.041657 + 31 +0.0 + 0 +LINE + 5 +408 + 8 +0 + 62 + 0 + 10 +5624.999959 + 20 +11691.342928 + 30 +0.0 + 11 +5612.499959 + 21 +11712.993563 + 31 +0.0 + 0 +LINE + 5 +409 + 8 +0 + 62 + 0 + 10 +5699.999959 + 20 +11604.740387 + 30 +0.0 + 11 +5687.499959 + 21 +11626.391022 + 31 +0.0 + 0 +LINE + 5 +40A + 8 +0 + 62 + 0 + 10 +5662.499959 + 20 +11669.692293 + 30 +0.0 + 11 +5649.999959 + 21 +11691.342928 + 31 +0.0 + 0 +LINE + 5 +40B + 8 +0 + 62 + 0 + 10 +5699.999959 + 20 +11648.041657 + 30 +0.0 + 11 +5687.499959 + 21 +11669.692292 + 31 +0.0 + 0 +LINE + 5 +40C + 8 +0 + 62 + 0 + 10 +5662.499959 + 20 +11712.993563 + 30 +0.0 + 11 +5652.681288 + 21 +11730.0 + 31 +0.0 + 0 +LINE + 5 +40D + 8 +0 + 62 + 0 + 10 +5699.999959 + 20 +11691.342928 + 30 +0.0 + 11 +5687.499959 + 21 +11712.993563 + 31 +0.0 + 0 +LINE + 5 +40E + 8 +0 + 62 + 0 + 10 +5510.0 + 20 +11015.84313 + 30 +0.0 + 11 +5512.500003 + 21 +11020.173262 + 31 +0.0 + 0 +LINE + 5 +40F + 8 +0 + 62 + 0 + 10 +5537.500003 + 20 +11063.474532 + 30 +0.0 + 11 +5550.000003 + 21 +11085.125167 + 31 +0.0 + 0 +LINE + 5 +410 + 8 +0 + 62 + 0 + 10 +5575.000003 + 20 +11128.426437 + 30 +0.0 + 11 +5587.500003 + 21 +11150.077072 + 31 +0.0 + 0 +LINE + 5 +411 + 8 +0 + 62 + 0 + 10 +5612.500003 + 20 +11193.378342 + 30 +0.0 + 11 +5625.000003 + 21 +11215.028977 + 31 +0.0 + 0 +LINE + 5 +412 + 8 +0 + 62 + 0 + 10 +5650.000003 + 20 +11258.330248 + 30 +0.0 + 11 +5662.500003 + 21 +11279.980883 + 31 +0.0 + 0 +LINE + 5 +413 + 8 +0 + 62 + 0 + 10 +5687.500003 + 20 +11323.282153 + 30 +0.0 + 11 +5700.000003 + 21 +11344.932788 + 31 +0.0 + 0 +LINE + 5 +414 + 8 +0 + 62 + 0 + 10 +5510.0 + 20 +11059.1444 + 30 +0.0 + 11 +5512.500003 + 21 +11063.474532 + 31 +0.0 + 0 +LINE + 5 +415 + 8 +0 + 62 + 0 + 10 +5537.500003 + 20 +11106.775802 + 30 +0.0 + 11 +5550.000003 + 21 +11128.426437 + 31 +0.0 + 0 +LINE + 5 +416 + 8 +0 + 62 + 0 + 10 +5575.000003 + 20 +11171.727707 + 30 +0.0 + 11 +5587.500003 + 21 +11193.378342 + 31 +0.0 + 0 +LINE + 5 +417 + 8 +0 + 62 + 0 + 10 +5612.500003 + 20 +11236.679612 + 30 +0.0 + 11 +5625.000003 + 21 +11258.330248 + 31 +0.0 + 0 +LINE + 5 +418 + 8 +0 + 62 + 0 + 10 +5650.000003 + 20 +11301.631518 + 30 +0.0 + 11 +5662.500003 + 21 +11323.282153 + 31 +0.0 + 0 +LINE + 5 +419 + 8 +0 + 62 + 0 + 10 +5687.500003 + 20 +11366.583423 + 30 +0.0 + 11 +5700.000003 + 21 +11388.234058 + 31 +0.0 + 0 +LINE + 5 +41A + 8 +0 + 62 + 0 + 10 +5510.0 + 20 +11102.44567 + 30 +0.0 + 11 +5512.500003 + 21 +11106.775802 + 31 +0.0 + 0 +LINE + 5 +41B + 8 +0 + 62 + 0 + 10 +5537.500003 + 20 +11150.077072 + 30 +0.0 + 11 +5550.000003 + 21 +11171.727707 + 31 +0.0 + 0 +LINE + 5 +41C + 8 +0 + 62 + 0 + 10 +5575.000003 + 20 +11215.028977 + 30 +0.0 + 11 +5587.500003 + 21 +11236.679612 + 31 +0.0 + 0 +LINE + 5 +41D + 8 +0 + 62 + 0 + 10 +5612.500003 + 20 +11279.980883 + 30 +0.0 + 11 +5625.000003 + 21 +11301.631518 + 31 +0.0 + 0 +LINE + 5 +41E + 8 +0 + 62 + 0 + 10 +5650.000003 + 20 +11344.932788 + 30 +0.0 + 11 +5662.500003 + 21 +11366.583423 + 31 +0.0 + 0 +LINE + 5 +41F + 8 +0 + 62 + 0 + 10 +5687.500003 + 20 +11409.884693 + 30 +0.0 + 11 +5700.000003 + 21 +11431.535328 + 31 +0.0 + 0 +LINE + 5 +420 + 8 +0 + 62 + 0 + 10 +5510.0 + 20 +11145.74694 + 30 +0.0 + 11 +5512.500003 + 21 +11150.077072 + 31 +0.0 + 0 +LINE + 5 +421 + 8 +0 + 62 + 0 + 10 +5537.500003 + 20 +11193.378342 + 30 +0.0 + 11 +5550.000003 + 21 +11215.028977 + 31 +0.0 + 0 +LINE + 5 +422 + 8 +0 + 62 + 0 + 10 +5575.000003 + 20 +11258.330247 + 30 +0.0 + 11 +5587.500003 + 21 +11279.980883 + 31 +0.0 + 0 +LINE + 5 +423 + 8 +0 + 62 + 0 + 10 +5612.500003 + 20 +11323.282153 + 30 +0.0 + 11 +5625.000003 + 21 +11344.932788 + 31 +0.0 + 0 +LINE + 5 +424 + 8 +0 + 62 + 0 + 10 +5650.000003 + 20 +11388.234058 + 30 +0.0 + 11 +5662.500003 + 21 +11409.884693 + 31 +0.0 + 0 +LINE + 5 +425 + 8 +0 + 62 + 0 + 10 +5687.500003 + 20 +11453.185963 + 30 +0.0 + 11 +5700.000003 + 21 +11474.836598 + 31 +0.0 + 0 +LINE + 5 +426 + 8 +0 + 62 + 0 + 10 +5510.0 + 20 +11189.04821 + 30 +0.0 + 11 +5512.500003 + 21 +11193.378342 + 31 +0.0 + 0 +LINE + 5 +427 + 8 +0 + 62 + 0 + 10 +5537.500003 + 20 +11236.679612 + 30 +0.0 + 11 +5550.000003 + 21 +11258.330247 + 31 +0.0 + 0 +LINE + 5 +428 + 8 +0 + 62 + 0 + 10 +5575.000003 + 20 +11301.631518 + 30 +0.0 + 11 +5587.500003 + 21 +11323.282153 + 31 +0.0 + 0 +LINE + 5 +429 + 8 +0 + 62 + 0 + 10 +5612.500003 + 20 +11366.583423 + 30 +0.0 + 11 +5625.000003 + 21 +11388.234058 + 31 +0.0 + 0 +LINE + 5 +42A + 8 +0 + 62 + 0 + 10 +5650.000003 + 20 +11431.535328 + 30 +0.0 + 11 +5662.500003 + 21 +11453.185963 + 31 +0.0 + 0 +LINE + 5 +42B + 8 +0 + 62 + 0 + 10 +5687.500003 + 20 +11496.487233 + 30 +0.0 + 11 +5700.000003 + 21 +11518.137869 + 31 +0.0 + 0 +LINE + 5 +42C + 8 +0 + 62 + 0 + 10 +5510.0 + 20 +11232.34948 + 30 +0.0 + 11 +5512.500003 + 21 +11236.679612 + 31 +0.0 + 0 +LINE + 5 +42D + 8 +0 + 62 + 0 + 10 +5537.500003 + 20 +11279.980882 + 30 +0.0 + 11 +5550.000003 + 21 +11301.631518 + 31 +0.0 + 0 +LINE + 5 +42E + 8 +0 + 62 + 0 + 10 +5575.000003 + 20 +11344.932788 + 30 +0.0 + 11 +5587.500003 + 21 +11366.583423 + 31 +0.0 + 0 +LINE + 5 +42F + 8 +0 + 62 + 0 + 10 +5612.500003 + 20 +11409.884693 + 30 +0.0 + 11 +5625.000003 + 21 +11431.535328 + 31 +0.0 + 0 +LINE + 5 +430 + 8 +0 + 62 + 0 + 10 +5650.000003 + 20 +11474.836598 + 30 +0.0 + 11 +5662.500003 + 21 +11496.487233 + 31 +0.0 + 0 +LINE + 5 +431 + 8 +0 + 62 + 0 + 10 +5687.500003 + 20 +11539.788504 + 30 +0.0 + 11 +5700.000003 + 21 +11561.439139 + 31 +0.0 + 0 +LINE + 5 +432 + 8 +0 + 62 + 0 + 10 +5510.0 + 20 +11275.65075 + 30 +0.0 + 11 +5512.500003 + 21 +11279.980882 + 31 +0.0 + 0 +LINE + 5 +433 + 8 +0 + 62 + 0 + 10 +5537.500003 + 20 +11323.282153 + 30 +0.0 + 11 +5550.000003 + 21 +11344.932788 + 31 +0.0 + 0 +LINE + 5 +434 + 8 +0 + 62 + 0 + 10 +5575.000003 + 20 +11388.234058 + 30 +0.0 + 11 +5587.500003 + 21 +11409.884693 + 31 +0.0 + 0 +LINE + 5 +435 + 8 +0 + 62 + 0 + 10 +5612.500003 + 20 +11453.185963 + 30 +0.0 + 11 +5625.000003 + 21 +11474.836598 + 31 +0.0 + 0 +LINE + 5 +436 + 8 +0 + 62 + 0 + 10 +5650.000003 + 20 +11518.137868 + 30 +0.0 + 11 +5662.500003 + 21 +11539.788504 + 31 +0.0 + 0 +LINE + 5 +437 + 8 +0 + 62 + 0 + 10 +5687.500003 + 20 +11583.089774 + 30 +0.0 + 11 +5700.000003 + 21 +11604.740409 + 31 +0.0 + 0 +LINE + 5 +438 + 8 +0 + 62 + 0 + 10 +5510.0 + 20 +11318.95202 + 30 +0.0 + 11 +5512.500003 + 21 +11323.282153 + 31 +0.0 + 0 +LINE + 5 +439 + 8 +0 + 62 + 0 + 10 +5537.500003 + 20 +11366.583423 + 30 +0.0 + 11 +5550.000003 + 21 +11388.234058 + 31 +0.0 + 0 +LINE + 5 +43A + 8 +0 + 62 + 0 + 10 +5575.000003 + 20 +11431.535328 + 30 +0.0 + 11 +5587.500003 + 21 +11453.185963 + 31 +0.0 + 0 +LINE + 5 +43B + 8 +0 + 62 + 0 + 10 +5612.500003 + 20 +11496.487233 + 30 +0.0 + 11 +5625.000003 + 21 +11518.137868 + 31 +0.0 + 0 +LINE + 5 +43C + 8 +0 + 62 + 0 + 10 +5650.000003 + 20 +11561.439139 + 30 +0.0 + 11 +5662.500003 + 21 +11583.089774 + 31 +0.0 + 0 +LINE + 5 +43D + 8 +0 + 62 + 0 + 10 +5687.500003 + 20 +11626.391044 + 30 +0.0 + 11 +5700.000003 + 21 +11648.041679 + 31 +0.0 + 0 +LINE + 5 +43E + 8 +0 + 62 + 0 + 10 +5510.0 + 20 +11362.25329 + 30 +0.0 + 11 +5512.500003 + 21 +11366.583423 + 31 +0.0 + 0 +LINE + 5 +43F + 8 +0 + 62 + 0 + 10 +5537.500003 + 20 +11409.884693 + 30 +0.0 + 11 +5550.000003 + 21 +11431.535328 + 31 +0.0 + 0 +LINE + 5 +440 + 8 +0 + 62 + 0 + 10 +5575.000003 + 20 +11474.836598 + 30 +0.0 + 11 +5587.500003 + 21 +11496.487233 + 31 +0.0 + 0 +LINE + 5 +441 + 8 +0 + 62 + 0 + 10 +5612.500003 + 20 +11539.788503 + 30 +0.0 + 11 +5625.000003 + 21 +11561.439139 + 31 +0.0 + 0 +LINE + 5 +442 + 8 +0 + 62 + 0 + 10 +5650.000003 + 20 +11604.740409 + 30 +0.0 + 11 +5662.500003 + 21 +11626.391044 + 31 +0.0 + 0 +LINE + 5 +443 + 8 +0 + 62 + 0 + 10 +5687.500003 + 20 +11669.692314 + 30 +0.0 + 11 +5700.000003 + 21 +11691.342949 + 31 +0.0 + 0 +LINE + 5 +444 + 8 +0 + 62 + 0 + 10 +5510.0 + 20 +11405.55456 + 30 +0.0 + 11 +5512.500004 + 21 +11409.884693 + 31 +0.0 + 0 +LINE + 5 +445 + 8 +0 + 62 + 0 + 10 +5537.500004 + 20 +11453.185963 + 30 +0.0 + 11 +5550.000004 + 21 +11474.836598 + 31 +0.0 + 0 +LINE + 5 +446 + 8 +0 + 62 + 0 + 10 +5575.000004 + 20 +11518.137868 + 30 +0.0 + 11 +5587.500004 + 21 +11539.788503 + 31 +0.0 + 0 +LINE + 5 +447 + 8 +0 + 62 + 0 + 10 +5612.500004 + 20 +11583.089774 + 30 +0.0 + 11 +5625.000004 + 21 +11604.740409 + 31 +0.0 + 0 +LINE + 5 +448 + 8 +0 + 62 + 0 + 10 +5650.000004 + 20 +11648.041679 + 30 +0.0 + 11 +5662.500004 + 21 +11669.692314 + 31 +0.0 + 0 +LINE + 5 +449 + 8 +0 + 62 + 0 + 10 +5687.500004 + 20 +11712.993584 + 30 +0.0 + 11 +5697.318662 + 21 +11730.0 + 31 +0.0 + 0 +LINE + 5 +44A + 8 +0 + 62 + 0 + 10 +5510.0 + 20 +11448.85583 + 30 +0.0 + 11 +5512.500004 + 21 +11453.185963 + 31 +0.0 + 0 +LINE + 5 +44B + 8 +0 + 62 + 0 + 10 +5537.500004 + 20 +11496.487233 + 30 +0.0 + 11 +5550.000004 + 21 +11518.137868 + 31 +0.0 + 0 +LINE + 5 +44C + 8 +0 + 62 + 0 + 10 +5575.000004 + 20 +11561.439138 + 30 +0.0 + 11 +5587.500004 + 21 +11583.089774 + 31 +0.0 + 0 +LINE + 5 +44D + 8 +0 + 62 + 0 + 10 +5612.500004 + 20 +11626.391044 + 30 +0.0 + 11 +5625.000004 + 21 +11648.041679 + 31 +0.0 + 0 +LINE + 5 +44E + 8 +0 + 62 + 0 + 10 +5650.000004 + 20 +11691.342949 + 30 +0.0 + 11 +5662.500004 + 21 +11712.993584 + 31 +0.0 + 0 +LINE + 5 +44F + 8 +0 + 62 + 0 + 10 +5510.0 + 20 +11492.1571 + 30 +0.0 + 11 +5512.500004 + 21 +11496.487233 + 31 +0.0 + 0 +LINE + 5 +450 + 8 +0 + 62 + 0 + 10 +5537.500004 + 20 +11539.788503 + 30 +0.0 + 11 +5550.000004 + 21 +11561.439138 + 31 +0.0 + 0 +LINE + 5 +451 + 8 +0 + 62 + 0 + 10 +5575.000004 + 20 +11604.740409 + 30 +0.0 + 11 +5587.500004 + 21 +11626.391044 + 31 +0.0 + 0 +LINE + 5 +452 + 8 +0 + 62 + 0 + 10 +5612.500004 + 20 +11669.692314 + 30 +0.0 + 11 +5625.000004 + 21 +11691.342949 + 31 +0.0 + 0 +LINE + 5 +453 + 8 +0 + 62 + 0 + 10 +5510.0 + 20 +11535.45837 + 30 +0.0 + 11 +5512.500004 + 21 +11539.788503 + 31 +0.0 + 0 +LINE + 5 +454 + 8 +0 + 62 + 0 + 10 +5537.500004 + 20 +11583.089773 + 30 +0.0 + 11 +5550.000004 + 21 +11604.740409 + 31 +0.0 + 0 +LINE + 5 +455 + 8 +0 + 62 + 0 + 10 +5575.000004 + 20 +11648.041679 + 30 +0.0 + 11 +5587.500004 + 21 +11669.692314 + 31 +0.0 + 0 +LINE + 5 +456 + 8 +0 + 62 + 0 + 10 +5612.500004 + 20 +11712.993584 + 30 +0.0 + 11 +5622.318663 + 21 +11730.0 + 31 +0.0 + 0 +LINE + 5 +457 + 8 +0 + 62 + 0 + 10 +5510.0 + 20 +11578.75964 + 30 +0.0 + 11 +5512.500004 + 21 +11583.089773 + 31 +0.0 + 0 +LINE + 5 +458 + 8 +0 + 62 + 0 + 10 +5537.500004 + 20 +11626.391044 + 30 +0.0 + 11 +5550.000004 + 21 +11648.041679 + 31 +0.0 + 0 +LINE + 5 +459 + 8 +0 + 62 + 0 + 10 +5575.000004 + 20 +11691.342949 + 30 +0.0 + 11 +5587.500004 + 21 +11712.993584 + 31 +0.0 + 0 +LINE + 5 +45A + 8 +0 + 62 + 0 + 10 +5510.0 + 20 +11622.06091 + 30 +0.0 + 11 +5512.500004 + 21 +11626.391044 + 31 +0.0 + 0 +LINE + 5 +45B + 8 +0 + 62 + 0 + 10 +5537.500004 + 20 +11669.692314 + 30 +0.0 + 11 +5550.000004 + 21 +11691.342949 + 31 +0.0 + 0 +LINE + 5 +45C + 8 +0 + 62 + 0 + 10 +5510.0 + 20 +11665.36218 + 30 +0.0 + 11 +5512.500004 + 21 +11669.692314 + 31 +0.0 + 0 +LINE + 5 +45D + 8 +0 + 62 + 0 + 10 +5537.500004 + 20 +11712.993584 + 30 +0.0 + 11 +5547.318663 + 21 +11730.0 + 31 +0.0 + 0 +LINE + 5 +45E + 8 +0 + 62 + 0 + 10 +5510.0 + 20 +11708.66345 + 30 +0.0 + 11 +5512.500004 + 21 +11712.993584 + 31 +0.0 + 0 +LINE + 5 +45F + 8 +0 + 62 + 0 + 10 +5510.0 + 20 +10972.54186 + 30 +0.0 + 11 +5512.500003 + 21 +10976.871991 + 31 +0.0 + 0 +LINE + 5 +460 + 8 +0 + 62 + 0 + 10 +5537.500003 + 20 +11020.173262 + 30 +0.0 + 11 +5550.000003 + 21 +11041.823897 + 31 +0.0 + 0 +LINE + 5 +461 + 8 +0 + 62 + 0 + 10 +5575.000003 + 20 +11085.125167 + 30 +0.0 + 11 +5587.500003 + 21 +11106.775802 + 31 +0.0 + 0 +LINE + 5 +462 + 8 +0 + 62 + 0 + 10 +5612.500003 + 20 +11150.077072 + 30 +0.0 + 11 +5625.000003 + 21 +11171.727707 + 31 +0.0 + 0 +LINE + 5 +463 + 8 +0 + 62 + 0 + 10 +5650.000003 + 20 +11215.028977 + 30 +0.0 + 11 +5662.500003 + 21 +11236.679613 + 31 +0.0 + 0 +LINE + 5 +464 + 8 +0 + 62 + 0 + 10 +5687.500003 + 20 +11279.980883 + 30 +0.0 + 11 +5700.000003 + 21 +11301.631518 + 31 +0.0 + 0 +LINE + 5 +465 + 8 +0 + 62 + 0 + 10 +5510.0 + 20 +10929.24059 + 30 +0.0 + 11 +5512.500003 + 21 +10933.570721 + 31 +0.0 + 0 +LINE + 5 +466 + 8 +0 + 62 + 0 + 10 +5537.500003 + 20 +10976.871991 + 30 +0.0 + 11 +5550.000003 + 21 +10998.522627 + 31 +0.0 + 0 +LINE + 5 +467 + 8 +0 + 62 + 0 + 10 +5575.000003 + 20 +11041.823897 + 30 +0.0 + 11 +5587.500003 + 21 +11063.474532 + 31 +0.0 + 0 +LINE + 5 +468 + 8 +0 + 62 + 0 + 10 +5612.500003 + 20 +11106.775802 + 30 +0.0 + 11 +5625.000003 + 21 +11128.426437 + 31 +0.0 + 0 +LINE + 5 +469 + 8 +0 + 62 + 0 + 10 +5650.000003 + 20 +11171.727707 + 30 +0.0 + 11 +5662.500003 + 21 +11193.378342 + 31 +0.0 + 0 +LINE + 5 +46A + 8 +0 + 62 + 0 + 10 +5687.500003 + 20 +11236.679613 + 30 +0.0 + 11 +5700.000003 + 21 +11258.330248 + 31 +0.0 + 0 +LINE + 5 +46B + 8 +0 + 62 + 0 + 10 +5510.0 + 20 +10885.93932 + 30 +0.0 + 11 +5512.500003 + 21 +10890.269451 + 31 +0.0 + 0 +LINE + 5 +46C + 8 +0 + 62 + 0 + 10 +5537.500003 + 20 +10933.570721 + 30 +0.0 + 11 +5550.000003 + 21 +10955.221356 + 31 +0.0 + 0 +LINE + 5 +46D + 8 +0 + 62 + 0 + 10 +5575.000003 + 20 +10998.522627 + 30 +0.0 + 11 +5587.500003 + 21 +11020.173262 + 31 +0.0 + 0 +LINE + 5 +46E + 8 +0 + 62 + 0 + 10 +5612.500003 + 20 +11063.474532 + 30 +0.0 + 11 +5625.000003 + 21 +11085.125167 + 31 +0.0 + 0 +LINE + 5 +46F + 8 +0 + 62 + 0 + 10 +5650.000003 + 20 +11128.426437 + 30 +0.0 + 11 +5662.500003 + 21 +11150.077072 + 31 +0.0 + 0 +LINE + 5 +470 + 8 +0 + 62 + 0 + 10 +5687.500003 + 20 +11193.378342 + 30 +0.0 + 11 +5700.000003 + 21 +11215.028978 + 31 +0.0 + 0 +LINE + 5 +471 + 8 +0 + 62 + 0 + 10 +5510.0 + 20 +10842.63805 + 30 +0.0 + 11 +5512.500002 + 21 +10846.968181 + 31 +0.0 + 0 +LINE + 5 +472 + 8 +0 + 62 + 0 + 10 +5537.500002 + 20 +10890.269451 + 30 +0.0 + 11 +5550.000002 + 21 +10911.920086 + 31 +0.0 + 0 +LINE + 5 +473 + 8 +0 + 62 + 0 + 10 +5575.000002 + 20 +10955.221356 + 30 +0.0 + 11 +5587.500002 + 21 +10976.871992 + 31 +0.0 + 0 +LINE + 5 +474 + 8 +0 + 62 + 0 + 10 +5612.500002 + 20 +11020.173262 + 30 +0.0 + 11 +5625.000002 + 21 +11041.823897 + 31 +0.0 + 0 +LINE + 5 +475 + 8 +0 + 62 + 0 + 10 +5650.000002 + 20 +11085.125167 + 30 +0.0 + 11 +5662.500002 + 21 +11106.775802 + 31 +0.0 + 0 +LINE + 5 +476 + 8 +0 + 62 + 0 + 10 +5687.500002 + 20 +11150.077072 + 30 +0.0 + 11 +5700.000002 + 21 +11171.727707 + 31 +0.0 + 0 +LINE + 5 +477 + 8 +0 + 62 + 0 + 10 +5510.0 + 20 +10799.33678 + 30 +0.0 + 11 +5512.500002 + 21 +10803.666911 + 31 +0.0 + 0 +LINE + 5 +478 + 8 +0 + 62 + 0 + 10 +5537.500002 + 20 +10846.968181 + 30 +0.0 + 11 +5550.000002 + 21 +10868.618816 + 31 +0.0 + 0 +LINE + 5 +479 + 8 +0 + 62 + 0 + 10 +5575.000002 + 20 +10911.920086 + 30 +0.0 + 11 +5587.500002 + 21 +10933.570721 + 31 +0.0 + 0 +LINE + 5 +47A + 8 +0 + 62 + 0 + 10 +5612.500002 + 20 +10976.871992 + 30 +0.0 + 11 +5625.000002 + 21 +10998.522627 + 31 +0.0 + 0 +LINE + 5 +47B + 8 +0 + 62 + 0 + 10 +5650.000002 + 20 +11041.823897 + 30 +0.0 + 11 +5662.500002 + 21 +11063.474532 + 31 +0.0 + 0 +LINE + 5 +47C + 8 +0 + 62 + 0 + 10 +5687.500002 + 20 +11106.775802 + 30 +0.0 + 11 +5700.000002 + 21 +11128.426437 + 31 +0.0 + 0 +LINE + 5 +47D + 8 +0 + 62 + 0 + 10 +5510.0 + 20 +10756.03551 + 30 +0.0 + 11 +5512.500002 + 21 +10760.365641 + 31 +0.0 + 0 +LINE + 5 +47E + 8 +0 + 62 + 0 + 10 +5537.500002 + 20 +10803.666911 + 30 +0.0 + 11 +5550.000002 + 21 +10825.317546 + 31 +0.0 + 0 +LINE + 5 +47F + 8 +0 + 62 + 0 + 10 +5575.000002 + 20 +10868.618816 + 30 +0.0 + 11 +5587.500002 + 21 +10890.269451 + 31 +0.0 + 0 +LINE + 5 +480 + 8 +0 + 62 + 0 + 10 +5612.500002 + 20 +10933.570721 + 30 +0.0 + 11 +5625.000002 + 21 +10955.221357 + 31 +0.0 + 0 +LINE + 5 +481 + 8 +0 + 62 + 0 + 10 +5650.000002 + 20 +10998.522627 + 30 +0.0 + 11 +5662.500002 + 21 +11020.173262 + 31 +0.0 + 0 +LINE + 5 +482 + 8 +0 + 62 + 0 + 10 +5687.500002 + 20 +11063.474532 + 30 +0.0 + 11 +5700.000002 + 21 +11085.125167 + 31 +0.0 + 0 +LINE + 5 +483 + 8 +0 + 62 + 0 + 10 +5510.0 + 20 +10712.73424 + 30 +0.0 + 11 +5512.500002 + 21 +10717.064371 + 31 +0.0 + 0 +LINE + 5 +484 + 8 +0 + 62 + 0 + 10 +5537.500002 + 20 +10760.365641 + 30 +0.0 + 11 +5550.000002 + 21 +10782.016276 + 31 +0.0 + 0 +LINE + 5 +485 + 8 +0 + 62 + 0 + 10 +5575.000002 + 20 +10825.317546 + 30 +0.0 + 11 +5587.500002 + 21 +10846.968181 + 31 +0.0 + 0 +LINE + 5 +486 + 8 +0 + 62 + 0 + 10 +5612.500002 + 20 +10890.269451 + 30 +0.0 + 11 +5625.000002 + 21 +10911.920086 + 31 +0.0 + 0 +LINE + 5 +487 + 8 +0 + 62 + 0 + 10 +5650.000002 + 20 +10955.221357 + 30 +0.0 + 11 +5662.500002 + 21 +10976.871992 + 31 +0.0 + 0 +LINE + 5 +488 + 8 +0 + 62 + 0 + 10 +5687.500002 + 20 +11020.173262 + 30 +0.0 + 11 +5700.000002 + 21 +11041.823897 + 31 +0.0 + 0 +LINE + 5 +489 + 8 +0 + 62 + 0 + 10 +5510.0 + 20 +10669.43297 + 30 +0.0 + 11 +5512.500002 + 21 +10673.7631 + 31 +0.0 + 0 +LINE + 5 +48A + 8 +0 + 62 + 0 + 10 +5537.500002 + 20 +10717.064371 + 30 +0.0 + 11 +5550.000002 + 21 +10738.715006 + 31 +0.0 + 0 +LINE + 5 +48B + 8 +0 + 62 + 0 + 10 +5575.000002 + 20 +10782.016276 + 30 +0.0 + 11 +5587.500002 + 21 +10803.666911 + 31 +0.0 + 0 +LINE + 5 +48C + 8 +0 + 62 + 0 + 10 +5612.500002 + 20 +10846.968181 + 30 +0.0 + 11 +5625.000002 + 21 +10868.618816 + 31 +0.0 + 0 +LINE + 5 +48D + 8 +0 + 62 + 0 + 10 +5650.000002 + 20 +10911.920086 + 30 +0.0 + 11 +5662.500002 + 21 +10933.570722 + 31 +0.0 + 0 +LINE + 5 +48E + 8 +0 + 62 + 0 + 10 +5687.500002 + 20 +10976.871992 + 30 +0.0 + 11 +5700.000002 + 21 +10998.522627 + 31 +0.0 + 0 +LINE + 5 +48F + 8 +0 + 62 + 0 + 10 +5575.000002 + 20 +10738.715006 + 30 +0.0 + 11 +5587.500002 + 21 +10760.365641 + 31 +0.0 + 0 +LINE + 5 +490 + 8 +0 + 62 + 0 + 10 +5612.500002 + 20 +10803.666911 + 30 +0.0 + 11 +5625.000002 + 21 +10825.317546 + 31 +0.0 + 0 +LINE + 5 +491 + 8 +0 + 62 + 0 + 10 +5650.000002 + 20 +10868.618816 + 30 +0.0 + 11 +5662.500002 + 21 +10890.269451 + 31 +0.0 + 0 +LINE + 5 +492 + 8 +0 + 62 + 0 + 10 +5687.500002 + 20 +10933.570722 + 30 +0.0 + 11 +5700.000002 + 21 +10955.221357 + 31 +0.0 + 0 +LINE + 5 +493 + 8 +0 + 62 + 0 + 10 +5650.000002 + 20 +10825.317546 + 30 +0.0 + 11 +5662.500002 + 21 +10846.968181 + 31 +0.0 + 0 +LINE + 5 +494 + 8 +0 + 62 + 0 + 10 +5687.500002 + 20 +10890.269451 + 30 +0.0 + 11 +5700.000002 + 21 +10911.920087 + 31 +0.0 + 0 +LINE + 5 +495 + 8 +0 + 62 + 0 + 10 +5687.500002 + 20 +10846.968181 + 30 +0.0 + 11 +5700.000002 + 21 +10868.618816 + 31 +0.0 + 0 +ENDBLK + 5 +496 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X8 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X8 + 1 + + 0 +LINE + 5 +498 + 8 +0 + 62 + 0 + 10 +5550.0 + 20 +10652.11242 + 30 +0.0 + 11 +5575.0 + 21 +10652.11242 + 31 +0.0 + 0 +LINE + 5 +499 + 8 +0 + 62 + 0 + 10 +5625.0 + 20 +10652.11242 + 30 +0.0 + 11 +5650.0 + 21 +10652.11242 + 31 +0.0 + 0 +LINE + 5 +49A + 8 +0 + 62 + 0 + 10 +5700.0 + 20 +10652.11242 + 30 +0.0 + 11 +5710.0 + 21 +10652.11242 + 31 +0.0 + 0 +LINE + 5 +49B + 8 +0 + 62 + 0 + 10 +5522.357461 + 20 +10673.763055 + 30 +0.0 + 11 +5537.5 + 21 +10673.763055 + 31 +0.0 + 0 +LINE + 5 +49C + 8 +0 + 62 + 0 + 10 +5587.5 + 20 +10673.763055 + 30 +0.0 + 11 +5612.5 + 21 +10673.763055 + 31 +0.0 + 0 +LINE + 5 +49D + 8 +0 + 62 + 0 + 10 +5662.5 + 20 +10673.763055 + 30 +0.0 + 11 +5687.5 + 21 +10673.763055 + 31 +0.0 + 0 +LINE + 5 +49E + 8 +0 + 62 + 0 + 10 +5550.0 + 20 +10695.41369 + 30 +0.0 + 11 +5575.0 + 21 +10695.41369 + 31 +0.0 + 0 +LINE + 5 +49F + 8 +0 + 62 + 0 + 10 +5625.0 + 20 +10695.41369 + 30 +0.0 + 11 +5650.0 + 21 +10695.41369 + 31 +0.0 + 0 +LINE + 5 +4A0 + 8 +0 + 62 + 0 + 10 +5700.0 + 20 +10695.41369 + 30 +0.0 + 11 +5710.0 + 21 +10695.41369 + 31 +0.0 + 0 +LINE + 5 +4A1 + 8 +0 + 62 + 0 + 10 +5587.5 + 20 +10717.064325 + 30 +0.0 + 11 +5612.5 + 21 +10717.064325 + 31 +0.0 + 0 +LINE + 5 +4A2 + 8 +0 + 62 + 0 + 10 +5662.5 + 20 +10717.064325 + 30 +0.0 + 11 +5687.5 + 21 +10717.064325 + 31 +0.0 + 0 +LINE + 5 +4A3 + 8 +0 + 62 + 0 + 10 +5625.0 + 20 +10738.71496 + 30 +0.0 + 11 +5650.0 + 21 +10738.71496 + 31 +0.0 + 0 +LINE + 5 +4A4 + 8 +0 + 62 + 0 + 10 +5700.0 + 20 +10738.71496 + 30 +0.0 + 11 +5710.0 + 21 +10738.71496 + 31 +0.0 + 0 +LINE + 5 +4A5 + 8 +0 + 62 + 0 + 10 +5598.291572 + 20 +10760.365595 + 30 +0.0 + 11 +5612.5 + 21 +10760.365595 + 31 +0.0 + 0 +LINE + 5 +4A6 + 8 +0 + 62 + 0 + 10 +5662.5 + 20 +10760.365595 + 30 +0.0 + 11 +5687.5 + 21 +10760.365595 + 31 +0.0 + 0 +LINE + 5 +4A7 + 8 +0 + 62 + 0 + 10 +5625.0 + 20 +10782.01623 + 30 +0.0 + 11 +5650.0 + 21 +10782.01623 + 31 +0.0 + 0 +LINE + 5 +4A8 + 8 +0 + 62 + 0 + 10 +5700.0 + 20 +10782.01623 + 30 +0.0 + 11 +5710.0 + 21 +10782.01623 + 31 +0.0 + 0 +LINE + 5 +4A9 + 8 +0 + 62 + 0 + 10 +5662.5 + 20 +10803.666865 + 30 +0.0 + 11 +5687.5 + 21 +10803.666865 + 31 +0.0 + 0 +LINE + 5 +4AA + 8 +0 + 62 + 0 + 10 +5700.0 + 20 +10825.3175 + 30 +0.0 + 11 +5710.0 + 21 +10825.3175 + 31 +0.0 + 0 +LINE + 5 +4AB + 8 +0 + 62 + 0 + 10 +5512.5 + 20 +10630.461785 + 30 +0.0 + 11 +5537.5 + 21 +10630.461785 + 31 +0.0 + 0 +LINE + 5 +4AC + 8 +0 + 62 + 0 + 10 +5587.5 + 20 +10630.461785 + 30 +0.0 + 11 +5612.5 + 21 +10630.461785 + 31 +0.0 + 0 +LINE + 5 +4AD + 8 +0 + 62 + 0 + 10 +5662.5 + 20 +10630.461785 + 30 +0.0 + 11 +5687.5 + 21 +10630.461785 + 31 +0.0 + 0 +LINE + 5 +4AE + 8 +0 + 62 + 0 + 10 +5550.0 + 20 +10608.81115 + 30 +0.0 + 11 +5575.0 + 21 +10608.81115 + 31 +0.0 + 0 +LINE + 5 +4AF + 8 +0 + 62 + 0 + 10 +5512.5 + 20 +10587.160515 + 30 +0.0 + 11 +5537.5 + 21 +10587.160515 + 31 +0.0 + 0 +LINE + 5 +4B0 + 8 +0 + 62 + 0 + 10 +5587.5 + 20 +10587.160515 + 30 +0.0 + 11 +5605.0 + 21 +10587.160515 + 31 +0.0 + 0 +LINE + 5 +4B1 + 8 +0 + 62 + 0 + 10 +5550.0 + 20 +10565.50988 + 30 +0.0 + 11 +5575.0 + 21 +10565.50988 + 31 +0.0 + 0 +LINE + 5 +4B2 + 8 +0 + 62 + 0 + 10 +5512.5 + 20 +10543.859245 + 30 +0.0 + 11 +5537.5 + 21 +10543.859245 + 31 +0.0 + 0 +LINE + 5 +4B3 + 8 +0 + 62 + 0 + 10 +5587.5 + 20 +10543.859245 + 30 +0.0 + 11 +5605.0 + 21 +10543.859245 + 31 +0.0 + 0 +LINE + 5 +4B4 + 8 +0 + 62 + 0 + 10 +5550.0 + 20 +10522.20861 + 30 +0.0 + 11 +5575.0 + 21 +10522.20861 + 31 +0.0 + 0 +LINE + 5 +4B5 + 8 +0 + 62 + 0 + 10 +5512.5 + 20 +10500.557975 + 30 +0.0 + 11 +5537.5 + 21 +10500.557975 + 31 +0.0 + 0 +LINE + 5 +4B6 + 8 +0 + 62 + 0 + 10 +5587.5 + 20 +10500.557975 + 30 +0.0 + 11 +5605.0 + 21 +10500.557975 + 31 +0.0 + 0 +LINE + 5 +4B7 + 8 +0 + 62 + 0 + 10 +5550.0 + 20 +10478.90734 + 30 +0.0 + 11 +5575.0 + 21 +10478.90734 + 31 +0.0 + 0 +LINE + 5 +4B8 + 8 +0 + 62 + 0 + 10 +5621.426841 + 20 +10615.0 + 30 +0.0 + 11 +5612.499961 + 21 +10630.461809 + 31 +0.0 + 0 +LINE + 5 +4B9 + 8 +0 + 62 + 0 + 10 +5587.499961 + 20 +10673.763079 + 30 +0.0 + 11 +5574.999961 + 21 +10695.413715 + 31 +0.0 + 0 +LINE + 5 +4BA + 8 +0 + 62 + 0 + 10 +5587.499962 + 20 +10630.461809 + 30 +0.0 + 11 +5574.999962 + 21 +10652.112444 + 31 +0.0 + 0 +LINE + 5 +4BB + 8 +0 + 62 + 0 + 10 +5549.999962 + 20 +10695.413715 + 30 +0.0 + 11 +5546.562072 + 21 +10701.368314 + 31 +0.0 + 0 +LINE + 5 +4BC + 8 +0 + 62 + 0 + 10 +5587.499962 + 20 +10587.160539 + 30 +0.0 + 11 +5574.999962 + 21 +10608.811174 + 31 +0.0 + 0 +LINE + 5 +4BD + 8 +0 + 62 + 0 + 10 +5549.999962 + 20 +10652.112444 + 30 +0.0 + 11 +5537.499962 + 21 +10673.76308 + 31 +0.0 + 0 +LINE + 5 +4BE + 8 +0 + 62 + 0 + 10 +5587.499962 + 20 +10543.859269 + 30 +0.0 + 11 +5574.999962 + 21 +10565.509904 + 31 +0.0 + 0 +LINE + 5 +4BF + 8 +0 + 62 + 0 + 10 +5549.999962 + 20 +10608.811174 + 30 +0.0 + 11 +5537.499962 + 21 +10630.461809 + 31 +0.0 + 0 +LINE + 5 +4C0 + 8 +0 + 62 + 0 + 10 +5587.499962 + 20 +10500.557999 + 30 +0.0 + 11 +5574.999962 + 21 +10522.208634 + 31 +0.0 + 0 +LINE + 5 +4C1 + 8 +0 + 62 + 0 + 10 +5549.999962 + 20 +10565.509904 + 30 +0.0 + 11 +5537.499962 + 21 +10587.160539 + 31 +0.0 + 0 +LINE + 5 +4C2 + 8 +0 + 62 + 0 + 10 +5512.499962 + 20 +10630.461809 + 30 +0.0 + 11 +5510.0 + 21 +10634.79187 + 31 +0.0 + 0 +LINE + 5 +4C3 + 8 +0 + 62 + 0 + 10 +5575.812504 + 20 +10477.5 + 30 +0.0 + 11 +5574.999962 + 21 +10478.907364 + 31 +0.0 + 0 +LINE + 5 +4C4 + 8 +0 + 62 + 0 + 10 +5549.999962 + 20 +10522.208634 + 30 +0.0 + 11 +5537.499962 + 21 +10543.859269 + 31 +0.0 + 0 +LINE + 5 +4C5 + 8 +0 + 62 + 0 + 10 +5512.499962 + 20 +10587.160539 + 30 +0.0 + 11 +5510.0 + 21 +10591.4906 + 31 +0.0 + 0 +LINE + 5 +4C6 + 8 +0 + 62 + 0 + 10 +5549.999962 + 20 +10478.907364 + 30 +0.0 + 11 +5537.499962 + 21 +10500.557999 + 31 +0.0 + 0 +LINE + 5 +4C7 + 8 +0 + 62 + 0 + 10 +5512.499962 + 20 +10543.859269 + 30 +0.0 + 11 +5510.0 + 21 +10548.18933 + 31 +0.0 + 0 +LINE + 5 +4C8 + 8 +0 + 62 + 0 + 10 +5512.499962 + 20 +10500.557999 + 30 +0.0 + 11 +5510.0 + 21 +10504.88806 + 31 +0.0 + 0 +LINE + 5 +4C9 + 8 +0 + 62 + 0 + 10 +5624.999961 + 20 +10652.112444 + 30 +0.0 + 11 +5612.499961 + 21 +10673.763079 + 31 +0.0 + 0 +LINE + 5 +4CA + 8 +0 + 62 + 0 + 10 +5587.499961 + 20 +10717.06435 + 30 +0.0 + 11 +5576.710421 + 21 +10735.752381 + 31 +0.0 + 0 +LINE + 5 +4CB + 8 +0 + 62 + 0 + 10 +5662.499961 + 20 +10630.461809 + 30 +0.0 + 11 +5649.999961 + 21 +10652.112444 + 31 +0.0 + 0 +LINE + 5 +4CC + 8 +0 + 62 + 0 + 10 +5624.999961 + 20 +10695.413714 + 30 +0.0 + 11 +5612.499961 + 21 +10717.06435 + 31 +0.0 + 0 +LINE + 5 +4CD + 8 +0 + 62 + 0 + 10 +5696.426841 + 20 +10615.0 + 30 +0.0 + 11 +5687.499961 + 21 +10630.461809 + 31 +0.0 + 0 +LINE + 5 +4CE + 8 +0 + 62 + 0 + 10 +5662.499961 + 20 +10673.763079 + 30 +0.0 + 11 +5649.999961 + 21 +10695.413714 + 31 +0.0 + 0 +LINE + 5 +4CF + 8 +0 + 62 + 0 + 10 +5624.999961 + 20 +10738.714985 + 30 +0.0 + 11 +5612.499961 + 21 +10760.36562 + 31 +0.0 + 0 +LINE + 5 +4D0 + 8 +0 + 62 + 0 + 10 +5699.999961 + 20 +10652.112444 + 30 +0.0 + 11 +5687.499961 + 21 +10673.763079 + 31 +0.0 + 0 +LINE + 5 +4D1 + 8 +0 + 62 + 0 + 10 +5662.499961 + 20 +10717.064349 + 30 +0.0 + 11 +5649.999961 + 21 +10738.714985 + 31 +0.0 + 0 +LINE + 5 +4D2 + 8 +0 + 62 + 0 + 10 +5624.999961 + 20 +10782.016255 + 30 +0.0 + 11 +5621.932945 + 21 +10787.328483 + 31 +0.0 + 0 +LINE + 5 +4D3 + 8 +0 + 62 + 0 + 10 +5699.999961 + 20 +10695.413714 + 30 +0.0 + 11 +5687.499961 + 21 +10717.064349 + 31 +0.0 + 0 +LINE + 5 +4D4 + 8 +0 + 62 + 0 + 10 +5662.499961 + 20 +10760.36562 + 30 +0.0 + 11 +5649.999961 + 21 +10782.016255 + 31 +0.0 + 0 +LINE + 5 +4D5 + 8 +0 + 62 + 0 + 10 +5699.999961 + 20 +10738.714984 + 30 +0.0 + 11 +5687.499961 + 21 +10760.36562 + 31 +0.0 + 0 +LINE + 5 +4D6 + 8 +0 + 62 + 0 + 10 +5662.499961 + 20 +10803.66689 + 30 +0.0 + 11 +5652.081294 + 21 +10821.71255 + 31 +0.0 + 0 +LINE + 5 +4D7 + 8 +0 + 62 + 0 + 10 +5699.999961 + 20 +10782.016255 + 30 +0.0 + 11 +5687.499961 + 21 +10803.66689 + 31 +0.0 + 0 +LINE + 5 +4D8 + 8 +0 + 62 + 0 + 10 +5699.999961 + 20 +10825.317525 + 30 +0.0 + 11 +5688.636278 + 21 +10845.0 + 31 +0.0 + 0 +LINE + 5 +4D9 + 8 +0 + 62 + 0 + 10 +5537.500002 + 20 +10500.55802 + 30 +0.0 + 11 +5550.000002 + 21 +10522.208655 + 31 +0.0 + 0 +LINE + 5 +4DA + 8 +0 + 62 + 0 + 10 +5575.000002 + 20 +10565.509925 + 30 +0.0 + 11 +5587.500002 + 21 +10587.16056 + 31 +0.0 + 0 +LINE + 5 +4DB + 8 +0 + 62 + 0 + 10 +5612.500002 + 20 +10630.46183 + 30 +0.0 + 11 +5625.000002 + 21 +10652.112466 + 31 +0.0 + 0 +LINE + 5 +4DC + 8 +0 + 62 + 0 + 10 +5650.000002 + 20 +10695.413736 + 30 +0.0 + 11 +5662.500002 + 21 +10717.064371 + 31 +0.0 + 0 +LINE + 5 +4DD + 8 +0 + 62 + 0 + 10 +5687.500002 + 20 +10760.365641 + 30 +0.0 + 11 +5700.000002 + 21 +10782.016276 + 31 +0.0 + 0 +LINE + 5 +4DE + 8 +0 + 62 + 0 + 10 +5510.0 + 20 +10496.22789 + 30 +0.0 + 11 +5512.500002 + 21 +10500.55802 + 31 +0.0 + 0 +LINE + 5 +4DF + 8 +0 + 62 + 0 + 10 +5537.500002 + 20 +10543.85929 + 30 +0.0 + 11 +5550.000002 + 21 +10565.509925 + 31 +0.0 + 0 +LINE + 5 +4E0 + 8 +0 + 62 + 0 + 10 +5575.000002 + 20 +10608.811195 + 30 +0.0 + 11 +5587.500002 + 21 +10630.46183 + 31 +0.0 + 0 +LINE + 5 +4E1 + 8 +0 + 62 + 0 + 10 +5612.500002 + 20 +10673.763101 + 30 +0.0 + 11 +5625.000002 + 21 +10695.413736 + 31 +0.0 + 0 +LINE + 5 +4E2 + 8 +0 + 62 + 0 + 10 +5650.000002 + 20 +10738.715006 + 30 +0.0 + 11 +5662.500002 + 21 +10760.365641 + 31 +0.0 + 0 +LINE + 5 +4E3 + 8 +0 + 62 + 0 + 10 +5687.500002 + 20 +10803.666911 + 30 +0.0 + 11 +5700.000002 + 21 +10825.317546 + 31 +0.0 + 0 +LINE + 5 +4E4 + 8 +0 + 62 + 0 + 10 +5510.0 + 20 +10539.52916 + 30 +0.0 + 11 +5512.500002 + 21 +10543.85929 + 31 +0.0 + 0 +LINE + 5 +4E5 + 8 +0 + 62 + 0 + 10 +5537.500002 + 20 +10587.16056 + 30 +0.0 + 11 +5550.000002 + 21 +10608.811195 + 31 +0.0 + 0 +LINE + 5 +4E6 + 8 +0 + 62 + 0 + 10 +5575.000002 + 20 +10652.112465 + 30 +0.0 + 11 +5587.500002 + 21 +10673.763101 + 31 +0.0 + 0 +LINE + 5 +4E7 + 8 +0 + 62 + 0 + 10 +5612.500002 + 20 +10717.064371 + 30 +0.0 + 11 +5625.000002 + 21 +10738.715006 + 31 +0.0 + 0 +LINE + 5 +4E8 + 8 +0 + 62 + 0 + 10 +5650.000002 + 20 +10782.016276 + 30 +0.0 + 11 +5662.500002 + 21 +10803.666911 + 31 +0.0 + 0 +LINE + 5 +4E9 + 8 +0 + 62 + 0 + 10 +5510.0 + 20 +10582.83043 + 30 +0.0 + 11 +5512.500002 + 21 +10587.16056 + 31 +0.0 + 0 +LINE + 5 +4EA + 8 +0 + 62 + 0 + 10 +5537.500002 + 20 +10630.46183 + 30 +0.0 + 11 +5550.000002 + 21 +10652.112465 + 31 +0.0 + 0 +LINE + 5 +4EB + 8 +0 + 62 + 0 + 10 +5575.000002 + 20 +10695.413736 + 30 +0.0 + 11 +5587.500002 + 21 +10717.064371 + 31 +0.0 + 0 +LINE + 5 +4EC + 8 +0 + 62 + 0 + 10 +5612.500002 + 20 +10760.365641 + 30 +0.0 + 11 +5625.000002 + 21 +10782.016276 + 31 +0.0 + 0 +LINE + 5 +4ED + 8 +0 + 62 + 0 + 10 +5510.0 + 20 +10626.1317 + 30 +0.0 + 11 +5512.500002 + 21 +10630.46183 + 31 +0.0 + 0 +LINE + 5 +4EE + 8 +0 + 62 + 0 + 10 +5537.500002 + 20 +10673.7631 + 30 +0.0 + 11 +5550.000002 + 21 +10695.413736 + 31 +0.0 + 0 +LINE + 5 +4EF + 8 +0 + 62 + 0 + 10 +5549.187448 + 20 +10477.5 + 30 +0.0 + 11 +5550.000002 + 21 +10478.907385 + 31 +0.0 + 0 +LINE + 5 +4F0 + 8 +0 + 62 + 0 + 10 +5575.000002 + 20 +10522.208655 + 30 +0.0 + 11 +5587.500002 + 21 +10543.85929 + 31 +0.0 + 0 +LINE + 5 +4F1 + 8 +0 + 62 + 0 + 10 +5650.000002 + 20 +10652.112466 + 30 +0.0 + 11 +5662.500002 + 21 +10673.763101 + 31 +0.0 + 0 +LINE + 5 +4F2 + 8 +0 + 62 + 0 + 10 +5687.500002 + 20 +10717.064371 + 30 +0.0 + 11 +5700.000002 + 21 +10738.715006 + 31 +0.0 + 0 +LINE + 5 +4F3 + 8 +0 + 62 + 0 + 10 +5575.000002 + 20 +10478.907385 + 30 +0.0 + 11 +5587.500002 + 21 +10500.55802 + 31 +0.0 + 0 +LINE + 5 +4F4 + 8 +0 + 62 + 0 + 10 +5653.57311 + 20 +10615.0 + 30 +0.0 + 11 +5662.500002 + 21 +10630.461831 + 31 +0.0 + 0 +LINE + 5 +4F5 + 8 +0 + 62 + 0 + 10 +5687.500002 + 20 +10673.763101 + 30 +0.0 + 11 +5700.000002 + 21 +10695.413736 + 31 +0.0 + 0 +LINE + 5 +4F6 + 8 +0 + 62 + 0 + 10 +5687.500001 + 20 +10630.461831 + 30 +0.0 + 11 +5700.000001 + 21 +10652.112466 + 31 +0.0 + 0 +ENDBLK + 5 +4F7 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X9 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X9 + 1 + + 0 +LINE + 5 +4F9 + 8 +0 + 62 + 0 + 10 +5072.5 + 20 +11038.713466 + 30 +0.0 + 11 +5360.0 + 21 +11326.213466 + 31 +0.0 + 0 +LINE + 5 +4FA + 8 +0 + 62 + 0 + 10 +5072.5 + 20 +11118.262979 + 30 +0.0 + 11 +5360.0 + 21 +11405.762979 + 31 +0.0 + 0 +LINE + 5 +4FB + 8 +0 + 62 + 0 + 10 +5072.5 + 20 +11197.812492 + 30 +0.0 + 11 +5360.0 + 21 +11485.312492 + 31 +0.0 + 0 +LINE + 5 +4FC + 8 +0 + 62 + 0 + 10 +5072.5 + 20 +11277.362005 + 30 +0.0 + 11 +5360.0 + 21 +11564.862005 + 31 +0.0 + 0 +LINE + 5 +4FD + 8 +0 + 62 + 0 + 10 +5072.5 + 20 +11356.911518 + 30 +0.0 + 11 +5360.0 + 21 +11644.411518 + 31 +0.0 + 0 +LINE + 5 +4FE + 8 +0 + 62 + 0 + 10 +5072.5 + 20 +11436.461031 + 30 +0.0 + 11 +5360.0 + 21 +11723.961031 + 31 +0.0 + 0 +LINE + 5 +4FF + 8 +0 + 62 + 0 + 10 +5072.5 + 20 +11516.010544 + 30 +0.0 + 11 +5286.489456 + 21 +11730.0 + 31 +0.0 + 0 +LINE + 5 +500 + 8 +0 + 62 + 0 + 10 +5072.5 + 20 +11595.560056 + 30 +0.0 + 11 +5206.939944 + 21 +11730.0 + 31 +0.0 + 0 +LINE + 5 +501 + 8 +0 + 62 + 0 + 10 +5072.5 + 20 +11675.109569 + 30 +0.0 + 11 +5127.390431 + 21 +11730.0 + 31 +0.0 + 0 +LINE + 5 +502 + 8 +0 + 62 + 0 + 10 +5072.5 + 20 +10959.163953 + 30 +0.0 + 11 +5360.0 + 21 +11246.663953 + 31 +0.0 + 0 +LINE + 5 +503 + 8 +0 + 62 + 0 + 10 +5072.5 + 20 +10879.61444 + 30 +0.0 + 11 +5360.0 + 21 +11167.11444 + 31 +0.0 + 0 +LINE + 5 +504 + 8 +0 + 62 + 0 + 10 +5072.5 + 20 +10800.064928 + 30 +0.0 + 11 +5360.0 + 21 +11087.564928 + 31 +0.0 + 0 +LINE + 5 +505 + 8 +0 + 62 + 0 + 10 +5072.5 + 20 +10720.515415 + 30 +0.0 + 11 +5360.0 + 21 +11008.015415 + 31 +0.0 + 0 +LINE + 5 +506 + 8 +0 + 62 + 0 + 10 +5129.034098 + 20 +10697.5 + 30 +0.0 + 11 +5360.0 + 21 +10928.465902 + 31 +0.0 + 0 +LINE + 5 +507 + 8 +0 + 62 + 0 + 10 +5208.583611 + 20 +10697.5 + 30 +0.0 + 11 +5360.0 + 21 +10848.916389 + 31 +0.0 + 0 +LINE + 5 +508 + 8 +0 + 62 + 0 + 10 +5288.133124 + 20 +10697.5 + 30 +0.0 + 11 +5360.0 + 21 +10769.366876 + 31 +0.0 + 0 +ENDBLK + 5 +509 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X10 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X10 + 1 + + 0 +LINE + 5 +50B + 8 +0 + 62 + 0 + 10 +5134.281663 + 20 +10305.0 + 30 +0.0 + 11 +5311.781663 + 21 +10482.5 + 31 +0.0 + 0 +LINE + 5 +50C + 8 +0 + 62 + 0 + 10 +5072.5 + 20 +10322.76785 + 30 +0.0 + 11 +5232.23215 + 21 +10482.5 + 31 +0.0 + 0 +LINE + 5 +50D + 8 +0 + 62 + 0 + 10 +5072.5 + 20 +10402.317363 + 30 +0.0 + 11 +5152.682637 + 21 +10482.5 + 31 +0.0 + 0 +LINE + 5 +50E + 8 +0 + 62 + 0 + 10 +5072.5 + 20 +10481.866876 + 30 +0.0 + 11 +5073.133124 + 21 +10482.5 + 31 +0.0 + 0 +LINE + 5 +50F + 8 +0 + 62 + 0 + 10 +5213.831175 + 20 +10305.0 + 30 +0.0 + 11 +5360.0 + 21 +10451.168825 + 31 +0.0 + 0 +LINE + 5 +510 + 8 +0 + 62 + 0 + 10 +5293.380688 + 20 +10305.0 + 30 +0.0 + 11 +5360.0 + 21 +10371.619312 + 31 +0.0 + 0 +ENDBLK + 5 +511 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X11 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X11 + 1 + + 0 +ENDBLK + 5 +513 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X12 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X12 + 1 + + 0 +LINE + 5 +515 + 8 +0 + 62 + 0 + 10 +6641.639663 + 20 +11377.319025 + 30 +0.0 + 11 +6641.639663 + 21 +11377.319025 + 31 +0.0 + 0 +LINE + 5 +516 + 8 +0 + 62 + 0 + 10 +6665.757605 + 20 +11395.825373 + 30 +0.0 + 11 +6665.757605 + 21 +11395.825373 + 31 +0.0 + 0 +LINE + 5 +517 + 8 +0 + 62 + 0 + 10 +6640.379796 + 20 +11415.855501 + 30 +0.0 + 11 +6640.379796 + 21 +11415.855501 + 31 +0.0 + 0 +LINE + 5 +518 + 8 +0 + 62 + 0 + 10 +6664.497738 + 20 +11434.361848 + 30 +0.0 + 11 +6664.497738 + 21 +11434.361848 + 31 +0.0 + 0 +LINE + 5 +519 + 8 +0 + 62 + 0 + 10 +6639.119929 + 20 +11454.391976 + 30 +0.0 + 11 +6639.119929 + 21 +11454.391976 + 31 +0.0 + 0 +LINE + 5 +51A + 8 +0 + 62 + 0 + 10 +6663.23787 + 20 +11472.898324 + 30 +0.0 + 11 +6663.23787 + 21 +11472.898324 + 31 +0.0 + 0 +LINE + 5 +51B + 8 +0 + 62 + 0 + 10 +6637.860062 + 20 +11492.928452 + 30 +0.0 + 11 +6637.860062 + 21 +11492.928452 + 31 +0.0 + 0 +LINE + 5 +51C + 8 +0 + 62 + 0 + 10 +6661.978003 + 20 +11511.434799 + 30 +0.0 + 11 +6661.978003 + 21 +11511.434799 + 31 +0.0 + 0 +LINE + 5 +51D + 8 +0 + 62 + 0 + 10 +6636.600195 + 20 +11531.464927 + 30 +0.0 + 11 +6636.600195 + 21 +11531.464927 + 31 +0.0 + 0 +LINE + 5 +51E + 8 +0 + 62 + 0 + 10 +6660.718136 + 20 +11549.971274 + 30 +0.0 + 11 +6660.718136 + 21 +11549.971274 + 31 +0.0 + 0 +LINE + 5 +51F + 8 +0 + 62 + 0 + 10 +6635.340327 + 20 +11570.001402 + 30 +0.0 + 11 +6635.340327 + 21 +11570.001402 + 31 +0.0 + 0 +LINE + 5 +520 + 8 +0 + 62 + 0 + 10 +6659.458269 + 20 +11588.50775 + 30 +0.0 + 11 +6659.458269 + 21 +11588.50775 + 31 +0.0 + 0 +LINE + 5 +521 + 8 +0 + 62 + 0 + 10 +6634.08046 + 20 +11608.537878 + 30 +0.0 + 11 +6634.08046 + 21 +11608.537878 + 31 +0.0 + 0 +LINE + 5 +522 + 8 +0 + 62 + 0 + 10 +6658.198402 + 20 +11627.044225 + 30 +0.0 + 11 +6658.198402 + 21 +11627.044225 + 31 +0.0 + 0 +LINE + 5 +523 + 8 +0 + 62 + 0 + 10 +6632.820593 + 20 +11647.074353 + 30 +0.0 + 11 +6632.820593 + 21 +11647.074353 + 31 +0.0 + 0 +LINE + 5 +524 + 8 +0 + 62 + 0 + 10 +6656.938535 + 20 +11665.5807 + 30 +0.0 + 11 +6656.938535 + 21 +11665.5807 + 31 +0.0 + 0 +LINE + 5 +525 + 8 +0 + 62 + 0 + 10 +6631.560726 + 20 +11685.610828 + 30 +0.0 + 11 +6631.560726 + 21 +11685.610828 + 31 +0.0 + 0 +LINE + 5 +526 + 8 +0 + 62 + 0 + 10 +6655.678667 + 20 +11704.117176 + 30 +0.0 + 11 +6655.678667 + 21 +11704.117176 + 31 +0.0 + 0 +LINE + 5 +527 + 8 +0 + 62 + 0 + 10 +6630.300859 + 20 +11724.147304 + 30 +0.0 + 11 +6630.300859 + 21 +11724.147304 + 31 +0.0 + 0 +LINE + 5 +528 + 8 +0 + 62 + 0 + 10 +6642.89953 + 20 +11338.78255 + 30 +0.0 + 11 +6642.89953 + 21 +11338.78255 + 31 +0.0 + 0 +LINE + 5 +529 + 8 +0 + 62 + 0 + 10 +6667.017472 + 20 +11357.288897 + 30 +0.0 + 11 +6667.017472 + 21 +11357.288897 + 31 +0.0 + 0 +LINE + 5 +52A + 8 +0 + 62 + 0 + 10 +6644.159398 + 20 +11300.246075 + 30 +0.0 + 11 +6644.159398 + 21 +11300.246075 + 31 +0.0 + 0 +LINE + 5 +52B + 8 +0 + 62 + 0 + 10 +6645.419265 + 20 +11261.709599 + 30 +0.0 + 11 +6645.419265 + 21 +11261.709599 + 31 +0.0 + 0 +LINE + 5 +52C + 8 +0 + 62 + 0 + 10 +6646.679132 + 20 +11223.173124 + 30 +0.0 + 11 +6646.679132 + 21 +11223.173124 + 31 +0.0 + 0 +LINE + 5 +52D + 8 +0 + 62 + 0 + 10 +6647.938999 + 20 +11184.636648 + 30 +0.0 + 11 +6647.938999 + 21 +11184.636648 + 31 +0.0 + 0 +LINE + 5 +52E + 8 +0 + 62 + 0 + 10 +6649.198866 + 20 +11146.100173 + 30 +0.0 + 11 +6649.198866 + 21 +11146.100173 + 31 +0.0 + 0 +LINE + 5 +52F + 8 +0 + 62 + 0 + 10 +6650.458733 + 20 +11107.563698 + 30 +0.0 + 11 +6650.458733 + 21 +11107.563698 + 31 +0.0 + 0 +LINE + 5 +530 + 8 +0 + 62 + 0 + 10 +6651.718601 + 20 +11069.027222 + 30 +0.0 + 11 +6651.718601 + 21 +11069.027222 + 31 +0.0 + 0 +LINE + 5 +531 + 8 +0 + 62 + 0 + 10 +6636.528693 + 20 +11385.666777 + 30 +0.0 + 11 +6636.528693 + 21 +11385.666777 + 31 +0.0 + 0 +LINE + 5 +532 + 8 +0 + 62 + 0 + 10 +6646.938864 + 20 +11387.037302 + 30 +0.0 + 11 +6646.938864 + 21 +11387.037302 + 31 +0.0 + 0 +LINE + 5 +533 + 8 +0 + 62 + 0 + 10 +6663.198559 + 20 +11389.177932 + 30 +0.0 + 11 +6663.198559 + 21 +11389.177932 + 31 +0.0 + 0 +LINE + 5 +534 + 8 +0 + 62 + 0 + 10 +6644.758638 + 20 +11438.533281 + 30 +0.0 + 11 +6644.758638 + 21 +11438.533281 + 31 +0.0 + 0 +LINE + 5 +535 + 8 +0 + 62 + 0 + 10 +6653.484305 + 20 +11491.465048 + 30 +0.0 + 11 +6653.484305 + 21 +11491.465048 + 31 +0.0 + 0 +LINE + 5 +536 + 8 +0 + 62 + 0 + 10 +6663.894476 + 20 +11492.835573 + 30 +0.0 + 11 +6663.894476 + 21 +11492.835573 + 31 +0.0 + 0 +LINE + 5 +537 + 8 +0 + 62 + 0 + 10 +6635.044383 + 20 +11540.820397 + 30 +0.0 + 11 +6635.044383 + 21 +11540.820397 + 31 +0.0 + 0 +LINE + 5 +538 + 8 +0 + 62 + 0 + 10 +6645.454554 + 20 +11542.190922 + 30 +0.0 + 11 +6645.454554 + 21 +11542.190922 + 31 +0.0 + 0 +LINE + 5 +539 + 8 +0 + 62 + 0 + 10 +6661.71425 + 20 +11544.331551 + 30 +0.0 + 11 +6661.71425 + 21 +11544.331551 + 31 +0.0 + 0 +LINE + 5 +53A + 8 +0 + 62 + 0 + 10 +6643.274328 + 20 +11593.686901 + 30 +0.0 + 11 +6643.274328 + 21 +11593.686901 + 31 +0.0 + 0 +LINE + 5 +53B + 8 +0 + 62 + 0 + 10 +6651.999995 + 20 +11646.618667 + 30 +0.0 + 11 +6651.999995 + 21 +11646.618667 + 31 +0.0 + 0 +LINE + 5 +53C + 8 +0 + 62 + 0 + 10 +6662.410166 + 20 +11647.989192 + 30 +0.0 + 11 +6662.410166 + 21 +11647.989192 + 31 +0.0 + 0 +LINE + 5 +53D + 8 +0 + 62 + 0 + 10 +6633.560073 + 20 +11695.974016 + 30 +0.0 + 11 +6633.560073 + 21 +11695.974016 + 31 +0.0 + 0 +LINE + 5 +53E + 8 +0 + 62 + 0 + 10 +6643.970244 + 20 +11697.344541 + 30 +0.0 + 11 +6643.970244 + 21 +11697.344541 + 31 +0.0 + 0 +LINE + 5 +53F + 8 +0 + 62 + 0 + 10 +6660.22994 + 20 +11699.485171 + 30 +0.0 + 11 +6660.22994 + 21 +11699.485171 + 31 +0.0 + 0 +LINE + 5 +540 + 8 +0 + 62 + 0 + 10 +6654.968614 + 20 +11336.311428 + 30 +0.0 + 11 +6654.968614 + 21 +11336.311428 + 31 +0.0 + 0 +LINE + 5 +541 + 8 +0 + 62 + 0 + 10 +6665.378786 + 20 +11337.681953 + 30 +0.0 + 11 +6665.378786 + 21 +11337.681953 + 31 +0.0 + 0 +LINE + 5 +542 + 8 +0 + 62 + 0 + 10 +6646.242947 + 20 +11283.379662 + 30 +0.0 + 11 +6646.242947 + 21 +11283.379662 + 31 +0.0 + 0 +LINE + 5 +543 + 8 +0 + 62 + 0 + 10 +6638.013002 + 20 +11230.513158 + 30 +0.0 + 11 +6638.013002 + 21 +11230.513158 + 31 +0.0 + 0 +LINE + 5 +544 + 8 +0 + 62 + 0 + 10 +6648.423173 + 20 +11231.883683 + 30 +0.0 + 11 +6648.423173 + 21 +11231.883683 + 31 +0.0 + 0 +LINE + 5 +545 + 8 +0 + 62 + 0 + 10 +6664.682869 + 20 +11234.024313 + 30 +0.0 + 11 +6664.682869 + 21 +11234.024313 + 31 +0.0 + 0 +LINE + 5 +546 + 8 +0 + 62 + 0 + 10 +6656.452924 + 20 +11181.157809 + 30 +0.0 + 11 +6656.452924 + 21 +11181.157809 + 31 +0.0 + 0 +LINE + 5 +547 + 8 +0 + 62 + 0 + 10 +6666.863095 + 20 +11182.528334 + 30 +0.0 + 11 +6666.863095 + 21 +11182.528334 + 31 +0.0 + 0 +LINE + 5 +548 + 8 +0 + 62 + 0 + 10 +6631.467561 + 20 +11126.085413 + 30 +0.0 + 11 +6631.467561 + 21 +11126.085413 + 31 +0.0 + 0 +LINE + 5 +549 + 8 +0 + 62 + 0 + 10 +6647.727257 + 20 +11128.226042 + 30 +0.0 + 11 +6647.727257 + 21 +11128.226042 + 31 +0.0 + 0 +LINE + 5 +54A + 8 +0 + 62 + 0 + 10 +6639.497312 + 20 +11075.359539 + 30 +0.0 + 11 +6639.497312 + 21 +11075.359539 + 31 +0.0 + 0 +LINE + 5 +54B + 8 +0 + 62 + 0 + 10 +6649.907483 + 20 +11076.730064 + 30 +0.0 + 11 +6649.907483 + 21 +11076.730064 + 31 +0.0 + 0 +LINE + 5 +54C + 8 +0 + 62 + 0 + 10 +6666.167179 + 20 +11078.870693 + 30 +0.0 + 11 +6666.167179 + 21 +11078.870693 + 31 +0.0 + 0 +LINE + 5 +54D + 8 +0 + 62 + 0 + 10 +6647.718221 + 20 +11387.412193 + 30 +0.0 + 11 +6647.718221 + 21 +11387.412193 + 31 +0.0 + 0 +LINE + 5 +54E + 8 +0 + 62 + 0 + 10 +6656.152135 + 20 +11382.039197 + 30 +0.0 + 11 +6656.152135 + 21 +11382.039197 + 31 +0.0 + 0 +LINE + 5 +54F + 8 +0 + 62 + 0 + 10 +6631.565654 + 20 +11437.494237 + 30 +0.0 + 11 +6631.565654 + 21 +11437.494237 + 31 +0.0 + 0 +LINE + 5 +550 + 8 +0 + 62 + 0 + 10 +6639.999568 + 20 +11432.121241 + 30 +0.0 + 11 +6639.999568 + 21 +11432.121241 + 31 +0.0 + 0 +LINE + 5 +551 + 8 +0 + 62 + 0 + 10 +6654.209093 + 20 +11462.8605 + 30 +0.0 + 11 +6654.209093 + 21 +11462.8605 + 31 +0.0 + 0 +LINE + 5 +552 + 8 +0 + 62 + 0 + 10 +6638.056526 + 20 +11512.942545 + 30 +0.0 + 11 +6638.056526 + 21 +11512.942545 + 31 +0.0 + 0 +LINE + 5 +553 + 8 +0 + 62 + 0 + 10 +6661.543356 + 20 +11537.771508 + 30 +0.0 + 11 +6661.543356 + 21 +11537.771508 + 31 +0.0 + 0 +LINE + 5 +554 + 8 +0 + 62 + 0 + 10 +6645.390789 + 20 +11587.853552 + 30 +0.0 + 11 +6645.390789 + 21 +11587.853552 + 31 +0.0 + 0 +LINE + 5 +555 + 8 +0 + 62 + 0 + 10 +6653.824704 + 20 +11582.480556 + 30 +0.0 + 11 +6653.824704 + 21 +11582.480556 + 31 +0.0 + 0 +LINE + 5 +556 + 8 +0 + 62 + 0 + 10 +6637.672136 + 20 +11632.562601 + 30 +0.0 + 11 +6637.672136 + 21 +11632.562601 + 31 +0.0 + 0 +LINE + 5 +557 + 8 +0 + 62 + 0 + 10 +6651.881661 + 20 +11663.30186 + 30 +0.0 + 11 +6651.881661 + 21 +11663.30186 + 31 +0.0 + 0 +LINE + 5 +558 + 8 +0 + 62 + 0 + 10 +6635.729094 + 20 +11713.383904 + 30 +0.0 + 11 +6635.729094 + 21 +11713.383904 + 31 +0.0 + 0 +LINE + 5 +559 + 8 +0 + 62 + 0 + 10 +6663.870788 + 20 +11337.330148 + 30 +0.0 + 11 +6663.870788 + 21 +11337.330148 + 31 +0.0 + 0 +LINE + 5 +55A + 8 +0 + 62 + 0 + 10 +6640.383957 + 20 +11312.501185 + 30 +0.0 + 11 +6640.383957 + 21 +11312.501185 + 31 +0.0 + 0 +LINE + 5 +55B + 8 +0 + 62 + 0 + 10 +6656.536525 + 20 +11262.41914 + 30 +0.0 + 11 +6656.536525 + 21 +11262.41914 + 31 +0.0 + 0 +LINE + 5 +55C + 8 +0 + 62 + 0 + 10 +6633.893085 + 20 +11237.052878 + 30 +0.0 + 11 +6633.893085 + 21 +11237.052878 + 31 +0.0 + 0 +LINE + 5 +55D + 8 +0 + 62 + 0 + 10 +6642.327 + 20 +11231.679882 + 30 +0.0 + 11 +6642.327 + 21 +11231.679882 + 31 +0.0 + 0 +LINE + 5 +55E + 8 +0 + 62 + 0 + 10 +6650.045652 + 20 +11186.970833 + 30 +0.0 + 11 +6650.045652 + 21 +11186.970833 + 31 +0.0 + 0 +LINE + 5 +55F + 8 +0 + 62 + 0 + 10 +6658.479567 + 20 +11181.597837 + 30 +0.0 + 11 +6658.479567 + 21 +11181.597837 + 31 +0.0 + 0 +LINE + 5 +560 + 8 +0 + 62 + 0 + 10 +6666.19822 + 20 +11136.888788 + 30 +0.0 + 11 +6666.19822 + 21 +11136.888788 + 31 +0.0 + 0 +LINE + 5 +561 + 8 +0 + 62 + 0 + 10 +6642.711389 + 20 +11112.059825 + 30 +0.0 + 11 +6642.711389 + 21 +11112.059825 + 31 +0.0 + 0 +LINE + 5 +562 + 8 +0 + 62 + 0 + 10 +6635.339828 + 20 +11404.893992 + 30 +0.0 + 11 +6635.339828 + 21 +11404.893992 + 31 +0.0 + 0 +LINE + 5 +563 + 8 +0 + 62 + 0 + 10 +6639.026215 + 20 +11401.516041 + 30 +0.0 + 11 +6639.026215 + 21 +11401.516041 + 31 +0.0 + 0 +LINE + 5 +564 + 8 +0 + 62 + 0 + 10 +6656.42596 + 20 +11385.572112 + 30 +0.0 + 11 +6656.42596 + 21 +11385.572112 + 31 +0.0 + 0 +LINE + 5 +565 + 8 +0 + 62 + 0 + 10 +6634.563252 + 20 +11478.251254 + 30 +0.0 + 11 +6634.563252 + 21 +11478.251254 + 31 +0.0 + 0 +LINE + 5 +566 + 8 +0 + 62 + 0 + 10 +6654.46974 + 20 +11460.010319 + 30 +0.0 + 11 +6654.46974 + 21 +11460.010319 + 31 +0.0 + 0 +LINE + 5 +567 + 8 +0 + 62 + 0 + 10 +6658.156127 + 20 +11456.632368 + 30 +0.0 + 11 +6658.156127 + 21 +11456.632368 + 31 +0.0 + 0 +LINE + 5 +568 + 8 +0 + 62 + 0 + 10 +6632.607032 + 20 +11552.689461 + 30 +0.0 + 11 +6632.607032 + 21 +11552.689461 + 31 +0.0 + 0 +LINE + 5 +569 + 8 +0 + 62 + 0 + 10 +6636.293419 + 20 +11549.31151 + 30 +0.0 + 11 +6636.293419 + 21 +11549.31151 + 31 +0.0 + 0 +LINE + 5 +56A + 8 +0 + 62 + 0 + 10 +6653.693164 + 20 +11533.367581 + 30 +0.0 + 11 +6653.693164 + 21 +11533.367581 + 31 +0.0 + 0 +LINE + 5 +56B + 8 +0 + 62 + 0 + 10 +6631.830457 + 20 +11626.046723 + 30 +0.0 + 11 +6631.830457 + 21 +11626.046723 + 31 +0.0 + 0 +LINE + 5 +56C + 8 +0 + 62 + 0 + 10 +6651.736945 + 20 +11607.805788 + 30 +0.0 + 11 +6651.736945 + 21 +11607.805788 + 31 +0.0 + 0 +LINE + 5 +56D + 8 +0 + 62 + 0 + 10 +6655.423331 + 20 +11604.427837 + 30 +0.0 + 11 +6655.423331 + 21 +11604.427837 + 31 +0.0 + 0 +LINE + 5 +56E + 8 +0 + 62 + 0 + 10 +6633.560624 + 20 +11697.106979 + 30 +0.0 + 11 +6633.560624 + 21 +11697.106979 + 31 +0.0 + 0 +LINE + 5 +56F + 8 +0 + 62 + 0 + 10 +6650.960369 + 20 +11681.16305 + 30 +0.0 + 11 +6650.960369 + 21 +11681.16305 + 31 +0.0 + 0 +LINE + 5 +570 + 8 +0 + 62 + 0 + 10 +6637.296048 + 20 +11330.455785 + 30 +0.0 + 11 +6637.296048 + 21 +11330.455785 + 31 +0.0 + 0 +LINE + 5 +571 + 8 +0 + 62 + 0 + 10 +6657.202536 + 20 +11312.214849 + 30 +0.0 + 11 +6657.202536 + 21 +11312.214849 + 31 +0.0 + 0 +LINE + 5 +572 + 8 +0 + 62 + 0 + 10 +6660.888922 + 20 +11308.836898 + 30 +0.0 + 11 +6660.888922 + 21 +11308.836898 + 31 +0.0 + 0 +LINE + 5 +573 + 8 +0 + 62 + 0 + 10 +6638.072624 + 20 +11257.098523 + 30 +0.0 + 11 +6638.072624 + 21 +11257.098523 + 31 +0.0 + 0 +LINE + 5 +574 + 8 +0 + 62 + 0 + 10 +6641.75901 + 20 +11253.720572 + 30 +0.0 + 11 +6641.75901 + 21 +11253.720572 + 31 +0.0 + 0 +LINE + 5 +575 + 8 +0 + 62 + 0 + 10 +6659.158755 + 20 +11237.776643 + 30 +0.0 + 11 +6659.158755 + 21 +11237.776643 + 31 +0.0 + 0 +LINE + 5 +576 + 8 +0 + 62 + 0 + 10 +6640.028843 + 20 +11182.660316 + 30 +0.0 + 11 +6640.028843 + 21 +11182.660316 + 31 +0.0 + 0 +LINE + 5 +577 + 8 +0 + 62 + 0 + 10 +6659.935331 + 20 +11164.41938 + 30 +0.0 + 11 +6659.935331 + 21 +11164.41938 + 31 +0.0 + 0 +LINE + 5 +578 + 8 +0 + 62 + 0 + 10 +6663.621718 + 20 +11161.041429 + 30 +0.0 + 11 +6663.621718 + 21 +11161.041429 + 31 +0.0 + 0 +LINE + 5 +579 + 8 +0 + 62 + 0 + 10 +6640.805419 + 20 +11109.303053 + 30 +0.0 + 11 +6640.805419 + 21 +11109.303053 + 31 +0.0 + 0 +LINE + 5 +57A + 8 +0 + 62 + 0 + 10 +6644.491806 + 20 +11105.925102 + 30 +0.0 + 11 +6644.491806 + 21 +11105.925102 + 31 +0.0 + 0 +LINE + 5 +57B + 8 +0 + 62 + 0 + 10 +6661.891551 + 20 +11089.981173 + 30 +0.0 + 11 +6661.891551 + 21 +11089.981173 + 31 +0.0 + 0 +ENDBLK + 5 +57C + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X13 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X13 + 1 + + 0 +LINE + 5 +57E + 8 +0 + 62 + 0 + 10 +5708.446515 + 20 +9243.980421 + 30 +0.0 + 11 +6622.135223 + 21 +10157.669129 + 31 +0.0 + 0 +LINE + 5 +57F + 8 +0 + 62 + 0 + 10 +5708.446515 + 20 +9420.757116 + 30 +0.0 + 11 +6622.135223 + 21 +10334.445824 + 31 +0.0 + 0 +LINE + 5 +580 + 8 +0 + 62 + 0 + 10 +5708.446515 + 20 +9597.533811 + 30 +0.0 + 11 +6456.017848 + 21 +10345.105144 + 31 +0.0 + 0 +LINE + 5 +581 + 8 +0 + 62 + 0 + 10 +5708.446515 + 20 +9774.310507 + 30 +0.0 + 11 +6279.241152 + 21 +10345.105144 + 31 +0.0 + 0 +LINE + 5 +582 + 8 +0 + 62 + 0 + 10 +5708.446515 + 20 +9951.087202 + 30 +0.0 + 11 +6102.464457 + 21 +10345.105144 + 31 +0.0 + 0 +LINE + 5 +583 + 8 +0 + 62 + 0 + 10 +5708.446515 + 20 +10127.863897 + 30 +0.0 + 11 +5925.687762 + 21 +10345.105144 + 31 +0.0 + 0 +LINE + 5 +584 + 8 +0 + 62 + 0 + 10 +5708.446515 + 20 +10304.640593 + 30 +0.0 + 11 +5748.911066 + 21 +10345.105144 + 31 +0.0 + 0 +LINE + 5 +585 + 8 +0 + 62 + 0 + 10 +5731.668685 + 20 +9090.425896 + 30 +0.0 + 11 +6622.135223 + 21 +9980.892434 + 31 +0.0 + 0 +LINE + 5 +586 + 8 +0 + 62 + 0 + 10 +5908.445381 + 20 +9090.425896 + 30 +0.0 + 11 +6622.135223 + 21 +9804.115738 + 31 +0.0 + 0 +LINE + 5 +587 + 8 +0 + 62 + 0 + 10 +6085.222076 + 20 +9090.425896 + 30 +0.0 + 11 +6622.135223 + 21 +9627.339043 + 31 +0.0 + 0 +LINE + 5 +588 + 8 +0 + 62 + 0 + 10 +6261.998771 + 20 +9090.425896 + 30 +0.0 + 11 +6622.135223 + 21 +9450.562348 + 31 +0.0 + 0 +LINE + 5 +589 + 8 +0 + 62 + 0 + 10 +6438.775467 + 20 +9090.425896 + 30 +0.0 + 11 +6622.135223 + 21 +9273.785653 + 31 +0.0 + 0 +LINE + 5 +58A + 8 +0 + 62 + 0 + 10 +6615.552162 + 20 +9090.425896 + 30 +0.0 + 11 +6622.135223 + 21 +9097.008957 + 31 +0.0 + 0 +ENDBLK + 5 +58B + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X14 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X14 + 1 + + 0 +LINE + 5 +58D + 8 +0 + 62 + 0 + 10 +6632.8125 + 20 +10947.102322 + 30 +0.0 + 11 +6648.4375 + 21 +10947.102322 + 31 +0.0 + 0 +LINE + 5 +58E + 8 +0 + 62 + 0 + 10 +6679.6875 + 20 +10947.102322 + 30 +0.0 + 11 +6695.3125 + 21 +10947.102322 + 31 +0.0 + 0 +LINE + 5 +58F + 8 +0 + 62 + 0 + 10 +6656.25 + 20 +10960.633969 + 30 +0.0 + 11 +6671.875 + 21 +10960.633969 + 31 +0.0 + 0 +LINE + 5 +590 + 8 +0 + 62 + 0 + 10 +6703.125 + 20 +10960.633969 + 30 +0.0 + 11 +6710.0 + 21 +10960.633969 + 31 +0.0 + 0 +LINE + 5 +591 + 8 +0 + 62 + 0 + 10 +6632.8125 + 20 +10974.165616 + 30 +0.0 + 11 +6648.4375 + 21 +10974.165616 + 31 +0.0 + 0 +LINE + 5 +592 + 8 +0 + 62 + 0 + 10 +6679.6875 + 20 +10974.165616 + 30 +0.0 + 11 +6695.3125 + 21 +10974.165616 + 31 +0.0 + 0 +LINE + 5 +593 + 8 +0 + 62 + 0 + 10 +6656.25 + 20 +10987.697263 + 30 +0.0 + 11 +6671.875 + 21 +10987.697263 + 31 +0.0 + 0 +LINE + 5 +594 + 8 +0 + 62 + 0 + 10 +6703.125 + 20 +10987.697263 + 30 +0.0 + 11 +6710.0 + 21 +10987.697263 + 31 +0.0 + 0 +LINE + 5 +595 + 8 +0 + 62 + 0 + 10 +6632.8125 + 20 +11001.228909 + 30 +0.0 + 11 +6648.4375 + 21 +11001.228909 + 31 +0.0 + 0 +LINE + 5 +596 + 8 +0 + 62 + 0 + 10 +6679.6875 + 20 +11001.228909 + 30 +0.0 + 11 +6695.3125 + 21 +11001.228909 + 31 +0.0 + 0 +LINE + 5 +597 + 8 +0 + 62 + 0 + 10 +6656.25 + 20 +11014.760556 + 30 +0.0 + 11 +6671.875 + 21 +11014.760556 + 31 +0.0 + 0 +LINE + 5 +598 + 8 +0 + 62 + 0 + 10 +6703.125 + 20 +11014.760556 + 30 +0.0 + 11 +6710.0 + 21 +11014.760556 + 31 +0.0 + 0 +LINE + 5 +599 + 8 +0 + 62 + 0 + 10 +6632.8125 + 20 +11028.292203 + 30 +0.0 + 11 +6648.4375 + 21 +11028.292203 + 31 +0.0 + 0 +LINE + 5 +59A + 8 +0 + 62 + 0 + 10 +6679.6875 + 20 +11028.292203 + 30 +0.0 + 11 +6695.3125 + 21 +11028.292203 + 31 +0.0 + 0 +LINE + 5 +59B + 8 +0 + 62 + 0 + 10 +6656.25 + 20 +11041.82385 + 30 +0.0 + 11 +6671.875 + 21 +11041.82385 + 31 +0.0 + 0 +LINE + 5 +59C + 8 +0 + 62 + 0 + 10 +6703.125 + 20 +11041.82385 + 30 +0.0 + 11 +6710.0 + 21 +11041.82385 + 31 +0.0 + 0 +LINE + 5 +59D + 8 +0 + 62 + 0 + 10 +6632.8125 + 20 +11055.355497 + 30 +0.0 + 11 +6648.4375 + 21 +11055.355497 + 31 +0.0 + 0 +LINE + 5 +59E + 8 +0 + 62 + 0 + 10 +6679.6875 + 20 +11055.355497 + 30 +0.0 + 11 +6695.3125 + 21 +11055.355497 + 31 +0.0 + 0 +LINE + 5 +59F + 8 +0 + 62 + 0 + 10 +6656.25 + 20 +10933.570675 + 30 +0.0 + 11 +6671.875 + 21 +10933.570675 + 31 +0.0 + 0 +LINE + 5 +5A0 + 8 +0 + 62 + 0 + 10 +6703.125 + 20 +10933.570675 + 30 +0.0 + 11 +6710.0 + 21 +10933.570675 + 31 +0.0 + 0 +LINE + 5 +5A1 + 8 +0 + 62 + 0 + 10 +6632.8125 + 20 +10920.039028 + 30 +0.0 + 11 +6648.4375 + 21 +10920.039028 + 31 +0.0 + 0 +LINE + 5 +5A2 + 8 +0 + 62 + 0 + 10 +6679.6875 + 20 +10920.039028 + 30 +0.0 + 11 +6695.3125 + 21 +10920.039028 + 31 +0.0 + 0 +LINE + 5 +5A3 + 8 +0 + 62 + 0 + 10 +6656.25 + 20 +10906.507381 + 30 +0.0 + 11 +6671.875 + 21 +10906.507381 + 31 +0.0 + 0 +LINE + 5 +5A4 + 8 +0 + 62 + 0 + 10 +6703.125 + 20 +10906.507381 + 30 +0.0 + 11 +6710.0 + 21 +10906.507381 + 31 +0.0 + 0 +LINE + 5 +5A5 + 8 +0 + 62 + 0 + 10 +6632.8125 + 20 +10892.975734 + 30 +0.0 + 11 +6648.4375 + 21 +10892.975734 + 31 +0.0 + 0 +LINE + 5 +5A6 + 8 +0 + 62 + 0 + 10 +6679.6875 + 20 +10892.975734 + 30 +0.0 + 11 +6695.3125 + 21 +10892.975734 + 31 +0.0 + 0 +LINE + 5 +5A7 + 8 +0 + 62 + 0 + 10 +6656.25 + 20 +10879.444088 + 30 +0.0 + 11 +6671.875 + 21 +10879.444088 + 31 +0.0 + 0 +LINE + 5 +5A8 + 8 +0 + 62 + 0 + 10 +6703.125 + 20 +10879.444088 + 30 +0.0 + 11 +6710.0 + 21 +10879.444088 + 31 +0.0 + 0 +LINE + 5 +5A9 + 8 +0 + 62 + 0 + 10 +6632.8125 + 20 +10865.912441 + 30 +0.0 + 11 +6648.4375 + 21 +10865.912441 + 31 +0.0 + 0 +LINE + 5 +5AA + 8 +0 + 62 + 0 + 10 +6679.6875 + 20 +10865.912441 + 30 +0.0 + 11 +6695.3125 + 21 +10865.912441 + 31 +0.0 + 0 +LINE + 5 +5AB + 8 +0 + 62 + 0 + 10 +6656.25 + 20 +10852.380794 + 30 +0.0 + 11 +6671.875 + 21 +10852.380794 + 31 +0.0 + 0 +LINE + 5 +5AC + 8 +0 + 62 + 0 + 10 +6703.125 + 20 +10852.380794 + 30 +0.0 + 11 +6710.0 + 21 +10852.380794 + 31 +0.0 + 0 +LINE + 5 +5AD + 8 +0 + 62 + 0 + 10 +6632.8125 + 20 +10838.849147 + 30 +0.0 + 11 +6648.4375 + 21 +10838.849147 + 31 +0.0 + 0 +LINE + 5 +5AE + 8 +0 + 62 + 0 + 10 +6679.6875 + 20 +10838.849147 + 30 +0.0 + 11 +6695.3125 + 21 +10838.849147 + 31 +0.0 + 0 +LINE + 5 +5AF + 8 +0 + 62 + 0 + 10 +6703.124957 + 20 +10879.44411 + 30 +0.0 + 11 +6695.312457 + 21 +10892.975757 + 31 +0.0 + 0 +LINE + 5 +5B0 + 8 +0 + 62 + 0 + 10 +6679.687457 + 20 +10920.039051 + 30 +0.0 + 11 +6671.874957 + 21 +10933.570698 + 31 +0.0 + 0 +LINE + 5 +5B1 + 8 +0 + 62 + 0 + 10 +6656.249957 + 20 +10960.633992 + 30 +0.0 + 11 +6648.437457 + 21 +10974.165639 + 31 +0.0 + 0 +LINE + 5 +5B2 + 8 +0 + 62 + 0 + 10 +6632.812457 + 20 +11001.228933 + 30 +0.0 + 11 +6630.0 + 21 +11006.100252 + 31 +0.0 + 0 +LINE + 5 +5B3 + 8 +0 + 62 + 0 + 10 +6703.124957 + 20 +10852.380817 + 30 +0.0 + 11 +6695.312457 + 21 +10865.912464 + 31 +0.0 + 0 +LINE + 5 +5B4 + 8 +0 + 62 + 0 + 10 +6679.687457 + 20 +10892.975757 + 30 +0.0 + 11 +6671.874957 + 21 +10906.507404 + 31 +0.0 + 0 +LINE + 5 +5B5 + 8 +0 + 62 + 0 + 10 +6656.249957 + 20 +10933.570698 + 30 +0.0 + 11 +6648.437457 + 21 +10947.102345 + 31 +0.0 + 0 +LINE + 5 +5B6 + 8 +0 + 62 + 0 + 10 +6632.812457 + 20 +10974.165639 + 30 +0.0 + 11 +6630.0 + 21 +10979.036958 + 31 +0.0 + 0 +LINE + 5 +5B7 + 8 +0 + 62 + 0 + 10 +6700.421528 + 20 +10830.0 + 30 +0.0 + 11 +6695.312458 + 21 +10838.84917 + 31 +0.0 + 0 +LINE + 5 +5B8 + 8 +0 + 62 + 0 + 10 +6679.687458 + 20 +10865.912464 + 30 +0.0 + 11 +6671.874958 + 21 +10879.444111 + 31 +0.0 + 0 +LINE + 5 +5B9 + 8 +0 + 62 + 0 + 10 +6656.249958 + 20 +10906.507404 + 30 +0.0 + 11 +6648.437458 + 21 +10920.039051 + 31 +0.0 + 0 +LINE + 5 +5BA + 8 +0 + 62 + 0 + 10 +6632.812458 + 20 +10947.102345 + 30 +0.0 + 11 +6630.0 + 21 +10951.973665 + 31 +0.0 + 0 +LINE + 5 +5BB + 8 +0 + 62 + 0 + 10 +6679.687458 + 20 +10838.84917 + 30 +0.0 + 11 +6671.874958 + 21 +10852.380817 + 31 +0.0 + 0 +LINE + 5 +5BC + 8 +0 + 62 + 0 + 10 +6656.249958 + 20 +10879.444111 + 30 +0.0 + 11 +6648.437458 + 21 +10892.975757 + 31 +0.0 + 0 +LINE + 5 +5BD + 8 +0 + 62 + 0 + 10 +6632.812458 + 20 +10920.039051 + 30 +0.0 + 11 +6630.0 + 21 +10924.910371 + 31 +0.0 + 0 +LINE + 5 +5BE + 8 +0 + 62 + 0 + 10 +6656.249958 + 20 +10852.380817 + 30 +0.0 + 11 +6648.437458 + 21 +10865.912464 + 31 +0.0 + 0 +LINE + 5 +5BF + 8 +0 + 62 + 0 + 10 +6632.812458 + 20 +10892.975758 + 30 +0.0 + 11 +6630.0 + 21 +10897.847077 + 31 +0.0 + 0 +LINE + 5 +5C0 + 8 +0 + 62 + 0 + 10 +6653.546528 + 20 +10830.0 + 30 +0.0 + 11 +6648.437458 + 21 +10838.84917 + 31 +0.0 + 0 +LINE + 5 +5C1 + 8 +0 + 62 + 0 + 10 +6632.812458 + 20 +10865.912464 + 30 +0.0 + 11 +6630.0 + 21 +10870.783783 + 31 +0.0 + 0 +LINE + 5 +5C2 + 8 +0 + 62 + 0 + 10 +6632.812458 + 20 +10838.84917 + 30 +0.0 + 11 +6630.0 + 21 +10843.72049 + 31 +0.0 + 0 +LINE + 5 +5C3 + 8 +0 + 62 + 0 + 10 +6703.124957 + 20 +10906.507404 + 30 +0.0 + 11 +6695.312457 + 21 +10920.039051 + 31 +0.0 + 0 +LINE + 5 +5C4 + 8 +0 + 62 + 0 + 10 +6679.687457 + 20 +10947.102345 + 30 +0.0 + 11 +6671.874957 + 21 +10960.633992 + 31 +0.0 + 0 +LINE + 5 +5C5 + 8 +0 + 62 + 0 + 10 +6656.249957 + 20 +10987.697286 + 30 +0.0 + 11 +6648.437457 + 21 +11001.228933 + 31 +0.0 + 0 +LINE + 5 +5C6 + 8 +0 + 62 + 0 + 10 +6632.812457 + 20 +11028.292227 + 30 +0.0 + 11 +6630.0 + 21 +11033.163546 + 31 +0.0 + 0 +LINE + 5 +5C7 + 8 +0 + 62 + 0 + 10 +6703.124957 + 20 +10933.570698 + 30 +0.0 + 11 +6695.312457 + 21 +10947.102345 + 31 +0.0 + 0 +LINE + 5 +5C8 + 8 +0 + 62 + 0 + 10 +6679.687457 + 20 +10974.165639 + 30 +0.0 + 11 +6671.874957 + 21 +10987.697286 + 31 +0.0 + 0 +LINE + 5 +5C9 + 8 +0 + 62 + 0 + 10 +6656.249957 + 20 +11014.76058 + 30 +0.0 + 11 +6648.437457 + 21 +11028.292227 + 31 +0.0 + 0 +LINE + 5 +5CA + 8 +0 + 62 + 0 + 10 +6632.812457 + 20 +11055.355521 + 30 +0.0 + 11 +6630.0 + 21 +11060.22684 + 31 +0.0 + 0 +LINE + 5 +5CB + 8 +0 + 62 + 0 + 10 +6703.124957 + 20 +10960.633992 + 30 +0.0 + 11 +6695.312457 + 21 +10974.165639 + 31 +0.0 + 0 +LINE + 5 +5CC + 8 +0 + 62 + 0 + 10 +6679.687457 + 20 +11001.228933 + 30 +0.0 + 11 +6671.874957 + 21 +11014.76058 + 31 +0.0 + 0 +LINE + 5 +5CD + 8 +0 + 62 + 0 + 10 +6656.249957 + 20 +11041.823874 + 30 +0.0 + 11 +6648.437457 + 21 +11055.355521 + 31 +0.0 + 0 +LINE + 5 +5CE + 8 +0 + 62 + 0 + 10 +6703.124957 + 20 +10987.697286 + 30 +0.0 + 11 +6695.312457 + 21 +11001.228933 + 31 +0.0 + 0 +LINE + 5 +5CF + 8 +0 + 62 + 0 + 10 +6679.687457 + 20 +11028.292227 + 30 +0.0 + 11 +6671.874957 + 21 +11041.823874 + 31 +0.0 + 0 +LINE + 5 +5D0 + 8 +0 + 62 + 0 + 10 +6703.124957 + 20 +11014.76058 + 30 +0.0 + 11 +6695.312457 + 21 +11028.292227 + 31 +0.0 + 0 +LINE + 5 +5D1 + 8 +0 + 62 + 0 + 10 +6679.687457 + 20 +11055.35552 + 30 +0.0 + 11 +6674.119214 + 21 +11065.0 + 31 +0.0 + 0 +LINE + 5 +5D2 + 8 +0 + 62 + 0 + 10 +6703.124957 + 20 +11041.823874 + 30 +0.0 + 11 +6695.312457 + 21 +11055.35552 + 31 +0.0 + 0 +LINE + 5 +5D3 + 8 +0 + 62 + 0 + 10 +6630.0 + 20 +10888.104392 + 30 +0.0 + 11 +6632.812499 + 21 +10892.975783 + 31 +0.0 + 0 +LINE + 5 +5D4 + 8 +0 + 62 + 0 + 10 +6648.437499 + 20 +10920.039076 + 30 +0.0 + 11 +6656.249999 + 21 +10933.570723 + 31 +0.0 + 0 +LINE + 5 +5D5 + 8 +0 + 62 + 0 + 10 +6671.874999 + 20 +10960.634017 + 30 +0.0 + 11 +6679.687499 + 21 +10974.165664 + 31 +0.0 + 0 +LINE + 5 +5D6 + 8 +0 + 62 + 0 + 10 +6695.312499 + 20 +11001.228958 + 30 +0.0 + 11 +6703.124999 + 21 +11014.760605 + 31 +0.0 + 0 +LINE + 5 +5D7 + 8 +0 + 62 + 0 + 10 +6630.0 + 20 +10915.167685 + 30 +0.0 + 11 +6632.812499 + 21 +10920.039076 + 31 +0.0 + 0 +LINE + 5 +5D8 + 8 +0 + 62 + 0 + 10 +6648.437499 + 20 +10947.10237 + 30 +0.0 + 11 +6656.249999 + 21 +10960.634017 + 31 +0.0 + 0 +LINE + 5 +5D9 + 8 +0 + 62 + 0 + 10 +6671.874999 + 20 +10987.697311 + 30 +0.0 + 11 +6679.687499 + 21 +11001.228958 + 31 +0.0 + 0 +LINE + 5 +5DA + 8 +0 + 62 + 0 + 10 +6695.312499 + 20 +11028.292252 + 30 +0.0 + 11 +6703.124999 + 21 +11041.823899 + 31 +0.0 + 0 +LINE + 5 +5DB + 8 +0 + 62 + 0 + 10 +6630.0 + 20 +10942.230979 + 30 +0.0 + 11 +6632.812499 + 21 +10947.10237 + 31 +0.0 + 0 +LINE + 5 +5DC + 8 +0 + 62 + 0 + 10 +6648.437499 + 20 +10974.165664 + 30 +0.0 + 11 +6656.249999 + 21 +10987.697311 + 31 +0.0 + 0 +LINE + 5 +5DD + 8 +0 + 62 + 0 + 10 +6671.874999 + 20 +11014.760605 + 30 +0.0 + 11 +6679.687499 + 21 +11028.292252 + 31 +0.0 + 0 +LINE + 5 +5DE + 8 +0 + 62 + 0 + 10 +6695.312499 + 20 +11055.355546 + 30 +0.0 + 11 +6700.880727 + 21 +11065.0 + 31 +0.0 + 0 +LINE + 5 +5DF + 8 +0 + 62 + 0 + 10 +6630.0 + 20 +10969.294273 + 30 +0.0 + 11 +6632.812499 + 21 +10974.165664 + 31 +0.0 + 0 +LINE + 5 +5E0 + 8 +0 + 62 + 0 + 10 +6648.437499 + 20 +11001.228958 + 30 +0.0 + 11 +6656.249999 + 21 +11014.760605 + 31 +0.0 + 0 +LINE + 5 +5E1 + 8 +0 + 62 + 0 + 10 +6671.874999 + 20 +11041.823899 + 30 +0.0 + 11 +6679.687499 + 21 +11055.355546 + 31 +0.0 + 0 +LINE + 5 +5E2 + 8 +0 + 62 + 0 + 10 +6630.0 + 20 +10996.357567 + 30 +0.0 + 11 +6632.812499 + 21 +11001.228958 + 31 +0.0 + 0 +LINE + 5 +5E3 + 8 +0 + 62 + 0 + 10 +6648.437499 + 20 +11028.292252 + 30 +0.0 + 11 +6656.249999 + 21 +11041.823899 + 31 +0.0 + 0 +LINE + 5 +5E4 + 8 +0 + 62 + 0 + 10 +6630.0 + 20 +11023.42086 + 30 +0.0 + 11 +6632.812499 + 21 +11028.292252 + 31 +0.0 + 0 +LINE + 5 +5E5 + 8 +0 + 62 + 0 + 10 +6648.437499 + 20 +11055.355546 + 30 +0.0 + 11 +6654.005727 + 21 +11065.0 + 31 +0.0 + 0 +LINE + 5 +5E6 + 8 +0 + 62 + 0 + 10 +6630.0 + 20 +11050.484154 + 30 +0.0 + 11 +6632.812499 + 21 +11055.355546 + 31 +0.0 + 0 +LINE + 5 +5E7 + 8 +0 + 62 + 0 + 10 +6630.0 + 20 +10861.041098 + 30 +0.0 + 11 +6632.812499 + 21 +10865.912489 + 31 +0.0 + 0 +LINE + 5 +5E8 + 8 +0 + 62 + 0 + 10 +6648.437499 + 20 +10892.975783 + 30 +0.0 + 11 +6656.249999 + 21 +10906.50743 + 31 +0.0 + 0 +LINE + 5 +5E9 + 8 +0 + 62 + 0 + 10 +6671.874999 + 20 +10933.570723 + 30 +0.0 + 11 +6679.687499 + 21 +10947.10237 + 31 +0.0 + 0 +LINE + 5 +5EA + 8 +0 + 62 + 0 + 10 +6695.312499 + 20 +10974.165664 + 30 +0.0 + 11 +6703.124999 + 21 +10987.697311 + 31 +0.0 + 0 +LINE + 5 +5EB + 8 +0 + 62 + 0 + 10 +6630.0 + 20 +10833.977804 + 30 +0.0 + 11 +6632.812499 + 21 +10838.849195 + 31 +0.0 + 0 +LINE + 5 +5EC + 8 +0 + 62 + 0 + 10 +6648.437499 + 20 +10865.912489 + 30 +0.0 + 11 +6656.249999 + 21 +10879.444136 + 31 +0.0 + 0 +LINE + 5 +5ED + 8 +0 + 62 + 0 + 10 +6671.874999 + 20 +10906.50743 + 30 +0.0 + 11 +6679.687499 + 21 +10920.039077 + 31 +0.0 + 0 +LINE + 5 +5EE + 8 +0 + 62 + 0 + 10 +6695.312499 + 20 +10947.10237 + 30 +0.0 + 11 +6703.124999 + 21 +10960.634017 + 31 +0.0 + 0 +LINE + 5 +5EF + 8 +0 + 62 + 0 + 10 +6648.437499 + 20 +10838.849195 + 30 +0.0 + 11 +6656.249999 + 21 +10852.380842 + 31 +0.0 + 0 +LINE + 5 +5F0 + 8 +0 + 62 + 0 + 10 +6671.874999 + 20 +10879.444136 + 30 +0.0 + 11 +6679.687499 + 21 +10892.975783 + 31 +0.0 + 0 +LINE + 5 +5F1 + 8 +0 + 62 + 0 + 10 +6695.312499 + 20 +10920.039077 + 30 +0.0 + 11 +6703.124999 + 21 +10933.570724 + 31 +0.0 + 0 +LINE + 5 +5F2 + 8 +0 + 62 + 0 + 10 +6671.874999 + 20 +10852.380842 + 30 +0.0 + 11 +6679.687499 + 21 +10865.912489 + 31 +0.0 + 0 +LINE + 5 +5F3 + 8 +0 + 62 + 0 + 10 +6695.312499 + 20 +10892.975783 + 30 +0.0 + 11 +6703.124999 + 21 +10906.50743 + 31 +0.0 + 0 +LINE + 5 +5F4 + 8 +0 + 62 + 0 + 10 +6674.578413 + 20 +10830.0 + 30 +0.0 + 11 +6679.687499 + 21 +10838.849195 + 31 +0.0 + 0 +LINE + 5 +5F5 + 8 +0 + 62 + 0 + 10 +6695.312499 + 20 +10865.912489 + 30 +0.0 + 11 +6703.124999 + 21 +10879.444136 + 31 +0.0 + 0 +LINE + 5 +5F6 + 8 +0 + 62 + 0 + 10 +6695.312499 + 20 +10838.849195 + 30 +0.0 + 11 +6703.124999 + 21 +10852.380842 + 31 +0.0 + 0 +ENDBLK + 5 +5F7 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X15 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X15 + 1 + + 0 +LINE + 5 +5F9 + 8 +0 + 62 + 0 + 10 +6088.349571 + 20 +8740.0 + 30 +0.0 + 11 +6403.349571 + 21 +9055.0 + 31 +0.0 + 0 +LINE + 5 +5FA + 8 +0 + 62 + 0 + 10 +5911.572875 + 20 +8740.0 + 30 +0.0 + 11 +6226.572875 + 21 +9055.0 + 31 +0.0 + 0 +LINE + 5 +5FB + 8 +0 + 62 + 0 + 10 +5734.79618 + 20 +8740.0 + 30 +0.0 + 11 +6049.79618 + 21 +9055.0 + 31 +0.0 + 0 +LINE + 5 +5FC + 8 +0 + 62 + 0 + 10 +5710.0 + 20 +8891.980515 + 30 +0.0 + 11 +5873.019485 + 21 +9055.0 + 31 +0.0 + 0 +LINE + 5 +5FD + 8 +0 + 62 + 0 + 10 +6265.126266 + 20 +8740.0 + 30 +0.0 + 11 +6580.126266 + 21 +9055.0 + 31 +0.0 + 0 +LINE + 5 +5FE + 8 +0 + 62 + 0 + 10 +6441.902961 + 20 +8740.0 + 30 +0.0 + 11 +6624.287011 + 21 +8922.38405 + 31 +0.0 + 0 +LINE + 5 +5FF + 8 +0 + 62 + 0 + 10 +6618.679656 + 20 +8740.0 + 30 +0.0 + 11 +6623.331461 + 21 +8744.651805 + 31 +0.0 + 0 +ENDBLK + 5 +600 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D16 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D16 + 1 + + 0 +LINE + 5 +602 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9369.023561 + 20 +11771.335123 + 30 +0.0 + 11 +9369.023561 + 21 +11867.053132 + 31 +0.0 + 0 +INSERT + 5 +603 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9369.023561 + 20 +11770.335123 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +604 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9369.023561 + 20 +11868.053132 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +605 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9325.273561 + 20 +11797.319128 + 30 +0.0 + 40 +87.5 + 1 +4 + 50 +90.0 + 41 +0.75 + 72 + 1 + 11 +9281.523561 + 21 +11819.194128 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +607 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8592.462088 + 20 +11770.335123 + 30 +0.0 + 0 +POINT + 5 +608 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8592.462088 + 20 +11868.053132 + 30 +0.0 + 0 +POINT + 5 +609 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9369.023561 + 20 +11868.053132 + 30 +0.0 + 0 +ENDBLK + 5 +60A + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D17 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D17 + 1 + + 0 +LINE + 5 +60C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9369.023561 + 20 +11729.455992 + 30 +0.0 + 11 +9369.023561 + 21 +11769.335123 + 31 +0.0 + 0 +INSERT + 5 +60D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9369.023561 + 20 +11728.455992 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +60E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9369.023561 + 20 +11770.335123 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +60F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9325.273561 + 20 +11738.458057 + 30 +0.0 + 40 +87.5 + 1 +1 + 50 +90.0 + 41 +0.75 + 72 + 1 + 11 +9281.523561 + 21 +11749.395557 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +610 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8592.462088 + 20 +11728.455992 + 30 +0.0 + 0 +POINT + 5 +611 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8592.462088 + 20 +11770.335123 + 30 +0.0 + 0 +POINT + 5 +612 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9369.023561 + 20 +11770.335123 + 30 +0.0 + 0 +ENDBLK + 5 +613 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D18 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D18 + 1 + + 0 +LINE + 5 +615 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9369.023561 + 20 +11626.154251 + 30 +0.0 + 11 +9369.023561 + 21 +11727.455992 + 31 +0.0 + 0 +INSERT + 5 +616 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9369.023561 + 20 +11625.154251 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +617 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9369.023561 + 20 +11728.455992 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +618 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9325.273561 + 20 +11654.930121 + 30 +0.0 + 40 +87.5 + 1 +4 + 50 +90.0 + 41 +0.75 + 72 + 1 + 11 +9281.523561 + 21 +11676.805121 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +619 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8581.288492 + 20 +11625.154251 + 30 +0.0 + 0 +POINT + 5 +61A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8592.462088 + 20 +11728.455992 + 30 +0.0 + 0 +POINT + 5 +61B + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9369.023561 + 20 +11728.455992 + 30 +0.0 + 0 +ENDBLK + 5 +61C + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D19 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D19 + 1 + + 0 +LINE + 5 +61E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9369.023561 + 20 +11229.698587 + 30 +0.0 + 11 +9369.023561 + 21 +11624.154251 + 31 +0.0 + 0 +INSERT + 5 +61F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9369.023561 + 20 +11228.698587 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +620 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9369.023561 + 20 +11625.154251 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +621 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9325.273561 + 20 +11383.176419 + 30 +0.0 + 40 +87.5 + 1 +16 + 50 +90.0 + 41 +0.75 + 72 + 1 + 11 +9281.523561 + 21 +11426.926419 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +622 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8581.288492 + 20 +11228.698587 + 30 +0.0 + 0 +POINT + 5 +623 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8581.288492 + 20 +11625.154251 + 30 +0.0 + 0 +POINT + 5 +624 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9369.023561 + 20 +11625.154251 + 30 +0.0 + 0 +ENDBLK + 5 +625 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D20 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D20 + 1 + + 0 +LINE + 5 +627 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +6142.572752 + 20 +8884.916877 + 30 +0.0 + 11 +7051.902997 + 21 +8884.916877 + 31 +0.0 + 0 +INSERT + 5 +628 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +6141.572752 + 20 +8884.916877 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +629 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +7052.902997 + 20 +8884.916877 + 30 +0.0 + 0 +TEXT + 5 +62A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +6542.550375 + 20 +8928.666877 + 30 +0.0 + 40 +87.5 + 1 +36 + 41 +0.75 + 72 + 1 + 11 +6597.237875 + 21 +8972.416877 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +62B + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +6141.572752 + 20 +9555.000103 + 30 +0.0 + 0 +POINT + 5 +62C + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7052.902997 + 20 +9561.814406 + 30 +0.0 + 0 +POINT + 5 +62D + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7052.902997 + 20 +8884.916877 + 30 +0.0 + 0 +ENDBLK + 5 +62E + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D21 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D21 + 1 + + 0 +LINE + 5 +630 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +5502.376207 + 20 +13098.623281 + 30 +0.0 + 11 +5788.99228 + 21 +13098.623281 + 31 +0.0 + 0 +INSERT + 5 +631 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +5501.376207 + 20 +13098.623281 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +632 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +5789.99228 + 20 +13098.623281 + 30 +0.0 + 0 +TEXT + 5 +633 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +5612.871744 + 20 +13142.373281 + 30 +0.0 + 40 +87.5 + 1 +11 + 41 +0.75 + 72 + 1 + 11 +5645.684244 + 21 +13186.123281 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +634 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5501.376207 + 20 +12526.305162 + 30 +0.0 + 0 +POINT + 5 +635 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5789.99228 + 20 +12526.305162 + 30 +0.0 + 0 +POINT + 5 +636 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5789.99228 + 20 +13098.623281 + 30 +0.0 + 0 +ENDBLK + 5 +637 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D22 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D22 + 1 + + 0 +LINE + 5 +639 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +5790.99228 + 20 +13098.623281 + 30 +0.0 + 11 +5939.072764 + 21 +13098.623281 + 31 +0.0 + 0 +INSERT + 5 +63A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +5789.99228 + 20 +13098.623281 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +63B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +5940.072764 + 20 +13098.623281 + 30 +0.0 + 0 +TEXT + 5 +63C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +5843.157522 + 20 +13142.373281 + 30 +0.0 + 40 +87.5 + 1 +6 + 41 +0.75 + 72 + 1 + 11 +5865.032522 + 21 +13186.123281 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +63D + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5789.99228 + 20 +12526.305162 + 30 +0.0 + 0 +POINT + 5 +63E + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5940.072764 + 20 +12526.305162 + 30 +0.0 + 0 +POINT + 5 +63F + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5940.072764 + 20 +13098.623281 + 30 +0.0 + 0 +ENDBLK + 5 +640 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D23 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D23 + 1 + + 0 +LINE + 5 +642 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +5941.072764 + 20 +13098.623281 + 30 +0.0 + 11 +6139.949559 + 21 +13098.623281 + 31 +0.0 + 0 +INSERT + 5 +643 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +5940.072764 + 20 +13098.623281 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +644 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +6140.949559 + 20 +13098.623281 + 30 +0.0 + 0 +TEXT + 5 +645 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +6018.636162 + 20 +13142.373281 + 30 +0.0 + 40 +87.5 + 1 +8 + 41 +0.75 + 72 + 1 + 11 +6040.511162 + 21 +13186.123281 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +646 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5940.072764 + 20 +12526.305162 + 30 +0.0 + 0 +POINT + 5 +647 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +6140.949559 + 20 +12521.68964 + 30 +0.0 + 0 +POINT + 5 +648 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +6140.949559 + 20 +13098.623281 + 30 +0.0 + 0 +ENDBLK + 5 +649 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D24 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D24 + 1 + + 0 +LINE + 5 +64B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +6141.949559 + 20 +13098.623281 + 30 +0.0 + 11 +7061.212311 + 21 +13098.623281 + 31 +0.0 + 0 +INSERT + 5 +64C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +6140.949559 + 20 +13098.623281 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +64D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +7062.212311 + 20 +13098.623281 + 30 +0.0 + 0 +TEXT + 5 +64E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +6546.893435 + 20 +13142.373281 + 30 +0.0 + 40 +87.5 + 1 +36 + 41 +0.75 + 72 + 1 + 11 +6601.580935 + 21 +13186.123281 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +64F + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +6140.949559 + 20 +12521.68964 + 30 +0.0 + 0 +POINT + 5 +650 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7062.212311 + 20 +12523.997349 + 30 +0.0 + 0 +POINT + 5 +651 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7062.212311 + 20 +13098.623281 + 30 +0.0 + 0 +ENDBLK + 5 +652 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D25 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D25 + 1 + + 0 +LINE + 5 +654 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +7063.212311 + 20 +13098.623281 + 30 +0.0 + 11 +7098.155279 + 21 +13098.623281 + 31 +0.0 + 0 +INSERT + 5 +655 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +7062.212311 + 20 +13098.623281 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +656 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +7099.155279 + 20 +13098.623281 + 30 +0.0 + 0 +TEXT + 5 +657 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +7139.613455 + 20 +13142.373281 + 30 +0.0 + 40 +87.5 + 1 +1 + 41 +0.75 + 72 + 1 + 11 +7150.550955 + 21 +13186.123281 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +658 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7062.212311 + 20 +12523.997349 + 30 +0.0 + 0 +POINT + 5 +659 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7099.155279 + 20 +12519.381932 + 30 +0.0 + 0 +POINT + 5 +65A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7099.155279 + 20 +13098.623281 + 30 +0.0 + 0 +ENDBLK + 5 +65B + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D26 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D26 + 1 + + 0 +LINE + 5 +65D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +6101.665062 + 20 +8884.916877 + 30 +0.0 + 11 +6140.572752 + 21 +8884.916877 + 31 +0.0 + 0 +INSERT + 5 +65E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +6100.665062 + 20 +8884.916877 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +65F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +6141.572752 + 20 +8884.916877 + 30 +0.0 + 0 +TEXT + 5 +660 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +6029.0625 + 20 +8928.666877 + 30 +0.0 + 40 +87.5 + 1 +1 + 41 +0.75 + 72 + 1 + 11 +6040.0 + 21 +8972.416877 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +661 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +6100.665062 + 20 +9555.000103 + 30 +0.0 + 0 +POINT + 5 +662 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +6141.572752 + 20 +9555.000103 + 30 +0.0 + 0 +POINT + 5 +663 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +6141.572752 + 20 +8884.916877 + 30 +0.0 + 0 +ENDBLK + 5 +664 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D27 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D27 + 1 + + 0 +LINE + 5 +666 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +7053.902997 + 20 +8884.916877 + 30 +0.0 + 11 +7090.53801 + 21 +8884.916877 + 31 +0.0 + 0 +INSERT + 5 +667 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +7052.902997 + 20 +8884.916877 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +668 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +7091.53801 + 20 +8884.916877 + 30 +0.0 + 0 +TEXT + 5 +669 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +7134.0625 + 20 +8928.666877 + 30 +0.0 + 40 +87.5 + 1 +1 + 41 +0.75 + 72 + 1 + 11 +7145.0 + 21 +8972.416877 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +66A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7052.902997 + 20 +9561.814406 + 30 +0.0 + 0 +POINT + 5 +66B + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7091.53801 + 20 +9555.000103 + 30 +0.0 + 0 +POINT + 5 +66C + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7091.53801 + 20 +8884.916877 + 30 +0.0 + 0 +ENDBLK + 5 +66D + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D28 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D28 + 1 + + 0 +LINE + 5 +66F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9369.023561 + 20 +11869.053132 + 30 +0.0 + 11 +9369.023561 + 21 +11931.267711 + 31 +0.0 + 0 +INSERT + 5 +670 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9369.023561 + 20 +11868.053132 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +671 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9369.023561 + 20 +11932.267711 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +672 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9325.273561 + 20 +11958.125 + 30 +0.0 + 40 +87.5 + 1 +2 + 50 +90.0 + 41 +0.75 + 72 + 1 + 11 +9281.523561 + 21 +11980.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +673 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8592.462088 + 20 +11868.053132 + 30 +0.0 + 0 +POINT + 5 +674 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8595.255445 + 20 +11932.267711 + 30 +0.0 + 0 +POINT + 5 +675 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9369.023561 + 20 +11932.267711 + 30 +0.0 + 0 +ENDBLK + 5 +676 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D29 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D29 + 1 + + 0 +LINE + 5 +678 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +7730.0 + 20 +11229.0 + 30 +0.0 + 11 +7730.0 + 21 +11146.0 + 31 +0.0 + 0 +INSERT + 5 +679 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +7730.0 + 20 +11230.0 + 30 +0.0 + 50 +90.0 + 0 +INSERT + 5 +67A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +7730.0 + 20 +11145.0 + 30 +0.0 + 50 +270.0 + 0 +TEXT + 5 +67B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +7686.25 + 20 +11165.625 + 30 +0.0 + 40 +87.5 + 1 +3 + 50 +90.0 + 41 +0.75 + 72 + 1 + 11 +7642.5 + 21 +11187.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +67C + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7055.0 + 20 +11230.0 + 30 +0.0 + 0 +POINT + 5 +67D + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7055.0 + 20 +11145.0 + 30 +0.0 + 0 +POINT + 5 +67E + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7730.0 + 20 +11145.0 + 30 +0.0 + 0 +ENDBLK + 5 +67F + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X30 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X30 + 1 + + 0 +LINE + 5 +681 + 8 +0 + 62 + 0 + 10 +6427.766953 + 20 +4660.0 + 30 +0.0 + 11 +6862.141953 + 21 +5094.375 + 31 +0.0 + 0 +LINE + 5 +682 + 8 +0 + 62 + 0 + 10 +6250.990258 + 20 +4660.0 + 30 +0.0 + 11 +6685.365258 + 21 +5094.375 + 31 +0.0 + 0 +LINE + 5 +683 + 8 +0 + 62 + 0 + 10 +6215.0 + 20 +4800.786438 + 30 +0.0 + 11 +6508.588562 + 21 +5094.375 + 31 +0.0 + 0 +LINE + 5 +684 + 8 +0 + 62 + 0 + 10 +6215.0 + 20 +4977.563133 + 30 +0.0 + 11 +6331.811867 + 21 +5094.375 + 31 +0.0 + 0 +LINE + 5 +685 + 8 +0 + 62 + 0 + 10 +6604.543648 + 20 +4660.0 + 30 +0.0 + 11 +7038.918648 + 21 +5094.375 + 31 +0.0 + 0 +LINE + 5 +686 + 8 +0 + 62 + 0 + 10 +6781.320344 + 20 +4660.0 + 30 +0.0 + 11 +7125.0 + 21 +5003.679656 + 31 +0.0 + 0 +LINE + 5 +687 + 8 +0 + 62 + 0 + 10 +6958.097039 + 20 +4660.0 + 30 +0.0 + 11 +7126.991073 + 21 +4828.894034 + 31 +0.0 + 0 +ENDBLK + 5 +688 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X31 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X31 + 1 + + 0 +LINE + 5 +68A + 8 +0 + 62 + 0 + 10 +7126.991073 + 20 +4871.392875 + 30 +0.0 + 11 +7140.625 + 21 +4871.392875 + 31 +0.0 + 0 +LINE + 5 +68B + 8 +0 + 62 + 0 + 10 +7171.875 + 20 +4871.392875 + 30 +0.0 + 11 +7187.5 + 21 +4871.392875 + 31 +0.0 + 0 +LINE + 5 +68C + 8 +0 + 62 + 0 + 10 +7148.4375 + 20 +4884.924522 + 30 +0.0 + 11 +7164.0625 + 21 +4884.924522 + 31 +0.0 + 0 +LINE + 5 +68D + 8 +0 + 62 + 0 + 10 +7126.991073 + 20 +4898.456169 + 30 +0.0 + 11 +7140.625 + 21 +4898.456169 + 31 +0.0 + 0 +LINE + 5 +68E + 8 +0 + 62 + 0 + 10 +7171.875 + 20 +4898.456169 + 30 +0.0 + 11 +7187.5 + 21 +4898.456169 + 31 +0.0 + 0 +LINE + 5 +68F + 8 +0 + 62 + 0 + 10 +7148.4375 + 20 +4911.987816 + 30 +0.0 + 11 +7164.0625 + 21 +4911.987816 + 31 +0.0 + 0 +LINE + 5 +690 + 8 +0 + 62 + 0 + 10 +7126.991073 + 20 +4925.519463 + 30 +0.0 + 11 +7140.625 + 21 +4925.519463 + 31 +0.0 + 0 +LINE + 5 +691 + 8 +0 + 62 + 0 + 10 +7171.875 + 20 +4925.519463 + 30 +0.0 + 11 +7187.5 + 21 +4925.519463 + 31 +0.0 + 0 +LINE + 5 +692 + 8 +0 + 62 + 0 + 10 +7148.4375 + 20 +4939.051109 + 30 +0.0 + 11 +7164.0625 + 21 +4939.051109 + 31 +0.0 + 0 +LINE + 5 +693 + 8 +0 + 62 + 0 + 10 +7126.991073 + 20 +4952.582756 + 30 +0.0 + 11 +7140.625 + 21 +4952.582756 + 31 +0.0 + 0 +LINE + 5 +694 + 8 +0 + 62 + 0 + 10 +7171.875 + 20 +4952.582756 + 30 +0.0 + 11 +7187.5 + 21 +4952.582756 + 31 +0.0 + 0 +LINE + 5 +695 + 8 +0 + 62 + 0 + 10 +7148.4375 + 20 +4857.861228 + 30 +0.0 + 11 +7164.0625 + 21 +4857.861228 + 31 +0.0 + 0 +LINE + 5 +696 + 8 +0 + 62 + 0 + 10 +7126.991073 + 20 +4844.329581 + 30 +0.0 + 11 +7140.625 + 21 +4844.329581 + 31 +0.0 + 0 +LINE + 5 +697 + 8 +0 + 62 + 0 + 10 +7171.875 + 20 +4844.329581 + 30 +0.0 + 11 +7187.5 + 21 +4844.329581 + 31 +0.0 + 0 +LINE + 5 +698 + 8 +0 + 62 + 0 + 10 +7148.4375 + 20 +4830.797934 + 30 +0.0 + 11 +7164.0625 + 21 +4830.797934 + 31 +0.0 + 0 +LINE + 5 +699 + 8 +0 + 62 + 0 + 10 +7126.991073 + 20 +4817.266288 + 30 +0.0 + 11 +7140.625 + 21 +4817.266288 + 31 +0.0 + 0 +LINE + 5 +69A + 8 +0 + 62 + 0 + 10 +7171.875 + 20 +4817.266288 + 30 +0.0 + 11 +7187.5 + 21 +4817.266288 + 31 +0.0 + 0 +LINE + 5 +69B + 8 +0 + 62 + 0 + 10 +7148.4375 + 20 +4803.734641 + 30 +0.0 + 11 +7164.0625 + 21 +4803.734641 + 31 +0.0 + 0 +LINE + 5 +69C + 8 +0 + 62 + 0 + 10 +7190.160691 + 20 +4812.657781 + 30 +0.0 + 11 +7187.499967 + 21 +4817.26629 + 31 +0.0 + 0 +LINE + 5 +69D + 8 +0 + 62 + 0 + 10 +7171.874967 + 20 +4844.329584 + 30 +0.0 + 11 +7164.062467 + 21 +4857.86123 + 31 +0.0 + 0 +LINE + 5 +69E + 8 +0 + 62 + 0 + 10 +7148.437467 + 20 +4884.924524 + 30 +0.0 + 11 +7140.624967 + 21 +4898.456171 + 31 +0.0 + 0 +LINE + 5 +69F + 8 +0 + 62 + 0 + 10 +7171.874967 + 20 +4817.26629 + 30 +0.0 + 11 +7164.062467 + 21 +4830.797937 + 31 +0.0 + 0 +LINE + 5 +6A0 + 8 +0 + 62 + 0 + 10 +7148.437467 + 20 +4857.861231 + 30 +0.0 + 11 +7140.624967 + 21 +4871.392877 + 31 +0.0 + 0 +LINE + 5 +6A1 + 8 +0 + 62 + 0 + 10 +7169.105416 + 20 +4795.0 + 30 +0.0 + 11 +7164.062467 + 21 +4803.734643 + 31 +0.0 + 0 +LINE + 5 +6A2 + 8 +0 + 62 + 0 + 10 +7148.437467 + 20 +4830.797937 + 30 +0.0 + 11 +7140.624967 + 21 +4844.329584 + 31 +0.0 + 0 +LINE + 5 +6A3 + 8 +0 + 62 + 0 + 10 +7148.437467 + 20 +4803.734643 + 30 +0.0 + 11 +7140.624967 + 21 +4817.26629 + 31 +0.0 + 0 +LINE + 5 +6A4 + 8 +0 + 62 + 0 + 10 +7190.403153 + 20 +4839.301118 + 30 +0.0 + 11 +7187.499967 + 21 +4844.329584 + 31 +0.0 + 0 +LINE + 5 +6A5 + 8 +0 + 62 + 0 + 10 +7171.874967 + 20 +4871.392877 + 30 +0.0 + 11 +7164.062467 + 21 +4884.924524 + 31 +0.0 + 0 +LINE + 5 +6A6 + 8 +0 + 62 + 0 + 10 +7148.437467 + 20 +4911.987818 + 30 +0.0 + 11 +7140.624967 + 21 +4925.519465 + 31 +0.0 + 0 +LINE + 5 +6A7 + 8 +0 + 62 + 0 + 10 +7190.645615 + 20 +4865.944455 + 30 +0.0 + 11 +7187.499967 + 21 +4871.392877 + 31 +0.0 + 0 +LINE + 5 +6A8 + 8 +0 + 62 + 0 + 10 +7171.874967 + 20 +4898.456171 + 30 +0.0 + 11 +7164.062467 + 21 +4911.987818 + 31 +0.0 + 0 +LINE + 5 +6A9 + 8 +0 + 62 + 0 + 10 +7148.437467 + 20 +4939.051112 + 30 +0.0 + 11 +7140.624967 + 21 +4952.582759 + 31 +0.0 + 0 +LINE + 5 +6AA + 8 +0 + 62 + 0 + 10 +7190.888077 + 20 +4892.587792 + 30 +0.0 + 11 +7187.499967 + 21 +4898.456171 + 31 +0.0 + 0 +LINE + 5 +6AB + 8 +0 + 62 + 0 + 10 +7171.874967 + 20 +4925.519465 + 30 +0.0 + 11 +7164.062467 + 21 +4939.051112 + 31 +0.0 + 0 +LINE + 5 +6AC + 8 +0 + 62 + 0 + 10 +7191.130539 + 20 +4919.23113 + 30 +0.0 + 11 +7187.499967 + 21 +4925.519465 + 31 +0.0 + 0 +LINE + 5 +6AD + 8 +0 + 62 + 0 + 10 +7171.874967 + 20 +4952.582759 + 30 +0.0 + 11 +7167.80649 + 21 +4959.629568 + 31 +0.0 + 0 +LINE + 5 +6AE + 8 +0 + 62 + 0 + 10 +7191.373001 + 20 +4945.874467 + 30 +0.0 + 11 +7187.499967 + 21 +4952.582759 + 31 +0.0 + 0 +LINE + 5 +6AF + 8 +0 + 62 + 0 + 10 +7140.624986 + 20 +4871.392904 + 30 +0.0 + 11 +7148.437486 + 21 +4884.924551 + 31 +0.0 + 0 +LINE + 5 +6B0 + 8 +0 + 62 + 0 + 10 +7164.062486 + 20 +4911.987845 + 30 +0.0 + 11 +7171.874986 + 21 +4925.519492 + 31 +0.0 + 0 +LINE + 5 +6B1 + 8 +0 + 62 + 0 + 10 +7187.499986 + 20 +4952.582786 + 30 +0.0 + 11 +7191.497051 + 21 +4959.505907 + 31 +0.0 + 0 +LINE + 5 +6B2 + 8 +0 + 62 + 0 + 10 +7140.624986 + 20 +4898.456198 + 30 +0.0 + 11 +7148.437486 + 21 +4911.987845 + 31 +0.0 + 0 +LINE + 5 +6B3 + 8 +0 + 62 + 0 + 10 +7164.062486 + 20 +4939.051139 + 30 +0.0 + 11 +7171.874986 + 21 +4952.582786 + 31 +0.0 + 0 +LINE + 5 +6B4 + 8 +0 + 62 + 0 + 10 +7140.624986 + 20 +4925.519492 + 30 +0.0 + 11 +7148.437486 + 21 +4939.051139 + 31 +0.0 + 0 +LINE + 5 +6B5 + 8 +0 + 62 + 0 + 10 +7140.624986 + 20 +4952.582786 + 30 +0.0 + 11 +7144.693448 + 21 +4959.629568 + 31 +0.0 + 0 +LINE + 5 +6B6 + 8 +0 + 62 + 0 + 10 +7140.624986 + 20 +4844.329611 + 30 +0.0 + 11 +7148.437486 + 21 +4857.861258 + 31 +0.0 + 0 +LINE + 5 +6B7 + 8 +0 + 62 + 0 + 10 +7164.062486 + 20 +4884.924551 + 30 +0.0 + 11 +7171.874986 + 21 +4898.456198 + 31 +0.0 + 0 +LINE + 5 +6B8 + 8 +0 + 62 + 0 + 10 +7187.499986 + 20 +4925.519492 + 30 +0.0 + 11 +7191.246824 + 21 +4932.009206 + 31 +0.0 + 0 +LINE + 5 +6B9 + 8 +0 + 62 + 0 + 10 +7140.624986 + 20 +4817.266317 + 30 +0.0 + 11 +7148.437486 + 21 +4830.797964 + 31 +0.0 + 0 +LINE + 5 +6BA + 8 +0 + 62 + 0 + 10 +7164.062486 + 20 +4857.861258 + 30 +0.0 + 11 +7171.874986 + 21 +4871.392905 + 31 +0.0 + 0 +LINE + 5 +6BB + 8 +0 + 62 + 0 + 10 +7187.499986 + 20 +4898.456198 + 30 +0.0 + 11 +7190.996596 + 21 +4904.512504 + 31 +0.0 + 0 +LINE + 5 +6BC + 8 +0 + 62 + 0 + 10 +7143.394522 + 20 +4795.0 + 30 +0.0 + 11 +7148.437486 + 21 +4803.73467 + 31 +0.0 + 0 +LINE + 5 +6BD + 8 +0 + 62 + 0 + 10 +7164.062486 + 20 +4830.797964 + 30 +0.0 + 11 +7171.874986 + 21 +4844.329611 + 31 +0.0 + 0 +LINE + 5 +6BE + 8 +0 + 62 + 0 + 10 +7187.499986 + 20 +4871.392905 + 30 +0.0 + 11 +7190.746368 + 21 +4877.015803 + 31 +0.0 + 0 +LINE + 5 +6BF + 8 +0 + 62 + 0 + 10 +7164.062486 + 20 +4803.73467 + 30 +0.0 + 11 +7171.874986 + 21 +4817.266317 + 31 +0.0 + 0 +LINE + 5 +6C0 + 8 +0 + 62 + 0 + 10 +7187.499986 + 20 +4844.329611 + 30 +0.0 + 11 +7190.49614 + 21 +4849.519102 + 31 +0.0 + 0 +LINE + 5 +6C1 + 8 +0 + 62 + 0 + 10 +7187.499986 + 20 +4817.266317 + 30 +0.0 + 11 +7190.245912 + 21 +4822.0224 + 31 +0.0 + 0 +ENDBLK + 5 +6C2 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X32 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X32 + 1 + + 0 +LINE + 5 +6C4 + 8 +0 + 62 + 0 + 10 +7162.5 + 20 +4698.187795 + 30 +0.0 + 11 +7187.5 + 21 +4698.187795 + 31 +0.0 + 0 +LINE + 5 +6C5 + 8 +0 + 62 + 0 + 10 +7237.5 + 20 +4698.187795 + 30 +0.0 + 11 +7262.5 + 21 +4698.187795 + 31 +0.0 + 0 +LINE + 5 +6C6 + 8 +0 + 62 + 0 + 10 +7312.5 + 20 +4698.187795 + 30 +0.0 + 11 +7337.5 + 21 +4698.187795 + 31 +0.0 + 0 +LINE + 5 +6C7 + 8 +0 + 62 + 0 + 10 +7387.5 + 20 +4698.187795 + 30 +0.0 + 11 +7412.5 + 21 +4698.187795 + 31 +0.0 + 0 +LINE + 5 +6C8 + 8 +0 + 62 + 0 + 10 +7462.5 + 20 +4698.187795 + 30 +0.0 + 11 +7487.5 + 21 +4698.187795 + 31 +0.0 + 0 +LINE + 5 +6C9 + 8 +0 + 62 + 0 + 10 +7537.5 + 20 +4698.187795 + 30 +0.0 + 11 +7562.5 + 21 +4698.187795 + 31 +0.0 + 0 +LINE + 5 +6CA + 8 +0 + 62 + 0 + 10 +7612.5 + 20 +4698.187795 + 30 +0.0 + 11 +7637.5 + 21 +4698.187795 + 31 +0.0 + 0 +LINE + 5 +6CB + 8 +0 + 62 + 0 + 10 +7687.5 + 20 +4698.187795 + 30 +0.0 + 11 +7712.5 + 21 +4698.187795 + 31 +0.0 + 0 +LINE + 5 +6CC + 8 +0 + 62 + 0 + 10 +7762.5 + 20 +4698.187795 + 30 +0.0 + 11 +7787.5 + 21 +4698.187795 + 31 +0.0 + 0 +LINE + 5 +6CD + 8 +0 + 62 + 0 + 10 +7837.5 + 20 +4698.187795 + 30 +0.0 + 11 +7862.5 + 21 +4698.187795 + 31 +0.0 + 0 +LINE + 5 +6CE + 8 +0 + 62 + 0 + 10 +7912.5 + 20 +4698.187795 + 30 +0.0 + 11 +7937.5 + 21 +4698.187795 + 31 +0.0 + 0 +LINE + 5 +6CF + 8 +0 + 62 + 0 + 10 +7987.5 + 20 +4698.187795 + 30 +0.0 + 11 +8012.5 + 21 +4698.187795 + 31 +0.0 + 0 +LINE + 5 +6D0 + 8 +0 + 62 + 0 + 10 +8062.5 + 20 +4698.187795 + 30 +0.0 + 11 +8087.5 + 21 +4698.187795 + 31 +0.0 + 0 +LINE + 5 +6D1 + 8 +0 + 62 + 0 + 10 +8137.5 + 20 +4698.187795 + 30 +0.0 + 11 +8162.5 + 21 +4698.187795 + 31 +0.0 + 0 +LINE + 5 +6D2 + 8 +0 + 62 + 0 + 10 +8212.5 + 20 +4698.187795 + 30 +0.0 + 11 +8237.5 + 21 +4698.187795 + 31 +0.0 + 0 +LINE + 5 +6D3 + 8 +0 + 62 + 0 + 10 +8287.5 + 20 +4698.187795 + 30 +0.0 + 11 +8312.5 + 21 +4698.187795 + 31 +0.0 + 0 +LINE + 5 +6D4 + 8 +0 + 62 + 0 + 10 +8362.5 + 20 +4698.187795 + 30 +0.0 + 11 +8387.5 + 21 +4698.187795 + 31 +0.0 + 0 +LINE + 5 +6D5 + 8 +0 + 62 + 0 + 10 +8437.5 + 20 +4698.187795 + 30 +0.0 + 11 +8462.5 + 21 +4698.187795 + 31 +0.0 + 0 +LINE + 5 +6D6 + 8 +0 + 62 + 0 + 10 +8512.5 + 20 +4698.187795 + 30 +0.0 + 11 +8537.5 + 21 +4698.187795 + 31 +0.0 + 0 +LINE + 5 +6D7 + 8 +0 + 62 + 0 + 10 +7200.0 + 20 +4719.83843 + 30 +0.0 + 11 +7225.0 + 21 +4719.83843 + 31 +0.0 + 0 +LINE + 5 +6D8 + 8 +0 + 62 + 0 + 10 +7275.0 + 20 +4719.83843 + 30 +0.0 + 11 +7300.0 + 21 +4719.83843 + 31 +0.0 + 0 +LINE + 5 +6D9 + 8 +0 + 62 + 0 + 10 +7350.0 + 20 +4719.83843 + 30 +0.0 + 11 +7375.0 + 21 +4719.83843 + 31 +0.0 + 0 +LINE + 5 +6DA + 8 +0 + 62 + 0 + 10 +7425.0 + 20 +4719.83843 + 30 +0.0 + 11 +7450.0 + 21 +4719.83843 + 31 +0.0 + 0 +LINE + 5 +6DB + 8 +0 + 62 + 0 + 10 +7500.0 + 20 +4719.83843 + 30 +0.0 + 11 +7525.0 + 21 +4719.83843 + 31 +0.0 + 0 +LINE + 5 +6DC + 8 +0 + 62 + 0 + 10 +7575.0 + 20 +4719.83843 + 30 +0.0 + 11 +7600.0 + 21 +4719.83843 + 31 +0.0 + 0 +LINE + 5 +6DD + 8 +0 + 62 + 0 + 10 +7650.0 + 20 +4719.83843 + 30 +0.0 + 11 +7675.0 + 21 +4719.83843 + 31 +0.0 + 0 +LINE + 5 +6DE + 8 +0 + 62 + 0 + 10 +7725.0 + 20 +4719.83843 + 30 +0.0 + 11 +7750.0 + 21 +4719.83843 + 31 +0.0 + 0 +LINE + 5 +6DF + 8 +0 + 62 + 0 + 10 +7800.0 + 20 +4719.83843 + 30 +0.0 + 11 +7825.0 + 21 +4719.83843 + 31 +0.0 + 0 +LINE + 5 +6E0 + 8 +0 + 62 + 0 + 10 +7875.0 + 20 +4719.83843 + 30 +0.0 + 11 +7900.0 + 21 +4719.83843 + 31 +0.0 + 0 +LINE + 5 +6E1 + 8 +0 + 62 + 0 + 10 +7950.0 + 20 +4719.83843 + 30 +0.0 + 11 +7975.0 + 21 +4719.83843 + 31 +0.0 + 0 +LINE + 5 +6E2 + 8 +0 + 62 + 0 + 10 +8025.0 + 20 +4719.83843 + 30 +0.0 + 11 +8050.0 + 21 +4719.83843 + 31 +0.0 + 0 +LINE + 5 +6E3 + 8 +0 + 62 + 0 + 10 +8100.0 + 20 +4719.83843 + 30 +0.0 + 11 +8125.0 + 21 +4719.83843 + 31 +0.0 + 0 +LINE + 5 +6E4 + 8 +0 + 62 + 0 + 10 +8175.0 + 20 +4719.83843 + 30 +0.0 + 11 +8200.0 + 21 +4719.83843 + 31 +0.0 + 0 +LINE + 5 +6E5 + 8 +0 + 62 + 0 + 10 +8250.0 + 20 +4719.83843 + 30 +0.0 + 11 +8275.0 + 21 +4719.83843 + 31 +0.0 + 0 +LINE + 5 +6E6 + 8 +0 + 62 + 0 + 10 +8325.0 + 20 +4719.83843 + 30 +0.0 + 11 +8350.0 + 21 +4719.83843 + 31 +0.0 + 0 +LINE + 5 +6E7 + 8 +0 + 62 + 0 + 10 +8400.0 + 20 +4719.83843 + 30 +0.0 + 11 +8425.0 + 21 +4719.83843 + 31 +0.0 + 0 +LINE + 5 +6E8 + 8 +0 + 62 + 0 + 10 +8475.0 + 20 +4719.83843 + 30 +0.0 + 11 +8500.0 + 21 +4719.83843 + 31 +0.0 + 0 +LINE + 5 +6E9 + 8 +0 + 62 + 0 + 10 +8550.0 + 20 +4719.83843 + 30 +0.0 + 11 +8565.0 + 21 +4719.83843 + 31 +0.0 + 0 +LINE + 5 +6EA + 8 +0 + 62 + 0 + 10 +7162.5 + 20 +4741.489065 + 30 +0.0 + 11 +7187.5 + 21 +4741.489065 + 31 +0.0 + 0 +LINE + 5 +6EB + 8 +0 + 62 + 0 + 10 +7237.5 + 20 +4741.489065 + 30 +0.0 + 11 +7262.5 + 21 +4741.489065 + 31 +0.0 + 0 +LINE + 5 +6EC + 8 +0 + 62 + 0 + 10 +7312.5 + 20 +4741.489065 + 30 +0.0 + 11 +7337.5 + 21 +4741.489065 + 31 +0.0 + 0 +LINE + 5 +6ED + 8 +0 + 62 + 0 + 10 +7387.5 + 20 +4741.489065 + 30 +0.0 + 11 +7412.5 + 21 +4741.489065 + 31 +0.0 + 0 +LINE + 5 +6EE + 8 +0 + 62 + 0 + 10 +7462.5 + 20 +4741.489065 + 30 +0.0 + 11 +7487.5 + 21 +4741.489065 + 31 +0.0 + 0 +LINE + 5 +6EF + 8 +0 + 62 + 0 + 10 +7537.5 + 20 +4741.489065 + 30 +0.0 + 11 +7562.5 + 21 +4741.489065 + 31 +0.0 + 0 +LINE + 5 +6F0 + 8 +0 + 62 + 0 + 10 +7612.5 + 20 +4741.489065 + 30 +0.0 + 11 +7637.5 + 21 +4741.489065 + 31 +0.0 + 0 +LINE + 5 +6F1 + 8 +0 + 62 + 0 + 10 +7687.5 + 20 +4741.489065 + 30 +0.0 + 11 +7712.5 + 21 +4741.489065 + 31 +0.0 + 0 +LINE + 5 +6F2 + 8 +0 + 62 + 0 + 10 +7762.5 + 20 +4741.489065 + 30 +0.0 + 11 +7787.5 + 21 +4741.489065 + 31 +0.0 + 0 +LINE + 5 +6F3 + 8 +0 + 62 + 0 + 10 +7837.5 + 20 +4741.489065 + 30 +0.0 + 11 +7862.5 + 21 +4741.489065 + 31 +0.0 + 0 +LINE + 5 +6F4 + 8 +0 + 62 + 0 + 10 +7912.5 + 20 +4741.489065 + 30 +0.0 + 11 +7937.5 + 21 +4741.489065 + 31 +0.0 + 0 +LINE + 5 +6F5 + 8 +0 + 62 + 0 + 10 +7987.5 + 20 +4741.489065 + 30 +0.0 + 11 +8012.5 + 21 +4741.489065 + 31 +0.0 + 0 +LINE + 5 +6F6 + 8 +0 + 62 + 0 + 10 +8062.5 + 20 +4741.489065 + 30 +0.0 + 11 +8087.5 + 21 +4741.489065 + 31 +0.0 + 0 +LINE + 5 +6F7 + 8 +0 + 62 + 0 + 10 +8137.5 + 20 +4741.489065 + 30 +0.0 + 11 +8162.5 + 21 +4741.489065 + 31 +0.0 + 0 +LINE + 5 +6F8 + 8 +0 + 62 + 0 + 10 +8212.5 + 20 +4741.489065 + 30 +0.0 + 11 +8237.5 + 21 +4741.489065 + 31 +0.0 + 0 +LINE + 5 +6F9 + 8 +0 + 62 + 0 + 10 +8287.5 + 20 +4741.489065 + 30 +0.0 + 11 +8312.5 + 21 +4741.489065 + 31 +0.0 + 0 +LINE + 5 +6FA + 8 +0 + 62 + 0 + 10 +8362.5 + 20 +4741.489065 + 30 +0.0 + 11 +8387.5 + 21 +4741.489065 + 31 +0.0 + 0 +LINE + 5 +6FB + 8 +0 + 62 + 0 + 10 +8437.5 + 20 +4741.489065 + 30 +0.0 + 11 +8462.5 + 21 +4741.489065 + 31 +0.0 + 0 +LINE + 5 +6FC + 8 +0 + 62 + 0 + 10 +8512.5 + 20 +4741.489065 + 30 +0.0 + 11 +8537.5 + 21 +4741.489065 + 31 +0.0 + 0 +LINE + 5 +6FD + 8 +0 + 62 + 0 + 10 +7200.0 + 20 +4676.53716 + 30 +0.0 + 11 +7225.0 + 21 +4676.53716 + 31 +0.0 + 0 +LINE + 5 +6FE + 8 +0 + 62 + 0 + 10 +7275.0 + 20 +4676.53716 + 30 +0.0 + 11 +7300.0 + 21 +4676.53716 + 31 +0.0 + 0 +LINE + 5 +6FF + 8 +0 + 62 + 0 + 10 +7350.0 + 20 +4676.53716 + 30 +0.0 + 11 +7375.0 + 21 +4676.53716 + 31 +0.0 + 0 +LINE + 5 +700 + 8 +0 + 62 + 0 + 10 +7425.0 + 20 +4676.53716 + 30 +0.0 + 11 +7450.0 + 21 +4676.53716 + 31 +0.0 + 0 +LINE + 5 +701 + 8 +0 + 62 + 0 + 10 +7500.0 + 20 +4676.53716 + 30 +0.0 + 11 +7525.0 + 21 +4676.53716 + 31 +0.0 + 0 +LINE + 5 +702 + 8 +0 + 62 + 0 + 10 +7575.0 + 20 +4676.53716 + 30 +0.0 + 11 +7600.0 + 21 +4676.53716 + 31 +0.0 + 0 +LINE + 5 +703 + 8 +0 + 62 + 0 + 10 +7650.0 + 20 +4676.53716 + 30 +0.0 + 11 +7675.0 + 21 +4676.53716 + 31 +0.0 + 0 +LINE + 5 +704 + 8 +0 + 62 + 0 + 10 +7725.0 + 20 +4676.53716 + 30 +0.0 + 11 +7750.0 + 21 +4676.53716 + 31 +0.0 + 0 +LINE + 5 +705 + 8 +0 + 62 + 0 + 10 +7800.0 + 20 +4676.53716 + 30 +0.0 + 11 +7825.0 + 21 +4676.53716 + 31 +0.0 + 0 +LINE + 5 +706 + 8 +0 + 62 + 0 + 10 +7875.0 + 20 +4676.53716 + 30 +0.0 + 11 +7900.0 + 21 +4676.53716 + 31 +0.0 + 0 +LINE + 5 +707 + 8 +0 + 62 + 0 + 10 +7950.0 + 20 +4676.53716 + 30 +0.0 + 11 +7975.0 + 21 +4676.53716 + 31 +0.0 + 0 +LINE + 5 +708 + 8 +0 + 62 + 0 + 10 +8025.0 + 20 +4676.53716 + 30 +0.0 + 11 +8050.0 + 21 +4676.53716 + 31 +0.0 + 0 +LINE + 5 +709 + 8 +0 + 62 + 0 + 10 +8100.0 + 20 +4676.53716 + 30 +0.0 + 11 +8125.0 + 21 +4676.53716 + 31 +0.0 + 0 +LINE + 5 +70A + 8 +0 + 62 + 0 + 10 +8175.0 + 20 +4676.53716 + 30 +0.0 + 11 +8200.0 + 21 +4676.53716 + 31 +0.0 + 0 +LINE + 5 +70B + 8 +0 + 62 + 0 + 10 +8250.0 + 20 +4676.53716 + 30 +0.0 + 11 +8275.0 + 21 +4676.53716 + 31 +0.0 + 0 +LINE + 5 +70C + 8 +0 + 62 + 0 + 10 +8325.0 + 20 +4676.53716 + 30 +0.0 + 11 +8350.0 + 21 +4676.53716 + 31 +0.0 + 0 +LINE + 5 +70D + 8 +0 + 62 + 0 + 10 +8400.0 + 20 +4676.53716 + 30 +0.0 + 11 +8425.0 + 21 +4676.53716 + 31 +0.0 + 0 +LINE + 5 +70E + 8 +0 + 62 + 0 + 10 +8475.0 + 20 +4676.53716 + 30 +0.0 + 11 +8500.0 + 21 +4676.53716 + 31 +0.0 + 0 +LINE + 5 +70F + 8 +0 + 62 + 0 + 10 +8550.0 + 20 +4676.53716 + 30 +0.0 + 11 +8565.0 + 21 +4676.53716 + 31 +0.0 + 0 +LINE + 5 +710 + 8 +0 + 62 + 0 + 10 +7874.999965 + 20 +4676.53716 + 30 +0.0 + 11 +7862.499965 + 21 +4698.187796 + 31 +0.0 + 0 +LINE + 5 +711 + 8 +0 + 62 + 0 + 10 +7837.499965 + 20 +4741.489066 + 30 +0.0 + 11 +7829.699424 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +712 + 8 +0 + 62 + 0 + 10 +7837.499965 + 20 +4698.187796 + 30 +0.0 + 11 +7824.999965 + 21 +4719.838431 + 31 +0.0 + 0 +LINE + 5 +713 + 8 +0 + 62 + 0 + 10 +7834.5477 + 20 +4660.0 + 30 +0.0 + 11 +7824.999966 + 21 +4676.537161 + 31 +0.0 + 0 +LINE + 5 +714 + 8 +0 + 62 + 0 + 10 +7799.999966 + 20 +4719.838431 + 30 +0.0 + 11 +7787.499966 + 21 +4741.489066 + 31 +0.0 + 0 +LINE + 5 +715 + 8 +0 + 62 + 0 + 10 +7799.999966 + 20 +4676.537161 + 30 +0.0 + 11 +7787.499966 + 21 +4698.187796 + 31 +0.0 + 0 +LINE + 5 +716 + 8 +0 + 62 + 0 + 10 +7762.499966 + 20 +4741.489066 + 30 +0.0 + 11 +7754.699424 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +717 + 8 +0 + 62 + 0 + 10 +7762.499966 + 20 +4698.187796 + 30 +0.0 + 11 +7749.999966 + 21 +4719.838431 + 31 +0.0 + 0 +LINE + 5 +718 + 8 +0 + 62 + 0 + 10 +7759.5477 + 20 +4660.0 + 30 +0.0 + 11 +7749.999966 + 21 +4676.537161 + 31 +0.0 + 0 +LINE + 5 +719 + 8 +0 + 62 + 0 + 10 +7724.999966 + 20 +4719.838431 + 30 +0.0 + 11 +7712.499966 + 21 +4741.489066 + 31 +0.0 + 0 +LINE + 5 +71A + 8 +0 + 62 + 0 + 10 +7724.999966 + 20 +4676.537161 + 30 +0.0 + 11 +7712.499966 + 21 +4698.187796 + 31 +0.0 + 0 +LINE + 5 +71B + 8 +0 + 62 + 0 + 10 +7687.499966 + 20 +4741.489066 + 30 +0.0 + 11 +7679.699424 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +71C + 8 +0 + 62 + 0 + 10 +7687.499966 + 20 +4698.187796 + 30 +0.0 + 11 +7674.999966 + 21 +4719.838431 + 31 +0.0 + 0 +LINE + 5 +71D + 8 +0 + 62 + 0 + 10 +7684.5477 + 20 +4660.0 + 30 +0.0 + 11 +7674.999966 + 21 +4676.537161 + 31 +0.0 + 0 +LINE + 5 +71E + 8 +0 + 62 + 0 + 10 +7649.999966 + 20 +4719.838431 + 30 +0.0 + 11 +7637.499966 + 21 +4741.489066 + 31 +0.0 + 0 +LINE + 5 +71F + 8 +0 + 62 + 0 + 10 +7649.999966 + 20 +4676.537161 + 30 +0.0 + 11 +7637.499966 + 21 +4698.187796 + 31 +0.0 + 0 +LINE + 5 +720 + 8 +0 + 62 + 0 + 10 +7612.499966 + 20 +4741.489066 + 30 +0.0 + 11 +7604.699425 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +721 + 8 +0 + 62 + 0 + 10 +7612.499966 + 20 +4698.187796 + 30 +0.0 + 11 +7599.999966 + 21 +4719.838431 + 31 +0.0 + 0 +LINE + 5 +722 + 8 +0 + 62 + 0 + 10 +7609.547701 + 20 +4660.0 + 30 +0.0 + 11 +7599.999966 + 21 +4676.537161 + 31 +0.0 + 0 +LINE + 5 +723 + 8 +0 + 62 + 0 + 10 +7574.999966 + 20 +4719.838431 + 30 +0.0 + 11 +7562.499966 + 21 +4741.489066 + 31 +0.0 + 0 +LINE + 5 +724 + 8 +0 + 62 + 0 + 10 +7574.999966 + 20 +4676.537161 + 30 +0.0 + 11 +7562.499966 + 21 +4698.187796 + 31 +0.0 + 0 +LINE + 5 +725 + 8 +0 + 62 + 0 + 10 +7537.499966 + 20 +4741.489066 + 30 +0.0 + 11 +7529.699425 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +726 + 8 +0 + 62 + 0 + 10 +7537.499966 + 20 +4698.187796 + 30 +0.0 + 11 +7524.999966 + 21 +4719.838431 + 31 +0.0 + 0 +LINE + 5 +727 + 8 +0 + 62 + 0 + 10 +7534.547701 + 20 +4660.0 + 30 +0.0 + 11 +7524.999966 + 21 +4676.537161 + 31 +0.0 + 0 +LINE + 5 +728 + 8 +0 + 62 + 0 + 10 +7499.999966 + 20 +4719.838431 + 30 +0.0 + 11 +7487.499966 + 21 +4741.489066 + 31 +0.0 + 0 +LINE + 5 +729 + 8 +0 + 62 + 0 + 10 +7499.999967 + 20 +4676.537161 + 30 +0.0 + 11 +7487.499967 + 21 +4698.187796 + 31 +0.0 + 0 +LINE + 5 +72A + 8 +0 + 62 + 0 + 10 +7462.499967 + 20 +4741.489066 + 30 +0.0 + 11 +7454.699425 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +72B + 8 +0 + 62 + 0 + 10 +7462.499967 + 20 +4698.187796 + 30 +0.0 + 11 +7449.999967 + 21 +4719.838431 + 31 +0.0 + 0 +LINE + 5 +72C + 8 +0 + 62 + 0 + 10 +7459.547701 + 20 +4660.0 + 30 +0.0 + 11 +7449.999967 + 21 +4676.537161 + 31 +0.0 + 0 +LINE + 5 +72D + 8 +0 + 62 + 0 + 10 +7424.999967 + 20 +4719.838431 + 30 +0.0 + 11 +7412.499967 + 21 +4741.489067 + 31 +0.0 + 0 +LINE + 5 +72E + 8 +0 + 62 + 0 + 10 +7424.999967 + 20 +4676.537161 + 30 +0.0 + 11 +7412.499967 + 21 +4698.187796 + 31 +0.0 + 0 +LINE + 5 +72F + 8 +0 + 62 + 0 + 10 +7387.499967 + 20 +4741.489067 + 30 +0.0 + 11 +7379.699426 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +730 + 8 +0 + 62 + 0 + 10 +7387.499967 + 20 +4698.187796 + 30 +0.0 + 11 +7374.999967 + 21 +4719.838432 + 31 +0.0 + 0 +LINE + 5 +731 + 8 +0 + 62 + 0 + 10 +7384.547702 + 20 +4660.0 + 30 +0.0 + 11 +7374.999967 + 21 +4676.537161 + 31 +0.0 + 0 +LINE + 5 +732 + 8 +0 + 62 + 0 + 10 +7349.999967 + 20 +4719.838432 + 30 +0.0 + 11 +7337.499967 + 21 +4741.489067 + 31 +0.0 + 0 +LINE + 5 +733 + 8 +0 + 62 + 0 + 10 +7349.999967 + 20 +4676.537161 + 30 +0.0 + 11 +7337.499967 + 21 +4698.187797 + 31 +0.0 + 0 +LINE + 5 +734 + 8 +0 + 62 + 0 + 10 +7312.499967 + 20 +4741.489067 + 30 +0.0 + 11 +7304.699426 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +735 + 8 +0 + 62 + 0 + 10 +7312.499967 + 20 +4698.187797 + 30 +0.0 + 11 +7299.999967 + 21 +4719.838432 + 31 +0.0 + 0 +LINE + 5 +736 + 8 +0 + 62 + 0 + 10 +7309.547702 + 20 +4660.0 + 30 +0.0 + 11 +7299.999967 + 21 +4676.537162 + 31 +0.0 + 0 +LINE + 5 +737 + 8 +0 + 62 + 0 + 10 +7274.999967 + 20 +4719.838432 + 30 +0.0 + 11 +7262.499967 + 21 +4741.489067 + 31 +0.0 + 0 +LINE + 5 +738 + 8 +0 + 62 + 0 + 10 +7274.999967 + 20 +4676.537162 + 30 +0.0 + 11 +7262.499967 + 21 +4698.187797 + 31 +0.0 + 0 +LINE + 5 +739 + 8 +0 + 62 + 0 + 10 +7237.499967 + 20 +4741.489067 + 30 +0.0 + 11 +7229.699426 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +73A + 8 +0 + 62 + 0 + 10 +7237.499967 + 20 +4698.187797 + 30 +0.0 + 11 +7224.999967 + 21 +4719.838432 + 31 +0.0 + 0 +LINE + 5 +73B + 8 +0 + 62 + 0 + 10 +7234.547702 + 20 +4660.0 + 30 +0.0 + 11 +7224.999967 + 21 +4676.537162 + 31 +0.0 + 0 +LINE + 5 +73C + 8 +0 + 62 + 0 + 10 +7199.999967 + 20 +4719.838432 + 30 +0.0 + 11 +7187.499967 + 21 +4741.489067 + 31 +0.0 + 0 +LINE + 5 +73D + 8 +0 + 62 + 0 + 10 +7199.999968 + 20 +4676.537162 + 30 +0.0 + 11 +7187.499968 + 21 +4698.187797 + 31 +0.0 + 0 +LINE + 5 +73E + 8 +0 + 62 + 0 + 10 +7162.499968 + 20 +4741.489067 + 30 +0.0 + 11 +7160.0 + 21 +4745.819138 + 31 +0.0 + 0 +LINE + 5 +73F + 8 +0 + 62 + 0 + 10 +7162.499968 + 20 +4698.187797 + 30 +0.0 + 11 +7160.0 + 21 +4702.517868 + 31 +0.0 + 0 +LINE + 5 +740 + 8 +0 + 62 + 0 + 10 +7909.547699 + 20 +4660.0 + 30 +0.0 + 11 +7899.999965 + 21 +4676.53716 + 31 +0.0 + 0 +LINE + 5 +741 + 8 +0 + 62 + 0 + 10 +7874.999965 + 20 +4719.838431 + 30 +0.0 + 11 +7862.499965 + 21 +4741.489066 + 31 +0.0 + 0 +LINE + 5 +742 + 8 +0 + 62 + 0 + 10 +7912.499965 + 20 +4698.187795 + 30 +0.0 + 11 +7899.999965 + 21 +4719.838431 + 31 +0.0 + 0 +LINE + 5 +743 + 8 +0 + 62 + 0 + 10 +7949.999965 + 20 +4676.53716 + 30 +0.0 + 11 +7937.499965 + 21 +4698.187795 + 31 +0.0 + 0 +LINE + 5 +744 + 8 +0 + 62 + 0 + 10 +7912.499965 + 20 +4741.489066 + 30 +0.0 + 11 +7904.699423 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +745 + 8 +0 + 62 + 0 + 10 +7984.547699 + 20 +4660.0 + 30 +0.0 + 11 +7974.999965 + 21 +4676.53716 + 31 +0.0 + 0 +LINE + 5 +746 + 8 +0 + 62 + 0 + 10 +7949.999965 + 20 +4719.83843 + 30 +0.0 + 11 +7937.499965 + 21 +4741.489066 + 31 +0.0 + 0 +LINE + 5 +747 + 8 +0 + 62 + 0 + 10 +7987.499965 + 20 +4698.187795 + 30 +0.0 + 11 +7974.999965 + 21 +4719.83843 + 31 +0.0 + 0 +LINE + 5 +748 + 8 +0 + 62 + 0 + 10 +8024.999965 + 20 +4676.53716 + 30 +0.0 + 11 +8012.499965 + 21 +4698.187795 + 31 +0.0 + 0 +LINE + 5 +749 + 8 +0 + 62 + 0 + 10 +7987.499965 + 20 +4741.489065 + 30 +0.0 + 11 +7979.699423 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +74A + 8 +0 + 62 + 0 + 10 +8059.547699 + 20 +4660.0 + 30 +0.0 + 11 +8049.999965 + 21 +4676.53716 + 31 +0.0 + 0 +LINE + 5 +74B + 8 +0 + 62 + 0 + 10 +8024.999965 + 20 +4719.83843 + 30 +0.0 + 11 +8012.499965 + 21 +4741.489065 + 31 +0.0 + 0 +LINE + 5 +74C + 8 +0 + 62 + 0 + 10 +8062.499965 + 20 +4698.187795 + 30 +0.0 + 11 +8049.999965 + 21 +4719.83843 + 31 +0.0 + 0 +LINE + 5 +74D + 8 +0 + 62 + 0 + 10 +8099.999965 + 20 +4676.53716 + 30 +0.0 + 11 +8087.499965 + 21 +4698.187795 + 31 +0.0 + 0 +LINE + 5 +74E + 8 +0 + 62 + 0 + 10 +8062.499965 + 20 +4741.489065 + 30 +0.0 + 11 +8054.699423 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +74F + 8 +0 + 62 + 0 + 10 +8134.547698 + 20 +4660.0 + 30 +0.0 + 11 +8124.999965 + 21 +4676.53716 + 31 +0.0 + 0 +LINE + 5 +750 + 8 +0 + 62 + 0 + 10 +8099.999965 + 20 +4719.83843 + 30 +0.0 + 11 +8087.499965 + 21 +4741.489065 + 31 +0.0 + 0 +LINE + 5 +751 + 8 +0 + 62 + 0 + 10 +8137.499964 + 20 +4698.187795 + 30 +0.0 + 11 +8124.999964 + 21 +4719.83843 + 31 +0.0 + 0 +LINE + 5 +752 + 8 +0 + 62 + 0 + 10 +8174.999964 + 20 +4676.53716 + 30 +0.0 + 11 +8162.499964 + 21 +4698.187795 + 31 +0.0 + 0 +LINE + 5 +753 + 8 +0 + 62 + 0 + 10 +8137.499964 + 20 +4741.489065 + 30 +0.0 + 11 +8129.699422 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +754 + 8 +0 + 62 + 0 + 10 +8209.547698 + 20 +4660.0 + 30 +0.0 + 11 +8199.999964 + 21 +4676.53716 + 31 +0.0 + 0 +LINE + 5 +755 + 8 +0 + 62 + 0 + 10 +8174.999964 + 20 +4719.83843 + 30 +0.0 + 11 +8162.499964 + 21 +4741.489065 + 31 +0.0 + 0 +LINE + 5 +756 + 8 +0 + 62 + 0 + 10 +8212.499964 + 20 +4698.187795 + 30 +0.0 + 11 +8199.999964 + 21 +4719.83843 + 31 +0.0 + 0 +LINE + 5 +757 + 8 +0 + 62 + 0 + 10 +8249.999964 + 20 +4676.53716 + 30 +0.0 + 11 +8237.499964 + 21 +4698.187795 + 31 +0.0 + 0 +LINE + 5 +758 + 8 +0 + 62 + 0 + 10 +8212.499964 + 20 +4741.489065 + 30 +0.0 + 11 +8204.699422 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +759 + 8 +0 + 62 + 0 + 10 +8284.547698 + 20 +4660.0 + 30 +0.0 + 11 +8274.999964 + 21 +4676.53716 + 31 +0.0 + 0 +LINE + 5 +75A + 8 +0 + 62 + 0 + 10 +8249.999964 + 20 +4719.83843 + 30 +0.0 + 11 +8237.499964 + 21 +4741.489065 + 31 +0.0 + 0 +LINE + 5 +75B + 8 +0 + 62 + 0 + 10 +8287.499964 + 20 +4698.187795 + 30 +0.0 + 11 +8274.999964 + 21 +4719.83843 + 31 +0.0 + 0 +LINE + 5 +75C + 8 +0 + 62 + 0 + 10 +8324.999964 + 20 +4676.53716 + 30 +0.0 + 11 +8312.499964 + 21 +4698.187795 + 31 +0.0 + 0 +LINE + 5 +75D + 8 +0 + 62 + 0 + 10 +8287.499964 + 20 +4741.489065 + 30 +0.0 + 11 +8279.699422 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +75E + 8 +0 + 62 + 0 + 10 +8359.547697 + 20 +4660.0 + 30 +0.0 + 11 +8349.999964 + 21 +4676.53716 + 31 +0.0 + 0 +LINE + 5 +75F + 8 +0 + 62 + 0 + 10 +8324.999964 + 20 +4719.83843 + 30 +0.0 + 11 +8312.499964 + 21 +4741.489065 + 31 +0.0 + 0 +LINE + 5 +760 + 8 +0 + 62 + 0 + 10 +8362.499964 + 20 +4698.187795 + 30 +0.0 + 11 +8349.999964 + 21 +4719.83843 + 31 +0.0 + 0 +LINE + 5 +761 + 8 +0 + 62 + 0 + 10 +8399.999964 + 20 +4676.537159 + 30 +0.0 + 11 +8387.499964 + 21 +4698.187795 + 31 +0.0 + 0 +LINE + 5 +762 + 8 +0 + 62 + 0 + 10 +8362.499964 + 20 +4741.489065 + 30 +0.0 + 11 +8354.699421 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +763 + 8 +0 + 62 + 0 + 10 +8434.547697 + 20 +4660.0 + 30 +0.0 + 11 +8424.999964 + 21 +4676.537159 + 31 +0.0 + 0 +LINE + 5 +764 + 8 +0 + 62 + 0 + 10 +8399.999964 + 20 +4719.83843 + 30 +0.0 + 11 +8387.499964 + 21 +4741.489065 + 31 +0.0 + 0 +LINE + 5 +765 + 8 +0 + 62 + 0 + 10 +8437.499963 + 20 +4698.187794 + 30 +0.0 + 11 +8424.999963 + 21 +4719.83843 + 31 +0.0 + 0 +LINE + 5 +766 + 8 +0 + 62 + 0 + 10 +8474.999963 + 20 +4676.537159 + 30 +0.0 + 11 +8462.499963 + 21 +4698.187794 + 31 +0.0 + 0 +LINE + 5 +767 + 8 +0 + 62 + 0 + 10 +8437.499963 + 20 +4741.489065 + 30 +0.0 + 11 +8429.699421 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +768 + 8 +0 + 62 + 0 + 10 +8509.547697 + 20 +4660.0 + 30 +0.0 + 11 +8499.999963 + 21 +4676.537159 + 31 +0.0 + 0 +LINE + 5 +769 + 8 +0 + 62 + 0 + 10 +8474.999963 + 20 +4719.838429 + 30 +0.0 + 11 +8462.499963 + 21 +4741.489065 + 31 +0.0 + 0 +LINE + 5 +76A + 8 +0 + 62 + 0 + 10 +8512.499963 + 20 +4698.187794 + 30 +0.0 + 11 +8499.999963 + 21 +4719.838429 + 31 +0.0 + 0 +LINE + 5 +76B + 8 +0 + 62 + 0 + 10 +8549.999963 + 20 +4676.537159 + 30 +0.0 + 11 +8537.499963 + 21 +4698.187794 + 31 +0.0 + 0 +LINE + 5 +76C + 8 +0 + 62 + 0 + 10 +8512.499963 + 20 +4741.489064 + 30 +0.0 + 11 +8504.699421 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +76D + 8 +0 + 62 + 0 + 10 +8549.999963 + 20 +4719.838429 + 30 +0.0 + 11 +8537.499963 + 21 +4741.489064 + 31 +0.0 + 0 +LINE + 5 +76E + 8 +0 + 62 + 0 + 10 +7824.999983 + 20 +4676.53719 + 30 +0.0 + 11 +7837.499983 + 21 +4698.187825 + 31 +0.0 + 0 +LINE + 5 +76F + 8 +0 + 62 + 0 + 10 +7862.499983 + 20 +4741.489095 + 30 +0.0 + 11 +7870.300508 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +770 + 8 +0 + 62 + 0 + 10 +7790.452232 + 20 +4660.0 + 30 +0.0 + 11 +7799.999983 + 21 +4676.53719 + 31 +0.0 + 0 +LINE + 5 +771 + 8 +0 + 62 + 0 + 10 +7824.999983 + 20 +4719.83846 + 30 +0.0 + 11 +7837.499983 + 21 +4741.489095 + 31 +0.0 + 0 +LINE + 5 +772 + 8 +0 + 62 + 0 + 10 +7787.499983 + 20 +4698.187825 + 30 +0.0 + 11 +7799.999983 + 21 +4719.83846 + 31 +0.0 + 0 +LINE + 5 +773 + 8 +0 + 62 + 0 + 10 +7749.999983 + 20 +4676.53719 + 30 +0.0 + 11 +7762.499983 + 21 +4698.187825 + 31 +0.0 + 0 +LINE + 5 +774 + 8 +0 + 62 + 0 + 10 +7787.499983 + 20 +4741.489095 + 30 +0.0 + 11 +7795.300508 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +775 + 8 +0 + 62 + 0 + 10 +7715.452232 + 20 +4660.0 + 30 +0.0 + 11 +7724.999984 + 21 +4676.53719 + 31 +0.0 + 0 +LINE + 5 +776 + 8 +0 + 62 + 0 + 10 +7749.999984 + 20 +4719.83846 + 30 +0.0 + 11 +7762.499984 + 21 +4741.489095 + 31 +0.0 + 0 +LINE + 5 +777 + 8 +0 + 62 + 0 + 10 +7712.499984 + 20 +4698.187825 + 30 +0.0 + 11 +7724.999984 + 21 +4719.83846 + 31 +0.0 + 0 +LINE + 5 +778 + 8 +0 + 62 + 0 + 10 +7674.999984 + 20 +4676.53719 + 30 +0.0 + 11 +7687.499984 + 21 +4698.187825 + 31 +0.0 + 0 +LINE + 5 +779 + 8 +0 + 62 + 0 + 10 +7712.499984 + 20 +4741.489095 + 30 +0.0 + 11 +7720.300508 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +77A + 8 +0 + 62 + 0 + 10 +7640.452233 + 20 +4660.0 + 30 +0.0 + 11 +7649.999984 + 21 +4676.53719 + 31 +0.0 + 0 +LINE + 5 +77B + 8 +0 + 62 + 0 + 10 +7674.999984 + 20 +4719.83846 + 30 +0.0 + 11 +7687.499984 + 21 +4741.489095 + 31 +0.0 + 0 +LINE + 5 +77C + 8 +0 + 62 + 0 + 10 +7637.499984 + 20 +4698.187825 + 30 +0.0 + 11 +7649.999984 + 21 +4719.83846 + 31 +0.0 + 0 +LINE + 5 +77D + 8 +0 + 62 + 0 + 10 +7599.999984 + 20 +4676.53719 + 30 +0.0 + 11 +7612.499984 + 21 +4698.187825 + 31 +0.0 + 0 +LINE + 5 +77E + 8 +0 + 62 + 0 + 10 +7637.499984 + 20 +4741.489095 + 30 +0.0 + 11 +7645.300509 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +77F + 8 +0 + 62 + 0 + 10 +7565.452233 + 20 +4660.0 + 30 +0.0 + 11 +7574.999984 + 21 +4676.53719 + 31 +0.0 + 0 +LINE + 5 +780 + 8 +0 + 62 + 0 + 10 +7599.999984 + 20 +4719.83846 + 30 +0.0 + 11 +7612.499984 + 21 +4741.489095 + 31 +0.0 + 0 +LINE + 5 +781 + 8 +0 + 62 + 0 + 10 +7562.499984 + 20 +4698.187825 + 30 +0.0 + 11 +7574.999984 + 21 +4719.83846 + 31 +0.0 + 0 +LINE + 5 +782 + 8 +0 + 62 + 0 + 10 +7524.999984 + 20 +4676.53719 + 30 +0.0 + 11 +7537.499984 + 21 +4698.187825 + 31 +0.0 + 0 +LINE + 5 +783 + 8 +0 + 62 + 0 + 10 +7562.499984 + 20 +4741.489095 + 30 +0.0 + 11 +7570.300509 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +784 + 8 +0 + 62 + 0 + 10 +7490.452233 + 20 +4660.0 + 30 +0.0 + 11 +7499.999984 + 21 +4676.53719 + 31 +0.0 + 0 +LINE + 5 +785 + 8 +0 + 62 + 0 + 10 +7524.999984 + 20 +4719.83846 + 30 +0.0 + 11 +7537.499984 + 21 +4741.489095 + 31 +0.0 + 0 +LINE + 5 +786 + 8 +0 + 62 + 0 + 10 +7487.499984 + 20 +4698.187825 + 30 +0.0 + 11 +7499.999984 + 21 +4719.83846 + 31 +0.0 + 0 +LINE + 5 +787 + 8 +0 + 62 + 0 + 10 +7449.999984 + 20 +4676.537189 + 30 +0.0 + 11 +7462.499984 + 21 +4698.187825 + 31 +0.0 + 0 +LINE + 5 +788 + 8 +0 + 62 + 0 + 10 +7487.499984 + 20 +4741.489095 + 30 +0.0 + 11 +7495.300509 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +789 + 8 +0 + 62 + 0 + 10 +7415.452234 + 20 +4660.0 + 30 +0.0 + 11 +7424.999985 + 21 +4676.537189 + 31 +0.0 + 0 +LINE + 5 +78A + 8 +0 + 62 + 0 + 10 +7449.999985 + 20 +4719.83846 + 30 +0.0 + 11 +7462.499985 + 21 +4741.489095 + 31 +0.0 + 0 +LINE + 5 +78B + 8 +0 + 62 + 0 + 10 +7412.499985 + 20 +4698.187824 + 30 +0.0 + 11 +7424.999985 + 21 +4719.83846 + 31 +0.0 + 0 +LINE + 5 +78C + 8 +0 + 62 + 0 + 10 +7374.999985 + 20 +4676.537189 + 30 +0.0 + 11 +7387.499985 + 21 +4698.187824 + 31 +0.0 + 0 +LINE + 5 +78D + 8 +0 + 62 + 0 + 10 +7412.499985 + 20 +4741.489095 + 30 +0.0 + 11 +7420.30051 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +78E + 8 +0 + 62 + 0 + 10 +7340.452234 + 20 +4660.0 + 30 +0.0 + 11 +7349.999985 + 21 +4676.537189 + 31 +0.0 + 0 +LINE + 5 +78F + 8 +0 + 62 + 0 + 10 +7374.999985 + 20 +4719.838459 + 30 +0.0 + 11 +7387.499985 + 21 +4741.489095 + 31 +0.0 + 0 +LINE + 5 +790 + 8 +0 + 62 + 0 + 10 +7337.499985 + 20 +4698.187824 + 30 +0.0 + 11 +7349.999985 + 21 +4719.838459 + 31 +0.0 + 0 +LINE + 5 +791 + 8 +0 + 62 + 0 + 10 +7299.999985 + 20 +4676.537189 + 30 +0.0 + 11 +7312.499985 + 21 +4698.187824 + 31 +0.0 + 0 +LINE + 5 +792 + 8 +0 + 62 + 0 + 10 +7337.499985 + 20 +4741.489094 + 30 +0.0 + 11 +7345.30051 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +793 + 8 +0 + 62 + 0 + 10 +7265.452234 + 20 +4660.0 + 30 +0.0 + 11 +7274.999985 + 21 +4676.537189 + 31 +0.0 + 0 +LINE + 5 +794 + 8 +0 + 62 + 0 + 10 +7299.999985 + 20 +4719.838459 + 30 +0.0 + 11 +7312.499985 + 21 +4741.489094 + 31 +0.0 + 0 +LINE + 5 +795 + 8 +0 + 62 + 0 + 10 +7262.499985 + 20 +4698.187824 + 30 +0.0 + 11 +7274.999985 + 21 +4719.838459 + 31 +0.0 + 0 +LINE + 5 +796 + 8 +0 + 62 + 0 + 10 +7224.999985 + 20 +4676.537189 + 30 +0.0 + 11 +7237.499985 + 21 +4698.187824 + 31 +0.0 + 0 +LINE + 5 +797 + 8 +0 + 62 + 0 + 10 +7262.499985 + 20 +4741.489094 + 30 +0.0 + 11 +7270.30051 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +798 + 8 +0 + 62 + 0 + 10 +7190.452235 + 20 +4660.0 + 30 +0.0 + 11 +7199.999985 + 21 +4676.537189 + 31 +0.0 + 0 +LINE + 5 +799 + 8 +0 + 62 + 0 + 10 +7224.999985 + 20 +4719.838459 + 30 +0.0 + 11 +7237.499985 + 21 +4741.489094 + 31 +0.0 + 0 +LINE + 5 +79A + 8 +0 + 62 + 0 + 10 +7187.499985 + 20 +4698.187824 + 30 +0.0 + 11 +7199.999985 + 21 +4719.838459 + 31 +0.0 + 0 +LINE + 5 +79B + 8 +0 + 62 + 0 + 10 +7160.0 + 20 +4693.857722 + 30 +0.0 + 11 +7162.499985 + 21 +4698.187824 + 31 +0.0 + 0 +LINE + 5 +79C + 8 +0 + 62 + 0 + 10 +7187.499985 + 20 +4741.489094 + 30 +0.0 + 11 +7195.300511 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +79D + 8 +0 + 62 + 0 + 10 +7160.0 + 20 +4737.158992 + 30 +0.0 + 11 +7162.499985 + 21 +4741.489094 + 31 +0.0 + 0 +LINE + 5 +79E + 8 +0 + 62 + 0 + 10 +7862.499983 + 20 +4698.187825 + 30 +0.0 + 11 +7874.999983 + 21 +4719.83846 + 31 +0.0 + 0 +LINE + 5 +79F + 8 +0 + 62 + 0 + 10 +7865.452232 + 20 +4660.0 + 30 +0.0 + 11 +7874.999983 + 21 +4676.53719 + 31 +0.0 + 0 +LINE + 5 +7A0 + 8 +0 + 62 + 0 + 10 +7899.999983 + 20 +4719.83846 + 30 +0.0 + 11 +7912.499983 + 21 +4741.489096 + 31 +0.0 + 0 +LINE + 5 +7A1 + 8 +0 + 62 + 0 + 10 +7899.999983 + 20 +4676.53719 + 30 +0.0 + 11 +7912.499983 + 21 +4698.187825 + 31 +0.0 + 0 +LINE + 5 +7A2 + 8 +0 + 62 + 0 + 10 +7937.499983 + 20 +4741.489096 + 30 +0.0 + 11 +7945.300507 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +7A3 + 8 +0 + 62 + 0 + 10 +7937.499983 + 20 +4698.187825 + 30 +0.0 + 11 +7949.999983 + 21 +4719.838461 + 31 +0.0 + 0 +LINE + 5 +7A4 + 8 +0 + 62 + 0 + 10 +7940.452231 + 20 +4660.0 + 30 +0.0 + 11 +7949.999983 + 21 +4676.53719 + 31 +0.0 + 0 +LINE + 5 +7A5 + 8 +0 + 62 + 0 + 10 +7974.999983 + 20 +4719.838461 + 30 +0.0 + 11 +7987.499983 + 21 +4741.489096 + 31 +0.0 + 0 +LINE + 5 +7A6 + 8 +0 + 62 + 0 + 10 +7974.999983 + 20 +4676.53719 + 30 +0.0 + 11 +7987.499983 + 21 +4698.187826 + 31 +0.0 + 0 +LINE + 5 +7A7 + 8 +0 + 62 + 0 + 10 +8012.499983 + 20 +4741.489096 + 30 +0.0 + 11 +8020.300507 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +7A8 + 8 +0 + 62 + 0 + 10 +8012.499983 + 20 +4698.187826 + 30 +0.0 + 11 +8024.999983 + 21 +4719.838461 + 31 +0.0 + 0 +LINE + 5 +7A9 + 8 +0 + 62 + 0 + 10 +8015.452231 + 20 +4660.0 + 30 +0.0 + 11 +8024.999983 + 21 +4676.537191 + 31 +0.0 + 0 +LINE + 5 +7AA + 8 +0 + 62 + 0 + 10 +8049.999983 + 20 +4719.838461 + 30 +0.0 + 11 +8062.499983 + 21 +4741.489096 + 31 +0.0 + 0 +LINE + 5 +7AB + 8 +0 + 62 + 0 + 10 +8049.999982 + 20 +4676.537191 + 30 +0.0 + 11 +8062.499982 + 21 +4698.187826 + 31 +0.0 + 0 +LINE + 5 +7AC + 8 +0 + 62 + 0 + 10 +8087.499982 + 20 +4741.489096 + 30 +0.0 + 11 +8095.300507 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +7AD + 8 +0 + 62 + 0 + 10 +8087.499982 + 20 +4698.187826 + 30 +0.0 + 11 +8099.999982 + 21 +4719.838461 + 31 +0.0 + 0 +LINE + 5 +7AE + 8 +0 + 62 + 0 + 10 +8090.452231 + 20 +4660.0 + 30 +0.0 + 11 +8099.999982 + 21 +4676.537191 + 31 +0.0 + 0 +LINE + 5 +7AF + 8 +0 + 62 + 0 + 10 +8124.999982 + 20 +4719.838461 + 30 +0.0 + 11 +8137.499982 + 21 +4741.489096 + 31 +0.0 + 0 +LINE + 5 +7B0 + 8 +0 + 62 + 0 + 10 +8124.999982 + 20 +4676.537191 + 30 +0.0 + 11 +8137.499982 + 21 +4698.187826 + 31 +0.0 + 0 +LINE + 5 +7B1 + 8 +0 + 62 + 0 + 10 +8162.499982 + 20 +4741.489096 + 30 +0.0 + 11 +8170.300506 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +7B2 + 8 +0 + 62 + 0 + 10 +8162.499982 + 20 +4698.187826 + 30 +0.0 + 11 +8174.999982 + 21 +4719.838461 + 31 +0.0 + 0 +LINE + 5 +7B3 + 8 +0 + 62 + 0 + 10 +8165.45223 + 20 +4660.0 + 30 +0.0 + 11 +8174.999982 + 21 +4676.537191 + 31 +0.0 + 0 +LINE + 5 +7B4 + 8 +0 + 62 + 0 + 10 +8199.999982 + 20 +4719.838461 + 30 +0.0 + 11 +8212.499982 + 21 +4741.489096 + 31 +0.0 + 0 +LINE + 5 +7B5 + 8 +0 + 62 + 0 + 10 +8199.999982 + 20 +4676.537191 + 30 +0.0 + 11 +8212.499982 + 21 +4698.187826 + 31 +0.0 + 0 +LINE + 5 +7B6 + 8 +0 + 62 + 0 + 10 +8237.499982 + 20 +4741.489096 + 30 +0.0 + 11 +8245.300506 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +7B7 + 8 +0 + 62 + 0 + 10 +8237.499982 + 20 +4698.187826 + 30 +0.0 + 11 +8249.999982 + 21 +4719.838461 + 31 +0.0 + 0 +LINE + 5 +7B8 + 8 +0 + 62 + 0 + 10 +8240.45223 + 20 +4660.0 + 30 +0.0 + 11 +8249.999982 + 21 +4676.537191 + 31 +0.0 + 0 +LINE + 5 +7B9 + 8 +0 + 62 + 0 + 10 +8274.999982 + 20 +4719.838461 + 30 +0.0 + 11 +8287.499982 + 21 +4741.489096 + 31 +0.0 + 0 +LINE + 5 +7BA + 8 +0 + 62 + 0 + 10 +8274.999982 + 20 +4676.537191 + 30 +0.0 + 11 +8287.499982 + 21 +4698.187826 + 31 +0.0 + 0 +LINE + 5 +7BB + 8 +0 + 62 + 0 + 10 +8312.499982 + 20 +4741.489096 + 30 +0.0 + 11 +8320.300506 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +7BC + 8 +0 + 62 + 0 + 10 +8312.499982 + 20 +4698.187826 + 30 +0.0 + 11 +8324.999982 + 21 +4719.838461 + 31 +0.0 + 0 +LINE + 5 +7BD + 8 +0 + 62 + 0 + 10 +8315.45223 + 20 +4660.0 + 30 +0.0 + 11 +8324.999982 + 21 +4676.537191 + 31 +0.0 + 0 +LINE + 5 +7BE + 8 +0 + 62 + 0 + 10 +8349.999982 + 20 +4719.838461 + 30 +0.0 + 11 +8362.499982 + 21 +4741.489096 + 31 +0.0 + 0 +LINE + 5 +7BF + 8 +0 + 62 + 0 + 10 +8349.999981 + 20 +4676.537191 + 30 +0.0 + 11 +8362.499981 + 21 +4698.187826 + 31 +0.0 + 0 +LINE + 5 +7C0 + 8 +0 + 62 + 0 + 10 +8387.499981 + 20 +4741.489096 + 30 +0.0 + 11 +8395.300505 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +7C1 + 8 +0 + 62 + 0 + 10 +8387.499981 + 20 +4698.187826 + 30 +0.0 + 11 +8399.999981 + 21 +4719.838461 + 31 +0.0 + 0 +LINE + 5 +7C2 + 8 +0 + 62 + 0 + 10 +8390.45223 + 20 +4660.0 + 30 +0.0 + 11 +8399.999981 + 21 +4676.537191 + 31 +0.0 + 0 +LINE + 5 +7C3 + 8 +0 + 62 + 0 + 10 +8424.999981 + 20 +4719.838461 + 30 +0.0 + 11 +8437.499981 + 21 +4741.489097 + 31 +0.0 + 0 +LINE + 5 +7C4 + 8 +0 + 62 + 0 + 10 +8424.999981 + 20 +4676.537191 + 30 +0.0 + 11 +8437.499981 + 21 +4698.187826 + 31 +0.0 + 0 +LINE + 5 +7C5 + 8 +0 + 62 + 0 + 10 +8462.499981 + 20 +4741.489097 + 30 +0.0 + 11 +8470.300505 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +7C6 + 8 +0 + 62 + 0 + 10 +8462.499981 + 20 +4698.187826 + 30 +0.0 + 11 +8474.999981 + 21 +4719.838462 + 31 +0.0 + 0 +LINE + 5 +7C7 + 8 +0 + 62 + 0 + 10 +8465.452229 + 20 +4660.0 + 30 +0.0 + 11 +8474.999981 + 21 +4676.537191 + 31 +0.0 + 0 +LINE + 5 +7C8 + 8 +0 + 62 + 0 + 10 +8499.999981 + 20 +4719.838462 + 30 +0.0 + 11 +8512.499981 + 21 +4741.489097 + 31 +0.0 + 0 +LINE + 5 +7C9 + 8 +0 + 62 + 0 + 10 +8499.999981 + 20 +4676.537191 + 30 +0.0 + 11 +8512.499981 + 21 +4698.187827 + 31 +0.0 + 0 +LINE + 5 +7CA + 8 +0 + 62 + 0 + 10 +8537.499981 + 20 +4741.489097 + 30 +0.0 + 11 +8545.300505 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +7CB + 8 +0 + 62 + 0 + 10 +8537.499981 + 20 +4698.187827 + 30 +0.0 + 11 +8549.999981 + 21 +4719.838462 + 31 +0.0 + 0 +LINE + 5 +7CC + 8 +0 + 62 + 0 + 10 +8540.452229 + 20 +4660.0 + 30 +0.0 + 11 +8549.999981 + 21 +4676.537192 + 31 +0.0 + 0 +ENDBLK + 5 +7CD + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X33 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X33 + 1 + + 0 +LINE + 5 +7CF + 8 +0 + 62 + 0 + 10 +7813.529932 + 20 +4808.326112 + 30 +0.0 + 11 +7831.207602 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +7D0 + 8 +0 + 62 + 0 + 10 +7848.885271 + 20 +4843.681451 + 30 +0.0 + 11 +7866.562941 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +7D1 + 8 +0 + 62 + 0 + 10 +7884.24061 + 20 +4879.03679 + 30 +0.0 + 11 +7900.986327 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +7D2 + 8 +0 + 62 + 0 + 10 +7778.174593 + 20 +4808.326112 + 30 +0.0 + 11 +7795.852263 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +7D3 + 8 +0 + 62 + 0 + 10 +7813.529932 + 20 +4843.681451 + 30 +0.0 + 11 +7831.207602 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +7D4 + 8 +0 + 62 + 0 + 10 +7848.885271 + 20 +4879.03679 + 30 +0.0 + 11 +7865.630988 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +7D5 + 8 +0 + 62 + 0 + 10 +7742.819254 + 20 +4808.326112 + 30 +0.0 + 11 +7760.496924 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +7D6 + 8 +0 + 62 + 0 + 10 +7778.174593 + 20 +4843.681451 + 30 +0.0 + 11 +7795.852263 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +7D7 + 8 +0 + 62 + 0 + 10 +7813.529932 + 20 +4879.03679 + 30 +0.0 + 11 +7830.275649 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +7D8 + 8 +0 + 62 + 0 + 10 +7707.463915 + 20 +4808.326112 + 30 +0.0 + 11 +7725.141584 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +7D9 + 8 +0 + 62 + 0 + 10 +7742.819254 + 20 +4843.681451 + 30 +0.0 + 11 +7760.496924 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +7DA + 8 +0 + 62 + 0 + 10 +7778.174593 + 20 +4879.03679 + 30 +0.0 + 11 +7794.92031 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +7DB + 8 +0 + 62 + 0 + 10 +7672.108576 + 20 +4808.326112 + 30 +0.0 + 11 +7689.786245 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +7DC + 8 +0 + 62 + 0 + 10 +7707.463915 + 20 +4843.681451 + 30 +0.0 + 11 +7725.141584 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +7DD + 8 +0 + 62 + 0 + 10 +7742.819254 + 20 +4879.03679 + 30 +0.0 + 11 +7759.564971 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +7DE + 8 +0 + 62 + 0 + 10 +7636.753237 + 20 +4808.326112 + 30 +0.0 + 11 +7654.430906 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +7DF + 8 +0 + 62 + 0 + 10 +7672.108576 + 20 +4843.681451 + 30 +0.0 + 11 +7689.786245 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +7E0 + 8 +0 + 62 + 0 + 10 +7707.463915 + 20 +4879.03679 + 30 +0.0 + 11 +7724.209632 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +7E1 + 8 +0 + 62 + 0 + 10 +7601.397898 + 20 +4808.326112 + 30 +0.0 + 11 +7619.075567 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +7E2 + 8 +0 + 62 + 0 + 10 +7636.753237 + 20 +4843.681451 + 30 +0.0 + 11 +7654.430906 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +7E3 + 8 +0 + 62 + 0 + 10 +7672.108576 + 20 +4879.03679 + 30 +0.0 + 11 +7688.854293 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +7E4 + 8 +0 + 62 + 0 + 10 +7566.042559 + 20 +4808.326112 + 30 +0.0 + 11 +7583.720228 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +7E5 + 8 +0 + 62 + 0 + 10 +7601.397898 + 20 +4843.681451 + 30 +0.0 + 11 +7619.075567 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +7E6 + 8 +0 + 62 + 0 + 10 +7636.753237 + 20 +4879.03679 + 30 +0.0 + 11 +7653.498954 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +7E7 + 8 +0 + 62 + 0 + 10 +7530.68722 + 20 +4808.326112 + 30 +0.0 + 11 +7548.364889 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +7E8 + 8 +0 + 62 + 0 + 10 +7566.042559 + 20 +4843.681451 + 30 +0.0 + 11 +7583.720228 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +7E9 + 8 +0 + 62 + 0 + 10 +7601.397898 + 20 +4879.03679 + 30 +0.0 + 11 +7618.143615 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +7EA + 8 +0 + 62 + 0 + 10 +7495.331881 + 20 +4808.326112 + 30 +0.0 + 11 +7513.00955 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +7EB + 8 +0 + 62 + 0 + 10 +7530.68722 + 20 +4843.681451 + 30 +0.0 + 11 +7548.364889 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +7EC + 8 +0 + 62 + 0 + 10 +7566.042559 + 20 +4879.03679 + 30 +0.0 + 11 +7582.788276 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +7ED + 8 +0 + 62 + 0 + 10 +7459.976542 + 20 +4808.326112 + 30 +0.0 + 11 +7477.654211 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +7EE + 8 +0 + 62 + 0 + 10 +7495.331881 + 20 +4843.681451 + 30 +0.0 + 11 +7513.00955 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +7EF + 8 +0 + 62 + 0 + 10 +7530.68722 + 20 +4879.03679 + 30 +0.0 + 11 +7547.432936 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +7F0 + 8 +0 + 62 + 0 + 10 +7424.621202 + 20 +4808.326112 + 30 +0.0 + 11 +7442.298872 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +7F1 + 8 +0 + 62 + 0 + 10 +7459.976542 + 20 +4843.681451 + 30 +0.0 + 11 +7477.654211 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +7F2 + 8 +0 + 62 + 0 + 10 +7495.331881 + 20 +4879.03679 + 30 +0.0 + 11 +7512.077597 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +7F3 + 8 +0 + 62 + 0 + 10 +7389.265863 + 20 +4808.326112 + 30 +0.0 + 11 +7406.943533 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +7F4 + 8 +0 + 62 + 0 + 10 +7424.621202 + 20 +4843.681451 + 30 +0.0 + 11 +7442.298872 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +7F5 + 8 +0 + 62 + 0 + 10 +7459.976542 + 20 +4879.03679 + 30 +0.0 + 11 +7476.722258 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +7F6 + 8 +0 + 62 + 0 + 10 +7353.910524 + 20 +4808.326112 + 30 +0.0 + 11 +7371.588194 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +7F7 + 8 +0 + 62 + 0 + 10 +7389.265863 + 20 +4843.681451 + 30 +0.0 + 11 +7406.943533 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +7F8 + 8 +0 + 62 + 0 + 10 +7424.621202 + 20 +4879.03679 + 30 +0.0 + 11 +7441.366919 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +7F9 + 8 +0 + 62 + 0 + 10 +7318.555185 + 20 +4808.326112 + 30 +0.0 + 11 +7336.232855 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +7FA + 8 +0 + 62 + 0 + 10 +7353.910524 + 20 +4843.681451 + 30 +0.0 + 11 +7371.588194 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +7FB + 8 +0 + 62 + 0 + 10 +7389.265863 + 20 +4879.03679 + 30 +0.0 + 11 +7406.01158 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +7FC + 8 +0 + 62 + 0 + 10 +7283.199846 + 20 +4808.326112 + 30 +0.0 + 11 +7300.877516 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +7FD + 8 +0 + 62 + 0 + 10 +7318.555185 + 20 +4843.681451 + 30 +0.0 + 11 +7336.232855 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +7FE + 8 +0 + 62 + 0 + 10 +7353.910524 + 20 +4879.03679 + 30 +0.0 + 11 +7370.656241 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +7FF + 8 +0 + 62 + 0 + 10 +7247.844507 + 20 +4808.326112 + 30 +0.0 + 11 +7265.522177 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +800 + 8 +0 + 62 + 0 + 10 +7283.199846 + 20 +4843.681451 + 30 +0.0 + 11 +7300.877516 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +801 + 8 +0 + 62 + 0 + 10 +7318.555185 + 20 +4879.03679 + 30 +0.0 + 11 +7335.300902 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +802 + 8 +0 + 62 + 0 + 10 +7212.489168 + 20 +4808.326112 + 30 +0.0 + 11 +7230.166838 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +803 + 8 +0 + 62 + 0 + 10 +7247.844507 + 20 +4843.681451 + 30 +0.0 + 11 +7265.522177 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +804 + 8 +0 + 62 + 0 + 10 +7283.199846 + 20 +4879.03679 + 30 +0.0 + 11 +7299.945563 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +805 + 8 +0 + 62 + 0 + 10 +7191.15625 + 20 +4822.348533 + 30 +0.0 + 11 +7194.811499 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +806 + 8 +0 + 62 + 0 + 10 +7212.489168 + 20 +4843.681451 + 30 +0.0 + 11 +7230.166838 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +807 + 8 +0 + 62 + 0 + 10 +7247.844507 + 20 +4879.03679 + 30 +0.0 + 11 +7264.590224 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +808 + 8 +0 + 62 + 0 + 10 +7191.15625 + 20 +4857.703872 + 30 +0.0 + 11 +7194.811499 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +809 + 8 +0 + 62 + 0 + 10 +7212.489168 + 20 +4879.03679 + 30 +0.0 + 11 +7229.234885 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +80A + 8 +0 + 62 + 0 + 10 +7191.15625 + 20 +4893.059211 + 30 +0.0 + 11 +7193.879546 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +80B + 8 +0 + 62 + 0 + 10 +7848.885271 + 20 +4808.326112 + 30 +0.0 + 11 +7866.562941 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +80C + 8 +0 + 62 + 0 + 10 +7884.24061 + 20 +4843.681451 + 30 +0.0 + 11 +7901.91828 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +80D + 8 +0 + 62 + 0 + 10 +7919.595949 + 20 +4879.03679 + 30 +0.0 + 11 +7936.341666 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +80E + 8 +0 + 62 + 0 + 10 +7884.24061 + 20 +4808.326112 + 30 +0.0 + 11 +7901.91828 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +80F + 8 +0 + 62 + 0 + 10 +7919.595949 + 20 +4843.681451 + 30 +0.0 + 11 +7937.273619 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +810 + 8 +0 + 62 + 0 + 10 +7954.951288 + 20 +4879.03679 + 30 +0.0 + 11 +7971.697005 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +811 + 8 +0 + 62 + 0 + 10 +7919.595949 + 20 +4808.326112 + 30 +0.0 + 11 +7937.273619 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +812 + 8 +0 + 62 + 0 + 10 +7954.951288 + 20 +4843.681451 + 30 +0.0 + 11 +7972.628958 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +813 + 8 +0 + 62 + 0 + 10 +7990.306627 + 20 +4879.03679 + 30 +0.0 + 11 +8007.052344 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +814 + 8 +0 + 62 + 0 + 10 +7954.951288 + 20 +4808.326112 + 30 +0.0 + 11 +7972.628958 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +815 + 8 +0 + 62 + 0 + 10 +7990.306627 + 20 +4843.681451 + 30 +0.0 + 11 +8007.984297 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +816 + 8 +0 + 62 + 0 + 10 +8025.661966 + 20 +4879.03679 + 30 +0.0 + 11 +8042.407683 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +817 + 8 +0 + 62 + 0 + 10 +7990.306627 + 20 +4808.326112 + 30 +0.0 + 11 +8007.984297 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +818 + 8 +0 + 62 + 0 + 10 +8025.661966 + 20 +4843.681451 + 30 +0.0 + 11 +8043.339636 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +819 + 8 +0 + 62 + 0 + 10 +8061.017306 + 20 +4879.03679 + 30 +0.0 + 11 +8077.763022 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +81A + 8 +0 + 62 + 0 + 10 +8025.661966 + 20 +4808.326112 + 30 +0.0 + 11 +8043.339636 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +81B + 8 +0 + 62 + 0 + 10 +8061.017306 + 20 +4843.681451 + 30 +0.0 + 11 +8078.694975 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +81C + 8 +0 + 62 + 0 + 10 +8096.372645 + 20 +4879.03679 + 30 +0.0 + 11 +8113.118361 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +81D + 8 +0 + 62 + 0 + 10 +8061.017306 + 20 +4808.326112 + 30 +0.0 + 11 +8078.694975 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +81E + 8 +0 + 62 + 0 + 10 +8096.372645 + 20 +4843.681451 + 30 +0.0 + 11 +8114.050314 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +81F + 8 +0 + 62 + 0 + 10 +8131.727984 + 20 +4879.03679 + 30 +0.0 + 11 +8148.4737 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +820 + 8 +0 + 62 + 0 + 10 +8096.372645 + 20 +4808.326112 + 30 +0.0 + 11 +8114.050314 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +821 + 8 +0 + 62 + 0 + 10 +8131.727984 + 20 +4843.681451 + 30 +0.0 + 11 +8149.405653 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +822 + 8 +0 + 62 + 0 + 10 +8167.083323 + 20 +4879.03679 + 30 +0.0 + 11 +8183.82904 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +823 + 8 +0 + 62 + 0 + 10 +8131.727984 + 20 +4808.326112 + 30 +0.0 + 11 +8149.405653 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +824 + 8 +0 + 62 + 0 + 10 +8167.083323 + 20 +4843.681451 + 30 +0.0 + 11 +8184.760992 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +825 + 8 +0 + 62 + 0 + 10 +8202.438662 + 20 +4879.03679 + 30 +0.0 + 11 +8219.184379 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +826 + 8 +0 + 62 + 0 + 10 +8167.083323 + 20 +4808.326112 + 30 +0.0 + 11 +8184.760992 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +827 + 8 +0 + 62 + 0 + 10 +8202.438662 + 20 +4843.681451 + 30 +0.0 + 11 +8220.116331 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +828 + 8 +0 + 62 + 0 + 10 +8237.794001 + 20 +4879.03679 + 30 +0.0 + 11 +8254.539718 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +829 + 8 +0 + 62 + 0 + 10 +8202.438662 + 20 +4808.326112 + 30 +0.0 + 11 +8220.116331 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +82A + 8 +0 + 62 + 0 + 10 +8237.794001 + 20 +4843.681451 + 30 +0.0 + 11 +8255.47167 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +82B + 8 +0 + 62 + 0 + 10 +8273.14934 + 20 +4879.03679 + 30 +0.0 + 11 +8289.895057 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +82C + 8 +0 + 62 + 0 + 10 +8237.794001 + 20 +4808.326112 + 30 +0.0 + 11 +8255.47167 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +82D + 8 +0 + 62 + 0 + 10 +8273.14934 + 20 +4843.681451 + 30 +0.0 + 11 +8290.827009 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +82E + 8 +0 + 62 + 0 + 10 +8308.504679 + 20 +4879.03679 + 30 +0.0 + 11 +8325.250396 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +82F + 8 +0 + 62 + 0 + 10 +8273.14934 + 20 +4808.326112 + 30 +0.0 + 11 +8290.827009 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +830 + 8 +0 + 62 + 0 + 10 +8308.504679 + 20 +4843.681451 + 30 +0.0 + 11 +8326.182348 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +831 + 8 +0 + 62 + 0 + 10 +8343.860018 + 20 +4879.03679 + 30 +0.0 + 11 +8360.605735 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +832 + 8 +0 + 62 + 0 + 10 +8308.504679 + 20 +4808.326112 + 30 +0.0 + 11 +8326.182348 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +833 + 8 +0 + 62 + 0 + 10 +8343.860018 + 20 +4843.681451 + 30 +0.0 + 11 +8361.537688 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +834 + 8 +0 + 62 + 0 + 10 +8379.215357 + 20 +4879.03679 + 30 +0.0 + 11 +8395.961074 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +835 + 8 +0 + 62 + 0 + 10 +8343.860018 + 20 +4808.326112 + 30 +0.0 + 11 +8361.537688 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +836 + 8 +0 + 62 + 0 + 10 +8379.215357 + 20 +4843.681451 + 30 +0.0 + 11 +8396.893027 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +837 + 8 +0 + 62 + 0 + 10 +8414.570696 + 20 +4879.03679 + 30 +0.0 + 11 +8431.316413 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +838 + 8 +0 + 62 + 0 + 10 +8379.215357 + 20 +4808.326112 + 30 +0.0 + 11 +8396.893027 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +839 + 8 +0 + 62 + 0 + 10 +8414.570696 + 20 +4843.681451 + 30 +0.0 + 11 +8432.248366 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +83A + 8 +0 + 62 + 0 + 10 +8449.926035 + 20 +4879.03679 + 30 +0.0 + 11 +8466.671752 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +83B + 8 +0 + 62 + 0 + 10 +8414.570696 + 20 +4808.326112 + 30 +0.0 + 11 +8432.248366 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +83C + 8 +0 + 62 + 0 + 10 +8449.926035 + 20 +4843.681451 + 30 +0.0 + 11 +8467.603705 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +83D + 8 +0 + 62 + 0 + 10 +8485.281374 + 20 +4879.03679 + 30 +0.0 + 11 +8502.027091 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +83E + 8 +0 + 62 + 0 + 10 +8449.926035 + 20 +4808.326112 + 30 +0.0 + 11 +8467.603705 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +83F + 8 +0 + 62 + 0 + 10 +8485.281374 + 20 +4843.681451 + 30 +0.0 + 11 +8502.959044 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +840 + 8 +0 + 62 + 0 + 10 +8520.636713 + 20 +4879.03679 + 30 +0.0 + 11 +8537.38243 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +841 + 8 +0 + 62 + 0 + 10 +8485.281374 + 20 +4808.326112 + 30 +0.0 + 11 +8502.959044 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +842 + 8 +0 + 62 + 0 + 10 +8520.636713 + 20 +4843.681451 + 30 +0.0 + 11 +8538.314383 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +843 + 8 +0 + 62 + 0 + 10 +8555.992052 + 20 +4879.03679 + 30 +0.0 + 11 +8565.0 + 21 +4888.044738 + 31 +0.0 + 0 +LINE + 5 +844 + 8 +0 + 62 + 0 + 10 +8520.636713 + 20 +4808.326112 + 30 +0.0 + 11 +8538.314383 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +845 + 8 +0 + 62 + 0 + 10 +8555.992052 + 20 +4843.681451 + 30 +0.0 + 11 +8565.0 + 21 +4852.689399 + 31 +0.0 + 0 +LINE + 5 +846 + 8 +0 + 62 + 0 + 10 +8555.992052 + 20 +4808.326112 + 30 +0.0 + 11 +8565.0 + 21 +4817.33406 + 31 +0.0 + 0 +ENDBLK + 5 +847 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X34 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X34 + 1 + + 0 +LINE + 5 +849 + 8 +0 + 62 + 0 + 10 +7652.716447 + 20 +4895.0 + 30 +0.0 + 11 +7712.716447 + 21 +4955.0 + 31 +0.0 + 0 +LINE + 5 +84A + 8 +0 + 62 + 0 + 10 +7440.584412 + 20 +4895.0 + 30 +0.0 + 11 +7500.584412 + 21 +4955.0 + 31 +0.0 + 0 +LINE + 5 +84B + 8 +0 + 62 + 0 + 10 +7228.452378 + 20 +4895.0 + 30 +0.0 + 11 +7288.452378 + 21 +4955.0 + 31 +0.0 + 0 +LINE + 5 +84C + 8 +0 + 62 + 0 + 10 +7864.848481 + 20 +4895.0 + 30 +0.0 + 11 +7924.848481 + 21 +4955.0 + 31 +0.0 + 0 +LINE + 5 +84D + 8 +0 + 62 + 0 + 10 +8076.980515 + 20 +4895.0 + 30 +0.0 + 11 +8136.980515 + 21 +4955.0 + 31 +0.0 + 0 +LINE + 5 +84E + 8 +0 + 62 + 0 + 10 +8289.11255 + 20 +4895.0 + 30 +0.0 + 11 +8349.11255 + 21 +4955.0 + 31 +0.0 + 0 +LINE + 5 +84F + 8 +0 + 62 + 0 + 10 +8501.244584 + 20 +4895.0 + 30 +0.0 + 11 +8561.244584 + 21 +4955.0 + 31 +0.0 + 0 +LINE + 5 +850 + 8 +0 + 62 + 0 + 10 +7688.071786 + 20 +4895.0 + 30 +0.0 + 11 +7748.071786 + 21 +4955.0 + 31 +0.0 + 0 +LINE + 5 +851 + 8 +0 + 62 + 0 + 10 +7475.939751 + 20 +4895.0 + 30 +0.0 + 11 +7535.939751 + 21 +4955.0 + 31 +0.0 + 0 +LINE + 5 +852 + 8 +0 + 62 + 0 + 10 +7263.807717 + 20 +4895.0 + 30 +0.0 + 11 +7323.807717 + 21 +4955.0 + 31 +0.0 + 0 +LINE + 5 +853 + 8 +0 + 62 + 0 + 10 +7900.20382 + 20 +4895.0 + 30 +0.0 + 11 +7960.20382 + 21 +4955.0 + 31 +0.0 + 0 +LINE + 5 +854 + 8 +0 + 62 + 0 + 10 +8112.335854 + 20 +4895.0 + 30 +0.0 + 11 +8172.335854 + 21 +4955.0 + 31 +0.0 + 0 +LINE + 5 +855 + 8 +0 + 62 + 0 + 10 +8324.467889 + 20 +4895.0 + 30 +0.0 + 11 +8384.467889 + 21 +4955.0 + 31 +0.0 + 0 +LINE + 5 +856 + 8 +0 + 62 + 0 + 10 +8536.599923 + 20 +4895.0 + 30 +0.0 + 11 +8570.0 + 21 +4928.400077 + 31 +0.0 + 0 +LINE + 5 +857 + 8 +0 + 62 + 0 + 10 +7723.427125 + 20 +4895.0 + 30 +0.0 + 11 +7783.427125 + 21 +4955.0 + 31 +0.0 + 0 +LINE + 5 +858 + 8 +0 + 62 + 0 + 10 +7511.29509 + 20 +4895.0 + 30 +0.0 + 11 +7571.29509 + 21 +4955.0 + 31 +0.0 + 0 +LINE + 5 +859 + 8 +0 + 62 + 0 + 10 +7299.163056 + 20 +4895.0 + 30 +0.0 + 11 +7359.163056 + 21 +4955.0 + 31 +0.0 + 0 +LINE + 5 +85A + 8 +0 + 62 + 0 + 10 +7935.559159 + 20 +4895.0 + 30 +0.0 + 11 +7995.559159 + 21 +4955.0 + 31 +0.0 + 0 +LINE + 5 +85B + 8 +0 + 62 + 0 + 10 +8147.691194 + 20 +4895.0 + 30 +0.0 + 11 +8207.691194 + 21 +4955.0 + 31 +0.0 + 0 +LINE + 5 +85C + 8 +0 + 62 + 0 + 10 +8359.823228 + 20 +4895.0 + 30 +0.0 + 11 +8419.823228 + 21 +4955.0 + 31 +0.0 + 0 +LINE + 5 +85D + 8 +0 + 62 + 0 + 10 +7758.782464 + 20 +4895.0 + 30 +0.0 + 11 +7818.782464 + 21 +4955.0 + 31 +0.0 + 0 +LINE + 5 +85E + 8 +0 + 62 + 0 + 10 +7546.650429 + 20 +4895.0 + 30 +0.0 + 11 +7606.650429 + 21 +4955.0 + 31 +0.0 + 0 +LINE + 5 +85F + 8 +0 + 62 + 0 + 10 +7334.518395 + 20 +4895.0 + 30 +0.0 + 11 +7394.518395 + 21 +4955.0 + 31 +0.0 + 0 +LINE + 5 +860 + 8 +0 + 62 + 0 + 10 +7970.914498 + 20 +4895.0 + 30 +0.0 + 11 +8030.914498 + 21 +4955.0 + 31 +0.0 + 0 +LINE + 5 +861 + 8 +0 + 62 + 0 + 10 +8183.046533 + 20 +4895.0 + 30 +0.0 + 11 +8243.046533 + 21 +4955.0 + 31 +0.0 + 0 +LINE + 5 +862 + 8 +0 + 62 + 0 + 10 +8395.178567 + 20 +4895.0 + 30 +0.0 + 11 +8455.178567 + 21 +4955.0 + 31 +0.0 + 0 +ENDBLK + 5 +863 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X35 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X35 + 1 + + 0 +LINE + 5 +865 + 8 +0 + 62 + 0 + 10 +6210.0 + 20 +5149.339828 + 30 +0.0 + 11 +6850.660172 + 21 +5790.0 + 31 +0.0 + 0 +LINE + 5 +866 + 8 +0 + 62 + 0 + 10 +6210.0 + 20 +5326.116524 + 30 +0.0 + 11 +6673.883476 + 21 +5790.0 + 31 +0.0 + 0 +LINE + 5 +867 + 8 +0 + 62 + 0 + 10 +6210.0 + 20 +5502.893219 + 30 +0.0 + 11 +6497.106781 + 21 +5790.0 + 31 +0.0 + 0 +LINE + 5 +868 + 8 +0 + 62 + 0 + 10 +6210.0 + 20 +5679.669914 + 30 +0.0 + 11 +6320.330086 + 21 +5790.0 + 31 +0.0 + 0 +LINE + 5 +869 + 8 +0 + 62 + 0 + 10 +6372.436867 + 20 +5135.0 + 30 +0.0 + 11 +7027.436867 + 21 +5790.0 + 31 +0.0 + 0 +LINE + 5 +86A + 8 +0 + 62 + 0 + 10 +6549.213562 + 20 +5135.0 + 30 +0.0 + 11 +7120.0 + 21 +5705.786438 + 31 +0.0 + 0 +LINE + 5 +86B + 8 +0 + 62 + 0 + 10 +6725.990258 + 20 +5135.0 + 30 +0.0 + 11 +7120.0 + 21 +5529.009742 + 31 +0.0 + 0 +LINE + 5 +86C + 8 +0 + 62 + 0 + 10 +6902.766953 + 20 +5135.0 + 30 +0.0 + 11 +7120.0 + 21 +5352.233047 + 31 +0.0 + 0 +LINE + 5 +86D + 8 +0 + 62 + 0 + 10 +7079.543648 + 20 +5135.0 + 30 +0.0 + 11 +7120.0 + 21 +5175.456352 + 31 +0.0 + 0 +ENDBLK + 5 +86E + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X36 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X36 + 1 + + 0 +LINE + 5 +870 + 8 +0 + 62 + 0 + 10 +6768.084412 + 20 +4222.5 + 30 +0.0 + 11 +7168.084412 + 21 +4622.5 + 31 +0.0 + 0 +LINE + 5 +871 + 8 +0 + 62 + 0 + 10 +6343.820344 + 20 +4222.5 + 30 +0.0 + 11 +6743.820344 + 21 +4622.5 + 31 +0.0 + 0 +LINE + 5 +872 + 8 +0 + 62 + 0 + 10 +6215.0 + 20 +4517.943725 + 30 +0.0 + 11 +6319.556275 + 21 +4622.5 + 31 +0.0 + 0 +LINE + 5 +873 + 8 +0 + 62 + 0 + 10 +7192.348481 + 20 +4222.5 + 30 +0.0 + 11 +7592.348481 + 21 +4622.5 + 31 +0.0 + 0 +LINE + 5 +874 + 8 +0 + 62 + 0 + 10 +7616.61255 + 20 +4222.5 + 30 +0.0 + 11 +8016.61255 + 21 +4622.5 + 31 +0.0 + 0 +LINE + 5 +875 + 8 +0 + 62 + 0 + 10 +8040.876618 + 20 +4222.5 + 30 +0.0 + 11 +8440.876618 + 21 +4622.5 + 31 +0.0 + 0 +LINE + 5 +876 + 8 +0 + 62 + 0 + 10 +8465.140687 + 20 +4222.5 + 30 +0.0 + 11 +8565.0 + 21 +4322.359313 + 31 +0.0 + 0 +LINE + 5 +877 + 8 +0 + 62 + 0 + 10 +6980.216446 + 20 +4222.5 + 30 +0.0 + 11 +7000.357133 + 21 +4242.640687 + 31 +0.0 + 0 +LINE + 5 +878 + 8 +0 + 62 + 0 + 10 +7053.390142 + 20 +4295.673696 + 30 +0.0 + 11 +7159.456159 + 21 +4401.739713 + 31 +0.0 + 0 +LINE + 5 +879 + 8 +0 + 62 + 0 + 10 +7212.489168 + 20 +4454.772721 + 30 +0.0 + 11 +7318.555185 + 21 +4560.838739 + 31 +0.0 + 0 +LINE + 5 +87A + 8 +0 + 62 + 0 + 10 +7371.588194 + 20 +4613.871747 + 30 +0.0 + 11 +7380.216446 + 21 +4622.5 + 31 +0.0 + 0 +LINE + 5 +87B + 8 +0 + 62 + 0 + 10 +6555.952378 + 20 +4222.5 + 30 +0.0 + 11 +6629.126073 + 21 +4295.673696 + 31 +0.0 + 0 +LINE + 5 +87C + 8 +0 + 62 + 0 + 10 +6682.159082 + 20 +4348.706704 + 30 +0.0 + 11 +6788.225099 + 21 +4454.772721 + 31 +0.0 + 0 +LINE + 5 +87D + 8 +0 + 62 + 0 + 10 +6841.258108 + 20 +4507.80573 + 30 +0.0 + 11 +6947.324125 + 21 +4613.871747 + 31 +0.0 + 0 +LINE + 5 +87E + 8 +0 + 62 + 0 + 10 +6215.0 + 20 +4305.811691 + 30 +0.0 + 11 +6257.895013 + 21 +4348.706704 + 31 +0.0 + 0 +LINE + 5 +87F + 8 +0 + 62 + 0 + 10 +6310.928022 + 20 +4401.739713 + 30 +0.0 + 11 +6416.994039 + 21 +4507.80573 + 31 +0.0 + 0 +LINE + 5 +880 + 8 +0 + 62 + 0 + 10 +6470.027048 + 20 +4560.838739 + 30 +0.0 + 11 +6531.688309 + 21 +4622.5 + 31 +0.0 + 0 +LINE + 5 +881 + 8 +0 + 62 + 0 + 10 +7424.621202 + 20 +4242.640687 + 30 +0.0 + 11 +7530.687219 + 21 +4348.706704 + 31 +0.0 + 0 +LINE + 5 +882 + 8 +0 + 62 + 0 + 10 +7583.720228 + 20 +4401.739713 + 30 +0.0 + 11 +7689.786245 + 21 +4507.80573 + 31 +0.0 + 0 +LINE + 5 +883 + 8 +0 + 62 + 0 + 10 +7742.819254 + 20 +4560.838739 + 30 +0.0 + 11 +7804.480515 + 21 +4622.5 + 31 +0.0 + 0 +LINE + 5 +884 + 8 +0 + 62 + 0 + 10 +7828.744584 + 20 +4222.5 + 30 +0.0 + 11 +7901.918279 + 21 +4295.673696 + 31 +0.0 + 0 +LINE + 5 +885 + 8 +0 + 62 + 0 + 10 +7954.951288 + 20 +4348.706704 + 30 +0.0 + 11 +8061.017305 + 21 +4454.772721 + 31 +0.0 + 0 +LINE + 5 +886 + 8 +0 + 62 + 0 + 10 +8114.050314 + 20 +4507.80573 + 30 +0.0 + 11 +8220.116331 + 21 +4613.871747 + 31 +0.0 + 0 +LINE + 5 +887 + 8 +0 + 62 + 0 + 10 +8253.008652 + 20 +4222.5 + 30 +0.0 + 11 +8273.14934 + 21 +4242.640687 + 31 +0.0 + 0 +LINE + 5 +888 + 8 +0 + 62 + 0 + 10 +8326.182348 + 20 +4295.673696 + 30 +0.0 + 11 +8432.248365 + 21 +4401.739713 + 31 +0.0 + 0 +LINE + 5 +889 + 8 +0 + 62 + 0 + 10 +8485.281374 + 20 +4454.772721 + 30 +0.0 + 11 +8565.0 + 21 +4534.491348 + 31 +0.0 + 0 +ENDBLK + 5 +88A + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X37 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X37 + 1 + + 0 +LINE + 5 +88C + 8 +0 + 62 + 0 + 10 +5833.630945 + 20 +2916.815472 + 30 +0.0 + 11 +5966.213466 + 21 +3049.397994 + 31 +0.0 + 0 +LINE + 5 +88D + 8 +0 + 62 + 0 + 10 +6098.795988 + 20 +3181.980515 + 30 +0.0 + 11 +6231.378509 + 21 +3314.563037 + 31 +0.0 + 0 +LINE + 5 +88E + 8 +0 + 62 + 0 + 10 +6363.961031 + 20 +3447.145558 + 30 +0.0 + 11 +6496.543552 + 21 +3579.72808 + 31 +0.0 + 0 +LINE + 5 +88F + 8 +0 + 62 + 0 + 10 +6629.126074 + 20 +3712.310601 + 30 +0.0 + 11 +6761.708595 + 21 +3844.893123 + 31 +0.0 + 0 +LINE + 5 +890 + 8 +0 + 62 + 0 + 10 +6894.291117 + 20 +3977.475644 + 30 +0.0 + 11 +7026.873638 + 21 +4110.058166 + 31 +0.0 + 0 +LINE + 5 +891 + 8 +0 + 62 + 0 + 10 +5568.465902 + 20 +2916.815472 + 30 +0.0 + 11 +5701.048423 + 21 +3049.397994 + 31 +0.0 + 0 +LINE + 5 +892 + 8 +0 + 62 + 0 + 10 +5833.630945 + 20 +3181.980515 + 30 +0.0 + 11 +5966.213466 + 21 +3314.563037 + 31 +0.0 + 0 +LINE + 5 +893 + 8 +0 + 62 + 0 + 10 +6098.795988 + 20 +3447.145558 + 30 +0.0 + 11 +6231.378509 + 21 +3579.72808 + 31 +0.0 + 0 +LINE + 5 +894 + 8 +0 + 62 + 0 + 10 +6363.961031 + 20 +3712.310601 + 30 +0.0 + 11 +6496.543552 + 21 +3844.893123 + 31 +0.0 + 0 +LINE + 5 +895 + 8 +0 + 62 + 0 + 10 +6629.126074 + 20 +3977.475644 + 30 +0.0 + 11 +6761.708595 + 21 +4110.058166 + 31 +0.0 + 0 +LINE + 5 +896 + 8 +0 + 62 + 0 + 10 +5421.25 + 20 +3034.764613 + 30 +0.0 + 11 +5435.88338 + 21 +3049.397994 + 31 +0.0 + 0 +LINE + 5 +897 + 8 +0 + 62 + 0 + 10 +5568.465902 + 20 +3181.980515 + 30 +0.0 + 11 +5701.048423 + 21 +3314.563037 + 31 +0.0 + 0 +LINE + 5 +898 + 8 +0 + 62 + 0 + 10 +5833.630945 + 20 +3447.145558 + 30 +0.0 + 11 +5966.213466 + 21 +3579.72808 + 31 +0.0 + 0 +LINE + 5 +899 + 8 +0 + 62 + 0 + 10 +6098.795988 + 20 +3712.310601 + 30 +0.0 + 11 +6231.378509 + 21 +3844.893123 + 31 +0.0 + 0 +LINE + 5 +89A + 8 +0 + 62 + 0 + 10 +6363.961031 + 20 +3977.475644 + 30 +0.0 + 11 +6496.543552 + 21 +4110.058166 + 31 +0.0 + 0 +LINE + 5 +89B + 8 +0 + 62 + 0 + 10 +5421.25 + 20 +3299.929656 + 30 +0.0 + 11 +5435.88338 + 21 +3314.563037 + 31 +0.0 + 0 +LINE + 5 +89C + 8 +0 + 62 + 0 + 10 +5568.465902 + 20 +3447.145558 + 30 +0.0 + 11 +5701.048423 + 21 +3579.72808 + 31 +0.0 + 0 +LINE + 5 +89D + 8 +0 + 62 + 0 + 10 +5833.630945 + 20 +3712.310601 + 30 +0.0 + 11 +5966.213466 + 21 +3844.893123 + 31 +0.0 + 0 +LINE + 5 +89E + 8 +0 + 62 + 0 + 10 +6098.795988 + 20 +3977.475644 + 30 +0.0 + 11 +6231.378509 + 21 +4110.058166 + 31 +0.0 + 0 +LINE + 5 +89F + 8 +0 + 62 + 0 + 10 +5421.25 + 20 +3565.094699 + 30 +0.0 + 11 +5435.88338 + 21 +3579.72808 + 31 +0.0 + 0 +LINE + 5 +8A0 + 8 +0 + 62 + 0 + 10 +5568.465902 + 20 +3712.310601 + 30 +0.0 + 11 +5701.048423 + 21 +3844.893123 + 31 +0.0 + 0 +LINE + 5 +8A1 + 8 +0 + 62 + 0 + 10 +5833.630945 + 20 +3977.475644 + 30 +0.0 + 11 +5966.213466 + 21 +4110.058166 + 31 +0.0 + 0 +LINE + 5 +8A2 + 8 +0 + 62 + 0 + 10 +5421.25 + 20 +3830.259742 + 30 +0.0 + 11 +5435.88338 + 21 +3844.893123 + 31 +0.0 + 0 +LINE + 5 +8A3 + 8 +0 + 62 + 0 + 10 +5568.465902 + 20 +3977.475644 + 30 +0.0 + 11 +5701.048423 + 21 +4110.058166 + 31 +0.0 + 0 +LINE + 5 +8A4 + 8 +0 + 62 + 0 + 10 +5421.25 + 20 +4095.424785 + 30 +0.0 + 11 +5435.88338 + 21 +4110.058166 + 31 +0.0 + 0 +LINE + 5 +8A5 + 8 +0 + 62 + 0 + 10 +6098.795988 + 20 +2916.815472 + 30 +0.0 + 11 +6231.378509 + 21 +3049.397994 + 31 +0.0 + 0 +LINE + 5 +8A6 + 8 +0 + 62 + 0 + 10 +6363.961031 + 20 +3181.980515 + 30 +0.0 + 11 +6496.543552 + 21 +3314.563037 + 31 +0.0 + 0 +LINE + 5 +8A7 + 8 +0 + 62 + 0 + 10 +6629.126074 + 20 +3447.145558 + 30 +0.0 + 11 +6761.708595 + 21 +3579.72808 + 31 +0.0 + 0 +LINE + 5 +8A8 + 8 +0 + 62 + 0 + 10 +6894.291117 + 20 +3712.310601 + 30 +0.0 + 11 +7026.873638 + 21 +3844.893123 + 31 +0.0 + 0 +LINE + 5 +8A9 + 8 +0 + 62 + 0 + 10 +7159.45616 + 20 +3977.475644 + 30 +0.0 + 11 +7292.038681 + 21 +4110.058166 + 31 +0.0 + 0 +LINE + 5 +8AA + 8 +0 + 62 + 0 + 10 +6363.961031 + 20 +2916.815472 + 30 +0.0 + 11 +6496.543552 + 21 +3049.397994 + 31 +0.0 + 0 +LINE + 5 +8AB + 8 +0 + 62 + 0 + 10 +6629.126074 + 20 +3181.980515 + 30 +0.0 + 11 +6761.708595 + 21 +3314.563037 + 31 +0.0 + 0 +LINE + 5 +8AC + 8 +0 + 62 + 0 + 10 +6894.291117 + 20 +3447.145558 + 30 +0.0 + 11 +7026.873638 + 21 +3579.72808 + 31 +0.0 + 0 +LINE + 5 +8AD + 8 +0 + 62 + 0 + 10 +7159.45616 + 20 +3712.310601 + 30 +0.0 + 11 +7292.038681 + 21 +3844.893123 + 31 +0.0 + 0 +LINE + 5 +8AE + 8 +0 + 62 + 0 + 10 +7424.621202 + 20 +3977.475644 + 30 +0.0 + 11 +7557.203724 + 21 +4110.058166 + 31 +0.0 + 0 +LINE + 5 +8AF + 8 +0 + 62 + 0 + 10 +6629.126074 + 20 +2916.815472 + 30 +0.0 + 11 +6761.708595 + 21 +3049.397994 + 31 +0.0 + 0 +LINE + 5 +8B0 + 8 +0 + 62 + 0 + 10 +6894.291117 + 20 +3181.980515 + 30 +0.0 + 11 +7026.873638 + 21 +3314.563037 + 31 +0.0 + 0 +LINE + 5 +8B1 + 8 +0 + 62 + 0 + 10 +7159.45616 + 20 +3447.145558 + 30 +0.0 + 11 +7292.038681 + 21 +3579.72808 + 31 +0.0 + 0 +LINE + 5 +8B2 + 8 +0 + 62 + 0 + 10 +7424.621202 + 20 +3712.310601 + 30 +0.0 + 11 +7557.203724 + 21 +3844.893123 + 31 +0.0 + 0 +LINE + 5 +8B3 + 8 +0 + 62 + 0 + 10 +7689.786245 + 20 +3977.475644 + 30 +0.0 + 11 +7822.368767 + 21 +4110.058166 + 31 +0.0 + 0 +LINE + 5 +8B4 + 8 +0 + 62 + 0 + 10 +6894.291117 + 20 +2916.815472 + 30 +0.0 + 11 +7026.873638 + 21 +3049.397994 + 31 +0.0 + 0 +LINE + 5 +8B5 + 8 +0 + 62 + 0 + 10 +7159.45616 + 20 +3181.980515 + 30 +0.0 + 11 +7292.038681 + 21 +3314.563037 + 31 +0.0 + 0 +LINE + 5 +8B6 + 8 +0 + 62 + 0 + 10 +7424.621202 + 20 +3447.145558 + 30 +0.0 + 11 +7557.203724 + 21 +3579.72808 + 31 +0.0 + 0 +LINE + 5 +8B7 + 8 +0 + 62 + 0 + 10 +7689.786245 + 20 +3712.310601 + 30 +0.0 + 11 +7822.368767 + 21 +3844.893123 + 31 +0.0 + 0 +LINE + 5 +8B8 + 8 +0 + 62 + 0 + 10 +7159.45616 + 20 +2916.815472 + 30 +0.0 + 11 +7292.038681 + 21 +3049.397994 + 31 +0.0 + 0 +LINE + 5 +8B9 + 8 +0 + 62 + 0 + 10 +7424.621202 + 20 +3181.980515 + 30 +0.0 + 11 +7557.203724 + 21 +3314.563037 + 31 +0.0 + 0 +LINE + 5 +8BA + 8 +0 + 62 + 0 + 10 +7689.786245 + 20 +3447.145558 + 30 +0.0 + 11 +7822.368767 + 21 +3579.72808 + 31 +0.0 + 0 +LINE + 5 +8BB + 8 +0 + 62 + 0 + 10 +7424.621202 + 20 +2916.815472 + 30 +0.0 + 11 +7557.203724 + 21 +3049.397994 + 31 +0.0 + 0 +LINE + 5 +8BC + 8 +0 + 62 + 0 + 10 +7689.786245 + 20 +3181.980515 + 30 +0.0 + 11 +7822.368767 + 21 +3314.563037 + 31 +0.0 + 0 +LINE + 5 +8BD + 8 +0 + 62 + 0 + 10 +7689.786245 + 20 +2916.815472 + 30 +0.0 + 11 +7822.368767 + 21 +3049.397994 + 31 +0.0 + 0 +ENDBLK + 5 +8BE + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X38 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X38 + 1 + + 0 +LINE + 5 +8C0 + 8 +0 + 62 + 0 + 10 +6000.0 + 20 +5022.94732 + 30 +0.0 + 11 +6025.0 + 21 +5022.94732 + 31 +0.0 + 0 +LINE + 5 +8C1 + 8 +0 + 62 + 0 + 10 +6075.0 + 20 +5022.94732 + 30 +0.0 + 11 +6100.0 + 21 +5022.94732 + 31 +0.0 + 0 +LINE + 5 +8C2 + 8 +0 + 62 + 0 + 10 +5968.4375 + 20 +5044.597955 + 30 +0.0 + 11 +5987.5 + 21 +5044.597955 + 31 +0.0 + 0 +LINE + 5 +8C3 + 8 +0 + 62 + 0 + 10 +6037.5 + 20 +5044.597955 + 30 +0.0 + 11 +6062.5 + 21 +5044.597955 + 31 +0.0 + 0 +LINE + 5 +8C4 + 8 +0 + 62 + 0 + 10 +6112.5 + 20 +5044.597955 + 30 +0.0 + 11 +6137.5 + 21 +5044.597955 + 31 +0.0 + 0 +LINE + 5 +8C5 + 8 +0 + 62 + 0 + 10 +6000.0 + 20 +5066.24859 + 30 +0.0 + 11 +6025.0 + 21 +5066.24859 + 31 +0.0 + 0 +LINE + 5 +8C6 + 8 +0 + 62 + 0 + 10 +6075.0 + 20 +5066.24859 + 30 +0.0 + 11 +6100.0 + 21 +5066.24859 + 31 +0.0 + 0 +LINE + 5 +8C7 + 8 +0 + 62 + 0 + 10 +5968.4375 + 20 +5087.899225 + 30 +0.0 + 11 +5987.5 + 21 +5087.899225 + 31 +0.0 + 0 +LINE + 5 +8C8 + 8 +0 + 62 + 0 + 10 +6037.5 + 20 +5087.899225 + 30 +0.0 + 11 +6062.5 + 21 +5087.899225 + 31 +0.0 + 0 +LINE + 5 +8C9 + 8 +0 + 62 + 0 + 10 +6112.5 + 20 +5087.899225 + 30 +0.0 + 11 +6137.5 + 21 +5087.899225 + 31 +0.0 + 0 +LINE + 5 +8CA + 8 +0 + 62 + 0 + 10 +6000.0 + 20 +5109.54986 + 30 +0.0 + 11 +6025.0 + 21 +5109.54986 + 31 +0.0 + 0 +LINE + 5 +8CB + 8 +0 + 62 + 0 + 10 +6075.0 + 20 +5109.54986 + 30 +0.0 + 11 +6100.0 + 21 +5109.54986 + 31 +0.0 + 0 +LINE + 5 +8CC + 8 +0 + 62 + 0 + 10 +5968.4375 + 20 +5131.200495 + 30 +0.0 + 11 +5987.5 + 21 +5131.200495 + 31 +0.0 + 0 +LINE + 5 +8CD + 8 +0 + 62 + 0 + 10 +6037.5 + 20 +5131.200495 + 30 +0.0 + 11 +6062.5 + 21 +5131.200495 + 31 +0.0 + 0 +LINE + 5 +8CE + 8 +0 + 62 + 0 + 10 +6112.5 + 20 +5131.200495 + 30 +0.0 + 11 +6137.5 + 21 +5131.200495 + 31 +0.0 + 0 +LINE + 5 +8CF + 8 +0 + 62 + 0 + 10 +6000.0 + 20 +5152.85113 + 30 +0.0 + 11 +6025.0 + 21 +5152.85113 + 31 +0.0 + 0 +LINE + 5 +8D0 + 8 +0 + 62 + 0 + 10 +6075.0 + 20 +5152.85113 + 30 +0.0 + 11 +6100.0 + 21 +5152.85113 + 31 +0.0 + 0 +LINE + 5 +8D1 + 8 +0 + 62 + 0 + 10 +6150.0 + 20 +5152.85113 + 30 +0.0 + 11 +6157.140452 + 21 +5152.85113 + 31 +0.0 + 0 +LINE + 5 +8D2 + 8 +0 + 62 + 0 + 10 +5968.4375 + 20 +5174.501765 + 30 +0.0 + 11 +5987.5 + 21 +5174.501765 + 31 +0.0 + 0 +LINE + 5 +8D3 + 8 +0 + 62 + 0 + 10 +6037.5 + 20 +5174.501765 + 30 +0.0 + 11 +6062.5 + 21 +5174.501765 + 31 +0.0 + 0 +LINE + 5 +8D4 + 8 +0 + 62 + 0 + 10 +6112.5 + 20 +5174.501765 + 30 +0.0 + 11 +6137.5 + 21 +5174.501765 + 31 +0.0 + 0 +LINE + 5 +8D5 + 8 +0 + 62 + 0 + 10 +6000.0 + 20 +5196.1524 + 30 +0.0 + 11 +6025.0 + 21 +5196.1524 + 31 +0.0 + 0 +LINE + 5 +8D6 + 8 +0 + 62 + 0 + 10 +6075.0 + 20 +5196.1524 + 30 +0.0 + 11 +6100.0 + 21 +5196.1524 + 31 +0.0 + 0 +LINE + 5 +8D7 + 8 +0 + 62 + 0 + 10 +6150.0 + 20 +5196.1524 + 30 +0.0 + 11 +6174.46096 + 21 +5196.1524 + 31 +0.0 + 0 +LINE + 5 +8D8 + 8 +0 + 62 + 0 + 10 +5968.4375 + 20 +5217.803035 + 30 +0.0 + 11 +5987.5 + 21 +5217.803035 + 31 +0.0 + 0 +LINE + 5 +8D9 + 8 +0 + 62 + 0 + 10 +6037.5 + 20 +5217.803035 + 30 +0.0 + 11 +6062.5 + 21 +5217.803035 + 31 +0.0 + 0 +LINE + 5 +8DA + 8 +0 + 62 + 0 + 10 +6112.5 + 20 +5217.803035 + 30 +0.0 + 11 +6137.5 + 21 +5217.803035 + 31 +0.0 + 0 +LINE + 5 +8DB + 8 +0 + 62 + 0 + 10 +6000.0 + 20 +5239.45367 + 30 +0.0 + 11 +6025.0 + 21 +5239.45367 + 31 +0.0 + 0 +LINE + 5 +8DC + 8 +0 + 62 + 0 + 10 +6075.0 + 20 +5239.45367 + 30 +0.0 + 11 +6100.0 + 21 +5239.45367 + 31 +0.0 + 0 +LINE + 5 +8DD + 8 +0 + 62 + 0 + 10 +6150.0 + 20 +5239.45367 + 30 +0.0 + 11 +6175.0 + 21 +5239.45367 + 31 +0.0 + 0 +LINE + 5 +8DE + 8 +0 + 62 + 0 + 10 +5968.4375 + 20 +5261.104305 + 30 +0.0 + 11 +5987.5 + 21 +5261.104305 + 31 +0.0 + 0 +LINE + 5 +8DF + 8 +0 + 62 + 0 + 10 +6037.5 + 20 +5261.104305 + 30 +0.0 + 11 +6062.5 + 21 +5261.104305 + 31 +0.0 + 0 +LINE + 5 +8E0 + 8 +0 + 62 + 0 + 10 +6112.5 + 20 +5261.104305 + 30 +0.0 + 11 +6137.5 + 21 +5261.104305 + 31 +0.0 + 0 +LINE + 5 +8E1 + 8 +0 + 62 + 0 + 10 +6000.0 + 20 +5282.75494 + 30 +0.0 + 11 +6025.0 + 21 +5282.75494 + 31 +0.0 + 0 +LINE + 5 +8E2 + 8 +0 + 62 + 0 + 10 +6075.0 + 20 +5282.75494 + 30 +0.0 + 11 +6100.0 + 21 +5282.75494 + 31 +0.0 + 0 +LINE + 5 +8E3 + 8 +0 + 62 + 0 + 10 +6150.0 + 20 +5282.75494 + 30 +0.0 + 11 +6175.0 + 21 +5282.75494 + 31 +0.0 + 0 +LINE + 5 +8E4 + 8 +0 + 62 + 0 + 10 +5968.4375 + 20 +5304.405575 + 30 +0.0 + 11 +5987.5 + 21 +5304.405575 + 31 +0.0 + 0 +LINE + 5 +8E5 + 8 +0 + 62 + 0 + 10 +6037.5 + 20 +5304.405575 + 30 +0.0 + 11 +6062.5 + 21 +5304.405575 + 31 +0.0 + 0 +LINE + 5 +8E6 + 8 +0 + 62 + 0 + 10 +6112.5 + 20 +5304.405575 + 30 +0.0 + 11 +6137.5 + 21 +5304.405575 + 31 +0.0 + 0 +LINE + 5 +8E7 + 8 +0 + 62 + 0 + 10 +6000.0 + 20 +5326.05621 + 30 +0.0 + 11 +6025.0 + 21 +5326.05621 + 31 +0.0 + 0 +LINE + 5 +8E8 + 8 +0 + 62 + 0 + 10 +6075.0 + 20 +5326.05621 + 30 +0.0 + 11 +6100.0 + 21 +5326.05621 + 31 +0.0 + 0 +LINE + 5 +8E9 + 8 +0 + 62 + 0 + 10 +6150.0 + 20 +5326.05621 + 30 +0.0 + 11 +6175.0 + 21 +5326.05621 + 31 +0.0 + 0 +LINE + 5 +8EA + 8 +0 + 62 + 0 + 10 +5968.4375 + 20 +5347.706845 + 30 +0.0 + 11 +5987.5 + 21 +5347.706845 + 31 +0.0 + 0 +LINE + 5 +8EB + 8 +0 + 62 + 0 + 10 +6037.5 + 20 +5347.706845 + 30 +0.0 + 11 +6062.5 + 21 +5347.706845 + 31 +0.0 + 0 +LINE + 5 +8EC + 8 +0 + 62 + 0 + 10 +6112.5 + 20 +5347.706845 + 30 +0.0 + 11 +6137.5 + 21 +5347.706845 + 31 +0.0 + 0 +LINE + 5 +8ED + 8 +0 + 62 + 0 + 10 +6000.0 + 20 +5369.35748 + 30 +0.0 + 11 +6025.0 + 21 +5369.35748 + 31 +0.0 + 0 +LINE + 5 +8EE + 8 +0 + 62 + 0 + 10 +6075.0 + 20 +5369.35748 + 30 +0.0 + 11 +6100.0 + 21 +5369.35748 + 31 +0.0 + 0 +LINE + 5 +8EF + 8 +0 + 62 + 0 + 10 +6150.0 + 20 +5369.35748 + 30 +0.0 + 11 +6175.0 + 21 +5369.35748 + 31 +0.0 + 0 +LINE + 5 +8F0 + 8 +0 + 62 + 0 + 10 +5968.4375 + 20 +5391.008115 + 30 +0.0 + 11 +5987.5 + 21 +5391.008115 + 31 +0.0 + 0 +LINE + 5 +8F1 + 8 +0 + 62 + 0 + 10 +6037.5 + 20 +5391.008115 + 30 +0.0 + 11 +6062.5 + 21 +5391.008115 + 31 +0.0 + 0 +LINE + 5 +8F2 + 8 +0 + 62 + 0 + 10 +6112.5 + 20 +5391.008115 + 30 +0.0 + 11 +6137.5 + 21 +5391.008115 + 31 +0.0 + 0 +LINE + 5 +8F3 + 8 +0 + 62 + 0 + 10 +6000.0 + 20 +5412.65875 + 30 +0.0 + 11 +6025.0 + 21 +5412.65875 + 31 +0.0 + 0 +LINE + 5 +8F4 + 8 +0 + 62 + 0 + 10 +6075.0 + 20 +5412.65875 + 30 +0.0 + 11 +6100.0 + 21 +5412.65875 + 31 +0.0 + 0 +LINE + 5 +8F5 + 8 +0 + 62 + 0 + 10 +6150.0 + 20 +5412.65875 + 30 +0.0 + 11 +6175.0 + 21 +5412.65875 + 31 +0.0 + 0 +LINE + 5 +8F6 + 8 +0 + 62 + 0 + 10 +5968.4375 + 20 +5434.309385 + 30 +0.0 + 11 +5987.5 + 21 +5434.309385 + 31 +0.0 + 0 +LINE + 5 +8F7 + 8 +0 + 62 + 0 + 10 +6037.5 + 20 +5434.309385 + 30 +0.0 + 11 +6062.5 + 21 +5434.309385 + 31 +0.0 + 0 +LINE + 5 +8F8 + 8 +0 + 62 + 0 + 10 +6112.5 + 20 +5434.309385 + 30 +0.0 + 11 +6137.5 + 21 +5434.309385 + 31 +0.0 + 0 +LINE + 5 +8F9 + 8 +0 + 62 + 0 + 10 +6000.0 + 20 +5455.96002 + 30 +0.0 + 11 +6025.0 + 21 +5455.96002 + 31 +0.0 + 0 +LINE + 5 +8FA + 8 +0 + 62 + 0 + 10 +6075.0 + 20 +5455.96002 + 30 +0.0 + 11 +6100.0 + 21 +5455.96002 + 31 +0.0 + 0 +LINE + 5 +8FB + 8 +0 + 62 + 0 + 10 +6150.0 + 20 +5455.96002 + 30 +0.0 + 11 +6175.0 + 21 +5455.96002 + 31 +0.0 + 0 +LINE + 5 +8FC + 8 +0 + 62 + 0 + 10 +5968.4375 + 20 +5477.610655 + 30 +0.0 + 11 +5987.5 + 21 +5477.610655 + 31 +0.0 + 0 +LINE + 5 +8FD + 8 +0 + 62 + 0 + 10 +6037.5 + 20 +5477.610655 + 30 +0.0 + 11 +6062.5 + 21 +5477.610655 + 31 +0.0 + 0 +LINE + 5 +8FE + 8 +0 + 62 + 0 + 10 +6112.5 + 20 +5477.610655 + 30 +0.0 + 11 +6137.5 + 21 +5477.610655 + 31 +0.0 + 0 +LINE + 5 +8FF + 8 +0 + 62 + 0 + 10 +6000.0 + 20 +5499.26129 + 30 +0.0 + 11 +6025.0 + 21 +5499.26129 + 31 +0.0 + 0 +LINE + 5 +900 + 8 +0 + 62 + 0 + 10 +6075.0 + 20 +5499.26129 + 30 +0.0 + 11 +6100.0 + 21 +5499.26129 + 31 +0.0 + 0 +LINE + 5 +901 + 8 +0 + 62 + 0 + 10 +6150.0 + 20 +5499.26129 + 30 +0.0 + 11 +6175.0 + 21 +5499.26129 + 31 +0.0 + 0 +LINE + 5 +902 + 8 +0 + 62 + 0 + 10 +5968.4375 + 20 +5520.911925 + 30 +0.0 + 11 +5987.5 + 21 +5520.911925 + 31 +0.0 + 0 +LINE + 5 +903 + 8 +0 + 62 + 0 + 10 +6037.5 + 20 +5520.911925 + 30 +0.0 + 11 +6062.5 + 21 +5520.911925 + 31 +0.0 + 0 +LINE + 5 +904 + 8 +0 + 62 + 0 + 10 +6112.5 + 20 +5520.911925 + 30 +0.0 + 11 +6137.5 + 21 +5520.911925 + 31 +0.0 + 0 +LINE + 5 +905 + 8 +0 + 62 + 0 + 10 +6000.0 + 20 +5542.56256 + 30 +0.0 + 11 +6025.0 + 21 +5542.56256 + 31 +0.0 + 0 +LINE + 5 +906 + 8 +0 + 62 + 0 + 10 +6075.0 + 20 +5542.56256 + 30 +0.0 + 11 +6100.0 + 21 +5542.56256 + 31 +0.0 + 0 +LINE + 5 +907 + 8 +0 + 62 + 0 + 10 +6150.0 + 20 +5542.56256 + 30 +0.0 + 11 +6175.0 + 21 +5542.56256 + 31 +0.0 + 0 +LINE + 5 +908 + 8 +0 + 62 + 0 + 10 +5968.4375 + 20 +5564.213195 + 30 +0.0 + 11 +5987.5 + 21 +5564.213195 + 31 +0.0 + 0 +LINE + 5 +909 + 8 +0 + 62 + 0 + 10 +6037.5 + 20 +5564.213195 + 30 +0.0 + 11 +6062.5 + 21 +5564.213195 + 31 +0.0 + 0 +LINE + 5 +90A + 8 +0 + 62 + 0 + 10 +6112.5 + 20 +5564.213195 + 30 +0.0 + 11 +6137.5 + 21 +5564.213195 + 31 +0.0 + 0 +LINE + 5 +90B + 8 +0 + 62 + 0 + 10 +6000.0 + 20 +5585.86383 + 30 +0.0 + 11 +6025.0 + 21 +5585.86383 + 31 +0.0 + 0 +LINE + 5 +90C + 8 +0 + 62 + 0 + 10 +6075.0 + 20 +5585.86383 + 30 +0.0 + 11 +6100.0 + 21 +5585.86383 + 31 +0.0 + 0 +LINE + 5 +90D + 8 +0 + 62 + 0 + 10 +6150.0 + 20 +5585.86383 + 30 +0.0 + 11 +6175.0 + 21 +5585.86383 + 31 +0.0 + 0 +LINE + 5 +90E + 8 +0 + 62 + 0 + 10 +5968.4375 + 20 +5607.514465 + 30 +0.0 + 11 +5987.5 + 21 +5607.514465 + 31 +0.0 + 0 +LINE + 5 +90F + 8 +0 + 62 + 0 + 10 +6037.5 + 20 +5607.514465 + 30 +0.0 + 11 +6062.5 + 21 +5607.514465 + 31 +0.0 + 0 +LINE + 5 +910 + 8 +0 + 62 + 0 + 10 +6112.5 + 20 +5607.514465 + 30 +0.0 + 11 +6137.5 + 21 +5607.514465 + 31 +0.0 + 0 +LINE + 5 +911 + 8 +0 + 62 + 0 + 10 +6000.0 + 20 +5629.1651 + 30 +0.0 + 11 +6025.0 + 21 +5629.1651 + 31 +0.0 + 0 +LINE + 5 +912 + 8 +0 + 62 + 0 + 10 +6075.0 + 20 +5629.1651 + 30 +0.0 + 11 +6100.0 + 21 +5629.1651 + 31 +0.0 + 0 +LINE + 5 +913 + 8 +0 + 62 + 0 + 10 +6150.0 + 20 +5629.1651 + 30 +0.0 + 11 +6175.0 + 21 +5629.1651 + 31 +0.0 + 0 +LINE + 5 +914 + 8 +0 + 62 + 0 + 10 +5968.4375 + 20 +5650.815735 + 30 +0.0 + 11 +5987.5 + 21 +5650.815735 + 31 +0.0 + 0 +LINE + 5 +915 + 8 +0 + 62 + 0 + 10 +6037.5 + 20 +5650.815735 + 30 +0.0 + 11 +6062.5 + 21 +5650.815735 + 31 +0.0 + 0 +LINE + 5 +916 + 8 +0 + 62 + 0 + 10 +6112.5 + 20 +5650.815735 + 30 +0.0 + 11 +6137.5 + 21 +5650.815735 + 31 +0.0 + 0 +LINE + 5 +917 + 8 +0 + 62 + 0 + 10 +6000.0 + 20 +5672.46637 + 30 +0.0 + 11 +6025.0 + 21 +5672.46637 + 31 +0.0 + 0 +LINE + 5 +918 + 8 +0 + 62 + 0 + 10 +6075.0 + 20 +5672.46637 + 30 +0.0 + 11 +6100.0 + 21 +5672.46637 + 31 +0.0 + 0 +LINE + 5 +919 + 8 +0 + 62 + 0 + 10 +6150.0 + 20 +5672.46637 + 30 +0.0 + 11 +6175.0 + 21 +5672.46637 + 31 +0.0 + 0 +LINE + 5 +91A + 8 +0 + 62 + 0 + 10 +5968.4375 + 20 +5694.117005 + 30 +0.0 + 11 +5987.5 + 21 +5694.117005 + 31 +0.0 + 0 +LINE + 5 +91B + 8 +0 + 62 + 0 + 10 +6037.5 + 20 +5694.117005 + 30 +0.0 + 11 +6062.5 + 21 +5694.117005 + 31 +0.0 + 0 +LINE + 5 +91C + 8 +0 + 62 + 0 + 10 +6112.5 + 20 +5694.117005 + 30 +0.0 + 11 +6137.5 + 21 +5694.117005 + 31 +0.0 + 0 +LINE + 5 +91D + 8 +0 + 62 + 0 + 10 +6000.0 + 20 +5715.76764 + 30 +0.0 + 11 +6025.0 + 21 +5715.76764 + 31 +0.0 + 0 +LINE + 5 +91E + 8 +0 + 62 + 0 + 10 +6075.0 + 20 +5715.76764 + 30 +0.0 + 11 +6100.0 + 21 +5715.76764 + 31 +0.0 + 0 +LINE + 5 +91F + 8 +0 + 62 + 0 + 10 +6150.0 + 20 +5715.76764 + 30 +0.0 + 11 +6175.0 + 21 +5715.76764 + 31 +0.0 + 0 +LINE + 5 +920 + 8 +0 + 62 + 0 + 10 +5968.4375 + 20 +5737.418275 + 30 +0.0 + 11 +5987.5 + 21 +5737.418275 + 31 +0.0 + 0 +LINE + 5 +921 + 8 +0 + 62 + 0 + 10 +6037.5 + 20 +5737.418275 + 30 +0.0 + 11 +6062.5 + 21 +5737.418275 + 31 +0.0 + 0 +LINE + 5 +922 + 8 +0 + 62 + 0 + 10 +6112.5 + 20 +5737.418275 + 30 +0.0 + 11 +6137.5 + 21 +5737.418275 + 31 +0.0 + 0 +LINE + 5 +923 + 8 +0 + 62 + 0 + 10 +6000.0 + 20 +5759.06891 + 30 +0.0 + 11 +6025.0 + 21 +5759.06891 + 31 +0.0 + 0 +LINE + 5 +924 + 8 +0 + 62 + 0 + 10 +6075.0 + 20 +5759.06891 + 30 +0.0 + 11 +6100.0 + 21 +5759.06891 + 31 +0.0 + 0 +LINE + 5 +925 + 8 +0 + 62 + 0 + 10 +6150.0 + 20 +5759.06891 + 30 +0.0 + 11 +6175.0 + 21 +5759.06891 + 31 +0.0 + 0 +LINE + 5 +926 + 8 +0 + 62 + 0 + 10 +5968.4375 + 20 +5780.719545 + 30 +0.0 + 11 +5987.5 + 21 +5780.719545 + 31 +0.0 + 0 +LINE + 5 +927 + 8 +0 + 62 + 0 + 10 +6037.5 + 20 +5780.719545 + 30 +0.0 + 11 +6062.5 + 21 +5780.719545 + 31 +0.0 + 0 +LINE + 5 +928 + 8 +0 + 62 + 0 + 10 +6112.5 + 20 +5780.719545 + 30 +0.0 + 11 +6137.5 + 21 +5780.719545 + 31 +0.0 + 0 +LINE + 5 +929 + 8 +0 + 62 + 0 + 10 +5968.4375 + 20 +5001.296685 + 30 +0.0 + 11 +5987.5 + 21 +5001.296685 + 31 +0.0 + 0 +LINE + 5 +92A + 8 +0 + 62 + 0 + 10 +6037.5 + 20 +5001.296685 + 30 +0.0 + 11 +6062.5 + 21 +5001.296685 + 31 +0.0 + 0 +LINE + 5 +92B + 8 +0 + 62 + 0 + 10 +6112.5 + 20 +5001.296685 + 30 +0.0 + 11 +6137.5 + 21 +5001.296685 + 31 +0.0 + 0 +LINE + 5 +92C + 8 +0 + 62 + 0 + 10 +6000.0 + 20 +4979.64605 + 30 +0.0 + 11 +6025.0 + 21 +4979.64605 + 31 +0.0 + 0 +LINE + 5 +92D + 8 +0 + 62 + 0 + 10 +6075.0 + 20 +4979.64605 + 30 +0.0 + 11 +6100.0 + 21 +4979.64605 + 31 +0.0 + 0 +LINE + 5 +92E + 8 +0 + 62 + 0 + 10 +5968.4375 + 20 +4957.995415 + 30 +0.0 + 11 +5987.5 + 21 +4957.995415 + 31 +0.0 + 0 +LINE + 5 +92F + 8 +0 + 62 + 0 + 10 +6037.5 + 20 +4957.995415 + 30 +0.0 + 11 +6062.5 + 21 +4957.995415 + 31 +0.0 + 0 +LINE + 5 +930 + 8 +0 + 62 + 0 + 10 +6112.5 + 20 +4957.995415 + 30 +0.0 + 11 +6137.5 + 21 +4957.995415 + 31 +0.0 + 0 +LINE + 5 +931 + 8 +0 + 62 + 0 + 10 +6000.0 + 20 +4936.34478 + 30 +0.0 + 11 +6025.0 + 21 +4936.34478 + 31 +0.0 + 0 +LINE + 5 +932 + 8 +0 + 62 + 0 + 10 +6075.0 + 20 +4936.34478 + 30 +0.0 + 11 +6100.0 + 21 +4936.34478 + 31 +0.0 + 0 +LINE + 5 +933 + 8 +0 + 62 + 0 + 10 +5968.4375 + 20 +4914.694145 + 30 +0.0 + 11 +5987.5 + 21 +4914.694145 + 31 +0.0 + 0 +LINE + 5 +934 + 8 +0 + 62 + 0 + 10 +6037.5 + 20 +4914.694145 + 30 +0.0 + 11 +6062.5 + 21 +4914.694145 + 31 +0.0 + 0 +LINE + 5 +935 + 8 +0 + 62 + 0 + 10 +6112.5 + 20 +4914.694145 + 30 +0.0 + 11 +6137.5 + 21 +4914.694145 + 31 +0.0 + 0 +LINE + 5 +936 + 8 +0 + 62 + 0 + 10 +6000.0 + 20 +4893.04351 + 30 +0.0 + 11 +6025.0 + 21 +4893.04351 + 31 +0.0 + 0 +LINE + 5 +937 + 8 +0 + 62 + 0 + 10 +6075.0 + 20 +4893.04351 + 30 +0.0 + 11 +6100.0 + 21 +4893.04351 + 31 +0.0 + 0 +LINE + 5 +938 + 8 +0 + 62 + 0 + 10 +5968.4375 + 20 +4871.392875 + 30 +0.0 + 11 +5987.5 + 21 +4871.392875 + 31 +0.0 + 0 +LINE + 5 +939 + 8 +0 + 62 + 0 + 10 +6037.5 + 20 +4871.392875 + 30 +0.0 + 11 +6062.5 + 21 +4871.392875 + 31 +0.0 + 0 +LINE + 5 +93A + 8 +0 + 62 + 0 + 10 +6112.5 + 20 +4871.392875 + 30 +0.0 + 11 +6137.5 + 21 +4871.392875 + 31 +0.0 + 0 +LINE + 5 +93B + 8 +0 + 62 + 0 + 10 +6000.0 + 20 +4849.74224 + 30 +0.0 + 11 +6025.0 + 21 +4849.74224 + 31 +0.0 + 0 +LINE + 5 +93C + 8 +0 + 62 + 0 + 10 +6075.0 + 20 +4849.74224 + 30 +0.0 + 11 +6100.0 + 21 +4849.74224 + 31 +0.0 + 0 +LINE + 5 +93D + 8 +0 + 62 + 0 + 10 +5968.4375 + 20 +4828.091605 + 30 +0.0 + 11 +5987.5 + 21 +4828.091605 + 31 +0.0 + 0 +LINE + 5 +93E + 8 +0 + 62 + 0 + 10 +6037.5 + 20 +4828.091605 + 30 +0.0 + 11 +6062.5 + 21 +4828.091605 + 31 +0.0 + 0 +LINE + 5 +93F + 8 +0 + 62 + 0 + 10 +6112.5 + 20 +4828.091605 + 30 +0.0 + 11 +6137.5 + 21 +4828.091605 + 31 +0.0 + 0 +LINE + 5 +940 + 8 +0 + 62 + 0 + 10 +6000.0 + 20 +4806.44097 + 30 +0.0 + 11 +6025.0 + 21 +4806.44097 + 31 +0.0 + 0 +LINE + 5 +941 + 8 +0 + 62 + 0 + 10 +6075.0 + 20 +4806.44097 + 30 +0.0 + 11 +6100.0 + 21 +4806.44097 + 31 +0.0 + 0 +LINE + 5 +942 + 8 +0 + 62 + 0 + 10 +5968.4375 + 20 +4784.790335 + 30 +0.0 + 11 +5987.5 + 21 +4784.790335 + 31 +0.0 + 0 +LINE + 5 +943 + 8 +0 + 62 + 0 + 10 +6037.5 + 20 +4784.790335 + 30 +0.0 + 11 +6062.5 + 21 +4784.790335 + 31 +0.0 + 0 +LINE + 5 +944 + 8 +0 + 62 + 0 + 10 +6112.5 + 20 +4784.790335 + 30 +0.0 + 11 +6137.5 + 21 +4784.790335 + 31 +0.0 + 0 +LINE + 5 +945 + 8 +0 + 62 + 0 + 10 +6000.0 + 20 +4763.1397 + 30 +0.0 + 11 +6025.0 + 21 +4763.1397 + 31 +0.0 + 0 +LINE + 5 +946 + 8 +0 + 62 + 0 + 10 +6075.0 + 20 +4763.1397 + 30 +0.0 + 11 +6100.0 + 21 +4763.1397 + 31 +0.0 + 0 +LINE + 5 +947 + 8 +0 + 62 + 0 + 10 +5968.4375 + 20 +4741.489065 + 30 +0.0 + 11 +5987.5 + 21 +4741.489065 + 31 +0.0 + 0 +LINE + 5 +948 + 8 +0 + 62 + 0 + 10 +6037.5 + 20 +4741.489065 + 30 +0.0 + 11 +6062.5 + 21 +4741.489065 + 31 +0.0 + 0 +LINE + 5 +949 + 8 +0 + 62 + 0 + 10 +6112.5 + 20 +4741.489065 + 30 +0.0 + 11 +6137.5 + 21 +4741.489065 + 31 +0.0 + 0 +LINE + 5 +94A + 8 +0 + 62 + 0 + 10 +6000.0 + 20 +4719.83843 + 30 +0.0 + 11 +6025.0 + 21 +4719.83843 + 31 +0.0 + 0 +LINE + 5 +94B + 8 +0 + 62 + 0 + 10 +6075.0 + 20 +4719.83843 + 30 +0.0 + 11 +6100.0 + 21 +4719.83843 + 31 +0.0 + 0 +LINE + 5 +94C + 8 +0 + 62 + 0 + 10 +5968.4375 + 20 +4698.187795 + 30 +0.0 + 11 +5987.5 + 21 +4698.187795 + 31 +0.0 + 0 +LINE + 5 +94D + 8 +0 + 62 + 0 + 10 +6037.5 + 20 +4698.187795 + 30 +0.0 + 11 +6062.5 + 21 +4698.187795 + 31 +0.0 + 0 +LINE + 5 +94E + 8 +0 + 62 + 0 + 10 +6112.5 + 20 +4698.187795 + 30 +0.0 + 11 +6137.5 + 21 +4698.187795 + 31 +0.0 + 0 +LINE + 5 +94F + 8 +0 + 62 + 0 + 10 +6000.0 + 20 +4676.53716 + 30 +0.0 + 11 +6025.0 + 21 +4676.53716 + 31 +0.0 + 0 +LINE + 5 +950 + 8 +0 + 62 + 0 + 10 +6075.0 + 20 +4676.53716 + 30 +0.0 + 11 +6100.0 + 21 +4676.53716 + 31 +0.0 + 0 +LINE + 5 +951 + 8 +0 + 62 + 0 + 10 +5968.4375 + 20 +4654.886525 + 30 +0.0 + 11 +5987.5 + 21 +4654.886525 + 31 +0.0 + 0 +LINE + 5 +952 + 8 +0 + 62 + 0 + 10 +6037.5 + 20 +4654.886525 + 30 +0.0 + 11 +6062.5 + 21 +4654.886525 + 31 +0.0 + 0 +LINE + 5 +953 + 8 +0 + 62 + 0 + 10 +6112.5 + 20 +4654.886525 + 30 +0.0 + 11 +6137.5 + 21 +4654.886525 + 31 +0.0 + 0 +LINE + 5 +954 + 8 +0 + 62 + 0 + 10 +6000.0 + 20 +4633.23589 + 30 +0.0 + 11 +6025.0 + 21 +4633.23589 + 31 +0.0 + 0 +LINE + 5 +955 + 8 +0 + 62 + 0 + 10 +6075.0 + 20 +4633.23589 + 30 +0.0 + 11 +6100.0 + 21 +4633.23589 + 31 +0.0 + 0 +LINE + 5 +956 + 8 +0 + 62 + 0 + 10 +5968.4375 + 20 +4611.585255 + 30 +0.0 + 11 +5987.5 + 21 +4611.585255 + 31 +0.0 + 0 +LINE + 5 +957 + 8 +0 + 62 + 0 + 10 +6037.5 + 20 +4611.585255 + 30 +0.0 + 11 +6062.5 + 21 +4611.585255 + 31 +0.0 + 0 +LINE + 5 +958 + 8 +0 + 62 + 0 + 10 +6112.5 + 20 +4611.585255 + 30 +0.0 + 11 +6137.5 + 21 +4611.585255 + 31 +0.0 + 0 +LINE + 5 +959 + 8 +0 + 62 + 0 + 10 +6000.0 + 20 +4589.93462 + 30 +0.0 + 11 +6025.0 + 21 +4589.93462 + 31 +0.0 + 0 +LINE + 5 +95A + 8 +0 + 62 + 0 + 10 +6075.0 + 20 +4589.93462 + 30 +0.0 + 11 +6100.0 + 21 +4589.93462 + 31 +0.0 + 0 +LINE + 5 +95B + 8 +0 + 62 + 0 + 10 +5968.4375 + 20 +4568.283985 + 30 +0.0 + 11 +5987.5 + 21 +4568.283985 + 31 +0.0 + 0 +LINE + 5 +95C + 8 +0 + 62 + 0 + 10 +6037.5 + 20 +4568.283985 + 30 +0.0 + 11 +6062.5 + 21 +4568.283985 + 31 +0.0 + 0 +LINE + 5 +95D + 8 +0 + 62 + 0 + 10 +6112.5 + 20 +4568.283985 + 30 +0.0 + 11 +6137.5 + 21 +4568.283985 + 31 +0.0 + 0 +LINE + 5 +95E + 8 +0 + 62 + 0 + 10 +6000.0 + 20 +4546.63335 + 30 +0.0 + 11 +6025.0 + 21 +4546.63335 + 31 +0.0 + 0 +LINE + 5 +95F + 8 +0 + 62 + 0 + 10 +6075.0 + 20 +4546.63335 + 30 +0.0 + 11 +6100.0 + 21 +4546.63335 + 31 +0.0 + 0 +LINE + 5 +960 + 8 +0 + 62 + 0 + 10 +5968.4375 + 20 +4524.982715 + 30 +0.0 + 11 +5987.5 + 21 +4524.982715 + 31 +0.0 + 0 +LINE + 5 +961 + 8 +0 + 62 + 0 + 10 +6037.5 + 20 +4524.982715 + 30 +0.0 + 11 +6062.5 + 21 +4524.982715 + 31 +0.0 + 0 +LINE + 5 +962 + 8 +0 + 62 + 0 + 10 +6112.5 + 20 +4524.982715 + 30 +0.0 + 11 +6137.5 + 21 +4524.982715 + 31 +0.0 + 0 +LINE + 5 +963 + 8 +0 + 62 + 0 + 10 +6000.0 + 20 +4503.33208 + 30 +0.0 + 11 +6025.0 + 21 +4503.33208 + 31 +0.0 + 0 +LINE + 5 +964 + 8 +0 + 62 + 0 + 10 +6075.0 + 20 +4503.33208 + 30 +0.0 + 11 +6100.0 + 21 +4503.33208 + 31 +0.0 + 0 +LINE + 5 +965 + 8 +0 + 62 + 0 + 10 +5968.4375 + 20 +4481.681445 + 30 +0.0 + 11 +5987.5 + 21 +4481.681445 + 31 +0.0 + 0 +LINE + 5 +966 + 8 +0 + 62 + 0 + 10 +6037.5 + 20 +4481.681445 + 30 +0.0 + 11 +6062.5 + 21 +4481.681445 + 31 +0.0 + 0 +LINE + 5 +967 + 8 +0 + 62 + 0 + 10 +6112.5 + 20 +4481.681445 + 30 +0.0 + 11 +6136.666968 + 21 +4481.681445 + 31 +0.0 + 0 +LINE + 5 +968 + 8 +0 + 62 + 0 + 10 +6000.0 + 20 +4460.03081 + 30 +0.0 + 11 +6025.0 + 21 +4460.03081 + 31 +0.0 + 0 +LINE + 5 +969 + 8 +0 + 62 + 0 + 10 +6075.0 + 20 +4460.03081 + 30 +0.0 + 11 +6100.0 + 21 +4460.03081 + 31 +0.0 + 0 +LINE + 5 +96A + 8 +0 + 62 + 0 + 10 +5968.4375 + 20 +4438.380175 + 30 +0.0 + 11 +5987.5 + 21 +4438.380175 + 31 +0.0 + 0 +LINE + 5 +96B + 8 +0 + 62 + 0 + 10 +6037.5 + 20 +4438.380175 + 30 +0.0 + 11 +6062.5 + 21 +4438.380175 + 31 +0.0 + 0 +LINE + 5 +96C + 8 +0 + 62 + 0 + 10 +6112.5 + 20 +4438.380175 + 30 +0.0 + 11 +6135.783269 + 21 +4438.380175 + 31 +0.0 + 0 +LINE + 5 +96D + 8 +0 + 62 + 0 + 10 +6000.0 + 20 +4416.72954 + 30 +0.0 + 11 +6025.0 + 21 +4416.72954 + 31 +0.0 + 0 +LINE + 5 +96E + 8 +0 + 62 + 0 + 10 +6075.0 + 20 +4416.72954 + 30 +0.0 + 11 +6100.0 + 21 +4416.72954 + 31 +0.0 + 0 +LINE + 5 +96F + 8 +0 + 62 + 0 + 10 +5968.4375 + 20 +4395.078905 + 30 +0.0 + 11 +5987.5 + 21 +4395.078905 + 31 +0.0 + 0 +LINE + 5 +970 + 8 +0 + 62 + 0 + 10 +6037.5 + 20 +4395.078905 + 30 +0.0 + 11 +6062.5 + 21 +4395.078905 + 31 +0.0 + 0 +LINE + 5 +971 + 8 +0 + 62 + 0 + 10 +6112.5 + 20 +4395.078905 + 30 +0.0 + 11 +6129.094686 + 21 +4395.078905 + 31 +0.0 + 0 +LINE + 5 +972 + 8 +0 + 62 + 0 + 10 +6000.0 + 20 +4373.42827 + 30 +0.0 + 11 +6025.0 + 21 +4373.42827 + 31 +0.0 + 0 +LINE + 5 +973 + 8 +0 + 62 + 0 + 10 +6075.0 + 20 +4373.42827 + 30 +0.0 + 11 +6100.0 + 21 +4373.42827 + 31 +0.0 + 0 +LINE + 5 +974 + 8 +0 + 62 + 0 + 10 +5968.4375 + 20 +4351.777635 + 30 +0.0 + 11 +5987.5 + 21 +4351.777635 + 31 +0.0 + 0 +LINE + 5 +975 + 8 +0 + 62 + 0 + 10 +6037.5 + 20 +4351.777635 + 30 +0.0 + 11 +6062.5 + 21 +4351.777635 + 31 +0.0 + 0 +LINE + 5 +976 + 8 +0 + 62 + 0 + 10 +6000.0 + 20 +4330.127 + 30 +0.0 + 11 +6025.0 + 21 +4330.127 + 31 +0.0 + 0 +LINE + 5 +977 + 8 +0 + 62 + 0 + 10 +5968.4375 + 20 +4308.476365 + 30 +0.0 + 11 +5987.5 + 21 +4308.476365 + 31 +0.0 + 0 +LINE + 5 +978 + 8 +0 + 62 + 0 + 10 +6145.230697 + 20 +4901.304139 + 30 +0.0 + 11 +6137.499971 + 21 +4914.694149 + 31 +0.0 + 0 +LINE + 5 +979 + 8 +0 + 62 + 0 + 10 +6112.499971 + 20 +4957.99542 + 30 +0.0 + 11 +6099.999971 + 21 +4979.646055 + 31 +0.0 + 0 +LINE + 5 +97A + 8 +0 + 62 + 0 + 10 +6074.999971 + 20 +5022.947325 + 30 +0.0 + 11 +6062.499971 + 21 +5044.59796 + 31 +0.0 + 0 +LINE + 5 +97B + 8 +0 + 62 + 0 + 10 +6037.499971 + 20 +5087.89923 + 30 +0.0 + 11 +6024.999971 + 21 +5109.549865 + 31 +0.0 + 0 +LINE + 5 +97C + 8 +0 + 62 + 0 + 10 +5999.999971 + 20 +5152.851136 + 30 +0.0 + 11 +5987.499971 + 21 +5174.501771 + 31 +0.0 + 0 +LINE + 5 +97D + 8 +0 + 62 + 0 + 10 +6144.377168 + 20 +4859.481224 + 30 +0.0 + 11 +6137.499971 + 21 +4871.392879 + 31 +0.0 + 0 +LINE + 5 +97E + 8 +0 + 62 + 0 + 10 +6112.499971 + 20 +4914.69415 + 30 +0.0 + 11 +6099.999971 + 21 +4936.344785 + 31 +0.0 + 0 +LINE + 5 +97F + 8 +0 + 62 + 0 + 10 +6074.999971 + 20 +4979.646055 + 30 +0.0 + 11 +6062.499971 + 21 +5001.29669 + 31 +0.0 + 0 +LINE + 5 +980 + 8 +0 + 62 + 0 + 10 +6037.499971 + 20 +5044.59796 + 30 +0.0 + 11 +6024.999971 + 21 +5066.248595 + 31 +0.0 + 0 +LINE + 5 +981 + 8 +0 + 62 + 0 + 10 +5999.999971 + 20 +5109.549865 + 30 +0.0 + 11 +5987.499971 + 21 +5131.2005 + 31 +0.0 + 0 +LINE + 5 +982 + 8 +0 + 62 + 0 + 10 +6143.523639 + 20 +4817.65831 + 30 +0.0 + 11 +6137.499971 + 21 +4828.091609 + 31 +0.0 + 0 +LINE + 5 +983 + 8 +0 + 62 + 0 + 10 +6112.499971 + 20 +4871.392879 + 30 +0.0 + 11 +6099.999971 + 21 +4893.043514 + 31 +0.0 + 0 +LINE + 5 +984 + 8 +0 + 62 + 0 + 10 +6074.999971 + 20 +4936.344785 + 30 +0.0 + 11 +6062.499971 + 21 +4957.99542 + 31 +0.0 + 0 +LINE + 5 +985 + 8 +0 + 62 + 0 + 10 +6037.499971 + 20 +5001.29669 + 30 +0.0 + 11 +6024.999971 + 21 +5022.947325 + 31 +0.0 + 0 +LINE + 5 +986 + 8 +0 + 62 + 0 + 10 +5999.999971 + 20 +5066.248595 + 30 +0.0 + 11 +5987.499971 + 21 +5087.89923 + 31 +0.0 + 0 +LINE + 5 +987 + 8 +0 + 62 + 0 + 10 +6142.67011 + 20 +4775.835395 + 30 +0.0 + 11 +6137.499971 + 21 +4784.790339 + 31 +0.0 + 0 +LINE + 5 +988 + 8 +0 + 62 + 0 + 10 +6112.499971 + 20 +4828.091609 + 30 +0.0 + 11 +6099.999971 + 21 +4849.742244 + 31 +0.0 + 0 +LINE + 5 +989 + 8 +0 + 62 + 0 + 10 +6074.999971 + 20 +4893.043515 + 30 +0.0 + 11 +6062.499971 + 21 +4914.69415 + 31 +0.0 + 0 +LINE + 5 +98A + 8 +0 + 62 + 0 + 10 +6037.499971 + 20 +4957.99542 + 30 +0.0 + 11 +6024.999971 + 21 +4979.646055 + 31 +0.0 + 0 +LINE + 5 +98B + 8 +0 + 62 + 0 + 10 +5999.999971 + 20 +5022.947325 + 30 +0.0 + 11 +5987.499971 + 21 +5044.59796 + 31 +0.0 + 0 +LINE + 5 +98C + 8 +0 + 62 + 0 + 10 +6141.816581 + 20 +4734.012481 + 30 +0.0 + 11 +6137.499971 + 21 +4741.489069 + 31 +0.0 + 0 +LINE + 5 +98D + 8 +0 + 62 + 0 + 10 +6112.499971 + 20 +4784.790339 + 30 +0.0 + 11 +6099.999971 + 21 +4806.440974 + 31 +0.0 + 0 +LINE + 5 +98E + 8 +0 + 62 + 0 + 10 +6074.999971 + 20 +4849.742244 + 30 +0.0 + 11 +6062.499971 + 21 +4871.392879 + 31 +0.0 + 0 +LINE + 5 +98F + 8 +0 + 62 + 0 + 10 +6037.499971 + 20 +4914.69415 + 30 +0.0 + 11 +6024.999971 + 21 +4936.344785 + 31 +0.0 + 0 +LINE + 5 +990 + 8 +0 + 62 + 0 + 10 +5999.999971 + 20 +4979.646055 + 30 +0.0 + 11 +5987.499971 + 21 +5001.29669 + 31 +0.0 + 0 +LINE + 5 +991 + 8 +0 + 62 + 0 + 10 +6140.963052 + 20 +4692.189566 + 30 +0.0 + 11 +6137.499971 + 21 +4698.187799 + 31 +0.0 + 0 +LINE + 5 +992 + 8 +0 + 62 + 0 + 10 +6112.499971 + 20 +4741.489069 + 30 +0.0 + 11 +6099.999971 + 21 +4763.139704 + 31 +0.0 + 0 +LINE + 5 +993 + 8 +0 + 62 + 0 + 10 +6074.999971 + 20 +4806.440974 + 30 +0.0 + 11 +6062.499971 + 21 +4828.091609 + 31 +0.0 + 0 +LINE + 5 +994 + 8 +0 + 62 + 0 + 10 +6037.499971 + 20 +4871.39288 + 30 +0.0 + 11 +6024.999971 + 21 +4893.043515 + 31 +0.0 + 0 +LINE + 5 +995 + 8 +0 + 62 + 0 + 10 +5999.999971 + 20 +4936.344785 + 30 +0.0 + 11 +5987.499971 + 21 +4957.99542 + 31 +0.0 + 0 +LINE + 5 +996 + 8 +0 + 62 + 0 + 10 +6140.109523 + 20 +4650.366651 + 30 +0.0 + 11 +6137.499971 + 21 +4654.886529 + 31 +0.0 + 0 +LINE + 5 +997 + 8 +0 + 62 + 0 + 10 +6112.499971 + 20 +4698.187799 + 30 +0.0 + 11 +6099.999971 + 21 +4719.838434 + 31 +0.0 + 0 +LINE + 5 +998 + 8 +0 + 62 + 0 + 10 +6074.999971 + 20 +4763.139704 + 30 +0.0 + 11 +6062.499971 + 21 +4784.790339 + 31 +0.0 + 0 +LINE + 5 +999 + 8 +0 + 62 + 0 + 10 +6037.499971 + 20 +4828.091609 + 30 +0.0 + 11 +6024.999971 + 21 +4849.742244 + 31 +0.0 + 0 +LINE + 5 +99A + 8 +0 + 62 + 0 + 10 +5999.999971 + 20 +4893.043515 + 30 +0.0 + 11 +5987.499971 + 21 +4914.69415 + 31 +0.0 + 0 +LINE + 5 +99B + 8 +0 + 62 + 0 + 10 +6139.255995 + 20 +4608.543737 + 30 +0.0 + 11 +6137.499971 + 21 +4611.585259 + 31 +0.0 + 0 +LINE + 5 +99C + 8 +0 + 62 + 0 + 10 +6112.499971 + 20 +4654.886529 + 30 +0.0 + 11 +6099.999971 + 21 +4676.537164 + 31 +0.0 + 0 +LINE + 5 +99D + 8 +0 + 62 + 0 + 10 +6074.999971 + 20 +4719.838434 + 30 +0.0 + 11 +6062.499971 + 21 +4741.489069 + 31 +0.0 + 0 +LINE + 5 +99E + 8 +0 + 62 + 0 + 10 +6037.499971 + 20 +4784.790339 + 30 +0.0 + 11 +6024.999971 + 21 +4806.440974 + 31 +0.0 + 0 +LINE + 5 +99F + 8 +0 + 62 + 0 + 10 +5999.999971 + 20 +4849.742245 + 30 +0.0 + 11 +5987.499971 + 21 +4871.39288 + 31 +0.0 + 0 +LINE + 5 +9A0 + 8 +0 + 62 + 0 + 10 +6138.402466 + 20 +4566.720822 + 30 +0.0 + 11 +6137.499971 + 21 +4568.283988 + 31 +0.0 + 0 +LINE + 5 +9A1 + 8 +0 + 62 + 0 + 10 +6112.499971 + 20 +4611.585259 + 30 +0.0 + 11 +6099.999971 + 21 +4633.235894 + 31 +0.0 + 0 +LINE + 5 +9A2 + 8 +0 + 62 + 0 + 10 +6074.999971 + 20 +4676.537164 + 30 +0.0 + 11 +6062.499971 + 21 +4698.187799 + 31 +0.0 + 0 +LINE + 5 +9A3 + 8 +0 + 62 + 0 + 10 +6037.499971 + 20 +4741.489069 + 30 +0.0 + 11 +6024.999971 + 21 +4763.139704 + 31 +0.0 + 0 +LINE + 5 +9A4 + 8 +0 + 62 + 0 + 10 +5999.999971 + 20 +4806.440974 + 30 +0.0 + 11 +5987.499971 + 21 +4828.091609 + 31 +0.0 + 0 +LINE + 5 +9A5 + 8 +0 + 62 + 0 + 10 +6137.548937 + 20 +4524.897907 + 30 +0.0 + 11 +6137.499971 + 21 +4524.982718 + 31 +0.0 + 0 +LINE + 5 +9A6 + 8 +0 + 62 + 0 + 10 +6112.499971 + 20 +4568.283988 + 30 +0.0 + 11 +6099.999971 + 21 +4589.934624 + 31 +0.0 + 0 +LINE + 5 +9A7 + 8 +0 + 62 + 0 + 10 +6074.999971 + 20 +4633.235894 + 30 +0.0 + 11 +6062.499971 + 21 +4654.886529 + 31 +0.0 + 0 +LINE + 5 +9A8 + 8 +0 + 62 + 0 + 10 +6037.499971 + 20 +4698.187799 + 30 +0.0 + 11 +6024.999971 + 21 +4719.838434 + 31 +0.0 + 0 +LINE + 5 +9A9 + 8 +0 + 62 + 0 + 10 +5999.999971 + 20 +4763.139704 + 30 +0.0 + 11 +5987.499971 + 21 +4784.790339 + 31 +0.0 + 0 +LINE + 5 +9AA + 8 +0 + 62 + 0 + 10 +6112.499971 + 20 +4524.982718 + 30 +0.0 + 11 +6099.999971 + 21 +4546.633353 + 31 +0.0 + 0 +LINE + 5 +9AB + 8 +0 + 62 + 0 + 10 +6074.999971 + 20 +4589.934624 + 30 +0.0 + 11 +6062.499971 + 21 +4611.585259 + 31 +0.0 + 0 +LINE + 5 +9AC + 8 +0 + 62 + 0 + 10 +6037.499971 + 20 +4654.886529 + 30 +0.0 + 11 +6024.999971 + 21 +4676.537164 + 31 +0.0 + 0 +LINE + 5 +9AD + 8 +0 + 62 + 0 + 10 +5999.999971 + 20 +4719.838434 + 30 +0.0 + 11 +5987.499971 + 21 +4741.489069 + 31 +0.0 + 0 +LINE + 5 +9AE + 8 +0 + 62 + 0 + 10 +6112.499971 + 20 +4481.681448 + 30 +0.0 + 11 +6099.999971 + 21 +4503.332083 + 31 +0.0 + 0 +LINE + 5 +9AF + 8 +0 + 62 + 0 + 10 +6074.999971 + 20 +4546.633353 + 30 +0.0 + 11 +6062.499971 + 21 +4568.283989 + 31 +0.0 + 0 +LINE + 5 +9B0 + 8 +0 + 62 + 0 + 10 +6037.499971 + 20 +4611.585259 + 30 +0.0 + 11 +6024.999971 + 21 +4633.235894 + 31 +0.0 + 0 +LINE + 5 +9B1 + 8 +0 + 62 + 0 + 10 +5999.999971 + 20 +4676.537164 + 30 +0.0 + 11 +5987.499971 + 21 +4698.187799 + 31 +0.0 + 0 +LINE + 5 +9B2 + 8 +0 + 62 + 0 + 10 +6112.499972 + 20 +4438.380178 + 30 +0.0 + 11 +6099.999972 + 21 +4460.030813 + 31 +0.0 + 0 +LINE + 5 +9B3 + 8 +0 + 62 + 0 + 10 +6074.999972 + 20 +4503.332083 + 30 +0.0 + 11 +6062.499972 + 21 +4524.982718 + 31 +0.0 + 0 +LINE + 5 +9B4 + 8 +0 + 62 + 0 + 10 +6037.499972 + 20 +4568.283989 + 30 +0.0 + 11 +6024.999972 + 21 +4589.934624 + 31 +0.0 + 0 +LINE + 5 +9B5 + 8 +0 + 62 + 0 + 10 +5999.999972 + 20 +4633.235894 + 30 +0.0 + 11 +5987.499972 + 21 +4654.886529 + 31 +0.0 + 0 +LINE + 5 +9B6 + 8 +0 + 62 + 0 + 10 +6112.499972 + 20 +4395.078908 + 30 +0.0 + 11 +6099.999972 + 21 +4416.729543 + 31 +0.0 + 0 +LINE + 5 +9B7 + 8 +0 + 62 + 0 + 10 +6074.999972 + 20 +4460.030813 + 30 +0.0 + 11 +6062.499972 + 21 +4481.681448 + 31 +0.0 + 0 +LINE + 5 +9B8 + 8 +0 + 62 + 0 + 10 +6037.499972 + 20 +4524.982718 + 30 +0.0 + 11 +6024.999972 + 21 +4546.633354 + 31 +0.0 + 0 +LINE + 5 +9B9 + 8 +0 + 62 + 0 + 10 +5999.999972 + 20 +4589.934624 + 30 +0.0 + 11 +5987.499972 + 21 +4611.585259 + 31 +0.0 + 0 +LINE + 5 +9BA + 8 +0 + 62 + 0 + 10 +6101.011502 + 20 +4371.676251 + 30 +0.0 + 11 +6099.999972 + 21 +4373.428273 + 31 +0.0 + 0 +LINE + 5 +9BB + 8 +0 + 62 + 0 + 10 +6074.999972 + 20 +4416.729543 + 30 +0.0 + 11 +6062.499972 + 21 +4438.380178 + 31 +0.0 + 0 +LINE + 5 +9BC + 8 +0 + 62 + 0 + 10 +6037.499972 + 20 +4481.681448 + 30 +0.0 + 11 +6024.999972 + 21 +4503.332083 + 31 +0.0 + 0 +LINE + 5 +9BD + 8 +0 + 62 + 0 + 10 +5999.999972 + 20 +4546.633354 + 30 +0.0 + 11 +5987.499972 + 21 +4568.283989 + 31 +0.0 + 0 +LINE + 5 +9BE + 8 +0 + 62 + 0 + 10 +6074.999972 + 20 +4373.428273 + 30 +0.0 + 11 +6062.499972 + 21 +4395.078908 + 31 +0.0 + 0 +LINE + 5 +9BF + 8 +0 + 62 + 0 + 10 +6037.499972 + 20 +4438.380178 + 30 +0.0 + 11 +6024.999972 + 21 +4460.030813 + 31 +0.0 + 0 +LINE + 5 +9C0 + 8 +0 + 62 + 0 + 10 +5999.999972 + 20 +4503.332083 + 30 +0.0 + 11 +5987.499972 + 21 +4524.982719 + 31 +0.0 + 0 +LINE + 5 +9C1 + 8 +0 + 62 + 0 + 10 +6067.253384 + 20 +4343.544487 + 30 +0.0 + 11 +6062.499972 + 21 +4351.777638 + 31 +0.0 + 0 +LINE + 5 +9C2 + 8 +0 + 62 + 0 + 10 +6037.499972 + 20 +4395.078908 + 30 +0.0 + 11 +6024.999972 + 21 +4416.729543 + 31 +0.0 + 0 +LINE + 5 +9C3 + 8 +0 + 62 + 0 + 10 +5999.999972 + 20 +4460.030813 + 30 +0.0 + 11 +5987.499972 + 21 +4481.681448 + 31 +0.0 + 0 +LINE + 5 +9C4 + 8 +0 + 62 + 0 + 10 +6037.499972 + 20 +4351.777638 + 30 +0.0 + 11 +6024.999972 + 21 +4373.428273 + 31 +0.0 + 0 +LINE + 5 +9C5 + 8 +0 + 62 + 0 + 10 +5999.999972 + 20 +4416.729543 + 30 +0.0 + 11 +5987.499972 + 21 +4438.380178 + 31 +0.0 + 0 +LINE + 5 +9C6 + 8 +0 + 62 + 0 + 10 +6032.277357 + 20 +4317.522202 + 30 +0.0 + 11 +6024.999972 + 21 +4330.127003 + 31 +0.0 + 0 +LINE + 5 +9C7 + 8 +0 + 62 + 0 + 10 +5999.999972 + 20 +4373.428273 + 30 +0.0 + 11 +5987.499972 + 21 +4395.078908 + 31 +0.0 + 0 +LINE + 5 +9C8 + 8 +0 + 62 + 0 + 10 +5999.999972 + 20 +4330.127003 + 30 +0.0 + 11 +5987.499972 + 21 +4351.777638 + 31 +0.0 + 0 +LINE + 5 +9C9 + 8 +0 + 62 + 0 + 10 +5994.945553 + 20 +4295.580243 + 30 +0.0 + 11 +5987.499972 + 21 +4308.476368 + 31 +0.0 + 0 +LINE + 5 +9CA + 8 +0 + 62 + 0 + 10 +6146.084226 + 20 +4943.127054 + 30 +0.0 + 11 +6137.499971 + 21 +4957.99542 + 31 +0.0 + 0 +LINE + 5 +9CB + 8 +0 + 62 + 0 + 10 +6112.499971 + 20 +5001.29669 + 30 +0.0 + 11 +6099.999971 + 21 +5022.947325 + 31 +0.0 + 0 +LINE + 5 +9CC + 8 +0 + 62 + 0 + 10 +6074.999971 + 20 +5066.248595 + 30 +0.0 + 11 +6062.499971 + 21 +5087.89923 + 31 +0.0 + 0 +LINE + 5 +9CD + 8 +0 + 62 + 0 + 10 +6037.499971 + 20 +5131.2005 + 30 +0.0 + 11 +6024.999971 + 21 +5152.851135 + 31 +0.0 + 0 +LINE + 5 +9CE + 8 +0 + 62 + 0 + 10 +5999.999971 + 20 +5196.152406 + 30 +0.0 + 11 +5987.499971 + 21 +5217.803041 + 31 +0.0 + 0 +LINE + 5 +9CF + 8 +0 + 62 + 0 + 10 +6146.937754 + 20 +4984.949968 + 30 +0.0 + 11 +6137.49997 + 21 +5001.29669 + 31 +0.0 + 0 +LINE + 5 +9D0 + 8 +0 + 62 + 0 + 10 +6112.49997 + 20 +5044.59796 + 30 +0.0 + 11 +6099.99997 + 21 +5066.248595 + 31 +0.0 + 0 +LINE + 5 +9D1 + 8 +0 + 62 + 0 + 10 +6074.99997 + 20 +5109.549865 + 30 +0.0 + 11 +6062.49997 + 21 +5131.2005 + 31 +0.0 + 0 +LINE + 5 +9D2 + 8 +0 + 62 + 0 + 10 +6037.49997 + 20 +5174.501771 + 30 +0.0 + 11 +6024.99997 + 21 +5196.152406 + 31 +0.0 + 0 +LINE + 5 +9D3 + 8 +0 + 62 + 0 + 10 +5999.99997 + 20 +5239.453676 + 30 +0.0 + 11 +5987.49997 + 21 +5261.104311 + 31 +0.0 + 0 +LINE + 5 +9D4 + 8 +0 + 62 + 0 + 10 +6147.791283 + 20 +5026.772883 + 30 +0.0 + 11 +6137.49997 + 21 +5044.59796 + 31 +0.0 + 0 +LINE + 5 +9D5 + 8 +0 + 62 + 0 + 10 +6112.49997 + 20 +5087.89923 + 30 +0.0 + 11 +6099.99997 + 21 +5109.549865 + 31 +0.0 + 0 +LINE + 5 +9D6 + 8 +0 + 62 + 0 + 10 +6074.99997 + 20 +5152.851135 + 30 +0.0 + 11 +6062.49997 + 21 +5174.50177 + 31 +0.0 + 0 +LINE + 5 +9D7 + 8 +0 + 62 + 0 + 10 +6037.49997 + 20 +5217.803041 + 30 +0.0 + 11 +6024.99997 + 21 +5239.453676 + 31 +0.0 + 0 +LINE + 5 +9D8 + 8 +0 + 62 + 0 + 10 +5999.99997 + 20 +5282.754946 + 30 +0.0 + 11 +5987.49997 + 21 +5304.405581 + 31 +0.0 + 0 +LINE + 5 +9D9 + 8 +0 + 62 + 0 + 10 +6148.644812 + 20 +5068.595798 + 30 +0.0 + 11 +6137.49997 + 21 +5087.89923 + 31 +0.0 + 0 +LINE + 5 +9DA + 8 +0 + 62 + 0 + 10 +6112.49997 + 20 +5131.2005 + 30 +0.0 + 11 +6099.99997 + 21 +5152.851135 + 31 +0.0 + 0 +LINE + 5 +9DB + 8 +0 + 62 + 0 + 10 +6074.99997 + 20 +5196.152406 + 30 +0.0 + 11 +6062.49997 + 21 +5217.803041 + 31 +0.0 + 0 +LINE + 5 +9DC + 8 +0 + 62 + 0 + 10 +6037.49997 + 20 +5261.104311 + 30 +0.0 + 11 +6024.99997 + 21 +5282.754946 + 31 +0.0 + 0 +LINE + 5 +9DD + 8 +0 + 62 + 0 + 10 +5999.99997 + 20 +5326.056216 + 30 +0.0 + 11 +5987.49997 + 21 +5347.706851 + 31 +0.0 + 0 +LINE + 5 +9DE + 8 +0 + 62 + 0 + 10 +6149.498341 + 20 +5110.418712 + 30 +0.0 + 11 +6137.49997 + 21 +5131.2005 + 31 +0.0 + 0 +LINE + 5 +9DF + 8 +0 + 62 + 0 + 10 +6112.49997 + 20 +5174.50177 + 30 +0.0 + 11 +6099.99997 + 21 +5196.152405 + 31 +0.0 + 0 +LINE + 5 +9E0 + 8 +0 + 62 + 0 + 10 +6074.99997 + 20 +5239.453676 + 30 +0.0 + 11 +6062.49997 + 21 +5261.104311 + 31 +0.0 + 0 +LINE + 5 +9E1 + 8 +0 + 62 + 0 + 10 +6037.49997 + 20 +5304.405581 + 30 +0.0 + 11 +6024.99997 + 21 +5326.056216 + 31 +0.0 + 0 +LINE + 5 +9E2 + 8 +0 + 62 + 0 + 10 +5999.99997 + 20 +5369.357486 + 30 +0.0 + 11 +5987.49997 + 21 +5391.008121 + 31 +0.0 + 0 +LINE + 5 +9E3 + 8 +0 + 62 + 0 + 10 +6149.99997 + 20 +5152.851135 + 30 +0.0 + 11 +6137.49997 + 21 +5174.50177 + 31 +0.0 + 0 +LINE + 5 +9E4 + 8 +0 + 62 + 0 + 10 +6112.49997 + 20 +5217.803041 + 30 +0.0 + 11 +6099.99997 + 21 +5239.453676 + 31 +0.0 + 0 +LINE + 5 +9E5 + 8 +0 + 62 + 0 + 10 +6074.99997 + 20 +5282.754946 + 30 +0.0 + 11 +6062.49997 + 21 +5304.405581 + 31 +0.0 + 0 +LINE + 5 +9E6 + 8 +0 + 62 + 0 + 10 +6037.49997 + 20 +5347.706851 + 30 +0.0 + 11 +6024.99997 + 21 +5369.357486 + 31 +0.0 + 0 +LINE + 5 +9E7 + 8 +0 + 62 + 0 + 10 +5999.99997 + 20 +5412.658756 + 30 +0.0 + 11 +5987.49997 + 21 +5434.309391 + 31 +0.0 + 0 +LINE + 5 +9E8 + 8 +0 + 62 + 0 + 10 +6149.99997 + 20 +5196.152405 + 30 +0.0 + 11 +6137.49997 + 21 +5217.80304 + 31 +0.0 + 0 +LINE + 5 +9E9 + 8 +0 + 62 + 0 + 10 +6112.49997 + 20 +5261.104311 + 30 +0.0 + 11 +6099.99997 + 21 +5282.754946 + 31 +0.0 + 0 +LINE + 5 +9EA + 8 +0 + 62 + 0 + 10 +6074.99997 + 20 +5326.056216 + 30 +0.0 + 11 +6062.49997 + 21 +5347.706851 + 31 +0.0 + 0 +LINE + 5 +9EB + 8 +0 + 62 + 0 + 10 +6037.49997 + 20 +5391.008121 + 30 +0.0 + 11 +6024.99997 + 21 +5412.658756 + 31 +0.0 + 0 +LINE + 5 +9EC + 8 +0 + 62 + 0 + 10 +5999.99997 + 20 +5455.960027 + 30 +0.0 + 11 +5987.49997 + 21 +5477.610662 + 31 +0.0 + 0 +LINE + 5 +9ED + 8 +0 + 62 + 0 + 10 +6149.99997 + 20 +5239.453676 + 30 +0.0 + 11 +6137.49997 + 21 +5261.104311 + 31 +0.0 + 0 +LINE + 5 +9EE + 8 +0 + 62 + 0 + 10 +6112.49997 + 20 +5304.405581 + 30 +0.0 + 11 +6099.99997 + 21 +5326.056216 + 31 +0.0 + 0 +LINE + 5 +9EF + 8 +0 + 62 + 0 + 10 +6074.99997 + 20 +5369.357486 + 30 +0.0 + 11 +6062.49997 + 21 +5391.008121 + 31 +0.0 + 0 +LINE + 5 +9F0 + 8 +0 + 62 + 0 + 10 +6037.49997 + 20 +5434.309391 + 30 +0.0 + 11 +6024.99997 + 21 +5455.960026 + 31 +0.0 + 0 +LINE + 5 +9F1 + 8 +0 + 62 + 0 + 10 +5999.99997 + 20 +5499.261297 + 30 +0.0 + 11 +5987.49997 + 21 +5520.911932 + 31 +0.0 + 0 +LINE + 5 +9F2 + 8 +0 + 62 + 0 + 10 +6175.0 + 20 +5239.453623 + 30 +0.0 + 11 +6174.99997 + 21 +5239.453675 + 31 +0.0 + 0 +LINE + 5 +9F3 + 8 +0 + 62 + 0 + 10 +6149.99997 + 20 +5282.754946 + 30 +0.0 + 11 +6137.49997 + 21 +5304.405581 + 31 +0.0 + 0 +LINE + 5 +9F4 + 8 +0 + 62 + 0 + 10 +6112.49997 + 20 +5347.706851 + 30 +0.0 + 11 +6099.99997 + 21 +5369.357486 + 31 +0.0 + 0 +LINE + 5 +9F5 + 8 +0 + 62 + 0 + 10 +6074.99997 + 20 +5412.658756 + 30 +0.0 + 11 +6062.49997 + 21 +5434.309391 + 31 +0.0 + 0 +LINE + 5 +9F6 + 8 +0 + 62 + 0 + 10 +6037.49997 + 20 +5477.610662 + 30 +0.0 + 11 +6024.99997 + 21 +5499.261297 + 31 +0.0 + 0 +LINE + 5 +9F7 + 8 +0 + 62 + 0 + 10 +5999.99997 + 20 +5542.562567 + 30 +0.0 + 11 +5987.49997 + 21 +5564.213202 + 31 +0.0 + 0 +LINE + 5 +9F8 + 8 +0 + 62 + 0 + 10 +6175.0 + 20 +5282.754893 + 30 +0.0 + 11 +6174.99997 + 21 +5282.754946 + 31 +0.0 + 0 +LINE + 5 +9F9 + 8 +0 + 62 + 0 + 10 +6149.99997 + 20 +5326.056216 + 30 +0.0 + 11 +6137.49997 + 21 +5347.706851 + 31 +0.0 + 0 +LINE + 5 +9FA + 8 +0 + 62 + 0 + 10 +6112.49997 + 20 +5391.008121 + 30 +0.0 + 11 +6099.99997 + 21 +5412.658756 + 31 +0.0 + 0 +LINE + 5 +9FB + 8 +0 + 62 + 0 + 10 +6074.99997 + 20 +5455.960026 + 30 +0.0 + 11 +6062.49997 + 21 +5477.610661 + 31 +0.0 + 0 +LINE + 5 +9FC + 8 +0 + 62 + 0 + 10 +6037.49997 + 20 +5520.911932 + 30 +0.0 + 11 +6024.99997 + 21 +5542.562567 + 31 +0.0 + 0 +LINE + 5 +9FD + 8 +0 + 62 + 0 + 10 +5999.99997 + 20 +5585.863837 + 30 +0.0 + 11 +5987.49997 + 21 +5607.514472 + 31 +0.0 + 0 +LINE + 5 +9FE + 8 +0 + 62 + 0 + 10 +6175.0 + 20 +5326.056163 + 30 +0.0 + 11 +6174.99997 + 21 +5326.056216 + 31 +0.0 + 0 +LINE + 5 +9FF + 8 +0 + 62 + 0 + 10 +6149.99997 + 20 +5369.357486 + 30 +0.0 + 11 +6137.49997 + 21 +5391.008121 + 31 +0.0 + 0 +LINE + 5 +A00 + 8 +0 + 62 + 0 + 10 +6112.49997 + 20 +5434.309391 + 30 +0.0 + 11 +6099.99997 + 21 +5455.960026 + 31 +0.0 + 0 +LINE + 5 +A01 + 8 +0 + 62 + 0 + 10 +6074.99997 + 20 +5499.261297 + 30 +0.0 + 11 +6062.49997 + 21 +5520.911932 + 31 +0.0 + 0 +LINE + 5 +A02 + 8 +0 + 62 + 0 + 10 +6037.49997 + 20 +5564.213202 + 30 +0.0 + 11 +6024.99997 + 21 +5585.863837 + 31 +0.0 + 0 +LINE + 5 +A03 + 8 +0 + 62 + 0 + 10 +5999.99997 + 20 +5629.165107 + 30 +0.0 + 11 +5987.49997 + 21 +5650.815742 + 31 +0.0 + 0 +LINE + 5 +A04 + 8 +0 + 62 + 0 + 10 +6175.0 + 20 +5369.357433 + 30 +0.0 + 11 +6174.99997 + 21 +5369.357486 + 31 +0.0 + 0 +LINE + 5 +A05 + 8 +0 + 62 + 0 + 10 +6149.99997 + 20 +5412.658756 + 30 +0.0 + 11 +6137.49997 + 21 +5434.309391 + 31 +0.0 + 0 +LINE + 5 +A06 + 8 +0 + 62 + 0 + 10 +6112.49997 + 20 +5477.610661 + 30 +0.0 + 11 +6099.99997 + 21 +5499.261296 + 31 +0.0 + 0 +LINE + 5 +A07 + 8 +0 + 62 + 0 + 10 +6074.99997 + 20 +5542.562567 + 30 +0.0 + 11 +6062.49997 + 21 +5564.213202 + 31 +0.0 + 0 +LINE + 5 +A08 + 8 +0 + 62 + 0 + 10 +6037.49997 + 20 +5607.514472 + 30 +0.0 + 11 +6024.99997 + 21 +5629.165107 + 31 +0.0 + 0 +LINE + 5 +A09 + 8 +0 + 62 + 0 + 10 +5999.99997 + 20 +5672.466377 + 30 +0.0 + 11 +5987.49997 + 21 +5694.117012 + 31 +0.0 + 0 +LINE + 5 +A0A + 8 +0 + 62 + 0 + 10 +6175.0 + 20 +5412.658703 + 30 +0.0 + 11 +6174.99997 + 21 +5412.658756 + 31 +0.0 + 0 +LINE + 5 +A0B + 8 +0 + 62 + 0 + 10 +6149.99997 + 20 +5455.960026 + 30 +0.0 + 11 +6137.49997 + 21 +5477.610661 + 31 +0.0 + 0 +LINE + 5 +A0C + 8 +0 + 62 + 0 + 10 +6112.49997 + 20 +5520.911932 + 30 +0.0 + 11 +6099.99997 + 21 +5542.562567 + 31 +0.0 + 0 +LINE + 5 +A0D + 8 +0 + 62 + 0 + 10 +6074.99997 + 20 +5585.863837 + 30 +0.0 + 11 +6062.49997 + 21 +5607.514472 + 31 +0.0 + 0 +LINE + 5 +A0E + 8 +0 + 62 + 0 + 10 +6037.49997 + 20 +5650.815742 + 30 +0.0 + 11 +6024.99997 + 21 +5672.466377 + 31 +0.0 + 0 +LINE + 5 +A0F + 8 +0 + 62 + 0 + 10 +5999.99997 + 20 +5715.767647 + 30 +0.0 + 11 +5987.49997 + 21 +5737.418282 + 31 +0.0 + 0 +LINE + 5 +A10 + 8 +0 + 62 + 0 + 10 +6175.0 + 20 +5455.959973 + 30 +0.0 + 11 +6174.999969 + 21 +5455.960026 + 31 +0.0 + 0 +LINE + 5 +A11 + 8 +0 + 62 + 0 + 10 +6149.999969 + 20 +5499.261296 + 30 +0.0 + 11 +6137.499969 + 21 +5520.911931 + 31 +0.0 + 0 +LINE + 5 +A12 + 8 +0 + 62 + 0 + 10 +6112.499969 + 20 +5564.213202 + 30 +0.0 + 11 +6099.999969 + 21 +5585.863837 + 31 +0.0 + 0 +LINE + 5 +A13 + 8 +0 + 62 + 0 + 10 +6074.999969 + 20 +5629.165107 + 30 +0.0 + 11 +6062.499969 + 21 +5650.815742 + 31 +0.0 + 0 +LINE + 5 +A14 + 8 +0 + 62 + 0 + 10 +6037.499969 + 20 +5694.117012 + 30 +0.0 + 11 +6024.999969 + 21 +5715.767647 + 31 +0.0 + 0 +LINE + 5 +A15 + 8 +0 + 62 + 0 + 10 +5999.999969 + 20 +5759.068918 + 30 +0.0 + 11 +5987.499969 + 21 +5780.719553 + 31 +0.0 + 0 +LINE + 5 +A16 + 8 +0 + 62 + 0 + 10 +6175.0 + 20 +5499.261243 + 30 +0.0 + 11 +6174.999969 + 21 +5499.261296 + 31 +0.0 + 0 +LINE + 5 +A17 + 8 +0 + 62 + 0 + 10 +6149.999969 + 20 +5542.562567 + 30 +0.0 + 11 +6137.499969 + 21 +5564.213202 + 31 +0.0 + 0 +LINE + 5 +A18 + 8 +0 + 62 + 0 + 10 +6112.499969 + 20 +5607.514472 + 30 +0.0 + 11 +6099.999969 + 21 +5629.165107 + 31 +0.0 + 0 +LINE + 5 +A19 + 8 +0 + 62 + 0 + 10 +6074.999969 + 20 +5672.466377 + 30 +0.0 + 11 +6062.499969 + 21 +5694.117012 + 31 +0.0 + 0 +LINE + 5 +A1A + 8 +0 + 62 + 0 + 10 +6037.499969 + 20 +5737.418282 + 30 +0.0 + 11 +6024.999969 + 21 +5759.068917 + 31 +0.0 + 0 +LINE + 5 +A1B + 8 +0 + 62 + 0 + 10 +6175.0 + 20 +5542.562513 + 30 +0.0 + 11 +6174.999969 + 21 +5542.562566 + 31 +0.0 + 0 +LINE + 5 +A1C + 8 +0 + 62 + 0 + 10 +6149.999969 + 20 +5585.863837 + 30 +0.0 + 11 +6137.499969 + 21 +5607.514472 + 31 +0.0 + 0 +LINE + 5 +A1D + 8 +0 + 62 + 0 + 10 +6112.499969 + 20 +5650.815742 + 30 +0.0 + 11 +6099.999969 + 21 +5672.466377 + 31 +0.0 + 0 +LINE + 5 +A1E + 8 +0 + 62 + 0 + 10 +6074.999969 + 20 +5715.767647 + 30 +0.0 + 11 +6062.499969 + 21 +5737.418282 + 31 +0.0 + 0 +LINE + 5 +A1F + 8 +0 + 62 + 0 + 10 +6037.499969 + 20 +5780.719553 + 30 +0.0 + 11 +6032.1419 + 21 +5790.0 + 31 +0.0 + 0 +LINE + 5 +A20 + 8 +0 + 62 + 0 + 10 +6175.0 + 20 +5585.863783 + 30 +0.0 + 11 +6174.999969 + 21 +5585.863837 + 31 +0.0 + 0 +LINE + 5 +A21 + 8 +0 + 62 + 0 + 10 +6149.999969 + 20 +5629.165107 + 30 +0.0 + 11 +6137.499969 + 21 +5650.815742 + 31 +0.0 + 0 +LINE + 5 +A22 + 8 +0 + 62 + 0 + 10 +6112.499969 + 20 +5694.117012 + 30 +0.0 + 11 +6099.999969 + 21 +5715.767647 + 31 +0.0 + 0 +LINE + 5 +A23 + 8 +0 + 62 + 0 + 10 +6074.999969 + 20 +5759.068917 + 30 +0.0 + 11 +6062.499969 + 21 +5780.719552 + 31 +0.0 + 0 +LINE + 5 +A24 + 8 +0 + 62 + 0 + 10 +6175.0 + 20 +5629.165053 + 30 +0.0 + 11 +6174.999969 + 21 +5629.165107 + 31 +0.0 + 0 +LINE + 5 +A25 + 8 +0 + 62 + 0 + 10 +6149.999969 + 20 +5672.466377 + 30 +0.0 + 11 +6137.499969 + 21 +5694.117012 + 31 +0.0 + 0 +LINE + 5 +A26 + 8 +0 + 62 + 0 + 10 +6112.499969 + 20 +5737.418282 + 30 +0.0 + 11 +6099.999969 + 21 +5759.068917 + 31 +0.0 + 0 +LINE + 5 +A27 + 8 +0 + 62 + 0 + 10 +6175.0 + 20 +5672.466323 + 30 +0.0 + 11 +6174.999969 + 21 +5672.466377 + 31 +0.0 + 0 +LINE + 5 +A28 + 8 +0 + 62 + 0 + 10 +6149.999969 + 20 +5715.767647 + 30 +0.0 + 11 +6137.499969 + 21 +5737.418282 + 31 +0.0 + 0 +LINE + 5 +A29 + 8 +0 + 62 + 0 + 10 +6112.499969 + 20 +5780.719552 + 30 +0.0 + 11 +6107.1419 + 21 +5790.0 + 31 +0.0 + 0 +LINE + 5 +A2A + 8 +0 + 62 + 0 + 10 +6175.0 + 20 +5715.767593 + 30 +0.0 + 11 +6174.999969 + 21 +5715.767647 + 31 +0.0 + 0 +LINE + 5 +A2B + 8 +0 + 62 + 0 + 10 +6149.999969 + 20 +5759.068917 + 30 +0.0 + 11 +6137.499969 + 21 +5780.719552 + 31 +0.0 + 0 +LINE + 5 +A2C + 8 +0 + 62 + 0 + 10 +6175.0 + 20 +5759.068863 + 30 +0.0 + 11 +6174.999969 + 21 +5759.068917 + 31 +0.0 + 0 +LINE + 5 +A2D + 8 +0 + 62 + 0 + 10 +5987.49999 + 20 +4914.694172 + 30 +0.0 + 11 +5999.99999 + 21 +4936.344808 + 31 +0.0 + 0 +LINE + 5 +A2E + 8 +0 + 62 + 0 + 10 +6024.99999 + 20 +4979.646078 + 30 +0.0 + 11 +6037.49999 + 21 +5001.296713 + 31 +0.0 + 0 +LINE + 5 +A2F + 8 +0 + 62 + 0 + 10 +6062.49999 + 20 +5044.597983 + 30 +0.0 + 11 +6074.99999 + 21 +5066.248618 + 31 +0.0 + 0 +LINE + 5 +A30 + 8 +0 + 62 + 0 + 10 +6099.99999 + 20 +5109.549888 + 30 +0.0 + 11 +6112.49999 + 21 +5131.200523 + 31 +0.0 + 0 +LINE + 5 +A31 + 8 +0 + 62 + 0 + 10 +6137.49999 + 20 +5174.501794 + 30 +0.0 + 11 +6149.99999 + 21 +5196.152429 + 31 +0.0 + 0 +LINE + 5 +A32 + 8 +0 + 62 + 0 + 10 +6174.99999 + 20 +5239.453699 + 30 +0.0 + 11 +6175.0 + 21 +5239.453717 + 31 +0.0 + 0 +LINE + 5 +A33 + 8 +0 + 62 + 0 + 10 +5987.49999 + 20 +4957.995443 + 30 +0.0 + 11 +5999.99999 + 21 +4979.646078 + 31 +0.0 + 0 +LINE + 5 +A34 + 8 +0 + 62 + 0 + 10 +6024.99999 + 20 +5022.947348 + 30 +0.0 + 11 +6037.49999 + 21 +5044.597983 + 31 +0.0 + 0 +LINE + 5 +A35 + 8 +0 + 62 + 0 + 10 +6062.49999 + 20 +5087.899253 + 30 +0.0 + 11 +6074.99999 + 21 +5109.549888 + 31 +0.0 + 0 +LINE + 5 +A36 + 8 +0 + 62 + 0 + 10 +6099.99999 + 20 +5152.851158 + 30 +0.0 + 11 +6112.49999 + 21 +5174.501794 + 31 +0.0 + 0 +LINE + 5 +A37 + 8 +0 + 62 + 0 + 10 +6137.49999 + 20 +5217.803064 + 30 +0.0 + 11 +6149.99999 + 21 +5239.453699 + 31 +0.0 + 0 +LINE + 5 +A38 + 8 +0 + 62 + 0 + 10 +6174.99999 + 20 +5282.754969 + 30 +0.0 + 11 +6175.0 + 21 +5282.754987 + 31 +0.0 + 0 +LINE + 5 +A39 + 8 +0 + 62 + 0 + 10 +5987.49999 + 20 +5001.296713 + 30 +0.0 + 11 +5999.99999 + 21 +5022.947348 + 31 +0.0 + 0 +LINE + 5 +A3A + 8 +0 + 62 + 0 + 10 +6024.99999 + 20 +5066.248618 + 30 +0.0 + 11 +6037.49999 + 21 +5087.899253 + 31 +0.0 + 0 +LINE + 5 +A3B + 8 +0 + 62 + 0 + 10 +6062.49999 + 20 +5131.200523 + 30 +0.0 + 11 +6074.99999 + 21 +5152.851158 + 31 +0.0 + 0 +LINE + 5 +A3C + 8 +0 + 62 + 0 + 10 +6099.99999 + 20 +5196.152429 + 30 +0.0 + 11 +6112.49999 + 21 +5217.803064 + 31 +0.0 + 0 +LINE + 5 +A3D + 8 +0 + 62 + 0 + 10 +6137.49999 + 20 +5261.104334 + 30 +0.0 + 11 +6149.99999 + 21 +5282.754969 + 31 +0.0 + 0 +LINE + 5 +A3E + 8 +0 + 62 + 0 + 10 +6174.99999 + 20 +5326.056239 + 30 +0.0 + 11 +6175.0 + 21 +5326.056257 + 31 +0.0 + 0 +LINE + 5 +A3F + 8 +0 + 62 + 0 + 10 +5987.49999 + 20 +5044.597983 + 30 +0.0 + 11 +5999.99999 + 21 +5066.248618 + 31 +0.0 + 0 +LINE + 5 +A40 + 8 +0 + 62 + 0 + 10 +6024.99999 + 20 +5109.549888 + 30 +0.0 + 11 +6037.49999 + 21 +5131.200523 + 31 +0.0 + 0 +LINE + 5 +A41 + 8 +0 + 62 + 0 + 10 +6062.49999 + 20 +5174.501793 + 30 +0.0 + 11 +6074.99999 + 21 +5196.152429 + 31 +0.0 + 0 +LINE + 5 +A42 + 8 +0 + 62 + 0 + 10 +6099.99999 + 20 +5239.453699 + 30 +0.0 + 11 +6112.49999 + 21 +5261.104334 + 31 +0.0 + 0 +LINE + 5 +A43 + 8 +0 + 62 + 0 + 10 +6137.49999 + 20 +5304.405604 + 30 +0.0 + 11 +6149.99999 + 21 +5326.056239 + 31 +0.0 + 0 +LINE + 5 +A44 + 8 +0 + 62 + 0 + 10 +6174.99999 + 20 +5369.357509 + 30 +0.0 + 11 +6175.0 + 21 +5369.357527 + 31 +0.0 + 0 +LINE + 5 +A45 + 8 +0 + 62 + 0 + 10 +5987.49999 + 20 +5087.899253 + 30 +0.0 + 11 +5999.99999 + 21 +5109.549888 + 31 +0.0 + 0 +LINE + 5 +A46 + 8 +0 + 62 + 0 + 10 +6024.99999 + 20 +5152.851158 + 30 +0.0 + 11 +6037.49999 + 21 +5174.501793 + 31 +0.0 + 0 +LINE + 5 +A47 + 8 +0 + 62 + 0 + 10 +6062.49999 + 20 +5217.803064 + 30 +0.0 + 11 +6074.99999 + 21 +5239.453699 + 31 +0.0 + 0 +LINE + 5 +A48 + 8 +0 + 62 + 0 + 10 +6099.99999 + 20 +5282.754969 + 30 +0.0 + 11 +6112.49999 + 21 +5304.405604 + 31 +0.0 + 0 +LINE + 5 +A49 + 8 +0 + 62 + 0 + 10 +6137.49999 + 20 +5347.706874 + 30 +0.0 + 11 +6149.99999 + 21 +5369.357509 + 31 +0.0 + 0 +LINE + 5 +A4A + 8 +0 + 62 + 0 + 10 +6174.99999 + 20 +5412.658779 + 30 +0.0 + 11 +6175.0 + 21 +5412.658797 + 31 +0.0 + 0 +LINE + 5 +A4B + 8 +0 + 62 + 0 + 10 +5987.49999 + 20 +5131.200523 + 30 +0.0 + 11 +5999.99999 + 21 +5152.851158 + 31 +0.0 + 0 +LINE + 5 +A4C + 8 +0 + 62 + 0 + 10 +6024.99999 + 20 +5196.152428 + 30 +0.0 + 11 +6037.49999 + 21 +5217.803064 + 31 +0.0 + 0 +LINE + 5 +A4D + 8 +0 + 62 + 0 + 10 +6062.49999 + 20 +5261.104334 + 30 +0.0 + 11 +6074.99999 + 21 +5282.754969 + 31 +0.0 + 0 +LINE + 5 +A4E + 8 +0 + 62 + 0 + 10 +6099.99999 + 20 +5326.056239 + 30 +0.0 + 11 +6112.49999 + 21 +5347.706874 + 31 +0.0 + 0 +LINE + 5 +A4F + 8 +0 + 62 + 0 + 10 +6137.49999 + 20 +5391.008144 + 30 +0.0 + 11 +6149.99999 + 21 +5412.658779 + 31 +0.0 + 0 +LINE + 5 +A50 + 8 +0 + 62 + 0 + 10 +6174.99999 + 20 +5455.96005 + 30 +0.0 + 11 +6175.0 + 21 +5455.960067 + 31 +0.0 + 0 +LINE + 5 +A51 + 8 +0 + 62 + 0 + 10 +5987.49999 + 20 +5174.501793 + 30 +0.0 + 11 +5999.99999 + 21 +5196.152428 + 31 +0.0 + 0 +LINE + 5 +A52 + 8 +0 + 62 + 0 + 10 +6024.99999 + 20 +5239.453699 + 30 +0.0 + 11 +6037.49999 + 21 +5261.104334 + 31 +0.0 + 0 +LINE + 5 +A53 + 8 +0 + 62 + 0 + 10 +6062.49999 + 20 +5304.405604 + 30 +0.0 + 11 +6074.99999 + 21 +5326.056239 + 31 +0.0 + 0 +LINE + 5 +A54 + 8 +0 + 62 + 0 + 10 +6099.99999 + 20 +5369.357509 + 30 +0.0 + 11 +6112.49999 + 21 +5391.008144 + 31 +0.0 + 0 +LINE + 5 +A55 + 8 +0 + 62 + 0 + 10 +6137.49999 + 20 +5434.309414 + 30 +0.0 + 11 +6149.99999 + 21 +5455.96005 + 31 +0.0 + 0 +LINE + 5 +A56 + 8 +0 + 62 + 0 + 10 +6174.99999 + 20 +5499.26132 + 30 +0.0 + 11 +6175.0 + 21 +5499.261337 + 31 +0.0 + 0 +LINE + 5 +A57 + 8 +0 + 62 + 0 + 10 +5987.49999 + 20 +5217.803063 + 30 +0.0 + 11 +5999.99999 + 21 +5239.453699 + 31 +0.0 + 0 +LINE + 5 +A58 + 8 +0 + 62 + 0 + 10 +6024.99999 + 20 +5282.754969 + 30 +0.0 + 11 +6037.49999 + 21 +5304.405604 + 31 +0.0 + 0 +LINE + 5 +A59 + 8 +0 + 62 + 0 + 10 +6062.49999 + 20 +5347.706874 + 30 +0.0 + 11 +6074.99999 + 21 +5369.357509 + 31 +0.0 + 0 +LINE + 5 +A5A + 8 +0 + 62 + 0 + 10 +6099.99999 + 20 +5412.658779 + 30 +0.0 + 11 +6112.49999 + 21 +5434.309414 + 31 +0.0 + 0 +LINE + 5 +A5B + 8 +0 + 62 + 0 + 10 +6137.49999 + 20 +5477.610685 + 30 +0.0 + 11 +6149.99999 + 21 +5499.26132 + 31 +0.0 + 0 +LINE + 5 +A5C + 8 +0 + 62 + 0 + 10 +6174.99999 + 20 +5542.56259 + 30 +0.0 + 11 +6175.0 + 21 +5542.562607 + 31 +0.0 + 0 +LINE + 5 +A5D + 8 +0 + 62 + 0 + 10 +5987.49999 + 20 +5261.104334 + 30 +0.0 + 11 +5999.99999 + 21 +5282.754969 + 31 +0.0 + 0 +LINE + 5 +A5E + 8 +0 + 62 + 0 + 10 +6024.99999 + 20 +5326.056239 + 30 +0.0 + 11 +6037.49999 + 21 +5347.706874 + 31 +0.0 + 0 +LINE + 5 +A5F + 8 +0 + 62 + 0 + 10 +6062.49999 + 20 +5391.008144 + 30 +0.0 + 11 +6074.99999 + 21 +5412.658779 + 31 +0.0 + 0 +LINE + 5 +A60 + 8 +0 + 62 + 0 + 10 +6099.99999 + 20 +5455.960049 + 30 +0.0 + 11 +6112.49999 + 21 +5477.610685 + 31 +0.0 + 0 +LINE + 5 +A61 + 8 +0 + 62 + 0 + 10 +6137.49999 + 20 +5520.911955 + 30 +0.0 + 11 +6149.99999 + 21 +5542.56259 + 31 +0.0 + 0 +LINE + 5 +A62 + 8 +0 + 62 + 0 + 10 +6174.99999 + 20 +5585.86386 + 30 +0.0 + 11 +6175.0 + 21 +5585.863877 + 31 +0.0 + 0 +LINE + 5 +A63 + 8 +0 + 62 + 0 + 10 +5987.49999 + 20 +5304.405604 + 30 +0.0 + 11 +5999.99999 + 21 +5326.056239 + 31 +0.0 + 0 +LINE + 5 +A64 + 8 +0 + 62 + 0 + 10 +6024.99999 + 20 +5369.357509 + 30 +0.0 + 11 +6037.49999 + 21 +5391.008144 + 31 +0.0 + 0 +LINE + 5 +A65 + 8 +0 + 62 + 0 + 10 +6062.49999 + 20 +5434.309414 + 30 +0.0 + 11 +6074.99999 + 21 +5455.960049 + 31 +0.0 + 0 +LINE + 5 +A66 + 8 +0 + 62 + 0 + 10 +6099.99999 + 20 +5499.26132 + 30 +0.0 + 11 +6112.49999 + 21 +5520.911955 + 31 +0.0 + 0 +LINE + 5 +A67 + 8 +0 + 62 + 0 + 10 +6137.49999 + 20 +5564.213225 + 30 +0.0 + 11 +6149.99999 + 21 +5585.86386 + 31 +0.0 + 0 +LINE + 5 +A68 + 8 +0 + 62 + 0 + 10 +6174.99999 + 20 +5629.16513 + 30 +0.0 + 11 +6175.0 + 21 +5629.165147 + 31 +0.0 + 0 +LINE + 5 +A69 + 8 +0 + 62 + 0 + 10 +5987.49999 + 20 +5347.706874 + 30 +0.0 + 11 +5999.99999 + 21 +5369.357509 + 31 +0.0 + 0 +LINE + 5 +A6A + 8 +0 + 62 + 0 + 10 +6024.99999 + 20 +5412.658779 + 30 +0.0 + 11 +6037.49999 + 21 +5434.309414 + 31 +0.0 + 0 +LINE + 5 +A6B + 8 +0 + 62 + 0 + 10 +6062.49999 + 20 +5477.610684 + 30 +0.0 + 11 +6074.99999 + 21 +5499.26132 + 31 +0.0 + 0 +LINE + 5 +A6C + 8 +0 + 62 + 0 + 10 +6099.99999 + 20 +5542.56259 + 30 +0.0 + 11 +6112.49999 + 21 +5564.213225 + 31 +0.0 + 0 +LINE + 5 +A6D + 8 +0 + 62 + 0 + 10 +6137.49999 + 20 +5607.514495 + 30 +0.0 + 11 +6149.99999 + 21 +5629.16513 + 31 +0.0 + 0 +LINE + 5 +A6E + 8 +0 + 62 + 0 + 10 +6174.99999 + 20 +5672.4664 + 30 +0.0 + 11 +6175.0 + 21 +5672.466417 + 31 +0.0 + 0 +LINE + 5 +A6F + 8 +0 + 62 + 0 + 10 +5987.499991 + 20 +5391.008144 + 30 +0.0 + 11 +5999.999991 + 21 +5412.658779 + 31 +0.0 + 0 +LINE + 5 +A70 + 8 +0 + 62 + 0 + 10 +6024.999991 + 20 +5455.960049 + 30 +0.0 + 11 +6037.499991 + 21 +5477.610684 + 31 +0.0 + 0 +LINE + 5 +A71 + 8 +0 + 62 + 0 + 10 +6062.499991 + 20 +5520.911955 + 30 +0.0 + 11 +6074.999991 + 21 +5542.56259 + 31 +0.0 + 0 +LINE + 5 +A72 + 8 +0 + 62 + 0 + 10 +6099.999991 + 20 +5585.86386 + 30 +0.0 + 11 +6112.499991 + 21 +5607.514495 + 31 +0.0 + 0 +LINE + 5 +A73 + 8 +0 + 62 + 0 + 10 +6137.499991 + 20 +5650.815765 + 30 +0.0 + 11 +6149.999991 + 21 +5672.4664 + 31 +0.0 + 0 +LINE + 5 +A74 + 8 +0 + 62 + 0 + 10 +6174.999991 + 20 +5715.76767 + 30 +0.0 + 11 +6175.0 + 21 +5715.767687 + 31 +0.0 + 0 +LINE + 5 +A75 + 8 +0 + 62 + 0 + 10 +5987.499991 + 20 +5434.309414 + 30 +0.0 + 11 +5999.999991 + 21 +5455.960049 + 31 +0.0 + 0 +LINE + 5 +A76 + 8 +0 + 62 + 0 + 10 +6024.999991 + 20 +5499.261319 + 30 +0.0 + 11 +6037.499991 + 21 +5520.911955 + 31 +0.0 + 0 +LINE + 5 +A77 + 8 +0 + 62 + 0 + 10 +6062.499991 + 20 +5564.213225 + 30 +0.0 + 11 +6074.999991 + 21 +5585.86386 + 31 +0.0 + 0 +LINE + 5 +A78 + 8 +0 + 62 + 0 + 10 +6099.999991 + 20 +5629.16513 + 30 +0.0 + 11 +6112.499991 + 21 +5650.815765 + 31 +0.0 + 0 +LINE + 5 +A79 + 8 +0 + 62 + 0 + 10 +6137.499991 + 20 +5694.117035 + 30 +0.0 + 11 +6149.999991 + 21 +5715.76767 + 31 +0.0 + 0 +LINE + 5 +A7A + 8 +0 + 62 + 0 + 10 +6174.999991 + 20 +5759.068941 + 30 +0.0 + 11 +6175.0 + 21 +5759.068957 + 31 +0.0 + 0 +LINE + 5 +A7B + 8 +0 + 62 + 0 + 10 +5987.499991 + 20 +5477.610684 + 30 +0.0 + 11 +5999.999991 + 21 +5499.261319 + 31 +0.0 + 0 +LINE + 5 +A7C + 8 +0 + 62 + 0 + 10 +6024.999991 + 20 +5542.56259 + 30 +0.0 + 11 +6037.499991 + 21 +5564.213225 + 31 +0.0 + 0 +LINE + 5 +A7D + 8 +0 + 62 + 0 + 10 +6062.499991 + 20 +5607.514495 + 30 +0.0 + 11 +6074.999991 + 21 +5629.16513 + 31 +0.0 + 0 +LINE + 5 +A7E + 8 +0 + 62 + 0 + 10 +6099.999991 + 20 +5672.4664 + 30 +0.0 + 11 +6112.499991 + 21 +5694.117035 + 31 +0.0 + 0 +LINE + 5 +A7F + 8 +0 + 62 + 0 + 10 +6137.499991 + 20 +5737.418305 + 30 +0.0 + 11 +6149.999991 + 21 +5759.068941 + 31 +0.0 + 0 +LINE + 5 +A80 + 8 +0 + 62 + 0 + 10 +5987.499991 + 20 +5520.911954 + 30 +0.0 + 11 +5999.999991 + 21 +5542.56259 + 31 +0.0 + 0 +LINE + 5 +A81 + 8 +0 + 62 + 0 + 10 +6024.999991 + 20 +5585.86386 + 30 +0.0 + 11 +6037.499991 + 21 +5607.514495 + 31 +0.0 + 0 +LINE + 5 +A82 + 8 +0 + 62 + 0 + 10 +6062.499991 + 20 +5650.815765 + 30 +0.0 + 11 +6074.999991 + 21 +5672.4664 + 31 +0.0 + 0 +LINE + 5 +A83 + 8 +0 + 62 + 0 + 10 +6099.999991 + 20 +5715.76767 + 30 +0.0 + 11 +6112.499991 + 21 +5737.418305 + 31 +0.0 + 0 +LINE + 5 +A84 + 8 +0 + 62 + 0 + 10 +6137.499991 + 20 +5780.719576 + 30 +0.0 + 11 +6142.858046 + 21 +5790.0 + 31 +0.0 + 0 +LINE + 5 +A85 + 8 +0 + 62 + 0 + 10 +5987.499991 + 20 +5564.213225 + 30 +0.0 + 11 +5999.999991 + 21 +5585.86386 + 31 +0.0 + 0 +LINE + 5 +A86 + 8 +0 + 62 + 0 + 10 +6024.999991 + 20 +5629.16513 + 30 +0.0 + 11 +6037.499991 + 21 +5650.815765 + 31 +0.0 + 0 +LINE + 5 +A87 + 8 +0 + 62 + 0 + 10 +6062.499991 + 20 +5694.117035 + 30 +0.0 + 11 +6074.999991 + 21 +5715.76767 + 31 +0.0 + 0 +LINE + 5 +A88 + 8 +0 + 62 + 0 + 10 +6099.999991 + 20 +5759.06894 + 30 +0.0 + 11 +6112.499991 + 21 +5780.719576 + 31 +0.0 + 0 +LINE + 5 +A89 + 8 +0 + 62 + 0 + 10 +5987.499991 + 20 +5607.514495 + 30 +0.0 + 11 +5999.999991 + 21 +5629.16513 + 31 +0.0 + 0 +LINE + 5 +A8A + 8 +0 + 62 + 0 + 10 +6024.999991 + 20 +5672.4664 + 30 +0.0 + 11 +6037.499991 + 21 +5694.117035 + 31 +0.0 + 0 +LINE + 5 +A8B + 8 +0 + 62 + 0 + 10 +6062.499991 + 20 +5737.418305 + 30 +0.0 + 11 +6074.999991 + 21 +5759.06894 + 31 +0.0 + 0 +LINE + 5 +A8C + 8 +0 + 62 + 0 + 10 +5987.499991 + 20 +5650.815765 + 30 +0.0 + 11 +5999.999991 + 21 +5672.4664 + 31 +0.0 + 0 +LINE + 5 +A8D + 8 +0 + 62 + 0 + 10 +6024.999991 + 20 +5715.76767 + 30 +0.0 + 11 +6037.499991 + 21 +5737.418305 + 31 +0.0 + 0 +LINE + 5 +A8E + 8 +0 + 62 + 0 + 10 +6062.499991 + 20 +5780.719575 + 30 +0.0 + 11 +6067.858047 + 21 +5790.0 + 31 +0.0 + 0 +LINE + 5 +A8F + 8 +0 + 62 + 0 + 10 +5987.499991 + 20 +5694.117035 + 30 +0.0 + 11 +5999.999991 + 21 +5715.76767 + 31 +0.0 + 0 +LINE + 5 +A90 + 8 +0 + 62 + 0 + 10 +6024.999991 + 20 +5759.06894 + 30 +0.0 + 11 +6037.499991 + 21 +5780.719575 + 31 +0.0 + 0 +LINE + 5 +A91 + 8 +0 + 62 + 0 + 10 +5987.499991 + 20 +5737.418305 + 30 +0.0 + 11 +5999.999991 + 21 +5759.06894 + 31 +0.0 + 0 +LINE + 5 +A92 + 8 +0 + 62 + 0 + 10 +5987.499991 + 20 +5780.719575 + 30 +0.0 + 11 +5992.858047 + 21 +5790.0 + 31 +0.0 + 0 +LINE + 5 +A93 + 8 +0 + 62 + 0 + 10 +5987.49999 + 20 +4871.392902 + 30 +0.0 + 11 +5999.99999 + 21 +4893.043537 + 31 +0.0 + 0 +LINE + 5 +A94 + 8 +0 + 62 + 0 + 10 +6024.99999 + 20 +4936.344808 + 30 +0.0 + 11 +6037.49999 + 21 +4957.995443 + 31 +0.0 + 0 +LINE + 5 +A95 + 8 +0 + 62 + 0 + 10 +6062.49999 + 20 +5001.296713 + 30 +0.0 + 11 +6074.99999 + 21 +5022.947348 + 31 +0.0 + 0 +LINE + 5 +A96 + 8 +0 + 62 + 0 + 10 +6099.99999 + 20 +5066.248618 + 30 +0.0 + 11 +6112.49999 + 21 +5087.899253 + 31 +0.0 + 0 +LINE + 5 +A97 + 8 +0 + 62 + 0 + 10 +6137.49999 + 20 +5131.200523 + 30 +0.0 + 11 +6149.99999 + 21 +5152.851159 + 31 +0.0 + 0 +LINE + 5 +A98 + 8 +0 + 62 + 0 + 10 +5987.49999 + 20 +4828.091632 + 30 +0.0 + 11 +5999.99999 + 21 +4849.742267 + 31 +0.0 + 0 +LINE + 5 +A99 + 8 +0 + 62 + 0 + 10 +6024.99999 + 20 +4893.043537 + 30 +0.0 + 11 +6037.49999 + 21 +4914.694173 + 31 +0.0 + 0 +LINE + 5 +A9A + 8 +0 + 62 + 0 + 10 +6062.49999 + 20 +4957.995443 + 30 +0.0 + 11 +6074.99999 + 21 +4979.646078 + 31 +0.0 + 0 +LINE + 5 +A9B + 8 +0 + 62 + 0 + 10 +6099.99999 + 20 +5022.947348 + 30 +0.0 + 11 +6112.49999 + 21 +5044.597983 + 31 +0.0 + 0 +LINE + 5 +A9C + 8 +0 + 62 + 0 + 10 +6137.49999 + 20 +5087.899253 + 30 +0.0 + 11 +6149.461578 + 21 +5108.617333 + 31 +0.0 + 0 +LINE + 5 +A9D + 8 +0 + 62 + 0 + 10 +5987.499989 + 20 +4784.790362 + 30 +0.0 + 11 +5999.999989 + 21 +4806.440997 + 31 +0.0 + 0 +LINE + 5 +A9E + 8 +0 + 62 + 0 + 10 +6024.999989 + 20 +4849.742267 + 30 +0.0 + 11 +6037.499989 + 21 +4871.392902 + 31 +0.0 + 0 +LINE + 5 +A9F + 8 +0 + 62 + 0 + 10 +6062.499989 + 20 +4914.694173 + 30 +0.0 + 11 +6074.999989 + 21 +4936.344808 + 31 +0.0 + 0 +LINE + 5 +AA0 + 8 +0 + 62 + 0 + 10 +6099.999989 + 20 +4979.646078 + 30 +0.0 + 11 +6112.499989 + 21 +5001.296713 + 31 +0.0 + 0 +LINE + 5 +AA1 + 8 +0 + 62 + 0 + 10 +6137.499989 + 20 +5044.597983 + 30 +0.0 + 11 +6148.545497 + 21 +5063.729364 + 31 +0.0 + 0 +LINE + 5 +AA2 + 8 +0 + 62 + 0 + 10 +5987.499989 + 20 +4741.489092 + 30 +0.0 + 11 +5999.999989 + 21 +4763.139727 + 31 +0.0 + 0 +LINE + 5 +AA3 + 8 +0 + 62 + 0 + 10 +6024.999989 + 20 +4806.440997 + 30 +0.0 + 11 +6037.499989 + 21 +4828.091632 + 31 +0.0 + 0 +LINE + 5 +AA4 + 8 +0 + 62 + 0 + 10 +6062.499989 + 20 +4871.392902 + 30 +0.0 + 11 +6074.999989 + 21 +4893.043538 + 31 +0.0 + 0 +LINE + 5 +AA5 + 8 +0 + 62 + 0 + 10 +6099.999989 + 20 +4936.344808 + 30 +0.0 + 11 +6112.499989 + 21 +4957.995443 + 31 +0.0 + 0 +LINE + 5 +AA6 + 8 +0 + 62 + 0 + 10 +6137.499989 + 20 +5001.296713 + 30 +0.0 + 11 +6147.629416 + 21 +5018.841395 + 31 +0.0 + 0 +LINE + 5 +AA7 + 8 +0 + 62 + 0 + 10 +5987.499989 + 20 +4698.187822 + 30 +0.0 + 11 +5999.999989 + 21 +4719.838457 + 31 +0.0 + 0 +LINE + 5 +AA8 + 8 +0 + 62 + 0 + 10 +6024.999989 + 20 +4763.139727 + 30 +0.0 + 11 +6037.499989 + 21 +4784.790362 + 31 +0.0 + 0 +LINE + 5 +AA9 + 8 +0 + 62 + 0 + 10 +6062.499989 + 20 +4828.091632 + 30 +0.0 + 11 +6074.999989 + 21 +4849.742267 + 31 +0.0 + 0 +LINE + 5 +AAA + 8 +0 + 62 + 0 + 10 +6099.999989 + 20 +4893.043538 + 30 +0.0 + 11 +6112.499989 + 21 +4914.694173 + 31 +0.0 + 0 +LINE + 5 +AAB + 8 +0 + 62 + 0 + 10 +6137.499989 + 20 +4957.995443 + 30 +0.0 + 11 +6146.713335 + 21 +4973.953426 + 31 +0.0 + 0 +LINE + 5 +AAC + 8 +0 + 62 + 0 + 10 +5987.499989 + 20 +4654.886552 + 30 +0.0 + 11 +5999.999989 + 21 +4676.537187 + 31 +0.0 + 0 +LINE + 5 +AAD + 8 +0 + 62 + 0 + 10 +6024.999989 + 20 +4719.838457 + 30 +0.0 + 11 +6037.499989 + 21 +4741.489092 + 31 +0.0 + 0 +LINE + 5 +AAE + 8 +0 + 62 + 0 + 10 +6062.499989 + 20 +4784.790362 + 30 +0.0 + 11 +6074.999989 + 21 +4806.440997 + 31 +0.0 + 0 +LINE + 5 +AAF + 8 +0 + 62 + 0 + 10 +6099.999989 + 20 +4849.742267 + 30 +0.0 + 11 +6112.499989 + 21 +4871.392903 + 31 +0.0 + 0 +LINE + 5 +AB0 + 8 +0 + 62 + 0 + 10 +6137.499989 + 20 +4914.694173 + 30 +0.0 + 11 +6145.797254 + 21 +4929.065457 + 31 +0.0 + 0 +LINE + 5 +AB1 + 8 +0 + 62 + 0 + 10 +5987.499989 + 20 +4611.585281 + 30 +0.0 + 11 +5999.999989 + 21 +4633.235917 + 31 +0.0 + 0 +LINE + 5 +AB2 + 8 +0 + 62 + 0 + 10 +6024.999989 + 20 +4676.537187 + 30 +0.0 + 11 +6037.499989 + 21 +4698.187822 + 31 +0.0 + 0 +LINE + 5 +AB3 + 8 +0 + 62 + 0 + 10 +6062.499989 + 20 +4741.489092 + 30 +0.0 + 11 +6074.999989 + 21 +4763.139727 + 31 +0.0 + 0 +LINE + 5 +AB4 + 8 +0 + 62 + 0 + 10 +6099.999989 + 20 +4806.440997 + 30 +0.0 + 11 +6112.499989 + 21 +4828.091632 + 31 +0.0 + 0 +LINE + 5 +AB5 + 8 +0 + 62 + 0 + 10 +6137.499989 + 20 +4871.392903 + 30 +0.0 + 11 +6144.881173 + 21 +4884.177489 + 31 +0.0 + 0 +LINE + 5 +AB6 + 8 +0 + 62 + 0 + 10 +5987.499989 + 20 +4568.284011 + 30 +0.0 + 11 +5999.999989 + 21 +4589.934646 + 31 +0.0 + 0 +LINE + 5 +AB7 + 8 +0 + 62 + 0 + 10 +6024.999989 + 20 +4633.235917 + 30 +0.0 + 11 +6037.499989 + 21 +4654.886552 + 31 +0.0 + 0 +LINE + 5 +AB8 + 8 +0 + 62 + 0 + 10 +6062.499989 + 20 +4698.187822 + 30 +0.0 + 11 +6074.999989 + 21 +4719.838457 + 31 +0.0 + 0 +LINE + 5 +AB9 + 8 +0 + 62 + 0 + 10 +6099.999989 + 20 +4763.139727 + 30 +0.0 + 11 +6112.499989 + 21 +4784.790362 + 31 +0.0 + 0 +LINE + 5 +ABA + 8 +0 + 62 + 0 + 10 +6137.499989 + 20 +4828.091632 + 30 +0.0 + 11 +6143.965092 + 21 +4839.28952 + 31 +0.0 + 0 +LINE + 5 +ABB + 8 +0 + 62 + 0 + 10 +5987.499989 + 20 +4524.982741 + 30 +0.0 + 11 +5999.999989 + 21 +4546.633376 + 31 +0.0 + 0 +LINE + 5 +ABC + 8 +0 + 62 + 0 + 10 +6024.999989 + 20 +4589.934646 + 30 +0.0 + 11 +6037.499989 + 21 +4611.585282 + 31 +0.0 + 0 +LINE + 5 +ABD + 8 +0 + 62 + 0 + 10 +6062.499989 + 20 +4654.886552 + 30 +0.0 + 11 +6074.999989 + 21 +4676.537187 + 31 +0.0 + 0 +LINE + 5 +ABE + 8 +0 + 62 + 0 + 10 +6099.999989 + 20 +4719.838457 + 30 +0.0 + 11 +6112.499989 + 21 +4741.489092 + 31 +0.0 + 0 +LINE + 5 +ABF + 8 +0 + 62 + 0 + 10 +6137.499989 + 20 +4784.790362 + 30 +0.0 + 11 +6143.049011 + 21 +4794.401551 + 31 +0.0 + 0 +LINE + 5 +AC0 + 8 +0 + 62 + 0 + 10 +5987.499989 + 20 +4481.681471 + 30 +0.0 + 11 +5999.999989 + 21 +4503.332106 + 31 +0.0 + 0 +LINE + 5 +AC1 + 8 +0 + 62 + 0 + 10 +6024.999989 + 20 +4546.633376 + 30 +0.0 + 11 +6037.499989 + 21 +4568.284011 + 31 +0.0 + 0 +LINE + 5 +AC2 + 8 +0 + 62 + 0 + 10 +6062.499989 + 20 +4611.585282 + 30 +0.0 + 11 +6074.999989 + 21 +4633.235917 + 31 +0.0 + 0 +LINE + 5 +AC3 + 8 +0 + 62 + 0 + 10 +6099.999989 + 20 +4676.537187 + 30 +0.0 + 11 +6112.499989 + 21 +4698.187822 + 31 +0.0 + 0 +LINE + 5 +AC4 + 8 +0 + 62 + 0 + 10 +6137.499989 + 20 +4741.489092 + 30 +0.0 + 11 +6142.13293 + 21 +4749.513582 + 31 +0.0 + 0 +LINE + 5 +AC5 + 8 +0 + 62 + 0 + 10 +5987.499989 + 20 +4438.380201 + 30 +0.0 + 11 +5999.999989 + 21 +4460.030836 + 31 +0.0 + 0 +LINE + 5 +AC6 + 8 +0 + 62 + 0 + 10 +6024.999989 + 20 +4503.332106 + 30 +0.0 + 11 +6037.499989 + 21 +4524.982741 + 31 +0.0 + 0 +LINE + 5 +AC7 + 8 +0 + 62 + 0 + 10 +6062.499989 + 20 +4568.284011 + 30 +0.0 + 11 +6074.999989 + 21 +4589.934647 + 31 +0.0 + 0 +LINE + 5 +AC8 + 8 +0 + 62 + 0 + 10 +6099.999989 + 20 +4633.235917 + 30 +0.0 + 11 +6112.499989 + 21 +4654.886552 + 31 +0.0 + 0 +LINE + 5 +AC9 + 8 +0 + 62 + 0 + 10 +6137.499989 + 20 +4698.187822 + 30 +0.0 + 11 +6141.216849 + 21 +4704.625613 + 31 +0.0 + 0 +LINE + 5 +ACA + 8 +0 + 62 + 0 + 10 +5987.499989 + 20 +4395.078931 + 30 +0.0 + 11 +5999.999989 + 21 +4416.729566 + 31 +0.0 + 0 +LINE + 5 +ACB + 8 +0 + 62 + 0 + 10 +6024.999989 + 20 +4460.030836 + 30 +0.0 + 11 +6037.499989 + 21 +4481.681471 + 31 +0.0 + 0 +LINE + 5 +ACC + 8 +0 + 62 + 0 + 10 +6062.499989 + 20 +4524.982741 + 30 +0.0 + 11 +6074.999989 + 21 +4546.633376 + 31 +0.0 + 0 +LINE + 5 +ACD + 8 +0 + 62 + 0 + 10 +6099.999989 + 20 +4589.934647 + 30 +0.0 + 11 +6112.499989 + 21 +4611.585282 + 31 +0.0 + 0 +LINE + 5 +ACE + 8 +0 + 62 + 0 + 10 +6137.499989 + 20 +4654.886552 + 30 +0.0 + 11 +6140.300768 + 21 +4659.737644 + 31 +0.0 + 0 +LINE + 5 +ACF + 8 +0 + 62 + 0 + 10 +5987.499989 + 20 +4351.777661 + 30 +0.0 + 11 +5999.999989 + 21 +4373.428296 + 31 +0.0 + 0 +LINE + 5 +AD0 + 8 +0 + 62 + 0 + 10 +6024.999989 + 20 +4416.729566 + 30 +0.0 + 11 +6037.499989 + 21 +4438.380201 + 31 +0.0 + 0 +LINE + 5 +AD1 + 8 +0 + 62 + 0 + 10 +6062.499989 + 20 +4481.681471 + 30 +0.0 + 11 +6074.999989 + 21 +4503.332106 + 31 +0.0 + 0 +LINE + 5 +AD2 + 8 +0 + 62 + 0 + 10 +6099.999989 + 20 +4546.633376 + 30 +0.0 + 11 +6112.499989 + 21 +4568.284012 + 31 +0.0 + 0 +LINE + 5 +AD3 + 8 +0 + 62 + 0 + 10 +6137.499989 + 20 +4611.585282 + 30 +0.0 + 11 +6139.384687 + 21 +4614.849676 + 31 +0.0 + 0 +LINE + 5 +AD4 + 8 +0 + 62 + 0 + 10 +5987.499989 + 20 +4308.47639 + 30 +0.0 + 11 +5999.999989 + 21 +4330.127026 + 31 +0.0 + 0 +LINE + 5 +AD5 + 8 +0 + 62 + 0 + 10 +6024.999989 + 20 +4373.428296 + 30 +0.0 + 11 +6037.499989 + 21 +4395.078931 + 31 +0.0 + 0 +LINE + 5 +AD6 + 8 +0 + 62 + 0 + 10 +6062.499989 + 20 +4438.380201 + 30 +0.0 + 11 +6074.999989 + 21 +4460.030836 + 31 +0.0 + 0 +LINE + 5 +AD7 + 8 +0 + 62 + 0 + 10 +6099.999989 + 20 +4503.332106 + 30 +0.0 + 11 +6112.499989 + 21 +4524.982741 + 31 +0.0 + 0 +LINE + 5 +AD8 + 8 +0 + 62 + 0 + 10 +6137.499989 + 20 +4568.284012 + 30 +0.0 + 11 +6138.468606 + 21 +4569.961707 + 31 +0.0 + 0 +LINE + 5 +AD9 + 8 +0 + 62 + 0 + 10 +6024.999988 + 20 +4330.127026 + 30 +0.0 + 11 +6037.499988 + 21 +4351.777661 + 31 +0.0 + 0 +LINE + 5 +ADA + 8 +0 + 62 + 0 + 10 +6062.499988 + 20 +4395.078931 + 30 +0.0 + 11 +6074.999988 + 21 +4416.729566 + 31 +0.0 + 0 +LINE + 5 +ADB + 8 +0 + 62 + 0 + 10 +6099.999988 + 20 +4460.030836 + 30 +0.0 + 11 +6112.499988 + 21 +4481.681471 + 31 +0.0 + 0 +LINE + 5 +ADC + 8 +0 + 62 + 0 + 10 +6137.499988 + 20 +4524.982741 + 30 +0.0 + 11 +6137.552525 + 21 +4525.073738 + 31 +0.0 + 0 +LINE + 5 +ADD + 8 +0 + 62 + 0 + 10 +6062.499988 + 20 +4351.777661 + 30 +0.0 + 11 +6074.999988 + 21 +4373.428296 + 31 +0.0 + 0 +LINE + 5 +ADE + 8 +0 + 62 + 0 + 10 +6099.999988 + 20 +4416.729566 + 30 +0.0 + 11 +6112.499988 + 21 +4438.380201 + 31 +0.0 + 0 +LINE + 5 +ADF + 8 +0 + 62 + 0 + 10 +6099.999988 + 20 +4373.428296 + 30 +0.0 + 11 +6112.499988 + 21 +4395.078931 + 31 +0.0 + 0 +ENDBLK + 5 +AE0 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D39 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D39 + 1 + + 0 +LINE + 5 +AE2 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9820.0 + 20 +2851.0 + 30 +0.0 + 11 +9820.0 + 21 +4224.0 + 31 +0.0 + 0 +INSERT + 5 +AE3 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9820.0 + 20 +2850.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +AE4 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9820.0 + 20 +4225.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +AE5 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9776.25 + 20 +3482.8125 + 30 +0.0 + 40 +87.5 + 1 +55 + 50 +90.0 + 41 +0.75 + 72 + 1 + 11 +9732.5 + 21 +3537.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +AE6 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7915.0 + 20 +2850.0 + 30 +0.0 + 0 +POINT + 5 +AE7 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7915.0 + 20 +4225.0 + 30 +0.0 + 0 +POINT + 5 +AE8 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9820.0 + 20 +4225.0 + 30 +0.0 + 0 +ENDBLK + 5 +AE9 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D40 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D40 + 1 + + 0 +LINE + 5 +AEB + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9820.0 + 20 +4226.0 + 30 +0.0 + 11 +9820.0 + 21 +4624.0 + 31 +0.0 + 0 +INSERT + 5 +AEC + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9820.0 + 20 +4225.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +AED + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9820.0 + 20 +4625.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +AEE + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9776.25 + 20 +4381.25 + 30 +0.0 + 40 +87.5 + 1 +16 + 50 +90.0 + 41 +0.75 + 72 + 1 + 11 +9732.5 + 21 +4425.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +AEF + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7915.0 + 20 +4225.0 + 30 +0.0 + 0 +POINT + 5 +AF0 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8530.0 + 20 +4625.0 + 30 +0.0 + 0 +POINT + 5 +AF1 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9820.0 + 20 +4625.0 + 30 +0.0 + 0 +ENDBLK + 5 +AF2 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D41 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D41 + 1 + + 0 +LINE + 5 +AF4 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9820.0 + 20 +4626.0 + 30 +0.0 + 11 +9820.0 + 21 +4779.0 + 31 +0.0 + 0 +INSERT + 5 +AF5 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9820.0 + 20 +4625.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +AF6 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9820.0 + 20 +4780.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +AF7 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9776.25 + 20 +4680.625 + 30 +0.0 + 40 +87.5 + 1 +4 + 50 +90.0 + 41 +0.75 + 72 + 1 + 11 +9732.5 + 21 +4702.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +AF8 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8530.0 + 20 +4625.0 + 30 +0.0 + 0 +POINT + 5 +AF9 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8555.0 + 20 +4780.0 + 30 +0.0 + 0 +POINT + 5 +AFA + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9820.0 + 20 +4780.0 + 30 +0.0 + 0 +ENDBLK + 5 +AFB + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D42 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D42 + 1 + + 0 +LINE + 5 +AFD + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9820.0 + 20 +4781.0 + 30 +0.0 + 11 +9820.0 + 21 +4899.0 + 31 +0.0 + 0 +INSERT + 5 +AFE + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9820.0 + 20 +4780.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +AFF + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9820.0 + 20 +4900.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +B00 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9776.25 + 20 +4818.125 + 30 +0.0 + 40 +87.5 + 1 +4 + 50 +90.0 + 41 +0.75 + 72 + 1 + 11 +9732.5 + 21 +4840.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +B01 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8555.0 + 20 +4780.0 + 30 +0.0 + 0 +POINT + 5 +B02 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8535.0 + 20 +4900.0 + 30 +0.0 + 0 +POINT + 5 +B03 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9820.0 + 20 +4900.0 + 30 +0.0 + 0 +ENDBLK + 5 +B04 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D43 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D43 + 1 + + 0 +LINE + 5 +B06 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +5966.0 + 20 +6435.0 + 30 +0.0 + 11 +6184.0 + 21 +6435.0 + 31 +0.0 + 0 +INSERT + 5 +B07 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +5965.0 + 20 +6435.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +B08 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +6185.0 + 20 +6435.0 + 30 +0.0 + 0 +TEXT + 5 +B09 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +6053.125 + 20 +6478.75 + 30 +0.0 + 40 +87.5 + 1 +8 + 41 +0.75 + 72 + 1 + 11 +6075.0 + 21 +6522.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +B0A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5965.0 + 20 +5775.0 + 30 +0.0 + 0 +POINT + 5 +B0B + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +6185.0 + 20 +5775.0 + 30 +0.0 + 0 +POINT + 5 +B0C + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +6185.0 + 20 +6435.0 + 30 +0.0 + 0 +ENDBLK + 5 +B0D + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D44 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D44 + 1 + + 0 +LINE + 5 +B0F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +6186.0 + 20 +6435.0 + 30 +0.0 + 11 +7124.0 + 21 +6435.0 + 31 +0.0 + 0 +INSERT + 5 +B10 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +6185.0 + 20 +6435.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +B11 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +7125.0 + 20 +6435.0 + 30 +0.0 + 0 +TEXT + 5 +B12 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +6600.3125 + 20 +6478.75 + 30 +0.0 + 40 +87.5 + 1 +36 + 41 +0.75 + 72 + 1 + 11 +6655.0 + 21 +6522.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +B13 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +6185.0 + 20 +5775.0 + 30 +0.0 + 0 +POINT + 5 +B14 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7125.0 + 20 +5780.0 + 30 +0.0 + 0 +POINT + 5 +B15 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7125.0 + 20 +6435.0 + 30 +0.0 + 0 +ENDBLK + 5 +B16 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D45 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D45 + 1 + + 0 +LINE + 5 +B18 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +5421.0 + 20 +1715.0 + 30 +0.0 + 11 +7919.0 + 21 +1715.0 + 31 +0.0 + 0 +INSERT + 5 +B19 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +5420.0 + 20 +1715.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +B1A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +7920.0 + 20 +1715.0 + 30 +0.0 + 0 +TEXT + 5 +B1B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +6604.375 + 20 +1758.75 + 30 +0.0 + 40 +87.5 + 1 +100 + 41 +0.75 + 72 + 1 + 11 +6670.0 + 21 +1802.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +B1C + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5420.0 + 20 +2850.0 + 30 +0.0 + 0 +POINT + 5 +B1D + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7920.0 + 20 +2850.0 + 30 +0.0 + 0 +POINT + 5 +B1E + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7920.0 + 20 +1715.0 + 30 +0.0 + 0 +ENDBLK + 5 +B1F + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D46 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D46 + 1 + + 0 +LINE + 5 +B21 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +3550.0 + 20 +4661.0 + 30 +0.0 + 11 +3550.0 + 21 +5094.0 + 31 +0.0 + 0 +INSERT + 5 +B22 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +3550.0 + 20 +4660.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +B23 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +3550.0 + 20 +5095.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +B24 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +3506.25 + 20 +4833.75 + 30 +0.0 + 40 +87.5 + 1 +16 + 50 +90.0 + 41 +0.75 + 72 + 1 + 11 +3462.5 + 21 +4877.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +B25 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +6220.0 + 20 +4660.0 + 30 +0.0 + 0 +POINT + 5 +B26 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +6220.0 + 20 +5095.0 + 30 +0.0 + 0 +POINT + 5 +B27 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +3550.0 + 20 +5095.0 + 30 +0.0 + 0 +ENDBLK + 5 +B28 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D47 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D47 + 1 + + 0 +LINE + 5 +B2A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +7126.0 + 20 +6435.0 + 30 +0.0 + 11 +7159.0 + 21 +6435.0 + 31 +0.0 + 0 +INSERT + 5 +B2B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +7125.0 + 20 +6435.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +B2C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +7160.0 + 20 +6435.0 + 30 +0.0 + 0 +TEXT + 5 +B2D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +7204.0625 + 20 +6478.75 + 30 +0.0 + 40 +87.5 + 1 +1 + 41 +0.75 + 72 + 1 + 11 +7215.0 + 21 +6522.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +B2E + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7125.0 + 20 +5780.0 + 30 +0.0 + 0 +POINT + 5 +B2F + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7160.0 + 20 +5785.0 + 30 +0.0 + 0 +POINT + 5 +B30 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7160.0 + 20 +6435.0 + 30 +0.0 + 0 +ENDBLK + 5 +B31 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D48 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D48 + 1 + + 0 +LINE + 5 +B33 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9820.0 + 20 +4901.0 + 30 +0.0 + 11 +9820.0 + 21 +4959.0 + 31 +0.0 + 0 +INSERT + 5 +B34 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9820.0 + 20 +4900.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +B35 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9820.0 + 20 +4960.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +B36 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9776.25 + 20 +4988.125 + 30 +0.0 + 40 +87.5 + 1 +2 + 50 +90.0 + 41 +0.75 + 72 + 1 + 11 +9732.5 + 21 +5010.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +B37 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8535.0 + 20 +4900.0 + 30 +0.0 + 0 +POINT + 5 +B38 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8540.0 + 20 +4960.0 + 30 +0.0 + 0 +POINT + 5 +B39 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9820.0 + 20 +4960.0 + 30 +0.0 + 0 +ENDBLK + 5 +B3A + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X51 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X51 + 1 + + 0 +LINE + 5 +B3C + 8 +0 + 62 + 0 + 10 +14124.696962 + 20 +8185.0 + 30 +0.0 + 11 +14924.696962 + 21 +8985.0 + 31 +0.0 + 0 +LINE + 5 +B3D + 8 +0 + 62 + 0 + 10 +13952.375735 + 20 +8755.140893 + 30 +0.0 + 11 +14182.234842 + 21 +8985.0 + 31 +0.0 + 0 +LINE + 5 +B3E + 8 +0 + 62 + 0 + 10 +14867.159082 + 20 +8185.0 + 30 +0.0 + 11 +15667.159082 + 21 +8985.0 + 31 +0.0 + 0 +LINE + 5 +B3F + 8 +0 + 62 + 0 + 10 +15609.621202 + 20 +8185.0 + 30 +0.0 + 11 +16409.621202 + 21 +8985.0 + 31 +0.0 + 0 +LINE + 5 +B40 + 8 +0 + 62 + 0 + 10 +16352.083323 + 20 +8185.0 + 30 +0.0 + 11 +16564.992137 + 21 +8397.908815 + 31 +0.0 + 0 +LINE + 5 +B41 + 8 +0 + 62 + 0 + 10 +14495.928021 + 20 +8185.0 + 30 +0.0 + 11 +14663.626874 + 21 +8352.698853 + 31 +0.0 + 0 +LINE + 5 +B42 + 8 +0 + 62 + 0 + 10 +14756.434639 + 20 +8445.506618 + 30 +0.0 + 11 +14942.050169 + 21 +8631.122148 + 31 +0.0 + 0 +LINE + 5 +B43 + 8 +0 + 62 + 0 + 10 +15034.857934 + 20 +8723.929913 + 30 +0.0 + 11 +15220.473464 + 21 +8909.545443 + 31 +0.0 + 0 +LINE + 5 +B44 + 8 +0 + 62 + 0 + 10 +13952.375735 + 20 +8383.909833 + 30 +0.0 + 11 +14013.972519 + 21 +8445.506618 + 31 +0.0 + 0 +LINE + 5 +B45 + 8 +0 + 62 + 0 + 10 +14106.780284 + 20 +8538.314383 + 30 +0.0 + 11 +14292.395814 + 21 +8723.929913 + 31 +0.0 + 0 +LINE + 5 +B46 + 8 +0 + 62 + 0 + 10 +14385.203579 + 20 +8816.737678 + 30 +0.0 + 11 +14553.465901 + 21 +8985.0 + 31 +0.0 + 0 +LINE + 5 +B47 + 8 +0 + 62 + 0 + 10 +15238.390142 + 20 +8185.0 + 30 +0.0 + 11 +15313.281229 + 21 +8259.891088 + 31 +0.0 + 0 +LINE + 5 +B48 + 8 +0 + 62 + 0 + 10 +15406.088994 + 20 +8352.698853 + 30 +0.0 + 11 +15591.704525 + 21 +8538.314383 + 31 +0.0 + 0 +LINE + 5 +B49 + 8 +0 + 62 + 0 + 10 +15684.51229 + 20 +8631.122148 + 30 +0.0 + 11 +15870.12782 + 21 +8816.737678 + 31 +0.0 + 0 +LINE + 5 +B4A + 8 +0 + 62 + 0 + 10 +15962.935585 + 20 +8909.545443 + 30 +0.0 + 11 +16038.390142 + 21 +8985.0 + 31 +0.0 + 0 +LINE + 5 +B4B + 8 +0 + 62 + 0 + 10 +16055.74335 + 20 +8259.891088 + 30 +0.0 + 11 +16241.35888 + 21 +8445.506618 + 31 +0.0 + 0 +LINE + 5 +B4C + 8 +0 + 62 + 0 + 10 +16334.166645 + 20 +8538.314383 + 30 +0.0 + 11 +16519.782175 + 21 +8723.929913 + 31 +0.0 + 0 +ENDBLK + 5 +B4D + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X54 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X54 + 1 + + 0 +LINE + 5 +B4F + 8 +0 + 62 + 0 + 10 +14934.375 + 20 +9206.932534 + 30 +0.0 + 11 +14953.125 + 21 +9206.932534 + 31 +0.0 + 0 +LINE + 5 +B50 + 8 +0 + 62 + 0 + 10 +14990.625 + 20 +9206.932534 + 30 +0.0 + 11 +15000.0 + 21 +9206.932534 + 31 +0.0 + 0 +LINE + 5 +B51 + 8 +0 + 62 + 0 + 10 +15625.0 + 20 +9206.932534 + 30 +0.0 + 11 +15628.125 + 21 +9206.932534 + 31 +0.0 + 0 +LINE + 5 +B52 + 8 +0 + 62 + 0 + 10 +15665.625 + 20 +9206.932534 + 30 +0.0 + 11 +15684.375 + 21 +9206.932534 + 31 +0.0 + 0 +LINE + 5 +B53 + 8 +0 + 62 + 0 + 10 +15721.875 + 20 +9206.932534 + 30 +0.0 + 11 +15725.0 + 21 +9206.932534 + 31 +0.0 + 0 +LINE + 5 +B54 + 8 +0 + 62 + 0 + 10 +14906.25 + 20 +9223.17051 + 30 +0.0 + 11 +14925.0 + 21 +9223.17051 + 31 +0.0 + 0 +LINE + 5 +B55 + 8 +0 + 62 + 0 + 10 +14962.5 + 20 +9223.17051 + 30 +0.0 + 11 +14981.25 + 21 +9223.17051 + 31 +0.0 + 0 +LINE + 5 +B56 + 8 +0 + 62 + 0 + 10 +15637.5 + 20 +9223.17051 + 30 +0.0 + 11 +15656.25 + 21 +9223.17051 + 31 +0.0 + 0 +LINE + 5 +B57 + 8 +0 + 62 + 0 + 10 +15693.75 + 20 +9223.17051 + 30 +0.0 + 11 +15712.5 + 21 +9223.17051 + 31 +0.0 + 0 +LINE + 5 +B58 + 8 +0 + 62 + 0 + 10 +14934.375 + 20 +9239.408486 + 30 +0.0 + 11 +14953.125 + 21 +9239.408486 + 31 +0.0 + 0 +LINE + 5 +B59 + 8 +0 + 62 + 0 + 10 +14990.625 + 20 +9239.408486 + 30 +0.0 + 11 +15000.0 + 21 +9239.408486 + 31 +0.0 + 0 +LINE + 5 +B5A + 8 +0 + 62 + 0 + 10 +15625.0 + 20 +9239.408486 + 30 +0.0 + 11 +15628.125 + 21 +9239.408486 + 31 +0.0 + 0 +LINE + 5 +B5B + 8 +0 + 62 + 0 + 10 +15665.625 + 20 +9239.408486 + 30 +0.0 + 11 +15684.375 + 21 +9239.408486 + 31 +0.0 + 0 +LINE + 5 +B5C + 8 +0 + 62 + 0 + 10 +15721.875 + 20 +9239.408486 + 30 +0.0 + 11 +15725.0 + 21 +9239.408486 + 31 +0.0 + 0 +LINE + 5 +B5D + 8 +0 + 62 + 0 + 10 +14906.25 + 20 +9255.646463 + 30 +0.0 + 11 +14925.0 + 21 +9255.646463 + 31 +0.0 + 0 +LINE + 5 +B5E + 8 +0 + 62 + 0 + 10 +14962.5 + 20 +9255.646463 + 30 +0.0 + 11 +14981.25 + 21 +9255.646463 + 31 +0.0 + 0 +LINE + 5 +B5F + 8 +0 + 62 + 0 + 10 +15637.5 + 20 +9255.646463 + 30 +0.0 + 11 +15656.25 + 21 +9255.646463 + 31 +0.0 + 0 +LINE + 5 +B60 + 8 +0 + 62 + 0 + 10 +15693.75 + 20 +9255.646463 + 30 +0.0 + 11 +15712.5 + 21 +9255.646463 + 31 +0.0 + 0 +LINE + 5 +B61 + 8 +0 + 62 + 0 + 10 +14934.375 + 20 +9271.884439 + 30 +0.0 + 11 +14953.125 + 21 +9271.884439 + 31 +0.0 + 0 +LINE + 5 +B62 + 8 +0 + 62 + 0 + 10 +14990.625 + 20 +9271.884439 + 30 +0.0 + 11 +15000.0 + 21 +9271.884439 + 31 +0.0 + 0 +LINE + 5 +B63 + 8 +0 + 62 + 0 + 10 +15625.0 + 20 +9271.884439 + 30 +0.0 + 11 +15628.125 + 21 +9271.884439 + 31 +0.0 + 0 +LINE + 5 +B64 + 8 +0 + 62 + 0 + 10 +15665.625 + 20 +9271.884439 + 30 +0.0 + 11 +15684.375 + 21 +9271.884439 + 31 +0.0 + 0 +LINE + 5 +B65 + 8 +0 + 62 + 0 + 10 +15721.875 + 20 +9271.884439 + 30 +0.0 + 11 +15725.0 + 21 +9271.884439 + 31 +0.0 + 0 +LINE + 5 +B66 + 8 +0 + 62 + 0 + 10 +14906.25 + 20 +9288.122415 + 30 +0.0 + 11 +14925.0 + 21 +9288.122415 + 31 +0.0 + 0 +LINE + 5 +B67 + 8 +0 + 62 + 0 + 10 +14962.5 + 20 +9288.122415 + 30 +0.0 + 11 +14981.25 + 21 +9288.122415 + 31 +0.0 + 0 +LINE + 5 +B68 + 8 +0 + 62 + 0 + 10 +15637.5 + 20 +9288.122415 + 30 +0.0 + 11 +15656.25 + 21 +9288.122415 + 31 +0.0 + 0 +LINE + 5 +B69 + 8 +0 + 62 + 0 + 10 +15693.75 + 20 +9288.122415 + 30 +0.0 + 11 +15712.5 + 21 +9288.122415 + 31 +0.0 + 0 +LINE + 5 +B6A + 8 +0 + 62 + 0 + 10 +14934.375 + 20 +9304.360391 + 30 +0.0 + 11 +14953.125 + 21 +9304.360391 + 31 +0.0 + 0 +LINE + 5 +B6B + 8 +0 + 62 + 0 + 10 +14990.625 + 20 +9304.360391 + 30 +0.0 + 11 +15000.0 + 21 +9304.360391 + 31 +0.0 + 0 +LINE + 5 +B6C + 8 +0 + 62 + 0 + 10 +15625.0 + 20 +9304.360391 + 30 +0.0 + 11 +15628.125 + 21 +9304.360391 + 31 +0.0 + 0 +LINE + 5 +B6D + 8 +0 + 62 + 0 + 10 +15665.625 + 20 +9304.360391 + 30 +0.0 + 11 +15684.375 + 21 +9304.360391 + 31 +0.0 + 0 +LINE + 5 +B6E + 8 +0 + 62 + 0 + 10 +15721.875 + 20 +9304.360391 + 30 +0.0 + 11 +15725.0 + 21 +9304.360391 + 31 +0.0 + 0 +LINE + 5 +B6F + 8 +0 + 62 + 0 + 10 +14906.25 + 20 +9320.598368 + 30 +0.0 + 11 +14925.0 + 21 +9320.598368 + 31 +0.0 + 0 +LINE + 5 +B70 + 8 +0 + 62 + 0 + 10 +14962.5 + 20 +9320.598368 + 30 +0.0 + 11 +14981.25 + 21 +9320.598368 + 31 +0.0 + 0 +LINE + 5 +B71 + 8 +0 + 62 + 0 + 10 +15637.5 + 20 +9320.598368 + 30 +0.0 + 11 +15656.25 + 21 +9320.598368 + 31 +0.0 + 0 +LINE + 5 +B72 + 8 +0 + 62 + 0 + 10 +15693.75 + 20 +9320.598368 + 30 +0.0 + 11 +15712.5 + 21 +9320.598368 + 31 +0.0 + 0 +LINE + 5 +B73 + 8 +0 + 62 + 0 + 10 +14934.375 + 20 +9336.836344 + 30 +0.0 + 11 +14953.125 + 21 +9336.836344 + 31 +0.0 + 0 +LINE + 5 +B74 + 8 +0 + 62 + 0 + 10 +14990.625 + 20 +9336.836344 + 30 +0.0 + 11 +15000.0 + 21 +9336.836344 + 31 +0.0 + 0 +LINE + 5 +B75 + 8 +0 + 62 + 0 + 10 +15625.0 + 20 +9336.836344 + 30 +0.0 + 11 +15628.125 + 21 +9336.836344 + 31 +0.0 + 0 +LINE + 5 +B76 + 8 +0 + 62 + 0 + 10 +15665.625 + 20 +9336.836344 + 30 +0.0 + 11 +15684.375 + 21 +9336.836344 + 31 +0.0 + 0 +LINE + 5 +B77 + 8 +0 + 62 + 0 + 10 +15721.875 + 20 +9336.836344 + 30 +0.0 + 11 +15725.0 + 21 +9336.836344 + 31 +0.0 + 0 +LINE + 5 +B78 + 8 +0 + 62 + 0 + 10 +14906.25 + 20 +9353.07432 + 30 +0.0 + 11 +14925.0 + 21 +9353.07432 + 31 +0.0 + 0 +LINE + 5 +B79 + 8 +0 + 62 + 0 + 10 +14962.5 + 20 +9353.07432 + 30 +0.0 + 11 +14981.25 + 21 +9353.07432 + 31 +0.0 + 0 +LINE + 5 +B7A + 8 +0 + 62 + 0 + 10 +15637.5 + 20 +9353.07432 + 30 +0.0 + 11 +15656.25 + 21 +9353.07432 + 31 +0.0 + 0 +LINE + 5 +B7B + 8 +0 + 62 + 0 + 10 +15693.75 + 20 +9353.07432 + 30 +0.0 + 11 +15712.5 + 21 +9353.07432 + 31 +0.0 + 0 +LINE + 5 +B7C + 8 +0 + 62 + 0 + 10 +14934.375 + 20 +9369.312296 + 30 +0.0 + 11 +14953.125 + 21 +9369.312296 + 31 +0.0 + 0 +LINE + 5 +B7D + 8 +0 + 62 + 0 + 10 +14990.625 + 20 +9369.312296 + 30 +0.0 + 11 +15000.0 + 21 +9369.312296 + 31 +0.0 + 0 +LINE + 5 +B7E + 8 +0 + 62 + 0 + 10 +15625.0 + 20 +9369.312296 + 30 +0.0 + 11 +15628.125 + 21 +9369.312296 + 31 +0.0 + 0 +LINE + 5 +B7F + 8 +0 + 62 + 0 + 10 +15665.625 + 20 +9369.312296 + 30 +0.0 + 11 +15684.375 + 21 +9369.312296 + 31 +0.0 + 0 +LINE + 5 +B80 + 8 +0 + 62 + 0 + 10 +15721.875 + 20 +9369.312296 + 30 +0.0 + 11 +15725.0 + 21 +9369.312296 + 31 +0.0 + 0 +LINE + 5 +B81 + 8 +0 + 62 + 0 + 10 +14906.25 + 20 +9385.550273 + 30 +0.0 + 11 +14925.0 + 21 +9385.550273 + 31 +0.0 + 0 +LINE + 5 +B82 + 8 +0 + 62 + 0 + 10 +14962.5 + 20 +9385.550273 + 30 +0.0 + 11 +14981.25 + 21 +9385.550273 + 31 +0.0 + 0 +LINE + 5 +B83 + 8 +0 + 62 + 0 + 10 +15637.5 + 20 +9385.550273 + 30 +0.0 + 11 +15656.25 + 21 +9385.550273 + 31 +0.0 + 0 +LINE + 5 +B84 + 8 +0 + 62 + 0 + 10 +15693.75 + 20 +9385.550273 + 30 +0.0 + 11 +15712.5 + 21 +9385.550273 + 31 +0.0 + 0 +LINE + 5 +B85 + 8 +0 + 62 + 0 + 10 +14934.375 + 20 +9401.788249 + 30 +0.0 + 11 +14953.125 + 21 +9401.788249 + 31 +0.0 + 0 +LINE + 5 +B86 + 8 +0 + 62 + 0 + 10 +14990.625 + 20 +9401.788249 + 30 +0.0 + 11 +15000.0 + 21 +9401.788249 + 31 +0.0 + 0 +LINE + 5 +B87 + 8 +0 + 62 + 0 + 10 +15625.0 + 20 +9401.788249 + 30 +0.0 + 11 +15628.125 + 21 +9401.788249 + 31 +0.0 + 0 +LINE + 5 +B88 + 8 +0 + 62 + 0 + 10 +15665.625 + 20 +9401.788249 + 30 +0.0 + 11 +15684.375 + 21 +9401.788249 + 31 +0.0 + 0 +LINE + 5 +B89 + 8 +0 + 62 + 0 + 10 +15721.875 + 20 +9401.788249 + 30 +0.0 + 11 +15725.0 + 21 +9401.788249 + 31 +0.0 + 0 +LINE + 5 +B8A + 8 +0 + 62 + 0 + 10 +14906.25 + 20 +9418.026225 + 30 +0.0 + 11 +14925.0 + 21 +9418.026225 + 31 +0.0 + 0 +LINE + 5 +B8B + 8 +0 + 62 + 0 + 10 +14962.5 + 20 +9418.026225 + 30 +0.0 + 11 +14981.25 + 21 +9418.026225 + 31 +0.0 + 0 +LINE + 5 +B8C + 8 +0 + 62 + 0 + 10 +15637.5 + 20 +9418.026225 + 30 +0.0 + 11 +15656.25 + 21 +9418.026225 + 31 +0.0 + 0 +LINE + 5 +B8D + 8 +0 + 62 + 0 + 10 +15693.75 + 20 +9418.026225 + 30 +0.0 + 11 +15712.5 + 21 +9418.026225 + 31 +0.0 + 0 +LINE + 5 +B8E + 8 +0 + 62 + 0 + 10 +14934.375 + 20 +9434.264201 + 30 +0.0 + 11 +14953.125 + 21 +9434.264201 + 31 +0.0 + 0 +LINE + 5 +B8F + 8 +0 + 62 + 0 + 10 +14990.625 + 20 +9434.264201 + 30 +0.0 + 11 +15000.0 + 21 +9434.264201 + 31 +0.0 + 0 +LINE + 5 +B90 + 8 +0 + 62 + 0 + 10 +15625.0 + 20 +9434.264201 + 30 +0.0 + 11 +15628.125 + 21 +9434.264201 + 31 +0.0 + 0 +LINE + 5 +B91 + 8 +0 + 62 + 0 + 10 +15665.625 + 20 +9434.264201 + 30 +0.0 + 11 +15684.375 + 21 +9434.264201 + 31 +0.0 + 0 +LINE + 5 +B92 + 8 +0 + 62 + 0 + 10 +15721.875 + 20 +9434.264201 + 30 +0.0 + 11 +15725.0 + 21 +9434.264201 + 31 +0.0 + 0 +LINE + 5 +B93 + 8 +0 + 62 + 0 + 10 +14906.25 + 20 +9190.694558 + 30 +0.0 + 11 +14925.0 + 21 +9190.694558 + 31 +0.0 + 0 +LINE + 5 +B94 + 8 +0 + 62 + 0 + 10 +14962.5 + 20 +9190.694558 + 30 +0.0 + 11 +14981.25 + 21 +9190.694558 + 31 +0.0 + 0 +LINE + 5 +B95 + 8 +0 + 62 + 0 + 10 +15637.5 + 20 +9190.694558 + 30 +0.0 + 11 +15656.25 + 21 +9190.694558 + 31 +0.0 + 0 +LINE + 5 +B96 + 8 +0 + 62 + 0 + 10 +15693.75 + 20 +9190.694558 + 30 +0.0 + 11 +15712.5 + 21 +9190.694558 + 31 +0.0 + 0 +LINE + 5 +B97 + 8 +0 + 62 + 0 + 10 +14934.375 + 20 +9174.456581 + 30 +0.0 + 11 +14953.125 + 21 +9174.456581 + 31 +0.0 + 0 +LINE + 5 +B98 + 8 +0 + 62 + 0 + 10 +14990.625 + 20 +9174.456581 + 30 +0.0 + 11 +15000.0 + 21 +9174.456581 + 31 +0.0 + 0 +LINE + 5 +B99 + 8 +0 + 62 + 0 + 10 +15625.0 + 20 +9174.456581 + 30 +0.0 + 11 +15628.125 + 21 +9174.456581 + 31 +0.0 + 0 +LINE + 5 +B9A + 8 +0 + 62 + 0 + 10 +15665.625 + 20 +9174.456581 + 30 +0.0 + 11 +15684.375 + 21 +9174.456581 + 31 +0.0 + 0 +LINE + 5 +B9B + 8 +0 + 62 + 0 + 10 +15721.875 + 20 +9174.456581 + 30 +0.0 + 11 +15725.0 + 21 +9174.456581 + 31 +0.0 + 0 +LINE + 5 +B9C + 8 +0 + 62 + 0 + 10 +14906.25 + 20 +9158.218605 + 30 +0.0 + 11 +14925.0 + 21 +9158.218605 + 31 +0.0 + 0 +LINE + 5 +B9D + 8 +0 + 62 + 0 + 10 +14962.5 + 20 +9158.218605 + 30 +0.0 + 11 +14981.25 + 21 +9158.218605 + 31 +0.0 + 0 +LINE + 5 +B9E + 8 +0 + 62 + 0 + 10 +15637.5 + 20 +9158.218605 + 30 +0.0 + 11 +15656.25 + 21 +9158.218605 + 31 +0.0 + 0 +LINE + 5 +B9F + 8 +0 + 62 + 0 + 10 +15693.75 + 20 +9158.218605 + 30 +0.0 + 11 +15712.5 + 21 +9158.218605 + 31 +0.0 + 0 +LINE + 5 +BA0 + 8 +0 + 62 + 0 + 10 +14934.375 + 20 +9141.980629 + 30 +0.0 + 11 +14953.125 + 21 +9141.980629 + 31 +0.0 + 0 +LINE + 5 +BA1 + 8 +0 + 62 + 0 + 10 +14990.625 + 20 +9141.980629 + 30 +0.0 + 11 +15000.0 + 21 +9141.980629 + 31 +0.0 + 0 +LINE + 5 +BA2 + 8 +0 + 62 + 0 + 10 +15625.0 + 20 +9141.980629 + 30 +0.0 + 11 +15628.125 + 21 +9141.980629 + 31 +0.0 + 0 +LINE + 5 +BA3 + 8 +0 + 62 + 0 + 10 +15665.625 + 20 +9141.980629 + 30 +0.0 + 11 +15684.375 + 21 +9141.980629 + 31 +0.0 + 0 +LINE + 5 +BA4 + 8 +0 + 62 + 0 + 10 +15721.875 + 20 +9141.980629 + 30 +0.0 + 11 +15725.0 + 21 +9141.980629 + 31 +0.0 + 0 +LINE + 5 +BA5 + 8 +0 + 62 + 0 + 10 +14906.25 + 20 +9125.742653 + 30 +0.0 + 11 +14925.0 + 21 +9125.742653 + 31 +0.0 + 0 +LINE + 5 +BA6 + 8 +0 + 62 + 0 + 10 +14962.5 + 20 +9125.742653 + 30 +0.0 + 11 +14981.25 + 21 +9125.742653 + 31 +0.0 + 0 +LINE + 5 +BA7 + 8 +0 + 62 + 0 + 10 +15637.5 + 20 +9125.742653 + 30 +0.0 + 11 +15656.25 + 21 +9125.742653 + 31 +0.0 + 0 +LINE + 5 +BA8 + 8 +0 + 62 + 0 + 10 +15693.75 + 20 +9125.742653 + 30 +0.0 + 11 +15712.5 + 21 +9125.742653 + 31 +0.0 + 0 +LINE + 5 +BA9 + 8 +0 + 62 + 0 + 10 +14934.375 + 20 +9109.504676 + 30 +0.0 + 11 +14953.125 + 21 +9109.504676 + 31 +0.0 + 0 +LINE + 5 +BAA + 8 +0 + 62 + 0 + 10 +14990.625 + 20 +9109.504676 + 30 +0.0 + 11 +15000.0 + 21 +9109.504676 + 31 +0.0 + 0 +LINE + 5 +BAB + 8 +0 + 62 + 0 + 10 +15625.0 + 20 +9109.504676 + 30 +0.0 + 11 +15628.125 + 21 +9109.504676 + 31 +0.0 + 0 +LINE + 5 +BAC + 8 +0 + 62 + 0 + 10 +15665.625 + 20 +9109.504676 + 30 +0.0 + 11 +15684.375 + 21 +9109.504676 + 31 +0.0 + 0 +LINE + 5 +BAD + 8 +0 + 62 + 0 + 10 +15721.875 + 20 +9109.504676 + 30 +0.0 + 11 +15725.0 + 21 +9109.504676 + 31 +0.0 + 0 +LINE + 5 +BAE + 8 +0 + 62 + 0 + 10 +14906.25 + 20 +9093.2667 + 30 +0.0 + 11 +14925.0 + 21 +9093.2667 + 31 +0.0 + 0 +LINE + 5 +BAF + 8 +0 + 62 + 0 + 10 +14962.5 + 20 +9093.2667 + 30 +0.0 + 11 +14981.25 + 21 +9093.2667 + 31 +0.0 + 0 +LINE + 5 +BB0 + 8 +0 + 62 + 0 + 10 +15637.5 + 20 +9093.2667 + 30 +0.0 + 11 +15656.25 + 21 +9093.2667 + 31 +0.0 + 0 +LINE + 5 +BB1 + 8 +0 + 62 + 0 + 10 +15693.75 + 20 +9093.2667 + 30 +0.0 + 11 +15712.5 + 21 +9093.2667 + 31 +0.0 + 0 +LINE + 5 +BB2 + 8 +0 + 62 + 0 + 10 +14934.375 + 20 +9077.028724 + 30 +0.0 + 11 +14953.125 + 21 +9077.028724 + 31 +0.0 + 0 +LINE + 5 +BB3 + 8 +0 + 62 + 0 + 10 +14990.625 + 20 +9077.028724 + 30 +0.0 + 11 +15000.0 + 21 +9077.028724 + 31 +0.0 + 0 +LINE + 5 +BB4 + 8 +0 + 62 + 0 + 10 +15625.0 + 20 +9077.028724 + 30 +0.0 + 11 +15628.125 + 21 +9077.028724 + 31 +0.0 + 0 +LINE + 5 +BB5 + 8 +0 + 62 + 0 + 10 +15665.625 + 20 +9077.028724 + 30 +0.0 + 11 +15684.375 + 21 +9077.028724 + 31 +0.0 + 0 +LINE + 5 +BB6 + 8 +0 + 62 + 0 + 10 +15721.875 + 20 +9077.028724 + 30 +0.0 + 11 +15725.0 + 21 +9077.028724 + 31 +0.0 + 0 +LINE + 5 +BB7 + 8 +0 + 62 + 0 + 10 +14906.25 + 20 +9060.790748 + 30 +0.0 + 11 +14925.0 + 21 +9060.790748 + 31 +0.0 + 0 +LINE + 5 +BB8 + 8 +0 + 62 + 0 + 10 +14962.5 + 20 +9060.790748 + 30 +0.0 + 11 +14981.25 + 21 +9060.790748 + 31 +0.0 + 0 +LINE + 5 +BB9 + 8 +0 + 62 + 0 + 10 +15637.5 + 20 +9060.790748 + 30 +0.0 + 11 +15656.25 + 21 +9060.790748 + 31 +0.0 + 0 +LINE + 5 +BBA + 8 +0 + 62 + 0 + 10 +15693.75 + 20 +9060.790748 + 30 +0.0 + 11 +15712.5 + 21 +9060.790748 + 31 +0.0 + 0 +LINE + 5 +BBB + 8 +0 + 62 + 0 + 10 +14934.375 + 20 +9044.552771 + 30 +0.0 + 11 +14953.125 + 21 +9044.552771 + 31 +0.0 + 0 +LINE + 5 +BBC + 8 +0 + 62 + 0 + 10 +14990.625 + 20 +9044.552771 + 30 +0.0 + 11 +15000.0 + 21 +9044.552771 + 31 +0.0 + 0 +LINE + 5 +BBD + 8 +0 + 62 + 0 + 10 +15625.0 + 20 +9044.552771 + 30 +0.0 + 11 +15628.125 + 21 +9044.552771 + 31 +0.0 + 0 +LINE + 5 +BBE + 8 +0 + 62 + 0 + 10 +15665.625 + 20 +9044.552771 + 30 +0.0 + 11 +15684.375 + 21 +9044.552771 + 31 +0.0 + 0 +LINE + 5 +BBF + 8 +0 + 62 + 0 + 10 +15721.875 + 20 +9044.552771 + 30 +0.0 + 11 +15725.0 + 21 +9044.552771 + 31 +0.0 + 0 +LINE + 5 +BC0 + 8 +0 + 62 + 0 + 10 +14906.25 + 20 +9028.314795 + 30 +0.0 + 11 +14925.0 + 21 +9028.314795 + 31 +0.0 + 0 +LINE + 5 +BC1 + 8 +0 + 62 + 0 + 10 +14962.5 + 20 +9028.314795 + 30 +0.0 + 11 +14981.25 + 21 +9028.314795 + 31 +0.0 + 0 +LINE + 5 +BC2 + 8 +0 + 62 + 0 + 10 +15637.5 + 20 +9028.314795 + 30 +0.0 + 11 +15656.25 + 21 +9028.314795 + 31 +0.0 + 0 +LINE + 5 +BC3 + 8 +0 + 62 + 0 + 10 +15693.75 + 20 +9028.314795 + 30 +0.0 + 11 +15712.5 + 21 +9028.314795 + 31 +0.0 + 0 +LINE + 5 +BC4 + 8 +0 + 62 + 0 + 10 +14934.375 + 20 +9012.076819 + 30 +0.0 + 11 +14953.125 + 21 +9012.076819 + 31 +0.0 + 0 +LINE + 5 +BC5 + 8 +0 + 62 + 0 + 10 +14990.625 + 20 +9012.076819 + 30 +0.0 + 11 +15000.0 + 21 +9012.076819 + 31 +0.0 + 0 +LINE + 5 +BC6 + 8 +0 + 62 + 0 + 10 +15625.0 + 20 +9012.076819 + 30 +0.0 + 11 +15628.125 + 21 +9012.076819 + 31 +0.0 + 0 +LINE + 5 +BC7 + 8 +0 + 62 + 0 + 10 +15665.625 + 20 +9012.076819 + 30 +0.0 + 11 +15684.375 + 21 +9012.076819 + 31 +0.0 + 0 +LINE + 5 +BC8 + 8 +0 + 62 + 0 + 10 +15721.875 + 20 +9012.076819 + 30 +0.0 + 11 +15725.0 + 21 +9012.076819 + 31 +0.0 + 0 +LINE + 5 +BC9 + 8 +0 + 62 + 0 + 10 +14906.25 + 20 +8995.838843 + 30 +0.0 + 11 +14925.0 + 21 +8995.838843 + 31 +0.0 + 0 +LINE + 5 +BCA + 8 +0 + 62 + 0 + 10 +14962.5 + 20 +8995.838843 + 30 +0.0 + 11 +14981.25 + 21 +8995.838843 + 31 +0.0 + 0 +LINE + 5 +BCB + 8 +0 + 62 + 0 + 10 +15637.5 + 20 +8995.838843 + 30 +0.0 + 11 +15656.25 + 21 +8995.838843 + 31 +0.0 + 0 +LINE + 5 +BCC + 8 +0 + 62 + 0 + 10 +15693.75 + 20 +8995.838843 + 30 +0.0 + 11 +15712.5 + 21 +8995.838843 + 31 +0.0 + 0 +LINE + 5 +BCD + 8 +0 + 62 + 0 + 10 +14990.624933 + 20 +9434.264204 + 30 +0.0 + 11 +14990.200121 + 21 +9435.0 + 31 +0.0 + 0 +LINE + 5 +BCE + 8 +0 + 62 + 0 + 10 +14990.624933 + 20 +9401.788251 + 30 +0.0 + 11 +14981.249933 + 21 +9418.026228 + 31 +0.0 + 0 +LINE + 5 +BCF + 8 +0 + 62 + 0 + 10 +14990.624933 + 20 +9369.312299 + 30 +0.0 + 11 +14981.249933 + 21 +9385.550275 + 31 +0.0 + 0 +LINE + 5 +BD0 + 8 +0 + 62 + 0 + 10 +14962.499933 + 20 +9418.026228 + 30 +0.0 + 11 +14953.124933 + 21 +9434.264204 + 31 +0.0 + 0 +LINE + 5 +BD1 + 8 +0 + 62 + 0 + 10 +14990.624933 + 20 +9336.836346 + 30 +0.0 + 11 +14981.249933 + 21 +9353.074322 + 31 +0.0 + 0 +LINE + 5 +BD2 + 8 +0 + 62 + 0 + 10 +14962.499933 + 20 +9385.550275 + 30 +0.0 + 11 +14953.124933 + 21 +9401.788251 + 31 +0.0 + 0 +LINE + 5 +BD3 + 8 +0 + 62 + 0 + 10 +14934.374933 + 20 +9434.264204 + 30 +0.0 + 11 +14933.950121 + 21 +9435.0 + 31 +0.0 + 0 +LINE + 5 +BD4 + 8 +0 + 62 + 0 + 10 +14990.624933 + 20 +9304.360393 + 30 +0.0 + 11 +14981.249933 + 21 +9320.59837 + 31 +0.0 + 0 +LINE + 5 +BD5 + 8 +0 + 62 + 0 + 10 +14962.499933 + 20 +9353.074322 + 30 +0.0 + 11 +14953.124933 + 21 +9369.312299 + 31 +0.0 + 0 +LINE + 5 +BD6 + 8 +0 + 62 + 0 + 10 +14934.374933 + 20 +9401.788251 + 30 +0.0 + 11 +14924.999933 + 21 +9418.026228 + 31 +0.0 + 0 +LINE + 5 +BD7 + 8 +0 + 62 + 0 + 10 +14990.624933 + 20 +9271.884441 + 30 +0.0 + 11 +14981.249933 + 21 +9288.122417 + 31 +0.0 + 0 +LINE + 5 +BD8 + 8 +0 + 62 + 0 + 10 +14962.499933 + 20 +9320.59837 + 30 +0.0 + 11 +14953.124933 + 21 +9336.836346 + 31 +0.0 + 0 +LINE + 5 +BD9 + 8 +0 + 62 + 0 + 10 +14934.374933 + 20 +9369.312299 + 30 +0.0 + 11 +14924.999933 + 21 +9385.550275 + 31 +0.0 + 0 +LINE + 5 +BDA + 8 +0 + 62 + 0 + 10 +14906.249933 + 20 +9418.026228 + 30 +0.0 + 11 +14900.0 + 21 +9428.85143 + 31 +0.0 + 0 +LINE + 5 +BDB + 8 +0 + 62 + 0 + 10 +14990.624933 + 20 +9239.408488 + 30 +0.0 + 11 +14981.249933 + 21 +9255.646464 + 31 +0.0 + 0 +LINE + 5 +BDC + 8 +0 + 62 + 0 + 10 +14962.499933 + 20 +9288.122417 + 30 +0.0 + 11 +14953.124933 + 21 +9304.360393 + 31 +0.0 + 0 +LINE + 5 +BDD + 8 +0 + 62 + 0 + 10 +14934.374933 + 20 +9336.836346 + 30 +0.0 + 11 +14924.999933 + 21 +9353.074322 + 31 +0.0 + 0 +LINE + 5 +BDE + 8 +0 + 62 + 0 + 10 +14906.249933 + 20 +9385.550275 + 30 +0.0 + 11 +14900.0 + 21 +9396.375477 + 31 +0.0 + 0 +LINE + 5 +BDF + 8 +0 + 62 + 0 + 10 +14990.624933 + 20 +9206.932536 + 30 +0.0 + 11 +14981.249933 + 21 +9223.170512 + 31 +0.0 + 0 +LINE + 5 +BE0 + 8 +0 + 62 + 0 + 10 +14962.499933 + 20 +9255.646465 + 30 +0.0 + 11 +14953.124933 + 21 +9271.884441 + 31 +0.0 + 0 +LINE + 5 +BE1 + 8 +0 + 62 + 0 + 10 +14934.374933 + 20 +9304.360393 + 30 +0.0 + 11 +14924.999933 + 21 +9320.59837 + 31 +0.0 + 0 +LINE + 5 +BE2 + 8 +0 + 62 + 0 + 10 +14906.249933 + 20 +9353.074322 + 30 +0.0 + 11 +14900.0 + 21 +9363.899525 + 31 +0.0 + 0 +LINE + 5 +BE3 + 8 +0 + 62 + 0 + 10 +14990.624934 + 20 +9174.456583 + 30 +0.0 + 11 +14981.249934 + 21 +9190.694559 + 31 +0.0 + 0 +LINE + 5 +BE4 + 8 +0 + 62 + 0 + 10 +14962.499934 + 20 +9223.170512 + 30 +0.0 + 11 +14953.124934 + 21 +9239.408488 + 31 +0.0 + 0 +LINE + 5 +BE5 + 8 +0 + 62 + 0 + 10 +14934.374934 + 20 +9271.884441 + 30 +0.0 + 11 +14924.999934 + 21 +9288.122417 + 31 +0.0 + 0 +LINE + 5 +BE6 + 8 +0 + 62 + 0 + 10 +14906.249934 + 20 +9320.59837 + 30 +0.0 + 11 +14900.0 + 21 +9331.423572 + 31 +0.0 + 0 +LINE + 5 +BE7 + 8 +0 + 62 + 0 + 10 +14990.624934 + 20 +9141.98063 + 30 +0.0 + 11 +14981.249934 + 21 +9158.218607 + 31 +0.0 + 0 +LINE + 5 +BE8 + 8 +0 + 62 + 0 + 10 +14962.499934 + 20 +9190.694559 + 30 +0.0 + 11 +14953.124934 + 21 +9206.932536 + 31 +0.0 + 0 +LINE + 5 +BE9 + 8 +0 + 62 + 0 + 10 +14934.374934 + 20 +9239.408488 + 30 +0.0 + 11 +14924.999934 + 21 +9255.646465 + 31 +0.0 + 0 +LINE + 5 +BEA + 8 +0 + 62 + 0 + 10 +14906.249934 + 20 +9288.122417 + 30 +0.0 + 11 +14900.0 + 21 +9298.94762 + 31 +0.0 + 0 +LINE + 5 +BEB + 8 +0 + 62 + 0 + 10 +14990.624934 + 20 +9109.504678 + 30 +0.0 + 11 +14981.249934 + 21 +9125.742654 + 31 +0.0 + 0 +LINE + 5 +BEC + 8 +0 + 62 + 0 + 10 +14962.499934 + 20 +9158.218607 + 30 +0.0 + 11 +14953.124934 + 21 +9174.456583 + 31 +0.0 + 0 +LINE + 5 +BED + 8 +0 + 62 + 0 + 10 +14934.374934 + 20 +9206.932536 + 30 +0.0 + 11 +14924.999934 + 21 +9223.170512 + 31 +0.0 + 0 +LINE + 5 +BEE + 8 +0 + 62 + 0 + 10 +14906.249934 + 20 +9255.646465 + 30 +0.0 + 11 +14900.0 + 21 +9266.471667 + 31 +0.0 + 0 +LINE + 5 +BEF + 8 +0 + 62 + 0 + 10 +14990.624934 + 20 +9077.028725 + 30 +0.0 + 11 +14981.249934 + 21 +9093.266701 + 31 +0.0 + 0 +LINE + 5 +BF0 + 8 +0 + 62 + 0 + 10 +14962.499934 + 20 +9125.742654 + 30 +0.0 + 11 +14953.124934 + 21 +9141.98063 + 31 +0.0 + 0 +LINE + 5 +BF1 + 8 +0 + 62 + 0 + 10 +14934.374934 + 20 +9174.456583 + 30 +0.0 + 11 +14924.999934 + 21 +9190.694559 + 31 +0.0 + 0 +LINE + 5 +BF2 + 8 +0 + 62 + 0 + 10 +14906.249934 + 20 +9223.170512 + 30 +0.0 + 11 +14900.0 + 21 +9233.995715 + 31 +0.0 + 0 +LINE + 5 +BF3 + 8 +0 + 62 + 0 + 10 +14990.624934 + 20 +9044.552773 + 30 +0.0 + 11 +14981.249934 + 21 +9060.790749 + 31 +0.0 + 0 +LINE + 5 +BF4 + 8 +0 + 62 + 0 + 10 +14962.499934 + 20 +9093.266701 + 30 +0.0 + 11 +14953.124934 + 21 +9109.504678 + 31 +0.0 + 0 +LINE + 5 +BF5 + 8 +0 + 62 + 0 + 10 +14934.374934 + 20 +9141.98063 + 30 +0.0 + 11 +14924.999934 + 21 +9158.218607 + 31 +0.0 + 0 +LINE + 5 +BF6 + 8 +0 + 62 + 0 + 10 +14906.249934 + 20 +9190.694559 + 30 +0.0 + 11 +14900.0 + 21 +9201.519762 + 31 +0.0 + 0 +LINE + 5 +BF7 + 8 +0 + 62 + 0 + 10 +14990.624934 + 20 +9012.07682 + 30 +0.0 + 11 +14981.249934 + 21 +9028.314796 + 31 +0.0 + 0 +LINE + 5 +BF8 + 8 +0 + 62 + 0 + 10 +14962.499934 + 20 +9060.790749 + 30 +0.0 + 11 +14953.124934 + 21 +9077.028725 + 31 +0.0 + 0 +LINE + 5 +BF9 + 8 +0 + 62 + 0 + 10 +14934.374934 + 20 +9109.504678 + 30 +0.0 + 11 +14924.999934 + 21 +9125.742654 + 31 +0.0 + 0 +LINE + 5 +BFA + 8 +0 + 62 + 0 + 10 +14906.249934 + 20 +9158.218607 + 30 +0.0 + 11 +14900.0 + 21 +9169.04381 + 31 +0.0 + 0 +LINE + 5 +BFB + 8 +0 + 62 + 0 + 10 +14987.507743 + 20 +8985.0 + 30 +0.0 + 11 +14981.249934 + 21 +8995.838844 + 31 +0.0 + 0 +LINE + 5 +BFC + 8 +0 + 62 + 0 + 10 +14962.499934 + 20 +9028.314796 + 30 +0.0 + 11 +14953.124934 + 21 +9044.552773 + 31 +0.0 + 0 +LINE + 5 +BFD + 8 +0 + 62 + 0 + 10 +14934.374934 + 20 +9077.028725 + 30 +0.0 + 11 +14924.999934 + 21 +9093.266702 + 31 +0.0 + 0 +LINE + 5 +BFE + 8 +0 + 62 + 0 + 10 +14906.249934 + 20 +9125.742654 + 30 +0.0 + 11 +14900.0 + 21 +9136.567857 + 31 +0.0 + 0 +LINE + 5 +BFF + 8 +0 + 62 + 0 + 10 +14962.499934 + 20 +8995.838844 + 30 +0.0 + 11 +14953.124934 + 21 +9012.07682 + 31 +0.0 + 0 +LINE + 5 +C00 + 8 +0 + 62 + 0 + 10 +14934.374934 + 20 +9044.552773 + 30 +0.0 + 11 +14924.999934 + 21 +9060.790749 + 31 +0.0 + 0 +LINE + 5 +C01 + 8 +0 + 62 + 0 + 10 +14906.249934 + 20 +9093.266702 + 30 +0.0 + 11 +14900.0 + 21 +9104.091905 + 31 +0.0 + 0 +LINE + 5 +C02 + 8 +0 + 62 + 0 + 10 +14934.374934 + 20 +9012.07682 + 30 +0.0 + 11 +14924.999934 + 21 +9028.314796 + 31 +0.0 + 0 +LINE + 5 +C03 + 8 +0 + 62 + 0 + 10 +14906.249934 + 20 +9060.790749 + 30 +0.0 + 11 +14900.0 + 21 +9071.615952 + 31 +0.0 + 0 +LINE + 5 +C04 + 8 +0 + 62 + 0 + 10 +14931.257743 + 20 +8985.0 + 30 +0.0 + 11 +14924.999934 + 21 +8995.838844 + 31 +0.0 + 0 +LINE + 5 +C05 + 8 +0 + 62 + 0 + 10 +14906.249934 + 20 +9028.314796 + 30 +0.0 + 11 +14900.0 + 21 +9039.14 + 31 +0.0 + 0 +LINE + 5 +C06 + 8 +0 + 62 + 0 + 10 +14906.249934 + 20 +8995.838844 + 30 +0.0 + 11 +14900.0 + 21 +9006.664047 + 31 +0.0 + 0 +LINE + 5 +C07 + 8 +0 + 62 + 0 + 10 +15637.499932 + 20 +8995.838842 + 30 +0.0 + 11 +15628.124932 + 21 +9012.076819 + 31 +0.0 + 0 +LINE + 5 +C08 + 8 +0 + 62 + 0 + 10 +15662.50774 + 20 +8985.0 + 30 +0.0 + 11 +15656.249932 + 21 +8995.838842 + 31 +0.0 + 0 +LINE + 5 +C09 + 8 +0 + 62 + 0 + 10 +15637.499932 + 20 +9028.314795 + 30 +0.0 + 11 +15628.124932 + 21 +9044.552771 + 31 +0.0 + 0 +LINE + 5 +C0A + 8 +0 + 62 + 0 + 10 +15665.624932 + 20 +9012.076819 + 30 +0.0 + 11 +15656.249932 + 21 +9028.314795 + 31 +0.0 + 0 +LINE + 5 +C0B + 8 +0 + 62 + 0 + 10 +15637.499932 + 20 +9060.790748 + 30 +0.0 + 11 +15628.124932 + 21 +9077.028724 + 31 +0.0 + 0 +LINE + 5 +C0C + 8 +0 + 62 + 0 + 10 +15693.749932 + 20 +8995.838842 + 30 +0.0 + 11 +15684.374932 + 21 +9012.076819 + 31 +0.0 + 0 +LINE + 5 +C0D + 8 +0 + 62 + 0 + 10 +15665.624932 + 20 +9044.552771 + 30 +0.0 + 11 +15656.249932 + 21 +9060.790748 + 31 +0.0 + 0 +LINE + 5 +C0E + 8 +0 + 62 + 0 + 10 +15637.499932 + 20 +9093.2667 + 30 +0.0 + 11 +15628.124932 + 21 +9109.504677 + 31 +0.0 + 0 +LINE + 5 +C0F + 8 +0 + 62 + 0 + 10 +15718.75774 + 20 +8985.0 + 30 +0.0 + 11 +15712.499931 + 21 +8995.838842 + 31 +0.0 + 0 +LINE + 5 +C10 + 8 +0 + 62 + 0 + 10 +15693.749931 + 20 +9028.314795 + 30 +0.0 + 11 +15684.374931 + 21 +9044.552771 + 31 +0.0 + 0 +LINE + 5 +C11 + 8 +0 + 62 + 0 + 10 +15665.624931 + 20 +9077.028724 + 30 +0.0 + 11 +15656.249931 + 21 +9093.2667 + 31 +0.0 + 0 +LINE + 5 +C12 + 8 +0 + 62 + 0 + 10 +15637.499931 + 20 +9125.742653 + 30 +0.0 + 11 +15628.124931 + 21 +9141.980629 + 31 +0.0 + 0 +LINE + 5 +C13 + 8 +0 + 62 + 0 + 10 +15721.874931 + 20 +9012.076819 + 30 +0.0 + 11 +15712.499931 + 21 +9028.314795 + 31 +0.0 + 0 +LINE + 5 +C14 + 8 +0 + 62 + 0 + 10 +15693.749931 + 20 +9060.790747 + 30 +0.0 + 11 +15684.374931 + 21 +9077.028724 + 31 +0.0 + 0 +LINE + 5 +C15 + 8 +0 + 62 + 0 + 10 +15665.624931 + 20 +9109.504676 + 30 +0.0 + 11 +15656.249931 + 21 +9125.742653 + 31 +0.0 + 0 +LINE + 5 +C16 + 8 +0 + 62 + 0 + 10 +15637.499931 + 20 +9158.218605 + 30 +0.0 + 11 +15628.124931 + 21 +9174.456582 + 31 +0.0 + 0 +LINE + 5 +C17 + 8 +0 + 62 + 0 + 10 +15721.874931 + 20 +9044.552771 + 30 +0.0 + 11 +15712.499931 + 21 +9060.790747 + 31 +0.0 + 0 +LINE + 5 +C18 + 8 +0 + 62 + 0 + 10 +15693.749931 + 20 +9093.2667 + 30 +0.0 + 11 +15684.374931 + 21 +9109.504676 + 31 +0.0 + 0 +LINE + 5 +C19 + 8 +0 + 62 + 0 + 10 +15665.624931 + 20 +9141.980629 + 30 +0.0 + 11 +15656.249931 + 21 +9158.218605 + 31 +0.0 + 0 +LINE + 5 +C1A + 8 +0 + 62 + 0 + 10 +15637.499931 + 20 +9190.694558 + 30 +0.0 + 11 +15628.124931 + 21 +9206.932534 + 31 +0.0 + 0 +LINE + 5 +C1B + 8 +0 + 62 + 0 + 10 +15721.874931 + 20 +9077.028724 + 30 +0.0 + 11 +15712.499931 + 21 +9093.2667 + 31 +0.0 + 0 +LINE + 5 +C1C + 8 +0 + 62 + 0 + 10 +15693.749931 + 20 +9125.742653 + 30 +0.0 + 11 +15684.374931 + 21 +9141.980629 + 31 +0.0 + 0 +LINE + 5 +C1D + 8 +0 + 62 + 0 + 10 +15665.624931 + 20 +9174.456582 + 30 +0.0 + 11 +15656.249931 + 21 +9190.694558 + 31 +0.0 + 0 +LINE + 5 +C1E + 8 +0 + 62 + 0 + 10 +15637.499931 + 20 +9223.170511 + 30 +0.0 + 11 +15628.124931 + 21 +9239.408487 + 31 +0.0 + 0 +LINE + 5 +C1F + 8 +0 + 62 + 0 + 10 +15721.874931 + 20 +9109.504676 + 30 +0.0 + 11 +15712.499931 + 21 +9125.742653 + 31 +0.0 + 0 +LINE + 5 +C20 + 8 +0 + 62 + 0 + 10 +15693.749931 + 20 +9158.218605 + 30 +0.0 + 11 +15684.374931 + 21 +9174.456582 + 31 +0.0 + 0 +LINE + 5 +C21 + 8 +0 + 62 + 0 + 10 +15665.624931 + 20 +9206.932534 + 30 +0.0 + 11 +15656.249931 + 21 +9223.170511 + 31 +0.0 + 0 +LINE + 5 +C22 + 8 +0 + 62 + 0 + 10 +15637.499931 + 20 +9255.646463 + 30 +0.0 + 11 +15628.124931 + 21 +9271.88444 + 31 +0.0 + 0 +LINE + 5 +C23 + 8 +0 + 62 + 0 + 10 +15721.874931 + 20 +9141.980629 + 30 +0.0 + 11 +15712.499931 + 21 +9158.218605 + 31 +0.0 + 0 +LINE + 5 +C24 + 8 +0 + 62 + 0 + 10 +15693.749931 + 20 +9190.694558 + 30 +0.0 + 11 +15684.374931 + 21 +9206.932534 + 31 +0.0 + 0 +LINE + 5 +C25 + 8 +0 + 62 + 0 + 10 +15665.624931 + 20 +9239.408487 + 30 +0.0 + 11 +15656.249931 + 21 +9255.646463 + 31 +0.0 + 0 +LINE + 5 +C26 + 8 +0 + 62 + 0 + 10 +15637.499931 + 20 +9288.122416 + 30 +0.0 + 11 +15628.124931 + 21 +9304.360392 + 31 +0.0 + 0 +LINE + 5 +C27 + 8 +0 + 62 + 0 + 10 +15721.874931 + 20 +9174.456582 + 30 +0.0 + 11 +15712.499931 + 21 +9190.694558 + 31 +0.0 + 0 +LINE + 5 +C28 + 8 +0 + 62 + 0 + 10 +15693.749931 + 20 +9223.170511 + 30 +0.0 + 11 +15684.374931 + 21 +9239.408487 + 31 +0.0 + 0 +LINE + 5 +C29 + 8 +0 + 62 + 0 + 10 +15665.624931 + 20 +9271.884439 + 30 +0.0 + 11 +15656.249931 + 21 +9288.122416 + 31 +0.0 + 0 +LINE + 5 +C2A + 8 +0 + 62 + 0 + 10 +15637.499931 + 20 +9320.598368 + 30 +0.0 + 11 +15628.124931 + 21 +9336.836345 + 31 +0.0 + 0 +LINE + 5 +C2B + 8 +0 + 62 + 0 + 10 +15721.874931 + 20 +9206.932534 + 30 +0.0 + 11 +15712.499931 + 21 +9223.17051 + 31 +0.0 + 0 +LINE + 5 +C2C + 8 +0 + 62 + 0 + 10 +15693.749931 + 20 +9255.646463 + 30 +0.0 + 11 +15684.374931 + 21 +9271.884439 + 31 +0.0 + 0 +LINE + 5 +C2D + 8 +0 + 62 + 0 + 10 +15665.624931 + 20 +9304.360392 + 30 +0.0 + 11 +15656.249931 + 21 +9320.598368 + 31 +0.0 + 0 +LINE + 5 +C2E + 8 +0 + 62 + 0 + 10 +15637.499931 + 20 +9353.074321 + 30 +0.0 + 11 +15628.124931 + 21 +9369.312297 + 31 +0.0 + 0 +LINE + 5 +C2F + 8 +0 + 62 + 0 + 10 +15721.874931 + 20 +9239.408487 + 30 +0.0 + 11 +15712.499931 + 21 +9255.646463 + 31 +0.0 + 0 +LINE + 5 +C30 + 8 +0 + 62 + 0 + 10 +15693.749931 + 20 +9288.122416 + 30 +0.0 + 11 +15684.374931 + 21 +9304.360392 + 31 +0.0 + 0 +LINE + 5 +C31 + 8 +0 + 62 + 0 + 10 +15665.624931 + 20 +9336.836345 + 30 +0.0 + 11 +15656.249931 + 21 +9353.074321 + 31 +0.0 + 0 +LINE + 5 +C32 + 8 +0 + 62 + 0 + 10 +15637.499931 + 20 +9385.550274 + 30 +0.0 + 11 +15628.124931 + 21 +9401.78825 + 31 +0.0 + 0 +LINE + 5 +C33 + 8 +0 + 62 + 0 + 10 +15721.874931 + 20 +9271.884439 + 30 +0.0 + 11 +15712.499931 + 21 +9288.122416 + 31 +0.0 + 0 +LINE + 5 +C34 + 8 +0 + 62 + 0 + 10 +15693.749931 + 20 +9320.598368 + 30 +0.0 + 11 +15684.374931 + 21 +9336.836345 + 31 +0.0 + 0 +LINE + 5 +C35 + 8 +0 + 62 + 0 + 10 +15665.624931 + 20 +9369.312297 + 30 +0.0 + 11 +15656.249931 + 21 +9385.550274 + 31 +0.0 + 0 +LINE + 5 +C36 + 8 +0 + 62 + 0 + 10 +15637.499931 + 20 +9418.026226 + 30 +0.0 + 11 +15628.124931 + 21 +9434.264203 + 31 +0.0 + 0 +LINE + 5 +C37 + 8 +0 + 62 + 0 + 10 +15721.874931 + 20 +9304.360392 + 30 +0.0 + 11 +15712.499931 + 21 +9320.598368 + 31 +0.0 + 0 +LINE + 5 +C38 + 8 +0 + 62 + 0 + 10 +15693.749931 + 20 +9353.074321 + 30 +0.0 + 11 +15684.374931 + 21 +9369.312297 + 31 +0.0 + 0 +LINE + 5 +C39 + 8 +0 + 62 + 0 + 10 +15665.624931 + 20 +9401.78825 + 30 +0.0 + 11 +15656.249931 + 21 +9418.026226 + 31 +0.0 + 0 +LINE + 5 +C3A + 8 +0 + 62 + 0 + 10 +15721.874931 + 20 +9336.836345 + 30 +0.0 + 11 +15712.499931 + 21 +9353.074321 + 31 +0.0 + 0 +LINE + 5 +C3B + 8 +0 + 62 + 0 + 10 +15693.749931 + 20 +9385.550274 + 30 +0.0 + 11 +15684.374931 + 21 +9401.78825 + 31 +0.0 + 0 +LINE + 5 +C3C + 8 +0 + 62 + 0 + 10 +15665.624931 + 20 +9434.264203 + 30 +0.0 + 11 +15665.200118 + 21 +9435.0 + 31 +0.0 + 0 +LINE + 5 +C3D + 8 +0 + 62 + 0 + 10 +15721.874931 + 20 +9369.312297 + 30 +0.0 + 11 +15712.499931 + 21 +9385.550274 + 31 +0.0 + 0 +LINE + 5 +C3E + 8 +0 + 62 + 0 + 10 +15693.749931 + 20 +9418.026226 + 30 +0.0 + 11 +15684.374931 + 21 +9434.264202 + 31 +0.0 + 0 +LINE + 5 +C3F + 8 +0 + 62 + 0 + 10 +15721.874931 + 20 +9401.78825 + 30 +0.0 + 11 +15712.499931 + 21 +9418.026226 + 31 +0.0 + 0 +LINE + 5 +C40 + 8 +0 + 62 + 0 + 10 +15721.874931 + 20 +9434.264202 + 30 +0.0 + 11 +15721.450118 + 21 +9435.0 + 31 +0.0 + 0 +LINE + 5 +C41 + 8 +0 + 62 + 0 + 10 +14981.249968 + 20 +8995.8389 + 30 +0.0 + 11 +14990.624968 + 21 +9012.076877 + 31 +0.0 + 0 +LINE + 5 +C42 + 8 +0 + 62 + 0 + 10 +14956.242126 + 20 +8985.0 + 30 +0.0 + 11 +14962.499968 + 21 +8995.8389 + 31 +0.0 + 0 +LINE + 5 +C43 + 8 +0 + 62 + 0 + 10 +14981.249968 + 20 +9028.314853 + 30 +0.0 + 11 +14990.624968 + 21 +9044.552829 + 31 +0.0 + 0 +LINE + 5 +C44 + 8 +0 + 62 + 0 + 10 +14953.124968 + 20 +9012.076877 + 30 +0.0 + 11 +14962.499968 + 21 +9028.314853 + 31 +0.0 + 0 +LINE + 5 +C45 + 8 +0 + 62 + 0 + 10 +14981.249968 + 20 +9060.790806 + 30 +0.0 + 11 +14990.624968 + 21 +9077.028782 + 31 +0.0 + 0 +LINE + 5 +C46 + 8 +0 + 62 + 0 + 10 +14924.999968 + 20 +8995.8389 + 30 +0.0 + 11 +14934.374968 + 21 +9012.076877 + 31 +0.0 + 0 +LINE + 5 +C47 + 8 +0 + 62 + 0 + 10 +14953.124968 + 20 +9044.552829 + 30 +0.0 + 11 +14962.499968 + 21 +9060.790806 + 31 +0.0 + 0 +LINE + 5 +C48 + 8 +0 + 62 + 0 + 10 +14981.249968 + 20 +9093.266758 + 30 +0.0 + 11 +14990.624968 + 21 +9109.504734 + 31 +0.0 + 0 +LINE + 5 +C49 + 8 +0 + 62 + 0 + 10 +14900.0 + 20 +8985.013638 + 30 +0.0 + 11 +14906.249968 + 21 +8995.8389 + 31 +0.0 + 0 +LINE + 5 +C4A + 8 +0 + 62 + 0 + 10 +14924.999968 + 20 +9028.314853 + 30 +0.0 + 11 +14934.374968 + 21 +9044.552829 + 31 +0.0 + 0 +LINE + 5 +C4B + 8 +0 + 62 + 0 + 10 +14953.124968 + 20 +9077.028782 + 30 +0.0 + 11 +14962.499968 + 21 +9093.266758 + 31 +0.0 + 0 +LINE + 5 +C4C + 8 +0 + 62 + 0 + 10 +14981.249968 + 20 +9125.742711 + 30 +0.0 + 11 +14990.624968 + 21 +9141.980687 + 31 +0.0 + 0 +LINE + 5 +C4D + 8 +0 + 62 + 0 + 10 +14900.0 + 20 +9017.48959 + 30 +0.0 + 11 +14906.249968 + 21 +9028.314853 + 31 +0.0 + 0 +LINE + 5 +C4E + 8 +0 + 62 + 0 + 10 +14924.999968 + 20 +9060.790805 + 30 +0.0 + 11 +14934.374968 + 21 +9077.028782 + 31 +0.0 + 0 +LINE + 5 +C4F + 8 +0 + 62 + 0 + 10 +14953.124968 + 20 +9109.504734 + 30 +0.0 + 11 +14962.499968 + 21 +9125.742711 + 31 +0.0 + 0 +LINE + 5 +C50 + 8 +0 + 62 + 0 + 10 +14981.249968 + 20 +9158.218663 + 30 +0.0 + 11 +14990.624968 + 21 +9174.45664 + 31 +0.0 + 0 +LINE + 5 +C51 + 8 +0 + 62 + 0 + 10 +14900.0 + 20 +9049.965543 + 30 +0.0 + 11 +14906.249968 + 21 +9060.790805 + 31 +0.0 + 0 +LINE + 5 +C52 + 8 +0 + 62 + 0 + 10 +14924.999968 + 20 +9093.266758 + 30 +0.0 + 11 +14934.374968 + 21 +9109.504734 + 31 +0.0 + 0 +LINE + 5 +C53 + 8 +0 + 62 + 0 + 10 +14953.124968 + 20 +9141.980687 + 30 +0.0 + 11 +14962.499968 + 21 +9158.218663 + 31 +0.0 + 0 +LINE + 5 +C54 + 8 +0 + 62 + 0 + 10 +14981.249968 + 20 +9190.694616 + 30 +0.0 + 11 +14990.624968 + 21 +9206.932592 + 31 +0.0 + 0 +LINE + 5 +C55 + 8 +0 + 62 + 0 + 10 +14900.0 + 20 +9082.441495 + 30 +0.0 + 11 +14906.249968 + 21 +9093.266758 + 31 +0.0 + 0 +LINE + 5 +C56 + 8 +0 + 62 + 0 + 10 +14924.999968 + 20 +9125.742711 + 30 +0.0 + 11 +14934.374968 + 21 +9141.980687 + 31 +0.0 + 0 +LINE + 5 +C57 + 8 +0 + 62 + 0 + 10 +14953.124968 + 20 +9174.45664 + 30 +0.0 + 11 +14962.499968 + 21 +9190.694616 + 31 +0.0 + 0 +LINE + 5 +C58 + 8 +0 + 62 + 0 + 10 +14981.249968 + 20 +9223.170569 + 30 +0.0 + 11 +14990.624968 + 21 +9239.408545 + 31 +0.0 + 0 +LINE + 5 +C59 + 8 +0 + 62 + 0 + 10 +14900.0 + 20 +9114.917448 + 30 +0.0 + 11 +14906.249968 + 21 +9125.742711 + 31 +0.0 + 0 +LINE + 5 +C5A + 8 +0 + 62 + 0 + 10 +14924.999968 + 20 +9158.218663 + 30 +0.0 + 11 +14934.374968 + 21 +9174.45664 + 31 +0.0 + 0 +LINE + 5 +C5B + 8 +0 + 62 + 0 + 10 +14953.124968 + 20 +9206.932592 + 30 +0.0 + 11 +14962.499968 + 21 +9223.170569 + 31 +0.0 + 0 +LINE + 5 +C5C + 8 +0 + 62 + 0 + 10 +14981.249968 + 20 +9255.646521 + 30 +0.0 + 11 +14990.624968 + 21 +9271.884498 + 31 +0.0 + 0 +LINE + 5 +C5D + 8 +0 + 62 + 0 + 10 +14900.0 + 20 +9147.3934 + 30 +0.0 + 11 +14906.249968 + 21 +9158.218663 + 31 +0.0 + 0 +LINE + 5 +C5E + 8 +0 + 62 + 0 + 10 +14924.999968 + 20 +9190.694616 + 30 +0.0 + 11 +14934.374968 + 21 +9206.932592 + 31 +0.0 + 0 +LINE + 5 +C5F + 8 +0 + 62 + 0 + 10 +14953.124968 + 20 +9239.408545 + 30 +0.0 + 11 +14962.499968 + 21 +9255.646521 + 31 +0.0 + 0 +LINE + 5 +C60 + 8 +0 + 62 + 0 + 10 +14981.249968 + 20 +9288.122474 + 30 +0.0 + 11 +14990.624968 + 21 +9304.36045 + 31 +0.0 + 0 +LINE + 5 +C61 + 8 +0 + 62 + 0 + 10 +14900.0 + 20 +9179.869353 + 30 +0.0 + 11 +14906.249969 + 21 +9190.694616 + 31 +0.0 + 0 +LINE + 5 +C62 + 8 +0 + 62 + 0 + 10 +14924.999969 + 20 +9223.170568 + 30 +0.0 + 11 +14934.374969 + 21 +9239.408545 + 31 +0.0 + 0 +LINE + 5 +C63 + 8 +0 + 62 + 0 + 10 +14953.124969 + 20 +9271.884497 + 30 +0.0 + 11 +14962.499969 + 21 +9288.122474 + 31 +0.0 + 0 +LINE + 5 +C64 + 8 +0 + 62 + 0 + 10 +14981.249969 + 20 +9320.598426 + 30 +0.0 + 11 +14990.624969 + 21 +9336.836403 + 31 +0.0 + 0 +LINE + 5 +C65 + 8 +0 + 62 + 0 + 10 +14900.0 + 20 +9212.345305 + 30 +0.0 + 11 +14906.249969 + 21 +9223.170568 + 31 +0.0 + 0 +LINE + 5 +C66 + 8 +0 + 62 + 0 + 10 +14924.999969 + 20 +9255.646521 + 30 +0.0 + 11 +14934.374969 + 21 +9271.884497 + 31 +0.0 + 0 +LINE + 5 +C67 + 8 +0 + 62 + 0 + 10 +14953.124969 + 20 +9304.36045 + 30 +0.0 + 11 +14962.499969 + 21 +9320.598426 + 31 +0.0 + 0 +LINE + 5 +C68 + 8 +0 + 62 + 0 + 10 +14981.249969 + 20 +9353.074379 + 30 +0.0 + 11 +14990.624969 + 21 +9369.312355 + 31 +0.0 + 0 +LINE + 5 +C69 + 8 +0 + 62 + 0 + 10 +14900.0 + 20 +9244.821258 + 30 +0.0 + 11 +14906.249969 + 21 +9255.646521 + 31 +0.0 + 0 +LINE + 5 +C6A + 8 +0 + 62 + 0 + 10 +14924.999969 + 20 +9288.122474 + 30 +0.0 + 11 +14934.374969 + 21 +9304.36045 + 31 +0.0 + 0 +LINE + 5 +C6B + 8 +0 + 62 + 0 + 10 +14953.124969 + 20 +9336.836403 + 30 +0.0 + 11 +14962.499969 + 21 +9353.074379 + 31 +0.0 + 0 +LINE + 5 +C6C + 8 +0 + 62 + 0 + 10 +14981.249969 + 20 +9385.550332 + 30 +0.0 + 11 +14990.624969 + 21 +9401.788308 + 31 +0.0 + 0 +LINE + 5 +C6D + 8 +0 + 62 + 0 + 10 +14900.0 + 20 +9277.29721 + 30 +0.0 + 11 +14906.249969 + 21 +9288.122474 + 31 +0.0 + 0 +LINE + 5 +C6E + 8 +0 + 62 + 0 + 10 +14924.999969 + 20 +9320.598426 + 30 +0.0 + 11 +14934.374969 + 21 +9336.836403 + 31 +0.0 + 0 +LINE + 5 +C6F + 8 +0 + 62 + 0 + 10 +14953.124969 + 20 +9369.312355 + 30 +0.0 + 11 +14962.499969 + 21 +9385.550332 + 31 +0.0 + 0 +LINE + 5 +C70 + 8 +0 + 62 + 0 + 10 +14981.249969 + 20 +9418.026284 + 30 +0.0 + 11 +14990.624969 + 21 +9434.264261 + 31 +0.0 + 0 +LINE + 5 +C71 + 8 +0 + 62 + 0 + 10 +14900.0 + 20 +9309.773163 + 30 +0.0 + 11 +14906.249969 + 21 +9320.598426 + 31 +0.0 + 0 +LINE + 5 +C72 + 8 +0 + 62 + 0 + 10 +14924.999969 + 20 +9353.074379 + 30 +0.0 + 11 +14934.374969 + 21 +9369.312355 + 31 +0.0 + 0 +LINE + 5 +C73 + 8 +0 + 62 + 0 + 10 +14953.124969 + 20 +9401.788308 + 30 +0.0 + 11 +14962.499969 + 21 +9418.026284 + 31 +0.0 + 0 +LINE + 5 +C74 + 8 +0 + 62 + 0 + 10 +14900.0 + 20 +9342.249115 + 30 +0.0 + 11 +14906.249969 + 21 +9353.074379 + 31 +0.0 + 0 +LINE + 5 +C75 + 8 +0 + 62 + 0 + 10 +14924.999969 + 20 +9385.550332 + 30 +0.0 + 11 +14934.374969 + 21 +9401.788308 + 31 +0.0 + 0 +LINE + 5 +C76 + 8 +0 + 62 + 0 + 10 +14953.124969 + 20 +9434.26426 + 30 +0.0 + 11 +14953.549748 + 21 +9435.0 + 31 +0.0 + 0 +LINE + 5 +C77 + 8 +0 + 62 + 0 + 10 +14900.0 + 20 +9374.725068 + 30 +0.0 + 11 +14906.249969 + 21 +9385.550331 + 31 +0.0 + 0 +LINE + 5 +C78 + 8 +0 + 62 + 0 + 10 +14924.999969 + 20 +9418.026284 + 30 +0.0 + 11 +14934.374969 + 21 +9434.26426 + 31 +0.0 + 0 +LINE + 5 +C79 + 8 +0 + 62 + 0 + 10 +14900.0 + 20 +9407.20102 + 30 +0.0 + 11 +14906.249969 + 21 +9418.026284 + 31 +0.0 + 0 +LINE + 5 +C7A + 8 +0 + 62 + 0 + 10 +15628.124967 + 20 +9434.264262 + 30 +0.0 + 11 +15628.549745 + 21 +9435.0 + 31 +0.0 + 0 +LINE + 5 +C7B + 8 +0 + 62 + 0 + 10 +15628.124967 + 20 +9401.788309 + 30 +0.0 + 11 +15637.499967 + 21 +9418.026285 + 31 +0.0 + 0 +LINE + 5 +C7C + 8 +0 + 62 + 0 + 10 +15628.124967 + 20 +9369.312357 + 30 +0.0 + 11 +15637.499967 + 21 +9385.550333 + 31 +0.0 + 0 +LINE + 5 +C7D + 8 +0 + 62 + 0 + 10 +15656.249967 + 20 +9418.026285 + 30 +0.0 + 11 +15665.624967 + 21 +9434.264262 + 31 +0.0 + 0 +LINE + 5 +C7E + 8 +0 + 62 + 0 + 10 +15628.124966 + 20 +9336.836404 + 30 +0.0 + 11 +15637.499966 + 21 +9353.07438 + 31 +0.0 + 0 +LINE + 5 +C7F + 8 +0 + 62 + 0 + 10 +15656.249966 + 20 +9385.550333 + 30 +0.0 + 11 +15665.624966 + 21 +9401.788309 + 31 +0.0 + 0 +LINE + 5 +C80 + 8 +0 + 62 + 0 + 10 +15684.374966 + 20 +9434.264262 + 30 +0.0 + 11 +15684.799745 + 21 +9435.0 + 31 +0.0 + 0 +LINE + 5 +C81 + 8 +0 + 62 + 0 + 10 +15628.124966 + 20 +9304.360451 + 30 +0.0 + 11 +15637.499966 + 21 +9320.598428 + 31 +0.0 + 0 +LINE + 5 +C82 + 8 +0 + 62 + 0 + 10 +15656.249966 + 20 +9353.07438 + 30 +0.0 + 11 +15665.624966 + 21 +9369.312357 + 31 +0.0 + 0 +LINE + 5 +C83 + 8 +0 + 62 + 0 + 10 +15684.374966 + 20 +9401.788309 + 30 +0.0 + 11 +15693.749966 + 21 +9418.026286 + 31 +0.0 + 0 +LINE + 5 +C84 + 8 +0 + 62 + 0 + 10 +15628.124966 + 20 +9271.884499 + 30 +0.0 + 11 +15637.499966 + 21 +9288.122475 + 31 +0.0 + 0 +LINE + 5 +C85 + 8 +0 + 62 + 0 + 10 +15656.249966 + 20 +9320.598428 + 30 +0.0 + 11 +15665.624966 + 21 +9336.836404 + 31 +0.0 + 0 +LINE + 5 +C86 + 8 +0 + 62 + 0 + 10 +15684.374966 + 20 +9369.312357 + 30 +0.0 + 11 +15693.749966 + 21 +9385.550333 + 31 +0.0 + 0 +LINE + 5 +C87 + 8 +0 + 62 + 0 + 10 +15712.499966 + 20 +9418.026286 + 30 +0.0 + 11 +15721.874966 + 21 +9434.264262 + 31 +0.0 + 0 +LINE + 5 +C88 + 8 +0 + 62 + 0 + 10 +15628.124966 + 20 +9239.408546 + 30 +0.0 + 11 +15637.499966 + 21 +9255.646522 + 31 +0.0 + 0 +LINE + 5 +C89 + 8 +0 + 62 + 0 + 10 +15656.249966 + 20 +9288.122475 + 30 +0.0 + 11 +15665.624966 + 21 +9304.360451 + 31 +0.0 + 0 +LINE + 5 +C8A + 8 +0 + 62 + 0 + 10 +15684.374966 + 20 +9336.836404 + 30 +0.0 + 11 +15693.749966 + 21 +9353.07438 + 31 +0.0 + 0 +LINE + 5 +C8B + 8 +0 + 62 + 0 + 10 +15712.499966 + 20 +9385.550333 + 30 +0.0 + 11 +15721.874966 + 21 +9401.788309 + 31 +0.0 + 0 +LINE + 5 +C8C + 8 +0 + 62 + 0 + 10 +15628.124966 + 20 +9206.932593 + 30 +0.0 + 11 +15637.499966 + 21 +9223.17057 + 31 +0.0 + 0 +LINE + 5 +C8D + 8 +0 + 62 + 0 + 10 +15656.249966 + 20 +9255.646522 + 30 +0.0 + 11 +15665.624966 + 21 +9271.884499 + 31 +0.0 + 0 +LINE + 5 +C8E + 8 +0 + 62 + 0 + 10 +15684.374966 + 20 +9304.360451 + 30 +0.0 + 11 +15693.749966 + 21 +9320.598428 + 31 +0.0 + 0 +LINE + 5 +C8F + 8 +0 + 62 + 0 + 10 +15712.499966 + 20 +9353.07438 + 30 +0.0 + 11 +15721.874966 + 21 +9369.312357 + 31 +0.0 + 0 +LINE + 5 +C90 + 8 +0 + 62 + 0 + 10 +15628.124966 + 20 +9174.456641 + 30 +0.0 + 11 +15637.499966 + 21 +9190.694617 + 31 +0.0 + 0 +LINE + 5 +C91 + 8 +0 + 62 + 0 + 10 +15656.249966 + 20 +9223.17057 + 30 +0.0 + 11 +15665.624966 + 21 +9239.408546 + 31 +0.0 + 0 +LINE + 5 +C92 + 8 +0 + 62 + 0 + 10 +15684.374966 + 20 +9271.884499 + 30 +0.0 + 11 +15693.749966 + 21 +9288.122475 + 31 +0.0 + 0 +LINE + 5 +C93 + 8 +0 + 62 + 0 + 10 +15712.499966 + 20 +9320.598428 + 30 +0.0 + 11 +15721.874966 + 21 +9336.836404 + 31 +0.0 + 0 +LINE + 5 +C94 + 8 +0 + 62 + 0 + 10 +15628.124966 + 20 +9141.980688 + 30 +0.0 + 11 +15637.499966 + 21 +9158.218665 + 31 +0.0 + 0 +LINE + 5 +C95 + 8 +0 + 62 + 0 + 10 +15656.249966 + 20 +9190.694617 + 30 +0.0 + 11 +15665.624966 + 21 +9206.932594 + 31 +0.0 + 0 +LINE + 5 +C96 + 8 +0 + 62 + 0 + 10 +15684.374966 + 20 +9239.408546 + 30 +0.0 + 11 +15693.749966 + 21 +9255.646523 + 31 +0.0 + 0 +LINE + 5 +C97 + 8 +0 + 62 + 0 + 10 +15712.499966 + 20 +9288.122475 + 30 +0.0 + 11 +15721.874966 + 21 +9304.360451 + 31 +0.0 + 0 +LINE + 5 +C98 + 8 +0 + 62 + 0 + 10 +15628.124966 + 20 +9109.504736 + 30 +0.0 + 11 +15637.499966 + 21 +9125.742712 + 31 +0.0 + 0 +LINE + 5 +C99 + 8 +0 + 62 + 0 + 10 +15656.249966 + 20 +9158.218665 + 30 +0.0 + 11 +15665.624966 + 21 +9174.456641 + 31 +0.0 + 0 +LINE + 5 +C9A + 8 +0 + 62 + 0 + 10 +15684.374966 + 20 +9206.932594 + 30 +0.0 + 11 +15693.749966 + 21 +9223.17057 + 31 +0.0 + 0 +LINE + 5 +C9B + 8 +0 + 62 + 0 + 10 +15712.499966 + 20 +9255.646523 + 30 +0.0 + 11 +15721.874966 + 21 +9271.884499 + 31 +0.0 + 0 +LINE + 5 +C9C + 8 +0 + 62 + 0 + 10 +15628.124966 + 20 +9077.028783 + 30 +0.0 + 11 +15637.499966 + 21 +9093.266759 + 31 +0.0 + 0 +LINE + 5 +C9D + 8 +0 + 62 + 0 + 10 +15656.249966 + 20 +9125.742712 + 30 +0.0 + 11 +15665.624966 + 21 +9141.980688 + 31 +0.0 + 0 +LINE + 5 +C9E + 8 +0 + 62 + 0 + 10 +15684.374966 + 20 +9174.456641 + 30 +0.0 + 11 +15693.749966 + 21 +9190.694617 + 31 +0.0 + 0 +LINE + 5 +C9F + 8 +0 + 62 + 0 + 10 +15712.499966 + 20 +9223.17057 + 30 +0.0 + 11 +15721.874966 + 21 +9239.408546 + 31 +0.0 + 0 +LINE + 5 +CA0 + 8 +0 + 62 + 0 + 10 +15628.124966 + 20 +9044.55283 + 30 +0.0 + 11 +15637.499966 + 21 +9060.790807 + 31 +0.0 + 0 +LINE + 5 +CA1 + 8 +0 + 62 + 0 + 10 +15656.249966 + 20 +9093.266759 + 30 +0.0 + 11 +15665.624966 + 21 +9109.504736 + 31 +0.0 + 0 +LINE + 5 +CA2 + 8 +0 + 62 + 0 + 10 +15684.374966 + 20 +9141.980688 + 30 +0.0 + 11 +15693.749966 + 21 +9158.218665 + 31 +0.0 + 0 +LINE + 5 +CA3 + 8 +0 + 62 + 0 + 10 +15712.499966 + 20 +9190.694617 + 30 +0.0 + 11 +15721.874966 + 21 +9206.932594 + 31 +0.0 + 0 +LINE + 5 +CA4 + 8 +0 + 62 + 0 + 10 +15628.124966 + 20 +9012.076878 + 30 +0.0 + 11 +15637.499966 + 21 +9028.314854 + 31 +0.0 + 0 +LINE + 5 +CA5 + 8 +0 + 62 + 0 + 10 +15656.249966 + 20 +9060.790807 + 30 +0.0 + 11 +15665.624966 + 21 +9077.028783 + 31 +0.0 + 0 +LINE + 5 +CA6 + 8 +0 + 62 + 0 + 10 +15684.374966 + 20 +9109.504736 + 30 +0.0 + 11 +15693.749966 + 21 +9125.742712 + 31 +0.0 + 0 +LINE + 5 +CA7 + 8 +0 + 62 + 0 + 10 +15712.499966 + 20 +9158.218665 + 30 +0.0 + 11 +15721.874966 + 21 +9174.456641 + 31 +0.0 + 0 +LINE + 5 +CA8 + 8 +0 + 62 + 0 + 10 +15631.242123 + 20 +8985.0 + 30 +0.0 + 11 +15637.499966 + 21 +8995.838902 + 31 +0.0 + 0 +LINE + 5 +CA9 + 8 +0 + 62 + 0 + 10 +15656.249966 + 20 +9028.314854 + 30 +0.0 + 11 +15665.624966 + 21 +9044.552831 + 31 +0.0 + 0 +LINE + 5 +CAA + 8 +0 + 62 + 0 + 10 +15684.374966 + 20 +9077.028783 + 30 +0.0 + 11 +15693.749966 + 21 +9093.266759 + 31 +0.0 + 0 +LINE + 5 +CAB + 8 +0 + 62 + 0 + 10 +15712.499966 + 20 +9125.742712 + 30 +0.0 + 11 +15721.874966 + 21 +9141.980688 + 31 +0.0 + 0 +LINE + 5 +CAC + 8 +0 + 62 + 0 + 10 +15656.249966 + 20 +8995.838902 + 30 +0.0 + 11 +15665.624966 + 21 +9012.076878 + 31 +0.0 + 0 +LINE + 5 +CAD + 8 +0 + 62 + 0 + 10 +15684.374966 + 20 +9044.552831 + 30 +0.0 + 11 +15693.749966 + 21 +9060.790807 + 31 +0.0 + 0 +LINE + 5 +CAE + 8 +0 + 62 + 0 + 10 +15712.499966 + 20 +9093.26676 + 30 +0.0 + 11 +15721.874966 + 21 +9109.504736 + 31 +0.0 + 0 +LINE + 5 +CAF + 8 +0 + 62 + 0 + 10 +15684.374966 + 20 +9012.076878 + 30 +0.0 + 11 +15693.749966 + 21 +9028.314854 + 31 +0.0 + 0 +LINE + 5 +CB0 + 8 +0 + 62 + 0 + 10 +15712.499966 + 20 +9060.790807 + 30 +0.0 + 11 +15721.874966 + 21 +9077.028783 + 31 +0.0 + 0 +LINE + 5 +CB1 + 8 +0 + 62 + 0 + 10 +15687.492123 + 20 +8985.0 + 30 +0.0 + 11 +15693.749966 + 21 +8995.838902 + 31 +0.0 + 0 +LINE + 5 +CB2 + 8 +0 + 62 + 0 + 10 +15712.499966 + 20 +9028.314854 + 30 +0.0 + 11 +15721.874966 + 21 +9044.552831 + 31 +0.0 + 0 +LINE + 5 +CB3 + 8 +0 + 62 + 0 + 10 +15712.499966 + 20 +8995.838902 + 30 +0.0 + 11 +15721.874966 + 21 +9012.076878 + 31 +0.0 + 0 +ENDBLK + 5 +CB4 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X57 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X57 + 1 + + 0 +LINE + 5 +CB6 + 8 +0 + 62 + 0 + 10 +15000.0 + 20 +9006.66416 + 30 +0.0 + 11 +15025.0 + 21 +9006.66416 + 31 +0.0 + 0 +LINE + 5 +CB7 + 8 +0 + 62 + 0 + 10 +15075.0 + 20 +9006.66416 + 30 +0.0 + 11 +15100.0 + 21 +9006.66416 + 31 +0.0 + 0 +LINE + 5 +CB8 + 8 +0 + 62 + 0 + 10 +15150.0 + 20 +9006.66416 + 30 +0.0 + 11 +15175.0 + 21 +9006.66416 + 31 +0.0 + 0 +LINE + 5 +CB9 + 8 +0 + 62 + 0 + 10 +15225.0 + 20 +9006.66416 + 30 +0.0 + 11 +15250.0 + 21 +9006.66416 + 31 +0.0 + 0 +LINE + 5 +CBA + 8 +0 + 62 + 0 + 10 +15300.0 + 20 +9006.66416 + 30 +0.0 + 11 +15325.0 + 21 +9006.66416 + 31 +0.0 + 0 +LINE + 5 +CBB + 8 +0 + 62 + 0 + 10 +15375.0 + 20 +9006.66416 + 30 +0.0 + 11 +15400.0 + 21 +9006.66416 + 31 +0.0 + 0 +LINE + 5 +CBC + 8 +0 + 62 + 0 + 10 +15450.0 + 20 +9006.66416 + 30 +0.0 + 11 +15475.0 + 21 +9006.66416 + 31 +0.0 + 0 +LINE + 5 +CBD + 8 +0 + 62 + 0 + 10 +15525.0 + 20 +9006.66416 + 30 +0.0 + 11 +15550.0 + 21 +9006.66416 + 31 +0.0 + 0 +LINE + 5 +CBE + 8 +0 + 62 + 0 + 10 +15600.0 + 20 +9006.66416 + 30 +0.0 + 11 +15625.0 + 21 +9006.66416 + 31 +0.0 + 0 +LINE + 5 +CBF + 8 +0 + 62 + 0 + 10 +15037.5 + 20 +9028.314795 + 30 +0.0 + 11 +15062.5 + 21 +9028.314795 + 31 +0.0 + 0 +LINE + 5 +CC0 + 8 +0 + 62 + 0 + 10 +15112.5 + 20 +9028.314795 + 30 +0.0 + 11 +15137.5 + 21 +9028.314795 + 31 +0.0 + 0 +LINE + 5 +CC1 + 8 +0 + 62 + 0 + 10 +15187.5 + 20 +9028.314795 + 30 +0.0 + 11 +15212.5 + 21 +9028.314795 + 31 +0.0 + 0 +LINE + 5 +CC2 + 8 +0 + 62 + 0 + 10 +15262.5 + 20 +9028.314795 + 30 +0.0 + 11 +15287.5 + 21 +9028.314795 + 31 +0.0 + 0 +LINE + 5 +CC3 + 8 +0 + 62 + 0 + 10 +15337.5 + 20 +9028.314795 + 30 +0.0 + 11 +15362.5 + 21 +9028.314795 + 31 +0.0 + 0 +LINE + 5 +CC4 + 8 +0 + 62 + 0 + 10 +15412.5 + 20 +9028.314795 + 30 +0.0 + 11 +15437.5 + 21 +9028.314795 + 31 +0.0 + 0 +LINE + 5 +CC5 + 8 +0 + 62 + 0 + 10 +15487.5 + 20 +9028.314795 + 30 +0.0 + 11 +15512.5 + 21 +9028.314795 + 31 +0.0 + 0 +LINE + 5 +CC6 + 8 +0 + 62 + 0 + 10 +15562.5 + 20 +9028.314795 + 30 +0.0 + 11 +15587.5 + 21 +9028.314795 + 31 +0.0 + 0 +LINE + 5 +CC7 + 8 +0 + 62 + 0 + 10 +15037.5 + 20 +8985.013525 + 30 +0.0 + 11 +15062.5 + 21 +8985.013525 + 31 +0.0 + 0 +LINE + 5 +CC8 + 8 +0 + 62 + 0 + 10 +15112.5 + 20 +8985.013525 + 30 +0.0 + 11 +15137.5 + 21 +8985.013525 + 31 +0.0 + 0 +LINE + 5 +CC9 + 8 +0 + 62 + 0 + 10 +15187.5 + 20 +8985.013525 + 30 +0.0 + 11 +15212.5 + 21 +8985.013525 + 31 +0.0 + 0 +LINE + 5 +CCA + 8 +0 + 62 + 0 + 10 +15262.5 + 20 +8985.013525 + 30 +0.0 + 11 +15287.5 + 21 +8985.013525 + 31 +0.0 + 0 +LINE + 5 +CCB + 8 +0 + 62 + 0 + 10 +15337.5 + 20 +8985.013525 + 30 +0.0 + 11 +15362.5 + 21 +8985.013525 + 31 +0.0 + 0 +LINE + 5 +CCC + 8 +0 + 62 + 0 + 10 +15412.5 + 20 +8985.013525 + 30 +0.0 + 11 +15437.5 + 21 +8985.013525 + 31 +0.0 + 0 +LINE + 5 +CCD + 8 +0 + 62 + 0 + 10 +15487.5 + 20 +8985.013525 + 30 +0.0 + 11 +15512.5 + 21 +8985.013525 + 31 +0.0 + 0 +LINE + 5 +CCE + 8 +0 + 62 + 0 + 10 +15562.5 + 20 +8985.013525 + 30 +0.0 + 11 +15587.5 + 21 +8985.013525 + 31 +0.0 + 0 +LINE + 5 +CCF + 8 +0 + 62 + 0 + 10 +15299.999933 + 20 +9006.664161 + 30 +0.0 + 11 +15287.499933 + 21 +9028.314796 + 31 +0.0 + 0 +LINE + 5 +CD0 + 8 +0 + 62 + 0 + 10 +15287.507742 + 20 +8985.0 + 30 +0.0 + 11 +15287.499933 + 21 +8985.013526 + 31 +0.0 + 0 +LINE + 5 +CD1 + 8 +0 + 62 + 0 + 10 +15262.499933 + 20 +9028.314796 + 30 +0.0 + 11 +15258.640228 + 21 +9035.0 + 31 +0.0 + 0 +LINE + 5 +CD2 + 8 +0 + 62 + 0 + 10 +15262.499933 + 20 +8985.013526 + 30 +0.0 + 11 +15249.999933 + 21 +9006.664161 + 31 +0.0 + 0 +LINE + 5 +CD3 + 8 +0 + 62 + 0 + 10 +15224.999933 + 20 +9006.664161 + 30 +0.0 + 11 +15212.499933 + 21 +9028.314796 + 31 +0.0 + 0 +LINE + 5 +CD4 + 8 +0 + 62 + 0 + 10 +15212.507742 + 20 +8985.0 + 30 +0.0 + 11 +15212.499933 + 21 +8985.013526 + 31 +0.0 + 0 +LINE + 5 +CD5 + 8 +0 + 62 + 0 + 10 +15187.499933 + 20 +9028.314796 + 30 +0.0 + 11 +15183.640229 + 21 +9035.0 + 31 +0.0 + 0 +LINE + 5 +CD6 + 8 +0 + 62 + 0 + 10 +15187.499933 + 20 +8985.013526 + 30 +0.0 + 11 +15174.999933 + 21 +9006.664161 + 31 +0.0 + 0 +LINE + 5 +CD7 + 8 +0 + 62 + 0 + 10 +15149.999933 + 20 +9006.664161 + 30 +0.0 + 11 +15137.499933 + 21 +9028.314796 + 31 +0.0 + 0 +LINE + 5 +CD8 + 8 +0 + 62 + 0 + 10 +15137.507743 + 20 +8985.0 + 30 +0.0 + 11 +15137.499933 + 21 +8985.013526 + 31 +0.0 + 0 +LINE + 5 +CD9 + 8 +0 + 62 + 0 + 10 +15112.499933 + 20 +9028.314796 + 30 +0.0 + 11 +15108.640229 + 21 +9035.0 + 31 +0.0 + 0 +LINE + 5 +CDA + 8 +0 + 62 + 0 + 10 +15112.499933 + 20 +8985.013526 + 30 +0.0 + 11 +15099.999933 + 21 +9006.664161 + 31 +0.0 + 0 +LINE + 5 +CDB + 8 +0 + 62 + 0 + 10 +15074.999934 + 20 +9006.664161 + 30 +0.0 + 11 +15062.499934 + 21 +9028.314796 + 31 +0.0 + 0 +LINE + 5 +CDC + 8 +0 + 62 + 0 + 10 +15062.507743 + 20 +8985.0 + 30 +0.0 + 11 +15062.499934 + 21 +8985.013526 + 31 +0.0 + 0 +LINE + 5 +CDD + 8 +0 + 62 + 0 + 10 +15037.499934 + 20 +9028.314796 + 30 +0.0 + 11 +15033.640229 + 21 +9035.0 + 31 +0.0 + 0 +LINE + 5 +CDE + 8 +0 + 62 + 0 + 10 +15037.499934 + 20 +8985.013526 + 30 +0.0 + 11 +15024.999934 + 21 +9006.664161 + 31 +0.0 + 0 +LINE + 5 +CDF + 8 +0 + 62 + 0 + 10 +15337.499933 + 20 +8985.013525 + 30 +0.0 + 11 +15324.999933 + 21 +9006.664161 + 31 +0.0 + 0 +LINE + 5 +CE0 + 8 +0 + 62 + 0 + 10 +15362.507742 + 20 +8985.0 + 30 +0.0 + 11 +15362.499933 + 21 +8985.013525 + 31 +0.0 + 0 +LINE + 5 +CE1 + 8 +0 + 62 + 0 + 10 +15337.499933 + 20 +9028.314796 + 30 +0.0 + 11 +15333.640228 + 21 +9035.0 + 31 +0.0 + 0 +LINE + 5 +CE2 + 8 +0 + 62 + 0 + 10 +15374.999933 + 20 +9006.66416 + 30 +0.0 + 11 +15362.499933 + 21 +9028.314796 + 31 +0.0 + 0 +LINE + 5 +CE3 + 8 +0 + 62 + 0 + 10 +15412.499932 + 20 +8985.013525 + 30 +0.0 + 11 +15399.999932 + 21 +9006.66416 + 31 +0.0 + 0 +LINE + 5 +CE4 + 8 +0 + 62 + 0 + 10 +15437.507741 + 20 +8985.0 + 30 +0.0 + 11 +15437.499932 + 21 +8985.013525 + 31 +0.0 + 0 +LINE + 5 +CE5 + 8 +0 + 62 + 0 + 10 +15412.499932 + 20 +9028.314795 + 30 +0.0 + 11 +15408.640228 + 21 +9035.0 + 31 +0.0 + 0 +LINE + 5 +CE6 + 8 +0 + 62 + 0 + 10 +15449.999932 + 20 +9006.66416 + 30 +0.0 + 11 +15437.499932 + 21 +9028.314795 + 31 +0.0 + 0 +LINE + 5 +CE7 + 8 +0 + 62 + 0 + 10 +15487.499932 + 20 +8985.013525 + 30 +0.0 + 11 +15474.999932 + 21 +9006.66416 + 31 +0.0 + 0 +LINE + 5 +CE8 + 8 +0 + 62 + 0 + 10 +15512.507741 + 20 +8985.0 + 30 +0.0 + 11 +15512.499932 + 21 +8985.013525 + 31 +0.0 + 0 +LINE + 5 +CE9 + 8 +0 + 62 + 0 + 10 +15487.499932 + 20 +9028.314795 + 30 +0.0 + 11 +15483.640227 + 21 +9035.0 + 31 +0.0 + 0 +LINE + 5 +CEA + 8 +0 + 62 + 0 + 10 +15524.999932 + 20 +9006.66416 + 30 +0.0 + 11 +15512.499932 + 21 +9028.314795 + 31 +0.0 + 0 +LINE + 5 +CEB + 8 +0 + 62 + 0 + 10 +15562.499932 + 20 +8985.013525 + 30 +0.0 + 11 +15549.999932 + 21 +9006.66416 + 31 +0.0 + 0 +LINE + 5 +CEC + 8 +0 + 62 + 0 + 10 +15587.507741 + 20 +8985.0 + 30 +0.0 + 11 +15587.499932 + 21 +8985.013525 + 31 +0.0 + 0 +LINE + 5 +CED + 8 +0 + 62 + 0 + 10 +15562.499932 + 20 +9028.314795 + 30 +0.0 + 11 +15558.640227 + 21 +9035.0 + 31 +0.0 + 0 +LINE + 5 +CEE + 8 +0 + 62 + 0 + 10 +15599.999932 + 20 +9006.66416 + 30 +0.0 + 11 +15587.499932 + 21 +9028.314795 + 31 +0.0 + 0 +LINE + 5 +CEF + 8 +0 + 62 + 0 + 10 +15625.0 + 20 +9006.664042 + 30 +0.0 + 11 +15624.999932 + 21 +9006.66416 + 31 +0.0 + 0 +LINE + 5 +CF0 + 8 +0 + 62 + 0 + 10 +15287.499967 + 20 +8985.013583 + 30 +0.0 + 11 +15299.999967 + 21 +9006.664218 + 31 +0.0 + 0 +LINE + 5 +CF1 + 8 +0 + 62 + 0 + 10 +15262.492125 + 20 +8985.0 + 30 +0.0 + 11 +15262.499967 + 21 +8985.013583 + 31 +0.0 + 0 +LINE + 5 +CF2 + 8 +0 + 62 + 0 + 10 +15287.499967 + 20 +9028.314854 + 30 +0.0 + 11 +15291.359638 + 21 +9035.0 + 31 +0.0 + 0 +LINE + 5 +CF3 + 8 +0 + 62 + 0 + 10 +15249.999967 + 20 +9006.664218 + 30 +0.0 + 11 +15262.499967 + 21 +9028.314853 + 31 +0.0 + 0 +LINE + 5 +CF4 + 8 +0 + 62 + 0 + 10 +15212.499967 + 20 +8985.013583 + 30 +0.0 + 11 +15224.999967 + 21 +9006.664218 + 31 +0.0 + 0 +LINE + 5 +CF5 + 8 +0 + 62 + 0 + 10 +15187.492125 + 20 +8985.0 + 30 +0.0 + 11 +15187.499967 + 21 +8985.013583 + 31 +0.0 + 0 +LINE + 5 +CF6 + 8 +0 + 62 + 0 + 10 +15212.499967 + 20 +9028.314853 + 30 +0.0 + 11 +15216.359638 + 21 +9035.0 + 31 +0.0 + 0 +LINE + 5 +CF7 + 8 +0 + 62 + 0 + 10 +15174.999967 + 20 +9006.664218 + 30 +0.0 + 11 +15187.499967 + 21 +9028.314853 + 31 +0.0 + 0 +LINE + 5 +CF8 + 8 +0 + 62 + 0 + 10 +15137.499967 + 20 +8985.013583 + 30 +0.0 + 11 +15149.999967 + 21 +9006.664218 + 31 +0.0 + 0 +LINE + 5 +CF9 + 8 +0 + 62 + 0 + 10 +15112.492125 + 20 +8985.0 + 30 +0.0 + 11 +15112.499967 + 21 +8985.013583 + 31 +0.0 + 0 +LINE + 5 +CFA + 8 +0 + 62 + 0 + 10 +15137.499967 + 20 +9028.314853 + 30 +0.0 + 11 +15141.359639 + 21 +9035.0 + 31 +0.0 + 0 +LINE + 5 +CFB + 8 +0 + 62 + 0 + 10 +15099.999968 + 20 +9006.664218 + 30 +0.0 + 11 +15112.499968 + 21 +9028.314853 + 31 +0.0 + 0 +LINE + 5 +CFC + 8 +0 + 62 + 0 + 10 +15062.499968 + 20 +8985.013583 + 30 +0.0 + 11 +15074.999968 + 21 +9006.664218 + 31 +0.0 + 0 +LINE + 5 +CFD + 8 +0 + 62 + 0 + 10 +15037.492126 + 20 +8985.0 + 30 +0.0 + 11 +15037.499968 + 21 +8985.013583 + 31 +0.0 + 0 +LINE + 5 +CFE + 8 +0 + 62 + 0 + 10 +15062.499968 + 20 +9028.314853 + 30 +0.0 + 11 +15066.359639 + 21 +9035.0 + 31 +0.0 + 0 +LINE + 5 +CFF + 8 +0 + 62 + 0 + 10 +15024.999968 + 20 +9006.664218 + 30 +0.0 + 11 +15037.499968 + 21 +9028.314853 + 31 +0.0 + 0 +LINE + 5 +D00 + 8 +0 + 62 + 0 + 10 +15324.999967 + 20 +9006.664219 + 30 +0.0 + 11 +15337.499967 + 21 +9028.314854 + 31 +0.0 + 0 +LINE + 5 +D01 + 8 +0 + 62 + 0 + 10 +15337.492124 + 20 +8985.0 + 30 +0.0 + 11 +15337.499967 + 21 +8985.013583 + 31 +0.0 + 0 +LINE + 5 +D02 + 8 +0 + 62 + 0 + 10 +15362.499967 + 20 +9028.314854 + 30 +0.0 + 11 +15366.359638 + 21 +9035.0 + 31 +0.0 + 0 +LINE + 5 +D03 + 8 +0 + 62 + 0 + 10 +15362.499967 + 20 +8985.013584 + 30 +0.0 + 11 +15374.999967 + 21 +9006.664219 + 31 +0.0 + 0 +LINE + 5 +D04 + 8 +0 + 62 + 0 + 10 +15399.999967 + 20 +9006.664219 + 30 +0.0 + 11 +15412.499967 + 21 +9028.314854 + 31 +0.0 + 0 +LINE + 5 +D05 + 8 +0 + 62 + 0 + 10 +15412.492124 + 20 +8985.0 + 30 +0.0 + 11 +15412.499966 + 21 +8985.013584 + 31 +0.0 + 0 +LINE + 5 +D06 + 8 +0 + 62 + 0 + 10 +15437.499966 + 20 +9028.314854 + 30 +0.0 + 11 +15441.359637 + 21 +9035.0 + 31 +0.0 + 0 +LINE + 5 +D07 + 8 +0 + 62 + 0 + 10 +15437.499966 + 20 +8985.013584 + 30 +0.0 + 11 +15449.999966 + 21 +9006.664219 + 31 +0.0 + 0 +LINE + 5 +D08 + 8 +0 + 62 + 0 + 10 +15474.999966 + 20 +9006.664219 + 30 +0.0 + 11 +15487.499966 + 21 +9028.314854 + 31 +0.0 + 0 +LINE + 5 +D09 + 8 +0 + 62 + 0 + 10 +15487.492124 + 20 +8985.0 + 30 +0.0 + 11 +15487.499966 + 21 +8985.013584 + 31 +0.0 + 0 +LINE + 5 +D0A + 8 +0 + 62 + 0 + 10 +15512.499966 + 20 +9028.314854 + 30 +0.0 + 11 +15516.359637 + 21 +9035.0 + 31 +0.0 + 0 +LINE + 5 +D0B + 8 +0 + 62 + 0 + 10 +15512.499966 + 20 +8985.013584 + 30 +0.0 + 11 +15524.999966 + 21 +9006.664219 + 31 +0.0 + 0 +LINE + 5 +D0C + 8 +0 + 62 + 0 + 10 +15549.999966 + 20 +9006.664219 + 30 +0.0 + 11 +15562.499966 + 21 +9028.314854 + 31 +0.0 + 0 +LINE + 5 +D0D + 8 +0 + 62 + 0 + 10 +15562.492123 + 20 +8985.0 + 30 +0.0 + 11 +15562.499966 + 21 +8985.013584 + 31 +0.0 + 0 +LINE + 5 +D0E + 8 +0 + 62 + 0 + 10 +15587.499966 + 20 +9028.314854 + 30 +0.0 + 11 +15591.359637 + 21 +9035.0 + 31 +0.0 + 0 +LINE + 5 +D0F + 8 +0 + 62 + 0 + 10 +15587.499966 + 20 +8985.013584 + 30 +0.0 + 11 +15599.999966 + 21 +9006.664219 + 31 +0.0 + 0 +LINE + 5 +D10 + 8 +0 + 62 + 0 + 10 +15624.999966 + 20 +9006.664219 + 30 +0.0 + 11 +15625.0 + 21 +9006.664278 + 31 +0.0 + 0 +ENDBLK + 5 +D11 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X67 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X67 + 1 + + 0 +LINE + 5 +D13 + 8 +0 + 62 + 0 + 10 +16023.225099 + 20 +9235.0 + 30 +0.0 + 11 +16069.001602 + 21 +9280.776503 + 31 +0.0 + 0 +LINE + 5 +D14 + 8 +0 + 62 + 0 + 10 +16122.034611 + 20 +9333.809512 + 30 +0.0 + 11 +16175.06762 + 21 +9386.84252 + 31 +0.0 + 0 +LINE + 5 +D15 + 8 +0 + 62 + 0 + 10 +15917.159082 + 20 +9235.0 + 30 +0.0 + 11 +15962.935585 + 21 +9280.776503 + 31 +0.0 + 0 +LINE + 5 +D16 + 8 +0 + 62 + 0 + 10 +16015.968594 + 20 +9333.809512 + 30 +0.0 + 11 +16069.001602 + 21 +9386.84252 + 31 +0.0 + 0 +LINE + 5 +D17 + 8 +0 + 62 + 0 + 10 +15811.093065 + 20 +9235.0 + 30 +0.0 + 11 +15856.869568 + 21 +9280.776503 + 31 +0.0 + 0 +LINE + 5 +D18 + 8 +0 + 62 + 0 + 10 +15909.902577 + 20 +9333.809512 + 30 +0.0 + 11 +15962.935585 + 21 +9386.84252 + 31 +0.0 + 0 +LINE + 5 +D19 + 8 +0 + 62 + 0 + 10 +15725.0 + 20 +9254.972952 + 30 +0.0 + 11 +15750.803551 + 21 +9280.776503 + 31 +0.0 + 0 +LINE + 5 +D1A + 8 +0 + 62 + 0 + 10 +15803.83656 + 20 +9333.809512 + 30 +0.0 + 11 +15856.869568 + 21 +9386.84252 + 31 +0.0 + 0 +LINE + 5 +D1B + 8 +0 + 62 + 0 + 10 +15725.0 + 20 +9361.038969 + 30 +0.0 + 11 +15750.803551 + 21 +9386.84252 + 31 +0.0 + 0 +LINE + 5 +D1C + 8 +0 + 62 + 0 + 10 +16129.291117 + 20 +9235.0 + 30 +0.0 + 11 +16175.06762 + 21 +9280.776503 + 31 +0.0 + 0 +LINE + 5 +D1D + 8 +0 + 62 + 0 + 10 +16228.100628 + 20 +9333.809512 + 30 +0.0 + 11 +16281.133637 + 21 +9386.84252 + 31 +0.0 + 0 +LINE + 5 +D1E + 8 +0 + 62 + 0 + 10 +16235.357134 + 20 +9235.0 + 30 +0.0 + 11 +16281.133637 + 21 +9280.776503 + 31 +0.0 + 0 +LINE + 5 +D1F + 8 +0 + 62 + 0 + 10 +16334.166645 + 20 +9333.809512 + 30 +0.0 + 11 +16387.199654 + 21 +9386.84252 + 31 +0.0 + 0 +LINE + 5 +D20 + 8 +0 + 62 + 0 + 10 +16341.423151 + 20 +9235.0 + 30 +0.0 + 11 +16387.199654 + 21 +9280.776503 + 31 +0.0 + 0 +LINE + 5 +D21 + 8 +0 + 62 + 0 + 10 +16440.232663 + 20 +9333.809512 + 30 +0.0 + 11 +16493.265671 + 21 +9386.84252 + 31 +0.0 + 0 +LINE + 5 +D22 + 8 +0 + 62 + 0 + 10 +16447.489168 + 20 +9235.0 + 30 +0.0 + 11 +16493.265671 + 21 +9280.776503 + 31 +0.0 + 0 +LINE + 5 +D23 + 8 +0 + 62 + 0 + 10 +16546.29868 + 20 +9333.809512 + 30 +0.0 + 11 +16564.992137 + 21 +9352.502969 + 31 +0.0 + 0 +LINE + 5 +D24 + 8 +0 + 62 + 0 + 10 +16553.555185 + 20 +9235.0 + 30 +0.0 + 11 +16564.992137 + 21 +9246.436952 + 31 +0.0 + 0 +ENDBLK + 5 +D25 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X69 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X69 + 1 + + 0 +LINE + 5 +D27 + 8 +0 + 62 + 0 + 10 +14642.386361 + 20 +12415.0 + 30 +0.0 + 11 +15442.386361 + 21 +13215.0 + 31 +0.0 + 0 +LINE + 5 +D28 + 8 +0 + 62 + 0 + 10 +13952.375735 + 20 +12467.451494 + 30 +0.0 + 11 +14699.92424 + 21 +13215.0 + 31 +0.0 + 0 +LINE + 5 +D29 + 8 +0 + 62 + 0 + 10 +13952.375735 + 20 +13209.913614 + 30 +0.0 + 11 +13957.46212 + 21 +13215.0 + 31 +0.0 + 0 +LINE + 5 +D2A + 8 +0 + 62 + 0 + 10 +15384.848481 + 20 +12415.0 + 30 +0.0 + 11 +16184.848481 + 21 +13215.0 + 31 +0.0 + 0 +LINE + 5 +D2B + 8 +0 + 62 + 0 + 10 +16127.310601 + 20 +12415.0 + 30 +0.0 + 11 +16564.992137 + 21 +12852.681536 + 31 +0.0 + 0 +LINE + 5 +D2C + 8 +0 + 62 + 0 + 10 +14271.1553 + 20 +12415.0 + 30 +0.0 + 11 +14385.203579 + 21 +12529.048279 + 31 +0.0 + 0 +LINE + 5 +D2D + 8 +0 + 62 + 0 + 10 +14478.011344 + 20 +12621.856044 + 30 +0.0 + 11 +14663.626874 + 21 +12807.471574 + 31 +0.0 + 0 +LINE + 5 +D2E + 8 +0 + 62 + 0 + 10 +14756.434639 + 20 +12900.279339 + 30 +0.0 + 11 +14942.050169 + 21 +13085.894869 + 31 +0.0 + 0 +LINE + 5 +D2F + 8 +0 + 62 + 0 + 10 +15034.857934 + 20 +13178.702634 + 30 +0.0 + 11 +15071.1553 + 21 +13215.0 + 31 +0.0 + 0 +LINE + 5 +D30 + 8 +0 + 62 + 0 + 10 +13952.375735 + 20 +12838.682555 + 30 +0.0 + 11 +14013.972519 + 21 +12900.279339 + 31 +0.0 + 0 +LINE + 5 +D31 + 8 +0 + 62 + 0 + 10 +14106.780284 + 20 +12993.087104 + 30 +0.0 + 11 +14292.395814 + 21 +13178.702634 + 31 +0.0 + 0 +LINE + 5 +D32 + 8 +0 + 62 + 0 + 10 +15013.61742 + 20 +12415.0 + 30 +0.0 + 11 +15034.857934 + 21 +12436.240514 + 31 +0.0 + 0 +LINE + 5 +D33 + 8 +0 + 62 + 0 + 10 +15127.665699 + 20 +12529.048279 + 30 +0.0 + 11 +15313.281229 + 21 +12714.663809 + 31 +0.0 + 0 +LINE + 5 +D34 + 8 +0 + 62 + 0 + 10 +15406.088994 + 20 +12807.471574 + 30 +0.0 + 11 +15591.704525 + 21 +12993.087104 + 31 +0.0 + 0 +LINE + 5 +D35 + 8 +0 + 62 + 0 + 10 +15684.51229 + 20 +13085.894869 + 30 +0.0 + 11 +15813.61742 + 21 +13215.0 + 31 +0.0 + 0 +LINE + 5 +D36 + 8 +0 + 62 + 0 + 10 +15777.320055 + 20 +12436.240514 + 30 +0.0 + 11 +15962.935585 + 21 +12621.856044 + 31 +0.0 + 0 +LINE + 5 +D37 + 8 +0 + 62 + 0 + 10 +16055.74335 + 20 +12714.663809 + 30 +0.0 + 11 +16241.35888 + 21 +12900.279339 + 31 +0.0 + 0 +LINE + 5 +D38 + 8 +0 + 62 + 0 + 10 +16334.166645 + 20 +12993.087104 + 30 +0.0 + 11 +16519.782175 + 21 +13178.702634 + 31 +0.0 + 0 +LINE + 5 +D39 + 8 +0 + 62 + 0 + 10 +16498.541661 + 20 +12415.0 + 30 +0.0 + 11 +16564.992137 + 21 +12481.450477 + 31 +0.0 + 0 +ENDBLK + 5 +D3A + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X71 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X71 + 1 + + 0 +LINE + 5 +D3C + 8 +0 + 62 + 0 + 10 +15013.596279 + 20 +11599.344022 + 30 +0.0 + 11 +15013.596279 + 21 +11599.344022 + 31 +0.0 + 0 +LINE + 5 +D3D + 8 +0 + 62 + 0 + 10 +15011.076544 + 20 +11676.416973 + 30 +0.0 + 11 +15011.076544 + 21 +11676.416973 + 31 +0.0 + 0 +LINE + 5 +D3E + 8 +0 + 62 + 0 + 10 +15008.55681 + 20 +11753.489924 + 30 +0.0 + 11 +15008.55681 + 21 +11753.489924 + 31 +0.0 + 0 +LINE + 5 +D3F + 8 +0 + 62 + 0 + 10 +15060.124777 + 20 +11793.059417 + 30 +0.0 + 11 +15060.124777 + 21 +11793.059417 + 31 +0.0 + 0 +LINE + 5 +D40 + 8 +0 + 62 + 0 + 10 +15006.037076 + 20 +11830.562874 + 30 +0.0 + 11 +15006.037076 + 21 +11830.562874 + 31 +0.0 + 0 +LINE + 5 +D41 + 8 +0 + 62 + 0 + 10 +15057.605043 + 20 +11870.132367 + 30 +0.0 + 11 +15057.605043 + 21 +11870.132367 + 31 +0.0 + 0 +LINE + 5 +D42 + 8 +0 + 62 + 0 + 10 +15003.517341 + 20 +11907.635825 + 30 +0.0 + 11 +15003.517341 + 21 +11907.635825 + 31 +0.0 + 0 +LINE + 5 +D43 + 8 +0 + 62 + 0 + 10 +15055.085309 + 20 +11947.205318 + 30 +0.0 + 11 +15055.085309 + 21 +11947.205318 + 31 +0.0 + 0 +LINE + 5 +D44 + 8 +0 + 62 + 0 + 10 +15000.997607 + 20 +11984.708776 + 30 +0.0 + 11 +15000.997607 + 21 +11984.708776 + 31 +0.0 + 0 +LINE + 5 +D45 + 8 +0 + 62 + 0 + 10 +15052.565574 + 20 +12024.278269 + 30 +0.0 + 11 +15052.565574 + 21 +12024.278269 + 31 +0.0 + 0 +LINE + 5 +D46 + 8 +0 + 62 + 0 + 10 +15050.04584 + 20 +12101.35122 + 30 +0.0 + 11 +15050.04584 + 21 +12101.35122 + 31 +0.0 + 0 +LINE + 5 +D47 + 8 +0 + 62 + 0 + 10 +15047.526106 + 20 +12178.42417 + 30 +0.0 + 11 +15047.526106 + 21 +12178.42417 + 31 +0.0 + 0 +LINE + 5 +D48 + 8 +0 + 62 + 0 + 10 +15045.006371 + 20 +12255.497121 + 30 +0.0 + 11 +15045.006371 + 21 +12255.497121 + 31 +0.0 + 0 +LINE + 5 +D49 + 8 +0 + 62 + 0 + 10 +15042.486637 + 20 +12332.570072 + 30 +0.0 + 11 +15042.486637 + 21 +12332.570072 + 31 +0.0 + 0 +LINE + 5 +D4A + 8 +0 + 62 + 0 + 10 +15016.116013 + 20 +11522.271071 + 30 +0.0 + 11 +15016.116013 + 21 +11522.271071 + 31 +0.0 + 0 +LINE + 5 +D4B + 8 +0 + 62 + 0 + 10 +15018.635747 + 20 +11445.198121 + 30 +0.0 + 11 +15018.635747 + 21 +11445.198121 + 31 +0.0 + 0 +LINE + 5 +D4C + 8 +0 + 62 + 0 + 10 +15021.155482 + 20 +11368.12517 + 30 +0.0 + 11 +15021.155482 + 21 +11368.12517 + 31 +0.0 + 0 +LINE + 5 +D4D + 8 +0 + 62 + 0 + 10 +15023.675216 + 20 +11291.052219 + 30 +0.0 + 11 +15023.675216 + 21 +11291.052219 + 31 +0.0 + 0 +LINE + 5 +D4E + 8 +0 + 62 + 0 + 10 +15026.19495 + 20 +11213.979268 + 30 +0.0 + 11 +15026.19495 + 21 +11213.979268 + 31 +0.0 + 0 +LINE + 5 +D4F + 8 +0 + 62 + 0 + 10 +15028.714685 + 20 +11136.906318 + 30 +0.0 + 11 +15028.714685 + 21 +11136.906318 + 31 +0.0 + 0 +LINE + 5 +D50 + 8 +0 + 62 + 0 + 10 +15031.234419 + 20 +11059.833367 + 30 +0.0 + 11 +15031.234419 + 21 +11059.833367 + 31 +0.0 + 0 +LINE + 5 +D51 + 8 +0 + 62 + 0 + 10 +15014.419867 + 20 +11608.325891 + 30 +0.0 + 11 +15014.419867 + 21 +11608.325891 + 31 +0.0 + 0 +LINE + 5 +D52 + 8 +0 + 62 + 0 + 10 +15031.871201 + 20 +11714.189424 + 30 +0.0 + 11 +15031.871201 + 21 +11714.189424 + 31 +0.0 + 0 +LINE + 5 +D53 + 8 +0 + 62 + 0 + 10 +15052.691544 + 20 +11716.930474 + 30 +0.0 + 11 +15052.691544 + 21 +11716.930474 + 31 +0.0 + 0 +LINE + 5 +D54 + 8 +0 + 62 + 0 + 10 +15015.8117 + 20 +11815.641172 + 30 +0.0 + 11 +15015.8117 + 21 +11815.641172 + 31 +0.0 + 0 +LINE + 5 +D55 + 8 +0 + 62 + 0 + 10 +15048.331091 + 20 +11819.922432 + 30 +0.0 + 11 +15048.331091 + 21 +11819.922432 + 31 +0.0 + 0 +LINE + 5 +D56 + 8 +0 + 62 + 0 + 10 +15011.451248 + 20 +11918.63313 + 30 +0.0 + 11 +15011.451248 + 21 +11918.63313 + 31 +0.0 + 0 +LINE + 5 +D57 + 8 +0 + 62 + 0 + 10 +15028.902582 + 20 +12024.496663 + 30 +0.0 + 11 +15028.902582 + 21 +12024.496663 + 31 +0.0 + 0 +LINE + 5 +D58 + 8 +0 + 62 + 0 + 10 +15049.722924 + 20 +12027.237713 + 30 +0.0 + 11 +15049.722924 + 21 +12027.237713 + 31 +0.0 + 0 +LINE + 5 +D59 + 8 +0 + 62 + 0 + 10 +15012.843081 + 20 +12125.948411 + 30 +0.0 + 11 +15012.843081 + 21 +12125.948411 + 31 +0.0 + 0 +LINE + 5 +D5A + 8 +0 + 62 + 0 + 10 +15045.362472 + 20 +12130.22967 + 30 +0.0 + 11 +15045.362472 + 21 +12130.22967 + 31 +0.0 + 0 +LINE + 5 +D5B + 8 +0 + 62 + 0 + 10 +15008.482628 + 20 +12228.940369 + 30 +0.0 + 11 +15008.482628 + 21 +12228.940369 + 31 +0.0 + 0 +LINE + 5 +D5C + 8 +0 + 62 + 0 + 10 +15025.933963 + 20 +12334.803902 + 30 +0.0 + 11 +15025.933963 + 21 +12334.803902 + 31 +0.0 + 0 +LINE + 5 +D5D + 8 +0 + 62 + 0 + 10 +15046.754305 + 20 +12337.544952 + 30 +0.0 + 11 +15046.754305 + 21 +12337.544952 + 31 +0.0 + 0 +LINE + 5 +D5E + 8 +0 + 62 + 0 + 10 +15018.780319 + 20 +11505.333934 + 30 +0.0 + 11 +15018.780319 + 21 +11505.333934 + 31 +0.0 + 0 +LINE + 5 +D5F + 8 +0 + 62 + 0 + 10 +15051.299711 + 20 +11509.615193 + 30 +0.0 + 11 +15051.299711 + 21 +11509.615193 + 31 +0.0 + 0 +LINE + 5 +D60 + 8 +0 + 62 + 0 + 10 +15034.839821 + 20 +11403.882185 + 30 +0.0 + 11 +15034.839821 + 21 +11403.882185 + 31 +0.0 + 0 +LINE + 5 +D61 + 8 +0 + 62 + 0 + 10 +15055.660163 + 20 +11406.623235 + 30 +0.0 + 11 +15055.660163 + 21 +11406.623235 + 31 +0.0 + 0 +LINE + 5 +D62 + 8 +0 + 62 + 0 + 10 +15017.388486 + 20 +11298.018652 + 30 +0.0 + 11 +15017.388486 + 21 +11298.018652 + 31 +0.0 + 0 +LINE + 5 +D63 + 8 +0 + 62 + 0 + 10 +15000.928596 + 20 +11192.285645 + 30 +0.0 + 11 +15000.928596 + 21 +11192.285645 + 31 +0.0 + 0 +LINE + 5 +D64 + 8 +0 + 62 + 0 + 10 +15021.748938 + 20 +11195.026695 + 30 +0.0 + 11 +15021.748938 + 21 +11195.026695 + 31 +0.0 + 0 +LINE + 5 +D65 + 8 +0 + 62 + 0 + 10 +15054.26833 + 20 +11199.307954 + 30 +0.0 + 11 +15054.26833 + 21 +11199.307954 + 31 +0.0 + 0 +LINE + 5 +D66 + 8 +0 + 62 + 0 + 10 +15037.80844 + 20 +11093.574947 + 30 +0.0 + 11 +15037.80844 + 21 +11093.574947 + 31 +0.0 + 0 +LINE + 5 +D67 + 8 +0 + 62 + 0 + 10 +15058.628782 + 20 +11096.315997 + 30 +0.0 + 11 +15058.628782 + 21 +11096.315997 + 31 +0.0 + 0 +LINE + 5 +D68 + 8 +0 + 62 + 0 + 10 +15012.821249 + 20 +11653.215041 + 30 +0.0 + 11 +15012.821249 + 21 +11653.215041 + 31 +0.0 + 0 +LINE + 5 +D69 + 8 +0 + 62 + 0 + 10 +15029.689078 + 20 +11642.469049 + 30 +0.0 + 11 +15029.689078 + 21 +11642.469049 + 31 +0.0 + 0 +LINE + 5 +D6A + 8 +0 + 62 + 0 + 10 +15058.108127 + 20 +11703.947567 + 30 +0.0 + 11 +15058.108127 + 21 +11703.947567 + 31 +0.0 + 0 +LINE + 5 +D6B + 8 +0 + 62 + 0 + 10 +15025.802993 + 20 +11804.111656 + 30 +0.0 + 11 +15025.802993 + 21 +11804.111656 + 31 +0.0 + 0 +LINE + 5 +D6C + 8 +0 + 62 + 0 + 10 +15040.47152 + 20 +11953.933671 + 30 +0.0 + 11 +15040.47152 + 21 +11953.933671 + 31 +0.0 + 0 +LINE + 5 +D6D + 8 +0 + 62 + 0 + 10 +15057.339349 + 20 +11943.187679 + 30 +0.0 + 11 +15057.339349 + 21 +11943.187679 + 31 +0.0 + 0 +LINE + 5 +D6E + 8 +0 + 62 + 0 + 10 +15008.166385 + 20 +12054.097761 + 30 +0.0 + 11 +15008.166385 + 21 +12054.097761 + 31 +0.0 + 0 +LINE + 5 +D6F + 8 +0 + 62 + 0 + 10 +15025.034214 + 20 +12043.351769 + 30 +0.0 + 11 +15025.034214 + 21 +12043.351769 + 31 +0.0 + 0 +LINE + 5 +D70 + 8 +0 + 62 + 0 + 10 +15053.453264 + 20 +12104.830286 + 30 +0.0 + 11 +15053.453264 + 21 +12104.830286 + 31 +0.0 + 0 +LINE + 5 +D71 + 8 +0 + 62 + 0 + 10 +15021.148129 + 20 +12204.994375 + 30 +0.0 + 11 +15021.148129 + 21 +12204.994375 + 31 +0.0 + 0 +LINE + 5 +D72 + 8 +0 + 62 + 0 + 10 +15035.816656 + 20 +12354.816391 + 30 +0.0 + 11 +15035.816656 + 21 +12354.816391 + 31 +0.0 + 0 +LINE + 5 +D73 + 8 +0 + 62 + 0 + 10 +15052.684485 + 20 +12344.070399 + 30 +0.0 + 11 +15052.684485 + 21 +12344.070399 + 31 +0.0 + 0 +LINE + 5 +D74 + 8 +0 + 62 + 0 + 10 +15045.126383 + 20 +11553.050952 + 30 +0.0 + 11 +15045.126383 + 21 +11553.050952 + 31 +0.0 + 0 +LINE + 5 +D75 + 8 +0 + 62 + 0 + 10 +15061.994212 + 20 +11542.30496 + 30 +0.0 + 11 +15061.994212 + 21 +11542.30496 + 31 +0.0 + 0 +LINE + 5 +D76 + 8 +0 + 62 + 0 + 10 +15030.457856 + 20 +11403.228937 + 30 +0.0 + 11 +15030.457856 + 21 +11403.228937 + 31 +0.0 + 0 +LINE + 5 +D77 + 8 +0 + 62 + 0 + 10 +15002.038806 + 20 +11341.750419 + 30 +0.0 + 11 +15002.038806 + 21 +11341.750419 + 31 +0.0 + 0 +LINE + 5 +D78 + 8 +0 + 62 + 0 + 10 +15017.476112 + 20 +11252.332322 + 30 +0.0 + 11 +15017.476112 + 21 +11252.332322 + 31 +0.0 + 0 +LINE + 5 +D79 + 8 +0 + 62 + 0 + 10 +15034.343941 + 20 +11241.58633 + 30 +0.0 + 11 +15034.343941 + 21 +11241.58633 + 31 +0.0 + 0 +LINE + 5 +D7A + 8 +0 + 62 + 0 + 10 +15049.781246 + 20 +11152.168233 + 30 +0.0 + 11 +15049.781246 + 21 +11152.168233 + 31 +0.0 + 0 +LINE + 5 +D7B + 8 +0 + 62 + 0 + 10 +15002.807585 + 20 +11102.510307 + 30 +0.0 + 11 +15002.807585 + 21 +11102.510307 + 31 +0.0 + 0 +LINE + 5 +D7C + 8 +0 + 62 + 0 + 10 +15035.112719 + 20 +11002.346217 + 30 +0.0 + 11 +15035.112719 + 21 +11002.346217 + 31 +0.0 + 0 +LINE + 5 +D7D + 8 +0 + 62 + 0 + 10 +15008.763723 + 20 +11627.900024 + 30 +0.0 + 11 +15008.763723 + 21 +11627.900024 + 31 +0.0 + 0 +LINE + 5 +D7E + 8 +0 + 62 + 0 + 10 +15016.136496 + 20 +11621.144122 + 30 +0.0 + 11 +15016.136496 + 21 +11621.144122 + 31 +0.0 + 0 +LINE + 5 +D7F + 8 +0 + 62 + 0 + 10 +15050.935986 + 20 +11589.256264 + 30 +0.0 + 11 +15050.935986 + 21 +11589.256264 + 31 +0.0 + 0 +LINE + 5 +D80 + 8 +0 + 62 + 0 + 10 +15007.210571 + 20 +11774.614549 + 30 +0.0 + 11 +15007.210571 + 21 +11774.614549 + 31 +0.0 + 0 +LINE + 5 +D81 + 8 +0 + 62 + 0 + 10 +15047.023547 + 20 +11738.132678 + 30 +0.0 + 11 +15047.023547 + 21 +11738.132678 + 31 +0.0 + 0 +LINE + 5 +D82 + 8 +0 + 62 + 0 + 10 +15054.39632 + 20 +11731.376775 + 30 +0.0 + 11 +15054.39632 + 21 +11731.376775 + 31 +0.0 + 0 +LINE + 5 +D83 + 8 +0 + 62 + 0 + 10 +15003.298132 + 20 +11923.490962 + 30 +0.0 + 11 +15003.298132 + 21 +11923.490962 + 31 +0.0 + 0 +LINE + 5 +D84 + 8 +0 + 62 + 0 + 10 +15010.670905 + 20 +11916.73506 + 30 +0.0 + 11 +15010.670905 + 21 +11916.73506 + 31 +0.0 + 0 +LINE + 5 +D85 + 8 +0 + 62 + 0 + 10 +15045.470395 + 20 +11884.847202 + 30 +0.0 + 11 +15045.470395 + 21 +11884.847202 + 31 +0.0 + 0 +LINE + 5 +D86 + 8 +0 + 62 + 0 + 10 +15001.74498 + 20 +12070.205487 + 30 +0.0 + 11 +15001.74498 + 21 +12070.205487 + 31 +0.0 + 0 +LINE + 5 +D87 + 8 +0 + 62 + 0 + 10 +15041.557956 + 20 +12033.723616 + 30 +0.0 + 11 +15041.557956 + 21 +12033.723616 + 31 +0.0 + 0 +LINE + 5 +D88 + 8 +0 + 62 + 0 + 10 +15048.930729 + 20 +12026.967714 + 30 +0.0 + 11 +15048.930729 + 21 +12026.967714 + 31 +0.0 + 0 +LINE + 5 +D89 + 8 +0 + 62 + 0 + 10 +15005.205314 + 20 +12212.325999 + 30 +0.0 + 11 +15005.205314 + 21 +12212.325999 + 31 +0.0 + 0 +LINE + 5 +D8A + 8 +0 + 62 + 0 + 10 +15040.004804 + 20 +12180.438141 + 30 +0.0 + 11 +15040.004804 + 21 +12180.438141 + 31 +0.0 + 0 +LINE + 5 +D8B + 8 +0 + 62 + 0 + 10 +15036.092365 + 20 +12329.314554 + 30 +0.0 + 11 +15036.092365 + 21 +12329.314554 + 31 +0.0 + 0 +LINE + 5 +D8C + 8 +0 + 62 + 0 + 10 +15043.465138 + 20 +12322.558652 + 30 +0.0 + 11 +15043.465138 + 21 +12322.558652 + 31 +0.0 + 0 +LINE + 5 +D8D + 8 +0 + 62 + 0 + 10 +15012.676162 + 20 +11479.02361 + 30 +0.0 + 11 +15012.676162 + 21 +11479.02361 + 31 +0.0 + 0 +LINE + 5 +D8E + 8 +0 + 62 + 0 + 10 +15052.489138 + 20 +11442.541739 + 30 +0.0 + 11 +15052.489138 + 21 +11442.541739 + 31 +0.0 + 0 +LINE + 5 +D8F + 8 +0 + 62 + 0 + 10 +15059.861912 + 20 +11435.785837 + 30 +0.0 + 11 +15059.861912 + 21 +11435.785837 + 31 +0.0 + 0 +LINE + 5 +D90 + 8 +0 + 62 + 0 + 10 +15014.229314 + 20 +11332.309085 + 30 +0.0 + 11 +15014.229314 + 21 +11332.309085 + 31 +0.0 + 0 +LINE + 5 +D91 + 8 +0 + 62 + 0 + 10 +15021.602087 + 20 +11325.553183 + 30 +0.0 + 11 +15021.602087 + 21 +11325.553183 + 31 +0.0 + 0 +LINE + 5 +D92 + 8 +0 + 62 + 0 + 10 +15056.401578 + 20 +11293.665326 + 30 +0.0 + 11 +15056.401578 + 21 +11293.665326 + 31 +0.0 + 0 +LINE + 5 +D93 + 8 +0 + 62 + 0 + 10 +15018.141753 + 20 +11183.432672 + 30 +0.0 + 11 +15018.141753 + 21 +11183.432672 + 31 +0.0 + 0 +LINE + 5 +D94 + 8 +0 + 62 + 0 + 10 +15057.954729 + 20 +11146.950801 + 30 +0.0 + 11 +15057.954729 + 21 +11146.950801 + 31 +0.0 + 0 +LINE + 5 +D95 + 8 +0 + 62 + 0 + 10 +15019.694905 + 20 +11036.718147 + 30 +0.0 + 11 +15019.694905 + 21 +11036.718147 + 31 +0.0 + 0 +LINE + 5 +D96 + 8 +0 + 62 + 0 + 10 +15027.067678 + 20 +11029.962245 + 30 +0.0 + 11 +15027.067678 + 21 +11029.962245 + 31 +0.0 + 0 +ENDBLK + 5 +D97 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X72 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X72 + 1 + + 0 +LINE + 5 +D99 + 8 +0 + 62 + 0 + 10 +15584.734698 + 20 +11721.568302 + 30 +0.0 + 11 +15584.734698 + 21 +11721.568302 + 31 +0.0 + 0 +LINE + 5 +D9A + 8 +0 + 62 + 0 + 10 +15582.214964 + 20 +11798.641252 + 30 +0.0 + 11 +15582.214964 + 21 +11798.641252 + 31 +0.0 + 0 +LINE + 5 +D9B + 8 +0 + 62 + 0 + 10 +15579.69523 + 20 +11875.714203 + 30 +0.0 + 11 +15579.69523 + 21 +11875.714203 + 31 +0.0 + 0 +LINE + 5 +D9C + 8 +0 + 62 + 0 + 10 +15577.175495 + 20 +11952.787154 + 30 +0.0 + 11 +15577.175495 + 21 +11952.787154 + 31 +0.0 + 0 +LINE + 5 +D9D + 8 +0 + 62 + 0 + 10 +15574.655761 + 20 +12029.860105 + 30 +0.0 + 11 +15574.655761 + 21 +12029.860105 + 31 +0.0 + 0 +LINE + 5 +D9E + 8 +0 + 62 + 0 + 10 +15572.136027 + 20 +12106.933056 + 30 +0.0 + 11 +15572.136027 + 21 +12106.933056 + 31 +0.0 + 0 +LINE + 5 +D9F + 8 +0 + 62 + 0 + 10 +15569.616292 + 20 +12184.006006 + 30 +0.0 + 11 +15569.616292 + 21 +12184.006006 + 31 +0.0 + 0 +LINE + 5 +DA0 + 8 +0 + 62 + 0 + 10 +15623.564319 + 20 +12225.401783 + 30 +0.0 + 11 +15623.564319 + 21 +12225.401783 + 31 +0.0 + 0 +LINE + 5 +DA1 + 8 +0 + 62 + 0 + 10 +15567.096558 + 20 +12261.078957 + 30 +0.0 + 11 +15567.096558 + 21 +12261.078957 + 31 +0.0 + 0 +LINE + 5 +DA2 + 8 +0 + 62 + 0 + 10 +15621.044585 + 20 +12302.474734 + 30 +0.0 + 11 +15621.044585 + 21 +12302.474734 + 31 +0.0 + 0 +LINE + 5 +DA3 + 8 +0 + 62 + 0 + 10 +15564.576824 + 20 +12338.151908 + 30 +0.0 + 11 +15564.576824 + 21 +12338.151908 + 31 +0.0 + 0 +LINE + 5 +DA4 + 8 +0 + 62 + 0 + 10 +15587.254433 + 20 +11644.495351 + 30 +0.0 + 11 +15587.254433 + 21 +11644.495351 + 31 +0.0 + 0 +LINE + 5 +DA5 + 8 +0 + 62 + 0 + 10 +15589.774167 + 20 +11567.4224 + 30 +0.0 + 11 +15589.774167 + 21 +11567.4224 + 31 +0.0 + 0 +LINE + 5 +DA6 + 8 +0 + 62 + 0 + 10 +15592.293901 + 20 +11490.349449 + 30 +0.0 + 11 +15592.293901 + 21 +11490.349449 + 31 +0.0 + 0 +LINE + 5 +DA7 + 8 +0 + 62 + 0 + 10 +15594.813636 + 20 +11413.276499 + 30 +0.0 + 11 +15594.813636 + 21 +11413.276499 + 31 +0.0 + 0 +LINE + 5 +DA8 + 8 +0 + 62 + 0 + 10 +15597.33337 + 20 +11336.203548 + 30 +0.0 + 11 +15597.33337 + 21 +11336.203548 + 31 +0.0 + 0 +LINE + 5 +DA9 + 8 +0 + 62 + 0 + 10 +15599.853104 + 20 +11259.130597 + 30 +0.0 + 11 +15599.853104 + 21 +11259.130597 + 31 +0.0 + 0 +LINE + 5 +DAA + 8 +0 + 62 + 0 + 10 +15602.372839 + 20 +11182.057646 + 30 +0.0 + 11 +15602.372839 + 21 +11182.057646 + 31 +0.0 + 0 +LINE + 5 +DAB + 8 +0 + 62 + 0 + 10 +15604.892573 + 20 +11104.984696 + 30 +0.0 + 11 +15604.892573 + 21 +11104.984696 + 31 +0.0 + 0 +LINE + 5 +DAC + 8 +0 + 62 + 0 + 10 +15607.412307 + 20 +11027.911745 + 30 +0.0 + 11 +15607.412307 + 21 +11027.911745 + 31 +0.0 + 0 +LINE + 5 +DAD + 8 +0 + 62 + 0 + 10 +15589.65427 + 20 +11580.490915 + 30 +0.0 + 11 +15589.65427 + 21 +11580.490915 + 31 +0.0 + 0 +LINE + 5 +DAE + 8 +0 + 62 + 0 + 10 +15607.105605 + 20 +11686.354449 + 30 +0.0 + 11 +15607.105605 + 21 +11686.354449 + 31 +0.0 + 0 +LINE + 5 +DAF + 8 +0 + 62 + 0 + 10 +15570.225761 + 20 +11785.065147 + 30 +0.0 + 11 +15570.225761 + 21 +11785.065147 + 31 +0.0 + 0 +LINE + 5 +DB0 + 8 +0 + 62 + 0 + 10 +15591.046103 + 20 +11787.806197 + 30 +0.0 + 11 +15591.046103 + 21 +11787.806197 + 31 +0.0 + 0 +LINE + 5 +DB1 + 8 +0 + 62 + 0 + 10 +15623.565495 + 20 +11792.087456 + 30 +0.0 + 11 +15623.565495 + 21 +11792.087456 + 31 +0.0 + 0 +LINE + 5 +DB2 + 8 +0 + 62 + 0 + 10 +15586.685651 + 20 +11890.798154 + 30 +0.0 + 11 +15586.685651 + 21 +11890.798154 + 31 +0.0 + 0 +LINE + 5 +DB3 + 8 +0 + 62 + 0 + 10 +15604.136986 + 20 +11996.661687 + 30 +0.0 + 11 +15604.136986 + 21 +11996.661687 + 31 +0.0 + 0 +LINE + 5 +DB4 + 8 +0 + 62 + 0 + 10 +15624.957328 + 20 +11999.402737 + 30 +0.0 + 11 +15624.957328 + 21 +11999.402737 + 31 +0.0 + 0 +LINE + 5 +DB5 + 8 +0 + 62 + 0 + 10 +15567.257142 + 20 +12095.372386 + 30 +0.0 + 11 +15567.257142 + 21 +12095.372386 + 31 +0.0 + 0 +LINE + 5 +DB6 + 8 +0 + 62 + 0 + 10 +15588.077484 + 20 +12098.113436 + 30 +0.0 + 11 +15588.077484 + 21 +12098.113436 + 31 +0.0 + 0 +LINE + 5 +DB7 + 8 +0 + 62 + 0 + 10 +15620.596875 + 20 +12102.394695 + 30 +0.0 + 11 +15620.596875 + 21 +12102.394695 + 31 +0.0 + 0 +LINE + 5 +DB8 + 8 +0 + 62 + 0 + 10 +15583.717032 + 20 +12201.105393 + 30 +0.0 + 11 +15583.717032 + 21 +12201.105393 + 31 +0.0 + 0 +LINE + 5 +DB9 + 8 +0 + 62 + 0 + 10 +15601.168366 + 20 +12306.968926 + 30 +0.0 + 11 +15601.168366 + 21 +12306.968926 + 31 +0.0 + 0 +LINE + 5 +DBA + 8 +0 + 62 + 0 + 10 +15621.988708 + 20 +12309.709976 + 30 +0.0 + 11 +15621.988708 + 21 +12309.709976 + 31 +0.0 + 0 +LINE + 5 +DBB + 8 +0 + 62 + 0 + 10 +15573.19438 + 20 +11474.757908 + 30 +0.0 + 11 +15573.19438 + 21 +11474.757908 + 31 +0.0 + 0 +LINE + 5 +DBC + 8 +0 + 62 + 0 + 10 +15594.014723 + 20 +11477.498958 + 30 +0.0 + 11 +15594.014723 + 21 +11477.498958 + 31 +0.0 + 0 +LINE + 5 +DBD + 8 +0 + 62 + 0 + 10 +15610.074224 + 20 +11376.04721 + 30 +0.0 + 11 +15610.074224 + 21 +11376.04721 + 31 +0.0 + 0 +LINE + 5 +DBE + 8 +0 + 62 + 0 + 10 +15592.622889 + 20 +11270.183676 + 30 +0.0 + 11 +15592.622889 + 21 +11270.183676 + 31 +0.0 + 0 +LINE + 5 +DBF + 8 +0 + 62 + 0 + 10 +15576.163 + 20 +11164.450669 + 30 +0.0 + 11 +15576.163 + 21 +11164.450669 + 31 +0.0 + 0 +LINE + 5 +DC0 + 8 +0 + 62 + 0 + 10 +15596.983342 + 20 +11167.191719 + 30 +0.0 + 11 +15596.983342 + 21 +11167.191719 + 31 +0.0 + 0 +LINE + 5 +DC1 + 8 +0 + 62 + 0 + 10 +15613.042843 + 20 +11065.739971 + 30 +0.0 + 11 +15613.042843 + 21 +11065.739971 + 31 +0.0 + 0 +LINE + 5 +DC2 + 8 +0 + 62 + 0 + 10 +15603.344487 + 20 +11754.510941 + 30 +0.0 + 11 +15603.344487 + 21 +11754.510941 + 31 +0.0 + 0 +LINE + 5 +DC3 + 8 +0 + 62 + 0 + 10 +15620.212315 + 20 +11743.764949 + 30 +0.0 + 11 +15620.212315 + 21 +11743.764949 + 31 +0.0 + 0 +LINE + 5 +DC4 + 8 +0 + 62 + 0 + 10 +15571.039352 + 20 +11854.675031 + 30 +0.0 + 11 +15571.039352 + 21 +11854.675031 + 31 +0.0 + 0 +LINE + 5 +DC5 + 8 +0 + 62 + 0 + 10 +15587.907181 + 20 +11843.929039 + 30 +0.0 + 11 +15587.907181 + 21 +11843.929039 + 31 +0.0 + 0 +LINE + 5 +DC6 + 8 +0 + 62 + 0 + 10 +15616.326231 + 20 +11905.407556 + 30 +0.0 + 11 +15616.326231 + 21 +11905.407556 + 31 +0.0 + 0 +LINE + 5 +DC7 + 8 +0 + 62 + 0 + 10 +15584.021096 + 20 +12005.571645 + 30 +0.0 + 11 +15584.021096 + 21 +12005.571645 + 31 +0.0 + 0 +LINE + 5 +DC8 + 8 +0 + 62 + 0 + 10 +15598.689623 + 20 +12155.393661 + 30 +0.0 + 11 +15598.689623 + 21 +12155.393661 + 31 +0.0 + 0 +LINE + 5 +DC9 + 8 +0 + 62 + 0 + 10 +15615.557452 + 20 +12144.647669 + 30 +0.0 + 11 +15615.557452 + 21 +12144.647669 + 31 +0.0 + 0 +LINE + 5 +DCA + 8 +0 + 62 + 0 + 10 +15566.384489 + 20 +12255.55775 + 30 +0.0 + 11 +15566.384489 + 21 +12255.55775 + 31 +0.0 + 0 +LINE + 5 +DCB + 8 +0 + 62 + 0 + 10 +15583.252318 + 20 +12244.811758 + 30 +0.0 + 11 +15583.252318 + 21 +12244.811758 + 31 +0.0 + 0 +LINE + 5 +DCC + 8 +0 + 62 + 0 + 10 +15611.671367 + 20 +12306.290275 + 30 +0.0 + 11 +15611.671367 + 21 +12306.290275 + 31 +0.0 + 0 +LINE + 5 +DCD + 8 +0 + 62 + 0 + 10 +15588.67596 + 20 +11604.688926 + 30 +0.0 + 11 +15588.67596 + 21 +11604.688926 + 31 +0.0 + 0 +LINE + 5 +DCE + 8 +0 + 62 + 0 + 10 +15620.981094 + 20 +11504.524837 + 30 +0.0 + 11 +15620.981094 + 21 +11504.524837 + 31 +0.0 + 0 +LINE + 5 +DCF + 8 +0 + 62 + 0 + 10 +15575.694215 + 20 +11453.792311 + 30 +0.0 + 11 +15575.694215 + 21 +11453.792311 + 31 +0.0 + 0 +LINE + 5 +DD0 + 8 +0 + 62 + 0 + 10 +15592.562044 + 20 +11443.046319 + 30 +0.0 + 11 +15592.562044 + 21 +11443.046319 + 31 +0.0 + 0 +LINE + 5 +DD1 + 8 +0 + 62 + 0 + 10 +15607.99935 + 20 +11353.628222 + 30 +0.0 + 11 +15607.99935 + 21 +11353.628222 + 31 +0.0 + 0 +LINE + 5 +DD2 + 8 +0 + 62 + 0 + 10 +15624.867179 + 20 +11342.88223 + 30 +0.0 + 11 +15624.867179 + 21 +11342.88223 + 31 +0.0 + 0 +LINE + 5 +DD3 + 8 +0 + 62 + 0 + 10 +15593.330823 + 20 +11203.806207 + 30 +0.0 + 11 +15593.330823 + 21 +11203.806207 + 31 +0.0 + 0 +LINE + 5 +DD4 + 8 +0 + 62 + 0 + 10 +15564.911773 + 20 +11142.327689 + 30 +0.0 + 11 +15564.911773 + 21 +11142.327689 + 31 +0.0 + 0 +LINE + 5 +DD5 + 8 +0 + 62 + 0 + 10 +15580.349079 + 20 +11052.909592 + 30 +0.0 + 11 +15580.349079 + 21 +11052.909592 + 31 +0.0 + 0 +LINE + 5 +DD6 + 8 +0 + 62 + 0 + 10 +15597.216908 + 20 +11042.1636 + 30 +0.0 + 11 +15597.216908 + 21 +11042.1636 + 31 +0.0 + 0 +LINE + 5 +DD7 + 8 +0 + 62 + 0 + 10 +15571.729219 + 20 +11693.202483 + 30 +0.0 + 11 +15571.729219 + 21 +11693.202483 + 31 +0.0 + 0 +LINE + 5 +DD8 + 8 +0 + 62 + 0 + 10 +15579.101993 + 20 +11686.446581 + 30 +0.0 + 11 +15579.101993 + 21 +11686.446581 + 31 +0.0 + 0 +LINE + 5 +DD9 + 8 +0 + 62 + 0 + 10 +15613.901483 + 20 +11654.558723 + 30 +0.0 + 11 +15613.901483 + 21 +11654.558723 + 31 +0.0 + 0 +LINE + 5 +DDA + 8 +0 + 62 + 0 + 10 +15570.176067 + 20 +11839.917008 + 30 +0.0 + 11 +15570.176067 + 21 +11839.917008 + 31 +0.0 + 0 +LINE + 5 +DDB + 8 +0 + 62 + 0 + 10 +15609.989044 + 20 +11803.435137 + 30 +0.0 + 11 +15609.989044 + 21 +11803.435137 + 31 +0.0 + 0 +LINE + 5 +DDC + 8 +0 + 62 + 0 + 10 +15617.361817 + 20 +11796.679235 + 30 +0.0 + 11 +15617.361817 + 21 +11796.679235 + 31 +0.0 + 0 +LINE + 5 +DDD + 8 +0 + 62 + 0 + 10 +15566.263628 + 20 +11988.793422 + 30 +0.0 + 11 +15566.263628 + 21 +11988.793422 + 31 +0.0 + 0 +LINE + 5 +DDE + 8 +0 + 62 + 0 + 10 +15573.636401 + 20 +11982.03752 + 30 +0.0 + 11 +15573.636401 + 21 +11982.03752 + 31 +0.0 + 0 +LINE + 5 +DDF + 8 +0 + 62 + 0 + 10 +15608.435892 + 20 +11950.149662 + 30 +0.0 + 11 +15608.435892 + 21 +11950.149662 + 31 +0.0 + 0 +LINE + 5 +DE0 + 8 +0 + 62 + 0 + 10 +15564.710476 + 20 +12135.507947 + 30 +0.0 + 11 +15564.710476 + 21 +12135.507947 + 31 +0.0 + 0 +LINE + 5 +DE1 + 8 +0 + 62 + 0 + 10 +15604.523452 + 20 +12099.026075 + 30 +0.0 + 11 +15604.523452 + 21 +12099.026075 + 31 +0.0 + 0 +LINE + 5 +DE2 + 8 +0 + 62 + 0 + 10 +15611.896226 + 20 +12092.270173 + 30 +0.0 + 11 +15611.896226 + 21 +12092.270173 + 31 +0.0 + 0 +LINE + 5 +DE3 + 8 +0 + 62 + 0 + 10 +15568.17081 + 20 +12277.628458 + 30 +0.0 + 11 +15568.17081 + 21 +12277.628458 + 31 +0.0 + 0 +LINE + 5 +DE4 + 8 +0 + 62 + 0 + 10 +15602.970301 + 20 +12245.7406 + 30 +0.0 + 11 +15602.970301 + 21 +12245.7406 + 31 +0.0 + 0 +LINE + 5 +DE5 + 8 +0 + 62 + 0 + 10 +15575.641659 + 20 +11544.32607 + 30 +0.0 + 11 +15575.641659 + 21 +11544.32607 + 31 +0.0 + 0 +LINE + 5 +DE6 + 8 +0 + 62 + 0 + 10 +15615.454635 + 20 +11507.844198 + 30 +0.0 + 11 +15615.454635 + 21 +11507.844198 + 31 +0.0 + 0 +LINE + 5 +DE7 + 8 +0 + 62 + 0 + 10 +15622.827408 + 20 +11501.088296 + 30 +0.0 + 11 +15622.827408 + 21 +11501.088296 + 31 +0.0 + 0 +LINE + 5 +DE8 + 8 +0 + 62 + 0 + 10 +15577.19481 + 20 +11397.611545 + 30 +0.0 + 11 +15577.19481 + 21 +11397.611545 + 31 +0.0 + 0 +LINE + 5 +DE9 + 8 +0 + 62 + 0 + 10 +15584.567584 + 20 +11390.855643 + 30 +0.0 + 11 +15584.567584 + 21 +11390.855643 + 31 +0.0 + 0 +LINE + 5 +DEA + 8 +0 + 62 + 0 + 10 +15619.367074 + 20 +11358.967785 + 30 +0.0 + 11 +15619.367074 + 21 +11358.967785 + 31 +0.0 + 0 +LINE + 5 +DEB + 8 +0 + 62 + 0 + 10 +15581.10725 + 20 +11248.735131 + 30 +0.0 + 11 +15581.10725 + 21 +11248.735131 + 31 +0.0 + 0 +LINE + 5 +DEC + 8 +0 + 62 + 0 + 10 +15620.920226 + 20 +11212.25326 + 30 +0.0 + 11 +15620.920226 + 21 +11212.25326 + 31 +0.0 + 0 +LINE + 5 +DED + 8 +0 + 62 + 0 + 10 +15582.660402 + 20 +11102.020606 + 30 +0.0 + 11 +15582.660402 + 21 +11102.020606 + 31 +0.0 + 0 +LINE + 5 +DEE + 8 +0 + 62 + 0 + 10 +15590.033175 + 20 +11095.264704 + 30 +0.0 + 11 +15590.033175 + 21 +11095.264704 + 31 +0.0 + 0 +LINE + 5 +DEF + 8 +0 + 62 + 0 + 10 +15624.832665 + 20 +11063.376846 + 30 +0.0 + 11 +15624.832665 + 21 +11063.376846 + 31 +0.0 + 0 +ENDBLK + 5 +DF0 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X73 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X73 + 1 + + 0 +LINE + 5 +DF2 + 8 +0 + 62 + 0 + 10 +15017.602141 + 20 +9785.270378 + 30 +0.0 + 11 +15017.602141 + 21 +9785.270378 + 31 +0.0 + 0 +LINE + 5 +DF3 + 8 +0 + 62 + 0 + 10 +15015.082407 + 20 +9862.343328 + 30 +0.0 + 11 +15015.082407 + 21 +9862.343328 + 31 +0.0 + 0 +LINE + 5 +DF4 + 8 +0 + 62 + 0 + 10 +15012.562672 + 20 +9939.416279 + 30 +0.0 + 11 +15012.562672 + 21 +9939.416279 + 31 +0.0 + 0 +LINE + 5 +DF5 + 8 +0 + 62 + 0 + 10 +15010.042938 + 20 +10016.48923 + 30 +0.0 + 11 +15010.042938 + 21 +10016.48923 + 31 +0.0 + 0 +LINE + 5 +DF6 + 8 +0 + 62 + 0 + 10 +15007.523204 + 20 +10093.562181 + 30 +0.0 + 11 +15007.523204 + 21 +10093.562181 + 31 +0.0 + 0 +LINE + 5 +DF7 + 8 +0 + 62 + 0 + 10 +15061.471231 + 20 +10134.957958 + 30 +0.0 + 11 +15061.471231 + 21 +10134.957958 + 31 +0.0 + 0 +LINE + 5 +DF8 + 8 +0 + 62 + 0 + 10 +15005.003469 + 20 +10170.635131 + 30 +0.0 + 11 +15005.003469 + 21 +10170.635131 + 31 +0.0 + 0 +LINE + 5 +DF9 + 8 +0 + 62 + 0 + 10 +15058.951497 + 20 +10212.030908 + 30 +0.0 + 11 +15058.951497 + 21 +10212.030908 + 31 +0.0 + 0 +LINE + 5 +DFA + 8 +0 + 62 + 0 + 10 +15002.483735 + 20 +10247.708082 + 30 +0.0 + 11 +15002.483735 + 21 +10247.708082 + 31 +0.0 + 0 +LINE + 5 +DFB + 8 +0 + 62 + 0 + 10 +15056.431762 + 20 +10289.103859 + 30 +0.0 + 11 +15056.431762 + 21 +10289.103859 + 31 +0.0 + 0 +LINE + 5 +DFC + 8 +0 + 62 + 0 + 10 +15053.912028 + 20 +10366.17681 + 30 +0.0 + 11 +15053.912028 + 21 +10366.17681 + 31 +0.0 + 0 +LINE + 5 +DFD + 8 +0 + 62 + 0 + 10 +15020.121875 + 20 +9708.197427 + 30 +0.0 + 11 +15020.121875 + 21 +9708.197427 + 31 +0.0 + 0 +LINE + 5 +DFE + 8 +0 + 62 + 0 + 10 +15022.64161 + 20 +9631.124476 + 30 +0.0 + 11 +15022.64161 + 21 +9631.124476 + 31 +0.0 + 0 +LINE + 5 +DFF + 8 +0 + 62 + 0 + 10 +15025.161344 + 20 +9554.051525 + 30 +0.0 + 11 +15025.161344 + 21 +9554.051525 + 31 +0.0 + 0 +LINE + 5 +E00 + 8 +0 + 62 + 0 + 10 +15027.681078 + 20 +9476.978574 + 30 +0.0 + 11 +15027.681078 + 21 +9476.978574 + 31 +0.0 + 0 +LINE + 5 +E01 + 8 +0 + 62 + 0 + 10 +15030.200813 + 20 +9399.905624 + 30 +0.0 + 11 +15030.200813 + 21 +9399.905624 + 31 +0.0 + 0 +LINE + 5 +E02 + 8 +0 + 62 + 0 + 10 +15032.720547 + 20 +9322.832673 + 30 +0.0 + 11 +15032.720547 + 21 +9322.832673 + 31 +0.0 + 0 +LINE + 5 +E03 + 8 +0 + 62 + 0 + 10 +15035.240281 + 20 +9245.759722 + 30 +0.0 + 11 +15035.240281 + 21 +9245.759722 + 31 +0.0 + 0 +LINE + 5 +E04 + 8 +0 + 62 + 0 + 10 +15037.760016 + 20 +9168.686771 + 30 +0.0 + 11 +15037.760016 + 21 +9168.686771 + 31 +0.0 + 0 +LINE + 5 +E05 + 8 +0 + 62 + 0 + 10 +15040.27975 + 20 +9091.613821 + 30 +0.0 + 11 +15040.27975 + 21 +9091.613821 + 31 +0.0 + 0 +LINE + 5 +E06 + 8 +0 + 62 + 0 + 10 +15015.771693 + 20 +9640.74945 + 30 +0.0 + 11 +15015.771693 + 21 +9640.74945 + 31 +0.0 + 0 +LINE + 5 +E07 + 8 +0 + 62 + 0 + 10 +15036.592035 + 20 +9643.4905 + 30 +0.0 + 11 +15036.592035 + 21 +9643.4905 + 31 +0.0 + 0 +LINE + 5 +E08 + 8 +0 + 62 + 0 + 10 +15032.231582 + 20 +9746.482458 + 30 +0.0 + 11 +15032.231582 + 21 +9746.482458 + 31 +0.0 + 0 +LINE + 5 +E09 + 8 +0 + 62 + 0 + 10 +15049.682917 + 20 +9852.345991 + 30 +0.0 + 11 +15049.682917 + 21 +9852.345991 + 31 +0.0 + 0 +LINE + 5 +E0A + 8 +0 + 62 + 0 + 10 +15012.803073 + 20 +9951.056689 + 30 +0.0 + 11 +15012.803073 + 21 +9951.056689 + 31 +0.0 + 0 +LINE + 5 +E0B + 8 +0 + 62 + 0 + 10 +15033.623415 + 20 +9953.797739 + 30 +0.0 + 11 +15033.623415 + 21 +9953.797739 + 31 +0.0 + 0 +LINE + 5 +E0C + 8 +0 + 62 + 0 + 10 +15029.262963 + 20 +10056.789696 + 30 +0.0 + 11 +15029.262963 + 21 +10056.789696 + 31 +0.0 + 0 +LINE + 5 +E0D + 8 +0 + 62 + 0 + 10 +15046.714298 + 20 +10162.65323 + 30 +0.0 + 11 +15046.714298 + 21 +10162.65323 + 31 +0.0 + 0 +LINE + 5 +E0E + 8 +0 + 62 + 0 + 10 +15009.834454 + 20 +10261.363928 + 30 +0.0 + 11 +15009.834454 + 21 +10261.363928 + 31 +0.0 + 0 +LINE + 5 +E0F + 8 +0 + 62 + 0 + 10 +15030.654796 + 20 +10264.104978 + 30 +0.0 + 11 +15030.654796 + 21 +10264.104978 + 31 +0.0 + 0 +LINE + 5 +E10 + 8 +0 + 62 + 0 + 10 +15026.294344 + 20 +10367.096935 + 30 +0.0 + 11 +15026.294344 + 21 +10367.096935 + 31 +0.0 + 0 +LINE + 5 +E11 + 8 +0 + 62 + 0 + 10 +15052.651536 + 20 +9542.038752 + 30 +0.0 + 11 +15052.651536 + 21 +9542.038752 + 31 +0.0 + 0 +LINE + 5 +E12 + 8 +0 + 62 + 0 + 10 +15002.68081 + 20 +9431.89396 + 30 +0.0 + 11 +15002.68081 + 21 +9431.89396 + 31 +0.0 + 0 +LINE + 5 +E13 + 8 +0 + 62 + 0 + 10 +15035.200202 + 20 +9436.175219 + 30 +0.0 + 11 +15035.200202 + 21 +9436.175219 + 31 +0.0 + 0 +LINE + 5 +E14 + 8 +0 + 62 + 0 + 10 +15018.740312 + 20 +9330.442211 + 30 +0.0 + 11 +15018.740312 + 21 +9330.442211 + 31 +0.0 + 0 +LINE + 5 +E15 + 8 +0 + 62 + 0 + 10 +15039.560654 + 20 +9333.183261 + 30 +0.0 + 11 +15039.560654 + 21 +9333.183261 + 31 +0.0 + 0 +LINE + 5 +E16 + 8 +0 + 62 + 0 + 10 +15001.288977 + 20 +9224.578678 + 30 +0.0 + 11 +15001.288977 + 21 +9224.578678 + 31 +0.0 + 0 +LINE + 5 +E17 + 8 +0 + 62 + 0 + 10 +15055.620156 + 20 +9231.731513 + 30 +0.0 + 11 +15055.620156 + 21 +9231.731513 + 31 +0.0 + 0 +LINE + 5 +E18 + 8 +0 + 62 + 0 + 10 +15005.649429 + 20 +9121.586721 + 30 +0.0 + 11 +15005.649429 + 21 +9121.586721 + 31 +0.0 + 0 +LINE + 5 +E19 + 8 +0 + 62 + 0 + 10 +15038.168821 + 20 +9125.86798 + 30 +0.0 + 11 +15038.168821 + 21 +9125.86798 + 31 +0.0 + 0 +LINE + 5 +E1A + 8 +0 + 62 + 0 + 10 +15036.095565 + 20 +9648.801445 + 30 +0.0 + 11 +15036.095565 + 21 +9648.801445 + 31 +0.0 + 0 +LINE + 5 +E1B + 8 +0 + 62 + 0 + 10 +15052.963394 + 20 +9638.055453 + 30 +0.0 + 11 +15052.963394 + 21 +9638.055453 + 31 +0.0 + 0 +LINE + 5 +E1C + 8 +0 + 62 + 0 + 10 +15003.790431 + 20 +9748.965534 + 30 +0.0 + 11 +15003.790431 + 21 +9748.965534 + 31 +0.0 + 0 +LINE + 5 +E1D + 8 +0 + 62 + 0 + 10 +15020.65826 + 20 +9738.219542 + 30 +0.0 + 11 +15020.65826 + 21 +9738.219542 + 31 +0.0 + 0 +LINE + 5 +E1E + 8 +0 + 62 + 0 + 10 +15049.077309 + 20 +9799.698059 + 30 +0.0 + 11 +15049.077309 + 21 +9799.698059 + 31 +0.0 + 0 +LINE + 5 +E1F + 8 +0 + 62 + 0 + 10 +15016.772175 + 20 +9899.862149 + 30 +0.0 + 11 +15016.772175 + 21 +9899.862149 + 31 +0.0 + 0 +LINE + 5 +E20 + 8 +0 + 62 + 0 + 10 +15031.440702 + 20 +10049.684164 + 30 +0.0 + 11 +15031.440702 + 21 +10049.684164 + 31 +0.0 + 0 +LINE + 5 +E21 + 8 +0 + 62 + 0 + 10 +15048.308531 + 20 +10038.938172 + 30 +0.0 + 11 +15048.308531 + 21 +10038.938172 + 31 +0.0 + 0 +LINE + 5 +E22 + 8 +0 + 62 + 0 + 10 +15016.003396 + 20 +10139.102261 + 30 +0.0 + 11 +15016.003396 + 21 +10139.102261 + 31 +0.0 + 0 +LINE + 5 +E23 + 8 +0 + 62 + 0 + 10 +15044.422446 + 20 +10200.580779 + 30 +0.0 + 11 +15044.422446 + 21 +10200.580779 + 31 +0.0 + 0 +LINE + 5 +E24 + 8 +0 + 62 + 0 + 10 +15012.117312 + 20 +10300.744868 + 30 +0.0 + 11 +15012.117312 + 21 +10300.744868 + 31 +0.0 + 0 +LINE + 5 +E25 + 8 +0 + 62 + 0 + 10 +15059.090973 + 20 +10350.402794 + 30 +0.0 + 11 +15059.090973 + 21 +10350.402794 + 31 +0.0 + 0 +LINE + 5 +E26 + 8 +0 + 62 + 0 + 10 +15021.427038 + 20 +9498.979429 + 30 +0.0 + 11 +15021.427038 + 21 +9498.979429 + 31 +0.0 + 0 +LINE + 5 +E27 + 8 +0 + 62 + 0 + 10 +15053.732173 + 20 +9398.81534 + 30 +0.0 + 11 +15053.732173 + 21 +9398.81534 + 31 +0.0 + 0 +LINE + 5 +E28 + 8 +0 + 62 + 0 + 10 +15008.445294 + 20 +9348.082815 + 30 +0.0 + 11 +15008.445294 + 21 +9348.082815 + 31 +0.0 + 0 +LINE + 5 +E29 + 8 +0 + 62 + 0 + 10 +15025.313123 + 20 +9337.336823 + 30 +0.0 + 11 +15025.313123 + 21 +9337.336823 + 31 +0.0 + 0 +LINE + 5 +E2A + 8 +0 + 62 + 0 + 10 +15040.750429 + 20 +9247.918726 + 30 +0.0 + 11 +15040.750429 + 21 +9247.918726 + 31 +0.0 + 0 +LINE + 5 +E2B + 8 +0 + 62 + 0 + 10 +15057.618258 + 20 +9237.172733 + 30 +0.0 + 11 +15057.618258 + 21 +9237.172733 + 31 +0.0 + 0 +LINE + 5 +E2C + 8 +0 + 62 + 0 + 10 +15026.081902 + 20 +9098.09671 + 30 +0.0 + 11 +15026.081902 + 21 +9098.09671 + 31 +0.0 + 0 +LINE + 5 +E2D + 8 +0 + 62 + 0 + 10 +15007.209885 + 20 +9595.245326 + 30 +0.0 + 11 +15007.209885 + 21 +9595.245326 + 31 +0.0 + 0 +LINE + 5 +E2E + 8 +0 + 62 + 0 + 10 +15047.022861 + 20 +9558.763455 + 30 +0.0 + 11 +15047.022861 + 21 +9558.763455 + 31 +0.0 + 0 +LINE + 5 +E2F + 8 +0 + 62 + 0 + 10 +15054.395634 + 20 +9552.007553 + 30 +0.0 + 11 +15054.395634 + 21 +9552.007553 + 31 +0.0 + 0 +LINE + 5 +E30 + 8 +0 + 62 + 0 + 10 +15003.297446 + 20 +9744.121739 + 30 +0.0 + 11 +15003.297446 + 21 +9744.121739 + 31 +0.0 + 0 +LINE + 5 +E31 + 8 +0 + 62 + 0 + 10 +15010.670219 + 20 +9737.365837 + 30 +0.0 + 11 +15010.670219 + 21 +9737.365837 + 31 +0.0 + 0 +LINE + 5 +E32 + 8 +0 + 62 + 0 + 10 +15045.469709 + 20 +9705.47798 + 30 +0.0 + 11 +15045.469709 + 21 +9705.47798 + 31 +0.0 + 0 +LINE + 5 +E33 + 8 +0 + 62 + 0 + 10 +15001.744294 + 20 +9890.836264 + 30 +0.0 + 11 +15001.744294 + 21 +9890.836264 + 31 +0.0 + 0 +LINE + 5 +E34 + 8 +0 + 62 + 0 + 10 +15041.55727 + 20 +9854.354393 + 30 +0.0 + 11 +15041.55727 + 21 +9854.354393 + 31 +0.0 + 0 +LINE + 5 +E35 + 8 +0 + 62 + 0 + 10 +15048.930043 + 20 +9847.598491 + 30 +0.0 + 11 +15048.930043 + 21 +9847.598491 + 31 +0.0 + 0 +LINE + 5 +E36 + 8 +0 + 62 + 0 + 10 +15005.204628 + 20 +10032.956776 + 30 +0.0 + 11 +15005.204628 + 21 +10032.956776 + 31 +0.0 + 0 +LINE + 5 +E37 + 8 +0 + 62 + 0 + 10 +15040.004118 + 20 +10001.068918 + 30 +0.0 + 11 +15040.004118 + 21 +10001.068918 + 31 +0.0 + 0 +LINE + 5 +E38 + 8 +0 + 62 + 0 + 10 +15036.091679 + 20 +10149.945332 + 30 +0.0 + 11 +15036.091679 + 21 +10149.945332 + 31 +0.0 + 0 +LINE + 5 +E39 + 8 +0 + 62 + 0 + 10 +15043.464452 + 20 +10143.18943 + 30 +0.0 + 11 +15043.464452 + 21 +10143.18943 + 31 +0.0 + 0 +LINE + 5 +E3A + 8 +0 + 62 + 0 + 10 +15034.538527 + 20 +10296.659856 + 30 +0.0 + 11 +15034.538527 + 21 +10296.659856 + 31 +0.0 + 0 +LINE + 5 +E3B + 8 +0 + 62 + 0 + 10 +15008.763037 + 20 +9448.530801 + 30 +0.0 + 11 +15008.763037 + 21 +9448.530801 + 31 +0.0 + 0 +LINE + 5 +E3C + 8 +0 + 62 + 0 + 10 +15016.13581 + 20 +9441.774899 + 30 +0.0 + 11 +15016.13581 + 21 +9441.774899 + 31 +0.0 + 0 +LINE + 5 +E3D + 8 +0 + 62 + 0 + 10 +15050.9353 + 20 +9409.887041 + 30 +0.0 + 11 +15050.9353 + 21 +9409.887041 + 31 +0.0 + 0 +LINE + 5 +E3E + 8 +0 + 62 + 0 + 10 +15012.675476 + 20 +9299.654387 + 30 +0.0 + 11 +15012.675476 + 21 +9299.654387 + 31 +0.0 + 0 +LINE + 5 +E3F + 8 +0 + 62 + 0 + 10 +15052.488452 + 20 +9263.172516 + 30 +0.0 + 11 +15052.488452 + 21 +9263.172516 + 31 +0.0 + 0 +LINE + 5 +E40 + 8 +0 + 62 + 0 + 10 +15059.861226 + 20 +9256.416614 + 30 +0.0 + 11 +15059.861226 + 21 +9256.416614 + 31 +0.0 + 0 +LINE + 5 +E41 + 8 +0 + 62 + 0 + 10 +15014.228628 + 20 +9152.939863 + 30 +0.0 + 11 +15014.228628 + 21 +9152.939863 + 31 +0.0 + 0 +LINE + 5 +E42 + 8 +0 + 62 + 0 + 10 +15021.601401 + 20 +9146.18396 + 30 +0.0 + 11 +15021.601401 + 21 +9146.18396 + 31 +0.0 + 0 +LINE + 5 +E43 + 8 +0 + 62 + 0 + 10 +15056.400892 + 20 +9114.296103 + 30 +0.0 + 11 +15056.400892 + 21 +9114.296103 + 31 +0.0 + 0 +ENDBLK + 5 +E44 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X74 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X74 + 1 + + 0 +LINE + 5 +E46 + 8 +0 + 62 + 0 + 10 +15599.492173 + 20 +9757.731838 + 30 +0.0 + 11 +15599.492173 + 21 +9757.731838 + 31 +0.0 + 0 +LINE + 5 +E47 + 8 +0 + 62 + 0 + 10 +15596.972439 + 20 +9834.804789 + 30 +0.0 + 11 +15596.972439 + 21 +9834.804789 + 31 +0.0 + 0 +LINE + 5 +E48 + 8 +0 + 62 + 0 + 10 +15594.452705 + 20 +9911.877739 + 30 +0.0 + 11 +15594.452705 + 21 +9911.877739 + 31 +0.0 + 0 +LINE + 5 +E49 + 8 +0 + 62 + 0 + 10 +15591.93297 + 20 +9988.95069 + 30 +0.0 + 11 +15591.93297 + 21 +9988.95069 + 31 +0.0 + 0 +LINE + 5 +E4A + 8 +0 + 62 + 0 + 10 +15589.413236 + 20 +10066.023641 + 30 +0.0 + 11 +15589.413236 + 21 +10066.023641 + 31 +0.0 + 0 +LINE + 5 +E4B + 8 +0 + 62 + 0 + 10 +15586.893502 + 20 +10143.096592 + 30 +0.0 + 11 +15586.893502 + 21 +10143.096592 + 31 +0.0 + 0 +LINE + 5 +E4C + 8 +0 + 62 + 0 + 10 +15584.373767 + 20 +10220.169542 + 30 +0.0 + 11 +15584.373767 + 21 +10220.169542 + 31 +0.0 + 0 +LINE + 5 +E4D + 8 +0 + 62 + 0 + 10 +15581.854033 + 20 +10297.242493 + 30 +0.0 + 11 +15581.854033 + 21 +10297.242493 + 31 +0.0 + 0 +LINE + 5 +E4E + 8 +0 + 62 + 0 + 10 +15579.334299 + 20 +10374.315444 + 30 +0.0 + 11 +15579.334299 + 21 +10374.315444 + 31 +0.0 + 0 +LINE + 5 +E4F + 8 +0 + 62 + 0 + 10 +15602.011908 + 20 +9680.658887 + 30 +0.0 + 11 +15602.011908 + 21 +9680.658887 + 31 +0.0 + 0 +LINE + 5 +E50 + 8 +0 + 62 + 0 + 10 +15604.531642 + 20 +9603.585936 + 30 +0.0 + 11 +15604.531642 + 21 +9603.585936 + 31 +0.0 + 0 +LINE + 5 +E51 + 8 +0 + 62 + 0 + 10 +15607.051376 + 20 +9526.512986 + 30 +0.0 + 11 +15607.051376 + 21 +9526.512986 + 31 +0.0 + 0 +LINE + 5 +E52 + 8 +0 + 62 + 0 + 10 +15609.571111 + 20 +9449.440035 + 30 +0.0 + 11 +15609.571111 + 21 +9449.440035 + 31 +0.0 + 0 +LINE + 5 +E53 + 8 +0 + 62 + 0 + 10 +15612.090845 + 20 +9372.367084 + 30 +0.0 + 11 +15612.090845 + 21 +9372.367084 + 31 +0.0 + 0 +LINE + 5 +E54 + 8 +0 + 62 + 0 + 10 +15563.042612 + 20 +9255.72464 + 30 +0.0 + 11 +15563.042612 + 21 +9255.72464 + 31 +0.0 + 0 +LINE + 5 +E55 + 8 +0 + 62 + 0 + 10 +15614.610579 + 20 +9295.294133 + 30 +0.0 + 11 +15614.610579 + 21 +9295.294133 + 31 +0.0 + 0 +LINE + 5 +E56 + 8 +0 + 62 + 0 + 10 +15565.562346 + 20 +9178.65169 + 30 +0.0 + 11 +15565.562346 + 21 +9178.65169 + 31 +0.0 + 0 +LINE + 5 +E57 + 8 +0 + 62 + 0 + 10 +15617.130314 + 20 +9218.221183 + 30 +0.0 + 11 +15617.130314 + 21 +9218.221183 + 31 +0.0 + 0 +LINE + 5 +E58 + 8 +0 + 62 + 0 + 10 +15568.082081 + 20 +9101.578739 + 30 +0.0 + 11 +15568.082081 + 21 +9101.578739 + 31 +0.0 + 0 +LINE + 5 +E59 + 8 +0 + 62 + 0 + 10 +15619.650048 + 20 +9141.148232 + 30 +0.0 + 11 +15619.650048 + 21 +9141.148232 + 31 +0.0 + 0 +LINE + 5 +E5A + 8 +0 + 62 + 0 + 10 +15622.169782 + 20 +9064.075281 + 30 +0.0 + 11 +15622.169782 + 21 +9064.075281 + 31 +0.0 + 0 +LINE + 5 +E5B + 8 +0 + 62 + 0 + 10 +15574.946594 + 20 +9714.366223 + 30 +0.0 + 11 +15574.946594 + 21 +9714.366223 + 31 +0.0 + 0 +LINE + 5 +E5C + 8 +0 + 62 + 0 + 10 +15607.465986 + 20 +9718.647482 + 30 +0.0 + 11 +15607.465986 + 21 +9718.647482 + 31 +0.0 + 0 +LINE + 5 +E5D + 8 +0 + 62 + 0 + 10 +15570.586142 + 20 +9817.35818 + 30 +0.0 + 11 +15570.586142 + 21 +9817.35818 + 31 +0.0 + 0 +LINE + 5 +E5E + 8 +0 + 62 + 0 + 10 +15624.91732 + 20 +9824.511015 + 30 +0.0 + 11 +15624.91732 + 21 +9824.511015 + 31 +0.0 + 0 +LINE + 5 +E5F + 8 +0 + 62 + 0 + 10 +15588.037477 + 20 +9923.221713 + 30 +0.0 + 11 +15588.037477 + 21 +9923.221713 + 31 +0.0 + 0 +LINE + 5 +E60 + 8 +0 + 62 + 0 + 10 +15608.857819 + 20 +9925.962763 + 30 +0.0 + 11 +15608.857819 + 21 +9925.962763 + 31 +0.0 + 0 +LINE + 5 +E61 + 8 +0 + 62 + 0 + 10 +15571.977975 + 20 +10024.673462 + 30 +0.0 + 11 +15571.977975 + 21 +10024.673462 + 31 +0.0 + 0 +LINE + 5 +E62 + 8 +0 + 62 + 0 + 10 +15604.497367 + 20 +10028.954721 + 30 +0.0 + 11 +15604.497367 + 21 +10028.954721 + 31 +0.0 + 0 +LINE + 5 +E63 + 8 +0 + 62 + 0 + 10 +15567.617523 + 20 +10127.665419 + 30 +0.0 + 11 +15567.617523 + 21 +10127.665419 + 31 +0.0 + 0 +LINE + 5 +E64 + 8 +0 + 62 + 0 + 10 +15621.948701 + 20 +10134.818254 + 30 +0.0 + 11 +15621.948701 + 21 +10134.818254 + 31 +0.0 + 0 +LINE + 5 +E65 + 8 +0 + 62 + 0 + 10 +15585.068857 + 20 +10233.528952 + 30 +0.0 + 11 +15585.068857 + 21 +10233.528952 + 31 +0.0 + 0 +LINE + 5 +E66 + 8 +0 + 62 + 0 + 10 +15605.8892 + 20 +10236.270002 + 30 +0.0 + 11 +15605.8892 + 21 +10236.270002 + 31 +0.0 + 0 +LINE + 5 +E67 + 8 +0 + 62 + 0 + 10 +15569.009356 + 20 +10334.9807 + 30 +0.0 + 11 +15569.009356 + 21 +10334.9807 + 31 +0.0 + 0 +LINE + 5 +E68 + 8 +0 + 62 + 0 + 10 +15601.528747 + 20 +10339.26196 + 30 +0.0 + 11 +15601.528747 + 21 +10339.26196 + 31 +0.0 + 0 +LINE + 5 +E69 + 8 +0 + 62 + 0 + 10 +15591.006096 + 20 +9612.914475 + 30 +0.0 + 11 +15591.006096 + 21 +9612.914475 + 31 +0.0 + 0 +LINE + 5 +E6A + 8 +0 + 62 + 0 + 10 +15611.826438 + 20 +9615.655525 + 30 +0.0 + 11 +15611.826438 + 21 +9615.655525 + 31 +0.0 + 0 +LINE + 5 +E6B + 8 +0 + 62 + 0 + 10 +15573.554761 + 20 +9507.050941 + 30 +0.0 + 11 +15573.554761 + 21 +9507.050941 + 31 +0.0 + 0 +LINE + 5 +E6C + 8 +0 + 62 + 0 + 10 +15577.915214 + 20 +9404.058984 + 30 +0.0 + 11 +15577.915214 + 21 +9404.058984 + 31 +0.0 + 0 +LINE + 5 +E6D + 8 +0 + 62 + 0 + 10 +15610.434605 + 20 +9408.340243 + 30 +0.0 + 11 +15610.434605 + 21 +9408.340243 + 31 +0.0 + 0 +LINE + 5 +E6E + 8 +0 + 62 + 0 + 10 +15593.974715 + 20 +9302.607236 + 30 +0.0 + 11 +15593.974715 + 21 +9302.607236 + 31 +0.0 + 0 +LINE + 5 +E6F + 8 +0 + 62 + 0 + 10 +15614.795057 + 20 +9305.348286 + 30 +0.0 + 11 +15614.795057 + 21 +9305.348286 + 31 +0.0 + 0 +LINE + 5 +E70 + 8 +0 + 62 + 0 + 10 +15576.523381 + 20 +9196.743702 + 30 +0.0 + 11 +15576.523381 + 21 +9196.743702 + 31 +0.0 + 0 +LINE + 5 +E71 + 8 +0 + 62 + 0 + 10 +15580.883833 + 20 +9093.751745 + 30 +0.0 + 11 +15580.883833 + 21 +9093.751745 + 31 +0.0 + 0 +LINE + 5 +E72 + 8 +0 + 62 + 0 + 10 +15613.403224 + 20 +9098.033004 + 30 +0.0 + 11 +15613.403224 + 21 +9098.033004 + 31 +0.0 + 0 +LINE + 5 +E73 + 8 +0 + 62 + 0 + 10 +15579.645142 + 20 +9700.439419 + 30 +0.0 + 11 +15579.645142 + 21 +9700.439419 + 31 +0.0 + 0 +LINE + 5 +E74 + 8 +0 + 62 + 0 + 10 +15594.313669 + 20 +9850.261434 + 30 +0.0 + 11 +15594.313669 + 21 +9850.261434 + 31 +0.0 + 0 +LINE + 5 +E75 + 8 +0 + 62 + 0 + 10 +15611.181498 + 20 +9839.515442 + 30 +0.0 + 11 +15611.181498 + 21 +9839.515442 + 31 +0.0 + 0 +LINE + 5 +E76 + 8 +0 + 62 + 0 + 10 +15578.876363 + 20 +9939.679531 + 30 +0.0 + 11 +15578.876363 + 21 +9939.679531 + 31 +0.0 + 0 +LINE + 5 +E77 + 8 +0 + 62 + 0 + 10 +15607.295413 + 20 +10001.158049 + 30 +0.0 + 11 +15607.295413 + 21 +10001.158049 + 31 +0.0 + 0 +LINE + 5 +E78 + 8 +0 + 62 + 0 + 10 +15574.990278 + 20 +10101.322138 + 30 +0.0 + 11 +15574.990278 + 21 +10101.322138 + 31 +0.0 + 0 +LINE + 5 +E79 + 8 +0 + 62 + 0 + 10 +15621.96394 + 20 +10150.980064 + 30 +0.0 + 11 +15621.96394 + 21 +10150.980064 + 31 +0.0 + 0 +LINE + 5 +E7A + 8 +0 + 62 + 0 + 10 +15589.658805 + 20 +10251.144153 + 30 +0.0 + 11 +15589.658805 + 21 +10251.144153 + 31 +0.0 + 0 +LINE + 5 +E7B + 8 +0 + 62 + 0 + 10 +15606.526634 + 20 +10240.398161 + 30 +0.0 + 11 +15606.526634 + 21 +10240.398161 + 31 +0.0 + 0 +LINE + 5 +E7C + 8 +0 + 62 + 0 + 10 +15574.2215 + 20 +10340.562251 + 30 +0.0 + 11 +15574.2215 + 21 +10340.562251 + 31 +0.0 + 0 +LINE + 5 +E7D + 8 +0 + 62 + 0 + 10 +15611.950276 + 20 +9600.275329 + 30 +0.0 + 11 +15611.950276 + 21 +9600.275329 + 31 +0.0 + 0 +LINE + 5 +E7E + 8 +0 + 62 + 0 + 10 +15566.663398 + 20 +9549.542804 + 30 +0.0 + 11 +15566.663398 + 21 +9549.542804 + 31 +0.0 + 0 +LINE + 5 +E7F + 8 +0 + 62 + 0 + 10 +15583.531227 + 20 +9538.796812 + 30 +0.0 + 11 +15583.531227 + 21 +9538.796812 + 31 +0.0 + 0 +LINE + 5 +E80 + 8 +0 + 62 + 0 + 10 +15598.968532 + 20 +9449.378715 + 30 +0.0 + 11 +15598.968532 + 21 +9449.378715 + 31 +0.0 + 0 +LINE + 5 +E81 + 8 +0 + 62 + 0 + 10 +15615.836361 + 20 +9438.632723 + 30 +0.0 + 11 +15615.836361 + 21 +9438.632723 + 31 +0.0 + 0 +LINE + 5 +E82 + 8 +0 + 62 + 0 + 10 +15584.300005 + 20 +9299.556699 + 30 +0.0 + 11 +15584.300005 + 21 +9299.556699 + 31 +0.0 + 0 +LINE + 5 +E83 + 8 +0 + 62 + 0 + 10 +15616.60514 + 20 +9199.39261 + 30 +0.0 + 11 +15616.60514 + 21 +9199.39261 + 31 +0.0 + 0 +LINE + 5 +E84 + 8 +0 + 62 + 0 + 10 +15571.318261 + 20 +9148.660085 + 30 +0.0 + 11 +15571.318261 + 21 +9148.660085 + 31 +0.0 + 0 +LINE + 5 +E85 + 8 +0 + 62 + 0 + 10 +15588.18609 + 20 +9137.914093 + 30 +0.0 + 11 +15588.18609 + 21 +9137.914093 + 31 +0.0 + 0 +LINE + 5 +E86 + 8 +0 + 62 + 0 + 10 +15603.623395 + 20 +9048.495996 + 30 +0.0 + 11 +15603.623395 + 21 +9048.495996 + 31 +0.0 + 0 +LINE + 5 +E87 + 8 +0 + 62 + 0 + 10 +15620.491224 + 20 +9037.750003 + 30 +0.0 + 11 +15620.491224 + 21 +9037.750003 + 31 +0.0 + 0 +LINE + 5 +E88 + 8 +0 + 62 + 0 + 10 +15570.175381 + 20 +9660.547785 + 30 +0.0 + 11 +15570.175381 + 21 +9660.547785 + 31 +0.0 + 0 +LINE + 5 +E89 + 8 +0 + 62 + 0 + 10 +15609.988358 + 20 +9624.065914 + 30 +0.0 + 11 +15609.988358 + 21 +9624.065914 + 31 +0.0 + 0 +LINE + 5 +E8A + 8 +0 + 62 + 0 + 10 +15617.361131 + 20 +9617.310012 + 30 +0.0 + 11 +15617.361131 + 21 +9617.310012 + 31 +0.0 + 0 +LINE + 5 +E8B + 8 +0 + 62 + 0 + 10 +15566.262942 + 20 +9809.424199 + 30 +0.0 + 11 +15566.262942 + 21 +9809.424199 + 31 +0.0 + 0 +LINE + 5 +E8C + 8 +0 + 62 + 0 + 10 +15573.635716 + 20 +9802.668297 + 30 +0.0 + 11 +15573.635716 + 21 +9802.668297 + 31 +0.0 + 0 +LINE + 5 +E8D + 8 +0 + 62 + 0 + 10 +15608.435206 + 20 +9770.780439 + 30 +0.0 + 11 +15608.435206 + 21 +9770.780439 + 31 +0.0 + 0 +LINE + 5 +E8E + 8 +0 + 62 + 0 + 10 +15564.70979 + 20 +9956.138724 + 30 +0.0 + 11 +15564.70979 + 21 +9956.138724 + 31 +0.0 + 0 +LINE + 5 +E8F + 8 +0 + 62 + 0 + 10 +15604.522766 + 20 +9919.656852 + 30 +0.0 + 11 +15604.522766 + 21 +9919.656852 + 31 +0.0 + 0 +LINE + 5 +E90 + 8 +0 + 62 + 0 + 10 +15611.89554 + 20 +9912.90095 + 30 +0.0 + 11 +15611.89554 + 21 +9912.90095 + 31 +0.0 + 0 +LINE + 5 +E91 + 8 +0 + 62 + 0 + 10 +15568.170124 + 20 +10098.259235 + 30 +0.0 + 11 +15568.170124 + 21 +10098.259235 + 31 +0.0 + 0 +LINE + 5 +E92 + 8 +0 + 62 + 0 + 10 +15602.969615 + 20 +10066.371377 + 30 +0.0 + 11 +15602.969615 + 21 +10066.371377 + 31 +0.0 + 0 +LINE + 5 +E93 + 8 +0 + 62 + 0 + 10 +15599.057175 + 20 +10215.247791 + 30 +0.0 + 11 +15599.057175 + 21 +10215.247791 + 31 +0.0 + 0 +LINE + 5 +E94 + 8 +0 + 62 + 0 + 10 +15606.429949 + 20 +10208.491889 + 30 +0.0 + 11 +15606.429949 + 21 +10208.491889 + 31 +0.0 + 0 +LINE + 5 +E95 + 8 +0 + 62 + 0 + 10 +15562.704533 + 20 +10393.850174 + 30 +0.0 + 11 +15562.704533 + 21 +10393.850174 + 31 +0.0 + 0 +LINE + 5 +E96 + 8 +0 + 62 + 0 + 10 +15597.504023 + 20 +10361.962316 + 30 +0.0 + 11 +15597.504023 + 21 +10361.962316 + 31 +0.0 + 0 +LINE + 5 +E97 + 8 +0 + 62 + 0 + 10 +15571.728533 + 20 +9513.83326 + 30 +0.0 + 11 +15571.728533 + 21 +9513.83326 + 31 +0.0 + 0 +LINE + 5 +E98 + 8 +0 + 62 + 0 + 10 +15579.101307 + 20 +9507.077358 + 30 +0.0 + 11 +15579.101307 + 21 +9507.077358 + 31 +0.0 + 0 +LINE + 5 +E99 + 8 +0 + 62 + 0 + 10 +15613.900797 + 20 +9475.1895 + 30 +0.0 + 11 +15613.900797 + 21 +9475.1895 + 31 +0.0 + 0 +LINE + 5 +E9A + 8 +0 + 62 + 0 + 10 +15575.640973 + 20 +9364.956847 + 30 +0.0 + 11 +15575.640973 + 21 +9364.956847 + 31 +0.0 + 0 +LINE + 5 +E9B + 8 +0 + 62 + 0 + 10 +15615.453949 + 20 +9328.474976 + 30 +0.0 + 11 +15615.453949 + 21 +9328.474976 + 31 +0.0 + 0 +LINE + 5 +E9C + 8 +0 + 62 + 0 + 10 +15622.826722 + 20 +9321.719073 + 30 +0.0 + 11 +15622.826722 + 21 +9321.719073 + 31 +0.0 + 0 +LINE + 5 +E9D + 8 +0 + 62 + 0 + 10 +15577.194125 + 20 +9218.242322 + 30 +0.0 + 11 +15577.194125 + 21 +9218.242322 + 31 +0.0 + 0 +LINE + 5 +E9E + 8 +0 + 62 + 0 + 10 +15584.566898 + 20 +9211.48642 + 30 +0.0 + 11 +15584.566898 + 21 +9211.48642 + 31 +0.0 + 0 +LINE + 5 +E9F + 8 +0 + 62 + 0 + 10 +15619.366388 + 20 +9179.598562 + 30 +0.0 + 11 +15619.366388 + 21 +9179.598562 + 31 +0.0 + 0 +LINE + 5 +EA0 + 8 +0 + 62 + 0 + 10 +15581.106564 + 20 +9069.365908 + 30 +0.0 + 11 +15581.106564 + 21 +9069.365908 + 31 +0.0 + 0 +ENDBLK + 5 +EA1 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X77 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X77 + 1 + + 0 +LINE + 5 +EA3 + 8 +0 + 62 + 0 + 10 +15093.75 + 20 +11637.216313 + 30 +0.0 + 11 +15156.25 + 21 +11637.216313 + 31 +0.0 + 0 +LINE + 5 +EA4 + 8 +0 + 62 + 0 + 10 +15281.25 + 20 +11637.216313 + 30 +0.0 + 11 +15343.75 + 21 +11637.216313 + 31 +0.0 + 0 +LINE + 5 +EA5 + 8 +0 + 62 + 0 + 10 +15187.5 + 20 +11691.3429 + 30 +0.0 + 11 +15250.0 + 21 +11691.3429 + 31 +0.0 + 0 +LINE + 5 +EA6 + 8 +0 + 62 + 0 + 10 +15375.0 + 20 +11691.3429 + 30 +0.0 + 11 +15437.5 + 21 +11691.3429 + 31 +0.0 + 0 +LINE + 5 +EA7 + 8 +0 + 62 + 0 + 10 +15093.75 + 20 +11745.469488 + 30 +0.0 + 11 +15156.25 + 21 +11745.469488 + 31 +0.0 + 0 +LINE + 5 +EA8 + 8 +0 + 62 + 0 + 10 +15281.25 + 20 +11745.469488 + 30 +0.0 + 11 +15343.75 + 21 +11745.469488 + 31 +0.0 + 0 +LINE + 5 +EA9 + 8 +0 + 62 + 0 + 10 +15187.5 + 20 +11799.596075 + 30 +0.0 + 11 +15250.0 + 21 +11799.596075 + 31 +0.0 + 0 +LINE + 5 +EAA + 8 +0 + 62 + 0 + 10 +15375.0 + 20 +11799.596075 + 30 +0.0 + 11 +15437.5 + 21 +11799.596075 + 31 +0.0 + 0 +LINE + 5 +EAB + 8 +0 + 62 + 0 + 10 +15093.75 + 20 +11853.722663 + 30 +0.0 + 11 +15156.25 + 21 +11853.722663 + 31 +0.0 + 0 +LINE + 5 +EAC + 8 +0 + 62 + 0 + 10 +15281.25 + 20 +11853.722663 + 30 +0.0 + 11 +15343.75 + 21 +11853.722663 + 31 +0.0 + 0 +LINE + 5 +EAD + 8 +0 + 62 + 0 + 10 +15187.5 + 20 +11907.84925 + 30 +0.0 + 11 +15250.0 + 21 +11907.84925 + 31 +0.0 + 0 +LINE + 5 +EAE + 8 +0 + 62 + 0 + 10 +15375.0 + 20 +11907.84925 + 30 +0.0 + 11 +15437.5 + 21 +11907.84925 + 31 +0.0 + 0 +LINE + 5 +EAF + 8 +0 + 62 + 0 + 10 +15093.75 + 20 +11961.975838 + 30 +0.0 + 11 +15156.25 + 21 +11961.975838 + 31 +0.0 + 0 +LINE + 5 +EB0 + 8 +0 + 62 + 0 + 10 +15281.25 + 20 +11961.975838 + 30 +0.0 + 11 +15343.75 + 21 +11961.975838 + 31 +0.0 + 0 +LINE + 5 +EB1 + 8 +0 + 62 + 0 + 10 +15187.5 + 20 +12016.102425 + 30 +0.0 + 11 +15250.0 + 21 +12016.102425 + 31 +0.0 + 0 +LINE + 5 +EB2 + 8 +0 + 62 + 0 + 10 +15375.0 + 20 +12016.102425 + 30 +0.0 + 11 +15437.5 + 21 +12016.102425 + 31 +0.0 + 0 +LINE + 5 +EB3 + 8 +0 + 62 + 0 + 10 +15093.75 + 20 +12070.229013 + 30 +0.0 + 11 +15156.25 + 21 +12070.229013 + 31 +0.0 + 0 +LINE + 5 +EB4 + 8 +0 + 62 + 0 + 10 +15281.25 + 20 +12070.229013 + 30 +0.0 + 11 +15343.75 + 21 +12070.229013 + 31 +0.0 + 0 +LINE + 5 +EB5 + 8 +0 + 62 + 0 + 10 +15187.5 + 20 +12124.3556 + 30 +0.0 + 11 +15250.0 + 21 +12124.3556 + 31 +0.0 + 0 +LINE + 5 +EB6 + 8 +0 + 62 + 0 + 10 +15375.0 + 20 +12124.3556 + 30 +0.0 + 11 +15437.5 + 21 +12124.3556 + 31 +0.0 + 0 +LINE + 5 +EB7 + 8 +0 + 62 + 0 + 10 +15093.75 + 20 +12178.482188 + 30 +0.0 + 11 +15156.25 + 21 +12178.482188 + 31 +0.0 + 0 +LINE + 5 +EB8 + 8 +0 + 62 + 0 + 10 +15281.25 + 20 +12178.482188 + 30 +0.0 + 11 +15343.75 + 21 +12178.482188 + 31 +0.0 + 0 +LINE + 5 +EB9 + 8 +0 + 62 + 0 + 10 +15187.5 + 20 +12232.608775 + 30 +0.0 + 11 +15250.0 + 21 +12232.608775 + 31 +0.0 + 0 +LINE + 5 +EBA + 8 +0 + 62 + 0 + 10 +15375.0 + 20 +12232.608775 + 30 +0.0 + 11 +15437.5 + 21 +12232.608775 + 31 +0.0 + 0 +LINE + 5 +EBB + 8 +0 + 62 + 0 + 10 +15093.75 + 20 +12286.735363 + 30 +0.0 + 11 +15156.25 + 21 +12286.735363 + 31 +0.0 + 0 +LINE + 5 +EBC + 8 +0 + 62 + 0 + 10 +15281.25 + 20 +12286.735363 + 30 +0.0 + 11 +15343.75 + 21 +12286.735363 + 31 +0.0 + 0 +LINE + 5 +EBD + 8 +0 + 62 + 0 + 10 +15187.5 + 20 +12340.86195 + 30 +0.0 + 11 +15250.0 + 21 +12340.86195 + 31 +0.0 + 0 +LINE + 5 +EBE + 8 +0 + 62 + 0 + 10 +15375.0 + 20 +12340.86195 + 30 +0.0 + 11 +15437.5 + 21 +12340.86195 + 31 +0.0 + 0 +LINE + 5 +EBF + 8 +0 + 62 + 0 + 10 +15187.5 + 20 +11583.089725 + 30 +0.0 + 11 +15250.0 + 21 +11583.089725 + 31 +0.0 + 0 +LINE + 5 +EC0 + 8 +0 + 62 + 0 + 10 +15375.0 + 20 +11583.089725 + 30 +0.0 + 11 +15437.5 + 21 +11583.089725 + 31 +0.0 + 0 +LINE + 5 +EC1 + 8 +0 + 62 + 0 + 10 +15093.75 + 20 +11528.963138 + 30 +0.0 + 11 +15156.25 + 21 +11528.963138 + 31 +0.0 + 0 +LINE + 5 +EC2 + 8 +0 + 62 + 0 + 10 +15281.25 + 20 +11528.963138 + 30 +0.0 + 11 +15343.75 + 21 +11528.963138 + 31 +0.0 + 0 +LINE + 5 +EC3 + 8 +0 + 62 + 0 + 10 +15187.5 + 20 +11474.83655 + 30 +0.0 + 11 +15250.0 + 21 +11474.83655 + 31 +0.0 + 0 +LINE + 5 +EC4 + 8 +0 + 62 + 0 + 10 +15375.0 + 20 +11474.83655 + 30 +0.0 + 11 +15437.5 + 21 +11474.83655 + 31 +0.0 + 0 +LINE + 5 +EC5 + 8 +0 + 62 + 0 + 10 +15093.75 + 20 +11420.709963 + 30 +0.0 + 11 +15156.25 + 21 +11420.709963 + 31 +0.0 + 0 +LINE + 5 +EC6 + 8 +0 + 62 + 0 + 10 +15281.25 + 20 +11420.709963 + 30 +0.0 + 11 +15343.75 + 21 +11420.709963 + 31 +0.0 + 0 +LINE + 5 +EC7 + 8 +0 + 62 + 0 + 10 +15187.5 + 20 +11366.583375 + 30 +0.0 + 11 +15250.0 + 21 +11366.583375 + 31 +0.0 + 0 +LINE + 5 +EC8 + 8 +0 + 62 + 0 + 10 +15375.0 + 20 +11366.583375 + 30 +0.0 + 11 +15437.5 + 21 +11366.583375 + 31 +0.0 + 0 +LINE + 5 +EC9 + 8 +0 + 62 + 0 + 10 +15093.75 + 20 +11312.456788 + 30 +0.0 + 11 +15156.25 + 21 +11312.456788 + 31 +0.0 + 0 +LINE + 5 +ECA + 8 +0 + 62 + 0 + 10 +15281.25 + 20 +11312.456788 + 30 +0.0 + 11 +15343.75 + 21 +11312.456788 + 31 +0.0 + 0 +LINE + 5 +ECB + 8 +0 + 62 + 0 + 10 +15187.5 + 20 +11258.3302 + 30 +0.0 + 11 +15250.0 + 21 +11258.3302 + 31 +0.0 + 0 +LINE + 5 +ECC + 8 +0 + 62 + 0 + 10 +15375.0 + 20 +11258.3302 + 30 +0.0 + 11 +15437.5 + 21 +11258.3302 + 31 +0.0 + 0 +LINE + 5 +ECD + 8 +0 + 62 + 0 + 10 +15093.75 + 20 +11204.203613 + 30 +0.0 + 11 +15156.25 + 21 +11204.203613 + 31 +0.0 + 0 +LINE + 5 +ECE + 8 +0 + 62 + 0 + 10 +15281.25 + 20 +11204.203613 + 30 +0.0 + 11 +15343.75 + 21 +11204.203613 + 31 +0.0 + 0 +LINE + 5 +ECF + 8 +0 + 62 + 0 + 10 +15187.5 + 20 +11150.077025 + 30 +0.0 + 11 +15250.0 + 21 +11150.077025 + 31 +0.0 + 0 +LINE + 5 +ED0 + 8 +0 + 62 + 0 + 10 +15375.0 + 20 +11150.077025 + 30 +0.0 + 11 +15437.5 + 21 +11150.077025 + 31 +0.0 + 0 +LINE + 5 +ED1 + 8 +0 + 62 + 0 + 10 +15093.75 + 20 +11095.950438 + 30 +0.0 + 11 +15156.25 + 21 +11095.950438 + 31 +0.0 + 0 +LINE + 5 +ED2 + 8 +0 + 62 + 0 + 10 +15281.25 + 20 +11095.950438 + 30 +0.0 + 11 +15343.75 + 21 +11095.950438 + 31 +0.0 + 0 +LINE + 5 +ED3 + 8 +0 + 62 + 0 + 10 +15187.5 + 20 +11041.82385 + 30 +0.0 + 11 +15250.0 + 21 +11041.82385 + 31 +0.0 + 0 +LINE + 5 +ED4 + 8 +0 + 62 + 0 + 10 +15375.0 + 20 +11041.82385 + 30 +0.0 + 11 +15437.5 + 21 +11041.82385 + 31 +0.0 + 0 +LINE + 5 +ED5 + 8 +0 + 62 + 0 + 10 +15465.0 + 20 +11318.951861 + 30 +0.0 + 11 +15437.499928 + 21 +11366.583383 + 31 +0.0 + 0 +LINE + 5 +ED6 + 8 +0 + 62 + 0 + 10 +15374.999928 + 20 +11474.836559 + 30 +0.0 + 11 +15343.749928 + 21 +11528.963146 + 31 +0.0 + 0 +LINE + 5 +ED7 + 8 +0 + 62 + 0 + 10 +15281.249928 + 20 +11637.216322 + 30 +0.0 + 11 +15249.999928 + 21 +11691.342909 + 31 +0.0 + 0 +LINE + 5 +ED8 + 8 +0 + 62 + 0 + 10 +15187.499928 + 20 +11799.596085 + 30 +0.0 + 11 +15156.249928 + 21 +11853.722673 + 31 +0.0 + 0 +LINE + 5 +ED9 + 8 +0 + 62 + 0 + 10 +15093.749928 + 20 +11961.975848 + 30 +0.0 + 11 +15090.0 + 21 +11968.470914 + 31 +0.0 + 0 +LINE + 5 +EDA + 8 +0 + 62 + 0 + 10 +15465.0 + 20 +11210.698686 + 30 +0.0 + 11 +15437.499928 + 21 +11258.330208 + 31 +0.0 + 0 +LINE + 5 +EDB + 8 +0 + 62 + 0 + 10 +15374.999928 + 20 +11366.583383 + 30 +0.0 + 11 +15343.749928 + 21 +11420.709971 + 31 +0.0 + 0 +LINE + 5 +EDC + 8 +0 + 62 + 0 + 10 +15281.249928 + 20 +11528.963146 + 30 +0.0 + 11 +15249.999928 + 21 +11583.089734 + 31 +0.0 + 0 +LINE + 5 +EDD + 8 +0 + 62 + 0 + 10 +15187.499928 + 20 +11691.34291 + 30 +0.0 + 11 +15156.249928 + 21 +11745.469497 + 31 +0.0 + 0 +LINE + 5 +EDE + 8 +0 + 62 + 0 + 10 +15093.749928 + 20 +11853.722673 + 30 +0.0 + 11 +15090.0 + 21 +11860.217739 + 31 +0.0 + 0 +LINE + 5 +EDF + 8 +0 + 62 + 0 + 10 +15465.0 + 20 +11102.445511 + 30 +0.0 + 11 +15437.499928 + 21 +11150.077032 + 31 +0.0 + 0 +LINE + 5 +EE0 + 8 +0 + 62 + 0 + 10 +15374.999928 + 20 +11258.330208 + 30 +0.0 + 11 +15343.749928 + 21 +11312.456796 + 31 +0.0 + 0 +LINE + 5 +EE1 + 8 +0 + 62 + 0 + 10 +15281.249928 + 20 +11420.709971 + 30 +0.0 + 11 +15249.999928 + 21 +11474.836559 + 31 +0.0 + 0 +LINE + 5 +EE2 + 8 +0 + 62 + 0 + 10 +15187.499928 + 20 +11583.089734 + 30 +0.0 + 11 +15156.249928 + 21 +11637.216322 + 31 +0.0 + 0 +LINE + 5 +EE3 + 8 +0 + 62 + 0 + 10 +15093.749928 + 20 +11745.469497 + 30 +0.0 + 11 +15090.0 + 21 +11751.964564 + 31 +0.0 + 0 +LINE + 5 +EE4 + 8 +0 + 62 + 0 + 10 +15461.646944 + 20 +11000.0 + 30 +0.0 + 11 +15437.499929 + 21 +11041.823857 + 31 +0.0 + 0 +LINE + 5 +EE5 + 8 +0 + 62 + 0 + 10 +15374.999929 + 20 +11150.077032 + 30 +0.0 + 11 +15343.749929 + 21 +11204.20362 + 31 +0.0 + 0 +LINE + 5 +EE6 + 8 +0 + 62 + 0 + 10 +15281.249929 + 20 +11312.456796 + 30 +0.0 + 11 +15249.999929 + 21 +11366.583383 + 31 +0.0 + 0 +LINE + 5 +EE7 + 8 +0 + 62 + 0 + 10 +15187.499929 + 20 +11474.836559 + 30 +0.0 + 11 +15156.249929 + 21 +11528.963147 + 31 +0.0 + 0 +LINE + 5 +EE8 + 8 +0 + 62 + 0 + 10 +15093.749929 + 20 +11637.216322 + 30 +0.0 + 11 +15090.0 + 21 +11643.711389 + 31 +0.0 + 0 +LINE + 5 +EE9 + 8 +0 + 62 + 0 + 10 +15374.999929 + 20 +11041.823857 + 30 +0.0 + 11 +15343.749929 + 21 +11095.950445 + 31 +0.0 + 0 +LINE + 5 +EEA + 8 +0 + 62 + 0 + 10 +15281.249929 + 20 +11204.20362 + 30 +0.0 + 11 +15249.999929 + 21 +11258.330208 + 31 +0.0 + 0 +LINE + 5 +EEB + 8 +0 + 62 + 0 + 10 +15187.499929 + 20 +11366.583384 + 30 +0.0 + 11 +15156.249929 + 21 +11420.709971 + 31 +0.0 + 0 +LINE + 5 +EEC + 8 +0 + 62 + 0 + 10 +15093.749929 + 20 +11528.963147 + 30 +0.0 + 11 +15090.0 + 21 +11535.458214 + 31 +0.0 + 0 +LINE + 5 +EED + 8 +0 + 62 + 0 + 10 +15281.249929 + 20 +11095.950445 + 30 +0.0 + 11 +15249.999929 + 21 +11150.077033 + 31 +0.0 + 0 +LINE + 5 +EEE + 8 +0 + 62 + 0 + 10 +15187.499929 + 20 +11258.330208 + 30 +0.0 + 11 +15156.249929 + 21 +11312.456796 + 31 +0.0 + 0 +LINE + 5 +EEF + 8 +0 + 62 + 0 + 10 +15093.749929 + 20 +11420.709971 + 30 +0.0 + 11 +15090.0 + 21 +11427.205039 + 31 +0.0 + 0 +LINE + 5 +EF0 + 8 +0 + 62 + 0 + 10 +15274.146944 + 20 +11000.0 + 30 +0.0 + 11 +15249.999929 + 21 +11041.823857 + 31 +0.0 + 0 +LINE + 5 +EF1 + 8 +0 + 62 + 0 + 10 +15187.499929 + 20 +11150.077033 + 30 +0.0 + 11 +15156.249929 + 21 +11204.203621 + 31 +0.0 + 0 +LINE + 5 +EF2 + 8 +0 + 62 + 0 + 10 +15093.749929 + 20 +11312.456796 + 30 +0.0 + 11 +15090.0 + 21 +11318.951864 + 31 +0.0 + 0 +LINE + 5 +EF3 + 8 +0 + 62 + 0 + 10 +15187.499929 + 20 +11041.823857 + 30 +0.0 + 11 +15156.249929 + 21 +11095.950445 + 31 +0.0 + 0 +LINE + 5 +EF4 + 8 +0 + 62 + 0 + 10 +15093.749929 + 20 +11204.203621 + 30 +0.0 + 11 +15090.0 + 21 +11210.698689 + 31 +0.0 + 0 +LINE + 5 +EF5 + 8 +0 + 62 + 0 + 10 +15093.74993 + 20 +11095.950445 + 30 +0.0 + 11 +15090.0 + 21 +11102.445514 + 31 +0.0 + 0 +LINE + 5 +EF6 + 8 +0 + 62 + 0 + 10 +15465.0 + 20 +11427.205036 + 30 +0.0 + 11 +15437.499928 + 21 +11474.836558 + 31 +0.0 + 0 +LINE + 5 +EF7 + 8 +0 + 62 + 0 + 10 +15374.999928 + 20 +11583.089734 + 30 +0.0 + 11 +15343.749928 + 21 +11637.216322 + 31 +0.0 + 0 +LINE + 5 +EF8 + 8 +0 + 62 + 0 + 10 +15281.249928 + 20 +11745.469497 + 30 +0.0 + 11 +15249.999928 + 21 +11799.596085 + 31 +0.0 + 0 +LINE + 5 +EF9 + 8 +0 + 62 + 0 + 10 +15187.499928 + 20 +11907.84926 + 30 +0.0 + 11 +15156.249928 + 21 +11961.975848 + 31 +0.0 + 0 +LINE + 5 +EFA + 8 +0 + 62 + 0 + 10 +15093.749928 + 20 +12070.229023 + 30 +0.0 + 11 +15090.0 + 21 +12076.724089 + 31 +0.0 + 0 +LINE + 5 +EFB + 8 +0 + 62 + 0 + 10 +15465.0 + 20 +11535.458211 + 30 +0.0 + 11 +15437.499927 + 21 +11583.089734 + 31 +0.0 + 0 +LINE + 5 +EFC + 8 +0 + 62 + 0 + 10 +15374.999927 + 20 +11691.342909 + 30 +0.0 + 11 +15343.749927 + 21 +11745.469497 + 31 +0.0 + 0 +LINE + 5 +EFD + 8 +0 + 62 + 0 + 10 +15281.249927 + 20 +11853.722672 + 30 +0.0 + 11 +15249.999927 + 21 +11907.84926 + 31 +0.0 + 0 +LINE + 5 +EFE + 8 +0 + 62 + 0 + 10 +15187.499927 + 20 +12016.102436 + 30 +0.0 + 11 +15156.249927 + 21 +12070.229023 + 31 +0.0 + 0 +LINE + 5 +EFF + 8 +0 + 62 + 0 + 10 +15093.749927 + 20 +12178.482199 + 30 +0.0 + 11 +15090.0 + 21 +12184.977264 + 31 +0.0 + 0 +LINE + 5 +F00 + 8 +0 + 62 + 0 + 10 +15465.0 + 20 +11643.711386 + 30 +0.0 + 11 +15437.499927 + 21 +11691.342909 + 31 +0.0 + 0 +LINE + 5 +F01 + 8 +0 + 62 + 0 + 10 +15374.999927 + 20 +11799.596085 + 30 +0.0 + 11 +15343.749927 + 21 +11853.722672 + 31 +0.0 + 0 +LINE + 5 +F02 + 8 +0 + 62 + 0 + 10 +15281.249927 + 20 +11961.975848 + 30 +0.0 + 11 +15249.999927 + 21 +12016.102436 + 31 +0.0 + 0 +LINE + 5 +F03 + 8 +0 + 62 + 0 + 10 +15187.499927 + 20 +12124.355611 + 30 +0.0 + 11 +15156.249927 + 21 +12178.482199 + 31 +0.0 + 0 +LINE + 5 +F04 + 8 +0 + 62 + 0 + 10 +15093.749927 + 20 +12286.735374 + 30 +0.0 + 11 +15090.0 + 21 +12293.230439 + 31 +0.0 + 0 +LINE + 5 +F05 + 8 +0 + 62 + 0 + 10 +15465.0 + 20 +11751.964561 + 30 +0.0 + 11 +15437.499927 + 21 +11799.596084 + 31 +0.0 + 0 +LINE + 5 +F06 + 8 +0 + 62 + 0 + 10 +15374.999927 + 20 +11907.84926 + 30 +0.0 + 11 +15343.749927 + 21 +11961.975848 + 31 +0.0 + 0 +LINE + 5 +F07 + 8 +0 + 62 + 0 + 10 +15281.249927 + 20 +12070.229023 + 30 +0.0 + 11 +15249.999927 + 21 +12124.355611 + 31 +0.0 + 0 +LINE + 5 +F08 + 8 +0 + 62 + 0 + 10 +15187.499927 + 20 +12232.608786 + 30 +0.0 + 11 +15156.249927 + 21 +12286.735374 + 31 +0.0 + 0 +LINE + 5 +F09 + 8 +0 + 62 + 0 + 10 +15465.0 + 20 +11860.217736 + 30 +0.0 + 11 +15437.499927 + 21 +11907.84926 + 31 +0.0 + 0 +LINE + 5 +F0A + 8 +0 + 62 + 0 + 10 +15374.999927 + 20 +12016.102435 + 30 +0.0 + 11 +15343.749927 + 21 +12070.229023 + 31 +0.0 + 0 +LINE + 5 +F0B + 8 +0 + 62 + 0 + 10 +15281.249927 + 20 +12178.482198 + 30 +0.0 + 11 +15249.999927 + 21 +12232.608786 + 31 +0.0 + 0 +LINE + 5 +F0C + 8 +0 + 62 + 0 + 10 +15187.499927 + 20 +12340.861962 + 30 +0.0 + 11 +15176.450575 + 21 +12360.0 + 31 +0.0 + 0 +LINE + 5 +F0D + 8 +0 + 62 + 0 + 10 +15465.0 + 20 +11968.470911 + 30 +0.0 + 11 +15437.499927 + 21 +12016.102435 + 31 +0.0 + 0 +LINE + 5 +F0E + 8 +0 + 62 + 0 + 10 +15374.999927 + 20 +12124.355611 + 30 +0.0 + 11 +15343.749927 + 21 +12178.482198 + 31 +0.0 + 0 +LINE + 5 +F0F + 8 +0 + 62 + 0 + 10 +15281.249927 + 20 +12286.735374 + 30 +0.0 + 11 +15249.999927 + 21 +12340.861962 + 31 +0.0 + 0 +LINE + 5 +F10 + 8 +0 + 62 + 0 + 10 +15465.0 + 20 +12076.724086 + 30 +0.0 + 11 +15437.499926 + 21 +12124.355611 + 31 +0.0 + 0 +LINE + 5 +F11 + 8 +0 + 62 + 0 + 10 +15374.999926 + 20 +12232.608786 + 30 +0.0 + 11 +15343.749926 + 21 +12286.735374 + 31 +0.0 + 0 +LINE + 5 +F12 + 8 +0 + 62 + 0 + 10 +15465.0 + 20 +12184.977261 + 30 +0.0 + 11 +15437.499926 + 21 +12232.608786 + 31 +0.0 + 0 +LINE + 5 +F13 + 8 +0 + 62 + 0 + 10 +15374.999926 + 20 +12340.861961 + 30 +0.0 + 11 +15363.950574 + 21 +12360.0 + 31 +0.0 + 0 +LINE + 5 +F14 + 8 +0 + 62 + 0 + 10 +15465.0 + 20 +12293.230436 + 30 +0.0 + 11 +15437.499926 + 21 +12340.861961 + 31 +0.0 + 0 +LINE + 5 +F15 + 8 +0 + 62 + 0 + 10 +15090.0 + 20 +11414.214886 + 30 +0.0 + 11 +15093.749972 + 21 +11420.710028 + 31 +0.0 + 0 +LINE + 5 +F16 + 8 +0 + 62 + 0 + 10 +15156.249972 + 20 +11528.963204 + 30 +0.0 + 11 +15187.499972 + 21 +11583.089792 + 31 +0.0 + 0 +LINE + 5 +F17 + 8 +0 + 62 + 0 + 10 +15249.999972 + 20 +11691.342967 + 30 +0.0 + 11 +15281.249972 + 21 +11745.469555 + 31 +0.0 + 0 +LINE + 5 +F18 + 8 +0 + 62 + 0 + 10 +15343.749972 + 20 +11853.72273 + 30 +0.0 + 11 +15374.999972 + 21 +11907.849318 + 31 +0.0 + 0 +LINE + 5 +F19 + 8 +0 + 62 + 0 + 10 +15437.499972 + 20 +12016.102494 + 30 +0.0 + 11 +15465.0 + 21 +12063.733939 + 31 +0.0 + 0 +LINE + 5 +F1A + 8 +0 + 62 + 0 + 10 +15090.0 + 20 +11522.468061 + 30 +0.0 + 11 +15093.749972 + 21 +11528.963204 + 31 +0.0 + 0 +LINE + 5 +F1B + 8 +0 + 62 + 0 + 10 +15156.249972 + 20 +11637.216379 + 30 +0.0 + 11 +15187.499972 + 21 +11691.342967 + 31 +0.0 + 0 +LINE + 5 +F1C + 8 +0 + 62 + 0 + 10 +15249.999972 + 20 +11799.596143 + 30 +0.0 + 11 +15281.249972 + 21 +11853.72273 + 31 +0.0 + 0 +LINE + 5 +F1D + 8 +0 + 62 + 0 + 10 +15343.749972 + 20 +11961.975906 + 30 +0.0 + 11 +15374.999972 + 21 +12016.102493 + 31 +0.0 + 0 +LINE + 5 +F1E + 8 +0 + 62 + 0 + 10 +15437.499972 + 20 +12124.355669 + 30 +0.0 + 11 +15465.0 + 21 +12171.987114 + 31 +0.0 + 0 +LINE + 5 +F1F + 8 +0 + 62 + 0 + 10 +15090.0 + 20 +11630.721236 + 30 +0.0 + 11 +15093.749973 + 21 +11637.216379 + 31 +0.0 + 0 +LINE + 5 +F20 + 8 +0 + 62 + 0 + 10 +15156.249973 + 20 +11745.469555 + 30 +0.0 + 11 +15187.499973 + 21 +11799.596142 + 31 +0.0 + 0 +LINE + 5 +F21 + 8 +0 + 62 + 0 + 10 +15249.999973 + 20 +11907.849318 + 30 +0.0 + 11 +15281.249973 + 21 +11961.975906 + 31 +0.0 + 0 +LINE + 5 +F22 + 8 +0 + 62 + 0 + 10 +15343.749973 + 20 +12070.229081 + 30 +0.0 + 11 +15374.999973 + 21 +12124.355669 + 31 +0.0 + 0 +LINE + 5 +F23 + 8 +0 + 62 + 0 + 10 +15437.499973 + 20 +12232.608844 + 30 +0.0 + 11 +15465.0 + 21 +12280.240289 + 31 +0.0 + 0 +LINE + 5 +F24 + 8 +0 + 62 + 0 + 10 +15090.0 + 20 +11738.974411 + 30 +0.0 + 11 +15093.749973 + 21 +11745.469555 + 31 +0.0 + 0 +LINE + 5 +F25 + 8 +0 + 62 + 0 + 10 +15156.249973 + 20 +11853.72273 + 30 +0.0 + 11 +15187.499973 + 21 +11907.849318 + 31 +0.0 + 0 +LINE + 5 +F26 + 8 +0 + 62 + 0 + 10 +15249.999973 + 20 +12016.102493 + 30 +0.0 + 11 +15281.249973 + 21 +12070.229081 + 31 +0.0 + 0 +LINE + 5 +F27 + 8 +0 + 62 + 0 + 10 +15343.749973 + 20 +12178.482256 + 30 +0.0 + 11 +15374.999973 + 21 +12232.608844 + 31 +0.0 + 0 +LINE + 5 +F28 + 8 +0 + 62 + 0 + 10 +15437.499973 + 20 +12340.86202 + 30 +0.0 + 11 +15448.549291 + 21 +12360.0 + 31 +0.0 + 0 +LINE + 5 +F29 + 8 +0 + 62 + 0 + 10 +15090.0 + 20 +11847.227586 + 30 +0.0 + 11 +15093.749973 + 21 +11853.72273 + 31 +0.0 + 0 +LINE + 5 +F2A + 8 +0 + 62 + 0 + 10 +15156.249973 + 20 +11961.975905 + 30 +0.0 + 11 +15187.499973 + 21 +12016.102493 + 31 +0.0 + 0 +LINE + 5 +F2B + 8 +0 + 62 + 0 + 10 +15249.999973 + 20 +12124.355669 + 30 +0.0 + 11 +15281.249973 + 21 +12178.482256 + 31 +0.0 + 0 +LINE + 5 +F2C + 8 +0 + 62 + 0 + 10 +15343.749973 + 20 +12286.735432 + 30 +0.0 + 11 +15374.999973 + 21 +12340.86202 + 31 +0.0 + 0 +LINE + 5 +F2D + 8 +0 + 62 + 0 + 10 +15090.0 + 20 +11955.480761 + 30 +0.0 + 11 +15093.749973 + 21 +11961.975905 + 31 +0.0 + 0 +LINE + 5 +F2E + 8 +0 + 62 + 0 + 10 +15156.249973 + 20 +12070.229081 + 30 +0.0 + 11 +15187.499973 + 21 +12124.355668 + 31 +0.0 + 0 +LINE + 5 +F2F + 8 +0 + 62 + 0 + 10 +15249.999973 + 20 +12232.608844 + 30 +0.0 + 11 +15281.249973 + 21 +12286.735432 + 31 +0.0 + 0 +LINE + 5 +F30 + 8 +0 + 62 + 0 + 10 +15090.0 + 20 +12063.733936 + 30 +0.0 + 11 +15093.749973 + 21 +12070.229081 + 31 +0.0 + 0 +LINE + 5 +F31 + 8 +0 + 62 + 0 + 10 +15156.249973 + 20 +12178.482256 + 30 +0.0 + 11 +15187.499973 + 21 +12232.608844 + 31 +0.0 + 0 +LINE + 5 +F32 + 8 +0 + 62 + 0 + 10 +15249.999973 + 20 +12340.862019 + 30 +0.0 + 11 +15261.049292 + 21 +12360.0 + 31 +0.0 + 0 +LINE + 5 +F33 + 8 +0 + 62 + 0 + 10 +15090.0 + 20 +12171.987111 + 30 +0.0 + 11 +15093.749974 + 21 +12178.482256 + 31 +0.0 + 0 +LINE + 5 +F34 + 8 +0 + 62 + 0 + 10 +15156.249974 + 20 +12286.735431 + 30 +0.0 + 11 +15187.499974 + 21 +12340.862019 + 31 +0.0 + 0 +LINE + 5 +F35 + 8 +0 + 62 + 0 + 10 +15090.0 + 20 +12280.240286 + 30 +0.0 + 11 +15093.749974 + 21 +12286.735431 + 31 +0.0 + 0 +LINE + 5 +F36 + 8 +0 + 62 + 0 + 10 +15090.0 + 20 +11305.961711 + 30 +0.0 + 11 +15093.749972 + 21 +11312.456853 + 31 +0.0 + 0 +LINE + 5 +F37 + 8 +0 + 62 + 0 + 10 +15156.249972 + 20 +11420.710029 + 30 +0.0 + 11 +15187.499972 + 21 +11474.836616 + 31 +0.0 + 0 +LINE + 5 +F38 + 8 +0 + 62 + 0 + 10 +15249.999972 + 20 +11583.089792 + 30 +0.0 + 11 +15281.249972 + 21 +11637.21638 + 31 +0.0 + 0 +LINE + 5 +F39 + 8 +0 + 62 + 0 + 10 +15343.749972 + 20 +11745.469555 + 30 +0.0 + 11 +15374.999972 + 21 +11799.596143 + 31 +0.0 + 0 +LINE + 5 +F3A + 8 +0 + 62 + 0 + 10 +15437.499972 + 20 +11907.849318 + 30 +0.0 + 11 +15465.0 + 21 +11955.480764 + 31 +0.0 + 0 +LINE + 5 +F3B + 8 +0 + 62 + 0 + 10 +15090.0 + 20 +11197.708536 + 30 +0.0 + 11 +15093.749972 + 21 +11204.203678 + 31 +0.0 + 0 +LINE + 5 +F3C + 8 +0 + 62 + 0 + 10 +15156.249972 + 20 +11312.456853 + 30 +0.0 + 11 +15187.499972 + 21 +11366.583441 + 31 +0.0 + 0 +LINE + 5 +F3D + 8 +0 + 62 + 0 + 10 +15249.999972 + 20 +11474.836616 + 30 +0.0 + 11 +15281.249972 + 21 +11528.963204 + 31 +0.0 + 0 +LINE + 5 +F3E + 8 +0 + 62 + 0 + 10 +15343.749972 + 20 +11637.21638 + 30 +0.0 + 11 +15374.999972 + 21 +11691.342967 + 31 +0.0 + 0 +LINE + 5 +F3F + 8 +0 + 62 + 0 + 10 +15437.499972 + 20 +11799.596143 + 30 +0.0 + 11 +15465.0 + 21 +11847.227589 + 31 +0.0 + 0 +LINE + 5 +F40 + 8 +0 + 62 + 0 + 10 +15090.0 + 20 +11089.455361 + 30 +0.0 + 11 +15093.749972 + 21 +11095.950502 + 31 +0.0 + 0 +LINE + 5 +F41 + 8 +0 + 62 + 0 + 10 +15156.249972 + 20 +11204.203678 + 30 +0.0 + 11 +15187.499972 + 21 +11258.330266 + 31 +0.0 + 0 +LINE + 5 +F42 + 8 +0 + 62 + 0 + 10 +15249.999972 + 20 +11366.583441 + 30 +0.0 + 11 +15281.249972 + 21 +11420.710029 + 31 +0.0 + 0 +LINE + 5 +F43 + 8 +0 + 62 + 0 + 10 +15343.749972 + 20 +11528.963204 + 30 +0.0 + 11 +15374.999972 + 21 +11583.089792 + 31 +0.0 + 0 +LINE + 5 +F44 + 8 +0 + 62 + 0 + 10 +15437.499972 + 20 +11691.342968 + 30 +0.0 + 11 +15465.0 + 21 +11738.974414 + 31 +0.0 + 0 +LINE + 5 +F45 + 8 +0 + 62 + 0 + 10 +15156.249971 + 20 +11095.950503 + 30 +0.0 + 11 +15187.499971 + 21 +11150.07709 + 31 +0.0 + 0 +LINE + 5 +F46 + 8 +0 + 62 + 0 + 10 +15249.999971 + 20 +11258.330266 + 30 +0.0 + 11 +15281.249971 + 21 +11312.456853 + 31 +0.0 + 0 +LINE + 5 +F47 + 8 +0 + 62 + 0 + 10 +15343.749971 + 20 +11420.710029 + 30 +0.0 + 11 +15374.999971 + 21 +11474.836617 + 31 +0.0 + 0 +LINE + 5 +F48 + 8 +0 + 62 + 0 + 10 +15437.499971 + 20 +11583.089792 + 30 +0.0 + 11 +15465.0 + 21 +11630.721239 + 31 +0.0 + 0 +LINE + 5 +F49 + 8 +0 + 62 + 0 + 10 +15163.352923 + 20 +11000.0 + 30 +0.0 + 11 +15187.499971 + 21 +11041.823915 + 31 +0.0 + 0 +LINE + 5 +F4A + 8 +0 + 62 + 0 + 10 +15249.999971 + 20 +11150.07709 + 30 +0.0 + 11 +15281.249971 + 21 +11204.203678 + 31 +0.0 + 0 +LINE + 5 +F4B + 8 +0 + 62 + 0 + 10 +15343.749971 + 20 +11312.456854 + 30 +0.0 + 11 +15374.999971 + 21 +11366.583441 + 31 +0.0 + 0 +LINE + 5 +F4C + 8 +0 + 62 + 0 + 10 +15437.499971 + 20 +11474.836617 + 30 +0.0 + 11 +15465.0 + 21 +11522.468064 + 31 +0.0 + 0 +LINE + 5 +F4D + 8 +0 + 62 + 0 + 10 +15249.999971 + 20 +11041.823915 + 30 +0.0 + 11 +15281.249971 + 21 +11095.950503 + 31 +0.0 + 0 +LINE + 5 +F4E + 8 +0 + 62 + 0 + 10 +15343.749971 + 20 +11204.203678 + 30 +0.0 + 11 +15374.999971 + 21 +11258.330266 + 31 +0.0 + 0 +LINE + 5 +F4F + 8 +0 + 62 + 0 + 10 +15437.499971 + 20 +11366.583441 + 30 +0.0 + 11 +15465.0 + 21 +11414.214889 + 31 +0.0 + 0 +LINE + 5 +F50 + 8 +0 + 62 + 0 + 10 +15343.749971 + 20 +11095.950503 + 30 +0.0 + 11 +15374.999971 + 21 +11150.077091 + 31 +0.0 + 0 +LINE + 5 +F51 + 8 +0 + 62 + 0 + 10 +15437.499971 + 20 +11258.330266 + 30 +0.0 + 11 +15465.0 + 21 +11305.961714 + 31 +0.0 + 0 +LINE + 5 +F52 + 8 +0 + 62 + 0 + 10 +15350.852922 + 20 +11000.0 + 30 +0.0 + 11 +15374.999971 + 21 +11041.823915 + 31 +0.0 + 0 +LINE + 5 +F53 + 8 +0 + 62 + 0 + 10 +15437.499971 + 20 +11150.077091 + 30 +0.0 + 11 +15465.0 + 21 +11197.708539 + 31 +0.0 + 0 +LINE + 5 +F54 + 8 +0 + 62 + 0 + 10 +15437.49997 + 20 +11041.823915 + 30 +0.0 + 11 +15465.0 + 21 +11089.455364 + 31 +0.0 + 0 +ENDBLK + 5 +F55 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X78 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X78 + 1 + + 0 +LINE + 5 +F57 + 8 +0 + 62 + 0 + 10 +15093.75 + 20 +9688.659163 + 30 +0.0 + 11 +15156.25 + 21 +9688.659163 + 31 +0.0 + 0 +LINE + 5 +F58 + 8 +0 + 62 + 0 + 10 +15281.25 + 20 +9688.659163 + 30 +0.0 + 11 +15343.75 + 21 +9688.659163 + 31 +0.0 + 0 +LINE + 5 +F59 + 8 +0 + 62 + 0 + 10 +15187.5 + 20 +9742.78575 + 30 +0.0 + 11 +15250.0 + 21 +9742.78575 + 31 +0.0 + 0 +LINE + 5 +F5A + 8 +0 + 62 + 0 + 10 +15375.0 + 20 +9742.78575 + 30 +0.0 + 11 +15437.5 + 21 +9742.78575 + 31 +0.0 + 0 +LINE + 5 +F5B + 8 +0 + 62 + 0 + 10 +15093.75 + 20 +9796.912338 + 30 +0.0 + 11 +15156.25 + 21 +9796.912338 + 31 +0.0 + 0 +LINE + 5 +F5C + 8 +0 + 62 + 0 + 10 +15281.25 + 20 +9796.912338 + 30 +0.0 + 11 +15343.75 + 21 +9796.912338 + 31 +0.0 + 0 +LINE + 5 +F5D + 8 +0 + 62 + 0 + 10 +15187.5 + 20 +9851.038925 + 30 +0.0 + 11 +15250.0 + 21 +9851.038925 + 31 +0.0 + 0 +LINE + 5 +F5E + 8 +0 + 62 + 0 + 10 +15375.0 + 20 +9851.038925 + 30 +0.0 + 11 +15437.5 + 21 +9851.038925 + 31 +0.0 + 0 +LINE + 5 +F5F + 8 +0 + 62 + 0 + 10 +15093.75 + 20 +9905.165513 + 30 +0.0 + 11 +15156.25 + 21 +9905.165513 + 31 +0.0 + 0 +LINE + 5 +F60 + 8 +0 + 62 + 0 + 10 +15281.25 + 20 +9905.165513 + 30 +0.0 + 11 +15343.75 + 21 +9905.165513 + 31 +0.0 + 0 +LINE + 5 +F61 + 8 +0 + 62 + 0 + 10 +15187.5 + 20 +9959.2921 + 30 +0.0 + 11 +15250.0 + 21 +9959.2921 + 31 +0.0 + 0 +LINE + 5 +F62 + 8 +0 + 62 + 0 + 10 +15375.0 + 20 +9959.2921 + 30 +0.0 + 11 +15437.5 + 21 +9959.2921 + 31 +0.0 + 0 +LINE + 5 +F63 + 8 +0 + 62 + 0 + 10 +15093.75 + 20 +10013.418688 + 30 +0.0 + 11 +15156.25 + 21 +10013.418688 + 31 +0.0 + 0 +LINE + 5 +F64 + 8 +0 + 62 + 0 + 10 +15281.25 + 20 +10013.418688 + 30 +0.0 + 11 +15343.75 + 21 +10013.418688 + 31 +0.0 + 0 +LINE + 5 +F65 + 8 +0 + 62 + 0 + 10 +15187.5 + 20 +10067.545275 + 30 +0.0 + 11 +15250.0 + 21 +10067.545275 + 31 +0.0 + 0 +LINE + 5 +F66 + 8 +0 + 62 + 0 + 10 +15375.0 + 20 +10067.545275 + 30 +0.0 + 11 +15437.5 + 21 +10067.545275 + 31 +0.0 + 0 +LINE + 5 +F67 + 8 +0 + 62 + 0 + 10 +15093.75 + 20 +10121.671863 + 30 +0.0 + 11 +15156.25 + 21 +10121.671863 + 31 +0.0 + 0 +LINE + 5 +F68 + 8 +0 + 62 + 0 + 10 +15281.25 + 20 +10121.671863 + 30 +0.0 + 11 +15343.75 + 21 +10121.671863 + 31 +0.0 + 0 +LINE + 5 +F69 + 8 +0 + 62 + 0 + 10 +15187.5 + 20 +10175.79845 + 30 +0.0 + 11 +15250.0 + 21 +10175.79845 + 31 +0.0 + 0 +LINE + 5 +F6A + 8 +0 + 62 + 0 + 10 +15375.0 + 20 +10175.79845 + 30 +0.0 + 11 +15437.5 + 21 +10175.79845 + 31 +0.0 + 0 +LINE + 5 +F6B + 8 +0 + 62 + 0 + 10 +15093.75 + 20 +10229.925038 + 30 +0.0 + 11 +15156.25 + 21 +10229.925038 + 31 +0.0 + 0 +LINE + 5 +F6C + 8 +0 + 62 + 0 + 10 +15281.25 + 20 +10229.925038 + 30 +0.0 + 11 +15343.75 + 21 +10229.925038 + 31 +0.0 + 0 +LINE + 5 +F6D + 8 +0 + 62 + 0 + 10 +15187.5 + 20 +10284.051625 + 30 +0.0 + 11 +15250.0 + 21 +10284.051625 + 31 +0.0 + 0 +LINE + 5 +F6E + 8 +0 + 62 + 0 + 10 +15375.0 + 20 +10284.051625 + 30 +0.0 + 11 +15437.5 + 21 +10284.051625 + 31 +0.0 + 0 +LINE + 5 +F6F + 8 +0 + 62 + 0 + 10 +15093.75 + 20 +10338.178213 + 30 +0.0 + 11 +15156.25 + 21 +10338.178213 + 31 +0.0 + 0 +LINE + 5 +F70 + 8 +0 + 62 + 0 + 10 +15281.25 + 20 +10338.178213 + 30 +0.0 + 11 +15343.75 + 21 +10338.178213 + 31 +0.0 + 0 +LINE + 5 +F71 + 8 +0 + 62 + 0 + 10 +15187.5 + 20 +10392.3048 + 30 +0.0 + 11 +15250.0 + 21 +10392.3048 + 31 +0.0 + 0 +LINE + 5 +F72 + 8 +0 + 62 + 0 + 10 +15375.0 + 20 +10392.3048 + 30 +0.0 + 11 +15437.5 + 21 +10392.3048 + 31 +0.0 + 0 +LINE + 5 +F73 + 8 +0 + 62 + 0 + 10 +15187.5 + 20 +9634.532575 + 30 +0.0 + 11 +15250.0 + 21 +9634.532575 + 31 +0.0 + 0 +LINE + 5 +F74 + 8 +0 + 62 + 0 + 10 +15375.0 + 20 +9634.532575 + 30 +0.0 + 11 +15437.5 + 21 +9634.532575 + 31 +0.0 + 0 +LINE + 5 +F75 + 8 +0 + 62 + 0 + 10 +15093.75 + 20 +9580.405988 + 30 +0.0 + 11 +15156.25 + 21 +9580.405988 + 31 +0.0 + 0 +LINE + 5 +F76 + 8 +0 + 62 + 0 + 10 +15281.25 + 20 +9580.405988 + 30 +0.0 + 11 +15343.75 + 21 +9580.405988 + 31 +0.0 + 0 +LINE + 5 +F77 + 8 +0 + 62 + 0 + 10 +15187.5 + 20 +9526.2794 + 30 +0.0 + 11 +15250.0 + 21 +9526.2794 + 31 +0.0 + 0 +LINE + 5 +F78 + 8 +0 + 62 + 0 + 10 +15375.0 + 20 +9526.2794 + 30 +0.0 + 11 +15437.5 + 21 +9526.2794 + 31 +0.0 + 0 +LINE + 5 +F79 + 8 +0 + 62 + 0 + 10 +15093.75 + 20 +9472.152813 + 30 +0.0 + 11 +15156.25 + 21 +9472.152813 + 31 +0.0 + 0 +LINE + 5 +F7A + 8 +0 + 62 + 0 + 10 +15281.25 + 20 +9472.152813 + 30 +0.0 + 11 +15343.75 + 21 +9472.152813 + 31 +0.0 + 0 +LINE + 5 +F7B + 8 +0 + 62 + 0 + 10 +15187.5 + 20 +9418.026225 + 30 +0.0 + 11 +15250.0 + 21 +9418.026225 + 31 +0.0 + 0 +LINE + 5 +F7C + 8 +0 + 62 + 0 + 10 +15375.0 + 20 +9418.026225 + 30 +0.0 + 11 +15437.5 + 21 +9418.026225 + 31 +0.0 + 0 +LINE + 5 +F7D + 8 +0 + 62 + 0 + 10 +15093.75 + 20 +9363.899638 + 30 +0.0 + 11 +15156.25 + 21 +9363.899638 + 31 +0.0 + 0 +LINE + 5 +F7E + 8 +0 + 62 + 0 + 10 +15281.25 + 20 +9363.899638 + 30 +0.0 + 11 +15343.75 + 21 +9363.899638 + 31 +0.0 + 0 +LINE + 5 +F7F + 8 +0 + 62 + 0 + 10 +15187.5 + 20 +9309.77305 + 30 +0.0 + 11 +15250.0 + 21 +9309.77305 + 31 +0.0 + 0 +LINE + 5 +F80 + 8 +0 + 62 + 0 + 10 +15375.0 + 20 +9309.77305 + 30 +0.0 + 11 +15437.5 + 21 +9309.77305 + 31 +0.0 + 0 +LINE + 5 +F81 + 8 +0 + 62 + 0 + 10 +15093.75 + 20 +9255.646463 + 30 +0.0 + 11 +15156.25 + 21 +9255.646463 + 31 +0.0 + 0 +LINE + 5 +F82 + 8 +0 + 62 + 0 + 10 +15281.25 + 20 +9255.646463 + 30 +0.0 + 11 +15343.75 + 21 +9255.646463 + 31 +0.0 + 0 +LINE + 5 +F83 + 8 +0 + 62 + 0 + 10 +15187.5 + 20 +9201.519875 + 30 +0.0 + 11 +15250.0 + 21 +9201.519875 + 31 +0.0 + 0 +LINE + 5 +F84 + 8 +0 + 62 + 0 + 10 +15375.0 + 20 +9201.519875 + 30 +0.0 + 11 +15437.5 + 21 +9201.519875 + 31 +0.0 + 0 +LINE + 5 +F85 + 8 +0 + 62 + 0 + 10 +15093.75 + 20 +9147.393288 + 30 +0.0 + 11 +15156.25 + 21 +9147.393288 + 31 +0.0 + 0 +LINE + 5 +F86 + 8 +0 + 62 + 0 + 10 +15281.25 + 20 +9147.393288 + 30 +0.0 + 11 +15343.75 + 21 +9147.393288 + 31 +0.0 + 0 +LINE + 5 +F87 + 8 +0 + 62 + 0 + 10 +15187.5 + 20 +9093.2667 + 30 +0.0 + 11 +15250.0 + 21 +9093.2667 + 31 +0.0 + 0 +LINE + 5 +F88 + 8 +0 + 62 + 0 + 10 +15375.0 + 20 +9093.2667 + 30 +0.0 + 11 +15437.5 + 21 +9093.2667 + 31 +0.0 + 0 +LINE + 5 +F89 + 8 +0 + 62 + 0 + 10 +15460.0 + 20 +9379.054965 + 30 +0.0 + 11 +15437.499932 + 21 +9418.026227 + 31 +0.0 + 0 +LINE + 5 +F8A + 8 +0 + 62 + 0 + 10 +15374.999932 + 20 +9526.279402 + 30 +0.0 + 11 +15343.749932 + 21 +9580.40599 + 31 +0.0 + 0 +LINE + 5 +F8B + 8 +0 + 62 + 0 + 10 +15281.249932 + 20 +9688.659165 + 30 +0.0 + 11 +15249.999932 + 21 +9742.785753 + 31 +0.0 + 0 +LINE + 5 +F8C + 8 +0 + 62 + 0 + 10 +15187.499932 + 20 +9851.038929 + 30 +0.0 + 11 +15156.249932 + 21 +9905.165516 + 31 +0.0 + 0 +LINE + 5 +F8D + 8 +0 + 62 + 0 + 10 +15093.749932 + 20 +10013.418692 + 30 +0.0 + 11 +15092.225606 + 21 +10016.058902 + 31 +0.0 + 0 +LINE + 5 +F8E + 8 +0 + 62 + 0 + 10 +15460.0 + 20 +9270.80179 + 30 +0.0 + 11 +15437.499932 + 21 +9309.773051 + 31 +0.0 + 0 +LINE + 5 +F8F + 8 +0 + 62 + 0 + 10 +15374.999932 + 20 +9418.026227 + 30 +0.0 + 11 +15343.749932 + 21 +9472.152815 + 31 +0.0 + 0 +LINE + 5 +F90 + 8 +0 + 62 + 0 + 10 +15281.249932 + 20 +9580.40599 + 30 +0.0 + 11 +15249.999932 + 21 +9634.532578 + 31 +0.0 + 0 +LINE + 5 +F91 + 8 +0 + 62 + 0 + 10 +15187.499932 + 20 +9742.785753 + 30 +0.0 + 11 +15156.249932 + 21 +9796.912341 + 31 +0.0 + 0 +LINE + 5 +F92 + 8 +0 + 62 + 0 + 10 +15093.749932 + 20 +9905.165516 + 30 +0.0 + 11 +15092.225606 + 21 +9907.805727 + 31 +0.0 + 0 +LINE + 5 +F93 + 8 +0 + 62 + 0 + 10 +15460.0 + 20 +9162.548615 + 30 +0.0 + 11 +15437.499932 + 21 +9201.519876 + 31 +0.0 + 0 +LINE + 5 +F94 + 8 +0 + 62 + 0 + 10 +15374.999932 + 20 +9309.773051 + 30 +0.0 + 11 +15343.749932 + 21 +9363.899639 + 31 +0.0 + 0 +LINE + 5 +F95 + 8 +0 + 62 + 0 + 10 +15281.249932 + 20 +9472.152815 + 30 +0.0 + 11 +15249.999932 + 21 +9526.279402 + 31 +0.0 + 0 +LINE + 5 +F96 + 8 +0 + 62 + 0 + 10 +15187.499932 + 20 +9634.532578 + 30 +0.0 + 11 +15156.249932 + 21 +9688.659166 + 31 +0.0 + 0 +LINE + 5 +F97 + 8 +0 + 62 + 0 + 10 +15093.749932 + 20 +9796.912341 + 30 +0.0 + 11 +15092.225606 + 21 +9799.552552 + 31 +0.0 + 0 +LINE + 5 +F98 + 8 +0 + 62 + 0 + 10 +15460.0 + 20 +9054.29544 + 30 +0.0 + 11 +15437.499932 + 21 +9093.266701 + 31 +0.0 + 0 +LINE + 5 +F99 + 8 +0 + 62 + 0 + 10 +15374.999932 + 20 +9201.519876 + 30 +0.0 + 11 +15343.749932 + 21 +9255.646464 + 31 +0.0 + 0 +LINE + 5 +F9A + 8 +0 + 62 + 0 + 10 +15281.249932 + 20 +9363.899639 + 30 +0.0 + 11 +15249.999932 + 21 +9418.026227 + 31 +0.0 + 0 +LINE + 5 +F9B + 8 +0 + 62 + 0 + 10 +15187.499932 + 20 +9526.279402 + 30 +0.0 + 11 +15156.249932 + 21 +9580.40599 + 31 +0.0 + 0 +LINE + 5 +F9C + 8 +0 + 62 + 0 + 10 +15093.749932 + 20 +9688.659166 + 30 +0.0 + 11 +15092.225606 + 21 +9691.299377 + 31 +0.0 + 0 +LINE + 5 +F9D + 8 +0 + 62 + 0 + 10 +15374.999932 + 20 +9093.266701 + 30 +0.0 + 11 +15343.749932 + 21 +9147.393288 + 31 +0.0 + 0 +LINE + 5 +F9E + 8 +0 + 62 + 0 + 10 +15281.249932 + 20 +9255.646464 + 30 +0.0 + 11 +15249.999932 + 21 +9309.773052 + 31 +0.0 + 0 +LINE + 5 +F9F + 8 +0 + 62 + 0 + 10 +15187.499932 + 20 +9418.026227 + 30 +0.0 + 11 +15156.249932 + 21 +9472.152815 + 31 +0.0 + 0 +LINE + 5 +FA0 + 8 +0 + 62 + 0 + 10 +15093.749932 + 20 +9580.40599 + 30 +0.0 + 11 +15092.225606 + 21 +9583.046202 + 31 +0.0 + 0 +LINE + 5 +FA1 + 8 +0 + 62 + 0 + 10 +15281.249933 + 20 +9147.393289 + 30 +0.0 + 11 +15249.999933 + 21 +9201.519876 + 31 +0.0 + 0 +LINE + 5 +FA2 + 8 +0 + 62 + 0 + 10 +15187.499933 + 20 +9309.773052 + 30 +0.0 + 11 +15156.249933 + 21 +9363.89964 + 31 +0.0 + 0 +LINE + 5 +FA3 + 8 +0 + 62 + 0 + 10 +15093.749933 + 20 +9472.152815 + 30 +0.0 + 11 +15092.225606 + 21 +9474.793027 + 31 +0.0 + 0 +LINE + 5 +FA4 + 8 +0 + 62 + 0 + 10 +15274.979974 + 20 +9050.0 + 30 +0.0 + 11 +15249.999933 + 21 +9093.266701 + 31 +0.0 + 0 +LINE + 5 +FA5 + 8 +0 + 62 + 0 + 10 +15187.499933 + 20 +9201.519876 + 30 +0.0 + 11 +15156.249933 + 21 +9255.646464 + 31 +0.0 + 0 +LINE + 5 +FA6 + 8 +0 + 62 + 0 + 10 +15093.749933 + 20 +9363.89964 + 30 +0.0 + 11 +15092.225606 + 21 +9366.539852 + 31 +0.0 + 0 +LINE + 5 +FA7 + 8 +0 + 62 + 0 + 10 +15187.499933 + 20 +9093.266701 + 30 +0.0 + 11 +15156.249933 + 21 +9147.393289 + 31 +0.0 + 0 +LINE + 5 +FA8 + 8 +0 + 62 + 0 + 10 +15093.749933 + 20 +9255.646464 + 30 +0.0 + 11 +15092.225606 + 21 +9258.286677 + 31 +0.0 + 0 +LINE + 5 +FA9 + 8 +0 + 62 + 0 + 10 +15093.749933 + 20 +9147.393289 + 30 +0.0 + 11 +15092.225606 + 21 +9150.033502 + 31 +0.0 + 0 +LINE + 5 +FAA + 8 +0 + 62 + 0 + 10 +15460.0 + 20 +9487.30814 + 30 +0.0 + 11 +15437.499931 + 21 +9526.279402 + 31 +0.0 + 0 +LINE + 5 +FAB + 8 +0 + 62 + 0 + 10 +15374.999931 + 20 +9634.532577 + 30 +0.0 + 11 +15343.749931 + 21 +9688.659165 + 31 +0.0 + 0 +LINE + 5 +FAC + 8 +0 + 62 + 0 + 10 +15281.249931 + 20 +9796.912341 + 30 +0.0 + 11 +15249.999931 + 21 +9851.038928 + 31 +0.0 + 0 +LINE + 5 +FAD + 8 +0 + 62 + 0 + 10 +15187.499931 + 20 +9959.292104 + 30 +0.0 + 11 +15156.249931 + 21 +10013.418692 + 31 +0.0 + 0 +LINE + 5 +FAE + 8 +0 + 62 + 0 + 10 +15093.749931 + 20 +10121.671867 + 30 +0.0 + 11 +15092.225606 + 21 +10124.312077 + 31 +0.0 + 0 +LINE + 5 +FAF + 8 +0 + 62 + 0 + 10 +15460.0 + 20 +9595.561315 + 30 +0.0 + 11 +15437.499931 + 21 +9634.532577 + 31 +0.0 + 0 +LINE + 5 +FB0 + 8 +0 + 62 + 0 + 10 +15374.999931 + 20 +9742.785753 + 30 +0.0 + 11 +15343.749931 + 21 +9796.912341 + 31 +0.0 + 0 +LINE + 5 +FB1 + 8 +0 + 62 + 0 + 10 +15281.249931 + 20 +9905.165516 + 30 +0.0 + 11 +15249.999931 + 21 +9959.292104 + 31 +0.0 + 0 +LINE + 5 +FB2 + 8 +0 + 62 + 0 + 10 +15187.499931 + 20 +10067.545279 + 30 +0.0 + 11 +15156.249931 + 21 +10121.671867 + 31 +0.0 + 0 +LINE + 5 +FB3 + 8 +0 + 62 + 0 + 10 +15093.749931 + 20 +10229.925042 + 30 +0.0 + 11 +15092.225606 + 21 +10232.565252 + 31 +0.0 + 0 +LINE + 5 +FB4 + 8 +0 + 62 + 0 + 10 +15460.0 + 20 +9703.81449 + 30 +0.0 + 11 +15437.499931 + 21 +9742.785753 + 31 +0.0 + 0 +LINE + 5 +FB5 + 8 +0 + 62 + 0 + 10 +15374.999931 + 20 +9851.038928 + 30 +0.0 + 11 +15343.749931 + 21 +9905.165516 + 31 +0.0 + 0 +LINE + 5 +FB6 + 8 +0 + 62 + 0 + 10 +15281.249931 + 20 +10013.418691 + 30 +0.0 + 11 +15249.999931 + 21 +10067.545279 + 31 +0.0 + 0 +LINE + 5 +FB7 + 8 +0 + 62 + 0 + 10 +15187.499931 + 20 +10175.798455 + 30 +0.0 + 11 +15156.249931 + 21 +10229.925042 + 31 +0.0 + 0 +LINE + 5 +FB8 + 8 +0 + 62 + 0 + 10 +15093.749931 + 20 +10338.178218 + 30 +0.0 + 11 +15092.225606 + 21 +10340.818427 + 31 +0.0 + 0 +LINE + 5 +FB9 + 8 +0 + 62 + 0 + 10 +15460.0 + 20 +9812.067665 + 30 +0.0 + 11 +15437.499931 + 21 +9851.038928 + 31 +0.0 + 0 +LINE + 5 +FBA + 8 +0 + 62 + 0 + 10 +15374.999931 + 20 +9959.292104 + 30 +0.0 + 11 +15343.749931 + 21 +10013.418691 + 31 +0.0 + 0 +LINE + 5 +FBB + 8 +0 + 62 + 0 + 10 +15281.249931 + 20 +10121.671867 + 30 +0.0 + 11 +15249.999931 + 21 +10175.798454 + 31 +0.0 + 0 +LINE + 5 +FBC + 8 +0 + 62 + 0 + 10 +15187.499931 + 20 +10284.05163 + 30 +0.0 + 11 +15156.249931 + 21 +10338.178218 + 31 +0.0 + 0 +LINE + 5 +FBD + 8 +0 + 62 + 0 + 10 +15460.0 + 20 +9920.32084 + 30 +0.0 + 11 +15437.499931 + 21 +9959.292103 + 31 +0.0 + 0 +LINE + 5 +FBE + 8 +0 + 62 + 0 + 10 +15374.999931 + 20 +10067.545279 + 30 +0.0 + 11 +15343.749931 + 21 +10121.671867 + 31 +0.0 + 0 +LINE + 5 +FBF + 8 +0 + 62 + 0 + 10 +15281.249931 + 20 +10229.925042 + 30 +0.0 + 11 +15249.999931 + 21 +10284.05163 + 31 +0.0 + 0 +LINE + 5 +FC0 + 8 +0 + 62 + 0 + 10 +15187.499931 + 20 +10392.304805 + 30 +0.0 + 11 +15182.174755 + 21 +10401.528279 + 31 +0.0 + 0 +LINE + 5 +FC1 + 8 +0 + 62 + 0 + 10 +15460.0 + 20 +10028.574015 + 30 +0.0 + 11 +15437.49993 + 21 +10067.545279 + 31 +0.0 + 0 +LINE + 5 +FC2 + 8 +0 + 62 + 0 + 10 +15374.99993 + 20 +10175.798454 + 30 +0.0 + 11 +15343.74993 + 21 +10229.925042 + 31 +0.0 + 0 +LINE + 5 +FC3 + 8 +0 + 62 + 0 + 10 +15281.24993 + 20 +10338.178217 + 30 +0.0 + 11 +15249.99993 + 21 +10392.304805 + 31 +0.0 + 0 +LINE + 5 +FC4 + 8 +0 + 62 + 0 + 10 +15460.0 + 20 +10136.82719 + 30 +0.0 + 11 +15437.49993 + 21 +10175.798454 + 31 +0.0 + 0 +LINE + 5 +FC5 + 8 +0 + 62 + 0 + 10 +15374.99993 + 20 +10284.05163 + 30 +0.0 + 11 +15343.74993 + 21 +10338.178217 + 31 +0.0 + 0 +LINE + 5 +FC6 + 8 +0 + 62 + 0 + 10 +15460.0 + 20 +10245.080365 + 30 +0.0 + 11 +15437.49993 + 21 +10284.051629 + 31 +0.0 + 0 +LINE + 5 +FC7 + 8 +0 + 62 + 0 + 10 +15374.99993 + 20 +10392.304805 + 30 +0.0 + 11 +15370.272138 + 21 +10400.493581 + 31 +0.0 + 0 +LINE + 5 +FC8 + 8 +0 + 62 + 0 + 10 +15460.0 + 20 +10353.33354 + 30 +0.0 + 11 +15437.49993 + 21 +10392.304805 + 31 +0.0 + 0 +LINE + 5 +FC9 + 8 +0 + 62 + 0 + 10 +15092.225606 + 20 +9469.512598 + 30 +0.0 + 11 +15093.749968 + 21 +9472.152872 + 31 +0.0 + 0 +LINE + 5 +FCA + 8 +0 + 62 + 0 + 10 +15156.249968 + 20 +9580.406048 + 30 +0.0 + 11 +15187.499968 + 21 +9634.532635 + 31 +0.0 + 0 +LINE + 5 +FCB + 8 +0 + 62 + 0 + 10 +15249.999968 + 20 +9742.785811 + 30 +0.0 + 11 +15281.249968 + 21 +9796.912399 + 31 +0.0 + 0 +LINE + 5 +FCC + 8 +0 + 62 + 0 + 10 +15343.749968 + 20 +9905.165574 + 30 +0.0 + 11 +15374.999968 + 21 +9959.292162 + 31 +0.0 + 0 +LINE + 5 +FCD + 8 +0 + 62 + 0 + 10 +15437.499968 + 20 +10067.545337 + 30 +0.0 + 11 +15460.0 + 21 +10106.516535 + 31 +0.0 + 0 +LINE + 5 +FCE + 8 +0 + 62 + 0 + 10 +15092.225606 + 20 +9577.765773 + 30 +0.0 + 11 +15093.749969 + 21 +9580.406047 + 31 +0.0 + 0 +LINE + 5 +FCF + 8 +0 + 62 + 0 + 10 +15156.249969 + 20 +9688.659223 + 30 +0.0 + 11 +15187.499969 + 21 +9742.785811 + 31 +0.0 + 0 +LINE + 5 +FD0 + 8 +0 + 62 + 0 + 10 +15249.999969 + 20 +9851.038986 + 30 +0.0 + 11 +15281.249969 + 21 +9905.165574 + 31 +0.0 + 0 +LINE + 5 +FD1 + 8 +0 + 62 + 0 + 10 +15343.749969 + 20 +10013.418749 + 30 +0.0 + 11 +15374.999969 + 21 +10067.545337 + 31 +0.0 + 0 +LINE + 5 +FD2 + 8 +0 + 62 + 0 + 10 +15437.499969 + 20 +10175.798513 + 30 +0.0 + 11 +15460.0 + 21 +10214.76971 + 31 +0.0 + 0 +LINE + 5 +FD3 + 8 +0 + 62 + 0 + 10 +15092.225606 + 20 +9686.018948 + 30 +0.0 + 11 +15093.749969 + 21 +9688.659223 + 31 +0.0 + 0 +LINE + 5 +FD4 + 8 +0 + 62 + 0 + 10 +15156.249969 + 20 +9796.912398 + 30 +0.0 + 11 +15187.499969 + 21 +9851.038986 + 31 +0.0 + 0 +LINE + 5 +FD5 + 8 +0 + 62 + 0 + 10 +15249.999969 + 20 +9959.292161 + 30 +0.0 + 11 +15281.249969 + 21 +10013.418749 + 31 +0.0 + 0 +LINE + 5 +FD6 + 8 +0 + 62 + 0 + 10 +15343.749969 + 20 +10121.671925 + 30 +0.0 + 11 +15374.999969 + 21 +10175.798512 + 31 +0.0 + 0 +LINE + 5 +FD7 + 8 +0 + 62 + 0 + 10 +15437.499969 + 20 +10284.051688 + 30 +0.0 + 11 +15460.0 + 21 +10323.022885 + 31 +0.0 + 0 +LINE + 5 +FD8 + 8 +0 + 62 + 0 + 10 +15092.225606 + 20 +9794.272123 + 30 +0.0 + 11 +15093.749969 + 21 +9796.912398 + 31 +0.0 + 0 +LINE + 5 +FD9 + 8 +0 + 62 + 0 + 10 +15156.249969 + 20 +9905.165574 + 30 +0.0 + 11 +15187.499969 + 21 +9959.292161 + 31 +0.0 + 0 +LINE + 5 +FDA + 8 +0 + 62 + 0 + 10 +15249.999969 + 20 +10067.545337 + 30 +0.0 + 11 +15281.249969 + 21 +10121.671925 + 31 +0.0 + 0 +LINE + 5 +FDB + 8 +0 + 62 + 0 + 10 +15343.749969 + 20 +10229.9251 + 30 +0.0 + 11 +15374.999969 + 21 +10284.051688 + 31 +0.0 + 0 +LINE + 5 +FDC + 8 +0 + 62 + 0 + 10 +15437.499969 + 20 +10392.304863 + 30 +0.0 + 11 +15441.999925 + 21 +10400.099016 + 31 +0.0 + 0 +LINE + 5 +FDD + 8 +0 + 62 + 0 + 10 +15092.225606 + 20 +9902.525298 + 30 +0.0 + 11 +15093.749969 + 21 +9905.165574 + 31 +0.0 + 0 +LINE + 5 +FDE + 8 +0 + 62 + 0 + 10 +15156.249969 + 20 +10013.418749 + 30 +0.0 + 11 +15187.499969 + 21 +10067.545337 + 31 +0.0 + 0 +LINE + 5 +FDF + 8 +0 + 62 + 0 + 10 +15249.999969 + 20 +10175.798512 + 30 +0.0 + 11 +15281.249969 + 21 +10229.9251 + 31 +0.0 + 0 +LINE + 5 +FE0 + 8 +0 + 62 + 0 + 10 +15343.749969 + 20 +10338.178275 + 30 +0.0 + 11 +15374.999969 + 21 +10392.304863 + 31 +0.0 + 0 +LINE + 5 +FE1 + 8 +0 + 62 + 0 + 10 +15092.225606 + 20 +10010.778473 + 30 +0.0 + 11 +15093.749969 + 21 +10013.418749 + 31 +0.0 + 0 +LINE + 5 +FE2 + 8 +0 + 62 + 0 + 10 +15156.249969 + 20 +10121.671924 + 30 +0.0 + 11 +15187.499969 + 21 +10175.798512 + 31 +0.0 + 0 +LINE + 5 +FE3 + 8 +0 + 62 + 0 + 10 +15249.999969 + 20 +10284.051688 + 30 +0.0 + 11 +15281.249969 + 21 +10338.178275 + 31 +0.0 + 0 +LINE + 5 +FE4 + 8 +0 + 62 + 0 + 10 +15092.225606 + 20 +10119.031648 + 30 +0.0 + 11 +15093.74997 + 21 +10121.671924 + 31 +0.0 + 0 +LINE + 5 +FE5 + 8 +0 + 62 + 0 + 10 +15156.24997 + 20 +10229.9251 + 30 +0.0 + 11 +15187.49997 + 21 +10284.051687 + 31 +0.0 + 0 +LINE + 5 +FE6 + 8 +0 + 62 + 0 + 10 +15249.99997 + 20 +10392.304863 + 30 +0.0 + 11 +15255.093527 + 21 +10401.127163 + 31 +0.0 + 0 +LINE + 5 +FE7 + 8 +0 + 62 + 0 + 10 +15092.225606 + 20 +10227.284823 + 30 +0.0 + 11 +15093.74997 + 21 +10229.9251 + 31 +0.0 + 0 +LINE + 5 +FE8 + 8 +0 + 62 + 0 + 10 +15156.24997 + 20 +10338.178275 + 30 +0.0 + 11 +15187.49997 + 21 +10392.304863 + 31 +0.0 + 0 +LINE + 5 +FE9 + 8 +0 + 62 + 0 + 10 +15092.225606 + 20 +10335.537998 + 30 +0.0 + 11 +15093.74997 + 21 +10338.178275 + 31 +0.0 + 0 +LINE + 5 +FEA + 8 +0 + 62 + 0 + 10 +15092.225606 + 20 +9361.259423 + 30 +0.0 + 11 +15093.749968 + 21 +9363.899697 + 31 +0.0 + 0 +LINE + 5 +FEB + 8 +0 + 62 + 0 + 10 +15156.249968 + 20 +9472.152872 + 30 +0.0 + 11 +15187.499968 + 21 +9526.27946 + 31 +0.0 + 0 +LINE + 5 +FEC + 8 +0 + 62 + 0 + 10 +15249.999968 + 20 +9634.532635 + 30 +0.0 + 11 +15281.249968 + 21 +9688.659223 + 31 +0.0 + 0 +LINE + 5 +FED + 8 +0 + 62 + 0 + 10 +15343.749968 + 20 +9796.912399 + 30 +0.0 + 11 +15374.999968 + 21 +9851.038986 + 31 +0.0 + 0 +LINE + 5 +FEE + 8 +0 + 62 + 0 + 10 +15437.499968 + 20 +9959.292162 + 30 +0.0 + 11 +15460.0 + 21 +9998.26336 + 31 +0.0 + 0 +LINE + 5 +FEF + 8 +0 + 62 + 0 + 10 +15092.225606 + 20 +9253.006248 + 30 +0.0 + 11 +15093.749968 + 21 +9255.646521 + 31 +0.0 + 0 +LINE + 5 +FF0 + 8 +0 + 62 + 0 + 10 +15156.249968 + 20 +9363.899697 + 30 +0.0 + 11 +15187.499968 + 21 +9418.026285 + 31 +0.0 + 0 +LINE + 5 +FF1 + 8 +0 + 62 + 0 + 10 +15249.999968 + 20 +9526.27946 + 30 +0.0 + 11 +15281.249968 + 21 +9580.406048 + 31 +0.0 + 0 +LINE + 5 +FF2 + 8 +0 + 62 + 0 + 10 +15343.749968 + 20 +9688.659223 + 30 +0.0 + 11 +15374.999968 + 21 +9742.785811 + 31 +0.0 + 0 +LINE + 5 +FF3 + 8 +0 + 62 + 0 + 10 +15437.499968 + 20 +9851.038986 + 30 +0.0 + 11 +15460.0 + 21 +9890.010185 + 31 +0.0 + 0 +LINE + 5 +FF4 + 8 +0 + 62 + 0 + 10 +15092.225606 + 20 +9144.753073 + 30 +0.0 + 11 +15093.749968 + 21 +9147.393346 + 31 +0.0 + 0 +LINE + 5 +FF5 + 8 +0 + 62 + 0 + 10 +15156.249968 + 20 +9255.646522 + 30 +0.0 + 11 +15187.499968 + 21 +9309.773109 + 31 +0.0 + 0 +LINE + 5 +FF6 + 8 +0 + 62 + 0 + 10 +15249.999968 + 20 +9418.026285 + 30 +0.0 + 11 +15281.249968 + 21 +9472.152872 + 31 +0.0 + 0 +LINE + 5 +FF7 + 8 +0 + 62 + 0 + 10 +15343.749968 + 20 +9580.406048 + 30 +0.0 + 11 +15374.999968 + 21 +9634.532636 + 31 +0.0 + 0 +LINE + 5 +FF8 + 8 +0 + 62 + 0 + 10 +15437.499968 + 20 +9742.785811 + 30 +0.0 + 11 +15460.0 + 21 +9781.75701 + 31 +0.0 + 0 +LINE + 5 +FF9 + 8 +0 + 62 + 0 + 10 +15156.249968 + 20 +9147.393346 + 30 +0.0 + 11 +15187.499968 + 21 +9201.519934 + 31 +0.0 + 0 +LINE + 5 +FFA + 8 +0 + 62 + 0 + 10 +15249.999968 + 20 +9309.773109 + 30 +0.0 + 11 +15281.249968 + 21 +9363.899697 + 31 +0.0 + 0 +LINE + 5 +FFB + 8 +0 + 62 + 0 + 10 +15343.749968 + 20 +9472.152873 + 30 +0.0 + 11 +15374.999968 + 21 +9526.27946 + 31 +0.0 + 0 +LINE + 5 +FFC + 8 +0 + 62 + 0 + 10 +15437.499968 + 20 +9634.532636 + 30 +0.0 + 11 +15460.0 + 21 +9673.503835 + 31 +0.0 + 0 +LINE + 5 +FFD + 8 +0 + 62 + 0 + 10 +15162.519893 + 20 +9050.0 + 30 +0.0 + 11 +15187.499967 + 21 +9093.266759 + 31 +0.0 + 0 +LINE + 5 +FFE + 8 +0 + 62 + 0 + 10 +15249.999967 + 20 +9201.519934 + 30 +0.0 + 11 +15281.249967 + 21 +9255.646522 + 31 +0.0 + 0 +LINE + 5 +FFF + 8 +0 + 62 + 0 + 10 +15343.749967 + 20 +9363.899697 + 30 +0.0 + 11 +15374.999967 + 21 +9418.026285 + 31 +0.0 + 0 +LINE + 5 +1000 + 8 +0 + 62 + 0 + 10 +15437.499967 + 20 +9526.27946 + 30 +0.0 + 11 +15460.0 + 21 +9565.25066 + 31 +0.0 + 0 +LINE + 5 +1001 + 8 +0 + 62 + 0 + 10 +15249.999967 + 20 +9093.266759 + 30 +0.0 + 11 +15281.249967 + 21 +9147.393346 + 31 +0.0 + 0 +LINE + 5 +1002 + 8 +0 + 62 + 0 + 10 +15343.749967 + 20 +9255.646522 + 30 +0.0 + 11 +15374.999967 + 21 +9309.77311 + 31 +0.0 + 0 +LINE + 5 +1003 + 8 +0 + 62 + 0 + 10 +15437.499967 + 20 +9418.026285 + 30 +0.0 + 11 +15460.0 + 21 +9456.997485 + 31 +0.0 + 0 +LINE + 5 +1004 + 8 +0 + 62 + 0 + 10 +15343.749967 + 20 +9147.393347 + 30 +0.0 + 11 +15374.999967 + 21 +9201.519934 + 31 +0.0 + 0 +LINE + 5 +1005 + 8 +0 + 62 + 0 + 10 +15437.499967 + 20 +9309.77311 + 30 +0.0 + 11 +15460.0 + 21 +9348.74431 + 31 +0.0 + 0 +LINE + 5 +1006 + 8 +0 + 62 + 0 + 10 +15350.019892 + 20 +9050.0 + 30 +0.0 + 11 +15374.999967 + 21 +9093.266759 + 31 +0.0 + 0 +LINE + 5 +1007 + 8 +0 + 62 + 0 + 10 +15437.499967 + 20 +9201.519934 + 30 +0.0 + 11 +15460.0 + 21 +9240.491135 + 31 +0.0 + 0 +LINE + 5 +1008 + 8 +0 + 62 + 0 + 10 +15437.499967 + 20 +9093.266759 + 30 +0.0 + 11 +15460.0 + 21 +9132.23796 + 31 +0.0 + 0 +ENDBLK + 5 +1009 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D79 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D79 + 1 + + 0 +LINE + 5 +100B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +15921.0 + 20 +7285.0 + 30 +0.0 + 11 +16019.0 + 21 +7285.0 + 31 +0.0 + 0 +INSERT + 5 +100C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +15920.0 + 20 +7285.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +100D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16020.0 + 20 +7285.0 + 30 +0.0 + 0 +TEXT + 5 +100E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +15948.125 + 20 +7328.75 + 30 +0.0 + 40 +87.5 + 1 +2 + 41 +0.75 + 72 + 1 + 11 +15970.0 + 21 +7372.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +100F + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15920.0 + 20 +8990.0 + 30 +0.0 + 0 +POINT + 5 +1010 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16020.0 + 20 +8990.0 + 30 +0.0 + 0 +POINT + 5 +1011 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16020.0 + 20 +7285.0 + 30 +0.0 + 0 +ENDBLK + 5 +1012 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D81 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D81 + 1 + + 0 +LINE + 5 +1014 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +16081.0 + 20 +7285.0 + 30 +0.0 + 11 +16584.0 + 21 +7285.0 + 31 +0.0 + 0 +INSERT + 5 +1015 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16080.0 + 20 +7285.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +1016 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16585.0 + 20 +7285.0 + 30 +0.0 + 0 +TEXT + 5 +1017 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +16310.625 + 20 +7328.75 + 30 +0.0 + 40 +87.5 + 1 +8 + 41 +0.75 + 72 + 1 + 11 +16332.5 + 21 +7372.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +1018 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16080.0 + 20 +9050.0 + 30 +0.0 + 0 +POINT + 5 +1019 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16585.0 + 20 +9065.0 + 30 +0.0 + 0 +POINT + 5 +101A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16585.0 + 20 +7285.0 + 30 +0.0 + 0 +ENDBLK + 5 +101B + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D83 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D83 + 1 + + 0 +LINE + 5 +101D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +16651.0 + 20 +7285.0 + 30 +0.0 + 11 +16749.0 + 21 +7285.0 + 31 +0.0 + 0 +INSERT + 5 +101E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16650.0 + 20 +7285.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +101F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16750.0 + 20 +7285.0 + 30 +0.0 + 0 +TEXT + 5 +1020 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +16678.125 + 20 +7328.75 + 30 +0.0 + 40 +87.5 + 1 +2 + 41 +0.75 + 72 + 1 + 11 +16700.0 + 21 +7372.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +1021 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16650.0 + 20 +9460.0 + 30 +0.0 + 0 +POINT + 5 +1022 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16750.0 + 20 +9000.0 + 30 +0.0 + 0 +POINT + 5 +1023 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16750.0 + 20 +7285.0 + 30 +0.0 + 0 +ENDBLK + 5 +1024 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D84 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D84 + 1 + + 0 +LINE + 5 +1026 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +18630.0 + 20 +8186.0 + 30 +0.0 + 11 +18630.0 + 21 +8984.0 + 31 +0.0 + 0 +INSERT + 5 +1027 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18630.0 + 20 +8185.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +1028 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18630.0 + 20 +8985.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +1029 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +18586.25 + 20 +8541.25 + 30 +0.0 + 40 +87.5 + 1 +16 + 50 +90.0 + 41 +0.75 + 72 + 1 + 11 +18542.5 + 21 +8585.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +102A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17570.0 + 20 +8185.0 + 30 +0.0 + 0 +POINT + 5 +102B + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17570.0 + 20 +8985.0 + 30 +0.0 + 0 +POINT + 5 +102C + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +18630.0 + 20 +8985.0 + 30 +0.0 + 0 +ENDBLK + 5 +102D + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D85 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D85 + 1 + + 0 +LINE + 5 +102F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +18630.0 + 20 +8986.0 + 30 +0.0 + 11 +18630.0 + 21 +9179.0 + 31 +0.0 + 0 +INSERT + 5 +1030 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18630.0 + 20 +8985.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +1031 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18630.0 + 20 +9180.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +1032 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +18586.25 + 20 +9060.625 + 30 +0.0 + 40 +87.5 + 1 +4 + 50 +90.0 + 41 +0.75 + 72 + 1 + 11 +18542.5 + 21 +9082.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +1033 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17570.0 + 20 +8985.0 + 30 +0.0 + 0 +POINT + 5 +1034 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17580.0 + 20 +9180.0 + 30 +0.0 + 0 +POINT + 5 +1035 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +18630.0 + 20 +9180.0 + 30 +0.0 + 0 +ENDBLK + 5 +1036 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D86 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D86 + 1 + + 0 +LINE + 5 +1038 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +18630.0 + 20 +9181.0 + 30 +0.0 + 11 +18630.0 + 21 +9239.0 + 31 +0.0 + 0 +INSERT + 5 +1039 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18630.0 + 20 +9180.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +103A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18630.0 + 20 +9240.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +103B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +18586.25 + 20 +9199.0625 + 30 +0.0 + 40 +87.5 + 1 +1 + 50 +90.0 + 41 +0.75 + 72 + 1 + 11 +18542.5 + 21 +9210.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +103C + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17580.0 + 20 +9180.0 + 30 +0.0 + 0 +POINT + 5 +103D + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17575.0 + 20 +9240.0 + 30 +0.0 + 0 +POINT + 5 +103E + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +18630.0 + 20 +9240.0 + 30 +0.0 + 0 +ENDBLK + 5 +103F + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D87 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D87 + 1 + + 0 +LINE + 5 +1041 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +18630.0 + 20 +9241.0 + 30 +0.0 + 11 +18630.0 + 21 +9434.0 + 31 +0.0 + 0 +INSERT + 5 +1042 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18630.0 + 20 +9240.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +1043 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18630.0 + 20 +9435.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +1044 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +18586.25 + 20 +9315.625 + 30 +0.0 + 40 +87.5 + 1 +4 + 50 +90.0 + 41 +0.75 + 72 + 1 + 11 +18542.5 + 21 +9337.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +1045 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17575.0 + 20 +9240.0 + 30 +0.0 + 0 +POINT + 5 +1046 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17585.0 + 20 +9435.0 + 30 +0.0 + 0 +POINT + 5 +1047 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +18630.0 + 20 +9435.0 + 30 +0.0 + 0 +ENDBLK + 5 +1048 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D93 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D93 + 1 + + 0 +LINE + 5 +104A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +16021.0 + 20 +7285.0 + 30 +0.0 + 11 +16079.0 + 21 +7285.0 + 31 +0.0 + 0 +INSERT + 5 +104B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16020.0 + 20 +7285.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +104C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16080.0 + 20 +7285.0 + 30 +0.0 + 0 +TEXT + 5 +104D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +16022.5 + 20 +7481.25 + 30 +0.0 + 40 +87.5 + 1 +1.25 + 41 +0.75 + 72 + 1 + 11 +16110.0 + 21 +7525.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +104E + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16020.0 + 20 +8990.0 + 30 +0.0 + 0 +POINT + 5 +104F + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16080.0 + 20 +9050.0 + 30 +0.0 + 0 +POINT + 5 +1050 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16080.0 + 20 +7285.0 + 30 +0.0 + 0 +ENDBLK + 5 +1051 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D95 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D95 + 1 + + 0 +LINE + 5 +1053 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +16586.0 + 20 +7285.0 + 30 +0.0 + 11 +16649.0 + 21 +7285.0 + 31 +0.0 + 0 +INSERT + 5 +1054 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16585.0 + 20 +7285.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +1055 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16650.0 + 20 +7285.0 + 30 +0.0 + 0 +TEXT + 5 +1056 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +16612.5 + 20 +7496.25 + 30 +0.0 + 40 +87.5 + 1 +1.25 + 41 +0.75 + 72 + 1 + 11 +16700.0 + 21 +7540.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +1057 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16585.0 + 20 +9065.0 + 30 +0.0 + 0 +POINT + 5 +1058 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16650.0 + 20 +9460.0 + 30 +0.0 + 0 +POINT + 5 +1059 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16650.0 + 20 +7285.0 + 30 +0.0 + 0 +ENDBLK + 5 +105A + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D96 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D96 + 1 + + 0 +LINE + 5 +105C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +18630.0 + 20 +9436.0 + 30 +0.0 + 11 +18630.0 + 21 +9559.0 + 31 +0.0 + 0 +INSERT + 5 +105D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18630.0 + 20 +9435.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +105E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18630.0 + 20 +9560.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +105F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +18586.25 + 20 +9598.125 + 30 +0.0 + 40 +87.5 + 1 +2 + 50 +90.0 + 41 +0.75 + 72 + 1 + 11 +18542.5 + 21 +9620.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +1060 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17585.0 + 20 +9435.0 + 30 +0.0 + 0 +POINT + 5 +1061 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17585.0 + 20 +9560.0 + 30 +0.0 + 0 +POINT + 5 +1062 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +18630.0 + 20 +9560.0 + 30 +0.0 + 0 +ENDBLK + 5 +1063 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D97 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D97 + 1 + + 0 +LINE + 5 +1065 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +15620.0 + 20 +9561.0 + 30 +0.0 + 11 +15620.0 + 21 +9859.0 + 31 +0.0 + 0 +INSERT + 5 +1066 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +15620.0 + 20 +9560.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +1067 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +15620.0 + 20 +9860.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +1068 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +15576.25 + 20 +9688.125 + 30 +0.0 + 40 +87.5 + 1 +6 + 50 +90.0 + 41 +0.75 + 72 + 1 + 11 +15532.5 + 21 +9710.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +1069 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15870.0 + 20 +9560.0 + 30 +0.0 + 0 +POINT + 5 +106A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15870.0 + 20 +9860.0 + 30 +0.0 + 0 +POINT + 5 +106B + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15620.0 + 20 +9860.0 + 30 +0.0 + 0 +ENDBLK + 5 +106C + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D98 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D98 + 1 + + 0 +LINE + 5 +106E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +16021.789473 + 20 +10121.000702 + 30 +0.0 + 11 +15872.582352 + 21 +10121.000702 + 31 +0.0 + 0 +INSERT + 5 +106F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16022.789473 + 20 +10121.000702 + 30 +0.0 + 0 +INSERT + 5 +1070 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +15871.582352 + 20 +10121.000702 + 30 +0.0 + 50 +180.0 + 0 +TEXT + 5 +1071 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +15925.310913 + 20 +10164.750702 + 30 +0.0 + 40 +87.5 + 1 +3 + 41 +0.75 + 72 + 1 + 11 +15947.185913 + 21 +10208.500702 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +1072 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16022.789473 + 20 +9960.24584 + 30 +0.0 + 0 +POINT + 5 +1073 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15871.582352 + 20 +9960.24584 + 30 +0.0 + 0 +POINT + 5 +1074 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15871.582352 + 20 +10121.000702 + 30 +0.0 + 0 +ENDBLK + 5 +1075 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D99 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D99 + 1 + + 0 +LINE + 5 +1077 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +16021.0 + 20 +13550.0 + 30 +0.0 + 11 +16649.0 + 21 +13550.0 + 31 +0.0 + 0 +INSERT + 5 +1078 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16020.0 + 20 +13550.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +1079 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16650.0 + 20 +13550.0 + 30 +0.0 + 0 +TEXT + 5 +107A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +16291.25 + 20 +13593.75 + 30 +0.0 + 40 +87.5 + 1 +12 + 41 +0.75 + 72 + 1 + 11 +16335.0 + 21 +13637.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +107B + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16020.0 + 20 +12320.0 + 30 +0.0 + 0 +POINT + 5 +107C + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16650.0 + 20 +12320.0 + 30 +0.0 + 0 +POINT + 5 +107D + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16650.0 + 20 +13550.0 + 30 +0.0 + 0 +ENDBLK + 5 +107E + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D103 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D103 + 1 + + 0 +LINE + 5 +1080 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +16020.357827 + 20 +12020.090071 + 30 +0.0 + 11 +15947.609987 + 21 +12020.090071 + 31 +0.0 + 0 +INSERT + 5 +1081 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16021.357827 + 20 +12020.090071 + 30 +0.0 + 0 +INSERT + 5 +1082 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +15946.609987 + 20 +12020.090071 + 30 +0.0 + 50 +180.0 + 0 +TEXT + 5 +1083 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +15840.389563 + 20 +12063.840071 + 30 +0.0 + 40 +87.5 + 1 +1 + 41 +0.75 + 72 + 1 + 11 +15851.327063 + 21 +12107.590071 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +1084 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16021.357827 + 20 +12209.009781 + 30 +0.0 + 0 +POINT + 5 +1085 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15946.609987 + 20 +12209.009781 + 30 +0.0 + 0 +POINT + 5 +1086 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15946.609987 + 20 +12020.090071 + 30 +0.0 + 0 +ENDBLK + 5 +1087 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D105 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D105 + 1 + + 0 +LINE + 5 +1089 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +18624.167458 + 20 +12416.10418 + 30 +0.0 + 11 +18624.167458 + 21 +13214.0 + 31 +0.0 + 0 +INSERT + 5 +108A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18624.167458 + 20 +12415.10418 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +108B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18624.167458 + 20 +13215.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +108C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +18580.417458 + 20 +12771.30209 + 30 +0.0 + 40 +87.5 + 1 +16 + 50 +90.0 + 41 +0.75 + 72 + 1 + 11 +18536.667458 + 21 +12815.05209 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +108D + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17578.177313 + 20 +12415.10418 + 30 +0.0 + 0 +POINT + 5 +108E + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17570.0 + 20 +13215.0 + 30 +0.0 + 0 +POINT + 5 +108F + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +18624.167458 + 20 +13215.0 + 30 +0.0 + 0 +ENDBLK + 5 +1090 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D106 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D106 + 1 + + 0 +LINE + 5 +1092 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +18624.167458 + 20 +12341.808311 + 30 +0.0 + 11 +18624.167458 + 21 +12414.10418 + 31 +0.0 + 0 +INSERT + 5 +1093 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18624.167458 + 20 +12340.808311 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +1094 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18624.167458 + 20 +12415.10418 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +1095 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +18580.417458 + 20 +12204.0625 + 30 +0.0 + 40 +87.5 + 1 +1 + 50 +90.0 + 41 +0.75 + 72 + 1 + 11 +18536.667458 + 21 +12215.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +1096 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17578.177313 + 20 +12340.808311 + 30 +0.0 + 0 +POINT + 5 +1097 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17578.177313 + 20 +12415.10418 + 30 +0.0 + 0 +POINT + 5 +1098 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +18624.167458 + 20 +12415.10418 + 30 +0.0 + 0 +ENDBLK + 5 +1099 + 8 +0 + 0 +ENDSEC + 0 +SECTION + 2 +ENTITIES + 0 +POLYLINE + 5 +109A + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +1EF4 + 8 +0 + 10 +500.0 + 20 +125.0 + 30 +0.0 + 0 +VERTEX + 5 +1EF5 + 8 +0 + 10 +20900.0 + 20 +125.0 + 30 +0.0 + 0 +VERTEX + 5 +1EF6 + 8 +0 + 10 +20900.0 + 20 +14725.0 + 30 +0.0 + 0 +VERTEX + 5 +1EF7 + 8 +0 + 10 +500.0 + 20 +14725.0 + 30 +0.0 + 0 +SEQEND + 5 +1EF8 + 8 +0 + 0 +POLYLINE + 5 +10A0 + 8 +FUNDAMENT + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +1EF9 + 8 +FUNDAMENT + 10 +7921.25 + 20 +4222.5 + 30 +0.0 + 0 +VERTEX + 5 +1EFA + 8 +FUNDAMENT + 10 +5421.25 + 20 +4222.5 + 30 +0.0 + 0 +VERTEX + 5 +1EFB + 8 +FUNDAMENT + 10 +5421.25 + 20 +2847.5 + 30 +0.0 + 0 +VERTEX + 5 +1EFC + 8 +FUNDAMENT + 10 +7921.25 + 20 +2847.5 + 30 +0.0 + 0 +SEQEND + 5 +1EFD + 8 +FUNDAMENT + 0 +POLYLINE + 5 +10A6 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +1EFE + 8 +0 + 10 +20900.0 + 20 +1500.0 + 30 +0.0 + 0 +VERTEX + 5 +1EFF + 8 +0 + 10 +16275.0 + 20 +1500.0 + 30 +0.0 + 0 +VERTEX + 5 +1F00 + 8 +0 + 10 +16275.0 + 20 +125.0 + 30 +0.0 + 0 +SEQEND + 5 +1F01 + 8 +0 + 0 +POLYLINE + 5 +10AB + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +1F02 + 8 +MAUERWERK + 10 +6215.0 + 20 +4660.0 + 30 +0.0 + 0 +VERTEX + 5 +1F03 + 8 +MAUERWERK + 10 +7127.5 + 20 +4660.0 + 30 +0.0 + 0 +VERTEX + 5 +1F04 + 8 +MAUERWERK + 10 +7127.5 + 20 +5094.375 + 30 +0.0 + 0 +VERTEX + 5 +1F05 + 8 +MAUERWERK + 10 +6215.0 + 20 +5094.375 + 30 +0.0 + 0 +SEQEND + 5 +1F06 + 8 +MAUERWERK + 0 +POLYLINE + 5 +10B1 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +1F07 + 8 +MAUERWERK + 10 +6141.15625 + 20 +9890.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F08 + 8 +MAUERWERK + 10 +7053.65625 + 20 +9890.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F09 + 8 +MAUERWERK + 10 +7053.65625 + 20 +11143.282507 + 30 +0.0 + 0 +VERTEX + 5 +1F0A + 8 +MAUERWERK + 10 +6141.15625 + 20 +11143.282507 + 30 +0.0 + 0 +SEQEND + 5 +1F0B + 8 +MAUERWERK + 0 +POLYLINE + 5 +10B7 + 8 +VORSATZSCHALE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +1F0C + 8 +VORSATZSCHALE + 10 +5791.15625 + 20 +11105.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F0D + 8 +VORSATZSCHALE + 10 +5503.65625 + 20 +11105.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F0E + 8 +VORSATZSCHALE + 10 +5503.65625 + 20 +11283.282507 + 30 +0.0 + 0 +VERTEX + 5 +1F0F + 8 +VORSATZSCHALE + 10 +5791.15625 + 20 +11283.282507 + 30 +0.0 + 0 +SEQEND + 5 +1F10 + 8 +VORSATZSCHALE + 0 +POLYLINE + 5 +10BD + 8 +VORSATZSCHALE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +1F11 + 8 +VORSATZSCHALE + 10 +5791.15625 + 20 +11320.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F12 + 8 +VORSATZSCHALE + 10 +5503.65625 + 20 +11320.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F13 + 8 +VORSATZSCHALE + 10 +5503.65625 + 20 +11498.282507 + 30 +0.0 + 0 +VERTEX + 5 +1F14 + 8 +VORSATZSCHALE + 10 +5791.15625 + 20 +11498.282507 + 30 +0.0 + 0 +SEQEND + 5 +1F15 + 8 +VORSATZSCHALE + 0 +POLYLINE + 5 +10C3 + 8 +VORSATZSCHALE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1F16 + 8 +VORSATZSCHALE + 10 +5603.65625 + 20 +11090.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F17 + 8 +VORSATZSCHALE + 10 +5853.65625 + 20 +11090.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F18 + 8 +VORSATZSCHALE + 10 +5853.65625 + 20 +11278.282507 + 30 +0.0 + 0 +VERTEX + 5 +1F19 + 8 +VORSATZSCHALE + 10 +6141.15625 + 20 +11278.282507 + 30 +0.0 + 0 +VERTEX + 5 +1F1A + 8 +VORSATZSCHALE + 10 +6141.15625 + 20 +11190.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F1B + 8 +VORSATZSCHALE + 10 +6141.15625 + 20 +11130.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F1C + 8 +VORSATZSCHALE + 10 +5856.15625 + 20 +11130.782507 + 30 +0.0 + 0 +SEQEND + 5 +1F1D + 8 +VORSATZSCHALE + 0 +POLYLINE + 5 +10CC + 8 +VORSATZSCHALE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1F1E + 8 +VORSATZSCHALE + 10 +5503.65625 + 20 +11323.282507 + 30 +0.0 + 0 +VERTEX + 5 +1F1F + 8 +VORSATZSCHALE + 10 +5791.15625 + 20 +11495.782507 + 30 +0.0 + 0 +SEQEND + 5 +1F20 + 8 +VORSATZSCHALE + 0 +POLYLINE + 5 +10D0 + 8 +VORSATZSCHALE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1F21 + 8 +VORSATZSCHALE + 10 +5791.15625 + 20 +11323.282507 + 30 +0.0 + 0 +VERTEX + 5 +1F22 + 8 +VORSATZSCHALE + 10 +5501.15625 + 20 +11495.782507 + 30 +0.0 + 0 +SEQEND + 5 +1F23 + 8 +VORSATZSCHALE + 0 +POLYLINE + 5 +10D4 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1F24 + 8 +DRAHTANKER + 10 +5778.65625 + 20 +12065.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F25 + 8 +DRAHTANKER + 10 +5953.65625 + 20 +12065.782507 + 30 +0.0 + 0 +SEQEND + 5 +1F26 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +10D8 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1F27 + 8 +DRAHTANKER + 10 +6203.65625 + 20 +12065.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F28 + 8 +DRAHTANKER + 10 +6253.65625 + 20 +12065.782507 + 30 +0.0 + 0 +SEQEND + 5 +1F29 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +10DC + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1F2A + 8 +DRAHTANKER + 10 +6303.65625 + 20 +12065.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F2B + 8 +DRAHTANKER + 10 +6353.65625 + 20 +12065.782507 + 30 +0.0 + 0 +SEQEND + 5 +1F2C + 8 +DRAHTANKER + 0 +POLYLINE + 5 +10E0 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1F2D + 8 +DRAHTANKER + 10 +5591.15625 + 20 +12065.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F2E + 8 +DRAHTANKER + 10 +5641.15625 + 20 +12065.782507 + 30 +0.0 + 0 +SEQEND + 5 +1F2F + 8 +DRAHTANKER + 0 +POLYLINE + 5 +10E4 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1F30 + 8 +DRAHTANKER + 10 +5678.65625 + 20 +12065.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F31 + 8 +DRAHTANKER + 10 +5728.65625 + 20 +12065.782507 + 30 +0.0 + 0 +SEQEND + 5 +1F32 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +10E8 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1F33 + 8 +DRAHTANKER + 10 +5853.65625 + 20 +12140.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F34 + 8 +DRAHTANKER + 10 +5853.65625 + 20 +11990.782507 + 30 +0.0 + 0 +SEQEND + 5 +1F35 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +10EC + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1F36 + 8 +DRAHTANKER + 10 +5916.15625 + 20 +12115.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F37 + 8 +DRAHTANKER + 10 +5916.15625 + 20 +12020.782507 + 30 +0.0 + 0 +SEQEND + 5 +1F38 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +10F0 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1F39 + 8 +DRAHTANKER + 10 +5978.65625 + 20 +12065.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F3A + 8 +DRAHTANKER + 10 +6028.65625 + 20 +12065.782507 + 30 +0.0 + 0 +SEQEND + 5 +1F3B + 8 +DRAHTANKER + 0 +POLYLINE + 5 +10F4 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1F3C + 8 +DRAHTANKER + 10 +6053.65625 + 20 +12065.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F3D + 8 +DRAHTANKER + 10 +6103.65625 + 20 +12065.782507 + 30 +0.0 + 0 +SEQEND + 5 +1F3E + 8 +DRAHTANKER + 0 +POLYLINE + 5 +10F8 + 8 +ERDBODEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 5 + 40 +12.5 + 41 +12.5 + 75 + 6 + 0 +VERTEX + 5 +10F9 + 8 +ERDBODEN + 10 +4656.653978 + 20 +3326.420535 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +10FA + 8 +ERDBODEN + 10 +4611.533246 + 20 +3481.453371 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +10FB + 8 +ERDBODEN + 10 +4612.538438 + 20 +3494.15164 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +10FC + 8 +ERDBODEN + 10 +4615.344714 + 20 +3504.818406 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +10FD + 8 +ERDBODEN + 10 +4619.638123 + 20 +3513.536251 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +10FE + 8 +ERDBODEN + 10 +4625.104716 + 20 +3520.387756 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +10FF + 8 +ERDBODEN + 10 +4631.430541 + 20 +3525.455503 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1100 + 8 +ERDBODEN + 10 +4638.301649 + 20 +3528.822073 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1101 + 8 +ERDBODEN + 10 +4645.404088 + 20 +3530.570048 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1102 + 8 +ERDBODEN + 10 +4652.423909 + 20 +3530.782008 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1103 + 8 +ERDBODEN + 10 +4659.110502 + 20 +3529.543289 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1104 + 8 +ERDBODEN + 10 +4665.466621 + 20 +3526.950234 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1105 + 8 +ERDBODEN + 10 +4671.55836 + 20 +3523.101943 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1106 + 8 +ERDBODEN + 10 +4677.451815 + 20 +3518.097511 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1107 + 8 +ERDBODEN + 10 +4683.21308 + 20 +3512.036038 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1108 + 8 +ERDBODEN + 10 +4688.908251 + 20 +3505.01662 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1109 + 8 +ERDBODEN + 10 +4694.603421 + 20 +3497.138355 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +110A + 8 +ERDBODEN + 10 +4700.364687 + 20 +3488.500342 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +110B + 8 +ERDBODEN + 10 +4706.233356 + 20 +3479.201677 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +110C + 8 +ERDBODEN + 10 +4712.151597 + 20 +3469.341458 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +110D + 8 +ERDBODEN + 10 +4718.03679 + 20 +3459.018783 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +110E + 8 +ERDBODEN + 10 +4723.806317 + 20 +3448.33275 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +110F + 8 +ERDBODEN + 10 +4729.37756 + 20 +3437.382456 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1110 + 8 +ERDBODEN + 10 +4734.667899 + 20 +3426.266999 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1111 + 8 +ERDBODEN + 10 +4739.594718 + 20 +3415.085477 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1112 + 8 +ERDBODEN + 10 +4744.075396 + 20 +3403.936986 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1113 + 8 +ERDBODEN + 10 +4748.032823 + 20 +3392.917873 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1114 + 8 +ERDBODEN + 10 +4751.411921 + 20 +3382.113471 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1115 + 8 +ERDBODEN + 10 +4754.163118 + 20 +3371.606362 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1116 + 8 +ERDBODEN + 10 +4756.236843 + 20 +3361.479127 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1117 + 8 +ERDBODEN + 10 +4757.583525 + 20 +3351.814348 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1118 + 8 +ERDBODEN + 10 +4758.153593 + 20 +3342.694605 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1119 + 8 +ERDBODEN + 10 +4757.897475 + 20 +3334.202481 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +111A + 8 +ERDBODEN + 10 +4756.765602 + 20 +3326.420557 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +111B + 8 +ERDBODEN + 10 +4754.713908 + 20 +3319.431414 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +111C + 8 +ERDBODEN + 10 +4751.720364 + 20 +3313.317634 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +111D + 8 +ERDBODEN + 10 +4747.768444 + 20 +3308.161798 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +111E + 8 +ERDBODEN + 10 +4742.841626 + 20 +3304.046489 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +111F + 8 +ERDBODEN + 10 +4736.923385 + 20 +3301.054288 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1120 + 8 +ERDBODEN + 10 +4729.997199 + 20 +3299.267777 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1121 + 8 +ERDBODEN + 10 +4722.046542 + 20 +3298.769537 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1122 + 8 +ERDBODEN + 10 +4713.054893 + 20 +3299.64215 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1123 + 8 +ERDBODEN + 10 +4703.080082 + 20 +3301.899379 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1124 + 8 +ERDBODEN + 10 +4692.477371 + 20 +3305.279717 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1125 + 8 +ERDBODEN + 10 +4681.676376 + 20 +3309.452838 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1126 + 8 +ERDBODEN + 10 +4671.106712 + 20 +3314.088414 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1127 + 8 +ERDBODEN + 10 +4661.197997 + 20 +3318.856121 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1128 + 8 +ERDBODEN + 10 +4652.379846 + 20 +3323.425631 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1129 + 8 +ERDBODEN + 10 +4645.081876 + 20 +3327.466618 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +112A + 8 +ERDBODEN + 10 +4639.733703 + 20 +3330.648757 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +112B + 8 +ERDBODEN + 10 +4636.607969 + 20 +3332.784862 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +112C + 8 +ERDBODEN + 10 +4635.349413 + 20 +3334.260314 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +112D + 8 +ERDBODEN + 10 +4635.445802 + 20 +3335.603633 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +112E + 8 +ERDBODEN + 10 +4636.384899 + 20 +3337.343342 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +112F + 8 +ERDBODEN + 10 +4637.65447 + 20 +3340.007962 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1130 + 8 +ERDBODEN + 10 +4638.742281 + 20 +3344.126015 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1131 + 8 +ERDBODEN + 10 +4639.136096 + 20 +3350.226022 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1132 + 8 +ERDBODEN + 10 +4638.32368 + 20 +3358.836505 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1133 + 8 +ERDBODEN + 10 +4635.958037 + 20 +3370.290542 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1134 + 8 +ERDBODEN + 10 +4632.353115 + 20 +3384.139441 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1135 + 8 +ERDBODEN + 10 +4627.988103 + 20 +3399.739067 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1136 + 8 +ERDBODEN + 10 +4623.342187 + 20 +3416.445285 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1137 + 8 +ERDBODEN + 10 +4618.894557 + 20 +3433.61396 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1138 + 8 +ERDBODEN + 10 +4615.124398 + 20 +3450.600956 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1139 + 8 +ERDBODEN + 10 +4612.510898 + 20 +3466.762138 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +113A + 8 +ERDBODEN + 10 +4588.97288 + 20 +3504.003601 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +113B + 8 +ERDBODEN + 10 +4656.653978 + 20 +3546.28529 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +113C + 8 +ERDBODEN + 10 +4698.954664 + 20 +3495.54729 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +113D + 8 +ERDBODEN + 10 +4749.715487 + 20 +3402.527601 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +113E + 8 +ERDBODEN + 10 +4766.635762 + 20 +3317.964224 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +113F + 8 +ERDBODEN + 10 +4724.335076 + 20 +3284.138846 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1140 + 8 +ERDBODEN + 10 +4614.353292 + 20 +3343.33329 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1141 + 8 +ERDBODEN + 0 +POLYLINE + 5 +1142 + 8 +ERDBODEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 5 + 40 +12.5 + 41 +12.5 + 75 + 6 + 0 +VERTEX + 5 +1143 + 8 +ERDBODEN + 10 +4849.48898 + 20 +4097.413563 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1144 + 8 +ERDBODEN + 10 +4804.368248 + 20 +4252.446399 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1145 + 8 +ERDBODEN + 10 +4805.37344 + 20 +4265.144668 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1146 + 8 +ERDBODEN + 10 +4808.179716 + 20 +4275.811434 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1147 + 8 +ERDBODEN + 10 +4812.473126 + 20 +4284.529279 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1148 + 8 +ERDBODEN + 10 +4817.939718 + 20 +4291.380784 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1149 + 8 +ERDBODEN + 10 +4824.265543 + 20 +4296.448531 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +114A + 8 +ERDBODEN + 10 +4831.136651 + 20 +4299.815101 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +114B + 8 +ERDBODEN + 10 +4838.23909 + 20 +4301.563076 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +114C + 8 +ERDBODEN + 10 +4845.258911 + 20 +4301.775036 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +114D + 8 +ERDBODEN + 10 +4851.945504 + 20 +4300.536317 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +114E + 8 +ERDBODEN + 10 +4858.301623 + 20 +4297.943262 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +114F + 8 +ERDBODEN + 10 +4864.393362 + 20 +4294.094971 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1150 + 8 +ERDBODEN + 10 +4870.286817 + 20 +4289.090539 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1151 + 8 +ERDBODEN + 10 +4876.048083 + 20 +4283.029066 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1152 + 8 +ERDBODEN + 10 +4881.743253 + 20 +4276.009648 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1153 + 8 +ERDBODEN + 10 +4887.438424 + 20 +4268.131383 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1154 + 8 +ERDBODEN + 10 +4893.199689 + 20 +4259.49337 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1155 + 8 +ERDBODEN + 10 +4899.068358 + 20 +4250.194705 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1156 + 8 +ERDBODEN + 10 +4904.986599 + 20 +4240.334486 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1157 + 8 +ERDBODEN + 10 +4910.871792 + 20 +4230.011811 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1158 + 8 +ERDBODEN + 10 +4916.641319 + 20 +4219.325778 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1159 + 8 +ERDBODEN + 10 +4922.212562 + 20 +4208.375484 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +115A + 8 +ERDBODEN + 10 +4927.502902 + 20 +4197.260027 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +115B + 8 +ERDBODEN + 10 +4932.42972 + 20 +4186.078505 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +115C + 8 +ERDBODEN + 10 +4936.910398 + 20 +4174.930014 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +115D + 8 +ERDBODEN + 10 +4940.867825 + 20 +4163.910901 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +115E + 8 +ERDBODEN + 10 +4944.246923 + 20 +4153.106499 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +115F + 8 +ERDBODEN + 10 +4946.99812 + 20 +4142.59939 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1160 + 8 +ERDBODEN + 10 +4949.071845 + 20 +4132.472155 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1161 + 8 +ERDBODEN + 10 +4950.418527 + 20 +4122.807376 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1162 + 8 +ERDBODEN + 10 +4950.988595 + 20 +4113.687633 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1163 + 8 +ERDBODEN + 10 +4950.732478 + 20 +4105.195509 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1164 + 8 +ERDBODEN + 10 +4949.600604 + 20 +4097.413585 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1165 + 8 +ERDBODEN + 10 +4947.54891 + 20 +4090.424442 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1166 + 8 +ERDBODEN + 10 +4944.555366 + 20 +4084.310662 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1167 + 8 +ERDBODEN + 10 +4940.603446 + 20 +4079.154826 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1168 + 8 +ERDBODEN + 10 +4935.676628 + 20 +4075.039517 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1169 + 8 +ERDBODEN + 10 +4929.758387 + 20 +4072.047316 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +116A + 8 +ERDBODEN + 10 +4922.832201 + 20 +4070.260805 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +116B + 8 +ERDBODEN + 10 +4914.881545 + 20 +4069.762565 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +116C + 8 +ERDBODEN + 10 +4905.889895 + 20 +4070.635177 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +116D + 8 +ERDBODEN + 10 +4895.915085 + 20 +4072.892407 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +116E + 8 +ERDBODEN + 10 +4885.312373 + 20 +4076.272745 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +116F + 8 +ERDBODEN + 10 +4874.511378 + 20 +4080.445866 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1170 + 8 +ERDBODEN + 10 +4863.941714 + 20 +4085.081442 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1171 + 8 +ERDBODEN + 10 +4854.032999 + 20 +4089.849149 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1172 + 8 +ERDBODEN + 10 +4845.214848 + 20 +4094.418659 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1173 + 8 +ERDBODEN + 10 +4837.916878 + 20 +4098.459646 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1174 + 8 +ERDBODEN + 10 +4832.568705 + 20 +4101.641785 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1175 + 8 +ERDBODEN + 10 +4829.442971 + 20 +4103.77789 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1176 + 8 +ERDBODEN + 10 +4828.184416 + 20 +4105.253341 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1177 + 8 +ERDBODEN + 10 +4828.280804 + 20 +4106.596661 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1178 + 8 +ERDBODEN + 10 +4829.219901 + 20 +4108.33637 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1179 + 8 +ERDBODEN + 10 +4830.489473 + 20 +4111.00099 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +117A + 8 +ERDBODEN + 10 +4831.577283 + 20 +4115.119043 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +117B + 8 +ERDBODEN + 10 +4831.971098 + 20 +4121.21905 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +117C + 8 +ERDBODEN + 10 +4831.158683 + 20 +4129.829533 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +117D + 8 +ERDBODEN + 10 +4828.793039 + 20 +4141.28357 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +117E + 8 +ERDBODEN + 10 +4825.188117 + 20 +4155.132469 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +117F + 8 +ERDBODEN + 10 +4820.823105 + 20 +4170.732095 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1180 + 8 +ERDBODEN + 10 +4816.17719 + 20 +4187.438313 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1181 + 8 +ERDBODEN + 10 +4811.729559 + 20 +4204.606988 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1182 + 8 +ERDBODEN + 10 +4807.9594 + 20 +4221.593984 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1183 + 8 +ERDBODEN + 10 +4805.345901 + 20 +4237.755166 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1184 + 8 +ERDBODEN + 10 +4781.807882 + 20 +4274.996629 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1185 + 8 +ERDBODEN + 10 +4849.48898 + 20 +4317.278318 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1186 + 8 +ERDBODEN + 10 +4891.789666 + 20 +4266.540318 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1187 + 8 +ERDBODEN + 10 +4942.550489 + 20 +4173.520629 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1188 + 8 +ERDBODEN + 10 +4959.470764 + 20 +4088.957252 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1189 + 8 +ERDBODEN + 10 +4917.170078 + 20 +4055.131874 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +118A + 8 +ERDBODEN + 10 +4807.188294 + 20 +4114.326318 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +118B + 8 +ERDBODEN + 0 +POLYLINE + 5 +118C + 8 +ERDBODEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 5 + 40 +12.5 + 41 +12.5 + 75 + 6 + 0 +VERTEX + 5 +118D + 8 +ERDBODEN + 10 +5131.080443 + 20 +5303.451933 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +118E + 8 +ERDBODEN + 10 +5148.133859 + 20 +5425.619621 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +118F + 8 +ERDBODEN + 10 +5157.768082 + 20 +5434.151274 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1190 + 8 +ERDBODEN + 10 +5169.25088 + 20 +5440.602037 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1191 + 8 +ERDBODEN + 10 +5182.032676 + 20 +5445.021851 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1192 + 8 +ERDBODEN + 10 +5195.563894 + 20 +5447.460657 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1193 + 8 +ERDBODEN + 10 +5209.294959 + 20 +5447.968397 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1194 + 8 +ERDBODEN + 10 +5222.676295 + 20 +5446.59501 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1195 + 8 +ERDBODEN + 10 +5235.158326 + 20 +5443.390439 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1196 + 8 +ERDBODEN + 10 +5246.191475 + 20 +5438.404625 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1197 + 8 +ERDBODEN + 10 +5255.337193 + 20 +5431.723577 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1198 + 8 +ERDBODEN + 10 +5262.601031 + 20 +5423.577581 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1199 + 8 +ERDBODEN + 10 +5268.099564 + 20 +5414.232991 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +119A + 8 +ERDBODEN + 10 +5271.949371 + 20 +5403.956161 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +119B + 8 +ERDBODEN + 10 +5274.267026 + 20 +5393.013445 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +119C + 8 +ERDBODEN + 10 +5275.169108 + 20 +5381.671197 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +119D + 8 +ERDBODEN + 10 +5274.772191 + 20 +5370.195772 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +119E + 8 +ERDBODEN + 10 +5273.192854 + 20 +5358.853523 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +119F + 8 +ERDBODEN + 10 +5270.522691 + 20 +5347.896933 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11A0 + 8 +ERDBODEN + 10 +5266.753377 + 20 +5337.522992 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11A1 + 8 +ERDBODEN + 10 +5261.851604 + 20 +5327.914819 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11A2 + 8 +ERDBODEN + 10 +5255.784064 + 20 +5319.255532 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11A3 + 8 +ERDBODEN + 10 +5248.517451 + 20 +5311.728251 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11A4 + 8 +ERDBODEN + 10 +5240.018456 + 20 +5305.516094 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11A5 + 8 +ERDBODEN + 10 +5230.253774 + 20 +5300.802179 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11A6 + 8 +ERDBODEN + 10 +5219.190097 + 20 +5297.769626 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11A7 + 8 +ERDBODEN + 10 +5206.882936 + 20 +5296.512768 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11A8 + 8 +ERDBODEN + 10 +5193.743087 + 20 +5296.7708 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11A9 + 8 +ERDBODEN + 10 +5180.270164 + 20 +5298.194132 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11AA + 8 +ERDBODEN + 10 +5166.963779 + 20 +5300.433174 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11AB + 8 +ERDBODEN + 10 +5154.323547 + 20 +5303.138338 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11AC + 8 +ERDBODEN + 10 +5142.849082 + 20 +5305.960031 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11AD + 8 +ERDBODEN + 10 +5133.039997 + 20 +5308.548666 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11AE + 8 +ERDBODEN + 10 +5125.395907 + 20 +5310.554651 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11AF + 8 +ERDBODEN + 10 +5120.263765 + 20 +5311.7588 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11B0 + 8 +ERDBODEN + 10 +5117.379886 + 20 +5312.463535 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11B1 + 8 +ERDBODEN + 10 +5116.327925 + 20 +5313.101681 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11B2 + 8 +ERDBODEN + 10 +5116.691536 + 20 +5314.106064 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11B3 + 8 +ERDBODEN + 10 +5118.054374 + 20 +5315.909507 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11B4 + 8 +ERDBODEN + 10 +5120.000094 + 20 +5318.944838 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11B5 + 8 +ERDBODEN + 10 +5122.11235 + 20 +5323.64488 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11B6 + 8 +ERDBODEN + 10 +5123.974797 + 20 +5330.442459 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11B7 + 8 +ERDBODEN + 10 +5125.30432 + 20 +5339.601153 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11B8 + 8 +ERDBODEN + 10 +5126.350727 + 20 +5350.707561 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11B9 + 8 +ERDBODEN + 10 +5127.497056 + 20 +5363.179032 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11BA + 8 +ERDBODEN + 10 +5129.126344 + 20 +5376.432917 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11BB + 8 +ERDBODEN + 10 +5131.621631 + 20 +5389.886568 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11BC + 8 +ERDBODEN + 10 +5135.365953 + 20 +5402.957335 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11BD + 8 +ERDBODEN + 10 +5140.74235 + 20 +5415.062569 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11BE + 8 +ERDBODEN + 10 +5122.55359 + 20 +5448.348486 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +11BF + 8 +ERDBODEN + 10 +5267.50835 + 20 +5456.871851 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +11C0 + 8 +ERDBODEN + 10 +5284.561862 + 20 +5354.591863 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +11C1 + 8 +ERDBODEN + 10 +5233.401325 + 20 +5277.88184 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +11C2 + 8 +ERDBODEN + 10 +5096.973418 + 20 +5320.498533 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +11C3 + 8 +ERDBODEN + 0 +POLYLINE + 5 +11C4 + 8 +ERDBODEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 5 + 40 +12.5 + 41 +12.5 + 75 + 6 + 0 +VERTEX + 5 +11C5 + 8 +ERDBODEN + 10 +5357.134482 + 20 +4729.750892 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +11C6 + 8 +ERDBODEN + 10 +5220.362263 + 20 +4836.864477 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11C7 + 8 +ERDBODEN + 10 +5210.368175 + 20 +4854.385499 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11C8 + 8 +ERDBODEN + 10 +5202.538693 + 20 +4872.914014 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11C9 + 8 +ERDBODEN + 10 +5196.791197 + 20 +4892.136213 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11CA + 8 +ERDBODEN + 10 +5193.04307 + 20 +4911.738287 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11CB + 8 +ERDBODEN + 10 +5191.211693 + 20 +4931.406425 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11CC + 8 +ERDBODEN + 10 +5191.214447 + 20 +4950.826819 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11CD + 8 +ERDBODEN + 10 +5192.968713 + 20 +4969.685659 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11CE + 8 +ERDBODEN + 10 +5196.391874 + 20 +4987.669136 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11CF + 8 +ERDBODEN + 10 +5201.398557 + 20 +5004.490966 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11D0 + 8 +ERDBODEN + 10 +5207.892373 + 20 +5019.974978 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11D1 + 8 +ERDBODEN + 10 +5215.774181 + 20 +5033.972524 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11D2 + 8 +ERDBODEN + 10 +5224.944837 + 20 +5046.334958 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11D3 + 8 +ERDBODEN + 10 +5235.305201 + 20 +5056.913633 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11D4 + 8 +ERDBODEN + 10 +5246.756129 + 20 +5065.559904 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11D5 + 8 +ERDBODEN + 10 +5259.198479 + 20 +5072.125124 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11D6 + 8 +ERDBODEN + 10 +5272.533109 + 20 +5076.460647 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11D7 + 8 +ERDBODEN + 10 +5286.636092 + 20 +5078.486643 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11D8 + 8 +ERDBODEN + 10 +5301.284357 + 20 +5078.398556 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11D9 + 8 +ERDBODEN + 10 +5316.230049 + 20 +5076.460646 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11DA + 8 +ERDBODEN + 10 +5331.225311 + 20 +5072.937172 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11DB + 8 +ERDBODEN + 10 +5346.02229 + 20 +5068.092396 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11DC + 8 +ERDBODEN + 10 +5360.373128 + 20 +5062.190578 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11DD + 8 +ERDBODEN + 10 +5374.02997 + 20 +5055.495977 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11DE + 8 +ERDBODEN + 10 +5386.744962 + 20 +5048.272854 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11DF + 8 +ERDBODEN + 10 +5398.319818 + 20 +5040.711146 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11E0 + 8 +ERDBODEN + 10 +5408.754538 + 20 +5032.703498 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11E1 + 8 +ERDBODEN + 10 +5418.098693 + 20 +5024.068231 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11E2 + 8 +ERDBODEN + 10 +5426.401855 + 20 +5014.623666 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11E3 + 8 +ERDBODEN + 10 +5433.713595 + 20 +5004.188125 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11E4 + 8 +ERDBODEN + 10 +5440.083483 + 20 +4992.57993 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11E5 + 8 +ERDBODEN + 10 +5445.561092 + 20 +4979.617402 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11E6 + 8 +ERDBODEN + 10 +5450.195991 + 20 +4965.118861 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11E7 + 8 +ERDBODEN + 10 +5454.037753 + 20 +4948.987965 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11E8 + 8 +ERDBODEN + 10 +5457.135947 + 20 +4931.469703 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11E9 + 8 +ERDBODEN + 10 +5459.540147 + 20 +4912.894401 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11EA + 8 +ERDBODEN + 10 +5461.299921 + 20 +4893.592383 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11EB + 8 +ERDBODEN + 10 +5462.464842 + 20 +4873.893975 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11EC + 8 +ERDBODEN + 10 +5463.084481 + 20 +4854.1295 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11ED + 8 +ERDBODEN + 10 +5463.208409 + 20 +4834.629286 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11EE + 8 +ERDBODEN + 10 +5462.886197 + 20 +4815.723655 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11EF + 8 +ERDBODEN + 10 +5462.14263 + 20 +4797.720911 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11F0 + 8 +ERDBODEN + 10 +5460.903352 + 20 +4780.841273 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11F1 + 8 +ERDBODEN + 10 +5459.069221 + 20 +4765.282935 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11F2 + 8 +ERDBODEN + 10 +5456.541094 + 20 +4751.244094 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11F3 + 8 +ERDBODEN + 10 +5453.219829 + 20 +4738.922945 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11F4 + 8 +ERDBODEN + 10 +5449.006284 + 20 +4728.517684 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11F5 + 8 +ERDBODEN + 10 +5443.801317 + 20 +4720.226507 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11F6 + 8 +ERDBODEN + 10 +5437.505785 + 20 +4714.24761 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11F7 + 8 +ERDBODEN + 10 +5430.039824 + 20 +4710.710371 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11F8 + 8 +ERDBODEN + 10 +5421.40068 + 20 +4709.468896 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11F9 + 8 +ERDBODEN + 10 +5411.604877 + 20 +4710.308473 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11FA + 8 +ERDBODEN + 10 +5400.668938 + 20 +4713.01439 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11FB + 8 +ERDBODEN + 10 +5388.609387 + 20 +4717.371936 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11FC + 8 +ERDBODEN + 10 +5375.442747 + 20 +4723.166398 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11FD + 8 +ERDBODEN + 10 +5361.185543 + 20 +4730.183065 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11FE + 8 +ERDBODEN + 10 +5345.854299 + 20 +4738.207225 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11FF + 8 +ERDBODEN + 10 +5329.531632 + 20 +4747.070963 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1200 + 8 +ERDBODEN + 10 +5312.56454 + 20 +4756.793547 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1201 + 8 +ERDBODEN + 10 +5295.366116 + 20 +4767.441042 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1202 + 8 +ERDBODEN + 10 +5278.349454 + 20 +4779.079515 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1203 + 8 +ERDBODEN + 10 +5261.927644 + 20 +4791.775029 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1204 + 8 +ERDBODEN + 10 +5246.513781 + 20 +4805.593651 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1205 + 8 +ERDBODEN + 10 +5232.520956 + 20 +4820.601445 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1206 + 8 +ERDBODEN + 10 +5196.391874 + 20 +4822.77058 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1207 + 8 +ERDBODEN + 10 +5179.4716 + 20 +5000.353647 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1208 + 8 +ERDBODEN + 10 +5264.072972 + 20 +5101.829646 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1209 + 8 +ERDBODEN + 10 +5399.435168 + 20 +5051.091647 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +120A + 8 +ERDBODEN + 10 +5458.656128 + 20 +4983.440891 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +120B + 8 +ERDBODEN + 10 +5467.116266 + 20 +4805.857959 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +120C + 8 +ERDBODEN + 10 +5450.195991 + 20 +4687.469203 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +120D + 8 +ERDBODEN + 0 +POLYLINE + 5 +120E + 8 +ERDBODEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 5 + 40 +12.5 + 41 +12.5 + 75 + 6 + 0 +VERTEX + 5 +120F + 8 +ERDBODEN + 10 +8330.442776 + 20 +3457.799361 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1210 + 8 +ERDBODEN + 10 +8281.725643 + 20 +3526.918659 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1211 + 8 +ERDBODEN + 10 +8280.743442 + 20 +3536.436061 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1212 + 8 +ERDBODEN + 10 +8281.234542 + 20 +3545.916645 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1213 + 8 +ERDBODEN + 10 +8283.051613 + 20 +3555.029052 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1214 + 8 +ERDBODEN + 10 +8286.047324 + 20 +3563.441919 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1215 + 8 +ERDBODEN + 10 +8290.074345 + 20 +3570.823888 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1216 + 8 +ERDBODEN + 10 +8294.985346 + 20 +3576.843599 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1217 + 8 +ERDBODEN + 10 +8300.632998 + 20 +3581.16969 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1218 + 8 +ERDBODEN + 10 +8306.86997 + 20 +3583.470801 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1219 + 8 +ERDBODEN + 10 +8313.545862 + 20 +3583.510686 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +121A + 8 +ERDBODEN + 10 +8320.497999 + 20 +3581.433548 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +121B + 8 +ERDBODEN + 10 +8327.560632 + 20 +3577.478701 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +121C + 8 +ERDBODEN + 10 +8334.568018 + 20 +3571.885463 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +121D + 8 +ERDBODEN + 10 +8341.354408 + 20 +3564.893149 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +121E + 8 +ERDBODEN + 10 +8347.754056 + 20 +3556.741075 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +121F + 8 +ERDBODEN + 10 +8353.601217 + 20 +3547.668557 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1220 + 8 +ERDBODEN + 10 +8358.730144 + 20 +3537.914911 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1221 + 8 +ERDBODEN + 10 +8363.005785 + 20 +3527.719452 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1222 + 8 +ERDBODEN + 10 +8366.415862 + 20 +3517.321497 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1223 + 8 +ERDBODEN + 10 +8368.978791 + 20 +3506.96036 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1224 + 8 +ERDBODEN + 10 +8370.712988 + 20 +3496.875357 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1225 + 8 +ERDBODEN + 10 +8371.63687 + 20 +3487.305803 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1226 + 8 +ERDBODEN + 10 +8371.768853 + 20 +3478.491014 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1227 + 8 +ERDBODEN + 10 +8371.127354 + 20 +3470.670306 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1228 + 8 +ERDBODEN + 10 +8369.730788 + 20 +3464.082992 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1229 + 8 +ERDBODEN + 10 +8367.619057 + 20 +3458.900891 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +122A + 8 +ERDBODEN + 10 +8364.918006 + 20 +3455.02582 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +122B + 8 +ERDBODEN + 10 +8361.774965 + 20 +3452.2921 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +122C + 8 +ERDBODEN + 10 +8358.337264 + 20 +3450.534051 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +122D + 8 +ERDBODEN + 10 +8354.752233 + 20 +3449.585992 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +122E + 8 +ERDBODEN + 10 +8351.167202 + 20 +3449.282243 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +122F + 8 +ERDBODEN + 10 +8347.729501 + 20 +3449.457125 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1230 + 8 +ERDBODEN + 10 +8344.58646 + 20 +3449.944957 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1231 + 8 +ERDBODEN + 10 +8341.83323 + 20 +3450.623013 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1232 + 8 +ERDBODEN + 10 +8339.356244 + 20 +3451.540384 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1233 + 8 +ERDBODEN + 10 +8336.989755 + 20 +3452.789115 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1234 + 8 +ERDBODEN + 10 +8334.568018 + 20 +3454.46125 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1235 + 8 +ERDBODEN + 10 +8331.925285 + 20 +3456.648834 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1236 + 8 +ERDBODEN + 10 +8328.895811 + 20 +3459.443913 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1237 + 8 +ERDBODEN + 10 +8325.313849 + 20 +3462.938531 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1238 + 8 +ERDBODEN + 10 +8321.013654 + 20 +3467.224732 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1239 + 8 +ERDBODEN + 10 +8315.909282 + 20 +3472.366949 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +123A + 8 +ERDBODEN + 10 +8310.234006 + 20 +3478.319158 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +123B + 8 +ERDBODEN + 10 +8304.300902 + 20 +3485.007725 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +123C + 8 +ERDBODEN + 10 +8298.423047 + 20 +3492.359012 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +123D + 8 +ERDBODEN + 10 +8292.913518 + 20 +3500.299385 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +123E + 8 +ERDBODEN + 10 +8288.085389 + 20 +3508.755208 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +123F + 8 +ERDBODEN + 10 +8284.251739 + 20 +3517.652844 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1240 + 8 +ERDBODEN + 10 +8264.438918 + 20 +3523.776875 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1241 + 8 +ERDBODEN + 10 +8302.155408 + 20 +3608.60509 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1242 + 8 +ERDBODEN + 10 +8368.159267 + 20 +3542.627575 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1243 + 8 +ERDBODEN + 10 +8377.58839 + 20 +3448.374076 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1244 + 8 +ERDBODEN + 10 +8339.871899 + 20 +3448.374076 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1245 + 8 +ERDBODEN + 0 +POLYLINE + 5 +1246 + 8 +ERDBODEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 5 + 40 +12.5 + 41 +12.5 + 75 + 6 + 0 +VERTEX + 5 +1247 + 8 +ERDBODEN + 10 +8031.123903 + 20 +3181.852322 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1248 + 8 +ERDBODEN + 10 +8020.184672 + 20 +3224.440612 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1249 + 8 +ERDBODEN + 10 +8021.711753 + 20 +3229.067238 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +124A + 8 +ERDBODEN + 10 +8024.088963 + 20 +3233.397113 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +124B + 8 +ERDBODEN + 10 +8027.248831 + 20 +3237.349306 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +124C + 8 +ERDBODEN + 10 +8031.123887 + 20 +3240.842883 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +124D + 8 +ERDBODEN + 10 +8035.64666 + 20 +3243.796911 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +124E + 8 +ERDBODEN + 10 +8040.74968 + 20 +3246.130458 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +124F + 8 +ERDBODEN + 10 +8046.365477 + 20 +3247.76259 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1250 + 8 +ERDBODEN + 10 +8052.42658 + 20 +3248.612376 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1251 + 8 +ERDBODEN + 10 +8058.849775 + 20 +3248.621364 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1252 + 8 +ERDBODEN + 10 +8065.488876 + 20 +3247.821027 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1253 + 8 +ERDBODEN + 10 +8072.181954 + 20 +3246.265322 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1254 + 8 +ERDBODEN + 10 +8078.76708 + 20 +3244.008204 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1255 + 8 +ERDBODEN + 10 +8085.082325 + 20 +3241.103629 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1256 + 8 +ERDBODEN + 10 +8090.965758 + 20 +3237.605552 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1257 + 8 +ERDBODEN + 10 +8096.255451 + 20 +3233.567929 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1258 + 8 +ERDBODEN + 10 +8100.789474 + 20 +3229.044716 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1259 + 8 +ERDBODEN + 10 +8104.434011 + 20 +3224.102233 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +125A + 8 +ERDBODEN + 10 +8107.167695 + 20 +3218.856256 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +125B + 8 +ERDBODEN + 10 +8108.997276 + 20 +3213.434929 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +125C + 8 +ERDBODEN + 10 +8109.929498 + 20 +3207.966393 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +125D + 8 +ERDBODEN + 10 +8109.97111 + 20 +3202.57879 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +125E + 8 +ERDBODEN + 10 +8109.128858 + 20 +3197.400262 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +125F + 8 +ERDBODEN + 10 +8107.40949 + 20 +3192.55895 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1260 + 8 +ERDBODEN + 10 +8104.819753 + 20 +3188.182998 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1261 + 8 +ERDBODEN + 10 +8101.390009 + 20 +3184.375818 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1262 + 8 +ERDBODEN + 10 +8097.245077 + 20 +3181.141905 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1263 + 8 +ERDBODEN + 10 +8092.533392 + 20 +3178.461028 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1264 + 8 +ERDBODEN + 10 +8087.403389 + 20 +3176.312954 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1265 + 8 +ERDBODEN + 10 +8082.003503 + 20 +3174.677449 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1266 + 8 +ERDBODEN + 10 +8076.482169 + 20 +3173.534282 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1267 + 8 +ERDBODEN + 10 +8070.987821 + 20 +3172.863218 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1268 + 8 +ERDBODEN + 10 +8065.668893 + 20 +3172.644027 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1269 + 8 +ERDBODEN + 10 +8060.645709 + 20 +3172.86097 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +126A + 8 +ERDBODEN + 10 +8055.92614 + 20 +3173.516297 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +126B + 8 +ERDBODEN + 10 +8051.489945 + 20 +3174.61675 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +126C + 8 +ERDBODEN + 10 +8047.316884 + 20 +3176.169075 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +126D + 8 +ERDBODEN + 10 +8043.386716 + 20 +3178.180016 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +126E + 8 +ERDBODEN + 10 +8039.679201 + 20 +3180.656316 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +126F + 8 +ERDBODEN + 10 +8036.174098 + 20 +3183.60472 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1270 + 8 +ERDBODEN + 10 +8032.851166 + 20 +3187.031972 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1271 + 8 +ERDBODEN + 10 +8029.709282 + 20 +3190.929079 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1272 + 8 +ERDBODEN + 10 +8026.823787 + 20 +3195.224103 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1273 + 8 +ERDBODEN + 10 +8024.28914 + 20 +3199.829366 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1274 + 8 +ERDBODEN + 10 +8022.199799 + 20 +3204.657193 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1275 + 8 +ERDBODEN + 10 +8020.650224 + 20 +3209.619907 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1276 + 8 +ERDBODEN + 10 +8019.734872 + 20 +3214.629832 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1277 + 8 +ERDBODEN + 10 +8019.548202 + 20 +3219.599293 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1278 + 8 +ERDBODEN + 10 +8010.396949 + 20 +3226.742664 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1279 + 8 +ERDBODEN + 10 +8048.396333 + 20 +3257.820693 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +127A + 8 +ERDBODEN + 10 +8110.577197 + 20 +3233.64882 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +127B + 8 +ERDBODEN + 10 +8114.031722 + 20 +3181.852322 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +127C + 8 +ERDBODEN + 10 +8062.214434 + 20 +3168.039879 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +127D + 8 +ERDBODEN + 0 +POLYLINE + 5 +127E + 8 +ERDBODEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 5 + 40 +12.5 + 41 +12.5 + 75 + 6 + 0 +VERTEX + 5 +127F + 8 +ERDBODEN + 10 +8107.122672 + 20 +3692.912321 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1280 + 8 +ERDBODEN + 10 +8162.970403 + 20 +3757.945847 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1281 + 8 +ERDBODEN + 10 +8170.097548 + 20 +3758.758536 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1282 + 8 +ERDBODEN + 10 +8177.130231 + 20 +3757.433265 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1283 + 8 +ERDBODEN + 10 +8183.920018 + 20 +3754.152131 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1284 + 8 +ERDBODEN + 10 +8190.318474 + 20 +3749.097232 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1285 + 8 +ERDBODEN + 10 +8196.177163 + 20 +3742.450666 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1286 + 8 +ERDBODEN + 10 +8201.347651 + 20 +3734.394532 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1287 + 8 +ERDBODEN + 10 +8205.681501 + 20 +3725.110926 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1288 + 8 +ERDBODEN + 10 +8209.030281 + 20 +3714.781946 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1289 + 8 +ERDBODEN + 10 +8211.269168 + 20 +3703.617792 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +128A + 8 +ERDBODEN + 10 +8212.367801 + 20 +3691.941069 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +128B + 8 +ERDBODEN + 10 +8212.319436 + 20 +3680.102482 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +128C + 8 +ERDBODEN + 10 +8211.117324 + 20 +3668.452737 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +128D + 8 +ERDBODEN + 10 +8208.75472 + 20 +3657.342542 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +128E + 8 +ERDBODEN + 10 +8205.224877 + 20 +3647.1226 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +128F + 8 +ERDBODEN + 10 +8200.52105 + 20 +3638.14362 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1290 + 8 +ERDBODEN + 10 +8194.636491 + 20 +3630.756306 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1291 + 8 +ERDBODEN + 10 +8187.616182 + 20 +3625.23268 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1292 + 8 +ERDBODEN + 10 +8179.712011 + 20 +3621.53003 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1293 + 8 +ERDBODEN + 10 +8171.227596 + 20 +3619.526956 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1294 + 8 +ERDBODEN + 10 +8162.466553 + 20 +3619.102061 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1295 + 8 +ERDBODEN + 10 +8153.732498 + 20 +3620.133946 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1296 + 8 +ERDBODEN + 10 +8145.329048 + 20 +3622.501214 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1297 + 8 +ERDBODEN + 10 +8137.55982 + 20 +3626.082467 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1298 + 8 +ERDBODEN + 10 +8130.72843 + 20 +3630.756306 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1299 + 8 +ERDBODEN + 10 +8125.083394 + 20 +3636.406953 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +129A + 8 +ERDBODEN + 10 +8120.652825 + 20 +3642.941112 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +129B + 8 +ERDBODEN + 10 +8117.409736 + 20 +3650.271106 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +129C + 8 +ERDBODEN + 10 +8115.32714 + 20 +3658.309257 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +129D + 8 +ERDBODEN + 10 +8114.37805 + 20 +3666.967888 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +129E + 8 +ERDBODEN + 10 +8114.535477 + 20 +3676.159323 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +129F + 8 +ERDBODEN + 10 +8115.772435 + 20 +3685.795885 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +12A0 + 8 +ERDBODEN + 10 +8118.061936 + 20 +3695.789897 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +12A1 + 8 +ERDBODEN + 10 +8121.36125 + 20 +3706.014339 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +12A2 + 8 +ERDBODEN + 10 +8125.564672 + 20 +3716.184825 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +12A3 + 8 +ERDBODEN + 10 +8130.550755 + 20 +3725.977626 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +12A4 + 8 +ERDBODEN + 10 +8136.19805 + 20 +3735.069014 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +12A5 + 8 +ERDBODEN + 10 +8142.38511 + 20 +3743.135258 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +12A6 + 8 +ERDBODEN + 10 +8148.990488 + 20 +3749.852631 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +12A7 + 8 +ERDBODEN + 10 +8155.892735 + 20 +3754.897404 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +12A8 + 8 +ERDBODEN + 10 +8162.394682 + 20 +3782.693135 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +12A9 + 8 +ERDBODEN + 10 +8221.121021 + 20 +3723.99022 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +12AA + 8 +ERDBODEN + 10 +8207.30292 + 20 +3610.037663 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +12AB + 8 +ERDBODEN + 10 +8117.486247 + 20 +3620.396963 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +12AC + 8 +ERDBODEN + 0 +POINT + 5 +12AD + 8 +ERDBODEN + 10 +4415.0 + 20 +3147.5 + 30 +0.0 + 0 +POINT + 5 +12AE + 8 +ERDBODEN + 10 +8302.5 + 20 +3972.5 + 30 +0.0 + 0 +POINT + 5 +12AF + 8 +ERDBODEN + 10 +8565.0 + 20 +3947.5 + 30 +0.0 + 0 +POLYLINE + 5 +12B0 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +37.4875 + 41 +37.4875 + 0 +VERTEX + 5 +1F3F + 8 +MAUERWERK + 10 +6322.4 + 20 +10965.782507 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +1F40 + 8 +MAUERWERK + 10 +6359.9125 + 20 +10965.782507 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +1F41 + 8 +MAUERWERK + 0 +POINT + 5 +12B4 + 8 +MAUERWERK + 10 +6353.65625 + 20 +10965.782507 + 30 +0.0 + 0 +POLYLINE + 5 +12B5 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +37.4875 + 41 +37.4875 + 0 +VERTEX + 5 +1F42 + 8 +MAUERWERK + 10 +6834.9 + 20 +10965.782507 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +1F43 + 8 +MAUERWERK + 10 +6872.4125 + 20 +10965.782507 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +1F44 + 8 +MAUERWERK + 0 +POINT + 5 +12B9 + 8 +MAUERWERK + 10 +6866.15625 + 20 +10965.782507 + 30 +0.0 + 0 +POLYLINE + 5 +12BA + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +1F45 + 8 +0 + 10 +18650.0 + 20 +125.0 + 30 +0.0 + 0 +VERTEX + 5 +1F46 + 8 +0 + 10 +18650.0 + 20 +1495.0 + 30 +0.0 + 0 +SEQEND + 5 +1F47 + 8 +0 + 0 +POLYLINE + 5 +12BE + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +1F48 + 8 +0 + 10 +17525.0 + 20 +125.0 + 30 +0.0 + 0 +VERTEX + 5 +1F49 + 8 +0 + 10 +17525.0 + 20 +1500.0 + 30 +0.0 + 0 +SEQEND + 5 +1F4A + 8 +0 + 0 +POLYLINE + 5 +12C2 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +1F4B + 8 +0 + 10 +17525.0 + 20 +500.0 + 30 +0.0 + 0 +VERTEX + 5 +1F4C + 8 +0 + 10 +20900.0 + 20 +500.0 + 30 +0.0 + 0 +SEQEND + 5 +1F4D + 8 +0 + 0 +POLYLINE + 5 +12C6 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +1F4E + 8 +0 + 10 +17525.0 + 20 +1125.0 + 30 +0.0 + 0 +VERTEX + 5 +1F4F + 8 +0 + 10 +20900.0 + 20 +1125.0 + 30 +0.0 + 0 +SEQEND + 5 +1F50 + 8 +0 + 0 +POLYLINE + 5 +12CA + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +1F51 + 8 +0 + 10 +17525.0 + 20 +250.0 + 30 +0.0 + 0 +VERTEX + 5 +1F52 + 8 +0 + 10 +16275.0 + 20 +250.0 + 30 +0.0 + 0 +SEQEND + 5 +1F53 + 8 +0 + 0 +POLYLINE + 5 +12CE + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +1F54 + 8 +0 + 10 +17525.0 + 20 +375.0 + 30 +0.0 + 0 +VERTEX + 5 +1F55 + 8 +0 + 10 +16275.0 + 20 +375.0 + 30 +0.0 + 0 +SEQEND + 5 +1F56 + 8 +0 + 0 +POLYLINE + 5 +12D2 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +1F57 + 8 +0 + 10 +17525.0 + 20 +500.0 + 30 +0.0 + 0 +VERTEX + 5 +1F58 + 8 +0 + 10 +16275.0 + 20 +500.0 + 30 +0.0 + 0 +SEQEND + 5 +1F59 + 8 +0 + 0 +POLYLINE + 5 +12D6 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +1F5A + 8 +0 + 10 +17525.0 + 20 +625.0 + 30 +0.0 + 0 +VERTEX + 5 +1F5B + 8 +0 + 10 +16275.0 + 20 +625.0 + 30 +0.0 + 0 +SEQEND + 5 +1F5C + 8 +0 + 0 +POLYLINE + 5 +12DA + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +1F5D + 8 +0 + 10 +17525.0 + 20 +750.0 + 30 +0.0 + 0 +VERTEX + 5 +1F5E + 8 +0 + 10 +16275.0 + 20 +750.0 + 30 +0.0 + 0 +SEQEND + 5 +1F5F + 8 +0 + 0 +POLYLINE + 5 +12DE + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +1F60 + 8 +0 + 10 +17525.0 + 20 +875.0 + 30 +0.0 + 0 +VERTEX + 5 +1F61 + 8 +0 + 10 +16275.0 + 20 +875.0 + 30 +0.0 + 0 +SEQEND + 5 +1F62 + 8 +0 + 0 +POLYLINE + 5 +12E2 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +1F63 + 8 +0 + 10 +17525.0 + 20 +1000.0 + 30 +0.0 + 0 +VERTEX + 5 +1F64 + 8 +0 + 10 +16275.0 + 20 +1000.0 + 30 +0.0 + 0 +SEQEND + 5 +1F65 + 8 +0 + 0 +POLYLINE + 5 +12E6 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +1F66 + 8 +0 + 10 +17525.0 + 20 +1125.0 + 30 +0.0 + 0 +VERTEX + 5 +1F67 + 8 +0 + 10 +16275.0 + 20 +1125.0 + 30 +0.0 + 0 +SEQEND + 5 +1F68 + 8 +0 + 0 +TEXT + 5 +12EA + 8 +LEGENDE-70 + 10 +19130.0 + 20 +730.0 + 30 +0.0 + 40 +175.0 + 1 +D1, D2, D3 + 41 +0.75 + 0 +POLYLINE + 5 +12EB + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +1F69 + 8 +0 + 10 +18650.0 + 20 +1375.0 + 30 +0.0 + 0 +VERTEX + 5 +1F6A + 8 +0 + 10 +20901.604101 + 20 +1375.0 + 30 +0.0 + 0 +SEQEND + 5 +1F6B + 8 +0 + 0 +TEXT + 5 +12EF + 8 +LEGENDE-35 + 10 +18745.266644 + 20 +1210.264338 + 30 +0.0 + 40 +87.5 + 1 +MASSTAB 1:10 1:5 + 0 +TEXT + 5 +12F0 + 8 +LEGENDE-35 + 10 +18730.0 + 20 +260.0 + 30 +0.0 + 40 +87.5 + 1 +Name + 0 +TEXT + 5 +12F1 + 8 +LEGENDE-35 + 10 +17705.0 + 20 +225.0 + 30 +0.0 + 40 +87.5 + 1 +001 + 0 +POLYLINE + 5 +12F2 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +1F6C + 8 +0 + 10 +20525.0 + 20 +125.0 + 30 +0.0 + 0 +VERTEX + 5 +1F6D + 8 +0 + 10 +20525.0 + 20 +495.0 + 30 +0.0 + 0 +SEQEND + 5 +1F6E + 8 +0 + 0 +TEXT + 5 +12F6 + 8 +LEGENDE-35 + 10 +20580.0 + 20 +365.0 + 30 +0.0 + 40 +87.5 + 1 +Blatt + 41 +0.75 + 0 +TEXT + 5 +12F7 + 8 +LEGENDE-35 + 10 +20670.0 + 20 +170.0 + 30 +0.0 + 40 +87.5 + 1 +6 + 0 +POLYLINE + 5 +12F8 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 0 +VERTEX + 5 +1F6F + 8 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1F70 + 8 +0 + 10 +21025.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1F71 + 8 +0 + 10 +21025.0 + 20 +14850.0 + 30 +0.0 + 0 +VERTEX + 5 +1F72 + 8 +0 + 10 +0.0 + 20 +14850.0 + 30 +0.0 + 0 +SEQEND + 5 +1F73 + 8 +0 + 0 +POLYLINE + 5 +12FE + 8 +ERDBODEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +1F74 + 8 +ERDBODEN + 10 +4517.777778 + 20 +2497.5 + 30 +0.0 + 0 +VERTEX + 5 +1F75 + 8 +ERDBODEN + 10 +4790.0 + 20 +2847.5 + 30 +0.0 + 0 +SEQEND + 5 +1F76 + 8 +ERDBODEN + 0 +POLYLINE + 5 +1302 + 8 +ERDBODEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +1F77 + 8 +ERDBODEN + 10 +4692.777778 + 20 +2497.5 + 30 +0.0 + 0 +VERTEX + 5 +1F78 + 8 +ERDBODEN + 10 +4965.0 + 20 +2847.5 + 30 +0.0 + 0 +SEQEND + 5 +1F79 + 8 +ERDBODEN + 0 +POLYLINE + 5 +1306 + 8 +SCHNITTKANTEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +1F7A + 8 +SCHNITTKANTEN + 10 +5321.15625 + 20 +12530.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F7B + 8 +SCHNITTKANTEN + 10 +7331.15625 + 20 +12530.782507 + 30 +0.0 + 0 +SEQEND + 5 +1F7C + 8 +SCHNITTKANTEN + 0 +POLYLINE + 5 +130A + 8 +VORSATZSCHALE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +1F7D + 8 +VORSATZSCHALE + 10 +6036.15625 + 20 +11275.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F7E + 8 +VORSATZSCHALE + 10 +6036.15625 + 20 +11415.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F7F + 8 +VORSATZSCHALE + 10 +6141.15625 + 20 +11415.782507 + 30 +0.0 + 0 +SEQEND + 5 +1F80 + 8 +VORSATZSCHALE + 0 +POLYLINE + 5 +130F + 8 +VORSATZSCHALE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1F81 + 8 +VORSATZSCHALE + 10 +6096.15625 + 20 +11275.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F82 + 8 +VORSATZSCHALE + 10 +6096.15625 + 20 +11335.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F83 + 8 +VORSATZSCHALE + 10 +6111.15625 + 20 +11345.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F84 + 8 +VORSATZSCHALE + 10 +6096.15625 + 20 +11360.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F85 + 8 +VORSATZSCHALE + 10 +6111.15625 + 20 +11370.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F86 + 8 +VORSATZSCHALE + 10 +6096.15625 + 20 +11380.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F87 + 8 +VORSATZSCHALE + 10 +6116.15625 + 20 +11395.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F88 + 8 +VORSATZSCHALE + 10 +6096.15625 + 20 +11410.782507 + 30 +0.0 + 0 +SEQEND + 5 +1F89 + 8 +VORSATZSCHALE + 0 +POLYLINE + 5 +1319 + 8 +VORSATZSCHALE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1F8A + 8 +VORSATZSCHALE + 10 +6026.15625 + 20 +11375.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F8B + 8 +VORSATZSCHALE + 10 +6066.15625 + 20 +11375.782507 + 30 +0.0 + 0 +SEQEND + 5 +1F8C + 8 +VORSATZSCHALE + 0 +POLYLINE + 5 +131D + 8 +VORSATZSCHALE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1F8D + 8 +VORSATZSCHALE + 10 +6091.15625 + 20 +11375.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F8E + 8 +VORSATZSCHALE + 10 +6121.15625 + 20 +11375.782507 + 30 +0.0 + 0 +SEQEND + 5 +1F8F + 8 +VORSATZSCHALE + 0 +POLYLINE + 5 +1321 + 8 +VORSATZSCHALE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1F90 + 8 +VORSATZSCHALE + 10 +6141.15625 + 20 +11375.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F91 + 8 +VORSATZSCHALE + 10 +6191.15625 + 20 +11375.782507 + 30 +0.0 + 0 +SEQEND + 5 +1F92 + 8 +VORSATZSCHALE + 0 +POLYLINE + 5 +1325 + 8 +VORSATZSCHALE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1F93 + 8 +VORSATZSCHALE + 10 +6216.15625 + 20 +11375.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F94 + 8 +VORSATZSCHALE + 10 +6271.15625 + 20 +11375.782507 + 30 +0.0 + 0 +SEQEND + 5 +1F95 + 8 +VORSATZSCHALE + 0 +POLYLINE + 5 +1329 + 8 +VORSATZSCHALE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1F96 + 8 +VORSATZSCHALE + 10 +6026.15625 + 20 +11375.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F97 + 8 +VORSATZSCHALE + 10 +6011.15625 + 20 +11390.782507 + 30 +0.0 + 0 +SEQEND + 5 +1F98 + 8 +VORSATZSCHALE + 0 +POLYLINE + 5 +132D + 8 +VORSATZSCHALE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1F99 + 8 +VORSATZSCHALE + 10 +6026.15625 + 20 +11375.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F9A + 8 +VORSATZSCHALE + 10 +6011.15625 + 20 +11360.782507 + 30 +0.0 + 0 +SEQEND + 5 +1F9B + 8 +VORSATZSCHALE + 0 +POLYLINE + 5 +1331 + 8 +VORSATZSCHALE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1F9C + 8 +VORSATZSCHALE + 10 +6026.15625 + 20 +11315.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F9D + 8 +VORSATZSCHALE + 10 +6011.15625 + 20 +11300.782507 + 30 +0.0 + 0 +SEQEND + 5 +1F9E + 8 +VORSATZSCHALE + 0 +POLYLINE + 5 +1335 + 8 +VORSATZSCHALE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1F9F + 8 +VORSATZSCHALE + 10 +6026.15625 + 20 +11315.782507 + 30 +0.0 + 0 +VERTEX + 5 +1FA0 + 8 +VORSATZSCHALE + 10 +6011.15625 + 20 +11330.782507 + 30 +0.0 + 0 +SEQEND + 5 +1FA1 + 8 +VORSATZSCHALE + 0 +POLYLINE + 5 +1339 + 8 +VORSATZSCHALE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1FA2 + 8 +VORSATZSCHALE + 10 +6216.15625 + 20 +11315.782507 + 30 +0.0 + 0 +VERTEX + 5 +1FA3 + 8 +VORSATZSCHALE + 10 +6271.15625 + 20 +11315.782507 + 30 +0.0 + 0 +SEQEND + 5 +1FA4 + 8 +VORSATZSCHALE + 0 +POLYLINE + 5 +133D + 8 +VORSATZSCHALE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1FA5 + 8 +VORSATZSCHALE + 10 +6141.15625 + 20 +11315.782507 + 30 +0.0 + 0 +VERTEX + 5 +1FA6 + 8 +VORSATZSCHALE + 10 +6191.15625 + 20 +11315.782507 + 30 +0.0 + 0 +SEQEND + 5 +1FA7 + 8 +VORSATZSCHALE + 0 +POLYLINE + 5 +1341 + 8 +VORSATZSCHALE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1FA8 + 8 +VORSATZSCHALE + 10 +6091.15625 + 20 +11315.782507 + 30 +0.0 + 0 +VERTEX + 5 +1FA9 + 8 +VORSATZSCHALE + 10 +6121.15625 + 20 +11315.782507 + 30 +0.0 + 0 +SEQEND + 5 +1FAA + 8 +VORSATZSCHALE + 0 +POLYLINE + 5 +1345 + 8 +VORSATZSCHALE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1FAB + 8 +VORSATZSCHALE + 10 +6026.15625 + 20 +11315.782507 + 30 +0.0 + 0 +VERTEX + 5 +1FAC + 8 +VORSATZSCHALE + 10 +6066.15625 + 20 +11315.782507 + 30 +0.0 + 0 +SEQEND + 5 +1FAD + 8 +VORSATZSCHALE + 0 +POLYLINE + 5 +1349 + 8 +ESTRICH + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +1FAE + 8 +ESTRICH + 10 +7061.15625 + 20 +11865.782507 + 30 +0.0 + 0 +VERTEX + 5 +1FAF + 8 +ESTRICH + 10 +7141.15625 + 20 +11865.782507 + 30 +0.0 + 0 +VERTEX + 5 +1FB0 + 8 +ESTRICH + 10 +7141.15625 + 20 +11630.782507 + 30 +0.0 + 0 +VERTEX + 5 +1FB1 + 8 +ESTRICH + 10 +7061.15625 + 20 +11630.782507 + 30 +0.0 + 0 +SEQEND + 5 +1FB2 + 8 +ESTRICH + 0 +POLYLINE + 5 +134F + 8 +ESTRICH + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1FB3 + 8 +ESTRICH + 10 +7098.631736 + 20 +12115.796252 + 30 +0.0 + 0 +VERTEX + 5 +1FB4 + 8 +ESTRICH + 10 +7151.15625 + 20 +12075.782507 + 30 +0.0 + 0 +VERTEX + 5 +1FB5 + 8 +ESTRICH + 10 +7151.15625 + 20 +11930.782507 + 30 +0.0 + 0 +VERTEX + 5 +1FB6 + 8 +ESTRICH + 10 +7098.589174 + 20 +11965.768101 + 30 +0.0 + 0 +SEQEND + 5 +1FB7 + 8 +ESTRICH + 0 +POLYLINE + 5 +1355 + 8 +ESTRICH + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +1356 + 8 +ESTRICH + 10 +7133.193551 + 20 +11946.338012 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1357 + 8 +ESTRICH + 10 +7133.193551 + 20 +11946.338012 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1358 + 8 +ESTRICH + 10 +7134.786969 + 20 +11948.581252 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1359 + 8 +ESTRICH + 10 +7136.53263 + 20 +11950.598851 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +135A + 8 +ESTRICH + 10 +7138.414783 + 20 +11952.375069 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +135B + 8 +ESTRICH + 10 +7140.41768 + 20 +11953.894164 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +135C + 8 +ESTRICH + 10 +7142.525572 + 20 +11955.140395 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +135D + 8 +ESTRICH + 10 +7144.72271 + 20 +11956.098022 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +135E + 8 +ESTRICH + 10 +7146.993344 + 20 +11956.751303 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +135F + 8 +ESTRICH + 10 +7149.321725 + 20 +11957.084497 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1360 + 8 +ESTRICH + 10 +7137.225677 + 20 +11952.606847 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1361 + 8 +ESTRICH + 10 +7143.049712 + 20 +11956.636753 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1362 + 8 +ESTRICH + 10 +7149.321725 + 20 +11957.084497 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1363 + 8 +ESTRICH + 0 +POLYLINE + 5 +1364 + 8 +ESTRICH + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +1365 + 8 +ESTRICH + 10 +7119.305595 + 20 +11955.293416 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1366 + 8 +ESTRICH + 10 +7119.305595 + 20 +11955.293416 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1367 + 8 +ESTRICH + 10 +7121.931242 + 20 +11957.963663 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1368 + 8 +ESTRICH + 10 +7124.434832 + 20 +11960.283642 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1369 + 8 +ESTRICH + 10 +7126.820302 + 20 +11962.280904 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +136A + 8 +ESTRICH + 10 +7129.091589 + 20 +11963.982998 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +136B + 8 +ESTRICH + 10 +7131.252629 + 20 +11965.417476 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +136C + 8 +ESTRICH + 10 +7133.30736 + 20 +11966.611888 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +136D + 8 +ESTRICH + 10 +7135.259719 + 20 +11967.593784 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +136E + 8 +ESTRICH + 10 +7137.113641 + 20 +11968.390714 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +136F + 8 +ESTRICH + 10 +7138.876565 + 20 +11969.027606 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1370 + 8 +ESTRICH + 10 +7140.569925 + 20 +11969.518887 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1371 + 8 +ESTRICH + 10 +7142.218657 + 20 +11969.876362 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1372 + 8 +ESTRICH + 10 +7143.847698 + 20 +11970.111835 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1373 + 8 +ESTRICH + 10 +7145.481982 + 20 +11970.237112 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1374 + 8 +ESTRICH + 10 +7147.146446 + 20 +11970.263997 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1375 + 8 +ESTRICH + 10 +7148.866026 + 20 +11970.204294 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1376 + 8 +ESTRICH + 10 +7150.665656 + 20 +11970.069807 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1377 + 8 +ESTRICH + 10 +7126.473561 + 20 +11962.905588 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1378 + 8 +ESTRICH + 10 +7138.121632 + 20 +11970.069807 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1379 + 8 +ESTRICH + 10 +7145.737741 + 20 +11970.517655 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +137A + 8 +ESTRICH + 10 +7150.665656 + 20 +11970.069807 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +137B + 8 +ESTRICH + 0 +POLYLINE + 5 +137C + 8 +ESTRICH + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +137D + 8 +ESTRICH + 10 +7110.345553 + 20 +11962.009995 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +137E + 8 +ESTRICH + 10 +7110.345553 + 20 +11962.009995 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +137F + 8 +ESTRICH + 10 +7112.272548 + 20 +11966.339897 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1380 + 8 +ESTRICH + 10 +7114.337348 + 20 +11969.992893 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1381 + 8 +ESTRICH + 10 +7116.509767 + 20 +11973.068683 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1382 + 8 +ESTRICH + 10 +7118.759617 + 20 +11975.666967 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1383 + 8 +ESTRICH + 10 +7121.056713 + 20 +11977.887446 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1384 + 8 +ESTRICH + 10 +7123.370869 + 20 +11979.829818 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1385 + 8 +ESTRICH + 10 +7125.671897 + 20 +11981.593783 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1386 + 8 +ESTRICH + 10 +7127.929612 + 20 +11983.279041 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1387 + 8 +ESTRICH + 10 +7130.128701 + 20 +11984.973049 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1388 + 8 +ESTRICH + 10 +7132.313353 + 20 +11986.714284 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1389 + 8 +ESTRICH + 10 +7134.54263 + 20 +11988.528984 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +138A + 8 +ESTRICH + 10 +7136.875597 + 20 +11990.443384 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +138B + 8 +ESTRICH + 10 +7139.371314 + 20 +11992.483719 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +138C + 8 +ESTRICH + 10 +7142.088846 + 20 +11994.676225 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +138D + 8 +ESTRICH + 10 +7145.087255 + 20 +11997.047138 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +138E + 8 +ESTRICH + 10 +7148.425604 + 20 +11999.622693 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +138F + 8 +ESTRICH + 10 +7115.273634 + 20 +11974.547561 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1390 + 8 +ESTRICH + 10 +7128.713613 + 20 +11983.055117 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1391 + 8 +ESTRICH + 10 +7139.017586 + 20 +11992.458369 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1392 + 8 +ESTRICH + 10 +7148.425604 + 20 +11999.622693 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1393 + 8 +ESTRICH + 0 +POLYLINE + 5 +1394 + 8 +ESTRICH + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +1395 + 8 +ESTRICH + 10 +7102.281467 + 20 +11992.010521 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1396 + 8 +ESTRICH + 10 +7102.281467 + 20 +11992.010521 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1397 + 8 +ESTRICH + 10 +7107.166405 + 20 +11994.772161 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1398 + 8 +ESTRICH + 10 +7111.162773 + 20 +11997.354072 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1399 + 8 +ESTRICH + 10 +7114.41101 + 20 +11999.765439 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +139A + 8 +ESTRICH + 10 +7117.051554 + 20 +12002.015446 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +139B + 8 +ESTRICH + 10 +7119.224845 + 20 +12004.113277 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +139C + 8 +ESTRICH + 10 +7121.071321 + 20 +12006.068115 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +139D + 8 +ESTRICH + 10 +7122.731422 + 20 +12007.889144 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +139E + 8 +ESTRICH + 10 +7124.345587 + 20 +12009.585547 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +139F + 8 +ESTRICH + 10 +7126.045504 + 20 +12011.174381 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13A0 + 8 +ESTRICH + 10 +7127.92786 + 20 +12012.704182 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13A1 + 8 +ESTRICH + 10 +7130.080591 + 20 +12014.23136 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13A2 + 8 +ESTRICH + 10 +7132.591633 + 20 +12015.812325 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13A3 + 8 +ESTRICH + 10 +7135.548922 + 20 +12017.503485 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13A4 + 8 +ESTRICH + 10 +7139.040393 + 20 +12019.361251 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13A5 + 8 +ESTRICH + 10 +7143.153983 + 20 +12021.44203 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13A6 + 8 +ESTRICH + 10 +7147.977627 + 20 +12023.802232 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13A7 + 8 +ESTRICH + 10 +7116.617566 + 20 +11999.622693 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +13A8 + 8 +ESTRICH + 10 +7123.337555 + 20 +12010.816922 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +13A9 + 8 +ESTRICH + 10 +7134.089671 + 20 +12017.085653 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +13AA + 8 +ESTRICH + 10 +7147.977627 + 20 +12023.802232 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +13AB + 8 +ESTRICH + 0 +POLYLINE + 5 +13AC + 8 +ESTRICH + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +13AD + 8 +ESTRICH + 10 +7104.073541 + 20 +12010.369074 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +13AE + 8 +ESTRICH + 10 +7104.073541 + 20 +12010.369074 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13AF + 8 +ESTRICH + 10 +7108.149751 + 20 +12016.116179 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13B0 + 8 +ESTRICH + 10 +7111.693079 + 20 +12021.000103 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13B1 + 8 +ESTRICH + 10 +7114.779652 + 20 +12025.123171 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13B2 + 8 +ESTRICH + 10 +7117.485594 + 20 +12028.587703 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13B3 + 8 +ESTRICH + 10 +7119.887033 + 20 +12031.496023 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13B4 + 8 +ESTRICH + 10 +7122.060093 + 20 +12033.950452 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13B5 + 8 +ESTRICH + 10 +7124.080902 + 20 +12036.053313 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13B6 + 8 +ESTRICH + 10 +7126.025584 + 20 +12037.906929 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13B7 + 8 +ESTRICH + 10 +7127.970267 + 20 +12039.594381 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13B8 + 8 +ESTRICH + 10 +7129.991075 + 20 +12041.12179 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13B9 + 8 +ESTRICH + 10 +7132.164136 + 20 +12042.476038 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13BA + 8 +ESTRICH + 10 +7134.565574 + 20 +12043.644006 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13BB + 8 +ESTRICH + 10 +7137.271517 + 20 +12044.612574 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13BC + 8 +ESTRICH + 10 +7140.358089 + 20 +12045.368623 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13BD + 8 +ESTRICH + 10 +7143.901417 + 20 +12045.899035 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13BE + 8 +ESTRICH + 10 +7147.977627 + 20 +12046.190691 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13BF + 8 +ESTRICH + 10 +7115.721611 + 20 +12026.936546 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +13C0 + 8 +ESTRICH + 10 +7126.025584 + 20 +12039.474112 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +13C1 + 8 +ESTRICH + 10 +7136.329557 + 20 +12045.742946 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +13C2 + 8 +ESTRICH + 10 +7147.977627 + 20 +12046.190691 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +13C3 + 8 +ESTRICH + 0 +POLYLINE + 5 +13C4 + 8 +ESTRICH + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +13C5 + 8 +ESTRICH + 10 +7103.625564 + 20 +12045.295098 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +13C6 + 8 +ESTRICH + 10 +7103.625564 + 20 +12045.295098 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13C7 + 8 +ESTRICH + 10 +7108.895057 + 20 +12048.989859 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13C8 + 8 +ESTRICH + 10 +7113.651353 + 20 +12052.058879 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13C9 + 8 +ESTRICH + 10 +7117.948268 + 20 +12054.569062 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13CA + 8 +ESTRICH + 10 +7121.839616 + 20 +12056.587311 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13CB + 8 +ESTRICH + 10 +7125.37921 + 20 +12058.180527 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13CC + 8 +ESTRICH + 10 +7128.620865 + 20 +12059.415615 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13CD + 8 +ESTRICH + 10 +7131.618394 + 20 +12060.359478 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13CE + 8 +ESTRICH + 10 +7134.425612 + 20 +12061.079018 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13CF + 8 +ESTRICH + 10 +7137.079709 + 20 +12061.631517 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13D0 + 8 +ESTRICH + 10 +7139.551369 + 20 +12062.035779 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13D1 + 8 +ESTRICH + 10 +7141.794655 + 20 +12062.300986 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13D2 + 8 +ESTRICH + 10 +7143.763629 + 20 +12062.43632 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13D3 + 8 +ESTRICH + 10 +7145.412352 + 20 +12062.450963 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13D4 + 8 +ESTRICH + 10 +7146.694885 + 20 +12062.354098 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13D5 + 8 +ESTRICH + 10 +7147.56529 + 20 +12062.154906 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13D6 + 8 +ESTRICH + 10 +7147.977627 + 20 +12061.86257 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13D7 + 8 +ESTRICH + 10 +7118.40964 + 20 +12056.041583 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +13D8 + 8 +ESTRICH + 10 +7135.88158 + 20 +12062.758162 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +13D9 + 8 +ESTRICH + 10 +7147.52965 + 20 +12062.758162 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +13DA + 8 +ESTRICH + 10 +7147.977627 + 20 +12061.86257 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +13DB + 8 +ESTRICH + 0 +POLYLINE + 5 +13DC + 8 +ESTRICH + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +13DD + 8 +ESTRICH + 10 +7101.385512 + 20 +12073.056799 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +13DE + 8 +ESTRICH + 10 +7101.385512 + 20 +12073.056799 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13DF + 8 +ESTRICH + 10 +7106.187523 + 20 +12076.682689 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13E0 + 8 +ESTRICH + 10 +7111.073535 + 20 +12079.563461 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13E1 + 8 +ESTRICH + 10 +7115.875547 + 20 +12081.793568 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13E2 + 8 +ESTRICH + 10 +7120.425558 + 20 +12083.467463 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13E3 + 8 +ESTRICH + 10 +7124.555568 + 20 +12084.679597 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13E4 + 8 +ESTRICH + 10 +7128.097575 + 20 +12085.524423 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13E5 + 8 +ESTRICH + 10 +7130.883577 + 20 +12086.096392 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13E6 + 8 +ESTRICH + 10 +7132.745574 + 20 +12086.489957 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13E7 + 8 +ESTRICH + 10 +7113.929537 + 20 +12083.803284 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +13E8 + 8 +ESTRICH + 10 +7129.16159 + 20 +12085.594365 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +13E9 + 8 +ESTRICH + 10 +7132.745574 + 20 +12086.489957 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +13EA + 8 +ESTRICH + 0 +POLYLINE + 5 +13EB + 8 +SCHNITTKANTEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +1FB8 + 8 +SCHNITTKANTEN + 10 +8606.15625 + 20 +12090.782507 + 30 +0.0 + 0 +VERTEX + 5 +1FB9 + 8 +SCHNITTKANTEN + 10 +8606.15625 + 20 +11075.782507 + 30 +0.0 + 0 +SEQEND + 5 +1FBA + 8 +SCHNITTKANTEN + 0 +POLYLINE + 5 +13EF + 8 +SCHNITTKANTEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +1FBB + 8 +SCHNITTKANTEN + 10 +5836.15625 + 20 +9540.782507 + 30 +0.0 + 0 +VERTEX + 5 +1FBC + 8 +SCHNITTKANTEN + 10 +7236.15625 + 20 +9540.782507 + 30 +0.0 + 0 +SEQEND + 5 +1FBD + 8 +SCHNITTKANTEN + 0 +INSERT + 5 +13F3 + 8 +SCHRAFFUR + 2 +*X3 + 10 +431.15625 + 20 +800.782507 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +DASH,I +1040 +200.0 +1040 +0.785398 +1002 +} + 0 +INSERT + 5 +13F4 + 8 +SCHRAFFUR + 2 +*X4 + 10 +431.15625 + 20 +800.782507 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +HONEY,I +1040 +200.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +13F5 + 8 +SCHRAFFUR + 2 +*X5 + 10 +431.15625 + 20 +800.782507 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI34,I +1040 +200.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +13F6 + 8 +SCHRAFFUR + 2 +*X6 + 10 +431.15625 + 20 +800.782507 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +1000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +13F7 + 8 +SCHRAFFUR + 2 +*X7 + 10 +431.15625 + 20 +800.782507 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +HONEY,I +1040 +200.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +13F8 + 8 +SCHRAFFUR + 2 +*X8 + 10 +431.15625 + 20 +800.782507 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +HONEY,I +1040 +200.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +13F9 + 8 +SCHRAFFUR + 2 +*X9 + 10 +431.15625 + 20 +800.782507 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +450.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +13FA + 8 +SCHRAFFUR + 2 +*X10 + 10 +431.15625 + 20 +800.782507 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +450.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +13FB + 8 +SCHRAFFUR + 2 +*X11 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +AR-SAND,I +1040 +450.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +13FC + 8 +SCHRAFFUR + 2 +*X12 + 10 +431.15625 + 20 +800.782507 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +AR-SAND,I +1040 +20.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +13FD + 8 +SCHRAFFUR + 2 +*X13 + 10 +431.15625 + 20 +800.782507 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +1000.0 +1040 +0.0 +1002 +} + 0 +POLYLINE + 5 +13FE + 8 +PE-FOLIE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +25.0 + 41 +25.0 + 0 +VERTEX + 5 +1FBE + 8 +PE-FOLIE + 10 +5503.65625 + 20 +11300.782507 + 30 +0.0 + 0 +VERTEX + 5 +1FBF + 8 +PE-FOLIE + 10 +5801.15625 + 20 +11300.782507 + 30 +0.0 + 0 +VERTEX + 5 +1FC0 + 8 +PE-FOLIE + 10 +6103.65625 + 20 +11645.782507 + 30 +0.0 + 0 +VERTEX + 5 +1FC1 + 8 +PE-FOLIE + 10 +7058.614038 + 20 +11645.782507 + 30 +0.0 + 0 +SEQEND + 5 +1FC2 + 8 +PE-FOLIE + 0 +INSERT + 5 +1404 + 8 +SCHRAFFUR + 2 +*X14 + 10 +431.15625 + 20 +800.782507 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +HONEY,I +1040 +125.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +1405 + 8 +SCHRAFFUR + 2 +*X15 + 10 +431.15625 + 20 +800.782507 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +1000.0 +1040 +0.0 +1002 +} + 0 +POLYLINE + 5 +1406 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1FC3 + 8 +MAUERWERK + 10 +7056.15625 + 20 +11225.782507 + 30 +0.0 + 0 +VERTEX + 5 +1FC4 + 8 +MAUERWERK + 10 +7093.65625 + 20 +11225.782507 + 30 +0.0 + 0 +VERTEX + 5 +1FC5 + 8 +MAUERWERK + 10 +7093.65625 + 20 +9540.782507 + 30 +0.0 + 0 +SEQEND + 5 +1FC6 + 8 +MAUERWERK + 0 +POLYLINE + 5 +140B + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1FC7 + 8 +MAUERWERK + 10 +7056.15625 + 20 +9540.782507 + 30 +0.0 + 0 +VERTEX + 5 +1FC8 + 8 +MAUERWERK + 10 +7056.15625 + 20 +11225.782507 + 30 +0.0 + 0 +SEQEND + 5 +1FC9 + 8 +MAUERWERK + 0 +POLYLINE + 5 +140F + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1FCA + 8 +MAUERWERK + 10 +6141.15625 + 20 +11130.782507 + 30 +0.0 + 0 +VERTEX + 5 +1FCB + 8 +MAUERWERK + 10 +6103.65625 + 20 +11130.782507 + 30 +0.0 + 0 +VERTEX + 5 +1FCC + 8 +MAUERWERK + 10 +6103.65625 + 20 +9540.782507 + 30 +0.0 + 0 +SEQEND + 5 +1FCD + 8 +MAUERWERK + 0 +POLYLINE + 5 +1414 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1FCE + 8 +MAUERWERK + 10 +6141.15625 + 20 +9540.782507 + 30 +0.0 + 0 +VERTEX + 5 +1FCF + 8 +MAUERWERK + 10 +6141.15625 + 20 +11130.782507 + 30 +0.0 + 0 +SEQEND + 5 +1FD0 + 8 +MAUERWERK + 0 +POLYLINE + 5 +1418 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +1FD1 + 8 +MAUERWERK + 10 +6141.15625 + 20 +9540.782507 + 30 +0.0 + 0 +VERTEX + 5 +1FD2 + 8 +MAUERWERK + 10 +6141.15625 + 20 +9855.782507 + 30 +0.0 + 0 +SEQEND + 5 +1FD3 + 8 +MAUERWERK + 0 +POLYLINE + 5 +141C + 8 +PE-FOLIE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +25.0 + 41 +25.0 + 0 +VERTEX + 5 +1FD4 + 8 +PE-FOLIE + 10 +7061.15625 + 20 +9870.782507 + 30 +0.0 + 0 +VERTEX + 5 +1FD5 + 8 +PE-FOLIE + 10 +6126.15625 + 20 +9870.782507 + 30 +0.0 + 0 +VERTEX + 5 +1FD6 + 8 +PE-FOLIE + 10 +6126.15625 + 20 +9540.782507 + 30 +0.0 + 0 +SEQEND + 5 +1FD7 + 8 +PE-FOLIE + 0 +POLYLINE + 5 +1421 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +1FD8 + 8 +MAUERWERK + 10 +6136.15625 + 20 +9855.782507 + 30 +0.0 + 0 +VERTEX + 5 +1FD9 + 8 +MAUERWERK + 10 +7056.15625 + 20 +9855.782507 + 30 +0.0 + 0 +VERTEX + 5 +1FDA + 8 +MAUERWERK + 10 +7054.462701 + 20 +9540.782507 + 30 +0.0 + 0 +SEQEND + 5 +1FDB + 8 +MAUERWERK + 0 +POLYLINE + 5 +1426 + 8 +DECKEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +1FDC + 8 +DECKEN + 10 +6141.15625 + 20 +11141.921786 + 30 +0.0 + 0 +VERTEX + 5 +1FDD + 8 +DECKEN + 10 +7053.65625 + 20 +11141.921786 + 30 +0.0 + 0 +VERTEX + 5 +1FDE + 8 +DECKEN + 10 +7053.65625 + 20 +11228.282507 + 30 +0.0 + 0 +VERTEX + 5 +1FDF + 8 +DECKEN + 10 +8606.15625 + 20 +11228.282507 + 30 +0.0 + 0 +SEQEND + 5 +1FE0 + 8 +DECKEN + 0 +POLYLINE + 5 +142C + 8 +DECKEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +1FE1 + 8 +DECKEN + 10 +8606.15625 + 20 +11628.282507 + 30 +0.0 + 0 +VERTEX + 5 +1FE2 + 8 +DECKEN + 10 +6141.15625 + 20 +11628.282507 + 30 +0.0 + 0 +VERTEX + 5 +1FE3 + 8 +DECKEN + 10 +6141.15625 + 20 +11141.921786 + 30 +0.0 + 0 +SEQEND + 5 +1FE4 + 8 +DECKEN + 0 +POLYLINE + 5 +1431 + 8 +ESTRICH + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +1FE5 + 8 +ESTRICH + 10 +8606.15625 + 20 +11728.282507 + 30 +0.0 + 0 +VERTEX + 5 +1FE6 + 8 +ESTRICH + 10 +7141.15625 + 20 +11728.282507 + 30 +0.0 + 0 +VERTEX + 5 +1FE7 + 8 +ESTRICH + 10 +7141.15625 + 20 +11628.282507 + 30 +0.0 + 0 +SEQEND + 5 +1FE8 + 8 +ESTRICH + 0 +POLYLINE + 5 +1436 + 8 +PE-FOLIE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +25.0 + 41 +25.0 + 0 +VERTEX + 5 +1FE9 + 8 +PE-FOLIE + 10 +7140.773723 + 20 +11745.782507 + 30 +0.0 + 0 +VERTEX + 5 +1FEA + 8 +PE-FOLIE + 10 +8606.15625 + 20 +11745.782507 + 30 +0.0 + 0 +SEQEND + 5 +1FEB + 8 +PE-FOLIE + 0 +POLYLINE + 5 +143A + 8 +ESTRICH + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +1FEC + 8 +ESTRICH + 10 +7141.15625 + 20 +11765.782507 + 30 +0.0 + 0 +VERTEX + 5 +1FED + 8 +ESTRICH + 10 +7141.15625 + 20 +11865.782507 + 30 +0.0 + 0 +VERTEX + 5 +1FEE + 8 +ESTRICH + 10 +8606.15625 + 20 +11865.782507 + 30 +0.0 + 0 +SEQEND + 5 +1FEF + 8 +ESTRICH + 0 +POLYLINE + 5 +143F + 8 +ESTRICH + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +1FF0 + 8 +ESTRICH + 10 +8606.15625 + 20 +11765.782507 + 30 +0.0 + 0 +VERTEX + 5 +1FF1 + 8 +ESTRICH + 10 +7141.15625 + 20 +11765.782507 + 30 +0.0 + 0 +SEQEND + 5 +1FF2 + 8 +ESTRICH + 0 +POLYLINE + 5 +1443 + 8 +ESTRICH + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +1FF3 + 8 +ESTRICH + 10 +7141.15625 + 20 +11865.782507 + 30 +0.0 + 0 +VERTEX + 5 +1FF4 + 8 +ESTRICH + 10 +7141.15625 + 20 +11928.282507 + 30 +0.0 + 0 +VERTEX + 5 +1FF5 + 8 +ESTRICH + 10 +8606.15625 + 20 +11928.282507 + 30 +0.0 + 0 +SEQEND + 5 +1FF6 + 8 +ESTRICH + 0 +POLYLINE + 5 +1448 + 8 +ESTRICH + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +1FF7 + 8 +ESTRICH + 10 +8606.15625 + 20 +11865.782507 + 30 +0.0 + 0 +VERTEX + 5 +1FF8 + 8 +ESTRICH + 10 +7141.15625 + 20 +11865.782507 + 30 +0.0 + 0 +SEQEND + 5 +1FF9 + 8 +ESTRICH + 0 +LINE + 5 +144C + 8 +0 + 62 + 0 + 10 +7462.0437 + 20 +11225.782507 + 30 +0.0 + 11 +7863.49178 + 21 +11627.230587 + 31 +0.0 + 0 +LINE + 5 +144D + 8 +0 + 62 + 0 + 10 +6957.779631 + 20 +11145.782507 + 30 +0.0 + 11 +7439.227711 + 21 +11627.230587 + 31 +0.0 + 0 +LINE + 5 +144E + 8 +0 + 62 + 0 + 10 +6533.515563 + 20 +11145.782507 + 30 +0.0 + 11 +7014.963642 + 21 +11627.230587 + 31 +0.0 + 0 +LINE + 5 +144F + 8 +0 + 62 + 0 + 10 +6141.15625 + 20 +11177.687263 + 30 +0.0 + 11 +6590.699573 + 21 +11627.230587 + 31 +0.0 + 0 +LINE + 5 +1450 + 8 +0 + 62 + 0 + 10 +6141.15625 + 20 +11601.951332 + 30 +0.0 + 11 +6166.435505 + 21 +11627.230587 + 31 +0.0 + 0 +LINE + 5 +1451 + 8 +0 + 62 + 0 + 10 +7886.307769 + 20 +11225.782507 + 30 +0.0 + 11 +8287.755848 + 21 +11627.230587 + 31 +0.0 + 0 +LINE + 5 +1452 + 8 +0 + 62 + 0 + 10 +8310.571837 + 20 +11225.782507 + 30 +0.0 + 11 +8606.15625 + 21 +11521.366919 + 31 +0.0 + 0 +LINE + 5 +1453 + 8 +0 + 62 + 0 + 10 +7696.678426 + 20 +11248.285199 + 30 +0.0 + 11 +7802.744443 + 21 +11354.351216 + 31 +0.0 + 0 +LINE + 5 +1454 + 8 +0 + 62 + 0 + 10 +7855.777452 + 20 +11407.384225 + 30 +0.0 + 11 +7961.843469 + 21 +11513.450242 + 31 +0.0 + 0 +LINE + 5 +1455 + 8 +0 + 62 + 0 + 10 +8014.876478 + 20 +11566.483251 + 30 +0.0 + 11 +8075.623814 + 21 +11627.230587 + 31 +0.0 + 0 +LINE + 5 +1456 + 8 +0 + 62 + 0 + 10 +7249.911665 + 20 +11225.782507 + 30 +0.0 + 11 +7272.414357 + 21 +11248.285199 + 31 +0.0 + 0 +LINE + 5 +1457 + 8 +0 + 62 + 0 + 10 +7325.447366 + 20 +11301.318208 + 30 +0.0 + 11 +7431.513383 + 21 +11407.384225 + 31 +0.0 + 0 +LINE + 5 +1458 + 8 +0 + 62 + 0 + 10 +7484.546392 + 20 +11460.417233 + 30 +0.0 + 11 +7590.612409 + 21 +11566.483251 + 31 +0.0 + 0 +LINE + 5 +1459 + 8 +0 + 62 + 0 + 10 +7643.645417 + 20 +11619.516259 + 30 +0.0 + 11 +7651.359745 + 21 +11627.230587 + 31 +0.0 + 0 +LINE + 5 +145A + 8 +0 + 62 + 0 + 10 +6795.11728 + 20 +11195.25219 + 30 +0.0 + 11 +6901.183297 + 21 +11301.318208 + 31 +0.0 + 0 +LINE + 5 +145B + 8 +0 + 62 + 0 + 10 +6954.216306 + 20 +11354.351216 + 30 +0.0 + 11 +7060.282323 + 21 +11460.417233 + 31 +0.0 + 0 +LINE + 5 +145C + 8 +0 + 62 + 0 + 10 +7113.315331 + 20 +11513.450242 + 30 +0.0 + 11 +7219.381349 + 21 +11619.516259 + 31 +0.0 + 0 +LINE + 5 +145D + 8 +0 + 62 + 0 + 10 +6321.383528 + 20 +11145.782507 + 30 +0.0 + 11 +6370.853211 + 21 +11195.25219 + 31 +0.0 + 0 +LINE + 5 +145E + 8 +0 + 62 + 0 + 10 +6423.88622 + 20 +11248.285199 + 30 +0.0 + 11 +6529.952237 + 21 +11354.351216 + 31 +0.0 + 0 +LINE + 5 +145F + 8 +0 + 62 + 0 + 10 +6582.985246 + 20 +11407.384225 + 30 +0.0 + 11 +6689.051263 + 21 +11513.450242 + 31 +0.0 + 0 +LINE + 5 +1460 + 8 +0 + 62 + 0 + 10 +6742.084271 + 20 +11566.483251 + 30 +0.0 + 11 +6802.831607 + 21 +11627.230587 + 31 +0.0 + 0 +LINE + 5 +1461 + 8 +0 + 62 + 0 + 10 +6141.15625 + 20 +11389.819298 + 30 +0.0 + 11 +6158.721177 + 21 +11407.384225 + 31 +0.0 + 0 +LINE + 5 +1462 + 8 +0 + 62 + 0 + 10 +6211.754185 + 20 +11460.417233 + 30 +0.0 + 11 +6317.820203 + 21 +11566.483251 + 31 +0.0 + 0 +LINE + 5 +1463 + 8 +0 + 62 + 0 + 10 +6370.853211 + 20 +11619.516259 + 30 +0.0 + 11 +6378.567539 + 21 +11627.230587 + 31 +0.0 + 0 +LINE + 5 +1464 + 8 +0 + 62 + 0 + 10 +8098.439803 + 20 +11225.782507 + 30 +0.0 + 11 +8173.975503 + 21 +11301.318208 + 31 +0.0 + 0 +LINE + 5 +1465 + 8 +0 + 62 + 0 + 10 +8227.008512 + 20 +11354.351216 + 30 +0.0 + 11 +8333.074529 + 21 +11460.417233 + 31 +0.0 + 0 +LINE + 5 +1466 + 8 +0 + 62 + 0 + 10 +8386.107538 + 20 +11513.450242 + 30 +0.0 + 11 +8492.173555 + 21 +11619.516259 + 31 +0.0 + 0 +LINE + 5 +1467 + 8 +0 + 62 + 0 + 10 +8522.703871 + 20 +11225.782507 + 30 +0.0 + 11 +8545.206563 + 21 +11248.285199 + 31 +0.0 + 0 +LINE + 5 +1468 + 8 +0 + 62 + 0 + 10 +8598.239572 + 20 +11301.318208 + 30 +0.0 + 11 +8606.15625 + 21 +11309.234885 + 31 +0.0 + 0 +POLYLINE + 5 +1469 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1FFA + 8 +MAUERWERK + 10 +7061.15625 + 20 +11865.782507 + 30 +0.0 + 0 +VERTEX + 5 +1FFB + 8 +MAUERWERK + 10 +7098.65625 + 20 +11865.782507 + 30 +0.0 + 0 +VERTEX + 5 +1FFC + 8 +MAUERWERK + 10 +7098.65625 + 20 +12530.782507 + 30 +0.0 + 0 +SEQEND + 5 +1FFD + 8 +MAUERWERK + 0 +POLYLINE + 5 +146E + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1FFE + 8 +MAUERWERK + 10 +7061.15625 + 20 +12530.782507 + 30 +0.0 + 0 +VERTEX + 5 +1FFF + 8 +MAUERWERK + 10 +7061.15625 + 20 +11865.782507 + 30 +0.0 + 0 +SEQEND + 5 +2000 + 8 +MAUERWERK + 0 +POLYLINE + 5 +1472 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +2001 + 8 +MAUERWERK + 10 +6141.15625 + 20 +12530.782507 + 30 +0.0 + 0 +VERTEX + 5 +2002 + 8 +MAUERWERK + 10 +6141.15625 + 20 +11664.071973 + 30 +0.0 + 0 +SEQEND + 5 +2003 + 8 +MAUERWERK + 0 +POLYLINE + 5 +1476 + 8 +DAEMMUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2004 + 8 +DAEMMUNG + 10 +5941.15625 + 20 +12530.782507 + 30 +0.0 + 0 +VERTEX + 5 +2005 + 8 +DAEMMUNG + 10 +5941.15625 + 20 +11278.282507 + 30 +0.0 + 0 +VERTEX + 5 +2006 + 8 +DAEMMUNG + 10 +6141.15625 + 20 +11278.282507 + 30 +0.0 + 0 +VERTEX + 5 +2007 + 8 +DAEMMUNG + 10 +6141.15625 + 20 +12530.782507 + 30 +0.0 + 0 +SEQEND + 5 +2008 + 8 +DAEMMUNG + 0 +POLYLINE + 5 +147C + 8 +VORSATZSCHALE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +2009 + 8 +VORSATZSCHALE + 10 +5791.15625 + 20 +12530.782507 + 30 +0.0 + 0 +VERTEX + 5 +200A + 8 +VORSATZSCHALE + 10 +5791.15625 + 20 +11498.282507 + 30 +0.0 + 0 +VERTEX + 5 +200B + 8 +VORSATZSCHALE + 10 +5503.65625 + 20 +11498.282507 + 30 +0.0 + 0 +SEQEND + 5 +200C + 8 +VORSATZSCHALE + 0 +POLYLINE + 5 +1481 + 8 +VORSATZSCHALE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +200D + 8 +VORSATZSCHALE + 10 +5503.65625 + 20 +11498.282507 + 30 +0.0 + 0 +VERTEX + 5 +200E + 8 +VORSATZSCHALE + 10 +5503.65625 + 20 +12530.782507 + 30 +0.0 + 0 +SEQEND + 5 +200F + 8 +VORSATZSCHALE + 0 +POLYLINE + 5 +1485 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +2010 + 8 +MAUERWERK + 10 +6141.15625 + 20 +11665.782507 + 30 +0.0 + 0 +VERTEX + 5 +2011 + 8 +MAUERWERK + 10 +7061.15625 + 20 +11665.782507 + 30 +0.0 + 0 +VERTEX + 5 +2012 + 8 +MAUERWERK + 10 +7061.15625 + 20 +12530.782507 + 30 +0.0 + 0 +SEQEND + 5 +2013 + 8 +MAUERWERK + 0 +POLYLINE + 5 +148A + 8 +ESTRICH + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +2014 + 8 +ESTRICH + 10 +7083.556019 + 20 +11628.282507 + 30 +0.0 + 0 +VERTEX + 5 +2015 + 8 +ESTRICH + 10 +8606.15625 + 20 +11628.282507 + 30 +0.0 + 0 +SEQEND + 5 +2016 + 8 +ESTRICH + 0 +LINE + 5 +148E + 8 +0 + 62 + 0 + 10 +6116.244194 + 20 +10101.004597 + 30 +0.0 + 11 +6116.244194 + 21 +10101.004597 + 31 +0.0 + 0 +LINE + 5 +148F + 8 +0 + 62 + 0 + 10 +6140.362135 + 20 +10119.510945 + 30 +0.0 + 11 +6140.362135 + 21 +10119.510945 + 31 +0.0 + 0 +LINE + 5 +1490 + 8 +0 + 62 + 0 + 10 +6114.984326 + 20 +10139.541073 + 30 +0.0 + 11 +6114.984326 + 21 +10139.541073 + 31 +0.0 + 0 +LINE + 5 +1491 + 8 +0 + 62 + 0 + 10 +6139.102268 + 20 +10158.04742 + 30 +0.0 + 11 +6139.102268 + 21 +10158.04742 + 31 +0.0 + 0 +LINE + 5 +1492 + 8 +0 + 62 + 0 + 10 +6113.724459 + 20 +10178.077548 + 30 +0.0 + 11 +6113.724459 + 21 +10178.077548 + 31 +0.0 + 0 +LINE + 5 +1493 + 8 +0 + 62 + 0 + 10 +6137.842401 + 20 +10196.583896 + 30 +0.0 + 11 +6137.842401 + 21 +10196.583896 + 31 +0.0 + 0 +LINE + 5 +1494 + 8 +0 + 62 + 0 + 10 +6112.464592 + 20 +10216.614023 + 30 +0.0 + 11 +6112.464592 + 21 +10216.614023 + 31 +0.0 + 0 +LINE + 5 +1495 + 8 +0 + 62 + 0 + 10 +6136.582534 + 20 +10235.120371 + 30 +0.0 + 11 +6136.582534 + 21 +10235.120371 + 31 +0.0 + 0 +LINE + 5 +1496 + 8 +0 + 62 + 0 + 10 +6111.204725 + 20 +10255.150499 + 30 +0.0 + 11 +6111.204725 + 21 +10255.150499 + 31 +0.0 + 0 +LINE + 5 +1497 + 8 +0 + 62 + 0 + 10 +6135.322666 + 20 +10273.656846 + 30 +0.0 + 11 +6135.322666 + 21 +10273.656846 + 31 +0.0 + 0 +LINE + 5 +1498 + 8 +0 + 62 + 0 + 10 +6109.944858 + 20 +10293.686974 + 30 +0.0 + 11 +6109.944858 + 21 +10293.686974 + 31 +0.0 + 0 +LINE + 5 +1499 + 8 +0 + 62 + 0 + 10 +6134.062799 + 20 +10312.193322 + 30 +0.0 + 11 +6134.062799 + 21 +10312.193322 + 31 +0.0 + 0 +LINE + 5 +149A + 8 +0 + 62 + 0 + 10 +6108.684991 + 20 +10332.22345 + 30 +0.0 + 11 +6108.684991 + 21 +10332.22345 + 31 +0.0 + 0 +LINE + 5 +149B + 8 +0 + 62 + 0 + 10 +6132.802932 + 20 +10350.729797 + 30 +0.0 + 11 +6132.802932 + 21 +10350.729797 + 31 +0.0 + 0 +LINE + 5 +149C + 8 +0 + 62 + 0 + 10 +6107.425123 + 20 +10370.759925 + 30 +0.0 + 11 +6107.425123 + 21 +10370.759925 + 31 +0.0 + 0 +LINE + 5 +149D + 8 +0 + 62 + 0 + 10 +6131.543065 + 20 +10389.266272 + 30 +0.0 + 11 +6131.543065 + 21 +10389.266272 + 31 +0.0 + 0 +LINE + 5 +149E + 8 +0 + 62 + 0 + 10 +6106.165256 + 20 +10409.2964 + 30 +0.0 + 11 +6106.165256 + 21 +10409.2964 + 31 +0.0 + 0 +LINE + 5 +149F + 8 +0 + 62 + 0 + 10 +6130.283198 + 20 +10427.802748 + 30 +0.0 + 11 +6130.283198 + 21 +10427.802748 + 31 +0.0 + 0 +LINE + 5 +14A0 + 8 +0 + 62 + 0 + 10 +6104.905389 + 20 +10447.832876 + 30 +0.0 + 11 +6104.905389 + 21 +10447.832876 + 31 +0.0 + 0 +LINE + 5 +14A1 + 8 +0 + 62 + 0 + 10 +6129.023331 + 20 +10466.339223 + 30 +0.0 + 11 +6129.023331 + 21 +10466.339223 + 31 +0.0 + 0 +LINE + 5 +14A2 + 8 +0 + 62 + 0 + 10 +6127.763464 + 20 +10504.875699 + 30 +0.0 + 11 +6127.763464 + 21 +10504.875699 + 31 +0.0 + 0 +LINE + 5 +14A3 + 8 +0 + 62 + 0 + 10 +6126.503596 + 20 +10543.412174 + 30 +0.0 + 11 +6126.503596 + 21 +10543.412174 + 31 +0.0 + 0 +LINE + 5 +14A4 + 8 +0 + 62 + 0 + 10 +6125.243729 + 20 +10581.948649 + 30 +0.0 + 11 +6125.243729 + 21 +10581.948649 + 31 +0.0 + 0 +LINE + 5 +14A5 + 8 +0 + 62 + 0 + 10 +6123.983862 + 20 +10620.485125 + 30 +0.0 + 11 +6123.983862 + 21 +10620.485125 + 31 +0.0 + 0 +LINE + 5 +14A6 + 8 +0 + 62 + 0 + 10 +6122.723995 + 20 +10659.0216 + 30 +0.0 + 11 +6122.723995 + 21 +10659.0216 + 31 +0.0 + 0 +LINE + 5 +14A7 + 8 +0 + 62 + 0 + 10 +6121.464128 + 20 +10697.558075 + 30 +0.0 + 11 +6121.464128 + 21 +10697.558075 + 31 +0.0 + 0 +LINE + 5 +14A8 + 8 +0 + 62 + 0 + 10 +6120.204261 + 20 +10736.094551 + 30 +0.0 + 11 +6120.204261 + 21 +10736.094551 + 31 +0.0 + 0 +LINE + 5 +14A9 + 8 +0 + 62 + 0 + 10 +6118.944393 + 20 +10774.631026 + 30 +0.0 + 11 +6118.944393 + 21 +10774.631026 + 31 +0.0 + 0 +LINE + 5 +14AA + 8 +0 + 62 + 0 + 10 +6117.684526 + 20 +10813.167502 + 30 +0.0 + 11 +6117.684526 + 21 +10813.167502 + 31 +0.0 + 0 +LINE + 5 +14AB + 8 +0 + 62 + 0 + 10 +6116.424659 + 20 +10851.703977 + 30 +0.0 + 11 +6116.424659 + 21 +10851.703977 + 31 +0.0 + 0 +LINE + 5 +14AC + 8 +0 + 62 + 0 + 10 +6115.164792 + 20 +10890.240452 + 30 +0.0 + 11 +6115.164792 + 21 +10890.240452 + 31 +0.0 + 0 +LINE + 5 +14AD + 8 +0 + 62 + 0 + 10 +6113.904925 + 20 +10928.776928 + 30 +0.0 + 11 +6113.904925 + 21 +10928.776928 + 31 +0.0 + 0 +LINE + 5 +14AE + 8 +0 + 62 + 0 + 10 +6140.878938 + 20 +10949.474816 + 30 +0.0 + 11 +6140.878938 + 21 +10949.474816 + 31 +0.0 + 0 +LINE + 5 +14AF + 8 +0 + 62 + 0 + 10 +6112.645058 + 20 +10967.313403 + 30 +0.0 + 11 +6112.645058 + 21 +10967.313403 + 31 +0.0 + 0 +LINE + 5 +14B0 + 8 +0 + 62 + 0 + 10 +6139.619071 + 20 +10988.011292 + 30 +0.0 + 11 +6139.619071 + 21 +10988.011292 + 31 +0.0 + 0 +LINE + 5 +14B1 + 8 +0 + 62 + 0 + 10 +6111.38519 + 20 +11005.849879 + 30 +0.0 + 11 +6111.38519 + 21 +11005.849879 + 31 +0.0 + 0 +LINE + 5 +14B2 + 8 +0 + 62 + 0 + 10 +6138.359204 + 20 +11026.547767 + 30 +0.0 + 11 +6138.359204 + 21 +11026.547767 + 31 +0.0 + 0 +LINE + 5 +14B3 + 8 +0 + 62 + 0 + 10 +6110.125323 + 20 +11044.386354 + 30 +0.0 + 11 +6110.125323 + 21 +11044.386354 + 31 +0.0 + 0 +LINE + 5 +14B4 + 8 +0 + 62 + 0 + 10 +6137.099337 + 20 +11065.084243 + 30 +0.0 + 11 +6137.099337 + 21 +11065.084243 + 31 +0.0 + 0 +LINE + 5 +14B5 + 8 +0 + 62 + 0 + 10 +6108.865456 + 20 +11082.922829 + 30 +0.0 + 11 +6108.865456 + 21 +11082.922829 + 31 +0.0 + 0 +LINE + 5 +14B6 + 8 +0 + 62 + 0 + 10 +6135.83947 + 20 +11103.620718 + 30 +0.0 + 11 +6135.83947 + 21 +11103.620718 + 31 +0.0 + 0 +LINE + 5 +14B7 + 8 +0 + 62 + 0 + 10 +6107.605589 + 20 +11121.459305 + 30 +0.0 + 11 +6107.605589 + 21 +11121.459305 + 31 +0.0 + 0 +LINE + 5 +14B8 + 8 +0 + 62 + 0 + 10 +6117.504061 + 20 +10062.468122 + 30 +0.0 + 11 +6117.504061 + 21 +10062.468122 + 31 +0.0 + 0 +LINE + 5 +14B9 + 8 +0 + 62 + 0 + 10 +6118.763928 + 20 +10023.931647 + 30 +0.0 + 11 +6118.763928 + 21 +10023.931647 + 31 +0.0 + 0 +LINE + 5 +14BA + 8 +0 + 62 + 0 + 10 +6120.023795 + 20 +9985.395171 + 30 +0.0 + 11 +6120.023795 + 21 +9985.395171 + 31 +0.0 + 0 +LINE + 5 +14BB + 8 +0 + 62 + 0 + 10 +6121.283662 + 20 +9946.858696 + 30 +0.0 + 11 +6121.283662 + 21 +9946.858696 + 31 +0.0 + 0 +LINE + 5 +14BC + 8 +0 + 62 + 0 + 10 +6122.543529 + 20 +9908.32222 + 30 +0.0 + 11 +6122.543529 + 21 +9908.32222 + 31 +0.0 + 0 +LINE + 5 +14BD + 8 +0 + 62 + 0 + 10 +6123.803397 + 20 +9869.785745 + 30 +0.0 + 11 +6123.803397 + 21 +9869.785745 + 31 +0.0 + 0 +LINE + 5 +14BE + 8 +0 + 62 + 0 + 10 +6125.063264 + 20 +9831.24927 + 30 +0.0 + 11 +6125.063264 + 21 +9831.24927 + 31 +0.0 + 0 +LINE + 5 +14BF + 8 +0 + 62 + 0 + 10 +6126.323131 + 20 +9792.712794 + 30 +0.0 + 11 +6126.323131 + 21 +9792.712794 + 31 +0.0 + 0 +LINE + 5 +14C0 + 8 +0 + 62 + 0 + 10 +6127.582998 + 20 +9754.176319 + 30 +0.0 + 11 +6127.582998 + 21 +9754.176319 + 31 +0.0 + 0 +LINE + 5 +14C1 + 8 +0 + 62 + 0 + 10 +6128.842865 + 20 +9715.639844 + 30 +0.0 + 11 +6128.842865 + 21 +9715.639844 + 31 +0.0 + 0 +LINE + 5 +14C2 + 8 +0 + 62 + 0 + 10 +6104.318749 + 20 +9657.318622 + 30 +0.0 + 11 +6104.318749 + 21 +9657.318622 + 31 +0.0 + 0 +LINE + 5 +14C3 + 8 +0 + 62 + 0 + 10 +6130.102732 + 20 +9677.103368 + 30 +0.0 + 11 +6130.102732 + 21 +9677.103368 + 31 +0.0 + 0 +LINE + 5 +14C4 + 8 +0 + 62 + 0 + 10 +6105.578616 + 20 +9618.782146 + 30 +0.0 + 11 +6105.578616 + 21 +9618.782146 + 31 +0.0 + 0 +LINE + 5 +14C5 + 8 +0 + 62 + 0 + 10 +6131.3626 + 20 +9638.566893 + 30 +0.0 + 11 +6131.3626 + 21 +9638.566893 + 31 +0.0 + 0 +LINE + 5 +14C6 + 8 +0 + 62 + 0 + 10 +6106.838483 + 20 +9580.245671 + 30 +0.0 + 11 +6106.838483 + 21 +9580.245671 + 31 +0.0 + 0 +LINE + 5 +14C7 + 8 +0 + 62 + 0 + 10 +6132.622467 + 20 +9600.030417 + 30 +0.0 + 11 +6132.622467 + 21 +9600.030417 + 31 +0.0 + 0 +LINE + 5 +14C8 + 8 +0 + 62 + 0 + 10 +6108.09835 + 20 +9541.709196 + 30 +0.0 + 11 +6108.09835 + 21 +9541.709196 + 31 +0.0 + 0 +LINE + 5 +14C9 + 8 +0 + 62 + 0 + 10 +6133.882334 + 20 +9561.493942 + 30 +0.0 + 11 +6133.882334 + 21 +9561.493942 + 31 +0.0 + 0 +LINE + 5 +14CA + 8 +0 + 62 + 0 + 10 +6109.913009 + 20 +10092.601806 + 30 +0.0 + 11 +6109.913009 + 21 +10092.601806 + 31 +0.0 + 0 +LINE + 5 +14CB + 8 +0 + 62 + 0 + 10 +6126.172705 + 20 +10094.742435 + 30 +0.0 + 11 +6126.172705 + 21 +10094.742435 + 31 +0.0 + 0 +LINE + 5 +14CC + 8 +0 + 62 + 0 + 10 +6107.732783 + 20 +10144.097784 + 30 +0.0 + 11 +6107.732783 + 21 +10144.097784 + 31 +0.0 + 0 +LINE + 5 +14CD + 8 +0 + 62 + 0 + 10 +6134.898372 + 20 +10147.674202 + 30 +0.0 + 11 +6134.898372 + 21 +10147.674202 + 31 +0.0 + 0 +LINE + 5 +14CE + 8 +0 + 62 + 0 + 10 +6116.45845 + 20 +10197.029551 + 30 +0.0 + 11 +6116.45845 + 21 +10197.029551 + 31 +0.0 + 0 +LINE + 5 +14CF + 8 +0 + 62 + 0 + 10 +6126.868621 + 20 +10198.400076 + 30 +0.0 + 11 +6126.868621 + 21 +10198.400076 + 31 +0.0 + 0 +LINE + 5 +14D0 + 8 +0 + 62 + 0 + 10 +6108.428699 + 20 +10247.755425 + 30 +0.0 + 11 +6108.428699 + 21 +10247.755425 + 31 +0.0 + 0 +LINE + 5 +14D1 + 8 +0 + 62 + 0 + 10 +6124.688395 + 20 +10249.896055 + 30 +0.0 + 11 +6124.688395 + 21 +10249.896055 + 31 +0.0 + 0 +LINE + 5 +14D2 + 8 +0 + 62 + 0 + 10 +6106.248473 + 20 +10299.251404 + 30 +0.0 + 11 +6106.248473 + 21 +10299.251404 + 31 +0.0 + 0 +LINE + 5 +14D3 + 8 +0 + 62 + 0 + 10 +6133.414063 + 20 +10302.827821 + 30 +0.0 + 11 +6133.414063 + 21 +10302.827821 + 31 +0.0 + 0 +LINE + 5 +14D4 + 8 +0 + 62 + 0 + 10 +6114.974141 + 20 +10352.18317 + 30 +0.0 + 11 +6114.974141 + 21 +10352.18317 + 31 +0.0 + 0 +LINE + 5 +14D5 + 8 +0 + 62 + 0 + 10 +6125.384312 + 20 +10353.553695 + 30 +0.0 + 11 +6125.384312 + 21 +10353.553695 + 31 +0.0 + 0 +LINE + 5 +14D6 + 8 +0 + 62 + 0 + 10 +6106.94439 + 20 +10402.909044 + 30 +0.0 + 11 +6106.94439 + 21 +10402.909044 + 31 +0.0 + 0 +LINE + 5 +14D7 + 8 +0 + 62 + 0 + 10 +6123.204086 + 20 +10405.049674 + 30 +0.0 + 11 +6123.204086 + 21 +10405.049674 + 31 +0.0 + 0 +LINE + 5 +14D8 + 8 +0 + 62 + 0 + 10 +6104.764164 + 20 +10454.405023 + 30 +0.0 + 11 +6104.764164 + 21 +10454.405023 + 31 +0.0 + 0 +LINE + 5 +14D9 + 8 +0 + 62 + 0 + 10 +6131.929753 + 20 +10457.981441 + 30 +0.0 + 11 +6131.929753 + 21 +10457.981441 + 31 +0.0 + 0 +LINE + 5 +14DA + 8 +0 + 62 + 0 + 10 +6113.489831 + 20 +10507.33679 + 30 +0.0 + 11 +6113.489831 + 21 +10507.33679 + 31 +0.0 + 0 +LINE + 5 +14DB + 8 +0 + 62 + 0 + 10 +6123.900002 + 20 +10508.707315 + 30 +0.0 + 11 +6123.900002 + 21 +10508.707315 + 31 +0.0 + 0 +LINE + 5 +14DC + 8 +0 + 62 + 0 + 10 +6140.159698 + 20 +10510.847944 + 30 +0.0 + 11 +6140.159698 + 21 +10510.847944 + 31 +0.0 + 0 +LINE + 5 +14DD + 8 +0 + 62 + 0 + 10 +6105.46008 + 20 +10558.062664 + 30 +0.0 + 11 +6105.46008 + 21 +10558.062664 + 31 +0.0 + 0 +LINE + 5 +14DE + 8 +0 + 62 + 0 + 10 +6121.719776 + 20 +10560.203293 + 30 +0.0 + 11 +6121.719776 + 21 +10560.203293 + 31 +0.0 + 0 +LINE + 5 +14DF + 8 +0 + 62 + 0 + 10 +6130.445443 + 20 +10613.13506 + 30 +0.0 + 11 +6130.445443 + 21 +10613.13506 + 31 +0.0 + 0 +LINE + 5 +14E0 + 8 +0 + 62 + 0 + 10 +6140.855614 + 20 +10614.505585 + 30 +0.0 + 11 +6140.855614 + 21 +10614.505585 + 31 +0.0 + 0 +LINE + 5 +14E1 + 8 +0 + 62 + 0 + 10 +6112.005521 + 20 +10662.490409 + 30 +0.0 + 11 +6112.005521 + 21 +10662.490409 + 31 +0.0 + 0 +LINE + 5 +14E2 + 8 +0 + 62 + 0 + 10 +6122.415692 + 20 +10663.860934 + 30 +0.0 + 11 +6122.415692 + 21 +10663.860934 + 31 +0.0 + 0 +LINE + 5 +14E3 + 8 +0 + 62 + 0 + 10 +6138.675388 + 20 +10666.001564 + 30 +0.0 + 11 +6138.675388 + 21 +10666.001564 + 31 +0.0 + 0 +LINE + 5 +14E4 + 8 +0 + 62 + 0 + 10 +6103.975771 + 20 +10713.216283 + 30 +0.0 + 11 +6103.975771 + 21 +10713.216283 + 31 +0.0 + 0 +LINE + 5 +14E5 + 8 +0 + 62 + 0 + 10 +6120.235466 + 20 +10715.356913 + 30 +0.0 + 11 +6120.235466 + 21 +10715.356913 + 31 +0.0 + 0 +LINE + 5 +14E6 + 8 +0 + 62 + 0 + 10 +6128.961134 + 20 +10768.28868 + 30 +0.0 + 11 +6128.961134 + 21 +10768.28868 + 31 +0.0 + 0 +LINE + 5 +14E7 + 8 +0 + 62 + 0 + 10 +6139.371305 + 20 +10769.659205 + 30 +0.0 + 11 +6139.371305 + 21 +10769.659205 + 31 +0.0 + 0 +LINE + 5 +14E8 + 8 +0 + 62 + 0 + 10 +6110.521212 + 20 +10817.644029 + 30 +0.0 + 11 +6110.521212 + 21 +10817.644029 + 31 +0.0 + 0 +LINE + 5 +14E9 + 8 +0 + 62 + 0 + 10 +6120.931383 + 20 +10819.014554 + 30 +0.0 + 11 +6120.931383 + 21 +10819.014554 + 31 +0.0 + 0 +LINE + 5 +14EA + 8 +0 + 62 + 0 + 10 +6137.191079 + 20 +10821.155183 + 30 +0.0 + 11 +6137.191079 + 21 +10821.155183 + 31 +0.0 + 0 +LINE + 5 +14EB + 8 +0 + 62 + 0 + 10 +6118.751157 + 20 +10870.510532 + 30 +0.0 + 11 +6118.751157 + 21 +10870.510532 + 31 +0.0 + 0 +LINE + 5 +14EC + 8 +0 + 62 + 0 + 10 +6127.476824 + 20 +10923.442299 + 30 +0.0 + 11 +6127.476824 + 21 +10923.442299 + 31 +0.0 + 0 +LINE + 5 +14ED + 8 +0 + 62 + 0 + 10 +6137.886995 + 20 +10924.812824 + 30 +0.0 + 11 +6137.886995 + 21 +10924.812824 + 31 +0.0 + 0 +LINE + 5 +14EE + 8 +0 + 62 + 0 + 10 +6109.036902 + 20 +10972.797648 + 30 +0.0 + 11 +6109.036902 + 21 +10972.797648 + 31 +0.0 + 0 +LINE + 5 +14EF + 8 +0 + 62 + 0 + 10 +6119.447073 + 20 +10974.168173 + 30 +0.0 + 11 +6119.447073 + 21 +10974.168173 + 31 +0.0 + 0 +LINE + 5 +14F0 + 8 +0 + 62 + 0 + 10 +6135.706769 + 20 +10976.308803 + 30 +0.0 + 11 +6135.706769 + 21 +10976.308803 + 31 +0.0 + 0 +LINE + 5 +14F1 + 8 +0 + 62 + 0 + 10 +6117.266847 + 20 +11025.664152 + 30 +0.0 + 11 +6117.266847 + 21 +11025.664152 + 31 +0.0 + 0 +LINE + 5 +14F2 + 8 +0 + 62 + 0 + 10 +6125.992514 + 20 +11078.595918 + 30 +0.0 + 11 +6125.992514 + 21 +11078.595918 + 31 +0.0 + 0 +LINE + 5 +14F3 + 8 +0 + 62 + 0 + 10 +6136.402685 + 20 +11079.966444 + 30 +0.0 + 11 +6136.402685 + 21 +11079.966444 + 31 +0.0 + 0 +LINE + 5 +14F4 + 8 +0 + 62 + 0 + 10 +6107.552593 + 20 +11127.951268 + 30 +0.0 + 11 +6107.552593 + 21 +11127.951268 + 31 +0.0 + 0 +LINE + 5 +14F5 + 8 +0 + 62 + 0 + 10 +6117.962764 + 20 +11129.321793 + 30 +0.0 + 11 +6117.962764 + 21 +11129.321793 + 31 +0.0 + 0 +LINE + 5 +14F6 + 8 +0 + 62 + 0 + 10 +6117.94276 + 20 +10041.875931 + 30 +0.0 + 11 +6117.94276 + 21 +10041.875931 + 31 +0.0 + 0 +LINE + 5 +14F7 + 8 +0 + 62 + 0 + 10 +6128.352931 + 20 +10043.246457 + 30 +0.0 + 11 +6128.352931 + 21 +10043.246457 + 31 +0.0 + 0 +LINE + 5 +14F8 + 8 +0 + 62 + 0 + 10 +6109.217093 + 20 +9988.944165 + 30 +0.0 + 11 +6109.217093 + 21 +9988.944165 + 31 +0.0 + 0 +LINE + 5 +14F9 + 8 +0 + 62 + 0 + 10 +6136.382682 + 20 +9992.520582 + 30 +0.0 + 11 +6136.382682 + 21 +9992.520582 + 31 +0.0 + 0 +LINE + 5 +14FA + 8 +0 + 62 + 0 + 10 +6111.397319 + 20 +9937.448186 + 30 +0.0 + 11 +6111.397319 + 21 +9937.448186 + 31 +0.0 + 0 +LINE + 5 +14FB + 8 +0 + 62 + 0 + 10 +6127.657014 + 20 +9939.588816 + 30 +0.0 + 11 +6127.657014 + 21 +9939.588816 + 31 +0.0 + 0 +LINE + 5 +14FC + 8 +0 + 62 + 0 + 10 +6119.42707 + 20 +9886.722312 + 30 +0.0 + 11 +6119.42707 + 21 +9886.722312 + 31 +0.0 + 0 +LINE + 5 +14FD + 8 +0 + 62 + 0 + 10 +6129.837241 + 20 +9888.092837 + 30 +0.0 + 11 +6129.837241 + 21 +9888.092837 + 31 +0.0 + 0 +LINE + 5 +14FE + 8 +0 + 62 + 0 + 10 +6110.701402 + 20 +9833.790545 + 30 +0.0 + 11 +6110.701402 + 21 +9833.790545 + 31 +0.0 + 0 +LINE + 5 +14FF + 8 +0 + 62 + 0 + 10 +6137.866991 + 20 +9837.366963 + 30 +0.0 + 11 +6137.866991 + 21 +9837.366963 + 31 +0.0 + 0 +LINE + 5 +1500 + 8 +0 + 62 + 0 + 10 +6112.881628 + 20 +9782.294567 + 30 +0.0 + 11 +6112.881628 + 21 +9782.294567 + 31 +0.0 + 0 +LINE + 5 +1501 + 8 +0 + 62 + 0 + 10 +6129.141324 + 20 +9784.435196 + 30 +0.0 + 11 +6129.141324 + 21 +9784.435196 + 31 +0.0 + 0 +LINE + 5 +1502 + 8 +0 + 62 + 0 + 10 +6120.911379 + 20 +9731.568693 + 30 +0.0 + 11 +6120.911379 + 21 +9731.568693 + 31 +0.0 + 0 +LINE + 5 +1503 + 8 +0 + 62 + 0 + 10 +6131.32155 + 20 +9732.939218 + 30 +0.0 + 11 +6131.32155 + 21 +9732.939218 + 31 +0.0 + 0 +LINE + 5 +1504 + 8 +0 + 62 + 0 + 10 +6112.185712 + 20 +9678.636926 + 30 +0.0 + 11 +6112.185712 + 21 +9678.636926 + 31 +0.0 + 0 +LINE + 5 +1505 + 8 +0 + 62 + 0 + 10 +6139.351301 + 20 +9682.213344 + 30 +0.0 + 11 +6139.351301 + 21 +9682.213344 + 31 +0.0 + 0 +LINE + 5 +1506 + 8 +0 + 62 + 0 + 10 +6103.955767 + 20 +9625.770422 + 30 +0.0 + 11 +6103.955767 + 21 +9625.770422 + 31 +0.0 + 0 +LINE + 5 +1507 + 8 +0 + 62 + 0 + 10 +6114.365938 + 20 +9627.140947 + 30 +0.0 + 11 +6114.365938 + 21 +9627.140947 + 31 +0.0 + 0 +LINE + 5 +1508 + 8 +0 + 62 + 0 + 10 +6130.625634 + 20 +9629.281577 + 30 +0.0 + 11 +6130.625634 + 21 +9629.281577 + 31 +0.0 + 0 +LINE + 5 +1509 + 8 +0 + 62 + 0 + 10 +6122.395689 + 20 +9576.415073 + 30 +0.0 + 11 +6122.395689 + 21 +9576.415073 + 31 +0.0 + 0 +LINE + 5 +150A + 8 +0 + 62 + 0 + 10 +6132.80586 + 20 +9577.785598 + 30 +0.0 + 11 +6132.80586 + 21 +9577.785598 + 31 +0.0 + 0 +LINE + 5 +150B + 8 +0 + 62 + 0 + 10 +6121.775959 + 20 +10131.888161 + 30 +0.0 + 11 +6121.775959 + 21 +10131.888161 + 31 +0.0 + 0 +LINE + 5 +150C + 8 +0 + 62 + 0 + 10 +6130.209873 + 20 +10126.515165 + 30 +0.0 + 11 +6130.209873 + 21 +10126.515165 + 31 +0.0 + 0 +LINE + 5 +150D + 8 +0 + 62 + 0 + 10 +6105.623391 + 20 +10181.970206 + 30 +0.0 + 11 +6105.623391 + 21 +10181.970206 + 31 +0.0 + 0 +LINE + 5 +150E + 8 +0 + 62 + 0 + 10 +6114.057306 + 20 +10176.59721 + 30 +0.0 + 11 +6114.057306 + 21 +10176.59721 + 31 +0.0 + 0 +LINE + 5 +150F + 8 +0 + 62 + 0 + 10 +6128.266831 + 20 +10207.336469 + 30 +0.0 + 11 +6128.266831 + 21 +10207.336469 + 31 +0.0 + 0 +LINE + 5 +1510 + 8 +0 + 62 + 0 + 10 +6112.114263 + 20 +10257.418513 + 30 +0.0 + 11 +6112.114263 + 21 +10257.418513 + 31 +0.0 + 0 +LINE + 5 +1511 + 8 +0 + 62 + 0 + 10 +6135.601094 + 20 +10282.247476 + 30 +0.0 + 11 +6135.601094 + 21 +10282.247476 + 31 +0.0 + 0 +LINE + 5 +1512 + 8 +0 + 62 + 0 + 10 +6119.448527 + 20 +10332.329521 + 30 +0.0 + 11 +6119.448527 + 21 +10332.329521 + 31 +0.0 + 0 +LINE + 5 +1513 + 8 +0 + 62 + 0 + 10 +6127.882441 + 20 +10326.956525 + 30 +0.0 + 11 +6127.882441 + 21 +10326.956525 + 31 +0.0 + 0 +LINE + 5 +1514 + 8 +0 + 62 + 0 + 10 +6111.729874 + 20 +10377.038569 + 30 +0.0 + 11 +6111.729874 + 21 +10377.038569 + 31 +0.0 + 0 +LINE + 5 +1515 + 8 +0 + 62 + 0 + 10 +6125.939399 + 20 +10407.777828 + 30 +0.0 + 11 +6125.939399 + 21 +10407.777828 + 31 +0.0 + 0 +LINE + 5 +1516 + 8 +0 + 62 + 0 + 10 +6109.786832 + 20 +10457.859873 + 30 +0.0 + 11 +6109.786832 + 21 +10457.859873 + 31 +0.0 + 0 +LINE + 5 +1517 + 8 +0 + 62 + 0 + 10 +6133.273662 + 20 +10482.688836 + 30 +0.0 + 11 +6133.273662 + 21 +10482.688836 + 31 +0.0 + 0 +LINE + 5 +1518 + 8 +0 + 62 + 0 + 10 +6117.121095 + 20 +10532.770881 + 30 +0.0 + 11 +6117.121095 + 21 +10532.770881 + 31 +0.0 + 0 +LINE + 5 +1519 + 8 +0 + 62 + 0 + 10 +6125.55501 + 20 +10527.397884 + 30 +0.0 + 11 +6125.55501 + 21 +10527.397884 + 31 +0.0 + 0 +LINE + 5 +151A + 8 +0 + 62 + 0 + 10 +6109.402442 + 20 +10577.479929 + 30 +0.0 + 11 +6109.402442 + 21 +10577.479929 + 31 +0.0 + 0 +LINE + 5 +151B + 8 +0 + 62 + 0 + 10 +6139.764535 + 20 +10558.137143 + 30 +0.0 + 11 +6139.764535 + 21 +10558.137143 + 31 +0.0 + 0 +LINE + 5 +151C + 8 +0 + 62 + 0 + 10 +6123.611967 + 20 +10608.219188 + 30 +0.0 + 11 +6123.611967 + 21 +10608.219188 + 31 +0.0 + 0 +LINE + 5 +151D + 8 +0 + 62 + 0 + 10 +6107.4594 + 20 +10658.301233 + 30 +0.0 + 11 +6107.4594 + 21 +10658.301233 + 31 +0.0 + 0 +LINE + 5 +151E + 8 +0 + 62 + 0 + 10 +6130.946231 + 20 +10683.130196 + 30 +0.0 + 11 +6130.946231 + 21 +10683.130196 + 31 +0.0 + 0 +LINE + 5 +151F + 8 +0 + 62 + 0 + 10 +6139.380145 + 20 +10677.7572 + 30 +0.0 + 11 +6139.380145 + 21 +10677.7572 + 31 +0.0 + 0 +LINE + 5 +1520 + 8 +0 + 62 + 0 + 10 +6114.793664 + 20 +10733.21224 + 30 +0.0 + 11 +6114.793664 + 21 +10733.21224 + 31 +0.0 + 0 +LINE + 5 +1521 + 8 +0 + 62 + 0 + 10 +6123.227578 + 20 +10727.839244 + 30 +0.0 + 11 +6123.227578 + 21 +10727.839244 + 31 +0.0 + 0 +LINE + 5 +1522 + 8 +0 + 62 + 0 + 10 +6107.075011 + 20 +10777.921289 + 30 +0.0 + 11 +6107.075011 + 21 +10777.921289 + 31 +0.0 + 0 +LINE + 5 +1523 + 8 +0 + 62 + 0 + 10 +6137.437103 + 20 +10758.578503 + 30 +0.0 + 11 +6137.437103 + 21 +10758.578503 + 31 +0.0 + 0 +LINE + 5 +1524 + 8 +0 + 62 + 0 + 10 +6121.284536 + 20 +10808.660548 + 30 +0.0 + 11 +6121.284536 + 21 +10808.660548 + 31 +0.0 + 0 +LINE + 5 +1525 + 8 +0 + 62 + 0 + 10 +6105.131968 + 20 +10858.742592 + 30 +0.0 + 11 +6105.131968 + 21 +10858.742592 + 31 +0.0 + 0 +LINE + 5 +1526 + 8 +0 + 62 + 0 + 10 +6128.618799 + 20 +10883.571555 + 30 +0.0 + 11 +6128.618799 + 21 +10883.571555 + 31 +0.0 + 0 +LINE + 5 +1527 + 8 +0 + 62 + 0 + 10 +6137.052714 + 20 +10878.198559 + 30 +0.0 + 11 +6137.052714 + 21 +10878.198559 + 31 +0.0 + 0 +LINE + 5 +1528 + 8 +0 + 62 + 0 + 10 +6112.466232 + 20 +10933.6536 + 30 +0.0 + 11 +6112.466232 + 21 +10933.6536 + 31 +0.0 + 0 +LINE + 5 +1529 + 8 +0 + 62 + 0 + 10 +6120.900146 + 20 +10928.280604 + 30 +0.0 + 11 +6120.900146 + 21 +10928.280604 + 31 +0.0 + 0 +LINE + 5 +152A + 8 +0 + 62 + 0 + 10 +6104.747579 + 20 +10978.362648 + 30 +0.0 + 11 +6104.747579 + 21 +10978.362648 + 31 +0.0 + 0 +LINE + 5 +152B + 8 +0 + 62 + 0 + 10 +6135.109671 + 20 +10959.019863 + 30 +0.0 + 11 +6135.109671 + 21 +10959.019863 + 31 +0.0 + 0 +LINE + 5 +152C + 8 +0 + 62 + 0 + 10 +6118.957104 + 20 +11009.101907 + 30 +0.0 + 11 +6118.957104 + 21 +11009.101907 + 31 +0.0 + 0 +LINE + 5 +152D + 8 +0 + 62 + 0 + 10 +6126.291367 + 20 +11084.012915 + 30 +0.0 + 11 +6126.291367 + 21 +11084.012915 + 31 +0.0 + 0 +LINE + 5 +152E + 8 +0 + 62 + 0 + 10 +6134.725282 + 20 +11078.639919 + 30 +0.0 + 11 +6134.725282 + 21 +11078.639919 + 31 +0.0 + 0 +LINE + 5 +152F + 8 +0 + 62 + 0 + 10 +6118.572715 + 20 +11128.721963 + 30 +0.0 + 11 +6118.572715 + 21 +11128.721963 + 31 +0.0 + 0 +LINE + 5 +1530 + 8 +0 + 62 + 0 + 10 +6137.928526 + 20 +10081.806117 + 30 +0.0 + 11 +6137.928526 + 21 +10081.806117 + 31 +0.0 + 0 +LINE + 5 +1531 + 8 +0 + 62 + 0 + 10 +6114.441695 + 20 +10056.977154 + 30 +0.0 + 11 +6114.441695 + 21 +10056.977154 + 31 +0.0 + 0 +LINE + 5 +1532 + 8 +0 + 62 + 0 + 10 +6130.594262 + 20 +10006.895109 + 30 +0.0 + 11 +6130.594262 + 21 +10006.895109 + 31 +0.0 + 0 +LINE + 5 +1533 + 8 +0 + 62 + 0 + 10 +6107.950823 + 20 +9981.528846 + 30 +0.0 + 11 +6107.950823 + 21 +9981.528846 + 31 +0.0 + 0 +LINE + 5 +1534 + 8 +0 + 62 + 0 + 10 +6116.384737 + 20 +9976.15585 + 30 +0.0 + 11 +6116.384737 + 21 +9976.15585 + 31 +0.0 + 0 +LINE + 5 +1535 + 8 +0 + 62 + 0 + 10 +6124.10339 + 20 +9931.446802 + 30 +0.0 + 11 +6124.10339 + 21 +9931.446802 + 31 +0.0 + 0 +LINE + 5 +1536 + 8 +0 + 62 + 0 + 10 +6132.537305 + 20 +9926.073806 + 30 +0.0 + 11 +6132.537305 + 21 +9926.073806 + 31 +0.0 + 0 +LINE + 5 +1537 + 8 +0 + 62 + 0 + 10 +6140.255957 + 20 +9881.364757 + 30 +0.0 + 11 +6140.255957 + 21 +9881.364757 + 31 +0.0 + 0 +LINE + 5 +1538 + 8 +0 + 62 + 0 + 10 +6116.769127 + 20 +9856.535794 + 30 +0.0 + 11 +6116.769127 + 21 +9856.535794 + 31 +0.0 + 0 +LINE + 5 +1539 + 8 +0 + 62 + 0 + 10 +6132.921694 + 20 +9806.453749 + 30 +0.0 + 11 +6132.921694 + 21 +9806.453749 + 31 +0.0 + 0 +LINE + 5 +153A + 8 +0 + 62 + 0 + 10 +6110.278255 + 20 +9781.087487 + 30 +0.0 + 11 +6110.278255 + 21 +9781.087487 + 31 +0.0 + 0 +LINE + 5 +153B + 8 +0 + 62 + 0 + 10 +6118.712169 + 20 +9775.714491 + 30 +0.0 + 11 +6118.712169 + 21 +9775.714491 + 31 +0.0 + 0 +LINE + 5 +153C + 8 +0 + 62 + 0 + 10 +6126.430822 + 20 +9731.005442 + 30 +0.0 + 11 +6126.430822 + 21 +9731.005442 + 31 +0.0 + 0 +LINE + 5 +153D + 8 +0 + 62 + 0 + 10 +6134.864736 + 20 +9725.632446 + 30 +0.0 + 11 +6134.864736 + 21 +9725.632446 + 31 +0.0 + 0 +LINE + 5 +153E + 8 +0 + 62 + 0 + 10 +6119.096558 + 20 +9656.094434 + 30 +0.0 + 11 +6119.096558 + 21 +9656.094434 + 31 +0.0 + 0 +LINE + 5 +153F + 8 +0 + 62 + 0 + 10 +6104.887034 + 20 +9625.355176 + 30 +0.0 + 11 +6104.887034 + 21 +9625.355176 + 31 +0.0 + 0 +LINE + 5 +1540 + 8 +0 + 62 + 0 + 10 +6135.249126 + 20 +9606.01239 + 30 +0.0 + 11 +6135.249126 + 21 +9606.01239 + 31 +0.0 + 0 +LINE + 5 +1541 + 8 +0 + 62 + 0 + 10 +6112.605686 + 20 +9580.646127 + 30 +0.0 + 11 +6112.605686 + 21 +9580.646127 + 31 +0.0 + 0 +LINE + 5 +1542 + 8 +0 + 62 + 0 + 10 +6121.039601 + 20 +9575.273131 + 30 +0.0 + 11 +6121.039601 + 21 +9575.273131 + 31 +0.0 + 0 +LINE + 5 +1543 + 8 +0 + 62 + 0 + 10 +6118.199199 + 20 +10096.15836 + 30 +0.0 + 11 +6118.199199 + 21 +10096.15836 + 31 +0.0 + 0 +LINE + 5 +1544 + 8 +0 + 62 + 0 + 10 +6121.885586 + 20 +10092.780409 + 30 +0.0 + 11 +6121.885586 + 21 +10092.780409 + 31 +0.0 + 0 +LINE + 5 +1545 + 8 +0 + 62 + 0 + 10 +6139.285331 + 20 +10076.836481 + 30 +0.0 + 11 +6139.285331 + 21 +10076.836481 + 31 +0.0 + 0 +LINE + 5 +1546 + 8 +0 + 62 + 0 + 10 +6117.422623 + 20 +10169.515623 + 30 +0.0 + 11 +6117.422623 + 21 +10169.515623 + 31 +0.0 + 0 +LINE + 5 +1547 + 8 +0 + 62 + 0 + 10 +6137.329111 + 20 +10151.274687 + 30 +0.0 + 11 +6137.329111 + 21 +10151.274687 + 31 +0.0 + 0 +LINE + 5 +1548 + 8 +0 + 62 + 0 + 10 +6141.015498 + 20 +10147.896736 + 30 +0.0 + 11 +6141.015498 + 21 +10147.896736 + 31 +0.0 + 0 +LINE + 5 +1549 + 8 +0 + 62 + 0 + 10 +6115.466404 + 20 +10243.95383 + 30 +0.0 + 11 +6115.466404 + 21 +10243.95383 + 31 +0.0 + 0 +LINE + 5 +154A + 8 +0 + 62 + 0 + 10 +6119.15279 + 20 +10240.575879 + 30 +0.0 + 11 +6119.15279 + 21 +10240.575879 + 31 +0.0 + 0 +LINE + 5 +154B + 8 +0 + 62 + 0 + 10 +6136.552535 + 20 +10224.63195 + 30 +0.0 + 11 +6136.552535 + 21 +10224.63195 + 31 +0.0 + 0 +LINE + 5 +154C + 8 +0 + 62 + 0 + 10 +6114.689828 + 20 +10317.311092 + 30 +0.0 + 11 +6114.689828 + 21 +10317.311092 + 31 +0.0 + 0 +LINE + 5 +154D + 8 +0 + 62 + 0 + 10 +6134.596316 + 20 +10299.070157 + 30 +0.0 + 11 +6134.596316 + 21 +10299.070157 + 31 +0.0 + 0 +LINE + 5 +154E + 8 +0 + 62 + 0 + 10 +6138.282702 + 20 +10295.692205 + 30 +0.0 + 11 +6138.282702 + 21 +10295.692205 + 31 +0.0 + 0 +LINE + 5 +154F + 8 +0 + 62 + 0 + 10 +6112.733608 + 20 +10391.749299 + 30 +0.0 + 11 +6112.733608 + 21 +10391.749299 + 31 +0.0 + 0 +LINE + 5 +1550 + 8 +0 + 62 + 0 + 10 +6116.419995 + 20 +10388.371348 + 30 +0.0 + 11 +6116.419995 + 21 +10388.371348 + 31 +0.0 + 0 +LINE + 5 +1551 + 8 +0 + 62 + 0 + 10 +6133.81974 + 20 +10372.427419 + 30 +0.0 + 11 +6133.81974 + 21 +10372.427419 + 31 +0.0 + 0 +LINE + 5 +1552 + 8 +0 + 62 + 0 + 10 +6111.957032 + 20 +10465.106561 + 30 +0.0 + 11 +6111.957032 + 21 +10465.106561 + 31 +0.0 + 0 +LINE + 5 +1553 + 8 +0 + 62 + 0 + 10 +6131.86352 + 20 +10446.865626 + 30 +0.0 + 11 +6131.86352 + 21 +10446.865626 + 31 +0.0 + 0 +LINE + 5 +1554 + 8 +0 + 62 + 0 + 10 +6135.549907 + 20 +10443.487675 + 30 +0.0 + 11 +6135.549907 + 21 +10443.487675 + 31 +0.0 + 0 +LINE + 5 +1555 + 8 +0 + 62 + 0 + 10 +6110.000812 + 20 +10539.544768 + 30 +0.0 + 11 +6110.000812 + 21 +10539.544768 + 31 +0.0 + 0 +LINE + 5 +1556 + 8 +0 + 62 + 0 + 10 +6113.687199 + 20 +10536.166817 + 30 +0.0 + 11 +6113.687199 + 21 +10536.166817 + 31 +0.0 + 0 +LINE + 5 +1557 + 8 +0 + 62 + 0 + 10 +6131.086944 + 20 +10520.222888 + 30 +0.0 + 11 +6131.086944 + 21 +10520.222888 + 31 +0.0 + 0 +LINE + 5 +1558 + 8 +0 + 62 + 0 + 10 +6109.224236 + 20 +10612.902031 + 30 +0.0 + 11 +6109.224236 + 21 +10612.902031 + 31 +0.0 + 0 +LINE + 5 +1559 + 8 +0 + 62 + 0 + 10 +6129.130725 + 20 +10594.661095 + 30 +0.0 + 11 +6129.130725 + 21 +10594.661095 + 31 +0.0 + 0 +LINE + 5 +155A + 8 +0 + 62 + 0 + 10 +6132.817111 + 20 +10591.283144 + 30 +0.0 + 11 +6132.817111 + 21 +10591.283144 + 31 +0.0 + 0 +LINE + 5 +155B + 8 +0 + 62 + 0 + 10 +6107.268017 + 20 +10687.340237 + 30 +0.0 + 11 +6107.268017 + 21 +10687.340237 + 31 +0.0 + 0 +LINE + 5 +155C + 8 +0 + 62 + 0 + 10 +6110.954404 + 20 +10683.962286 + 30 +0.0 + 11 +6110.954404 + 21 +10683.962286 + 31 +0.0 + 0 +LINE + 5 +155D + 8 +0 + 62 + 0 + 10 +6128.354149 + 20 +10668.018357 + 30 +0.0 + 11 +6128.354149 + 21 +10668.018357 + 31 +0.0 + 0 +LINE + 5 +155E + 8 +0 + 62 + 0 + 10 +6106.491441 + 20 +10760.6975 + 30 +0.0 + 11 +6106.491441 + 21 +10760.6975 + 31 +0.0 + 0 +LINE + 5 +155F + 8 +0 + 62 + 0 + 10 +6126.397929 + 20 +10742.456564 + 30 +0.0 + 11 +6126.397929 + 21 +10742.456564 + 31 +0.0 + 0 +LINE + 5 +1560 + 8 +0 + 62 + 0 + 10 +6130.084316 + 20 +10739.078613 + 30 +0.0 + 11 +6130.084316 + 21 +10739.078613 + 31 +0.0 + 0 +LINE + 5 +1561 + 8 +0 + 62 + 0 + 10 +6104.535221 + 20 +10835.135707 + 30 +0.0 + 11 +6104.535221 + 21 +10835.135707 + 31 +0.0 + 0 +LINE + 5 +1562 + 8 +0 + 62 + 0 + 10 +6108.221608 + 20 +10831.757756 + 30 +0.0 + 11 +6108.221608 + 21 +10831.757756 + 31 +0.0 + 0 +LINE + 5 +1563 + 8 +0 + 62 + 0 + 10 +6125.621353 + 20 +10815.813827 + 30 +0.0 + 11 +6125.621353 + 21 +10815.813827 + 31 +0.0 + 0 +LINE + 5 +1564 + 8 +0 + 62 + 0 + 10 +6103.758645 + 20 +10908.492969 + 30 +0.0 + 11 +6103.758645 + 21 +10908.492969 + 31 +0.0 + 0 +LINE + 5 +1565 + 8 +0 + 62 + 0 + 10 +6123.665133 + 20 +10890.252033 + 30 +0.0 + 11 +6123.665133 + 21 +10890.252033 + 31 +0.0 + 0 +LINE + 5 +1566 + 8 +0 + 62 + 0 + 10 +6127.35152 + 20 +10886.874082 + 30 +0.0 + 11 +6127.35152 + 21 +10886.874082 + 31 +0.0 + 0 +LINE + 5 +1567 + 8 +0 + 62 + 0 + 10 +6105.488812 + 20 +10979.553225 + 30 +0.0 + 11 +6105.488812 + 21 +10979.553225 + 31 +0.0 + 0 +LINE + 5 +1568 + 8 +0 + 62 + 0 + 10 +6122.888557 + 20 +10963.609296 + 30 +0.0 + 11 +6122.888557 + 21 +10963.609296 + 31 +0.0 + 0 +LINE + 5 +1569 + 8 +0 + 62 + 0 + 10 +6120.932338 + 20 +11038.047503 + 30 +0.0 + 11 +6120.932338 + 21 +11038.047503 + 31 +0.0 + 0 +LINE + 5 +156A + 8 +0 + 62 + 0 + 10 +6124.618724 + 20 +11034.669552 + 30 +0.0 + 11 +6124.618724 + 21 +11034.669552 + 31 +0.0 + 0 +LINE + 5 +156B + 8 +0 + 62 + 0 + 10 +6120.155762 + 20 +11111.404765 + 30 +0.0 + 11 +6120.155762 + 21 +11111.404765 + 31 +0.0 + 0 +LINE + 5 +156C + 8 +0 + 62 + 0 + 10 +6140.06225 + 20 +11093.163829 + 30 +0.0 + 11 +6140.06225 + 21 +11093.163829 + 31 +0.0 + 0 +LINE + 5 +156D + 8 +0 + 62 + 0 + 10 +6120.155419 + 20 +10021.720154 + 30 +0.0 + 11 +6120.155419 + 21 +10021.720154 + 31 +0.0 + 0 +LINE + 5 +156E + 8 +0 + 62 + 0 + 10 +6140.061907 + 20 +10003.479218 + 30 +0.0 + 11 +6140.061907 + 21 +10003.479218 + 31 +0.0 + 0 +LINE + 5 +156F + 8 +0 + 62 + 0 + 10 +6120.931995 + 20 +9948.362891 + 30 +0.0 + 11 +6120.931995 + 21 +9948.362891 + 31 +0.0 + 0 +LINE + 5 +1570 + 8 +0 + 62 + 0 + 10 +6124.618381 + 20 +9944.98494 + 30 +0.0 + 11 +6124.618381 + 21 +9944.98494 + 31 +0.0 + 0 +LINE + 5 +1571 + 8 +0 + 62 + 0 + 10 +6105.488469 + 20 +9889.868613 + 30 +0.0 + 11 +6105.488469 + 21 +9889.868613 + 31 +0.0 + 0 +LINE + 5 +1572 + 8 +0 + 62 + 0 + 10 +6122.888214 + 20 +9873.924684 + 30 +0.0 + 11 +6122.888214 + 21 +9873.924684 + 31 +0.0 + 0 +LINE + 5 +1573 + 8 +0 + 62 + 0 + 10 +6103.758302 + 20 +9818.808358 + 30 +0.0 + 11 +6103.758302 + 21 +9818.808358 + 31 +0.0 + 0 +LINE + 5 +1574 + 8 +0 + 62 + 0 + 10 +6123.66479 + 20 +9800.567422 + 30 +0.0 + 11 +6123.66479 + 21 +9800.567422 + 31 +0.0 + 0 +LINE + 5 +1575 + 8 +0 + 62 + 0 + 10 +6127.351177 + 20 +9797.189471 + 30 +0.0 + 11 +6127.351177 + 21 +9797.189471 + 31 +0.0 + 0 +LINE + 5 +1576 + 8 +0 + 62 + 0 + 10 +6104.534878 + 20 +9745.451095 + 30 +0.0 + 11 +6104.534878 + 21 +9745.451095 + 31 +0.0 + 0 +LINE + 5 +1577 + 8 +0 + 62 + 0 + 10 +6108.221265 + 20 +9742.073144 + 30 +0.0 + 11 +6108.221265 + 21 +9742.073144 + 31 +0.0 + 0 +LINE + 5 +1578 + 8 +0 + 62 + 0 + 10 +6125.62101 + 20 +9726.129215 + 30 +0.0 + 11 +6125.62101 + 21 +9726.129215 + 31 +0.0 + 0 +LINE + 5 +1579 + 8 +0 + 62 + 0 + 10 +6106.491098 + 20 +9671.012888 + 30 +0.0 + 11 +6106.491098 + 21 +9671.012888 + 31 +0.0 + 0 +LINE + 5 +157A + 8 +0 + 62 + 0 + 10 +6126.397586 + 20 +9652.771953 + 30 +0.0 + 11 +6126.397586 + 21 +9652.771953 + 31 +0.0 + 0 +LINE + 5 +157B + 8 +0 + 62 + 0 + 10 +6130.083973 + 20 +9649.394002 + 30 +0.0 + 11 +6130.083973 + 21 +9649.394002 + 31 +0.0 + 0 +LINE + 5 +157C + 8 +0 + 62 + 0 + 10 +6107.267674 + 20 +9597.655626 + 30 +0.0 + 11 +6107.267674 + 21 +9597.655626 + 31 +0.0 + 0 +LINE + 5 +157D + 8 +0 + 62 + 0 + 10 +6110.954061 + 20 +9594.277675 + 30 +0.0 + 11 +6110.954061 + 21 +9594.277675 + 31 +0.0 + 0 +LINE + 5 +157E + 8 +0 + 62 + 0 + 10 +6128.353806 + 20 +9578.333746 + 30 +0.0 + 11 +6128.353806 + 21 +9578.333746 + 31 +0.0 + 0 +LINE + 5 +157F + 8 +0 + 62 + 0 + 10 +7058.913332 + 20 +10192.288781 + 30 +0.0 + 11 +7058.913332 + 21 +10192.288781 + 31 +0.0 + 0 +LINE + 5 +1580 + 8 +0 + 62 + 0 + 10 +7083.031274 + 20 +10210.795128 + 30 +0.0 + 11 +7083.031274 + 21 +10210.795128 + 31 +0.0 + 0 +LINE + 5 +1581 + 8 +0 + 62 + 0 + 10 +7057.653465 + 20 +10230.825256 + 30 +0.0 + 11 +7057.653465 + 21 +10230.825256 + 31 +0.0 + 0 +LINE + 5 +1582 + 8 +0 + 62 + 0 + 10 +7081.771407 + 20 +10249.331604 + 30 +0.0 + 11 +7081.771407 + 21 +10249.331604 + 31 +0.0 + 0 +LINE + 5 +1583 + 8 +0 + 62 + 0 + 10 +7056.393598 + 20 +10269.361732 + 30 +0.0 + 11 +7056.393598 + 21 +10269.361732 + 31 +0.0 + 0 +LINE + 5 +1584 + 8 +0 + 62 + 0 + 10 +7080.51154 + 20 +10287.868079 + 30 +0.0 + 11 +7080.51154 + 21 +10287.868079 + 31 +0.0 + 0 +LINE + 5 +1585 + 8 +0 + 62 + 0 + 10 +7079.251672 + 20 +10326.404554 + 30 +0.0 + 11 +7079.251672 + 21 +10326.404554 + 31 +0.0 + 0 +LINE + 5 +1586 + 8 +0 + 62 + 0 + 10 +7077.991805 + 20 +10364.94103 + 30 +0.0 + 11 +7077.991805 + 21 +10364.94103 + 31 +0.0 + 0 +LINE + 5 +1587 + 8 +0 + 62 + 0 + 10 +7076.731938 + 20 +10403.477505 + 30 +0.0 + 11 +7076.731938 + 21 +10403.477505 + 31 +0.0 + 0 +LINE + 5 +1588 + 8 +0 + 62 + 0 + 10 +7075.472071 + 20 +10442.013981 + 30 +0.0 + 11 +7075.472071 + 21 +10442.013981 + 31 +0.0 + 0 +LINE + 5 +1589 + 8 +0 + 62 + 0 + 10 +7074.212204 + 20 +10480.550456 + 30 +0.0 + 11 +7074.212204 + 21 +10480.550456 + 31 +0.0 + 0 +LINE + 5 +158A + 8 +0 + 62 + 0 + 10 +7072.952337 + 20 +10519.086931 + 30 +0.0 + 11 +7072.952337 + 21 +10519.086931 + 31 +0.0 + 0 +LINE + 5 +158B + 8 +0 + 62 + 0 + 10 +7071.692469 + 20 +10557.623407 + 30 +0.0 + 11 +7071.692469 + 21 +10557.623407 + 31 +0.0 + 0 +LINE + 5 +158C + 8 +0 + 62 + 0 + 10 +7070.432602 + 20 +10596.159882 + 30 +0.0 + 11 +7070.432602 + 21 +10596.159882 + 31 +0.0 + 0 +LINE + 5 +158D + 8 +0 + 62 + 0 + 10 +7069.172735 + 20 +10634.696358 + 30 +0.0 + 11 +7069.172735 + 21 +10634.696358 + 31 +0.0 + 0 +LINE + 5 +158E + 8 +0 + 62 + 0 + 10 +7067.912868 + 20 +10673.232833 + 30 +0.0 + 11 +7067.912868 + 21 +10673.232833 + 31 +0.0 + 0 +LINE + 5 +158F + 8 +0 + 62 + 0 + 10 +7066.653001 + 20 +10711.769308 + 30 +0.0 + 11 +7066.653001 + 21 +10711.769308 + 31 +0.0 + 0 +LINE + 5 +1590 + 8 +0 + 62 + 0 + 10 +7093.627014 + 20 +10732.467197 + 30 +0.0 + 11 +7093.627014 + 21 +10732.467197 + 31 +0.0 + 0 +LINE + 5 +1591 + 8 +0 + 62 + 0 + 10 +7065.393134 + 20 +10750.305784 + 30 +0.0 + 11 +7065.393134 + 21 +10750.305784 + 31 +0.0 + 0 +LINE + 5 +1592 + 8 +0 + 62 + 0 + 10 +7092.367147 + 20 +10771.003672 + 30 +0.0 + 11 +7092.367147 + 21 +10771.003672 + 31 +0.0 + 0 +LINE + 5 +1593 + 8 +0 + 62 + 0 + 10 +7064.133266 + 20 +10788.842259 + 30 +0.0 + 11 +7064.133266 + 21 +10788.842259 + 31 +0.0 + 0 +LINE + 5 +1594 + 8 +0 + 62 + 0 + 10 +7091.10728 + 20 +10809.540148 + 30 +0.0 + 11 +7091.10728 + 21 +10809.540148 + 31 +0.0 + 0 +LINE + 5 +1595 + 8 +0 + 62 + 0 + 10 +7062.873399 + 20 +10827.378734 + 30 +0.0 + 11 +7062.873399 + 21 +10827.378734 + 31 +0.0 + 0 +LINE + 5 +1596 + 8 +0 + 62 + 0 + 10 +7089.847413 + 20 +10848.076623 + 30 +0.0 + 11 +7089.847413 + 21 +10848.076623 + 31 +0.0 + 0 +LINE + 5 +1597 + 8 +0 + 62 + 0 + 10 +7061.613532 + 20 +10865.91521 + 30 +0.0 + 11 +7061.613532 + 21 +10865.91521 + 31 +0.0 + 0 +LINE + 5 +1598 + 8 +0 + 62 + 0 + 10 +7088.587546 + 20 +10886.613098 + 30 +0.0 + 11 +7088.587546 + 21 +10886.613098 + 31 +0.0 + 0 +LINE + 5 +1599 + 8 +0 + 62 + 0 + 10 +7060.353665 + 20 +10904.451685 + 30 +0.0 + 11 +7060.353665 + 21 +10904.451685 + 31 +0.0 + 0 +LINE + 5 +159A + 8 +0 + 62 + 0 + 10 +7087.327678 + 20 +10925.149574 + 30 +0.0 + 11 +7087.327678 + 21 +10925.149574 + 31 +0.0 + 0 +LINE + 5 +159B + 8 +0 + 62 + 0 + 10 +7059.093798 + 20 +10942.988161 + 30 +0.0 + 11 +7059.093798 + 21 +10942.988161 + 31 +0.0 + 0 +LINE + 5 +159C + 8 +0 + 62 + 0 + 10 +7086.067811 + 20 +10963.686049 + 30 +0.0 + 11 +7086.067811 + 21 +10963.686049 + 31 +0.0 + 0 +LINE + 5 +159D + 8 +0 + 62 + 0 + 10 +7057.833931 + 20 +10981.524636 + 30 +0.0 + 11 +7057.833931 + 21 +10981.524636 + 31 +0.0 + 0 +LINE + 5 +159E + 8 +0 + 62 + 0 + 10 +7084.807944 + 20 +11002.222525 + 30 +0.0 + 11 +7084.807944 + 21 +11002.222525 + 31 +0.0 + 0 +LINE + 5 +159F + 8 +0 + 62 + 0 + 10 +7056.574063 + 20 +11020.061111 + 30 +0.0 + 11 +7056.574063 + 21 +11020.061111 + 31 +0.0 + 0 +LINE + 5 +15A0 + 8 +0 + 62 + 0 + 10 +7083.548077 + 20 +11040.759 + 30 +0.0 + 11 +7083.548077 + 21 +11040.759 + 31 +0.0 + 0 +LINE + 5 +15A1 + 8 +0 + 62 + 0 + 10 +7082.28821 + 20 +11079.295475 + 30 +0.0 + 11 +7082.28821 + 21 +11079.295475 + 31 +0.0 + 0 +LINE + 5 +15A2 + 8 +0 + 62 + 0 + 10 +7081.028343 + 20 +11117.831951 + 30 +0.0 + 11 +7081.028343 + 21 +11117.831951 + 31 +0.0 + 0 +LINE + 5 +15A3 + 8 +0 + 62 + 0 + 10 +7079.768476 + 20 +11156.368426 + 30 +0.0 + 11 +7079.768476 + 21 +11156.368426 + 31 +0.0 + 0 +LINE + 5 +15A4 + 8 +0 + 62 + 0 + 10 +7078.508608 + 20 +11194.904901 + 30 +0.0 + 11 +7078.508608 + 21 +11194.904901 + 31 +0.0 + 0 +LINE + 5 +15A5 + 8 +0 + 62 + 0 + 10 +7060.173199 + 20 +10153.752306 + 30 +0.0 + 11 +7060.173199 + 21 +10153.752306 + 31 +0.0 + 0 +LINE + 5 +15A6 + 8 +0 + 62 + 0 + 10 +7084.291141 + 20 +10172.258653 + 30 +0.0 + 11 +7084.291141 + 21 +10172.258653 + 31 +0.0 + 0 +LINE + 5 +15A7 + 8 +0 + 62 + 0 + 10 +7061.433067 + 20 +10115.21583 + 30 +0.0 + 11 +7061.433067 + 21 +10115.21583 + 31 +0.0 + 0 +LINE + 5 +15A8 + 8 +0 + 62 + 0 + 10 +7085.551008 + 20 +10133.722178 + 30 +0.0 + 11 +7085.551008 + 21 +10133.722178 + 31 +0.0 + 0 +LINE + 5 +15A9 + 8 +0 + 62 + 0 + 10 +7062.692934 + 20 +10076.679355 + 30 +0.0 + 11 +7062.692934 + 21 +10076.679355 + 31 +0.0 + 0 +LINE + 5 +15AA + 8 +0 + 62 + 0 + 10 +7086.810875 + 20 +10095.185702 + 30 +0.0 + 11 +7086.810875 + 21 +10095.185702 + 31 +0.0 + 0 +LINE + 5 +15AB + 8 +0 + 62 + 0 + 10 +7063.952801 + 20 +10038.142879 + 30 +0.0 + 11 +7063.952801 + 21 +10038.142879 + 31 +0.0 + 0 +LINE + 5 +15AC + 8 +0 + 62 + 0 + 10 +7088.070742 + 20 +10056.649227 + 30 +0.0 + 11 +7088.070742 + 21 +10056.649227 + 31 +0.0 + 0 +LINE + 5 +15AD + 8 +0 + 62 + 0 + 10 +7065.212668 + 20 +9999.606404 + 30 +0.0 + 11 +7065.212668 + 21 +9999.606404 + 31 +0.0 + 0 +LINE + 5 +15AE + 8 +0 + 62 + 0 + 10 +7089.33061 + 20 +10018.112751 + 30 +0.0 + 11 +7089.33061 + 21 +10018.112751 + 31 +0.0 + 0 +LINE + 5 +15AF + 8 +0 + 62 + 0 + 10 +7066.472535 + 20 +9961.069929 + 30 +0.0 + 11 +7066.472535 + 21 +9961.069929 + 31 +0.0 + 0 +LINE + 5 +15B0 + 8 +0 + 62 + 0 + 10 +7090.590477 + 20 +9979.576276 + 30 +0.0 + 11 +7090.590477 + 21 +9979.576276 + 31 +0.0 + 0 +LINE + 5 +15B1 + 8 +0 + 62 + 0 + 10 +7067.732402 + 20 +9922.533453 + 30 +0.0 + 11 +7067.732402 + 21 +9922.533453 + 31 +0.0 + 0 +LINE + 5 +15B2 + 8 +0 + 62 + 0 + 10 +7091.850344 + 20 +9941.039801 + 30 +0.0 + 11 +7091.850344 + 21 +9941.039801 + 31 +0.0 + 0 +LINE + 5 +15B3 + 8 +0 + 62 + 0 + 10 +7068.99227 + 20 +9883.996978 + 30 +0.0 + 11 +7068.99227 + 21 +9883.996978 + 31 +0.0 + 0 +LINE + 5 +15B4 + 8 +0 + 62 + 0 + 10 +7093.110211 + 20 +9902.503325 + 30 +0.0 + 11 +7093.110211 + 21 +9902.503325 + 31 +0.0 + 0 +LINE + 5 +15B5 + 8 +0 + 62 + 0 + 10 +7070.252137 + 20 +9845.460502 + 30 +0.0 + 11 +7070.252137 + 21 +9845.460502 + 31 +0.0 + 0 +LINE + 5 +15B6 + 8 +0 + 62 + 0 + 10 +7071.512004 + 20 +9806.924027 + 30 +0.0 + 11 +7071.512004 + 21 +9806.924027 + 31 +0.0 + 0 +LINE + 5 +15B7 + 8 +0 + 62 + 0 + 10 +7072.771871 + 20 +9768.387552 + 30 +0.0 + 11 +7072.771871 + 21 +9768.387552 + 31 +0.0 + 0 +LINE + 5 +15B8 + 8 +0 + 62 + 0 + 10 +7074.031738 + 20 +9729.851076 + 30 +0.0 + 11 +7074.031738 + 21 +9729.851076 + 31 +0.0 + 0 +LINE + 5 +15B9 + 8 +0 + 62 + 0 + 10 +7075.291605 + 20 +9691.314601 + 30 +0.0 + 11 +7075.291605 + 21 +9691.314601 + 31 +0.0 + 0 +LINE + 5 +15BA + 8 +0 + 62 + 0 + 10 +7076.551473 + 20 +9652.778126 + 30 +0.0 + 11 +7076.551473 + 21 +9652.778126 + 31 +0.0 + 0 +LINE + 5 +15BB + 8 +0 + 62 + 0 + 10 +7077.81134 + 20 +9614.24165 + 30 +0.0 + 11 +7077.81134 + 21 +9614.24165 + 31 +0.0 + 0 +LINE + 5 +15BC + 8 +0 + 62 + 0 + 10 +7079.071207 + 20 +9575.705175 + 30 +0.0 + 11 +7079.071207 + 21 +9575.705175 + 31 +0.0 + 0 +LINE + 5 +15BD + 8 +0 + 62 + 0 + 10 +7080.331074 + 20 +9537.168699 + 30 +0.0 + 11 +7080.331074 + 21 +9537.168699 + 31 +0.0 + 0 +LINE + 5 +15BE + 8 +0 + 62 + 0 + 10 +7068.541046 + 20 +10218.807581 + 30 +0.0 + 11 +7068.541046 + 21 +10218.807581 + 31 +0.0 + 0 +LINE + 5 +15BF + 8 +0 + 62 + 0 + 10 +7078.951217 + 20 +10220.178106 + 30 +0.0 + 11 +7078.951217 + 21 +10220.178106 + 31 +0.0 + 0 +LINE + 5 +15C0 + 8 +0 + 62 + 0 + 10 +7060.511295 + 20 +10269.533455 + 30 +0.0 + 11 +7060.511295 + 21 +10269.533455 + 31 +0.0 + 0 +LINE + 5 +15C1 + 8 +0 + 62 + 0 + 10 +7076.77099 + 20 +10271.674084 + 30 +0.0 + 11 +7076.77099 + 21 +10271.674084 + 31 +0.0 + 0 +LINE + 5 +15C2 + 8 +0 + 62 + 0 + 10 +7058.331069 + 20 +10321.029434 + 30 +0.0 + 11 +7058.331069 + 21 +10321.029434 + 31 +0.0 + 0 +LINE + 5 +15C3 + 8 +0 + 62 + 0 + 10 +7085.496658 + 20 +10324.605851 + 30 +0.0 + 11 +7085.496658 + 21 +10324.605851 + 31 +0.0 + 0 +LINE + 5 +15C4 + 8 +0 + 62 + 0 + 10 +7067.056736 + 20 +10373.9612 + 30 +0.0 + 11 +7067.056736 + 21 +10373.9612 + 31 +0.0 + 0 +LINE + 5 +15C5 + 8 +0 + 62 + 0 + 10 +7077.466907 + 20 +10375.331725 + 30 +0.0 + 11 +7077.466907 + 21 +10375.331725 + 31 +0.0 + 0 +LINE + 5 +15C6 + 8 +0 + 62 + 0 + 10 +7059.026985 + 20 +10424.687074 + 30 +0.0 + 11 +7059.026985 + 21 +10424.687074 + 31 +0.0 + 0 +LINE + 5 +15C7 + 8 +0 + 62 + 0 + 10 +7075.286681 + 20 +10426.827704 + 30 +0.0 + 11 +7075.286681 + 21 +10426.827704 + 31 +0.0 + 0 +LINE + 5 +15C8 + 8 +0 + 62 + 0 + 10 +7056.846759 + 20 +10476.183053 + 30 +0.0 + 11 +7056.846759 + 21 +10476.183053 + 31 +0.0 + 0 +LINE + 5 +15C9 + 8 +0 + 62 + 0 + 10 +7084.012348 + 20 +10479.759471 + 30 +0.0 + 11 +7084.012348 + 21 +10479.759471 + 31 +0.0 + 0 +LINE + 5 +15CA + 8 +0 + 62 + 0 + 10 +7065.572426 + 20 +10529.11482 + 30 +0.0 + 11 +7065.572426 + 21 +10529.11482 + 31 +0.0 + 0 +LINE + 5 +15CB + 8 +0 + 62 + 0 + 10 +7075.982597 + 20 +10530.485345 + 30 +0.0 + 11 +7075.982597 + 21 +10530.485345 + 31 +0.0 + 0 +LINE + 5 +15CC + 8 +0 + 62 + 0 + 10 +7092.242293 + 20 +10532.625974 + 30 +0.0 + 11 +7092.242293 + 21 +10532.625974 + 31 +0.0 + 0 +LINE + 5 +15CD + 8 +0 + 62 + 0 + 10 +7057.542675 + 20 +10579.840694 + 30 +0.0 + 11 +7057.542675 + 21 +10579.840694 + 31 +0.0 + 0 +LINE + 5 +15CE + 8 +0 + 62 + 0 + 10 +7073.802371 + 20 +10581.981323 + 30 +0.0 + 11 +7073.802371 + 21 +10581.981323 + 31 +0.0 + 0 +LINE + 5 +15CF + 8 +0 + 62 + 0 + 10 +7082.528039 + 20 +10634.91309 + 30 +0.0 + 11 +7082.528039 + 21 +10634.91309 + 31 +0.0 + 0 +LINE + 5 +15D0 + 8 +0 + 62 + 0 + 10 +7092.93821 + 20 +10636.283615 + 30 +0.0 + 11 +7092.93821 + 21 +10636.283615 + 31 +0.0 + 0 +LINE + 5 +15D1 + 8 +0 + 62 + 0 + 10 +7064.088117 + 20 +10684.268439 + 30 +0.0 + 11 +7064.088117 + 21 +10684.268439 + 31 +0.0 + 0 +LINE + 5 +15D2 + 8 +0 + 62 + 0 + 10 +7074.498288 + 20 +10685.638964 + 30 +0.0 + 11 +7074.498288 + 21 +10685.638964 + 31 +0.0 + 0 +LINE + 5 +15D3 + 8 +0 + 62 + 0 + 10 +7090.757983 + 20 +10687.779594 + 30 +0.0 + 11 +7090.757983 + 21 +10687.779594 + 31 +0.0 + 0 +LINE + 5 +15D4 + 8 +0 + 62 + 0 + 10 +7072.318062 + 20 +10737.134943 + 30 +0.0 + 11 +7072.318062 + 21 +10737.134943 + 31 +0.0 + 0 +LINE + 5 +15D5 + 8 +0 + 62 + 0 + 10 +7081.043729 + 20 +10790.06671 + 30 +0.0 + 11 +7081.043729 + 21 +10790.06671 + 31 +0.0 + 0 +LINE + 5 +15D6 + 8 +0 + 62 + 0 + 10 +7091.4539 + 20 +10791.437235 + 30 +0.0 + 11 +7091.4539 + 21 +10791.437235 + 31 +0.0 + 0 +LINE + 5 +15D7 + 8 +0 + 62 + 0 + 10 +7062.603807 + 20 +10839.422059 + 30 +0.0 + 11 +7062.603807 + 21 +10839.422059 + 31 +0.0 + 0 +LINE + 5 +15D8 + 8 +0 + 62 + 0 + 10 +7073.013978 + 20 +10840.792584 + 30 +0.0 + 11 +7073.013978 + 21 +10840.792584 + 31 +0.0 + 0 +LINE + 5 +15D9 + 8 +0 + 62 + 0 + 10 +7089.273674 + 20 +10842.933213 + 30 +0.0 + 11 +7089.273674 + 21 +10842.933213 + 31 +0.0 + 0 +LINE + 5 +15DA + 8 +0 + 62 + 0 + 10 +7070.833752 + 20 +10892.288562 + 30 +0.0 + 11 +7070.833752 + 21 +10892.288562 + 31 +0.0 + 0 +LINE + 5 +15DB + 8 +0 + 62 + 0 + 10 +7079.559419 + 20 +10945.220329 + 30 +0.0 + 11 +7079.559419 + 21 +10945.220329 + 31 +0.0 + 0 +LINE + 5 +15DC + 8 +0 + 62 + 0 + 10 +7089.96959 + 20 +10946.590854 + 30 +0.0 + 11 +7089.96959 + 21 +10946.590854 + 31 +0.0 + 0 +LINE + 5 +15DD + 8 +0 + 62 + 0 + 10 +7061.119497 + 20 +10994.575678 + 30 +0.0 + 11 +7061.119497 + 21 +10994.575678 + 31 +0.0 + 0 +LINE + 5 +15DE + 8 +0 + 62 + 0 + 10 +7071.529668 + 20 +10995.946203 + 30 +0.0 + 11 +7071.529668 + 21 +10995.946203 + 31 +0.0 + 0 +LINE + 5 +15DF + 8 +0 + 62 + 0 + 10 +7087.789364 + 20 +10998.086833 + 30 +0.0 + 11 +7087.789364 + 21 +10998.086833 + 31 +0.0 + 0 +LINE + 5 +15E0 + 8 +0 + 62 + 0 + 10 +7069.349442 + 20 +11047.442182 + 30 +0.0 + 11 +7069.349442 + 21 +11047.442182 + 31 +0.0 + 0 +LINE + 5 +15E1 + 8 +0 + 62 + 0 + 10 +7078.07511 + 20 +11100.373948 + 30 +0.0 + 11 +7078.07511 + 21 +11100.373948 + 31 +0.0 + 0 +LINE + 5 +15E2 + 8 +0 + 62 + 0 + 10 +7088.485281 + 20 +11101.744473 + 30 +0.0 + 11 +7088.485281 + 21 +11101.744473 + 31 +0.0 + 0 +LINE + 5 +15E3 + 8 +0 + 62 + 0 + 10 +7059.635188 + 20 +11149.729297 + 30 +0.0 + 11 +7059.635188 + 21 +11149.729297 + 31 +0.0 + 0 +LINE + 5 +15E4 + 8 +0 + 62 + 0 + 10 +7070.045359 + 20 +11151.099822 + 30 +0.0 + 11 +7070.045359 + 21 +11151.099822 + 31 +0.0 + 0 +LINE + 5 +15E5 + 8 +0 + 62 + 0 + 10 +7086.305055 + 20 +11153.240452 + 30 +0.0 + 11 +7086.305055 + 21 +11153.240452 + 31 +0.0 + 0 +LINE + 5 +15E6 + 8 +0 + 62 + 0 + 10 +7067.865133 + 20 +11202.595801 + 30 +0.0 + 11 +7067.865133 + 21 +11202.595801 + 31 +0.0 + 0 +LINE + 5 +15E7 + 8 +0 + 62 + 0 + 10 +7059.815378 + 20 +10165.875814 + 30 +0.0 + 11 +7059.815378 + 21 +10165.875814 + 31 +0.0 + 0 +LINE + 5 +15E8 + 8 +0 + 62 + 0 + 10 +7086.980967 + 20 +10169.452232 + 30 +0.0 + 11 +7086.980967 + 21 +10169.452232 + 31 +0.0 + 0 +LINE + 5 +15E9 + 8 +0 + 62 + 0 + 10 +7061.995604 + 20 +10114.379835 + 30 +0.0 + 11 +7061.995604 + 21 +10114.379835 + 31 +0.0 + 0 +LINE + 5 +15EA + 8 +0 + 62 + 0 + 10 +7078.2553 + 20 +10116.520465 + 30 +0.0 + 11 +7078.2553 + 21 +10116.520465 + 31 +0.0 + 0 +LINE + 5 +15EB + 8 +0 + 62 + 0 + 10 +7070.025355 + 20 +10063.653961 + 30 +0.0 + 11 +7070.025355 + 21 +10063.653961 + 31 +0.0 + 0 +LINE + 5 +15EC + 8 +0 + 62 + 0 + 10 +7080.435526 + 20 +10065.024486 + 30 +0.0 + 11 +7080.435526 + 21 +10065.024486 + 31 +0.0 + 0 +LINE + 5 +15ED + 8 +0 + 62 + 0 + 10 +7061.299688 + 20 +10010.722195 + 30 +0.0 + 11 +7061.299688 + 21 +10010.722195 + 31 +0.0 + 0 +LINE + 5 +15EE + 8 +0 + 62 + 0 + 10 +7088.465277 + 20 +10014.298612 + 30 +0.0 + 11 +7088.465277 + 21 +10014.298612 + 31 +0.0 + 0 +LINE + 5 +15EF + 8 +0 + 62 + 0 + 10 +7063.479914 + 20 +9959.226216 + 30 +0.0 + 11 +7063.479914 + 21 +9959.226216 + 31 +0.0 + 0 +LINE + 5 +15F0 + 8 +0 + 62 + 0 + 10 +7079.73961 + 20 +9961.366846 + 30 +0.0 + 11 +7079.73961 + 21 +9961.366846 + 31 +0.0 + 0 +LINE + 5 +15F1 + 8 +0 + 62 + 0 + 10 +7071.509665 + 20 +9908.500342 + 30 +0.0 + 11 +7071.509665 + 21 +9908.500342 + 31 +0.0 + 0 +LINE + 5 +15F2 + 8 +0 + 62 + 0 + 10 +7081.919836 + 20 +9909.870867 + 30 +0.0 + 11 +7081.919836 + 21 +9909.870867 + 31 +0.0 + 0 +LINE + 5 +15F3 + 8 +0 + 62 + 0 + 10 +7062.783997 + 20 +9855.568575 + 30 +0.0 + 11 +7062.783997 + 21 +9855.568575 + 31 +0.0 + 0 +LINE + 5 +15F4 + 8 +0 + 62 + 0 + 10 +7089.949587 + 20 +9859.144993 + 30 +0.0 + 11 +7089.949587 + 21 +9859.144993 + 31 +0.0 + 0 +LINE + 5 +15F5 + 8 +0 + 62 + 0 + 10 +7064.964224 + 20 +9804.072597 + 30 +0.0 + 11 +7064.964224 + 21 +9804.072597 + 31 +0.0 + 0 +LINE + 5 +15F6 + 8 +0 + 62 + 0 + 10 +7081.223919 + 20 +9806.213226 + 30 +0.0 + 11 +7081.223919 + 21 +9806.213226 + 31 +0.0 + 0 +LINE + 5 +15F7 + 8 +0 + 62 + 0 + 10 +7072.993974 + 20 +9753.346723 + 30 +0.0 + 11 +7072.993974 + 21 +9753.346723 + 31 +0.0 + 0 +LINE + 5 +15F8 + 8 +0 + 62 + 0 + 10 +7083.404145 + 20 +9754.717248 + 30 +0.0 + 11 +7083.404145 + 21 +9754.717248 + 31 +0.0 + 0 +LINE + 5 +15F9 + 8 +0 + 62 + 0 + 10 +7064.268307 + 20 +9700.414956 + 30 +0.0 + 11 +7064.268307 + 21 +9700.414956 + 31 +0.0 + 0 +LINE + 5 +15FA + 8 +0 + 62 + 0 + 10 +7091.433896 + 20 +9703.991373 + 30 +0.0 + 11 +7091.433896 + 21 +9703.991373 + 31 +0.0 + 0 +LINE + 5 +15FB + 8 +0 + 62 + 0 + 10 +7066.448533 + 20 +9648.918977 + 30 +0.0 + 11 +7066.448533 + 21 +9648.918977 + 31 +0.0 + 0 +LINE + 5 +15FC + 8 +0 + 62 + 0 + 10 +7082.708229 + 20 +9651.059607 + 30 +0.0 + 11 +7082.708229 + 21 +9651.059607 + 31 +0.0 + 0 +LINE + 5 +15FD + 8 +0 + 62 + 0 + 10 +7074.478284 + 20 +9598.193103 + 30 +0.0 + 11 +7074.478284 + 21 +9598.193103 + 31 +0.0 + 0 +LINE + 5 +15FE + 8 +0 + 62 + 0 + 10 +7084.888455 + 20 +9599.563628 + 30 +0.0 + 11 +7084.888455 + 21 +9599.563628 + 31 +0.0 + 0 +LINE + 5 +15FF + 8 +0 + 62 + 0 + 10 +7065.752617 + 20 +9545.261336 + 30 +0.0 + 11 +7065.752617 + 21 +9545.261336 + 31 +0.0 + 0 +LINE + 5 +1600 + 8 +0 + 62 + 0 + 10 +7092.918206 + 20 +9548.837754 + 30 +0.0 + 11 +7092.918206 + 21 +9548.837754 + 31 +0.0 + 0 +LINE + 5 +1601 + 8 +0 + 62 + 0 + 10 +7062.509389 + 20 +10209.034185 + 30 +0.0 + 11 +7062.509389 + 21 +10209.034185 + 31 +0.0 + 0 +LINE + 5 +1602 + 8 +0 + 62 + 0 + 10 +7085.99622 + 20 +10233.863148 + 30 +0.0 + 11 +7085.99622 + 21 +10233.863148 + 31 +0.0 + 0 +LINE + 5 +1603 + 8 +0 + 62 + 0 + 10 +7069.843653 + 20 +10283.945192 + 30 +0.0 + 11 +7069.843653 + 21 +10283.945192 + 31 +0.0 + 0 +LINE + 5 +1604 + 8 +0 + 62 + 0 + 10 +7078.277567 + 20 +10278.572196 + 30 +0.0 + 11 +7078.277567 + 21 +10278.572196 + 31 +0.0 + 0 +LINE + 5 +1605 + 8 +0 + 62 + 0 + 10 +7062.125 + 20 +10328.654241 + 30 +0.0 + 11 +7062.125 + 21 +10328.654241 + 31 +0.0 + 0 +LINE + 5 +1606 + 8 +0 + 62 + 0 + 10 +7092.487092 + 20 +10309.311455 + 30 +0.0 + 11 +7092.487092 + 21 +10309.311455 + 31 +0.0 + 0 +LINE + 5 +1607 + 8 +0 + 62 + 0 + 10 +7076.334525 + 20 +10359.3935 + 30 +0.0 + 11 +7076.334525 + 21 +10359.3935 + 31 +0.0 + 0 +LINE + 5 +1608 + 8 +0 + 62 + 0 + 10 +7060.181957 + 20 +10409.475544 + 30 +0.0 + 11 +7060.181957 + 21 +10409.475544 + 31 +0.0 + 0 +LINE + 5 +1609 + 8 +0 + 62 + 0 + 10 +7083.668788 + 20 +10434.304507 + 30 +0.0 + 11 +7083.668788 + 21 +10434.304507 + 31 +0.0 + 0 +LINE + 5 +160A + 8 +0 + 62 + 0 + 10 +7092.102703 + 20 +10428.931511 + 30 +0.0 + 11 +7092.102703 + 21 +10428.931511 + 31 +0.0 + 0 +LINE + 5 +160B + 8 +0 + 62 + 0 + 10 +7067.516221 + 20 +10484.386552 + 30 +0.0 + 11 +7067.516221 + 21 +10484.386552 + 31 +0.0 + 0 +LINE + 5 +160C + 8 +0 + 62 + 0 + 10 +7075.950135 + 20 +10479.013556 + 30 +0.0 + 11 +7075.950135 + 21 +10479.013556 + 31 +0.0 + 0 +LINE + 5 +160D + 8 +0 + 62 + 0 + 10 +7059.797568 + 20 +10529.095601 + 30 +0.0 + 11 +7059.797568 + 21 +10529.095601 + 31 +0.0 + 0 +LINE + 5 +160E + 8 +0 + 62 + 0 + 10 +7090.15966 + 20 +10509.752815 + 30 +0.0 + 11 +7090.15966 + 21 +10509.752815 + 31 +0.0 + 0 +LINE + 5 +160F + 8 +0 + 62 + 0 + 10 +7074.007093 + 20 +10559.834859 + 30 +0.0 + 11 +7074.007093 + 21 +10559.834859 + 31 +0.0 + 0 +LINE + 5 +1610 + 8 +0 + 62 + 0 + 10 +7057.854526 + 20 +10609.916904 + 30 +0.0 + 11 +7057.854526 + 21 +10609.916904 + 31 +0.0 + 0 +LINE + 5 +1611 + 8 +0 + 62 + 0 + 10 +7081.341357 + 20 +10634.745867 + 30 +0.0 + 11 +7081.341357 + 21 +10634.745867 + 31 +0.0 + 0 +LINE + 5 +1612 + 8 +0 + 62 + 0 + 10 +7089.775271 + 20 +10629.372871 + 30 +0.0 + 11 +7089.775271 + 21 +10629.372871 + 31 +0.0 + 0 +LINE + 5 +1613 + 8 +0 + 62 + 0 + 10 +7065.188789 + 20 +10684.827912 + 30 +0.0 + 11 +7065.188789 + 21 +10684.827912 + 31 +0.0 + 0 +LINE + 5 +1614 + 8 +0 + 62 + 0 + 10 +7073.622704 + 20 +10679.454916 + 30 +0.0 + 11 +7073.622704 + 21 +10679.454916 + 31 +0.0 + 0 +LINE + 5 +1615 + 8 +0 + 62 + 0 + 10 +7057.470137 + 20 +10729.53696 + 30 +0.0 + 11 +7057.470137 + 21 +10729.53696 + 31 +0.0 + 0 +LINE + 5 +1616 + 8 +0 + 62 + 0 + 10 +7087.832229 + 20 +10710.194174 + 30 +0.0 + 11 +7087.832229 + 21 +10710.194174 + 31 +0.0 + 0 +LINE + 5 +1617 + 8 +0 + 62 + 0 + 10 +7071.679661 + 20 +10760.276219 + 30 +0.0 + 11 +7071.679661 + 21 +10760.276219 + 31 +0.0 + 0 +LINE + 5 +1618 + 8 +0 + 62 + 0 + 10 +7079.013925 + 20 +10835.187227 + 30 +0.0 + 11 +7079.013925 + 21 +10835.187227 + 31 +0.0 + 0 +LINE + 5 +1619 + 8 +0 + 62 + 0 + 10 +7087.447839 + 20 +10829.814231 + 30 +0.0 + 11 +7087.447839 + 21 +10829.814231 + 31 +0.0 + 0 +LINE + 5 +161A + 8 +0 + 62 + 0 + 10 +7062.861358 + 20 +10885.269271 + 30 +0.0 + 11 +7062.861358 + 21 +10885.269271 + 31 +0.0 + 0 +LINE + 5 +161B + 8 +0 + 62 + 0 + 10 +7071.295272 + 20 +10879.896275 + 30 +0.0 + 11 +7071.295272 + 21 +10879.896275 + 31 +0.0 + 0 +LINE + 5 +161C + 8 +0 + 62 + 0 + 10 +7085.504797 + 20 +10910.635534 + 30 +0.0 + 11 +7085.504797 + 21 +10910.635534 + 31 +0.0 + 0 +LINE + 5 +161D + 8 +0 + 62 + 0 + 10 +7069.35223 + 20 +10960.717579 + 30 +0.0 + 11 +7069.35223 + 21 +10960.717579 + 31 +0.0 + 0 +LINE + 5 +161E + 8 +0 + 62 + 0 + 10 +7092.83906 + 20 +10985.546542 + 30 +0.0 + 11 +7092.83906 + 21 +10985.546542 + 31 +0.0 + 0 +LINE + 5 +161F + 8 +0 + 62 + 0 + 10 +7076.686493 + 20 +11035.628586 + 30 +0.0 + 11 +7076.686493 + 21 +11035.628586 + 31 +0.0 + 0 +LINE + 5 +1620 + 8 +0 + 62 + 0 + 10 +7085.120408 + 20 +11030.25559 + 30 +0.0 + 11 +7085.120408 + 21 +11030.25559 + 31 +0.0 + 0 +LINE + 5 +1621 + 8 +0 + 62 + 0 + 10 +7060.533926 + 20 +11085.710631 + 30 +0.0 + 11 +7060.533926 + 21 +11085.710631 + 31 +0.0 + 0 +LINE + 5 +1622 + 8 +0 + 62 + 0 + 10 +7068.96784 + 20 +11080.337635 + 30 +0.0 + 11 +7068.96784 + 21 +11080.337635 + 31 +0.0 + 0 +LINE + 5 +1623 + 8 +0 + 62 + 0 + 10 +7083.177365 + 20 +11111.076894 + 30 +0.0 + 11 +7083.177365 + 21 +11111.076894 + 31 +0.0 + 0 +LINE + 5 +1624 + 8 +0 + 62 + 0 + 10 +7067.024798 + 20 +11161.158938 + 30 +0.0 + 11 +7067.024798 + 21 +11161.158938 + 31 +0.0 + 0 +LINE + 5 +1625 + 8 +0 + 62 + 0 + 10 +7090.511629 + 20 +11185.987901 + 30 +0.0 + 11 +7090.511629 + 21 +11185.987901 + 31 +0.0 + 0 +LINE + 5 +1626 + 8 +0 + 62 + 0 + 10 +7078.661956 + 20 +10158.95214 + 30 +0.0 + 11 +7078.661956 + 21 +10158.95214 + 31 +0.0 + 0 +LINE + 5 +1627 + 8 +0 + 62 + 0 + 10 +7064.452432 + 20 +10128.212881 + 30 +0.0 + 11 +7064.452432 + 21 +10128.212881 + 31 +0.0 + 0 +LINE + 5 +1628 + 8 +0 + 62 + 0 + 10 +7072.171084 + 20 +10083.503833 + 30 +0.0 + 11 +7072.171084 + 21 +10083.503833 + 31 +0.0 + 0 +LINE + 5 +1629 + 8 +0 + 62 + 0 + 10 +7080.604999 + 20 +10078.130837 + 30 +0.0 + 11 +7080.604999 + 21 +10078.130837 + 31 +0.0 + 0 +LINE + 5 +162A + 8 +0 + 62 + 0 + 10 +7088.323652 + 20 +10033.421788 + 30 +0.0 + 11 +7088.323652 + 21 +10033.421788 + 31 +0.0 + 0 +LINE + 5 +162B + 8 +0 + 62 + 0 + 10 +7064.836821 + 20 +10008.592825 + 30 +0.0 + 11 +7064.836821 + 21 +10008.592825 + 31 +0.0 + 0 +LINE + 5 +162C + 8 +0 + 62 + 0 + 10 +7080.989388 + 20 +9958.51078 + 30 +0.0 + 11 +7080.989388 + 21 +9958.51078 + 31 +0.0 + 0 +LINE + 5 +162D + 8 +0 + 62 + 0 + 10 +7058.345949 + 20 +9933.144518 + 30 +0.0 + 11 +7058.345949 + 21 +9933.144518 + 31 +0.0 + 0 +LINE + 5 +162E + 8 +0 + 62 + 0 + 10 +7066.779863 + 20 +9927.771522 + 30 +0.0 + 11 +7066.779863 + 21 +9927.771522 + 31 +0.0 + 0 +LINE + 5 +162F + 8 +0 + 62 + 0 + 10 +7074.498516 + 20 +9883.062473 + 30 +0.0 + 11 +7074.498516 + 21 +9883.062473 + 31 +0.0 + 0 +LINE + 5 +1630 + 8 +0 + 62 + 0 + 10 +7082.93243 + 20 +9877.689477 + 30 +0.0 + 11 +7082.93243 + 21 +9877.689477 + 31 +0.0 + 0 +LINE + 5 +1631 + 8 +0 + 62 + 0 + 10 +7090.651083 + 20 +9832.980428 + 30 +0.0 + 11 +7090.651083 + 21 +9832.980428 + 31 +0.0 + 0 +LINE + 5 +1632 + 8 +0 + 62 + 0 + 10 +7067.164252 + 20 +9808.151465 + 30 +0.0 + 11 +7067.164252 + 21 +9808.151465 + 31 +0.0 + 0 +LINE + 5 +1633 + 8 +0 + 62 + 0 + 10 +7083.31682 + 20 +9758.069421 + 30 +0.0 + 11 +7083.31682 + 21 +9758.069421 + 31 +0.0 + 0 +LINE + 5 +1634 + 8 +0 + 62 + 0 + 10 +7060.67338 + 20 +9732.703158 + 30 +0.0 + 11 +7060.67338 + 21 +9732.703158 + 31 +0.0 + 0 +LINE + 5 +1635 + 8 +0 + 62 + 0 + 10 +7069.107295 + 20 +9727.330162 + 30 +0.0 + 11 +7069.107295 + 21 +9727.330162 + 31 +0.0 + 0 +LINE + 5 +1636 + 8 +0 + 62 + 0 + 10 +7076.825948 + 20 +9682.621113 + 30 +0.0 + 11 +7076.825948 + 21 +9682.621113 + 31 +0.0 + 0 +LINE + 5 +1637 + 8 +0 + 62 + 0 + 10 +7085.259862 + 20 +9677.248117 + 30 +0.0 + 11 +7085.259862 + 21 +9677.248117 + 31 +0.0 + 0 +LINE + 5 +1638 + 8 +0 + 62 + 0 + 10 +7092.978515 + 20 +9632.539069 + 30 +0.0 + 11 +7092.978515 + 21 +9632.539069 + 31 +0.0 + 0 +LINE + 5 +1639 + 8 +0 + 62 + 0 + 10 +7069.491684 + 20 +9607.710106 + 30 +0.0 + 11 +7069.491684 + 21 +9607.710106 + 31 +0.0 + 0 +LINE + 5 +163A + 8 +0 + 62 + 0 + 10 +7085.644251 + 20 +9557.628061 + 30 +0.0 + 11 +7085.644251 + 21 +9557.628061 + 31 +0.0 + 0 +LINE + 5 +163B + 8 +0 + 62 + 0 + 10 +7063.762596 + 20 +10174.102745 + 30 +0.0 + 11 +7063.762596 + 21 +10174.102745 + 31 +0.0 + 0 +LINE + 5 +163C + 8 +0 + 62 + 0 + 10 +7067.448983 + 20 +10170.724794 + 30 +0.0 + 11 +7067.448983 + 21 +10170.724794 + 31 +0.0 + 0 +LINE + 5 +163D + 8 +0 + 62 + 0 + 10 +7084.848728 + 20 +10154.780865 + 30 +0.0 + 11 +7084.848728 + 21 +10154.780865 + 31 +0.0 + 0 +LINE + 5 +163E + 8 +0 + 62 + 0 + 10 +7062.98602 + 20 +10247.460008 + 30 +0.0 + 11 +7062.98602 + 21 +10247.460008 + 31 +0.0 + 0 +LINE + 5 +163F + 8 +0 + 62 + 0 + 10 +7082.892508 + 20 +10229.219072 + 30 +0.0 + 11 +7082.892508 + 21 +10229.219072 + 31 +0.0 + 0 +LINE + 5 +1640 + 8 +0 + 62 + 0 + 10 +7086.578895 + 20 +10225.841121 + 30 +0.0 + 11 +7086.578895 + 21 +10225.841121 + 31 +0.0 + 0 +LINE + 5 +1641 + 8 +0 + 62 + 0 + 10 +7061.029801 + 20 +10321.898214 + 30 +0.0 + 11 +7061.029801 + 21 +10321.898214 + 31 +0.0 + 0 +LINE + 5 +1642 + 8 +0 + 62 + 0 + 10 +7064.716187 + 20 +10318.520263 + 30 +0.0 + 11 +7064.716187 + 21 +10318.520263 + 31 +0.0 + 0 +LINE + 5 +1643 + 8 +0 + 62 + 0 + 10 +7082.115932 + 20 +10302.576334 + 30 +0.0 + 11 +7082.115932 + 21 +10302.576334 + 31 +0.0 + 0 +LINE + 5 +1644 + 8 +0 + 62 + 0 + 10 +7060.253225 + 20 +10395.255477 + 30 +0.0 + 11 +7060.253225 + 21 +10395.255477 + 31 +0.0 + 0 +LINE + 5 +1645 + 8 +0 + 62 + 0 + 10 +7080.159713 + 20 +10377.014541 + 30 +0.0 + 11 +7080.159713 + 21 +10377.014541 + 31 +0.0 + 0 +LINE + 5 +1646 + 8 +0 + 62 + 0 + 10 +7083.846099 + 20 +10373.63659 + 30 +0.0 + 11 +7083.846099 + 21 +10373.63659 + 31 +0.0 + 0 +LINE + 5 +1647 + 8 +0 + 62 + 0 + 10 +7058.297005 + 20 +10469.693684 + 30 +0.0 + 11 +7058.297005 + 21 +10469.693684 + 31 +0.0 + 0 +LINE + 5 +1648 + 8 +0 + 62 + 0 + 10 +7061.983392 + 20 +10466.315733 + 30 +0.0 + 11 +7061.983392 + 21 +10466.315733 + 31 +0.0 + 0 +LINE + 5 +1649 + 8 +0 + 62 + 0 + 10 +7079.383137 + 20 +10450.371804 + 30 +0.0 + 11 +7079.383137 + 21 +10450.371804 + 31 +0.0 + 0 +LINE + 5 +164A + 8 +0 + 62 + 0 + 10 +7057.520429 + 20 +10543.050946 + 30 +0.0 + 11 +7057.520429 + 21 +10543.050946 + 31 +0.0 + 0 +LINE + 5 +164B + 8 +0 + 62 + 0 + 10 +7077.426917 + 20 +10524.81001 + 30 +0.0 + 11 +7077.426917 + 21 +10524.81001 + 31 +0.0 + 0 +LINE + 5 +164C + 8 +0 + 62 + 0 + 10 +7081.113304 + 20 +10521.432059 + 30 +0.0 + 11 +7081.113304 + 21 +10521.432059 + 31 +0.0 + 0 +LINE + 5 +164D + 8 +0 + 62 + 0 + 10 +7059.250596 + 20 +10614.111202 + 30 +0.0 + 11 +7059.250596 + 21 +10614.111202 + 31 +0.0 + 0 +LINE + 5 +164E + 8 +0 + 62 + 0 + 10 +7076.650341 + 20 +10598.167273 + 30 +0.0 + 11 +7076.650341 + 21 +10598.167273 + 31 +0.0 + 0 +LINE + 5 +164F + 8 +0 + 62 + 0 + 10 +7074.694121 + 20 +10672.60548 + 30 +0.0 + 11 +7074.694121 + 21 +10672.60548 + 31 +0.0 + 0 +LINE + 5 +1650 + 8 +0 + 62 + 0 + 10 +7078.380508 + 20 +10669.227529 + 30 +0.0 + 11 +7078.380508 + 21 +10669.227529 + 31 +0.0 + 0 +LINE + 5 +1651 + 8 +0 + 62 + 0 + 10 +7056.5178 + 20 +10761.906671 + 30 +0.0 + 11 +7056.5178 + 21 +10761.906671 + 31 +0.0 + 0 +LINE + 5 +1652 + 8 +0 + 62 + 0 + 10 +7073.917546 + 20 +10745.962742 + 30 +0.0 + 11 +7073.917546 + 21 +10745.962742 + 31 +0.0 + 0 +LINE + 5 +1653 + 8 +0 + 62 + 0 + 10 +7071.961326 + 20 +10820.400949 + 30 +0.0 + 11 +7071.961326 + 21 +10820.400949 + 31 +0.0 + 0 +LINE + 5 +1654 + 8 +0 + 62 + 0 + 10 +7075.647713 + 20 +10817.022998 + 30 +0.0 + 11 +7075.647713 + 21 +10817.022998 + 31 +0.0 + 0 +LINE + 5 +1655 + 8 +0 + 62 + 0 + 10 +7093.047458 + 20 +10801.079069 + 30 +0.0 + 11 +7093.047458 + 21 +10801.079069 + 31 +0.0 + 0 +LINE + 5 +1656 + 8 +0 + 62 + 0 + 10 +7071.18475 + 20 +10893.758211 + 30 +0.0 + 11 +7071.18475 + 21 +10893.758211 + 31 +0.0 + 0 +LINE + 5 +1657 + 8 +0 + 62 + 0 + 10 +7091.091238 + 20 +10875.517276 + 30 +0.0 + 11 +7091.091238 + 21 +10875.517276 + 31 +0.0 + 0 +LINE + 5 +1658 + 8 +0 + 62 + 0 + 10 +7069.22853 + 20 +10968.196418 + 30 +0.0 + 11 +7069.22853 + 21 +10968.196418 + 31 +0.0 + 0 +LINE + 5 +1659 + 8 +0 + 62 + 0 + 10 +7072.914917 + 20 +10964.818467 + 30 +0.0 + 11 +7072.914917 + 21 +10964.818467 + 31 +0.0 + 0 +LINE + 5 +165A + 8 +0 + 62 + 0 + 10 +7090.314662 + 20 +10948.874538 + 30 +0.0 + 11 +7090.314662 + 21 +10948.874538 + 31 +0.0 + 0 +LINE + 5 +165B + 8 +0 + 62 + 0 + 10 +7068.451954 + 20 +11041.553681 + 30 +0.0 + 11 +7068.451954 + 21 +11041.553681 + 31 +0.0 + 0 +LINE + 5 +165C + 8 +0 + 62 + 0 + 10 +7088.358442 + 20 +11023.312745 + 30 +0.0 + 11 +7088.358442 + 21 +11023.312745 + 31 +0.0 + 0 +LINE + 5 +165D + 8 +0 + 62 + 0 + 10 +7092.044829 + 20 +11019.934794 + 30 +0.0 + 11 +7092.044829 + 21 +11019.934794 + 31 +0.0 + 0 +LINE + 5 +165E + 8 +0 + 62 + 0 + 10 +7066.495735 + 20 +11115.991887 + 30 +0.0 + 11 +7066.495735 + 21 +11115.991887 + 31 +0.0 + 0 +LINE + 5 +165F + 8 +0 + 62 + 0 + 10 +7070.182121 + 20 +11112.613936 + 30 +0.0 + 11 +7070.182121 + 21 +11112.613936 + 31 +0.0 + 0 +LINE + 5 +1660 + 8 +0 + 62 + 0 + 10 +7087.581867 + 20 +11096.670007 + 30 +0.0 + 11 +7087.581867 + 21 +11096.670007 + 31 +0.0 + 0 +LINE + 5 +1661 + 8 +0 + 62 + 0 + 10 +7065.719159 + 20 +11189.34915 + 30 +0.0 + 11 +7065.719159 + 21 +11189.34915 + 31 +0.0 + 0 +LINE + 5 +1662 + 8 +0 + 62 + 0 + 10 +7085.625647 + 20 +11171.108214 + 30 +0.0 + 11 +7085.625647 + 21 +11171.108214 + 31 +0.0 + 0 +LINE + 5 +1663 + 8 +0 + 62 + 0 + 10 +7089.312034 + 20 +11167.730263 + 30 +0.0 + 11 +7089.312034 + 21 +11167.730263 + 31 +0.0 + 0 +LINE + 5 +1664 + 8 +0 + 62 + 0 + 10 +7065.718816 + 20 +10099.664538 + 30 +0.0 + 11 +7065.718816 + 21 +10099.664538 + 31 +0.0 + 0 +LINE + 5 +1665 + 8 +0 + 62 + 0 + 10 +7085.625304 + 20 +10081.423603 + 30 +0.0 + 11 +7085.625304 + 21 +10081.423603 + 31 +0.0 + 0 +LINE + 5 +1666 + 8 +0 + 62 + 0 + 10 +7089.311691 + 20 +10078.045652 + 30 +0.0 + 11 +7089.311691 + 21 +10078.045652 + 31 +0.0 + 0 +LINE + 5 +1667 + 8 +0 + 62 + 0 + 10 +7066.495392 + 20 +10026.307276 + 30 +0.0 + 11 +7066.495392 + 21 +10026.307276 + 31 +0.0 + 0 +LINE + 5 +1668 + 8 +0 + 62 + 0 + 10 +7070.181778 + 20 +10022.929325 + 30 +0.0 + 11 +7070.181778 + 21 +10022.929325 + 31 +0.0 + 0 +LINE + 5 +1669 + 8 +0 + 62 + 0 + 10 +7087.581524 + 20 +10006.985396 + 30 +0.0 + 11 +7087.581524 + 21 +10006.985396 + 31 +0.0 + 0 +LINE + 5 +166A + 8 +0 + 62 + 0 + 10 +7068.451611 + 20 +9951.869069 + 30 +0.0 + 11 +7068.451611 + 21 +9951.869069 + 31 +0.0 + 0 +LINE + 5 +166B + 8 +0 + 62 + 0 + 10 +7088.358099 + 20 +9933.628134 + 30 +0.0 + 11 +7088.358099 + 21 +9933.628134 + 31 +0.0 + 0 +LINE + 5 +166C + 8 +0 + 62 + 0 + 10 +7092.044486 + 20 +9930.250183 + 30 +0.0 + 11 +7092.044486 + 21 +9930.250183 + 31 +0.0 + 0 +LINE + 5 +166D + 8 +0 + 62 + 0 + 10 +7069.228187 + 20 +9878.511807 + 30 +0.0 + 11 +7069.228187 + 21 +9878.511807 + 31 +0.0 + 0 +LINE + 5 +166E + 8 +0 + 62 + 0 + 10 +7072.914574 + 20 +9875.133856 + 30 +0.0 + 11 +7072.914574 + 21 +9875.133856 + 31 +0.0 + 0 +LINE + 5 +166F + 8 +0 + 62 + 0 + 10 +7090.314319 + 20 +9859.189927 + 30 +0.0 + 11 +7090.314319 + 21 +9859.189927 + 31 +0.0 + 0 +LINE + 5 +1670 + 8 +0 + 62 + 0 + 10 +7071.184407 + 20 +9804.0736 + 30 +0.0 + 11 +7071.184407 + 21 +9804.0736 + 31 +0.0 + 0 +LINE + 5 +1671 + 8 +0 + 62 + 0 + 10 +7091.090895 + 20 +9785.832664 + 30 +0.0 + 11 +7091.090895 + 21 +9785.832664 + 31 +0.0 + 0 +LINE + 5 +1672 + 8 +0 + 62 + 0 + 10 +7071.960983 + 20 +9730.716337 + 30 +0.0 + 11 +7071.960983 + 21 +9730.716337 + 31 +0.0 + 0 +LINE + 5 +1673 + 8 +0 + 62 + 0 + 10 +7075.64737 + 20 +9727.338386 + 30 +0.0 + 11 +7075.64737 + 21 +9727.338386 + 31 +0.0 + 0 +LINE + 5 +1674 + 8 +0 + 62 + 0 + 10 +7093.047115 + 20 +9711.394458 + 30 +0.0 + 11 +7093.047115 + 21 +9711.394458 + 31 +0.0 + 0 +LINE + 5 +1675 + 8 +0 + 62 + 0 + 10 +7056.517457 + 20 +9672.22206 + 30 +0.0 + 11 +7056.517457 + 21 +9672.22206 + 31 +0.0 + 0 +LINE + 5 +1676 + 8 +0 + 62 + 0 + 10 +7073.917203 + 20 +9656.278131 + 30 +0.0 + 11 +7073.917203 + 21 +9656.278131 + 31 +0.0 + 0 +LINE + 5 +1677 + 8 +0 + 62 + 0 + 10 +7074.693779 + 20 +9582.920868 + 30 +0.0 + 11 +7074.693779 + 21 +9582.920868 + 31 +0.0 + 0 +LINE + 5 +1678 + 8 +0 + 62 + 0 + 10 +7078.380165 + 20 +9579.542917 + 30 +0.0 + 11 +7078.380165 + 21 +9579.542917 + 31 +0.0 + 0 +DIMENSION + 5 +1679 + 8 +BEMASSUNG + 2 +*D26 + 10 +6141.572752 + 20 +8884.916877 + 30 +0.0 + 11 +6040.0 + 21 +8972.416877 + 31 +0.0 + 70 + 128 + 1 +1 + 13 +6100.665062 + 23 +9555.000103 + 33 +0.0 + 14 +6141.572752 + 24 +9555.000103 + 34 +0.0 + 0 +DIMENSION + 5 +167A + 8 +BEMASSUNG + 2 +*D20 + 10 +7052.902997 + 20 +8884.916877 + 30 +0.0 + 11 +6597.237875 + 21 +8972.416877 + 31 +0.0 + 1 +36 + 13 +6141.572752 + 23 +9555.000103 + 33 +0.0 + 14 +7052.902997 + 24 +9561.814406 + 34 +0.0 + 0 +DIMENSION + 5 +167B + 8 +BEMASSUNG + 2 +*D27 + 10 +7091.53801 + 20 +8884.916877 + 30 +0.0 + 11 +7145.0 + 21 +8972.416877 + 31 +0.0 + 70 + 128 + 1 +1 + 13 +7052.902997 + 23 +9561.814406 + 33 +0.0 + 14 +7091.53801 + 24 +9555.000103 + 34 +0.0 + 0 +DIMENSION + 5 +167C + 8 +BEMASSUNG + 2 +*D21 + 10 +5789.99228 + 20 +13098.623281 + 30 +0.0 + 11 +5645.684244 + 21 +13186.123281 + 31 +0.0 + 1 +11 + 13 +5501.376207 + 23 +12526.305162 + 33 +0.0 + 14 +5789.99228 + 24 +12526.305162 + 34 +0.0 + 0 +DIMENSION + 5 +167D + 8 +BEMASSUNG + 2 +*D22 + 10 +5940.072764 + 20 +13098.623281 + 30 +0.0 + 11 +5865.032522 + 21 +13186.123281 + 31 +0.0 + 1 +6 + 13 +5789.99228 + 23 +12526.305162 + 33 +0.0 + 14 +5940.072764 + 24 +12526.305162 + 34 +0.0 + 0 +DIMENSION + 5 +167E + 8 +BEMASSUNG + 2 +*D23 + 10 +6140.949559 + 20 +13098.623281 + 30 +0.0 + 11 +6040.511162 + 21 +13186.123281 + 31 +0.0 + 1 +8 + 13 +5940.072764 + 23 +12526.305162 + 33 +0.0 + 14 +6140.949559 + 24 +12521.68964 + 34 +0.0 + 0 +DIMENSION + 5 +167F + 8 +BEMASSUNG + 2 +*D24 + 10 +7062.212311 + 20 +13098.623281 + 30 +0.0 + 11 +6601.580935 + 21 +13186.123281 + 31 +0.0 + 1 +36 + 13 +6140.949559 + 23 +12521.68964 + 33 +0.0 + 14 +7062.212311 + 24 +12523.997349 + 34 +0.0 + 0 +DIMENSION + 5 +1680 + 8 +BEMASSUNG + 2 +*D25 + 10 +7099.155279 + 20 +13098.623281 + 30 +0.0 + 11 +7150.550955 + 21 +13186.123281 + 31 +0.0 + 70 + 128 + 1 +1 + 13 +7062.212311 + 23 +12523.997349 + 33 +0.0 + 14 +7099.155279 + 24 +12519.381932 + 34 +0.0 + 0 +DIMENSION + 5 +1681 + 8 +BEMASSUNG + 2 +*D19 + 10 +9369.023561 + 20 +11625.154251 + 30 +0.0 + 11 +9281.523561 + 21 +11426.926419 + 31 +0.0 + 1 +16 + 13 +8581.288492 + 23 +11228.698587 + 33 +0.0 + 14 +8581.288492 + 24 +11625.154251 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +1682 + 8 +BEMASSUNG + 2 +*D18 + 10 +9369.023561 + 20 +11728.455992 + 30 +0.0 + 11 +9281.523561 + 21 +11676.805121 + 31 +0.0 + 1 +4 + 13 +8581.288492 + 23 +11625.154251 + 33 +0.0 + 14 +8592.462088 + 24 +11728.455992 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +1683 + 8 +BEMASSUNG + 2 +*D17 + 10 +9369.023561 + 20 +11770.335123 + 30 +0.0 + 11 +9281.523561 + 21 +11749.395557 + 31 +0.0 + 1 +1 + 13 +8592.462088 + 23 +11728.455992 + 33 +0.0 + 14 +8592.462088 + 24 +11770.335123 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +1684 + 8 +BEMASSUNG + 2 +*D16 + 10 +9369.023561 + 20 +11868.053132 + 30 +0.0 + 11 +9281.523561 + 21 +11819.194128 + 31 +0.0 + 1 +4 + 13 +8592.462088 + 23 +11770.335123 + 33 +0.0 + 14 +8592.462088 + 24 +11868.053132 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +1685 + 8 +BEMASSUNG + 2 +*D28 + 10 +9369.023561 + 20 +11932.267711 + 30 +0.0 + 11 +9281.523561 + 21 +11980.0 + 31 +0.0 + 70 + 128 + 1 +2 + 13 +8592.462088 + 23 +11868.053132 + 33 +0.0 + 14 +8595.255445 + 24 +11932.267711 + 34 +0.0 + 50 +90.0 + 0 +TEXT + 5 +1686 + 8 +BEMASSUNG + 10 +5683.312116 + 20 +13202.168147 + 30 +0.0 + 40 +62.5 + 1 +5 + 41 +0.75 + 0 +TEXT + 5 +1687 + 8 +BEMASSUNG + 10 +6673.312116 + 20 +13202.168147 + 30 +0.0 + 40 +62.5 + 1 +5 + 41 +0.75 + 0 +TEXT + 5 +1688 + 8 +BEMASSUNG + 10 +7168.312116 + 20 +13202.168147 + 30 +0.0 + 40 +62.5 + 1 +5 + 41 +0.75 + 0 +TEXT + 5 +1689 + 8 +BEMASSUNG + 10 +6050.0 + 20 +8995.0 + 30 +0.0 + 40 +62.5 + 1 +5 + 41 +0.75 + 0 +TEXT + 5 +168A + 8 +BEMASSUNG + 10 +7165.0 + 20 +8995.0 + 30 +0.0 + 40 +62.5 + 1 +5 + 41 +0.75 + 0 +TEXT + 5 +168B + 8 +BEMASSUNG + 10 +6665.0 + 20 +8995.0 + 30 +0.0 + 40 +62.5 + 1 +5 + 41 +0.75 + 0 +TEXT + 5 +168C + 8 +BEMASSUNG + 10 +9285.0 + 20 +12020.0 + 30 +0.0 + 40 +62.5 + 1 +5 + 50 +90.0 + 41 +0.75 + 0 +TEXT + 5 +168D + 8 +LEGENDE-35 + 10 +8505.0 + 20 +13515.0 + 30 +0.0 + 40 +87.5 + 1 +GIPSPUTZ + 41 +0.75 + 0 +TEXT + 5 +168E + 8 +LEGENDE-35 + 10 +8505.0 + 20 +13265.0 + 30 +0.0 + 40 +87.5 + 1 +ABSCHLUSSLEISTE + 41 +0.75 + 0 +TEXT + 5 +168F + 8 +LEGENDE-35 + 10 +8505.0 + 20 +13015.0 + 30 +0.0 + 40 +87.5 + 1 +NATURSTEINPLATTEN + 41 +0.75 + 0 +TEXT + 5 +1690 + 8 +LEGENDE-35 + 10 +8505.0 + 20 +12765.0 + 30 +0.0 + 40 +87.5 + 1 +ZEMENTESTRICH + 41 +0.75 + 0 +TEXT + 5 +1691 + 8 +LEGENDE-35 + 10 +8505.0 + 20 +12515.0 + 30 +0.0 + 40 +87.5 + 1 +DICHTUNGSBAHN (PE/ BITUMEN) + 41 +0.75 + 0 +TEXT + 5 +1692 + 8 +LEGENDE-35 + 10 +8505.0 + 20 +12265.0 + 30 +0.0 + 40 +87.5 + 1 +PS-WÄDÄ + 41 +0.75 + 0 +POLYLINE + 5 +1693 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2017 + 8 +LEGENDE-35 + 10 +8355.0 + 20 +13560.0 + 30 +0.0 + 0 +VERTEX + 5 +2018 + 8 +LEGENDE-35 + 10 +7420.0 + 20 +13560.0 + 30 +0.0 + 0 +VERTEX + 5 +2019 + 8 +LEGENDE-35 + 10 +7420.0 + 20 +12415.0 + 30 +0.0 + 0 +VERTEX + 5 +201A + 8 +LEGENDE-35 + 10 +7085.0 + 20 +12415.0 + 30 +0.0 + 0 +SEQEND + 5 +201B + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +1699 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +201C + 8 +LEGENDE-35 + 10 +8350.0 + 20 +13315.0 + 30 +0.0 + 0 +VERTEX + 5 +201D + 8 +LEGENDE-35 + 10 +7565.0 + 20 +13315.0 + 30 +0.0 + 0 +VERTEX + 5 +201E + 8 +LEGENDE-35 + 10 +7565.0 + 20 +12025.0 + 30 +0.0 + 0 +VERTEX + 5 +201F + 8 +LEGENDE-35 + 10 +7130.0 + 20 +12025.0 + 30 +0.0 + 0 +SEQEND + 5 +2020 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +169F + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2021 + 8 +LEGENDE-35 + 10 +8350.0 + 20 +13075.0 + 30 +0.0 + 0 +VERTEX + 5 +2022 + 8 +LEGENDE-35 + 10 +7720.0 + 20 +13075.0 + 30 +0.0 + 0 +VERTEX + 5 +2023 + 8 +LEGENDE-35 + 10 +7720.0 + 20 +11920.0 + 30 +0.0 + 0 +SEQEND + 5 +2024 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +16A4 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2025 + 8 +LEGENDE-35 + 10 +8345.0 + 20 +12800.0 + 30 +0.0 + 0 +VERTEX + 5 +2026 + 8 +LEGENDE-35 + 10 +7840.0 + 20 +12800.0 + 30 +0.0 + 0 +VERTEX + 5 +2027 + 8 +LEGENDE-35 + 10 +7840.0 + 20 +11835.0 + 30 +0.0 + 0 +SEQEND + 5 +2028 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +16A9 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2029 + 8 +LEGENDE-35 + 10 +8350.0 + 20 +12575.0 + 30 +0.0 + 0 +VERTEX + 5 +202A + 8 +LEGENDE-35 + 10 +7990.0 + 20 +12575.0 + 30 +0.0 + 0 +VERTEX + 5 +202B + 8 +LEGENDE-35 + 10 +7990.0 + 20 +11760.0 + 30 +0.0 + 0 +SEQEND + 5 +202C + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +16AE + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +202D + 8 +LEGENDE-35 + 10 +8350.0 + 20 +12325.0 + 30 +0.0 + 0 +VERTEX + 5 +202E + 8 +LEGENDE-35 + 10 +8120.0 + 20 +12325.0 + 30 +0.0 + 0 +VERTEX + 5 +202F + 8 +LEGENDE-35 + 10 +8120.0 + 20 +11690.0 + 30 +0.0 + 0 +SEQEND + 5 +2030 + 8 +LEGENDE-35 + 0 +TEXT + 5 +16B3 + 8 +LEGENDE-35 + 10 +8515.0 + 20 +10815.0 + 30 +0.0 + 40 +87.5 + 1 +GIPSPUTZ + 41 +0.75 + 0 +TEXT + 5 +16B4 + 8 +LEGENDE-35 + 10 +8515.0 + 20 +10565.0 + 30 +0.0 + 40 +87.5 + 1 +RINGANKER BST III + 41 +0.75 + 0 +TEXT + 5 +16B5 + 8 +LEGENDE-35 + 10 +8515.0 + 20 +10315.0 + 30 +0.0 + 40 +87.5 + 1 +DICHTUNGSBAHN (BITUMEN) + 41 +0.75 + 0 +POLYLINE + 5 +16B6 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2031 + 8 +LEGENDE-35 + 10 +8365.0 + 20 +10865.0 + 30 +0.0 + 0 +VERTEX + 5 +2032 + 8 +LEGENDE-35 + 10 +7080.0 + 20 +10865.0 + 30 +0.0 + 0 +SEQEND + 5 +2033 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +16BA + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2034 + 8 +LEGENDE-35 + 10 +8365.0 + 20 +10620.0 + 30 +0.0 + 0 +VERTEX + 5 +2035 + 8 +LEGENDE-35 + 10 +6850.0 + 20 +10620.0 + 30 +0.0 + 0 +VERTEX + 5 +2036 + 8 +LEGENDE-35 + 10 +6850.0 + 20 +10930.0 + 30 +0.0 + 0 +SEQEND + 5 +2037 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +16BF + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2038 + 8 +LEGENDE-35 + 10 +8365.0 + 20 +10375.0 + 30 +0.0 + 0 +VERTEX + 5 +2039 + 8 +LEGENDE-35 + 10 +7320.0 + 20 +10375.0 + 30 +0.0 + 0 +VERTEX + 5 +203A + 8 +LEGENDE-35 + 10 +7320.0 + 20 +9870.0 + 30 +0.0 + 0 +VERTEX + 5 +203B + 8 +LEGENDE-35 + 10 +7010.0 + 20 +9870.0 + 30 +0.0 + 0 +SEQEND + 5 +203C + 8 +LEGENDE-35 + 0 +TEXT + 5 +16C5 + 8 +LEGENDE-35 + 10 +2240.0 + 20 +12400.0 + 30 +0.0 + 40 +87.5 + 1 +VMW KHLz-20-1.8-NF + 41 +0.75 + 0 +TEXT + 5 +16C6 + 8 +LEGENDE-35 + 10 +2240.0 + 20 +12150.0 + 30 +0.0 + 40 +87.5 + 1 +MINERALFASER-WÄDÄ + 41 +0.75 + 0 +TEXT + 5 +16C7 + 8 +LEGENDE-35 + 10 +2240.0 + 20 +11900.0 + 30 +0.0 + 40 +87.5 + 1 +DRAHTANKER + 41 +0.75 + 0 +TEXT + 5 +16C8 + 8 +LEGENDE-35 + 10 +2240.0 + 20 +11650.0 + 30 +0.0 + 40 +87.5 + 1 +MW Mz-20-1.8-NF + 41 +0.75 + 0 +TEXT + 5 +16C9 + 8 +LEGENDE-35 + 10 +2240.0 + 20 +11400.0 + 30 +0.0 + 40 +87.5 + 1 +ENTLÜFTUNGSSTEIN + 41 +0.75 + 0 +TEXT + 5 +16CA + 8 +LEGENDE-35 + 10 +2240.0 + 20 +11150.0 + 30 +0.0 + 40 +87.5 + 1 +PE-FOLIE + 41 +0.75 + 0 +POLYLINE + 5 +16CB + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +203D + 8 +LEGENDE-35 + 10 +3635.0 + 20 +12455.0 + 30 +0.0 + 0 +VERTEX + 5 +203E + 8 +LEGENDE-35 + 10 +5615.0 + 20 +12455.0 + 30 +0.0 + 0 +SEQEND + 5 +203F + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +16CF + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2040 + 8 +LEGENDE-35 + 10 +3625.0 + 20 +12215.0 + 30 +0.0 + 0 +VERTEX + 5 +2041 + 8 +LEGENDE-35 + 10 +6025.0 + 20 +12215.0 + 30 +0.0 + 0 +SEQEND + 5 +2042 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +16D3 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2043 + 8 +LEGENDE-35 + 10 +3625.0 + 20 +11950.0 + 30 +0.0 + 0 +VERTEX + 5 +2044 + 8 +LEGENDE-35 + 10 +5880.0 + 20 +11950.0 + 30 +0.0 + 0 +VERTEX + 5 +2045 + 8 +LEGENDE-35 + 10 +5880.0 + 20 +12045.0 + 30 +0.0 + 0 +SEQEND + 5 +2046 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +16D8 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2047 + 8 +LEGENDE-35 + 10 +3625.0 + 20 +11680.0 + 30 +0.0 + 0 +VERTEX + 5 +2048 + 8 +LEGENDE-35 + 10 +6345.0 + 20 +11680.0 + 30 +0.0 + 0 +VERTEX + 5 +2049 + 8 +LEGENDE-35 + 10 +6345.0 + 20 +11810.0 + 30 +0.0 + 0 +SEQEND + 5 +204A + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +16DD + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +204B + 8 +LEGENDE-35 + 10 +3625.0 + 20 +11460.0 + 30 +0.0 + 0 +VERTEX + 5 +204C + 8 +LEGENDE-35 + 10 +5635.0 + 20 +11460.0 + 30 +0.0 + 0 +SEQEND + 5 +204D + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +16E1 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +204E + 8 +LEGENDE-35 + 10 +3625.0 + 20 +11215.0 + 30 +0.0 + 0 +VERTEX + 5 +204F + 8 +LEGENDE-35 + 10 +5175.0 + 20 +11215.0 + 30 +0.0 + 0 +VERTEX + 5 +2050 + 8 +LEGENDE-35 + 10 +5495.0 + 20 +11300.0 + 30 +0.0 + 0 +SEQEND + 5 +2051 + 8 +LEGENDE-35 + 0 +TEXT + 5 +16E6 + 8 +LEGENDE-35 + 10 +2940.0 + 20 +10805.0 + 30 +0.0 + 40 +87.5 + 1 +LAGERSCHIENE + 41 +0.75 + 0 +TEXT + 5 +16E7 + 8 +LEGENDE-35 + 10 +2940.0 + 20 +10555.0 + 30 +0.0 + 40 +87.5 + 1 +ANKERSCHIENE + 41 +0.75 + 0 +TEXT + 5 +16E8 + 8 +LEGENDE-35 + 10 +2940.0 + 20 +10305.0 + 30 +0.0 + 40 +87.5 + 1 +AUSSENPUTZ + 41 +0.75 + 0 +TEXT + 5 +16E9 + 8 +LEGENDE-35 + 10 +2940.0 + 20 +10055.0 + 30 +0.0 + 40 +87.5 + 1 +MW Mz-20-1.8-NF + 41 +0.75 + 0 +POLYLINE + 5 +16EA + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2052 + 8 +LEGENDE-35 + 10 +3920.0 + 20 +10850.0 + 30 +0.0 + 0 +VERTEX + 5 +2053 + 8 +LEGENDE-35 + 10 +5915.0 + 20 +10850.0 + 30 +0.0 + 0 +VERTEX + 5 +2054 + 8 +LEGENDE-35 + 10 +5915.0 + 20 +11155.0 + 30 +0.0 + 0 +SEQEND + 5 +2055 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +16EF + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2056 + 8 +LEGENDE-35 + 10 +3920.0 + 20 +10595.0 + 30 +0.0 + 0 +VERTEX + 5 +2057 + 8 +LEGENDE-35 + 10 +6050.0 + 20 +10595.0 + 30 +0.0 + 0 +VERTEX + 5 +2058 + 8 +LEGENDE-35 + 10 +6050.0 + 20 +11320.0 + 30 +0.0 + 0 +SEQEND + 5 +2059 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +16F4 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +205A + 8 +LEGENDE-35 + 10 +3920.0 + 20 +10360.0 + 30 +0.0 + 0 +VERTEX + 5 +205B + 8 +LEGENDE-35 + 10 +6115.0 + 20 +10360.0 + 30 +0.0 + 0 +SEQEND + 5 +205C + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +16F8 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +205D + 8 +LEGENDE-35 + 10 +3920.0 + 20 +10095.0 + 30 +0.0 + 0 +VERTEX + 5 +205E + 8 +LEGENDE-35 + 10 +6335.0 + 20 +10095.0 + 30 +0.0 + 0 +SEQEND + 5 +205F + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +16FC + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2060 + 8 +DRAHTANKER + 10 +7145.0 + 20 +12075.0 + 30 +0.0 + 0 +VERTEX + 5 +2061 + 8 +DRAHTANKER + 10 +7080.0 + 20 +12075.0 + 30 +0.0 + 0 +SEQEND + 5 +2062 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1700 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2063 + 8 +DRAHTANKER + 10 +7060.0 + 20 +12075.0 + 30 +0.0 + 0 +VERTEX + 5 +2064 + 8 +DRAHTANKER + 10 +7040.0 + 20 +12075.0 + 30 +0.0 + 0 +SEQEND + 5 +2065 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1704 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2066 + 8 +DRAHTANKER + 10 +7015.0 + 20 +12075.0 + 30 +0.0 + 0 +VERTEX + 5 +2067 + 8 +DRAHTANKER + 10 +6990.0 + 20 +12075.0 + 30 +0.0 + 0 +SEQEND + 5 +2068 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1708 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2069 + 8 +DRAHTANKER + 10 +7015.0 + 20 +11995.0 + 30 +0.0 + 0 +VERTEX + 5 +206A + 8 +DRAHTANKER + 10 +6990.0 + 20 +11995.0 + 30 +0.0 + 0 +SEQEND + 5 +206B + 8 +DRAHTANKER + 0 +POLYLINE + 5 +170C + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +206C + 8 +DRAHTANKER + 10 +7060.0 + 20 +11995.0 + 30 +0.0 + 0 +VERTEX + 5 +206D + 8 +DRAHTANKER + 10 +7040.0 + 20 +11995.0 + 30 +0.0 + 0 +SEQEND + 5 +206E + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1710 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +206F + 8 +DRAHTANKER + 10 +7150.0 + 20 +11995.0 + 30 +0.0 + 0 +VERTEX + 5 +2070 + 8 +DRAHTANKER + 10 +7080.0 + 20 +11995.0 + 30 +0.0 + 0 +SEQEND + 5 +2071 + 8 +DRAHTANKER + 0 +DIMENSION + 5 +1714 + 8 +DRAHTANKER + 2 +*D29 + 10 +7730.0 + 20 +11145.0 + 30 +0.0 + 11 +7642.5 + 21 +11187.5 + 31 +0.0 + 1 +3 + 13 +7055.0 + 23 +11230.0 + 33 +0.0 + 14 +7055.0 + 24 +11145.0 + 34 +0.0 + 50 +90.0 + 0 +POLYLINE + 5 +1715 + 8 +SCHRAFFUR + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 0 +VERTEX + 5 +2072 + 8 +SCHRAFFUR + 10 +7190.0 + 20 +4795.0 + 30 +0.0 + 0 +VERTEX + 5 +2073 + 8 +SCHRAFFUR + 10 +7126.991073 + 20 +4795.0 + 30 +0.0 + 0 +VERTEX + 5 +2074 + 8 +SCHRAFFUR + 10 +7126.991073 + 20 +4959.629568 + 30 +0.0 + 0 +VERTEX + 5 +2075 + 8 +SCHRAFFUR + 10 +7191.498177 + 20 +4959.629568 + 30 +0.0 + 0 +SEQEND + 5 +2076 + 8 +SCHRAFFUR + 0 +POLYLINE + 5 +171B + 8 +SCHNITTKANTEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +2077 + 8 +SCHNITTKANTEN + 10 +8565.0 + 20 +5100.0 + 30 +0.0 + 0 +VERTEX + 5 +2078 + 8 +SCHNITTKANTEN + 10 +8565.0 + 20 +3195.0 + 30 +0.0 + 0 +SEQEND + 5 +2079 + 8 +SCHNITTKANTEN + 0 +POLYLINE + 5 +171F + 8 +SCHNITTKANTEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +207A + 8 +SCHNITTKANTEN + 10 +5655.0 + 20 +5790.0 + 30 +0.0 + 0 +VERTEX + 5 +207B + 8 +SCHNITTKANTEN + 10 +7485.0 + 20 +5790.0 + 30 +0.0 + 0 +SEQEND + 5 +207C + 8 +SCHNITTKANTEN + 0 +INSERT + 5 +1723 + 8 +SCHRAFFUR + 2 +*X30 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +1000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +1724 + 8 +SCHRAFFUR + 2 +*X31 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +HONEY,I +1040 +125.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +1725 + 8 +SCHRAFFUR + 2 +*X32 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +HONEY,I +1040 +200.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +1726 + 8 +SCHRAFFUR + 2 +*X33 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +DASH,I +1040 +200.0 +1040 +0.785398 +1002 +} + 0 +INSERT + 5 +1727 + 8 +SCHRAFFUR + 2 +*X34 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI34,I +1040 +200.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +1728 + 8 +SCHRAFFUR + 2 +*X35 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +1000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +1729 + 8 +SCHRAFFUR + 2 +*X36 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI33,I +1040 +1200.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +172A + 8 +SCHRAFFUR + 2 +*X37 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +DASH,I +1040 +1500.0 +1040 +0.785398 +1002 +} + 0 +INSERT + 5 +172B + 8 +SCHRAFFUR + 2 +*X38 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +HONEY,I +1040 +200.0 +1040 +0.0 +1002 +} + 0 +POLYLINE + 5 +172C + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +207D + 8 +MAUERWERK + 10 +7125.0 + 20 +4962.28 + 30 +0.0 + 0 +VERTEX + 5 +207E + 8 +MAUERWERK + 10 +7162.5 + 20 +4962.28 + 30 +0.0 + 0 +VERTEX + 5 +207F + 8 +MAUERWERK + 10 +7162.5 + 20 +5790.0 + 30 +0.0 + 0 +SEQEND + 5 +2080 + 8 +MAUERWERK + 0 +POLYLINE + 5 +1731 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2081 + 8 +MAUERWERK + 10 +7125.0 + 20 +5790.0 + 30 +0.0 + 0 +VERTEX + 5 +2082 + 8 +MAUERWERK + 10 +7125.0 + 20 +4962.28 + 30 +0.0 + 0 +SEQEND + 5 +2083 + 8 +MAUERWERK + 0 +POLYLINE + 5 +1735 + 8 +PE-FOLIE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +25.0 + 41 +25.0 + 0 +VERTEX + 5 +2084 + 8 +PE-FOLIE + 10 +6195.0 + 20 +5790.0 + 30 +0.0 + 0 +VERTEX + 5 +2085 + 8 +PE-FOLIE + 10 +6195.0 + 20 +5195.0 + 30 +0.0 + 0 +VERTEX + 5 +2086 + 8 +PE-FOLIE + 10 +6170.0 + 20 +5085.0 + 30 +0.0 + 0 +VERTEX + 5 +2087 + 8 +PE-FOLIE + 10 +6160.0 + 20 +4380.0 + 30 +0.0 + 0 +VERTEX + 5 +2088 + 8 +PE-FOLIE + 10 +6000.0 + 20 +4265.0 + 30 +0.0 + 0 +VERTEX + 5 +2089 + 8 +PE-FOLIE + 10 +5375.0 + 20 +4265.0 + 30 +0.0 + 0 +VERTEX + 5 +208A + 8 +PE-FOLIE + 10 +5375.0 + 20 +3275.0 + 30 +0.0 + 0 +SEQEND + 5 +208B + 8 +PE-FOLIE + 0 +POLYLINE + 5 +173E + 8 +DAEMMUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +208C + 8 +DAEMMUNG + 10 +6175.0 + 20 +5790.0 + 30 +0.0 + 0 +VERTEX + 5 +208D + 8 +DAEMMUNG + 10 +6175.0 + 20 +5197.5 + 30 +0.0 + 0 +VERTEX + 5 +208E + 8 +DAEMMUNG + 10 +6150.0 + 20 +5135.0 + 30 +0.0 + 0 +VERTEX + 5 +208F + 8 +DAEMMUNG + 10 +6135.0 + 20 +4400.0 + 30 +0.0 + 0 +VERTEX + 5 +2090 + 8 +DAEMMUNG + 10 +6045.0 + 20 +4325.0 + 30 +0.0 + 0 +VERTEX + 5 +2091 + 8 +DAEMMUNG + 10 +5968.4375 + 20 +4280.0 + 30 +0.0 + 0 +SEQEND + 5 +2092 + 8 +DAEMMUNG + 0 +POLYLINE + 5 +1746 + 8 +DAEMMUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2093 + 8 +DAEMMUNG + 10 +5968.4375 + 20 +4280.0 + 30 +0.0 + 0 +VERTEX + 5 +2094 + 8 +DAEMMUNG + 10 +5968.4375 + 20 +5790.0 + 30 +0.0 + 0 +SEQEND + 5 +2095 + 8 +DAEMMUNG + 0 +POLYLINE + 5 +174A + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +2096 + 8 +MAUERWERK + 10 +7125.0 + 20 +5790.0 + 30 +0.0 + 0 +VERTEX + 5 +2097 + 8 +MAUERWERK + 10 +7125.0 + 20 +5135.0 + 30 +0.0 + 0 +VERTEX + 5 +2098 + 8 +MAUERWERK + 10 +6215.0 + 20 +5135.0 + 30 +0.0 + 0 +VERTEX + 5 +2099 + 8 +MAUERWERK + 10 +6215.0 + 20 +5790.0 + 30 +0.0 + 0 +SEQEND + 5 +209A + 8 +MAUERWERK + 0 +POLYLINE + 5 +1750 + 8 +ESTRICH + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +209B + 8 +ESTRICH + 10 +7191.15625 + 20 +4895.782507 + 30 +0.0 + 0 +VERTEX + 5 +209C + 8 +ESTRICH + 10 +7191.15625 + 20 +4958.282507 + 30 +0.0 + 0 +VERTEX + 5 +209D + 8 +ESTRICH + 10 +8565.0 + 20 +4958.282507 + 30 +0.0 + 0 +SEQEND + 5 +209E + 8 +ESTRICH + 0 +POLYLINE + 5 +1755 + 8 +ESTRICH + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +209F + 8 +ESTRICH + 10 +7191.15625 + 20 +4795.782507 + 30 +0.0 + 0 +VERTEX + 5 +20A0 + 8 +ESTRICH + 10 +7191.15625 + 20 +4895.782507 + 30 +0.0 + 0 +VERTEX + 5 +20A1 + 8 +ESTRICH + 10 +8565.0 + 20 +4895.782507 + 30 +0.0 + 0 +SEQEND + 5 +20A2 + 8 +ESTRICH + 0 +POLYLINE + 5 +175A + 8 +ESTRICH + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +20A3 + 8 +ESTRICH + 10 +8565.0 + 20 +4795.782507 + 30 +0.0 + 0 +VERTEX + 5 +20A4 + 8 +ESTRICH + 10 +7190.0 + 20 +4795.782507 + 30 +0.0 + 0 +SEQEND + 5 +20A5 + 8 +ESTRICH + 0 +POLYLINE + 5 +175E + 8 +PE-FOLIE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +25.0 + 41 +25.0 + 0 +VERTEX + 5 +20A6 + 8 +PE-FOLIE + 10 +6195.0 + 20 +4670.0 + 30 +0.0 + 0 +VERTEX + 5 +20A7 + 8 +PE-FOLIE + 10 +6195.0 + 20 +5115.0 + 30 +0.0 + 0 +VERTEX + 5 +20A8 + 8 +PE-FOLIE + 10 +7145.0 + 20 +5115.0 + 30 +0.0 + 0 +VERTEX + 5 +20A9 + 8 +PE-FOLIE + 10 +7145.0 + 20 +4775.0 + 30 +0.0 + 0 +VERTEX + 5 +20AA + 8 +PE-FOLIE + 10 +8565.0 + 20 +4775.0 + 30 +0.0 + 0 +SEQEND + 5 +20AB + 8 +PE-FOLIE + 0 +POLYLINE + 5 +1765 + 8 +ESTRICH + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +20AC + 8 +ESTRICH + 10 +8565.0 + 20 +4755.0 + 30 +0.0 + 0 +VERTEX + 5 +20AD + 8 +ESTRICH + 10 +7160.0 + 20 +4755.0 + 30 +0.0 + 0 +VERTEX + 5 +20AE + 8 +ESTRICH + 10 +7160.0 + 20 +4655.0 + 30 +0.0 + 0 +SEQEND + 5 +20AF + 8 +ESTRICH + 0 +POLYLINE + 5 +176A + 8 +ESTRICH + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +20B0 + 8 +ESTRICH + 10 +7160.0 + 20 +4660.0 + 30 +0.0 + 0 +VERTEX + 5 +20B1 + 8 +ESTRICH + 10 +8565.0 + 20 +4660.0 + 30 +0.0 + 0 +SEQEND + 5 +20B2 + 8 +ESTRICH + 0 +POLYLINE + 5 +176E + 8 +PE-FOLIE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +25.0 + 41 +25.0 + 0 +VERTEX + 5 +20B3 + 8 +PE-FOLIE + 10 +8565.0 + 20 +4640.0 + 30 +0.0 + 0 +VERTEX + 5 +20B4 + 8 +PE-FOLIE + 10 +6602.5 + 20 +4640.0 + 30 +0.0 + 0 +VERTEX + 5 +20B5 + 8 +PE-FOLIE + 10 +6195.0 + 20 +4640.0 + 30 +0.0 + 0 +VERTEX + 5 +20B6 + 8 +PE-FOLIE + 10 +6195.0 + 20 +4410.0 + 30 +0.0 + 0 +VERTEX + 5 +20B7 + 8 +PE-FOLIE + 10 +6127.5 + 20 +4297.5 + 30 +0.0 + 0 +VERTEX + 5 +20B8 + 8 +PE-FOLIE + 10 +6000.0 + 20 +4240.0 + 30 +0.0 + 0 +VERTEX + 5 +20B9 + 8 +PE-FOLIE + 10 +5565.0 + 20 +4240.0 + 30 +0.0 + 0 +VERTEX + 5 +20BA + 8 +PE-FOLIE + 10 +5400.0 + 20 +4240.0 + 30 +0.0 + 0 +VERTEX + 5 +20BB + 8 +PE-FOLIE + 10 +5400.0 + 20 +3360.0 + 30 +0.0 + 0 +SEQEND + 5 +20BC + 8 +PE-FOLIE + 0 +POLYLINE + 5 +1779 + 8 +DECKEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +20BD + 8 +DECKEN + 10 +8565.0 + 20 +4622.5 + 30 +0.0 + 0 +VERTEX + 5 +20BE + 8 +DECKEN + 10 +6215.0 + 20 +4622.5 + 30 +0.0 + 0 +VERTEX + 5 +20BF + 8 +DECKEN + 10 +6215.0 + 20 +4222.5 + 30 +0.0 + 0 +SEQEND + 5 +20C0 + 8 +DECKEN + 0 +POLYLINE + 5 +177E + 8 +DECKEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +20C1 + 8 +DECKEN + 10 +6215.0 + 20 +4222.5 + 30 +0.0 + 0 +VERTEX + 5 +20C2 + 8 +DECKEN + 10 +8565.0 + 20 +4222.5 + 30 +0.0 + 0 +SEQEND + 5 +20C3 + 8 +DECKEN + 0 +POLYLINE + 5 +1782 + 8 +FUNDAMENT + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +20C4 + 8 +FUNDAMENT + 10 +7927.5 + 20 +2847.5 + 30 +0.0 + 0 +VERTEX + 5 +20C5 + 8 +FUNDAMENT + 10 +8565.0 + 20 +3485.0 + 30 +0.0 + 0 +SEQEND + 5 +20C6 + 8 +FUNDAMENT + 0 +POLYLINE + 5 +1786 + 8 +SCHNITTKANTEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +20C7 + 8 +SCHNITTKANTEN + 10 +4425.0 + 20 +3870.0 + 30 +0.0 + 0 +VERTEX + 5 +20C8 + 8 +SCHNITTKANTEN + 10 +4425.0 + 20 +2430.0 + 30 +0.0 + 0 +SEQEND + 5 +20C9 + 8 +SCHNITTKANTEN + 0 +POLYLINE + 5 +178A + 8 +ERDBODEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +20CA + 8 +ERDBODEN + 10 +5415.0 + 20 +2847.5 + 30 +0.0 + 0 +VERTEX + 5 +20CB + 8 +ERDBODEN + 10 +4425.0 + 20 +2847.5 + 30 +0.0 + 0 +SEQEND + 5 +20CC + 8 +ERDBODEN + 0 +POLYLINE + 5 +178E + 8 +ERDBODEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +20CD + 8 +ERDBODEN + 10 +4425.0 + 20 +2603.214286 + 30 +0.0 + 0 +VERTEX + 5 +20CE + 8 +ERDBODEN + 10 +4615.0 + 20 +2847.5 + 30 +0.0 + 0 +SEQEND + 5 +20CF + 8 +ERDBODEN + 0 +POLYLINE + 5 +1792 + 8 +ERDBODEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +20D0 + 8 +ERDBODEN + 10 +6440.0 + 20 +2603.214286 + 30 +0.0 + 0 +VERTEX + 5 +20D1 + 8 +ERDBODEN + 10 +6630.0 + 20 +2847.5 + 30 +0.0 + 0 +SEQEND + 5 +20D2 + 8 +ERDBODEN + 0 +POLYLINE + 5 +1796 + 8 +ERDBODEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +20D3 + 8 +ERDBODEN + 10 +6532.777778 + 20 +2497.5 + 30 +0.0 + 0 +VERTEX + 5 +20D4 + 8 +ERDBODEN + 10 +6805.0 + 20 +2847.5 + 30 +0.0 + 0 +SEQEND + 5 +20D5 + 8 +ERDBODEN + 0 +POLYLINE + 5 +179A + 8 +ERDBODEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +20D6 + 8 +ERDBODEN + 10 +6707.777778 + 20 +2497.5 + 30 +0.0 + 0 +VERTEX + 5 +20D7 + 8 +ERDBODEN + 10 +6980.0 + 20 +2847.5 + 30 +0.0 + 0 +SEQEND + 5 +20D8 + 8 +ERDBODEN + 0 +LINE + 5 +179E + 8 +0 + 62 + 0 + 10 +7146.942562 + 20 +5563.048321 + 30 +0.0 + 11 +7146.942562 + 21 +5563.048321 + 31 +0.0 + 0 +LINE + 5 +179F + 8 +0 + 62 + 0 + 10 +7145.682695 + 20 +5601.584796 + 30 +0.0 + 11 +7145.682695 + 21 +5601.584796 + 31 +0.0 + 0 +LINE + 5 +17A0 + 8 +0 + 62 + 0 + 10 +7144.422828 + 20 +5640.121271 + 30 +0.0 + 11 +7144.422828 + 21 +5640.121271 + 31 +0.0 + 0 +LINE + 5 +17A1 + 8 +0 + 62 + 0 + 10 +7143.162961 + 20 +5678.657747 + 30 +0.0 + 11 +7143.162961 + 21 +5678.657747 + 31 +0.0 + 0 +LINE + 5 +17A2 + 8 +0 + 62 + 0 + 10 +7141.903094 + 20 +5717.194222 + 30 +0.0 + 11 +7141.903094 + 21 +5717.194222 + 31 +0.0 + 0 +LINE + 5 +17A3 + 8 +0 + 62 + 0 + 10 +7140.643227 + 20 +5755.730697 + 30 +0.0 + 11 +7140.643227 + 21 +5755.730697 + 31 +0.0 + 0 +LINE + 5 +17A4 + 8 +0 + 62 + 0 + 10 +7148.20243 + 20 +5524.511845 + 30 +0.0 + 11 +7148.20243 + 21 +5524.511845 + 31 +0.0 + 0 +LINE + 5 +17A5 + 8 +0 + 62 + 0 + 10 +7149.462297 + 20 +5485.97537 + 30 +0.0 + 11 +7149.462297 + 21 +5485.97537 + 31 +0.0 + 0 +LINE + 5 +17A6 + 8 +0 + 62 + 0 + 10 +7150.722164 + 20 +5447.438894 + 30 +0.0 + 11 +7150.722164 + 21 +5447.438894 + 31 +0.0 + 0 +LINE + 5 +17A7 + 8 +0 + 62 + 0 + 10 +7126.198047 + 20 +5389.117673 + 30 +0.0 + 11 +7126.198047 + 21 +5389.117673 + 31 +0.0 + 0 +LINE + 5 +17A8 + 8 +0 + 62 + 0 + 10 +7151.982031 + 20 +5408.902419 + 30 +0.0 + 11 +7151.982031 + 21 +5408.902419 + 31 +0.0 + 0 +LINE + 5 +17A9 + 8 +0 + 62 + 0 + 10 +7127.457915 + 20 +5350.581197 + 30 +0.0 + 11 +7127.457915 + 21 +5350.581197 + 31 +0.0 + 0 +LINE + 5 +17AA + 8 +0 + 62 + 0 + 10 +7153.241898 + 20 +5370.365944 + 30 +0.0 + 11 +7153.241898 + 21 +5370.365944 + 31 +0.0 + 0 +LINE + 5 +17AB + 8 +0 + 62 + 0 + 10 +7128.717782 + 20 +5312.044722 + 30 +0.0 + 11 +7128.717782 + 21 +5312.044722 + 31 +0.0 + 0 +LINE + 5 +17AC + 8 +0 + 62 + 0 + 10 +7154.501765 + 20 +5331.829468 + 30 +0.0 + 11 +7154.501765 + 21 +5331.829468 + 31 +0.0 + 0 +LINE + 5 +17AD + 8 +0 + 62 + 0 + 10 +7129.977649 + 20 +5273.508246 + 30 +0.0 + 11 +7129.977649 + 21 +5273.508246 + 31 +0.0 + 0 +LINE + 5 +17AE + 8 +0 + 62 + 0 + 10 +7155.761633 + 20 +5293.292993 + 30 +0.0 + 11 +7155.761633 + 21 +5293.292993 + 31 +0.0 + 0 +LINE + 5 +17AF + 8 +0 + 62 + 0 + 10 +7131.237516 + 20 +5234.971771 + 30 +0.0 + 11 +7131.237516 + 21 +5234.971771 + 31 +0.0 + 0 +LINE + 5 +17B0 + 8 +0 + 62 + 0 + 10 +7157.0215 + 20 +5254.756518 + 30 +0.0 + 11 +7157.0215 + 21 +5254.756518 + 31 +0.0 + 0 +LINE + 5 +17B1 + 8 +0 + 62 + 0 + 10 +7132.497383 + 20 +5196.435296 + 30 +0.0 + 11 +7132.497383 + 21 +5196.435296 + 31 +0.0 + 0 +LINE + 5 +17B2 + 8 +0 + 62 + 0 + 10 +7158.281367 + 20 +5216.220042 + 30 +0.0 + 11 +7158.281367 + 21 +5216.220042 + 31 +0.0 + 0 +LINE + 5 +17B3 + 8 +0 + 62 + 0 + 10 +7133.75725 + 20 +5157.89882 + 30 +0.0 + 11 +7133.75725 + 21 +5157.89882 + 31 +0.0 + 0 +LINE + 5 +17B4 + 8 +0 + 62 + 0 + 10 +7159.541234 + 20 +5177.683567 + 30 +0.0 + 11 +7159.541234 + 21 +5177.683567 + 31 +0.0 + 0 +LINE + 5 +17B5 + 8 +0 + 62 + 0 + 10 +7135.017118 + 20 +5119.362345 + 30 +0.0 + 11 +7135.017118 + 21 +5119.362345 + 31 +0.0 + 0 +LINE + 5 +17B6 + 8 +0 + 62 + 0 + 10 +7160.801101 + 20 +5139.147091 + 30 +0.0 + 11 +7160.801101 + 21 +5139.147091 + 31 +0.0 + 0 +LINE + 5 +17B7 + 8 +0 + 62 + 0 + 10 +7136.276985 + 20 +5080.82587 + 30 +0.0 + 11 +7136.276985 + 21 +5080.82587 + 31 +0.0 + 0 +LINE + 5 +17B8 + 8 +0 + 62 + 0 + 10 +7162.060968 + 20 +5100.610616 + 30 +0.0 + 11 +7162.060968 + 21 +5100.610616 + 31 +0.0 + 0 +LINE + 5 +17B9 + 8 +0 + 62 + 0 + 10 +7137.536852 + 20 +5042.289394 + 30 +0.0 + 11 +7137.536852 + 21 +5042.289394 + 31 +0.0 + 0 +LINE + 5 +17BA + 8 +0 + 62 + 0 + 10 +7138.796719 + 20 +5003.752919 + 30 +0.0 + 11 +7138.796719 + 21 +5003.752919 + 31 +0.0 + 0 +LINE + 5 +17BB + 8 +0 + 62 + 0 + 10 +7140.056586 + 20 +4965.216443 + 30 +0.0 + 11 +7140.056586 + 21 +4965.216443 + 31 +0.0 + 0 +LINE + 5 +17BC + 8 +0 + 62 + 0 + 10 +7134.026277 + 20 +5547.900342 + 30 +0.0 + 11 +7134.026277 + 21 +5547.900342 + 31 +0.0 + 0 +LINE + 5 +17BD + 8 +0 + 62 + 0 + 10 +7150.285973 + 20 +5550.040971 + 30 +0.0 + 11 +7150.285973 + 21 +5550.040971 + 31 +0.0 + 0 +LINE + 5 +17BE + 8 +0 + 62 + 0 + 10 +7131.846051 + 20 +5599.39632 + 30 +0.0 + 11 +7131.846051 + 21 +5599.39632 + 31 +0.0 + 0 +LINE + 5 +17BF + 8 +0 + 62 + 0 + 10 +7159.01164 + 20 +5602.972738 + 30 +0.0 + 11 +7159.01164 + 21 +5602.972738 + 31 +0.0 + 0 +LINE + 5 +17C0 + 8 +0 + 62 + 0 + 10 +7140.571719 + 20 +5652.328087 + 30 +0.0 + 11 +7140.571719 + 21 +5652.328087 + 31 +0.0 + 0 +LINE + 5 +17C1 + 8 +0 + 62 + 0 + 10 +7150.98189 + 20 +5653.698612 + 30 +0.0 + 11 +7150.98189 + 21 +5653.698612 + 31 +0.0 + 0 +LINE + 5 +17C2 + 8 +0 + 62 + 0 + 10 +7132.541968 + 20 +5703.053961 + 30 +0.0 + 11 +7132.541968 + 21 +5703.053961 + 31 +0.0 + 0 +LINE + 5 +17C3 + 8 +0 + 62 + 0 + 10 +7148.801663 + 20 +5705.194591 + 30 +0.0 + 11 +7148.801663 + 21 +5705.194591 + 31 +0.0 + 0 +LINE + 5 +17C4 + 8 +0 + 62 + 0 + 10 +7130.361742 + 20 +5754.54994 + 30 +0.0 + 11 +7130.361742 + 21 +5754.54994 + 31 +0.0 + 0 +LINE + 5 +17C5 + 8 +0 + 62 + 0 + 10 +7157.527331 + 20 +5758.126357 + 30 +0.0 + 11 +7157.527331 + 21 +5758.126357 + 31 +0.0 + 0 +LINE + 5 +17C6 + 8 +0 + 62 + 0 + 10 +7142.056028 + 20 +5497.174468 + 30 +0.0 + 11 +7142.056028 + 21 +5497.174468 + 31 +0.0 + 0 +LINE + 5 +17C7 + 8 +0 + 62 + 0 + 10 +7152.466199 + 20 +5498.544993 + 30 +0.0 + 11 +7152.466199 + 21 +5498.544993 + 31 +0.0 + 0 +LINE + 5 +17C8 + 8 +0 + 62 + 0 + 10 +7133.330361 + 20 +5444.242701 + 30 +0.0 + 11 +7133.330361 + 21 +5444.242701 + 31 +0.0 + 0 +LINE + 5 +17C9 + 8 +0 + 62 + 0 + 10 +7160.49595 + 20 +5447.819119 + 30 +0.0 + 11 +7160.49595 + 21 +5447.819119 + 31 +0.0 + 0 +LINE + 5 +17CA + 8 +0 + 62 + 0 + 10 +7125.100416 + 20 +5391.376197 + 30 +0.0 + 11 +7125.100416 + 21 +5391.376197 + 31 +0.0 + 0 +LINE + 5 +17CB + 8 +0 + 62 + 0 + 10 +7135.510587 + 20 +5392.746722 + 30 +0.0 + 11 +7135.510587 + 21 +5392.746722 + 31 +0.0 + 0 +LINE + 5 +17CC + 8 +0 + 62 + 0 + 10 +7151.770283 + 20 +5394.887352 + 30 +0.0 + 11 +7151.770283 + 21 +5394.887352 + 31 +0.0 + 0 +LINE + 5 +17CD + 8 +0 + 62 + 0 + 10 +7143.540338 + 20 +5342.020848 + 30 +0.0 + 11 +7143.540338 + 21 +5342.020848 + 31 +0.0 + 0 +LINE + 5 +17CE + 8 +0 + 62 + 0 + 10 +7153.950509 + 20 +5343.391373 + 30 +0.0 + 11 +7153.950509 + 21 +5343.391373 + 31 +0.0 + 0 +LINE + 5 +17CF + 8 +0 + 62 + 0 + 10 +7134.81467 + 20 +5289.089081 + 30 +0.0 + 11 +7134.81467 + 21 +5289.089081 + 31 +0.0 + 0 +LINE + 5 +17D0 + 8 +0 + 62 + 0 + 10 +7161.98026 + 20 +5292.665499 + 30 +0.0 + 11 +7161.98026 + 21 +5292.665499 + 31 +0.0 + 0 +LINE + 5 +17D1 + 8 +0 + 62 + 0 + 10 +7126.584726 + 20 +5236.222578 + 30 +0.0 + 11 +7126.584726 + 21 +5236.222578 + 31 +0.0 + 0 +LINE + 5 +17D2 + 8 +0 + 62 + 0 + 10 +7136.994897 + 20 +5237.593103 + 30 +0.0 + 11 +7136.994897 + 21 +5237.593103 + 31 +0.0 + 0 +LINE + 5 +17D3 + 8 +0 + 62 + 0 + 10 +7153.254592 + 20 +5239.733732 + 30 +0.0 + 11 +7153.254592 + 21 +5239.733732 + 31 +0.0 + 0 +LINE + 5 +17D4 + 8 +0 + 62 + 0 + 10 +7145.024647 + 20 +5186.867229 + 30 +0.0 + 11 +7145.024647 + 21 +5186.867229 + 31 +0.0 + 0 +LINE + 5 +17D5 + 8 +0 + 62 + 0 + 10 +7155.434818 + 20 +5188.237754 + 30 +0.0 + 11 +7155.434818 + 21 +5188.237754 + 31 +0.0 + 0 +LINE + 5 +17D6 + 8 +0 + 62 + 0 + 10 +7136.29898 + 20 +5133.935462 + 30 +0.0 + 11 +7136.29898 + 21 +5133.935462 + 31 +0.0 + 0 +LINE + 5 +17D7 + 8 +0 + 62 + 0 + 10 +7128.069035 + 20 +5081.068958 + 30 +0.0 + 11 +7128.069035 + 21 +5081.068958 + 31 +0.0 + 0 +LINE + 5 +17D8 + 8 +0 + 62 + 0 + 10 +7138.479206 + 20 +5082.439483 + 30 +0.0 + 11 +7138.479206 + 21 +5082.439483 + 31 +0.0 + 0 +LINE + 5 +17D9 + 8 +0 + 62 + 0 + 10 +7154.738902 + 20 +5084.580113 + 30 +0.0 + 11 +7154.738902 + 21 +5084.580113 + 31 +0.0 + 0 +LINE + 5 +17DA + 8 +0 + 62 + 0 + 10 +7146.508957 + 20 +5031.713609 + 30 +0.0 + 11 +7146.508957 + 21 +5031.713609 + 31 +0.0 + 0 +LINE + 5 +17DB + 8 +0 + 62 + 0 + 10 +7156.919128 + 20 +5033.084134 + 30 +0.0 + 11 +7156.919128 + 21 +5033.084134 + 31 +0.0 + 0 +LINE + 5 +17DC + 8 +0 + 62 + 0 + 10 +7137.78329 + 20 +4978.781843 + 30 +0.0 + 11 +7137.78329 + 21 +4978.781843 + 31 +0.0 + 0 +LINE + 5 +17DD + 8 +0 + 62 + 0 + 10 +7127.706769 + 20 +5550.576067 + 30 +0.0 + 11 +7127.706769 + 21 +5550.576067 + 31 +0.0 + 0 +LINE + 5 +17DE + 8 +0 + 62 + 0 + 10 +7151.1936 + 20 +5575.40503 + 30 +0.0 + 11 +7151.1936 + 21 +5575.40503 + 31 +0.0 + 0 +LINE + 5 +17DF + 8 +0 + 62 + 0 + 10 +7159.627514 + 20 +5570.032034 + 30 +0.0 + 11 +7159.627514 + 21 +5570.032034 + 31 +0.0 + 0 +LINE + 5 +17E0 + 8 +0 + 62 + 0 + 10 +7135.041033 + 20 +5625.487075 + 30 +0.0 + 11 +7135.041033 + 21 +5625.487075 + 31 +0.0 + 0 +LINE + 5 +17E1 + 8 +0 + 62 + 0 + 10 +7143.474947 + 20 +5620.114079 + 30 +0.0 + 11 +7143.474947 + 21 +5620.114079 + 31 +0.0 + 0 +LINE + 5 +17E2 + 8 +0 + 62 + 0 + 10 +7127.32238 + 20 +5670.196123 + 30 +0.0 + 11 +7127.32238 + 21 +5670.196123 + 31 +0.0 + 0 +LINE + 5 +17E3 + 8 +0 + 62 + 0 + 10 +7157.684472 + 20 +5650.853337 + 30 +0.0 + 11 +7157.684472 + 21 +5650.853337 + 31 +0.0 + 0 +LINE + 5 +17E4 + 8 +0 + 62 + 0 + 10 +7141.531905 + 20 +5700.935382 + 30 +0.0 + 11 +7141.531905 + 21 +5700.935382 + 31 +0.0 + 0 +LINE + 5 +17E5 + 8 +0 + 62 + 0 + 10 +7125.379337 + 20 +5751.017427 + 30 +0.0 + 11 +7125.379337 + 21 +5751.017427 + 31 +0.0 + 0 +LINE + 5 +17E6 + 8 +0 + 62 + 0 + 10 +7148.866168 + 20 +5775.84639 + 30 +0.0 + 11 +7148.866168 + 21 +5775.84639 + 31 +0.0 + 0 +LINE + 5 +17E7 + 8 +0 + 62 + 0 + 10 +7157.300083 + 20 +5770.473394 + 30 +0.0 + 11 +7157.300083 + 21 +5770.473394 + 31 +0.0 + 0 +LINE + 5 +17E8 + 8 +0 + 62 + 0 + 10 +7143.859336 + 20 +5500.494022 + 30 +0.0 + 11 +7143.859336 + 21 +5500.494022 + 31 +0.0 + 0 +LINE + 5 +17E9 + 8 +0 + 62 + 0 + 10 +7129.649811 + 20 +5469.754764 + 30 +0.0 + 11 +7129.649811 + 21 +5469.754764 + 31 +0.0 + 0 +LINE + 5 +17EA + 8 +0 + 62 + 0 + 10 +7160.011904 + 20 +5450.411978 + 30 +0.0 + 11 +7160.011904 + 21 +5450.411978 + 31 +0.0 + 0 +LINE + 5 +17EB + 8 +0 + 62 + 0 + 10 +7137.368464 + 20 +5425.045715 + 30 +0.0 + 11 +7137.368464 + 21 +5425.045715 + 31 +0.0 + 0 +LINE + 5 +17EC + 8 +0 + 62 + 0 + 10 +7145.802379 + 20 +5419.672719 + 30 +0.0 + 11 +7145.802379 + 21 +5419.672719 + 31 +0.0 + 0 +LINE + 5 +17ED + 8 +0 + 62 + 0 + 10 +7153.521031 + 20 +5374.96367 + 30 +0.0 + 11 +7153.521031 + 21 +5374.96367 + 31 +0.0 + 0 +LINE + 5 +17EE + 8 +0 + 62 + 0 + 10 +7161.954946 + 20 +5369.590674 + 30 +0.0 + 11 +7161.954946 + 21 +5369.590674 + 31 +0.0 + 0 +LINE + 5 +17EF + 8 +0 + 62 + 0 + 10 +7130.034201 + 20 +5350.134707 + 30 +0.0 + 11 +7130.034201 + 21 +5350.134707 + 31 +0.0 + 0 +LINE + 5 +17F0 + 8 +0 + 62 + 0 + 10 +7146.186768 + 20 +5300.052663 + 30 +0.0 + 11 +7146.186768 + 21 +5300.052663 + 31 +0.0 + 0 +LINE + 5 +17F1 + 8 +0 + 62 + 0 + 10 +7131.977243 + 20 +5269.313404 + 30 +0.0 + 11 +7131.977243 + 21 +5269.313404 + 31 +0.0 + 0 +LINE + 5 +17F2 + 8 +0 + 62 + 0 + 10 +7162.339335 + 20 +5249.970618 + 30 +0.0 + 11 +7162.339335 + 21 +5249.970618 + 31 +0.0 + 0 +LINE + 5 +17F3 + 8 +0 + 62 + 0 + 10 +7139.695896 + 20 +5224.604355 + 30 +0.0 + 11 +7139.695896 + 21 +5224.604355 + 31 +0.0 + 0 +LINE + 5 +17F4 + 8 +0 + 62 + 0 + 10 +7148.12981 + 20 +5219.231359 + 30 +0.0 + 11 +7148.12981 + 21 +5219.231359 + 31 +0.0 + 0 +LINE + 5 +17F5 + 8 +0 + 62 + 0 + 10 +7155.848463 + 20 +5174.522311 + 30 +0.0 + 11 +7155.848463 + 21 +5174.522311 + 31 +0.0 + 0 +LINE + 5 +17F6 + 8 +0 + 62 + 0 + 10 +7132.361632 + 20 +5149.693348 + 30 +0.0 + 11 +7132.361632 + 21 +5149.693348 + 31 +0.0 + 0 +LINE + 5 +17F7 + 8 +0 + 62 + 0 + 10 +7148.5142 + 20 +5099.611303 + 30 +0.0 + 11 +7148.5142 + 21 +5099.611303 + 31 +0.0 + 0 +LINE + 5 +17F8 + 8 +0 + 62 + 0 + 10 +7125.87076 + 20 +5074.24504 + 30 +0.0 + 11 +7125.87076 + 21 +5074.24504 + 31 +0.0 + 0 +LINE + 5 +17F9 + 8 +0 + 62 + 0 + 10 +7134.304675 + 20 +5068.872044 + 30 +0.0 + 11 +7134.304675 + 21 +5068.872044 + 31 +0.0 + 0 +LINE + 5 +17FA + 8 +0 + 62 + 0 + 10 +7142.023328 + 20 +5024.162996 + 30 +0.0 + 11 +7142.023328 + 21 +5024.162996 + 31 +0.0 + 0 +LINE + 5 +17FB + 8 +0 + 62 + 0 + 10 +7150.457242 + 20 +5018.79 + 30 +0.0 + 11 +7150.457242 + 21 +5018.79 + 31 +0.0 + 0 +LINE + 5 +17FC + 8 +0 + 62 + 0 + 10 +7158.175895 + 20 +4974.080951 + 30 +0.0 + 11 +7158.175895 + 21 +4974.080951 + 31 +0.0 + 0 +LINE + 5 +17FD + 8 +0 + 62 + 0 + 10 +7127.249552 + 20 +5505.717148 + 30 +0.0 + 11 +7127.249552 + 21 +5505.717148 + 31 +0.0 + 0 +LINE + 5 +17FE + 8 +0 + 62 + 0 + 10 +7130.935939 + 20 +5502.339197 + 30 +0.0 + 11 +7130.935939 + 21 +5502.339197 + 31 +0.0 + 0 +LINE + 5 +17FF + 8 +0 + 62 + 0 + 10 +7148.335684 + 20 +5486.395268 + 30 +0.0 + 11 +7148.335684 + 21 +5486.395268 + 31 +0.0 + 0 +LINE + 5 +1800 + 8 +0 + 62 + 0 + 10 +7126.472976 + 20 +5579.074411 + 30 +0.0 + 11 +7126.472976 + 21 +5579.074411 + 31 +0.0 + 0 +LINE + 5 +1801 + 8 +0 + 62 + 0 + 10 +7146.379464 + 20 +5560.833475 + 30 +0.0 + 11 +7146.379464 + 21 +5560.833475 + 31 +0.0 + 0 +LINE + 5 +1802 + 8 +0 + 62 + 0 + 10 +7150.065851 + 20 +5557.455524 + 30 +0.0 + 11 +7150.065851 + 21 +5557.455524 + 31 +0.0 + 0 +LINE + 5 +1803 + 8 +0 + 62 + 0 + 10 +7128.203143 + 20 +5650.134666 + 30 +0.0 + 11 +7128.203143 + 21 +5650.134666 + 31 +0.0 + 0 +LINE + 5 +1804 + 8 +0 + 62 + 0 + 10 +7145.602888 + 20 +5634.190737 + 30 +0.0 + 11 +7145.602888 + 21 +5634.190737 + 31 +0.0 + 0 +LINE + 5 +1805 + 8 +0 + 62 + 0 + 10 +7143.646669 + 20 +5708.628944 + 30 +0.0 + 11 +7143.646669 + 21 +5708.628944 + 31 +0.0 + 0 +LINE + 5 +1806 + 8 +0 + 62 + 0 + 10 +7147.333055 + 20 +5705.250993 + 30 +0.0 + 11 +7147.333055 + 21 +5705.250993 + 31 +0.0 + 0 +LINE + 5 +1807 + 8 +0 + 62 + 0 + 10 +7142.870093 + 20 +5781.986207 + 30 +0.0 + 11 +7142.870093 + 21 +5781.986207 + 31 +0.0 + 0 +LINE + 5 +1808 + 8 +0 + 62 + 0 + 10 +7129.205772 + 20 +5431.278941 + 30 +0.0 + 11 +7129.205772 + 21 +5431.278941 + 31 +0.0 + 0 +LINE + 5 +1809 + 8 +0 + 62 + 0 + 10 +7149.11226 + 20 +5413.038006 + 30 +0.0 + 11 +7149.11226 + 21 +5413.038006 + 31 +0.0 + 0 +LINE + 5 +180A + 8 +0 + 62 + 0 + 10 +7152.798647 + 20 +5409.660055 + 30 +0.0 + 11 +7152.798647 + 21 +5409.660055 + 31 +0.0 + 0 +LINE + 5 +180B + 8 +0 + 62 + 0 + 10 +7129.982348 + 20 +5357.921679 + 30 +0.0 + 11 +7129.982348 + 21 +5357.921679 + 31 +0.0 + 0 +LINE + 5 +180C + 8 +0 + 62 + 0 + 10 +7133.668735 + 20 +5354.543728 + 30 +0.0 + 11 +7133.668735 + 21 +5354.543728 + 31 +0.0 + 0 +LINE + 5 +180D + 8 +0 + 62 + 0 + 10 +7151.06848 + 20 +5338.599799 + 30 +0.0 + 11 +7151.06848 + 21 +5338.599799 + 31 +0.0 + 0 +LINE + 5 +180E + 8 +0 + 62 + 0 + 10 +7131.938568 + 20 +5283.483472 + 30 +0.0 + 11 +7131.938568 + 21 +5283.483472 + 31 +0.0 + 0 +LINE + 5 +180F + 8 +0 + 62 + 0 + 10 +7151.845056 + 20 +5265.242536 + 30 +0.0 + 11 +7151.845056 + 21 +5265.242536 + 31 +0.0 + 0 +LINE + 5 +1810 + 8 +0 + 62 + 0 + 10 +7155.531442 + 20 +5261.864585 + 30 +0.0 + 11 +7155.531442 + 21 +5261.864585 + 31 +0.0 + 0 +LINE + 5 +1811 + 8 +0 + 62 + 0 + 10 +7132.715143 + 20 +5210.12621 + 30 +0.0 + 11 +7132.715143 + 21 +5210.12621 + 31 +0.0 + 0 +LINE + 5 +1812 + 8 +0 + 62 + 0 + 10 +7136.40153 + 20 +5206.748259 + 30 +0.0 + 11 +7136.40153 + 21 +5206.748259 + 31 +0.0 + 0 +LINE + 5 +1813 + 8 +0 + 62 + 0 + 10 +7153.801275 + 20 +5190.80433 + 30 +0.0 + 11 +7153.801275 + 21 +5190.80433 + 31 +0.0 + 0 +LINE + 5 +1814 + 8 +0 + 62 + 0 + 10 +7134.671363 + 20 +5135.688003 + 30 +0.0 + 11 +7134.671363 + 21 +5135.688003 + 31 +0.0 + 0 +LINE + 5 +1815 + 8 +0 + 62 + 0 + 10 +7154.577851 + 20 +5117.447067 + 30 +0.0 + 11 +7154.577851 + 21 +5117.447067 + 31 +0.0 + 0 +LINE + 5 +1816 + 8 +0 + 62 + 0 + 10 +7158.264238 + 20 +5114.069116 + 30 +0.0 + 11 +7158.264238 + 21 +5114.069116 + 31 +0.0 + 0 +LINE + 5 +1817 + 8 +0 + 62 + 0 + 10 +7135.447939 + 20 +5062.33074 + 30 +0.0 + 11 +7135.447939 + 21 +5062.33074 + 31 +0.0 + 0 +LINE + 5 +1818 + 8 +0 + 62 + 0 + 10 +7139.134326 + 20 +5058.952789 + 30 +0.0 + 11 +7139.134326 + 21 +5058.952789 + 31 +0.0 + 0 +LINE + 5 +1819 + 8 +0 + 62 + 0 + 10 +7156.534071 + 20 +5043.00886 + 30 +0.0 + 11 +7156.534071 + 21 +5043.00886 + 31 +0.0 + 0 +LINE + 5 +181A + 8 +0 + 62 + 0 + 10 +7137.404159 + 20 +4987.892534 + 30 +0.0 + 11 +7137.404159 + 21 +4987.892534 + 31 +0.0 + 0 +LINE + 5 +181B + 8 +0 + 62 + 0 + 10 +7157.310647 + 20 +4969.651598 + 30 +0.0 + 11 +7157.310647 + 21 +4969.651598 + 31 +0.0 + 0 +LINE + 5 +181C + 8 +0 + 62 + 0 + 10 +7160.997033 + 20 +4966.273647 + 30 +0.0 + 11 +7160.997033 + 21 +4966.273647 + 31 +0.0 + 0 +DIMENSION + 5 +181D + 8 +BEMASSUNG + 2 +*D39 + 10 +9820.0 + 20 +4225.0 + 30 +0.0 + 11 +9732.5 + 21 +3537.5 + 31 +0.0 + 1 +55 + 13 +7915.0 + 23 +2850.0 + 33 +0.0 + 14 +7915.0 + 24 +4225.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +181E + 8 +BEMASSUNG + 2 +*D40 + 10 +9820.0 + 20 +4625.0 + 30 +0.0 + 11 +9732.5 + 21 +4425.0 + 31 +0.0 + 1 +16 + 13 +7915.0 + 23 +4225.0 + 33 +0.0 + 14 +8530.0 + 24 +4625.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +181F + 8 +BEMASSUNG + 2 +*D41 + 10 +9820.0 + 20 +4780.0 + 30 +0.0 + 11 +9732.5 + 21 +4702.5 + 31 +0.0 + 1 +4 + 13 +8530.0 + 23 +4625.0 + 33 +0.0 + 14 +8555.0 + 24 +4780.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +1820 + 8 +BEMASSUNG + 2 +*D42 + 10 +9820.0 + 20 +4900.0 + 30 +0.0 + 11 +9732.5 + 21 +4840.0 + 31 +0.0 + 1 +4 + 13 +8555.0 + 23 +4780.0 + 33 +0.0 + 14 +8535.0 + 24 +4900.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +1821 + 8 +BEMASSUNG + 2 +*D48 + 10 +9820.0 + 20 +4960.0 + 30 +0.0 + 11 +9732.5 + 21 +5010.0 + 31 +0.0 + 70 + 128 + 1 +2 + 13 +8535.0 + 23 +4900.0 + 33 +0.0 + 14 +8540.0 + 24 +4960.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +1822 + 8 +BEMASSUNG + 2 +*D43 + 10 +6185.0 + 20 +6435.0 + 30 +0.0 + 11 +6075.0 + 21 +6522.5 + 31 +0.0 + 1 +8 + 13 +5965.0 + 23 +5775.0 + 33 +0.0 + 14 +6185.0 + 24 +5775.0 + 34 +0.0 + 0 +DIMENSION + 5 +1823 + 8 +BEMASSUNG + 2 +*D44 + 10 +7125.0 + 20 +6435.0 + 30 +0.0 + 11 +6655.0 + 21 +6522.5 + 31 +0.0 + 1 +36 + 13 +6185.0 + 23 +5775.0 + 33 +0.0 + 14 +7125.0 + 24 +5780.0 + 34 +0.0 + 0 +DIMENSION + 5 +1824 + 8 +BEMASSUNG + 2 +*D47 + 10 +7160.0 + 20 +6435.0 + 30 +0.0 + 11 +7215.0 + 21 +6522.5 + 31 +0.0 + 70 + 128 + 1 +1 + 13 +7125.0 + 23 +5780.0 + 33 +0.0 + 14 +7160.0 + 24 +5785.0 + 34 +0.0 + 0 +DIMENSION + 5 +1825 + 8 +BEMASSUNG + 2 +*D45 + 10 +7920.0 + 20 +1715.0 + 30 +0.0 + 11 +6670.0 + 21 +1802.5 + 31 +0.0 + 1 +100 + 13 +5420.0 + 23 +2850.0 + 33 +0.0 + 14 +7920.0 + 24 +2850.0 + 34 +0.0 + 0 +POINT + 5 +1826 + 8 +BEMASSUNG + 10 +6175.0 + 20 +5789.0709 + 30 +0.0 + 0 +POINT + 5 +1827 + 8 +BEMASSUNG + 10 +6175.0 + 20 +5769.0709 + 30 +0.0 + 0 +POINT + 5 +1828 + 8 +BEMASSUNG + 10 +6175.0 + 20 +5749.0709 + 30 +0.0 + 0 +POINT + 5 +1829 + 8 +BEMASSUNG + 10 +6175.0 + 20 +5729.0709 + 30 +0.0 + 0 +POINT + 5 +182A + 8 +BEMASSUNG + 10 +6175.0 + 20 +5709.0709 + 30 +0.0 + 0 +POINT + 5 +182B + 8 +BEMASSUNG + 10 +6175.0 + 20 +5689.0709 + 30 +0.0 + 0 +POINT + 5 +182C + 8 +BEMASSUNG + 10 +6175.0 + 20 +5669.0709 + 30 +0.0 + 0 +POINT + 5 +182D + 8 +BEMASSUNG + 10 +6175.0 + 20 +5649.0709 + 30 +0.0 + 0 +POINT + 5 +182E + 8 +BEMASSUNG + 10 +6175.0 + 20 +5629.0709 + 30 +0.0 + 0 +POINT + 5 +182F + 8 +BEMASSUNG + 10 +6175.0 + 20 +5609.0709 + 30 +0.0 + 0 +POINT + 5 +1830 + 8 +BEMASSUNG + 10 +6175.0 + 20 +5589.0709 + 30 +0.0 + 0 +POINT + 5 +1831 + 8 +BEMASSUNG + 10 +6175.0 + 20 +5569.0709 + 30 +0.0 + 0 +POINT + 5 +1832 + 8 +BEMASSUNG + 10 +6175.0 + 20 +5549.0709 + 30 +0.0 + 0 +POINT + 5 +1833 + 8 +BEMASSUNG + 10 +6175.0 + 20 +5529.0709 + 30 +0.0 + 0 +POINT + 5 +1834 + 8 +BEMASSUNG + 10 +6175.0 + 20 +5509.0709 + 30 +0.0 + 0 +POINT + 5 +1835 + 8 +BEMASSUNG + 10 +6175.0 + 20 +5489.0709 + 30 +0.0 + 0 +POINT + 5 +1836 + 8 +BEMASSUNG + 10 +6175.0 + 20 +5469.0709 + 30 +0.0 + 0 +POINT + 5 +1837 + 8 +BEMASSUNG + 10 +6175.0 + 20 +5449.0709 + 30 +0.0 + 0 +POINT + 5 +1838 + 8 +BEMASSUNG + 10 +6175.0 + 20 +5429.0709 + 30 +0.0 + 0 +POINT + 5 +1839 + 8 +BEMASSUNG + 10 +6175.0 + 20 +5409.0709 + 30 +0.0 + 0 +POINT + 5 +183A + 8 +BEMASSUNG + 10 +6175.0 + 20 +5389.0709 + 30 +0.0 + 0 +POINT + 5 +183B + 8 +BEMASSUNG + 10 +6175.0 + 20 +5369.0709 + 30 +0.0 + 0 +POINT + 5 +183C + 8 +BEMASSUNG + 10 +6175.0 + 20 +5349.0709 + 30 +0.0 + 0 +POINT + 5 +183D + 8 +BEMASSUNG + 10 +6175.0 + 20 +5329.0709 + 30 +0.0 + 0 +POINT + 5 +183E + 8 +BEMASSUNG + 10 +6175.0 + 20 +5309.0709 + 30 +0.0 + 0 +POINT + 5 +183F + 8 +BEMASSUNG + 10 +6175.0 + 20 +5289.0709 + 30 +0.0 + 0 +POINT + 5 +1840 + 8 +BEMASSUNG + 10 +6175.0 + 20 +5269.0709 + 30 +0.0 + 0 +POINT + 5 +1841 + 8 +BEMASSUNG + 10 +6175.0 + 20 +5249.0709 + 30 +0.0 + 0 +POINT + 5 +1842 + 8 +BEMASSUNG + 10 +6175.0 + 20 +5229.0709 + 30 +0.0 + 0 +POINT + 5 +1843 + 8 +BEMASSUNG + 10 +6175.0 + 20 +5209.0709 + 30 +0.0 + 0 +POINT + 5 +1844 + 8 +BEMASSUNG + 10 +6171.869511 + 20 +5189.673777 + 30 +0.0 + 0 +POINT + 5 +1845 + 8 +BEMASSUNG + 10 +6164.441697 + 20 +5171.104243 + 30 +0.0 + 0 +POINT + 5 +1846 + 8 +BEMASSUNG + 10 +6157.013884 + 20 +5152.534709 + 30 +0.0 + 0 +POINT + 5 +1847 + 8 +BEMASSUNG + 10 +6149.977259 + 20 +5133.885692 + 30 +0.0 + 0 +POINT + 5 +1848 + 8 +BEMASSUNG + 10 +6149.569181 + 20 +5113.889856 + 30 +0.0 + 0 +POINT + 5 +1849 + 8 +BEMASSUNG + 10 +6149.161102 + 20 +5093.894019 + 30 +0.0 + 0 +POINT + 5 +184A + 8 +BEMASSUNG + 10 +6148.753024 + 20 +5073.898183 + 30 +0.0 + 0 +POINT + 5 +184B + 8 +BEMASSUNG + 10 +6148.344946 + 20 +5053.902346 + 30 +0.0 + 0 +POINT + 5 +184C + 8 +BEMASSUNG + 10 +6147.936868 + 20 +5033.90651 + 30 +0.0 + 0 +POINT + 5 +184D + 8 +BEMASSUNG + 10 +6147.528789 + 20 +5013.910674 + 30 +0.0 + 0 +POINT + 5 +184E + 8 +BEMASSUNG + 10 +6147.120711 + 20 +4993.914837 + 30 +0.0 + 0 +POINT + 5 +184F + 8 +BEMASSUNG + 10 +6146.712633 + 20 +4973.919001 + 30 +0.0 + 0 +POINT + 5 +1850 + 8 +BEMASSUNG + 10 +6146.304554 + 20 +4953.923165 + 30 +0.0 + 0 +POINT + 5 +1851 + 8 +BEMASSUNG + 10 +6145.896476 + 20 +4933.927328 + 30 +0.0 + 0 +POINT + 5 +1852 + 8 +BEMASSUNG + 10 +6145.488398 + 20 +4913.931492 + 30 +0.0 + 0 +POINT + 5 +1853 + 8 +BEMASSUNG + 10 +6145.080319 + 20 +4893.935655 + 30 +0.0 + 0 +POINT + 5 +1854 + 8 +BEMASSUNG + 10 +6144.672241 + 20 +4873.939819 + 30 +0.0 + 0 +POINT + 5 +1855 + 8 +BEMASSUNG + 10 +6144.264163 + 20 +4853.943983 + 30 +0.0 + 0 +POINT + 5 +1856 + 8 +BEMASSUNG + 10 +6143.856085 + 20 +4833.948146 + 30 +0.0 + 0 +POINT + 5 +1857 + 8 +BEMASSUNG + 10 +6143.448006 + 20 +4813.95231 + 30 +0.0 + 0 +POINT + 5 +1858 + 8 +BEMASSUNG + 10 +6143.039928 + 20 +4793.956474 + 30 +0.0 + 0 +POINT + 5 +1859 + 8 +BEMASSUNG + 10 +6142.63185 + 20 +4773.960637 + 30 +0.0 + 0 +POINT + 5 +185A + 8 +BEMASSUNG + 10 +6142.223771 + 20 +4753.964801 + 30 +0.0 + 0 +POINT + 5 +185B + 8 +BEMASSUNG + 10 +6141.815693 + 20 +4733.968965 + 30 +0.0 + 0 +POINT + 5 +185C + 8 +BEMASSUNG + 10 +6141.407615 + 20 +4713.973128 + 30 +0.0 + 0 +POINT + 5 +185D + 8 +BEMASSUNG + 10 +6140.999537 + 20 +4693.977292 + 30 +0.0 + 0 +POINT + 5 +185E + 8 +BEMASSUNG + 10 +6140.591458 + 20 +4673.981455 + 30 +0.0 + 0 +POINT + 5 +185F + 8 +BEMASSUNG + 10 +6140.18338 + 20 +4653.985619 + 30 +0.0 + 0 +POINT + 5 +1860 + 8 +BEMASSUNG + 10 +6139.775302 + 20 +4633.989783 + 30 +0.0 + 0 +POINT + 5 +1861 + 8 +BEMASSUNG + 10 +6139.367223 + 20 +4613.993946 + 30 +0.0 + 0 +POINT + 5 +1862 + 8 +BEMASSUNG + 10 +6138.959145 + 20 +4593.99811 + 30 +0.0 + 0 +POINT + 5 +1863 + 8 +BEMASSUNG + 10 +6138.551067 + 20 +4574.002274 + 30 +0.0 + 0 +POINT + 5 +1864 + 8 +BEMASSUNG + 10 +6138.142989 + 20 +4554.006437 + 30 +0.0 + 0 +POINT + 5 +1865 + 8 +BEMASSUNG + 10 +6137.73491 + 20 +4534.010601 + 30 +0.0 + 0 +POINT + 5 +1866 + 8 +BEMASSUNG + 10 +6137.326832 + 20 +4514.014764 + 30 +0.0 + 0 +POINT + 5 +1867 + 8 +BEMASSUNG + 10 +6136.918754 + 20 +4494.018928 + 30 +0.0 + 0 +POINT + 5 +1868 + 8 +BEMASSUNG + 10 +6136.510675 + 20 +4474.023092 + 30 +0.0 + 0 +POINT + 5 +1869 + 8 +BEMASSUNG + 10 +6136.102597 + 20 +4454.027255 + 30 +0.0 + 0 +POINT + 5 +186A + 8 +BEMASSUNG + 10 +6135.694519 + 20 +4434.031419 + 30 +0.0 + 0 +POINT + 5 +186B + 8 +BEMASSUNG + 10 +6135.28644 + 20 +4414.035583 + 30 +0.0 + 0 +POINT + 5 +186C + 8 +BEMASSUNG + 10 +6130.420253 + 20 +4396.183544 + 30 +0.0 + 0 +POINT + 5 +186D + 8 +BEMASSUNG + 10 +6115.055827 + 20 +4383.379856 + 30 +0.0 + 0 +POINT + 5 +186E + 8 +BEMASSUNG + 10 +6099.691402 + 20 +4370.576168 + 30 +0.0 + 0 +POINT + 5 +186F + 8 +BEMASSUNG + 10 +6084.326976 + 20 +4357.77248 + 30 +0.0 + 0 +POINT + 5 +1870 + 8 +BEMASSUNG + 10 +6068.96255 + 20 +4344.968792 + 30 +0.0 + 0 +POINT + 5 +1871 + 8 +BEMASSUNG + 10 +6053.598125 + 20 +4332.165104 + 30 +0.0 + 0 +POINT + 5 +1872 + 8 +BEMASSUNG + 10 +6037.406706 + 20 +4320.537003 + 30 +0.0 + 0 +POINT + 5 +1873 + 8 +BEMASSUNG + 10 +6020.164405 + 20 +4310.402752 + 30 +0.0 + 0 +POINT + 5 +1874 + 8 +BEMASSUNG + 10 +6002.922103 + 20 +4300.268501 + 30 +0.0 + 0 +POINT + 5 +1875 + 8 +BEMASSUNG + 10 +5985.679802 + 20 +4290.134251 + 30 +0.0 + 0 +DIMENSION + 5 +1876 + 8 +BEMASSUNG + 2 +*D46 + 10 +4565.0 + 20 +5095.0 + 30 +0.0 + 11 +4477.5 + 21 +4877.5 + 31 +0.0 + 12 +1015.0 + 22 +0.0 + 32 +0.0 + 1 +16 + 13 +7235.0 + 23 +4660.0 + 33 +0.0 + 14 +7235.0 + 24 +5095.0 + 34 +0.0 + 50 +90.0 + 0 +TEXT + 5 +1877 + 8 +LEGENDE-35 + 10 +8505.0 + 20 +6355.0 + 30 +0.0 + 40 +87.5 + 1 +GIPSPUTZ + 41 +0.75 + 0 +TEXT + 5 +1878 + 8 +LEGENDE-35 + 10 +8505.0 + 20 +6105.0 + 30 +0.0 + 40 +87.5 + 1 +NATURSTEINPLATTEN + 41 +0.75 + 0 +TEXT + 5 +1879 + 8 +LEGENDE-35 + 10 +8505.0 + 20 +5855.0 + 30 +0.0 + 40 +87.5 + 1 +ZEMENTESTRICH + 41 +0.75 + 0 +TEXT + 5 +187A + 8 +LEGENDE-35 + 10 +8505.0 + 20 +5605.0 + 30 +0.0 + 40 +87.5 + 1 +PE-FOLIE + 41 +0.75 + 0 +TEXT + 5 +187B + 8 +LEGENDE-35 + 10 +8505.0 + 20 +5355.0 + 30 +0.0 + 40 +87.5 + 1 +PS-WÄDÄ + 41 +0.75 + 0 +POLYLINE + 5 +187C + 8 +BEMASSUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +20D9 + 8 +BEMASSUNG + 10 +8390.0 + 20 +6410.0 + 30 +0.0 + 0 +VERTEX + 5 +20DA + 8 +BEMASSUNG + 10 +7545.0 + 20 +6410.0 + 30 +0.0 + 0 +VERTEX + 5 +20DB + 8 +BEMASSUNG + 10 +7545.0 + 20 +5525.0 + 30 +0.0 + 0 +VERTEX + 5 +20DC + 8 +BEMASSUNG + 10 +7145.0 + 20 +5525.0 + 30 +0.0 + 0 +SEQEND + 5 +20DD + 8 +BEMASSUNG + 0 +POLYLINE + 5 +1882 + 8 +BEMASSUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +20DE + 8 +BEMASSUNG + 10 +8390.0 + 20 +6155.0 + 30 +0.0 + 0 +VERTEX + 5 +20DF + 8 +BEMASSUNG + 10 +7655.0 + 20 +6155.0 + 30 +0.0 + 0 +VERTEX + 5 +20E0 + 8 +BEMASSUNG + 10 +7655.0 + 20 +4940.0 + 30 +0.0 + 0 +SEQEND + 5 +20E1 + 8 +BEMASSUNG + 0 +POLYLINE + 5 +1887 + 8 +BEMASSUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +20E2 + 8 +BEMASSUNG + 10 +8385.0 + 20 +5890.0 + 30 +0.0 + 0 +VERTEX + 5 +20E3 + 8 +BEMASSUNG + 10 +7825.0 + 20 +5890.0 + 30 +0.0 + 0 +VERTEX + 5 +20E4 + 8 +BEMASSUNG + 10 +7825.0 + 20 +4855.0 + 30 +0.0 + 0 +SEQEND + 5 +20E5 + 8 +BEMASSUNG + 0 +POLYLINE + 5 +188C + 8 +BEMASSUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +20E6 + 8 +BEMASSUNG + 10 +8385.0 + 20 +5645.0 + 30 +0.0 + 0 +VERTEX + 5 +20E7 + 8 +BEMASSUNG + 10 +7910.0 + 20 +5645.0 + 30 +0.0 + 0 +VERTEX + 5 +20E8 + 8 +BEMASSUNG + 10 +7910.0 + 20 +4790.0 + 30 +0.0 + 0 +SEQEND + 5 +20E9 + 8 +BEMASSUNG + 0 +POLYLINE + 5 +1891 + 8 +BEMASSUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +20EA + 8 +BEMASSUNG + 10 +8010.0 + 20 +5645.0 + 30 +0.0 + 0 +VERTEX + 5 +20EB + 8 +BEMASSUNG + 10 +8010.0 + 20 +4655.0 + 30 +0.0 + 0 +SEQEND + 5 +20EC + 8 +BEMASSUNG + 0 +POLYLINE + 5 +1895 + 8 +BEMASSUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +20ED + 8 +BEMASSUNG + 10 +8380.0 + 20 +5405.0 + 30 +0.0 + 0 +VERTEX + 5 +20EE + 8 +BEMASSUNG + 10 +8125.0 + 20 +5405.0 + 30 +0.0 + 0 +VERTEX + 5 +20EF + 8 +BEMASSUNG + 10 +8125.0 + 20 +4715.0 + 30 +0.0 + 0 +SEQEND + 5 +20F0 + 8 +BEMASSUNG + 0 +TEXT + 5 +189A + 8 +BEMASSUNG + 10 +2330.0 + 20 +5700.0 + 30 +0.0 + 40 +87.5 + 1 +PS-HARTSCHAUM-WÄDÄ + 41 +0.75 + 0 +TEXT + 5 +189B + 8 +BEMASSUNG + 10 +2330.0 + 20 +5450.0 + 30 +0.0 + 40 +87.5 + 1 +DICHTUNGSBAHN (BITUMEN) + 41 +0.75 + 0 +TEXT + 5 +189C + 8 +BEMASSUNG + 10 +2330.0 + 20 +5200.0 + 30 +0.0 + 40 +87.5 + 1 +MW Mz-20-1.8-NF + 41 +0.75 + 0 +TEXT + 5 +189D + 8 +BEMASSUNG + 10 +2330.0 + 20 +4950.0 + 30 +0.0 + 40 +87.5 + 1 +MÖRTELKEHLE + 41 +0.75 + 0 +POLYLINE + 5 +189E + 8 +BEMASSUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +20F1 + 8 +BEMASSUNG + 10 +4005.0 + 20 +5735.0 + 30 +0.0 + 0 +VERTEX + 5 +20F2 + 8 +BEMASSUNG + 10 +6080.0 + 20 +5735.0 + 30 +0.0 + 0 +SEQEND + 5 +20F3 + 8 +BEMASSUNG + 0 +POLYLINE + 5 +18A2 + 8 +BEMASSUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +20F4 + 8 +BEMASSUNG + 10 +4010.0 + 20 +5500.0 + 30 +0.0 + 0 +VERTEX + 5 +20F5 + 8 +BEMASSUNG + 10 +6195.0 + 20 +5500.0 + 30 +0.0 + 0 +SEQEND + 5 +20F6 + 8 +BEMASSUNG + 0 +POLYLINE + 5 +18A6 + 8 +BEMASSUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +20F7 + 8 +BEMASSUNG + 10 +3390.0 + 20 +5270.0 + 30 +0.0 + 0 +VERTEX + 5 +20F8 + 8 +BEMASSUNG + 10 +6320.0 + 20 +5270.0 + 30 +0.0 + 0 +SEQEND + 5 +20F9 + 8 +BEMASSUNG + 0 +POLYLINE + 5 +18AA + 8 +BEMASSUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +20FA + 8 +BEMASSUNG + 10 +3355.0 + 20 +4990.0 + 30 +0.0 + 0 +VERTEX + 5 +20FB + 8 +BEMASSUNG + 10 +4255.0 + 20 +4450.0 + 30 +0.0 + 0 +VERTEX + 5 +20FC + 8 +BEMASSUNG + 10 +5770.0 + 20 +4450.0 + 30 +0.0 + 0 +VERTEX + 5 +20FD + 8 +BEMASSUNG + 10 +6140.0 + 20 +4265.0 + 30 +0.0 + 0 +SEQEND + 5 +20FE + 8 +BEMASSUNG + 0 +TEXT + 5 +18B0 + 8 +BEMASSUNG + 10 +9300.0 + 20 +2220.0 + 30 +0.0 + 40 +87.5 + 1 +ORTBETON B25 ZWEIACHSIG GESPANNT + 41 +0.75 + 0 +TEXT + 5 +18B1 + 8 +BEMASSUNG + 10 +9300.0 + 20 +1970.0 + 30 +0.0 + 40 +87.5 + 1 +KIES + 41 +0.75 + 0 +TEXT + 5 +18B2 + 8 +BEMASSUNG + 10 +9300.0 + 20 +1720.0 + 30 +0.0 + 40 +87.5 + 1 +FUNDAMENT B15 + 41 +0.75 + 0 +POLYLINE + 5 +18B3 + 8 +BEMASSUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +20FF + 8 +BEMASSUNG + 10 +9210.0 + 20 +2275.0 + 30 +0.0 + 0 +VERTEX + 5 +2100 + 8 +BEMASSUNG + 10 +8990.0 + 20 +2275.0 + 30 +0.0 + 0 +VERTEX + 5 +2101 + 8 +BEMASSUNG + 10 +8990.0 + 20 +4350.0 + 30 +0.0 + 0 +VERTEX + 5 +2102 + 8 +BEMASSUNG + 10 +8490.0 + 20 +4350.0 + 30 +0.0 + 0 +SEQEND + 5 +2103 + 8 +BEMASSUNG + 0 +POLYLINE + 5 +18B9 + 8 +BEMASSUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2104 + 8 +BEMASSUNG + 10 +9205.0 + 20 +2010.0 + 30 +0.0 + 0 +VERTEX + 5 +2105 + 8 +BEMASSUNG + 10 +8875.0 + 20 +2010.0 + 30 +0.0 + 0 +VERTEX + 5 +2106 + 8 +BEMASSUNG + 10 +8875.0 + 20 +3755.0 + 30 +0.0 + 0 +VERTEX + 5 +2107 + 8 +BEMASSUNG + 10 +8450.0 + 20 +3755.0 + 30 +0.0 + 0 +SEQEND + 5 +2108 + 8 +BEMASSUNG + 0 +POLYLINE + 5 +18BF + 8 +BEMASSUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2109 + 8 +BEMASSUNG + 10 +9200.0 + 20 +1765.0 + 30 +0.0 + 0 +VERTEX + 5 +210A + 8 +BEMASSUNG + 10 +8620.0 + 20 +1765.0 + 30 +0.0 + 0 +VERTEX + 5 +210B + 8 +BEMASSUNG + 10 +8620.0 + 20 +2490.0 + 30 +0.0 + 0 +VERTEX + 5 +210C + 8 +BEMASSUNG + 10 +7825.0 + 20 +2490.0 + 30 +0.0 + 0 +VERTEX + 5 +210D + 8 +BEMASSUNG + 10 +7520.0 + 20 +3165.0 + 30 +0.0 + 0 +SEQEND + 5 +210E + 8 +BEMASSUNG + 0 +TEXT + 5 +18C6 + 8 +BEMASSUNG + 10 +6725.0 + 20 +6540.0 + 30 +0.0 + 40 +62.5 + 1 +5 + 41 +0.75 + 0 +TEXT + 5 +18C7 + 8 +BEMASSUNG + 10 +7235.0 + 20 +6540.0 + 30 +0.0 + 40 +62.5 + 1 +5 + 41 +0.75 + 0 +TEXT + 5 +18C8 + 8 +BEMASSUNG + 10 +9735.0 + 20 +5050.0 + 30 +0.0 + 40 +62.5 + 1 +5 + 50 +90.0 + 41 +0.75 + 0 +TEXT + 5 +18C9 + 8 +LEGENDE-70 + 10 +2070.0 + 20 +7065.0 + 30 +0.0 + 40 +175.0 + 1 +KELLERFUSSBODENAUFBAU MIT FUNDAMENTENANSCHLUSS + 41 +0.75 + 0 +TEXT + 5 +18CA + 8 +LEGENDE-70 + 10 +2050.0 + 20 +14040.0 + 30 +0.0 + 40 +175.0 + 1 +GESCHOSSDECKENANSCHLUSS ÜBER KELLERGESCHOSS + 41 +0.75 + 0 +TEXT + 5 +18CB + 8 +LEGENDE-70 + 10 +7920.0 + 20 +14035.0 + 30 +0.0 + 40 +87.5 + 1 +M 1:10 + 41 +0.75 + 0 +TEXT + 5 +18CC + 8 +LEGENDE-70 + 10 +8240.0 + 20 +7065.0 + 30 +0.0 + 40 +87.5 + 1 +M 1:10 + 41 +0.75 + 0 +TEXT + 5 +18CD + 8 +LEGENDE-70 + 10 +12515.0 + 20 +11935.0 + 30 +0.0 + 40 +175.0 + 1 +LEICHTE TRENNWAND MIT FUSSBODEN- UND DECKENANSCHLUSS + 41 +0.75 + 0 +POLYLINE + 5 +18CE + 8 +DAEMMUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +210F + 8 +DAEMMUNG + 10 +15727.274018 + 20 +10310.0 + 30 +0.0 + 0 +VERTEX + 5 +2110 + 8 +DAEMMUNG + 10 +16352.274018 + 20 +10310.0 + 30 +0.0 + 0 +VERTEX + 5 +2111 + 8 +DAEMMUNG + 10 +16352.274018 + 20 +10260.0 + 30 +0.0 + 0 +VERTEX + 5 +2112 + 8 +DAEMMUNG + 10 +15727.274018 + 20 +10260.0 + 30 +0.0 + 0 +SEQEND + 5 +2113 + 8 +DAEMMUNG + 0 +POLYLINE + 5 +18D4 + 8 +TRENNWAND + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2114 + 8 +TRENNWAND + 10 +15812.274018 + 20 +10135.0 + 30 +0.0 + 0 +VERTEX + 5 +2115 + 8 +TRENNWAND + 10 +15812.274018 + 20 +10245.0 + 30 +0.0 + 0 +VERTEX + 5 +2116 + 8 +TRENNWAND + 10 +16267.274018 + 20 +10245.0 + 30 +0.0 + 0 +VERTEX + 5 +2117 + 8 +TRENNWAND + 10 +16267.274018 + 20 +10140.0 + 30 +0.0 + 0 +SEQEND + 5 +2118 + 8 +TRENNWAND + 0 +POLYLINE + 5 +18DA + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2119 + 8 +DRAHTANKER + 10 +16022.274018 + 20 +10240.0 + 30 +0.0 + 0 +VERTEX + 5 +211A + 8 +DRAHTANKER + 10 +16022.274018 + 20 +10285.0 + 30 +0.0 + 0 +SEQEND + 5 +211B + 8 +DRAHTANKER + 0 +POLYLINE + 5 +18DE + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +211C + 8 +DRAHTANKER + 10 +16022.274018 + 20 +10300.0 + 30 +0.0 + 0 +VERTEX + 5 +211D + 8 +DRAHTANKER + 10 +16022.274018 + 20 +10345.0 + 30 +0.0 + 0 +SEQEND + 5 +211E + 8 +DRAHTANKER + 0 +POLYLINE + 5 +18E2 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +211F + 8 +DRAHTANKER + 10 +16022.274018 + 20 +10370.0 + 30 +0.0 + 0 +VERTEX + 5 +2120 + 8 +DRAHTANKER + 10 +16022.274018 + 20 +10415.0 + 30 +0.0 + 0 +SEQEND + 5 +2121 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +18E6 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2122 + 8 +DRAHTANKER + 10 +16022.274018 + 20 +10445.0 + 30 +0.0 + 0 +VERTEX + 5 +2123 + 8 +DRAHTANKER + 10 +16022.274018 + 20 +10495.0 + 30 +0.0 + 0 +SEQEND + 5 +2124 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +18EA + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2125 + 8 +DRAHTANKER + 10 +16022.274018 + 20 +10520.0 + 30 +0.0 + 0 +VERTEX + 5 +2126 + 8 +DRAHTANKER + 10 +16022.274018 + 20 +10560.0 + 30 +0.0 + 0 +SEQEND + 5 +2127 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +18EE + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2128 + 8 +DRAHTANKER + 10 +16022.274018 + 20 +10245.0 + 30 +0.0 + 0 +VERTEX + 5 +2129 + 8 +DRAHTANKER + 10 +15992.274018 + 20 +10205.0 + 30 +0.0 + 0 +SEQEND + 5 +212A + 8 +DRAHTANKER + 0 +POLYLINE + 5 +18F2 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +212B + 8 +DRAHTANKER + 10 +16022.274018 + 20 +10245.0 + 30 +0.0 + 0 +VERTEX + 5 +212C + 8 +DRAHTANKER + 10 +16052.274018 + 20 +10205.0 + 30 +0.0 + 0 +SEQEND + 5 +212D + 8 +DRAHTANKER + 0 +POLYLINE + 5 +18F6 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +212E + 8 +MAUERWERK + 10 +15727.274018 + 20 +10310.0 + 30 +0.0 + 0 +VERTEX + 5 +212F + 8 +MAUERWERK + 10 +15652.274018 + 20 +10310.0 + 30 +0.0 + 0 +VERTEX + 5 +2130 + 8 +MAUERWERK + 10 +15652.274018 + 20 +10235.0 + 30 +0.0 + 0 +VERTEX + 5 +2131 + 8 +MAUERWERK + 10 +15727.274018 + 20 +10235.0 + 30 +0.0 + 0 +SEQEND + 5 +2132 + 8 +MAUERWERK + 0 +POLYLINE + 5 +18FC + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2133 + 8 +MAUERWERK + 10 +15652.274018 + 20 +10310.0 + 30 +0.0 + 0 +VERTEX + 5 +2134 + 8 +MAUERWERK + 10 +15727.274018 + 20 +10235.0 + 30 +0.0 + 0 +SEQEND + 5 +2135 + 8 +MAUERWERK + 0 +POLYLINE + 5 +1900 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2136 + 8 +MAUERWERK + 10 +15652.274018 + 20 +10235.0 + 30 +0.0 + 0 +VERTEX + 5 +2137 + 8 +MAUERWERK + 10 +15727.274018 + 20 +10310.0 + 30 +0.0 + 0 +SEQEND + 5 +2138 + 8 +MAUERWERK + 0 +POLYLINE + 5 +1904 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2139 + 8 +MAUERWERK + 10 +16427.274018 + 20 +10310.0 + 30 +0.0 + 0 +VERTEX + 5 +213A + 8 +MAUERWERK + 10 +16352.274018 + 20 +10310.0 + 30 +0.0 + 0 +VERTEX + 5 +213B + 8 +MAUERWERK + 10 +16352.274018 + 20 +10235.0 + 30 +0.0 + 0 +VERTEX + 5 +213C + 8 +MAUERWERK + 10 +16427.274018 + 20 +10235.0 + 30 +0.0 + 0 +SEQEND + 5 +213D + 8 +MAUERWERK + 0 +POLYLINE + 5 +190A + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +213E + 8 +MAUERWERK + 10 +16352.274018 + 20 +10235.0 + 30 +0.0 + 0 +VERTEX + 5 +213F + 8 +MAUERWERK + 10 +16427.274018 + 20 +10310.0 + 30 +0.0 + 0 +SEQEND + 5 +2140 + 8 +MAUERWERK + 0 +POLYLINE + 5 +190E + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2141 + 8 +MAUERWERK + 10 +16352.274018 + 20 +10310.0 + 30 +0.0 + 0 +VERTEX + 5 +2142 + 8 +MAUERWERK + 10 +16427.274018 + 20 +10235.0 + 30 +0.0 + 0 +SEQEND + 5 +2143 + 8 +MAUERWERK + 0 +POLYLINE + 5 +1912 + 8 +SCHNITTKANTEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +2144 + 8 +SCHNITTKANTEN + 10 +15527.274018 + 20 +8895.0 + 30 +0.0 + 0 +VERTEX + 5 +2145 + 8 +SCHNITTKANTEN + 10 +16562.274018 + 20 +8895.0 + 30 +0.0 + 0 +SEQEND + 5 +2146 + 8 +SCHNITTKANTEN + 0 +POLYLINE + 5 +1916 + 8 +TRENNWAND + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2147 + 8 +TRENNWAND + 10 +15727.274018 + 20 +10260.0 + 30 +0.0 + 0 +VERTEX + 5 +2148 + 8 +TRENNWAND + 10 +15727.274018 + 20 +8895.0 + 30 +0.0 + 0 +SEQEND + 5 +2149 + 8 +TRENNWAND + 0 +POLYLINE + 5 +191A + 8 +TRENNWAND + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +214A + 8 +TRENNWAND + 10 +15789.774018 + 20 +8895.0 + 30 +0.0 + 0 +VERTEX + 5 +214B + 8 +TRENNWAND + 10 +15789.774018 + 20 +10260.0 + 30 +0.0 + 0 +VERTEX + 5 +214C + 8 +TRENNWAND + 10 +15727.274018 + 20 +10260.0 + 30 +0.0 + 0 +SEQEND + 5 +214D + 8 +TRENNWAND + 0 +POLYLINE + 5 +191F + 8 +TRENNWAND + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +214E + 8 +TRENNWAND + 10 +15822.274018 + 20 +10230.0 + 30 +0.0 + 0 +VERTEX + 5 +214F + 8 +TRENNWAND + 10 +15822.274018 + 20 +8895.0 + 30 +0.0 + 0 +SEQEND + 5 +2150 + 8 +TRENNWAND + 0 +POLYLINE + 5 +1923 + 8 +TRENNWAND + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2151 + 8 +TRENNWAND + 10 +16257.274018 + 20 +10230.0 + 30 +0.0 + 0 +VERTEX + 5 +2152 + 8 +TRENNWAND + 10 +16257.274018 + 20 +8895.0 + 30 +0.0 + 0 +SEQEND + 5 +2153 + 8 +TRENNWAND + 0 +POLYLINE + 5 +1927 + 8 +TRENNWAND + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2154 + 8 +TRENNWAND + 10 +16189.774018 + 20 +10245.0 + 30 +0.0 + 0 +VERTEX + 5 +2155 + 8 +TRENNWAND + 10 +16189.774018 + 20 +8895.0 + 30 +0.0 + 0 +SEQEND + 5 +2156 + 8 +TRENNWAND + 0 +POLYLINE + 5 +192B + 8 +TRENNWAND + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2157 + 8 +TRENNWAND + 10 +16289.774018 + 20 +10260.0 + 30 +0.0 + 0 +VERTEX + 5 +2158 + 8 +TRENNWAND + 10 +16289.774018 + 20 +8895.0 + 30 +0.0 + 0 +SEQEND + 5 +2159 + 8 +TRENNWAND + 0 +POLYLINE + 5 +192F + 8 +TRENNWAND + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +215A + 8 +TRENNWAND + 10 +16352.274018 + 20 +8895.0 + 30 +0.0 + 0 +VERTEX + 5 +215B + 8 +TRENNWAND + 10 +16352.274018 + 20 +10260.0 + 30 +0.0 + 0 +VERTEX + 5 +215C + 8 +TRENNWAND + 10 +16289.774018 + 20 +10260.0 + 30 +0.0 + 0 +SEQEND + 5 +215D + 8 +TRENNWAND + 0 +POLYLINE + 5 +1934 + 8 +SCHNITTKANTEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +215E + 8 +SCHNITTKANTEN + 10 +14679.649752 + 20 +11227.792194 + 30 +0.0 + 0 +VERTEX + 5 +215F + 8 +SCHNITTKANTEN + 10 +14679.649752 + 20 +10053.885464 + 30 +0.0 + 0 +SEQEND + 5 +2160 + 8 +SCHNITTKANTEN + 0 +POLYLINE + 5 +1938 + 8 +SCHNITTKANTEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +2161 + 8 +SCHNITTKANTEN + 10 +17292.266155 + 20 +11231.666484 + 30 +0.0 + 0 +VERTEX + 5 +2162 + 8 +SCHNITTKANTEN + 10 +17292.266155 + 20 +10057.759754 + 30 +0.0 + 0 +SEQEND + 5 +2163 + 8 +SCHNITTKANTEN + 0 +POLYLINE + 5 +193C + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2164 + 8 +MAUERWERK + 10 +14679.649752 + 20 +10235.0 + 30 +0.0 + 0 +VERTEX + 5 +2165 + 8 +MAUERWERK + 10 +15727.274018 + 20 +10235.0 + 30 +0.0 + 0 +SEQEND + 5 +2166 + 8 +MAUERWERK + 0 +POLYLINE + 5 +1940 + 8 +DECKEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +2167 + 8 +DECKEN + 10 +14679.649752 + 20 +11110.0 + 30 +0.0 + 0 +VERTEX + 5 +2168 + 8 +DECKEN + 10 +17292.266155 + 20 +11110.0 + 30 +0.0 + 0 +SEQEND + 5 +2169 + 8 +DECKEN + 0 +POLYLINE + 5 +1944 + 8 +DECKEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +216A + 8 +DECKEN + 10 +17292.266155 + 20 +10310.0 + 30 +0.0 + 0 +VERTEX + 5 +216B + 8 +DECKEN + 10 +14679.649752 + 20 +10310.0 + 30 +0.0 + 0 +SEQEND + 5 +216C + 8 +DECKEN + 0 +POLYLINE + 5 +1948 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +216D + 8 +MAUERWERK + 10 +16352.274018 + 20 +10235.0 + 30 +0.0 + 0 +VERTEX + 5 +216E + 8 +MAUERWERK + 10 +17292.266155 + 20 +10235.0 + 30 +0.0 + 0 +SEQEND + 5 +216F + 8 +MAUERWERK + 0 +POLYLINE + 5 +194C + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2170 + 8 +MAUERWERK + 10 +17292.266155 + 20 +10310.0 + 30 +0.0 + 0 +VERTEX + 5 +2171 + 8 +MAUERWERK + 10 +14679.649752 + 20 +10310.0 + 30 +0.0 + 0 +SEQEND + 5 +2172 + 8 +MAUERWERK + 0 +POLYLINE + 5 +1950 + 8 +TRENNWAND + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2173 + 8 +TRENNWAND + 10 +15727.274018 + 20 +8930.0 + 30 +0.0 + 0 +VERTEX + 5 +2174 + 8 +TRENNWAND + 10 +15727.274018 + 20 +10295.0 + 30 +0.0 + 0 +SEQEND + 5 +2175 + 8 +TRENNWAND + 0 +POLYLINE + 5 +1954 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2176 + 8 +DRAHTANKER + 10 +16022.274018 + 20 +6670.0 + 30 +0.0 + 0 +VERTEX + 5 +2177 + 8 +DRAHTANKER + 10 +16022.274018 + 20 +6630.0 + 30 +0.0 + 0 +SEQEND + 5 +2178 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1958 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2179 + 8 +DRAHTANKER + 10 +16022.274018 + 20 +6945.0 + 30 +0.0 + 0 +VERTEX + 5 +217A + 8 +DRAHTANKER + 10 +16052.274018 + 20 +6985.0 + 30 +0.0 + 0 +SEQEND + 5 +217B + 8 +DRAHTANKER + 0 +POLYLINE + 5 +195C + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +217C + 8 +DRAHTANKER + 10 +16022.274018 + 20 +6945.0 + 30 +0.0 + 0 +VERTEX + 5 +217D + 8 +DRAHTANKER + 10 +15992.274018 + 20 +6985.0 + 30 +0.0 + 0 +SEQEND + 5 +217E + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1960 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +217F + 8 +DRAHTANKER + 10 +16022.274018 + 20 +6745.0 + 30 +0.0 + 0 +VERTEX + 5 +2180 + 8 +DRAHTANKER + 10 +16022.274018 + 20 +6695.0 + 30 +0.0 + 0 +SEQEND + 5 +2181 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1964 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2182 + 8 +DRAHTANKER + 10 +16022.274018 + 20 +6820.0 + 30 +0.0 + 0 +VERTEX + 5 +2183 + 8 +DRAHTANKER + 10 +16022.274018 + 20 +6775.0 + 30 +0.0 + 0 +SEQEND + 5 +2184 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1968 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2185 + 8 +DRAHTANKER + 10 +16022.274018 + 20 +6890.0 + 30 +0.0 + 0 +VERTEX + 5 +2186 + 8 +DRAHTANKER + 10 +16022.274018 + 20 +6845.0 + 30 +0.0 + 0 +SEQEND + 5 +2187 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +196C + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2188 + 8 +DRAHTANKER + 10 +16022.274018 + 20 +6950.0 + 30 +0.0 + 0 +VERTEX + 5 +2189 + 8 +DRAHTANKER + 10 +16022.274018 + 20 +6905.0 + 30 +0.0 + 0 +SEQEND + 5 +218A + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1970 + 8 +DAEMMUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +218B + 8 +DAEMMUNG + 10 +15727.274018 + 20 +6880.0 + 30 +0.0 + 0 +VERTEX + 5 +218C + 8 +DAEMMUNG + 10 +16352.274018 + 20 +6880.0 + 30 +0.0 + 0 +VERTEX + 5 +218D + 8 +DAEMMUNG + 10 +16352.274018 + 20 +6930.0 + 30 +0.0 + 0 +VERTEX + 5 +218E + 8 +DAEMMUNG + 10 +15727.274018 + 20 +6930.0 + 30 +0.0 + 0 +SEQEND + 5 +218F + 8 +DAEMMUNG + 0 +POLYLINE + 5 +1976 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2190 + 8 +MAUERWERK + 10 +17292.266155 + 20 +6880.0 + 30 +0.0 + 0 +VERTEX + 5 +2191 + 8 +MAUERWERK + 10 +14679.649752 + 20 +6880.0 + 30 +0.0 + 0 +SEQEND + 5 +2192 + 8 +MAUERWERK + 0 +POLYLINE + 5 +197A + 8 +DECKEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +2193 + 8 +DECKEN + 10 +17292.266155 + 20 +6880.0 + 30 +0.0 + 0 +VERTEX + 5 +2194 + 8 +DECKEN + 10 +14679.649752 + 20 +6880.0 + 30 +0.0 + 0 +SEQEND + 5 +2195 + 8 +DECKEN + 0 +POLYLINE + 5 +197E + 8 +SCHNITTKANTEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +2196 + 8 +SCHNITTKANTEN + 10 +17292.266155 + 20 +5958.333516 + 30 +0.0 + 0 +VERTEX + 5 +2197 + 8 +SCHNITTKANTEN + 10 +17292.266155 + 20 +7585.0 + 30 +0.0 + 0 +SEQEND + 5 +2198 + 8 +SCHNITTKANTEN + 0 +POLYLINE + 5 +1982 + 8 +SCHNITTKANTEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +2199 + 8 +SCHNITTKANTEN + 10 +14679.649752 + 20 +5962.207806 + 30 +0.0 + 0 +VERTEX + 5 +219A + 8 +SCHNITTKANTEN + 10 +14679.649752 + 20 +7580.0 + 30 +0.0 + 0 +SEQEND + 5 +219B + 8 +SCHNITTKANTEN + 0 +POLYLINE + 5 +1986 + 8 +DECKEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +219C + 8 +DECKEN + 10 +14679.649752 + 20 +6080.0 + 30 +0.0 + 0 +VERTEX + 5 +219D + 8 +DECKEN + 10 +17292.266155 + 20 +6080.0 + 30 +0.0 + 0 +SEQEND + 5 +219E + 8 +DECKEN + 0 +POLYLINE + 5 +198A + 8 +TRENNWAND + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +219F + 8 +TRENNWAND + 10 +15727.274018 + 20 +8300.0 + 30 +0.0 + 0 +VERTEX + 5 +21A0 + 8 +TRENNWAND + 10 +15727.274018 + 20 +6930.0 + 30 +0.0 + 0 +SEQEND + 5 +21A1 + 8 +TRENNWAND + 0 +POLYLINE + 5 +198E + 8 +TRENNWAND + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21A2 + 8 +TRENNWAND + 10 +15822.274018 + 20 +6960.0 + 30 +0.0 + 0 +VERTEX + 5 +21A3 + 8 +TRENNWAND + 10 +15822.274018 + 20 +8295.0 + 30 +0.0 + 0 +SEQEND + 5 +21A4 + 8 +TRENNWAND + 0 +POLYLINE + 5 +1992 + 8 +TRENNWAND + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21A5 + 8 +TRENNWAND + 10 +15789.774018 + 20 +8295.0 + 30 +0.0 + 0 +VERTEX + 5 +21A6 + 8 +TRENNWAND + 10 +15789.774018 + 20 +6930.0 + 30 +0.0 + 0 +VERTEX + 5 +21A7 + 8 +TRENNWAND + 10 +15727.274018 + 20 +6930.0 + 30 +0.0 + 0 +SEQEND + 5 +21A8 + 8 +TRENNWAND + 0 +POLYLINE + 5 +1997 + 8 +TRENNWAND + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21A9 + 8 +TRENNWAND + 10 +16189.774018 + 20 +6945.0 + 30 +0.0 + 0 +VERTEX + 5 +21AA + 8 +TRENNWAND + 10 +16189.774018 + 20 +8295.0 + 30 +0.0 + 0 +SEQEND + 5 +21AB + 8 +TRENNWAND + 0 +POLYLINE + 5 +199B + 8 +TRENNWAND + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21AC + 8 +TRENNWAND + 10 +16257.274018 + 20 +6960.0 + 30 +0.0 + 0 +VERTEX + 5 +21AD + 8 +TRENNWAND + 10 +16257.274018 + 20 +8295.0 + 30 +0.0 + 0 +SEQEND + 5 +21AE + 8 +TRENNWAND + 0 +POLYLINE + 5 +199F + 8 +TRENNWAND + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21AF + 8 +TRENNWAND + 10 +16289.774018 + 20 +6930.0 + 30 +0.0 + 0 +VERTEX + 5 +21B0 + 8 +TRENNWAND + 10 +16289.774018 + 20 +8295.0 + 30 +0.0 + 0 +SEQEND + 5 +21B1 + 8 +TRENNWAND + 0 +POLYLINE + 5 +19A3 + 8 +TRENNWAND + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21B2 + 8 +TRENNWAND + 10 +16352.274018 + 20 +8295.0 + 30 +0.0 + 0 +VERTEX + 5 +21B3 + 8 +TRENNWAND + 10 +16352.274018 + 20 +6930.0 + 30 +0.0 + 0 +VERTEX + 5 +21B4 + 8 +TRENNWAND + 10 +16289.774018 + 20 +6930.0 + 30 +0.0 + 0 +SEQEND + 5 +21B5 + 8 +TRENNWAND + 0 +POLYLINE + 5 +19A8 + 8 +SCHNITTKANTEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +21B6 + 8 +SCHNITTKANTEN + 10 +15527.274018 + 20 +8295.0 + 30 +0.0 + 0 +VERTEX + 5 +21B7 + 8 +SCHNITTKANTEN + 10 +16562.274018 + 20 +8295.0 + 30 +0.0 + 0 +SEQEND + 5 +21B8 + 8 +SCHNITTKANTEN + 0 +POLYLINE + 5 +19AC + 8 +TRENNWAND + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21B9 + 8 +TRENNWAND + 10 +15812.274018 + 20 +7055.0 + 30 +0.0 + 0 +VERTEX + 5 +21BA + 8 +TRENNWAND + 10 +15812.274018 + 20 +6945.0 + 30 +0.0 + 0 +VERTEX + 5 +21BB + 8 +TRENNWAND + 10 +16267.274018 + 20 +6945.0 + 30 +0.0 + 0 +VERTEX + 5 +21BC + 8 +TRENNWAND + 10 +16267.274018 + 20 +7050.0 + 30 +0.0 + 0 +SEQEND + 5 +21BD + 8 +TRENNWAND + 0 +POLYLINE + 5 +19B2 + 8 +DAEMMUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21BE + 8 +DAEMMUNG + 10 +16352.274018 + 20 +6880.0 + 30 +0.0 + 0 +VERTEX + 5 +21BF + 8 +DAEMMUNG + 10 +16452.274018 + 20 +6880.0 + 30 +0.0 + 0 +VERTEX + 5 +21C0 + 8 +DAEMMUNG + 10 +16452.274018 + 20 +7330.0 + 30 +0.0 + 0 +VERTEX + 5 +21C1 + 8 +DAEMMUNG + 10 +16352.274018 + 20 +7330.0 + 30 +0.0 + 0 +SEQEND + 5 +21C2 + 8 +DAEMMUNG + 0 +POLYLINE + 5 +19B8 + 8 +DAEMMUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21C3 + 8 +DAEMMUNG + 10 +15627.274018 + 20 +6880.0 + 30 +0.0 + 0 +VERTEX + 5 +21C4 + 8 +DAEMMUNG + 10 +15727.274018 + 20 +6880.0 + 30 +0.0 + 0 +VERTEX + 5 +21C5 + 8 +DAEMMUNG + 10 +15727.274018 + 20 +7330.0 + 30 +0.0 + 0 +VERTEX + 5 +21C6 + 8 +DAEMMUNG + 10 +15627.274018 + 20 +7330.0 + 30 +0.0 + 0 +SEQEND + 5 +21C7 + 8 +DAEMMUNG + 0 +POLYLINE + 5 +19BE + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +21C8 + 8 +DRAHTANKER + 10 +15727.274018 + 20 +9630.0 + 30 +0.0 + 0 +VERTEX + 5 +21C9 + 8 +DRAHTANKER + 10 +15802.274018 + 20 +9630.0 + 30 +0.0 + 0 +SEQEND + 5 +21CA + 8 +DRAHTANKER + 0 +POLYLINE + 5 +19C2 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +21CB + 8 +DRAHTANKER + 10 +15827.274018 + 20 +9630.0 + 30 +0.0 + 0 +VERTEX + 5 +21CC + 8 +DRAHTANKER + 10 +15862.274018 + 20 +9630.0 + 30 +0.0 + 0 +SEQEND + 5 +21CD + 8 +DRAHTANKER + 0 +POLYLINE + 5 +19C6 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +21CE + 8 +DRAHTANKER + 10 +15827.274018 + 20 +9375.0 + 30 +0.0 + 0 +VERTEX + 5 +21CF + 8 +DRAHTANKER + 10 +15862.274018 + 20 +9375.0 + 30 +0.0 + 0 +SEQEND + 5 +21D0 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +19CA + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +21D1 + 8 +DRAHTANKER + 10 +15727.274018 + 20 +9375.0 + 30 +0.0 + 0 +VERTEX + 5 +21D2 + 8 +DRAHTANKER + 10 +15802.274018 + 20 +9375.0 + 30 +0.0 + 0 +SEQEND + 5 +21D3 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +19CE + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +21D4 + 8 +DRAHTANKER + 10 +15827.274018 + 20 +9120.0 + 30 +0.0 + 0 +VERTEX + 5 +21D5 + 8 +DRAHTANKER + 10 +15862.274018 + 20 +9120.0 + 30 +0.0 + 0 +SEQEND + 5 +21D6 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +19D2 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +21D7 + 8 +DRAHTANKER + 10 +15727.274018 + 20 +9120.0 + 30 +0.0 + 0 +VERTEX + 5 +21D8 + 8 +DRAHTANKER + 10 +15802.274018 + 20 +9120.0 + 30 +0.0 + 0 +SEQEND + 5 +21D9 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +19D6 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21DA + 8 +DRAHTANKER + 10 +16502.274018 + 20 +7455.0 + 30 +0.0 + 0 +VERTEX + 5 +21DB + 8 +DRAHTANKER + 10 +16502.274018 + 20 +7755.0 + 30 +0.0 + 0 +VERTEX + 5 +21DC + 8 +DRAHTANKER + 10 +16352.274018 + 20 +7855.0 + 30 +0.0 + 0 +VERTEX + 5 +21DD + 8 +DRAHTANKER + 10 +16352.274018 + 20 +7555.0 + 30 +0.0 + 0 +SEQEND + 5 +21DE + 8 +DRAHTANKER + 0 +POLYLINE + 5 +19DC + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21DF + 8 +DRAHTANKER + 10 +15577.274018 + 20 +7455.0 + 30 +0.0 + 0 +VERTEX + 5 +21E0 + 8 +DRAHTANKER + 10 +15577.274018 + 20 +7755.0 + 30 +0.0 + 0 +VERTEX + 5 +21E1 + 8 +DRAHTANKER + 10 +15727.274018 + 20 +7855.0 + 30 +0.0 + 0 +VERTEX + 5 +21E2 + 8 +DRAHTANKER + 10 +15727.274018 + 20 +7555.0 + 30 +0.0 + 0 +SEQEND + 5 +21E3 + 8 +DRAHTANKER + 0 +INSERT + 5 +19E2 + 8 +SCHRAFFUR + 2 +*X51 + 10 +727.274018 + 20 +-2105.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI33,I +1040 +2100.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +19E3 + 8 +SCHRAFFUR + 2 +*X54 + 10 +727.274018 + 20 +-2105.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +HONEY,I +1040 +150.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +19E4 + 8 +SCHRAFFUR + 2 +*X57 + 10 +727.274018 + 20 +-2105.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +HONEY,I +1040 +200.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +19E5 + 8 +SCHRAFFUR + 2 +*X67 + 10 +727.274018 + 20 +-2105.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +DASH,I +1040 +600.0 +1040 +0.785398 +1002 +} + 0 +POLYLINE + 5 +19E6 + 8 +SCHRAFFUR + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +19E7 + 8 +SCHRAFFUR + 10 +16462.274018 + 20 +7485.0 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +19E8 + 8 +SCHRAFFUR + 10 +16462.274018 + 20 +7485.0 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +19E9 + 8 +SCHRAFFUR + 10 +16462.277126 + 20 +7488.961798 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +19EA + 8 +SCHRAFFUR + 10 +16462.298881 + 20 +7493.256886 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +19EB + 8 +SCHRAFFUR + 10 +16462.357931 + 20 +7497.749801 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +19EC + 8 +SCHRAFFUR + 10 +16462.472923 + 20 +7502.305084 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +19ED + 8 +SCHRAFFUR + 10 +16462.662505 + 20 +7506.787274 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +19EE + 8 +SCHRAFFUR + 10 +16462.945324 + 20 +7511.060909 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +19EF + 8 +SCHRAFFUR + 10 +16463.340027 + 20 +7514.990529 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +19F0 + 8 +SCHRAFFUR + 10 +16463.865262 + 20 +7518.440674 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +19F1 + 8 +SCHRAFFUR + 10 +16464.539325 + 20 +7521.311501 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +19F2 + 8 +SCHRAFFUR + 10 +16465.379105 + 20 +7523.645652 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +19F3 + 8 +SCHRAFFUR + 10 +16466.401141 + 20 +7525.521386 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +19F4 + 8 +SCHRAFFUR + 10 +16467.621973 + 20 +7527.016964 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +19F5 + 8 +SCHRAFFUR + 10 +16469.058137 + 20 +7528.210645 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +19F6 + 8 +SCHRAFFUR + 10 +16470.726174 + 20 +7529.18069 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +19F7 + 8 +SCHRAFFUR + 10 +16472.642621 + 20 +7530.005359 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +19F8 + 8 +SCHRAFFUR + 10 +16474.824016 + 20 +7530.762911 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +19F9 + 8 +SCHRAFFUR + 10 +16477.28242 + 20 +7531.562481 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +19FA + 8 +SCHRAFFUR + 10 +16480.011972 + 20 +7532.636691 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +19FB + 8 +SCHRAFFUR + 10 +16483.002335 + 20 +7534.249039 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +19FC + 8 +SCHRAFFUR + 10 +16486.243169 + 20 +7536.663021 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +19FD + 8 +SCHRAFFUR + 10 +16489.724136 + 20 +7540.142135 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +19FE + 8 +SCHRAFFUR + 10 +16493.434897 + 20 +7544.949876 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +19FF + 8 +SCHRAFFUR + 10 +16497.365113 + 20 +7551.349741 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A00 + 8 +SCHRAFFUR + 10 +16501.504446 + 20 +7559.605228 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A01 + 8 +SCHRAFFUR + 10 +16462.274018 + 20 +7495.0 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A02 + 8 +SCHRAFFUR + 10 +16462.274018 + 20 +7525.0 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A03 + 8 +SCHRAFFUR + 10 +16471.821483 + 20 +7530.644041 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A04 + 8 +SCHRAFFUR + 10 +16490.196592 + 20 +7534.882215 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A05 + 8 +SCHRAFFUR + 10 +16501.504446 + 20 +7559.605228 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1A06 + 8 +SCHRAFFUR + 0 +POLYLINE + 5 +1A07 + 8 +SCHRAFFUR + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +1A08 + 8 +SCHRAFFUR + 10 +16418.816237 + 20 +7511.571982 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A09 + 8 +SCHRAFFUR + 10 +16418.816237 + 20 +7511.571982 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A0A + 8 +SCHRAFFUR + 10 +16426.410206 + 20 +7528.650092 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A0B + 8 +SCHRAFFUR + 10 +16433.7847 + 20 +7543.49941 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A0C + 8 +SCHRAFFUR + 10 +16440.885887 + 20 +7556.374477 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A0D + 8 +SCHRAFFUR + 10 +16447.659932 + 20 +7567.529834 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A0E + 8 +SCHRAFFUR + 10 +16454.053002 + 20 +7577.220024 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A0F + 8 +SCHRAFFUR + 10 +16460.011262 + 20 +7585.699586 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A10 + 8 +SCHRAFFUR + 10 +16465.480881 + 20 +7593.223064 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A11 + 8 +SCHRAFFUR + 10 +16470.408024 + 20 +7600.044997 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A12 + 8 +SCHRAFFUR + 10 +16474.776126 + 20 +7606.425446 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A13 + 8 +SCHRAFFUR + 10 +16478.717701 + 20 +7612.646547 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A14 + 8 +SCHRAFFUR + 10 +16482.40253 + 20 +7618.995953 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A15 + 8 +SCHRAFFUR + 10 +16486.000396 + 20 +7625.761318 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A16 + 8 +SCHRAFFUR + 10 +16489.68108 + 20 +7633.230297 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A17 + 8 +SCHRAFFUR + 10 +16493.614364 + 20 +7641.690543 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A18 + 8 +SCHRAFFUR + 10 +16497.970031 + 20 +7651.429711 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A19 + 8 +SCHRAFFUR + 10 +16502.917862 + 20 +7662.735455 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A1A + 8 +SCHRAFFUR + 10 +16439.311601 + 20 +7560.311591 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A1B + 8 +SCHRAFFUR + 10 +16476.768659 + 20 +7604.813025 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A1C + 8 +SCHRAFFUR + 10 +16488.783176 + 20 +7630.242346 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A1D + 8 +SCHRAFFUR + 10 +16502.917862 + 20 +7662.735455 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1A1E + 8 +SCHRAFFUR + 0 +POLYLINE + 5 +1A1F + 8 +SCHRAFFUR + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +1A20 + 8 +SCHRAFFUR + 10 +16383.479347 + 20 +7540.533224 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A21 + 8 +SCHRAFFUR + 10 +16383.479347 + 20 +7540.533224 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A22 + 8 +SCHRAFFUR + 10 +16390.766645 + 20 +7563.954186 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A23 + 8 +SCHRAFFUR + 10 +16397.783397 + 20 +7581.35099 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A24 + 8 +SCHRAFFUR + 10 +16404.524082 + 20 +7593.685928 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A25 + 8 +SCHRAFFUR + 10 +16410.983179 + 20 +7601.921293 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A26 + 8 +SCHRAFFUR + 10 +16417.155165 + 20 +7607.019377 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A27 + 8 +SCHRAFFUR + 10 +16423.034519 + 20 +7609.942473 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A28 + 8 +SCHRAFFUR + 10 +16428.615719 + 20 +7611.652874 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A29 + 8 +SCHRAFFUR + 10 +16433.893244 + 20 +7613.11287 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A2A + 8 +SCHRAFFUR + 10 +16438.868473 + 20 +7615.112992 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A2B + 8 +SCHRAFFUR + 10 +16443.570394 + 20 +7617.756711 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A2C + 8 +SCHRAFFUR + 10 +16448.034896 + 20 +7620.975736 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A2D + 8 +SCHRAFFUR + 10 +16452.297867 + 20 +7624.701775 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A2E + 8 +SCHRAFFUR + 10 +16456.395196 + 20 +7628.866536 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A2F + 8 +SCHRAFFUR + 10 +16460.362773 + 20 +7633.401728 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A30 + 8 +SCHRAFFUR + 10 +16464.236484 + 20 +7638.239059 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A31 + 8 +SCHRAFFUR + 10 +16468.052221 + 20 +7643.310237 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A32 + 8 +SCHRAFFUR + 10 +16471.850011 + 20 +7648.557664 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A33 + 8 +SCHRAFFUR + 10 +16475.686451 + 20 +7653.966508 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A34 + 8 +SCHRAFFUR + 10 +16479.622273 + 20 +7659.532629 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A35 + 8 +SCHRAFFUR + 10 +16483.718214 + 20 +7665.251891 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A36 + 8 +SCHRAFFUR + 10 +16488.035008 + 20 +7671.120153 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A37 + 8 +SCHRAFFUR + 10 +16492.633391 + 20 +7677.133277 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A38 + 8 +SCHRAFFUR + 10 +16497.574097 + 20 +7683.287124 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A39 + 8 +SCHRAFFUR + 10 +16502.917862 + 20 +7689.577555 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A3A + 8 +SCHRAFFUR + 10 +16403.26796 + 20 +7611.876704 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A3B + 8 +SCHRAFFUR + 10 +16437.191346 + 20 +7605.519388 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A3C + 8 +SCHRAFFUR + 10 +16468.287812 + 20 +7641.544309 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A3D + 8 +SCHRAFFUR + 10 +16488.076424 + 20 +7672.624638 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A3E + 8 +SCHRAFFUR + 10 +16502.917862 + 20 +7689.577555 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1A3F + 8 +SCHRAFFUR + 0 +POLYLINE + 5 +1A40 + 8 +SCHRAFFUR + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +1A41 + 8 +SCHRAFFUR + 10 +16353.796385 + 20 +7611.876704 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A42 + 8 +SCHRAFFUR + 10 +16353.796385 + 20 +7611.876704 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A43 + 8 +SCHRAFFUR + 10 +16364.119068 + 20 +7623.149898 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A44 + 8 +SCHRAFFUR + 10 +16373.4341 + 20 +7633.191084 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A45 + 8 +SCHRAFFUR + 10 +16381.860191 + 20 +7642.092697 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A46 + 8 +SCHRAFFUR + 10 +16389.516049 + 20 +7649.947172 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A47 + 8 +SCHRAFFUR + 10 +16396.520385 + 20 +7656.846943 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A48 + 8 +SCHRAFFUR + 10 +16402.991908 + 20 +7662.884445 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A49 + 8 +SCHRAFFUR + 10 +16409.049327 + 20 +7668.152112 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A4A + 8 +SCHRAFFUR + 10 +16414.811354 + 20 +7672.742379 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A4B + 8 +SCHRAFFUR + 10 +16420.378062 + 20 +7676.748371 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A4C + 8 +SCHRAFFUR + 10 +16425.774987 + 20 +7680.265971 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A4D + 8 +SCHRAFFUR + 10 +16431.009031 + 20 +7683.391755 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A4E + 8 +SCHRAFFUR + 10 +16436.087095 + 20 +7686.222298 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A4F + 8 +SCHRAFFUR + 10 +16441.016081 + 20 +7688.854172 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A50 + 8 +SCHRAFFUR + 10 +16445.80289 + 20 +7691.383953 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A51 + 8 +SCHRAFFUR + 10 +16450.454424 + 20 +7693.908216 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A52 + 8 +SCHRAFFUR + 10 +16454.977582 + 20 +7696.523534 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A53 + 8 +SCHRAFFUR + 10 +16459.409636 + 20 +7699.310617 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A54 + 8 +SCHRAFFUR + 10 +16463.909325 + 20 +7702.286709 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A55 + 8 +SCHRAFFUR + 10 +16468.665758 + 20 +7705.453192 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A56 + 8 +SCHRAFFUR + 10 +16473.868042 + 20 +7708.811444 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A57 + 8 +SCHRAFFUR + 10 +16479.705286 + 20 +7712.362846 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A58 + 8 +SCHRAFFUR + 10 +16486.366599 + 20 +7716.108778 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A59 + 8 +SCHRAFFUR + 10 +16494.041088 + 20 +7720.05062 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A5A + 8 +SCHRAFFUR + 10 +16502.917862 + 20 +7724.189751 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A5B + 8 +SCHRAFFUR + 10 +16382.772596 + 20 +7643.663396 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A5C + 8 +SCHRAFFUR + 10 +16416.695981 + 20 +7678.982009 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A5D + 8 +SCHRAFFUR + 10 +16456.273294 + 20 +7694.522147 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A5E + 8 +SCHRAFFUR + 10 +16477.475322 + 20 +7712.887788 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A5F + 8 +SCHRAFFUR + 10 +16502.917862 + 20 +7724.189751 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1A60 + 8 +SCHRAFFUR + 0 +POLYLINE + 5 +1A61 + 8 +SCHRAFFUR + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +1A62 + 8 +SCHRAFFUR + 10 +16355.209889 + 20 +7680.394734 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A63 + 8 +SCHRAFFUR + 10 +16355.209889 + 20 +7680.394734 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A64 + 8 +SCHRAFFUR + 10 +16370.368495 + 20 +7686.158137 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A65 + 8 +SCHRAFFUR + 10 +16382.328152 + 20 +7692.198847 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A66 + 8 +SCHRAFFUR + 10 +16391.699663 + 20 +7698.330615 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A67 + 8 +SCHRAFFUR + 10 +16399.09383 + 20 +7704.367189 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A68 + 8 +SCHRAFFUR + 10 +16405.121456 + 20 +7710.122319 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A69 + 8 +SCHRAFFUR + 10 +16410.393344 + 20 +7715.409755 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A6A + 8 +SCHRAFFUR + 10 +16415.520296 + 20 +7720.043246 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A6B + 8 +SCHRAFFUR + 10 +16421.113115 + 20 +7723.836542 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A6C + 8 +SCHRAFFUR + 10 +16427.643188 + 20 +7726.713763 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A6D + 8 +SCHRAFFUR + 10 +16435.024244 + 20 +7729.040512 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A6E + 8 +SCHRAFFUR + 10 +16443.030596 + 20 +7731.292761 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A6F + 8 +SCHRAFFUR + 10 +16451.436557 + 20 +7733.946485 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A70 + 8 +SCHRAFFUR + 10 +16460.01644 + 20 +7737.477655 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A71 + 8 +SCHRAFFUR + 10 +16468.544559 + 20 +7742.362247 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A72 + 8 +SCHRAFFUR + 10 +16476.795225 + 20 +7749.076232 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A73 + 8 +SCHRAFFUR + 10 +16484.542753 + 20 +7758.095585 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A74 + 8 +SCHRAFFUR + 10 +16400.44104 + 20 +7695.228509 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A75 + 8 +SCHRAFFUR + 10 +16409.628639 + 20 +7734.785297 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A76 + 8 +SCHRAFFUR + 10 +16464.754141 + 20 +7730.547067 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A77 + 8 +SCHRAFFUR + 10 +16484.542753 + 20 +7758.095585 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1A78 + 8 +SCHRAFFUR + 0 +POLYLINE + 5 +1A79 + 8 +SCHRAFFUR + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +1A7A + 8 +SCHRAFFUR + 10 +16349.555962 + 20 +7746.793622 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A7B + 8 +SCHRAFFUR + 10 +16349.555962 + 20 +7746.793622 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A7C + 8 +SCHRAFFUR + 10 +16362.461508 + 20 +7750.373419 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A7D + 8 +SCHRAFFUR + 10 +16372.828598 + 20 +7754.174648 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A7E + 8 +SCHRAFFUR + 10 +16381.067195 + 20 +7758.120739 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A7F + 8 +SCHRAFFUR + 10 +16387.58726 + 20 +7762.135122 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A80 + 8 +SCHRAFFUR + 10 +16392.798757 + 20 +7766.141228 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A81 + 8 +SCHRAFFUR + 10 +16397.111649 + 20 +7770.062486 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A82 + 8 +SCHRAFFUR + 10 +16400.935897 + 20 +7773.822326 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A83 + 8 +SCHRAFFUR + 10 +16404.681464 + 20 +7777.34418 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A84 + 8 +SCHRAFFUR + 10 +16408.664449 + 20 +7780.568031 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A85 + 8 +SCHRAFFUR + 10 +16412.825498 + 20 +7783.50009 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A86 + 8 +SCHRAFFUR + 10 +16417.011393 + 20 +7786.163121 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A87 + 8 +SCHRAFFUR + 10 +16421.068915 + 20 +7788.579887 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A88 + 8 +SCHRAFFUR + 10 +16424.844847 + 20 +7790.773153 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A89 + 8 +SCHRAFFUR + 10 +16428.185971 + 20 +7792.765683 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A8A + 8 +SCHRAFFUR + 10 +16430.939069 + 20 +7794.580242 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A8B + 8 +SCHRAFFUR + 10 +16432.950922 + 20 +7796.239593 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A8C + 8 +SCHRAFFUR + 10 +16387.719771 + 20 +7755.976443 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A8D + 8 +SCHRAFFUR + 10 +16401.147792 + 20 +7780.699456 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A8E + 8 +SCHRAFFUR + 10 +16428.710499 + 20 +7792.001364 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A8F + 8 +SCHRAFFUR + 10 +16432.950922 + 20 +7796.239593 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1A90 + 8 +SCHRAFFUR + 0 +POLYLINE + 5 +1A91 + 8 +SCHRAFFUR + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +1A92 + 8 +SCHRAFFUR + 10 +15622.997236 + 20 +7490.467393 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A93 + 8 +SCHRAFFUR + 10 +15622.997236 + 20 +7490.467393 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A94 + 8 +SCHRAFFUR + 10 +15615.341593 + 20 +7504.354359 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A95 + 8 +SCHRAFFUR + 10 +15609.54127 + 20 +7517.742398 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A96 + 8 +SCHRAFFUR + 10 +15604.98892 + 20 +7530.531721 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A97 + 8 +SCHRAFFUR + 10 +15601.077194 + 20 +7542.622542 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A98 + 8 +SCHRAFFUR + 10 +15597.198746 + 20 +7553.915072 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A99 + 8 +SCHRAFFUR + 10 +15592.746228 + 20 +7564.309522 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A9A + 8 +SCHRAFFUR + 10 +15587.112294 + 20 +7573.706106 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A9B + 8 +SCHRAFFUR + 10 +15579.689594 + 20 +7582.005035 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A9C + 8 +SCHRAFFUR + 10 +15599.568565 + 20 +7528.075837 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A9D + 8 +SCHRAFFUR + 10 +15602.408343 + 20 +7561.426798 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A9E + 8 +SCHRAFFUR + 10 +15579.689594 + 20 +7582.005035 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1A9F + 8 +SCHRAFFUR + 0 +POLYLINE + 5 +1AA0 + 8 +SCHRAFFUR + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +21E4 + 8 +SCHRAFFUR + 10 +15598.858555 + 20 +7476.27549 + 30 +0.0 + 0 +VERTEX + 5 +21E5 + 8 +SCHRAFFUR + 10 +15578.269661 + 20 +7482.661825 + 30 +0.0 + 0 +SEQEND + 5 +21E6 + 8 +SCHRAFFUR + 0 +POLYLINE + 5 +1AA4 + 8 +SCHRAFFUR + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +1AA5 + 8 +SCHRAFFUR + 10 +15674.824474 + 20 +7523.818299 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1AA6 + 8 +SCHRAFFUR + 10 +15674.824474 + 20 +7523.818299 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AA7 + 8 +SCHRAFFUR + 10 +15660.19296 + 20 +7537.328999 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AA8 + 8 +SCHRAFFUR + 10 +15648.492114 + 20 +7548.748336 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AA9 + 8 +SCHRAFFUR + 10 +15639.291385 + 20 +7558.313303 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AAA + 8 +SCHRAFFUR + 10 +15632.160219 + 20 +7566.260895 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AAB + 8 +SCHRAFFUR + 10 +15626.668066 + 20 +7572.828103 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AAC + 8 +SCHRAFFUR + 10 +15622.384372 + 20 +7578.251923 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AAD + 8 +SCHRAFFUR + 10 +15618.878587 + 20 +7582.769347 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AAE + 8 +SCHRAFFUR + 10 +15615.720157 + 20 +7586.617368 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AAF + 8 +SCHRAFFUR + 10 +15612.532611 + 20 +7589.973386 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AB0 + 8 +SCHRAFFUR + 10 +15609.155789 + 20 +7592.77642 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AB1 + 8 +SCHRAFFUR + 10 +15605.483614 + 20 +7594.905894 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AB2 + 8 +SCHRAFFUR + 10 +15601.410006 + 20 +7596.241233 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AB3 + 8 +SCHRAFFUR + 10 +15596.828887 + 20 +7596.661861 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AB4 + 8 +SCHRAFFUR + 10 +15591.634177 + 20 +7596.047203 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AB5 + 8 +SCHRAFFUR + 10 +15585.719798 + 20 +7594.276684 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AB6 + 8 +SCHRAFFUR + 10 +15578.979672 + 20 +7591.229728 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AB7 + 8 +SCHRAFFUR + 10 +15631.516833 + 20 +7562.845977 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1AB8 + 8 +SCHRAFFUR + 10 +15616.607582 + 20 +7591.229728 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1AB9 + 8 +SCHRAFFUR + 10 +15598.148632 + 20 +7601.164038 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1ABA + 8 +SCHRAFFUR + 10 +15578.979672 + 20 +7591.229728 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1ABB + 8 +SCHRAFFUR + 0 +POLYLINE + 5 +1ABC + 8 +SCHRAFFUR + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +1ABD + 8 +SCHRAFFUR + 10 +15706.062731 + 20 +7545.815716 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1ABE + 8 +SCHRAFFUR + 10 +15706.062731 + 20 +7545.815716 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1ABF + 8 +SCHRAFFUR + 10 +15693.916784 + 20 +7557.954466 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AC0 + 8 +SCHRAFFUR + 10 +15682.975136 + 20 +7568.883995 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AC1 + 8 +SCHRAFFUR + 10 +15673.144187 + 20 +7578.692309 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AC2 + 8 +SCHRAFFUR + 10 +15664.330341 + 20 +7587.467415 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AC3 + 8 +SCHRAFFUR + 10 +15656.439998 + 20 +7595.29732 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AC4 + 8 +SCHRAFFUR + 10 +15649.379561 + 20 +7602.270029 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AC5 + 8 +SCHRAFFUR + 10 +15643.05543 + 20 +7608.473549 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AC6 + 8 +SCHRAFFUR + 10 +15637.374008 + 20 +7613.995888 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AC7 + 8 +SCHRAFFUR + 10 +15632.244122 + 20 +7618.907379 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AC8 + 8 +SCHRAFFUR + 10 +15627.584308 + 20 +7623.207678 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AC9 + 8 +SCHRAFFUR + 10 +15623.315527 + 20 +7626.878766 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1ACA + 8 +SCHRAFFUR + 10 +15619.358741 + 20 +7629.902627 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1ACB + 8 +SCHRAFFUR + 10 +15615.63491 + 20 +7632.261243 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1ACC + 8 +SCHRAFFUR + 10 +15612.064996 + 20 +7633.936597 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1ACD + 8 +SCHRAFFUR + 10 +15608.56996 + 20 +7634.910671 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1ACE + 8 +SCHRAFFUR + 10 +15605.070764 + 20 +7635.16545 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1ACF + 8 +SCHRAFFUR + 10 +15601.515062 + 20 +7634.711672 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AD0 + 8 +SCHRAFFUR + 10 +15597.95728 + 20 +7633.675112 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AD1 + 8 +SCHRAFFUR + 10 +15594.478536 + 20 +7632.2103 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AD2 + 8 +SCHRAFFUR + 10 +15591.159948 + 20 +7630.471769 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AD3 + 8 +SCHRAFFUR + 10 +15588.082635 + 20 +7628.61405 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AD4 + 8 +SCHRAFFUR + 10 +15585.327714 + 20 +7626.791673 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AD5 + 8 +SCHRAFFUR + 10 +15582.976306 + 20 +7625.15917 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AD6 + 8 +SCHRAFFUR + 10 +15581.109527 + 20 +7623.871072 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AD7 + 8 +SCHRAFFUR + 10 +15671.984609 + 20 +7579.876239 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1AD8 + 8 +SCHRAFFUR + 10 +15631.516833 + 20 +7620.323096 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1AD9 + 8 +SCHRAFFUR + 10 +15605.958219 + 20 +7643.03013 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1ADA + 8 +SCHRAFFUR + 10 +15585.369325 + 20 +7626.709431 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1ADB + 8 +SCHRAFFUR + 10 +15581.109527 + 20 +7623.871072 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1ADC + 8 +SCHRAFFUR + 0 +POLYLINE + 5 +1ADD + 8 +SCHRAFFUR + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +1ADE + 8 +SCHRAFFUR + 10 +15725.941702 + 20 +7604.002452 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1ADF + 8 +SCHRAFFUR + 10 +15725.941702 + 20 +7604.002452 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AE0 + 8 +SCHRAFFUR + 10 +15700.682263 + 20 +7617.99683 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AE1 + 8 +SCHRAFFUR + 10 +15679.880187 + 20 +7630.207523 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AE2 + 8 +SCHRAFFUR + 10 +15662.934365 + 20 +7640.680267 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AE3 + 8 +SCHRAFFUR + 10 +15649.243686 + 20 +7649.460796 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AE4 + 8 +SCHRAFFUR + 10 +15638.207042 + 20 +7656.594848 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AE5 + 8 +SCHRAFFUR + 10 +15629.223321 + 20 +7662.128155 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AE6 + 8 +SCHRAFFUR + 10 +15621.691415 + 20 +7666.106455 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AE7 + 8 +SCHRAFFUR + 10 +15615.010213 + 20 +7668.575481 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AE8 + 8 +SCHRAFFUR + 10 +15608.690924 + 20 +7669.625319 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AE9 + 8 +SCHRAFFUR + 10 +15602.694029 + 20 +7669.523454 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AEA + 8 +SCHRAFFUR + 10 +15597.092329 + 20 +7668.581717 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AEB + 8 +SCHRAFFUR + 10 +15591.958622 + 20 +7667.111942 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AEC + 8 +SCHRAFFUR + 10 +15587.36571 + 20 +7665.425963 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AED + 8 +SCHRAFFUR + 10 +15583.386393 + 20 +7663.835613 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AEE + 8 +SCHRAFFUR + 10 +15580.093469 + 20 +7662.652725 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AEF + 8 +SCHRAFFUR + 10 +15577.559739 + 20 +7662.189133 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AF0 + 8 +SCHRAFFUR + 10 +15652.105726 + 20 +7643.739692 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1AF1 + 8 +SCHRAFFUR + 10 +15612.347872 + 20 +7684.186549 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1AF2 + 8 +SCHRAFFUR + 10 +15583.239382 + 20 +7662.189133 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1AF3 + 8 +SCHRAFFUR + 10 +15577.559739 + 20 +7662.189133 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1AF4 + 8 +SCHRAFFUR + 0 +POLYLINE + 5 +1AF5 + 8 +SCHRAFFUR + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +1AF6 + 8 +SCHRAFFUR + 10 +15727.361635 + 20 +7665.027547 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1AF7 + 8 +SCHRAFFUR + 10 +15727.361635 + 20 +7665.027547 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AF8 + 8 +SCHRAFFUR + 10 +15710.775638 + 20 +7675.986743 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AF9 + 8 +SCHRAFFUR + 10 +15696.508804 + 20 +7684.580167 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AFA + 8 +SCHRAFFUR + 10 +15684.284496 + 20 +7691.103021 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AFB + 8 +SCHRAFFUR + 10 +15673.82608 + 20 +7695.850507 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AFC + 8 +SCHRAFFUR + 10 +15664.856919 + 20 +7699.117825 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AFD + 8 +SCHRAFFUR + 10 +15657.100379 + 20 +7701.200179 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AFE + 8 +SCHRAFFUR + 10 +15650.279822 + 20 +7702.392769 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AFF + 8 +SCHRAFFUR + 10 +15644.118615 + 20 +7702.990799 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B00 + 8 +SCHRAFFUR + 10 +15638.329028 + 20 +7703.227102 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B01 + 8 +SCHRAFFUR + 10 +15632.57896 + 20 +7703.085048 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B02 + 8 +SCHRAFFUR + 10 +15626.525217 + 20 +7702.485638 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B03 + 8 +SCHRAFFUR + 10 +15619.824605 + 20 +7701.349875 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B04 + 8 +SCHRAFFUR + 10 +15612.133931 + 20 +7699.598759 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B05 + 8 +SCHRAFFUR + 10 +15603.110001 + 20 +7697.153294 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B06 + 8 +SCHRAFFUR + 10 +15592.40962 + 20 +7693.934481 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B07 + 8 +SCHRAFFUR + 10 +15579.689594 + 20 +7689.863322 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B08 + 8 +SCHRAFFUR + 10 +15679.794195 + 20 +7697.668835 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B09 + 8 +SCHRAFFUR + 10 +15640.036341 + 20 +7706.183966 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B0A + 8 +SCHRAFFUR + 10 +15616.607582 + 20 +7701.926428 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B0B + 8 +SCHRAFFUR + 10 +15579.689594 + 20 +7689.863322 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1B0C + 8 +SCHRAFFUR + 0 +POLYLINE + 5 +1B0D + 8 +SCHRAFFUR + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +1B0E + 8 +SCHRAFFUR + 10 +15725.941702 + 20 +7707.6032 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B0F + 8 +SCHRAFFUR + 10 +15725.941702 + 20 +7707.6032 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B10 + 8 +SCHRAFFUR + 10 +15703.36193 + 20 +7712.899503 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B11 + 8 +SCHRAFFUR + 10 +15683.879232 + 20 +7717.177156 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B12 + 8 +SCHRAFFUR + 10 +15667.196172 + 20 +7720.581679 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B13 + 8 +SCHRAFFUR + 10 +15653.015314 + 20 +7723.258594 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B14 + 8 +SCHRAFFUR + 10 +15641.039221 + 20 +7725.353423 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B15 + 8 +SCHRAFFUR + 10 +15630.970458 + 20 +7727.011686 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B16 + 8 +SCHRAFFUR + 10 +15622.511588 + 20 +7728.378906 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B17 + 8 +SCHRAFFUR + 10 +15615.365174 + 20 +7729.600603 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B18 + 8 +SCHRAFFUR + 10 +15609.254582 + 20 +7730.804282 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B19 + 8 +SCHRAFFUR + 10 +15603.986374 + 20 +7732.04538 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B1A + 8 +SCHRAFFUR + 10 +15599.387916 + 20 +7733.361316 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B1B + 8 +SCHRAFFUR + 10 +15595.286571 + 20 +7734.789512 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B1C + 8 +SCHRAFFUR + 10 +15591.509703 + 20 +7736.367386 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B1D + 8 +SCHRAFFUR + 10 +15587.884676 + 20 +7738.13236 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B1E + 8 +SCHRAFFUR + 10 +15584.238856 + 20 +7740.121853 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B1F + 8 +SCHRAFFUR + 10 +15580.399605 + 20 +7742.373286 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B20 + 8 +SCHRAFFUR + 10 +15661.335157 + 20 +7723.214228 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B21 + 8 +SCHRAFFUR + 10 +15604.538286 + 20 +7729.600617 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B22 + 8 +SCHRAFFUR + 10 +15591.048968 + 20 +7735.986951 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B23 + 8 +SCHRAFFUR + 10 +15580.399605 + 20 +7742.373286 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1B24 + 8 +SCHRAFFUR + 0 +POLYLINE + 5 +1B25 + 8 +SCHRAFFUR + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +1B26 + 8 +SCHRAFFUR + 10 +15727.361635 + 20 +7735.277334 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B27 + 8 +SCHRAFFUR + 10 +15727.361635 + 20 +7735.277334 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B28 + 8 +SCHRAFFUR + 10 +15712.586592 + 20 +7738.939295 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B29 + 8 +SCHRAFFUR + 10 +15700.014234 + 20 +7742.486917 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B2A + 8 +SCHRAFFUR + 10 +15689.351287 + 20 +7745.938911 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B2B + 8 +SCHRAFFUR + 10 +15680.304474 + 20 +7749.313988 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B2C + 8 +SCHRAFFUR + 10 +15672.58052 + 20 +7752.630856 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B2D + 8 +SCHRAFFUR + 10 +15665.886151 + 20 +7755.908225 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B2E + 8 +SCHRAFFUR + 10 +15659.92809 + 20 +7759.164807 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B2F + 8 +SCHRAFFUR + 10 +15654.413062 + 20 +7762.41931 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B30 + 8 +SCHRAFFUR + 10 +15649.11019 + 20 +7765.672428 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B31 + 8 +SCHRAFFUR + 10 +15644.038194 + 20 +7768.852784 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B32 + 8 +SCHRAFFUR + 10 +15639.278192 + 20 +7771.870988 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B33 + 8 +SCHRAFFUR + 10 +15634.911303 + 20 +7774.637645 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B34 + 8 +SCHRAFFUR + 10 +15631.018644 + 20 +7777.063364 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B35 + 8 +SCHRAFFUR + 10 +15627.681335 + 20 +7779.058752 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B36 + 8 +SCHRAFFUR + 10 +15624.980493 + 20 +7780.534416 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B37 + 8 +SCHRAFFUR + 10 +15622.997236 + 20 +7781.400964 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B38 + 8 +SCHRAFFUR + 10 +15684.763916 + 20 +7745.211644 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B39 + 8 +SCHRAFFUR + 10 +15652.815648 + 20 +7762.241906 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B3A + 8 +SCHRAFFUR + 10 +15627.257034 + 20 +7779.981784 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B3B + 8 +SCHRAFFUR + 10 +15622.997236 + 20 +7781.400964 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1B3C + 8 +SCHRAFFUR + 0 +POLYLINE + 5 +1B3D + 8 +SCHRAFFUR + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +1B3E + 8 +SCHRAFFUR + 10 +15729.49149 + 20 +7773.59545 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B3F + 8 +SCHRAFFUR + 10 +15729.49149 + 20 +7773.59545 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B40 + 8 +SCHRAFFUR + 10 +15721.385872 + 20 +7775.409972 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B41 + 8 +SCHRAFFUR + 10 +15714.033198 + 20 +7777.135101 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B42 + 8 +SCHRAFFUR + 10 +15707.321153 + 20 +7778.781232 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B43 + 8 +SCHRAFFUR + 10 +15701.137417 + 20 +7780.35876 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B44 + 8 +SCHRAFFUR + 10 +15695.369672 + 20 +7781.878079 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B45 + 8 +SCHRAFFUR + 10 +15689.905602 + 20 +7783.349583 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B46 + 8 +SCHRAFFUR + 10 +15684.632888 + 20 +7784.783668 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B47 + 8 +SCHRAFFUR + 10 +15679.439212 + 20 +7786.190728 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B48 + 8 +SCHRAFFUR + 10 +15674.251082 + 20 +7787.582544 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B49 + 8 +SCHRAFFUR + 10 +15669.150311 + 20 +7788.976439 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B4A + 8 +SCHRAFFUR + 10 +15664.257535 + 20 +7790.391123 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B4B + 8 +SCHRAFFUR + 10 +15659.693393 + 20 +7791.845306 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B4C + 8 +SCHRAFFUR + 10 +15655.578522 + 20 +7793.357698 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B4D + 8 +SCHRAFFUR + 10 +15652.033561 + 20 +7794.947009 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B4E + 8 +SCHRAFFUR + 10 +15649.179147 + 20 +7796.631948 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B4F + 8 +SCHRAFFUR + 10 +15647.135917 + 20 +7798.431225 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B50 + 8 +SCHRAFFUR + 10 +15706.772742 + 20 +7778.562605 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B51 + 8 +SCHRAFFUR + 10 +15679.794195 + 20 +7786.368119 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B52 + 8 +SCHRAFFUR + 10 +15651.395716 + 20 +7793.46407 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B53 + 8 +SCHRAFFUR + 10 +15647.135917 + 20 +7798.431225 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1B54 + 8 +SCHRAFFUR + 0 +POLYLINE + 5 +1B55 + 8 +SCHRAFFUR + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +1B56 + 8 +SCHRAFFUR + 10 +15725.941702 + 20 +7806.236739 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B57 + 8 +SCHRAFFUR + 10 +15725.941702 + 20 +7806.236739 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B58 + 8 +SCHRAFFUR + 10 +15717.492883 + 20 +7810.466595 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B59 + 8 +SCHRAFFUR + 10 +15711.06579 + 20 +7813.731844 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B5A + 8 +SCHRAFFUR + 10 +15706.28603 + 20 +7816.265322 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B5B + 8 +SCHRAFFUR + 10 +15702.779208 + 20 +7818.299866 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B5C + 8 +SCHRAFFUR + 10 +15700.170932 + 20 +7820.068311 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B5D + 8 +SCHRAFFUR + 10 +15698.086807 + 20 +7821.803493 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B5E + 8 +SCHRAFFUR + 10 +15696.152439 + 20 +7823.738249 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B5F + 8 +SCHRAFFUR + 10 +15693.993435 + 20 +7826.105414 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B60 + 8 +SCHRAFFUR + 10 +15700.383088 + 20 +7819.009462 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B61 + 8 +SCHRAFFUR + 10 +15693.993435 + 20 +7826.105414 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1B62 + 8 +SCHRAFFUR + 0 +INSERT + 5 +1B63 + 8 +SCHRAFFUR + 2 +*X69 + 10 +727.274018 + 20 +-2105.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI33,I +1040 +2100.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +1B64 + 8 +SCHRAFFUR + 2 +*X71 + 10 +727.274018 + 20 +-2105.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +AR-SAND,I +1040 +40.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +1B65 + 8 +SCHRAFFUR + 2 +*X72 + 10 +727.274018 + 20 +-2105.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +AR-SAND,I +1040 +40.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +1B66 + 8 +SCHRAFFUR + 2 +*X73 + 10 +727.274018 + 20 +-2105.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +AR-SAND,I +1040 +40.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +1B67 + 8 +SCHRAFFUR + 2 +*X74 + 10 +727.274018 + 20 +-2105.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +AR-SAND,I +1040 +40.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +1B68 + 8 +SCHRAFFUR + 2 +*X77 + 10 +727.274018 + 20 +-2105.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +HONEY,I +1040 +500.0 +1040 +0.0 +1002 +} + 0 +LINE + 5 +1B69 + 8 +0 + 62 + 0 + 10 +15651.059073 + 20 +10235.245158 + 30 +0.0 + 11 +15651.059073 + 21 +10235.245158 + 31 +0.0 + 0 +LINE + 5 +1B6A + 8 +0 + 62 + 0 + 10 +15608.708252 + 20 +10262.003038 + 30 +0.0 + 11 +15608.708252 + 21 +10262.003038 + 31 +0.0 + 0 +LINE + 5 +1B6B + 8 +0 + 62 + 0 + 10 +15649.169272 + 20 +10293.049871 + 30 +0.0 + 11 +15649.169272 + 21 +10293.049871 + 31 +0.0 + 0 +LINE + 5 +1B6C + 8 +0 + 62 + 0 + 10 +15531.965563 + 20 +10262.371111 + 30 +0.0 + 11 +15531.965563 + 21 +10262.371111 + 31 +0.0 + 0 +LINE + 5 +1B6D + 8 +0 + 62 + 0 + 10 +15570.641538 + 20 +10292.04823 + 30 +0.0 + 11 +15570.641538 + 21 +10292.04823 + 31 +0.0 + 0 +LINE + 5 +1B6E + 8 +0 + 62 + 0 + 10 +15453.43783 + 20 +10261.36947 + 30 +0.0 + 11 +15453.43783 + 21 +10261.36947 + 31 +0.0 + 0 +LINE + 5 +1B6F + 8 +0 + 62 + 0 + 10 +15489.614742 + 20 +10289.128991 + 30 +0.0 + 11 +15489.614742 + 21 +10289.128991 + 31 +0.0 + 0 +LINE + 5 +1B70 + 8 +0 + 62 + 0 + 10 +15372.411033 + 20 +10258.45023 + 30 +0.0 + 11 +15372.411033 + 21 +10258.45023 + 31 +0.0 + 0 +LINE + 5 +1B71 + 8 +0 + 62 + 0 + 10 +15412.872054 + 20 +10289.497063 + 30 +0.0 + 11 +15412.872054 + 21 +10289.497063 + 31 +0.0 + 0 +LINE + 5 +1B72 + 8 +0 + 62 + 0 + 10 +15295.668345 + 20 +10258.818302 + 30 +0.0 + 11 +15295.668345 + 21 +10258.818302 + 31 +0.0 + 0 +LINE + 5 +1B73 + 8 +0 + 62 + 0 + 10 +15334.34432 + 20 +10288.495422 + 30 +0.0 + 11 +15334.34432 + 21 +10288.495422 + 31 +0.0 + 0 +LINE + 5 +1B74 + 8 +0 + 62 + 0 + 10 +15217.140611 + 20 +10257.816661 + 30 +0.0 + 11 +15217.140611 + 21 +10257.816661 + 31 +0.0 + 0 +LINE + 5 +1B75 + 8 +0 + 62 + 0 + 10 +15253.317524 + 20 +10285.576183 + 30 +0.0 + 11 +15253.317524 + 21 +10285.576183 + 31 +0.0 + 0 +LINE + 5 +1B76 + 8 +0 + 62 + 0 + 10 +15136.113815 + 20 +10254.897422 + 30 +0.0 + 11 +15136.113815 + 21 +10254.897422 + 31 +0.0 + 0 +LINE + 5 +1B77 + 8 +0 + 62 + 0 + 10 +15176.574835 + 20 +10285.944255 + 30 +0.0 + 11 +15176.574835 + 21 +10285.944255 + 31 +0.0 + 0 +LINE + 5 +1B78 + 8 +0 + 62 + 0 + 10 +15059.371127 + 20 +10255.265494 + 30 +0.0 + 11 +15059.371127 + 21 +10255.265494 + 31 +0.0 + 0 +LINE + 5 +1B79 + 8 +0 + 62 + 0 + 10 +15098.047102 + 20 +10284.942614 + 30 +0.0 + 11 +15098.047102 + 21 +10284.942614 + 31 +0.0 + 0 +LINE + 5 +1B7A + 8 +0 + 62 + 0 + 10 +14980.843393 + 20 +10254.263853 + 30 +0.0 + 11 +14980.843393 + 21 +10254.263853 + 31 +0.0 + 0 +LINE + 5 +1B7B + 8 +0 + 62 + 0 + 10 +15017.020306 + 20 +10282.023374 + 30 +0.0 + 11 +15017.020306 + 21 +10282.023374 + 31 +0.0 + 0 +LINE + 5 +1B7C + 8 +0 + 62 + 0 + 10 +14899.816597 + 20 +10251.344614 + 30 +0.0 + 11 +14899.816597 + 21 +10251.344614 + 31 +0.0 + 0 +LINE + 5 +1B7D + 8 +0 + 62 + 0 + 10 +14940.277617 + 20 +10282.391447 + 30 +0.0 + 11 +14940.277617 + 21 +10282.391447 + 31 +0.0 + 0 +LINE + 5 +1B7E + 8 +0 + 62 + 0 + 10 +14823.073908 + 20 +10251.712686 + 30 +0.0 + 11 +14823.073908 + 21 +10251.712686 + 31 +0.0 + 0 +LINE + 5 +1B7F + 8 +0 + 62 + 0 + 10 +14861.749884 + 20 +10281.389806 + 30 +0.0 + 11 +14861.749884 + 21 +10281.389806 + 31 +0.0 + 0 +LINE + 5 +1B80 + 8 +0 + 62 + 0 + 10 +14897.926796 + 20 +10309.149327 + 30 +0.0 + 11 +14897.926796 + 21 +10309.149327 + 31 +0.0 + 0 +LINE + 5 +1B81 + 8 +0 + 62 + 0 + 10 +14744.546175 + 20 +10250.711045 + 30 +0.0 + 11 +14744.546175 + 21 +10250.711045 + 31 +0.0 + 0 +LINE + 5 +1B82 + 8 +0 + 62 + 0 + 10 +14780.723087 + 20 +10278.470566 + 30 +0.0 + 11 +14780.723087 + 21 +10278.470566 + 31 +0.0 + 0 +LINE + 5 +1B83 + 8 +0 + 62 + 0 + 10 +14821.184108 + 20 +10309.517399 + 30 +0.0 + 11 +14821.184108 + 21 +10309.517399 + 31 +0.0 + 0 +LINE + 5 +1B84 + 8 +0 + 62 + 0 + 10 +14703.980399 + 20 +10278.838638 + 30 +0.0 + 11 +14703.980399 + 21 +10278.838638 + 31 +0.0 + 0 +LINE + 5 +1B85 + 8 +0 + 62 + 0 + 10 +14742.656374 + 20 +10308.515758 + 30 +0.0 + 11 +14742.656374 + 21 +10308.515758 + 31 +0.0 + 0 +LINE + 5 +1B86 + 8 +0 + 62 + 0 + 10 +16434.803615 + 20 +10303.340224 + 30 +0.0 + 11 +16434.803615 + 21 +10303.340224 + 31 +0.0 + 0 +LINE + 5 +1B87 + 8 +0 + 62 + 0 + 10 +16436.693416 + 20 +10245.535511 + 30 +0.0 + 11 +16436.693416 + 21 +10245.535511 + 31 +0.0 + 0 +LINE + 5 +1B88 + 8 +0 + 62 + 0 + 10 +16477.154436 + 20 +10276.582343 + 30 +0.0 + 11 +16477.154436 + 21 +10276.582343 + 31 +0.0 + 0 +LINE + 5 +1B89 + 8 +0 + 62 + 0 + 10 +16515.830411 + 20 +10306.259463 + 30 +0.0 + 11 +16515.830411 + 21 +10306.259463 + 31 +0.0 + 0 +LINE + 5 +1B8A + 8 +0 + 62 + 0 + 10 +16517.720212 + 20 +10248.45475 + 30 +0.0 + 11 +16517.720212 + 21 +10248.45475 + 31 +0.0 + 0 +LINE + 5 +1B8B + 8 +0 + 62 + 0 + 10 +16553.897125 + 20 +10276.214271 + 30 +0.0 + 11 +16553.897125 + 21 +10276.214271 + 31 +0.0 + 0 +LINE + 5 +1B8C + 8 +0 + 62 + 0 + 10 +16594.358145 + 20 +10307.261104 + 30 +0.0 + 11 +16594.358145 + 21 +10307.261104 + 31 +0.0 + 0 +LINE + 5 +1B8D + 8 +0 + 62 + 0 + 10 +16596.247946 + 20 +10249.456391 + 30 +0.0 + 11 +16596.247946 + 21 +10249.456391 + 31 +0.0 + 0 +LINE + 5 +1B8E + 8 +0 + 62 + 0 + 10 +16634.923921 + 20 +10279.133511 + 30 +0.0 + 11 +16634.923921 + 21 +10279.133511 + 31 +0.0 + 0 +LINE + 5 +1B8F + 8 +0 + 62 + 0 + 10 +16671.100833 + 20 +10306.893032 + 30 +0.0 + 11 +16671.100833 + 21 +10306.893032 + 31 +0.0 + 0 +LINE + 5 +1B90 + 8 +0 + 62 + 0 + 10 +16672.990634 + 20 +10249.088319 + 30 +0.0 + 11 +16672.990634 + 21 +10249.088319 + 31 +0.0 + 0 +LINE + 5 +1B91 + 8 +0 + 62 + 0 + 10 +16713.451654 + 20 +10280.135152 + 30 +0.0 + 11 +16713.451654 + 21 +10280.135152 + 31 +0.0 + 0 +LINE + 5 +1B92 + 8 +0 + 62 + 0 + 10 +16752.12763 + 20 +10309.812271 + 30 +0.0 + 11 +16752.12763 + 21 +10309.812271 + 31 +0.0 + 0 +LINE + 5 +1B93 + 8 +0 + 62 + 0 + 10 +16754.01743 + 20 +10252.007558 + 30 +0.0 + 11 +16754.01743 + 21 +10252.007558 + 31 +0.0 + 0 +LINE + 5 +1B94 + 8 +0 + 62 + 0 + 10 +16790.194343 + 20 +10279.767079 + 30 +0.0 + 11 +16790.194343 + 21 +10279.767079 + 31 +0.0 + 0 +LINE + 5 +1B95 + 8 +0 + 62 + 0 + 10 +16832.545164 + 20 +10253.009199 + 30 +0.0 + 11 +16832.545164 + 21 +10253.009199 + 31 +0.0 + 0 +LINE + 5 +1B96 + 8 +0 + 62 + 0 + 10 +16871.221139 + 20 +10282.686319 + 30 +0.0 + 11 +16871.221139 + 21 +10282.686319 + 31 +0.0 + 0 +LINE + 5 +1B97 + 8 +0 + 62 + 0 + 10 +16909.287852 + 20 +10252.641127 + 30 +0.0 + 11 +16909.287852 + 21 +10252.641127 + 31 +0.0 + 0 +LINE + 5 +1B98 + 8 +0 + 62 + 0 + 10 +16949.748873 + 20 +10283.68796 + 30 +0.0 + 11 +16949.748873 + 21 +10283.68796 + 31 +0.0 + 0 +LINE + 5 +1B99 + 8 +0 + 62 + 0 + 10 +16990.314649 + 20 +10255.560366 + 30 +0.0 + 11 +16990.314649 + 21 +10255.560366 + 31 +0.0 + 0 +LINE + 5 +1B9A + 8 +0 + 62 + 0 + 10 +17026.491561 + 20 +10283.319888 + 30 +0.0 + 11 +17026.491561 + 21 +10283.319888 + 31 +0.0 + 0 +LINE + 5 +1B9B + 8 +0 + 62 + 0 + 10 +17068.842382 + 20 +10256.562007 + 30 +0.0 + 11 +17068.842382 + 21 +10256.562007 + 31 +0.0 + 0 +LINE + 5 +1B9C + 8 +0 + 62 + 0 + 10 +17107.518357 + 20 +10286.239127 + 30 +0.0 + 11 +17107.518357 + 21 +10286.239127 + 31 +0.0 + 0 +LINE + 5 +1B9D + 8 +0 + 62 + 0 + 10 +17145.585071 + 20 +10256.193935 + 30 +0.0 + 11 +17145.585071 + 21 +10256.193935 + 31 +0.0 + 0 +LINE + 5 +1B9E + 8 +0 + 62 + 0 + 10 +17186.046091 + 20 +10287.240768 + 30 +0.0 + 11 +17186.046091 + 21 +10287.240768 + 31 +0.0 + 0 +LINE + 5 +1B9F + 8 +0 + 62 + 0 + 10 +17226.611867 + 20 +10259.113175 + 30 +0.0 + 11 +17226.611867 + 21 +10259.113175 + 31 +0.0 + 0 +LINE + 5 +1BA0 + 8 +0 + 62 + 0 + 10 +17262.788779 + 20 +10286.872696 + 30 +0.0 + 11 +17262.788779 + 21 +10286.872696 + 31 +0.0 + 0 +LINE + 5 +1BA1 + 8 +0 + 62 + 0 + 10 +16429.273755 + 20 +10292.918144 + 30 +0.0 + 11 +16429.273755 + 21 +10292.918144 + 31 +0.0 + 0 +LINE + 5 +1BA2 + 8 +0 + 62 + 0 + 10 +16453.663299 + 20 +10296.129089 + 30 +0.0 + 11 +16453.663299 + 21 +10296.129089 + 31 +0.0 + 0 +LINE + 5 +1BA3 + 8 +0 + 62 + 0 + 10 +16494.411683 + 20 +10301.493715 + 30 +0.0 + 11 +16494.411683 + 21 +10301.493715 + 31 +0.0 + 0 +LINE + 5 +1BA4 + 8 +0 + 62 + 0 + 10 +16510.026939 + 20 +10303.549503 + 30 +0.0 + 11 +16510.026939 + 21 +10303.549503 + 31 +0.0 + 0 +LINE + 5 +1BA5 + 8 +0 + 62 + 0 + 10 +16534.416483 + 20 +10306.760447 + 30 +0.0 + 11 +16534.416483 + 21 +10306.760447 + 31 +0.0 + 0 +LINE + 5 +1BA6 + 8 +0 + 62 + 0 + 10 +15416.960408 + 20 +10237.31908 + 30 +0.0 + 11 +15416.960408 + 21 +10237.31908 + 31 +0.0 + 0 +LINE + 5 +1BA7 + 8 +0 + 62 + 0 + 10 +15432.575665 + 20 +10239.374868 + 30 +0.0 + 11 +15432.575665 + 21 +10239.374868 + 31 +0.0 + 0 +LINE + 5 +1BA8 + 8 +0 + 62 + 0 + 10 +15456.965209 + 20 +10242.585812 + 30 +0.0 + 11 +15456.965209 + 21 +10242.585812 + 31 +0.0 + 0 +LINE + 5 +1BA9 + 8 +0 + 62 + 0 + 10 +15497.713592 + 20 +10247.950439 + 30 +0.0 + 11 +15497.713592 + 21 +10247.950439 + 31 +0.0 + 0 +LINE + 5 +1BAA + 8 +0 + 62 + 0 + 10 +15513.328849 + 20 +10250.006226 + 30 +0.0 + 11 +15513.328849 + 21 +10250.006226 + 31 +0.0 + 0 +LINE + 5 +1BAB + 8 +0 + 62 + 0 + 10 +15537.718392 + 20 +10253.21717 + 30 +0.0 + 11 +15537.718392 + 21 +10253.21717 + 31 +0.0 + 0 +LINE + 5 +1BAC + 8 +0 + 62 + 0 + 10 +15578.466776 + 20 +10258.581797 + 30 +0.0 + 11 +15578.466776 + 21 +10258.581797 + 31 +0.0 + 0 +LINE + 5 +1BAD + 8 +0 + 62 + 0 + 10 +15594.082033 + 20 +10260.637584 + 30 +0.0 + 11 +15594.082033 + 21 +10260.637584 + 31 +0.0 + 0 +LINE + 5 +1BAE + 8 +0 + 62 + 0 + 10 +15618.471576 + 20 +10263.848529 + 30 +0.0 + 11 +15618.471576 + 21 +10263.848529 + 31 +0.0 + 0 +LINE + 5 +1BAF + 8 +0 + 62 + 0 + 10 +14824.028238 + 20 +10236.932595 + 30 +0.0 + 11 +14824.028238 + 21 +10236.932595 + 31 +0.0 + 0 +LINE + 5 +1BB0 + 8 +0 + 62 + 0 + 10 +14839.643494 + 20 +10238.988383 + 30 +0.0 + 11 +14839.643494 + 21 +10238.988383 + 31 +0.0 + 0 +LINE + 5 +1BB1 + 8 +0 + 62 + 0 + 10 +14864.033038 + 20 +10242.199327 + 30 +0.0 + 11 +14864.033038 + 21 +10242.199327 + 31 +0.0 + 0 +LINE + 5 +1BB2 + 8 +0 + 62 + 0 + 10 +14904.781422 + 20 +10247.563954 + 30 +0.0 + 11 +14904.781422 + 21 +10247.563954 + 31 +0.0 + 0 +LINE + 5 +1BB3 + 8 +0 + 62 + 0 + 10 +14920.396678 + 20 +10249.619741 + 30 +0.0 + 11 +14920.396678 + 21 +10249.619741 + 31 +0.0 + 0 +LINE + 5 +1BB4 + 8 +0 + 62 + 0 + 10 +14944.786222 + 20 +10252.830686 + 30 +0.0 + 11 +14944.786222 + 21 +10252.830686 + 31 +0.0 + 0 +LINE + 5 +1BB5 + 8 +0 + 62 + 0 + 10 +14985.534606 + 20 +10258.195312 + 30 +0.0 + 11 +14985.534606 + 21 +10258.195312 + 31 +0.0 + 0 +LINE + 5 +1BB6 + 8 +0 + 62 + 0 + 10 +15001.149862 + 20 +10260.2511 + 30 +0.0 + 11 +15001.149862 + 21 +10260.2511 + 31 +0.0 + 0 +LINE + 5 +1BB7 + 8 +0 + 62 + 0 + 10 +15025.539406 + 20 +10263.462044 + 30 +0.0 + 11 +15025.539406 + 21 +10263.462044 + 31 +0.0 + 0 +LINE + 5 +1BB8 + 8 +0 + 62 + 0 + 10 +15066.28779 + 20 +10268.82667 + 30 +0.0 + 11 +15066.28779 + 21 +10268.82667 + 31 +0.0 + 0 +LINE + 5 +1BB9 + 8 +0 + 62 + 0 + 10 +15081.903046 + 20 +10270.882458 + 30 +0.0 + 11 +15081.903046 + 21 +10270.882458 + 31 +0.0 + 0 +LINE + 5 +1BBA + 8 +0 + 62 + 0 + 10 +15106.29259 + 20 +10274.093402 + 30 +0.0 + 11 +15106.29259 + 21 +10274.093402 + 31 +0.0 + 0 +LINE + 5 +1BBB + 8 +0 + 62 + 0 + 10 +15147.040974 + 20 +10279.458029 + 30 +0.0 + 11 +15147.040974 + 21 +10279.458029 + 31 +0.0 + 0 +LINE + 5 +1BBC + 8 +0 + 62 + 0 + 10 +15162.65623 + 20 +10281.513816 + 30 +0.0 + 11 +15162.65623 + 21 +10281.513816 + 31 +0.0 + 0 +LINE + 5 +1BBD + 8 +0 + 62 + 0 + 10 +15187.045774 + 20 +10284.724761 + 30 +0.0 + 11 +15187.045774 + 21 +10284.724761 + 31 +0.0 + 0 +LINE + 5 +1BBE + 8 +0 + 62 + 0 + 10 +15227.794158 + 20 +10290.089387 + 30 +0.0 + 11 +15227.794158 + 21 +10290.089387 + 31 +0.0 + 0 +LINE + 5 +1BBF + 8 +0 + 62 + 0 + 10 +15243.409414 + 20 +10292.145175 + 30 +0.0 + 11 +15243.409414 + 21 +10292.145175 + 31 +0.0 + 0 +LINE + 5 +1BC0 + 8 +0 + 62 + 0 + 10 +15267.798958 + 20 +10295.356119 + 30 +0.0 + 11 +15267.798958 + 21 +10295.356119 + 31 +0.0 + 0 +LINE + 5 +1BC1 + 8 +0 + 62 + 0 + 10 +15308.547342 + 20 +10300.720745 + 30 +0.0 + 11 +15308.547342 + 21 +10300.720745 + 31 +0.0 + 0 +LINE + 5 +1BC2 + 8 +0 + 62 + 0 + 10 +15324.162598 + 20 +10302.776533 + 30 +0.0 + 11 +15324.162598 + 21 +10302.776533 + 31 +0.0 + 0 +LINE + 5 +1BC3 + 8 +0 + 62 + 0 + 10 +15348.552142 + 20 +10305.987477 + 30 +0.0 + 11 +15348.552142 + 21 +10305.987477 + 31 +0.0 + 0 +LINE + 5 +1BC4 + 8 +0 + 62 + 0 + 10 +14715.615171 + 20 +10300.334261 + 30 +0.0 + 11 +14715.615171 + 21 +10300.334261 + 31 +0.0 + 0 +LINE + 5 +1BC5 + 8 +0 + 62 + 0 + 10 +14731.230428 + 20 +10302.390048 + 30 +0.0 + 11 +14731.230428 + 21 +10302.390048 + 31 +0.0 + 0 +LINE + 5 +1BC6 + 8 +0 + 62 + 0 + 10 +14755.619971 + 20 +10305.600992 + 30 +0.0 + 11 +14755.619971 + 21 +10305.600992 + 31 +0.0 + 0 +LINE + 5 +1BC7 + 8 +0 + 62 + 0 + 10 +16602.824749 + 20 +10238.09205 + 30 +0.0 + 11 +16602.824749 + 21 +10238.09205 + 31 +0.0 + 0 +LINE + 5 +1BC8 + 8 +0 + 62 + 0 + 10 +16618.440006 + 20 +10240.147838 + 30 +0.0 + 11 +16618.440006 + 21 +10240.147838 + 31 +0.0 + 0 +LINE + 5 +1BC9 + 8 +0 + 62 + 0 + 10 +16642.82955 + 20 +10243.358782 + 30 +0.0 + 11 +16642.82955 + 21 +10243.358782 + 31 +0.0 + 0 +LINE + 5 +1BCA + 8 +0 + 62 + 0 + 10 +16683.577933 + 20 +10248.723408 + 30 +0.0 + 11 +16683.577933 + 21 +10248.723408 + 31 +0.0 + 0 +LINE + 5 +1BCB + 8 +0 + 62 + 0 + 10 +16699.19319 + 20 +10250.779196 + 30 +0.0 + 11 +16699.19319 + 21 +10250.779196 + 31 +0.0 + 0 +LINE + 5 +1BCC + 8 +0 + 62 + 0 + 10 +16723.582734 + 20 +10253.99014 + 30 +0.0 + 11 +16723.582734 + 21 +10253.99014 + 31 +0.0 + 0 +LINE + 5 +1BCD + 8 +0 + 62 + 0 + 10 +16764.331117 + 20 +10259.354767 + 30 +0.0 + 11 +16764.331117 + 21 +10259.354767 + 31 +0.0 + 0 +LINE + 5 +1BCE + 8 +0 + 62 + 0 + 10 +16779.946374 + 20 +10261.410554 + 30 +0.0 + 11 +16779.946374 + 21 +10261.410554 + 31 +0.0 + 0 +LINE + 5 +1BCF + 8 +0 + 62 + 0 + 10 +16804.335917 + 20 +10264.621499 + 30 +0.0 + 11 +16804.335917 + 21 +10264.621499 + 31 +0.0 + 0 +LINE + 5 +1BD0 + 8 +0 + 62 + 0 + 10 +16845.084301 + 20 +10269.986125 + 30 +0.0 + 11 +16845.084301 + 21 +10269.986125 + 31 +0.0 + 0 +LINE + 5 +1BD1 + 8 +0 + 62 + 0 + 10 +16860.699558 + 20 +10272.041913 + 30 +0.0 + 11 +16860.699558 + 21 +10272.041913 + 31 +0.0 + 0 +LINE + 5 +1BD2 + 8 +0 + 62 + 0 + 10 +16885.089101 + 20 +10275.252857 + 30 +0.0 + 11 +16885.089101 + 21 +10275.252857 + 31 +0.0 + 0 +LINE + 5 +1BD3 + 8 +0 + 62 + 0 + 10 +16925.837485 + 20 +10280.617483 + 30 +0.0 + 11 +16925.837485 + 21 +10280.617483 + 31 +0.0 + 0 +LINE + 5 +1BD4 + 8 +0 + 62 + 0 + 10 +16941.452742 + 20 +10282.673271 + 30 +0.0 + 11 +16941.452742 + 21 +10282.673271 + 31 +0.0 + 0 +LINE + 5 +1BD5 + 8 +0 + 62 + 0 + 10 +16965.842285 + 20 +10285.884215 + 30 +0.0 + 11 +16965.842285 + 21 +10285.884215 + 31 +0.0 + 0 +LINE + 5 +1BD6 + 8 +0 + 62 + 0 + 10 +17006.590669 + 20 +10291.248842 + 30 +0.0 + 11 +17006.590669 + 21 +10291.248842 + 31 +0.0 + 0 +LINE + 5 +1BD7 + 8 +0 + 62 + 0 + 10 +17022.205926 + 20 +10293.304629 + 30 +0.0 + 11 +17022.205926 + 21 +10293.304629 + 31 +0.0 + 0 +LINE + 5 +1BD8 + 8 +0 + 62 + 0 + 10 +17046.595469 + 20 +10296.515574 + 30 +0.0 + 11 +17046.595469 + 21 +10296.515574 + 31 +0.0 + 0 +LINE + 5 +1BD9 + 8 +0 + 62 + 0 + 10 +17087.343853 + 20 +10301.8802 + 30 +0.0 + 11 +17087.343853 + 21 +10301.8802 + 31 +0.0 + 0 +LINE + 5 +1BDA + 8 +0 + 62 + 0 + 10 +17102.95911 + 20 +10303.935988 + 30 +0.0 + 11 +17102.95911 + 21 +10303.935988 + 31 +0.0 + 0 +LINE + 5 +1BDB + 8 +0 + 62 + 0 + 10 +17127.348653 + 20 +10307.146932 + 30 +0.0 + 11 +17127.348653 + 21 +10307.146932 + 31 +0.0 + 0 +LINE + 5 +1BDC + 8 +0 + 62 + 0 + 10 +17195.75692 + 20 +10238.478535 + 30 +0.0 + 11 +17195.75692 + 21 +10238.478535 + 31 +0.0 + 0 +LINE + 5 +1BDD + 8 +0 + 62 + 0 + 10 +17211.372176 + 20 +10240.534322 + 30 +0.0 + 11 +17211.372176 + 21 +10240.534322 + 31 +0.0 + 0 +LINE + 5 +1BDE + 8 +0 + 62 + 0 + 10 +17235.76172 + 20 +10243.745267 + 30 +0.0 + 11 +17235.76172 + 21 +10243.745267 + 31 +0.0 + 0 +LINE + 5 +1BDF + 8 +0 + 62 + 0 + 10 +17276.510104 + 20 +10249.109893 + 30 +0.0 + 11 +17276.510104 + 21 +10249.109893 + 31 +0.0 + 0 +LINE + 5 +1BE0 + 8 +0 + 62 + 0 + 10 +16429.360465 + 20 +10251.004792 + 30 +0.0 + 11 +16429.360465 + 21 +10251.004792 + 31 +0.0 + 0 +LINE + 5 +1BE1 + 8 +0 + 62 + 0 + 10 +16442.011337 + 20 +10242.945298 + 30 +0.0 + 11 +16442.011337 + 21 +10242.945298 + 31 +0.0 + 0 +LINE + 5 +1BE2 + 8 +0 + 62 + 0 + 10 +16463.325624 + 20 +10289.054186 + 30 +0.0 + 11 +16463.325624 + 21 +10289.054186 + 31 +0.0 + 0 +LINE + 5 +1BE3 + 8 +0 + 62 + 0 + 10 +16522.784721 + 20 +10251.174564 + 30 +0.0 + 11 +16522.784721 + 21 +10251.174564 + 31 +0.0 + 0 +LINE + 5 +1BE4 + 8 +0 + 62 + 0 + 10 +16535.435593 + 20 +10243.11507 + 30 +0.0 + 11 +16535.435593 + 21 +10243.11507 + 31 +0.0 + 0 +LINE + 5 +1BE5 + 8 +0 + 62 + 0 + 10 +16556.74988 + 20 +10289.223958 + 30 +0.0 + 11 +16556.74988 + 21 +10289.223958 + 31 +0.0 + 0 +LINE + 5 +1BE6 + 8 +0 + 62 + 0 + 10 +16616.208977 + 20 +10251.344335 + 30 +0.0 + 11 +16616.208977 + 21 +10251.344335 + 31 +0.0 + 0 +LINE + 5 +1BE7 + 8 +0 + 62 + 0 + 10 +16628.859848 + 20 +10243.284841 + 30 +0.0 + 11 +16628.859848 + 21 +10243.284841 + 31 +0.0 + 0 +LINE + 5 +1BE8 + 8 +0 + 62 + 0 + 10 +16650.174136 + 20 +10289.393729 + 30 +0.0 + 11 +16650.174136 + 21 +10289.393729 + 31 +0.0 + 0 +LINE + 5 +1BE9 + 8 +0 + 62 + 0 + 10 +16709.633233 + 20 +10251.514107 + 30 +0.0 + 11 +16709.633233 + 21 +10251.514107 + 31 +0.0 + 0 +LINE + 5 +1BEA + 8 +0 + 62 + 0 + 10 +16722.284104 + 20 +10243.454613 + 30 +0.0 + 11 +16722.284104 + 21 +10243.454613 + 31 +0.0 + 0 +LINE + 5 +1BEB + 8 +0 + 62 + 0 + 10 +16743.598392 + 20 +10289.563501 + 30 +0.0 + 11 +16743.598392 + 21 +10289.563501 + 31 +0.0 + 0 +LINE + 5 +1BEC + 8 +0 + 62 + 0 + 10 +16803.057488 + 20 +10251.683878 + 30 +0.0 + 11 +16803.057488 + 21 +10251.683878 + 31 +0.0 + 0 +LINE + 5 +1BED + 8 +0 + 62 + 0 + 10 +16815.70836 + 20 +10243.624384 + 30 +0.0 + 11 +16815.70836 + 21 +10243.624384 + 31 +0.0 + 0 +LINE + 5 +1BEE + 8 +0 + 62 + 0 + 10 +16837.022647 + 20 +10289.733272 + 30 +0.0 + 11 +16837.022647 + 21 +10289.733272 + 31 +0.0 + 0 +LINE + 5 +1BEF + 8 +0 + 62 + 0 + 10 +16896.481744 + 20 +10251.85365 + 30 +0.0 + 11 +16896.481744 + 21 +10251.85365 + 31 +0.0 + 0 +LINE + 5 +1BF0 + 8 +0 + 62 + 0 + 10 +16909.132616 + 20 +10243.794156 + 30 +0.0 + 11 +16909.132616 + 21 +10243.794156 + 31 +0.0 + 0 +LINE + 5 +1BF1 + 8 +0 + 62 + 0 + 10 +16930.446903 + 20 +10289.903044 + 30 +0.0 + 11 +16930.446903 + 21 +10289.903044 + 31 +0.0 + 0 +LINE + 5 +1BF2 + 8 +0 + 62 + 0 + 10 +16989.906 + 20 +10252.023422 + 30 +0.0 + 11 +16989.906 + 21 +10252.023422 + 31 +0.0 + 0 +LINE + 5 +1BF3 + 8 +0 + 62 + 0 + 10 +17002.556872 + 20 +10243.963928 + 30 +0.0 + 11 +17002.556872 + 21 +10243.963928 + 31 +0.0 + 0 +LINE + 5 +1BF4 + 8 +0 + 62 + 0 + 10 +17023.871159 + 20 +10290.072816 + 30 +0.0 + 11 +17023.871159 + 21 +10290.072816 + 31 +0.0 + 0 +LINE + 5 +1BF5 + 8 +0 + 62 + 0 + 10 +17083.330256 + 20 +10252.193193 + 30 +0.0 + 11 +17083.330256 + 21 +10252.193193 + 31 +0.0 + 0 +LINE + 5 +1BF6 + 8 +0 + 62 + 0 + 10 +17095.981128 + 20 +10244.133699 + 30 +0.0 + 11 +17095.981128 + 21 +10244.133699 + 31 +0.0 + 0 +LINE + 5 +1BF7 + 8 +0 + 62 + 0 + 10 +17117.295415 + 20 +10290.242587 + 30 +0.0 + 11 +17117.295415 + 21 +10290.242587 + 31 +0.0 + 0 +LINE + 5 +1BF8 + 8 +0 + 62 + 0 + 10 +17176.754512 + 20 +10252.362965 + 30 +0.0 + 11 +17176.754512 + 21 +10252.362965 + 31 +0.0 + 0 +LINE + 5 +1BF9 + 8 +0 + 62 + 0 + 10 +17189.405384 + 20 +10244.303471 + 30 +0.0 + 11 +17189.405384 + 21 +10244.303471 + 31 +0.0 + 0 +LINE + 5 +1BFA + 8 +0 + 62 + 0 + 10 +17210.719671 + 20 +10290.412359 + 30 +0.0 + 11 +17210.719671 + 21 +10290.412359 + 31 +0.0 + 0 +LINE + 5 +1BFB + 8 +0 + 62 + 0 + 10 +17270.178768 + 20 +10252.532737 + 30 +0.0 + 11 +17270.178768 + 21 +10252.532737 + 31 +0.0 + 0 +LINE + 5 +1BFC + 8 +0 + 62 + 0 + 10 +15622.507321 + 20 +10287.526242 + 30 +0.0 + 11 +15622.507321 + 21 +10287.526242 + 31 +0.0 + 0 +LINE + 5 +1BFD + 8 +0 + 62 + 0 + 10 +15529.083065 + 20 +10287.35647 + 30 +0.0 + 11 +15529.083065 + 21 +10287.35647 + 31 +0.0 + 0 +LINE + 5 +1BFE + 8 +0 + 62 + 0 + 10 +15588.542162 + 20 +10249.476848 + 30 +0.0 + 11 +15588.542162 + 21 +10249.476848 + 31 +0.0 + 0 +LINE + 5 +1BFF + 8 +0 + 62 + 0 + 10 +15601.193034 + 20 +10241.417353 + 30 +0.0 + 11 +15601.193034 + 21 +10241.417353 + 31 +0.0 + 0 +LINE + 5 +1C00 + 8 +0 + 62 + 0 + 10 +15435.65881 + 20 +10287.186698 + 30 +0.0 + 11 +15435.65881 + 21 +10287.186698 + 31 +0.0 + 0 +LINE + 5 +1C01 + 8 +0 + 62 + 0 + 10 +15495.117906 + 20 +10249.307076 + 30 +0.0 + 11 +15495.117906 + 21 +10249.307076 + 31 +0.0 + 0 +LINE + 5 +1C02 + 8 +0 + 62 + 0 + 10 +15507.768778 + 20 +10241.247582 + 30 +0.0 + 11 +15507.768778 + 21 +10241.247582 + 31 +0.0 + 0 +LINE + 5 +1C03 + 8 +0 + 62 + 0 + 10 +15342.234554 + 20 +10287.016927 + 30 +0.0 + 11 +15342.234554 + 21 +10287.016927 + 31 +0.0 + 0 +LINE + 5 +1C04 + 8 +0 + 62 + 0 + 10 +15401.693651 + 20 +10249.137304 + 30 +0.0 + 11 +15401.693651 + 21 +10249.137304 + 31 +0.0 + 0 +LINE + 5 +1C05 + 8 +0 + 62 + 0 + 10 +15414.344522 + 20 +10241.07781 + 30 +0.0 + 11 +15414.344522 + 21 +10241.07781 + 31 +0.0 + 0 +LINE + 5 +1C06 + 8 +0 + 62 + 0 + 10 +15248.810298 + 20 +10286.847155 + 30 +0.0 + 11 +15248.810298 + 21 +10286.847155 + 31 +0.0 + 0 +LINE + 5 +1C07 + 8 +0 + 62 + 0 + 10 +15308.269395 + 20 +10248.967533 + 30 +0.0 + 11 +15308.269395 + 21 +10248.967533 + 31 +0.0 + 0 +LINE + 5 +1C08 + 8 +0 + 62 + 0 + 10 +15320.920266 + 20 +10240.908039 + 30 +0.0 + 11 +15320.920266 + 21 +10240.908039 + 31 +0.0 + 0 +LINE + 5 +1C09 + 8 +0 + 62 + 0 + 10 +15155.386042 + 20 +10286.677384 + 30 +0.0 + 11 +15155.386042 + 21 +10286.677384 + 31 +0.0 + 0 +LINE + 5 +1C0A + 8 +0 + 62 + 0 + 10 +15214.845139 + 20 +10248.797761 + 30 +0.0 + 11 +15214.845139 + 21 +10248.797761 + 31 +0.0 + 0 +LINE + 5 +1C0B + 8 +0 + 62 + 0 + 10 +15227.496011 + 20 +10240.738267 + 30 +0.0 + 11 +15227.496011 + 21 +10240.738267 + 31 +0.0 + 0 +LINE + 5 +1C0C + 8 +0 + 62 + 0 + 10 +15061.961786 + 20 +10286.507612 + 30 +0.0 + 11 +15061.961786 + 21 +10286.507612 + 31 +0.0 + 0 +LINE + 5 +1C0D + 8 +0 + 62 + 0 + 10 +15121.420883 + 20 +10248.62799 + 30 +0.0 + 11 +15121.420883 + 21 +10248.62799 + 31 +0.0 + 0 +LINE + 5 +1C0E + 8 +0 + 62 + 0 + 10 +15134.071755 + 20 +10240.568495 + 30 +0.0 + 11 +15134.071755 + 21 +10240.568495 + 31 +0.0 + 0 +LINE + 5 +1C0F + 8 +0 + 62 + 0 + 10 +14968.53753 + 20 +10286.33784 + 30 +0.0 + 11 +14968.53753 + 21 +10286.33784 + 31 +0.0 + 0 +LINE + 5 +1C10 + 8 +0 + 62 + 0 + 10 +15027.996627 + 20 +10248.458218 + 30 +0.0 + 11 +15027.996627 + 21 +10248.458218 + 31 +0.0 + 0 +LINE + 5 +1C11 + 8 +0 + 62 + 0 + 10 +15040.647499 + 20 +10240.398724 + 30 +0.0 + 11 +15040.647499 + 21 +10240.398724 + 31 +0.0 + 0 +LINE + 5 +1C12 + 8 +0 + 62 + 0 + 10 +14875.113274 + 20 +10286.168069 + 30 +0.0 + 11 +14875.113274 + 21 +10286.168069 + 31 +0.0 + 0 +LINE + 5 +1C13 + 8 +0 + 62 + 0 + 10 +14934.572371 + 20 +10248.288446 + 30 +0.0 + 11 +14934.572371 + 21 +10248.288446 + 31 +0.0 + 0 +LINE + 5 +1C14 + 8 +0 + 62 + 0 + 10 +14947.223243 + 20 +10240.228952 + 30 +0.0 + 11 +14947.223243 + 21 +10240.228952 + 31 +0.0 + 0 +LINE + 5 +1C15 + 8 +0 + 62 + 0 + 10 +14781.689019 + 20 +10285.998297 + 30 +0.0 + 11 +14781.689019 + 21 +10285.998297 + 31 +0.0 + 0 +LINE + 5 +1C16 + 8 +0 + 62 + 0 + 10 +14841.148116 + 20 +10248.118675 + 30 +0.0 + 11 +14841.148116 + 21 +10248.118675 + 31 +0.0 + 0 +LINE + 5 +1C17 + 8 +0 + 62 + 0 + 10 +14853.798987 + 20 +10240.059181 + 30 +0.0 + 11 +14853.798987 + 21 +10240.059181 + 31 +0.0 + 0 +LINE + 5 +1C18 + 8 +0 + 62 + 0 + 10 +14747.72386 + 20 +10247.948903 + 30 +0.0 + 11 +14747.72386 + 21 +10247.948903 + 31 +0.0 + 0 +LINE + 5 +1C19 + 8 +0 + 62 + 0 + 10 +14760.374731 + 20 +10239.889409 + 30 +0.0 + 11 +14760.374731 + 21 +10239.889409 + 31 +0.0 + 0 +LINE + 5 +1C1A + 8 +0 + 62 + 0 + 10 +16450.879919 + 20 +10259.406297 + 30 +0.0 + 11 +16450.879919 + 21 +10259.406297 + 31 +0.0 + 0 +LINE + 5 +1C1B + 8 +0 + 62 + 0 + 10 +16514.964099 + 20 +10309.652458 + 30 +0.0 + 11 +16514.964099 + 21 +10309.652458 + 31 +0.0 + 0 +LINE + 5 +1C1C + 8 +0 + 62 + 0 + 10 +16541.063717 + 20 +10285.736564 + 30 +0.0 + 11 +16541.063717 + 21 +10285.736564 + 31 +0.0 + 0 +LINE + 5 +1C1D + 8 +0 + 62 + 0 + 10 +16570.923449 + 20 +10258.375161 + 30 +0.0 + 11 +16570.923449 + 21 +10258.375161 + 31 +0.0 + 0 +LINE + 5 +1C1E + 8 +0 + 62 + 0 + 10 +16576.453029 + 20 +10253.308234 + 30 +0.0 + 11 +16576.453029 + 21 +10253.308234 + 31 +0.0 + 0 +LINE + 5 +1C1F + 8 +0 + 62 + 0 + 10 +16661.107247 + 20 +10284.705428 + 30 +0.0 + 11 +16661.107247 + 21 +10284.705428 + 31 +0.0 + 0 +LINE + 5 +1C20 + 8 +0 + 62 + 0 + 10 +16666.636827 + 20 +10279.638501 + 30 +0.0 + 11 +16666.636827 + 21 +10279.638501 + 31 +0.0 + 0 +LINE + 5 +1C21 + 8 +0 + 62 + 0 + 10 +16692.736445 + 20 +10255.722608 + 30 +0.0 + 11 +16692.736445 + 21 +10255.722608 + 31 +0.0 + 0 +LINE + 5 +1C22 + 8 +0 + 62 + 0 + 10 +16756.820625 + 20 +10305.968768 + 30 +0.0 + 11 +16756.820625 + 21 +10305.968768 + 31 +0.0 + 0 +LINE + 5 +1C23 + 8 +0 + 62 + 0 + 10 +16782.920243 + 20 +10282.052875 + 30 +0.0 + 11 +16782.920243 + 21 +10282.052875 + 31 +0.0 + 0 +LINE + 5 +1C24 + 8 +0 + 62 + 0 + 10 +16812.779975 + 20 +10254.691472 + 30 +0.0 + 11 +16812.779975 + 21 +10254.691472 + 31 +0.0 + 0 +LINE + 5 +1C25 + 8 +0 + 62 + 0 + 10 +16818.309555 + 20 +10249.624545 + 30 +0.0 + 11 +16818.309555 + 21 +10249.624545 + 31 +0.0 + 0 +LINE + 5 +1C26 + 8 +0 + 62 + 0 + 10 +16873.104041 + 20 +10308.383142 + 30 +0.0 + 11 +16873.104041 + 21 +10308.383142 + 31 +0.0 + 0 +LINE + 5 +1C27 + 8 +0 + 62 + 0 + 10 +16902.963773 + 20 +10281.021738 + 30 +0.0 + 11 +16902.963773 + 21 +10281.021738 + 31 +0.0 + 0 +LINE + 5 +1C28 + 8 +0 + 62 + 0 + 10 +16908.493353 + 20 +10275.954812 + 30 +0.0 + 11 +16908.493353 + 21 +10275.954812 + 31 +0.0 + 0 +LINE + 5 +1C29 + 8 +0 + 62 + 0 + 10 +16934.592971 + 20 +10252.038919 + 30 +0.0 + 11 +16934.592971 + 21 +10252.038919 + 31 +0.0 + 0 +LINE + 5 +1C2A + 8 +0 + 62 + 0 + 10 +16993.147571 + 20 +10307.352005 + 30 +0.0 + 11 +16993.147571 + 21 +10307.352005 + 31 +0.0 + 0 +LINE + 5 +1C2B + 8 +0 + 62 + 0 + 10 +16998.677151 + 20 +10302.285079 + 30 +0.0 + 11 +16998.677151 + 21 +10302.285079 + 31 +0.0 + 0 +LINE + 5 +1C2C + 8 +0 + 62 + 0 + 10 +17024.776769 + 20 +10278.369186 + 30 +0.0 + 11 +17024.776769 + 21 +10278.369186 + 31 +0.0 + 0 +LINE + 5 +1C2D + 8 +0 + 62 + 0 + 10 +17054.636501 + 20 +10251.007782 + 30 +0.0 + 11 +17054.636501 + 21 +10251.007782 + 31 +0.0 + 0 +LINE + 5 +1C2E + 8 +0 + 62 + 0 + 10 +17060.166081 + 20 +10245.940856 + 30 +0.0 + 11 +17060.166081 + 21 +10245.940856 + 31 +0.0 + 0 +LINE + 5 +1C2F + 8 +0 + 62 + 0 + 10 +17114.960567 + 20 +10304.699452 + 30 +0.0 + 11 +17114.960567 + 21 +10304.699452 + 31 +0.0 + 0 +LINE + 5 +1C30 + 8 +0 + 62 + 0 + 10 +17144.820299 + 20 +10277.338049 + 30 +0.0 + 11 +17144.820299 + 21 +10277.338049 + 31 +0.0 + 0 +LINE + 5 +1C31 + 8 +0 + 62 + 0 + 10 +17150.349879 + 20 +10272.271122 + 30 +0.0 + 11 +17150.349879 + 21 +10272.271122 + 31 +0.0 + 0 +LINE + 5 +1C32 + 8 +0 + 62 + 0 + 10 +17176.449497 + 20 +10248.355229 + 30 +0.0 + 11 +17176.449497 + 21 +10248.355229 + 31 +0.0 + 0 +LINE + 5 +1C33 + 8 +0 + 62 + 0 + 10 +17235.004098 + 20 +10303.668316 + 30 +0.0 + 11 +17235.004098 + 21 +10303.668316 + 31 +0.0 + 0 +LINE + 5 +1C34 + 8 +0 + 62 + 0 + 10 +17240.533678 + 20 +10298.601389 + 30 +0.0 + 11 +17240.533678 + 21 +10298.601389 + 31 +0.0 + 0 +LINE + 5 +1C35 + 8 +0 + 62 + 0 + 10 +17266.633295 + 20 +10274.685496 + 30 +0.0 + 11 +17266.633295 + 21 +10274.685496 + 31 +0.0 + 0 +LINE + 5 +1C36 + 8 +0 + 62 + 0 + 10 +15573.637612 + 20 +10300.471322 + 30 +0.0 + 11 +15573.637612 + 21 +10300.471322 + 31 +0.0 + 0 +LINE + 5 +1C37 + 8 +0 + 62 + 0 + 10 +15603.497344 + 20 +10273.109919 + 30 +0.0 + 11 +15603.497344 + 21 +10273.109919 + 31 +0.0 + 0 +LINE + 5 +1C38 + 8 +0 + 62 + 0 + 10 +15609.026924 + 20 +10268.042992 + 30 +0.0 + 11 +15609.026924 + 21 +10268.042992 + 31 +0.0 + 0 +LINE + 5 +1C39 + 8 +0 + 62 + 0 + 10 +15635.126542 + 20 +10244.127099 + 30 +0.0 + 11 +15635.126542 + 21 +10244.127099 + 31 +0.0 + 0 +LINE + 5 +1C3A + 8 +0 + 62 + 0 + 10 +15451.824616 + 20 +10303.123875 + 30 +0.0 + 11 +15451.824616 + 21 +10303.123875 + 31 +0.0 + 0 +LINE + 5 +1C3B + 8 +0 + 62 + 0 + 10 +15457.354196 + 20 +10298.056948 + 30 +0.0 + 11 +15457.354196 + 21 +10298.056948 + 31 +0.0 + 0 +LINE + 5 +1C3C + 8 +0 + 62 + 0 + 10 +15483.453814 + 20 +10274.141055 + 30 +0.0 + 11 +15483.453814 + 21 +10274.141055 + 31 +0.0 + 0 +LINE + 5 +1C3D + 8 +0 + 62 + 0 + 10 +15513.313546 + 20 +10246.779652 + 30 +0.0 + 11 +15513.313546 + 21 +10246.779652 + 31 +0.0 + 0 +LINE + 5 +1C3E + 8 +0 + 62 + 0 + 10 +15518.843126 + 20 +10241.712725 + 30 +0.0 + 11 +15518.843126 + 21 +10241.712725 + 31 +0.0 + 0 +LINE + 5 +1C3F + 8 +0 + 62 + 0 + 10 +15331.781086 + 20 +10304.155011 + 30 +0.0 + 11 +15331.781086 + 21 +10304.155011 + 31 +0.0 + 0 +LINE + 5 +1C40 + 8 +0 + 62 + 0 + 10 +15361.640818 + 20 +10276.793608 + 30 +0.0 + 11 +15361.640818 + 21 +10276.793608 + 31 +0.0 + 0 +LINE + 5 +1C41 + 8 +0 + 62 + 0 + 10 +15367.170398 + 20 +10271.726681 + 30 +0.0 + 11 +15367.170398 + 21 +10271.726681 + 31 +0.0 + 0 +LINE + 5 +1C42 + 8 +0 + 62 + 0 + 10 +15393.270016 + 20 +10247.810788 + 30 +0.0 + 11 +15393.270016 + 21 +10247.810788 + 31 +0.0 + 0 +LINE + 5 +1C43 + 8 +0 + 62 + 0 + 10 +15209.96809 + 20 +10306.807564 + 30 +0.0 + 11 +15209.96809 + 21 +10306.807564 + 31 +0.0 + 0 +LINE + 5 +1C44 + 8 +0 + 62 + 0 + 10 +15215.49767 + 20 +10301.740638 + 30 +0.0 + 11 +15215.49767 + 21 +10301.740638 + 31 +0.0 + 0 +LINE + 5 +1C45 + 8 +0 + 62 + 0 + 10 +15241.597288 + 20 +10277.824744 + 30 +0.0 + 11 +15241.597288 + 21 +10277.824744 + 31 +0.0 + 0 +LINE + 5 +1C46 + 8 +0 + 62 + 0 + 10 +15271.45702 + 20 +10250.463341 + 30 +0.0 + 11 +15271.45702 + 21 +10250.463341 + 31 +0.0 + 0 +LINE + 5 +1C47 + 8 +0 + 62 + 0 + 10 +15276.9866 + 20 +10245.396415 + 30 +0.0 + 11 +15276.9866 + 21 +10245.396415 + 31 +0.0 + 0 +LINE + 5 +1C48 + 8 +0 + 62 + 0 + 10 +15089.92456 + 20 +10307.838701 + 30 +0.0 + 11 +15089.92456 + 21 +10307.838701 + 31 +0.0 + 0 +LINE + 5 +1C49 + 8 +0 + 62 + 0 + 10 +15119.784292 + 20 +10280.477297 + 30 +0.0 + 11 +15119.784292 + 21 +10280.477297 + 31 +0.0 + 0 +LINE + 5 +1C4A + 8 +0 + 62 + 0 + 10 +15125.313872 + 20 +10275.410371 + 30 +0.0 + 11 +15125.313872 + 21 +10275.410371 + 31 +0.0 + 0 +LINE + 5 +1C4B + 8 +0 + 62 + 0 + 10 +15151.41349 + 20 +10251.494478 + 30 +0.0 + 11 +15151.41349 + 21 +10251.494478 + 31 +0.0 + 0 +LINE + 5 +1C4C + 8 +0 + 62 + 0 + 10 +14973.641144 + 20 +10305.424327 + 30 +0.0 + 11 +14973.641144 + 21 +10305.424327 + 31 +0.0 + 0 +LINE + 5 +1C4D + 8 +0 + 62 + 0 + 10 +14999.740762 + 20 +10281.508434 + 30 +0.0 + 11 +14999.740762 + 21 +10281.508434 + 31 +0.0 + 0 +LINE + 5 +1C4E + 8 +0 + 62 + 0 + 10 +15029.600494 + 20 +10254.147031 + 30 +0.0 + 11 +15029.600494 + 21 +10254.147031 + 31 +0.0 + 0 +LINE + 5 +1C4F + 8 +0 + 62 + 0 + 10 +15035.130074 + 20 +10249.080104 + 30 +0.0 + 11 +15035.130074 + 21 +10249.080104 + 31 +0.0 + 0 +LINE + 5 +1C50 + 8 +0 + 62 + 0 + 10 +14877.927766 + 20 +10284.160987 + 30 +0.0 + 11 +14877.927766 + 21 +10284.160987 + 31 +0.0 + 0 +LINE + 5 +1C51 + 8 +0 + 62 + 0 + 10 +14883.457346 + 20 +10279.09406 + 30 +0.0 + 11 +14883.457346 + 21 +10279.09406 + 31 +0.0 + 0 +LINE + 5 +1C52 + 8 +0 + 62 + 0 + 10 +14909.556964 + 20 +10255.178167 + 30 +0.0 + 11 +14909.556964 + 21 +10255.178167 + 31 +0.0 + 0 +LINE + 5 +1C53 + 8 +0 + 62 + 0 + 10 +14731.784618 + 20 +10309.108017 + 30 +0.0 + 11 +14731.784618 + 21 +10309.108017 + 31 +0.0 + 0 +LINE + 5 +1C54 + 8 +0 + 62 + 0 + 10 +14757.884236 + 20 +10285.192123 + 30 +0.0 + 11 +14757.884236 + 21 +10285.192123 + 31 +0.0 + 0 +LINE + 5 +1C55 + 8 +0 + 62 + 0 + 10 +14787.743968 + 20 +10257.83072 + 30 +0.0 + 11 +14787.743968 + 21 +10257.83072 + 31 +0.0 + 0 +LINE + 5 +1C56 + 8 +0 + 62 + 0 + 10 +14793.273548 + 20 +10252.763793 + 30 +0.0 + 11 +14793.273548 + 21 +10252.763793 + 31 +0.0 + 0 +INSERT + 5 +1C57 + 8 +SCHRAFFUR + 2 +*X78 + 10 +727.274018 + 20 +-2105.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +HONEY,I +1040 +500.0 +1040 +0.0 +1002 +} + 0 +POLYLINE + 5 +1C58 + 8 +ESTRICH + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21E7 + 8 +ESTRICH + 10 +16452.274018 + 20 +7330.0 + 30 +0.0 + 0 +VERTEX + 5 +21E8 + 8 +ESTRICH + 10 +16452.274018 + 20 +7455.0 + 30 +0.0 + 0 +VERTEX + 5 +21E9 + 8 +ESTRICH + 10 +17292.266155 + 20 +7455.0 + 30 +0.0 + 0 +SEQEND + 5 +21EA + 8 +ESTRICH + 0 +POLYLINE + 5 +1C5D + 8 +ESTRICH + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21EB + 8 +ESTRICH + 10 +17292.266155 + 20 +7330.0 + 30 +0.0 + 0 +VERTEX + 5 +21EC + 8 +ESTRICH + 10 +16452.274018 + 20 +7330.0 + 30 +0.0 + 0 +SEQEND + 5 +21ED + 8 +ESTRICH + 0 +POLYLINE + 5 +1C61 + 8 +ESTRICH + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21EE + 8 +ESTRICH + 10 +16452.274018 + 20 +7130.0 + 30 +0.0 + 0 +VERTEX + 5 +21EF + 8 +ESTRICH + 10 +16452.274018 + 20 +7330.0 + 30 +0.0 + 0 +VERTEX + 5 +21F0 + 8 +ESTRICH + 10 +17292.266155 + 20 +7330.0 + 30 +0.0 + 0 +SEQEND + 5 +21F1 + 8 +ESTRICH + 0 +POLYLINE + 5 +1C66 + 8 +ESTRICH + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21F2 + 8 +ESTRICH + 10 +17292.266155 + 20 +7130.0 + 30 +0.0 + 0 +VERTEX + 5 +21F3 + 8 +ESTRICH + 10 +16452.274018 + 20 +7130.0 + 30 +0.0 + 0 +SEQEND + 5 +21F4 + 8 +ESTRICH + 0 +POLYLINE + 5 +1C6A + 8 +ESTRICH + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21F5 + 8 +ESTRICH + 10 +16452.274018 + 20 +7080.0 + 30 +0.0 + 0 +VERTEX + 5 +21F6 + 8 +ESTRICH + 10 +16452.274018 + 20 +7130.0 + 30 +0.0 + 0 +VERTEX + 5 +21F7 + 8 +ESTRICH + 10 +17292.266155 + 20 +7130.0 + 30 +0.0 + 0 +SEQEND + 5 +21F8 + 8 +ESTRICH + 0 +POLYLINE + 5 +1C6F + 8 +ESTRICH + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21F9 + 8 +ESTRICH + 10 +17292.266155 + 20 +7080.0 + 30 +0.0 + 0 +VERTEX + 5 +21FA + 8 +ESTRICH + 10 +16452.274018 + 20 +7080.0 + 30 +0.0 + 0 +SEQEND + 5 +21FB + 8 +ESTRICH + 0 +POLYLINE + 5 +1C73 + 8 +ESTRICH + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21FC + 8 +ESTRICH + 10 +16452.274018 + 20 +6880.0 + 30 +0.0 + 0 +VERTEX + 5 +21FD + 8 +ESTRICH + 10 +16452.274018 + 20 +7080.0 + 30 +0.0 + 0 +VERTEX + 5 +21FE + 8 +ESTRICH + 10 +17292.266155 + 20 +7080.0 + 30 +0.0 + 0 +SEQEND + 5 +21FF + 8 +ESTRICH + 0 +POLYLINE + 5 +1C78 + 8 +ESTRICH + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2200 + 8 +ESTRICH + 10 +17292.266155 + 20 +6880.0 + 30 +0.0 + 0 +VERTEX + 5 +2201 + 8 +ESTRICH + 10 +16452.274018 + 20 +6880.0 + 30 +0.0 + 0 +SEQEND + 5 +2202 + 8 +ESTRICH + 0 +POLYLINE + 5 +1C7C + 8 +PE-FOLIE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +25.0 + 41 +25.0 + 0 +VERTEX + 5 +2203 + 8 +PE-FOLIE + 10 +16637.274018 + 20 +7115.0 + 30 +0.0 + 0 +VERTEX + 5 +2204 + 8 +PE-FOLIE + 10 +17292.266155 + 20 +7115.0 + 30 +0.0 + 0 +SEQEND + 5 +2205 + 8 +PE-FOLIE + 0 +POLYLINE + 5 +1C80 + 8 +PE-FOLIE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +25.0 + 41 +25.0 + 0 +VERTEX + 5 +2206 + 8 +PE-FOLIE + 10 +16457.274018 + 20 +7095.0 + 30 +0.0 + 0 +VERTEX + 5 +2207 + 8 +PE-FOLIE + 10 +17292.266155 + 20 +7095.0 + 30 +0.0 + 0 +SEQEND + 5 +2208 + 8 +PE-FOLIE + 0 +LINE + 5 +1C84 + 8 +0 + 62 + 0 + 10 +16526.235048 + 20 +7330.0 + 30 +0.0 + 11 +16651.235048 + 21 +7455.0 + 31 +0.0 + 0 +LINE + 5 +1C85 + 8 +0 + 62 + 0 + 10 +16950.499117 + 20 +7330.0 + 30 +0.0 + 11 +17075.499117 + 21 +7455.0 + 31 +0.0 + 0 +LINE + 5 +1C86 + 8 +0 + 62 + 0 + 10 +16596.945726 + 20 +7330.0 + 30 +0.0 + 11 +16721.945726 + 21 +7455.0 + 31 +0.0 + 0 +LINE + 5 +1C87 + 8 +0 + 62 + 0 + 10 +17021.209795 + 20 +7330.0 + 30 +0.0 + 11 +17146.209795 + 21 +7455.0 + 31 +0.0 + 0 +LINE + 5 +1C88 + 8 +0 + 62 + 0 + 10 +16667.656405 + 20 +7330.0 + 30 +0.0 + 11 +16792.656405 + 21 +7455.0 + 31 +0.0 + 0 +LINE + 5 +1C89 + 8 +0 + 62 + 0 + 10 +17091.920473 + 20 +7330.0 + 30 +0.0 + 11 +17216.920473 + 21 +7455.0 + 31 +0.0 + 0 +LINE + 5 +1C8A + 8 +0 + 62 + 0 + 10 +16738.367083 + 20 +7330.0 + 30 +0.0 + 11 +16863.367083 + 21 +7455.0 + 31 +0.0 + 0 +LINE + 5 +1C8B + 8 +0 + 62 + 0 + 10 +17162.631151 + 20 +7330.0 + 30 +0.0 + 11 +17287.631151 + 21 +7455.0 + 31 +0.0 + 0 +LINE + 5 +1C8C + 8 +0 + 62 + 0 + 10 +16452.274018 + 20 +6955.790748 + 30 +0.0 + 11 +16458.524018 + 21 +6955.790748 + 31 +0.0 + 0 +LINE + 5 +1C8D + 8 +0 + 62 + 0 + 10 +16533.524018 + 20 +6955.790748 + 30 +0.0 + 11 +16571.024018 + 21 +6955.790748 + 31 +0.0 + 0 +LINE + 5 +1C8E + 8 +0 + 62 + 0 + 10 +16646.024018 + 20 +6955.790748 + 30 +0.0 + 11 +16683.524018 + 21 +6955.790748 + 31 +0.0 + 0 +LINE + 5 +1C8F + 8 +0 + 62 + 0 + 10 +16758.524018 + 20 +6955.790748 + 30 +0.0 + 11 +16796.024018 + 21 +6955.790748 + 31 +0.0 + 0 +LINE + 5 +1C90 + 8 +0 + 62 + 0 + 10 +16871.024018 + 20 +6955.790748 + 30 +0.0 + 11 +16908.524018 + 21 +6955.790748 + 31 +0.0 + 0 +LINE + 5 +1C91 + 8 +0 + 62 + 0 + 10 +16983.524018 + 20 +6955.790748 + 30 +0.0 + 11 +17021.024018 + 21 +6955.790748 + 31 +0.0 + 0 +LINE + 5 +1C92 + 8 +0 + 62 + 0 + 10 +17096.024018 + 20 +6955.790748 + 30 +0.0 + 11 +17133.524018 + 21 +6955.790748 + 31 +0.0 + 0 +LINE + 5 +1C93 + 8 +0 + 62 + 0 + 10 +17208.524018 + 20 +6955.790748 + 30 +0.0 + 11 +17246.024018 + 21 +6955.790748 + 31 +0.0 + 0 +LINE + 5 +1C94 + 8 +0 + 62 + 0 + 10 +16477.274018 + 20 +6988.2667 + 30 +0.0 + 11 +16514.774018 + 21 +6988.2667 + 31 +0.0 + 0 +LINE + 5 +1C95 + 8 +0 + 62 + 0 + 10 +16589.774018 + 20 +6988.2667 + 30 +0.0 + 11 +16627.274018 + 21 +6988.2667 + 31 +0.0 + 0 +LINE + 5 +1C96 + 8 +0 + 62 + 0 + 10 +16702.274018 + 20 +6988.2667 + 30 +0.0 + 11 +16739.774018 + 21 +6988.2667 + 31 +0.0 + 0 +LINE + 5 +1C97 + 8 +0 + 62 + 0 + 10 +16814.774018 + 20 +6988.2667 + 30 +0.0 + 11 +16852.274018 + 21 +6988.2667 + 31 +0.0 + 0 +LINE + 5 +1C98 + 8 +0 + 62 + 0 + 10 +16927.274018 + 20 +6988.2667 + 30 +0.0 + 11 +16964.774018 + 21 +6988.2667 + 31 +0.0 + 0 +LINE + 5 +1C99 + 8 +0 + 62 + 0 + 10 +17039.774018 + 20 +6988.2667 + 30 +0.0 + 11 +17077.274018 + 21 +6988.2667 + 31 +0.0 + 0 +LINE + 5 +1C9A + 8 +0 + 62 + 0 + 10 +17152.274018 + 20 +6988.2667 + 30 +0.0 + 11 +17189.774018 + 21 +6988.2667 + 31 +0.0 + 0 +LINE + 5 +1C9B + 8 +0 + 62 + 0 + 10 +17264.774018 + 20 +6988.2667 + 30 +0.0 + 11 +17302.274018 + 21 +6988.2667 + 31 +0.0 + 0 +LINE + 5 +1C9C + 8 +0 + 62 + 0 + 10 +16452.274018 + 20 +7020.742653 + 30 +0.0 + 11 +16458.524018 + 21 +7020.742653 + 31 +0.0 + 0 +LINE + 5 +1C9D + 8 +0 + 62 + 0 + 10 +16533.524018 + 20 +7020.742653 + 30 +0.0 + 11 +16571.024018 + 21 +7020.742653 + 31 +0.0 + 0 +LINE + 5 +1C9E + 8 +0 + 62 + 0 + 10 +16646.024018 + 20 +7020.742653 + 30 +0.0 + 11 +16683.524018 + 21 +7020.742653 + 31 +0.0 + 0 +LINE + 5 +1C9F + 8 +0 + 62 + 0 + 10 +16758.524018 + 20 +7020.742653 + 30 +0.0 + 11 +16796.024018 + 21 +7020.742653 + 31 +0.0 + 0 +LINE + 5 +1CA0 + 8 +0 + 62 + 0 + 10 +16871.024018 + 20 +7020.742653 + 30 +0.0 + 11 +16908.524018 + 21 +7020.742653 + 31 +0.0 + 0 +LINE + 5 +1CA1 + 8 +0 + 62 + 0 + 10 +16983.524018 + 20 +7020.742653 + 30 +0.0 + 11 +17021.024018 + 21 +7020.742653 + 31 +0.0 + 0 +LINE + 5 +1CA2 + 8 +0 + 62 + 0 + 10 +17096.024018 + 20 +7020.742653 + 30 +0.0 + 11 +17133.524018 + 21 +7020.742653 + 31 +0.0 + 0 +LINE + 5 +1CA3 + 8 +0 + 62 + 0 + 10 +17208.524018 + 20 +7020.742653 + 30 +0.0 + 11 +17246.024018 + 21 +7020.742653 + 31 +0.0 + 0 +LINE + 5 +1CA4 + 8 +0 + 62 + 0 + 10 +16477.274018 + 20 +7053.218605 + 30 +0.0 + 11 +16514.774018 + 21 +7053.218605 + 31 +0.0 + 0 +LINE + 5 +1CA5 + 8 +0 + 62 + 0 + 10 +16589.774018 + 20 +7053.218605 + 30 +0.0 + 11 +16627.274018 + 21 +7053.218605 + 31 +0.0 + 0 +LINE + 5 +1CA6 + 8 +0 + 62 + 0 + 10 +16702.274018 + 20 +7053.218605 + 30 +0.0 + 11 +16739.774018 + 21 +7053.218605 + 31 +0.0 + 0 +LINE + 5 +1CA7 + 8 +0 + 62 + 0 + 10 +16814.774018 + 20 +7053.218605 + 30 +0.0 + 11 +16852.274018 + 21 +7053.218605 + 31 +0.0 + 0 +LINE + 5 +1CA8 + 8 +0 + 62 + 0 + 10 +16927.274018 + 20 +7053.218605 + 30 +0.0 + 11 +16964.774018 + 21 +7053.218605 + 31 +0.0 + 0 +LINE + 5 +1CA9 + 8 +0 + 62 + 0 + 10 +17039.774018 + 20 +7053.218605 + 30 +0.0 + 11 +17077.274018 + 21 +7053.218605 + 31 +0.0 + 0 +LINE + 5 +1CAA + 8 +0 + 62 + 0 + 10 +17152.274018 + 20 +7053.218605 + 30 +0.0 + 11 +17189.774018 + 21 +7053.218605 + 31 +0.0 + 0 +LINE + 5 +1CAB + 8 +0 + 62 + 0 + 10 +17264.774018 + 20 +7053.218605 + 30 +0.0 + 11 +17302.274018 + 21 +7053.218605 + 31 +0.0 + 0 +LINE + 5 +1CAC + 8 +0 + 62 + 0 + 10 +16477.274018 + 20 +6923.314795 + 30 +0.0 + 11 +16514.774018 + 21 +6923.314795 + 31 +0.0 + 0 +LINE + 5 +1CAD + 8 +0 + 62 + 0 + 10 +16589.774018 + 20 +6923.314795 + 30 +0.0 + 11 +16627.274018 + 21 +6923.314795 + 31 +0.0 + 0 +LINE + 5 +1CAE + 8 +0 + 62 + 0 + 10 +16702.274018 + 20 +6923.314795 + 30 +0.0 + 11 +16739.774018 + 21 +6923.314795 + 31 +0.0 + 0 +LINE + 5 +1CAF + 8 +0 + 62 + 0 + 10 +16814.774018 + 20 +6923.314795 + 30 +0.0 + 11 +16852.274018 + 21 +6923.314795 + 31 +0.0 + 0 +LINE + 5 +1CB0 + 8 +0 + 62 + 0 + 10 +16927.274018 + 20 +6923.314795 + 30 +0.0 + 11 +16964.774018 + 21 +6923.314795 + 31 +0.0 + 0 +LINE + 5 +1CB1 + 8 +0 + 62 + 0 + 10 +17039.774018 + 20 +6923.314795 + 30 +0.0 + 11 +17077.274018 + 21 +6923.314795 + 31 +0.0 + 0 +LINE + 5 +1CB2 + 8 +0 + 62 + 0 + 10 +17152.274018 + 20 +6923.314795 + 30 +0.0 + 11 +17189.774018 + 21 +6923.314795 + 31 +0.0 + 0 +LINE + 5 +1CB3 + 8 +0 + 62 + 0 + 10 +17264.774018 + 20 +6923.314795 + 30 +0.0 + 11 +17302.274018 + 21 +6923.314795 + 31 +0.0 + 0 +LINE + 5 +1CB4 + 8 +0 + 62 + 0 + 10 +16452.274018 + 20 +6890.838843 + 30 +0.0 + 11 +16458.524018 + 21 +6890.838843 + 31 +0.0 + 0 +LINE + 5 +1CB5 + 8 +0 + 62 + 0 + 10 +16533.524018 + 20 +6890.838843 + 30 +0.0 + 11 +16571.024018 + 21 +6890.838843 + 31 +0.0 + 0 +LINE + 5 +1CB6 + 8 +0 + 62 + 0 + 10 +16646.024018 + 20 +6890.838843 + 30 +0.0 + 11 +16683.524018 + 21 +6890.838843 + 31 +0.0 + 0 +LINE + 5 +1CB7 + 8 +0 + 62 + 0 + 10 +16758.524018 + 20 +6890.838843 + 30 +0.0 + 11 +16796.024018 + 21 +6890.838843 + 31 +0.0 + 0 +LINE + 5 +1CB8 + 8 +0 + 62 + 0 + 10 +16871.024018 + 20 +6890.838843 + 30 +0.0 + 11 +16908.524018 + 21 +6890.838843 + 31 +0.0 + 0 +LINE + 5 +1CB9 + 8 +0 + 62 + 0 + 10 +16983.524018 + 20 +6890.838843 + 30 +0.0 + 11 +17021.024018 + 21 +6890.838843 + 31 +0.0 + 0 +LINE + 5 +1CBA + 8 +0 + 62 + 0 + 10 +17096.024018 + 20 +6890.838843 + 30 +0.0 + 11 +17133.524018 + 21 +6890.838843 + 31 +0.0 + 0 +LINE + 5 +1CBB + 8 +0 + 62 + 0 + 10 +17208.524018 + 20 +6890.838843 + 30 +0.0 + 11 +17246.024018 + 21 +6890.838843 + 31 +0.0 + 0 +LINE + 5 +1CBC + 8 +0 + 62 + 0 + 10 +16983.523947 + 20 +6890.838841 + 30 +0.0 + 11 +16964.773947 + 21 +6923.314794 + 31 +0.0 + 0 +LINE + 5 +1CBD + 8 +0 + 62 + 0 + 10 +16927.273947 + 20 +6988.266699 + 30 +0.0 + 11 +16908.523947 + 21 +7020.742652 + 31 +0.0 + 0 +LINE + 5 +1CBE + 8 +0 + 62 + 0 + 10 +16927.273947 + 20 +6923.314794 + 30 +0.0 + 11 +16908.523947 + 21 +6955.790747 + 31 +0.0 + 0 +LINE + 5 +1CBF + 8 +0 + 62 + 0 + 10 +16871.023947 + 20 +7020.742652 + 30 +0.0 + 11 +16852.273947 + 21 +7053.218605 + 31 +0.0 + 0 +LINE + 5 +1CC0 + 8 +0 + 62 + 0 + 10 +16914.781756 + 20 +6880.0 + 30 +0.0 + 11 +16908.523948 + 21 +6890.838841 + 31 +0.0 + 0 +LINE + 5 +1CC1 + 8 +0 + 62 + 0 + 10 +16871.023948 + 20 +6955.790747 + 30 +0.0 + 11 +16852.273948 + 21 +6988.266699 + 31 +0.0 + 0 +LINE + 5 +1CC2 + 8 +0 + 62 + 0 + 10 +16814.773948 + 20 +7053.218605 + 30 +0.0 + 11 +16799.311702 + 21 +7080.0 + 31 +0.0 + 0 +LINE + 5 +1CC3 + 8 +0 + 62 + 0 + 10 +16871.023948 + 20 +6890.838841 + 30 +0.0 + 11 +16852.273948 + 21 +6923.314794 + 31 +0.0 + 0 +LINE + 5 +1CC4 + 8 +0 + 62 + 0 + 10 +16814.773948 + 20 +6988.266699 + 30 +0.0 + 11 +16796.023948 + 21 +7020.742652 + 31 +0.0 + 0 +LINE + 5 +1CC5 + 8 +0 + 62 + 0 + 10 +16814.773948 + 20 +6923.314794 + 30 +0.0 + 11 +16796.023948 + 21 +6955.790747 + 31 +0.0 + 0 +LINE + 5 +1CC6 + 8 +0 + 62 + 0 + 10 +16758.523948 + 20 +7020.742652 + 30 +0.0 + 11 +16739.773948 + 21 +7053.218605 + 31 +0.0 + 0 +LINE + 5 +1CC7 + 8 +0 + 62 + 0 + 10 +16802.281756 + 20 +6880.0 + 30 +0.0 + 11 +16796.023948 + 21 +6890.838842 + 31 +0.0 + 0 +LINE + 5 +1CC8 + 8 +0 + 62 + 0 + 10 +16758.523948 + 20 +6955.790747 + 30 +0.0 + 11 +16739.773948 + 21 +6988.2667 + 31 +0.0 + 0 +LINE + 5 +1CC9 + 8 +0 + 62 + 0 + 10 +16702.273948 + 20 +7053.218605 + 30 +0.0 + 11 +16686.811702 + 21 +7080.0 + 31 +0.0 + 0 +LINE + 5 +1CCA + 8 +0 + 62 + 0 + 10 +16758.523948 + 20 +6890.838842 + 30 +0.0 + 11 +16739.773948 + 21 +6923.314794 + 31 +0.0 + 0 +LINE + 5 +1CCB + 8 +0 + 62 + 0 + 10 +16702.273948 + 20 +6988.2667 + 30 +0.0 + 11 +16683.523948 + 21 +7020.742652 + 31 +0.0 + 0 +LINE + 5 +1CCC + 8 +0 + 62 + 0 + 10 +16702.273948 + 20 +6923.314794 + 30 +0.0 + 11 +16683.523948 + 21 +6955.790747 + 31 +0.0 + 0 +LINE + 5 +1CCD + 8 +0 + 62 + 0 + 10 +16646.023948 + 20 +7020.742652 + 30 +0.0 + 11 +16627.273948 + 21 +7053.218605 + 31 +0.0 + 0 +LINE + 5 +1CCE + 8 +0 + 62 + 0 + 10 +16689.781757 + 20 +6880.0 + 30 +0.0 + 11 +16683.523948 + 21 +6890.838842 + 31 +0.0 + 0 +LINE + 5 +1CCF + 8 +0 + 62 + 0 + 10 +16646.023948 + 20 +6955.790747 + 30 +0.0 + 11 +16627.273948 + 21 +6988.2667 + 31 +0.0 + 0 +LINE + 5 +1CD0 + 8 +0 + 62 + 0 + 10 +16589.773948 + 20 +7053.218605 + 30 +0.0 + 11 +16574.311703 + 21 +7080.0 + 31 +0.0 + 0 +LINE + 5 +1CD1 + 8 +0 + 62 + 0 + 10 +16646.023948 + 20 +6890.838842 + 30 +0.0 + 11 +16627.273948 + 21 +6923.314795 + 31 +0.0 + 0 +LINE + 5 +1CD2 + 8 +0 + 62 + 0 + 10 +16589.773948 + 20 +6988.2667 + 30 +0.0 + 11 +16571.023948 + 21 +7020.742652 + 31 +0.0 + 0 +LINE + 5 +1CD3 + 8 +0 + 62 + 0 + 10 +16589.773949 + 20 +6923.314795 + 30 +0.0 + 11 +16571.023949 + 21 +6955.790747 + 31 +0.0 + 0 +LINE + 5 +1CD4 + 8 +0 + 62 + 0 + 10 +16533.523949 + 20 +7020.742652 + 30 +0.0 + 11 +16514.773949 + 21 +7053.218605 + 31 +0.0 + 0 +LINE + 5 +1CD5 + 8 +0 + 62 + 0 + 10 +16577.281757 + 20 +6880.0 + 30 +0.0 + 11 +16571.023949 + 21 +6890.838842 + 31 +0.0 + 0 +LINE + 5 +1CD6 + 8 +0 + 62 + 0 + 10 +16533.523949 + 20 +6955.790747 + 30 +0.0 + 11 +16514.773949 + 21 +6988.2667 + 31 +0.0 + 0 +LINE + 5 +1CD7 + 8 +0 + 62 + 0 + 10 +16477.273949 + 20 +7053.218605 + 30 +0.0 + 11 +16461.811703 + 21 +7080.0 + 31 +0.0 + 0 +LINE + 5 +1CD8 + 8 +0 + 62 + 0 + 10 +16533.523949 + 20 +6890.838842 + 30 +0.0 + 11 +16514.773949 + 21 +6923.314795 + 31 +0.0 + 0 +LINE + 5 +1CD9 + 8 +0 + 62 + 0 + 10 +16477.273949 + 20 +6988.2667 + 30 +0.0 + 11 +16458.523949 + 21 +7020.742653 + 31 +0.0 + 0 +LINE + 5 +1CDA + 8 +0 + 62 + 0 + 10 +16477.273949 + 20 +6923.314795 + 30 +0.0 + 11 +16458.523949 + 21 +6955.790747 + 31 +0.0 + 0 +LINE + 5 +1CDB + 8 +0 + 62 + 0 + 10 +16464.781758 + 20 +6880.0 + 30 +0.0 + 11 +16458.523949 + 21 +6890.838842 + 31 +0.0 + 0 +LINE + 5 +1CDC + 8 +0 + 62 + 0 + 10 +17027.281755 + 20 +6880.0 + 30 +0.0 + 11 +17021.023947 + 21 +6890.838841 + 31 +0.0 + 0 +LINE + 5 +1CDD + 8 +0 + 62 + 0 + 10 +16983.523947 + 20 +6955.790746 + 30 +0.0 + 11 +16964.773947 + 21 +6988.266699 + 31 +0.0 + 0 +LINE + 5 +1CDE + 8 +0 + 62 + 0 + 10 +16927.273947 + 20 +7053.218604 + 30 +0.0 + 11 +16911.811701 + 21 +7080.0 + 31 +0.0 + 0 +LINE + 5 +1CDF + 8 +0 + 62 + 0 + 10 +17039.773947 + 20 +6923.314794 + 30 +0.0 + 11 +17021.023947 + 21 +6955.790746 + 31 +0.0 + 0 +LINE + 5 +1CE0 + 8 +0 + 62 + 0 + 10 +16983.523947 + 20 +7020.742652 + 30 +0.0 + 11 +16964.773947 + 21 +7053.218604 + 31 +0.0 + 0 +LINE + 5 +1CE1 + 8 +0 + 62 + 0 + 10 +17096.023947 + 20 +6890.838841 + 30 +0.0 + 11 +17077.273947 + 21 +6923.314794 + 31 +0.0 + 0 +LINE + 5 +1CE2 + 8 +0 + 62 + 0 + 10 +17039.773947 + 20 +6988.266699 + 30 +0.0 + 11 +17021.023947 + 21 +7020.742652 + 31 +0.0 + 0 +LINE + 5 +1CE3 + 8 +0 + 62 + 0 + 10 +17139.781755 + 20 +6880.0 + 30 +0.0 + 11 +17133.523947 + 21 +6890.838841 + 31 +0.0 + 0 +LINE + 5 +1CE4 + 8 +0 + 62 + 0 + 10 +17096.023947 + 20 +6955.790746 + 30 +0.0 + 11 +17077.273947 + 21 +6988.266699 + 31 +0.0 + 0 +LINE + 5 +1CE5 + 8 +0 + 62 + 0 + 10 +17039.773947 + 20 +7053.218604 + 30 +0.0 + 11 +17024.311701 + 21 +7080.0 + 31 +0.0 + 0 +LINE + 5 +1CE6 + 8 +0 + 62 + 0 + 10 +17152.273947 + 20 +6923.314794 + 30 +0.0 + 11 +17133.523947 + 21 +6955.790746 + 31 +0.0 + 0 +LINE + 5 +1CE7 + 8 +0 + 62 + 0 + 10 +17096.023947 + 20 +7020.742651 + 30 +0.0 + 11 +17077.273947 + 21 +7053.218604 + 31 +0.0 + 0 +LINE + 5 +1CE8 + 8 +0 + 62 + 0 + 10 +17208.523947 + 20 +6890.838841 + 30 +0.0 + 11 +17189.773947 + 21 +6923.314793 + 31 +0.0 + 0 +LINE + 5 +1CE9 + 8 +0 + 62 + 0 + 10 +17152.273947 + 20 +6988.266699 + 30 +0.0 + 11 +17133.523947 + 21 +7020.742651 + 31 +0.0 + 0 +LINE + 5 +1CEA + 8 +0 + 62 + 0 + 10 +17252.281754 + 20 +6880.0 + 30 +0.0 + 11 +17246.023946 + 21 +6890.838841 + 31 +0.0 + 0 +LINE + 5 +1CEB + 8 +0 + 62 + 0 + 10 +17208.523946 + 20 +6955.790746 + 30 +0.0 + 11 +17189.773946 + 21 +6988.266699 + 31 +0.0 + 0 +LINE + 5 +1CEC + 8 +0 + 62 + 0 + 10 +17152.273946 + 20 +7053.218604 + 30 +0.0 + 11 +17136.8117 + 21 +7080.0 + 31 +0.0 + 0 +LINE + 5 +1CED + 8 +0 + 62 + 0 + 10 +17264.773946 + 20 +6923.314793 + 30 +0.0 + 11 +17246.023946 + 21 +6955.790746 + 31 +0.0 + 0 +LINE + 5 +1CEE + 8 +0 + 62 + 0 + 10 +17208.523946 + 20 +7020.742651 + 30 +0.0 + 11 +17189.773946 + 21 +7053.218604 + 31 +0.0 + 0 +LINE + 5 +1CEF + 8 +0 + 62 + 0 + 10 +17264.773946 + 20 +6988.266699 + 30 +0.0 + 11 +17246.023946 + 21 +7020.742651 + 31 +0.0 + 0 +LINE + 5 +1CF0 + 8 +0 + 62 + 0 + 10 +17264.773946 + 20 +7053.218604 + 30 +0.0 + 11 +17249.3117 + 21 +7080.0 + 31 +0.0 + 0 +LINE + 5 +1CF1 + 8 +0 + 62 + 0 + 10 +16864.766138 + 20 +6880.0 + 30 +0.0 + 11 +16871.023982 + 21 +6890.838903 + 31 +0.0 + 0 +LINE + 5 +1CF2 + 8 +0 + 62 + 0 + 10 +16908.523982 + 20 +6955.790808 + 30 +0.0 + 11 +16927.273982 + 21 +6988.26676 + 31 +0.0 + 0 +LINE + 5 +1CF3 + 8 +0 + 62 + 0 + 10 +16964.773982 + 20 +7053.218666 + 30 +0.0 + 11 +16980.236192 + 21 +7080.0 + 31 +0.0 + 0 +LINE + 5 +1CF4 + 8 +0 + 62 + 0 + 10 +16852.273982 + 20 +6923.314855 + 30 +0.0 + 11 +16871.023982 + 21 +6955.790808 + 31 +0.0 + 0 +LINE + 5 +1CF5 + 8 +0 + 62 + 0 + 10 +16908.523982 + 20 +7020.742713 + 30 +0.0 + 11 +16927.273982 + 21 +7053.218666 + 31 +0.0 + 0 +LINE + 5 +1CF6 + 8 +0 + 62 + 0 + 10 +16796.023982 + 20 +6890.838902 + 30 +0.0 + 11 +16814.773982 + 21 +6923.314855 + 31 +0.0 + 0 +LINE + 5 +1CF7 + 8 +0 + 62 + 0 + 10 +16852.273982 + 20 +6988.26676 + 30 +0.0 + 11 +16871.023982 + 21 +7020.742713 + 31 +0.0 + 0 +LINE + 5 +1CF8 + 8 +0 + 62 + 0 + 10 +16752.266139 + 20 +6880.0 + 30 +0.0 + 11 +16758.523982 + 21 +6890.838902 + 31 +0.0 + 0 +LINE + 5 +1CF9 + 8 +0 + 62 + 0 + 10 +16796.023982 + 20 +6955.790808 + 30 +0.0 + 11 +16814.773982 + 21 +6988.26676 + 31 +0.0 + 0 +LINE + 5 +1CFA + 8 +0 + 62 + 0 + 10 +16852.273982 + 20 +7053.218666 + 30 +0.0 + 11 +16867.736193 + 21 +7080.0 + 31 +0.0 + 0 +LINE + 5 +1CFB + 8 +0 + 62 + 0 + 10 +16739.773982 + 20 +6923.314855 + 30 +0.0 + 11 +16758.523982 + 21 +6955.790808 + 31 +0.0 + 0 +LINE + 5 +1CFC + 8 +0 + 62 + 0 + 10 +16796.023982 + 20 +7020.742713 + 30 +0.0 + 11 +16814.773982 + 21 +7053.218665 + 31 +0.0 + 0 +LINE + 5 +1CFD + 8 +0 + 62 + 0 + 10 +16683.523982 + 20 +6890.838902 + 30 +0.0 + 11 +16702.273982 + 21 +6923.314855 + 31 +0.0 + 0 +LINE + 5 +1CFE + 8 +0 + 62 + 0 + 10 +16739.773982 + 20 +6988.26676 + 30 +0.0 + 11 +16758.523982 + 21 +7020.742713 + 31 +0.0 + 0 +LINE + 5 +1CFF + 8 +0 + 62 + 0 + 10 +16639.766139 + 20 +6880.0 + 30 +0.0 + 11 +16646.023982 + 21 +6890.838902 + 31 +0.0 + 0 +LINE + 5 +1D00 + 8 +0 + 62 + 0 + 10 +16683.523982 + 20 +6955.790807 + 30 +0.0 + 11 +16702.273982 + 21 +6988.26676 + 31 +0.0 + 0 +LINE + 5 +1D01 + 8 +0 + 62 + 0 + 10 +16739.773982 + 20 +7053.218665 + 30 +0.0 + 11 +16755.236193 + 21 +7080.0 + 31 +0.0 + 0 +LINE + 5 +1D02 + 8 +0 + 62 + 0 + 10 +16627.273983 + 20 +6923.314855 + 30 +0.0 + 11 +16646.023983 + 21 +6955.790807 + 31 +0.0 + 0 +LINE + 5 +1D03 + 8 +0 + 62 + 0 + 10 +16683.523983 + 20 +7020.742713 + 30 +0.0 + 11 +16702.273983 + 21 +7053.218665 + 31 +0.0 + 0 +LINE + 5 +1D04 + 8 +0 + 62 + 0 + 10 +16571.023983 + 20 +6890.838902 + 30 +0.0 + 11 +16589.773983 + 21 +6923.314855 + 31 +0.0 + 0 +LINE + 5 +1D05 + 8 +0 + 62 + 0 + 10 +16627.273983 + 20 +6988.26676 + 30 +0.0 + 11 +16646.023983 + 21 +7020.742713 + 31 +0.0 + 0 +LINE + 5 +1D06 + 8 +0 + 62 + 0 + 10 +16527.26614 + 20 +6880.0 + 30 +0.0 + 11 +16533.523983 + 21 +6890.838902 + 31 +0.0 + 0 +LINE + 5 +1D07 + 8 +0 + 62 + 0 + 10 +16571.023983 + 20 +6955.790807 + 30 +0.0 + 11 +16589.773983 + 21 +6988.26676 + 31 +0.0 + 0 +LINE + 5 +1D08 + 8 +0 + 62 + 0 + 10 +16627.273983 + 20 +7053.218665 + 30 +0.0 + 11 +16642.736194 + 21 +7080.0 + 31 +0.0 + 0 +LINE + 5 +1D09 + 8 +0 + 62 + 0 + 10 +16514.773983 + 20 +6923.314854 + 30 +0.0 + 11 +16533.523983 + 21 +6955.790807 + 31 +0.0 + 0 +LINE + 5 +1D0A + 8 +0 + 62 + 0 + 10 +16571.023983 + 20 +7020.742712 + 30 +0.0 + 11 +16589.773983 + 21 +7053.218665 + 31 +0.0 + 0 +LINE + 5 +1D0B + 8 +0 + 62 + 0 + 10 +16458.523983 + 20 +6890.838902 + 30 +0.0 + 11 +16477.273983 + 21 +6923.314854 + 31 +0.0 + 0 +LINE + 5 +1D0C + 8 +0 + 62 + 0 + 10 +16514.773983 + 20 +6988.26676 + 30 +0.0 + 11 +16533.523983 + 21 +7020.742712 + 31 +0.0 + 0 +LINE + 5 +1D0D + 8 +0 + 62 + 0 + 10 +16458.523983 + 20 +6955.790807 + 30 +0.0 + 11 +16477.273983 + 21 +6988.26676 + 31 +0.0 + 0 +LINE + 5 +1D0E + 8 +0 + 62 + 0 + 10 +16514.773983 + 20 +7053.218665 + 30 +0.0 + 11 +16530.236194 + 21 +7080.0 + 31 +0.0 + 0 +LINE + 5 +1D0F + 8 +0 + 62 + 0 + 10 +16458.523983 + 20 +7020.742712 + 30 +0.0 + 11 +16477.273983 + 21 +7053.218665 + 31 +0.0 + 0 +LINE + 5 +1D10 + 8 +0 + 62 + 0 + 10 +16908.523982 + 20 +6890.838903 + 30 +0.0 + 11 +16927.273982 + 21 +6923.314855 + 31 +0.0 + 0 +LINE + 5 +1D11 + 8 +0 + 62 + 0 + 10 +16964.773982 + 20 +6988.266761 + 30 +0.0 + 11 +16983.523982 + 21 +7020.742713 + 31 +0.0 + 0 +LINE + 5 +1D12 + 8 +0 + 62 + 0 + 10 +16964.773981 + 20 +6923.314855 + 30 +0.0 + 11 +16983.523981 + 21 +6955.790808 + 31 +0.0 + 0 +LINE + 5 +1D13 + 8 +0 + 62 + 0 + 10 +17021.023981 + 20 +7020.742713 + 30 +0.0 + 11 +17039.773981 + 21 +7053.218666 + 31 +0.0 + 0 +LINE + 5 +1D14 + 8 +0 + 62 + 0 + 10 +16977.266138 + 20 +6880.0 + 30 +0.0 + 11 +16983.523981 + 21 +6890.838903 + 31 +0.0 + 0 +LINE + 5 +1D15 + 8 +0 + 62 + 0 + 10 +17021.023981 + 20 +6955.790808 + 30 +0.0 + 11 +17039.773981 + 21 +6988.266761 + 31 +0.0 + 0 +LINE + 5 +1D16 + 8 +0 + 62 + 0 + 10 +17077.273981 + 20 +7053.218666 + 30 +0.0 + 11 +17092.736192 + 21 +7080.0 + 31 +0.0 + 0 +LINE + 5 +1D17 + 8 +0 + 62 + 0 + 10 +17021.023981 + 20 +6890.838903 + 30 +0.0 + 11 +17039.773981 + 21 +6923.314855 + 31 +0.0 + 0 +LINE + 5 +1D18 + 8 +0 + 62 + 0 + 10 +17077.273981 + 20 +6988.266761 + 30 +0.0 + 11 +17096.023981 + 21 +7020.742713 + 31 +0.0 + 0 +LINE + 5 +1D19 + 8 +0 + 62 + 0 + 10 +17077.273981 + 20 +6923.314856 + 30 +0.0 + 11 +17096.023981 + 21 +6955.790808 + 31 +0.0 + 0 +LINE + 5 +1D1A + 8 +0 + 62 + 0 + 10 +17133.523981 + 20 +7020.742713 + 30 +0.0 + 11 +17152.273981 + 21 +7053.218666 + 31 +0.0 + 0 +LINE + 5 +1D1B + 8 +0 + 62 + 0 + 10 +17089.766137 + 20 +6880.0 + 30 +0.0 + 11 +17096.023981 + 21 +6890.838903 + 31 +0.0 + 0 +LINE + 5 +1D1C + 8 +0 + 62 + 0 + 10 +17133.523981 + 20 +6955.790808 + 30 +0.0 + 11 +17152.273981 + 21 +6988.266761 + 31 +0.0 + 0 +LINE + 5 +1D1D + 8 +0 + 62 + 0 + 10 +17189.773981 + 20 +7053.218666 + 30 +0.0 + 11 +17205.236191 + 21 +7080.0 + 31 +0.0 + 0 +LINE + 5 +1D1E + 8 +0 + 62 + 0 + 10 +17133.523981 + 20 +6890.838903 + 30 +0.0 + 11 +17152.273981 + 21 +6923.314856 + 31 +0.0 + 0 +LINE + 5 +1D1F + 8 +0 + 62 + 0 + 10 +17189.773981 + 20 +6988.266761 + 30 +0.0 + 11 +17208.523981 + 21 +7020.742714 + 31 +0.0 + 0 +LINE + 5 +1D20 + 8 +0 + 62 + 0 + 10 +17189.773981 + 20 +6923.314856 + 30 +0.0 + 11 +17208.523981 + 21 +6955.790808 + 31 +0.0 + 0 +LINE + 5 +1D21 + 8 +0 + 62 + 0 + 10 +17246.023981 + 20 +7020.742714 + 30 +0.0 + 11 +17264.773981 + 21 +7053.218666 + 31 +0.0 + 0 +LINE + 5 +1D22 + 8 +0 + 62 + 0 + 10 +17202.266137 + 20 +6880.0 + 30 +0.0 + 11 +17208.523981 + 21 +6890.838903 + 31 +0.0 + 0 +LINE + 5 +1D23 + 8 +0 + 62 + 0 + 10 +17246.023981 + 20 +6955.790808 + 30 +0.0 + 11 +17264.773981 + 21 +6988.266761 + 31 +0.0 + 0 +LINE + 5 +1D24 + 8 +0 + 62 + 0 + 10 +17246.023981 + 20 +6890.838903 + 30 +0.0 + 11 +17264.773981 + 21 +6923.314856 + 31 +0.0 + 0 +LINE + 5 +1D25 + 8 +0 + 62 + 0 + 10 +14829.178773 + 20 +7330.0 + 30 +0.0 + 11 +14954.178773 + 21 +7455.0 + 31 +0.0 + 0 +LINE + 5 +1D26 + 8 +0 + 62 + 0 + 10 +15253.442842 + 20 +7330.0 + 30 +0.0 + 11 +15378.442842 + 21 +7455.0 + 31 +0.0 + 0 +LINE + 5 +1D27 + 8 +0 + 62 + 0 + 10 +14899.889451 + 20 +7330.0 + 30 +0.0 + 11 +15024.889451 + 21 +7455.0 + 31 +0.0 + 0 +LINE + 5 +1D28 + 8 +0 + 62 + 0 + 10 +15324.15352 + 20 +7330.0 + 30 +0.0 + 11 +15449.15352 + 21 +7455.0 + 31 +0.0 + 0 +LINE + 5 +1D29 + 8 +0 + 62 + 0 + 10 +14970.60013 + 20 +7330.0 + 30 +0.0 + 11 +15095.60013 + 21 +7455.0 + 31 +0.0 + 0 +LINE + 5 +1D2A + 8 +0 + 62 + 0 + 10 +15394.864199 + 20 +7330.0 + 30 +0.0 + 11 +15519.864199 + 21 +7455.0 + 31 +0.0 + 0 +LINE + 5 +1D2B + 8 +0 + 62 + 0 + 10 +15041.310808 + 20 +7330.0 + 30 +0.0 + 11 +15166.310808 + 21 +7455.0 + 31 +0.0 + 0 +LINE + 5 +1D2C + 8 +0 + 62 + 0 + 10 +14679.649752 + 20 +7392.603013 + 30 +0.0 + 11 +14742.046739 + 21 +7455.0 + 31 +0.0 + 0 +LINE + 5 +1D2D + 8 +0 + 62 + 0 + 10 +15465.574877 + 20 +7330.0 + 30 +0.0 + 11 +15590.574877 + 21 +7455.0 + 31 +0.0 + 0 +LINE + 5 +1D2E + 8 +0 + 62 + 0 + 10 +14947.376825 + 20 +7130.0 + 30 +0.0 + 11 +14993.153328 + 21 +7175.776503 + 31 +0.0 + 0 +LINE + 5 +1D2F + 8 +0 + 62 + 0 + 10 +15046.186337 + 20 +7228.809512 + 30 +0.0 + 11 +15099.219345 + 21 +7281.84252 + 31 +0.0 + 0 +LINE + 5 +1D30 + 8 +0 + 62 + 0 + 10 +14841.310808 + 20 +7130.0 + 30 +0.0 + 11 +14887.087311 + 21 +7175.776503 + 31 +0.0 + 0 +LINE + 5 +1D31 + 8 +0 + 62 + 0 + 10 +14940.120319 + 20 +7228.809512 + 30 +0.0 + 11 +14993.153328 + 21 +7281.84252 + 31 +0.0 + 0 +LINE + 5 +1D32 + 8 +0 + 62 + 0 + 10 +14735.244791 + 20 +7130.0 + 30 +0.0 + 11 +14781.021294 + 21 +7175.776503 + 31 +0.0 + 0 +LINE + 5 +1D33 + 8 +0 + 62 + 0 + 10 +14834.054302 + 20 +7228.809512 + 30 +0.0 + 11 +14887.087311 + 21 +7281.84252 + 31 +0.0 + 0 +LINE + 5 +1D34 + 8 +0 + 62 + 0 + 10 +14727.988285 + 20 +7228.809512 + 30 +0.0 + 11 +14781.021294 + 21 +7281.84252 + 31 +0.0 + 0 +LINE + 5 +1D35 + 8 +0 + 62 + 0 + 10 +15053.442842 + 20 +7130.0 + 30 +0.0 + 11 +15099.219345 + 21 +7175.776503 + 31 +0.0 + 0 +LINE + 5 +1D36 + 8 +0 + 62 + 0 + 10 +15152.252354 + 20 +7228.809512 + 30 +0.0 + 11 +15205.285362 + 21 +7281.84252 + 31 +0.0 + 0 +LINE + 5 +1D37 + 8 +0 + 62 + 0 + 10 +15159.508859 + 20 +7130.0 + 30 +0.0 + 11 +15205.285362 + 21 +7175.776503 + 31 +0.0 + 0 +LINE + 5 +1D38 + 8 +0 + 62 + 0 + 10 +15258.318371 + 20 +7228.809512 + 30 +0.0 + 11 +15311.35138 + 21 +7281.84252 + 31 +0.0 + 0 +LINE + 5 +1D39 + 8 +0 + 62 + 0 + 10 +15265.574877 + 20 +7130.0 + 30 +0.0 + 11 +15311.35138 + 21 +7175.776503 + 31 +0.0 + 0 +LINE + 5 +1D3A + 8 +0 + 62 + 0 + 10 +15364.384388 + 20 +7228.809512 + 30 +0.0 + 11 +15417.417397 + 21 +7281.84252 + 31 +0.0 + 0 +LINE + 5 +1D3B + 8 +0 + 62 + 0 + 10 +15371.640894 + 20 +7130.0 + 30 +0.0 + 11 +15417.417397 + 21 +7175.776503 + 31 +0.0 + 0 +LINE + 5 +1D3C + 8 +0 + 62 + 0 + 10 +15470.450405 + 20 +7228.809512 + 30 +0.0 + 11 +15523.483414 + 21 +7281.84252 + 31 +0.0 + 0 +LINE + 5 +1D3D + 8 +0 + 62 + 0 + 10 +15477.706911 + 20 +7130.0 + 30 +0.0 + 11 +15523.483414 + 21 +7175.776503 + 31 +0.0 + 0 +LINE + 5 +1D3E + 8 +0 + 62 + 0 + 10 +15576.516423 + 20 +7228.809512 + 30 +0.0 + 11 +15627.274018 + 21 +7279.567107 + 31 +0.0 + 0 +LINE + 5 +1D3F + 8 +0 + 62 + 0 + 10 +15583.772928 + 20 +7130.0 + 30 +0.0 + 11 +15627.274018 + 21 +7173.50109 + 31 +0.0 + 0 +LINE + 5 +1D40 + 8 +0 + 62 + 0 + 10 +14733.524018 + 20 +6955.790748 + 30 +0.0 + 11 +14771.024018 + 21 +6955.790748 + 31 +0.0 + 0 +LINE + 5 +1D41 + 8 +0 + 62 + 0 + 10 +14846.024018 + 20 +6955.790748 + 30 +0.0 + 11 +14883.524018 + 21 +6955.790748 + 31 +0.0 + 0 +LINE + 5 +1D42 + 8 +0 + 62 + 0 + 10 +14958.524018 + 20 +6955.790748 + 30 +0.0 + 11 +14996.024018 + 21 +6955.790748 + 31 +0.0 + 0 +LINE + 5 +1D43 + 8 +0 + 62 + 0 + 10 +15071.024018 + 20 +6955.790748 + 30 +0.0 + 11 +15108.524018 + 21 +6955.790748 + 31 +0.0 + 0 +LINE + 5 +1D44 + 8 +0 + 62 + 0 + 10 +15183.524018 + 20 +6955.790748 + 30 +0.0 + 11 +15221.024018 + 21 +6955.790748 + 31 +0.0 + 0 +LINE + 5 +1D45 + 8 +0 + 62 + 0 + 10 +15296.024018 + 20 +6955.790748 + 30 +0.0 + 11 +15333.524018 + 21 +6955.790748 + 31 +0.0 + 0 +LINE + 5 +1D46 + 8 +0 + 62 + 0 + 10 +15408.524018 + 20 +6955.790748 + 30 +0.0 + 11 +15446.024018 + 21 +6955.790748 + 31 +0.0 + 0 +LINE + 5 +1D47 + 8 +0 + 62 + 0 + 10 +15521.024018 + 20 +6955.790748 + 30 +0.0 + 11 +15558.524018 + 21 +6955.790748 + 31 +0.0 + 0 +LINE + 5 +1D48 + 8 +0 + 62 + 0 + 10 +14677.274018 + 20 +6988.2667 + 30 +0.0 + 11 +14714.774018 + 21 +6988.2667 + 31 +0.0 + 0 +LINE + 5 +1D49 + 8 +0 + 62 + 0 + 10 +14789.774018 + 20 +6988.2667 + 30 +0.0 + 11 +14827.274018 + 21 +6988.2667 + 31 +0.0 + 0 +LINE + 5 +1D4A + 8 +0 + 62 + 0 + 10 +14902.274018 + 20 +6988.2667 + 30 +0.0 + 11 +14939.774018 + 21 +6988.2667 + 31 +0.0 + 0 +LINE + 5 +1D4B + 8 +0 + 62 + 0 + 10 +15014.774018 + 20 +6988.2667 + 30 +0.0 + 11 +15052.274018 + 21 +6988.2667 + 31 +0.0 + 0 +LINE + 5 +1D4C + 8 +0 + 62 + 0 + 10 +15127.274018 + 20 +6988.2667 + 30 +0.0 + 11 +15164.774018 + 21 +6988.2667 + 31 +0.0 + 0 +LINE + 5 +1D4D + 8 +0 + 62 + 0 + 10 +15239.774018 + 20 +6988.2667 + 30 +0.0 + 11 +15277.274018 + 21 +6988.2667 + 31 +0.0 + 0 +LINE + 5 +1D4E + 8 +0 + 62 + 0 + 10 +15352.274018 + 20 +6988.2667 + 30 +0.0 + 11 +15389.774018 + 21 +6988.2667 + 31 +0.0 + 0 +LINE + 5 +1D4F + 8 +0 + 62 + 0 + 10 +15464.774018 + 20 +6988.2667 + 30 +0.0 + 11 +15502.274018 + 21 +6988.2667 + 31 +0.0 + 0 +LINE + 5 +1D50 + 8 +0 + 62 + 0 + 10 +15577.274018 + 20 +6988.2667 + 30 +0.0 + 11 +15614.774018 + 21 +6988.2667 + 31 +0.0 + 0 +LINE + 5 +1D51 + 8 +0 + 62 + 0 + 10 +14733.524018 + 20 +7020.742653 + 30 +0.0 + 11 +14771.024018 + 21 +7020.742653 + 31 +0.0 + 0 +LINE + 5 +1D52 + 8 +0 + 62 + 0 + 10 +14846.024018 + 20 +7020.742653 + 30 +0.0 + 11 +14883.524018 + 21 +7020.742653 + 31 +0.0 + 0 +LINE + 5 +1D53 + 8 +0 + 62 + 0 + 10 +14958.524018 + 20 +7020.742653 + 30 +0.0 + 11 +14996.024018 + 21 +7020.742653 + 31 +0.0 + 0 +LINE + 5 +1D54 + 8 +0 + 62 + 0 + 10 +15071.024018 + 20 +7020.742653 + 30 +0.0 + 11 +15108.524018 + 21 +7020.742653 + 31 +0.0 + 0 +LINE + 5 +1D55 + 8 +0 + 62 + 0 + 10 +15183.524018 + 20 +7020.742653 + 30 +0.0 + 11 +15221.024018 + 21 +7020.742653 + 31 +0.0 + 0 +LINE + 5 +1D56 + 8 +0 + 62 + 0 + 10 +15296.024018 + 20 +7020.742653 + 30 +0.0 + 11 +15333.524018 + 21 +7020.742653 + 31 +0.0 + 0 +LINE + 5 +1D57 + 8 +0 + 62 + 0 + 10 +15408.524018 + 20 +7020.742653 + 30 +0.0 + 11 +15446.024018 + 21 +7020.742653 + 31 +0.0 + 0 +LINE + 5 +1D58 + 8 +0 + 62 + 0 + 10 +15521.024018 + 20 +7020.742653 + 30 +0.0 + 11 +15558.524018 + 21 +7020.742653 + 31 +0.0 + 0 +LINE + 5 +1D59 + 8 +0 + 62 + 0 + 10 +14677.274018 + 20 +7053.218605 + 30 +0.0 + 11 +14714.774018 + 21 +7053.218605 + 31 +0.0 + 0 +LINE + 5 +1D5A + 8 +0 + 62 + 0 + 10 +14789.774018 + 20 +7053.218605 + 30 +0.0 + 11 +14827.274018 + 21 +7053.218605 + 31 +0.0 + 0 +LINE + 5 +1D5B + 8 +0 + 62 + 0 + 10 +14902.274018 + 20 +7053.218605 + 30 +0.0 + 11 +14939.774018 + 21 +7053.218605 + 31 +0.0 + 0 +LINE + 5 +1D5C + 8 +0 + 62 + 0 + 10 +15014.774018 + 20 +7053.218605 + 30 +0.0 + 11 +15052.274018 + 21 +7053.218605 + 31 +0.0 + 0 +LINE + 5 +1D5D + 8 +0 + 62 + 0 + 10 +15127.274018 + 20 +7053.218605 + 30 +0.0 + 11 +15164.774018 + 21 +7053.218605 + 31 +0.0 + 0 +LINE + 5 +1D5E + 8 +0 + 62 + 0 + 10 +15239.774018 + 20 +7053.218605 + 30 +0.0 + 11 +15277.274018 + 21 +7053.218605 + 31 +0.0 + 0 +LINE + 5 +1D5F + 8 +0 + 62 + 0 + 10 +15352.274018 + 20 +7053.218605 + 30 +0.0 + 11 +15389.774018 + 21 +7053.218605 + 31 +0.0 + 0 +LINE + 5 +1D60 + 8 +0 + 62 + 0 + 10 +15464.774018 + 20 +7053.218605 + 30 +0.0 + 11 +15502.274018 + 21 +7053.218605 + 31 +0.0 + 0 +LINE + 5 +1D61 + 8 +0 + 62 + 0 + 10 +15577.274018 + 20 +7053.218605 + 30 +0.0 + 11 +15614.774018 + 21 +7053.218605 + 31 +0.0 + 0 +LINE + 5 +1D62 + 8 +0 + 62 + 0 + 10 +14677.274018 + 20 +6923.314795 + 30 +0.0 + 11 +14714.774018 + 21 +6923.314795 + 31 +0.0 + 0 +LINE + 5 +1D63 + 8 +0 + 62 + 0 + 10 +14789.774018 + 20 +6923.314795 + 30 +0.0 + 11 +14827.274018 + 21 +6923.314795 + 31 +0.0 + 0 +LINE + 5 +1D64 + 8 +0 + 62 + 0 + 10 +14902.274018 + 20 +6923.314795 + 30 +0.0 + 11 +14939.774018 + 21 +6923.314795 + 31 +0.0 + 0 +LINE + 5 +1D65 + 8 +0 + 62 + 0 + 10 +15014.774018 + 20 +6923.314795 + 30 +0.0 + 11 +15052.274018 + 21 +6923.314795 + 31 +0.0 + 0 +LINE + 5 +1D66 + 8 +0 + 62 + 0 + 10 +15127.274018 + 20 +6923.314795 + 30 +0.0 + 11 +15164.774018 + 21 +6923.314795 + 31 +0.0 + 0 +LINE + 5 +1D67 + 8 +0 + 62 + 0 + 10 +15239.774018 + 20 +6923.314795 + 30 +0.0 + 11 +15277.274018 + 21 +6923.314795 + 31 +0.0 + 0 +LINE + 5 +1D68 + 8 +0 + 62 + 0 + 10 +15352.274018 + 20 +6923.314795 + 30 +0.0 + 11 +15389.774018 + 21 +6923.314795 + 31 +0.0 + 0 +LINE + 5 +1D69 + 8 +0 + 62 + 0 + 10 +15464.774018 + 20 +6923.314795 + 30 +0.0 + 11 +15502.274018 + 21 +6923.314795 + 31 +0.0 + 0 +LINE + 5 +1D6A + 8 +0 + 62 + 0 + 10 +15577.274018 + 20 +6923.314795 + 30 +0.0 + 11 +15614.774018 + 21 +6923.314795 + 31 +0.0 + 0 +LINE + 5 +1D6B + 8 +0 + 62 + 0 + 10 +14733.524018 + 20 +6890.838843 + 30 +0.0 + 11 +14771.024018 + 21 +6890.838843 + 31 +0.0 + 0 +LINE + 5 +1D6C + 8 +0 + 62 + 0 + 10 +14846.024018 + 20 +6890.838843 + 30 +0.0 + 11 +14883.524018 + 21 +6890.838843 + 31 +0.0 + 0 +LINE + 5 +1D6D + 8 +0 + 62 + 0 + 10 +14958.524018 + 20 +6890.838843 + 30 +0.0 + 11 +14996.024018 + 21 +6890.838843 + 31 +0.0 + 0 +LINE + 5 +1D6E + 8 +0 + 62 + 0 + 10 +15071.024018 + 20 +6890.838843 + 30 +0.0 + 11 +15108.524018 + 21 +6890.838843 + 31 +0.0 + 0 +LINE + 5 +1D6F + 8 +0 + 62 + 0 + 10 +15183.524018 + 20 +6890.838843 + 30 +0.0 + 11 +15221.024018 + 21 +6890.838843 + 31 +0.0 + 0 +LINE + 5 +1D70 + 8 +0 + 62 + 0 + 10 +15296.024018 + 20 +6890.838843 + 30 +0.0 + 11 +15333.524018 + 21 +6890.838843 + 31 +0.0 + 0 +LINE + 5 +1D71 + 8 +0 + 62 + 0 + 10 +15408.524018 + 20 +6890.838843 + 30 +0.0 + 11 +15446.024018 + 21 +6890.838843 + 31 +0.0 + 0 +LINE + 5 +1D72 + 8 +0 + 62 + 0 + 10 +15521.024018 + 20 +6890.838843 + 30 +0.0 + 11 +15558.524018 + 21 +6890.838843 + 31 +0.0 + 0 +LINE + 5 +1D73 + 8 +0 + 62 + 0 + 10 +15127.273953 + 20 +6923.314797 + 30 +0.0 + 11 +15108.523953 + 21 +6955.79075 + 31 +0.0 + 0 +LINE + 5 +1D74 + 8 +0 + 62 + 0 + 10 +15071.023953 + 20 +7020.742655 + 30 +0.0 + 11 +15052.273953 + 21 +7053.218608 + 31 +0.0 + 0 +LINE + 5 +1D75 + 8 +0 + 62 + 0 + 10 +15114.781763 + 20 +6880.0 + 30 +0.0 + 11 +15108.523953 + 21 +6890.838845 + 31 +0.0 + 0 +LINE + 5 +1D76 + 8 +0 + 62 + 0 + 10 +15071.023953 + 20 +6955.79075 + 30 +0.0 + 11 +15052.273953 + 21 +6988.266703 + 31 +0.0 + 0 +LINE + 5 +1D77 + 8 +0 + 62 + 0 + 10 +15014.773953 + 20 +7053.218608 + 30 +0.0 + 11 +14999.31171 + 21 +7080.0 + 31 +0.0 + 0 +LINE + 5 +1D78 + 8 +0 + 62 + 0 + 10 +15071.023954 + 20 +6890.838845 + 30 +0.0 + 11 +15052.273954 + 21 +6923.314797 + 31 +0.0 + 0 +LINE + 5 +1D79 + 8 +0 + 62 + 0 + 10 +15014.773954 + 20 +6988.266703 + 30 +0.0 + 11 +14996.023954 + 21 +7020.742655 + 31 +0.0 + 0 +LINE + 5 +1D7A + 8 +0 + 62 + 0 + 10 +15014.773954 + 20 +6923.314798 + 30 +0.0 + 11 +14996.023954 + 21 +6955.79075 + 31 +0.0 + 0 +LINE + 5 +1D7B + 8 +0 + 62 + 0 + 10 +14958.523954 + 20 +7020.742655 + 30 +0.0 + 11 +14939.773954 + 21 +7053.218608 + 31 +0.0 + 0 +LINE + 5 +1D7C + 8 +0 + 62 + 0 + 10 +15002.281764 + 20 +6880.0 + 30 +0.0 + 11 +14996.023954 + 21 +6890.838845 + 31 +0.0 + 0 +LINE + 5 +1D7D + 8 +0 + 62 + 0 + 10 +14958.523954 + 20 +6955.79075 + 30 +0.0 + 11 +14939.773954 + 21 +6988.266703 + 31 +0.0 + 0 +LINE + 5 +1D7E + 8 +0 + 62 + 0 + 10 +14902.273954 + 20 +7053.218608 + 30 +0.0 + 11 +14886.81171 + 21 +7080.0 + 31 +0.0 + 0 +LINE + 5 +1D7F + 8 +0 + 62 + 0 + 10 +14958.523954 + 20 +6890.838845 + 30 +0.0 + 11 +14939.773954 + 21 +6923.314798 + 31 +0.0 + 0 +LINE + 5 +1D80 + 8 +0 + 62 + 0 + 10 +14902.273954 + 20 +6988.266703 + 30 +0.0 + 11 +14883.523954 + 21 +7020.742656 + 31 +0.0 + 0 +LINE + 5 +1D81 + 8 +0 + 62 + 0 + 10 +14902.273954 + 20 +6923.314798 + 30 +0.0 + 11 +14883.523954 + 21 +6955.79075 + 31 +0.0 + 0 +LINE + 5 +1D82 + 8 +0 + 62 + 0 + 10 +14846.023954 + 20 +7020.742656 + 30 +0.0 + 11 +14827.273954 + 21 +7053.218608 + 31 +0.0 + 0 +LINE + 5 +1D83 + 8 +0 + 62 + 0 + 10 +14889.781764 + 20 +6880.0 + 30 +0.0 + 11 +14883.523954 + 21 +6890.838845 + 31 +0.0 + 0 +LINE + 5 +1D84 + 8 +0 + 62 + 0 + 10 +14846.023954 + 20 +6955.79075 + 30 +0.0 + 11 +14827.273954 + 21 +6988.266703 + 31 +0.0 + 0 +LINE + 5 +1D85 + 8 +0 + 62 + 0 + 10 +14789.773954 + 20 +7053.218608 + 30 +0.0 + 11 +14774.311711 + 21 +7080.0 + 31 +0.0 + 0 +LINE + 5 +1D86 + 8 +0 + 62 + 0 + 10 +14846.023954 + 20 +6890.838845 + 30 +0.0 + 11 +14827.273954 + 21 +6923.314798 + 31 +0.0 + 0 +LINE + 5 +1D87 + 8 +0 + 62 + 0 + 10 +14789.773954 + 20 +6988.266703 + 30 +0.0 + 11 +14771.023954 + 21 +7020.742656 + 31 +0.0 + 0 +LINE + 5 +1D88 + 8 +0 + 62 + 0 + 10 +14789.773954 + 20 +6923.314798 + 30 +0.0 + 11 +14771.023954 + 21 +6955.790751 + 31 +0.0 + 0 +LINE + 5 +1D89 + 8 +0 + 62 + 0 + 10 +14733.523954 + 20 +7020.742656 + 30 +0.0 + 11 +14714.773954 + 21 +7053.218609 + 31 +0.0 + 0 +LINE + 5 +1D8A + 8 +0 + 62 + 0 + 10 +14777.281765 + 20 +6880.0 + 30 +0.0 + 11 +14771.023955 + 21 +6890.838845 + 31 +0.0 + 0 +LINE + 5 +1D8B + 8 +0 + 62 + 0 + 10 +14733.523955 + 20 +6955.790751 + 30 +0.0 + 11 +14714.773955 + 21 +6988.266703 + 31 +0.0 + 0 +LINE + 5 +1D8C + 8 +0 + 62 + 0 + 10 +14733.523955 + 20 +6890.838845 + 30 +0.0 + 11 +14714.773955 + 21 +6923.314798 + 31 +0.0 + 0 +LINE + 5 +1D8D + 8 +0 + 62 + 0 + 10 +15183.523953 + 20 +6890.838845 + 30 +0.0 + 11 +15164.773953 + 21 +6923.314797 + 31 +0.0 + 0 +LINE + 5 +1D8E + 8 +0 + 62 + 0 + 10 +15127.273953 + 20 +6988.266703 + 30 +0.0 + 11 +15108.523953 + 21 +7020.742655 + 31 +0.0 + 0 +LINE + 5 +1D8F + 8 +0 + 62 + 0 + 10 +15227.281763 + 20 +6880.0 + 30 +0.0 + 11 +15221.023953 + 21 +6890.838845 + 31 +0.0 + 0 +LINE + 5 +1D90 + 8 +0 + 62 + 0 + 10 +15183.523953 + 20 +6955.79075 + 30 +0.0 + 11 +15164.773953 + 21 +6988.266702 + 31 +0.0 + 0 +LINE + 5 +1D91 + 8 +0 + 62 + 0 + 10 +15127.273953 + 20 +7053.218608 + 30 +0.0 + 11 +15111.811709 + 21 +7080.0 + 31 +0.0 + 0 +LINE + 5 +1D92 + 8 +0 + 62 + 0 + 10 +15239.773953 + 20 +6923.314797 + 30 +0.0 + 11 +15221.023953 + 21 +6955.79075 + 31 +0.0 + 0 +LINE + 5 +1D93 + 8 +0 + 62 + 0 + 10 +15183.523953 + 20 +7020.742655 + 30 +0.0 + 11 +15164.773953 + 21 +7053.218608 + 31 +0.0 + 0 +LINE + 5 +1D94 + 8 +0 + 62 + 0 + 10 +15296.023953 + 20 +6890.838844 + 30 +0.0 + 11 +15277.273953 + 21 +6923.314797 + 31 +0.0 + 0 +LINE + 5 +1D95 + 8 +0 + 62 + 0 + 10 +15239.773953 + 20 +6988.266702 + 30 +0.0 + 11 +15221.023953 + 21 +7020.742655 + 31 +0.0 + 0 +LINE + 5 +1D96 + 8 +0 + 62 + 0 + 10 +15339.781762 + 20 +6880.0 + 30 +0.0 + 11 +15333.523953 + 21 +6890.838844 + 31 +0.0 + 0 +LINE + 5 +1D97 + 8 +0 + 62 + 0 + 10 +15296.023953 + 20 +6955.79075 + 30 +0.0 + 11 +15277.273953 + 21 +6988.266702 + 31 +0.0 + 0 +LINE + 5 +1D98 + 8 +0 + 62 + 0 + 10 +15239.773953 + 20 +7053.218608 + 30 +0.0 + 11 +15224.311709 + 21 +7080.0 + 31 +0.0 + 0 +LINE + 5 +1D99 + 8 +0 + 62 + 0 + 10 +15352.273953 + 20 +6923.314797 + 30 +0.0 + 11 +15333.523953 + 21 +6955.79075 + 31 +0.0 + 0 +LINE + 5 +1D9A + 8 +0 + 62 + 0 + 10 +15296.023953 + 20 +7020.742655 + 30 +0.0 + 11 +15277.273953 + 21 +7053.218607 + 31 +0.0 + 0 +LINE + 5 +1D9B + 8 +0 + 62 + 0 + 10 +15408.523952 + 20 +6890.838844 + 30 +0.0 + 11 +15389.773952 + 21 +6923.314797 + 31 +0.0 + 0 +LINE + 5 +1D9C + 8 +0 + 62 + 0 + 10 +15352.273952 + 20 +6988.266702 + 30 +0.0 + 11 +15333.523952 + 21 +7020.742655 + 31 +0.0 + 0 +LINE + 5 +1D9D + 8 +0 + 62 + 0 + 10 +15452.281762 + 20 +6880.0 + 30 +0.0 + 11 +15446.023952 + 21 +6890.838844 + 31 +0.0 + 0 +LINE + 5 +1D9E + 8 +0 + 62 + 0 + 10 +15408.523952 + 20 +6955.790749 + 30 +0.0 + 11 +15389.773952 + 21 +6988.266702 + 31 +0.0 + 0 +LINE + 5 +1D9F + 8 +0 + 62 + 0 + 10 +15352.273952 + 20 +7053.218607 + 30 +0.0 + 11 +15336.811708 + 21 +7080.0 + 31 +0.0 + 0 +LINE + 5 +1DA0 + 8 +0 + 62 + 0 + 10 +15464.773952 + 20 +6923.314797 + 30 +0.0 + 11 +15446.023952 + 21 +6955.790749 + 31 +0.0 + 0 +LINE + 5 +1DA1 + 8 +0 + 62 + 0 + 10 +15408.523952 + 20 +7020.742655 + 30 +0.0 + 11 +15389.773952 + 21 +7053.218607 + 31 +0.0 + 0 +LINE + 5 +1DA2 + 8 +0 + 62 + 0 + 10 +15521.023952 + 20 +6890.838844 + 30 +0.0 + 11 +15502.273952 + 21 +6923.314797 + 31 +0.0 + 0 +LINE + 5 +1DA3 + 8 +0 + 62 + 0 + 10 +15464.773952 + 20 +6988.266702 + 30 +0.0 + 11 +15446.023952 + 21 +7020.742655 + 31 +0.0 + 0 +LINE + 5 +1DA4 + 8 +0 + 62 + 0 + 10 +15564.781761 + 20 +6880.0 + 30 +0.0 + 11 +15558.523952 + 21 +6890.838844 + 31 +0.0 + 0 +LINE + 5 +1DA5 + 8 +0 + 62 + 0 + 10 +15521.023952 + 20 +6955.790749 + 30 +0.0 + 11 +15502.273952 + 21 +6988.266702 + 31 +0.0 + 0 +LINE + 5 +1DA6 + 8 +0 + 62 + 0 + 10 +15464.773952 + 20 +7053.218607 + 30 +0.0 + 11 +15449.311708 + 21 +7080.0 + 31 +0.0 + 0 +LINE + 5 +1DA7 + 8 +0 + 62 + 0 + 10 +15577.273952 + 20 +6923.314796 + 30 +0.0 + 11 +15558.523952 + 21 +6955.790749 + 31 +0.0 + 0 +LINE + 5 +1DA8 + 8 +0 + 62 + 0 + 10 +15521.023952 + 20 +7020.742654 + 30 +0.0 + 11 +15502.273952 + 21 +7053.218607 + 31 +0.0 + 0 +LINE + 5 +1DA9 + 8 +0 + 62 + 0 + 10 +15627.274018 + 20 +6901.664047 + 30 +0.0 + 11 +15614.773952 + 21 +6923.314796 + 31 +0.0 + 0 +LINE + 5 +1DAA + 8 +0 + 62 + 0 + 10 +15577.273952 + 20 +6988.266702 + 30 +0.0 + 11 +15558.523952 + 21 +7020.742654 + 31 +0.0 + 0 +LINE + 5 +1DAB + 8 +0 + 62 + 0 + 10 +15627.274018 + 20 +6966.615952 + 30 +0.0 + 11 +15614.773952 + 21 +6988.266702 + 31 +0.0 + 0 +LINE + 5 +1DAC + 8 +0 + 62 + 0 + 10 +15577.273952 + 20 +7053.218607 + 30 +0.0 + 11 +15561.811707 + 21 +7080.0 + 31 +0.0 + 0 +LINE + 5 +1DAD + 8 +0 + 62 + 0 + 10 +15627.274018 + 20 +7031.567857 + 30 +0.0 + 11 +15614.773952 + 21 +7053.218607 + 31 +0.0 + 0 +LINE + 5 +1DAE + 8 +0 + 62 + 0 + 10 +15064.766146 + 20 +6880.0 + 30 +0.0 + 11 +15071.023988 + 21 +6890.838899 + 31 +0.0 + 0 +LINE + 5 +1DAF + 8 +0 + 62 + 0 + 10 +15108.523988 + 20 +6955.790804 + 30 +0.0 + 11 +15127.273988 + 21 +6988.266757 + 31 +0.0 + 0 +LINE + 5 +1DB0 + 8 +0 + 62 + 0 + 10 +15164.773988 + 20 +7053.218662 + 30 +0.0 + 11 +15180.2362 + 21 +7080.0 + 31 +0.0 + 0 +LINE + 5 +1DB1 + 8 +0 + 62 + 0 + 10 +15052.273988 + 20 +6923.314852 + 30 +0.0 + 11 +15071.023988 + 21 +6955.790804 + 31 +0.0 + 0 +LINE + 5 +1DB2 + 8 +0 + 62 + 0 + 10 +15108.523988 + 20 +7020.74271 + 30 +0.0 + 11 +15127.273988 + 21 +7053.218662 + 31 +0.0 + 0 +LINE + 5 +1DB3 + 8 +0 + 62 + 0 + 10 +14996.023988 + 20 +6890.838899 + 30 +0.0 + 11 +15014.773988 + 21 +6923.314852 + 31 +0.0 + 0 +LINE + 5 +1DB4 + 8 +0 + 62 + 0 + 10 +15052.273988 + 20 +6988.266757 + 30 +0.0 + 11 +15071.023988 + 21 +7020.74271 + 31 +0.0 + 0 +LINE + 5 +1DB5 + 8 +0 + 62 + 0 + 10 +14952.266147 + 20 +6880.0 + 30 +0.0 + 11 +14958.523988 + 21 +6890.838899 + 31 +0.0 + 0 +LINE + 5 +1DB6 + 8 +0 + 62 + 0 + 10 +14996.023988 + 20 +6955.790804 + 30 +0.0 + 11 +15014.773988 + 21 +6988.266757 + 31 +0.0 + 0 +LINE + 5 +1DB7 + 8 +0 + 62 + 0 + 10 +15052.273988 + 20 +7053.218662 + 30 +0.0 + 11 +15067.736201 + 21 +7080.0 + 31 +0.0 + 0 +LINE + 5 +1DB8 + 8 +0 + 62 + 0 + 10 +14939.773988 + 20 +6923.314851 + 30 +0.0 + 11 +14958.523988 + 21 +6955.790804 + 31 +0.0 + 0 +LINE + 5 +1DB9 + 8 +0 + 62 + 0 + 10 +14996.023988 + 20 +7020.742709 + 30 +0.0 + 11 +15014.773988 + 21 +7053.218662 + 31 +0.0 + 0 +LINE + 5 +1DBA + 8 +0 + 62 + 0 + 10 +14883.523988 + 20 +6890.838899 + 30 +0.0 + 11 +14902.273988 + 21 +6923.314851 + 31 +0.0 + 0 +LINE + 5 +1DBB + 8 +0 + 62 + 0 + 10 +14939.773988 + 20 +6988.266757 + 30 +0.0 + 11 +14958.523988 + 21 +7020.742709 + 31 +0.0 + 0 +LINE + 5 +1DBC + 8 +0 + 62 + 0 + 10 +14839.766147 + 20 +6880.0 + 30 +0.0 + 11 +14846.023988 + 21 +6890.838899 + 31 +0.0 + 0 +LINE + 5 +1DBD + 8 +0 + 62 + 0 + 10 +14883.523988 + 20 +6955.790804 + 30 +0.0 + 11 +14902.273988 + 21 +6988.266757 + 31 +0.0 + 0 +LINE + 5 +1DBE + 8 +0 + 62 + 0 + 10 +14939.773988 + 20 +7053.218662 + 30 +0.0 + 11 +14955.236201 + 21 +7080.0 + 31 +0.0 + 0 +LINE + 5 +1DBF + 8 +0 + 62 + 0 + 10 +14827.273988 + 20 +6923.314851 + 30 +0.0 + 11 +14846.023988 + 21 +6955.790804 + 31 +0.0 + 0 +LINE + 5 +1DC0 + 8 +0 + 62 + 0 + 10 +14883.523988 + 20 +7020.742709 + 30 +0.0 + 11 +14902.273988 + 21 +7053.218662 + 31 +0.0 + 0 +LINE + 5 +1DC1 + 8 +0 + 62 + 0 + 10 +14771.023989 + 20 +6890.838899 + 30 +0.0 + 11 +14789.773989 + 21 +6923.314851 + 31 +0.0 + 0 +LINE + 5 +1DC2 + 8 +0 + 62 + 0 + 10 +14827.273989 + 20 +6988.266756 + 30 +0.0 + 11 +14846.023989 + 21 +7020.742709 + 31 +0.0 + 0 +LINE + 5 +1DC3 + 8 +0 + 62 + 0 + 10 +14727.266148 + 20 +6880.0 + 30 +0.0 + 11 +14733.523989 + 21 +6890.838898 + 31 +0.0 + 0 +LINE + 5 +1DC4 + 8 +0 + 62 + 0 + 10 +14771.023989 + 20 +6955.790804 + 30 +0.0 + 11 +14789.773989 + 21 +6988.266756 + 31 +0.0 + 0 +LINE + 5 +1DC5 + 8 +0 + 62 + 0 + 10 +14827.273989 + 20 +7053.218662 + 30 +0.0 + 11 +14842.736202 + 21 +7080.0 + 31 +0.0 + 0 +LINE + 5 +1DC6 + 8 +0 + 62 + 0 + 10 +14714.773989 + 20 +6923.314851 + 30 +0.0 + 11 +14733.523989 + 21 +6955.790804 + 31 +0.0 + 0 +LINE + 5 +1DC7 + 8 +0 + 62 + 0 + 10 +14771.023989 + 20 +7020.742709 + 30 +0.0 + 11 +14789.773989 + 21 +7053.218662 + 31 +0.0 + 0 +LINE + 5 +1DC8 + 8 +0 + 62 + 0 + 10 +14714.773989 + 20 +6988.266756 + 30 +0.0 + 11 +14733.523989 + 21 +7020.742709 + 31 +0.0 + 0 +LINE + 5 +1DC9 + 8 +0 + 62 + 0 + 10 +14714.773989 + 20 +7053.218661 + 30 +0.0 + 11 +14730.236202 + 21 +7080.0 + 31 +0.0 + 0 +LINE + 5 +1DCA + 8 +0 + 62 + 0 + 10 +15108.523988 + 20 +6890.838899 + 30 +0.0 + 11 +15127.273988 + 21 +6923.314852 + 31 +0.0 + 0 +LINE + 5 +1DCB + 8 +0 + 62 + 0 + 10 +15164.773988 + 20 +6988.266757 + 30 +0.0 + 11 +15183.523988 + 21 +7020.74271 + 31 +0.0 + 0 +LINE + 5 +1DCC + 8 +0 + 62 + 0 + 10 +15164.773987 + 20 +6923.314852 + 30 +0.0 + 11 +15183.523987 + 21 +6955.790805 + 31 +0.0 + 0 +LINE + 5 +1DCD + 8 +0 + 62 + 0 + 10 +15221.023987 + 20 +7020.74271 + 30 +0.0 + 11 +15239.773987 + 21 +7053.218662 + 31 +0.0 + 0 +LINE + 5 +1DCE + 8 +0 + 62 + 0 + 10 +15177.266146 + 20 +6880.0 + 30 +0.0 + 11 +15183.523987 + 21 +6890.838899 + 31 +0.0 + 0 +LINE + 5 +1DCF + 8 +0 + 62 + 0 + 10 +15221.023987 + 20 +6955.790805 + 30 +0.0 + 11 +15239.773987 + 21 +6988.266757 + 31 +0.0 + 0 +LINE + 5 +1DD0 + 8 +0 + 62 + 0 + 10 +15277.273987 + 20 +7053.218663 + 30 +0.0 + 11 +15292.7362 + 21 +7080.0 + 31 +0.0 + 0 +LINE + 5 +1DD1 + 8 +0 + 62 + 0 + 10 +15221.023987 + 20 +6890.838899 + 30 +0.0 + 11 +15239.773987 + 21 +6923.314852 + 31 +0.0 + 0 +LINE + 5 +1DD2 + 8 +0 + 62 + 0 + 10 +15277.273987 + 20 +6988.266757 + 30 +0.0 + 11 +15296.023987 + 21 +7020.74271 + 31 +0.0 + 0 +LINE + 5 +1DD3 + 8 +0 + 62 + 0 + 10 +15277.273987 + 20 +6923.314852 + 30 +0.0 + 11 +15296.023987 + 21 +6955.790805 + 31 +0.0 + 0 +LINE + 5 +1DD4 + 8 +0 + 62 + 0 + 10 +15333.523987 + 20 +7020.74271 + 30 +0.0 + 11 +15352.273987 + 21 +7053.218663 + 31 +0.0 + 0 +LINE + 5 +1DD5 + 8 +0 + 62 + 0 + 10 +15289.766145 + 20 +6880.0 + 30 +0.0 + 11 +15296.023987 + 21 +6890.8389 + 31 +0.0 + 0 +LINE + 5 +1DD6 + 8 +0 + 62 + 0 + 10 +15333.523987 + 20 +6955.790805 + 30 +0.0 + 11 +15352.273987 + 21 +6988.266757 + 31 +0.0 + 0 +LINE + 5 +1DD7 + 8 +0 + 62 + 0 + 10 +15389.773987 + 20 +7053.218663 + 30 +0.0 + 11 +15405.236199 + 21 +7080.0 + 31 +0.0 + 0 +LINE + 5 +1DD8 + 8 +0 + 62 + 0 + 10 +15333.523987 + 20 +6890.8389 + 30 +0.0 + 11 +15352.273987 + 21 +6923.314852 + 31 +0.0 + 0 +LINE + 5 +1DD9 + 8 +0 + 62 + 0 + 10 +15389.773987 + 20 +6988.266758 + 30 +0.0 + 11 +15408.523987 + 21 +7020.74271 + 31 +0.0 + 0 +LINE + 5 +1DDA + 8 +0 + 62 + 0 + 10 +15389.773987 + 20 +6923.314852 + 30 +0.0 + 11 +15408.523987 + 21 +6955.790805 + 31 +0.0 + 0 +LINE + 5 +1DDB + 8 +0 + 62 + 0 + 10 +15446.023987 + 20 +7020.74271 + 30 +0.0 + 11 +15464.773987 + 21 +7053.218663 + 31 +0.0 + 0 +LINE + 5 +1DDC + 8 +0 + 62 + 0 + 10 +15402.266145 + 20 +6880.0 + 30 +0.0 + 11 +15408.523987 + 21 +6890.8389 + 31 +0.0 + 0 +LINE + 5 +1DDD + 8 +0 + 62 + 0 + 10 +15446.023987 + 20 +6955.790805 + 30 +0.0 + 11 +15464.773987 + 21 +6988.266758 + 31 +0.0 + 0 +LINE + 5 +1DDE + 8 +0 + 62 + 0 + 10 +15502.273987 + 20 +7053.218663 + 30 +0.0 + 11 +15517.736199 + 21 +7080.0 + 31 +0.0 + 0 +LINE + 5 +1DDF + 8 +0 + 62 + 0 + 10 +15446.023986 + 20 +6890.8389 + 30 +0.0 + 11 +15464.773986 + 21 +6923.314852 + 31 +0.0 + 0 +LINE + 5 +1DE0 + 8 +0 + 62 + 0 + 10 +15502.273986 + 20 +6988.266758 + 30 +0.0 + 11 +15521.023986 + 21 +7020.74271 + 31 +0.0 + 0 +LINE + 5 +1DE1 + 8 +0 + 62 + 0 + 10 +15502.273986 + 20 +6923.314853 + 30 +0.0 + 11 +15521.023986 + 21 +6955.790805 + 31 +0.0 + 0 +LINE + 5 +1DE2 + 8 +0 + 62 + 0 + 10 +15558.523986 + 20 +7020.74271 + 30 +0.0 + 11 +15577.273986 + 21 +7053.218663 + 31 +0.0 + 0 +LINE + 5 +1DE3 + 8 +0 + 62 + 0 + 10 +15514.766144 + 20 +6880.0 + 30 +0.0 + 11 +15521.023986 + 21 +6890.8389 + 31 +0.0 + 0 +LINE + 5 +1DE4 + 8 +0 + 62 + 0 + 10 +15558.523986 + 20 +6955.790805 + 30 +0.0 + 11 +15577.273986 + 21 +6988.266758 + 31 +0.0 + 0 +LINE + 5 +1DE5 + 8 +0 + 62 + 0 + 10 +15614.773986 + 20 +7053.218663 + 30 +0.0 + 11 +15627.274018 + 21 +7074.869353 + 31 +0.0 + 0 +LINE + 5 +1DE6 + 8 +0 + 62 + 0 + 10 +15558.523986 + 20 +6890.8389 + 30 +0.0 + 11 +15577.273986 + 21 +6923.314853 + 31 +0.0 + 0 +LINE + 5 +1DE7 + 8 +0 + 62 + 0 + 10 +15614.773986 + 20 +6988.266758 + 30 +0.0 + 11 +15627.274018 + 21 +7009.917448 + 31 +0.0 + 0 +LINE + 5 +1DE8 + 8 +0 + 62 + 0 + 10 +15614.773986 + 20 +6923.314853 + 30 +0.0 + 11 +15627.274018 + 21 +6944.965543 + 31 +0.0 + 0 +LINE + 5 +1DE9 + 8 +0 + 62 + 0 + 10 +15627.266144 + 20 +6880.0 + 30 +0.0 + 11 +15627.274018 + 21 +6880.013638 + 31 +0.0 + 0 +POLYLINE + 5 +1DEA + 8 +ESTRICH + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2209 + 8 +ESTRICH + 10 +14679.649752 + 20 +7455.0 + 30 +0.0 + 0 +VERTEX + 5 +220A + 8 +ESTRICH + 10 +15627.274018 + 20 +7455.0 + 30 +0.0 + 0 +VERTEX + 5 +220B + 8 +ESTRICH + 10 +15627.274018 + 20 +7330.0 + 30 +0.0 + 0 +VERTEX + 5 +220C + 8 +ESTRICH + 10 +14679.649752 + 20 +7330.0 + 30 +0.0 + 0 +SEQEND + 5 +220D + 8 +ESTRICH + 0 +POLYLINE + 5 +1DF0 + 8 +ESTRICH + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +220E + 8 +ESTRICH + 10 +14679.649752 + 20 +7330.0 + 30 +0.0 + 0 +VERTEX + 5 +220F + 8 +ESTRICH + 10 +15627.274018 + 20 +7330.0 + 30 +0.0 + 0 +VERTEX + 5 +2210 + 8 +ESTRICH + 10 +15627.274018 + 20 +7130.0 + 30 +0.0 + 0 +VERTEX + 5 +2211 + 8 +ESTRICH + 10 +14679.649752 + 20 +7130.0 + 30 +0.0 + 0 +SEQEND + 5 +2212 + 8 +ESTRICH + 0 +POLYLINE + 5 +1DF6 + 8 +ESTRICH + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2213 + 8 +ESTRICH + 10 +14679.649752 + 20 +7130.0 + 30 +0.0 + 0 +VERTEX + 5 +2214 + 8 +ESTRICH + 10 +15627.274018 + 20 +7130.0 + 30 +0.0 + 0 +VERTEX + 5 +2215 + 8 +ESTRICH + 10 +15627.274018 + 20 +7080.0 + 30 +0.0 + 0 +VERTEX + 5 +2216 + 8 +ESTRICH + 10 +14679.649752 + 20 +7080.0 + 30 +0.0 + 0 +SEQEND + 5 +2217 + 8 +ESTRICH + 0 +POLYLINE + 5 +1DFC + 8 +ESTRICH + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2218 + 8 +ESTRICH + 10 +14679.649752 + 20 +7080.0 + 30 +0.0 + 0 +VERTEX + 5 +2219 + 8 +ESTRICH + 10 +15627.274018 + 20 +7080.0 + 30 +0.0 + 0 +VERTEX + 5 +221A + 8 +ESTRICH + 10 +15627.274018 + 20 +6880.0 + 30 +0.0 + 0 +VERTEX + 5 +221B + 8 +ESTRICH + 10 +14679.649752 + 20 +6880.0 + 30 +0.0 + 0 +SEQEND + 5 +221C + 8 +ESTRICH + 0 +POLYLINE + 5 +1E02 + 8 +PE-FOLIE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +25.0 + 41 +25.0 + 0 +VERTEX + 5 +221D + 8 +PE-FOLIE + 10 +15447.274018 + 20 +7115.0 + 30 +0.0 + 0 +VERTEX + 5 +221E + 8 +PE-FOLIE + 10 +14679.649752 + 20 +7115.0 + 30 +0.0 + 0 +SEQEND + 5 +221F + 8 +PE-FOLIE + 0 +POLYLINE + 5 +1E06 + 8 +PE-FOLIE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +25.0 + 41 +25.0 + 0 +VERTEX + 5 +2220 + 8 +PE-FOLIE + 10 +15622.274018 + 20 +7095.0 + 30 +0.0 + 0 +VERTEX + 5 +2221 + 8 +PE-FOLIE + 10 +14679.649752 + 20 +7095.0 + 30 +0.0 + 0 +SEQEND + 5 +2222 + 8 +PE-FOLIE + 0 +DIMENSION + 5 +1E0A + 8 +BEMASSUNG + 2 +*D79 + 10 +15725.0 + 20 +5180.0 + 30 +0.0 + 11 +15675.0 + 21 +5267.5 + 31 +0.0 + 12 +-295.0 + 22 +-2105.0 + 32 +0.0 + 1 +2 + 13 +15625.0 + 23 +6885.0 + 33 +0.0 + 14 +15725.0 + 24 +6885.0 + 34 +0.0 + 0 +DIMENSION + 5 +1E0B + 8 +BEMASSUNG + 2 +*D93 + 10 +15785.0 + 20 +5180.0 + 30 +0.0 + 11 +15815.0 + 21 +5420.0 + 31 +0.0 + 12 +-295.0 + 22 +-2105.0 + 32 +0.0 + 70 + 128 + 1 +1.25 + 13 +15725.0 + 23 +6885.0 + 33 +0.0 + 14 +15785.0 + 24 +6945.0 + 34 +0.0 + 0 +DIMENSION + 5 +1E0C + 8 +BEMASSUNG + 2 +*D81 + 10 +16290.0 + 20 +5180.0 + 30 +0.0 + 11 +16037.5 + 21 +5267.5 + 31 +0.0 + 12 +-295.0 + 22 +-2105.0 + 32 +0.0 + 1 +8 + 13 +15785.0 + 23 +6945.0 + 33 +0.0 + 14 +16290.0 + 24 +6960.0 + 34 +0.0 + 0 +DIMENSION + 5 +1E0D + 8 +BEMASSUNG + 2 +*D95 + 10 +16355.0 + 20 +5180.0 + 30 +0.0 + 11 +16405.0 + 21 +5435.0 + 31 +0.0 + 12 +-295.0 + 22 +-2105.0 + 32 +0.0 + 70 + 128 + 1 +1.25 + 13 +16290.0 + 23 +6960.0 + 33 +0.0 + 14 +16355.0 + 24 +7355.0 + 34 +0.0 + 0 +DIMENSION + 5 +1E0E + 8 +BEMASSUNG + 2 +*D83 + 10 +16455.0 + 20 +5180.0 + 30 +0.0 + 11 +16405.0 + 21 +5267.5 + 31 +0.0 + 12 +-295.0 + 22 +-2105.0 + 32 +0.0 + 1 +2 + 13 +16355.0 + 23 +7355.0 + 33 +0.0 + 14 +16455.0 + 24 +6895.0 + 34 +0.0 + 0 +DIMENSION + 5 +1E0F + 8 +BEMASSUNG + 2 +*D84 + 10 +18335.0 + 20 +6880.0 + 30 +0.0 + 11 +18247.5 + 21 +6480.0 + 31 +0.0 + 12 +-295.0 + 22 +-2105.0 + 32 +0.0 + 1 +16 + 13 +17275.0 + 23 +6080.0 + 33 +0.0 + 14 +17275.0 + 24 +6880.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +1E10 + 8 +BEMASSUNG + 2 +*D85 + 10 +18335.0 + 20 +7075.0 + 30 +0.0 + 11 +18247.5 + 21 +6977.5 + 31 +0.0 + 12 +-295.0 + 22 +-2105.0 + 32 +0.0 + 1 +4 + 13 +17275.0 + 23 +6880.0 + 33 +0.0 + 14 +17285.0 + 24 +7075.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +1E11 + 8 +BEMASSUNG + 2 +*D86 + 10 +18335.0 + 20 +7135.0 + 30 +0.0 + 11 +18247.5 + 21 +7105.0 + 31 +0.0 + 12 +-295.0 + 22 +-2105.0 + 32 +0.0 + 1 +1 + 13 +17285.0 + 23 +7075.0 + 33 +0.0 + 14 +17280.0 + 24 +7135.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +1E12 + 8 +BEMASSUNG + 2 +*D87 + 10 +18335.0 + 20 +7330.0 + 30 +0.0 + 11 +18247.5 + 21 +7232.5 + 31 +0.0 + 12 +-295.0 + 22 +-2105.0 + 32 +0.0 + 1 +4 + 13 +17280.0 + 23 +7135.0 + 33 +0.0 + 14 +17290.0 + 24 +7330.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +1E13 + 8 +BEMASSUNG + 2 +*D96 + 10 +18335.0 + 20 +7455.0 + 30 +0.0 + 11 +18247.5 + 21 +7515.0 + 31 +0.0 + 12 +-295.0 + 22 +-2105.0 + 32 +0.0 + 70 + 128 + 1 +2 + 13 +17290.0 + 23 +7330.0 + 33 +0.0 + 14 +17290.0 + 24 +7455.0 + 34 +0.0 + 50 +90.0 + 0 +TEXT + 5 +1E14 + 8 +BEMASSUNG + 10 +18235.0 + 20 +7550.0 + 30 +0.0 + 40 +62.5 + 1 +5 + 50 +90.0 + 41 +0.75 + 0 +DIMENSION + 5 +1E15 + 8 +BEMASSUNG + 2 +*D97 + 10 +15325.0 + 20 +7755.0 + 30 +0.0 + 11 +15237.5 + 21 +7605.0 + 31 +0.0 + 12 +-295.0 + 22 +-2105.0 + 32 +0.0 + 1 +6 + 13 +15575.0 + 23 +7455.0 + 33 +0.0 + 14 +15575.0 + 24 +7755.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +1E16 + 8 +BEMASSUNG + 2 +*D98 + 10 +15576.582352 + 20 +8016.000702 + 30 +0.0 + 11 +15652.185913 + 21 +8103.500702 + 31 +0.0 + 12 +-295.0 + 22 +-2105.0 + 32 +0.0 + 1 +3 + 13 +15727.789473 + 23 +7855.24584 + 33 +0.0 + 14 +15576.582352 + 24 +7855.24584 + 34 +0.0 + 0 +DIMENSION + 5 +1E17 + 8 +BEMASSUNG + 2 +*D99 + 10 +16355.0 + 20 +11445.0 + 30 +0.0 + 11 +16040.0 + 21 +11532.5 + 31 +0.0 + 12 +-295.0 + 22 +-2105.0 + 32 +0.0 + 1 +12 + 13 +15725.0 + 23 +10215.0 + 33 +0.0 + 14 +16355.0 + 24 +10215.0 + 34 +0.0 + 0 +TEXT + 5 +1E18 + 8 +BEMASSUNG + 10 +16100.0 + 20 +11560.0 + 30 +0.0 + 40 +62.5 + 1 +5 + 41 +0.75 + 0 +DIMENSION + 5 +1E19 + 8 +BEMASSUNG + 2 +*D103 + 10 +15651.609987 + 20 +9915.090071 + 30 +0.0 + 11 +15556.327063 + 21 +10002.590071 + 31 +0.0 + 12 +-295.0 + 22 +-2105.0 + 32 +0.0 + 70 + 128 + 1 +1 + 13 +15726.357827 + 23 +10104.009781 + 33 +0.0 + 14 +15651.609987 + 24 +10104.009781 + 34 +0.0 + 0 +TEXT + 5 +1E1A + 8 +BEMASSUNG + 10 +15578.007216 + 20 +10019.89264 + 30 +0.0 + 40 +62.5 + 1 +5 + 41 +0.75 + 0 +DIMENSION + 5 +1E1B + 8 +BEMASSUNG + 2 +*D106 + 10 +18329.167458 + 20 +10310.10418 + 30 +0.0 + 11 +18241.667458 + 21 +10110.0 + 31 +0.0 + 12 +-295.0 + 22 +-2105.0 + 32 +0.0 + 70 + 128 + 1 +1 + 13 +17283.177313 + 23 +10235.808311 + 33 +0.0 + 14 +17283.177313 + 24 +10310.10418 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +1E1C + 8 +BEMASSUNG + 2 +*D105 + 10 +18329.167458 + 20 +11110.0 + 30 +0.0 + 11 +18241.667458 + 21 +10710.05209 + 31 +0.0 + 12 +-295.0 + 22 +-2105.0 + 32 +0.0 + 1 +16 + 13 +17283.177313 + 23 +10310.10418 + 33 +0.0 + 14 +17275.0 + 24 +11110.0 + 34 +0.0 + 50 +90.0 + 0 +TEXT + 5 +1E1D + 8 +BEMASSUNG + 10 +18230.0 + 20 +10126.343497 + 30 +0.0 + 40 +62.5 + 1 +5 + 50 +90.0 + 41 +0.75 + 0 +TEXT + 5 +1E1E + 8 +LEGENDE-35 + 10 +17615.0 + 20 +9680.0 + 30 +0.0 + 40 +87.5 + 1 +GIPSPUTZ + 41 +0.75 + 0 +TEXT + 5 +1E1F + 8 +LEGENDE-35 + 10 +17615.0 + 20 +9430.0 + 30 +0.0 + 40 +87.5 + 1 +PVC-LEISTE + 41 +0.75 + 0 +TEXT + 5 +1E20 + 8 +LEGENDE-35 + 10 +17615.0 + 20 +9180.0 + 30 +0.0 + 40 +87.5 + 1 +U-PROFIL + 41 +0.75 + 0 +TEXT + 5 +1E21 + 8 +LEGENDE-35 + 10 +17615.0 + 20 +8930.0 + 30 +0.0 + 40 +87.5 + 1 +C-PROFIL + 41 +0.75 + 0 +TEXT + 5 +1E22 + 8 +LEGENDE-35 + 10 +17615.0 + 20 +8680.0 + 30 +0.0 + 40 +87.5 + 1 +GIPSKARTON + 41 +0.75 + 0 +TEXT + 5 +1E23 + 8 +LEGENDE-35 + 10 +17615.0 + 20 +8430.0 + 30 +0.0 + 40 +87.5 + 1 +MINERALFASER-WÄDÄ + 41 +0.75 + 0 +TEXT + 5 +1E24 + 8 +LEGENDE-35 + 10 +17615.0 + 20 +8180.0 + 30 +0.0 + 40 +87.5 + 1 +ABSCHLUSSLEISTE + 41 +0.75 + 0 +TEXT + 5 +1E25 + 8 +LEGENDE-35 + 10 +17615.0 + 20 +7930.0 + 30 +0.0 + 40 +87.5 + 1 +NATURSTEIN + 41 +0.75 + 0 +POLYLINE + 5 +1E26 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2223 + 8 +LEGENDE-35 + 10 +17480.0 + 20 +9725.0 + 30 +0.0 + 0 +VERTEX + 5 +2224 + 8 +LEGENDE-35 + 10 +17040.0 + 20 +9725.0 + 30 +0.0 + 0 +VERTEX + 5 +2225 + 8 +LEGENDE-35 + 10 +17040.0 + 20 +10265.0 + 30 +0.0 + 0 +SEQEND + 5 +2226 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +1E2B + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2227 + 8 +LEGENDE-35 + 10 +17480.0 + 20 +9475.0 + 30 +0.0 + 0 +VERTEX + 5 +2228 + 8 +LEGENDE-35 + 10 +16400.0 + 20 +9475.0 + 30 +0.0 + 0 +VERTEX + 5 +2229 + 8 +LEGENDE-35 + 10 +16400.0 + 20 +10265.0 + 30 +0.0 + 0 +SEQEND + 5 +222A + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +1E30 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +222B + 8 +LEGENDE-35 + 10 +17485.0 + 20 +9215.0 + 30 +0.0 + 0 +VERTEX + 5 +222C + 8 +LEGENDE-35 + 10 +16215.0 + 20 +9215.0 + 30 +0.0 + 0 +VERTEX + 5 +222D + 8 +LEGENDE-35 + 10 +16215.0 + 20 +10240.0 + 30 +0.0 + 0 +SEQEND + 5 +222E + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +1E35 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +222F + 8 +LEGENDE-35 + 10 +17480.0 + 20 +8965.0 + 30 +0.0 + 0 +VERTEX + 5 +2230 + 8 +LEGENDE-35 + 10 +16230.0 + 20 +8965.0 + 30 +0.0 + 0 +SEQEND + 5 +2231 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +1E39 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2232 + 8 +LEGENDE-35 + 10 +17480.0 + 20 +8720.0 + 30 +0.0 + 0 +VERTEX + 5 +2233 + 8 +LEGENDE-35 + 10 +16635.0 + 20 +8720.0 + 30 +0.0 + 0 +VERTEX + 5 +2234 + 8 +LEGENDE-35 + 10 +16310.0 + 20 +8320.0 + 30 +0.0 + 0 +SEQEND + 5 +2235 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +1E3E + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2236 + 8 +LEGENDE-35 + 10 +17475.0 + 20 +8475.0 + 30 +0.0 + 0 +VERTEX + 5 +2237 + 8 +LEGENDE-35 + 10 +16775.0 + 20 +8475.0 + 30 +0.0 + 0 +VERTEX + 5 +2238 + 8 +LEGENDE-35 + 10 +16105.0 + 20 +7755.0 + 30 +0.0 + 0 +SEQEND + 5 +2239 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +1E43 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +223A + 8 +LEGENDE-35 + 10 +17475.0 + 20 +8240.0 + 30 +0.0 + 0 +VERTEX + 5 +223B + 8 +LEGENDE-35 + 10 +16855.0 + 20 +8240.0 + 30 +0.0 + 0 +VERTEX + 5 +223C + 8 +LEGENDE-35 + 10 +16450.0 + 20 +7775.0 + 30 +0.0 + 0 +SEQEND + 5 +223D + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +1E48 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +223E + 8 +LEGENDE-35 + 10 +17480.0 + 20 +7975.0 + 30 +0.0 + 0 +VERTEX + 5 +223F + 8 +LEGENDE-35 + 10 +17015.0 + 20 +7975.0 + 30 +0.0 + 0 +VERTEX + 5 +2240 + 8 +LEGENDE-35 + 10 +16790.0 + 20 +7415.0 + 30 +0.0 + 0 +SEQEND + 5 +2241 + 8 +LEGENDE-35 + 0 +TEXT + 5 +1E4D + 8 +LEGENDE-35 + 10 +18250.0 + 20 +5620.0 + 30 +0.0 + 40 +87.5 + 1 +ZEMENTESTRICH + 41 +0.75 + 0 +TEXT + 5 +1E4E + 8 +LEGENDE-35 + 10 +18250.0 + 20 +5370.0 + 30 +0.0 + 40 +87.5 + 1 +DICHTUNGSBAHN (BITUMEN/ PE-FOLIE) + 41 +0.75 + 0 +TEXT + 5 +1E4F + 8 +LEGENDE-35 + 10 +18250.0 + 20 +5120.0 + 30 +0.0 + 40 +87.5 + 1 +PS-HARTSCHAUM WÄDÄ + 41 +0.75 + 0 +TEXT + 5 +1E50 + 8 +LEGENDE-35 + 10 +18250.0 + 20 +4870.0 + 30 +0.0 + 40 +87.5 + 1 +STAHLBETONDECKE B25 + 41 +0.75 + 0 +TEXT + 5 +1E51 + 8 +LEGENDE-35 + 10 +18250.0 + 20 +4724.166667 + 30 +0.0 + 40 +87.5 + 1 +ZWEIACHSIG GESPANNT + 41 +0.75 + 0 +POLYLINE + 5 +1E52 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2242 + 8 +LEGENDE-35 + 10 +18160.0 + 20 +5675.0 + 30 +0.0 + 0 +VERTEX + 5 +2243 + 8 +LEGENDE-35 + 10 +17880.0 + 20 +5675.0 + 30 +0.0 + 0 +VERTEX + 5 +2244 + 8 +LEGENDE-35 + 10 +17880.0 + 20 +7245.0 + 30 +0.0 + 0 +VERTEX + 5 +2245 + 8 +LEGENDE-35 + 10 +17260.0 + 20 +7245.0 + 30 +0.0 + 0 +SEQEND + 5 +2246 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +1E58 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2247 + 8 +LEGENDE-35 + 10 +18160.0 + 20 +5420.0 + 30 +0.0 + 0 +VERTEX + 5 +2248 + 8 +LEGENDE-35 + 10 +17740.0 + 20 +5420.0 + 30 +0.0 + 0 +VERTEX + 5 +2249 + 8 +LEGENDE-35 + 10 +17740.0 + 20 +7105.0 + 30 +0.0 + 0 +VERTEX + 5 +224A + 8 +LEGENDE-35 + 10 +17240.0 + 20 +7105.0 + 30 +0.0 + 0 +SEQEND + 5 +224B + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +1E5E + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +224C + 8 +LEGENDE-35 + 10 +18160.0 + 20 +5185.0 + 30 +0.0 + 0 +VERTEX + 5 +224D + 8 +LEGENDE-35 + 10 +17580.0 + 20 +5185.0 + 30 +0.0 + 0 +VERTEX + 5 +224E + 8 +LEGENDE-35 + 10 +17580.0 + 20 +6950.0 + 30 +0.0 + 0 +VERTEX + 5 +224F + 8 +LEGENDE-35 + 10 +17200.0 + 20 +6950.0 + 30 +0.0 + 0 +SEQEND + 5 +2250 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +1E64 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2251 + 8 +LEGENDE-35 + 10 +18160.0 + 20 +4815.0 + 30 +0.0 + 0 +VERTEX + 5 +2252 + 8 +LEGENDE-35 + 10 +17165.0 + 20 +4815.0 + 30 +0.0 + 0 +VERTEX + 5 +2253 + 8 +LEGENDE-35 + 10 +17165.0 + 20 +6250.0 + 30 +0.0 + 0 +SEQEND + 5 +2254 + 8 +LEGENDE-35 + 0 +TEXT + 5 +1E69 + 8 +LEGENDE-35 + 10 +12520.0 + 20 +9760.0 + 30 +0.0 + 40 +87.5 + 1 +STAHLBETONDECKE B25 + 41 +0.75 + 0 +TEXT + 5 +1E6A + 8 +LEGENDE-35 + 10 +12520.0 + 20 +9614.166667 + 30 +0.0 + 40 +87.5 + 1 +ZWEIACHSIG GESPANNT + 41 +0.75 + 0 +TEXT + 5 +1E6B + 8 +LEGENDE-35 + 10 +13175.0 + 20 +9105.0 + 30 +0.0 + 40 +87.5 + 1 +SCHNELLBAUSCHRAUBEN xn + 41 +0.75 + 0 +TEXT + 5 +1E6C + 8 +LEGENDE-35 + 10 +13000.0 + 20 +10655.0 + 30 +0.0 + 40 +87.5 + 1 +ELASTOMER-BAND + 41 +0.75 + 0 +TEXT + 5 +1E6D + 8 +LEGENDE-35 + 10 +13305.0 + 20 +6280.0 + 30 +0.0 + 40 +87.5 + 1 +ELASTOMER-BAND + 41 +0.75 + 0 +POLYLINE + 5 +1E6E + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2255 + 8 +LEGENDE-35 + 10 +14335.0 + 20 +6330.0 + 30 +0.0 + 0 +VERTEX + 5 +2256 + 8 +LEGENDE-35 + 10 +15635.0 + 20 +6330.0 + 30 +0.0 + 0 +VERTEX + 5 +2257 + 8 +LEGENDE-35 + 10 +15850.0 + 20 +6900.0 + 30 +0.0 + 0 +SEQEND + 5 +2258 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +1E73 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2259 + 8 +LEGENDE-35 + 10 +14030.0 + 20 +10685.0 + 30 +0.0 + 0 +VERTEX + 5 +225A + 8 +LEGENDE-35 + 10 +15530.0 + 20 +10685.0 + 30 +0.0 + 0 +VERTEX + 5 +225B + 8 +LEGENDE-35 + 10 +15890.0 + 20 +10295.0 + 30 +0.0 + 0 +SEQEND + 5 +225C + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +1E78 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +225D + 8 +LEGENDE-35 + 10 +13820.0 + 20 +9725.0 + 30 +0.0 + 0 +VERTEX + 5 +225E + 8 +LEGENDE-35 + 10 +14470.0 + 20 +9725.0 + 30 +0.0 + 0 +VERTEX + 5 +225F + 8 +LEGENDE-35 + 10 +14470.0 + 20 +10490.0 + 30 +0.0 + 0 +VERTEX + 5 +2260 + 8 +LEGENDE-35 + 10 +14915.0 + 20 +10490.0 + 30 +0.0 + 0 +SEQEND + 5 +2261 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +1E7E + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2262 + 8 +LEGENDE-35 + 10 +14760.0 + 20 +9130.0 + 30 +0.0 + 0 +VERTEX + 5 +2263 + 8 +LEGENDE-35 + 10 +15345.0 + 20 +9130.0 + 30 +0.0 + 0 +VERTEX + 5 +2264 + 8 +LEGENDE-35 + 10 +15345.0 + 20 +9375.0 + 30 +0.0 + 0 +VERTEX + 5 +2265 + 8 +LEGENDE-35 + 10 +15675.0 + 20 +9375.0 + 30 +0.0 + 0 +SEQEND + 5 +2266 + 8 +LEGENDE-35 + 0 +TEXT + 5 +1E84 + 8 +LEGENDE-35 + 10 +13305.0 + 20 +6030.0 + 30 +0.0 + 40 +87.5 + 1 +SCHLAGSCHRAUBEN + 41 +0.75 + 0 +POLYLINE + 5 +1E85 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2267 + 8 +LEGENDE-35 + 10 +14370.0 + 20 +6065.0 + 30 +0.0 + 0 +VERTEX + 5 +2268 + 8 +LEGENDE-35 + 10 +15925.0 + 20 +6240.0 + 30 +0.0 + 0 +VERTEX + 5 +2269 + 8 +LEGENDE-35 + 10 +16000.0 + 20 +6690.0 + 30 +0.0 + 0 +SEQEND + 5 +226A + 8 +LEGENDE-35 + 0 +TEXT + 5 +1E8A + 8 +LEGENDE-35 + 10 +12600.0 + 20 +10980.0 + 30 +0.0 + 40 +87.5 + 1 +SCHLAGSCHRAUBEN + 41 +0.75 + 0 +POLYLINE + 5 +1E8B + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +226B + 8 +LEGENDE-35 + 10 +13625.0 + 20 +11015.0 + 30 +0.0 + 0 +VERTEX + 5 +226C + 8 +LEGENDE-35 + 10 +15805.0 + 20 +10850.0 + 30 +0.0 + 0 +VERTEX + 5 +226D + 8 +LEGENDE-35 + 10 +16005.0 + 20 +10515.0 + 30 +0.0 + 0 +SEQEND + 5 +226E + 8 +LEGENDE-35 + 0 +TEXT + 5 +1E90 + 8 +LEGENDE-35 + 10 +14280.0 + 20 +4165.0 + 30 +0.0 + 40 +87.5 + 1 +METALSTÄNDERABSTAND: 62 + 41 +0.75 + 0 +TEXT + 5 +1E91 + 8 +LEGENDE-35 + 10 +15830.0 + 20 +4215.0 + 30 +0.0 + 40 +62.5 + 1 +5 + 41 +0.75 + 0 +TEXT + 5 +1E92 + 8 +LEGENDE-35 + 10 +19475.0 + 20 +11935.0 + 30 +0.0 + 40 +87.5 + 1 +M 1:5 + 41 +0.75 + 0 +TEXT + 5 +1E93 + 8 +LEGENDE-70 + 10 +2045.0 + 20 +13695.0 + 30 +0.0 + 40 +175.0 + 1 +D2 + 41 +0.75 + 0 +TEXT + 5 +1E94 + 8 +LEGENDE-70 + 10 +2070.0 + 20 +6635.0 + 30 +0.0 + 40 +175.0 + 1 +D1 + 41 +0.75 + 0 +TEXT + 5 +1E95 + 8 +LEGENDE-70 + 10 +12515.0 + 20 +11540.0 + 30 +0.0 + 40 +175.0 + 1 +D3 + 41 +0.75 + 0 +ENDSEC + 0 +EOF diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/samples/dxf/draft4.dxf b/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/samples/dxf/draft4.dxf new file mode 100644 index 00000000..5256540f --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/samples/dxf/draft4.dxf @@ -0,0 +1,77318 @@ + 0 +SECTION + 2 +HEADER + 9 +$ACADVER + 1 +AC1009 + 9 +$INSBASE + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$EXTMIN + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$EXTMAX + 10 +21025.0 + 20 +14850.0 + 30 +0.0 + 9 +$LIMMIN + 10 +0.0 + 20 +0.0 + 9 +$LIMMAX + 10 +21025.0 + 20 +14850.0 + 9 +$ORTHOMODE + 70 + 0 + 9 +$REGENMODE + 70 + 1 + 9 +$FILLMODE + 70 + 1 + 9 +$QTEXTMODE + 70 + 0 + 9 +$MIRRTEXT + 70 + 1 + 9 +$DRAGMODE + 70 + 2 + 9 +$LTSCALE + 40 +175.0 + 9 +$OSMODE + 70 + 0 + 9 +$ATTMODE + 70 + 1 + 9 +$TEXTSIZE + 40 +175.0 + 9 +$TRACEWID + 40 +1.0 + 9 +$TEXTSTYLE + 7 +STANDARD + 9 +$CLAYER + 8 +LEGENDE-70 + 9 +$CELTYPE + 6 +BYLAYER + 9 +$CECOLOR + 62 + 256 + 9 +$DIMSCALE + 40 +1.0 + 9 +$DIMASZ + 40 +1.0 + 9 +$DIMEXO + 40 +1.0 + 9 +$DIMDLI + 40 +3.0 + 9 +$DIMRND + 40 +0.0 + 9 +$DIMDLE + 40 +0.0 + 9 +$DIMEXE + 40 +0.5 + 9 +$DIMTP + 40 +0.0 + 9 +$DIMTM + 40 +0.0 + 9 +$DIMTXT + 40 +87.5 + 9 +$DIMCEN + 40 +-0.5 + 9 +$DIMTSZ + 40 +0.0 + 9 +$DIMTOL + 70 + 0 + 9 +$DIMLIM + 70 + 0 + 9 +$DIMTIH + 70 + 0 + 9 +$DIMTOH + 70 + 0 + 9 +$DIMSE1 + 70 + 1 + 9 +$DIMSE2 + 70 + 1 + 9 +$DIMTAD + 70 + 1 + 9 +$DIMZIN + 70 + 8 + 9 +$DIMBLK + 1 +MASSHILFSLINIE + 9 +$DIMASO + 70 + 1 + 9 +$DIMSHO + 70 + 0 + 9 +$DIMPOST + 1 + + 9 +$DIMAPOST + 1 + + 9 +$DIMALT + 70 + 0 + 9 +$DIMALTD + 70 + 2 + 9 +$DIMALTF + 40 +25.4 + 9 +$DIMLFAC + 40 +1.0 + 9 +$DIMTOFL + 70 + 1 + 9 +$DIMTVP + 40 +0.0 + 9 +$DIMTIX + 70 + 1 + 9 +$DIMSOXD + 70 + 0 + 9 +$DIMSAH + 70 + 0 + 9 +$DIMBLK1 + 1 + + 9 +$DIMBLK2 + 1 + + 9 +$DIMSTYLE + 2 +BEMASSUNG + 9 +$DIMCLRD + 70 + 0 + 9 +$DIMCLRE + 70 + 0 + 9 +$DIMCLRT + 70 + 0 + 9 +$DIMTFAC + 40 +1.0 + 9 +$DIMGAP + 40 +0.0 + 9 +$LUNITS + 70 + 2 + 9 +$LUPREC + 70 + 2 + 9 +$SKETCHINC + 40 +1.0 + 9 +$FILLETRAD + 40 +0.0 + 9 +$AUNITS + 70 + 0 + 9 +$AUPREC + 70 + 0 + 9 +$MENU + 1 +acad + 9 +$ELEVATION + 40 +0.0 + 9 +$PELEVATION + 40 +0.0 + 9 +$THICKNESS + 40 +0.0 + 9 +$LIMCHECK + 70 + 0 + 9 +$BLIPMODE + 70 + 1 + 9 +$CHAMFERA + 40 +0.0 + 9 +$CHAMFERB + 40 +0.0 + 9 +$SKPOLY + 70 + 0 + 9 +$TDCREATE + 40 +2450818.858134 + 9 +$TDUPDATE + 40 +2450820.494744 + 9 +$TDINDWG + 40 +0.466052 + 9 +$TDUSRTIMER + 40 +0.466052 + 9 +$USRTIMER + 70 + 1 + 9 +$ANGBASE + 50 +0.0 + 9 +$ANGDIR + 70 + 0 + 9 +$PDMODE + 70 + 0 + 9 +$PDSIZE + 40 +0.0 + 9 +$PLINEWID + 40 +0.0 + 9 +$COORDS + 70 + 2 + 9 +$SPLFRAME + 70 + 0 + 9 +$SPLINETYPE + 70 + 6 + 9 +$SPLINESEGS + 70 + 8 + 9 +$ATTDIA + 70 + 0 + 9 +$ATTREQ + 70 + 1 + 9 +$HANDLING + 70 + 1 + 9 +$HANDSEED + 5 +1751 + 9 +$SURFTAB1 + 70 + 6 + 9 +$SURFTAB2 + 70 + 6 + 9 +$SURFTYPE + 70 + 6 + 9 +$SURFU + 70 + 6 + 9 +$SURFV + 70 + 6 + 9 +$UCSNAME + 2 +PAPIERURSPRUNG + 9 +$UCSORG + 10 +4005.0 + 20 +5370.0 + 30 +0.0 + 9 +$UCSXDIR + 10 +1.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSYDIR + 10 +0.0 + 20 +1.0 + 30 +0.0 + 9 +$PUCSNAME + 2 + + 9 +$PUCSORG + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSXDIR + 10 +1.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSYDIR + 10 +0.0 + 20 +1.0 + 30 +0.0 + 9 +$USERI1 + 70 + 0 + 9 +$USERI2 + 70 + 0 + 9 +$USERI3 + 70 + 0 + 9 +$USERI4 + 70 + 0 + 9 +$USERI5 + 70 + 0 + 9 +$USERR1 + 40 +0.0 + 9 +$USERR2 + 40 +0.0 + 9 +$USERR3 + 40 +0.0 + 9 +$USERR4 + 40 +0.0 + 9 +$USERR5 + 40 +0.0 + 9 +$WORLDVIEW + 70 + 1 + 9 +$SHADEDGE + 70 + 3 + 9 +$SHADEDIF + 70 + 70 + 9 +$TILEMODE + 70 + 1 + 9 +$MAXACTVP + 70 + 16 + 9 +$PLIMCHECK + 70 + 0 + 9 +$PEXTMIN + 10 +1.000000E+020 + 20 +1.000000E+020 + 30 +1.000000E+020 + 9 +$PEXTMAX + 10 +-1.000000E+020 + 20 +-1.000000E+020 + 30 +-1.000000E+020 + 9 +$PLIMMIN + 10 +0.0 + 20 +0.0 + 9 +$PLIMMAX + 10 +12.0 + 20 +9.0 + 9 +$UNITMODE + 70 + 0 + 9 +$VISRETAIN + 70 + 0 + 9 +$PLINEGEN + 70 + 0 + 9 +$PSLTSCALE + 70 + 0 + 0 +ENDSEC + 0 +SECTION + 2 +TABLES + 0 +TABLE + 2 +VPORT + 70 + 3 + 0 +VPORT + 2 +*ACTIVE + 70 + 0 + 10 +0.0 + 20 +0.0 + 11 +1.0 + 21 +1.0 + 12 +11853.224688 + 22 +7639.042096 + 13 +0.0 + 23 +0.0 + 14 +5.0 + 24 +5.0 + 15 +10.0 + 25 +10.0 + 16 +0.0 + 26 +0.0 + 36 +1.0 + 17 +0.0 + 27 +0.0 + 37 +0.0 + 40 +15278.084191 + 41 +1.551664 + 42 +50.0 + 43 +0.0 + 44 +0.0 + 50 +0.0 + 51 +0.0 + 71 + 0 + 72 + 100 + 73 + 1 + 74 + 1 + 75 + 0 + 76 + 0 + 77 + 0 + 78 + 1 + 0 +ENDTAB + 0 +TABLE + 2 +LTYPE + 70 + 25 + 0 +LTYPE + 2 +CONTINUOUS + 70 + 0 + 3 +Solid Line + 72 + 65 + 73 + 0 + 40 +0.0 + 0 +LTYPE + 2 +RAND + 70 + 0 + 3 +__ __ . __ __ . __ __ . __ __ . __ __ . __ __ . + 72 + 65 + 73 + 6 + 40 +1.75 + 49 +0.5 + 49 +-0.25 + 49 +0.5 + 49 +-0.25 + 49 +0.0 + 49 +-0.25 + 0 +LTYPE + 2 +RAND2 + 70 + 0 + 3 +__.__.__.__.__.__.__.__.__.__.__.__.__.__.__.__ + 72 + 65 + 73 + 6 + 40 +0.875 + 49 +0.25 + 49 +-0.125 + 49 +0.25 + 49 +-0.125 + 49 +0.0 + 49 +-0.125 + 0 +LTYPE + 2 +RANDX2 + 70 + 0 + 3 +____ ____ . ____ ____ . ____ ____ . __ + 72 + 65 + 73 + 6 + 40 +3.5 + 49 +1.0 + 49 +-0.5 + 49 +1.0 + 49 +-0.5 + 49 +0.0 + 49 +-0.5 + 0 +LTYPE + 2 +MITTE + 70 + 0 + 3 +____ _ ____ _ ____ _ ____ _ ____ _ ____ _ ____ + 72 + 65 + 73 + 4 + 40 +2.0 + 49 +1.25 + 49 +-0.25 + 49 +0.25 + 49 +-0.25 + 0 +LTYPE + 2 +MITTE2 + 70 + 0 + 3 +___ _ ___ _ ___ _ ___ _ ___ _ ___ _ ___ _ ___ _ + 72 + 65 + 73 + 4 + 40 +1.125 + 49 +0.75 + 49 +-0.125 + 49 +0.125 + 49 +-0.125 + 0 +LTYPE + 2 +MITTEX2 + 70 + 0 + 3 +________ __ ________ __ ________ __ _____ + 72 + 65 + 73 + 4 + 40 +4.0 + 49 +2.5 + 49 +-0.5 + 49 +0.5 + 49 +-0.5 + 0 +LTYPE + 2 +STRICHPUNKT + 70 + 0 + 3 +__ . __ . __ . __ . __ . __ . __ . __ . __ . __ + 72 + 65 + 73 + 4 + 40 +1.0 + 49 +0.5 + 49 +-0.25 + 49 +0.0 + 49 +-0.25 + 0 +LTYPE + 2 +STRICHPUNKT2 + 70 + 0 + 3 +_._._._._._._._._._._._._._._._._._._._._._._._ + 72 + 65 + 73 + 4 + 40 +0.5 + 49 +0.25 + 49 +-0.125 + 49 +0.0 + 49 +-0.125 + 0 +LTYPE + 2 +STRICHPUNKTX2 + 70 + 0 + 3 +____ . ____ . ____ . ____ . ____ . __ + 72 + 65 + 73 + 4 + 40 +2.0 + 49 +1.0 + 49 +-0.5 + 49 +0.0 + 49 +-0.5 + 0 +LTYPE + 2 +GESTRICHELT + 70 + 0 + 3 +__ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ + 72 + 65 + 73 + 2 + 40 +0.75 + 49 +0.5 + 49 +-0.25 + 0 +LTYPE + 2 +GESTRICHELT2 + 70 + 0 + 3 +_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ + 72 + 65 + 73 + 2 + 40 +0.375 + 49 +0.25 + 49 +-0.125 + 0 +LTYPE + 2 +GESTRICHELTX2 + 70 + 0 + 3 +____ ____ ____ ____ ____ ____ ____ ____ + 72 + 65 + 73 + 2 + 40 +1.5 + 49 +1.0 + 49 +-0.5 + 0 +LTYPE + 2 +GETRENNT + 70 + 0 + 3 +____ . . ____ . . ____ . . ____ . . ____ . . __ + 72 + 65 + 73 + 6 + 40 +1.25 + 49 +0.5 + 49 +-0.25 + 49 +0.0 + 49 +-0.25 + 49 +0.0 + 49 +-0.25 + 0 +LTYPE + 2 +GETRENNT2 + 70 + 0 + 3 +__..__..__..__..__..__..__..__..__..__..__..__. + 72 + 65 + 73 + 6 + 40 +0.625 + 49 +0.25 + 49 +-0.125 + 49 +0.0 + 49 +-0.125 + 49 +0.0 + 49 +-0.125 + 0 +LTYPE + 2 +GETRENNTX2 + 70 + 0 + 3 +________ . . ________ . . ________ . . + 72 + 65 + 73 + 6 + 40 +2.5 + 49 +1.0 + 49 +-0.5 + 49 +0.0 + 49 +-0.5 + 49 +0.0 + 49 +-0.5 + 0 +LTYPE + 2 +PUNKT + 70 + 0 + 3 +. . . . . . . . . . . . . . . . . . . . . . . . + 72 + 65 + 73 + 2 + 40 +0.25 + 49 +0.0 + 49 +-0.25 + 0 +LTYPE + 2 +PUNKT2 + 70 + 0 + 3 +............................................... + 72 + 65 + 73 + 2 + 40 +0.125 + 49 +0.0 + 49 +-0.125 + 0 +LTYPE + 2 +PUNKTX2 + 70 + 0 + 3 +. . . . . . . . . . . . . . . . + 72 + 65 + 73 + 2 + 40 +0.5 + 49 +0.0 + 49 +-0.5 + 0 +LTYPE + 2 +VERDECKT + 70 + 0 + 3 +__ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ + 72 + 65 + 73 + 2 + 40 +0.375 + 49 +0.25 + 49 +-0.125 + 0 +LTYPE + 2 +VERDECKT2 + 70 + 0 + 3 +_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ + 72 + 65 + 73 + 2 + 40 +0.1875 + 49 +0.125 + 49 +-0.0625 + 0 +LTYPE + 2 +VERDECKTX2 + 70 + 0 + 3 +____ ____ ____ ____ ____ ____ ____ ____ ____ __ + 72 + 65 + 73 + 2 + 40 +0.75 + 49 +0.5 + 49 +-0.25 + 0 +LTYPE + 2 +PHANTOM + 70 + 0 + 3 +______ __ __ ______ __ __ ______ __ __ + 72 + 65 + 73 + 6 + 40 +2.5 + 49 +1.25 + 49 +-0.25 + 49 +0.25 + 49 +-0.25 + 49 +0.25 + 49 +-0.25 + 0 +LTYPE + 2 +PHANTOM2 + 70 + 0 + 3 +___ _ _ ___ _ _ ___ _ _ ___ _ _ ___ _ _ ___ _ _ + 72 + 65 + 73 + 6 + 40 +1.25 + 49 +0.625 + 49 +-0.125 + 49 +0.125 + 49 +-0.125 + 49 +0.125 + 49 +-0.125 + 0 +LTYPE + 2 +PHANTOMX2 + 70 + 0 + 3 +____________ ____ ____ ____________ + 72 + 65 + 73 + 6 + 40 +5.0 + 49 +2.5 + 49 +-0.5 + 49 +0.5 + 49 +-0.5 + 49 +0.5 + 49 +-0.5 + 0 +ENDTAB + 0 +TABLE + 2 +LAYER + 70 + 24 + 0 +LAYER + 2 +0 + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +LAYER + 2 +MAUERWERK + 70 + 0 + 62 + 6 + 6 +CONTINUOUS + 0 +LAYER + 2 +VORSATZSCHALE + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +LAYER + 2 +PE-FOLIE + 70 + 0 + 62 + 1 + 6 +GESTRICHELTX2 + 0 +LAYER + 2 +FUNDAMENT + 70 + 0 + 62 + 8 + 6 +CONTINUOUS + 0 +LAYER + 2 +BEMASSUNG + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +LAYER + 2 +STUERTZE + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +LAYER + 2 +ESTRICH + 70 + 0 + 62 + 4 + 6 +CONTINUOUS + 0 +LAYER + 2 +DECKEN + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +LAYER + 2 +DAEMMUNG + 70 + 0 + 62 + 4 + 6 +CONTINUOUS + 0 +LAYER + 2 +TUEREN + 70 + 0 + 62 + 3 + 6 +CONTINUOUS + 0 +LAYER + 2 +ERDBODEN + 70 + 0 + 62 + 5 + 6 +CONTINUOUS + 0 +LAYER + 2 +SCHNITTKANTEN + 70 + 0 + 62 + 1 + 6 +GESTRICHELT + 0 +LAYER + 2 +TRENNWAND + 70 + 0 + 62 + 8 + 6 +CONTINUOUS + 0 +LAYER + 2 +LEGENDE-70 + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +LAYER + 2 +LEGENDE-35 + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +LAYER + 2 +DETAILS + 70 + 0 + 62 + 7 + 6 +GESTRICHELTX2 + 0 +LAYER + 2 +DRAHTANKER + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +LAYER + 2 +SCHRAFFUR + 70 + 0 + 62 + 2 + 6 +CONTINUOUS + 0 +LAYER + 2 +DEFPOINTS + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +LAYER + 2 +HOLZ + 70 + 0 + 62 + 5 + 6 +CONTINUOUS + 0 +LAYER + 2 +SCHORNSTEIN + 70 + 0 + 62 + 1 + 6 +CONTINUOUS + 0 +LAYER + 2 +DACHZIEGEL + 70 + 0 + 62 + 8 + 6 +CONTINUOUS + 0 +LAYER + 2 +REGENRINNE + 70 + 0 + 62 + 3 + 6 +CONTINUOUS + 0 +ENDTAB + 0 +TABLE + 2 +STYLE + 70 + 1 + 0 +STYLE + 2 +STANDARD + 70 + 0 + 40 +0.0 + 41 +1.0 + 50 +0.0 + 71 + 0 + 42 +175.0 + 3 +txt + 4 + + 0 +ENDTAB + 0 +TABLE + 2 +VIEW + 70 + 0 + 0 +ENDTAB + 0 +TABLE + 2 +UCS + 70 + 3 + 0 +UCS + 2 +LOKAL + 70 + 0 + 10 +4125.0 + 20 +5250.0 + 30 +0.0 + 11 +1.0 + 21 +0.0 + 31 +0.0 + 12 +0.0 + 22 +1.0 + 32 +0.0 + 0 +UCS + 2 +PAPIERURSPRUNG + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 11 +1.0 + 21 +0.0 + 31 +0.0 + 12 +0.0 + 22 +1.0 + 32 +0.0 + 0 +UCS + 2 +ZANGE_SPARREN + 70 + 0 + 10 +2640.0 + 20 +2615.0 + 30 +0.0 + 11 +1.0 + 21 +0.0 + 31 +0.0 + 12 +0.0 + 22 +1.0 + 32 +0.0 + 0 +ENDTAB + 0 +TABLE + 2 +APPID + 70 + 1 + 0 +APPID + 2 +ACAD + 70 + 0 + 0 +ENDTAB + 0 +TABLE + 2 +DIMSTYLE + 70 + 1 + 0 +DIMSTYLE + 2 +BEMASSUNG + 70 + 0 + 3 + + 4 + + 5 +MASSHILFSLINIE + 6 + + 7 + + 40 +1.0 + 41 +1.0 + 42 +1.0 + 43 +3.0 + 44 +0.5 + 45 +0.0 + 46 +0.0 + 47 +0.0 + 48 +0.0 +140 +87.5 +141 +-0.5 +142 +0.0 +143 +25.4 +144 +1.0 +145 +0.0 +146 +1.0 +147 +0.0 + 71 + 0 + 72 + 0 + 73 + 0 + 74 + 0 + 75 + 1 + 76 + 1 + 77 + 1 + 78 + 8 +170 + 0 +171 + 2 +172 + 1 +173 + 0 +174 + 1 +175 + 0 +176 + 0 +177 + 0 +178 + 0 + 0 +ENDTAB + 0 +ENDSEC + 0 +SECTION + 2 +BLOCKS + 0 +BLOCK + 8 +0 + 2 +$MODEL_SPACE + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +$MODEL_SPACE + 1 + + 0 +ENDBLK + 5 +7C + 8 +0 + 0 +BLOCK + 67 + 1 + 8 +0 + 2 +$PAPER_SPACE + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +$PAPER_SPACE + 1 + + 0 +ENDBLK + 5 +7A + 67 + 1 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +RAHMEN50 + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +RAHMEN50 + 1 + + 0 +POLYLINE + 5 +80 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +1392 + 8 +0 + 10 +1000.0 + 20 +250.0 + 30 +0.0 + 0 +VERTEX + 5 +1393 + 8 +0 + 10 +41800.0 + 20 +250.0 + 30 +0.0 + 0 +VERTEX + 5 +1394 + 8 +0 + 10 +41800.0 + 20 +29450.0 + 30 +0.0 + 0 +VERTEX + 5 +1395 + 8 +0 + 10 +1000.0 + 20 +29450.0 + 30 +0.0 + 0 +SEQEND + 5 +1396 + 8 +0 + 0 +POLYLINE + 5 +86 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +1397 + 8 +0 + 10 +32800.0 + 20 +250.0 + 30 +0.0 + 0 +VERTEX + 5 +1398 + 8 +0 + 10 +32800.0 + 20 +13250.0 + 30 +0.0 + 0 +VERTEX + 5 +1399 + 8 +0 + 10 +41800.0 + 20 +13250.0 + 30 +0.0 + 0 +SEQEND + 5 +139A + 8 +0 + 0 +POLYLINE + 5 +8B + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +139B + 8 +0 + 10 +39550.0 + 20 +13250.0 + 30 +0.0 + 0 +VERTEX + 5 +139C + 8 +0 + 10 +39550.0 + 20 +11000.0 + 30 +0.0 + 0 +SEQEND + 5 +139D + 8 +0 + 0 +POLYLINE + 5 +8F + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +139E + 8 +0 + 10 +41800.0 + 20 +12250.0 + 30 +0.0 + 0 +VERTEX + 5 +139F + 8 +0 + 10 +37300.0 + 20 +12250.0 + 30 +0.0 + 0 +SEQEND + 5 +13A0 + 8 +0 + 0 +POLYLINE + 5 +93 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +13A1 + 8 +0 + 10 +41800.0 + 20 +11625.0 + 30 +0.0 + 0 +VERTEX + 5 +13A2 + 8 +0 + 10 +37300.0 + 20 +11625.0 + 30 +0.0 + 0 +SEQEND + 5 +13A3 + 8 +0 + 0 +POLYLINE + 5 +97 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +13A4 + 8 +0 + 10 +32800.0 + 20 +11000.0 + 30 +0.0 + 0 +VERTEX + 5 +13A5 + 8 +0 + 10 +41800.0 + 20 +11000.0 + 30 +0.0 + 0 +SEQEND + 5 +13A6 + 8 +0 + 0 +POLYLINE + 5 +9B + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +13A7 + 8 +0 + 10 +37300.0 + 20 +13250.0 + 30 +0.0 + 0 +VERTEX + 5 +13A8 + 8 +0 + 10 +37300.0 + 20 +6500.0 + 30 +0.0 + 0 +SEQEND + 5 +13A9 + 8 +0 + 0 +POLYLINE + 5 +9F + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +13AA + 8 +0 + 10 +32800.0 + 20 +8750.0 + 30 +0.0 + 0 +VERTEX + 5 +13AB + 8 +0 + 10 +37300.0 + 20 +8750.0 + 30 +0.0 + 0 +SEQEND + 5 +13AC + 8 +0 + 0 +POLYLINE + 5 +A3 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +13AD + 8 +0 + 10 +32800.0 + 20 +6500.0 + 30 +0.0 + 0 +VERTEX + 5 +13AE + 8 +0 + 10 +41800.0 + 20 +6500.0 + 30 +0.0 + 0 +SEQEND + 5 +13AF + 8 +0 + 0 +POLYLINE + 5 +A7 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +13B0 + 8 +0 + 10 +41800.0 + 20 +2000.0 + 30 +0.0 + 0 +VERTEX + 5 +13B1 + 8 +0 + 10 +32800.0 + 20 +2000.0 + 30 +0.0 + 0 +SEQEND + 5 +13B2 + 8 +0 + 0 +POLYLINE + 5 +AB + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +13B3 + 8 +0 + 10 +41800.0 + 20 +950.0 + 30 +0.0 + 0 +VERTEX + 5 +13B4 + 8 +0 + 10 +32800.0 + 20 +950.0 + 30 +0.0 + 0 +SEQEND + 5 +13B5 + 8 +0 + 0 +POLYLINE + 5 +AF + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +13B6 + 8 +0 + 10 +41800.0 + 20 +1300.0 + 30 +0.0 + 0 +VERTEX + 5 +13B7 + 8 +0 + 10 +32800.0 + 20 +1300.0 + 30 +0.0 + 0 +SEQEND + 5 +13B8 + 8 +0 + 0 +POLYLINE + 5 +B3 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +13B9 + 8 +0 + 10 +41800.0 + 20 +1650.0 + 30 +0.0 + 0 +VERTEX + 5 +13BA + 8 +0 + 10 +32800.0 + 20 +1650.0 + 30 +0.0 + 0 +SEQEND + 5 +13BB + 8 +0 + 0 +POLYLINE + 5 +B7 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +13BC + 8 +0 + 10 +41800.0 + 20 +600.0 + 30 +0.0 + 0 +VERTEX + 5 +13BD + 8 +0 + 10 +32800.0 + 20 +600.0 + 30 +0.0 + 0 +SEQEND + 5 +13BE + 8 +0 + 0 +POLYLINE + 5 +BB + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +13BF + 8 +0 + 10 +35100.0 + 20 +250.0 + 30 +0.0 + 0 +VERTEX + 5 +13C0 + 8 +0 + 10 +35100.0 + 20 +2000.0 + 30 +0.0 + 0 +SEQEND + 5 +13C1 + 8 +0 + 0 +POLYLINE + 5 +BF + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +13C2 + 8 +0 + 10 +33950.0 + 20 +250.0 + 30 +0.0 + 0 +VERTEX + 5 +13C3 + 8 +0 + 10 +33950.0 + 20 +2000.0 + 30 +0.0 + 0 +SEQEND + 5 +13C4 + 8 +0 + 0 +POLYLINE + 5 +C3 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +13C5 + 8 +0 + 10 +40650.0 + 20 +250.0 + 30 +0.0 + 0 +VERTEX + 5 +13C6 + 8 +0 + 10 +40650.0 + 20 +2000.0 + 30 +0.0 + 0 +SEQEND + 5 +13C7 + 8 +0 + 0 +ENDBLK + 5 +C7 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +STURZ + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +STURZ + 1 + + 0 +POLYLINE + 5 +C9 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +13C8 + 8 +MAUERWERK + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +13C9 + 8 +MAUERWERK + 10 +0.0 + 20 +-71.0 + 30 +0.0 + 0 +VERTEX + 5 +13CA + 8 +MAUERWERK + 10 +365.0 + 20 +-71.0 + 30 +0.0 + 0 +VERTEX + 5 +13CB + 8 +MAUERWERK + 10 +365.0 + 20 +0.0 + 30 +0.0 + 0 +SEQEND + 5 +13CC + 8 +MAUERWERK + 0 +POLYLINE + 5 +CF + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +13CD + 8 +MAUERWERK + 10 +40.0 + 20 +-1.0 + 30 +0.0 + 0 +VERTEX + 5 +13CE + 8 +MAUERWERK + 10 +40.0 + 20 +-36.0 + 30 +0.0 + 0 +VERTEX + 5 +13CF + 8 +MAUERWERK + 10 +80.0 + 20 +-36.0 + 30 +0.0 + 0 +VERTEX + 5 +13D0 + 8 +MAUERWERK + 10 +80.0 + 20 +-6.0 + 30 +0.0 + 0 +SEQEND + 5 +13D1 + 8 +MAUERWERK + 0 +POLYLINE + 5 +D5 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +13D2 + 8 +MAUERWERK + 10 +160.0 + 20 +-1.0 + 30 +0.0 + 0 +VERTEX + 5 +13D3 + 8 +MAUERWERK + 10 +160.0 + 20 +-36.0 + 30 +0.0 + 0 +VERTEX + 5 +13D4 + 8 +MAUERWERK + 10 +200.0 + 20 +-36.0 + 30 +0.0 + 0 +VERTEX + 5 +13D5 + 8 +MAUERWERK + 10 +200.0 + 20 +-6.0 + 30 +0.0 + 0 +SEQEND + 5 +13D6 + 8 +MAUERWERK + 0 +POLYLINE + 5 +DB + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +13D7 + 8 +MAUERWERK + 10 +285.0 + 20 +-1.0 + 30 +0.0 + 0 +VERTEX + 5 +13D8 + 8 +MAUERWERK + 10 +285.0 + 20 +-36.0 + 30 +0.0 + 0 +VERTEX + 5 +13D9 + 8 +MAUERWERK + 10 +325.0 + 20 +-36.0 + 30 +0.0 + 0 +VERTEX + 5 +13DA + 8 +MAUERWERK + 10 +325.0 + 20 +-6.0 + 30 +0.0 + 0 +SEQEND + 5 +13DB + 8 +MAUERWERK + 0 +POLYLINE + 5 +E1 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +13DC + 8 +MAUERWERK + 10 +121.0 + 20 +-71.0 + 30 +0.0 + 0 +VERTEX + 5 +13DD + 8 +MAUERWERK + 10 +121.0 + 20 +0.0 + 30 +0.0 + 0 +SEQEND + 5 +13DE + 8 +MAUERWERK + 0 +POLYLINE + 5 +E5 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +13DF + 8 +MAUERWERK + 10 +243.0 + 20 +-71.0 + 30 +0.0 + 0 +VERTEX + 5 +13E0 + 8 +MAUERWERK + 10 +243.0 + 20 +0.0 + 30 +0.0 + 0 +SEQEND + 5 +13E1 + 8 +MAUERWERK + 0 +ENDBLK + 5 +E9 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +MASSHILFSLINIE + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +MASSHILFSLINIE + 1 + + 0 +POLYLINE + 5 +EB + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +13E2 + 8 +0 + 10 +75.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +13E3 + 8 +0 + 10 +-75.0 + 20 +0.0 + 30 +0.0 + 0 +SEQEND + 5 +13E4 + 8 +0 + 0 +POLYLINE + 5 +EF + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +13E5 + 8 +0 + 10 +0.0 + 20 +-175.0 + 30 +0.0 + 0 +VERTEX + 5 +13E6 + 8 +0 + 10 +0.0 + 20 +175.0 + 30 +0.0 + 0 +SEQEND + 5 +13E7 + 8 +0 + 0 +POLYLINE + 5 +F3 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +13E8 + 8 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +13E9 + 8 +0 + 10 +26.516504 + 20 +26.516504 + 30 +0.0 + 0 +SEQEND + 5 +13EA + 8 +0 + 0 +POLYLINE + 5 +F7 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +13EB + 8 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +13EC + 8 +0 + 10 +-26.516504 + 20 +-26.516504 + 30 +0.0 + 0 +SEQEND + 5 +13ED + 8 +0 + 0 +ENDBLK + 5 +FB + 8 +0 + 0 +BLOCK + 8 +0 + 2 +DREIECK + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +DREIECK + 1 + + 0 +POLYLINE + 5 +FD + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 41 +175.0 + 0 +VERTEX + 5 +13EE + 8 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +13EF + 8 +0 + 10 +0.0 + 20 +87.5 + 30 +0.0 + 40 +175.0 + 0 +SEQEND + 5 +13F0 + 8 +0 + 0 +ENDBLK + 5 +101 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +HOEHE + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +HOEHE + 1 + + 0 +POLYLINE + 5 +103 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 0 +VERTEX + 5 +13F1 + 8 +0 + 10 +0.019553 + 20 +0.17035 + 30 +0.0 + 0 +VERTEX + 5 +13F2 + 8 +0 + 10 +87.539037 + 20 +87.845238 + 30 +0.0 + 0 +VERTEX + 5 +13F3 + 8 +0 + 10 +-87.890695 + 20 +87.845238 + 30 +0.0 + 0 +SEQEND + 5 +13F4 + 8 +0 + 0 +ENDBLK + 5 +108 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X5 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X5 + 1 + + 0 +LINE + 5 +10A + 8 +0 + 62 + 0 + 10 +5645.0 + 20 +8986.079541 + 30 +0.0 + 11 +5932.5 + 21 +9273.579541 + 31 +0.0 + 0 +LINE + 5 +10B + 8 +0 + 62 + 0 + 10 +5645.0 + 20 +9065.629054 + 30 +0.0 + 11 +5932.5 + 21 +9353.129054 + 31 +0.0 + 0 +LINE + 5 +10C + 8 +0 + 62 + 0 + 10 +5645.0 + 20 +9145.178567 + 30 +0.0 + 11 +5932.5 + 21 +9432.678567 + 31 +0.0 + 0 +LINE + 5 +10D + 8 +0 + 62 + 0 + 10 +5645.0 + 20 +9224.72808 + 30 +0.0 + 11 +5932.5 + 21 +9512.22808 + 31 +0.0 + 0 +LINE + 5 +10E + 8 +0 + 62 + 0 + 10 +5645.0 + 20 +9304.277593 + 30 +0.0 + 11 +5932.5 + 21 +9591.777593 + 31 +0.0 + 0 +LINE + 5 +10F + 8 +0 + 62 + 0 + 10 +5645.0 + 20 +9383.827106 + 30 +0.0 + 11 +5932.5 + 21 +9671.327106 + 31 +0.0 + 0 +LINE + 5 +110 + 8 +0 + 62 + 0 + 10 +5645.0 + 20 +9463.376618 + 30 +0.0 + 11 +5932.5 + 21 +9750.876618 + 31 +0.0 + 0 +LINE + 5 +111 + 8 +0 + 62 + 0 + 10 +5645.0 + 20 +9542.926131 + 30 +0.0 + 11 +5932.5 + 21 +9830.426131 + 31 +0.0 + 0 +LINE + 5 +112 + 8 +0 + 62 + 0 + 10 +5645.0 + 20 +9622.475644 + 30 +0.0 + 11 +5932.5 + 21 +9909.975644 + 31 +0.0 + 0 +LINE + 5 +113 + 8 +0 + 62 + 0 + 10 +5645.0 + 20 +9702.025157 + 30 +0.0 + 11 +5910.474843 + 21 +9967.5 + 31 +0.0 + 0 +LINE + 5 +114 + 8 +0 + 62 + 0 + 10 +5645.0 + 20 +9781.57467 + 30 +0.0 + 11 +5830.92533 + 21 +9967.5 + 31 +0.0 + 0 +LINE + 5 +115 + 8 +0 + 62 + 0 + 10 +5645.0 + 20 +9861.124183 + 30 +0.0 + 11 +5751.375817 + 21 +9967.5 + 31 +0.0 + 0 +LINE + 5 +116 + 8 +0 + 62 + 0 + 10 +5645.0 + 20 +9940.673696 + 30 +0.0 + 11 +5671.826304 + 21 +9967.5 + 31 +0.0 + 0 +LINE + 5 +117 + 8 +0 + 62 + 0 + 10 +5645.0 + 20 +8906.530028 + 30 +0.0 + 11 +5932.5 + 21 +9194.030028 + 31 +0.0 + 0 +LINE + 5 +118 + 8 +0 + 62 + 0 + 10 +5645.0 + 20 +8826.980515 + 30 +0.0 + 11 +5932.5 + 21 +9114.480515 + 31 +0.0 + 0 +LINE + 5 +119 + 8 +0 + 62 + 0 + 10 +5645.0 + 20 +8747.431002 + 30 +0.0 + 11 +5932.5 + 21 +9034.931002 + 31 +0.0 + 0 +LINE + 5 +11A + 8 +0 + 62 + 0 + 10 +5645.0 + 20 +8667.88149 + 30 +0.0 + 11 +5932.5 + 21 +8955.38149 + 31 +0.0 + 0 +LINE + 5 +11B + 8 +0 + 62 + 0 + 10 +5645.0 + 20 +8588.331977 + 30 +0.0 + 11 +5932.5 + 21 +8875.831977 + 31 +0.0 + 0 +LINE + 5 +11C + 8 +0 + 62 + 0 + 10 +5645.0 + 20 +8508.782464 + 30 +0.0 + 11 +5932.5 + 21 +8796.282464 + 31 +0.0 + 0 +LINE + 5 +11D + 8 +0 + 62 + 0 + 10 +5645.0 + 20 +8429.232951 + 30 +0.0 + 11 +5932.5 + 21 +8716.732951 + 31 +0.0 + 0 +LINE + 5 +11E + 8 +0 + 62 + 0 + 10 +5645.0 + 20 +8349.683438 + 30 +0.0 + 11 +5932.5 + 21 +8637.183438 + 31 +0.0 + 0 +LINE + 5 +11F + 8 +0 + 62 + 0 + 10 +5684.866075 + 20 +8310.0 + 30 +0.0 + 11 +5932.5 + 21 +8557.633925 + 31 +0.0 + 0 +LINE + 5 +120 + 8 +0 + 62 + 0 + 10 +5764.415588 + 20 +8310.0 + 30 +0.0 + 11 +5932.5 + 21 +8478.084412 + 31 +0.0 + 0 +LINE + 5 +121 + 8 +0 + 62 + 0 + 10 +5843.965101 + 20 +8310.0 + 30 +0.0 + 11 +5932.5 + 21 +8398.534899 + 31 +0.0 + 0 +LINE + 5 +122 + 8 +0 + 62 + 0 + 10 +5923.514613 + 20 +8310.0 + 30 +0.0 + 11 +5932.5 + 21 +8318.985387 + 31 +0.0 + 0 +ENDBLK + 5 +123 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X6 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X6 + 1 + + 0 +LINE + 5 +125 + 8 +0 + 62 + 0 + 10 +6282.5 + 20 +8615.952378 + 30 +0.0 + 11 +7195.0 + 21 +9528.452378 + 31 +0.0 + 0 +LINE + 5 +126 + 8 +0 + 62 + 0 + 10 +6282.5 + 20 +8828.084412 + 30 +0.0 + 11 +7195.0 + 21 +9740.584412 + 31 +0.0 + 0 +LINE + 5 +127 + 8 +0 + 62 + 0 + 10 +6282.5 + 20 +9040.216447 + 30 +0.0 + 11 +7195.0 + 21 +9952.716447 + 31 +0.0 + 0 +LINE + 5 +128 + 8 +0 + 62 + 0 + 10 +6282.5 + 20 +9252.348481 + 30 +0.0 + 11 +6997.651519 + 21 +9967.5 + 31 +0.0 + 0 +LINE + 5 +129 + 8 +0 + 62 + 0 + 10 +6282.5 + 20 +9464.480515 + 30 +0.0 + 11 +6785.519485 + 21 +9967.5 + 31 +0.0 + 0 +LINE + 5 +12A + 8 +0 + 62 + 0 + 10 +6282.5 + 20 +9676.61255 + 30 +0.0 + 11 +6573.38745 + 21 +9967.5 + 31 +0.0 + 0 +LINE + 5 +12B + 8 +0 + 62 + 0 + 10 +6282.5 + 20 +9888.744584 + 30 +0.0 + 11 +6361.255416 + 21 +9967.5 + 31 +0.0 + 0 +LINE + 5 +12C + 8 +0 + 62 + 0 + 10 +6282.5 + 20 +8403.820344 + 30 +0.0 + 11 +7195.0 + 21 +9316.320344 + 31 +0.0 + 0 +LINE + 5 +12D + 8 +0 + 62 + 0 + 10 +6400.811691 + 20 +8310.0 + 30 +0.0 + 11 +7195.0 + 21 +9104.188309 + 31 +0.0 + 0 +LINE + 5 +12E + 8 +0 + 62 + 0 + 10 +6612.943725 + 20 +8310.0 + 30 +0.0 + 11 +7195.0 + 21 +8892.056275 + 31 +0.0 + 0 +LINE + 5 +12F + 8 +0 + 62 + 0 + 10 +6825.07576 + 20 +8310.0 + 30 +0.0 + 11 +7195.0 + 21 +8679.92424 + 31 +0.0 + 0 +LINE + 5 +130 + 8 +0 + 62 + 0 + 10 +7037.207794 + 20 +8310.0 + 30 +0.0 + 11 +7195.0 + 21 +8467.792206 + 31 +0.0 + 0 +ENDBLK + 5 +131 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D7 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D7 + 1 + + 0 +LINE + 5 +133 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +5641.0 + 20 +7565.0 + 30 +0.0 + 11 +5934.0 + 21 +7565.0 + 31 +0.0 + 0 +INSERT + 5 +134 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +5640.0 + 20 +7565.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +135 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +5935.0 + 20 +7565.0 + 30 +0.0 + 0 +TEXT + 5 +136 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +5743.75 + 20 +7608.75 + 30 +0.0 + 40 +87.5 + 1 +11 + 72 + 1 + 11 +5787.5 + 21 +7652.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +138 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5640.0 + 20 +8330.0 + 30 +0.0 + 0 +POINT + 5 +139 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5935.0 + 20 +8330.0 + 30 +0.0 + 0 +POINT + 5 +13A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5935.0 + 20 +7565.0 + 30 +0.0 + 0 +ENDBLK + 5 +13B + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D8 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D8 + 1 + + 0 +LINE + 5 +13D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +5936.0 + 20 +7565.0 + 30 +0.0 + 11 +6079.0 + 21 +7565.0 + 31 +0.0 + 0 +INSERT + 5 +13E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +5935.0 + 20 +7565.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +13F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +6080.0 + 20 +7565.0 + 30 +0.0 + 0 +TEXT + 5 +140 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +5978.333333 + 20 +7608.75 + 30 +0.0 + 40 +87.5 + 1 +6 + 72 + 1 + 11 +6007.5 + 21 +7652.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +141 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5935.0 + 20 +8330.0 + 30 +0.0 + 0 +POINT + 5 +142 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +6080.0 + 20 +8315.0 + 30 +0.0 + 0 +POINT + 5 +143 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +6080.0 + 20 +7565.0 + 30 +0.0 + 0 +ENDBLK + 5 +144 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D9 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D9 + 1 + + 0 +LINE + 5 +146 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +6081.0 + 20 +7565.0 + 30 +0.0 + 11 +6279.0 + 21 +7565.0 + 31 +0.0 + 0 +INSERT + 5 +147 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +6080.0 + 20 +7565.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +148 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +6280.0 + 20 +7565.0 + 30 +0.0 + 0 +TEXT + 5 +149 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +6150.833333 + 20 +7608.75 + 30 +0.0 + 40 +87.5 + 1 +8 + 72 + 1 + 11 +6180.0 + 21 +7652.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +14A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +6080.0 + 20 +8315.0 + 30 +0.0 + 0 +POINT + 5 +14B + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +6280.0 + 20 +8345.0 + 30 +0.0 + 0 +POINT + 5 +14C + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +6280.0 + 20 +7565.0 + 30 +0.0 + 0 +ENDBLK + 5 +14D + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D10 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D10 + 1 + + 0 +LINE + 5 +14F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +6281.0 + 20 +7565.0 + 30 +0.0 + 11 +7194.0 + 21 +7565.0 + 31 +0.0 + 0 +INSERT + 5 +150 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +6280.0 + 20 +7565.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +151 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +7195.0 + 20 +7565.0 + 30 +0.0 + 0 +TEXT + 5 +152 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +6664.583333 + 20 +7608.75 + 30 +0.0 + 40 +87.5 + 1 +36 + 72 + 1 + 11 +6737.5 + 21 +7652.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +153 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +6280.0 + 20 +8345.0 + 30 +0.0 + 0 +POINT + 5 +154 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7195.0 + 20 +8330.0 + 30 +0.0 + 0 +POINT + 5 +155 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7195.0 + 20 +7565.0 + 30 +0.0 + 0 +ENDBLK + 5 +156 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X11 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X11 + 1 + + 0 +LINE + 5 +158 + 8 +0 + 62 + 0 + 10 +7219.973556 + 20 +9095.369053 + 30 +0.0 + 11 +7219.973556 + 21 +9095.369053 + 31 +0.0 + 0 +LINE + 5 +159 + 8 +0 + 62 + 0 + 10 +7218.398722 + 20 +9143.539647 + 30 +0.0 + 11 +7218.398722 + 21 +9143.539647 + 31 +0.0 + 0 +LINE + 5 +15A + 8 +0 + 62 + 0 + 10 +7216.823888 + 20 +9191.710242 + 30 +0.0 + 11 +7216.823888 + 21 +9191.710242 + 31 +0.0 + 0 +LINE + 5 +15B + 8 +0 + 62 + 0 + 10 +7215.249055 + 20 +9239.880836 + 30 +0.0 + 11 +7215.249055 + 21 +9239.880836 + 31 +0.0 + 0 +LINE + 5 +15C + 8 +0 + 62 + 0 + 10 +7213.674221 + 20 +9288.05143 + 30 +0.0 + 11 +7213.674221 + 21 +9288.05143 + 31 +0.0 + 0 +LINE + 5 +15D + 8 +0 + 62 + 0 + 10 +7212.099387 + 20 +9336.222024 + 30 +0.0 + 11 +7212.099387 + 21 +9336.222024 + 31 +0.0 + 0 +LINE + 5 +15E + 8 +0 + 62 + 0 + 10 +7210.524553 + 20 +9384.392619 + 30 +0.0 + 11 +7210.524553 + 21 +9384.392619 + 31 +0.0 + 0 +LINE + 5 +15F + 8 +0 + 62 + 0 + 10 +7208.949719 + 20 +9432.563213 + 30 +0.0 + 11 +7208.949719 + 21 +9432.563213 + 31 +0.0 + 0 +LINE + 5 +160 + 8 +0 + 62 + 0 + 10 +7207.374885 + 20 +9480.733807 + 30 +0.0 + 11 +7207.374885 + 21 +9480.733807 + 31 +0.0 + 0 +LINE + 5 +161 + 8 +0 + 62 + 0 + 10 +7205.800051 + 20 +9528.904401 + 30 +0.0 + 11 +7205.800051 + 21 +9528.904401 + 31 +0.0 + 0 +LINE + 5 +162 + 8 +0 + 62 + 0 + 10 +7204.225217 + 20 +9577.074996 + 30 +0.0 + 11 +7204.225217 + 21 +9577.074996 + 31 +0.0 + 0 +LINE + 5 +163 + 8 +0 + 62 + 0 + 10 +7202.650383 + 20 +9625.24559 + 30 +0.0 + 11 +7202.650383 + 21 +9625.24559 + 31 +0.0 + 0 +LINE + 5 +164 + 8 +0 + 62 + 0 + 10 +7201.075549 + 20 +9673.416184 + 30 +0.0 + 11 +7201.075549 + 21 +9673.416184 + 31 +0.0 + 0 +LINE + 5 +165 + 8 +0 + 62 + 0 + 10 +7199.500715 + 20 +9721.586778 + 30 +0.0 + 11 +7199.500715 + 21 +9721.586778 + 31 +0.0 + 0 +LINE + 5 +166 + 8 +0 + 62 + 0 + 10 +7197.925881 + 20 +9769.757372 + 30 +0.0 + 11 +7197.925881 + 21 +9769.757372 + 31 +0.0 + 0 +LINE + 5 +167 + 8 +0 + 62 + 0 + 10 +7231.643398 + 20 +9795.629733 + 30 +0.0 + 11 +7231.643398 + 21 +9795.629733 + 31 +0.0 + 0 +LINE + 5 +168 + 8 +0 + 62 + 0 + 10 +7196.351047 + 20 +9817.927967 + 30 +0.0 + 11 +7196.351047 + 21 +9817.927967 + 31 +0.0 + 0 +LINE + 5 +169 + 8 +0 + 62 + 0 + 10 +7230.068564 + 20 +9843.800327 + 30 +0.0 + 11 +7230.068564 + 21 +9843.800327 + 31 +0.0 + 0 +LINE + 5 +16A + 8 +0 + 62 + 0 + 10 +7228.49373 + 20 +9891.970922 + 30 +0.0 + 11 +7228.49373 + 21 +9891.970922 + 31 +0.0 + 0 +LINE + 5 +16B + 8 +0 + 62 + 0 + 10 +7226.918896 + 20 +9940.141516 + 30 +0.0 + 11 +7226.918896 + 21 +9940.141516 + 31 +0.0 + 0 +LINE + 5 +16C + 8 +0 + 62 + 0 + 10 +7221.54839 + 20 +9047.198459 + 30 +0.0 + 11 +7221.54839 + 21 +9047.198459 + 31 +0.0 + 0 +LINE + 5 +16D + 8 +0 + 62 + 0 + 10 +7223.123224 + 20 +8999.027865 + 30 +0.0 + 11 +7223.123224 + 21 +8999.027865 + 31 +0.0 + 0 +LINE + 5 +16E + 8 +0 + 62 + 0 + 10 +7224.698058 + 20 +8950.857271 + 30 +0.0 + 11 +7224.698058 + 21 +8950.857271 + 31 +0.0 + 0 +LINE + 5 +16F + 8 +0 + 62 + 0 + 10 +7196.125465 + 20 +8879.553742 + 30 +0.0 + 11 +7196.125465 + 21 +8879.553742 + 31 +0.0 + 0 +LINE + 5 +170 + 8 +0 + 62 + 0 + 10 +7226.272892 + 20 +8902.686676 + 30 +0.0 + 11 +7226.272892 + 21 +8902.686676 + 31 +0.0 + 0 +LINE + 5 +171 + 8 +0 + 62 + 0 + 10 +7197.700299 + 20 +8831.383148 + 30 +0.0 + 11 +7197.700299 + 21 +8831.383148 + 31 +0.0 + 0 +LINE + 5 +172 + 8 +0 + 62 + 0 + 10 +7227.847726 + 20 +8854.516082 + 30 +0.0 + 11 +7227.847726 + 21 +8854.516082 + 31 +0.0 + 0 +LINE + 5 +173 + 8 +0 + 62 + 0 + 10 +7199.275133 + 20 +8783.212554 + 30 +0.0 + 11 +7199.275133 + 21 +8783.212554 + 31 +0.0 + 0 +LINE + 5 +174 + 8 +0 + 62 + 0 + 10 +7229.42256 + 20 +8806.345488 + 30 +0.0 + 11 +7229.42256 + 21 +8806.345488 + 31 +0.0 + 0 +LINE + 5 +175 + 8 +0 + 62 + 0 + 10 +7200.849967 + 20 +8735.041959 + 30 +0.0 + 11 +7200.849967 + 21 +8735.041959 + 31 +0.0 + 0 +LINE + 5 +176 + 8 +0 + 62 + 0 + 10 +7230.997394 + 20 +8758.174894 + 30 +0.0 + 11 +7230.997394 + 21 +8758.174894 + 31 +0.0 + 0 +LINE + 5 +177 + 8 +0 + 62 + 0 + 10 +7202.424801 + 20 +8686.871365 + 30 +0.0 + 11 +7202.424801 + 21 +8686.871365 + 31 +0.0 + 0 +LINE + 5 +178 + 8 +0 + 62 + 0 + 10 +7203.999635 + 20 +8638.700771 + 30 +0.0 + 11 +7203.999635 + 21 +8638.700771 + 31 +0.0 + 0 +LINE + 5 +179 + 8 +0 + 62 + 0 + 10 +7205.574469 + 20 +8590.530177 + 30 +0.0 + 11 +7205.574469 + 21 +8590.530177 + 31 +0.0 + 0 +LINE + 5 +17A + 8 +0 + 62 + 0 + 10 +7207.149303 + 20 +8542.359582 + 30 +0.0 + 11 +7207.149303 + 21 +8542.359582 + 31 +0.0 + 0 +LINE + 5 +17B + 8 +0 + 62 + 0 + 10 +7208.724137 + 20 +8494.188988 + 30 +0.0 + 11 +7208.724137 + 21 +8494.188988 + 31 +0.0 + 0 +LINE + 5 +17C + 8 +0 + 62 + 0 + 10 +7210.298971 + 20 +8446.018394 + 30 +0.0 + 11 +7210.298971 + 21 +8446.018394 + 31 +0.0 + 0 +LINE + 5 +17D + 8 +0 + 62 + 0 + 10 +7211.873805 + 20 +8397.8478 + 30 +0.0 + 11 +7211.873805 + 21 +8397.8478 + 31 +0.0 + 0 +LINE + 5 +17E + 8 +0 + 62 + 0 + 10 +7213.448639 + 20 +8349.677206 + 30 +0.0 + 11 +7213.448639 + 21 +8349.677206 + 31 +0.0 + 0 +LINE + 5 +17F + 8 +0 + 62 + 0 + 10 +7210.18492 + 20 +9105.06306 + 30 +0.0 + 11 +7210.18492 + 21 +9105.06306 + 31 +0.0 + 0 +LINE + 5 +180 + 8 +0 + 62 + 0 + 10 +7221.092005 + 20 +9171.227768 + 30 +0.0 + 11 +7221.092005 + 21 +9171.227768 + 31 +0.0 + 0 +LINE + 5 +181 + 8 +0 + 62 + 0 + 10 +7198.042102 + 20 +9232.921954 + 30 +0.0 + 11 +7198.042102 + 21 +9232.921954 + 31 +0.0 + 0 +LINE + 5 +182 + 8 +0 + 62 + 0 + 10 +7211.054816 + 20 +9234.635111 + 30 +0.0 + 11 +7211.054816 + 21 +9234.635111 + 31 +0.0 + 0 +LINE + 5 +183 + 8 +0 + 62 + 0 + 10 +7231.379436 + 20 +9237.310898 + 30 +0.0 + 11 +7231.379436 + 21 +9237.310898 + 31 +0.0 + 0 +LINE + 5 +184 + 8 +0 + 62 + 0 + 10 +7208.329533 + 20 +9299.005084 + 30 +0.0 + 11 +7208.329533 + 21 +9299.005084 + 31 +0.0 + 0 +LINE + 5 +185 + 8 +0 + 62 + 0 + 10 +7219.236618 + 20 +9365.169792 + 30 +0.0 + 11 +7219.236618 + 21 +9365.169792 + 31 +0.0 + 0 +LINE + 5 +186 + 8 +0 + 62 + 0 + 10 +7232.249331 + 20 +9366.882949 + 30 +0.0 + 11 +7232.249331 + 21 +9366.882949 + 31 +0.0 + 0 +LINE + 5 +187 + 8 +0 + 62 + 0 + 10 +7196.186715 + 20 +9426.863979 + 30 +0.0 + 11 +7196.186715 + 21 +9426.863979 + 31 +0.0 + 0 +LINE + 5 +188 + 8 +0 + 62 + 0 + 10 +7209.199429 + 20 +9428.577135 + 30 +0.0 + 11 +7209.199429 + 21 +9428.577135 + 31 +0.0 + 0 +LINE + 5 +189 + 8 +0 + 62 + 0 + 10 +7229.524049 + 20 +9431.252922 + 30 +0.0 + 11 +7229.524049 + 21 +9431.252922 + 31 +0.0 + 0 +LINE + 5 +18A + 8 +0 + 62 + 0 + 10 +7206.474146 + 20 +9492.947108 + 30 +0.0 + 11 +7206.474146 + 21 +9492.947108 + 31 +0.0 + 0 +LINE + 5 +18B + 8 +0 + 62 + 0 + 10 +7217.381231 + 20 +9559.111817 + 30 +0.0 + 11 +7217.381231 + 21 +9559.111817 + 31 +0.0 + 0 +LINE + 5 +18C + 8 +0 + 62 + 0 + 10 +7230.393944 + 20 +9560.824973 + 30 +0.0 + 11 +7230.393944 + 21 +9560.824973 + 31 +0.0 + 0 +LINE + 5 +18D + 8 +0 + 62 + 0 + 10 +7207.344042 + 20 +9622.519159 + 30 +0.0 + 11 +7207.344042 + 21 +9622.519159 + 31 +0.0 + 0 +LINE + 5 +18E + 8 +0 + 62 + 0 + 10 +7227.668662 + 20 +9625.194946 + 30 +0.0 + 11 +7227.668662 + 21 +9625.194946 + 31 +0.0 + 0 +LINE + 5 +18F + 8 +0 + 62 + 0 + 10 +7204.618759 + 20 +9686.889132 + 30 +0.0 + 11 +7204.618759 + 21 +9686.889132 + 31 +0.0 + 0 +LINE + 5 +190 + 8 +0 + 62 + 0 + 10 +7215.525843 + 20 +9753.053841 + 30 +0.0 + 11 +7215.525843 + 21 +9753.053841 + 31 +0.0 + 0 +LINE + 5 +191 + 8 +0 + 62 + 0 + 10 +7228.538557 + 20 +9754.766997 + 30 +0.0 + 11 +7228.538557 + 21 +9754.766997 + 31 +0.0 + 0 +LINE + 5 +192 + 8 +0 + 62 + 0 + 10 +7205.488655 + 20 +9816.461183 + 30 +0.0 + 11 +7205.488655 + 21 +9816.461183 + 31 +0.0 + 0 +LINE + 5 +193 + 8 +0 + 62 + 0 + 10 +7225.813275 + 20 +9819.13697 + 30 +0.0 + 11 +7225.813275 + 21 +9819.13697 + 31 +0.0 + 0 +LINE + 5 +194 + 8 +0 + 62 + 0 + 10 +7202.763372 + 20 +9880.831157 + 30 +0.0 + 11 +7202.763372 + 21 +9880.831157 + 31 +0.0 + 0 +LINE + 5 +195 + 8 +0 + 62 + 0 + 10 +7213.670456 + 20 +9946.995865 + 30 +0.0 + 11 +7213.670456 + 21 +9946.995865 + 31 +0.0 + 0 +LINE + 5 +196 + 8 +0 + 62 + 0 + 10 +7226.68317 + 20 +9948.709021 + 30 +0.0 + 11 +7226.68317 + 21 +9948.709021 + 31 +0.0 + 0 +LINE + 5 +197 + 8 +0 + 62 + 0 + 10 +7199.897489 + 20 +9038.97993 + 30 +0.0 + 11 +7199.897489 + 21 +9038.97993 + 31 +0.0 + 0 +LINE + 5 +198 + 8 +0 + 62 + 0 + 10 +7212.910203 + 20 +9040.693086 + 30 +0.0 + 11 +7212.910203 + 21 +9040.693086 + 31 +0.0 + 0 +LINE + 5 +199 + 8 +0 + 62 + 0 + 10 +7222.947392 + 20 +8977.285744 + 30 +0.0 + 11 +7222.947392 + 21 +8977.285744 + 31 +0.0 + 0 +LINE + 5 +19A + 8 +0 + 62 + 0 + 10 +7212.040307 + 20 +8911.121035 + 30 +0.0 + 11 +7212.040307 + 21 +8911.121035 + 31 +0.0 + 0 +LINE + 5 +19B + 8 +0 + 62 + 0 + 10 +7201.752876 + 20 +8845.037906 + 30 +0.0 + 11 +7201.752876 + 21 +8845.037906 + 31 +0.0 + 0 +LINE + 5 +19C + 8 +0 + 62 + 0 + 10 +7214.76559 + 20 +8846.751062 + 30 +0.0 + 11 +7214.76559 + 21 +8846.751062 + 31 +0.0 + 0 +LINE + 5 +19D + 8 +0 + 62 + 0 + 10 +7224.802779 + 20 +8783.343719 + 30 +0.0 + 11 +7224.802779 + 21 +8783.343719 + 31 +0.0 + 0 +LINE + 5 +19E + 8 +0 + 62 + 0 + 10 +7213.895695 + 20 +8717.179011 + 30 +0.0 + 11 +7213.895695 + 21 +8717.179011 + 31 +0.0 + 0 +LINE + 5 +19F + 8 +0 + 62 + 0 + 10 +7203.608263 + 20 +8651.095881 + 30 +0.0 + 11 +7203.608263 + 21 +8651.095881 + 31 +0.0 + 0 +LINE + 5 +1A0 + 8 +0 + 62 + 0 + 10 +7216.620977 + 20 +8652.809038 + 30 +0.0 + 11 +7216.620977 + 21 +8652.809038 + 31 +0.0 + 0 +LINE + 5 +1A1 + 8 +0 + 62 + 0 + 10 +7226.658166 + 20 +8589.401695 + 30 +0.0 + 11 +7226.658166 + 21 +8589.401695 + 31 +0.0 + 0 +LINE + 5 +1A2 + 8 +0 + 62 + 0 + 10 +7195.426462 + 20 +8520.5612 + 30 +0.0 + 11 +7195.426462 + 21 +8520.5612 + 31 +0.0 + 0 +LINE + 5 +1A3 + 8 +0 + 62 + 0 + 10 +7215.751082 + 20 +8523.236987 + 30 +0.0 + 11 +7215.751082 + 21 +8523.236987 + 31 +0.0 + 0 +LINE + 5 +1A4 + 8 +0 + 62 + 0 + 10 +7205.46365 + 20 +8457.153857 + 30 +0.0 + 11 +7205.46365 + 21 +8457.153857 + 31 +0.0 + 0 +LINE + 5 +1A5 + 8 +0 + 62 + 0 + 10 +7218.476364 + 20 +8458.867013 + 30 +0.0 + 11 +7218.476364 + 21 +8458.867013 + 31 +0.0 + 0 +LINE + 5 +1A6 + 8 +0 + 62 + 0 + 10 +7228.513553 + 20 +8395.459671 + 30 +0.0 + 11 +7228.513553 + 21 +8395.459671 + 31 +0.0 + 0 +LINE + 5 +1A7 + 8 +0 + 62 + 0 + 10 +7197.281849 + 20 +8326.619175 + 30 +0.0 + 11 +7197.281849 + 21 +8326.619175 + 31 +0.0 + 0 +LINE + 5 +1A8 + 8 +0 + 62 + 0 + 10 +7217.606469 + 20 +8329.294962 + 30 +0.0 + 11 +7217.606469 + 21 +8329.294962 + 31 +0.0 + 0 +LINE + 5 +1A9 + 8 +0 + 62 + 0 + 10 +7220.221079 + 20 +9158.506548 + 30 +0.0 + 11 +7220.221079 + 21 +9158.506548 + 31 +0.0 + 0 +LINE + 5 +1AA + 8 +0 + 62 + 0 + 10 +7230.763472 + 20 +9151.790303 + 30 +0.0 + 11 +7230.763472 + 21 +9151.790303 + 31 +0.0 + 0 +LINE + 5 +1AB + 8 +0 + 62 + 0 + 10 +7200.03037 + 20 +9221.109104 + 30 +0.0 + 11 +7200.03037 + 21 +9221.109104 + 31 +0.0 + 0 +LINE + 5 +1AC + 8 +0 + 62 + 0 + 10 +7210.572763 + 20 +9214.392859 + 30 +0.0 + 11 +7210.572763 + 21 +9214.392859 + 31 +0.0 + 0 +LINE + 5 +1AD + 8 +0 + 62 + 0 + 10 +7228.334669 + 20 +9252.816933 + 30 +0.0 + 11 +7228.334669 + 21 +9252.816933 + 31 +0.0 + 0 +LINE + 5 +1AE + 8 +0 + 62 + 0 + 10 +7208.14396 + 20 +9315.419488 + 30 +0.0 + 11 +7208.14396 + 21 +9315.419488 + 31 +0.0 + 0 +LINE + 5 +1AF + 8 +0 + 62 + 0 + 10 +7217.311789 + 20 +9409.058248 + 30 +0.0 + 11 +7217.311789 + 21 +9409.058248 + 31 +0.0 + 0 +LINE + 5 +1B0 + 8 +0 + 62 + 0 + 10 +7227.854182 + 20 +9402.342003 + 30 +0.0 + 11 +7227.854182 + 21 +9402.342003 + 31 +0.0 + 0 +LINE + 5 +1B1 + 8 +0 + 62 + 0 + 10 +7197.12108 + 20 +9471.660804 + 30 +0.0 + 11 +7197.12108 + 21 +9471.660804 + 31 +0.0 + 0 +LINE + 5 +1B2 + 8 +0 + 62 + 0 + 10 +7207.663473 + 20 +9464.944559 + 30 +0.0 + 11 +7207.663473 + 21 +9464.944559 + 31 +0.0 + 0 +LINE + 5 +1B3 + 8 +0 + 62 + 0 + 10 +7225.425379 + 20 +9503.368632 + 30 +0.0 + 11 +7225.425379 + 21 +9503.368632 + 31 +0.0 + 0 +LINE + 5 +1B4 + 8 +0 + 62 + 0 + 10 +7205.23467 + 20 +9565.971188 + 30 +0.0 + 11 +7205.23467 + 21 +9565.971188 + 31 +0.0 + 0 +LINE + 5 +1B5 + 8 +0 + 62 + 0 + 10 +7214.402499 + 20 +9659.609948 + 30 +0.0 + 11 +7214.402499 + 21 +9659.609948 + 31 +0.0 + 0 +LINE + 5 +1B6 + 8 +0 + 62 + 0 + 10 +7224.944892 + 20 +9652.893702 + 30 +0.0 + 11 +7224.944892 + 21 +9652.893702 + 31 +0.0 + 0 +LINE + 5 +1B7 + 8 +0 + 62 + 0 + 10 +7204.754183 + 20 +9715.496258 + 30 +0.0 + 11 +7204.754183 + 21 +9715.496258 + 31 +0.0 + 0 +LINE + 5 +1B8 + 8 +0 + 62 + 0 + 10 +7222.516089 + 20 +9753.920332 + 30 +0.0 + 11 +7222.516089 + 21 +9753.920332 + 31 +0.0 + 0 +LINE + 5 +1B9 + 8 +0 + 62 + 0 + 10 +7202.32538 + 20 +9816.522888 + 30 +0.0 + 11 +7202.32538 + 21 +9816.522888 + 31 +0.0 + 0 +LINE + 5 +1BA + 8 +0 + 62 + 0 + 10 +7231.683919 + 20 +9847.559091 + 30 +0.0 + 11 +7231.683919 + 21 +9847.559091 + 31 +0.0 + 0 +LINE + 5 +1BB + 8 +0 + 62 + 0 + 10 +7211.49321 + 20 +9910.161647 + 30 +0.0 + 11 +7211.49321 + 21 +9910.161647 + 31 +0.0 + 0 +LINE + 5 +1BC + 8 +0 + 62 + 0 + 10 +7222.035603 + 20 +9903.445402 + 30 +0.0 + 11 +7222.035603 + 21 +9903.445402 + 31 +0.0 + 0 +LINE + 5 +1BD + 8 +0 + 62 + 0 + 10 +7201.844894 + 20 +9966.047958 + 30 +0.0 + 11 +7201.844894 + 21 +9966.047958 + 31 +0.0 + 0 +LINE + 5 +1BE + 8 +0 + 62 + 0 + 10 +7211.053249 + 20 +9064.867789 + 30 +0.0 + 11 +7211.053249 + 21 +9064.867789 + 31 +0.0 + 0 +LINE + 5 +1BF + 8 +0 + 62 + 0 + 10 +7231.243958 + 20 +9002.265233 + 30 +0.0 + 11 +7231.243958 + 21 +9002.265233 + 31 +0.0 + 0 +LINE + 5 +1C0 + 8 +0 + 62 + 0 + 10 +7202.939659 + 20 +8970.557405 + 30 +0.0 + 11 +7202.939659 + 21 +8970.557405 + 31 +0.0 + 0 +LINE + 5 +1C1 + 8 +0 + 62 + 0 + 10 +7213.482052 + 20 +8963.84116 + 30 +0.0 + 11 +7213.482052 + 21 +8963.84116 + 31 +0.0 + 0 +LINE + 5 +1C2 + 8 +0 + 62 + 0 + 10 +7223.130368 + 20 +8907.954849 + 30 +0.0 + 11 +7223.130368 + 21 +8907.954849 + 31 +0.0 + 0 +LINE + 5 +1C3 + 8 +0 + 62 + 0 + 10 +7213.962539 + 20 +8814.316089 + 30 +0.0 + 11 +7213.962539 + 21 +8814.316089 + 31 +0.0 + 0 +LINE + 5 +1C4 + 8 +0 + 62 + 0 + 10 +7196.200633 + 20 +8775.892016 + 30 +0.0 + 11 +7196.200633 + 21 +8775.892016 + 31 +0.0 + 0 +LINE + 5 +1C5 + 8 +0 + 62 + 0 + 10 +7205.848949 + 20 +8720.005705 + 30 +0.0 + 11 +7205.848949 + 21 +8720.005705 + 31 +0.0 + 0 +LINE + 5 +1C6 + 8 +0 + 62 + 0 + 10 +7216.391342 + 20 +8713.28946 + 30 +0.0 + 11 +7216.391342 + 21 +8713.28946 + 31 +0.0 + 0 +LINE + 5 +1C7 + 8 +0 + 62 + 0 + 10 +7226.039658 + 20 +8657.403149 + 30 +0.0 + 11 +7226.039658 + 21 +8657.403149 + 31 +0.0 + 0 +LINE + 5 +1C8 + 8 +0 + 62 + 0 + 10 +7196.681119 + 20 +8626.366945 + 30 +0.0 + 11 +7196.681119 + 21 +8626.366945 + 31 +0.0 + 0 +LINE + 5 +1C9 + 8 +0 + 62 + 0 + 10 +7216.871828 + 20 +8563.76439 + 30 +0.0 + 11 +7216.871828 + 21 +8563.76439 + 31 +0.0 + 0 +LINE + 5 +1CA + 8 +0 + 62 + 0 + 10 +7199.109922 + 20 +8525.340316 + 30 +0.0 + 11 +7199.109922 + 21 +8525.340316 + 31 +0.0 + 0 +LINE + 5 +1CB + 8 +0 + 62 + 0 + 10 +7208.758238 + 20 +8469.454005 + 30 +0.0 + 11 +7208.758238 + 21 +8469.454005 + 31 +0.0 + 0 +LINE + 5 +1CC + 8 +0 + 62 + 0 + 10 +7219.300631 + 20 +8462.73776 + 30 +0.0 + 11 +7219.300631 + 21 +8462.73776 + 31 +0.0 + 0 +LINE + 5 +1CD + 8 +0 + 62 + 0 + 10 +7228.948947 + 20 +8406.85145 + 30 +0.0 + 11 +7228.948947 + 21 +8406.85145 + 31 +0.0 + 0 +LINE + 5 +1CE + 8 +0 + 62 + 0 + 10 +7199.590409 + 20 +8375.815246 + 30 +0.0 + 11 +7199.590409 + 21 +8375.815246 + 31 +0.0 + 0 +LINE + 5 +1CF + 8 +0 + 62 + 0 + 10 +7219.781118 + 20 +8313.21269 + 30 +0.0 + 11 +7219.781118 + 21 +8313.21269 + 31 +0.0 + 0 +LINE + 5 +1D0 + 8 +0 + 62 + 0 + 10 +7206.897665 + 20 +9077.542164 + 30 +0.0 + 11 +7206.897665 + 21 +9077.542164 + 31 +0.0 + 0 +LINE + 5 +1D1 + 8 +0 + 62 + 0 + 10 +7231.780775 + 20 +9054.740994 + 30 +0.0 + 11 +7231.780775 + 21 +9054.740994 + 31 +0.0 + 0 +LINE + 5 +1D2 + 8 +0 + 62 + 0 + 10 +7204.45239 + 20 +9170.589922 + 30 +0.0 + 11 +7204.45239 + 21 +9170.589922 + 31 +0.0 + 0 +LINE + 5 +1D3 + 8 +0 + 62 + 0 + 10 +7209.060374 + 20 +9166.367484 + 30 +0.0 + 11 +7209.060374 + 21 +9166.367484 + 31 +0.0 + 0 +LINE + 5 +1D4 + 8 +0 + 62 + 0 + 10 +7230.810055 + 20 +9146.437572 + 30 +0.0 + 11 +7230.810055 + 21 +9146.437572 + 31 +0.0 + 0 +LINE + 5 +1D5 + 8 +0 + 62 + 0 + 10 +7203.48167 + 20 +9262.2865 + 30 +0.0 + 11 +7203.48167 + 21 +9262.2865 + 31 +0.0 + 0 +LINE + 5 +1D6 + 8 +0 + 62 + 0 + 10 +7228.364781 + 20 +9239.485331 + 30 +0.0 + 11 +7228.364781 + 21 +9239.485331 + 31 +0.0 + 0 +LINE + 5 +1D7 + 8 +0 + 62 + 0 + 10 +7201.036396 + 20 +9355.334259 + 30 +0.0 + 11 +7201.036396 + 21 +9355.334259 + 31 +0.0 + 0 +LINE + 5 +1D8 + 8 +0 + 62 + 0 + 10 +7205.644379 + 20 +9351.11182 + 30 +0.0 + 11 +7205.644379 + 21 +9351.11182 + 31 +0.0 + 0 +LINE + 5 +1D9 + 8 +0 + 62 + 0 + 10 +7227.394061 + 20 +9331.181909 + 30 +0.0 + 11 +7227.394061 + 21 +9331.181909 + 31 +0.0 + 0 +LINE + 5 +1DA + 8 +0 + 62 + 0 + 10 +7200.065676 + 20 +9447.030837 + 30 +0.0 + 11 +7200.065676 + 21 +9447.030837 + 31 +0.0 + 0 +LINE + 5 +1DB + 8 +0 + 62 + 0 + 10 +7224.948786 + 20 +9424.229667 + 30 +0.0 + 11 +7224.948786 + 21 +9424.229667 + 31 +0.0 + 0 +LINE + 5 +1DC + 8 +0 + 62 + 0 + 10 +7229.556769 + 20 +9420.007229 + 30 +0.0 + 11 +7229.556769 + 21 +9420.007229 + 31 +0.0 + 0 +LINE + 5 +1DD + 8 +0 + 62 + 0 + 10 +7197.620401 + 20 +9540.078595 + 30 +0.0 + 11 +7197.620401 + 21 +9540.078595 + 31 +0.0 + 0 +LINE + 5 +1DE + 8 +0 + 62 + 0 + 10 +7202.228385 + 20 +9535.856157 + 30 +0.0 + 11 +7202.228385 + 21 +9535.856157 + 31 +0.0 + 0 +LINE + 5 +1DF + 8 +0 + 62 + 0 + 10 +7223.978066 + 20 +9515.926246 + 30 +0.0 + 11 +7223.978066 + 21 +9515.926246 + 31 +0.0 + 0 +LINE + 5 +1E0 + 8 +0 + 62 + 0 + 10 +7196.649681 + 20 +9631.775174 + 30 +0.0 + 11 +7196.649681 + 21 +9631.775174 + 31 +0.0 + 0 +LINE + 5 +1E1 + 8 +0 + 62 + 0 + 10 +7221.532792 + 20 +9608.974004 + 30 +0.0 + 11 +7221.532792 + 21 +9608.974004 + 31 +0.0 + 0 +LINE + 5 +1E2 + 8 +0 + 62 + 0 + 10 +7226.140775 + 20 +9604.751565 + 30 +0.0 + 11 +7226.140775 + 21 +9604.751565 + 31 +0.0 + 0 +LINE + 5 +1E3 + 8 +0 + 62 + 0 + 10 +7198.81239 + 20 +9720.600493 + 30 +0.0 + 11 +7198.81239 + 21 +9720.600493 + 31 +0.0 + 0 +LINE + 5 +1E4 + 8 +0 + 62 + 0 + 10 +7220.562072 + 20 +9700.670582 + 30 +0.0 + 11 +7220.562072 + 21 +9700.670582 + 31 +0.0 + 0 +LINE + 5 +1E5 + 8 +0 + 62 + 0 + 10 +7218.116797 + 20 +9793.718341 + 30 +0.0 + 11 +7218.116797 + 21 +9793.718341 + 31 +0.0 + 0 +LINE + 5 +1E6 + 8 +0 + 62 + 0 + 10 +7222.72478 + 20 +9789.495902 + 30 +0.0 + 11 +7222.72478 + 21 +9789.495902 + 31 +0.0 + 0 +LINE + 5 +1E7 + 8 +0 + 62 + 0 + 10 +7195.396396 + 20 +9905.34483 + 30 +0.0 + 11 +7195.396396 + 21 +9905.34483 + 31 +0.0 + 0 +LINE + 5 +1E8 + 8 +0 + 62 + 0 + 10 +7217.146077 + 20 +9885.414919 + 30 +0.0 + 11 +7217.146077 + 21 +9885.414919 + 31 +0.0 + 0 +LINE + 5 +1E9 + 8 +0 + 62 + 0 + 10 +7207.868385 + 20 +8985.845586 + 30 +0.0 + 11 +7207.868385 + 21 +8985.845586 + 31 +0.0 + 0 +LINE + 5 +1EA + 8 +0 + 62 + 0 + 10 +7212.476368 + 20 +8981.623147 + 30 +0.0 + 11 +7212.476368 + 21 +8981.623147 + 31 +0.0 + 0 +LINE + 5 +1EB + 8 +0 + 62 + 0 + 10 +7210.313659 + 20 +8892.797827 + 30 +0.0 + 11 +7210.313659 + 21 +8892.797827 + 31 +0.0 + 0 +LINE + 5 +1EC + 8 +0 + 62 + 0 + 10 +7211.284379 + 20 +8801.101249 + 30 +0.0 + 11 +7211.284379 + 21 +8801.101249 + 31 +0.0 + 0 +LINE + 5 +1ED + 8 +0 + 62 + 0 + 10 +7215.892363 + 20 +8796.878811 + 30 +0.0 + 11 +7215.892363 + 21 +8796.878811 + 31 +0.0 + 0 +LINE + 5 +1EE + 8 +0 + 62 + 0 + 10 +7213.729654 + 20 +8708.053491 + 30 +0.0 + 11 +7213.729654 + 21 +8708.053491 + 31 +0.0 + 0 +LINE + 5 +1EF + 8 +0 + 62 + 0 + 10 +7214.700374 + 20 +8616.356913 + 30 +0.0 + 11 +7214.700374 + 21 +8616.356913 + 31 +0.0 + 0 +LINE + 5 +1F0 + 8 +0 + 62 + 0 + 10 +7219.308357 + 20 +8612.134474 + 30 +0.0 + 11 +7219.308357 + 21 +8612.134474 + 31 +0.0 + 0 +LINE + 5 +1F1 + 8 +0 + 62 + 0 + 10 +7195.395967 + 20 +8543.239065 + 30 +0.0 + 11 +7195.395967 + 21 +8543.239065 + 31 +0.0 + 0 +LINE + 5 +1F2 + 8 +0 + 62 + 0 + 10 +7217.145648 + 20 +8523.309154 + 30 +0.0 + 11 +7217.145648 + 21 +8523.309154 + 31 +0.0 + 0 +LINE + 5 +1F3 + 8 +0 + 62 + 0 + 10 +7218.116368 + 20 +8431.612576 + 30 +0.0 + 11 +7218.116368 + 21 +8431.612576 + 31 +0.0 + 0 +LINE + 5 +1F4 + 8 +0 + 62 + 0 + 10 +7222.724352 + 20 +8427.390137 + 30 +0.0 + 11 +7222.724352 + 21 +8427.390137 + 31 +0.0 + 0 +LINE + 5 +1F5 + 8 +0 + 62 + 0 + 10 +7198.811961 + 20 +8358.494729 + 30 +0.0 + 11 +7198.811961 + 21 +8358.494729 + 31 +0.0 + 0 +LINE + 5 +1F6 + 8 +0 + 62 + 0 + 10 +7220.561643 + 20 +8338.564818 + 30 +0.0 + 11 +7220.561643 + 21 +8338.564818 + 31 +0.0 + 0 +ENDBLK + 5 +1F7 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D14 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D14 + 1 + + 0 +LINE + 5 +1F9 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +7196.0 + 20 +7565.0 + 30 +0.0 + 11 +7229.0 + 21 +7565.0 + 31 +0.0 + 0 +INSERT + 5 +1FA + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +7195.0 + 20 +7565.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +1FB + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +7230.0 + 20 +7565.0 + 30 +0.0 + 0 +TEXT + 5 +1FC + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +7265.416667 + 20 +7608.75 + 30 +0.0 + 40 +87.5 + 1 +1 + 72 + 1 + 11 +7280.0 + 21 +7652.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +1FD + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7195.0 + 20 +8330.0 + 30 +0.0 + 0 +POINT + 5 +1FE + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7230.0 + 20 +8320.0 + 30 +0.0 + 0 +POINT + 5 +1FF + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7230.0 + 20 +7565.0 + 30 +0.0 + 0 +ENDBLK + 5 +200 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D16 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D16 + 1 + + 0 +LINE + 5 +202 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9678.828818 + 20 +12690.02817 + 30 +0.0 + 11 +9837.780624 + 21 +12431.731487 + 31 +0.0 + 0 +INSERT + 5 +203 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9678.304721 + 20 +12690.879828 + 30 +0.0 + 50 +121.607502 + 0 +INSERT + 5 +204 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9838.304721 + 20 +12430.879828 + 30 +0.0 + 50 +301.607502 + 0 +TEXT + 5 +205 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9764.992423 + 20 +12633.489159 + 30 +0.0 + 40 +87.5 + 1 +16 + 50 +301.607502 + 72 + 1 + 11 +9832.824824 + 21 +12606.738353 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +206 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8905.0 + 20 +12215.0 + 30 +0.0 + 0 +POINT + 5 +207 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9065.0 + 20 +11955.0 + 30 +0.0 + 0 +POINT + 5 +208 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9838.304721 + 20 +12430.879828 + 30 +0.0 + 0 +ENDBLK + 5 +209 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D23 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D23 + 1 + + 0 +LINE + 5 +20B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9578.676069 + 20 +12216.985896 + 30 +0.0 + 11 +9549.785469 + 21 +12260.321796 + 31 +0.0 + 0 +INSERT + 5 +20C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9579.230769 + 20 +12216.153846 + 30 +0.0 + 50 +303.690068 + 0 +INSERT + 5 +20D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9549.230769 + 20 +12261.153846 + 30 +0.0 + 50 +123.690068 + 0 +TEXT + 5 +20E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9632.419044 + 20 +12225.0 + 30 +0.0 + 40 +87.5 + 1 +2 + 50 +303.690068 + 72 + 1 + 11 +9685.0 + 21 +12225.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +20F + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9105.0 + 20 +11900.0 + 30 +0.0 + 0 +POINT + 5 +210 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9075.0 + 20 +11945.0 + 30 +0.0 + 0 +POINT + 5 +211 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9549.230769 + 20 +12261.153846 + 30 +0.0 + 0 +ENDBLK + 5 +212 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D24 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D24 + 1 + + 0 +LINE + 5 +214 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9548.676069 + 20 +12261.985896 + 30 +0.0 + 11 +9282.093162 + 21 +12661.860257 + 31 +0.0 + 0 +INSERT + 5 +215 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9549.230769 + 20 +12261.153846 + 30 +0.0 + 50 +303.690068 + 0 +INSERT + 5 +216 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9281.538462 + 20 +12662.692308 + 30 +0.0 + 50 +123.690068 + 0 +TEXT + 5 +217 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9419.429304 + 20 +12534.727478 + 30 +0.0 + 40 +87.5 + 1 +18 + 50 +303.690068 + 72 + 1 + 11 +9488.189016 + 21 +12510.459344 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +218 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9075.0 + 20 +11945.0 + 30 +0.0 + 0 +POINT + 5 +219 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8820.0 + 20 +12355.0 + 30 +0.0 + 0 +POINT + 5 +21A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9281.538462 + 20 +12662.692308 + 30 +0.0 + 0 +ENDBLK + 5 +21B + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D25 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D25 + 1 + + 0 +LINE + 5 +21D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9280.983761 + 20 +12663.524358 + 30 +0.0 + 11 +9233.631623 + 21 +12734.552565 + 31 +0.0 + 0 +INSERT + 5 +21E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9281.538462 + 20 +12662.692308 + 30 +0.0 + 50 +303.690068 + 0 +INSERT + 5 +21F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9233.076923 + 20 +12735.384615 + 30 +0.0 + 50 +123.690068 + 0 +TEXT + 5 +220 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9277.531137 + 20 +12747.574729 + 30 +0.0 + 40 +87.5 + 1 +3 + 50 +303.690068 + 72 + 1 + 11 +9330.112093 + 21 +12747.574729 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +221 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8820.0 + 20 +12355.0 + 30 +0.0 + 0 +POINT + 5 +222 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8775.0 + 20 +12430.0 + 30 +0.0 + 0 +POINT + 5 +223 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9233.076923 + 20 +12735.384615 + 30 +0.0 + 0 +ENDBLK + 5 +224 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X26 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X26 + 1 + + 0 +LINE + 5 +226 + 8 +0 + 62 + 0 + 10 +5126.85938 + 20 +4347.007496 + 30 +0.0 + 11 +5158.125 + 21 +4347.007496 + 31 +0.0 + 0 +LINE + 5 +227 + 8 +0 + 62 + 0 + 10 +5270.625 + 20 +4347.007496 + 30 +0.0 + 11 +5326.875 + 21 +4347.007496 + 31 +0.0 + 0 +LINE + 5 +228 + 8 +0 + 62 + 0 + 10 +5439.375 + 20 +4347.007496 + 30 +0.0 + 11 +5495.625 + 21 +4347.007496 + 31 +0.0 + 0 +LINE + 5 +229 + 8 +0 + 62 + 0 + 10 +5608.125 + 20 +4347.007496 + 30 +0.0 + 11 +5664.375 + 21 +4347.007496 + 31 +0.0 + 0 +LINE + 5 +22A + 8 +0 + 62 + 0 + 10 +5776.875 + 20 +4347.007496 + 30 +0.0 + 11 +5833.125 + 21 +4347.007496 + 31 +0.0 + 0 +LINE + 5 +22B + 8 +0 + 62 + 0 + 10 +5945.625 + 20 +4347.007496 + 30 +0.0 + 11 +6001.875 + 21 +4347.007496 + 31 +0.0 + 0 +LINE + 5 +22C + 8 +0 + 62 + 0 + 10 +6114.375 + 20 +4347.007496 + 30 +0.0 + 11 +6170.625 + 21 +4347.007496 + 31 +0.0 + 0 +LINE + 5 +22D + 8 +0 + 62 + 0 + 10 +6283.125 + 20 +4347.007496 + 30 +0.0 + 11 +6339.375 + 21 +4347.007496 + 31 +0.0 + 0 +LINE + 5 +22E + 8 +0 + 62 + 0 + 10 +6451.875 + 20 +4347.007496 + 30 +0.0 + 11 +6508.125 + 21 +4347.007496 + 31 +0.0 + 0 +LINE + 5 +22F + 8 +0 + 62 + 0 + 10 +6620.625 + 20 +4347.007496 + 30 +0.0 + 11 +6676.875 + 21 +4347.007496 + 31 +0.0 + 0 +LINE + 5 +230 + 8 +0 + 62 + 0 + 10 +6789.375 + 20 +4347.007496 + 30 +0.0 + 11 +6845.625 + 21 +4347.007496 + 31 +0.0 + 0 +LINE + 5 +231 + 8 +0 + 62 + 0 + 10 +6958.125 + 20 +4347.007496 + 30 +0.0 + 11 +7014.375 + 21 +4347.007496 + 31 +0.0 + 0 +LINE + 5 +232 + 8 +0 + 62 + 0 + 10 +7126.875 + 20 +4347.007496 + 30 +0.0 + 11 +7183.125 + 21 +4347.007496 + 31 +0.0 + 0 +LINE + 5 +233 + 8 +0 + 62 + 0 + 10 +7295.625 + 20 +4347.007496 + 30 +0.0 + 11 +7351.875 + 21 +4347.007496 + 31 +0.0 + 0 +LINE + 5 +234 + 8 +0 + 62 + 0 + 10 +7464.375 + 20 +4347.007496 + 30 +0.0 + 11 +7520.625 + 21 +4347.007496 + 31 +0.0 + 0 +LINE + 5 +235 + 8 +0 + 62 + 0 + 10 +7633.125 + 20 +4347.007496 + 30 +0.0 + 11 +7689.375 + 21 +4347.007496 + 31 +0.0 + 0 +LINE + 5 +236 + 8 +0 + 62 + 0 + 10 +7801.875 + 20 +4347.007496 + 30 +0.0 + 11 +7858.125 + 21 +4347.007496 + 31 +0.0 + 0 +LINE + 5 +237 + 8 +0 + 62 + 0 + 10 +7970.625 + 20 +4347.007496 + 30 +0.0 + 11 +8026.875 + 21 +4347.007496 + 31 +0.0 + 0 +LINE + 5 +238 + 8 +0 + 62 + 0 + 10 +8139.375 + 20 +4347.007496 + 30 +0.0 + 11 +8195.625 + 21 +4347.007496 + 31 +0.0 + 0 +LINE + 5 +239 + 8 +0 + 62 + 0 + 10 +8308.125 + 20 +4347.007496 + 30 +0.0 + 11 +8364.375 + 21 +4347.007496 + 31 +0.0 + 0 +LINE + 5 +23A + 8 +0 + 62 + 0 + 10 +8476.875 + 20 +4347.007496 + 30 +0.0 + 11 +8533.125 + 21 +4347.007496 + 31 +0.0 + 0 +LINE + 5 +23B + 8 +0 + 62 + 0 + 10 +8645.625 + 20 +4347.007496 + 30 +0.0 + 11 +8701.875 + 21 +4347.007496 + 31 +0.0 + 0 +LINE + 5 +23C + 8 +0 + 62 + 0 + 10 +8814.375 + 20 +4347.007496 + 30 +0.0 + 11 +8845.0 + 21 +4347.007496 + 31 +0.0 + 0 +LINE + 5 +23D + 8 +0 + 62 + 0 + 10 +5186.25 + 20 +4395.721425 + 30 +0.0 + 11 +5242.5 + 21 +4395.721425 + 31 +0.0 + 0 +LINE + 5 +23E + 8 +0 + 62 + 0 + 10 +5355.0 + 20 +4395.721425 + 30 +0.0 + 11 +5411.25 + 21 +4395.721425 + 31 +0.0 + 0 +LINE + 5 +23F + 8 +0 + 62 + 0 + 10 +5523.75 + 20 +4395.721425 + 30 +0.0 + 11 +5580.0 + 21 +4395.721425 + 31 +0.0 + 0 +LINE + 5 +240 + 8 +0 + 62 + 0 + 10 +5692.5 + 20 +4395.721425 + 30 +0.0 + 11 +5748.75 + 21 +4395.721425 + 31 +0.0 + 0 +LINE + 5 +241 + 8 +0 + 62 + 0 + 10 +5861.25 + 20 +4395.721425 + 30 +0.0 + 11 +5917.5 + 21 +4395.721425 + 31 +0.0 + 0 +LINE + 5 +242 + 8 +0 + 62 + 0 + 10 +6030.0 + 20 +4395.721425 + 30 +0.0 + 11 +6086.25 + 21 +4395.721425 + 31 +0.0 + 0 +LINE + 5 +243 + 8 +0 + 62 + 0 + 10 +6198.75 + 20 +4395.721425 + 30 +0.0 + 11 +6255.0 + 21 +4395.721425 + 31 +0.0 + 0 +LINE + 5 +244 + 8 +0 + 62 + 0 + 10 +6367.5 + 20 +4395.721425 + 30 +0.0 + 11 +6423.75 + 21 +4395.721425 + 31 +0.0 + 0 +LINE + 5 +245 + 8 +0 + 62 + 0 + 10 +6536.25 + 20 +4395.721425 + 30 +0.0 + 11 +6592.5 + 21 +4395.721425 + 31 +0.0 + 0 +LINE + 5 +246 + 8 +0 + 62 + 0 + 10 +6705.0 + 20 +4395.721425 + 30 +0.0 + 11 +6761.25 + 21 +4395.721425 + 31 +0.0 + 0 +LINE + 5 +247 + 8 +0 + 62 + 0 + 10 +6873.75 + 20 +4395.721425 + 30 +0.0 + 11 +6930.0 + 21 +4395.721425 + 31 +0.0 + 0 +LINE + 5 +248 + 8 +0 + 62 + 0 + 10 +7042.5 + 20 +4395.721425 + 30 +0.0 + 11 +7098.75 + 21 +4395.721425 + 31 +0.0 + 0 +LINE + 5 +249 + 8 +0 + 62 + 0 + 10 +7211.25 + 20 +4395.721425 + 30 +0.0 + 11 +7267.5 + 21 +4395.721425 + 31 +0.0 + 0 +LINE + 5 +24A + 8 +0 + 62 + 0 + 10 +7380.0 + 20 +4395.721425 + 30 +0.0 + 11 +7436.25 + 21 +4395.721425 + 31 +0.0 + 0 +LINE + 5 +24B + 8 +0 + 62 + 0 + 10 +7548.75 + 20 +4395.721425 + 30 +0.0 + 11 +7605.0 + 21 +4395.721425 + 31 +0.0 + 0 +LINE + 5 +24C + 8 +0 + 62 + 0 + 10 +7717.5 + 20 +4395.721425 + 30 +0.0 + 11 +7773.75 + 21 +4395.721425 + 31 +0.0 + 0 +LINE + 5 +24D + 8 +0 + 62 + 0 + 10 +7886.25 + 20 +4395.721425 + 30 +0.0 + 11 +7942.5 + 21 +4395.721425 + 31 +0.0 + 0 +LINE + 5 +24E + 8 +0 + 62 + 0 + 10 +8055.0 + 20 +4395.721425 + 30 +0.0 + 11 +8111.25 + 21 +4395.721425 + 31 +0.0 + 0 +LINE + 5 +24F + 8 +0 + 62 + 0 + 10 +8223.75 + 20 +4395.721425 + 30 +0.0 + 11 +8280.0 + 21 +4395.721425 + 31 +0.0 + 0 +LINE + 5 +250 + 8 +0 + 62 + 0 + 10 +8392.5 + 20 +4395.721425 + 30 +0.0 + 11 +8448.75 + 21 +4395.721425 + 31 +0.0 + 0 +LINE + 5 +251 + 8 +0 + 62 + 0 + 10 +8561.25 + 20 +4395.721425 + 30 +0.0 + 11 +8617.5 + 21 +4395.721425 + 31 +0.0 + 0 +LINE + 5 +252 + 8 +0 + 62 + 0 + 10 +8730.0 + 20 +4395.721425 + 30 +0.0 + 11 +8786.25 + 21 +4395.721425 + 31 +0.0 + 0 +LINE + 5 +253 + 8 +0 + 62 + 0 + 10 +5126.85938 + 20 +4444.435354 + 30 +0.0 + 11 +5158.125 + 21 +4444.435354 + 31 +0.0 + 0 +LINE + 5 +254 + 8 +0 + 62 + 0 + 10 +5270.625 + 20 +4444.435354 + 30 +0.0 + 11 +5326.875 + 21 +4444.435354 + 31 +0.0 + 0 +LINE + 5 +255 + 8 +0 + 62 + 0 + 10 +5439.375 + 20 +4444.435354 + 30 +0.0 + 11 +5495.625 + 21 +4444.435354 + 31 +0.0 + 0 +LINE + 5 +256 + 8 +0 + 62 + 0 + 10 +5608.125 + 20 +4444.435354 + 30 +0.0 + 11 +5664.375 + 21 +4444.435354 + 31 +0.0 + 0 +LINE + 5 +257 + 8 +0 + 62 + 0 + 10 +5776.875 + 20 +4444.435354 + 30 +0.0 + 11 +5833.125 + 21 +4444.435354 + 31 +0.0 + 0 +LINE + 5 +258 + 8 +0 + 62 + 0 + 10 +5945.625 + 20 +4444.435354 + 30 +0.0 + 11 +6001.875 + 21 +4444.435354 + 31 +0.0 + 0 +LINE + 5 +259 + 8 +0 + 62 + 0 + 10 +6114.375 + 20 +4444.435354 + 30 +0.0 + 11 +6170.625 + 21 +4444.435354 + 31 +0.0 + 0 +LINE + 5 +25A + 8 +0 + 62 + 0 + 10 +6283.125 + 20 +4444.435354 + 30 +0.0 + 11 +6339.375 + 21 +4444.435354 + 31 +0.0 + 0 +LINE + 5 +25B + 8 +0 + 62 + 0 + 10 +6451.875 + 20 +4444.435354 + 30 +0.0 + 11 +6508.125 + 21 +4444.435354 + 31 +0.0 + 0 +LINE + 5 +25C + 8 +0 + 62 + 0 + 10 +6620.625 + 20 +4444.435354 + 30 +0.0 + 11 +6676.875 + 21 +4444.435354 + 31 +0.0 + 0 +LINE + 5 +25D + 8 +0 + 62 + 0 + 10 +6789.375 + 20 +4444.435354 + 30 +0.0 + 11 +6845.625 + 21 +4444.435354 + 31 +0.0 + 0 +LINE + 5 +25E + 8 +0 + 62 + 0 + 10 +6958.125 + 20 +4444.435354 + 30 +0.0 + 11 +7014.375 + 21 +4444.435354 + 31 +0.0 + 0 +LINE + 5 +25F + 8 +0 + 62 + 0 + 10 +7126.875 + 20 +4444.435354 + 30 +0.0 + 11 +7183.125 + 21 +4444.435354 + 31 +0.0 + 0 +LINE + 5 +260 + 8 +0 + 62 + 0 + 10 +7295.625 + 20 +4444.435354 + 30 +0.0 + 11 +7351.875 + 21 +4444.435354 + 31 +0.0 + 0 +LINE + 5 +261 + 8 +0 + 62 + 0 + 10 +7464.375 + 20 +4444.435354 + 30 +0.0 + 11 +7520.625 + 21 +4444.435354 + 31 +0.0 + 0 +LINE + 5 +262 + 8 +0 + 62 + 0 + 10 +7633.125 + 20 +4444.435354 + 30 +0.0 + 11 +7689.375 + 21 +4444.435354 + 31 +0.0 + 0 +LINE + 5 +263 + 8 +0 + 62 + 0 + 10 +7801.875 + 20 +4444.435354 + 30 +0.0 + 11 +7858.125 + 21 +4444.435354 + 31 +0.0 + 0 +LINE + 5 +264 + 8 +0 + 62 + 0 + 10 +7970.625 + 20 +4444.435354 + 30 +0.0 + 11 +8026.875 + 21 +4444.435354 + 31 +0.0 + 0 +LINE + 5 +265 + 8 +0 + 62 + 0 + 10 +8139.375 + 20 +4444.435354 + 30 +0.0 + 11 +8195.625 + 21 +4444.435354 + 31 +0.0 + 0 +LINE + 5 +266 + 8 +0 + 62 + 0 + 10 +8308.125 + 20 +4444.435354 + 30 +0.0 + 11 +8364.375 + 21 +4444.435354 + 31 +0.0 + 0 +LINE + 5 +267 + 8 +0 + 62 + 0 + 10 +8476.875 + 20 +4444.435354 + 30 +0.0 + 11 +8533.125 + 21 +4444.435354 + 31 +0.0 + 0 +LINE + 5 +268 + 8 +0 + 62 + 0 + 10 +8645.625 + 20 +4444.435354 + 30 +0.0 + 11 +8701.875 + 21 +4444.435354 + 31 +0.0 + 0 +LINE + 5 +269 + 8 +0 + 62 + 0 + 10 +8814.375 + 20 +4444.435354 + 30 +0.0 + 11 +8845.0 + 21 +4444.435354 + 31 +0.0 + 0 +LINE + 5 +26A + 8 +0 + 62 + 0 + 10 +5186.25 + 20 +4298.293568 + 30 +0.0 + 11 +5242.5 + 21 +4298.293568 + 31 +0.0 + 0 +LINE + 5 +26B + 8 +0 + 62 + 0 + 10 +5355.0 + 20 +4298.293568 + 30 +0.0 + 11 +5411.25 + 21 +4298.293568 + 31 +0.0 + 0 +LINE + 5 +26C + 8 +0 + 62 + 0 + 10 +5523.75 + 20 +4298.293568 + 30 +0.0 + 11 +5580.0 + 21 +4298.293568 + 31 +0.0 + 0 +LINE + 5 +26D + 8 +0 + 62 + 0 + 10 +5692.5 + 20 +4298.293568 + 30 +0.0 + 11 +5748.75 + 21 +4298.293568 + 31 +0.0 + 0 +LINE + 5 +26E + 8 +0 + 62 + 0 + 10 +5861.25 + 20 +4298.293568 + 30 +0.0 + 11 +5917.5 + 21 +4298.293568 + 31 +0.0 + 0 +LINE + 5 +26F + 8 +0 + 62 + 0 + 10 +6030.0 + 20 +4298.293568 + 30 +0.0 + 11 +6086.25 + 21 +4298.293568 + 31 +0.0 + 0 +LINE + 5 +270 + 8 +0 + 62 + 0 + 10 +6198.75 + 20 +4298.293568 + 30 +0.0 + 11 +6255.0 + 21 +4298.293568 + 31 +0.0 + 0 +LINE + 5 +271 + 8 +0 + 62 + 0 + 10 +6367.5 + 20 +4298.293568 + 30 +0.0 + 11 +6423.75 + 21 +4298.293568 + 31 +0.0 + 0 +LINE + 5 +272 + 8 +0 + 62 + 0 + 10 +6536.25 + 20 +4298.293568 + 30 +0.0 + 11 +6592.5 + 21 +4298.293568 + 31 +0.0 + 0 +LINE + 5 +273 + 8 +0 + 62 + 0 + 10 +6705.0 + 20 +4298.293568 + 30 +0.0 + 11 +6761.25 + 21 +4298.293568 + 31 +0.0 + 0 +LINE + 5 +274 + 8 +0 + 62 + 0 + 10 +6873.75 + 20 +4298.293568 + 30 +0.0 + 11 +6930.0 + 21 +4298.293568 + 31 +0.0 + 0 +LINE + 5 +275 + 8 +0 + 62 + 0 + 10 +7042.5 + 20 +4298.293568 + 30 +0.0 + 11 +7098.75 + 21 +4298.293568 + 31 +0.0 + 0 +LINE + 5 +276 + 8 +0 + 62 + 0 + 10 +7211.25 + 20 +4298.293568 + 30 +0.0 + 11 +7267.5 + 21 +4298.293568 + 31 +0.0 + 0 +LINE + 5 +277 + 8 +0 + 62 + 0 + 10 +7380.0 + 20 +4298.293568 + 30 +0.0 + 11 +7436.25 + 21 +4298.293568 + 31 +0.0 + 0 +LINE + 5 +278 + 8 +0 + 62 + 0 + 10 +7548.75 + 20 +4298.293568 + 30 +0.0 + 11 +7605.0 + 21 +4298.293568 + 31 +0.0 + 0 +LINE + 5 +279 + 8 +0 + 62 + 0 + 10 +7717.5 + 20 +4298.293568 + 30 +0.0 + 11 +7773.75 + 21 +4298.293568 + 31 +0.0 + 0 +LINE + 5 +27A + 8 +0 + 62 + 0 + 10 +7886.25 + 20 +4298.293568 + 30 +0.0 + 11 +7942.5 + 21 +4298.293568 + 31 +0.0 + 0 +LINE + 5 +27B + 8 +0 + 62 + 0 + 10 +8055.0 + 20 +4298.293568 + 30 +0.0 + 11 +8111.25 + 21 +4298.293568 + 31 +0.0 + 0 +LINE + 5 +27C + 8 +0 + 62 + 0 + 10 +8223.75 + 20 +4298.293568 + 30 +0.0 + 11 +8280.0 + 21 +4298.293568 + 31 +0.0 + 0 +LINE + 5 +27D + 8 +0 + 62 + 0 + 10 +8392.5 + 20 +4298.293568 + 30 +0.0 + 11 +8448.75 + 21 +4298.293568 + 31 +0.0 + 0 +LINE + 5 +27E + 8 +0 + 62 + 0 + 10 +8561.25 + 20 +4298.293568 + 30 +0.0 + 11 +8617.5 + 21 +4298.293568 + 31 +0.0 + 0 +LINE + 5 +27F + 8 +0 + 62 + 0 + 10 +8730.0 + 20 +4298.293568 + 30 +0.0 + 11 +8786.25 + 21 +4298.293568 + 31 +0.0 + 0 +LINE + 5 +280 + 8 +0 + 62 + 0 + 10 +5126.85938 + 20 +4249.579639 + 30 +0.0 + 11 +5158.125 + 21 +4249.579639 + 31 +0.0 + 0 +LINE + 5 +281 + 8 +0 + 62 + 0 + 10 +5270.625 + 20 +4249.579639 + 30 +0.0 + 11 +5326.875 + 21 +4249.579639 + 31 +0.0 + 0 +LINE + 5 +282 + 8 +0 + 62 + 0 + 10 +5439.375 + 20 +4249.579639 + 30 +0.0 + 11 +5495.625 + 21 +4249.579639 + 31 +0.0 + 0 +LINE + 5 +283 + 8 +0 + 62 + 0 + 10 +5608.125 + 20 +4249.579639 + 30 +0.0 + 11 +5664.375 + 21 +4249.579639 + 31 +0.0 + 0 +LINE + 5 +284 + 8 +0 + 62 + 0 + 10 +5776.875 + 20 +4249.579639 + 30 +0.0 + 11 +5833.125 + 21 +4249.579639 + 31 +0.0 + 0 +LINE + 5 +285 + 8 +0 + 62 + 0 + 10 +5945.625 + 20 +4249.579639 + 30 +0.0 + 11 +6001.875 + 21 +4249.579639 + 31 +0.0 + 0 +LINE + 5 +286 + 8 +0 + 62 + 0 + 10 +6114.375 + 20 +4249.579639 + 30 +0.0 + 11 +6170.625 + 21 +4249.579639 + 31 +0.0 + 0 +LINE + 5 +287 + 8 +0 + 62 + 0 + 10 +6283.125 + 20 +4249.579639 + 30 +0.0 + 11 +6339.375 + 21 +4249.579639 + 31 +0.0 + 0 +LINE + 5 +288 + 8 +0 + 62 + 0 + 10 +6451.875 + 20 +4249.579639 + 30 +0.0 + 11 +6508.125 + 21 +4249.579639 + 31 +0.0 + 0 +LINE + 5 +289 + 8 +0 + 62 + 0 + 10 +6620.625 + 20 +4249.579639 + 30 +0.0 + 11 +6676.875 + 21 +4249.579639 + 31 +0.0 + 0 +LINE + 5 +28A + 8 +0 + 62 + 0 + 10 +6789.375 + 20 +4249.579639 + 30 +0.0 + 11 +6845.625 + 21 +4249.579639 + 31 +0.0 + 0 +LINE + 5 +28B + 8 +0 + 62 + 0 + 10 +6958.125 + 20 +4249.579639 + 30 +0.0 + 11 +7014.375 + 21 +4249.579639 + 31 +0.0 + 0 +LINE + 5 +28C + 8 +0 + 62 + 0 + 10 +7126.875 + 20 +4249.579639 + 30 +0.0 + 11 +7183.125 + 21 +4249.579639 + 31 +0.0 + 0 +LINE + 5 +28D + 8 +0 + 62 + 0 + 10 +7295.625 + 20 +4249.579639 + 30 +0.0 + 11 +7351.875 + 21 +4249.579639 + 31 +0.0 + 0 +LINE + 5 +28E + 8 +0 + 62 + 0 + 10 +7464.375 + 20 +4249.579639 + 30 +0.0 + 11 +7520.625 + 21 +4249.579639 + 31 +0.0 + 0 +LINE + 5 +28F + 8 +0 + 62 + 0 + 10 +7633.125 + 20 +4249.579639 + 30 +0.0 + 11 +7689.375 + 21 +4249.579639 + 31 +0.0 + 0 +LINE + 5 +290 + 8 +0 + 62 + 0 + 10 +7801.875 + 20 +4249.579639 + 30 +0.0 + 11 +7858.125 + 21 +4249.579639 + 31 +0.0 + 0 +LINE + 5 +291 + 8 +0 + 62 + 0 + 10 +7970.625 + 20 +4249.579639 + 30 +0.0 + 11 +8026.875 + 21 +4249.579639 + 31 +0.0 + 0 +LINE + 5 +292 + 8 +0 + 62 + 0 + 10 +8139.375 + 20 +4249.579639 + 30 +0.0 + 11 +8195.625 + 21 +4249.579639 + 31 +0.0 + 0 +LINE + 5 +293 + 8 +0 + 62 + 0 + 10 +8308.125 + 20 +4249.579639 + 30 +0.0 + 11 +8364.375 + 21 +4249.579639 + 31 +0.0 + 0 +LINE + 5 +294 + 8 +0 + 62 + 0 + 10 +8476.875 + 20 +4249.579639 + 30 +0.0 + 11 +8533.125 + 21 +4249.579639 + 31 +0.0 + 0 +LINE + 5 +295 + 8 +0 + 62 + 0 + 10 +8645.625 + 20 +4249.579639 + 30 +0.0 + 11 +8701.875 + 21 +4249.579639 + 31 +0.0 + 0 +LINE + 5 +296 + 8 +0 + 62 + 0 + 10 +8814.375 + 20 +4249.579639 + 30 +0.0 + 11 +8845.0 + 21 +4249.579639 + 31 +0.0 + 0 +LINE + 5 +297 + 8 +0 + 62 + 0 + 10 +5186.25 + 20 +4200.86571 + 30 +0.0 + 11 +5242.5 + 21 +4200.86571 + 31 +0.0 + 0 +LINE + 5 +298 + 8 +0 + 62 + 0 + 10 +5355.0 + 20 +4200.86571 + 30 +0.0 + 11 +5411.25 + 21 +4200.86571 + 31 +0.0 + 0 +LINE + 5 +299 + 8 +0 + 62 + 0 + 10 +5523.75 + 20 +4200.86571 + 30 +0.0 + 11 +5580.0 + 21 +4200.86571 + 31 +0.0 + 0 +LINE + 5 +29A + 8 +0 + 62 + 0 + 10 +5692.5 + 20 +4200.86571 + 30 +0.0 + 11 +5748.75 + 21 +4200.86571 + 31 +0.0 + 0 +LINE + 5 +29B + 8 +0 + 62 + 0 + 10 +5861.25 + 20 +4200.86571 + 30 +0.0 + 11 +5917.5 + 21 +4200.86571 + 31 +0.0 + 0 +LINE + 5 +29C + 8 +0 + 62 + 0 + 10 +6030.0 + 20 +4200.86571 + 30 +0.0 + 11 +6086.25 + 21 +4200.86571 + 31 +0.0 + 0 +LINE + 5 +29D + 8 +0 + 62 + 0 + 10 +6198.75 + 20 +4200.86571 + 30 +0.0 + 11 +6255.0 + 21 +4200.86571 + 31 +0.0 + 0 +LINE + 5 +29E + 8 +0 + 62 + 0 + 10 +6367.5 + 20 +4200.86571 + 30 +0.0 + 11 +6423.75 + 21 +4200.86571 + 31 +0.0 + 0 +LINE + 5 +29F + 8 +0 + 62 + 0 + 10 +6536.25 + 20 +4200.86571 + 30 +0.0 + 11 +6592.5 + 21 +4200.86571 + 31 +0.0 + 0 +LINE + 5 +2A0 + 8 +0 + 62 + 0 + 10 +6705.0 + 20 +4200.86571 + 30 +0.0 + 11 +6761.25 + 21 +4200.86571 + 31 +0.0 + 0 +LINE + 5 +2A1 + 8 +0 + 62 + 0 + 10 +6873.75 + 20 +4200.86571 + 30 +0.0 + 11 +6930.0 + 21 +4200.86571 + 31 +0.0 + 0 +LINE + 5 +2A2 + 8 +0 + 62 + 0 + 10 +7042.5 + 20 +4200.86571 + 30 +0.0 + 11 +7098.75 + 21 +4200.86571 + 31 +0.0 + 0 +LINE + 5 +2A3 + 8 +0 + 62 + 0 + 10 +7211.25 + 20 +4200.86571 + 30 +0.0 + 11 +7267.5 + 21 +4200.86571 + 31 +0.0 + 0 +LINE + 5 +2A4 + 8 +0 + 62 + 0 + 10 +7380.0 + 20 +4200.86571 + 30 +0.0 + 11 +7436.25 + 21 +4200.86571 + 31 +0.0 + 0 +LINE + 5 +2A5 + 8 +0 + 62 + 0 + 10 +7548.75 + 20 +4200.86571 + 30 +0.0 + 11 +7605.0 + 21 +4200.86571 + 31 +0.0 + 0 +LINE + 5 +2A6 + 8 +0 + 62 + 0 + 10 +7717.5 + 20 +4200.86571 + 30 +0.0 + 11 +7773.75 + 21 +4200.86571 + 31 +0.0 + 0 +LINE + 5 +2A7 + 8 +0 + 62 + 0 + 10 +7886.25 + 20 +4200.86571 + 30 +0.0 + 11 +7942.5 + 21 +4200.86571 + 31 +0.0 + 0 +LINE + 5 +2A8 + 8 +0 + 62 + 0 + 10 +8055.0 + 20 +4200.86571 + 30 +0.0 + 11 +8111.25 + 21 +4200.86571 + 31 +0.0 + 0 +LINE + 5 +2A9 + 8 +0 + 62 + 0 + 10 +8223.75 + 20 +4200.86571 + 30 +0.0 + 11 +8280.0 + 21 +4200.86571 + 31 +0.0 + 0 +LINE + 5 +2AA + 8 +0 + 62 + 0 + 10 +8392.5 + 20 +4200.86571 + 30 +0.0 + 11 +8448.75 + 21 +4200.86571 + 31 +0.0 + 0 +LINE + 5 +2AB + 8 +0 + 62 + 0 + 10 +8561.25 + 20 +4200.86571 + 30 +0.0 + 11 +8617.5 + 21 +4200.86571 + 31 +0.0 + 0 +LINE + 5 +2AC + 8 +0 + 62 + 0 + 10 +8730.0 + 20 +4200.86571 + 30 +0.0 + 11 +8786.25 + 21 +4200.86571 + 31 +0.0 + 0 +LINE + 5 +2AD + 8 +0 + 62 + 0 + 10 +7042.499992 + 20 +4200.8657 + 30 +0.0 + 11 +7014.374992 + 21 +4249.579629 + 31 +0.0 + 0 +LINE + 5 +2AE + 8 +0 + 62 + 0 + 10 +6958.124992 + 20 +4347.007487 + 30 +0.0 + 11 +6929.999992 + 21 +4395.721416 + 31 +0.0 + 0 +LINE + 5 +2AF + 8 +0 + 62 + 0 + 10 +6958.124992 + 20 +4249.579629 + 30 +0.0 + 11 +6929.999992 + 21 +4298.293558 + 31 +0.0 + 0 +LINE + 5 +2B0 + 8 +0 + 62 + 0 + 10 +6873.749992 + 20 +4395.721416 + 30 +0.0 + 11 +6845.624992 + 21 +4444.435345 + 31 +0.0 + 0 +LINE + 5 +2B1 + 8 +0 + 62 + 0 + 10 +6934.62201 + 20 +4192.860132 + 30 +0.0 + 11 +6929.999993 + 21 +4200.865701 + 31 +0.0 + 0 +LINE + 5 +2B2 + 8 +0 + 62 + 0 + 10 +6873.749993 + 20 +4298.293559 + 30 +0.0 + 11 +6845.624993 + 21 +4347.007488 + 31 +0.0 + 0 +LINE + 5 +2B3 + 8 +0 + 62 + 0 + 10 +6789.374993 + 20 +4444.435345 + 30 +0.0 + 11 +6761.416929 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +2B4 + 8 +0 + 62 + 0 + 10 +6873.749993 + 20 +4200.865701 + 30 +0.0 + 11 +6845.624993 + 21 +4249.57963 + 31 +0.0 + 0 +LINE + 5 +2B5 + 8 +0 + 62 + 0 + 10 +6789.374993 + 20 +4347.007488 + 30 +0.0 + 11 +6761.249993 + 21 +4395.721417 + 31 +0.0 + 0 +LINE + 5 +2B6 + 8 +0 + 62 + 0 + 10 +6789.374993 + 20 +4249.57963 + 30 +0.0 + 11 +6761.249993 + 21 +4298.293559 + 31 +0.0 + 0 +LINE + 5 +2B7 + 8 +0 + 62 + 0 + 10 +6704.999993 + 20 +4395.721417 + 30 +0.0 + 11 +6676.874993 + 21 +4444.435346 + 31 +0.0 + 0 +LINE + 5 +2B8 + 8 +0 + 62 + 0 + 10 +6765.87201 + 20 +4192.860132 + 30 +0.0 + 11 +6761.249993 + 21 +4200.865701 + 31 +0.0 + 0 +LINE + 5 +2B9 + 8 +0 + 62 + 0 + 10 +6704.999993 + 20 +4298.293559 + 30 +0.0 + 11 +6676.874993 + 21 +4347.007488 + 31 +0.0 + 0 +LINE + 5 +2BA + 8 +0 + 62 + 0 + 10 +6620.624993 + 20 +4444.435346 + 30 +0.0 + 11 +6592.66693 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +2BB + 8 +0 + 62 + 0 + 10 +6704.999993 + 20 +4200.865701 + 30 +0.0 + 11 +6676.874993 + 21 +4249.57963 + 31 +0.0 + 0 +LINE + 5 +2BC + 8 +0 + 62 + 0 + 10 +6620.624993 + 20 +4347.007488 + 30 +0.0 + 11 +6592.499993 + 21 +4395.721417 + 31 +0.0 + 0 +LINE + 5 +2BD + 8 +0 + 62 + 0 + 10 +6620.624994 + 20 +4249.57963 + 30 +0.0 + 11 +6592.499994 + 21 +4298.293559 + 31 +0.0 + 0 +LINE + 5 +2BE + 8 +0 + 62 + 0 + 10 +6536.249994 + 20 +4395.721417 + 30 +0.0 + 11 +6508.124994 + 21 +4444.435346 + 31 +0.0 + 0 +LINE + 5 +2BF + 8 +0 + 62 + 0 + 10 +6597.122011 + 20 +4192.860132 + 30 +0.0 + 11 +6592.499994 + 21 +4200.865701 + 31 +0.0 + 0 +LINE + 5 +2C0 + 8 +0 + 62 + 0 + 10 +6536.249994 + 20 +4298.293559 + 30 +0.0 + 11 +6508.124994 + 21 +4347.007488 + 31 +0.0 + 0 +LINE + 5 +2C1 + 8 +0 + 62 + 0 + 10 +6451.874994 + 20 +4444.435346 + 30 +0.0 + 11 +6423.91693 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +2C2 + 8 +0 + 62 + 0 + 10 +6536.249994 + 20 +4200.865701 + 30 +0.0 + 11 +6508.124994 + 21 +4249.57963 + 31 +0.0 + 0 +LINE + 5 +2C3 + 8 +0 + 62 + 0 + 10 +6451.874994 + 20 +4347.007488 + 30 +0.0 + 11 +6423.749994 + 21 +4395.721417 + 31 +0.0 + 0 +LINE + 5 +2C4 + 8 +0 + 62 + 0 + 10 +6451.874994 + 20 +4249.57963 + 30 +0.0 + 11 +6423.749994 + 21 +4298.293559 + 31 +0.0 + 0 +LINE + 5 +2C5 + 8 +0 + 62 + 0 + 10 +6367.499994 + 20 +4395.721417 + 30 +0.0 + 11 +6339.374994 + 21 +4444.435346 + 31 +0.0 + 0 +LINE + 5 +2C6 + 8 +0 + 62 + 0 + 10 +6428.372012 + 20 +4192.860132 + 30 +0.0 + 11 +6423.749994 + 21 +4200.865702 + 31 +0.0 + 0 +LINE + 5 +2C7 + 8 +0 + 62 + 0 + 10 +6367.499994 + 20 +4298.29356 + 30 +0.0 + 11 +6339.374994 + 21 +4347.007488 + 31 +0.0 + 0 +LINE + 5 +2C8 + 8 +0 + 62 + 0 + 10 +6283.124994 + 20 +4444.435346 + 30 +0.0 + 11 +6255.166931 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +2C9 + 8 +0 + 62 + 0 + 10 +6367.499994 + 20 +4200.865702 + 30 +0.0 + 11 +6339.374994 + 21 +4249.579631 + 31 +0.0 + 0 +LINE + 5 +2CA + 8 +0 + 62 + 0 + 10 +6283.124994 + 20 +4347.007489 + 30 +0.0 + 11 +6254.999994 + 21 +4395.721418 + 31 +0.0 + 0 +LINE + 5 +2CB + 8 +0 + 62 + 0 + 10 +6283.124995 + 20 +4249.579631 + 30 +0.0 + 11 +6254.999995 + 21 +4298.29356 + 31 +0.0 + 0 +LINE + 5 +2CC + 8 +0 + 62 + 0 + 10 +6198.749995 + 20 +4395.721418 + 30 +0.0 + 11 +6170.624995 + 21 +4444.435347 + 31 +0.0 + 0 +LINE + 5 +2CD + 8 +0 + 62 + 0 + 10 +6259.622013 + 20 +4192.860132 + 30 +0.0 + 11 +6254.999995 + 21 +4200.865702 + 31 +0.0 + 0 +LINE + 5 +2CE + 8 +0 + 62 + 0 + 10 +6198.749995 + 20 +4298.29356 + 30 +0.0 + 11 +6170.624995 + 21 +4347.007489 + 31 +0.0 + 0 +LINE + 5 +2CF + 8 +0 + 62 + 0 + 10 +6114.374995 + 20 +4444.435347 + 30 +0.0 + 11 +6086.416932 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +2D0 + 8 +0 + 62 + 0 + 10 +6198.749995 + 20 +4200.865702 + 30 +0.0 + 11 +6170.624995 + 21 +4249.579631 + 31 +0.0 + 0 +LINE + 5 +2D1 + 8 +0 + 62 + 0 + 10 +6114.374995 + 20 +4347.007489 + 30 +0.0 + 11 +6086.249995 + 21 +4395.721418 + 31 +0.0 + 0 +LINE + 5 +2D2 + 8 +0 + 62 + 0 + 10 +6114.374995 + 20 +4249.579631 + 30 +0.0 + 11 +6086.249995 + 21 +4298.29356 + 31 +0.0 + 0 +LINE + 5 +2D3 + 8 +0 + 62 + 0 + 10 +6029.999995 + 20 +4395.721418 + 30 +0.0 + 11 +6001.874995 + 21 +4444.435347 + 31 +0.0 + 0 +LINE + 5 +2D4 + 8 +0 + 62 + 0 + 10 +6090.872013 + 20 +4192.860132 + 30 +0.0 + 11 +6086.249995 + 21 +4200.865702 + 31 +0.0 + 0 +LINE + 5 +2D5 + 8 +0 + 62 + 0 + 10 +6029.999995 + 20 +4298.29356 + 30 +0.0 + 11 +6001.874995 + 21 +4347.007489 + 31 +0.0 + 0 +LINE + 5 +2D6 + 8 +0 + 62 + 0 + 10 +5945.624995 + 20 +4444.435347 + 30 +0.0 + 11 +5917.666933 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +2D7 + 8 +0 + 62 + 0 + 10 +6029.999996 + 20 +4200.865702 + 30 +0.0 + 11 +6001.874996 + 21 +4249.579631 + 31 +0.0 + 0 +LINE + 5 +2D8 + 8 +0 + 62 + 0 + 10 +5945.624996 + 20 +4347.007489 + 30 +0.0 + 11 +5917.499996 + 21 +4395.721418 + 31 +0.0 + 0 +LINE + 5 +2D9 + 8 +0 + 62 + 0 + 10 +5945.624996 + 20 +4249.579631 + 30 +0.0 + 11 +5917.499996 + 21 +4298.29356 + 31 +0.0 + 0 +LINE + 5 +2DA + 8 +0 + 62 + 0 + 10 +5861.249996 + 20 +4395.721418 + 30 +0.0 + 11 +5833.124996 + 21 +4444.435347 + 31 +0.0 + 0 +LINE + 5 +2DB + 8 +0 + 62 + 0 + 10 +5922.122014 + 20 +4192.860132 + 30 +0.0 + 11 +5917.499996 + 21 +4200.865703 + 31 +0.0 + 0 +LINE + 5 +2DC + 8 +0 + 62 + 0 + 10 +5861.249996 + 20 +4298.29356 + 30 +0.0 + 11 +5833.124996 + 21 +4347.007489 + 31 +0.0 + 0 +LINE + 5 +2DD + 8 +0 + 62 + 0 + 10 +5776.874996 + 20 +4444.435347 + 30 +0.0 + 11 +5748.916933 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +2DE + 8 +0 + 62 + 0 + 10 +5861.249996 + 20 +4200.865703 + 30 +0.0 + 11 +5833.124996 + 21 +4249.579632 + 31 +0.0 + 0 +LINE + 5 +2DF + 8 +0 + 62 + 0 + 10 +5776.874996 + 20 +4347.00749 + 30 +0.0 + 11 +5748.749996 + 21 +4395.721419 + 31 +0.0 + 0 +LINE + 5 +2E0 + 8 +0 + 62 + 0 + 10 +5776.874996 + 20 +4249.579632 + 30 +0.0 + 11 +5748.749996 + 21 +4298.293561 + 31 +0.0 + 0 +LINE + 5 +2E1 + 8 +0 + 62 + 0 + 10 +5692.499996 + 20 +4395.721419 + 30 +0.0 + 11 +5664.374996 + 21 +4444.435348 + 31 +0.0 + 0 +LINE + 5 +2E2 + 8 +0 + 62 + 0 + 10 +5753.372015 + 20 +4192.860132 + 30 +0.0 + 11 +5748.749996 + 21 +4200.865703 + 31 +0.0 + 0 +LINE + 5 +2E3 + 8 +0 + 62 + 0 + 10 +5692.499996 + 20 +4298.293561 + 30 +0.0 + 11 +5664.374996 + 21 +4347.00749 + 31 +0.0 + 0 +LINE + 5 +2E4 + 8 +0 + 62 + 0 + 10 +5608.124996 + 20 +4444.435348 + 30 +0.0 + 11 +5580.166934 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +2E5 + 8 +0 + 62 + 0 + 10 +5692.499997 + 20 +4200.865703 + 30 +0.0 + 11 +5664.374997 + 21 +4249.579632 + 31 +0.0 + 0 +LINE + 5 +2E6 + 8 +0 + 62 + 0 + 10 +5608.124997 + 20 +4347.00749 + 30 +0.0 + 11 +5579.999997 + 21 +4395.721419 + 31 +0.0 + 0 +LINE + 5 +2E7 + 8 +0 + 62 + 0 + 10 +5608.124997 + 20 +4249.579632 + 30 +0.0 + 11 +5579.999997 + 21 +4298.293561 + 31 +0.0 + 0 +LINE + 5 +2E8 + 8 +0 + 62 + 0 + 10 +5523.749997 + 20 +4395.721419 + 30 +0.0 + 11 +5495.624997 + 21 +4444.435348 + 31 +0.0 + 0 +LINE + 5 +2E9 + 8 +0 + 62 + 0 + 10 +5584.622016 + 20 +4192.860132 + 30 +0.0 + 11 +5579.999997 + 21 +4200.865703 + 31 +0.0 + 0 +LINE + 5 +2EA + 8 +0 + 62 + 0 + 10 +5523.749997 + 20 +4298.293561 + 30 +0.0 + 11 +5495.624997 + 21 +4347.00749 + 31 +0.0 + 0 +LINE + 5 +2EB + 8 +0 + 62 + 0 + 10 +5439.374997 + 20 +4444.435348 + 30 +0.0 + 11 +5411.416935 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +2EC + 8 +0 + 62 + 0 + 10 +5523.749997 + 20 +4200.865703 + 30 +0.0 + 11 +5495.624997 + 21 +4249.579632 + 31 +0.0 + 0 +LINE + 5 +2ED + 8 +0 + 62 + 0 + 10 +5439.374997 + 20 +4347.00749 + 30 +0.0 + 11 +5411.249997 + 21 +4395.721419 + 31 +0.0 + 0 +LINE + 5 +2EE + 8 +0 + 62 + 0 + 10 +5439.374997 + 20 +4249.579632 + 30 +0.0 + 11 +5411.249997 + 21 +4298.293561 + 31 +0.0 + 0 +LINE + 5 +2EF + 8 +0 + 62 + 0 + 10 +5354.999997 + 20 +4395.721419 + 30 +0.0 + 11 +5326.874997 + 21 +4444.435348 + 31 +0.0 + 0 +LINE + 5 +2F0 + 8 +0 + 62 + 0 + 10 +5415.872016 + 20 +4192.860132 + 30 +0.0 + 11 +5411.249998 + 21 +4200.865704 + 31 +0.0 + 0 +LINE + 5 +2F1 + 8 +0 + 62 + 0 + 10 +5354.999998 + 20 +4298.293561 + 30 +0.0 + 11 +5326.874998 + 21 +4347.00749 + 31 +0.0 + 0 +LINE + 5 +2F2 + 8 +0 + 62 + 0 + 10 +5270.624998 + 20 +4444.435348 + 30 +0.0 + 11 +5242.666935 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +2F3 + 8 +0 + 62 + 0 + 10 +5354.999998 + 20 +4200.865704 + 30 +0.0 + 11 +5326.874998 + 21 +4249.579633 + 31 +0.0 + 0 +LINE + 5 +2F4 + 8 +0 + 62 + 0 + 10 +5270.624998 + 20 +4347.007491 + 30 +0.0 + 11 +5242.499998 + 21 +4395.721419 + 31 +0.0 + 0 +LINE + 5 +2F5 + 8 +0 + 62 + 0 + 10 +5270.624998 + 20 +4249.579633 + 30 +0.0 + 11 +5242.499998 + 21 +4298.293562 + 31 +0.0 + 0 +LINE + 5 +2F6 + 8 +0 + 62 + 0 + 10 +5186.249998 + 20 +4395.72142 + 30 +0.0 + 11 +5158.124998 + 21 +4444.435349 + 31 +0.0 + 0 +LINE + 5 +2F7 + 8 +0 + 62 + 0 + 10 +5247.122017 + 20 +4192.860132 + 30 +0.0 + 11 +5242.499998 + 21 +4200.865704 + 31 +0.0 + 0 +LINE + 5 +2F8 + 8 +0 + 62 + 0 + 10 +5186.249998 + 20 +4298.293562 + 30 +0.0 + 11 +5158.124998 + 21 +4347.007491 + 31 +0.0 + 0 +LINE + 5 +2F9 + 8 +0 + 62 + 0 + 10 +5186.249998 + 20 +4200.865704 + 30 +0.0 + 11 +5158.124998 + 21 +4249.579633 + 31 +0.0 + 0 +LINE + 5 +2FA + 8 +0 + 62 + 0 + 10 +7103.372009 + 20 +4192.860132 + 30 +0.0 + 11 +7098.749992 + 21 +4200.8657 + 31 +0.0 + 0 +LINE + 5 +2FB + 8 +0 + 62 + 0 + 10 +7042.499992 + 20 +4298.293558 + 30 +0.0 + 11 +7014.374992 + 21 +4347.007487 + 31 +0.0 + 0 +LINE + 5 +2FC + 8 +0 + 62 + 0 + 10 +6958.124992 + 20 +4444.435345 + 30 +0.0 + 11 +6930.166928 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +2FD + 8 +0 + 62 + 0 + 10 +7126.874992 + 20 +4249.579629 + 30 +0.0 + 11 +7098.749992 + 21 +4298.293558 + 31 +0.0 + 0 +LINE + 5 +2FE + 8 +0 + 62 + 0 + 10 +7042.499992 + 20 +4395.721416 + 30 +0.0 + 11 +7014.374992 + 21 +4444.435345 + 31 +0.0 + 0 +LINE + 5 +2FF + 8 +0 + 62 + 0 + 10 +7211.249992 + 20 +4200.8657 + 30 +0.0 + 11 +7183.124992 + 21 +4249.579629 + 31 +0.0 + 0 +LINE + 5 +300 + 8 +0 + 62 + 0 + 10 +7126.874992 + 20 +4347.007487 + 30 +0.0 + 11 +7098.749992 + 21 +4395.721416 + 31 +0.0 + 0 +LINE + 5 +301 + 8 +0 + 62 + 0 + 10 +7272.122008 + 20 +4192.860132 + 30 +0.0 + 11 +7267.499992 + 21 +4200.8657 + 31 +0.0 + 0 +LINE + 5 +302 + 8 +0 + 62 + 0 + 10 +7211.249992 + 20 +4298.293558 + 30 +0.0 + 11 +7183.124992 + 21 +4347.007487 + 31 +0.0 + 0 +LINE + 5 +303 + 8 +0 + 62 + 0 + 10 +7126.874992 + 20 +4444.435345 + 30 +0.0 + 11 +7098.916927 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +304 + 8 +0 + 62 + 0 + 10 +7295.624991 + 20 +4249.579629 + 30 +0.0 + 11 +7267.499991 + 21 +4298.293558 + 31 +0.0 + 0 +LINE + 5 +305 + 8 +0 + 62 + 0 + 10 +7211.249991 + 20 +4395.721416 + 30 +0.0 + 11 +7183.124991 + 21 +4444.435345 + 31 +0.0 + 0 +LINE + 5 +306 + 8 +0 + 62 + 0 + 10 +7379.999991 + 20 +4200.8657 + 30 +0.0 + 11 +7351.874991 + 21 +4249.579629 + 31 +0.0 + 0 +LINE + 5 +307 + 8 +0 + 62 + 0 + 10 +7295.624991 + 20 +4347.007487 + 30 +0.0 + 11 +7267.499991 + 21 +4395.721416 + 31 +0.0 + 0 +LINE + 5 +308 + 8 +0 + 62 + 0 + 10 +7440.872007 + 20 +4192.860132 + 30 +0.0 + 11 +7436.249991 + 21 +4200.8657 + 31 +0.0 + 0 +LINE + 5 +309 + 8 +0 + 62 + 0 + 10 +7379.999991 + 20 +4298.293558 + 30 +0.0 + 11 +7351.874991 + 21 +4347.007487 + 31 +0.0 + 0 +LINE + 5 +30A + 8 +0 + 62 + 0 + 10 +7295.624991 + 20 +4444.435344 + 30 +0.0 + 11 +7267.666927 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +30B + 8 +0 + 62 + 0 + 10 +7464.374991 + 20 +4249.579629 + 30 +0.0 + 11 +7436.249991 + 21 +4298.293557 + 31 +0.0 + 0 +LINE + 5 +30C + 8 +0 + 62 + 0 + 10 +7379.999991 + 20 +4395.721415 + 30 +0.0 + 11 +7351.874991 + 21 +4444.435344 + 31 +0.0 + 0 +LINE + 5 +30D + 8 +0 + 62 + 0 + 10 +7548.749991 + 20 +4200.865699 + 30 +0.0 + 11 +7520.624991 + 21 +4249.579628 + 31 +0.0 + 0 +LINE + 5 +30E + 8 +0 + 62 + 0 + 10 +7464.374991 + 20 +4347.007486 + 30 +0.0 + 11 +7436.249991 + 21 +4395.721415 + 31 +0.0 + 0 +LINE + 5 +30F + 8 +0 + 62 + 0 + 10 +7609.622007 + 20 +4192.860132 + 30 +0.0 + 11 +7604.99999 + 21 +4200.865699 + 31 +0.0 + 0 +LINE + 5 +310 + 8 +0 + 62 + 0 + 10 +7548.74999 + 20 +4298.293557 + 30 +0.0 + 11 +7520.62499 + 21 +4347.007486 + 31 +0.0 + 0 +LINE + 5 +311 + 8 +0 + 62 + 0 + 10 +7464.37499 + 20 +4444.435344 + 30 +0.0 + 11 +7436.416926 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +312 + 8 +0 + 62 + 0 + 10 +7633.12499 + 20 +4249.579628 + 30 +0.0 + 11 +7604.99999 + 21 +4298.293557 + 31 +0.0 + 0 +LINE + 5 +313 + 8 +0 + 62 + 0 + 10 +7548.74999 + 20 +4395.721415 + 30 +0.0 + 11 +7520.62499 + 21 +4444.435344 + 31 +0.0 + 0 +LINE + 5 +314 + 8 +0 + 62 + 0 + 10 +7717.49999 + 20 +4200.865699 + 30 +0.0 + 11 +7689.37499 + 21 +4249.579628 + 31 +0.0 + 0 +LINE + 5 +315 + 8 +0 + 62 + 0 + 10 +7633.12499 + 20 +4347.007486 + 30 +0.0 + 11 +7604.99999 + 21 +4395.721415 + 31 +0.0 + 0 +LINE + 5 +316 + 8 +0 + 62 + 0 + 10 +7778.372006 + 20 +4192.860132 + 30 +0.0 + 11 +7773.74999 + 21 +4200.865699 + 31 +0.0 + 0 +LINE + 5 +317 + 8 +0 + 62 + 0 + 10 +7717.49999 + 20 +4298.293557 + 30 +0.0 + 11 +7689.37499 + 21 +4347.007486 + 31 +0.0 + 0 +LINE + 5 +318 + 8 +0 + 62 + 0 + 10 +7633.12499 + 20 +4444.435344 + 30 +0.0 + 11 +7605.166925 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +319 + 8 +0 + 62 + 0 + 10 +7801.87499 + 20 +4249.579628 + 30 +0.0 + 11 +7773.74999 + 21 +4298.293557 + 31 +0.0 + 0 +LINE + 5 +31A + 8 +0 + 62 + 0 + 10 +7717.49999 + 20 +4395.721415 + 30 +0.0 + 11 +7689.37499 + 21 +4444.435344 + 31 +0.0 + 0 +LINE + 5 +31B + 8 +0 + 62 + 0 + 10 +7886.249989 + 20 +4200.865699 + 30 +0.0 + 11 +7858.124989 + 21 +4249.579628 + 31 +0.0 + 0 +LINE + 5 +31C + 8 +0 + 62 + 0 + 10 +7801.874989 + 20 +4347.007486 + 30 +0.0 + 11 +7773.749989 + 21 +4395.721415 + 31 +0.0 + 0 +LINE + 5 +31D + 8 +0 + 62 + 0 + 10 +7947.122005 + 20 +4192.860132 + 30 +0.0 + 11 +7942.499989 + 21 +4200.865699 + 31 +0.0 + 0 +LINE + 5 +31E + 8 +0 + 62 + 0 + 10 +7886.249989 + 20 +4298.293557 + 30 +0.0 + 11 +7858.124989 + 21 +4347.007486 + 31 +0.0 + 0 +LINE + 5 +31F + 8 +0 + 62 + 0 + 10 +7801.874989 + 20 +4444.435344 + 30 +0.0 + 11 +7773.916924 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +320 + 8 +0 + 62 + 0 + 10 +7970.624989 + 20 +4249.579628 + 30 +0.0 + 11 +7942.499989 + 21 +4298.293557 + 31 +0.0 + 0 +LINE + 5 +321 + 8 +0 + 62 + 0 + 10 +7886.249989 + 20 +4395.721414 + 30 +0.0 + 11 +7858.124989 + 21 +4444.435343 + 31 +0.0 + 0 +LINE + 5 +322 + 8 +0 + 62 + 0 + 10 +8054.999989 + 20 +4200.865699 + 30 +0.0 + 11 +8026.874989 + 21 +4249.579627 + 31 +0.0 + 0 +LINE + 5 +323 + 8 +0 + 62 + 0 + 10 +7970.624989 + 20 +4347.007485 + 30 +0.0 + 11 +7942.499989 + 21 +4395.721414 + 31 +0.0 + 0 +LINE + 5 +324 + 8 +0 + 62 + 0 + 10 +8115.872004 + 20 +4192.860132 + 30 +0.0 + 11 +8111.249989 + 21 +4200.865698 + 31 +0.0 + 0 +LINE + 5 +325 + 8 +0 + 62 + 0 + 10 +8054.999989 + 20 +4298.293556 + 30 +0.0 + 11 +8026.874989 + 21 +4347.007485 + 31 +0.0 + 0 +LINE + 5 +326 + 8 +0 + 62 + 0 + 10 +7970.624989 + 20 +4444.435343 + 30 +0.0 + 11 +7942.666924 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +327 + 8 +0 + 62 + 0 + 10 +8139.374989 + 20 +4249.579627 + 30 +0.0 + 11 +8111.249989 + 21 +4298.293556 + 31 +0.0 + 0 +LINE + 5 +328 + 8 +0 + 62 + 0 + 10 +8054.999989 + 20 +4395.721414 + 30 +0.0 + 11 +8026.874989 + 21 +4444.435343 + 31 +0.0 + 0 +LINE + 5 +329 + 8 +0 + 62 + 0 + 10 +8223.749988 + 20 +4200.865698 + 30 +0.0 + 11 +8195.624988 + 21 +4249.579627 + 31 +0.0 + 0 +LINE + 5 +32A + 8 +0 + 62 + 0 + 10 +8139.374988 + 20 +4347.007485 + 30 +0.0 + 11 +8111.249988 + 21 +4395.721414 + 31 +0.0 + 0 +LINE + 5 +32B + 8 +0 + 62 + 0 + 10 +8284.622004 + 20 +4192.860132 + 30 +0.0 + 11 +8279.999988 + 21 +4200.865698 + 31 +0.0 + 0 +LINE + 5 +32C + 8 +0 + 62 + 0 + 10 +8223.749988 + 20 +4298.293556 + 30 +0.0 + 11 +8195.624988 + 21 +4347.007485 + 31 +0.0 + 0 +LINE + 5 +32D + 8 +0 + 62 + 0 + 10 +8139.374988 + 20 +4444.435343 + 30 +0.0 + 11 +8111.416923 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +32E + 8 +0 + 62 + 0 + 10 +8308.124988 + 20 +4249.579627 + 30 +0.0 + 11 +8279.999988 + 21 +4298.293556 + 31 +0.0 + 0 +LINE + 5 +32F + 8 +0 + 62 + 0 + 10 +8223.749988 + 20 +4395.721414 + 30 +0.0 + 11 +8195.624988 + 21 +4444.435343 + 31 +0.0 + 0 +LINE + 5 +330 + 8 +0 + 62 + 0 + 10 +8392.499988 + 20 +4200.865698 + 30 +0.0 + 11 +8364.374988 + 21 +4249.579627 + 31 +0.0 + 0 +LINE + 5 +331 + 8 +0 + 62 + 0 + 10 +8308.124988 + 20 +4347.007485 + 30 +0.0 + 11 +8279.999988 + 21 +4395.721414 + 31 +0.0 + 0 +LINE + 5 +332 + 8 +0 + 62 + 0 + 10 +8453.372003 + 20 +4192.860132 + 30 +0.0 + 11 +8448.749988 + 21 +4200.865698 + 31 +0.0 + 0 +LINE + 5 +333 + 8 +0 + 62 + 0 + 10 +8392.499988 + 20 +4298.293556 + 30 +0.0 + 11 +8364.374988 + 21 +4347.007485 + 31 +0.0 + 0 +LINE + 5 +334 + 8 +0 + 62 + 0 + 10 +8308.124988 + 20 +4444.435343 + 30 +0.0 + 11 +8280.166922 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +335 + 8 +0 + 62 + 0 + 10 +8476.874987 + 20 +4249.579627 + 30 +0.0 + 11 +8448.749987 + 21 +4298.293556 + 31 +0.0 + 0 +LINE + 5 +336 + 8 +0 + 62 + 0 + 10 +8392.499987 + 20 +4395.721414 + 30 +0.0 + 11 +8364.374987 + 21 +4444.435342 + 31 +0.0 + 0 +LINE + 5 +337 + 8 +0 + 62 + 0 + 10 +8561.249987 + 20 +4200.865698 + 30 +0.0 + 11 +8533.124987 + 21 +4249.579627 + 31 +0.0 + 0 +LINE + 5 +338 + 8 +0 + 62 + 0 + 10 +8476.874987 + 20 +4347.007484 + 30 +0.0 + 11 +8448.749987 + 21 +4395.721413 + 31 +0.0 + 0 +LINE + 5 +339 + 8 +0 + 62 + 0 + 10 +8622.122002 + 20 +4192.860132 + 30 +0.0 + 11 +8617.499987 + 21 +4200.865697 + 31 +0.0 + 0 +LINE + 5 +33A + 8 +0 + 62 + 0 + 10 +8561.249987 + 20 +4298.293555 + 30 +0.0 + 11 +8533.124987 + 21 +4347.007484 + 31 +0.0 + 0 +LINE + 5 +33B + 8 +0 + 62 + 0 + 10 +8476.874987 + 20 +4444.435342 + 30 +0.0 + 11 +8448.916921 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +33C + 8 +0 + 62 + 0 + 10 +8645.624987 + 20 +4249.579626 + 30 +0.0 + 11 +8617.499987 + 21 +4298.293555 + 31 +0.0 + 0 +LINE + 5 +33D + 8 +0 + 62 + 0 + 10 +8561.249987 + 20 +4395.721413 + 30 +0.0 + 11 +8533.124987 + 21 +4444.435342 + 31 +0.0 + 0 +LINE + 5 +33E + 8 +0 + 62 + 0 + 10 +8729.999987 + 20 +4200.865697 + 30 +0.0 + 11 +8701.874987 + 21 +4249.579626 + 31 +0.0 + 0 +LINE + 5 +33F + 8 +0 + 62 + 0 + 10 +8645.624987 + 20 +4347.007484 + 30 +0.0 + 11 +8617.499987 + 21 +4395.721413 + 31 +0.0 + 0 +LINE + 5 +340 + 8 +0 + 62 + 0 + 10 +8790.872001 + 20 +4192.860132 + 30 +0.0 + 11 +8786.249987 + 21 +4200.865697 + 31 +0.0 + 0 +LINE + 5 +341 + 8 +0 + 62 + 0 + 10 +8729.999987 + 20 +4298.293555 + 30 +0.0 + 11 +8701.874987 + 21 +4347.007484 + 31 +0.0 + 0 +LINE + 5 +342 + 8 +0 + 62 + 0 + 10 +8645.624987 + 20 +4444.435342 + 30 +0.0 + 11 +8617.666921 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +343 + 8 +0 + 62 + 0 + 10 +8814.374986 + 20 +4249.579626 + 30 +0.0 + 11 +8786.249986 + 21 +4298.293555 + 31 +0.0 + 0 +LINE + 5 +344 + 8 +0 + 62 + 0 + 10 +8729.999986 + 20 +4395.721413 + 30 +0.0 + 11 +8701.874986 + 21 +4444.435342 + 31 +0.0 + 0 +LINE + 5 +345 + 8 +0 + 62 + 0 + 10 +8814.374986 + 20 +4347.007484 + 30 +0.0 + 11 +8786.249986 + 21 +4395.721413 + 31 +0.0 + 0 +LINE + 5 +346 + 8 +0 + 62 + 0 + 10 +8814.374986 + 20 +4444.435342 + 30 +0.0 + 11 +8786.41692 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +347 + 8 +0 + 62 + 0 + 10 +6869.127965 + 20 +4192.860132 + 30 +0.0 + 11 +6873.749988 + 21 +4200.865712 + 31 +0.0 + 0 +LINE + 5 +348 + 8 +0 + 62 + 0 + 10 +6929.999988 + 20 +4298.29357 + 30 +0.0 + 11 +6958.124988 + 21 +4347.007498 + 31 +0.0 + 0 +LINE + 5 +349 + 8 +0 + 62 + 0 + 10 +7014.374988 + 20 +4444.435356 + 30 +0.0 + 11 +7042.333046 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +34A + 8 +0 + 62 + 0 + 10 +6845.624989 + 20 +4249.57964 + 30 +0.0 + 11 +6873.749989 + 21 +4298.293569 + 31 +0.0 + 0 +LINE + 5 +34B + 8 +0 + 62 + 0 + 10 +6929.999989 + 20 +4395.721427 + 30 +0.0 + 11 +6958.124989 + 21 +4444.435356 + 31 +0.0 + 0 +LINE + 5 +34C + 8 +0 + 62 + 0 + 10 +6761.249989 + 20 +4200.865711 + 30 +0.0 + 11 +6789.374989 + 21 +4249.57964 + 31 +0.0 + 0 +LINE + 5 +34D + 8 +0 + 62 + 0 + 10 +6845.624989 + 20 +4347.007498 + 30 +0.0 + 11 +6873.749989 + 21 +4395.721427 + 31 +0.0 + 0 +LINE + 5 +34E + 8 +0 + 62 + 0 + 10 +6700.377966 + 20 +4192.860132 + 30 +0.0 + 11 +6704.999989 + 21 +4200.865711 + 31 +0.0 + 0 +LINE + 5 +34F + 8 +0 + 62 + 0 + 10 +6761.249989 + 20 +4298.293569 + 30 +0.0 + 11 +6789.374989 + 21 +4347.007498 + 31 +0.0 + 0 +LINE + 5 +350 + 8 +0 + 62 + 0 + 10 +6845.624989 + 20 +4444.435356 + 30 +0.0 + 11 +6873.583047 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +351 + 8 +0 + 62 + 0 + 10 +6676.874989 + 20 +4249.57964 + 30 +0.0 + 11 +6704.999989 + 21 +4298.293569 + 31 +0.0 + 0 +LINE + 5 +352 + 8 +0 + 62 + 0 + 10 +6761.249989 + 20 +4395.721427 + 30 +0.0 + 11 +6789.374989 + 21 +4444.435356 + 31 +0.0 + 0 +LINE + 5 +353 + 8 +0 + 62 + 0 + 10 +6592.499989 + 20 +4200.865711 + 30 +0.0 + 11 +6620.624989 + 21 +4249.57964 + 31 +0.0 + 0 +LINE + 5 +354 + 8 +0 + 62 + 0 + 10 +6676.874989 + 20 +4347.007498 + 30 +0.0 + 11 +6704.999989 + 21 +4395.721427 + 31 +0.0 + 0 +LINE + 5 +355 + 8 +0 + 62 + 0 + 10 +6531.627967 + 20 +4192.860132 + 30 +0.0 + 11 +6536.249989 + 21 +4200.865711 + 31 +0.0 + 0 +LINE + 5 +356 + 8 +0 + 62 + 0 + 10 +6592.499989 + 20 +4298.293569 + 30 +0.0 + 11 +6620.624989 + 21 +4347.007498 + 31 +0.0 + 0 +LINE + 5 +357 + 8 +0 + 62 + 0 + 10 +6676.874989 + 20 +4444.435356 + 30 +0.0 + 11 +6704.833047 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +358 + 8 +0 + 62 + 0 + 10 +6508.12499 + 20 +4249.57964 + 30 +0.0 + 11 +6536.24999 + 21 +4298.293569 + 31 +0.0 + 0 +LINE + 5 +359 + 8 +0 + 62 + 0 + 10 +6592.49999 + 20 +4395.721427 + 30 +0.0 + 11 +6620.62499 + 21 +4444.435356 + 31 +0.0 + 0 +LINE + 5 +35A + 8 +0 + 62 + 0 + 10 +6423.74999 + 20 +4200.865711 + 30 +0.0 + 11 +6451.87499 + 21 +4249.57964 + 31 +0.0 + 0 +LINE + 5 +35B + 8 +0 + 62 + 0 + 10 +6508.12499 + 20 +4347.007498 + 30 +0.0 + 11 +6536.24999 + 21 +4395.721427 + 31 +0.0 + 0 +LINE + 5 +35C + 8 +0 + 62 + 0 + 10 +6362.877967 + 20 +4192.860132 + 30 +0.0 + 11 +6367.49999 + 21 +4200.865711 + 31 +0.0 + 0 +LINE + 5 +35D + 8 +0 + 62 + 0 + 10 +6423.74999 + 20 +4298.293569 + 30 +0.0 + 11 +6451.87499 + 21 +4347.007498 + 31 +0.0 + 0 +LINE + 5 +35E + 8 +0 + 62 + 0 + 10 +6508.12499 + 20 +4444.435355 + 30 +0.0 + 11 +6536.083048 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +35F + 8 +0 + 62 + 0 + 10 +6339.37499 + 20 +4249.579639 + 30 +0.0 + 11 +6367.49999 + 21 +4298.293568 + 31 +0.0 + 0 +LINE + 5 +360 + 8 +0 + 62 + 0 + 10 +6423.74999 + 20 +4395.721426 + 30 +0.0 + 11 +6451.87499 + 21 +4444.435355 + 31 +0.0 + 0 +LINE + 5 +361 + 8 +0 + 62 + 0 + 10 +6254.99999 + 20 +4200.86571 + 30 +0.0 + 11 +6283.12499 + 21 +4249.579639 + 31 +0.0 + 0 +LINE + 5 +362 + 8 +0 + 62 + 0 + 10 +6339.37499 + 20 +4347.007497 + 30 +0.0 + 11 +6367.49999 + 21 +4395.721426 + 31 +0.0 + 0 +LINE + 5 +363 + 8 +0 + 62 + 0 + 10 +6194.127968 + 20 +4192.860132 + 30 +0.0 + 11 +6198.749991 + 21 +4200.86571 + 31 +0.0 + 0 +LINE + 5 +364 + 8 +0 + 62 + 0 + 10 +6254.999991 + 20 +4298.293568 + 30 +0.0 + 11 +6283.124991 + 21 +4347.007497 + 31 +0.0 + 0 +LINE + 5 +365 + 8 +0 + 62 + 0 + 10 +6339.374991 + 20 +4444.435355 + 30 +0.0 + 11 +6367.333049 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +366 + 8 +0 + 62 + 0 + 10 +6170.624991 + 20 +4249.579639 + 30 +0.0 + 11 +6198.749991 + 21 +4298.293568 + 31 +0.0 + 0 +LINE + 5 +367 + 8 +0 + 62 + 0 + 10 +6254.999991 + 20 +4395.721426 + 30 +0.0 + 11 +6283.124991 + 21 +4444.435355 + 31 +0.0 + 0 +LINE + 5 +368 + 8 +0 + 62 + 0 + 10 +6086.249991 + 20 +4200.86571 + 30 +0.0 + 11 +6114.374991 + 21 +4249.579639 + 31 +0.0 + 0 +LINE + 5 +369 + 8 +0 + 62 + 0 + 10 +6170.624991 + 20 +4347.007497 + 30 +0.0 + 11 +6198.749991 + 21 +4395.721426 + 31 +0.0 + 0 +LINE + 5 +36A + 8 +0 + 62 + 0 + 10 +6025.377969 + 20 +4192.860132 + 30 +0.0 + 11 +6029.999991 + 21 +4200.86571 + 31 +0.0 + 0 +LINE + 5 +36B + 8 +0 + 62 + 0 + 10 +6086.249991 + 20 +4298.293568 + 30 +0.0 + 11 +6114.374991 + 21 +4347.007497 + 31 +0.0 + 0 +LINE + 5 +36C + 8 +0 + 62 + 0 + 10 +6170.624991 + 20 +4444.435355 + 30 +0.0 + 11 +6198.58305 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +36D + 8 +0 + 62 + 0 + 10 +6001.874991 + 20 +4249.579639 + 30 +0.0 + 11 +6029.999991 + 21 +4298.293568 + 31 +0.0 + 0 +LINE + 5 +36E + 8 +0 + 62 + 0 + 10 +6086.249991 + 20 +4395.721426 + 30 +0.0 + 11 +6114.374991 + 21 +4444.435355 + 31 +0.0 + 0 +LINE + 5 +36F + 8 +0 + 62 + 0 + 10 +5917.499992 + 20 +4200.86571 + 30 +0.0 + 11 +5945.624992 + 21 +4249.579639 + 31 +0.0 + 0 +LINE + 5 +370 + 8 +0 + 62 + 0 + 10 +6001.874992 + 20 +4347.007497 + 30 +0.0 + 11 +6029.999992 + 21 +4395.721426 + 31 +0.0 + 0 +LINE + 5 +371 + 8 +0 + 62 + 0 + 10 +5856.627969 + 20 +4192.860132 + 30 +0.0 + 11 +5861.249992 + 21 +4200.86571 + 31 +0.0 + 0 +LINE + 5 +372 + 8 +0 + 62 + 0 + 10 +5917.499992 + 20 +4298.293568 + 30 +0.0 + 11 +5945.624992 + 21 +4347.007497 + 31 +0.0 + 0 +LINE + 5 +373 + 8 +0 + 62 + 0 + 10 +6001.874992 + 20 +4444.435354 + 30 +0.0 + 11 +6029.83305 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +374 + 8 +0 + 62 + 0 + 10 +5833.124992 + 20 +4249.579639 + 30 +0.0 + 11 +5861.249992 + 21 +4298.293568 + 31 +0.0 + 0 +LINE + 5 +375 + 8 +0 + 62 + 0 + 10 +5917.499992 + 20 +4395.721425 + 30 +0.0 + 11 +5945.624992 + 21 +4444.435354 + 31 +0.0 + 0 +LINE + 5 +376 + 8 +0 + 62 + 0 + 10 +5748.749992 + 20 +4200.865709 + 30 +0.0 + 11 +5776.874992 + 21 +4249.579638 + 31 +0.0 + 0 +LINE + 5 +377 + 8 +0 + 62 + 0 + 10 +5833.124992 + 20 +4347.007496 + 30 +0.0 + 11 +5861.249992 + 21 +4395.721425 + 31 +0.0 + 0 +LINE + 5 +378 + 8 +0 + 62 + 0 + 10 +5687.87797 + 20 +4192.860132 + 30 +0.0 + 11 +5692.499992 + 21 +4200.865709 + 31 +0.0 + 0 +LINE + 5 +379 + 8 +0 + 62 + 0 + 10 +5748.749992 + 20 +4298.293567 + 30 +0.0 + 11 +5776.874992 + 21 +4347.007496 + 31 +0.0 + 0 +LINE + 5 +37A + 8 +0 + 62 + 0 + 10 +5833.124992 + 20 +4444.435354 + 30 +0.0 + 11 +5861.083051 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +37B + 8 +0 + 62 + 0 + 10 +5664.374992 + 20 +4249.579638 + 30 +0.0 + 11 +5692.499992 + 21 +4298.293567 + 31 +0.0 + 0 +LINE + 5 +37C + 8 +0 + 62 + 0 + 10 +5748.749992 + 20 +4395.721425 + 30 +0.0 + 11 +5776.874992 + 21 +4444.435354 + 31 +0.0 + 0 +LINE + 5 +37D + 8 +0 + 62 + 0 + 10 +5579.999993 + 20 +4200.865709 + 30 +0.0 + 11 +5608.124993 + 21 +4249.579638 + 31 +0.0 + 0 +LINE + 5 +37E + 8 +0 + 62 + 0 + 10 +5664.374993 + 20 +4347.007496 + 30 +0.0 + 11 +5692.499993 + 21 +4395.721425 + 31 +0.0 + 0 +LINE + 5 +37F + 8 +0 + 62 + 0 + 10 +5519.127971 + 20 +4192.860132 + 30 +0.0 + 11 +5523.749993 + 21 +4200.865709 + 31 +0.0 + 0 +LINE + 5 +380 + 8 +0 + 62 + 0 + 10 +5579.999993 + 20 +4298.293567 + 30 +0.0 + 11 +5608.124993 + 21 +4347.007496 + 31 +0.0 + 0 +LINE + 5 +381 + 8 +0 + 62 + 0 + 10 +5664.374993 + 20 +4444.435354 + 30 +0.0 + 11 +5692.333052 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +382 + 8 +0 + 62 + 0 + 10 +5495.624993 + 20 +4249.579638 + 30 +0.0 + 11 +5523.749993 + 21 +4298.293567 + 31 +0.0 + 0 +LINE + 5 +383 + 8 +0 + 62 + 0 + 10 +5579.999993 + 20 +4395.721425 + 30 +0.0 + 11 +5608.124993 + 21 +4444.435354 + 31 +0.0 + 0 +LINE + 5 +384 + 8 +0 + 62 + 0 + 10 +5411.249993 + 20 +4200.865709 + 30 +0.0 + 11 +5439.374993 + 21 +4249.579638 + 31 +0.0 + 0 +LINE + 5 +385 + 8 +0 + 62 + 0 + 10 +5495.624993 + 20 +4347.007496 + 30 +0.0 + 11 +5523.749993 + 21 +4395.721425 + 31 +0.0 + 0 +LINE + 5 +386 + 8 +0 + 62 + 0 + 10 +5350.377972 + 20 +4192.860132 + 30 +0.0 + 11 +5354.999993 + 21 +4200.865709 + 31 +0.0 + 0 +LINE + 5 +387 + 8 +0 + 62 + 0 + 10 +5411.249993 + 20 +4298.293567 + 30 +0.0 + 11 +5439.374993 + 21 +4347.007496 + 31 +0.0 + 0 +LINE + 5 +388 + 8 +0 + 62 + 0 + 10 +5495.624993 + 20 +4444.435354 + 30 +0.0 + 11 +5523.583052 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +389 + 8 +0 + 62 + 0 + 10 +5326.874994 + 20 +4249.579638 + 30 +0.0 + 11 +5354.999994 + 21 +4298.293567 + 31 +0.0 + 0 +LINE + 5 +38A + 8 +0 + 62 + 0 + 10 +5411.249994 + 20 +4395.721424 + 30 +0.0 + 11 +5439.374994 + 21 +4444.435353 + 31 +0.0 + 0 +LINE + 5 +38B + 8 +0 + 62 + 0 + 10 +5242.499994 + 20 +4200.865709 + 30 +0.0 + 11 +5270.624994 + 21 +4249.579637 + 31 +0.0 + 0 +LINE + 5 +38C + 8 +0 + 62 + 0 + 10 +5326.874994 + 20 +4347.007495 + 30 +0.0 + 11 +5354.999994 + 21 +4395.721424 + 31 +0.0 + 0 +LINE + 5 +38D + 8 +0 + 62 + 0 + 10 +5181.627972 + 20 +4192.860132 + 30 +0.0 + 11 +5186.249994 + 21 +4200.865708 + 31 +0.0 + 0 +LINE + 5 +38E + 8 +0 + 62 + 0 + 10 +5242.499994 + 20 +4298.293566 + 30 +0.0 + 11 +5270.624994 + 21 +4347.007495 + 31 +0.0 + 0 +LINE + 5 +38F + 8 +0 + 62 + 0 + 10 +5326.874994 + 20 +4444.435353 + 30 +0.0 + 11 +5354.833053 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +390 + 8 +0 + 62 + 0 + 10 +5158.124994 + 20 +4249.579637 + 30 +0.0 + 11 +5186.249994 + 21 +4298.293566 + 31 +0.0 + 0 +LINE + 5 +391 + 8 +0 + 62 + 0 + 10 +5242.499994 + 20 +4395.721424 + 30 +0.0 + 11 +5270.624994 + 21 +4444.435353 + 31 +0.0 + 0 +LINE + 5 +392 + 8 +0 + 62 + 0 + 10 +5158.124994 + 20 +4347.007495 + 30 +0.0 + 11 +5186.249994 + 21 +4395.721424 + 31 +0.0 + 0 +LINE + 5 +393 + 8 +0 + 62 + 0 + 10 +5158.124994 + 20 +4444.435353 + 30 +0.0 + 11 +5186.083054 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +394 + 8 +0 + 62 + 0 + 10 +6929.999988 + 20 +4200.865712 + 30 +0.0 + 11 +6958.124988 + 21 +4249.579641 + 31 +0.0 + 0 +LINE + 5 +395 + 8 +0 + 62 + 0 + 10 +7014.374988 + 20 +4347.007499 + 30 +0.0 + 11 +7042.499988 + 21 +4395.721428 + 31 +0.0 + 0 +LINE + 5 +396 + 8 +0 + 62 + 0 + 10 +7014.374988 + 20 +4249.579641 + 30 +0.0 + 11 +7042.499988 + 21 +4298.29357 + 31 +0.0 + 0 +LINE + 5 +397 + 8 +0 + 62 + 0 + 10 +7098.749988 + 20 +4395.721428 + 30 +0.0 + 11 +7126.874988 + 21 +4444.435357 + 31 +0.0 + 0 +LINE + 5 +398 + 8 +0 + 62 + 0 + 10 +7037.877964 + 20 +4192.860132 + 30 +0.0 + 11 +7042.499988 + 21 +4200.865712 + 31 +0.0 + 0 +LINE + 5 +399 + 8 +0 + 62 + 0 + 10 +7098.749988 + 20 +4298.29357 + 30 +0.0 + 11 +7126.874988 + 21 +4347.007499 + 31 +0.0 + 0 +LINE + 5 +39A + 8 +0 + 62 + 0 + 10 +7183.124988 + 20 +4444.435357 + 30 +0.0 + 11 +7211.083045 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +39B + 8 +0 + 62 + 0 + 10 +7098.749988 + 20 +4200.865712 + 30 +0.0 + 11 +7126.874988 + 21 +4249.579641 + 31 +0.0 + 0 +LINE + 5 +39C + 8 +0 + 62 + 0 + 10 +7183.124988 + 20 +4347.007499 + 30 +0.0 + 11 +7211.249988 + 21 +4395.721428 + 31 +0.0 + 0 +LINE + 5 +39D + 8 +0 + 62 + 0 + 10 +7183.124987 + 20 +4249.579641 + 30 +0.0 + 11 +7211.249987 + 21 +4298.29357 + 31 +0.0 + 0 +LINE + 5 +39E + 8 +0 + 62 + 0 + 10 +7267.499987 + 20 +4395.721428 + 30 +0.0 + 11 +7295.624987 + 21 +4444.435357 + 31 +0.0 + 0 +LINE + 5 +39F + 8 +0 + 62 + 0 + 10 +7206.627964 + 20 +4192.860132 + 30 +0.0 + 11 +7211.249987 + 21 +4200.865712 + 31 +0.0 + 0 +LINE + 5 +3A0 + 8 +0 + 62 + 0 + 10 +7267.499987 + 20 +4298.29357 + 30 +0.0 + 11 +7295.624987 + 21 +4347.007499 + 31 +0.0 + 0 +LINE + 5 +3A1 + 8 +0 + 62 + 0 + 10 +7351.874987 + 20 +4444.435357 + 30 +0.0 + 11 +7379.833044 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +3A2 + 8 +0 + 62 + 0 + 10 +7267.499987 + 20 +4200.865712 + 30 +0.0 + 11 +7295.624987 + 21 +4249.579641 + 31 +0.0 + 0 +LINE + 5 +3A3 + 8 +0 + 62 + 0 + 10 +7351.874987 + 20 +4347.007499 + 30 +0.0 + 11 +7379.999987 + 21 +4395.721428 + 31 +0.0 + 0 +LINE + 5 +3A4 + 8 +0 + 62 + 0 + 10 +7351.874987 + 20 +4249.579641 + 30 +0.0 + 11 +7379.999987 + 21 +4298.29357 + 31 +0.0 + 0 +LINE + 5 +3A5 + 8 +0 + 62 + 0 + 10 +7436.249987 + 20 +4395.721428 + 30 +0.0 + 11 +7464.374987 + 21 +4444.435357 + 31 +0.0 + 0 +LINE + 5 +3A6 + 8 +0 + 62 + 0 + 10 +7375.377963 + 20 +4192.860132 + 30 +0.0 + 11 +7379.999987 + 21 +4200.865713 + 31 +0.0 + 0 +LINE + 5 +3A7 + 8 +0 + 62 + 0 + 10 +7436.249987 + 20 +4298.29357 + 30 +0.0 + 11 +7464.374987 + 21 +4347.007499 + 31 +0.0 + 0 +LINE + 5 +3A8 + 8 +0 + 62 + 0 + 10 +7520.624987 + 20 +4444.435357 + 30 +0.0 + 11 +7548.583044 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +3A9 + 8 +0 + 62 + 0 + 10 +7436.249987 + 20 +4200.865713 + 30 +0.0 + 11 +7464.374987 + 21 +4249.579642 + 31 +0.0 + 0 +LINE + 5 +3AA + 8 +0 + 62 + 0 + 10 +7520.624987 + 20 +4347.0075 + 30 +0.0 + 11 +7548.749987 + 21 +4395.721429 + 31 +0.0 + 0 +LINE + 5 +3AB + 8 +0 + 62 + 0 + 10 +7520.624986 + 20 +4249.579642 + 30 +0.0 + 11 +7548.749986 + 21 +4298.293571 + 31 +0.0 + 0 +LINE + 5 +3AC + 8 +0 + 62 + 0 + 10 +7604.999986 + 20 +4395.721429 + 30 +0.0 + 11 +7633.124986 + 21 +4444.435358 + 31 +0.0 + 0 +LINE + 5 +3AD + 8 +0 + 62 + 0 + 10 +7544.127962 + 20 +4192.860132 + 30 +0.0 + 11 +7548.749986 + 21 +4200.865713 + 31 +0.0 + 0 +LINE + 5 +3AE + 8 +0 + 62 + 0 + 10 +7604.999986 + 20 +4298.293571 + 30 +0.0 + 11 +7633.124986 + 21 +4347.0075 + 31 +0.0 + 0 +LINE + 5 +3AF + 8 +0 + 62 + 0 + 10 +7689.374986 + 20 +4444.435358 + 30 +0.0 + 11 +7717.333043 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +3B0 + 8 +0 + 62 + 0 + 10 +7604.999986 + 20 +4200.865713 + 30 +0.0 + 11 +7633.124986 + 21 +4249.579642 + 31 +0.0 + 0 +LINE + 5 +3B1 + 8 +0 + 62 + 0 + 10 +7689.374986 + 20 +4347.0075 + 30 +0.0 + 11 +7717.499986 + 21 +4395.721429 + 31 +0.0 + 0 +LINE + 5 +3B2 + 8 +0 + 62 + 0 + 10 +7689.374986 + 20 +4249.579642 + 30 +0.0 + 11 +7717.499986 + 21 +4298.293571 + 31 +0.0 + 0 +LINE + 5 +3B3 + 8 +0 + 62 + 0 + 10 +7773.749986 + 20 +4395.721429 + 30 +0.0 + 11 +7801.874986 + 21 +4444.435358 + 31 +0.0 + 0 +LINE + 5 +3B4 + 8 +0 + 62 + 0 + 10 +7712.877961 + 20 +4192.860132 + 30 +0.0 + 11 +7717.499986 + 21 +4200.865713 + 31 +0.0 + 0 +LINE + 5 +3B5 + 8 +0 + 62 + 0 + 10 +7773.749986 + 20 +4298.293571 + 30 +0.0 + 11 +7801.874986 + 21 +4347.0075 + 31 +0.0 + 0 +LINE + 5 +3B6 + 8 +0 + 62 + 0 + 10 +7858.124986 + 20 +4444.435358 + 30 +0.0 + 11 +7886.083042 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +3B7 + 8 +0 + 62 + 0 + 10 +7773.749985 + 20 +4200.865713 + 30 +0.0 + 11 +7801.874985 + 21 +4249.579642 + 31 +0.0 + 0 +LINE + 5 +3B8 + 8 +0 + 62 + 0 + 10 +7858.124985 + 20 +4347.0075 + 30 +0.0 + 11 +7886.249985 + 21 +4395.721429 + 31 +0.0 + 0 +LINE + 5 +3B9 + 8 +0 + 62 + 0 + 10 +7858.124985 + 20 +4249.579642 + 30 +0.0 + 11 +7886.249985 + 21 +4298.293571 + 31 +0.0 + 0 +LINE + 5 +3BA + 8 +0 + 62 + 0 + 10 +7942.499985 + 20 +4395.721429 + 30 +0.0 + 11 +7970.624985 + 21 +4444.435358 + 31 +0.0 + 0 +LINE + 5 +3BB + 8 +0 + 62 + 0 + 10 +7881.627961 + 20 +4192.860132 + 30 +0.0 + 11 +7886.249985 + 21 +4200.865714 + 31 +0.0 + 0 +LINE + 5 +3BC + 8 +0 + 62 + 0 + 10 +7942.499985 + 20 +4298.293571 + 30 +0.0 + 11 +7970.624985 + 21 +4347.0075 + 31 +0.0 + 0 +LINE + 5 +3BD + 8 +0 + 62 + 0 + 10 +8026.874985 + 20 +4444.435358 + 30 +0.0 + 11 +8054.833041 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +3BE + 8 +0 + 62 + 0 + 10 +7942.499985 + 20 +4200.865714 + 30 +0.0 + 11 +7970.624985 + 21 +4249.579643 + 31 +0.0 + 0 +LINE + 5 +3BF + 8 +0 + 62 + 0 + 10 +8026.874985 + 20 +4347.007501 + 30 +0.0 + 11 +8054.999985 + 21 +4395.721429 + 31 +0.0 + 0 +LINE + 5 +3C0 + 8 +0 + 62 + 0 + 10 +8026.874985 + 20 +4249.579643 + 30 +0.0 + 11 +8054.999985 + 21 +4298.293572 + 31 +0.0 + 0 +LINE + 5 +3C1 + 8 +0 + 62 + 0 + 10 +8111.249985 + 20 +4395.72143 + 30 +0.0 + 11 +8139.374985 + 21 +4444.435359 + 31 +0.0 + 0 +LINE + 5 +3C2 + 8 +0 + 62 + 0 + 10 +8050.37796 + 20 +4192.860132 + 30 +0.0 + 11 +8054.999985 + 21 +4200.865714 + 31 +0.0 + 0 +LINE + 5 +3C3 + 8 +0 + 62 + 0 + 10 +8111.249985 + 20 +4298.293572 + 30 +0.0 + 11 +8139.374985 + 21 +4347.007501 + 31 +0.0 + 0 +LINE + 5 +3C4 + 8 +0 + 62 + 0 + 10 +8195.624985 + 20 +4444.435359 + 30 +0.0 + 11 +8223.583041 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +3C5 + 8 +0 + 62 + 0 + 10 +8111.249984 + 20 +4200.865714 + 30 +0.0 + 11 +8139.374984 + 21 +4249.579643 + 31 +0.0 + 0 +LINE + 5 +3C6 + 8 +0 + 62 + 0 + 10 +8195.624984 + 20 +4347.007501 + 30 +0.0 + 11 +8223.749984 + 21 +4395.72143 + 31 +0.0 + 0 +LINE + 5 +3C7 + 8 +0 + 62 + 0 + 10 +8195.624984 + 20 +4249.579643 + 30 +0.0 + 11 +8223.749984 + 21 +4298.293572 + 31 +0.0 + 0 +LINE + 5 +3C8 + 8 +0 + 62 + 0 + 10 +8279.999984 + 20 +4395.72143 + 30 +0.0 + 11 +8308.124984 + 21 +4444.435359 + 31 +0.0 + 0 +LINE + 5 +3C9 + 8 +0 + 62 + 0 + 10 +8219.127959 + 20 +4192.860132 + 30 +0.0 + 11 +8223.749984 + 21 +4200.865714 + 31 +0.0 + 0 +LINE + 5 +3CA + 8 +0 + 62 + 0 + 10 +8279.999984 + 20 +4298.293572 + 30 +0.0 + 11 +8308.124984 + 21 +4347.007501 + 31 +0.0 + 0 +LINE + 5 +3CB + 8 +0 + 62 + 0 + 10 +8364.374984 + 20 +4444.435359 + 30 +0.0 + 11 +8392.33304 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +3CC + 8 +0 + 62 + 0 + 10 +8279.999984 + 20 +4200.865714 + 30 +0.0 + 11 +8308.124984 + 21 +4249.579643 + 31 +0.0 + 0 +LINE + 5 +3CD + 8 +0 + 62 + 0 + 10 +8364.374984 + 20 +4347.007501 + 30 +0.0 + 11 +8392.499984 + 21 +4395.72143 + 31 +0.0 + 0 +LINE + 5 +3CE + 8 +0 + 62 + 0 + 10 +8364.374984 + 20 +4249.579643 + 30 +0.0 + 11 +8392.499984 + 21 +4298.293572 + 31 +0.0 + 0 +LINE + 5 +3CF + 8 +0 + 62 + 0 + 10 +8448.749984 + 20 +4395.72143 + 30 +0.0 + 11 +8476.874984 + 21 +4444.435359 + 31 +0.0 + 0 +LINE + 5 +3D0 + 8 +0 + 62 + 0 + 10 +8387.877958 + 20 +4192.860132 + 30 +0.0 + 11 +8392.499983 + 21 +4200.865714 + 31 +0.0 + 0 +LINE + 5 +3D1 + 8 +0 + 62 + 0 + 10 +8448.749983 + 20 +4298.293572 + 30 +0.0 + 11 +8476.874983 + 21 +4347.007501 + 31 +0.0 + 0 +LINE + 5 +3D2 + 8 +0 + 62 + 0 + 10 +8533.124983 + 20 +4444.435359 + 30 +0.0 + 11 +8561.083039 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +3D3 + 8 +0 + 62 + 0 + 10 +8448.749983 + 20 +4200.865715 + 30 +0.0 + 11 +8476.874983 + 21 +4249.579644 + 31 +0.0 + 0 +LINE + 5 +3D4 + 8 +0 + 62 + 0 + 10 +8533.124983 + 20 +4347.007501 + 30 +0.0 + 11 +8561.249983 + 21 +4395.72143 + 31 +0.0 + 0 +LINE + 5 +3D5 + 8 +0 + 62 + 0 + 10 +8533.124983 + 20 +4249.579644 + 30 +0.0 + 11 +8561.249983 + 21 +4298.293573 + 31 +0.0 + 0 +LINE + 5 +3D6 + 8 +0 + 62 + 0 + 10 +8617.499983 + 20 +4395.721431 + 30 +0.0 + 11 +8645.624983 + 21 +4444.435359 + 31 +0.0 + 0 +LINE + 5 +3D7 + 8 +0 + 62 + 0 + 10 +8556.627958 + 20 +4192.860132 + 30 +0.0 + 11 +8561.249983 + 21 +4200.865715 + 31 +0.0 + 0 +LINE + 5 +3D8 + 8 +0 + 62 + 0 + 10 +8617.499983 + 20 +4298.293573 + 30 +0.0 + 11 +8645.624983 + 21 +4347.007502 + 31 +0.0 + 0 +LINE + 5 +3D9 + 8 +0 + 62 + 0 + 10 +8701.874983 + 20 +4444.43536 + 30 +0.0 + 11 +8729.833038 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +3DA + 8 +0 + 62 + 0 + 10 +8617.499983 + 20 +4200.865715 + 30 +0.0 + 11 +8645.624983 + 21 +4249.579644 + 31 +0.0 + 0 +LINE + 5 +3DB + 8 +0 + 62 + 0 + 10 +8701.874983 + 20 +4347.007502 + 30 +0.0 + 11 +8729.999983 + 21 +4395.721431 + 31 +0.0 + 0 +LINE + 5 +3DC + 8 +0 + 62 + 0 + 10 +8701.874982 + 20 +4249.579644 + 30 +0.0 + 11 +8729.999982 + 21 +4298.293573 + 31 +0.0 + 0 +LINE + 5 +3DD + 8 +0 + 62 + 0 + 10 +8786.249982 + 20 +4395.721431 + 30 +0.0 + 11 +8814.374982 + 21 +4444.43536 + 31 +0.0 + 0 +LINE + 5 +3DE + 8 +0 + 62 + 0 + 10 +8725.377957 + 20 +4192.860132 + 30 +0.0 + 11 +8729.999982 + 21 +4200.865715 + 31 +0.0 + 0 +LINE + 5 +3DF + 8 +0 + 62 + 0 + 10 +8786.249982 + 20 +4298.293573 + 30 +0.0 + 11 +8814.374982 + 21 +4347.007502 + 31 +0.0 + 0 +LINE + 5 +3E0 + 8 +0 + 62 + 0 + 10 +8786.249982 + 20 +4200.865715 + 30 +0.0 + 11 +8814.374982 + 21 +4249.579644 + 31 +0.0 + 0 +ENDBLK + 5 +3E1 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D30 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D30 + 1 + + 0 +LINE + 5 +3E3 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9400.0 + 20 +4191.0 + 30 +0.0 + 11 +9400.0 + 21 +4489.0 + 31 +0.0 + 0 +INSERT + 5 +3E4 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9400.0 + 20 +4190.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +3E5 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9400.0 + 20 +4490.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +3E6 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9356.25 + 20 +4281.666667 + 30 +0.0 + 40 +87.5 + 1 +12 + 50 +90.0 + 72 + 1 + 11 +9312.5 + 21 +4340.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +3E7 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8840.0 + 20 +4190.0 + 30 +0.0 + 0 +POINT + 5 +3E8 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8840.0 + 20 +4490.0 + 30 +0.0 + 0 +POINT + 5 +3E9 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9400.0 + 20 +4490.0 + 30 +0.0 + 0 +ENDBLK + 5 +3EA + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D33 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D33 + 1 + + 0 +LINE + 5 +3EC + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +10003.0 + 20 +4661.0 + 30 +0.0 + 11 +10003.0 + 21 +4749.0 + 31 +0.0 + 0 +INSERT + 5 +3ED + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +10003.0 + 20 +4660.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +3EE + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +10003.0 + 20 +4750.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +3EF + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9959.25 + 20 +4675.833333 + 30 +0.0 + 40 +87.5 + 1 +3 + 50 +90.0 + 72 + 1 + 11 +9915.5 + 21 +4705.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +3F0 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8835.0 + 20 +4660.0 + 30 +0.0 + 0 +POINT + 5 +3F1 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8830.0 + 20 +4750.0 + 30 +0.0 + 0 +POINT + 5 +3F2 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +10003.0 + 20 +4750.0 + 30 +0.0 + 0 +ENDBLK + 5 +3F3 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D34 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D34 + 1 + + 0 +LINE + 5 +3F5 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +10003.0 + 20 +4751.0 + 30 +0.0 + 11 +10003.0 + 21 +4824.0 + 31 +0.0 + 0 +INSERT + 5 +3F6 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +10003.0 + 20 +4750.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +3F7 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +10003.0 + 20 +4825.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +3F8 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9959.25 + 20 +4758.333333 + 30 +0.0 + 40 +87.5 + 1 +3 + 50 +90.0 + 72 + 1 + 11 +9915.5 + 21 +4787.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +3F9 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8830.0 + 20 +4750.0 + 30 +0.0 + 0 +POINT + 5 +3FA + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8820.0 + 20 +4825.0 + 30 +0.0 + 0 +POINT + 5 +3FB + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +10003.0 + 20 +4825.0 + 30 +0.0 + 0 +ENDBLK + 5 +3FC + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D35 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D35 + 1 + + 0 +LINE + 5 +3FE + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +10003.017251 + 20 +4116.0 + 30 +0.0 + 11 +10003.017251 + 21 +4174.0 + 31 +0.0 + 0 +INSERT + 5 +3FF + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +10003.017251 + 20 +4115.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +400 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +10003.017251 + 20 +4175.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +401 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9959.267251 + 20 +4035.833333 + 30 +0.0 + 40 +87.5 + 1 +2 + 50 +90.0 + 72 + 1 + 11 +9915.517251 + 21 +4065.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +402 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8828.017251 + 20 +4115.0 + 30 +0.0 + 0 +POINT + 5 +403 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8828.017251 + 20 +4175.0 + 30 +0.0 + 0 +POINT + 5 +404 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +10003.017251 + 20 +4175.0 + 30 +0.0 + 0 +ENDBLK + 5 +405 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D37 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D37 + 1 + + 0 +LINE + 5 +407 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +10003.0 + 20 +4176.0 + 30 +0.0 + 11 +10003.0 + 21 +4659.0 + 31 +0.0 + 0 +INSERT + 5 +408 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +10003.0 + 20 +4175.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +409 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +10003.0 + 20 +4660.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +40A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9959.25 + 20 +4359.166667 + 30 +0.0 + 40 +87.5 + 1 +18 + 50 +90.0 + 72 + 1 + 11 +9915.5 + 21 +4417.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +40B + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8825.0 + 20 +4175.0 + 30 +0.0 + 0 +POINT + 5 +40C + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8835.0 + 20 +4660.0 + 30 +0.0 + 0 +POINT + 5 +40D + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +10003.0 + 20 +4660.0 + 30 +0.0 + 0 +ENDBLK + 5 +40E + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D39 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D39 + 1 + + 0 +LINE + 5 +410 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +3356.72129 + 20 +4461.423158 + 30 +0.0 + 11 +3309.180412 + 21 +4461.423158 + 31 +0.0 + 0 +INSERT + 5 +411 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +3357.72129 + 20 +4461.423158 + 30 +0.0 + 0 +INSERT + 5 +412 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +3308.180412 + 20 +4461.423158 + 30 +0.0 + 50 +180.0 + 0 +TEXT + 5 +413 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +3225.416667 + 20 +4505.173158 + 30 +0.0 + 40 +87.5 + 1 +1 + 72 + 1 + 11 +3240.0 + 21 +4548.923158 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +414 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +3357.72129 + 20 +4496.083823 + 30 +0.0 + 0 +POINT + 5 +415 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +3308.180412 + 20 +4496.083823 + 30 +0.0 + 0 +POINT + 5 +416 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +3308.180412 + 20 +4461.423158 + 30 +0.0 + 0 +ENDBLK + 5 +417 + 8 +0 + 0 +ENDSEC + 0 +SECTION + 2 +ENTITIES + 0 +POLYLINE + 5 +418 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +13F5 + 8 +0 + 10 +500.0 + 20 +125.0 + 30 +0.0 + 0 +VERTEX + 5 +13F6 + 8 +0 + 10 +20900.0 + 20 +125.0 + 30 +0.0 + 0 +VERTEX + 5 +13F7 + 8 +0 + 10 +20900.0 + 20 +14725.0 + 30 +0.0 + 0 +VERTEX + 5 +13F8 + 8 +0 + 10 +500.0 + 20 +14725.0 + 30 +0.0 + 0 +SEQEND + 5 +13F9 + 8 +0 + 0 +POLYLINE + 5 +41E + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +13FA + 8 +0 + 10 +20900.0 + 20 +1500.0 + 30 +0.0 + 0 +VERTEX + 5 +13FB + 8 +0 + 10 +16275.0 + 20 +1500.0 + 30 +0.0 + 0 +VERTEX + 5 +13FC + 8 +0 + 10 +16275.0 + 20 +125.0 + 30 +0.0 + 0 +SEQEND + 5 +13FD + 8 +0 + 0 +POLYLINE + 5 +423 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +13FE + 8 +0 + 10 +18650.0 + 20 +125.0 + 30 +0.0 + 0 +VERTEX + 5 +13FF + 8 +0 + 10 +18650.0 + 20 +1495.0 + 30 +0.0 + 0 +SEQEND + 5 +1400 + 8 +0 + 0 +POLYLINE + 5 +427 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +1401 + 8 +0 + 10 +17525.0 + 20 +125.0 + 30 +0.0 + 0 +VERTEX + 5 +1402 + 8 +0 + 10 +17525.0 + 20 +1500.0 + 30 +0.0 + 0 +SEQEND + 5 +1403 + 8 +0 + 0 +POLYLINE + 5 +42B + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +1404 + 8 +0 + 10 +17525.0 + 20 +500.0 + 30 +0.0 + 0 +VERTEX + 5 +1405 + 8 +0 + 10 +20900.0 + 20 +500.0 + 30 +0.0 + 0 +SEQEND + 5 +1406 + 8 +0 + 0 +POLYLINE + 5 +42F + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +1407 + 8 +0 + 10 +17525.0 + 20 +1125.0 + 30 +0.0 + 0 +VERTEX + 5 +1408 + 8 +0 + 10 +20900.0 + 20 +1125.0 + 30 +0.0 + 0 +SEQEND + 5 +1409 + 8 +0 + 0 +POLYLINE + 5 +433 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +140A + 8 +0 + 10 +17525.0 + 20 +250.0 + 30 +0.0 + 0 +VERTEX + 5 +140B + 8 +0 + 10 +16275.0 + 20 +250.0 + 30 +0.0 + 0 +SEQEND + 5 +140C + 8 +0 + 0 +POLYLINE + 5 +437 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +140D + 8 +0 + 10 +17525.0 + 20 +375.0 + 30 +0.0 + 0 +VERTEX + 5 +140E + 8 +0 + 10 +16275.0 + 20 +375.0 + 30 +0.0 + 0 +SEQEND + 5 +140F + 8 +0 + 0 +POLYLINE + 5 +43B + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +1410 + 8 +0 + 10 +17525.0 + 20 +500.0 + 30 +0.0 + 0 +VERTEX + 5 +1411 + 8 +0 + 10 +16275.0 + 20 +500.0 + 30 +0.0 + 0 +SEQEND + 5 +1412 + 8 +0 + 0 +POLYLINE + 5 +43F + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +1413 + 8 +0 + 10 +17525.0 + 20 +625.0 + 30 +0.0 + 0 +VERTEX + 5 +1414 + 8 +0 + 10 +16275.0 + 20 +625.0 + 30 +0.0 + 0 +SEQEND + 5 +1415 + 8 +0 + 0 +POLYLINE + 5 +443 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +1416 + 8 +0 + 10 +17525.0 + 20 +750.0 + 30 +0.0 + 0 +VERTEX + 5 +1417 + 8 +0 + 10 +16275.0 + 20 +750.0 + 30 +0.0 + 0 +SEQEND + 5 +1418 + 8 +0 + 0 +POLYLINE + 5 +447 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +1419 + 8 +0 + 10 +17525.0 + 20 +875.0 + 30 +0.0 + 0 +VERTEX + 5 +141A + 8 +0 + 10 +16275.0 + 20 +875.0 + 30 +0.0 + 0 +SEQEND + 5 +141B + 8 +0 + 0 +POLYLINE + 5 +44B + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +141C + 8 +0 + 10 +17525.0 + 20 +1000.0 + 30 +0.0 + 0 +VERTEX + 5 +141D + 8 +0 + 10 +16275.0 + 20 +1000.0 + 30 +0.0 + 0 +SEQEND + 5 +141E + 8 +0 + 0 +POLYLINE + 5 +44F + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +141F + 8 +0 + 10 +17525.0 + 20 +1125.0 + 30 +0.0 + 0 +VERTEX + 5 +1420 + 8 +0 + 10 +16275.0 + 20 +1125.0 + 30 +0.0 + 0 +SEQEND + 5 +1421 + 8 +0 + 0 +POLYLINE + 5 +453 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +1422 + 8 +0 + 10 +18650.0 + 20 +1375.0 + 30 +0.0 + 0 +VERTEX + 5 +1423 + 8 +0 + 10 +20901.604101 + 20 +1375.0 + 30 +0.0 + 0 +SEQEND + 5 +1424 + 8 +0 + 0 +TEXT + 5 +457 + 8 +LEGENDE-35 + 10 +18745.266644 + 20 +1210.264338 + 30 +0.0 + 40 +87.5 + 1 +MASSTAB 1:10 + 0 +TEXT + 5 +458 + 8 +LEGENDE-35 + 10 +18730.0 + 20 +260.0 + 30 +0.0 + 40 +87.5 + 1 +Name + 0 +TEXT + 5 +459 + 8 +LEGENDE-35 + 10 +17705.0 + 20 +225.0 + 30 +0.0 + 40 +87.5 + 1 +001 + 0 +POLYLINE + 5 +45A + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +1425 + 8 +0 + 10 +20525.0 + 20 +125.0 + 30 +0.0 + 0 +VERTEX + 5 +1426 + 8 +0 + 10 +20525.0 + 20 +495.0 + 30 +0.0 + 0 +SEQEND + 5 +1427 + 8 +0 + 0 +TEXT + 5 +45E + 8 +LEGENDE-35 + 10 +20580.0 + 20 +365.0 + 30 +0.0 + 40 +87.5 + 1 +Blatt + 41 +0.75 + 0 +POLYLINE + 5 +45F + 8 +PE-FOLIE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +25.0 + 41 +25.0 + 0 +VERTEX + 5 +1428 + 8 +PE-FOLIE + 10 +5741.85938 + 20 +9370.360132 + 30 +0.0 + 0 +VERTEX + 5 +1429 + 8 +PE-FOLIE + 10 +6451.85938 + 20 +9370.360132 + 30 +0.0 + 0 +SEQEND + 5 +142A + 8 +PE-FOLIE + 0 +POLYLINE + 5 +463 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +142B + 8 +HOLZ + 10 +5770.60938 + 20 +9390.360132 + 30 +0.0 + 0 +VERTEX + 5 +142C + 8 +HOLZ + 10 +6220.60938 + 20 +9390.360132 + 30 +0.0 + 0 +VERTEX + 5 +142D + 8 +HOLZ + 10 +6220.60938 + 20 +9840.360132 + 30 +0.0 + 0 +VERTEX + 5 +142E + 8 +HOLZ + 10 +5770.60938 + 20 +9840.360132 + 30 +0.0 + 0 +SEQEND + 5 +142F + 8 +HOLZ + 0 +POLYLINE + 5 +469 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +46A + 8 +HOLZ + 10 +6121.85938 + 20 +9390.360132 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +46B + 8 +HOLZ + 10 +6121.85938 + 20 +9390.360132 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +46C + 8 +HOLZ + 10 +6119.470475 + 20 +9414.504988 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +46D + 8 +HOLZ + 10 +6118.561831 + 20 +9434.501562 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +46E + 8 +HOLZ + 10 +6118.921982 + 20 +9450.868185 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +46F + 8 +HOLZ + 10 +6120.339462 + 20 +9464.123187 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +470 + 8 +HOLZ + 10 +6122.602805 + 20 +9474.784896 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +471 + 8 +HOLZ + 10 +6125.500544 + 20 +9483.371642 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +472 + 8 +HOLZ + 10 +6128.821214 + 20 +9490.401756 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +473 + 8 +HOLZ + 10 +6132.353349 + 20 +9496.393566 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +474 + 8 +HOLZ + 10 +6135.928468 + 20 +9501.788299 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +475 + 8 +HOLZ + 10 +6139.550036 + 20 +9506.71877 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +476 + 8 +HOLZ + 10 +6143.264505 + 20 +9511.24069 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +477 + 8 +HOLZ + 10 +6147.118326 + 20 +9515.409771 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +478 + 8 +HOLZ + 10 +6151.157949 + 20 +9519.281725 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +479 + 8 +HOLZ + 10 +6155.429825 + 20 +9522.912262 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +47A + 8 +HOLZ + 10 +6159.980407 + 20 +9526.357096 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +47B + 8 +HOLZ + 10 +6164.856144 + 20 +9529.671936 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +47C + 8 +HOLZ + 10 +6170.095123 + 20 +9532.897189 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +47D + 8 +HOLZ + 10 +6175.701977 + 20 +9536.012043 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +47E + 8 +HOLZ + 10 +6181.672971 + 20 +9538.980379 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +47F + 8 +HOLZ + 10 +6188.004371 + 20 +9541.766077 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +480 + 8 +HOLZ + 10 +6194.692446 + 20 +9544.33302 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +481 + 8 +HOLZ + 10 +6201.733461 + 20 +9546.64509 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +482 + 8 +HOLZ + 10 +6209.123684 + 20 +9548.666166 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +483 + 8 +HOLZ + 10 +6216.85938 + 20 +9550.360132 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +484 + 8 +HOLZ + 10 +6113.327314 + 20 +9460.738192 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +485 + 8 +HOLZ + 10 +6132.353367 + 20 +9501.939953 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +486 + 8 +HOLZ + 10 +6160.892338 + 20 +9530.46427 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +487 + 8 +HOLZ + 10 +6195.773542 + 20 +9546.311143 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +488 + 8 +HOLZ + 10 +6216.85938 + 20 +9550.360132 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +489 + 8 +HOLZ + 0 +POLYLINE + 5 +48A + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +48B + 8 +HOLZ + 10 +6026.85938 + 20 +9390.360132 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +48C + 8 +HOLZ + 10 +6026.85938 + 20 +9390.360132 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +48D + 8 +HOLZ + 10 +6028.683878 + 20 +9415.766253 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +48E + 8 +HOLZ + 10 +6031.079611 + 20 +9437.163364 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +48F + 8 +HOLZ + 10 +6033.954356 + 20 +9455.060511 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +490 + 8 +HOLZ + 10 +6037.215889 + 20 +9469.966739 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +491 + 8 +HOLZ + 10 +6040.771989 + 20 +9482.391095 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +492 + 8 +HOLZ + 10 +6044.530432 + 20 +9492.842625 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +493 + 8 +HOLZ + 10 +6048.398997 + 20 +9501.830374 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +494 + 8 +HOLZ + 10 +6052.285459 + 20 +9509.86339 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +495 + 8 +HOLZ + 10 +6056.117612 + 20 +9517.371034 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +496 + 8 +HOLZ + 10 +6059.903311 + 20 +9524.46394 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +497 + 8 +HOLZ + 10 +6063.670428 + 20 +9531.173059 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +498 + 8 +HOLZ + 10 +6067.446832 + 20 +9537.529339 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +499 + 8 +HOLZ + 10 +6071.260396 + 20 +9543.563732 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +49A + 8 +HOLZ + 10 +6075.138989 + 20 +9549.307188 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +49B + 8 +HOLZ + 10 +6079.110483 + 20 +9554.790656 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +49C + 8 +HOLZ + 10 +6083.202749 + 20 +9560.045086 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +49D + 8 +HOLZ + 10 +6087.440561 + 20 +9565.10143 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +49E + 8 +HOLZ + 10 +6091.836305 + 20 +9569.990637 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +49F + 8 +HOLZ + 10 +6096.399271 + 20 +9574.743659 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4A0 + 8 +HOLZ + 10 +6101.138748 + 20 +9579.391446 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4A1 + 8 +HOLZ + 10 +6106.064026 + 20 +9583.96495 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4A2 + 8 +HOLZ + 10 +6111.184395 + 20 +9588.495122 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4A3 + 8 +HOLZ + 10 +6116.509143 + 20 +9593.012912 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4A4 + 8 +HOLZ + 10 +6122.047561 + 20 +9597.549271 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4A5 + 8 +HOLZ + 10 +6127.900145 + 20 +9602.129559 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4A6 + 8 +HOLZ + 10 +6134.532214 + 20 +9606.756772 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4A7 + 8 +HOLZ + 10 +6142.500298 + 20 +9611.428315 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4A8 + 8 +HOLZ + 10 +6152.360922 + 20 +9616.141591 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4A9 + 8 +HOLZ + 10 +6164.670616 + 20 +9620.894007 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4AA + 8 +HOLZ + 10 +6179.985905 + 20 +9625.682966 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4AB + 8 +HOLZ + 10 +6198.863317 + 20 +9630.505873 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4AC + 8 +HOLZ + 10 +6221.85938 + 20 +9635.360132 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4AD + 8 +HOLZ + 10 +6030.881087 + 20 +9463.907621 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +4AE + 8 +HOLZ + 10 +6053.078256 + 20 +9514.617397 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +4AF + 8 +HOLZ + 10 +6081.617227 + 20 +9562.158016 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +4B0 + 8 +HOLZ + 10 +6119.669332 + 20 +9597.021055 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +4B1 + 8 +HOLZ + 10 +6154.55032 + 20 +9622.375943 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +4B2 + 8 +HOLZ + 10 +6221.85938 + 20 +9635.360132 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +4B3 + 8 +HOLZ + 0 +POLYLINE + 5 +4B4 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +4B5 + 8 +HOLZ + 10 +5921.85938 + 20 +9390.360132 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +4B6 + 8 +HOLZ + 10 +5921.85938 + 20 +9390.360132 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4B7 + 8 +HOLZ + 10 +5930.304183 + 20 +9432.854706 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4B8 + 8 +HOLZ + 10 +5938.173042 + 20 +9467.79641 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4B9 + 8 +HOLZ + 10 +5945.597782 + 20 +9496.161648 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4BA + 8 +HOLZ + 10 +5952.710227 + 20 +9518.926818 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4BB + 8 +HOLZ + 10 +5959.642202 + 20 +9537.068323 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4BC + 8 +HOLZ + 10 +5966.525532 + 20 +9551.562564 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4BD + 8 +HOLZ + 10 +5973.492042 + 20 +9563.38594 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4BE + 8 +HOLZ + 10 +5980.673556 + 20 +9573.514854 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4BF + 8 +HOLZ + 10 +5988.157219 + 20 +9582.775868 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4C0 + 8 +HOLZ + 10 +5995.851457 + 20 +9591.396197 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4C1 + 8 +HOLZ + 10 +6003.620015 + 20 +9599.453219 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4C2 + 8 +HOLZ + 10 +6011.326639 + 20 +9607.024312 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4C3 + 8 +HOLZ + 10 +6018.835073 + 20 +9614.186852 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4C4 + 8 +HOLZ + 10 +6026.009064 + 20 +9621.018218 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4C5 + 8 +HOLZ + 10 +6032.712358 + 20 +9627.595786 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4C6 + 8 +HOLZ + 10 +6038.808699 + 20 +9633.996934 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4C7 + 8 +HOLZ + 10 +6044.206219 + 20 +9640.276858 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4C8 + 8 +HOLZ + 10 +6048.990594 + 20 +9646.402028 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4C9 + 8 +HOLZ + 10 +6053.291885 + 20 +9652.316733 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4CA + 8 +HOLZ + 10 +6057.240153 + 20 +9657.965262 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4CB + 8 +HOLZ + 10 +6060.965461 + 20 +9663.291903 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4CC + 8 +HOLZ + 10 +6064.59787 + 20 +9668.240945 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4CD + 8 +HOLZ + 10 +6068.267441 + 20 +9672.756676 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4CE + 8 +HOLZ + 10 +6072.104237 + 20 +9676.783387 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4CF + 8 +HOLZ + 10 +6076.215608 + 20 +9680.29322 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4D0 + 8 +HOLZ + 10 +6080.61807 + 20 +9683.369742 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4D1 + 8 +HOLZ + 10 +6085.305429 + 20 +9686.124377 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4D2 + 8 +HOLZ + 10 +6090.27149 + 20 +9688.668547 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4D3 + 8 +HOLZ + 10 +6095.510059 + 20 +9691.113674 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4D4 + 8 +HOLZ + 10 +6101.014941 + 20 +9693.571182 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4D5 + 8 +HOLZ + 10 +6106.779942 + 20 +9696.152492 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4D6 + 8 +HOLZ + 10 +6112.798867 + 20 +9698.969027 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4D7 + 8 +HOLZ + 10 +6119.056749 + 20 +9702.112092 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4D8 + 8 +HOLZ + 10 +6125.503525 + 20 +9705.59252 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4D9 + 8 +HOLZ + 10 +6132.08036 + 20 +9709.401025 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4DA + 8 +HOLZ + 10 +6138.728417 + 20 +9713.528324 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4DB + 8 +HOLZ + 10 +6145.388862 + 20 +9717.965129 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4DC + 8 +HOLZ + 10 +6152.002858 + 20 +9722.702158 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4DD + 8 +HOLZ + 10 +6158.51157 + 20 +9727.730124 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4DE + 8 +HOLZ + 10 +6164.856162 + 20 +9733.039743 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4DF + 8 +HOLZ + 10 +6171.00756 + 20 +9738.642817 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4E0 + 8 +HOLZ + 10 +6177.055739 + 20 +9744.635506 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4E1 + 8 +HOLZ + 10 +6183.120436 + 20 +9751.135056 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4E2 + 8 +HOLZ + 10 +6189.321387 + 20 +9758.258713 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4E3 + 8 +HOLZ + 10 +6195.778329 + 20 +9766.123724 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4E4 + 8 +HOLZ + 10 +6202.610998 + 20 +9774.847335 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4E5 + 8 +HOLZ + 10 +6209.939131 + 20 +9784.546794 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4E6 + 8 +HOLZ + 10 +6217.882464 + 20 +9795.339347 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4E7 + 8 +HOLZ + 10 +5945.263958 + 20 +9514.617397 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +4E8 + 8 +HOLZ + 10 +5976.974046 + 20 +9581.174182 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +4E9 + 8 +HOLZ + 10 +6046.736239 + 20 +9635.053387 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +4EA + 8 +HOLZ + 10 +6068.933192 + 20 +9682.59387 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +4EB + 8 +HOLZ + 10 +6110.156414 + 20 +9695.27145 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +4EC + 8 +HOLZ + 10 +6167.234355 + 20 +9730.134489 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +4ED + 8 +HOLZ + 10 +6195.773542 + 20 +9764.997528 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +4EE + 8 +HOLZ + 10 +6217.882464 + 20 +9795.339347 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +4EF + 8 +HOLZ + 0 +POLYLINE + 5 +4F0 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +4F1 + 8 +HOLZ + 10 +5876.85938 + 20 +9390.360132 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +4F2 + 8 +HOLZ + 10 +5876.85938 + 20 +9390.360132 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4F3 + 8 +HOLZ + 10 +5881.449573 + 20 +9440.601711 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4F4 + 8 +HOLZ + 10 +5886.652796 + 20 +9482.231899 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4F5 + 8 +HOLZ + 10 +5892.360239 + 20 +9516.357091 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4F6 + 8 +HOLZ + 10 +5898.463091 + 20 +9544.083684 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4F7 + 8 +HOLZ + 10 +5904.852541 + 20 +9566.518071 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4F8 + 8 +HOLZ + 10 +5911.419781 + 20 +9584.766649 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4F9 + 8 +HOLZ + 10 +5918.055998 + 20 +9599.935812 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4FA + 8 +HOLZ + 10 +5924.652383 + 20 +9613.131957 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4FB + 8 +HOLZ + 10 +5931.117229 + 20 +9625.288943 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4FC + 8 +HOLZ + 10 +5937.427238 + 20 +9636.650492 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4FD + 8 +HOLZ + 10 +5943.57622 + 20 +9647.28779 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4FE + 8 +HOLZ + 10 +5949.557981 + 20 +9657.272026 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4FF + 8 +HOLZ + 10 +5955.366328 + 20 +9666.674384 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +500 + 8 +HOLZ + 10 +5960.995068 + 20 +9675.566053 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +501 + 8 +HOLZ + 10 +5966.43801 + 20 +9684.018218 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +502 + 8 +HOLZ + 10 +5971.688959 + 20 +9692.102067 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +503 + 8 +HOLZ + 10 +5976.758755 + 20 +9699.887238 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +504 + 8 +HOLZ + 10 +5981.726363 + 20 +9707.437182 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +505 + 8 +HOLZ + 10 +5986.68778 + 20 +9714.813801 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +506 + 8 +HOLZ + 10 +5991.739 + 20 +9722.078996 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +507 + 8 +HOLZ + 10 +5996.976022 + 20 +9729.29467 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +508 + 8 +HOLZ + 10 +6002.49484 + 20 +9736.522725 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +509 + 8 +HOLZ + 10 +6008.391453 + 20 +9743.825063 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +50A + 8 +HOLZ + 10 +6014.761855 + 20 +9751.263585 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +50B + 8 +HOLZ + 10 +6021.711326 + 20 +9758.929289 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +50C + 8 +HOLZ + 10 +6029.382274 + 20 +9767.029544 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +50D + 8 +HOLZ + 10 +6037.92639 + 20 +9775.800814 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +50E + 8 +HOLZ + 10 +6047.495364 + 20 +9785.479562 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +50F + 8 +HOLZ + 10 +6058.240886 + 20 +9796.302254 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +510 + 8 +HOLZ + 10 +6070.314647 + 20 +9808.505353 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +511 + 8 +HOLZ + 10 +6083.868337 + 20 +9822.325322 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +512 + 8 +HOLZ + 10 +6099.053648 + 20 +9837.998627 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +513 + 8 +HOLZ + 10 +5888.1858 + 20 +9536.802992 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +514 + 8 +HOLZ + 10 +5926.237906 + 20 +9622.375943 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +515 + 8 +HOLZ + 10 +5973.802929 + 20 +9695.27145 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +516 + 8 +HOLZ + 10 +6008.684134 + 20 +9749.150655 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +517 + 8 +HOLZ + 10 +6056.249157 + 20 +9793.521845 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +518 + 8 +HOLZ + 10 +6099.053648 + 20 +9837.998627 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +519 + 8 +HOLZ + 0 +POLYLINE + 5 +51A + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +51B + 8 +HOLZ + 10 +5771.85938 + 20 +9450.360132 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +51C + 8 +HOLZ + 10 +5771.85938 + 20 +9450.360132 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +51D + 8 +HOLZ + 10 +5793.44836 + 20 +9495.445046 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +51E + 8 +HOLZ + 10 +5811.669743 + 20 +9533.213 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +51F + 8 +HOLZ + 10 +5826.926755 + 20 +9564.599619 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +520 + 8 +HOLZ + 10 +5839.622622 + 20 +9590.540529 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +521 + 8 +HOLZ + 10 +5850.160569 + 20 +9611.971354 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +522 + 8 +HOLZ + 10 +5858.943822 + 20 +9629.827721 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +523 + 8 +HOLZ + 10 +5866.375607 + 20 +9645.045254 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +524 + 8 +HOLZ + 10 +5872.85915 + 20 +9658.559578 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +525 + 8 +HOLZ + 10 +5878.757825 + 20 +9671.166888 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +526 + 8 +HOLZ + 10 +5884.275608 + 20 +9683.105659 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +527 + 8 +HOLZ + 10 +5889.576623 + 20 +9694.474933 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +528 + 8 +HOLZ + 10 +5894.824995 + 20 +9705.373755 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +529 + 8 +HOLZ + 10 +5900.18485 + 20 +9715.901166 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +52A + 8 +HOLZ + 10 +5905.820311 + 20 +9726.156212 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +52B + 8 +HOLZ + 10 +5911.895504 + 20 +9736.237935 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +52C + 8 +HOLZ + 10 +5918.574553 + 20 +9746.24538 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +52D + 8 +HOLZ + 10 +5926.023967 + 20 +9756.280543 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +52E + 8 +HOLZ + 10 +5934.419785 + 20 +9766.457245 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +52F + 8 +HOLZ + 10 +5943.940432 + 20 +9776.89226 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +530 + 8 +HOLZ + 10 +5954.76433 + 20 +9787.702361 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +531 + 8 +HOLZ + 10 +5967.069903 + 20 +9799.004323 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +532 + 8 +HOLZ + 10 +5981.035575 + 20 +9810.91492 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +533 + 8 +HOLZ + 10 +5996.839768 + 20 +9823.550926 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +534 + 8 +HOLZ + 10 +6014.660907 + 20 +9837.029115 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +535 + 8 +HOLZ + 10 +5834.278543 + 20 +9581.174182 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +536 + 8 +HOLZ + 10 +5878.672666 + 20 +9666.747133 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +537 + 8 +HOLZ + 10 +5910.382753 + 20 +9745.981227 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +538 + 8 +HOLZ + 10 +5964.290011 + 20 +9799.860567 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +539 + 8 +HOLZ + 10 +6014.660907 + 20 +9837.029115 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +53A + 8 +HOLZ + 0 +POLYLINE + 5 +53B + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +53C + 8 +HOLZ + 10 +5770.836181 + 20 +9684.213 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +53D + 8 +HOLZ + 10 +5770.836181 + 20 +9684.213 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +53E + 8 +HOLZ + 10 +5794.334578 + 20 +9711.937864 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +53F + 8 +HOLZ + 10 +5817.271329 + 20 +9737.016925 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +540 + 8 +HOLZ + 10 +5839.681434 + 20 +9759.623879 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +541 + 8 +HOLZ + 10 +5861.59989 + 20 +9779.932417 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +542 + 8 +HOLZ + 10 +5883.061696 + 20 +9798.116234 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +543 + 8 +HOLZ + 10 +5904.101852 + 20 +9814.349022 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +544 + 8 +HOLZ + 10 +5924.755356 + 20 +9828.804476 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +545 + 8 +HOLZ + 10 +5945.057205 + 20 +9841.656289 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +546 + 8 +HOLZ + 10 +5834.278543 + 20 +9761.8281 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +547 + 8 +HOLZ + 10 +5891.356701 + 20 +9809.368583 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +548 + 8 +HOLZ + 10 +5945.057205 + 20 +9841.656289 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +549 + 8 +HOLZ + 0 +LINE + 5 +54A + 8 +0 + 62 + 0 + 10 +5539.35938 + 20 +9346.4523 + 30 +0.0 + 11 +5545.767212 + 21 +9352.860132 + 31 +0.0 + 0 +POLYLINE + 5 +54B + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1430 + 8 +DETAILS + 10 +5014.35938 + 20 +9173.787465 + 30 +0.0 + 0 +VERTEX + 5 +1431 + 8 +DETAILS + 10 +5089.35938 + 20 +9173.787465 + 30 +0.0 + 0 +SEQEND + 5 +1432 + 8 +DETAILS + 0 +POLYLINE + 5 +54F + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1433 + 8 +DETAILS + 10 +5126.85938 + 20 +9173.787465 + 30 +0.0 + 0 +VERTEX + 5 +1434 + 8 +DETAILS + 10 +5189.35938 + 20 +9173.787465 + 30 +0.0 + 0 +SEQEND + 5 +1435 + 8 +DETAILS + 0 +POLYLINE + 5 +553 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1436 + 8 +DETAILS + 10 +5239.35938 + 20 +9248.787465 + 30 +0.0 + 0 +VERTEX + 5 +1437 + 8 +DETAILS + 10 +5239.35938 + 20 +9098.787465 + 30 +0.0 + 0 +SEQEND + 5 +1438 + 8 +DETAILS + 0 +POLYLINE + 5 +557 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1439 + 8 +DETAILS + 10 +5201.85938 + 20 +9173.787465 + 30 +0.0 + 0 +VERTEX + 5 +143A + 8 +DETAILS + 10 +5339.35938 + 20 +9173.787465 + 30 +0.0 + 0 +SEQEND + 5 +143B + 8 +DETAILS + 0 +POLYLINE + 5 +55B + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +143C + 8 +DETAILS + 10 +5315.976103 + 20 +9211.227005 + 30 +0.0 + 0 +VERTEX + 5 +143D + 8 +DETAILS + 10 +5315.976103 + 20 +9136.227005 + 30 +0.0 + 0 +SEQEND + 5 +143E + 8 +DETAILS + 0 +POLYLINE + 5 +55F + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +143F + 8 +DETAILS + 10 +5376.85938 + 20 +9173.787465 + 30 +0.0 + 0 +VERTEX + 5 +1440 + 8 +DETAILS + 10 +5439.35938 + 20 +9173.787465 + 30 +0.0 + 0 +SEQEND + 5 +1441 + 8 +DETAILS + 0 +POLYLINE + 5 +563 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1442 + 8 +DETAILS + 10 +5476.85938 + 20 +9173.787465 + 30 +0.0 + 0 +VERTEX + 5 +1443 + 8 +DETAILS + 10 +5539.35938 + 20 +9173.787465 + 30 +0.0 + 0 +SEQEND + 5 +1444 + 8 +DETAILS + 0 +POLYLINE + 5 +567 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1445 + 8 +DETAILS + 10 +5589.35938 + 20 +9173.787465 + 30 +0.0 + 0 +VERTEX + 5 +1446 + 8 +DETAILS + 10 +5639.35938 + 20 +9173.787465 + 30 +0.0 + 0 +SEQEND + 5 +1447 + 8 +DETAILS + 0 +POLYLINE + 5 +56B + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1448 + 8 +DETAILS + 10 +5689.35938 + 20 +9173.787465 + 30 +0.0 + 0 +VERTEX + 5 +1449 + 8 +DETAILS + 10 +5764.35938 + 20 +9173.787465 + 30 +0.0 + 0 +SEQEND + 5 +144A + 8 +DETAILS + 0 +TEXT + 5 +56F + 8 +DETAILS + 10 +19314.561908 + 20 +739.032659 + 30 +0.0 + 40 +175.0 + 1 +D5, D6 + 0 +TEXT + 5 +570 + 8 +DETAILS + 10 +20650.0 + 20 +190.0 + 30 +0.0 + 40 +87.5 + 1 +7 + 0 +POLYLINE + 5 +571 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 0 +VERTEX + 5 +144B + 8 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +144C + 8 +0 + 10 +21025.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +144D + 8 +0 + 10 +21025.0 + 20 +14850.0 + 30 +0.0 + 0 +VERTEX + 5 +144E + 8 +0 + 10 +0.0 + 20 +14850.0 + 30 +0.0 + 0 +SEQEND + 5 +144F + 8 +0 + 0 +POLYLINE + 5 +577 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1450 + 8 +HOLZ + 10 +8170.220909 + 20 +11219.211493 + 30 +0.0 + 0 +VERTEX + 5 +1451 + 8 +HOLZ + 10 +8196.954253 + 20 +11181.512755 + 30 +0.0 + 0 +SEQEND + 5 +1452 + 8 +HOLZ + 0 +POLYLINE + 5 +57B + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +57C + 8 +HOLZ + 10 +8338.266005 + 20 +11319.10669 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +57D + 8 +HOLZ + 10 +8338.266005 + 20 +11319.10669 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +57E + 8 +HOLZ + 10 +8342.035779 + 20 +11311.900175 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +57F + 8 +HOLZ + 10 +8344.511624 + 20 +11305.08464 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +580 + 8 +HOLZ + 10 +8345.92424 + 20 +11298.730265 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +581 + 8 +HOLZ + 10 +8346.504328 + 20 +11292.907229 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +582 + 8 +HOLZ + 10 +8346.482586 + 20 +11287.685712 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +583 + 8 +HOLZ + 10 +8346.089716 + 20 +11283.135893 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +584 + 8 +HOLZ + 10 +8345.556418 + 20 +11279.32795 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +585 + 8 +HOLZ + 10 +8345.11339 + 20 +11276.332064 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +586 + 8 +HOLZ + 10 +8350.24904 + 20 +11299.430389 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +587 + 8 +HOLZ + 10 +8345.969369 + 20 +11283.175971 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +588 + 8 +HOLZ + 10 +8345.11339 + 20 +11276.332064 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +589 + 8 +HOLZ + 0 +POLYLINE + 5 +58A + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +58B + 8 +HOLZ + 10 +8305.74037 + 20 +11299.430389 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +58C + 8 +HOLZ + 10 +8305.74037 + 20 +11299.430389 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +58D + 8 +HOLZ + 10 +8309.073828 + 20 +11292.913922 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +58E + 8 +HOLZ + 10 +8311.384183 + 20 +11286.277152 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +58F + 8 +HOLZ + 10 +8312.691492 + 20 +11279.640384 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +590 + 8 +HOLZ + 10 +8313.015814 + 20 +11273.123922 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +591 + 8 +HOLZ + 10 +8312.377207 + 20 +11266.848069 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +592 + 8 +HOLZ + 10 +8310.795729 + 20 +11260.933129 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +593 + 8 +HOLZ + 10 +8308.291438 + 20 +11255.499407 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +594 + 8 +HOLZ + 10 +8304.884392 + 20 +11250.667205 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +595 + 8 +HOLZ + 10 +8316.011559 + 20 +11282.320483 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +596 + 8 +HOLZ + 10 +8315.155692 + 20 +11262.644112 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +597 + 8 +HOLZ + 10 +8304.884392 + 20 +11250.667205 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +598 + 8 +HOLZ + 0 +POLYLINE + 5 +599 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +59A + 8 +HOLZ + 10 +8267.223218 + 20 +11277.187553 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +59B + 8 +HOLZ + 10 +8267.223218 + 20 +11277.187553 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +59C + 8 +HOLZ + 10 +8268.597397 + 20 +11270.221623 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +59D + 8 +HOLZ + 10 +8269.550299 + 20 +11263.967492 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +59E + 8 +HOLZ + 10 +8270.142107 + 20 +11258.254729 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +59F + 8 +HOLZ + 10 +8270.433 + 20 +11252.912906 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5A0 + 8 +HOLZ + 10 +8270.483159 + 20 +11247.77159 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5A1 + 8 +HOLZ + 10 +8270.352765 + 20 +11242.660353 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5A2 + 8 +HOLZ + 10 +8270.102 + 20 +11237.408763 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5A3 + 8 +HOLZ + 10 +8269.791043 + 20 +11231.846392 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5A4 + 8 +HOLZ + 10 +8271.50289 + 20 +11257.511182 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +5A5 + 8 +HOLZ + 10 +8270.647022 + 20 +11247.245252 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +5A6 + 8 +HOLZ + 10 +8269.791043 + 20 +11231.846392 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +5A7 + 8 +HOLZ + 0 +POLYLINE + 5 +5A8 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +5A9 + 8 +HOLZ + 10 +8239.833234 + 20 +11260.933135 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +5AA + 8 +HOLZ + 10 +8239.833234 + 20 +11260.933135 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5AB + 8 +HOLZ + 10 +8239.544043 + 20 +11251.841854 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5AC + 8 +HOLZ + 10 +8239.284938 + 20 +11244.665406 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5AD + 8 +HOLZ + 10 +8239.005766 + 20 +11238.752144 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5AE + 8 +HOLZ + 10 +8238.656374 + 20 +11233.450424 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5AF + 8 +HOLZ + 10 +8238.18661 + 20 +11228.108599 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5B0 + 8 +HOLZ + 10 +8237.546322 + 20 +11222.075025 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5B1 + 8 +HOLZ + 10 +8236.685357 + 20 +11214.698055 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5B2 + 8 +HOLZ + 10 +8235.553563 + 20 +11205.326044 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5B3 + 8 +HOLZ + 10 +8238.977366 + 20 +11233.557369 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +5B4 + 8 +HOLZ + 10 +8235.553563 + 20 +11205.326044 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +5B5 + 8 +HOLZ + 0 +POLYLINE + 5 +5B6 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +5B7 + 8 +HOLZ + 10 +8200.460214 + 20 +11235.268345 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +5B8 + 8 +HOLZ + 10 +8200.460214 + 20 +11235.268345 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5B9 + 8 +HOLZ + 10 +8199.977065 + 20 +11229.233113 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5BA + 8 +HOLZ + 10 +8199.162913 + 20 +11223.398383 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5BB + 8 +HOLZ + 10 +8198.007728 + 20 +11217.884458 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5BC + 8 +HOLZ + 10 +8196.501479 + 20 +11212.811646 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5BD + 8 +HOLZ + 10 +8194.634135 + 20 +11208.300251 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5BE + 8 +HOLZ + 10 +8192.395665 + 20 +11204.470579 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5BF + 8 +HOLZ + 10 +8189.776037 + 20 +11201.442936 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5C0 + 8 +HOLZ + 10 +8186.765222 + 20 +11199.337626 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5C1 + 8 +HOLZ + 10 +8199.604235 + 20 +11219.013997 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +5C2 + 8 +HOLZ + 10 +8195.324564 + 20 +11203.615068 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +5C3 + 8 +HOLZ + 10 +8186.765222 + 20 +11199.337626 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +5C4 + 8 +HOLZ + 0 +POLYLINE + 5 +5C5 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +5C6 + 8 +HOLZ + 10 +7934.784334 + 20 +11066.123965 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +5C7 + 8 +HOLZ + 10 +7934.784334 + 20 +11066.123965 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5C8 + 8 +HOLZ + 10 +7936.370836 + 20 +11060.068685 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5C9 + 8 +HOLZ + 10 +7937.365534 + 20 +11054.093606 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5CA + 8 +HOLZ + 10 +7937.898827 + 20 +11048.198728 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5CB + 8 +HOLZ + 10 +7938.101113 + 20 +11042.38405 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5CC + 8 +HOLZ + 10 +7938.102789 + 20 +11036.64957 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5CD + 8 +HOLZ + 10 +7938.034253 + 20 +11030.995289 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5CE + 8 +HOLZ + 10 +7938.025904 + 20 +11025.421204 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5CF + 8 +HOLZ + 10 +7938.208138 + 20 +11019.927316 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5D0 + 8 +HOLZ + 10 +7939.919984 + 20 +11049.869616 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +5D1 + 8 +HOLZ + 10 +7937.352159 + 20 +11034.470757 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +5D2 + 8 +HOLZ + 10 +7938.208138 + 20 +11019.927316 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +5D3 + 8 +HOLZ + 0 +POLYLINE + 5 +5D4 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +5D5 + 8 +HOLZ + 10 +7964.742144 + 20 +11073.823429 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +5D6 + 8 +HOLZ + 10 +7964.742144 + 20 +11073.823429 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5D7 + 8 +HOLZ + 10 +7965.310531 + 20 +11068.69883 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5D8 + 8 +HOLZ + 10 +7965.758554 + 20 +11064.586786 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5D9 + 8 +HOLZ + 10 +7966.126338 + 20 +11061.056208 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5DA + 8 +HOLZ + 10 +7966.454004 + 20 +11057.676009 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5DB + 8 +HOLZ + 10 +7966.781675 + 20 +11054.015098 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5DC + 8 +HOLZ + 10 +7967.149475 + 20 +11049.642389 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5DD + 8 +HOLZ + 10 +7967.597524 + 20 +11044.126793 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5DE + 8 +HOLZ + 10 +7968.165948 + 20 +11037.037222 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5DF + 8 +HOLZ + 10 +7966.45399 + 20 +11058.42457 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +5E0 + 8 +HOLZ + 10 +7968.165948 + 20 +11037.037222 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +5E1 + 8 +HOLZ + 0 +POLYLINE + 5 +5E2 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1453 + 8 +HOLZ + 10 +7958.208885 + 20 +11086.731677 + 30 +0.0 + 0 +VERTEX + 5 +1454 + 8 +HOLZ + 10 +7984.942229 + 20 +11049.032938 + 30 +0.0 + 0 +SEQEND + 5 +1455 + 8 +HOLZ + 0 +POLYLINE + 5 +5E6 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +5E7 + 8 +HOLZ + 10 +7776.436166 + 20 +10970.308713 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +5E8 + 8 +HOLZ + 10 +7776.436166 + 20 +10970.308713 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5E9 + 8 +HOLZ + 10 +7775.953017 + 20 +10964.273481 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5EA + 8 +HOLZ + 10 +7775.138865 + 20 +10958.43875 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5EB + 8 +HOLZ + 10 +7773.98368 + 20 +10952.924826 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5EC + 8 +HOLZ + 10 +7772.477431 + 20 +10947.852014 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5ED + 8 +HOLZ + 10 +7770.610087 + 20 +10943.340619 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5EE + 8 +HOLZ + 10 +7768.371617 + 20 +10939.510947 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5EF + 8 +HOLZ + 10 +7765.751989 + 20 +10936.483303 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5F0 + 8 +HOLZ + 10 +7762.741174 + 20 +10934.377994 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5F1 + 8 +HOLZ + 10 +7775.580187 + 20 +10954.054365 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +5F2 + 8 +HOLZ + 10 +7771.300516 + 20 +10938.655436 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +5F3 + 8 +HOLZ + 10 +7762.741174 + 20 +10934.377994 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +5F4 + 8 +HOLZ + 0 +POLYLINE + 5 +5F5 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +5F6 + 8 +HOLZ + 10 +7815.809186 + 20 +10995.973503 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +5F7 + 8 +HOLZ + 10 +7815.809186 + 20 +10995.973503 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5F8 + 8 +HOLZ + 10 +7815.519995 + 20 +10986.882222 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5F9 + 8 +HOLZ + 10 +7815.26089 + 20 +10979.705773 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5FA + 8 +HOLZ + 10 +7814.981718 + 20 +10973.792512 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5FB + 8 +HOLZ + 10 +7814.632326 + 20 +10968.490792 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5FC + 8 +HOLZ + 10 +7814.162562 + 20 +10963.148967 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5FD + 8 +HOLZ + 10 +7813.522274 + 20 +10957.115393 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5FE + 8 +HOLZ + 10 +7812.661309 + 20 +10949.738423 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5FF + 8 +HOLZ + 10 +7811.529514 + 20 +10940.366412 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +600 + 8 +HOLZ + 10 +7814.953318 + 20 +10968.597737 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +601 + 8 +HOLZ + 10 +7811.529514 + 20 +10940.366412 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +602 + 8 +HOLZ + 0 +POLYLINE + 5 +603 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +604 + 8 +HOLZ + 10 +7843.19917 + 20 +11012.227921 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +605 + 8 +HOLZ + 10 +7843.19917 + 20 +11012.227921 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +606 + 8 +HOLZ + 10 +7844.573349 + 20 +11005.261991 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +607 + 8 +HOLZ + 10 +7845.526251 + 20 +10999.00786 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +608 + 8 +HOLZ + 10 +7846.118059 + 20 +10993.295097 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +609 + 8 +HOLZ + 10 +7846.408952 + 20 +10987.953273 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +60A + 8 +HOLZ + 10 +7846.459111 + 20 +10982.811958 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +60B + 8 +HOLZ + 10 +7846.328717 + 20 +10977.700721 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +60C + 8 +HOLZ + 10 +7846.077952 + 20 +10972.449131 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +60D + 8 +HOLZ + 10 +7845.766995 + 20 +10966.88676 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +60E + 8 +HOLZ + 10 +7847.478842 + 20 +10992.551549 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +60F + 8 +HOLZ + 10 +7846.622974 + 20 +10982.28562 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +610 + 8 +HOLZ + 10 +7845.766995 + 20 +10966.88676 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +611 + 8 +HOLZ + 0 +POLYLINE + 5 +612 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +613 + 8 +HOLZ + 10 +7865.453505 + 20 +11025.915804 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +614 + 8 +HOLZ + 10 +7865.453505 + 20 +11025.915804 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +615 + 8 +HOLZ + 10 +7866.147298 + 20 +11017.917273 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +616 + 8 +HOLZ + 10 +7865.868123 + 20 +11010.530287 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +617 + 8 +HOLZ + 10 +7864.926928 + 20 +11003.644567 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +618 + 8 +HOLZ + 10 +7863.634661 + 20 +10997.149834 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +619 + 8 +HOLZ + 10 +7862.302271 + 20 +10990.935808 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +61A + 8 +HOLZ + 10 +7861.240704 + 20 +10984.89221 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +61B + 8 +HOLZ + 10 +7860.760909 + 20 +10978.90876 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +61C + 8 +HOLZ + 10 +7861.173834 + 20 +10972.875178 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +61D + 8 +HOLZ + 10 +7868.877309 + 20 +11003.672967 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +61E + 8 +HOLZ + 10 +7858.606009 + 20 +10989.129596 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +61F + 8 +HOLZ + 10 +7861.173834 + 20 +10972.875178 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +620 + 8 +HOLZ + 0 +POLYLINE + 5 +621 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +622 + 8 +HOLZ + 10 +7898.835007 + 20 +11045.592175 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +623 + 8 +HOLZ + 10 +7898.835007 + 20 +11045.592175 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +624 + 8 +HOLZ + 10 +7902.991002 + 20 +11039.465025 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +625 + 8 +HOLZ + 10 +7905.923263 + 20 +11033.307804 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +626 + 8 +HOLZ + 10 +7907.77222 + 20 +11027.17064 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +627 + 8 +HOLZ + 10 +7908.678304 + 20 +11021.103656 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +628 + 8 +HOLZ + 10 +7908.781944 + 20 +11015.156978 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +629 + 8 +HOLZ + 10 +7908.22357 + 20 +11009.380732 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +62A + 8 +HOLZ + 10 +7907.143613 + 20 +11003.825043 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +62B + 8 +HOLZ + 10 +7905.682503 + 20 +10998.540037 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +62C + 8 +HOLZ + 10 +7911.674132 + 20 +11029.337757 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +62D + 8 +HOLZ + 10 +7909.962175 + 20 +11012.227921 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +62E + 8 +HOLZ + 10 +7905.682503 + 20 +10998.540037 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +62F + 8 +HOLZ + 0 +POLYLINE + 5 +630 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1456 + 8 +HOLZ + 10 +7746.196861 + 20 +10954.251861 + 30 +0.0 + 0 +VERTEX + 5 +1457 + 8 +HOLZ + 10 +7772.930205 + 20 +10916.553122 + 30 +0.0 + 0 +SEQEND + 5 +1458 + 8 +HOLZ + 0 +POLYLINE + 5 +634 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +635 + 8 +HOLZ + 10 +8162.203308 + 20 +11212.291733 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +636 + 8 +HOLZ + 10 +8162.203308 + 20 +11212.291733 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +637 + 8 +HOLZ + 10 +8163.363487 + 20 +11203.070098 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +638 + 8 +HOLZ + 10 +8164.26288 + 20 +11194.660521 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +639 + 8 +HOLZ + 10 +8164.881423 + 20 +11187.073023 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +63A + 8 +HOLZ + 10 +8165.199053 + 20 +11180.31763 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +63B + 8 +HOLZ + 10 +8165.195706 + 20 +11174.404365 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +63C + 8 +HOLZ + 10 +8164.85132 + 20 +11169.343251 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +63D + 8 +HOLZ + 10 +8164.145831 + 20 +11165.144313 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +63E + 8 +HOLZ + 10 +8163.059176 + 20 +11161.817573 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +63F + 8 +HOLZ + 10 +8165.627001 + 20 +11186.626874 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +640 + 8 +HOLZ + 10 +8166.482979 + 20 +11169.517038 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +641 + 8 +HOLZ + 10 +8163.059176 + 20 +11161.817573 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +642 + 8 +HOLZ + 0 +POLYLINE + 5 +643 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +644 + 8 +HOLZ + 10 +8126.253981 + 20 +11186.626874 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +645 + 8 +HOLZ + 10 +8126.253981 + 20 +11186.626874 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +646 + 8 +HOLZ + 10 +8130.023755 + 20 +11179.420359 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +647 + 8 +HOLZ + 10 +8132.4996 + 20 +11172.604824 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +648 + 8 +HOLZ + 10 +8133.912216 + 20 +11166.250449 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +649 + 8 +HOLZ + 10 +8134.492304 + 20 +11160.427413 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +64A + 8 +HOLZ + 10 +8134.470562 + 20 +11155.205896 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +64B + 8 +HOLZ + 10 +8134.077692 + 20 +11150.656077 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +64C + 8 +HOLZ + 10 +8133.544394 + 20 +11146.848134 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +64D + 8 +HOLZ + 10 +8133.101366 + 20 +11143.852248 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +64E + 8 +HOLZ + 10 +8138.237016 + 20 +11166.950573 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +64F + 8 +HOLZ + 10 +8133.957345 + 20 +11150.696155 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +650 + 8 +HOLZ + 10 +8133.101366 + 20 +11143.852248 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +651 + 8 +HOLZ + 0 +POLYLINE + 5 +652 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +653 + 8 +HOLZ + 10 +8093.728346 + 20 +11166.950573 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +654 + 8 +HOLZ + 10 +8093.728346 + 20 +11166.950573 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +655 + 8 +HOLZ + 10 +8097.061804 + 20 +11160.434106 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +656 + 8 +HOLZ + 10 +8099.372159 + 20 +11153.797336 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +657 + 8 +HOLZ + 10 +8100.679468 + 20 +11147.160568 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +658 + 8 +HOLZ + 10 +8101.00379 + 20 +11140.644106 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +659 + 8 +HOLZ + 10 +8100.365183 + 20 +11134.368253 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +65A + 8 +HOLZ + 10 +8098.783705 + 20 +11128.453313 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +65B + 8 +HOLZ + 10 +8096.279414 + 20 +11123.019591 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +65C + 8 +HOLZ + 10 +8092.872368 + 20 +11118.187389 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +65D + 8 +HOLZ + 10 +8103.999535 + 20 +11149.840667 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +65E + 8 +HOLZ + 10 +8103.143668 + 20 +11130.164295 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +65F + 8 +HOLZ + 10 +8092.872368 + 20 +11118.187389 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +660 + 8 +HOLZ + 0 +POLYLINE + 5 +661 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +662 + 8 +HOLZ + 10 +8055.211194 + 20 +11144.707737 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +663 + 8 +HOLZ + 10 +8055.211194 + 20 +11144.707737 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +664 + 8 +HOLZ + 10 +8056.585373 + 20 +11137.741807 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +665 + 8 +HOLZ + 10 +8057.538275 + 20 +11131.487676 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +666 + 8 +HOLZ + 10 +8058.130083 + 20 +11125.774913 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +667 + 8 +HOLZ + 10 +8058.420976 + 20 +11120.433089 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +668 + 8 +HOLZ + 10 +8058.471135 + 20 +11115.291774 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +669 + 8 +HOLZ + 10 +8058.340741 + 20 +11110.180537 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +66A + 8 +HOLZ + 10 +8058.089976 + 20 +11104.928947 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +66B + 8 +HOLZ + 10 +8057.779019 + 20 +11099.366576 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +66C + 8 +HOLZ + 10 +8059.490866 + 20 +11125.031365 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +66D + 8 +HOLZ + 10 +8058.634998 + 20 +11114.765436 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +66E + 8 +HOLZ + 10 +8057.779019 + 20 +11099.366576 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +66F + 8 +HOLZ + 0 +POLYLINE + 5 +670 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +671 + 8 +HOLZ + 10 +8027.82121 + 20 +11128.453319 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +672 + 8 +HOLZ + 10 +8027.82121 + 20 +11128.453319 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +673 + 8 +HOLZ + 10 +8027.532019 + 20 +11119.362038 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +674 + 8 +HOLZ + 10 +8027.272914 + 20 +11112.18559 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +675 + 8 +HOLZ + 10 +8026.993742 + 20 +11106.272328 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +676 + 8 +HOLZ + 10 +8026.64435 + 20 +11100.970608 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +677 + 8 +HOLZ + 10 +8026.174586 + 20 +11095.628783 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +678 + 8 +HOLZ + 10 +8025.534298 + 20 +11089.595209 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +679 + 8 +HOLZ + 10 +8024.673333 + 20 +11082.218239 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +67A + 8 +HOLZ + 10 +8023.541538 + 20 +11072.846228 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +67B + 8 +HOLZ + 10 +8026.965342 + 20 +11101.077553 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +67C + 8 +HOLZ + 10 +8023.541538 + 20 +11072.846228 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +67D + 8 +HOLZ + 0 +POLYLINE + 5 +67E + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +67F + 8 +HOLZ + 10 +7988.44819 + 20 +11102.788529 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +680 + 8 +HOLZ + 10 +7988.44819 + 20 +11102.788529 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +681 + 8 +HOLZ + 10 +7987.965041 + 20 +11096.753297 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +682 + 8 +HOLZ + 10 +7987.150889 + 20 +11090.918567 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +683 + 8 +HOLZ + 10 +7985.995704 + 20 +11085.404642 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +684 + 8 +HOLZ + 10 +7984.489455 + 20 +11080.33183 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +685 + 8 +HOLZ + 10 +7982.622111 + 20 +11075.820435 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +686 + 8 +HOLZ + 10 +7980.383641 + 20 +11071.990763 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +687 + 8 +HOLZ + 10 +7977.764013 + 20 +11068.963119 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +688 + 8 +HOLZ + 10 +7974.753198 + 20 +11066.85781 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +689 + 8 +HOLZ + 10 +7987.592211 + 20 +11086.534181 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +68A + 8 +HOLZ + 10 +7983.31254 + 20 +11071.135252 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +68B + 8 +HOLZ + 10 +7974.753198 + 20 +11066.85781 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +68C + 8 +HOLZ + 0 +POLYLINE + 5 +68D + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +68E + 8 +HOLZ + 10 +7510.760286 + 20 +10801.164332 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +68F + 8 +HOLZ + 10 +7510.760286 + 20 +10801.164332 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +690 + 8 +HOLZ + 10 +7512.346787 + 20 +10795.109053 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +691 + 8 +HOLZ + 10 +7513.341486 + 20 +10789.133974 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +692 + 8 +HOLZ + 10 +7513.874779 + 20 +10783.239096 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +693 + 8 +HOLZ + 10 +7514.077065 + 20 +10777.424418 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +694 + 8 +HOLZ + 10 +7514.078741 + 20 +10771.689938 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +695 + 8 +HOLZ + 10 +7514.010205 + 20 +10766.035656 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +696 + 8 +HOLZ + 10 +7514.001856 + 20 +10760.461572 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +697 + 8 +HOLZ + 10 +7514.18409 + 20 +10754.967683 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +698 + 8 +HOLZ + 10 +7515.895936 + 20 +10784.909984 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +699 + 8 +HOLZ + 10 +7513.328111 + 20 +10769.511125 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +69A + 8 +HOLZ + 10 +7514.18409 + 20 +10754.967683 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +69B + 8 +HOLZ + 0 +POLYLINE + 5 +69C + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +69D + 8 +HOLZ + 10 +7540.718096 + 20 +10808.863797 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +69E + 8 +HOLZ + 10 +7540.718096 + 20 +10808.863797 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +69F + 8 +HOLZ + 10 +7541.286482 + 20 +10803.739198 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6A0 + 8 +HOLZ + 10 +7541.734506 + 20 +10799.627154 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6A1 + 8 +HOLZ + 10 +7542.10229 + 20 +10796.096576 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6A2 + 8 +HOLZ + 10 +7542.429956 + 20 +10792.716376 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6A3 + 8 +HOLZ + 10 +7542.757627 + 20 +10789.055466 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6A4 + 8 +HOLZ + 10 +7543.125426 + 20 +10784.682757 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6A5 + 8 +HOLZ + 10 +7543.573476 + 20 +10779.167161 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6A6 + 8 +HOLZ + 10 +7544.141899 + 20 +10772.07759 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6A7 + 8 +HOLZ + 10 +7542.429942 + 20 +10793.464937 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +6A8 + 8 +HOLZ + 10 +7544.141899 + 20 +10772.07759 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +6A9 + 8 +HOLZ + 0 +POLYLINE + 5 +6AA + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1459 + 8 +HOLZ + 10 +7534.184837 + 20 +10821.772045 + 30 +0.0 + 0 +VERTEX + 5 +145A + 8 +HOLZ + 10 +7560.918181 + 20 +10784.073306 + 30 +0.0 + 0 +SEQEND + 5 +145B + 8 +HOLZ + 0 +POLYLINE + 5 +6AE + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +6AF + 8 +HOLZ + 10 +6948.930558 + 20 +10452.366355 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +6B0 + 8 +HOLZ + 10 +6948.930558 + 20 +10452.366355 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6B1 + 8 +HOLZ + 10 +6948.84028 + 20 +10444.610101 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6B2 + 8 +HOLZ + 10 +6948.529325 + 20 +10437.315014 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6B3 + 8 +HOLZ + 10 +6947.937513 + 20 +10430.380839 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6B4 + 8 +HOLZ + 10 +6947.004662 + 20 +10423.707322 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6B5 + 8 +HOLZ + 10 +6945.670592 + 20 +10417.194209 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6B6 + 8 +HOLZ + 10 +6943.875122 + 20 +10410.741246 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6B7 + 8 +HOLZ + 10 +6941.558071 + 20 +10404.248179 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6B8 + 8 +HOLZ + 10 +6938.659259 + 20 +10397.614753 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6B9 + 8 +HOLZ + 10 +6948.930558 + 20 +10430.979008 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +6BA + 8 +HOLZ + 10 +6947.218601 + 20 +10415.580148 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +6BB + 8 +HOLZ + 10 +6938.659259 + 20 +10397.614753 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +6BC + 8 +HOLZ + 0 +POLYLINE + 5 +6BD + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +145C + 8 +HOLZ + 10 +6898.148764 + 20 +10424.332597 + 30 +0.0 + 0 +VERTEX + 5 +145D + 8 +HOLZ + 10 +6924.882109 + 20 +10386.633858 + 30 +0.0 + 0 +SEQEND + 5 +145E + 8 +HOLZ + 0 +POLYLINE + 5 +6C1 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +6C2 + 8 +HOLZ + 10 +6980.600214 + 20 +10472.898215 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +6C3 + 8 +HOLZ + 10 +6980.600214 + 20 +10472.898215 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6C4 + 8 +HOLZ + 10 +6984.256331 + 20 +10462.699121 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6C5 + 8 +HOLZ + 10 +6986.899366 + 20 +10454.825902 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6C6 + 8 +HOLZ + 10 +6988.559411 + 20 +10448.717141 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6C7 + 8 +HOLZ + 10 +6989.266554 + 20 +10443.81142 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6C8 + 8 +HOLZ + 10 +6989.050887 + 20 +10439.547322 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6C9 + 8 +HOLZ + 10 +6987.9425 + 20 +10435.363429 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6CA + 8 +HOLZ + 10 +6985.971484 + 20 +10430.698324 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6CB + 8 +HOLZ + 10 +6983.167928 + 20 +10424.990589 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6CC + 8 +HOLZ + 10 +6991.727382 + 20 +10442.100426 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +6CD + 8 +HOLZ + 10 +6983.167928 + 20 +10424.990589 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +6CE + 8 +HOLZ + 0 +POLYLINE + 5 +6CF + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +6D0 + 8 +HOLZ + 10 +7140.400094 + 20 +10572.869265 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +6D1 + 8 +HOLZ + 10 +7140.400094 + 20 +10572.869265 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6D2 + 8 +HOLZ + 10 +7139.916945 + 20 +10566.834033 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6D3 + 8 +HOLZ + 10 +7139.102793 + 20 +10560.999302 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6D4 + 8 +HOLZ + 10 +7137.947608 + 20 +10555.485378 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6D5 + 8 +HOLZ + 10 +7136.441359 + 20 +10550.412566 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6D6 + 8 +HOLZ + 10 +7134.574015 + 20 +10545.901171 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6D7 + 8 +HOLZ + 10 +7132.335545 + 20 +10542.071499 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6D8 + 8 +HOLZ + 10 +7129.715917 + 20 +10539.043855 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6D9 + 8 +HOLZ + 10 +7126.705102 + 20 +10536.938546 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6DA + 8 +HOLZ + 10 +7139.544115 + 20 +10556.614917 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +6DB + 8 +HOLZ + 10 +7135.264444 + 20 +10541.215988 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +6DC + 8 +HOLZ + 10 +7126.705102 + 20 +10536.938546 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +6DD + 8 +HOLZ + 0 +POLYLINE + 5 +6DE + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +6DF + 8 +HOLZ + 10 +7160.942582 + 20 +10584.846171 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +6E0 + 8 +HOLZ + 10 +7160.942582 + 20 +10584.846171 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6E1 + 8 +HOLZ + 10 +7160.852304 + 20 +10577.089917 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6E2 + 8 +HOLZ + 10 +7160.541349 + 20 +10569.79483 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6E3 + 8 +HOLZ + 10 +7159.949537 + 20 +10562.860655 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6E4 + 8 +HOLZ + 10 +7159.016686 + 20 +10556.187138 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6E5 + 8 +HOLZ + 10 +7157.682616 + 20 +10549.674025 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6E6 + 8 +HOLZ + 10 +7155.887146 + 20 +10543.221062 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6E7 + 8 +HOLZ + 10 +7153.570095 + 20 +10536.727995 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6E8 + 8 +HOLZ + 10 +7150.671283 + 20 +10530.094569 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6E9 + 8 +HOLZ + 10 +7160.942582 + 20 +10563.458824 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +6EA + 8 +HOLZ + 10 +7159.230625 + 20 +10548.059964 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +6EB + 8 +HOLZ + 10 +7150.671283 + 20 +10530.094569 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +6EC + 8 +HOLZ + 0 +POLYLINE + 5 +6ED + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +6EE + 8 +HOLZ + 10 +7192.612238 + 20 +10605.378031 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +6EF + 8 +HOLZ + 10 +7192.612238 + 20 +10605.378031 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6F0 + 8 +HOLZ + 10 +7196.268355 + 20 +10595.178937 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6F1 + 8 +HOLZ + 10 +7198.911391 + 20 +10587.305718 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6F2 + 8 +HOLZ + 10 +7200.571435 + 20 +10581.196957 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6F3 + 8 +HOLZ + 10 +7201.278578 + 20 +10576.291236 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6F4 + 8 +HOLZ + 10 +7201.062911 + 20 +10572.027138 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6F5 + 8 +HOLZ + 10 +7199.954524 + 20 +10567.843245 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6F6 + 8 +HOLZ + 10 +7197.983508 + 20 +10563.17814 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6F7 + 8 +HOLZ + 10 +7195.179952 + 20 +10557.470405 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6F8 + 8 +HOLZ + 10 +7203.739406 + 20 +10574.580242 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +6F9 + 8 +HOLZ + 10 +7195.179952 + 20 +10557.470405 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +6FA + 8 +HOLZ + 0 +POLYLINE + 5 +6FB + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +6FC + 8 +HOLZ + 10 +7229.417433 + 20 +10628.476355 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +6FD + 8 +HOLZ + 10 +7229.417433 + 20 +10628.476355 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6FE + 8 +HOLZ + 10 +7230.111226 + 20 +10620.477824 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6FF + 8 +HOLZ + 10 +7229.832051 + 20 +10613.090839 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +700 + 8 +HOLZ + 10 +7228.890856 + 20 +10606.205119 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +701 + 8 +HOLZ + 10 +7227.598589 + 20 +10599.710386 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +702 + 8 +HOLZ + 10 +7226.266198 + 20 +10593.49636 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +703 + 8 +HOLZ + 10 +7225.204632 + 20 +10587.452761 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +704 + 8 +HOLZ + 10 +7224.724837 + 20 +10581.469311 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +705 + 8 +HOLZ + 10 +7225.137762 + 20 +10575.43573 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +706 + 8 +HOLZ + 10 +7232.841237 + 20 +10606.233519 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +707 + 8 +HOLZ + 10 +7222.569937 + 20 +10591.690148 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +708 + 8 +HOLZ + 10 +7225.137762 + 20 +10575.43573 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +709 + 8 +HOLZ + 0 +POLYLINE + 5 +70A + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +70B + 8 +HOLZ + 10 +7050.786911 + 20 +10515.672911 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +70C + 8 +HOLZ + 10 +7050.786911 + 20 +10515.672911 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +70D + 8 +HOLZ + 10 +7054.942906 + 20 +10509.54576 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +70E + 8 +HOLZ + 10 +7057.875167 + 20 +10503.38854 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +70F + 8 +HOLZ + 10 +7059.724124 + 20 +10497.251375 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +710 + 8 +HOLZ + 10 +7060.630208 + 20 +10491.184391 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +711 + 8 +HOLZ + 10 +7060.733848 + 20 +10485.237714 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +712 + 8 +HOLZ + 10 +7060.175474 + 20 +10479.461468 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +713 + 8 +HOLZ + 10 +7059.095517 + 20 +10473.905779 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +714 + 8 +HOLZ + 10 +7057.634407 + 20 +10468.620773 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +715 + 8 +HOLZ + 10 +7063.626036 + 20 +10499.418493 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +716 + 8 +HOLZ + 10 +7061.914078 + 20 +10482.308656 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +717 + 8 +HOLZ + 10 +7057.634407 + 20 +10468.620773 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +718 + 8 +HOLZ + 0 +POLYLINE + 5 +719 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +71A + 8 +HOLZ + 10 +7017.405409 + 20 +10495.996539 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +71B + 8 +HOLZ + 10 +7017.405409 + 20 +10495.996539 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +71C + 8 +HOLZ + 10 +7018.099202 + 20 +10487.998008 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +71D + 8 +HOLZ + 10 +7017.820027 + 20 +10480.611023 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +71E + 8 +HOLZ + 10 +7016.878832 + 20 +10473.725303 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +71F + 8 +HOLZ + 10 +7015.586565 + 20 +10467.23057 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +720 + 8 +HOLZ + 10 +7014.254174 + 20 +10461.016544 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +721 + 8 +HOLZ + 10 +7013.192608 + 20 +10454.972945 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +722 + 8 +HOLZ + 10 +7012.712813 + 20 +10448.989495 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +723 + 8 +HOLZ + 10 +7013.125738 + 20 +10442.955914 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +724 + 8 +HOLZ + 10 +7020.829213 + 20 +10473.753703 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +725 + 8 +HOLZ + 10 +7010.557913 + 20 +10459.210332 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +726 + 8 +HOLZ + 10 +7013.125738 + 20 +10442.955914 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +727 + 8 +HOLZ + 0 +POLYLINE + 5 +728 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +145F + 8 +HOLZ + 10 +7110.160788 + 20 +10556.812413 + 30 +0.0 + 0 +VERTEX + 5 +1460 + 8 +HOLZ + 10 +7136.894133 + 20 +10519.113674 + 30 +0.0 + 0 +SEQEND + 5 +1461 + 8 +HOLZ + 0 +POLYLINE + 5 +72C + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +72D + 8 +HOLZ + 10 +7116.694048 + 20 +10543.904165 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +72E + 8 +HOLZ + 10 +7116.694048 + 20 +10543.904165 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +72F + 8 +HOLZ + 10 +7117.262434 + 20 +10538.779566 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +730 + 8 +HOLZ + 10 +7117.710458 + 20 +10534.667522 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +731 + 8 +HOLZ + 10 +7118.078242 + 20 +10531.136944 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +732 + 8 +HOLZ + 10 +7118.405908 + 20 +10527.756744 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +733 + 8 +HOLZ + 10 +7118.733579 + 20 +10524.095834 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +734 + 8 +HOLZ + 10 +7119.101378 + 20 +10519.723125 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +735 + 8 +HOLZ + 10 +7119.549428 + 20 +10514.207529 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +736 + 8 +HOLZ + 10 +7120.117851 + 20 +10507.117957 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +737 + 8 +HOLZ + 10 +7118.405894 + 20 +10528.505305 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +738 + 8 +HOLZ + 10 +7120.117851 + 20 +10507.117957 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +739 + 8 +HOLZ + 0 +POLYLINE + 5 +73A + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +73B + 8 +HOLZ + 10 +7086.736238 + 20 +10536.2047 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +73C + 8 +HOLZ + 10 +7086.736238 + 20 +10536.2047 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +73D + 8 +HOLZ + 10 +7088.322739 + 20 +10530.149421 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +73E + 8 +HOLZ + 10 +7089.317438 + 20 +10524.174342 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +73F + 8 +HOLZ + 10 +7089.850731 + 20 +10518.279464 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +740 + 8 +HOLZ + 10 +7090.053017 + 20 +10512.464786 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +741 + 8 +HOLZ + 10 +7090.054693 + 20 +10506.730306 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +742 + 8 +HOLZ + 10 +7089.986157 + 20 +10501.076024 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +743 + 8 +HOLZ + 10 +7089.977808 + 20 +10495.50194 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +744 + 8 +HOLZ + 10 +7090.160042 + 20 +10490.008051 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +745 + 8 +HOLZ + 10 +7091.871888 + 20 +10519.950352 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +746 + 8 +HOLZ + 10 +7089.304063 + 20 +10504.551492 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +747 + 8 +HOLZ + 10 +7090.160042 + 20 +10490.008051 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +748 + 8 +HOLZ + 0 +POLYLINE + 5 +749 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +74A + 8 +HOLZ + 10 +7262.798935 + 20 +10648.152727 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +74B + 8 +HOLZ + 10 +7262.798935 + 20 +10648.152727 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +74C + 8 +HOLZ + 10 +7266.95493 + 20 +10642.025576 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +74D + 8 +HOLZ + 10 +7269.887191 + 20 +10635.868356 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +74E + 8 +HOLZ + 10 +7271.736148 + 20 +10629.731191 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +74F + 8 +HOLZ + 10 +7272.642232 + 20 +10623.664207 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +750 + 8 +HOLZ + 10 +7272.745872 + 20 +10617.71753 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +751 + 8 +HOLZ + 10 +7272.187498 + 20 +10611.941284 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +752 + 8 +HOLZ + 10 +7271.107541 + 20 +10606.385595 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +753 + 8 +HOLZ + 10 +7269.646431 + 20 +10601.100589 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +754 + 8 +HOLZ + 10 +7275.63806 + 20 +10631.898309 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +755 + 8 +HOLZ + 10 +7273.926102 + 20 +10614.788472 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +756 + 8 +HOLZ + 10 +7269.646431 + 20 +10601.100589 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +757 + 8 +HOLZ + 0 +POLYLINE + 5 +758 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +759 + 8 +HOLZ + 10 +7298.748262 + 20 +10668.684516 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +75A + 8 +HOLZ + 10 +7298.748262 + 20 +10668.684516 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +75B + 8 +HOLZ + 10 +7300.334763 + 20 +10662.629237 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +75C + 8 +HOLZ + 10 +7301.329462 + 20 +10656.654158 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +75D + 8 +HOLZ + 10 +7301.862755 + 20 +10650.75928 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +75E + 8 +HOLZ + 10 +7302.065041 + 20 +10644.944602 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +75F + 8 +HOLZ + 10 +7302.066717 + 20 +10639.210122 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +760 + 8 +HOLZ + 10 +7301.998181 + 20 +10633.55584 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +761 + 8 +HOLZ + 10 +7301.989832 + 20 +10627.981756 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +762 + 8 +HOLZ + 10 +7302.172066 + 20 +10622.487867 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +763 + 8 +HOLZ + 10 +7303.883912 + 20 +10652.430168 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +764 + 8 +HOLZ + 10 +7301.316087 + 20 +10637.031309 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +765 + 8 +HOLZ + 10 +7302.172066 + 20 +10622.487867 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +766 + 8 +HOLZ + 0 +POLYLINE + 5 +767 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +768 + 8 +HOLZ + 10 +7328.706072 + 20 +10676.383981 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +769 + 8 +HOLZ + 10 +7328.706072 + 20 +10676.383981 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +76A + 8 +HOLZ + 10 +7329.274458 + 20 +10671.259382 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +76B + 8 +HOLZ + 10 +7329.722482 + 20 +10667.147338 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +76C + 8 +HOLZ + 10 +7330.090266 + 20 +10663.61676 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +76D + 8 +HOLZ + 10 +7330.417932 + 20 +10660.23656 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +76E + 8 +HOLZ + 10 +7330.745603 + 20 +10656.57565 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +76F + 8 +HOLZ + 10 +7331.113402 + 20 +10652.202941 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +770 + 8 +HOLZ + 10 +7331.561452 + 20 +10646.687345 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +771 + 8 +HOLZ + 10 +7332.129875 + 20 +10639.597774 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +772 + 8 +HOLZ + 10 +7330.417918 + 20 +10660.985121 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +773 + 8 +HOLZ + 10 +7332.129875 + 20 +10639.597774 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +774 + 8 +HOLZ + 0 +POLYLINE + 5 +775 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +776 + 8 +HOLZ + 10 +7372.954607 + 20 +10717.325988 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +777 + 8 +HOLZ + 10 +7372.954607 + 20 +10717.325988 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +778 + 8 +HOLZ + 10 +7372.864328 + 20 +10709.569733 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +779 + 8 +HOLZ + 10 +7372.553373 + 20 +10702.274646 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +77A + 8 +HOLZ + 10 +7371.961561 + 20 +10695.340471 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +77B + 8 +HOLZ + 10 +7371.02871 + 20 +10688.666954 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +77C + 8 +HOLZ + 10 +7369.69464 + 20 +10682.153841 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +77D + 8 +HOLZ + 10 +7367.89917 + 20 +10675.700878 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +77E + 8 +HOLZ + 10 +7365.582119 + 20 +10669.207811 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +77F + 8 +HOLZ + 10 +7362.683307 + 20 +10662.574385 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +780 + 8 +HOLZ + 10 +7372.954607 + 20 +10695.93864 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +781 + 8 +HOLZ + 10 +7371.242649 + 20 +10680.53978 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +782 + 8 +HOLZ + 10 +7362.683307 + 20 +10662.574385 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +783 + 8 +HOLZ + 0 +POLYLINE + 5 +784 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +785 + 8 +HOLZ + 10 +7404.624262 + 20 +10737.857847 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +786 + 8 +HOLZ + 10 +7404.624262 + 20 +10737.857847 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +787 + 8 +HOLZ + 10 +7408.280379 + 20 +10727.658753 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +788 + 8 +HOLZ + 10 +7410.923415 + 20 +10719.785534 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +789 + 8 +HOLZ + 10 +7412.583459 + 20 +10713.676773 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +78A + 8 +HOLZ + 10 +7413.290602 + 20 +10708.771052 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +78B + 8 +HOLZ + 10 +7413.074935 + 20 +10704.506954 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +78C + 8 +HOLZ + 10 +7411.966548 + 20 +10700.323061 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +78D + 8 +HOLZ + 10 +7409.995532 + 20 +10695.657956 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +78E + 8 +HOLZ + 10 +7407.191976 + 20 +10689.950221 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +78F + 8 +HOLZ + 10 +7415.75143 + 20 +10707.060058 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +790 + 8 +HOLZ + 10 +7407.191976 + 20 +10689.950221 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +791 + 8 +HOLZ + 0 +POLYLINE + 5 +792 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +793 + 8 +HOLZ + 10 +7441.429457 + 20 +10760.956172 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +794 + 8 +HOLZ + 10 +7441.429457 + 20 +10760.956172 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +795 + 8 +HOLZ + 10 +7442.12325 + 20 +10752.95764 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +796 + 8 +HOLZ + 10 +7441.844075 + 20 +10745.570655 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +797 + 8 +HOLZ + 10 +7440.90288 + 20 +10738.684935 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +798 + 8 +HOLZ + 10 +7439.610613 + 20 +10732.190202 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +799 + 8 +HOLZ + 10 +7438.278223 + 20 +10725.976176 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +79A + 8 +HOLZ + 10 +7437.216656 + 20 +10719.932578 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +79B + 8 +HOLZ + 10 +7436.736861 + 20 +10713.949127 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +79C + 8 +HOLZ + 10 +7437.149786 + 20 +10707.915546 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +79D + 8 +HOLZ + 10 +7444.853261 + 20 +10738.713335 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +79E + 8 +HOLZ + 10 +7434.581961 + 20 +10724.169964 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +79F + 8 +HOLZ + 10 +7437.149786 + 20 +10707.915546 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +7A0 + 8 +HOLZ + 0 +POLYLINE + 5 +7A1 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +7A2 + 8 +HOLZ + 10 +7474.810959 + 20 +10780.632543 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +7A3 + 8 +HOLZ + 10 +7474.810959 + 20 +10780.632543 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7A4 + 8 +HOLZ + 10 +7478.966954 + 20 +10774.505392 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7A5 + 8 +HOLZ + 10 +7481.899215 + 20 +10768.348172 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7A6 + 8 +HOLZ + 10 +7483.748172 + 20 +10762.211007 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7A7 + 8 +HOLZ + 10 +7484.654256 + 20 +10756.144023 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7A8 + 8 +HOLZ + 10 +7484.757896 + 20 +10750.197346 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7A9 + 8 +HOLZ + 10 +7484.199522 + 20 +10744.4211 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7AA + 8 +HOLZ + 10 +7483.119565 + 20 +10738.865411 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7AB + 8 +HOLZ + 10 +7481.658455 + 20 +10733.580405 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7AC + 8 +HOLZ + 10 +7487.650084 + 20 +10764.378125 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +7AD + 8 +HOLZ + 10 +7485.938126 + 20 +10747.268288 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +7AE + 8 +HOLZ + 10 +7481.658455 + 20 +10733.580405 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +7AF + 8 +HOLZ + 0 +POLYLINE + 5 +7B0 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1462 + 8 +HOLZ + 10 +7322.172813 + 20 +10689.292229 + 30 +0.0 + 0 +VERTEX + 5 +1463 + 8 +HOLZ + 10 +7348.906157 + 20 +10651.59349 + 30 +0.0 + 0 +SEQEND + 5 +1464 + 8 +HOLZ + 0 +POLYLINE + 5 +7B4 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +7B5 + 8 +HOLZ + 10 +7752.73012 + 20 +10941.343613 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +7B6 + 8 +HOLZ + 10 +7752.73012 + 20 +10941.343613 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7B7 + 8 +HOLZ + 10 +7753.298506 + 20 +10936.219014 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7B8 + 8 +HOLZ + 10 +7753.74653 + 20 +10932.10697 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7B9 + 8 +HOLZ + 10 +7754.114314 + 20 +10928.576392 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7BA + 8 +HOLZ + 10 +7754.44198 + 20 +10925.196192 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7BB + 8 +HOLZ + 10 +7754.769651 + 20 +10921.535282 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7BC + 8 +HOLZ + 10 +7755.137451 + 20 +10917.162573 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7BD + 8 +HOLZ + 10 +7755.5855 + 20 +10911.646977 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7BE + 8 +HOLZ + 10 +7756.153924 + 20 +10904.557406 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7BF + 8 +HOLZ + 10 +7754.441966 + 20 +10925.944753 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +7C0 + 8 +HOLZ + 10 +7756.153924 + 20 +10904.557406 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +7C1 + 8 +HOLZ + 0 +POLYLINE + 5 +7C2 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +7C3 + 8 +HOLZ + 10 +7722.77231 + 20 +10933.644149 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +7C4 + 8 +HOLZ + 10 +7722.77231 + 20 +10933.644149 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7C5 + 8 +HOLZ + 10 +7724.358811 + 20 +10927.588869 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7C6 + 8 +HOLZ + 10 +7725.35351 + 20 +10921.61379 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7C7 + 8 +HOLZ + 10 +7725.886803 + 20 +10915.718912 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7C8 + 8 +HOLZ + 10 +7726.089089 + 20 +10909.904234 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7C9 + 8 +HOLZ + 10 +7726.090765 + 20 +10904.169754 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7CA + 8 +HOLZ + 10 +7726.022229 + 20 +10898.515472 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7CB + 8 +HOLZ + 10 +7726.01388 + 20 +10892.941388 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7CC + 8 +HOLZ + 10 +7726.196114 + 20 +10887.4475 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7CD + 8 +HOLZ + 10 +7727.90796 + 20 +10917.3898 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +7CE + 8 +HOLZ + 10 +7725.340135 + 20 +10901.990941 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +7CF + 8 +HOLZ + 10 +7726.196114 + 20 +10887.4475 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +7D0 + 8 +HOLZ + 0 +POLYLINE + 5 +7D1 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +7D2 + 8 +HOLZ + 10 +7686.822983 + 20 +10913.112359 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +7D3 + 8 +HOLZ + 10 +7686.822983 + 20 +10913.112359 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7D4 + 8 +HOLZ + 10 +7690.978978 + 20 +10906.985209 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7D5 + 8 +HOLZ + 10 +7693.911239 + 20 +10900.827988 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7D6 + 8 +HOLZ + 10 +7695.760196 + 20 +10894.690823 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7D7 + 8 +HOLZ + 10 +7696.66628 + 20 +10888.62384 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7D8 + 8 +HOLZ + 10 +7696.76992 + 20 +10882.677162 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7D9 + 8 +HOLZ + 10 +7696.211546 + 20 +10876.900916 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7DA + 8 +HOLZ + 10 +7695.131589 + 20 +10871.345227 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7DB + 8 +HOLZ + 10 +7693.670479 + 20 +10866.060221 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7DC + 8 +HOLZ + 10 +7699.662108 + 20 +10896.857941 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +7DD + 8 +HOLZ + 10 +7697.95015 + 20 +10879.748104 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +7DE + 8 +HOLZ + 10 +7693.670479 + 20 +10866.060221 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +7DF + 8 +HOLZ + 0 +POLYLINE + 5 +7E0 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +7E1 + 8 +HOLZ + 10 +7653.441481 + 20 +10893.435988 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +7E2 + 8 +HOLZ + 10 +7653.441481 + 20 +10893.435988 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7E3 + 8 +HOLZ + 10 +7654.135274 + 20 +10885.437457 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7E4 + 8 +HOLZ + 10 +7653.856099 + 20 +10878.050471 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7E5 + 8 +HOLZ + 10 +7652.914904 + 20 +10871.164751 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7E6 + 8 +HOLZ + 10 +7651.622637 + 20 +10864.670018 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7E7 + 8 +HOLZ + 10 +7650.290247 + 20 +10858.455992 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7E8 + 8 +HOLZ + 10 +7649.22868 + 20 +10852.412394 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7E9 + 8 +HOLZ + 10 +7648.748885 + 20 +10846.428943 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7EA + 8 +HOLZ + 10 +7649.16181 + 20 +10840.395362 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7EB + 8 +HOLZ + 10 +7656.865285 + 20 +10871.193151 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +7EC + 8 +HOLZ + 10 +7646.593985 + 20 +10856.64978 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +7ED + 8 +HOLZ + 10 +7649.16181 + 20 +10840.395362 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +7EE + 8 +HOLZ + 0 +POLYLINE + 5 +7EF + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +7F0 + 8 +HOLZ + 10 +7616.636286 + 20 +10870.337663 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +7F1 + 8 +HOLZ + 10 +7616.636286 + 20 +10870.337663 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7F2 + 8 +HOLZ + 10 +7620.292403 + 20 +10860.138569 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7F3 + 8 +HOLZ + 10 +7622.935439 + 20 +10852.26535 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7F4 + 8 +HOLZ + 10 +7624.595483 + 20 +10846.156589 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7F5 + 8 +HOLZ + 10 +7625.302626 + 20 +10841.250868 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7F6 + 8 +HOLZ + 10 +7625.086959 + 20 +10836.98677 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7F7 + 8 +HOLZ + 10 +7623.978572 + 20 +10832.802877 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7F8 + 8 +HOLZ + 10 +7622.007556 + 20 +10828.137772 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7F9 + 8 +HOLZ + 10 +7619.204 + 20 +10822.430037 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7FA + 8 +HOLZ + 10 +7627.763454 + 20 +10839.539874 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +7FB + 8 +HOLZ + 10 +7619.204 + 20 +10822.430037 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +7FC + 8 +HOLZ + 0 +POLYLINE + 5 +7FD + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +7FE + 8 +HOLZ + 10 +7584.966631 + 20 +10849.805804 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +7FF + 8 +HOLZ + 10 +7584.966631 + 20 +10849.805804 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +800 + 8 +HOLZ + 10 +7584.876352 + 20 +10842.04955 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +801 + 8 +HOLZ + 10 +7584.565397 + 20 +10834.754462 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +802 + 8 +HOLZ + 10 +7583.973585 + 20 +10827.820287 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +803 + 8 +HOLZ + 10 +7583.040734 + 20 +10821.14677 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +804 + 8 +HOLZ + 10 +7581.706664 + 20 +10814.633657 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +805 + 8 +HOLZ + 10 +7579.911194 + 20 +10808.180694 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +806 + 8 +HOLZ + 10 +7577.594143 + 20 +10801.687627 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +807 + 8 +HOLZ + 10 +7574.695331 + 20 +10795.054202 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +808 + 8 +HOLZ + 10 +7584.966631 + 20 +10828.418456 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +809 + 8 +HOLZ + 10 +7583.254673 + 20 +10813.019596 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +80A + 8 +HOLZ + 10 +7574.695331 + 20 +10795.054202 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +80B + 8 +HOLZ + 0 +POLYLINE + 5 +80C + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1465 + 8 +HOLZ + 10 +6474.124716 + 20 +10159.372965 + 30 +0.0 + 0 +VERTEX + 5 +1466 + 8 +HOLZ + 10 +6500.858061 + 20 +10121.674226 + 30 +0.0 + 0 +SEQEND + 5 +1467 + 8 +HOLZ + 0 +POLYLINE + 5 +810 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +811 + 8 +HOLZ + 10 +6504.364022 + 20 +10175.429817 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +812 + 8 +HOLZ + 10 +6504.364022 + 20 +10175.429817 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +813 + 8 +HOLZ + 10 +6503.880872 + 20 +10169.394585 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +814 + 8 +HOLZ + 10 +6503.066721 + 20 +10163.559854 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +815 + 8 +HOLZ + 10 +6501.911536 + 20 +10158.04593 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +816 + 8 +HOLZ + 10 +6500.405287 + 20 +10152.973117 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +817 + 8 +HOLZ + 10 +6498.537943 + 20 +10148.461722 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +818 + 8 +HOLZ + 10 +6496.299473 + 20 +10144.632051 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +819 + 8 +HOLZ + 10 +6493.679845 + 20 +10141.604407 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +81A + 8 +HOLZ + 10 +6490.66903 + 20 +10139.499098 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +81B + 8 +HOLZ + 10 +6503.508043 + 20 +10159.175469 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +81C + 8 +HOLZ + 10 +6499.228372 + 20 +10143.776539 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +81D + 8 +HOLZ + 10 +6490.66903 + 20 +10139.499098 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +81E + 8 +HOLZ + 0 +POLYLINE + 5 +81F + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +820 + 8 +HOLZ + 10 +6662.71219 + 20 +10271.245068 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +821 + 8 +HOLZ + 10 +6662.71219 + 20 +10271.245068 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +822 + 8 +HOLZ + 10 +6664.298691 + 20 +10265.189789 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +823 + 8 +HOLZ + 10 +6665.29339 + 20 +10259.21471 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +824 + 8 +HOLZ + 10 +6665.826683 + 20 +10253.319832 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +825 + 8 +HOLZ + 10 +6666.028969 + 20 +10247.505154 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +826 + 8 +HOLZ + 10 +6666.030645 + 20 +10241.770674 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +827 + 8 +HOLZ + 10 +6665.962109 + 20 +10236.116392 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +828 + 8 +HOLZ + 10 +6665.953759 + 20 +10230.542308 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +829 + 8 +HOLZ + 10 +6666.135994 + 20 +10225.048419 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +82A + 8 +HOLZ + 10 +6667.84784 + 20 +10254.99072 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +82B + 8 +HOLZ + 10 +6665.280015 + 20 +10239.59186 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +82C + 8 +HOLZ + 10 +6666.135994 + 20 +10225.048419 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +82D + 8 +HOLZ + 0 +POLYLINE + 5 +82E + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +82F + 8 +HOLZ + 10 +6692.67 + 20 +10278.944533 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +830 + 8 +HOLZ + 10 +6692.67 + 20 +10278.944533 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +831 + 8 +HOLZ + 10 +6693.238386 + 20 +10273.819934 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +832 + 8 +HOLZ + 10 +6693.68641 + 20 +10269.70789 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +833 + 8 +HOLZ + 10 +6694.054194 + 20 +10266.177312 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +834 + 8 +HOLZ + 10 +6694.38186 + 20 +10262.797112 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +835 + 8 +HOLZ + 10 +6694.709531 + 20 +10259.136202 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +836 + 8 +HOLZ + 10 +6695.07733 + 20 +10254.763493 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +837 + 8 +HOLZ + 10 +6695.52538 + 20 +10249.247897 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +838 + 8 +HOLZ + 10 +6696.093803 + 20 +10242.158325 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +839 + 8 +HOLZ + 10 +6694.381846 + 20 +10263.545673 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +83A + 8 +HOLZ + 10 +6696.093803 + 20 +10242.158325 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +83B + 8 +HOLZ + 0 +POLYLINE + 5 +83C + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1468 + 8 +HOLZ + 10 +6686.13674 + 20 +10291.852781 + 30 +0.0 + 0 +VERTEX + 5 +1469 + 8 +HOLZ + 10 +6712.870085 + 20 +10254.154042 + 30 +0.0 + 0 +SEQEND + 5 +146A + 8 +HOLZ + 0 +POLYLINE + 5 +840 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +841 + 8 +HOLZ + 10 +6593.381361 + 20 +10231.036907 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +842 + 8 +HOLZ + 10 +6593.381361 + 20 +10231.036907 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +843 + 8 +HOLZ + 10 +6594.075154 + 20 +10223.038376 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +844 + 8 +HOLZ + 10 +6593.795979 + 20 +10215.651391 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +845 + 8 +HOLZ + 10 +6592.854784 + 20 +10208.765671 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +846 + 8 +HOLZ + 10 +6591.562517 + 20 +10202.270938 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +847 + 8 +HOLZ + 10 +6590.230126 + 20 +10196.056912 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +848 + 8 +HOLZ + 10 +6589.168559 + 20 +10190.013313 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +849 + 8 +HOLZ + 10 +6588.688765 + 20 +10184.029863 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +84A + 8 +HOLZ + 10 +6589.10169 + 20 +10177.996282 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +84B + 8 +HOLZ + 10 +6596.805165 + 20 +10208.794071 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +84C + 8 +HOLZ + 10 +6586.533865 + 20 +10194.2507 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +84D + 8 +HOLZ + 10 +6589.10169 + 20 +10177.996282 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +84E + 8 +HOLZ + 0 +POLYLINE + 5 +84F + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +850 + 8 +HOLZ + 10 +6626.762863 + 20 +10250.713278 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +851 + 8 +HOLZ + 10 +6626.762863 + 20 +10250.713278 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +852 + 8 +HOLZ + 10 +6630.918858 + 20 +10244.586128 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +853 + 8 +HOLZ + 10 +6633.851119 + 20 +10238.428908 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +854 + 8 +HOLZ + 10 +6635.700076 + 20 +10232.291743 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +855 + 8 +HOLZ + 10 +6636.60616 + 20 +10226.224759 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +856 + 8 +HOLZ + 10 +6636.7098 + 20 +10220.278082 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +857 + 8 +HOLZ + 10 +6636.151426 + 20 +10214.501836 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +858 + 8 +HOLZ + 10 +6635.071469 + 20 +10208.946147 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +859 + 8 +HOLZ + 10 +6633.610359 + 20 +10203.661141 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +85A + 8 +HOLZ + 10 +6639.601988 + 20 +10234.458861 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +85B + 8 +HOLZ + 10 +6637.89003 + 20 +10217.349024 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +85C + 8 +HOLZ + 10 +6633.610359 + 20 +10203.661141 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +85D + 8 +HOLZ + 0 +POLYLINE + 5 +85E + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +85F + 8 +HOLZ + 10 +6768.58819 + 20 +10340.418399 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +860 + 8 +HOLZ + 10 +6768.58819 + 20 +10340.418399 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +861 + 8 +HOLZ + 10 +6772.244307 + 20 +10330.219305 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +862 + 8 +HOLZ + 10 +6774.887342 + 20 +10322.346086 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +863 + 8 +HOLZ + 10 +6776.547387 + 20 +10316.237325 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +864 + 8 +HOLZ + 10 +6777.25453 + 20 +10311.331604 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +865 + 8 +HOLZ + 10 +6777.038863 + 20 +10307.067506 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +866 + 8 +HOLZ + 10 +6775.930476 + 20 +10302.883613 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +867 + 8 +HOLZ + 10 +6773.95946 + 20 +10298.218508 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +868 + 8 +HOLZ + 10 +6771.155904 + 20 +10292.510773 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +869 + 8 +HOLZ + 10 +6779.715358 + 20 +10309.62061 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +86A + 8 +HOLZ + 10 +6771.155904 + 20 +10292.510773 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +86B + 8 +HOLZ + 0 +POLYLINE + 5 +86C + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +86D + 8 +HOLZ + 10 +6736.918534 + 20 +10319.886539 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +86E + 8 +HOLZ + 10 +6736.918534 + 20 +10319.886539 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +86F + 8 +HOLZ + 10 +6736.828256 + 20 +10312.130285 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +870 + 8 +HOLZ + 10 +6736.517301 + 20 +10304.835198 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +871 + 8 +HOLZ + 10 +6735.925489 + 20 +10297.901023 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +872 + 8 +HOLZ + 10 +6734.992638 + 20 +10291.227506 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +873 + 8 +HOLZ + 10 +6733.658568 + 20 +10284.714393 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +874 + 8 +HOLZ + 10 +6731.863098 + 20 +10278.26143 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +875 + 8 +HOLZ + 10 +6729.546047 + 20 +10271.768363 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +876 + 8 +HOLZ + 10 +6726.647235 + 20 +10265.134937 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +877 + 8 +HOLZ + 10 +6736.918534 + 20 +10298.499192 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +878 + 8 +HOLZ + 10 +6735.206577 + 20 +10283.100332 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +879 + 8 +HOLZ + 10 +6726.647235 + 20 +10265.134937 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +87A + 8 +HOLZ + 0 +POLYLINE + 5 +87B + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +87C + 8 +HOLZ + 10 +6543.737041 + 20 +10201.094606 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +87D + 8 +HOLZ + 10 +6543.737041 + 20 +10201.094606 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +87E + 8 +HOLZ + 10 +6543.447851 + 20 +10192.003326 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +87F + 8 +HOLZ + 10 +6543.188746 + 20 +10184.826877 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +880 + 8 +HOLZ + 10 +6542.909574 + 20 +10178.913616 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +881 + 8 +HOLZ + 10 +6542.560182 + 20 +10173.611895 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +882 + 8 +HOLZ + 10 +6542.090418 + 20 +10168.270071 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +883 + 8 +HOLZ + 10 +6541.45013 + 20 +10162.236497 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +884 + 8 +HOLZ + 10 +6540.589165 + 20 +10154.859527 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +885 + 8 +HOLZ + 10 +6539.45737 + 20 +10145.487516 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +886 + 8 +HOLZ + 10 +6542.881174 + 20 +10173.71884 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +887 + 8 +HOLZ + 10 +6539.45737 + 20 +10145.487516 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +888 + 8 +HOLZ + 0 +POLYLINE + 5 +889 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +88A + 8 +HOLZ + 10 +6838.774887 + 20 +10383.193094 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +88B + 8 +HOLZ + 10 +6838.774887 + 20 +10383.193094 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +88C + 8 +HOLZ + 10 +6842.930882 + 20 +10377.065944 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +88D + 8 +HOLZ + 10 +6845.863143 + 20 +10370.908724 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +88E + 8 +HOLZ + 10 +6847.7121 + 20 +10364.771559 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +88F + 8 +HOLZ + 10 +6848.618184 + 20 +10358.704575 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +890 + 8 +HOLZ + 10 +6848.721824 + 20 +10352.757898 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +891 + 8 +HOLZ + 10 +6848.16345 + 20 +10346.981652 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +892 + 8 +HOLZ + 10 +6847.083493 + 20 +10341.425963 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +893 + 8 +HOLZ + 10 +6845.622383 + 20 +10336.140957 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +894 + 8 +HOLZ + 10 +6851.614012 + 20 +10366.938677 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +895 + 8 +HOLZ + 10 +6849.902054 + 20 +10349.82884 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +896 + 8 +HOLZ + 10 +6845.622383 + 20 +10336.140957 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +897 + 8 +HOLZ + 0 +POLYLINE + 5 +898 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +899 + 8 +HOLZ + 10 +6805.393385 + 20 +10363.516723 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +89A + 8 +HOLZ + 10 +6805.393385 + 20 +10363.516723 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +89B + 8 +HOLZ + 10 +6806.087178 + 20 +10355.518192 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +89C + 8 +HOLZ + 10 +6805.808003 + 20 +10348.131207 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +89D + 8 +HOLZ + 10 +6804.866808 + 20 +10341.245487 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +89E + 8 +HOLZ + 10 +6803.574541 + 20 +10334.750754 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +89F + 8 +HOLZ + 10 +6802.24215 + 20 +10328.536728 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8A0 + 8 +HOLZ + 10 +6801.180584 + 20 +10322.493129 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8A1 + 8 +HOLZ + 10 +6800.700789 + 20 +10316.509679 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8A2 + 8 +HOLZ + 10 +6801.113714 + 20 +10310.476098 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8A3 + 8 +HOLZ + 10 +6808.817189 + 20 +10341.273887 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +8A4 + 8 +HOLZ + 10 +6798.545889 + 20 +10326.730516 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +8A5 + 8 +HOLZ + 10 +6801.113714 + 20 +10310.476098 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +8A6 + 8 +HOLZ + 0 +POLYLINE + 5 +8A7 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +146B + 8 +HOLZ + 10 +6898.148764 + 20 +10424.332597 + 30 +0.0 + 0 +VERTEX + 5 +146C + 8 +HOLZ + 10 +6924.882109 + 20 +10386.633858 + 30 +0.0 + 0 +SEQEND + 5 +146D + 8 +HOLZ + 0 +POLYLINE + 5 +8AB + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +8AC + 8 +HOLZ + 10 +6904.682024 + 20 +10411.424349 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +8AD + 8 +HOLZ + 10 +6904.682024 + 20 +10411.424349 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8AE + 8 +HOLZ + 10 +6905.25041 + 20 +10406.29975 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8AF + 8 +HOLZ + 10 +6905.698434 + 20 +10402.187706 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8B0 + 8 +HOLZ + 10 +6906.066218 + 20 +10398.657128 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8B1 + 8 +HOLZ + 10 +6906.393884 + 20 +10395.276928 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8B2 + 8 +HOLZ + 10 +6906.721555 + 20 +10391.616018 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8B3 + 8 +HOLZ + 10 +6907.089354 + 20 +10387.243309 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8B4 + 8 +HOLZ + 10 +6907.537404 + 20 +10381.727713 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8B5 + 8 +HOLZ + 10 +6908.105827 + 20 +10374.638141 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8B6 + 8 +HOLZ + 10 +6906.39387 + 20 +10396.025489 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +8B7 + 8 +HOLZ + 10 +6908.105827 + 20 +10374.638141 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +8B8 + 8 +HOLZ + 0 +POLYLINE + 5 +8B9 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +8BA + 8 +HOLZ + 10 +6874.724214 + 20 +10403.724884 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +8BB + 8 +HOLZ + 10 +6874.724214 + 20 +10403.724884 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8BC + 8 +HOLZ + 10 +6876.310715 + 20 +10397.669605 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8BD + 8 +HOLZ + 10 +6877.305414 + 20 +10391.694526 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8BE + 8 +HOLZ + 10 +6877.838707 + 20 +10385.799648 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8BF + 8 +HOLZ + 10 +6878.040993 + 20 +10379.98497 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8C0 + 8 +HOLZ + 10 +6878.042669 + 20 +10374.25049 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8C1 + 8 +HOLZ + 10 +6877.974133 + 20 +10368.596208 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8C2 + 8 +HOLZ + 10 +6877.965784 + 20 +10363.022124 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8C3 + 8 +HOLZ + 10 +6878.148018 + 20 +10357.528235 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8C4 + 8 +HOLZ + 10 +6879.859864 + 20 +10387.470536 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +8C5 + 8 +HOLZ + 10 +6877.292039 + 20 +10372.071676 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +8C6 + 8 +HOLZ + 10 +6878.148018 + 20 +10357.528235 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +8C7 + 8 +HOLZ + 0 +POLYLINE + 5 +8C8 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +8C9 + 8 +HOLZ + 10 +6100.882462 + 20 +9922.447091 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +8CA + 8 +HOLZ + 10 +6100.882462 + 20 +9922.447091 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8CB + 8 +HOLZ + 10 +6100.792184 + 20 +9914.690837 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8CC + 8 +HOLZ + 10 +6100.481229 + 20 +9907.39575 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8CD + 8 +HOLZ + 10 +6099.889417 + 20 +9900.461575 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8CE + 8 +HOLZ + 10 +6098.956566 + 20 +9893.788058 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8CF + 8 +HOLZ + 10 +6097.622496 + 20 +9887.274945 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8D0 + 8 +HOLZ + 10 +6095.827026 + 20 +9880.821982 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8D1 + 8 +HOLZ + 10 +6093.509975 + 20 +9874.328915 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8D2 + 8 +HOLZ + 10 +6090.611162 + 20 +9867.695489 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8D3 + 8 +HOLZ + 10 +6100.882462 + 20 +9901.059743 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +8D4 + 8 +HOLZ + 10 +6099.170505 + 20 +9885.660884 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +8D5 + 8 +HOLZ + 10 +6090.611162 + 20 +9867.695489 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +8D6 + 8 +HOLZ + 0 +POLYLINE + 5 +8D7 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +8D8 + 8 +HOLZ + 10 +6132.552118 + 20 +9942.978951 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +8D9 + 8 +HOLZ + 10 +6132.552118 + 20 +9942.978951 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8DA + 8 +HOLZ + 10 +6136.208235 + 20 +9932.779856 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8DB + 8 +HOLZ + 10 +6138.85127 + 20 +9924.906638 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8DC + 8 +HOLZ + 10 +6140.511314 + 20 +9918.797876 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8DD + 8 +HOLZ + 10 +6141.218458 + 20 +9913.892156 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8DE + 8 +HOLZ + 10 +6141.002791 + 20 +9909.628057 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8DF + 8 +HOLZ + 10 +6139.894404 + 20 +9905.444165 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8E0 + 8 +HOLZ + 10 +6137.923388 + 20 +9900.77906 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8E1 + 8 +HOLZ + 10 +6135.119832 + 20 +9895.071325 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8E2 + 8 +HOLZ + 10 +6143.679286 + 20 +9912.181161 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +8E3 + 8 +HOLZ + 10 +6135.119832 + 20 +9895.071325 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +8E4 + 8 +HOLZ + 0 +POLYLINE + 5 +8E5 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +8E6 + 8 +HOLZ + 10 +6169.357313 + 20 +9966.077275 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +8E7 + 8 +HOLZ + 10 +6169.357313 + 20 +9966.077275 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8E8 + 8 +HOLZ + 10 +6170.051106 + 20 +9958.078744 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8E9 + 8 +HOLZ + 10 +6169.771931 + 20 +9950.691758 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8EA + 8 +HOLZ + 10 +6168.830736 + 20 +9943.806039 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8EB + 8 +HOLZ + 10 +6167.538469 + 20 +9937.311306 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8EC + 8 +HOLZ + 10 +6166.206078 + 20 +9931.09728 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8ED + 8 +HOLZ + 10 +6165.144511 + 20 +9925.053681 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8EE + 8 +HOLZ + 10 +6164.664716 + 20 +9919.070231 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8EF + 8 +HOLZ + 10 +6165.077642 + 20 +9913.03665 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8F0 + 8 +HOLZ + 10 +6172.781116 + 20 +9943.834439 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +8F1 + 8 +HOLZ + 10 +6162.509817 + 20 +9929.291068 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +8F2 + 8 +HOLZ + 10 +6165.077642 + 20 +9913.03665 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +8F3 + 8 +HOLZ + 0 +POLYLINE + 5 +8F4 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +146E + 8 +HOLZ + 10 +6262.112692 + 20 +10026.893149 + 30 +0.0 + 0 +VERTEX + 5 +146F + 8 +HOLZ + 10 +6288.846037 + 20 +9989.19441 + 30 +0.0 + 0 +SEQEND + 5 +1470 + 8 +HOLZ + 0 +POLYLINE + 5 +8F8 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +8F9 + 8 +HOLZ + 10 +6268.645952 + 20 +10013.984901 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +8FA + 8 +HOLZ + 10 +6268.645952 + 20 +10013.984901 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8FB + 8 +HOLZ + 10 +6269.214338 + 20 +10008.860302 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8FC + 8 +HOLZ + 10 +6269.662362 + 20 +10004.748258 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8FD + 8 +HOLZ + 10 +6270.030146 + 20 +10001.21768 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8FE + 8 +HOLZ + 10 +6270.357812 + 20 +9997.83748 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8FF + 8 +HOLZ + 10 +6270.685483 + 20 +9994.17657 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +900 + 8 +HOLZ + 10 +6271.053282 + 20 +9989.803861 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +901 + 8 +HOLZ + 10 +6271.501332 + 20 +9984.288265 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +902 + 8 +HOLZ + 10 +6272.069755 + 20 +9977.198693 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +903 + 8 +HOLZ + 10 +6270.357798 + 20 +9998.586041 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +904 + 8 +HOLZ + 10 +6272.069755 + 20 +9977.198693 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +905 + 8 +HOLZ + 0 +POLYLINE + 5 +906 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +907 + 8 +HOLZ + 10 +6234.370229 + 20 +10008.81155 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +908 + 8 +HOLZ + 10 +6234.370229 + 20 +10008.81155 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +909 + 8 +HOLZ + 10 +6237.381979 + 20 +10001.922455 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +90A + 8 +HOLZ + 10 +6239.447722 + 20 +9995.320782 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +90B + 8 +HOLZ + 10 +6240.748457 + 20 +9988.976927 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +90C + 8 +HOLZ + 10 +6241.465181 + 20 +9982.861286 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +90D + 8 +HOLZ + 10 +6241.778894 + 20 +9976.944255 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +90E + 8 +HOLZ + 10 +6241.870594 + 20 +9971.196231 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +90F + 8 +HOLZ + 10 +6241.921278 + 20 +9965.587609 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +910 + 8 +HOLZ + 10 +6242.111946 + 20 +9960.088787 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +911 + 8 +HOLZ + 10 +6243.823792 + 20 +9990.031088 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +912 + 8 +HOLZ + 10 +6241.255967 + 20 +9974.632228 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +913 + 8 +HOLZ + 10 +6242.111946 + 20 +9960.088787 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +914 + 8 +HOLZ + 0 +POLYLINE + 5 +915 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +916 + 8 +HOLZ + 10 +6202.738815 + 20 +9985.753646 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +917 + 8 +HOLZ + 10 +6202.738815 + 20 +9985.753646 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +918 + 8 +HOLZ + 10 +6206.89481 + 20 +9979.626496 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +919 + 8 +HOLZ + 10 +6209.827071 + 20 +9973.469276 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +91A + 8 +HOLZ + 10 +6211.676028 + 20 +9967.332111 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +91B + 8 +HOLZ + 10 +6212.582111 + 20 +9961.265127 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +91C + 8 +HOLZ + 10 +6212.685751 + 20 +9955.318449 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +91D + 8 +HOLZ + 10 +6212.127378 + 20 +9949.542204 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +91E + 8 +HOLZ + 10 +6211.047421 + 20 +9943.986515 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +91F + 8 +HOLZ + 10 +6209.586311 + 20 +9938.701509 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +920 + 8 +HOLZ + 10 +6215.57794 + 20 +9969.499229 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +921 + 8 +HOLZ + 10 +6213.865982 + 20 +9952.389392 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +922 + 8 +HOLZ + 10 +6209.586311 + 20 +9938.701509 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +923 + 8 +HOLZ + 0 +POLYLINE + 5 +924 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +925 + 8 +HOLZ + 10 +6450.700166 + 20 +10138.765252 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +926 + 8 +HOLZ + 10 +6450.700166 + 20 +10138.765252 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +927 + 8 +HOLZ + 10 +6452.286667 + 20 +10132.709973 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +928 + 8 +HOLZ + 10 +6453.281366 + 20 +10126.734894 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +929 + 8 +HOLZ + 10 +6453.814659 + 20 +10120.840016 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +92A + 8 +HOLZ + 10 +6454.016945 + 20 +10115.025338 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +92B + 8 +HOLZ + 10 +6454.018621 + 20 +10109.290858 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +92C + 8 +HOLZ + 10 +6453.950085 + 20 +10103.636576 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +92D + 8 +HOLZ + 10 +6453.941735 + 20 +10098.062491 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +92E + 8 +HOLZ + 10 +6454.12397 + 20 +10092.568603 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +92F + 8 +HOLZ + 10 +6455.835816 + 20 +10122.510904 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +930 + 8 +HOLZ + 10 +6453.267991 + 20 +10107.112044 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +931 + 8 +HOLZ + 10 +6454.12397 + 20 +10092.568603 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +932 + 8 +HOLZ + 0 +POLYLINE + 5 +933 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +934 + 8 +HOLZ + 10 +6381.369337 + 20 +10098.557091 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +935 + 8 +HOLZ + 10 +6381.369337 + 20 +10098.557091 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +936 + 8 +HOLZ + 10 +6382.06313 + 20 +10090.55856 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +937 + 8 +HOLZ + 10 +6381.783955 + 20 +10083.171574 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +938 + 8 +HOLZ + 10 +6380.84276 + 20 +10076.285855 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +939 + 8 +HOLZ + 10 +6379.550493 + 20 +10069.791122 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +93A + 8 +HOLZ + 10 +6378.218102 + 20 +10063.577096 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +93B + 8 +HOLZ + 10 +6377.156535 + 20 +10057.533497 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +93C + 8 +HOLZ + 10 +6376.676741 + 20 +10051.550047 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +93D + 8 +HOLZ + 10 +6377.089666 + 20 +10045.516466 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +93E + 8 +HOLZ + 10 +6384.79314 + 20 +10076.314255 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +93F + 8 +HOLZ + 10 +6374.521841 + 20 +10061.770884 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +940 + 8 +HOLZ + 10 +6377.089666 + 20 +10045.516466 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +941 + 8 +HOLZ + 0 +POLYLINE + 5 +942 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +943 + 8 +HOLZ + 10 +6414.750839 + 20 +10118.233462 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +944 + 8 +HOLZ + 10 +6414.750839 + 20 +10118.233462 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +945 + 8 +HOLZ + 10 +6418.906834 + 20 +10112.106312 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +946 + 8 +HOLZ + 10 +6421.839095 + 20 +10105.949092 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +947 + 8 +HOLZ + 10 +6423.688052 + 20 +10099.811927 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +948 + 8 +HOLZ + 10 +6424.594135 + 20 +10093.744943 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +949 + 8 +HOLZ + 10 +6424.697775 + 20 +10087.798266 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +94A + 8 +HOLZ + 10 +6424.139402 + 20 +10082.02202 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +94B + 8 +HOLZ + 10 +6423.059445 + 20 +10076.466331 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +94C + 8 +HOLZ + 10 +6421.598335 + 20 +10071.181325 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +94D + 8 +HOLZ + 10 +6427.589964 + 20 +10101.979045 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +94E + 8 +HOLZ + 10 +6425.878006 + 20 +10084.869208 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +94F + 8 +HOLZ + 10 +6421.598335 + 20 +10071.181325 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +950 + 8 +HOLZ + 0 +POLYLINE + 5 +951 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +952 + 8 +HOLZ + 10 +6312.894486 + 20 +10054.926907 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +953 + 8 +HOLZ + 10 +6312.894486 + 20 +10054.926907 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +954 + 8 +HOLZ + 10 +6312.804208 + 20 +10047.170653 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +955 + 8 +HOLZ + 10 +6312.493253 + 20 +10039.875566 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +956 + 8 +HOLZ + 10 +6311.901441 + 20 +10032.941391 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +957 + 8 +HOLZ + 10 +6310.96859 + 20 +10026.267874 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +958 + 8 +HOLZ + 10 +6309.63452 + 20 +10019.754761 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +959 + 8 +HOLZ + 10 +6307.83905 + 20 +10013.301798 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +95A + 8 +HOLZ + 10 +6305.521999 + 20 +10006.808731 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +95B + 8 +HOLZ + 10 +6302.623186 + 20 +10000.175305 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +95C + 8 +HOLZ + 10 +6312.894486 + 20 +10033.539559 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +95D + 8 +HOLZ + 10 +6311.182529 + 20 +10018.1407 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +95E + 8 +HOLZ + 10 +6302.623186 + 20 +10000.175305 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +95F + 8 +HOLZ + 0 +POLYLINE + 5 +960 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +961 + 8 +HOLZ + 10 +6344.564142 + 20 +10075.458767 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +962 + 8 +HOLZ + 10 +6344.564142 + 20 +10075.458767 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +963 + 8 +HOLZ + 10 +6348.220259 + 20 +10065.259673 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +964 + 8 +HOLZ + 10 +6350.863294 + 20 +10057.386454 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +965 + 8 +HOLZ + 10 +6352.523339 + 20 +10051.277692 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +966 + 8 +HOLZ + 10 +6353.230482 + 20 +10046.371972 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +967 + 8 +HOLZ + 10 +6353.014815 + 20 +10042.107874 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +968 + 8 +HOLZ + 10 +6351.906428 + 20 +10037.923981 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +969 + 8 +HOLZ + 10 +6349.935412 + 20 +10033.258876 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +96A + 8 +HOLZ + 10 +6347.131856 + 20 +10027.551141 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +96B + 8 +HOLZ + 10 +6355.69131 + 20 +10044.660978 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +96C + 8 +HOLZ + 10 +6347.131856 + 20 +10027.551141 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +96D + 8 +HOLZ + 0 +POLYLINE + 5 +96E + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1471 + 8 +HOLZ + 10 +6474.124716 + 20 +10159.372965 + 30 +0.0 + 0 +VERTEX + 5 +1472 + 8 +HOLZ + 10 +6500.858061 + 20 +10121.674226 + 30 +0.0 + 0 +SEQEND + 5 +1473 + 8 +HOLZ + 0 +POLYLINE + 5 +972 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1474 + 8 +HOLZ + 10 +6050.100668 + 20 +9894.413333 + 30 +0.0 + 0 +VERTEX + 5 +1475 + 8 +HOLZ + 10 +6076.834013 + 20 +9856.714594 + 30 +0.0 + 0 +SEQEND + 5 +1476 + 8 +HOLZ + 0 +POLYLINE + 5 +976 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +977 + 8 +HOLZ + 10 +6042.825133 + 20 +9892.292137 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +978 + 8 +HOLZ + 10 +6042.825133 + 20 +9892.292137 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +979 + 8 +HOLZ + 10 +6042.535943 + 20 +9883.200856 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +97A + 8 +HOLZ + 10 +6042.276838 + 20 +9876.024408 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +97B + 8 +HOLZ + 10 +6041.997665 + 20 +9870.111146 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +97C + 8 +HOLZ + 10 +6041.648273 + 20 +9864.809426 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +97D + 8 +HOLZ + 10 +6041.17851 + 20 +9859.467602 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +97E + 8 +HOLZ + 10 +6040.538221 + 20 +9853.434027 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +97F + 8 +HOLZ + 10 +6039.677256 + 20 +9846.057058 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +980 + 8 +HOLZ + 10 +6038.545462 + 20 +9836.685047 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +981 + 8 +HOLZ + 10 +6041.969266 + 20 +9864.916371 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +982 + 8 +HOLZ + 10 +6038.545462 + 20 +9836.685047 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +983 + 8 +HOLZ + 0 +POLYLINE + 5 +984 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1477 + 8 +HOLZ + 10 +6005.4236 + 20 +9868.597785 + 30 +0.0 + 0 +VERTEX + 5 +1478 + 8 +HOLZ + 10 +6004.94045 + 20 +9862.562553 + 30 +0.0 + 0 +VERTEX + 5 +1479 + 8 +HOLZ + 10 +6004.126299 + 20 +9856.727822 + 30 +0.0 + 0 +VERTEX + 5 +147A + 8 +HOLZ + 10 +6002.971114 + 20 +9851.213898 + 30 +0.0 + 0 +VERTEX + 5 +147B + 8 +HOLZ + 10 +6001.464865 + 20 +9846.141085 + 30 +0.0 + 0 +VERTEX + 5 +147C + 8 +HOLZ + 10 +5999.597521 + 20 +9841.62969 + 30 +0.0 + 0 +VERTEX + 5 +147D + 8 +HOLZ + 10 +5998.855455 + 20 +9840.360132 + 30 +0.0 + 0 +SEQEND + 5 +147E + 8 +HOLZ + 0 +POLYLINE + 5 +98D + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +147F + 8 +HOLZ + 10 +4446.342791 + 20 +9574.389715 + 30 +0.0 + 0 +VERTEX + 5 +1480 + 8 +HOLZ + 10 +4361.85938 + 20 +9710.360132 + 30 +0.0 + 0 +VERTEX + 5 +1481 + 8 +HOLZ + 10 +4471.85938 + 20 +9770.360132 + 30 +0.0 + 0 +VERTEX + 5 +1482 + 8 +HOLZ + 10 +4552.348803 + 20 +9640.629623 + 30 +0.0 + 0 +SEQEND + 5 +1483 + 8 +HOLZ + 0 +POLYLINE + 5 +993 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +994 + 8 +HOLZ + 10 +4419.014832 + 20 +9699.411535 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +995 + 8 +HOLZ + 10 +4419.014832 + 20 +9699.411535 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +996 + 8 +HOLZ + 10 +4420.597374 + 20 +9686.947504 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +997 + 8 +HOLZ + 10 +4421.639538 + 20 +9675.93016 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +998 + 8 +HOLZ + 10 +4422.141324 + 20 +9666.108742 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +999 + 8 +HOLZ + 10 +4422.10273 + 20 +9657.232493 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +99A + 8 +HOLZ + 10 +4421.523754 + 20 +9649.050653 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +99B + 8 +HOLZ + 10 +4420.404395 + 20 +9641.312461 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +99C + 8 +HOLZ + 10 +4418.744653 + 20 +9633.767158 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +99D + 8 +HOLZ + 10 +4416.544525 + 20 +9626.163986 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +99E + 8 +HOLZ + 10 +4423.955446 + 20 +9664.022305 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +99F + 8 +HOLZ + 10 +4423.132047 + 20 +9646.73917 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +9A0 + 8 +HOLZ + 10 +4416.544525 + 20 +9626.163986 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +9A1 + 8 +HOLZ + 0 +POLYLINE + 5 +9A2 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +9A3 + 8 +HOLZ + 10 +4444.5413 + 20 +9717.5177 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +9A4 + 8 +HOLZ + 10 +4444.5413 + 20 +9717.5177 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9A5 + 8 +HOLZ + 10 +4448.560337 + 20 +9702.188804 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9A6 + 8 +HOLZ + 10 +4451.450376 + 20 +9689.326515 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9A7 + 8 +HOLZ + 10 +4453.356159 + 20 +9678.619796 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9A8 + 8 +HOLZ + 10 +4454.422431 + 20 +9669.757608 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9A9 + 8 +HOLZ + 10 +4454.793934 + 20 +9662.428912 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9AA + 8 +HOLZ + 10 +4454.615412 + 20 +9656.322671 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9AB + 8 +HOLZ + 10 +4454.031607 + 20 +9651.127845 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9AC + 8 +HOLZ + 10 +4453.187264 + 20 +9646.533395 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9AD + 8 +HOLZ + 10 +4452.191743 + 20 +9642.233106 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9AE + 8 +HOLZ + 10 +4451.012879 + 20 +9637.940051 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9AF + 8 +HOLZ + 10 +4449.583126 + 20 +9633.372124 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9B0 + 8 +HOLZ + 10 +4447.834936 + 20 +9628.247221 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9B1 + 8 +HOLZ + 10 +4445.700763 + 20 +9622.283237 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9B2 + 8 +HOLZ + 10 +4443.113059 + 20 +9615.198068 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9B3 + 8 +HOLZ + 10 +4440.004277 + 20 +9606.709608 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9B4 + 8 +HOLZ + 10 +4436.30687 + 20 +9596.535754 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9B5 + 8 +HOLZ + 10 +4456.892724 + 20 +9673.075353 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +9B6 + 8 +HOLZ + 10 +4454.422417 + 20 +9643.447121 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +9B7 + 8 +HOLZ + 10 +4447.011496 + 20 +9626.163986 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +9B8 + 8 +HOLZ + 10 +4436.30687 + 20 +9596.535754 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +9B9 + 8 +HOLZ + 0 +POLYLINE + 5 +9BA + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +9BB + 8 +HOLZ + 10 +4467.597351 + 20 +9734.800836 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +9BC + 8 +HOLZ + 10 +4467.597351 + 20 +9734.800836 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9BD + 8 +HOLZ + 10 +4471.688771 + 20 +9717.675229 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9BE + 8 +HOLZ + 10 +4475.317014 + 20 +9703.115088 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9BF + 8 +HOLZ + 10 +4478.482079 + 20 +9690.792495 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9C0 + 8 +HOLZ + 10 +4481.183966 + 20 +9680.379534 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9C1 + 8 +HOLZ + 10 +4483.422674 + 20 +9671.548289 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9C2 + 8 +HOLZ + 10 +4485.198203 + 20 +9663.970842 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9C3 + 8 +HOLZ + 10 +4486.510553 + 20 +9657.319276 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9C4 + 8 +HOLZ + 10 +4487.359723 + 20 +9651.265676 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9C5 + 8 +HOLZ + 10 +4487.729631 + 20 +9645.490162 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9C6 + 8 +HOLZ + 10 +4487.539862 + 20 +9639.705003 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9C7 + 8 +HOLZ + 10 +4486.693921 + 20 +9633.630506 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9C8 + 8 +HOLZ + 10 +4485.095311 + 20 +9626.986978 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9C9 + 8 +HOLZ + 10 +4482.647536 + 20 +9619.494727 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9CA + 8 +HOLZ + 10 +4479.2541 + 20 +9610.874058 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9CB + 8 +HOLZ + 10 +4474.818506 + 20 +9600.845279 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9CC + 8 +HOLZ + 10 +4469.244259 + 20 +9589.128696 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9CD + 8 +HOLZ + 10 +4479.125376 + 20 +9685.420449 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +9CE + 8 +HOLZ + 10 +4492.300309 + 20 +9648.38516 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +9CF + 8 +HOLZ + 10 +4485.712898 + 20 +9622.871937 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +9D0 + 8 +HOLZ + 10 +4469.244259 + 20 +9589.128696 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +9D1 + 8 +HOLZ + 0 +POLYLINE + 5 +9D2 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +9D3 + 8 +HOLZ + 10 +4508.768949 + 20 +9705.995564 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +9D4 + 8 +HOLZ + 10 +4508.768949 + 20 +9705.995564 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9D5 + 8 +HOLZ + 10 +4510.327368 + 20 +9689.92285 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9D6 + 8 +HOLZ + 10 +4511.355062 + 20 +9675.094284 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9D7 + 8 +HOLZ + 10 +4511.938874 + 20 +9661.596669 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9D8 + 8 +HOLZ + 10 +4512.165648 + 20 +9649.516808 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9D9 + 8 +HOLZ + 10 +4512.12223 + 20 +9638.941502 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9DA + 8 +HOLZ + 10 +4511.895462 + 20 +9629.957553 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9DB + 8 +HOLZ + 10 +4511.572189 + 20 +9622.651765 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9DC + 8 +HOLZ + 10 +4511.239256 + 20 +9617.110938 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9DD + 8 +HOLZ + 10 +4513.709563 + 20 +9661.553286 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +9DE + 8 +HOLZ + 10 +4512.062765 + 20 +9629.456035 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +9DF + 8 +HOLZ + 10 +4511.239256 + 20 +9617.110938 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +9E0 + 8 +HOLZ + 0 +POLYLINE + 5 +9E1 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1484 + 8 +HOLZ + 10 +4955.171649 + 20 +9892.341274 + 30 +0.0 + 0 +VERTEX + 5 +1485 + 8 +HOLZ + 10 +4915.427704 + 20 +9955.944881 + 30 +0.0 + 0 +VERTEX + 5 +1486 + 8 +HOLZ + 10 +5021.433716 + 20 +10022.184789 + 30 +0.0 + 0 +VERTEX + 5 +1487 + 8 +HOLZ + 10 +5061.177661 + 20 +9958.581182 + 30 +0.0 + 0 +SEQEND + 5 +1488 + 8 +HOLZ + 0 +POLYLINE + 5 +9E7 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +9E8 + 8 +HOLZ + 10 +4942.18729 + 20 +9971.599966 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +9E9 + 8 +HOLZ + 10 +4942.18729 + 20 +9971.599966 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9EA + 8 +HOLZ + 10 +4942.867744 + 20 +9964.308362 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9EB + 8 +HOLZ + 10 +4942.150914 + 20 +9959.979998 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9EC + 8 +HOLZ + 10 +4940.337987 + 20 +9957.68412 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9ED + 8 +HOLZ + 10 +4937.730148 + 20 +9956.489972 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9EE + 8 +HOLZ + 10 +4934.628582 + 20 +9955.466796 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9EF + 8 +HOLZ + 10 +4931.334476 + 20 +9953.683837 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9F0 + 8 +HOLZ + 10 +4928.149014 + 20 +9950.210338 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9F1 + 8 +HOLZ + 10 +4925.373383 + 20 +9944.115544 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9F2 + 8 +HOLZ + 10 +4946.132598 + 20 +9947.377359 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +9F3 + 8 +HOLZ + 10 +4931.960905 + 20 +9964.690728 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +9F4 + 8 +HOLZ + 10 +4925.373383 + 20 +9944.115544 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +9F5 + 8 +HOLZ + 0 +POLYLINE + 5 +9F6 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +9F7 + 8 +HOLZ + 10 +5020.528802 + 20 +10019.48189 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +9F8 + 8 +HOLZ + 10 +5020.528802 + 20 +10019.48189 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9F9 + 8 +HOLZ + 10 +5024.42641 + 20 +10004.069081 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9FA + 8 +HOLZ + 10 +5026.279178 + 20 +9989.966034 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9FB + 8 +HOLZ + 10 +5026.544499 + 20 +9977.21221 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9FC + 8 +HOLZ + 10 +5025.679765 + 20 +9965.847067 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9FD + 8 +HOLZ + 10 +5024.142367 + 20 +9955.910065 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9FE + 8 +HOLZ + 10 +5022.389698 + 20 +9947.440663 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9FF + 8 +HOLZ + 10 +5020.87915 + 20 +9940.47832 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A00 + 8 +HOLZ + 10 +5020.068113 + 20 +9935.062497 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A01 + 8 +HOLZ + 10 +5034.055445 + 20 +9976.66979 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A02 + 8 +HOLZ + 10 +5020.891623 + 20 +9947.407593 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A03 + 8 +HOLZ + 10 +5020.068113 + 20 +9935.062497 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +A04 + 8 +HOLZ + 0 +POLYLINE + 5 +A05 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +A06 + 8 +HOLZ + 10 +4968.113282 + 20 +9989.062739 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A07 + 8 +HOLZ + 10 +4968.113282 + 20 +9989.062739 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A08 + 8 +HOLZ + 10 +4968.355733 + 20 +9988.319535 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A09 + 8 +HOLZ + 10 +4968.996122 + 20 +9986.232954 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A0A + 8 +HOLZ + 10 +4969.904005 + 20 +9983.017539 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A0B + 8 +HOLZ + 10 +4970.948938 + 20 +9978.887836 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A0C + 8 +HOLZ + 10 +4972.000475 + 20 +9974.058388 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A0D + 8 +HOLZ + 10 +4972.928174 + 20 +9968.743741 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A0E + 8 +HOLZ + 10 +4973.601589 + 20 +9963.158438 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A0F + 8 +HOLZ + 10 +4973.890277 + 20 +9957.517024 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A10 + 8 +HOLZ + 10 +4973.660744 + 20 +9951.99181 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A11 + 8 +HOLZ + 10 +4972.767307 + 20 +9946.586171 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A12 + 8 +HOLZ + 10 +4971.061235 + 20 +9941.261248 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A13 + 8 +HOLZ + 10 +4968.393795 + 20 +9935.978182 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A14 + 8 +HOLZ + 10 +4964.616256 + 20 +9930.698114 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A15 + 8 +HOLZ + 10 +4959.579886 + 20 +9925.382186 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A16 + 8 +HOLZ + 10 +4953.135954 + 20 +9919.991538 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A17 + 8 +HOLZ + 10 +4945.135727 + 20 +9914.487313 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A18 + 8 +HOLZ + 10 +4968.113282 + 20 +9989.062739 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A19 + 8 +HOLZ + 10 +4979.385448 + 20 +9955.827065 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A1A + 8 +HOLZ + 10 +4968.676929 + 20 +9929.351227 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A1B + 8 +HOLZ + 10 +4945.135727 + 20 +9914.487313 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +A1C + 8 +HOLZ + 0 +POLYLINE + 5 +A1D + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +A1E + 8 +HOLZ + 10 +4996.857288 + 20 +10003.708989 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A1F + 8 +HOLZ + 10 +4996.857288 + 20 +10003.708989 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A20 + 8 +HOLZ + 10 +4994.48105 + 20 +10002.665294 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A21 + 8 +HOLZ + 10 +4993.79012 + 20 +9999.983679 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A22 + 8 +HOLZ + 10 +4994.425238 + 20 +9995.959246 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A23 + 8 +HOLZ + 10 +4996.027143 + 20 +9990.887097 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A24 + 8 +HOLZ + 10 +4998.236574 + 20 +9985.062334 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A25 + 8 +HOLZ + 10 +5000.694271 + 20 +9978.780058 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A26 + 8 +HOLZ + 10 +5003.040972 + 20 +9972.335372 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A27 + 8 +HOLZ + 10 +5004.917418 + 20 +9966.023377 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A28 + 8 +HOLZ + 10 +5005.999865 + 20 +9960.044183 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A29 + 8 +HOLZ + 10 +5006.106635 + 20 +9954.217928 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A2A + 8 +HOLZ + 10 +5005.09157 + 20 +9948.269756 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A2B + 8 +HOLZ + 10 +5002.80851 + 20 +9941.924815 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A2C + 8 +HOLZ + 10 +4999.111294 + 20 +9934.908248 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A2D + 8 +HOLZ + 10 +4993.853763 + 20 +9926.945202 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A2E + 8 +HOLZ + 10 +4986.889757 + 20 +9917.760823 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A2F + 8 +HOLZ + 10 +4978.073117 + 20 +9907.080255 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A30 + 8 +HOLZ + 10 +4987.954234 + 20 +10003.372008 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A31 + 8 +HOLZ + 10 +5013.765592 + 20 +9961.460249 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A32 + 8 +HOLZ + 10 +5004.184256 + 20 +9937.801003 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A33 + 8 +HOLZ + 10 +4978.073117 + 20 +9907.080255 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +A34 + 8 +HOLZ + 0 +POLYLINE + 5 +A35 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1489 + 8 +HOLZ + 10 +5591.207721 + 20 +10289.780722 + 30 +0.0 + 0 +VERTEX + 5 +148A + 8 +HOLZ + 10 +5551.463776 + 20 +10353.384329 + 30 +0.0 + 0 +VERTEX + 5 +148B + 8 +HOLZ + 10 +5657.469788 + 20 +10419.624237 + 30 +0.0 + 0 +VERTEX + 5 +148C + 8 +HOLZ + 10 +5697.213733 + 20 +10356.02063 + 30 +0.0 + 0 +SEQEND + 5 +148D + 8 +HOLZ + 0 +POLYLINE + 5 +A3B + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +A3C + 8 +HOLZ + 10 +5656.564874 + 20 +10416.921338 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A3D + 8 +HOLZ + 10 +5656.564874 + 20 +10416.921338 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A3E + 8 +HOLZ + 10 +5660.462482 + 20 +10401.508529 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A3F + 8 +HOLZ + 10 +5662.31525 + 20 +10387.405482 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A40 + 8 +HOLZ + 10 +5662.580571 + 20 +10374.651658 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A41 + 8 +HOLZ + 10 +5661.715837 + 20 +10363.286515 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A42 + 8 +HOLZ + 10 +5660.17844 + 20 +10353.349513 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A43 + 8 +HOLZ + 10 +5658.42577 + 20 +10344.880111 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A44 + 8 +HOLZ + 10 +5656.915222 + 20 +10337.917769 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A45 + 8 +HOLZ + 10 +5656.104185 + 20 +10332.501945 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A46 + 8 +HOLZ + 10 +5670.091517 + 20 +10374.109238 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A47 + 8 +HOLZ + 10 +5656.927695 + 20 +10344.847041 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A48 + 8 +HOLZ + 10 +5656.104185 + 20 +10332.501945 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +A49 + 8 +HOLZ + 0 +POLYLINE + 5 +A4A + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +A4B + 8 +HOLZ + 10 +5632.89336 + 20 +10401.148437 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A4C + 8 +HOLZ + 10 +5632.89336 + 20 +10401.148437 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A4D + 8 +HOLZ + 10 +5630.517122 + 20 +10400.104742 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A4E + 8 +HOLZ + 10 +5629.826193 + 20 +10397.423127 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A4F + 8 +HOLZ + 10 +5630.46131 + 20 +10393.398694 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A50 + 8 +HOLZ + 10 +5632.063215 + 20 +10388.326545 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A51 + 8 +HOLZ + 10 +5634.272646 + 20 +10382.501782 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A52 + 8 +HOLZ + 10 +5636.730343 + 20 +10376.219506 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A53 + 8 +HOLZ + 10 +5639.077044 + 20 +10369.77482 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A54 + 8 +HOLZ + 10 +5640.95349 + 20 +10363.462825 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A55 + 8 +HOLZ + 10 +5642.035937 + 20 +10357.483631 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A56 + 8 +HOLZ + 10 +5642.142708 + 20 +10351.657376 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A57 + 8 +HOLZ + 10 +5641.127642 + 20 +10345.709204 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A58 + 8 +HOLZ + 10 +5638.844582 + 20 +10339.364263 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A59 + 8 +HOLZ + 10 +5635.147366 + 20 +10332.347696 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A5A + 8 +HOLZ + 10 +5629.889835 + 20 +10324.384651 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A5B + 8 +HOLZ + 10 +5622.925829 + 20 +10315.200271 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A5C + 8 +HOLZ + 10 +5614.109189 + 20 +10304.519703 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A5D + 8 +HOLZ + 10 +5623.990306 + 20 +10400.811456 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A5E + 8 +HOLZ + 10 +5649.801664 + 20 +10358.899697 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A5F + 8 +HOLZ + 10 +5640.220329 + 20 +10335.240451 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A60 + 8 +HOLZ + 10 +5614.109189 + 20 +10304.519703 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +A61 + 8 +HOLZ + 0 +POLYLINE + 5 +A62 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +A63 + 8 +HOLZ + 10 +5604.149354 + 20 +10386.502187 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A64 + 8 +HOLZ + 10 +5604.149354 + 20 +10386.502187 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A65 + 8 +HOLZ + 10 +5604.391805 + 20 +10385.758983 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A66 + 8 +HOLZ + 10 +5605.032194 + 20 +10383.672402 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A67 + 8 +HOLZ + 10 +5605.940077 + 20 +10380.456987 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A68 + 8 +HOLZ + 10 +5606.98501 + 20 +10376.327284 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A69 + 8 +HOLZ + 10 +5608.036548 + 20 +10371.497836 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A6A + 8 +HOLZ + 10 +5608.964246 + 20 +10366.183189 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A6B + 8 +HOLZ + 10 +5609.637662 + 20 +10360.597886 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A6C + 8 +HOLZ + 10 +5609.926349 + 20 +10354.956472 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A6D + 8 +HOLZ + 10 +5609.696816 + 20 +10349.431258 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A6E + 8 +HOLZ + 10 +5608.803379 + 20 +10344.025619 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A6F + 8 +HOLZ + 10 +5607.097307 + 20 +10338.700696 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A70 + 8 +HOLZ + 10 +5604.429867 + 20 +10333.41763 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A71 + 8 +HOLZ + 10 +5600.652328 + 20 +10328.137562 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A72 + 8 +HOLZ + 10 +5595.615958 + 20 +10322.821634 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A73 + 8 +HOLZ + 10 +5589.172026 + 20 +10317.430986 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A74 + 8 +HOLZ + 10 +5581.171799 + 20 +10311.926761 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A75 + 8 +HOLZ + 10 +5604.149354 + 20 +10386.502187 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A76 + 8 +HOLZ + 10 +5615.42152 + 20 +10353.266514 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A77 + 8 +HOLZ + 10 +5604.713001 + 20 +10326.790675 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A78 + 8 +HOLZ + 10 +5581.171799 + 20 +10311.926761 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +A79 + 8 +HOLZ + 0 +POLYLINE + 5 +A7A + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +A7B + 8 +HOLZ + 10 +5578.223362 + 20 +10369.039414 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A7C + 8 +HOLZ + 10 +5578.223362 + 20 +10369.039414 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A7D + 8 +HOLZ + 10 +5578.903816 + 20 +10361.74781 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A7E + 8 +HOLZ + 10 +5578.186986 + 20 +10357.419447 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A7F + 8 +HOLZ + 10 +5576.374059 + 20 +10355.123569 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A80 + 8 +HOLZ + 10 +5573.76622 + 20 +10353.92942 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A81 + 8 +HOLZ + 10 +5570.664654 + 20 +10352.906244 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A82 + 8 +HOLZ + 10 +5567.370548 + 20 +10351.123285 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A83 + 8 +HOLZ + 10 +5564.185086 + 20 +10347.649787 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A84 + 8 +HOLZ + 10 +5561.409455 + 20 +10341.554992 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A85 + 8 +HOLZ + 10 +5582.16867 + 20 +10344.816808 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A86 + 8 +HOLZ + 10 +5567.996977 + 20 +10362.130177 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A87 + 8 +HOLZ + 10 +5561.409455 + 20 +10341.554992 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +A88 + 8 +HOLZ + 0 +POLYLINE + 5 +A89 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +148E + 8 +HOLZ + 10 +6227.243793 + 20 +10687.22017 + 30 +0.0 + 0 +VERTEX + 5 +148F + 8 +HOLZ + 10 +6187.499848 + 20 +10750.823777 + 30 +0.0 + 0 +VERTEX + 5 +1490 + 8 +HOLZ + 10 +6293.50586 + 20 +10817.063685 + 30 +0.0 + 0 +VERTEX + 5 +1491 + 8 +HOLZ + 10 +6333.249805 + 20 +10753.460078 + 30 +0.0 + 0 +SEQEND + 5 +1492 + 8 +HOLZ + 0 +POLYLINE + 5 +A8F + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +A90 + 8 +HOLZ + 10 +6292.600946 + 20 +10814.360786 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A91 + 8 +HOLZ + 10 +6292.600946 + 20 +10814.360786 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A92 + 8 +HOLZ + 10 +6296.498554 + 20 +10798.947977 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A93 + 8 +HOLZ + 10 +6298.351322 + 20 +10784.844931 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A94 + 8 +HOLZ + 10 +6298.616643 + 20 +10772.091106 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A95 + 8 +HOLZ + 10 +6297.751909 + 20 +10760.725963 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A96 + 8 +HOLZ + 10 +6296.214512 + 20 +10750.788961 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A97 + 8 +HOLZ + 10 +6294.461843 + 20 +10742.319559 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A98 + 8 +HOLZ + 10 +6292.951294 + 20 +10735.357217 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A99 + 8 +HOLZ + 10 +6292.140257 + 20 +10729.941393 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A9A + 8 +HOLZ + 10 +6306.127589 + 20 +10771.548686 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A9B + 8 +HOLZ + 10 +6292.963767 + 20 +10742.28649 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A9C + 8 +HOLZ + 10 +6292.140257 + 20 +10729.941393 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +A9D + 8 +HOLZ + 0 +POLYLINE + 5 +A9E + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +A9F + 8 +HOLZ + 10 +6268.929432 + 20 +10798.587885 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +AA0 + 8 +HOLZ + 10 +6268.929432 + 20 +10798.587885 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AA1 + 8 +HOLZ + 10 +6266.553194 + 20 +10797.54419 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AA2 + 8 +HOLZ + 10 +6265.862265 + 20 +10794.862575 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AA3 + 8 +HOLZ + 10 +6266.497383 + 20 +10790.838142 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AA4 + 8 +HOLZ + 10 +6268.099287 + 20 +10785.765993 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AA5 + 8 +HOLZ + 10 +6270.308718 + 20 +10779.94123 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AA6 + 8 +HOLZ + 10 +6272.766415 + 20 +10773.658954 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AA7 + 8 +HOLZ + 10 +6275.113117 + 20 +10767.214268 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AA8 + 8 +HOLZ + 10 +6276.989563 + 20 +10760.902274 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AA9 + 8 +HOLZ + 10 +6278.072009 + 20 +10754.923079 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AAA + 8 +HOLZ + 10 +6278.17878 + 20 +10749.096824 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AAB + 8 +HOLZ + 10 +6277.163715 + 20 +10743.148653 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AAC + 8 +HOLZ + 10 +6274.880654 + 20 +10736.803711 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AAD + 8 +HOLZ + 10 +6271.183438 + 20 +10729.787145 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AAE + 8 +HOLZ + 10 +6265.925907 + 20 +10721.824099 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AAF + 8 +HOLZ + 10 +6258.961901 + 20 +10712.639719 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AB0 + 8 +HOLZ + 10 +6250.145261 + 20 +10701.959151 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AB1 + 8 +HOLZ + 10 +6260.026378 + 20 +10798.250904 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +AB2 + 8 +HOLZ + 10 +6285.837736 + 20 +10756.339146 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +AB3 + 8 +HOLZ + 10 +6276.256401 + 20 +10732.679899 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +AB4 + 8 +HOLZ + 10 +6250.145261 + 20 +10701.959151 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +AB5 + 8 +HOLZ + 0 +POLYLINE + 5 +AB6 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +AB7 + 8 +HOLZ + 10 +6240.185426 + 20 +10783.941635 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +AB8 + 8 +HOLZ + 10 +6240.185426 + 20 +10783.941635 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AB9 + 8 +HOLZ + 10 +6240.427877 + 20 +10783.198431 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +ABA + 8 +HOLZ + 10 +6241.068266 + 20 +10781.11185 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +ABB + 8 +HOLZ + 10 +6241.976149 + 20 +10777.896435 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +ABC + 8 +HOLZ + 10 +6243.021082 + 20 +10773.766732 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +ABD + 8 +HOLZ + 10 +6244.07262 + 20 +10768.937284 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +ABE + 8 +HOLZ + 10 +6245.000318 + 20 +10763.622637 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +ABF + 8 +HOLZ + 10 +6245.673734 + 20 +10758.037334 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AC0 + 8 +HOLZ + 10 +6245.962421 + 20 +10752.39592 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AC1 + 8 +HOLZ + 10 +6245.732888 + 20 +10746.870707 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AC2 + 8 +HOLZ + 10 +6244.839451 + 20 +10741.465067 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AC3 + 8 +HOLZ + 10 +6243.133379 + 20 +10736.140144 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AC4 + 8 +HOLZ + 10 +6240.465939 + 20 +10730.857078 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AC5 + 8 +HOLZ + 10 +6236.6884 + 20 +10725.577011 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AC6 + 8 +HOLZ + 10 +6231.65203 + 20 +10720.261082 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AC7 + 8 +HOLZ + 10 +6225.208098 + 20 +10714.870435 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AC8 + 8 +HOLZ + 10 +6217.207872 + 20 +10709.366209 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AC9 + 8 +HOLZ + 10 +6240.185426 + 20 +10783.941635 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +ACA + 8 +HOLZ + 10 +6251.457592 + 20 +10750.705962 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +ACB + 8 +HOLZ + 10 +6240.749074 + 20 +10724.230123 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +ACC + 8 +HOLZ + 10 +6217.207872 + 20 +10709.366209 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +ACD + 8 +HOLZ + 0 +POLYLINE + 5 +ACE + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +ACF + 8 +HOLZ + 10 +6214.259434 + 20 +10766.478863 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +AD0 + 8 +HOLZ + 10 +6214.259434 + 20 +10766.478863 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AD1 + 8 +HOLZ + 10 +6214.939888 + 20 +10759.187258 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AD2 + 8 +HOLZ + 10 +6214.223058 + 20 +10754.858895 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AD3 + 8 +HOLZ + 10 +6212.410131 + 20 +10752.563017 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AD4 + 8 +HOLZ + 10 +6209.802292 + 20 +10751.368868 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AD5 + 8 +HOLZ + 10 +6206.700726 + 20 +10750.345692 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AD6 + 8 +HOLZ + 10 +6203.40662 + 20 +10748.562733 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AD7 + 8 +HOLZ + 10 +6200.221158 + 20 +10745.089235 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AD8 + 8 +HOLZ + 10 +6197.445527 + 20 +10738.994441 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AD9 + 8 +HOLZ + 10 +6218.204742 + 20 +10742.256256 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +ADA + 8 +HOLZ + 10 +6204.033049 + 20 +10759.569625 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +ADB + 8 +HOLZ + 10 +6197.445527 + 20 +10738.994441 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +ADC + 8 +HOLZ + 0 +POLYLINE + 5 +ADD + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +ADE + 8 +HOLZ + 10 +6850.295507 + 20 +11163.918311 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +ADF + 8 +HOLZ + 10 +6850.295507 + 20 +11163.918311 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AE0 + 8 +HOLZ + 10 +6850.97596 + 20 +11156.626706 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AE1 + 8 +HOLZ + 10 +6850.259131 + 20 +11152.298343 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AE2 + 8 +HOLZ + 10 +6848.446203 + 20 +11150.002465 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AE3 + 8 +HOLZ + 10 +6845.838364 + 20 +11148.808316 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AE4 + 8 +HOLZ + 10 +6842.736798 + 20 +11147.78514 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AE5 + 8 +HOLZ + 10 +6839.442692 + 20 +11146.002181 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AE6 + 8 +HOLZ + 10 +6836.25723 + 20 +11142.528683 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AE7 + 8 +HOLZ + 10 +6833.481599 + 20 +11136.433889 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AE8 + 8 +HOLZ + 10 +6854.240815 + 20 +11139.695704 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +AE9 + 8 +HOLZ + 10 +6840.069121 + 20 +11157.009073 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +AEA + 8 +HOLZ + 10 +6833.481599 + 20 +11136.433889 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +AEB + 8 +HOLZ + 0 +POLYLINE + 5 +AEC + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +AED + 8 +HOLZ + 10 +6876.221498 + 20 +11181.381083 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +AEE + 8 +HOLZ + 10 +6876.221498 + 20 +11181.381083 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AEF + 8 +HOLZ + 10 +6876.463949 + 20 +11180.63788 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AF0 + 8 +HOLZ + 10 +6877.104338 + 20 +11178.551298 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AF1 + 8 +HOLZ + 10 +6878.012221 + 20 +11175.335884 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AF2 + 8 +HOLZ + 10 +6879.057154 + 20 +11171.20618 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AF3 + 8 +HOLZ + 10 +6880.108692 + 20 +11166.376733 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AF4 + 8 +HOLZ + 10 +6881.036391 + 20 +11161.062085 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AF5 + 8 +HOLZ + 10 +6881.709806 + 20 +11155.476782 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AF6 + 8 +HOLZ + 10 +6881.998493 + 20 +11149.835369 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AF7 + 8 +HOLZ + 10 +6881.76896 + 20 +11144.310155 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AF8 + 8 +HOLZ + 10 +6880.875523 + 20 +11138.904516 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AF9 + 8 +HOLZ + 10 +6879.169451 + 20 +11133.579592 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AFA + 8 +HOLZ + 10 +6876.502011 + 20 +11128.296526 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AFB + 8 +HOLZ + 10 +6872.724472 + 20 +11123.016459 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AFC + 8 +HOLZ + 10 +6867.688102 + 20 +11117.70053 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AFD + 8 +HOLZ + 10 +6861.24417 + 20 +11112.309883 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AFE + 8 +HOLZ + 10 +6853.243944 + 20 +11106.805657 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AFF + 8 +HOLZ + 10 +6876.221498 + 20 +11181.381083 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B00 + 8 +HOLZ + 10 +6887.493664 + 20 +11148.14541 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B01 + 8 +HOLZ + 10 +6876.785146 + 20 +11121.669571 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B02 + 8 +HOLZ + 10 +6853.243944 + 20 +11106.805657 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +B03 + 8 +HOLZ + 0 +POLYLINE + 5 +B04 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +B05 + 8 +HOLZ + 10 +6904.965504 + 20 +11196.027333 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B06 + 8 +HOLZ + 10 +6904.965504 + 20 +11196.027333 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B07 + 8 +HOLZ + 10 +6902.589266 + 20 +11194.983638 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B08 + 8 +HOLZ + 10 +6901.898337 + 20 +11192.302023 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B09 + 8 +HOLZ + 10 +6902.533455 + 20 +11188.27759 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B0A + 8 +HOLZ + 10 +6904.135359 + 20 +11183.205441 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B0B + 8 +HOLZ + 10 +6906.34479 + 20 +11177.380678 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B0C + 8 +HOLZ + 10 +6908.802487 + 20 +11171.098403 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B0D + 8 +HOLZ + 10 +6911.149189 + 20 +11164.653716 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B0E + 8 +HOLZ + 10 +6913.025635 + 20 +11158.341722 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B0F + 8 +HOLZ + 10 +6914.108081 + 20 +11152.362528 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B10 + 8 +HOLZ + 10 +6914.214852 + 20 +11146.536272 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B11 + 8 +HOLZ + 10 +6913.199787 + 20 +11140.588101 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B12 + 8 +HOLZ + 10 +6910.916726 + 20 +11134.243159 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B13 + 8 +HOLZ + 10 +6907.21951 + 20 +11127.226593 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B14 + 8 +HOLZ + 10 +6901.961979 + 20 +11119.263547 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B15 + 8 +HOLZ + 10 +6894.997973 + 20 +11110.079167 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B16 + 8 +HOLZ + 10 +6886.181333 + 20 +11099.398599 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B17 + 8 +HOLZ + 10 +6896.06245 + 20 +11195.690352 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B18 + 8 +HOLZ + 10 +6921.873808 + 20 +11153.778594 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B19 + 8 +HOLZ + 10 +6912.292473 + 20 +11130.119347 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B1A + 8 +HOLZ + 10 +6886.181333 + 20 +11099.398599 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +B1B + 8 +HOLZ + 0 +POLYLINE + 5 +B1C + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +B1D + 8 +HOLZ + 10 +6928.637018 + 20 +11211.800234 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B1E + 8 +HOLZ + 10 +6928.637018 + 20 +11211.800234 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B1F + 8 +HOLZ + 10 +6932.534626 + 20 +11196.387425 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B20 + 8 +HOLZ + 10 +6934.387394 + 20 +11182.284379 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B21 + 8 +HOLZ + 10 +6934.652716 + 20 +11169.530554 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B22 + 8 +HOLZ + 10 +6933.787981 + 20 +11158.165412 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B23 + 8 +HOLZ + 10 +6932.250584 + 20 +11148.228409 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B24 + 8 +HOLZ + 10 +6930.497915 + 20 +11139.759007 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B25 + 8 +HOLZ + 10 +6928.987366 + 20 +11132.796665 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B26 + 8 +HOLZ + 10 +6928.17633 + 20 +11127.380841 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B27 + 8 +HOLZ + 10 +6942.163662 + 20 +11168.988135 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B28 + 8 +HOLZ + 10 +6928.999839 + 20 +11139.725938 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B29 + 8 +HOLZ + 10 +6928.17633 + 20 +11127.380841 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +B2A + 8 +HOLZ + 0 +POLYLINE + 5 +B2B + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1493 + 8 +HOLZ + 10 +6863.279865 + 20 +11084.659618 + 30 +0.0 + 0 +VERTEX + 5 +1494 + 8 +HOLZ + 10 +6823.53592 + 20 +11148.263225 + 30 +0.0 + 0 +VERTEX + 5 +1495 + 8 +HOLZ + 10 +6929.541932 + 20 +11214.503133 + 30 +0.0 + 0 +VERTEX + 5 +1496 + 8 +HOLZ + 10 +6969.285877 + 20 +11150.899526 + 30 +0.0 + 0 +SEQEND + 5 +1497 + 8 +HOLZ + 0 +POLYLINE + 5 +B31 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1498 + 8 +HOLZ + 10 +7499.315937 + 20 +11482.099066 + 30 +0.0 + 0 +VERTEX + 5 +1499 + 8 +HOLZ + 10 +7459.571992 + 20 +11545.702674 + 30 +0.0 + 0 +VERTEX + 5 +149A + 8 +HOLZ + 10 +7565.578004 + 20 +11611.942582 + 30 +0.0 + 0 +VERTEX + 5 +149B + 8 +HOLZ + 10 +7605.321949 + 20 +11548.338974 + 30 +0.0 + 0 +SEQEND + 5 +149C + 8 +HOLZ + 0 +POLYLINE + 5 +B37 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +B38 + 8 +HOLZ + 10 +7486.331579 + 20 +11561.357759 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B39 + 8 +HOLZ + 10 +7486.331579 + 20 +11561.357759 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B3A + 8 +HOLZ + 10 +7487.012032 + 20 +11554.066154 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B3B + 8 +HOLZ + 10 +7486.295203 + 20 +11549.737791 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B3C + 8 +HOLZ + 10 +7484.482275 + 20 +11547.441913 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B3D + 8 +HOLZ + 10 +7481.874436 + 20 +11546.247764 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B3E + 8 +HOLZ + 10 +7478.772871 + 20 +11545.224589 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B3F + 8 +HOLZ + 10 +7475.478764 + 20 +11543.44163 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B40 + 8 +HOLZ + 10 +7472.293302 + 20 +11539.968131 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B41 + 8 +HOLZ + 10 +7469.517671 + 20 +11533.873337 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B42 + 8 +HOLZ + 10 +7490.276887 + 20 +11537.135152 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B43 + 8 +HOLZ + 10 +7476.105193 + 20 +11554.448521 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B44 + 8 +HOLZ + 10 +7469.517671 + 20 +11533.873337 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +B45 + 8 +HOLZ + 0 +POLYLINE + 5 +B46 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +B47 + 8 +HOLZ + 10 +7512.257571 + 20 +11578.820531 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B48 + 8 +HOLZ + 10 +7512.257571 + 20 +11578.820531 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B49 + 8 +HOLZ + 10 +7512.500021 + 20 +11578.077328 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B4A + 8 +HOLZ + 10 +7513.14041 + 20 +11575.990746 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B4B + 8 +HOLZ + 10 +7514.048293 + 20 +11572.775332 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B4C + 8 +HOLZ + 10 +7515.093226 + 20 +11568.645628 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B4D + 8 +HOLZ + 10 +7516.144764 + 20 +11563.816181 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B4E + 8 +HOLZ + 10 +7517.072463 + 20 +11558.501533 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B4F + 8 +HOLZ + 10 +7517.745878 + 20 +11552.91623 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B50 + 8 +HOLZ + 10 +7518.034565 + 20 +11547.274817 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B51 + 8 +HOLZ + 10 +7517.805032 + 20 +11541.749603 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B52 + 8 +HOLZ + 10 +7516.911596 + 20 +11536.343964 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B53 + 8 +HOLZ + 10 +7515.205523 + 20 +11531.019041 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B54 + 8 +HOLZ + 10 +7512.538083 + 20 +11525.735975 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B55 + 8 +HOLZ + 10 +7508.760544 + 20 +11520.455907 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B56 + 8 +HOLZ + 10 +7503.724174 + 20 +11515.139979 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B57 + 8 +HOLZ + 10 +7497.280242 + 20 +11509.749331 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B58 + 8 +HOLZ + 10 +7489.280016 + 20 +11504.245105 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B59 + 8 +HOLZ + 10 +7512.257571 + 20 +11578.820531 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B5A + 8 +HOLZ + 10 +7523.529736 + 20 +11545.584858 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B5B + 8 +HOLZ + 10 +7512.821218 + 20 +11519.109019 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B5C + 8 +HOLZ + 10 +7489.280016 + 20 +11504.245105 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +B5D + 8 +HOLZ + 0 +POLYLINE + 5 +B5E + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +B5F + 8 +HOLZ + 10 +7541.001576 + 20 +11593.466782 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B60 + 8 +HOLZ + 10 +7541.001576 + 20 +11593.466782 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B61 + 8 +HOLZ + 10 +7538.625338 + 20 +11592.423086 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B62 + 8 +HOLZ + 10 +7537.934409 + 20 +11589.741472 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B63 + 8 +HOLZ + 10 +7538.569527 + 20 +11585.717039 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B64 + 8 +HOLZ + 10 +7540.171432 + 20 +11580.64489 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B65 + 8 +HOLZ + 10 +7542.380863 + 20 +11574.820126 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B66 + 8 +HOLZ + 10 +7544.838559 + 20 +11568.537851 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B67 + 8 +HOLZ + 10 +7547.185261 + 20 +11562.093165 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B68 + 8 +HOLZ + 10 +7549.061707 + 20 +11555.78117 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B69 + 8 +HOLZ + 10 +7550.144153 + 20 +11549.801976 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B6A + 8 +HOLZ + 10 +7550.250924 + 20 +11543.97572 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B6B + 8 +HOLZ + 10 +7549.235859 + 20 +11538.027549 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B6C + 8 +HOLZ + 10 +7546.952798 + 20 +11531.682607 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B6D + 8 +HOLZ + 10 +7543.255582 + 20 +11524.666041 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B6E + 8 +HOLZ + 10 +7537.998051 + 20 +11516.702995 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B6F + 8 +HOLZ + 10 +7531.034045 + 20 +11507.518615 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B70 + 8 +HOLZ + 10 +7522.217405 + 20 +11496.838047 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B71 + 8 +HOLZ + 10 +7532.098522 + 20 +11593.1298 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B72 + 8 +HOLZ + 10 +7557.90988 + 20 +11551.218042 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B73 + 8 +HOLZ + 10 +7548.328545 + 20 +11527.558795 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B74 + 8 +HOLZ + 10 +7522.217405 + 20 +11496.838047 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +B75 + 8 +HOLZ + 0 +POLYLINE + 5 +B76 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +B77 + 8 +HOLZ + 10 +7564.673091 + 20 +11609.239682 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B78 + 8 +HOLZ + 10 +7564.673091 + 20 +11609.239682 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B79 + 8 +HOLZ + 10 +7568.570698 + 20 +11593.826873 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B7A + 8 +HOLZ + 10 +7570.423467 + 20 +11579.723827 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B7B + 8 +HOLZ + 10 +7570.688788 + 20 +11566.970003 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B7C + 8 +HOLZ + 10 +7569.824053 + 20 +11555.60486 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B7D + 8 +HOLZ + 10 +7568.286656 + 20 +11545.667858 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B7E + 8 +HOLZ + 10 +7566.533987 + 20 +11537.198456 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B7F + 8 +HOLZ + 10 +7565.023438 + 20 +11530.236113 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B80 + 8 +HOLZ + 10 +7564.212402 + 20 +11524.820289 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B81 + 8 +HOLZ + 10 +7578.199734 + 20 +11566.427583 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B82 + 8 +HOLZ + 10 +7565.035912 + 20 +11537.165386 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B83 + 8 +HOLZ + 10 +7564.212402 + 20 +11524.820289 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +B84 + 8 +HOLZ + 0 +POLYLINE + 5 +B85 + 8 +DACHZIEGEL + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +149D + 8 +DACHZIEGEL + 10 +7569.799701 + 20 +11626.488957 + 30 +0.0 + 0 +VERTEX + 5 +149E + 8 +DACHZIEGEL + 10 +7603.921761 + 20 +11571.715136 + 30 +0.0 + 0 +VERTEX + 5 +149F + 8 +DACHZIEGEL + 10 +7653.553961 + 20 +11602.71917 + 30 +0.0 + 0 +VERTEX + 5 +14A0 + 8 +DACHZIEGEL + 10 +7632.873924 + 20 +11684.363141 + 30 +0.0 + 0 +VERTEX + 5 +14A1 + 8 +DACHZIEGEL + 10 +7570.833703 + 20 +11714.333651 + 30 +0.0 + 0 +VERTEX + 5 +14A2 + 8 +DACHZIEGEL + 10 +7539.813648 + 20 +11694.697819 + 30 +0.0 + 0 +VERTEX + 5 +14A3 + 8 +DACHZIEGEL + 10 +7538.779646 + 20 +11663.693785 + 30 +0.0 + 0 +VERTEX + 5 +14A4 + 8 +DACHZIEGEL + 10 +7512.9296 + 20 +11649.225221 + 30 +0.0 + 0 +VERTEX + 5 +14A5 + 8 +DACHZIEGEL + 10 +7489.147558 + 20 +11659.559899 + 30 +0.0 + 0 +VERTEX + 5 +14A6 + 8 +DACHZIEGEL + 10 +7461.229397 + 20 +11641.990975 + 30 +0.0 + 0 +VERTEX + 5 +14A7 + 8 +DACHZIEGEL + 10 +7459.161394 + 20 +11616.154279 + 30 +0.0 + 0 +VERTEX + 5 +14A8 + 8 +DACHZIEGEL + 10 +6736.224318 + 20 +11283.235231 + 30 +0.0 + 0 +VERTEX + 5 +14A9 + 8 +DACHZIEGEL + 10 +6781.259162 + 20 +11210.253272 + 30 +0.0 + 0 +VERTEX + 5 +14AA + 8 +DACHZIEGEL + 10 +6811.396774 + 20 +11224.597085 + 30 +0.0 + 0 +VERTEX + 5 +14AB + 8 +DACHZIEGEL + 10 +6812.114315 + 20 +11258.305081 + 30 +0.0 + 0 +VERTEX + 5 +14AC + 8 +DACHZIEGEL + 10 +6849.427559 + 20 +11279.103575 + 30 +0.0 + 0 +VERTEX + 5 +14AD + 8 +DACHZIEGEL + 10 +6873.824621 + 20 +11266.911369 + 30 +0.0 + 0 +VERTEX + 5 +14AE + 8 +DACHZIEGEL + 10 +6892.481243 + 20 +11274.083275 + 30 +0.0 + 0 +VERTEX + 5 +14AF + 8 +DACHZIEGEL + 10 +6894.633977 + 20 +11310.659964 + 30 +0.0 + 0 +VERTEX + 5 +14B0 + 8 +DACHZIEGEL + 10 +7572.874908 + 20 +11627.370984 + 30 +0.0 + 0 +SEQEND + 5 +14B1 + 8 +DACHZIEGEL + 0 +POLYLINE + 5 +B9B + 8 +DACHZIEGEL + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +14B2 + 8 +DACHZIEGEL + 10 +6297.727557 + 20 +10831.610061 + 30 +0.0 + 0 +VERTEX + 5 +14B3 + 8 +DACHZIEGEL + 10 +6331.849617 + 20 +10776.83624 + 30 +0.0 + 0 +VERTEX + 5 +14B4 + 8 +DACHZIEGEL + 10 +6381.481816 + 20 +10807.840274 + 30 +0.0 + 0 +VERTEX + 5 +14B5 + 8 +DACHZIEGEL + 10 +6360.80178 + 20 +10889.484244 + 30 +0.0 + 0 +VERTEX + 5 +14B6 + 8 +DACHZIEGEL + 10 +6298.761559 + 20 +10919.454755 + 30 +0.0 + 0 +VERTEX + 5 +14B7 + 8 +DACHZIEGEL + 10 +6267.741504 + 20 +10899.818922 + 30 +0.0 + 0 +VERTEX + 5 +14B8 + 8 +DACHZIEGEL + 10 +6266.707502 + 20 +10868.814888 + 30 +0.0 + 0 +VERTEX + 5 +14B9 + 8 +DACHZIEGEL + 10 +6240.857456 + 20 +10854.346325 + 30 +0.0 + 0 +VERTEX + 5 +14BA + 8 +DACHZIEGEL + 10 +6217.075414 + 20 +10864.681003 + 30 +0.0 + 0 +VERTEX + 5 +14BB + 8 +DACHZIEGEL + 10 +6189.157253 + 20 +10847.112078 + 30 +0.0 + 0 +VERTEX + 5 +14BC + 8 +DACHZIEGEL + 10 +6187.089249 + 20 +10821.275383 + 30 +0.0 + 0 +VERTEX + 5 +14BD + 8 +DACHZIEGEL + 10 +5464.152174 + 20 +10488.356335 + 30 +0.0 + 0 +VERTEX + 5 +14BE + 8 +DACHZIEGEL + 10 +5509.187018 + 20 +10415.374375 + 30 +0.0 + 0 +VERTEX + 5 +14BF + 8 +DACHZIEGEL + 10 +5539.32463 + 20 +10429.718189 + 30 +0.0 + 0 +VERTEX + 5 +14C0 + 8 +DACHZIEGEL + 10 +5540.042171 + 20 +10463.426184 + 30 +0.0 + 0 +VERTEX + 5 +14C1 + 8 +DACHZIEGEL + 10 +5577.355415 + 20 +10484.224679 + 30 +0.0 + 0 +VERTEX + 5 +14C2 + 8 +DACHZIEGEL + 10 +5601.752476 + 20 +10472.032472 + 30 +0.0 + 0 +VERTEX + 5 +14C3 + 8 +DACHZIEGEL + 10 +5620.409099 + 20 +10479.204379 + 30 +0.0 + 0 +VERTEX + 5 +14C4 + 8 +DACHZIEGEL + 10 +5622.561833 + 20 +10515.781068 + 30 +0.0 + 0 +VERTEX + 5 +14C5 + 8 +DACHZIEGEL + 10 +6300.802764 + 20 +10832.492088 + 30 +0.0 + 0 +SEQEND + 5 +14C6 + 8 +DACHZIEGEL + 0 +POLYLINE + 5 +BB1 + 8 +DACHZIEGEL + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +14C7 + 8 +DACHZIEGEL + 10 +6933.763629 + 20 +11229.049509 + 30 +0.0 + 0 +VERTEX + 5 +14C8 + 8 +DACHZIEGEL + 10 +6967.885689 + 20 +11174.275688 + 30 +0.0 + 0 +VERTEX + 5 +14C9 + 8 +DACHZIEGEL + 10 +7017.517888 + 20 +11205.279722 + 30 +0.0 + 0 +VERTEX + 5 +14CA + 8 +DACHZIEGEL + 10 +6996.837852 + 20 +11286.923693 + 30 +0.0 + 0 +VERTEX + 5 +14CB + 8 +DACHZIEGEL + 10 +6934.797631 + 20 +11316.894203 + 30 +0.0 + 0 +VERTEX + 5 +14CC + 8 +DACHZIEGEL + 10 +6903.777576 + 20 +11297.258371 + 30 +0.0 + 0 +VERTEX + 5 +14CD + 8 +DACHZIEGEL + 10 +6902.743574 + 20 +11266.254336 + 30 +0.0 + 0 +VERTEX + 5 +14CE + 8 +DACHZIEGEL + 10 +6876.893528 + 20 +11251.785773 + 30 +0.0 + 0 +VERTEX + 5 +14CF + 8 +DACHZIEGEL + 10 +6853.111486 + 20 +11262.120451 + 30 +0.0 + 0 +VERTEX + 5 +14D0 + 8 +DACHZIEGEL + 10 +6825.193325 + 20 +11244.551526 + 30 +0.0 + 0 +VERTEX + 5 +14D1 + 8 +DACHZIEGEL + 10 +6823.125322 + 20 +11218.714831 + 30 +0.0 + 0 +VERTEX + 5 +14D2 + 8 +DACHZIEGEL + 10 +6100.188246 + 20 +10885.795783 + 30 +0.0 + 0 +VERTEX + 5 +14D3 + 8 +DACHZIEGEL + 10 +6145.22309 + 20 +10812.813824 + 30 +0.0 + 0 +VERTEX + 5 +14D4 + 8 +DACHZIEGEL + 10 +6175.360702 + 20 +10827.157637 + 30 +0.0 + 0 +VERTEX + 5 +14D5 + 8 +DACHZIEGEL + 10 +6176.078243 + 20 +10860.865633 + 30 +0.0 + 0 +VERTEX + 5 +14D6 + 8 +DACHZIEGEL + 10 +6213.391487 + 20 +10881.664127 + 30 +0.0 + 0 +VERTEX + 5 +14D7 + 8 +DACHZIEGEL + 10 +6237.788549 + 20 +10869.471921 + 30 +0.0 + 0 +VERTEX + 5 +14D8 + 8 +DACHZIEGEL + 10 +6256.445171 + 20 +10876.643827 + 30 +0.0 + 0 +VERTEX + 5 +14D9 + 8 +DACHZIEGEL + 10 +6258.597905 + 20 +10913.220516 + 30 +0.0 + 0 +VERTEX + 5 +14DA + 8 +DACHZIEGEL + 10 +6936.838836 + 20 +11229.931536 + 30 +0.0 + 0 +SEQEND + 5 +14DB + 8 +DACHZIEGEL + 0 +POLYLINE + 5 +BC7 + 8 +DACHZIEGEL + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +14DC + 8 +DACHZIEGEL + 10 +5025.655413 + 20 +10036.731165 + 30 +0.0 + 0 +VERTEX + 5 +14DD + 8 +DACHZIEGEL + 10 +5059.777473 + 20 +9981.957343 + 30 +0.0 + 0 +VERTEX + 5 +14DE + 8 +DACHZIEGEL + 10 +5109.409672 + 20 +10012.961377 + 30 +0.0 + 0 +VERTEX + 5 +14DF + 8 +DACHZIEGEL + 10 +5088.729635 + 20 +10094.605348 + 30 +0.0 + 0 +VERTEX + 5 +14E0 + 8 +DACHZIEGEL + 10 +5026.689414 + 20 +10124.575859 + 30 +0.0 + 0 +VERTEX + 5 +14E1 + 8 +DACHZIEGEL + 10 +4995.669359 + 20 +10104.940026 + 30 +0.0 + 0 +VERTEX + 5 +14E2 + 8 +DACHZIEGEL + 10 +4994.635358 + 20 +10073.935992 + 30 +0.0 + 0 +VERTEX + 5 +14E3 + 8 +DACHZIEGEL + 10 +4968.785312 + 20 +10059.467429 + 30 +0.0 + 0 +VERTEX + 5 +14E4 + 8 +DACHZIEGEL + 10 +4945.00327 + 20 +10069.802107 + 30 +0.0 + 0 +VERTEX + 5 +14E5 + 8 +DACHZIEGEL + 10 +4917.085109 + 20 +10052.233182 + 30 +0.0 + 0 +VERTEX + 5 +14E6 + 8 +DACHZIEGEL + 10 +4915.017105 + 20 +10026.396487 + 30 +0.0 + 0 +VERTEX + 5 +14E7 + 8 +DACHZIEGEL + 10 +4192.08003 + 20 +9693.477439 + 30 +0.0 + 0 +VERTEX + 5 +14E8 + 8 +DACHZIEGEL + 10 +4237.114874 + 20 +9620.495479 + 30 +0.0 + 0 +VERTEX + 5 +14E9 + 8 +DACHZIEGEL + 10 +4267.252486 + 20 +9634.839292 + 30 +0.0 + 0 +VERTEX + 5 +14EA + 8 +DACHZIEGEL + 10 +4267.970027 + 20 +9668.547288 + 30 +0.0 + 0 +VERTEX + 5 +14EB + 8 +DACHZIEGEL + 10 +4305.283271 + 20 +9689.345782 + 30 +0.0 + 0 +VERTEX + 5 +14EC + 8 +DACHZIEGEL + 10 +4329.680332 + 20 +9677.153576 + 30 +0.0 + 0 +VERTEX + 5 +14ED + 8 +DACHZIEGEL + 10 +4348.336954 + 20 +9684.325483 + 30 +0.0 + 0 +VERTEX + 5 +14EE + 8 +DACHZIEGEL + 10 +4350.489689 + 20 +9720.902172 + 30 +0.0 + 0 +VERTEX + 5 +14EF + 8 +DACHZIEGEL + 10 +5028.73062 + 20 +10037.613191 + 30 +0.0 + 0 +SEQEND + 5 +14F0 + 8 +DACHZIEGEL + 0 +POLYLINE + 5 +BDD + 8 +DACHZIEGEL + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +14F1 + 8 +DACHZIEGEL + 10 +5661.691485 + 20 +10434.170613 + 30 +0.0 + 0 +VERTEX + 5 +14F2 + 8 +DACHZIEGEL + 10 +5695.813545 + 20 +10379.396791 + 30 +0.0 + 0 +VERTEX + 5 +14F3 + 8 +DACHZIEGEL + 10 +5745.445744 + 20 +10410.400826 + 30 +0.0 + 0 +VERTEX + 5 +14F4 + 8 +DACHZIEGEL + 10 +5724.765708 + 20 +10492.044796 + 30 +0.0 + 0 +VERTEX + 5 +14F5 + 8 +DACHZIEGEL + 10 +5662.725486 + 20 +10522.015307 + 30 +0.0 + 0 +VERTEX + 5 +14F6 + 8 +DACHZIEGEL + 10 +5631.705431 + 20 +10502.379474 + 30 +0.0 + 0 +VERTEX + 5 +14F7 + 8 +DACHZIEGEL + 10 +5630.67143 + 20 +10471.37544 + 30 +0.0 + 0 +VERTEX + 5 +14F8 + 8 +DACHZIEGEL + 10 +5604.821384 + 20 +10456.906877 + 30 +0.0 + 0 +VERTEX + 5 +14F9 + 8 +DACHZIEGEL + 10 +5581.039342 + 20 +10467.241555 + 30 +0.0 + 0 +VERTEX + 5 +14FA + 8 +DACHZIEGEL + 10 +5553.121181 + 20 +10449.67263 + 30 +0.0 + 0 +VERTEX + 5 +14FB + 8 +DACHZIEGEL + 10 +5551.053177 + 20 +10423.835935 + 30 +0.0 + 0 +VERTEX + 5 +14FC + 8 +DACHZIEGEL + 10 +4828.116102 + 20 +10090.916887 + 30 +0.0 + 0 +VERTEX + 5 +14FD + 8 +DACHZIEGEL + 10 +4873.150946 + 20 +10017.934927 + 30 +0.0 + 0 +VERTEX + 5 +14FE + 8 +DACHZIEGEL + 10 +4903.288558 + 20 +10032.27874 + 30 +0.0 + 0 +VERTEX + 5 +14FF + 8 +DACHZIEGEL + 10 +4904.006099 + 20 +10065.986736 + 30 +0.0 + 0 +VERTEX + 5 +1500 + 8 +DACHZIEGEL + 10 +4941.319343 + 20 +10086.785231 + 30 +0.0 + 0 +VERTEX + 5 +1501 + 8 +DACHZIEGEL + 10 +4965.716404 + 20 +10074.593024 + 30 +0.0 + 0 +VERTEX + 5 +1502 + 8 +DACHZIEGEL + 10 +4984.373027 + 20 +10081.764931 + 30 +0.0 + 0 +VERTEX + 5 +1503 + 8 +DACHZIEGEL + 10 +4986.525761 + 20 +10118.34162 + 30 +0.0 + 0 +VERTEX + 5 +1504 + 8 +DACHZIEGEL + 10 +5664.766692 + 20 +10435.052639 + 30 +0.0 + 0 +SEQEND + 5 +1505 + 8 +DACHZIEGEL + 0 +POLYLINE + 5 +BF3 + 8 +REGENRINNE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +1506 + 8 +REGENRINNE + 10 +4751.85938 + 20 +9780.360132 + 30 +0.0 + 0 +VERTEX + 5 +1507 + 8 +REGENRINNE + 10 +4370.237737 + 20 +9541.896463 + 30 +0.0 + 0 +SEQEND + 5 +1508 + 8 +REGENRINNE + 0 +POLYLINE + 5 +BF7 + 8 +REGENRINNE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +1509 + 8 +REGENRINNE + 10 +4370.237737 + 20 +9541.896463 + 30 +0.0 + 0 +VERTEX + 5 +150A + 8 +REGENRINNE + 10 +4370.237737 + 20 +9435.360132 + 30 +0.0 + 0 +SEQEND + 5 +150B + 8 +REGENRINNE + 0 +ARC + 5 +BFB + 8 +REGENRINNE + 10 +4178.34201 + 20 +9422.824462 + 30 +0.0 + 40 +188.933697 + 50 +163.855305 + 51 +3.804345 + 0 +ARC + 5 +BFC + 8 +REGENRINNE + 10 +3985.192714 + 20 +9473.693466 + 30 +0.0 + 40 +11.785113 + 50 +8.130102 + 51 +225.0 + 0 +ARC + 5 +BFD + 8 +REGENRINNE + 10 +3974.716523 + 20 +9464.645847 + 30 +0.0 + 40 +12.876969 + 50 +176.82017 + 51 +56.309932 + 0 +POLYLINE + 5 +BFE + 8 +REGENRINNE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +BFF + 8 +REGENRINNE + 10 +3961.85938 + 20 +9465.360132 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +C00 + 8 +REGENRINNE + 10 +3961.85938 + 20 +9465.360132 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C01 + 8 +REGENRINNE + 10 +3963.73438 + 20 +9472.181421 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C02 + 8 +REGENRINNE + 10 +3965.60938 + 20 +9477.742945 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C03 + 8 +REGENRINNE + 10 +3967.48438 + 20 +9482.191187 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C04 + 8 +REGENRINNE + 10 +3969.35938 + 20 +9485.672632 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C05 + 8 +REGENRINNE + 10 +3971.23438 + 20 +9488.333765 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C06 + 8 +REGENRINNE + 10 +3973.10938 + 20 +9490.32107 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C07 + 8 +REGENRINNE + 10 +3974.98438 + 20 +9491.781031 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C08 + 8 +REGENRINNE + 10 +3976.85938 + 20 +9492.860132 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C09 + 8 +REGENRINNE + 10 +3978.736822 + 20 +9493.682886 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C0A + 8 +REGENRINNE + 10 +3980.628911 + 20 +9494.285914 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C0B + 8 +REGENRINNE + 10 +3982.550298 + 20 +9494.683863 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C0C + 8 +REGENRINNE + 10 +3984.51563 + 20 +9494.891382 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C0D + 8 +REGENRINNE + 10 +3986.539556 + 20 +9494.923121 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C0E + 8 +REGENRINNE + 10 +3988.636724 + 20 +9494.793726 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C0F + 8 +REGENRINNE + 10 +3990.821783 + 20 +9494.517847 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C10 + 8 +REGENRINNE + 10 +3993.10938 + 20 +9494.110132 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C11 + 8 +REGENRINNE + 10 +3995.494634 + 20 +9493.560816 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C12 + 8 +REGENRINNE + 10 +3997.894536 + 20 +9492.762476 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C13 + 8 +REGENRINNE + 10 +4000.206548 + 20 +9491.583277 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C14 + 8 +REGENRINNE + 10 +4002.32813 + 20 +9489.891382 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C15 + 8 +REGENRINNE + 10 +4004.156743 + 20 +9487.554957 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C16 + 8 +REGENRINNE + 10 +4005.589849 + 20 +9484.442164 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C17 + 8 +REGENRINNE + 10 +4006.524908 + 20 +9480.421168 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C18 + 8 +REGENRINNE + 10 +4006.85938 + 20 +9475.360132 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C19 + 8 +REGENRINNE + 10 +3966.85938 + 20 +9485.360132 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +C1A + 8 +REGENRINNE + 10 +3976.85938 + 20 +9495.360132 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +C1B + 8 +REGENRINNE + 10 +3991.85938 + 20 +9495.360132 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +C1C + 8 +REGENRINNE + 10 +4006.85938 + 20 +9490.360132 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +C1D + 8 +REGENRINNE + 10 +4006.85938 + 20 +9475.360132 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +C1E + 8 +REGENRINNE + 0 +ARC + 5 +C1F + 8 +REGENRINNE + 10 +4177.065242 + 20 +9431.201026 + 30 +0.0 + 40 +175.841014 + 50 +165.455559 + 51 +6.255194 + 0 +ARC + 5 +C20 + 8 +REGENRINNE + 10 +4339.35938 + 20 +9450.360132 + 30 +0.0 + 40 +12.5 + 50 +0.0 + 51 +180.0 + 0 +LINE + 5 +C21 + 8 +REGENRINNE + 10 +4326.85938 + 20 +9450.360132 + 30 +0.0 + 11 +4326.85938 + 21 +9435.360132 + 31 +0.0 + 0 +POLYLINE + 5 +C22 + 8 +REGENRINNE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +150C + 8 +REGENRINNE + 10 +4356.85938 + 20 +9535.360132 + 30 +0.0 + 0 +VERTEX + 5 +150D + 8 +REGENRINNE + 10 +4356.85938 + 20 +9500.360132 + 30 +0.0 + 0 +VERTEX + 5 +150E + 8 +REGENRINNE + 10 +4316.85938 + 20 +9460.360132 + 30 +0.0 + 0 +VERTEX + 5 +150F + 8 +REGENRINNE + 10 +4316.85938 + 20 +9435.360132 + 30 +0.0 + 0 +SEQEND + 5 +1510 + 8 +REGENRINNE + 0 +ARC + 5 +C28 + 8 +REGENRINNE + 10 +4326.85938 + 20 +9431.193466 + 30 +0.0 + 40 +10.833333 + 50 +157.380135 + 51 +22.619865 + 0 +POLYLINE + 5 +C29 + 8 +REGENRINNE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1511 + 8 +REGENRINNE + 10 +4351.85938 + 20 +9525.360132 + 30 +0.0 + 0 +VERTEX + 5 +1512 + 8 +REGENRINNE + 10 +4366.85938 + 20 +9525.360132 + 30 +0.0 + 0 +SEQEND + 5 +1513 + 8 +REGENRINNE + 0 +POLYLINE + 5 +C2D + 8 +REGENRINNE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1514 + 8 +REGENRINNE + 10 +4351.85938 + 20 +9510.360132 + 30 +0.0 + 0 +VERTEX + 5 +1515 + 8 +REGENRINNE + 10 +4371.85938 + 20 +9510.360132 + 30 +0.0 + 0 +SEQEND + 5 +1516 + 8 +REGENRINNE + 0 +POLYLINE + 5 +C31 + 8 +SCHNITTKANTEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +1517 + 8 +SCHNITTKANTEN + 10 +4736.85938 + 20 +7695.360132 + 30 +0.0 + 0 +VERTEX + 5 +1518 + 8 +SCHNITTKANTEN + 10 +6636.85938 + 20 +7695.360132 + 30 +0.0 + 0 +SEQEND + 5 +1519 + 8 +SCHNITTKANTEN + 0 +POLYLINE + 5 +C35 + 8 +SCHNITTKANTEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +151A + 8 +SCHNITTKANTEN + 10 +8531.85938 + 20 +11010.360132 + 30 +0.0 + 0 +VERTEX + 5 +151B + 8 +SCHNITTKANTEN + 10 +7842.964337 + 20 +12112.822657 + 30 +0.0 + 0 +SEQEND + 5 +151C + 8 +SCHNITTKANTEN + 0 +POLYLINE + 5 +C39 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +151D + 8 +HOLZ + 10 +5339.505129 + 20 +9482.537918 + 30 +0.0 + 0 +VERTEX + 5 +151E + 8 +HOLZ + 10 +5131.977291 + 20 +9352.860132 + 30 +0.0 + 0 +SEQEND + 5 +151F + 8 +HOLZ + 0 +POLYLINE + 5 +C3D + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1520 + 8 +DETAILS + 10 +5315.976103 + 20 +8261.227005 + 30 +0.0 + 0 +VERTEX + 5 +1521 + 8 +DETAILS + 10 +5315.976103 + 20 +8186.227005 + 30 +0.0 + 0 +SEQEND + 5 +1522 + 8 +DETAILS + 0 +POLYLINE + 5 +C41 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1523 + 8 +DETAILS + 10 +5239.35938 + 20 +8298.787465 + 30 +0.0 + 0 +VERTEX + 5 +1524 + 8 +DETAILS + 10 +5239.35938 + 20 +8148.787465 + 30 +0.0 + 0 +SEQEND + 5 +1525 + 8 +DETAILS + 0 +POLYLINE + 5 +C45 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1526 + 8 +DETAILS + 10 +5126.85938 + 20 +8223.787465 + 30 +0.0 + 0 +VERTEX + 5 +1527 + 8 +DETAILS + 10 +5189.35938 + 20 +8223.787465 + 30 +0.0 + 0 +SEQEND + 5 +1528 + 8 +DETAILS + 0 +POLYLINE + 5 +C49 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1529 + 8 +DETAILS + 10 +5014.35938 + 20 +8223.787465 + 30 +0.0 + 0 +VERTEX + 5 +152A + 8 +DETAILS + 10 +5089.35938 + 20 +8223.787465 + 30 +0.0 + 0 +SEQEND + 5 +152B + 8 +DETAILS + 0 +POLYLINE + 5 +C4D + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +152C + 8 +DETAILS + 10 +5376.85938 + 20 +8223.787465 + 30 +0.0 + 0 +VERTEX + 5 +152D + 8 +DETAILS + 10 +5439.35938 + 20 +8223.787465 + 30 +0.0 + 0 +SEQEND + 5 +152E + 8 +DETAILS + 0 +POLYLINE + 5 +C51 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +152F + 8 +DETAILS + 10 +5201.85938 + 20 +8223.787465 + 30 +0.0 + 0 +VERTEX + 5 +1530 + 8 +DETAILS + 10 +5339.35938 + 20 +8223.787465 + 30 +0.0 + 0 +SEQEND + 5 +1531 + 8 +DETAILS + 0 +POLYLINE + 5 +C55 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1532 + 8 +DETAILS + 10 +5689.35938 + 20 +8223.787465 + 30 +0.0 + 0 +VERTEX + 5 +1533 + 8 +DETAILS + 10 +5764.35938 + 20 +8223.787465 + 30 +0.0 + 0 +SEQEND + 5 +1534 + 8 +DETAILS + 0 +POLYLINE + 5 +C59 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1535 + 8 +DETAILS + 10 +5589.35938 + 20 +8223.787465 + 30 +0.0 + 0 +VERTEX + 5 +1536 + 8 +DETAILS + 10 +5639.35938 + 20 +8223.787465 + 30 +0.0 + 0 +SEQEND + 5 +1537 + 8 +DETAILS + 0 +POLYLINE + 5 +C5D + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1538 + 8 +DETAILS + 10 +5476.85938 + 20 +8223.787465 + 30 +0.0 + 0 +VERTEX + 5 +1539 + 8 +DETAILS + 10 +5539.35938 + 20 +8223.787465 + 30 +0.0 + 0 +SEQEND + 5 +153A + 8 +DETAILS + 0 +INSERT + 5 +C61 + 8 +SCHRAFFUR + 2 +*X5 + 10 +-743.14062 + 20 +-614.639868 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +450.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +C62 + 8 +SCHRAFFUR + 2 +*X6 + 10 +-743.14062 + 20 +-614.639868 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +1200.0 +1040 +0.0 +1002 +} + 0 +POLYLINE + 5 +C63 + 8 +DACHZIEGEL + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +153B + 8 +DACHZIEGEL + 10 +7947.477152 + 20 +11945.56719 + 30 +0.0 + 0 +VERTEX + 5 +153C + 8 +DACHZIEGEL + 10 +7372.26039 + 20 +11680.67468 + 30 +0.0 + 0 +VERTEX + 5 +153D + 8 +DACHZIEGEL + 10 +7417.295234 + 20 +11607.69272 + 30 +0.0 + 0 +VERTEX + 5 +153E + 8 +DACHZIEGEL + 10 +7447.432846 + 20 +11622.036533 + 30 +0.0 + 0 +VERTEX + 5 +153F + 8 +DACHZIEGEL + 10 +7448.150387 + 20 +11655.744529 + 30 +0.0 + 0 +VERTEX + 5 +1540 + 8 +DACHZIEGEL + 10 +7485.463631 + 20 +11676.543023 + 30 +0.0 + 0 +VERTEX + 5 +1541 + 8 +DACHZIEGEL + 10 +7509.860693 + 20 +11664.350817 + 30 +0.0 + 0 +VERTEX + 5 +1542 + 8 +DACHZIEGEL + 10 +7528.517315 + 20 +11671.522724 + 30 +0.0 + 0 +VERTEX + 5 +1543 + 8 +DACHZIEGEL + 10 +7530.670049 + 20 +11708.099412 + 30 +0.0 + 0 +VERTEX + 5 +1544 + 8 +DACHZIEGEL + 10 +7968.197842 + 20 +11912.407155 + 30 +0.0 + 0 +SEQEND + 5 +1545 + 8 +DACHZIEGEL + 0 +POLYLINE + 5 +C6F + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1546 + 8 +HOLZ + 10 +4486.086736 + 20 +9510.786108 + 30 +0.0 + 0 +VERTEX + 5 +1547 + 8 +HOLZ + 10 +8069.652157 + 20 +11750.046311 + 30 +0.0 + 0 +SEQEND + 5 +1548 + 8 +HOLZ + 0 +POLYLINE + 5 +C73 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1549 + 8 +HOLZ + 10 +8029.908213 + 20 +11813.649918 + 30 +0.0 + 0 +VERTEX + 5 +154A + 8 +HOLZ + 10 +4446.342791 + 20 +9574.389715 + 30 +0.0 + 0 +VERTEX + 5 +154B + 8 +HOLZ + 10 +4486.086736 + 20 +9510.786108 + 30 +0.0 + 0 +SEQEND + 5 +154C + 8 +HOLZ + 0 +POLYLINE + 5 +C78 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +154D + 8 +HOLZ + 10 +4901.85938 + 20 +9209.066503 + 30 +0.0 + 0 +VERTEX + 5 +154E + 8 +HOLZ + 10 +4739.353384 + 20 +9107.521486 + 30 +0.0 + 0 +VERTEX + 5 +154F + 8 +HOLZ + 10 +4505.134848 + 20 +9481.314131 + 30 +0.0 + 0 +VERTEX + 5 +1550 + 8 +HOLZ + 10 +4702.640358 + 20 +9615.210923 + 30 +0.0 + 0 +VERTEX + 5 +1551 + 8 +HOLZ + 10 +8083.535338 + 20 +11727.828578 + 30 +0.0 + 0 +SEQEND + 5 +1552 + 8 +HOLZ + 0 +POLYLINE + 5 +C7F + 8 +PE-FOLIE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +25.0 + 41 +25.0 + 0 +VERTEX + 5 +1553 + 8 +PE-FOLIE + 10 +4488.893741 + 20 +9491.569591 + 30 +0.0 + 0 +VERTEX + 5 +1554 + 8 +PE-FOLIE + 10 +8075.530951 + 20 +11740.638274 + 30 +0.0 + 0 +SEQEND + 5 +1555 + 8 +PE-FOLIE + 0 +POLYLINE + 5 +C83 + 8 +DAEMMUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1556 + 8 +DAEMMUNG + 10 +8162.82995 + 20 +11600.930672 + 30 +0.0 + 0 +VERTEX + 5 +1557 + 8 +DAEMMUNG + 10 +5333.043986 + 20 +9831.572016 + 30 +0.0 + 0 +VERTEX + 5 +1558 + 8 +DAEMMUNG + 10 +5341.298947 + 20 +9352.860132 + 30 +0.0 + 0 +SEQEND + 5 +1559 + 8 +DAEMMUNG + 0 +POLYLINE + 5 +C88 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +155A + 8 +HOLZ + 10 +8321.999007 + 20 +11346.206934 + 30 +0.0 + 0 +VERTEX + 5 +155B + 8 +HOLZ + 10 +5912.140374 + 20 +9840.360132 + 30 +0.0 + 0 +SEQEND + 5 +155C + 8 +HOLZ + 0 +POLYLINE + 5 +C8C + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +155D + 8 +HOLZ + 10 +8360.89771 + 20 +11283.955996 + 30 +0.0 + 0 +VERTEX + 5 +155E + 8 +HOLZ + 10 +6050.661403 + 20 +9840.360132 + 30 +0.0 + 0 +SEQEND + 5 +155F + 8 +HOLZ + 0 +POLYLINE + 5 +C90 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1560 + 8 +HOLZ + 10 +5956.34925 + 20 +9840.360132 + 30 +0.0 + 0 +VERTEX + 5 +1561 + 8 +HOLZ + 10 +8336.428273 + 20 +11323.115282 + 30 +0.0 + 0 +SEQEND + 5 +1562 + 8 +HOLZ + 0 +POLYLINE + 5 +C94 + 8 +PE-FOLIE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +25.0 + 41 +25.0 + 0 +VERTEX + 5 +1563 + 8 +PE-FOLIE + 10 +8327.649049 + 20 +11337.164977 + 30 +0.0 + 0 +VERTEX + 5 +1564 + 8 +PE-FOLIE + 10 +5932.260573 + 20 +9840.360132 + 30 +0.0 + 0 +SEQEND + 5 +1565 + 8 +PE-FOLIE + 0 +LINE + 5 +C98 + 8 +0 + 62 + 0 + 10 +5339.626437 + 20 +9712.713027 + 30 +0.0 + 11 +5388.10938 + 21 +9712.713027 + 31 +0.0 + 0 +LINE + 5 +C99 + 8 +0 + 62 + 0 + 10 +5500.60938 + 20 +9712.713027 + 30 +0.0 + 11 +5556.85938 + 21 +9712.713027 + 31 +0.0 + 0 +LINE + 5 +C9A + 8 +0 + 62 + 0 + 10 +5669.35938 + 20 +9712.713027 + 30 +0.0 + 11 +5725.60938 + 21 +9712.713027 + 31 +0.0 + 0 +LINE + 5 +C9B + 8 +0 + 62 + 0 + 10 +5416.23438 + 20 +9761.426956 + 30 +0.0 + 11 +5472.48438 + 21 +9761.426956 + 31 +0.0 + 0 +LINE + 5 +C9C + 8 +0 + 62 + 0 + 10 +5584.98438 + 20 +9761.426956 + 30 +0.0 + 11 +5641.23438 + 21 +9761.426956 + 31 +0.0 + 0 +LINE + 5 +C9D + 8 +0 + 62 + 0 + 10 +5753.73438 + 20 +9761.426956 + 30 +0.0 + 11 +5770.340609 + 21 +9761.426956 + 31 +0.0 + 0 +LINE + 5 +C9E + 8 +0 + 62 + 0 + 10 +5339.979617 + 20 +9810.140885 + 30 +0.0 + 11 +5388.10938 + 21 +9810.140885 + 31 +0.0 + 0 +LINE + 5 +C9F + 8 +0 + 62 + 0 + 10 +5500.60938 + 20 +9810.140885 + 30 +0.0 + 11 +5556.85938 + 21 +9810.140885 + 31 +0.0 + 0 +LINE + 5 +CA0 + 8 +0 + 62 + 0 + 10 +5669.35938 + 20 +9810.140885 + 30 +0.0 + 11 +5725.60938 + 21 +9810.140885 + 31 +0.0 + 0 +LINE + 5 +CA1 + 8 +0 + 62 + 0 + 10 +5416.23438 + 20 +9858.854814 + 30 +0.0 + 11 +5472.48438 + 21 +9858.854814 + 31 +0.0 + 0 +LINE + 5 +CA2 + 8 +0 + 62 + 0 + 10 +5584.98438 + 20 +9858.854814 + 30 +0.0 + 11 +5641.23438 + 21 +9858.854814 + 31 +0.0 + 0 +LINE + 5 +CA3 + 8 +0 + 62 + 0 + 10 +5753.73438 + 20 +9858.854814 + 30 +0.0 + 11 +5809.98438 + 21 +9858.854814 + 31 +0.0 + 0 +LINE + 5 +CA4 + 8 +0 + 62 + 0 + 10 +5922.48438 + 20 +9858.854814 + 30 +0.0 + 11 +5951.087016 + 21 +9858.854814 + 31 +0.0 + 0 +LINE + 5 +CA5 + 8 +0 + 62 + 0 + 10 +5500.60938 + 20 +9907.568742 + 30 +0.0 + 11 +5556.85938 + 21 +9907.568742 + 31 +0.0 + 0 +LINE + 5 +CA6 + 8 +0 + 62 + 0 + 10 +5669.35938 + 20 +9907.568742 + 30 +0.0 + 11 +5725.60938 + 21 +9907.568742 + 31 +0.0 + 0 +LINE + 5 +CA7 + 8 +0 + 62 + 0 + 10 +5838.10938 + 20 +9907.568742 + 30 +0.0 + 11 +5894.35938 + 21 +9907.568742 + 31 +0.0 + 0 +LINE + 5 +CA8 + 8 +0 + 62 + 0 + 10 +6006.85938 + 20 +9907.568742 + 30 +0.0 + 11 +6028.067539 + 21 +9907.568742 + 31 +0.0 + 0 +LINE + 5 +CA9 + 8 +0 + 62 + 0 + 10 +5584.98438 + 20 +9956.282671 + 30 +0.0 + 11 +5641.23438 + 21 +9956.282671 + 31 +0.0 + 0 +LINE + 5 +CAA + 8 +0 + 62 + 0 + 10 +5753.73438 + 20 +9956.282671 + 30 +0.0 + 11 +5809.98438 + 21 +9956.282671 + 31 +0.0 + 0 +LINE + 5 +CAB + 8 +0 + 62 + 0 + 10 +5922.48438 + 20 +9956.282671 + 30 +0.0 + 11 +5978.73438 + 21 +9956.282671 + 31 +0.0 + 0 +LINE + 5 +CAC + 8 +0 + 62 + 0 + 10 +6091.23438 + 20 +9956.282671 + 30 +0.0 + 11 +6105.048062 + 21 +9956.282671 + 31 +0.0 + 0 +LINE + 5 +CAD + 8 +0 + 62 + 0 + 10 +5669.35938 + 20 +10004.9966 + 30 +0.0 + 11 +5725.60938 + 21 +10004.9966 + 31 +0.0 + 0 +LINE + 5 +CAE + 8 +0 + 62 + 0 + 10 +5838.10938 + 20 +10004.9966 + 30 +0.0 + 11 +5894.35938 + 21 +10004.9966 + 31 +0.0 + 0 +LINE + 5 +CAF + 8 +0 + 62 + 0 + 10 +6006.85938 + 20 +10004.9966 + 30 +0.0 + 11 +6063.10938 + 21 +10004.9966 + 31 +0.0 + 0 +LINE + 5 +CB0 + 8 +0 + 62 + 0 + 10 +6175.60938 + 20 +10004.9966 + 30 +0.0 + 11 +6182.028585 + 21 +10004.9966 + 31 +0.0 + 0 +LINE + 5 +CB1 + 8 +0 + 62 + 0 + 10 +5753.73438 + 20 +10053.710529 + 30 +0.0 + 11 +5809.98438 + 21 +10053.710529 + 31 +0.0 + 0 +LINE + 5 +CB2 + 8 +0 + 62 + 0 + 10 +5922.48438 + 20 +10053.710529 + 30 +0.0 + 11 +5978.73438 + 21 +10053.710529 + 31 +0.0 + 0 +LINE + 5 +CB3 + 8 +0 + 62 + 0 + 10 +6091.23438 + 20 +10053.710529 + 30 +0.0 + 11 +6147.48438 + 21 +10053.710529 + 31 +0.0 + 0 +LINE + 5 +CB4 + 8 +0 + 62 + 0 + 10 +5838.10938 + 20 +10102.424457 + 30 +0.0 + 11 +5894.35938 + 21 +10102.424457 + 31 +0.0 + 0 +LINE + 5 +CB5 + 8 +0 + 62 + 0 + 10 +6006.85938 + 20 +10102.424457 + 30 +0.0 + 11 +6063.10938 + 21 +10102.424457 + 31 +0.0 + 0 +LINE + 5 +CB6 + 8 +0 + 62 + 0 + 10 +6175.60938 + 20 +10102.424457 + 30 +0.0 + 11 +6231.85938 + 21 +10102.424457 + 31 +0.0 + 0 +LINE + 5 +CB7 + 8 +0 + 62 + 0 + 10 +5922.48438 + 20 +10151.138386 + 30 +0.0 + 11 +5978.73438 + 21 +10151.138386 + 31 +0.0 + 0 +LINE + 5 +CB8 + 8 +0 + 62 + 0 + 10 +6091.23438 + 20 +10151.138386 + 30 +0.0 + 11 +6147.48438 + 21 +10151.138386 + 31 +0.0 + 0 +LINE + 5 +CB9 + 8 +0 + 62 + 0 + 10 +6259.98438 + 20 +10151.138386 + 30 +0.0 + 11 +6316.23438 + 21 +10151.138386 + 31 +0.0 + 0 +LINE + 5 +CBA + 8 +0 + 62 + 0 + 10 +6006.85938 + 20 +10199.852315 + 30 +0.0 + 11 +6063.10938 + 21 +10199.852315 + 31 +0.0 + 0 +LINE + 5 +CBB + 8 +0 + 62 + 0 + 10 +6175.60938 + 20 +10199.852315 + 30 +0.0 + 11 +6231.85938 + 21 +10199.852315 + 31 +0.0 + 0 +LINE + 5 +CBC + 8 +0 + 62 + 0 + 10 +6344.35938 + 20 +10199.852315 + 30 +0.0 + 11 +6400.60938 + 21 +10199.852315 + 31 +0.0 + 0 +LINE + 5 +CBD + 8 +0 + 62 + 0 + 10 +6091.23438 + 20 +10248.566244 + 30 +0.0 + 11 +6147.48438 + 21 +10248.566244 + 31 +0.0 + 0 +LINE + 5 +CBE + 8 +0 + 62 + 0 + 10 +6259.98438 + 20 +10248.566244 + 30 +0.0 + 11 +6316.23438 + 21 +10248.566244 + 31 +0.0 + 0 +LINE + 5 +CBF + 8 +0 + 62 + 0 + 10 +6428.73438 + 20 +10248.566244 + 30 +0.0 + 11 +6484.98438 + 21 +10248.566244 + 31 +0.0 + 0 +LINE + 5 +CC0 + 8 +0 + 62 + 0 + 10 +6175.60938 + 20 +10297.280172 + 30 +0.0 + 11 +6231.85938 + 21 +10297.280172 + 31 +0.0 + 0 +LINE + 5 +CC1 + 8 +0 + 62 + 0 + 10 +6344.35938 + 20 +10297.280172 + 30 +0.0 + 11 +6400.60938 + 21 +10297.280172 + 31 +0.0 + 0 +LINE + 5 +CC2 + 8 +0 + 62 + 0 + 10 +6513.10938 + 20 +10297.280172 + 30 +0.0 + 11 +6569.35938 + 21 +10297.280172 + 31 +0.0 + 0 +LINE + 5 +CC3 + 8 +0 + 62 + 0 + 10 +6259.98438 + 20 +10345.994101 + 30 +0.0 + 11 +6316.23438 + 21 +10345.994101 + 31 +0.0 + 0 +LINE + 5 +CC4 + 8 +0 + 62 + 0 + 10 +6428.73438 + 20 +10345.994101 + 30 +0.0 + 11 +6484.98438 + 21 +10345.994101 + 31 +0.0 + 0 +LINE + 5 +CC5 + 8 +0 + 62 + 0 + 10 +6597.48438 + 20 +10345.994101 + 30 +0.0 + 11 +6653.73438 + 21 +10345.994101 + 31 +0.0 + 0 +LINE + 5 +CC6 + 8 +0 + 62 + 0 + 10 +6344.35938 + 20 +10394.70803 + 30 +0.0 + 11 +6400.60938 + 21 +10394.70803 + 31 +0.0 + 0 +LINE + 5 +CC7 + 8 +0 + 62 + 0 + 10 +6513.10938 + 20 +10394.70803 + 30 +0.0 + 11 +6569.35938 + 21 +10394.70803 + 31 +0.0 + 0 +LINE + 5 +CC8 + 8 +0 + 62 + 0 + 10 +6681.85938 + 20 +10394.70803 + 30 +0.0 + 11 +6738.10938 + 21 +10394.70803 + 31 +0.0 + 0 +LINE + 5 +CC9 + 8 +0 + 62 + 0 + 10 +6315.424265 + 20 +10443.421959 + 30 +0.0 + 11 +6316.23438 + 21 +10443.421959 + 31 +0.0 + 0 +LINE + 5 +CCA + 8 +0 + 62 + 0 + 10 +6428.73438 + 20 +10443.421959 + 30 +0.0 + 11 +6484.98438 + 21 +10443.421959 + 31 +0.0 + 0 +LINE + 5 +CCB + 8 +0 + 62 + 0 + 10 +6597.48438 + 20 +10443.421959 + 30 +0.0 + 11 +6653.73438 + 21 +10443.421959 + 31 +0.0 + 0 +LINE + 5 +CCC + 8 +0 + 62 + 0 + 10 +6766.23438 + 20 +10443.421959 + 30 +0.0 + 11 +6822.48438 + 21 +10443.421959 + 31 +0.0 + 0 +LINE + 5 +CCD + 8 +0 + 62 + 0 + 10 +6393.446207 + 20 +10492.135887 + 30 +0.0 + 11 +6400.60938 + 21 +10492.135887 + 31 +0.0 + 0 +LINE + 5 +CCE + 8 +0 + 62 + 0 + 10 +6513.10938 + 20 +10492.135887 + 30 +0.0 + 11 +6569.35938 + 21 +10492.135887 + 31 +0.0 + 0 +LINE + 5 +CCF + 8 +0 + 62 + 0 + 10 +6681.85938 + 20 +10492.135887 + 30 +0.0 + 11 +6738.10938 + 21 +10492.135887 + 31 +0.0 + 0 +LINE + 5 +CD0 + 8 +0 + 62 + 0 + 10 +6850.60938 + 20 +10492.135887 + 30 +0.0 + 11 +6906.85938 + 21 +10492.135887 + 31 +0.0 + 0 +LINE + 5 +CD1 + 8 +0 + 62 + 0 + 10 +6471.46815 + 20 +10540.849816 + 30 +0.0 + 11 +6484.98438 + 21 +10540.849816 + 31 +0.0 + 0 +LINE + 5 +CD2 + 8 +0 + 62 + 0 + 10 +6597.48438 + 20 +10540.849816 + 30 +0.0 + 11 +6653.73438 + 21 +10540.849816 + 31 +0.0 + 0 +LINE + 5 +CD3 + 8 +0 + 62 + 0 + 10 +6766.23438 + 20 +10540.849816 + 30 +0.0 + 11 +6822.48438 + 21 +10540.849816 + 31 +0.0 + 0 +LINE + 5 +CD4 + 8 +0 + 62 + 0 + 10 +6934.98438 + 20 +10540.849816 + 30 +0.0 + 11 +6991.23438 + 21 +10540.849816 + 31 +0.0 + 0 +LINE + 5 +CD5 + 8 +0 + 62 + 0 + 10 +6549.490092 + 20 +10589.563745 + 30 +0.0 + 11 +6569.35938 + 21 +10589.563745 + 31 +0.0 + 0 +LINE + 5 +CD6 + 8 +0 + 62 + 0 + 10 +6681.85938 + 20 +10589.563745 + 30 +0.0 + 11 +6738.10938 + 21 +10589.563745 + 31 +0.0 + 0 +LINE + 5 +CD7 + 8 +0 + 62 + 0 + 10 +6850.60938 + 20 +10589.563745 + 30 +0.0 + 11 +6906.85938 + 21 +10589.563745 + 31 +0.0 + 0 +LINE + 5 +CD8 + 8 +0 + 62 + 0 + 10 +7019.35938 + 20 +10589.563745 + 30 +0.0 + 11 +7075.60938 + 21 +10589.563745 + 31 +0.0 + 0 +LINE + 5 +CD9 + 8 +0 + 62 + 0 + 10 +6627.512035 + 20 +10638.277674 + 30 +0.0 + 11 +6653.73438 + 21 +10638.277674 + 31 +0.0 + 0 +LINE + 5 +CDA + 8 +0 + 62 + 0 + 10 +6766.23438 + 20 +10638.277674 + 30 +0.0 + 11 +6822.48438 + 21 +10638.277674 + 31 +0.0 + 0 +LINE + 5 +CDB + 8 +0 + 62 + 0 + 10 +6934.98438 + 20 +10638.277674 + 30 +0.0 + 11 +6991.23438 + 21 +10638.277674 + 31 +0.0 + 0 +LINE + 5 +CDC + 8 +0 + 62 + 0 + 10 +7103.73438 + 20 +10638.277674 + 30 +0.0 + 11 +7159.98438 + 21 +10638.277674 + 31 +0.0 + 0 +LINE + 5 +CDD + 8 +0 + 62 + 0 + 10 +6705.533977 + 20 +10686.991602 + 30 +0.0 + 11 +6738.10938 + 21 +10686.991602 + 31 +0.0 + 0 +LINE + 5 +CDE + 8 +0 + 62 + 0 + 10 +6850.60938 + 20 +10686.991602 + 30 +0.0 + 11 +6906.85938 + 21 +10686.991602 + 31 +0.0 + 0 +LINE + 5 +CDF + 8 +0 + 62 + 0 + 10 +7019.35938 + 20 +10686.991602 + 30 +0.0 + 11 +7075.60938 + 21 +10686.991602 + 31 +0.0 + 0 +LINE + 5 +CE0 + 8 +0 + 62 + 0 + 10 +7188.10938 + 20 +10686.991602 + 30 +0.0 + 11 +7244.35938 + 21 +10686.991602 + 31 +0.0 + 0 +LINE + 5 +CE1 + 8 +0 + 62 + 0 + 10 +6783.55592 + 20 +10735.705531 + 30 +0.0 + 11 +6822.48438 + 21 +10735.705531 + 31 +0.0 + 0 +LINE + 5 +CE2 + 8 +0 + 62 + 0 + 10 +6934.98438 + 20 +10735.705531 + 30 +0.0 + 11 +6991.23438 + 21 +10735.705531 + 31 +0.0 + 0 +LINE + 5 +CE3 + 8 +0 + 62 + 0 + 10 +7103.73438 + 20 +10735.705531 + 30 +0.0 + 11 +7159.98438 + 21 +10735.705531 + 31 +0.0 + 0 +LINE + 5 +CE4 + 8 +0 + 62 + 0 + 10 +7272.48438 + 20 +10735.705531 + 30 +0.0 + 11 +7328.73438 + 21 +10735.705531 + 31 +0.0 + 0 +LINE + 5 +CE5 + 8 +0 + 62 + 0 + 10 +6861.577862 + 20 +10784.41946 + 30 +0.0 + 11 +6906.85938 + 21 +10784.41946 + 31 +0.0 + 0 +LINE + 5 +CE6 + 8 +0 + 62 + 0 + 10 +7019.35938 + 20 +10784.41946 + 30 +0.0 + 11 +7075.60938 + 21 +10784.41946 + 31 +0.0 + 0 +LINE + 5 +CE7 + 8 +0 + 62 + 0 + 10 +7188.10938 + 20 +10784.41946 + 30 +0.0 + 11 +7244.35938 + 21 +10784.41946 + 31 +0.0 + 0 +LINE + 5 +CE8 + 8 +0 + 62 + 0 + 10 +7356.85938 + 20 +10784.41946 + 30 +0.0 + 11 +7413.10938 + 21 +10784.41946 + 31 +0.0 + 0 +LINE + 5 +CE9 + 8 +0 + 62 + 0 + 10 +6939.599804 + 20 +10833.133389 + 30 +0.0 + 11 +6991.23438 + 21 +10833.133389 + 31 +0.0 + 0 +LINE + 5 +CEA + 8 +0 + 62 + 0 + 10 +7103.73438 + 20 +10833.133389 + 30 +0.0 + 11 +7159.98438 + 21 +10833.133389 + 31 +0.0 + 0 +LINE + 5 +CEB + 8 +0 + 62 + 0 + 10 +7272.48438 + 20 +10833.133389 + 30 +0.0 + 11 +7328.73438 + 21 +10833.133389 + 31 +0.0 + 0 +LINE + 5 +CEC + 8 +0 + 62 + 0 + 10 +7441.23438 + 20 +10833.133389 + 30 +0.0 + 11 +7490.697474 + 21 +10833.133389 + 31 +0.0 + 0 +LINE + 5 +CED + 8 +0 + 62 + 0 + 10 +7019.35938 + 20 +10881.847317 + 30 +0.0 + 11 +7075.60938 + 21 +10881.847317 + 31 +0.0 + 0 +LINE + 5 +CEE + 8 +0 + 62 + 0 + 10 +7188.10938 + 20 +10881.847317 + 30 +0.0 + 11 +7244.35938 + 21 +10881.847317 + 31 +0.0 + 0 +LINE + 5 +CEF + 8 +0 + 62 + 0 + 10 +7356.85938 + 20 +10881.847317 + 30 +0.0 + 11 +7413.10938 + 21 +10881.847317 + 31 +0.0 + 0 +LINE + 5 +CF0 + 8 +0 + 62 + 0 + 10 +7525.60938 + 20 +10881.847317 + 30 +0.0 + 11 +7567.677996 + 21 +10881.847317 + 31 +0.0 + 0 +LINE + 5 +CF1 + 8 +0 + 62 + 0 + 10 +7103.73438 + 20 +10930.561246 + 30 +0.0 + 11 +7159.98438 + 21 +10930.561246 + 31 +0.0 + 0 +LINE + 5 +CF2 + 8 +0 + 62 + 0 + 10 +7272.48438 + 20 +10930.561246 + 30 +0.0 + 11 +7328.73438 + 21 +10930.561246 + 31 +0.0 + 0 +LINE + 5 +CF3 + 8 +0 + 62 + 0 + 10 +7441.23438 + 20 +10930.561246 + 30 +0.0 + 11 +7497.48438 + 21 +10930.561246 + 31 +0.0 + 0 +LINE + 5 +CF4 + 8 +0 + 62 + 0 + 10 +7609.98438 + 20 +10930.561246 + 30 +0.0 + 11 +7644.658519 + 21 +10930.561246 + 31 +0.0 + 0 +LINE + 5 +CF5 + 8 +0 + 62 + 0 + 10 +7188.10938 + 20 +10979.275175 + 30 +0.0 + 11 +7244.35938 + 21 +10979.275175 + 31 +0.0 + 0 +LINE + 5 +CF6 + 8 +0 + 62 + 0 + 10 +7356.85938 + 20 +10979.275175 + 30 +0.0 + 11 +7413.10938 + 21 +10979.275175 + 31 +0.0 + 0 +LINE + 5 +CF7 + 8 +0 + 62 + 0 + 10 +7525.60938 + 20 +10979.275175 + 30 +0.0 + 11 +7581.85938 + 21 +10979.275175 + 31 +0.0 + 0 +LINE + 5 +CF8 + 8 +0 + 62 + 0 + 10 +7694.35938 + 20 +10979.275175 + 30 +0.0 + 11 +7721.639042 + 21 +10979.275175 + 31 +0.0 + 0 +LINE + 5 +CF9 + 8 +0 + 62 + 0 + 10 +7272.48438 + 20 +11027.989104 + 30 +0.0 + 11 +7328.73438 + 21 +11027.989104 + 31 +0.0 + 0 +LINE + 5 +CFA + 8 +0 + 62 + 0 + 10 +7441.23438 + 20 +11027.989104 + 30 +0.0 + 11 +7497.48438 + 21 +11027.989104 + 31 +0.0 + 0 +LINE + 5 +CFB + 8 +0 + 62 + 0 + 10 +7609.98438 + 20 +11027.989104 + 30 +0.0 + 11 +7666.23438 + 21 +11027.989104 + 31 +0.0 + 0 +LINE + 5 +CFC + 8 +0 + 62 + 0 + 10 +7778.73438 + 20 +11027.989104 + 30 +0.0 + 11 +7798.619565 + 21 +11027.989104 + 31 +0.0 + 0 +LINE + 5 +CFD + 8 +0 + 62 + 0 + 10 +7356.85938 + 20 +11076.703032 + 30 +0.0 + 11 +7413.10938 + 21 +11076.703032 + 31 +0.0 + 0 +LINE + 5 +CFE + 8 +0 + 62 + 0 + 10 +7525.60938 + 20 +11076.703032 + 30 +0.0 + 11 +7581.85938 + 21 +11076.703032 + 31 +0.0 + 0 +LINE + 5 +CFF + 8 +0 + 62 + 0 + 10 +7694.35938 + 20 +11076.703032 + 30 +0.0 + 11 +7750.60938 + 21 +11076.703032 + 31 +0.0 + 0 +LINE + 5 +D00 + 8 +0 + 62 + 0 + 10 +7863.10938 + 20 +11076.703032 + 30 +0.0 + 11 +7875.600088 + 21 +11076.703032 + 31 +0.0 + 0 +LINE + 5 +D01 + 8 +0 + 62 + 0 + 10 +7441.23438 + 20 +11125.416961 + 30 +0.0 + 11 +7497.48438 + 21 +11125.416961 + 31 +0.0 + 0 +LINE + 5 +D02 + 8 +0 + 62 + 0 + 10 +7609.98438 + 20 +11125.416961 + 30 +0.0 + 11 +7666.23438 + 21 +11125.416961 + 31 +0.0 + 0 +LINE + 5 +D03 + 8 +0 + 62 + 0 + 10 +7778.73438 + 20 +11125.416961 + 30 +0.0 + 11 +7834.98438 + 21 +11125.416961 + 31 +0.0 + 0 +LINE + 5 +D04 + 8 +0 + 62 + 0 + 10 +7947.48438 + 20 +11125.416961 + 30 +0.0 + 11 +7952.580611 + 21 +11125.416961 + 31 +0.0 + 0 +LINE + 5 +D05 + 8 +0 + 62 + 0 + 10 +7525.60938 + 20 +11174.13089 + 30 +0.0 + 11 +7581.85938 + 21 +11174.13089 + 31 +0.0 + 0 +LINE + 5 +D06 + 8 +0 + 62 + 0 + 10 +7694.35938 + 20 +11174.13089 + 30 +0.0 + 11 +7750.60938 + 21 +11174.13089 + 31 +0.0 + 0 +LINE + 5 +D07 + 8 +0 + 62 + 0 + 10 +7863.10938 + 20 +11174.13089 + 30 +0.0 + 11 +7919.35938 + 21 +11174.13089 + 31 +0.0 + 0 +LINE + 5 +D08 + 8 +0 + 62 + 0 + 10 +7609.98438 + 20 +11222.844819 + 30 +0.0 + 11 +7666.23438 + 21 +11222.844819 + 31 +0.0 + 0 +LINE + 5 +D09 + 8 +0 + 62 + 0 + 10 +7778.73438 + 20 +11222.844819 + 30 +0.0 + 11 +7834.98438 + 21 +11222.844819 + 31 +0.0 + 0 +LINE + 5 +D0A + 8 +0 + 62 + 0 + 10 +7947.48438 + 20 +11222.844819 + 30 +0.0 + 11 +8003.73438 + 21 +11222.844819 + 31 +0.0 + 0 +LINE + 5 +D0B + 8 +0 + 62 + 0 + 10 +7694.35938 + 20 +11271.558747 + 30 +0.0 + 11 +7750.60938 + 21 +11271.558747 + 31 +0.0 + 0 +LINE + 5 +D0C + 8 +0 + 62 + 0 + 10 +7863.10938 + 20 +11271.558747 + 30 +0.0 + 11 +7919.35938 + 21 +11271.558747 + 31 +0.0 + 0 +LINE + 5 +D0D + 8 +0 + 62 + 0 + 10 +8031.85938 + 20 +11271.558747 + 30 +0.0 + 11 +8088.10938 + 21 +11271.558747 + 31 +0.0 + 0 +LINE + 5 +D0E + 8 +0 + 62 + 0 + 10 +7778.73438 + 20 +11320.272676 + 30 +0.0 + 11 +7834.98438 + 21 +11320.272676 + 31 +0.0 + 0 +LINE + 5 +D0F + 8 +0 + 62 + 0 + 10 +7947.48438 + 20 +11320.272676 + 30 +0.0 + 11 +8003.73438 + 21 +11320.272676 + 31 +0.0 + 0 +LINE + 5 +D10 + 8 +0 + 62 + 0 + 10 +8116.23438 + 20 +11320.272676 + 30 +0.0 + 11 +8172.48438 + 21 +11320.272676 + 31 +0.0 + 0 +LINE + 5 +D11 + 8 +0 + 62 + 0 + 10 +7863.10938 + 20 +11368.986605 + 30 +0.0 + 11 +7919.35938 + 21 +11368.986605 + 31 +0.0 + 0 +LINE + 5 +D12 + 8 +0 + 62 + 0 + 10 +8031.85938 + 20 +11368.986605 + 30 +0.0 + 11 +8088.10938 + 21 +11368.986605 + 31 +0.0 + 0 +LINE + 5 +D13 + 8 +0 + 62 + 0 + 10 +8200.60938 + 20 +11368.986605 + 30 +0.0 + 11 +8256.85938 + 21 +11368.986605 + 31 +0.0 + 0 +LINE + 5 +D14 + 8 +0 + 62 + 0 + 10 +7947.48438 + 20 +11417.700534 + 30 +0.0 + 11 +8003.73438 + 21 +11417.700534 + 31 +0.0 + 0 +LINE + 5 +D15 + 8 +0 + 62 + 0 + 10 +8116.23438 + 20 +11417.700534 + 30 +0.0 + 11 +8172.48438 + 21 +11417.700534 + 31 +0.0 + 0 +LINE + 5 +D16 + 8 +0 + 62 + 0 + 10 +8031.85938 + 20 +11466.414462 + 30 +0.0 + 11 +8088.10938 + 21 +11466.414462 + 31 +0.0 + 0 +LINE + 5 +D17 + 8 +0 + 62 + 0 + 10 +8200.60938 + 20 +11466.414462 + 30 +0.0 + 11 +8256.85938 + 21 +11466.414462 + 31 +0.0 + 0 +LINE + 5 +D18 + 8 +0 + 62 + 0 + 10 +8116.23438 + 20 +11515.128391 + 30 +0.0 + 11 +8172.48438 + 21 +11515.128391 + 31 +0.0 + 0 +LINE + 5 +D19 + 8 +0 + 62 + 0 + 10 +5416.23438 + 20 +9663.999099 + 30 +0.0 + 11 +5472.48438 + 21 +9663.999099 + 31 +0.0 + 0 +LINE + 5 +D1A + 8 +0 + 62 + 0 + 10 +5584.98438 + 20 +9663.999099 + 30 +0.0 + 11 +5641.23438 + 21 +9663.999099 + 31 +0.0 + 0 +LINE + 5 +D1B + 8 +0 + 62 + 0 + 10 +5753.73438 + 20 +9663.999099 + 30 +0.0 + 11 +5768.793321 + 21 +9663.999099 + 31 +0.0 + 0 +LINE + 5 +D1C + 8 +0 + 62 + 0 + 10 +5339.273257 + 20 +9615.28517 + 30 +0.0 + 11 +5388.10938 + 21 +9615.28517 + 31 +0.0 + 0 +LINE + 5 +D1D + 8 +0 + 62 + 0 + 10 +5500.60938 + 20 +9615.28517 + 30 +0.0 + 11 +5556.85938 + 21 +9615.28517 + 31 +0.0 + 0 +LINE + 5 +D1E + 8 +0 + 62 + 0 + 10 +5669.35938 + 20 +9615.28517 + 30 +0.0 + 11 +5725.60938 + 21 +9615.28517 + 31 +0.0 + 0 +LINE + 5 +D1F + 8 +0 + 62 + 0 + 10 +5416.23438 + 20 +9566.571241 + 30 +0.0 + 11 +5472.48438 + 21 +9566.571241 + 31 +0.0 + 0 +LINE + 5 +D20 + 8 +0 + 62 + 0 + 10 +5584.98438 + 20 +9566.571241 + 30 +0.0 + 11 +5641.23438 + 21 +9566.571241 + 31 +0.0 + 0 +LINE + 5 +D21 + 8 +0 + 62 + 0 + 10 +5753.73438 + 20 +9566.571241 + 30 +0.0 + 11 +5767.246033 + 21 +9566.571241 + 31 +0.0 + 0 +LINE + 5 +D22 + 8 +0 + 62 + 0 + 10 +5338.920076 + 20 +9517.857312 + 30 +0.0 + 11 +5388.10938 + 21 +9517.857312 + 31 +0.0 + 0 +LINE + 5 +D23 + 8 +0 + 62 + 0 + 10 +5500.60938 + 20 +9517.857312 + 30 +0.0 + 11 +5556.85938 + 21 +9517.857312 + 31 +0.0 + 0 +LINE + 5 +D24 + 8 +0 + 62 + 0 + 10 +5669.35938 + 20 +9517.857312 + 30 +0.0 + 11 +5725.60938 + 21 +9517.857312 + 31 +0.0 + 0 +LINE + 5 +D25 + 8 +0 + 62 + 0 + 10 +5416.23438 + 20 +9469.143384 + 30 +0.0 + 11 +5472.48438 + 21 +9469.143384 + 31 +0.0 + 0 +LINE + 5 +D26 + 8 +0 + 62 + 0 + 10 +5584.98438 + 20 +9469.143384 + 30 +0.0 + 11 +5641.23438 + 21 +9469.143384 + 31 +0.0 + 0 +LINE + 5 +D27 + 8 +0 + 62 + 0 + 10 +5753.73438 + 20 +9469.143384 + 30 +0.0 + 11 +5765.698745 + 21 +9469.143384 + 31 +0.0 + 0 +LINE + 5 +D28 + 8 +0 + 62 + 0 + 10 +5338.566896 + 20 +9420.429455 + 30 +0.0 + 11 +5388.10938 + 21 +9420.429455 + 31 +0.0 + 0 +LINE + 5 +D29 + 8 +0 + 62 + 0 + 10 +5500.60938 + 20 +9420.429455 + 30 +0.0 + 11 +5556.85938 + 21 +9420.429455 + 31 +0.0 + 0 +LINE + 5 +D2A + 8 +0 + 62 + 0 + 10 +5669.35938 + 20 +9420.429455 + 30 +0.0 + 11 +5725.60938 + 21 +9420.429455 + 31 +0.0 + 0 +LINE + 5 +D2B + 8 +0 + 62 + 0 + 10 +5416.23438 + 20 +9371.715526 + 30 +0.0 + 11 +5472.48438 + 21 +9371.715526 + 31 +0.0 + 0 +LINE + 5 +D2C + 8 +0 + 62 + 0 + 10 +5584.98438 + 20 +9371.715526 + 30 +0.0 + 11 +5641.23438 + 21 +9371.715526 + 31 +0.0 + 0 +LINE + 5 +D2D + 8 +0 + 62 + 0 + 10 +5753.73438 + 20 +9371.715526 + 30 +0.0 + 11 +5764.151457 + 21 +9371.715526 + 31 +0.0 + 0 +LINE + 5 +D2E + 8 +0 + 62 + 0 + 10 +5338.213716 + 20 +9323.001597 + 30 +0.0 + 11 +5388.10938 + 21 +9323.001597 + 31 +0.0 + 0 +LINE + 5 +D2F + 8 +0 + 62 + 0 + 10 +5500.60938 + 20 +9323.001597 + 30 +0.0 + 11 +5540.489283 + 21 +9323.001597 + 31 +0.0 + 0 +LINE + 5 +D30 + 8 +0 + 62 + 0 + 10 +5416.23438 + 20 +9274.287669 + 30 +0.0 + 11 +5472.48438 + 21 +9274.287669 + 31 +0.0 + 0 +LINE + 5 +D31 + 8 +0 + 62 + 0 + 10 +5337.860536 + 20 +9225.57374 + 30 +0.0 + 11 +5388.10938 + 21 +9225.57374 + 31 +0.0 + 0 +LINE + 5 +D32 + 8 +0 + 62 + 0 + 10 +5500.60938 + 20 +9225.57374 + 30 +0.0 + 11 +5540.489283 + 21 +9225.57374 + 31 +0.0 + 0 +LINE + 5 +D33 + 8 +0 + 62 + 0 + 10 +5416.23438 + 20 +9176.859811 + 30 +0.0 + 11 +5472.48438 + 21 +9176.859811 + 31 +0.0 + 0 +LINE + 5 +D34 + 8 +0 + 62 + 0 + 10 +5337.507355 + 20 +9128.145882 + 30 +0.0 + 11 +5388.10938 + 21 +9128.145882 + 31 +0.0 + 0 +LINE + 5 +D35 + 8 +0 + 62 + 0 + 10 +5500.60938 + 20 +9128.145882 + 30 +0.0 + 11 +5540.489283 + 21 +9128.145882 + 31 +0.0 + 0 +LINE + 5 +D36 + 8 +0 + 62 + 0 + 10 +5416.23438 + 20 +9079.431954 + 30 +0.0 + 11 +5472.48438 + 21 +9079.431954 + 31 +0.0 + 0 +LINE + 5 +D37 + 8 +0 + 62 + 0 + 10 +5337.154175 + 20 +9030.718025 + 30 +0.0 + 11 +5388.10938 + 21 +9030.718025 + 31 +0.0 + 0 +LINE + 5 +D38 + 8 +0 + 62 + 0 + 10 +5500.60938 + 20 +9030.718025 + 30 +0.0 + 11 +5540.489283 + 21 +9030.718025 + 31 +0.0 + 0 +LINE + 5 +D39 + 8 +0 + 62 + 0 + 10 +5416.23438 + 20 +8982.004096 + 30 +0.0 + 11 +5472.48438 + 21 +8982.004096 + 31 +0.0 + 0 +LINE + 5 +D3A + 8 +0 + 62 + 0 + 10 +5336.800995 + 20 +8933.290167 + 30 +0.0 + 11 +5388.10938 + 21 +8933.290167 + 31 +0.0 + 0 +LINE + 5 +D3B + 8 +0 + 62 + 0 + 10 +5500.60938 + 20 +8933.290167 + 30 +0.0 + 11 +5540.489283 + 21 +8933.290167 + 31 +0.0 + 0 +LINE + 5 +D3C + 8 +0 + 62 + 0 + 10 +5416.23438 + 20 +8884.576239 + 30 +0.0 + 11 +5472.48438 + 21 +8884.576239 + 31 +0.0 + 0 +LINE + 5 +D3D + 8 +0 + 62 + 0 + 10 +5336.447815 + 20 +8835.86231 + 30 +0.0 + 11 +5388.10938 + 21 +8835.86231 + 31 +0.0 + 0 +LINE + 5 +D3E + 8 +0 + 62 + 0 + 10 +5500.60938 + 20 +8835.86231 + 30 +0.0 + 11 +5540.489283 + 21 +8835.86231 + 31 +0.0 + 0 +LINE + 5 +D3F + 8 +0 + 62 + 0 + 10 +5416.23438 + 20 +8787.148381 + 30 +0.0 + 11 +5472.48438 + 21 +8787.148381 + 31 +0.0 + 0 +LINE + 5 +D40 + 8 +0 + 62 + 0 + 10 +5336.094635 + 20 +8738.434452 + 30 +0.0 + 11 +5388.10938 + 21 +8738.434452 + 31 +0.0 + 0 +LINE + 5 +D41 + 8 +0 + 62 + 0 + 10 +5500.60938 + 20 +8738.434452 + 30 +0.0 + 11 +5540.489283 + 21 +8738.434452 + 31 +0.0 + 0 +LINE + 5 +D42 + 8 +0 + 62 + 0 + 10 +5416.23438 + 20 +8689.720524 + 30 +0.0 + 11 +5472.48438 + 21 +8689.720524 + 31 +0.0 + 0 +LINE + 5 +D43 + 8 +0 + 62 + 0 + 10 +5335.741454 + 20 +8641.006595 + 30 +0.0 + 11 +5388.10938 + 21 +8641.006595 + 31 +0.0 + 0 +LINE + 5 +D44 + 8 +0 + 62 + 0 + 10 +5500.60938 + 20 +8641.006595 + 30 +0.0 + 11 +5540.489283 + 21 +8641.006595 + 31 +0.0 + 0 +LINE + 5 +D45 + 8 +0 + 62 + 0 + 10 +5416.23438 + 20 +8592.292666 + 30 +0.0 + 11 +5472.48438 + 21 +8592.292666 + 31 +0.0 + 0 +LINE + 5 +D46 + 8 +0 + 62 + 0 + 10 +5335.388274 + 20 +8543.578737 + 30 +0.0 + 11 +5388.10938 + 21 +8543.578737 + 31 +0.0 + 0 +LINE + 5 +D47 + 8 +0 + 62 + 0 + 10 +5500.60938 + 20 +8543.578737 + 30 +0.0 + 11 +5540.489283 + 21 +8543.578737 + 31 +0.0 + 0 +LINE + 5 +D48 + 8 +0 + 62 + 0 + 10 +5416.23438 + 20 +8494.864809 + 30 +0.0 + 11 +5472.48438 + 21 +8494.864809 + 31 +0.0 + 0 +LINE + 5 +D49 + 8 +0 + 62 + 0 + 10 +5335.035094 + 20 +8446.15088 + 30 +0.0 + 11 +5388.10938 + 21 +8446.15088 + 31 +0.0 + 0 +LINE + 5 +D4A + 8 +0 + 62 + 0 + 10 +5500.60938 + 20 +8446.15088 + 30 +0.0 + 11 +5540.489283 + 21 +8446.15088 + 31 +0.0 + 0 +LINE + 5 +D4B + 8 +0 + 62 + 0 + 10 +5416.23438 + 20 +8397.436951 + 30 +0.0 + 11 +5472.48438 + 21 +8397.436951 + 31 +0.0 + 0 +LINE + 5 +D4C + 8 +0 + 62 + 0 + 10 +5334.681914 + 20 +8348.723022 + 30 +0.0 + 11 +5388.10938 + 21 +8348.723022 + 31 +0.0 + 0 +LINE + 5 +D4D + 8 +0 + 62 + 0 + 10 +5500.60938 + 20 +8348.723022 + 30 +0.0 + 11 +5540.489283 + 21 +8348.723022 + 31 +0.0 + 0 +LINE + 5 +D4E + 8 +0 + 62 + 0 + 10 +5416.23438 + 20 +8300.009094 + 30 +0.0 + 11 +5472.48438 + 21 +8300.009094 + 31 +0.0 + 0 +LINE + 5 +D4F + 8 +0 + 62 + 0 + 10 +5334.328733 + 20 +8251.295165 + 30 +0.0 + 11 +5388.10938 + 21 +8251.295165 + 31 +0.0 + 0 +LINE + 5 +D50 + 8 +0 + 62 + 0 + 10 +5500.60938 + 20 +8251.295165 + 30 +0.0 + 11 +5540.489283 + 21 +8251.295165 + 31 +0.0 + 0 +LINE + 5 +D51 + 8 +0 + 62 + 0 + 10 +5416.23438 + 20 +8202.581236 + 30 +0.0 + 11 +5472.48438 + 21 +8202.581236 + 31 +0.0 + 0 +LINE + 5 +D52 + 8 +0 + 62 + 0 + 10 +5333.975553 + 20 +8153.867307 + 30 +0.0 + 11 +5388.10938 + 21 +8153.867307 + 31 +0.0 + 0 +LINE + 5 +D53 + 8 +0 + 62 + 0 + 10 +5500.60938 + 20 +8153.867307 + 30 +0.0 + 11 +5540.489283 + 21 +8153.867307 + 31 +0.0 + 0 +LINE + 5 +D54 + 8 +0 + 62 + 0 + 10 +5416.23438 + 20 +8105.153379 + 30 +0.0 + 11 +5472.48438 + 21 +8105.153379 + 31 +0.0 + 0 +LINE + 5 +D55 + 8 +0 + 62 + 0 + 10 +5333.622373 + 20 +8056.43945 + 30 +0.0 + 11 +5388.10938 + 21 +8056.43945 + 31 +0.0 + 0 +LINE + 5 +D56 + 8 +0 + 62 + 0 + 10 +5500.60938 + 20 +8056.43945 + 30 +0.0 + 11 +5540.489283 + 21 +8056.43945 + 31 +0.0 + 0 +LINE + 5 +D57 + 8 +0 + 62 + 0 + 10 +5416.23438 + 20 +8007.725521 + 30 +0.0 + 11 +5472.48438 + 21 +8007.725521 + 31 +0.0 + 0 +LINE + 5 +D58 + 8 +0 + 62 + 0 + 10 +5333.269193 + 20 +7959.011592 + 30 +0.0 + 11 +5388.10938 + 21 +7959.011592 + 31 +0.0 + 0 +LINE + 5 +D59 + 8 +0 + 62 + 0 + 10 +5500.60938 + 20 +7959.011592 + 30 +0.0 + 11 +5540.489283 + 21 +7959.011592 + 31 +0.0 + 0 +LINE + 5 +D5A + 8 +0 + 62 + 0 + 10 +5416.23438 + 20 +7910.297664 + 30 +0.0 + 11 +5472.48438 + 21 +7910.297664 + 31 +0.0 + 0 +LINE + 5 +D5B + 8 +0 + 62 + 0 + 10 +5332.916012 + 20 +7861.583735 + 30 +0.0 + 11 +5388.10938 + 21 +7861.583735 + 31 +0.0 + 0 +LINE + 5 +D5C + 8 +0 + 62 + 0 + 10 +5500.60938 + 20 +7861.583735 + 30 +0.0 + 11 +5540.489283 + 21 +7861.583735 + 31 +0.0 + 0 +LINE + 5 +D5D + 8 +0 + 62 + 0 + 10 +5416.23438 + 20 +7812.869806 + 30 +0.0 + 11 +5472.48438 + 21 +7812.869806 + 31 +0.0 + 0 +LINE + 5 +D5E + 8 +0 + 62 + 0 + 10 +5332.562832 + 20 +7764.155877 + 30 +0.0 + 11 +5388.10938 + 21 +7764.155877 + 31 +0.0 + 0 +LINE + 5 +D5F + 8 +0 + 62 + 0 + 10 +5500.60938 + 20 +7764.155877 + 30 +0.0 + 11 +5540.489283 + 21 +7764.155877 + 31 +0.0 + 0 +LINE + 5 +D60 + 8 +0 + 62 + 0 + 10 +5416.23438 + 20 +7715.441949 + 30 +0.0 + 11 +5472.48438 + 21 +7715.441949 + 31 +0.0 + 0 +LINE + 5 +D61 + 8 +0 + 62 + 0 + 10 +6589.308685 + 20 +10262.726907 + 30 +0.0 + 11 +6569.359336 + 21 +10297.280194 + 31 +0.0 + 0 +LINE + 5 +D62 + 8 +0 + 62 + 0 + 10 +6513.109336 + 20 +10394.708052 + 30 +0.0 + 11 +6484.984336 + 21 +10443.421981 + 31 +0.0 + 0 +LINE + 5 +D63 + 8 +0 + 62 + 0 + 10 +6513.109336 + 20 +10297.280194 + 30 +0.0 + 11 +6484.984336 + 21 +10345.994123 + 31 +0.0 + 0 +LINE + 5 +D64 + 8 +0 + 62 + 0 + 10 +6428.734336 + 20 +10443.421981 + 30 +0.0 + 11 +6400.609336 + 21 +10492.13591 + 31 +0.0 + 0 +LINE + 5 +D65 + 8 +0 + 62 + 0 + 10 +6506.912361 + 20 +10210.585813 + 30 +0.0 + 11 +6484.984336 + 21 +10248.566266 + 31 +0.0 + 0 +LINE + 5 +D66 + 8 +0 + 62 + 0 + 10 +6428.734336 + 20 +10345.994123 + 30 +0.0 + 11 +6400.609336 + 21 +10394.708052 + 31 +0.0 + 0 +LINE + 5 +D67 + 8 +0 + 62 + 0 + 10 +6428.734336 + 20 +10248.566266 + 30 +0.0 + 11 +6400.609336 + 21 +10297.280195 + 31 +0.0 + 0 +LINE + 5 +D68 + 8 +0 + 62 + 0 + 10 +6344.359336 + 20 +10394.708053 + 30 +0.0 + 11 +6316.234336 + 21 +10443.421982 + 31 +0.0 + 0 +LINE + 5 +D69 + 8 +0 + 62 + 0 + 10 +6424.516036 + 20 +10158.444719 + 30 +0.0 + 11 +6400.609336 + 21 +10199.852337 + 31 +0.0 + 0 +LINE + 5 +D6A + 8 +0 + 62 + 0 + 10 +6344.359336 + 20 +10297.280195 + 30 +0.0 + 11 +6316.234336 + 21 +10345.994124 + 31 +0.0 + 0 +LINE + 5 +D6B + 8 +0 + 62 + 0 + 10 +6344.359336 + 20 +10199.852337 + 30 +0.0 + 11 +6316.234336 + 21 +10248.566266 + 31 +0.0 + 0 +LINE + 5 +D6C + 8 +0 + 62 + 0 + 10 +6259.984336 + 20 +10345.994124 + 30 +0.0 + 11 +6233.328032 + 21 +10392.164198 + 31 +0.0 + 0 +LINE + 5 +D6D + 8 +0 + 62 + 0 + 10 +6342.119711 + 20 +10106.303624 + 30 +0.0 + 11 +6316.234337 + 21 +10151.138408 + 31 +0.0 + 0 +LINE + 5 +D6E + 8 +0 + 62 + 0 + 10 +6259.984337 + 20 +10248.566266 + 30 +0.0 + 11 +6231.859337 + 21 +10297.280195 + 31 +0.0 + 0 +LINE + 5 +D6F + 8 +0 + 62 + 0 + 10 +6259.984337 + 20 +10151.138408 + 30 +0.0 + 11 +6231.859337 + 21 +10199.852337 + 31 +0.0 + 0 +LINE + 5 +D70 + 8 +0 + 62 + 0 + 10 +6175.609337 + 20 +10297.280195 + 30 +0.0 + 11 +6150.636356 + 21 +10340.534666 + 31 +0.0 + 0 +LINE + 5 +D71 + 8 +0 + 62 + 0 + 10 +6259.723386 + 20 +10054.16253 + 30 +0.0 + 11 +6231.859337 + 21 +10102.424479 + 31 +0.0 + 0 +LINE + 5 +D72 + 8 +0 + 62 + 0 + 10 +6175.609337 + 20 +10199.852337 + 30 +0.0 + 11 +6147.484337 + 21 +10248.566266 + 31 +0.0 + 0 +LINE + 5 +D73 + 8 +0 + 62 + 0 + 10 +6175.609337 + 20 +10102.424479 + 30 +0.0 + 11 +6147.484337 + 21 +10151.138408 + 31 +0.0 + 0 +LINE + 5 +D74 + 8 +0 + 62 + 0 + 10 +6091.234337 + 20 +10248.566266 + 30 +0.0 + 11 +6067.944681 + 21 +10288.905134 + 31 +0.0 + 0 +LINE + 5 +D75 + 8 +0 + 62 + 0 + 10 +6175.609337 + 20 +10004.996622 + 30 +0.0 + 11 +6147.484337 + 21 +10053.710551 + 31 +0.0 + 0 +LINE + 5 +D76 + 8 +0 + 62 + 0 + 10 +6091.234337 + 20 +10151.138408 + 30 +0.0 + 11 +6063.109337 + 21 +10199.852337 + 31 +0.0 + 0 +LINE + 5 +D77 + 8 +0 + 62 + 0 + 10 +6091.234338 + 20 +10053.710551 + 30 +0.0 + 11 +6063.109338 + 21 +10102.42448 + 31 +0.0 + 0 +LINE + 5 +D78 + 8 +0 + 62 + 0 + 10 +6006.859338 + 20 +10199.852338 + 30 +0.0 + 11 +5985.253006 + 21 +10237.275602 + 31 +0.0 + 0 +LINE + 5 +D79 + 8 +0 + 62 + 0 + 10 +6091.234338 + 20 +9956.282693 + 30 +0.0 + 11 +6063.109338 + 21 +10004.996622 + 31 +0.0 + 0 +LINE + 5 +D7A + 8 +0 + 62 + 0 + 10 +6006.859338 + 20 +10102.42448 + 30 +0.0 + 11 +5978.734338 + 21 +10151.138409 + 31 +0.0 + 0 +LINE + 5 +D7B + 8 +0 + 62 + 0 + 10 +6006.859338 + 20 +10004.996622 + 30 +0.0 + 11 +5978.734338 + 21 +10053.710551 + 31 +0.0 + 0 +LINE + 5 +D7C + 8 +0 + 62 + 0 + 10 +5922.484338 + 20 +10151.138409 + 30 +0.0 + 11 +5902.561331 + 21 +10185.64607 + 31 +0.0 + 0 +LINE + 5 +D7D + 8 +0 + 62 + 0 + 10 +6006.859338 + 20 +9907.568764 + 30 +0.0 + 11 +5978.734338 + 21 +9956.282693 + 31 +0.0 + 0 +LINE + 5 +D7E + 8 +0 + 62 + 0 + 10 +5922.484338 + 20 +10053.710551 + 30 +0.0 + 11 +5894.359338 + 21 +10102.42448 + 31 +0.0 + 0 +LINE + 5 +D7F + 8 +0 + 62 + 0 + 10 +5922.484338 + 20 +9956.282693 + 30 +0.0 + 11 +5894.359338 + 21 +10004.996622 + 31 +0.0 + 0 +LINE + 5 +D80 + 8 +0 + 62 + 0 + 10 +5838.109338 + 20 +10102.42448 + 30 +0.0 + 11 +5819.869655 + 21 +10134.016538 + 31 +0.0 + 0 +LINE + 5 +D81 + 8 +0 + 62 + 0 + 10 +5922.484339 + 20 +9858.854835 + 30 +0.0 + 11 +5894.359339 + 21 +9907.568764 + 31 +0.0 + 0 +LINE + 5 +D82 + 8 +0 + 62 + 0 + 10 +5838.109339 + 20 +10004.996622 + 30 +0.0 + 11 +5809.984339 + 21 +10053.710551 + 31 +0.0 + 0 +LINE + 5 +D83 + 8 +0 + 62 + 0 + 10 +5838.109339 + 20 +9907.568764 + 30 +0.0 + 11 +5809.984339 + 21 +9956.282693 + 31 +0.0 + 0 +LINE + 5 +D84 + 8 +0 + 62 + 0 + 10 +5753.734339 + 20 +10053.710551 + 30 +0.0 + 11 +5737.17798 + 21 +10082.387006 + 31 +0.0 + 0 +LINE + 5 +D85 + 8 +0 + 62 + 0 + 10 +5814.116984 + 20 +9851.696884 + 30 +0.0 + 11 +5809.984339 + 21 +9858.854836 + 31 +0.0 + 0 +LINE + 5 +D86 + 8 +0 + 62 + 0 + 10 +5753.734339 + 20 +9956.282693 + 30 +0.0 + 11 +5725.609339 + 21 +10004.996622 + 31 +0.0 + 0 +LINE + 5 +D87 + 8 +0 + 62 + 0 + 10 +5753.734339 + 20 +9858.854836 + 30 +0.0 + 11 +5725.609339 + 21 +9907.568765 + 31 +0.0 + 0 +LINE + 5 +D88 + 8 +0 + 62 + 0 + 10 +5669.359339 + 20 +10004.996623 + 30 +0.0 + 11 +5654.486305 + 21 +10030.757474 + 31 +0.0 + 0 +LINE + 5 +D89 + 8 +0 + 62 + 0 + 10 +5753.734339 + 20 +9761.426978 + 30 +0.0 + 11 +5725.609339 + 21 +9810.140907 + 31 +0.0 + 0 +LINE + 5 +D8A + 8 +0 + 62 + 0 + 10 +5669.359339 + 20 +9907.568765 + 30 +0.0 + 11 +5641.234339 + 21 +9956.282694 + 31 +0.0 + 0 +LINE + 5 +D8B + 8 +0 + 62 + 0 + 10 +5753.734339 + 20 +9663.99912 + 30 +0.0 + 11 +5725.609339 + 21 +9712.713049 + 31 +0.0 + 0 +LINE + 5 +D8C + 8 +0 + 62 + 0 + 10 +5669.359339 + 20 +9810.140907 + 30 +0.0 + 11 +5641.234339 + 21 +9858.854836 + 31 +0.0 + 0 +LINE + 5 +D8D + 8 +0 + 62 + 0 + 10 +5584.984339 + 20 +9956.282694 + 30 +0.0 + 11 +5571.794629 + 21 +9979.127942 + 31 +0.0 + 0 +LINE + 5 +D8E + 8 +0 + 62 + 0 + 10 +5753.73434 + 20 +9566.571262 + 30 +0.0 + 11 +5725.60934 + 21 +9615.285191 + 31 +0.0 + 0 +LINE + 5 +D8F + 8 +0 + 62 + 0 + 10 +5669.35934 + 20 +9712.713049 + 30 +0.0 + 11 +5641.23434 + 21 +9761.426978 + 31 +0.0 + 0 +LINE + 5 +D90 + 8 +0 + 62 + 0 + 10 +5584.98434 + 20 +9858.854836 + 30 +0.0 + 11 +5556.85934 + 21 +9907.568765 + 31 +0.0 + 0 +LINE + 5 +D91 + 8 +0 + 62 + 0 + 10 +5753.73434 + 20 +9469.143404 + 30 +0.0 + 11 +5725.60934 + 21 +9517.857333 + 31 +0.0 + 0 +LINE + 5 +D92 + 8 +0 + 62 + 0 + 10 +5669.35934 + 20 +9615.285191 + 30 +0.0 + 11 +5641.23434 + 21 +9663.99912 + 31 +0.0 + 0 +LINE + 5 +D93 + 8 +0 + 62 + 0 + 10 +5584.98434 + 20 +9761.426978 + 30 +0.0 + 11 +5556.85934 + 21 +9810.140907 + 31 +0.0 + 0 +LINE + 5 +D94 + 8 +0 + 62 + 0 + 10 +5500.60934 + 20 +9907.568765 + 30 +0.0 + 11 +5489.102954 + 21 +9927.49841 + 31 +0.0 + 0 +LINE + 5 +D95 + 8 +0 + 62 + 0 + 10 +5753.73434 + 20 +9371.715547 + 30 +0.0 + 11 +5725.60934 + 21 +9420.429476 + 31 +0.0 + 0 +LINE + 5 +D96 + 8 +0 + 62 + 0 + 10 +5669.35934 + 20 +9517.857333 + 30 +0.0 + 11 +5641.23434 + 21 +9566.571262 + 31 +0.0 + 0 +LINE + 5 +D97 + 8 +0 + 62 + 0 + 10 +5584.98434 + 20 +9663.99912 + 30 +0.0 + 11 +5556.85934 + 21 +9712.713049 + 31 +0.0 + 0 +LINE + 5 +D98 + 8 +0 + 62 + 0 + 10 +5500.60934 + 20 +9810.140907 + 30 +0.0 + 11 +5472.48434 + 21 +9858.854836 + 31 +0.0 + 0 +LINE + 5 +D99 + 8 +0 + 62 + 0 + 10 +5669.35934 + 20 +9420.429476 + 30 +0.0 + 11 +5641.23434 + 21 +9469.143405 + 31 +0.0 + 0 +LINE + 5 +D9A + 8 +0 + 62 + 0 + 10 +5584.98434 + 20 +9566.571263 + 30 +0.0 + 11 +5556.85934 + 21 +9615.285191 + 31 +0.0 + 0 +LINE + 5 +D9B + 8 +0 + 62 + 0 + 10 +5500.60934 + 20 +9712.713049 + 30 +0.0 + 11 +5472.48434 + 21 +9761.426978 + 31 +0.0 + 0 +LINE + 5 +D9C + 8 +0 + 62 + 0 + 10 +5416.23434 + 20 +9858.854836 + 30 +0.0 + 11 +5406.411279 + 21 +9875.868877 + 31 +0.0 + 0 +LINE + 5 +D9D + 8 +0 + 62 + 0 + 10 +5649.957554 + 20 +9356.606497 + 30 +0.0 + 11 +5641.23434 + 21 +9371.715547 + 31 +0.0 + 0 +LINE + 5 +D9E + 8 +0 + 62 + 0 + 10 +5584.98434 + 20 +9469.143405 + 30 +0.0 + 11 +5556.85934 + 21 +9517.857334 + 31 +0.0 + 0 +LINE + 5 +D9F + 8 +0 + 62 + 0 + 10 +5500.60934 + 20 +9615.285192 + 30 +0.0 + 11 +5472.48434 + 21 +9663.999121 + 31 +0.0 + 0 +LINE + 5 +DA0 + 8 +0 + 62 + 0 + 10 +5416.23434 + 20 +9761.426978 + 30 +0.0 + 11 +5388.10934 + 21 +9810.140907 + 31 +0.0 + 0 +LINE + 5 +DA1 + 8 +0 + 62 + 0 + 10 +5584.984341 + 20 +9371.715547 + 30 +0.0 + 11 +5556.859341 + 21 +9420.429476 + 31 +0.0 + 0 +LINE + 5 +DA2 + 8 +0 + 62 + 0 + 10 +5500.609341 + 20 +9517.857334 + 30 +0.0 + 11 +5472.484341 + 21 +9566.571263 + 31 +0.0 + 0 +LINE + 5 +DA3 + 8 +0 + 62 + 0 + 10 +5416.234341 + 20 +9663.999121 + 30 +0.0 + 11 +5388.109341 + 21 +9712.71305 + 31 +0.0 + 0 +LINE + 5 +DA4 + 8 +0 + 62 + 0 + 10 +5500.609341 + 20 +9420.429476 + 30 +0.0 + 11 +5472.484341 + 21 +9469.143405 + 31 +0.0 + 0 +LINE + 5 +DA5 + 8 +0 + 62 + 0 + 10 +5416.234341 + 20 +9566.571263 + 30 +0.0 + 11 +5388.109341 + 21 +9615.285192 + 31 +0.0 + 0 +LINE + 5 +DA6 + 8 +0 + 62 + 0 + 10 +5500.609341 + 20 +9323.001618 + 30 +0.0 + 11 +5472.484341 + 21 +9371.715547 + 31 +0.0 + 0 +LINE + 5 +DA7 + 8 +0 + 62 + 0 + 10 +5416.234341 + 20 +9469.143405 + 30 +0.0 + 11 +5388.109341 + 21 +9517.857334 + 31 +0.0 + 0 +LINE + 5 +DA8 + 8 +0 + 62 + 0 + 10 +5500.609341 + 20 +9225.57376 + 30 +0.0 + 11 +5472.484341 + 21 +9274.287689 + 31 +0.0 + 0 +LINE + 5 +DA9 + 8 +0 + 62 + 0 + 10 +5416.234341 + 20 +9371.715547 + 30 +0.0 + 11 +5388.109341 + 21 +9420.429476 + 31 +0.0 + 0 +LINE + 5 +DAA + 8 +0 + 62 + 0 + 10 +5500.609341 + 20 +9128.145902 + 30 +0.0 + 11 +5472.484341 + 21 +9176.859831 + 31 +0.0 + 0 +LINE + 5 +DAB + 8 +0 + 62 + 0 + 10 +5416.234341 + 20 +9274.287689 + 30 +0.0 + 11 +5388.109341 + 21 +9323.001618 + 31 +0.0 + 0 +LINE + 5 +DAC + 8 +0 + 62 + 0 + 10 +5500.609341 + 20 +9030.718045 + 30 +0.0 + 11 +5472.484341 + 21 +9079.431974 + 31 +0.0 + 0 +LINE + 5 +DAD + 8 +0 + 62 + 0 + 10 +5416.234341 + 20 +9176.859832 + 30 +0.0 + 11 +5388.109341 + 21 +9225.573761 + 31 +0.0 + 0 +LINE + 5 +DAE + 8 +0 + 62 + 0 + 10 +5500.609342 + 20 +8933.290187 + 30 +0.0 + 11 +5472.484342 + 21 +8982.004116 + 31 +0.0 + 0 +LINE + 5 +DAF + 8 +0 + 62 + 0 + 10 +5416.234342 + 20 +9079.431974 + 30 +0.0 + 11 +5388.109342 + 21 +9128.145903 + 31 +0.0 + 0 +LINE + 5 +DB0 + 8 +0 + 62 + 0 + 10 +5500.609342 + 20 +8835.862329 + 30 +0.0 + 11 +5472.484342 + 21 +8884.576258 + 31 +0.0 + 0 +LINE + 5 +DB1 + 8 +0 + 62 + 0 + 10 +5416.234342 + 20 +8982.004116 + 30 +0.0 + 11 +5388.109342 + 21 +9030.718045 + 31 +0.0 + 0 +LINE + 5 +DB2 + 8 +0 + 62 + 0 + 10 +5500.609342 + 20 +8738.434471 + 30 +0.0 + 11 +5472.484342 + 21 +8787.1484 + 31 +0.0 + 0 +LINE + 5 +DB3 + 8 +0 + 62 + 0 + 10 +5416.234342 + 20 +8884.576258 + 30 +0.0 + 11 +5388.109342 + 21 +8933.290187 + 31 +0.0 + 0 +LINE + 5 +DB4 + 8 +0 + 62 + 0 + 10 +5500.609342 + 20 +8641.006613 + 30 +0.0 + 11 +5472.484342 + 21 +8689.720542 + 31 +0.0 + 0 +LINE + 5 +DB5 + 8 +0 + 62 + 0 + 10 +5416.234342 + 20 +8787.1484 + 30 +0.0 + 11 +5388.109342 + 21 +8835.862329 + 31 +0.0 + 0 +LINE + 5 +DB6 + 8 +0 + 62 + 0 + 10 +5500.609342 + 20 +8543.578756 + 30 +0.0 + 11 +5472.484342 + 21 +8592.292685 + 31 +0.0 + 0 +LINE + 5 +DB7 + 8 +0 + 62 + 0 + 10 +5416.234342 + 20 +8689.720542 + 30 +0.0 + 11 +5388.109342 + 21 +8738.434471 + 31 +0.0 + 0 +LINE + 5 +DB8 + 8 +0 + 62 + 0 + 10 +5500.609343 + 20 +8446.150898 + 30 +0.0 + 11 +5472.484343 + 21 +8494.864827 + 31 +0.0 + 0 +LINE + 5 +DB9 + 8 +0 + 62 + 0 + 10 +5416.234343 + 20 +8592.292685 + 30 +0.0 + 11 +5388.109343 + 21 +8641.006614 + 31 +0.0 + 0 +LINE + 5 +DBA + 8 +0 + 62 + 0 + 10 +5500.609343 + 20 +8348.72304 + 30 +0.0 + 11 +5472.484343 + 21 +8397.436969 + 31 +0.0 + 0 +LINE + 5 +DBB + 8 +0 + 62 + 0 + 10 +5416.234343 + 20 +8494.864827 + 30 +0.0 + 11 +5388.109343 + 21 +8543.578756 + 31 +0.0 + 0 +LINE + 5 +DBC + 8 +0 + 62 + 0 + 10 +5500.609343 + 20 +8251.295182 + 30 +0.0 + 11 +5472.484343 + 21 +8300.009111 + 31 +0.0 + 0 +LINE + 5 +DBD + 8 +0 + 62 + 0 + 10 +5416.234343 + 20 +8397.436969 + 30 +0.0 + 11 +5388.109343 + 21 +8446.150898 + 31 +0.0 + 0 +LINE + 5 +DBE + 8 +0 + 62 + 0 + 10 +5500.609343 + 20 +8153.867324 + 30 +0.0 + 11 +5472.484343 + 21 +8202.581253 + 31 +0.0 + 0 +LINE + 5 +DBF + 8 +0 + 62 + 0 + 10 +5416.234343 + 20 +8300.009111 + 30 +0.0 + 11 +5388.109343 + 21 +8348.72304 + 31 +0.0 + 0 +LINE + 5 +DC0 + 8 +0 + 62 + 0 + 10 +5500.609343 + 20 +8056.439466 + 30 +0.0 + 11 +5472.484343 + 21 +8105.153395 + 31 +0.0 + 0 +LINE + 5 +DC1 + 8 +0 + 62 + 0 + 10 +5416.234343 + 20 +8202.581253 + 30 +0.0 + 11 +5388.109343 + 21 +8251.295182 + 31 +0.0 + 0 +LINE + 5 +DC2 + 8 +0 + 62 + 0 + 10 +5500.609344 + 20 +7959.011609 + 30 +0.0 + 11 +5472.484344 + 21 +8007.725538 + 31 +0.0 + 0 +LINE + 5 +DC3 + 8 +0 + 62 + 0 + 10 +5416.234344 + 20 +8105.153396 + 30 +0.0 + 11 +5388.109344 + 21 +8153.867325 + 31 +0.0 + 0 +LINE + 5 +DC4 + 8 +0 + 62 + 0 + 10 +5500.609344 + 20 +7861.583751 + 30 +0.0 + 11 +5472.484344 + 21 +7910.29768 + 31 +0.0 + 0 +LINE + 5 +DC5 + 8 +0 + 62 + 0 + 10 +5416.234344 + 20 +8007.725538 + 30 +0.0 + 11 +5388.109344 + 21 +8056.439467 + 31 +0.0 + 0 +LINE + 5 +DC6 + 8 +0 + 62 + 0 + 10 +5500.609344 + 20 +7764.155893 + 30 +0.0 + 11 +5472.484344 + 21 +7812.869822 + 31 +0.0 + 0 +LINE + 5 +DC7 + 8 +0 + 62 + 0 + 10 +5416.234344 + 20 +7910.29768 + 30 +0.0 + 11 +5388.109344 + 21 +7959.011609 + 31 +0.0 + 0 +LINE + 5 +DC8 + 8 +0 + 62 + 0 + 10 +5476.783717 + 20 +7707.995231 + 30 +0.0 + 11 +5472.484344 + 21 +7715.441964 + 31 +0.0 + 0 +LINE + 5 +DC9 + 8 +0 + 62 + 0 + 10 +5416.234344 + 20 +7812.869822 + 30 +0.0 + 11 +5388.109344 + 21 +7861.583751 + 31 +0.0 + 0 +LINE + 5 +DCA + 8 +0 + 62 + 0 + 10 +5416.234344 + 20 +7715.441964 + 30 +0.0 + 11 +5388.109344 + 21 +7764.155893 + 31 +0.0 + 0 +LINE + 5 +DCB + 8 +0 + 62 + 0 + 10 +6597.484335 + 20 +10345.994123 + 30 +0.0 + 11 +6569.359335 + 21 +10394.708052 + 31 +0.0 + 0 +LINE + 5 +DCC + 8 +0 + 62 + 0 + 10 +6513.109335 + 20 +10492.13591 + 30 +0.0 + 11 +6484.984335 + 21 +10540.849839 + 31 +0.0 + 0 +LINE + 5 +DCD + 8 +0 + 62 + 0 + 10 +6671.70501 + 20 +10314.868001 + 30 +0.0 + 11 +6653.734335 + 21 +10345.994123 + 31 +0.0 + 0 +LINE + 5 +DCE + 8 +0 + 62 + 0 + 10 +6597.484335 + 20 +10443.421981 + 30 +0.0 + 11 +6569.359335 + 21 +10492.13591 + 31 +0.0 + 0 +LINE + 5 +DCF + 8 +0 + 62 + 0 + 10 +6681.859335 + 20 +10394.708052 + 30 +0.0 + 11 +6653.734335 + 21 +10443.421981 + 31 +0.0 + 0 +LINE + 5 +DD0 + 8 +0 + 62 + 0 + 10 +6597.484335 + 20 +10540.849839 + 30 +0.0 + 11 +6569.359335 + 21 +10589.563768 + 31 +0.0 + 0 +LINE + 5 +DD1 + 8 +0 + 62 + 0 + 10 +6754.101335 + 20 +10367.009095 + 30 +0.0 + 11 +6738.109335 + 21 +10394.708052 + 31 +0.0 + 0 +LINE + 5 +DD2 + 8 +0 + 62 + 0 + 10 +6681.859335 + 20 +10492.13591 + 30 +0.0 + 11 +6653.734335 + 21 +10540.849839 + 31 +0.0 + 0 +LINE + 5 +DD3 + 8 +0 + 62 + 0 + 10 +6766.234335 + 20 +10443.421981 + 30 +0.0 + 11 +6738.109335 + 21 +10492.13591 + 31 +0.0 + 0 +LINE + 5 +DD4 + 8 +0 + 62 + 0 + 10 +6681.859335 + 20 +10589.563768 + 30 +0.0 + 11 +6653.734335 + 21 +10638.277697 + 31 +0.0 + 0 +LINE + 5 +DD5 + 8 +0 + 62 + 0 + 10 +6836.49766 + 20 +10419.15019 + 30 +0.0 + 11 +6822.484334 + 21 +10443.421981 + 31 +0.0 + 0 +LINE + 5 +DD6 + 8 +0 + 62 + 0 + 10 +6766.234334 + 20 +10540.849838 + 30 +0.0 + 11 +6738.109334 + 21 +10589.563767 + 31 +0.0 + 0 +LINE + 5 +DD7 + 8 +0 + 62 + 0 + 10 +6850.609334 + 20 +10492.135909 + 30 +0.0 + 11 +6822.484334 + 21 +10540.849838 + 31 +0.0 + 0 +LINE + 5 +DD8 + 8 +0 + 62 + 0 + 10 +6766.234334 + 20 +10638.277696 + 30 +0.0 + 11 +6738.109334 + 21 +10686.991625 + 31 +0.0 + 0 +LINE + 5 +DD9 + 8 +0 + 62 + 0 + 10 +6918.893984 + 20 +10471.291284 + 30 +0.0 + 11 +6906.859334 + 21 +10492.135909 + 31 +0.0 + 0 +LINE + 5 +DDA + 8 +0 + 62 + 0 + 10 +6850.609334 + 20 +10589.563767 + 30 +0.0 + 11 +6822.484334 + 21 +10638.277696 + 31 +0.0 + 0 +LINE + 5 +DDB + 8 +0 + 62 + 0 + 10 +6934.984334 + 20 +10540.849838 + 30 +0.0 + 11 +6906.859334 + 21 +10589.563767 + 31 +0.0 + 0 +LINE + 5 +DDC + 8 +0 + 62 + 0 + 10 +6850.609334 + 20 +10686.991625 + 30 +0.0 + 11 +6822.484334 + 21 +10735.705554 + 31 +0.0 + 0 +LINE + 5 +DDD + 8 +0 + 62 + 0 + 10 +7001.290309 + 20 +10523.432378 + 30 +0.0 + 11 +6991.234334 + 21 +10540.849838 + 31 +0.0 + 0 +LINE + 5 +DDE + 8 +0 + 62 + 0 + 10 +6934.984334 + 20 +10638.277696 + 30 +0.0 + 11 +6906.859334 + 21 +10686.991625 + 31 +0.0 + 0 +LINE + 5 +DDF + 8 +0 + 62 + 0 + 10 +7019.359334 + 20 +10589.563767 + 30 +0.0 + 11 +6991.234334 + 21 +10638.277696 + 31 +0.0 + 0 +LINE + 5 +DE0 + 8 +0 + 62 + 0 + 10 +6934.984334 + 20 +10735.705554 + 30 +0.0 + 11 +6906.859334 + 21 +10784.419483 + 31 +0.0 + 0 +LINE + 5 +DE1 + 8 +0 + 62 + 0 + 10 +7083.686634 + 20 +10575.573472 + 30 +0.0 + 11 +7075.609333 + 21 +10589.563767 + 31 +0.0 + 0 +LINE + 5 +DE2 + 8 +0 + 62 + 0 + 10 +7019.359333 + 20 +10686.991625 + 30 +0.0 + 11 +6991.234333 + 21 +10735.705554 + 31 +0.0 + 0 +LINE + 5 +DE3 + 8 +0 + 62 + 0 + 10 +7103.734333 + 20 +10638.277696 + 30 +0.0 + 11 +7075.609333 + 21 +10686.991625 + 31 +0.0 + 0 +LINE + 5 +DE4 + 8 +0 + 62 + 0 + 10 +7019.359333 + 20 +10784.419483 + 30 +0.0 + 11 +6991.234333 + 21 +10833.133412 + 31 +0.0 + 0 +LINE + 5 +DE5 + 8 +0 + 62 + 0 + 10 +7166.082959 + 20 +10627.714566 + 30 +0.0 + 11 +7159.984333 + 21 +10638.277696 + 31 +0.0 + 0 +LINE + 5 +DE6 + 8 +0 + 62 + 0 + 10 +7103.734333 + 20 +10735.705553 + 30 +0.0 + 11 +7075.609333 + 21 +10784.419482 + 31 +0.0 + 0 +LINE + 5 +DE7 + 8 +0 + 62 + 0 + 10 +7019.359333 + 20 +10881.84734 + 30 +0.0 + 11 +7018.898947 + 21 +10882.644752 + 31 +0.0 + 0 +LINE + 5 +DE8 + 8 +0 + 62 + 0 + 10 +7188.109333 + 20 +10686.991624 + 30 +0.0 + 11 +7159.984333 + 21 +10735.705553 + 31 +0.0 + 0 +LINE + 5 +DE9 + 8 +0 + 62 + 0 + 10 +7103.734333 + 20 +10833.133411 + 30 +0.0 + 11 +7075.609333 + 21 +10881.84734 + 31 +0.0 + 0 +LINE + 5 +DEA + 8 +0 + 62 + 0 + 10 +7248.479283 + 20 +10679.85566 + 30 +0.0 + 11 +7244.359333 + 21 +10686.991624 + 31 +0.0 + 0 +LINE + 5 +DEB + 8 +0 + 62 + 0 + 10 +7188.109333 + 20 +10784.419482 + 30 +0.0 + 11 +7159.984333 + 21 +10833.133411 + 31 +0.0 + 0 +LINE + 5 +DEC + 8 +0 + 62 + 0 + 10 +7103.734333 + 20 +10930.561269 + 30 +0.0 + 11 +7101.590622 + 21 +10934.274284 + 31 +0.0 + 0 +LINE + 5 +DED + 8 +0 + 62 + 0 + 10 +7272.484332 + 20 +10735.705553 + 30 +0.0 + 11 +7244.359332 + 21 +10784.419482 + 31 +0.0 + 0 +LINE + 5 +DEE + 8 +0 + 62 + 0 + 10 +7188.109332 + 20 +10881.84734 + 30 +0.0 + 11 +7159.984332 + 21 +10930.561269 + 31 +0.0 + 0 +LINE + 5 +DEF + 8 +0 + 62 + 0 + 10 +7330.875608 + 20 +10731.996755 + 30 +0.0 + 11 +7328.734332 + 21 +10735.705553 + 31 +0.0 + 0 +LINE + 5 +DF0 + 8 +0 + 62 + 0 + 10 +7272.484332 + 20 +10833.133411 + 30 +0.0 + 11 +7244.359332 + 21 +10881.84734 + 31 +0.0 + 0 +LINE + 5 +DF1 + 8 +0 + 62 + 0 + 10 +7188.109332 + 20 +10979.275198 + 30 +0.0 + 11 +7184.282298 + 21 +10985.903817 + 31 +0.0 + 0 +LINE + 5 +DF2 + 8 +0 + 62 + 0 + 10 +7356.859332 + 20 +10784.419482 + 30 +0.0 + 11 +7328.734332 + 21 +10833.133411 + 31 +0.0 + 0 +LINE + 5 +DF3 + 8 +0 + 62 + 0 + 10 +7272.484332 + 20 +10930.561269 + 30 +0.0 + 11 +7244.359332 + 21 +10979.275198 + 31 +0.0 + 0 +LINE + 5 +DF4 + 8 +0 + 62 + 0 + 10 +7413.271933 + 20 +10784.137849 + 30 +0.0 + 11 +7413.109332 + 21 +10784.419482 + 31 +0.0 + 0 +LINE + 5 +DF5 + 8 +0 + 62 + 0 + 10 +7356.859332 + 20 +10881.84734 + 30 +0.0 + 11 +7328.734332 + 21 +10930.561269 + 31 +0.0 + 0 +LINE + 5 +DF6 + 8 +0 + 62 + 0 + 10 +7272.484332 + 20 +11027.989127 + 30 +0.0 + 11 +7266.973973 + 21 +11037.533349 + 31 +0.0 + 0 +LINE + 5 +DF7 + 8 +0 + 62 + 0 + 10 +7441.234332 + 20 +10833.133411 + 30 +0.0 + 11 +7413.109332 + 21 +10881.84734 + 31 +0.0 + 0 +LINE + 5 +DF8 + 8 +0 + 62 + 0 + 10 +7356.859332 + 20 +10979.275198 + 30 +0.0 + 11 +7328.734332 + 21 +11027.989127 + 31 +0.0 + 0 +LINE + 5 +DF9 + 8 +0 + 62 + 0 + 10 +7441.234332 + 20 +10930.561268 + 30 +0.0 + 11 +7413.109332 + 21 +10979.275197 + 31 +0.0 + 0 +LINE + 5 +DFA + 8 +0 + 62 + 0 + 10 +7356.859332 + 20 +11076.703055 + 30 +0.0 + 11 +7349.665648 + 21 +11089.162881 + 31 +0.0 + 0 +LINE + 5 +DFB + 8 +0 + 62 + 0 + 10 +7525.609331 + 20 +10881.847339 + 30 +0.0 + 11 +7497.484331 + 21 +10930.561268 + 31 +0.0 + 0 +LINE + 5 +DFC + 8 +0 + 62 + 0 + 10 +7441.234331 + 20 +11027.989126 + 30 +0.0 + 11 +7413.109331 + 21 +11076.703055 + 31 +0.0 + 0 +LINE + 5 +DFD + 8 +0 + 62 + 0 + 10 +7525.609331 + 20 +10979.275197 + 30 +0.0 + 11 +7497.484331 + 21 +11027.989126 + 31 +0.0 + 0 +LINE + 5 +DFE + 8 +0 + 62 + 0 + 10 +7441.234331 + 20 +11125.416984 + 30 +0.0 + 11 +7432.357323 + 21 +11140.792413 + 31 +0.0 + 0 +LINE + 5 +DFF + 8 +0 + 62 + 0 + 10 +7609.984331 + 20 +10930.561268 + 30 +0.0 + 11 +7581.859331 + 21 +10979.275197 + 31 +0.0 + 0 +LINE + 5 +E00 + 8 +0 + 62 + 0 + 10 +7525.609331 + 20 +11076.703055 + 30 +0.0 + 11 +7497.484331 + 21 +11125.416984 + 31 +0.0 + 0 +LINE + 5 +E01 + 8 +0 + 62 + 0 + 10 +7609.984331 + 20 +11027.989126 + 30 +0.0 + 11 +7581.859331 + 21 +11076.703055 + 31 +0.0 + 0 +LINE + 5 +E02 + 8 +0 + 62 + 0 + 10 +7525.609331 + 20 +11174.130913 + 30 +0.0 + 11 +7515.048999 + 21 +11192.421945 + 31 +0.0 + 0 +LINE + 5 +E03 + 8 +0 + 62 + 0 + 10 +7694.359331 + 20 +10979.275197 + 30 +0.0 + 11 +7666.234331 + 21 +11027.989126 + 31 +0.0 + 0 +LINE + 5 +E04 + 8 +0 + 62 + 0 + 10 +7609.984331 + 20 +11125.416984 + 30 +0.0 + 11 +7581.859331 + 21 +11174.130913 + 31 +0.0 + 0 +LINE + 5 +E05 + 8 +0 + 62 + 0 + 10 +7694.35933 + 20 +11076.703055 + 30 +0.0 + 11 +7666.23433 + 21 +11125.416984 + 31 +0.0 + 0 +LINE + 5 +E06 + 8 +0 + 62 + 0 + 10 +7609.98433 + 20 +11222.844842 + 30 +0.0 + 11 +7597.740674 + 21 +11244.051477 + 31 +0.0 + 0 +LINE + 5 +E07 + 8 +0 + 62 + 0 + 10 +7778.73433 + 20 +11027.989126 + 30 +0.0 + 11 +7750.60933 + 21 +11076.703055 + 31 +0.0 + 0 +LINE + 5 +E08 + 8 +0 + 62 + 0 + 10 +7694.35933 + 20 +11174.130913 + 30 +0.0 + 11 +7666.23433 + 21 +11222.844842 + 31 +0.0 + 0 +LINE + 5 +E09 + 8 +0 + 62 + 0 + 10 +7778.73433 + 20 +11125.416983 + 30 +0.0 + 11 +7750.60933 + 21 +11174.130912 + 31 +0.0 + 0 +LINE + 5 +E0A + 8 +0 + 62 + 0 + 10 +7694.35933 + 20 +11271.55877 + 30 +0.0 + 11 +7680.432349 + 21 +11295.681009 + 31 +0.0 + 0 +LINE + 5 +E0B + 8 +0 + 62 + 0 + 10 +7863.10933 + 20 +11076.703054 + 30 +0.0 + 11 +7834.98433 + 21 +11125.416983 + 31 +0.0 + 0 +LINE + 5 +E0C + 8 +0 + 62 + 0 + 10 +7778.73433 + 20 +11222.844841 + 30 +0.0 + 11 +7750.60933 + 21 +11271.55877 + 31 +0.0 + 0 +LINE + 5 +E0D + 8 +0 + 62 + 0 + 10 +7863.10933 + 20 +11174.130912 + 30 +0.0 + 11 +7834.98433 + 21 +11222.844841 + 31 +0.0 + 0 +LINE + 5 +E0E + 8 +0 + 62 + 0 + 10 +7778.73433 + 20 +11320.272699 + 30 +0.0 + 11 +7763.124024 + 21 +11347.310541 + 31 +0.0 + 0 +LINE + 5 +E0F + 8 +0 + 62 + 0 + 10 +7947.484329 + 20 +11125.416983 + 30 +0.0 + 11 +7919.359329 + 21 +11174.130912 + 31 +0.0 + 0 +LINE + 5 +E10 + 8 +0 + 62 + 0 + 10 +7863.109329 + 20 +11271.55877 + 30 +0.0 + 11 +7834.984329 + 21 +11320.272699 + 31 +0.0 + 0 +LINE + 5 +E11 + 8 +0 + 62 + 0 + 10 +7947.484329 + 20 +11222.844841 + 30 +0.0 + 11 +7919.359329 + 21 +11271.55877 + 31 +0.0 + 0 +LINE + 5 +E12 + 8 +0 + 62 + 0 + 10 +7863.109329 + 20 +11368.986628 + 30 +0.0 + 11 +7845.8157 + 21 +11398.940073 + 31 +0.0 + 0 +LINE + 5 +E13 + 8 +0 + 62 + 0 + 10 +8031.244368 + 20 +11175.196055 + 30 +0.0 + 11 +8003.734329 + 21 +11222.844841 + 31 +0.0 + 0 +LINE + 5 +E14 + 8 +0 + 62 + 0 + 10 +7947.484329 + 20 +11320.272699 + 30 +0.0 + 11 +7919.359329 + 21 +11368.986628 + 31 +0.0 + 0 +LINE + 5 +E15 + 8 +0 + 62 + 0 + 10 +8031.859329 + 20 +11271.55877 + 30 +0.0 + 11 +8003.734329 + 21 +11320.272699 + 31 +0.0 + 0 +LINE + 5 +E16 + 8 +0 + 62 + 0 + 10 +7947.484329 + 20 +11417.700557 + 30 +0.0 + 11 +7928.507375 + 21 +11450.569605 + 31 +0.0 + 0 +LINE + 5 +E17 + 8 +0 + 62 + 0 + 10 +8113.640693 + 20 +11227.337149 + 30 +0.0 + 11 +8088.109329 + 21 +11271.55877 + 31 +0.0 + 0 +LINE + 5 +E18 + 8 +0 + 62 + 0 + 10 +8031.859329 + 20 +11368.986628 + 30 +0.0 + 11 +8003.734329 + 21 +11417.700557 + 31 +0.0 + 0 +LINE + 5 +E19 + 8 +0 + 62 + 0 + 10 +8116.234329 + 20 +11320.272698 + 30 +0.0 + 11 +8088.109329 + 21 +11368.986627 + 31 +0.0 + 0 +LINE + 5 +E1A + 8 +0 + 62 + 0 + 10 +8031.859329 + 20 +11466.414485 + 30 +0.0 + 11 +8011.19905 + 21 +11502.199137 + 31 +0.0 + 0 +LINE + 5 +E1B + 8 +0 + 62 + 0 + 10 +8196.037018 + 20 +11279.478243 + 30 +0.0 + 11 +8172.484328 + 21 +11320.272698 + 31 +0.0 + 0 +LINE + 5 +E1C + 8 +0 + 62 + 0 + 10 +8116.234328 + 20 +11417.700556 + 30 +0.0 + 11 +8088.109328 + 21 +11466.414485 + 31 +0.0 + 0 +LINE + 5 +E1D + 8 +0 + 62 + 0 + 10 +8200.609328 + 20 +11368.986627 + 30 +0.0 + 11 +8172.484328 + 21 +11417.700556 + 31 +0.0 + 0 +LINE + 5 +E1E + 8 +0 + 62 + 0 + 10 +8116.234328 + 20 +11515.128414 + 30 +0.0 + 11 +8093.890726 + 21 +11553.828669 + 31 +0.0 + 0 +LINE + 5 +E1F + 8 +0 + 62 + 0 + 10 +8278.433343 + 20 +11331.619338 + 30 +0.0 + 11 +8256.859328 + 21 +11368.986627 + 31 +0.0 + 0 +LINE + 5 +E20 + 8 +0 + 62 + 0 + 10 +8200.609328 + 20 +11466.414485 + 30 +0.0 + 11 +8172.484328 + 21 +11515.128414 + 31 +0.0 + 0 +LINE + 5 +E21 + 8 +0 + 62 + 0 + 10 +7590.023219 + 20 +10895.987564 + 30 +0.0 + 11 +7609.984375 + 21 +10930.5613 + 31 +0.0 + 0 +LINE + 5 +E22 + 8 +0 + 62 + 0 + 10 +7666.234375 + 20 +11027.989158 + 30 +0.0 + 11 +7694.359375 + 21 +11076.703087 + 31 +0.0 + 0 +LINE + 5 +E23 + 8 +0 + 62 + 0 + 10 +7750.609375 + 20 +11174.130945 + 30 +0.0 + 11 +7778.734375 + 21 +11222.844874 + 31 +0.0 + 0 +LINE + 5 +E24 + 8 +0 + 62 + 0 + 10 +7834.984375 + 20 +11320.272731 + 30 +0.0 + 11 +7863.109375 + 21 +11368.98666 + 31 +0.0 + 0 +LINE + 5 +E25 + 8 +0 + 62 + 0 + 10 +7501.391389 + 20 +10839.900589 + 30 +0.0 + 11 +7525.609375 + 21 +10881.847371 + 31 +0.0 + 0 +LINE + 5 +E26 + 8 +0 + 62 + 0 + 10 +7581.859375 + 20 +10979.275229 + 30 +0.0 + 11 +7609.984375 + 21 +11027.989158 + 31 +0.0 + 0 +LINE + 5 +E27 + 8 +0 + 62 + 0 + 10 +7666.234375 + 20 +11125.417016 + 30 +0.0 + 11 +7694.359375 + 21 +11174.130944 + 31 +0.0 + 0 +LINE + 5 +E28 + 8 +0 + 62 + 0 + 10 +7750.609375 + 20 +11271.558802 + 30 +0.0 + 11 +7778.734375 + 21 +11320.272731 + 31 +0.0 + 0 +LINE + 5 +E29 + 8 +0 + 62 + 0 + 10 +7413.109375 + 20 +10784.419513 + 30 +0.0 + 11 +7441.234375 + 21 +10833.133442 + 31 +0.0 + 0 +LINE + 5 +E2A + 8 +0 + 62 + 0 + 10 +7497.484375 + 20 +10930.5613 + 30 +0.0 + 11 +7525.609375 + 21 +10979.275229 + 31 +0.0 + 0 +LINE + 5 +E2B + 8 +0 + 62 + 0 + 10 +7581.859375 + 20 +11076.703086 + 30 +0.0 + 11 +7609.984375 + 21 +11125.417015 + 31 +0.0 + 0 +LINE + 5 +E2C + 8 +0 + 62 + 0 + 10 +7666.234375 + 20 +11222.844873 + 30 +0.0 + 11 +7694.359375 + 21 +11271.558802 + 31 +0.0 + 0 +LINE + 5 +E2D + 8 +0 + 62 + 0 + 10 +7328.734375 + 20 +10735.705584 + 30 +0.0 + 11 +7356.859375 + 21 +10784.419513 + 31 +0.0 + 0 +LINE + 5 +E2E + 8 +0 + 62 + 0 + 10 +7413.109375 + 20 +10881.84737 + 30 +0.0 + 11 +7441.234375 + 21 +10930.561299 + 31 +0.0 + 0 +LINE + 5 +E2F + 8 +0 + 62 + 0 + 10 +7497.484375 + 20 +11027.989157 + 30 +0.0 + 11 +7525.609375 + 21 +11076.703086 + 31 +0.0 + 0 +LINE + 5 +E30 + 8 +0 + 62 + 0 + 10 +7581.859375 + 20 +11174.130944 + 30 +0.0 + 11 +7609.984375 + 21 +11222.844873 + 31 +0.0 + 0 +LINE + 5 +E31 + 8 +0 + 62 + 0 + 10 +7244.359375 + 20 +10686.991655 + 30 +0.0 + 11 +7272.484375 + 21 +10735.705583 + 31 +0.0 + 0 +LINE + 5 +E32 + 8 +0 + 62 + 0 + 10 +7328.734375 + 20 +10833.133441 + 30 +0.0 + 11 +7356.859375 + 21 +10881.84737 + 31 +0.0 + 0 +LINE + 5 +E33 + 8 +0 + 62 + 0 + 10 +7413.109375 + 20 +10979.275228 + 30 +0.0 + 11 +7441.234375 + 21 +11027.989157 + 31 +0.0 + 0 +LINE + 5 +E34 + 8 +0 + 62 + 0 + 10 +7497.484375 + 20 +11125.417015 + 30 +0.0 + 11 +7525.609375 + 21 +11174.130944 + 31 +0.0 + 0 +LINE + 5 +E35 + 8 +0 + 62 + 0 + 10 +5472.484376 + 20 +7715.441988 + 30 +0.0 + 11 +5500.609376 + 21 +7764.155917 + 31 +0.0 + 0 +LINE + 5 +E36 + 8 +0 + 62 + 0 + 10 +7159.984376 + 20 +10638.277725 + 30 +0.0 + 11 +7188.109376 + 21 +10686.991654 + 31 +0.0 + 0 +LINE + 5 +E37 + 8 +0 + 62 + 0 + 10 +7244.359376 + 20 +10784.419512 + 30 +0.0 + 11 +7272.484376 + 21 +10833.133441 + 31 +0.0 + 0 +LINE + 5 +E38 + 8 +0 + 62 + 0 + 10 +7328.734376 + 20 +10930.561299 + 30 +0.0 + 11 +7356.859376 + 21 +10979.275228 + 31 +0.0 + 0 +LINE + 5 +E39 + 8 +0 + 62 + 0 + 10 +7413.109376 + 20 +11076.703086 + 30 +0.0 + 11 +7441.234376 + 21 +11125.417015 + 31 +0.0 + 0 +LINE + 5 +E3A + 8 +0 + 62 + 0 + 10 +5411.934989 + 20 +7707.995231 + 30 +0.0 + 11 +5416.234376 + 21 +7715.441988 + 31 +0.0 + 0 +LINE + 5 +E3B + 8 +0 + 62 + 0 + 10 +5472.484376 + 20 +7812.869846 + 30 +0.0 + 11 +5500.609376 + 21 +7861.583774 + 31 +0.0 + 0 +LINE + 5 +E3C + 8 +0 + 62 + 0 + 10 +7075.609376 + 20 +10589.563796 + 30 +0.0 + 11 +7103.734376 + 21 +10638.277725 + 31 +0.0 + 0 +LINE + 5 +E3D + 8 +0 + 62 + 0 + 10 +7159.984376 + 20 +10735.705583 + 30 +0.0 + 11 +7188.109376 + 21 +10784.419512 + 31 +0.0 + 0 +LINE + 5 +E3E + 8 +0 + 62 + 0 + 10 +7244.359376 + 20 +10881.84737 + 30 +0.0 + 11 +7272.484376 + 21 +10930.561299 + 31 +0.0 + 0 +LINE + 5 +E3F + 8 +0 + 62 + 0 + 10 +7328.734376 + 20 +11027.989157 + 30 +0.0 + 11 +7356.859376 + 21 +11076.703086 + 31 +0.0 + 0 +LINE + 5 +E40 + 8 +0 + 62 + 0 + 10 +5388.109376 + 20 +7764.155916 + 30 +0.0 + 11 +5416.234376 + 21 +7812.869845 + 31 +0.0 + 0 +LINE + 5 +E41 + 8 +0 + 62 + 0 + 10 +5472.484376 + 20 +7910.297703 + 30 +0.0 + 11 +5500.609376 + 21 +7959.011632 + 31 +0.0 + 0 +LINE + 5 +E42 + 8 +0 + 62 + 0 + 10 +6991.234376 + 20 +10540.849867 + 30 +0.0 + 11 +7019.359376 + 21 +10589.563796 + 31 +0.0 + 0 +LINE + 5 +E43 + 8 +0 + 62 + 0 + 10 +7075.609376 + 20 +10686.991654 + 30 +0.0 + 11 +7103.734376 + 21 +10735.705583 + 31 +0.0 + 0 +LINE + 5 +E44 + 8 +0 + 62 + 0 + 10 +7159.984376 + 20 +10833.133441 + 30 +0.0 + 11 +7188.109376 + 21 +10881.84737 + 31 +0.0 + 0 +LINE + 5 +E45 + 8 +0 + 62 + 0 + 10 +7244.359376 + 20 +10979.275228 + 30 +0.0 + 11 +7272.484376 + 21 +11027.989157 + 31 +0.0 + 0 +LINE + 5 +E46 + 8 +0 + 62 + 0 + 10 +5388.109376 + 20 +7861.583774 + 30 +0.0 + 11 +5416.234376 + 21 +7910.297703 + 31 +0.0 + 0 +LINE + 5 +E47 + 8 +0 + 62 + 0 + 10 +5472.484376 + 20 +8007.725561 + 30 +0.0 + 11 +5500.609376 + 21 +8056.43949 + 31 +0.0 + 0 +LINE + 5 +E48 + 8 +0 + 62 + 0 + 10 +6906.859376 + 20 +10492.135938 + 30 +0.0 + 11 +6934.984376 + 21 +10540.849867 + 31 +0.0 + 0 +LINE + 5 +E49 + 8 +0 + 62 + 0 + 10 +6991.234376 + 20 +10638.277725 + 30 +0.0 + 11 +7019.359376 + 21 +10686.991654 + 31 +0.0 + 0 +LINE + 5 +E4A + 8 +0 + 62 + 0 + 10 +7075.609376 + 20 +10784.419512 + 30 +0.0 + 11 +7103.734376 + 21 +10833.133441 + 31 +0.0 + 0 +LINE + 5 +E4B + 8 +0 + 62 + 0 + 10 +7159.984376 + 20 +10930.561299 + 30 +0.0 + 11 +7188.109376 + 21 +10979.275228 + 31 +0.0 + 0 +LINE + 5 +E4C + 8 +0 + 62 + 0 + 10 +5388.109376 + 20 +7959.011632 + 30 +0.0 + 11 +5416.234376 + 21 +8007.725561 + 31 +0.0 + 0 +LINE + 5 +E4D + 8 +0 + 62 + 0 + 10 +5472.484376 + 20 +8105.153419 + 30 +0.0 + 11 +5500.609376 + 21 +8153.867348 + 31 +0.0 + 0 +LINE + 5 +E4E + 8 +0 + 62 + 0 + 10 +6822.484376 + 20 +10443.422009 + 30 +0.0 + 11 +6850.609376 + 21 +10492.135938 + 31 +0.0 + 0 +LINE + 5 +E4F + 8 +0 + 62 + 0 + 10 +6906.859376 + 20 +10589.563796 + 30 +0.0 + 11 +6934.984376 + 21 +10638.277725 + 31 +0.0 + 0 +LINE + 5 +E50 + 8 +0 + 62 + 0 + 10 +6991.234376 + 20 +10735.705583 + 30 +0.0 + 11 +7019.359376 + 21 +10784.419512 + 31 +0.0 + 0 +LINE + 5 +E51 + 8 +0 + 62 + 0 + 10 +7075.609376 + 20 +10881.84737 + 30 +0.0 + 11 +7103.734376 + 21 +10930.561299 + 31 +0.0 + 0 +LINE + 5 +E52 + 8 +0 + 62 + 0 + 10 +5388.109377 + 20 +8056.43949 + 30 +0.0 + 11 +5416.234377 + 21 +8105.153419 + 31 +0.0 + 0 +LINE + 5 +E53 + 8 +0 + 62 + 0 + 10 +5472.484377 + 20 +8202.581277 + 30 +0.0 + 11 +5500.609377 + 21 +8251.295206 + 31 +0.0 + 0 +LINE + 5 +E54 + 8 +0 + 62 + 0 + 10 +6738.109377 + 20 +10394.70808 + 30 +0.0 + 11 +6766.234377 + 21 +10443.422009 + 31 +0.0 + 0 +LINE + 5 +E55 + 8 +0 + 62 + 0 + 10 +6822.484377 + 20 +10540.849867 + 30 +0.0 + 11 +6850.609377 + 21 +10589.563796 + 31 +0.0 + 0 +LINE + 5 +E56 + 8 +0 + 62 + 0 + 10 +6906.859377 + 20 +10686.991654 + 30 +0.0 + 11 +6934.984377 + 21 +10735.705583 + 31 +0.0 + 0 +LINE + 5 +E57 + 8 +0 + 62 + 0 + 10 +6991.234377 + 20 +10833.133441 + 30 +0.0 + 11 +7019.359377 + 21 +10881.84737 + 31 +0.0 + 0 +LINE + 5 +E58 + 8 +0 + 62 + 0 + 10 +5388.109377 + 20 +8153.867348 + 30 +0.0 + 11 +5416.234377 + 21 +8202.581277 + 31 +0.0 + 0 +LINE + 5 +E59 + 8 +0 + 62 + 0 + 10 +5472.484377 + 20 +8300.009135 + 30 +0.0 + 11 +5500.609377 + 21 +8348.723064 + 31 +0.0 + 0 +LINE + 5 +E5A + 8 +0 + 62 + 0 + 10 +6653.734377 + 20 +10345.994151 + 30 +0.0 + 11 +6681.859377 + 21 +10394.70808 + 31 +0.0 + 0 +LINE + 5 +E5B + 8 +0 + 62 + 0 + 10 +6738.109377 + 20 +10492.135938 + 30 +0.0 + 11 +6766.234377 + 21 +10540.849867 + 31 +0.0 + 0 +LINE + 5 +E5C + 8 +0 + 62 + 0 + 10 +6822.484377 + 20 +10638.277725 + 30 +0.0 + 11 +6850.609377 + 21 +10686.991654 + 31 +0.0 + 0 +LINE + 5 +E5D + 8 +0 + 62 + 0 + 10 +6906.859377 + 20 +10784.419512 + 30 +0.0 + 11 +6932.382789 + 21 +10828.627359 + 31 +0.0 + 0 +LINE + 5 +E5E + 8 +0 + 62 + 0 + 10 +5388.109377 + 20 +8251.295206 + 30 +0.0 + 11 +5416.234377 + 21 +8300.009135 + 31 +0.0 + 0 +LINE + 5 +E5F + 8 +0 + 62 + 0 + 10 +5472.484377 + 20 +8397.436992 + 30 +0.0 + 11 +5500.609377 + 21 +8446.150921 + 31 +0.0 + 0 +LINE + 5 +E60 + 8 +0 + 62 + 0 + 10 +6569.359377 + 20 +10297.280222 + 30 +0.0 + 11 +6597.484377 + 21 +10345.994151 + 31 +0.0 + 0 +LINE + 5 +E61 + 8 +0 + 62 + 0 + 10 +6653.734377 + 20 +10443.422009 + 30 +0.0 + 11 +6681.859377 + 21 +10492.135938 + 31 +0.0 + 0 +LINE + 5 +E62 + 8 +0 + 62 + 0 + 10 +6738.109377 + 20 +10589.563796 + 30 +0.0 + 11 +6766.234377 + 21 +10638.277725 + 31 +0.0 + 0 +LINE + 5 +E63 + 8 +0 + 62 + 0 + 10 +6822.484377 + 20 +10735.705583 + 30 +0.0 + 11 +6844.426814 + 21 +10773.710999 + 31 +0.0 + 0 +LINE + 5 +E64 + 8 +0 + 62 + 0 + 10 +5388.109377 + 20 +8348.723063 + 30 +0.0 + 11 +5416.234377 + 21 +8397.436992 + 31 +0.0 + 0 +LINE + 5 +E65 + 8 +0 + 62 + 0 + 10 +5472.484377 + 20 +8494.86485 + 30 +0.0 + 11 +5500.609377 + 21 +8543.578779 + 31 +0.0 + 0 +LINE + 5 +E66 + 8 +0 + 62 + 0 + 10 +6484.984377 + 20 +10248.566293 + 30 +0.0 + 11 +6513.109377 + 21 +10297.280222 + 31 +0.0 + 0 +LINE + 5 +E67 + 8 +0 + 62 + 0 + 10 +6569.359377 + 20 +10394.70808 + 30 +0.0 + 11 +6597.484377 + 21 +10443.422009 + 31 +0.0 + 0 +LINE + 5 +E68 + 8 +0 + 62 + 0 + 10 +6653.734377 + 20 +10540.849867 + 30 +0.0 + 11 +6681.859377 + 21 +10589.563796 + 31 +0.0 + 0 +LINE + 5 +E69 + 8 +0 + 62 + 0 + 10 +6738.109377 + 20 +10686.991654 + 30 +0.0 + 11 +6756.470839 + 21 +10718.794639 + 31 +0.0 + 0 +LINE + 5 +E6A + 8 +0 + 62 + 0 + 10 +5388.109377 + 20 +8446.150921 + 30 +0.0 + 11 +5416.234377 + 21 +8494.86485 + 31 +0.0 + 0 +LINE + 5 +E6B + 8 +0 + 62 + 0 + 10 +5472.484377 + 20 +8592.292708 + 30 +0.0 + 11 +5500.609377 + 21 +8641.006637 + 31 +0.0 + 0 +LINE + 5 +E6C + 8 +0 + 62 + 0 + 10 +6400.609377 + 20 +10199.852364 + 30 +0.0 + 11 +6428.734377 + 21 +10248.566293 + 31 +0.0 + 0 +LINE + 5 +E6D + 8 +0 + 62 + 0 + 10 +6484.984377 + 20 +10345.994151 + 30 +0.0 + 11 +6513.109377 + 21 +10394.70808 + 31 +0.0 + 0 +LINE + 5 +E6E + 8 +0 + 62 + 0 + 10 +6569.359377 + 20 +10492.135938 + 30 +0.0 + 11 +6597.484377 + 21 +10540.849867 + 31 +0.0 + 0 +LINE + 5 +E6F + 8 +0 + 62 + 0 + 10 +6653.734377 + 20 +10638.277725 + 30 +0.0 + 11 +6668.514864 + 21 +10663.878278 + 31 +0.0 + 0 +LINE + 5 +E70 + 8 +0 + 62 + 0 + 10 +5388.109377 + 20 +8543.578779 + 30 +0.0 + 11 +5416.234377 + 21 +8592.292708 + 31 +0.0 + 0 +LINE + 5 +E71 + 8 +0 + 62 + 0 + 10 +5472.484377 + 20 +8689.720566 + 30 +0.0 + 11 +5500.609377 + 21 +8738.434495 + 31 +0.0 + 0 +LINE + 5 +E72 + 8 +0 + 62 + 0 + 10 +6316.234377 + 20 +10151.138435 + 30 +0.0 + 11 +6344.359377 + 21 +10199.852364 + 31 +0.0 + 0 +LINE + 5 +E73 + 8 +0 + 62 + 0 + 10 +6400.609377 + 20 +10297.280222 + 30 +0.0 + 11 +6428.734377 + 21 +10345.994151 + 31 +0.0 + 0 +LINE + 5 +E74 + 8 +0 + 62 + 0 + 10 +6484.984377 + 20 +10443.422009 + 30 +0.0 + 11 +6513.109377 + 21 +10492.135938 + 31 +0.0 + 0 +LINE + 5 +E75 + 8 +0 + 62 + 0 + 10 +6569.359377 + 20 +10589.563795 + 30 +0.0 + 11 +6580.558889 + 21 +10608.961918 + 31 +0.0 + 0 +LINE + 5 +E76 + 8 +0 + 62 + 0 + 10 +5388.109378 + 20 +8641.006637 + 30 +0.0 + 11 +5416.234378 + 21 +8689.720566 + 31 +0.0 + 0 +LINE + 5 +E77 + 8 +0 + 62 + 0 + 10 +5472.484378 + 20 +8787.148424 + 30 +0.0 + 11 +5500.609378 + 21 +8835.862353 + 31 +0.0 + 0 +LINE + 5 +E78 + 8 +0 + 62 + 0 + 10 +6171.913944 + 20 +9998.595969 + 30 +0.0 + 11 +6175.609378 + 21 +10004.996648 + 31 +0.0 + 0 +LINE + 5 +E79 + 8 +0 + 62 + 0 + 10 +6231.859378 + 20 +10102.424506 + 30 +0.0 + 11 +6259.984378 + 21 +10151.138435 + 31 +0.0 + 0 +LINE + 5 +E7A + 8 +0 + 62 + 0 + 10 +6316.234378 + 20 +10248.566293 + 30 +0.0 + 11 +6344.359378 + 21 +10297.280222 + 31 +0.0 + 0 +LINE + 5 +E7B + 8 +0 + 62 + 0 + 10 +6400.609378 + 20 +10394.708079 + 30 +0.0 + 11 +6428.734378 + 21 +10443.422008 + 31 +0.0 + 0 +LINE + 5 +E7C + 8 +0 + 62 + 0 + 10 +6484.984378 + 20 +10540.849866 + 30 +0.0 + 11 +6492.602913 + 21 +10554.045557 + 31 +0.0 + 0 +LINE + 5 +E7D + 8 +0 + 62 + 0 + 10 +5388.109378 + 20 +8738.434495 + 30 +0.0 + 11 +5416.234378 + 21 +8787.148424 + 31 +0.0 + 0 +LINE + 5 +E7E + 8 +0 + 62 + 0 + 10 +5472.484378 + 20 +8884.576282 + 30 +0.0 + 11 +5500.609378 + 21 +8933.29021 + 31 +0.0 + 0 +LINE + 5 +E7F + 8 +0 + 62 + 0 + 10 +6083.282115 + 20 +9942.508995 + 30 +0.0 + 11 +6091.234378 + 21 +9956.282719 + 31 +0.0 + 0 +LINE + 5 +E80 + 8 +0 + 62 + 0 + 10 +6147.484378 + 20 +10053.710577 + 30 +0.0 + 11 +6175.609378 + 21 +10102.424506 + 31 +0.0 + 0 +LINE + 5 +E81 + 8 +0 + 62 + 0 + 10 +6231.859378 + 20 +10199.852364 + 30 +0.0 + 11 +6259.984378 + 21 +10248.566292 + 31 +0.0 + 0 +LINE + 5 +E82 + 8 +0 + 62 + 0 + 10 +6316.234378 + 20 +10345.99415 + 30 +0.0 + 11 +6344.359378 + 21 +10394.708079 + 31 +0.0 + 0 +LINE + 5 +E83 + 8 +0 + 62 + 0 + 10 +6400.609378 + 20 +10492.135937 + 30 +0.0 + 11 +6404.646938 + 21 +10499.129197 + 31 +0.0 + 0 +LINE + 5 +E84 + 8 +0 + 62 + 0 + 10 +5748.950757 + 20 +9363.430097 + 30 +0.0 + 11 +5753.734378 + 21 +9371.715571 + 31 +0.0 + 0 +LINE + 5 +E85 + 8 +0 + 62 + 0 + 10 +5388.109378 + 20 +8835.862352 + 30 +0.0 + 11 +5416.234378 + 21 +8884.576281 + 31 +0.0 + 0 +LINE + 5 +E86 + 8 +0 + 62 + 0 + 10 +5472.484378 + 20 +8982.004139 + 30 +0.0 + 11 +5500.609378 + 21 +9030.718068 + 31 +0.0 + 0 +LINE + 5 +E87 + 8 +0 + 62 + 0 + 10 +5994.650285 + 20 +9886.42202 + 30 +0.0 + 11 +6006.859378 + 21 +9907.56879 + 31 +0.0 + 0 +LINE + 5 +E88 + 8 +0 + 62 + 0 + 10 +6063.109378 + 20 +10004.996648 + 30 +0.0 + 11 +6091.234378 + 21 +10053.710577 + 31 +0.0 + 0 +LINE + 5 +E89 + 8 +0 + 62 + 0 + 10 +6147.484378 + 20 +10151.138434 + 30 +0.0 + 11 +6175.609378 + 21 +10199.852363 + 31 +0.0 + 0 +LINE + 5 +E8A + 8 +0 + 62 + 0 + 10 +6231.859378 + 20 +10297.280221 + 30 +0.0 + 11 +6259.984378 + 21 +10345.99415 + 31 +0.0 + 0 +LINE + 5 +E8B + 8 +0 + 62 + 0 + 10 +6316.234378 + 20 +10443.422008 + 30 +0.0 + 11 +6316.690963 + 21 +10444.212837 + 31 +0.0 + 0 +LINE + 5 +E8C + 8 +0 + 62 + 0 + 10 +5725.609378 + 20 +9420.4295 + 30 +0.0 + 11 +5753.734378 + 21 +9469.143429 + 31 +0.0 + 0 +LINE + 5 +E8D + 8 +0 + 62 + 0 + 10 +5388.109378 + 20 +8933.29021 + 30 +0.0 + 11 +5416.234378 + 21 +8982.004139 + 31 +0.0 + 0 +LINE + 5 +E8E + 8 +0 + 62 + 0 + 10 +5472.484378 + 20 +9079.431997 + 30 +0.0 + 11 +5500.609378 + 21 +9128.145926 + 31 +0.0 + 0 +LINE + 5 +E8F + 8 +0 + 62 + 0 + 10 +5921.034166 + 20 +9856.34302 + 30 +0.0 + 11 +5922.484378 + 21 +9858.854861 + 31 +0.0 + 0 +LINE + 5 +E90 + 8 +0 + 62 + 0 + 10 +5978.734378 + 20 +9956.282718 + 30 +0.0 + 11 +6006.859378 + 21 +10004.996647 + 31 +0.0 + 0 +LINE + 5 +E91 + 8 +0 + 62 + 0 + 10 +6063.109378 + 20 +10102.424505 + 30 +0.0 + 11 +6091.234378 + 21 +10151.138434 + 31 +0.0 + 0 +LINE + 5 +E92 + 8 +0 + 62 + 0 + 10 +6147.484378 + 20 +10248.566292 + 30 +0.0 + 11 +6175.609378 + 21 +10297.280221 + 31 +0.0 + 0 +LINE + 5 +E93 + 8 +0 + 62 + 0 + 10 +5641.234378 + 20 +9371.715571 + 30 +0.0 + 11 +5669.359378 + 21 +9420.4295 + 31 +0.0 + 0 +LINE + 5 +E94 + 8 +0 + 62 + 0 + 10 +5725.609378 + 20 +9517.857358 + 30 +0.0 + 11 +5753.734378 + 21 +9566.571287 + 31 +0.0 + 0 +LINE + 5 +E95 + 8 +0 + 62 + 0 + 10 +5388.109378 + 20 +9030.718068 + 30 +0.0 + 11 +5416.234378 + 21 +9079.431997 + 31 +0.0 + 0 +LINE + 5 +E96 + 8 +0 + 62 + 0 + 10 +5472.484378 + 20 +9176.859855 + 30 +0.0 + 11 +5500.609378 + 21 +9225.573784 + 31 +0.0 + 0 +LINE + 5 +E97 + 8 +0 + 62 + 0 + 10 +5894.359378 + 20 +9907.568789 + 30 +0.0 + 11 +5922.484378 + 21 +9956.282718 + 31 +0.0 + 0 +LINE + 5 +E98 + 8 +0 + 62 + 0 + 10 +5978.734378 + 20 +10053.710576 + 30 +0.0 + 11 +6006.859378 + 21 +10102.424505 + 31 +0.0 + 0 +LINE + 5 +E99 + 8 +0 + 62 + 0 + 10 +6063.109378 + 20 +10199.852363 + 30 +0.0 + 11 +6091.234378 + 21 +10248.566292 + 31 +0.0 + 0 +LINE + 5 +E9A + 8 +0 + 62 + 0 + 10 +5573.206717 + 20 +9351.316063 + 30 +0.0 + 11 +5584.984378 + 21 +9371.715571 + 31 +0.0 + 0 +LINE + 5 +E9B + 8 +0 + 62 + 0 + 10 +5641.234378 + 20 +9469.143429 + 30 +0.0 + 11 +5669.359378 + 21 +9517.857358 + 31 +0.0 + 0 +LINE + 5 +E9C + 8 +0 + 62 + 0 + 10 +5725.609378 + 20 +9615.285216 + 30 +0.0 + 11 +5753.734378 + 21 +9663.999145 + 31 +0.0 + 0 +LINE + 5 +E9D + 8 +0 + 62 + 0 + 10 +5388.109379 + 20 +9128.145926 + 30 +0.0 + 11 +5416.234379 + 21 +9176.859855 + 31 +0.0 + 0 +LINE + 5 +E9E + 8 +0 + 62 + 0 + 10 +5472.484379 + 20 +9274.287713 + 30 +0.0 + 11 +5500.609379 + 21 +9323.001642 + 31 +0.0 + 0 +LINE + 5 +E9F + 8 +0 + 62 + 0 + 10 +5556.859379 + 20 +9420.4295 + 30 +0.0 + 11 +5584.984379 + 21 +9469.143429 + 31 +0.0 + 0 +LINE + 5 +EA0 + 8 +0 + 62 + 0 + 10 +5641.234379 + 20 +9566.571287 + 30 +0.0 + 11 +5669.359379 + 21 +9615.285216 + 31 +0.0 + 0 +LINE + 5 +EA1 + 8 +0 + 62 + 0 + 10 +5725.609379 + 20 +9712.713073 + 30 +0.0 + 11 +5753.734379 + 21 +9761.427002 + 31 +0.0 + 0 +LINE + 5 +EA2 + 8 +0 + 62 + 0 + 10 +5809.984379 + 20 +9858.85486 + 30 +0.0 + 11 +5838.109379 + 21 +9907.568789 + 31 +0.0 + 0 +LINE + 5 +EA3 + 8 +0 + 62 + 0 + 10 +5894.359379 + 20 +10004.996647 + 30 +0.0 + 11 +5922.484379 + 21 +10053.710576 + 31 +0.0 + 0 +LINE + 5 +EA4 + 8 +0 + 62 + 0 + 10 +5978.734379 + 20 +10151.138434 + 30 +0.0 + 11 +6006.859379 + 21 +10199.852363 + 31 +0.0 + 0 +LINE + 5 +EA5 + 8 +0 + 62 + 0 + 10 +5388.109379 + 20 +9225.573784 + 30 +0.0 + 11 +5416.234379 + 21 +9274.287713 + 31 +0.0 + 0 +LINE + 5 +EA6 + 8 +0 + 62 + 0 + 10 +5472.484379 + 20 +9371.715571 + 30 +0.0 + 11 +5500.609379 + 21 +9420.4295 + 31 +0.0 + 0 +LINE + 5 +EA7 + 8 +0 + 62 + 0 + 10 +5556.859379 + 20 +9517.857358 + 30 +0.0 + 11 +5584.984379 + 21 +9566.571286 + 31 +0.0 + 0 +LINE + 5 +EA8 + 8 +0 + 62 + 0 + 10 +5641.234379 + 20 +9663.999144 + 30 +0.0 + 11 +5669.359379 + 21 +9712.713073 + 31 +0.0 + 0 +LINE + 5 +EA9 + 8 +0 + 62 + 0 + 10 +5725.609379 + 20 +9810.140931 + 30 +0.0 + 11 +5753.734379 + 21 +9858.85486 + 31 +0.0 + 0 +LINE + 5 +EAA + 8 +0 + 62 + 0 + 10 +5809.984379 + 20 +9956.282718 + 30 +0.0 + 11 +5838.109379 + 21 +10004.996647 + 31 +0.0 + 0 +LINE + 5 +EAB + 8 +0 + 62 + 0 + 10 +5894.359379 + 20 +10102.424505 + 30 +0.0 + 11 +5922.484379 + 21 +10151.138434 + 31 +0.0 + 0 +LINE + 5 +EAC + 8 +0 + 62 + 0 + 10 +5388.109379 + 20 +9323.001642 + 30 +0.0 + 11 +5416.234379 + 21 +9371.715571 + 31 +0.0 + 0 +LINE + 5 +EAD + 8 +0 + 62 + 0 + 10 +5472.484379 + 20 +9469.143428 + 30 +0.0 + 11 +5500.609379 + 21 +9517.857357 + 31 +0.0 + 0 +LINE + 5 +EAE + 8 +0 + 62 + 0 + 10 +5556.859379 + 20 +9615.285215 + 30 +0.0 + 11 +5584.984379 + 21 +9663.999144 + 31 +0.0 + 0 +LINE + 5 +EAF + 8 +0 + 62 + 0 + 10 +5641.234379 + 20 +9761.427002 + 30 +0.0 + 11 +5669.359379 + 21 +9810.140931 + 31 +0.0 + 0 +LINE + 5 +EB0 + 8 +0 + 62 + 0 + 10 +5725.609379 + 20 +9907.568789 + 30 +0.0 + 11 +5753.734379 + 21 +9956.282718 + 31 +0.0 + 0 +LINE + 5 +EB1 + 8 +0 + 62 + 0 + 10 +5809.984379 + 20 +10053.710576 + 30 +0.0 + 11 +5838.109379 + 21 +10102.424505 + 31 +0.0 + 0 +LINE + 5 +EB2 + 8 +0 + 62 + 0 + 10 +5388.109379 + 20 +9420.429499 + 30 +0.0 + 11 +5416.234379 + 21 +9469.143428 + 31 +0.0 + 0 +LINE + 5 +EB3 + 8 +0 + 62 + 0 + 10 +5472.484379 + 20 +9566.571286 + 30 +0.0 + 11 +5500.609379 + 21 +9615.285215 + 31 +0.0 + 0 +LINE + 5 +EB4 + 8 +0 + 62 + 0 + 10 +5556.859379 + 20 +9712.713073 + 30 +0.0 + 11 +5584.984379 + 21 +9761.427002 + 31 +0.0 + 0 +LINE + 5 +EB5 + 8 +0 + 62 + 0 + 10 +5641.234379 + 20 +9858.85486 + 30 +0.0 + 11 +5669.359379 + 21 +9907.568789 + 31 +0.0 + 0 +LINE + 5 +EB6 + 8 +0 + 62 + 0 + 10 +5725.609379 + 20 +10004.996647 + 30 +0.0 + 11 +5753.734379 + 21 +10053.710576 + 31 +0.0 + 0 +LINE + 5 +EB7 + 8 +0 + 62 + 0 + 10 +5388.109379 + 20 +9517.857357 + 30 +0.0 + 11 +5416.234379 + 21 +9566.571286 + 31 +0.0 + 0 +LINE + 5 +EB8 + 8 +0 + 62 + 0 + 10 +5472.484379 + 20 +9663.999144 + 30 +0.0 + 11 +5500.609379 + 21 +9712.713073 + 31 +0.0 + 0 +LINE + 5 +EB9 + 8 +0 + 62 + 0 + 10 +5556.859379 + 20 +9810.140931 + 30 +0.0 + 11 +5584.984379 + 21 +9858.85486 + 31 +0.0 + 0 +LINE + 5 +EBA + 8 +0 + 62 + 0 + 10 +5641.234379 + 20 +9956.282718 + 30 +0.0 + 11 +5669.359379 + 21 +10004.996647 + 31 +0.0 + 0 +LINE + 5 +EBB + 8 +0 + 62 + 0 + 10 +5388.109379 + 20 +9615.285215 + 30 +0.0 + 11 +5416.234379 + 21 +9663.999144 + 31 +0.0 + 0 +LINE + 5 +EBC + 8 +0 + 62 + 0 + 10 +5472.484379 + 20 +9761.427002 + 30 +0.0 + 11 +5500.609379 + 21 +9810.140931 + 31 +0.0 + 0 +LINE + 5 +EBD + 8 +0 + 62 + 0 + 10 +5556.859379 + 20 +9907.568789 + 30 +0.0 + 11 +5584.984379 + 21 +9956.282718 + 31 +0.0 + 0 +LINE + 5 +EBE + 8 +0 + 62 + 0 + 10 +5388.10938 + 20 +9712.713073 + 30 +0.0 + 11 +5416.23438 + 21 +9761.427002 + 31 +0.0 + 0 +LINE + 5 +EBF + 8 +0 + 62 + 0 + 10 +5472.48438 + 20 +9858.85486 + 30 +0.0 + 11 +5500.60938 + 21 +9907.568789 + 31 +0.0 + 0 +LINE + 5 +EC0 + 8 +0 + 62 + 0 + 10 +5388.10938 + 20 +9810.140931 + 30 +0.0 + 11 +5416.23438 + 21 +9858.85486 + 31 +0.0 + 0 +LINE + 5 +EC1 + 8 +0 + 62 + 0 + 10 +7678.655049 + 20 +10952.074539 + 30 +0.0 + 11 +7694.359374 + 21 +10979.275229 + 31 +0.0 + 0 +LINE + 5 +EC2 + 8 +0 + 62 + 0 + 10 +7750.609374 + 20 +11076.703087 + 30 +0.0 + 11 +7778.734374 + 21 +11125.417016 + 31 +0.0 + 0 +LINE + 5 +EC3 + 8 +0 + 62 + 0 + 10 +7834.984374 + 20 +11222.844874 + 30 +0.0 + 11 +7863.109374 + 21 +11271.558803 + 31 +0.0 + 0 +LINE + 5 +EC4 + 8 +0 + 62 + 0 + 10 +7919.359374 + 20 +11368.986661 + 30 +0.0 + 11 +7947.484374 + 21 +11417.70059 + 31 +0.0 + 0 +LINE + 5 +EC5 + 8 +0 + 62 + 0 + 10 +7767.286878 + 20 +11008.161513 + 30 +0.0 + 11 +7778.734374 + 21 +11027.989158 + 31 +0.0 + 0 +LINE + 5 +EC6 + 8 +0 + 62 + 0 + 10 +7834.984374 + 20 +11125.417016 + 30 +0.0 + 11 +7863.109374 + 21 +11174.130945 + 31 +0.0 + 0 +LINE + 5 +EC7 + 8 +0 + 62 + 0 + 10 +7919.359374 + 20 +11271.558803 + 30 +0.0 + 11 +7947.484374 + 21 +11320.272732 + 31 +0.0 + 0 +LINE + 5 +EC8 + 8 +0 + 62 + 0 + 10 +8003.734374 + 20 +11417.70059 + 30 +0.0 + 11 +8031.859374 + 21 +11466.414519 + 31 +0.0 + 0 +LINE + 5 +EC9 + 8 +0 + 62 + 0 + 10 +7855.918708 + 20 +11064.248488 + 30 +0.0 + 11 +7863.109374 + 21 +11076.703087 + 31 +0.0 + 0 +LINE + 5 +ECA + 8 +0 + 62 + 0 + 10 +7919.359374 + 20 +11174.130945 + 30 +0.0 + 11 +7947.484374 + 21 +11222.844874 + 31 +0.0 + 0 +LINE + 5 +ECB + 8 +0 + 62 + 0 + 10 +8003.734374 + 20 +11320.272732 + 30 +0.0 + 11 +8031.859374 + 21 +11368.986661 + 31 +0.0 + 0 +LINE + 5 +ECC + 8 +0 + 62 + 0 + 10 +8088.109374 + 20 +11466.414519 + 30 +0.0 + 11 +8116.234374 + 21 +11515.128448 + 31 +0.0 + 0 +LINE + 5 +ECD + 8 +0 + 62 + 0 + 10 +7944.550538 + 20 +11120.335463 + 30 +0.0 + 11 +7947.484374 + 21 +11125.417016 + 31 +0.0 + 0 +LINE + 5 +ECE + 8 +0 + 62 + 0 + 10 +8003.734374 + 20 +11222.844874 + 30 +0.0 + 11 +8031.859374 + 21 +11271.558803 + 31 +0.0 + 0 +LINE + 5 +ECF + 8 +0 + 62 + 0 + 10 +8088.109374 + 20 +11368.986661 + 30 +0.0 + 11 +8116.234374 + 21 +11417.70059 + 31 +0.0 + 0 +LINE + 5 +ED0 + 8 +0 + 62 + 0 + 10 +8172.484374 + 20 +11515.128448 + 30 +0.0 + 11 +8200.609374 + 21 +11563.842377 + 31 +0.0 + 0 +LINE + 5 +ED1 + 8 +0 + 62 + 0 + 10 +8088.109374 + 20 +11271.558803 + 30 +0.0 + 11 +8116.234374 + 21 +11320.272732 + 31 +0.0 + 0 +LINE + 5 +ED2 + 8 +0 + 62 + 0 + 10 +8172.484374 + 20 +11417.70059 + 30 +0.0 + 11 +8200.609374 + 21 +11466.414519 + 31 +0.0 + 0 +LINE + 5 +ED3 + 8 +0 + 62 + 0 + 10 +8172.484374 + 20 +11320.272732 + 30 +0.0 + 11 +8200.609374 + 21 +11368.986661 + 31 +0.0 + 0 +LINE + 5 +ED4 + 8 +0 + 62 + 0 + 10 +8256.859373 + 20 +11368.986661 + 30 +0.0 + 11 +8284.984373 + 21 +11417.70059 + 31 +0.0 + 0 +POLYLINE + 5 +ED5 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +1566 + 8 +MAUERWERK + 10 +6451.85938 + 20 +7695.360132 + 30 +0.0 + 0 +VERTEX + 5 +1567 + 8 +MAUERWERK + 10 +6451.85938 + 20 +9352.860132 + 30 +0.0 + 0 +VERTEX + 5 +1568 + 8 +MAUERWERK + 10 +5539.35938 + 20 +9352.860132 + 30 +0.0 + 0 +VERTEX + 5 +1569 + 8 +MAUERWERK + 10 +5539.35938 + 20 +7695.360132 + 30 +0.0 + 0 +SEQEND + 5 +156A + 8 +MAUERWERK + 0 +POLYLINE + 5 +EDB + 8 +DAEMMUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +156B + 8 +DAEMMUNG + 10 +5341.298947 + 20 +9352.860132 + 30 +0.0 + 0 +VERTEX + 5 +156C + 8 +DAEMMUNG + 10 +5341.298947 + 20 +9352.860132 + 30 +0.0 + 0 +VERTEX + 5 +156D + 8 +DAEMMUNG + 10 +5339.686394 + 20 +7695.360132 + 30 +0.0 + 0 +SEQEND + 5 +156E + 8 +DAEMMUNG + 0 +POLYLINE + 5 +EE0 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +156F + 8 +MAUERWERK + 10 +5189.35938 + 20 +7695.360132 + 30 +0.0 + 0 +VERTEX + 5 +1570 + 8 +MAUERWERK + 10 +5189.35938 + 20 +9352.860132 + 30 +0.0 + 0 +VERTEX + 5 +1571 + 8 +MAUERWERK + 10 +4901.85938 + 20 +9352.860132 + 30 +0.0 + 0 +SEQEND + 5 +1572 + 8 +MAUERWERK + 0 +POLYLINE + 5 +EE5 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1573 + 8 +MAUERWERK + 10 +4901.85938 + 20 +9352.860132 + 30 +0.0 + 0 +VERTEX + 5 +1574 + 8 +MAUERWERK + 10 +4901.85938 + 20 +7695.360132 + 30 +0.0 + 0 +SEQEND + 5 +1575 + 8 +MAUERWERK + 0 +POLYLINE + 5 +EE9 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1576 + 8 +DETAILS + 10 +5944.428582 + 20 +9841.809571 + 30 +0.0 + 0 +VERTEX + 5 +1577 + 8 +DETAILS + 10 +5944.428582 + 20 +8900.360132 + 30 +0.0 + 0 +VERTEX + 5 +1578 + 8 +DETAILS + 10 +5866.85938 + 20 +8785.360132 + 30 +0.0 + 0 +VERTEX + 5 +1579 + 8 +DETAILS + 10 +5901.85938 + 20 +8750.360132 + 30 +0.0 + 0 +VERTEX + 5 +157A + 8 +DETAILS + 10 +5971.85938 + 20 +8860.922104 + 30 +0.0 + 0 +VERTEX + 5 +157B + 8 +DETAILS + 10 +6034.112202 + 20 +8750.360132 + 30 +0.0 + 0 +VERTEX + 5 +157C + 8 +DETAILS + 10 +6071.85938 + 20 +8785.360132 + 30 +0.0 + 0 +VERTEX + 5 +157D + 8 +DETAILS + 10 +5995.676335 + 20 +8901.899153 + 30 +0.0 + 0 +VERTEX + 5 +157E + 8 +DETAILS + 10 +5995.676335 + 20 +9834.126374 + 30 +0.0 + 0 +SEQEND + 5 +157F + 8 +DETAILS + 0 +POLYLINE + 5 +EF4 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +1580 + 8 +DRAHTANKER + 10 +5926.85938 + 20 +9865.360132 + 30 +0.0 + 0 +VERTEX + 5 +1581 + 8 +DRAHTANKER + 10 +6016.85938 + 20 +9865.360132 + 30 +0.0 + 0 +SEQEND + 5 +1582 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +EF8 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +1583 + 8 +DRAHTANKER + 10 +5946.85938 + 20 +9895.360132 + 30 +0.0 + 0 +VERTEX + 5 +1584 + 8 +DRAHTANKER + 10 +5996.85938 + 20 +9895.360132 + 30 +0.0 + 0 +SEQEND + 5 +1585 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +EFC + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +1586 + 8 +DRAHTANKER + 10 +4361.85938 + 20 +9690.360132 + 30 +0.0 + 0 +VERTEX + 5 +1587 + 8 +DRAHTANKER + 10 +4901.85938 + 20 +8826.179487 + 30 +0.0 + 0 +SEQEND + 5 +1588 + 8 +DRAHTANKER + 0 +DIMENSION + 5 +F00 + 8 +DRAHTANKER + 2 +*D7 + 10 +5191.85938 + 20 +6950.360132 + 30 +0.0 + 11 +5044.35938 + 21 +7037.860132 + 31 +0.0 + 12 +-743.14062 + 22 +-614.639868 + 32 +0.0 + 1 +11 + 13 +4896.85938 + 23 +7715.360132 + 33 +0.0 + 14 +5191.85938 + 24 +7715.360132 + 34 +0.0 + 0 +DIMENSION + 5 +F01 + 8 +DRAHTANKER + 2 +*D8 + 10 +5336.85938 + 20 +6950.360132 + 30 +0.0 + 11 +5264.35938 + 21 +7037.860132 + 31 +0.0 + 12 +-743.14062 + 22 +-614.639868 + 32 +0.0 + 1 +6 + 13 +5191.85938 + 23 +7715.360132 + 33 +0.0 + 14 +5336.85938 + 24 +7700.360132 + 34 +0.0 + 0 +DIMENSION + 5 +F02 + 8 +DRAHTANKER + 2 +*D9 + 10 +5536.85938 + 20 +6950.360132 + 30 +0.0 + 11 +5436.85938 + 21 +7037.860132 + 31 +0.0 + 12 +-743.14062 + 22 +-614.639868 + 32 +0.0 + 1 +8 + 13 +5336.85938 + 23 +7700.360132 + 33 +0.0 + 14 +5536.85938 + 24 +7730.360132 + 34 +0.0 + 0 +DIMENSION + 5 +F03 + 8 +DRAHTANKER + 2 +*D10 + 10 +6451.85938 + 20 +6950.360132 + 30 +0.0 + 11 +5994.35938 + 21 +7037.860132 + 31 +0.0 + 12 +-743.14062 + 22 +-614.639868 + 32 +0.0 + 1 +36 + 13 +5536.85938 + 23 +7730.360132 + 33 +0.0 + 14 +6451.85938 + 24 +7715.360132 + 34 +0.0 + 0 +TEXT + 5 +F04 + 8 +DRAHTANKER + 10 +5101.85938 + 20 +7055.360132 + 30 +0.0 + 40 +62.5 + 1 +5 + 0 +TEXT + 5 +F05 + 8 +DRAHTANKER + 10 +6086.85938 + 20 +7055.360132 + 30 +0.0 + 40 +62.5 + 1 +5 + 0 +INSERT + 5 +F06 + 8 +SCHRAFFUR + 2 +*X11 + 10 +-743.14062 + 20 +-614.639868 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +AR-SAND,I +1040 +25.0 +1040 +0.0 +1002 +} + 0 +POLYLINE + 5 +F07 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1589 + 8 +MAUERWERK + 10 +6451.85938 + 20 +9352.860132 + 30 +0.0 + 0 +VERTEX + 5 +158A + 8 +MAUERWERK + 10 +6489.35938 + 20 +9352.860132 + 30 +0.0 + 0 +VERTEX + 5 +158B + 8 +MAUERWERK + 10 +6489.35938 + 20 +7695.360132 + 30 +0.0 + 0 +SEQEND + 5 +158C + 8 +MAUERWERK + 0 +DIMENSION + 5 +F0C + 8 +BEMASSUNG + 2 +*D14 + 10 +6486.85938 + 20 +6950.360132 + 30 +0.0 + 11 +6536.85938 + 21 +7037.860132 + 31 +0.0 + 12 +-743.14062 + 22 +-614.639868 + 32 +0.0 + 70 + 128 + 1 +1 + 13 +6451.85938 + 23 +7715.360132 + 33 +0.0 + 14 +6486.85938 + 24 +7705.360132 + 34 +0.0 + 0 +TEXT + 5 +F0D + 8 +DRAHTANKER + 10 +6561.85938 + 20 +7055.360132 + 30 +0.0 + 40 +62.5 + 1 +5 + 0 +DIMENSION + 5 +F0E + 8 +BEMASSUNG + 2 +*D16 + 10 +9095.164101 + 20 +11816.239961 + 30 +0.0 + 11 +9089.684204 + 21 +11992.098485 + 31 +0.0 + 12 +-743.14062 + 22 +-614.639868 + 32 +0.0 + 70 + 1 + 1 +16 + 13 +8161.85938 + 23 +11600.360132 + 33 +0.0 + 14 +8321.85938 + 24 +11340.360132 + 34 +0.0 + 0 +DIMENSION + 5 +F0F + 8 +BEMASSUNG + 2 +*D23 + 10 +9416.684779 + 20 +12028.055849 + 30 +0.0 + 11 +9552.454009 + 21 +11991.902003 + 31 +0.0 + 12 +-132.545991 + 22 +-233.097997 + 32 +0.0 + 70 + 129 + 1 +2 + 13 +8972.454009 + 23 +11666.902003 + 33 +0.0 + 14 +8942.454009 + 24 +11711.902003 + 34 +0.0 + 0 +DIMENSION + 5 +F10 + 8 +BEMASSUNG + 2 +*D24 + 10 +9148.992471 + 20 +12429.59431 + 30 +0.0 + 11 +9355.643026 + 21 +12277.361347 + 31 +0.0 + 12 +-132.545991 + 22 +-233.097997 + 32 +0.0 + 1 +18 + 13 +8942.454009 + 23 +11711.902003 + 33 +0.0 + 14 +8687.454009 + 24 +12121.902003 + 34 +0.0 + 50 +303.690068 + 0 +DIMENSION + 5 +F11 + 8 +BEMASSUNG + 2 +*D25 + 10 +9100.530932 + 20 +12502.286618 + 30 +0.0 + 11 +9197.566102 + 21 +12514.476731 + 31 +0.0 + 12 +-132.545991 + 22 +-233.097997 + 32 +0.0 + 1 +3 + 13 +8687.454009 + 23 +12121.902003 + 33 +0.0 + 14 +8642.454009 + 24 +12196.902003 + 34 +0.0 + 50 +303.690068 + 0 +DIMENSION + 5 +F12 + 8 +BEMASSUNG + 2 +*D25 + 10 +9052.228064 + 20 +12575.056944 + 30 +0.0 + 11 +9149.263234 + 21 +12587.247057 + 31 +0.0 + 12 +-180.848859 + 22 +-160.327671 + 32 +0.0 + 1 +3 + 13 +8639.151141 + 23 +12194.672329 + 33 +0.0 + 14 +8594.151141 + 24 +12269.672329 + 34 +0.0 + 50 +303.690068 + 0 +TEXT + 5 +F13 + 8 +BEMASSUNG + 10 +8609.794424 + 20 +10563.995813 + 30 +0.0 + 40 +87.5 + 1 +SCHALUNG + 0 +TEXT + 5 +F14 + 8 +LEGENDE-35 + 10 +8609.794424 + 20 +10313.995813 + 30 +0.0 + 40 +87.5 + 1 +PE-FOLIE + 0 +TEXT + 5 +F15 + 8 +LEGENDE-35 + 10 +8609.794424 + 20 +10110.0 + 30 +0.0 + 40 +87.5 + 1 +MINERALFASER WÄDÄ + 0 +TEXT + 5 +F16 + 8 +LEGENDE-35 + 10 +8609.794424 + 20 +9860.0 + 30 +0.0 + 40 +87.5 + 1 +FUSSPFETTE POS 10 NH S10 18/18 + 0 +TEXT + 5 +F17 + 8 +LEGENDE-35 + 10 +8609.794424 + 20 +9610.0 + 30 +0.0 + 40 +87.5 + 1 +SPARRENPFETTENANKER M15 + 0 +TEXT + 5 +F18 + 8 +LEGENDE-35 + 10 +8609.794424 + 20 +9360.0 + 30 +0.0 + 40 +87.5 + 1 +MW Mz-20-1.8-NF + 0 +TEXT + 5 +F19 + 8 +LEGENDE-35 + 10 +8609.794424 + 20 +9110.0 + 30 +0.0 + 40 +87.5 + 1 +GIPSPUTZ + 0 +POLYLINE + 5 +F1A + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +158D + 8 +LEGENDE-35 + 10 +8455.0 + 20 +10625.0 + 30 +0.0 + 0 +VERTEX + 5 +158E + 8 +LEGENDE-35 + 10 +7280.0 + 20 +10625.0 + 30 +0.0 + 0 +SEQEND + 5 +158F + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +F1E + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1590 + 8 +LEGENDE-35 + 10 +8455.0 + 20 +10360.0 + 30 +0.0 + 0 +VERTEX + 5 +1591 + 8 +LEGENDE-35 + 10 +6770.0 + 20 +10360.0 + 30 +0.0 + 0 +SEQEND + 5 +1592 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +F22 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1593 + 8 +LEGENDE-35 + 10 +8455.0 + 20 +10165.0 + 30 +0.0 + 0 +VERTEX + 5 +1594 + 8 +LEGENDE-35 + 10 +6285.0 + 20 +10165.0 + 30 +0.0 + 0 +SEQEND + 5 +1595 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +F26 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1596 + 8 +LEGENDE-35 + 10 +8445.0 + 20 +9905.0 + 30 +0.0 + 0 +VERTEX + 5 +1597 + 8 +LEGENDE-35 + 10 +6660.0 + 20 +9905.0 + 30 +0.0 + 0 +VERTEX + 5 +1598 + 8 +LEGENDE-35 + 10 +6660.0 + 20 +9690.0 + 30 +0.0 + 0 +VERTEX + 5 +1599 + 8 +LEGENDE-35 + 10 +6165.0 + 20 +9690.0 + 30 +0.0 + 0 +SEQEND + 5 +159A + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +F2C + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +159B + 8 +LEGENDE-35 + 10 +8440.0 + 20 +9665.0 + 30 +0.0 + 0 +VERTEX + 5 +159C + 8 +LEGENDE-35 + 10 +6965.0 + 20 +9665.0 + 30 +0.0 + 0 +VERTEX + 5 +159D + 8 +LEGENDE-35 + 10 +6965.0 + 20 +9480.0 + 30 +0.0 + 0 +VERTEX + 5 +159E + 8 +LEGENDE-35 + 10 +5990.0 + 20 +9480.0 + 30 +0.0 + 0 +SEQEND + 5 +159F + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +F32 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +15A0 + 8 +LEGENDE-35 + 10 +8440.0 + 20 +9415.0 + 30 +0.0 + 0 +VERTEX + 5 +15A1 + 8 +LEGENDE-35 + 10 +7245.0 + 20 +9415.0 + 30 +0.0 + 0 +VERTEX + 5 +15A2 + 8 +LEGENDE-35 + 10 +7245.0 + 20 +9105.0 + 30 +0.0 + 0 +VERTEX + 5 +15A3 + 8 +LEGENDE-35 + 10 +6205.0 + 20 +9105.0 + 30 +0.0 + 0 +SEQEND + 5 +15A4 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +F38 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +15A5 + 8 +LEGENDE-35 + 10 +8440.0 + 20 +9160.0 + 30 +0.0 + 0 +VERTEX + 5 +15A6 + 8 +LEGENDE-35 + 10 +7650.0 + 20 +9160.0 + 30 +0.0 + 0 +VERTEX + 5 +15A7 + 8 +LEGENDE-35 + 10 +7650.0 + 20 +8735.0 + 30 +0.0 + 0 +VERTEX + 5 +15A8 + 8 +LEGENDE-35 + 10 +6460.0 + 20 +8735.0 + 30 +0.0 + 0 +SEQEND + 5 +15A9 + 8 +LEGENDE-35 + 0 +TEXT + 5 +F3E + 8 +LEGENDE-35 + 10 +1875.0 + 20 +11555.0 + 30 +0.0 + 40 +87.5 + 1 +FALZZIEGEL + 0 +TEXT + 5 +F3F + 8 +LEGENDE-35 + 10 +1875.0 + 20 +11305.0 + 30 +0.0 + 40 +87.5 + 1 +LATTUNG NH S10 3/5 + 0 +TEXT + 5 +F40 + 8 +LEGENDE-35 + 10 +1875.0 + 20 +11055.0 + 30 +0.0 + 40 +87.5 + 1 +KONTERLATTUNG NH S10 3/5 + 0 +TEXT + 5 +F41 + 8 +LEGENDE-35 + 10 +1875.0 + 20 +10805.0 + 30 +0.0 + 40 +87.5 + 1 +PE-FOLIE + 0 +POLYLINE + 5 +F42 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +15AA + 8 +LEGENDE-35 + 10 +3285.0 + 20 +11595.0 + 30 +0.0 + 0 +VERTEX + 5 +15AB + 8 +LEGENDE-35 + 10 +7415.0 + 20 +11595.0 + 30 +0.0 + 0 +SEQEND + 5 +15AC + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +F46 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +15AD + 8 +LEGENDE-35 + 10 +3530.0 + 20 +11350.0 + 30 +0.0 + 0 +VERTEX + 5 +15AE + 8 +LEGENDE-35 + 10 +6475.0 + 20 +11350.0 + 30 +0.0 + 0 +VERTEX + 5 +15AF + 8 +LEGENDE-35 + 10 +6900.0 + 20 +11145.0 + 30 +0.0 + 0 +SEQEND + 5 +15B0 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +F4B + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +15B1 + 8 +LEGENDE-35 + 10 +4045.0 + 20 +11090.0 + 30 +0.0 + 0 +VERTEX + 5 +15B2 + 8 +LEGENDE-35 + 10 +6245.0 + 20 +11090.0 + 30 +0.0 + 0 +VERTEX + 5 +15B3 + 8 +LEGENDE-35 + 10 +6685.0 + 20 +10930.0 + 30 +0.0 + 0 +SEQEND + 5 +15B4 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +F50 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +15B5 + 8 +LEGENDE-35 + 10 +2665.0 + 20 +10840.0 + 30 +0.0 + 0 +VERTEX + 5 +15B6 + 8 +LEGENDE-35 + 10 +5500.0 + 20 +10840.0 + 30 +0.0 + 0 +VERTEX + 5 +15B7 + 8 +LEGENDE-35 + 10 +6230.0 + 20 +10590.0 + 30 +0.0 + 0 +SEQEND + 5 +15B8 + 8 +LEGENDE-35 + 0 +TEXT + 5 +F55 + 8 +LEGENDE-35 + 10 +1340.0 + 20 +8350.0 + 30 +0.0 + 40 +87.5 + 1 +REGENRINNE %%c15cm KUPFER + 0 +TEXT + 5 +F56 + 8 +LEGENDE-35 + 10 +1340.0 + 20 +8100.0 + 30 +0.0 + 40 +87.5 + 1 +LOCHBLECH KUPFER + 0 +TEXT + 5 +F57 + 8 +LEGENDE-35 + 10 +1340.0 + 20 +7850.0 + 30 +0.0 + 40 +87.5 + 1 +SPARREN POS 1 NH S10 8/18 + 0 +TEXT + 5 +F58 + 8 +LEGENDE-35 + 10 +1340.0 + 20 +7600.0 + 30 +0.0 + 40 +87.5 + 1 +VMW KHLz-20-1.8-NF + 0 +POLYLINE + 5 +F59 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +15B9 + 8 +LEGENDE-35 + 10 +3355.0 + 20 +8405.0 + 30 +0.0 + 0 +VERTEX + 5 +15BA + 8 +LEGENDE-35 + 10 +4090.0 + 20 +8405.0 + 30 +0.0 + 0 +VERTEX + 5 +15BB + 8 +LEGENDE-35 + 10 +4090.0 + 20 +9240.0 + 30 +0.0 + 0 +SEQEND + 5 +15BC + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +F5E + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +15BD + 8 +LEGENDE-35 + 10 +2845.0 + 20 +8140.0 + 30 +0.0 + 0 +VERTEX + 5 +15BE + 8 +LEGENDE-35 + 10 +4495.0 + 20 +8140.0 + 30 +0.0 + 0 +VERTEX + 5 +15BF + 8 +LEGENDE-35 + 10 +4495.0 + 20 +9415.0 + 30 +0.0 + 0 +SEQEND + 5 +15C0 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +F63 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +15C1 + 8 +LEGENDE-35 + 10 +3590.0 + 20 +7885.0 + 30 +0.0 + 0 +VERTEX + 5 +15C2 + 8 +LEGENDE-35 + 10 +4755.0 + 20 +7885.0 + 30 +0.0 + 0 +VERTEX + 5 +15C3 + 8 +LEGENDE-35 + 10 +4755.0 + 20 +9400.0 + 30 +0.0 + 0 +SEQEND + 5 +15C4 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +F68 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +15C5 + 8 +LEGENDE-35 + 10 +2935.0 + 20 +7650.0 + 30 +0.0 + 0 +VERTEX + 5 +15C6 + 8 +LEGENDE-35 + 10 +4540.0 + 20 +7650.0 + 30 +0.0 + 0 +VERTEX + 5 +15C7 + 8 +LEGENDE-35 + 10 +4975.0 + 20 +7885.0 + 30 +0.0 + 0 +SEQEND + 5 +15C8 + 8 +LEGENDE-35 + 0 +TEXT + 5 +F6D + 8 +LEGENDE-70 + 10 +4205.0 + 20 +13630.0 + 30 +0.0 + 40 +175.0 + 1 +D5 TRAUFPUNKT + DACHEINDECKUNG + 0 +POLYLINE + 5 +F6E + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +15C9 + 8 +MAUERWERK + 10 +10391.85938 + 20 +4212.860132 + 30 +0.0 + 0 +VERTEX + 5 +15CA + 8 +MAUERWERK + 10 +10391.85938 + 20 +2555.360132 + 30 +0.0 + 0 +SEQEND + 5 +15CB + 8 +MAUERWERK + 0 +INSERT + 5 +F72 + 8 +SCHRAFFUR + 2 +*X5 + 10 +4746.85938 + 20 +-5754.639868 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +450.0 +1040 +0.0 +1002 +} + 0 +POLYLINE + 5 +F73 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +15CC + 8 +MAUERWERK + 10 +10679.35938 + 20 +2555.360132 + 30 +0.0 + 0 +VERTEX + 5 +15CD + 8 +MAUERWERK + 10 +10679.35938 + 20 +4212.860132 + 30 +0.0 + 0 +VERTEX + 5 +15CE + 8 +MAUERWERK + 10 +10391.85938 + 20 +4212.860132 + 30 +0.0 + 0 +SEQEND + 5 +15CF + 8 +MAUERWERK + 0 +DIMENSION + 5 +F78 + 8 +DRAHTANKER + 2 +*D10 + 10 +11941.85938 + 20 +1810.360132 + 30 +0.0 + 11 +11484.35938 + 21 +1897.860132 + 31 +0.0 + 12 +4746.85938 + 22 +-5754.639868 + 32 +0.0 + 1 +36 + 13 +11026.85938 + 23 +2590.360132 + 33 +0.0 + 14 +11941.85938 + 24 +2575.360132 + 34 +0.0 + 0 +INSERT + 5 +F79 + 8 +SCHRAFFUR + 2 +*X6 + 10 +4746.85938 + 20 +-5754.639868 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +1200.0 +1040 +0.0 +1002 +} + 0 +POLYLINE + 5 +F7A + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +15D0 + 8 +MAUERWERK + 10 +11941.85938 + 20 +2555.360132 + 30 +0.0 + 0 +VERTEX + 5 +15D1 + 8 +MAUERWERK + 10 +11941.85938 + 20 +4212.860132 + 30 +0.0 + 0 +VERTEX + 5 +15D2 + 8 +MAUERWERK + 10 +11029.35938 + 20 +4212.860132 + 30 +0.0 + 0 +VERTEX + 5 +15D3 + 8 +MAUERWERK + 10 +11029.35938 + 20 +2555.360132 + 30 +0.0 + 0 +SEQEND + 5 +15D4 + 8 +MAUERWERK + 0 +LINE + 5 +F80 + 8 +0 + 62 + 0 + 10 +10962.484376 + 20 +2867.725561 + 30 +0.0 + 11 +10990.609376 + 21 +2916.43949 + 31 +0.0 + 0 +LINE + 5 +F81 + 8 +0 + 62 + 0 + 10 +10906.234344 + 20 +2867.725538 + 30 +0.0 + 11 +10878.109344 + 21 +2916.439467 + 31 +0.0 + 0 +POLYLINE + 5 +F82 + 8 +DAEMMUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +15D5 + 8 +DAEMMUNG + 10 +10831.298947 + 20 +4212.860132 + 30 +0.0 + 0 +VERTEX + 5 +15D6 + 8 +DAEMMUNG + 10 +10831.298947 + 20 +4212.860132 + 30 +0.0 + 0 +VERTEX + 5 +15D7 + 8 +DAEMMUNG + 10 +10829.686394 + 20 +2555.360132 + 30 +0.0 + 0 +SEQEND + 5 +15D8 + 8 +DAEMMUNG + 0 +DIMENSION + 5 +F87 + 8 +DRAHTANKER + 2 +*D8 + 10 +10826.85938 + 20 +1810.360132 + 30 +0.0 + 11 +10754.35938 + 21 +1897.860132 + 31 +0.0 + 12 +4746.85938 + 22 +-5754.639868 + 32 +0.0 + 1 +6 + 13 +10681.85938 + 23 +2575.360132 + 33 +0.0 + 14 +10826.85938 + 24 +2560.360132 + 34 +0.0 + 0 +DIMENSION + 5 +F88 + 8 +DRAHTANKER + 2 +*D9 + 10 +11026.85938 + 20 +1810.360132 + 30 +0.0 + 11 +10926.85938 + 21 +1897.860132 + 31 +0.0 + 12 +4746.85938 + 22 +-5754.639868 + 32 +0.0 + 1 +8 + 13 +10826.85938 + 23 +2560.360132 + 33 +0.0 + 14 +11026.85938 + 24 +2590.360132 + 34 +0.0 + 0 +TEXT + 5 +F89 + 8 +DRAHTANKER + 10 +10591.85938 + 20 +1915.360132 + 30 +0.0 + 40 +62.5 + 1 +5 + 0 +LINE + 5 +F8A + 8 +0 + 62 + 0 + 10 +10906.23438 + 20 +2867.725521 + 30 +0.0 + 11 +10962.48438 + 21 +2867.725521 + 31 +0.0 + 0 +LINE + 5 +F8B + 8 +0 + 62 + 0 + 10 +10906.23438 + 20 +2770.297664 + 30 +0.0 + 11 +10962.48438 + 21 +2770.297664 + 31 +0.0 + 0 +LINE + 5 +F8C + 8 +0 + 62 + 0 + 10 +10906.23438 + 20 +2672.869806 + 30 +0.0 + 11 +10962.48438 + 21 +2672.869806 + 31 +0.0 + 0 +LINE + 5 +F8D + 8 +0 + 62 + 0 + 10 +10906.23438 + 20 +2575.441949 + 30 +0.0 + 11 +10962.48438 + 21 +2575.441949 + 31 +0.0 + 0 +LINE + 5 +F8E + 8 +0 + 62 + 0 + 10 +10823.269193 + 20 +2819.011592 + 30 +0.0 + 11 +10878.10938 + 21 +2819.011592 + 31 +0.0 + 0 +LINE + 5 +F8F + 8 +0 + 62 + 0 + 10 +10822.916012 + 20 +2721.583735 + 30 +0.0 + 11 +10878.10938 + 21 +2721.583735 + 31 +0.0 + 0 +LINE + 5 +F90 + 8 +0 + 62 + 0 + 10 +10906.234344 + 20 +2770.29768 + 30 +0.0 + 11 +10878.109344 + 21 +2819.011609 + 31 +0.0 + 0 +LINE + 5 +F91 + 8 +0 + 62 + 0 + 10 +10906.234344 + 20 +2672.869822 + 30 +0.0 + 11 +10878.109344 + 21 +2721.583751 + 31 +0.0 + 0 +LINE + 5 +F92 + 8 +0 + 62 + 0 + 10 +10878.109376 + 20 +2721.583774 + 30 +0.0 + 11 +10906.234376 + 21 +2770.297703 + 31 +0.0 + 0 +LINE + 5 +F93 + 8 +0 + 62 + 0 + 10 +10878.109376 + 20 +2819.011632 + 30 +0.0 + 11 +10906.234376 + 21 +2867.725561 + 31 +0.0 + 0 +LINE + 5 +F94 + 8 +0 + 62 + 0 + 10 +10822.562832 + 20 +2624.155877 + 30 +0.0 + 11 +10878.10938 + 21 +2624.155877 + 31 +0.0 + 0 +LINE + 5 +F95 + 8 +0 + 62 + 0 + 10 +10906.234344 + 20 +2575.441964 + 30 +0.0 + 11 +10878.109344 + 21 +2624.155893 + 31 +0.0 + 0 +LINE + 5 +F96 + 8 +0 + 62 + 0 + 10 +10901.934989 + 20 +2567.995231 + 30 +0.0 + 11 +10906.234376 + 21 +2575.441988 + 31 +0.0 + 0 +LINE + 5 +F97 + 8 +0 + 62 + 0 + 10 +10878.109376 + 20 +2624.155916 + 30 +0.0 + 11 +10906.234376 + 21 +2672.869845 + 31 +0.0 + 0 +LINE + 5 +F98 + 8 +0 + 62 + 0 + 10 +10990.60938 + 20 +2819.011592 + 30 +0.0 + 11 +11030.489283 + 21 +2819.011592 + 31 +0.0 + 0 +LINE + 5 +F99 + 8 +0 + 62 + 0 + 10 +10990.60938 + 20 +2721.583735 + 30 +0.0 + 11 +11030.489283 + 21 +2721.583735 + 31 +0.0 + 0 +LINE + 5 +F9A + 8 +0 + 62 + 0 + 10 +10990.609344 + 20 +2819.011609 + 30 +0.0 + 11 +10962.484344 + 21 +2867.725538 + 31 +0.0 + 0 +LINE + 5 +F9B + 8 +0 + 62 + 0 + 10 +10990.609344 + 20 +2721.583751 + 30 +0.0 + 11 +10962.484344 + 21 +2770.29768 + 31 +0.0 + 0 +LINE + 5 +F9C + 8 +0 + 62 + 0 + 10 +10962.484376 + 20 +2672.869846 + 30 +0.0 + 11 +10990.609376 + 21 +2721.583774 + 31 +0.0 + 0 +LINE + 5 +F9D + 8 +0 + 62 + 0 + 10 +10962.484376 + 20 +2770.297703 + 30 +0.0 + 11 +10990.609376 + 21 +2819.011632 + 31 +0.0 + 0 +LINE + 5 +F9E + 8 +0 + 62 + 0 + 10 +10990.60938 + 20 +2624.155877 + 30 +0.0 + 11 +11030.489283 + 21 +2624.155877 + 31 +0.0 + 0 +LINE + 5 +F9F + 8 +0 + 62 + 0 + 10 +10966.783717 + 20 +2567.995231 + 30 +0.0 + 11 +10962.484344 + 21 +2575.441964 + 31 +0.0 + 0 +LINE + 5 +FA0 + 8 +0 + 62 + 0 + 10 +10962.484376 + 20 +2575.441988 + 30 +0.0 + 11 +10990.609376 + 21 +2624.155917 + 31 +0.0 + 0 +LINE + 5 +FA1 + 8 +0 + 62 + 0 + 10 +10990.609344 + 20 +2624.155893 + 30 +0.0 + 11 +10962.484344 + 21 +2672.869822 + 31 +0.0 + 0 +LINE + 5 +FA2 + 8 +0 + 62 + 0 + 10 +10962.484377 + 20 +3549.720566 + 30 +0.0 + 11 +10990.609377 + 21 +3598.434495 + 31 +0.0 + 0 +LINE + 5 +FA3 + 8 +0 + 62 + 0 + 10 +10906.234342 + 20 +3549.720542 + 30 +0.0 + 11 +10878.109342 + 21 +3598.434471 + 31 +0.0 + 0 +POLYLINE + 5 +FA4 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +15D9 + 8 +DETAILS + 10 +10691.85938 + 20 +3083.787465 + 30 +0.0 + 0 +VERTEX + 5 +15DA + 8 +DETAILS + 10 +10829.35938 + 20 +3083.787465 + 30 +0.0 + 0 +SEQEND + 5 +15DB + 8 +DETAILS + 0 +POLYLINE + 5 +FA8 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +15DC + 8 +DETAILS + 10 +10504.35938 + 20 +3083.787465 + 30 +0.0 + 0 +VERTEX + 5 +15DD + 8 +DETAILS + 10 +10579.35938 + 20 +3083.787465 + 30 +0.0 + 0 +SEQEND + 5 +15DE + 8 +DETAILS + 0 +POLYLINE + 5 +FAC + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +15DF + 8 +DETAILS + 10 +10729.35938 + 20 +3158.787465 + 30 +0.0 + 0 +VERTEX + 5 +15E0 + 8 +DETAILS + 10 +10729.35938 + 20 +3008.787465 + 30 +0.0 + 0 +SEQEND + 5 +15E1 + 8 +DETAILS + 0 +POLYLINE + 5 +FB0 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +15E2 + 8 +DETAILS + 10 +10616.85938 + 20 +3083.787465 + 30 +0.0 + 0 +VERTEX + 5 +15E3 + 8 +DETAILS + 10 +10679.35938 + 20 +3083.787465 + 30 +0.0 + 0 +SEQEND + 5 +15E4 + 8 +DETAILS + 0 +LINE + 5 +FB4 + 8 +0 + 62 + 0 + 10 +10990.609343 + 20 +3208.72304 + 30 +0.0 + 11 +10962.484343 + 21 +3257.436969 + 31 +0.0 + 0 +LINE + 5 +FB5 + 8 +0 + 62 + 0 + 10 +10878.109377 + 20 +3208.723063 + 30 +0.0 + 11 +10906.234377 + 21 +3257.436992 + 31 +0.0 + 0 +LINE + 5 +FB6 + 8 +0 + 62 + 0 + 10 +10906.23438 + 20 +3160.009094 + 30 +0.0 + 11 +10962.48438 + 21 +3160.009094 + 31 +0.0 + 0 +LINE + 5 +FB7 + 8 +0 + 62 + 0 + 10 +10906.23438 + 20 +3062.581236 + 30 +0.0 + 11 +10962.48438 + 21 +3062.581236 + 31 +0.0 + 0 +LINE + 5 +FB8 + 8 +0 + 62 + 0 + 10 +10906.23438 + 20 +2965.153379 + 30 +0.0 + 11 +10962.48438 + 21 +2965.153379 + 31 +0.0 + 0 +POLYLINE + 5 +FB9 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +15E5 + 8 +DETAILS + 10 +10805.976103 + 20 +3121.227005 + 30 +0.0 + 0 +VERTEX + 5 +15E6 + 8 +DETAILS + 10 +10805.976103 + 20 +3046.227005 + 30 +0.0 + 0 +SEQEND + 5 +15E7 + 8 +DETAILS + 0 +POLYLINE + 5 +FBD + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +15E8 + 8 +DETAILS + 10 +10866.85938 + 20 +3083.787465 + 30 +0.0 + 0 +VERTEX + 5 +15E9 + 8 +DETAILS + 10 +10929.35938 + 20 +3083.787465 + 30 +0.0 + 0 +SEQEND + 5 +15EA + 8 +DETAILS + 0 +LINE + 5 +FC1 + 8 +0 + 62 + 0 + 10 +10824.681914 + 20 +3208.723022 + 30 +0.0 + 11 +10878.10938 + 21 +3208.723022 + 31 +0.0 + 0 +LINE + 5 +FC2 + 8 +0 + 62 + 0 + 10 +10824.328733 + 20 +3111.295165 + 30 +0.0 + 11 +10878.10938 + 21 +3111.295165 + 31 +0.0 + 0 +LINE + 5 +FC3 + 8 +0 + 62 + 0 + 10 +10823.975553 + 20 +3013.867307 + 30 +0.0 + 11 +10878.10938 + 21 +3013.867307 + 31 +0.0 + 0 +LINE + 5 +FC4 + 8 +0 + 62 + 0 + 10 +10906.234343 + 20 +3160.009111 + 30 +0.0 + 11 +10878.109343 + 21 +3208.72304 + 31 +0.0 + 0 +LINE + 5 +FC5 + 8 +0 + 62 + 0 + 10 +10906.234343 + 20 +3062.581253 + 30 +0.0 + 11 +10878.109343 + 21 +3111.295182 + 31 +0.0 + 0 +LINE + 5 +FC6 + 8 +0 + 62 + 0 + 10 +10878.109377 + 20 +3013.867348 + 30 +0.0 + 11 +10906.234377 + 21 +3062.581277 + 31 +0.0 + 0 +LINE + 5 +FC7 + 8 +0 + 62 + 0 + 10 +10878.109377 + 20 +3111.295206 + 30 +0.0 + 11 +10906.234377 + 21 +3160.009135 + 31 +0.0 + 0 +LINE + 5 +FC8 + 8 +0 + 62 + 0 + 10 +10823.622373 + 20 +2916.43945 + 30 +0.0 + 11 +10878.10938 + 21 +2916.43945 + 31 +0.0 + 0 +LINE + 5 +FC9 + 8 +0 + 62 + 0 + 10 +10878.109377 + 20 +2916.43949 + 30 +0.0 + 11 +10906.234377 + 21 +2965.153419 + 31 +0.0 + 0 +LINE + 5 +FCA + 8 +0 + 62 + 0 + 10 +10906.234344 + 20 +2965.153396 + 30 +0.0 + 11 +10878.109344 + 21 +3013.867325 + 31 +0.0 + 0 +POLYLINE + 5 +FCB + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +15EB + 8 +DETAILS + 10 +11079.35938 + 20 +3083.787465 + 30 +0.0 + 0 +VERTEX + 5 +15EC + 8 +DETAILS + 10 +11129.35938 + 20 +3083.787465 + 30 +0.0 + 0 +SEQEND + 5 +15ED + 8 +DETAILS + 0 +POLYLINE + 5 +FCF + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +15EE + 8 +DETAILS + 10 +10966.85938 + 20 +3083.787465 + 30 +0.0 + 0 +VERTEX + 5 +15EF + 8 +DETAILS + 10 +11029.35938 + 20 +3083.787465 + 30 +0.0 + 0 +SEQEND + 5 +15F0 + 8 +DETAILS + 0 +LINE + 5 +FD3 + 8 +0 + 62 + 0 + 10 +10990.60938 + 20 +3208.723022 + 30 +0.0 + 11 +11030.489283 + 21 +3208.723022 + 31 +0.0 + 0 +LINE + 5 +FD4 + 8 +0 + 62 + 0 + 10 +10990.60938 + 20 +3111.295165 + 30 +0.0 + 11 +11030.489283 + 21 +3111.295165 + 31 +0.0 + 0 +LINE + 5 +FD5 + 8 +0 + 62 + 0 + 10 +10990.60938 + 20 +3013.867307 + 30 +0.0 + 11 +11030.489283 + 21 +3013.867307 + 31 +0.0 + 0 +LINE + 5 +FD6 + 8 +0 + 62 + 0 + 10 +10990.609343 + 20 +3111.295182 + 30 +0.0 + 11 +10962.484343 + 21 +3160.009111 + 31 +0.0 + 0 +LINE + 5 +FD7 + 8 +0 + 62 + 0 + 10 +10990.609343 + 20 +3013.867324 + 30 +0.0 + 11 +10962.484343 + 21 +3062.581253 + 31 +0.0 + 0 +LINE + 5 +FD8 + 8 +0 + 62 + 0 + 10 +10962.484377 + 20 +3062.581277 + 30 +0.0 + 11 +10990.609377 + 21 +3111.295206 + 31 +0.0 + 0 +LINE + 5 +FD9 + 8 +0 + 62 + 0 + 10 +10962.484377 + 20 +3160.009135 + 30 +0.0 + 11 +10990.609377 + 21 +3208.723064 + 31 +0.0 + 0 +LINE + 5 +FDA + 8 +0 + 62 + 0 + 10 +10990.60938 + 20 +2916.43945 + 30 +0.0 + 11 +11030.489283 + 21 +2916.43945 + 31 +0.0 + 0 +LINE + 5 +FDB + 8 +0 + 62 + 0 + 10 +10990.609343 + 20 +2916.439466 + 30 +0.0 + 11 +10962.484343 + 21 +2965.153395 + 31 +0.0 + 0 +LINE + 5 +FDC + 8 +0 + 62 + 0 + 10 +10962.484376 + 20 +2965.153419 + 30 +0.0 + 11 +10990.609376 + 21 +3013.867348 + 31 +0.0 + 0 +LINE + 5 +FDD + 8 +0 + 62 + 0 + 10 +10906.23438 + 20 +3549.720524 + 30 +0.0 + 11 +10962.48438 + 21 +3549.720524 + 31 +0.0 + 0 +LINE + 5 +FDE + 8 +0 + 62 + 0 + 10 +10906.23438 + 20 +3452.292666 + 30 +0.0 + 11 +10962.48438 + 21 +3452.292666 + 31 +0.0 + 0 +LINE + 5 +FDF + 8 +0 + 62 + 0 + 10 +10906.23438 + 20 +3354.864809 + 30 +0.0 + 11 +10962.48438 + 21 +3354.864809 + 31 +0.0 + 0 +LINE + 5 +FE0 + 8 +0 + 62 + 0 + 10 +10906.23438 + 20 +3257.436951 + 30 +0.0 + 11 +10962.48438 + 21 +3257.436951 + 31 +0.0 + 0 +LINE + 5 +FE1 + 8 +0 + 62 + 0 + 10 +10825.741454 + 20 +3501.006595 + 30 +0.0 + 11 +10878.10938 + 21 +3501.006595 + 31 +0.0 + 0 +LINE + 5 +FE2 + 8 +0 + 62 + 0 + 10 +10825.388274 + 20 +3403.578737 + 30 +0.0 + 11 +10878.10938 + 21 +3403.578737 + 31 +0.0 + 0 +LINE + 5 +FE3 + 8 +0 + 62 + 0 + 10 +10906.234343 + 20 +3452.292685 + 30 +0.0 + 11 +10878.109343 + 21 +3501.006614 + 31 +0.0 + 0 +LINE + 5 +FE4 + 8 +0 + 62 + 0 + 10 +10906.234343 + 20 +3354.864827 + 30 +0.0 + 11 +10878.109343 + 21 +3403.578756 + 31 +0.0 + 0 +LINE + 5 +FE5 + 8 +0 + 62 + 0 + 10 +10878.109377 + 20 +3403.578779 + 30 +0.0 + 11 +10906.234377 + 21 +3452.292708 + 31 +0.0 + 0 +LINE + 5 +FE6 + 8 +0 + 62 + 0 + 10 +10878.109378 + 20 +3501.006637 + 30 +0.0 + 11 +10906.234378 + 21 +3549.720566 + 31 +0.0 + 0 +LINE + 5 +FE7 + 8 +0 + 62 + 0 + 10 +10825.035094 + 20 +3306.15088 + 30 +0.0 + 11 +10878.10938 + 21 +3306.15088 + 31 +0.0 + 0 +LINE + 5 +FE8 + 8 +0 + 62 + 0 + 10 +10906.234343 + 20 +3257.436969 + 30 +0.0 + 11 +10878.109343 + 21 +3306.150898 + 31 +0.0 + 0 +LINE + 5 +FE9 + 8 +0 + 62 + 0 + 10 +10878.109377 + 20 +3306.150921 + 30 +0.0 + 11 +10906.234377 + 21 +3354.86485 + 31 +0.0 + 0 +LINE + 5 +FEA + 8 +0 + 62 + 0 + 10 +10990.60938 + 20 +3501.006595 + 30 +0.0 + 11 +11030.489283 + 21 +3501.006595 + 31 +0.0 + 0 +LINE + 5 +FEB + 8 +0 + 62 + 0 + 10 +10990.60938 + 20 +3403.578737 + 30 +0.0 + 11 +11030.489283 + 21 +3403.578737 + 31 +0.0 + 0 +LINE + 5 +FEC + 8 +0 + 62 + 0 + 10 +10990.609342 + 20 +3501.006613 + 30 +0.0 + 11 +10962.484342 + 21 +3549.720542 + 31 +0.0 + 0 +LINE + 5 +FED + 8 +0 + 62 + 0 + 10 +10990.609342 + 20 +3403.578756 + 30 +0.0 + 11 +10962.484342 + 21 +3452.292685 + 31 +0.0 + 0 +LINE + 5 +FEE + 8 +0 + 62 + 0 + 10 +10962.484377 + 20 +3354.86485 + 30 +0.0 + 11 +10990.609377 + 21 +3403.578779 + 31 +0.0 + 0 +LINE + 5 +FEF + 8 +0 + 62 + 0 + 10 +10962.484377 + 20 +3452.292708 + 30 +0.0 + 11 +10990.609377 + 21 +3501.006637 + 31 +0.0 + 0 +LINE + 5 +FF0 + 8 +0 + 62 + 0 + 10 +10990.60938 + 20 +3306.15088 + 30 +0.0 + 11 +11030.489283 + 21 +3306.15088 + 31 +0.0 + 0 +LINE + 5 +FF1 + 8 +0 + 62 + 0 + 10 +10962.484377 + 20 +3257.436992 + 30 +0.0 + 11 +10990.609377 + 21 +3306.150921 + 31 +0.0 + 0 +LINE + 5 +FF2 + 8 +0 + 62 + 0 + 10 +10990.609343 + 20 +3306.150898 + 30 +0.0 + 11 +10962.484343 + 21 +3354.864827 + 31 +0.0 + 0 +POLYLINE + 5 +FF3 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +15F1 + 8 +DETAILS + 10 +10691.85938 + 20 +4033.787465 + 30 +0.0 + 0 +VERTEX + 5 +15F2 + 8 +DETAILS + 10 +10829.35938 + 20 +4033.787465 + 30 +0.0 + 0 +SEQEND + 5 +15F3 + 8 +DETAILS + 0 +POLYLINE + 5 +FF7 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +15F4 + 8 +DETAILS + 10 +10504.35938 + 20 +4033.787465 + 30 +0.0 + 0 +VERTEX + 5 +15F5 + 8 +DETAILS + 10 +10579.35938 + 20 +4033.787465 + 30 +0.0 + 0 +SEQEND + 5 +15F6 + 8 +DETAILS + 0 +POLYLINE + 5 +FFB + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +15F7 + 8 +DETAILS + 10 +10616.85938 + 20 +4033.787465 + 30 +0.0 + 0 +VERTEX + 5 +15F8 + 8 +DETAILS + 10 +10679.35938 + 20 +4033.787465 + 30 +0.0 + 0 +SEQEND + 5 +15F9 + 8 +DETAILS + 0 +POLYLINE + 5 +FFF + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +15FA + 8 +DETAILS + 10 +10729.35938 + 20 +4108.787465 + 30 +0.0 + 0 +VERTEX + 5 +15FB + 8 +DETAILS + 10 +10729.35938 + 20 +3958.787465 + 30 +0.0 + 0 +SEQEND + 5 +15FC + 8 +DETAILS + 0 +LINE + 5 +1003 + 8 +0 + 62 + 0 + 10 +10990.609341 + 20 +3890.718045 + 30 +0.0 + 11 +10962.484341 + 21 +3939.431974 + 31 +0.0 + 0 +LINE + 5 +1004 + 8 +0 + 62 + 0 + 10 +10878.109378 + 20 +3890.718068 + 30 +0.0 + 11 +10906.234378 + 21 +3939.431997 + 31 +0.0 + 0 +LINE + 5 +1005 + 8 +0 + 62 + 0 + 10 +10906.23438 + 20 +3842.004096 + 30 +0.0 + 11 +10962.48438 + 21 +3842.004096 + 31 +0.0 + 0 +LINE + 5 +1006 + 8 +0 + 62 + 0 + 10 +10906.23438 + 20 +3744.576239 + 30 +0.0 + 11 +10962.48438 + 21 +3744.576239 + 31 +0.0 + 0 +LINE + 5 +1007 + 8 +0 + 62 + 0 + 10 +10906.23438 + 20 +3647.148381 + 30 +0.0 + 11 +10962.48438 + 21 +3647.148381 + 31 +0.0 + 0 +LINE + 5 +1008 + 8 +0 + 62 + 0 + 10 +10827.154175 + 20 +3890.718025 + 30 +0.0 + 11 +10878.10938 + 21 +3890.718025 + 31 +0.0 + 0 +LINE + 5 +1009 + 8 +0 + 62 + 0 + 10 +10826.800995 + 20 +3793.290167 + 30 +0.0 + 11 +10878.10938 + 21 +3793.290167 + 31 +0.0 + 0 +LINE + 5 +100A + 8 +0 + 62 + 0 + 10 +10826.447815 + 20 +3695.86231 + 30 +0.0 + 11 +10878.10938 + 21 +3695.86231 + 31 +0.0 + 0 +LINE + 5 +100B + 8 +0 + 62 + 0 + 10 +10906.234342 + 20 +3842.004116 + 30 +0.0 + 11 +10878.109342 + 21 +3890.718045 + 31 +0.0 + 0 +LINE + 5 +100C + 8 +0 + 62 + 0 + 10 +10906.234342 + 20 +3744.576258 + 30 +0.0 + 11 +10878.109342 + 21 +3793.290187 + 31 +0.0 + 0 +LINE + 5 +100D + 8 +0 + 62 + 0 + 10 +10878.109378 + 20 +3695.862352 + 30 +0.0 + 11 +10906.234378 + 21 +3744.576281 + 31 +0.0 + 0 +LINE + 5 +100E + 8 +0 + 62 + 0 + 10 +10878.109378 + 20 +3793.29021 + 30 +0.0 + 11 +10906.234378 + 21 +3842.004139 + 31 +0.0 + 0 +LINE + 5 +100F + 8 +0 + 62 + 0 + 10 +10826.094635 + 20 +3598.434452 + 30 +0.0 + 11 +10878.10938 + 21 +3598.434452 + 31 +0.0 + 0 +LINE + 5 +1010 + 8 +0 + 62 + 0 + 10 +10878.109378 + 20 +3598.434495 + 30 +0.0 + 11 +10906.234378 + 21 +3647.148424 + 31 +0.0 + 0 +LINE + 5 +1011 + 8 +0 + 62 + 0 + 10 +10906.234342 + 20 +3647.1484 + 30 +0.0 + 11 +10878.109342 + 21 +3695.862329 + 31 +0.0 + 0 +LINE + 5 +1012 + 8 +0 + 62 + 0 + 10 +10990.60938 + 20 +3890.718025 + 30 +0.0 + 11 +11030.489283 + 21 +3890.718025 + 31 +0.0 + 0 +LINE + 5 +1013 + 8 +0 + 62 + 0 + 10 +10990.60938 + 20 +3793.290167 + 30 +0.0 + 11 +11030.489283 + 21 +3793.290167 + 31 +0.0 + 0 +LINE + 5 +1014 + 8 +0 + 62 + 0 + 10 +10990.60938 + 20 +3695.86231 + 30 +0.0 + 11 +11030.489283 + 21 +3695.86231 + 31 +0.0 + 0 +LINE + 5 +1015 + 8 +0 + 62 + 0 + 10 +10990.609342 + 20 +3793.290187 + 30 +0.0 + 11 +10962.484342 + 21 +3842.004116 + 31 +0.0 + 0 +LINE + 5 +1016 + 8 +0 + 62 + 0 + 10 +10990.609342 + 20 +3695.862329 + 30 +0.0 + 11 +10962.484342 + 21 +3744.576258 + 31 +0.0 + 0 +LINE + 5 +1017 + 8 +0 + 62 + 0 + 10 +10962.484378 + 20 +3744.576282 + 30 +0.0 + 11 +10990.609378 + 21 +3793.29021 + 31 +0.0 + 0 +LINE + 5 +1018 + 8 +0 + 62 + 0 + 10 +10962.484378 + 20 +3842.004139 + 30 +0.0 + 11 +10990.609378 + 21 +3890.718068 + 31 +0.0 + 0 +LINE + 5 +1019 + 8 +0 + 62 + 0 + 10 +10990.60938 + 20 +3598.434452 + 30 +0.0 + 11 +11030.489283 + 21 +3598.434452 + 31 +0.0 + 0 +LINE + 5 +101A + 8 +0 + 62 + 0 + 10 +10990.609342 + 20 +3598.434471 + 30 +0.0 + 11 +10962.484342 + 21 +3647.1484 + 31 +0.0 + 0 +LINE + 5 +101B + 8 +0 + 62 + 0 + 10 +10962.484378 + 20 +3647.148424 + 30 +0.0 + 11 +10990.609378 + 21 +3695.862353 + 31 +0.0 + 0 +LINE + 5 +101C + 8 +0 + 62 + 0 + 10 +10906.23438 + 20 +4231.715526 + 30 +0.0 + 11 +10962.48438 + 21 +4231.715526 + 31 +0.0 + 0 +LINE + 5 +101D + 8 +0 + 62 + 0 + 10 +10906.23438 + 20 +4134.287669 + 30 +0.0 + 11 +10962.48438 + 21 +4134.287669 + 31 +0.0 + 0 +LINE + 5 +101E + 8 +0 + 62 + 0 + 10 +10906.23438 + 20 +4036.859811 + 30 +0.0 + 11 +10962.48438 + 21 +4036.859811 + 31 +0.0 + 0 +LINE + 5 +101F + 8 +0 + 62 + 0 + 10 +10906.23438 + 20 +3939.431954 + 30 +0.0 + 11 +10962.48438 + 21 +3939.431954 + 31 +0.0 + 0 +POLYLINE + 5 +1020 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +15FD + 8 +DETAILS + 10 +10866.85938 + 20 +4033.787465 + 30 +0.0 + 0 +VERTEX + 5 +15FE + 8 +DETAILS + 10 +10929.35938 + 20 +4033.787465 + 30 +0.0 + 0 +SEQEND + 5 +15FF + 8 +DETAILS + 0 +LINE + 5 +1024 + 8 +0 + 62 + 0 + 10 +10828.213716 + 20 +4183.001597 + 30 +0.0 + 11 +10878.10938 + 21 +4183.001597 + 31 +0.0 + 0 +LINE + 5 +1025 + 8 +0 + 62 + 0 + 10 +10827.860536 + 20 +4085.57374 + 30 +0.0 + 11 +10878.10938 + 21 +4085.57374 + 31 +0.0 + 0 +LINE + 5 +1026 + 8 +0 + 62 + 0 + 10 +10906.234341 + 20 +4134.287689 + 30 +0.0 + 11 +10878.109341 + 21 +4183.001618 + 31 +0.0 + 0 +LINE + 5 +1027 + 8 +0 + 62 + 0 + 10 +10906.234341 + 20 +4036.859832 + 30 +0.0 + 11 +10878.109341 + 21 +4085.573761 + 31 +0.0 + 0 +LINE + 5 +1028 + 8 +0 + 62 + 0 + 10 +10878.109379 + 20 +4085.573784 + 30 +0.0 + 11 +10906.234379 + 21 +4134.287713 + 31 +0.0 + 0 +LINE + 5 +1029 + 8 +0 + 62 + 0 + 10 +10878.109379 + 20 +4183.001642 + 30 +0.0 + 11 +10906.234379 + 21 +4231.715571 + 31 +0.0 + 0 +LINE + 5 +102A + 8 +0 + 62 + 0 + 10 +10827.507355 + 20 +3988.145882 + 30 +0.0 + 11 +10878.10938 + 21 +3988.145882 + 31 +0.0 + 0 +LINE + 5 +102B + 8 +0 + 62 + 0 + 10 +10906.234342 + 20 +3939.431974 + 30 +0.0 + 11 +10878.109342 + 21 +3988.145903 + 31 +0.0 + 0 +POLYLINE + 5 +102C + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1600 + 8 +DETAILS + 10 +10805.976103 + 20 +4071.227005 + 30 +0.0 + 0 +VERTEX + 5 +1601 + 8 +DETAILS + 10 +10805.976103 + 20 +3996.227005 + 30 +0.0 + 0 +SEQEND + 5 +1602 + 8 +DETAILS + 0 +LINE + 5 +1030 + 8 +0 + 62 + 0 + 10 +10878.109379 + 20 +3988.145926 + 30 +0.0 + 11 +10906.234379 + 21 +4036.859855 + 31 +0.0 + 0 +LINE + 5 +1031 + 8 +0 + 62 + 0 + 10 +11029.35938 + 20 +4206.4523 + 30 +0.0 + 11 +11035.767212 + 21 +4212.860132 + 31 +0.0 + 0 +POLYLINE + 5 +1032 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1603 + 8 +DETAILS + 10 +10966.85938 + 20 +4033.787465 + 30 +0.0 + 0 +VERTEX + 5 +1604 + 8 +DETAILS + 10 +11029.35938 + 20 +4033.787465 + 30 +0.0 + 0 +SEQEND + 5 +1605 + 8 +DETAILS + 0 +POLYLINE + 5 +1036 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1606 + 8 +DETAILS + 10 +11079.35938 + 20 +4033.787465 + 30 +0.0 + 0 +VERTEX + 5 +1607 + 8 +DETAILS + 10 +11129.35938 + 20 +4033.787465 + 30 +0.0 + 0 +SEQEND + 5 +1608 + 8 +DETAILS + 0 +LINE + 5 +103A + 8 +0 + 62 + 0 + 10 +10990.60938 + 20 +4183.001597 + 30 +0.0 + 11 +11030.489283 + 21 +4183.001597 + 31 +0.0 + 0 +LINE + 5 +103B + 8 +0 + 62 + 0 + 10 +10990.60938 + 20 +4085.57374 + 30 +0.0 + 11 +11030.489283 + 21 +4085.57374 + 31 +0.0 + 0 +LINE + 5 +103C + 8 +0 + 62 + 0 + 10 +10990.609341 + 20 +4183.001618 + 30 +0.0 + 11 +10962.484341 + 21 +4231.715547 + 31 +0.0 + 0 +LINE + 5 +103D + 8 +0 + 62 + 0 + 10 +10990.609341 + 20 +4085.57376 + 30 +0.0 + 11 +10962.484341 + 21 +4134.287689 + 31 +0.0 + 0 +LINE + 5 +103E + 8 +0 + 62 + 0 + 10 +10962.484378 + 20 +4036.859855 + 30 +0.0 + 11 +10990.609378 + 21 +4085.573784 + 31 +0.0 + 0 +LINE + 5 +103F + 8 +0 + 62 + 0 + 10 +10962.484379 + 20 +4134.287713 + 30 +0.0 + 11 +10990.609379 + 21 +4183.001642 + 31 +0.0 + 0 +LINE + 5 +1040 + 8 +0 + 62 + 0 + 10 +10990.60938 + 20 +3988.145882 + 30 +0.0 + 11 +11030.489283 + 21 +3988.145882 + 31 +0.0 + 0 +LINE + 5 +1041 + 8 +0 + 62 + 0 + 10 +10962.484378 + 20 +3939.431997 + 30 +0.0 + 11 +10990.609378 + 21 +3988.145926 + 31 +0.0 + 0 +LINE + 5 +1042 + 8 +0 + 62 + 0 + 10 +10990.609341 + 20 +3988.145902 + 30 +0.0 + 11 +10962.484341 + 21 +4036.859831 + 31 +0.0 + 0 +DIMENSION + 5 +1043 + 8 +BEMASSUNG + 2 +*D14 + 10 +11976.85938 + 20 +1810.360132 + 30 +0.0 + 11 +12026.85938 + 21 +1897.860132 + 31 +0.0 + 12 +4746.85938 + 22 +-5754.639868 + 32 +0.0 + 70 + 128 + 1 +1 + 13 +11941.85938 + 23 +2575.360132 + 33 +0.0 + 14 +11976.85938 + 24 +2565.360132 + 34 +0.0 + 0 +TEXT + 5 +1044 + 8 +DRAHTANKER + 10 +11576.85938 + 20 +1915.360132 + 30 +0.0 + 40 +62.5 + 1 +5 + 0 +TEXT + 5 +1045 + 8 +DRAHTANKER + 10 +12051.85938 + 20 +1915.360132 + 30 +0.0 + 40 +62.5 + 1 +5 + 0 +POLYLINE + 5 +1046 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1609 + 8 +DETAILS + 10 +11179.35938 + 20 +3083.787465 + 30 +0.0 + 0 +VERTEX + 5 +160A + 8 +DETAILS + 10 +11254.35938 + 20 +3083.787465 + 30 +0.0 + 0 +SEQEND + 5 +160B + 8 +DETAILS + 0 +POLYLINE + 5 +104A + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +160C + 8 +DETAILS + 10 +11179.35938 + 20 +4033.787465 + 30 +0.0 + 0 +VERTEX + 5 +160D + 8 +DETAILS + 10 +11254.35938 + 20 +4033.787465 + 30 +0.0 + 0 +SEQEND + 5 +160E + 8 +DETAILS + 0 +DIMENSION + 5 +104E + 8 +DRAHTANKER + 2 +*D7 + 10 +10681.85938 + 20 +1810.360132 + 30 +0.0 + 11 +10534.35938 + 21 +1897.860132 + 31 +0.0 + 12 +4746.85938 + 22 +-5754.639868 + 32 +0.0 + 1 +11 + 13 +10386.85938 + 23 +2575.360132 + 33 +0.0 + 14 +10681.85938 + 24 +2575.360132 + 34 +0.0 + 0 +POLYLINE + 5 +104F + 8 +SCHNITTKANTEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +160F + 8 +SCHNITTKANTEN + 10 +10226.85938 + 20 +2555.360132 + 30 +0.0 + 0 +VERTEX + 5 +1610 + 8 +SCHNITTKANTEN + 10 +12126.85938 + 20 +2555.360132 + 30 +0.0 + 0 +SEQEND + 5 +1611 + 8 +SCHNITTKANTEN + 0 +POLYLINE + 5 +1053 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +1612 + 8 +HOLZ + 10 +11961.85938 + 20 +4212.860132 + 30 +0.0 + 0 +VERTEX + 5 +1613 + 8 +HOLZ + 10 +12161.85938 + 20 +4212.860132 + 30 +0.0 + 0 +VERTEX + 5 +1614 + 8 +HOLZ + 10 +12161.85938 + 20 +3762.860132 + 30 +0.0 + 0 +VERTEX + 5 +1615 + 8 +HOLZ + 10 +11961.85938 + 20 +3762.860132 + 30 +0.0 + 0 +SEQEND + 5 +1616 + 8 +HOLZ + 0 +LINE + 5 +1059 + 8 +0 + 62 + 0 + 10 +11966.832937 + 20 +3340.729186 + 30 +0.0 + 11 +11966.832937 + 21 +3340.729186 + 31 +0.0 + 0 +LINE + 5 +105A + 8 +0 + 62 + 0 + 10 +11965.258103 + 20 +3388.89978 + 30 +0.0 + 11 +11965.258103 + 21 +3388.89978 + 31 +0.0 + 0 +LINE + 5 +105B + 8 +0 + 62 + 0 + 10 +11963.683269 + 20 +3437.070374 + 30 +0.0 + 11 +11963.683269 + 21 +3437.070374 + 31 +0.0 + 0 +LINE + 5 +105C + 8 +0 + 62 + 0 + 10 +11962.108435 + 20 +3485.240968 + 30 +0.0 + 11 +11962.108435 + 21 +3485.240968 + 31 +0.0 + 0 +LINE + 5 +105D + 8 +0 + 62 + 0 + 10 +11960.533601 + 20 +3533.411563 + 30 +0.0 + 11 +11960.533601 + 21 +3533.411563 + 31 +0.0 + 0 +LINE + 5 +105E + 8 +0 + 62 + 0 + 10 +11958.958767 + 20 +3581.582157 + 30 +0.0 + 11 +11958.958767 + 21 +3581.582157 + 31 +0.0 + 0 +LINE + 5 +105F + 8 +0 + 62 + 0 + 10 +11957.383933 + 20 +3629.752751 + 30 +0.0 + 11 +11957.383933 + 21 +3629.752751 + 31 +0.0 + 0 +LINE + 5 +1060 + 8 +0 + 62 + 0 + 10 +11955.809099 + 20 +3677.923345 + 30 +0.0 + 11 +11955.809099 + 21 +3677.923345 + 31 +0.0 + 0 +LINE + 5 +1061 + 8 +0 + 62 + 0 + 10 +11954.234265 + 20 +3726.093939 + 30 +0.0 + 11 +11954.234265 + 21 +3726.093939 + 31 +0.0 + 0 +LINE + 5 +1062 + 8 +0 + 62 + 0 + 10 +11968.407771 + 20 +3292.558591 + 30 +0.0 + 11 +11968.407771 + 21 +3292.558591 + 31 +0.0 + 0 +LINE + 5 +1063 + 8 +0 + 62 + 0 + 10 +11969.982604 + 20 +3244.387997 + 30 +0.0 + 11 +11969.982604 + 21 +3244.387997 + 31 +0.0 + 0 +LINE + 5 +1064 + 8 +0 + 62 + 0 + 10 +11971.557438 + 20 +3196.217403 + 30 +0.0 + 11 +11971.557438 + 21 +3196.217403 + 31 +0.0 + 0 +LINE + 5 +1065 + 8 +0 + 62 + 0 + 10 +11942.984845 + 20 +3124.913874 + 30 +0.0 + 11 +11942.984845 + 21 +3124.913874 + 31 +0.0 + 0 +LINE + 5 +1066 + 8 +0 + 62 + 0 + 10 +11973.132272 + 20 +3148.046809 + 30 +0.0 + 11 +11973.132272 + 21 +3148.046809 + 31 +0.0 + 0 +LINE + 5 +1067 + 8 +0 + 62 + 0 + 10 +11944.559679 + 20 +3076.74328 + 30 +0.0 + 11 +11944.559679 + 21 +3076.74328 + 31 +0.0 + 0 +LINE + 5 +1068 + 8 +0 + 62 + 0 + 10 +11974.707106 + 20 +3099.876215 + 30 +0.0 + 11 +11974.707106 + 21 +3099.876215 + 31 +0.0 + 0 +LINE + 5 +1069 + 8 +0 + 62 + 0 + 10 +11946.134513 + 20 +3028.572686 + 30 +0.0 + 11 +11946.134513 + 21 +3028.572686 + 31 +0.0 + 0 +LINE + 5 +106A + 8 +0 + 62 + 0 + 10 +11976.28194 + 20 +3051.70562 + 30 +0.0 + 11 +11976.28194 + 21 +3051.70562 + 31 +0.0 + 0 +LINE + 5 +106B + 8 +0 + 62 + 0 + 10 +11947.709347 + 20 +2980.402092 + 30 +0.0 + 11 +11947.709347 + 21 +2980.402092 + 31 +0.0 + 0 +LINE + 5 +106C + 8 +0 + 62 + 0 + 10 +11977.856774 + 20 +3003.535026 + 30 +0.0 + 11 +11977.856774 + 21 +3003.535026 + 31 +0.0 + 0 +LINE + 5 +106D + 8 +0 + 62 + 0 + 10 +11949.284181 + 20 +2932.231498 + 30 +0.0 + 11 +11949.284181 + 21 +2932.231498 + 31 +0.0 + 0 +LINE + 5 +106E + 8 +0 + 62 + 0 + 10 +11950.859015 + 20 +2884.060903 + 30 +0.0 + 11 +11950.859015 + 21 +2884.060903 + 31 +0.0 + 0 +LINE + 5 +106F + 8 +0 + 62 + 0 + 10 +11952.433849 + 20 +2835.890309 + 30 +0.0 + 11 +11952.433849 + 21 +2835.890309 + 31 +0.0 + 0 +LINE + 5 +1070 + 8 +0 + 62 + 0 + 10 +11954.008683 + 20 +2787.719715 + 30 +0.0 + 11 +11954.008683 + 21 +2787.719715 + 31 +0.0 + 0 +LINE + 5 +1071 + 8 +0 + 62 + 0 + 10 +11955.583517 + 20 +2739.549121 + 30 +0.0 + 11 +11955.583517 + 21 +2739.549121 + 31 +0.0 + 0 +LINE + 5 +1072 + 8 +0 + 62 + 0 + 10 +11957.158351 + 20 +2691.378526 + 30 +0.0 + 11 +11957.158351 + 21 +2691.378526 + 31 +0.0 + 0 +LINE + 5 +1073 + 8 +0 + 62 + 0 + 10 +11958.733185 + 20 +2643.207932 + 30 +0.0 + 11 +11958.733185 + 21 +2643.207932 + 31 +0.0 + 0 +LINE + 5 +1074 + 8 +0 + 62 + 0 + 10 +11960.308019 + 20 +2595.037338 + 30 +0.0 + 11 +11960.308019 + 21 +2595.037338 + 31 +0.0 + 0 +LINE + 5 +1075 + 8 +0 + 62 + 0 + 10 +11957.044301 + 20 +3350.423192 + 30 +0.0 + 11 +11957.044301 + 21 +3350.423192 + 31 +0.0 + 0 +LINE + 5 +1076 + 8 +0 + 62 + 0 + 10 +11967.951385 + 20 +3416.5879 + 30 +0.0 + 11 +11967.951385 + 21 +3416.5879 + 31 +0.0 + 0 +LINE + 5 +1077 + 8 +0 + 62 + 0 + 10 +11944.901482 + 20 +3478.282087 + 30 +0.0 + 11 +11944.901482 + 21 +3478.282087 + 31 +0.0 + 0 +LINE + 5 +1078 + 8 +0 + 62 + 0 + 10 +11957.914196 + 20 +3479.995243 + 30 +0.0 + 11 +11957.914196 + 21 +3479.995243 + 31 +0.0 + 0 +LINE + 5 +1079 + 8 +0 + 62 + 0 + 10 +11978.238816 + 20 +3482.67103 + 30 +0.0 + 11 +11978.238816 + 21 +3482.67103 + 31 +0.0 + 0 +LINE + 5 +107A + 8 +0 + 62 + 0 + 10 +11955.188914 + 20 +3544.365216 + 30 +0.0 + 11 +11955.188914 + 21 +3544.365216 + 31 +0.0 + 0 +LINE + 5 +107B + 8 +0 + 62 + 0 + 10 +11966.095998 + 20 +3610.529925 + 30 +0.0 + 11 +11966.095998 + 21 +3610.529925 + 31 +0.0 + 0 +LINE + 5 +107C + 8 +0 + 62 + 0 + 10 +11979.108712 + 20 +3612.243081 + 30 +0.0 + 11 +11979.108712 + 21 +3612.243081 + 31 +0.0 + 0 +LINE + 5 +107D + 8 +0 + 62 + 0 + 10 +11943.046095 + 20 +3672.224111 + 30 +0.0 + 11 +11943.046095 + 21 +3672.224111 + 31 +0.0 + 0 +LINE + 5 +107E + 8 +0 + 62 + 0 + 10 +11956.058809 + 20 +3673.937267 + 30 +0.0 + 11 +11956.058809 + 21 +3673.937267 + 31 +0.0 + 0 +LINE + 5 +107F + 8 +0 + 62 + 0 + 10 +11976.383429 + 20 +3676.613054 + 30 +0.0 + 11 +11976.383429 + 21 +3676.613054 + 31 +0.0 + 0 +LINE + 5 +1080 + 8 +0 + 62 + 0 + 10 +11953.333527 + 20 +3738.307241 + 30 +0.0 + 11 +11953.333527 + 21 +3738.307241 + 31 +0.0 + 0 +LINE + 5 +1081 + 8 +0 + 62 + 0 + 10 +11946.756869 + 20 +3284.340062 + 30 +0.0 + 11 +11946.756869 + 21 +3284.340062 + 31 +0.0 + 0 +LINE + 5 +1082 + 8 +0 + 62 + 0 + 10 +11959.769583 + 20 +3286.053219 + 30 +0.0 + 11 +11959.769583 + 21 +3286.053219 + 31 +0.0 + 0 +LINE + 5 +1083 + 8 +0 + 62 + 0 + 10 +11969.806772 + 20 +3222.645876 + 30 +0.0 + 11 +11969.806772 + 21 +3222.645876 + 31 +0.0 + 0 +LINE + 5 +1084 + 8 +0 + 62 + 0 + 10 +11958.899688 + 20 +3156.481168 + 30 +0.0 + 11 +11958.899688 + 21 +3156.481168 + 31 +0.0 + 0 +LINE + 5 +1085 + 8 +0 + 62 + 0 + 10 +11948.612257 + 20 +3090.398038 + 30 +0.0 + 11 +11948.612257 + 21 +3090.398038 + 31 +0.0 + 0 +LINE + 5 +1086 + 8 +0 + 62 + 0 + 10 +11961.62497 + 20 +3092.111194 + 30 +0.0 + 11 +11961.62497 + 21 +3092.111194 + 31 +0.0 + 0 +LINE + 5 +1087 + 8 +0 + 62 + 0 + 10 +11971.662159 + 20 +3028.703852 + 30 +0.0 + 11 +11971.662159 + 21 +3028.703852 + 31 +0.0 + 0 +LINE + 5 +1088 + 8 +0 + 62 + 0 + 10 +11960.755075 + 20 +2962.539143 + 30 +0.0 + 11 +11960.755075 + 21 +2962.539143 + 31 +0.0 + 0 +LINE + 5 +1089 + 8 +0 + 62 + 0 + 10 +11950.467644 + 20 +2896.456014 + 30 +0.0 + 11 +11950.467644 + 21 +2896.456014 + 31 +0.0 + 0 +LINE + 5 +108A + 8 +0 + 62 + 0 + 10 +11963.480357 + 20 +2898.16917 + 30 +0.0 + 11 +11963.480357 + 21 +2898.16917 + 31 +0.0 + 0 +LINE + 5 +108B + 8 +0 + 62 + 0 + 10 +11973.517546 + 20 +2834.761827 + 30 +0.0 + 11 +11973.517546 + 21 +2834.761827 + 31 +0.0 + 0 +LINE + 5 +108C + 8 +0 + 62 + 0 + 10 +11942.285842 + 20 +2765.921332 + 30 +0.0 + 11 +11942.285842 + 21 +2765.921332 + 31 +0.0 + 0 +LINE + 5 +108D + 8 +0 + 62 + 0 + 10 +11962.610462 + 20 +2768.597119 + 30 +0.0 + 11 +11962.610462 + 21 +2768.597119 + 31 +0.0 + 0 +LINE + 5 +108E + 8 +0 + 62 + 0 + 10 +11952.323031 + 20 +2702.513989 + 30 +0.0 + 11 +11952.323031 + 21 +2702.513989 + 31 +0.0 + 0 +LINE + 5 +108F + 8 +0 + 62 + 0 + 10 +11965.335744 + 20 +2704.227146 + 30 +0.0 + 11 +11965.335744 + 21 +2704.227146 + 31 +0.0 + 0 +LINE + 5 +1090 + 8 +0 + 62 + 0 + 10 +11975.372933 + 20 +2640.819803 + 30 +0.0 + 11 +11975.372933 + 21 +2640.819803 + 31 +0.0 + 0 +LINE + 5 +1091 + 8 +0 + 62 + 0 + 10 +11944.141229 + 20 +2571.979308 + 30 +0.0 + 11 +11944.141229 + 21 +2571.979308 + 31 +0.0 + 0 +LINE + 5 +1092 + 8 +0 + 62 + 0 + 10 +11964.465849 + 20 +2574.655095 + 30 +0.0 + 11 +11964.465849 + 21 +2574.655095 + 31 +0.0 + 0 +LINE + 5 +1093 + 8 +0 + 62 + 0 + 10 +11967.080459 + 20 +3403.866681 + 30 +0.0 + 11 +11967.080459 + 21 +3403.866681 + 31 +0.0 + 0 +LINE + 5 +1094 + 8 +0 + 62 + 0 + 10 +11977.622852 + 20 +3397.150436 + 30 +0.0 + 11 +11977.622852 + 21 +3397.150436 + 31 +0.0 + 0 +LINE + 5 +1095 + 8 +0 + 62 + 0 + 10 +11946.88975 + 20 +3466.469237 + 30 +0.0 + 11 +11946.88975 + 21 +3466.469237 + 31 +0.0 + 0 +LINE + 5 +1096 + 8 +0 + 62 + 0 + 10 +11957.432143 + 20 +3459.752991 + 30 +0.0 + 11 +11957.432143 + 21 +3459.752991 + 31 +0.0 + 0 +LINE + 5 +1097 + 8 +0 + 62 + 0 + 10 +11975.194049 + 20 +3498.177065 + 30 +0.0 + 11 +11975.194049 + 21 +3498.177065 + 31 +0.0 + 0 +LINE + 5 +1098 + 8 +0 + 62 + 0 + 10 +11955.00334 + 20 +3560.779621 + 30 +0.0 + 11 +11955.00334 + 21 +3560.779621 + 31 +0.0 + 0 +LINE + 5 +1099 + 8 +0 + 62 + 0 + 10 +11964.171169 + 20 +3654.41838 + 30 +0.0 + 11 +11964.171169 + 21 +3654.41838 + 31 +0.0 + 0 +LINE + 5 +109A + 8 +0 + 62 + 0 + 10 +11974.713562 + 20 +3647.702135 + 30 +0.0 + 11 +11974.713562 + 21 +3647.702135 + 31 +0.0 + 0 +LINE + 5 +109B + 8 +0 + 62 + 0 + 10 +11943.98046 + 20 +3717.020936 + 30 +0.0 + 11 +11943.98046 + 21 +3717.020936 + 31 +0.0 + 0 +LINE + 5 +109C + 8 +0 + 62 + 0 + 10 +11954.522853 + 20 +3710.304691 + 30 +0.0 + 11 +11954.522853 + 21 +3710.304691 + 31 +0.0 + 0 +LINE + 5 +109D + 8 +0 + 62 + 0 + 10 +11972.284759 + 20 +3748.728765 + 30 +0.0 + 11 +11972.284759 + 21 +3748.728765 + 31 +0.0 + 0 +LINE + 5 +109E + 8 +0 + 62 + 0 + 10 +11957.912629 + 20 +3310.227921 + 30 +0.0 + 11 +11957.912629 + 21 +3310.227921 + 31 +0.0 + 0 +LINE + 5 +109F + 8 +0 + 62 + 0 + 10 +11978.103338 + 20 +3247.625365 + 30 +0.0 + 11 +11978.103338 + 21 +3247.625365 + 31 +0.0 + 0 +LINE + 5 +10A0 + 8 +0 + 62 + 0 + 10 +11949.799039 + 20 +3215.917537 + 30 +0.0 + 11 +11949.799039 + 21 +3215.917537 + 31 +0.0 + 0 +LINE + 5 +10A1 + 8 +0 + 62 + 0 + 10 +11960.341432 + 20 +3209.201292 + 30 +0.0 + 11 +11960.341432 + 21 +3209.201292 + 31 +0.0 + 0 +LINE + 5 +10A2 + 8 +0 + 62 + 0 + 10 +11969.989748 + 20 +3153.314981 + 30 +0.0 + 11 +11969.989748 + 21 +3153.314981 + 31 +0.0 + 0 +LINE + 5 +10A3 + 8 +0 + 62 + 0 + 10 +11960.821919 + 20 +3059.676222 + 30 +0.0 + 11 +11960.821919 + 21 +3059.676222 + 31 +0.0 + 0 +LINE + 5 +10A4 + 8 +0 + 62 + 0 + 10 +11943.060013 + 20 +3021.252148 + 30 +0.0 + 11 +11943.060013 + 21 +3021.252148 + 31 +0.0 + 0 +LINE + 5 +10A5 + 8 +0 + 62 + 0 + 10 +11952.708329 + 20 +2965.365837 + 30 +0.0 + 11 +11952.708329 + 21 +2965.365837 + 31 +0.0 + 0 +LINE + 5 +10A6 + 8 +0 + 62 + 0 + 10 +11963.250722 + 20 +2958.649592 + 30 +0.0 + 11 +11963.250722 + 21 +2958.649592 + 31 +0.0 + 0 +LINE + 5 +10A7 + 8 +0 + 62 + 0 + 10 +11972.899038 + 20 +2902.763282 + 30 +0.0 + 11 +11972.899038 + 21 +2902.763282 + 31 +0.0 + 0 +LINE + 5 +10A8 + 8 +0 + 62 + 0 + 10 +11943.5405 + 20 +2871.727078 + 30 +0.0 + 11 +11943.5405 + 21 +2871.727078 + 31 +0.0 + 0 +LINE + 5 +10A9 + 8 +0 + 62 + 0 + 10 +11963.731209 + 20 +2809.124522 + 30 +0.0 + 11 +11963.731209 + 21 +2809.124522 + 31 +0.0 + 0 +LINE + 5 +10AA + 8 +0 + 62 + 0 + 10 +11945.969303 + 20 +2770.700449 + 30 +0.0 + 11 +11945.969303 + 21 +2770.700449 + 31 +0.0 + 0 +LINE + 5 +10AB + 8 +0 + 62 + 0 + 10 +11955.617618 + 20 +2714.814138 + 30 +0.0 + 11 +11955.617618 + 21 +2714.814138 + 31 +0.0 + 0 +LINE + 5 +10AC + 8 +0 + 62 + 0 + 10 +11966.160012 + 20 +2708.097893 + 30 +0.0 + 11 +11966.160012 + 21 +2708.097893 + 31 +0.0 + 0 +LINE + 5 +10AD + 8 +0 + 62 + 0 + 10 +11975.808328 + 20 +2652.211582 + 30 +0.0 + 11 +11975.808328 + 21 +2652.211582 + 31 +0.0 + 0 +LINE + 5 +10AE + 8 +0 + 62 + 0 + 10 +11946.449789 + 20 +2621.175378 + 30 +0.0 + 11 +11946.449789 + 21 +2621.175378 + 31 +0.0 + 0 +LINE + 5 +10AF + 8 +0 + 62 + 0 + 10 +11966.640498 + 20 +2558.572822 + 30 +0.0 + 11 +11966.640498 + 21 +2558.572822 + 31 +0.0 + 0 +LINE + 5 +10B0 + 8 +0 + 62 + 0 + 10 +11953.757045 + 20 +3322.902296 + 30 +0.0 + 11 +11953.757045 + 21 +3322.902296 + 31 +0.0 + 0 +LINE + 5 +10B1 + 8 +0 + 62 + 0 + 10 +11978.640155 + 20 +3300.101127 + 30 +0.0 + 11 +11978.640155 + 21 +3300.101127 + 31 +0.0 + 0 +LINE + 5 +10B2 + 8 +0 + 62 + 0 + 10 +11951.311771 + 20 +3415.950055 + 30 +0.0 + 11 +11951.311771 + 21 +3415.950055 + 31 +0.0 + 0 +LINE + 5 +10B3 + 8 +0 + 62 + 0 + 10 +11955.919754 + 20 +3411.727616 + 30 +0.0 + 11 +11955.919754 + 21 +3411.727616 + 31 +0.0 + 0 +LINE + 5 +10B4 + 8 +0 + 62 + 0 + 10 +11977.669435 + 20 +3391.797705 + 30 +0.0 + 11 +11977.669435 + 21 +3391.797705 + 31 +0.0 + 0 +LINE + 5 +10B5 + 8 +0 + 62 + 0 + 10 +11950.341051 + 20 +3507.646633 + 30 +0.0 + 11 +11950.341051 + 21 +3507.646633 + 31 +0.0 + 0 +LINE + 5 +10B6 + 8 +0 + 62 + 0 + 10 +11975.224161 + 20 +3484.845463 + 30 +0.0 + 11 +11975.224161 + 21 +3484.845463 + 31 +0.0 + 0 +LINE + 5 +10B7 + 8 +0 + 62 + 0 + 10 +11947.895776 + 20 +3600.694391 + 30 +0.0 + 11 +11947.895776 + 21 +3600.694391 + 31 +0.0 + 0 +LINE + 5 +10B8 + 8 +0 + 62 + 0 + 10 +11952.503759 + 20 +3596.471953 + 30 +0.0 + 11 +11952.503759 + 21 +3596.471953 + 31 +0.0 + 0 +LINE + 5 +10B9 + 8 +0 + 62 + 0 + 10 +11974.253441 + 20 +3576.542041 + 30 +0.0 + 11 +11974.253441 + 21 +3576.542041 + 31 +0.0 + 0 +LINE + 5 +10BA + 8 +0 + 62 + 0 + 10 +11946.925056 + 20 +3692.390969 + 30 +0.0 + 11 +11946.925056 + 21 +3692.390969 + 31 +0.0 + 0 +LINE + 5 +10BB + 8 +0 + 62 + 0 + 10 +11971.808166 + 20 +3669.5898 + 30 +0.0 + 11 +11971.808166 + 21 +3669.5898 + 31 +0.0 + 0 +LINE + 5 +10BC + 8 +0 + 62 + 0 + 10 +11976.41615 + 20 +3665.367361 + 30 +0.0 + 11 +11976.41615 + 21 +3665.367361 + 31 +0.0 + 0 +LINE + 5 +10BD + 8 +0 + 62 + 0 + 10 +11954.727765 + 20 +3231.205718 + 30 +0.0 + 11 +11954.727765 + 21 +3231.205718 + 31 +0.0 + 0 +LINE + 5 +10BE + 8 +0 + 62 + 0 + 10 +11959.335748 + 20 +3226.983279 + 30 +0.0 + 11 +11959.335748 + 21 +3226.983279 + 31 +0.0 + 0 +LINE + 5 +10BF + 8 +0 + 62 + 0 + 10 +11957.17304 + 20 +3138.15796 + 30 +0.0 + 11 +11957.17304 + 21 +3138.15796 + 31 +0.0 + 0 +LINE + 5 +10C0 + 8 +0 + 62 + 0 + 10 +11958.14376 + 20 +3046.461382 + 30 +0.0 + 11 +11958.14376 + 21 +3046.461382 + 31 +0.0 + 0 +LINE + 5 +10C1 + 8 +0 + 62 + 0 + 10 +11962.751743 + 20 +3042.238943 + 30 +0.0 + 11 +11962.751743 + 21 +3042.238943 + 31 +0.0 + 0 +LINE + 5 +10C2 + 8 +0 + 62 + 0 + 10 +11960.589034 + 20 +2953.413623 + 30 +0.0 + 11 +11960.589034 + 21 +2953.413623 + 31 +0.0 + 0 +LINE + 5 +10C3 + 8 +0 + 62 + 0 + 10 +11961.559754 + 20 +2861.717045 + 30 +0.0 + 11 +11961.559754 + 21 +2861.717045 + 31 +0.0 + 0 +LINE + 5 +10C4 + 8 +0 + 62 + 0 + 10 +11966.167737 + 20 +2857.494606 + 30 +0.0 + 11 +11966.167737 + 21 +2857.494606 + 31 +0.0 + 0 +LINE + 5 +10C5 + 8 +0 + 62 + 0 + 10 +11942.255347 + 20 +2788.599198 + 30 +0.0 + 11 +11942.255347 + 21 +2788.599198 + 31 +0.0 + 0 +LINE + 5 +10C6 + 8 +0 + 62 + 0 + 10 +11964.005029 + 20 +2768.669287 + 30 +0.0 + 11 +11964.005029 + 21 +2768.669287 + 31 +0.0 + 0 +LINE + 5 +10C7 + 8 +0 + 62 + 0 + 10 +11964.975749 + 20 +2676.972709 + 30 +0.0 + 11 +11964.975749 + 21 +2676.972709 + 31 +0.0 + 0 +LINE + 5 +10C8 + 8 +0 + 62 + 0 + 10 +11969.583732 + 20 +2672.75027 + 30 +0.0 + 11 +11969.583732 + 21 +2672.75027 + 31 +0.0 + 0 +LINE + 5 +10C9 + 8 +0 + 62 + 0 + 10 +11945.671342 + 20 +2603.854861 + 30 +0.0 + 11 +11945.671342 + 21 +2603.854861 + 31 +0.0 + 0 +LINE + 5 +10CA + 8 +0 + 62 + 0 + 10 +11967.421023 + 20 +2583.92495 + 30 +0.0 + 11 +11967.421023 + 21 +2583.92495 + 31 +0.0 + 0 +POLYLINE + 5 +10CB + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1617 + 8 +MAUERWERK + 10 +11979.35938 + 20 +3762.860132 + 30 +0.0 + 0 +VERTEX + 5 +1618 + 8 +MAUERWERK + 10 +11979.35938 + 20 +2555.360132 + 30 +0.0 + 0 +SEQEND + 5 +1619 + 8 +MAUERWERK + 0 +POLYLINE + 5 +10CF + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +161A + 8 +HOLZ + 10 +12000.0 + 20 +4245.0 + 30 +0.0 + 0 +VERTEX + 5 +161B + 8 +HOLZ + 10 +12125.0 + 20 +4245.0 + 30 +0.0 + 0 +VERTEX + 5 +161C + 8 +HOLZ + 10 +12125.0 + 20 +4320.0 + 30 +0.0 + 0 +VERTEX + 5 +161D + 8 +HOLZ + 10 +12000.0 + 20 +4320.0 + 30 +0.0 + 0 +SEQEND + 5 +161E + 8 +HOLZ + 0 +POLYLINE + 5 +10D5 + 8 +SCHRAFFUR + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +10D6 + 8 +SCHRAFFUR + 10 +11959.834281 + 20 +4181.180794 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +10D7 + 8 +SCHRAFFUR + 10 +11959.834281 + 20 +4181.180794 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +10D8 + 8 +SCHRAFFUR + 10 +11972.973317 + 20 +4180.978442 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +10D9 + 8 +SCHRAFFUR + 10 +11984.290301 + 20 +4182.232985 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +10DA + 8 +SCHRAFFUR + 10 +11993.906706 + 20 +4184.823014 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +10DB + 8 +SCHRAFFUR + 10 +12001.943999 + 20 +4188.627122 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +10DC + 8 +SCHRAFFUR + 10 +12008.523651 + 20 +4193.523899 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +10DD + 8 +SCHRAFFUR + 10 +12013.767133 + 20 +4199.391937 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +10DE + 8 +SCHRAFFUR + 10 +12017.795915 + 20 +4206.109827 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +10DF + 8 +SCHRAFFUR + 10 +12020.731465 + 20 +4213.55616 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +10E0 + 8 +SCHRAFFUR + 10 +11997.409084 + 20 +4178.590741 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +10E1 + 8 +SCHRAFFUR + 10 +12014.252997 + 20 +4192.835933 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +10E2 + 8 +SCHRAFFUR + 10 +12020.731465 + 20 +4213.55616 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +10E3 + 8 +SCHRAFFUR + 0 +POLYLINE + 5 +10E4 + 8 +SCHRAFFUR + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +10E5 + 8 +SCHRAFFUR + 10 +11963.721362 + 20 +4113.840075 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +10E6 + 8 +SCHRAFFUR + 10 +11963.721362 + 20 +4113.840075 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +10E7 + 8 +SCHRAFFUR + 10 +11991.496953 + 20 +4116.53822 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +10E8 + 8 +SCHRAFFUR + 10 +12013.195231 + 20 +4119.763732 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +10E9 + 8 +SCHRAFFUR + 10 +12029.662693 + 20 +4123.497641 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +10EA + 8 +SCHRAFFUR + 10 +12041.745834 + 20 +4127.720977 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +10EB + 8 +SCHRAFFUR + 10 +12050.291151 + 20 +4132.414769 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +10EC + 8 +SCHRAFFUR + 10 +12056.14514 + 20 +4137.560046 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +10ED + 8 +SCHRAFFUR + 10 +12060.154298 + 20 +4143.137839 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +10EE + 8 +SCHRAFFUR + 10 +12063.16512 + 20 +4149.129177 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +10EF + 8 +SCHRAFFUR + 10 +12065.884918 + 20 +4155.525206 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +10F0 + 8 +SCHRAFFUR + 10 +12068.464264 + 20 +4162.357545 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +10F1 + 8 +SCHRAFFUR + 10 +12070.914546 + 20 +4169.667925 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +10F2 + 8 +SCHRAFFUR + 10 +12073.247151 + 20 +4177.498082 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +10F3 + 8 +SCHRAFFUR + 10 +12075.473466 + 20 +4185.889749 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +10F4 + 8 +SCHRAFFUR + 10 +12077.604879 + 20 +4194.884661 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +10F5 + 8 +SCHRAFFUR + 10 +12079.652777 + 20 +4204.524551 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +10F6 + 8 +SCHRAFFUR + 10 +12081.628546 + 20 +4214.851153 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +10F7 + 8 +SCHRAFFUR + 10 +12046.64513 + 20 +4120.315109 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +10F8 + 8 +SCHRAFFUR + 10 +12064.784737 + 20 +4144.920382 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +10F9 + 8 +SCHRAFFUR + 10 +12076.445875 + 20 +4186.360834 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +10FA + 8 +SCHRAFFUR + 10 +12081.628546 + 20 +4214.851153 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +10FB + 8 +SCHRAFFUR + 0 +POLYLINE + 5 +10FC + 8 +SCHRAFFUR + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +10FD + 8 +SCHRAFFUR + 10 +11961.129974 + 20 +4058.154431 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +10FE + 8 +SCHRAFFUR + 10 +11961.129974 + 20 +4058.154431 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +10FF + 8 +SCHRAFFUR + 10 +11996.480368 + 20 +4058.919551 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1100 + 8 +SCHRAFFUR + 10 +12024.557727 + 20 +4061.118799 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1101 + 8 +SCHRAFFUR + 10 +12046.47047 + 20 +4064.608001 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1102 + 8 +SCHRAFFUR + 10 +12063.327013 + 20 +4069.242988 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1103 + 8 +SCHRAFFUR + 10 +12076.235773 + 20 +4074.879588 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1104 + 8 +SCHRAFFUR + 10 +12086.305165 + 20 +4081.373629 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1105 + 8 +SCHRAFFUR + 10 +12094.643606 + 20 +4088.58094 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1106 + 8 +SCHRAFFUR + 10 +12102.359514 + 20 +4096.35735 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1107 + 8 +SCHRAFFUR + 10 +12110.325956 + 20 +4104.657331 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1108 + 8 +SCHRAFFUR + 10 +12118.474603 + 20 +4113.829929 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1109 + 8 +SCHRAFFUR + 10 +12126.501778 + 20 +4124.322834 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +110A + 8 +SCHRAFFUR + 10 +12134.103803 + 20 +4136.583735 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +110B + 8 +SCHRAFFUR + 10 +12140.977003 + 20 +4151.060323 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +110C + 8 +SCHRAFFUR + 10 +12146.817698 + 20 +4168.200287 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +110D + 8 +SCHRAFFUR + 10 +12151.322213 + 20 +4188.451316 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +110E + 8 +SCHRAFFUR + 10 +12154.186869 + 20 +4212.261101 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +110F + 8 +SCHRAFFUR + 10 +12066.080327 + 20 +4058.154431 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1110 + 8 +SCHRAFFUR + 10 +12097.176766 + 20 +4091.82479 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1111 + 8 +SCHRAFFUR + 10 +12149.004199 + 20 +4143.625388 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1112 + 8 +SCHRAFFUR + 10 +12154.186869 + 20 +4212.261101 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1113 + 8 +SCHRAFFUR + 0 +POLYLINE + 5 +1114 + 8 +SCHRAFFUR + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +1115 + 8 +SCHRAFFUR + 10 +11962.425668 + 20 +4016.713978 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1116 + 8 +SCHRAFFUR + 10 +11962.425668 + 20 +4016.713978 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1117 + 8 +SCHRAFFUR + 10 +11989.394607 + 20 +4018.213237 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1118 + 8 +SCHRAFFUR + 10 +12012.370212 + 20 +4019.845284 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1119 + 8 +SCHRAFFUR + 10 +12031.914283 + 20 +4021.682205 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +111A + 8 +SCHRAFFUR + 10 +12048.588619 + 20 +4023.796088 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +111B + 8 +SCHRAFFUR + 10 +12062.95502 + 20 +4026.259017 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +111C + 8 +SCHRAFFUR + 10 +12075.575286 + 20 +4029.143078 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +111D + 8 +SCHRAFFUR + 10 +12087.011217 + 20 +4032.520358 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +111E + 8 +SCHRAFFUR + 10 +12097.824612 + 20 +4036.462943 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +111F + 8 +SCHRAFFUR + 10 +12108.443149 + 20 +4041.015095 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1120 + 8 +SCHRAFFUR + 10 +12118.75801 + 20 +4046.109788 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1121 + 8 +SCHRAFFUR + 10 +12128.526255 + 20 +4051.652172 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1122 + 8 +SCHRAFFUR + 10 +12137.504944 + 20 +4057.547396 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1123 + 8 +SCHRAFFUR + 10 +12145.451137 + 20 +4063.700612 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1124 + 8 +SCHRAFFUR + 10 +12152.121893 + 20 +4070.016968 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1125 + 8 +SCHRAFFUR + 10 +12157.274274 + 20 +4076.401615 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1126 + 8 +SCHRAFFUR + 10 +12160.665337 + 20 +4082.759703 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1127 + 8 +SCHRAFFUR + 10 +12040.166662 + 20 +4020.599025 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1128 + 8 +SCHRAFFUR + 10 +12098.472459 + 20 +4029.664112 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1129 + 8 +SCHRAFFUR + 10 +12154.186869 + 20 +4065.924524 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +112A + 8 +SCHRAFFUR + 10 +12160.665337 + 20 +4082.759703 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +112B + 8 +SCHRAFFUR + 0 +POLYLINE + 5 +112C + 8 +SCHRAFFUR + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +112D + 8 +SCHRAFFUR + 10 +11962.425668 + 20 +3944.193219 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +112E + 8 +SCHRAFFUR + 10 +11962.425668 + 20 +3944.193219 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +112F + 8 +SCHRAFFUR + 10 +11991.2445 + 20 +3946.267259 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1130 + 8 +SCHRAFFUR + 10 +12020.002607 + 20 +3951.315788 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1131 + 8 +SCHRAFFUR + 10 +12048.15337 + 20 +3959.035285 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1132 + 8 +SCHRAFFUR + 10 +12075.150169 + 20 +3969.122232 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1133 + 8 +SCHRAFFUR + 10 +12100.446385 + 20 +3981.273109 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1134 + 8 +SCHRAFFUR + 10 +12123.495398 + 20 +3995.184396 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1135 + 8 +SCHRAFFUR + 10 +12143.750589 + 20 +4010.552574 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1136 + 8 +SCHRAFFUR + 10 +12160.665337 + 20 +4027.074124 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1137 + 8 +SCHRAFFUR + 10 +12038.870968 + 20 +3945.488213 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1138 + 8 +SCHRAFFUR + 10 +12120.499147 + 20 +3981.748625 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1139 + 8 +SCHRAFFUR + 10 +12160.665337 + 20 +4027.074124 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +113A + 8 +SCHRAFFUR + 0 +POLYLINE + 5 +113B + 8 +SCHRAFFUR + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +113C + 8 +SCHRAFFUR + 10 +11962.425668 + 20 +3876.852501 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +113D + 8 +SCHRAFFUR + 10 +11962.425668 + 20 +3876.852501 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +113E + 8 +SCHRAFFUR + 10 +11994.590017 + 20 +3878.463679 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +113F + 8 +SCHRAFFUR + 10 +12025.630761 + 20 +3883.185925 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1140 + 8 +SCHRAFFUR + 10 +12055.031653 + 20 +3890.852305 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1141 + 8 +SCHRAFFUR + 10 +12082.276445 + 20 +3901.295883 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1142 + 8 +SCHRAFFUR + 10 +12106.848888 + 20 +3914.349726 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1143 + 8 +SCHRAFFUR + 10 +12128.232734 + 20 +3929.846899 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1144 + 8 +SCHRAFFUR + 10 +12145.911735 + 20 +3947.620468 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1145 + 8 +SCHRAFFUR + 10 +12159.369644 + 20 +3967.503498 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1146 + 8 +SCHRAFFUR + 10 +12049.236517 + 20 +3876.852501 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1147 + 8 +SCHRAFFUR + 10 +12129.568898 + 20 +3911.817854 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1148 + 8 +SCHRAFFUR + 10 +12159.369644 + 20 +3967.503498 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1149 + 8 +SCHRAFFUR + 0 +POLYLINE + 5 +114A + 8 +SCHRAFFUR + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +114B + 8 +SCHRAFFUR + 10 +11962.425668 + 20 +3801.741689 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +114C + 8 +SCHRAFFUR + 10 +11962.425668 + 20 +3801.741689 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +114D + 8 +SCHRAFFUR + 10 +12000.817887 + 20 +3808.307806 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +114E + 8 +SCHRAFFUR + 10 +12036.097434 + 20 +3817.119965 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +114F + 8 +SCHRAFFUR + 10 +12067.94545 + 20 +3827.874647 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1150 + 8 +SCHRAFFUR + 10 +12096.043073 + 20 +3840.268332 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1151 + 8 +SCHRAFFUR + 10 +12120.071442 + 20 +3853.997501 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1152 + 8 +SCHRAFFUR + 10 +12139.711696 + 20 +3868.758634 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1153 + 8 +SCHRAFFUR + 10 +12154.644976 + 20 +3884.248211 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1154 + 8 +SCHRAFFUR + 10 +12164.552418 + 20 +3900.162714 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1155 + 8 +SCHRAFFUR + 10 +12068.671714 + 20 +3815.986816 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1156 + 8 +SCHRAFFUR + 10 +12145.117118 + 20 +3857.427268 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1157 + 8 +SCHRAFFUR + 10 +12164.552418 + 20 +3900.162714 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1158 + 8 +SCHRAFFUR + 0 +POLYLINE + 5 +1159 + 8 +SCHRAFFUR + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +115A + 8 +SCHRAFFUR + 10 +12044.053743 + 20 +3765.481277 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +115B + 8 +SCHRAFFUR + 10 +12044.053743 + 20 +3765.481277 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +115C + 8 +SCHRAFFUR + 10 +12069.792828 + 20 +3774.116385 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +115D + 8 +SCHRAFFUR + 10 +12089.625412 + 20 +3781.142845 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +115E + 8 +SCHRAFFUR + 10 +12104.933219 + 20 +3787.380157 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +115F + 8 +SCHRAFFUR + 10 +12117.097977 + 20 +3793.647823 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1160 + 8 +SCHRAFFUR + 10 +12127.501411 + 20 +3800.765344 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1161 + 8 +SCHRAFFUR + 10 +12137.525248 + 20 +3809.552221 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1162 + 8 +SCHRAFFUR + 10 +12148.551212 + 20 +3820.827955 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1163 + 8 +SCHRAFFUR + 10 +12161.961031 + 20 +3835.412048 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1164 + 8 +SCHRAFFUR + 10 +12121.79484 + 20 +3791.381543 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1165 + 8 +SCHRAFFUR + 10 +12161.961031 + 20 +3835.412048 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1166 + 8 +SCHRAFFUR + 0 +POLYLINE + 5 +1167 + 8 +SCHRAFFUR + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +1168 + 8 +SCHRAFFUR + 10 +12002.591859 + 20 +4296.436999 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1169 + 8 +SCHRAFFUR + 10 +12002.591859 + 20 +4296.436999 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +116A + 8 +SCHRAFFUR + 10 +12011.168168 + 20 +4297.327329 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +116B + 8 +SCHRAFFUR + 10 +12017.755401 + 20 +4298.217657 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +116C + 8 +SCHRAFFUR + 10 +12022.793888 + 20 +4299.350798 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +116D + 8 +SCHRAFFUR + 10 +12026.723957 + 20 +4300.969567 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +116E + 8 +SCHRAFFUR + 10 +12029.98594 + 20 +4303.316779 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +116F + 8 +SCHRAFFUR + 10 +12033.020165 + 20 +4306.635249 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1170 + 8 +SCHRAFFUR + 10 +12036.266963 + 20 +4311.167793 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1171 + 8 +SCHRAFFUR + 10 +12040.166662 + 20 +4317.157225 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1172 + 8 +SCHRAFFUR + 10 +12028.505523 + 20 +4299.027052 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1173 + 8 +SCHRAFFUR + 10 +12040.166662 + 20 +4317.157225 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1174 + 8 +SCHRAFFUR + 0 +POLYLINE + 5 +1175 + 8 +SCHRAFFUR + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +1176 + 8 +SCHRAFFUR + 10 +12002.591859 + 20 +4273.126785 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1177 + 8 +SCHRAFFUR + 10 +12002.591859 + 20 +4273.126785 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1178 + 8 +SCHRAFFUR + 10 +12015.644852 + 20 +4274.335796 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1179 + 8 +SCHRAFFUR + 10 +12027.574253 + 20 +4276.971346 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +117A + 8 +SCHRAFFUR + 10 +12038.349692 + 20 +4281.003085 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +117B + 8 +SCHRAFFUR + 10 +12047.940798 + 20 +4286.400659 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +117C + 8 +SCHRAFFUR + 10 +12056.3172 + 20 +4293.133717 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +117D + 8 +SCHRAFFUR + 10 +12063.44853 + 20 +4301.171907 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +117E + 8 +SCHRAFFUR + 10 +12069.304416 + 20 +4310.484876 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +117F + 8 +SCHRAFFUR + 10 +12073.854488 + 20 +4321.042272 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1180 + 8 +SCHRAFFUR + 10 +12038.870968 + 20 +4274.421779 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1181 + 8 +SCHRAFFUR + 10 +12063.489043 + 20 +4291.256959 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1182 + 8 +SCHRAFFUR + 10 +12073.854488 + 20 +4321.042272 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1183 + 8 +SCHRAFFUR + 0 +POLYLINE + 5 +1184 + 8 +SCHRAFFUR + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +1185 + 8 +SCHRAFFUR + 10 +12036.279685 + 20 +4248.521513 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1186 + 8 +SCHRAFFUR + 10 +12036.279685 + 20 +4248.521513 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1187 + 8 +SCHRAFFUR + 10 +12050.977598 + 20 +4253.387936 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1188 + 8 +SCHRAFFUR + 10 +12063.974923 + 20 +4259.286322 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1189 + 8 +SCHRAFFUR + 10 +12075.271663 + 20 +4266.277373 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +118A + 8 +SCHRAFFUR + 10 +12084.867819 + 20 +4274.421795 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +118B + 8 +SCHRAFFUR + 10 +12092.763391 + 20 +4283.780293 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +118C + 8 +SCHRAFFUR + 10 +12098.958382 + 20 +4294.413569 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +118D + 8 +SCHRAFFUR + 10 +12103.452791 + 20 +4306.38233 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +118E + 8 +SCHRAFFUR + 10 +12106.246621 + 20 +4319.747278 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +118F + 8 +SCHRAFFUR + 10 +12077.741569 + 20 +4260.176652 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1190 + 8 +SCHRAFFUR + 10 +12101.063847 + 20 +4282.191872 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1191 + 8 +SCHRAFFUR + 10 +12106.246621 + 20 +4319.747278 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1192 + 8 +SCHRAFFUR + 0 +POLYLINE + 5 +1193 + 8 +SCHRAFFUR + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +1194 + 8 +SCHRAFFUR + 10 +12099.768153 + 20 +4248.521513 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1195 + 8 +SCHRAFFUR + 10 +12099.768153 + 20 +4248.521513 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1196 + 8 +SCHRAFFUR + 10 +12104.492845 + 20 +4253.709163 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1197 + 8 +SCHRAFFUR + 10 +12108.169855 + 20 +4257.971078 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1198 + 8 +SCHRAFFUR + 10 +12111.087674 + 20 +4261.838418 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1199 + 8 +SCHRAFFUR + 10 +12113.534794 + 20 +4265.84234 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +119A + 8 +SCHRAFFUR + 10 +12115.799707 + 20 +4270.514002 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +119B + 8 +SCHRAFFUR + 10 +12118.170905 + 20 +4276.384562 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +119C + 8 +SCHRAFFUR + 10 +12120.93688 + 20 +4283.985179 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +119D + 8 +SCHRAFFUR + 10 +12124.386124 + 20 +4293.847012 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +119E + 8 +SCHRAFFUR + 10 +12114.020679 + 20 +4264.061699 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +119F + 8 +SCHRAFFUR + 10 +12124.386124 + 20 +4293.847012 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +11A0 + 8 +SCHRAFFUR + 0 +POLYLINE + 5 +11A1 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +161F + 8 +DRAHTANKER + 10 +10640.0 + 20 +4405.0 + 30 +0.0 + 0 +VERTEX + 5 +1620 + 8 +DRAHTANKER + 10 +10745.0 + 20 +4405.0 + 30 +0.0 + 0 +VERTEX + 5 +1621 + 8 +DRAHTANKER + 10 +10745.0 + 20 +4420.0 + 30 +0.0 + 0 +VERTEX + 5 +1622 + 8 +DRAHTANKER + 10 +10670.0 + 20 +4420.0 + 30 +0.0 + 0 +SEQEND + 5 +1623 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +11A7 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +1624 + 8 +DRAHTANKER + 10 +10675.0 + 20 +4405.0 + 30 +0.0 + 0 +VERTEX + 5 +1625 + 8 +DRAHTANKER + 10 +10620.0 + 20 +4405.0 + 30 +0.0 + 0 +VERTEX + 5 +1626 + 8 +DRAHTANKER + 10 +10620.0 + 20 +4250.0 + 30 +0.0 + 0 +VERTEX + 5 +1627 + 8 +DRAHTANKER + 10 +10390.0 + 20 +4250.0 + 30 +0.0 + 0 +VERTEX + 5 +1628 + 8 +DRAHTANKER + 10 +10390.0 + 20 +4505.0 + 30 +0.0 + 0 +VERTEX + 5 +1629 + 8 +DRAHTANKER + 10 +10325.0 + 20 +4505.0 + 30 +0.0 + 0 +VERTEX + 5 +162A + 8 +DRAHTANKER + 10 +10325.0 + 20 +4525.0 + 30 +0.0 + 0 +VERTEX + 5 +162B + 8 +DRAHTANKER + 10 +10325.0 + 20 +4430.0 + 30 +0.0 + 0 +SEQEND + 5 +162C + 8 +DRAHTANKER + 0 +POLYLINE + 5 +11B1 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +162D + 8 +HOLZ + 10 +10380.0 + 20 +4495.0 + 30 +0.0 + 0 +VERTEX + 5 +162E + 8 +HOLZ + 10 +10342.5 + 20 +4495.0 + 30 +0.0 + 0 +VERTEX + 5 +162F + 8 +HOLZ + 10 +10342.5 + 20 +4195.0 + 30 +0.0 + 0 +VERTEX + 5 +1630 + 8 +HOLZ + 10 +10380.0 + 20 +4195.0 + 30 +0.0 + 0 +SEQEND + 5 +1631 + 8 +HOLZ + 0 +POLYLINE + 5 +11B7 + 8 +DACHZIEGEL + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1632 + 8 +DACHZIEGEL + 10 +11520.0 + 20 +4440.0 + 30 +0.0 + 0 +VERTEX + 5 +1633 + 8 +DACHZIEGEL + 10 +11500.0 + 20 +4420.0 + 30 +0.0 + 0 +VERTEX + 5 +1634 + 8 +DACHZIEGEL + 10 +11095.0 + 20 +4420.0 + 30 +0.0 + 0 +VERTEX + 5 +1635 + 8 +DACHZIEGEL + 10 +11070.0 + 20 +4435.0 + 30 +0.0 + 0 +VERTEX + 5 +1636 + 8 +DACHZIEGEL + 10 +11045.0 + 20 +4435.0 + 30 +0.0 + 0 +VERTEX + 5 +1637 + 8 +DACHZIEGEL + 10 +11040.0 + 20 +4420.0 + 30 +0.0 + 0 +VERTEX + 5 +1638 + 8 +DACHZIEGEL + 10 +11040.0 + 20 +4475.0 + 30 +0.0 + 0 +VERTEX + 5 +1639 + 8 +DACHZIEGEL + 10 +11060.0 + 20 +4460.0 + 30 +0.0 + 0 +VERTEX + 5 +163A + 8 +DACHZIEGEL + 10 +11080.0 + 20 +4475.0 + 30 +0.0 + 0 +VERTEX + 5 +163B + 8 +DACHZIEGEL + 10 +11105.0 + 20 +4445.0 + 30 +0.0 + 0 +VERTEX + 5 +163C + 8 +DACHZIEGEL + 10 +11455.0 + 20 +4445.0 + 30 +0.0 + 0 +VERTEX + 5 +163D + 8 +DACHZIEGEL + 10 +11515.0 + 20 +4535.0 + 30 +0.0 + 0 +VERTEX + 5 +163E + 8 +DACHZIEGEL + 10 +11560.0 + 20 +4535.0 + 30 +0.0 + 0 +VERTEX + 5 +163F + 8 +DACHZIEGEL + 10 +11580.0 + 20 +4495.0 + 30 +0.0 + 0 +VERTEX + 5 +1640 + 8 +DACHZIEGEL + 10 +11560.0 + 20 +4475.0 + 30 +0.0 + 0 +VERTEX + 5 +1641 + 8 +DACHZIEGEL + 10 +11535.0 + 20 +4500.0 + 30 +0.0 + 0 +VERTEX + 5 +1642 + 8 +DACHZIEGEL + 10 +11525.0 + 20 +4475.0 + 30 +0.0 + 0 +SEQEND + 5 +1643 + 8 +DACHZIEGEL + 0 +POLYLINE + 5 +11CA + 8 +DACHZIEGEL + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1644 + 8 +DACHZIEGEL + 10 +10790.0 + 20 +4450.0 + 30 +0.0 + 0 +VERTEX + 5 +1645 + 8 +DACHZIEGEL + 10 +10635.0 + 20 +4450.0 + 30 +0.0 + 0 +VERTEX + 5 +1646 + 8 +DACHZIEGEL + 10 +10575.0 + 20 +4540.0 + 30 +0.0 + 0 +VERTEX + 5 +1647 + 8 +DACHZIEGEL + 10 +10530.0 + 20 +4540.0 + 30 +0.0 + 0 +VERTEX + 5 +1648 + 8 +DACHZIEGEL + 10 +10510.0 + 20 +4500.0 + 30 +0.0 + 0 +VERTEX + 5 +1649 + 8 +DACHZIEGEL + 10 +10530.0 + 20 +4480.0 + 30 +0.0 + 0 +VERTEX + 5 +164A + 8 +DACHZIEGEL + 10 +10555.0 + 20 +4505.0 + 30 +0.0 + 0 +VERTEX + 5 +164B + 8 +DACHZIEGEL + 10 +10565.0 + 20 +4480.0 + 30 +0.0 + 0 +VERTEX + 5 +164C + 8 +DACHZIEGEL + 10 +10570.0 + 20 +4445.0 + 30 +0.0 + 0 +VERTEX + 5 +164D + 8 +DACHZIEGEL + 10 +10590.0 + 20 +4425.0 + 30 +0.0 + 0 +VERTEX + 5 +164E + 8 +DACHZIEGEL + 10 +10790.0 + 20 +4425.0 + 30 +0.0 + 0 +SEQEND + 5 +164F + 8 +DACHZIEGEL + 0 +POLYLINE + 5 +11D7 + 8 +DACHZIEGEL + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1650 + 8 +DACHZIEGEL + 10 +10780.0 + 20 +4450.0 + 30 +0.0 + 0 +VERTEX + 5 +1651 + 8 +DACHZIEGEL + 10 +10955.0 + 20 +4450.0 + 30 +0.0 + 0 +VERTEX + 5 +1652 + 8 +DACHZIEGEL + 10 +11015.0 + 20 +4540.0 + 30 +0.0 + 0 +VERTEX + 5 +1653 + 8 +DACHZIEGEL + 10 +11060.0 + 20 +4540.0 + 30 +0.0 + 0 +VERTEX + 5 +1654 + 8 +DACHZIEGEL + 10 +11080.0 + 20 +4500.0 + 30 +0.0 + 0 +VERTEX + 5 +1655 + 8 +DACHZIEGEL + 10 +11060.0 + 20 +4480.0 + 30 +0.0 + 0 +VERTEX + 5 +1656 + 8 +DACHZIEGEL + 10 +11035.0 + 20 +4505.0 + 30 +0.0 + 0 +VERTEX + 5 +1657 + 8 +DACHZIEGEL + 10 +11025.0 + 20 +4480.0 + 30 +0.0 + 0 +VERTEX + 5 +1658 + 8 +DACHZIEGEL + 10 +11020.0 + 20 +4445.0 + 30 +0.0 + 0 +VERTEX + 5 +1659 + 8 +DACHZIEGEL + 10 +11000.0 + 20 +4425.0 + 30 +0.0 + 0 +VERTEX + 5 +165A + 8 +DACHZIEGEL + 10 +10780.0 + 20 +4425.0 + 30 +0.0 + 0 +SEQEND + 5 +165B + 8 +DACHZIEGEL + 0 +POLYLINE + 5 +11E4 + 8 +DACHZIEGEL + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +165C + 8 +DACHZIEGEL + 10 +12020.0 + 20 +4440.0 + 30 +0.0 + 0 +VERTEX + 5 +165D + 8 +DACHZIEGEL + 10 +12000.0 + 20 +4420.0 + 30 +0.0 + 0 +VERTEX + 5 +165E + 8 +DACHZIEGEL + 10 +11595.0 + 20 +4420.0 + 30 +0.0 + 0 +VERTEX + 5 +165F + 8 +DACHZIEGEL + 10 +11570.0 + 20 +4435.0 + 30 +0.0 + 0 +VERTEX + 5 +1660 + 8 +DACHZIEGEL + 10 +11545.0 + 20 +4435.0 + 30 +0.0 + 0 +VERTEX + 5 +1661 + 8 +DACHZIEGEL + 10 +11540.0 + 20 +4420.0 + 30 +0.0 + 0 +VERTEX + 5 +1662 + 8 +DACHZIEGEL + 10 +11540.0 + 20 +4475.0 + 30 +0.0 + 0 +VERTEX + 5 +1663 + 8 +DACHZIEGEL + 10 +11560.0 + 20 +4460.0 + 30 +0.0 + 0 +VERTEX + 5 +1664 + 8 +DACHZIEGEL + 10 +11580.0 + 20 +4475.0 + 30 +0.0 + 0 +VERTEX + 5 +1665 + 8 +DACHZIEGEL + 10 +11605.0 + 20 +4445.0 + 30 +0.0 + 0 +VERTEX + 5 +1666 + 8 +DACHZIEGEL + 10 +11955.0 + 20 +4445.0 + 30 +0.0 + 0 +VERTEX + 5 +1667 + 8 +DACHZIEGEL + 10 +12015.0 + 20 +4535.0 + 30 +0.0 + 0 +VERTEX + 5 +1668 + 8 +DACHZIEGEL + 10 +12060.0 + 20 +4535.0 + 30 +0.0 + 0 +VERTEX + 5 +1669 + 8 +DACHZIEGEL + 10 +12080.0 + 20 +4495.0 + 30 +0.0 + 0 +VERTEX + 5 +166A + 8 +DACHZIEGEL + 10 +12060.0 + 20 +4475.0 + 30 +0.0 + 0 +VERTEX + 5 +166B + 8 +DACHZIEGEL + 10 +12035.0 + 20 +4500.0 + 30 +0.0 + 0 +VERTEX + 5 +166C + 8 +DACHZIEGEL + 10 +12025.0 + 20 +4475.0 + 30 +0.0 + 0 +SEQEND + 5 +166D + 8 +DACHZIEGEL + 0 +POLYLINE + 5 +11F7 + 8 +DACHZIEGEL + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +166E + 8 +DACHZIEGEL + 10 +13020.0 + 20 +4440.0 + 30 +0.0 + 0 +VERTEX + 5 +166F + 8 +DACHZIEGEL + 10 +13000.0 + 20 +4420.0 + 30 +0.0 + 0 +VERTEX + 5 +1670 + 8 +DACHZIEGEL + 10 +12595.0 + 20 +4420.0 + 30 +0.0 + 0 +VERTEX + 5 +1671 + 8 +DACHZIEGEL + 10 +12570.0 + 20 +4435.0 + 30 +0.0 + 0 +VERTEX + 5 +1672 + 8 +DACHZIEGEL + 10 +12545.0 + 20 +4435.0 + 30 +0.0 + 0 +VERTEX + 5 +1673 + 8 +DACHZIEGEL + 10 +12540.0 + 20 +4420.0 + 30 +0.0 + 0 +VERTEX + 5 +1674 + 8 +DACHZIEGEL + 10 +12540.0 + 20 +4475.0 + 30 +0.0 + 0 +VERTEX + 5 +1675 + 8 +DACHZIEGEL + 10 +12560.0 + 20 +4460.0 + 30 +0.0 + 0 +VERTEX + 5 +1676 + 8 +DACHZIEGEL + 10 +12580.0 + 20 +4475.0 + 30 +0.0 + 0 +VERTEX + 5 +1677 + 8 +DACHZIEGEL + 10 +12605.0 + 20 +4445.0 + 30 +0.0 + 0 +VERTEX + 5 +1678 + 8 +DACHZIEGEL + 10 +12955.0 + 20 +4445.0 + 30 +0.0 + 0 +VERTEX + 5 +1679 + 8 +DACHZIEGEL + 10 +13015.0 + 20 +4535.0 + 30 +0.0 + 0 +VERTEX + 5 +167A + 8 +DACHZIEGEL + 10 +13060.0 + 20 +4535.0 + 30 +0.0 + 0 +VERTEX + 5 +167B + 8 +DACHZIEGEL + 10 +13080.0 + 20 +4495.0 + 30 +0.0 + 0 +VERTEX + 5 +167C + 8 +DACHZIEGEL + 10 +13060.0 + 20 +4475.0 + 30 +0.0 + 0 +VERTEX + 5 +167D + 8 +DACHZIEGEL + 10 +13035.0 + 20 +4500.0 + 30 +0.0 + 0 +VERTEX + 5 +167E + 8 +DACHZIEGEL + 10 +13025.0 + 20 +4475.0 + 30 +0.0 + 0 +SEQEND + 5 +167F + 8 +DACHZIEGEL + 0 +POLYLINE + 5 +120A + 8 +DACHZIEGEL + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1680 + 8 +DACHZIEGEL + 10 +12520.0 + 20 +4440.0 + 30 +0.0 + 0 +VERTEX + 5 +1681 + 8 +DACHZIEGEL + 10 +12500.0 + 20 +4420.0 + 30 +0.0 + 0 +VERTEX + 5 +1682 + 8 +DACHZIEGEL + 10 +12095.0 + 20 +4420.0 + 30 +0.0 + 0 +VERTEX + 5 +1683 + 8 +DACHZIEGEL + 10 +12070.0 + 20 +4435.0 + 30 +0.0 + 0 +VERTEX + 5 +1684 + 8 +DACHZIEGEL + 10 +12045.0 + 20 +4435.0 + 30 +0.0 + 0 +VERTEX + 5 +1685 + 8 +DACHZIEGEL + 10 +12040.0 + 20 +4420.0 + 30 +0.0 + 0 +VERTEX + 5 +1686 + 8 +DACHZIEGEL + 10 +12040.0 + 20 +4475.0 + 30 +0.0 + 0 +VERTEX + 5 +1687 + 8 +DACHZIEGEL + 10 +12060.0 + 20 +4460.0 + 30 +0.0 + 0 +VERTEX + 5 +1688 + 8 +DACHZIEGEL + 10 +12080.0 + 20 +4475.0 + 30 +0.0 + 0 +VERTEX + 5 +1689 + 8 +DACHZIEGEL + 10 +12105.0 + 20 +4445.0 + 30 +0.0 + 0 +VERTEX + 5 +168A + 8 +DACHZIEGEL + 10 +12455.0 + 20 +4445.0 + 30 +0.0 + 0 +VERTEX + 5 +168B + 8 +DACHZIEGEL + 10 +12515.0 + 20 +4535.0 + 30 +0.0 + 0 +VERTEX + 5 +168C + 8 +DACHZIEGEL + 10 +12560.0 + 20 +4535.0 + 30 +0.0 + 0 +VERTEX + 5 +168D + 8 +DACHZIEGEL + 10 +12580.0 + 20 +4495.0 + 30 +0.0 + 0 +VERTEX + 5 +168E + 8 +DACHZIEGEL + 10 +12560.0 + 20 +4475.0 + 30 +0.0 + 0 +VERTEX + 5 +168F + 8 +DACHZIEGEL + 10 +12535.0 + 20 +4500.0 + 30 +0.0 + 0 +VERTEX + 5 +1690 + 8 +DACHZIEGEL + 10 +12525.0 + 20 +4475.0 + 30 +0.0 + 0 +SEQEND + 5 +1691 + 8 +DACHZIEGEL + 0 +POLYLINE + 5 +121D + 8 +DACHZIEGEL + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1692 + 8 +DACHZIEGEL + 10 +14020.0 + 20 +4440.0 + 30 +0.0 + 0 +VERTEX + 5 +1693 + 8 +DACHZIEGEL + 10 +14000.0 + 20 +4420.0 + 30 +0.0 + 0 +VERTEX + 5 +1694 + 8 +DACHZIEGEL + 10 +13595.0 + 20 +4420.0 + 30 +0.0 + 0 +VERTEX + 5 +1695 + 8 +DACHZIEGEL + 10 +13570.0 + 20 +4435.0 + 30 +0.0 + 0 +VERTEX + 5 +1696 + 8 +DACHZIEGEL + 10 +13545.0 + 20 +4435.0 + 30 +0.0 + 0 +VERTEX + 5 +1697 + 8 +DACHZIEGEL + 10 +13540.0 + 20 +4420.0 + 30 +0.0 + 0 +VERTEX + 5 +1698 + 8 +DACHZIEGEL + 10 +13540.0 + 20 +4475.0 + 30 +0.0 + 0 +VERTEX + 5 +1699 + 8 +DACHZIEGEL + 10 +13560.0 + 20 +4460.0 + 30 +0.0 + 0 +VERTEX + 5 +169A + 8 +DACHZIEGEL + 10 +13580.0 + 20 +4475.0 + 30 +0.0 + 0 +VERTEX + 5 +169B + 8 +DACHZIEGEL + 10 +13605.0 + 20 +4445.0 + 30 +0.0 + 0 +VERTEX + 5 +169C + 8 +DACHZIEGEL + 10 +13955.0 + 20 +4445.0 + 30 +0.0 + 0 +VERTEX + 5 +169D + 8 +DACHZIEGEL + 10 +14015.0 + 20 +4535.0 + 30 +0.0 + 0 +VERTEX + 5 +169E + 8 +DACHZIEGEL + 10 +14060.0 + 20 +4535.0 + 30 +0.0 + 0 +VERTEX + 5 +169F + 8 +DACHZIEGEL + 10 +14080.0 + 20 +4495.0 + 30 +0.0 + 0 +VERTEX + 5 +16A0 + 8 +DACHZIEGEL + 10 +14060.0 + 20 +4475.0 + 30 +0.0 + 0 +VERTEX + 5 +16A1 + 8 +DACHZIEGEL + 10 +14035.0 + 20 +4500.0 + 30 +0.0 + 0 +VERTEX + 5 +16A2 + 8 +DACHZIEGEL + 10 +14025.0 + 20 +4475.0 + 30 +0.0 + 0 +SEQEND + 5 +16A3 + 8 +DACHZIEGEL + 0 +POLYLINE + 5 +1230 + 8 +DACHZIEGEL + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +16A4 + 8 +DACHZIEGEL + 10 +13520.0 + 20 +4440.0 + 30 +0.0 + 0 +VERTEX + 5 +16A5 + 8 +DACHZIEGEL + 10 +13500.0 + 20 +4420.0 + 30 +0.0 + 0 +VERTEX + 5 +16A6 + 8 +DACHZIEGEL + 10 +13095.0 + 20 +4420.0 + 30 +0.0 + 0 +VERTEX + 5 +16A7 + 8 +DACHZIEGEL + 10 +13070.0 + 20 +4435.0 + 30 +0.0 + 0 +VERTEX + 5 +16A8 + 8 +DACHZIEGEL + 10 +13045.0 + 20 +4435.0 + 30 +0.0 + 0 +VERTEX + 5 +16A9 + 8 +DACHZIEGEL + 10 +13040.0 + 20 +4420.0 + 30 +0.0 + 0 +VERTEX + 5 +16AA + 8 +DACHZIEGEL + 10 +13040.0 + 20 +4475.0 + 30 +0.0 + 0 +VERTEX + 5 +16AB + 8 +DACHZIEGEL + 10 +13060.0 + 20 +4460.0 + 30 +0.0 + 0 +VERTEX + 5 +16AC + 8 +DACHZIEGEL + 10 +13080.0 + 20 +4475.0 + 30 +0.0 + 0 +VERTEX + 5 +16AD + 8 +DACHZIEGEL + 10 +13105.0 + 20 +4445.0 + 30 +0.0 + 0 +VERTEX + 5 +16AE + 8 +DACHZIEGEL + 10 +13455.0 + 20 +4445.0 + 30 +0.0 + 0 +VERTEX + 5 +16AF + 8 +DACHZIEGEL + 10 +13515.0 + 20 +4535.0 + 30 +0.0 + 0 +VERTEX + 5 +16B0 + 8 +DACHZIEGEL + 10 +13560.0 + 20 +4535.0 + 30 +0.0 + 0 +VERTEX + 5 +16B1 + 8 +DACHZIEGEL + 10 +13580.0 + 20 +4495.0 + 30 +0.0 + 0 +VERTEX + 5 +16B2 + 8 +DACHZIEGEL + 10 +13560.0 + 20 +4475.0 + 30 +0.0 + 0 +VERTEX + 5 +16B3 + 8 +DACHZIEGEL + 10 +13535.0 + 20 +4500.0 + 30 +0.0 + 0 +VERTEX + 5 +16B4 + 8 +DACHZIEGEL + 10 +13525.0 + 20 +4475.0 + 30 +0.0 + 0 +SEQEND + 5 +16B5 + 8 +DACHZIEGEL + 0 +POLYLINE + 5 +1243 + 8 +DACHZIEGEL + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +16B6 + 8 +DACHZIEGEL + 10 +15020.0 + 20 +4440.0 + 30 +0.0 + 0 +VERTEX + 5 +16B7 + 8 +DACHZIEGEL + 10 +15000.0 + 20 +4420.0 + 30 +0.0 + 0 +VERTEX + 5 +16B8 + 8 +DACHZIEGEL + 10 +14595.0 + 20 +4420.0 + 30 +0.0 + 0 +VERTEX + 5 +16B9 + 8 +DACHZIEGEL + 10 +14570.0 + 20 +4435.0 + 30 +0.0 + 0 +VERTEX + 5 +16BA + 8 +DACHZIEGEL + 10 +14545.0 + 20 +4435.0 + 30 +0.0 + 0 +VERTEX + 5 +16BB + 8 +DACHZIEGEL + 10 +14540.0 + 20 +4420.0 + 30 +0.0 + 0 +VERTEX + 5 +16BC + 8 +DACHZIEGEL + 10 +14540.0 + 20 +4475.0 + 30 +0.0 + 0 +VERTEX + 5 +16BD + 8 +DACHZIEGEL + 10 +14560.0 + 20 +4460.0 + 30 +0.0 + 0 +VERTEX + 5 +16BE + 8 +DACHZIEGEL + 10 +14580.0 + 20 +4475.0 + 30 +0.0 + 0 +VERTEX + 5 +16BF + 8 +DACHZIEGEL + 10 +14605.0 + 20 +4445.0 + 30 +0.0 + 0 +VERTEX + 5 +16C0 + 8 +DACHZIEGEL + 10 +14955.0 + 20 +4445.0 + 30 +0.0 + 0 +VERTEX + 5 +16C1 + 8 +DACHZIEGEL + 10 +15015.0 + 20 +4535.0 + 30 +0.0 + 0 +VERTEX + 5 +16C2 + 8 +DACHZIEGEL + 10 +15060.0 + 20 +4535.0 + 30 +0.0 + 0 +VERTEX + 5 +16C3 + 8 +DACHZIEGEL + 10 +15080.0 + 20 +4495.0 + 30 +0.0 + 0 +VERTEX + 5 +16C4 + 8 +DACHZIEGEL + 10 +15060.0 + 20 +4475.0 + 30 +0.0 + 0 +VERTEX + 5 +16C5 + 8 +DACHZIEGEL + 10 +15035.0 + 20 +4500.0 + 30 +0.0 + 0 +VERTEX + 5 +16C6 + 8 +DACHZIEGEL + 10 +15025.0 + 20 +4475.0 + 30 +0.0 + 0 +SEQEND + 5 +16C7 + 8 +DACHZIEGEL + 0 +POLYLINE + 5 +1256 + 8 +DACHZIEGEL + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +16C8 + 8 +DACHZIEGEL + 10 +14520.0 + 20 +4440.0 + 30 +0.0 + 0 +VERTEX + 5 +16C9 + 8 +DACHZIEGEL + 10 +14500.0 + 20 +4420.0 + 30 +0.0 + 0 +VERTEX + 5 +16CA + 8 +DACHZIEGEL + 10 +14095.0 + 20 +4420.0 + 30 +0.0 + 0 +VERTEX + 5 +16CB + 8 +DACHZIEGEL + 10 +14070.0 + 20 +4435.0 + 30 +0.0 + 0 +VERTEX + 5 +16CC + 8 +DACHZIEGEL + 10 +14045.0 + 20 +4435.0 + 30 +0.0 + 0 +VERTEX + 5 +16CD + 8 +DACHZIEGEL + 10 +14040.0 + 20 +4420.0 + 30 +0.0 + 0 +VERTEX + 5 +16CE + 8 +DACHZIEGEL + 10 +14040.0 + 20 +4475.0 + 30 +0.0 + 0 +VERTEX + 5 +16CF + 8 +DACHZIEGEL + 10 +14060.0 + 20 +4460.0 + 30 +0.0 + 0 +VERTEX + 5 +16D0 + 8 +DACHZIEGEL + 10 +14080.0 + 20 +4475.0 + 30 +0.0 + 0 +VERTEX + 5 +16D1 + 8 +DACHZIEGEL + 10 +14105.0 + 20 +4445.0 + 30 +0.0 + 0 +VERTEX + 5 +16D2 + 8 +DACHZIEGEL + 10 +14455.0 + 20 +4445.0 + 30 +0.0 + 0 +VERTEX + 5 +16D3 + 8 +DACHZIEGEL + 10 +14515.0 + 20 +4535.0 + 30 +0.0 + 0 +VERTEX + 5 +16D4 + 8 +DACHZIEGEL + 10 +14560.0 + 20 +4535.0 + 30 +0.0 + 0 +VERTEX + 5 +16D5 + 8 +DACHZIEGEL + 10 +14580.0 + 20 +4495.0 + 30 +0.0 + 0 +VERTEX + 5 +16D6 + 8 +DACHZIEGEL + 10 +14560.0 + 20 +4475.0 + 30 +0.0 + 0 +VERTEX + 5 +16D7 + 8 +DACHZIEGEL + 10 +14535.0 + 20 +4500.0 + 30 +0.0 + 0 +VERTEX + 5 +16D8 + 8 +DACHZIEGEL + 10 +14525.0 + 20 +4475.0 + 30 +0.0 + 0 +SEQEND + 5 +16D9 + 8 +DACHZIEGEL + 0 +POLYLINE + 5 +1269 + 8 +DACHZIEGEL + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +16DA + 8 +DACHZIEGEL + 10 +15520.0 + 20 +4440.0 + 30 +0.0 + 0 +VERTEX + 5 +16DB + 8 +DACHZIEGEL + 10 +15500.0 + 20 +4420.0 + 30 +0.0 + 0 +VERTEX + 5 +16DC + 8 +DACHZIEGEL + 10 +15095.0 + 20 +4420.0 + 30 +0.0 + 0 +VERTEX + 5 +16DD + 8 +DACHZIEGEL + 10 +15070.0 + 20 +4435.0 + 30 +0.0 + 0 +VERTEX + 5 +16DE + 8 +DACHZIEGEL + 10 +15045.0 + 20 +4435.0 + 30 +0.0 + 0 +VERTEX + 5 +16DF + 8 +DACHZIEGEL + 10 +15040.0 + 20 +4420.0 + 30 +0.0 + 0 +VERTEX + 5 +16E0 + 8 +DACHZIEGEL + 10 +15040.0 + 20 +4475.0 + 30 +0.0 + 0 +VERTEX + 5 +16E1 + 8 +DACHZIEGEL + 10 +15060.0 + 20 +4460.0 + 30 +0.0 + 0 +VERTEX + 5 +16E2 + 8 +DACHZIEGEL + 10 +15080.0 + 20 +4475.0 + 30 +0.0 + 0 +VERTEX + 5 +16E3 + 8 +DACHZIEGEL + 10 +15105.0 + 20 +4445.0 + 30 +0.0 + 0 +VERTEX + 5 +16E4 + 8 +DACHZIEGEL + 10 +15455.0 + 20 +4445.0 + 30 +0.0 + 0 +VERTEX + 5 +16E5 + 8 +DACHZIEGEL + 10 +15515.0 + 20 +4535.0 + 30 +0.0 + 0 +VERTEX + 5 +16E6 + 8 +DACHZIEGEL + 10 +15560.0 + 20 +4535.0 + 30 +0.0 + 0 +VERTEX + 5 +16E7 + 8 +DACHZIEGEL + 10 +15580.0 + 20 +4495.0 + 30 +0.0 + 0 +VERTEX + 5 +16E8 + 8 +DACHZIEGEL + 10 +15560.0 + 20 +4475.0 + 30 +0.0 + 0 +VERTEX + 5 +16E9 + 8 +DACHZIEGEL + 10 +15535.0 + 20 +4500.0 + 30 +0.0 + 0 +VERTEX + 5 +16EA + 8 +DACHZIEGEL + 10 +15525.0 + 20 +4475.0 + 30 +0.0 + 0 +SEQEND + 5 +16EB + 8 +DACHZIEGEL + 0 +POLYLINE + 5 +127C + 8 +SCHNITTKANTEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +16EC + 8 +SCHNITTKANTEN + 10 +15880.0 + 20 +4780.0 + 30 +0.0 + 0 +VERTEX + 5 +16ED + 8 +SCHNITTKANTEN + 10 +15880.0 + 20 +3410.0 + 30 +0.0 + 0 +SEQEND + 5 +16EE + 8 +SCHNITTKANTEN + 0 +INSERT + 5 +1280 + 8 +SCHRAFFUR + 2 +*X26 + 10 +7035.0 + 20 +-430.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +HONEY,I +1040 +450.0 +1040 +0.0 +1002 +} + 0 +POLYLINE + 5 +1281 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +16EF + 8 +HOLZ + 10 +11979.307123 + 20 +3735.0 + 30 +0.0 + 0 +VERTEX + 5 +16F0 + 8 +HOLZ + 10 +11979.307123 + 20 +3685.0 + 30 +0.0 + 0 +VERTEX + 5 +16F1 + 8 +HOLZ + 10 +15880.0 + 20 +3685.0 + 30 +0.0 + 0 +SEQEND + 5 +16F2 + 8 +HOLZ + 0 +POLYLINE + 5 +1286 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +16F3 + 8 +HOLZ + 10 +15880.0 + 20 +3735.0 + 30 +0.0 + 0 +VERTEX + 5 +16F4 + 8 +HOLZ + 10 +11979.307123 + 20 +3735.0 + 30 +0.0 + 0 +SEQEND + 5 +16F5 + 8 +HOLZ + 0 +POLYLINE + 5 +128A + 8 +PE-FOLIE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +25.0 + 41 +25.0 + 0 +VERTEX + 5 +16F6 + 8 +PE-FOLIE + 10 +11985.0 + 20 +3750.0 + 30 +0.0 + 0 +VERTEX + 5 +16F7 + 8 +PE-FOLIE + 10 +15880.0 + 20 +3750.0 + 30 +0.0 + 0 +SEQEND + 5 +16F8 + 8 +PE-FOLIE + 0 +POLYLINE + 5 +128E + 8 +DAEMMUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +16F9 + 8 +DAEMMUNG + 10 +12161.85938 + 20 +3762.860132 + 30 +0.0 + 0 +VERTEX + 5 +16FA + 8 +DAEMMUNG + 10 +12161.85938 + 20 +4062.860132 + 30 +0.0 + 0 +VERTEX + 5 +16FB + 8 +DAEMMUNG + 10 +15880.0 + 20 +4062.860132 + 30 +0.0 + 0 +SEQEND + 5 +16FC + 8 +DAEMMUNG + 0 +POLYLINE + 5 +1293 + 8 +DAEMMUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +16FD + 8 +DAEMMUNG + 10 +15880.0 + 20 +3762.860132 + 30 +0.0 + 0 +VERTEX + 5 +16FE + 8 +DAEMMUNG + 10 +12161.85938 + 20 +3762.860132 + 30 +0.0 + 0 +SEQEND + 5 +16FF + 8 +DAEMMUNG + 0 +POLYLINE + 5 +1297 + 8 +PE-FOLIE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +25.0 + 41 +25.0 + 0 +VERTEX + 5 +1700 + 8 +PE-FOLIE + 10 +10395.0 + 20 +4230.0 + 30 +0.0 + 0 +VERTEX + 5 +1701 + 8 +PE-FOLIE + 10 +15880.0 + 20 +4230.0 + 30 +0.0 + 0 +SEQEND + 5 +1702 + 8 +PE-FOLIE + 0 +POLYLINE + 5 +129B + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1703 + 8 +HOLZ + 10 +10630.0 + 20 +4320.0 + 30 +0.0 + 0 +VERTEX + 5 +1704 + 8 +HOLZ + 10 +15880.0 + 20 +4320.0 + 30 +0.0 + 0 +SEQEND + 5 +1705 + 8 +HOLZ + 0 +POLYLINE + 5 +129F + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1706 + 8 +HOLZ + 10 +15880.0 + 20 +4395.0 + 30 +0.0 + 0 +VERTEX + 5 +1707 + 8 +HOLZ + 10 +10630.0 + 20 +4395.0 + 30 +0.0 + 0 +VERTEX + 5 +1708 + 8 +HOLZ + 10 +10630.0 + 20 +4320.0 + 30 +0.0 + 0 +SEQEND + 5 +1709 + 8 +HOLZ + 0 +POLYLINE + 5 +12A4 + 8 +DACHZIEGEL + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +170A + 8 +DACHZIEGEL + 10 +15880.0 + 20 +4420.0 + 30 +0.0 + 0 +VERTEX + 5 +170B + 8 +DACHZIEGEL + 10 +15595.0 + 20 +4420.0 + 30 +0.0 + 0 +VERTEX + 5 +170C + 8 +DACHZIEGEL + 10 +15570.0 + 20 +4435.0 + 30 +0.0 + 0 +VERTEX + 5 +170D + 8 +DACHZIEGEL + 10 +15545.0 + 20 +4435.0 + 30 +0.0 + 0 +VERTEX + 5 +170E + 8 +DACHZIEGEL + 10 +15540.0 + 20 +4420.0 + 30 +0.0 + 0 +VERTEX + 5 +170F + 8 +DACHZIEGEL + 10 +15540.0 + 20 +4475.0 + 30 +0.0 + 0 +VERTEX + 5 +1710 + 8 +DACHZIEGEL + 10 +15560.0 + 20 +4460.0 + 30 +0.0 + 0 +VERTEX + 5 +1711 + 8 +DACHZIEGEL + 10 +15580.0 + 20 +4475.0 + 30 +0.0 + 0 +VERTEX + 5 +1712 + 8 +DACHZIEGEL + 10 +15605.0 + 20 +4445.0 + 30 +0.0 + 0 +VERTEX + 5 +1713 + 8 +DACHZIEGEL + 10 +15880.0 + 20 +4445.0 + 30 +0.0 + 0 +SEQEND + 5 +1714 + 8 +DACHZIEGEL + 0 +LINE + 5 +12B0 + 8 +0 + 62 + 0 + 10 +11992.0 + 20 +3700.0 + 30 +0.0 + 11 +12592.0 + 21 +3700.0 + 31 +0.0 + 0 +LINE + 5 +12B1 + 8 +0 + 62 + 0 + 10 +12672.0 + 20 +3700.0 + 30 +0.0 + 11 +12872.0 + 21 +3700.0 + 31 +0.0 + 0 +LINE + 5 +12B2 + 8 +0 + 62 + 0 + 10 +12912.0 + 20 +3700.0 + 30 +0.0 + 11 +13512.0 + 21 +3700.0 + 31 +0.0 + 0 +LINE + 5 +12B3 + 8 +0 + 62 + 0 + 10 +13592.0 + 20 +3700.0 + 30 +0.0 + 11 +13792.0 + 21 +3700.0 + 31 +0.0 + 0 +LINE + 5 +12B4 + 8 +0 + 62 + 0 + 10 +13832.0 + 20 +3700.0 + 30 +0.0 + 11 +14432.0 + 21 +3700.0 + 31 +0.0 + 0 +LINE + 5 +12B5 + 8 +0 + 62 + 0 + 10 +14512.0 + 20 +3700.0 + 30 +0.0 + 11 +14712.0 + 21 +3700.0 + 31 +0.0 + 0 +LINE + 5 +12B6 + 8 +0 + 62 + 0 + 10 +14752.0 + 20 +3700.0 + 30 +0.0 + 11 +15352.0 + 21 +3700.0 + 31 +0.0 + 0 +LINE + 5 +12B7 + 8 +0 + 62 + 0 + 10 +15432.0 + 20 +3700.0 + 30 +0.0 + 11 +15632.0 + 21 +3700.0 + 31 +0.0 + 0 +LINE + 5 +12B8 + 8 +0 + 62 + 0 + 10 +15672.0 + 20 +3700.0 + 30 +0.0 + 11 +15880.0 + 21 +3700.0 + 31 +0.0 + 0 +LINE + 5 +12B9 + 8 +0 + 62 + 0 + 10 +12028.0 + 20 +3714.4 + 30 +0.0 + 11 +12188.0 + 21 +3714.4 + 31 +0.0 + 0 +LINE + 5 +12BA + 8 +0 + 62 + 0 + 10 +12228.0 + 20 +3714.4 + 30 +0.0 + 11 +12548.0 + 21 +3714.4 + 31 +0.0 + 0 +LINE + 5 +12BB + 8 +0 + 62 + 0 + 10 +12604.0 + 20 +3714.4 + 30 +0.0 + 11 +12764.0 + 21 +3714.4 + 31 +0.0 + 0 +LINE + 5 +12BC + 8 +0 + 62 + 0 + 10 +12804.0 + 20 +3714.4 + 30 +0.0 + 11 +13124.0 + 21 +3714.4 + 31 +0.0 + 0 +LINE + 5 +12BD + 8 +0 + 62 + 0 + 10 +13180.0 + 20 +3714.4 + 30 +0.0 + 11 +13340.0 + 21 +3714.4 + 31 +0.0 + 0 +LINE + 5 +12BE + 8 +0 + 62 + 0 + 10 +13380.0 + 20 +3714.4 + 30 +0.0 + 11 +13700.0 + 21 +3714.4 + 31 +0.0 + 0 +LINE + 5 +12BF + 8 +0 + 62 + 0 + 10 +13756.0 + 20 +3714.4 + 30 +0.0 + 11 +13916.0 + 21 +3714.4 + 31 +0.0 + 0 +LINE + 5 +12C0 + 8 +0 + 62 + 0 + 10 +13956.0 + 20 +3714.4 + 30 +0.0 + 11 +14276.0 + 21 +3714.4 + 31 +0.0 + 0 +LINE + 5 +12C1 + 8 +0 + 62 + 0 + 10 +14332.0 + 20 +3714.4 + 30 +0.0 + 11 +14492.0 + 21 +3714.4 + 31 +0.0 + 0 +LINE + 5 +12C2 + 8 +0 + 62 + 0 + 10 +14532.0 + 20 +3714.4 + 30 +0.0 + 11 +14852.0 + 21 +3714.4 + 31 +0.0 + 0 +LINE + 5 +12C3 + 8 +0 + 62 + 0 + 10 +14908.0 + 20 +3714.4 + 30 +0.0 + 11 +15068.0 + 21 +3714.4 + 31 +0.0 + 0 +LINE + 5 +12C4 + 8 +0 + 62 + 0 + 10 +15108.0 + 20 +3714.4 + 30 +0.0 + 11 +15428.0 + 21 +3714.4 + 31 +0.0 + 0 +LINE + 5 +12C5 + 8 +0 + 62 + 0 + 10 +15484.0 + 20 +3714.4 + 30 +0.0 + 11 +15644.0 + 21 +3714.4 + 31 +0.0 + 0 +LINE + 5 +12C6 + 8 +0 + 62 + 0 + 10 +15684.0 + 20 +3714.4 + 30 +0.0 + 11 +15880.0 + 21 +3714.4 + 31 +0.0 + 0 +LINE + 5 +12C7 + 8 +0 + 62 + 0 + 10 +11979.35938 + 20 +3687.6 + 30 +0.0 + 11 +11980.0 + 21 +3687.6 + 31 +0.0 + 0 +LINE + 5 +12C8 + 8 +0 + 62 + 0 + 10 +12020.0 + 20 +3687.6 + 30 +0.0 + 11 +12340.0 + 21 +3687.6 + 31 +0.0 + 0 +LINE + 5 +12C9 + 8 +0 + 62 + 0 + 10 +12396.0 + 20 +3687.6 + 30 +0.0 + 11 +12556.0 + 21 +3687.6 + 31 +0.0 + 0 +LINE + 5 +12CA + 8 +0 + 62 + 0 + 10 +12596.0 + 20 +3687.6 + 30 +0.0 + 11 +12916.0 + 21 +3687.6 + 31 +0.0 + 0 +LINE + 5 +12CB + 8 +0 + 62 + 0 + 10 +12972.0 + 20 +3687.6 + 30 +0.0 + 11 +13132.0 + 21 +3687.6 + 31 +0.0 + 0 +LINE + 5 +12CC + 8 +0 + 62 + 0 + 10 +13172.0 + 20 +3687.6 + 30 +0.0 + 11 +13492.0 + 21 +3687.6 + 31 +0.0 + 0 +LINE + 5 +12CD + 8 +0 + 62 + 0 + 10 +13548.0 + 20 +3687.6 + 30 +0.0 + 11 +13708.0 + 21 +3687.6 + 31 +0.0 + 0 +LINE + 5 +12CE + 8 +0 + 62 + 0 + 10 +13748.0 + 20 +3687.6 + 30 +0.0 + 11 +14068.0 + 21 +3687.6 + 31 +0.0 + 0 +LINE + 5 +12CF + 8 +0 + 62 + 0 + 10 +14124.0 + 20 +3687.6 + 30 +0.0 + 11 +14284.0 + 21 +3687.6 + 31 +0.0 + 0 +LINE + 5 +12D0 + 8 +0 + 62 + 0 + 10 +14324.0 + 20 +3687.6 + 30 +0.0 + 11 +14644.0 + 21 +3687.6 + 31 +0.0 + 0 +LINE + 5 +12D1 + 8 +0 + 62 + 0 + 10 +14700.0 + 20 +3687.6 + 30 +0.0 + 11 +14860.0 + 21 +3687.6 + 31 +0.0 + 0 +LINE + 5 +12D2 + 8 +0 + 62 + 0 + 10 +14900.0 + 20 +3687.6 + 30 +0.0 + 11 +15220.0 + 21 +3687.6 + 31 +0.0 + 0 +LINE + 5 +12D3 + 8 +0 + 62 + 0 + 10 +15276.0 + 20 +3687.6 + 30 +0.0 + 11 +15436.0 + 21 +3687.6 + 31 +0.0 + 0 +LINE + 5 +12D4 + 8 +0 + 62 + 0 + 10 +15476.0 + 20 +3687.6 + 30 +0.0 + 11 +15796.0 + 21 +3687.6 + 31 +0.0 + 0 +LINE + 5 +12D5 + 8 +0 + 62 + 0 + 10 +15852.0 + 20 +3687.6 + 30 +0.0 + 11 +15880.0 + 21 +3687.6 + 31 +0.0 + 0 +DIMENSION + 5 +12D6 + 8 +BEMASSUNG + 2 +*D30 + 10 +16435.0 + 20 +4060.0 + 30 +0.0 + 11 +16347.5 + 21 +3910.0 + 31 +0.0 + 12 +7035.0 + 22 +-430.0 + 32 +0.0 + 1 +12 + 13 +15875.0 + 23 +3760.0 + 33 +0.0 + 14 +15875.0 + 24 +4060.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +12D7 + 8 +BEMASSUNG + 2 +*D35 + 10 +17038.017251 + 20 +3745.0 + 30 +0.0 + 11 +16950.517251 + 21 +3635.0 + 31 +0.0 + 12 +7035.0 + 22 +-430.0 + 32 +0.0 + 70 + 128 + 1 +2 + 13 +15863.017251 + 23 +3685.0 + 33 +0.0 + 14 +15863.017251 + 24 +3745.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +12D8 + 8 +BEMASSUNG + 2 +*D37 + 10 +17038.0 + 20 +4230.0 + 30 +0.0 + 11 +16950.5 + 21 +3987.5 + 31 +0.0 + 12 +7035.0 + 22 +-430.0 + 32 +0.0 + 1 +18 + 13 +15860.0 + 23 +3745.0 + 33 +0.0 + 14 +15870.0 + 24 +4230.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +12D9 + 8 +BEMASSUNG + 2 +*D33 + 10 +17038.0 + 20 +4320.0 + 30 +0.0 + 11 +16950.5 + 21 +4275.0 + 31 +0.0 + 12 +7035.0 + 22 +-430.0 + 32 +0.0 + 1 +3 + 13 +15870.0 + 23 +4230.0 + 33 +0.0 + 14 +15865.0 + 24 +4320.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +12DA + 8 +BEMASSUNG + 2 +*D34 + 10 +17038.0 + 20 +4395.0 + 30 +0.0 + 11 +16950.5 + 21 +4357.5 + 31 +0.0 + 12 +7035.0 + 22 +-430.0 + 32 +0.0 + 1 +3 + 13 +15865.0 + 23 +4320.0 + 33 +0.0 + 14 +15855.0 + 24 +4395.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +12DB + 8 +BEMASSUNG + 2 +*D39 + 10 +10343.180412 + 20 +3936.423158 + 30 +0.0 + 11 +10275.0 + 21 +4023.923158 + 31 +0.0 + 12 +7035.0 + 22 +-525.0 + 32 +0.0 + 70 + 128 + 1 +1 + 13 +10392.72129 + 23 +3971.083823 + 33 +0.0 + 14 +10343.180412 + 24 +3971.083823 + 34 +0.0 + 0 +TEXT + 5 +12DC + 8 +BEMASSUNG + 10 +10290.0 + 20 +4040.0 + 30 +0.0 + 40 +62.5 + 1 +5 + 0 +TEXT + 5 +12DD + 8 +BEMASSUNG + 10 +13460.0 + 20 +6885.0 + 30 +0.0 + 40 +87.5 + 1 +FALZZIEGEL + 0 +TEXT + 5 +12DE + 8 +BEMASSUNG + 10 +13460.0 + 20 +6635.0 + 30 +0.0 + 40 +87.5 + 1 +KONTERLATTUNG NH S10 3/5 + 0 +TEXT + 5 +12DF + 8 +BEMASSUNG + 10 +13460.0 + 20 +6385.0 + 30 +0.0 + 40 +87.5 + 1 +LATTUNG NH S10 3/5 + 0 +TEXT + 5 +12E0 + 8 +BEMASSUNG + 10 +13460.0 + 20 +6135.0 + 30 +0.0 + 40 +87.5 + 1 +PE-FOLIE + 0 +TEXT + 5 +12E1 + 8 +BEMASSUNG + 10 +13460.0 + 20 +5885.0 + 30 +0.0 + 40 +87.5 + 1 +MINRALFASER-WÄDÄ + 0 +POLYLINE + 5 +12E2 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1715 + 8 +LEGENDE-35 + 10 +13365.0 + 20 +6930.0 + 30 +0.0 + 0 +VERTEX + 5 +1716 + 8 +LEGENDE-35 + 10 +11580.0 + 20 +6930.0 + 30 +0.0 + 0 +VERTEX + 5 +1717 + 8 +LEGENDE-35 + 10 +11580.0 + 20 +4520.0 + 30 +0.0 + 0 +SEQEND + 5 +1718 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +12E7 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1719 + 8 +LEGENDE-35 + 10 +13365.0 + 20 +6695.0 + 30 +0.0 + 0 +VERTEX + 5 +171A + 8 +LEGENDE-35 + 10 +12065.0 + 20 +6695.0 + 30 +0.0 + 0 +VERTEX + 5 +171B + 8 +LEGENDE-35 + 10 +12065.0 + 20 +4335.0 + 30 +0.0 + 0 +SEQEND + 5 +171C + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +12EC + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +171D + 8 +LEGENDE-35 + 10 +13365.0 + 20 +6440.0 + 30 +0.0 + 0 +VERTEX + 5 +171E + 8 +LEGENDE-35 + 10 +12460.0 + 20 +6440.0 + 30 +0.0 + 0 +VERTEX + 5 +171F + 8 +LEGENDE-35 + 10 +12460.0 + 20 +4360.0 + 30 +0.0 + 0 +SEQEND + 5 +1720 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +12F1 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1721 + 8 +LEGENDE-35 + 10 +13365.0 + 20 +6200.0 + 30 +0.0 + 0 +VERTEX + 5 +1722 + 8 +LEGENDE-35 + 10 +12815.0 + 20 +6200.0 + 30 +0.0 + 0 +VERTEX + 5 +1723 + 8 +LEGENDE-35 + 10 +12815.0 + 20 +4260.0 + 30 +0.0 + 0 +SEQEND + 5 +1724 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +12F6 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1725 + 8 +LEGENDE-35 + 10 +13360.0 + 20 +5925.0 + 30 +0.0 + 0 +VERTEX + 5 +1726 + 8 +LEGENDE-35 + 10 +13110.0 + 20 +5925.0 + 30 +0.0 + 0 +VERTEX + 5 +1727 + 8 +LEGENDE-35 + 10 +13110.0 + 20 +3915.0 + 30 +0.0 + 0 +SEQEND + 5 +1728 + 8 +LEGENDE-35 + 0 +TEXT + 5 +12FB + 8 +LEGENDE-35 + 10 +14190.0 + 20 +2995.0 + 30 +0.0 + 40 +87.5 + 1 +SCHALUNG + 0 +TEXT + 5 +12FC + 8 +LEGENDE-35 + 10 +14190.0 + 20 +2745.0 + 30 +0.0 + 40 +87.5 + 1 +SPARREN POS 1 NH S10 8/18 + 0 +TEXT + 5 +12FD + 8 +LEGENDE-35 + 10 +14190.0 + 20 +2495.0 + 30 +0.0 + 40 +87.5 + 1 +GIPSPUTZ + 0 +POLYLINE + 5 +12FE + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1729 + 8 +LEGENDE-35 + 10 +14035.0 + 20 +3030.0 + 30 +0.0 + 0 +VERTEX + 5 +172A + 8 +LEGENDE-35 + 10 +13310.0 + 20 +3030.0 + 30 +0.0 + 0 +VERTEX + 5 +172B + 8 +LEGENDE-35 + 10 +13310.0 + 20 +3700.0 + 30 +0.0 + 0 +SEQEND + 5 +172C + 8 +LEGENDE-35 + 0 +TEXT + 5 +1303 + 8 +LEGENDE-35 + 10 +14175.0 + 20 +3225.0 + 30 +0.0 + 40 +87.5 + 1 +PE-FOLIE + 0 +POLYLINE + 5 +1304 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +172D + 8 +LEGENDE-35 + 10 +14025.0 + 20 +3260.0 + 30 +0.0 + 0 +VERTEX + 5 +172E + 8 +LEGENDE-35 + 10 +13585.0 + 20 +3260.0 + 30 +0.0 + 0 +VERTEX + 5 +172F + 8 +LEGENDE-35 + 10 +13585.0 + 20 +3750.0 + 30 +0.0 + 0 +SEQEND + 5 +1730 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +1309 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1731 + 8 +LEGENDE-35 + 10 +14030.0 + 20 +2800.0 + 30 +0.0 + 0 +VERTEX + 5 +1732 + 8 +LEGENDE-35 + 10 +12065.0 + 20 +2800.0 + 30 +0.0 + 0 +VERTEX + 5 +1733 + 8 +LEGENDE-35 + 10 +12065.0 + 20 +3920.0 + 30 +0.0 + 0 +SEQEND + 5 +1734 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +130E + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1735 + 8 +LEGENDE-35 + 10 +14030.0 + 20 +2545.0 + 30 +0.0 + 0 +VERTEX + 5 +1736 + 8 +LEGENDE-35 + 10 +12330.0 + 20 +2545.0 + 30 +0.0 + 0 +VERTEX + 5 +1737 + 8 +LEGENDE-35 + 10 +11960.0 + 20 +2710.0 + 30 +0.0 + 0 +SEQEND + 5 +1738 + 8 +LEGENDE-35 + 0 +TEXT + 5 +1313 + 8 +LEGENDE-35 + 10 +7030.0 + 20 +4475.0 + 30 +0.0 + 40 +87.5 + 1 +BLECHKEHLE + 0 +TEXT + 5 +1314 + 8 +LEGENDE-35 + 10 +7030.0 + 20 +4225.0 + 30 +0.0 + 40 +87.5 + 1 +GESIMSBRETT + 0 +TEXT + 5 +1315 + 8 +LEGENDE-35 + 10 +7420.0 + 20 +3590.0 + 30 +0.0 + 40 +87.5 + 1 +VMW KHLz-20-1.8-NF + 0 +TEXT + 5 +1316 + 8 +LEGENDE-35 + 10 +7420.0 + 20 +3340.0 + 30 +0.0 + 40 +87.5 + 1 +MW Mz-20-1.8-NF + 0 +TEXT + 5 +1317 + 8 +LEGENDE-35 + 10 +7420.0 + 20 +3090.0 + 30 +0.0 + 40 +87.5 + 1 +MINERALFASER-WÄDÄ + 0 +POLYLINE + 5 +1318 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1739 + 8 +LEGENDE-35 + 10 +7960.0 + 20 +4515.0 + 30 +0.0 + 0 +VERTEX + 5 +173A + 8 +LEGENDE-35 + 10 +10070.0 + 20 +4515.0 + 30 +0.0 + 0 +VERTEX + 5 +173B + 8 +LEGENDE-35 + 10 +10070.0 + 20 +4935.0 + 30 +0.0 + 0 +VERTEX + 5 +173C + 8 +LEGENDE-35 + 10 +10465.0 + 20 +4935.0 + 30 +0.0 + 0 +VERTEX + 5 +173D + 8 +LEGENDE-35 + 10 +10465.0 + 20 +4410.0 + 30 +0.0 + 0 +SEQEND + 5 +173E + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +131F + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +173F + 8 +LEGENDE-35 + 10 +8020.0 + 20 +4275.0 + 30 +0.0 + 0 +VERTEX + 5 +1740 + 8 +LEGENDE-35 + 10 +10355.0 + 20 +4275.0 + 30 +0.0 + 0 +SEQEND + 5 +1741 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +1323 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1742 + 8 +LEGENDE-35 + 10 +9040.0 + 20 +3625.0 + 30 +0.0 + 0 +VERTEX + 5 +1743 + 8 +LEGENDE-35 + 10 +10510.0 + 20 +3625.0 + 30 +0.0 + 0 +SEQEND + 5 +1744 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +1327 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1745 + 8 +LEGENDE-35 + 10 +8700.0 + 20 +3390.0 + 30 +0.0 + 0 +VERTEX + 5 +1746 + 8 +LEGENDE-35 + 10 +11225.0 + 20 +3390.0 + 30 +0.0 + 0 +SEQEND + 5 +1747 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +132B + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1748 + 8 +LEGENDE-35 + 10 +8975.0 + 20 +3140.0 + 30 +0.0 + 0 +VERTEX + 5 +1749 + 8 +LEGENDE-35 + 10 +10310.0 + 20 +3140.0 + 30 +0.0 + 0 +VERTEX + 5 +174A + 8 +LEGENDE-35 + 10 +10910.0 + 20 +3265.0 + 30 +0.0 + 0 +SEQEND + 5 +174B + 8 +LEGENDE-35 + 0 +TEXT + 5 +1330 + 8 +LEGENDE-35 + 10 +7420.0 + 20 +2840.0 + 30 +0.0 + 40 +87.5 + 1 +ABSTANDHALTER + 0 +POLYLINE + 5 +1331 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +174C + 8 +LEGENDE-35 + 10 +8620.0 + 20 +2890.0 + 30 +0.0 + 0 +VERTEX + 5 +174D + 8 +LEGENDE-35 + 10 +10755.0 + 20 +2890.0 + 30 +0.0 + 0 +VERTEX + 5 +174E + 8 +LEGENDE-35 + 10 +10755.0 + 20 +3050.0 + 30 +0.0 + 0 +SEQEND + 5 +174F + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +1336 + 8 +SCHRAFFUR + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +1337 + 8 +SCHRAFFUR + 10 +10345.0 + 20 +4455.0 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1338 + 8 +SCHRAFFUR + 10 +10345.0 + 20 +4455.0 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1339 + 8 +SCHRAFFUR + 10 +10350.041633 + 20 +4458.734896 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +133A + 8 +SCHRAFFUR + 10 +10354.589582 + 20 +4463.956186 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +133B + 8 +SCHRAFFUR + 10 +10358.588819 + 20 +4470.052247 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +133C + 8 +SCHRAFFUR + 10 +10361.984318 + 20 +4476.411454 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +133D + 8 +SCHRAFFUR + 10 +10364.721051 + 20 +4482.422183 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +133E + 8 +SCHRAFFUR + 10 +10366.743989 + 20 +4487.47281 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +133F + 8 +SCHRAFFUR + 10 +10367.998105 + 20 +4490.951711 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1340 + 8 +SCHRAFFUR + 10 +10368.428373 + 20 +4492.247261 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1341 + 8 +SCHRAFFUR + 10 +10359.053685 + 20 +4462.434196 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1342 + 8 +SCHRAFFUR + 10 +10368.428373 + 20 +4492.247261 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1343 + 8 +SCHRAFFUR + 10 +10368.428373 + 20 +4492.247261 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1344 + 8 +SCHRAFFUR + 0 +POLYLINE + 5 +1345 + 8 +SCHRAFFUR + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +1346 + 8 +SCHRAFFUR + 10 +10344.565635 + 20 +4407.067149 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1347 + 8 +SCHRAFFUR + 10 +10344.565635 + 20 +4407.067149 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1348 + 8 +SCHRAFFUR + 10 +10350.57126 + 20 +4411.658898 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1349 + 8 +SCHRAFFUR + 10 +10355.857812 + 20 +4417.608199 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +134A + 8 +SCHRAFFUR + 10 +10360.505189 + 20 +4424.675485 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +134B + 8 +SCHRAFFUR + 10 +10364.593286 + 20 +4432.621188 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +134C + 8 +SCHRAFFUR + 10 +10368.202001 + 20 +4441.205741 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +134D + 8 +SCHRAFFUR + 10 +10371.411229 + 20 +4450.189576 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +134E + 8 +SCHRAFFUR + 10 +10374.300869 + 20 +4459.333125 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +134F + 8 +SCHRAFFUR + 10 +10376.950816 + 20 +4468.396822 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1350 + 8 +SCHRAFFUR + 10 +10361.610418 + 20 +4417.288794 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1351 + 8 +SCHRAFFUR + 10 +10370.132861 + 20 +4444.546383 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1352 + 8 +SCHRAFFUR + 10 +10376.950816 + 20 +4468.396822 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1353 + 8 +SCHRAFFUR + 0 +POLYLINE + 5 +1354 + 8 +SCHRAFFUR + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +1355 + 8 +SCHRAFFUR + 10 +10345.417879 + 20 +4355.959121 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1356 + 8 +SCHRAFFUR + 10 +10345.417879 + 20 +4355.959121 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1357 + 8 +SCHRAFFUR + 10 +10350.907497 + 20 +4361.139812 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1358 + 8 +SCHRAFFUR + 10 +10355.937709 + 20 +4367.059167 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1359 + 8 +SCHRAFFUR + 10 +10360.608385 + 20 +4373.657295 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +135A + 8 +SCHRAFFUR + 10 +10365.019395 + 20 +4380.874307 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +135B + 8 +SCHRAFFUR + 10 +10369.27061 + 20 +4388.650312 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +135C + 8 +SCHRAFFUR + 10 +10373.461899 + 20 +4396.925419 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +135D + 8 +SCHRAFFUR + 10 +10377.693131 + 20 +4405.63974 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +135E + 8 +SCHRAFFUR + 10 +10382.064178 + 20 +4414.733383 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +135F + 8 +SCHRAFFUR + 10 +10360.758174 + 20 +4368.736177 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1360 + 8 +SCHRAFFUR + 10 +10370.132861 + 20 +4390.03114 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1361 + 8 +SCHRAFFUR + 10 +10382.064178 + 20 +4414.733383 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1362 + 8 +SCHRAFFUR + 0 +POLYLINE + 5 +1363 + 8 +SCHRAFFUR + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +1364 + 8 +SCHRAFFUR + 10 +10341.156658 + 20 +4309.961916 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1365 + 8 +SCHRAFFUR + 10 +10341.156658 + 20 +4309.961916 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1366 + 8 +SCHRAFFUR + 10 +10350.005317 + 20 +4314.542 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1367 + 8 +SCHRAFFUR + 10 +10357.455771 + 20 +4320.888911 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1368 + 8 +SCHRAFFUR + 10 +10363.627865 + 20 +4328.453636 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1369 + 8 +SCHRAFFUR + 10 +10368.641447 + 20 +4336.68716 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +136A + 8 +SCHRAFFUR + 10 +10372.61636 + 20 +4345.040468 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +136B + 8 +SCHRAFFUR + 10 +10375.672451 + 20 +4352.964548 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +136C + 8 +SCHRAFFUR + 10 +10377.929566 + 20 +4359.910384 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +136D + 8 +SCHRAFFUR + 10 +10379.507549 + 20 +4365.328962 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +136E + 8 +SCHRAFFUR + 10 +10366.723884 + 20 +4319.331691 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +136F + 8 +SCHRAFFUR + 10 +10376.098572 + 20 +4353.403775 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1370 + 8 +SCHRAFFUR + 10 +10379.507549 + 20 +4365.328962 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1371 + 8 +SCHRAFFUR + 0 +POLYLINE + 5 +1372 + 8 +SCHRAFFUR + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +1373 + 8 +SCHRAFFUR + 10 +10342.008902 + 20 +4258.002084 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1374 + 8 +SCHRAFFUR + 10 +10342.008902 + 20 +4258.002084 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1375 + 8 +SCHRAFFUR + 10 +10349.171382 + 20 +4262.322634 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1376 + 8 +SCHRAFFUR + 10 +10355.365109 + 20 +4267.491661 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1377 + 8 +SCHRAFFUR + 10 +10360.659991 + 20 +4273.319504 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1378 + 8 +SCHRAFFUR + 10 +10365.125939 + 20 +4279.616506 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1379 + 8 +SCHRAFFUR + 10 +10368.832861 + 20 +4286.193005 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +137A + 8 +SCHRAFFUR + 10 +10371.850668 + 20 +4292.859343 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +137B + 8 +SCHRAFFUR + 10 +10374.249268 + 20 +4299.42586 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +137C + 8 +SCHRAFFUR + 10 +10376.098572 + 20 +4305.702897 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +137D + 8 +SCHRAFFUR + 10 +10362.462662 + 20 +4268.223663 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +137E + 8 +SCHRAFFUR + 10 +10371.83735 + 20 +4289.518691 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +137F + 8 +SCHRAFFUR + 10 +10376.098572 + 20 +4305.702897 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1380 + 8 +SCHRAFFUR + 0 +POLYLINE + 5 +1381 + 8 +SCHRAFFUR + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +1382 + 8 +SCHRAFFUR + 10 +10342.861146 + 20 +4210.301271 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1383 + 8 +SCHRAFFUR + 10 +10342.861146 + 20 +4210.301271 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1384 + 8 +SCHRAFFUR + 10 +10350.235023 + 20 +4214.828117 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1385 + 8 +SCHRAFFUR + 10 +10356.470363 + 20 +4220.003799 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1386 + 8 +SCHRAFFUR + 10 +10361.706987 + 20 +4225.678584 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1387 + 8 +SCHRAFFUR + 10 +10366.084714 + 20 +4231.702742 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1388 + 8 +SCHRAFFUR + 10 +10369.743365 + 20 +4237.926541 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1389 + 8 +SCHRAFFUR + 10 +10372.822759 + 20 +4244.20025 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +138A + 8 +SCHRAFFUR + 10 +10375.462718 + 20 +4250.374139 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +138B + 8 +SCHRAFFUR + 10 +10377.80306 + 20 +4256.298476 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +138C + 8 +SCHRAFFUR + 10 +10364.167151 + 20 +4221.374654 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +138D + 8 +SCHRAFFUR + 10 +10371.83735 + 20 +4240.966074 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +138E + 8 +SCHRAFFUR + 10 +10377.80306 + 20 +4256.298476 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +138F + 8 +SCHRAFFUR + 0 +TEXT + 5 +1390 + 8 +LEGENDE-70 + 10 +13304.009936 + 20 +7784.937687 + 30 +0.0 + 40 +175.0 + 1 +D6 ORTGANG + 0 +ENDSEC + 0 +EOF diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/samples/dxf/hatch_1.dxf b/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/samples/dxf/hatch_1.dxf new file mode 100644 index 00000000..768d654d --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/samples/dxf/hatch_1.dxf @@ -0,0 +1,1816 @@ + 0 +SECTION + 2 +HEADER + 9 +$ACADVER + 1 +AC1014 + 9 +$ACADMAINTVER + 70 + 0 + 9 +$DWGCODEPAGE + 3 +ANSI_1252 + 9 +$INSBASE + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$EXTMIN + 10 +46.500056 + 20 +65.682692 + 30 +0.0 + 9 +$EXTMAX + 10 +349.399865 + 20 +259.875 + 30 +0.0 + 9 +$LIMMIN + 10 +0.0 + 20 +0.0 + 9 +$LIMMAX + 10 +420.0 + 20 +297.0 + 9 +$ORTHOMODE + 70 + 0 + 9 +$REGENMODE + 70 + 1 + 9 +$FILLMODE + 70 + 1 + 9 +$QTEXTMODE + 70 + 0 + 9 +$MIRRTEXT + 70 + 1 + 9 +$DRAGMODE + 70 + 2 + 9 +$LTSCALE + 40 +1.0 + 9 +$OSMODE + 70 + 0 + 9 +$ATTMODE + 70 + 1 + 9 +$TEXTSIZE + 40 +2.5 + 9 +$TRACEWID + 40 +1.0 + 9 +$TEXTSTYLE + 7 +STANDARD + 9 +$CLAYER + 8 +0 + 9 +$CELTYPE + 6 +BYLAYER + 9 +$CECOLOR + 62 + 256 + 9 +$CELTSCALE + 40 +1.0 + 9 +$DELOBJ + 70 + 1 + 9 +$DISPSILH + 70 + 0 + 9 +$DIMSCALE + 40 +1.0 + 9 +$DIMASZ + 40 +2.5 + 9 +$DIMEXO + 40 +0.625 + 9 +$DIMDLI + 40 +3.75 + 9 +$DIMRND + 40 +0.0 + 9 +$DIMDLE + 40 +0.0 + 9 +$DIMEXE + 40 +1.25 + 9 +$DIMTP + 40 +0.0 + 9 +$DIMTM + 40 +0.0 + 9 +$DIMTXT + 40 +2.5 + 9 +$DIMCEN + 40 +2.5 + 9 +$DIMTSZ + 40 +0.0 + 9 +$DIMTOL + 70 + 0 + 9 +$DIMLIM + 70 + 0 + 9 +$DIMTIH + 70 + 0 + 9 +$DIMTOH + 70 + 0 + 9 +$DIMSE1 + 70 + 0 + 9 +$DIMSE2 + 70 + 0 + 9 +$DIMTAD + 70 + 1 + 9 +$DIMZIN + 70 + 8 + 9 +$DIMBLK + 1 + + 9 +$DIMASO + 70 + 1 + 9 +$DIMSHO + 70 + 1 + 9 +$DIMPOST + 1 + + 9 +$DIMAPOST + 1 + + 9 +$DIMALT + 70 + 0 + 9 +$DIMALTD + 70 + 4 + 9 +$DIMALTF + 40 +0.0394 + 9 +$DIMLFAC + 40 +1.0 + 9 +$DIMTOFL + 70 + 1 + 9 +$DIMTVP + 40 +0.0 + 9 +$DIMTIX + 70 + 0 + 9 +$DIMSOXD + 70 + 0 + 9 +$DIMSAH + 70 + 0 + 9 +$DIMBLK1 + 1 + + 9 +$DIMBLK2 + 1 + + 9 +$DIMSTYLE + 2 +STANDARD + 9 +$DIMCLRD + 70 + 0 + 9 +$DIMCLRE + 70 + 0 + 9 +$DIMCLRT + 70 + 0 + 9 +$DIMTFAC + 40 +1.0 + 9 +$DIMGAP + 40 +0.625 + 9 +$DIMJUST + 70 + 0 + 9 +$DIMSD1 + 70 + 0 + 9 +$DIMSD2 + 70 + 0 + 9 +$DIMTOLJ + 70 + 1 + 9 +$DIMTZIN + 70 + 0 + 9 +$DIMALTZ + 70 + 0 + 9 +$DIMALTTZ + 70 + 0 + 9 +$DIMFIT + 70 + 3 + 9 +$DIMUPT + 70 + 0 + 9 +$DIMUNIT + 70 + 8 + 9 +$DIMDEC + 70 + 4 + 9 +$DIMTDEC + 70 + 4 + 9 +$DIMALTU + 70 + 8 + 9 +$DIMALTTD + 70 + 4 + 9 +$DIMTXSTY + 7 +STANDARD + 9 +$DIMAUNIT + 70 + 0 + 9 +$LUNITS + 70 + 2 + 9 +$LUPREC + 70 + 4 + 9 +$SKETCHINC + 40 +1.0 + 9 +$FILLETRAD + 40 +10.0 + 9 +$AUNITS + 70 + 0 + 9 +$AUPREC + 70 + 0 + 9 +$MENU + 1 +. + 9 +$ELEVATION + 40 +0.0 + 9 +$PELEVATION + 40 +0.0 + 9 +$THICKNESS + 40 +0.0 + 9 +$LIMCHECK + 70 + 0 + 9 +$BLIPMODE + 70 + 0 + 9 +$CHAMFERA + 40 +10.0 + 9 +$CHAMFERB + 40 +10.0 + 9 +$CHAMFERC + 40 +20.0 + 9 +$CHAMFERD + 40 +0.0 + 9 +$SKPOLY + 70 + 0 + 9 +$TDCREATE + 40 +2454014.587737731 + 9 +$TDUPDATE + 40 +2454014.589464236 + 9 +$TDINDWG + 40 +0.0017265046 + 9 +$TDUSRTIMER + 40 +0.0017265046 + 9 +$USRTIMER + 70 + 1 + 9 +$ANGBASE + 50 +0.0 + 9 +$ANGDIR + 70 + 0 + 9 +$PDMODE + 70 + 0 + 9 +$PDSIZE + 40 +0.0 + 9 +$PLINEWID + 40 +0.0 + 9 +$COORDS + 70 + 1 + 9 +$SPLFRAME + 70 + 0 + 9 +$SPLINETYPE + 70 + 6 + 9 +$SPLINESEGS + 70 + 8 + 9 +$ATTDIA + 70 + 0 + 9 +$ATTREQ + 70 + 1 + 9 +$HANDLING + 70 + 1 + 9 +$HANDSEED + 5 +3B + 9 +$SURFTAB1 + 70 + 6 + 9 +$SURFTAB2 + 70 + 6 + 9 +$SURFTYPE + 70 + 6 + 9 +$SURFU + 70 + 6 + 9 +$SURFV + 70 + 6 + 9 +$UCSNAME + 2 + + 9 +$UCSORG + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSXDIR + 10 +1.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSYDIR + 10 +0.0 + 20 +1.0 + 30 +0.0 + 9 +$PUCSNAME + 2 + + 9 +$PUCSORG + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSXDIR + 10 +1.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSYDIR + 10 +0.0 + 20 +1.0 + 30 +0.0 + 9 +$USERI1 + 70 + 0 + 9 +$USERI2 + 70 + 0 + 9 +$USERI3 + 70 + 0 + 9 +$USERI4 + 70 + 0 + 9 +$USERI5 + 70 + 0 + 9 +$USERR1 + 40 +0.0 + 9 +$USERR2 + 40 +0.0 + 9 +$USERR3 + 40 +0.0 + 9 +$USERR4 + 40 +0.0 + 9 +$USERR5 + 40 +0.0 + 9 +$WORLDVIEW + 70 + 1 + 9 +$SHADEDGE + 70 + 3 + 9 +$SHADEDIF + 70 + 70 + 9 +$TILEMODE + 70 + 1 + 9 +$MAXACTVP + 70 + 48 + 9 +$PINSBASE + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PLIMCHECK + 70 + 0 + 9 +$PEXTMIN + 10 +1.000000E+20 + 20 +1.000000E+20 + 30 +1.000000E+20 + 9 +$PEXTMAX + 10 +-1.000000E+20 + 20 +-1.000000E+20 + 30 +-1.000000E+20 + 9 +$PLIMMIN + 10 +0.0 + 20 +0.0 + 9 +$PLIMMAX + 10 +420.0 + 20 +297.0 + 9 +$UNITMODE + 70 + 0 + 9 +$VISRETAIN + 70 + 1 + 9 +$PLINEGEN + 70 + 0 + 9 +$PSLTSCALE + 70 + 1 + 9 +$TREEDEPTH + 70 + 3020 + 9 +$PICKSTYLE + 70 + 1 + 9 +$CMLSTYLE + 2 +STANDARD + 9 +$CMLJUST + 70 + 0 + 9 +$CMLSCALE + 40 +20.0 + 9 +$PROXYGRAPHICS + 70 + 1 + 9 +$MEASUREMENT + 70 + 1 + 0 +ENDSEC + 0 +SECTION + 2 +CLASSES + 0 +CLASS + 1 +LWPOLYLINE + 2 +AcDbPolyline + 3 +"AutoCAD" + 90 + 0 +280 + 0 +281 + 1 + 0 +CLASS + 1 +DICTIONARYVAR + 2 +AcDbDictionaryVar + 3 +"AutoCAD" + 90 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +HATCH + 2 +AcDbHatch + 3 +"ACAD_SEDONA" + 90 + 0 +280 + 0 +281 + 1 + 0 +ENDSEC + 0 +SECTION + 2 +TABLES + 0 +TABLE + 2 +VPORT + 5 +8 +100 +AcDbSymbolTable + 70 + 2 + 0 +VPORT + 5 +3A +100 +AcDbSymbolTableRecord +100 +AcDbViewportTableRecord + 2 +*ACTIVE + 70 + 0 + 10 +0.0 + 20 +0.0 + 11 +1.0 + 21 +1.0 + 12 +230.422067 + 22 +148.5 + 13 +0.0 + 23 +0.0 + 14 +10.0 + 24 +10.0 + 15 +10.0 + 25 +10.0 + 16 +0.0 + 26 +0.0 + 36 +1.0 + 17 +0.0 + 27 +0.0 + 37 +0.0 + 40 +297.0 + 41 +1.551664 + 42 +50.0 + 43 +0.0 + 44 +0.0 + 50 +0.0 + 51 +0.0 + 71 + 0 + 72 + 100 + 73 + 1 + 74 + 1 + 75 + 0 + 76 + 0 + 77 + 0 + 78 + 0 + 0 +ENDTAB + 0 +TABLE + 2 +LTYPE + 5 +5 +100 +AcDbSymbolTable + 70 + 1 + 0 +LTYPE + 5 +12 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +BYBLOCK + 70 + 0 + 3 + + 72 + 65 + 73 + 0 + 40 +0.0 + 0 +LTYPE + 5 +13 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +BYLAYER + 70 + 0 + 3 + + 72 + 65 + 73 + 0 + 40 +0.0 + 0 +LTYPE + 5 +14 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +CONTINUOUS + 70 + 0 + 3 +Solid line + 72 + 65 + 73 + 0 + 40 +0.0 + 0 +ENDTAB + 0 +TABLE + 2 +LAYER + 5 +2 +100 +AcDbSymbolTable + 70 + 1 + 0 +LAYER + 5 +E +100 +AcDbSymbolTableRecord +100 +AcDbLayerTableRecord + 2 +0 + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +ENDTAB + 0 +TABLE + 2 +STYLE + 5 +3 +100 +AcDbSymbolTable + 70 + 1 + 0 +STYLE + 5 +F +100 +AcDbSymbolTableRecord +100 +AcDbTextStyleTableRecord + 2 +STANDARD + 70 + 0 + 40 +0.0 + 41 +1.0 + 50 +0.0 + 71 + 0 + 42 +2.5 + 3 +txt + 4 + + 0 +ENDTAB + 0 +TABLE + 2 +VIEW + 5 +6 +100 +AcDbSymbolTable + 70 + 0 + 0 +ENDTAB + 0 +TABLE + 2 +UCS + 5 +7 +100 +AcDbSymbolTable + 70 + 0 + 0 +ENDTAB + 0 +TABLE + 2 +APPID + 5 +9 +100 +AcDbSymbolTable + 70 + 1 + 0 +APPID + 5 +10 +100 +AcDbSymbolTableRecord +100 +AcDbRegAppTableRecord + 2 +ACAD + 70 + 0 + 0 +ENDTAB + 0 +TABLE + 2 +DIMSTYLE + 5 +A +100 +AcDbSymbolTable + 70 + 1 + 0 +DIMSTYLE +105 +1D +100 +AcDbSymbolTableRecord +100 +AcDbDimStyleTableRecord + 2 +STANDARD + 70 + 0 + 3 + + 4 + + 5 + + 6 + + 7 + + 40 +1.0 + 41 +0.18 + 42 +0.0625 + 43 +0.38 + 44 +0.18 + 45 +0.0 + 46 +0.0 + 47 +0.0 + 48 +0.0 +140 +0.18 +141 +0.09 +142 +0.0 +143 +25.4 +144 +1.0 +145 +0.0 +146 +1.0 +147 +0.09 + 71 + 0 + 72 + 0 + 73 + 1 + 74 + 1 + 75 + 0 + 76 + 0 + 77 + 0 + 78 + 0 +170 + 0 +171 + 2 +172 + 0 +173 + 0 +174 + 0 +175 + 0 +176 + 0 +177 + 0 +178 + 0 +270 + 2 +271 + 4 +272 + 4 +273 + 2 +274 + 2 +340 +F +275 + 0 +280 + 0 +281 + 0 +282 + 0 +283 + 1 +284 + 0 +285 + 0 +286 + 0 +287 + 3 +288 + 0 + 0 +ENDTAB + 0 +TABLE + 2 +BLOCK_RECORD + 5 +1 +100 +AcDbSymbolTable + 70 + 0 + 0 +BLOCK_RECORD + 5 +18 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +*MODEL_SPACE + 0 +BLOCK_RECORD + 5 +15 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +*PAPER_SPACE + 0 +ENDTAB + 0 +ENDSEC + 0 +SECTION + 2 +BLOCKS + 0 +BLOCK + 5 +19 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +*MODEL_SPACE + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*MODEL_SPACE + 1 + + 0 +ENDBLK + 5 +1A +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +16 +100 +AcDbEntity + 67 + 1 + 8 +0 +100 +AcDbBlockBegin + 2 +*PAPER_SPACE + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*PAPER_SPACE + 1 + + 0 +ENDBLK + 5 +17 +100 +AcDbEntity + 67 + 1 + 8 +0 +100 +AcDbBlockEnd + 0 +ENDSEC + 0 +SECTION + 2 +ENTITIES + 0 +LWPOLYLINE + 5 +20 +102 +{ACAD_REACTORS +330 +39 +102 +} +100 +AcDbEntity + 8 +0 +100 +AcDbPolyline + 90 + 4 + 70 + 1 + 43 +0.0 + 10 +46.500056 + 20 +259.875 + 10 +349.399865 + 20 +259.875 + 10 +349.399865 + 20 +65.682692 + 10 +46.500056 + 20 +65.682692 + 0 +CIRCLE + 5 +21 +102 +{ACAD_REACTORS +330 +39 +102 +} +100 +AcDbEntity + 8 +0 +100 +AcDbCircle + 10 +79.231939 + 20 +225.086539 + 30 +0.0 + 40 +24.021373 + 0 +ELLIPSE + 5 +22 +102 +{ACAD_REACTORS +330 +39 +102 +} +100 +AcDbEntity + 8 +0 +100 +AcDbEllipse + 10 +218.732109 + 20 +147.721154 + 30 +0.0 + 11 +-25.19835455225825 + 21 +12.98076909778717 + 31 +0.0 +210 +0.0 +220 +0.0 +230 +0.9999999999999998 + 40 +0.3253 + 41 +0.0 + 42 +6.283185307179586 + 0 +HATCH + 5 +39 +100 +AcDbEntity + 8 +0 +100 +AcDbHatch + 10 +0.0 + 20 +0.0 + 30 +0.0 +210 +0.0 +220 +0.0 +230 +1.0 + 2 +AR-RSHKE + 70 + 0 + 71 + 1 + 91 + 3 + 92 + 7 + 72 + 0 + 73 + 1 + 93 + 4 + 10 +349.399864802863 + 20 +259.8750000345757 + 10 +46.50005623029779 + 20 +259.8750000345757 + 10 +46.50005623029779 + 20 +65.682691980556 + 10 +349.3998648028629 + 20 +65.682691980556 + 97 + 1 +330 +20 + 92 + 20 + 93 + 1 + 72 + 3 + 10 +218.732109 + 20 +147.721154 + 11 +-25.198355 + 21 +12.980769 + 40 +0.3253 + 50 +0.0 + 51 +360.0 + 73 + 1 + 97 + 1 +330 +22 + 92 + 22 + 72 + 1 + 73 + 1 + 93 + 2 + 10 +55.21056564949481 + 20 +225.0865387142047 + 42 +-1.0 + 10 +103.2533117502446 + 20 +225.0865387142047 + 42 +-1.0 + 97 + 1 +330 +21 + 75 + 0 + 76 + 1 + 52 +0.0 + 41 +0.1 + 77 + 0 + 78 + 9 + 53 +0.0 + 43 +0.0 + 44 +0.0 + 45 +64.77000000000001 + 46 +30.48 + 79 + 6 + 49 +15.24 + 49 +-12.7 + 49 +17.78 + 49 +-7.62 + 49 +22.86 + 49 +-10.16 + 53 +0.0 + 43 +15.24 + 44 +1.27 + 45 +64.77000000000001 + 46 +30.48 + 79 + 4 + 49 +12.7 + 49 +-48.26 + 49 +10.16 + 49 +-15.24 + 53 +0.0 + 43 +45.72 + 44 +-1.905 + 45 +64.77000000000001 + 46 +30.48 + 79 + 2 + 49 +7.62 + 49 +-78.74 + 53 +90.0 + 43 +0.0 + 44 +0.0 + 45 +-21.59 + 46 +30.48 + 79 + 2 + 49 +29.21 + 49 +-92.71 + 53 +90.0 + 43 +15.24 + 44 +0.0 + 45 +-21.59 + 46 +30.48 + 79 + 2 + 49 +28.575 + 49 +-93.345 + 53 +90.0 + 43 +27.94 + 44 +0.0 + 45 +-21.59 + 46 +30.48 + 79 + 2 + 49 +26.67 + 49 +-95.25 + 53 +90.0 + 43 +45.72 + 44 +-1.905 + 45 +-21.59 + 46 +30.48 + 79 + 2 + 49 +29.21 + 49 +-92.71 + 53 +90.0 + 43 +53.34 + 44 +-1.905 + 45 +-21.59 + 46 +30.48 + 79 + 2 + 49 +29.21 + 49 +-92.71 + 53 +90.0 + 43 +76.2 + 44 +0.0 + 45 +-21.59 + 46 +30.48 + 79 + 2 + 49 +27.94 + 49 +-93.98 + 47 +0.519231 + 98 + 3 + 10 +211.718134 + 20 +222.490385 + 10 +211.718134 + 20 +222.490385 + 10 +211.718134 + 20 +222.490385 + 0 +ENDSEC + 0 +SECTION + 2 +OBJECTS + 0 +DICTIONARY + 5 +C +100 +AcDbDictionary + 3 +ACAD_GROUP +350 +D + 3 +ACAD_MLINESTYLE +350 +1B + 3 +ACDBVARIABLEDICTIONARY +350 +24 + 0 +DICTIONARY + 5 +D +102 +{ACAD_REACTORS +330 +C +102 +} +100 +AcDbDictionary + 0 +DICTIONARY + 5 +1B +102 +{ACAD_REACTORS +330 +C +102 +} +100 +AcDbDictionary + 3 +STANDARD +350 +1C + 0 +DICTIONARY + 5 +24 +102 +{ACAD_REACTORS +330 +C +102 +} +100 +AcDbDictionary + 3 +SORTENTS +350 +25 + 0 +MLINESTYLE + 5 +1C +102 +{ACAD_REACTORS +330 +1B +102 +} +100 +AcDbMlineStyle + 2 +STANDARD + 70 + 0 + 3 + + 62 + 256 + 51 +90.0 + 52 +90.0 + 71 + 2 + 49 +0.5 + 62 + 256 + 6 +BYLAYER + 49 +-0.5 + 62 + 256 + 6 +BYLAYER + 0 +DICTIONARYVAR + 5 +25 +102 +{ACAD_REACTORS +330 +24 +102 +} +100 +DictionaryVariables +280 + 0 + 1 +96 + 0 +ENDSEC + 0 +EOF diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/samples/dxf/hatch_16.dxf b/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/samples/dxf/hatch_16.dxf new file mode 100644 index 00000000..52d690c2 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/samples/dxf/hatch_16.dxf @@ -0,0 +1,4930 @@ + 0 +SECTION + 2 +HEADER + 9 +$ACADVER + 1 +AC1014 + 9 +$ACADMAINTVER + 70 + 0 + 9 +$DWGCODEPAGE + 3 +ANSI_1252 + 9 +$INSBASE + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$EXTMIN + 10 +-0.012816 + 20 +-0.009063 + 30 +-0.001526 + 9 +$EXTMAX + 10 +460.003053 + 20 +260.006425 + 30 +0.0 + 9 +$LIMMIN + 10 +0.0 + 20 +0.0 + 9 +$LIMMAX + 10 +420.0 + 20 +297.0 + 9 +$ORTHOMODE + 70 + 0 + 9 +$REGENMODE + 70 + 1 + 9 +$FILLMODE + 70 + 1 + 9 +$QTEXTMODE + 70 + 0 + 9 +$MIRRTEXT + 70 + 1 + 9 +$DRAGMODE + 70 + 2 + 9 +$LTSCALE + 40 +1.0 + 9 +$OSMODE + 70 + 0 + 9 +$ATTMODE + 70 + 1 + 9 +$TEXTSIZE + 40 +2.5 + 9 +$TRACEWID + 40 +1.0 + 9 +$TEXTSTYLE + 7 +STANDARD + 9 +$CLAYER + 8 +0 + 9 +$CELTYPE + 6 +BYLAYER + 9 +$CECOLOR + 62 + 256 + 9 +$CELTSCALE + 40 +1.0 + 9 +$DELOBJ + 70 + 1 + 9 +$DISPSILH + 70 + 0 + 9 +$DIMSCALE + 40 +1.0 + 9 +$DIMASZ + 40 +2.5 + 9 +$DIMEXO + 40 +0.625 + 9 +$DIMDLI + 40 +3.75 + 9 +$DIMRND + 40 +0.0 + 9 +$DIMDLE + 40 +0.0 + 9 +$DIMEXE + 40 +1.25 + 9 +$DIMTP + 40 +0.0 + 9 +$DIMTM + 40 +0.0 + 9 +$DIMTXT + 40 +2.5 + 9 +$DIMCEN + 40 +2.5 + 9 +$DIMTSZ + 40 +0.0 + 9 +$DIMTOL + 70 + 0 + 9 +$DIMLIM + 70 + 0 + 9 +$DIMTIH + 70 + 0 + 9 +$DIMTOH + 70 + 0 + 9 +$DIMSE1 + 70 + 0 + 9 +$DIMSE2 + 70 + 0 + 9 +$DIMTAD + 70 + 1 + 9 +$DIMZIN + 70 + 8 + 9 +$DIMBLK + 1 + + 9 +$DIMASO + 70 + 1 + 9 +$DIMSHO + 70 + 1 + 9 +$DIMPOST + 1 + + 9 +$DIMAPOST + 1 + + 9 +$DIMALT + 70 + 0 + 9 +$DIMALTD + 70 + 4 + 9 +$DIMALTF + 40 +0.0394 + 9 +$DIMLFAC + 40 +1.0 + 9 +$DIMTOFL + 70 + 1 + 9 +$DIMTVP + 40 +0.0 + 9 +$DIMTIX + 70 + 0 + 9 +$DIMSOXD + 70 + 0 + 9 +$DIMSAH + 70 + 0 + 9 +$DIMBLK1 + 1 + + 9 +$DIMBLK2 + 1 + + 9 +$DIMSTYLE + 2 +STANDARD + 9 +$DIMCLRD + 70 + 0 + 9 +$DIMCLRE + 70 + 0 + 9 +$DIMCLRT + 70 + 0 + 9 +$DIMTFAC + 40 +1.0 + 9 +$DIMGAP + 40 +0.625 + 9 +$DIMJUST + 70 + 0 + 9 +$DIMSD1 + 70 + 0 + 9 +$DIMSD2 + 70 + 0 + 9 +$DIMTOLJ + 70 + 1 + 9 +$DIMTZIN + 70 + 0 + 9 +$DIMALTZ + 70 + 0 + 9 +$DIMALTTZ + 70 + 0 + 9 +$DIMFIT + 70 + 3 + 9 +$DIMUPT + 70 + 0 + 9 +$DIMUNIT + 70 + 8 + 9 +$DIMDEC + 70 + 4 + 9 +$DIMTDEC + 70 + 4 + 9 +$DIMALTU + 70 + 8 + 9 +$DIMALTTD + 70 + 4 + 9 +$DIMTXSTY + 7 +STANDARD + 9 +$DIMAUNIT + 70 + 0 + 9 +$LUNITS + 70 + 2 + 9 +$LUPREC + 70 + 4 + 9 +$SKETCHINC + 40 +1.0 + 9 +$FILLETRAD + 40 +10.0 + 9 +$AUNITS + 70 + 0 + 9 +$AUPREC + 70 + 0 + 9 +$MENU + 1 +. + 9 +$ELEVATION + 40 +0.0 + 9 +$PELEVATION + 40 +0.0 + 9 +$THICKNESS + 40 +0.0 + 9 +$LIMCHECK + 70 + 0 + 9 +$BLIPMODE + 70 + 0 + 9 +$CHAMFERA + 40 +10.0 + 9 +$CHAMFERB + 40 +10.0 + 9 +$CHAMFERC + 40 +20.0 + 9 +$CHAMFERD + 40 +0.0 + 9 +$SKPOLY + 70 + 0 + 9 +$TDCREATE + 40 +2453993.462424306 + 9 +$TDUPDATE + 40 +2453993.471010185 + 9 +$TDINDWG + 40 +0.0085858796 + 9 +$TDUSRTIMER + 40 +0.0085858796 + 9 +$USRTIMER + 70 + 1 + 9 +$ANGBASE + 50 +0.0 + 9 +$ANGDIR + 70 + 0 + 9 +$PDMODE + 70 + 0 + 9 +$PDSIZE + 40 +0.0 + 9 +$PLINEWID + 40 +0.0 + 9 +$COORDS + 70 + 1 + 9 +$SPLFRAME + 70 + 0 + 9 +$SPLINETYPE + 70 + 6 + 9 +$SPLINESEGS + 70 + 8 + 9 +$ATTDIA + 70 + 0 + 9 +$ATTREQ + 70 + 1 + 9 +$HANDLING + 70 + 1 + 9 +$HANDSEED + 5 +74 + 9 +$SURFTAB1 + 70 + 6 + 9 +$SURFTAB2 + 70 + 6 + 9 +$SURFTYPE + 70 + 6 + 9 +$SURFU + 70 + 6 + 9 +$SURFV + 70 + 6 + 9 +$UCSNAME + 2 + + 9 +$UCSORG + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSXDIR + 10 +1.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSYDIR + 10 +0.0 + 20 +1.0 + 30 +0.0 + 9 +$PUCSNAME + 2 + + 9 +$PUCSORG + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSXDIR + 10 +1.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSYDIR + 10 +0.0 + 20 +1.0 + 30 +0.0 + 9 +$USERI1 + 70 + 0 + 9 +$USERI2 + 70 + 0 + 9 +$USERI3 + 70 + 0 + 9 +$USERI4 + 70 + 0 + 9 +$USERI5 + 70 + 0 + 9 +$USERR1 + 40 +0.0 + 9 +$USERR2 + 40 +0.0 + 9 +$USERR3 + 40 +0.0 + 9 +$USERR4 + 40 +0.0 + 9 +$USERR5 + 40 +0.0 + 9 +$WORLDVIEW + 70 + 1 + 9 +$SHADEDGE + 70 + 3 + 9 +$SHADEDIF + 70 + 70 + 9 +$TILEMODE + 70 + 1 + 9 +$MAXACTVP + 70 + 48 + 9 +$PINSBASE + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PLIMCHECK + 70 + 0 + 9 +$PEXTMIN + 10 +1.000000E+20 + 20 +1.000000E+20 + 30 +1.000000E+20 + 9 +$PEXTMAX + 10 +-1.000000E+20 + 20 +-1.000000E+20 + 30 +-1.000000E+20 + 9 +$PLIMMIN + 10 +0.0 + 20 +0.0 + 9 +$PLIMMAX + 10 +420.0 + 20 +297.0 + 9 +$UNITMODE + 70 + 0 + 9 +$VISRETAIN + 70 + 1 + 9 +$PLINEGEN + 70 + 0 + 9 +$PSLTSCALE + 70 + 1 + 9 +$TREEDEPTH + 70 + 3020 + 9 +$PICKSTYLE + 70 + 1 + 9 +$CMLSTYLE + 2 +STANDARD + 9 +$CMLJUST + 70 + 0 + 9 +$CMLSCALE + 40 +20.0 + 9 +$PROXYGRAPHICS + 70 + 1 + 9 +$MEASUREMENT + 70 + 1 + 0 +ENDSEC + 0 +SECTION + 2 +CLASSES + 0 +CLASS + 1 +LWPOLYLINE + 2 +AcDbPolyline + 3 +"AutoCAD" + 90 + 0 +280 + 0 +281 + 1 + 0 +CLASS + 1 +DICTIONARYVAR + 2 +AcDbDictionaryVar + 3 +"AutoCAD" + 90 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +HATCH + 2 +AcDbHatch + 3 +"ACAD_SEDONA" + 90 + 0 +280 + 0 +281 + 1 + 0 +ENDSEC + 0 +SECTION + 2 +TABLES + 0 +TABLE + 2 +VPORT + 5 +8 +100 +AcDbSymbolTable + 70 + 4 + 0 +VPORT + 5 +73 +100 +AcDbSymbolTableRecord +100 +AcDbViewportTableRecord + 2 +*ACTIVE + 70 + 0 + 10 +0.0 + 20 +0.0 + 11 +1.0 + 21 +1.0 + 12 +229.995118 + 22 +178.148646 + 13 +0.0 + 23 +0.0 + 14 +10.0 + 24 +10.0 + 15 +10.0 + 25 +10.0 + 16 +0.0 + 26 +0.0 + 36 +1.0 + 17 +0.0 + 27 +0.0 + 37 +0.0 + 40 +299.676809 + 41 +1.578711 + 42 +50.0 + 43 +0.0 + 44 +0.0 + 50 +0.0 + 51 +0.0 + 71 + 0 + 72 + 100 + 73 + 1 + 74 + 1 + 75 + 0 + 76 + 0 + 77 + 0 + 78 + 0 + 0 +ENDTAB + 0 +TABLE + 2 +LTYPE + 5 +5 +100 +AcDbSymbolTable + 70 + 1 + 0 +LTYPE + 5 +12 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +BYBLOCK + 70 + 0 + 3 + + 72 + 65 + 73 + 0 + 40 +0.0 + 0 +LTYPE + 5 +13 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +BYLAYER + 70 + 0 + 3 + + 72 + 65 + 73 + 0 + 40 +0.0 + 0 +LTYPE + 5 +14 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +CONTINUOUS + 70 + 0 + 3 +Solid line + 72 + 65 + 73 + 0 + 40 +0.0 + 0 +ENDTAB + 0 +TABLE + 2 +LAYER + 5 +2 +100 +AcDbSymbolTable + 70 + 1 + 0 +LAYER + 5 +E +100 +AcDbSymbolTableRecord +100 +AcDbLayerTableRecord + 2 +0 + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +ENDTAB + 0 +TABLE + 2 +STYLE + 5 +3 +100 +AcDbSymbolTable + 70 + 1 + 0 +STYLE + 5 +F +100 +AcDbSymbolTableRecord +100 +AcDbTextStyleTableRecord + 2 +STANDARD + 70 + 0 + 40 +0.0 + 41 +1.0 + 50 +0.0 + 71 + 0 + 42 +2.5 + 3 +txt + 4 + + 0 +ENDTAB + 0 +TABLE + 2 +VIEW + 5 +6 +100 +AcDbSymbolTable + 70 + 0 + 0 +ENDTAB + 0 +TABLE + 2 +UCS + 5 +7 +100 +AcDbSymbolTable + 70 + 0 + 0 +ENDTAB + 0 +TABLE + 2 +APPID + 5 +9 +100 +AcDbSymbolTable + 70 + 1 + 0 +APPID + 5 +10 +100 +AcDbSymbolTableRecord +100 +AcDbRegAppTableRecord + 2 +ACAD + 70 + 0 + 0 +ENDTAB + 0 +TABLE + 2 +DIMSTYLE + 5 +A +100 +AcDbSymbolTable + 70 + 1 + 0 +DIMSTYLE +105 +1D +100 +AcDbSymbolTableRecord +100 +AcDbDimStyleTableRecord + 2 +STANDARD + 70 + 0 + 3 + + 4 + + 5 + + 6 + + 7 + + 40 +1.0 + 41 +0.18 + 42 +0.0625 + 43 +0.38 + 44 +0.18 + 45 +0.0 + 46 +0.0 + 47 +0.0 + 48 +0.0 +140 +0.18 +141 +0.09 +142 +0.0 +143 +25.4 +144 +1.0 +145 +0.0 +146 +1.0 +147 +0.09 + 71 + 0 + 72 + 0 + 73 + 1 + 74 + 1 + 75 + 0 + 76 + 0 + 77 + 0 + 78 + 0 +170 + 0 +171 + 2 +172 + 0 +173 + 0 +174 + 0 +175 + 0 +176 + 0 +177 + 0 +178 + 0 +270 + 2 +271 + 4 +272 + 4 +273 + 2 +274 + 2 +340 +F +275 + 0 +280 + 0 +281 + 0 +282 + 0 +283 + 1 +284 + 0 +285 + 0 +286 + 0 +287 + 3 +288 + 0 + 0 +ENDTAB + 0 +TABLE + 2 +BLOCK_RECORD + 5 +1 +100 +AcDbSymbolTable + 70 + 0 + 0 +BLOCK_RECORD + 5 +18 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +*MODEL_SPACE + 0 +BLOCK_RECORD + 5 +15 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +*PAPER_SPACE + 0 +ENDTAB + 0 +ENDSEC + 0 +SECTION + 2 +BLOCKS + 0 +BLOCK + 5 +19 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +*MODEL_SPACE + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*MODEL_SPACE + 1 + + 0 +ENDBLK + 5 +1A +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +16 +100 +AcDbEntity + 67 + 1 + 8 +0 +100 +AcDbBlockBegin + 2 +*PAPER_SPACE + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*PAPER_SPACE + 1 + + 0 +ENDBLK + 5 +17 +100 +AcDbEntity + 67 + 1 + 8 +0 +100 +AcDbBlockEnd + 0 +ENDSEC + 0 +SECTION + 2 +ENTITIES + 0 +LWPOLYLINE + 5 +31 +102 +{ACAD_REACTORS +330 +6D +102 +} +100 +AcDbEntity + 8 +0 +100 +AcDbPolyline + 90 + 4 + 70 + 1 + 43 +0.0 + 10 +0.0 + 20 +0.0 + 10 +100.0 + 20 +0.0 + 10 +100.0 + 20 +50.0 + 10 +0.0 + 20 +50.0 + 0 +LWPOLYLINE + 5 +41 +102 +{ACAD_REACTORS +330 +62 +102 +} +100 +AcDbEntity + 8 +0 +100 +AcDbPolyline + 90 + 4 + 70 + 1 + 43 +0.0 + 10 +0.0 + 20 +70.0 + 10 +100.0 + 20 +70.0 + 10 +100.0 + 20 +120.0 + 10 +0.0 + 20 +120.0 + 0 +LWPOLYLINE + 5 +42 +102 +{ACAD_REACTORS +330 +5B +102 +} +100 +AcDbEntity + 8 +0 +100 +AcDbPolyline + 90 + 4 + 70 + 1 + 43 +0.0 + 10 +0.0 + 20 +140.0 + 10 +100.0 + 20 +140.0 + 10 +100.0 + 20 +190.0 + 10 +0.0 + 20 +190.0 + 0 +LWPOLYLINE + 5 +43 +102 +{ACAD_REACTORS +330 +52 +102 +} +100 +AcDbEntity + 8 +0 +100 +AcDbPolyline + 90 + 4 + 70 + 1 + 43 +0.0 + 10 +0.0 + 20 +210.0 + 10 +100.0 + 20 +210.0 + 10 +100.0 + 20 +260.0 + 10 +0.0 + 20 +260.0 + 0 +LWPOLYLINE + 5 +44 +102 +{ACAD_REACTORS +330 +6E +102 +} +100 +AcDbEntity + 8 +0 +100 +AcDbPolyline + 90 + 4 + 70 + 1 + 43 +0.0 + 10 +120.0 + 20 +0.0 + 10 +220.0 + 20 +0.0 + 10 +220.0 + 20 +50.0 + 10 +120.0 + 20 +50.0 + 0 +LWPOLYLINE + 5 +45 +102 +{ACAD_REACTORS +330 +66 +102 +} +100 +AcDbEntity + 8 +0 +100 +AcDbPolyline + 90 + 4 + 70 + 1 + 43 +0.0 + 10 +120.0 + 20 +70.0 + 10 +220.0 + 20 +70.0 + 10 +220.0 + 20 +120.0 + 10 +120.0 + 20 +120.0 + 0 +LWPOLYLINE + 5 +46 +102 +{ACAD_REACTORS +330 +5C +102 +} +100 +AcDbEntity + 8 +0 +100 +AcDbPolyline + 90 + 4 + 70 + 1 + 43 +0.0 + 10 +120.0 + 20 +140.0 + 10 +220.0 + 20 +140.0 + 10 +220.0 + 20 +190.0 + 10 +120.0 + 20 +190.0 + 0 +LWPOLYLINE + 5 +47 +102 +{ACAD_REACTORS +330 +53 +102 +} +100 +AcDbEntity + 8 +0 +100 +AcDbPolyline + 90 + 4 + 70 + 1 + 43 +0.0 + 10 +120.0 + 20 +210.0 + 10 +220.0 + 20 +210.0 + 10 +220.0 + 20 +260.0 + 10 +120.0 + 20 +260.0 + 0 +LWPOLYLINE + 5 +48 +102 +{ACAD_REACTORS +330 +70 +102 +} +100 +AcDbEntity + 8 +0 +100 +AcDbPolyline + 90 + 4 + 70 + 1 + 43 +0.0 + 10 +240.0 + 20 +0.0 + 10 +340.0 + 20 +0.0 + 10 +340.0 + 20 +50.0 + 10 +240.0 + 20 +50.0 + 0 +LWPOLYLINE + 5 +49 +102 +{ACAD_REACTORS +330 +68 +102 +} +100 +AcDbEntity + 8 +0 +100 +AcDbPolyline + 90 + 4 + 70 + 1 + 43 +0.0 + 10 +240.0 + 20 +70.0 + 10 +340.0 + 20 +70.0 + 10 +340.0 + 20 +120.0 + 10 +240.0 + 20 +120.0 + 0 +LWPOLYLINE + 5 +4A +102 +{ACAD_REACTORS +330 +5D +102 +} +100 +AcDbEntity + 8 +0 +100 +AcDbPolyline + 90 + 4 + 70 + 1 + 43 +0.0 + 10 +240.0 + 20 +140.0 + 10 +340.0 + 20 +140.0 + 10 +340.0 + 20 +190.0 + 10 +240.0 + 20 +190.0 + 0 +LWPOLYLINE + 5 +4B +102 +{ACAD_REACTORS +330 +54 +102 +} +100 +AcDbEntity + 8 +0 +100 +AcDbPolyline + 90 + 4 + 70 + 1 + 43 +0.0 + 10 +240.0 + 20 +210.0 + 10 +340.0 + 20 +210.0 + 10 +340.0 + 20 +260.0 + 10 +240.0 + 20 +260.0 + 0 +LWPOLYLINE + 5 +4C +102 +{ACAD_REACTORS +330 +71 +102 +} +100 +AcDbEntity + 8 +0 +100 +AcDbPolyline + 90 + 4 + 70 + 1 + 43 +0.0 + 10 +360.0 + 20 +0.0 + 10 +460.0 + 20 +0.0 + 10 +460.0 + 20 +50.0 + 10 +360.0 + 20 +50.0 + 0 +LWPOLYLINE + 5 +4D +102 +{ACAD_REACTORS +330 +6B +102 +} +100 +AcDbEntity + 8 +0 +100 +AcDbPolyline + 90 + 4 + 70 + 1 + 43 +0.0 + 10 +360.0 + 20 +70.0 + 10 +460.0 + 20 +70.0 + 10 +460.0 + 20 +120.0 + 10 +360.0 + 20 +120.0 + 0 +LWPOLYLINE + 5 +4E +102 +{ACAD_REACTORS +330 +60 +102 +} +100 +AcDbEntity + 8 +0 +100 +AcDbPolyline + 90 + 4 + 70 + 1 + 43 +0.0 + 10 +360.0 + 20 +140.0 + 10 +460.0 + 20 +140.0 + 10 +460.0 + 20 +190.0 + 10 +360.0 + 20 +190.0 + 0 +LWPOLYLINE + 5 +4F +102 +{ACAD_REACTORS +330 +57 +102 +} +100 +AcDbEntity + 8 +0 +100 +AcDbPolyline + 90 + 4 + 70 + 1 + 43 +0.0 + 10 +360.0 + 20 +210.0 + 10 +460.0 + 20 +210.0 + 10 +460.0 + 20 +260.0 + 10 +360.0 + 20 +260.0 + 0 +HATCH + 5 +52 +100 +AcDbEntity + 8 +0 +100 +AcDbHatch + 10 +0.0 + 20 +0.0 + 30 +0.0 +210 +0.0 +220 +0.0 +230 +1.0 + 2 +ANGLE + 70 + 0 + 71 + 1 + 91 + 1 + 92 + 1 + 93 + 4 + 72 + 1 + 10 +0.0 + 20 +210.0 + 11 +100.0 + 21 +210.0 + 72 + 1 + 10 +100.0 + 20 +210.0 + 11 +100.0 + 21 +260.0 + 72 + 1 + 10 +100.0 + 20 +260.0 + 11 +0.0 + 21 +260.0 + 72 + 1 + 10 +0.0 + 20 +260.0 + 11 +0.0 + 21 +210.0 + 97 + 1 +330 +43 + 75 + 0 + 76 + 1 + 52 +0.0 + 41 +1.0 + 77 + 0 + 78 + 2 + 53 +0.0 + 43 +0.0 + 44 +0.0 + 45 +0.0 + 46 +6.985 + 79 + 2 + 49 +5.08 + 49 +-1.905 + 53 +90.0 + 43 +0.0 + 44 +0.0 + 45 +-6.985 + 46 +0.0000000000000004 + 79 + 2 + 49 +5.08 + 49 +-1.905 + 98 + 1 + 10 +0.0 + 20 +0.0 + 0 +HATCH + 5 +53 +100 +AcDbEntity + 8 +0 +100 +AcDbHatch + 10 +0.0 + 20 +0.0 + 30 +0.0 +210 +0.0 +220 +0.0 +230 +1.0 + 2 +ANSI31 + 70 + 0 + 71 + 1 + 91 + 1 + 92 + 1 + 93 + 4 + 72 + 1 + 10 +120.0 + 20 +210.0 + 11 +220.0 + 21 +210.0 + 72 + 1 + 10 +220.0 + 20 +210.0 + 11 +220.0 + 21 +260.0 + 72 + 1 + 10 +220.0 + 20 +260.0 + 11 +120.0 + 21 +260.0 + 72 + 1 + 10 +120.0 + 20 +260.0 + 11 +120.0 + 21 +210.0 + 97 + 1 +330 +47 + 75 + 0 + 76 + 1 + 52 +0.0 + 41 +1.0 + 77 + 0 + 78 + 1 + 53 +45.0 + 43 +0.0 + 44 +0.0 + 45 +-2.245064030267287 + 46 +2.245064030267288 + 79 + 0 + 98 + 1 + 10 +0.0 + 20 +0.0 + 0 +HATCH + 5 +54 +100 +AcDbEntity + 8 +0 +100 +AcDbHatch + 10 +0.0 + 20 +0.0 + 30 +0.0 +210 +0.0 +220 +0.0 +230 +1.0 + 2 +ANSI32 + 70 + 0 + 71 + 1 + 91 + 1 + 92 + 1 + 93 + 4 + 72 + 1 + 10 +240.0 + 20 +210.0 + 11 +340.0 + 21 +210.0 + 72 + 1 + 10 +340.0 + 20 +210.0 + 11 +340.0 + 21 +260.0 + 72 + 1 + 10 +340.0 + 20 +260.0 + 11 +240.0 + 21 +260.0 + 72 + 1 + 10 +240.0 + 20 +260.0 + 11 +240.0 + 21 +210.0 + 97 + 1 +330 +4B + 75 + 0 + 76 + 1 + 52 +0.0 + 41 +1.0 + 77 + 0 + 78 + 2 + 53 +45.0 + 43 +0.0 + 44 +0.0 + 45 +-6.735192090801865 + 46 +6.735192090801866 + 79 + 0 + 53 +45.0 + 43 +4.49013 + 44 +0.0 + 45 +-6.735192090801865 + 46 +6.735192090801866 + 79 + 0 + 98 + 1 + 10 +0.0 + 20 +0.0 + 0 +HATCH + 5 +57 +100 +AcDbEntity + 8 +0 +100 +AcDbHatch + 10 +0.0 + 20 +0.0 + 30 +0.0 +210 +0.0 +220 +0.0 +230 +1.0 + 2 +ANSI33 + 70 + 0 + 71 + 1 + 91 + 1 + 92 + 1 + 93 + 4 + 72 + 1 + 10 +360.0 + 20 +210.0 + 11 +460.0 + 21 +210.0 + 72 + 1 + 10 +460.0 + 20 +210.0 + 11 +460.0 + 21 +260.0 + 72 + 1 + 10 +460.0 + 20 +260.0 + 11 +360.0 + 21 +260.0 + 72 + 1 + 10 +360.0 + 20 +260.0 + 11 +360.0 + 21 +210.0 + 97 + 1 +330 +4F + 75 + 0 + 76 + 1 + 52 +0.0 + 41 +1.0 + 77 + 0 + 78 + 2 + 53 +45.0 + 43 +0.0 + 44 +0.0 + 45 +-4.490128060534575 + 46 +4.490128060534576 + 79 + 0 + 53 +45.0 + 43 +4.49013 + 44 +0.0 + 45 +-4.490128060534575 + 46 +4.490128060534576 + 79 + 2 + 49 +3.175 + 49 +-1.5875 + 98 + 1 + 10 +0.0 + 20 +0.0 + 0 +HATCH + 5 +5B +100 +AcDbEntity + 8 +0 +100 +AcDbHatch + 10 +0.0 + 20 +0.0 + 30 +0.0 +210 +0.0 +220 +0.0 +230 +1.0 + 2 +AR-CONC + 70 + 0 + 71 + 1 + 91 + 1 + 92 + 1 + 93 + 4 + 72 + 1 + 10 +0.0 + 20 +140.0 + 11 +100.0 + 21 +140.0 + 72 + 1 + 10 +100.0 + 20 +140.0 + 11 +100.0 + 21 +190.0 + 72 + 1 + 10 +100.0 + 20 +190.0 + 11 +0.0 + 21 +190.0 + 72 + 1 + 10 +0.0 + 20 +190.0 + 11 +0.0 + 21 +140.0 + 97 + 1 +330 +42 + 75 + 0 + 76 + 1 + 52 +0.0 + 41 +0.1 + 77 + 0 + 78 + 13 + 53 +50.0 + 43 +0.0 + 44 +0.0 + 45 +18.2184668996004 + 46 +-1.593908553890308 + 79 + 2 + 49 +1.905 + 49 +-20.955 + 53 +355.0 + 43 +0.0 + 44 +0.0 + 45 +-3.524282597566699 + 46 +19.10566428821799 + 79 + 2 + 49 +1.524 + 49 +-16.764 + 53 +100.451 + 43 +1.5182 + 44 +-0.132825 + 45 +14.69425016659592 + 46 +17.51166878202918 + 79 + 2 + 49 +1.619 + 49 +-17.809 + 53 +46.1842 + 43 +0.0 + 44 +5.08 + 45 +27.10790408921299 + 46 +-4.204232793272715 + 79 + 2 + 49 +2.8575 + 49 +-31.4325 + 53 +96.6356 + 43 +2.25899 + 44 +4.72965 + 45 +23.74042344662371 + 46 +24.74255558900492 + 79 + 2 + 49 +2.4285 + 49 +-26.7135 + 53 +351.184 + 43 +0.0 + 44 +5.08 + 45 +23.74046058139339 + 46 +24.74251178605976 + 79 + 2 + 49 +2.286 + 49 +-25.146 + 53 +21.0 + 43 +2.54 + 44 +3.81 + 45 +15.16148798353833 + 46 +-10.22655185167625 + 79 + 2 + 49 +1.905 + 49 +-20.955 + 53 +326.0 + 43 +2.54 + 44 +3.81 + 45 +6.180202834764707 + 46 +18.41879661223192 + 79 + 2 + 49 +1.524 + 49 +-16.764 + 53 +71.4514 + 43 +3.80345 + 44 +2.95779 + 45 +21.34164907701245 + 46 +8.192285771605744 + 79 + 2 + 49 +1.619 + 49 +-17.809 + 53 +37.5 + 43 +0.0 + 44 +0.0 + 45 +0.3088603250591817 + 46 +8.455503887315311 + 79 + 6 + 49 +0.0 + 49 +-16.5608 + 49 +0.0 + 49 +-17.018 + 49 +0.0 + 49 +-16.8275 + 53 +7.5 + 43 +0.0 + 44 +0.0 + 45 +6.681966251030575 + 46 +10.01805748181195 + 79 + 6 + 49 +0.0 + 49 +-9.7028 + 49 +0.0 + 49 +-16.1798 + 49 +0.0 + 49 +-6.4135 + 53 +327.5 + 43 +-5.6642 + 44 +0.0 + 45 +13.55905951668714 + 46 +-0.5728743992673459 + 79 + 6 + 49 +0.0 + 49 +-6.35 + 49 +0.0 + 49 +-19.812 + 49 +0.0 + 49 +-26.289 + 53 +317.5 + 43 +-8.2042 + 44 +0.0 + 45 +14.8129181386018 + 46 +2.542649103333301 + 79 + 6 + 49 +0.0 + 49 +-8.255 + 49 +0.0 + 49 +-13.1572 + 49 +0.0 + 49 +-18.669 + 98 + 1 + 10 +0.0 + 20 +0.0 + 0 +HATCH + 5 +5C +100 +AcDbEntity + 8 +0 +100 +AcDbHatch + 10 +0.0 + 20 +0.0 + 30 +0.0 +210 +0.0 +220 +0.0 +230 +1.0 + 2 +AR-B816 + 70 + 0 + 71 + 1 + 91 + 1 + 92 + 1 + 93 + 4 + 72 + 1 + 10 +120.0 + 20 +140.0 + 11 +220.0 + 21 +140.0 + 72 + 1 + 10 +220.0 + 20 +140.0 + 11 +220.0 + 21 +190.0 + 72 + 1 + 10 +220.0 + 20 +190.0 + 11 +120.0 + 21 +190.0 + 72 + 1 + 10 +120.0 + 20 +190.0 + 11 +120.0 + 21 +140.0 + 97 + 1 +330 +46 + 75 + 0 + 76 + 1 + 52 +0.0 + 41 +0.1 + 77 + 0 + 78 + 2 + 53 +0.0 + 43 +0.0 + 44 +0.0 + 45 +0.0 + 46 +20.32 + 79 + 0 + 53 +90.0 + 43 +0.0 + 44 +0.0 + 45 +-20.32 + 46 +20.32 + 79 + 2 + 49 +20.32 + 49 +-20.32 + 98 + 1 + 10 +0.0 + 20 +0.0 + 0 +HATCH + 5 +5D +100 +AcDbEntity + 8 +0 +100 +AcDbHatch + 10 +0.0 + 20 +0.0 + 30 +0.0 +210 +0.0 +220 +0.0 +230 +1.0 + 2 +AR-PARQ1 + 70 + 0 + 71 + 1 + 91 + 1 + 92 + 1 + 93 + 4 + 72 + 1 + 10 +240.0 + 20 +140.0 + 11 +340.0 + 21 +140.0 + 72 + 1 + 10 +340.0 + 20 +140.0 + 11 +340.0 + 21 +190.0 + 72 + 1 + 10 +340.0 + 20 +190.0 + 11 +240.0 + 21 +190.0 + 72 + 1 + 10 +240.0 + 20 +190.0 + 11 +240.0 + 21 +140.0 + 97 + 1 +330 +4A + 75 + 0 + 76 + 1 + 52 +0.0 + 41 +0.1 + 77 + 0 + 78 + 14 + 53 +90.0 + 43 +0.0 + 44 +0.0 + 45 +-30.48 + 46 +30.48 + 79 + 2 + 49 +30.48 + 49 +-30.48 + 53 +90.0 + 43 +5.08 + 44 +0.0 + 45 +-30.48 + 46 +30.48 + 79 + 2 + 49 +30.48 + 49 +-30.48 + 53 +90.0 + 43 +10.16 + 44 +0.0 + 45 +-30.48 + 46 +30.48 + 79 + 2 + 49 +30.48 + 49 +-30.48 + 53 +90.0 + 43 +15.24 + 44 +0.0 + 45 +-30.48 + 46 +30.48 + 79 + 2 + 49 +30.48 + 49 +-30.48 + 53 +90.0 + 43 +20.32 + 44 +0.0 + 45 +-30.48 + 46 +30.48 + 79 + 2 + 49 +30.48 + 49 +-30.48 + 53 +90.0 + 43 +25.4 + 44 +0.0 + 45 +-30.48 + 46 +30.48 + 79 + 2 + 49 +30.48 + 49 +-30.48 + 53 +90.0 + 43 +30.48 + 44 +0.0 + 45 +-30.48 + 46 +30.48 + 79 + 2 + 49 +30.48 + 49 +-30.48 + 53 +0.0 + 43 +0.0 + 44 +30.48 + 45 +30.48 + 46 +-30.48 + 79 + 2 + 49 +30.48 + 49 +-30.48 + 53 +0.0 + 43 +0.0 + 44 +35.56 + 45 +30.48 + 46 +-30.48 + 79 + 2 + 49 +30.48 + 49 +-30.48 + 53 +0.0 + 43 +0.0 + 44 +40.64 + 45 +30.48 + 46 +-30.48 + 79 + 2 + 49 +30.48 + 49 +-30.48 + 53 +0.0 + 43 +0.0 + 44 +45.72 + 45 +30.48 + 46 +-30.48 + 79 + 2 + 49 +30.48 + 49 +-30.48 + 53 +0.0 + 43 +0.0 + 44 +50.8 + 45 +30.48 + 46 +-30.48 + 79 + 2 + 49 +30.48 + 49 +-30.48 + 53 +0.0 + 43 +0.0 + 44 +55.88 + 45 +30.48 + 46 +-30.48 + 79 + 2 + 49 +30.48 + 49 +-30.48 + 53 +0.0 + 43 +0.0 + 44 +60.96 + 45 +30.48 + 46 +-30.48 + 79 + 2 + 49 +30.48 + 49 +-30.48 + 98 + 1 + 10 +0.0 + 20 +0.0 + 0 +HATCH + 5 +60 +100 +AcDbEntity + 8 +0 +100 +AcDbHatch + 10 +0.0 + 20 +0.0 + 30 +0.0 +210 +0.0 +220 +0.0 +230 +1.0 + 2 +AR-RROOF + 70 + 0 + 71 + 1 + 91 + 1 + 92 + 1 + 93 + 4 + 72 + 1 + 10 +360.0 + 20 +140.0 + 11 +460.0 + 21 +140.0 + 72 + 1 + 10 +460.0 + 20 +140.0 + 11 +460.0 + 21 +190.0 + 72 + 1 + 10 +460.0 + 20 +190.0 + 11 +360.0 + 21 +190.0 + 72 + 1 + 10 +360.0 + 20 +190.0 + 11 +360.0 + 21 +140.0 + 97 + 1 +330 +4E + 75 + 0 + 76 + 1 + 52 +0.0 + 41 +0.5 + 77 + 0 + 78 + 3 + 53 +0.0 + 43 +0.0 + 44 +0.0 + 45 +27.94 + 46 +12.7 + 79 + 4 + 49 +190.5 + 49 +-25.4 + 49 +63.5 + 49 +-12.7 + 53 +0.0 + 43 +16.891 + 44 +6.35 + 45 +-12.7 + 46 +16.89099999999999 + 79 + 4 + 49 +38.1 + 49 +-4.191 + 49 +76.2 + 49 +-9.525 + 53 +0.0 + 43 +6.35 + 44 +10.795 + 45 +66.04 + 46 +8.509 + 79 + 4 + 49 +101.6 + 49 +-17.78 + 49 +50.8 + 49 +-12.7 + 98 + 1 + 10 +0.0 + 20 +0.0 + 0 +HATCH + 5 +62 +100 +AcDbEntity + 8 +0 +100 +AcDbHatch + 10 +0.0 + 20 +0.0 + 30 +0.0 +210 +0.0 +220 +0.0 +230 +1.0 + 2 +ANSI38 + 70 + 0 + 71 + 1 + 91 + 1 + 92 + 1 + 93 + 4 + 72 + 1 + 10 +0.0 + 20 +70.0 + 11 +100.0 + 21 +70.0 + 72 + 1 + 10 +100.0 + 20 +70.0 + 11 +100.0 + 21 +120.0 + 72 + 1 + 10 +100.0 + 20 +120.0 + 11 +0.0 + 21 +120.0 + 72 + 1 + 10 +0.0 + 20 +120.0 + 11 +0.0 + 21 +70.0 + 97 + 1 +330 +41 + 75 + 0 + 76 + 1 + 52 +0.0 + 41 +1.0 + 77 + 0 + 78 + 2 + 53 +45.0 + 43 +0.0 + 44 +0.0 + 45 +-2.245064030267287 + 46 +2.245064030267288 + 79 + 0 + 53 +135.0 + 43 +0.0 + 44 +0.0 + 45 +-6.735192090801864 + 46 +2.245064030267288 + 79 + 2 + 49 +7.9375 + 49 +-4.7625 + 98 + 1 + 10 +0.0 + 20 +0.0 + 0 +HATCH + 5 +66 +100 +AcDbEntity + 8 +0 +100 +AcDbHatch + 10 +0.0 + 20 +0.0 + 30 +0.0 +210 +0.0 +220 +0.0 +230 +1.0 + 2 +AR-RSHKE + 70 + 0 + 71 + 1 + 91 + 1 + 92 + 1 + 93 + 4 + 72 + 1 + 10 +120.0 + 20 +70.0 + 11 +220.0 + 21 +70.0 + 72 + 1 + 10 +220.0 + 20 +70.0 + 11 +220.0 + 21 +120.0 + 72 + 1 + 10 +220.0 + 20 +120.0 + 11 +120.0 + 21 +120.0 + 72 + 1 + 10 +120.0 + 20 +120.0 + 11 +120.0 + 21 +70.0 + 97 + 1 +330 +45 + 75 + 0 + 76 + 1 + 52 +0.0 + 41 +0.02 + 77 + 0 + 78 + 9 + 53 +0.0 + 43 +0.0 + 44 +0.0 + 45 +12.954 + 46 +6.096 + 79 + 6 + 49 +3.048 + 49 +-2.54 + 49 +3.556 + 49 +-1.524 + 49 +4.572 + 49 +-2.032 + 53 +0.0 + 43 +3.048 + 44 +0.254 + 45 +12.954 + 46 +6.096 + 79 + 4 + 49 +2.54 + 49 +-9.652 + 49 +2.032 + 49 +-3.048 + 53 +0.0 + 43 +9.144 + 44 +-0.381 + 45 +12.954 + 46 +6.096 + 79 + 2 + 49 +1.524 + 49 +-15.748 + 53 +90.0 + 43 +0.0 + 44 +0.0 + 45 +-4.317999999999999 + 46 +6.096 + 79 + 2 + 49 +5.842 + 49 +-18.542 + 53 +90.0 + 43 +3.048 + 44 +0.0 + 45 +-4.317999999999999 + 46 +6.096 + 79 + 2 + 49 +5.715 + 49 +-18.669 + 53 +90.0 + 43 +5.588 + 44 +0.0 + 45 +-4.317999999999999 + 46 +6.096 + 79 + 2 + 49 +5.334 + 49 +-19.05 + 53 +90.0 + 43 +9.144 + 44 +-0.381 + 45 +-4.317999999999999 + 46 +6.096 + 79 + 2 + 49 +5.842 + 49 +-18.542 + 53 +90.0 + 43 +10.668 + 44 +-0.381 + 45 +-4.317999999999999 + 46 +6.096 + 79 + 2 + 49 +5.842 + 49 +-18.542 + 53 +90.0 + 43 +15.24 + 44 +0.0 + 45 +-4.317999999999999 + 46 +6.096 + 79 + 2 + 49 +5.588 + 49 +-18.796 + 98 + 1 + 10 +0.0 + 20 +0.0 + 0 +HATCH + 5 +68 +100 +AcDbEntity + 8 +0 +100 +AcDbHatch + 10 +0.0 + 20 +0.0 + 30 +0.0 +210 +0.0 +220 +0.0 +230 +1.0 + 2 +ESCHER + 70 + 0 + 71 + 1 + 91 + 1 + 92 + 1 + 93 + 4 + 72 + 1 + 10 +240.0 + 20 +70.0 + 11 +340.0 + 21 +70.0 + 72 + 1 + 10 +340.0 + 20 +70.0 + 11 +340.0 + 21 +120.0 + 72 + 1 + 10 +340.0 + 20 +120.0 + 11 +240.0 + 21 +120.0 + 72 + 1 + 10 +240.0 + 20 +120.0 + 11 +240.0 + 21 +70.0 + 97 + 1 +330 +49 + 75 + 0 + 76 + 1 + 52 +0.0 + 41 +1.0 + 77 + 0 + 78 + 21 + 53 +60.0 + 43 +0.0 + 44 +0.0 + 45 +-30.48003957099593 + 46 +0.0000228463251588 + 79 + 2 + 49 +27.94 + 49 +-2.54 + 53 +180.0 + 43 +0.0 + 44 +0.0 + 45 +15.23999999999999 + 46 +-26.3965 + 79 + 2 + 49 +27.94 + 49 +-2.54 + 53 +300.0 + 43 +0.0 + 44 +0.0 + 45 +30.48003957099593 + 46 +0.0000228463251588 + 79 + 2 + 49 +27.94 + 49 +-2.54 + 53 +60.0 + 43 +2.54 + 44 +0.0 + 45 +-30.48003957099593 + 46 +0.0000228463251588 + 79 + 2 + 49 +5.08 + 49 +-25.4 + 53 +300.0 + 43 +2.54 + 44 +0.0 + 45 +30.48003957099593 + 46 +0.0000228463251588 + 79 + 2 + 49 +5.08 + 49 +-25.4 + 53 +60.0 + 43 +-1.27 + 44 +2.1997 + 45 +-30.48003957099593 + 46 +0.0000228463251588 + 79 + 2 + 49 +5.08 + 49 +-25.4 + 53 +180.0 + 43 +-1.27 + 44 +2.1997 + 45 +15.23999999999999 + 46 +-26.3965 + 79 + 2 + 49 +5.08 + 49 +-25.4 + 53 +300.0 + 43 +-1.27 + 44 +-2.1997 + 45 +30.48003957099593 + 46 +0.0000228463251588 + 79 + 2 + 49 +5.08 + 49 +-25.4 + 53 +180.0 + 43 +-1.27 + 44 +-2.1997 + 45 +15.23999999999999 + 46 +-26.3965 + 79 + 2 + 49 +5.08 + 49 +-25.4 + 53 +60.0 + 43 +-10.16 + 44 +0.0 + 45 +-30.48003957099593 + 46 +0.0000228463251588 + 79 + 2 + 49 +5.08 + 49 +-25.4 + 53 +300.0 + 43 +-10.16 + 44 +0.0 + 45 +30.48003957099593 + 46 +0.0000228463251588 + 79 + 2 + 49 +5.08 + 49 +-25.4 + 53 +60.0 + 43 +5.08 + 44 +-8.79882 + 45 +-30.48003957099593 + 46 +0.0000228463251588 + 79 + 2 + 49 +5.08 + 49 +-25.4 + 53 +180.0 + 43 +5.08 + 44 +-8.79882 + 45 +15.23999999999999 + 46 +-26.3965 + 79 + 2 + 49 +5.08 + 49 +-25.4 + 53 +300.0 + 43 +5.08 + 44 +8.79882 + 45 +30.48003957099593 + 46 +0.0000228463251588 + 79 + 2 + 49 +5.08 + 49 +-25.4 + 53 +180.0 + 43 +5.08 + 44 +8.79882 + 45 +15.23999999999999 + 46 +-26.3965 + 79 + 2 + 49 +5.08 + 49 +-25.4 + 53 +0.0 + 43 +5.08 + 44 +4.39941 + 45 +-15.24 + 46 +26.3965 + 79 + 2 + 49 +17.78 + 49 +-12.7 + 53 +0.0 + 43 +5.08 + 44 +-4.39941 + 45 +-15.24 + 46 +26.3965 + 79 + 2 + 49 +17.78 + 49 +-12.7 + 53 +120.0 + 43 +1.27 + 44 +6.59911 + 45 +-30.48003957099593 + 46 +-0.0000228463251482 + 79 + 2 + 49 +17.78 + 49 +-12.7 + 53 +120.0 + 43 +-6.35 + 44 +2.1997 + 45 +-30.48003957099593 + 46 +-0.0000228463251482 + 79 + 2 + 49 +17.78 + 49 +-12.7 + 53 +240.0 + 43 +-6.35 + 44 +-2.1997 + 45 +15.24003957099592 + 46 +-26.39647715367485 + 79 + 2 + 49 +17.78 + 49 +-12.7 + 53 +240.0 + 43 +1.27 + 44 +-6.59911 + 45 +15.24003957099592 + 46 +-26.39647715367485 + 79 + 2 + 49 +17.78 + 49 +-12.7 + 98 + 1 + 10 +0.0 + 20 +0.0 + 0 +HATCH + 5 +6B +100 +AcDbEntity + 8 +0 +100 +AcDbHatch + 10 +0.0 + 20 +0.0 + 30 +0.0 +210 +0.0 +220 +0.0 +230 +1.0 + 2 +HONEY + 70 + 0 + 71 + 1 + 91 + 1 + 92 + 1 + 93 + 4 + 72 + 1 + 10 +360.0 + 20 +70.0 + 11 +460.0 + 21 +70.0 + 72 + 1 + 10 +460.0 + 20 +70.0 + 11 +460.0 + 21 +120.0 + 72 + 1 + 10 +460.0 + 20 +120.0 + 11 +360.0 + 21 +120.0 + 72 + 1 + 10 +360.0 + 20 +120.0 + 11 +360.0 + 21 +70.0 + 97 + 1 +330 +4D + 75 + 0 + 76 + 1 + 52 +0.0 + 41 +3.0 + 77 + 0 + 78 + 3 + 53 +0.0 + 43 +0.0 + 44 +0.0 + 45 +14.2875 + 46 +8.248889999999999 + 79 + 2 + 49 +9.525 + 49 +-19.05 + 53 +120.0 + 43 +0.0 + 44 +0.0 + 45 +-14.28749829302341 + 46 +8.248892956570172 + 79 + 2 + 49 +9.525 + 49 +-19.05 + 53 +60.0 + 43 +0.0 + 44 +0.0 + 45 +0.0000017069765841 + 46 +16.49778295657016 + 79 + 2 + 49 +-19.05 + 49 +9.525 + 98 + 1 + 10 +0.0 + 20 +0.0 + 0 +HATCH + 5 +6D +100 +AcDbEntity + 8 +0 +100 +AcDbHatch + 10 +0.0 + 20 +0.0 + 30 +0.0 +210 +0.0 +220 +0.0 +230 +1.0 + 2 +STARS + 70 + 0 + 71 + 1 + 91 + 1 + 92 + 1 + 93 + 4 + 72 + 1 + 10 +0.0 + 20 +0.0 + 11 +100.0 + 21 +0.0 + 72 + 1 + 10 +100.0 + 20 +0.0 + 11 +100.0 + 21 +50.0 + 72 + 1 + 10 +100.0 + 20 +50.0 + 11 +0.0 + 21 +50.0 + 72 + 1 + 10 +0.0 + 20 +50.0 + 11 +0.0 + 21 +0.0 + 97 + 1 +330 +31 + 75 + 0 + 76 + 1 + 52 +0.0 + 41 +1.0 + 77 + 0 + 78 + 3 + 53 +0.0 + 43 +0.0 + 44 +0.0 + 45 +0.0 + 46 +5.499259999999999 + 79 + 2 + 49 +3.175 + 49 +-3.175 + 53 +60.0 + 43 +0.0 + 44 +0.0 + 45 +-4.762498862015611 + 46 +2.74963 + 79 + 2 + 49 +3.175 + 49 +-3.175 + 53 +120.0 + 43 +1.5875 + 44 +2.74963 + 45 +-4.762498862015611 + 46 +-2.749629999999998 + 79 + 2 + 49 +3.175 + 49 +-3.175 + 98 + 1 + 10 +0.0 + 20 +0.0 + 0 +HATCH + 5 +6E +100 +AcDbEntity + 8 +0 +100 +AcDbHatch + 10 +0.0 + 20 +0.0 + 30 +0.0 +210 +0.0 +220 +0.0 +230 +1.0 + 2 +ZIGZAG + 70 + 0 + 71 + 1 + 91 + 1 + 92 + 1 + 93 + 4 + 72 + 1 + 10 +120.0 + 20 +0.0 + 11 +220.0 + 21 +0.0 + 72 + 1 + 10 +220.0 + 20 +0.0 + 11 +220.0 + 21 +50.0 + 72 + 1 + 10 +220.0 + 20 +50.0 + 11 +120.0 + 21 +50.0 + 72 + 1 + 10 +120.0 + 20 +50.0 + 11 +120.0 + 21 +0.0 + 97 + 1 +330 +44 + 75 + 0 + 76 + 1 + 52 +0.0 + 41 +1.0 + 77 + 0 + 78 + 2 + 53 +0.0 + 43 +0.0 + 44 +0.0 + 45 +3.174999999999999 + 46 +3.174999999999999 + 79 + 2 + 49 +3.175 + 49 +-3.175 + 53 +90.0 + 43 +3.175 + 44 +0.0 + 45 +-3.174999999999999 + 46 +3.174999999999999 + 79 + 2 + 49 +3.175 + 49 +-3.175 + 98 + 1 + 10 +0.0 + 20 +0.0 + 0 +HATCH + 5 +70 +100 +AcDbEntity + 8 +0 +100 +AcDbHatch + 10 +0.0 + 20 +0.0 + 30 +0.0 +210 +0.0 +220 +0.0 +230 +1.0 + 2 +HOUND + 70 + 0 + 71 + 1 + 91 + 1 + 92 + 1 + 93 + 4 + 72 + 1 + 10 +240.0 + 20 +0.0 + 11 +340.0 + 21 +0.0 + 72 + 1 + 10 +340.0 + 20 +0.0 + 11 +340.0 + 21 +50.0 + 72 + 1 + 10 +340.0 + 20 +50.0 + 11 +240.0 + 21 +50.0 + 72 + 1 + 10 +240.0 + 20 +50.0 + 11 +240.0 + 21 +0.0 + 97 + 1 +330 +48 + 75 + 0 + 76 + 1 + 52 +0.0 + 41 +2.0 + 77 + 0 + 78 + 2 + 53 +0.0 + 43 +0.0 + 44 +0.0 + 45 +12.7 + 46 +3.174999999999999 + 79 + 2 + 49 +50.8 + 49 +-25.4 + 53 +90.0 + 43 +0.0 + 44 +0.0 + 45 +-3.175 + 46 +-12.7 + 79 + 2 + 49 +50.8 + 49 +-25.4 + 98 + 1 + 10 +0.0 + 20 +0.0 + 0 +HATCH + 5 +71 +100 +AcDbEntity + 8 +0 +100 +AcDbHatch + 10 +0.0 + 20 +0.0 + 30 +0.0 +210 +0.0 +220 +0.0 +230 +1.0 + 2 +NET3 + 70 + 0 + 71 + 1 + 91 + 1 + 92 + 1 + 93 + 4 + 72 + 1 + 10 +360.0 + 20 +0.0 + 11 +460.0 + 21 +0.0 + 72 + 1 + 10 +460.0 + 20 +0.0 + 11 +460.0 + 21 +50.0 + 72 + 1 + 10 +460.0 + 20 +50.0 + 11 +360.0 + 21 +50.0 + 72 + 1 + 10 +360.0 + 20 +50.0 + 11 +360.0 + 21 +0.0 + 97 + 1 +330 +4C + 75 + 0 + 76 + 1 + 52 +0.0 + 41 +2.0 + 77 + 0 + 78 + 3 + 53 +0.0 + 43 +0.0 + 44 +0.0 + 45 +0.0 + 46 +6.349999999999999 + 79 + 0 + 53 +60.0 + 43 +0.0 + 44 +0.0 + 45 +-5.499261314031184 + 46 +3.175 + 79 + 0 + 53 +120.0 + 43 +0.0 + 44 +0.0 + 45 +-5.499261314031185 + 46 +-3.174999999999998 + 79 + 0 + 98 + 1 + 10 +0.0 + 20 +0.0 + 0 +ENDSEC + 0 +SECTION + 2 +OBJECTS + 0 +DICTIONARY + 5 +C +100 +AcDbDictionary + 3 +ACAD_GROUP +350 +D + 3 +ACAD_MLINESTYLE +350 +1B + 3 +ACDBVARIABLEDICTIONARY +350 +50 + 0 +DICTIONARY + 5 +D +102 +{ACAD_REACTORS +330 +C +102 +} +100 +AcDbDictionary + 0 +DICTIONARY + 5 +1B +102 +{ACAD_REACTORS +330 +C +102 +} +100 +AcDbDictionary + 3 +STANDARD +350 +1C + 0 +DICTIONARY + 5 +50 +102 +{ACAD_REACTORS +330 +C +102 +} +100 +AcDbDictionary + 3 +SORTENTS +350 +51 + 0 +MLINESTYLE + 5 +1C +102 +{ACAD_REACTORS +330 +1B +102 +} +100 +AcDbMlineStyle + 2 +STANDARD + 70 + 0 + 3 + + 62 + 256 + 51 +90.0 + 52 +90.0 + 71 + 2 + 49 +0.5 + 62 + 256 + 6 +BYLAYER + 49 +-0.5 + 62 + 256 + 6 +BYLAYER + 0 +DICTIONARYVAR + 5 +51 +102 +{ACAD_REACTORS +330 +50 +102 +} +100 +DictionaryVariables +280 + 0 + 1 +96 + 0 +ENDSEC + 0 +EOF diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node.exe b/extensions/fablabchemnitz/dxf_dwg_importer/node.exe new file mode 100644 index 00000000..3022cf65 Binary files /dev/null and b/extensions/fablabchemnitz/dxf_dwg_importer/node.exe differ diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/.eslintrc.json b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/.eslintrc.json new file mode 100644 index 00000000..d602b539 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/.eslintrc.json @@ -0,0 +1,39 @@ +{ + "env": { + "browser": true, + "es6": true, + "node": true + }, + "extends": [ + "plugin:react/recommended", "standard", "standard-react" + ], + "globals": { + "Atomics": "readonly", + "SharedArrayBuffer": "readonly", + "describe": "readonly", + "it": "readonly", + "before": "readonly", + "after": "readonly", + "beforeEach": "readonly", + "afterEach": "readonly" + }, + "parserOptions": { + "ecmaFeatures": { + "jsx": true + }, + "ecmaVersion": 2018, + "sourceType": "module" + }, + "plugins": [ + "react", "babel" + ], + "parser": "babel-eslint", + "rules": { + "jest/valid-describe": 0 + }, + "settings": { + "react": { + "version": "detect" + } + } +} diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/.travis.yml b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/.travis.yml new file mode 100644 index 00000000..4a2d9cf7 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/.travis.yml @@ -0,0 +1,6 @@ +language: node_js +node_js: + - "8" + - "10" +install: npm install +sudo: false diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/LICENSE b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/LICENSE new file mode 100644 index 00000000..9776255f --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014-2018 Ben Nortier + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/README.md b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/README.md new file mode 100644 index 00000000..f4babdc6 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/README.md @@ -0,0 +1,126 @@ +[![Build Status](https://travis-ci.org/bjnortier/dxf.svg?branch=master)](https://travis-ci.org/bjnortier/dxf) + +# dxf + +DXF parser for node/browser. + +Uses several ES6 features in the source code (import, classes, let, const, arrows) but is packaged using babel so you can use it legacy JS environments. + +Version 2.0 is a complete rewrite from the first attempt to write it in a SAX style, which wasn't really appropriate for a document with nested references (e.g inserts referencing blocks, nested inserts). + +Version 3.0 converted the codebase to use [standard JS](https://standardjs.com), ES6 imports, stopped using Gulp, and updated & removed some dependencies. + +Version 4.x is in progress and the aim is to use native SVG elements where possible, e.g. ``, `` etc. 4.0 introduces the `` element. + +At this point in time, the important geometric entities are supported, but notably: + + * MTEXT + * DIMENSION + * STYLE + * HATCH + +and some others are **parsed**, but are **not supported for SVG rendering** (see section below on SVG rendering) + +## Getting started + +There is an ES5 and ES6 example in the ```examples/``` directory that show how to use the library. There are exposed functions for advanced users, but for the majority of users you can use the `Helper` object to get the data you're interested in (or convert to SVG): + +``` +const helper = new Helper() + +// The 1-to-1 object representation of the DXF +console.log('parsed:', helper.parsed) + +// Denormalised blocks inserted with transforms applied +console.log('denormalised:', helper.denormalised) + +// Create an SVG +console.log('svg:', helper.toSVG()) + +// Create polylines (e.g. to render in WebGL) +console.log('polylines:', helper.toPolylines()) +``` + +## Running the Examples + +Node ES5. Will write an SVG to `examples/example.es5.svg`: + +``` +$ node examples/example.es5.js +``` + +Node ES6. Will write an SVG to `examples/example.es6.svg`: + +``` +$ npx babel-node examples/example.es6.js +``` + +Browser. Compile to a browser bundle and open the example webpage: + +``` +$ npm run compile +$ open examples/dxf.html +``` + +## SVG + +Geometric elements are supported, but dimensions, text, hatches and styles (except for line colors) are ***not***. + +Native SVG elements are used as far as possible for curved entities (``, `` etc.), ***except for the SPLINE entity***, which is interpolated. + +Here's an example you will find in the functional test output: + +![svg example image](https://cloud.githubusercontent.com/assets/57994/17583566/e00f5d78-5fb1-11e6-9030-55686f980e6f.png) + +## Interpolation + +The library supports outputting DXFs as interpolated polylines for custom rendering (e.g. WebGL) or other applications, by using: + + +``` +> helper.toPolylines() +``` + + +## Command line + +There is a command-line utility (courtesy of [@Joge97](https://github.com/Joge97)) for converting DXF files to SVG: + +``` +$ npm i -g dxf +$ dxf-to-svg + + Usage: dxf-to-svg [options] [svgFile] + + Converts a dxf file to a svg file. + + Options: + + -V, --version output the version number + -v --verbose Verbose output + -h, --help output usage information +``` + +## Tests + +Running + +```$ npm test``` + +will execute the unit tests. + +```$ npm run test:functional``` will run the functional tests in a browser. Please open `toSVG.html` when the file listing loads in the browser (or open `http://localhost:8030/toSVG.html#/`). + +### Contributors + +- Liam Mitchell https://github.com/LiamKarlMitchell +- Artur Zochniak https://github.com/arjamizo +- Andy Werner https://github.com/Gallore +- Ivan Baktsheev https://github.com/apla +- Jeff Chen https://github.com/jeffontheground +- Markko Paas https://github.com/markkopaas +- Kim Lokøy https://github.com/klokoy +- Erik Söhnel https://github.com/hoeck +- Teja https://github.com/hungerpirat +- Jakob Pallhuber https://github.com/Joge97 +- Eric Mansfield https://github.com/ericman314 diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/RELEASE.md b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/RELEASE.md new file mode 100644 index 00000000..e6a35bf3 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/RELEASE.md @@ -0,0 +1,41 @@ +4.3.0 +- #51 Fix bug when transforming empty bounding box + +4.2.4 +- #50 Fix knot piecewise beziers + +4.2.3 +- More accurate bounding boxes for arcs and ellipses (#48) + +4.2.2 +- Bump eslint-utils from 1.3.1 to 1.4.2 +- Add HATCH to unsupported SVG entities in README + +4.2.1 +- Use main lodash package due to security issue(s) + +4.2.0 +- README updates + +4.1.1 +- #issue42 support entities that have extrusionZ === -1 defined on the entity itself (as opposed to the transform). + +4.1.0 +- CIRCLE DXF entities now produce native SVG elements. +- ELLIPSE DXF entities now produce native or SVG elements. +- ARC DXF entities now produce native or SVG elements. + +4.0.1 +- Browser example uses Helper + +4.0.0 +- Use ES6 string interpolation in SVG generation. +- Use native SVG elements for CIRCLE entities. +- Use SVG elements with a transform attribute for native and interpolated entities. +- Add a Helper object to simplify the workflow. +- The SVG output uses a root transform to flip the Y coordinates. + +3.6.0 +- NPM audit fixes. +- Remove support for Node v6 in Travis. +- Node engine is now >= 8.9.0. diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/dist/dxf.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/dist/dxf.js new file mode 100644 index 00000000..f2af7e10 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/dist/dxf.js @@ -0,0 +1,21602 @@ +(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.dxf = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i 1 || columnCount > 1) { + var cos = Math.cos(rotation * Math.PI / 180); + var sin = Math.sin(rotation * Math.PI / 180); + rowVec = { + x: -sin * rowSpacing, + y: cos * rowSpacing + }; + colVec = { + x: cos * columnSpacing, + y: sin * columnSpacing + }; + } else { + rowVec = { + x: 0, + y: 0 + }; + colVec = { + x: 0, + y: 0 + }; + } // For rectangular arrays, add the block entities for each location in the array + + + for (var r = 0; r < rowCount; r++) { + for (var c = 0; c < columnCount; c++) { + // Adjust insert transform by row and column for rectangular arrays + var t = { + x: insert.x + rowVec.x * r + colVec.x * c, + y: insert.y + rowVec.y * r + colVec.y * c, + scaleX: insert.scaleX, + scaleY: insert.scaleY, + scaleZ: insert.scaleZ, + extrusionX: insert.extrusionX, + extrusionY: insert.extrusionY, + extrusionZ: insert.extrusionZ, + rotation: insert.rotation + }; // Add the insert transform and recursively add entities + + var transforms2 = transforms.slice(0); + transforms2.push(t); // Use the insert layer + + var blockEntities = block.entities.map(function (be) { + var be2 = (0, _lodash.cloneDeep)(be); + be2.layer = insert.layer; // https://github.com/bjnortier/dxf/issues/52 + // See Issue 52. If we don't modify the + // entity coordinates here it creates an issue with the + // transformation matrices (which are only applied AFTER + // block insertion modifications has been applied). + + switch (be2.type) { + case 'LINE': + { + be2.start.x -= block.x; + be2.start.y -= block.y; + be2.end.x -= block.x; + be2.end.y -= block.y; + break; + } + + case 'LWPOLYLINE': + case 'POLYLINE': + { + be2.vertices.forEach(function (v) { + v.x -= block.x; + v.y -= block.y; + }); + break; + } + + case 'CIRCLE': + case 'ELLIPSE': + case 'ARC': + { + be2.x -= block.x; + be2.y -= block.y; + break; + } + + case 'SPLINE': + { + be2.controlPoints.forEach(function (cp) { + cp.x -= block.x; + cp.y -= block.y; + }); + break; + } + } + + return be2; + }); + current = current.concat(gatherEntities(blockEntities, transforms2)); + } + } + }(); + + if (_typeof(_ret) === "object") return _ret.v; + } else { + // Top-level entity. Clone and add the transforms + // The transforms are reversed so they occur in + // order of application - i.e. the transform of the + // top-level insert is applied last + var e2 = (0, _lodash.cloneDeep)(e); + e2.transforms = transforms.slice().reverse(); + current.push(e2); + } + }); + return current; + }; + + return gatherEntities(parseResult.entities, []); +}; + +exports["default"] = _default; +},{"./util/logger":34,"lodash":39}],5:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = exports.interpolateBSpline = void 0; + +var _bSpline = _interopRequireDefault(require("./util/bSpline")); + +var _logger = _interopRequireDefault(require("./util/logger")); + +var _createArcForLWPolyline = _interopRequireDefault(require("./util/createArcForLWPolyline")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +/** + * Rotate a set of points. + * + * @param points the points + * @param angle the rotation angle + */ +var rotate = function rotate(points, angle) { + return points.map(function (p) { + return [p[0] * Math.cos(angle) - p[1] * Math.sin(angle), p[1] * Math.cos(angle) + p[0] * Math.sin(angle)]; + }); +}; +/** + * Interpolate an ellipse + * @param cx center X + * @param cy center Y + * @param rx radius X + * @param ry radius Y + * @param start start angle in radians + * @param start end angle in radians + */ + + +var interpolateEllipse = function interpolateEllipse(cx, cy, rx, ry, start, end, rotationAngle) { + if (end < start) { + end += Math.PI * 2; + } // ----- Relative points ----- + // Start point + + + var points = []; + var dTheta = Math.PI * 2 / 72; + var EPS = 1e-6; + + for (var theta = start; theta < end - EPS; theta += dTheta) { + points.push([Math.cos(theta) * rx, Math.sin(theta) * ry]); + } + + points.push([Math.cos(end) * rx, Math.sin(end) * ry]); // ----- Rotate ----- + + if (rotationAngle) { + points = rotate(points, rotationAngle); + } // ----- Offset center ----- + + + points = points.map(function (p) { + return [cx + p[0], cy + p[1]]; + }); + return points; +}; +/** + * Interpolate a b-spline. The algorithm examins the knot vector + * to create segments for interpolation. The parameterisation value + * is re-normalised back to [0,1] as that is what the lib expects ( + * and t i de-normalised in the b-spline library) + * + * @param controlPoints the control points + * @param degree the b-spline degree + * @param knots the knot vector + * @returns the polyline + */ + + +var interpolateBSpline = function interpolateBSpline(controlPoints, degree, knots, interpolationsPerSplineSegment) { + var polyline = []; + var controlPointsForLib = controlPoints.map(function (p) { + return [p.x, p.y]; + }); + var segmentTs = [knots[degree]]; + var domain = [knots[degree], knots[knots.length - 1 - degree]]; + + for (var k = degree + 1; k < knots.length - degree; ++k) { + if (segmentTs[segmentTs.length - 1] !== knots[k]) { + segmentTs.push(knots[k]); + } + } + + interpolationsPerSplineSegment = interpolationsPerSplineSegment || 25; + + for (var i = 1; i < segmentTs.length; ++i) { + var uMin = segmentTs[i - 1]; + var uMax = segmentTs[i]; + + for (var _k = 0; _k <= interpolationsPerSplineSegment; ++_k) { + var u = _k / interpolationsPerSplineSegment * (uMax - uMin) + uMin; // Clamp t to 0, 1 to handle numerical precision issues + + var t = (u - domain[0]) / (domain[1] - domain[0]); + t = Math.max(t, 0); + t = Math.min(t, 1); + var p = (0, _bSpline["default"])(t, degree, controlPointsForLib, knots); + polyline.push(p); + } + } + + return polyline; +}; +/** + * Convert a parsed DXF entity to a polyline. These can be used to render the + * the DXF in SVG, Canvas, WebGL etc., without depending on native support + * of primitive objects (ellispe, spline etc.) + */ + + +exports.interpolateBSpline = interpolateBSpline; + +var _default = function _default(entity, options) { + options = options || {}; + var polyline; + + if (entity.type === 'LINE') { + polyline = [[entity.start.x, entity.start.y], [entity.end.x, entity.end.y]]; + } + + if (entity.type === 'LWPOLYLINE' || entity.type === 'POLYLINE') { + polyline = []; + + if (entity.polygonMesh || entity.polyfaceMesh) {// Do not attempt to render meshes + } else if (entity.vertices.length) { + if (entity.closed) { + entity.vertices = entity.vertices.concat(entity.vertices[0]); + } + + for (var i = 0, il = entity.vertices.length; i < il - 1; ++i) { + var from = [entity.vertices[i].x, entity.vertices[i].y]; + var to = [entity.vertices[i + 1].x, entity.vertices[i + 1].y]; + polyline.push(from); + + if (entity.vertices[i].bulge) { + polyline = polyline.concat((0, _createArcForLWPolyline["default"])(from, to, entity.vertices[i].bulge)); + } // The last iteration of the for loop + + + if (i === il - 2) { + polyline.push(to); + } + } + } else { + _logger["default"].warn('Polyline entity with no vertices'); + } + } + + if (entity.type === 'CIRCLE') { + polyline = interpolateEllipse(entity.x, entity.y, entity.r, entity.r, 0, Math.PI * 2); + + if (entity.extrusionZ === -1) { + polyline = polyline.map(function (p) { + return [-p[0], p[1]]; + }); + } + } + + if (entity.type === 'ELLIPSE') { + var rx = Math.sqrt(entity.majorX * entity.majorX + entity.majorY * entity.majorY); + var ry = entity.axisRatio * rx; + var majorAxisRotation = -Math.atan2(-entity.majorY, entity.majorX); + polyline = interpolateEllipse(entity.x, entity.y, rx, ry, entity.startAngle, entity.endAngle, majorAxisRotation); + + if (entity.extrusionZ === -1) { + polyline = polyline.map(function (p) { + return [-p[0], p[1]]; + }); + } + } + + if (entity.type === 'ARC') { + // Why on earth DXF has degree start & end angles for arc, + // and radian start & end angles for ellipses is a mystery + polyline = interpolateEllipse(entity.x, entity.y, entity.r, entity.r, entity.startAngle, entity.endAngle, undefined, false); // I kid you not, ARCs and ELLIPSEs handle this differently, + // as evidenced by how AutoCAD actually renders these entities + + if (entity.extrusionZ === -1) { + polyline = polyline.map(function (p) { + return [-p[0], p[1]]; + }); + } + } + + if (entity.type === 'SPLINE') { + polyline = interpolateBSpline(entity.controlPoints, entity.degree, entity.knots, options.interpolationsPerSplineSegment); + } + + if (!polyline) { + _logger["default"].warn('unsupported entity for converting to polyline:', entity.type); + + return []; + } + + return polyline; +}; + +exports["default"] = _default; +},{"./util/bSpline":30,"./util/createArcForLWPolyline":32,"./util/logger":34}],6:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = void 0; + +var _colors = _interopRequireDefault(require("./util/colors")); + +var _logger = _interopRequireDefault(require("./util/logger")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +var _default = function _default(layers, entity) { + var layerTable = layers[entity.layer]; + + if (layerTable) { + var colorNumber = 'colorNumber' in entity ? entity.colorNumber : layerTable.colorNumber; + var rgb = _colors["default"][colorNumber]; + + if (rgb) { + return rgb; + } else { + _logger["default"].warn('Color index', colorNumber, 'invalid, defaulting to black'); + + return [0, 0, 0]; + } + } else { + _logger["default"].warn('no layer table for layer:' + entity.layer); + + return [0, 0, 0]; + } +}; + +exports["default"] = _default; +},{"./util/colors":31,"./util/logger":34}],7:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = void 0; + +var _default = function _default(entities) { + return entities.reduce(function (acc, entity) { + var layer = entity.layer; + + if (!acc[layer]) { + acc[layer] = []; + } + + acc[layer].push(entity); + return acc; + }, {}); +}; + +exports["default"] = _default; +},{}],8:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = void 0; + +var _entities = _interopRequireDefault(require("./entities")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +var _default = function _default(tuples) { + var state; + var blocks = []; + var block; + var entitiesTuples = []; + tuples.forEach(function (tuple) { + var type = tuple[0]; + var value = tuple[1]; + + if (value === 'BLOCK') { + state = 'block'; + block = {}; + entitiesTuples = []; + blocks.push(block); + } else if (value === 'ENDBLK') { + if (state === 'entities') { + block.entities = (0, _entities["default"])(entitiesTuples); + } else { + block.entities = []; + } + + entitiesTuples = undefined; + state = undefined; + } else if (state === 'block' && type !== 0) { + switch (type) { + case 1: + block.xref = value; + break; + + case 2: + block.name = value; + break; + + case 10: + block.x = value; + break; + + case 20: + block.y = value; + break; + + case 30: + block.z = value; + break; + + default: + break; + } + } else if (state === 'block' && type === 0) { + state = 'entities'; + entitiesTuples.push(tuple); + } else if (state === 'entities') { + entitiesTuples.push(tuple); + } + }); + return blocks; +}; + +exports["default"] = _default; +},{"./entities":9}],9:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = void 0; + +var _logger = _interopRequireDefault(require("../util/logger")); + +var _point = _interopRequireDefault(require("./entity/point")); + +var _line = _interopRequireDefault(require("./entity/line")); + +var _lwpolyline = _interopRequireDefault(require("./entity/lwpolyline")); + +var _polyline = _interopRequireDefault(require("./entity/polyline")); + +var _vertex = _interopRequireDefault(require("./entity/vertex")); + +var _circle = _interopRequireDefault(require("./entity/circle")); + +var _arc = _interopRequireDefault(require("./entity/arc")); + +var _ellipse = _interopRequireDefault(require("./entity/ellipse")); + +var _spline = _interopRequireDefault(require("./entity/spline")); + +var _solid = _interopRequireDefault(require("./entity/solid")); + +var _mtext = _interopRequireDefault(require("./entity/mtext")); + +var _insert = _interopRequireDefault(require("./entity/insert")); + +var _threeDFace = _interopRequireDefault(require("./entity/threeDFace")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +var handlers = [_point["default"], _line["default"], _lwpolyline["default"], _polyline["default"], _vertex["default"], _circle["default"], _arc["default"], _ellipse["default"], _spline["default"], _solid["default"], _mtext["default"], _insert["default"], _threeDFace["default"]].reduce(function (acc, mod) { + acc[mod.TYPE] = mod; + return acc; +}, {}); + +var _default = function _default(tuples) { + var entities = []; + var entityGroups = []; + var currentEntityTuples; // First group them together for easy processing + + tuples.forEach(function (tuple) { + var type = tuple[0]; + + if (type === 0) { + currentEntityTuples = []; + entityGroups.push(currentEntityTuples); + } + + currentEntityTuples.push(tuple); + }); + var currentPolyline; + entityGroups.forEach(function (tuples) { + var entityType = tuples[0][1]; + var contentTuples = tuples.slice(1); + + if (handlers[entityType] !== undefined) { + var e = handlers[entityType].process(contentTuples); // "POLYLINE" cannot be parsed in isolation, it is followed by + // N "VERTEX" entities and ended with a "SEQEND" entity. + // Essentially we convert POLYLINE to LWPOLYLINE - the extra + // vertex flags are not supported + + if (entityType === 'POLYLINE') { + currentPolyline = e; + entities.push(e); + } else if (entityType === 'VERTEX') { + if (currentPolyline) { + currentPolyline.vertices.push(e); + } else { + _logger["default"].error('ignoring invalid VERTEX entity'); + } + } else if (entityType === 'SEQEND') { + currentPolyline = undefined; + } else { + // All other entities + entities.push(e); + } + } else { + _logger["default"].warn('unsupported type in ENTITIES section:', entityType); + } + }); + return entities; +}; + +exports["default"] = _default; +},{"../util/logger":34,"./entity/arc":10,"./entity/circle":11,"./entity/ellipse":13,"./entity/insert":14,"./entity/line":15,"./entity/lwpolyline":16,"./entity/mtext":17,"./entity/point":18,"./entity/polyline":19,"./entity/solid":20,"./entity/spline":21,"./entity/threeDFace":22,"./entity/vertex":23}],10:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = exports.process = exports.TYPE = void 0; + +var _common = _interopRequireDefault(require("./common")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +var TYPE = 'ARC'; +exports.TYPE = TYPE; + +var process = function process(tuples) { + return tuples.reduce(function (entity, tuple) { + var type = tuple[0]; + var value = tuple[1]; + + switch (type) { + case 10: + entity.x = value; + break; + + case 20: + entity.y = value; + break; + + case 30: + entity.z = value; + break; + + case 39: + entity.thickness = value; + break; + + case 40: + entity.r = value; + break; + + case 50: + // *Someone* decided that ELLIPSE angles are in radians but + // ARC angles are in degrees + entity.startAngle = value / 180 * Math.PI; + break; + + case 51: + entity.endAngle = value / 180 * Math.PI; + break; + + default: + Object.assign(entity, (0, _common["default"])(type, value)); + break; + } + + return entity; + }, { + type: TYPE + }); +}; + +exports.process = process; +var _default = { + TYPE: TYPE, + process: process +}; +exports["default"] = _default; +},{"./common":12}],11:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = exports.process = exports.TYPE = void 0; + +var _common = _interopRequireDefault(require("./common")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +var TYPE = 'CIRCLE'; +exports.TYPE = TYPE; + +var process = function process(tuples) { + return tuples.reduce(function (entity, tuple) { + var type = tuple[0]; + var value = tuple[1]; + + switch (type) { + case 10: + entity.x = value; + break; + + case 20: + entity.y = value; + break; + + case 30: + entity.z = value; + break; + + case 40: + entity.r = value; + break; + + default: + Object.assign(entity, (0, _common["default"])(type, value)); + break; + } + + return entity; + }, { + type: TYPE + }); +}; + +exports.process = process; +var _default = { + TYPE: TYPE, + process: process +}; +exports["default"] = _default; +},{"./common":12}],12:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = void 0; + +var _default = function _default(type, value) { + switch (type) { + case 6: + // Linetype name (present if not BYLAYER). + // The special name BYBLOCK indicates a + // floating linetype. (optional) + return { + lineTypeName: value + }; + + case 8: + return { + layer: value + }; + + case 48: + // Linetype scale (optional) + return { + lineTypeScale: value + }; + + case 60: + // Object visibility (optional): 0 = visible, 1 = invisible. + return { + visible: value === 0 + }; + + case 62: + // Color number (present if not BYLAYER). + // Zero indicates the BYBLOCK (floating) color. + // 256 indicates BYLAYER. + // A negative value indicates that the layer is turned off. (optional) + return { + colorNumber: value + }; + + case 210: + return { + extrusionX: value + }; + + case 220: + return { + extrusionY: value + }; + + case 230: + return { + extrusionZ: value + }; + + default: + return {}; + } +}; + +exports["default"] = _default; +},{}],13:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = exports.process = exports.TYPE = void 0; + +var _common = _interopRequireDefault(require("./common")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +var TYPE = 'ELLIPSE'; +exports.TYPE = TYPE; + +var process = function process(tuples) { + return tuples.reduce(function (entity, tuple) { + var type = tuple[0]; + var value = tuple[1]; + + switch (type) { + case 10: + entity.x = value; + break; + + case 11: + entity.majorX = value; + break; + + case 20: + entity.y = value; + break; + + case 21: + entity.majorY = value; + break; + + case 30: + entity.z = value; + break; + + case 31: + entity.majorZ = value; + break; + + case 40: + entity.axisRatio = value; + break; + + case 41: + entity.startAngle = value; + break; + + case 42: + entity.endAngle = value; + break; + + default: + Object.assign(entity, (0, _common["default"])(type, value)); + break; + } + + return entity; + }, { + type: TYPE + }); +}; + +exports.process = process; +var _default = { + TYPE: TYPE, + process: process +}; +exports["default"] = _default; +},{"./common":12}],14:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = exports.process = exports.TYPE = void 0; + +var _common = _interopRequireDefault(require("./common")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +var TYPE = 'INSERT'; +exports.TYPE = TYPE; + +var process = function process(tuples) { + return tuples.reduce(function (entity, tuple) { + var type = tuple[0]; + var value = tuple[1]; + + switch (type) { + case 2: + entity.block = value; + break; + + case 10: + entity.x = value; + break; + + case 20: + entity.y = value; + break; + + case 30: + entity.z = value; + break; + + case 41: + entity.scaleX = value; + break; + + case 42: + entity.scaleY = value; + break; + + case 43: + entity.scaleZ = value; + break; + + case 44: + entity.columnSpacing = value; + break; + + case 45: + entity.rowSpacing = value; + break; + + case 50: + entity.rotation = value; + break; + + case 70: + entity.columnCount = value; + break; + + case 71: + entity.rowCount = value; + break; + + case 210: + entity.extrusionX = value; + break; + + case 220: + entity.extrusionY = value; + break; + + case 230: + entity.extrusionZ = value; + break; + + default: + Object.assign(entity, (0, _common["default"])(type, value)); + break; + } + + return entity; + }, { + type: TYPE + }); +}; + +exports.process = process; +var _default = { + TYPE: TYPE, + process: process +}; +exports["default"] = _default; +},{"./common":12}],15:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = exports.process = exports.TYPE = void 0; + +var _common = _interopRequireDefault(require("./common")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +var TYPE = 'LINE'; +exports.TYPE = TYPE; + +var process = function process(tuples) { + return tuples.reduce(function (entity, tuple) { + var type = tuple[0]; + var value = tuple[1]; + + switch (type) { + case 10: + entity.start.x = value; + break; + + case 20: + entity.start.y = value; + break; + + case 30: + entity.start.z = value; + break; + + case 39: + entity.thickness = value; + break; + + case 11: + entity.end.x = value; + break; + + case 21: + entity.end.y = value; + break; + + case 31: + entity.end.z = value; + break; + + default: + Object.assign(entity, (0, _common["default"])(type, value)); + break; + } + + return entity; + }, { + type: TYPE, + start: {}, + end: {} + }); +}; + +exports.process = process; +var _default = { + TYPE: TYPE, + process: process +}; +exports["default"] = _default; +},{"./common":12}],16:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = exports.process = exports.TYPE = void 0; + +var _common = _interopRequireDefault(require("./common")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +var TYPE = 'LWPOLYLINE'; +exports.TYPE = TYPE; + +var process = function process(tuples) { + var vertex; + return tuples.reduce(function (entity, tuple) { + var type = tuple[0]; + var value = tuple[1]; + + switch (type) { + case 70: + entity.closed = (value & 1) === 1; + break; + + case 10: + vertex = { + x: value, + y: 0 + }; + entity.vertices.push(vertex); + break; + + case 20: + vertex.y = value; + break; + + case 39: + entity.thickness = value; + break; + + case 42: + // Bulge (multiple entries; one entry for each vertex) (optional; default = 0). + vertex.bulge = value; + break; + + default: + Object.assign(entity, (0, _common["default"])(type, value)); + break; + } + + return entity; + }, { + type: TYPE, + vertices: [] + }); +}; + +exports.process = process; +var _default = { + TYPE: TYPE, + process: process +}; +exports["default"] = _default; +},{"./common":12}],17:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = exports.process = exports.TYPE = void 0; + +var _common = _interopRequireDefault(require("./common")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +var TYPE = 'MTEXT'; +exports.TYPE = TYPE; +var simpleCodes = { + 10: 'x', + 20: 'y', + 30: 'z', + 40: 'nominalTextHeight', + 41: 'refRectangleWidth', + 71: 'attachmentPoint', + 72: 'drawingDirection', + 7: 'styleName', + 11: 'xAxisX', + 21: 'xAxisY', + 31: 'xAxisZ', + 42: 'horizontalWidth', + 43: 'verticalHeight', + 73: 'lineSpacingStyle', + 44: 'lineSpacingFactor', + 90: 'backgroundFill', + 420: 'bgColorRGB0', + 421: 'bgColorRGB1', + 422: 'bgColorRGB2', + 423: 'bgColorRGB3', + 424: 'bgColorRGB4', + 425: 'bgColorRGB5', + 426: 'bgColorRGB6', + 427: 'bgColorRGB7', + 428: 'bgColorRGB8', + 429: 'bgColorRGB9', + 430: 'bgColorName0', + 431: 'bgColorName1', + 432: 'bgColorName2', + 433: 'bgColorName3', + 434: 'bgColorName4', + 435: 'bgColorName5', + 436: 'bgColorName6', + 437: 'bgColorName7', + 438: 'bgColorName8', + 439: 'bgColorName9', + 45: 'fillBoxStyle', + 63: 'bgFillColor', + 441: 'bgFillTransparency', + 75: 'columnType', + 76: 'columnCount', + 78: 'columnFlowReversed', + 79: 'columnAutoheight', + 48: 'columnWidth', + 49: 'columnGutter', + 50: 'columnHeights' +}; + +var process = function process(tuples) { + return tuples.reduce(function (entity, tuple) { + var type = tuple[0]; + var value = tuple[1]; + + if (simpleCodes[type] !== undefined) { + entity[simpleCodes[type]] = value; + } else if (type === 1 || type === 3) { + entity.string += value; + } else if (type === 50) { + // Rotation angle in radians + entity.xAxisX = Math.cos(value); + entity.xAxisY = Math.sin(value); + } else { + Object.assign(entity, (0, _common["default"])(type, value)); + } + + return entity; + }, { + type: TYPE, + string: '' + }); +}; + +exports.process = process; +var _default = { + TYPE: TYPE, + process: process +}; +exports["default"] = _default; +},{"./common":12}],18:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = exports.process = exports.TYPE = void 0; + +var _common = _interopRequireDefault(require("./common")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +var TYPE = 'POINT'; +exports.TYPE = TYPE; + +var process = function process(tuples) { + return tuples.reduce(function (entity, tuple) { + var type = tuple[0]; + var value = tuple[1]; + + switch (type) { + case 10: + entity.x = value; + break; + + case 20: + entity.y = value; + break; + + case 30: + entity.z = value; + break; + + case 39: + entity.thickness = value; + break; + + default: + Object.assign(entity, (0, _common["default"])(type, value)); + break; + } + + return entity; + }, { + type: TYPE + }); +}; + +exports.process = process; +var _default = { + TYPE: TYPE, + process: process +}; +exports["default"] = _default; +},{"./common":12}],19:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = exports.process = exports.TYPE = void 0; + +var _common = _interopRequireDefault(require("./common")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +var TYPE = 'POLYLINE'; +exports.TYPE = TYPE; + +var process = function process(tuples) { + return tuples.reduce(function (entity, tuple) { + var type = tuple[0]; + var value = tuple[1]; + + switch (type) { + case 70: + entity.closed = (value & 1) === 1; + entity.polygonMesh = (value & 16) === 16; + entity.polyfaceMesh = (value & 64) === 64; + break; + + case 39: + entity.thickness = value; + break; + + default: + Object.assign(entity, (0, _common["default"])(type, value)); + break; + } + + return entity; + }, { + type: TYPE, + vertices: [] + }); +}; + +exports.process = process; +var _default = { + TYPE: TYPE, + process: process +}; +exports["default"] = _default; +},{"./common":12}],20:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = exports.process = exports.TYPE = void 0; + +var _common = _interopRequireDefault(require("./common")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +var TYPE = 'SOLID'; +exports.TYPE = TYPE; + +var process = function process(tuples) { + return tuples.reduce(function (entity, tuple) { + var type = tuple[0]; + var value = tuple[1]; + + switch (type) { + case 10: + entity.corners[0].x = value; + break; + + case 20: + entity.corners[0].y = value; + break; + + case 30: + entity.corners[0].z = value; + break; + + case 11: + entity.corners[1].x = value; + break; + + case 21: + entity.corners[1].y = value; + break; + + case 31: + entity.corners[1].z = value; + break; + + case 12: + entity.corners[2].x = value; + break; + + case 22: + entity.corners[2].y = value; + break; + + case 32: + entity.corners[2].z = value; + break; + + case 13: + entity.corners[3].x = value; + break; + + case 23: + entity.corners[3].y = value; + break; + + case 33: + entity.corners[3].z = value; + break; + + case 39: + entity.thickness = value; + break; + + default: + Object.assign(entity, (0, _common["default"])(type, value)); + break; + } + + return entity; + }, { + type: TYPE, + corners: [{}, {}, {}, {}] + }); +}; + +exports.process = process; +var _default = { + TYPE: TYPE, + process: process +}; +exports["default"] = _default; +},{"./common":12}],21:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = exports.process = exports.TYPE = void 0; + +var _common = _interopRequireDefault(require("./common")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +var TYPE = 'SPLINE'; +exports.TYPE = TYPE; + +var process = function process(tuples) { + var controlPoint; + return tuples.reduce(function (entity, tuple) { + var type = tuple[0]; + var value = tuple[1]; + + switch (type) { + case 10: + controlPoint = { + x: value, + y: 0 + }; + entity.controlPoints.push(controlPoint); + break; + + case 20: + controlPoint.y = value; + break; + + case 30: + controlPoint.z = value; + break; + + case 40: + entity.knots.push(value); + break; + + case 42: + entity.knotTolerance = value; + break; + + case 43: + entity.controlPointTolerance = value; + break; + + case 44: + entity.fitTolerance = value; + break; + + case 70: + // Spline flag (bit coded): + // 1 = Closed spline + // 2 = Periodic spline + // 4 = Rational spline + // 8 = Planar + // 16 = Linear (planar bit is also set) + entity.flag = value; + entity.closed = (value & 1) === 1; + break; + + case 71: + entity.degree = value; + break; + + case 72: + entity.numberOfKnots = value; + break; + + case 73: + entity.numberOfControlPoints = value; + break; + + case 74: + entity.numberOfFitPoints = value; + break; + + default: + Object.assign(entity, (0, _common["default"])(type, value)); + break; + } + + return entity; + }, { + type: TYPE, + controlPoints: [], + knots: [] + }); +}; + +exports.process = process; +var _default = { + TYPE: TYPE, + process: process +}; +exports["default"] = _default; +},{"./common":12}],22:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = exports.process = exports.TYPE = void 0; + +var _common = _interopRequireDefault(require("./common")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +var TYPE = '3DFACE'; +exports.TYPE = TYPE; + +var process = function process(tuples) { + return tuples.reduce(function (entity, tuple) { + var type = tuple[0]; + var value = tuple[1]; + + switch (type) { + case 10: + entity.vertices[0].x = value; + break; + + case 20: + entity.vertices[0].y = value; + break; + + case 30: + entity.vertices[0].z = value; + break; + + case 11: + entity.vertices[1].x = value; + break; + + case 21: + entity.vertices[1].y = value; + break; + + case 31: + entity.vertices[1].z = value; + break; + + case 12: + entity.vertices[2].x = value; + break; + + case 22: + entity.vertices[2].y = value; + break; + + case 32: + entity.vertices[2].z = value; + break; + + case 13: + entity.vertices[3].x = value; + break; + + case 23: + entity.vertices[3].y = value; + break; + + case 33: + entity.vertices[3].z = value; + break; + + default: + Object.assign(entity, (0, _common["default"])(type, value)); + break; + } + + return entity; + }, { + type: TYPE, + vertices: [{}, {}, {}, {}] + }); +}; + +exports.process = process; +var _default = { + TYPE: TYPE, + process: process +}; +exports["default"] = _default; +},{"./common":12}],23:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = exports.process = exports.TYPE = void 0; +var TYPE = 'VERTEX'; +exports.TYPE = TYPE; + +var process = function process(tuples) { + return tuples.reduce(function (entity, tuple) { + var type = tuple[0]; + var value = tuple[1]; + + switch (type) { + case 10: + entity.x = value; + break; + + case 20: + entity.y = value; + break; + + case 30: + entity.z = value; + break; + + case 42: + entity.bulge = value; + break; + + default: + break; + } + + return entity; + }, {}); +}; + +exports.process = process; +var _default = { + TYPE: TYPE, + process: process +}; +exports["default"] = _default; +},{}],24:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = void 0; + +var _default = function _default(tuples) { + var state; + var header = {}; + tuples.forEach(function (tuple) { + var type = tuple[0]; + var value = tuple[1]; + + switch (value) { + case '$MEASUREMENT': + { + state = 'measurement'; + break; + } + + case '$INSUNITS': + { + state = 'insUnits'; + break; + } + + case '$EXTMIN': + header.extMin = {}; + state = 'extMin'; + break; + + case '$EXTMAX': + header.extMax = {}; + state = 'extMax'; + break; + + default: + switch (state) { + case 'extMin': + case 'extMax': + { + switch (type) { + case 10: + header[state].x = value; + break; + + case 20: + header[state].y = value; + break; + + case 30: + header[state].z = value; + state = undefined; + break; + } + + break; + } + + case 'measurement': + case 'insUnits': + { + switch (type) { + case 70: + { + header[state] = value; + state = undefined; + break; + } + } + + break; + } + } + + } + }); + return header; +}; + +exports["default"] = _default; +},{}],25:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = void 0; + +var _logger = _interopRequireDefault(require("../util/logger")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +var layerHandler = function layerHandler(tuples) { + return tuples.reduce(function (layer, tuple) { + var type = tuple[0]; + var value = tuple[1]; // https://www.autodesk.com/techpubs/autocad/acad2000/dxf/layer_dxf_04.htm + + switch (type) { + case 2: + layer.name = value; + break; + + case 6: + layer.lineTypeName = value; + break; + + case 62: + layer.colorNumber = value; + break; + + case 70: + layer.flags = value; + break; + + case 290: + layer.plot = parseInt(value) !== 0; + break; + + case 370: + layer.lineWeightEnum = value; + break; + + default: + } + + return layer; + }, { + type: 'LAYER' + }); +}; + +var styleHandler = function styleHandler(tuples) { + return tuples.reduce(function (style, tuple) { + var type = tuple[0]; + var value = tuple[1]; + + switch (type) { + case 2: + style.name = value; + break; + + case 6: + style.lineTypeName = value; + break; + + case 40: + style.fixedTextHeight = value; + break; + + case 41: + style.widthFactor = value; + break; + + case 50: + style.obliqueAngle = value; + break; + + case 71: + style.flags = value; + break; + + case 42: + style.lastHeightUsed = value; + break; + + case 3: + style.primaryFontFileName = value; + break; + + case 4: + style.bigFontFileName = value; + break; + + default: + } + + return style; + }, { + type: 'STYLE' + }); +}; + +var tableHandler = function tableHandler(tuples, tableType, handler) { + var tableRowsTuples = []; + var tableRowTuples; + tuples.forEach(function (tuple) { + var type = tuple[0]; + var value = tuple[1]; + + if ((type === 0 || type === 2) && value === tableType) { + tableRowTuples = []; + tableRowsTuples.push(tableRowTuples); + } else { + tableRowTuples.push(tuple); + } + }); + return tableRowsTuples.reduce(function (acc, rowTuples) { + var tableRow = handler(rowTuples); + + if (tableRow.name) { + acc[tableRow.name] = tableRow; + } else { + _logger["default"].warn('table row without name:', tableRow); + } + + return acc; + }, {}); +}; + +var _default = function _default(tuples) { + var tableGroups = []; + var tableTuples; + tuples.forEach(function (tuple) { + // const type = tuple[0]; + var value = tuple[1]; + + if (value === 'TABLE') { + tableTuples = []; + tableGroups.push(tableTuples); + } else if (value === 'ENDTAB') { + tableGroups.push(tableTuples); + } else { + tableTuples.push(tuple); + } + }); + var stylesTuples = []; + var layersTuples = []; + tableGroups.forEach(function (group) { + if (group[0][1] === 'STYLE') { + stylesTuples = group; + } else if (group[0][1] === 'LTYPE') { + _logger["default"].warn('LTYPE in tables not supported'); + } else if (group[0][1] === 'LAYER') { + layersTuples = group; + } + }); + return { + layers: tableHandler(layersTuples, 'LAYER', layerHandler), + styles: tableHandler(stylesTuples, 'STYLE', styleHandler) + }; +}; + +exports["default"] = _default; +},{"../util/logger":34}],26:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "config", { + enumerable: true, + get: function get() { + return _config["default"]; + } +}); +Object.defineProperty(exports, "parseString", { + enumerable: true, + get: function get() { + return _parseString["default"]; + } +}); +Object.defineProperty(exports, "denormalise", { + enumerable: true, + get: function get() { + return _denormalise["default"]; + } +}); +Object.defineProperty(exports, "groupEntitiesByLayer", { + enumerable: true, + get: function get() { + return _groupEntitiesByLayer["default"]; + } +}); +Object.defineProperty(exports, "toPolylines", { + enumerable: true, + get: function get() { + return _toPolylines["default"]; + } +}); +Object.defineProperty(exports, "toSVG", { + enumerable: true, + get: function get() { + return _toSVG["default"]; + } +}); +Object.defineProperty(exports, "colors", { + enumerable: true, + get: function get() { + return _colors["default"]; + } +}); +Object.defineProperty(exports, "Helper", { + enumerable: true, + get: function get() { + return _Helper["default"]; + } +}); + +var _config = _interopRequireDefault(require("./config")); + +var _parseString = _interopRequireDefault(require("./parseString")); + +var _denormalise = _interopRequireDefault(require("./denormalise")); + +var _groupEntitiesByLayer = _interopRequireDefault(require("./groupEntitiesByLayer")); + +var _toPolylines = _interopRequireDefault(require("./toPolylines")); + +var _toSVG = _interopRequireDefault(require("./toSVG")); + +var _colors = _interopRequireDefault(require("./util/colors")); + +var _Helper = _interopRequireDefault(require("./Helper")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } +},{"./Helper":1,"./config":3,"./denormalise":4,"./groupEntitiesByLayer":7,"./parseString":27,"./toPolylines":28,"./toSVG":29,"./util/colors":31}],27:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = void 0; + +var _header = _interopRequireDefault(require("./handlers/header")); + +var _tables = _interopRequireDefault(require("./handlers/tables")); + +var _blocks = _interopRequireDefault(require("./handlers/blocks")); + +var _entities = _interopRequireDefault(require("./handlers/entities")); + +var _logger = _interopRequireDefault(require("./util/logger")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +// Parse the value into the native representation +var parseValue = function parseValue(type, value) { + if (type >= 10 && type < 60) { + return parseFloat(value, 10); + } else if (type >= 210 && type < 240) { + return parseFloat(value, 10); + } else if (type >= 60 && type < 100) { + return parseInt(value, 10); + } else { + return value; + } +}; // Content lines are alternate lines of type and value + + +var convertToTypesAndValues = function convertToTypesAndValues(contentLines) { + var state = 'type'; + var type; + var typesAndValues = []; + + var _iterator = _createForOfIteratorHelper(contentLines), + _step; + + try { + for (_iterator.s(); !(_step = _iterator.n()).done;) { + var line = _step.value; + + if (state === 'type') { + type = parseInt(line, 10); + state = 'value'; + } else { + typesAndValues.push([type, parseValue(type, line)]); + state = 'type'; + } + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + + return typesAndValues; +}; + +var separateSections = function separateSections(tuples) { + var sectionTuples; + return tuples.reduce(function (sections, tuple) { + if (tuple[0] === 0 && tuple[1] === 'SECTION') { + sectionTuples = []; + } else if (tuple[0] === 0 && tuple[1] === 'ENDSEC') { + sections.push(sectionTuples); + sectionTuples = undefined; + } else if (sectionTuples !== undefined) { + sectionTuples.push(tuple); + } + + return sections; + }, []); +}; // Each section start with the type tuple, then proceeds +// with the contents of the section + + +var reduceSection = function reduceSection(acc, section) { + var sectionType = section[0][1]; + var contentTuples = section.slice(1); + + switch (sectionType) { + case 'HEADER': + acc.header = (0, _header["default"])(contentTuples); + break; + + case 'TABLES': + acc.tables = (0, _tables["default"])(contentTuples); + break; + + case 'BLOCKS': + acc.blocks = (0, _blocks["default"])(contentTuples); + break; + + case 'ENTITIES': + acc.entities = (0, _entities["default"])(contentTuples); + break; + + default: + _logger["default"].warn("Unsupported section: ".concat(sectionType)); + + } + + return acc; +}; + +var _default = function _default(string) { + var lines = string.split(/\r\n|\r|\n/g); + var tuples = convertToTypesAndValues(lines); + var sections = separateSections(tuples); + var result = sections.reduce(reduceSection, { + // Start with empty defaults in the event of empty sections + header: {}, + blocks: [], + entities: [], + tables: { + layers: {}, + styles: {} + } + }); + return result; +}; + +exports["default"] = _default; +},{"./handlers/blocks":8,"./handlers/entities":9,"./handlers/header":24,"./handlers/tables":25,"./util/logger":34}],28:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = void 0; + +var _vecks = require("vecks"); + +var _colors = _interopRequireDefault(require("./util/colors")); + +var _denormalise = _interopRequireDefault(require("./denormalise")); + +var _entityToPolyline = _interopRequireDefault(require("./entityToPolyline")); + +var _applyTransforms = _interopRequireDefault(require("./applyTransforms")); + +var _logger = _interopRequireDefault(require("./util/logger")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +var _default = function _default(parsed) { + var entities = (0, _denormalise["default"])(parsed); + var polylines = entities.map(function (entity) { + var layerTable = parsed.tables.layers[entity.layer]; + var rgb; + + if (layerTable) { + var colorNumber = 'colorNumber' in entity ? entity.colorNumber : layerTable.colorNumber; + rgb = _colors["default"][colorNumber]; + + if (rgb === undefined) { + _logger["default"].warn('Color index', colorNumber, 'invalid, defaulting to black'); + + rgb = [0, 0, 0]; + } + } else { + _logger["default"].warn('no layer table for layer:' + entity.layer); + + rgb = [0, 0, 0]; + } + + return { + rgb: rgb, + vertices: (0, _applyTransforms["default"])((0, _entityToPolyline["default"])(entity), entity.transforms) + }; + }); + var bbox = new _vecks.Box2(); + polylines.forEach(function (polyline) { + polyline.vertices.forEach(function (vertex) { + bbox.expandByPoint({ + x: vertex[0], + y: vertex[1] + }); + }); + }); + return { + bbox: bbox, + polylines: polylines + }; +}; + +exports["default"] = _default; +},{"./applyTransforms":2,"./denormalise":4,"./entityToPolyline":5,"./util/colors":31,"./util/logger":34,"vecks":50}],29:[function(require,module,exports){ +"use strict"; + +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = exports.piecewiseToPaths = void 0; + +var _prettyData = require("pretty-data"); + +var _vecks = require("vecks"); + +var _entityToPolyline = _interopRequireDefault(require("./entityToPolyline")); + +var _denormalise = _interopRequireDefault(require("./denormalise")); + +var _getRGBForEntity = _interopRequireDefault(require("./getRGBForEntity")); + +var _logger = _interopRequireDefault(require("./util/logger")); + +var _rotate = _interopRequireDefault(require("./util/rotate")); + +var _rgbToColorAttribute = _interopRequireDefault(require("./util/rgbToColorAttribute")); + +var _toPiecewiseBezier = _interopRequireWildcard(require("./util/toPiecewiseBezier")); + +var _transformBoundingBoxAndElement = _interopRequireDefault(require("./util/transformBoundingBoxAndElement")); + +function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; } + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } + +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + +var addFlipXIfApplicable = function addFlipXIfApplicable(entity, _ref) { + var bbox = _ref.bbox, + element = _ref.element; + + if (entity.extrusionZ === -1) { + return { + bbox: new _vecks.Box2().expandByPoint({ + x: -bbox.min.x, + y: bbox.min.y + }).expandByPoint({ + x: -bbox.max.x, + y: bbox.max.y + }), + element: "\n ".concat(element, "\n ") + }; + } else { + return { + bbox: bbox, + element: element + }; + } +}; +/** + * Create a element. Interpolates curved entities. + */ + + +var polyline = function polyline(entity) { + var vertices = (0, _entityToPolyline["default"])(entity); + var bbox = vertices.reduce(function (acc, _ref2) { + var _ref3 = _slicedToArray(_ref2, 2), + x = _ref3[0], + y = _ref3[1]; + + return acc.expandByPoint({ + x: x, + y: y + }); + }, new _vecks.Box2()); + var d = vertices.reduce(function (acc, point, i) { + acc += i === 0 ? 'M' : 'L'; + acc += point[0] + ',' + point[1]; + return acc; + }, ''); // Empirically it appears that flipping horzontally does not apply to polyline + + return (0, _transformBoundingBoxAndElement["default"])(bbox, ""), entity.transforms); +}; +/** + * Create a element for the CIRCLE entity. + */ + + +var circle = function circle(entity) { + var bbox0 = new _vecks.Box2().expandByPoint({ + x: entity.x + entity.r, + y: entity.y + entity.r + }).expandByPoint({ + x: entity.x - entity.r, + y: entity.y - entity.r + }); + var element0 = ""); + + var _addFlipXIfApplicable = addFlipXIfApplicable(entity, { + bbox: bbox0, + element: element0 + }), + bbox = _addFlipXIfApplicable.bbox, + element = _addFlipXIfApplicable.element; + + return (0, _transformBoundingBoxAndElement["default"])(bbox, element, entity.transforms); +}; +/** + * Create a a or element for the ARC or ELLIPSE + * DXF entity ( if start and end point are the same). + */ + + +var ellipseOrArc = function ellipseOrArc(cx, cy, majorX, majorY, axisRatio, startAngle, endAngle, flipX) { + var rx = Math.sqrt(majorX * majorX + majorY * majorY); + var ry = axisRatio * rx; + var rotationAngle = -Math.atan2(-majorY, majorX); + var bbox = bboxEllipseOrArc(cx, cy, majorX, majorY, axisRatio, startAngle, endAngle, flipX); + + if (Math.abs(startAngle - endAngle) < 1e-9 || Math.abs(startAngle - endAngle + Math.PI * 2) < 1e-9) { + // Use a native when start and end angles are the same, and + // arc paths with same start and end points don't render (at least on Safari) + var element = "\n \n "); + return { + bbox: bbox, + element: element + }; + } else { + var startOffset = (0, _rotate["default"])({ + x: Math.cos(startAngle) * rx, + y: Math.sin(startAngle) * ry + }, rotationAngle); + var startPoint = { + x: cx + startOffset.x, + y: cy + startOffset.y + }; + var endOffset = (0, _rotate["default"])({ + x: Math.cos(endAngle) * rx, + y: Math.sin(endAngle) * ry + }, rotationAngle); + var endPoint = { + x: cx + endOffset.x, + y: cy + endOffset.y + }; + var adjustedEndAngle = endAngle < startAngle ? endAngle + Math.PI * 2 : endAngle; + var largeArcFlag = adjustedEndAngle - startAngle < Math.PI ? 0 : 1; + var d = "M ".concat(startPoint.x, " ").concat(startPoint.y, " A ").concat(rx, " ").concat(ry, " ").concat(rotationAngle / Math.PI * 180, " ").concat(largeArcFlag, " 1 ").concat(endPoint.x, " ").concat(endPoint.y); + + var _element = ""); + + return { + bbox: bbox, + element: _element + }; + } +}; +/** + * Compute the bounding box of an elliptical arc, given the DXF entity parameters + */ + + +var bboxEllipseOrArc = function bboxEllipseOrArc(cx, cy, majorX, majorY, axisRatio, startAngle, endAngle, flipX) { + // The bounding box will be defined by the starting point of the ellipse, and ending point, + // and any extrema on the ellipse that are between startAngle and endAngle. + // The extrema are found by setting either the x or y component of the ellipse's + // tangent vector to zero and solving for the angle. + // Ensure start and end angles are > 0 and well-ordered + while (startAngle < 0) { + startAngle += Math.PI * 2; + } + + while (endAngle <= startAngle) { + endAngle += Math.PI * 2; + } // When rotated, the extrema of the ellipse will be found at these angles + + + var angles = []; + + if (Math.abs(majorX) < 1e-12 || Math.abs(majorY) < 1e-12) { + // Special case for majorX or majorY = 0 + for (var i = 0; i < 4; i++) { + angles.push(i / 2 * Math.PI); + } + } else { + // reference https://github.com/bjnortier/dxf/issues/47#issuecomment-545915042 + angles[0] = Math.atan(-majorY * axisRatio / majorX) - Math.PI; // Ensure angles < 0 + + angles[1] = Math.atan(majorX * axisRatio / majorY) - Math.PI; + angles[2] = angles[0] - Math.PI; + angles[3] = angles[1] - Math.PI; + } // Remove angles not falling between start and end + + + for (var _i2 = 4; _i2 >= 0; _i2--) { + while (angles[_i2] < startAngle) { + angles[_i2] += Math.PI * 2; + } + + if (angles[_i2] > endAngle) { + angles.splice(_i2, 1); + } + } // Also to consider are the starting and ending points: + + + angles.push(startAngle); + angles.push(endAngle); // Compute points lying on the unit circle at these angles + + var pts = angles.map(function (a) { + return { + x: Math.cos(a), + y: Math.sin(a) + }; + }); // Transformation matrix, formed by the major and minor axes + + var M = [[majorX, -majorY * axisRatio], [majorY, majorX * axisRatio]]; // Rotate, scale, and translate points + + var rotatedPts = pts.map(function (p) { + return { + x: p.x * M[0][0] + p.y * M[0][1] + cx, + y: p.x * M[1][0] + p.y * M[1][1] + cy + }; + }); // Compute extents of bounding box + + var bbox = rotatedPts.reduce(function (acc, p) { + acc.expandByPoint(p); + return acc; + }, new _vecks.Box2()); + return bbox; +}; +/** + * An ELLIPSE is defined by the major axis, convert to X and Y radius with + * a rotation angle + */ + + +var ellipse = function ellipse(entity) { + var _ellipseOrArc = ellipseOrArc(entity.x, entity.y, entity.majorX, entity.majorY, entity.axisRatio, entity.startAngle, entity.endAngle), + bbox0 = _ellipseOrArc.bbox, + element0 = _ellipseOrArc.element; + + var _addFlipXIfApplicable2 = addFlipXIfApplicable(entity, { + bbox: bbox0, + element: element0 + }), + bbox = _addFlipXIfApplicable2.bbox, + element = _addFlipXIfApplicable2.element; + + return (0, _transformBoundingBoxAndElement["default"])(bbox, element, entity.transforms); +}; +/** + * An ARC is an ellipse with equal radii + */ + + +var arc = function arc(entity) { + var _ellipseOrArc2 = ellipseOrArc(entity.x, entity.y, entity.r, 0, 1, entity.startAngle, entity.endAngle, entity.extrusionZ === -1), + bbox0 = _ellipseOrArc2.bbox, + element0 = _ellipseOrArc2.element; + + var _addFlipXIfApplicable3 = addFlipXIfApplicable(entity, { + bbox: bbox0, + element: element0 + }), + bbox = _addFlipXIfApplicable3.bbox, + element = _addFlipXIfApplicable3.element; + + return (0, _transformBoundingBoxAndElement["default"])(bbox, element, entity.transforms); +}; + +var piecewiseToPaths = function piecewiseToPaths(k, knots, controlPoints) { + var paths = []; + var controlPointIndex = 0; + var knotIndex = k; + + while (knotIndex < knots.length - k + 1) { + var m = (0, _toPiecewiseBezier.multiplicity)(knots, knotIndex); + var cp = controlPoints.slice(controlPointIndex, controlPointIndex + k); + + if (k === 4) { + paths.push("")); + } else if (k === 3) { + paths.push("")); + } + + controlPointIndex += m; + knotIndex += m; + } + + return paths; +}; + +exports.piecewiseToPaths = piecewiseToPaths; + +var bezier = function bezier(entity) { + var bbox = new _vecks.Box2(); + entity.controlPoints.forEach(function (p) { + bbox = bbox.expandByPoint(p); + }); + var k = entity.degree + 1; + var piecewise = (0, _toPiecewiseBezier["default"])(k, entity.controlPoints, entity.knots); + var paths = piecewiseToPaths(k, piecewise.knots, piecewise.controlPoints); + var element = "".concat(paths.join(''), ""); + return (0, _transformBoundingBoxAndElement["default"])(bbox, element, entity.transforms); +}; +/** + * Switcth the appropriate function on entity type. CIRCLE, ARC and ELLIPSE + * produce native SVG elements, the rest produce interpolated polylines. + */ + + +var entityToBoundsAndElement = function entityToBoundsAndElement(entity) { + switch (entity.type) { + case 'CIRCLE': + return circle(entity); + + case 'ELLIPSE': + return ellipse(entity); + + case 'ARC': + return arc(entity); + + case 'SPLINE': + { + if (entity.degree === 2 || entity.degree === 3) { + try { + return bezier(entity); + } catch (err) { + return polyline(entity); + } + } else { + return polyline(entity); + } + } + + case 'LINE': + case 'LWPOLYLINE': + case 'POLYLINE': + { + return polyline(entity); + } + + default: + _logger["default"].warn('entity type not supported in SVG rendering:', entity.type); + + return null; + } +}; + +var _default = function _default(parsed) { + var entities = (0, _denormalise["default"])(parsed); + + var _entities$reduce = entities.reduce(function (acc, entity, i) { + var rgb = (0, _getRGBForEntity["default"])(parsed.tables.layers, entity); + var boundsAndElement = entityToBoundsAndElement(entity); // Ignore entities like MTEXT that don't produce SVG elements + + if (boundsAndElement) { + var _bbox = boundsAndElement.bbox, + element = boundsAndElement.element; // Ignore invalid bounding boxes + + if (_bbox.valid) { + acc.bbox.expandByPoint(_bbox.min); + acc.bbox.expandByPoint(_bbox.max); + } + + acc.elements.push("").concat(element, "")); + } + + return acc; + }, { + bbox: new _vecks.Box2(), + elements: [] + }), + bbox = _entities$reduce.bbox, + elements = _entities$reduce.elements; + + var viewBox = bbox.valid ? { + x: bbox.min.x, + y: -bbox.max.y, + width: bbox.max.x - bbox.min.x, + height: bbox.max.y - bbox.min.y + } : { + x: 0, + y: 0, + width: 0, + height: 0 + }; + return "\n\n \n ").concat(_prettyData.pd.xml(elements.join('\n')), "\n \n"); +}; + +exports["default"] = _default; +},{"./denormalise":4,"./entityToPolyline":5,"./getRGBForEntity":6,"./util/logger":34,"./util/rgbToColorAttribute":35,"./util/rotate":36,"./util/toPiecewiseBezier":37,"./util/transformBoundingBoxAndElement":38,"pretty-data":40,"vecks":50}],30:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = void 0; + +var _round = require("round10"); + +/** + * Copied and ported to code standard as the b-spline library is not maintained any longer. + * Source: + * https://github.com/thibauts/b-spline + * Copyright (c) 2015 Thibaut Séguy + */ +var _default = function _default(t, degree, points, knots, weights) { + var n = points.length; // points count + + var d = points[0].length; // point dimensionality + + if (t < 0 || t > 1) { + throw new Error('t out of bounds [0,1]: ' + t); + } + + if (degree < 1) throw new Error('degree must be at least 1 (linear)'); + if (degree > n - 1) throw new Error('degree must be less than or equal to point count - 1'); + + if (!weights) { + // build weight vector of length [n] + weights = []; + + for (var i = 0; i < n; i++) { + weights[i] = 1; + } + } + + if (!knots) { + // build knot vector of length [n + degree + 1] + knots = []; + + for (var _i = 0; _i < n + degree + 1; _i++) { + knots[_i] = _i; + } + } else { + if (knots.length !== n + degree + 1) throw new Error('bad knot vector length'); + } + + var domain = [degree, knots.length - 1 - degree]; // remap t to the domain where the spline is defined + + var low = knots[domain[0]]; + var high = knots[domain[1]]; + t = t * (high - low) + low; // Clamp to the upper & lower bounds instead of + // throwing an error like in the original lib + // https://github.com/bjnortier/dxf/issues/28 + + t = Math.max(t, low); + t = Math.min(t, high); // find s (the spline segment) for the [t] value provided + + var s; + + for (s = domain[0]; s < domain[1]; s++) { + if (t >= knots[s] && t <= knots[s + 1]) { + break; + } + } // convert points to homogeneous coordinates + + + var v = []; + + for (var _i2 = 0; _i2 < n; _i2++) { + v[_i2] = []; + + for (var j = 0; j < d; j++) { + v[_i2][j] = points[_i2][j] * weights[_i2]; + } + + v[_i2][d] = weights[_i2]; + } // l (level) goes from 1 to the curve degree + 1 + + + var alpha; + + for (var l = 1; l <= degree + 1; l++) { + // build level l of the pyramid + for (var _i3 = s; _i3 > s - degree - 1 + l; _i3--) { + alpha = (t - knots[_i3]) / (knots[_i3 + degree + 1 - l] - knots[_i3]); // interpolate each component + + for (var _j = 0; _j < d + 1; _j++) { + v[_i3][_j] = (1 - alpha) * v[_i3 - 1][_j] + alpha * v[_i3][_j]; + } + } + } // convert back to cartesian and return + + + var result = []; + + for (var _i4 = 0; _i4 < d; _i4++) { + result[_i4] = (0, _round.round10)(v[s][_i4] / v[s][d], -9); + } + + return result; +}; + +exports["default"] = _default; +},{"round10":41}],31:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = void 0; +var _default = [[0, 0, 0], [255, 0, 0], [255, 255, 0], [0, 255, 0], [0, 255, 255], [0, 0, 255], [255, 0, 255], [255, 255, 255], [65, 65, 65], [128, 128, 128], [255, 0, 0], [255, 170, 170], [189, 0, 0], [189, 126, 126], [129, 0, 0], [129, 86, 86], [104, 0, 0], [104, 69, 69], [79, 0, 0], [79, 53, 53], [255, 63, 0], [255, 191, 170], [189, 46, 0], [189, 141, 126], [129, 31, 0], [129, 96, 86], [104, 25, 0], [104, 78, 69], [79, 19, 0], [79, 59, 53], [255, 127, 0], [255, 212, 170], [189, 94, 0], [189, 157, 126], [129, 64, 0], [129, 107, 86], [104, 52, 0], [104, 86, 69], [79, 39, 0], [79, 66, 53], [255, 191, 0], [255, 234, 170], [189, 141, 0], [189, 173, 126], [129, 96, 0], [129, 118, 86], [104, 78, 0], [104, 95, 69], [79, 59, 0], [79, 73, 53], [255, 255, 0], [255, 255, 170], [189, 189, 0], [189, 189, 126], [129, 129, 0], [129, 129, 86], [104, 104, 0], [104, 104, 69], [79, 79, 0], [79, 79, 53], [191, 255, 0], [234, 255, 170], [141, 189, 0], [173, 189, 126], [96, 129, 0], [118, 129, 86], [78, 104, 0], [95, 104, 69], [59, 79, 0], [73, 79, 53], [127, 255, 0], [212, 255, 170], [94, 189, 0], [157, 189, 126], [64, 129, 0], [107, 129, 86], [52, 104, 0], [86, 104, 69], [39, 79, 0], [66, 79, 53], [63, 255, 0], [191, 255, 170], [46, 189, 0], [141, 189, 126], [31, 129, 0], [96, 129, 86], [25, 104, 0], [78, 104, 69], [19, 79, 0], [59, 79, 53], [0, 255, 0], [170, 255, 170], [0, 189, 0], [126, 189, 126], [0, 129, 0], [86, 129, 86], [0, 104, 0], [69, 104, 69], [0, 79, 0], [53, 79, 53], [0, 255, 63], [170, 255, 191], [0, 189, 46], [126, 189, 141], [0, 129, 31], [86, 129, 96], [0, 104, 25], [69, 104, 78], [0, 79, 19], [53, 79, 59], [0, 255, 127], [170, 255, 212], [0, 189, 94], [126, 189, 157], [0, 129, 64], [86, 129, 107], [0, 104, 52], [69, 104, 86], [0, 79, 39], [53, 79, 66], [0, 255, 191], [170, 255, 234], [0, 189, 141], [126, 189, 173], [0, 129, 96], [86, 129, 118], [0, 104, 78], [69, 104, 95], [0, 79, 59], [53, 79, 73], [0, 255, 255], [170, 255, 255], [0, 189, 189], [126, 189, 189], [0, 129, 129], [86, 129, 129], [0, 104, 104], [69, 104, 104], [0, 79, 79], [53, 79, 79], [0, 191, 255], [170, 234, 255], [0, 141, 189], [126, 173, 189], [0, 96, 129], [86, 118, 129], [0, 78, 104], [69, 95, 104], [0, 59, 79], [53, 73, 79], [0, 127, 255], [170, 212, 255], [0, 94, 189], [126, 157, 189], [0, 64, 129], [86, 107, 129], [0, 52, 104], [69, 86, 104], [0, 39, 79], [53, 66, 79], [0, 63, 255], [170, 191, 255], [0, 46, 189], [126, 141, 189], [0, 31, 129], [86, 96, 129], [0, 25, 104], [69, 78, 104], [0, 19, 79], [53, 59, 79], [0, 0, 255], [170, 170, 255], [0, 0, 189], [126, 126, 189], [0, 0, 129], [86, 86, 129], [0, 0, 104], [69, 69, 104], [0, 0, 79], [53, 53, 79], [63, 0, 255], [191, 170, 255], [46, 0, 189], [141, 126, 189], [31, 0, 129], [96, 86, 129], [25, 0, 104], [78, 69, 104], [19, 0, 79], [59, 53, 79], [127, 0, 255], [212, 170, 255], [94, 0, 189], [157, 126, 189], [64, 0, 129], [107, 86, 129], [52, 0, 104], [86, 69, 104], [39, 0, 79], [66, 53, 79], [191, 0, 255], [234, 170, 255], [141, 0, 189], [173, 126, 189], [96, 0, 129], [118, 86, 129], [78, 0, 104], [95, 69, 104], [59, 0, 79], [73, 53, 79], [255, 0, 255], [255, 170, 255], [189, 0, 189], [189, 126, 189], [129, 0, 129], [129, 86, 129], [104, 0, 104], [104, 69, 104], [79, 0, 79], [79, 53, 79], [255, 0, 191], [255, 170, 234], [189, 0, 141], [189, 126, 173], [129, 0, 96], [129, 86, 118], [104, 0, 78], [104, 69, 95], [79, 0, 59], [79, 53, 73], [255, 0, 127], [255, 170, 212], [189, 0, 94], [189, 126, 157], [129, 0, 64], [129, 86, 107], [104, 0, 52], [104, 69, 86], [79, 0, 39], [79, 53, 66], [255, 0, 63], [255, 170, 191], [189, 0, 46], [189, 126, 141], [129, 0, 31], [129, 86, 96], [104, 0, 25], [104, 69, 78], [79, 0, 19], [79, 53, 59], [51, 51, 51], [80, 80, 80], [105, 105, 105], [130, 130, 130], [190, 190, 190], [255, 255, 255]]; +exports["default"] = _default; +},{}],32:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = void 0; + +var _vecks = require("vecks"); + +/** + * Create the arcs point for a LWPOLYLINE. The start and end are excluded + * + * See diagram.png in this directory for description of points and angles used. + */ +var _default = function _default(from, to, bulge, resolution) { + // Resolution in degrees + if (!resolution) { + resolution = 5; + } // If the bulge is < 0, the arc goes clockwise. So we simply + // reverse a and b and invert sign + // Bulge = tan(theta/4) + + + var theta; + var a; + var b; + + if (bulge < 0) { + theta = Math.atan(-bulge) * 4; + a = new _vecks.V2(from[0], from[1]); + b = new _vecks.V2(to[0], to[1]); + } else { + // Default is counter-clockwise + theta = Math.atan(bulge) * 4; + a = new _vecks.V2(to[0], to[1]); + b = new _vecks.V2(from[0], from[1]); + } + + var ab = b.sub(a); + var lengthAB = ab.length(); + var c = a.add(ab.multiply(0.5)); // Distance from center of arc to line between form and to points + + var lengthCD = Math.abs(lengthAB / 2 / Math.tan(theta / 2)); + var normAB = ab.norm(); + var d; + + if (theta < Math.PI) { + var normDC = new _vecks.V2(normAB.x * Math.cos(Math.PI / 2) - normAB.y * Math.sin(Math.PI / 2), normAB.y * Math.cos(Math.PI / 2) + normAB.x * Math.sin(Math.PI / 2)); // D is the center of the arc + + d = c.add(normDC.multiply(-lengthCD)); + } else { + var normCD = new _vecks.V2(normAB.x * Math.cos(Math.PI / 2) - normAB.y * Math.sin(Math.PI / 2), normAB.y * Math.cos(Math.PI / 2) + normAB.x * Math.sin(Math.PI / 2)); // D is the center of the arc + + d = c.add(normCD.multiply(lengthCD)); + } // Add points between start start and eng angle relative + // to the center point + + + var startAngle = Math.atan2(b.y - d.y, b.x - d.x) / Math.PI * 180; + var endAngle = Math.atan2(a.y - d.y, a.x - d.x) / Math.PI * 180; + + if (endAngle < startAngle) { + endAngle += 360; + } + + var r = b.sub(d).length(); + var startInter = Math.floor(startAngle / resolution) * resolution + resolution; + var endInter = Math.ceil(endAngle / resolution) * resolution - resolution; + var points = []; + + for (var i = startInter; i <= endInter; i += resolution) { + points.push(d.add(new _vecks.V2(Math.cos(i / 180 * Math.PI) * r, Math.sin(i / 180 * Math.PI) * r))); + } // Maintain the right ordering to join the from and to points + + + if (bulge < 0) { + points.reverse(); + } + + return points.map(function (p) { + return [p.x, p.y]; + }); +}; + +exports["default"] = _default; +},{"vecks":50}],33:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = void 0; + +/** + * Knot insertion is known as "Boehm's algorithm" + * + * https://math.stackexchange.com/questions/417859/convert-a-b-spline-into-bezier-curves + * code adapted from http://preserve.mactech.com/articles/develop/issue_25/schneider.html + */ +var _default = function _default(k, controlPoints, knots, newKnot) { + var x = knots; + var b = controlPoints; + var n = controlPoints.length; + var i = 0; + var foundIndex = false; + + for (var j = 0; j < n + k; j++) { + if (newKnot > x[j] && newKnot <= x[j + 1]) { + i = j; + foundIndex = true; + break; + } + } + + if (!foundIndex) { + throw new Error('invalid new knot'); + } + + var xHat = []; + + for (var _j = 0; _j < n + k + 1; _j++) { + if (_j <= i) { + xHat[_j] = x[_j]; + } else if (_j === i + 1) { + xHat[_j] = newKnot; + } else { + xHat[_j] = x[_j - 1]; + } + } + + var alpha; + var bHat = []; + + for (var _j2 = 0; _j2 < n + 1; _j2++) { + if (_j2 <= i - k + 1) { + alpha = 1; + } else if (i - k + 2 <= _j2 && _j2 <= i) { + if (x[_j2 + k - 1] - x[_j2] === 0) { + alpha = 0; + } else { + alpha = (newKnot - x[_j2]) / (x[_j2 + k - 1] - x[_j2]); + } + } else { + alpha = 0; + } + + if (alpha === 0) { + bHat[_j2] = b[_j2 - 1]; + } else if (alpha === 1) { + bHat[_j2] = b[_j2]; + } else { + bHat[_j2] = { + x: (1 - alpha) * b[_j2 - 1].x + alpha * b[_j2].x, + y: (1 - alpha) * b[_j2 - 1].y + alpha * b[_j2].y + }; + } + } + + return { + controlPoints: bHat, + knots: xHat + }; +}; + +exports["default"] = _default; +},{}],34:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = void 0; + +var _config = _interopRequireDefault(require("../config")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +function info() { + if (_config["default"].verbose) { + console.info.apply(undefined, arguments); + } +} + +function warn() { + if (_config["default"].verbose) { + console.warn.apply(undefined, arguments); + } +} + +function error() { + console.error.apply(undefined, arguments); +} + +var _default = { + info: info, + warn: warn, + error: error +}; +exports["default"] = _default; +},{"../config":3}],35:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = void 0; + +/** + * Convert an RGB array to a CSS string definition. + * Converts white lines to black as the default. + */ +var _default = function _default(rgb) { + if (rgb[0] === 255 && rgb[1] === 255 && rgb[2] === 255) { + return 'rgb(0, 0, 0)'; + } else { + return "rgb(".concat(rgb[0], ", ").concat(rgb[1], ", ").concat(rgb[2], ")"); + } +}; + +exports["default"] = _default; +},{}],36:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = void 0; + +/** + * Rotate a points by the given angle. + * + * @param points the points + * @param angle the rotation angle + */ +var _default = function _default(p, angle) { + return { + x: p.x * Math.cos(angle) - p.y * Math.sin(angle), + y: p.y * Math.cos(angle) + p.x * Math.sin(angle) + }; +}; + +exports["default"] = _default; +},{}],37:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = exports.computeInsertions = exports.multiplicity = exports.checkPinned = void 0; + +var _insertKnot = _interopRequireDefault(require("./insertKnot")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +/** + * For a pinned spline, the knots have to be repeated k times + * (where k is the order), at both the beginning and the end + */ +var checkPinned = function checkPinned(k, knots) { + // Pinned at the start + for (var i = 1; i < k; ++i) { + if (knots[i] !== knots[0]) { + throw Error("not pinned. order: ".concat(k, " knots: ").concat(knots)); + } + } // Pinned at the end + + + for (var _i = knots.length - 2; _i > knots.length - k - 1; --_i) { + if (knots[_i] !== knots[knots.length - 1]) { + throw Error("not pinned. order: ".concat(k, " knots: ").concat(knots)); + } + } +}; + +exports.checkPinned = checkPinned; + +var multiplicity = function multiplicity(knots, index) { + var m = 1; + + for (var i = index + 1; i < knots.length; ++i) { + if (knots[i] === knots[index]) { + ++m; + } else { + break; + } + } + + return m; +}; +/** + * https://saccade.com/writing/graphics/KnotVectors.pdf + * A quadratic piecewise BeÌzier knot vector with seven control points + * will look like this [0 0 0 1 1 2 2 3 3 3]. In general, in a + * piecewise BeÌzier knot vector the first k knots are the same, + * then each subsequent group of k-1 knots is the same, + * until you get to the end. + */ + + +exports.multiplicity = multiplicity; + +var computeInsertions = function computeInsertions(k, knots) { + var inserts = []; + var i = k; + + while (i < knots.length - k) { + var knot = knots[i]; + var m = multiplicity(knots, i); + + for (var j = 0; j < k - m - 1; ++j) { + inserts.push(knot); + } + + i = i + m; + } + + return inserts; +}; + +exports.computeInsertions = computeInsertions; + +var _default = function _default(k, controlPoints, knots) { + checkPinned(k, knots); + var insertions = computeInsertions(k, knots); + return insertions.reduce(function (acc, tNew) { + return (0, _insertKnot["default"])(k, acc.controlPoints, acc.knots, tNew); + }, { + controlPoints: controlPoints, + knots: knots + }); +}; + +exports["default"] = _default; +},{"./insertKnot":33}],38:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = void 0; + +var _vecks = require("vecks"); + +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } + +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + +/** + * Transform the bounding box and the SVG element by the given + * transforms. The element are created in reverse transform + * order and the bounding box in the given order. + */ +var _default = function _default(bbox, element, transforms) { + var transformedElement = ''; + var matrices = transforms.map(function (transform) { + // Create the transformation matrix + var tx = transform.x || 0; + var ty = transform.y || 0; + var sx = transform.scaleX || 1; + var sy = transform.scaleY || 1; + var angle = (transform.rotation || 0) / 180 * Math.PI; + var cos = Math.cos, + sin = Math.sin; + var a, b, c, d, e, f; // In DXF an extrusionZ value of -1 denote a tranform around the Y axis. + + if (transform.extrusionZ === -1) { + a = -sx * cos(angle); + b = sx * sin(angle); + c = sy * sin(angle); + d = sy * cos(angle); + e = -tx; + f = ty; + } else { + a = sx * cos(angle); + b = sx * sin(angle); + c = -sy * sin(angle); + d = sy * cos(angle); + e = tx; + f = ty; + } + + return [a, b, c, d, e, f]; + }); // Only transform the bounding box is it is valid (i.e. not Infinity) + + var transformedBBox = new _vecks.Box2(); + + if (bbox.valid) { + var bboxPoints = [{ + x: bbox.min.x, + y: bbox.min.y + }, { + x: bbox.max.x, + y: bbox.min.y + }, { + x: bbox.max.x, + y: bbox.max.y + }, { + x: bbox.min.x, + y: bbox.max.y + }]; + matrices.forEach(function (_ref) { + var _ref2 = _slicedToArray(_ref, 6), + a = _ref2[0], + b = _ref2[1], + c = _ref2[2], + d = _ref2[3], + e = _ref2[4], + f = _ref2[5]; + + bboxPoints = bboxPoints.map(function (point) { + return { + x: point.x * a + point.y * c + e, + y: point.x * b + point.y * d + f + }; + }); + }); + transformedBBox = bboxPoints.reduce(function (acc, point) { + return acc.expandByPoint(point); + }, new _vecks.Box2()); + } + + matrices.reverse(); + matrices.forEach(function (_ref3) { + var _ref4 = _slicedToArray(_ref3, 6), + a = _ref4[0], + b = _ref4[1], + c = _ref4[2], + d = _ref4[3], + e = _ref4[4], + f = _ref4[5]; + + transformedElement += ""); + }); + transformedElement += element; + matrices.forEach(function (transform) { + transformedElement += ''; + }); + return { + bbox: transformedBBox, + element: transformedElement + }; +}; + +exports["default"] = _default; +},{"vecks":50}],39:[function(require,module,exports){ +(function (global){ +/** + * @license + * Lodash + * Copyright OpenJS Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */ +;(function() { + + /** Used as a safe reference for `undefined` in pre-ES5 environments. */ + var undefined; + + /** Used as the semantic version number. */ + var VERSION = '4.17.19'; + + /** Used as the size to enable large array optimizations. */ + var LARGE_ARRAY_SIZE = 200; + + /** Error message constants. */ + var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.', + FUNC_ERROR_TEXT = 'Expected a function'; + + /** Used to stand-in for `undefined` hash values. */ + var HASH_UNDEFINED = '__lodash_hash_undefined__'; + + /** Used as the maximum memoize cache size. */ + var MAX_MEMOIZE_SIZE = 500; + + /** Used as the internal argument placeholder. */ + var PLACEHOLDER = '__lodash_placeholder__'; + + /** Used to compose bitmasks for cloning. */ + var CLONE_DEEP_FLAG = 1, + CLONE_FLAT_FLAG = 2, + CLONE_SYMBOLS_FLAG = 4; + + /** Used to compose bitmasks for value comparisons. */ + var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + + /** Used to compose bitmasks for function metadata. */ + var WRAP_BIND_FLAG = 1, + WRAP_BIND_KEY_FLAG = 2, + WRAP_CURRY_BOUND_FLAG = 4, + WRAP_CURRY_FLAG = 8, + WRAP_CURRY_RIGHT_FLAG = 16, + WRAP_PARTIAL_FLAG = 32, + WRAP_PARTIAL_RIGHT_FLAG = 64, + WRAP_ARY_FLAG = 128, + WRAP_REARG_FLAG = 256, + WRAP_FLIP_FLAG = 512; + + /** Used as default options for `_.truncate`. */ + var DEFAULT_TRUNC_LENGTH = 30, + DEFAULT_TRUNC_OMISSION = '...'; + + /** Used to detect hot functions by number of calls within a span of milliseconds. */ + var HOT_COUNT = 800, + HOT_SPAN = 16; + + /** Used to indicate the type of lazy iteratees. */ + var LAZY_FILTER_FLAG = 1, + LAZY_MAP_FLAG = 2, + LAZY_WHILE_FLAG = 3; + + /** Used as references for various `Number` constants. */ + var INFINITY = 1 / 0, + MAX_SAFE_INTEGER = 9007199254740991, + MAX_INTEGER = 1.7976931348623157e+308, + NAN = 0 / 0; + + /** Used as references for the maximum length and index of an array. */ + var MAX_ARRAY_LENGTH = 4294967295, + MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1, + HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1; + + /** Used to associate wrap methods with their bit flags. */ + var wrapFlags = [ + ['ary', WRAP_ARY_FLAG], + ['bind', WRAP_BIND_FLAG], + ['bindKey', WRAP_BIND_KEY_FLAG], + ['curry', WRAP_CURRY_FLAG], + ['curryRight', WRAP_CURRY_RIGHT_FLAG], + ['flip', WRAP_FLIP_FLAG], + ['partial', WRAP_PARTIAL_FLAG], + ['partialRight', WRAP_PARTIAL_RIGHT_FLAG], + ['rearg', WRAP_REARG_FLAG] + ]; + + /** `Object#toString` result references. */ + var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + asyncTag = '[object AsyncFunction]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + domExcTag = '[object DOMException]', + errorTag = '[object Error]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + mapTag = '[object Map]', + numberTag = '[object Number]', + nullTag = '[object Null]', + objectTag = '[object Object]', + promiseTag = '[object Promise]', + proxyTag = '[object Proxy]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]', + undefinedTag = '[object Undefined]', + weakMapTag = '[object WeakMap]', + weakSetTag = '[object WeakSet]'; + + var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + + /** Used to match empty string literals in compiled template source. */ + var reEmptyStringLeading = /\b__p \+= '';/g, + reEmptyStringMiddle = /\b(__p \+=) '' \+/g, + reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g; + + /** Used to match HTML entities and HTML characters. */ + var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g, + reUnescapedHtml = /[&<>"']/g, + reHasEscapedHtml = RegExp(reEscapedHtml.source), + reHasUnescapedHtml = RegExp(reUnescapedHtml.source); + + /** Used to match template delimiters. */ + var reEscape = /<%-([\s\S]+?)%>/g, + reEvaluate = /<%([\s\S]+?)%>/g, + reInterpolate = /<%=([\s\S]+?)%>/g; + + /** Used to match property names within property paths. */ + var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/, + rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + + /** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ + var reRegExpChar = /[\\^$.*+?()[\]{}|]/g, + reHasRegExpChar = RegExp(reRegExpChar.source); + + /** Used to match leading and trailing whitespace. */ + var reTrim = /^\s+|\s+$/g, + reTrimStart = /^\s+/, + reTrimEnd = /\s+$/; + + /** Used to match wrap detail comments. */ + var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/, + reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/, + reSplitDetails = /,? & /; + + /** Used to match words composed of alphanumeric characters. */ + var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g; + + /** Used to match backslashes in property paths. */ + var reEscapeChar = /\\(\\)?/g; + + /** + * Used to match + * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components). + */ + var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g; + + /** Used to match `RegExp` flags from their coerced string values. */ + var reFlags = /\w*$/; + + /** Used to detect bad signed hexadecimal string values. */ + var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + + /** Used to detect binary string values. */ + var reIsBinary = /^0b[01]+$/i; + + /** Used to detect host constructors (Safari). */ + var reIsHostCtor = /^\[object .+?Constructor\]$/; + + /** Used to detect octal string values. */ + var reIsOctal = /^0o[0-7]+$/i; + + /** Used to detect unsigned integer values. */ + var reIsUint = /^(?:0|[1-9]\d*)$/; + + /** Used to match Latin Unicode letters (excluding mathematical operators). */ + var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g; + + /** Used to ensure capturing order of template delimiters. */ + var reNoMatch = /($^)/; + + /** Used to match unescaped characters in compiled string literals. */ + var reUnescapedString = /['\n\r\u2028\u2029\\]/g; + + /** Used to compose unicode character classes. */ + var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, + rsDingbatRange = '\\u2700-\\u27bf', + rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff', + rsMathOpRange = '\\xac\\xb1\\xd7\\xf7', + rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf', + rsPunctuationRange = '\\u2000-\\u206f', + rsSpaceRange = ' \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000', + rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde', + rsVarRange = '\\ufe0e\\ufe0f', + rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange; + + /** Used to compose unicode capture groups. */ + var rsApos = "['\u2019]", + rsAstral = '[' + rsAstralRange + ']', + rsBreak = '[' + rsBreakRange + ']', + rsCombo = '[' + rsComboRange + ']', + rsDigits = '\\d+', + rsDingbat = '[' + rsDingbatRange + ']', + rsLower = '[' + rsLowerRange + ']', + rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + rsAstralRange + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + rsUpper = '[' + rsUpperRange + ']', + rsZWJ = '\\u200d'; + + /** Used to compose unicode regexes. */ + var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')', + rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')', + rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?', + rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?', + reOptMod = rsModifier + '?', + rsOptVar = '[' + rsVarRange + ']?', + rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsOrdLower = '\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])', + rsOrdUpper = '\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq, + rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; + + /** Used to match apostrophes. */ + var reApos = RegExp(rsApos, 'g'); + + /** + * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and + * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols). + */ + var reComboMark = RegExp(rsCombo, 'g'); + + /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ + var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); + + /** Used to match complex or compound words. */ + var reUnicodeWord = RegExp([ + rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')', + rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')', + rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower, + rsUpper + '+' + rsOptContrUpper, + rsOrdUpper, + rsOrdLower, + rsDigits, + rsEmoji + ].join('|'), 'g'); + + /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ + var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); + + /** Used to detect strings that need a more robust regexp to match words. */ + var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/; + + /** Used to assign default `context` object properties. */ + var contextProps = [ + 'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array', + 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object', + 'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array', + 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap', + '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout' + ]; + + /** Used to make template sourceURLs easier to identify. */ + var templateCounter = -1; + + /** Used to identify `toStringTag` values of typed arrays. */ + var typedArrayTags = {}; + typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = + typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = + typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = + typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = + typedArrayTags[uint32Tag] = true; + typedArrayTags[argsTag] = typedArrayTags[arrayTag] = + typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = + typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = + typedArrayTags[errorTag] = typedArrayTags[funcTag] = + typedArrayTags[mapTag] = typedArrayTags[numberTag] = + typedArrayTags[objectTag] = typedArrayTags[regexpTag] = + typedArrayTags[setTag] = typedArrayTags[stringTag] = + typedArrayTags[weakMapTag] = false; + + /** Used to identify `toStringTag` values supported by `_.clone`. */ + var cloneableTags = {}; + cloneableTags[argsTag] = cloneableTags[arrayTag] = + cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] = + cloneableTags[boolTag] = cloneableTags[dateTag] = + cloneableTags[float32Tag] = cloneableTags[float64Tag] = + cloneableTags[int8Tag] = cloneableTags[int16Tag] = + cloneableTags[int32Tag] = cloneableTags[mapTag] = + cloneableTags[numberTag] = cloneableTags[objectTag] = + cloneableTags[regexpTag] = cloneableTags[setTag] = + cloneableTags[stringTag] = cloneableTags[symbolTag] = + cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = + cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true; + cloneableTags[errorTag] = cloneableTags[funcTag] = + cloneableTags[weakMapTag] = false; + + /** Used to map Latin Unicode letters to basic Latin letters. */ + var deburredLetters = { + // Latin-1 Supplement block. + '\xc0': 'A', '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A', + '\xe0': 'a', '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a', + '\xc7': 'C', '\xe7': 'c', + '\xd0': 'D', '\xf0': 'd', + '\xc8': 'E', '\xc9': 'E', '\xca': 'E', '\xcb': 'E', + '\xe8': 'e', '\xe9': 'e', '\xea': 'e', '\xeb': 'e', + '\xcc': 'I', '\xcd': 'I', '\xce': 'I', '\xcf': 'I', + '\xec': 'i', '\xed': 'i', '\xee': 'i', '\xef': 'i', + '\xd1': 'N', '\xf1': 'n', + '\xd2': 'O', '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O', + '\xf2': 'o', '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o', + '\xd9': 'U', '\xda': 'U', '\xdb': 'U', '\xdc': 'U', + '\xf9': 'u', '\xfa': 'u', '\xfb': 'u', '\xfc': 'u', + '\xdd': 'Y', '\xfd': 'y', '\xff': 'y', + '\xc6': 'Ae', '\xe6': 'ae', + '\xde': 'Th', '\xfe': 'th', + '\xdf': 'ss', + // Latin Extended-A block. + '\u0100': 'A', '\u0102': 'A', '\u0104': 'A', + '\u0101': 'a', '\u0103': 'a', '\u0105': 'a', + '\u0106': 'C', '\u0108': 'C', '\u010a': 'C', '\u010c': 'C', + '\u0107': 'c', '\u0109': 'c', '\u010b': 'c', '\u010d': 'c', + '\u010e': 'D', '\u0110': 'D', '\u010f': 'd', '\u0111': 'd', + '\u0112': 'E', '\u0114': 'E', '\u0116': 'E', '\u0118': 'E', '\u011a': 'E', + '\u0113': 'e', '\u0115': 'e', '\u0117': 'e', '\u0119': 'e', '\u011b': 'e', + '\u011c': 'G', '\u011e': 'G', '\u0120': 'G', '\u0122': 'G', + '\u011d': 'g', '\u011f': 'g', '\u0121': 'g', '\u0123': 'g', + '\u0124': 'H', '\u0126': 'H', '\u0125': 'h', '\u0127': 'h', + '\u0128': 'I', '\u012a': 'I', '\u012c': 'I', '\u012e': 'I', '\u0130': 'I', + '\u0129': 'i', '\u012b': 'i', '\u012d': 'i', '\u012f': 'i', '\u0131': 'i', + '\u0134': 'J', '\u0135': 'j', + '\u0136': 'K', '\u0137': 'k', '\u0138': 'k', + '\u0139': 'L', '\u013b': 'L', '\u013d': 'L', '\u013f': 'L', '\u0141': 'L', + '\u013a': 'l', '\u013c': 'l', '\u013e': 'l', '\u0140': 'l', '\u0142': 'l', + '\u0143': 'N', '\u0145': 'N', '\u0147': 'N', '\u014a': 'N', + '\u0144': 'n', '\u0146': 'n', '\u0148': 'n', '\u014b': 'n', + '\u014c': 'O', '\u014e': 'O', '\u0150': 'O', + '\u014d': 'o', '\u014f': 'o', '\u0151': 'o', + '\u0154': 'R', '\u0156': 'R', '\u0158': 'R', + '\u0155': 'r', '\u0157': 'r', '\u0159': 'r', + '\u015a': 'S', '\u015c': 'S', '\u015e': 'S', '\u0160': 'S', + '\u015b': 's', '\u015d': 's', '\u015f': 's', '\u0161': 's', + '\u0162': 'T', '\u0164': 'T', '\u0166': 'T', + '\u0163': 't', '\u0165': 't', '\u0167': 't', + '\u0168': 'U', '\u016a': 'U', '\u016c': 'U', '\u016e': 'U', '\u0170': 'U', '\u0172': 'U', + '\u0169': 'u', '\u016b': 'u', '\u016d': 'u', '\u016f': 'u', '\u0171': 'u', '\u0173': 'u', + '\u0174': 'W', '\u0175': 'w', + '\u0176': 'Y', '\u0177': 'y', '\u0178': 'Y', + '\u0179': 'Z', '\u017b': 'Z', '\u017d': 'Z', + '\u017a': 'z', '\u017c': 'z', '\u017e': 'z', + '\u0132': 'IJ', '\u0133': 'ij', + '\u0152': 'Oe', '\u0153': 'oe', + '\u0149': "'n", '\u017f': 's' + }; + + /** Used to map characters to HTML entities. */ + var htmlEscapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''' + }; + + /** Used to map HTML entities to characters. */ + var htmlUnescapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + ''': "'" + }; + + /** Used to escape characters for inclusion in compiled string literals. */ + var stringEscapes = { + '\\': '\\', + "'": "'", + '\n': 'n', + '\r': 'r', + '\u2028': 'u2028', + '\u2029': 'u2029' + }; + + /** Built-in method references without a dependency on `root`. */ + var freeParseFloat = parseFloat, + freeParseInt = parseInt; + + /** Detect free variable `global` from Node.js. */ + var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + + /** Detect free variable `self`. */ + var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + + /** Used as a reference to the global object. */ + var root = freeGlobal || freeSelf || Function('return this')(); + + /** Detect free variable `exports`. */ + var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + + /** Detect free variable `module`. */ + var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + + /** Detect the popular CommonJS extension `module.exports`. */ + var moduleExports = freeModule && freeModule.exports === freeExports; + + /** Detect free variable `process` from Node.js. */ + var freeProcess = moduleExports && freeGlobal.process; + + /** Used to access faster Node.js helpers. */ + var nodeUtil = (function() { + try { + // Use `util.types` for Node.js 10+. + var types = freeModule && freeModule.require && freeModule.require('util').types; + + if (types) { + return types; + } + + // Legacy `process.binding('util')` for Node.js < 10. + return freeProcess && freeProcess.binding && freeProcess.binding('util'); + } catch (e) {} + }()); + + /* Node.js helper references. */ + var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer, + nodeIsDate = nodeUtil && nodeUtil.isDate, + nodeIsMap = nodeUtil && nodeUtil.isMap, + nodeIsRegExp = nodeUtil && nodeUtil.isRegExp, + nodeIsSet = nodeUtil && nodeUtil.isSet, + nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; + + /*--------------------------------------------------------------------------*/ + + /** + * A faster alternative to `Function#apply`, this function invokes `func` + * with the `this` binding of `thisArg` and the arguments of `args`. + * + * @private + * @param {Function} func The function to invoke. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} args The arguments to invoke `func` with. + * @returns {*} Returns the result of `func`. + */ + function apply(func, thisArg, args) { + switch (args.length) { + case 0: return func.call(thisArg); + case 1: return func.call(thisArg, args[0]); + case 2: return func.call(thisArg, args[0], args[1]); + case 3: return func.call(thisArg, args[0], args[1], args[2]); + } + return func.apply(thisArg, args); + } + + /** + * A specialized version of `baseAggregator` for arrays. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} setter The function to set `accumulator` values. + * @param {Function} iteratee The iteratee to transform keys. + * @param {Object} accumulator The initial aggregated object. + * @returns {Function} Returns `accumulator`. + */ + function arrayAggregator(array, setter, iteratee, accumulator) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + var value = array[index]; + setter(accumulator, value, iteratee(value), array); + } + return accumulator; + } + + /** + * A specialized version of `_.forEach` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ + function arrayEach(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (iteratee(array[index], index, array) === false) { + break; + } + } + return array; + } + + /** + * A specialized version of `_.forEachRight` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ + function arrayEachRight(array, iteratee) { + var length = array == null ? 0 : array.length; + + while (length--) { + if (iteratee(array[length], length, array) === false) { + break; + } + } + return array; + } + + /** + * A specialized version of `_.every` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false`. + */ + function arrayEvery(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (!predicate(array[index], index, array)) { + return false; + } + } + return true; + } + + /** + * A specialized version of `_.filter` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ + function arrayFilter(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; + } + } + return result; + } + + /** + * A specialized version of `_.includes` for arrays without support for + * specifying an index to search from. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ + function arrayIncludes(array, value) { + var length = array == null ? 0 : array.length; + return !!length && baseIndexOf(array, value, 0) > -1; + } + + /** + * This function is like `arrayIncludes` except that it accepts a comparator. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @param {Function} comparator The comparator invoked per element. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ + function arrayIncludesWith(array, value, comparator) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (comparator(value, array[index])) { + return true; + } + } + return false; + } + + /** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ + function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; + } + + /** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ + function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; + } + return array; + } + + /** + * A specialized version of `_.reduce` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the first element of `array` as + * the initial value. + * @returns {*} Returns the accumulated value. + */ + function arrayReduce(array, iteratee, accumulator, initAccum) { + var index = -1, + length = array == null ? 0 : array.length; + + if (initAccum && length) { + accumulator = array[++index]; + } + while (++index < length) { + accumulator = iteratee(accumulator, array[index], index, array); + } + return accumulator; + } + + /** + * A specialized version of `_.reduceRight` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the last element of `array` as + * the initial value. + * @returns {*} Returns the accumulated value. + */ + function arrayReduceRight(array, iteratee, accumulator, initAccum) { + var length = array == null ? 0 : array.length; + if (initAccum && length) { + accumulator = array[--length]; + } + while (length--) { + accumulator = iteratee(accumulator, array[length], length, array); + } + return accumulator; + } + + /** + * A specialized version of `_.some` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ + function arraySome(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; + } + + /** + * Gets the size of an ASCII `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ + var asciiSize = baseProperty('length'); + + /** + * Converts an ASCII `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ + function asciiToArray(string) { + return string.split(''); + } + + /** + * Splits an ASCII `string` into an array of its words. + * + * @private + * @param {string} The string to inspect. + * @returns {Array} Returns the words of `string`. + */ + function asciiWords(string) { + return string.match(reAsciiWord) || []; + } + + /** + * The base implementation of methods like `_.findKey` and `_.findLastKey`, + * without support for iteratee shorthands, which iterates over `collection` + * using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the found element or its key, else `undefined`. + */ + function baseFindKey(collection, predicate, eachFunc) { + var result; + eachFunc(collection, function(value, key, collection) { + if (predicate(value, key, collection)) { + result = key; + return false; + } + }); + return result; + } + + /** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseFindIndex(array, predicate, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 1 : -1); + + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; + } + + /** + * The base implementation of `_.indexOf` without `fromIndex` bounds checks. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseIndexOf(array, value, fromIndex) { + return value === value + ? strictIndexOf(array, value, fromIndex) + : baseFindIndex(array, baseIsNaN, fromIndex); + } + + /** + * This function is like `baseIndexOf` except that it accepts a comparator. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @param {Function} comparator The comparator invoked per element. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseIndexOfWith(array, value, fromIndex, comparator) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (comparator(array[index], value)) { + return index; + } + } + return -1; + } + + /** + * The base implementation of `_.isNaN` without support for number objects. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + */ + function baseIsNaN(value) { + return value !== value; + } + + /** + * The base implementation of `_.mean` and `_.meanBy` without support for + * iteratee shorthands. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {number} Returns the mean. + */ + function baseMean(array, iteratee) { + var length = array == null ? 0 : array.length; + return length ? (baseSum(array, iteratee) / length) : NAN; + } + + /** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new accessor function. + */ + function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; + } + + /** + * The base implementation of `_.propertyOf` without support for deep paths. + * + * @private + * @param {Object} object The object to query. + * @returns {Function} Returns the new accessor function. + */ + function basePropertyOf(object) { + return function(key) { + return object == null ? undefined : object[key]; + }; + } + + /** + * The base implementation of `_.reduce` and `_.reduceRight`, without support + * for iteratee shorthands, which iterates over `collection` using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} accumulator The initial value. + * @param {boolean} initAccum Specify using the first or last element of + * `collection` as the initial value. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the accumulated value. + */ + function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { + eachFunc(collection, function(value, index, collection) { + accumulator = initAccum + ? (initAccum = false, value) + : iteratee(accumulator, value, index, collection); + }); + return accumulator; + } + + /** + * The base implementation of `_.sortBy` which uses `comparer` to define the + * sort order of `array` and replaces criteria objects with their corresponding + * values. + * + * @private + * @param {Array} array The array to sort. + * @param {Function} comparer The function to define sort order. + * @returns {Array} Returns `array`. + */ + function baseSortBy(array, comparer) { + var length = array.length; + + array.sort(comparer); + while (length--) { + array[length] = array[length].value; + } + return array; + } + + /** + * The base implementation of `_.sum` and `_.sumBy` without support for + * iteratee shorthands. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {number} Returns the sum. + */ + function baseSum(array, iteratee) { + var result, + index = -1, + length = array.length; + + while (++index < length) { + var current = iteratee(array[index]); + if (current !== undefined) { + result = result === undefined ? current : (result + current); + } + } + return result; + } + + /** + * The base implementation of `_.times` without support for iteratee shorthands + * or max array length checks. + * + * @private + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the array of results. + */ + function baseTimes(n, iteratee) { + var index = -1, + result = Array(n); + + while (++index < n) { + result[index] = iteratee(index); + } + return result; + } + + /** + * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array + * of key-value pairs for `object` corresponding to the property names of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the key-value pairs. + */ + function baseToPairs(object, props) { + return arrayMap(props, function(key) { + return [key, object[key]]; + }); + } + + /** + * The base implementation of `_.unary` without support for storing metadata. + * + * @private + * @param {Function} func The function to cap arguments for. + * @returns {Function} Returns the new capped function. + */ + function baseUnary(func) { + return function(value) { + return func(value); + }; + } + + /** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ + function baseValues(object, props) { + return arrayMap(props, function(key) { + return object[key]; + }); + } + + /** + * Checks if a `cache` value for `key` exists. + * + * @private + * @param {Object} cache The cache to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function cacheHas(cache, key) { + return cache.has(key); + } + + /** + * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol + * that is not found in the character symbols. + * + * @private + * @param {Array} strSymbols The string symbols to inspect. + * @param {Array} chrSymbols The character symbols to find. + * @returns {number} Returns the index of the first unmatched string symbol. + */ + function charsStartIndex(strSymbols, chrSymbols) { + var index = -1, + length = strSymbols.length; + + while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} + return index; + } + + /** + * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol + * that is not found in the character symbols. + * + * @private + * @param {Array} strSymbols The string symbols to inspect. + * @param {Array} chrSymbols The character symbols to find. + * @returns {number} Returns the index of the last unmatched string symbol. + */ + function charsEndIndex(strSymbols, chrSymbols) { + var index = strSymbols.length; + + while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} + return index; + } + + /** + * Gets the number of `placeholder` occurrences in `array`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} placeholder The placeholder to search for. + * @returns {number} Returns the placeholder count. + */ + function countHolders(array, placeholder) { + var length = array.length, + result = 0; + + while (length--) { + if (array[length] === placeholder) { + ++result; + } + } + return result; + } + + /** + * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A + * letters to basic Latin letters. + * + * @private + * @param {string} letter The matched letter to deburr. + * @returns {string} Returns the deburred letter. + */ + var deburrLetter = basePropertyOf(deburredLetters); + + /** + * Used by `_.escape` to convert characters to HTML entities. + * + * @private + * @param {string} chr The matched character to escape. + * @returns {string} Returns the escaped character. + */ + var escapeHtmlChar = basePropertyOf(htmlEscapes); + + /** + * Used by `_.template` to escape characters for inclusion in compiled string literals. + * + * @private + * @param {string} chr The matched character to escape. + * @returns {string} Returns the escaped character. + */ + function escapeStringChar(chr) { + return '\\' + stringEscapes[chr]; + } + + /** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ + function getValue(object, key) { + return object == null ? undefined : object[key]; + } + + /** + * Checks if `string` contains Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a symbol is found, else `false`. + */ + function hasUnicode(string) { + return reHasUnicode.test(string); + } + + /** + * Checks if `string` contains a word composed of Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a word is found, else `false`. + */ + function hasUnicodeWord(string) { + return reHasUnicodeWord.test(string); + } + + /** + * Converts `iterator` to an array. + * + * @private + * @param {Object} iterator The iterator to convert. + * @returns {Array} Returns the converted array. + */ + function iteratorToArray(iterator) { + var data, + result = []; + + while (!(data = iterator.next()).done) { + result.push(data.value); + } + return result; + } + + /** + * Converts `map` to its key-value pairs. + * + * @private + * @param {Object} map The map to convert. + * @returns {Array} Returns the key-value pairs. + */ + function mapToArray(map) { + var index = -1, + result = Array(map.size); + + map.forEach(function(value, key) { + result[++index] = [key, value]; + }); + return result; + } + + /** + * Creates a unary function that invokes `func` with its argument transformed. + * + * @private + * @param {Function} func The function to wrap. + * @param {Function} transform The argument transform. + * @returns {Function} Returns the new function. + */ + function overArg(func, transform) { + return function(arg) { + return func(transform(arg)); + }; + } + + /** + * Replaces all `placeholder` elements in `array` with an internal placeholder + * and returns an array of their indexes. + * + * @private + * @param {Array} array The array to modify. + * @param {*} placeholder The placeholder to replace. + * @returns {Array} Returns the new array of placeholder indexes. + */ + function replaceHolders(array, placeholder) { + var index = -1, + length = array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (value === placeholder || value === PLACEHOLDER) { + array[index] = PLACEHOLDER; + result[resIndex++] = index; + } + } + return result; + } + + /** + * Converts `set` to an array of its values. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the values. + */ + function setToArray(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = value; + }); + return result; + } + + /** + * Converts `set` to its value-value pairs. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the value-value pairs. + */ + function setToPairs(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = [value, value]; + }); + return result; + } + + /** + * A specialized version of `_.indexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function strictIndexOf(array, value, fromIndex) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (array[index] === value) { + return index; + } + } + return -1; + } + + /** + * A specialized version of `_.lastIndexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function strictLastIndexOf(array, value, fromIndex) { + var index = fromIndex + 1; + while (index--) { + if (array[index] === value) { + return index; + } + } + return index; + } + + /** + * Gets the number of symbols in `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the string size. + */ + function stringSize(string) { + return hasUnicode(string) + ? unicodeSize(string) + : asciiSize(string); + } + + /** + * Converts `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ + function stringToArray(string) { + return hasUnicode(string) + ? unicodeToArray(string) + : asciiToArray(string); + } + + /** + * Used by `_.unescape` to convert HTML entities to characters. + * + * @private + * @param {string} chr The matched character to unescape. + * @returns {string} Returns the unescaped character. + */ + var unescapeHtmlChar = basePropertyOf(htmlUnescapes); + + /** + * Gets the size of a Unicode `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ + function unicodeSize(string) { + var result = reUnicode.lastIndex = 0; + while (reUnicode.test(string)) { + ++result; + } + return result; + } + + /** + * Converts a Unicode `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ + function unicodeToArray(string) { + return string.match(reUnicode) || []; + } + + /** + * Splits a Unicode `string` into an array of its words. + * + * @private + * @param {string} The string to inspect. + * @returns {Array} Returns the words of `string`. + */ + function unicodeWords(string) { + return string.match(reUnicodeWord) || []; + } + + /*--------------------------------------------------------------------------*/ + + /** + * Create a new pristine `lodash` function using the `context` object. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Util + * @param {Object} [context=root] The context object. + * @returns {Function} Returns a new `lodash` function. + * @example + * + * _.mixin({ 'foo': _.constant('foo') }); + * + * var lodash = _.runInContext(); + * lodash.mixin({ 'bar': lodash.constant('bar') }); + * + * _.isFunction(_.foo); + * // => true + * _.isFunction(_.bar); + * // => false + * + * lodash.isFunction(lodash.foo); + * // => false + * lodash.isFunction(lodash.bar); + * // => true + * + * // Create a suped-up `defer` in Node.js. + * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer; + */ + var runInContext = (function runInContext(context) { + context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps)); + + /** Built-in constructor references. */ + var Array = context.Array, + Date = context.Date, + Error = context.Error, + Function = context.Function, + Math = context.Math, + Object = context.Object, + RegExp = context.RegExp, + String = context.String, + TypeError = context.TypeError; + + /** Used for built-in method references. */ + var arrayProto = Array.prototype, + funcProto = Function.prototype, + objectProto = Object.prototype; + + /** Used to detect overreaching core-js shims. */ + var coreJsData = context['__core-js_shared__']; + + /** Used to resolve the decompiled source of functions. */ + var funcToString = funcProto.toString; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** Used to generate unique IDs. */ + var idCounter = 0; + + /** Used to detect methods masquerading as native. */ + var maskSrcKey = (function() { + var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); + return uid ? ('Symbol(src)_1.' + uid) : ''; + }()); + + /** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ + var nativeObjectToString = objectProto.toString; + + /** Used to infer the `Object` constructor. */ + var objectCtorString = funcToString.call(Object); + + /** Used to restore the original `_` reference in `_.noConflict`. */ + var oldDash = root._; + + /** Used to detect if a method is native. */ + var reIsNative = RegExp('^' + + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' + ); + + /** Built-in value references. */ + var Buffer = moduleExports ? context.Buffer : undefined, + Symbol = context.Symbol, + Uint8Array = context.Uint8Array, + allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined, + getPrototype = overArg(Object.getPrototypeOf, Object), + objectCreate = Object.create, + propertyIsEnumerable = objectProto.propertyIsEnumerable, + splice = arrayProto.splice, + spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined, + symIterator = Symbol ? Symbol.iterator : undefined, + symToStringTag = Symbol ? Symbol.toStringTag : undefined; + + var defineProperty = (function() { + try { + var func = getNative(Object, 'defineProperty'); + func({}, '', {}); + return func; + } catch (e) {} + }()); + + /** Mocked built-ins. */ + var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout, + ctxNow = Date && Date.now !== root.Date.now && Date.now, + ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeCeil = Math.ceil, + nativeFloor = Math.floor, + nativeGetSymbols = Object.getOwnPropertySymbols, + nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined, + nativeIsFinite = context.isFinite, + nativeJoin = arrayProto.join, + nativeKeys = overArg(Object.keys, Object), + nativeMax = Math.max, + nativeMin = Math.min, + nativeNow = Date.now, + nativeParseInt = context.parseInt, + nativeRandom = Math.random, + nativeReverse = arrayProto.reverse; + + /* Built-in method references that are verified to be native. */ + var DataView = getNative(context, 'DataView'), + Map = getNative(context, 'Map'), + Promise = getNative(context, 'Promise'), + Set = getNative(context, 'Set'), + WeakMap = getNative(context, 'WeakMap'), + nativeCreate = getNative(Object, 'create'); + + /** Used to store function metadata. */ + var metaMap = WeakMap && new WeakMap; + + /** Used to lookup unminified function names. */ + var realNames = {}; + + /** Used to detect maps, sets, and weakmaps. */ + var dataViewCtorString = toSource(DataView), + mapCtorString = toSource(Map), + promiseCtorString = toSource(Promise), + setCtorString = toSource(Set), + weakMapCtorString = toSource(WeakMap); + + /** Used to convert symbols to primitives and strings. */ + var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a `lodash` object which wraps `value` to enable implicit method + * chain sequences. Methods that operate on and return arrays, collections, + * and functions can be chained together. Methods that retrieve a single value + * or may return a primitive value will automatically end the chain sequence + * and return the unwrapped value. Otherwise, the value must be unwrapped + * with `_#value`. + * + * Explicit chain sequences, which must be unwrapped with `_#value`, may be + * enabled using `_.chain`. + * + * The execution of chained methods is lazy, that is, it's deferred until + * `_#value` is implicitly or explicitly called. + * + * Lazy evaluation allows several methods to support shortcut fusion. + * Shortcut fusion is an optimization to merge iteratee calls; this avoids + * the creation of intermediate arrays and can greatly reduce the number of + * iteratee executions. Sections of a chain sequence qualify for shortcut + * fusion if the section is applied to an array and iteratees accept only + * one argument. The heuristic for whether a section qualifies for shortcut + * fusion is subject to change. + * + * Chaining is supported in custom builds as long as the `_#value` method is + * directly or indirectly included in the build. + * + * In addition to lodash methods, wrappers have `Array` and `String` methods. + * + * The wrapper `Array` methods are: + * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift` + * + * The wrapper `String` methods are: + * `replace` and `split` + * + * The wrapper methods that support shortcut fusion are: + * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`, + * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`, + * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray` + * + * The chainable wrapper methods are: + * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`, + * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`, + * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`, + * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`, + * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`, + * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`, + * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`, + * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`, + * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`, + * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`, + * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`, + * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`, + * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`, + * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`, + * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`, + * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`, + * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`, + * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`, + * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`, + * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`, + * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`, + * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`, + * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`, + * `zipObject`, `zipObjectDeep`, and `zipWith` + * + * The wrapper methods that are **not** chainable by default are: + * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`, + * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`, + * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`, + * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`, + * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`, + * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`, + * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`, + * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`, + * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`, + * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`, + * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`, + * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`, + * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`, + * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`, + * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`, + * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`, + * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`, + * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`, + * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`, + * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`, + * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`, + * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`, + * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`, + * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`, + * `upperFirst`, `value`, and `words` + * + * @name _ + * @constructor + * @category Seq + * @param {*} value The value to wrap in a `lodash` instance. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * function square(n) { + * return n * n; + * } + * + * var wrapped = _([1, 2, 3]); + * + * // Returns an unwrapped value. + * wrapped.reduce(_.add); + * // => 6 + * + * // Returns a wrapped value. + * var squares = wrapped.map(square); + * + * _.isArray(squares); + * // => false + * + * _.isArray(squares.value()); + * // => true + */ + function lodash(value) { + if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) { + if (value instanceof LodashWrapper) { + return value; + } + if (hasOwnProperty.call(value, '__wrapped__')) { + return wrapperClone(value); + } + } + return new LodashWrapper(value); + } + + /** + * The base implementation of `_.create` without support for assigning + * properties to the created object. + * + * @private + * @param {Object} proto The object to inherit from. + * @returns {Object} Returns the new object. + */ + var baseCreate = (function() { + function object() {} + return function(proto) { + if (!isObject(proto)) { + return {}; + } + if (objectCreate) { + return objectCreate(proto); + } + object.prototype = proto; + var result = new object; + object.prototype = undefined; + return result; + }; + }()); + + /** + * The function whose prototype chain sequence wrappers inherit from. + * + * @private + */ + function baseLodash() { + // No operation performed. + } + + /** + * The base constructor for creating `lodash` wrapper objects. + * + * @private + * @param {*} value The value to wrap. + * @param {boolean} [chainAll] Enable explicit method chain sequences. + */ + function LodashWrapper(value, chainAll) { + this.__wrapped__ = value; + this.__actions__ = []; + this.__chain__ = !!chainAll; + this.__index__ = 0; + this.__values__ = undefined; + } + + /** + * By default, the template delimiters used by lodash are like those in + * embedded Ruby (ERB) as well as ES2015 template strings. Change the + * following template settings to use alternative delimiters. + * + * @static + * @memberOf _ + * @type {Object} + */ + lodash.templateSettings = { + + /** + * Used to detect `data` property values to be HTML-escaped. + * + * @memberOf _.templateSettings + * @type {RegExp} + */ + 'escape': reEscape, + + /** + * Used to detect code to be evaluated. + * + * @memberOf _.templateSettings + * @type {RegExp} + */ + 'evaluate': reEvaluate, + + /** + * Used to detect `data` property values to inject. + * + * @memberOf _.templateSettings + * @type {RegExp} + */ + 'interpolate': reInterpolate, + + /** + * Used to reference the data object in the template text. + * + * @memberOf _.templateSettings + * @type {string} + */ + 'variable': '', + + /** + * Used to import variables into the compiled template. + * + * @memberOf _.templateSettings + * @type {Object} + */ + 'imports': { + + /** + * A reference to the `lodash` function. + * + * @memberOf _.templateSettings.imports + * @type {Function} + */ + '_': lodash + } + }; + + // Ensure wrappers are instances of `baseLodash`. + lodash.prototype = baseLodash.prototype; + lodash.prototype.constructor = lodash; + + LodashWrapper.prototype = baseCreate(baseLodash.prototype); + LodashWrapper.prototype.constructor = LodashWrapper; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation. + * + * @private + * @constructor + * @param {*} value The value to wrap. + */ + function LazyWrapper(value) { + this.__wrapped__ = value; + this.__actions__ = []; + this.__dir__ = 1; + this.__filtered__ = false; + this.__iteratees__ = []; + this.__takeCount__ = MAX_ARRAY_LENGTH; + this.__views__ = []; + } + + /** + * Creates a clone of the lazy wrapper object. + * + * @private + * @name clone + * @memberOf LazyWrapper + * @returns {Object} Returns the cloned `LazyWrapper` object. + */ + function lazyClone() { + var result = new LazyWrapper(this.__wrapped__); + result.__actions__ = copyArray(this.__actions__); + result.__dir__ = this.__dir__; + result.__filtered__ = this.__filtered__; + result.__iteratees__ = copyArray(this.__iteratees__); + result.__takeCount__ = this.__takeCount__; + result.__views__ = copyArray(this.__views__); + return result; + } + + /** + * Reverses the direction of lazy iteration. + * + * @private + * @name reverse + * @memberOf LazyWrapper + * @returns {Object} Returns the new reversed `LazyWrapper` object. + */ + function lazyReverse() { + if (this.__filtered__) { + var result = new LazyWrapper(this); + result.__dir__ = -1; + result.__filtered__ = true; + } else { + result = this.clone(); + result.__dir__ *= -1; + } + return result; + } + + /** + * Extracts the unwrapped value from its lazy wrapper. + * + * @private + * @name value + * @memberOf LazyWrapper + * @returns {*} Returns the unwrapped value. + */ + function lazyValue() { + var array = this.__wrapped__.value(), + dir = this.__dir__, + isArr = isArray(array), + isRight = dir < 0, + arrLength = isArr ? array.length : 0, + view = getView(0, arrLength, this.__views__), + start = view.start, + end = view.end, + length = end - start, + index = isRight ? end : (start - 1), + iteratees = this.__iteratees__, + iterLength = iteratees.length, + resIndex = 0, + takeCount = nativeMin(length, this.__takeCount__); + + if (!isArr || (!isRight && arrLength == length && takeCount == length)) { + return baseWrapperValue(array, this.__actions__); + } + var result = []; + + outer: + while (length-- && resIndex < takeCount) { + index += dir; + + var iterIndex = -1, + value = array[index]; + + while (++iterIndex < iterLength) { + var data = iteratees[iterIndex], + iteratee = data.iteratee, + type = data.type, + computed = iteratee(value); + + if (type == LAZY_MAP_FLAG) { + value = computed; + } else if (!computed) { + if (type == LAZY_FILTER_FLAG) { + continue outer; + } else { + break outer; + } + } + } + result[resIndex++] = value; + } + return result; + } + + // Ensure `LazyWrapper` is an instance of `baseLodash`. + LazyWrapper.prototype = baseCreate(baseLodash.prototype); + LazyWrapper.prototype.constructor = LazyWrapper; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a hash object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function Hash(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + + /** + * Removes all key-value entries from the hash. + * + * @private + * @name clear + * @memberOf Hash + */ + function hashClear() { + this.__data__ = nativeCreate ? nativeCreate(null) : {}; + this.size = 0; + } + + /** + * Removes `key` and its value from the hash. + * + * @private + * @name delete + * @memberOf Hash + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function hashDelete(key) { + var result = this.has(key) && delete this.__data__[key]; + this.size -= result ? 1 : 0; + return result; + } + + /** + * Gets the hash value for `key`. + * + * @private + * @name get + * @memberOf Hash + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function hashGet(key) { + var data = this.__data__; + if (nativeCreate) { + var result = data[key]; + return result === HASH_UNDEFINED ? undefined : result; + } + return hasOwnProperty.call(data, key) ? data[key] : undefined; + } + + /** + * Checks if a hash value for `key` exists. + * + * @private + * @name has + * @memberOf Hash + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function hashHas(key) { + var data = this.__data__; + return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key); + } + + /** + * Sets the hash `key` to `value`. + * + * @private + * @name set + * @memberOf Hash + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the hash instance. + */ + function hashSet(key, value) { + var data = this.__data__; + this.size += this.has(key) ? 0 : 1; + data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; + return this; + } + + // Add methods to `Hash`. + Hash.prototype.clear = hashClear; + Hash.prototype['delete'] = hashDelete; + Hash.prototype.get = hashGet; + Hash.prototype.has = hashHas; + Hash.prototype.set = hashSet; + + /*------------------------------------------------------------------------*/ + + /** + * Creates an list cache object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function ListCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + + /** + * Removes all key-value entries from the list cache. + * + * @private + * @name clear + * @memberOf ListCache + */ + function listCacheClear() { + this.__data__ = []; + this.size = 0; + } + + /** + * Removes `key` and its value from the list cache. + * + * @private + * @name delete + * @memberOf ListCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function listCacheDelete(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + return false; + } + var lastIndex = data.length - 1; + if (index == lastIndex) { + data.pop(); + } else { + splice.call(data, index, 1); + } + --this.size; + return true; + } + + /** + * Gets the list cache value for `key`. + * + * @private + * @name get + * @memberOf ListCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function listCacheGet(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + return index < 0 ? undefined : data[index][1]; + } + + /** + * Checks if a list cache value for `key` exists. + * + * @private + * @name has + * @memberOf ListCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function listCacheHas(key) { + return assocIndexOf(this.__data__, key) > -1; + } + + /** + * Sets the list cache `key` to `value`. + * + * @private + * @name set + * @memberOf ListCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the list cache instance. + */ + function listCacheSet(key, value) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + ++this.size; + data.push([key, value]); + } else { + data[index][1] = value; + } + return this; + } + + // Add methods to `ListCache`. + ListCache.prototype.clear = listCacheClear; + ListCache.prototype['delete'] = listCacheDelete; + ListCache.prototype.get = listCacheGet; + ListCache.prototype.has = listCacheHas; + ListCache.prototype.set = listCacheSet; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a map cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function MapCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + + /** + * Removes all key-value entries from the map. + * + * @private + * @name clear + * @memberOf MapCache + */ + function mapCacheClear() { + this.size = 0; + this.__data__ = { + 'hash': new Hash, + 'map': new (Map || ListCache), + 'string': new Hash + }; + } + + /** + * Removes `key` and its value from the map. + * + * @private + * @name delete + * @memberOf MapCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function mapCacheDelete(key) { + var result = getMapData(this, key)['delete'](key); + this.size -= result ? 1 : 0; + return result; + } + + /** + * Gets the map value for `key`. + * + * @private + * @name get + * @memberOf MapCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function mapCacheGet(key) { + return getMapData(this, key).get(key); + } + + /** + * Checks if a map value for `key` exists. + * + * @private + * @name has + * @memberOf MapCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function mapCacheHas(key) { + return getMapData(this, key).has(key); + } + + /** + * Sets the map `key` to `value`. + * + * @private + * @name set + * @memberOf MapCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the map cache instance. + */ + function mapCacheSet(key, value) { + var data = getMapData(this, key), + size = data.size; + + data.set(key, value); + this.size += data.size == size ? 0 : 1; + return this; + } + + // Add methods to `MapCache`. + MapCache.prototype.clear = mapCacheClear; + MapCache.prototype['delete'] = mapCacheDelete; + MapCache.prototype.get = mapCacheGet; + MapCache.prototype.has = mapCacheHas; + MapCache.prototype.set = mapCacheSet; + + /*------------------------------------------------------------------------*/ + + /** + * + * Creates an array cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ + function SetCache(values) { + var index = -1, + length = values == null ? 0 : values.length; + + this.__data__ = new MapCache; + while (++index < length) { + this.add(values[index]); + } + } + + /** + * Adds `value` to the array cache. + * + * @private + * @name add + * @memberOf SetCache + * @alias push + * @param {*} value The value to cache. + * @returns {Object} Returns the cache instance. + */ + function setCacheAdd(value) { + this.__data__.set(value, HASH_UNDEFINED); + return this; + } + + /** + * Checks if `value` is in the array cache. + * + * @private + * @name has + * @memberOf SetCache + * @param {*} value The value to search for. + * @returns {number} Returns `true` if `value` is found, else `false`. + */ + function setCacheHas(value) { + return this.__data__.has(value); + } + + // Add methods to `SetCache`. + SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; + SetCache.prototype.has = setCacheHas; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a stack cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function Stack(entries) { + var data = this.__data__ = new ListCache(entries); + this.size = data.size; + } + + /** + * Removes all key-value entries from the stack. + * + * @private + * @name clear + * @memberOf Stack + */ + function stackClear() { + this.__data__ = new ListCache; + this.size = 0; + } + + /** + * Removes `key` and its value from the stack. + * + * @private + * @name delete + * @memberOf Stack + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function stackDelete(key) { + var data = this.__data__, + result = data['delete'](key); + + this.size = data.size; + return result; + } + + /** + * Gets the stack value for `key`. + * + * @private + * @name get + * @memberOf Stack + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function stackGet(key) { + return this.__data__.get(key); + } + + /** + * Checks if a stack value for `key` exists. + * + * @private + * @name has + * @memberOf Stack + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function stackHas(key) { + return this.__data__.has(key); + } + + /** + * Sets the stack `key` to `value`. + * + * @private + * @name set + * @memberOf Stack + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the stack cache instance. + */ + function stackSet(key, value) { + var data = this.__data__; + if (data instanceof ListCache) { + var pairs = data.__data__; + if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) { + pairs.push([key, value]); + this.size = ++data.size; + return this; + } + data = this.__data__ = new MapCache(pairs); + } + data.set(key, value); + this.size = data.size; + return this; + } + + // Add methods to `Stack`. + Stack.prototype.clear = stackClear; + Stack.prototype['delete'] = stackDelete; + Stack.prototype.get = stackGet; + Stack.prototype.has = stackHas; + Stack.prototype.set = stackSet; + + /*------------------------------------------------------------------------*/ + + /** + * Creates an array of the enumerable property names of the array-like `value`. + * + * @private + * @param {*} value The value to query. + * @param {boolean} inherited Specify returning inherited property names. + * @returns {Array} Returns the array of property names. + */ + function arrayLikeKeys(value, inherited) { + var isArr = isArray(value), + isArg = !isArr && isArguments(value), + isBuff = !isArr && !isArg && isBuffer(value), + isType = !isArr && !isArg && !isBuff && isTypedArray(value), + skipIndexes = isArr || isArg || isBuff || isType, + result = skipIndexes ? baseTimes(value.length, String) : [], + length = result.length; + + for (var key in value) { + if ((inherited || hasOwnProperty.call(value, key)) && + !(skipIndexes && ( + // Safari 9 has enumerable `arguments.length` in strict mode. + key == 'length' || + // Node.js 0.10 has enumerable non-index properties on buffers. + (isBuff && (key == 'offset' || key == 'parent')) || + // PhantomJS 2 has enumerable non-index properties on typed arrays. + (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || + // Skip index properties. + isIndex(key, length) + ))) { + result.push(key); + } + } + return result; + } + + /** + * A specialized version of `_.sample` for arrays. + * + * @private + * @param {Array} array The array to sample. + * @returns {*} Returns the random element. + */ + function arraySample(array) { + var length = array.length; + return length ? array[baseRandom(0, length - 1)] : undefined; + } + + /** + * A specialized version of `_.sampleSize` for arrays. + * + * @private + * @param {Array} array The array to sample. + * @param {number} n The number of elements to sample. + * @returns {Array} Returns the random elements. + */ + function arraySampleSize(array, n) { + return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length)); + } + + /** + * A specialized version of `_.shuffle` for arrays. + * + * @private + * @param {Array} array The array to shuffle. + * @returns {Array} Returns the new shuffled array. + */ + function arrayShuffle(array) { + return shuffleSelf(copyArray(array)); + } + + /** + * This function is like `assignValue` except that it doesn't assign + * `undefined` values. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function assignMergeValue(object, key, value) { + if ((value !== undefined && !eq(object[key], value)) || + (value === undefined && !(key in object))) { + baseAssignValue(object, key, value); + } + } + + /** + * Assigns `value` to `key` of `object` if the existing value is not equivalent + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function assignValue(object, key, value) { + var objValue = object[key]; + if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || + (value === undefined && !(key in object))) { + baseAssignValue(object, key, value); + } + } + + /** + * Gets the index at which the `key` is found in `array` of key-value pairs. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} key The key to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function assocIndexOf(array, key) { + var length = array.length; + while (length--) { + if (eq(array[length][0], key)) { + return length; + } + } + return -1; + } + + /** + * Aggregates elements of `collection` on `accumulator` with keys transformed + * by `iteratee` and values set by `setter`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} setter The function to set `accumulator` values. + * @param {Function} iteratee The iteratee to transform keys. + * @param {Object} accumulator The initial aggregated object. + * @returns {Function} Returns `accumulator`. + */ + function baseAggregator(collection, setter, iteratee, accumulator) { + baseEach(collection, function(value, key, collection) { + setter(accumulator, value, iteratee(value), collection); + }); + return accumulator; + } + + /** + * The base implementation of `_.assign` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ + function baseAssign(object, source) { + return object && copyObject(source, keys(source), object); + } + + /** + * The base implementation of `_.assignIn` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ + function baseAssignIn(object, source) { + return object && copyObject(source, keysIn(source), object); + } + + /** + * The base implementation of `assignValue` and `assignMergeValue` without + * value checks. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function baseAssignValue(object, key, value) { + if (key == '__proto__' && defineProperty) { + defineProperty(object, key, { + 'configurable': true, + 'enumerable': true, + 'value': value, + 'writable': true + }); + } else { + object[key] = value; + } + } + + /** + * The base implementation of `_.at` without support for individual paths. + * + * @private + * @param {Object} object The object to iterate over. + * @param {string[]} paths The property paths to pick. + * @returns {Array} Returns the picked elements. + */ + function baseAt(object, paths) { + var index = -1, + length = paths.length, + result = Array(length), + skip = object == null; + + while (++index < length) { + result[index] = skip ? undefined : get(object, paths[index]); + } + return result; + } + + /** + * The base implementation of `_.clamp` which doesn't coerce arguments. + * + * @private + * @param {number} number The number to clamp. + * @param {number} [lower] The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the clamped number. + */ + function baseClamp(number, lower, upper) { + if (number === number) { + if (upper !== undefined) { + number = number <= upper ? number : upper; + } + if (lower !== undefined) { + number = number >= lower ? number : lower; + } + } + return number; + } + + /** + * The base implementation of `_.clone` and `_.cloneDeep` which tracks + * traversed objects. + * + * @private + * @param {*} value The value to clone. + * @param {boolean} bitmask The bitmask flags. + * 1 - Deep clone + * 2 - Flatten inherited properties + * 4 - Clone symbols + * @param {Function} [customizer] The function to customize cloning. + * @param {string} [key] The key of `value`. + * @param {Object} [object] The parent object of `value`. + * @param {Object} [stack] Tracks traversed objects and their clone counterparts. + * @returns {*} Returns the cloned value. + */ + function baseClone(value, bitmask, customizer, key, object, stack) { + var result, + isDeep = bitmask & CLONE_DEEP_FLAG, + isFlat = bitmask & CLONE_FLAT_FLAG, + isFull = bitmask & CLONE_SYMBOLS_FLAG; + + if (customizer) { + result = object ? customizer(value, key, object, stack) : customizer(value); + } + if (result !== undefined) { + return result; + } + if (!isObject(value)) { + return value; + } + var isArr = isArray(value); + if (isArr) { + result = initCloneArray(value); + if (!isDeep) { + return copyArray(value, result); + } + } else { + var tag = getTag(value), + isFunc = tag == funcTag || tag == genTag; + + if (isBuffer(value)) { + return cloneBuffer(value, isDeep); + } + if (tag == objectTag || tag == argsTag || (isFunc && !object)) { + result = (isFlat || isFunc) ? {} : initCloneObject(value); + if (!isDeep) { + return isFlat + ? copySymbolsIn(value, baseAssignIn(result, value)) + : copySymbols(value, baseAssign(result, value)); + } + } else { + if (!cloneableTags[tag]) { + return object ? value : {}; + } + result = initCloneByTag(value, tag, isDeep); + } + } + // Check for circular references and return its corresponding clone. + stack || (stack = new Stack); + var stacked = stack.get(value); + if (stacked) { + return stacked; + } + stack.set(value, result); + + if (isSet(value)) { + value.forEach(function(subValue) { + result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); + }); + } else if (isMap(value)) { + value.forEach(function(subValue, key) { + result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + } + + var keysFunc = isFull + ? (isFlat ? getAllKeysIn : getAllKeys) + : (isFlat ? keysIn : keys); + + var props = isArr ? undefined : keysFunc(value); + arrayEach(props || value, function(subValue, key) { + if (props) { + key = subValue; + subValue = value[key]; + } + // Recursively populate clone (susceptible to call stack limits). + assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + return result; + } + + /** + * The base implementation of `_.conforms` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property predicates to conform to. + * @returns {Function} Returns the new spec function. + */ + function baseConforms(source) { + var props = keys(source); + return function(object) { + return baseConformsTo(object, source, props); + }; + } + + /** + * The base implementation of `_.conformsTo` which accepts `props` to check. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property predicates to conform to. + * @returns {boolean} Returns `true` if `object` conforms, else `false`. + */ + function baseConformsTo(object, source, props) { + var length = props.length; + if (object == null) { + return !length; + } + object = Object(object); + while (length--) { + var key = props[length], + predicate = source[key], + value = object[key]; + + if ((value === undefined && !(key in object)) || !predicate(value)) { + return false; + } + } + return true; + } + + /** + * The base implementation of `_.delay` and `_.defer` which accepts `args` + * to provide to `func`. + * + * @private + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @param {Array} args The arguments to provide to `func`. + * @returns {number|Object} Returns the timer id or timeout object. + */ + function baseDelay(func, wait, args) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return setTimeout(function() { func.apply(undefined, args); }, wait); + } + + /** + * The base implementation of methods like `_.difference` without support + * for excluding multiple arrays or iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Array} values The values to exclude. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of filtered values. + */ + function baseDifference(array, values, iteratee, comparator) { + var index = -1, + includes = arrayIncludes, + isCommon = true, + length = array.length, + result = [], + valuesLength = values.length; + + if (!length) { + return result; + } + if (iteratee) { + values = arrayMap(values, baseUnary(iteratee)); + } + if (comparator) { + includes = arrayIncludesWith; + isCommon = false; + } + else if (values.length >= LARGE_ARRAY_SIZE) { + includes = cacheHas; + isCommon = false; + values = new SetCache(values); + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee == null ? value : iteratee(value); + + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var valuesIndex = valuesLength; + while (valuesIndex--) { + if (values[valuesIndex] === computed) { + continue outer; + } + } + result.push(value); + } + else if (!includes(values, computed, comparator)) { + result.push(value); + } + } + return result; + } + + /** + * The base implementation of `_.forEach` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ + var baseEach = createBaseEach(baseForOwn); + + /** + * The base implementation of `_.forEachRight` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ + var baseEachRight = createBaseEach(baseForOwnRight, true); + + /** + * The base implementation of `_.every` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false` + */ + function baseEvery(collection, predicate) { + var result = true; + baseEach(collection, function(value, index, collection) { + result = !!predicate(value, index, collection); + return result; + }); + return result; + } + + /** + * The base implementation of methods like `_.max` and `_.min` which accepts a + * `comparator` to determine the extremum value. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The iteratee invoked per iteration. + * @param {Function} comparator The comparator used to compare values. + * @returns {*} Returns the extremum value. + */ + function baseExtremum(array, iteratee, comparator) { + var index = -1, + length = array.length; + + while (++index < length) { + var value = array[index], + current = iteratee(value); + + if (current != null && (computed === undefined + ? (current === current && !isSymbol(current)) + : comparator(current, computed) + )) { + var computed = current, + result = value; + } + } + return result; + } + + /** + * The base implementation of `_.fill` without an iteratee call guard. + * + * @private + * @param {Array} array The array to fill. + * @param {*} value The value to fill `array` with. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns `array`. + */ + function baseFill(array, value, start, end) { + var length = array.length; + + start = toInteger(start); + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = (end === undefined || end > length) ? length : toInteger(end); + if (end < 0) { + end += length; + } + end = start > end ? 0 : toLength(end); + while (start < end) { + array[start++] = value; + } + return array; + } + + /** + * The base implementation of `_.filter` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ + function baseFilter(collection, predicate) { + var result = []; + baseEach(collection, function(value, index, collection) { + if (predicate(value, index, collection)) { + result.push(value); + } + }); + return result; + } + + /** + * The base implementation of `_.flatten` with support for restricting flattening. + * + * @private + * @param {Array} array The array to flatten. + * @param {number} depth The maximum recursion depth. + * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. + * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ + function baseFlatten(array, depth, predicate, isStrict, result) { + var index = -1, + length = array.length; + + predicate || (predicate = isFlattenable); + result || (result = []); + + while (++index < length) { + var value = array[index]; + if (depth > 0 && predicate(value)) { + if (depth > 1) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, depth - 1, predicate, isStrict, result); + } else { + arrayPush(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; + } + + /** + * The base implementation of `baseForOwn` which iterates over `object` + * properties returned by `keysFunc` and invokes `iteratee` for each property. + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ + var baseFor = createBaseFor(); + + /** + * This function is like `baseFor` except that it iterates over properties + * in the opposite order. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ + var baseForRight = createBaseFor(true); + + /** + * The base implementation of `_.forOwn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ + function baseForOwn(object, iteratee) { + return object && baseFor(object, iteratee, keys); + } + + /** + * The base implementation of `_.forOwnRight` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ + function baseForOwnRight(object, iteratee) { + return object && baseForRight(object, iteratee, keys); + } + + /** + * The base implementation of `_.functions` which creates an array of + * `object` function property names filtered from `props`. + * + * @private + * @param {Object} object The object to inspect. + * @param {Array} props The property names to filter. + * @returns {Array} Returns the function names. + */ + function baseFunctions(object, props) { + return arrayFilter(props, function(key) { + return isFunction(object[key]); + }); + } + + /** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ + function baseGet(object, path) { + path = castPath(path, object); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[toKey(path[index++])]; + } + return (index && index == length) ? object : undefined; + } + + /** + * The base implementation of `getAllKeys` and `getAllKeysIn` which uses + * `keysFunc` and `symbolsFunc` to get the enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Function} keysFunc The function to get the keys of `object`. + * @param {Function} symbolsFunc The function to get the symbols of `object`. + * @returns {Array} Returns the array of property names and symbols. + */ + function baseGetAllKeys(object, keysFunc, symbolsFunc) { + var result = keysFunc(object); + return isArray(object) ? result : arrayPush(result, symbolsFunc(object)); + } + + /** + * The base implementation of `getTag` without fallbacks for buggy environments. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ + function baseGetTag(value) { + if (value == null) { + return value === undefined ? undefinedTag : nullTag; + } + return (symToStringTag && symToStringTag in Object(value)) + ? getRawTag(value) + : objectToString(value); + } + + /** + * The base implementation of `_.gt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, + * else `false`. + */ + function baseGt(value, other) { + return value > other; + } + + /** + * The base implementation of `_.has` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ + function baseHas(object, key) { + return object != null && hasOwnProperty.call(object, key); + } + + /** + * The base implementation of `_.hasIn` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ + function baseHasIn(object, key) { + return object != null && key in Object(object); + } + + /** + * The base implementation of `_.inRange` which doesn't coerce arguments. + * + * @private + * @param {number} number The number to check. + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @returns {boolean} Returns `true` if `number` is in the range, else `false`. + */ + function baseInRange(number, start, end) { + return number >= nativeMin(start, end) && number < nativeMax(start, end); + } + + /** + * The base implementation of methods like `_.intersection`, without support + * for iteratee shorthands, that accepts an array of arrays to inspect. + * + * @private + * @param {Array} arrays The arrays to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of shared values. + */ + function baseIntersection(arrays, iteratee, comparator) { + var includes = comparator ? arrayIncludesWith : arrayIncludes, + length = arrays[0].length, + othLength = arrays.length, + othIndex = othLength, + caches = Array(othLength), + maxLength = Infinity, + result = []; + + while (othIndex--) { + var array = arrays[othIndex]; + if (othIndex && iteratee) { + array = arrayMap(array, baseUnary(iteratee)); + } + maxLength = nativeMin(array.length, maxLength); + caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120)) + ? new SetCache(othIndex && array) + : undefined; + } + array = arrays[0]; + + var index = -1, + seen = caches[0]; + + outer: + while (++index < length && result.length < maxLength) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + value = (comparator || value !== 0) ? value : 0; + if (!(seen + ? cacheHas(seen, computed) + : includes(result, computed, comparator) + )) { + othIndex = othLength; + while (--othIndex) { + var cache = caches[othIndex]; + if (!(cache + ? cacheHas(cache, computed) + : includes(arrays[othIndex], computed, comparator)) + ) { + continue outer; + } + } + if (seen) { + seen.push(computed); + } + result.push(value); + } + } + return result; + } + + /** + * The base implementation of `_.invert` and `_.invertBy` which inverts + * `object` with values transformed by `iteratee` and set by `setter`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} setter The function to set `accumulator` values. + * @param {Function} iteratee The iteratee to transform values. + * @param {Object} accumulator The initial inverted object. + * @returns {Function} Returns `accumulator`. + */ + function baseInverter(object, setter, iteratee, accumulator) { + baseForOwn(object, function(value, key, object) { + setter(accumulator, iteratee(value), key, object); + }); + return accumulator; + } + + /** + * The base implementation of `_.invoke` without support for individual + * method arguments. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the method to invoke. + * @param {Array} args The arguments to invoke the method with. + * @returns {*} Returns the result of the invoked method. + */ + function baseInvoke(object, path, args) { + path = castPath(path, object); + object = parent(object, path); + var func = object == null ? object : object[toKey(last(path))]; + return func == null ? undefined : apply(func, object, args); + } + + /** + * The base implementation of `_.isArguments`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + */ + function baseIsArguments(value) { + return isObjectLike(value) && baseGetTag(value) == argsTag; + } + + /** + * The base implementation of `_.isArrayBuffer` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. + */ + function baseIsArrayBuffer(value) { + return isObjectLike(value) && baseGetTag(value) == arrayBufferTag; + } + + /** + * The base implementation of `_.isDate` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a date object, else `false`. + */ + function baseIsDate(value) { + return isObjectLike(value) && baseGetTag(value) == dateTag; + } + + /** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {boolean} bitmask The bitmask flags. + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Function} [customizer] The function to customize comparisons. + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ + function baseIsEqual(value, other, bitmask, customizer, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) { + return value !== value && other !== other; + } + return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); + } + + /** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { + var objIsArr = isArray(object), + othIsArr = isArray(other), + objTag = objIsArr ? arrayTag : getTag(object), + othTag = othIsArr ? arrayTag : getTag(other); + + objTag = objTag == argsTag ? objectTag : objTag; + othTag = othTag == argsTag ? objectTag : othTag; + + var objIsObj = objTag == objectTag, + othIsObj = othTag == objectTag, + isSameTag = objTag == othTag; + + if (isSameTag && isBuffer(object)) { + if (!isBuffer(other)) { + return false; + } + objIsArr = true; + objIsObj = false; + } + if (isSameTag && !objIsObj) { + stack || (stack = new Stack); + return (objIsArr || isTypedArray(object)) + ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) + : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); + } + if (!(bitmask & COMPARE_PARTIAL_FLAG)) { + var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, + othUnwrapped = othIsWrapped ? other.value() : other; + + stack || (stack = new Stack); + return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new Stack); + return equalObjects(object, other, bitmask, customizer, equalFunc, stack); + } + + /** + * The base implementation of `_.isMap` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + */ + function baseIsMap(value) { + return isObjectLike(value) && getTag(value) == mapTag; + } + + /** + * The base implementation of `_.isMatch` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Array} matchData The property names, values, and compare flags to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + */ + function baseIsMatch(object, source, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer; + + if (object == null) { + return !length; + } + object = Object(object); + while (index--) { + var data = matchData[index]; + if ((noCustomizer && data[2]) + ? data[1] !== object[data[0]] + : !(data[0] in object) + ) { + return false; + } + } + while (++index < length) { + data = matchData[index]; + var key = data[0], + objValue = object[key], + srcValue = data[1]; + + if (noCustomizer && data[2]) { + if (objValue === undefined && !(key in object)) { + return false; + } + } else { + var stack = new Stack; + if (customizer) { + var result = customizer(objValue, srcValue, key, object, source, stack); + } + if (!(result === undefined + ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack) + : result + )) { + return false; + } + } + } + return true; + } + + /** + * The base implementation of `_.isNative` without bad shim checks. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + */ + function baseIsNative(value) { + if (!isObject(value) || isMasked(value)) { + return false; + } + var pattern = isFunction(value) ? reIsNative : reIsHostCtor; + return pattern.test(toSource(value)); + } + + /** + * The base implementation of `_.isRegExp` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. + */ + function baseIsRegExp(value) { + return isObjectLike(value) && baseGetTag(value) == regexpTag; + } + + /** + * The base implementation of `_.isSet` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + */ + function baseIsSet(value) { + return isObjectLike(value) && getTag(value) == setTag; + } + + /** + * The base implementation of `_.isTypedArray` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + */ + function baseIsTypedArray(value) { + return isObjectLike(value) && + isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; + } + + /** + * The base implementation of `_.iteratee`. + * + * @private + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. + */ + function baseIteratee(value) { + // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. + // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. + if (typeof value == 'function') { + return value; + } + if (value == null) { + return identity; + } + if (typeof value == 'object') { + return isArray(value) + ? baseMatchesProperty(value[0], value[1]) + : baseMatches(value); + } + return property(value); + } + + /** + * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function baseKeys(object) { + if (!isPrototype(object)) { + return nativeKeys(object); + } + var result = []; + for (var key in Object(object)) { + if (hasOwnProperty.call(object, key) && key != 'constructor') { + result.push(key); + } + } + return result; + } + + /** + * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function baseKeysIn(object) { + if (!isObject(object)) { + return nativeKeysIn(object); + } + var isProto = isPrototype(object), + result = []; + + for (var key in object) { + if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { + result.push(key); + } + } + return result; + } + + /** + * The base implementation of `_.lt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, + * else `false`. + */ + function baseLt(value, other) { + return value < other; + } + + /** + * The base implementation of `_.map` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ + function baseMap(collection, iteratee) { + var index = -1, + result = isArrayLike(collection) ? Array(collection.length) : []; + + baseEach(collection, function(value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; + } + + /** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + */ + function baseMatches(source) { + var matchData = getMatchData(source); + if (matchData.length == 1 && matchData[0][2]) { + return matchesStrictComparable(matchData[0][0], matchData[0][1]); + } + return function(object) { + return object === source || baseIsMatch(object, source, matchData); + }; + } + + /** + * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. + * + * @private + * @param {string} path The path of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ + function baseMatchesProperty(path, srcValue) { + if (isKey(path) && isStrictComparable(srcValue)) { + return matchesStrictComparable(toKey(path), srcValue); + } + return function(object) { + var objValue = get(object, path); + return (objValue === undefined && objValue === srcValue) + ? hasIn(object, path) + : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG); + }; + } + + /** + * The base implementation of `_.merge` without support for multiple sources. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {number} srcIndex The index of `source`. + * @param {Function} [customizer] The function to customize merged values. + * @param {Object} [stack] Tracks traversed source values and their merged + * counterparts. + */ + function baseMerge(object, source, srcIndex, customizer, stack) { + if (object === source) { + return; + } + baseFor(source, function(srcValue, key) { + stack || (stack = new Stack); + if (isObject(srcValue)) { + baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack); + } + else { + var newValue = customizer + ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack) + : undefined; + + if (newValue === undefined) { + newValue = srcValue; + } + assignMergeValue(object, key, newValue); + } + }, keysIn); + } + + /** + * A specialized version of `baseMerge` for arrays and objects which performs + * deep merges and tracks traversed objects enabling objects with circular + * references to be merged. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {string} key The key of the value to merge. + * @param {number} srcIndex The index of `source`. + * @param {Function} mergeFunc The function to merge values. + * @param {Function} [customizer] The function to customize assigned values. + * @param {Object} [stack] Tracks traversed source values and their merged + * counterparts. + */ + function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) { + var objValue = safeGet(object, key), + srcValue = safeGet(source, key), + stacked = stack.get(srcValue); + + if (stacked) { + assignMergeValue(object, key, stacked); + return; + } + var newValue = customizer + ? customizer(objValue, srcValue, (key + ''), object, source, stack) + : undefined; + + var isCommon = newValue === undefined; + + if (isCommon) { + var isArr = isArray(srcValue), + isBuff = !isArr && isBuffer(srcValue), + isTyped = !isArr && !isBuff && isTypedArray(srcValue); + + newValue = srcValue; + if (isArr || isBuff || isTyped) { + if (isArray(objValue)) { + newValue = objValue; + } + else if (isArrayLikeObject(objValue)) { + newValue = copyArray(objValue); + } + else if (isBuff) { + isCommon = false; + newValue = cloneBuffer(srcValue, true); + } + else if (isTyped) { + isCommon = false; + newValue = cloneTypedArray(srcValue, true); + } + else { + newValue = []; + } + } + else if (isPlainObject(srcValue) || isArguments(srcValue)) { + newValue = objValue; + if (isArguments(objValue)) { + newValue = toPlainObject(objValue); + } + else if (!isObject(objValue) || isFunction(objValue)) { + newValue = initCloneObject(srcValue); + } + } + else { + isCommon = false; + } + } + if (isCommon) { + // Recursively merge objects and arrays (susceptible to call stack limits). + stack.set(srcValue, newValue); + mergeFunc(newValue, srcValue, srcIndex, customizer, stack); + stack['delete'](srcValue); + } + assignMergeValue(object, key, newValue); + } + + /** + * The base implementation of `_.nth` which doesn't coerce arguments. + * + * @private + * @param {Array} array The array to query. + * @param {number} n The index of the element to return. + * @returns {*} Returns the nth element of `array`. + */ + function baseNth(array, n) { + var length = array.length; + if (!length) { + return; + } + n += n < 0 ? length : 0; + return isIndex(n, length) ? array[n] : undefined; + } + + /** + * The base implementation of `_.orderBy` without param guards. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. + * @param {string[]} orders The sort orders of `iteratees`. + * @returns {Array} Returns the new sorted array. + */ + function baseOrderBy(collection, iteratees, orders) { + if (iteratees.length) { + iteratees = arrayMap(iteratees, function(iteratee) { + if (isArray(iteratee)) { + return function(value) { + return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee); + } + } + return iteratee; + }); + } else { + iteratees = [identity]; + } + + var index = -1; + iteratees = arrayMap(iteratees, baseUnary(getIteratee())); + + var result = baseMap(collection, function(value, key, collection) { + var criteria = arrayMap(iteratees, function(iteratee) { + return iteratee(value); + }); + return { 'criteria': criteria, 'index': ++index, 'value': value }; + }); + + return baseSortBy(result, function(object, other) { + return compareMultiple(object, other, orders); + }); + } + + /** + * The base implementation of `_.pick` without support for individual + * property identifiers. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @returns {Object} Returns the new object. + */ + function basePick(object, paths) { + return basePickBy(object, paths, function(value, path) { + return hasIn(object, path); + }); + } + + /** + * The base implementation of `_.pickBy` without support for iteratee shorthands. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @param {Function} predicate The function invoked per property. + * @returns {Object} Returns the new object. + */ + function basePickBy(object, paths, predicate) { + var index = -1, + length = paths.length, + result = {}; + + while (++index < length) { + var path = paths[index], + value = baseGet(object, path); + + if (predicate(value, path)) { + baseSet(result, castPath(path, object), value); + } + } + return result; + } + + /** + * A specialized version of `baseProperty` which supports deep paths. + * + * @private + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + */ + function basePropertyDeep(path) { + return function(object) { + return baseGet(object, path); + }; + } + + /** + * The base implementation of `_.pullAllBy` without support for iteratee + * shorthands. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns `array`. + */ + function basePullAll(array, values, iteratee, comparator) { + var indexOf = comparator ? baseIndexOfWith : baseIndexOf, + index = -1, + length = values.length, + seen = array; + + if (array === values) { + values = copyArray(values); + } + if (iteratee) { + seen = arrayMap(array, baseUnary(iteratee)); + } + while (++index < length) { + var fromIndex = 0, + value = values[index], + computed = iteratee ? iteratee(value) : value; + + while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) { + if (seen !== array) { + splice.call(seen, fromIndex, 1); + } + splice.call(array, fromIndex, 1); + } + } + return array; + } + + /** + * The base implementation of `_.pullAt` without support for individual + * indexes or capturing the removed elements. + * + * @private + * @param {Array} array The array to modify. + * @param {number[]} indexes The indexes of elements to remove. + * @returns {Array} Returns `array`. + */ + function basePullAt(array, indexes) { + var length = array ? indexes.length : 0, + lastIndex = length - 1; + + while (length--) { + var index = indexes[length]; + if (length == lastIndex || index !== previous) { + var previous = index; + if (isIndex(index)) { + splice.call(array, index, 1); + } else { + baseUnset(array, index); + } + } + } + return array; + } + + /** + * The base implementation of `_.random` without support for returning + * floating-point numbers. + * + * @private + * @param {number} lower The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the random number. + */ + function baseRandom(lower, upper) { + return lower + nativeFloor(nativeRandom() * (upper - lower + 1)); + } + + /** + * The base implementation of `_.range` and `_.rangeRight` which doesn't + * coerce arguments. + * + * @private + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @param {number} step The value to increment or decrement by. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the range of numbers. + */ + function baseRange(start, end, step, fromRight) { + var index = -1, + length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), + result = Array(length); + + while (length--) { + result[fromRight ? length : ++index] = start; + start += step; + } + return result; + } + + /** + * The base implementation of `_.repeat` which doesn't coerce arguments. + * + * @private + * @param {string} string The string to repeat. + * @param {number} n The number of times to repeat the string. + * @returns {string} Returns the repeated string. + */ + function baseRepeat(string, n) { + var result = ''; + if (!string || n < 1 || n > MAX_SAFE_INTEGER) { + return result; + } + // Leverage the exponentiation by squaring algorithm for a faster repeat. + // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details. + do { + if (n % 2) { + result += string; + } + n = nativeFloor(n / 2); + if (n) { + string += string; + } + } while (n); + + return result; + } + + /** + * The base implementation of `_.rest` which doesn't validate or coerce arguments. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + */ + function baseRest(func, start) { + return setToString(overRest(func, start, identity), func + ''); + } + + /** + * The base implementation of `_.sample`. + * + * @private + * @param {Array|Object} collection The collection to sample. + * @returns {*} Returns the random element. + */ + function baseSample(collection) { + return arraySample(values(collection)); + } + + /** + * The base implementation of `_.sampleSize` without param guards. + * + * @private + * @param {Array|Object} collection The collection to sample. + * @param {number} n The number of elements to sample. + * @returns {Array} Returns the random elements. + */ + function baseSampleSize(collection, n) { + var array = values(collection); + return shuffleSelf(array, baseClamp(n, 0, array.length)); + } + + /** + * The base implementation of `_.set`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ + function baseSet(object, path, value, customizer) { + if (!isObject(object)) { + return object; + } + path = castPath(path, object); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = toKey(path[index]), + newValue = value; + + if (key === '__proto__' || key === 'constructor' || key === 'prototype') { + return object; + } + + if (index != lastIndex) { + var objValue = nested[key]; + newValue = customizer ? customizer(objValue, key, nested) : undefined; + if (newValue === undefined) { + newValue = isObject(objValue) + ? objValue + : (isIndex(path[index + 1]) ? [] : {}); + } + } + assignValue(nested, key, newValue); + nested = nested[key]; + } + return object; + } + + /** + * The base implementation of `setData` without support for hot loop shorting. + * + * @private + * @param {Function} func The function to associate metadata with. + * @param {*} data The metadata. + * @returns {Function} Returns `func`. + */ + var baseSetData = !metaMap ? identity : function(func, data) { + metaMap.set(func, data); + return func; + }; + + /** + * The base implementation of `setToString` without support for hot loop shorting. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ + var baseSetToString = !defineProperty ? identity : function(func, string) { + return defineProperty(func, 'toString', { + 'configurable': true, + 'enumerable': false, + 'value': constant(string), + 'writable': true + }); + }; + + /** + * The base implementation of `_.shuffle`. + * + * @private + * @param {Array|Object} collection The collection to shuffle. + * @returns {Array} Returns the new shuffled array. + */ + function baseShuffle(collection) { + return shuffleSelf(values(collection)); + } + + /** + * The base implementation of `_.slice` without an iteratee call guard. + * + * @private + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ + function baseSlice(array, start, end) { + var index = -1, + length = array.length; + + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = end > length ? length : end; + if (end < 0) { + end += length; + } + length = start > end ? 0 : ((end - start) >>> 0); + start >>>= 0; + + var result = Array(length); + while (++index < length) { + result[index] = array[index + start]; + } + return result; + } + + /** + * The base implementation of `_.some` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ + function baseSome(collection, predicate) { + var result; + + baseEach(collection, function(value, index, collection) { + result = predicate(value, index, collection); + return !result; + }); + return !!result; + } + + /** + * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which + * performs a binary search of `array` to determine the index at which `value` + * should be inserted into `array` in order to maintain its sort order. + * + * @private + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {boolean} [retHighest] Specify returning the highest qualified index. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + */ + function baseSortedIndex(array, value, retHighest) { + var low = 0, + high = array == null ? low : array.length; + + if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) { + while (low < high) { + var mid = (low + high) >>> 1, + computed = array[mid]; + + if (computed !== null && !isSymbol(computed) && + (retHighest ? (computed <= value) : (computed < value))) { + low = mid + 1; + } else { + high = mid; + } + } + return high; + } + return baseSortedIndexBy(array, value, identity, retHighest); + } + + /** + * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy` + * which invokes `iteratee` for `value` and each element of `array` to compute + * their sort ranking. The iteratee is invoked with one argument; (value). + * + * @private + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function} iteratee The iteratee invoked per element. + * @param {boolean} [retHighest] Specify returning the highest qualified index. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + */ + function baseSortedIndexBy(array, value, iteratee, retHighest) { + var low = 0, + high = array == null ? 0 : array.length; + if (high === 0) { + return 0; + } + + value = iteratee(value); + var valIsNaN = value !== value, + valIsNull = value === null, + valIsSymbol = isSymbol(value), + valIsUndefined = value === undefined; + + while (low < high) { + var mid = nativeFloor((low + high) / 2), + computed = iteratee(array[mid]), + othIsDefined = computed !== undefined, + othIsNull = computed === null, + othIsReflexive = computed === computed, + othIsSymbol = isSymbol(computed); + + if (valIsNaN) { + var setLow = retHighest || othIsReflexive; + } else if (valIsUndefined) { + setLow = othIsReflexive && (retHighest || othIsDefined); + } else if (valIsNull) { + setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull); + } else if (valIsSymbol) { + setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol); + } else if (othIsNull || othIsSymbol) { + setLow = false; + } else { + setLow = retHighest ? (computed <= value) : (computed < value); + } + if (setLow) { + low = mid + 1; + } else { + high = mid; + } + } + return nativeMin(high, MAX_ARRAY_INDEX); + } + + /** + * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ + function baseSortedUniq(array, iteratee) { + var index = -1, + length = array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + if (!index || !eq(computed, seen)) { + var seen = computed; + result[resIndex++] = value === 0 ? 0 : value; + } + } + return result; + } + + /** + * The base implementation of `_.toNumber` which doesn't ensure correct + * conversions of binary, hexadecimal, or octal string values. + * + * @private + * @param {*} value The value to process. + * @returns {number} Returns the number. + */ + function baseToNumber(value) { + if (typeof value == 'number') { + return value; + } + if (isSymbol(value)) { + return NAN; + } + return +value; + } + + /** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ + function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if (isArray(value)) { + // Recursively convert values (susceptible to call stack limits). + return arrayMap(value, baseToString) + ''; + } + if (isSymbol(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; + } + + /** + * The base implementation of `_.uniqBy` without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ + function baseUniq(array, iteratee, comparator) { + var index = -1, + includes = arrayIncludes, + length = array.length, + isCommon = true, + result = [], + seen = result; + + if (comparator) { + isCommon = false; + includes = arrayIncludesWith; + } + else if (length >= LARGE_ARRAY_SIZE) { + var set = iteratee ? null : createSet(array); + if (set) { + return setToArray(set); + } + isCommon = false; + includes = cacheHas; + seen = new SetCache; + } + else { + seen = iteratee ? [] : result; + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var seenIndex = seen.length; + while (seenIndex--) { + if (seen[seenIndex] === computed) { + continue outer; + } + } + if (iteratee) { + seen.push(computed); + } + result.push(value); + } + else if (!includes(seen, computed, comparator)) { + if (seen !== result) { + seen.push(computed); + } + result.push(value); + } + } + return result; + } + + /** + * The base implementation of `_.unset`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The property path to unset. + * @returns {boolean} Returns `true` if the property is deleted, else `false`. + */ + function baseUnset(object, path) { + path = castPath(path, object); + object = parent(object, path); + return object == null || delete object[toKey(last(path))]; + } + + /** + * The base implementation of `_.update`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to update. + * @param {Function} updater The function to produce the updated value. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ + function baseUpdate(object, path, updater, customizer) { + return baseSet(object, path, updater(baseGet(object, path)), customizer); + } + + /** + * The base implementation of methods like `_.dropWhile` and `_.takeWhile` + * without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to query. + * @param {Function} predicate The function invoked per iteration. + * @param {boolean} [isDrop] Specify dropping elements instead of taking them. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the slice of `array`. + */ + function baseWhile(array, predicate, isDrop, fromRight) { + var length = array.length, + index = fromRight ? length : -1; + + while ((fromRight ? index-- : ++index < length) && + predicate(array[index], index, array)) {} + + return isDrop + ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length)) + : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index)); + } + + /** + * The base implementation of `wrapperValue` which returns the result of + * performing a sequence of actions on the unwrapped `value`, where each + * successive action is supplied the return value of the previous. + * + * @private + * @param {*} value The unwrapped value. + * @param {Array} actions Actions to perform to resolve the unwrapped value. + * @returns {*} Returns the resolved value. + */ + function baseWrapperValue(value, actions) { + var result = value; + if (result instanceof LazyWrapper) { + result = result.value(); + } + return arrayReduce(actions, function(result, action) { + return action.func.apply(action.thisArg, arrayPush([result], action.args)); + }, result); + } + + /** + * The base implementation of methods like `_.xor`, without support for + * iteratee shorthands, that accepts an array of arrays to inspect. + * + * @private + * @param {Array} arrays The arrays to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of values. + */ + function baseXor(arrays, iteratee, comparator) { + var length = arrays.length; + if (length < 2) { + return length ? baseUniq(arrays[0]) : []; + } + var index = -1, + result = Array(length); + + while (++index < length) { + var array = arrays[index], + othIndex = -1; + + while (++othIndex < length) { + if (othIndex != index) { + result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator); + } + } + } + return baseUniq(baseFlatten(result, 1), iteratee, comparator); + } + + /** + * This base implementation of `_.zipObject` which assigns values using `assignFunc`. + * + * @private + * @param {Array} props The property identifiers. + * @param {Array} values The property values. + * @param {Function} assignFunc The function to assign values. + * @returns {Object} Returns the new object. + */ + function baseZipObject(props, values, assignFunc) { + var index = -1, + length = props.length, + valsLength = values.length, + result = {}; + + while (++index < length) { + var value = index < valsLength ? values[index] : undefined; + assignFunc(result, props[index], value); + } + return result; + } + + /** + * Casts `value` to an empty array if it's not an array like object. + * + * @private + * @param {*} value The value to inspect. + * @returns {Array|Object} Returns the cast array-like object. + */ + function castArrayLikeObject(value) { + return isArrayLikeObject(value) ? value : []; + } + + /** + * Casts `value` to `identity` if it's not a function. + * + * @private + * @param {*} value The value to inspect. + * @returns {Function} Returns cast function. + */ + function castFunction(value) { + return typeof value == 'function' ? value : identity; + } + + /** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @param {Object} [object] The object to query keys on. + * @returns {Array} Returns the cast property path array. + */ + function castPath(value, object) { + if (isArray(value)) { + return value; + } + return isKey(value, object) ? [value] : stringToPath(toString(value)); + } + + /** + * A `baseRest` alias which can be replaced with `identity` by module + * replacement plugins. + * + * @private + * @type {Function} + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ + var castRest = baseRest; + + /** + * Casts `array` to a slice if it's needed. + * + * @private + * @param {Array} array The array to inspect. + * @param {number} start The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the cast slice. + */ + function castSlice(array, start, end) { + var length = array.length; + end = end === undefined ? length : end; + return (!start && end >= length) ? array : baseSlice(array, start, end); + } + + /** + * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout). + * + * @private + * @param {number|Object} id The timer id or timeout object of the timer to clear. + */ + var clearTimeout = ctxClearTimeout || function(id) { + return root.clearTimeout(id); + }; + + /** + * Creates a clone of `buffer`. + * + * @private + * @param {Buffer} buffer The buffer to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Buffer} Returns the cloned buffer. + */ + function cloneBuffer(buffer, isDeep) { + if (isDeep) { + return buffer.slice(); + } + var length = buffer.length, + result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length); + + buffer.copy(result); + return result; + } + + /** + * Creates a clone of `arrayBuffer`. + * + * @private + * @param {ArrayBuffer} arrayBuffer The array buffer to clone. + * @returns {ArrayBuffer} Returns the cloned array buffer. + */ + function cloneArrayBuffer(arrayBuffer) { + var result = new arrayBuffer.constructor(arrayBuffer.byteLength); + new Uint8Array(result).set(new Uint8Array(arrayBuffer)); + return result; + } + + /** + * Creates a clone of `dataView`. + * + * @private + * @param {Object} dataView The data view to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned data view. + */ + function cloneDataView(dataView, isDeep) { + var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer; + return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); + } + + /** + * Creates a clone of `regexp`. + * + * @private + * @param {Object} regexp The regexp to clone. + * @returns {Object} Returns the cloned regexp. + */ + function cloneRegExp(regexp) { + var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); + result.lastIndex = regexp.lastIndex; + return result; + } + + /** + * Creates a clone of the `symbol` object. + * + * @private + * @param {Object} symbol The symbol object to clone. + * @returns {Object} Returns the cloned symbol object. + */ + function cloneSymbol(symbol) { + return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; + } + + /** + * Creates a clone of `typedArray`. + * + * @private + * @param {Object} typedArray The typed array to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned typed array. + */ + function cloneTypedArray(typedArray, isDeep) { + var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer; + return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); + } + + /** + * Compares values to sort them in ascending order. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {number} Returns the sort order indicator for `value`. + */ + function compareAscending(value, other) { + if (value !== other) { + var valIsDefined = value !== undefined, + valIsNull = value === null, + valIsReflexive = value === value, + valIsSymbol = isSymbol(value); + + var othIsDefined = other !== undefined, + othIsNull = other === null, + othIsReflexive = other === other, + othIsSymbol = isSymbol(other); + + if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || + (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || + (valIsNull && othIsDefined && othIsReflexive) || + (!valIsDefined && othIsReflexive) || + !valIsReflexive) { + return 1; + } + if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || + (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || + (othIsNull && valIsDefined && valIsReflexive) || + (!othIsDefined && valIsReflexive) || + !othIsReflexive) { + return -1; + } + } + return 0; + } + + /** + * Used by `_.orderBy` to compare multiple properties of a value to another + * and stable sort them. + * + * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, + * specify an order of "desc" for descending or "asc" for ascending sort order + * of corresponding values. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {boolean[]|string[]} orders The order to sort by for each property. + * @returns {number} Returns the sort order indicator for `object`. + */ + function compareMultiple(object, other, orders) { + var index = -1, + objCriteria = object.criteria, + othCriteria = other.criteria, + length = objCriteria.length, + ordersLength = orders.length; + + while (++index < length) { + var result = compareAscending(objCriteria[index], othCriteria[index]); + if (result) { + if (index >= ordersLength) { + return result; + } + var order = orders[index]; + return result * (order == 'desc' ? -1 : 1); + } + } + // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications + // that causes it, under certain circumstances, to provide the same value for + // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 + // for more details. + // + // This also ensures a stable sort in V8 and other engines. + // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. + return object.index - other.index; + } + + /** + * Creates an array that is the composition of partially applied arguments, + * placeholders, and provided arguments into a single array of arguments. + * + * @private + * @param {Array} args The provided arguments. + * @param {Array} partials The arguments to prepend to those provided. + * @param {Array} holders The `partials` placeholder indexes. + * @params {boolean} [isCurried] Specify composing for a curried function. + * @returns {Array} Returns the new array of composed arguments. + */ + function composeArgs(args, partials, holders, isCurried) { + var argsIndex = -1, + argsLength = args.length, + holdersLength = holders.length, + leftIndex = -1, + leftLength = partials.length, + rangeLength = nativeMax(argsLength - holdersLength, 0), + result = Array(leftLength + rangeLength), + isUncurried = !isCurried; + + while (++leftIndex < leftLength) { + result[leftIndex] = partials[leftIndex]; + } + while (++argsIndex < holdersLength) { + if (isUncurried || argsIndex < argsLength) { + result[holders[argsIndex]] = args[argsIndex]; + } + } + while (rangeLength--) { + result[leftIndex++] = args[argsIndex++]; + } + return result; + } + + /** + * This function is like `composeArgs` except that the arguments composition + * is tailored for `_.partialRight`. + * + * @private + * @param {Array} args The provided arguments. + * @param {Array} partials The arguments to append to those provided. + * @param {Array} holders The `partials` placeholder indexes. + * @params {boolean} [isCurried] Specify composing for a curried function. + * @returns {Array} Returns the new array of composed arguments. + */ + function composeArgsRight(args, partials, holders, isCurried) { + var argsIndex = -1, + argsLength = args.length, + holdersIndex = -1, + holdersLength = holders.length, + rightIndex = -1, + rightLength = partials.length, + rangeLength = nativeMax(argsLength - holdersLength, 0), + result = Array(rangeLength + rightLength), + isUncurried = !isCurried; + + while (++argsIndex < rangeLength) { + result[argsIndex] = args[argsIndex]; + } + var offset = argsIndex; + while (++rightIndex < rightLength) { + result[offset + rightIndex] = partials[rightIndex]; + } + while (++holdersIndex < holdersLength) { + if (isUncurried || argsIndex < argsLength) { + result[offset + holders[holdersIndex]] = args[argsIndex++]; + } + } + return result; + } + + /** + * Copies the values of `source` to `array`. + * + * @private + * @param {Array} source The array to copy values from. + * @param {Array} [array=[]] The array to copy values to. + * @returns {Array} Returns `array`. + */ + function copyArray(source, array) { + var index = -1, + length = source.length; + + array || (array = Array(length)); + while (++index < length) { + array[index] = source[index]; + } + return array; + } + + /** + * Copies properties of `source` to `object`. + * + * @private + * @param {Object} source The object to copy properties from. + * @param {Array} props The property identifiers to copy. + * @param {Object} [object={}] The object to copy properties to. + * @param {Function} [customizer] The function to customize copied values. + * @returns {Object} Returns `object`. + */ + function copyObject(source, props, object, customizer) { + var isNew = !object; + object || (object = {}); + + var index = -1, + length = props.length; + + while (++index < length) { + var key = props[index]; + + var newValue = customizer + ? customizer(object[key], source[key], key, object, source) + : undefined; + + if (newValue === undefined) { + newValue = source[key]; + } + if (isNew) { + baseAssignValue(object, key, newValue); + } else { + assignValue(object, key, newValue); + } + } + return object; + } + + /** + * Copies own symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ + function copySymbols(source, object) { + return copyObject(source, getSymbols(source), object); + } + + /** + * Copies own and inherited symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ + function copySymbolsIn(source, object) { + return copyObject(source, getSymbolsIn(source), object); + } + + /** + * Creates a function like `_.groupBy`. + * + * @private + * @param {Function} setter The function to set accumulator values. + * @param {Function} [initializer] The accumulator object initializer. + * @returns {Function} Returns the new aggregator function. + */ + function createAggregator(setter, initializer) { + return function(collection, iteratee) { + var func = isArray(collection) ? arrayAggregator : baseAggregator, + accumulator = initializer ? initializer() : {}; + + return func(collection, setter, getIteratee(iteratee, 2), accumulator); + }; + } + + /** + * Creates a function like `_.assign`. + * + * @private + * @param {Function} assigner The function to assign values. + * @returns {Function} Returns the new assigner function. + */ + function createAssigner(assigner) { + return baseRest(function(object, sources) { + var index = -1, + length = sources.length, + customizer = length > 1 ? sources[length - 1] : undefined, + guard = length > 2 ? sources[2] : undefined; + + customizer = (assigner.length > 3 && typeof customizer == 'function') + ? (length--, customizer) + : undefined; + + if (guard && isIterateeCall(sources[0], sources[1], guard)) { + customizer = length < 3 ? undefined : customizer; + length = 1; + } + object = Object(object); + while (++index < length) { + var source = sources[index]; + if (source) { + assigner(object, source, index, customizer); + } + } + return object; + }); + } + + /** + * Creates a `baseEach` or `baseEachRight` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ + function createBaseEach(eachFunc, fromRight) { + return function(collection, iteratee) { + if (collection == null) { + return collection; + } + if (!isArrayLike(collection)) { + return eachFunc(collection, iteratee); + } + var length = collection.length, + index = fromRight ? length : -1, + iterable = Object(collection); + + while ((fromRight ? index-- : ++index < length)) { + if (iteratee(iterable[index], index, iterable) === false) { + break; + } + } + return collection; + }; + } + + /** + * Creates a base function for methods like `_.forIn` and `_.forOwn`. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ + function createBaseFor(fromRight) { + return function(object, iteratee, keysFunc) { + var index = -1, + iterable = Object(object), + props = keysFunc(object), + length = props.length; + + while (length--) { + var key = props[fromRight ? length : ++index]; + if (iteratee(iterable[key], key, iterable) === false) { + break; + } + } + return object; + }; + } + + /** + * Creates a function that wraps `func` to invoke it with the optional `this` + * binding of `thisArg`. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {*} [thisArg] The `this` binding of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createBind(func, bitmask, thisArg) { + var isBind = bitmask & WRAP_BIND_FLAG, + Ctor = createCtor(func); + + function wrapper() { + var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + return fn.apply(isBind ? thisArg : this, arguments); + } + return wrapper; + } + + /** + * Creates a function like `_.lowerFirst`. + * + * @private + * @param {string} methodName The name of the `String` case method to use. + * @returns {Function} Returns the new case function. + */ + function createCaseFirst(methodName) { + return function(string) { + string = toString(string); + + var strSymbols = hasUnicode(string) + ? stringToArray(string) + : undefined; + + var chr = strSymbols + ? strSymbols[0] + : string.charAt(0); + + var trailing = strSymbols + ? castSlice(strSymbols, 1).join('') + : string.slice(1); + + return chr[methodName]() + trailing; + }; + } + + /** + * Creates a function like `_.camelCase`. + * + * @private + * @param {Function} callback The function to combine each word. + * @returns {Function} Returns the new compounder function. + */ + function createCompounder(callback) { + return function(string) { + return arrayReduce(words(deburr(string).replace(reApos, '')), callback, ''); + }; + } + + /** + * Creates a function that produces an instance of `Ctor` regardless of + * whether it was invoked as part of a `new` expression or by `call` or `apply`. + * + * @private + * @param {Function} Ctor The constructor to wrap. + * @returns {Function} Returns the new wrapped function. + */ + function createCtor(Ctor) { + return function() { + // Use a `switch` statement to work with class constructors. See + // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist + // for more details. + var args = arguments; + switch (args.length) { + case 0: return new Ctor; + case 1: return new Ctor(args[0]); + case 2: return new Ctor(args[0], args[1]); + case 3: return new Ctor(args[0], args[1], args[2]); + case 4: return new Ctor(args[0], args[1], args[2], args[3]); + case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]); + case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]); + case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]); + } + var thisBinding = baseCreate(Ctor.prototype), + result = Ctor.apply(thisBinding, args); + + // Mimic the constructor's `return` behavior. + // See https://es5.github.io/#x13.2.2 for more details. + return isObject(result) ? result : thisBinding; + }; + } + + /** + * Creates a function that wraps `func` to enable currying. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {number} arity The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createCurry(func, bitmask, arity) { + var Ctor = createCtor(func); + + function wrapper() { + var length = arguments.length, + args = Array(length), + index = length, + placeholder = getHolder(wrapper); + + while (index--) { + args[index] = arguments[index]; + } + var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder) + ? [] + : replaceHolders(args, placeholder); + + length -= holders.length; + if (length < arity) { + return createRecurry( + func, bitmask, createHybrid, wrapper.placeholder, undefined, + args, holders, undefined, undefined, arity - length); + } + var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + return apply(fn, this, args); + } + return wrapper; + } + + /** + * Creates a `_.find` or `_.findLast` function. + * + * @private + * @param {Function} findIndexFunc The function to find the collection index. + * @returns {Function} Returns the new find function. + */ + function createFind(findIndexFunc) { + return function(collection, predicate, fromIndex) { + var iterable = Object(collection); + if (!isArrayLike(collection)) { + var iteratee = getIteratee(predicate, 3); + collection = keys(collection); + predicate = function(key) { return iteratee(iterable[key], key, iterable); }; + } + var index = findIndexFunc(collection, predicate, fromIndex); + return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; + }; + } + + /** + * Creates a `_.flow` or `_.flowRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new flow function. + */ + function createFlow(fromRight) { + return flatRest(function(funcs) { + var length = funcs.length, + index = length, + prereq = LodashWrapper.prototype.thru; + + if (fromRight) { + funcs.reverse(); + } + while (index--) { + var func = funcs[index]; + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + if (prereq && !wrapper && getFuncName(func) == 'wrapper') { + var wrapper = new LodashWrapper([], true); + } + } + index = wrapper ? index : length; + while (++index < length) { + func = funcs[index]; + + var funcName = getFuncName(func), + data = funcName == 'wrapper' ? getData(func) : undefined; + + if (data && isLaziable(data[0]) && + data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) && + !data[4].length && data[9] == 1 + ) { + wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]); + } else { + wrapper = (func.length == 1 && isLaziable(func)) + ? wrapper[funcName]() + : wrapper.thru(func); + } + } + return function() { + var args = arguments, + value = args[0]; + + if (wrapper && args.length == 1 && isArray(value)) { + return wrapper.plant(value).value(); + } + var index = 0, + result = length ? funcs[index].apply(this, args) : value; + + while (++index < length) { + result = funcs[index].call(this, result); + } + return result; + }; + }); + } + + /** + * Creates a function that wraps `func` to invoke it with optional `this` + * binding of `thisArg`, partial application, and currying. + * + * @private + * @param {Function|string} func The function or method name to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {*} [thisArg] The `this` binding of `func`. + * @param {Array} [partials] The arguments to prepend to those provided to + * the new function. + * @param {Array} [holders] The `partials` placeholder indexes. + * @param {Array} [partialsRight] The arguments to append to those provided + * to the new function. + * @param {Array} [holdersRight] The `partialsRight` placeholder indexes. + * @param {Array} [argPos] The argument positions of the new function. + * @param {number} [ary] The arity cap of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) { + var isAry = bitmask & WRAP_ARY_FLAG, + isBind = bitmask & WRAP_BIND_FLAG, + isBindKey = bitmask & WRAP_BIND_KEY_FLAG, + isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG), + isFlip = bitmask & WRAP_FLIP_FLAG, + Ctor = isBindKey ? undefined : createCtor(func); + + function wrapper() { + var length = arguments.length, + args = Array(length), + index = length; + + while (index--) { + args[index] = arguments[index]; + } + if (isCurried) { + var placeholder = getHolder(wrapper), + holdersCount = countHolders(args, placeholder); + } + if (partials) { + args = composeArgs(args, partials, holders, isCurried); + } + if (partialsRight) { + args = composeArgsRight(args, partialsRight, holdersRight, isCurried); + } + length -= holdersCount; + if (isCurried && length < arity) { + var newHolders = replaceHolders(args, placeholder); + return createRecurry( + func, bitmask, createHybrid, wrapper.placeholder, thisArg, + args, newHolders, argPos, ary, arity - length + ); + } + var thisBinding = isBind ? thisArg : this, + fn = isBindKey ? thisBinding[func] : func; + + length = args.length; + if (argPos) { + args = reorder(args, argPos); + } else if (isFlip && length > 1) { + args.reverse(); + } + if (isAry && ary < length) { + args.length = ary; + } + if (this && this !== root && this instanceof wrapper) { + fn = Ctor || createCtor(fn); + } + return fn.apply(thisBinding, args); + } + return wrapper; + } + + /** + * Creates a function like `_.invertBy`. + * + * @private + * @param {Function} setter The function to set accumulator values. + * @param {Function} toIteratee The function to resolve iteratees. + * @returns {Function} Returns the new inverter function. + */ + function createInverter(setter, toIteratee) { + return function(object, iteratee) { + return baseInverter(object, setter, toIteratee(iteratee), {}); + }; + } + + /** + * Creates a function that performs a mathematical operation on two values. + * + * @private + * @param {Function} operator The function to perform the operation. + * @param {number} [defaultValue] The value used for `undefined` arguments. + * @returns {Function} Returns the new mathematical operation function. + */ + function createMathOperation(operator, defaultValue) { + return function(value, other) { + var result; + if (value === undefined && other === undefined) { + return defaultValue; + } + if (value !== undefined) { + result = value; + } + if (other !== undefined) { + if (result === undefined) { + return other; + } + if (typeof value == 'string' || typeof other == 'string') { + value = baseToString(value); + other = baseToString(other); + } else { + value = baseToNumber(value); + other = baseToNumber(other); + } + result = operator(value, other); + } + return result; + }; + } + + /** + * Creates a function like `_.over`. + * + * @private + * @param {Function} arrayFunc The function to iterate over iteratees. + * @returns {Function} Returns the new over function. + */ + function createOver(arrayFunc) { + return flatRest(function(iteratees) { + iteratees = arrayMap(iteratees, baseUnary(getIteratee())); + return baseRest(function(args) { + var thisArg = this; + return arrayFunc(iteratees, function(iteratee) { + return apply(iteratee, thisArg, args); + }); + }); + }); + } + + /** + * Creates the padding for `string` based on `length`. The `chars` string + * is truncated if the number of characters exceeds `length`. + * + * @private + * @param {number} length The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padding for `string`. + */ + function createPadding(length, chars) { + chars = chars === undefined ? ' ' : baseToString(chars); + + var charsLength = chars.length; + if (charsLength < 2) { + return charsLength ? baseRepeat(chars, length) : chars; + } + var result = baseRepeat(chars, nativeCeil(length / stringSize(chars))); + return hasUnicode(chars) + ? castSlice(stringToArray(result), 0, length).join('') + : result.slice(0, length); + } + + /** + * Creates a function that wraps `func` to invoke it with the `this` binding + * of `thisArg` and `partials` prepended to the arguments it receives. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} partials The arguments to prepend to those provided to + * the new function. + * @returns {Function} Returns the new wrapped function. + */ + function createPartial(func, bitmask, thisArg, partials) { + var isBind = bitmask & WRAP_BIND_FLAG, + Ctor = createCtor(func); + + function wrapper() { + var argsIndex = -1, + argsLength = arguments.length, + leftIndex = -1, + leftLength = partials.length, + args = Array(leftLength + argsLength), + fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + + while (++leftIndex < leftLength) { + args[leftIndex] = partials[leftIndex]; + } + while (argsLength--) { + args[leftIndex++] = arguments[++argsIndex]; + } + return apply(fn, isBind ? thisArg : this, args); + } + return wrapper; + } + + /** + * Creates a `_.range` or `_.rangeRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new range function. + */ + function createRange(fromRight) { + return function(start, end, step) { + if (step && typeof step != 'number' && isIterateeCall(start, end, step)) { + end = step = undefined; + } + // Ensure the sign of `-0` is preserved. + start = toFinite(start); + if (end === undefined) { + end = start; + start = 0; + } else { + end = toFinite(end); + } + step = step === undefined ? (start < end ? 1 : -1) : toFinite(step); + return baseRange(start, end, step, fromRight); + }; + } + + /** + * Creates a function that performs a relational operation on two values. + * + * @private + * @param {Function} operator The function to perform the operation. + * @returns {Function} Returns the new relational operation function. + */ + function createRelationalOperation(operator) { + return function(value, other) { + if (!(typeof value == 'string' && typeof other == 'string')) { + value = toNumber(value); + other = toNumber(other); + } + return operator(value, other); + }; + } + + /** + * Creates a function that wraps `func` to continue currying. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {Function} wrapFunc The function to create the `func` wrapper. + * @param {*} placeholder The placeholder value. + * @param {*} [thisArg] The `this` binding of `func`. + * @param {Array} [partials] The arguments to prepend to those provided to + * the new function. + * @param {Array} [holders] The `partials` placeholder indexes. + * @param {Array} [argPos] The argument positions of the new function. + * @param {number} [ary] The arity cap of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) { + var isCurry = bitmask & WRAP_CURRY_FLAG, + newHolders = isCurry ? holders : undefined, + newHoldersRight = isCurry ? undefined : holders, + newPartials = isCurry ? partials : undefined, + newPartialsRight = isCurry ? undefined : partials; + + bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG); + bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG); + + if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) { + bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG); + } + var newData = [ + func, bitmask, thisArg, newPartials, newHolders, newPartialsRight, + newHoldersRight, argPos, ary, arity + ]; + + var result = wrapFunc.apply(undefined, newData); + if (isLaziable(func)) { + setData(result, newData); + } + result.placeholder = placeholder; + return setWrapToString(result, func, bitmask); + } + + /** + * Creates a function like `_.round`. + * + * @private + * @param {string} methodName The name of the `Math` method to use when rounding. + * @returns {Function} Returns the new round function. + */ + function createRound(methodName) { + var func = Math[methodName]; + return function(number, precision) { + number = toNumber(number); + precision = precision == null ? 0 : nativeMin(toInteger(precision), 292); + if (precision && nativeIsFinite(number)) { + // Shift with exponential notation to avoid floating-point issues. + // See [MDN](https://mdn.io/round#Examples) for more details. + var pair = (toString(number) + 'e').split('e'), + value = func(pair[0] + 'e' + (+pair[1] + precision)); + + pair = (toString(value) + 'e').split('e'); + return +(pair[0] + 'e' + (+pair[1] - precision)); + } + return func(number); + }; + } + + /** + * Creates a set object of `values`. + * + * @private + * @param {Array} values The values to add to the set. + * @returns {Object} Returns the new set. + */ + var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) { + return new Set(values); + }; + + /** + * Creates a `_.toPairs` or `_.toPairsIn` function. + * + * @private + * @param {Function} keysFunc The function to get the keys of a given object. + * @returns {Function} Returns the new pairs function. + */ + function createToPairs(keysFunc) { + return function(object) { + var tag = getTag(object); + if (tag == mapTag) { + return mapToArray(object); + } + if (tag == setTag) { + return setToPairs(object); + } + return baseToPairs(object, keysFunc(object)); + }; + } + + /** + * Creates a function that either curries or invokes `func` with optional + * `this` binding and partially applied arguments. + * + * @private + * @param {Function|string} func The function or method name to wrap. + * @param {number} bitmask The bitmask flags. + * 1 - `_.bind` + * 2 - `_.bindKey` + * 4 - `_.curry` or `_.curryRight` of a bound function + * 8 - `_.curry` + * 16 - `_.curryRight` + * 32 - `_.partial` + * 64 - `_.partialRight` + * 128 - `_.rearg` + * 256 - `_.ary` + * 512 - `_.flip` + * @param {*} [thisArg] The `this` binding of `func`. + * @param {Array} [partials] The arguments to be partially applied. + * @param {Array} [holders] The `partials` placeholder indexes. + * @param {Array} [argPos] The argument positions of the new function. + * @param {number} [ary] The arity cap of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) { + var isBindKey = bitmask & WRAP_BIND_KEY_FLAG; + if (!isBindKey && typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + var length = partials ? partials.length : 0; + if (!length) { + bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG); + partials = holders = undefined; + } + ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0); + arity = arity === undefined ? arity : toInteger(arity); + length -= holders ? holders.length : 0; + + if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) { + var partialsRight = partials, + holdersRight = holders; + + partials = holders = undefined; + } + var data = isBindKey ? undefined : getData(func); + + var newData = [ + func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, + argPos, ary, arity + ]; + + if (data) { + mergeData(newData, data); + } + func = newData[0]; + bitmask = newData[1]; + thisArg = newData[2]; + partials = newData[3]; + holders = newData[4]; + arity = newData[9] = newData[9] === undefined + ? (isBindKey ? 0 : func.length) + : nativeMax(newData[9] - length, 0); + + if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) { + bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG); + } + if (!bitmask || bitmask == WRAP_BIND_FLAG) { + var result = createBind(func, bitmask, thisArg); + } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) { + result = createCurry(func, bitmask, arity); + } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) { + result = createPartial(func, bitmask, thisArg, partials); + } else { + result = createHybrid.apply(undefined, newData); + } + var setter = data ? baseSetData : setData; + return setWrapToString(setter(result, newData), func, bitmask); + } + + /** + * Used by `_.defaults` to customize its `_.assignIn` use to assign properties + * of source objects to the destination object for all destination properties + * that resolve to `undefined`. + * + * @private + * @param {*} objValue The destination value. + * @param {*} srcValue The source value. + * @param {string} key The key of the property to assign. + * @param {Object} object The parent object of `objValue`. + * @returns {*} Returns the value to assign. + */ + function customDefaultsAssignIn(objValue, srcValue, key, object) { + if (objValue === undefined || + (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) { + return srcValue; + } + return objValue; + } + + /** + * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source + * objects into destination objects that are passed thru. + * + * @private + * @param {*} objValue The destination value. + * @param {*} srcValue The source value. + * @param {string} key The key of the property to merge. + * @param {Object} object The parent object of `objValue`. + * @param {Object} source The parent object of `srcValue`. + * @param {Object} [stack] Tracks traversed source values and their merged + * counterparts. + * @returns {*} Returns the value to assign. + */ + function customDefaultsMerge(objValue, srcValue, key, object, source, stack) { + if (isObject(objValue) && isObject(srcValue)) { + // Recursively merge objects and arrays (susceptible to call stack limits). + stack.set(srcValue, objValue); + baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack); + stack['delete'](srcValue); + } + return objValue; + } + + /** + * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain + * objects. + * + * @private + * @param {*} value The value to inspect. + * @param {string} key The key of the property to inspect. + * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`. + */ + function customOmitClone(value) { + return isPlainObject(value) ? undefined : value; + } + + /** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ + function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + // Check that cyclic values are equal. + var arrStacked = stack.get(array); + var othStacked = stack.get(other); + if (arrStacked && othStacked) { + return arrStacked == other && othStacked == array; + } + var index = -1, + result = true, + seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined; + + stack.set(array, other); + stack.set(other, array); + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, arrValue, index, other, array, stack) + : customizer(arrValue, othValue, index, array, other, stack); + } + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (seen) { + if (!arraySome(other, function(othValue, othIndex) { + if (!cacheHas(seen, othIndex) && + (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { + return seen.push(othIndex); + } + })) { + result = false; + break; + } + } else if (!( + arrValue === othValue || + equalFunc(arrValue, othValue, bitmask, customizer, stack) + )) { + result = false; + break; + } + } + stack['delete'](array); + stack['delete'](other); + return result; + } + + /** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { + switch (tag) { + case dataViewTag: + if ((object.byteLength != other.byteLength) || + (object.byteOffset != other.byteOffset)) { + return false; + } + object = object.buffer; + other = other.buffer; + + case arrayBufferTag: + if ((object.byteLength != other.byteLength) || + !equalFunc(new Uint8Array(object), new Uint8Array(other))) { + return false; + } + return true; + + case boolTag: + case dateTag: + case numberTag: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return eq(+object, +other); + + case errorTag: + return object.name == other.name && object.message == other.message; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings, primitives and objects, + // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring + // for more details. + return object == (other + ''); + + case mapTag: + var convert = mapToArray; + + case setTag: + var isPartial = bitmask & COMPARE_PARTIAL_FLAG; + convert || (convert = setToArray); + + if (object.size != other.size && !isPartial) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + bitmask |= COMPARE_UNORDERED_FLAG; + + // Recursively compare objects (susceptible to call stack limits). + stack.set(object, other); + var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); + stack['delete'](object); + return result; + + case symbolTag: + if (symbolValueOf) { + return symbolValueOf.call(object) == symbolValueOf.call(other); + } + } + return false; + } + + /** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + objProps = getAllKeys(object), + objLength = objProps.length, + othProps = getAllKeys(other), + othLength = othProps.length; + + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { + return false; + } + } + // Check that cyclic values are equal. + var objStacked = stack.get(object); + var othStacked = stack.get(other); + if (objStacked && othStacked) { + return objStacked == other && othStacked == object; + } + var result = true; + stack.set(object, other); + stack.set(other, object); + + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, objValue, key, other, object, stack) + : customizer(objValue, othValue, key, object, other, stack); + } + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined + ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) + : compared + )) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + stack['delete'](object); + stack['delete'](other); + return result; + } + + /** + * A specialized version of `baseRest` which flattens the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ + function flatRest(func) { + return setToString(overRest(func, undefined, flatten), func + ''); + } + + /** + * Creates an array of own enumerable property names and symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ + function getAllKeys(object) { + return baseGetAllKeys(object, keys, getSymbols); + } + + /** + * Creates an array of own and inherited enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ + function getAllKeysIn(object) { + return baseGetAllKeys(object, keysIn, getSymbolsIn); + } + + /** + * Gets metadata for `func`. + * + * @private + * @param {Function} func The function to query. + * @returns {*} Returns the metadata for `func`. + */ + var getData = !metaMap ? noop : function(func) { + return metaMap.get(func); + }; + + /** + * Gets the name of `func`. + * + * @private + * @param {Function} func The function to query. + * @returns {string} Returns the function name. + */ + function getFuncName(func) { + var result = (func.name + ''), + array = realNames[result], + length = hasOwnProperty.call(realNames, result) ? array.length : 0; + + while (length--) { + var data = array[length], + otherFunc = data.func; + if (otherFunc == null || otherFunc == func) { + return data.name; + } + } + return result; + } + + /** + * Gets the argument placeholder value for `func`. + * + * @private + * @param {Function} func The function to inspect. + * @returns {*} Returns the placeholder value. + */ + function getHolder(func) { + var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func; + return object.placeholder; + } + + /** + * Gets the appropriate "iteratee" function. If `_.iteratee` is customized, + * this function returns the custom method, otherwise it returns `baseIteratee`. + * If arguments are provided, the chosen function is invoked with them and + * its result is returned. + * + * @private + * @param {*} [value] The value to convert to an iteratee. + * @param {number} [arity] The arity of the created iteratee. + * @returns {Function} Returns the chosen function or its result. + */ + function getIteratee() { + var result = lodash.iteratee || iteratee; + result = result === iteratee ? baseIteratee : result; + return arguments.length ? result(arguments[0], arguments[1]) : result; + } + + /** + * Gets the data for `map`. + * + * @private + * @param {Object} map The map to query. + * @param {string} key The reference key. + * @returns {*} Returns the map data. + */ + function getMapData(map, key) { + var data = map.__data__; + return isKeyable(key) + ? data[typeof key == 'string' ? 'string' : 'hash'] + : data.map; + } + + /** + * Gets the property names, values, and compare flags of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the match data of `object`. + */ + function getMatchData(object) { + var result = keys(object), + length = result.length; + + while (length--) { + var key = result[length], + value = object[key]; + + result[length] = [key, value, isStrictComparable(value)]; + } + return result; + } + + /** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ + function getNative(object, key) { + var value = getValue(object, key); + return baseIsNative(value) ? value : undefined; + } + + /** + * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the raw `toStringTag`. + */ + function getRawTag(value) { + var isOwn = hasOwnProperty.call(value, symToStringTag), + tag = value[symToStringTag]; + + try { + value[symToStringTag] = undefined; + var unmasked = true; + } catch (e) {} + + var result = nativeObjectToString.call(value); + if (unmasked) { + if (isOwn) { + value[symToStringTag] = tag; + } else { + delete value[symToStringTag]; + } + } + return result; + } + + /** + * Creates an array of the own enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ + var getSymbols = !nativeGetSymbols ? stubArray : function(object) { + if (object == null) { + return []; + } + object = Object(object); + return arrayFilter(nativeGetSymbols(object), function(symbol) { + return propertyIsEnumerable.call(object, symbol); + }); + }; + + /** + * Creates an array of the own and inherited enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ + var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) { + var result = []; + while (object) { + arrayPush(result, getSymbols(object)); + object = getPrototype(object); + } + return result; + }; + + /** + * Gets the `toStringTag` of `value`. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ + var getTag = baseGetTag; + + // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. + if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) || + (Map && getTag(new Map) != mapTag) || + (Promise && getTag(Promise.resolve()) != promiseTag) || + (Set && getTag(new Set) != setTag) || + (WeakMap && getTag(new WeakMap) != weakMapTag)) { + getTag = function(value) { + var result = baseGetTag(value), + Ctor = result == objectTag ? value.constructor : undefined, + ctorString = Ctor ? toSource(Ctor) : ''; + + if (ctorString) { + switch (ctorString) { + case dataViewCtorString: return dataViewTag; + case mapCtorString: return mapTag; + case promiseCtorString: return promiseTag; + case setCtorString: return setTag; + case weakMapCtorString: return weakMapTag; + } + } + return result; + }; + } + + /** + * Gets the view, applying any `transforms` to the `start` and `end` positions. + * + * @private + * @param {number} start The start of the view. + * @param {number} end The end of the view. + * @param {Array} transforms The transformations to apply to the view. + * @returns {Object} Returns an object containing the `start` and `end` + * positions of the view. + */ + function getView(start, end, transforms) { + var index = -1, + length = transforms.length; + + while (++index < length) { + var data = transforms[index], + size = data.size; + + switch (data.type) { + case 'drop': start += size; break; + case 'dropRight': end -= size; break; + case 'take': end = nativeMin(end, start + size); break; + case 'takeRight': start = nativeMax(start, end - size); break; + } + } + return { 'start': start, 'end': end }; + } + + /** + * Extracts wrapper details from the `source` body comment. + * + * @private + * @param {string} source The source to inspect. + * @returns {Array} Returns the wrapper details. + */ + function getWrapDetails(source) { + var match = source.match(reWrapDetails); + return match ? match[1].split(reSplitDetails) : []; + } + + /** + * Checks if `path` exists on `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @param {Function} hasFunc The function to check properties. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + */ + function hasPath(object, path, hasFunc) { + path = castPath(path, object); + + var index = -1, + length = path.length, + result = false; + + while (++index < length) { + var key = toKey(path[index]); + if (!(result = object != null && hasFunc(object, key))) { + break; + } + object = object[key]; + } + if (result || ++index != length) { + return result; + } + length = object == null ? 0 : object.length; + return !!length && isLength(length) && isIndex(key, length) && + (isArray(object) || isArguments(object)); + } + + /** + * Initializes an array clone. + * + * @private + * @param {Array} array The array to clone. + * @returns {Array} Returns the initialized clone. + */ + function initCloneArray(array) { + var length = array.length, + result = new array.constructor(length); + + // Add properties assigned by `RegExp#exec`. + if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) { + result.index = array.index; + result.input = array.input; + } + return result; + } + + /** + * Initializes an object clone. + * + * @private + * @param {Object} object The object to clone. + * @returns {Object} Returns the initialized clone. + */ + function initCloneObject(object) { + return (typeof object.constructor == 'function' && !isPrototype(object)) + ? baseCreate(getPrototype(object)) + : {}; + } + + /** + * Initializes an object clone based on its `toStringTag`. + * + * **Note:** This function only supports cloning values with tags of + * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. + * + * @private + * @param {Object} object The object to clone. + * @param {string} tag The `toStringTag` of the object to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the initialized clone. + */ + function initCloneByTag(object, tag, isDeep) { + var Ctor = object.constructor; + switch (tag) { + case arrayBufferTag: + return cloneArrayBuffer(object); + + case boolTag: + case dateTag: + return new Ctor(+object); + + case dataViewTag: + return cloneDataView(object, isDeep); + + case float32Tag: case float64Tag: + case int8Tag: case int16Tag: case int32Tag: + case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: + return cloneTypedArray(object, isDeep); + + case mapTag: + return new Ctor; + + case numberTag: + case stringTag: + return new Ctor(object); + + case regexpTag: + return cloneRegExp(object); + + case setTag: + return new Ctor; + + case symbolTag: + return cloneSymbol(object); + } + } + + /** + * Inserts wrapper `details` in a comment at the top of the `source` body. + * + * @private + * @param {string} source The source to modify. + * @returns {Array} details The details to insert. + * @returns {string} Returns the modified source. + */ + function insertWrapDetails(source, details) { + var length = details.length; + if (!length) { + return source; + } + var lastIndex = length - 1; + details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex]; + details = details.join(length > 2 ? ', ' : ' '); + return source.replace(reWrapComment, '{\n/* [wrapped with ' + details + '] */\n'); + } + + /** + * Checks if `value` is a flattenable `arguments` object or array. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. + */ + function isFlattenable(value) { + return isArray(value) || isArguments(value) || + !!(spreadableSymbol && value && value[spreadableSymbol]); + } + + /** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ + function isIndex(value, length) { + var type = typeof value; + length = length == null ? MAX_SAFE_INTEGER : length; + + return !!length && + (type == 'number' || + (type != 'symbol' && reIsUint.test(value))) && + (value > -1 && value % 1 == 0 && value < length); + } + + /** + * Checks if the given arguments are from an iteratee call. + * + * @private + * @param {*} value The potential iteratee value argument. + * @param {*} index The potential iteratee index or key argument. + * @param {*} object The potential iteratee object argument. + * @returns {boolean} Returns `true` if the arguments are from an iteratee call, + * else `false`. + */ + function isIterateeCall(value, index, object) { + if (!isObject(object)) { + return false; + } + var type = typeof index; + if (type == 'number' + ? (isArrayLike(object) && isIndex(index, object.length)) + : (type == 'string' && index in object) + ) { + return eq(object[index], value); + } + return false; + } + + /** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ + function isKey(value, object) { + if (isArray(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || isSymbol(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); + } + + /** + * Checks if `value` is suitable for use as unique object key. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is suitable, else `false`. + */ + function isKeyable(value) { + var type = typeof value; + return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') + ? (value !== '__proto__') + : (value === null); + } + + /** + * Checks if `func` has a lazy counterpart. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` has a lazy counterpart, + * else `false`. + */ + function isLaziable(func) { + var funcName = getFuncName(func), + other = lodash[funcName]; + + if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) { + return false; + } + if (func === other) { + return true; + } + var data = getData(other); + return !!data && func === data[0]; + } + + /** + * Checks if `func` has its source masked. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. + */ + function isMasked(func) { + return !!maskSrcKey && (maskSrcKey in func); + } + + /** + * Checks if `func` is capable of being masked. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `func` is maskable, else `false`. + */ + var isMaskable = coreJsData ? isFunction : stubFalse; + + /** + * Checks if `value` is likely a prototype object. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. + */ + function isPrototype(value) { + var Ctor = value && value.constructor, + proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; + + return value === proto; + } + + /** + * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` if suitable for strict + * equality comparisons, else `false`. + */ + function isStrictComparable(value) { + return value === value && !isObject(value); + } + + /** + * A specialized version of `matchesProperty` for source values suitable + * for strict equality comparisons, i.e. `===`. + * + * @private + * @param {string} key The key of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ + function matchesStrictComparable(key, srcValue) { + return function(object) { + if (object == null) { + return false; + } + return object[key] === srcValue && + (srcValue !== undefined || (key in Object(object))); + }; + } + + /** + * A specialized version of `_.memoize` which clears the memoized function's + * cache when it exceeds `MAX_MEMOIZE_SIZE`. + * + * @private + * @param {Function} func The function to have its output memoized. + * @returns {Function} Returns the new memoized function. + */ + function memoizeCapped(func) { + var result = memoize(func, function(key) { + if (cache.size === MAX_MEMOIZE_SIZE) { + cache.clear(); + } + return key; + }); + + var cache = result.cache; + return result; + } + + /** + * Merges the function metadata of `source` into `data`. + * + * Merging metadata reduces the number of wrappers used to invoke a function. + * This is possible because methods like `_.bind`, `_.curry`, and `_.partial` + * may be applied regardless of execution order. Methods like `_.ary` and + * `_.rearg` modify function arguments, making the order in which they are + * executed important, preventing the merging of metadata. However, we make + * an exception for a safe combined case where curried functions have `_.ary` + * and or `_.rearg` applied. + * + * @private + * @param {Array} data The destination metadata. + * @param {Array} source The source metadata. + * @returns {Array} Returns `data`. + */ + function mergeData(data, source) { + var bitmask = data[1], + srcBitmask = source[1], + newBitmask = bitmask | srcBitmask, + isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG); + + var isCombo = + ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) || + ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) || + ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG)); + + // Exit early if metadata can't be merged. + if (!(isCommon || isCombo)) { + return data; + } + // Use source `thisArg` if available. + if (srcBitmask & WRAP_BIND_FLAG) { + data[2] = source[2]; + // Set when currying a bound function. + newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG; + } + // Compose partial arguments. + var value = source[3]; + if (value) { + var partials = data[3]; + data[3] = partials ? composeArgs(partials, value, source[4]) : value; + data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4]; + } + // Compose partial right arguments. + value = source[5]; + if (value) { + partials = data[5]; + data[5] = partials ? composeArgsRight(partials, value, source[6]) : value; + data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6]; + } + // Use source `argPos` if available. + value = source[7]; + if (value) { + data[7] = value; + } + // Use source `ary` if it's smaller. + if (srcBitmask & WRAP_ARY_FLAG) { + data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]); + } + // Use source `arity` if one is not provided. + if (data[9] == null) { + data[9] = source[9]; + } + // Use source `func` and merge bitmasks. + data[0] = source[0]; + data[1] = newBitmask; + + return data; + } + + /** + * This function is like + * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * except that it includes inherited enumerable properties. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function nativeKeysIn(object) { + var result = []; + if (object != null) { + for (var key in Object(object)) { + result.push(key); + } + } + return result; + } + + /** + * Converts `value` to a string using `Object.prototype.toString`. + * + * @private + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + */ + function objectToString(value) { + return nativeObjectToString.call(value); + } + + /** + * A specialized version of `baseRest` which transforms the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @param {Function} transform The rest array transform. + * @returns {Function} Returns the new function. + */ + function overRest(func, start, transform) { + start = nativeMax(start === undefined ? (func.length - 1) : start, 0); + return function() { + var args = arguments, + index = -1, + length = nativeMax(args.length - start, 0), + array = Array(length); + + while (++index < length) { + array[index] = args[start + index]; + } + index = -1; + var otherArgs = Array(start + 1); + while (++index < start) { + otherArgs[index] = args[index]; + } + otherArgs[start] = transform(array); + return apply(func, this, otherArgs); + }; + } + + /** + * Gets the parent value at `path` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} path The path to get the parent value of. + * @returns {*} Returns the parent value. + */ + function parent(object, path) { + return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1)); + } + + /** + * Reorder `array` according to the specified indexes where the element at + * the first index is assigned as the first element, the element at + * the second index is assigned as the second element, and so on. + * + * @private + * @param {Array} array The array to reorder. + * @param {Array} indexes The arranged array indexes. + * @returns {Array} Returns `array`. + */ + function reorder(array, indexes) { + var arrLength = array.length, + length = nativeMin(indexes.length, arrLength), + oldArray = copyArray(array); + + while (length--) { + var index = indexes[length]; + array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined; + } + return array; + } + + /** + * Gets the value at `key`, unless `key` is "__proto__" or "constructor". + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ + function safeGet(object, key) { + if (key === 'constructor' && typeof object[key] === 'function') { + return; + } + + if (key == '__proto__') { + return; + } + + return object[key]; + } + + /** + * Sets metadata for `func`. + * + * **Note:** If this function becomes hot, i.e. is invoked a lot in a short + * period of time, it will trip its breaker and transition to an identity + * function to avoid garbage collection pauses in V8. See + * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070) + * for more details. + * + * @private + * @param {Function} func The function to associate metadata with. + * @param {*} data The metadata. + * @returns {Function} Returns `func`. + */ + var setData = shortOut(baseSetData); + + /** + * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout). + * + * @private + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @returns {number|Object} Returns the timer id or timeout object. + */ + var setTimeout = ctxSetTimeout || function(func, wait) { + return root.setTimeout(func, wait); + }; + + /** + * Sets the `toString` method of `func` to return `string`. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ + var setToString = shortOut(baseSetToString); + + /** + * Sets the `toString` method of `wrapper` to mimic the source of `reference` + * with wrapper details in a comment at the top of the source body. + * + * @private + * @param {Function} wrapper The function to modify. + * @param {Function} reference The reference function. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @returns {Function} Returns `wrapper`. + */ + function setWrapToString(wrapper, reference, bitmask) { + var source = (reference + ''); + return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask))); + } + + /** + * Creates a function that'll short out and invoke `identity` instead + * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` + * milliseconds. + * + * @private + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new shortable function. + */ + function shortOut(func) { + var count = 0, + lastCalled = 0; + + return function() { + var stamp = nativeNow(), + remaining = HOT_SPAN - (stamp - lastCalled); + + lastCalled = stamp; + if (remaining > 0) { + if (++count >= HOT_COUNT) { + return arguments[0]; + } + } else { + count = 0; + } + return func.apply(undefined, arguments); + }; + } + + /** + * A specialized version of `_.shuffle` which mutates and sets the size of `array`. + * + * @private + * @param {Array} array The array to shuffle. + * @param {number} [size=array.length] The size of `array`. + * @returns {Array} Returns `array`. + */ + function shuffleSelf(array, size) { + var index = -1, + length = array.length, + lastIndex = length - 1; + + size = size === undefined ? length : size; + while (++index < size) { + var rand = baseRandom(index, lastIndex), + value = array[rand]; + + array[rand] = array[index]; + array[index] = value; + } + array.length = size; + return array; + } + + /** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ + var stringToPath = memoizeCapped(function(string) { + var result = []; + if (string.charCodeAt(0) === 46 /* . */) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, subString) { + result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; + }); + + /** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ + function toKey(value) { + if (typeof value == 'string' || isSymbol(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; + } + + /** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to convert. + * @returns {string} Returns the source code. + */ + function toSource(func) { + if (func != null) { + try { + return funcToString.call(func); + } catch (e) {} + try { + return (func + ''); + } catch (e) {} + } + return ''; + } + + /** + * Updates wrapper `details` based on `bitmask` flags. + * + * @private + * @returns {Array} details The details to modify. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @returns {Array} Returns `details`. + */ + function updateWrapDetails(details, bitmask) { + arrayEach(wrapFlags, function(pair) { + var value = '_.' + pair[0]; + if ((bitmask & pair[1]) && !arrayIncludes(details, value)) { + details.push(value); + } + }); + return details.sort(); + } + + /** + * Creates a clone of `wrapper`. + * + * @private + * @param {Object} wrapper The wrapper to clone. + * @returns {Object} Returns the cloned wrapper. + */ + function wrapperClone(wrapper) { + if (wrapper instanceof LazyWrapper) { + return wrapper.clone(); + } + var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__); + result.__actions__ = copyArray(wrapper.__actions__); + result.__index__ = wrapper.__index__; + result.__values__ = wrapper.__values__; + return result; + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates an array of elements split into groups the length of `size`. + * If `array` can't be split evenly, the final chunk will be the remaining + * elements. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to process. + * @param {number} [size=1] The length of each chunk + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the new array of chunks. + * @example + * + * _.chunk(['a', 'b', 'c', 'd'], 2); + * // => [['a', 'b'], ['c', 'd']] + * + * _.chunk(['a', 'b', 'c', 'd'], 3); + * // => [['a', 'b', 'c'], ['d']] + */ + function chunk(array, size, guard) { + if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) { + size = 1; + } else { + size = nativeMax(toInteger(size), 0); + } + var length = array == null ? 0 : array.length; + if (!length || size < 1) { + return []; + } + var index = 0, + resIndex = 0, + result = Array(nativeCeil(length / size)); + + while (index < length) { + result[resIndex++] = baseSlice(array, index, (index += size)); + } + return result; + } + + /** + * Creates an array with all falsey values removed. The values `false`, `null`, + * `0`, `""`, `undefined`, and `NaN` are falsey. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to compact. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.compact([0, 1, false, 2, '', 3]); + * // => [1, 2, 3] + */ + function compact(array) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (value) { + result[resIndex++] = value; + } + } + return result; + } + + /** + * Creates a new array concatenating `array` with any additional arrays + * and/or values. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to concatenate. + * @param {...*} [values] The values to concatenate. + * @returns {Array} Returns the new concatenated array. + * @example + * + * var array = [1]; + * var other = _.concat(array, 2, [3], [[4]]); + * + * console.log(other); + * // => [1, 2, 3, [4]] + * + * console.log(array); + * // => [1] + */ + function concat() { + var length = arguments.length; + if (!length) { + return []; + } + var args = Array(length - 1), + array = arguments[0], + index = length; + + while (index--) { + args[index - 1] = arguments[index]; + } + return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1)); + } + + /** + * Creates an array of `array` values not included in the other given arrays + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. The order and references of result values are + * determined by the first array. + * + * **Note:** Unlike `_.pullAll`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @returns {Array} Returns the new array of filtered values. + * @see _.without, _.xor + * @example + * + * _.difference([2, 1], [2, 3]); + * // => [1] + */ + var difference = baseRest(function(array, values) { + return isArrayLikeObject(array) + ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true)) + : []; + }); + + /** + * This method is like `_.difference` except that it accepts `iteratee` which + * is invoked for each element of `array` and `values` to generate the criterion + * by which they're compared. The order and references of result values are + * determined by the first array. The iteratee is invoked with one argument: + * (value). + * + * **Note:** Unlike `_.pullAllBy`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor); + * // => [1.2] + * + * // The `_.property` iteratee shorthand. + * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x'); + * // => [{ 'x': 2 }] + */ + var differenceBy = baseRest(function(array, values) { + var iteratee = last(values); + if (isArrayLikeObject(iteratee)) { + iteratee = undefined; + } + return isArrayLikeObject(array) + ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2)) + : []; + }); + + /** + * This method is like `_.difference` except that it accepts `comparator` + * which is invoked to compare elements of `array` to `values`. The order and + * references of result values are determined by the first array. The comparator + * is invoked with two arguments: (arrVal, othVal). + * + * **Note:** Unlike `_.pullAllWith`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * + * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual); + * // => [{ 'x': 2, 'y': 1 }] + */ + var differenceWith = baseRest(function(array, values) { + var comparator = last(values); + if (isArrayLikeObject(comparator)) { + comparator = undefined; + } + return isArrayLikeObject(array) + ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator) + : []; + }); + + /** + * Creates a slice of `array` with `n` elements dropped from the beginning. + * + * @static + * @memberOf _ + * @since 0.5.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to drop. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.drop([1, 2, 3]); + * // => [2, 3] + * + * _.drop([1, 2, 3], 2); + * // => [3] + * + * _.drop([1, 2, 3], 5); + * // => [] + * + * _.drop([1, 2, 3], 0); + * // => [1, 2, 3] + */ + function drop(array, n, guard) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + return baseSlice(array, n < 0 ? 0 : n, length); + } + + /** + * Creates a slice of `array` with `n` elements dropped from the end. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to drop. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.dropRight([1, 2, 3]); + * // => [1, 2] + * + * _.dropRight([1, 2, 3], 2); + * // => [1] + * + * _.dropRight([1, 2, 3], 5); + * // => [] + * + * _.dropRight([1, 2, 3], 0); + * // => [1, 2, 3] + */ + function dropRight(array, n, guard) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + n = length - n; + return baseSlice(array, 0, n < 0 ? 0 : n); + } + + /** + * Creates a slice of `array` excluding elements dropped from the end. + * Elements are dropped until `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * _.dropRightWhile(users, function(o) { return !o.active; }); + * // => objects for ['barney'] + * + * // The `_.matches` iteratee shorthand. + * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false }); + * // => objects for ['barney', 'fred'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.dropRightWhile(users, ['active', false]); + * // => objects for ['barney'] + * + * // The `_.property` iteratee shorthand. + * _.dropRightWhile(users, 'active'); + * // => objects for ['barney', 'fred', 'pebbles'] + */ + function dropRightWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, getIteratee(predicate, 3), true, true) + : []; + } + + /** + * Creates a slice of `array` excluding elements dropped from the beginning. + * Elements are dropped until `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.dropWhile(users, function(o) { return !o.active; }); + * // => objects for ['pebbles'] + * + * // The `_.matches` iteratee shorthand. + * _.dropWhile(users, { 'user': 'barney', 'active': false }); + * // => objects for ['fred', 'pebbles'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.dropWhile(users, ['active', false]); + * // => objects for ['pebbles'] + * + * // The `_.property` iteratee shorthand. + * _.dropWhile(users, 'active'); + * // => objects for ['barney', 'fred', 'pebbles'] + */ + function dropWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, getIteratee(predicate, 3), true) + : []; + } + + /** + * Fills elements of `array` with `value` from `start` up to, but not + * including, `end`. + * + * **Note:** This method mutates `array`. + * + * @static + * @memberOf _ + * @since 3.2.0 + * @category Array + * @param {Array} array The array to fill. + * @param {*} value The value to fill `array` with. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns `array`. + * @example + * + * var array = [1, 2, 3]; + * + * _.fill(array, 'a'); + * console.log(array); + * // => ['a', 'a', 'a'] + * + * _.fill(Array(3), 2); + * // => [2, 2, 2] + * + * _.fill([4, 6, 8, 10], '*', 1, 3); + * // => [4, '*', '*', 10] + */ + function fill(array, value, start, end) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + if (start && typeof start != 'number' && isIterateeCall(array, value, start)) { + start = 0; + end = length; + } + return baseFill(array, value, start, end); + } + + /** + * This method is like `_.find` except that it returns the index of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.findIndex(users, function(o) { return o.user == 'barney'; }); + * // => 0 + * + * // The `_.matches` iteratee shorthand. + * _.findIndex(users, { 'user': 'fred', 'active': false }); + * // => 1 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findIndex(users, ['active', false]); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.findIndex(users, 'active'); + * // => 2 + */ + function findIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return baseFindIndex(array, getIteratee(predicate, 3), index); + } + + /** + * This method is like `_.findIndex` except that it iterates over elements + * of `collection` from right to left. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=array.length-1] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; }); + * // => 2 + * + * // The `_.matches` iteratee shorthand. + * _.findLastIndex(users, { 'user': 'barney', 'active': true }); + * // => 0 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findLastIndex(users, ['active', false]); + * // => 2 + * + * // The `_.property` iteratee shorthand. + * _.findLastIndex(users, 'active'); + * // => 0 + */ + function findLastIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = length - 1; + if (fromIndex !== undefined) { + index = toInteger(fromIndex); + index = fromIndex < 0 + ? nativeMax(length + index, 0) + : nativeMin(index, length - 1); + } + return baseFindIndex(array, getIteratee(predicate, 3), index, true); + } + + /** + * Flattens `array` a single level deep. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, [3, [4]], 5]]); + * // => [1, 2, [3, [4]], 5] + */ + function flatten(array) { + var length = array == null ? 0 : array.length; + return length ? baseFlatten(array, 1) : []; + } + + /** + * Recursively flattens `array`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flattenDeep([1, [2, [3, [4]], 5]]); + * // => [1, 2, 3, 4, 5] + */ + function flattenDeep(array) { + var length = array == null ? 0 : array.length; + return length ? baseFlatten(array, INFINITY) : []; + } + + /** + * Recursively flatten `array` up to `depth` times. + * + * @static + * @memberOf _ + * @since 4.4.0 + * @category Array + * @param {Array} array The array to flatten. + * @param {number} [depth=1] The maximum recursion depth. + * @returns {Array} Returns the new flattened array. + * @example + * + * var array = [1, [2, [3, [4]], 5]]; + * + * _.flattenDepth(array, 1); + * // => [1, 2, [3, [4]], 5] + * + * _.flattenDepth(array, 2); + * // => [1, 2, 3, [4], 5] + */ + function flattenDepth(array, depth) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + depth = depth === undefined ? 1 : toInteger(depth); + return baseFlatten(array, depth); + } + + /** + * The inverse of `_.toPairs`; this method returns an object composed + * from key-value `pairs`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} pairs The key-value pairs. + * @returns {Object} Returns the new object. + * @example + * + * _.fromPairs([['a', 1], ['b', 2]]); + * // => { 'a': 1, 'b': 2 } + */ + function fromPairs(pairs) { + var index = -1, + length = pairs == null ? 0 : pairs.length, + result = {}; + + while (++index < length) { + var pair = pairs[index]; + result[pair[0]] = pair[1]; + } + return result; + } + + /** + * Gets the first element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias first + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the first element of `array`. + * @example + * + * _.head([1, 2, 3]); + * // => 1 + * + * _.head([]); + * // => undefined + */ + function head(array) { + return (array && array.length) ? array[0] : undefined; + } + + /** + * Gets the index at which the first occurrence of `value` is found in `array` + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. If `fromIndex` is negative, it's used as the + * offset from the end of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.indexOf([1, 2, 1, 2], 2); + * // => 1 + * + * // Search from the `fromIndex`. + * _.indexOf([1, 2, 1, 2], 2, 2); + * // => 3 + */ + function indexOf(array, value, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return baseIndexOf(array, value, index); + } + + /** + * Gets all but the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.initial([1, 2, 3]); + * // => [1, 2] + */ + function initial(array) { + var length = array == null ? 0 : array.length; + return length ? baseSlice(array, 0, -1) : []; + } + + /** + * Creates an array of unique values that are included in all given arrays + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. The order and references of result values are + * determined by the first array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * _.intersection([2, 1], [2, 3]); + * // => [2] + */ + var intersection = baseRest(function(arrays) { + var mapped = arrayMap(arrays, castArrayLikeObject); + return (mapped.length && mapped[0] === arrays[0]) + ? baseIntersection(mapped) + : []; + }); + + /** + * This method is like `_.intersection` except that it accepts `iteratee` + * which is invoked for each element of each `arrays` to generate the criterion + * by which they're compared. The order and references of result values are + * determined by the first array. The iteratee is invoked with one argument: + * (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor); + * // => [2.1] + * + * // The `_.property` iteratee shorthand. + * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }] + */ + var intersectionBy = baseRest(function(arrays) { + var iteratee = last(arrays), + mapped = arrayMap(arrays, castArrayLikeObject); + + if (iteratee === last(mapped)) { + iteratee = undefined; + } else { + mapped.pop(); + } + return (mapped.length && mapped[0] === arrays[0]) + ? baseIntersection(mapped, getIteratee(iteratee, 2)) + : []; + }); + + /** + * This method is like `_.intersection` except that it accepts `comparator` + * which is invoked to compare elements of `arrays`. The order and references + * of result values are determined by the first array. The comparator is + * invoked with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.intersectionWith(objects, others, _.isEqual); + * // => [{ 'x': 1, 'y': 2 }] + */ + var intersectionWith = baseRest(function(arrays) { + var comparator = last(arrays), + mapped = arrayMap(arrays, castArrayLikeObject); + + comparator = typeof comparator == 'function' ? comparator : undefined; + if (comparator) { + mapped.pop(); + } + return (mapped.length && mapped[0] === arrays[0]) + ? baseIntersection(mapped, undefined, comparator) + : []; + }); + + /** + * Converts all elements in `array` into a string separated by `separator`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to convert. + * @param {string} [separator=','] The element separator. + * @returns {string} Returns the joined string. + * @example + * + * _.join(['a', 'b', 'c'], '~'); + * // => 'a~b~c' + */ + function join(array, separator) { + return array == null ? '' : nativeJoin.call(array, separator); + } + + /** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ + function last(array) { + var length = array == null ? 0 : array.length; + return length ? array[length - 1] : undefined; + } + + /** + * This method is like `_.indexOf` except that it iterates over elements of + * `array` from right to left. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} [fromIndex=array.length-1] The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.lastIndexOf([1, 2, 1, 2], 2); + * // => 3 + * + * // Search from the `fromIndex`. + * _.lastIndexOf([1, 2, 1, 2], 2, 2); + * // => 1 + */ + function lastIndexOf(array, value, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = length; + if (fromIndex !== undefined) { + index = toInteger(fromIndex); + index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1); + } + return value === value + ? strictLastIndexOf(array, value, index) + : baseFindIndex(array, baseIsNaN, index, true); + } + + /** + * Gets the element at index `n` of `array`. If `n` is negative, the nth + * element from the end is returned. + * + * @static + * @memberOf _ + * @since 4.11.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=0] The index of the element to return. + * @returns {*} Returns the nth element of `array`. + * @example + * + * var array = ['a', 'b', 'c', 'd']; + * + * _.nth(array, 1); + * // => 'b' + * + * _.nth(array, -2); + * // => 'c'; + */ + function nth(array, n) { + return (array && array.length) ? baseNth(array, toInteger(n)) : undefined; + } + + /** + * Removes all given values from `array` using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove` + * to remove elements from an array by predicate. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {...*} [values] The values to remove. + * @returns {Array} Returns `array`. + * @example + * + * var array = ['a', 'b', 'c', 'a', 'b', 'c']; + * + * _.pull(array, 'a', 'c'); + * console.log(array); + * // => ['b', 'b'] + */ + var pull = baseRest(pullAll); + + /** + * This method is like `_.pull` except that it accepts an array of values to remove. + * + * **Note:** Unlike `_.difference`, this method mutates `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @returns {Array} Returns `array`. + * @example + * + * var array = ['a', 'b', 'c', 'a', 'b', 'c']; + * + * _.pullAll(array, ['a', 'c']); + * console.log(array); + * // => ['b', 'b'] + */ + function pullAll(array, values) { + return (array && array.length && values && values.length) + ? basePullAll(array, values) + : array; + } + + /** + * This method is like `_.pullAll` except that it accepts `iteratee` which is + * invoked for each element of `array` and `values` to generate the criterion + * by which they're compared. The iteratee is invoked with one argument: (value). + * + * **Note:** Unlike `_.differenceBy`, this method mutates `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns `array`. + * @example + * + * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }]; + * + * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x'); + * console.log(array); + * // => [{ 'x': 2 }] + */ + function pullAllBy(array, values, iteratee) { + return (array && array.length && values && values.length) + ? basePullAll(array, values, getIteratee(iteratee, 2)) + : array; + } + + /** + * This method is like `_.pullAll` except that it accepts `comparator` which + * is invoked to compare elements of `array` to `values`. The comparator is + * invoked with two arguments: (arrVal, othVal). + * + * **Note:** Unlike `_.differenceWith`, this method mutates `array`. + * + * @static + * @memberOf _ + * @since 4.6.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns `array`. + * @example + * + * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }]; + * + * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual); + * console.log(array); + * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }] + */ + function pullAllWith(array, values, comparator) { + return (array && array.length && values && values.length) + ? basePullAll(array, values, undefined, comparator) + : array; + } + + /** + * Removes elements from `array` corresponding to `indexes` and returns an + * array of removed elements. + * + * **Note:** Unlike `_.at`, this method mutates `array`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {...(number|number[])} [indexes] The indexes of elements to remove. + * @returns {Array} Returns the new array of removed elements. + * @example + * + * var array = ['a', 'b', 'c', 'd']; + * var pulled = _.pullAt(array, [1, 3]); + * + * console.log(array); + * // => ['a', 'c'] + * + * console.log(pulled); + * // => ['b', 'd'] + */ + var pullAt = flatRest(function(array, indexes) { + var length = array == null ? 0 : array.length, + result = baseAt(array, indexes); + + basePullAt(array, arrayMap(indexes, function(index) { + return isIndex(index, length) ? +index : index; + }).sort(compareAscending)); + + return result; + }); + + /** + * Removes all elements from `array` that `predicate` returns truthy for + * and returns an array of the removed elements. The predicate is invoked + * with three arguments: (value, index, array). + * + * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull` + * to pull elements from an array by value. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new array of removed elements. + * @example + * + * var array = [1, 2, 3, 4]; + * var evens = _.remove(array, function(n) { + * return n % 2 == 0; + * }); + * + * console.log(array); + * // => [1, 3] + * + * console.log(evens); + * // => [2, 4] + */ + function remove(array, predicate) { + var result = []; + if (!(array && array.length)) { + return result; + } + var index = -1, + indexes = [], + length = array.length; + + predicate = getIteratee(predicate, 3); + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result.push(value); + indexes.push(index); + } + } + basePullAt(array, indexes); + return result; + } + + /** + * Reverses `array` so that the first element becomes the last, the second + * element becomes the second to last, and so on. + * + * **Note:** This method mutates `array` and is based on + * [`Array#reverse`](https://mdn.io/Array/reverse). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to modify. + * @returns {Array} Returns `array`. + * @example + * + * var array = [1, 2, 3]; + * + * _.reverse(array); + * // => [3, 2, 1] + * + * console.log(array); + * // => [3, 2, 1] + */ + function reverse(array) { + return array == null ? array : nativeReverse.call(array); + } + + /** + * Creates a slice of `array` from `start` up to, but not including, `end`. + * + * **Note:** This method is used instead of + * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are + * returned. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ + function slice(array, start, end) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + if (end && typeof end != 'number' && isIterateeCall(array, start, end)) { + start = 0; + end = length; + } + else { + start = start == null ? 0 : toInteger(start); + end = end === undefined ? length : toInteger(end); + } + return baseSlice(array, start, end); + } + + /** + * Uses a binary search to determine the lowest index at which `value` + * should be inserted into `array` in order to maintain its sort order. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * _.sortedIndex([30, 50], 40); + * // => 1 + */ + function sortedIndex(array, value) { + return baseSortedIndex(array, value); + } + + /** + * This method is like `_.sortedIndex` except that it accepts `iteratee` + * which is invoked for `value` and each element of `array` to compute their + * sort ranking. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * var objects = [{ 'x': 4 }, { 'x': 5 }]; + * + * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.sortedIndexBy(objects, { 'x': 4 }, 'x'); + * // => 0 + */ + function sortedIndexBy(array, value, iteratee) { + return baseSortedIndexBy(array, value, getIteratee(iteratee, 2)); + } + + /** + * This method is like `_.indexOf` except that it performs a binary + * search on a sorted `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.sortedIndexOf([4, 5, 5, 5, 6], 5); + * // => 1 + */ + function sortedIndexOf(array, value) { + var length = array == null ? 0 : array.length; + if (length) { + var index = baseSortedIndex(array, value); + if (index < length && eq(array[index], value)) { + return index; + } + } + return -1; + } + + /** + * This method is like `_.sortedIndex` except that it returns the highest + * index at which `value` should be inserted into `array` in order to + * maintain its sort order. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * _.sortedLastIndex([4, 5, 5, 5, 6], 5); + * // => 4 + */ + function sortedLastIndex(array, value) { + return baseSortedIndex(array, value, true); + } + + /** + * This method is like `_.sortedLastIndex` except that it accepts `iteratee` + * which is invoked for `value` and each element of `array` to compute their + * sort ranking. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * var objects = [{ 'x': 4 }, { 'x': 5 }]; + * + * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); + * // => 1 + * + * // The `_.property` iteratee shorthand. + * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x'); + * // => 1 + */ + function sortedLastIndexBy(array, value, iteratee) { + return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true); + } + + /** + * This method is like `_.lastIndexOf` except that it performs a binary + * search on a sorted `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5); + * // => 3 + */ + function sortedLastIndexOf(array, value) { + var length = array == null ? 0 : array.length; + if (length) { + var index = baseSortedIndex(array, value, true) - 1; + if (eq(array[index], value)) { + return index; + } + } + return -1; + } + + /** + * This method is like `_.uniq` except that it's designed and optimized + * for sorted arrays. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.sortedUniq([1, 1, 2]); + * // => [1, 2] + */ + function sortedUniq(array) { + return (array && array.length) + ? baseSortedUniq(array) + : []; + } + + /** + * This method is like `_.uniqBy` except that it's designed and optimized + * for sorted arrays. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor); + * // => [1.1, 2.3] + */ + function sortedUniqBy(array, iteratee) { + return (array && array.length) + ? baseSortedUniq(array, getIteratee(iteratee, 2)) + : []; + } + + /** + * Gets all but the first element of `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to query. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.tail([1, 2, 3]); + * // => [2, 3] + */ + function tail(array) { + var length = array == null ? 0 : array.length; + return length ? baseSlice(array, 1, length) : []; + } + + /** + * Creates a slice of `array` with `n` elements taken from the beginning. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to take. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.take([1, 2, 3]); + * // => [1] + * + * _.take([1, 2, 3], 2); + * // => [1, 2] + * + * _.take([1, 2, 3], 5); + * // => [1, 2, 3] + * + * _.take([1, 2, 3], 0); + * // => [] + */ + function take(array, n, guard) { + if (!(array && array.length)) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + return baseSlice(array, 0, n < 0 ? 0 : n); + } + + /** + * Creates a slice of `array` with `n` elements taken from the end. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to take. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.takeRight([1, 2, 3]); + * // => [3] + * + * _.takeRight([1, 2, 3], 2); + * // => [2, 3] + * + * _.takeRight([1, 2, 3], 5); + * // => [1, 2, 3] + * + * _.takeRight([1, 2, 3], 0); + * // => [] + */ + function takeRight(array, n, guard) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + n = length - n; + return baseSlice(array, n < 0 ? 0 : n, length); + } + + /** + * Creates a slice of `array` with elements taken from the end. Elements are + * taken until `predicate` returns falsey. The predicate is invoked with + * three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * _.takeRightWhile(users, function(o) { return !o.active; }); + * // => objects for ['fred', 'pebbles'] + * + * // The `_.matches` iteratee shorthand. + * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false }); + * // => objects for ['pebbles'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.takeRightWhile(users, ['active', false]); + * // => objects for ['fred', 'pebbles'] + * + * // The `_.property` iteratee shorthand. + * _.takeRightWhile(users, 'active'); + * // => [] + */ + function takeRightWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, getIteratee(predicate, 3), false, true) + : []; + } + + /** + * Creates a slice of `array` with elements taken from the beginning. Elements + * are taken until `predicate` returns falsey. The predicate is invoked with + * three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.takeWhile(users, function(o) { return !o.active; }); + * // => objects for ['barney', 'fred'] + * + * // The `_.matches` iteratee shorthand. + * _.takeWhile(users, { 'user': 'barney', 'active': false }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.takeWhile(users, ['active', false]); + * // => objects for ['barney', 'fred'] + * + * // The `_.property` iteratee shorthand. + * _.takeWhile(users, 'active'); + * // => [] + */ + function takeWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, getIteratee(predicate, 3)) + : []; + } + + /** + * Creates an array of unique values, in order, from all given arrays using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.union([2], [1, 2]); + * // => [2, 1] + */ + var union = baseRest(function(arrays) { + return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true)); + }); + + /** + * This method is like `_.union` except that it accepts `iteratee` which is + * invoked for each element of each `arrays` to generate the criterion by + * which uniqueness is computed. Result values are chosen from the first + * array in which the value occurs. The iteratee is invoked with one argument: + * (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.unionBy([2.1], [1.2, 2.3], Math.floor); + * // => [2.1, 1.2] + * + * // The `_.property` iteratee shorthand. + * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }, { 'x': 2 }] + */ + var unionBy = baseRest(function(arrays) { + var iteratee = last(arrays); + if (isArrayLikeObject(iteratee)) { + iteratee = undefined; + } + return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2)); + }); + + /** + * This method is like `_.union` except that it accepts `comparator` which + * is invoked to compare elements of `arrays`. Result values are chosen from + * the first array in which the value occurs. The comparator is invoked + * with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of combined values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.unionWith(objects, others, _.isEqual); + * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] + */ + var unionWith = baseRest(function(arrays) { + var comparator = last(arrays); + comparator = typeof comparator == 'function' ? comparator : undefined; + return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator); + }); + + /** + * Creates a duplicate-free version of an array, using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons, in which only the first occurrence of each element + * is kept. The order of result values is determined by the order they occur + * in the array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.uniq([2, 1, 2]); + * // => [2, 1] + */ + function uniq(array) { + return (array && array.length) ? baseUniq(array) : []; + } + + /** + * This method is like `_.uniq` except that it accepts `iteratee` which is + * invoked for each element in `array` to generate the criterion by which + * uniqueness is computed. The order of result values is determined by the + * order they occur in the array. The iteratee is invoked with one argument: + * (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.uniqBy([2.1, 1.2, 2.3], Math.floor); + * // => [2.1, 1.2] + * + * // The `_.property` iteratee shorthand. + * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }, { 'x': 2 }] + */ + function uniqBy(array, iteratee) { + return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : []; + } + + /** + * This method is like `_.uniq` except that it accepts `comparator` which + * is invoked to compare elements of `array`. The order of result values is + * determined by the order they occur in the array.The comparator is invoked + * with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.uniqWith(objects, _.isEqual); + * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }] + */ + function uniqWith(array, comparator) { + comparator = typeof comparator == 'function' ? comparator : undefined; + return (array && array.length) ? baseUniq(array, undefined, comparator) : []; + } + + /** + * This method is like `_.zip` except that it accepts an array of grouped + * elements and creates an array regrouping the elements to their pre-zip + * configuration. + * + * @static + * @memberOf _ + * @since 1.2.0 + * @category Array + * @param {Array} array The array of grouped elements to process. + * @returns {Array} Returns the new array of regrouped elements. + * @example + * + * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]); + * // => [['a', 1, true], ['b', 2, false]] + * + * _.unzip(zipped); + * // => [['a', 'b'], [1, 2], [true, false]] + */ + function unzip(array) { + if (!(array && array.length)) { + return []; + } + var length = 0; + array = arrayFilter(array, function(group) { + if (isArrayLikeObject(group)) { + length = nativeMax(group.length, length); + return true; + } + }); + return baseTimes(length, function(index) { + return arrayMap(array, baseProperty(index)); + }); + } + + /** + * This method is like `_.unzip` except that it accepts `iteratee` to specify + * how regrouped values should be combined. The iteratee is invoked with the + * elements of each group: (...group). + * + * @static + * @memberOf _ + * @since 3.8.0 + * @category Array + * @param {Array} array The array of grouped elements to process. + * @param {Function} [iteratee=_.identity] The function to combine + * regrouped values. + * @returns {Array} Returns the new array of regrouped elements. + * @example + * + * var zipped = _.zip([1, 2], [10, 20], [100, 200]); + * // => [[1, 10, 100], [2, 20, 200]] + * + * _.unzipWith(zipped, _.add); + * // => [3, 30, 300] + */ + function unzipWith(array, iteratee) { + if (!(array && array.length)) { + return []; + } + var result = unzip(array); + if (iteratee == null) { + return result; + } + return arrayMap(result, function(group) { + return apply(iteratee, undefined, group); + }); + } + + /** + * Creates an array excluding all given values using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * **Note:** Unlike `_.pull`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...*} [values] The values to exclude. + * @returns {Array} Returns the new array of filtered values. + * @see _.difference, _.xor + * @example + * + * _.without([2, 1, 2, 3], 1, 2); + * // => [3] + */ + var without = baseRest(function(array, values) { + return isArrayLikeObject(array) + ? baseDifference(array, values) + : []; + }); + + /** + * Creates an array of unique values that is the + * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference) + * of the given arrays. The order of result values is determined by the order + * they occur in the arrays. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of filtered values. + * @see _.difference, _.without + * @example + * + * _.xor([2, 1], [2, 3]); + * // => [1, 3] + */ + var xor = baseRest(function(arrays) { + return baseXor(arrayFilter(arrays, isArrayLikeObject)); + }); + + /** + * This method is like `_.xor` except that it accepts `iteratee` which is + * invoked for each element of each `arrays` to generate the criterion by + * which by which they're compared. The order of result values is determined + * by the order they occur in the arrays. The iteratee is invoked with one + * argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor); + * // => [1.2, 3.4] + * + * // The `_.property` iteratee shorthand. + * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 2 }] + */ + var xorBy = baseRest(function(arrays) { + var iteratee = last(arrays); + if (isArrayLikeObject(iteratee)) { + iteratee = undefined; + } + return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2)); + }); + + /** + * This method is like `_.xor` except that it accepts `comparator` which is + * invoked to compare elements of `arrays`. The order of result values is + * determined by the order they occur in the arrays. The comparator is invoked + * with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.xorWith(objects, others, _.isEqual); + * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] + */ + var xorWith = baseRest(function(arrays) { + var comparator = last(arrays); + comparator = typeof comparator == 'function' ? comparator : undefined; + return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator); + }); + + /** + * Creates an array of grouped elements, the first of which contains the + * first elements of the given arrays, the second of which contains the + * second elements of the given arrays, and so on. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to process. + * @returns {Array} Returns the new array of grouped elements. + * @example + * + * _.zip(['a', 'b'], [1, 2], [true, false]); + * // => [['a', 1, true], ['b', 2, false]] + */ + var zip = baseRest(unzip); + + /** + * This method is like `_.fromPairs` except that it accepts two arrays, + * one of property identifiers and one of corresponding values. + * + * @static + * @memberOf _ + * @since 0.4.0 + * @category Array + * @param {Array} [props=[]] The property identifiers. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObject(['a', 'b'], [1, 2]); + * // => { 'a': 1, 'b': 2 } + */ + function zipObject(props, values) { + return baseZipObject(props || [], values || [], assignValue); + } + + /** + * This method is like `_.zipObject` except that it supports property paths. + * + * @static + * @memberOf _ + * @since 4.1.0 + * @category Array + * @param {Array} [props=[]] The property identifiers. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]); + * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } } + */ + function zipObjectDeep(props, values) { + return baseZipObject(props || [], values || [], baseSet); + } + + /** + * This method is like `_.zip` except that it accepts `iteratee` to specify + * how grouped values should be combined. The iteratee is invoked with the + * elements of each group: (...group). + * + * @static + * @memberOf _ + * @since 3.8.0 + * @category Array + * @param {...Array} [arrays] The arrays to process. + * @param {Function} [iteratee=_.identity] The function to combine + * grouped values. + * @returns {Array} Returns the new array of grouped elements. + * @example + * + * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) { + * return a + b + c; + * }); + * // => [111, 222] + */ + var zipWith = baseRest(function(arrays) { + var length = arrays.length, + iteratee = length > 1 ? arrays[length - 1] : undefined; + + iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined; + return unzipWith(arrays, iteratee); + }); + + /*------------------------------------------------------------------------*/ + + /** + * Creates a `lodash` wrapper instance that wraps `value` with explicit method + * chain sequences enabled. The result of such sequences must be unwrapped + * with `_#value`. + * + * @static + * @memberOf _ + * @since 1.3.0 + * @category Seq + * @param {*} value The value to wrap. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 }, + * { 'user': 'pebbles', 'age': 1 } + * ]; + * + * var youngest = _ + * .chain(users) + * .sortBy('age') + * .map(function(o) { + * return o.user + ' is ' + o.age; + * }) + * .head() + * .value(); + * // => 'pebbles is 1' + */ + function chain(value) { + var result = lodash(value); + result.__chain__ = true; + return result; + } + + /** + * This method invokes `interceptor` and returns `value`. The interceptor + * is invoked with one argument; (value). The purpose of this method is to + * "tap into" a method chain sequence in order to modify intermediate results. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Seq + * @param {*} value The value to provide to `interceptor`. + * @param {Function} interceptor The function to invoke. + * @returns {*} Returns `value`. + * @example + * + * _([1, 2, 3]) + * .tap(function(array) { + * // Mutate input array. + * array.pop(); + * }) + * .reverse() + * .value(); + * // => [2, 1] + */ + function tap(value, interceptor) { + interceptor(value); + return value; + } + + /** + * This method is like `_.tap` except that it returns the result of `interceptor`. + * The purpose of this method is to "pass thru" values replacing intermediate + * results in a method chain sequence. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Seq + * @param {*} value The value to provide to `interceptor`. + * @param {Function} interceptor The function to invoke. + * @returns {*} Returns the result of `interceptor`. + * @example + * + * _(' abc ') + * .chain() + * .trim() + * .thru(function(value) { + * return [value]; + * }) + * .value(); + * // => ['abc'] + */ + function thru(value, interceptor) { + return interceptor(value); + } + + /** + * This method is the wrapper version of `_.at`. + * + * @name at + * @memberOf _ + * @since 1.0.0 + * @category Seq + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; + * + * _(object).at(['a[0].b.c', 'a[1]']).value(); + * // => [3, 4] + */ + var wrapperAt = flatRest(function(paths) { + var length = paths.length, + start = length ? paths[0] : 0, + value = this.__wrapped__, + interceptor = function(object) { return baseAt(object, paths); }; + + if (length > 1 || this.__actions__.length || + !(value instanceof LazyWrapper) || !isIndex(start)) { + return this.thru(interceptor); + } + value = value.slice(start, +start + (length ? 1 : 0)); + value.__actions__.push({ + 'func': thru, + 'args': [interceptor], + 'thisArg': undefined + }); + return new LodashWrapper(value, this.__chain__).thru(function(array) { + if (length && !array.length) { + array.push(undefined); + } + return array; + }); + }); + + /** + * Creates a `lodash` wrapper instance with explicit method chain sequences enabled. + * + * @name chain + * @memberOf _ + * @since 0.1.0 + * @category Seq + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 } + * ]; + * + * // A sequence without explicit chaining. + * _(users).head(); + * // => { 'user': 'barney', 'age': 36 } + * + * // A sequence with explicit chaining. + * _(users) + * .chain() + * .head() + * .pick('user') + * .value(); + * // => { 'user': 'barney' } + */ + function wrapperChain() { + return chain(this); + } + + /** + * Executes the chain sequence and returns the wrapped result. + * + * @name commit + * @memberOf _ + * @since 3.2.0 + * @category Seq + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var array = [1, 2]; + * var wrapped = _(array).push(3); + * + * console.log(array); + * // => [1, 2] + * + * wrapped = wrapped.commit(); + * console.log(array); + * // => [1, 2, 3] + * + * wrapped.last(); + * // => 3 + * + * console.log(array); + * // => [1, 2, 3] + */ + function wrapperCommit() { + return new LodashWrapper(this.value(), this.__chain__); + } + + /** + * Gets the next value on a wrapped object following the + * [iterator protocol](https://mdn.io/iteration_protocols#iterator). + * + * @name next + * @memberOf _ + * @since 4.0.0 + * @category Seq + * @returns {Object} Returns the next iterator value. + * @example + * + * var wrapped = _([1, 2]); + * + * wrapped.next(); + * // => { 'done': false, 'value': 1 } + * + * wrapped.next(); + * // => { 'done': false, 'value': 2 } + * + * wrapped.next(); + * // => { 'done': true, 'value': undefined } + */ + function wrapperNext() { + if (this.__values__ === undefined) { + this.__values__ = toArray(this.value()); + } + var done = this.__index__ >= this.__values__.length, + value = done ? undefined : this.__values__[this.__index__++]; + + return { 'done': done, 'value': value }; + } + + /** + * Enables the wrapper to be iterable. + * + * @name Symbol.iterator + * @memberOf _ + * @since 4.0.0 + * @category Seq + * @returns {Object} Returns the wrapper object. + * @example + * + * var wrapped = _([1, 2]); + * + * wrapped[Symbol.iterator]() === wrapped; + * // => true + * + * Array.from(wrapped); + * // => [1, 2] + */ + function wrapperToIterator() { + return this; + } + + /** + * Creates a clone of the chain sequence planting `value` as the wrapped value. + * + * @name plant + * @memberOf _ + * @since 3.2.0 + * @category Seq + * @param {*} value The value to plant. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * function square(n) { + * return n * n; + * } + * + * var wrapped = _([1, 2]).map(square); + * var other = wrapped.plant([3, 4]); + * + * other.value(); + * // => [9, 16] + * + * wrapped.value(); + * // => [1, 4] + */ + function wrapperPlant(value) { + var result, + parent = this; + + while (parent instanceof baseLodash) { + var clone = wrapperClone(parent); + clone.__index__ = 0; + clone.__values__ = undefined; + if (result) { + previous.__wrapped__ = clone; + } else { + result = clone; + } + var previous = clone; + parent = parent.__wrapped__; + } + previous.__wrapped__ = value; + return result; + } + + /** + * This method is the wrapper version of `_.reverse`. + * + * **Note:** This method mutates the wrapped array. + * + * @name reverse + * @memberOf _ + * @since 0.1.0 + * @category Seq + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var array = [1, 2, 3]; + * + * _(array).reverse().value() + * // => [3, 2, 1] + * + * console.log(array); + * // => [3, 2, 1] + */ + function wrapperReverse() { + var value = this.__wrapped__; + if (value instanceof LazyWrapper) { + var wrapped = value; + if (this.__actions__.length) { + wrapped = new LazyWrapper(this); + } + wrapped = wrapped.reverse(); + wrapped.__actions__.push({ + 'func': thru, + 'args': [reverse], + 'thisArg': undefined + }); + return new LodashWrapper(wrapped, this.__chain__); + } + return this.thru(reverse); + } + + /** + * Executes the chain sequence to resolve the unwrapped value. + * + * @name value + * @memberOf _ + * @since 0.1.0 + * @alias toJSON, valueOf + * @category Seq + * @returns {*} Returns the resolved unwrapped value. + * @example + * + * _([1, 2, 3]).value(); + * // => [1, 2, 3] + */ + function wrapperValue() { + return baseWrapperValue(this.__wrapped__, this.__actions__); + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates an object composed of keys generated from the results of running + * each element of `collection` thru `iteratee`. The corresponding value of + * each key is the number of times the key was returned by `iteratee`. The + * iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.5.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee to transform keys. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * _.countBy([6.1, 4.2, 6.3], Math.floor); + * // => { '4': 1, '6': 2 } + * + * // The `_.property` iteratee shorthand. + * _.countBy(['one', 'two', 'three'], 'length'); + * // => { '3': 2, '5': 1 } + */ + var countBy = createAggregator(function(result, value, key) { + if (hasOwnProperty.call(result, key)) { + ++result[key]; + } else { + baseAssignValue(result, key, 1); + } + }); + + /** + * Checks if `predicate` returns truthy for **all** elements of `collection`. + * Iteration is stopped once `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index|key, collection). + * + * **Note:** This method returns `true` for + * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because + * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of + * elements of empty collections. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false`. + * @example + * + * _.every([true, 1, null, 'yes'], Boolean); + * // => false + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * // The `_.matches` iteratee shorthand. + * _.every(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // The `_.matchesProperty` iteratee shorthand. + * _.every(users, ['active', false]); + * // => true + * + * // The `_.property` iteratee shorthand. + * _.every(users, 'active'); + * // => false + */ + function every(collection, predicate, guard) { + var func = isArray(collection) ? arrayEvery : baseEvery; + if (guard && isIterateeCall(collection, predicate, guard)) { + predicate = undefined; + } + return func(collection, getIteratee(predicate, 3)); + } + + /** + * Iterates over elements of `collection`, returning an array of all elements + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * **Note:** Unlike `_.remove`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.reject + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.filter(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, { 'age': 36, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.filter(users, 'active'); + * // => objects for ['barney'] + * + * // Combining several predicates using `_.overEvery` or `_.overSome`. + * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]])); + * // => objects for ['fred', 'barney'] + */ + function filter(collection, predicate) { + var func = isArray(collection) ? arrayFilter : baseFilter; + return func(collection, getIteratee(predicate, 3)); + } + + /** + * Iterates over elements of `collection`, returning the first element + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false }, + * { 'user': 'pebbles', 'age': 1, 'active': true } + * ]; + * + * _.find(users, function(o) { return o.age < 40; }); + * // => object for 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.find(users, { 'age': 1, 'active': true }); + * // => object for 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.find(users, ['active', false]); + * // => object for 'fred' + * + * // The `_.property` iteratee shorthand. + * _.find(users, 'active'); + * // => object for 'barney' + */ + var find = createFind(findIndex); + + /** + * This method is like `_.find` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=collection.length-1] The index to search from. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * _.findLast([1, 2, 3, 4], function(n) { + * return n % 2 == 1; + * }); + * // => 3 + */ + var findLast = createFind(findLastIndex); + + /** + * Creates a flattened array of values by running each element in `collection` + * thru `iteratee` and flattening the mapped results. The iteratee is invoked + * with three arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new flattened array. + * @example + * + * function duplicate(n) { + * return [n, n]; + * } + * + * _.flatMap([1, 2], duplicate); + * // => [1, 1, 2, 2] + */ + function flatMap(collection, iteratee) { + return baseFlatten(map(collection, iteratee), 1); + } + + /** + * This method is like `_.flatMap` except that it recursively flattens the + * mapped results. + * + * @static + * @memberOf _ + * @since 4.7.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new flattened array. + * @example + * + * function duplicate(n) { + * return [[[n, n]]]; + * } + * + * _.flatMapDeep([1, 2], duplicate); + * // => [1, 1, 2, 2] + */ + function flatMapDeep(collection, iteratee) { + return baseFlatten(map(collection, iteratee), INFINITY); + } + + /** + * This method is like `_.flatMap` except that it recursively flattens the + * mapped results up to `depth` times. + * + * @static + * @memberOf _ + * @since 4.7.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {number} [depth=1] The maximum recursion depth. + * @returns {Array} Returns the new flattened array. + * @example + * + * function duplicate(n) { + * return [[[n, n]]]; + * } + * + * _.flatMapDepth([1, 2], duplicate, 2); + * // => [[1, 1], [2, 2]] + */ + function flatMapDepth(collection, iteratee, depth) { + depth = depth === undefined ? 1 : toInteger(depth); + return baseFlatten(map(collection, iteratee), depth); + } + + /** + * Iterates over elements of `collection` and invokes `iteratee` for each element. + * The iteratee is invoked with three arguments: (value, index|key, collection). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * **Note:** As with other "Collections" methods, objects with a "length" + * property are iterated like arrays. To avoid this behavior use `_.forIn` + * or `_.forOwn` for object iteration. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias each + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEachRight + * @example + * + * _.forEach([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `1` then `2`. + * + * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ + function forEach(collection, iteratee) { + var func = isArray(collection) ? arrayEach : baseEach; + return func(collection, getIteratee(iteratee, 3)); + } + + /** + * This method is like `_.forEach` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @alias eachRight + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEach + * @example + * + * _.forEachRight([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `2` then `1`. + */ + function forEachRight(collection, iteratee) { + var func = isArray(collection) ? arrayEachRight : baseEachRight; + return func(collection, getIteratee(iteratee, 3)); + } + + /** + * Creates an object composed of keys generated from the results of running + * each element of `collection` thru `iteratee`. The order of grouped values + * is determined by the order they occur in `collection`. The corresponding + * value of each key is an array of elements responsible for generating the + * key. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee to transform keys. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * _.groupBy([6.1, 4.2, 6.3], Math.floor); + * // => { '4': [4.2], '6': [6.1, 6.3] } + * + * // The `_.property` iteratee shorthand. + * _.groupBy(['one', 'two', 'three'], 'length'); + * // => { '3': ['one', 'two'], '5': ['three'] } + */ + var groupBy = createAggregator(function(result, value, key) { + if (hasOwnProperty.call(result, key)) { + result[key].push(value); + } else { + baseAssignValue(result, key, [value]); + } + }); + + /** + * Checks if `value` is in `collection`. If `collection` is a string, it's + * checked for a substring of `value`, otherwise + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * is used for equality comparisons. If `fromIndex` is negative, it's used as + * the offset from the end of `collection`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @param {*} value The value to search for. + * @param {number} [fromIndex=0] The index to search from. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. + * @returns {boolean} Returns `true` if `value` is found, else `false`. + * @example + * + * _.includes([1, 2, 3], 1); + * // => true + * + * _.includes([1, 2, 3], 1, 2); + * // => false + * + * _.includes({ 'a': 1, 'b': 2 }, 1); + * // => true + * + * _.includes('abcd', 'bc'); + * // => true + */ + function includes(collection, value, fromIndex, guard) { + collection = isArrayLike(collection) ? collection : values(collection); + fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0; + + var length = collection.length; + if (fromIndex < 0) { + fromIndex = nativeMax(length + fromIndex, 0); + } + return isString(collection) + ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1) + : (!!length && baseIndexOf(collection, value, fromIndex) > -1); + } + + /** + * Invokes the method at `path` of each element in `collection`, returning + * an array of the results of each invoked method. Any additional arguments + * are provided to each invoked method. If `path` is a function, it's invoked + * for, and `this` bound to, each element in `collection`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Array|Function|string} path The path of the method to invoke or + * the function invoked per iteration. + * @param {...*} [args] The arguments to invoke each method with. + * @returns {Array} Returns the array of results. + * @example + * + * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort'); + * // => [[1, 5, 7], [1, 2, 3]] + * + * _.invokeMap([123, 456], String.prototype.split, ''); + * // => [['1', '2', '3'], ['4', '5', '6']] + */ + var invokeMap = baseRest(function(collection, path, args) { + var index = -1, + isFunc = typeof path == 'function', + result = isArrayLike(collection) ? Array(collection.length) : []; + + baseEach(collection, function(value) { + result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args); + }); + return result; + }); + + /** + * Creates an object composed of keys generated from the results of running + * each element of `collection` thru `iteratee`. The corresponding value of + * each key is the last element responsible for generating the key. The + * iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee to transform keys. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * var array = [ + * { 'dir': 'left', 'code': 97 }, + * { 'dir': 'right', 'code': 100 } + * ]; + * + * _.keyBy(array, function(o) { + * return String.fromCharCode(o.code); + * }); + * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } } + * + * _.keyBy(array, 'dir'); + * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } } + */ + var keyBy = createAggregator(function(result, value, key) { + baseAssignValue(result, key, value); + }); + + /** + * Creates an array of values by running each element in `collection` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. + * + * The guarded methods are: + * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, + * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, + * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, + * `template`, `trim`, `trimEnd`, `trimStart`, and `words` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + * @example + * + * function square(n) { + * return n * n; + * } + * + * _.map([4, 8], square); + * // => [16, 64] + * + * _.map({ 'a': 4, 'b': 8 }, square); + * // => [16, 64] (iteration order is not guaranteed) + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * // The `_.property` iteratee shorthand. + * _.map(users, 'user'); + * // => ['barney', 'fred'] + */ + function map(collection, iteratee) { + var func = isArray(collection) ? arrayMap : baseMap; + return func(collection, getIteratee(iteratee, 3)); + } + + /** + * This method is like `_.sortBy` except that it allows specifying the sort + * orders of the iteratees to sort by. If `orders` is unspecified, all values + * are sorted in ascending order. Otherwise, specify an order of "desc" for + * descending or "asc" for ascending sort order of corresponding values. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]] + * The iteratees to sort by. + * @param {string[]} [orders] The sort orders of `iteratees`. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 34 }, + * { 'user': 'fred', 'age': 40 }, + * { 'user': 'barney', 'age': 36 } + * ]; + * + * // Sort by `user` in ascending order and by `age` in descending order. + * _.orderBy(users, ['user', 'age'], ['asc', 'desc']); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]] + */ + function orderBy(collection, iteratees, orders, guard) { + if (collection == null) { + return []; + } + if (!isArray(iteratees)) { + iteratees = iteratees == null ? [] : [iteratees]; + } + orders = guard ? undefined : orders; + if (!isArray(orders)) { + orders = orders == null ? [] : [orders]; + } + return baseOrderBy(collection, iteratees, orders); + } + + /** + * Creates an array of elements split into two groups, the first of which + * contains elements `predicate` returns truthy for, the second of which + * contains elements `predicate` returns falsey for. The predicate is + * invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the array of grouped elements. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false }, + * { 'user': 'fred', 'age': 40, 'active': true }, + * { 'user': 'pebbles', 'age': 1, 'active': false } + * ]; + * + * _.partition(users, function(o) { return o.active; }); + * // => objects for [['fred'], ['barney', 'pebbles']] + * + * // The `_.matches` iteratee shorthand. + * _.partition(users, { 'age': 1, 'active': false }); + * // => objects for [['pebbles'], ['barney', 'fred']] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.partition(users, ['active', false]); + * // => objects for [['barney', 'pebbles'], ['fred']] + * + * // The `_.property` iteratee shorthand. + * _.partition(users, 'active'); + * // => objects for [['fred'], ['barney', 'pebbles']] + */ + var partition = createAggregator(function(result, value, key) { + result[key ? 0 : 1].push(value); + }, function() { return [[], []]; }); + + /** + * Reduces `collection` to a value which is the accumulated result of running + * each element in `collection` thru `iteratee`, where each successive + * invocation is supplied the return value of the previous. If `accumulator` + * is not given, the first element of `collection` is used as the initial + * value. The iteratee is invoked with four arguments: + * (accumulator, value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.reduce`, `_.reduceRight`, and `_.transform`. + * + * The guarded methods are: + * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, + * and `sortBy` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @returns {*} Returns the accumulated value. + * @see _.reduceRight + * @example + * + * _.reduce([1, 2], function(sum, n) { + * return sum + n; + * }, 0); + * // => 3 + * + * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + * (result[value] || (result[value] = [])).push(key); + * return result; + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) + */ + function reduce(collection, iteratee, accumulator) { + var func = isArray(collection) ? arrayReduce : baseReduce, + initAccum = arguments.length < 3; + + return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach); + } + + /** + * This method is like `_.reduce` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @returns {*} Returns the accumulated value. + * @see _.reduce + * @example + * + * var array = [[0, 1], [2, 3], [4, 5]]; + * + * _.reduceRight(array, function(flattened, other) { + * return flattened.concat(other); + * }, []); + * // => [4, 5, 2, 3, 0, 1] + */ + function reduceRight(collection, iteratee, accumulator) { + var func = isArray(collection) ? arrayReduceRight : baseReduce, + initAccum = arguments.length < 3; + + return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight); + } + + /** + * The opposite of `_.filter`; this method returns the elements of `collection` + * that `predicate` does **not** return truthy for. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.filter + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false }, + * { 'user': 'fred', 'age': 40, 'active': true } + * ]; + * + * _.reject(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.reject(users, { 'age': 40, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.reject(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.reject(users, 'active'); + * // => objects for ['barney'] + */ + function reject(collection, predicate) { + var func = isArray(collection) ? arrayFilter : baseFilter; + return func(collection, negate(getIteratee(predicate, 3))); + } + + /** + * Gets a random element from `collection`. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Collection + * @param {Array|Object} collection The collection to sample. + * @returns {*} Returns the random element. + * @example + * + * _.sample([1, 2, 3, 4]); + * // => 2 + */ + function sample(collection) { + var func = isArray(collection) ? arraySample : baseSample; + return func(collection); + } + + /** + * Gets `n` random elements at unique keys from `collection` up to the + * size of `collection`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to sample. + * @param {number} [n=1] The number of elements to sample. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the random elements. + * @example + * + * _.sampleSize([1, 2, 3], 2); + * // => [3, 1] + * + * _.sampleSize([1, 2, 3], 4); + * // => [2, 3, 1] + */ + function sampleSize(collection, n, guard) { + if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) { + n = 1; + } else { + n = toInteger(n); + } + var func = isArray(collection) ? arraySampleSize : baseSampleSize; + return func(collection, n); + } + + /** + * Creates an array of shuffled values, using a version of the + * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to shuffle. + * @returns {Array} Returns the new shuffled array. + * @example + * + * _.shuffle([1, 2, 3, 4]); + * // => [4, 1, 3, 2] + */ + function shuffle(collection) { + var func = isArray(collection) ? arrayShuffle : baseShuffle; + return func(collection); + } + + /** + * Gets the size of `collection` by returning its length for array-like + * values or the number of own enumerable string keyed properties for objects. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @returns {number} Returns the collection size. + * @example + * + * _.size([1, 2, 3]); + * // => 3 + * + * _.size({ 'a': 1, 'b': 2 }); + * // => 2 + * + * _.size('pebbles'); + * // => 7 + */ + function size(collection) { + if (collection == null) { + return 0; + } + if (isArrayLike(collection)) { + return isString(collection) ? stringSize(collection) : collection.length; + } + var tag = getTag(collection); + if (tag == mapTag || tag == setTag) { + return collection.size; + } + return baseKeys(collection).length; + } + + /** + * Checks if `predicate` returns truthy for **any** element of `collection`. + * Iteration is stopped once `predicate` returns truthy. The predicate is + * invoked with three arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + * @example + * + * _.some([null, 0, 'yes', false], Boolean); + * // => true + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false } + * ]; + * + * // The `_.matches` iteratee shorthand. + * _.some(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // The `_.matchesProperty` iteratee shorthand. + * _.some(users, ['active', false]); + * // => true + * + * // The `_.property` iteratee shorthand. + * _.some(users, 'active'); + * // => true + */ + function some(collection, predicate, guard) { + var func = isArray(collection) ? arraySome : baseSome; + if (guard && isIterateeCall(collection, predicate, guard)) { + predicate = undefined; + } + return func(collection, getIteratee(predicate, 3)); + } + + /** + * Creates an array of elements, sorted in ascending order by the results of + * running each element in a collection thru each iteratee. This method + * performs a stable sort, that is, it preserves the original sort order of + * equal elements. The iteratees are invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {...(Function|Function[])} [iteratees=[_.identity]] + * The iteratees to sort by. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 30 }, + * { 'user': 'barney', 'age': 34 } + * ]; + * + * _.sortBy(users, [function(o) { return o.user; }]); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]] + * + * _.sortBy(users, ['user', 'age']); + * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]] + */ + var sortBy = baseRest(function(collection, iteratees) { + if (collection == null) { + return []; + } + var length = iteratees.length; + if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) { + iteratees = []; + } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) { + iteratees = [iteratees[0]]; + } + return baseOrderBy(collection, baseFlatten(iteratees, 1), []); + }); + + /*------------------------------------------------------------------------*/ + + /** + * Gets the timestamp of the number of milliseconds that have elapsed since + * the Unix epoch (1 January 1970 00:00:00 UTC). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Date + * @returns {number} Returns the timestamp. + * @example + * + * _.defer(function(stamp) { + * console.log(_.now() - stamp); + * }, _.now()); + * // => Logs the number of milliseconds it took for the deferred invocation. + */ + var now = ctxNow || function() { + return root.Date.now(); + }; + + /*------------------------------------------------------------------------*/ + + /** + * The opposite of `_.before`; this method creates a function that invokes + * `func` once it's called `n` or more times. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {number} n The number of calls before `func` is invoked. + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * var saves = ['profile', 'settings']; + * + * var done = _.after(saves.length, function() { + * console.log('done saving!'); + * }); + * + * _.forEach(saves, function(type) { + * asyncSave({ 'type': type, 'complete': done }); + * }); + * // => Logs 'done saving!' after the two async saves have completed. + */ + function after(n, func) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + n = toInteger(n); + return function() { + if (--n < 1) { + return func.apply(this, arguments); + } + }; + } + + /** + * Creates a function that invokes `func`, with up to `n` arguments, + * ignoring any additional arguments. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {Function} func The function to cap arguments for. + * @param {number} [n=func.length] The arity cap. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Function} Returns the new capped function. + * @example + * + * _.map(['6', '8', '10'], _.ary(parseInt, 1)); + * // => [6, 8, 10] + */ + function ary(func, n, guard) { + n = guard ? undefined : n; + n = (func && n == null) ? func.length : n; + return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n); + } + + /** + * Creates a function that invokes `func`, with the `this` binding and arguments + * of the created function, while it's called less than `n` times. Subsequent + * calls to the created function return the result of the last `func` invocation. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {number} n The number of calls at which `func` is no longer invoked. + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * jQuery(element).on('click', _.before(5, addContactToList)); + * // => Allows adding up to 4 contacts to the list. + */ + function before(n, func) { + var result; + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + n = toInteger(n); + return function() { + if (--n > 0) { + result = func.apply(this, arguments); + } + if (n <= 1) { + func = undefined; + } + return result; + }; + } + + /** + * Creates a function that invokes `func` with the `this` binding of `thisArg` + * and `partials` prepended to the arguments it receives. + * + * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds, + * may be used as a placeholder for partially applied arguments. + * + * **Note:** Unlike native `Function#bind`, this method doesn't set the "length" + * property of bound functions. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to bind. + * @param {*} thisArg The `this` binding of `func`. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new bound function. + * @example + * + * function greet(greeting, punctuation) { + * return greeting + ' ' + this.user + punctuation; + * } + * + * var object = { 'user': 'fred' }; + * + * var bound = _.bind(greet, object, 'hi'); + * bound('!'); + * // => 'hi fred!' + * + * // Bound with placeholders. + * var bound = _.bind(greet, object, _, '!'); + * bound('hi'); + * // => 'hi fred!' + */ + var bind = baseRest(function(func, thisArg, partials) { + var bitmask = WRAP_BIND_FLAG; + if (partials.length) { + var holders = replaceHolders(partials, getHolder(bind)); + bitmask |= WRAP_PARTIAL_FLAG; + } + return createWrap(func, bitmask, thisArg, partials, holders); + }); + + /** + * Creates a function that invokes the method at `object[key]` with `partials` + * prepended to the arguments it receives. + * + * This method differs from `_.bind` by allowing bound functions to reference + * methods that may be redefined or don't yet exist. See + * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern) + * for more details. + * + * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for partially applied arguments. + * + * @static + * @memberOf _ + * @since 0.10.0 + * @category Function + * @param {Object} object The object to invoke the method on. + * @param {string} key The key of the method. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new bound function. + * @example + * + * var object = { + * 'user': 'fred', + * 'greet': function(greeting, punctuation) { + * return greeting + ' ' + this.user + punctuation; + * } + * }; + * + * var bound = _.bindKey(object, 'greet', 'hi'); + * bound('!'); + * // => 'hi fred!' + * + * object.greet = function(greeting, punctuation) { + * return greeting + 'ya ' + this.user + punctuation; + * }; + * + * bound('!'); + * // => 'hiya fred!' + * + * // Bound with placeholders. + * var bound = _.bindKey(object, 'greet', _, '!'); + * bound('hi'); + * // => 'hiya fred!' + */ + var bindKey = baseRest(function(object, key, partials) { + var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG; + if (partials.length) { + var holders = replaceHolders(partials, getHolder(bindKey)); + bitmask |= WRAP_PARTIAL_FLAG; + } + return createWrap(key, bitmask, object, partials, holders); + }); + + /** + * Creates a function that accepts arguments of `func` and either invokes + * `func` returning its result, if at least `arity` number of arguments have + * been provided, or returns a function that accepts the remaining `func` + * arguments, and so on. The arity of `func` may be specified if `func.length` + * is not sufficient. + * + * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds, + * may be used as a placeholder for provided arguments. + * + * **Note:** This method doesn't set the "length" property of curried functions. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Function + * @param {Function} func The function to curry. + * @param {number} [arity=func.length] The arity of `func`. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Function} Returns the new curried function. + * @example + * + * var abc = function(a, b, c) { + * return [a, b, c]; + * }; + * + * var curried = _.curry(abc); + * + * curried(1)(2)(3); + * // => [1, 2, 3] + * + * curried(1, 2)(3); + * // => [1, 2, 3] + * + * curried(1, 2, 3); + * // => [1, 2, 3] + * + * // Curried with placeholders. + * curried(1)(_, 3)(2); + * // => [1, 2, 3] + */ + function curry(func, arity, guard) { + arity = guard ? undefined : arity; + var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity); + result.placeholder = curry.placeholder; + return result; + } + + /** + * This method is like `_.curry` except that arguments are applied to `func` + * in the manner of `_.partialRight` instead of `_.partial`. + * + * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for provided arguments. + * + * **Note:** This method doesn't set the "length" property of curried functions. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {Function} func The function to curry. + * @param {number} [arity=func.length] The arity of `func`. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Function} Returns the new curried function. + * @example + * + * var abc = function(a, b, c) { + * return [a, b, c]; + * }; + * + * var curried = _.curryRight(abc); + * + * curried(3)(2)(1); + * // => [1, 2, 3] + * + * curried(2, 3)(1); + * // => [1, 2, 3] + * + * curried(1, 2, 3); + * // => [1, 2, 3] + * + * // Curried with placeholders. + * curried(3)(1, _)(2); + * // => [1, 2, 3] + */ + function curryRight(func, arity, guard) { + arity = guard ? undefined : arity; + var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity); + result.placeholder = curryRight.placeholder; + return result; + } + + /** + * Creates a debounced function that delays invoking `func` until after `wait` + * milliseconds have elapsed since the last time the debounced function was + * invoked. The debounced function comes with a `cancel` method to cancel + * delayed `func` invocations and a `flush` method to immediately invoke them. + * Provide `options` to indicate whether `func` should be invoked on the + * leading and/or trailing edge of the `wait` timeout. The `func` is invoked + * with the last arguments provided to the debounced function. Subsequent + * calls to the debounced function return the result of the last `func` + * invocation. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is + * invoked on the trailing edge of the timeout only if the debounced function + * is invoked more than once during the `wait` timeout. + * + * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred + * until to the next tick, similar to `setTimeout` with a timeout of `0`. + * + * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) + * for details over the differences between `_.debounce` and `_.throttle`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to debounce. + * @param {number} [wait=0] The number of milliseconds to delay. + * @param {Object} [options={}] The options object. + * @param {boolean} [options.leading=false] + * Specify invoking on the leading edge of the timeout. + * @param {number} [options.maxWait] + * The maximum time `func` is allowed to be delayed before it's invoked. + * @param {boolean} [options.trailing=true] + * Specify invoking on the trailing edge of the timeout. + * @returns {Function} Returns the new debounced function. + * @example + * + * // Avoid costly calculations while the window size is in flux. + * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); + * + * // Invoke `sendMail` when clicked, debouncing subsequent calls. + * jQuery(element).on('click', _.debounce(sendMail, 300, { + * 'leading': true, + * 'trailing': false + * })); + * + * // Ensure `batchLog` is invoked once after 1 second of debounced calls. + * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 }); + * var source = new EventSource('/stream'); + * jQuery(source).on('message', debounced); + * + * // Cancel the trailing debounced invocation. + * jQuery(window).on('popstate', debounced.cancel); + */ + function debounce(func, wait, options) { + var lastArgs, + lastThis, + maxWait, + result, + timerId, + lastCallTime, + lastInvokeTime = 0, + leading = false, + maxing = false, + trailing = true; + + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + wait = toNumber(wait) || 0; + if (isObject(options)) { + leading = !!options.leading; + maxing = 'maxWait' in options; + maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait; + trailing = 'trailing' in options ? !!options.trailing : trailing; + } + + function invokeFunc(time) { + var args = lastArgs, + thisArg = lastThis; + + lastArgs = lastThis = undefined; + lastInvokeTime = time; + result = func.apply(thisArg, args); + return result; + } + + function leadingEdge(time) { + // Reset any `maxWait` timer. + lastInvokeTime = time; + // Start the timer for the trailing edge. + timerId = setTimeout(timerExpired, wait); + // Invoke the leading edge. + return leading ? invokeFunc(time) : result; + } + + function remainingWait(time) { + var timeSinceLastCall = time - lastCallTime, + timeSinceLastInvoke = time - lastInvokeTime, + timeWaiting = wait - timeSinceLastCall; + + return maxing + ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) + : timeWaiting; + } + + function shouldInvoke(time) { + var timeSinceLastCall = time - lastCallTime, + timeSinceLastInvoke = time - lastInvokeTime; + + // Either this is the first call, activity has stopped and we're at the + // trailing edge, the system time has gone backwards and we're treating + // it as the trailing edge, or we've hit the `maxWait` limit. + return (lastCallTime === undefined || (timeSinceLastCall >= wait) || + (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait)); + } + + function timerExpired() { + var time = now(); + if (shouldInvoke(time)) { + return trailingEdge(time); + } + // Restart the timer. + timerId = setTimeout(timerExpired, remainingWait(time)); + } + + function trailingEdge(time) { + timerId = undefined; + + // Only invoke if we have `lastArgs` which means `func` has been + // debounced at least once. + if (trailing && lastArgs) { + return invokeFunc(time); + } + lastArgs = lastThis = undefined; + return result; + } + + function cancel() { + if (timerId !== undefined) { + clearTimeout(timerId); + } + lastInvokeTime = 0; + lastArgs = lastCallTime = lastThis = timerId = undefined; + } + + function flush() { + return timerId === undefined ? result : trailingEdge(now()); + } + + function debounced() { + var time = now(), + isInvoking = shouldInvoke(time); + + lastArgs = arguments; + lastThis = this; + lastCallTime = time; + + if (isInvoking) { + if (timerId === undefined) { + return leadingEdge(lastCallTime); + } + if (maxing) { + // Handle invocations in a tight loop. + clearTimeout(timerId); + timerId = setTimeout(timerExpired, wait); + return invokeFunc(lastCallTime); + } + } + if (timerId === undefined) { + timerId = setTimeout(timerExpired, wait); + } + return result; + } + debounced.cancel = cancel; + debounced.flush = flush; + return debounced; + } + + /** + * Defers invoking the `func` until the current call stack has cleared. Any + * additional arguments are provided to `func` when it's invoked. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to defer. + * @param {...*} [args] The arguments to invoke `func` with. + * @returns {number} Returns the timer id. + * @example + * + * _.defer(function(text) { + * console.log(text); + * }, 'deferred'); + * // => Logs 'deferred' after one millisecond. + */ + var defer = baseRest(function(func, args) { + return baseDelay(func, 1, args); + }); + + /** + * Invokes `func` after `wait` milliseconds. Any additional arguments are + * provided to `func` when it's invoked. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @param {...*} [args] The arguments to invoke `func` with. + * @returns {number} Returns the timer id. + * @example + * + * _.delay(function(text) { + * console.log(text); + * }, 1000, 'later'); + * // => Logs 'later' after one second. + */ + var delay = baseRest(function(func, wait, args) { + return baseDelay(func, toNumber(wait) || 0, args); + }); + + /** + * Creates a function that invokes `func` with arguments reversed. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Function + * @param {Function} func The function to flip arguments for. + * @returns {Function} Returns the new flipped function. + * @example + * + * var flipped = _.flip(function() { + * return _.toArray(arguments); + * }); + * + * flipped('a', 'b', 'c', 'd'); + * // => ['d', 'c', 'b', 'a'] + */ + function flip(func) { + return createWrap(func, WRAP_FLIP_FLAG); + } + + /** + * Creates a function that memoizes the result of `func`. If `resolver` is + * provided, it determines the cache key for storing the result based on the + * arguments provided to the memoized function. By default, the first argument + * provided to the memoized function is used as the map cache key. The `func` + * is invoked with the `this` binding of the memoized function. + * + * **Note:** The cache is exposed as the `cache` property on the memoized + * function. Its creation may be customized by replacing the `_.memoize.Cache` + * constructor with one whose instances implement the + * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) + * method interface of `clear`, `delete`, `get`, `has`, and `set`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to have its output memoized. + * @param {Function} [resolver] The function to resolve the cache key. + * @returns {Function} Returns the new memoized function. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * var other = { 'c': 3, 'd': 4 }; + * + * var values = _.memoize(_.values); + * values(object); + * // => [1, 2] + * + * values(other); + * // => [3, 4] + * + * object.a = 2; + * values(object); + * // => [1, 2] + * + * // Modify the result cache. + * values.cache.set(object, ['a', 'b']); + * values(object); + * // => ['a', 'b'] + * + * // Replace `_.memoize.Cache`. + * _.memoize.Cache = WeakMap; + */ + function memoize(func, resolver) { + if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) { + throw new TypeError(FUNC_ERROR_TEXT); + } + var memoized = function() { + var args = arguments, + key = resolver ? resolver.apply(this, args) : args[0], + cache = memoized.cache; + + if (cache.has(key)) { + return cache.get(key); + } + var result = func.apply(this, args); + memoized.cache = cache.set(key, result) || cache; + return result; + }; + memoized.cache = new (memoize.Cache || MapCache); + return memoized; + } + + // Expose `MapCache`. + memoize.Cache = MapCache; + + /** + * Creates a function that negates the result of the predicate `func`. The + * `func` predicate is invoked with the `this` binding and arguments of the + * created function. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {Function} predicate The predicate to negate. + * @returns {Function} Returns the new negated function. + * @example + * + * function isEven(n) { + * return n % 2 == 0; + * } + * + * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven)); + * // => [1, 3, 5] + */ + function negate(predicate) { + if (typeof predicate != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return function() { + var args = arguments; + switch (args.length) { + case 0: return !predicate.call(this); + case 1: return !predicate.call(this, args[0]); + case 2: return !predicate.call(this, args[0], args[1]); + case 3: return !predicate.call(this, args[0], args[1], args[2]); + } + return !predicate.apply(this, args); + }; + } + + /** + * Creates a function that is restricted to invoking `func` once. Repeat calls + * to the function return the value of the first invocation. The `func` is + * invoked with the `this` binding and arguments of the created function. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * var initialize = _.once(createApplication); + * initialize(); + * initialize(); + * // => `createApplication` is invoked once + */ + function once(func) { + return before(2, func); + } + + /** + * Creates a function that invokes `func` with its arguments transformed. + * + * @static + * @since 4.0.0 + * @memberOf _ + * @category Function + * @param {Function} func The function to wrap. + * @param {...(Function|Function[])} [transforms=[_.identity]] + * The argument transforms. + * @returns {Function} Returns the new function. + * @example + * + * function doubled(n) { + * return n * 2; + * } + * + * function square(n) { + * return n * n; + * } + * + * var func = _.overArgs(function(x, y) { + * return [x, y]; + * }, [square, doubled]); + * + * func(9, 3); + * // => [81, 6] + * + * func(10, 5); + * // => [100, 10] + */ + var overArgs = castRest(function(func, transforms) { + transforms = (transforms.length == 1 && isArray(transforms[0])) + ? arrayMap(transforms[0], baseUnary(getIteratee())) + : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee())); + + var funcsLength = transforms.length; + return baseRest(function(args) { + var index = -1, + length = nativeMin(args.length, funcsLength); + + while (++index < length) { + args[index] = transforms[index].call(this, args[index]); + } + return apply(func, this, args); + }); + }); + + /** + * Creates a function that invokes `func` with `partials` prepended to the + * arguments it receives. This method is like `_.bind` except it does **not** + * alter the `this` binding. + * + * The `_.partial.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for partially applied arguments. + * + * **Note:** This method doesn't set the "length" property of partially + * applied functions. + * + * @static + * @memberOf _ + * @since 0.2.0 + * @category Function + * @param {Function} func The function to partially apply arguments to. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new partially applied function. + * @example + * + * function greet(greeting, name) { + * return greeting + ' ' + name; + * } + * + * var sayHelloTo = _.partial(greet, 'hello'); + * sayHelloTo('fred'); + * // => 'hello fred' + * + * // Partially applied with placeholders. + * var greetFred = _.partial(greet, _, 'fred'); + * greetFred('hi'); + * // => 'hi fred' + */ + var partial = baseRest(function(func, partials) { + var holders = replaceHolders(partials, getHolder(partial)); + return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders); + }); + + /** + * This method is like `_.partial` except that partially applied arguments + * are appended to the arguments it receives. + * + * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for partially applied arguments. + * + * **Note:** This method doesn't set the "length" property of partially + * applied functions. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Function + * @param {Function} func The function to partially apply arguments to. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new partially applied function. + * @example + * + * function greet(greeting, name) { + * return greeting + ' ' + name; + * } + * + * var greetFred = _.partialRight(greet, 'fred'); + * greetFred('hi'); + * // => 'hi fred' + * + * // Partially applied with placeholders. + * var sayHelloTo = _.partialRight(greet, 'hello', _); + * sayHelloTo('fred'); + * // => 'hello fred' + */ + var partialRight = baseRest(function(func, partials) { + var holders = replaceHolders(partials, getHolder(partialRight)); + return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders); + }); + + /** + * Creates a function that invokes `func` with arguments arranged according + * to the specified `indexes` where the argument value at the first index is + * provided as the first argument, the argument value at the second index is + * provided as the second argument, and so on. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {Function} func The function to rearrange arguments for. + * @param {...(number|number[])} indexes The arranged argument indexes. + * @returns {Function} Returns the new function. + * @example + * + * var rearged = _.rearg(function(a, b, c) { + * return [a, b, c]; + * }, [2, 0, 1]); + * + * rearged('b', 'c', 'a') + * // => ['a', 'b', 'c'] + */ + var rearg = flatRest(function(func, indexes) { + return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes); + }); + + /** + * Creates a function that invokes `func` with the `this` binding of the + * created function and arguments from `start` and beyond provided as + * an array. + * + * **Note:** This method is based on the + * [rest parameter](https://mdn.io/rest_parameters). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Function + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + * @example + * + * var say = _.rest(function(what, names) { + * return what + ' ' + _.initial(names).join(', ') + + * (_.size(names) > 1 ? ', & ' : '') + _.last(names); + * }); + * + * say('hello', 'fred', 'barney', 'pebbles'); + * // => 'hello fred, barney, & pebbles' + */ + function rest(func, start) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + start = start === undefined ? start : toInteger(start); + return baseRest(func, start); + } + + /** + * Creates a function that invokes `func` with the `this` binding of the + * create function and an array of arguments much like + * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply). + * + * **Note:** This method is based on the + * [spread operator](https://mdn.io/spread_operator). + * + * @static + * @memberOf _ + * @since 3.2.0 + * @category Function + * @param {Function} func The function to spread arguments over. + * @param {number} [start=0] The start position of the spread. + * @returns {Function} Returns the new function. + * @example + * + * var say = _.spread(function(who, what) { + * return who + ' says ' + what; + * }); + * + * say(['fred', 'hello']); + * // => 'fred says hello' + * + * var numbers = Promise.all([ + * Promise.resolve(40), + * Promise.resolve(36) + * ]); + * + * numbers.then(_.spread(function(x, y) { + * return x + y; + * })); + * // => a Promise of 76 + */ + function spread(func, start) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + start = start == null ? 0 : nativeMax(toInteger(start), 0); + return baseRest(function(args) { + var array = args[start], + otherArgs = castSlice(args, 0, start); + + if (array) { + arrayPush(otherArgs, array); + } + return apply(func, this, otherArgs); + }); + } + + /** + * Creates a throttled function that only invokes `func` at most once per + * every `wait` milliseconds. The throttled function comes with a `cancel` + * method to cancel delayed `func` invocations and a `flush` method to + * immediately invoke them. Provide `options` to indicate whether `func` + * should be invoked on the leading and/or trailing edge of the `wait` + * timeout. The `func` is invoked with the last arguments provided to the + * throttled function. Subsequent calls to the throttled function return the + * result of the last `func` invocation. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is + * invoked on the trailing edge of the timeout only if the throttled function + * is invoked more than once during the `wait` timeout. + * + * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred + * until to the next tick, similar to `setTimeout` with a timeout of `0`. + * + * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) + * for details over the differences between `_.throttle` and `_.debounce`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to throttle. + * @param {number} [wait=0] The number of milliseconds to throttle invocations to. + * @param {Object} [options={}] The options object. + * @param {boolean} [options.leading=true] + * Specify invoking on the leading edge of the timeout. + * @param {boolean} [options.trailing=true] + * Specify invoking on the trailing edge of the timeout. + * @returns {Function} Returns the new throttled function. + * @example + * + * // Avoid excessively updating the position while scrolling. + * jQuery(window).on('scroll', _.throttle(updatePosition, 100)); + * + * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes. + * var throttled = _.throttle(renewToken, 300000, { 'trailing': false }); + * jQuery(element).on('click', throttled); + * + * // Cancel the trailing throttled invocation. + * jQuery(window).on('popstate', throttled.cancel); + */ + function throttle(func, wait, options) { + var leading = true, + trailing = true; + + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + if (isObject(options)) { + leading = 'leading' in options ? !!options.leading : leading; + trailing = 'trailing' in options ? !!options.trailing : trailing; + } + return debounce(func, wait, { + 'leading': leading, + 'maxWait': wait, + 'trailing': trailing + }); + } + + /** + * Creates a function that accepts up to one argument, ignoring any + * additional arguments. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Function + * @param {Function} func The function to cap arguments for. + * @returns {Function} Returns the new capped function. + * @example + * + * _.map(['6', '8', '10'], _.unary(parseInt)); + * // => [6, 8, 10] + */ + function unary(func) { + return ary(func, 1); + } + + /** + * Creates a function that provides `value` to `wrapper` as its first + * argument. Any additional arguments provided to the function are appended + * to those provided to the `wrapper`. The wrapper is invoked with the `this` + * binding of the created function. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {*} value The value to wrap. + * @param {Function} [wrapper=identity] The wrapper function. + * @returns {Function} Returns the new function. + * @example + * + * var p = _.wrap(_.escape, function(func, text) { + * return '

' + func(text) + '

'; + * }); + * + * p('fred, barney, & pebbles'); + * // => '

fred, barney, & pebbles

' + */ + function wrap(value, wrapper) { + return partial(castFunction(wrapper), value); + } + + /*------------------------------------------------------------------------*/ + + /** + * Casts `value` as an array if it's not one. + * + * @static + * @memberOf _ + * @since 4.4.0 + * @category Lang + * @param {*} value The value to inspect. + * @returns {Array} Returns the cast array. + * @example + * + * _.castArray(1); + * // => [1] + * + * _.castArray({ 'a': 1 }); + * // => [{ 'a': 1 }] + * + * _.castArray('abc'); + * // => ['abc'] + * + * _.castArray(null); + * // => [null] + * + * _.castArray(undefined); + * // => [undefined] + * + * _.castArray(); + * // => [] + * + * var array = [1, 2, 3]; + * console.log(_.castArray(array) === array); + * // => true + */ + function castArray() { + if (!arguments.length) { + return []; + } + var value = arguments[0]; + return isArray(value) ? value : [value]; + } + + /** + * Creates a shallow clone of `value`. + * + * **Note:** This method is loosely based on the + * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) + * and supports cloning arrays, array buffers, booleans, date objects, maps, + * numbers, `Object` objects, regexes, sets, strings, symbols, and typed + * arrays. The own enumerable properties of `arguments` objects are cloned + * as plain objects. An empty object is returned for uncloneable values such + * as error objects, functions, DOM nodes, and WeakMaps. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to clone. + * @returns {*} Returns the cloned value. + * @see _.cloneDeep + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var shallow = _.clone(objects); + * console.log(shallow[0] === objects[0]); + * // => true + */ + function clone(value) { + return baseClone(value, CLONE_SYMBOLS_FLAG); + } + + /** + * This method is like `_.clone` except that it accepts `customizer` which + * is invoked to produce the cloned value. If `customizer` returns `undefined`, + * cloning is handled by the method instead. The `customizer` is invoked with + * up to four arguments; (value [, index|key, object, stack]). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to clone. + * @param {Function} [customizer] The function to customize cloning. + * @returns {*} Returns the cloned value. + * @see _.cloneDeepWith + * @example + * + * function customizer(value) { + * if (_.isElement(value)) { + * return value.cloneNode(false); + * } + * } + * + * var el = _.cloneWith(document.body, customizer); + * + * console.log(el === document.body); + * // => false + * console.log(el.nodeName); + * // => 'BODY' + * console.log(el.childNodes.length); + * // => 0 + */ + function cloneWith(value, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + return baseClone(value, CLONE_SYMBOLS_FLAG, customizer); + } + + /** + * This method is like `_.clone` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Lang + * @param {*} value The value to recursively clone. + * @returns {*} Returns the deep cloned value. + * @see _.clone + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var deep = _.cloneDeep(objects); + * console.log(deep[0] === objects[0]); + * // => false + */ + function cloneDeep(value) { + return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); + } + + /** + * This method is like `_.cloneWith` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to recursively clone. + * @param {Function} [customizer] The function to customize cloning. + * @returns {*} Returns the deep cloned value. + * @see _.cloneWith + * @example + * + * function customizer(value) { + * if (_.isElement(value)) { + * return value.cloneNode(true); + * } + * } + * + * var el = _.cloneDeepWith(document.body, customizer); + * + * console.log(el === document.body); + * // => false + * console.log(el.nodeName); + * // => 'BODY' + * console.log(el.childNodes.length); + * // => 20 + */ + function cloneDeepWith(value, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer); + } + + /** + * Checks if `object` conforms to `source` by invoking the predicate + * properties of `source` with the corresponding property values of `object`. + * + * **Note:** This method is equivalent to `_.conforms` when `source` is + * partially applied. + * + * @static + * @memberOf _ + * @since 4.14.0 + * @category Lang + * @param {Object} object The object to inspect. + * @param {Object} source The object of property predicates to conform to. + * @returns {boolean} Returns `true` if `object` conforms, else `false`. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * + * _.conformsTo(object, { 'b': function(n) { return n > 1; } }); + * // => true + * + * _.conformsTo(object, { 'b': function(n) { return n > 2; } }); + * // => false + */ + function conformsTo(object, source) { + return source == null || baseConformsTo(object, source, keys(source)); + } + + /** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ + function eq(value, other) { + return value === other || (value !== value && other !== other); + } + + /** + * Checks if `value` is greater than `other`. + * + * @static + * @memberOf _ + * @since 3.9.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, + * else `false`. + * @see _.lt + * @example + * + * _.gt(3, 1); + * // => true + * + * _.gt(3, 3); + * // => false + * + * _.gt(1, 3); + * // => false + */ + var gt = createRelationalOperation(baseGt); + + /** + * Checks if `value` is greater than or equal to `other`. + * + * @static + * @memberOf _ + * @since 3.9.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than or equal to + * `other`, else `false`. + * @see _.lte + * @example + * + * _.gte(3, 1); + * // => true + * + * _.gte(3, 3); + * // => true + * + * _.gte(1, 3); + * // => false + */ + var gte = createRelationalOperation(function(value, other) { + return value >= other; + }); + + /** + * Checks if `value` is likely an `arguments` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + * else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ + var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { + return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && + !propertyIsEnumerable.call(value, 'callee'); + }; + + /** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ + var isArray = Array.isArray; + + /** + * Checks if `value` is classified as an `ArrayBuffer` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. + * @example + * + * _.isArrayBuffer(new ArrayBuffer(2)); + * // => true + * + * _.isArrayBuffer(new Array(2)); + * // => false + */ + var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer; + + /** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */ + function isArrayLike(value) { + return value != null && isLength(value.length) && !isFunction(value); + } + + /** + * This method is like `_.isArrayLike` except that it also checks if `value` + * is an object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array-like object, + * else `false`. + * @example + * + * _.isArrayLikeObject([1, 2, 3]); + * // => true + * + * _.isArrayLikeObject(document.body.children); + * // => true + * + * _.isArrayLikeObject('abc'); + * // => false + * + * _.isArrayLikeObject(_.noop); + * // => false + */ + function isArrayLikeObject(value) { + return isObjectLike(value) && isArrayLike(value); + } + + /** + * Checks if `value` is classified as a boolean primitive or object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a boolean, else `false`. + * @example + * + * _.isBoolean(false); + * // => true + * + * _.isBoolean(null); + * // => false + */ + function isBoolean(value) { + return value === true || value === false || + (isObjectLike(value) && baseGetTag(value) == boolTag); + } + + /** + * Checks if `value` is a buffer. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. + * @example + * + * _.isBuffer(new Buffer(2)); + * // => true + * + * _.isBuffer(new Uint8Array(2)); + * // => false + */ + var isBuffer = nativeIsBuffer || stubFalse; + + /** + * Checks if `value` is classified as a `Date` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a date object, else `false`. + * @example + * + * _.isDate(new Date); + * // => true + * + * _.isDate('Mon April 23 2012'); + * // => false + */ + var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate; + + /** + * Checks if `value` is likely a DOM element. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`. + * @example + * + * _.isElement(document.body); + * // => true + * + * _.isElement(''); + * // => false + */ + function isElement(value) { + return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value); + } + + /** + * Checks if `value` is an empty object, collection, map, or set. + * + * Objects are considered empty if they have no own enumerable string keyed + * properties. + * + * Array-like values such as `arguments` objects, arrays, buffers, strings, or + * jQuery-like collections are considered empty if they have a `length` of `0`. + * Similarly, maps and sets are considered empty if they have a `size` of `0`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is empty, else `false`. + * @example + * + * _.isEmpty(null); + * // => true + * + * _.isEmpty(true); + * // => true + * + * _.isEmpty(1); + * // => true + * + * _.isEmpty([1, 2, 3]); + * // => false + * + * _.isEmpty({ 'a': 1 }); + * // => false + */ + function isEmpty(value) { + if (value == null) { + return true; + } + if (isArrayLike(value) && + (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' || + isBuffer(value) || isTypedArray(value) || isArguments(value))) { + return !value.length; + } + var tag = getTag(value); + if (tag == mapTag || tag == setTag) { + return !value.size; + } + if (isPrototype(value)) { + return !baseKeys(value).length; + } + for (var key in value) { + if (hasOwnProperty.call(value, key)) { + return false; + } + } + return true; + } + + /** + * Performs a deep comparison between two values to determine if they are + * equivalent. + * + * **Note:** This method supports comparing arrays, array buffers, booleans, + * date objects, error objects, maps, numbers, `Object` objects, regexes, + * sets, strings, symbols, and typed arrays. `Object` objects are compared + * by their own, not inherited, enumerable properties. Functions and DOM + * nodes are compared by strict equality, i.e. `===`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.isEqual(object, other); + * // => true + * + * object === other; + * // => false + */ + function isEqual(value, other) { + return baseIsEqual(value, other); + } + + /** + * This method is like `_.isEqual` except that it accepts `customizer` which + * is invoked to compare values. If `customizer` returns `undefined`, comparisons + * are handled by the method instead. The `customizer` is invoked with up to + * six arguments: (objValue, othValue [, index|key, object, other, stack]). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * function isGreeting(value) { + * return /^h(?:i|ello)$/.test(value); + * } + * + * function customizer(objValue, othValue) { + * if (isGreeting(objValue) && isGreeting(othValue)) { + * return true; + * } + * } + * + * var array = ['hello', 'goodbye']; + * var other = ['hi', 'goodbye']; + * + * _.isEqualWith(array, other, customizer); + * // => true + */ + function isEqualWith(value, other, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + var result = customizer ? customizer(value, other) : undefined; + return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result; + } + + /** + * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`, + * `SyntaxError`, `TypeError`, or `URIError` object. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an error object, else `false`. + * @example + * + * _.isError(new Error); + * // => true + * + * _.isError(Error); + * // => false + */ + function isError(value) { + if (!isObjectLike(value)) { + return false; + } + var tag = baseGetTag(value); + return tag == errorTag || tag == domExcTag || + (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value)); + } + + /** + * Checks if `value` is a finite primitive number. + * + * **Note:** This method is based on + * [`Number.isFinite`](https://mdn.io/Number/isFinite). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a finite number, else `false`. + * @example + * + * _.isFinite(3); + * // => true + * + * _.isFinite(Number.MIN_VALUE); + * // => true + * + * _.isFinite(Infinity); + * // => false + * + * _.isFinite('3'); + * // => false + */ + function isFinite(value) { + return typeof value == 'number' && nativeIsFinite(value); + } + + /** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ + function isFunction(value) { + if (!isObject(value)) { + return false; + } + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 9 which returns 'object' for typed arrays and other constructors. + var tag = baseGetTag(value); + return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; + } + + /** + * Checks if `value` is an integer. + * + * **Note:** This method is based on + * [`Number.isInteger`](https://mdn.io/Number/isInteger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an integer, else `false`. + * @example + * + * _.isInteger(3); + * // => true + * + * _.isInteger(Number.MIN_VALUE); + * // => false + * + * _.isInteger(Infinity); + * // => false + * + * _.isInteger('3'); + * // => false + */ + function isInteger(value) { + return typeof value == 'number' && value == toInteger(value); + } + + /** + * Checks if `value` is a valid array-like length. + * + * **Note:** This method is loosely based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */ + function isLength(value) { + return typeof value == 'number' && + value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; + } + + /** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ + function isObject(value) { + var type = typeof value; + return value != null && (type == 'object' || type == 'function'); + } + + /** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ + function isObjectLike(value) { + return value != null && typeof value == 'object'; + } + + /** + * Checks if `value` is classified as a `Map` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + * @example + * + * _.isMap(new Map); + * // => true + * + * _.isMap(new WeakMap); + * // => false + */ + var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap; + + /** + * Performs a partial deep comparison between `object` and `source` to + * determine if `object` contains equivalent property values. + * + * **Note:** This method is equivalent to `_.matches` when `source` is + * partially applied. + * + * Partial comparisons will match empty array and empty object `source` + * values against any array or object value, respectively. See `_.isEqual` + * for a list of supported value comparisons. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * + * _.isMatch(object, { 'b': 2 }); + * // => true + * + * _.isMatch(object, { 'b': 1 }); + * // => false + */ + function isMatch(object, source) { + return object === source || baseIsMatch(object, source, getMatchData(source)); + } + + /** + * This method is like `_.isMatch` except that it accepts `customizer` which + * is invoked to compare values. If `customizer` returns `undefined`, comparisons + * are handled by the method instead. The `customizer` is invoked with five + * arguments: (objValue, srcValue, index|key, object, source). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + * @example + * + * function isGreeting(value) { + * return /^h(?:i|ello)$/.test(value); + * } + * + * function customizer(objValue, srcValue) { + * if (isGreeting(objValue) && isGreeting(srcValue)) { + * return true; + * } + * } + * + * var object = { 'greeting': 'hello' }; + * var source = { 'greeting': 'hi' }; + * + * _.isMatchWith(object, source, customizer); + * // => true + */ + function isMatchWith(object, source, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + return baseIsMatch(object, source, getMatchData(source), customizer); + } + + /** + * Checks if `value` is `NaN`. + * + * **Note:** This method is based on + * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as + * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for + * `undefined` and other non-number values. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + * @example + * + * _.isNaN(NaN); + * // => true + * + * _.isNaN(new Number(NaN)); + * // => true + * + * isNaN(undefined); + * // => true + * + * _.isNaN(undefined); + * // => false + */ + function isNaN(value) { + // An `NaN` primitive is the only value that is not equal to itself. + // Perform the `toStringTag` check first to avoid errors with some + // ActiveX objects in IE. + return isNumber(value) && value != +value; + } + + /** + * Checks if `value` is a pristine native function. + * + * **Note:** This method can't reliably detect native functions in the presence + * of the core-js package because core-js circumvents this kind of detection. + * Despite multiple requests, the core-js maintainer has made it clear: any + * attempt to fix the detection will be obstructed. As a result, we're left + * with little choice but to throw an error. Unfortunately, this also affects + * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill), + * which rely on core-js. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + * @example + * + * _.isNative(Array.prototype.push); + * // => true + * + * _.isNative(_); + * // => false + */ + function isNative(value) { + if (isMaskable(value)) { + throw new Error(CORE_ERROR_TEXT); + } + return baseIsNative(value); + } + + /** + * Checks if `value` is `null`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `null`, else `false`. + * @example + * + * _.isNull(null); + * // => true + * + * _.isNull(void 0); + * // => false + */ + function isNull(value) { + return value === null; + } + + /** + * Checks if `value` is `null` or `undefined`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is nullish, else `false`. + * @example + * + * _.isNil(null); + * // => true + * + * _.isNil(void 0); + * // => true + * + * _.isNil(NaN); + * // => false + */ + function isNil(value) { + return value == null; + } + + /** + * Checks if `value` is classified as a `Number` primitive or object. + * + * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are + * classified as numbers, use the `_.isFinite` method. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a number, else `false`. + * @example + * + * _.isNumber(3); + * // => true + * + * _.isNumber(Number.MIN_VALUE); + * // => true + * + * _.isNumber(Infinity); + * // => true + * + * _.isNumber('3'); + * // => false + */ + function isNumber(value) { + return typeof value == 'number' || + (isObjectLike(value) && baseGetTag(value) == numberTag); + } + + /** + * Checks if `value` is a plain object, that is, an object created by the + * `Object` constructor or one with a `[[Prototype]]` of `null`. + * + * @static + * @memberOf _ + * @since 0.8.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * _.isPlainObject(new Foo); + * // => false + * + * _.isPlainObject([1, 2, 3]); + * // => false + * + * _.isPlainObject({ 'x': 0, 'y': 0 }); + * // => true + * + * _.isPlainObject(Object.create(null)); + * // => true + */ + function isPlainObject(value) { + if (!isObjectLike(value) || baseGetTag(value) != objectTag) { + return false; + } + var proto = getPrototype(value); + if (proto === null) { + return true; + } + var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor; + return typeof Ctor == 'function' && Ctor instanceof Ctor && + funcToString.call(Ctor) == objectCtorString; + } + + /** + * Checks if `value` is classified as a `RegExp` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. + * @example + * + * _.isRegExp(/abc/); + * // => true + * + * _.isRegExp('/abc/'); + * // => false + */ + var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp; + + /** + * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754 + * double precision number which isn't the result of a rounded unsafe integer. + * + * **Note:** This method is based on + * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`. + * @example + * + * _.isSafeInteger(3); + * // => true + * + * _.isSafeInteger(Number.MIN_VALUE); + * // => false + * + * _.isSafeInteger(Infinity); + * // => false + * + * _.isSafeInteger('3'); + * // => false + */ + function isSafeInteger(value) { + return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER; + } + + /** + * Checks if `value` is classified as a `Set` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + * @example + * + * _.isSet(new Set); + * // => true + * + * _.isSet(new WeakSet); + * // => false + */ + var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet; + + /** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a string, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ + function isString(value) { + return typeof value == 'string' || + (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag); + } + + /** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ + function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && baseGetTag(value) == symbolTag); + } + + /** + * Checks if `value` is classified as a typed array. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + * @example + * + * _.isTypedArray(new Uint8Array); + * // => true + * + * _.isTypedArray([]); + * // => false + */ + var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; + + /** + * Checks if `value` is `undefined`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. + * @example + * + * _.isUndefined(void 0); + * // => true + * + * _.isUndefined(null); + * // => false + */ + function isUndefined(value) { + return value === undefined; + } + + /** + * Checks if `value` is classified as a `WeakMap` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a weak map, else `false`. + * @example + * + * _.isWeakMap(new WeakMap); + * // => true + * + * _.isWeakMap(new Map); + * // => false + */ + function isWeakMap(value) { + return isObjectLike(value) && getTag(value) == weakMapTag; + } + + /** + * Checks if `value` is classified as a `WeakSet` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a weak set, else `false`. + * @example + * + * _.isWeakSet(new WeakSet); + * // => true + * + * _.isWeakSet(new Set); + * // => false + */ + function isWeakSet(value) { + return isObjectLike(value) && baseGetTag(value) == weakSetTag; + } + + /** + * Checks if `value` is less than `other`. + * + * @static + * @memberOf _ + * @since 3.9.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, + * else `false`. + * @see _.gt + * @example + * + * _.lt(1, 3); + * // => true + * + * _.lt(3, 3); + * // => false + * + * _.lt(3, 1); + * // => false + */ + var lt = createRelationalOperation(baseLt); + + /** + * Checks if `value` is less than or equal to `other`. + * + * @static + * @memberOf _ + * @since 3.9.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than or equal to + * `other`, else `false`. + * @see _.gte + * @example + * + * _.lte(1, 3); + * // => true + * + * _.lte(3, 3); + * // => true + * + * _.lte(3, 1); + * // => false + */ + var lte = createRelationalOperation(function(value, other) { + return value <= other; + }); + + /** + * Converts `value` to an array. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to convert. + * @returns {Array} Returns the converted array. + * @example + * + * _.toArray({ 'a': 1, 'b': 2 }); + * // => [1, 2] + * + * _.toArray('abc'); + * // => ['a', 'b', 'c'] + * + * _.toArray(1); + * // => [] + * + * _.toArray(null); + * // => [] + */ + function toArray(value) { + if (!value) { + return []; + } + if (isArrayLike(value)) { + return isString(value) ? stringToArray(value) : copyArray(value); + } + if (symIterator && value[symIterator]) { + return iteratorToArray(value[symIterator]()); + } + var tag = getTag(value), + func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values); + + return func(value); + } + + /** + * Converts `value` to a finite number. + * + * @static + * @memberOf _ + * @since 4.12.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted number. + * @example + * + * _.toFinite(3.2); + * // => 3.2 + * + * _.toFinite(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toFinite(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toFinite('3.2'); + * // => 3.2 + */ + function toFinite(value) { + if (!value) { + return value === 0 ? value : 0; + } + value = toNumber(value); + if (value === INFINITY || value === -INFINITY) { + var sign = (value < 0 ? -1 : 1); + return sign * MAX_INTEGER; + } + return value === value ? value : 0; + } + + /** + * Converts `value` to an integer. + * + * **Note:** This method is loosely based on + * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toInteger(3.2); + * // => 3 + * + * _.toInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toInteger(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toInteger('3.2'); + * // => 3 + */ + function toInteger(value) { + var result = toFinite(value), + remainder = result % 1; + + return result === result ? (remainder ? result - remainder : result) : 0; + } + + /** + * Converts `value` to an integer suitable for use as the length of an + * array-like object. + * + * **Note:** This method is based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toLength(3.2); + * // => 3 + * + * _.toLength(Number.MIN_VALUE); + * // => 0 + * + * _.toLength(Infinity); + * // => 4294967295 + * + * _.toLength('3.2'); + * // => 3 + */ + function toLength(value) { + return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0; + } + + /** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ + function toNumber(value) { + if (typeof value == 'number') { + return value; + } + if (isSymbol(value)) { + return NAN; + } + if (isObject(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = isObject(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = value.replace(reTrim, ''); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); + } + + /** + * Converts `value` to a plain object flattening inherited enumerable string + * keyed properties of `value` to own properties of the plain object. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {Object} Returns the converted plain object. + * @example + * + * function Foo() { + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.assign({ 'a': 1 }, new Foo); + * // => { 'a': 1, 'b': 2 } + * + * _.assign({ 'a': 1 }, _.toPlainObject(new Foo)); + * // => { 'a': 1, 'b': 2, 'c': 3 } + */ + function toPlainObject(value) { + return copyObject(value, keysIn(value)); + } + + /** + * Converts `value` to a safe integer. A safe integer can be compared and + * represented correctly. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toSafeInteger(3.2); + * // => 3 + * + * _.toSafeInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toSafeInteger(Infinity); + * // => 9007199254740991 + * + * _.toSafeInteger('3.2'); + * // => 3 + */ + function toSafeInteger(value) { + return value + ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER) + : (value === 0 ? value : 0); + } + + /** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ + function toString(value) { + return value == null ? '' : baseToString(value); + } + + /*------------------------------------------------------------------------*/ + + /** + * Assigns own enumerable string keyed properties of source objects to the + * destination object. Source objects are applied from left to right. + * Subsequent sources overwrite property assignments of previous sources. + * + * **Note:** This method mutates `object` and is loosely based on + * [`Object.assign`](https://mdn.io/Object/assign). + * + * @static + * @memberOf _ + * @since 0.10.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.assignIn + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * function Bar() { + * this.c = 3; + * } + * + * Foo.prototype.b = 2; + * Bar.prototype.d = 4; + * + * _.assign({ 'a': 0 }, new Foo, new Bar); + * // => { 'a': 1, 'c': 3 } + */ + var assign = createAssigner(function(object, source) { + if (isPrototype(source) || isArrayLike(source)) { + copyObject(source, keys(source), object); + return; + } + for (var key in source) { + if (hasOwnProperty.call(source, key)) { + assignValue(object, key, source[key]); + } + } + }); + + /** + * This method is like `_.assign` except that it iterates over own and + * inherited source properties. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias extend + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.assign + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * function Bar() { + * this.c = 3; + * } + * + * Foo.prototype.b = 2; + * Bar.prototype.d = 4; + * + * _.assignIn({ 'a': 0 }, new Foo, new Bar); + * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 } + */ + var assignIn = createAssigner(function(object, source) { + copyObject(source, keysIn(source), object); + }); + + /** + * This method is like `_.assignIn` except that it accepts `customizer` + * which is invoked to produce the assigned values. If `customizer` returns + * `undefined`, assignment is handled by the method instead. The `customizer` + * is invoked with five arguments: (objValue, srcValue, key, object, source). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias extendWith + * @category Object + * @param {Object} object The destination object. + * @param {...Object} sources The source objects. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @see _.assignWith + * @example + * + * function customizer(objValue, srcValue) { + * return _.isUndefined(objValue) ? srcValue : objValue; + * } + * + * var defaults = _.partialRight(_.assignInWith, customizer); + * + * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ + var assignInWith = createAssigner(function(object, source, srcIndex, customizer) { + copyObject(source, keysIn(source), object, customizer); + }); + + /** + * This method is like `_.assign` except that it accepts `customizer` + * which is invoked to produce the assigned values. If `customizer` returns + * `undefined`, assignment is handled by the method instead. The `customizer` + * is invoked with five arguments: (objValue, srcValue, key, object, source). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} sources The source objects. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @see _.assignInWith + * @example + * + * function customizer(objValue, srcValue) { + * return _.isUndefined(objValue) ? srcValue : objValue; + * } + * + * var defaults = _.partialRight(_.assignWith, customizer); + * + * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ + var assignWith = createAssigner(function(object, source, srcIndex, customizer) { + copyObject(source, keys(source), object, customizer); + }); + + /** + * Creates an array of values corresponding to `paths` of `object`. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Array} Returns the picked values. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; + * + * _.at(object, ['a[0].b.c', 'a[1]']); + * // => [3, 4] + */ + var at = flatRest(baseAt); + + /** + * Creates an object that inherits from the `prototype` object. If a + * `properties` object is given, its own enumerable string keyed properties + * are assigned to the created object. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Object + * @param {Object} prototype The object to inherit from. + * @param {Object} [properties] The properties to assign to the object. + * @returns {Object} Returns the new object. + * @example + * + * function Shape() { + * this.x = 0; + * this.y = 0; + * } + * + * function Circle() { + * Shape.call(this); + * } + * + * Circle.prototype = _.create(Shape.prototype, { + * 'constructor': Circle + * }); + * + * var circle = new Circle; + * circle instanceof Circle; + * // => true + * + * circle instanceof Shape; + * // => true + */ + function create(prototype, properties) { + var result = baseCreate(prototype); + return properties == null ? result : baseAssign(result, properties); + } + + /** + * Assigns own and inherited enumerable string keyed properties of source + * objects to the destination object for all destination properties that + * resolve to `undefined`. Source objects are applied from left to right. + * Once a property is set, additional values of the same property are ignored. + * + * **Note:** This method mutates `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.defaultsDeep + * @example + * + * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ + var defaults = baseRest(function(object, sources) { + object = Object(object); + + var index = -1; + var length = sources.length; + var guard = length > 2 ? sources[2] : undefined; + + if (guard && isIterateeCall(sources[0], sources[1], guard)) { + length = 1; + } + + while (++index < length) { + var source = sources[index]; + var props = keysIn(source); + var propsIndex = -1; + var propsLength = props.length; + + while (++propsIndex < propsLength) { + var key = props[propsIndex]; + var value = object[key]; + + if (value === undefined || + (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { + object[key] = source[key]; + } + } + } + + return object; + }); + + /** + * This method is like `_.defaults` except that it recursively assigns + * default properties. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 3.10.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.defaults + * @example + * + * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } }); + * // => { 'a': { 'b': 2, 'c': 3 } } + */ + var defaultsDeep = baseRest(function(args) { + args.push(undefined, customDefaultsMerge); + return apply(mergeWith, undefined, args); + }); + + /** + * This method is like `_.find` except that it returns the key of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Object + * @param {Object} object The object to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {string|undefined} Returns the key of the matched element, + * else `undefined`. + * @example + * + * var users = { + * 'barney': { 'age': 36, 'active': true }, + * 'fred': { 'age': 40, 'active': false }, + * 'pebbles': { 'age': 1, 'active': true } + * }; + * + * _.findKey(users, function(o) { return o.age < 40; }); + * // => 'barney' (iteration order is not guaranteed) + * + * // The `_.matches` iteratee shorthand. + * _.findKey(users, { 'age': 1, 'active': true }); + * // => 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findKey(users, ['active', false]); + * // => 'fred' + * + * // The `_.property` iteratee shorthand. + * _.findKey(users, 'active'); + * // => 'barney' + */ + function findKey(object, predicate) { + return baseFindKey(object, getIteratee(predicate, 3), baseForOwn); + } + + /** + * This method is like `_.findKey` except that it iterates over elements of + * a collection in the opposite order. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Object + * @param {Object} object The object to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {string|undefined} Returns the key of the matched element, + * else `undefined`. + * @example + * + * var users = { + * 'barney': { 'age': 36, 'active': true }, + * 'fred': { 'age': 40, 'active': false }, + * 'pebbles': { 'age': 1, 'active': true } + * }; + * + * _.findLastKey(users, function(o) { return o.age < 40; }); + * // => returns 'pebbles' assuming `_.findKey` returns 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.findLastKey(users, { 'age': 36, 'active': true }); + * // => 'barney' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findLastKey(users, ['active', false]); + * // => 'fred' + * + * // The `_.property` iteratee shorthand. + * _.findLastKey(users, 'active'); + * // => 'pebbles' + */ + function findLastKey(object, predicate) { + return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight); + } + + /** + * Iterates over own and inherited enumerable string keyed properties of an + * object and invokes `iteratee` for each property. The iteratee is invoked + * with three arguments: (value, key, object). Iteratee functions may exit + * iteration early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forInRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forIn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). + */ + function forIn(object, iteratee) { + return object == null + ? object + : baseFor(object, getIteratee(iteratee, 3), keysIn); + } + + /** + * This method is like `_.forIn` except that it iterates over properties of + * `object` in the opposite order. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forIn + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forInRight(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'. + */ + function forInRight(object, iteratee) { + return object == null + ? object + : baseForRight(object, getIteratee(iteratee, 3), keysIn); + } + + /** + * Iterates over own enumerable string keyed properties of an object and + * invokes `iteratee` for each property. The iteratee is invoked with three + * arguments: (value, key, object). Iteratee functions may exit iteration + * early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forOwnRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ + function forOwn(object, iteratee) { + return object && baseForOwn(object, getIteratee(iteratee, 3)); + } + + /** + * This method is like `_.forOwn` except that it iterates over properties of + * `object` in the opposite order. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forOwn + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwnRight(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'. + */ + function forOwnRight(object, iteratee) { + return object && baseForOwnRight(object, getIteratee(iteratee, 3)); + } + + /** + * Creates an array of function property names from own enumerable properties + * of `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to inspect. + * @returns {Array} Returns the function names. + * @see _.functionsIn + * @example + * + * function Foo() { + * this.a = _.constant('a'); + * this.b = _.constant('b'); + * } + * + * Foo.prototype.c = _.constant('c'); + * + * _.functions(new Foo); + * // => ['a', 'b'] + */ + function functions(object) { + return object == null ? [] : baseFunctions(object, keys(object)); + } + + /** + * Creates an array of function property names from own and inherited + * enumerable properties of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to inspect. + * @returns {Array} Returns the function names. + * @see _.functions + * @example + * + * function Foo() { + * this.a = _.constant('a'); + * this.b = _.constant('b'); + * } + * + * Foo.prototype.c = _.constant('c'); + * + * _.functionsIn(new Foo); + * // => ['a', 'b', 'c'] + */ + function functionsIn(object) { + return object == null ? [] : baseFunctions(object, keysIn(object)); + } + + /** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ + function get(object, path, defaultValue) { + var result = object == null ? undefined : baseGet(object, path); + return result === undefined ? defaultValue : result; + } + + /** + * Checks if `path` is a direct property of `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = { 'a': { 'b': 2 } }; + * var other = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.has(object, 'a'); + * // => true + * + * _.has(object, 'a.b'); + * // => true + * + * _.has(object, ['a', 'b']); + * // => true + * + * _.has(other, 'a'); + * // => false + */ + function has(object, path) { + return object != null && hasPath(object, path, baseHas); + } + + /** + * Checks if `path` is a direct or inherited property of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.hasIn(object, 'a'); + * // => true + * + * _.hasIn(object, 'a.b'); + * // => true + * + * _.hasIn(object, ['a', 'b']); + * // => true + * + * _.hasIn(object, 'b'); + * // => false + */ + function hasIn(object, path) { + return object != null && hasPath(object, path, baseHasIn); + } + + /** + * Creates an object composed of the inverted keys and values of `object`. + * If `object` contains duplicate values, subsequent values overwrite + * property assignments of previous values. + * + * @static + * @memberOf _ + * @since 0.7.0 + * @category Object + * @param {Object} object The object to invert. + * @returns {Object} Returns the new inverted object. + * @example + * + * var object = { 'a': 1, 'b': 2, 'c': 1 }; + * + * _.invert(object); + * // => { '1': 'c', '2': 'b' } + */ + var invert = createInverter(function(result, value, key) { + if (value != null && + typeof value.toString != 'function') { + value = nativeObjectToString.call(value); + } + + result[value] = key; + }, constant(identity)); + + /** + * This method is like `_.invert` except that the inverted object is generated + * from the results of running each element of `object` thru `iteratee`. The + * corresponding inverted value of each inverted key is an array of keys + * responsible for generating the inverted value. The iteratee is invoked + * with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.1.0 + * @category Object + * @param {Object} object The object to invert. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Object} Returns the new inverted object. + * @example + * + * var object = { 'a': 1, 'b': 2, 'c': 1 }; + * + * _.invertBy(object); + * // => { '1': ['a', 'c'], '2': ['b'] } + * + * _.invertBy(object, function(value) { + * return 'group' + value; + * }); + * // => { 'group1': ['a', 'c'], 'group2': ['b'] } + */ + var invertBy = createInverter(function(result, value, key) { + if (value != null && + typeof value.toString != 'function') { + value = nativeObjectToString.call(value); + } + + if (hasOwnProperty.call(result, value)) { + result[value].push(key); + } else { + result[value] = [key]; + } + }, getIteratee); + + /** + * Invokes the method at `path` of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the method to invoke. + * @param {...*} [args] The arguments to invoke the method with. + * @returns {*} Returns the result of the invoked method. + * @example + * + * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] }; + * + * _.invoke(object, 'a[0].b.c.slice', 1, 3); + * // => [2, 3] + */ + var invoke = baseRest(baseInvoke); + + /** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ + function keys(object) { + return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); + } + + /** + * Creates an array of the own and inherited enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keysIn(new Foo); + * // => ['a', 'b', 'c'] (iteration order is not guaranteed) + */ + function keysIn(object) { + return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); + } + + /** + * The opposite of `_.mapValues`; this method creates an object with the + * same values as `object` and keys generated by running each own enumerable + * string keyed property of `object` thru `iteratee`. The iteratee is invoked + * with three arguments: (value, key, object). + * + * @static + * @memberOf _ + * @since 3.8.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns the new mapped object. + * @see _.mapValues + * @example + * + * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) { + * return key + value; + * }); + * // => { 'a1': 1, 'b2': 2 } + */ + function mapKeys(object, iteratee) { + var result = {}; + iteratee = getIteratee(iteratee, 3); + + baseForOwn(object, function(value, key, object) { + baseAssignValue(result, iteratee(value, key, object), value); + }); + return result; + } + + /** + * Creates an object with the same keys as `object` and values generated + * by running each own enumerable string keyed property of `object` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, key, object). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns the new mapped object. + * @see _.mapKeys + * @example + * + * var users = { + * 'fred': { 'user': 'fred', 'age': 40 }, + * 'pebbles': { 'user': 'pebbles', 'age': 1 } + * }; + * + * _.mapValues(users, function(o) { return o.age; }); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + * + * // The `_.property` iteratee shorthand. + * _.mapValues(users, 'age'); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + */ + function mapValues(object, iteratee) { + var result = {}; + iteratee = getIteratee(iteratee, 3); + + baseForOwn(object, function(value, key, object) { + baseAssignValue(result, key, iteratee(value, key, object)); + }); + return result; + } + + /** + * This method is like `_.assign` except that it recursively merges own and + * inherited enumerable string keyed properties of source objects into the + * destination object. Source properties that resolve to `undefined` are + * skipped if a destination value exists. Array and plain object properties + * are merged recursively. Other objects and value types are overridden by + * assignment. Source objects are applied from left to right. Subsequent + * sources overwrite property assignments of previous sources. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 0.5.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @example + * + * var object = { + * 'a': [{ 'b': 2 }, { 'd': 4 }] + * }; + * + * var other = { + * 'a': [{ 'c': 3 }, { 'e': 5 }] + * }; + * + * _.merge(object, other); + * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] } + */ + var merge = createAssigner(function(object, source, srcIndex) { + baseMerge(object, source, srcIndex); + }); + + /** + * This method is like `_.merge` except that it accepts `customizer` which + * is invoked to produce the merged values of the destination and source + * properties. If `customizer` returns `undefined`, merging is handled by the + * method instead. The `customizer` is invoked with six arguments: + * (objValue, srcValue, key, object, source, stack). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} sources The source objects. + * @param {Function} customizer The function to customize assigned values. + * @returns {Object} Returns `object`. + * @example + * + * function customizer(objValue, srcValue) { + * if (_.isArray(objValue)) { + * return objValue.concat(srcValue); + * } + * } + * + * var object = { 'a': [1], 'b': [2] }; + * var other = { 'a': [3], 'b': [4] }; + * + * _.mergeWith(object, other, customizer); + * // => { 'a': [1, 3], 'b': [2, 4] } + */ + var mergeWith = createAssigner(function(object, source, srcIndex, customizer) { + baseMerge(object, source, srcIndex, customizer); + }); + + /** + * The opposite of `_.pick`; this method creates an object composed of the + * own and inherited enumerable property paths of `object` that are not omitted. + * + * **Note:** This method is considerably slower than `_.pick`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [paths] The property paths to omit. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.omit(object, ['a', 'c']); + * // => { 'b': '2' } + */ + var omit = flatRest(function(object, paths) { + var result = {}; + if (object == null) { + return result; + } + var isDeep = false; + paths = arrayMap(paths, function(path) { + path = castPath(path, object); + isDeep || (isDeep = path.length > 1); + return path; + }); + copyObject(object, getAllKeysIn(object), result); + if (isDeep) { + result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone); + } + var length = paths.length; + while (length--) { + baseUnset(result, paths[length]); + } + return result; + }); + + /** + * The opposite of `_.pickBy`; this method creates an object composed of + * the own and inherited enumerable string keyed properties of `object` that + * `predicate` doesn't return truthy for. The predicate is invoked with two + * arguments: (value, key). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The source object. + * @param {Function} [predicate=_.identity] The function invoked per property. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.omitBy(object, _.isNumber); + * // => { 'b': '2' } + */ + function omitBy(object, predicate) { + return pickBy(object, negate(getIteratee(predicate))); + } + + /** + * Creates an object composed of the picked `object` properties. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pick(object, ['a', 'c']); + * // => { 'a': 1, 'c': 3 } + */ + var pick = flatRest(function(object, paths) { + return object == null ? {} : basePick(object, paths); + }); + + /** + * Creates an object composed of the `object` properties `predicate` returns + * truthy for. The predicate is invoked with two arguments: (value, key). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The source object. + * @param {Function} [predicate=_.identity] The function invoked per property. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pickBy(object, _.isNumber); + * // => { 'a': 1, 'c': 3 } + */ + function pickBy(object, predicate) { + if (object == null) { + return {}; + } + var props = arrayMap(getAllKeysIn(object), function(prop) { + return [prop]; + }); + predicate = getIteratee(predicate); + return basePickBy(object, props, function(value, path) { + return predicate(value, path[0]); + }); + } + + /** + * This method is like `_.get` except that if the resolved value is a + * function it's invoked with the `this` binding of its parent object and + * its result is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to resolve. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] }; + * + * _.result(object, 'a[0].b.c1'); + * // => 3 + * + * _.result(object, 'a[0].b.c2'); + * // => 4 + * + * _.result(object, 'a[0].b.c3', 'default'); + * // => 'default' + * + * _.result(object, 'a[0].b.c3', _.constant('default')); + * // => 'default' + */ + function result(object, path, defaultValue) { + path = castPath(path, object); + + var index = -1, + length = path.length; + + // Ensure the loop is entered when path is empty. + if (!length) { + length = 1; + object = undefined; + } + while (++index < length) { + var value = object == null ? undefined : object[toKey(path[index])]; + if (value === undefined) { + index = length; + value = defaultValue; + } + object = isFunction(value) ? value.call(object) : value; + } + return object; + } + + /** + * Sets the value at `path` of `object`. If a portion of `path` doesn't exist, + * it's created. Arrays are created for missing index properties while objects + * are created for all other missing properties. Use `_.setWith` to customize + * `path` creation. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @returns {Object} Returns `object`. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.set(object, 'a[0].b.c', 4); + * console.log(object.a[0].b.c); + * // => 4 + * + * _.set(object, ['x', '0', 'y', 'z'], 5); + * console.log(object.x[0].y.z); + * // => 5 + */ + function set(object, path, value) { + return object == null ? object : baseSet(object, path, value); + } + + /** + * This method is like `_.set` except that it accepts `customizer` which is + * invoked to produce the objects of `path`. If `customizer` returns `undefined` + * path creation is handled by the method instead. The `customizer` is invoked + * with three arguments: (nsValue, key, nsObject). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @example + * + * var object = {}; + * + * _.setWith(object, '[0][1]', 'a', Object); + * // => { '0': { '1': 'a' } } + */ + function setWith(object, path, value, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + return object == null ? object : baseSet(object, path, value, customizer); + } + + /** + * Creates an array of own enumerable string keyed-value pairs for `object` + * which can be consumed by `_.fromPairs`. If `object` is a map or set, its + * entries are returned. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias entries + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the key-value pairs. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.toPairs(new Foo); + * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed) + */ + var toPairs = createToPairs(keys); + + /** + * Creates an array of own and inherited enumerable string keyed-value pairs + * for `object` which can be consumed by `_.fromPairs`. If `object` is a map + * or set, its entries are returned. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias entriesIn + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the key-value pairs. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.toPairsIn(new Foo); + * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed) + */ + var toPairsIn = createToPairs(keysIn); + + /** + * An alternative to `_.reduce`; this method transforms `object` to a new + * `accumulator` object which is the result of running each of its own + * enumerable string keyed properties thru `iteratee`, with each invocation + * potentially mutating the `accumulator` object. If `accumulator` is not + * provided, a new object with the same `[[Prototype]]` will be used. The + * iteratee is invoked with four arguments: (accumulator, value, key, object). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 1.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The custom accumulator value. + * @returns {*} Returns the accumulated value. + * @example + * + * _.transform([2, 3, 4], function(result, n) { + * result.push(n *= n); + * return n % 2 == 0; + * }, []); + * // => [4, 9] + * + * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + * (result[value] || (result[value] = [])).push(key); + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } + */ + function transform(object, iteratee, accumulator) { + var isArr = isArray(object), + isArrLike = isArr || isBuffer(object) || isTypedArray(object); + + iteratee = getIteratee(iteratee, 4); + if (accumulator == null) { + var Ctor = object && object.constructor; + if (isArrLike) { + accumulator = isArr ? new Ctor : []; + } + else if (isObject(object)) { + accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {}; + } + else { + accumulator = {}; + } + } + (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) { + return iteratee(accumulator, value, index, object); + }); + return accumulator; + } + + /** + * Removes the property at `path` of `object`. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to unset. + * @returns {boolean} Returns `true` if the property is deleted, else `false`. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 7 } }] }; + * _.unset(object, 'a[0].b.c'); + * // => true + * + * console.log(object); + * // => { 'a': [{ 'b': {} }] }; + * + * _.unset(object, ['a', '0', 'b', 'c']); + * // => true + * + * console.log(object); + * // => { 'a': [{ 'b': {} }] }; + */ + function unset(object, path) { + return object == null ? true : baseUnset(object, path); + } + + /** + * This method is like `_.set` except that accepts `updater` to produce the + * value to set. Use `_.updateWith` to customize `path` creation. The `updater` + * is invoked with one argument: (value). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.6.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {Function} updater The function to produce the updated value. + * @returns {Object} Returns `object`. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.update(object, 'a[0].b.c', function(n) { return n * n; }); + * console.log(object.a[0].b.c); + * // => 9 + * + * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; }); + * console.log(object.x[0].y.z); + * // => 0 + */ + function update(object, path, updater) { + return object == null ? object : baseUpdate(object, path, castFunction(updater)); + } + + /** + * This method is like `_.update` except that it accepts `customizer` which is + * invoked to produce the objects of `path`. If `customizer` returns `undefined` + * path creation is handled by the method instead. The `customizer` is invoked + * with three arguments: (nsValue, key, nsObject). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.6.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {Function} updater The function to produce the updated value. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @example + * + * var object = {}; + * + * _.updateWith(object, '[0][1]', _.constant('a'), Object); + * // => { '0': { '1': 'a' } } + */ + function updateWith(object, path, updater, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer); + } + + /** + * Creates an array of the own enumerable string keyed property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ + function values(object) { + return object == null ? [] : baseValues(object, keys(object)); + } + + /** + * Creates an array of the own and inherited enumerable string keyed property + * values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.valuesIn(new Foo); + * // => [1, 2, 3] (iteration order is not guaranteed) + */ + function valuesIn(object) { + return object == null ? [] : baseValues(object, keysIn(object)); + } + + /*------------------------------------------------------------------------*/ + + /** + * Clamps `number` within the inclusive `lower` and `upper` bounds. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Number + * @param {number} number The number to clamp. + * @param {number} [lower] The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the clamped number. + * @example + * + * _.clamp(-10, -5, 5); + * // => -5 + * + * _.clamp(10, -5, 5); + * // => 5 + */ + function clamp(number, lower, upper) { + if (upper === undefined) { + upper = lower; + lower = undefined; + } + if (upper !== undefined) { + upper = toNumber(upper); + upper = upper === upper ? upper : 0; + } + if (lower !== undefined) { + lower = toNumber(lower); + lower = lower === lower ? lower : 0; + } + return baseClamp(toNumber(number), lower, upper); + } + + /** + * Checks if `n` is between `start` and up to, but not including, `end`. If + * `end` is not specified, it's set to `start` with `start` then set to `0`. + * If `start` is greater than `end` the params are swapped to support + * negative ranges. + * + * @static + * @memberOf _ + * @since 3.3.0 + * @category Number + * @param {number} number The number to check. + * @param {number} [start=0] The start of the range. + * @param {number} end The end of the range. + * @returns {boolean} Returns `true` if `number` is in the range, else `false`. + * @see _.range, _.rangeRight + * @example + * + * _.inRange(3, 2, 4); + * // => true + * + * _.inRange(4, 8); + * // => true + * + * _.inRange(4, 2); + * // => false + * + * _.inRange(2, 2); + * // => false + * + * _.inRange(1.2, 2); + * // => true + * + * _.inRange(5.2, 4); + * // => false + * + * _.inRange(-3, -2, -6); + * // => true + */ + function inRange(number, start, end) { + start = toFinite(start); + if (end === undefined) { + end = start; + start = 0; + } else { + end = toFinite(end); + } + number = toNumber(number); + return baseInRange(number, start, end); + } + + /** + * Produces a random number between the inclusive `lower` and `upper` bounds. + * If only one argument is provided a number between `0` and the given number + * is returned. If `floating` is `true`, or either `lower` or `upper` are + * floats, a floating-point number is returned instead of an integer. + * + * **Note:** JavaScript follows the IEEE-754 standard for resolving + * floating-point values which can produce unexpected results. + * + * @static + * @memberOf _ + * @since 0.7.0 + * @category Number + * @param {number} [lower=0] The lower bound. + * @param {number} [upper=1] The upper bound. + * @param {boolean} [floating] Specify returning a floating-point number. + * @returns {number} Returns the random number. + * @example + * + * _.random(0, 5); + * // => an integer between 0 and 5 + * + * _.random(5); + * // => also an integer between 0 and 5 + * + * _.random(5, true); + * // => a floating-point number between 0 and 5 + * + * _.random(1.2, 5.2); + * // => a floating-point number between 1.2 and 5.2 + */ + function random(lower, upper, floating) { + if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) { + upper = floating = undefined; + } + if (floating === undefined) { + if (typeof upper == 'boolean') { + floating = upper; + upper = undefined; + } + else if (typeof lower == 'boolean') { + floating = lower; + lower = undefined; + } + } + if (lower === undefined && upper === undefined) { + lower = 0; + upper = 1; + } + else { + lower = toFinite(lower); + if (upper === undefined) { + upper = lower; + lower = 0; + } else { + upper = toFinite(upper); + } + } + if (lower > upper) { + var temp = lower; + lower = upper; + upper = temp; + } + if (floating || lower % 1 || upper % 1) { + var rand = nativeRandom(); + return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper); + } + return baseRandom(lower, upper); + } + + /*------------------------------------------------------------------------*/ + + /** + * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the camel cased string. + * @example + * + * _.camelCase('Foo Bar'); + * // => 'fooBar' + * + * _.camelCase('--foo-bar--'); + * // => 'fooBar' + * + * _.camelCase('__FOO_BAR__'); + * // => 'fooBar' + */ + var camelCase = createCompounder(function(result, word, index) { + word = word.toLowerCase(); + return result + (index ? capitalize(word) : word); + }); + + /** + * Converts the first character of `string` to upper case and the remaining + * to lower case. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to capitalize. + * @returns {string} Returns the capitalized string. + * @example + * + * _.capitalize('FRED'); + * // => 'Fred' + */ + function capitalize(string) { + return upperFirst(toString(string).toLowerCase()); + } + + /** + * Deburrs `string` by converting + * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table) + * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A) + * letters to basic Latin letters and removing + * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to deburr. + * @returns {string} Returns the deburred string. + * @example + * + * _.deburr('déjà vu'); + * // => 'deja vu' + */ + function deburr(string) { + string = toString(string); + return string && string.replace(reLatin, deburrLetter).replace(reComboMark, ''); + } + + /** + * Checks if `string` ends with the given target string. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to inspect. + * @param {string} [target] The string to search for. + * @param {number} [position=string.length] The position to search up to. + * @returns {boolean} Returns `true` if `string` ends with `target`, + * else `false`. + * @example + * + * _.endsWith('abc', 'c'); + * // => true + * + * _.endsWith('abc', 'b'); + * // => false + * + * _.endsWith('abc', 'b', 2); + * // => true + */ + function endsWith(string, target, position) { + string = toString(string); + target = baseToString(target); + + var length = string.length; + position = position === undefined + ? length + : baseClamp(toInteger(position), 0, length); + + var end = position; + position -= target.length; + return position >= 0 && string.slice(position, end) == target; + } + + /** + * Converts the characters "&", "<", ">", '"', and "'" in `string` to their + * corresponding HTML entities. + * + * **Note:** No other characters are escaped. To escape additional + * characters use a third-party library like [_he_](https://mths.be/he). + * + * Though the ">" character is escaped for symmetry, characters like + * ">" and "/" don't need escaping in HTML and have no special meaning + * unless they're part of a tag or unquoted attribute value. See + * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands) + * (under "semi-related fun fact") for more details. + * + * When working with HTML you should always + * [quote attribute values](http://wonko.com/post/html-escaping) to reduce + * XSS vectors. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category String + * @param {string} [string=''] The string to escape. + * @returns {string} Returns the escaped string. + * @example + * + * _.escape('fred, barney, & pebbles'); + * // => 'fred, barney, & pebbles' + */ + function escape(string) { + string = toString(string); + return (string && reHasUnescapedHtml.test(string)) + ? string.replace(reUnescapedHtml, escapeHtmlChar) + : string; + } + + /** + * Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+", + * "?", "(", ")", "[", "]", "{", "}", and "|" in `string`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to escape. + * @returns {string} Returns the escaped string. + * @example + * + * _.escapeRegExp('[lodash](https://lodash.com/)'); + * // => '\[lodash\]\(https://lodash\.com/\)' + */ + function escapeRegExp(string) { + string = toString(string); + return (string && reHasRegExpChar.test(string)) + ? string.replace(reRegExpChar, '\\$&') + : string; + } + + /** + * Converts `string` to + * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the kebab cased string. + * @example + * + * _.kebabCase('Foo Bar'); + * // => 'foo-bar' + * + * _.kebabCase('fooBar'); + * // => 'foo-bar' + * + * _.kebabCase('__FOO_BAR__'); + * // => 'foo-bar' + */ + var kebabCase = createCompounder(function(result, word, index) { + return result + (index ? '-' : '') + word.toLowerCase(); + }); + + /** + * Converts `string`, as space separated words, to lower case. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the lower cased string. + * @example + * + * _.lowerCase('--Foo-Bar--'); + * // => 'foo bar' + * + * _.lowerCase('fooBar'); + * // => 'foo bar' + * + * _.lowerCase('__FOO_BAR__'); + * // => 'foo bar' + */ + var lowerCase = createCompounder(function(result, word, index) { + return result + (index ? ' ' : '') + word.toLowerCase(); + }); + + /** + * Converts the first character of `string` to lower case. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.lowerFirst('Fred'); + * // => 'fred' + * + * _.lowerFirst('FRED'); + * // => 'fRED' + */ + var lowerFirst = createCaseFirst('toLowerCase'); + + /** + * Pads `string` on the left and right sides if it's shorter than `length`. + * Padding characters are truncated if they can't be evenly divided by `length`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to pad. + * @param {number} [length=0] The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padded string. + * @example + * + * _.pad('abc', 8); + * // => ' abc ' + * + * _.pad('abc', 8, '_-'); + * // => '_-abc_-_' + * + * _.pad('abc', 3); + * // => 'abc' + */ + function pad(string, length, chars) { + string = toString(string); + length = toInteger(length); + + var strLength = length ? stringSize(string) : 0; + if (!length || strLength >= length) { + return string; + } + var mid = (length - strLength) / 2; + return ( + createPadding(nativeFloor(mid), chars) + + string + + createPadding(nativeCeil(mid), chars) + ); + } + + /** + * Pads `string` on the right side if it's shorter than `length`. Padding + * characters are truncated if they exceed `length`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to pad. + * @param {number} [length=0] The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padded string. + * @example + * + * _.padEnd('abc', 6); + * // => 'abc ' + * + * _.padEnd('abc', 6, '_-'); + * // => 'abc_-_' + * + * _.padEnd('abc', 3); + * // => 'abc' + */ + function padEnd(string, length, chars) { + string = toString(string); + length = toInteger(length); + + var strLength = length ? stringSize(string) : 0; + return (length && strLength < length) + ? (string + createPadding(length - strLength, chars)) + : string; + } + + /** + * Pads `string` on the left side if it's shorter than `length`. Padding + * characters are truncated if they exceed `length`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to pad. + * @param {number} [length=0] The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padded string. + * @example + * + * _.padStart('abc', 6); + * // => ' abc' + * + * _.padStart('abc', 6, '_-'); + * // => '_-_abc' + * + * _.padStart('abc', 3); + * // => 'abc' + */ + function padStart(string, length, chars) { + string = toString(string); + length = toInteger(length); + + var strLength = length ? stringSize(string) : 0; + return (length && strLength < length) + ? (createPadding(length - strLength, chars) + string) + : string; + } + + /** + * Converts `string` to an integer of the specified radix. If `radix` is + * `undefined` or `0`, a `radix` of `10` is used unless `value` is a + * hexadecimal, in which case a `radix` of `16` is used. + * + * **Note:** This method aligns with the + * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category String + * @param {string} string The string to convert. + * @param {number} [radix=10] The radix to interpret `value` by. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {number} Returns the converted integer. + * @example + * + * _.parseInt('08'); + * // => 8 + * + * _.map(['6', '08', '10'], _.parseInt); + * // => [6, 8, 10] + */ + function parseInt(string, radix, guard) { + if (guard || radix == null) { + radix = 0; + } else if (radix) { + radix = +radix; + } + return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0); + } + + /** + * Repeats the given string `n` times. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to repeat. + * @param {number} [n=1] The number of times to repeat the string. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {string} Returns the repeated string. + * @example + * + * _.repeat('*', 3); + * // => '***' + * + * _.repeat('abc', 2); + * // => 'abcabc' + * + * _.repeat('abc', 0); + * // => '' + */ + function repeat(string, n, guard) { + if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) { + n = 1; + } else { + n = toInteger(n); + } + return baseRepeat(toString(string), n); + } + + /** + * Replaces matches for `pattern` in `string` with `replacement`. + * + * **Note:** This method is based on + * [`String#replace`](https://mdn.io/String/replace). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to modify. + * @param {RegExp|string} pattern The pattern to replace. + * @param {Function|string} replacement The match replacement. + * @returns {string} Returns the modified string. + * @example + * + * _.replace('Hi Fred', 'Fred', 'Barney'); + * // => 'Hi Barney' + */ + function replace() { + var args = arguments, + string = toString(args[0]); + + return args.length < 3 ? string : string.replace(args[1], args[2]); + } + + /** + * Converts `string` to + * [snake case](https://en.wikipedia.org/wiki/Snake_case). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the snake cased string. + * @example + * + * _.snakeCase('Foo Bar'); + * // => 'foo_bar' + * + * _.snakeCase('fooBar'); + * // => 'foo_bar' + * + * _.snakeCase('--FOO-BAR--'); + * // => 'foo_bar' + */ + var snakeCase = createCompounder(function(result, word, index) { + return result + (index ? '_' : '') + word.toLowerCase(); + }); + + /** + * Splits `string` by `separator`. + * + * **Note:** This method is based on + * [`String#split`](https://mdn.io/String/split). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to split. + * @param {RegExp|string} separator The separator pattern to split by. + * @param {number} [limit] The length to truncate results to. + * @returns {Array} Returns the string segments. + * @example + * + * _.split('a-b-c', '-', 2); + * // => ['a', 'b'] + */ + function split(string, separator, limit) { + if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) { + separator = limit = undefined; + } + limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0; + if (!limit) { + return []; + } + string = toString(string); + if (string && ( + typeof separator == 'string' || + (separator != null && !isRegExp(separator)) + )) { + separator = baseToString(separator); + if (!separator && hasUnicode(string)) { + return castSlice(stringToArray(string), 0, limit); + } + } + return string.split(separator, limit); + } + + /** + * Converts `string` to + * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage). + * + * @static + * @memberOf _ + * @since 3.1.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the start cased string. + * @example + * + * _.startCase('--foo-bar--'); + * // => 'Foo Bar' + * + * _.startCase('fooBar'); + * // => 'Foo Bar' + * + * _.startCase('__FOO_BAR__'); + * // => 'FOO BAR' + */ + var startCase = createCompounder(function(result, word, index) { + return result + (index ? ' ' : '') + upperFirst(word); + }); + + /** + * Checks if `string` starts with the given target string. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to inspect. + * @param {string} [target] The string to search for. + * @param {number} [position=0] The position to search from. + * @returns {boolean} Returns `true` if `string` starts with `target`, + * else `false`. + * @example + * + * _.startsWith('abc', 'a'); + * // => true + * + * _.startsWith('abc', 'b'); + * // => false + * + * _.startsWith('abc', 'b', 1); + * // => true + */ + function startsWith(string, target, position) { + string = toString(string); + position = position == null + ? 0 + : baseClamp(toInteger(position), 0, string.length); + + target = baseToString(target); + return string.slice(position, position + target.length) == target; + } + + /** + * Creates a compiled template function that can interpolate data properties + * in "interpolate" delimiters, HTML-escape interpolated data properties in + * "escape" delimiters, and execute JavaScript in "evaluate" delimiters. Data + * properties may be accessed as free variables in the template. If a setting + * object is given, it takes precedence over `_.templateSettings` values. + * + * **Note:** In the development build `_.template` utilizes + * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl) + * for easier debugging. + * + * For more information on precompiling templates see + * [lodash's custom builds documentation](https://lodash.com/custom-builds). + * + * For more information on Chrome extension sandboxes see + * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval). + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category String + * @param {string} [string=''] The template string. + * @param {Object} [options={}] The options object. + * @param {RegExp} [options.escape=_.templateSettings.escape] + * The HTML "escape" delimiter. + * @param {RegExp} [options.evaluate=_.templateSettings.evaluate] + * The "evaluate" delimiter. + * @param {Object} [options.imports=_.templateSettings.imports] + * An object to import into the template as free variables. + * @param {RegExp} [options.interpolate=_.templateSettings.interpolate] + * The "interpolate" delimiter. + * @param {string} [options.sourceURL='lodash.templateSources[n]'] + * The sourceURL of the compiled template. + * @param {string} [options.variable='obj'] + * The data object variable name. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Function} Returns the compiled template function. + * @example + * + * // Use the "interpolate" delimiter to create a compiled template. + * var compiled = _.template('hello <%= user %>!'); + * compiled({ 'user': 'fred' }); + * // => 'hello fred!' + * + * // Use the HTML "escape" delimiter to escape data property values. + * var compiled = _.template('<%- value %>'); + * compiled({ 'value': ' + + + +
Number of entities:-
+
+ + + diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/examples/example.es5.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/examples/example.es5.js new file mode 100644 index 00000000..e119773b --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/examples/example.es5.js @@ -0,0 +1,29 @@ +const fs = require('fs') +const join = require('path').join + +const Helper = require('..').Helper + +const helper = new Helper(fs.readFileSync( + './test/resources/Ceco.NET-Architecture-Tm-53.dxf', 'utf-8')) + +// The parsed entities +const { blocks, entities } = helper.parsed +console.log(`parsed: ${blocks.length} blocks, ${entities.length} entities.\n`) + +// Denormalised blocks inserted with transforms applied +console.log(`denormalised: ${helper.denormalised.length} entities.\n`) + +// Group entities by layer. Returns an object with layer names as +// keys to arrays of entities. +const groups = helper.groups +console.log('grouped entities') +console.log('----------------') +Object.keys(groups).forEach(layer => { + console.log(`${layer}: ${groups[layer].length}`) +}) +console.log('\n') + +// Write the SVG +const svg = helper.toSVG() +fs.writeFileSync(join(__dirname, '/example.es5.svg'), svg, 'utf-8') +console.log('SVG written') diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/examples/example.es6.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/examples/example.es6.js new file mode 100644 index 00000000..f16cd529 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/examples/example.es6.js @@ -0,0 +1,29 @@ +import fs from 'fs' +import { join } from 'path' + +import { Helper } from '../src' + +const helper = new Helper(fs.readFileSync( + './test/resources/Ceco.NET-Architecture-Tm-53.dxf', 'utf-8')) + +// The parsed entities +const { blocks, entities } = helper.parsed +console.log(`parsed: ${blocks.length} blocks, ${entities.length} entities.\n`) + +// Denormalised blocks inserted with transforms applied +console.log(`denormalised: ${helper.denormalised.length} entities.\n`) + +// Group entities by layer. Returns an object with layer names as +// keys to arrays of entities. +const groups = helper.groups +console.log('grouped entities') +console.log('----------------') +Object.keys(groups).forEach(layer => { + console.log(`${layer}: ${groups[layer].length}`) +}) +console.log('\n') + +// Write the SVG +const svg = helper.toSVG() +fs.writeFileSync(join(__dirname, '/example.es6.svg'), svg, 'utf-8') +console.log('SVG written') diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/Helper.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/Helper.js new file mode 100644 index 00000000..570eb4db --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/Helper.js @@ -0,0 +1,106 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = void 0; + +var _logger = _interopRequireDefault(require("./util/logger")); + +var _parseString = _interopRequireDefault(require("./parseString")); + +var _denormalise2 = _interopRequireDefault(require("./denormalise")); + +var _toSVG2 = _interopRequireDefault(require("./toSVG")); + +var _toPolylines2 = _interopRequireDefault(require("./toPolylines")); + +var _groupEntitiesByLayer = _interopRequireDefault(require("./groupEntitiesByLayer")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +var Helper = /*#__PURE__*/function () { + function Helper(contents) { + _classCallCheck(this, Helper); + + if (!(typeof contents === 'string')) { + throw Error('Helper constructor expects a DXF string'); + } + + this._contents = contents; + this._parsed = null; + this._denormalised = null; + } + + _createClass(Helper, [{ + key: "parse", + value: function parse() { + this._parsed = (0, _parseString["default"])(this._contents); + + _logger["default"].info('parsed:', this.parsed); + + return this._parsed; + } + }, { + key: "denormalise", + value: function denormalise() { + this._denormalised = (0, _denormalise2["default"])(this.parsed); + + _logger["default"].info('denormalised:', this._denormalised); + + return this._denormalised; + } + }, { + key: "group", + value: function group() { + this._groups = (0, _groupEntitiesByLayer["default"])(this.denormalised); + } + }, { + key: "toSVG", + value: function toSVG() { + return (0, _toSVG2["default"])(this.parsed); + } + }, { + key: "toPolylines", + value: function toPolylines() { + return (0, _toPolylines2["default"])(this.parsed); + } + }, { + key: "parsed", + get: function get() { + if (this._parsed === null) { + this.parse(); + } + + return this._parsed; + } + }, { + key: "denormalised", + get: function get() { + if (!this._denormalised) { + this.denormalise(); + } + + return this._denormalised; + } + }, { + key: "groups", + get: function get() { + if (!this._groups) { + this.group(); + } + + return this._groups; + } + }]); + + return Helper; +}(); + +exports["default"] = Helper; \ No newline at end of file diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/applyTransforms.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/applyTransforms.js new file mode 100644 index 00000000..b26e53e3 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/applyTransforms.js @@ -0,0 +1,54 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = void 0; + +/** + * Apply the transforms to the polyline. + * + * @param polyline the polyline + * @param transform the transforms array + * @returns the transformed polyline + */ +var _default = function _default(polyline, transforms) { + transforms.forEach(function (transform) { + polyline = polyline.map(function (p) { + // Use a copy to avoid side effects + var p2 = [p[0], p[1]]; + + if (transform.scaleX) { + p2[0] = p2[0] * transform.scaleX; + } + + if (transform.scaleY) { + p2[1] = p2[1] * transform.scaleY; + } + + if (transform.rotation) { + var angle = transform.rotation / 180 * Math.PI; + p2 = [p2[0] * Math.cos(angle) - p2[1] * Math.sin(angle), p2[1] * Math.cos(angle) + p2[0] * Math.sin(angle)]; + } + + if (transform.x) { + p2[0] = p2[0] + transform.x; + } + + if (transform.y) { + p2[1] = p2[1] + transform.y; + } // Observed once in a sample DXF - some cad applications + // use negative extruxion Z for flipping + + + if (transform.extrusionZ === -1) { + p2[0] = -p2[0]; + } + + return p2; + }); + }); + return polyline; +}; + +exports["default"] = _default; \ No newline at end of file diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/cli.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/cli.js new file mode 100644 index 00000000..afd3f9d2 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/cli.js @@ -0,0 +1,28 @@ +#!/usr/bin/env node +"use strict"; + +var _commander = _interopRequireDefault(require("commander")); + +var _fs = _interopRequireDefault(require("fs")); + +var _ = require("./"); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +_commander["default"].version(require('../package.json').version).description('Converts a dxf file to a svg file.').arguments(' [svgFile]').option('-v --verbose', 'Verbose output').action(function (dxfFile, svgFile, options) { + var parsed = (0, _.parseString)(_fs["default"].readFileSync(dxfFile, 'utf-8')); + + if (options.verbose) { + var groups = (0, _.groupEntitiesByLayer)((0, _.denormalise)(parsed)); + console.log('[layer : number of entities]'); + Object.keys(groups).forEach(function (layer) { + console.log("".concat(layer, " : ").concat(groups[layer].length)); + }); + } + + _fs["default"].writeFileSync(svgFile || "".concat(dxfFile.split('.').slice(0, -1).join('.'), ".svg"), (0, _.toSVG)(parsed), 'utf-8'); +}).parse(process.argv); + +if (!process.argv.slice(2).length) { + _commander["default"].help(); +} \ No newline at end of file diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/config.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/config.js new file mode 100644 index 00000000..1a7e6e90 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/config.js @@ -0,0 +1,10 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = void 0; +var _default = { + verbose: false +}; +exports["default"] = _default; \ No newline at end of file diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/constants.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/constants.js new file mode 100644 index 00000000..26416597 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/constants.js @@ -0,0 +1,14 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.ZERO_TRANSFORM = void 0; +var ZERO_TRANSFORM = { + x: 0, + y: 0, + xScale: 1, + yScale: 1, + rotation: 0 +}; +exports.ZERO_TRANSFORM = ZERO_TRANSFORM; \ No newline at end of file diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/denormalise.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/denormalise.js new file mode 100644 index 00000000..43cbf070 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/denormalise.js @@ -0,0 +1,160 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = void 0; + +var _lodash = require("lodash"); + +var _logger = _interopRequireDefault(require("./util/logger")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +var _default = function _default(parseResult) { + var blocksByName = parseResult.blocks.reduce(function (acc, b) { + acc[b.name] = b; + return acc; + }, {}); + + var gatherEntities = function gatherEntities(entities, transforms) { + var current = []; + entities.forEach(function (e) { + if (e.type === 'INSERT') { + var _ret = function () { + var _insert$rowCount, _insert$columnCount, _insert$rowSpacing, _insert$columnSpacing, _insert$rotation; + + var insert = e; + var block = blocksByName[insert.block]; + + if (!block) { + _logger["default"].error('no block found for insert. block:', insert.block); + + return { + v: void 0 + }; + } + + var rowCount = (_insert$rowCount = insert.rowCount) !== null && _insert$rowCount !== void 0 ? _insert$rowCount : 1; + var columnCount = (_insert$columnCount = insert.columnCount) !== null && _insert$columnCount !== void 0 ? _insert$columnCount : 1; + var rowSpacing = (_insert$rowSpacing = insert.rowSpacing) !== null && _insert$rowSpacing !== void 0 ? _insert$rowSpacing : 0; + var columnSpacing = (_insert$columnSpacing = insert.columnSpacing) !== null && _insert$columnSpacing !== void 0 ? _insert$columnSpacing : 0; + var rotation = (_insert$rotation = insert.rotation) !== null && _insert$rotation !== void 0 ? _insert$rotation : 0; // It appears that the rectangular array is affected by rotation, but NOT by scale. + + var rowVec, colVec; + + if (rowCount > 1 || columnCount > 1) { + var cos = Math.cos(rotation * Math.PI / 180); + var sin = Math.sin(rotation * Math.PI / 180); + rowVec = { + x: -sin * rowSpacing, + y: cos * rowSpacing + }; + colVec = { + x: cos * columnSpacing, + y: sin * columnSpacing + }; + } else { + rowVec = { + x: 0, + y: 0 + }; + colVec = { + x: 0, + y: 0 + }; + } // For rectangular arrays, add the block entities for each location in the array + + + for (var r = 0; r < rowCount; r++) { + for (var c = 0; c < columnCount; c++) { + // Adjust insert transform by row and column for rectangular arrays + var t = { + x: insert.x + rowVec.x * r + colVec.x * c, + y: insert.y + rowVec.y * r + colVec.y * c, + scaleX: insert.scaleX, + scaleY: insert.scaleY, + scaleZ: insert.scaleZ, + extrusionX: insert.extrusionX, + extrusionY: insert.extrusionY, + extrusionZ: insert.extrusionZ, + rotation: insert.rotation + }; // Add the insert transform and recursively add entities + + var transforms2 = transforms.slice(0); + transforms2.push(t); // Use the insert layer + + var blockEntities = block.entities.map(function (be) { + var be2 = (0, _lodash.cloneDeep)(be); + be2.layer = insert.layer; // https://github.com/bjnortier/dxf/issues/52 + // See Issue 52. If we don't modify the + // entity coordinates here it creates an issue with the + // transformation matrices (which are only applied AFTER + // block insertion modifications has been applied). + + switch (be2.type) { + case 'LINE': + { + be2.start.x -= block.x; + be2.start.y -= block.y; + be2.end.x -= block.x; + be2.end.y -= block.y; + break; + } + + case 'LWPOLYLINE': + case 'POLYLINE': + { + be2.vertices.forEach(function (v) { + v.x -= block.x; + v.y -= block.y; + }); + break; + } + + case 'CIRCLE': + case 'ELLIPSE': + case 'ARC': + { + be2.x -= block.x; + be2.y -= block.y; + break; + } + + case 'SPLINE': + { + be2.controlPoints.forEach(function (cp) { + cp.x -= block.x; + cp.y -= block.y; + }); + break; + } + } + + return be2; + }); + current = current.concat(gatherEntities(blockEntities, transforms2)); + } + } + }(); + + if (_typeof(_ret) === "object") return _ret.v; + } else { + // Top-level entity. Clone and add the transforms + // The transforms are reversed so they occur in + // order of application - i.e. the transform of the + // top-level insert is applied last + var e2 = (0, _lodash.cloneDeep)(e); + e2.transforms = transforms.slice().reverse(); + current.push(e2); + } + }); + return current; + }; + + return gatherEntities(parseResult.entities, []); +}; + +exports["default"] = _default; \ No newline at end of file diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/entityToPolyline.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/entityToPolyline.js new file mode 100644 index 00000000..564b544c --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/entityToPolyline.js @@ -0,0 +1,205 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = exports.interpolateBSpline = void 0; + +var _bSpline = _interopRequireDefault(require("./util/bSpline")); + +var _logger = _interopRequireDefault(require("./util/logger")); + +var _createArcForLWPolyline = _interopRequireDefault(require("./util/createArcForLWPolyline")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +/** + * Rotate a set of points. + * + * @param points the points + * @param angle the rotation angle + */ +var rotate = function rotate(points, angle) { + return points.map(function (p) { + return [p[0] * Math.cos(angle) - p[1] * Math.sin(angle), p[1] * Math.cos(angle) + p[0] * Math.sin(angle)]; + }); +}; +/** + * Interpolate an ellipse + * @param cx center X + * @param cy center Y + * @param rx radius X + * @param ry radius Y + * @param start start angle in radians + * @param start end angle in radians + */ + + +var interpolateEllipse = function interpolateEllipse(cx, cy, rx, ry, start, end, rotationAngle) { + if (end < start) { + end += Math.PI * 2; + } // ----- Relative points ----- + // Start point + + + var points = []; + var dTheta = Math.PI * 2 / 72; + var EPS = 1e-6; + + for (var theta = start; theta < end - EPS; theta += dTheta) { + points.push([Math.cos(theta) * rx, Math.sin(theta) * ry]); + } + + points.push([Math.cos(end) * rx, Math.sin(end) * ry]); // ----- Rotate ----- + + if (rotationAngle) { + points = rotate(points, rotationAngle); + } // ----- Offset center ----- + + + points = points.map(function (p) { + return [cx + p[0], cy + p[1]]; + }); + return points; +}; +/** + * Interpolate a b-spline. The algorithm examins the knot vector + * to create segments for interpolation. The parameterisation value + * is re-normalised back to [0,1] as that is what the lib expects ( + * and t i de-normalised in the b-spline library) + * + * @param controlPoints the control points + * @param degree the b-spline degree + * @param knots the knot vector + * @returns the polyline + */ + + +var interpolateBSpline = function interpolateBSpline(controlPoints, degree, knots, interpolationsPerSplineSegment) { + var polyline = []; + var controlPointsForLib = controlPoints.map(function (p) { + return [p.x, p.y]; + }); + var segmentTs = [knots[degree]]; + var domain = [knots[degree], knots[knots.length - 1 - degree]]; + + for (var k = degree + 1; k < knots.length - degree; ++k) { + if (segmentTs[segmentTs.length - 1] !== knots[k]) { + segmentTs.push(knots[k]); + } + } + + interpolationsPerSplineSegment = interpolationsPerSplineSegment || 25; + + for (var i = 1; i < segmentTs.length; ++i) { + var uMin = segmentTs[i - 1]; + var uMax = segmentTs[i]; + + for (var _k = 0; _k <= interpolationsPerSplineSegment; ++_k) { + var u = _k / interpolationsPerSplineSegment * (uMax - uMin) + uMin; // Clamp t to 0, 1 to handle numerical precision issues + + var t = (u - domain[0]) / (domain[1] - domain[0]); + t = Math.max(t, 0); + t = Math.min(t, 1); + var p = (0, _bSpline["default"])(t, degree, controlPointsForLib, knots); + polyline.push(p); + } + } + + return polyline; +}; +/** + * Convert a parsed DXF entity to a polyline. These can be used to render the + * the DXF in SVG, Canvas, WebGL etc., without depending on native support + * of primitive objects (ellispe, spline etc.) + */ + + +exports.interpolateBSpline = interpolateBSpline; + +var _default = function _default(entity, options) { + options = options || {}; + var polyline; + + if (entity.type === 'LINE') { + polyline = [[entity.start.x, entity.start.y], [entity.end.x, entity.end.y]]; + } + + if (entity.type === 'LWPOLYLINE' || entity.type === 'POLYLINE') { + polyline = []; + + if (entity.polygonMesh || entity.polyfaceMesh) {// Do not attempt to render meshes + } else if (entity.vertices.length) { + if (entity.closed) { + entity.vertices = entity.vertices.concat(entity.vertices[0]); + } + + for (var i = 0, il = entity.vertices.length; i < il - 1; ++i) { + var from = [entity.vertices[i].x, entity.vertices[i].y]; + var to = [entity.vertices[i + 1].x, entity.vertices[i + 1].y]; + polyline.push(from); + + if (entity.vertices[i].bulge) { + polyline = polyline.concat((0, _createArcForLWPolyline["default"])(from, to, entity.vertices[i].bulge)); + } // The last iteration of the for loop + + + if (i === il - 2) { + polyline.push(to); + } + } + } else { + _logger["default"].warn('Polyline entity with no vertices'); + } + } + + if (entity.type === 'CIRCLE') { + polyline = interpolateEllipse(entity.x, entity.y, entity.r, entity.r, 0, Math.PI * 2); + + if (entity.extrusionZ === -1) { + polyline = polyline.map(function (p) { + return [-p[0], p[1]]; + }); + } + } + + if (entity.type === 'ELLIPSE') { + var rx = Math.sqrt(entity.majorX * entity.majorX + entity.majorY * entity.majorY); + var ry = entity.axisRatio * rx; + var majorAxisRotation = -Math.atan2(-entity.majorY, entity.majorX); + polyline = interpolateEllipse(entity.x, entity.y, rx, ry, entity.startAngle, entity.endAngle, majorAxisRotation); + + if (entity.extrusionZ === -1) { + polyline = polyline.map(function (p) { + return [-p[0], p[1]]; + }); + } + } + + if (entity.type === 'ARC') { + // Why on earth DXF has degree start & end angles for arc, + // and radian start & end angles for ellipses is a mystery + polyline = interpolateEllipse(entity.x, entity.y, entity.r, entity.r, entity.startAngle, entity.endAngle, undefined, false); // I kid you not, ARCs and ELLIPSEs handle this differently, + // as evidenced by how AutoCAD actually renders these entities + + if (entity.extrusionZ === -1) { + polyline = polyline.map(function (p) { + return [-p[0], p[1]]; + }); + } + } + + if (entity.type === 'SPLINE') { + polyline = interpolateBSpline(entity.controlPoints, entity.degree, entity.knots, options.interpolationsPerSplineSegment); + } + + if (!polyline) { + _logger["default"].warn('unsupported entity for converting to polyline:', entity.type); + + return []; + } + + return polyline; +}; + +exports["default"] = _default; \ No newline at end of file diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/getRGBForEntity.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/getRGBForEntity.js new file mode 100644 index 00000000..21c8e314 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/getRGBForEntity.js @@ -0,0 +1,35 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = void 0; + +var _colors = _interopRequireDefault(require("./util/colors")); + +var _logger = _interopRequireDefault(require("./util/logger")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +var _default = function _default(layers, entity) { + var layerTable = layers[entity.layer]; + + if (layerTable) { + var colorNumber = 'colorNumber' in entity ? entity.colorNumber : layerTable.colorNumber; + var rgb = _colors["default"][colorNumber]; + + if (rgb) { + return rgb; + } else { + _logger["default"].warn('Color index', colorNumber, 'invalid, defaulting to black'); + + return [0, 0, 0]; + } + } else { + _logger["default"].warn('no layer table for layer:' + entity.layer); + + return [0, 0, 0]; + } +}; + +exports["default"] = _default; \ No newline at end of file diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/groupEntitiesByLayer.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/groupEntitiesByLayer.js new file mode 100644 index 00000000..00f5d655 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/groupEntitiesByLayer.js @@ -0,0 +1,21 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = void 0; + +var _default = function _default(entities) { + return entities.reduce(function (acc, entity) { + var layer = entity.layer; + + if (!acc[layer]) { + acc[layer] = []; + } + + acc[layer].push(entity); + return acc; + }, {}); +}; + +exports["default"] = _default; \ No newline at end of file diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/handlers/blocks.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/handlers/blocks.js new file mode 100644 index 00000000..045bac2b --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/handlers/blocks.js @@ -0,0 +1,70 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = void 0; + +var _entities = _interopRequireDefault(require("./entities")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +var _default = function _default(tuples) { + var state; + var blocks = []; + var block; + var entitiesTuples = []; + tuples.forEach(function (tuple) { + var type = tuple[0]; + var value = tuple[1]; + + if (value === 'BLOCK') { + state = 'block'; + block = {}; + entitiesTuples = []; + blocks.push(block); + } else if (value === 'ENDBLK') { + if (state === 'entities') { + block.entities = (0, _entities["default"])(entitiesTuples); + } else { + block.entities = []; + } + + entitiesTuples = undefined; + state = undefined; + } else if (state === 'block' && type !== 0) { + switch (type) { + case 1: + block.xref = value; + break; + + case 2: + block.name = value; + break; + + case 10: + block.x = value; + break; + + case 20: + block.y = value; + break; + + case 30: + block.z = value; + break; + + default: + break; + } + } else if (state === 'block' && type === 0) { + state = 'entities'; + entitiesTuples.push(tuple); + } else if (state === 'entities') { + entitiesTuples.push(tuple); + } + }); + return blocks; +}; + +exports["default"] = _default; \ No newline at end of file diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/handlers/entities.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/handlers/entities.js new file mode 100644 index 00000000..5d3b4eec --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/handlers/entities.js @@ -0,0 +1,91 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = void 0; + +var _logger = _interopRequireDefault(require("../util/logger")); + +var _point = _interopRequireDefault(require("./entity/point")); + +var _line = _interopRequireDefault(require("./entity/line")); + +var _lwpolyline = _interopRequireDefault(require("./entity/lwpolyline")); + +var _polyline = _interopRequireDefault(require("./entity/polyline")); + +var _vertex = _interopRequireDefault(require("./entity/vertex")); + +var _circle = _interopRequireDefault(require("./entity/circle")); + +var _arc = _interopRequireDefault(require("./entity/arc")); + +var _ellipse = _interopRequireDefault(require("./entity/ellipse")); + +var _spline = _interopRequireDefault(require("./entity/spline")); + +var _solid = _interopRequireDefault(require("./entity/solid")); + +var _mtext = _interopRequireDefault(require("./entity/mtext")); + +var _insert = _interopRequireDefault(require("./entity/insert")); + +var _threeDFace = _interopRequireDefault(require("./entity/threeDFace")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +var handlers = [_point["default"], _line["default"], _lwpolyline["default"], _polyline["default"], _vertex["default"], _circle["default"], _arc["default"], _ellipse["default"], _spline["default"], _solid["default"], _mtext["default"], _insert["default"], _threeDFace["default"]].reduce(function (acc, mod) { + acc[mod.TYPE] = mod; + return acc; +}, {}); + +var _default = function _default(tuples) { + var entities = []; + var entityGroups = []; + var currentEntityTuples; // First group them together for easy processing + + tuples.forEach(function (tuple) { + var type = tuple[0]; + + if (type === 0) { + currentEntityTuples = []; + entityGroups.push(currentEntityTuples); + } + + currentEntityTuples.push(tuple); + }); + var currentPolyline; + entityGroups.forEach(function (tuples) { + var entityType = tuples[0][1]; + var contentTuples = tuples.slice(1); + + if (handlers[entityType] !== undefined) { + var e = handlers[entityType].process(contentTuples); // "POLYLINE" cannot be parsed in isolation, it is followed by + // N "VERTEX" entities and ended with a "SEQEND" entity. + // Essentially we convert POLYLINE to LWPOLYLINE - the extra + // vertex flags are not supported + + if (entityType === 'POLYLINE') { + currentPolyline = e; + entities.push(e); + } else if (entityType === 'VERTEX') { + if (currentPolyline) { + currentPolyline.vertices.push(e); + } else { + _logger["default"].error('ignoring invalid VERTEX entity'); + } + } else if (entityType === 'SEQEND') { + currentPolyline = undefined; + } else { + // All other entities + entities.push(e); + } + } else { + _logger["default"].warn('unsupported type in ENTITIES section:', entityType); + } + }); + return entities; +}; + +exports["default"] = _default; \ No newline at end of file diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/handlers/entity/arc.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/handlers/entity/arc.js new file mode 100644 index 00000000..eb574a59 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/handlers/entity/arc.js @@ -0,0 +1,67 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = exports.process = exports.TYPE = void 0; + +var _common = _interopRequireDefault(require("./common")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +var TYPE = 'ARC'; +exports.TYPE = TYPE; + +var process = function process(tuples) { + return tuples.reduce(function (entity, tuple) { + var type = tuple[0]; + var value = tuple[1]; + + switch (type) { + case 10: + entity.x = value; + break; + + case 20: + entity.y = value; + break; + + case 30: + entity.z = value; + break; + + case 39: + entity.thickness = value; + break; + + case 40: + entity.r = value; + break; + + case 50: + // *Someone* decided that ELLIPSE angles are in radians but + // ARC angles are in degrees + entity.startAngle = value / 180 * Math.PI; + break; + + case 51: + entity.endAngle = value / 180 * Math.PI; + break; + + default: + Object.assign(entity, (0, _common["default"])(type, value)); + break; + } + + return entity; + }, { + type: TYPE + }); +}; + +exports.process = process; +var _default = { + TYPE: TYPE, + process: process +}; +exports["default"] = _default; \ No newline at end of file diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/handlers/entity/circle.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/handlers/entity/circle.js new file mode 100644 index 00000000..0fb559a9 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/handlers/entity/circle.js @@ -0,0 +1,53 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = exports.process = exports.TYPE = void 0; + +var _common = _interopRequireDefault(require("./common")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +var TYPE = 'CIRCLE'; +exports.TYPE = TYPE; + +var process = function process(tuples) { + return tuples.reduce(function (entity, tuple) { + var type = tuple[0]; + var value = tuple[1]; + + switch (type) { + case 10: + entity.x = value; + break; + + case 20: + entity.y = value; + break; + + case 30: + entity.z = value; + break; + + case 40: + entity.r = value; + break; + + default: + Object.assign(entity, (0, _common["default"])(type, value)); + break; + } + + return entity; + }, { + type: TYPE + }); +}; + +exports.process = process; +var _default = { + TYPE: TYPE, + process: process +}; +exports["default"] = _default; \ No newline at end of file diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/handlers/entity/common.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/handlers/entity/common.js new file mode 100644 index 00000000..d393b58e --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/handlers/entity/common.js @@ -0,0 +1,64 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = void 0; + +var _default = function _default(type, value) { + switch (type) { + case 6: + // Linetype name (present if not BYLAYER). + // The special name BYBLOCK indicates a + // floating linetype. (optional) + return { + lineTypeName: value + }; + + case 8: + return { + layer: value + }; + + case 48: + // Linetype scale (optional) + return { + lineTypeScale: value + }; + + case 60: + // Object visibility (optional): 0 = visible, 1 = invisible. + return { + visible: value === 0 + }; + + case 62: + // Color number (present if not BYLAYER). + // Zero indicates the BYBLOCK (floating) color. + // 256 indicates BYLAYER. + // A negative value indicates that the layer is turned off. (optional) + return { + colorNumber: value + }; + + case 210: + return { + extrusionX: value + }; + + case 220: + return { + extrusionY: value + }; + + case 230: + return { + extrusionZ: value + }; + + default: + return {}; + } +}; + +exports["default"] = _default; \ No newline at end of file diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/handlers/entity/ellipse.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/handlers/entity/ellipse.js new file mode 100644 index 00000000..45a2ec5a --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/handlers/entity/ellipse.js @@ -0,0 +1,73 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = exports.process = exports.TYPE = void 0; + +var _common = _interopRequireDefault(require("./common")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +var TYPE = 'ELLIPSE'; +exports.TYPE = TYPE; + +var process = function process(tuples) { + return tuples.reduce(function (entity, tuple) { + var type = tuple[0]; + var value = tuple[1]; + + switch (type) { + case 10: + entity.x = value; + break; + + case 11: + entity.majorX = value; + break; + + case 20: + entity.y = value; + break; + + case 21: + entity.majorY = value; + break; + + case 30: + entity.z = value; + break; + + case 31: + entity.majorZ = value; + break; + + case 40: + entity.axisRatio = value; + break; + + case 41: + entity.startAngle = value; + break; + + case 42: + entity.endAngle = value; + break; + + default: + Object.assign(entity, (0, _common["default"])(type, value)); + break; + } + + return entity; + }, { + type: TYPE + }); +}; + +exports.process = process; +var _default = { + TYPE: TYPE, + process: process +}; +exports["default"] = _default; \ No newline at end of file diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/handlers/entity/insert.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/handlers/entity/insert.js new file mode 100644 index 00000000..acf02207 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/handlers/entity/insert.js @@ -0,0 +1,97 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = exports.process = exports.TYPE = void 0; + +var _common = _interopRequireDefault(require("./common")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +var TYPE = 'INSERT'; +exports.TYPE = TYPE; + +var process = function process(tuples) { + return tuples.reduce(function (entity, tuple) { + var type = tuple[0]; + var value = tuple[1]; + + switch (type) { + case 2: + entity.block = value; + break; + + case 10: + entity.x = value; + break; + + case 20: + entity.y = value; + break; + + case 30: + entity.z = value; + break; + + case 41: + entity.scaleX = value; + break; + + case 42: + entity.scaleY = value; + break; + + case 43: + entity.scaleZ = value; + break; + + case 44: + entity.columnSpacing = value; + break; + + case 45: + entity.rowSpacing = value; + break; + + case 50: + entity.rotation = value; + break; + + case 70: + entity.columnCount = value; + break; + + case 71: + entity.rowCount = value; + break; + + case 210: + entity.extrusionX = value; + break; + + case 220: + entity.extrusionY = value; + break; + + case 230: + entity.extrusionZ = value; + break; + + default: + Object.assign(entity, (0, _common["default"])(type, value)); + break; + } + + return entity; + }, { + type: TYPE + }); +}; + +exports.process = process; +var _default = { + TYPE: TYPE, + process: process +}; +exports["default"] = _default; \ No newline at end of file diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/handlers/entity/line.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/handlers/entity/line.js new file mode 100644 index 00000000..d825d216 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/handlers/entity/line.js @@ -0,0 +1,67 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = exports.process = exports.TYPE = void 0; + +var _common = _interopRequireDefault(require("./common")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +var TYPE = 'LINE'; +exports.TYPE = TYPE; + +var process = function process(tuples) { + return tuples.reduce(function (entity, tuple) { + var type = tuple[0]; + var value = tuple[1]; + + switch (type) { + case 10: + entity.start.x = value; + break; + + case 20: + entity.start.y = value; + break; + + case 30: + entity.start.z = value; + break; + + case 39: + entity.thickness = value; + break; + + case 11: + entity.end.x = value; + break; + + case 21: + entity.end.y = value; + break; + + case 31: + entity.end.z = value; + break; + + default: + Object.assign(entity, (0, _common["default"])(type, value)); + break; + } + + return entity; + }, { + type: TYPE, + start: {}, + end: {} + }); +}; + +exports.process = process; +var _default = { + TYPE: TYPE, + process: process +}; +exports["default"] = _default; \ No newline at end of file diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/handlers/entity/lwpolyline.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/handlers/entity/lwpolyline.js new file mode 100644 index 00000000..751b5cbf --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/handlers/entity/lwpolyline.js @@ -0,0 +1,64 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = exports.process = exports.TYPE = void 0; + +var _common = _interopRequireDefault(require("./common")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +var TYPE = 'LWPOLYLINE'; +exports.TYPE = TYPE; + +var process = function process(tuples) { + var vertex; + return tuples.reduce(function (entity, tuple) { + var type = tuple[0]; + var value = tuple[1]; + + switch (type) { + case 70: + entity.closed = (value & 1) === 1; + break; + + case 10: + vertex = { + x: value, + y: 0 + }; + entity.vertices.push(vertex); + break; + + case 20: + vertex.y = value; + break; + + case 39: + entity.thickness = value; + break; + + case 42: + // Bulge (multiple entries; one entry for each vertex) (optional; default = 0). + vertex.bulge = value; + break; + + default: + Object.assign(entity, (0, _common["default"])(type, value)); + break; + } + + return entity; + }, { + type: TYPE, + vertices: [] + }); +}; + +exports.process = process; +var _default = { + TYPE: TYPE, + process: process +}; +exports["default"] = _default; \ No newline at end of file diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/handlers/entity/mtext.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/handlers/entity/mtext.js new file mode 100644 index 00000000..0a74003c --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/handlers/entity/mtext.js @@ -0,0 +1,92 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = exports.process = exports.TYPE = void 0; + +var _common = _interopRequireDefault(require("./common")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +var TYPE = 'MTEXT'; +exports.TYPE = TYPE; +var simpleCodes = { + 10: 'x', + 20: 'y', + 30: 'z', + 40: 'nominalTextHeight', + 41: 'refRectangleWidth', + 71: 'attachmentPoint', + 72: 'drawingDirection', + 7: 'styleName', + 11: 'xAxisX', + 21: 'xAxisY', + 31: 'xAxisZ', + 42: 'horizontalWidth', + 43: 'verticalHeight', + 73: 'lineSpacingStyle', + 44: 'lineSpacingFactor', + 90: 'backgroundFill', + 420: 'bgColorRGB0', + 421: 'bgColorRGB1', + 422: 'bgColorRGB2', + 423: 'bgColorRGB3', + 424: 'bgColorRGB4', + 425: 'bgColorRGB5', + 426: 'bgColorRGB6', + 427: 'bgColorRGB7', + 428: 'bgColorRGB8', + 429: 'bgColorRGB9', + 430: 'bgColorName0', + 431: 'bgColorName1', + 432: 'bgColorName2', + 433: 'bgColorName3', + 434: 'bgColorName4', + 435: 'bgColorName5', + 436: 'bgColorName6', + 437: 'bgColorName7', + 438: 'bgColorName8', + 439: 'bgColorName9', + 45: 'fillBoxStyle', + 63: 'bgFillColor', + 441: 'bgFillTransparency', + 75: 'columnType', + 76: 'columnCount', + 78: 'columnFlowReversed', + 79: 'columnAutoheight', + 48: 'columnWidth', + 49: 'columnGutter', + 50: 'columnHeights' +}; + +var process = function process(tuples) { + return tuples.reduce(function (entity, tuple) { + var type = tuple[0]; + var value = tuple[1]; + + if (simpleCodes[type] !== undefined) { + entity[simpleCodes[type]] = value; + } else if (type === 1 || type === 3) { + entity.string += value; + } else if (type === 50) { + // Rotation angle in radians + entity.xAxisX = Math.cos(value); + entity.xAxisY = Math.sin(value); + } else { + Object.assign(entity, (0, _common["default"])(type, value)); + } + + return entity; + }, { + type: TYPE, + string: '' + }); +}; + +exports.process = process; +var _default = { + TYPE: TYPE, + process: process +}; +exports["default"] = _default; \ No newline at end of file diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/handlers/entity/point.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/handlers/entity/point.js new file mode 100644 index 00000000..66977754 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/handlers/entity/point.js @@ -0,0 +1,53 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = exports.process = exports.TYPE = void 0; + +var _common = _interopRequireDefault(require("./common")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +var TYPE = 'POINT'; +exports.TYPE = TYPE; + +var process = function process(tuples) { + return tuples.reduce(function (entity, tuple) { + var type = tuple[0]; + var value = tuple[1]; + + switch (type) { + case 10: + entity.x = value; + break; + + case 20: + entity.y = value; + break; + + case 30: + entity.z = value; + break; + + case 39: + entity.thickness = value; + break; + + default: + Object.assign(entity, (0, _common["default"])(type, value)); + break; + } + + return entity; + }, { + type: TYPE + }); +}; + +exports.process = process; +var _default = { + TYPE: TYPE, + process: process +}; +exports["default"] = _default; \ No newline at end of file diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/handlers/entity/polyline.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/handlers/entity/polyline.js new file mode 100644 index 00000000..cdb79c72 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/handlers/entity/polyline.js @@ -0,0 +1,48 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = exports.process = exports.TYPE = void 0; + +var _common = _interopRequireDefault(require("./common")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +var TYPE = 'POLYLINE'; +exports.TYPE = TYPE; + +var process = function process(tuples) { + return tuples.reduce(function (entity, tuple) { + var type = tuple[0]; + var value = tuple[1]; + + switch (type) { + case 70: + entity.closed = (value & 1) === 1; + entity.polygonMesh = (value & 16) === 16; + entity.polyfaceMesh = (value & 64) === 64; + break; + + case 39: + entity.thickness = value; + break; + + default: + Object.assign(entity, (0, _common["default"])(type, value)); + break; + } + + return entity; + }, { + type: TYPE, + vertices: [] + }); +}; + +exports.process = process; +var _default = { + TYPE: TYPE, + process: process +}; +exports["default"] = _default; \ No newline at end of file diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/handlers/entity/solid.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/handlers/entity/solid.js new file mode 100644 index 00000000..273af25c --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/handlers/entity/solid.js @@ -0,0 +1,90 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = exports.process = exports.TYPE = void 0; + +var _common = _interopRequireDefault(require("./common")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +var TYPE = 'SOLID'; +exports.TYPE = TYPE; + +var process = function process(tuples) { + return tuples.reduce(function (entity, tuple) { + var type = tuple[0]; + var value = tuple[1]; + + switch (type) { + case 10: + entity.corners[0].x = value; + break; + + case 20: + entity.corners[0].y = value; + break; + + case 30: + entity.corners[0].z = value; + break; + + case 11: + entity.corners[1].x = value; + break; + + case 21: + entity.corners[1].y = value; + break; + + case 31: + entity.corners[1].z = value; + break; + + case 12: + entity.corners[2].x = value; + break; + + case 22: + entity.corners[2].y = value; + break; + + case 32: + entity.corners[2].z = value; + break; + + case 13: + entity.corners[3].x = value; + break; + + case 23: + entity.corners[3].y = value; + break; + + case 33: + entity.corners[3].z = value; + break; + + case 39: + entity.thickness = value; + break; + + default: + Object.assign(entity, (0, _common["default"])(type, value)); + break; + } + + return entity; + }, { + type: TYPE, + corners: [{}, {}, {}, {}] + }); +}; + +exports.process = process; +var _default = { + TYPE: TYPE, + process: process +}; +exports["default"] = _default; \ No newline at end of file diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/handlers/entity/spline.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/handlers/entity/spline.js new file mode 100644 index 00000000..c3e7d2db --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/handlers/entity/spline.js @@ -0,0 +1,99 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = exports.process = exports.TYPE = void 0; + +var _common = _interopRequireDefault(require("./common")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +var TYPE = 'SPLINE'; +exports.TYPE = TYPE; + +var process = function process(tuples) { + var controlPoint; + return tuples.reduce(function (entity, tuple) { + var type = tuple[0]; + var value = tuple[1]; + + switch (type) { + case 10: + controlPoint = { + x: value, + y: 0 + }; + entity.controlPoints.push(controlPoint); + break; + + case 20: + controlPoint.y = value; + break; + + case 30: + controlPoint.z = value; + break; + + case 40: + entity.knots.push(value); + break; + + case 42: + entity.knotTolerance = value; + break; + + case 43: + entity.controlPointTolerance = value; + break; + + case 44: + entity.fitTolerance = value; + break; + + case 70: + // Spline flag (bit coded): + // 1 = Closed spline + // 2 = Periodic spline + // 4 = Rational spline + // 8 = Planar + // 16 = Linear (planar bit is also set) + entity.flag = value; + entity.closed = (value & 1) === 1; + break; + + case 71: + entity.degree = value; + break; + + case 72: + entity.numberOfKnots = value; + break; + + case 73: + entity.numberOfControlPoints = value; + break; + + case 74: + entity.numberOfFitPoints = value; + break; + + default: + Object.assign(entity, (0, _common["default"])(type, value)); + break; + } + + return entity; + }, { + type: TYPE, + controlPoints: [], + knots: [] + }); +}; + +exports.process = process; +var _default = { + TYPE: TYPE, + process: process +}; +exports["default"] = _default; \ No newline at end of file diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/handlers/entity/threeDFace.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/handlers/entity/threeDFace.js new file mode 100644 index 00000000..2ad7291a --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/handlers/entity/threeDFace.js @@ -0,0 +1,86 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = exports.process = exports.TYPE = void 0; + +var _common = _interopRequireDefault(require("./common")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +var TYPE = '3DFACE'; +exports.TYPE = TYPE; + +var process = function process(tuples) { + return tuples.reduce(function (entity, tuple) { + var type = tuple[0]; + var value = tuple[1]; + + switch (type) { + case 10: + entity.vertices[0].x = value; + break; + + case 20: + entity.vertices[0].y = value; + break; + + case 30: + entity.vertices[0].z = value; + break; + + case 11: + entity.vertices[1].x = value; + break; + + case 21: + entity.vertices[1].y = value; + break; + + case 31: + entity.vertices[1].z = value; + break; + + case 12: + entity.vertices[2].x = value; + break; + + case 22: + entity.vertices[2].y = value; + break; + + case 32: + entity.vertices[2].z = value; + break; + + case 13: + entity.vertices[3].x = value; + break; + + case 23: + entity.vertices[3].y = value; + break; + + case 33: + entity.vertices[3].z = value; + break; + + default: + Object.assign(entity, (0, _common["default"])(type, value)); + break; + } + + return entity; + }, { + type: TYPE, + vertices: [{}, {}, {}, {}] + }); +}; + +exports.process = process; +var _default = { + TYPE: TYPE, + process: process +}; +exports["default"] = _default; \ No newline at end of file diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/handlers/entity/vertex.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/handlers/entity/vertex.js new file mode 100644 index 00000000..ff822d32 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/handlers/entity/vertex.js @@ -0,0 +1,45 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = exports.process = exports.TYPE = void 0; +var TYPE = 'VERTEX'; +exports.TYPE = TYPE; + +var process = function process(tuples) { + return tuples.reduce(function (entity, tuple) { + var type = tuple[0]; + var value = tuple[1]; + + switch (type) { + case 10: + entity.x = value; + break; + + case 20: + entity.y = value; + break; + + case 30: + entity.z = value; + break; + + case 42: + entity.bulge = value; + break; + + default: + break; + } + + return entity; + }, {}); +}; + +exports.process = process; +var _default = { + TYPE: TYPE, + process: process +}; +exports["default"] = _default; \ No newline at end of file diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/handlers/header.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/handlers/header.js new file mode 100644 index 00000000..b67b415e --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/handlers/header.js @@ -0,0 +1,82 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = void 0; + +var _default = function _default(tuples) { + var state; + var header = {}; + tuples.forEach(function (tuple) { + var type = tuple[0]; + var value = tuple[1]; + + switch (value) { + case '$MEASUREMENT': + { + state = 'measurement'; + break; + } + + case '$INSUNITS': + { + state = 'insUnits'; + break; + } + + case '$EXTMIN': + header.extMin = {}; + state = 'extMin'; + break; + + case '$EXTMAX': + header.extMax = {}; + state = 'extMax'; + break; + + default: + switch (state) { + case 'extMin': + case 'extMax': + { + switch (type) { + case 10: + header[state].x = value; + break; + + case 20: + header[state].y = value; + break; + + case 30: + header[state].z = value; + state = undefined; + break; + } + + break; + } + + case 'measurement': + case 'insUnits': + { + switch (type) { + case 70: + { + header[state] = value; + state = undefined; + break; + } + } + + break; + } + } + + } + }); + return header; +}; + +exports["default"] = _default; \ No newline at end of file diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/handlers/tables.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/handlers/tables.js new file mode 100644 index 00000000..6500f840 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/handlers/tables.js @@ -0,0 +1,162 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = void 0; + +var _logger = _interopRequireDefault(require("../util/logger")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +var layerHandler = function layerHandler(tuples) { + return tuples.reduce(function (layer, tuple) { + var type = tuple[0]; + var value = tuple[1]; // https://www.autodesk.com/techpubs/autocad/acad2000/dxf/layer_dxf_04.htm + + switch (type) { + case 2: + layer.name = value; + break; + + case 6: + layer.lineTypeName = value; + break; + + case 62: + layer.colorNumber = value; + break; + + case 70: + layer.flags = value; + break; + + case 290: + layer.plot = parseInt(value) !== 0; + break; + + case 370: + layer.lineWeightEnum = value; + break; + + default: + } + + return layer; + }, { + type: 'LAYER' + }); +}; + +var styleHandler = function styleHandler(tuples) { + return tuples.reduce(function (style, tuple) { + var type = tuple[0]; + var value = tuple[1]; + + switch (type) { + case 2: + style.name = value; + break; + + case 6: + style.lineTypeName = value; + break; + + case 40: + style.fixedTextHeight = value; + break; + + case 41: + style.widthFactor = value; + break; + + case 50: + style.obliqueAngle = value; + break; + + case 71: + style.flags = value; + break; + + case 42: + style.lastHeightUsed = value; + break; + + case 3: + style.primaryFontFileName = value; + break; + + case 4: + style.bigFontFileName = value; + break; + + default: + } + + return style; + }, { + type: 'STYLE' + }); +}; + +var tableHandler = function tableHandler(tuples, tableType, handler) { + var tableRowsTuples = []; + var tableRowTuples; + tuples.forEach(function (tuple) { + var type = tuple[0]; + var value = tuple[1]; + + if ((type === 0 || type === 2) && value === tableType) { + tableRowTuples = []; + tableRowsTuples.push(tableRowTuples); + } else { + tableRowTuples.push(tuple); + } + }); + return tableRowsTuples.reduce(function (acc, rowTuples) { + var tableRow = handler(rowTuples); + + if (tableRow.name) { + acc[tableRow.name] = tableRow; + } else { + _logger["default"].warn('table row without name:', tableRow); + } + + return acc; + }, {}); +}; + +var _default = function _default(tuples) { + var tableGroups = []; + var tableTuples; + tuples.forEach(function (tuple) { + // const type = tuple[0]; + var value = tuple[1]; + + if (value === 'TABLE') { + tableTuples = []; + tableGroups.push(tableTuples); + } else if (value === 'ENDTAB') { + tableGroups.push(tableTuples); + } else { + tableTuples.push(tuple); + } + }); + var stylesTuples = []; + var layersTuples = []; + tableGroups.forEach(function (group) { + if (group[0][1] === 'STYLE') { + stylesTuples = group; + } else if (group[0][1] === 'LTYPE') { + _logger["default"].warn('LTYPE in tables not supported'); + } else if (group[0][1] === 'LAYER') { + layersTuples = group; + } + }); + return { + layers: tableHandler(layersTuples, 'LAYER', layerHandler), + styles: tableHandler(stylesTuples, 'STYLE', styleHandler) + }; +}; + +exports["default"] = _default; \ No newline at end of file diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/index.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/index.js new file mode 100644 index 00000000..78e88fbc --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/index.js @@ -0,0 +1,71 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "config", { + enumerable: true, + get: function get() { + return _config["default"]; + } +}); +Object.defineProperty(exports, "parseString", { + enumerable: true, + get: function get() { + return _parseString["default"]; + } +}); +Object.defineProperty(exports, "denormalise", { + enumerable: true, + get: function get() { + return _denormalise["default"]; + } +}); +Object.defineProperty(exports, "groupEntitiesByLayer", { + enumerable: true, + get: function get() { + return _groupEntitiesByLayer["default"]; + } +}); +Object.defineProperty(exports, "toPolylines", { + enumerable: true, + get: function get() { + return _toPolylines["default"]; + } +}); +Object.defineProperty(exports, "toSVG", { + enumerable: true, + get: function get() { + return _toSVG["default"]; + } +}); +Object.defineProperty(exports, "colors", { + enumerable: true, + get: function get() { + return _colors["default"]; + } +}); +Object.defineProperty(exports, "Helper", { + enumerable: true, + get: function get() { + return _Helper["default"]; + } +}); + +var _config = _interopRequireDefault(require("./config")); + +var _parseString = _interopRequireDefault(require("./parseString")); + +var _denormalise = _interopRequireDefault(require("./denormalise")); + +var _groupEntitiesByLayer = _interopRequireDefault(require("./groupEntitiesByLayer")); + +var _toPolylines = _interopRequireDefault(require("./toPolylines")); + +var _toSVG = _interopRequireDefault(require("./toSVG")); + +var _colors = _interopRequireDefault(require("./util/colors")); + +var _Helper = _interopRequireDefault(require("./Helper")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } \ No newline at end of file diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/parseString.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/parseString.js new file mode 100644 index 00000000..05e0d286 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/parseString.js @@ -0,0 +1,133 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = void 0; + +var _header = _interopRequireDefault(require("./handlers/header")); + +var _tables = _interopRequireDefault(require("./handlers/tables")); + +var _blocks = _interopRequireDefault(require("./handlers/blocks")); + +var _entities = _interopRequireDefault(require("./handlers/entities")); + +var _logger = _interopRequireDefault(require("./util/logger")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +// Parse the value into the native representation +var parseValue = function parseValue(type, value) { + if (type >= 10 && type < 60) { + return parseFloat(value, 10); + } else if (type >= 210 && type < 240) { + return parseFloat(value, 10); + } else if (type >= 60 && type < 100) { + return parseInt(value, 10); + } else { + return value; + } +}; // Content lines are alternate lines of type and value + + +var convertToTypesAndValues = function convertToTypesAndValues(contentLines) { + var state = 'type'; + var type; + var typesAndValues = []; + + var _iterator = _createForOfIteratorHelper(contentLines), + _step; + + try { + for (_iterator.s(); !(_step = _iterator.n()).done;) { + var line = _step.value; + + if (state === 'type') { + type = parseInt(line, 10); + state = 'value'; + } else { + typesAndValues.push([type, parseValue(type, line)]); + state = 'type'; + } + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + + return typesAndValues; +}; + +var separateSections = function separateSections(tuples) { + var sectionTuples; + return tuples.reduce(function (sections, tuple) { + if (tuple[0] === 0 && tuple[1] === 'SECTION') { + sectionTuples = []; + } else if (tuple[0] === 0 && tuple[1] === 'ENDSEC') { + sections.push(sectionTuples); + sectionTuples = undefined; + } else if (sectionTuples !== undefined) { + sectionTuples.push(tuple); + } + + return sections; + }, []); +}; // Each section start with the type tuple, then proceeds +// with the contents of the section + + +var reduceSection = function reduceSection(acc, section) { + var sectionType = section[0][1]; + var contentTuples = section.slice(1); + + switch (sectionType) { + case 'HEADER': + acc.header = (0, _header["default"])(contentTuples); + break; + + case 'TABLES': + acc.tables = (0, _tables["default"])(contentTuples); + break; + + case 'BLOCKS': + acc.blocks = (0, _blocks["default"])(contentTuples); + break; + + case 'ENTITIES': + acc.entities = (0, _entities["default"])(contentTuples); + break; + + default: + _logger["default"].warn("Unsupported section: ".concat(sectionType)); + + } + + return acc; +}; + +var _default = function _default(string) { + var lines = string.split(/\r\n|\r|\n/g); + var tuples = convertToTypesAndValues(lines); + var sections = separateSections(tuples); + var result = sections.reduce(reduceSection, { + // Start with empty defaults in the event of empty sections + header: {}, + blocks: [], + entities: [], + tables: { + layers: {}, + styles: {} + } + }); + return result; +}; + +exports["default"] = _default; \ No newline at end of file diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/toPolylines.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/toPolylines.js new file mode 100644 index 00000000..ef016499 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/toPolylines.js @@ -0,0 +1,63 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = void 0; + +var _vecks = require("vecks"); + +var _colors = _interopRequireDefault(require("./util/colors")); + +var _denormalise = _interopRequireDefault(require("./denormalise")); + +var _entityToPolyline = _interopRequireDefault(require("./entityToPolyline")); + +var _applyTransforms = _interopRequireDefault(require("./applyTransforms")); + +var _logger = _interopRequireDefault(require("./util/logger")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +var _default = function _default(parsed) { + var entities = (0, _denormalise["default"])(parsed); + var polylines = entities.map(function (entity) { + var layerTable = parsed.tables.layers[entity.layer]; + var rgb; + + if (layerTable) { + var colorNumber = 'colorNumber' in entity ? entity.colorNumber : layerTable.colorNumber; + rgb = _colors["default"][colorNumber]; + + if (rgb === undefined) { + _logger["default"].warn('Color index', colorNumber, 'invalid, defaulting to black'); + + rgb = [0, 0, 0]; + } + } else { + _logger["default"].warn('no layer table for layer:' + entity.layer); + + rgb = [0, 0, 0]; + } + + return { + rgb: rgb, + vertices: (0, _applyTransforms["default"])((0, _entityToPolyline["default"])(entity), entity.transforms) + }; + }); + var bbox = new _vecks.Box2(); + polylines.forEach(function (polyline) { + polyline.vertices.forEach(function (vertex) { + bbox.expandByPoint({ + x: vertex[0], + y: vertex[1] + }); + }); + }); + return { + bbox: bbox, + polylines: polylines + }; +}; + +exports["default"] = _default; \ No newline at end of file diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/toSVG.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/toSVG.js new file mode 100644 index 00000000..7fc1f087 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/toSVG.js @@ -0,0 +1,401 @@ +"use strict"; + +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = exports.piecewiseToPaths = void 0; + +var _prettyData = require("pretty-data"); + +var _vecks = require("vecks"); + +var _entityToPolyline = _interopRequireDefault(require("./entityToPolyline")); + +var _denormalise = _interopRequireDefault(require("./denormalise")); + +var _getRGBForEntity = _interopRequireDefault(require("./getRGBForEntity")); + +var _logger = _interopRequireDefault(require("./util/logger")); + +var _rotate = _interopRequireDefault(require("./util/rotate")); + +var _rgbToColorAttribute = _interopRequireDefault(require("./util/rgbToColorAttribute")); + +var _toPiecewiseBezier = _interopRequireWildcard(require("./util/toPiecewiseBezier")); + +var _transformBoundingBoxAndElement = _interopRequireDefault(require("./util/transformBoundingBoxAndElement")); + +function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; } + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } + +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + +var addFlipXIfApplicable = function addFlipXIfApplicable(entity, _ref) { + var bbox = _ref.bbox, + element = _ref.element; + + if (entity.extrusionZ === -1) { + return { + bbox: new _vecks.Box2().expandByPoint({ + x: -bbox.min.x, + y: bbox.min.y + }).expandByPoint({ + x: -bbox.max.x, + y: bbox.max.y + }), + element: "\n ".concat(element, "\n ") + }; + } else { + return { + bbox: bbox, + element: element + }; + } +}; +/** + * Create a element. Interpolates curved entities. + */ + + +var polyline = function polyline(entity) { + var vertices = (0, _entityToPolyline["default"])(entity); + var bbox = vertices.reduce(function (acc, _ref2) { + var _ref3 = _slicedToArray(_ref2, 2), + x = _ref3[0], + y = _ref3[1]; + + return acc.expandByPoint({ + x: x, + y: y + }); + }, new _vecks.Box2()); + var d = vertices.reduce(function (acc, point, i) { + acc += i === 0 ? 'M' : 'L'; + acc += point[0] + ',' + point[1]; + return acc; + }, ''); // Empirically it appears that flipping horzontally does not apply to polyline + + return (0, _transformBoundingBoxAndElement["default"])(bbox, ""), entity.transforms); +}; +/** + * Create a element for the CIRCLE entity. + */ + + +var circle = function circle(entity) { + var bbox0 = new _vecks.Box2().expandByPoint({ + x: entity.x + entity.r, + y: entity.y + entity.r + }).expandByPoint({ + x: entity.x - entity.r, + y: entity.y - entity.r + }); + var element0 = ""); + + var _addFlipXIfApplicable = addFlipXIfApplicable(entity, { + bbox: bbox0, + element: element0 + }), + bbox = _addFlipXIfApplicable.bbox, + element = _addFlipXIfApplicable.element; + + return (0, _transformBoundingBoxAndElement["default"])(bbox, element, entity.transforms); +}; +/** + * Create a a or element for the ARC or ELLIPSE + * DXF entity ( if start and end point are the same). + */ + + +var ellipseOrArc = function ellipseOrArc(cx, cy, majorX, majorY, axisRatio, startAngle, endAngle, flipX) { + var rx = Math.sqrt(majorX * majorX + majorY * majorY); + var ry = axisRatio * rx; + var rotationAngle = -Math.atan2(-majorY, majorX); + var bbox = bboxEllipseOrArc(cx, cy, majorX, majorY, axisRatio, startAngle, endAngle, flipX); + + if (Math.abs(startAngle - endAngle) < 1e-9 || Math.abs(startAngle - endAngle + Math.PI * 2) < 1e-9) { + // Use a native when start and end angles are the same, and + // arc paths with same start and end points don't render (at least on Safari) + var element = "\n \n "); + return { + bbox: bbox, + element: element + }; + } else { + var startOffset = (0, _rotate["default"])({ + x: Math.cos(startAngle) * rx, + y: Math.sin(startAngle) * ry + }, rotationAngle); + var startPoint = { + x: cx + startOffset.x, + y: cy + startOffset.y + }; + var endOffset = (0, _rotate["default"])({ + x: Math.cos(endAngle) * rx, + y: Math.sin(endAngle) * ry + }, rotationAngle); + var endPoint = { + x: cx + endOffset.x, + y: cy + endOffset.y + }; + var adjustedEndAngle = endAngle < startAngle ? endAngle + Math.PI * 2 : endAngle; + var largeArcFlag = adjustedEndAngle - startAngle < Math.PI ? 0 : 1; + var d = "M ".concat(startPoint.x, " ").concat(startPoint.y, " A ").concat(rx, " ").concat(ry, " ").concat(rotationAngle / Math.PI * 180, " ").concat(largeArcFlag, " 1 ").concat(endPoint.x, " ").concat(endPoint.y); + + var _element = ""); + + return { + bbox: bbox, + element: _element + }; + } +}; +/** + * Compute the bounding box of an elliptical arc, given the DXF entity parameters + */ + + +var bboxEllipseOrArc = function bboxEllipseOrArc(cx, cy, majorX, majorY, axisRatio, startAngle, endAngle, flipX) { + // The bounding box will be defined by the starting point of the ellipse, and ending point, + // and any extrema on the ellipse that are between startAngle and endAngle. + // The extrema are found by setting either the x or y component of the ellipse's + // tangent vector to zero and solving for the angle. + // Ensure start and end angles are > 0 and well-ordered + while (startAngle < 0) { + startAngle += Math.PI * 2; + } + + while (endAngle <= startAngle) { + endAngle += Math.PI * 2; + } // When rotated, the extrema of the ellipse will be found at these angles + + + var angles = []; + + if (Math.abs(majorX) < 1e-12 || Math.abs(majorY) < 1e-12) { + // Special case for majorX or majorY = 0 + for (var i = 0; i < 4; i++) { + angles.push(i / 2 * Math.PI); + } + } else { + // reference https://github.com/bjnortier/dxf/issues/47#issuecomment-545915042 + angles[0] = Math.atan(-majorY * axisRatio / majorX) - Math.PI; // Ensure angles < 0 + + angles[1] = Math.atan(majorX * axisRatio / majorY) - Math.PI; + angles[2] = angles[0] - Math.PI; + angles[3] = angles[1] - Math.PI; + } // Remove angles not falling between start and end + + + for (var _i2 = 4; _i2 >= 0; _i2--) { + while (angles[_i2] < startAngle) { + angles[_i2] += Math.PI * 2; + } + + if (angles[_i2] > endAngle) { + angles.splice(_i2, 1); + } + } // Also to consider are the starting and ending points: + + + angles.push(startAngle); + angles.push(endAngle); // Compute points lying on the unit circle at these angles + + var pts = angles.map(function (a) { + return { + x: Math.cos(a), + y: Math.sin(a) + }; + }); // Transformation matrix, formed by the major and minor axes + + var M = [[majorX, -majorY * axisRatio], [majorY, majorX * axisRatio]]; // Rotate, scale, and translate points + + var rotatedPts = pts.map(function (p) { + return { + x: p.x * M[0][0] + p.y * M[0][1] + cx, + y: p.x * M[1][0] + p.y * M[1][1] + cy + }; + }); // Compute extents of bounding box + + var bbox = rotatedPts.reduce(function (acc, p) { + acc.expandByPoint(p); + return acc; + }, new _vecks.Box2()); + return bbox; +}; +/** + * An ELLIPSE is defined by the major axis, convert to X and Y radius with + * a rotation angle + */ + + +var ellipse = function ellipse(entity) { + var _ellipseOrArc = ellipseOrArc(entity.x, entity.y, entity.majorX, entity.majorY, entity.axisRatio, entity.startAngle, entity.endAngle), + bbox0 = _ellipseOrArc.bbox, + element0 = _ellipseOrArc.element; + + var _addFlipXIfApplicable2 = addFlipXIfApplicable(entity, { + bbox: bbox0, + element: element0 + }), + bbox = _addFlipXIfApplicable2.bbox, + element = _addFlipXIfApplicable2.element; + + return (0, _transformBoundingBoxAndElement["default"])(bbox, element, entity.transforms); +}; +/** + * An ARC is an ellipse with equal radii + */ + + +var arc = function arc(entity) { + var _ellipseOrArc2 = ellipseOrArc(entity.x, entity.y, entity.r, 0, 1, entity.startAngle, entity.endAngle, entity.extrusionZ === -1), + bbox0 = _ellipseOrArc2.bbox, + element0 = _ellipseOrArc2.element; + + var _addFlipXIfApplicable3 = addFlipXIfApplicable(entity, { + bbox: bbox0, + element: element0 + }), + bbox = _addFlipXIfApplicable3.bbox, + element = _addFlipXIfApplicable3.element; + + return (0, _transformBoundingBoxAndElement["default"])(bbox, element, entity.transforms); +}; + +var piecewiseToPaths = function piecewiseToPaths(k, knots, controlPoints) { + var paths = []; + var controlPointIndex = 0; + var knotIndex = k; + + while (knotIndex < knots.length - k + 1) { + var m = (0, _toPiecewiseBezier.multiplicity)(knots, knotIndex); + var cp = controlPoints.slice(controlPointIndex, controlPointIndex + k); + + if (k === 4) { + paths.push("")); + } else if (k === 3) { + paths.push("")); + } + + controlPointIndex += m; + knotIndex += m; + } + + return paths; +}; + +exports.piecewiseToPaths = piecewiseToPaths; + +var bezier = function bezier(entity) { + var bbox = new _vecks.Box2(); + entity.controlPoints.forEach(function (p) { + bbox = bbox.expandByPoint(p); + }); + var k = entity.degree + 1; + var piecewise = (0, _toPiecewiseBezier["default"])(k, entity.controlPoints, entity.knots); + var paths = piecewiseToPaths(k, piecewise.knots, piecewise.controlPoints); + var element = "".concat(paths.join(''), ""); + return (0, _transformBoundingBoxAndElement["default"])(bbox, element, entity.transforms); +}; +/** + * Switcth the appropriate function on entity type. CIRCLE, ARC and ELLIPSE + * produce native SVG elements, the rest produce interpolated polylines. + */ + + +var entityToBoundsAndElement = function entityToBoundsAndElement(entity) { + switch (entity.type) { + case 'CIRCLE': + return circle(entity); + + case 'ELLIPSE': + return ellipse(entity); + + case 'ARC': + return arc(entity); + + case 'SPLINE': + { + if (entity.degree === 2 || entity.degree === 3) { + try { + return bezier(entity); + } catch (err) { + return polyline(entity); + } + } else { + return polyline(entity); + } + } + + case 'LINE': + case 'LWPOLYLINE': + case 'POLYLINE': + { + return polyline(entity); + } + + default: + _logger["default"].warn('entity type not supported in SVG rendering:', entity.type); + + return null; + } +}; + +var _default = function _default(parsed) { + var entities = (0, _denormalise["default"])(parsed); + + var _entities$reduce = entities.reduce(function (acc, entity, i) { + var rgb = (0, _getRGBForEntity["default"])(parsed.tables.layers, entity); + var boundsAndElement = entityToBoundsAndElement(entity); // Ignore entities like MTEXT that don't produce SVG elements + + if (boundsAndElement) { + var _bbox = boundsAndElement.bbox, + element = boundsAndElement.element; // Ignore invalid bounding boxes + + if (_bbox.valid) { + acc.bbox.expandByPoint(_bbox.min); + acc.bbox.expandByPoint(_bbox.max); + } + + acc.elements.push("").concat(element, "")); + } + + return acc; + }, { + bbox: new _vecks.Box2(), + elements: [] + }), + bbox = _entities$reduce.bbox, + elements = _entities$reduce.elements; + + var viewBox = bbox.valid ? { + x: bbox.min.x, + y: -bbox.max.y, + width: bbox.max.x - bbox.min.x, + height: bbox.max.y - bbox.min.y + } : { + x: 0, + y: 0, + width: 0, + height: 0 + }; + return "\n\n \n ").concat(_prettyData.pd.xml(elements.join('\n')), "\n \n"); +}; + +exports["default"] = _default; \ No newline at end of file diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/util/bSpline.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/util/bSpline.js new file mode 100644 index 00000000..e69a7458 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/util/bSpline.js @@ -0,0 +1,104 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = void 0; + +var _round = require("round10"); + +/** + * Copied and ported to code standard as the b-spline library is not maintained any longer. + * Source: + * https://github.com/thibauts/b-spline + * Copyright (c) 2015 Thibaut Séguy + */ +var _default = function _default(t, degree, points, knots, weights) { + var n = points.length; // points count + + var d = points[0].length; // point dimensionality + + if (t < 0 || t > 1) { + throw new Error('t out of bounds [0,1]: ' + t); + } + + if (degree < 1) throw new Error('degree must be at least 1 (linear)'); + if (degree > n - 1) throw new Error('degree must be less than or equal to point count - 1'); + + if (!weights) { + // build weight vector of length [n] + weights = []; + + for (var i = 0; i < n; i++) { + weights[i] = 1; + } + } + + if (!knots) { + // build knot vector of length [n + degree + 1] + knots = []; + + for (var _i = 0; _i < n + degree + 1; _i++) { + knots[_i] = _i; + } + } else { + if (knots.length !== n + degree + 1) throw new Error('bad knot vector length'); + } + + var domain = [degree, knots.length - 1 - degree]; // remap t to the domain where the spline is defined + + var low = knots[domain[0]]; + var high = knots[domain[1]]; + t = t * (high - low) + low; // Clamp to the upper & lower bounds instead of + // throwing an error like in the original lib + // https://github.com/bjnortier/dxf/issues/28 + + t = Math.max(t, low); + t = Math.min(t, high); // find s (the spline segment) for the [t] value provided + + var s; + + for (s = domain[0]; s < domain[1]; s++) { + if (t >= knots[s] && t <= knots[s + 1]) { + break; + } + } // convert points to homogeneous coordinates + + + var v = []; + + for (var _i2 = 0; _i2 < n; _i2++) { + v[_i2] = []; + + for (var j = 0; j < d; j++) { + v[_i2][j] = points[_i2][j] * weights[_i2]; + } + + v[_i2][d] = weights[_i2]; + } // l (level) goes from 1 to the curve degree + 1 + + + var alpha; + + for (var l = 1; l <= degree + 1; l++) { + // build level l of the pyramid + for (var _i3 = s; _i3 > s - degree - 1 + l; _i3--) { + alpha = (t - knots[_i3]) / (knots[_i3 + degree + 1 - l] - knots[_i3]); // interpolate each component + + for (var _j = 0; _j < d + 1; _j++) { + v[_i3][_j] = (1 - alpha) * v[_i3 - 1][_j] + alpha * v[_i3][_j]; + } + } + } // convert back to cartesian and return + + + var result = []; + + for (var _i4 = 0; _i4 < d; _i4++) { + result[_i4] = (0, _round.round10)(v[s][_i4] / v[s][d], -9); + } + + return result; +}; + +exports["default"] = _default; \ No newline at end of file diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/util/colors.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/util/colors.js new file mode 100644 index 00000000..9d4cd353 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/util/colors.js @@ -0,0 +1,8 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = void 0; +var _default = [[0, 0, 0], [255, 0, 0], [255, 255, 0], [0, 255, 0], [0, 255, 255], [0, 0, 255], [255, 0, 255], [255, 255, 255], [65, 65, 65], [128, 128, 128], [255, 0, 0], [255, 170, 170], [189, 0, 0], [189, 126, 126], [129, 0, 0], [129, 86, 86], [104, 0, 0], [104, 69, 69], [79, 0, 0], [79, 53, 53], [255, 63, 0], [255, 191, 170], [189, 46, 0], [189, 141, 126], [129, 31, 0], [129, 96, 86], [104, 25, 0], [104, 78, 69], [79, 19, 0], [79, 59, 53], [255, 127, 0], [255, 212, 170], [189, 94, 0], [189, 157, 126], [129, 64, 0], [129, 107, 86], [104, 52, 0], [104, 86, 69], [79, 39, 0], [79, 66, 53], [255, 191, 0], [255, 234, 170], [189, 141, 0], [189, 173, 126], [129, 96, 0], [129, 118, 86], [104, 78, 0], [104, 95, 69], [79, 59, 0], [79, 73, 53], [255, 255, 0], [255, 255, 170], [189, 189, 0], [189, 189, 126], [129, 129, 0], [129, 129, 86], [104, 104, 0], [104, 104, 69], [79, 79, 0], [79, 79, 53], [191, 255, 0], [234, 255, 170], [141, 189, 0], [173, 189, 126], [96, 129, 0], [118, 129, 86], [78, 104, 0], [95, 104, 69], [59, 79, 0], [73, 79, 53], [127, 255, 0], [212, 255, 170], [94, 189, 0], [157, 189, 126], [64, 129, 0], [107, 129, 86], [52, 104, 0], [86, 104, 69], [39, 79, 0], [66, 79, 53], [63, 255, 0], [191, 255, 170], [46, 189, 0], [141, 189, 126], [31, 129, 0], [96, 129, 86], [25, 104, 0], [78, 104, 69], [19, 79, 0], [59, 79, 53], [0, 255, 0], [170, 255, 170], [0, 189, 0], [126, 189, 126], [0, 129, 0], [86, 129, 86], [0, 104, 0], [69, 104, 69], [0, 79, 0], [53, 79, 53], [0, 255, 63], [170, 255, 191], [0, 189, 46], [126, 189, 141], [0, 129, 31], [86, 129, 96], [0, 104, 25], [69, 104, 78], [0, 79, 19], [53, 79, 59], [0, 255, 127], [170, 255, 212], [0, 189, 94], [126, 189, 157], [0, 129, 64], [86, 129, 107], [0, 104, 52], [69, 104, 86], [0, 79, 39], [53, 79, 66], [0, 255, 191], [170, 255, 234], [0, 189, 141], [126, 189, 173], [0, 129, 96], [86, 129, 118], [0, 104, 78], [69, 104, 95], [0, 79, 59], [53, 79, 73], [0, 255, 255], [170, 255, 255], [0, 189, 189], [126, 189, 189], [0, 129, 129], [86, 129, 129], [0, 104, 104], [69, 104, 104], [0, 79, 79], [53, 79, 79], [0, 191, 255], [170, 234, 255], [0, 141, 189], [126, 173, 189], [0, 96, 129], [86, 118, 129], [0, 78, 104], [69, 95, 104], [0, 59, 79], [53, 73, 79], [0, 127, 255], [170, 212, 255], [0, 94, 189], [126, 157, 189], [0, 64, 129], [86, 107, 129], [0, 52, 104], [69, 86, 104], [0, 39, 79], [53, 66, 79], [0, 63, 255], [170, 191, 255], [0, 46, 189], [126, 141, 189], [0, 31, 129], [86, 96, 129], [0, 25, 104], [69, 78, 104], [0, 19, 79], [53, 59, 79], [0, 0, 255], [170, 170, 255], [0, 0, 189], [126, 126, 189], [0, 0, 129], [86, 86, 129], [0, 0, 104], [69, 69, 104], [0, 0, 79], [53, 53, 79], [63, 0, 255], [191, 170, 255], [46, 0, 189], [141, 126, 189], [31, 0, 129], [96, 86, 129], [25, 0, 104], [78, 69, 104], [19, 0, 79], [59, 53, 79], [127, 0, 255], [212, 170, 255], [94, 0, 189], [157, 126, 189], [64, 0, 129], [107, 86, 129], [52, 0, 104], [86, 69, 104], [39, 0, 79], [66, 53, 79], [191, 0, 255], [234, 170, 255], [141, 0, 189], [173, 126, 189], [96, 0, 129], [118, 86, 129], [78, 0, 104], [95, 69, 104], [59, 0, 79], [73, 53, 79], [255, 0, 255], [255, 170, 255], [189, 0, 189], [189, 126, 189], [129, 0, 129], [129, 86, 129], [104, 0, 104], [104, 69, 104], [79, 0, 79], [79, 53, 79], [255, 0, 191], [255, 170, 234], [189, 0, 141], [189, 126, 173], [129, 0, 96], [129, 86, 118], [104, 0, 78], [104, 69, 95], [79, 0, 59], [79, 53, 73], [255, 0, 127], [255, 170, 212], [189, 0, 94], [189, 126, 157], [129, 0, 64], [129, 86, 107], [104, 0, 52], [104, 69, 86], [79, 0, 39], [79, 53, 66], [255, 0, 63], [255, 170, 191], [189, 0, 46], [189, 126, 141], [129, 0, 31], [129, 86, 96], [104, 0, 25], [104, 69, 78], [79, 0, 19], [79, 53, 59], [51, 51, 51], [80, 80, 80], [105, 105, 105], [130, 130, 130], [190, 190, 190], [255, 255, 255]]; +exports["default"] = _default; \ No newline at end of file diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/util/createArcForLWPolyline.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/util/createArcForLWPolyline.js new file mode 100644 index 00000000..ce6c2395 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/util/createArcForLWPolyline.js @@ -0,0 +1,85 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = void 0; + +var _vecks = require("vecks"); + +/** + * Create the arcs point for a LWPOLYLINE. The start and end are excluded + * + * See diagram.png in this directory for description of points and angles used. + */ +var _default = function _default(from, to, bulge, resolution) { + // Resolution in degrees + if (!resolution) { + resolution = 5; + } // If the bulge is < 0, the arc goes clockwise. So we simply + // reverse a and b and invert sign + // Bulge = tan(theta/4) + + + var theta; + var a; + var b; + + if (bulge < 0) { + theta = Math.atan(-bulge) * 4; + a = new _vecks.V2(from[0], from[1]); + b = new _vecks.V2(to[0], to[1]); + } else { + // Default is counter-clockwise + theta = Math.atan(bulge) * 4; + a = new _vecks.V2(to[0], to[1]); + b = new _vecks.V2(from[0], from[1]); + } + + var ab = b.sub(a); + var lengthAB = ab.length(); + var c = a.add(ab.multiply(0.5)); // Distance from center of arc to line between form and to points + + var lengthCD = Math.abs(lengthAB / 2 / Math.tan(theta / 2)); + var normAB = ab.norm(); + var d; + + if (theta < Math.PI) { + var normDC = new _vecks.V2(normAB.x * Math.cos(Math.PI / 2) - normAB.y * Math.sin(Math.PI / 2), normAB.y * Math.cos(Math.PI / 2) + normAB.x * Math.sin(Math.PI / 2)); // D is the center of the arc + + d = c.add(normDC.multiply(-lengthCD)); + } else { + var normCD = new _vecks.V2(normAB.x * Math.cos(Math.PI / 2) - normAB.y * Math.sin(Math.PI / 2), normAB.y * Math.cos(Math.PI / 2) + normAB.x * Math.sin(Math.PI / 2)); // D is the center of the arc + + d = c.add(normCD.multiply(lengthCD)); + } // Add points between start start and eng angle relative + // to the center point + + + var startAngle = Math.atan2(b.y - d.y, b.x - d.x) / Math.PI * 180; + var endAngle = Math.atan2(a.y - d.y, a.x - d.x) / Math.PI * 180; + + if (endAngle < startAngle) { + endAngle += 360; + } + + var r = b.sub(d).length(); + var startInter = Math.floor(startAngle / resolution) * resolution + resolution; + var endInter = Math.ceil(endAngle / resolution) * resolution - resolution; + var points = []; + + for (var i = startInter; i <= endInter; i += resolution) { + points.push(d.add(new _vecks.V2(Math.cos(i / 180 * Math.PI) * r, Math.sin(i / 180 * Math.PI) * r))); + } // Maintain the right ordering to join the from and to points + + + if (bulge < 0) { + points.reverse(); + } + + return points.map(function (p) { + return [p.x, p.y]; + }); +}; + +exports["default"] = _default; \ No newline at end of file diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/util/insertKnot.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/util/insertKnot.js new file mode 100644 index 00000000..dd692570 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/util/insertKnot.js @@ -0,0 +1,79 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = void 0; + +/** + * Knot insertion is known as "Boehm's algorithm" + * + * https://math.stackexchange.com/questions/417859/convert-a-b-spline-into-bezier-curves + * code adapted from http://preserve.mactech.com/articles/develop/issue_25/schneider.html + */ +var _default = function _default(k, controlPoints, knots, newKnot) { + var x = knots; + var b = controlPoints; + var n = controlPoints.length; + var i = 0; + var foundIndex = false; + + for (var j = 0; j < n + k; j++) { + if (newKnot > x[j] && newKnot <= x[j + 1]) { + i = j; + foundIndex = true; + break; + } + } + + if (!foundIndex) { + throw new Error('invalid new knot'); + } + + var xHat = []; + + for (var _j = 0; _j < n + k + 1; _j++) { + if (_j <= i) { + xHat[_j] = x[_j]; + } else if (_j === i + 1) { + xHat[_j] = newKnot; + } else { + xHat[_j] = x[_j - 1]; + } + } + + var alpha; + var bHat = []; + + for (var _j2 = 0; _j2 < n + 1; _j2++) { + if (_j2 <= i - k + 1) { + alpha = 1; + } else if (i - k + 2 <= _j2 && _j2 <= i) { + if (x[_j2 + k - 1] - x[_j2] === 0) { + alpha = 0; + } else { + alpha = (newKnot - x[_j2]) / (x[_j2 + k - 1] - x[_j2]); + } + } else { + alpha = 0; + } + + if (alpha === 0) { + bHat[_j2] = b[_j2 - 1]; + } else if (alpha === 1) { + bHat[_j2] = b[_j2]; + } else { + bHat[_j2] = { + x: (1 - alpha) * b[_j2 - 1].x + alpha * b[_j2].x, + y: (1 - alpha) * b[_j2 - 1].y + alpha * b[_j2].y + }; + } + } + + return { + controlPoints: bHat, + knots: xHat + }; +}; + +exports["default"] = _default; \ No newline at end of file diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/util/logger.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/util/logger.js new file mode 100644 index 00000000..4d79953d --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/util/logger.js @@ -0,0 +1,33 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = void 0; + +var _config = _interopRequireDefault(require("../config")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +function info() { + if (_config["default"].verbose) { + console.info.apply(undefined, arguments); + } +} + +function warn() { + if (_config["default"].verbose) { + console.warn.apply(undefined, arguments); + } +} + +function error() { + console.error.apply(undefined, arguments); +} + +var _default = { + info: info, + warn: warn, + error: error +}; +exports["default"] = _default; \ No newline at end of file diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/util/rgbToColorAttribute.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/util/rgbToColorAttribute.js new file mode 100644 index 00000000..37105031 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/util/rgbToColorAttribute.js @@ -0,0 +1,20 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = void 0; + +/** + * Convert an RGB array to a CSS string definition. + * Converts white lines to black as the default. + */ +var _default = function _default(rgb) { + if (rgb[0] === 255 && rgb[1] === 255 && rgb[2] === 255) { + return 'rgb(0, 0, 0)'; + } else { + return "rgb(".concat(rgb[0], ", ").concat(rgb[1], ", ").concat(rgb[2], ")"); + } +}; + +exports["default"] = _default; \ No newline at end of file diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/util/rotate.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/util/rotate.js new file mode 100644 index 00000000..b4faed4a --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/util/rotate.js @@ -0,0 +1,21 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = void 0; + +/** + * Rotate a points by the given angle. + * + * @param points the points + * @param angle the rotation angle + */ +var _default = function _default(p, angle) { + return { + x: p.x * Math.cos(angle) - p.y * Math.sin(angle), + y: p.y * Math.cos(angle) + p.x * Math.sin(angle) + }; +}; + +exports["default"] = _default; \ No newline at end of file diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/util/toPiecewiseBezier.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/util/toPiecewiseBezier.js new file mode 100644 index 00000000..11a5b802 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/util/toPiecewiseBezier.js @@ -0,0 +1,90 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = exports.computeInsertions = exports.multiplicity = exports.checkPinned = void 0; + +var _insertKnot = _interopRequireDefault(require("./insertKnot")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +/** + * For a pinned spline, the knots have to be repeated k times + * (where k is the order), at both the beginning and the end + */ +var checkPinned = function checkPinned(k, knots) { + // Pinned at the start + for (var i = 1; i < k; ++i) { + if (knots[i] !== knots[0]) { + throw Error("not pinned. order: ".concat(k, " knots: ").concat(knots)); + } + } // Pinned at the end + + + for (var _i = knots.length - 2; _i > knots.length - k - 1; --_i) { + if (knots[_i] !== knots[knots.length - 1]) { + throw Error("not pinned. order: ".concat(k, " knots: ").concat(knots)); + } + } +}; + +exports.checkPinned = checkPinned; + +var multiplicity = function multiplicity(knots, index) { + var m = 1; + + for (var i = index + 1; i < knots.length; ++i) { + if (knots[i] === knots[index]) { + ++m; + } else { + break; + } + } + + return m; +}; +/** + * https://saccade.com/writing/graphics/KnotVectors.pdf + * A quadratic piecewise BeÌzier knot vector with seven control points + * will look like this [0 0 0 1 1 2 2 3 3 3]. In general, in a + * piecewise BeÌzier knot vector the first k knots are the same, + * then each subsequent group of k-1 knots is the same, + * until you get to the end. + */ + + +exports.multiplicity = multiplicity; + +var computeInsertions = function computeInsertions(k, knots) { + var inserts = []; + var i = k; + + while (i < knots.length - k) { + var knot = knots[i]; + var m = multiplicity(knots, i); + + for (var j = 0; j < k - m - 1; ++j) { + inserts.push(knot); + } + + i = i + m; + } + + return inserts; +}; + +exports.computeInsertions = computeInsertions; + +var _default = function _default(k, controlPoints, knots) { + checkPinned(k, knots); + var insertions = computeInsertions(k, knots); + return insertions.reduce(function (acc, tNew) { + return (0, _insertKnot["default"])(k, acc.controlPoints, acc.knots, tNew); + }, { + controlPoints: controlPoints, + knots: knots + }); +}; + +exports["default"] = _default; \ No newline at end of file diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/util/transformBoundingBoxAndElement.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/util/transformBoundingBoxAndElement.js new file mode 100644 index 00000000..ba03a7c9 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/lib/util/transformBoundingBoxAndElement.js @@ -0,0 +1,118 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = void 0; + +var _vecks = require("vecks"); + +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } + +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + +/** + * Transform the bounding box and the SVG element by the given + * transforms. The element are created in reverse transform + * order and the bounding box in the given order. + */ +var _default = function _default(bbox, element, transforms) { + var transformedElement = ''; + var matrices = transforms.map(function (transform) { + // Create the transformation matrix + var tx = transform.x || 0; + var ty = transform.y || 0; + var sx = transform.scaleX || 1; + var sy = transform.scaleY || 1; + var angle = (transform.rotation || 0) / 180 * Math.PI; + var cos = Math.cos, + sin = Math.sin; + var a, b, c, d, e, f; // In DXF an extrusionZ value of -1 denote a tranform around the Y axis. + + if (transform.extrusionZ === -1) { + a = -sx * cos(angle); + b = sx * sin(angle); + c = sy * sin(angle); + d = sy * cos(angle); + e = -tx; + f = ty; + } else { + a = sx * cos(angle); + b = sx * sin(angle); + c = -sy * sin(angle); + d = sy * cos(angle); + e = tx; + f = ty; + } + + return [a, b, c, d, e, f]; + }); // Only transform the bounding box is it is valid (i.e. not Infinity) + + var transformedBBox = new _vecks.Box2(); + + if (bbox.valid) { + var bboxPoints = [{ + x: bbox.min.x, + y: bbox.min.y + }, { + x: bbox.max.x, + y: bbox.min.y + }, { + x: bbox.max.x, + y: bbox.max.y + }, { + x: bbox.min.x, + y: bbox.max.y + }]; + matrices.forEach(function (_ref) { + var _ref2 = _slicedToArray(_ref, 6), + a = _ref2[0], + b = _ref2[1], + c = _ref2[2], + d = _ref2[3], + e = _ref2[4], + f = _ref2[5]; + + bboxPoints = bboxPoints.map(function (point) { + return { + x: point.x * a + point.y * c + e, + y: point.x * b + point.y * d + f + }; + }); + }); + transformedBBox = bboxPoints.reduce(function (acc, point) { + return acc.expandByPoint(point); + }, new _vecks.Box2()); + } + + matrices.reverse(); + matrices.forEach(function (_ref3) { + var _ref4 = _slicedToArray(_ref3, 6), + a = _ref4[0], + b = _ref4[1], + c = _ref4[2], + d = _ref4[3], + e = _ref4[4], + f = _ref4[5]; + + transformedElement += ""); + }); + transformedElement += element; + matrices.forEach(function (transform) { + transformedElement += ''; + }); + return { + bbox: transformedBBox, + element: transformedElement + }; +}; + +exports["default"] = _default; \ No newline at end of file diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/commander/CHANGELOG.md b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/commander/CHANGELOG.md new file mode 100644 index 00000000..7dce779d --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/commander/CHANGELOG.md @@ -0,0 +1,419 @@ +2.20.3 / 2019-10-11 +================== + + * Support Node.js 0.10 (Revert #1059) + * Ran "npm unpublish commander@2.20.2". There is no 2.20.2. + +2.20.1 / 2019-09-29 +================== + + * Improve executable subcommand tracking + * Update dev dependencies + +2.20.0 / 2019-04-02 +================== + + * fix: resolve symbolic links completely when hunting for subcommands (#935) + * Update index.d.ts (#930) + * Update Readme.md (#924) + * Remove --save option as it isn't required anymore (#918) + * Add link to the license file (#900) + * Added example of receiving args from options (#858) + * Added missing semicolon (#882) + * Add extension to .eslintrc (#876) + +2.19.0 / 2018-10-02 +================== + + * Removed newline after Options and Commands headers (#864) + * Bugfix - Error output (#862) + * Fix to change default value to string (#856) + +2.18.0 / 2018-09-07 +================== + + * Standardize help output (#853) + * chmod 644 travis.yml (#851) + * add support for execute typescript subcommand via ts-node (#849) + +2.17.1 / 2018-08-07 +================== + + * Fix bug in command emit (#844) + +2.17.0 / 2018-08-03 +================== + + * fixed newline output after help information (#833) + * Fix to emit the action even without command (#778) + * npm update (#823) + +2.16.0 / 2018-06-29 +================== + + * Remove Makefile and `test/run` (#821) + * Make 'npm test' run on Windows (#820) + * Add badge to display install size (#807) + * chore: cache node_modules (#814) + * chore: remove Node.js 4 (EOL), add Node.js 10 (#813) + * fixed typo in readme (#812) + * Fix types (#804) + * Update eslint to resolve vulnerabilities in lodash (#799) + * updated readme with custom event listeners. (#791) + * fix tests (#794) + +2.15.0 / 2018-03-07 +================== + + * Update downloads badge to point to graph of downloads over time instead of duplicating link to npm + * Arguments description + +2.14.1 / 2018-02-07 +================== + + * Fix typing of help function + +2.14.0 / 2018-02-05 +================== + + * only register the option:version event once + * Fixes issue #727: Passing empty string for option on command is set to undefined + * enable eqeqeq rule + * resolves #754 add linter configuration to project + * resolves #560 respect custom name for version option + * document how to override the version flag + * document using options per command + +2.13.0 / 2018-01-09 +================== + + * Do not print default for --no- + * remove trailing spaces in command help + * Update CI's Node.js to LTS and latest version + * typedefs: Command and Option types added to commander namespace + +2.12.2 / 2017-11-28 +================== + + * fix: typings are not shipped + +2.12.1 / 2017-11-23 +================== + + * Move @types/node to dev dependency + +2.12.0 / 2017-11-22 +================== + + * add attributeName() method to Option objects + * Documentation updated for options with --no prefix + * typings: `outputHelp` takes a string as the first parameter + * typings: use overloads + * feat(typings): update to match js api + * Print default value in option help + * Fix translation error + * Fail when using same command and alias (#491) + * feat(typings): add help callback + * fix bug when description is add after command with options (#662) + * Format js code + * Rename History.md to CHANGELOG.md (#668) + * feat(typings): add typings to support TypeScript (#646) + * use current node + +2.11.0 / 2017-07-03 +================== + + * Fix help section order and padding (#652) + * feature: support for signals to subcommands (#632) + * Fixed #37, --help should not display first (#447) + * Fix translation errors. (#570) + * Add package-lock.json + * Remove engines + * Upgrade package version + * Prefix events to prevent conflicts between commands and options (#494) + * Removing dependency on graceful-readlink + * Support setting name in #name function and make it chainable + * Add .vscode directory to .gitignore (Visual Studio Code metadata) + * Updated link to ruby commander in readme files + +2.10.0 / 2017-06-19 +================== + + * Update .travis.yml. drop support for older node.js versions. + * Fix require arguments in README.md + * On SemVer you do not start from 0.0.1 + * Add missing semi colon in readme + * Add save param to npm install + * node v6 travis test + * Update Readme_zh-CN.md + * Allow literal '--' to be passed-through as an argument + * Test subcommand alias help + * link build badge to master branch + * Support the alias of Git style sub-command + * added keyword commander for better search result on npm + * Fix Sub-Subcommands + * test node.js stable + * Fixes TypeError when a command has an option called `--description` + * Update README.md to make it beginner friendly and elaborate on the difference between angled and square brackets. + * Add chinese Readme file + +2.9.0 / 2015-10-13 +================== + + * Add option `isDefault` to set default subcommand #415 @Qix- + * Add callback to allow filtering or post-processing of help text #434 @djulien + * Fix `undefined` text in help information close #414 #416 @zhiyelee + +2.8.1 / 2015-04-22 +================== + + * Back out `support multiline description` Close #396 #397 + +2.8.0 / 2015-04-07 +================== + + * Add `process.execArg` support, execution args like `--harmony` will be passed to sub-commands #387 @DigitalIO @zhiyelee + * Fix bug in Git-style sub-commands #372 @zhiyelee + * Allow commands to be hidden from help #383 @tonylukasavage + * When git-style sub-commands are in use, yet none are called, display help #382 @claylo + * Add ability to specify arguments syntax for top-level command #258 @rrthomas + * Support multiline descriptions #208 @zxqfox + +2.7.1 / 2015-03-11 +================== + + * Revert #347 (fix collisions when option and first arg have same name) which causes a bug in #367. + +2.7.0 / 2015-03-09 +================== + + * Fix git-style bug when installed globally. Close #335 #349 @zhiyelee + * Fix collisions when option and first arg have same name. Close #346 #347 @tonylukasavage + * Add support for camelCase on `opts()`. Close #353 @nkzawa + * Add node.js 0.12 and io.js to travis.yml + * Allow RegEx options. #337 @palanik + * Fixes exit code when sub-command failing. Close #260 #332 @pirelenito + * git-style `bin` files in $PATH make sense. Close #196 #327 @zhiyelee + +2.6.0 / 2014-12-30 +================== + + * added `Command#allowUnknownOption` method. Close #138 #318 @doozr @zhiyelee + * Add application description to the help msg. Close #112 @dalssoft + +2.5.1 / 2014-12-15 +================== + + * fixed two bugs incurred by variadic arguments. Close #291 @Quentin01 #302 @zhiyelee + +2.5.0 / 2014-10-24 +================== + + * add support for variadic arguments. Closes #277 @whitlockjc + +2.4.0 / 2014-10-17 +================== + + * fixed a bug on executing the coercion function of subcommands option. Closes #270 + * added `Command.prototype.name` to retrieve command name. Closes #264 #266 @tonylukasavage + * added `Command.prototype.opts` to retrieve all the options as a simple object of key-value pairs. Closes #262 @tonylukasavage + * fixed a bug on subcommand name. Closes #248 @jonathandelgado + * fixed function normalize doesn’t honor option terminator. Closes #216 @abbr + +2.3.0 / 2014-07-16 +================== + + * add command alias'. Closes PR #210 + * fix: Typos. Closes #99 + * fix: Unused fs module. Closes #217 + +2.2.0 / 2014-03-29 +================== + + * add passing of previous option value + * fix: support subcommands on windows. Closes #142 + * Now the defaultValue passed as the second argument of the coercion function. + +2.1.0 / 2013-11-21 +================== + + * add: allow cflag style option params, unit test, fixes #174 + +2.0.0 / 2013-07-18 +================== + + * remove input methods (.prompt, .confirm, etc) + +1.3.2 / 2013-07-18 +================== + + * add support for sub-commands to co-exist with the original command + +1.3.1 / 2013-07-18 +================== + + * add quick .runningCommand hack so you can opt-out of other logic when running a sub command + +1.3.0 / 2013-07-09 +================== + + * add EACCES error handling + * fix sub-command --help + +1.2.0 / 2013-06-13 +================== + + * allow "-" hyphen as an option argument + * support for RegExp coercion + +1.1.1 / 2012-11-20 +================== + + * add more sub-command padding + * fix .usage() when args are present. Closes #106 + +1.1.0 / 2012-11-16 +================== + + * add git-style executable subcommand support. Closes #94 + +1.0.5 / 2012-10-09 +================== + + * fix `--name` clobbering. Closes #92 + * fix examples/help. Closes #89 + +1.0.4 / 2012-09-03 +================== + + * add `outputHelp()` method. + +1.0.3 / 2012-08-30 +================== + + * remove invalid .version() defaulting + +1.0.2 / 2012-08-24 +================== + + * add `--foo=bar` support [arv] + * fix password on node 0.8.8. Make backward compatible with 0.6 [focusaurus] + +1.0.1 / 2012-08-03 +================== + + * fix issue #56 + * fix tty.setRawMode(mode) was moved to tty.ReadStream#setRawMode() (i.e. process.stdin.setRawMode()) + +1.0.0 / 2012-07-05 +================== + + * add support for optional option descriptions + * add defaulting of `.version()` to package.json's version + +0.6.1 / 2012-06-01 +================== + + * Added: append (yes or no) on confirmation + * Added: allow node.js v0.7.x + +0.6.0 / 2012-04-10 +================== + + * Added `.prompt(obj, callback)` support. Closes #49 + * Added default support to .choose(). Closes #41 + * Fixed the choice example + +0.5.1 / 2011-12-20 +================== + + * Fixed `password()` for recent nodes. Closes #36 + +0.5.0 / 2011-12-04 +================== + + * Added sub-command option support [itay] + +0.4.3 / 2011-12-04 +================== + + * Fixed custom help ordering. Closes #32 + +0.4.2 / 2011-11-24 +================== + + * Added travis support + * Fixed: line-buffered input automatically trimmed. Closes #31 + +0.4.1 / 2011-11-18 +================== + + * Removed listening for "close" on --help + +0.4.0 / 2011-11-15 +================== + + * Added support for `--`. Closes #24 + +0.3.3 / 2011-11-14 +================== + + * Fixed: wait for close event when writing help info [Jerry Hamlet] + +0.3.2 / 2011-11-01 +================== + + * Fixed long flag definitions with values [felixge] + +0.3.1 / 2011-10-31 +================== + + * Changed `--version` short flag to `-V` from `-v` + * Changed `.version()` so it's configurable [felixge] + +0.3.0 / 2011-10-31 +================== + + * Added support for long flags only. Closes #18 + +0.2.1 / 2011-10-24 +================== + + * "node": ">= 0.4.x < 0.7.0". Closes #20 + +0.2.0 / 2011-09-26 +================== + + * Allow for defaults that are not just boolean. Default peassignment only occurs for --no-*, optional, and required arguments. [Jim Isaacs] + +0.1.0 / 2011-08-24 +================== + + * Added support for custom `--help` output + +0.0.5 / 2011-08-18 +================== + + * Changed: when the user enters nothing prompt for password again + * Fixed issue with passwords beginning with numbers [NuckChorris] + +0.0.4 / 2011-08-15 +================== + + * Fixed `Commander#args` + +0.0.3 / 2011-08-15 +================== + + * Added default option value support + +0.0.2 / 2011-08-15 +================== + + * Added mask support to `Command#password(str[, mask], fn)` + * Added `Command#password(str, fn)` + +0.0.1 / 2010-01-03 +================== + + * Initial release diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/commander/LICENSE b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/commander/LICENSE new file mode 100644 index 00000000..10f997ab --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/commander/LICENSE @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) 2011 TJ Holowaychuk + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/commander/Readme.md b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/commander/Readme.md new file mode 100644 index 00000000..c846e7a2 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/commander/Readme.md @@ -0,0 +1,428 @@ +# Commander.js + + +[![Build Status](https://api.travis-ci.org/tj/commander.js.svg?branch=master)](http://travis-ci.org/tj/commander.js) +[![NPM Version](http://img.shields.io/npm/v/commander.svg?style=flat)](https://www.npmjs.org/package/commander) +[![NPM Downloads](https://img.shields.io/npm/dm/commander.svg?style=flat)](https://npmcharts.com/compare/commander?minimal=true) +[![Install Size](https://packagephobia.now.sh/badge?p=commander)](https://packagephobia.now.sh/result?p=commander) +[![Join the chat at https://gitter.im/tj/commander.js](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/tj/commander.js?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) + + The complete solution for [node.js](http://nodejs.org) command-line interfaces, inspired by Ruby's [commander](https://github.com/commander-rb/commander). + [API documentation](http://tj.github.com/commander.js/) + + +## Installation + + $ npm install commander + +## Option parsing + +Options with commander are defined with the `.option()` method, also serving as documentation for the options. The example below parses args and options from `process.argv`, leaving remaining args as the `program.args` array which were not consumed by options. + +```js +#!/usr/bin/env node + +/** + * Module dependencies. + */ + +var program = require('commander'); + +program + .version('0.1.0') + .option('-p, --peppers', 'Add peppers') + .option('-P, --pineapple', 'Add pineapple') + .option('-b, --bbq-sauce', 'Add bbq sauce') + .option('-c, --cheese [type]', 'Add the specified type of cheese [marble]', 'marble') + .parse(process.argv); + +console.log('you ordered a pizza with:'); +if (program.peppers) console.log(' - peppers'); +if (program.pineapple) console.log(' - pineapple'); +if (program.bbqSauce) console.log(' - bbq'); +console.log(' - %s cheese', program.cheese); +``` + +Short flags may be passed as a single arg, for example `-abc` is equivalent to `-a -b -c`. Multi-word options such as "--template-engine" are camel-cased, becoming `program.templateEngine` etc. + +Note that multi-word options starting with `--no` prefix negate the boolean value of the following word. For example, `--no-sauce` sets the value of `program.sauce` to false. + +```js +#!/usr/bin/env node + +/** + * Module dependencies. + */ + +var program = require('commander'); + +program + .option('--no-sauce', 'Remove sauce') + .parse(process.argv); + +console.log('you ordered a pizza'); +if (program.sauce) console.log(' with sauce'); +else console.log(' without sauce'); +``` + +To get string arguments from options you will need to use angle brackets <> for required inputs or square brackets [] for optional inputs. + +e.g. ```.option('-m --myarg [myVar]', 'my super cool description')``` + +Then to access the input if it was passed in. + +e.g. ```var myInput = program.myarg``` + +**NOTE**: If you pass a argument without using brackets the example above will return true and not the value passed in. + + +## Version option + +Calling the `version` implicitly adds the `-V` and `--version` options to the command. +When either of these options is present, the command prints the version number and exits. + + $ ./examples/pizza -V + 0.0.1 + +If you want your program to respond to the `-v` option instead of the `-V` option, simply pass custom flags to the `version` method using the same syntax as the `option` method. + +```js +program + .version('0.0.1', '-v, --version') +``` + +The version flags can be named anything, but the long option is required. + +## Command-specific options + +You can attach options to a command. + +```js +#!/usr/bin/env node + +var program = require('commander'); + +program + .command('rm
') + .option('-r, --recursive', 'Remove recursively') + .action(function (dir, cmd) { + console.log('remove ' + dir + (cmd.recursive ? ' recursively' : '')) + }) + +program.parse(process.argv) +``` + +A command's options are validated when the command is used. Any unknown options will be reported as an error. However, if an action-based command does not define an action, then the options are not validated. + +## Coercion + +```js +function range(val) { + return val.split('..').map(Number); +} + +function list(val) { + return val.split(','); +} + +function collect(val, memo) { + memo.push(val); + return memo; +} + +function increaseVerbosity(v, total) { + return total + 1; +} + +program + .version('0.1.0') + .usage('[options] ') + .option('-i, --integer ', 'An integer argument', parseInt) + .option('-f, --float ', 'A float argument', parseFloat) + .option('-r, --range ..', 'A range', range) + .option('-l, --list ', 'A list', list) + .option('-o, --optional [value]', 'An optional value') + .option('-c, --collect [value]', 'A repeatable value', collect, []) + .option('-v, --verbose', 'A value that can be increased', increaseVerbosity, 0) + .parse(process.argv); + +console.log(' int: %j', program.integer); +console.log(' float: %j', program.float); +console.log(' optional: %j', program.optional); +program.range = program.range || []; +console.log(' range: %j..%j', program.range[0], program.range[1]); +console.log(' list: %j', program.list); +console.log(' collect: %j', program.collect); +console.log(' verbosity: %j', program.verbose); +console.log(' args: %j', program.args); +``` + +## Regular Expression +```js +program + .version('0.1.0') + .option('-s --size ', 'Pizza size', /^(large|medium|small)$/i, 'medium') + .option('-d --drink [drink]', 'Drink', /^(coke|pepsi|izze)$/i) + .parse(process.argv); + +console.log(' size: %j', program.size); +console.log(' drink: %j', program.drink); +``` + +## Variadic arguments + + The last argument of a command can be variadic, and only the last argument. To make an argument variadic you have to + append `...` to the argument name. Here is an example: + +```js +#!/usr/bin/env node + +/** + * Module dependencies. + */ + +var program = require('commander'); + +program + .version('0.1.0') + .command('rmdir [otherDirs...]') + .action(function (dir, otherDirs) { + console.log('rmdir %s', dir); + if (otherDirs) { + otherDirs.forEach(function (oDir) { + console.log('rmdir %s', oDir); + }); + } + }); + +program.parse(process.argv); +``` + + An `Array` is used for the value of a variadic argument. This applies to `program.args` as well as the argument passed + to your action as demonstrated above. + +## Specify the argument syntax + +```js +#!/usr/bin/env node + +var program = require('commander'); + +program + .version('0.1.0') + .arguments(' [env]') + .action(function (cmd, env) { + cmdValue = cmd; + envValue = env; + }); + +program.parse(process.argv); + +if (typeof cmdValue === 'undefined') { + console.error('no command given!'); + process.exit(1); +} +console.log('command:', cmdValue); +console.log('environment:', envValue || "no environment given"); +``` +Angled brackets (e.g. ``) indicate required input. Square brackets (e.g. `[env]`) indicate optional input. + +## Git-style sub-commands + +```js +// file: ./examples/pm +var program = require('commander'); + +program + .version('0.1.0') + .command('install [name]', 'install one or more packages') + .command('search [query]', 'search with optional query') + .command('list', 'list packages installed', {isDefault: true}) + .parse(process.argv); +``` + +When `.command()` is invoked with a description argument, no `.action(callback)` should be called to handle sub-commands, otherwise there will be an error. This tells commander that you're going to use separate executables for sub-commands, much like `git(1)` and other popular tools. +The commander will try to search the executables in the directory of the entry script (like `./examples/pm`) with the name `program-command`, like `pm-install`, `pm-search`. + +Options can be passed with the call to `.command()`. Specifying `true` for `opts.noHelp` will remove the subcommand from the generated help output. Specifying `true` for `opts.isDefault` will run the subcommand if no other subcommand is specified. + +If the program is designed to be installed globally, make sure the executables have proper modes, like `755`. + +### `--harmony` + +You can enable `--harmony` option in two ways: +* Use `#! /usr/bin/env node --harmony` in the sub-commands scripts. Note some os version don’t support this pattern. +* Use the `--harmony` option when call the command, like `node --harmony examples/pm publish`. The `--harmony` option will be preserved when spawning sub-command process. + +## Automated --help + + The help information is auto-generated based on the information commander already knows about your program, so the following `--help` info is for free: + +``` +$ ./examples/pizza --help +Usage: pizza [options] + +An application for pizzas ordering + +Options: + -h, --help output usage information + -V, --version output the version number + -p, --peppers Add peppers + -P, --pineapple Add pineapple + -b, --bbq Add bbq sauce + -c, --cheese Add the specified type of cheese [marble] + -C, --no-cheese You do not want any cheese +``` + +## Custom help + + You can display arbitrary `-h, --help` information + by listening for "--help". Commander will automatically + exit once you are done so that the remainder of your program + does not execute causing undesired behaviors, for example + in the following executable "stuff" will not output when + `--help` is used. + +```js +#!/usr/bin/env node + +/** + * Module dependencies. + */ + +var program = require('commander'); + +program + .version('0.1.0') + .option('-f, --foo', 'enable some foo') + .option('-b, --bar', 'enable some bar') + .option('-B, --baz', 'enable some baz'); + +// must be before .parse() since +// node's emit() is immediate + +program.on('--help', function(){ + console.log('') + console.log('Examples:'); + console.log(' $ custom-help --help'); + console.log(' $ custom-help -h'); +}); + +program.parse(process.argv); + +console.log('stuff'); +``` + +Yields the following help output when `node script-name.js -h` or `node script-name.js --help` are run: + +``` +Usage: custom-help [options] + +Options: + -h, --help output usage information + -V, --version output the version number + -f, --foo enable some foo + -b, --bar enable some bar + -B, --baz enable some baz + +Examples: + $ custom-help --help + $ custom-help -h +``` + +## .outputHelp(cb) + +Output help information without exiting. +Optional callback cb allows post-processing of help text before it is displayed. + +If you want to display help by default (e.g. if no command was provided), you can use something like: + +```js +var program = require('commander'); +var colors = require('colors'); + +program + .version('0.1.0') + .command('getstream [url]', 'get stream URL') + .parse(process.argv); + +if (!process.argv.slice(2).length) { + program.outputHelp(make_red); +} + +function make_red(txt) { + return colors.red(txt); //display the help text in red on the console +} +``` + +## .help(cb) + + Output help information and exit immediately. + Optional callback cb allows post-processing of help text before it is displayed. + + +## Custom event listeners + You can execute custom actions by listening to command and option events. + +```js +program.on('option:verbose', function () { + process.env.VERBOSE = this.verbose; +}); + +// error on unknown commands +program.on('command:*', function () { + console.error('Invalid command: %s\nSee --help for a list of available commands.', program.args.join(' ')); + process.exit(1); +}); +``` + +## Examples + +```js +var program = require('commander'); + +program + .version('0.1.0') + .option('-C, --chdir ', 'change the working directory') + .option('-c, --config ', 'set config path. defaults to ./deploy.conf') + .option('-T, --no-tests', 'ignore test hook'); + +program + .command('setup [env]') + .description('run setup commands for all envs') + .option("-s, --setup_mode [mode]", "Which setup mode to use") + .action(function(env, options){ + var mode = options.setup_mode || "normal"; + env = env || 'all'; + console.log('setup for %s env(s) with %s mode', env, mode); + }); + +program + .command('exec ') + .alias('ex') + .description('execute the given remote cmd') + .option("-e, --exec_mode ", "Which exec mode to use") + .action(function(cmd, options){ + console.log('exec "%s" using %s mode', cmd, options.exec_mode); + }).on('--help', function() { + console.log(''); + console.log('Examples:'); + console.log(''); + console.log(' $ deploy exec sequential'); + console.log(' $ deploy exec async'); + }); + +program + .command('*') + .action(function(env){ + console.log('deploying "%s"', env); + }); + +program.parse(process.argv); +``` + +More Demos can be found in the [examples](https://github.com/tj/commander.js/tree/master/examples) directory. + +## License + +[MIT](https://github.com/tj/commander.js/blob/master/LICENSE) diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/commander/index.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/commander/index.js new file mode 100644 index 00000000..ec1d61d5 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/commander/index.js @@ -0,0 +1,1224 @@ +/** + * Module dependencies. + */ + +var EventEmitter = require('events').EventEmitter; +var spawn = require('child_process').spawn; +var path = require('path'); +var dirname = path.dirname; +var basename = path.basename; +var fs = require('fs'); + +/** + * Inherit `Command` from `EventEmitter.prototype`. + */ + +require('util').inherits(Command, EventEmitter); + +/** + * Expose the root command. + */ + +exports = module.exports = new Command(); + +/** + * Expose `Command`. + */ + +exports.Command = Command; + +/** + * Expose `Option`. + */ + +exports.Option = Option; + +/** + * Initialize a new `Option` with the given `flags` and `description`. + * + * @param {String} flags + * @param {String} description + * @api public + */ + +function Option(flags, description) { + this.flags = flags; + this.required = flags.indexOf('<') >= 0; + this.optional = flags.indexOf('[') >= 0; + this.bool = flags.indexOf('-no-') === -1; + flags = flags.split(/[ ,|]+/); + if (flags.length > 1 && !/^[[<]/.test(flags[1])) this.short = flags.shift(); + this.long = flags.shift(); + this.description = description || ''; +} + +/** + * Return option name. + * + * @return {String} + * @api private + */ + +Option.prototype.name = function() { + return this.long + .replace('--', '') + .replace('no-', ''); +}; + +/** + * Return option name, in a camelcase format that can be used + * as a object attribute key. + * + * @return {String} + * @api private + */ + +Option.prototype.attributeName = function() { + return camelcase(this.name()); +}; + +/** + * Check if `arg` matches the short or long flag. + * + * @param {String} arg + * @return {Boolean} + * @api private + */ + +Option.prototype.is = function(arg) { + return this.short === arg || this.long === arg; +}; + +/** + * Initialize a new `Command`. + * + * @param {String} name + * @api public + */ + +function Command(name) { + this.commands = []; + this.options = []; + this._execs = {}; + this._allowUnknownOption = false; + this._args = []; + this._name = name || ''; +} + +/** + * Add command `name`. + * + * The `.action()` callback is invoked when the + * command `name` is specified via __ARGV__, + * and the remaining arguments are applied to the + * function for access. + * + * When the `name` is "*" an un-matched command + * will be passed as the first arg, followed by + * the rest of __ARGV__ remaining. + * + * Examples: + * + * program + * .version('0.0.1') + * .option('-C, --chdir ', 'change the working directory') + * .option('-c, --config ', 'set config path. defaults to ./deploy.conf') + * .option('-T, --no-tests', 'ignore test hook') + * + * program + * .command('setup') + * .description('run remote setup commands') + * .action(function() { + * console.log('setup'); + * }); + * + * program + * .command('exec ') + * .description('run the given remote command') + * .action(function(cmd) { + * console.log('exec "%s"', cmd); + * }); + * + * program + * .command('teardown [otherDirs...]') + * .description('run teardown commands') + * .action(function(dir, otherDirs) { + * console.log('dir "%s"', dir); + * if (otherDirs) { + * otherDirs.forEach(function (oDir) { + * console.log('dir "%s"', oDir); + * }); + * } + * }); + * + * program + * .command('*') + * .description('deploy the given env') + * .action(function(env) { + * console.log('deploying "%s"', env); + * }); + * + * program.parse(process.argv); + * + * @param {String} name + * @param {String} [desc] for git-style sub-commands + * @return {Command} the new command + * @api public + */ + +Command.prototype.command = function(name, desc, opts) { + if (typeof desc === 'object' && desc !== null) { + opts = desc; + desc = null; + } + opts = opts || {}; + var args = name.split(/ +/); + var cmd = new Command(args.shift()); + + if (desc) { + cmd.description(desc); + this.executables = true; + this._execs[cmd._name] = true; + if (opts.isDefault) this.defaultExecutable = cmd._name; + } + cmd._noHelp = !!opts.noHelp; + this.commands.push(cmd); + cmd.parseExpectedArgs(args); + cmd.parent = this; + + if (desc) return this; + return cmd; +}; + +/** + * Define argument syntax for the top-level command. + * + * @api public + */ + +Command.prototype.arguments = function(desc) { + return this.parseExpectedArgs(desc.split(/ +/)); +}; + +/** + * Add an implicit `help [cmd]` subcommand + * which invokes `--help` for the given command. + * + * @api private + */ + +Command.prototype.addImplicitHelpCommand = function() { + this.command('help [cmd]', 'display help for [cmd]'); +}; + +/** + * Parse expected `args`. + * + * For example `["[type]"]` becomes `[{ required: false, name: 'type' }]`. + * + * @param {Array} args + * @return {Command} for chaining + * @api public + */ + +Command.prototype.parseExpectedArgs = function(args) { + if (!args.length) return; + var self = this; + args.forEach(function(arg) { + var argDetails = { + required: false, + name: '', + variadic: false + }; + + switch (arg[0]) { + case '<': + argDetails.required = true; + argDetails.name = arg.slice(1, -1); + break; + case '[': + argDetails.name = arg.slice(1, -1); + break; + } + + if (argDetails.name.length > 3 && argDetails.name.slice(-3) === '...') { + argDetails.variadic = true; + argDetails.name = argDetails.name.slice(0, -3); + } + if (argDetails.name) { + self._args.push(argDetails); + } + }); + return this; +}; + +/** + * Register callback `fn` for the command. + * + * Examples: + * + * program + * .command('help') + * .description('display verbose help') + * .action(function() { + * // output help here + * }); + * + * @param {Function} fn + * @return {Command} for chaining + * @api public + */ + +Command.prototype.action = function(fn) { + var self = this; + var listener = function(args, unknown) { + // Parse any so-far unknown options + args = args || []; + unknown = unknown || []; + + var parsed = self.parseOptions(unknown); + + // Output help if necessary + outputHelpIfNecessary(self, parsed.unknown); + + // If there are still any unknown options, then we simply + // die, unless someone asked for help, in which case we give it + // to them, and then we die. + if (parsed.unknown.length > 0) { + self.unknownOption(parsed.unknown[0]); + } + + // Leftover arguments need to be pushed back. Fixes issue #56 + if (parsed.args.length) args = parsed.args.concat(args); + + self._args.forEach(function(arg, i) { + if (arg.required && args[i] == null) { + self.missingArgument(arg.name); + } else if (arg.variadic) { + if (i !== self._args.length - 1) { + self.variadicArgNotLast(arg.name); + } + + args[i] = args.splice(i); + } + }); + + // Always append ourselves to the end of the arguments, + // to make sure we match the number of arguments the user + // expects + if (self._args.length) { + args[self._args.length] = self; + } else { + args.push(self); + } + + fn.apply(self, args); + }; + var parent = this.parent || this; + var name = parent === this ? '*' : this._name; + parent.on('command:' + name, listener); + if (this._alias) parent.on('command:' + this._alias, listener); + return this; +}; + +/** + * Define option with `flags`, `description` and optional + * coercion `fn`. + * + * The `flags` string should contain both the short and long flags, + * separated by comma, a pipe or space. The following are all valid + * all will output this way when `--help` is used. + * + * "-p, --pepper" + * "-p|--pepper" + * "-p --pepper" + * + * Examples: + * + * // simple boolean defaulting to false + * program.option('-p, --pepper', 'add pepper'); + * + * --pepper + * program.pepper + * // => Boolean + * + * // simple boolean defaulting to true + * program.option('-C, --no-cheese', 'remove cheese'); + * + * program.cheese + * // => true + * + * --no-cheese + * program.cheese + * // => false + * + * // required argument + * program.option('-C, --chdir ', 'change the working directory'); + * + * --chdir /tmp + * program.chdir + * // => "/tmp" + * + * // optional argument + * program.option('-c, --cheese [type]', 'add cheese [marble]'); + * + * @param {String} flags + * @param {String} description + * @param {Function|*} [fn] or default + * @param {*} [defaultValue] + * @return {Command} for chaining + * @api public + */ + +Command.prototype.option = function(flags, description, fn, defaultValue) { + var self = this, + option = new Option(flags, description), + oname = option.name(), + name = option.attributeName(); + + // default as 3rd arg + if (typeof fn !== 'function') { + if (fn instanceof RegExp) { + var regex = fn; + fn = function(val, def) { + var m = regex.exec(val); + return m ? m[0] : def; + }; + } else { + defaultValue = fn; + fn = null; + } + } + + // preassign default value only for --no-*, [optional], or + if (!option.bool || option.optional || option.required) { + // when --no-* we make sure default is true + if (!option.bool) defaultValue = true; + // preassign only if we have a default + if (defaultValue !== undefined) { + self[name] = defaultValue; + option.defaultValue = defaultValue; + } + } + + // register the option + this.options.push(option); + + // when it's passed assign the value + // and conditionally invoke the callback + this.on('option:' + oname, function(val) { + // coercion + if (val !== null && fn) { + val = fn(val, self[name] === undefined ? defaultValue : self[name]); + } + + // unassigned or bool + if (typeof self[name] === 'boolean' || typeof self[name] === 'undefined') { + // if no value, bool true, and we have a default, then use it! + if (val == null) { + self[name] = option.bool + ? defaultValue || true + : false; + } else { + self[name] = val; + } + } else if (val !== null) { + // reassign + self[name] = val; + } + }); + + return this; +}; + +/** + * Allow unknown options on the command line. + * + * @param {Boolean} arg if `true` or omitted, no error will be thrown + * for unknown options. + * @api public + */ +Command.prototype.allowUnknownOption = function(arg) { + this._allowUnknownOption = arguments.length === 0 || arg; + return this; +}; + +/** + * Parse `argv`, settings options and invoking commands when defined. + * + * @param {Array} argv + * @return {Command} for chaining + * @api public + */ + +Command.prototype.parse = function(argv) { + // implicit help + if (this.executables) this.addImplicitHelpCommand(); + + // store raw args + this.rawArgs = argv; + + // guess name + this._name = this._name || basename(argv[1], '.js'); + + // github-style sub-commands with no sub-command + if (this.executables && argv.length < 3 && !this.defaultExecutable) { + // this user needs help + argv.push('--help'); + } + + // process argv + var parsed = this.parseOptions(this.normalize(argv.slice(2))); + var args = this.args = parsed.args; + + var result = this.parseArgs(this.args, parsed.unknown); + + // executable sub-commands + var name = result.args[0]; + + var aliasCommand = null; + // check alias of sub commands + if (name) { + aliasCommand = this.commands.filter(function(command) { + return command.alias() === name; + })[0]; + } + + if (this._execs[name] === true) { + return this.executeSubCommand(argv, args, parsed.unknown); + } else if (aliasCommand) { + // is alias of a subCommand + args[0] = aliasCommand._name; + return this.executeSubCommand(argv, args, parsed.unknown); + } else if (this.defaultExecutable) { + // use the default subcommand + args.unshift(this.defaultExecutable); + return this.executeSubCommand(argv, args, parsed.unknown); + } + + return result; +}; + +/** + * Execute a sub-command executable. + * + * @param {Array} argv + * @param {Array} args + * @param {Array} unknown + * @api private + */ + +Command.prototype.executeSubCommand = function(argv, args, unknown) { + args = args.concat(unknown); + + if (!args.length) this.help(); + if (args[0] === 'help' && args.length === 1) this.help(); + + // --help + if (args[0] === 'help') { + args[0] = args[1]; + args[1] = '--help'; + } + + // executable + var f = argv[1]; + // name of the subcommand, link `pm-install` + var bin = basename(f, path.extname(f)) + '-' + args[0]; + + // In case of globally installed, get the base dir where executable + // subcommand file should be located at + var baseDir; + + var resolvedLink = fs.realpathSync(f); + + baseDir = dirname(resolvedLink); + + // prefer local `./` to bin in the $PATH + var localBin = path.join(baseDir, bin); + + // whether bin file is a js script with explicit `.js` or `.ts` extension + var isExplicitJS = false; + if (exists(localBin + '.js')) { + bin = localBin + '.js'; + isExplicitJS = true; + } else if (exists(localBin + '.ts')) { + bin = localBin + '.ts'; + isExplicitJS = true; + } else if (exists(localBin)) { + bin = localBin; + } + + args = args.slice(1); + + var proc; + if (process.platform !== 'win32') { + if (isExplicitJS) { + args.unshift(bin); + // add executable arguments to spawn + args = (process.execArgv || []).concat(args); + + proc = spawn(process.argv[0], args, { stdio: 'inherit', customFds: [0, 1, 2] }); + } else { + proc = spawn(bin, args, { stdio: 'inherit', customFds: [0, 1, 2] }); + } + } else { + args.unshift(bin); + proc = spawn(process.execPath, args, { stdio: 'inherit' }); + } + + var signals = ['SIGUSR1', 'SIGUSR2', 'SIGTERM', 'SIGINT', 'SIGHUP']; + signals.forEach(function(signal) { + process.on(signal, function() { + if (proc.killed === false && proc.exitCode === null) { + proc.kill(signal); + } + }); + }); + proc.on('close', process.exit.bind(process)); + proc.on('error', function(err) { + if (err.code === 'ENOENT') { + console.error('error: %s(1) does not exist, try --help', bin); + } else if (err.code === 'EACCES') { + console.error('error: %s(1) not executable. try chmod or run with root', bin); + } + process.exit(1); + }); + + // Store the reference to the child process + this.runningCommand = proc; +}; + +/** + * Normalize `args`, splitting joined short flags. For example + * the arg "-abc" is equivalent to "-a -b -c". + * This also normalizes equal sign and splits "--abc=def" into "--abc def". + * + * @param {Array} args + * @return {Array} + * @api private + */ + +Command.prototype.normalize = function(args) { + var ret = [], + arg, + lastOpt, + index; + + for (var i = 0, len = args.length; i < len; ++i) { + arg = args[i]; + if (i > 0) { + lastOpt = this.optionFor(args[i - 1]); + } + + if (arg === '--') { + // Honor option terminator + ret = ret.concat(args.slice(i)); + break; + } else if (lastOpt && lastOpt.required) { + ret.push(arg); + } else if (arg.length > 1 && arg[0] === '-' && arg[1] !== '-') { + arg.slice(1).split('').forEach(function(c) { + ret.push('-' + c); + }); + } else if (/^--/.test(arg) && ~(index = arg.indexOf('='))) { + ret.push(arg.slice(0, index), arg.slice(index + 1)); + } else { + ret.push(arg); + } + } + + return ret; +}; + +/** + * Parse command `args`. + * + * When listener(s) are available those + * callbacks are invoked, otherwise the "*" + * event is emitted and those actions are invoked. + * + * @param {Array} args + * @return {Command} for chaining + * @api private + */ + +Command.prototype.parseArgs = function(args, unknown) { + var name; + + if (args.length) { + name = args[0]; + if (this.listeners('command:' + name).length) { + this.emit('command:' + args.shift(), args, unknown); + } else { + this.emit('command:*', args); + } + } else { + outputHelpIfNecessary(this, unknown); + + // If there were no args and we have unknown options, + // then they are extraneous and we need to error. + if (unknown.length > 0) { + this.unknownOption(unknown[0]); + } + if (this.commands.length === 0 && + this._args.filter(function(a) { return a.required; }).length === 0) { + this.emit('command:*'); + } + } + + return this; +}; + +/** + * Return an option matching `arg` if any. + * + * @param {String} arg + * @return {Option} + * @api private + */ + +Command.prototype.optionFor = function(arg) { + for (var i = 0, len = this.options.length; i < len; ++i) { + if (this.options[i].is(arg)) { + return this.options[i]; + } + } +}; + +/** + * Parse options from `argv` returning `argv` + * void of these options. + * + * @param {Array} argv + * @return {Array} + * @api public + */ + +Command.prototype.parseOptions = function(argv) { + var args = [], + len = argv.length, + literal, + option, + arg; + + var unknownOptions = []; + + // parse options + for (var i = 0; i < len; ++i) { + arg = argv[i]; + + // literal args after -- + if (literal) { + args.push(arg); + continue; + } + + if (arg === '--') { + literal = true; + continue; + } + + // find matching Option + option = this.optionFor(arg); + + // option is defined + if (option) { + // requires arg + if (option.required) { + arg = argv[++i]; + if (arg == null) return this.optionMissingArgument(option); + this.emit('option:' + option.name(), arg); + // optional arg + } else if (option.optional) { + arg = argv[i + 1]; + if (arg == null || (arg[0] === '-' && arg !== '-')) { + arg = null; + } else { + ++i; + } + this.emit('option:' + option.name(), arg); + // bool + } else { + this.emit('option:' + option.name()); + } + continue; + } + + // looks like an option + if (arg.length > 1 && arg[0] === '-') { + unknownOptions.push(arg); + + // If the next argument looks like it might be + // an argument for this option, we pass it on. + // If it isn't, then it'll simply be ignored + if ((i + 1) < argv.length && argv[i + 1][0] !== '-') { + unknownOptions.push(argv[++i]); + } + continue; + } + + // arg + args.push(arg); + } + + return { args: args, unknown: unknownOptions }; +}; + +/** + * Return an object containing options as key-value pairs + * + * @return {Object} + * @api public + */ +Command.prototype.opts = function() { + var result = {}, + len = this.options.length; + + for (var i = 0; i < len; i++) { + var key = this.options[i].attributeName(); + result[key] = key === this._versionOptionName ? this._version : this[key]; + } + return result; +}; + +/** + * Argument `name` is missing. + * + * @param {String} name + * @api private + */ + +Command.prototype.missingArgument = function(name) { + console.error("error: missing required argument `%s'", name); + process.exit(1); +}; + +/** + * `Option` is missing an argument, but received `flag` or nothing. + * + * @param {String} option + * @param {String} flag + * @api private + */ + +Command.prototype.optionMissingArgument = function(option, flag) { + if (flag) { + console.error("error: option `%s' argument missing, got `%s'", option.flags, flag); + } else { + console.error("error: option `%s' argument missing", option.flags); + } + process.exit(1); +}; + +/** + * Unknown option `flag`. + * + * @param {String} flag + * @api private + */ + +Command.prototype.unknownOption = function(flag) { + if (this._allowUnknownOption) return; + console.error("error: unknown option `%s'", flag); + process.exit(1); +}; + +/** + * Variadic argument with `name` is not the last argument as required. + * + * @param {String} name + * @api private + */ + +Command.prototype.variadicArgNotLast = function(name) { + console.error("error: variadic arguments must be last `%s'", name); + process.exit(1); +}; + +/** + * Set the program version to `str`. + * + * This method auto-registers the "-V, --version" flag + * which will print the version number when passed. + * + * @param {String} str + * @param {String} [flags] + * @return {Command} for chaining + * @api public + */ + +Command.prototype.version = function(str, flags) { + if (arguments.length === 0) return this._version; + this._version = str; + flags = flags || '-V, --version'; + var versionOption = new Option(flags, 'output the version number'); + this._versionOptionName = versionOption.long.substr(2) || 'version'; + this.options.push(versionOption); + this.on('option:' + this._versionOptionName, function() { + process.stdout.write(str + '\n'); + process.exit(0); + }); + return this; +}; + +/** + * Set the description to `str`. + * + * @param {String} str + * @param {Object} argsDescription + * @return {String|Command} + * @api public + */ + +Command.prototype.description = function(str, argsDescription) { + if (arguments.length === 0) return this._description; + this._description = str; + this._argsDescription = argsDescription; + return this; +}; + +/** + * Set an alias for the command + * + * @param {String} alias + * @return {String|Command} + * @api public + */ + +Command.prototype.alias = function(alias) { + var command = this; + if (this.commands.length !== 0) { + command = this.commands[this.commands.length - 1]; + } + + if (arguments.length === 0) return command._alias; + + if (alias === command._name) throw new Error('Command alias can\'t be the same as its name'); + + command._alias = alias; + return this; +}; + +/** + * Set / get the command usage `str`. + * + * @param {String} str + * @return {String|Command} + * @api public + */ + +Command.prototype.usage = function(str) { + var args = this._args.map(function(arg) { + return humanReadableArgName(arg); + }); + + var usage = '[options]' + + (this.commands.length ? ' [command]' : '') + + (this._args.length ? ' ' + args.join(' ') : ''); + + if (arguments.length === 0) return this._usage || usage; + this._usage = str; + + return this; +}; + +/** + * Get or set the name of the command + * + * @param {String} str + * @return {String|Command} + * @api public + */ + +Command.prototype.name = function(str) { + if (arguments.length === 0) return this._name; + this._name = str; + return this; +}; + +/** + * Return prepared commands. + * + * @return {Array} + * @api private + */ + +Command.prototype.prepareCommands = function() { + return this.commands.filter(function(cmd) { + return !cmd._noHelp; + }).map(function(cmd) { + var args = cmd._args.map(function(arg) { + return humanReadableArgName(arg); + }).join(' '); + + return [ + cmd._name + + (cmd._alias ? '|' + cmd._alias : '') + + (cmd.options.length ? ' [options]' : '') + + (args ? ' ' + args : ''), + cmd._description + ]; + }); +}; + +/** + * Return the largest command length. + * + * @return {Number} + * @api private + */ + +Command.prototype.largestCommandLength = function() { + var commands = this.prepareCommands(); + return commands.reduce(function(max, command) { + return Math.max(max, command[0].length); + }, 0); +}; + +/** + * Return the largest option length. + * + * @return {Number} + * @api private + */ + +Command.prototype.largestOptionLength = function() { + var options = [].slice.call(this.options); + options.push({ + flags: '-h, --help' + }); + return options.reduce(function(max, option) { + return Math.max(max, option.flags.length); + }, 0); +}; + +/** + * Return the largest arg length. + * + * @return {Number} + * @api private + */ + +Command.prototype.largestArgLength = function() { + return this._args.reduce(function(max, arg) { + return Math.max(max, arg.name.length); + }, 0); +}; + +/** + * Return the pad width. + * + * @return {Number} + * @api private + */ + +Command.prototype.padWidth = function() { + var width = this.largestOptionLength(); + if (this._argsDescription && this._args.length) { + if (this.largestArgLength() > width) { + width = this.largestArgLength(); + } + } + + if (this.commands && this.commands.length) { + if (this.largestCommandLength() > width) { + width = this.largestCommandLength(); + } + } + + return width; +}; + +/** + * Return help for options. + * + * @return {String} + * @api private + */ + +Command.prototype.optionHelp = function() { + var width = this.padWidth(); + + // Append the help information + return this.options.map(function(option) { + return pad(option.flags, width) + ' ' + option.description + + ((option.bool && option.defaultValue !== undefined) ? ' (default: ' + JSON.stringify(option.defaultValue) + ')' : ''); + }).concat([pad('-h, --help', width) + ' ' + 'output usage information']) + .join('\n'); +}; + +/** + * Return command help documentation. + * + * @return {String} + * @api private + */ + +Command.prototype.commandHelp = function() { + if (!this.commands.length) return ''; + + var commands = this.prepareCommands(); + var width = this.padWidth(); + + return [ + 'Commands:', + commands.map(function(cmd) { + var desc = cmd[1] ? ' ' + cmd[1] : ''; + return (desc ? pad(cmd[0], width) : cmd[0]) + desc; + }).join('\n').replace(/^/gm, ' '), + '' + ].join('\n'); +}; + +/** + * Return program help documentation. + * + * @return {String} + * @api private + */ + +Command.prototype.helpInformation = function() { + var desc = []; + if (this._description) { + desc = [ + this._description, + '' + ]; + + var argsDescription = this._argsDescription; + if (argsDescription && this._args.length) { + var width = this.padWidth(); + desc.push('Arguments:'); + desc.push(''); + this._args.forEach(function(arg) { + desc.push(' ' + pad(arg.name, width) + ' ' + argsDescription[arg.name]); + }); + desc.push(''); + } + } + + var cmdName = this._name; + if (this._alias) { + cmdName = cmdName + '|' + this._alias; + } + var usage = [ + 'Usage: ' + cmdName + ' ' + this.usage(), + '' + ]; + + var cmds = []; + var commandHelp = this.commandHelp(); + if (commandHelp) cmds = [commandHelp]; + + var options = [ + 'Options:', + '' + this.optionHelp().replace(/^/gm, ' '), + '' + ]; + + return usage + .concat(desc) + .concat(options) + .concat(cmds) + .join('\n'); +}; + +/** + * Output help information for this command + * + * @api public + */ + +Command.prototype.outputHelp = function(cb) { + if (!cb) { + cb = function(passthru) { + return passthru; + }; + } + process.stdout.write(cb(this.helpInformation())); + this.emit('--help'); +}; + +/** + * Output help information and exit. + * + * @api public + */ + +Command.prototype.help = function(cb) { + this.outputHelp(cb); + process.exit(); +}; + +/** + * Camel-case the given `flag` + * + * @param {String} flag + * @return {String} + * @api private + */ + +function camelcase(flag) { + return flag.split('-').reduce(function(str, word) { + return str + word[0].toUpperCase() + word.slice(1); + }); +} + +/** + * Pad `str` to `width`. + * + * @param {String} str + * @param {Number} width + * @return {String} + * @api private + */ + +function pad(str, width) { + var len = Math.max(0, width - str.length); + return str + Array(len + 1).join(' '); +} + +/** + * Output help information if necessary + * + * @param {Command} command to output help for + * @param {Array} array of options to search for -h or --help + * @api private + */ + +function outputHelpIfNecessary(cmd, options) { + options = options || []; + for (var i = 0; i < options.length; i++) { + if (options[i] === '--help' || options[i] === '-h') { + cmd.outputHelp(); + process.exit(0); + } + } +} + +/** + * Takes an argument an returns its human readable equivalent for help usage. + * + * @param {Object} arg + * @return {String} + * @api private + */ + +function humanReadableArgName(arg) { + var nameOutput = arg.name + (arg.variadic === true ? '...' : ''); + + return arg.required + ? '<' + nameOutput + '>' + : '[' + nameOutput + ']'; +} + +// for versions before node v0.8 when there weren't `fs.existsSync` +function exists(file) { + try { + if (fs.statSync(file).isFile()) { + return true; + } + } catch (e) { + return false; + } +} diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/commander/package.json b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/commander/package.json new file mode 100644 index 00000000..fbb80d41 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/commander/package.json @@ -0,0 +1,70 @@ +{ + "_from": "commander@^2.20.3", + "_id": "commander@2.20.3", + "_inBundle": false, + "_integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "_location": "/dxf/commander", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "commander@^2.20.3", + "name": "commander", + "escapedName": "commander", + "rawSpec": "^2.20.3", + "saveSpec": null, + "fetchSpec": "^2.20.3" + }, + "_requiredBy": [ + "/dxf" + ], + "_resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "_shasum": "fd485e84c03eb4881c20722ba48035e8531aeb33", + "_spec": "commander@^2.20.3", + "_where": "C:\\node-v10.18.0-win-x64\\node_modules\\dxf", + "author": { + "name": "TJ Holowaychuk", + "email": "tj@vision-media.ca" + }, + "bugs": { + "url": "https://github.com/tj/commander.js/issues" + }, + "bundleDependencies": false, + "dependencies": {}, + "deprecated": false, + "description": "the complete solution for node.js command-line programs", + "devDependencies": { + "@types/node": "^12.7.8", + "eslint": "^6.4.0", + "should": "^13.2.3", + "sinon": "^7.5.0", + "standard": "^14.3.1", + "ts-node": "^8.4.1", + "typescript": "^3.6.3" + }, + "files": [ + "index.js", + "typings/index.d.ts" + ], + "homepage": "https://github.com/tj/commander.js#readme", + "keywords": [ + "commander", + "command", + "option", + "parser" + ], + "license": "MIT", + "main": "index", + "name": "commander", + "repository": { + "type": "git", + "url": "git+https://github.com/tj/commander.js.git" + }, + "scripts": { + "lint": "eslint index.js", + "test": "node test/run.js && npm run test-typings", + "test-typings": "tsc -p tsconfig.json" + }, + "typings": "typings/index.d.ts", + "version": "2.20.3" +} diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/commander/typings/index.d.ts b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/commander/typings/index.d.ts new file mode 100644 index 00000000..bcda2771 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/commander/typings/index.d.ts @@ -0,0 +1,310 @@ +// Type definitions for commander 2.11 +// Project: https://github.com/visionmedia/commander.js +// Definitions by: Alan Agius , Marcelo Dezem , vvakame , Jules Randolph +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + +declare namespace local { + + class Option { + flags: string; + required: boolean; + optional: boolean; + bool: boolean; + short?: string; + long: string; + description: string; + + /** + * Initialize a new `Option` with the given `flags` and `description`. + * + * @param {string} flags + * @param {string} [description] + */ + constructor(flags: string, description?: string); + } + + class Command extends NodeJS.EventEmitter { + [key: string]: any; + + args: string[]; + + /** + * Initialize a new `Command`. + * + * @param {string} [name] + */ + constructor(name?: string); + + /** + * Set the program version to `str`. + * + * This method auto-registers the "-V, --version" flag + * which will print the version number when passed. + * + * @param {string} str + * @param {string} [flags] + * @returns {Command} for chaining + */ + version(str: string, flags?: string): Command; + + /** + * Add command `name`. + * + * The `.action()` callback is invoked when the + * command `name` is specified via __ARGV__, + * and the remaining arguments are applied to the + * function for access. + * + * When the `name` is "*" an un-matched command + * will be passed as the first arg, followed by + * the rest of __ARGV__ remaining. + * + * @example + * program + * .version('0.0.1') + * .option('-C, --chdir ', 'change the working directory') + * .option('-c, --config ', 'set config path. defaults to ./deploy.conf') + * .option('-T, --no-tests', 'ignore test hook') + * + * program + * .command('setup') + * .description('run remote setup commands') + * .action(function() { + * console.log('setup'); + * }); + * + * program + * .command('exec ') + * .description('run the given remote command') + * .action(function(cmd) { + * console.log('exec "%s"', cmd); + * }); + * + * program + * .command('teardown [otherDirs...]') + * .description('run teardown commands') + * .action(function(dir, otherDirs) { + * console.log('dir "%s"', dir); + * if (otherDirs) { + * otherDirs.forEach(function (oDir) { + * console.log('dir "%s"', oDir); + * }); + * } + * }); + * + * program + * .command('*') + * .description('deploy the given env') + * .action(function(env) { + * console.log('deploying "%s"', env); + * }); + * + * program.parse(process.argv); + * + * @param {string} name + * @param {string} [desc] for git-style sub-commands + * @param {CommandOptions} [opts] command options + * @returns {Command} the new command + */ + command(name: string, desc?: string, opts?: commander.CommandOptions): Command; + + /** + * Define argument syntax for the top-level command. + * + * @param {string} desc + * @returns {Command} for chaining + */ + arguments(desc: string): Command; + + /** + * Parse expected `args`. + * + * For example `["[type]"]` becomes `[{ required: false, name: 'type' }]`. + * + * @param {string[]} args + * @returns {Command} for chaining + */ + parseExpectedArgs(args: string[]): Command; + + /** + * Register callback `fn` for the command. + * + * @example + * program + * .command('help') + * .description('display verbose help') + * .action(function() { + * // output help here + * }); + * + * @param {(...args: any[]) => void} fn + * @returns {Command} for chaining + */ + action(fn: (...args: any[]) => void): Command; + + /** + * Define option with `flags`, `description` and optional + * coercion `fn`. + * + * The `flags` string should contain both the short and long flags, + * separated by comma, a pipe or space. The following are all valid + * all will output this way when `--help` is used. + * + * "-p, --pepper" + * "-p|--pepper" + * "-p --pepper" + * + * @example + * // simple boolean defaulting to false + * program.option('-p, --pepper', 'add pepper'); + * + * --pepper + * program.pepper + * // => Boolean + * + * // simple boolean defaulting to true + * program.option('-C, --no-cheese', 'remove cheese'); + * + * program.cheese + * // => true + * + * --no-cheese + * program.cheese + * // => false + * + * // required argument + * program.option('-C, --chdir ', 'change the working directory'); + * + * --chdir /tmp + * program.chdir + * // => "/tmp" + * + * // optional argument + * program.option('-c, --cheese [type]', 'add cheese [marble]'); + * + * @param {string} flags + * @param {string} [description] + * @param {((arg1: any, arg2: any) => void) | RegExp} [fn] function or default + * @param {*} [defaultValue] + * @returns {Command} for chaining + */ + option(flags: string, description?: string, fn?: ((arg1: any, arg2: any) => void) | RegExp, defaultValue?: any): Command; + option(flags: string, description?: string, defaultValue?: any): Command; + + /** + * Allow unknown options on the command line. + * + * @param {boolean} [arg] if `true` or omitted, no error will be thrown for unknown options. + * @returns {Command} for chaining + */ + allowUnknownOption(arg?: boolean): Command; + + /** + * Parse `argv`, settings options and invoking commands when defined. + * + * @param {string[]} argv + * @returns {Command} for chaining + */ + parse(argv: string[]): Command; + + /** + * Parse options from `argv` returning `argv` void of these options. + * + * @param {string[]} argv + * @returns {ParseOptionsResult} + */ + parseOptions(argv: string[]): commander.ParseOptionsResult; + + /** + * Return an object containing options as key-value pairs + * + * @returns {{[key: string]: any}} + */ + opts(): { [key: string]: any }; + + /** + * Set the description to `str`. + * + * @param {string} str + * @param {{[argName: string]: string}} argsDescription + * @return {(Command | string)} + */ + description(str: string, argsDescription?: {[argName: string]: string}): Command; + description(): string; + + /** + * Set an alias for the command. + * + * @param {string} alias + * @return {(Command | string)} + */ + alias(alias: string): Command; + alias(): string; + + /** + * Set or get the command usage. + * + * @param {string} str + * @return {(Command | string)} + */ + usage(str: string): Command; + usage(): string; + + /** + * Set the name of the command. + * + * @param {string} str + * @return {Command} + */ + name(str: string): Command; + + /** + * Get the name of the command. + * + * @return {string} + */ + name(): string; + + /** + * Output help information for this command. + * + * @param {(str: string) => string} [cb] + */ + outputHelp(cb?: (str: string) => string): void; + + /** Output help information and exit. + * + * @param {(str: string) => string} [cb] + */ + help(cb?: (str: string) => string): never; + } + +} + +declare namespace commander { + + type Command = local.Command + + type Option = local.Option + + interface CommandOptions { + noHelp?: boolean; + isDefault?: boolean; + } + + interface ParseOptionsResult { + args: string[]; + unknown: string[]; + } + + interface CommanderStatic extends Command { + Command: typeof local.Command; + Option: typeof local.Option; + CommandOptions: CommandOptions; + ParseOptionsResult: ParseOptionsResult; + } + +} + +declare const commander: commander.CommanderStatic; +export = commander; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/LICENSE b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/LICENSE new file mode 100644 index 00000000..77c42f14 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/LICENSE @@ -0,0 +1,47 @@ +Copyright OpenJS Foundation and other contributors + +Based on Underscore.js, copyright Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors + +This software consists of voluntary contributions made by many +individuals. For exact contribution history, see the revision history +available at https://github.com/lodash/lodash + +The following license applies to all parts of this software except as +documented below: + +==== + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +==== + +Copyright and related rights for sample code are waived via CC0. Sample +code is defined as all source code displayed within the prose of the +documentation. + +CC0: http://creativecommons.org/publicdomain/zero/1.0/ + +==== + +Files located in the node_modules and vendor directories are externally +maintained libraries used by this software which have their own +licenses; we recommend you read them, as their terms may differ from the +terms above. diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/README.md b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/README.md new file mode 100644 index 00000000..e1c99503 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/README.md @@ -0,0 +1,39 @@ +# lodash v4.17.20 + +The [Lodash](https://lodash.com/) library exported as [Node.js](https://nodejs.org/) modules. + +## Installation + +Using npm: +```shell +$ npm i -g npm +$ npm i --save lodash +``` + +In Node.js: +```js +// Load the full build. +var _ = require('lodash'); +// Load the core build. +var _ = require('lodash/core'); +// Load the FP build for immutable auto-curried iteratee-first data-last methods. +var fp = require('lodash/fp'); + +// Load method categories. +var array = require('lodash/array'); +var object = require('lodash/fp/object'); + +// Cherry-pick methods for smaller browserify/rollup/webpack bundles. +var at = require('lodash/at'); +var curryN = require('lodash/fp/curryN'); +``` + +See the [package source](https://github.com/lodash/lodash/tree/4.17.20-npm) for more details. + +**Note:**
+Install [n_](https://www.npmjs.com/package/n_) for Lodash use in the Node.js < 6 REPL. + +## Support + +Tested in Chrome 74-75, Firefox 66-67, IE 11, Edge 18, Safari 11-12, & Node.js 8-12.
+Automated [browser](https://saucelabs.com/u/lodash) & [CI](https://travis-ci.org/lodash/lodash/) test runs are available. diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_DataView.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_DataView.js new file mode 100644 index 00000000..ac2d57ca --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_DataView.js @@ -0,0 +1,7 @@ +var getNative = require('./_getNative'), + root = require('./_root'); + +/* Built-in method references that are verified to be native. */ +var DataView = getNative(root, 'DataView'); + +module.exports = DataView; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_Hash.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_Hash.js new file mode 100644 index 00000000..b504fe34 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_Hash.js @@ -0,0 +1,32 @@ +var hashClear = require('./_hashClear'), + hashDelete = require('./_hashDelete'), + hashGet = require('./_hashGet'), + hashHas = require('./_hashHas'), + hashSet = require('./_hashSet'); + +/** + * Creates a hash object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function Hash(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +// Add methods to `Hash`. +Hash.prototype.clear = hashClear; +Hash.prototype['delete'] = hashDelete; +Hash.prototype.get = hashGet; +Hash.prototype.has = hashHas; +Hash.prototype.set = hashSet; + +module.exports = Hash; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_LazyWrapper.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_LazyWrapper.js new file mode 100644 index 00000000..81786c7f --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_LazyWrapper.js @@ -0,0 +1,28 @@ +var baseCreate = require('./_baseCreate'), + baseLodash = require('./_baseLodash'); + +/** Used as references for the maximum length and index of an array. */ +var MAX_ARRAY_LENGTH = 4294967295; + +/** + * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation. + * + * @private + * @constructor + * @param {*} value The value to wrap. + */ +function LazyWrapper(value) { + this.__wrapped__ = value; + this.__actions__ = []; + this.__dir__ = 1; + this.__filtered__ = false; + this.__iteratees__ = []; + this.__takeCount__ = MAX_ARRAY_LENGTH; + this.__views__ = []; +} + +// Ensure `LazyWrapper` is an instance of `baseLodash`. +LazyWrapper.prototype = baseCreate(baseLodash.prototype); +LazyWrapper.prototype.constructor = LazyWrapper; + +module.exports = LazyWrapper; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_ListCache.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_ListCache.js new file mode 100644 index 00000000..26895c3a --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_ListCache.js @@ -0,0 +1,32 @@ +var listCacheClear = require('./_listCacheClear'), + listCacheDelete = require('./_listCacheDelete'), + listCacheGet = require('./_listCacheGet'), + listCacheHas = require('./_listCacheHas'), + listCacheSet = require('./_listCacheSet'); + +/** + * Creates an list cache object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function ListCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +// Add methods to `ListCache`. +ListCache.prototype.clear = listCacheClear; +ListCache.prototype['delete'] = listCacheDelete; +ListCache.prototype.get = listCacheGet; +ListCache.prototype.has = listCacheHas; +ListCache.prototype.set = listCacheSet; + +module.exports = ListCache; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_LodashWrapper.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_LodashWrapper.js new file mode 100644 index 00000000..c1e4d9df --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_LodashWrapper.js @@ -0,0 +1,22 @@ +var baseCreate = require('./_baseCreate'), + baseLodash = require('./_baseLodash'); + +/** + * The base constructor for creating `lodash` wrapper objects. + * + * @private + * @param {*} value The value to wrap. + * @param {boolean} [chainAll] Enable explicit method chain sequences. + */ +function LodashWrapper(value, chainAll) { + this.__wrapped__ = value; + this.__actions__ = []; + this.__chain__ = !!chainAll; + this.__index__ = 0; + this.__values__ = undefined; +} + +LodashWrapper.prototype = baseCreate(baseLodash.prototype); +LodashWrapper.prototype.constructor = LodashWrapper; + +module.exports = LodashWrapper; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_Map.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_Map.js new file mode 100644 index 00000000..b73f29a0 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_Map.js @@ -0,0 +1,7 @@ +var getNative = require('./_getNative'), + root = require('./_root'); + +/* Built-in method references that are verified to be native. */ +var Map = getNative(root, 'Map'); + +module.exports = Map; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_MapCache.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_MapCache.js new file mode 100644 index 00000000..4a4eea7b --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_MapCache.js @@ -0,0 +1,32 @@ +var mapCacheClear = require('./_mapCacheClear'), + mapCacheDelete = require('./_mapCacheDelete'), + mapCacheGet = require('./_mapCacheGet'), + mapCacheHas = require('./_mapCacheHas'), + mapCacheSet = require('./_mapCacheSet'); + +/** + * Creates a map cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function MapCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +// Add methods to `MapCache`. +MapCache.prototype.clear = mapCacheClear; +MapCache.prototype['delete'] = mapCacheDelete; +MapCache.prototype.get = mapCacheGet; +MapCache.prototype.has = mapCacheHas; +MapCache.prototype.set = mapCacheSet; + +module.exports = MapCache; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_Promise.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_Promise.js new file mode 100644 index 00000000..247b9e1b --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_Promise.js @@ -0,0 +1,7 @@ +var getNative = require('./_getNative'), + root = require('./_root'); + +/* Built-in method references that are verified to be native. */ +var Promise = getNative(root, 'Promise'); + +module.exports = Promise; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_Set.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_Set.js new file mode 100644 index 00000000..b3c8dcbf --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_Set.js @@ -0,0 +1,7 @@ +var getNative = require('./_getNative'), + root = require('./_root'); + +/* Built-in method references that are verified to be native. */ +var Set = getNative(root, 'Set'); + +module.exports = Set; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_SetCache.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_SetCache.js new file mode 100644 index 00000000..6468b064 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_SetCache.js @@ -0,0 +1,27 @@ +var MapCache = require('./_MapCache'), + setCacheAdd = require('./_setCacheAdd'), + setCacheHas = require('./_setCacheHas'); + +/** + * + * Creates an array cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ +function SetCache(values) { + var index = -1, + length = values == null ? 0 : values.length; + + this.__data__ = new MapCache; + while (++index < length) { + this.add(values[index]); + } +} + +// Add methods to `SetCache`. +SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; +SetCache.prototype.has = setCacheHas; + +module.exports = SetCache; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_Stack.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_Stack.js new file mode 100644 index 00000000..80b2cf1b --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_Stack.js @@ -0,0 +1,27 @@ +var ListCache = require('./_ListCache'), + stackClear = require('./_stackClear'), + stackDelete = require('./_stackDelete'), + stackGet = require('./_stackGet'), + stackHas = require('./_stackHas'), + stackSet = require('./_stackSet'); + +/** + * Creates a stack cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function Stack(entries) { + var data = this.__data__ = new ListCache(entries); + this.size = data.size; +} + +// Add methods to `Stack`. +Stack.prototype.clear = stackClear; +Stack.prototype['delete'] = stackDelete; +Stack.prototype.get = stackGet; +Stack.prototype.has = stackHas; +Stack.prototype.set = stackSet; + +module.exports = Stack; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_Symbol.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_Symbol.js new file mode 100644 index 00000000..a013f7c5 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_Symbol.js @@ -0,0 +1,6 @@ +var root = require('./_root'); + +/** Built-in value references. */ +var Symbol = root.Symbol; + +module.exports = Symbol; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_Uint8Array.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_Uint8Array.js new file mode 100644 index 00000000..2fb30e15 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_Uint8Array.js @@ -0,0 +1,6 @@ +var root = require('./_root'); + +/** Built-in value references. */ +var Uint8Array = root.Uint8Array; + +module.exports = Uint8Array; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_WeakMap.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_WeakMap.js new file mode 100644 index 00000000..567f86c6 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_WeakMap.js @@ -0,0 +1,7 @@ +var getNative = require('./_getNative'), + root = require('./_root'); + +/* Built-in method references that are verified to be native. */ +var WeakMap = getNative(root, 'WeakMap'); + +module.exports = WeakMap; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_apply.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_apply.js new file mode 100644 index 00000000..36436dda --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_apply.js @@ -0,0 +1,21 @@ +/** + * A faster alternative to `Function#apply`, this function invokes `func` + * with the `this` binding of `thisArg` and the arguments of `args`. + * + * @private + * @param {Function} func The function to invoke. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} args The arguments to invoke `func` with. + * @returns {*} Returns the result of `func`. + */ +function apply(func, thisArg, args) { + switch (args.length) { + case 0: return func.call(thisArg); + case 1: return func.call(thisArg, args[0]); + case 2: return func.call(thisArg, args[0], args[1]); + case 3: return func.call(thisArg, args[0], args[1], args[2]); + } + return func.apply(thisArg, args); +} + +module.exports = apply; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_arrayAggregator.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_arrayAggregator.js new file mode 100644 index 00000000..d96c3ca4 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_arrayAggregator.js @@ -0,0 +1,22 @@ +/** + * A specialized version of `baseAggregator` for arrays. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} setter The function to set `accumulator` values. + * @param {Function} iteratee The iteratee to transform keys. + * @param {Object} accumulator The initial aggregated object. + * @returns {Function} Returns `accumulator`. + */ +function arrayAggregator(array, setter, iteratee, accumulator) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + var value = array[index]; + setter(accumulator, value, iteratee(value), array); + } + return accumulator; +} + +module.exports = arrayAggregator; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_arrayEach.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_arrayEach.js new file mode 100644 index 00000000..2c5f5796 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_arrayEach.js @@ -0,0 +1,22 @@ +/** + * A specialized version of `_.forEach` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ +function arrayEach(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (iteratee(array[index], index, array) === false) { + break; + } + } + return array; +} + +module.exports = arrayEach; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_arrayEachRight.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_arrayEachRight.js new file mode 100644 index 00000000..976ca5c2 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_arrayEachRight.js @@ -0,0 +1,21 @@ +/** + * A specialized version of `_.forEachRight` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ +function arrayEachRight(array, iteratee) { + var length = array == null ? 0 : array.length; + + while (length--) { + if (iteratee(array[length], length, array) === false) { + break; + } + } + return array; +} + +module.exports = arrayEachRight; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_arrayEvery.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_arrayEvery.js new file mode 100644 index 00000000..e26a9184 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_arrayEvery.js @@ -0,0 +1,23 @@ +/** + * A specialized version of `_.every` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false`. + */ +function arrayEvery(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (!predicate(array[index], index, array)) { + return false; + } + } + return true; +} + +module.exports = arrayEvery; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_arrayFilter.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_arrayFilter.js new file mode 100644 index 00000000..75ea2544 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_arrayFilter.js @@ -0,0 +1,25 @@ +/** + * A specialized version of `_.filter` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function arrayFilter(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; + } + } + return result; +} + +module.exports = arrayFilter; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_arrayIncludes.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_arrayIncludes.js new file mode 100644 index 00000000..3737a6d9 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_arrayIncludes.js @@ -0,0 +1,17 @@ +var baseIndexOf = require('./_baseIndexOf'); + +/** + * A specialized version of `_.includes` for arrays without support for + * specifying an index to search from. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludes(array, value) { + var length = array == null ? 0 : array.length; + return !!length && baseIndexOf(array, value, 0) > -1; +} + +module.exports = arrayIncludes; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_arrayIncludesWith.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_arrayIncludesWith.js new file mode 100644 index 00000000..235fd975 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_arrayIncludesWith.js @@ -0,0 +1,22 @@ +/** + * This function is like `arrayIncludes` except that it accepts a comparator. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @param {Function} comparator The comparator invoked per element. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludesWith(array, value, comparator) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (comparator(value, array[index])) { + return true; + } + } + return false; +} + +module.exports = arrayIncludesWith; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_arrayLikeKeys.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_arrayLikeKeys.js new file mode 100644 index 00000000..b2ec9ce7 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_arrayLikeKeys.js @@ -0,0 +1,49 @@ +var baseTimes = require('./_baseTimes'), + isArguments = require('./isArguments'), + isArray = require('./isArray'), + isBuffer = require('./isBuffer'), + isIndex = require('./_isIndex'), + isTypedArray = require('./isTypedArray'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Creates an array of the enumerable property names of the array-like `value`. + * + * @private + * @param {*} value The value to query. + * @param {boolean} inherited Specify returning inherited property names. + * @returns {Array} Returns the array of property names. + */ +function arrayLikeKeys(value, inherited) { + var isArr = isArray(value), + isArg = !isArr && isArguments(value), + isBuff = !isArr && !isArg && isBuffer(value), + isType = !isArr && !isArg && !isBuff && isTypedArray(value), + skipIndexes = isArr || isArg || isBuff || isType, + result = skipIndexes ? baseTimes(value.length, String) : [], + length = result.length; + + for (var key in value) { + if ((inherited || hasOwnProperty.call(value, key)) && + !(skipIndexes && ( + // Safari 9 has enumerable `arguments.length` in strict mode. + key == 'length' || + // Node.js 0.10 has enumerable non-index properties on buffers. + (isBuff && (key == 'offset' || key == 'parent')) || + // PhantomJS 2 has enumerable non-index properties on typed arrays. + (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || + // Skip index properties. + isIndex(key, length) + ))) { + result.push(key); + } + } + return result; +} + +module.exports = arrayLikeKeys; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_arrayMap.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_arrayMap.js new file mode 100644 index 00000000..22b22464 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_arrayMap.js @@ -0,0 +1,21 @@ +/** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; +} + +module.exports = arrayMap; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_arrayPush.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_arrayPush.js new file mode 100644 index 00000000..7d742b38 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_arrayPush.js @@ -0,0 +1,20 @@ +/** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ +function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; + } + return array; +} + +module.exports = arrayPush; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_arrayReduce.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_arrayReduce.js new file mode 100644 index 00000000..de8b79b2 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_arrayReduce.js @@ -0,0 +1,26 @@ +/** + * A specialized version of `_.reduce` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the first element of `array` as + * the initial value. + * @returns {*} Returns the accumulated value. + */ +function arrayReduce(array, iteratee, accumulator, initAccum) { + var index = -1, + length = array == null ? 0 : array.length; + + if (initAccum && length) { + accumulator = array[++index]; + } + while (++index < length) { + accumulator = iteratee(accumulator, array[index], index, array); + } + return accumulator; +} + +module.exports = arrayReduce; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_arrayReduceRight.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_arrayReduceRight.js new file mode 100644 index 00000000..22d8976d --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_arrayReduceRight.js @@ -0,0 +1,24 @@ +/** + * A specialized version of `_.reduceRight` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the last element of `array` as + * the initial value. + * @returns {*} Returns the accumulated value. + */ +function arrayReduceRight(array, iteratee, accumulator, initAccum) { + var length = array == null ? 0 : array.length; + if (initAccum && length) { + accumulator = array[--length]; + } + while (length--) { + accumulator = iteratee(accumulator, array[length], length, array); + } + return accumulator; +} + +module.exports = arrayReduceRight; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_arraySample.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_arraySample.js new file mode 100644 index 00000000..fcab0105 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_arraySample.js @@ -0,0 +1,15 @@ +var baseRandom = require('./_baseRandom'); + +/** + * A specialized version of `_.sample` for arrays. + * + * @private + * @param {Array} array The array to sample. + * @returns {*} Returns the random element. + */ +function arraySample(array) { + var length = array.length; + return length ? array[baseRandom(0, length - 1)] : undefined; +} + +module.exports = arraySample; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_arraySampleSize.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_arraySampleSize.js new file mode 100644 index 00000000..8c7e364f --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_arraySampleSize.js @@ -0,0 +1,17 @@ +var baseClamp = require('./_baseClamp'), + copyArray = require('./_copyArray'), + shuffleSelf = require('./_shuffleSelf'); + +/** + * A specialized version of `_.sampleSize` for arrays. + * + * @private + * @param {Array} array The array to sample. + * @param {number} n The number of elements to sample. + * @returns {Array} Returns the random elements. + */ +function arraySampleSize(array, n) { + return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length)); +} + +module.exports = arraySampleSize; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_arrayShuffle.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_arrayShuffle.js new file mode 100644 index 00000000..46313a39 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_arrayShuffle.js @@ -0,0 +1,15 @@ +var copyArray = require('./_copyArray'), + shuffleSelf = require('./_shuffleSelf'); + +/** + * A specialized version of `_.shuffle` for arrays. + * + * @private + * @param {Array} array The array to shuffle. + * @returns {Array} Returns the new shuffled array. + */ +function arrayShuffle(array) { + return shuffleSelf(copyArray(array)); +} + +module.exports = arrayShuffle; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_arraySome.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_arraySome.js new file mode 100644 index 00000000..6fd02fd4 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_arraySome.js @@ -0,0 +1,23 @@ +/** + * A specialized version of `_.some` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ +function arraySome(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; +} + +module.exports = arraySome; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_asciiSize.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_asciiSize.js new file mode 100644 index 00000000..11d29c33 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_asciiSize.js @@ -0,0 +1,12 @@ +var baseProperty = require('./_baseProperty'); + +/** + * Gets the size of an ASCII `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ +var asciiSize = baseProperty('length'); + +module.exports = asciiSize; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_asciiToArray.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_asciiToArray.js new file mode 100644 index 00000000..8e3dd5b4 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_asciiToArray.js @@ -0,0 +1,12 @@ +/** + * Converts an ASCII `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ +function asciiToArray(string) { + return string.split(''); +} + +module.exports = asciiToArray; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_asciiWords.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_asciiWords.js new file mode 100644 index 00000000..d765f0f7 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_asciiWords.js @@ -0,0 +1,15 @@ +/** Used to match words composed of alphanumeric characters. */ +var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g; + +/** + * Splits an ASCII `string` into an array of its words. + * + * @private + * @param {string} The string to inspect. + * @returns {Array} Returns the words of `string`. + */ +function asciiWords(string) { + return string.match(reAsciiWord) || []; +} + +module.exports = asciiWords; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_assignMergeValue.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_assignMergeValue.js new file mode 100644 index 00000000..cb1185e9 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_assignMergeValue.js @@ -0,0 +1,20 @@ +var baseAssignValue = require('./_baseAssignValue'), + eq = require('./eq'); + +/** + * This function is like `assignValue` except that it doesn't assign + * `undefined` values. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function assignMergeValue(object, key, value) { + if ((value !== undefined && !eq(object[key], value)) || + (value === undefined && !(key in object))) { + baseAssignValue(object, key, value); + } +} + +module.exports = assignMergeValue; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_assignValue.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_assignValue.js new file mode 100644 index 00000000..40839575 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_assignValue.js @@ -0,0 +1,28 @@ +var baseAssignValue = require('./_baseAssignValue'), + eq = require('./eq'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Assigns `value` to `key` of `object` if the existing value is not equivalent + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function assignValue(object, key, value) { + var objValue = object[key]; + if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || + (value === undefined && !(key in object))) { + baseAssignValue(object, key, value); + } +} + +module.exports = assignValue; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_assocIndexOf.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_assocIndexOf.js new file mode 100644 index 00000000..5b77a2bd --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_assocIndexOf.js @@ -0,0 +1,21 @@ +var eq = require('./eq'); + +/** + * Gets the index at which the `key` is found in `array` of key-value pairs. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} key The key to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function assocIndexOf(array, key) { + var length = array.length; + while (length--) { + if (eq(array[length][0], key)) { + return length; + } + } + return -1; +} + +module.exports = assocIndexOf; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseAggregator.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseAggregator.js new file mode 100644 index 00000000..4bc9e91f --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseAggregator.js @@ -0,0 +1,21 @@ +var baseEach = require('./_baseEach'); + +/** + * Aggregates elements of `collection` on `accumulator` with keys transformed + * by `iteratee` and values set by `setter`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} setter The function to set `accumulator` values. + * @param {Function} iteratee The iteratee to transform keys. + * @param {Object} accumulator The initial aggregated object. + * @returns {Function} Returns `accumulator`. + */ +function baseAggregator(collection, setter, iteratee, accumulator) { + baseEach(collection, function(value, key, collection) { + setter(accumulator, value, iteratee(value), collection); + }); + return accumulator; +} + +module.exports = baseAggregator; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseAssign.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseAssign.js new file mode 100644 index 00000000..e5c4a1a5 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseAssign.js @@ -0,0 +1,17 @@ +var copyObject = require('./_copyObject'), + keys = require('./keys'); + +/** + * The base implementation of `_.assign` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssign(object, source) { + return object && copyObject(source, keys(source), object); +} + +module.exports = baseAssign; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseAssignIn.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseAssignIn.js new file mode 100644 index 00000000..6624f900 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseAssignIn.js @@ -0,0 +1,17 @@ +var copyObject = require('./_copyObject'), + keysIn = require('./keysIn'); + +/** + * The base implementation of `_.assignIn` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssignIn(object, source) { + return object && copyObject(source, keysIn(source), object); +} + +module.exports = baseAssignIn; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseAssignValue.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseAssignValue.js new file mode 100644 index 00000000..d6f66ef3 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseAssignValue.js @@ -0,0 +1,25 @@ +var defineProperty = require('./_defineProperty'); + +/** + * The base implementation of `assignValue` and `assignMergeValue` without + * value checks. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function baseAssignValue(object, key, value) { + if (key == '__proto__' && defineProperty) { + defineProperty(object, key, { + 'configurable': true, + 'enumerable': true, + 'value': value, + 'writable': true + }); + } else { + object[key] = value; + } +} + +module.exports = baseAssignValue; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseAt.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseAt.js new file mode 100644 index 00000000..90e4237a --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseAt.js @@ -0,0 +1,23 @@ +var get = require('./get'); + +/** + * The base implementation of `_.at` without support for individual paths. + * + * @private + * @param {Object} object The object to iterate over. + * @param {string[]} paths The property paths to pick. + * @returns {Array} Returns the picked elements. + */ +function baseAt(object, paths) { + var index = -1, + length = paths.length, + result = Array(length), + skip = object == null; + + while (++index < length) { + result[index] = skip ? undefined : get(object, paths[index]); + } + return result; +} + +module.exports = baseAt; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseClamp.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseClamp.js new file mode 100644 index 00000000..a1c56929 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseClamp.js @@ -0,0 +1,22 @@ +/** + * The base implementation of `_.clamp` which doesn't coerce arguments. + * + * @private + * @param {number} number The number to clamp. + * @param {number} [lower] The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the clamped number. + */ +function baseClamp(number, lower, upper) { + if (number === number) { + if (upper !== undefined) { + number = number <= upper ? number : upper; + } + if (lower !== undefined) { + number = number >= lower ? number : lower; + } + } + return number; +} + +module.exports = baseClamp; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseClone.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseClone.js new file mode 100644 index 00000000..69f87054 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseClone.js @@ -0,0 +1,166 @@ +var Stack = require('./_Stack'), + arrayEach = require('./_arrayEach'), + assignValue = require('./_assignValue'), + baseAssign = require('./_baseAssign'), + baseAssignIn = require('./_baseAssignIn'), + cloneBuffer = require('./_cloneBuffer'), + copyArray = require('./_copyArray'), + copySymbols = require('./_copySymbols'), + copySymbolsIn = require('./_copySymbolsIn'), + getAllKeys = require('./_getAllKeys'), + getAllKeysIn = require('./_getAllKeysIn'), + getTag = require('./_getTag'), + initCloneArray = require('./_initCloneArray'), + initCloneByTag = require('./_initCloneByTag'), + initCloneObject = require('./_initCloneObject'), + isArray = require('./isArray'), + isBuffer = require('./isBuffer'), + isMap = require('./isMap'), + isObject = require('./isObject'), + isSet = require('./isSet'), + keys = require('./keys'), + keysIn = require('./keysIn'); + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, + CLONE_FLAT_FLAG = 2, + CLONE_SYMBOLS_FLAG = 4; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + mapTag = '[object Map]', + numberTag = '[object Number]', + objectTag = '[object Object]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]', + weakMapTag = '[object WeakMap]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + +/** Used to identify `toStringTag` values supported by `_.clone`. */ +var cloneableTags = {}; +cloneableTags[argsTag] = cloneableTags[arrayTag] = +cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] = +cloneableTags[boolTag] = cloneableTags[dateTag] = +cloneableTags[float32Tag] = cloneableTags[float64Tag] = +cloneableTags[int8Tag] = cloneableTags[int16Tag] = +cloneableTags[int32Tag] = cloneableTags[mapTag] = +cloneableTags[numberTag] = cloneableTags[objectTag] = +cloneableTags[regexpTag] = cloneableTags[setTag] = +cloneableTags[stringTag] = cloneableTags[symbolTag] = +cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = +cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true; +cloneableTags[errorTag] = cloneableTags[funcTag] = +cloneableTags[weakMapTag] = false; + +/** + * The base implementation of `_.clone` and `_.cloneDeep` which tracks + * traversed objects. + * + * @private + * @param {*} value The value to clone. + * @param {boolean} bitmask The bitmask flags. + * 1 - Deep clone + * 2 - Flatten inherited properties + * 4 - Clone symbols + * @param {Function} [customizer] The function to customize cloning. + * @param {string} [key] The key of `value`. + * @param {Object} [object] The parent object of `value`. + * @param {Object} [stack] Tracks traversed objects and their clone counterparts. + * @returns {*} Returns the cloned value. + */ +function baseClone(value, bitmask, customizer, key, object, stack) { + var result, + isDeep = bitmask & CLONE_DEEP_FLAG, + isFlat = bitmask & CLONE_FLAT_FLAG, + isFull = bitmask & CLONE_SYMBOLS_FLAG; + + if (customizer) { + result = object ? customizer(value, key, object, stack) : customizer(value); + } + if (result !== undefined) { + return result; + } + if (!isObject(value)) { + return value; + } + var isArr = isArray(value); + if (isArr) { + result = initCloneArray(value); + if (!isDeep) { + return copyArray(value, result); + } + } else { + var tag = getTag(value), + isFunc = tag == funcTag || tag == genTag; + + if (isBuffer(value)) { + return cloneBuffer(value, isDeep); + } + if (tag == objectTag || tag == argsTag || (isFunc && !object)) { + result = (isFlat || isFunc) ? {} : initCloneObject(value); + if (!isDeep) { + return isFlat + ? copySymbolsIn(value, baseAssignIn(result, value)) + : copySymbols(value, baseAssign(result, value)); + } + } else { + if (!cloneableTags[tag]) { + return object ? value : {}; + } + result = initCloneByTag(value, tag, isDeep); + } + } + // Check for circular references and return its corresponding clone. + stack || (stack = new Stack); + var stacked = stack.get(value); + if (stacked) { + return stacked; + } + stack.set(value, result); + + if (isSet(value)) { + value.forEach(function(subValue) { + result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); + }); + } else if (isMap(value)) { + value.forEach(function(subValue, key) { + result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + } + + var keysFunc = isFull + ? (isFlat ? getAllKeysIn : getAllKeys) + : (isFlat ? keysIn : keys); + + var props = isArr ? undefined : keysFunc(value); + arrayEach(props || value, function(subValue, key) { + if (props) { + key = subValue; + subValue = value[key]; + } + // Recursively populate clone (susceptible to call stack limits). + assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + return result; +} + +module.exports = baseClone; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseConforms.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseConforms.js new file mode 100644 index 00000000..947e20d4 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseConforms.js @@ -0,0 +1,18 @@ +var baseConformsTo = require('./_baseConformsTo'), + keys = require('./keys'); + +/** + * The base implementation of `_.conforms` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property predicates to conform to. + * @returns {Function} Returns the new spec function. + */ +function baseConforms(source) { + var props = keys(source); + return function(object) { + return baseConformsTo(object, source, props); + }; +} + +module.exports = baseConforms; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseConformsTo.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseConformsTo.js new file mode 100644 index 00000000..e449cb84 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseConformsTo.js @@ -0,0 +1,27 @@ +/** + * The base implementation of `_.conformsTo` which accepts `props` to check. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property predicates to conform to. + * @returns {boolean} Returns `true` if `object` conforms, else `false`. + */ +function baseConformsTo(object, source, props) { + var length = props.length; + if (object == null) { + return !length; + } + object = Object(object); + while (length--) { + var key = props[length], + predicate = source[key], + value = object[key]; + + if ((value === undefined && !(key in object)) || !predicate(value)) { + return false; + } + } + return true; +} + +module.exports = baseConformsTo; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseCreate.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseCreate.js new file mode 100644 index 00000000..ffa6a52a --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseCreate.js @@ -0,0 +1,30 @@ +var isObject = require('./isObject'); + +/** Built-in value references. */ +var objectCreate = Object.create; + +/** + * The base implementation of `_.create` without support for assigning + * properties to the created object. + * + * @private + * @param {Object} proto The object to inherit from. + * @returns {Object} Returns the new object. + */ +var baseCreate = (function() { + function object() {} + return function(proto) { + if (!isObject(proto)) { + return {}; + } + if (objectCreate) { + return objectCreate(proto); + } + object.prototype = proto; + var result = new object; + object.prototype = undefined; + return result; + }; +}()); + +module.exports = baseCreate; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseDelay.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseDelay.js new file mode 100644 index 00000000..1486d697 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseDelay.js @@ -0,0 +1,21 @@ +/** Error message constants. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** + * The base implementation of `_.delay` and `_.defer` which accepts `args` + * to provide to `func`. + * + * @private + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @param {Array} args The arguments to provide to `func`. + * @returns {number|Object} Returns the timer id or timeout object. + */ +function baseDelay(func, wait, args) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return setTimeout(function() { func.apply(undefined, args); }, wait); +} + +module.exports = baseDelay; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseDifference.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseDifference.js new file mode 100644 index 00000000..343ac19f --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseDifference.js @@ -0,0 +1,67 @@ +var SetCache = require('./_SetCache'), + arrayIncludes = require('./_arrayIncludes'), + arrayIncludesWith = require('./_arrayIncludesWith'), + arrayMap = require('./_arrayMap'), + baseUnary = require('./_baseUnary'), + cacheHas = require('./_cacheHas'); + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** + * The base implementation of methods like `_.difference` without support + * for excluding multiple arrays or iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Array} values The values to exclude. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of filtered values. + */ +function baseDifference(array, values, iteratee, comparator) { + var index = -1, + includes = arrayIncludes, + isCommon = true, + length = array.length, + result = [], + valuesLength = values.length; + + if (!length) { + return result; + } + if (iteratee) { + values = arrayMap(values, baseUnary(iteratee)); + } + if (comparator) { + includes = arrayIncludesWith; + isCommon = false; + } + else if (values.length >= LARGE_ARRAY_SIZE) { + includes = cacheHas; + isCommon = false; + values = new SetCache(values); + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee == null ? value : iteratee(value); + + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var valuesIndex = valuesLength; + while (valuesIndex--) { + if (values[valuesIndex] === computed) { + continue outer; + } + } + result.push(value); + } + else if (!includes(values, computed, comparator)) { + result.push(value); + } + } + return result; +} + +module.exports = baseDifference; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseEach.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseEach.js new file mode 100644 index 00000000..512c0676 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseEach.js @@ -0,0 +1,14 @@ +var baseForOwn = require('./_baseForOwn'), + createBaseEach = require('./_createBaseEach'); + +/** + * The base implementation of `_.forEach` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ +var baseEach = createBaseEach(baseForOwn); + +module.exports = baseEach; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseEachRight.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseEachRight.js new file mode 100644 index 00000000..0a8feeca --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseEachRight.js @@ -0,0 +1,14 @@ +var baseForOwnRight = require('./_baseForOwnRight'), + createBaseEach = require('./_createBaseEach'); + +/** + * The base implementation of `_.forEachRight` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ +var baseEachRight = createBaseEach(baseForOwnRight, true); + +module.exports = baseEachRight; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseEvery.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseEvery.js new file mode 100644 index 00000000..fa52f7bc --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseEvery.js @@ -0,0 +1,21 @@ +var baseEach = require('./_baseEach'); + +/** + * The base implementation of `_.every` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false` + */ +function baseEvery(collection, predicate) { + var result = true; + baseEach(collection, function(value, index, collection) { + result = !!predicate(value, index, collection); + return result; + }); + return result; +} + +module.exports = baseEvery; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseExtremum.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseExtremum.js new file mode 100644 index 00000000..9d6aa77e --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseExtremum.js @@ -0,0 +1,32 @@ +var isSymbol = require('./isSymbol'); + +/** + * The base implementation of methods like `_.max` and `_.min` which accepts a + * `comparator` to determine the extremum value. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The iteratee invoked per iteration. + * @param {Function} comparator The comparator used to compare values. + * @returns {*} Returns the extremum value. + */ +function baseExtremum(array, iteratee, comparator) { + var index = -1, + length = array.length; + + while (++index < length) { + var value = array[index], + current = iteratee(value); + + if (current != null && (computed === undefined + ? (current === current && !isSymbol(current)) + : comparator(current, computed) + )) { + var computed = current, + result = value; + } + } + return result; +} + +module.exports = baseExtremum; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseFill.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseFill.js new file mode 100644 index 00000000..46ef9c76 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseFill.js @@ -0,0 +1,32 @@ +var toInteger = require('./toInteger'), + toLength = require('./toLength'); + +/** + * The base implementation of `_.fill` without an iteratee call guard. + * + * @private + * @param {Array} array The array to fill. + * @param {*} value The value to fill `array` with. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns `array`. + */ +function baseFill(array, value, start, end) { + var length = array.length; + + start = toInteger(start); + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = (end === undefined || end > length) ? length : toInteger(end); + if (end < 0) { + end += length; + } + end = start > end ? 0 : toLength(end); + while (start < end) { + array[start++] = value; + } + return array; +} + +module.exports = baseFill; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseFilter.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseFilter.js new file mode 100644 index 00000000..46784773 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseFilter.js @@ -0,0 +1,21 @@ +var baseEach = require('./_baseEach'); + +/** + * The base implementation of `_.filter` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function baseFilter(collection, predicate) { + var result = []; + baseEach(collection, function(value, index, collection) { + if (predicate(value, index, collection)) { + result.push(value); + } + }); + return result; +} + +module.exports = baseFilter; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseFindIndex.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseFindIndex.js new file mode 100644 index 00000000..e3f5d8aa --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseFindIndex.js @@ -0,0 +1,24 @@ +/** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseFindIndex(array, predicate, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 1 : -1); + + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; +} + +module.exports = baseFindIndex; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseFindKey.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseFindKey.js new file mode 100644 index 00000000..2e430f3a --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseFindKey.js @@ -0,0 +1,23 @@ +/** + * The base implementation of methods like `_.findKey` and `_.findLastKey`, + * without support for iteratee shorthands, which iterates over `collection` + * using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the found element or its key, else `undefined`. + */ +function baseFindKey(collection, predicate, eachFunc) { + var result; + eachFunc(collection, function(value, key, collection) { + if (predicate(value, key, collection)) { + result = key; + return false; + } + }); + return result; +} + +module.exports = baseFindKey; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseFlatten.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseFlatten.js new file mode 100644 index 00000000..4b1e009b --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseFlatten.js @@ -0,0 +1,38 @@ +var arrayPush = require('./_arrayPush'), + isFlattenable = require('./_isFlattenable'); + +/** + * The base implementation of `_.flatten` with support for restricting flattening. + * + * @private + * @param {Array} array The array to flatten. + * @param {number} depth The maximum recursion depth. + * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. + * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ +function baseFlatten(array, depth, predicate, isStrict, result) { + var index = -1, + length = array.length; + + predicate || (predicate = isFlattenable); + result || (result = []); + + while (++index < length) { + var value = array[index]; + if (depth > 0 && predicate(value)) { + if (depth > 1) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, depth - 1, predicate, isStrict, result); + } else { + arrayPush(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; +} + +module.exports = baseFlatten; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseFor.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseFor.js new file mode 100644 index 00000000..d946590f --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseFor.js @@ -0,0 +1,16 @@ +var createBaseFor = require('./_createBaseFor'); + +/** + * The base implementation of `baseForOwn` which iterates over `object` + * properties returned by `keysFunc` and invokes `iteratee` for each property. + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ +var baseFor = createBaseFor(); + +module.exports = baseFor; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseForOwn.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseForOwn.js new file mode 100644 index 00000000..503d5234 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseForOwn.js @@ -0,0 +1,16 @@ +var baseFor = require('./_baseFor'), + keys = require('./keys'); + +/** + * The base implementation of `_.forOwn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ +function baseForOwn(object, iteratee) { + return object && baseFor(object, iteratee, keys); +} + +module.exports = baseForOwn; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseForOwnRight.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseForOwnRight.js new file mode 100644 index 00000000..a4b10e6c --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseForOwnRight.js @@ -0,0 +1,16 @@ +var baseForRight = require('./_baseForRight'), + keys = require('./keys'); + +/** + * The base implementation of `_.forOwnRight` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ +function baseForOwnRight(object, iteratee) { + return object && baseForRight(object, iteratee, keys); +} + +module.exports = baseForOwnRight; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseForRight.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseForRight.js new file mode 100644 index 00000000..32842cd8 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseForRight.js @@ -0,0 +1,15 @@ +var createBaseFor = require('./_createBaseFor'); + +/** + * This function is like `baseFor` except that it iterates over properties + * in the opposite order. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ +var baseForRight = createBaseFor(true); + +module.exports = baseForRight; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseFunctions.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseFunctions.js new file mode 100644 index 00000000..d23bc9b4 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseFunctions.js @@ -0,0 +1,19 @@ +var arrayFilter = require('./_arrayFilter'), + isFunction = require('./isFunction'); + +/** + * The base implementation of `_.functions` which creates an array of + * `object` function property names filtered from `props`. + * + * @private + * @param {Object} object The object to inspect. + * @param {Array} props The property names to filter. + * @returns {Array} Returns the function names. + */ +function baseFunctions(object, props) { + return arrayFilter(props, function(key) { + return isFunction(object[key]); + }); +} + +module.exports = baseFunctions; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseGet.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseGet.js new file mode 100644 index 00000000..a194913d --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseGet.js @@ -0,0 +1,24 @@ +var castPath = require('./_castPath'), + toKey = require('./_toKey'); + +/** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ +function baseGet(object, path) { + path = castPath(path, object); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[toKey(path[index++])]; + } + return (index && index == length) ? object : undefined; +} + +module.exports = baseGet; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseGetAllKeys.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseGetAllKeys.js new file mode 100644 index 00000000..8ad204ea --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseGetAllKeys.js @@ -0,0 +1,20 @@ +var arrayPush = require('./_arrayPush'), + isArray = require('./isArray'); + +/** + * The base implementation of `getAllKeys` and `getAllKeysIn` which uses + * `keysFunc` and `symbolsFunc` to get the enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Function} keysFunc The function to get the keys of `object`. + * @param {Function} symbolsFunc The function to get the symbols of `object`. + * @returns {Array} Returns the array of property names and symbols. + */ +function baseGetAllKeys(object, keysFunc, symbolsFunc) { + var result = keysFunc(object); + return isArray(object) ? result : arrayPush(result, symbolsFunc(object)); +} + +module.exports = baseGetAllKeys; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseGetTag.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseGetTag.js new file mode 100644 index 00000000..b927ccc1 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseGetTag.js @@ -0,0 +1,28 @@ +var Symbol = require('./_Symbol'), + getRawTag = require('./_getRawTag'), + objectToString = require('./_objectToString'); + +/** `Object#toString` result references. */ +var nullTag = '[object Null]', + undefinedTag = '[object Undefined]'; + +/** Built-in value references. */ +var symToStringTag = Symbol ? Symbol.toStringTag : undefined; + +/** + * The base implementation of `getTag` without fallbacks for buggy environments. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ +function baseGetTag(value) { + if (value == null) { + return value === undefined ? undefinedTag : nullTag; + } + return (symToStringTag && symToStringTag in Object(value)) + ? getRawTag(value) + : objectToString(value); +} + +module.exports = baseGetTag; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseGt.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseGt.js new file mode 100644 index 00000000..502d273c --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseGt.js @@ -0,0 +1,14 @@ +/** + * The base implementation of `_.gt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, + * else `false`. + */ +function baseGt(value, other) { + return value > other; +} + +module.exports = baseGt; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseHas.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseHas.js new file mode 100644 index 00000000..1b730321 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseHas.js @@ -0,0 +1,19 @@ +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * The base implementation of `_.has` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHas(object, key) { + return object != null && hasOwnProperty.call(object, key); +} + +module.exports = baseHas; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseHasIn.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseHasIn.js new file mode 100644 index 00000000..2e0d0426 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseHasIn.js @@ -0,0 +1,13 @@ +/** + * The base implementation of `_.hasIn` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHasIn(object, key) { + return object != null && key in Object(object); +} + +module.exports = baseHasIn; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseInRange.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseInRange.js new file mode 100644 index 00000000..ec956661 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseInRange.js @@ -0,0 +1,18 @@ +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max, + nativeMin = Math.min; + +/** + * The base implementation of `_.inRange` which doesn't coerce arguments. + * + * @private + * @param {number} number The number to check. + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @returns {boolean} Returns `true` if `number` is in the range, else `false`. + */ +function baseInRange(number, start, end) { + return number >= nativeMin(start, end) && number < nativeMax(start, end); +} + +module.exports = baseInRange; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseIndexOf.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseIndexOf.js new file mode 100644 index 00000000..167e706e --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseIndexOf.js @@ -0,0 +1,20 @@ +var baseFindIndex = require('./_baseFindIndex'), + baseIsNaN = require('./_baseIsNaN'), + strictIndexOf = require('./_strictIndexOf'); + +/** + * The base implementation of `_.indexOf` without `fromIndex` bounds checks. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseIndexOf(array, value, fromIndex) { + return value === value + ? strictIndexOf(array, value, fromIndex) + : baseFindIndex(array, baseIsNaN, fromIndex); +} + +module.exports = baseIndexOf; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseIndexOfWith.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseIndexOfWith.js new file mode 100644 index 00000000..f815fe0d --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseIndexOfWith.js @@ -0,0 +1,23 @@ +/** + * This function is like `baseIndexOf` except that it accepts a comparator. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @param {Function} comparator The comparator invoked per element. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseIndexOfWith(array, value, fromIndex, comparator) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (comparator(array[index], value)) { + return index; + } + } + return -1; +} + +module.exports = baseIndexOfWith; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseIntersection.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseIntersection.js new file mode 100644 index 00000000..c1d250c2 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseIntersection.js @@ -0,0 +1,74 @@ +var SetCache = require('./_SetCache'), + arrayIncludes = require('./_arrayIncludes'), + arrayIncludesWith = require('./_arrayIncludesWith'), + arrayMap = require('./_arrayMap'), + baseUnary = require('./_baseUnary'), + cacheHas = require('./_cacheHas'); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMin = Math.min; + +/** + * The base implementation of methods like `_.intersection`, without support + * for iteratee shorthands, that accepts an array of arrays to inspect. + * + * @private + * @param {Array} arrays The arrays to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of shared values. + */ +function baseIntersection(arrays, iteratee, comparator) { + var includes = comparator ? arrayIncludesWith : arrayIncludes, + length = arrays[0].length, + othLength = arrays.length, + othIndex = othLength, + caches = Array(othLength), + maxLength = Infinity, + result = []; + + while (othIndex--) { + var array = arrays[othIndex]; + if (othIndex && iteratee) { + array = arrayMap(array, baseUnary(iteratee)); + } + maxLength = nativeMin(array.length, maxLength); + caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120)) + ? new SetCache(othIndex && array) + : undefined; + } + array = arrays[0]; + + var index = -1, + seen = caches[0]; + + outer: + while (++index < length && result.length < maxLength) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + value = (comparator || value !== 0) ? value : 0; + if (!(seen + ? cacheHas(seen, computed) + : includes(result, computed, comparator) + )) { + othIndex = othLength; + while (--othIndex) { + var cache = caches[othIndex]; + if (!(cache + ? cacheHas(cache, computed) + : includes(arrays[othIndex], computed, comparator)) + ) { + continue outer; + } + } + if (seen) { + seen.push(computed); + } + result.push(value); + } + } + return result; +} + +module.exports = baseIntersection; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseInverter.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseInverter.js new file mode 100644 index 00000000..fbc337f0 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseInverter.js @@ -0,0 +1,21 @@ +var baseForOwn = require('./_baseForOwn'); + +/** + * The base implementation of `_.invert` and `_.invertBy` which inverts + * `object` with values transformed by `iteratee` and set by `setter`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} setter The function to set `accumulator` values. + * @param {Function} iteratee The iteratee to transform values. + * @param {Object} accumulator The initial inverted object. + * @returns {Function} Returns `accumulator`. + */ +function baseInverter(object, setter, iteratee, accumulator) { + baseForOwn(object, function(value, key, object) { + setter(accumulator, iteratee(value), key, object); + }); + return accumulator; +} + +module.exports = baseInverter; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseInvoke.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseInvoke.js new file mode 100644 index 00000000..49bcf3c3 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseInvoke.js @@ -0,0 +1,24 @@ +var apply = require('./_apply'), + castPath = require('./_castPath'), + last = require('./last'), + parent = require('./_parent'), + toKey = require('./_toKey'); + +/** + * The base implementation of `_.invoke` without support for individual + * method arguments. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the method to invoke. + * @param {Array} args The arguments to invoke the method with. + * @returns {*} Returns the result of the invoked method. + */ +function baseInvoke(object, path, args) { + path = castPath(path, object); + object = parent(object, path); + var func = object == null ? object : object[toKey(last(path))]; + return func == null ? undefined : apply(func, object, args); +} + +module.exports = baseInvoke; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseIsArguments.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseIsArguments.js new file mode 100644 index 00000000..b3562cca --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseIsArguments.js @@ -0,0 +1,18 @@ +var baseGetTag = require('./_baseGetTag'), + isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]'; + +/** + * The base implementation of `_.isArguments`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + */ +function baseIsArguments(value) { + return isObjectLike(value) && baseGetTag(value) == argsTag; +} + +module.exports = baseIsArguments; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseIsArrayBuffer.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseIsArrayBuffer.js new file mode 100644 index 00000000..a2c4f30a --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseIsArrayBuffer.js @@ -0,0 +1,17 @@ +var baseGetTag = require('./_baseGetTag'), + isObjectLike = require('./isObjectLike'); + +var arrayBufferTag = '[object ArrayBuffer]'; + +/** + * The base implementation of `_.isArrayBuffer` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. + */ +function baseIsArrayBuffer(value) { + return isObjectLike(value) && baseGetTag(value) == arrayBufferTag; +} + +module.exports = baseIsArrayBuffer; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseIsDate.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseIsDate.js new file mode 100644 index 00000000..ba67c785 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseIsDate.js @@ -0,0 +1,18 @@ +var baseGetTag = require('./_baseGetTag'), + isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var dateTag = '[object Date]'; + +/** + * The base implementation of `_.isDate` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a date object, else `false`. + */ +function baseIsDate(value) { + return isObjectLike(value) && baseGetTag(value) == dateTag; +} + +module.exports = baseIsDate; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseIsEqual.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseIsEqual.js new file mode 100644 index 00000000..00a68a4f --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseIsEqual.js @@ -0,0 +1,28 @@ +var baseIsEqualDeep = require('./_baseIsEqualDeep'), + isObjectLike = require('./isObjectLike'); + +/** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {boolean} bitmask The bitmask flags. + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Function} [customizer] The function to customize comparisons. + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ +function baseIsEqual(value, other, bitmask, customizer, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) { + return value !== value && other !== other; + } + return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); +} + +module.exports = baseIsEqual; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseIsEqualDeep.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseIsEqualDeep.js new file mode 100644 index 00000000..e3cfd6a8 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseIsEqualDeep.js @@ -0,0 +1,83 @@ +var Stack = require('./_Stack'), + equalArrays = require('./_equalArrays'), + equalByTag = require('./_equalByTag'), + equalObjects = require('./_equalObjects'), + getTag = require('./_getTag'), + isArray = require('./isArray'), + isBuffer = require('./isBuffer'), + isTypedArray = require('./isTypedArray'); + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + objectTag = '[object Object]'; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { + var objIsArr = isArray(object), + othIsArr = isArray(other), + objTag = objIsArr ? arrayTag : getTag(object), + othTag = othIsArr ? arrayTag : getTag(other); + + objTag = objTag == argsTag ? objectTag : objTag; + othTag = othTag == argsTag ? objectTag : othTag; + + var objIsObj = objTag == objectTag, + othIsObj = othTag == objectTag, + isSameTag = objTag == othTag; + + if (isSameTag && isBuffer(object)) { + if (!isBuffer(other)) { + return false; + } + objIsArr = true; + objIsObj = false; + } + if (isSameTag && !objIsObj) { + stack || (stack = new Stack); + return (objIsArr || isTypedArray(object)) + ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) + : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); + } + if (!(bitmask & COMPARE_PARTIAL_FLAG)) { + var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, + othUnwrapped = othIsWrapped ? other.value() : other; + + stack || (stack = new Stack); + return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new Stack); + return equalObjects(object, other, bitmask, customizer, equalFunc, stack); +} + +module.exports = baseIsEqualDeep; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseIsMap.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseIsMap.js new file mode 100644 index 00000000..02a4021c --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseIsMap.js @@ -0,0 +1,18 @@ +var getTag = require('./_getTag'), + isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var mapTag = '[object Map]'; + +/** + * The base implementation of `_.isMap` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + */ +function baseIsMap(value) { + return isObjectLike(value) && getTag(value) == mapTag; +} + +module.exports = baseIsMap; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseIsMatch.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseIsMatch.js new file mode 100644 index 00000000..72494bed --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseIsMatch.js @@ -0,0 +1,62 @@ +var Stack = require('./_Stack'), + baseIsEqual = require('./_baseIsEqual'); + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.isMatch` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Array} matchData The property names, values, and compare flags to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + */ +function baseIsMatch(object, source, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer; + + if (object == null) { + return !length; + } + object = Object(object); + while (index--) { + var data = matchData[index]; + if ((noCustomizer && data[2]) + ? data[1] !== object[data[0]] + : !(data[0] in object) + ) { + return false; + } + } + while (++index < length) { + data = matchData[index]; + var key = data[0], + objValue = object[key], + srcValue = data[1]; + + if (noCustomizer && data[2]) { + if (objValue === undefined && !(key in object)) { + return false; + } + } else { + var stack = new Stack; + if (customizer) { + var result = customizer(objValue, srcValue, key, object, source, stack); + } + if (!(result === undefined + ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack) + : result + )) { + return false; + } + } + } + return true; +} + +module.exports = baseIsMatch; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseIsNaN.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseIsNaN.js new file mode 100644 index 00000000..316f1eb1 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseIsNaN.js @@ -0,0 +1,12 @@ +/** + * The base implementation of `_.isNaN` without support for number objects. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + */ +function baseIsNaN(value) { + return value !== value; +} + +module.exports = baseIsNaN; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseIsNative.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseIsNative.js new file mode 100644 index 00000000..87023304 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseIsNative.js @@ -0,0 +1,47 @@ +var isFunction = require('./isFunction'), + isMasked = require('./_isMasked'), + isObject = require('./isObject'), + toSource = require('./_toSource'); + +/** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ +var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; + +/** Used to detect host constructors (Safari). */ +var reIsHostCtor = /^\[object .+?Constructor\]$/; + +/** Used for built-in method references. */ +var funcProto = Function.prototype, + objectProto = Object.prototype; + +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** Used to detect if a method is native. */ +var reIsNative = RegExp('^' + + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' +); + +/** + * The base implementation of `_.isNative` without bad shim checks. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + */ +function baseIsNative(value) { + if (!isObject(value) || isMasked(value)) { + return false; + } + var pattern = isFunction(value) ? reIsNative : reIsHostCtor; + return pattern.test(toSource(value)); +} + +module.exports = baseIsNative; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseIsRegExp.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseIsRegExp.js new file mode 100644 index 00000000..6cd7c1ae --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseIsRegExp.js @@ -0,0 +1,18 @@ +var baseGetTag = require('./_baseGetTag'), + isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var regexpTag = '[object RegExp]'; + +/** + * The base implementation of `_.isRegExp` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. + */ +function baseIsRegExp(value) { + return isObjectLike(value) && baseGetTag(value) == regexpTag; +} + +module.exports = baseIsRegExp; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseIsSet.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseIsSet.js new file mode 100644 index 00000000..6dee3671 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseIsSet.js @@ -0,0 +1,18 @@ +var getTag = require('./_getTag'), + isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var setTag = '[object Set]'; + +/** + * The base implementation of `_.isSet` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + */ +function baseIsSet(value) { + return isObjectLike(value) && getTag(value) == setTag; +} + +module.exports = baseIsSet; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseIsTypedArray.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseIsTypedArray.js new file mode 100644 index 00000000..1edb32ff --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseIsTypedArray.js @@ -0,0 +1,60 @@ +var baseGetTag = require('./_baseGetTag'), + isLength = require('./isLength'), + isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + mapTag = '[object Map]', + numberTag = '[object Number]', + objectTag = '[object Object]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + weakMapTag = '[object WeakMap]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + +/** Used to identify `toStringTag` values of typed arrays. */ +var typedArrayTags = {}; +typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = +typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = +typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = +typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = +typedArrayTags[uint32Tag] = true; +typedArrayTags[argsTag] = typedArrayTags[arrayTag] = +typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = +typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = +typedArrayTags[errorTag] = typedArrayTags[funcTag] = +typedArrayTags[mapTag] = typedArrayTags[numberTag] = +typedArrayTags[objectTag] = typedArrayTags[regexpTag] = +typedArrayTags[setTag] = typedArrayTags[stringTag] = +typedArrayTags[weakMapTag] = false; + +/** + * The base implementation of `_.isTypedArray` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + */ +function baseIsTypedArray(value) { + return isObjectLike(value) && + isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; +} + +module.exports = baseIsTypedArray; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseIteratee.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseIteratee.js new file mode 100644 index 00000000..995c2575 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseIteratee.js @@ -0,0 +1,31 @@ +var baseMatches = require('./_baseMatches'), + baseMatchesProperty = require('./_baseMatchesProperty'), + identity = require('./identity'), + isArray = require('./isArray'), + property = require('./property'); + +/** + * The base implementation of `_.iteratee`. + * + * @private + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. + */ +function baseIteratee(value) { + // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. + // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. + if (typeof value == 'function') { + return value; + } + if (value == null) { + return identity; + } + if (typeof value == 'object') { + return isArray(value) + ? baseMatchesProperty(value[0], value[1]) + : baseMatches(value); + } + return property(value); +} + +module.exports = baseIteratee; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseKeys.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseKeys.js new file mode 100644 index 00000000..45e9e6f3 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseKeys.js @@ -0,0 +1,30 @@ +var isPrototype = require('./_isPrototype'), + nativeKeys = require('./_nativeKeys'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function baseKeys(object) { + if (!isPrototype(object)) { + return nativeKeys(object); + } + var result = []; + for (var key in Object(object)) { + if (hasOwnProperty.call(object, key) && key != 'constructor') { + result.push(key); + } + } + return result; +} + +module.exports = baseKeys; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseKeysIn.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseKeysIn.js new file mode 100644 index 00000000..ea8a0a17 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseKeysIn.js @@ -0,0 +1,33 @@ +var isObject = require('./isObject'), + isPrototype = require('./_isPrototype'), + nativeKeysIn = require('./_nativeKeysIn'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function baseKeysIn(object) { + if (!isObject(object)) { + return nativeKeysIn(object); + } + var isProto = isPrototype(object), + result = []; + + for (var key in object) { + if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { + result.push(key); + } + } + return result; +} + +module.exports = baseKeysIn; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseLodash.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseLodash.js new file mode 100644 index 00000000..f76c790e --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseLodash.js @@ -0,0 +1,10 @@ +/** + * The function whose prototype chain sequence wrappers inherit from. + * + * @private + */ +function baseLodash() { + // No operation performed. +} + +module.exports = baseLodash; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseLt.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseLt.js new file mode 100644 index 00000000..8674d294 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseLt.js @@ -0,0 +1,14 @@ +/** + * The base implementation of `_.lt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, + * else `false`. + */ +function baseLt(value, other) { + return value < other; +} + +module.exports = baseLt; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseMap.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseMap.js new file mode 100644 index 00000000..0bf5cead --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseMap.js @@ -0,0 +1,22 @@ +var baseEach = require('./_baseEach'), + isArrayLike = require('./isArrayLike'); + +/** + * The base implementation of `_.map` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function baseMap(collection, iteratee) { + var index = -1, + result = isArrayLike(collection) ? Array(collection.length) : []; + + baseEach(collection, function(value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; +} + +module.exports = baseMap; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseMatches.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseMatches.js new file mode 100644 index 00000000..e56582ad --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseMatches.js @@ -0,0 +1,22 @@ +var baseIsMatch = require('./_baseIsMatch'), + getMatchData = require('./_getMatchData'), + matchesStrictComparable = require('./_matchesStrictComparable'); + +/** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatches(source) { + var matchData = getMatchData(source); + if (matchData.length == 1 && matchData[0][2]) { + return matchesStrictComparable(matchData[0][0], matchData[0][1]); + } + return function(object) { + return object === source || baseIsMatch(object, source, matchData); + }; +} + +module.exports = baseMatches; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseMatchesProperty.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseMatchesProperty.js new file mode 100644 index 00000000..24afd893 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseMatchesProperty.js @@ -0,0 +1,33 @@ +var baseIsEqual = require('./_baseIsEqual'), + get = require('./get'), + hasIn = require('./hasIn'), + isKey = require('./_isKey'), + isStrictComparable = require('./_isStrictComparable'), + matchesStrictComparable = require('./_matchesStrictComparable'), + toKey = require('./_toKey'); + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. + * + * @private + * @param {string} path The path of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatchesProperty(path, srcValue) { + if (isKey(path) && isStrictComparable(srcValue)) { + return matchesStrictComparable(toKey(path), srcValue); + } + return function(object) { + var objValue = get(object, path); + return (objValue === undefined && objValue === srcValue) + ? hasIn(object, path) + : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG); + }; +} + +module.exports = baseMatchesProperty; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseMean.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseMean.js new file mode 100644 index 00000000..fa9e00a0 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseMean.js @@ -0,0 +1,20 @@ +var baseSum = require('./_baseSum'); + +/** Used as references for various `Number` constants. */ +var NAN = 0 / 0; + +/** + * The base implementation of `_.mean` and `_.meanBy` without support for + * iteratee shorthands. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {number} Returns the mean. + */ +function baseMean(array, iteratee) { + var length = array == null ? 0 : array.length; + return length ? (baseSum(array, iteratee) / length) : NAN; +} + +module.exports = baseMean; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseMerge.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseMerge.js new file mode 100644 index 00000000..c98b5eb0 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseMerge.js @@ -0,0 +1,42 @@ +var Stack = require('./_Stack'), + assignMergeValue = require('./_assignMergeValue'), + baseFor = require('./_baseFor'), + baseMergeDeep = require('./_baseMergeDeep'), + isObject = require('./isObject'), + keysIn = require('./keysIn'), + safeGet = require('./_safeGet'); + +/** + * The base implementation of `_.merge` without support for multiple sources. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {number} srcIndex The index of `source`. + * @param {Function} [customizer] The function to customize merged values. + * @param {Object} [stack] Tracks traversed source values and their merged + * counterparts. + */ +function baseMerge(object, source, srcIndex, customizer, stack) { + if (object === source) { + return; + } + baseFor(source, function(srcValue, key) { + stack || (stack = new Stack); + if (isObject(srcValue)) { + baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack); + } + else { + var newValue = customizer + ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack) + : undefined; + + if (newValue === undefined) { + newValue = srcValue; + } + assignMergeValue(object, key, newValue); + } + }, keysIn); +} + +module.exports = baseMerge; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseMergeDeep.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseMergeDeep.js new file mode 100644 index 00000000..4679e8dc --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseMergeDeep.js @@ -0,0 +1,94 @@ +var assignMergeValue = require('./_assignMergeValue'), + cloneBuffer = require('./_cloneBuffer'), + cloneTypedArray = require('./_cloneTypedArray'), + copyArray = require('./_copyArray'), + initCloneObject = require('./_initCloneObject'), + isArguments = require('./isArguments'), + isArray = require('./isArray'), + isArrayLikeObject = require('./isArrayLikeObject'), + isBuffer = require('./isBuffer'), + isFunction = require('./isFunction'), + isObject = require('./isObject'), + isPlainObject = require('./isPlainObject'), + isTypedArray = require('./isTypedArray'), + safeGet = require('./_safeGet'), + toPlainObject = require('./toPlainObject'); + +/** + * A specialized version of `baseMerge` for arrays and objects which performs + * deep merges and tracks traversed objects enabling objects with circular + * references to be merged. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {string} key The key of the value to merge. + * @param {number} srcIndex The index of `source`. + * @param {Function} mergeFunc The function to merge values. + * @param {Function} [customizer] The function to customize assigned values. + * @param {Object} [stack] Tracks traversed source values and their merged + * counterparts. + */ +function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) { + var objValue = safeGet(object, key), + srcValue = safeGet(source, key), + stacked = stack.get(srcValue); + + if (stacked) { + assignMergeValue(object, key, stacked); + return; + } + var newValue = customizer + ? customizer(objValue, srcValue, (key + ''), object, source, stack) + : undefined; + + var isCommon = newValue === undefined; + + if (isCommon) { + var isArr = isArray(srcValue), + isBuff = !isArr && isBuffer(srcValue), + isTyped = !isArr && !isBuff && isTypedArray(srcValue); + + newValue = srcValue; + if (isArr || isBuff || isTyped) { + if (isArray(objValue)) { + newValue = objValue; + } + else if (isArrayLikeObject(objValue)) { + newValue = copyArray(objValue); + } + else if (isBuff) { + isCommon = false; + newValue = cloneBuffer(srcValue, true); + } + else if (isTyped) { + isCommon = false; + newValue = cloneTypedArray(srcValue, true); + } + else { + newValue = []; + } + } + else if (isPlainObject(srcValue) || isArguments(srcValue)) { + newValue = objValue; + if (isArguments(objValue)) { + newValue = toPlainObject(objValue); + } + else if (!isObject(objValue) || isFunction(objValue)) { + newValue = initCloneObject(srcValue); + } + } + else { + isCommon = false; + } + } + if (isCommon) { + // Recursively merge objects and arrays (susceptible to call stack limits). + stack.set(srcValue, newValue); + mergeFunc(newValue, srcValue, srcIndex, customizer, stack); + stack['delete'](srcValue); + } + assignMergeValue(object, key, newValue); +} + +module.exports = baseMergeDeep; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseNth.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseNth.js new file mode 100644 index 00000000..0403c2a3 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseNth.js @@ -0,0 +1,20 @@ +var isIndex = require('./_isIndex'); + +/** + * The base implementation of `_.nth` which doesn't coerce arguments. + * + * @private + * @param {Array} array The array to query. + * @param {number} n The index of the element to return. + * @returns {*} Returns the nth element of `array`. + */ +function baseNth(array, n) { + var length = array.length; + if (!length) { + return; + } + n += n < 0 ? length : 0; + return isIndex(n, length) ? array[n] : undefined; +} + +module.exports = baseNth; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseOrderBy.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseOrderBy.js new file mode 100644 index 00000000..775a0174 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseOrderBy.js @@ -0,0 +1,49 @@ +var arrayMap = require('./_arrayMap'), + baseGet = require('./_baseGet'), + baseIteratee = require('./_baseIteratee'), + baseMap = require('./_baseMap'), + baseSortBy = require('./_baseSortBy'), + baseUnary = require('./_baseUnary'), + compareMultiple = require('./_compareMultiple'), + identity = require('./identity'), + isArray = require('./isArray'); + +/** + * The base implementation of `_.orderBy` without param guards. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. + * @param {string[]} orders The sort orders of `iteratees`. + * @returns {Array} Returns the new sorted array. + */ +function baseOrderBy(collection, iteratees, orders) { + if (iteratees.length) { + iteratees = arrayMap(iteratees, function(iteratee) { + if (isArray(iteratee)) { + return function(value) { + return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee); + } + } + return iteratee; + }); + } else { + iteratees = [identity]; + } + + var index = -1; + iteratees = arrayMap(iteratees, baseUnary(baseIteratee)); + + var result = baseMap(collection, function(value, key, collection) { + var criteria = arrayMap(iteratees, function(iteratee) { + return iteratee(value); + }); + return { 'criteria': criteria, 'index': ++index, 'value': value }; + }); + + return baseSortBy(result, function(object, other) { + return compareMultiple(object, other, orders); + }); +} + +module.exports = baseOrderBy; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_basePick.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_basePick.js new file mode 100644 index 00000000..09b458a6 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_basePick.js @@ -0,0 +1,19 @@ +var basePickBy = require('./_basePickBy'), + hasIn = require('./hasIn'); + +/** + * The base implementation of `_.pick` without support for individual + * property identifiers. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @returns {Object} Returns the new object. + */ +function basePick(object, paths) { + return basePickBy(object, paths, function(value, path) { + return hasIn(object, path); + }); +} + +module.exports = basePick; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_basePickBy.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_basePickBy.js new file mode 100644 index 00000000..85be68c8 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_basePickBy.js @@ -0,0 +1,30 @@ +var baseGet = require('./_baseGet'), + baseSet = require('./_baseSet'), + castPath = require('./_castPath'); + +/** + * The base implementation of `_.pickBy` without support for iteratee shorthands. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @param {Function} predicate The function invoked per property. + * @returns {Object} Returns the new object. + */ +function basePickBy(object, paths, predicate) { + var index = -1, + length = paths.length, + result = {}; + + while (++index < length) { + var path = paths[index], + value = baseGet(object, path); + + if (predicate(value, path)) { + baseSet(result, castPath(path, object), value); + } + } + return result; +} + +module.exports = basePickBy; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseProperty.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseProperty.js new file mode 100644 index 00000000..496281ec --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseProperty.js @@ -0,0 +1,14 @@ +/** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; +} + +module.exports = baseProperty; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_basePropertyDeep.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_basePropertyDeep.js new file mode 100644 index 00000000..1e5aae50 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_basePropertyDeep.js @@ -0,0 +1,16 @@ +var baseGet = require('./_baseGet'); + +/** + * A specialized version of `baseProperty` which supports deep paths. + * + * @private + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function basePropertyDeep(path) { + return function(object) { + return baseGet(object, path); + }; +} + +module.exports = basePropertyDeep; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_basePropertyOf.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_basePropertyOf.js new file mode 100644 index 00000000..46173999 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_basePropertyOf.js @@ -0,0 +1,14 @@ +/** + * The base implementation of `_.propertyOf` without support for deep paths. + * + * @private + * @param {Object} object The object to query. + * @returns {Function} Returns the new accessor function. + */ +function basePropertyOf(object) { + return function(key) { + return object == null ? undefined : object[key]; + }; +} + +module.exports = basePropertyOf; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_basePullAll.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_basePullAll.js new file mode 100644 index 00000000..305720ed --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_basePullAll.js @@ -0,0 +1,51 @@ +var arrayMap = require('./_arrayMap'), + baseIndexOf = require('./_baseIndexOf'), + baseIndexOfWith = require('./_baseIndexOfWith'), + baseUnary = require('./_baseUnary'), + copyArray = require('./_copyArray'); + +/** Used for built-in method references. */ +var arrayProto = Array.prototype; + +/** Built-in value references. */ +var splice = arrayProto.splice; + +/** + * The base implementation of `_.pullAllBy` without support for iteratee + * shorthands. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns `array`. + */ +function basePullAll(array, values, iteratee, comparator) { + var indexOf = comparator ? baseIndexOfWith : baseIndexOf, + index = -1, + length = values.length, + seen = array; + + if (array === values) { + values = copyArray(values); + } + if (iteratee) { + seen = arrayMap(array, baseUnary(iteratee)); + } + while (++index < length) { + var fromIndex = 0, + value = values[index], + computed = iteratee ? iteratee(value) : value; + + while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) { + if (seen !== array) { + splice.call(seen, fromIndex, 1); + } + splice.call(array, fromIndex, 1); + } + } + return array; +} + +module.exports = basePullAll; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_basePullAt.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_basePullAt.js new file mode 100644 index 00000000..c3e9e710 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_basePullAt.js @@ -0,0 +1,37 @@ +var baseUnset = require('./_baseUnset'), + isIndex = require('./_isIndex'); + +/** Used for built-in method references. */ +var arrayProto = Array.prototype; + +/** Built-in value references. */ +var splice = arrayProto.splice; + +/** + * The base implementation of `_.pullAt` without support for individual + * indexes or capturing the removed elements. + * + * @private + * @param {Array} array The array to modify. + * @param {number[]} indexes The indexes of elements to remove. + * @returns {Array} Returns `array`. + */ +function basePullAt(array, indexes) { + var length = array ? indexes.length : 0, + lastIndex = length - 1; + + while (length--) { + var index = indexes[length]; + if (length == lastIndex || index !== previous) { + var previous = index; + if (isIndex(index)) { + splice.call(array, index, 1); + } else { + baseUnset(array, index); + } + } + } + return array; +} + +module.exports = basePullAt; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseRandom.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseRandom.js new file mode 100644 index 00000000..94f76a76 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseRandom.js @@ -0,0 +1,18 @@ +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeFloor = Math.floor, + nativeRandom = Math.random; + +/** + * The base implementation of `_.random` without support for returning + * floating-point numbers. + * + * @private + * @param {number} lower The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the random number. + */ +function baseRandom(lower, upper) { + return lower + nativeFloor(nativeRandom() * (upper - lower + 1)); +} + +module.exports = baseRandom; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseRange.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseRange.js new file mode 100644 index 00000000..0fb8e419 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseRange.js @@ -0,0 +1,28 @@ +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeCeil = Math.ceil, + nativeMax = Math.max; + +/** + * The base implementation of `_.range` and `_.rangeRight` which doesn't + * coerce arguments. + * + * @private + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @param {number} step The value to increment or decrement by. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the range of numbers. + */ +function baseRange(start, end, step, fromRight) { + var index = -1, + length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), + result = Array(length); + + while (length--) { + result[fromRight ? length : ++index] = start; + start += step; + } + return result; +} + +module.exports = baseRange; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseReduce.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseReduce.js new file mode 100644 index 00000000..5a1f8b57 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseReduce.js @@ -0,0 +1,23 @@ +/** + * The base implementation of `_.reduce` and `_.reduceRight`, without support + * for iteratee shorthands, which iterates over `collection` using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} accumulator The initial value. + * @param {boolean} initAccum Specify using the first or last element of + * `collection` as the initial value. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the accumulated value. + */ +function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { + eachFunc(collection, function(value, index, collection) { + accumulator = initAccum + ? (initAccum = false, value) + : iteratee(accumulator, value, index, collection); + }); + return accumulator; +} + +module.exports = baseReduce; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseRepeat.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseRepeat.js new file mode 100644 index 00000000..ee44c31a --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseRepeat.js @@ -0,0 +1,35 @@ +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER = 9007199254740991; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeFloor = Math.floor; + +/** + * The base implementation of `_.repeat` which doesn't coerce arguments. + * + * @private + * @param {string} string The string to repeat. + * @param {number} n The number of times to repeat the string. + * @returns {string} Returns the repeated string. + */ +function baseRepeat(string, n) { + var result = ''; + if (!string || n < 1 || n > MAX_SAFE_INTEGER) { + return result; + } + // Leverage the exponentiation by squaring algorithm for a faster repeat. + // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details. + do { + if (n % 2) { + result += string; + } + n = nativeFloor(n / 2); + if (n) { + string += string; + } + } while (n); + + return result; +} + +module.exports = baseRepeat; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseRest.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseRest.js new file mode 100644 index 00000000..d0dc4bdd --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseRest.js @@ -0,0 +1,17 @@ +var identity = require('./identity'), + overRest = require('./_overRest'), + setToString = require('./_setToString'); + +/** + * The base implementation of `_.rest` which doesn't validate or coerce arguments. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + */ +function baseRest(func, start) { + return setToString(overRest(func, start, identity), func + ''); +} + +module.exports = baseRest; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseSample.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseSample.js new file mode 100644 index 00000000..58582b91 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseSample.js @@ -0,0 +1,15 @@ +var arraySample = require('./_arraySample'), + values = require('./values'); + +/** + * The base implementation of `_.sample`. + * + * @private + * @param {Array|Object} collection The collection to sample. + * @returns {*} Returns the random element. + */ +function baseSample(collection) { + return arraySample(values(collection)); +} + +module.exports = baseSample; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseSampleSize.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseSampleSize.js new file mode 100644 index 00000000..5c90ec51 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseSampleSize.js @@ -0,0 +1,18 @@ +var baseClamp = require('./_baseClamp'), + shuffleSelf = require('./_shuffleSelf'), + values = require('./values'); + +/** + * The base implementation of `_.sampleSize` without param guards. + * + * @private + * @param {Array|Object} collection The collection to sample. + * @param {number} n The number of elements to sample. + * @returns {Array} Returns the random elements. + */ +function baseSampleSize(collection, n) { + var array = values(collection); + return shuffleSelf(array, baseClamp(n, 0, array.length)); +} + +module.exports = baseSampleSize; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseSet.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseSet.js new file mode 100644 index 00000000..99f4fbf9 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseSet.js @@ -0,0 +1,51 @@ +var assignValue = require('./_assignValue'), + castPath = require('./_castPath'), + isIndex = require('./_isIndex'), + isObject = require('./isObject'), + toKey = require('./_toKey'); + +/** + * The base implementation of `_.set`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ +function baseSet(object, path, value, customizer) { + if (!isObject(object)) { + return object; + } + path = castPath(path, object); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = toKey(path[index]), + newValue = value; + + if (key === '__proto__' || key === 'constructor' || key === 'prototype') { + return object; + } + + if (index != lastIndex) { + var objValue = nested[key]; + newValue = customizer ? customizer(objValue, key, nested) : undefined; + if (newValue === undefined) { + newValue = isObject(objValue) + ? objValue + : (isIndex(path[index + 1]) ? [] : {}); + } + } + assignValue(nested, key, newValue); + nested = nested[key]; + } + return object; +} + +module.exports = baseSet; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseSetData.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseSetData.js new file mode 100644 index 00000000..c409947d --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseSetData.js @@ -0,0 +1,17 @@ +var identity = require('./identity'), + metaMap = require('./_metaMap'); + +/** + * The base implementation of `setData` without support for hot loop shorting. + * + * @private + * @param {Function} func The function to associate metadata with. + * @param {*} data The metadata. + * @returns {Function} Returns `func`. + */ +var baseSetData = !metaMap ? identity : function(func, data) { + metaMap.set(func, data); + return func; +}; + +module.exports = baseSetData; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseSetToString.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseSetToString.js new file mode 100644 index 00000000..89eaca38 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseSetToString.js @@ -0,0 +1,22 @@ +var constant = require('./constant'), + defineProperty = require('./_defineProperty'), + identity = require('./identity'); + +/** + * The base implementation of `setToString` without support for hot loop shorting. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ +var baseSetToString = !defineProperty ? identity : function(func, string) { + return defineProperty(func, 'toString', { + 'configurable': true, + 'enumerable': false, + 'value': constant(string), + 'writable': true + }); +}; + +module.exports = baseSetToString; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseShuffle.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseShuffle.js new file mode 100644 index 00000000..023077ac --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseShuffle.js @@ -0,0 +1,15 @@ +var shuffleSelf = require('./_shuffleSelf'), + values = require('./values'); + +/** + * The base implementation of `_.shuffle`. + * + * @private + * @param {Array|Object} collection The collection to shuffle. + * @returns {Array} Returns the new shuffled array. + */ +function baseShuffle(collection) { + return shuffleSelf(values(collection)); +} + +module.exports = baseShuffle; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseSlice.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseSlice.js new file mode 100644 index 00000000..786f6c99 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseSlice.js @@ -0,0 +1,31 @@ +/** + * The base implementation of `_.slice` without an iteratee call guard. + * + * @private + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ +function baseSlice(array, start, end) { + var index = -1, + length = array.length; + + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = end > length ? length : end; + if (end < 0) { + end += length; + } + length = start > end ? 0 : ((end - start) >>> 0); + start >>>= 0; + + var result = Array(length); + while (++index < length) { + result[index] = array[index + start]; + } + return result; +} + +module.exports = baseSlice; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseSome.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseSome.js new file mode 100644 index 00000000..58f3f447 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseSome.js @@ -0,0 +1,22 @@ +var baseEach = require('./_baseEach'); + +/** + * The base implementation of `_.some` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ +function baseSome(collection, predicate) { + var result; + + baseEach(collection, function(value, index, collection) { + result = predicate(value, index, collection); + return !result; + }); + return !!result; +} + +module.exports = baseSome; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseSortBy.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseSortBy.js new file mode 100644 index 00000000..a25c92ed --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseSortBy.js @@ -0,0 +1,21 @@ +/** + * The base implementation of `_.sortBy` which uses `comparer` to define the + * sort order of `array` and replaces criteria objects with their corresponding + * values. + * + * @private + * @param {Array} array The array to sort. + * @param {Function} comparer The function to define sort order. + * @returns {Array} Returns `array`. + */ +function baseSortBy(array, comparer) { + var length = array.length; + + array.sort(comparer); + while (length--) { + array[length] = array[length].value; + } + return array; +} + +module.exports = baseSortBy; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseSortedIndex.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseSortedIndex.js new file mode 100644 index 00000000..638c366c --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseSortedIndex.js @@ -0,0 +1,42 @@ +var baseSortedIndexBy = require('./_baseSortedIndexBy'), + identity = require('./identity'), + isSymbol = require('./isSymbol'); + +/** Used as references for the maximum length and index of an array. */ +var MAX_ARRAY_LENGTH = 4294967295, + HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1; + +/** + * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which + * performs a binary search of `array` to determine the index at which `value` + * should be inserted into `array` in order to maintain its sort order. + * + * @private + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {boolean} [retHighest] Specify returning the highest qualified index. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + */ +function baseSortedIndex(array, value, retHighest) { + var low = 0, + high = array == null ? low : array.length; + + if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) { + while (low < high) { + var mid = (low + high) >>> 1, + computed = array[mid]; + + if (computed !== null && !isSymbol(computed) && + (retHighest ? (computed <= value) : (computed < value))) { + low = mid + 1; + } else { + high = mid; + } + } + return high; + } + return baseSortedIndexBy(array, value, identity, retHighest); +} + +module.exports = baseSortedIndex; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseSortedIndexBy.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseSortedIndexBy.js new file mode 100644 index 00000000..c247b377 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseSortedIndexBy.js @@ -0,0 +1,67 @@ +var isSymbol = require('./isSymbol'); + +/** Used as references for the maximum length and index of an array. */ +var MAX_ARRAY_LENGTH = 4294967295, + MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeFloor = Math.floor, + nativeMin = Math.min; + +/** + * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy` + * which invokes `iteratee` for `value` and each element of `array` to compute + * their sort ranking. The iteratee is invoked with one argument; (value). + * + * @private + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function} iteratee The iteratee invoked per element. + * @param {boolean} [retHighest] Specify returning the highest qualified index. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + */ +function baseSortedIndexBy(array, value, iteratee, retHighest) { + var low = 0, + high = array == null ? 0 : array.length; + if (high === 0) { + return 0; + } + + value = iteratee(value); + var valIsNaN = value !== value, + valIsNull = value === null, + valIsSymbol = isSymbol(value), + valIsUndefined = value === undefined; + + while (low < high) { + var mid = nativeFloor((low + high) / 2), + computed = iteratee(array[mid]), + othIsDefined = computed !== undefined, + othIsNull = computed === null, + othIsReflexive = computed === computed, + othIsSymbol = isSymbol(computed); + + if (valIsNaN) { + var setLow = retHighest || othIsReflexive; + } else if (valIsUndefined) { + setLow = othIsReflexive && (retHighest || othIsDefined); + } else if (valIsNull) { + setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull); + } else if (valIsSymbol) { + setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol); + } else if (othIsNull || othIsSymbol) { + setLow = false; + } else { + setLow = retHighest ? (computed <= value) : (computed < value); + } + if (setLow) { + low = mid + 1; + } else { + high = mid; + } + } + return nativeMin(high, MAX_ARRAY_INDEX); +} + +module.exports = baseSortedIndexBy; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseSortedUniq.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseSortedUniq.js new file mode 100644 index 00000000..802159a3 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseSortedUniq.js @@ -0,0 +1,30 @@ +var eq = require('./eq'); + +/** + * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ +function baseSortedUniq(array, iteratee) { + var index = -1, + length = array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + if (!index || !eq(computed, seen)) { + var seen = computed; + result[resIndex++] = value === 0 ? 0 : value; + } + } + return result; +} + +module.exports = baseSortedUniq; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseSum.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseSum.js new file mode 100644 index 00000000..a9e84c13 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseSum.js @@ -0,0 +1,24 @@ +/** + * The base implementation of `_.sum` and `_.sumBy` without support for + * iteratee shorthands. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {number} Returns the sum. + */ +function baseSum(array, iteratee) { + var result, + index = -1, + length = array.length; + + while (++index < length) { + var current = iteratee(array[index]); + if (current !== undefined) { + result = result === undefined ? current : (result + current); + } + } + return result; +} + +module.exports = baseSum; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseTimes.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseTimes.js new file mode 100644 index 00000000..0603fc37 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseTimes.js @@ -0,0 +1,20 @@ +/** + * The base implementation of `_.times` without support for iteratee shorthands + * or max array length checks. + * + * @private + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the array of results. + */ +function baseTimes(n, iteratee) { + var index = -1, + result = Array(n); + + while (++index < n) { + result[index] = iteratee(index); + } + return result; +} + +module.exports = baseTimes; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseToNumber.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseToNumber.js new file mode 100644 index 00000000..04859f39 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseToNumber.js @@ -0,0 +1,24 @@ +var isSymbol = require('./isSymbol'); + +/** Used as references for various `Number` constants. */ +var NAN = 0 / 0; + +/** + * The base implementation of `_.toNumber` which doesn't ensure correct + * conversions of binary, hexadecimal, or octal string values. + * + * @private + * @param {*} value The value to process. + * @returns {number} Returns the number. + */ +function baseToNumber(value) { + if (typeof value == 'number') { + return value; + } + if (isSymbol(value)) { + return NAN; + } + return +value; +} + +module.exports = baseToNumber; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseToPairs.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseToPairs.js new file mode 100644 index 00000000..bff19912 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseToPairs.js @@ -0,0 +1,18 @@ +var arrayMap = require('./_arrayMap'); + +/** + * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array + * of key-value pairs for `object` corresponding to the property names of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the key-value pairs. + */ +function baseToPairs(object, props) { + return arrayMap(props, function(key) { + return [key, object[key]]; + }); +} + +module.exports = baseToPairs; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseToString.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseToString.js new file mode 100644 index 00000000..ada6ad29 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseToString.js @@ -0,0 +1,37 @@ +var Symbol = require('./_Symbol'), + arrayMap = require('./_arrayMap'), + isArray = require('./isArray'), + isSymbol = require('./isSymbol'); + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + +/** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ +function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if (isArray(value)) { + // Recursively convert values (susceptible to call stack limits). + return arrayMap(value, baseToString) + ''; + } + if (isSymbol(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +module.exports = baseToString; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseUnary.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseUnary.js new file mode 100644 index 00000000..98639e92 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseUnary.js @@ -0,0 +1,14 @@ +/** + * The base implementation of `_.unary` without support for storing metadata. + * + * @private + * @param {Function} func The function to cap arguments for. + * @returns {Function} Returns the new capped function. + */ +function baseUnary(func) { + return function(value) { + return func(value); + }; +} + +module.exports = baseUnary; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseUniq.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseUniq.js new file mode 100644 index 00000000..aea459dc --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseUniq.js @@ -0,0 +1,72 @@ +var SetCache = require('./_SetCache'), + arrayIncludes = require('./_arrayIncludes'), + arrayIncludesWith = require('./_arrayIncludesWith'), + cacheHas = require('./_cacheHas'), + createSet = require('./_createSet'), + setToArray = require('./_setToArray'); + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** + * The base implementation of `_.uniqBy` without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ +function baseUniq(array, iteratee, comparator) { + var index = -1, + includes = arrayIncludes, + length = array.length, + isCommon = true, + result = [], + seen = result; + + if (comparator) { + isCommon = false; + includes = arrayIncludesWith; + } + else if (length >= LARGE_ARRAY_SIZE) { + var set = iteratee ? null : createSet(array); + if (set) { + return setToArray(set); + } + isCommon = false; + includes = cacheHas; + seen = new SetCache; + } + else { + seen = iteratee ? [] : result; + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var seenIndex = seen.length; + while (seenIndex--) { + if (seen[seenIndex] === computed) { + continue outer; + } + } + if (iteratee) { + seen.push(computed); + } + result.push(value); + } + else if (!includes(seen, computed, comparator)) { + if (seen !== result) { + seen.push(computed); + } + result.push(value); + } + } + return result; +} + +module.exports = baseUniq; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseUnset.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseUnset.js new file mode 100644 index 00000000..eefc6e37 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseUnset.js @@ -0,0 +1,20 @@ +var castPath = require('./_castPath'), + last = require('./last'), + parent = require('./_parent'), + toKey = require('./_toKey'); + +/** + * The base implementation of `_.unset`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The property path to unset. + * @returns {boolean} Returns `true` if the property is deleted, else `false`. + */ +function baseUnset(object, path) { + path = castPath(path, object); + object = parent(object, path); + return object == null || delete object[toKey(last(path))]; +} + +module.exports = baseUnset; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseUpdate.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseUpdate.js new file mode 100644 index 00000000..92a62377 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseUpdate.js @@ -0,0 +1,18 @@ +var baseGet = require('./_baseGet'), + baseSet = require('./_baseSet'); + +/** + * The base implementation of `_.update`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to update. + * @param {Function} updater The function to produce the updated value. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ +function baseUpdate(object, path, updater, customizer) { + return baseSet(object, path, updater(baseGet(object, path)), customizer); +} + +module.exports = baseUpdate; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseValues.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseValues.js new file mode 100644 index 00000000..b95faadc --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseValues.js @@ -0,0 +1,19 @@ +var arrayMap = require('./_arrayMap'); + +/** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ +function baseValues(object, props) { + return arrayMap(props, function(key) { + return object[key]; + }); +} + +module.exports = baseValues; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseWhile.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseWhile.js new file mode 100644 index 00000000..07eac61b --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseWhile.js @@ -0,0 +1,26 @@ +var baseSlice = require('./_baseSlice'); + +/** + * The base implementation of methods like `_.dropWhile` and `_.takeWhile` + * without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to query. + * @param {Function} predicate The function invoked per iteration. + * @param {boolean} [isDrop] Specify dropping elements instead of taking them. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the slice of `array`. + */ +function baseWhile(array, predicate, isDrop, fromRight) { + var length = array.length, + index = fromRight ? length : -1; + + while ((fromRight ? index-- : ++index < length) && + predicate(array[index], index, array)) {} + + return isDrop + ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length)) + : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index)); +} + +module.exports = baseWhile; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseWrapperValue.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseWrapperValue.js new file mode 100644 index 00000000..443e0df5 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseWrapperValue.js @@ -0,0 +1,25 @@ +var LazyWrapper = require('./_LazyWrapper'), + arrayPush = require('./_arrayPush'), + arrayReduce = require('./_arrayReduce'); + +/** + * The base implementation of `wrapperValue` which returns the result of + * performing a sequence of actions on the unwrapped `value`, where each + * successive action is supplied the return value of the previous. + * + * @private + * @param {*} value The unwrapped value. + * @param {Array} actions Actions to perform to resolve the unwrapped value. + * @returns {*} Returns the resolved value. + */ +function baseWrapperValue(value, actions) { + var result = value; + if (result instanceof LazyWrapper) { + result = result.value(); + } + return arrayReduce(actions, function(result, action) { + return action.func.apply(action.thisArg, arrayPush([result], action.args)); + }, result); +} + +module.exports = baseWrapperValue; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseXor.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseXor.js new file mode 100644 index 00000000..8e69338b --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseXor.js @@ -0,0 +1,36 @@ +var baseDifference = require('./_baseDifference'), + baseFlatten = require('./_baseFlatten'), + baseUniq = require('./_baseUniq'); + +/** + * The base implementation of methods like `_.xor`, without support for + * iteratee shorthands, that accepts an array of arrays to inspect. + * + * @private + * @param {Array} arrays The arrays to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of values. + */ +function baseXor(arrays, iteratee, comparator) { + var length = arrays.length; + if (length < 2) { + return length ? baseUniq(arrays[0]) : []; + } + var index = -1, + result = Array(length); + + while (++index < length) { + var array = arrays[index], + othIndex = -1; + + while (++othIndex < length) { + if (othIndex != index) { + result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator); + } + } + } + return baseUniq(baseFlatten(result, 1), iteratee, comparator); +} + +module.exports = baseXor; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseZipObject.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseZipObject.js new file mode 100644 index 00000000..401f85be --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_baseZipObject.js @@ -0,0 +1,23 @@ +/** + * This base implementation of `_.zipObject` which assigns values using `assignFunc`. + * + * @private + * @param {Array} props The property identifiers. + * @param {Array} values The property values. + * @param {Function} assignFunc The function to assign values. + * @returns {Object} Returns the new object. + */ +function baseZipObject(props, values, assignFunc) { + var index = -1, + length = props.length, + valsLength = values.length, + result = {}; + + while (++index < length) { + var value = index < valsLength ? values[index] : undefined; + assignFunc(result, props[index], value); + } + return result; +} + +module.exports = baseZipObject; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_cacheHas.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_cacheHas.js new file mode 100644 index 00000000..2dec8926 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_cacheHas.js @@ -0,0 +1,13 @@ +/** + * Checks if a `cache` value for `key` exists. + * + * @private + * @param {Object} cache The cache to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function cacheHas(cache, key) { + return cache.has(key); +} + +module.exports = cacheHas; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_castArrayLikeObject.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_castArrayLikeObject.js new file mode 100644 index 00000000..92c75fa1 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_castArrayLikeObject.js @@ -0,0 +1,14 @@ +var isArrayLikeObject = require('./isArrayLikeObject'); + +/** + * Casts `value` to an empty array if it's not an array like object. + * + * @private + * @param {*} value The value to inspect. + * @returns {Array|Object} Returns the cast array-like object. + */ +function castArrayLikeObject(value) { + return isArrayLikeObject(value) ? value : []; +} + +module.exports = castArrayLikeObject; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_castFunction.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_castFunction.js new file mode 100644 index 00000000..98c91ae6 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_castFunction.js @@ -0,0 +1,14 @@ +var identity = require('./identity'); + +/** + * Casts `value` to `identity` if it's not a function. + * + * @private + * @param {*} value The value to inspect. + * @returns {Function} Returns cast function. + */ +function castFunction(value) { + return typeof value == 'function' ? value : identity; +} + +module.exports = castFunction; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_castPath.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_castPath.js new file mode 100644 index 00000000..017e4c1b --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_castPath.js @@ -0,0 +1,21 @@ +var isArray = require('./isArray'), + isKey = require('./_isKey'), + stringToPath = require('./_stringToPath'), + toString = require('./toString'); + +/** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @param {Object} [object] The object to query keys on. + * @returns {Array} Returns the cast property path array. + */ +function castPath(value, object) { + if (isArray(value)) { + return value; + } + return isKey(value, object) ? [value] : stringToPath(toString(value)); +} + +module.exports = castPath; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_castRest.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_castRest.js new file mode 100644 index 00000000..213c66f1 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_castRest.js @@ -0,0 +1,14 @@ +var baseRest = require('./_baseRest'); + +/** + * A `baseRest` alias which can be replaced with `identity` by module + * replacement plugins. + * + * @private + * @type {Function} + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ +var castRest = baseRest; + +module.exports = castRest; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_castSlice.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_castSlice.js new file mode 100644 index 00000000..071faeba --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_castSlice.js @@ -0,0 +1,18 @@ +var baseSlice = require('./_baseSlice'); + +/** + * Casts `array` to a slice if it's needed. + * + * @private + * @param {Array} array The array to inspect. + * @param {number} start The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the cast slice. + */ +function castSlice(array, start, end) { + var length = array.length; + end = end === undefined ? length : end; + return (!start && end >= length) ? array : baseSlice(array, start, end); +} + +module.exports = castSlice; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_charsEndIndex.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_charsEndIndex.js new file mode 100644 index 00000000..07908ff3 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_charsEndIndex.js @@ -0,0 +1,19 @@ +var baseIndexOf = require('./_baseIndexOf'); + +/** + * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol + * that is not found in the character symbols. + * + * @private + * @param {Array} strSymbols The string symbols to inspect. + * @param {Array} chrSymbols The character symbols to find. + * @returns {number} Returns the index of the last unmatched string symbol. + */ +function charsEndIndex(strSymbols, chrSymbols) { + var index = strSymbols.length; + + while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} + return index; +} + +module.exports = charsEndIndex; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_charsStartIndex.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_charsStartIndex.js new file mode 100644 index 00000000..b17afd25 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_charsStartIndex.js @@ -0,0 +1,20 @@ +var baseIndexOf = require('./_baseIndexOf'); + +/** + * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol + * that is not found in the character symbols. + * + * @private + * @param {Array} strSymbols The string symbols to inspect. + * @param {Array} chrSymbols The character symbols to find. + * @returns {number} Returns the index of the first unmatched string symbol. + */ +function charsStartIndex(strSymbols, chrSymbols) { + var index = -1, + length = strSymbols.length; + + while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} + return index; +} + +module.exports = charsStartIndex; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_cloneArrayBuffer.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_cloneArrayBuffer.js new file mode 100644 index 00000000..c3d8f6e3 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_cloneArrayBuffer.js @@ -0,0 +1,16 @@ +var Uint8Array = require('./_Uint8Array'); + +/** + * Creates a clone of `arrayBuffer`. + * + * @private + * @param {ArrayBuffer} arrayBuffer The array buffer to clone. + * @returns {ArrayBuffer} Returns the cloned array buffer. + */ +function cloneArrayBuffer(arrayBuffer) { + var result = new arrayBuffer.constructor(arrayBuffer.byteLength); + new Uint8Array(result).set(new Uint8Array(arrayBuffer)); + return result; +} + +module.exports = cloneArrayBuffer; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_cloneBuffer.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_cloneBuffer.js new file mode 100644 index 00000000..27c48109 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_cloneBuffer.js @@ -0,0 +1,35 @@ +var root = require('./_root'); + +/** Detect free variable `exports`. */ +var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + +/** Detect free variable `module`. */ +var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + +/** Detect the popular CommonJS extension `module.exports`. */ +var moduleExports = freeModule && freeModule.exports === freeExports; + +/** Built-in value references. */ +var Buffer = moduleExports ? root.Buffer : undefined, + allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined; + +/** + * Creates a clone of `buffer`. + * + * @private + * @param {Buffer} buffer The buffer to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Buffer} Returns the cloned buffer. + */ +function cloneBuffer(buffer, isDeep) { + if (isDeep) { + return buffer.slice(); + } + var length = buffer.length, + result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length); + + buffer.copy(result); + return result; +} + +module.exports = cloneBuffer; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_cloneDataView.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_cloneDataView.js new file mode 100644 index 00000000..9c9b7b05 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_cloneDataView.js @@ -0,0 +1,16 @@ +var cloneArrayBuffer = require('./_cloneArrayBuffer'); + +/** + * Creates a clone of `dataView`. + * + * @private + * @param {Object} dataView The data view to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned data view. + */ +function cloneDataView(dataView, isDeep) { + var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer; + return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); +} + +module.exports = cloneDataView; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_cloneRegExp.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_cloneRegExp.js new file mode 100644 index 00000000..64a30dfb --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_cloneRegExp.js @@ -0,0 +1,17 @@ +/** Used to match `RegExp` flags from their coerced string values. */ +var reFlags = /\w*$/; + +/** + * Creates a clone of `regexp`. + * + * @private + * @param {Object} regexp The regexp to clone. + * @returns {Object} Returns the cloned regexp. + */ +function cloneRegExp(regexp) { + var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); + result.lastIndex = regexp.lastIndex; + return result; +} + +module.exports = cloneRegExp; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_cloneSymbol.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_cloneSymbol.js new file mode 100644 index 00000000..bede39f5 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_cloneSymbol.js @@ -0,0 +1,18 @@ +var Symbol = require('./_Symbol'); + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * Creates a clone of the `symbol` object. + * + * @private + * @param {Object} symbol The symbol object to clone. + * @returns {Object} Returns the cloned symbol object. + */ +function cloneSymbol(symbol) { + return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; +} + +module.exports = cloneSymbol; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_cloneTypedArray.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_cloneTypedArray.js new file mode 100644 index 00000000..7aad84d4 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_cloneTypedArray.js @@ -0,0 +1,16 @@ +var cloneArrayBuffer = require('./_cloneArrayBuffer'); + +/** + * Creates a clone of `typedArray`. + * + * @private + * @param {Object} typedArray The typed array to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned typed array. + */ +function cloneTypedArray(typedArray, isDeep) { + var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer; + return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); +} + +module.exports = cloneTypedArray; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_compareAscending.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_compareAscending.js new file mode 100644 index 00000000..8dc27910 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_compareAscending.js @@ -0,0 +1,41 @@ +var isSymbol = require('./isSymbol'); + +/** + * Compares values to sort them in ascending order. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {number} Returns the sort order indicator for `value`. + */ +function compareAscending(value, other) { + if (value !== other) { + var valIsDefined = value !== undefined, + valIsNull = value === null, + valIsReflexive = value === value, + valIsSymbol = isSymbol(value); + + var othIsDefined = other !== undefined, + othIsNull = other === null, + othIsReflexive = other === other, + othIsSymbol = isSymbol(other); + + if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || + (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || + (valIsNull && othIsDefined && othIsReflexive) || + (!valIsDefined && othIsReflexive) || + !valIsReflexive) { + return 1; + } + if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || + (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || + (othIsNull && valIsDefined && valIsReflexive) || + (!othIsDefined && valIsReflexive) || + !othIsReflexive) { + return -1; + } + } + return 0; +} + +module.exports = compareAscending; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_compareMultiple.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_compareMultiple.js new file mode 100644 index 00000000..ad61f0fb --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_compareMultiple.js @@ -0,0 +1,44 @@ +var compareAscending = require('./_compareAscending'); + +/** + * Used by `_.orderBy` to compare multiple properties of a value to another + * and stable sort them. + * + * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, + * specify an order of "desc" for descending or "asc" for ascending sort order + * of corresponding values. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {boolean[]|string[]} orders The order to sort by for each property. + * @returns {number} Returns the sort order indicator for `object`. + */ +function compareMultiple(object, other, orders) { + var index = -1, + objCriteria = object.criteria, + othCriteria = other.criteria, + length = objCriteria.length, + ordersLength = orders.length; + + while (++index < length) { + var result = compareAscending(objCriteria[index], othCriteria[index]); + if (result) { + if (index >= ordersLength) { + return result; + } + var order = orders[index]; + return result * (order == 'desc' ? -1 : 1); + } + } + // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications + // that causes it, under certain circumstances, to provide the same value for + // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 + // for more details. + // + // This also ensures a stable sort in V8 and other engines. + // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. + return object.index - other.index; +} + +module.exports = compareMultiple; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_composeArgs.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_composeArgs.js new file mode 100644 index 00000000..1ce40f4f --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_composeArgs.js @@ -0,0 +1,39 @@ +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * Creates an array that is the composition of partially applied arguments, + * placeholders, and provided arguments into a single array of arguments. + * + * @private + * @param {Array} args The provided arguments. + * @param {Array} partials The arguments to prepend to those provided. + * @param {Array} holders The `partials` placeholder indexes. + * @params {boolean} [isCurried] Specify composing for a curried function. + * @returns {Array} Returns the new array of composed arguments. + */ +function composeArgs(args, partials, holders, isCurried) { + var argsIndex = -1, + argsLength = args.length, + holdersLength = holders.length, + leftIndex = -1, + leftLength = partials.length, + rangeLength = nativeMax(argsLength - holdersLength, 0), + result = Array(leftLength + rangeLength), + isUncurried = !isCurried; + + while (++leftIndex < leftLength) { + result[leftIndex] = partials[leftIndex]; + } + while (++argsIndex < holdersLength) { + if (isUncurried || argsIndex < argsLength) { + result[holders[argsIndex]] = args[argsIndex]; + } + } + while (rangeLength--) { + result[leftIndex++] = args[argsIndex++]; + } + return result; +} + +module.exports = composeArgs; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_composeArgsRight.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_composeArgsRight.js new file mode 100644 index 00000000..8dc588d0 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_composeArgsRight.js @@ -0,0 +1,41 @@ +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * This function is like `composeArgs` except that the arguments composition + * is tailored for `_.partialRight`. + * + * @private + * @param {Array} args The provided arguments. + * @param {Array} partials The arguments to append to those provided. + * @param {Array} holders The `partials` placeholder indexes. + * @params {boolean} [isCurried] Specify composing for a curried function. + * @returns {Array} Returns the new array of composed arguments. + */ +function composeArgsRight(args, partials, holders, isCurried) { + var argsIndex = -1, + argsLength = args.length, + holdersIndex = -1, + holdersLength = holders.length, + rightIndex = -1, + rightLength = partials.length, + rangeLength = nativeMax(argsLength - holdersLength, 0), + result = Array(rangeLength + rightLength), + isUncurried = !isCurried; + + while (++argsIndex < rangeLength) { + result[argsIndex] = args[argsIndex]; + } + var offset = argsIndex; + while (++rightIndex < rightLength) { + result[offset + rightIndex] = partials[rightIndex]; + } + while (++holdersIndex < holdersLength) { + if (isUncurried || argsIndex < argsLength) { + result[offset + holders[holdersIndex]] = args[argsIndex++]; + } + } + return result; +} + +module.exports = composeArgsRight; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_copyArray.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_copyArray.js new file mode 100644 index 00000000..cd94d5d0 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_copyArray.js @@ -0,0 +1,20 @@ +/** + * Copies the values of `source` to `array`. + * + * @private + * @param {Array} source The array to copy values from. + * @param {Array} [array=[]] The array to copy values to. + * @returns {Array} Returns `array`. + */ +function copyArray(source, array) { + var index = -1, + length = source.length; + + array || (array = Array(length)); + while (++index < length) { + array[index] = source[index]; + } + return array; +} + +module.exports = copyArray; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_copyObject.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_copyObject.js new file mode 100644 index 00000000..2f2a5c23 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_copyObject.js @@ -0,0 +1,40 @@ +var assignValue = require('./_assignValue'), + baseAssignValue = require('./_baseAssignValue'); + +/** + * Copies properties of `source` to `object`. + * + * @private + * @param {Object} source The object to copy properties from. + * @param {Array} props The property identifiers to copy. + * @param {Object} [object={}] The object to copy properties to. + * @param {Function} [customizer] The function to customize copied values. + * @returns {Object} Returns `object`. + */ +function copyObject(source, props, object, customizer) { + var isNew = !object; + object || (object = {}); + + var index = -1, + length = props.length; + + while (++index < length) { + var key = props[index]; + + var newValue = customizer + ? customizer(object[key], source[key], key, object, source) + : undefined; + + if (newValue === undefined) { + newValue = source[key]; + } + if (isNew) { + baseAssignValue(object, key, newValue); + } else { + assignValue(object, key, newValue); + } + } + return object; +} + +module.exports = copyObject; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_copySymbols.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_copySymbols.js new file mode 100644 index 00000000..c35944ab --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_copySymbols.js @@ -0,0 +1,16 @@ +var copyObject = require('./_copyObject'), + getSymbols = require('./_getSymbols'); + +/** + * Copies own symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbols(source, object) { + return copyObject(source, getSymbols(source), object); +} + +module.exports = copySymbols; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_copySymbolsIn.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_copySymbolsIn.js new file mode 100644 index 00000000..fdf20a73 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_copySymbolsIn.js @@ -0,0 +1,16 @@ +var copyObject = require('./_copyObject'), + getSymbolsIn = require('./_getSymbolsIn'); + +/** + * Copies own and inherited symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbolsIn(source, object) { + return copyObject(source, getSymbolsIn(source), object); +} + +module.exports = copySymbolsIn; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_coreJsData.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_coreJsData.js new file mode 100644 index 00000000..f8e5b4e3 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_coreJsData.js @@ -0,0 +1,6 @@ +var root = require('./_root'); + +/** Used to detect overreaching core-js shims. */ +var coreJsData = root['__core-js_shared__']; + +module.exports = coreJsData; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_countHolders.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_countHolders.js new file mode 100644 index 00000000..718fcdaa --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_countHolders.js @@ -0,0 +1,21 @@ +/** + * Gets the number of `placeholder` occurrences in `array`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} placeholder The placeholder to search for. + * @returns {number} Returns the placeholder count. + */ +function countHolders(array, placeholder) { + var length = array.length, + result = 0; + + while (length--) { + if (array[length] === placeholder) { + ++result; + } + } + return result; +} + +module.exports = countHolders; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createAggregator.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createAggregator.js new file mode 100644 index 00000000..0be42c41 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createAggregator.js @@ -0,0 +1,23 @@ +var arrayAggregator = require('./_arrayAggregator'), + baseAggregator = require('./_baseAggregator'), + baseIteratee = require('./_baseIteratee'), + isArray = require('./isArray'); + +/** + * Creates a function like `_.groupBy`. + * + * @private + * @param {Function} setter The function to set accumulator values. + * @param {Function} [initializer] The accumulator object initializer. + * @returns {Function} Returns the new aggregator function. + */ +function createAggregator(setter, initializer) { + return function(collection, iteratee) { + var func = isArray(collection) ? arrayAggregator : baseAggregator, + accumulator = initializer ? initializer() : {}; + + return func(collection, setter, baseIteratee(iteratee, 2), accumulator); + }; +} + +module.exports = createAggregator; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createAssigner.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createAssigner.js new file mode 100644 index 00000000..1f904c51 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createAssigner.js @@ -0,0 +1,37 @@ +var baseRest = require('./_baseRest'), + isIterateeCall = require('./_isIterateeCall'); + +/** + * Creates a function like `_.assign`. + * + * @private + * @param {Function} assigner The function to assign values. + * @returns {Function} Returns the new assigner function. + */ +function createAssigner(assigner) { + return baseRest(function(object, sources) { + var index = -1, + length = sources.length, + customizer = length > 1 ? sources[length - 1] : undefined, + guard = length > 2 ? sources[2] : undefined; + + customizer = (assigner.length > 3 && typeof customizer == 'function') + ? (length--, customizer) + : undefined; + + if (guard && isIterateeCall(sources[0], sources[1], guard)) { + customizer = length < 3 ? undefined : customizer; + length = 1; + } + object = Object(object); + while (++index < length) { + var source = sources[index]; + if (source) { + assigner(object, source, index, customizer); + } + } + return object; + }); +} + +module.exports = createAssigner; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createBaseEach.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createBaseEach.js new file mode 100644 index 00000000..d24fdd1b --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createBaseEach.js @@ -0,0 +1,32 @@ +var isArrayLike = require('./isArrayLike'); + +/** + * Creates a `baseEach` or `baseEachRight` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseEach(eachFunc, fromRight) { + return function(collection, iteratee) { + if (collection == null) { + return collection; + } + if (!isArrayLike(collection)) { + return eachFunc(collection, iteratee); + } + var length = collection.length, + index = fromRight ? length : -1, + iterable = Object(collection); + + while ((fromRight ? index-- : ++index < length)) { + if (iteratee(iterable[index], index, iterable) === false) { + break; + } + } + return collection; + }; +} + +module.exports = createBaseEach; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createBaseFor.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createBaseFor.js new file mode 100644 index 00000000..94cbf297 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createBaseFor.js @@ -0,0 +1,25 @@ +/** + * Creates a base function for methods like `_.forIn` and `_.forOwn`. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseFor(fromRight) { + return function(object, iteratee, keysFunc) { + var index = -1, + iterable = Object(object), + props = keysFunc(object), + length = props.length; + + while (length--) { + var key = props[fromRight ? length : ++index]; + if (iteratee(iterable[key], key, iterable) === false) { + break; + } + } + return object; + }; +} + +module.exports = createBaseFor; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createBind.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createBind.js new file mode 100644 index 00000000..07cb99f4 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createBind.js @@ -0,0 +1,28 @@ +var createCtor = require('./_createCtor'), + root = require('./_root'); + +/** Used to compose bitmasks for function metadata. */ +var WRAP_BIND_FLAG = 1; + +/** + * Creates a function that wraps `func` to invoke it with the optional `this` + * binding of `thisArg`. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {*} [thisArg] The `this` binding of `func`. + * @returns {Function} Returns the new wrapped function. + */ +function createBind(func, bitmask, thisArg) { + var isBind = bitmask & WRAP_BIND_FLAG, + Ctor = createCtor(func); + + function wrapper() { + var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + return fn.apply(isBind ? thisArg : this, arguments); + } + return wrapper; +} + +module.exports = createBind; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createCaseFirst.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createCaseFirst.js new file mode 100644 index 00000000..fe8ea483 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createCaseFirst.js @@ -0,0 +1,33 @@ +var castSlice = require('./_castSlice'), + hasUnicode = require('./_hasUnicode'), + stringToArray = require('./_stringToArray'), + toString = require('./toString'); + +/** + * Creates a function like `_.lowerFirst`. + * + * @private + * @param {string} methodName The name of the `String` case method to use. + * @returns {Function} Returns the new case function. + */ +function createCaseFirst(methodName) { + return function(string) { + string = toString(string); + + var strSymbols = hasUnicode(string) + ? stringToArray(string) + : undefined; + + var chr = strSymbols + ? strSymbols[0] + : string.charAt(0); + + var trailing = strSymbols + ? castSlice(strSymbols, 1).join('') + : string.slice(1); + + return chr[methodName]() + trailing; + }; +} + +module.exports = createCaseFirst; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createCompounder.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createCompounder.js new file mode 100644 index 00000000..8d4cee2c --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createCompounder.js @@ -0,0 +1,24 @@ +var arrayReduce = require('./_arrayReduce'), + deburr = require('./deburr'), + words = require('./words'); + +/** Used to compose unicode capture groups. */ +var rsApos = "['\u2019]"; + +/** Used to match apostrophes. */ +var reApos = RegExp(rsApos, 'g'); + +/** + * Creates a function like `_.camelCase`. + * + * @private + * @param {Function} callback The function to combine each word. + * @returns {Function} Returns the new compounder function. + */ +function createCompounder(callback) { + return function(string) { + return arrayReduce(words(deburr(string).replace(reApos, '')), callback, ''); + }; +} + +module.exports = createCompounder; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createCtor.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createCtor.js new file mode 100644 index 00000000..9047aa5f --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createCtor.js @@ -0,0 +1,37 @@ +var baseCreate = require('./_baseCreate'), + isObject = require('./isObject'); + +/** + * Creates a function that produces an instance of `Ctor` regardless of + * whether it was invoked as part of a `new` expression or by `call` or `apply`. + * + * @private + * @param {Function} Ctor The constructor to wrap. + * @returns {Function} Returns the new wrapped function. + */ +function createCtor(Ctor) { + return function() { + // Use a `switch` statement to work with class constructors. See + // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist + // for more details. + var args = arguments; + switch (args.length) { + case 0: return new Ctor; + case 1: return new Ctor(args[0]); + case 2: return new Ctor(args[0], args[1]); + case 3: return new Ctor(args[0], args[1], args[2]); + case 4: return new Ctor(args[0], args[1], args[2], args[3]); + case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]); + case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]); + case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]); + } + var thisBinding = baseCreate(Ctor.prototype), + result = Ctor.apply(thisBinding, args); + + // Mimic the constructor's `return` behavior. + // See https://es5.github.io/#x13.2.2 for more details. + return isObject(result) ? result : thisBinding; + }; +} + +module.exports = createCtor; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createCurry.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createCurry.js new file mode 100644 index 00000000..f06c2cdd --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createCurry.js @@ -0,0 +1,46 @@ +var apply = require('./_apply'), + createCtor = require('./_createCtor'), + createHybrid = require('./_createHybrid'), + createRecurry = require('./_createRecurry'), + getHolder = require('./_getHolder'), + replaceHolders = require('./_replaceHolders'), + root = require('./_root'); + +/** + * Creates a function that wraps `func` to enable currying. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {number} arity The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ +function createCurry(func, bitmask, arity) { + var Ctor = createCtor(func); + + function wrapper() { + var length = arguments.length, + args = Array(length), + index = length, + placeholder = getHolder(wrapper); + + while (index--) { + args[index] = arguments[index]; + } + var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder) + ? [] + : replaceHolders(args, placeholder); + + length -= holders.length; + if (length < arity) { + return createRecurry( + func, bitmask, createHybrid, wrapper.placeholder, undefined, + args, holders, undefined, undefined, arity - length); + } + var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + return apply(fn, this, args); + } + return wrapper; +} + +module.exports = createCurry; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createFind.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createFind.js new file mode 100644 index 00000000..8859ff89 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createFind.js @@ -0,0 +1,25 @@ +var baseIteratee = require('./_baseIteratee'), + isArrayLike = require('./isArrayLike'), + keys = require('./keys'); + +/** + * Creates a `_.find` or `_.findLast` function. + * + * @private + * @param {Function} findIndexFunc The function to find the collection index. + * @returns {Function} Returns the new find function. + */ +function createFind(findIndexFunc) { + return function(collection, predicate, fromIndex) { + var iterable = Object(collection); + if (!isArrayLike(collection)) { + var iteratee = baseIteratee(predicate, 3); + collection = keys(collection); + predicate = function(key) { return iteratee(iterable[key], key, iterable); }; + } + var index = findIndexFunc(collection, predicate, fromIndex); + return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; + }; +} + +module.exports = createFind; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createFlow.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createFlow.js new file mode 100644 index 00000000..baaddbf5 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createFlow.js @@ -0,0 +1,78 @@ +var LodashWrapper = require('./_LodashWrapper'), + flatRest = require('./_flatRest'), + getData = require('./_getData'), + getFuncName = require('./_getFuncName'), + isArray = require('./isArray'), + isLaziable = require('./_isLaziable'); + +/** Error message constants. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** Used to compose bitmasks for function metadata. */ +var WRAP_CURRY_FLAG = 8, + WRAP_PARTIAL_FLAG = 32, + WRAP_ARY_FLAG = 128, + WRAP_REARG_FLAG = 256; + +/** + * Creates a `_.flow` or `_.flowRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new flow function. + */ +function createFlow(fromRight) { + return flatRest(function(funcs) { + var length = funcs.length, + index = length, + prereq = LodashWrapper.prototype.thru; + + if (fromRight) { + funcs.reverse(); + } + while (index--) { + var func = funcs[index]; + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + if (prereq && !wrapper && getFuncName(func) == 'wrapper') { + var wrapper = new LodashWrapper([], true); + } + } + index = wrapper ? index : length; + while (++index < length) { + func = funcs[index]; + + var funcName = getFuncName(func), + data = funcName == 'wrapper' ? getData(func) : undefined; + + if (data && isLaziable(data[0]) && + data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) && + !data[4].length && data[9] == 1 + ) { + wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]); + } else { + wrapper = (func.length == 1 && isLaziable(func)) + ? wrapper[funcName]() + : wrapper.thru(func); + } + } + return function() { + var args = arguments, + value = args[0]; + + if (wrapper && args.length == 1 && isArray(value)) { + return wrapper.plant(value).value(); + } + var index = 0, + result = length ? funcs[index].apply(this, args) : value; + + while (++index < length) { + result = funcs[index].call(this, result); + } + return result; + }; + }); +} + +module.exports = createFlow; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createHybrid.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createHybrid.js new file mode 100644 index 00000000..b671bd11 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createHybrid.js @@ -0,0 +1,92 @@ +var composeArgs = require('./_composeArgs'), + composeArgsRight = require('./_composeArgsRight'), + countHolders = require('./_countHolders'), + createCtor = require('./_createCtor'), + createRecurry = require('./_createRecurry'), + getHolder = require('./_getHolder'), + reorder = require('./_reorder'), + replaceHolders = require('./_replaceHolders'), + root = require('./_root'); + +/** Used to compose bitmasks for function metadata. */ +var WRAP_BIND_FLAG = 1, + WRAP_BIND_KEY_FLAG = 2, + WRAP_CURRY_FLAG = 8, + WRAP_CURRY_RIGHT_FLAG = 16, + WRAP_ARY_FLAG = 128, + WRAP_FLIP_FLAG = 512; + +/** + * Creates a function that wraps `func` to invoke it with optional `this` + * binding of `thisArg`, partial application, and currying. + * + * @private + * @param {Function|string} func The function or method name to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {*} [thisArg] The `this` binding of `func`. + * @param {Array} [partials] The arguments to prepend to those provided to + * the new function. + * @param {Array} [holders] The `partials` placeholder indexes. + * @param {Array} [partialsRight] The arguments to append to those provided + * to the new function. + * @param {Array} [holdersRight] The `partialsRight` placeholder indexes. + * @param {Array} [argPos] The argument positions of the new function. + * @param {number} [ary] The arity cap of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ +function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) { + var isAry = bitmask & WRAP_ARY_FLAG, + isBind = bitmask & WRAP_BIND_FLAG, + isBindKey = bitmask & WRAP_BIND_KEY_FLAG, + isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG), + isFlip = bitmask & WRAP_FLIP_FLAG, + Ctor = isBindKey ? undefined : createCtor(func); + + function wrapper() { + var length = arguments.length, + args = Array(length), + index = length; + + while (index--) { + args[index] = arguments[index]; + } + if (isCurried) { + var placeholder = getHolder(wrapper), + holdersCount = countHolders(args, placeholder); + } + if (partials) { + args = composeArgs(args, partials, holders, isCurried); + } + if (partialsRight) { + args = composeArgsRight(args, partialsRight, holdersRight, isCurried); + } + length -= holdersCount; + if (isCurried && length < arity) { + var newHolders = replaceHolders(args, placeholder); + return createRecurry( + func, bitmask, createHybrid, wrapper.placeholder, thisArg, + args, newHolders, argPos, ary, arity - length + ); + } + var thisBinding = isBind ? thisArg : this, + fn = isBindKey ? thisBinding[func] : func; + + length = args.length; + if (argPos) { + args = reorder(args, argPos); + } else if (isFlip && length > 1) { + args.reverse(); + } + if (isAry && ary < length) { + args.length = ary; + } + if (this && this !== root && this instanceof wrapper) { + fn = Ctor || createCtor(fn); + } + return fn.apply(thisBinding, args); + } + return wrapper; +} + +module.exports = createHybrid; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createInverter.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createInverter.js new file mode 100644 index 00000000..6c0c5629 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createInverter.js @@ -0,0 +1,17 @@ +var baseInverter = require('./_baseInverter'); + +/** + * Creates a function like `_.invertBy`. + * + * @private + * @param {Function} setter The function to set accumulator values. + * @param {Function} toIteratee The function to resolve iteratees. + * @returns {Function} Returns the new inverter function. + */ +function createInverter(setter, toIteratee) { + return function(object, iteratee) { + return baseInverter(object, setter, toIteratee(iteratee), {}); + }; +} + +module.exports = createInverter; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createMathOperation.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createMathOperation.js new file mode 100644 index 00000000..f1e238ac --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createMathOperation.js @@ -0,0 +1,38 @@ +var baseToNumber = require('./_baseToNumber'), + baseToString = require('./_baseToString'); + +/** + * Creates a function that performs a mathematical operation on two values. + * + * @private + * @param {Function} operator The function to perform the operation. + * @param {number} [defaultValue] The value used for `undefined` arguments. + * @returns {Function} Returns the new mathematical operation function. + */ +function createMathOperation(operator, defaultValue) { + return function(value, other) { + var result; + if (value === undefined && other === undefined) { + return defaultValue; + } + if (value !== undefined) { + result = value; + } + if (other !== undefined) { + if (result === undefined) { + return other; + } + if (typeof value == 'string' || typeof other == 'string') { + value = baseToString(value); + other = baseToString(other); + } else { + value = baseToNumber(value); + other = baseToNumber(other); + } + result = operator(value, other); + } + return result; + }; +} + +module.exports = createMathOperation; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createOver.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createOver.js new file mode 100644 index 00000000..3b945516 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createOver.js @@ -0,0 +1,27 @@ +var apply = require('./_apply'), + arrayMap = require('./_arrayMap'), + baseIteratee = require('./_baseIteratee'), + baseRest = require('./_baseRest'), + baseUnary = require('./_baseUnary'), + flatRest = require('./_flatRest'); + +/** + * Creates a function like `_.over`. + * + * @private + * @param {Function} arrayFunc The function to iterate over iteratees. + * @returns {Function} Returns the new over function. + */ +function createOver(arrayFunc) { + return flatRest(function(iteratees) { + iteratees = arrayMap(iteratees, baseUnary(baseIteratee)); + return baseRest(function(args) { + var thisArg = this; + return arrayFunc(iteratees, function(iteratee) { + return apply(iteratee, thisArg, args); + }); + }); + }); +} + +module.exports = createOver; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createPadding.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createPadding.js new file mode 100644 index 00000000..2124612b --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createPadding.js @@ -0,0 +1,33 @@ +var baseRepeat = require('./_baseRepeat'), + baseToString = require('./_baseToString'), + castSlice = require('./_castSlice'), + hasUnicode = require('./_hasUnicode'), + stringSize = require('./_stringSize'), + stringToArray = require('./_stringToArray'); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeCeil = Math.ceil; + +/** + * Creates the padding for `string` based on `length`. The `chars` string + * is truncated if the number of characters exceeds `length`. + * + * @private + * @param {number} length The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padding for `string`. + */ +function createPadding(length, chars) { + chars = chars === undefined ? ' ' : baseToString(chars); + + var charsLength = chars.length; + if (charsLength < 2) { + return charsLength ? baseRepeat(chars, length) : chars; + } + var result = baseRepeat(chars, nativeCeil(length / stringSize(chars))); + return hasUnicode(chars) + ? castSlice(stringToArray(result), 0, length).join('') + : result.slice(0, length); +} + +module.exports = createPadding; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createPartial.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createPartial.js new file mode 100644 index 00000000..e16c248b --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createPartial.js @@ -0,0 +1,43 @@ +var apply = require('./_apply'), + createCtor = require('./_createCtor'), + root = require('./_root'); + +/** Used to compose bitmasks for function metadata. */ +var WRAP_BIND_FLAG = 1; + +/** + * Creates a function that wraps `func` to invoke it with the `this` binding + * of `thisArg` and `partials` prepended to the arguments it receives. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} partials The arguments to prepend to those provided to + * the new function. + * @returns {Function} Returns the new wrapped function. + */ +function createPartial(func, bitmask, thisArg, partials) { + var isBind = bitmask & WRAP_BIND_FLAG, + Ctor = createCtor(func); + + function wrapper() { + var argsIndex = -1, + argsLength = arguments.length, + leftIndex = -1, + leftLength = partials.length, + args = Array(leftLength + argsLength), + fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + + while (++leftIndex < leftLength) { + args[leftIndex] = partials[leftIndex]; + } + while (argsLength--) { + args[leftIndex++] = arguments[++argsIndex]; + } + return apply(fn, isBind ? thisArg : this, args); + } + return wrapper; +} + +module.exports = createPartial; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createRange.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createRange.js new file mode 100644 index 00000000..9f52c779 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createRange.js @@ -0,0 +1,30 @@ +var baseRange = require('./_baseRange'), + isIterateeCall = require('./_isIterateeCall'), + toFinite = require('./toFinite'); + +/** + * Creates a `_.range` or `_.rangeRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new range function. + */ +function createRange(fromRight) { + return function(start, end, step) { + if (step && typeof step != 'number' && isIterateeCall(start, end, step)) { + end = step = undefined; + } + // Ensure the sign of `-0` is preserved. + start = toFinite(start); + if (end === undefined) { + end = start; + start = 0; + } else { + end = toFinite(end); + } + step = step === undefined ? (start < end ? 1 : -1) : toFinite(step); + return baseRange(start, end, step, fromRight); + }; +} + +module.exports = createRange; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createRecurry.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createRecurry.js new file mode 100644 index 00000000..eb29fb24 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createRecurry.js @@ -0,0 +1,56 @@ +var isLaziable = require('./_isLaziable'), + setData = require('./_setData'), + setWrapToString = require('./_setWrapToString'); + +/** Used to compose bitmasks for function metadata. */ +var WRAP_BIND_FLAG = 1, + WRAP_BIND_KEY_FLAG = 2, + WRAP_CURRY_BOUND_FLAG = 4, + WRAP_CURRY_FLAG = 8, + WRAP_PARTIAL_FLAG = 32, + WRAP_PARTIAL_RIGHT_FLAG = 64; + +/** + * Creates a function that wraps `func` to continue currying. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {Function} wrapFunc The function to create the `func` wrapper. + * @param {*} placeholder The placeholder value. + * @param {*} [thisArg] The `this` binding of `func`. + * @param {Array} [partials] The arguments to prepend to those provided to + * the new function. + * @param {Array} [holders] The `partials` placeholder indexes. + * @param {Array} [argPos] The argument positions of the new function. + * @param {number} [ary] The arity cap of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ +function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) { + var isCurry = bitmask & WRAP_CURRY_FLAG, + newHolders = isCurry ? holders : undefined, + newHoldersRight = isCurry ? undefined : holders, + newPartials = isCurry ? partials : undefined, + newPartialsRight = isCurry ? undefined : partials; + + bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG); + bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG); + + if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) { + bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG); + } + var newData = [ + func, bitmask, thisArg, newPartials, newHolders, newPartialsRight, + newHoldersRight, argPos, ary, arity + ]; + + var result = wrapFunc.apply(undefined, newData); + if (isLaziable(func)) { + setData(result, newData); + } + result.placeholder = placeholder; + return setWrapToString(result, func, bitmask); +} + +module.exports = createRecurry; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createRelationalOperation.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createRelationalOperation.js new file mode 100644 index 00000000..a17c6b5e --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createRelationalOperation.js @@ -0,0 +1,20 @@ +var toNumber = require('./toNumber'); + +/** + * Creates a function that performs a relational operation on two values. + * + * @private + * @param {Function} operator The function to perform the operation. + * @returns {Function} Returns the new relational operation function. + */ +function createRelationalOperation(operator) { + return function(value, other) { + if (!(typeof value == 'string' && typeof other == 'string')) { + value = toNumber(value); + other = toNumber(other); + } + return operator(value, other); + }; +} + +module.exports = createRelationalOperation; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createRound.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createRound.js new file mode 100644 index 00000000..88be5df3 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createRound.js @@ -0,0 +1,35 @@ +var root = require('./_root'), + toInteger = require('./toInteger'), + toNumber = require('./toNumber'), + toString = require('./toString'); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeIsFinite = root.isFinite, + nativeMin = Math.min; + +/** + * Creates a function like `_.round`. + * + * @private + * @param {string} methodName The name of the `Math` method to use when rounding. + * @returns {Function} Returns the new round function. + */ +function createRound(methodName) { + var func = Math[methodName]; + return function(number, precision) { + number = toNumber(number); + precision = precision == null ? 0 : nativeMin(toInteger(precision), 292); + if (precision && nativeIsFinite(number)) { + // Shift with exponential notation to avoid floating-point issues. + // See [MDN](https://mdn.io/round#Examples) for more details. + var pair = (toString(number) + 'e').split('e'), + value = func(pair[0] + 'e' + (+pair[1] + precision)); + + pair = (toString(value) + 'e').split('e'); + return +(pair[0] + 'e' + (+pair[1] - precision)); + } + return func(number); + }; +} + +module.exports = createRound; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createSet.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createSet.js new file mode 100644 index 00000000..0f644eea --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createSet.js @@ -0,0 +1,19 @@ +var Set = require('./_Set'), + noop = require('./noop'), + setToArray = require('./_setToArray'); + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Creates a set object of `values`. + * + * @private + * @param {Array} values The values to add to the set. + * @returns {Object} Returns the new set. + */ +var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) { + return new Set(values); +}; + +module.exports = createSet; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createToPairs.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createToPairs.js new file mode 100644 index 00000000..568417af --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createToPairs.js @@ -0,0 +1,30 @@ +var baseToPairs = require('./_baseToPairs'), + getTag = require('./_getTag'), + mapToArray = require('./_mapToArray'), + setToPairs = require('./_setToPairs'); + +/** `Object#toString` result references. */ +var mapTag = '[object Map]', + setTag = '[object Set]'; + +/** + * Creates a `_.toPairs` or `_.toPairsIn` function. + * + * @private + * @param {Function} keysFunc The function to get the keys of a given object. + * @returns {Function} Returns the new pairs function. + */ +function createToPairs(keysFunc) { + return function(object) { + var tag = getTag(object); + if (tag == mapTag) { + return mapToArray(object); + } + if (tag == setTag) { + return setToPairs(object); + } + return baseToPairs(object, keysFunc(object)); + }; +} + +module.exports = createToPairs; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createWrap.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createWrap.js new file mode 100644 index 00000000..33f0633e --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_createWrap.js @@ -0,0 +1,106 @@ +var baseSetData = require('./_baseSetData'), + createBind = require('./_createBind'), + createCurry = require('./_createCurry'), + createHybrid = require('./_createHybrid'), + createPartial = require('./_createPartial'), + getData = require('./_getData'), + mergeData = require('./_mergeData'), + setData = require('./_setData'), + setWrapToString = require('./_setWrapToString'), + toInteger = require('./toInteger'); + +/** Error message constants. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** Used to compose bitmasks for function metadata. */ +var WRAP_BIND_FLAG = 1, + WRAP_BIND_KEY_FLAG = 2, + WRAP_CURRY_FLAG = 8, + WRAP_CURRY_RIGHT_FLAG = 16, + WRAP_PARTIAL_FLAG = 32, + WRAP_PARTIAL_RIGHT_FLAG = 64; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * Creates a function that either curries or invokes `func` with optional + * `this` binding and partially applied arguments. + * + * @private + * @param {Function|string} func The function or method name to wrap. + * @param {number} bitmask The bitmask flags. + * 1 - `_.bind` + * 2 - `_.bindKey` + * 4 - `_.curry` or `_.curryRight` of a bound function + * 8 - `_.curry` + * 16 - `_.curryRight` + * 32 - `_.partial` + * 64 - `_.partialRight` + * 128 - `_.rearg` + * 256 - `_.ary` + * 512 - `_.flip` + * @param {*} [thisArg] The `this` binding of `func`. + * @param {Array} [partials] The arguments to be partially applied. + * @param {Array} [holders] The `partials` placeholder indexes. + * @param {Array} [argPos] The argument positions of the new function. + * @param {number} [ary] The arity cap of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ +function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) { + var isBindKey = bitmask & WRAP_BIND_KEY_FLAG; + if (!isBindKey && typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + var length = partials ? partials.length : 0; + if (!length) { + bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG); + partials = holders = undefined; + } + ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0); + arity = arity === undefined ? arity : toInteger(arity); + length -= holders ? holders.length : 0; + + if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) { + var partialsRight = partials, + holdersRight = holders; + + partials = holders = undefined; + } + var data = isBindKey ? undefined : getData(func); + + var newData = [ + func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, + argPos, ary, arity + ]; + + if (data) { + mergeData(newData, data); + } + func = newData[0]; + bitmask = newData[1]; + thisArg = newData[2]; + partials = newData[3]; + holders = newData[4]; + arity = newData[9] = newData[9] === undefined + ? (isBindKey ? 0 : func.length) + : nativeMax(newData[9] - length, 0); + + if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) { + bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG); + } + if (!bitmask || bitmask == WRAP_BIND_FLAG) { + var result = createBind(func, bitmask, thisArg); + } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) { + result = createCurry(func, bitmask, arity); + } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) { + result = createPartial(func, bitmask, thisArg, partials); + } else { + result = createHybrid.apply(undefined, newData); + } + var setter = data ? baseSetData : setData; + return setWrapToString(setter(result, newData), func, bitmask); +} + +module.exports = createWrap; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_customDefaultsAssignIn.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_customDefaultsAssignIn.js new file mode 100644 index 00000000..1f49e6fc --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_customDefaultsAssignIn.js @@ -0,0 +1,29 @@ +var eq = require('./eq'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Used by `_.defaults` to customize its `_.assignIn` use to assign properties + * of source objects to the destination object for all destination properties + * that resolve to `undefined`. + * + * @private + * @param {*} objValue The destination value. + * @param {*} srcValue The source value. + * @param {string} key The key of the property to assign. + * @param {Object} object The parent object of `objValue`. + * @returns {*} Returns the value to assign. + */ +function customDefaultsAssignIn(objValue, srcValue, key, object) { + if (objValue === undefined || + (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) { + return srcValue; + } + return objValue; +} + +module.exports = customDefaultsAssignIn; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_customDefaultsMerge.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_customDefaultsMerge.js new file mode 100644 index 00000000..4cab3175 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_customDefaultsMerge.js @@ -0,0 +1,28 @@ +var baseMerge = require('./_baseMerge'), + isObject = require('./isObject'); + +/** + * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source + * objects into destination objects that are passed thru. + * + * @private + * @param {*} objValue The destination value. + * @param {*} srcValue The source value. + * @param {string} key The key of the property to merge. + * @param {Object} object The parent object of `objValue`. + * @param {Object} source The parent object of `srcValue`. + * @param {Object} [stack] Tracks traversed source values and their merged + * counterparts. + * @returns {*} Returns the value to assign. + */ +function customDefaultsMerge(objValue, srcValue, key, object, source, stack) { + if (isObject(objValue) && isObject(srcValue)) { + // Recursively merge objects and arrays (susceptible to call stack limits). + stack.set(srcValue, objValue); + baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack); + stack['delete'](srcValue); + } + return objValue; +} + +module.exports = customDefaultsMerge; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_customOmitClone.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_customOmitClone.js new file mode 100644 index 00000000..968db2ef --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_customOmitClone.js @@ -0,0 +1,16 @@ +var isPlainObject = require('./isPlainObject'); + +/** + * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain + * objects. + * + * @private + * @param {*} value The value to inspect. + * @param {string} key The key of the property to inspect. + * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`. + */ +function customOmitClone(value) { + return isPlainObject(value) ? undefined : value; +} + +module.exports = customOmitClone; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_deburrLetter.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_deburrLetter.js new file mode 100644 index 00000000..3e531edc --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_deburrLetter.js @@ -0,0 +1,71 @@ +var basePropertyOf = require('./_basePropertyOf'); + +/** Used to map Latin Unicode letters to basic Latin letters. */ +var deburredLetters = { + // Latin-1 Supplement block. + '\xc0': 'A', '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A', + '\xe0': 'a', '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a', + '\xc7': 'C', '\xe7': 'c', + '\xd0': 'D', '\xf0': 'd', + '\xc8': 'E', '\xc9': 'E', '\xca': 'E', '\xcb': 'E', + '\xe8': 'e', '\xe9': 'e', '\xea': 'e', '\xeb': 'e', + '\xcc': 'I', '\xcd': 'I', '\xce': 'I', '\xcf': 'I', + '\xec': 'i', '\xed': 'i', '\xee': 'i', '\xef': 'i', + '\xd1': 'N', '\xf1': 'n', + '\xd2': 'O', '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O', + '\xf2': 'o', '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o', + '\xd9': 'U', '\xda': 'U', '\xdb': 'U', '\xdc': 'U', + '\xf9': 'u', '\xfa': 'u', '\xfb': 'u', '\xfc': 'u', + '\xdd': 'Y', '\xfd': 'y', '\xff': 'y', + '\xc6': 'Ae', '\xe6': 'ae', + '\xde': 'Th', '\xfe': 'th', + '\xdf': 'ss', + // Latin Extended-A block. + '\u0100': 'A', '\u0102': 'A', '\u0104': 'A', + '\u0101': 'a', '\u0103': 'a', '\u0105': 'a', + '\u0106': 'C', '\u0108': 'C', '\u010a': 'C', '\u010c': 'C', + '\u0107': 'c', '\u0109': 'c', '\u010b': 'c', '\u010d': 'c', + '\u010e': 'D', '\u0110': 'D', '\u010f': 'd', '\u0111': 'd', + '\u0112': 'E', '\u0114': 'E', '\u0116': 'E', '\u0118': 'E', '\u011a': 'E', + '\u0113': 'e', '\u0115': 'e', '\u0117': 'e', '\u0119': 'e', '\u011b': 'e', + '\u011c': 'G', '\u011e': 'G', '\u0120': 'G', '\u0122': 'G', + '\u011d': 'g', '\u011f': 'g', '\u0121': 'g', '\u0123': 'g', + '\u0124': 'H', '\u0126': 'H', '\u0125': 'h', '\u0127': 'h', + '\u0128': 'I', '\u012a': 'I', '\u012c': 'I', '\u012e': 'I', '\u0130': 'I', + '\u0129': 'i', '\u012b': 'i', '\u012d': 'i', '\u012f': 'i', '\u0131': 'i', + '\u0134': 'J', '\u0135': 'j', + '\u0136': 'K', '\u0137': 'k', '\u0138': 'k', + '\u0139': 'L', '\u013b': 'L', '\u013d': 'L', '\u013f': 'L', '\u0141': 'L', + '\u013a': 'l', '\u013c': 'l', '\u013e': 'l', '\u0140': 'l', '\u0142': 'l', + '\u0143': 'N', '\u0145': 'N', '\u0147': 'N', '\u014a': 'N', + '\u0144': 'n', '\u0146': 'n', '\u0148': 'n', '\u014b': 'n', + '\u014c': 'O', '\u014e': 'O', '\u0150': 'O', + '\u014d': 'o', '\u014f': 'o', '\u0151': 'o', + '\u0154': 'R', '\u0156': 'R', '\u0158': 'R', + '\u0155': 'r', '\u0157': 'r', '\u0159': 'r', + '\u015a': 'S', '\u015c': 'S', '\u015e': 'S', '\u0160': 'S', + '\u015b': 's', '\u015d': 's', '\u015f': 's', '\u0161': 's', + '\u0162': 'T', '\u0164': 'T', '\u0166': 'T', + '\u0163': 't', '\u0165': 't', '\u0167': 't', + '\u0168': 'U', '\u016a': 'U', '\u016c': 'U', '\u016e': 'U', '\u0170': 'U', '\u0172': 'U', + '\u0169': 'u', '\u016b': 'u', '\u016d': 'u', '\u016f': 'u', '\u0171': 'u', '\u0173': 'u', + '\u0174': 'W', '\u0175': 'w', + '\u0176': 'Y', '\u0177': 'y', '\u0178': 'Y', + '\u0179': 'Z', '\u017b': 'Z', '\u017d': 'Z', + '\u017a': 'z', '\u017c': 'z', '\u017e': 'z', + '\u0132': 'IJ', '\u0133': 'ij', + '\u0152': 'Oe', '\u0153': 'oe', + '\u0149': "'n", '\u017f': 's' +}; + +/** + * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A + * letters to basic Latin letters. + * + * @private + * @param {string} letter The matched letter to deburr. + * @returns {string} Returns the deburred letter. + */ +var deburrLetter = basePropertyOf(deburredLetters); + +module.exports = deburrLetter; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_defineProperty.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_defineProperty.js new file mode 100644 index 00000000..b6116d92 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_defineProperty.js @@ -0,0 +1,11 @@ +var getNative = require('./_getNative'); + +var defineProperty = (function() { + try { + var func = getNative(Object, 'defineProperty'); + func({}, '', {}); + return func; + } catch (e) {} +}()); + +module.exports = defineProperty; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_equalArrays.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_equalArrays.js new file mode 100644 index 00000000..824228c7 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_equalArrays.js @@ -0,0 +1,84 @@ +var SetCache = require('./_SetCache'), + arraySome = require('./_arraySome'), + cacheHas = require('./_cacheHas'); + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + +/** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ +function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + // Check that cyclic values are equal. + var arrStacked = stack.get(array); + var othStacked = stack.get(other); + if (arrStacked && othStacked) { + return arrStacked == other && othStacked == array; + } + var index = -1, + result = true, + seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined; + + stack.set(array, other); + stack.set(other, array); + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, arrValue, index, other, array, stack) + : customizer(arrValue, othValue, index, array, other, stack); + } + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (seen) { + if (!arraySome(other, function(othValue, othIndex) { + if (!cacheHas(seen, othIndex) && + (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { + return seen.push(othIndex); + } + })) { + result = false; + break; + } + } else if (!( + arrValue === othValue || + equalFunc(arrValue, othValue, bitmask, customizer, stack) + )) { + result = false; + break; + } + } + stack['delete'](array); + stack['delete'](other); + return result; +} + +module.exports = equalArrays; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_equalByTag.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_equalByTag.js new file mode 100644 index 00000000..71919e86 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_equalByTag.js @@ -0,0 +1,112 @@ +var Symbol = require('./_Symbol'), + Uint8Array = require('./_Uint8Array'), + eq = require('./eq'), + equalArrays = require('./_equalArrays'), + mapToArray = require('./_mapToArray'), + setToArray = require('./_setToArray'); + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]'; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { + switch (tag) { + case dataViewTag: + if ((object.byteLength != other.byteLength) || + (object.byteOffset != other.byteOffset)) { + return false; + } + object = object.buffer; + other = other.buffer; + + case arrayBufferTag: + if ((object.byteLength != other.byteLength) || + !equalFunc(new Uint8Array(object), new Uint8Array(other))) { + return false; + } + return true; + + case boolTag: + case dateTag: + case numberTag: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return eq(+object, +other); + + case errorTag: + return object.name == other.name && object.message == other.message; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings, primitives and objects, + // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring + // for more details. + return object == (other + ''); + + case mapTag: + var convert = mapToArray; + + case setTag: + var isPartial = bitmask & COMPARE_PARTIAL_FLAG; + convert || (convert = setToArray); + + if (object.size != other.size && !isPartial) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + bitmask |= COMPARE_UNORDERED_FLAG; + + // Recursively compare objects (susceptible to call stack limits). + stack.set(object, other); + var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); + stack['delete'](object); + return result; + + case symbolTag: + if (symbolValueOf) { + return symbolValueOf.call(object) == symbolValueOf.call(other); + } + } + return false; +} + +module.exports = equalByTag; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_equalObjects.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_equalObjects.js new file mode 100644 index 00000000..cdaacd2d --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_equalObjects.js @@ -0,0 +1,90 @@ +var getAllKeys = require('./_getAllKeys'); + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + objProps = getAllKeys(object), + objLength = objProps.length, + othProps = getAllKeys(other), + othLength = othProps.length; + + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { + return false; + } + } + // Check that cyclic values are equal. + var objStacked = stack.get(object); + var othStacked = stack.get(other); + if (objStacked && othStacked) { + return objStacked == other && othStacked == object; + } + var result = true; + stack.set(object, other); + stack.set(other, object); + + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, objValue, key, other, object, stack) + : customizer(objValue, othValue, key, object, other, stack); + } + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined + ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) + : compared + )) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + stack['delete'](object); + stack['delete'](other); + return result; +} + +module.exports = equalObjects; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_escapeHtmlChar.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_escapeHtmlChar.js new file mode 100644 index 00000000..7ca68ee6 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_escapeHtmlChar.js @@ -0,0 +1,21 @@ +var basePropertyOf = require('./_basePropertyOf'); + +/** Used to map characters to HTML entities. */ +var htmlEscapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''' +}; + +/** + * Used by `_.escape` to convert characters to HTML entities. + * + * @private + * @param {string} chr The matched character to escape. + * @returns {string} Returns the escaped character. + */ +var escapeHtmlChar = basePropertyOf(htmlEscapes); + +module.exports = escapeHtmlChar; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_escapeStringChar.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_escapeStringChar.js new file mode 100644 index 00000000..44eca96c --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_escapeStringChar.js @@ -0,0 +1,22 @@ +/** Used to escape characters for inclusion in compiled string literals. */ +var stringEscapes = { + '\\': '\\', + "'": "'", + '\n': 'n', + '\r': 'r', + '\u2028': 'u2028', + '\u2029': 'u2029' +}; + +/** + * Used by `_.template` to escape characters for inclusion in compiled string literals. + * + * @private + * @param {string} chr The matched character to escape. + * @returns {string} Returns the escaped character. + */ +function escapeStringChar(chr) { + return '\\' + stringEscapes[chr]; +} + +module.exports = escapeStringChar; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_flatRest.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_flatRest.js new file mode 100644 index 00000000..94ab6cca --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_flatRest.js @@ -0,0 +1,16 @@ +var flatten = require('./flatten'), + overRest = require('./_overRest'), + setToString = require('./_setToString'); + +/** + * A specialized version of `baseRest` which flattens the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ +function flatRest(func) { + return setToString(overRest(func, undefined, flatten), func + ''); +} + +module.exports = flatRest; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_freeGlobal.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_freeGlobal.js new file mode 100644 index 00000000..bbec998f --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_freeGlobal.js @@ -0,0 +1,4 @@ +/** Detect free variable `global` from Node.js. */ +var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + +module.exports = freeGlobal; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_getAllKeys.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_getAllKeys.js new file mode 100644 index 00000000..a9ce6995 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_getAllKeys.js @@ -0,0 +1,16 @@ +var baseGetAllKeys = require('./_baseGetAllKeys'), + getSymbols = require('./_getSymbols'), + keys = require('./keys'); + +/** + * Creates an array of own enumerable property names and symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeys(object) { + return baseGetAllKeys(object, keys, getSymbols); +} + +module.exports = getAllKeys; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_getAllKeysIn.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_getAllKeysIn.js new file mode 100644 index 00000000..1b466784 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_getAllKeysIn.js @@ -0,0 +1,17 @@ +var baseGetAllKeys = require('./_baseGetAllKeys'), + getSymbolsIn = require('./_getSymbolsIn'), + keysIn = require('./keysIn'); + +/** + * Creates an array of own and inherited enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeysIn(object) { + return baseGetAllKeys(object, keysIn, getSymbolsIn); +} + +module.exports = getAllKeysIn; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_getData.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_getData.js new file mode 100644 index 00000000..a1fe7b77 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_getData.js @@ -0,0 +1,15 @@ +var metaMap = require('./_metaMap'), + noop = require('./noop'); + +/** + * Gets metadata for `func`. + * + * @private + * @param {Function} func The function to query. + * @returns {*} Returns the metadata for `func`. + */ +var getData = !metaMap ? noop : function(func) { + return metaMap.get(func); +}; + +module.exports = getData; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_getFuncName.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_getFuncName.js new file mode 100644 index 00000000..21e15b33 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_getFuncName.js @@ -0,0 +1,31 @@ +var realNames = require('./_realNames'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Gets the name of `func`. + * + * @private + * @param {Function} func The function to query. + * @returns {string} Returns the function name. + */ +function getFuncName(func) { + var result = (func.name + ''), + array = realNames[result], + length = hasOwnProperty.call(realNames, result) ? array.length : 0; + + while (length--) { + var data = array[length], + otherFunc = data.func; + if (otherFunc == null || otherFunc == func) { + return data.name; + } + } + return result; +} + +module.exports = getFuncName; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_getHolder.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_getHolder.js new file mode 100644 index 00000000..65e94b5c --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_getHolder.js @@ -0,0 +1,13 @@ +/** + * Gets the argument placeholder value for `func`. + * + * @private + * @param {Function} func The function to inspect. + * @returns {*} Returns the placeholder value. + */ +function getHolder(func) { + var object = func; + return object.placeholder; +} + +module.exports = getHolder; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_getMapData.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_getMapData.js new file mode 100644 index 00000000..17f63032 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_getMapData.js @@ -0,0 +1,18 @@ +var isKeyable = require('./_isKeyable'); + +/** + * Gets the data for `map`. + * + * @private + * @param {Object} map The map to query. + * @param {string} key The reference key. + * @returns {*} Returns the map data. + */ +function getMapData(map, key) { + var data = map.__data__; + return isKeyable(key) + ? data[typeof key == 'string' ? 'string' : 'hash'] + : data.map; +} + +module.exports = getMapData; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_getMatchData.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_getMatchData.js new file mode 100644 index 00000000..2cc70f91 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_getMatchData.js @@ -0,0 +1,24 @@ +var isStrictComparable = require('./_isStrictComparable'), + keys = require('./keys'); + +/** + * Gets the property names, values, and compare flags of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the match data of `object`. + */ +function getMatchData(object) { + var result = keys(object), + length = result.length; + + while (length--) { + var key = result[length], + value = object[key]; + + result[length] = [key, value, isStrictComparable(value)]; + } + return result; +} + +module.exports = getMatchData; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_getNative.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_getNative.js new file mode 100644 index 00000000..97a622b8 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_getNative.js @@ -0,0 +1,17 @@ +var baseIsNative = require('./_baseIsNative'), + getValue = require('./_getValue'); + +/** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ +function getNative(object, key) { + var value = getValue(object, key); + return baseIsNative(value) ? value : undefined; +} + +module.exports = getNative; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_getPrototype.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_getPrototype.js new file mode 100644 index 00000000..e8086121 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_getPrototype.js @@ -0,0 +1,6 @@ +var overArg = require('./_overArg'); + +/** Built-in value references. */ +var getPrototype = overArg(Object.getPrototypeOf, Object); + +module.exports = getPrototype; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_getRawTag.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_getRawTag.js new file mode 100644 index 00000000..49a95c9c --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_getRawTag.js @@ -0,0 +1,46 @@ +var Symbol = require('./_Symbol'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var nativeObjectToString = objectProto.toString; + +/** Built-in value references. */ +var symToStringTag = Symbol ? Symbol.toStringTag : undefined; + +/** + * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the raw `toStringTag`. + */ +function getRawTag(value) { + var isOwn = hasOwnProperty.call(value, symToStringTag), + tag = value[symToStringTag]; + + try { + value[symToStringTag] = undefined; + var unmasked = true; + } catch (e) {} + + var result = nativeObjectToString.call(value); + if (unmasked) { + if (isOwn) { + value[symToStringTag] = tag; + } else { + delete value[symToStringTag]; + } + } + return result; +} + +module.exports = getRawTag; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_getSymbols.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_getSymbols.js new file mode 100644 index 00000000..7d6eafeb --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_getSymbols.js @@ -0,0 +1,30 @@ +var arrayFilter = require('./_arrayFilter'), + stubArray = require('./stubArray'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Built-in value references. */ +var propertyIsEnumerable = objectProto.propertyIsEnumerable; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbols = !nativeGetSymbols ? stubArray : function(object) { + if (object == null) { + return []; + } + object = Object(object); + return arrayFilter(nativeGetSymbols(object), function(symbol) { + return propertyIsEnumerable.call(object, symbol); + }); +}; + +module.exports = getSymbols; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_getSymbolsIn.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_getSymbolsIn.js new file mode 100644 index 00000000..cec0855a --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_getSymbolsIn.js @@ -0,0 +1,25 @@ +var arrayPush = require('./_arrayPush'), + getPrototype = require('./_getPrototype'), + getSymbols = require('./_getSymbols'), + stubArray = require('./stubArray'); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own and inherited enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) { + var result = []; + while (object) { + arrayPush(result, getSymbols(object)); + object = getPrototype(object); + } + return result; +}; + +module.exports = getSymbolsIn; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_getTag.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_getTag.js new file mode 100644 index 00000000..deaf89d5 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_getTag.js @@ -0,0 +1,58 @@ +var DataView = require('./_DataView'), + Map = require('./_Map'), + Promise = require('./_Promise'), + Set = require('./_Set'), + WeakMap = require('./_WeakMap'), + baseGetTag = require('./_baseGetTag'), + toSource = require('./_toSource'); + +/** `Object#toString` result references. */ +var mapTag = '[object Map]', + objectTag = '[object Object]', + promiseTag = '[object Promise]', + setTag = '[object Set]', + weakMapTag = '[object WeakMap]'; + +var dataViewTag = '[object DataView]'; + +/** Used to detect maps, sets, and weakmaps. */ +var dataViewCtorString = toSource(DataView), + mapCtorString = toSource(Map), + promiseCtorString = toSource(Promise), + setCtorString = toSource(Set), + weakMapCtorString = toSource(WeakMap); + +/** + * Gets the `toStringTag` of `value`. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ +var getTag = baseGetTag; + +// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. +if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) || + (Map && getTag(new Map) != mapTag) || + (Promise && getTag(Promise.resolve()) != promiseTag) || + (Set && getTag(new Set) != setTag) || + (WeakMap && getTag(new WeakMap) != weakMapTag)) { + getTag = function(value) { + var result = baseGetTag(value), + Ctor = result == objectTag ? value.constructor : undefined, + ctorString = Ctor ? toSource(Ctor) : ''; + + if (ctorString) { + switch (ctorString) { + case dataViewCtorString: return dataViewTag; + case mapCtorString: return mapTag; + case promiseCtorString: return promiseTag; + case setCtorString: return setTag; + case weakMapCtorString: return weakMapTag; + } + } + return result; + }; +} + +module.exports = getTag; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_getValue.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_getValue.js new file mode 100644 index 00000000..5f7d7736 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_getValue.js @@ -0,0 +1,13 @@ +/** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ +function getValue(object, key) { + return object == null ? undefined : object[key]; +} + +module.exports = getValue; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_getView.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_getView.js new file mode 100644 index 00000000..df1e5d44 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_getView.js @@ -0,0 +1,33 @@ +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max, + nativeMin = Math.min; + +/** + * Gets the view, applying any `transforms` to the `start` and `end` positions. + * + * @private + * @param {number} start The start of the view. + * @param {number} end The end of the view. + * @param {Array} transforms The transformations to apply to the view. + * @returns {Object} Returns an object containing the `start` and `end` + * positions of the view. + */ +function getView(start, end, transforms) { + var index = -1, + length = transforms.length; + + while (++index < length) { + var data = transforms[index], + size = data.size; + + switch (data.type) { + case 'drop': start += size; break; + case 'dropRight': end -= size; break; + case 'take': end = nativeMin(end, start + size); break; + case 'takeRight': start = nativeMax(start, end - size); break; + } + } + return { 'start': start, 'end': end }; +} + +module.exports = getView; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_getWrapDetails.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_getWrapDetails.js new file mode 100644 index 00000000..3bcc6e48 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_getWrapDetails.js @@ -0,0 +1,17 @@ +/** Used to match wrap detail comments. */ +var reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/, + reSplitDetails = /,? & /; + +/** + * Extracts wrapper details from the `source` body comment. + * + * @private + * @param {string} source The source to inspect. + * @returns {Array} Returns the wrapper details. + */ +function getWrapDetails(source) { + var match = source.match(reWrapDetails); + return match ? match[1].split(reSplitDetails) : []; +} + +module.exports = getWrapDetails; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_hasPath.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_hasPath.js new file mode 100644 index 00000000..93dbde15 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_hasPath.js @@ -0,0 +1,39 @@ +var castPath = require('./_castPath'), + isArguments = require('./isArguments'), + isArray = require('./isArray'), + isIndex = require('./_isIndex'), + isLength = require('./isLength'), + toKey = require('./_toKey'); + +/** + * Checks if `path` exists on `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @param {Function} hasFunc The function to check properties. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + */ +function hasPath(object, path, hasFunc) { + path = castPath(path, object); + + var index = -1, + length = path.length, + result = false; + + while (++index < length) { + var key = toKey(path[index]); + if (!(result = object != null && hasFunc(object, key))) { + break; + } + object = object[key]; + } + if (result || ++index != length) { + return result; + } + length = object == null ? 0 : object.length; + return !!length && isLength(length) && isIndex(key, length) && + (isArray(object) || isArguments(object)); +} + +module.exports = hasPath; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_hasUnicode.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_hasUnicode.js new file mode 100644 index 00000000..cb6ca15f --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_hasUnicode.js @@ -0,0 +1,26 @@ +/** Used to compose unicode character classes. */ +var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, + rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsZWJ = '\\u200d'; + +/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ +var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); + +/** + * Checks if `string` contains Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a symbol is found, else `false`. + */ +function hasUnicode(string) { + return reHasUnicode.test(string); +} + +module.exports = hasUnicode; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_hasUnicodeWord.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_hasUnicodeWord.js new file mode 100644 index 00000000..95d52c44 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_hasUnicodeWord.js @@ -0,0 +1,15 @@ +/** Used to detect strings that need a more robust regexp to match words. */ +var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/; + +/** + * Checks if `string` contains a word composed of Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a word is found, else `false`. + */ +function hasUnicodeWord(string) { + return reHasUnicodeWord.test(string); +} + +module.exports = hasUnicodeWord; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_hashClear.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_hashClear.js new file mode 100644 index 00000000..5d4b70cc --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_hashClear.js @@ -0,0 +1,15 @@ +var nativeCreate = require('./_nativeCreate'); + +/** + * Removes all key-value entries from the hash. + * + * @private + * @name clear + * @memberOf Hash + */ +function hashClear() { + this.__data__ = nativeCreate ? nativeCreate(null) : {}; + this.size = 0; +} + +module.exports = hashClear; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_hashDelete.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_hashDelete.js new file mode 100644 index 00000000..ea9dabf1 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_hashDelete.js @@ -0,0 +1,17 @@ +/** + * Removes `key` and its value from the hash. + * + * @private + * @name delete + * @memberOf Hash + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function hashDelete(key) { + var result = this.has(key) && delete this.__data__[key]; + this.size -= result ? 1 : 0; + return result; +} + +module.exports = hashDelete; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_hashGet.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_hashGet.js new file mode 100644 index 00000000..1fc2f34b --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_hashGet.js @@ -0,0 +1,30 @@ +var nativeCreate = require('./_nativeCreate'); + +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Gets the hash value for `key`. + * + * @private + * @name get + * @memberOf Hash + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function hashGet(key) { + var data = this.__data__; + if (nativeCreate) { + var result = data[key]; + return result === HASH_UNDEFINED ? undefined : result; + } + return hasOwnProperty.call(data, key) ? data[key] : undefined; +} + +module.exports = hashGet; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_hashHas.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_hashHas.js new file mode 100644 index 00000000..281a5517 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_hashHas.js @@ -0,0 +1,23 @@ +var nativeCreate = require('./_nativeCreate'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Checks if a hash value for `key` exists. + * + * @private + * @name has + * @memberOf Hash + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function hashHas(key) { + var data = this.__data__; + return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key); +} + +module.exports = hashHas; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_hashSet.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_hashSet.js new file mode 100644 index 00000000..e1055283 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_hashSet.js @@ -0,0 +1,23 @@ +var nativeCreate = require('./_nativeCreate'); + +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** + * Sets the hash `key` to `value`. + * + * @private + * @name set + * @memberOf Hash + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the hash instance. + */ +function hashSet(key, value) { + var data = this.__data__; + this.size += this.has(key) ? 0 : 1; + data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; + return this; +} + +module.exports = hashSet; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_initCloneArray.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_initCloneArray.js new file mode 100644 index 00000000..078c15af --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_initCloneArray.js @@ -0,0 +1,26 @@ +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Initializes an array clone. + * + * @private + * @param {Array} array The array to clone. + * @returns {Array} Returns the initialized clone. + */ +function initCloneArray(array) { + var length = array.length, + result = new array.constructor(length); + + // Add properties assigned by `RegExp#exec`. + if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) { + result.index = array.index; + result.input = array.input; + } + return result; +} + +module.exports = initCloneArray; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_initCloneByTag.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_initCloneByTag.js new file mode 100644 index 00000000..f69a008c --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_initCloneByTag.js @@ -0,0 +1,77 @@ +var cloneArrayBuffer = require('./_cloneArrayBuffer'), + cloneDataView = require('./_cloneDataView'), + cloneRegExp = require('./_cloneRegExp'), + cloneSymbol = require('./_cloneSymbol'), + cloneTypedArray = require('./_cloneTypedArray'); + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + +/** + * Initializes an object clone based on its `toStringTag`. + * + * **Note:** This function only supports cloning values with tags of + * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. + * + * @private + * @param {Object} object The object to clone. + * @param {string} tag The `toStringTag` of the object to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the initialized clone. + */ +function initCloneByTag(object, tag, isDeep) { + var Ctor = object.constructor; + switch (tag) { + case arrayBufferTag: + return cloneArrayBuffer(object); + + case boolTag: + case dateTag: + return new Ctor(+object); + + case dataViewTag: + return cloneDataView(object, isDeep); + + case float32Tag: case float64Tag: + case int8Tag: case int16Tag: case int32Tag: + case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: + return cloneTypedArray(object, isDeep); + + case mapTag: + return new Ctor; + + case numberTag: + case stringTag: + return new Ctor(object); + + case regexpTag: + return cloneRegExp(object); + + case setTag: + return new Ctor; + + case symbolTag: + return cloneSymbol(object); + } +} + +module.exports = initCloneByTag; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_initCloneObject.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_initCloneObject.js new file mode 100644 index 00000000..5a13e64a --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_initCloneObject.js @@ -0,0 +1,18 @@ +var baseCreate = require('./_baseCreate'), + getPrototype = require('./_getPrototype'), + isPrototype = require('./_isPrototype'); + +/** + * Initializes an object clone. + * + * @private + * @param {Object} object The object to clone. + * @returns {Object} Returns the initialized clone. + */ +function initCloneObject(object) { + return (typeof object.constructor == 'function' && !isPrototype(object)) + ? baseCreate(getPrototype(object)) + : {}; +} + +module.exports = initCloneObject; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_insertWrapDetails.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_insertWrapDetails.js new file mode 100644 index 00000000..e7908086 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_insertWrapDetails.js @@ -0,0 +1,23 @@ +/** Used to match wrap detail comments. */ +var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/; + +/** + * Inserts wrapper `details` in a comment at the top of the `source` body. + * + * @private + * @param {string} source The source to modify. + * @returns {Array} details The details to insert. + * @returns {string} Returns the modified source. + */ +function insertWrapDetails(source, details) { + var length = details.length; + if (!length) { + return source; + } + var lastIndex = length - 1; + details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex]; + details = details.join(length > 2 ? ', ' : ' '); + return source.replace(reWrapComment, '{\n/* [wrapped with ' + details + '] */\n'); +} + +module.exports = insertWrapDetails; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_isFlattenable.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_isFlattenable.js new file mode 100644 index 00000000..4cc2c249 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_isFlattenable.js @@ -0,0 +1,20 @@ +var Symbol = require('./_Symbol'), + isArguments = require('./isArguments'), + isArray = require('./isArray'); + +/** Built-in value references. */ +var spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined; + +/** + * Checks if `value` is a flattenable `arguments` object or array. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. + */ +function isFlattenable(value) { + return isArray(value) || isArguments(value) || + !!(spreadableSymbol && value && value[spreadableSymbol]); +} + +module.exports = isFlattenable; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_isIndex.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_isIndex.js new file mode 100644 index 00000000..061cd390 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_isIndex.js @@ -0,0 +1,25 @@ +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER = 9007199254740991; + +/** Used to detect unsigned integer values. */ +var reIsUint = /^(?:0|[1-9]\d*)$/; + +/** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ +function isIndex(value, length) { + var type = typeof value; + length = length == null ? MAX_SAFE_INTEGER : length; + + return !!length && + (type == 'number' || + (type != 'symbol' && reIsUint.test(value))) && + (value > -1 && value % 1 == 0 && value < length); +} + +module.exports = isIndex; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_isIterateeCall.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_isIterateeCall.js new file mode 100644 index 00000000..a0bb5a9c --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_isIterateeCall.js @@ -0,0 +1,30 @@ +var eq = require('./eq'), + isArrayLike = require('./isArrayLike'), + isIndex = require('./_isIndex'), + isObject = require('./isObject'); + +/** + * Checks if the given arguments are from an iteratee call. + * + * @private + * @param {*} value The potential iteratee value argument. + * @param {*} index The potential iteratee index or key argument. + * @param {*} object The potential iteratee object argument. + * @returns {boolean} Returns `true` if the arguments are from an iteratee call, + * else `false`. + */ +function isIterateeCall(value, index, object) { + if (!isObject(object)) { + return false; + } + var type = typeof index; + if (type == 'number' + ? (isArrayLike(object) && isIndex(index, object.length)) + : (type == 'string' && index in object) + ) { + return eq(object[index], value); + } + return false; +} + +module.exports = isIterateeCall; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_isKey.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_isKey.js new file mode 100644 index 00000000..ff08b068 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_isKey.js @@ -0,0 +1,29 @@ +var isArray = require('./isArray'), + isSymbol = require('./isSymbol'); + +/** Used to match property names within property paths. */ +var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/; + +/** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ +function isKey(value, object) { + if (isArray(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || isSymbol(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); +} + +module.exports = isKey; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_isKeyable.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_isKeyable.js new file mode 100644 index 00000000..39f1828d --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_isKeyable.js @@ -0,0 +1,15 @@ +/** + * Checks if `value` is suitable for use as unique object key. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is suitable, else `false`. + */ +function isKeyable(value) { + var type = typeof value; + return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') + ? (value !== '__proto__') + : (value === null); +} + +module.exports = isKeyable; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_isLaziable.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_isLaziable.js new file mode 100644 index 00000000..a57c4f2d --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_isLaziable.js @@ -0,0 +1,28 @@ +var LazyWrapper = require('./_LazyWrapper'), + getData = require('./_getData'), + getFuncName = require('./_getFuncName'), + lodash = require('./wrapperLodash'); + +/** + * Checks if `func` has a lazy counterpart. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` has a lazy counterpart, + * else `false`. + */ +function isLaziable(func) { + var funcName = getFuncName(func), + other = lodash[funcName]; + + if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) { + return false; + } + if (func === other) { + return true; + } + var data = getData(other); + return !!data && func === data[0]; +} + +module.exports = isLaziable; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_isMaskable.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_isMaskable.js new file mode 100644 index 00000000..eb98d09f --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_isMaskable.js @@ -0,0 +1,14 @@ +var coreJsData = require('./_coreJsData'), + isFunction = require('./isFunction'), + stubFalse = require('./stubFalse'); + +/** + * Checks if `func` is capable of being masked. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `func` is maskable, else `false`. + */ +var isMaskable = coreJsData ? isFunction : stubFalse; + +module.exports = isMaskable; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_isMasked.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_isMasked.js new file mode 100644 index 00000000..4b0f21ba --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_isMasked.js @@ -0,0 +1,20 @@ +var coreJsData = require('./_coreJsData'); + +/** Used to detect methods masquerading as native. */ +var maskSrcKey = (function() { + var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); + return uid ? ('Symbol(src)_1.' + uid) : ''; +}()); + +/** + * Checks if `func` has its source masked. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. + */ +function isMasked(func) { + return !!maskSrcKey && (maskSrcKey in func); +} + +module.exports = isMasked; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_isPrototype.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_isPrototype.js new file mode 100644 index 00000000..0f29498d --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_isPrototype.js @@ -0,0 +1,18 @@ +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** + * Checks if `value` is likely a prototype object. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. + */ +function isPrototype(value) { + var Ctor = value && value.constructor, + proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; + + return value === proto; +} + +module.exports = isPrototype; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_isStrictComparable.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_isStrictComparable.js new file mode 100644 index 00000000..b59f40b8 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_isStrictComparable.js @@ -0,0 +1,15 @@ +var isObject = require('./isObject'); + +/** + * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` if suitable for strict + * equality comparisons, else `false`. + */ +function isStrictComparable(value) { + return value === value && !isObject(value); +} + +module.exports = isStrictComparable; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_iteratorToArray.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_iteratorToArray.js new file mode 100644 index 00000000..47685664 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_iteratorToArray.js @@ -0,0 +1,18 @@ +/** + * Converts `iterator` to an array. + * + * @private + * @param {Object} iterator The iterator to convert. + * @returns {Array} Returns the converted array. + */ +function iteratorToArray(iterator) { + var data, + result = []; + + while (!(data = iterator.next()).done) { + result.push(data.value); + } + return result; +} + +module.exports = iteratorToArray; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_lazyClone.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_lazyClone.js new file mode 100644 index 00000000..d8a51f87 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_lazyClone.js @@ -0,0 +1,23 @@ +var LazyWrapper = require('./_LazyWrapper'), + copyArray = require('./_copyArray'); + +/** + * Creates a clone of the lazy wrapper object. + * + * @private + * @name clone + * @memberOf LazyWrapper + * @returns {Object} Returns the cloned `LazyWrapper` object. + */ +function lazyClone() { + var result = new LazyWrapper(this.__wrapped__); + result.__actions__ = copyArray(this.__actions__); + result.__dir__ = this.__dir__; + result.__filtered__ = this.__filtered__; + result.__iteratees__ = copyArray(this.__iteratees__); + result.__takeCount__ = this.__takeCount__; + result.__views__ = copyArray(this.__views__); + return result; +} + +module.exports = lazyClone; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_lazyReverse.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_lazyReverse.js new file mode 100644 index 00000000..c5b52190 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_lazyReverse.js @@ -0,0 +1,23 @@ +var LazyWrapper = require('./_LazyWrapper'); + +/** + * Reverses the direction of lazy iteration. + * + * @private + * @name reverse + * @memberOf LazyWrapper + * @returns {Object} Returns the new reversed `LazyWrapper` object. + */ +function lazyReverse() { + if (this.__filtered__) { + var result = new LazyWrapper(this); + result.__dir__ = -1; + result.__filtered__ = true; + } else { + result = this.clone(); + result.__dir__ *= -1; + } + return result; +} + +module.exports = lazyReverse; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_lazyValue.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_lazyValue.js new file mode 100644 index 00000000..371ca8d2 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_lazyValue.js @@ -0,0 +1,69 @@ +var baseWrapperValue = require('./_baseWrapperValue'), + getView = require('./_getView'), + isArray = require('./isArray'); + +/** Used to indicate the type of lazy iteratees. */ +var LAZY_FILTER_FLAG = 1, + LAZY_MAP_FLAG = 2; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMin = Math.min; + +/** + * Extracts the unwrapped value from its lazy wrapper. + * + * @private + * @name value + * @memberOf LazyWrapper + * @returns {*} Returns the unwrapped value. + */ +function lazyValue() { + var array = this.__wrapped__.value(), + dir = this.__dir__, + isArr = isArray(array), + isRight = dir < 0, + arrLength = isArr ? array.length : 0, + view = getView(0, arrLength, this.__views__), + start = view.start, + end = view.end, + length = end - start, + index = isRight ? end : (start - 1), + iteratees = this.__iteratees__, + iterLength = iteratees.length, + resIndex = 0, + takeCount = nativeMin(length, this.__takeCount__); + + if (!isArr || (!isRight && arrLength == length && takeCount == length)) { + return baseWrapperValue(array, this.__actions__); + } + var result = []; + + outer: + while (length-- && resIndex < takeCount) { + index += dir; + + var iterIndex = -1, + value = array[index]; + + while (++iterIndex < iterLength) { + var data = iteratees[iterIndex], + iteratee = data.iteratee, + type = data.type, + computed = iteratee(value); + + if (type == LAZY_MAP_FLAG) { + value = computed; + } else if (!computed) { + if (type == LAZY_FILTER_FLAG) { + continue outer; + } else { + break outer; + } + } + } + result[resIndex++] = value; + } + return result; +} + +module.exports = lazyValue; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_listCacheClear.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_listCacheClear.js new file mode 100644 index 00000000..acbe39a5 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_listCacheClear.js @@ -0,0 +1,13 @@ +/** + * Removes all key-value entries from the list cache. + * + * @private + * @name clear + * @memberOf ListCache + */ +function listCacheClear() { + this.__data__ = []; + this.size = 0; +} + +module.exports = listCacheClear; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_listCacheDelete.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_listCacheDelete.js new file mode 100644 index 00000000..b1384ade --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_listCacheDelete.js @@ -0,0 +1,35 @@ +var assocIndexOf = require('./_assocIndexOf'); + +/** Used for built-in method references. */ +var arrayProto = Array.prototype; + +/** Built-in value references. */ +var splice = arrayProto.splice; + +/** + * Removes `key` and its value from the list cache. + * + * @private + * @name delete + * @memberOf ListCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function listCacheDelete(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + return false; + } + var lastIndex = data.length - 1; + if (index == lastIndex) { + data.pop(); + } else { + splice.call(data, index, 1); + } + --this.size; + return true; +} + +module.exports = listCacheDelete; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_listCacheGet.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_listCacheGet.js new file mode 100644 index 00000000..f8192fc3 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_listCacheGet.js @@ -0,0 +1,19 @@ +var assocIndexOf = require('./_assocIndexOf'); + +/** + * Gets the list cache value for `key`. + * + * @private + * @name get + * @memberOf ListCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function listCacheGet(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + return index < 0 ? undefined : data[index][1]; +} + +module.exports = listCacheGet; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_listCacheHas.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_listCacheHas.js new file mode 100644 index 00000000..2adf6714 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_listCacheHas.js @@ -0,0 +1,16 @@ +var assocIndexOf = require('./_assocIndexOf'); + +/** + * Checks if a list cache value for `key` exists. + * + * @private + * @name has + * @memberOf ListCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function listCacheHas(key) { + return assocIndexOf(this.__data__, key) > -1; +} + +module.exports = listCacheHas; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_listCacheSet.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_listCacheSet.js new file mode 100644 index 00000000..5855c95e --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_listCacheSet.js @@ -0,0 +1,26 @@ +var assocIndexOf = require('./_assocIndexOf'); + +/** + * Sets the list cache `key` to `value`. + * + * @private + * @name set + * @memberOf ListCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the list cache instance. + */ +function listCacheSet(key, value) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + ++this.size; + data.push([key, value]); + } else { + data[index][1] = value; + } + return this; +} + +module.exports = listCacheSet; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_mapCacheClear.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_mapCacheClear.js new file mode 100644 index 00000000..bc9ca204 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_mapCacheClear.js @@ -0,0 +1,21 @@ +var Hash = require('./_Hash'), + ListCache = require('./_ListCache'), + Map = require('./_Map'); + +/** + * Removes all key-value entries from the map. + * + * @private + * @name clear + * @memberOf MapCache + */ +function mapCacheClear() { + this.size = 0; + this.__data__ = { + 'hash': new Hash, + 'map': new (Map || ListCache), + 'string': new Hash + }; +} + +module.exports = mapCacheClear; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_mapCacheDelete.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_mapCacheDelete.js new file mode 100644 index 00000000..946ca3c9 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_mapCacheDelete.js @@ -0,0 +1,18 @@ +var getMapData = require('./_getMapData'); + +/** + * Removes `key` and its value from the map. + * + * @private + * @name delete + * @memberOf MapCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function mapCacheDelete(key) { + var result = getMapData(this, key)['delete'](key); + this.size -= result ? 1 : 0; + return result; +} + +module.exports = mapCacheDelete; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_mapCacheGet.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_mapCacheGet.js new file mode 100644 index 00000000..f29f55cf --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_mapCacheGet.js @@ -0,0 +1,16 @@ +var getMapData = require('./_getMapData'); + +/** + * Gets the map value for `key`. + * + * @private + * @name get + * @memberOf MapCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function mapCacheGet(key) { + return getMapData(this, key).get(key); +} + +module.exports = mapCacheGet; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_mapCacheHas.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_mapCacheHas.js new file mode 100644 index 00000000..a1214c02 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_mapCacheHas.js @@ -0,0 +1,16 @@ +var getMapData = require('./_getMapData'); + +/** + * Checks if a map value for `key` exists. + * + * @private + * @name has + * @memberOf MapCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function mapCacheHas(key) { + return getMapData(this, key).has(key); +} + +module.exports = mapCacheHas; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_mapCacheSet.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_mapCacheSet.js new file mode 100644 index 00000000..73468492 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_mapCacheSet.js @@ -0,0 +1,22 @@ +var getMapData = require('./_getMapData'); + +/** + * Sets the map `key` to `value`. + * + * @private + * @name set + * @memberOf MapCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the map cache instance. + */ +function mapCacheSet(key, value) { + var data = getMapData(this, key), + size = data.size; + + data.set(key, value); + this.size += data.size == size ? 0 : 1; + return this; +} + +module.exports = mapCacheSet; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_mapToArray.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_mapToArray.js new file mode 100644 index 00000000..fe3dd531 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_mapToArray.js @@ -0,0 +1,18 @@ +/** + * Converts `map` to its key-value pairs. + * + * @private + * @param {Object} map The map to convert. + * @returns {Array} Returns the key-value pairs. + */ +function mapToArray(map) { + var index = -1, + result = Array(map.size); + + map.forEach(function(value, key) { + result[++index] = [key, value]; + }); + return result; +} + +module.exports = mapToArray; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_matchesStrictComparable.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_matchesStrictComparable.js new file mode 100644 index 00000000..f608af9e --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_matchesStrictComparable.js @@ -0,0 +1,20 @@ +/** + * A specialized version of `matchesProperty` for source values suitable + * for strict equality comparisons, i.e. `===`. + * + * @private + * @param {string} key The key of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function matchesStrictComparable(key, srcValue) { + return function(object) { + if (object == null) { + return false; + } + return object[key] === srcValue && + (srcValue !== undefined || (key in Object(object))); + }; +} + +module.exports = matchesStrictComparable; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_memoizeCapped.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_memoizeCapped.js new file mode 100644 index 00000000..7f71c8fb --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_memoizeCapped.js @@ -0,0 +1,26 @@ +var memoize = require('./memoize'); + +/** Used as the maximum memoize cache size. */ +var MAX_MEMOIZE_SIZE = 500; + +/** + * A specialized version of `_.memoize` which clears the memoized function's + * cache when it exceeds `MAX_MEMOIZE_SIZE`. + * + * @private + * @param {Function} func The function to have its output memoized. + * @returns {Function} Returns the new memoized function. + */ +function memoizeCapped(func) { + var result = memoize(func, function(key) { + if (cache.size === MAX_MEMOIZE_SIZE) { + cache.clear(); + } + return key; + }); + + var cache = result.cache; + return result; +} + +module.exports = memoizeCapped; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_mergeData.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_mergeData.js new file mode 100644 index 00000000..cb570f97 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_mergeData.js @@ -0,0 +1,90 @@ +var composeArgs = require('./_composeArgs'), + composeArgsRight = require('./_composeArgsRight'), + replaceHolders = require('./_replaceHolders'); + +/** Used as the internal argument placeholder. */ +var PLACEHOLDER = '__lodash_placeholder__'; + +/** Used to compose bitmasks for function metadata. */ +var WRAP_BIND_FLAG = 1, + WRAP_BIND_KEY_FLAG = 2, + WRAP_CURRY_BOUND_FLAG = 4, + WRAP_CURRY_FLAG = 8, + WRAP_ARY_FLAG = 128, + WRAP_REARG_FLAG = 256; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMin = Math.min; + +/** + * Merges the function metadata of `source` into `data`. + * + * Merging metadata reduces the number of wrappers used to invoke a function. + * This is possible because methods like `_.bind`, `_.curry`, and `_.partial` + * may be applied regardless of execution order. Methods like `_.ary` and + * `_.rearg` modify function arguments, making the order in which they are + * executed important, preventing the merging of metadata. However, we make + * an exception for a safe combined case where curried functions have `_.ary` + * and or `_.rearg` applied. + * + * @private + * @param {Array} data The destination metadata. + * @param {Array} source The source metadata. + * @returns {Array} Returns `data`. + */ +function mergeData(data, source) { + var bitmask = data[1], + srcBitmask = source[1], + newBitmask = bitmask | srcBitmask, + isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG); + + var isCombo = + ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) || + ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) || + ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG)); + + // Exit early if metadata can't be merged. + if (!(isCommon || isCombo)) { + return data; + } + // Use source `thisArg` if available. + if (srcBitmask & WRAP_BIND_FLAG) { + data[2] = source[2]; + // Set when currying a bound function. + newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG; + } + // Compose partial arguments. + var value = source[3]; + if (value) { + var partials = data[3]; + data[3] = partials ? composeArgs(partials, value, source[4]) : value; + data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4]; + } + // Compose partial right arguments. + value = source[5]; + if (value) { + partials = data[5]; + data[5] = partials ? composeArgsRight(partials, value, source[6]) : value; + data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6]; + } + // Use source `argPos` if available. + value = source[7]; + if (value) { + data[7] = value; + } + // Use source `ary` if it's smaller. + if (srcBitmask & WRAP_ARY_FLAG) { + data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]); + } + // Use source `arity` if one is not provided. + if (data[9] == null) { + data[9] = source[9]; + } + // Use source `func` and merge bitmasks. + data[0] = source[0]; + data[1] = newBitmask; + + return data; +} + +module.exports = mergeData; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_metaMap.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_metaMap.js new file mode 100644 index 00000000..0157a0b0 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_metaMap.js @@ -0,0 +1,6 @@ +var WeakMap = require('./_WeakMap'); + +/** Used to store function metadata. */ +var metaMap = WeakMap && new WeakMap; + +module.exports = metaMap; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_nativeCreate.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_nativeCreate.js new file mode 100644 index 00000000..c7aede85 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_nativeCreate.js @@ -0,0 +1,6 @@ +var getNative = require('./_getNative'); + +/* Built-in method references that are verified to be native. */ +var nativeCreate = getNative(Object, 'create'); + +module.exports = nativeCreate; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_nativeKeys.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_nativeKeys.js new file mode 100644 index 00000000..479a104a --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_nativeKeys.js @@ -0,0 +1,6 @@ +var overArg = require('./_overArg'); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeKeys = overArg(Object.keys, Object); + +module.exports = nativeKeys; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_nativeKeysIn.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_nativeKeysIn.js new file mode 100644 index 00000000..00ee5059 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_nativeKeysIn.js @@ -0,0 +1,20 @@ +/** + * This function is like + * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * except that it includes inherited enumerable properties. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function nativeKeysIn(object) { + var result = []; + if (object != null) { + for (var key in Object(object)) { + result.push(key); + } + } + return result; +} + +module.exports = nativeKeysIn; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_nodeUtil.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_nodeUtil.js new file mode 100644 index 00000000..983d78f7 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_nodeUtil.js @@ -0,0 +1,30 @@ +var freeGlobal = require('./_freeGlobal'); + +/** Detect free variable `exports`. */ +var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + +/** Detect free variable `module`. */ +var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + +/** Detect the popular CommonJS extension `module.exports`. */ +var moduleExports = freeModule && freeModule.exports === freeExports; + +/** Detect free variable `process` from Node.js. */ +var freeProcess = moduleExports && freeGlobal.process; + +/** Used to access faster Node.js helpers. */ +var nodeUtil = (function() { + try { + // Use `util.types` for Node.js 10+. + var types = freeModule && freeModule.require && freeModule.require('util').types; + + if (types) { + return types; + } + + // Legacy `process.binding('util')` for Node.js < 10. + return freeProcess && freeProcess.binding && freeProcess.binding('util'); + } catch (e) {} +}()); + +module.exports = nodeUtil; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_objectToString.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_objectToString.js new file mode 100644 index 00000000..c614ec09 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_objectToString.js @@ -0,0 +1,22 @@ +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var nativeObjectToString = objectProto.toString; + +/** + * Converts `value` to a string using `Object.prototype.toString`. + * + * @private + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + */ +function objectToString(value) { + return nativeObjectToString.call(value); +} + +module.exports = objectToString; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_overArg.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_overArg.js new file mode 100644 index 00000000..651c5c55 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_overArg.js @@ -0,0 +1,15 @@ +/** + * Creates a unary function that invokes `func` with its argument transformed. + * + * @private + * @param {Function} func The function to wrap. + * @param {Function} transform The argument transform. + * @returns {Function} Returns the new function. + */ +function overArg(func, transform) { + return function(arg) { + return func(transform(arg)); + }; +} + +module.exports = overArg; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_overRest.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_overRest.js new file mode 100644 index 00000000..c7cdef33 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_overRest.js @@ -0,0 +1,36 @@ +var apply = require('./_apply'); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * A specialized version of `baseRest` which transforms the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @param {Function} transform The rest array transform. + * @returns {Function} Returns the new function. + */ +function overRest(func, start, transform) { + start = nativeMax(start === undefined ? (func.length - 1) : start, 0); + return function() { + var args = arguments, + index = -1, + length = nativeMax(args.length - start, 0), + array = Array(length); + + while (++index < length) { + array[index] = args[start + index]; + } + index = -1; + var otherArgs = Array(start + 1); + while (++index < start) { + otherArgs[index] = args[index]; + } + otherArgs[start] = transform(array); + return apply(func, this, otherArgs); + }; +} + +module.exports = overRest; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_parent.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_parent.js new file mode 100644 index 00000000..f174328f --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_parent.js @@ -0,0 +1,16 @@ +var baseGet = require('./_baseGet'), + baseSlice = require('./_baseSlice'); + +/** + * Gets the parent value at `path` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} path The path to get the parent value of. + * @returns {*} Returns the parent value. + */ +function parent(object, path) { + return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1)); +} + +module.exports = parent; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_reEscape.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_reEscape.js new file mode 100644 index 00000000..7f47eda6 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_reEscape.js @@ -0,0 +1,4 @@ +/** Used to match template delimiters. */ +var reEscape = /<%-([\s\S]+?)%>/g; + +module.exports = reEscape; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_reEvaluate.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_reEvaluate.js new file mode 100644 index 00000000..6adfc312 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_reEvaluate.js @@ -0,0 +1,4 @@ +/** Used to match template delimiters. */ +var reEvaluate = /<%([\s\S]+?)%>/g; + +module.exports = reEvaluate; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_reInterpolate.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_reInterpolate.js new file mode 100644 index 00000000..d02ff0b2 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_reInterpolate.js @@ -0,0 +1,4 @@ +/** Used to match template delimiters. */ +var reInterpolate = /<%=([\s\S]+?)%>/g; + +module.exports = reInterpolate; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_realNames.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_realNames.js new file mode 100644 index 00000000..aa0d5292 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_realNames.js @@ -0,0 +1,4 @@ +/** Used to lookup unminified function names. */ +var realNames = {}; + +module.exports = realNames; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_reorder.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_reorder.js new file mode 100644 index 00000000..a3502b05 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_reorder.js @@ -0,0 +1,29 @@ +var copyArray = require('./_copyArray'), + isIndex = require('./_isIndex'); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMin = Math.min; + +/** + * Reorder `array` according to the specified indexes where the element at + * the first index is assigned as the first element, the element at + * the second index is assigned as the second element, and so on. + * + * @private + * @param {Array} array The array to reorder. + * @param {Array} indexes The arranged array indexes. + * @returns {Array} Returns `array`. + */ +function reorder(array, indexes) { + var arrLength = array.length, + length = nativeMin(indexes.length, arrLength), + oldArray = copyArray(array); + + while (length--) { + var index = indexes[length]; + array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined; + } + return array; +} + +module.exports = reorder; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_replaceHolders.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_replaceHolders.js new file mode 100644 index 00000000..74360ec4 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_replaceHolders.js @@ -0,0 +1,29 @@ +/** Used as the internal argument placeholder. */ +var PLACEHOLDER = '__lodash_placeholder__'; + +/** + * Replaces all `placeholder` elements in `array` with an internal placeholder + * and returns an array of their indexes. + * + * @private + * @param {Array} array The array to modify. + * @param {*} placeholder The placeholder to replace. + * @returns {Array} Returns the new array of placeholder indexes. + */ +function replaceHolders(array, placeholder) { + var index = -1, + length = array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (value === placeholder || value === PLACEHOLDER) { + array[index] = PLACEHOLDER; + result[resIndex++] = index; + } + } + return result; +} + +module.exports = replaceHolders; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_root.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_root.js new file mode 100644 index 00000000..d2852bed --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_root.js @@ -0,0 +1,9 @@ +var freeGlobal = require('./_freeGlobal'); + +/** Detect free variable `self`. */ +var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + +/** Used as a reference to the global object. */ +var root = freeGlobal || freeSelf || Function('return this')(); + +module.exports = root; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_safeGet.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_safeGet.js new file mode 100644 index 00000000..b070897d --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_safeGet.js @@ -0,0 +1,21 @@ +/** + * Gets the value at `key`, unless `key` is "__proto__" or "constructor". + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ +function safeGet(object, key) { + if (key === 'constructor' && typeof object[key] === 'function') { + return; + } + + if (key == '__proto__') { + return; + } + + return object[key]; +} + +module.exports = safeGet; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_setCacheAdd.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_setCacheAdd.js new file mode 100644 index 00000000..1081a744 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_setCacheAdd.js @@ -0,0 +1,19 @@ +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** + * Adds `value` to the array cache. + * + * @private + * @name add + * @memberOf SetCache + * @alias push + * @param {*} value The value to cache. + * @returns {Object} Returns the cache instance. + */ +function setCacheAdd(value) { + this.__data__.set(value, HASH_UNDEFINED); + return this; +} + +module.exports = setCacheAdd; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_setCacheHas.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_setCacheHas.js new file mode 100644 index 00000000..9a492556 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_setCacheHas.js @@ -0,0 +1,14 @@ +/** + * Checks if `value` is in the array cache. + * + * @private + * @name has + * @memberOf SetCache + * @param {*} value The value to search for. + * @returns {number} Returns `true` if `value` is found, else `false`. + */ +function setCacheHas(value) { + return this.__data__.has(value); +} + +module.exports = setCacheHas; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_setData.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_setData.js new file mode 100644 index 00000000..e5cf3eb9 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_setData.js @@ -0,0 +1,20 @@ +var baseSetData = require('./_baseSetData'), + shortOut = require('./_shortOut'); + +/** + * Sets metadata for `func`. + * + * **Note:** If this function becomes hot, i.e. is invoked a lot in a short + * period of time, it will trip its breaker and transition to an identity + * function to avoid garbage collection pauses in V8. See + * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070) + * for more details. + * + * @private + * @param {Function} func The function to associate metadata with. + * @param {*} data The metadata. + * @returns {Function} Returns `func`. + */ +var setData = shortOut(baseSetData); + +module.exports = setData; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_setToArray.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_setToArray.js new file mode 100644 index 00000000..b87f0741 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_setToArray.js @@ -0,0 +1,18 @@ +/** + * Converts `set` to an array of its values. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the values. + */ +function setToArray(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = value; + }); + return result; +} + +module.exports = setToArray; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_setToPairs.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_setToPairs.js new file mode 100644 index 00000000..36ad37a0 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_setToPairs.js @@ -0,0 +1,18 @@ +/** + * Converts `set` to its value-value pairs. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the value-value pairs. + */ +function setToPairs(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = [value, value]; + }); + return result; +} + +module.exports = setToPairs; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_setToString.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_setToString.js new file mode 100644 index 00000000..6ca84196 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_setToString.js @@ -0,0 +1,14 @@ +var baseSetToString = require('./_baseSetToString'), + shortOut = require('./_shortOut'); + +/** + * Sets the `toString` method of `func` to return `string`. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ +var setToString = shortOut(baseSetToString); + +module.exports = setToString; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_setWrapToString.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_setWrapToString.js new file mode 100644 index 00000000..decdc449 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_setWrapToString.js @@ -0,0 +1,21 @@ +var getWrapDetails = require('./_getWrapDetails'), + insertWrapDetails = require('./_insertWrapDetails'), + setToString = require('./_setToString'), + updateWrapDetails = require('./_updateWrapDetails'); + +/** + * Sets the `toString` method of `wrapper` to mimic the source of `reference` + * with wrapper details in a comment at the top of the source body. + * + * @private + * @param {Function} wrapper The function to modify. + * @param {Function} reference The reference function. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @returns {Function} Returns `wrapper`. + */ +function setWrapToString(wrapper, reference, bitmask) { + var source = (reference + ''); + return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask))); +} + +module.exports = setWrapToString; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_shortOut.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_shortOut.js new file mode 100644 index 00000000..3300a079 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_shortOut.js @@ -0,0 +1,37 @@ +/** Used to detect hot functions by number of calls within a span of milliseconds. */ +var HOT_COUNT = 800, + HOT_SPAN = 16; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeNow = Date.now; + +/** + * Creates a function that'll short out and invoke `identity` instead + * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` + * milliseconds. + * + * @private + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new shortable function. + */ +function shortOut(func) { + var count = 0, + lastCalled = 0; + + return function() { + var stamp = nativeNow(), + remaining = HOT_SPAN - (stamp - lastCalled); + + lastCalled = stamp; + if (remaining > 0) { + if (++count >= HOT_COUNT) { + return arguments[0]; + } + } else { + count = 0; + } + return func.apply(undefined, arguments); + }; +} + +module.exports = shortOut; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_shuffleSelf.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_shuffleSelf.js new file mode 100644 index 00000000..8bcc4f5c --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_shuffleSelf.js @@ -0,0 +1,28 @@ +var baseRandom = require('./_baseRandom'); + +/** + * A specialized version of `_.shuffle` which mutates and sets the size of `array`. + * + * @private + * @param {Array} array The array to shuffle. + * @param {number} [size=array.length] The size of `array`. + * @returns {Array} Returns `array`. + */ +function shuffleSelf(array, size) { + var index = -1, + length = array.length, + lastIndex = length - 1; + + size = size === undefined ? length : size; + while (++index < size) { + var rand = baseRandom(index, lastIndex), + value = array[rand]; + + array[rand] = array[index]; + array[index] = value; + } + array.length = size; + return array; +} + +module.exports = shuffleSelf; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_stackClear.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_stackClear.js new file mode 100644 index 00000000..ce8e5a92 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_stackClear.js @@ -0,0 +1,15 @@ +var ListCache = require('./_ListCache'); + +/** + * Removes all key-value entries from the stack. + * + * @private + * @name clear + * @memberOf Stack + */ +function stackClear() { + this.__data__ = new ListCache; + this.size = 0; +} + +module.exports = stackClear; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_stackDelete.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_stackDelete.js new file mode 100644 index 00000000..ff9887ab --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_stackDelete.js @@ -0,0 +1,18 @@ +/** + * Removes `key` and its value from the stack. + * + * @private + * @name delete + * @memberOf Stack + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function stackDelete(key) { + var data = this.__data__, + result = data['delete'](key); + + this.size = data.size; + return result; +} + +module.exports = stackDelete; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_stackGet.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_stackGet.js new file mode 100644 index 00000000..1cdf0040 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_stackGet.js @@ -0,0 +1,14 @@ +/** + * Gets the stack value for `key`. + * + * @private + * @name get + * @memberOf Stack + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function stackGet(key) { + return this.__data__.get(key); +} + +module.exports = stackGet; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_stackHas.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_stackHas.js new file mode 100644 index 00000000..16a3ad11 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_stackHas.js @@ -0,0 +1,14 @@ +/** + * Checks if a stack value for `key` exists. + * + * @private + * @name has + * @memberOf Stack + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function stackHas(key) { + return this.__data__.has(key); +} + +module.exports = stackHas; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_stackSet.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_stackSet.js new file mode 100644 index 00000000..b790ac5f --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_stackSet.js @@ -0,0 +1,34 @@ +var ListCache = require('./_ListCache'), + Map = require('./_Map'), + MapCache = require('./_MapCache'); + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** + * Sets the stack `key` to `value`. + * + * @private + * @name set + * @memberOf Stack + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the stack cache instance. + */ +function stackSet(key, value) { + var data = this.__data__; + if (data instanceof ListCache) { + var pairs = data.__data__; + if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) { + pairs.push([key, value]); + this.size = ++data.size; + return this; + } + data = this.__data__ = new MapCache(pairs); + } + data.set(key, value); + this.size = data.size; + return this; +} + +module.exports = stackSet; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_strictIndexOf.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_strictIndexOf.js new file mode 100644 index 00000000..0486a495 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_strictIndexOf.js @@ -0,0 +1,23 @@ +/** + * A specialized version of `_.indexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function strictIndexOf(array, value, fromIndex) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (array[index] === value) { + return index; + } + } + return -1; +} + +module.exports = strictIndexOf; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_strictLastIndexOf.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_strictLastIndexOf.js new file mode 100644 index 00000000..d7310dcc --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_strictLastIndexOf.js @@ -0,0 +1,21 @@ +/** + * A specialized version of `_.lastIndexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function strictLastIndexOf(array, value, fromIndex) { + var index = fromIndex + 1; + while (index--) { + if (array[index] === value) { + return index; + } + } + return index; +} + +module.exports = strictLastIndexOf; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_stringSize.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_stringSize.js new file mode 100644 index 00000000..17ef462a --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_stringSize.js @@ -0,0 +1,18 @@ +var asciiSize = require('./_asciiSize'), + hasUnicode = require('./_hasUnicode'), + unicodeSize = require('./_unicodeSize'); + +/** + * Gets the number of symbols in `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the string size. + */ +function stringSize(string) { + return hasUnicode(string) + ? unicodeSize(string) + : asciiSize(string); +} + +module.exports = stringSize; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_stringToArray.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_stringToArray.js new file mode 100644 index 00000000..d161158c --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_stringToArray.js @@ -0,0 +1,18 @@ +var asciiToArray = require('./_asciiToArray'), + hasUnicode = require('./_hasUnicode'), + unicodeToArray = require('./_unicodeToArray'); + +/** + * Converts `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ +function stringToArray(string) { + return hasUnicode(string) + ? unicodeToArray(string) + : asciiToArray(string); +} + +module.exports = stringToArray; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_stringToPath.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_stringToPath.js new file mode 100644 index 00000000..8f39f8a2 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_stringToPath.js @@ -0,0 +1,27 @@ +var memoizeCapped = require('./_memoizeCapped'); + +/** Used to match property names within property paths. */ +var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + +/** Used to match backslashes in property paths. */ +var reEscapeChar = /\\(\\)?/g; + +/** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ +var stringToPath = memoizeCapped(function(string) { + var result = []; + if (string.charCodeAt(0) === 46 /* . */) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, subString) { + result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; +}); + +module.exports = stringToPath; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_toKey.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_toKey.js new file mode 100644 index 00000000..c6d645c4 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_toKey.js @@ -0,0 +1,21 @@ +var isSymbol = require('./isSymbol'); + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ +function toKey(value) { + if (typeof value == 'string' || isSymbol(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +module.exports = toKey; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_toSource.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_toSource.js new file mode 100644 index 00000000..a020b386 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_toSource.js @@ -0,0 +1,26 @@ +/** Used for built-in method references. */ +var funcProto = Function.prototype; + +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; + +/** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to convert. + * @returns {string} Returns the source code. + */ +function toSource(func) { + if (func != null) { + try { + return funcToString.call(func); + } catch (e) {} + try { + return (func + ''); + } catch (e) {} + } + return ''; +} + +module.exports = toSource; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_unescapeHtmlChar.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_unescapeHtmlChar.js new file mode 100644 index 00000000..a71fecb3 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_unescapeHtmlChar.js @@ -0,0 +1,21 @@ +var basePropertyOf = require('./_basePropertyOf'); + +/** Used to map HTML entities to characters. */ +var htmlUnescapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + ''': "'" +}; + +/** + * Used by `_.unescape` to convert HTML entities to characters. + * + * @private + * @param {string} chr The matched character to unescape. + * @returns {string} Returns the unescaped character. + */ +var unescapeHtmlChar = basePropertyOf(htmlUnescapes); + +module.exports = unescapeHtmlChar; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_unicodeSize.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_unicodeSize.js new file mode 100644 index 00000000..68137ec2 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_unicodeSize.js @@ -0,0 +1,44 @@ +/** Used to compose unicode character classes. */ +var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, + rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsAstral = '[' + rsAstralRange + ']', + rsCombo = '[' + rsComboRange + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + rsAstralRange + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + rsZWJ = '\\u200d'; + +/** Used to compose unicode regexes. */ +var reOptMod = rsModifier + '?', + rsOptVar = '[' + rsVarRange + ']?', + rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; + +/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ +var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); + +/** + * Gets the size of a Unicode `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ +function unicodeSize(string) { + var result = reUnicode.lastIndex = 0; + while (reUnicode.test(string)) { + ++result; + } + return result; +} + +module.exports = unicodeSize; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_unicodeToArray.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_unicodeToArray.js new file mode 100644 index 00000000..2a725c06 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_unicodeToArray.js @@ -0,0 +1,40 @@ +/** Used to compose unicode character classes. */ +var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, + rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsAstral = '[' + rsAstralRange + ']', + rsCombo = '[' + rsComboRange + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + rsAstralRange + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + rsZWJ = '\\u200d'; + +/** Used to compose unicode regexes. */ +var reOptMod = rsModifier + '?', + rsOptVar = '[' + rsVarRange + ']?', + rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; + +/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ +var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); + +/** + * Converts a Unicode `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ +function unicodeToArray(string) { + return string.match(reUnicode) || []; +} + +module.exports = unicodeToArray; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_unicodeWords.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_unicodeWords.js new file mode 100644 index 00000000..e72e6e0f --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_unicodeWords.js @@ -0,0 +1,69 @@ +/** Used to compose unicode character classes. */ +var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, + rsDingbatRange = '\\u2700-\\u27bf', + rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff', + rsMathOpRange = '\\xac\\xb1\\xd7\\xf7', + rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf', + rsPunctuationRange = '\\u2000-\\u206f', + rsSpaceRange = ' \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000', + rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde', + rsVarRange = '\\ufe0e\\ufe0f', + rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange; + +/** Used to compose unicode capture groups. */ +var rsApos = "['\u2019]", + rsBreak = '[' + rsBreakRange + ']', + rsCombo = '[' + rsComboRange + ']', + rsDigits = '\\d+', + rsDingbat = '[' + rsDingbatRange + ']', + rsLower = '[' + rsLowerRange + ']', + rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + rsAstralRange + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + rsUpper = '[' + rsUpperRange + ']', + rsZWJ = '\\u200d'; + +/** Used to compose unicode regexes. */ +var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')', + rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')', + rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?', + rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?', + reOptMod = rsModifier + '?', + rsOptVar = '[' + rsVarRange + ']?', + rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsOrdLower = '\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])', + rsOrdUpper = '\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq; + +/** Used to match complex or compound words. */ +var reUnicodeWord = RegExp([ + rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')', + rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')', + rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower, + rsUpper + '+' + rsOptContrUpper, + rsOrdUpper, + rsOrdLower, + rsDigits, + rsEmoji +].join('|'), 'g'); + +/** + * Splits a Unicode `string` into an array of its words. + * + * @private + * @param {string} The string to inspect. + * @returns {Array} Returns the words of `string`. + */ +function unicodeWords(string) { + return string.match(reUnicodeWord) || []; +} + +module.exports = unicodeWords; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_updateWrapDetails.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_updateWrapDetails.js new file mode 100644 index 00000000..8759fbdf --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_updateWrapDetails.js @@ -0,0 +1,46 @@ +var arrayEach = require('./_arrayEach'), + arrayIncludes = require('./_arrayIncludes'); + +/** Used to compose bitmasks for function metadata. */ +var WRAP_BIND_FLAG = 1, + WRAP_BIND_KEY_FLAG = 2, + WRAP_CURRY_FLAG = 8, + WRAP_CURRY_RIGHT_FLAG = 16, + WRAP_PARTIAL_FLAG = 32, + WRAP_PARTIAL_RIGHT_FLAG = 64, + WRAP_ARY_FLAG = 128, + WRAP_REARG_FLAG = 256, + WRAP_FLIP_FLAG = 512; + +/** Used to associate wrap methods with their bit flags. */ +var wrapFlags = [ + ['ary', WRAP_ARY_FLAG], + ['bind', WRAP_BIND_FLAG], + ['bindKey', WRAP_BIND_KEY_FLAG], + ['curry', WRAP_CURRY_FLAG], + ['curryRight', WRAP_CURRY_RIGHT_FLAG], + ['flip', WRAP_FLIP_FLAG], + ['partial', WRAP_PARTIAL_FLAG], + ['partialRight', WRAP_PARTIAL_RIGHT_FLAG], + ['rearg', WRAP_REARG_FLAG] +]; + +/** + * Updates wrapper `details` based on `bitmask` flags. + * + * @private + * @returns {Array} details The details to modify. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @returns {Array} Returns `details`. + */ +function updateWrapDetails(details, bitmask) { + arrayEach(wrapFlags, function(pair) { + var value = '_.' + pair[0]; + if ((bitmask & pair[1]) && !arrayIncludes(details, value)) { + details.push(value); + } + }); + return details.sort(); +} + +module.exports = updateWrapDetails; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_wrapperClone.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_wrapperClone.js new file mode 100644 index 00000000..7bb58a2e --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/_wrapperClone.js @@ -0,0 +1,23 @@ +var LazyWrapper = require('./_LazyWrapper'), + LodashWrapper = require('./_LodashWrapper'), + copyArray = require('./_copyArray'); + +/** + * Creates a clone of `wrapper`. + * + * @private + * @param {Object} wrapper The wrapper to clone. + * @returns {Object} Returns the cloned wrapper. + */ +function wrapperClone(wrapper) { + if (wrapper instanceof LazyWrapper) { + return wrapper.clone(); + } + var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__); + result.__actions__ = copyArray(wrapper.__actions__); + result.__index__ = wrapper.__index__; + result.__values__ = wrapper.__values__; + return result; +} + +module.exports = wrapperClone; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/add.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/add.js new file mode 100644 index 00000000..f0695156 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/add.js @@ -0,0 +1,22 @@ +var createMathOperation = require('./_createMathOperation'); + +/** + * Adds two numbers. + * + * @static + * @memberOf _ + * @since 3.4.0 + * @category Math + * @param {number} augend The first number in an addition. + * @param {number} addend The second number in an addition. + * @returns {number} Returns the total. + * @example + * + * _.add(6, 4); + * // => 10 + */ +var add = createMathOperation(function(augend, addend) { + return augend + addend; +}, 0); + +module.exports = add; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/after.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/after.js new file mode 100644 index 00000000..3900c979 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/after.js @@ -0,0 +1,42 @@ +var toInteger = require('./toInteger'); + +/** Error message constants. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** + * The opposite of `_.before`; this method creates a function that invokes + * `func` once it's called `n` or more times. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {number} n The number of calls before `func` is invoked. + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * var saves = ['profile', 'settings']; + * + * var done = _.after(saves.length, function() { + * console.log('done saving!'); + * }); + * + * _.forEach(saves, function(type) { + * asyncSave({ 'type': type, 'complete': done }); + * }); + * // => Logs 'done saving!' after the two async saves have completed. + */ +function after(n, func) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + n = toInteger(n); + return function() { + if (--n < 1) { + return func.apply(this, arguments); + } + }; +} + +module.exports = after; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/array.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/array.js new file mode 100644 index 00000000..af688d3e --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/array.js @@ -0,0 +1,67 @@ +module.exports = { + 'chunk': require('./chunk'), + 'compact': require('./compact'), + 'concat': require('./concat'), + 'difference': require('./difference'), + 'differenceBy': require('./differenceBy'), + 'differenceWith': require('./differenceWith'), + 'drop': require('./drop'), + 'dropRight': require('./dropRight'), + 'dropRightWhile': require('./dropRightWhile'), + 'dropWhile': require('./dropWhile'), + 'fill': require('./fill'), + 'findIndex': require('./findIndex'), + 'findLastIndex': require('./findLastIndex'), + 'first': require('./first'), + 'flatten': require('./flatten'), + 'flattenDeep': require('./flattenDeep'), + 'flattenDepth': require('./flattenDepth'), + 'fromPairs': require('./fromPairs'), + 'head': require('./head'), + 'indexOf': require('./indexOf'), + 'initial': require('./initial'), + 'intersection': require('./intersection'), + 'intersectionBy': require('./intersectionBy'), + 'intersectionWith': require('./intersectionWith'), + 'join': require('./join'), + 'last': require('./last'), + 'lastIndexOf': require('./lastIndexOf'), + 'nth': require('./nth'), + 'pull': require('./pull'), + 'pullAll': require('./pullAll'), + 'pullAllBy': require('./pullAllBy'), + 'pullAllWith': require('./pullAllWith'), + 'pullAt': require('./pullAt'), + 'remove': require('./remove'), + 'reverse': require('./reverse'), + 'slice': require('./slice'), + 'sortedIndex': require('./sortedIndex'), + 'sortedIndexBy': require('./sortedIndexBy'), + 'sortedIndexOf': require('./sortedIndexOf'), + 'sortedLastIndex': require('./sortedLastIndex'), + 'sortedLastIndexBy': require('./sortedLastIndexBy'), + 'sortedLastIndexOf': require('./sortedLastIndexOf'), + 'sortedUniq': require('./sortedUniq'), + 'sortedUniqBy': require('./sortedUniqBy'), + 'tail': require('./tail'), + 'take': require('./take'), + 'takeRight': require('./takeRight'), + 'takeRightWhile': require('./takeRightWhile'), + 'takeWhile': require('./takeWhile'), + 'union': require('./union'), + 'unionBy': require('./unionBy'), + 'unionWith': require('./unionWith'), + 'uniq': require('./uniq'), + 'uniqBy': require('./uniqBy'), + 'uniqWith': require('./uniqWith'), + 'unzip': require('./unzip'), + 'unzipWith': require('./unzipWith'), + 'without': require('./without'), + 'xor': require('./xor'), + 'xorBy': require('./xorBy'), + 'xorWith': require('./xorWith'), + 'zip': require('./zip'), + 'zipObject': require('./zipObject'), + 'zipObjectDeep': require('./zipObjectDeep'), + 'zipWith': require('./zipWith') +}; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/ary.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/ary.js new file mode 100644 index 00000000..70c87d09 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/ary.js @@ -0,0 +1,29 @@ +var createWrap = require('./_createWrap'); + +/** Used to compose bitmasks for function metadata. */ +var WRAP_ARY_FLAG = 128; + +/** + * Creates a function that invokes `func`, with up to `n` arguments, + * ignoring any additional arguments. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {Function} func The function to cap arguments for. + * @param {number} [n=func.length] The arity cap. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Function} Returns the new capped function. + * @example + * + * _.map(['6', '8', '10'], _.ary(parseInt, 1)); + * // => [6, 8, 10] + */ +function ary(func, n, guard) { + n = guard ? undefined : n; + n = (func && n == null) ? func.length : n; + return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n); +} + +module.exports = ary; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/assign.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/assign.js new file mode 100644 index 00000000..909db26a --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/assign.js @@ -0,0 +1,58 @@ +var assignValue = require('./_assignValue'), + copyObject = require('./_copyObject'), + createAssigner = require('./_createAssigner'), + isArrayLike = require('./isArrayLike'), + isPrototype = require('./_isPrototype'), + keys = require('./keys'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Assigns own enumerable string keyed properties of source objects to the + * destination object. Source objects are applied from left to right. + * Subsequent sources overwrite property assignments of previous sources. + * + * **Note:** This method mutates `object` and is loosely based on + * [`Object.assign`](https://mdn.io/Object/assign). + * + * @static + * @memberOf _ + * @since 0.10.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.assignIn + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * function Bar() { + * this.c = 3; + * } + * + * Foo.prototype.b = 2; + * Bar.prototype.d = 4; + * + * _.assign({ 'a': 0 }, new Foo, new Bar); + * // => { 'a': 1, 'c': 3 } + */ +var assign = createAssigner(function(object, source) { + if (isPrototype(source) || isArrayLike(source)) { + copyObject(source, keys(source), object); + return; + } + for (var key in source) { + if (hasOwnProperty.call(source, key)) { + assignValue(object, key, source[key]); + } + } +}); + +module.exports = assign; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/assignIn.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/assignIn.js new file mode 100644 index 00000000..e663473a --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/assignIn.js @@ -0,0 +1,40 @@ +var copyObject = require('./_copyObject'), + createAssigner = require('./_createAssigner'), + keysIn = require('./keysIn'); + +/** + * This method is like `_.assign` except that it iterates over own and + * inherited source properties. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias extend + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.assign + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * function Bar() { + * this.c = 3; + * } + * + * Foo.prototype.b = 2; + * Bar.prototype.d = 4; + * + * _.assignIn({ 'a': 0 }, new Foo, new Bar); + * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 } + */ +var assignIn = createAssigner(function(object, source) { + copyObject(source, keysIn(source), object); +}); + +module.exports = assignIn; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/assignInWith.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/assignInWith.js new file mode 100644 index 00000000..68fcc0b0 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/assignInWith.js @@ -0,0 +1,38 @@ +var copyObject = require('./_copyObject'), + createAssigner = require('./_createAssigner'), + keysIn = require('./keysIn'); + +/** + * This method is like `_.assignIn` except that it accepts `customizer` + * which is invoked to produce the assigned values. If `customizer` returns + * `undefined`, assignment is handled by the method instead. The `customizer` + * is invoked with five arguments: (objValue, srcValue, key, object, source). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias extendWith + * @category Object + * @param {Object} object The destination object. + * @param {...Object} sources The source objects. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @see _.assignWith + * @example + * + * function customizer(objValue, srcValue) { + * return _.isUndefined(objValue) ? srcValue : objValue; + * } + * + * var defaults = _.partialRight(_.assignInWith, customizer); + * + * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ +var assignInWith = createAssigner(function(object, source, srcIndex, customizer) { + copyObject(source, keysIn(source), object, customizer); +}); + +module.exports = assignInWith; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/assignWith.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/assignWith.js new file mode 100644 index 00000000..7dc6c761 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/assignWith.js @@ -0,0 +1,37 @@ +var copyObject = require('./_copyObject'), + createAssigner = require('./_createAssigner'), + keys = require('./keys'); + +/** + * This method is like `_.assign` except that it accepts `customizer` + * which is invoked to produce the assigned values. If `customizer` returns + * `undefined`, assignment is handled by the method instead. The `customizer` + * is invoked with five arguments: (objValue, srcValue, key, object, source). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} sources The source objects. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @see _.assignInWith + * @example + * + * function customizer(objValue, srcValue) { + * return _.isUndefined(objValue) ? srcValue : objValue; + * } + * + * var defaults = _.partialRight(_.assignWith, customizer); + * + * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ +var assignWith = createAssigner(function(object, source, srcIndex, customizer) { + copyObject(source, keys(source), object, customizer); +}); + +module.exports = assignWith; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/at.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/at.js new file mode 100644 index 00000000..781ee9e5 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/at.js @@ -0,0 +1,23 @@ +var baseAt = require('./_baseAt'), + flatRest = require('./_flatRest'); + +/** + * Creates an array of values corresponding to `paths` of `object`. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Array} Returns the picked values. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; + * + * _.at(object, ['a[0].b.c', 'a[1]']); + * // => [3, 4] + */ +var at = flatRest(baseAt); + +module.exports = at; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/attempt.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/attempt.js new file mode 100644 index 00000000..624d0152 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/attempt.js @@ -0,0 +1,35 @@ +var apply = require('./_apply'), + baseRest = require('./_baseRest'), + isError = require('./isError'); + +/** + * Attempts to invoke `func`, returning either the result or the caught error + * object. Any additional arguments are provided to `func` when it's invoked. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Util + * @param {Function} func The function to attempt. + * @param {...*} [args] The arguments to invoke `func` with. + * @returns {*} Returns the `func` result or error object. + * @example + * + * // Avoid throwing errors for invalid selectors. + * var elements = _.attempt(function(selector) { + * return document.querySelectorAll(selector); + * }, '>_>'); + * + * if (_.isError(elements)) { + * elements = []; + * } + */ +var attempt = baseRest(function(func, args) { + try { + return apply(func, undefined, args); + } catch (e) { + return isError(e) ? e : new Error(e); + } +}); + +module.exports = attempt; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/before.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/before.js new file mode 100644 index 00000000..a3e0a16c --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/before.js @@ -0,0 +1,40 @@ +var toInteger = require('./toInteger'); + +/** Error message constants. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** + * Creates a function that invokes `func`, with the `this` binding and arguments + * of the created function, while it's called less than `n` times. Subsequent + * calls to the created function return the result of the last `func` invocation. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {number} n The number of calls at which `func` is no longer invoked. + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * jQuery(element).on('click', _.before(5, addContactToList)); + * // => Allows adding up to 4 contacts to the list. + */ +function before(n, func) { + var result; + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + n = toInteger(n); + return function() { + if (--n > 0) { + result = func.apply(this, arguments); + } + if (n <= 1) { + func = undefined; + } + return result; + }; +} + +module.exports = before; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/bind.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/bind.js new file mode 100644 index 00000000..b1076e93 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/bind.js @@ -0,0 +1,57 @@ +var baseRest = require('./_baseRest'), + createWrap = require('./_createWrap'), + getHolder = require('./_getHolder'), + replaceHolders = require('./_replaceHolders'); + +/** Used to compose bitmasks for function metadata. */ +var WRAP_BIND_FLAG = 1, + WRAP_PARTIAL_FLAG = 32; + +/** + * Creates a function that invokes `func` with the `this` binding of `thisArg` + * and `partials` prepended to the arguments it receives. + * + * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds, + * may be used as a placeholder for partially applied arguments. + * + * **Note:** Unlike native `Function#bind`, this method doesn't set the "length" + * property of bound functions. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to bind. + * @param {*} thisArg The `this` binding of `func`. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new bound function. + * @example + * + * function greet(greeting, punctuation) { + * return greeting + ' ' + this.user + punctuation; + * } + * + * var object = { 'user': 'fred' }; + * + * var bound = _.bind(greet, object, 'hi'); + * bound('!'); + * // => 'hi fred!' + * + * // Bound with placeholders. + * var bound = _.bind(greet, object, _, '!'); + * bound('hi'); + * // => 'hi fred!' + */ +var bind = baseRest(function(func, thisArg, partials) { + var bitmask = WRAP_BIND_FLAG; + if (partials.length) { + var holders = replaceHolders(partials, getHolder(bind)); + bitmask |= WRAP_PARTIAL_FLAG; + } + return createWrap(func, bitmask, thisArg, partials, holders); +}); + +// Assign default placeholders. +bind.placeholder = {}; + +module.exports = bind; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/bindAll.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/bindAll.js new file mode 100644 index 00000000..a35706de --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/bindAll.js @@ -0,0 +1,41 @@ +var arrayEach = require('./_arrayEach'), + baseAssignValue = require('./_baseAssignValue'), + bind = require('./bind'), + flatRest = require('./_flatRest'), + toKey = require('./_toKey'); + +/** + * Binds methods of an object to the object itself, overwriting the existing + * method. + * + * **Note:** This method doesn't set the "length" property of bound functions. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {Object} object The object to bind and assign the bound methods to. + * @param {...(string|string[])} methodNames The object method names to bind. + * @returns {Object} Returns `object`. + * @example + * + * var view = { + * 'label': 'docs', + * 'click': function() { + * console.log('clicked ' + this.label); + * } + * }; + * + * _.bindAll(view, ['click']); + * jQuery(element).on('click', view.click); + * // => Logs 'clicked docs' when clicked. + */ +var bindAll = flatRest(function(object, methodNames) { + arrayEach(methodNames, function(key) { + key = toKey(key); + baseAssignValue(object, key, bind(object[key], object)); + }); + return object; +}); + +module.exports = bindAll; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/bindKey.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/bindKey.js new file mode 100644 index 00000000..f7fd64cd --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/bindKey.js @@ -0,0 +1,68 @@ +var baseRest = require('./_baseRest'), + createWrap = require('./_createWrap'), + getHolder = require('./_getHolder'), + replaceHolders = require('./_replaceHolders'); + +/** Used to compose bitmasks for function metadata. */ +var WRAP_BIND_FLAG = 1, + WRAP_BIND_KEY_FLAG = 2, + WRAP_PARTIAL_FLAG = 32; + +/** + * Creates a function that invokes the method at `object[key]` with `partials` + * prepended to the arguments it receives. + * + * This method differs from `_.bind` by allowing bound functions to reference + * methods that may be redefined or don't yet exist. See + * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern) + * for more details. + * + * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for partially applied arguments. + * + * @static + * @memberOf _ + * @since 0.10.0 + * @category Function + * @param {Object} object The object to invoke the method on. + * @param {string} key The key of the method. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new bound function. + * @example + * + * var object = { + * 'user': 'fred', + * 'greet': function(greeting, punctuation) { + * return greeting + ' ' + this.user + punctuation; + * } + * }; + * + * var bound = _.bindKey(object, 'greet', 'hi'); + * bound('!'); + * // => 'hi fred!' + * + * object.greet = function(greeting, punctuation) { + * return greeting + 'ya ' + this.user + punctuation; + * }; + * + * bound('!'); + * // => 'hiya fred!' + * + * // Bound with placeholders. + * var bound = _.bindKey(object, 'greet', _, '!'); + * bound('hi'); + * // => 'hiya fred!' + */ +var bindKey = baseRest(function(object, key, partials) { + var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG; + if (partials.length) { + var holders = replaceHolders(partials, getHolder(bindKey)); + bitmask |= WRAP_PARTIAL_FLAG; + } + return createWrap(key, bitmask, object, partials, holders); +}); + +// Assign default placeholders. +bindKey.placeholder = {}; + +module.exports = bindKey; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/camelCase.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/camelCase.js new file mode 100644 index 00000000..d7390def --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/camelCase.js @@ -0,0 +1,29 @@ +var capitalize = require('./capitalize'), + createCompounder = require('./_createCompounder'); + +/** + * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the camel cased string. + * @example + * + * _.camelCase('Foo Bar'); + * // => 'fooBar' + * + * _.camelCase('--foo-bar--'); + * // => 'fooBar' + * + * _.camelCase('__FOO_BAR__'); + * // => 'fooBar' + */ +var camelCase = createCompounder(function(result, word, index) { + word = word.toLowerCase(); + return result + (index ? capitalize(word) : word); +}); + +module.exports = camelCase; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/capitalize.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/capitalize.js new file mode 100644 index 00000000..3e1600e7 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/capitalize.js @@ -0,0 +1,23 @@ +var toString = require('./toString'), + upperFirst = require('./upperFirst'); + +/** + * Converts the first character of `string` to upper case and the remaining + * to lower case. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to capitalize. + * @returns {string} Returns the capitalized string. + * @example + * + * _.capitalize('FRED'); + * // => 'Fred' + */ +function capitalize(string) { + return upperFirst(toString(string).toLowerCase()); +} + +module.exports = capitalize; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/castArray.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/castArray.js new file mode 100644 index 00000000..e470bdb9 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/castArray.js @@ -0,0 +1,44 @@ +var isArray = require('./isArray'); + +/** + * Casts `value` as an array if it's not one. + * + * @static + * @memberOf _ + * @since 4.4.0 + * @category Lang + * @param {*} value The value to inspect. + * @returns {Array} Returns the cast array. + * @example + * + * _.castArray(1); + * // => [1] + * + * _.castArray({ 'a': 1 }); + * // => [{ 'a': 1 }] + * + * _.castArray('abc'); + * // => ['abc'] + * + * _.castArray(null); + * // => [null] + * + * _.castArray(undefined); + * // => [undefined] + * + * _.castArray(); + * // => [] + * + * var array = [1, 2, 3]; + * console.log(_.castArray(array) === array); + * // => true + */ +function castArray() { + if (!arguments.length) { + return []; + } + var value = arguments[0]; + return isArray(value) ? value : [value]; +} + +module.exports = castArray; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/ceil.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/ceil.js new file mode 100644 index 00000000..56c8722c --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/ceil.js @@ -0,0 +1,26 @@ +var createRound = require('./_createRound'); + +/** + * Computes `number` rounded up to `precision`. + * + * @static + * @memberOf _ + * @since 3.10.0 + * @category Math + * @param {number} number The number to round up. + * @param {number} [precision=0] The precision to round up to. + * @returns {number} Returns the rounded up number. + * @example + * + * _.ceil(4.006); + * // => 5 + * + * _.ceil(6.004, 2); + * // => 6.01 + * + * _.ceil(6040, -2); + * // => 6100 + */ +var ceil = createRound('ceil'); + +module.exports = ceil; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/chain.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/chain.js new file mode 100644 index 00000000..f6cd6475 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/chain.js @@ -0,0 +1,38 @@ +var lodash = require('./wrapperLodash'); + +/** + * Creates a `lodash` wrapper instance that wraps `value` with explicit method + * chain sequences enabled. The result of such sequences must be unwrapped + * with `_#value`. + * + * @static + * @memberOf _ + * @since 1.3.0 + * @category Seq + * @param {*} value The value to wrap. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 }, + * { 'user': 'pebbles', 'age': 1 } + * ]; + * + * var youngest = _ + * .chain(users) + * .sortBy('age') + * .map(function(o) { + * return o.user + ' is ' + o.age; + * }) + * .head() + * .value(); + * // => 'pebbles is 1' + */ +function chain(value) { + var result = lodash(value); + result.__chain__ = true; + return result; +} + +module.exports = chain; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/chunk.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/chunk.js new file mode 100644 index 00000000..5b562fef --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/chunk.js @@ -0,0 +1,50 @@ +var baseSlice = require('./_baseSlice'), + isIterateeCall = require('./_isIterateeCall'), + toInteger = require('./toInteger'); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeCeil = Math.ceil, + nativeMax = Math.max; + +/** + * Creates an array of elements split into groups the length of `size`. + * If `array` can't be split evenly, the final chunk will be the remaining + * elements. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to process. + * @param {number} [size=1] The length of each chunk + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the new array of chunks. + * @example + * + * _.chunk(['a', 'b', 'c', 'd'], 2); + * // => [['a', 'b'], ['c', 'd']] + * + * _.chunk(['a', 'b', 'c', 'd'], 3); + * // => [['a', 'b', 'c'], ['d']] + */ +function chunk(array, size, guard) { + if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) { + size = 1; + } else { + size = nativeMax(toInteger(size), 0); + } + var length = array == null ? 0 : array.length; + if (!length || size < 1) { + return []; + } + var index = 0, + resIndex = 0, + result = Array(nativeCeil(length / size)); + + while (index < length) { + result[resIndex++] = baseSlice(array, index, (index += size)); + } + return result; +} + +module.exports = chunk; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/clamp.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/clamp.js new file mode 100644 index 00000000..91a72c97 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/clamp.js @@ -0,0 +1,39 @@ +var baseClamp = require('./_baseClamp'), + toNumber = require('./toNumber'); + +/** + * Clamps `number` within the inclusive `lower` and `upper` bounds. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Number + * @param {number} number The number to clamp. + * @param {number} [lower] The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the clamped number. + * @example + * + * _.clamp(-10, -5, 5); + * // => -5 + * + * _.clamp(10, -5, 5); + * // => 5 + */ +function clamp(number, lower, upper) { + if (upper === undefined) { + upper = lower; + lower = undefined; + } + if (upper !== undefined) { + upper = toNumber(upper); + upper = upper === upper ? upper : 0; + } + if (lower !== undefined) { + lower = toNumber(lower); + lower = lower === lower ? lower : 0; + } + return baseClamp(toNumber(number), lower, upper); +} + +module.exports = clamp; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/clone.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/clone.js new file mode 100644 index 00000000..dd439d63 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/clone.js @@ -0,0 +1,36 @@ +var baseClone = require('./_baseClone'); + +/** Used to compose bitmasks for cloning. */ +var CLONE_SYMBOLS_FLAG = 4; + +/** + * Creates a shallow clone of `value`. + * + * **Note:** This method is loosely based on the + * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) + * and supports cloning arrays, array buffers, booleans, date objects, maps, + * numbers, `Object` objects, regexes, sets, strings, symbols, and typed + * arrays. The own enumerable properties of `arguments` objects are cloned + * as plain objects. An empty object is returned for uncloneable values such + * as error objects, functions, DOM nodes, and WeakMaps. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to clone. + * @returns {*} Returns the cloned value. + * @see _.cloneDeep + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var shallow = _.clone(objects); + * console.log(shallow[0] === objects[0]); + * // => true + */ +function clone(value) { + return baseClone(value, CLONE_SYMBOLS_FLAG); +} + +module.exports = clone; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/cloneDeep.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/cloneDeep.js new file mode 100644 index 00000000..4425fbe8 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/cloneDeep.js @@ -0,0 +1,29 @@ +var baseClone = require('./_baseClone'); + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, + CLONE_SYMBOLS_FLAG = 4; + +/** + * This method is like `_.clone` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Lang + * @param {*} value The value to recursively clone. + * @returns {*} Returns the deep cloned value. + * @see _.clone + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var deep = _.cloneDeep(objects); + * console.log(deep[0] === objects[0]); + * // => false + */ +function cloneDeep(value) { + return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); +} + +module.exports = cloneDeep; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/cloneDeepWith.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/cloneDeepWith.js new file mode 100644 index 00000000..fd9c6c05 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/cloneDeepWith.js @@ -0,0 +1,40 @@ +var baseClone = require('./_baseClone'); + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, + CLONE_SYMBOLS_FLAG = 4; + +/** + * This method is like `_.cloneWith` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to recursively clone. + * @param {Function} [customizer] The function to customize cloning. + * @returns {*} Returns the deep cloned value. + * @see _.cloneWith + * @example + * + * function customizer(value) { + * if (_.isElement(value)) { + * return value.cloneNode(true); + * } + * } + * + * var el = _.cloneDeepWith(document.body, customizer); + * + * console.log(el === document.body); + * // => false + * console.log(el.nodeName); + * // => 'BODY' + * console.log(el.childNodes.length); + * // => 20 + */ +function cloneDeepWith(value, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer); +} + +module.exports = cloneDeepWith; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/cloneWith.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/cloneWith.js new file mode 100644 index 00000000..d2f4e756 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/cloneWith.js @@ -0,0 +1,42 @@ +var baseClone = require('./_baseClone'); + +/** Used to compose bitmasks for cloning. */ +var CLONE_SYMBOLS_FLAG = 4; + +/** + * This method is like `_.clone` except that it accepts `customizer` which + * is invoked to produce the cloned value. If `customizer` returns `undefined`, + * cloning is handled by the method instead. The `customizer` is invoked with + * up to four arguments; (value [, index|key, object, stack]). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to clone. + * @param {Function} [customizer] The function to customize cloning. + * @returns {*} Returns the cloned value. + * @see _.cloneDeepWith + * @example + * + * function customizer(value) { + * if (_.isElement(value)) { + * return value.cloneNode(false); + * } + * } + * + * var el = _.cloneWith(document.body, customizer); + * + * console.log(el === document.body); + * // => false + * console.log(el.nodeName); + * // => 'BODY' + * console.log(el.childNodes.length); + * // => 0 + */ +function cloneWith(value, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + return baseClone(value, CLONE_SYMBOLS_FLAG, customizer); +} + +module.exports = cloneWith; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/collection.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/collection.js new file mode 100644 index 00000000..77fe837f --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/collection.js @@ -0,0 +1,30 @@ +module.exports = { + 'countBy': require('./countBy'), + 'each': require('./each'), + 'eachRight': require('./eachRight'), + 'every': require('./every'), + 'filter': require('./filter'), + 'find': require('./find'), + 'findLast': require('./findLast'), + 'flatMap': require('./flatMap'), + 'flatMapDeep': require('./flatMapDeep'), + 'flatMapDepth': require('./flatMapDepth'), + 'forEach': require('./forEach'), + 'forEachRight': require('./forEachRight'), + 'groupBy': require('./groupBy'), + 'includes': require('./includes'), + 'invokeMap': require('./invokeMap'), + 'keyBy': require('./keyBy'), + 'map': require('./map'), + 'orderBy': require('./orderBy'), + 'partition': require('./partition'), + 'reduce': require('./reduce'), + 'reduceRight': require('./reduceRight'), + 'reject': require('./reject'), + 'sample': require('./sample'), + 'sampleSize': require('./sampleSize'), + 'shuffle': require('./shuffle'), + 'size': require('./size'), + 'some': require('./some'), + 'sortBy': require('./sortBy') +}; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/commit.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/commit.js new file mode 100644 index 00000000..fe4db717 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/commit.js @@ -0,0 +1,33 @@ +var LodashWrapper = require('./_LodashWrapper'); + +/** + * Executes the chain sequence and returns the wrapped result. + * + * @name commit + * @memberOf _ + * @since 3.2.0 + * @category Seq + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var array = [1, 2]; + * var wrapped = _(array).push(3); + * + * console.log(array); + * // => [1, 2] + * + * wrapped = wrapped.commit(); + * console.log(array); + * // => [1, 2, 3] + * + * wrapped.last(); + * // => 3 + * + * console.log(array); + * // => [1, 2, 3] + */ +function wrapperCommit() { + return new LodashWrapper(this.value(), this.__chain__); +} + +module.exports = wrapperCommit; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/compact.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/compact.js new file mode 100644 index 00000000..031fab4e --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/compact.js @@ -0,0 +1,31 @@ +/** + * Creates an array with all falsey values removed. The values `false`, `null`, + * `0`, `""`, `undefined`, and `NaN` are falsey. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to compact. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.compact([0, 1, false, 2, '', 3]); + * // => [1, 2, 3] + */ +function compact(array) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (value) { + result[resIndex++] = value; + } + } + return result; +} + +module.exports = compact; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/concat.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/concat.js new file mode 100644 index 00000000..1da48a4f --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/concat.js @@ -0,0 +1,43 @@ +var arrayPush = require('./_arrayPush'), + baseFlatten = require('./_baseFlatten'), + copyArray = require('./_copyArray'), + isArray = require('./isArray'); + +/** + * Creates a new array concatenating `array` with any additional arrays + * and/or values. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to concatenate. + * @param {...*} [values] The values to concatenate. + * @returns {Array} Returns the new concatenated array. + * @example + * + * var array = [1]; + * var other = _.concat(array, 2, [3], [[4]]); + * + * console.log(other); + * // => [1, 2, 3, [4]] + * + * console.log(array); + * // => [1] + */ +function concat() { + var length = arguments.length; + if (!length) { + return []; + } + var args = Array(length - 1), + array = arguments[0], + index = length; + + while (index--) { + args[index - 1] = arguments[index]; + } + return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1)); +} + +module.exports = concat; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/cond.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/cond.js new file mode 100644 index 00000000..64555986 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/cond.js @@ -0,0 +1,60 @@ +var apply = require('./_apply'), + arrayMap = require('./_arrayMap'), + baseIteratee = require('./_baseIteratee'), + baseRest = require('./_baseRest'); + +/** Error message constants. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** + * Creates a function that iterates over `pairs` and invokes the corresponding + * function of the first predicate to return truthy. The predicate-function + * pairs are invoked with the `this` binding and arguments of the created + * function. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Util + * @param {Array} pairs The predicate-function pairs. + * @returns {Function} Returns the new composite function. + * @example + * + * var func = _.cond([ + * [_.matches({ 'a': 1 }), _.constant('matches A')], + * [_.conforms({ 'b': _.isNumber }), _.constant('matches B')], + * [_.stubTrue, _.constant('no match')] + * ]); + * + * func({ 'a': 1, 'b': 2 }); + * // => 'matches A' + * + * func({ 'a': 0, 'b': 1 }); + * // => 'matches B' + * + * func({ 'a': '1', 'b': '2' }); + * // => 'no match' + */ +function cond(pairs) { + var length = pairs == null ? 0 : pairs.length, + toIteratee = baseIteratee; + + pairs = !length ? [] : arrayMap(pairs, function(pair) { + if (typeof pair[1] != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return [toIteratee(pair[0]), pair[1]]; + }); + + return baseRest(function(args) { + var index = -1; + while (++index < length) { + var pair = pairs[index]; + if (apply(pair[0], this, args)) { + return apply(pair[1], this, args); + } + } + }); +} + +module.exports = cond; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/conforms.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/conforms.js new file mode 100644 index 00000000..5501a949 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/conforms.js @@ -0,0 +1,35 @@ +var baseClone = require('./_baseClone'), + baseConforms = require('./_baseConforms'); + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1; + +/** + * Creates a function that invokes the predicate properties of `source` with + * the corresponding property values of a given object, returning `true` if + * all predicates return truthy, else `false`. + * + * **Note:** The created function is equivalent to `_.conformsTo` with + * `source` partially applied. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Util + * @param {Object} source The object of property predicates to conform to. + * @returns {Function} Returns the new spec function. + * @example + * + * var objects = [ + * { 'a': 2, 'b': 1 }, + * { 'a': 1, 'b': 2 } + * ]; + * + * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } })); + * // => [{ 'a': 1, 'b': 2 }] + */ +function conforms(source) { + return baseConforms(baseClone(source, CLONE_DEEP_FLAG)); +} + +module.exports = conforms; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/conformsTo.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/conformsTo.js new file mode 100644 index 00000000..b8a93ebf --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/conformsTo.js @@ -0,0 +1,32 @@ +var baseConformsTo = require('./_baseConformsTo'), + keys = require('./keys'); + +/** + * Checks if `object` conforms to `source` by invoking the predicate + * properties of `source` with the corresponding property values of `object`. + * + * **Note:** This method is equivalent to `_.conforms` when `source` is + * partially applied. + * + * @static + * @memberOf _ + * @since 4.14.0 + * @category Lang + * @param {Object} object The object to inspect. + * @param {Object} source The object of property predicates to conform to. + * @returns {boolean} Returns `true` if `object` conforms, else `false`. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * + * _.conformsTo(object, { 'b': function(n) { return n > 1; } }); + * // => true + * + * _.conformsTo(object, { 'b': function(n) { return n > 2; } }); + * // => false + */ +function conformsTo(object, source) { + return source == null || baseConformsTo(object, source, keys(source)); +} + +module.exports = conformsTo; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/constant.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/constant.js new file mode 100644 index 00000000..655ece3f --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/constant.js @@ -0,0 +1,26 @@ +/** + * Creates a function that returns `value`. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {*} value The value to return from the new function. + * @returns {Function} Returns the new constant function. + * @example + * + * var objects = _.times(2, _.constant({ 'a': 1 })); + * + * console.log(objects); + * // => [{ 'a': 1 }, { 'a': 1 }] + * + * console.log(objects[0] === objects[1]); + * // => true + */ +function constant(value) { + return function() { + return value; + }; +} + +module.exports = constant; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/core.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/core.js new file mode 100644 index 00000000..6d70dcaf --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/core.js @@ -0,0 +1,3877 @@ +/** + * @license + * Lodash (Custom Build) + * Build: `lodash core -o ./dist/lodash.core.js` + * Copyright OpenJS Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */ +;(function() { + + /** Used as a safe reference for `undefined` in pre-ES5 environments. */ + var undefined; + + /** Used as the semantic version number. */ + var VERSION = '4.17.20'; + + /** Error message constants. */ + var FUNC_ERROR_TEXT = 'Expected a function'; + + /** Used to compose bitmasks for value comparisons. */ + var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + + /** Used to compose bitmasks for function metadata. */ + var WRAP_BIND_FLAG = 1, + WRAP_PARTIAL_FLAG = 32; + + /** Used as references for various `Number` constants. */ + var INFINITY = 1 / 0, + MAX_SAFE_INTEGER = 9007199254740991; + + /** `Object#toString` result references. */ + var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + asyncTag = '[object AsyncFunction]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + numberTag = '[object Number]', + objectTag = '[object Object]', + proxyTag = '[object Proxy]', + regexpTag = '[object RegExp]', + stringTag = '[object String]'; + + /** Used to match HTML entities and HTML characters. */ + var reUnescapedHtml = /[&<>"']/g, + reHasUnescapedHtml = RegExp(reUnescapedHtml.source); + + /** Used to detect unsigned integer values. */ + var reIsUint = /^(?:0|[1-9]\d*)$/; + + /** Used to map characters to HTML entities. */ + var htmlEscapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''' + }; + + /** Detect free variable `global` from Node.js. */ + var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + + /** Detect free variable `self`. */ + var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + + /** Used as a reference to the global object. */ + var root = freeGlobal || freeSelf || Function('return this')(); + + /** Detect free variable `exports`. */ + var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + + /** Detect free variable `module`. */ + var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + + /*--------------------------------------------------------------------------*/ + + /** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ + function arrayPush(array, values) { + array.push.apply(array, values); + return array; + } + + /** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseFindIndex(array, predicate, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 1 : -1); + + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; + } + + /** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new accessor function. + */ + function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; + } + + /** + * The base implementation of `_.propertyOf` without support for deep paths. + * + * @private + * @param {Object} object The object to query. + * @returns {Function} Returns the new accessor function. + */ + function basePropertyOf(object) { + return function(key) { + return object == null ? undefined : object[key]; + }; + } + + /** + * The base implementation of `_.reduce` and `_.reduceRight`, without support + * for iteratee shorthands, which iterates over `collection` using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} accumulator The initial value. + * @param {boolean} initAccum Specify using the first or last element of + * `collection` as the initial value. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the accumulated value. + */ + function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { + eachFunc(collection, function(value, index, collection) { + accumulator = initAccum + ? (initAccum = false, value) + : iteratee(accumulator, value, index, collection); + }); + return accumulator; + } + + /** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ + function baseValues(object, props) { + return baseMap(props, function(key) { + return object[key]; + }); + } + + /** + * Used by `_.escape` to convert characters to HTML entities. + * + * @private + * @param {string} chr The matched character to escape. + * @returns {string} Returns the escaped character. + */ + var escapeHtmlChar = basePropertyOf(htmlEscapes); + + /** + * Creates a unary function that invokes `func` with its argument transformed. + * + * @private + * @param {Function} func The function to wrap. + * @param {Function} transform The argument transform. + * @returns {Function} Returns the new function. + */ + function overArg(func, transform) { + return function(arg) { + return func(transform(arg)); + }; + } + + /*--------------------------------------------------------------------------*/ + + /** Used for built-in method references. */ + var arrayProto = Array.prototype, + objectProto = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** Used to generate unique IDs. */ + var idCounter = 0; + + /** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ + var nativeObjectToString = objectProto.toString; + + /** Used to restore the original `_` reference in `_.noConflict`. */ + var oldDash = root._; + + /** Built-in value references. */ + var objectCreate = Object.create, + propertyIsEnumerable = objectProto.propertyIsEnumerable; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeIsFinite = root.isFinite, + nativeKeys = overArg(Object.keys, Object), + nativeMax = Math.max; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a `lodash` object which wraps `value` to enable implicit method + * chain sequences. Methods that operate on and return arrays, collections, + * and functions can be chained together. Methods that retrieve a single value + * or may return a primitive value will automatically end the chain sequence + * and return the unwrapped value. Otherwise, the value must be unwrapped + * with `_#value`. + * + * Explicit chain sequences, which must be unwrapped with `_#value`, may be + * enabled using `_.chain`. + * + * The execution of chained methods is lazy, that is, it's deferred until + * `_#value` is implicitly or explicitly called. + * + * Lazy evaluation allows several methods to support shortcut fusion. + * Shortcut fusion is an optimization to merge iteratee calls; this avoids + * the creation of intermediate arrays and can greatly reduce the number of + * iteratee executions. Sections of a chain sequence qualify for shortcut + * fusion if the section is applied to an array and iteratees accept only + * one argument. The heuristic for whether a section qualifies for shortcut + * fusion is subject to change. + * + * Chaining is supported in custom builds as long as the `_#value` method is + * directly or indirectly included in the build. + * + * In addition to lodash methods, wrappers have `Array` and `String` methods. + * + * The wrapper `Array` methods are: + * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift` + * + * The wrapper `String` methods are: + * `replace` and `split` + * + * The wrapper methods that support shortcut fusion are: + * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`, + * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`, + * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray` + * + * The chainable wrapper methods are: + * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`, + * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`, + * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`, + * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`, + * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`, + * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`, + * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`, + * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`, + * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`, + * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`, + * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`, + * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`, + * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`, + * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`, + * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`, + * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`, + * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`, + * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`, + * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`, + * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`, + * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`, + * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`, + * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`, + * `zipObject`, `zipObjectDeep`, and `zipWith` + * + * The wrapper methods that are **not** chainable by default are: + * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`, + * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`, + * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`, + * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`, + * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`, + * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`, + * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`, + * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`, + * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`, + * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`, + * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`, + * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`, + * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`, + * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`, + * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`, + * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`, + * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`, + * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`, + * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`, + * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`, + * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`, + * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`, + * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`, + * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`, + * `upperFirst`, `value`, and `words` + * + * @name _ + * @constructor + * @category Seq + * @param {*} value The value to wrap in a `lodash` instance. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * function square(n) { + * return n * n; + * } + * + * var wrapped = _([1, 2, 3]); + * + * // Returns an unwrapped value. + * wrapped.reduce(_.add); + * // => 6 + * + * // Returns a wrapped value. + * var squares = wrapped.map(square); + * + * _.isArray(squares); + * // => false + * + * _.isArray(squares.value()); + * // => true + */ + function lodash(value) { + return value instanceof LodashWrapper + ? value + : new LodashWrapper(value); + } + + /** + * The base implementation of `_.create` without support for assigning + * properties to the created object. + * + * @private + * @param {Object} proto The object to inherit from. + * @returns {Object} Returns the new object. + */ + var baseCreate = (function() { + function object() {} + return function(proto) { + if (!isObject(proto)) { + return {}; + } + if (objectCreate) { + return objectCreate(proto); + } + object.prototype = proto; + var result = new object; + object.prototype = undefined; + return result; + }; + }()); + + /** + * The base constructor for creating `lodash` wrapper objects. + * + * @private + * @param {*} value The value to wrap. + * @param {boolean} [chainAll] Enable explicit method chain sequences. + */ + function LodashWrapper(value, chainAll) { + this.__wrapped__ = value; + this.__actions__ = []; + this.__chain__ = !!chainAll; + } + + LodashWrapper.prototype = baseCreate(lodash.prototype); + LodashWrapper.prototype.constructor = LodashWrapper; + + /*------------------------------------------------------------------------*/ + + /** + * Assigns `value` to `key` of `object` if the existing value is not equivalent + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function assignValue(object, key, value) { + var objValue = object[key]; + if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || + (value === undefined && !(key in object))) { + baseAssignValue(object, key, value); + } + } + + /** + * The base implementation of `assignValue` and `assignMergeValue` without + * value checks. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function baseAssignValue(object, key, value) { + object[key] = value; + } + + /** + * The base implementation of `_.delay` and `_.defer` which accepts `args` + * to provide to `func`. + * + * @private + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @param {Array} args The arguments to provide to `func`. + * @returns {number|Object} Returns the timer id or timeout object. + */ + function baseDelay(func, wait, args) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return setTimeout(function() { func.apply(undefined, args); }, wait); + } + + /** + * The base implementation of `_.forEach` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ + var baseEach = createBaseEach(baseForOwn); + + /** + * The base implementation of `_.every` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false` + */ + function baseEvery(collection, predicate) { + var result = true; + baseEach(collection, function(value, index, collection) { + result = !!predicate(value, index, collection); + return result; + }); + return result; + } + + /** + * The base implementation of methods like `_.max` and `_.min` which accepts a + * `comparator` to determine the extremum value. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The iteratee invoked per iteration. + * @param {Function} comparator The comparator used to compare values. + * @returns {*} Returns the extremum value. + */ + function baseExtremum(array, iteratee, comparator) { + var index = -1, + length = array.length; + + while (++index < length) { + var value = array[index], + current = iteratee(value); + + if (current != null && (computed === undefined + ? (current === current && !false) + : comparator(current, computed) + )) { + var computed = current, + result = value; + } + } + return result; + } + + /** + * The base implementation of `_.filter` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ + function baseFilter(collection, predicate) { + var result = []; + baseEach(collection, function(value, index, collection) { + if (predicate(value, index, collection)) { + result.push(value); + } + }); + return result; + } + + /** + * The base implementation of `_.flatten` with support for restricting flattening. + * + * @private + * @param {Array} array The array to flatten. + * @param {number} depth The maximum recursion depth. + * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. + * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ + function baseFlatten(array, depth, predicate, isStrict, result) { + var index = -1, + length = array.length; + + predicate || (predicate = isFlattenable); + result || (result = []); + + while (++index < length) { + var value = array[index]; + if (depth > 0 && predicate(value)) { + if (depth > 1) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, depth - 1, predicate, isStrict, result); + } else { + arrayPush(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; + } + + /** + * The base implementation of `baseForOwn` which iterates over `object` + * properties returned by `keysFunc` and invokes `iteratee` for each property. + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ + var baseFor = createBaseFor(); + + /** + * The base implementation of `_.forOwn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ + function baseForOwn(object, iteratee) { + return object && baseFor(object, iteratee, keys); + } + + /** + * The base implementation of `_.functions` which creates an array of + * `object` function property names filtered from `props`. + * + * @private + * @param {Object} object The object to inspect. + * @param {Array} props The property names to filter. + * @returns {Array} Returns the function names. + */ + function baseFunctions(object, props) { + return baseFilter(props, function(key) { + return isFunction(object[key]); + }); + } + + /** + * The base implementation of `getTag` without fallbacks for buggy environments. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ + function baseGetTag(value) { + return objectToString(value); + } + + /** + * The base implementation of `_.gt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, + * else `false`. + */ + function baseGt(value, other) { + return value > other; + } + + /** + * The base implementation of `_.isArguments`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + */ + var baseIsArguments = noop; + + /** + * The base implementation of `_.isDate` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a date object, else `false`. + */ + function baseIsDate(value) { + return isObjectLike(value) && baseGetTag(value) == dateTag; + } + + /** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {boolean} bitmask The bitmask flags. + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Function} [customizer] The function to customize comparisons. + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ + function baseIsEqual(value, other, bitmask, customizer, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) { + return value !== value && other !== other; + } + return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); + } + + /** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { + var objIsArr = isArray(object), + othIsArr = isArray(other), + objTag = objIsArr ? arrayTag : baseGetTag(object), + othTag = othIsArr ? arrayTag : baseGetTag(other); + + objTag = objTag == argsTag ? objectTag : objTag; + othTag = othTag == argsTag ? objectTag : othTag; + + var objIsObj = objTag == objectTag, + othIsObj = othTag == objectTag, + isSameTag = objTag == othTag; + + stack || (stack = []); + var objStack = find(stack, function(entry) { + return entry[0] == object; + }); + var othStack = find(stack, function(entry) { + return entry[0] == other; + }); + if (objStack && othStack) { + return objStack[1] == other; + } + stack.push([object, other]); + stack.push([other, object]); + if (isSameTag && !objIsObj) { + var result = (objIsArr) + ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) + : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); + stack.pop(); + return result; + } + if (!(bitmask & COMPARE_PARTIAL_FLAG)) { + var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, + othUnwrapped = othIsWrapped ? other.value() : other; + + var result = equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + stack.pop(); + return result; + } + } + if (!isSameTag) { + return false; + } + var result = equalObjects(object, other, bitmask, customizer, equalFunc, stack); + stack.pop(); + return result; + } + + /** + * The base implementation of `_.isRegExp` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. + */ + function baseIsRegExp(value) { + return isObjectLike(value) && baseGetTag(value) == regexpTag; + } + + /** + * The base implementation of `_.iteratee`. + * + * @private + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. + */ + function baseIteratee(func) { + if (typeof func == 'function') { + return func; + } + if (func == null) { + return identity; + } + return (typeof func == 'object' ? baseMatches : baseProperty)(func); + } + + /** + * The base implementation of `_.lt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, + * else `false`. + */ + function baseLt(value, other) { + return value < other; + } + + /** + * The base implementation of `_.map` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ + function baseMap(collection, iteratee) { + var index = -1, + result = isArrayLike(collection) ? Array(collection.length) : []; + + baseEach(collection, function(value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; + } + + /** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + */ + function baseMatches(source) { + var props = nativeKeys(source); + return function(object) { + var length = props.length; + if (object == null) { + return !length; + } + object = Object(object); + while (length--) { + var key = props[length]; + if (!(key in object && + baseIsEqual(source[key], object[key], COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG) + )) { + return false; + } + } + return true; + }; + } + + /** + * The base implementation of `_.pick` without support for individual + * property identifiers. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @returns {Object} Returns the new object. + */ + function basePick(object, props) { + object = Object(object); + return reduce(props, function(result, key) { + if (key in object) { + result[key] = object[key]; + } + return result; + }, {}); + } + + /** + * The base implementation of `_.rest` which doesn't validate or coerce arguments. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + */ + function baseRest(func, start) { + return setToString(overRest(func, start, identity), func + ''); + } + + /** + * The base implementation of `_.slice` without an iteratee call guard. + * + * @private + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ + function baseSlice(array, start, end) { + var index = -1, + length = array.length; + + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = end > length ? length : end; + if (end < 0) { + end += length; + } + length = start > end ? 0 : ((end - start) >>> 0); + start >>>= 0; + + var result = Array(length); + while (++index < length) { + result[index] = array[index + start]; + } + return result; + } + + /** + * Copies the values of `source` to `array`. + * + * @private + * @param {Array} source The array to copy values from. + * @param {Array} [array=[]] The array to copy values to. + * @returns {Array} Returns `array`. + */ + function copyArray(source) { + return baseSlice(source, 0, source.length); + } + + /** + * The base implementation of `_.some` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ + function baseSome(collection, predicate) { + var result; + + baseEach(collection, function(value, index, collection) { + result = predicate(value, index, collection); + return !result; + }); + return !!result; + } + + /** + * The base implementation of `wrapperValue` which returns the result of + * performing a sequence of actions on the unwrapped `value`, where each + * successive action is supplied the return value of the previous. + * + * @private + * @param {*} value The unwrapped value. + * @param {Array} actions Actions to perform to resolve the unwrapped value. + * @returns {*} Returns the resolved value. + */ + function baseWrapperValue(value, actions) { + var result = value; + return reduce(actions, function(result, action) { + return action.func.apply(action.thisArg, arrayPush([result], action.args)); + }, result); + } + + /** + * Compares values to sort them in ascending order. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {number} Returns the sort order indicator for `value`. + */ + function compareAscending(value, other) { + if (value !== other) { + var valIsDefined = value !== undefined, + valIsNull = value === null, + valIsReflexive = value === value, + valIsSymbol = false; + + var othIsDefined = other !== undefined, + othIsNull = other === null, + othIsReflexive = other === other, + othIsSymbol = false; + + if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || + (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || + (valIsNull && othIsDefined && othIsReflexive) || + (!valIsDefined && othIsReflexive) || + !valIsReflexive) { + return 1; + } + if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || + (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || + (othIsNull && valIsDefined && valIsReflexive) || + (!othIsDefined && valIsReflexive) || + !othIsReflexive) { + return -1; + } + } + return 0; + } + + /** + * Copies properties of `source` to `object`. + * + * @private + * @param {Object} source The object to copy properties from. + * @param {Array} props The property identifiers to copy. + * @param {Object} [object={}] The object to copy properties to. + * @param {Function} [customizer] The function to customize copied values. + * @returns {Object} Returns `object`. + */ + function copyObject(source, props, object, customizer) { + var isNew = !object; + object || (object = {}); + + var index = -1, + length = props.length; + + while (++index < length) { + var key = props[index]; + + var newValue = customizer + ? customizer(object[key], source[key], key, object, source) + : undefined; + + if (newValue === undefined) { + newValue = source[key]; + } + if (isNew) { + baseAssignValue(object, key, newValue); + } else { + assignValue(object, key, newValue); + } + } + return object; + } + + /** + * Creates a function like `_.assign`. + * + * @private + * @param {Function} assigner The function to assign values. + * @returns {Function} Returns the new assigner function. + */ + function createAssigner(assigner) { + return baseRest(function(object, sources) { + var index = -1, + length = sources.length, + customizer = length > 1 ? sources[length - 1] : undefined; + + customizer = (assigner.length > 3 && typeof customizer == 'function') + ? (length--, customizer) + : undefined; + + object = Object(object); + while (++index < length) { + var source = sources[index]; + if (source) { + assigner(object, source, index, customizer); + } + } + return object; + }); + } + + /** + * Creates a `baseEach` or `baseEachRight` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ + function createBaseEach(eachFunc, fromRight) { + return function(collection, iteratee) { + if (collection == null) { + return collection; + } + if (!isArrayLike(collection)) { + return eachFunc(collection, iteratee); + } + var length = collection.length, + index = fromRight ? length : -1, + iterable = Object(collection); + + while ((fromRight ? index-- : ++index < length)) { + if (iteratee(iterable[index], index, iterable) === false) { + break; + } + } + return collection; + }; + } + + /** + * Creates a base function for methods like `_.forIn` and `_.forOwn`. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ + function createBaseFor(fromRight) { + return function(object, iteratee, keysFunc) { + var index = -1, + iterable = Object(object), + props = keysFunc(object), + length = props.length; + + while (length--) { + var key = props[fromRight ? length : ++index]; + if (iteratee(iterable[key], key, iterable) === false) { + break; + } + } + return object; + }; + } + + /** + * Creates a function that produces an instance of `Ctor` regardless of + * whether it was invoked as part of a `new` expression or by `call` or `apply`. + * + * @private + * @param {Function} Ctor The constructor to wrap. + * @returns {Function} Returns the new wrapped function. + */ + function createCtor(Ctor) { + return function() { + // Use a `switch` statement to work with class constructors. See + // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist + // for more details. + var args = arguments; + var thisBinding = baseCreate(Ctor.prototype), + result = Ctor.apply(thisBinding, args); + + // Mimic the constructor's `return` behavior. + // See https://es5.github.io/#x13.2.2 for more details. + return isObject(result) ? result : thisBinding; + }; + } + + /** + * Creates a `_.find` or `_.findLast` function. + * + * @private + * @param {Function} findIndexFunc The function to find the collection index. + * @returns {Function} Returns the new find function. + */ + function createFind(findIndexFunc) { + return function(collection, predicate, fromIndex) { + var iterable = Object(collection); + if (!isArrayLike(collection)) { + var iteratee = baseIteratee(predicate, 3); + collection = keys(collection); + predicate = function(key) { return iteratee(iterable[key], key, iterable); }; + } + var index = findIndexFunc(collection, predicate, fromIndex); + return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; + }; + } + + /** + * Creates a function that wraps `func` to invoke it with the `this` binding + * of `thisArg` and `partials` prepended to the arguments it receives. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} partials The arguments to prepend to those provided to + * the new function. + * @returns {Function} Returns the new wrapped function. + */ + function createPartial(func, bitmask, thisArg, partials) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + var isBind = bitmask & WRAP_BIND_FLAG, + Ctor = createCtor(func); + + function wrapper() { + var argsIndex = -1, + argsLength = arguments.length, + leftIndex = -1, + leftLength = partials.length, + args = Array(leftLength + argsLength), + fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + + while (++leftIndex < leftLength) { + args[leftIndex] = partials[leftIndex]; + } + while (argsLength--) { + args[leftIndex++] = arguments[++argsIndex]; + } + return fn.apply(isBind ? thisArg : this, args); + } + return wrapper; + } + + /** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ + function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + // Check that cyclic values are equal. + var arrStacked = stack.get(array); + var othStacked = stack.get(other); + if (arrStacked && othStacked) { + return arrStacked == other && othStacked == array; + } + var index = -1, + result = true, + seen = (bitmask & COMPARE_UNORDERED_FLAG) ? [] : undefined; + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + + var compared; + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (seen) { + if (!baseSome(other, function(othValue, othIndex) { + if (!indexOf(seen, othIndex) && + (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { + return seen.push(othIndex); + } + })) { + result = false; + break; + } + } else if (!( + arrValue === othValue || + equalFunc(arrValue, othValue, bitmask, customizer, stack) + )) { + result = false; + break; + } + } + return result; + } + + /** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { + switch (tag) { + + case boolTag: + case dateTag: + case numberTag: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return eq(+object, +other); + + case errorTag: + return object.name == other.name && object.message == other.message; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings, primitives and objects, + // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring + // for more details. + return object == (other + ''); + + } + return false; + } + + /** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + objProps = keys(object), + objLength = objProps.length, + othProps = keys(other), + othLength = othProps.length; + + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { + return false; + } + } + // Check that cyclic values are equal. + var objStacked = stack.get(object); + var othStacked = stack.get(other); + if (objStacked && othStacked) { + return objStacked == other && othStacked == object; + } + var result = true; + + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + + var compared; + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined + ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) + : compared + )) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + return result; + } + + /** + * A specialized version of `baseRest` which flattens the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ + function flatRest(func) { + return setToString(overRest(func, undefined, flatten), func + ''); + } + + /** + * Checks if `value` is a flattenable `arguments` object or array. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. + */ + function isFlattenable(value) { + return isArray(value) || isArguments(value); + } + + /** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ + function isIndex(value, length) { + var type = typeof value; + length = length == null ? MAX_SAFE_INTEGER : length; + + return !!length && + (type == 'number' || + (type != 'symbol' && reIsUint.test(value))) && + (value > -1 && value % 1 == 0 && value < length); + } + + /** + * Checks if the given arguments are from an iteratee call. + * + * @private + * @param {*} value The potential iteratee value argument. + * @param {*} index The potential iteratee index or key argument. + * @param {*} object The potential iteratee object argument. + * @returns {boolean} Returns `true` if the arguments are from an iteratee call, + * else `false`. + */ + function isIterateeCall(value, index, object) { + if (!isObject(object)) { + return false; + } + var type = typeof index; + if (type == 'number' + ? (isArrayLike(object) && isIndex(index, object.length)) + : (type == 'string' && index in object) + ) { + return eq(object[index], value); + } + return false; + } + + /** + * This function is like + * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * except that it includes inherited enumerable properties. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function nativeKeysIn(object) { + var result = []; + if (object != null) { + for (var key in Object(object)) { + result.push(key); + } + } + return result; + } + + /** + * Converts `value` to a string using `Object.prototype.toString`. + * + * @private + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + */ + function objectToString(value) { + return nativeObjectToString.call(value); + } + + /** + * A specialized version of `baseRest` which transforms the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @param {Function} transform The rest array transform. + * @returns {Function} Returns the new function. + */ + function overRest(func, start, transform) { + start = nativeMax(start === undefined ? (func.length - 1) : start, 0); + return function() { + var args = arguments, + index = -1, + length = nativeMax(args.length - start, 0), + array = Array(length); + + while (++index < length) { + array[index] = args[start + index]; + } + index = -1; + var otherArgs = Array(start + 1); + while (++index < start) { + otherArgs[index] = args[index]; + } + otherArgs[start] = transform(array); + return func.apply(this, otherArgs); + }; + } + + /** + * Sets the `toString` method of `func` to return `string`. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ + var setToString = identity; + + /*------------------------------------------------------------------------*/ + + /** + * Creates an array with all falsey values removed. The values `false`, `null`, + * `0`, `""`, `undefined`, and `NaN` are falsey. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to compact. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.compact([0, 1, false, 2, '', 3]); + * // => [1, 2, 3] + */ + function compact(array) { + return baseFilter(array, Boolean); + } + + /** + * Creates a new array concatenating `array` with any additional arrays + * and/or values. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to concatenate. + * @param {...*} [values] The values to concatenate. + * @returns {Array} Returns the new concatenated array. + * @example + * + * var array = [1]; + * var other = _.concat(array, 2, [3], [[4]]); + * + * console.log(other); + * // => [1, 2, 3, [4]] + * + * console.log(array); + * // => [1] + */ + function concat() { + var length = arguments.length; + if (!length) { + return []; + } + var args = Array(length - 1), + array = arguments[0], + index = length; + + while (index--) { + args[index - 1] = arguments[index]; + } + return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1)); + } + + /** + * This method is like `_.find` except that it returns the index of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.findIndex(users, function(o) { return o.user == 'barney'; }); + * // => 0 + * + * // The `_.matches` iteratee shorthand. + * _.findIndex(users, { 'user': 'fred', 'active': false }); + * // => 1 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findIndex(users, ['active', false]); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.findIndex(users, 'active'); + * // => 2 + */ + function findIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return baseFindIndex(array, baseIteratee(predicate, 3), index); + } + + /** + * Flattens `array` a single level deep. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, [3, [4]], 5]]); + * // => [1, 2, [3, [4]], 5] + */ + function flatten(array) { + var length = array == null ? 0 : array.length; + return length ? baseFlatten(array, 1) : []; + } + + /** + * Recursively flattens `array`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flattenDeep([1, [2, [3, [4]], 5]]); + * // => [1, 2, 3, 4, 5] + */ + function flattenDeep(array) { + var length = array == null ? 0 : array.length; + return length ? baseFlatten(array, INFINITY) : []; + } + + /** + * Gets the first element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias first + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the first element of `array`. + * @example + * + * _.head([1, 2, 3]); + * // => 1 + * + * _.head([]); + * // => undefined + */ + function head(array) { + return (array && array.length) ? array[0] : undefined; + } + + /** + * Gets the index at which the first occurrence of `value` is found in `array` + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. If `fromIndex` is negative, it's used as the + * offset from the end of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.indexOf([1, 2, 1, 2], 2); + * // => 1 + * + * // Search from the `fromIndex`. + * _.indexOf([1, 2, 1, 2], 2, 2); + * // => 3 + */ + function indexOf(array, value, fromIndex) { + var length = array == null ? 0 : array.length; + if (typeof fromIndex == 'number') { + fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : fromIndex; + } else { + fromIndex = 0; + } + var index = (fromIndex || 0) - 1, + isReflexive = value === value; + + while (++index < length) { + var other = array[index]; + if ((isReflexive ? other === value : other !== other)) { + return index; + } + } + return -1; + } + + /** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ + function last(array) { + var length = array == null ? 0 : array.length; + return length ? array[length - 1] : undefined; + } + + /** + * Creates a slice of `array` from `start` up to, but not including, `end`. + * + * **Note:** This method is used instead of + * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are + * returned. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ + function slice(array, start, end) { + var length = array == null ? 0 : array.length; + start = start == null ? 0 : +start; + end = end === undefined ? length : +end; + return length ? baseSlice(array, start, end) : []; + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates a `lodash` wrapper instance that wraps `value` with explicit method + * chain sequences enabled. The result of such sequences must be unwrapped + * with `_#value`. + * + * @static + * @memberOf _ + * @since 1.3.0 + * @category Seq + * @param {*} value The value to wrap. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 }, + * { 'user': 'pebbles', 'age': 1 } + * ]; + * + * var youngest = _ + * .chain(users) + * .sortBy('age') + * .map(function(o) { + * return o.user + ' is ' + o.age; + * }) + * .head() + * .value(); + * // => 'pebbles is 1' + */ + function chain(value) { + var result = lodash(value); + result.__chain__ = true; + return result; + } + + /** + * This method invokes `interceptor` and returns `value`. The interceptor + * is invoked with one argument; (value). The purpose of this method is to + * "tap into" a method chain sequence in order to modify intermediate results. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Seq + * @param {*} value The value to provide to `interceptor`. + * @param {Function} interceptor The function to invoke. + * @returns {*} Returns `value`. + * @example + * + * _([1, 2, 3]) + * .tap(function(array) { + * // Mutate input array. + * array.pop(); + * }) + * .reverse() + * .value(); + * // => [2, 1] + */ + function tap(value, interceptor) { + interceptor(value); + return value; + } + + /** + * This method is like `_.tap` except that it returns the result of `interceptor`. + * The purpose of this method is to "pass thru" values replacing intermediate + * results in a method chain sequence. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Seq + * @param {*} value The value to provide to `interceptor`. + * @param {Function} interceptor The function to invoke. + * @returns {*} Returns the result of `interceptor`. + * @example + * + * _(' abc ') + * .chain() + * .trim() + * .thru(function(value) { + * return [value]; + * }) + * .value(); + * // => ['abc'] + */ + function thru(value, interceptor) { + return interceptor(value); + } + + /** + * Creates a `lodash` wrapper instance with explicit method chain sequences enabled. + * + * @name chain + * @memberOf _ + * @since 0.1.0 + * @category Seq + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 } + * ]; + * + * // A sequence without explicit chaining. + * _(users).head(); + * // => { 'user': 'barney', 'age': 36 } + * + * // A sequence with explicit chaining. + * _(users) + * .chain() + * .head() + * .pick('user') + * .value(); + * // => { 'user': 'barney' } + */ + function wrapperChain() { + return chain(this); + } + + /** + * Executes the chain sequence to resolve the unwrapped value. + * + * @name value + * @memberOf _ + * @since 0.1.0 + * @alias toJSON, valueOf + * @category Seq + * @returns {*} Returns the resolved unwrapped value. + * @example + * + * _([1, 2, 3]).value(); + * // => [1, 2, 3] + */ + function wrapperValue() { + return baseWrapperValue(this.__wrapped__, this.__actions__); + } + + /*------------------------------------------------------------------------*/ + + /** + * Checks if `predicate` returns truthy for **all** elements of `collection`. + * Iteration is stopped once `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index|key, collection). + * + * **Note:** This method returns `true` for + * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because + * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of + * elements of empty collections. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false`. + * @example + * + * _.every([true, 1, null, 'yes'], Boolean); + * // => false + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * // The `_.matches` iteratee shorthand. + * _.every(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // The `_.matchesProperty` iteratee shorthand. + * _.every(users, ['active', false]); + * // => true + * + * // The `_.property` iteratee shorthand. + * _.every(users, 'active'); + * // => false + */ + function every(collection, predicate, guard) { + predicate = guard ? undefined : predicate; + return baseEvery(collection, baseIteratee(predicate)); + } + + /** + * Iterates over elements of `collection`, returning an array of all elements + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * **Note:** Unlike `_.remove`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.reject + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.filter(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, { 'age': 36, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.filter(users, 'active'); + * // => objects for ['barney'] + * + * // Combining several predicates using `_.overEvery` or `_.overSome`. + * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]])); + * // => objects for ['fred', 'barney'] + */ + function filter(collection, predicate) { + return baseFilter(collection, baseIteratee(predicate)); + } + + /** + * Iterates over elements of `collection`, returning the first element + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false }, + * { 'user': 'pebbles', 'age': 1, 'active': true } + * ]; + * + * _.find(users, function(o) { return o.age < 40; }); + * // => object for 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.find(users, { 'age': 1, 'active': true }); + * // => object for 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.find(users, ['active', false]); + * // => object for 'fred' + * + * // The `_.property` iteratee shorthand. + * _.find(users, 'active'); + * // => object for 'barney' + */ + var find = createFind(findIndex); + + /** + * Iterates over elements of `collection` and invokes `iteratee` for each element. + * The iteratee is invoked with three arguments: (value, index|key, collection). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * **Note:** As with other "Collections" methods, objects with a "length" + * property are iterated like arrays. To avoid this behavior use `_.forIn` + * or `_.forOwn` for object iteration. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias each + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEachRight + * @example + * + * _.forEach([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `1` then `2`. + * + * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ + function forEach(collection, iteratee) { + return baseEach(collection, baseIteratee(iteratee)); + } + + /** + * Creates an array of values by running each element in `collection` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. + * + * The guarded methods are: + * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, + * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, + * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, + * `template`, `trim`, `trimEnd`, `trimStart`, and `words` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + * @example + * + * function square(n) { + * return n * n; + * } + * + * _.map([4, 8], square); + * // => [16, 64] + * + * _.map({ 'a': 4, 'b': 8 }, square); + * // => [16, 64] (iteration order is not guaranteed) + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * // The `_.property` iteratee shorthand. + * _.map(users, 'user'); + * // => ['barney', 'fred'] + */ + function map(collection, iteratee) { + return baseMap(collection, baseIteratee(iteratee)); + } + + /** + * Reduces `collection` to a value which is the accumulated result of running + * each element in `collection` thru `iteratee`, where each successive + * invocation is supplied the return value of the previous. If `accumulator` + * is not given, the first element of `collection` is used as the initial + * value. The iteratee is invoked with four arguments: + * (accumulator, value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.reduce`, `_.reduceRight`, and `_.transform`. + * + * The guarded methods are: + * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, + * and `sortBy` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @returns {*} Returns the accumulated value. + * @see _.reduceRight + * @example + * + * _.reduce([1, 2], function(sum, n) { + * return sum + n; + * }, 0); + * // => 3 + * + * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + * (result[value] || (result[value] = [])).push(key); + * return result; + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) + */ + function reduce(collection, iteratee, accumulator) { + return baseReduce(collection, baseIteratee(iteratee), accumulator, arguments.length < 3, baseEach); + } + + /** + * Gets the size of `collection` by returning its length for array-like + * values or the number of own enumerable string keyed properties for objects. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @returns {number} Returns the collection size. + * @example + * + * _.size([1, 2, 3]); + * // => 3 + * + * _.size({ 'a': 1, 'b': 2 }); + * // => 2 + * + * _.size('pebbles'); + * // => 7 + */ + function size(collection) { + if (collection == null) { + return 0; + } + collection = isArrayLike(collection) ? collection : nativeKeys(collection); + return collection.length; + } + + /** + * Checks if `predicate` returns truthy for **any** element of `collection`. + * Iteration is stopped once `predicate` returns truthy. The predicate is + * invoked with three arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + * @example + * + * _.some([null, 0, 'yes', false], Boolean); + * // => true + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false } + * ]; + * + * // The `_.matches` iteratee shorthand. + * _.some(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // The `_.matchesProperty` iteratee shorthand. + * _.some(users, ['active', false]); + * // => true + * + * // The `_.property` iteratee shorthand. + * _.some(users, 'active'); + * // => true + */ + function some(collection, predicate, guard) { + predicate = guard ? undefined : predicate; + return baseSome(collection, baseIteratee(predicate)); + } + + /** + * Creates an array of elements, sorted in ascending order by the results of + * running each element in a collection thru each iteratee. This method + * performs a stable sort, that is, it preserves the original sort order of + * equal elements. The iteratees are invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {...(Function|Function[])} [iteratees=[_.identity]] + * The iteratees to sort by. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 30 }, + * { 'user': 'barney', 'age': 34 } + * ]; + * + * _.sortBy(users, [function(o) { return o.user; }]); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]] + * + * _.sortBy(users, ['user', 'age']); + * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]] + */ + function sortBy(collection, iteratee) { + var index = 0; + iteratee = baseIteratee(iteratee); + + return baseMap(baseMap(collection, function(value, key, collection) { + return { 'value': value, 'index': index++, 'criteria': iteratee(value, key, collection) }; + }).sort(function(object, other) { + return compareAscending(object.criteria, other.criteria) || (object.index - other.index); + }), baseProperty('value')); + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates a function that invokes `func`, with the `this` binding and arguments + * of the created function, while it's called less than `n` times. Subsequent + * calls to the created function return the result of the last `func` invocation. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {number} n The number of calls at which `func` is no longer invoked. + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * jQuery(element).on('click', _.before(5, addContactToList)); + * // => Allows adding up to 4 contacts to the list. + */ + function before(n, func) { + var result; + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + n = toInteger(n); + return function() { + if (--n > 0) { + result = func.apply(this, arguments); + } + if (n <= 1) { + func = undefined; + } + return result; + }; + } + + /** + * Creates a function that invokes `func` with the `this` binding of `thisArg` + * and `partials` prepended to the arguments it receives. + * + * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds, + * may be used as a placeholder for partially applied arguments. + * + * **Note:** Unlike native `Function#bind`, this method doesn't set the "length" + * property of bound functions. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to bind. + * @param {*} thisArg The `this` binding of `func`. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new bound function. + * @example + * + * function greet(greeting, punctuation) { + * return greeting + ' ' + this.user + punctuation; + * } + * + * var object = { 'user': 'fred' }; + * + * var bound = _.bind(greet, object, 'hi'); + * bound('!'); + * // => 'hi fred!' + * + * // Bound with placeholders. + * var bound = _.bind(greet, object, _, '!'); + * bound('hi'); + * // => 'hi fred!' + */ + var bind = baseRest(function(func, thisArg, partials) { + return createPartial(func, WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG, thisArg, partials); + }); + + /** + * Defers invoking the `func` until the current call stack has cleared. Any + * additional arguments are provided to `func` when it's invoked. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to defer. + * @param {...*} [args] The arguments to invoke `func` with. + * @returns {number} Returns the timer id. + * @example + * + * _.defer(function(text) { + * console.log(text); + * }, 'deferred'); + * // => Logs 'deferred' after one millisecond. + */ + var defer = baseRest(function(func, args) { + return baseDelay(func, 1, args); + }); + + /** + * Invokes `func` after `wait` milliseconds. Any additional arguments are + * provided to `func` when it's invoked. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @param {...*} [args] The arguments to invoke `func` with. + * @returns {number} Returns the timer id. + * @example + * + * _.delay(function(text) { + * console.log(text); + * }, 1000, 'later'); + * // => Logs 'later' after one second. + */ + var delay = baseRest(function(func, wait, args) { + return baseDelay(func, toNumber(wait) || 0, args); + }); + + /** + * Creates a function that negates the result of the predicate `func`. The + * `func` predicate is invoked with the `this` binding and arguments of the + * created function. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {Function} predicate The predicate to negate. + * @returns {Function} Returns the new negated function. + * @example + * + * function isEven(n) { + * return n % 2 == 0; + * } + * + * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven)); + * // => [1, 3, 5] + */ + function negate(predicate) { + if (typeof predicate != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return function() { + var args = arguments; + return !predicate.apply(this, args); + }; + } + + /** + * Creates a function that is restricted to invoking `func` once. Repeat calls + * to the function return the value of the first invocation. The `func` is + * invoked with the `this` binding and arguments of the created function. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * var initialize = _.once(createApplication); + * initialize(); + * initialize(); + * // => `createApplication` is invoked once + */ + function once(func) { + return before(2, func); + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates a shallow clone of `value`. + * + * **Note:** This method is loosely based on the + * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) + * and supports cloning arrays, array buffers, booleans, date objects, maps, + * numbers, `Object` objects, regexes, sets, strings, symbols, and typed + * arrays. The own enumerable properties of `arguments` objects are cloned + * as plain objects. An empty object is returned for uncloneable values such + * as error objects, functions, DOM nodes, and WeakMaps. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to clone. + * @returns {*} Returns the cloned value. + * @see _.cloneDeep + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var shallow = _.clone(objects); + * console.log(shallow[0] === objects[0]); + * // => true + */ + function clone(value) { + if (!isObject(value)) { + return value; + } + return isArray(value) ? copyArray(value) : copyObject(value, nativeKeys(value)); + } + + /** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ + function eq(value, other) { + return value === other || (value !== value && other !== other); + } + + /** + * Checks if `value` is likely an `arguments` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + * else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ + var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { + return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && + !propertyIsEnumerable.call(value, 'callee'); + }; + + /** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ + var isArray = Array.isArray; + + /** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */ + function isArrayLike(value) { + return value != null && isLength(value.length) && !isFunction(value); + } + + /** + * Checks if `value` is classified as a boolean primitive or object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a boolean, else `false`. + * @example + * + * _.isBoolean(false); + * // => true + * + * _.isBoolean(null); + * // => false + */ + function isBoolean(value) { + return value === true || value === false || + (isObjectLike(value) && baseGetTag(value) == boolTag); + } + + /** + * Checks if `value` is classified as a `Date` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a date object, else `false`. + * @example + * + * _.isDate(new Date); + * // => true + * + * _.isDate('Mon April 23 2012'); + * // => false + */ + var isDate = baseIsDate; + + /** + * Checks if `value` is an empty object, collection, map, or set. + * + * Objects are considered empty if they have no own enumerable string keyed + * properties. + * + * Array-like values such as `arguments` objects, arrays, buffers, strings, or + * jQuery-like collections are considered empty if they have a `length` of `0`. + * Similarly, maps and sets are considered empty if they have a `size` of `0`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is empty, else `false`. + * @example + * + * _.isEmpty(null); + * // => true + * + * _.isEmpty(true); + * // => true + * + * _.isEmpty(1); + * // => true + * + * _.isEmpty([1, 2, 3]); + * // => false + * + * _.isEmpty({ 'a': 1 }); + * // => false + */ + function isEmpty(value) { + if (isArrayLike(value) && + (isArray(value) || isString(value) || + isFunction(value.splice) || isArguments(value))) { + return !value.length; + } + return !nativeKeys(value).length; + } + + /** + * Performs a deep comparison between two values to determine if they are + * equivalent. + * + * **Note:** This method supports comparing arrays, array buffers, booleans, + * date objects, error objects, maps, numbers, `Object` objects, regexes, + * sets, strings, symbols, and typed arrays. `Object` objects are compared + * by their own, not inherited, enumerable properties. Functions and DOM + * nodes are compared by strict equality, i.e. `===`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.isEqual(object, other); + * // => true + * + * object === other; + * // => false + */ + function isEqual(value, other) { + return baseIsEqual(value, other); + } + + /** + * Checks if `value` is a finite primitive number. + * + * **Note:** This method is based on + * [`Number.isFinite`](https://mdn.io/Number/isFinite). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a finite number, else `false`. + * @example + * + * _.isFinite(3); + * // => true + * + * _.isFinite(Number.MIN_VALUE); + * // => true + * + * _.isFinite(Infinity); + * // => false + * + * _.isFinite('3'); + * // => false + */ + function isFinite(value) { + return typeof value == 'number' && nativeIsFinite(value); + } + + /** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ + function isFunction(value) { + if (!isObject(value)) { + return false; + } + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 9 which returns 'object' for typed arrays and other constructors. + var tag = baseGetTag(value); + return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; + } + + /** + * Checks if `value` is a valid array-like length. + * + * **Note:** This method is loosely based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */ + function isLength(value) { + return typeof value == 'number' && + value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; + } + + /** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ + function isObject(value) { + var type = typeof value; + return value != null && (type == 'object' || type == 'function'); + } + + /** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ + function isObjectLike(value) { + return value != null && typeof value == 'object'; + } + + /** + * Checks if `value` is `NaN`. + * + * **Note:** This method is based on + * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as + * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for + * `undefined` and other non-number values. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + * @example + * + * _.isNaN(NaN); + * // => true + * + * _.isNaN(new Number(NaN)); + * // => true + * + * isNaN(undefined); + * // => true + * + * _.isNaN(undefined); + * // => false + */ + function isNaN(value) { + // An `NaN` primitive is the only value that is not equal to itself. + // Perform the `toStringTag` check first to avoid errors with some + // ActiveX objects in IE. + return isNumber(value) && value != +value; + } + + /** + * Checks if `value` is `null`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `null`, else `false`. + * @example + * + * _.isNull(null); + * // => true + * + * _.isNull(void 0); + * // => false + */ + function isNull(value) { + return value === null; + } + + /** + * Checks if `value` is classified as a `Number` primitive or object. + * + * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are + * classified as numbers, use the `_.isFinite` method. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a number, else `false`. + * @example + * + * _.isNumber(3); + * // => true + * + * _.isNumber(Number.MIN_VALUE); + * // => true + * + * _.isNumber(Infinity); + * // => true + * + * _.isNumber('3'); + * // => false + */ + function isNumber(value) { + return typeof value == 'number' || + (isObjectLike(value) && baseGetTag(value) == numberTag); + } + + /** + * Checks if `value` is classified as a `RegExp` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. + * @example + * + * _.isRegExp(/abc/); + * // => true + * + * _.isRegExp('/abc/'); + * // => false + */ + var isRegExp = baseIsRegExp; + + /** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a string, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ + function isString(value) { + return typeof value == 'string' || + (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag); + } + + /** + * Checks if `value` is `undefined`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. + * @example + * + * _.isUndefined(void 0); + * // => true + * + * _.isUndefined(null); + * // => false + */ + function isUndefined(value) { + return value === undefined; + } + + /** + * Converts `value` to an array. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to convert. + * @returns {Array} Returns the converted array. + * @example + * + * _.toArray({ 'a': 1, 'b': 2 }); + * // => [1, 2] + * + * _.toArray('abc'); + * // => ['a', 'b', 'c'] + * + * _.toArray(1); + * // => [] + * + * _.toArray(null); + * // => [] + */ + function toArray(value) { + if (!isArrayLike(value)) { + return values(value); + } + return value.length ? copyArray(value) : []; + } + + /** + * Converts `value` to an integer. + * + * **Note:** This method is loosely based on + * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toInteger(3.2); + * // => 3 + * + * _.toInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toInteger(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toInteger('3.2'); + * // => 3 + */ + var toInteger = Number; + + /** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ + var toNumber = Number; + + /** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ + function toString(value) { + if (typeof value == 'string') { + return value; + } + return value == null ? '' : (value + ''); + } + + /*------------------------------------------------------------------------*/ + + /** + * Assigns own enumerable string keyed properties of source objects to the + * destination object. Source objects are applied from left to right. + * Subsequent sources overwrite property assignments of previous sources. + * + * **Note:** This method mutates `object` and is loosely based on + * [`Object.assign`](https://mdn.io/Object/assign). + * + * @static + * @memberOf _ + * @since 0.10.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.assignIn + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * function Bar() { + * this.c = 3; + * } + * + * Foo.prototype.b = 2; + * Bar.prototype.d = 4; + * + * _.assign({ 'a': 0 }, new Foo, new Bar); + * // => { 'a': 1, 'c': 3 } + */ + var assign = createAssigner(function(object, source) { + copyObject(source, nativeKeys(source), object); + }); + + /** + * This method is like `_.assign` except that it iterates over own and + * inherited source properties. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias extend + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.assign + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * function Bar() { + * this.c = 3; + * } + * + * Foo.prototype.b = 2; + * Bar.prototype.d = 4; + * + * _.assignIn({ 'a': 0 }, new Foo, new Bar); + * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 } + */ + var assignIn = createAssigner(function(object, source) { + copyObject(source, nativeKeysIn(source), object); + }); + + /** + * Creates an object that inherits from the `prototype` object. If a + * `properties` object is given, its own enumerable string keyed properties + * are assigned to the created object. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Object + * @param {Object} prototype The object to inherit from. + * @param {Object} [properties] The properties to assign to the object. + * @returns {Object} Returns the new object. + * @example + * + * function Shape() { + * this.x = 0; + * this.y = 0; + * } + * + * function Circle() { + * Shape.call(this); + * } + * + * Circle.prototype = _.create(Shape.prototype, { + * 'constructor': Circle + * }); + * + * var circle = new Circle; + * circle instanceof Circle; + * // => true + * + * circle instanceof Shape; + * // => true + */ + function create(prototype, properties) { + var result = baseCreate(prototype); + return properties == null ? result : assign(result, properties); + } + + /** + * Assigns own and inherited enumerable string keyed properties of source + * objects to the destination object for all destination properties that + * resolve to `undefined`. Source objects are applied from left to right. + * Once a property is set, additional values of the same property are ignored. + * + * **Note:** This method mutates `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.defaultsDeep + * @example + * + * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ + var defaults = baseRest(function(object, sources) { + object = Object(object); + + var index = -1; + var length = sources.length; + var guard = length > 2 ? sources[2] : undefined; + + if (guard && isIterateeCall(sources[0], sources[1], guard)) { + length = 1; + } + + while (++index < length) { + var source = sources[index]; + var props = keysIn(source); + var propsIndex = -1; + var propsLength = props.length; + + while (++propsIndex < propsLength) { + var key = props[propsIndex]; + var value = object[key]; + + if (value === undefined || + (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { + object[key] = source[key]; + } + } + } + + return object; + }); + + /** + * Checks if `path` is a direct property of `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = { 'a': { 'b': 2 } }; + * var other = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.has(object, 'a'); + * // => true + * + * _.has(object, 'a.b'); + * // => true + * + * _.has(object, ['a', 'b']); + * // => true + * + * _.has(other, 'a'); + * // => false + */ + function has(object, path) { + return object != null && hasOwnProperty.call(object, path); + } + + /** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ + var keys = nativeKeys; + + /** + * Creates an array of the own and inherited enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keysIn(new Foo); + * // => ['a', 'b', 'c'] (iteration order is not guaranteed) + */ + var keysIn = nativeKeysIn; + + /** + * Creates an object composed of the picked `object` properties. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pick(object, ['a', 'c']); + * // => { 'a': 1, 'c': 3 } + */ + var pick = flatRest(function(object, paths) { + return object == null ? {} : basePick(object, paths); + }); + + /** + * This method is like `_.get` except that if the resolved value is a + * function it's invoked with the `this` binding of its parent object and + * its result is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to resolve. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] }; + * + * _.result(object, 'a[0].b.c1'); + * // => 3 + * + * _.result(object, 'a[0].b.c2'); + * // => 4 + * + * _.result(object, 'a[0].b.c3', 'default'); + * // => 'default' + * + * _.result(object, 'a[0].b.c3', _.constant('default')); + * // => 'default' + */ + function result(object, path, defaultValue) { + var value = object == null ? undefined : object[path]; + if (value === undefined) { + value = defaultValue; + } + return isFunction(value) ? value.call(object) : value; + } + + /** + * Creates an array of the own enumerable string keyed property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ + function values(object) { + return object == null ? [] : baseValues(object, keys(object)); + } + + /*------------------------------------------------------------------------*/ + + /** + * Converts the characters "&", "<", ">", '"', and "'" in `string` to their + * corresponding HTML entities. + * + * **Note:** No other characters are escaped. To escape additional + * characters use a third-party library like [_he_](https://mths.be/he). + * + * Though the ">" character is escaped for symmetry, characters like + * ">" and "/" don't need escaping in HTML and have no special meaning + * unless they're part of a tag or unquoted attribute value. See + * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands) + * (under "semi-related fun fact") for more details. + * + * When working with HTML you should always + * [quote attribute values](http://wonko.com/post/html-escaping) to reduce + * XSS vectors. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category String + * @param {string} [string=''] The string to escape. + * @returns {string} Returns the escaped string. + * @example + * + * _.escape('fred, barney, & pebbles'); + * // => 'fred, barney, & pebbles' + */ + function escape(string) { + string = toString(string); + return (string && reHasUnescapedHtml.test(string)) + ? string.replace(reUnescapedHtml, escapeHtmlChar) + : string; + } + + /*------------------------------------------------------------------------*/ + + /** + * This method returns the first argument it receives. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {*} value Any value. + * @returns {*} Returns `value`. + * @example + * + * var object = { 'a': 1 }; + * + * console.log(_.identity(object) === object); + * // => true + */ + function identity(value) { + return value; + } + + /** + * Creates a function that invokes `func` with the arguments of the created + * function. If `func` is a property name, the created function returns the + * property value for a given element. If `func` is an array or object, the + * created function returns `true` for elements that contain the equivalent + * source properties, otherwise it returns `false`. + * + * @static + * @since 4.0.0 + * @memberOf _ + * @category Util + * @param {*} [func=_.identity] The value to convert to a callback. + * @returns {Function} Returns the callback. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true })); + * // => [{ 'user': 'barney', 'age': 36, 'active': true }] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, _.iteratee(['user', 'fred'])); + * // => [{ 'user': 'fred', 'age': 40 }] + * + * // The `_.property` iteratee shorthand. + * _.map(users, _.iteratee('user')); + * // => ['barney', 'fred'] + * + * // Create custom iteratee shorthands. + * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) { + * return !_.isRegExp(func) ? iteratee(func) : function(string) { + * return func.test(string); + * }; + * }); + * + * _.filter(['abc', 'def'], /ef/); + * // => ['def'] + */ + var iteratee = baseIteratee; + + /** + * Creates a function that performs a partial deep comparison between a given + * object and `source`, returning `true` if the given object has equivalent + * property values, else `false`. + * + * **Note:** The created function is equivalent to `_.isMatch` with `source` + * partially applied. + * + * Partial comparisons will match empty array and empty object `source` + * values against any array or object value, respectively. See `_.isEqual` + * for a list of supported value comparisons. + * + * **Note:** Multiple values can be checked by combining several matchers + * using `_.overSome` + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Util + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + * @example + * + * var objects = [ + * { 'a': 1, 'b': 2, 'c': 3 }, + * { 'a': 4, 'b': 5, 'c': 6 } + * ]; + * + * _.filter(objects, _.matches({ 'a': 4, 'c': 6 })); + * // => [{ 'a': 4, 'b': 5, 'c': 6 }] + * + * // Checking for several possible values + * _.filter(objects, _.overSome([_.matches({ 'a': 1 }), _.matches({ 'a': 4 })])); + * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }] + */ + function matches(source) { + return baseMatches(assign({}, source)); + } + + /** + * Adds all own enumerable string keyed function properties of a source + * object to the destination object. If `object` is a function, then methods + * are added to its prototype as well. + * + * **Note:** Use `_.runInContext` to create a pristine `lodash` function to + * avoid conflicts caused by modifying the original. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {Function|Object} [object=lodash] The destination object. + * @param {Object} source The object of functions to add. + * @param {Object} [options={}] The options object. + * @param {boolean} [options.chain=true] Specify whether mixins are chainable. + * @returns {Function|Object} Returns `object`. + * @example + * + * function vowels(string) { + * return _.filter(string, function(v) { + * return /[aeiou]/i.test(v); + * }); + * } + * + * _.mixin({ 'vowels': vowels }); + * _.vowels('fred'); + * // => ['e'] + * + * _('fred').vowels().value(); + * // => ['e'] + * + * _.mixin({ 'vowels': vowels }, { 'chain': false }); + * _('fred').vowels(); + * // => ['e'] + */ + function mixin(object, source, options) { + var props = keys(source), + methodNames = baseFunctions(source, props); + + if (options == null && + !(isObject(source) && (methodNames.length || !props.length))) { + options = source; + source = object; + object = this; + methodNames = baseFunctions(source, keys(source)); + } + var chain = !(isObject(options) && 'chain' in options) || !!options.chain, + isFunc = isFunction(object); + + baseEach(methodNames, function(methodName) { + var func = source[methodName]; + object[methodName] = func; + if (isFunc) { + object.prototype[methodName] = function() { + var chainAll = this.__chain__; + if (chain || chainAll) { + var result = object(this.__wrapped__), + actions = result.__actions__ = copyArray(this.__actions__); + + actions.push({ 'func': func, 'args': arguments, 'thisArg': object }); + result.__chain__ = chainAll; + return result; + } + return func.apply(object, arrayPush([this.value()], arguments)); + }; + } + }); + + return object; + } + + /** + * Reverts the `_` variable to its previous value and returns a reference to + * the `lodash` function. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @returns {Function} Returns the `lodash` function. + * @example + * + * var lodash = _.noConflict(); + */ + function noConflict() { + if (root._ === this) { + root._ = oldDash; + } + return this; + } + + /** + * This method returns `undefined`. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Util + * @example + * + * _.times(2, _.noop); + * // => [undefined, undefined] + */ + function noop() { + // No operation performed. + } + + /** + * Generates a unique ID. If `prefix` is given, the ID is appended to it. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {string} [prefix=''] The value to prefix the ID with. + * @returns {string} Returns the unique ID. + * @example + * + * _.uniqueId('contact_'); + * // => 'contact_104' + * + * _.uniqueId(); + * // => '105' + */ + function uniqueId(prefix) { + var id = ++idCounter; + return toString(prefix) + id; + } + + /*------------------------------------------------------------------------*/ + + /** + * Computes the maximum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the maximum value. + * @example + * + * _.max([4, 2, 8, 6]); + * // => 8 + * + * _.max([]); + * // => undefined + */ + function max(array) { + return (array && array.length) + ? baseExtremum(array, identity, baseGt) + : undefined; + } + + /** + * Computes the minimum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the minimum value. + * @example + * + * _.min([4, 2, 8, 6]); + * // => 2 + * + * _.min([]); + * // => undefined + */ + function min(array) { + return (array && array.length) + ? baseExtremum(array, identity, baseLt) + : undefined; + } + + /*------------------------------------------------------------------------*/ + + // Add methods that return wrapped values in chain sequences. + lodash.assignIn = assignIn; + lodash.before = before; + lodash.bind = bind; + lodash.chain = chain; + lodash.compact = compact; + lodash.concat = concat; + lodash.create = create; + lodash.defaults = defaults; + lodash.defer = defer; + lodash.delay = delay; + lodash.filter = filter; + lodash.flatten = flatten; + lodash.flattenDeep = flattenDeep; + lodash.iteratee = iteratee; + lodash.keys = keys; + lodash.map = map; + lodash.matches = matches; + lodash.mixin = mixin; + lodash.negate = negate; + lodash.once = once; + lodash.pick = pick; + lodash.slice = slice; + lodash.sortBy = sortBy; + lodash.tap = tap; + lodash.thru = thru; + lodash.toArray = toArray; + lodash.values = values; + + // Add aliases. + lodash.extend = assignIn; + + // Add methods to `lodash.prototype`. + mixin(lodash, lodash); + + /*------------------------------------------------------------------------*/ + + // Add methods that return unwrapped values in chain sequences. + lodash.clone = clone; + lodash.escape = escape; + lodash.every = every; + lodash.find = find; + lodash.forEach = forEach; + lodash.has = has; + lodash.head = head; + lodash.identity = identity; + lodash.indexOf = indexOf; + lodash.isArguments = isArguments; + lodash.isArray = isArray; + lodash.isBoolean = isBoolean; + lodash.isDate = isDate; + lodash.isEmpty = isEmpty; + lodash.isEqual = isEqual; + lodash.isFinite = isFinite; + lodash.isFunction = isFunction; + lodash.isNaN = isNaN; + lodash.isNull = isNull; + lodash.isNumber = isNumber; + lodash.isObject = isObject; + lodash.isRegExp = isRegExp; + lodash.isString = isString; + lodash.isUndefined = isUndefined; + lodash.last = last; + lodash.max = max; + lodash.min = min; + lodash.noConflict = noConflict; + lodash.noop = noop; + lodash.reduce = reduce; + lodash.result = result; + lodash.size = size; + lodash.some = some; + lodash.uniqueId = uniqueId; + + // Add aliases. + lodash.each = forEach; + lodash.first = head; + + mixin(lodash, (function() { + var source = {}; + baseForOwn(lodash, function(func, methodName) { + if (!hasOwnProperty.call(lodash.prototype, methodName)) { + source[methodName] = func; + } + }); + return source; + }()), { 'chain': false }); + + /*------------------------------------------------------------------------*/ + + /** + * The semantic version number. + * + * @static + * @memberOf _ + * @type {string} + */ + lodash.VERSION = VERSION; + + // Add `Array` methods to `lodash.prototype`. + baseEach(['pop', 'join', 'replace', 'reverse', 'split', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) { + var func = (/^(?:replace|split)$/.test(methodName) ? String.prototype : arrayProto)[methodName], + chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru', + retUnwrapped = /^(?:pop|join|replace|shift)$/.test(methodName); + + lodash.prototype[methodName] = function() { + var args = arguments; + if (retUnwrapped && !this.__chain__) { + var value = this.value(); + return func.apply(isArray(value) ? value : [], args); + } + return this[chainName](function(value) { + return func.apply(isArray(value) ? value : [], args); + }); + }; + }); + + // Add chain sequence methods to the `lodash` wrapper. + lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue; + + /*--------------------------------------------------------------------------*/ + + // Some AMD build optimizers, like r.js, check for condition patterns like: + if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) { + // Expose Lodash on the global object to prevent errors when Lodash is + // loaded by a script tag in the presence of an AMD loader. + // See http://requirejs.org/docs/errors.html#mismatch for more details. + // Use `_.noConflict` to remove Lodash from the global object. + root._ = lodash; + + // Define as an anonymous module so, through path mapping, it can be + // referenced as the "underscore" module. + define(function() { + return lodash; + }); + } + // Check for `exports` after `define` in case a build optimizer adds it. + else if (freeModule) { + // Export for Node.js. + (freeModule.exports = lodash)._ = lodash; + // Export for CommonJS support. + freeExports._ = lodash; + } + else { + // Export to the global object. + root._ = lodash; + } +}.call(this)); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/core.min.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/core.min.js new file mode 100644 index 00000000..f4095256 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/core.min.js @@ -0,0 +1,30 @@ +/** + * @license + * Lodash (Custom Build) lodash.com/license | Underscore.js 1.8.3 underscorejs.org/LICENSE + * Build: `lodash core -o ./dist/lodash.core.js` + */ +;(function(){function n(n,t){return n.push.apply(n,t),n}function t(n,t,r,e){for(var u=n.length,o=r+(e?1:-1);e?o--:++o0&&e(f)?r>1?y(f,r-1,e,u,o):n(o,f):u||(o[o.length]=f)}return o}function g(n,t){return n&&Vt(n,t,cr)}function _(n,t){return v(t,function(t){return Tn(n[t])})}function b(n){return W(n)}function j(n,t){return n>t}function d(n){return In(n)&&b(n)==ht}function m(n,t,r,e,u){return n===t||(null==n||null==t||!In(n)&&!In(t)?n!==n&&t!==t:O(n,t,r,e,m,u))}function O(n,t,r,e,u,o){ +var i=Zt(n),c=Zt(t),f=i?lt:b(n),a=c?lt:b(t);f=f==at?bt:f,a=a==at?bt:a;var l=f==bt,p=a==bt,s=f==a;o||(o=[]);var h=Lt(o,function(t){return t[0]==n}),v=Lt(o,function(n){return n[0]==t});if(h&&v)return h[1]==t;if(o.push([n,t]),o.push([t,n]),s&&!l){var y=i?J(n,t,r,e,u,o):M(n,t,f,r,e,u,o);return o.pop(),y}if(!(r&et)){var g=l&&Rt.call(n,"__wrapped__"),_=p&&Rt.call(t,"__wrapped__");if(g||_){var j=g?n.value():n,d=_?t.value():t,y=u(j,d,r,e,o);return o.pop(),y}}if(!s)return false;var y=U(n,t,r,e,u,o);return o.pop(), +y}function x(n){return In(n)&&b(n)==dt}function w(n){return typeof n=="function"?n:null==n?Hn:(typeof n=="object"?N:r)(n)}function A(n,t){return nu?0:u+t),r=r>u?u:r,r<0&&(r+=u),u=t>r?0:r-t>>>0,t>>>=0;for(var o=Array(u);++et||o&&i&&f&&!c&&!a||e&&i&&f||!r&&f||!u)return 1; +if(!e&&!o&&!a&&n1?r[u-1]:nt;for(o=n.length>3&&typeof o=="function"?(u--,o):nt,t=Object(t);++e-1?u[o?t[i]:i]:nt}}function G(n,t,r,e){function u(){for(var t=-1,c=arguments.length,f=-1,a=e.length,l=Array(a+c),p=this&&this!==kt&&this instanceof u?i:n;++fc))return false;var a=o.get(n),l=o.get(t);if(a&&l)return a==t&&l==n;for(var p=-1,s=true,h=r&ut?[]:nt;++p-1&&n%1==0&&n0&&(r=t.apply(this,arguments)),n<=1&&(t=nt),r}}function mn(n){if(typeof n!="function")throw new TypeError(rt);return function(){return!n.apply(this,arguments)}; +}function On(n){return dn(2,n)}function xn(n){return Bn(n)?Zt(n)?S(n):$(n,Gt(n)):n}function wn(n,t){return n===t||n!==n&&t!==t}function An(n){return null!=n&&Sn(n.length)&&!Tn(n)}function En(n){return n===true||n===false||In(n)&&b(n)==st}function Nn(n){return An(n)&&(Zt(n)||Dn(n)||Tn(n.splice)||Yt(n))?!n.length:!Gt(n).length}function kn(n,t){return m(n,t)}function Fn(n){return typeof n=="number"&&Ct(n)}function Tn(n){if(!Bn(n))return false;var t=b(n);return t==yt||t==gt||t==pt||t==jt}function Sn(n){return typeof n=="number"&&n>-1&&n%1==0&&n<=ft; +}function Bn(n){var t=typeof n;return null!=n&&("object"==t||"function"==t)}function In(n){return null!=n&&typeof n=="object"}function Rn(n){return qn(n)&&n!=+n}function $n(n){return null===n}function qn(n){return typeof n=="number"||In(n)&&b(n)==_t}function Dn(n){return typeof n=="string"||!Zt(n)&&In(n)&&b(n)==mt}function Pn(n){return n===nt}function zn(n){return An(n)?n.length?S(n):[]:Un(n)}function Cn(n){return typeof n=="string"?n:null==n?"":n+""}function Gn(n,t){var r=Mt(n);return null==t?r:ur(r,t); +}function Jn(n,t){return null!=n&&Rt.call(n,t)}function Mn(n,t,r){var e=null==n?nt:n[t];return e===nt&&(e=r),Tn(e)?e.call(n):e}function Un(n){return null==n?[]:o(n,cr(n))}function Vn(n){return n=Cn(n),n&&xt.test(n)?n.replace(Ot,St):n}function Hn(n){return n}function Kn(n){return N(ur({},n))}function Ln(t,r,e){var u=cr(r),o=_(r,u);null!=e||Bn(r)&&(o.length||!u.length)||(e=r,r=t,t=this,o=_(r,cr(r)));var i=!(Bn(e)&&"chain"in e&&!e.chain),c=Tn(t);return Ut(o,function(e){var u=r[e];t[e]=u,c&&(t.prototype[e]=function(){ +var r=this.__chain__;if(i||r){var e=t(this.__wrapped__);return(e.__actions__=S(this.__actions__)).push({func:u,args:arguments,thisArg:t}),e.__chain__=r,e}return u.apply(t,n([this.value()],arguments))})}),t}function Qn(){return kt._===this&&(kt._=Dt),this}function Wn(){}function Xn(n){var t=++$t;return Cn(n)+t}function Yn(n){return n&&n.length?h(n,Hn,j):nt}function Zn(n){return n&&n.length?h(n,Hn,A):nt}var nt,tt="4.17.20",rt="Expected a function",et=1,ut=2,ot=1,it=32,ct=1/0,ft=9007199254740991,at="[object Arguments]",lt="[object Array]",pt="[object AsyncFunction]",st="[object Boolean]",ht="[object Date]",vt="[object Error]",yt="[object Function]",gt="[object GeneratorFunction]",_t="[object Number]",bt="[object Object]",jt="[object Proxy]",dt="[object RegExp]",mt="[object String]",Ot=/[&<>"']/g,xt=RegExp(Ot.source),wt=/^(?:0|[1-9]\d*)$/,At={ +"&":"&","<":"<",">":">",'"':""","'":"'"},Et=typeof global=="object"&&global&&global.Object===Object&&global,Nt=typeof self=="object"&&self&&self.Object===Object&&self,kt=Et||Nt||Function("return this")(),Ft=typeof exports=="object"&&exports&&!exports.nodeType&&exports,Tt=Ft&&typeof module=="object"&&module&&!module.nodeType&&module,St=e(At),Bt=Array.prototype,It=Object.prototype,Rt=It.hasOwnProperty,$t=0,qt=It.toString,Dt=kt._,Pt=Object.create,zt=It.propertyIsEnumerable,Ct=kt.isFinite,Gt=i(Object.keys,Object),Jt=Math.max,Mt=function(){ +function n(){}return function(t){if(!Bn(t))return{};if(Pt)return Pt(t);n.prototype=t;var r=new n;return n.prototype=nt,r}}();f.prototype=Mt(c.prototype),f.prototype.constructor=f;var Ut=D(g),Vt=P(),Ht=Wn,Kt=Hn,Lt=C(nn),Qt=F(function(n,t,r){return G(n,ot|it,t,r)}),Wt=F(function(n,t){return p(n,1,t)}),Xt=F(function(n,t,r){return p(n,er(t)||0,r)}),Yt=Ht(function(){return arguments}())?Ht:function(n){return In(n)&&Rt.call(n,"callee")&&!zt.call(n,"callee")},Zt=Array.isArray,nr=d,tr=x,rr=Number,er=Number,ur=q(function(n,t){ +$(t,Gt(t),n)}),or=q(function(n,t){$(t,Q(t),n)}),ir=F(function(n,t){n=Object(n);var r=-1,e=t.length,u=e>2?t[2]:nt;for(u&&L(t[0],t[1],u)&&(e=1);++r { '4': 1, '6': 2 } + * + * // The `_.property` iteratee shorthand. + * _.countBy(['one', 'two', 'three'], 'length'); + * // => { '3': 2, '5': 1 } + */ +var countBy = createAggregator(function(result, value, key) { + if (hasOwnProperty.call(result, key)) { + ++result[key]; + } else { + baseAssignValue(result, key, 1); + } +}); + +module.exports = countBy; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/create.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/create.js new file mode 100644 index 00000000..919edb85 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/create.js @@ -0,0 +1,43 @@ +var baseAssign = require('./_baseAssign'), + baseCreate = require('./_baseCreate'); + +/** + * Creates an object that inherits from the `prototype` object. If a + * `properties` object is given, its own enumerable string keyed properties + * are assigned to the created object. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Object + * @param {Object} prototype The object to inherit from. + * @param {Object} [properties] The properties to assign to the object. + * @returns {Object} Returns the new object. + * @example + * + * function Shape() { + * this.x = 0; + * this.y = 0; + * } + * + * function Circle() { + * Shape.call(this); + * } + * + * Circle.prototype = _.create(Shape.prototype, { + * 'constructor': Circle + * }); + * + * var circle = new Circle; + * circle instanceof Circle; + * // => true + * + * circle instanceof Shape; + * // => true + */ +function create(prototype, properties) { + var result = baseCreate(prototype); + return properties == null ? result : baseAssign(result, properties); +} + +module.exports = create; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/curry.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/curry.js new file mode 100644 index 00000000..918db1a4 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/curry.js @@ -0,0 +1,57 @@ +var createWrap = require('./_createWrap'); + +/** Used to compose bitmasks for function metadata. */ +var WRAP_CURRY_FLAG = 8; + +/** + * Creates a function that accepts arguments of `func` and either invokes + * `func` returning its result, if at least `arity` number of arguments have + * been provided, or returns a function that accepts the remaining `func` + * arguments, and so on. The arity of `func` may be specified if `func.length` + * is not sufficient. + * + * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds, + * may be used as a placeholder for provided arguments. + * + * **Note:** This method doesn't set the "length" property of curried functions. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Function + * @param {Function} func The function to curry. + * @param {number} [arity=func.length] The arity of `func`. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Function} Returns the new curried function. + * @example + * + * var abc = function(a, b, c) { + * return [a, b, c]; + * }; + * + * var curried = _.curry(abc); + * + * curried(1)(2)(3); + * // => [1, 2, 3] + * + * curried(1, 2)(3); + * // => [1, 2, 3] + * + * curried(1, 2, 3); + * // => [1, 2, 3] + * + * // Curried with placeholders. + * curried(1)(_, 3)(2); + * // => [1, 2, 3] + */ +function curry(func, arity, guard) { + arity = guard ? undefined : arity; + var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity); + result.placeholder = curry.placeholder; + return result; +} + +// Assign default placeholders. +curry.placeholder = {}; + +module.exports = curry; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/curryRight.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/curryRight.js new file mode 100644 index 00000000..c85b6f33 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/curryRight.js @@ -0,0 +1,54 @@ +var createWrap = require('./_createWrap'); + +/** Used to compose bitmasks for function metadata. */ +var WRAP_CURRY_RIGHT_FLAG = 16; + +/** + * This method is like `_.curry` except that arguments are applied to `func` + * in the manner of `_.partialRight` instead of `_.partial`. + * + * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for provided arguments. + * + * **Note:** This method doesn't set the "length" property of curried functions. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {Function} func The function to curry. + * @param {number} [arity=func.length] The arity of `func`. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Function} Returns the new curried function. + * @example + * + * var abc = function(a, b, c) { + * return [a, b, c]; + * }; + * + * var curried = _.curryRight(abc); + * + * curried(3)(2)(1); + * // => [1, 2, 3] + * + * curried(2, 3)(1); + * // => [1, 2, 3] + * + * curried(1, 2, 3); + * // => [1, 2, 3] + * + * // Curried with placeholders. + * curried(3)(1, _)(2); + * // => [1, 2, 3] + */ +function curryRight(func, arity, guard) { + arity = guard ? undefined : arity; + var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity); + result.placeholder = curryRight.placeholder; + return result; +} + +// Assign default placeholders. +curryRight.placeholder = {}; + +module.exports = curryRight; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/date.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/date.js new file mode 100644 index 00000000..cbf5b410 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/date.js @@ -0,0 +1,3 @@ +module.exports = { + 'now': require('./now') +}; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/debounce.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/debounce.js new file mode 100644 index 00000000..8f751d53 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/debounce.js @@ -0,0 +1,191 @@ +var isObject = require('./isObject'), + now = require('./now'), + toNumber = require('./toNumber'); + +/** Error message constants. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max, + nativeMin = Math.min; + +/** + * Creates a debounced function that delays invoking `func` until after `wait` + * milliseconds have elapsed since the last time the debounced function was + * invoked. The debounced function comes with a `cancel` method to cancel + * delayed `func` invocations and a `flush` method to immediately invoke them. + * Provide `options` to indicate whether `func` should be invoked on the + * leading and/or trailing edge of the `wait` timeout. The `func` is invoked + * with the last arguments provided to the debounced function. Subsequent + * calls to the debounced function return the result of the last `func` + * invocation. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is + * invoked on the trailing edge of the timeout only if the debounced function + * is invoked more than once during the `wait` timeout. + * + * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred + * until to the next tick, similar to `setTimeout` with a timeout of `0`. + * + * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) + * for details over the differences between `_.debounce` and `_.throttle`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to debounce. + * @param {number} [wait=0] The number of milliseconds to delay. + * @param {Object} [options={}] The options object. + * @param {boolean} [options.leading=false] + * Specify invoking on the leading edge of the timeout. + * @param {number} [options.maxWait] + * The maximum time `func` is allowed to be delayed before it's invoked. + * @param {boolean} [options.trailing=true] + * Specify invoking on the trailing edge of the timeout. + * @returns {Function} Returns the new debounced function. + * @example + * + * // Avoid costly calculations while the window size is in flux. + * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); + * + * // Invoke `sendMail` when clicked, debouncing subsequent calls. + * jQuery(element).on('click', _.debounce(sendMail, 300, { + * 'leading': true, + * 'trailing': false + * })); + * + * // Ensure `batchLog` is invoked once after 1 second of debounced calls. + * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 }); + * var source = new EventSource('/stream'); + * jQuery(source).on('message', debounced); + * + * // Cancel the trailing debounced invocation. + * jQuery(window).on('popstate', debounced.cancel); + */ +function debounce(func, wait, options) { + var lastArgs, + lastThis, + maxWait, + result, + timerId, + lastCallTime, + lastInvokeTime = 0, + leading = false, + maxing = false, + trailing = true; + + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + wait = toNumber(wait) || 0; + if (isObject(options)) { + leading = !!options.leading; + maxing = 'maxWait' in options; + maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait; + trailing = 'trailing' in options ? !!options.trailing : trailing; + } + + function invokeFunc(time) { + var args = lastArgs, + thisArg = lastThis; + + lastArgs = lastThis = undefined; + lastInvokeTime = time; + result = func.apply(thisArg, args); + return result; + } + + function leadingEdge(time) { + // Reset any `maxWait` timer. + lastInvokeTime = time; + // Start the timer for the trailing edge. + timerId = setTimeout(timerExpired, wait); + // Invoke the leading edge. + return leading ? invokeFunc(time) : result; + } + + function remainingWait(time) { + var timeSinceLastCall = time - lastCallTime, + timeSinceLastInvoke = time - lastInvokeTime, + timeWaiting = wait - timeSinceLastCall; + + return maxing + ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) + : timeWaiting; + } + + function shouldInvoke(time) { + var timeSinceLastCall = time - lastCallTime, + timeSinceLastInvoke = time - lastInvokeTime; + + // Either this is the first call, activity has stopped and we're at the + // trailing edge, the system time has gone backwards and we're treating + // it as the trailing edge, or we've hit the `maxWait` limit. + return (lastCallTime === undefined || (timeSinceLastCall >= wait) || + (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait)); + } + + function timerExpired() { + var time = now(); + if (shouldInvoke(time)) { + return trailingEdge(time); + } + // Restart the timer. + timerId = setTimeout(timerExpired, remainingWait(time)); + } + + function trailingEdge(time) { + timerId = undefined; + + // Only invoke if we have `lastArgs` which means `func` has been + // debounced at least once. + if (trailing && lastArgs) { + return invokeFunc(time); + } + lastArgs = lastThis = undefined; + return result; + } + + function cancel() { + if (timerId !== undefined) { + clearTimeout(timerId); + } + lastInvokeTime = 0; + lastArgs = lastCallTime = lastThis = timerId = undefined; + } + + function flush() { + return timerId === undefined ? result : trailingEdge(now()); + } + + function debounced() { + var time = now(), + isInvoking = shouldInvoke(time); + + lastArgs = arguments; + lastThis = this; + lastCallTime = time; + + if (isInvoking) { + if (timerId === undefined) { + return leadingEdge(lastCallTime); + } + if (maxing) { + // Handle invocations in a tight loop. + clearTimeout(timerId); + timerId = setTimeout(timerExpired, wait); + return invokeFunc(lastCallTime); + } + } + if (timerId === undefined) { + timerId = setTimeout(timerExpired, wait); + } + return result; + } + debounced.cancel = cancel; + debounced.flush = flush; + return debounced; +} + +module.exports = debounce; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/deburr.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/deburr.js new file mode 100644 index 00000000..f85e314a --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/deburr.js @@ -0,0 +1,45 @@ +var deburrLetter = require('./_deburrLetter'), + toString = require('./toString'); + +/** Used to match Latin Unicode letters (excluding mathematical operators). */ +var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g; + +/** Used to compose unicode character classes. */ +var rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange; + +/** Used to compose unicode capture groups. */ +var rsCombo = '[' + rsComboRange + ']'; + +/** + * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and + * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols). + */ +var reComboMark = RegExp(rsCombo, 'g'); + +/** + * Deburrs `string` by converting + * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table) + * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A) + * letters to basic Latin letters and removing + * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to deburr. + * @returns {string} Returns the deburred string. + * @example + * + * _.deburr('déjà vu'); + * // => 'deja vu' + */ +function deburr(string) { + string = toString(string); + return string && string.replace(reLatin, deburrLetter).replace(reComboMark, ''); +} + +module.exports = deburr; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/defaultTo.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/defaultTo.js new file mode 100644 index 00000000..5b333592 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/defaultTo.js @@ -0,0 +1,25 @@ +/** + * Checks `value` to determine whether a default value should be returned in + * its place. The `defaultValue` is returned if `value` is `NaN`, `null`, + * or `undefined`. + * + * @static + * @memberOf _ + * @since 4.14.0 + * @category Util + * @param {*} value The value to check. + * @param {*} defaultValue The default value. + * @returns {*} Returns the resolved value. + * @example + * + * _.defaultTo(1, 10); + * // => 1 + * + * _.defaultTo(undefined, 10); + * // => 10 + */ +function defaultTo(value, defaultValue) { + return (value == null || value !== value) ? defaultValue : value; +} + +module.exports = defaultTo; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/defaults.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/defaults.js new file mode 100644 index 00000000..c74df044 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/defaults.js @@ -0,0 +1,64 @@ +var baseRest = require('./_baseRest'), + eq = require('./eq'), + isIterateeCall = require('./_isIterateeCall'), + keysIn = require('./keysIn'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Assigns own and inherited enumerable string keyed properties of source + * objects to the destination object for all destination properties that + * resolve to `undefined`. Source objects are applied from left to right. + * Once a property is set, additional values of the same property are ignored. + * + * **Note:** This method mutates `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.defaultsDeep + * @example + * + * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ +var defaults = baseRest(function(object, sources) { + object = Object(object); + + var index = -1; + var length = sources.length; + var guard = length > 2 ? sources[2] : undefined; + + if (guard && isIterateeCall(sources[0], sources[1], guard)) { + length = 1; + } + + while (++index < length) { + var source = sources[index]; + var props = keysIn(source); + var propsIndex = -1; + var propsLength = props.length; + + while (++propsIndex < propsLength) { + var key = props[propsIndex]; + var value = object[key]; + + if (value === undefined || + (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { + object[key] = source[key]; + } + } + } + + return object; +}); + +module.exports = defaults; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/defaultsDeep.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/defaultsDeep.js new file mode 100644 index 00000000..9b5fa3ee --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/defaultsDeep.js @@ -0,0 +1,30 @@ +var apply = require('./_apply'), + baseRest = require('./_baseRest'), + customDefaultsMerge = require('./_customDefaultsMerge'), + mergeWith = require('./mergeWith'); + +/** + * This method is like `_.defaults` except that it recursively assigns + * default properties. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 3.10.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.defaults + * @example + * + * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } }); + * // => { 'a': { 'b': 2, 'c': 3 } } + */ +var defaultsDeep = baseRest(function(args) { + args.push(undefined, customDefaultsMerge); + return apply(mergeWith, undefined, args); +}); + +module.exports = defaultsDeep; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/defer.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/defer.js new file mode 100644 index 00000000..f6d6c6fa --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/defer.js @@ -0,0 +1,26 @@ +var baseDelay = require('./_baseDelay'), + baseRest = require('./_baseRest'); + +/** + * Defers invoking the `func` until the current call stack has cleared. Any + * additional arguments are provided to `func` when it's invoked. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to defer. + * @param {...*} [args] The arguments to invoke `func` with. + * @returns {number} Returns the timer id. + * @example + * + * _.defer(function(text) { + * console.log(text); + * }, 'deferred'); + * // => Logs 'deferred' after one millisecond. + */ +var defer = baseRest(function(func, args) { + return baseDelay(func, 1, args); +}); + +module.exports = defer; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/delay.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/delay.js new file mode 100644 index 00000000..bd554796 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/delay.js @@ -0,0 +1,28 @@ +var baseDelay = require('./_baseDelay'), + baseRest = require('./_baseRest'), + toNumber = require('./toNumber'); + +/** + * Invokes `func` after `wait` milliseconds. Any additional arguments are + * provided to `func` when it's invoked. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @param {...*} [args] The arguments to invoke `func` with. + * @returns {number} Returns the timer id. + * @example + * + * _.delay(function(text) { + * console.log(text); + * }, 1000, 'later'); + * // => Logs 'later' after one second. + */ +var delay = baseRest(function(func, wait, args) { + return baseDelay(func, toNumber(wait) || 0, args); +}); + +module.exports = delay; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/difference.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/difference.js new file mode 100644 index 00000000..fa28bb30 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/difference.js @@ -0,0 +1,33 @@ +var baseDifference = require('./_baseDifference'), + baseFlatten = require('./_baseFlatten'), + baseRest = require('./_baseRest'), + isArrayLikeObject = require('./isArrayLikeObject'); + +/** + * Creates an array of `array` values not included in the other given arrays + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. The order and references of result values are + * determined by the first array. + * + * **Note:** Unlike `_.pullAll`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @returns {Array} Returns the new array of filtered values. + * @see _.without, _.xor + * @example + * + * _.difference([2, 1], [2, 3]); + * // => [1] + */ +var difference = baseRest(function(array, values) { + return isArrayLikeObject(array) + ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true)) + : []; +}); + +module.exports = difference; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/differenceBy.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/differenceBy.js new file mode 100644 index 00000000..2cd63e7e --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/differenceBy.js @@ -0,0 +1,44 @@ +var baseDifference = require('./_baseDifference'), + baseFlatten = require('./_baseFlatten'), + baseIteratee = require('./_baseIteratee'), + baseRest = require('./_baseRest'), + isArrayLikeObject = require('./isArrayLikeObject'), + last = require('./last'); + +/** + * This method is like `_.difference` except that it accepts `iteratee` which + * is invoked for each element of `array` and `values` to generate the criterion + * by which they're compared. The order and references of result values are + * determined by the first array. The iteratee is invoked with one argument: + * (value). + * + * **Note:** Unlike `_.pullAllBy`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor); + * // => [1.2] + * + * // The `_.property` iteratee shorthand. + * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x'); + * // => [{ 'x': 2 }] + */ +var differenceBy = baseRest(function(array, values) { + var iteratee = last(values); + if (isArrayLikeObject(iteratee)) { + iteratee = undefined; + } + return isArrayLikeObject(array) + ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), baseIteratee(iteratee, 2)) + : []; +}); + +module.exports = differenceBy; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/differenceWith.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/differenceWith.js new file mode 100644 index 00000000..c0233f4b --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/differenceWith.js @@ -0,0 +1,40 @@ +var baseDifference = require('./_baseDifference'), + baseFlatten = require('./_baseFlatten'), + baseRest = require('./_baseRest'), + isArrayLikeObject = require('./isArrayLikeObject'), + last = require('./last'); + +/** + * This method is like `_.difference` except that it accepts `comparator` + * which is invoked to compare elements of `array` to `values`. The order and + * references of result values are determined by the first array. The comparator + * is invoked with two arguments: (arrVal, othVal). + * + * **Note:** Unlike `_.pullAllWith`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * + * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual); + * // => [{ 'x': 2, 'y': 1 }] + */ +var differenceWith = baseRest(function(array, values) { + var comparator = last(values); + if (isArrayLikeObject(comparator)) { + comparator = undefined; + } + return isArrayLikeObject(array) + ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator) + : []; +}); + +module.exports = differenceWith; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/divide.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/divide.js new file mode 100644 index 00000000..8cae0cd1 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/divide.js @@ -0,0 +1,22 @@ +var createMathOperation = require('./_createMathOperation'); + +/** + * Divide two numbers. + * + * @static + * @memberOf _ + * @since 4.7.0 + * @category Math + * @param {number} dividend The first number in a division. + * @param {number} divisor The second number in a division. + * @returns {number} Returns the quotient. + * @example + * + * _.divide(6, 4); + * // => 1.5 + */ +var divide = createMathOperation(function(dividend, divisor) { + return dividend / divisor; +}, 1); + +module.exports = divide; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/drop.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/drop.js new file mode 100644 index 00000000..d5c3cbaa --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/drop.js @@ -0,0 +1,38 @@ +var baseSlice = require('./_baseSlice'), + toInteger = require('./toInteger'); + +/** + * Creates a slice of `array` with `n` elements dropped from the beginning. + * + * @static + * @memberOf _ + * @since 0.5.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to drop. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.drop([1, 2, 3]); + * // => [2, 3] + * + * _.drop([1, 2, 3], 2); + * // => [3] + * + * _.drop([1, 2, 3], 5); + * // => [] + * + * _.drop([1, 2, 3], 0); + * // => [1, 2, 3] + */ +function drop(array, n, guard) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + return baseSlice(array, n < 0 ? 0 : n, length); +} + +module.exports = drop; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/dropRight.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/dropRight.js new file mode 100644 index 00000000..441fe996 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/dropRight.js @@ -0,0 +1,39 @@ +var baseSlice = require('./_baseSlice'), + toInteger = require('./toInteger'); + +/** + * Creates a slice of `array` with `n` elements dropped from the end. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to drop. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.dropRight([1, 2, 3]); + * // => [1, 2] + * + * _.dropRight([1, 2, 3], 2); + * // => [1] + * + * _.dropRight([1, 2, 3], 5); + * // => [] + * + * _.dropRight([1, 2, 3], 0); + * // => [1, 2, 3] + */ +function dropRight(array, n, guard) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + n = length - n; + return baseSlice(array, 0, n < 0 ? 0 : n); +} + +module.exports = dropRight; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/dropRightWhile.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/dropRightWhile.js new file mode 100644 index 00000000..9ad36a04 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/dropRightWhile.js @@ -0,0 +1,45 @@ +var baseIteratee = require('./_baseIteratee'), + baseWhile = require('./_baseWhile'); + +/** + * Creates a slice of `array` excluding elements dropped from the end. + * Elements are dropped until `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * _.dropRightWhile(users, function(o) { return !o.active; }); + * // => objects for ['barney'] + * + * // The `_.matches` iteratee shorthand. + * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false }); + * // => objects for ['barney', 'fred'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.dropRightWhile(users, ['active', false]); + * // => objects for ['barney'] + * + * // The `_.property` iteratee shorthand. + * _.dropRightWhile(users, 'active'); + * // => objects for ['barney', 'fred', 'pebbles'] + */ +function dropRightWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, baseIteratee(predicate, 3), true, true) + : []; +} + +module.exports = dropRightWhile; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/dropWhile.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/dropWhile.js new file mode 100644 index 00000000..903ef568 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/dropWhile.js @@ -0,0 +1,45 @@ +var baseIteratee = require('./_baseIteratee'), + baseWhile = require('./_baseWhile'); + +/** + * Creates a slice of `array` excluding elements dropped from the beginning. + * Elements are dropped until `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.dropWhile(users, function(o) { return !o.active; }); + * // => objects for ['pebbles'] + * + * // The `_.matches` iteratee shorthand. + * _.dropWhile(users, { 'user': 'barney', 'active': false }); + * // => objects for ['fred', 'pebbles'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.dropWhile(users, ['active', false]); + * // => objects for ['pebbles'] + * + * // The `_.property` iteratee shorthand. + * _.dropWhile(users, 'active'); + * // => objects for ['barney', 'fred', 'pebbles'] + */ +function dropWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, baseIteratee(predicate, 3), true) + : []; +} + +module.exports = dropWhile; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/each.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/each.js new file mode 100644 index 00000000..8800f420 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/each.js @@ -0,0 +1 @@ +module.exports = require('./forEach'); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/eachRight.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/eachRight.js new file mode 100644 index 00000000..3252b2ab --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/eachRight.js @@ -0,0 +1 @@ +module.exports = require('./forEachRight'); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/endsWith.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/endsWith.js new file mode 100644 index 00000000..76fc866e --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/endsWith.js @@ -0,0 +1,43 @@ +var baseClamp = require('./_baseClamp'), + baseToString = require('./_baseToString'), + toInteger = require('./toInteger'), + toString = require('./toString'); + +/** + * Checks if `string` ends with the given target string. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to inspect. + * @param {string} [target] The string to search for. + * @param {number} [position=string.length] The position to search up to. + * @returns {boolean} Returns `true` if `string` ends with `target`, + * else `false`. + * @example + * + * _.endsWith('abc', 'c'); + * // => true + * + * _.endsWith('abc', 'b'); + * // => false + * + * _.endsWith('abc', 'b', 2); + * // => true + */ +function endsWith(string, target, position) { + string = toString(string); + target = baseToString(target); + + var length = string.length; + position = position === undefined + ? length + : baseClamp(toInteger(position), 0, length); + + var end = position; + position -= target.length; + return position >= 0 && string.slice(position, end) == target; +} + +module.exports = endsWith; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/entries.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/entries.js new file mode 100644 index 00000000..7a88df20 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/entries.js @@ -0,0 +1 @@ +module.exports = require('./toPairs'); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/entriesIn.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/entriesIn.js new file mode 100644 index 00000000..f6c6331c --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/entriesIn.js @@ -0,0 +1 @@ +module.exports = require('./toPairsIn'); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/eq.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/eq.js new file mode 100644 index 00000000..a9406880 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/eq.js @@ -0,0 +1,37 @@ +/** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ +function eq(value, other) { + return value === other || (value !== value && other !== other); +} + +module.exports = eq; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/escape.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/escape.js new file mode 100644 index 00000000..9247e002 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/escape.js @@ -0,0 +1,43 @@ +var escapeHtmlChar = require('./_escapeHtmlChar'), + toString = require('./toString'); + +/** Used to match HTML entities and HTML characters. */ +var reUnescapedHtml = /[&<>"']/g, + reHasUnescapedHtml = RegExp(reUnescapedHtml.source); + +/** + * Converts the characters "&", "<", ">", '"', and "'" in `string` to their + * corresponding HTML entities. + * + * **Note:** No other characters are escaped. To escape additional + * characters use a third-party library like [_he_](https://mths.be/he). + * + * Though the ">" character is escaped for symmetry, characters like + * ">" and "/" don't need escaping in HTML and have no special meaning + * unless they're part of a tag or unquoted attribute value. See + * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands) + * (under "semi-related fun fact") for more details. + * + * When working with HTML you should always + * [quote attribute values](http://wonko.com/post/html-escaping) to reduce + * XSS vectors. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category String + * @param {string} [string=''] The string to escape. + * @returns {string} Returns the escaped string. + * @example + * + * _.escape('fred, barney, & pebbles'); + * // => 'fred, barney, & pebbles' + */ +function escape(string) { + string = toString(string); + return (string && reHasUnescapedHtml.test(string)) + ? string.replace(reUnescapedHtml, escapeHtmlChar) + : string; +} + +module.exports = escape; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/escapeRegExp.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/escapeRegExp.js new file mode 100644 index 00000000..0a58c69f --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/escapeRegExp.js @@ -0,0 +1,32 @@ +var toString = require('./toString'); + +/** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ +var reRegExpChar = /[\\^$.*+?()[\]{}|]/g, + reHasRegExpChar = RegExp(reRegExpChar.source); + +/** + * Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+", + * "?", "(", ")", "[", "]", "{", "}", and "|" in `string`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to escape. + * @returns {string} Returns the escaped string. + * @example + * + * _.escapeRegExp('[lodash](https://lodash.com/)'); + * // => '\[lodash\]\(https://lodash\.com/\)' + */ +function escapeRegExp(string) { + string = toString(string); + return (string && reHasRegExpChar.test(string)) + ? string.replace(reRegExpChar, '\\$&') + : string; +} + +module.exports = escapeRegExp; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/every.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/every.js new file mode 100644 index 00000000..25080dac --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/every.js @@ -0,0 +1,56 @@ +var arrayEvery = require('./_arrayEvery'), + baseEvery = require('./_baseEvery'), + baseIteratee = require('./_baseIteratee'), + isArray = require('./isArray'), + isIterateeCall = require('./_isIterateeCall'); + +/** + * Checks if `predicate` returns truthy for **all** elements of `collection`. + * Iteration is stopped once `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index|key, collection). + * + * **Note:** This method returns `true` for + * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because + * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of + * elements of empty collections. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false`. + * @example + * + * _.every([true, 1, null, 'yes'], Boolean); + * // => false + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * // The `_.matches` iteratee shorthand. + * _.every(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // The `_.matchesProperty` iteratee shorthand. + * _.every(users, ['active', false]); + * // => true + * + * // The `_.property` iteratee shorthand. + * _.every(users, 'active'); + * // => false + */ +function every(collection, predicate, guard) { + var func = isArray(collection) ? arrayEvery : baseEvery; + if (guard && isIterateeCall(collection, predicate, guard)) { + predicate = undefined; + } + return func(collection, baseIteratee(predicate, 3)); +} + +module.exports = every; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/extend.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/extend.js new file mode 100644 index 00000000..e00166c2 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/extend.js @@ -0,0 +1 @@ +module.exports = require('./assignIn'); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/extendWith.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/extendWith.js new file mode 100644 index 00000000..dbdcb3b4 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/extendWith.js @@ -0,0 +1 @@ +module.exports = require('./assignInWith'); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fill.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fill.js new file mode 100644 index 00000000..ae13aa1c --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fill.js @@ -0,0 +1,45 @@ +var baseFill = require('./_baseFill'), + isIterateeCall = require('./_isIterateeCall'); + +/** + * Fills elements of `array` with `value` from `start` up to, but not + * including, `end`. + * + * **Note:** This method mutates `array`. + * + * @static + * @memberOf _ + * @since 3.2.0 + * @category Array + * @param {Array} array The array to fill. + * @param {*} value The value to fill `array` with. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns `array`. + * @example + * + * var array = [1, 2, 3]; + * + * _.fill(array, 'a'); + * console.log(array); + * // => ['a', 'a', 'a'] + * + * _.fill(Array(3), 2); + * // => [2, 2, 2] + * + * _.fill([4, 6, 8, 10], '*', 1, 3); + * // => [4, '*', '*', 10] + */ +function fill(array, value, start, end) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + if (start && typeof start != 'number' && isIterateeCall(array, value, start)) { + start = 0; + end = length; + } + return baseFill(array, value, start, end); +} + +module.exports = fill; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/filter.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/filter.js new file mode 100644 index 00000000..89e0c8c4 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/filter.js @@ -0,0 +1,52 @@ +var arrayFilter = require('./_arrayFilter'), + baseFilter = require('./_baseFilter'), + baseIteratee = require('./_baseIteratee'), + isArray = require('./isArray'); + +/** + * Iterates over elements of `collection`, returning an array of all elements + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * **Note:** Unlike `_.remove`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.reject + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.filter(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, { 'age': 36, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.filter(users, 'active'); + * // => objects for ['barney'] + * + * // Combining several predicates using `_.overEvery` or `_.overSome`. + * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]])); + * // => objects for ['fred', 'barney'] + */ +function filter(collection, predicate) { + var func = isArray(collection) ? arrayFilter : baseFilter; + return func(collection, baseIteratee(predicate, 3)); +} + +module.exports = filter; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/find.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/find.js new file mode 100644 index 00000000..de732ccb --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/find.js @@ -0,0 +1,42 @@ +var createFind = require('./_createFind'), + findIndex = require('./findIndex'); + +/** + * Iterates over elements of `collection`, returning the first element + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false }, + * { 'user': 'pebbles', 'age': 1, 'active': true } + * ]; + * + * _.find(users, function(o) { return o.age < 40; }); + * // => object for 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.find(users, { 'age': 1, 'active': true }); + * // => object for 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.find(users, ['active', false]); + * // => object for 'fred' + * + * // The `_.property` iteratee shorthand. + * _.find(users, 'active'); + * // => object for 'barney' + */ +var find = createFind(findIndex); + +module.exports = find; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/findIndex.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/findIndex.js new file mode 100644 index 00000000..4689069f --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/findIndex.js @@ -0,0 +1,55 @@ +var baseFindIndex = require('./_baseFindIndex'), + baseIteratee = require('./_baseIteratee'), + toInteger = require('./toInteger'); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * This method is like `_.find` except that it returns the index of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.findIndex(users, function(o) { return o.user == 'barney'; }); + * // => 0 + * + * // The `_.matches` iteratee shorthand. + * _.findIndex(users, { 'user': 'fred', 'active': false }); + * // => 1 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findIndex(users, ['active', false]); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.findIndex(users, 'active'); + * // => 2 + */ +function findIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return baseFindIndex(array, baseIteratee(predicate, 3), index); +} + +module.exports = findIndex; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/findKey.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/findKey.js new file mode 100644 index 00000000..cac0248a --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/findKey.js @@ -0,0 +1,44 @@ +var baseFindKey = require('./_baseFindKey'), + baseForOwn = require('./_baseForOwn'), + baseIteratee = require('./_baseIteratee'); + +/** + * This method is like `_.find` except that it returns the key of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Object + * @param {Object} object The object to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {string|undefined} Returns the key of the matched element, + * else `undefined`. + * @example + * + * var users = { + * 'barney': { 'age': 36, 'active': true }, + * 'fred': { 'age': 40, 'active': false }, + * 'pebbles': { 'age': 1, 'active': true } + * }; + * + * _.findKey(users, function(o) { return o.age < 40; }); + * // => 'barney' (iteration order is not guaranteed) + * + * // The `_.matches` iteratee shorthand. + * _.findKey(users, { 'age': 1, 'active': true }); + * // => 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findKey(users, ['active', false]); + * // => 'fred' + * + * // The `_.property` iteratee shorthand. + * _.findKey(users, 'active'); + * // => 'barney' + */ +function findKey(object, predicate) { + return baseFindKey(object, baseIteratee(predicate, 3), baseForOwn); +} + +module.exports = findKey; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/findLast.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/findLast.js new file mode 100644 index 00000000..70b4271d --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/findLast.js @@ -0,0 +1,25 @@ +var createFind = require('./_createFind'), + findLastIndex = require('./findLastIndex'); + +/** + * This method is like `_.find` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=collection.length-1] The index to search from. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * _.findLast([1, 2, 3, 4], function(n) { + * return n % 2 == 1; + * }); + * // => 3 + */ +var findLast = createFind(findLastIndex); + +module.exports = findLast; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/findLastIndex.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/findLastIndex.js new file mode 100644 index 00000000..7da3431f --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/findLastIndex.js @@ -0,0 +1,59 @@ +var baseFindIndex = require('./_baseFindIndex'), + baseIteratee = require('./_baseIteratee'), + toInteger = require('./toInteger'); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max, + nativeMin = Math.min; + +/** + * This method is like `_.findIndex` except that it iterates over elements + * of `collection` from right to left. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=array.length-1] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; }); + * // => 2 + * + * // The `_.matches` iteratee shorthand. + * _.findLastIndex(users, { 'user': 'barney', 'active': true }); + * // => 0 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findLastIndex(users, ['active', false]); + * // => 2 + * + * // The `_.property` iteratee shorthand. + * _.findLastIndex(users, 'active'); + * // => 0 + */ +function findLastIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = length - 1; + if (fromIndex !== undefined) { + index = toInteger(fromIndex); + index = fromIndex < 0 + ? nativeMax(length + index, 0) + : nativeMin(index, length - 1); + } + return baseFindIndex(array, baseIteratee(predicate, 3), index, true); +} + +module.exports = findLastIndex; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/findLastKey.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/findLastKey.js new file mode 100644 index 00000000..66fb9fbc --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/findLastKey.js @@ -0,0 +1,44 @@ +var baseFindKey = require('./_baseFindKey'), + baseForOwnRight = require('./_baseForOwnRight'), + baseIteratee = require('./_baseIteratee'); + +/** + * This method is like `_.findKey` except that it iterates over elements of + * a collection in the opposite order. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Object + * @param {Object} object The object to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {string|undefined} Returns the key of the matched element, + * else `undefined`. + * @example + * + * var users = { + * 'barney': { 'age': 36, 'active': true }, + * 'fred': { 'age': 40, 'active': false }, + * 'pebbles': { 'age': 1, 'active': true } + * }; + * + * _.findLastKey(users, function(o) { return o.age < 40; }); + * // => returns 'pebbles' assuming `_.findKey` returns 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.findLastKey(users, { 'age': 36, 'active': true }); + * // => 'barney' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findLastKey(users, ['active', false]); + * // => 'fred' + * + * // The `_.property` iteratee shorthand. + * _.findLastKey(users, 'active'); + * // => 'pebbles' + */ +function findLastKey(object, predicate) { + return baseFindKey(object, baseIteratee(predicate, 3), baseForOwnRight); +} + +module.exports = findLastKey; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/first.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/first.js new file mode 100644 index 00000000..53f4ad13 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/first.js @@ -0,0 +1 @@ +module.exports = require('./head'); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/flatMap.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/flatMap.js new file mode 100644 index 00000000..e6685068 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/flatMap.js @@ -0,0 +1,29 @@ +var baseFlatten = require('./_baseFlatten'), + map = require('./map'); + +/** + * Creates a flattened array of values by running each element in `collection` + * thru `iteratee` and flattening the mapped results. The iteratee is invoked + * with three arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new flattened array. + * @example + * + * function duplicate(n) { + * return [n, n]; + * } + * + * _.flatMap([1, 2], duplicate); + * // => [1, 1, 2, 2] + */ +function flatMap(collection, iteratee) { + return baseFlatten(map(collection, iteratee), 1); +} + +module.exports = flatMap; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/flatMapDeep.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/flatMapDeep.js new file mode 100644 index 00000000..4653d603 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/flatMapDeep.js @@ -0,0 +1,31 @@ +var baseFlatten = require('./_baseFlatten'), + map = require('./map'); + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * This method is like `_.flatMap` except that it recursively flattens the + * mapped results. + * + * @static + * @memberOf _ + * @since 4.7.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new flattened array. + * @example + * + * function duplicate(n) { + * return [[[n, n]]]; + * } + * + * _.flatMapDeep([1, 2], duplicate); + * // => [1, 1, 2, 2] + */ +function flatMapDeep(collection, iteratee) { + return baseFlatten(map(collection, iteratee), INFINITY); +} + +module.exports = flatMapDeep; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/flatMapDepth.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/flatMapDepth.js new file mode 100644 index 00000000..6d72005c --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/flatMapDepth.js @@ -0,0 +1,31 @@ +var baseFlatten = require('./_baseFlatten'), + map = require('./map'), + toInteger = require('./toInteger'); + +/** + * This method is like `_.flatMap` except that it recursively flattens the + * mapped results up to `depth` times. + * + * @static + * @memberOf _ + * @since 4.7.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {number} [depth=1] The maximum recursion depth. + * @returns {Array} Returns the new flattened array. + * @example + * + * function duplicate(n) { + * return [[[n, n]]]; + * } + * + * _.flatMapDepth([1, 2], duplicate, 2); + * // => [[1, 1], [2, 2]] + */ +function flatMapDepth(collection, iteratee, depth) { + depth = depth === undefined ? 1 : toInteger(depth); + return baseFlatten(map(collection, iteratee), depth); +} + +module.exports = flatMapDepth; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/flatten.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/flatten.js new file mode 100644 index 00000000..3f09f7f7 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/flatten.js @@ -0,0 +1,22 @@ +var baseFlatten = require('./_baseFlatten'); + +/** + * Flattens `array` a single level deep. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, [3, [4]], 5]]); + * // => [1, 2, [3, [4]], 5] + */ +function flatten(array) { + var length = array == null ? 0 : array.length; + return length ? baseFlatten(array, 1) : []; +} + +module.exports = flatten; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/flattenDeep.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/flattenDeep.js new file mode 100644 index 00000000..8ad585cf --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/flattenDeep.js @@ -0,0 +1,25 @@ +var baseFlatten = require('./_baseFlatten'); + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Recursively flattens `array`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flattenDeep([1, [2, [3, [4]], 5]]); + * // => [1, 2, 3, 4, 5] + */ +function flattenDeep(array) { + var length = array == null ? 0 : array.length; + return length ? baseFlatten(array, INFINITY) : []; +} + +module.exports = flattenDeep; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/flattenDepth.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/flattenDepth.js new file mode 100644 index 00000000..441fdcc2 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/flattenDepth.js @@ -0,0 +1,33 @@ +var baseFlatten = require('./_baseFlatten'), + toInteger = require('./toInteger'); + +/** + * Recursively flatten `array` up to `depth` times. + * + * @static + * @memberOf _ + * @since 4.4.0 + * @category Array + * @param {Array} array The array to flatten. + * @param {number} [depth=1] The maximum recursion depth. + * @returns {Array} Returns the new flattened array. + * @example + * + * var array = [1, [2, [3, [4]], 5]]; + * + * _.flattenDepth(array, 1); + * // => [1, 2, [3, [4]], 5] + * + * _.flattenDepth(array, 2); + * // => [1, 2, 3, [4], 5] + */ +function flattenDepth(array, depth) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + depth = depth === undefined ? 1 : toInteger(depth); + return baseFlatten(array, depth); +} + +module.exports = flattenDepth; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/flip.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/flip.js new file mode 100644 index 00000000..c28dd789 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/flip.js @@ -0,0 +1,28 @@ +var createWrap = require('./_createWrap'); + +/** Used to compose bitmasks for function metadata. */ +var WRAP_FLIP_FLAG = 512; + +/** + * Creates a function that invokes `func` with arguments reversed. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Function + * @param {Function} func The function to flip arguments for. + * @returns {Function} Returns the new flipped function. + * @example + * + * var flipped = _.flip(function() { + * return _.toArray(arguments); + * }); + * + * flipped('a', 'b', 'c', 'd'); + * // => ['d', 'c', 'b', 'a'] + */ +function flip(func) { + return createWrap(func, WRAP_FLIP_FLAG); +} + +module.exports = flip; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/floor.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/floor.js new file mode 100644 index 00000000..ab6dfa28 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/floor.js @@ -0,0 +1,26 @@ +var createRound = require('./_createRound'); + +/** + * Computes `number` rounded down to `precision`. + * + * @static + * @memberOf _ + * @since 3.10.0 + * @category Math + * @param {number} number The number to round down. + * @param {number} [precision=0] The precision to round down to. + * @returns {number} Returns the rounded down number. + * @example + * + * _.floor(4.006); + * // => 4 + * + * _.floor(0.046, 2); + * // => 0.04 + * + * _.floor(4060, -2); + * // => 4000 + */ +var floor = createRound('floor'); + +module.exports = floor; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/flow.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/flow.js new file mode 100644 index 00000000..74b6b62d --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/flow.js @@ -0,0 +1,27 @@ +var createFlow = require('./_createFlow'); + +/** + * Creates a function that returns the result of invoking the given functions + * with the `this` binding of the created function, where each successive + * invocation is supplied the return value of the previous. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Util + * @param {...(Function|Function[])} [funcs] The functions to invoke. + * @returns {Function} Returns the new composite function. + * @see _.flowRight + * @example + * + * function square(n) { + * return n * n; + * } + * + * var addSquare = _.flow([_.add, square]); + * addSquare(1, 2); + * // => 9 + */ +var flow = createFlow(); + +module.exports = flow; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/flowRight.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/flowRight.js new file mode 100644 index 00000000..11461410 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/flowRight.js @@ -0,0 +1,26 @@ +var createFlow = require('./_createFlow'); + +/** + * This method is like `_.flow` except that it creates a function that + * invokes the given functions from right to left. + * + * @static + * @since 3.0.0 + * @memberOf _ + * @category Util + * @param {...(Function|Function[])} [funcs] The functions to invoke. + * @returns {Function} Returns the new composite function. + * @see _.flow + * @example + * + * function square(n) { + * return n * n; + * } + * + * var addSquare = _.flowRight([square, _.add]); + * addSquare(1, 2); + * // => 9 + */ +var flowRight = createFlow(true); + +module.exports = flowRight; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/forEach.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/forEach.js new file mode 100644 index 00000000..c64eaa73 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/forEach.js @@ -0,0 +1,41 @@ +var arrayEach = require('./_arrayEach'), + baseEach = require('./_baseEach'), + castFunction = require('./_castFunction'), + isArray = require('./isArray'); + +/** + * Iterates over elements of `collection` and invokes `iteratee` for each element. + * The iteratee is invoked with three arguments: (value, index|key, collection). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * **Note:** As with other "Collections" methods, objects with a "length" + * property are iterated like arrays. To avoid this behavior use `_.forIn` + * or `_.forOwn` for object iteration. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias each + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEachRight + * @example + * + * _.forEach([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `1` then `2`. + * + * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ +function forEach(collection, iteratee) { + var func = isArray(collection) ? arrayEach : baseEach; + return func(collection, castFunction(iteratee)); +} + +module.exports = forEach; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/forEachRight.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/forEachRight.js new file mode 100644 index 00000000..7390ebaf --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/forEachRight.js @@ -0,0 +1,31 @@ +var arrayEachRight = require('./_arrayEachRight'), + baseEachRight = require('./_baseEachRight'), + castFunction = require('./_castFunction'), + isArray = require('./isArray'); + +/** + * This method is like `_.forEach` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @alias eachRight + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEach + * @example + * + * _.forEachRight([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `2` then `1`. + */ +function forEachRight(collection, iteratee) { + var func = isArray(collection) ? arrayEachRight : baseEachRight; + return func(collection, castFunction(iteratee)); +} + +module.exports = forEachRight; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/forIn.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/forIn.js new file mode 100644 index 00000000..583a5963 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/forIn.js @@ -0,0 +1,39 @@ +var baseFor = require('./_baseFor'), + castFunction = require('./_castFunction'), + keysIn = require('./keysIn'); + +/** + * Iterates over own and inherited enumerable string keyed properties of an + * object and invokes `iteratee` for each property. The iteratee is invoked + * with three arguments: (value, key, object). Iteratee functions may exit + * iteration early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forInRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forIn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). + */ +function forIn(object, iteratee) { + return object == null + ? object + : baseFor(object, castFunction(iteratee), keysIn); +} + +module.exports = forIn; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/forInRight.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/forInRight.js new file mode 100644 index 00000000..4aedf58a --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/forInRight.js @@ -0,0 +1,37 @@ +var baseForRight = require('./_baseForRight'), + castFunction = require('./_castFunction'), + keysIn = require('./keysIn'); + +/** + * This method is like `_.forIn` except that it iterates over properties of + * `object` in the opposite order. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forIn + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forInRight(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'. + */ +function forInRight(object, iteratee) { + return object == null + ? object + : baseForRight(object, castFunction(iteratee), keysIn); +} + +module.exports = forInRight; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/forOwn.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/forOwn.js new file mode 100644 index 00000000..94eed840 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/forOwn.js @@ -0,0 +1,36 @@ +var baseForOwn = require('./_baseForOwn'), + castFunction = require('./_castFunction'); + +/** + * Iterates over own enumerable string keyed properties of an object and + * invokes `iteratee` for each property. The iteratee is invoked with three + * arguments: (value, key, object). Iteratee functions may exit iteration + * early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forOwnRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ +function forOwn(object, iteratee) { + return object && baseForOwn(object, castFunction(iteratee)); +} + +module.exports = forOwn; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/forOwnRight.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/forOwnRight.js new file mode 100644 index 00000000..86f338f0 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/forOwnRight.js @@ -0,0 +1,34 @@ +var baseForOwnRight = require('./_baseForOwnRight'), + castFunction = require('./_castFunction'); + +/** + * This method is like `_.forOwn` except that it iterates over properties of + * `object` in the opposite order. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forOwn + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwnRight(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'. + */ +function forOwnRight(object, iteratee) { + return object && baseForOwnRight(object, castFunction(iteratee)); +} + +module.exports = forOwnRight; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp.js new file mode 100644 index 00000000..e372dbbd --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp.js @@ -0,0 +1,2 @@ +var _ = require('./lodash.min').runInContext(); +module.exports = require('./fp/_baseConvert')(_, _); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/F.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/F.js new file mode 100644 index 00000000..a05a63ad --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/F.js @@ -0,0 +1 @@ +module.exports = require('./stubFalse'); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/T.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/T.js new file mode 100644 index 00000000..e2ba8ea5 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/T.js @@ -0,0 +1 @@ +module.exports = require('./stubTrue'); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/__.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/__.js new file mode 100644 index 00000000..4af98deb --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/__.js @@ -0,0 +1 @@ +module.exports = require('./placeholder'); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/_baseConvert.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/_baseConvert.js new file mode 100644 index 00000000..9baf8e19 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/_baseConvert.js @@ -0,0 +1,569 @@ +var mapping = require('./_mapping'), + fallbackHolder = require('./placeholder'); + +/** Built-in value reference. */ +var push = Array.prototype.push; + +/** + * Creates a function, with an arity of `n`, that invokes `func` with the + * arguments it receives. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} n The arity of the new function. + * @returns {Function} Returns the new function. + */ +function baseArity(func, n) { + return n == 2 + ? function(a, b) { return func.apply(undefined, arguments); } + : function(a) { return func.apply(undefined, arguments); }; +} + +/** + * Creates a function that invokes `func`, with up to `n` arguments, ignoring + * any additional arguments. + * + * @private + * @param {Function} func The function to cap arguments for. + * @param {number} n The arity cap. + * @returns {Function} Returns the new function. + */ +function baseAry(func, n) { + return n == 2 + ? function(a, b) { return func(a, b); } + : function(a) { return func(a); }; +} + +/** + * Creates a clone of `array`. + * + * @private + * @param {Array} array The array to clone. + * @returns {Array} Returns the cloned array. + */ +function cloneArray(array) { + var length = array ? array.length : 0, + result = Array(length); + + while (length--) { + result[length] = array[length]; + } + return result; +} + +/** + * Creates a function that clones a given object using the assignment `func`. + * + * @private + * @param {Function} func The assignment function. + * @returns {Function} Returns the new cloner function. + */ +function createCloner(func) { + return function(object) { + return func({}, object); + }; +} + +/** + * A specialized version of `_.spread` which flattens the spread array into + * the arguments of the invoked `func`. + * + * @private + * @param {Function} func The function to spread arguments over. + * @param {number} start The start position of the spread. + * @returns {Function} Returns the new function. + */ +function flatSpread(func, start) { + return function() { + var length = arguments.length, + lastIndex = length - 1, + args = Array(length); + + while (length--) { + args[length] = arguments[length]; + } + var array = args[start], + otherArgs = args.slice(0, start); + + if (array) { + push.apply(otherArgs, array); + } + if (start != lastIndex) { + push.apply(otherArgs, args.slice(start + 1)); + } + return func.apply(this, otherArgs); + }; +} + +/** + * Creates a function that wraps `func` and uses `cloner` to clone the first + * argument it receives. + * + * @private + * @param {Function} func The function to wrap. + * @param {Function} cloner The function to clone arguments. + * @returns {Function} Returns the new immutable function. + */ +function wrapImmutable(func, cloner) { + return function() { + var length = arguments.length; + if (!length) { + return; + } + var args = Array(length); + while (length--) { + args[length] = arguments[length]; + } + var result = args[0] = cloner.apply(undefined, args); + func.apply(undefined, args); + return result; + }; +} + +/** + * The base implementation of `convert` which accepts a `util` object of methods + * required to perform conversions. + * + * @param {Object} util The util object. + * @param {string} name The name of the function to convert. + * @param {Function} func The function to convert. + * @param {Object} [options] The options object. + * @param {boolean} [options.cap=true] Specify capping iteratee arguments. + * @param {boolean} [options.curry=true] Specify currying. + * @param {boolean} [options.fixed=true] Specify fixed arity. + * @param {boolean} [options.immutable=true] Specify immutable operations. + * @param {boolean} [options.rearg=true] Specify rearranging arguments. + * @returns {Function|Object} Returns the converted function or object. + */ +function baseConvert(util, name, func, options) { + var isLib = typeof name == 'function', + isObj = name === Object(name); + + if (isObj) { + options = func; + func = name; + name = undefined; + } + if (func == null) { + throw new TypeError; + } + options || (options = {}); + + var config = { + 'cap': 'cap' in options ? options.cap : true, + 'curry': 'curry' in options ? options.curry : true, + 'fixed': 'fixed' in options ? options.fixed : true, + 'immutable': 'immutable' in options ? options.immutable : true, + 'rearg': 'rearg' in options ? options.rearg : true + }; + + var defaultHolder = isLib ? func : fallbackHolder, + forceCurry = ('curry' in options) && options.curry, + forceFixed = ('fixed' in options) && options.fixed, + forceRearg = ('rearg' in options) && options.rearg, + pristine = isLib ? func.runInContext() : undefined; + + var helpers = isLib ? func : { + 'ary': util.ary, + 'assign': util.assign, + 'clone': util.clone, + 'curry': util.curry, + 'forEach': util.forEach, + 'isArray': util.isArray, + 'isError': util.isError, + 'isFunction': util.isFunction, + 'isWeakMap': util.isWeakMap, + 'iteratee': util.iteratee, + 'keys': util.keys, + 'rearg': util.rearg, + 'toInteger': util.toInteger, + 'toPath': util.toPath + }; + + var ary = helpers.ary, + assign = helpers.assign, + clone = helpers.clone, + curry = helpers.curry, + each = helpers.forEach, + isArray = helpers.isArray, + isError = helpers.isError, + isFunction = helpers.isFunction, + isWeakMap = helpers.isWeakMap, + keys = helpers.keys, + rearg = helpers.rearg, + toInteger = helpers.toInteger, + toPath = helpers.toPath; + + var aryMethodKeys = keys(mapping.aryMethod); + + var wrappers = { + 'castArray': function(castArray) { + return function() { + var value = arguments[0]; + return isArray(value) + ? castArray(cloneArray(value)) + : castArray.apply(undefined, arguments); + }; + }, + 'iteratee': function(iteratee) { + return function() { + var func = arguments[0], + arity = arguments[1], + result = iteratee(func, arity), + length = result.length; + + if (config.cap && typeof arity == 'number') { + arity = arity > 2 ? (arity - 2) : 1; + return (length && length <= arity) ? result : baseAry(result, arity); + } + return result; + }; + }, + 'mixin': function(mixin) { + return function(source) { + var func = this; + if (!isFunction(func)) { + return mixin(func, Object(source)); + } + var pairs = []; + each(keys(source), function(key) { + if (isFunction(source[key])) { + pairs.push([key, func.prototype[key]]); + } + }); + + mixin(func, Object(source)); + + each(pairs, function(pair) { + var value = pair[1]; + if (isFunction(value)) { + func.prototype[pair[0]] = value; + } else { + delete func.prototype[pair[0]]; + } + }); + return func; + }; + }, + 'nthArg': function(nthArg) { + return function(n) { + var arity = n < 0 ? 1 : (toInteger(n) + 1); + return curry(nthArg(n), arity); + }; + }, + 'rearg': function(rearg) { + return function(func, indexes) { + var arity = indexes ? indexes.length : 0; + return curry(rearg(func, indexes), arity); + }; + }, + 'runInContext': function(runInContext) { + return function(context) { + return baseConvert(util, runInContext(context), options); + }; + } + }; + + /*--------------------------------------------------------------------------*/ + + /** + * Casts `func` to a function with an arity capped iteratee if needed. + * + * @private + * @param {string} name The name of the function to inspect. + * @param {Function} func The function to inspect. + * @returns {Function} Returns the cast function. + */ + function castCap(name, func) { + if (config.cap) { + var indexes = mapping.iterateeRearg[name]; + if (indexes) { + return iterateeRearg(func, indexes); + } + var n = !isLib && mapping.iterateeAry[name]; + if (n) { + return iterateeAry(func, n); + } + } + return func; + } + + /** + * Casts `func` to a curried function if needed. + * + * @private + * @param {string} name The name of the function to inspect. + * @param {Function} func The function to inspect. + * @param {number} n The arity of `func`. + * @returns {Function} Returns the cast function. + */ + function castCurry(name, func, n) { + return (forceCurry || (config.curry && n > 1)) + ? curry(func, n) + : func; + } + + /** + * Casts `func` to a fixed arity function if needed. + * + * @private + * @param {string} name The name of the function to inspect. + * @param {Function} func The function to inspect. + * @param {number} n The arity cap. + * @returns {Function} Returns the cast function. + */ + function castFixed(name, func, n) { + if (config.fixed && (forceFixed || !mapping.skipFixed[name])) { + var data = mapping.methodSpread[name], + start = data && data.start; + + return start === undefined ? ary(func, n) : flatSpread(func, start); + } + return func; + } + + /** + * Casts `func` to an rearged function if needed. + * + * @private + * @param {string} name The name of the function to inspect. + * @param {Function} func The function to inspect. + * @param {number} n The arity of `func`. + * @returns {Function} Returns the cast function. + */ + function castRearg(name, func, n) { + return (config.rearg && n > 1 && (forceRearg || !mapping.skipRearg[name])) + ? rearg(func, mapping.methodRearg[name] || mapping.aryRearg[n]) + : func; + } + + /** + * Creates a clone of `object` by `path`. + * + * @private + * @param {Object} object The object to clone. + * @param {Array|string} path The path to clone by. + * @returns {Object} Returns the cloned object. + */ + function cloneByPath(object, path) { + path = toPath(path); + + var index = -1, + length = path.length, + lastIndex = length - 1, + result = clone(Object(object)), + nested = result; + + while (nested != null && ++index < length) { + var key = path[index], + value = nested[key]; + + if (value != null && + !(isFunction(value) || isError(value) || isWeakMap(value))) { + nested[key] = clone(index == lastIndex ? value : Object(value)); + } + nested = nested[key]; + } + return result; + } + + /** + * Converts `lodash` to an immutable auto-curried iteratee-first data-last + * version with conversion `options` applied. + * + * @param {Object} [options] The options object. See `baseConvert` for more details. + * @returns {Function} Returns the converted `lodash`. + */ + function convertLib(options) { + return _.runInContext.convert(options)(undefined); + } + + /** + * Create a converter function for `func` of `name`. + * + * @param {string} name The name of the function to convert. + * @param {Function} func The function to convert. + * @returns {Function} Returns the new converter function. + */ + function createConverter(name, func) { + var realName = mapping.aliasToReal[name] || name, + methodName = mapping.remap[realName] || realName, + oldOptions = options; + + return function(options) { + var newUtil = isLib ? pristine : helpers, + newFunc = isLib ? pristine[methodName] : func, + newOptions = assign(assign({}, oldOptions), options); + + return baseConvert(newUtil, realName, newFunc, newOptions); + }; + } + + /** + * Creates a function that wraps `func` to invoke its iteratee, with up to `n` + * arguments, ignoring any additional arguments. + * + * @private + * @param {Function} func The function to cap iteratee arguments for. + * @param {number} n The arity cap. + * @returns {Function} Returns the new function. + */ + function iterateeAry(func, n) { + return overArg(func, function(func) { + return typeof func == 'function' ? baseAry(func, n) : func; + }); + } + + /** + * Creates a function that wraps `func` to invoke its iteratee with arguments + * arranged according to the specified `indexes` where the argument value at + * the first index is provided as the first argument, the argument value at + * the second index is provided as the second argument, and so on. + * + * @private + * @param {Function} func The function to rearrange iteratee arguments for. + * @param {number[]} indexes The arranged argument indexes. + * @returns {Function} Returns the new function. + */ + function iterateeRearg(func, indexes) { + return overArg(func, function(func) { + var n = indexes.length; + return baseArity(rearg(baseAry(func, n), indexes), n); + }); + } + + /** + * Creates a function that invokes `func` with its first argument transformed. + * + * @private + * @param {Function} func The function to wrap. + * @param {Function} transform The argument transform. + * @returns {Function} Returns the new function. + */ + function overArg(func, transform) { + return function() { + var length = arguments.length; + if (!length) { + return func(); + } + var args = Array(length); + while (length--) { + args[length] = arguments[length]; + } + var index = config.rearg ? 0 : (length - 1); + args[index] = transform(args[index]); + return func.apply(undefined, args); + }; + } + + /** + * Creates a function that wraps `func` and applys the conversions + * rules by `name`. + * + * @private + * @param {string} name The name of the function to wrap. + * @param {Function} func The function to wrap. + * @returns {Function} Returns the converted function. + */ + function wrap(name, func, placeholder) { + var result, + realName = mapping.aliasToReal[name] || name, + wrapped = func, + wrapper = wrappers[realName]; + + if (wrapper) { + wrapped = wrapper(func); + } + else if (config.immutable) { + if (mapping.mutate.array[realName]) { + wrapped = wrapImmutable(func, cloneArray); + } + else if (mapping.mutate.object[realName]) { + wrapped = wrapImmutable(func, createCloner(func)); + } + else if (mapping.mutate.set[realName]) { + wrapped = wrapImmutable(func, cloneByPath); + } + } + each(aryMethodKeys, function(aryKey) { + each(mapping.aryMethod[aryKey], function(otherName) { + if (realName == otherName) { + var data = mapping.methodSpread[realName], + afterRearg = data && data.afterRearg; + + result = afterRearg + ? castFixed(realName, castRearg(realName, wrapped, aryKey), aryKey) + : castRearg(realName, castFixed(realName, wrapped, aryKey), aryKey); + + result = castCap(realName, result); + result = castCurry(realName, result, aryKey); + return false; + } + }); + return !result; + }); + + result || (result = wrapped); + if (result == func) { + result = forceCurry ? curry(result, 1) : function() { + return func.apply(this, arguments); + }; + } + result.convert = createConverter(realName, func); + result.placeholder = func.placeholder = placeholder; + + return result; + } + + /*--------------------------------------------------------------------------*/ + + if (!isObj) { + return wrap(name, func, defaultHolder); + } + var _ = func; + + // Convert methods by ary cap. + var pairs = []; + each(aryMethodKeys, function(aryKey) { + each(mapping.aryMethod[aryKey], function(key) { + var func = _[mapping.remap[key] || key]; + if (func) { + pairs.push([key, wrap(key, func, _)]); + } + }); + }); + + // Convert remaining methods. + each(keys(_), function(key) { + var func = _[key]; + if (typeof func == 'function') { + var length = pairs.length; + while (length--) { + if (pairs[length][0] == key) { + return; + } + } + func.convert = createConverter(key, func); + pairs.push([key, func]); + } + }); + + // Assign to `_` leaving `_.prototype` unchanged to allow chaining. + each(pairs, function(pair) { + _[pair[0]] = pair[1]; + }); + + _.convert = convertLib; + _.placeholder = _; + + // Assign aliases. + each(keys(_), function(key) { + each(mapping.realToAlias[key] || [], function(alias) { + _[alias] = _[key]; + }); + }); + + return _; +} + +module.exports = baseConvert; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/_convertBrowser.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/_convertBrowser.js new file mode 100644 index 00000000..bde030dc --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/_convertBrowser.js @@ -0,0 +1,18 @@ +var baseConvert = require('./_baseConvert'); + +/** + * Converts `lodash` to an immutable auto-curried iteratee-first data-last + * version with conversion `options` applied. + * + * @param {Function} lodash The lodash function to convert. + * @param {Object} [options] The options object. See `baseConvert` for more details. + * @returns {Function} Returns the converted `lodash`. + */ +function browserConvert(lodash, options) { + return baseConvert(lodash, lodash, options); +} + +if (typeof _ == 'function' && typeof _.runInContext == 'function') { + _ = browserConvert(_.runInContext()); +} +module.exports = browserConvert; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/_falseOptions.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/_falseOptions.js new file mode 100644 index 00000000..773235e3 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/_falseOptions.js @@ -0,0 +1,7 @@ +module.exports = { + 'cap': false, + 'curry': false, + 'fixed': false, + 'immutable': false, + 'rearg': false +}; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/_mapping.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/_mapping.js new file mode 100644 index 00000000..a642ec05 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/_mapping.js @@ -0,0 +1,358 @@ +/** Used to map aliases to their real names. */ +exports.aliasToReal = { + + // Lodash aliases. + 'each': 'forEach', + 'eachRight': 'forEachRight', + 'entries': 'toPairs', + 'entriesIn': 'toPairsIn', + 'extend': 'assignIn', + 'extendAll': 'assignInAll', + 'extendAllWith': 'assignInAllWith', + 'extendWith': 'assignInWith', + 'first': 'head', + + // Methods that are curried variants of others. + 'conforms': 'conformsTo', + 'matches': 'isMatch', + 'property': 'get', + + // Ramda aliases. + '__': 'placeholder', + 'F': 'stubFalse', + 'T': 'stubTrue', + 'all': 'every', + 'allPass': 'overEvery', + 'always': 'constant', + 'any': 'some', + 'anyPass': 'overSome', + 'apply': 'spread', + 'assoc': 'set', + 'assocPath': 'set', + 'complement': 'negate', + 'compose': 'flowRight', + 'contains': 'includes', + 'dissoc': 'unset', + 'dissocPath': 'unset', + 'dropLast': 'dropRight', + 'dropLastWhile': 'dropRightWhile', + 'equals': 'isEqual', + 'identical': 'eq', + 'indexBy': 'keyBy', + 'init': 'initial', + 'invertObj': 'invert', + 'juxt': 'over', + 'omitAll': 'omit', + 'nAry': 'ary', + 'path': 'get', + 'pathEq': 'matchesProperty', + 'pathOr': 'getOr', + 'paths': 'at', + 'pickAll': 'pick', + 'pipe': 'flow', + 'pluck': 'map', + 'prop': 'get', + 'propEq': 'matchesProperty', + 'propOr': 'getOr', + 'props': 'at', + 'symmetricDifference': 'xor', + 'symmetricDifferenceBy': 'xorBy', + 'symmetricDifferenceWith': 'xorWith', + 'takeLast': 'takeRight', + 'takeLastWhile': 'takeRightWhile', + 'unapply': 'rest', + 'unnest': 'flatten', + 'useWith': 'overArgs', + 'where': 'conformsTo', + 'whereEq': 'isMatch', + 'zipObj': 'zipObject' +}; + +/** Used to map ary to method names. */ +exports.aryMethod = { + '1': [ + 'assignAll', 'assignInAll', 'attempt', 'castArray', 'ceil', 'create', + 'curry', 'curryRight', 'defaultsAll', 'defaultsDeepAll', 'floor', 'flow', + 'flowRight', 'fromPairs', 'invert', 'iteratee', 'memoize', 'method', 'mergeAll', + 'methodOf', 'mixin', 'nthArg', 'over', 'overEvery', 'overSome','rest', 'reverse', + 'round', 'runInContext', 'spread', 'template', 'trim', 'trimEnd', 'trimStart', + 'uniqueId', 'words', 'zipAll' + ], + '2': [ + 'add', 'after', 'ary', 'assign', 'assignAllWith', 'assignIn', 'assignInAllWith', + 'at', 'before', 'bind', 'bindAll', 'bindKey', 'chunk', 'cloneDeepWith', + 'cloneWith', 'concat', 'conformsTo', 'countBy', 'curryN', 'curryRightN', + 'debounce', 'defaults', 'defaultsDeep', 'defaultTo', 'delay', 'difference', + 'divide', 'drop', 'dropRight', 'dropRightWhile', 'dropWhile', 'endsWith', 'eq', + 'every', 'filter', 'find', 'findIndex', 'findKey', 'findLast', 'findLastIndex', + 'findLastKey', 'flatMap', 'flatMapDeep', 'flattenDepth', 'forEach', + 'forEachRight', 'forIn', 'forInRight', 'forOwn', 'forOwnRight', 'get', + 'groupBy', 'gt', 'gte', 'has', 'hasIn', 'includes', 'indexOf', 'intersection', + 'invertBy', 'invoke', 'invokeMap', 'isEqual', 'isMatch', 'join', 'keyBy', + 'lastIndexOf', 'lt', 'lte', 'map', 'mapKeys', 'mapValues', 'matchesProperty', + 'maxBy', 'meanBy', 'merge', 'mergeAllWith', 'minBy', 'multiply', 'nth', 'omit', + 'omitBy', 'overArgs', 'pad', 'padEnd', 'padStart', 'parseInt', 'partial', + 'partialRight', 'partition', 'pick', 'pickBy', 'propertyOf', 'pull', 'pullAll', + 'pullAt', 'random', 'range', 'rangeRight', 'rearg', 'reject', 'remove', + 'repeat', 'restFrom', 'result', 'sampleSize', 'some', 'sortBy', 'sortedIndex', + 'sortedIndexOf', 'sortedLastIndex', 'sortedLastIndexOf', 'sortedUniqBy', + 'split', 'spreadFrom', 'startsWith', 'subtract', 'sumBy', 'take', 'takeRight', + 'takeRightWhile', 'takeWhile', 'tap', 'throttle', 'thru', 'times', 'trimChars', + 'trimCharsEnd', 'trimCharsStart', 'truncate', 'union', 'uniqBy', 'uniqWith', + 'unset', 'unzipWith', 'without', 'wrap', 'xor', 'zip', 'zipObject', + 'zipObjectDeep' + ], + '3': [ + 'assignInWith', 'assignWith', 'clamp', 'differenceBy', 'differenceWith', + 'findFrom', 'findIndexFrom', 'findLastFrom', 'findLastIndexFrom', 'getOr', + 'includesFrom', 'indexOfFrom', 'inRange', 'intersectionBy', 'intersectionWith', + 'invokeArgs', 'invokeArgsMap', 'isEqualWith', 'isMatchWith', 'flatMapDepth', + 'lastIndexOfFrom', 'mergeWith', 'orderBy', 'padChars', 'padCharsEnd', + 'padCharsStart', 'pullAllBy', 'pullAllWith', 'rangeStep', 'rangeStepRight', + 'reduce', 'reduceRight', 'replace', 'set', 'slice', 'sortedIndexBy', + 'sortedLastIndexBy', 'transform', 'unionBy', 'unionWith', 'update', 'xorBy', + 'xorWith', 'zipWith' + ], + '4': [ + 'fill', 'setWith', 'updateWith' + ] +}; + +/** Used to map ary to rearg configs. */ +exports.aryRearg = { + '2': [1, 0], + '3': [2, 0, 1], + '4': [3, 2, 0, 1] +}; + +/** Used to map method names to their iteratee ary. */ +exports.iterateeAry = { + 'dropRightWhile': 1, + 'dropWhile': 1, + 'every': 1, + 'filter': 1, + 'find': 1, + 'findFrom': 1, + 'findIndex': 1, + 'findIndexFrom': 1, + 'findKey': 1, + 'findLast': 1, + 'findLastFrom': 1, + 'findLastIndex': 1, + 'findLastIndexFrom': 1, + 'findLastKey': 1, + 'flatMap': 1, + 'flatMapDeep': 1, + 'flatMapDepth': 1, + 'forEach': 1, + 'forEachRight': 1, + 'forIn': 1, + 'forInRight': 1, + 'forOwn': 1, + 'forOwnRight': 1, + 'map': 1, + 'mapKeys': 1, + 'mapValues': 1, + 'partition': 1, + 'reduce': 2, + 'reduceRight': 2, + 'reject': 1, + 'remove': 1, + 'some': 1, + 'takeRightWhile': 1, + 'takeWhile': 1, + 'times': 1, + 'transform': 2 +}; + +/** Used to map method names to iteratee rearg configs. */ +exports.iterateeRearg = { + 'mapKeys': [1], + 'reduceRight': [1, 0] +}; + +/** Used to map method names to rearg configs. */ +exports.methodRearg = { + 'assignInAllWith': [1, 0], + 'assignInWith': [1, 2, 0], + 'assignAllWith': [1, 0], + 'assignWith': [1, 2, 0], + 'differenceBy': [1, 2, 0], + 'differenceWith': [1, 2, 0], + 'getOr': [2, 1, 0], + 'intersectionBy': [1, 2, 0], + 'intersectionWith': [1, 2, 0], + 'isEqualWith': [1, 2, 0], + 'isMatchWith': [2, 1, 0], + 'mergeAllWith': [1, 0], + 'mergeWith': [1, 2, 0], + 'padChars': [2, 1, 0], + 'padCharsEnd': [2, 1, 0], + 'padCharsStart': [2, 1, 0], + 'pullAllBy': [2, 1, 0], + 'pullAllWith': [2, 1, 0], + 'rangeStep': [1, 2, 0], + 'rangeStepRight': [1, 2, 0], + 'setWith': [3, 1, 2, 0], + 'sortedIndexBy': [2, 1, 0], + 'sortedLastIndexBy': [2, 1, 0], + 'unionBy': [1, 2, 0], + 'unionWith': [1, 2, 0], + 'updateWith': [3, 1, 2, 0], + 'xorBy': [1, 2, 0], + 'xorWith': [1, 2, 0], + 'zipWith': [1, 2, 0] +}; + +/** Used to map method names to spread configs. */ +exports.methodSpread = { + 'assignAll': { 'start': 0 }, + 'assignAllWith': { 'start': 0 }, + 'assignInAll': { 'start': 0 }, + 'assignInAllWith': { 'start': 0 }, + 'defaultsAll': { 'start': 0 }, + 'defaultsDeepAll': { 'start': 0 }, + 'invokeArgs': { 'start': 2 }, + 'invokeArgsMap': { 'start': 2 }, + 'mergeAll': { 'start': 0 }, + 'mergeAllWith': { 'start': 0 }, + 'partial': { 'start': 1 }, + 'partialRight': { 'start': 1 }, + 'without': { 'start': 1 }, + 'zipAll': { 'start': 0 } +}; + +/** Used to identify methods which mutate arrays or objects. */ +exports.mutate = { + 'array': { + 'fill': true, + 'pull': true, + 'pullAll': true, + 'pullAllBy': true, + 'pullAllWith': true, + 'pullAt': true, + 'remove': true, + 'reverse': true + }, + 'object': { + 'assign': true, + 'assignAll': true, + 'assignAllWith': true, + 'assignIn': true, + 'assignInAll': true, + 'assignInAllWith': true, + 'assignInWith': true, + 'assignWith': true, + 'defaults': true, + 'defaultsAll': true, + 'defaultsDeep': true, + 'defaultsDeepAll': true, + 'merge': true, + 'mergeAll': true, + 'mergeAllWith': true, + 'mergeWith': true, + }, + 'set': { + 'set': true, + 'setWith': true, + 'unset': true, + 'update': true, + 'updateWith': true + } +}; + +/** Used to map real names to their aliases. */ +exports.realToAlias = (function() { + var hasOwnProperty = Object.prototype.hasOwnProperty, + object = exports.aliasToReal, + result = {}; + + for (var key in object) { + var value = object[key]; + if (hasOwnProperty.call(result, value)) { + result[value].push(key); + } else { + result[value] = [key]; + } + } + return result; +}()); + +/** Used to map method names to other names. */ +exports.remap = { + 'assignAll': 'assign', + 'assignAllWith': 'assignWith', + 'assignInAll': 'assignIn', + 'assignInAllWith': 'assignInWith', + 'curryN': 'curry', + 'curryRightN': 'curryRight', + 'defaultsAll': 'defaults', + 'defaultsDeepAll': 'defaultsDeep', + 'findFrom': 'find', + 'findIndexFrom': 'findIndex', + 'findLastFrom': 'findLast', + 'findLastIndexFrom': 'findLastIndex', + 'getOr': 'get', + 'includesFrom': 'includes', + 'indexOfFrom': 'indexOf', + 'invokeArgs': 'invoke', + 'invokeArgsMap': 'invokeMap', + 'lastIndexOfFrom': 'lastIndexOf', + 'mergeAll': 'merge', + 'mergeAllWith': 'mergeWith', + 'padChars': 'pad', + 'padCharsEnd': 'padEnd', + 'padCharsStart': 'padStart', + 'propertyOf': 'get', + 'rangeStep': 'range', + 'rangeStepRight': 'rangeRight', + 'restFrom': 'rest', + 'spreadFrom': 'spread', + 'trimChars': 'trim', + 'trimCharsEnd': 'trimEnd', + 'trimCharsStart': 'trimStart', + 'zipAll': 'zip' +}; + +/** Used to track methods that skip fixing their arity. */ +exports.skipFixed = { + 'castArray': true, + 'flow': true, + 'flowRight': true, + 'iteratee': true, + 'mixin': true, + 'rearg': true, + 'runInContext': true +}; + +/** Used to track methods that skip rearranging arguments. */ +exports.skipRearg = { + 'add': true, + 'assign': true, + 'assignIn': true, + 'bind': true, + 'bindKey': true, + 'concat': true, + 'difference': true, + 'divide': true, + 'eq': true, + 'gt': true, + 'gte': true, + 'isEqual': true, + 'lt': true, + 'lte': true, + 'matchesProperty': true, + 'merge': true, + 'multiply': true, + 'overArgs': true, + 'partial': true, + 'partialRight': true, + 'propertyOf': true, + 'random': true, + 'range': true, + 'rangeRight': true, + 'subtract': true, + 'zip': true, + 'zipObject': true, + 'zipObjectDeep': true +}; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/_util.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/_util.js new file mode 100644 index 00000000..1dbf36f5 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/_util.js @@ -0,0 +1,16 @@ +module.exports = { + 'ary': require('../ary'), + 'assign': require('../_baseAssign'), + 'clone': require('../clone'), + 'curry': require('../curry'), + 'forEach': require('../_arrayEach'), + 'isArray': require('../isArray'), + 'isError': require('../isError'), + 'isFunction': require('../isFunction'), + 'isWeakMap': require('../isWeakMap'), + 'iteratee': require('../iteratee'), + 'keys': require('../_baseKeys'), + 'rearg': require('../rearg'), + 'toInteger': require('../toInteger'), + 'toPath': require('../toPath') +}; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/add.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/add.js new file mode 100644 index 00000000..816eeece --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/add.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('add', require('../add')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/after.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/after.js new file mode 100644 index 00000000..21a0167a --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/after.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('after', require('../after')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/all.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/all.js new file mode 100644 index 00000000..d0839f77 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/all.js @@ -0,0 +1 @@ +module.exports = require('./every'); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/allPass.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/allPass.js new file mode 100644 index 00000000..79b73ef8 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/allPass.js @@ -0,0 +1 @@ +module.exports = require('./overEvery'); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/always.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/always.js new file mode 100644 index 00000000..98877030 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/always.js @@ -0,0 +1 @@ +module.exports = require('./constant'); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/any.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/any.js new file mode 100644 index 00000000..900ac25e --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/any.js @@ -0,0 +1 @@ +module.exports = require('./some'); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/anyPass.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/anyPass.js new file mode 100644 index 00000000..2774ab37 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/anyPass.js @@ -0,0 +1 @@ +module.exports = require('./overSome'); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/apply.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/apply.js new file mode 100644 index 00000000..2b757129 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/apply.js @@ -0,0 +1 @@ +module.exports = require('./spread'); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/array.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/array.js new file mode 100644 index 00000000..fe939c2c --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/array.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../array')); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/ary.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/ary.js new file mode 100644 index 00000000..8edf1877 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/ary.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('ary', require('../ary')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/assign.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/assign.js new file mode 100644 index 00000000..23f47af1 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/assign.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('assign', require('../assign')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/assignAll.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/assignAll.js new file mode 100644 index 00000000..b1d36c7e --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/assignAll.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('assignAll', require('../assign')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/assignAllWith.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/assignAllWith.js new file mode 100644 index 00000000..21e836e6 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/assignAllWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('assignAllWith', require('../assignWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/assignIn.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/assignIn.js new file mode 100644 index 00000000..6e7c65fa --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/assignIn.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('assignIn', require('../assignIn')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/assignInAll.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/assignInAll.js new file mode 100644 index 00000000..7ba75dba --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/assignInAll.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('assignInAll', require('../assignIn')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/assignInAllWith.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/assignInAllWith.js new file mode 100644 index 00000000..e766903d --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/assignInAllWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('assignInAllWith', require('../assignInWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/assignInWith.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/assignInWith.js new file mode 100644 index 00000000..acb59236 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/assignInWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('assignInWith', require('../assignInWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/assignWith.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/assignWith.js new file mode 100644 index 00000000..eb925212 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/assignWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('assignWith', require('../assignWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/assoc.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/assoc.js new file mode 100644 index 00000000..7648820c --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/assoc.js @@ -0,0 +1 @@ +module.exports = require('./set'); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/assocPath.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/assocPath.js new file mode 100644 index 00000000..7648820c --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/assocPath.js @@ -0,0 +1 @@ +module.exports = require('./set'); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/at.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/at.js new file mode 100644 index 00000000..cc39d257 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/at.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('at', require('../at')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/attempt.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/attempt.js new file mode 100644 index 00000000..26ca42ea --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/attempt.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('attempt', require('../attempt')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/before.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/before.js new file mode 100644 index 00000000..7a2de65d --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/before.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('before', require('../before')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/bind.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/bind.js new file mode 100644 index 00000000..5cbe4f30 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/bind.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('bind', require('../bind')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/bindAll.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/bindAll.js new file mode 100644 index 00000000..6b4a4a0f --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/bindAll.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('bindAll', require('../bindAll')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/bindKey.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/bindKey.js new file mode 100644 index 00000000..6a46c6b1 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/bindKey.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('bindKey', require('../bindKey')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/camelCase.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/camelCase.js new file mode 100644 index 00000000..87b77b49 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/camelCase.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('camelCase', require('../camelCase'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/capitalize.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/capitalize.js new file mode 100644 index 00000000..cac74e14 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/capitalize.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('capitalize', require('../capitalize'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/castArray.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/castArray.js new file mode 100644 index 00000000..8681c099 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/castArray.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('castArray', require('../castArray')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/ceil.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/ceil.js new file mode 100644 index 00000000..f416b729 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/ceil.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('ceil', require('../ceil')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/chain.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/chain.js new file mode 100644 index 00000000..604fe398 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/chain.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('chain', require('../chain'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/chunk.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/chunk.js new file mode 100644 index 00000000..871ab085 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/chunk.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('chunk', require('../chunk')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/clamp.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/clamp.js new file mode 100644 index 00000000..3b06c01c --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/clamp.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('clamp', require('../clamp')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/clone.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/clone.js new file mode 100644 index 00000000..cadb59c9 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/clone.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('clone', require('../clone'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/cloneDeep.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/cloneDeep.js new file mode 100644 index 00000000..a6107aac --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/cloneDeep.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('cloneDeep', require('../cloneDeep'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/cloneDeepWith.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/cloneDeepWith.js new file mode 100644 index 00000000..6f01e44a --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/cloneDeepWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('cloneDeepWith', require('../cloneDeepWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/cloneWith.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/cloneWith.js new file mode 100644 index 00000000..aa885781 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/cloneWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('cloneWith', require('../cloneWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/collection.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/collection.js new file mode 100644 index 00000000..fc8b328a --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/collection.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../collection')); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/commit.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/commit.js new file mode 100644 index 00000000..130a894f --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/commit.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('commit', require('../commit'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/compact.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/compact.js new file mode 100644 index 00000000..ce8f7a1a --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/compact.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('compact', require('../compact'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/complement.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/complement.js new file mode 100644 index 00000000..93eb462b --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/complement.js @@ -0,0 +1 @@ +module.exports = require('./negate'); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/compose.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/compose.js new file mode 100644 index 00000000..1954e942 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/compose.js @@ -0,0 +1 @@ +module.exports = require('./flowRight'); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/concat.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/concat.js new file mode 100644 index 00000000..e59346ad --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/concat.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('concat', require('../concat')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/cond.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/cond.js new file mode 100644 index 00000000..6a0120ef --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/cond.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('cond', require('../cond'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/conforms.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/conforms.js new file mode 100644 index 00000000..3247f64a --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/conforms.js @@ -0,0 +1 @@ +module.exports = require('./conformsTo'); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/conformsTo.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/conformsTo.js new file mode 100644 index 00000000..aa7f41ec --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/conformsTo.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('conformsTo', require('../conformsTo')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/constant.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/constant.js new file mode 100644 index 00000000..9e406fc0 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/constant.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('constant', require('../constant'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/contains.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/contains.js new file mode 100644 index 00000000..594722af --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/contains.js @@ -0,0 +1 @@ +module.exports = require('./includes'); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/convert.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/convert.js new file mode 100644 index 00000000..4795dc42 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/convert.js @@ -0,0 +1,18 @@ +var baseConvert = require('./_baseConvert'), + util = require('./_util'); + +/** + * Converts `func` of `name` to an immutable auto-curried iteratee-first data-last + * version with conversion `options` applied. If `name` is an object its methods + * will be converted. + * + * @param {string} name The name of the function to wrap. + * @param {Function} [func] The function to wrap. + * @param {Object} [options] The options object. See `baseConvert` for more details. + * @returns {Function|Object} Returns the converted function or object. + */ +function convert(name, func, options) { + return baseConvert(util, name, func, options); +} + +module.exports = convert; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/countBy.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/countBy.js new file mode 100644 index 00000000..dfa46432 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/countBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('countBy', require('../countBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/create.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/create.js new file mode 100644 index 00000000..752025fb --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/create.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('create', require('../create')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/curry.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/curry.js new file mode 100644 index 00000000..b0b4168c --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/curry.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('curry', require('../curry')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/curryN.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/curryN.js new file mode 100644 index 00000000..2ae7d00a --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/curryN.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('curryN', require('../curry')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/curryRight.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/curryRight.js new file mode 100644 index 00000000..cb619eb5 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/curryRight.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('curryRight', require('../curryRight')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/curryRightN.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/curryRightN.js new file mode 100644 index 00000000..2495afc8 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/curryRightN.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('curryRightN', require('../curryRight')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/date.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/date.js new file mode 100644 index 00000000..82cb952b --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/date.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../date')); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/debounce.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/debounce.js new file mode 100644 index 00000000..26122293 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/debounce.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('debounce', require('../debounce')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/deburr.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/deburr.js new file mode 100644 index 00000000..96463ab8 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/deburr.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('deburr', require('../deburr'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/defaultTo.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/defaultTo.js new file mode 100644 index 00000000..d6b52a44 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/defaultTo.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('defaultTo', require('../defaultTo')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/defaults.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/defaults.js new file mode 100644 index 00000000..e1a8e6e7 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/defaults.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('defaults', require('../defaults')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/defaultsAll.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/defaultsAll.js new file mode 100644 index 00000000..238fcc3c --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/defaultsAll.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('defaultsAll', require('../defaults')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/defaultsDeep.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/defaultsDeep.js new file mode 100644 index 00000000..1f172ff9 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/defaultsDeep.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('defaultsDeep', require('../defaultsDeep')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/defaultsDeepAll.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/defaultsDeepAll.js new file mode 100644 index 00000000..6835f2f0 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/defaultsDeepAll.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('defaultsDeepAll', require('../defaultsDeep')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/defer.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/defer.js new file mode 100644 index 00000000..ec7990fe --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/defer.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('defer', require('../defer'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/delay.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/delay.js new file mode 100644 index 00000000..556dbd56 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/delay.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('delay', require('../delay')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/difference.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/difference.js new file mode 100644 index 00000000..2d037654 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/difference.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('difference', require('../difference')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/differenceBy.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/differenceBy.js new file mode 100644 index 00000000..2f914910 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/differenceBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('differenceBy', require('../differenceBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/differenceWith.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/differenceWith.js new file mode 100644 index 00000000..bcf5ad2e --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/differenceWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('differenceWith', require('../differenceWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/dissoc.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/dissoc.js new file mode 100644 index 00000000..7ec7be19 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/dissoc.js @@ -0,0 +1 @@ +module.exports = require('./unset'); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/dissocPath.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/dissocPath.js new file mode 100644 index 00000000..7ec7be19 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/dissocPath.js @@ -0,0 +1 @@ +module.exports = require('./unset'); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/divide.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/divide.js new file mode 100644 index 00000000..82048c5e --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/divide.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('divide', require('../divide')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/drop.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/drop.js new file mode 100644 index 00000000..2fa9b4fa --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/drop.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('drop', require('../drop')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/dropLast.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/dropLast.js new file mode 100644 index 00000000..174e5255 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/dropLast.js @@ -0,0 +1 @@ +module.exports = require('./dropRight'); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/dropLastWhile.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/dropLastWhile.js new file mode 100644 index 00000000..be2a9d24 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/dropLastWhile.js @@ -0,0 +1 @@ +module.exports = require('./dropRightWhile'); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/dropRight.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/dropRight.js new file mode 100644 index 00000000..e98881fc --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/dropRight.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('dropRight', require('../dropRight')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/dropRightWhile.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/dropRightWhile.js new file mode 100644 index 00000000..cacaa701 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/dropRightWhile.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('dropRightWhile', require('../dropRightWhile')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/dropWhile.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/dropWhile.js new file mode 100644 index 00000000..285f864d --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/dropWhile.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('dropWhile', require('../dropWhile')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/each.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/each.js new file mode 100644 index 00000000..8800f420 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/each.js @@ -0,0 +1 @@ +module.exports = require('./forEach'); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/eachRight.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/eachRight.js new file mode 100644 index 00000000..3252b2ab --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/eachRight.js @@ -0,0 +1 @@ +module.exports = require('./forEachRight'); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/endsWith.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/endsWith.js new file mode 100644 index 00000000..17dc2a49 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/endsWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('endsWith', require('../endsWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/entries.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/entries.js new file mode 100644 index 00000000..7a88df20 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/entries.js @@ -0,0 +1 @@ +module.exports = require('./toPairs'); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/entriesIn.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/entriesIn.js new file mode 100644 index 00000000..f6c6331c --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/entriesIn.js @@ -0,0 +1 @@ +module.exports = require('./toPairsIn'); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/eq.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/eq.js new file mode 100644 index 00000000..9a3d21bf --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/eq.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('eq', require('../eq')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/equals.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/equals.js new file mode 100644 index 00000000..e6a5ce0c --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/equals.js @@ -0,0 +1 @@ +module.exports = require('./isEqual'); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/escape.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/escape.js new file mode 100644 index 00000000..52c1fbba --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/escape.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('escape', require('../escape'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/escapeRegExp.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/escapeRegExp.js new file mode 100644 index 00000000..369b2eff --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/escapeRegExp.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('escapeRegExp', require('../escapeRegExp'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/every.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/every.js new file mode 100644 index 00000000..95c2776c --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/every.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('every', require('../every')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/extend.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/extend.js new file mode 100644 index 00000000..e00166c2 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/extend.js @@ -0,0 +1 @@ +module.exports = require('./assignIn'); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/extendAll.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/extendAll.js new file mode 100644 index 00000000..cc55b64f --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/extendAll.js @@ -0,0 +1 @@ +module.exports = require('./assignInAll'); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/extendAllWith.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/extendAllWith.js new file mode 100644 index 00000000..6679d208 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/extendAllWith.js @@ -0,0 +1 @@ +module.exports = require('./assignInAllWith'); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/extendWith.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/extendWith.js new file mode 100644 index 00000000..dbdcb3b4 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/extendWith.js @@ -0,0 +1 @@ +module.exports = require('./assignInWith'); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/fill.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/fill.js new file mode 100644 index 00000000..b2d47e84 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/fill.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('fill', require('../fill')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/filter.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/filter.js new file mode 100644 index 00000000..796d501c --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/filter.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('filter', require('../filter')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/find.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/find.js new file mode 100644 index 00000000..f805d336 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/find.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('find', require('../find')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/findFrom.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/findFrom.js new file mode 100644 index 00000000..da8275e8 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/findFrom.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('findFrom', require('../find')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/findIndex.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/findIndex.js new file mode 100644 index 00000000..8c15fd11 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/findIndex.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('findIndex', require('../findIndex')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/findIndexFrom.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/findIndexFrom.js new file mode 100644 index 00000000..32e98cb9 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/findIndexFrom.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('findIndexFrom', require('../findIndex')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/findKey.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/findKey.js new file mode 100644 index 00000000..475bcfa8 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/findKey.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('findKey', require('../findKey')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/findLast.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/findLast.js new file mode 100644 index 00000000..093fe94e --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/findLast.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('findLast', require('../findLast')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/findLastFrom.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/findLastFrom.js new file mode 100644 index 00000000..76c38fba --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/findLastFrom.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('findLastFrom', require('../findLast')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/findLastIndex.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/findLastIndex.js new file mode 100644 index 00000000..36986df0 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/findLastIndex.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('findLastIndex', require('../findLastIndex')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/findLastIndexFrom.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/findLastIndexFrom.js new file mode 100644 index 00000000..34c8176c --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/findLastIndexFrom.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('findLastIndexFrom', require('../findLastIndex')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/findLastKey.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/findLastKey.js new file mode 100644 index 00000000..5f81b604 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/findLastKey.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('findLastKey', require('../findLastKey')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/first.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/first.js new file mode 100644 index 00000000..53f4ad13 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/first.js @@ -0,0 +1 @@ +module.exports = require('./head'); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/flatMap.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/flatMap.js new file mode 100644 index 00000000..d01dc4d0 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/flatMap.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('flatMap', require('../flatMap')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/flatMapDeep.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/flatMapDeep.js new file mode 100644 index 00000000..569c42eb --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/flatMapDeep.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('flatMapDeep', require('../flatMapDeep')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/flatMapDepth.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/flatMapDepth.js new file mode 100644 index 00000000..6eb68fde --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/flatMapDepth.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('flatMapDepth', require('../flatMapDepth')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/flatten.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/flatten.js new file mode 100644 index 00000000..30425d89 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/flatten.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('flatten', require('../flatten'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/flattenDeep.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/flattenDeep.js new file mode 100644 index 00000000..aed5db27 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/flattenDeep.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('flattenDeep', require('../flattenDeep'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/flattenDepth.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/flattenDepth.js new file mode 100644 index 00000000..ad65e378 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/flattenDepth.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('flattenDepth', require('../flattenDepth')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/flip.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/flip.js new file mode 100644 index 00000000..0547e7b4 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/flip.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('flip', require('../flip'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/floor.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/floor.js new file mode 100644 index 00000000..a6cf3358 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/floor.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('floor', require('../floor')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/flow.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/flow.js new file mode 100644 index 00000000..cd83677a --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/flow.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('flow', require('../flow')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/flowRight.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/flowRight.js new file mode 100644 index 00000000..972a5b9b --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/flowRight.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('flowRight', require('../flowRight')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/forEach.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/forEach.js new file mode 100644 index 00000000..2f494521 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/forEach.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('forEach', require('../forEach')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/forEachRight.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/forEachRight.js new file mode 100644 index 00000000..3ff97336 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/forEachRight.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('forEachRight', require('../forEachRight')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/forIn.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/forIn.js new file mode 100644 index 00000000..9341749b --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/forIn.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('forIn', require('../forIn')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/forInRight.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/forInRight.js new file mode 100644 index 00000000..cecf8bbf --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/forInRight.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('forInRight', require('../forInRight')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/forOwn.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/forOwn.js new file mode 100644 index 00000000..246449e9 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/forOwn.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('forOwn', require('../forOwn')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/forOwnRight.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/forOwnRight.js new file mode 100644 index 00000000..c5e826e0 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/forOwnRight.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('forOwnRight', require('../forOwnRight')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/fromPairs.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/fromPairs.js new file mode 100644 index 00000000..f8cc5968 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/fromPairs.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('fromPairs', require('../fromPairs')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/function.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/function.js new file mode 100644 index 00000000..dfe69b1f --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/function.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../function')); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/functions.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/functions.js new file mode 100644 index 00000000..09d1bb1b --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/functions.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('functions', require('../functions'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/functionsIn.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/functionsIn.js new file mode 100644 index 00000000..2cfeb83e --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/functionsIn.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('functionsIn', require('../functionsIn'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/get.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/get.js new file mode 100644 index 00000000..6d3a3286 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/get.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('get', require('../get')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/getOr.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/getOr.js new file mode 100644 index 00000000..7dbf771f --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/getOr.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('getOr', require('../get')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/groupBy.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/groupBy.js new file mode 100644 index 00000000..fc0bc78a --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/groupBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('groupBy', require('../groupBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/gt.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/gt.js new file mode 100644 index 00000000..9e57c808 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/gt.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('gt', require('../gt')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/gte.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/gte.js new file mode 100644 index 00000000..45847863 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/gte.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('gte', require('../gte')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/has.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/has.js new file mode 100644 index 00000000..b9012983 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/has.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('has', require('../has')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/hasIn.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/hasIn.js new file mode 100644 index 00000000..b3c3d1a3 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/hasIn.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('hasIn', require('../hasIn')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/head.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/head.js new file mode 100644 index 00000000..2694f0a2 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/head.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('head', require('../head'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/identical.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/identical.js new file mode 100644 index 00000000..85563f4a --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/identical.js @@ -0,0 +1 @@ +module.exports = require('./eq'); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/identity.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/identity.js new file mode 100644 index 00000000..096415a5 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/identity.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('identity', require('../identity'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/inRange.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/inRange.js new file mode 100644 index 00000000..202d940b --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/inRange.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('inRange', require('../inRange')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/includes.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/includes.js new file mode 100644 index 00000000..11467805 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/includes.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('includes', require('../includes')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/includesFrom.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/includesFrom.js new file mode 100644 index 00000000..683afdb4 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/includesFrom.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('includesFrom', require('../includes')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/indexBy.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/indexBy.js new file mode 100644 index 00000000..7e64bc0f --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/indexBy.js @@ -0,0 +1 @@ +module.exports = require('./keyBy'); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/indexOf.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/indexOf.js new file mode 100644 index 00000000..524658eb --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/indexOf.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('indexOf', require('../indexOf')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/indexOfFrom.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/indexOfFrom.js new file mode 100644 index 00000000..d99c822f --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/indexOfFrom.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('indexOfFrom', require('../indexOf')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/init.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/init.js new file mode 100644 index 00000000..2f88d8b0 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/init.js @@ -0,0 +1 @@ +module.exports = require('./initial'); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/initial.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/initial.js new file mode 100644 index 00000000..b732ba0b --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/initial.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('initial', require('../initial'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/intersection.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/intersection.js new file mode 100644 index 00000000..52936d56 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/intersection.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('intersection', require('../intersection')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/intersectionBy.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/intersectionBy.js new file mode 100644 index 00000000..72629f27 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/intersectionBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('intersectionBy', require('../intersectionBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/intersectionWith.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/intersectionWith.js new file mode 100644 index 00000000..e064f400 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/intersectionWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('intersectionWith', require('../intersectionWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/invert.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/invert.js new file mode 100644 index 00000000..2d5d1f0d --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/invert.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('invert', require('../invert')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/invertBy.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/invertBy.js new file mode 100644 index 00000000..63ca97ec --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/invertBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('invertBy', require('../invertBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/invertObj.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/invertObj.js new file mode 100644 index 00000000..f1d842e4 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/invertObj.js @@ -0,0 +1 @@ +module.exports = require('./invert'); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/invoke.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/invoke.js new file mode 100644 index 00000000..fcf17f0d --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/invoke.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('invoke', require('../invoke')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/invokeArgs.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/invokeArgs.js new file mode 100644 index 00000000..d3f2953f --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/invokeArgs.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('invokeArgs', require('../invoke')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/invokeArgsMap.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/invokeArgsMap.js new file mode 100644 index 00000000..eaa9f84f --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/invokeArgsMap.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('invokeArgsMap', require('../invokeMap')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/invokeMap.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/invokeMap.js new file mode 100644 index 00000000..6515fd73 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/invokeMap.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('invokeMap', require('../invokeMap')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isArguments.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isArguments.js new file mode 100644 index 00000000..1d93c9e5 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isArguments.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isArguments', require('../isArguments'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isArray.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isArray.js new file mode 100644 index 00000000..ba7ade8d --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isArray.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isArray', require('../isArray'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isArrayBuffer.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isArrayBuffer.js new file mode 100644 index 00000000..5088513f --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isArrayBuffer.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isArrayBuffer', require('../isArrayBuffer'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isArrayLike.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isArrayLike.js new file mode 100644 index 00000000..8f1856bf --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isArrayLike.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isArrayLike', require('../isArrayLike'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isArrayLikeObject.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isArrayLikeObject.js new file mode 100644 index 00000000..21084984 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isArrayLikeObject.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isArrayLikeObject', require('../isArrayLikeObject'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isBoolean.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isBoolean.js new file mode 100644 index 00000000..9339f75b --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isBoolean.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isBoolean', require('../isBoolean'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isBuffer.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isBuffer.js new file mode 100644 index 00000000..e60b1238 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isBuffer.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isBuffer', require('../isBuffer'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isDate.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isDate.js new file mode 100644 index 00000000..dc41d089 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isDate.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isDate', require('../isDate'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isElement.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isElement.js new file mode 100644 index 00000000..18ee039a --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isElement.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isElement', require('../isElement'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isEmpty.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isEmpty.js new file mode 100644 index 00000000..0f4ae841 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isEmpty.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isEmpty', require('../isEmpty'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isEqual.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isEqual.js new file mode 100644 index 00000000..41383865 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isEqual.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isEqual', require('../isEqual')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isEqualWith.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isEqualWith.js new file mode 100644 index 00000000..029ff5cd --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isEqualWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isEqualWith', require('../isEqualWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isError.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isError.js new file mode 100644 index 00000000..3dfd81cc --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isError.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isError', require('../isError'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isFinite.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isFinite.js new file mode 100644 index 00000000..0b647b84 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isFinite.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isFinite', require('../isFinite'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isFunction.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isFunction.js new file mode 100644 index 00000000..ff8e5c45 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isFunction.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isFunction', require('../isFunction'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isInteger.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isInteger.js new file mode 100644 index 00000000..67af4ff6 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isInteger.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isInteger', require('../isInteger'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isLength.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isLength.js new file mode 100644 index 00000000..fc101c5a --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isLength.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isLength', require('../isLength'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isMap.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isMap.js new file mode 100644 index 00000000..a209aa66 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isMap.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isMap', require('../isMap'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isMatch.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isMatch.js new file mode 100644 index 00000000..6264ca17 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isMatch.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isMatch', require('../isMatch')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isMatchWith.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isMatchWith.js new file mode 100644 index 00000000..d95f3193 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isMatchWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isMatchWith', require('../isMatchWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isNaN.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isNaN.js new file mode 100644 index 00000000..66a978f1 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isNaN.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isNaN', require('../isNaN'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isNative.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isNative.js new file mode 100644 index 00000000..3d775ba9 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isNative.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isNative', require('../isNative'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isNil.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isNil.js new file mode 100644 index 00000000..5952c028 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isNil.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isNil', require('../isNil'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isNull.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isNull.js new file mode 100644 index 00000000..f201a354 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isNull.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isNull', require('../isNull'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isNumber.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isNumber.js new file mode 100644 index 00000000..a2b5fa04 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isNumber.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isNumber', require('../isNumber'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isObject.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isObject.js new file mode 100644 index 00000000..231ace03 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isObject.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isObject', require('../isObject'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isObjectLike.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isObjectLike.js new file mode 100644 index 00000000..f16082e6 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isObjectLike.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isObjectLike', require('../isObjectLike'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isPlainObject.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isPlainObject.js new file mode 100644 index 00000000..b5bea90d --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isPlainObject.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isPlainObject', require('../isPlainObject'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isRegExp.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isRegExp.js new file mode 100644 index 00000000..12a1a3d7 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isRegExp.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isRegExp', require('../isRegExp'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isSafeInteger.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isSafeInteger.js new file mode 100644 index 00000000..7230f552 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isSafeInteger.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isSafeInteger', require('../isSafeInteger'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isSet.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isSet.js new file mode 100644 index 00000000..35c01f6f --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isSet.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isSet', require('../isSet'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isString.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isString.js new file mode 100644 index 00000000..1fd0679e --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isString.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isString', require('../isString'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isSymbol.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isSymbol.js new file mode 100644 index 00000000..38676956 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isSymbol.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isSymbol', require('../isSymbol'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isTypedArray.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isTypedArray.js new file mode 100644 index 00000000..85679538 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isTypedArray.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isTypedArray', require('../isTypedArray'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isUndefined.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isUndefined.js new file mode 100644 index 00000000..ddbca31c --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isUndefined.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isUndefined', require('../isUndefined'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isWeakMap.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isWeakMap.js new file mode 100644 index 00000000..ef60c613 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isWeakMap.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isWeakMap', require('../isWeakMap'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isWeakSet.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isWeakSet.js new file mode 100644 index 00000000..c99bfaa6 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/isWeakSet.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isWeakSet', require('../isWeakSet'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/iteratee.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/iteratee.js new file mode 100644 index 00000000..9f0f7173 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/iteratee.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('iteratee', require('../iteratee')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/join.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/join.js new file mode 100644 index 00000000..a220e003 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/join.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('join', require('../join')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/juxt.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/juxt.js new file mode 100644 index 00000000..f71e04e0 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/juxt.js @@ -0,0 +1 @@ +module.exports = require('./over'); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/kebabCase.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/kebabCase.js new file mode 100644 index 00000000..60737f17 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/kebabCase.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('kebabCase', require('../kebabCase'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/keyBy.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/keyBy.js new file mode 100644 index 00000000..9a6a85d4 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/keyBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('keyBy', require('../keyBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/keys.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/keys.js new file mode 100644 index 00000000..e12bb07f --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/keys.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('keys', require('../keys'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/keysIn.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/keysIn.js new file mode 100644 index 00000000..f3eb36a8 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/keysIn.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('keysIn', require('../keysIn'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/lang.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/lang.js new file mode 100644 index 00000000..08cc9c14 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/lang.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../lang')); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/last.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/last.js new file mode 100644 index 00000000..0f716993 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/last.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('last', require('../last'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/lastIndexOf.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/lastIndexOf.js new file mode 100644 index 00000000..ddf39c30 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/lastIndexOf.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('lastIndexOf', require('../lastIndexOf')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/lastIndexOfFrom.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/lastIndexOfFrom.js new file mode 100644 index 00000000..1ff6a0b5 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/lastIndexOfFrom.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('lastIndexOfFrom', require('../lastIndexOf')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/lowerCase.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/lowerCase.js new file mode 100644 index 00000000..ea64bc15 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/lowerCase.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('lowerCase', require('../lowerCase'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/lowerFirst.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/lowerFirst.js new file mode 100644 index 00000000..539720a3 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/lowerFirst.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('lowerFirst', require('../lowerFirst'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/lt.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/lt.js new file mode 100644 index 00000000..a31d21ec --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/lt.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('lt', require('../lt')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/lte.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/lte.js new file mode 100644 index 00000000..d795d10e --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/lte.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('lte', require('../lte')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/map.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/map.js new file mode 100644 index 00000000..cf987943 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/map.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('map', require('../map')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/mapKeys.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/mapKeys.js new file mode 100644 index 00000000..16845870 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/mapKeys.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('mapKeys', require('../mapKeys')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/mapValues.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/mapValues.js new file mode 100644 index 00000000..40049727 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/mapValues.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('mapValues', require('../mapValues')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/matches.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/matches.js new file mode 100644 index 00000000..29d1e1e4 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/matches.js @@ -0,0 +1 @@ +module.exports = require('./isMatch'); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/matchesProperty.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/matchesProperty.js new file mode 100644 index 00000000..4575bd24 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/matchesProperty.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('matchesProperty', require('../matchesProperty')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/math.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/math.js new file mode 100644 index 00000000..e8f50f79 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/math.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../math')); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/max.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/max.js new file mode 100644 index 00000000..a66acac2 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/max.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('max', require('../max'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/maxBy.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/maxBy.js new file mode 100644 index 00000000..d083fd64 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/maxBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('maxBy', require('../maxBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/mean.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/mean.js new file mode 100644 index 00000000..31172460 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/mean.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('mean', require('../mean'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/meanBy.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/meanBy.js new file mode 100644 index 00000000..556f25ed --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/meanBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('meanBy', require('../meanBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/memoize.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/memoize.js new file mode 100644 index 00000000..638eec63 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/memoize.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('memoize', require('../memoize')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/merge.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/merge.js new file mode 100644 index 00000000..ac66adde --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/merge.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('merge', require('../merge')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/mergeAll.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/mergeAll.js new file mode 100644 index 00000000..a3674d67 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/mergeAll.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('mergeAll', require('../merge')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/mergeAllWith.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/mergeAllWith.js new file mode 100644 index 00000000..4bd4206d --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/mergeAllWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('mergeAllWith', require('../mergeWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/mergeWith.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/mergeWith.js new file mode 100644 index 00000000..00d44d5e --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/mergeWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('mergeWith', require('../mergeWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/method.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/method.js new file mode 100644 index 00000000..f4060c68 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/method.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('method', require('../method')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/methodOf.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/methodOf.js new file mode 100644 index 00000000..61399056 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/methodOf.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('methodOf', require('../methodOf')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/min.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/min.js new file mode 100644 index 00000000..d12c6b40 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/min.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('min', require('../min'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/minBy.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/minBy.js new file mode 100644 index 00000000..fdb9e24d --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/minBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('minBy', require('../minBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/mixin.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/mixin.js new file mode 100644 index 00000000..332e6fbf --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/mixin.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('mixin', require('../mixin')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/multiply.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/multiply.js new file mode 100644 index 00000000..4dcf0b0d --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/multiply.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('multiply', require('../multiply')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/nAry.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/nAry.js new file mode 100644 index 00000000..f262a76c --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/nAry.js @@ -0,0 +1 @@ +module.exports = require('./ary'); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/negate.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/negate.js new file mode 100644 index 00000000..8b6dc7c5 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/negate.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('negate', require('../negate'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/next.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/next.js new file mode 100644 index 00000000..140155e2 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/next.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('next', require('../next'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/noop.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/noop.js new file mode 100644 index 00000000..b9e32cc8 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/noop.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('noop', require('../noop'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/now.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/now.js new file mode 100644 index 00000000..6de2068a --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/now.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('now', require('../now'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/nth.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/nth.js new file mode 100644 index 00000000..da4fda74 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/nth.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('nth', require('../nth')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/nthArg.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/nthArg.js new file mode 100644 index 00000000..fce31659 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/nthArg.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('nthArg', require('../nthArg')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/number.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/number.js new file mode 100644 index 00000000..5c10b884 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/number.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../number')); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/object.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/object.js new file mode 100644 index 00000000..ae39a134 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/object.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../object')); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/omit.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/omit.js new file mode 100644 index 00000000..fd685291 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/omit.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('omit', require('../omit')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/omitAll.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/omitAll.js new file mode 100644 index 00000000..144cf4b9 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/omitAll.js @@ -0,0 +1 @@ +module.exports = require('./omit'); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/omitBy.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/omitBy.js new file mode 100644 index 00000000..90df7380 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/omitBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('omitBy', require('../omitBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/once.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/once.js new file mode 100644 index 00000000..f8f0a5c7 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/once.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('once', require('../once'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/orderBy.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/orderBy.js new file mode 100644 index 00000000..848e2107 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/orderBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('orderBy', require('../orderBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/over.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/over.js new file mode 100644 index 00000000..01eba7b9 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/over.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('over', require('../over')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/overArgs.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/overArgs.js new file mode 100644 index 00000000..738556f0 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/overArgs.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('overArgs', require('../overArgs')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/overEvery.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/overEvery.js new file mode 100644 index 00000000..9f5a032d --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/overEvery.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('overEvery', require('../overEvery')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/overSome.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/overSome.js new file mode 100644 index 00000000..15939d58 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/overSome.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('overSome', require('../overSome')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/pad.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/pad.js new file mode 100644 index 00000000..f1dea4a9 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/pad.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('pad', require('../pad')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/padChars.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/padChars.js new file mode 100644 index 00000000..d6e0804c --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/padChars.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('padChars', require('../pad')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/padCharsEnd.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/padCharsEnd.js new file mode 100644 index 00000000..d4ab79ad --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/padCharsEnd.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('padCharsEnd', require('../padEnd')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/padCharsStart.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/padCharsStart.js new file mode 100644 index 00000000..a08a3000 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/padCharsStart.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('padCharsStart', require('../padStart')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/padEnd.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/padEnd.js new file mode 100644 index 00000000..a8522ec3 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/padEnd.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('padEnd', require('../padEnd')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/padStart.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/padStart.js new file mode 100644 index 00000000..f4ca79d4 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/padStart.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('padStart', require('../padStart')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/parseInt.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/parseInt.js new file mode 100644 index 00000000..27314ccb --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/parseInt.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('parseInt', require('../parseInt')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/partial.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/partial.js new file mode 100644 index 00000000..5d460159 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/partial.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('partial', require('../partial')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/partialRight.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/partialRight.js new file mode 100644 index 00000000..7f05fed0 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/partialRight.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('partialRight', require('../partialRight')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/partition.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/partition.js new file mode 100644 index 00000000..2ebcacc1 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/partition.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('partition', require('../partition')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/path.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/path.js new file mode 100644 index 00000000..b29cfb21 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/path.js @@ -0,0 +1 @@ +module.exports = require('./get'); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/pathEq.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/pathEq.js new file mode 100644 index 00000000..36c027a3 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/pathEq.js @@ -0,0 +1 @@ +module.exports = require('./matchesProperty'); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/pathOr.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/pathOr.js new file mode 100644 index 00000000..4ab58209 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/pathOr.js @@ -0,0 +1 @@ +module.exports = require('./getOr'); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/paths.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/paths.js new file mode 100644 index 00000000..1eb7950a --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/paths.js @@ -0,0 +1 @@ +module.exports = require('./at'); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/pick.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/pick.js new file mode 100644 index 00000000..197393de --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/pick.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('pick', require('../pick')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/pickAll.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/pickAll.js new file mode 100644 index 00000000..a8ecd461 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/pickAll.js @@ -0,0 +1 @@ +module.exports = require('./pick'); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/pickBy.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/pickBy.js new file mode 100644 index 00000000..d832d16b --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/pickBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('pickBy', require('../pickBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/pipe.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/pipe.js new file mode 100644 index 00000000..b2e1e2cc --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/pipe.js @@ -0,0 +1 @@ +module.exports = require('./flow'); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/placeholder.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/placeholder.js new file mode 100644 index 00000000..1ce17393 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/placeholder.js @@ -0,0 +1,6 @@ +/** + * The default argument placeholder value for methods. + * + * @type {Object} + */ +module.exports = {}; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/plant.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/plant.js new file mode 100644 index 00000000..eca8f32b --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/plant.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('plant', require('../plant'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/pluck.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/pluck.js new file mode 100644 index 00000000..0d1e1abf --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/pluck.js @@ -0,0 +1 @@ +module.exports = require('./map'); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/prop.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/prop.js new file mode 100644 index 00000000..b29cfb21 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/prop.js @@ -0,0 +1 @@ +module.exports = require('./get'); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/propEq.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/propEq.js new file mode 100644 index 00000000..36c027a3 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/propEq.js @@ -0,0 +1 @@ +module.exports = require('./matchesProperty'); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/propOr.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/propOr.js new file mode 100644 index 00000000..4ab58209 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/propOr.js @@ -0,0 +1 @@ +module.exports = require('./getOr'); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/property.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/property.js new file mode 100644 index 00000000..b29cfb21 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/property.js @@ -0,0 +1 @@ +module.exports = require('./get'); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/propertyOf.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/propertyOf.js new file mode 100644 index 00000000..f6273ee4 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/propertyOf.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('propertyOf', require('../get')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/props.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/props.js new file mode 100644 index 00000000..1eb7950a --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/props.js @@ -0,0 +1 @@ +module.exports = require('./at'); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/pull.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/pull.js new file mode 100644 index 00000000..8d7084f0 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/pull.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('pull', require('../pull')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/pullAll.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/pullAll.js new file mode 100644 index 00000000..98d5c9a7 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/pullAll.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('pullAll', require('../pullAll')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/pullAllBy.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/pullAllBy.js new file mode 100644 index 00000000..876bc3bf --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/pullAllBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('pullAllBy', require('../pullAllBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/pullAllWith.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/pullAllWith.js new file mode 100644 index 00000000..f71ba4d7 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/pullAllWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('pullAllWith', require('../pullAllWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/pullAt.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/pullAt.js new file mode 100644 index 00000000..e8b3bb61 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/pullAt.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('pullAt', require('../pullAt')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/random.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/random.js new file mode 100644 index 00000000..99d852e4 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/random.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('random', require('../random')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/range.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/range.js new file mode 100644 index 00000000..a6bb5911 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/range.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('range', require('../range')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/rangeRight.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/rangeRight.js new file mode 100644 index 00000000..fdb712f9 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/rangeRight.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('rangeRight', require('../rangeRight')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/rangeStep.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/rangeStep.js new file mode 100644 index 00000000..d72dfc20 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/rangeStep.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('rangeStep', require('../range')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/rangeStepRight.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/rangeStepRight.js new file mode 100644 index 00000000..8b2a67bc --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/rangeStepRight.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('rangeStepRight', require('../rangeRight')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/rearg.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/rearg.js new file mode 100644 index 00000000..678e02a3 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/rearg.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('rearg', require('../rearg')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/reduce.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/reduce.js new file mode 100644 index 00000000..4cef0a00 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/reduce.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('reduce', require('../reduce')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/reduceRight.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/reduceRight.js new file mode 100644 index 00000000..caf5bb51 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/reduceRight.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('reduceRight', require('../reduceRight')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/reject.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/reject.js new file mode 100644 index 00000000..c1632738 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/reject.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('reject', require('../reject')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/remove.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/remove.js new file mode 100644 index 00000000..e9d13273 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/remove.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('remove', require('../remove')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/repeat.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/repeat.js new file mode 100644 index 00000000..08470f24 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/repeat.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('repeat', require('../repeat')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/replace.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/replace.js new file mode 100644 index 00000000..2227db62 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/replace.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('replace', require('../replace')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/rest.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/rest.js new file mode 100644 index 00000000..c1f3d64b --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/rest.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('rest', require('../rest')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/restFrom.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/restFrom.js new file mode 100644 index 00000000..714e42b5 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/restFrom.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('restFrom', require('../rest')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/result.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/result.js new file mode 100644 index 00000000..f86ce071 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/result.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('result', require('../result')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/reverse.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/reverse.js new file mode 100644 index 00000000..07c9f5e4 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/reverse.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('reverse', require('../reverse')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/round.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/round.js new file mode 100644 index 00000000..4c0e5c82 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/round.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('round', require('../round')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/sample.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/sample.js new file mode 100644 index 00000000..6bea1254 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/sample.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('sample', require('../sample'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/sampleSize.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/sampleSize.js new file mode 100644 index 00000000..359ed6fc --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/sampleSize.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('sampleSize', require('../sampleSize')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/seq.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/seq.js new file mode 100644 index 00000000..d8f42b0a --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/seq.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../seq')); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/set.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/set.js new file mode 100644 index 00000000..0b56a56c --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/set.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('set', require('../set')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/setWith.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/setWith.js new file mode 100644 index 00000000..0b584952 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/setWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('setWith', require('../setWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/shuffle.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/shuffle.js new file mode 100644 index 00000000..aa3a1ca5 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/shuffle.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('shuffle', require('../shuffle'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/size.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/size.js new file mode 100644 index 00000000..7490136e --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/size.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('size', require('../size'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/slice.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/slice.js new file mode 100644 index 00000000..15945d32 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/slice.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('slice', require('../slice')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/snakeCase.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/snakeCase.js new file mode 100644 index 00000000..a0ff7808 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/snakeCase.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('snakeCase', require('../snakeCase'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/some.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/some.js new file mode 100644 index 00000000..a4fa2d00 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/some.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('some', require('../some')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/sortBy.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/sortBy.js new file mode 100644 index 00000000..e0790ad5 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/sortBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('sortBy', require('../sortBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/sortedIndex.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/sortedIndex.js new file mode 100644 index 00000000..364a0543 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/sortedIndex.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('sortedIndex', require('../sortedIndex')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/sortedIndexBy.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/sortedIndexBy.js new file mode 100644 index 00000000..9593dbd1 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/sortedIndexBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('sortedIndexBy', require('../sortedIndexBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/sortedIndexOf.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/sortedIndexOf.js new file mode 100644 index 00000000..c9084cab --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/sortedIndexOf.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('sortedIndexOf', require('../sortedIndexOf')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/sortedLastIndex.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/sortedLastIndex.js new file mode 100644 index 00000000..47fe241a --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/sortedLastIndex.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('sortedLastIndex', require('../sortedLastIndex')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/sortedLastIndexBy.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/sortedLastIndexBy.js new file mode 100644 index 00000000..0f9a3473 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/sortedLastIndexBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('sortedLastIndexBy', require('../sortedLastIndexBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/sortedLastIndexOf.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/sortedLastIndexOf.js new file mode 100644 index 00000000..0d4d9327 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/sortedLastIndexOf.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('sortedLastIndexOf', require('../sortedLastIndexOf')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/sortedUniq.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/sortedUniq.js new file mode 100644 index 00000000..882d2837 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/sortedUniq.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('sortedUniq', require('../sortedUniq'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/sortedUniqBy.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/sortedUniqBy.js new file mode 100644 index 00000000..033db91c --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/sortedUniqBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('sortedUniqBy', require('../sortedUniqBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/split.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/split.js new file mode 100644 index 00000000..14de1a7e --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/split.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('split', require('../split')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/spread.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/spread.js new file mode 100644 index 00000000..2d11b707 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/spread.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('spread', require('../spread')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/spreadFrom.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/spreadFrom.js new file mode 100644 index 00000000..0b630df1 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/spreadFrom.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('spreadFrom', require('../spread')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/startCase.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/startCase.js new file mode 100644 index 00000000..ada98c94 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/startCase.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('startCase', require('../startCase'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/startsWith.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/startsWith.js new file mode 100644 index 00000000..985e2f29 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/startsWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('startsWith', require('../startsWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/string.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/string.js new file mode 100644 index 00000000..773b0370 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/string.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../string')); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/stubArray.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/stubArray.js new file mode 100644 index 00000000..cd604cb4 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/stubArray.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('stubArray', require('../stubArray'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/stubFalse.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/stubFalse.js new file mode 100644 index 00000000..32966645 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/stubFalse.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('stubFalse', require('../stubFalse'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/stubObject.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/stubObject.js new file mode 100644 index 00000000..c6c8ec47 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/stubObject.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('stubObject', require('../stubObject'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/stubString.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/stubString.js new file mode 100644 index 00000000..701051e8 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/stubString.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('stubString', require('../stubString'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/stubTrue.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/stubTrue.js new file mode 100644 index 00000000..9249082c --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/stubTrue.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('stubTrue', require('../stubTrue'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/subtract.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/subtract.js new file mode 100644 index 00000000..d32b16d4 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/subtract.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('subtract', require('../subtract')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/sum.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/sum.js new file mode 100644 index 00000000..5cce12b3 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/sum.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('sum', require('../sum'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/sumBy.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/sumBy.js new file mode 100644 index 00000000..c8826565 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/sumBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('sumBy', require('../sumBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/symmetricDifference.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/symmetricDifference.js new file mode 100644 index 00000000..78c16add --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/symmetricDifference.js @@ -0,0 +1 @@ +module.exports = require('./xor'); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/symmetricDifferenceBy.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/symmetricDifferenceBy.js new file mode 100644 index 00000000..298fc7ff --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/symmetricDifferenceBy.js @@ -0,0 +1 @@ +module.exports = require('./xorBy'); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/symmetricDifferenceWith.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/symmetricDifferenceWith.js new file mode 100644 index 00000000..70bc6faf --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/symmetricDifferenceWith.js @@ -0,0 +1 @@ +module.exports = require('./xorWith'); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/tail.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/tail.js new file mode 100644 index 00000000..f122f0ac --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/tail.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('tail', require('../tail'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/take.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/take.js new file mode 100644 index 00000000..9af98a7b --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/take.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('take', require('../take')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/takeLast.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/takeLast.js new file mode 100644 index 00000000..e98c84a1 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/takeLast.js @@ -0,0 +1 @@ +module.exports = require('./takeRight'); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/takeLastWhile.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/takeLastWhile.js new file mode 100644 index 00000000..5367968a --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/takeLastWhile.js @@ -0,0 +1 @@ +module.exports = require('./takeRightWhile'); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/takeRight.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/takeRight.js new file mode 100644 index 00000000..b82950a6 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/takeRight.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('takeRight', require('../takeRight')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/takeRightWhile.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/takeRightWhile.js new file mode 100644 index 00000000..8ffb0a28 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/takeRightWhile.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('takeRightWhile', require('../takeRightWhile')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/takeWhile.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/takeWhile.js new file mode 100644 index 00000000..28136644 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/takeWhile.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('takeWhile', require('../takeWhile')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/tap.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/tap.js new file mode 100644 index 00000000..d33ad6ec --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/tap.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('tap', require('../tap')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/template.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/template.js new file mode 100644 index 00000000..74857e1c --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/template.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('template', require('../template')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/templateSettings.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/templateSettings.js new file mode 100644 index 00000000..7bcc0a82 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/templateSettings.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('templateSettings', require('../templateSettings'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/throttle.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/throttle.js new file mode 100644 index 00000000..77fff142 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/throttle.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('throttle', require('../throttle')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/thru.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/thru.js new file mode 100644 index 00000000..d42b3b1d --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/thru.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('thru', require('../thru')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/times.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/times.js new file mode 100644 index 00000000..0dab06da --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/times.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('times', require('../times')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/toArray.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/toArray.js new file mode 100644 index 00000000..f0c360ac --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/toArray.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('toArray', require('../toArray'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/toFinite.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/toFinite.js new file mode 100644 index 00000000..3a47687d --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/toFinite.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('toFinite', require('../toFinite'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/toInteger.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/toInteger.js new file mode 100644 index 00000000..e0af6a75 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/toInteger.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('toInteger', require('../toInteger'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/toIterator.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/toIterator.js new file mode 100644 index 00000000..65e6baa9 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/toIterator.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('toIterator', require('../toIterator'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/toJSON.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/toJSON.js new file mode 100644 index 00000000..2d718d0b --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/toJSON.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('toJSON', require('../toJSON'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/toLength.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/toLength.js new file mode 100644 index 00000000..b97cdd93 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/toLength.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('toLength', require('../toLength'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/toLower.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/toLower.js new file mode 100644 index 00000000..616ef36a --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/toLower.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('toLower', require('../toLower'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/toNumber.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/toNumber.js new file mode 100644 index 00000000..d0c6f4d3 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/toNumber.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('toNumber', require('../toNumber'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/toPairs.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/toPairs.js new file mode 100644 index 00000000..af783786 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/toPairs.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('toPairs', require('../toPairs'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/toPairsIn.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/toPairsIn.js new file mode 100644 index 00000000..66504abf --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/toPairsIn.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('toPairsIn', require('../toPairsIn'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/toPath.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/toPath.js new file mode 100644 index 00000000..b4d5e50f --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/toPath.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('toPath', require('../toPath'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/toPlainObject.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/toPlainObject.js new file mode 100644 index 00000000..278bb863 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/toPlainObject.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('toPlainObject', require('../toPlainObject'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/toSafeInteger.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/toSafeInteger.js new file mode 100644 index 00000000..367a26fd --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/toSafeInteger.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('toSafeInteger', require('../toSafeInteger'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/toString.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/toString.js new file mode 100644 index 00000000..cec4f8e2 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/toString.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('toString', require('../toString'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/toUpper.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/toUpper.js new file mode 100644 index 00000000..54f9a560 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/toUpper.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('toUpper', require('../toUpper'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/transform.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/transform.js new file mode 100644 index 00000000..759d088f --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/transform.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('transform', require('../transform')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/trim.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/trim.js new file mode 100644 index 00000000..e6319a74 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/trim.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('trim', require('../trim')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/trimChars.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/trimChars.js new file mode 100644 index 00000000..c9294de4 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/trimChars.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('trimChars', require('../trim')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/trimCharsEnd.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/trimCharsEnd.js new file mode 100644 index 00000000..284bc2f8 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/trimCharsEnd.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('trimCharsEnd', require('../trimEnd')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/trimCharsStart.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/trimCharsStart.js new file mode 100644 index 00000000..ff0ee65d --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/trimCharsStart.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('trimCharsStart', require('../trimStart')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/trimEnd.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/trimEnd.js new file mode 100644 index 00000000..71908805 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/trimEnd.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('trimEnd', require('../trimEnd')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/trimStart.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/trimStart.js new file mode 100644 index 00000000..fda902c3 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/trimStart.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('trimStart', require('../trimStart')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/truncate.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/truncate.js new file mode 100644 index 00000000..d265c1de --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/truncate.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('truncate', require('../truncate')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/unapply.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/unapply.js new file mode 100644 index 00000000..c5dfe779 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/unapply.js @@ -0,0 +1 @@ +module.exports = require('./rest'); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/unary.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/unary.js new file mode 100644 index 00000000..286c945f --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/unary.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('unary', require('../unary'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/unescape.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/unescape.js new file mode 100644 index 00000000..fddcb46e --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/unescape.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('unescape', require('../unescape'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/union.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/union.js new file mode 100644 index 00000000..ef8228d7 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/union.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('union', require('../union')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/unionBy.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/unionBy.js new file mode 100644 index 00000000..603687a1 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/unionBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('unionBy', require('../unionBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/unionWith.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/unionWith.js new file mode 100644 index 00000000..65bb3a79 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/unionWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('unionWith', require('../unionWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/uniq.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/uniq.js new file mode 100644 index 00000000..bc185249 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/uniq.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('uniq', require('../uniq'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/uniqBy.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/uniqBy.js new file mode 100644 index 00000000..634c6a8b --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/uniqBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('uniqBy', require('../uniqBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/uniqWith.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/uniqWith.js new file mode 100644 index 00000000..0ec601a9 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/uniqWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('uniqWith', require('../uniqWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/uniqueId.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/uniqueId.js new file mode 100644 index 00000000..aa8fc2f7 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/uniqueId.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('uniqueId', require('../uniqueId')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/unnest.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/unnest.js new file mode 100644 index 00000000..5d34060a --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/unnest.js @@ -0,0 +1 @@ +module.exports = require('./flatten'); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/unset.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/unset.js new file mode 100644 index 00000000..ea203a0f --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/unset.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('unset', require('../unset')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/unzip.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/unzip.js new file mode 100644 index 00000000..cc364b3c --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/unzip.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('unzip', require('../unzip'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/unzipWith.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/unzipWith.js new file mode 100644 index 00000000..182eaa10 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/unzipWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('unzipWith', require('../unzipWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/update.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/update.js new file mode 100644 index 00000000..b8ce2cc9 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/update.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('update', require('../update')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/updateWith.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/updateWith.js new file mode 100644 index 00000000..d5e8282d --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/updateWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('updateWith', require('../updateWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/upperCase.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/upperCase.js new file mode 100644 index 00000000..c886f202 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/upperCase.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('upperCase', require('../upperCase'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/upperFirst.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/upperFirst.js new file mode 100644 index 00000000..d8c04df5 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/upperFirst.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('upperFirst', require('../upperFirst'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/useWith.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/useWith.js new file mode 100644 index 00000000..d8b3df5a --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/useWith.js @@ -0,0 +1 @@ +module.exports = require('./overArgs'); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/util.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/util.js new file mode 100644 index 00000000..18c00bae --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/util.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../util')); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/value.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/value.js new file mode 100644 index 00000000..555eec7a --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/value.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('value', require('../value'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/valueOf.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/valueOf.js new file mode 100644 index 00000000..f968807d --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/valueOf.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('valueOf', require('../valueOf'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/values.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/values.js new file mode 100644 index 00000000..2dfc5613 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/values.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('values', require('../values'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/valuesIn.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/valuesIn.js new file mode 100644 index 00000000..a1b2bb87 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/valuesIn.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('valuesIn', require('../valuesIn'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/where.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/where.js new file mode 100644 index 00000000..3247f64a --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/where.js @@ -0,0 +1 @@ +module.exports = require('./conformsTo'); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/whereEq.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/whereEq.js new file mode 100644 index 00000000..29d1e1e4 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/whereEq.js @@ -0,0 +1 @@ +module.exports = require('./isMatch'); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/without.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/without.js new file mode 100644 index 00000000..bad9e125 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/without.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('without', require('../without')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/words.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/words.js new file mode 100644 index 00000000..4a901414 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/words.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('words', require('../words')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/wrap.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/wrap.js new file mode 100644 index 00000000..e93bd8a1 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/wrap.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('wrap', require('../wrap')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/wrapperAt.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/wrapperAt.js new file mode 100644 index 00000000..8f0a310f --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/wrapperAt.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('wrapperAt', require('../wrapperAt'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/wrapperChain.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/wrapperChain.js new file mode 100644 index 00000000..2a48ea2b --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/wrapperChain.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('wrapperChain', require('../wrapperChain'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/wrapperLodash.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/wrapperLodash.js new file mode 100644 index 00000000..a7162d08 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/wrapperLodash.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('wrapperLodash', require('../wrapperLodash'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/wrapperReverse.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/wrapperReverse.js new file mode 100644 index 00000000..e1481aab --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/wrapperReverse.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('wrapperReverse', require('../wrapperReverse'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/wrapperValue.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/wrapperValue.js new file mode 100644 index 00000000..8eb9112f --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/wrapperValue.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('wrapperValue', require('../wrapperValue'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/xor.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/xor.js new file mode 100644 index 00000000..29e28194 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/xor.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('xor', require('../xor')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/xorBy.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/xorBy.js new file mode 100644 index 00000000..b355686d --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/xorBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('xorBy', require('../xorBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/xorWith.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/xorWith.js new file mode 100644 index 00000000..8e05739a --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/xorWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('xorWith', require('../xorWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/zip.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/zip.js new file mode 100644 index 00000000..69e147a4 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/zip.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('zip', require('../zip')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/zipAll.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/zipAll.js new file mode 100644 index 00000000..efa8ccbf --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/zipAll.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('zipAll', require('../zip')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/zipObj.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/zipObj.js new file mode 100644 index 00000000..f4a34531 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/zipObj.js @@ -0,0 +1 @@ +module.exports = require('./zipObject'); diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/zipObject.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/zipObject.js new file mode 100644 index 00000000..462dbb68 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/zipObject.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('zipObject', require('../zipObject')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/zipObjectDeep.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/zipObjectDeep.js new file mode 100644 index 00000000..53a5d338 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/zipObjectDeep.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('zipObjectDeep', require('../zipObjectDeep')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/zipWith.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/zipWith.js new file mode 100644 index 00000000..c5cf9e21 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fp/zipWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('zipWith', require('../zipWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fromPairs.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fromPairs.js new file mode 100644 index 00000000..ee7940d2 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/fromPairs.js @@ -0,0 +1,28 @@ +/** + * The inverse of `_.toPairs`; this method returns an object composed + * from key-value `pairs`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} pairs The key-value pairs. + * @returns {Object} Returns the new object. + * @example + * + * _.fromPairs([['a', 1], ['b', 2]]); + * // => { 'a': 1, 'b': 2 } + */ +function fromPairs(pairs) { + var index = -1, + length = pairs == null ? 0 : pairs.length, + result = {}; + + while (++index < length) { + var pair = pairs[index]; + result[pair[0]] = pair[1]; + } + return result; +} + +module.exports = fromPairs; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/function.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/function.js new file mode 100644 index 00000000..b0fc6d93 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/function.js @@ -0,0 +1,25 @@ +module.exports = { + 'after': require('./after'), + 'ary': require('./ary'), + 'before': require('./before'), + 'bind': require('./bind'), + 'bindKey': require('./bindKey'), + 'curry': require('./curry'), + 'curryRight': require('./curryRight'), + 'debounce': require('./debounce'), + 'defer': require('./defer'), + 'delay': require('./delay'), + 'flip': require('./flip'), + 'memoize': require('./memoize'), + 'negate': require('./negate'), + 'once': require('./once'), + 'overArgs': require('./overArgs'), + 'partial': require('./partial'), + 'partialRight': require('./partialRight'), + 'rearg': require('./rearg'), + 'rest': require('./rest'), + 'spread': require('./spread'), + 'throttle': require('./throttle'), + 'unary': require('./unary'), + 'wrap': require('./wrap') +}; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/functions.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/functions.js new file mode 100644 index 00000000..9722928f --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/functions.js @@ -0,0 +1,31 @@ +var baseFunctions = require('./_baseFunctions'), + keys = require('./keys'); + +/** + * Creates an array of function property names from own enumerable properties + * of `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to inspect. + * @returns {Array} Returns the function names. + * @see _.functionsIn + * @example + * + * function Foo() { + * this.a = _.constant('a'); + * this.b = _.constant('b'); + * } + * + * Foo.prototype.c = _.constant('c'); + * + * _.functions(new Foo); + * // => ['a', 'b'] + */ +function functions(object) { + return object == null ? [] : baseFunctions(object, keys(object)); +} + +module.exports = functions; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/functionsIn.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/functionsIn.js new file mode 100644 index 00000000..f00345d0 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/functionsIn.js @@ -0,0 +1,31 @@ +var baseFunctions = require('./_baseFunctions'), + keysIn = require('./keysIn'); + +/** + * Creates an array of function property names from own and inherited + * enumerable properties of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to inspect. + * @returns {Array} Returns the function names. + * @see _.functions + * @example + * + * function Foo() { + * this.a = _.constant('a'); + * this.b = _.constant('b'); + * } + * + * Foo.prototype.c = _.constant('c'); + * + * _.functionsIn(new Foo); + * // => ['a', 'b', 'c'] + */ +function functionsIn(object) { + return object == null ? [] : baseFunctions(object, keysIn(object)); +} + +module.exports = functionsIn; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/get.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/get.js new file mode 100644 index 00000000..8805ff92 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/get.js @@ -0,0 +1,33 @@ +var baseGet = require('./_baseGet'); + +/** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ +function get(object, path, defaultValue) { + var result = object == null ? undefined : baseGet(object, path); + return result === undefined ? defaultValue : result; +} + +module.exports = get; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/groupBy.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/groupBy.js new file mode 100644 index 00000000..babf4f6b --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/groupBy.js @@ -0,0 +1,41 @@ +var baseAssignValue = require('./_baseAssignValue'), + createAggregator = require('./_createAggregator'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Creates an object composed of keys generated from the results of running + * each element of `collection` thru `iteratee`. The order of grouped values + * is determined by the order they occur in `collection`. The corresponding + * value of each key is an array of elements responsible for generating the + * key. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee to transform keys. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * _.groupBy([6.1, 4.2, 6.3], Math.floor); + * // => { '4': [4.2], '6': [6.1, 6.3] } + * + * // The `_.property` iteratee shorthand. + * _.groupBy(['one', 'two', 'three'], 'length'); + * // => { '3': ['one', 'two'], '5': ['three'] } + */ +var groupBy = createAggregator(function(result, value, key) { + if (hasOwnProperty.call(result, key)) { + result[key].push(value); + } else { + baseAssignValue(result, key, [value]); + } +}); + +module.exports = groupBy; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/gt.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/gt.js new file mode 100644 index 00000000..3a662828 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/gt.js @@ -0,0 +1,29 @@ +var baseGt = require('./_baseGt'), + createRelationalOperation = require('./_createRelationalOperation'); + +/** + * Checks if `value` is greater than `other`. + * + * @static + * @memberOf _ + * @since 3.9.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, + * else `false`. + * @see _.lt + * @example + * + * _.gt(3, 1); + * // => true + * + * _.gt(3, 3); + * // => false + * + * _.gt(1, 3); + * // => false + */ +var gt = createRelationalOperation(baseGt); + +module.exports = gt; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/gte.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/gte.js new file mode 100644 index 00000000..4180a687 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/gte.js @@ -0,0 +1,30 @@ +var createRelationalOperation = require('./_createRelationalOperation'); + +/** + * Checks if `value` is greater than or equal to `other`. + * + * @static + * @memberOf _ + * @since 3.9.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than or equal to + * `other`, else `false`. + * @see _.lte + * @example + * + * _.gte(3, 1); + * // => true + * + * _.gte(3, 3); + * // => true + * + * _.gte(1, 3); + * // => false + */ +var gte = createRelationalOperation(function(value, other) { + return value >= other; +}); + +module.exports = gte; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/has.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/has.js new file mode 100644 index 00000000..34df55e8 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/has.js @@ -0,0 +1,35 @@ +var baseHas = require('./_baseHas'), + hasPath = require('./_hasPath'); + +/** + * Checks if `path` is a direct property of `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = { 'a': { 'b': 2 } }; + * var other = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.has(object, 'a'); + * // => true + * + * _.has(object, 'a.b'); + * // => true + * + * _.has(object, ['a', 'b']); + * // => true + * + * _.has(other, 'a'); + * // => false + */ +function has(object, path) { + return object != null && hasPath(object, path, baseHas); +} + +module.exports = has; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/hasIn.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/hasIn.js new file mode 100644 index 00000000..06a36865 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/hasIn.js @@ -0,0 +1,34 @@ +var baseHasIn = require('./_baseHasIn'), + hasPath = require('./_hasPath'); + +/** + * Checks if `path` is a direct or inherited property of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.hasIn(object, 'a'); + * // => true + * + * _.hasIn(object, 'a.b'); + * // => true + * + * _.hasIn(object, ['a', 'b']); + * // => true + * + * _.hasIn(object, 'b'); + * // => false + */ +function hasIn(object, path) { + return object != null && hasPath(object, path, baseHasIn); +} + +module.exports = hasIn; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/head.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/head.js new file mode 100644 index 00000000..dee9d1f1 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/head.js @@ -0,0 +1,23 @@ +/** + * Gets the first element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias first + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the first element of `array`. + * @example + * + * _.head([1, 2, 3]); + * // => 1 + * + * _.head([]); + * // => undefined + */ +function head(array) { + return (array && array.length) ? array[0] : undefined; +} + +module.exports = head; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/identity.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/identity.js new file mode 100644 index 00000000..2d5d963c --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/identity.js @@ -0,0 +1,21 @@ +/** + * This method returns the first argument it receives. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {*} value Any value. + * @returns {*} Returns `value`. + * @example + * + * var object = { 'a': 1 }; + * + * console.log(_.identity(object) === object); + * // => true + */ +function identity(value) { + return value; +} + +module.exports = identity; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/inRange.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/inRange.js new file mode 100644 index 00000000..f20728d9 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/inRange.js @@ -0,0 +1,55 @@ +var baseInRange = require('./_baseInRange'), + toFinite = require('./toFinite'), + toNumber = require('./toNumber'); + +/** + * Checks if `n` is between `start` and up to, but not including, `end`. If + * `end` is not specified, it's set to `start` with `start` then set to `0`. + * If `start` is greater than `end` the params are swapped to support + * negative ranges. + * + * @static + * @memberOf _ + * @since 3.3.0 + * @category Number + * @param {number} number The number to check. + * @param {number} [start=0] The start of the range. + * @param {number} end The end of the range. + * @returns {boolean} Returns `true` if `number` is in the range, else `false`. + * @see _.range, _.rangeRight + * @example + * + * _.inRange(3, 2, 4); + * // => true + * + * _.inRange(4, 8); + * // => true + * + * _.inRange(4, 2); + * // => false + * + * _.inRange(2, 2); + * // => false + * + * _.inRange(1.2, 2); + * // => true + * + * _.inRange(5.2, 4); + * // => false + * + * _.inRange(-3, -2, -6); + * // => true + */ +function inRange(number, start, end) { + start = toFinite(start); + if (end === undefined) { + end = start; + start = 0; + } else { + end = toFinite(end); + } + number = toNumber(number); + return baseInRange(number, start, end); +} + +module.exports = inRange; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/includes.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/includes.js new file mode 100644 index 00000000..ae0deedc --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/includes.js @@ -0,0 +1,53 @@ +var baseIndexOf = require('./_baseIndexOf'), + isArrayLike = require('./isArrayLike'), + isString = require('./isString'), + toInteger = require('./toInteger'), + values = require('./values'); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * Checks if `value` is in `collection`. If `collection` is a string, it's + * checked for a substring of `value`, otherwise + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * is used for equality comparisons. If `fromIndex` is negative, it's used as + * the offset from the end of `collection`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @param {*} value The value to search for. + * @param {number} [fromIndex=0] The index to search from. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. + * @returns {boolean} Returns `true` if `value` is found, else `false`. + * @example + * + * _.includes([1, 2, 3], 1); + * // => true + * + * _.includes([1, 2, 3], 1, 2); + * // => false + * + * _.includes({ 'a': 1, 'b': 2 }, 1); + * // => true + * + * _.includes('abcd', 'bc'); + * // => true + */ +function includes(collection, value, fromIndex, guard) { + collection = isArrayLike(collection) ? collection : values(collection); + fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0; + + var length = collection.length; + if (fromIndex < 0) { + fromIndex = nativeMax(length + fromIndex, 0); + } + return isString(collection) + ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1) + : (!!length && baseIndexOf(collection, value, fromIndex) > -1); +} + +module.exports = includes; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/index.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/index.js new file mode 100644 index 00000000..5d063e21 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/index.js @@ -0,0 +1 @@ +module.exports = require('./lodash'); \ No newline at end of file diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/indexOf.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/indexOf.js new file mode 100644 index 00000000..3c644af2 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/indexOf.js @@ -0,0 +1,42 @@ +var baseIndexOf = require('./_baseIndexOf'), + toInteger = require('./toInteger'); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * Gets the index at which the first occurrence of `value` is found in `array` + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. If `fromIndex` is negative, it's used as the + * offset from the end of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.indexOf([1, 2, 1, 2], 2); + * // => 1 + * + * // Search from the `fromIndex`. + * _.indexOf([1, 2, 1, 2], 2, 2); + * // => 3 + */ +function indexOf(array, value, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return baseIndexOf(array, value, index); +} + +module.exports = indexOf; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/initial.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/initial.js new file mode 100644 index 00000000..f47fc509 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/initial.js @@ -0,0 +1,22 @@ +var baseSlice = require('./_baseSlice'); + +/** + * Gets all but the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.initial([1, 2, 3]); + * // => [1, 2] + */ +function initial(array) { + var length = array == null ? 0 : array.length; + return length ? baseSlice(array, 0, -1) : []; +} + +module.exports = initial; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/intersection.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/intersection.js new file mode 100644 index 00000000..a94c1351 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/intersection.js @@ -0,0 +1,30 @@ +var arrayMap = require('./_arrayMap'), + baseIntersection = require('./_baseIntersection'), + baseRest = require('./_baseRest'), + castArrayLikeObject = require('./_castArrayLikeObject'); + +/** + * Creates an array of unique values that are included in all given arrays + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. The order and references of result values are + * determined by the first array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * _.intersection([2, 1], [2, 3]); + * // => [2] + */ +var intersection = baseRest(function(arrays) { + var mapped = arrayMap(arrays, castArrayLikeObject); + return (mapped.length && mapped[0] === arrays[0]) + ? baseIntersection(mapped) + : []; +}); + +module.exports = intersection; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/intersectionBy.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/intersectionBy.js new file mode 100644 index 00000000..31461aae --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/intersectionBy.js @@ -0,0 +1,45 @@ +var arrayMap = require('./_arrayMap'), + baseIntersection = require('./_baseIntersection'), + baseIteratee = require('./_baseIteratee'), + baseRest = require('./_baseRest'), + castArrayLikeObject = require('./_castArrayLikeObject'), + last = require('./last'); + +/** + * This method is like `_.intersection` except that it accepts `iteratee` + * which is invoked for each element of each `arrays` to generate the criterion + * by which they're compared. The order and references of result values are + * determined by the first array. The iteratee is invoked with one argument: + * (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor); + * // => [2.1] + * + * // The `_.property` iteratee shorthand. + * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }] + */ +var intersectionBy = baseRest(function(arrays) { + var iteratee = last(arrays), + mapped = arrayMap(arrays, castArrayLikeObject); + + if (iteratee === last(mapped)) { + iteratee = undefined; + } else { + mapped.pop(); + } + return (mapped.length && mapped[0] === arrays[0]) + ? baseIntersection(mapped, baseIteratee(iteratee, 2)) + : []; +}); + +module.exports = intersectionBy; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/intersectionWith.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/intersectionWith.js new file mode 100644 index 00000000..63cabfaa --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/intersectionWith.js @@ -0,0 +1,41 @@ +var arrayMap = require('./_arrayMap'), + baseIntersection = require('./_baseIntersection'), + baseRest = require('./_baseRest'), + castArrayLikeObject = require('./_castArrayLikeObject'), + last = require('./last'); + +/** + * This method is like `_.intersection` except that it accepts `comparator` + * which is invoked to compare elements of `arrays`. The order and references + * of result values are determined by the first array. The comparator is + * invoked with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.intersectionWith(objects, others, _.isEqual); + * // => [{ 'x': 1, 'y': 2 }] + */ +var intersectionWith = baseRest(function(arrays) { + var comparator = last(arrays), + mapped = arrayMap(arrays, castArrayLikeObject); + + comparator = typeof comparator == 'function' ? comparator : undefined; + if (comparator) { + mapped.pop(); + } + return (mapped.length && mapped[0] === arrays[0]) + ? baseIntersection(mapped, undefined, comparator) + : []; +}); + +module.exports = intersectionWith; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/invert.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/invert.js new file mode 100644 index 00000000..8c479509 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/invert.js @@ -0,0 +1,42 @@ +var constant = require('./constant'), + createInverter = require('./_createInverter'), + identity = require('./identity'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var nativeObjectToString = objectProto.toString; + +/** + * Creates an object composed of the inverted keys and values of `object`. + * If `object` contains duplicate values, subsequent values overwrite + * property assignments of previous values. + * + * @static + * @memberOf _ + * @since 0.7.0 + * @category Object + * @param {Object} object The object to invert. + * @returns {Object} Returns the new inverted object. + * @example + * + * var object = { 'a': 1, 'b': 2, 'c': 1 }; + * + * _.invert(object); + * // => { '1': 'c', '2': 'b' } + */ +var invert = createInverter(function(result, value, key) { + if (value != null && + typeof value.toString != 'function') { + value = nativeObjectToString.call(value); + } + + result[value] = key; +}, constant(identity)); + +module.exports = invert; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/invertBy.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/invertBy.js new file mode 100644 index 00000000..3f4f7e53 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/invertBy.js @@ -0,0 +1,56 @@ +var baseIteratee = require('./_baseIteratee'), + createInverter = require('./_createInverter'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var nativeObjectToString = objectProto.toString; + +/** + * This method is like `_.invert` except that the inverted object is generated + * from the results of running each element of `object` thru `iteratee`. The + * corresponding inverted value of each inverted key is an array of keys + * responsible for generating the inverted value. The iteratee is invoked + * with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.1.0 + * @category Object + * @param {Object} object The object to invert. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Object} Returns the new inverted object. + * @example + * + * var object = { 'a': 1, 'b': 2, 'c': 1 }; + * + * _.invertBy(object); + * // => { '1': ['a', 'c'], '2': ['b'] } + * + * _.invertBy(object, function(value) { + * return 'group' + value; + * }); + * // => { 'group1': ['a', 'c'], 'group2': ['b'] } + */ +var invertBy = createInverter(function(result, value, key) { + if (value != null && + typeof value.toString != 'function') { + value = nativeObjectToString.call(value); + } + + if (hasOwnProperty.call(result, value)) { + result[value].push(key); + } else { + result[value] = [key]; + } +}, baseIteratee); + +module.exports = invertBy; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/invoke.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/invoke.js new file mode 100644 index 00000000..97d51eb5 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/invoke.js @@ -0,0 +1,24 @@ +var baseInvoke = require('./_baseInvoke'), + baseRest = require('./_baseRest'); + +/** + * Invokes the method at `path` of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the method to invoke. + * @param {...*} [args] The arguments to invoke the method with. + * @returns {*} Returns the result of the invoked method. + * @example + * + * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] }; + * + * _.invoke(object, 'a[0].b.c.slice', 1, 3); + * // => [2, 3] + */ +var invoke = baseRest(baseInvoke); + +module.exports = invoke; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/invokeMap.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/invokeMap.js new file mode 100644 index 00000000..8da5126c --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/invokeMap.js @@ -0,0 +1,41 @@ +var apply = require('./_apply'), + baseEach = require('./_baseEach'), + baseInvoke = require('./_baseInvoke'), + baseRest = require('./_baseRest'), + isArrayLike = require('./isArrayLike'); + +/** + * Invokes the method at `path` of each element in `collection`, returning + * an array of the results of each invoked method. Any additional arguments + * are provided to each invoked method. If `path` is a function, it's invoked + * for, and `this` bound to, each element in `collection`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Array|Function|string} path The path of the method to invoke or + * the function invoked per iteration. + * @param {...*} [args] The arguments to invoke each method with. + * @returns {Array} Returns the array of results. + * @example + * + * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort'); + * // => [[1, 5, 7], [1, 2, 3]] + * + * _.invokeMap([123, 456], String.prototype.split, ''); + * // => [['1', '2', '3'], ['4', '5', '6']] + */ +var invokeMap = baseRest(function(collection, path, args) { + var index = -1, + isFunc = typeof path == 'function', + result = isArrayLike(collection) ? Array(collection.length) : []; + + baseEach(collection, function(value) { + result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args); + }); + return result; +}); + +module.exports = invokeMap; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isArguments.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isArguments.js new file mode 100644 index 00000000..8b9ed66c --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isArguments.js @@ -0,0 +1,36 @@ +var baseIsArguments = require('./_baseIsArguments'), + isObjectLike = require('./isObjectLike'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** Built-in value references. */ +var propertyIsEnumerable = objectProto.propertyIsEnumerable; + +/** + * Checks if `value` is likely an `arguments` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + * else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ +var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { + return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && + !propertyIsEnumerable.call(value, 'callee'); +}; + +module.exports = isArguments; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isArray.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isArray.js new file mode 100644 index 00000000..88ab55fd --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isArray.js @@ -0,0 +1,26 @@ +/** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ +var isArray = Array.isArray; + +module.exports = isArray; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isArrayBuffer.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isArrayBuffer.js new file mode 100644 index 00000000..12904a64 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isArrayBuffer.js @@ -0,0 +1,27 @@ +var baseIsArrayBuffer = require('./_baseIsArrayBuffer'), + baseUnary = require('./_baseUnary'), + nodeUtil = require('./_nodeUtil'); + +/* Node.js helper references. */ +var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer; + +/** + * Checks if `value` is classified as an `ArrayBuffer` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. + * @example + * + * _.isArrayBuffer(new ArrayBuffer(2)); + * // => true + * + * _.isArrayBuffer(new Array(2)); + * // => false + */ +var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer; + +module.exports = isArrayBuffer; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isArrayLike.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isArrayLike.js new file mode 100644 index 00000000..0f966805 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isArrayLike.js @@ -0,0 +1,33 @@ +var isFunction = require('./isFunction'), + isLength = require('./isLength'); + +/** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */ +function isArrayLike(value) { + return value != null && isLength(value.length) && !isFunction(value); +} + +module.exports = isArrayLike; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isArrayLikeObject.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isArrayLikeObject.js new file mode 100644 index 00000000..6c4812a8 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isArrayLikeObject.js @@ -0,0 +1,33 @@ +var isArrayLike = require('./isArrayLike'), + isObjectLike = require('./isObjectLike'); + +/** + * This method is like `_.isArrayLike` except that it also checks if `value` + * is an object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array-like object, + * else `false`. + * @example + * + * _.isArrayLikeObject([1, 2, 3]); + * // => true + * + * _.isArrayLikeObject(document.body.children); + * // => true + * + * _.isArrayLikeObject('abc'); + * // => false + * + * _.isArrayLikeObject(_.noop); + * // => false + */ +function isArrayLikeObject(value) { + return isObjectLike(value) && isArrayLike(value); +} + +module.exports = isArrayLikeObject; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isBoolean.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isBoolean.js new file mode 100644 index 00000000..a43ed4b8 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isBoolean.js @@ -0,0 +1,29 @@ +var baseGetTag = require('./_baseGetTag'), + isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]'; + +/** + * Checks if `value` is classified as a boolean primitive or object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a boolean, else `false`. + * @example + * + * _.isBoolean(false); + * // => true + * + * _.isBoolean(null); + * // => false + */ +function isBoolean(value) { + return value === true || value === false || + (isObjectLike(value) && baseGetTag(value) == boolTag); +} + +module.exports = isBoolean; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isBuffer.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isBuffer.js new file mode 100644 index 00000000..c103cc74 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isBuffer.js @@ -0,0 +1,38 @@ +var root = require('./_root'), + stubFalse = require('./stubFalse'); + +/** Detect free variable `exports`. */ +var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + +/** Detect free variable `module`. */ +var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + +/** Detect the popular CommonJS extension `module.exports`. */ +var moduleExports = freeModule && freeModule.exports === freeExports; + +/** Built-in value references. */ +var Buffer = moduleExports ? root.Buffer : undefined; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined; + +/** + * Checks if `value` is a buffer. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. + * @example + * + * _.isBuffer(new Buffer(2)); + * // => true + * + * _.isBuffer(new Uint8Array(2)); + * // => false + */ +var isBuffer = nativeIsBuffer || stubFalse; + +module.exports = isBuffer; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isDate.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isDate.js new file mode 100644 index 00000000..7f0209fc --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isDate.js @@ -0,0 +1,27 @@ +var baseIsDate = require('./_baseIsDate'), + baseUnary = require('./_baseUnary'), + nodeUtil = require('./_nodeUtil'); + +/* Node.js helper references. */ +var nodeIsDate = nodeUtil && nodeUtil.isDate; + +/** + * Checks if `value` is classified as a `Date` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a date object, else `false`. + * @example + * + * _.isDate(new Date); + * // => true + * + * _.isDate('Mon April 23 2012'); + * // => false + */ +var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate; + +module.exports = isDate; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isElement.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isElement.js new file mode 100644 index 00000000..76ae29c3 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isElement.js @@ -0,0 +1,25 @@ +var isObjectLike = require('./isObjectLike'), + isPlainObject = require('./isPlainObject'); + +/** + * Checks if `value` is likely a DOM element. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`. + * @example + * + * _.isElement(document.body); + * // => true + * + * _.isElement(''); + * // => false + */ +function isElement(value) { + return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value); +} + +module.exports = isElement; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isEmpty.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isEmpty.js new file mode 100644 index 00000000..3597294a --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isEmpty.js @@ -0,0 +1,77 @@ +var baseKeys = require('./_baseKeys'), + getTag = require('./_getTag'), + isArguments = require('./isArguments'), + isArray = require('./isArray'), + isArrayLike = require('./isArrayLike'), + isBuffer = require('./isBuffer'), + isPrototype = require('./_isPrototype'), + isTypedArray = require('./isTypedArray'); + +/** `Object#toString` result references. */ +var mapTag = '[object Map]', + setTag = '[object Set]'; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Checks if `value` is an empty object, collection, map, or set. + * + * Objects are considered empty if they have no own enumerable string keyed + * properties. + * + * Array-like values such as `arguments` objects, arrays, buffers, strings, or + * jQuery-like collections are considered empty if they have a `length` of `0`. + * Similarly, maps and sets are considered empty if they have a `size` of `0`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is empty, else `false`. + * @example + * + * _.isEmpty(null); + * // => true + * + * _.isEmpty(true); + * // => true + * + * _.isEmpty(1); + * // => true + * + * _.isEmpty([1, 2, 3]); + * // => false + * + * _.isEmpty({ 'a': 1 }); + * // => false + */ +function isEmpty(value) { + if (value == null) { + return true; + } + if (isArrayLike(value) && + (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' || + isBuffer(value) || isTypedArray(value) || isArguments(value))) { + return !value.length; + } + var tag = getTag(value); + if (tag == mapTag || tag == setTag) { + return !value.size; + } + if (isPrototype(value)) { + return !baseKeys(value).length; + } + for (var key in value) { + if (hasOwnProperty.call(value, key)) { + return false; + } + } + return true; +} + +module.exports = isEmpty; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isEqual.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isEqual.js new file mode 100644 index 00000000..5e23e76c --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isEqual.js @@ -0,0 +1,35 @@ +var baseIsEqual = require('./_baseIsEqual'); + +/** + * Performs a deep comparison between two values to determine if they are + * equivalent. + * + * **Note:** This method supports comparing arrays, array buffers, booleans, + * date objects, error objects, maps, numbers, `Object` objects, regexes, + * sets, strings, symbols, and typed arrays. `Object` objects are compared + * by their own, not inherited, enumerable properties. Functions and DOM + * nodes are compared by strict equality, i.e. `===`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.isEqual(object, other); + * // => true + * + * object === other; + * // => false + */ +function isEqual(value, other) { + return baseIsEqual(value, other); +} + +module.exports = isEqual; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isEqualWith.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isEqualWith.js new file mode 100644 index 00000000..21bdc7ff --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isEqualWith.js @@ -0,0 +1,41 @@ +var baseIsEqual = require('./_baseIsEqual'); + +/** + * This method is like `_.isEqual` except that it accepts `customizer` which + * is invoked to compare values. If `customizer` returns `undefined`, comparisons + * are handled by the method instead. The `customizer` is invoked with up to + * six arguments: (objValue, othValue [, index|key, object, other, stack]). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * function isGreeting(value) { + * return /^h(?:i|ello)$/.test(value); + * } + * + * function customizer(objValue, othValue) { + * if (isGreeting(objValue) && isGreeting(othValue)) { + * return true; + * } + * } + * + * var array = ['hello', 'goodbye']; + * var other = ['hi', 'goodbye']; + * + * _.isEqualWith(array, other, customizer); + * // => true + */ +function isEqualWith(value, other, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + var result = customizer ? customizer(value, other) : undefined; + return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result; +} + +module.exports = isEqualWith; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isError.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isError.js new file mode 100644 index 00000000..b4f41e00 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isError.js @@ -0,0 +1,36 @@ +var baseGetTag = require('./_baseGetTag'), + isObjectLike = require('./isObjectLike'), + isPlainObject = require('./isPlainObject'); + +/** `Object#toString` result references. */ +var domExcTag = '[object DOMException]', + errorTag = '[object Error]'; + +/** + * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`, + * `SyntaxError`, `TypeError`, or `URIError` object. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an error object, else `false`. + * @example + * + * _.isError(new Error); + * // => true + * + * _.isError(Error); + * // => false + */ +function isError(value) { + if (!isObjectLike(value)) { + return false; + } + var tag = baseGetTag(value); + return tag == errorTag || tag == domExcTag || + (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value)); +} + +module.exports = isError; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isFinite.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isFinite.js new file mode 100644 index 00000000..601842bc --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isFinite.js @@ -0,0 +1,36 @@ +var root = require('./_root'); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeIsFinite = root.isFinite; + +/** + * Checks if `value` is a finite primitive number. + * + * **Note:** This method is based on + * [`Number.isFinite`](https://mdn.io/Number/isFinite). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a finite number, else `false`. + * @example + * + * _.isFinite(3); + * // => true + * + * _.isFinite(Number.MIN_VALUE); + * // => true + * + * _.isFinite(Infinity); + * // => false + * + * _.isFinite('3'); + * // => false + */ +function isFinite(value) { + return typeof value == 'number' && nativeIsFinite(value); +} + +module.exports = isFinite; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isFunction.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isFunction.js new file mode 100644 index 00000000..907a8cd8 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isFunction.js @@ -0,0 +1,37 @@ +var baseGetTag = require('./_baseGetTag'), + isObject = require('./isObject'); + +/** `Object#toString` result references. */ +var asyncTag = '[object AsyncFunction]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + proxyTag = '[object Proxy]'; + +/** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ +function isFunction(value) { + if (!isObject(value)) { + return false; + } + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 9 which returns 'object' for typed arrays and other constructors. + var tag = baseGetTag(value); + return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; +} + +module.exports = isFunction; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isInteger.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isInteger.js new file mode 100644 index 00000000..66aa87d5 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isInteger.js @@ -0,0 +1,33 @@ +var toInteger = require('./toInteger'); + +/** + * Checks if `value` is an integer. + * + * **Note:** This method is based on + * [`Number.isInteger`](https://mdn.io/Number/isInteger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an integer, else `false`. + * @example + * + * _.isInteger(3); + * // => true + * + * _.isInteger(Number.MIN_VALUE); + * // => false + * + * _.isInteger(Infinity); + * // => false + * + * _.isInteger('3'); + * // => false + */ +function isInteger(value) { + return typeof value == 'number' && value == toInteger(value); +} + +module.exports = isInteger; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isLength.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isLength.js new file mode 100644 index 00000000..3a95caa9 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isLength.js @@ -0,0 +1,35 @@ +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER = 9007199254740991; + +/** + * Checks if `value` is a valid array-like length. + * + * **Note:** This method is loosely based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */ +function isLength(value) { + return typeof value == 'number' && + value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; +} + +module.exports = isLength; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isMap.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isMap.js new file mode 100644 index 00000000..44f8517e --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isMap.js @@ -0,0 +1,27 @@ +var baseIsMap = require('./_baseIsMap'), + baseUnary = require('./_baseUnary'), + nodeUtil = require('./_nodeUtil'); + +/* Node.js helper references. */ +var nodeIsMap = nodeUtil && nodeUtil.isMap; + +/** + * Checks if `value` is classified as a `Map` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + * @example + * + * _.isMap(new Map); + * // => true + * + * _.isMap(new WeakMap); + * // => false + */ +var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap; + +module.exports = isMap; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isMatch.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isMatch.js new file mode 100644 index 00000000..9773a18c --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isMatch.js @@ -0,0 +1,36 @@ +var baseIsMatch = require('./_baseIsMatch'), + getMatchData = require('./_getMatchData'); + +/** + * Performs a partial deep comparison between `object` and `source` to + * determine if `object` contains equivalent property values. + * + * **Note:** This method is equivalent to `_.matches` when `source` is + * partially applied. + * + * Partial comparisons will match empty array and empty object `source` + * values against any array or object value, respectively. See `_.isEqual` + * for a list of supported value comparisons. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * + * _.isMatch(object, { 'b': 2 }); + * // => true + * + * _.isMatch(object, { 'b': 1 }); + * // => false + */ +function isMatch(object, source) { + return object === source || baseIsMatch(object, source, getMatchData(source)); +} + +module.exports = isMatch; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isMatchWith.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isMatchWith.js new file mode 100644 index 00000000..187b6a61 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isMatchWith.js @@ -0,0 +1,41 @@ +var baseIsMatch = require('./_baseIsMatch'), + getMatchData = require('./_getMatchData'); + +/** + * This method is like `_.isMatch` except that it accepts `customizer` which + * is invoked to compare values. If `customizer` returns `undefined`, comparisons + * are handled by the method instead. The `customizer` is invoked with five + * arguments: (objValue, srcValue, index|key, object, source). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + * @example + * + * function isGreeting(value) { + * return /^h(?:i|ello)$/.test(value); + * } + * + * function customizer(objValue, srcValue) { + * if (isGreeting(objValue) && isGreeting(srcValue)) { + * return true; + * } + * } + * + * var object = { 'greeting': 'hello' }; + * var source = { 'greeting': 'hi' }; + * + * _.isMatchWith(object, source, customizer); + * // => true + */ +function isMatchWith(object, source, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + return baseIsMatch(object, source, getMatchData(source), customizer); +} + +module.exports = isMatchWith; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isNaN.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isNaN.js new file mode 100644 index 00000000..7d0d783b --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isNaN.js @@ -0,0 +1,38 @@ +var isNumber = require('./isNumber'); + +/** + * Checks if `value` is `NaN`. + * + * **Note:** This method is based on + * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as + * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for + * `undefined` and other non-number values. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + * @example + * + * _.isNaN(NaN); + * // => true + * + * _.isNaN(new Number(NaN)); + * // => true + * + * isNaN(undefined); + * // => true + * + * _.isNaN(undefined); + * // => false + */ +function isNaN(value) { + // An `NaN` primitive is the only value that is not equal to itself. + // Perform the `toStringTag` check first to avoid errors with some + // ActiveX objects in IE. + return isNumber(value) && value != +value; +} + +module.exports = isNaN; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isNative.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isNative.js new file mode 100644 index 00000000..f0cb8d58 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isNative.js @@ -0,0 +1,40 @@ +var baseIsNative = require('./_baseIsNative'), + isMaskable = require('./_isMaskable'); + +/** Error message constants. */ +var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.'; + +/** + * Checks if `value` is a pristine native function. + * + * **Note:** This method can't reliably detect native functions in the presence + * of the core-js package because core-js circumvents this kind of detection. + * Despite multiple requests, the core-js maintainer has made it clear: any + * attempt to fix the detection will be obstructed. As a result, we're left + * with little choice but to throw an error. Unfortunately, this also affects + * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill), + * which rely on core-js. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + * @example + * + * _.isNative(Array.prototype.push); + * // => true + * + * _.isNative(_); + * // => false + */ +function isNative(value) { + if (isMaskable(value)) { + throw new Error(CORE_ERROR_TEXT); + } + return baseIsNative(value); +} + +module.exports = isNative; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isNil.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isNil.js new file mode 100644 index 00000000..79f05052 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isNil.js @@ -0,0 +1,25 @@ +/** + * Checks if `value` is `null` or `undefined`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is nullish, else `false`. + * @example + * + * _.isNil(null); + * // => true + * + * _.isNil(void 0); + * // => true + * + * _.isNil(NaN); + * // => false + */ +function isNil(value) { + return value == null; +} + +module.exports = isNil; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isNull.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isNull.js new file mode 100644 index 00000000..c0a374d7 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isNull.js @@ -0,0 +1,22 @@ +/** + * Checks if `value` is `null`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `null`, else `false`. + * @example + * + * _.isNull(null); + * // => true + * + * _.isNull(void 0); + * // => false + */ +function isNull(value) { + return value === null; +} + +module.exports = isNull; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isNumber.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isNumber.js new file mode 100644 index 00000000..cd34ee46 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isNumber.js @@ -0,0 +1,38 @@ +var baseGetTag = require('./_baseGetTag'), + isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var numberTag = '[object Number]'; + +/** + * Checks if `value` is classified as a `Number` primitive or object. + * + * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are + * classified as numbers, use the `_.isFinite` method. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a number, else `false`. + * @example + * + * _.isNumber(3); + * // => true + * + * _.isNumber(Number.MIN_VALUE); + * // => true + * + * _.isNumber(Infinity); + * // => true + * + * _.isNumber('3'); + * // => false + */ +function isNumber(value) { + return typeof value == 'number' || + (isObjectLike(value) && baseGetTag(value) == numberTag); +} + +module.exports = isNumber; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isObject.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isObject.js new file mode 100644 index 00000000..1dc89391 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isObject.js @@ -0,0 +1,31 @@ +/** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ +function isObject(value) { + var type = typeof value; + return value != null && (type == 'object' || type == 'function'); +} + +module.exports = isObject; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isObjectLike.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isObjectLike.js new file mode 100644 index 00000000..301716b5 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isObjectLike.js @@ -0,0 +1,29 @@ +/** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ +function isObjectLike(value) { + return value != null && typeof value == 'object'; +} + +module.exports = isObjectLike; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isPlainObject.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isPlainObject.js new file mode 100644 index 00000000..23873731 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isPlainObject.js @@ -0,0 +1,62 @@ +var baseGetTag = require('./_baseGetTag'), + getPrototype = require('./_getPrototype'), + isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var objectTag = '[object Object]'; + +/** Used for built-in method references. */ +var funcProto = Function.prototype, + objectProto = Object.prototype; + +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** Used to infer the `Object` constructor. */ +var objectCtorString = funcToString.call(Object); + +/** + * Checks if `value` is a plain object, that is, an object created by the + * `Object` constructor or one with a `[[Prototype]]` of `null`. + * + * @static + * @memberOf _ + * @since 0.8.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * _.isPlainObject(new Foo); + * // => false + * + * _.isPlainObject([1, 2, 3]); + * // => false + * + * _.isPlainObject({ 'x': 0, 'y': 0 }); + * // => true + * + * _.isPlainObject(Object.create(null)); + * // => true + */ +function isPlainObject(value) { + if (!isObjectLike(value) || baseGetTag(value) != objectTag) { + return false; + } + var proto = getPrototype(value); + if (proto === null) { + return true; + } + var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor; + return typeof Ctor == 'function' && Ctor instanceof Ctor && + funcToString.call(Ctor) == objectCtorString; +} + +module.exports = isPlainObject; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isRegExp.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isRegExp.js new file mode 100644 index 00000000..76c9b6e9 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isRegExp.js @@ -0,0 +1,27 @@ +var baseIsRegExp = require('./_baseIsRegExp'), + baseUnary = require('./_baseUnary'), + nodeUtil = require('./_nodeUtil'); + +/* Node.js helper references. */ +var nodeIsRegExp = nodeUtil && nodeUtil.isRegExp; + +/** + * Checks if `value` is classified as a `RegExp` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. + * @example + * + * _.isRegExp(/abc/); + * // => true + * + * _.isRegExp('/abc/'); + * // => false + */ +var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp; + +module.exports = isRegExp; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isSafeInteger.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isSafeInteger.js new file mode 100644 index 00000000..2a48526e --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isSafeInteger.js @@ -0,0 +1,37 @@ +var isInteger = require('./isInteger'); + +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER = 9007199254740991; + +/** + * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754 + * double precision number which isn't the result of a rounded unsafe integer. + * + * **Note:** This method is based on + * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`. + * @example + * + * _.isSafeInteger(3); + * // => true + * + * _.isSafeInteger(Number.MIN_VALUE); + * // => false + * + * _.isSafeInteger(Infinity); + * // => false + * + * _.isSafeInteger('3'); + * // => false + */ +function isSafeInteger(value) { + return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER; +} + +module.exports = isSafeInteger; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isSet.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isSet.js new file mode 100644 index 00000000..ab88bdf8 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isSet.js @@ -0,0 +1,27 @@ +var baseIsSet = require('./_baseIsSet'), + baseUnary = require('./_baseUnary'), + nodeUtil = require('./_nodeUtil'); + +/* Node.js helper references. */ +var nodeIsSet = nodeUtil && nodeUtil.isSet; + +/** + * Checks if `value` is classified as a `Set` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + * @example + * + * _.isSet(new Set); + * // => true + * + * _.isSet(new WeakSet); + * // => false + */ +var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet; + +module.exports = isSet; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isString.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isString.js new file mode 100644 index 00000000..627eb9c3 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isString.js @@ -0,0 +1,30 @@ +var baseGetTag = require('./_baseGetTag'), + isArray = require('./isArray'), + isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var stringTag = '[object String]'; + +/** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a string, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ +function isString(value) { + return typeof value == 'string' || + (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag); +} + +module.exports = isString; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isSymbol.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isSymbol.js new file mode 100644 index 00000000..dfb60b97 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isSymbol.js @@ -0,0 +1,29 @@ +var baseGetTag = require('./_baseGetTag'), + isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var symbolTag = '[object Symbol]'; + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && baseGetTag(value) == symbolTag); +} + +module.exports = isSymbol; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isTypedArray.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isTypedArray.js new file mode 100644 index 00000000..da3f8dd1 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isTypedArray.js @@ -0,0 +1,27 @@ +var baseIsTypedArray = require('./_baseIsTypedArray'), + baseUnary = require('./_baseUnary'), + nodeUtil = require('./_nodeUtil'); + +/* Node.js helper references. */ +var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; + +/** + * Checks if `value` is classified as a typed array. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + * @example + * + * _.isTypedArray(new Uint8Array); + * // => true + * + * _.isTypedArray([]); + * // => false + */ +var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; + +module.exports = isTypedArray; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isUndefined.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isUndefined.js new file mode 100644 index 00000000..377d121a --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isUndefined.js @@ -0,0 +1,22 @@ +/** + * Checks if `value` is `undefined`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. + * @example + * + * _.isUndefined(void 0); + * // => true + * + * _.isUndefined(null); + * // => false + */ +function isUndefined(value) { + return value === undefined; +} + +module.exports = isUndefined; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isWeakMap.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isWeakMap.js new file mode 100644 index 00000000..8d36f663 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isWeakMap.js @@ -0,0 +1,28 @@ +var getTag = require('./_getTag'), + isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var weakMapTag = '[object WeakMap]'; + +/** + * Checks if `value` is classified as a `WeakMap` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a weak map, else `false`. + * @example + * + * _.isWeakMap(new WeakMap); + * // => true + * + * _.isWeakMap(new Map); + * // => false + */ +function isWeakMap(value) { + return isObjectLike(value) && getTag(value) == weakMapTag; +} + +module.exports = isWeakMap; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isWeakSet.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isWeakSet.js new file mode 100644 index 00000000..e628b261 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/isWeakSet.js @@ -0,0 +1,28 @@ +var baseGetTag = require('./_baseGetTag'), + isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var weakSetTag = '[object WeakSet]'; + +/** + * Checks if `value` is classified as a `WeakSet` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a weak set, else `false`. + * @example + * + * _.isWeakSet(new WeakSet); + * // => true + * + * _.isWeakSet(new Set); + * // => false + */ +function isWeakSet(value) { + return isObjectLike(value) && baseGetTag(value) == weakSetTag; +} + +module.exports = isWeakSet; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/iteratee.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/iteratee.js new file mode 100644 index 00000000..61b73a8c --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/iteratee.js @@ -0,0 +1,53 @@ +var baseClone = require('./_baseClone'), + baseIteratee = require('./_baseIteratee'); + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1; + +/** + * Creates a function that invokes `func` with the arguments of the created + * function. If `func` is a property name, the created function returns the + * property value for a given element. If `func` is an array or object, the + * created function returns `true` for elements that contain the equivalent + * source properties, otherwise it returns `false`. + * + * @static + * @since 4.0.0 + * @memberOf _ + * @category Util + * @param {*} [func=_.identity] The value to convert to a callback. + * @returns {Function} Returns the callback. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true })); + * // => [{ 'user': 'barney', 'age': 36, 'active': true }] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, _.iteratee(['user', 'fred'])); + * // => [{ 'user': 'fred', 'age': 40 }] + * + * // The `_.property` iteratee shorthand. + * _.map(users, _.iteratee('user')); + * // => ['barney', 'fred'] + * + * // Create custom iteratee shorthands. + * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) { + * return !_.isRegExp(func) ? iteratee(func) : function(string) { + * return func.test(string); + * }; + * }); + * + * _.filter(['abc', 'def'], /ef/); + * // => ['def'] + */ +function iteratee(func) { + return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG)); +} + +module.exports = iteratee; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/join.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/join.js new file mode 100644 index 00000000..45de079f --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/join.js @@ -0,0 +1,26 @@ +/** Used for built-in method references. */ +var arrayProto = Array.prototype; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeJoin = arrayProto.join; + +/** + * Converts all elements in `array` into a string separated by `separator`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to convert. + * @param {string} [separator=','] The element separator. + * @returns {string} Returns the joined string. + * @example + * + * _.join(['a', 'b', 'c'], '~'); + * // => 'a~b~c' + */ +function join(array, separator) { + return array == null ? '' : nativeJoin.call(array, separator); +} + +module.exports = join; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/kebabCase.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/kebabCase.js new file mode 100644 index 00000000..8a52be64 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/kebabCase.js @@ -0,0 +1,28 @@ +var createCompounder = require('./_createCompounder'); + +/** + * Converts `string` to + * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the kebab cased string. + * @example + * + * _.kebabCase('Foo Bar'); + * // => 'foo-bar' + * + * _.kebabCase('fooBar'); + * // => 'foo-bar' + * + * _.kebabCase('__FOO_BAR__'); + * // => 'foo-bar' + */ +var kebabCase = createCompounder(function(result, word, index) { + return result + (index ? '-' : '') + word.toLowerCase(); +}); + +module.exports = kebabCase; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/keyBy.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/keyBy.js new file mode 100644 index 00000000..acc007a0 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/keyBy.js @@ -0,0 +1,36 @@ +var baseAssignValue = require('./_baseAssignValue'), + createAggregator = require('./_createAggregator'); + +/** + * Creates an object composed of keys generated from the results of running + * each element of `collection` thru `iteratee`. The corresponding value of + * each key is the last element responsible for generating the key. The + * iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee to transform keys. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * var array = [ + * { 'dir': 'left', 'code': 97 }, + * { 'dir': 'right', 'code': 100 } + * ]; + * + * _.keyBy(array, function(o) { + * return String.fromCharCode(o.code); + * }); + * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } } + * + * _.keyBy(array, 'dir'); + * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } } + */ +var keyBy = createAggregator(function(result, value, key) { + baseAssignValue(result, key, value); +}); + +module.exports = keyBy; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/keys.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/keys.js new file mode 100644 index 00000000..d143c718 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/keys.js @@ -0,0 +1,37 @@ +var arrayLikeKeys = require('./_arrayLikeKeys'), + baseKeys = require('./_baseKeys'), + isArrayLike = require('./isArrayLike'); + +/** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ +function keys(object) { + return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); +} + +module.exports = keys; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/keysIn.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/keysIn.js new file mode 100644 index 00000000..a62308f2 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/keysIn.js @@ -0,0 +1,32 @@ +var arrayLikeKeys = require('./_arrayLikeKeys'), + baseKeysIn = require('./_baseKeysIn'), + isArrayLike = require('./isArrayLike'); + +/** + * Creates an array of the own and inherited enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keysIn(new Foo); + * // => ['a', 'b', 'c'] (iteration order is not guaranteed) + */ +function keysIn(object) { + return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); +} + +module.exports = keysIn; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/lang.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/lang.js new file mode 100644 index 00000000..a3962169 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/lang.js @@ -0,0 +1,58 @@ +module.exports = { + 'castArray': require('./castArray'), + 'clone': require('./clone'), + 'cloneDeep': require('./cloneDeep'), + 'cloneDeepWith': require('./cloneDeepWith'), + 'cloneWith': require('./cloneWith'), + 'conformsTo': require('./conformsTo'), + 'eq': require('./eq'), + 'gt': require('./gt'), + 'gte': require('./gte'), + 'isArguments': require('./isArguments'), + 'isArray': require('./isArray'), + 'isArrayBuffer': require('./isArrayBuffer'), + 'isArrayLike': require('./isArrayLike'), + 'isArrayLikeObject': require('./isArrayLikeObject'), + 'isBoolean': require('./isBoolean'), + 'isBuffer': require('./isBuffer'), + 'isDate': require('./isDate'), + 'isElement': require('./isElement'), + 'isEmpty': require('./isEmpty'), + 'isEqual': require('./isEqual'), + 'isEqualWith': require('./isEqualWith'), + 'isError': require('./isError'), + 'isFinite': require('./isFinite'), + 'isFunction': require('./isFunction'), + 'isInteger': require('./isInteger'), + 'isLength': require('./isLength'), + 'isMap': require('./isMap'), + 'isMatch': require('./isMatch'), + 'isMatchWith': require('./isMatchWith'), + 'isNaN': require('./isNaN'), + 'isNative': require('./isNative'), + 'isNil': require('./isNil'), + 'isNull': require('./isNull'), + 'isNumber': require('./isNumber'), + 'isObject': require('./isObject'), + 'isObjectLike': require('./isObjectLike'), + 'isPlainObject': require('./isPlainObject'), + 'isRegExp': require('./isRegExp'), + 'isSafeInteger': require('./isSafeInteger'), + 'isSet': require('./isSet'), + 'isString': require('./isString'), + 'isSymbol': require('./isSymbol'), + 'isTypedArray': require('./isTypedArray'), + 'isUndefined': require('./isUndefined'), + 'isWeakMap': require('./isWeakMap'), + 'isWeakSet': require('./isWeakSet'), + 'lt': require('./lt'), + 'lte': require('./lte'), + 'toArray': require('./toArray'), + 'toFinite': require('./toFinite'), + 'toInteger': require('./toInteger'), + 'toLength': require('./toLength'), + 'toNumber': require('./toNumber'), + 'toPlainObject': require('./toPlainObject'), + 'toSafeInteger': require('./toSafeInteger'), + 'toString': require('./toString') +}; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/last.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/last.js new file mode 100644 index 00000000..cad1eafa --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/last.js @@ -0,0 +1,20 @@ +/** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ +function last(array) { + var length = array == null ? 0 : array.length; + return length ? array[length - 1] : undefined; +} + +module.exports = last; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/lastIndexOf.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/lastIndexOf.js new file mode 100644 index 00000000..dabfb613 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/lastIndexOf.js @@ -0,0 +1,46 @@ +var baseFindIndex = require('./_baseFindIndex'), + baseIsNaN = require('./_baseIsNaN'), + strictLastIndexOf = require('./_strictLastIndexOf'), + toInteger = require('./toInteger'); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max, + nativeMin = Math.min; + +/** + * This method is like `_.indexOf` except that it iterates over elements of + * `array` from right to left. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} [fromIndex=array.length-1] The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.lastIndexOf([1, 2, 1, 2], 2); + * // => 3 + * + * // Search from the `fromIndex`. + * _.lastIndexOf([1, 2, 1, 2], 2, 2); + * // => 1 + */ +function lastIndexOf(array, value, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = length; + if (fromIndex !== undefined) { + index = toInteger(fromIndex); + index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1); + } + return value === value + ? strictLastIndexOf(array, value, index) + : baseFindIndex(array, baseIsNaN, index, true); +} + +module.exports = lastIndexOf; diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/lodash.js b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/lodash.js new file mode 100644 index 00000000..1fd7116f --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/node_modules/dxf/node_modules/lodash/lodash.js @@ -0,0 +1,17161 @@ +/** + * @license + * Lodash + * Copyright OpenJS Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */ +;(function() { + + /** Used as a safe reference for `undefined` in pre-ES5 environments. */ + var undefined; + + /** Used as the semantic version number. */ + var VERSION = '4.17.20'; + + /** Used as the size to enable large array optimizations. */ + var LARGE_ARRAY_SIZE = 200; + + /** Error message constants. */ + var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.', + FUNC_ERROR_TEXT = 'Expected a function'; + + /** Used to stand-in for `undefined` hash values. */ + var HASH_UNDEFINED = '__lodash_hash_undefined__'; + + /** Used as the maximum memoize cache size. */ + var MAX_MEMOIZE_SIZE = 500; + + /** Used as the internal argument placeholder. */ + var PLACEHOLDER = '__lodash_placeholder__'; + + /** Used to compose bitmasks for cloning. */ + var CLONE_DEEP_FLAG = 1, + CLONE_FLAT_FLAG = 2, + CLONE_SYMBOLS_FLAG = 4; + + /** Used to compose bitmasks for value comparisons. */ + var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + + /** Used to compose bitmasks for function metadata. */ + var WRAP_BIND_FLAG = 1, + WRAP_BIND_KEY_FLAG = 2, + WRAP_CURRY_BOUND_FLAG = 4, + WRAP_CURRY_FLAG = 8, + WRAP_CURRY_RIGHT_FLAG = 16, + WRAP_PARTIAL_FLAG = 32, + WRAP_PARTIAL_RIGHT_FLAG = 64, + WRAP_ARY_FLAG = 128, + WRAP_REARG_FLAG = 256, + WRAP_FLIP_FLAG = 512; + + /** Used as default options for `_.truncate`. */ + var DEFAULT_TRUNC_LENGTH = 30, + DEFAULT_TRUNC_OMISSION = '...'; + + /** Used to detect hot functions by number of calls within a span of milliseconds. */ + var HOT_COUNT = 800, + HOT_SPAN = 16; + + /** Used to indicate the type of lazy iteratees. */ + var LAZY_FILTER_FLAG = 1, + LAZY_MAP_FLAG = 2, + LAZY_WHILE_FLAG = 3; + + /** Used as references for various `Number` constants. */ + var INFINITY = 1 / 0, + MAX_SAFE_INTEGER = 9007199254740991, + MAX_INTEGER = 1.7976931348623157e+308, + NAN = 0 / 0; + + /** Used as references for the maximum length and index of an array. */ + var MAX_ARRAY_LENGTH = 4294967295, + MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1, + HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1; + + /** Used to associate wrap methods with their bit flags. */ + var wrapFlags = [ + ['ary', WRAP_ARY_FLAG], + ['bind', WRAP_BIND_FLAG], + ['bindKey', WRAP_BIND_KEY_FLAG], + ['curry', WRAP_CURRY_FLAG], + ['curryRight', WRAP_CURRY_RIGHT_FLAG], + ['flip', WRAP_FLIP_FLAG], + ['partial', WRAP_PARTIAL_FLAG], + ['partialRight', WRAP_PARTIAL_RIGHT_FLAG], + ['rearg', WRAP_REARG_FLAG] + ]; + + /** `Object#toString` result references. */ + var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + asyncTag = '[object AsyncFunction]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + domExcTag = '[object DOMException]', + errorTag = '[object Error]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + mapTag = '[object Map]', + numberTag = '[object Number]', + nullTag = '[object Null]', + objectTag = '[object Object]', + promiseTag = '[object Promise]', + proxyTag = '[object Proxy]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]', + undefinedTag = '[object Undefined]', + weakMapTag = '[object WeakMap]', + weakSetTag = '[object WeakSet]'; + + var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + + /** Used to match empty string literals in compiled template source. */ + var reEmptyStringLeading = /\b__p \+= '';/g, + reEmptyStringMiddle = /\b(__p \+=) '' \+/g, + reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g; + + /** Used to match HTML entities and HTML characters. */ + var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g, + reUnescapedHtml = /[&<>"']/g, + reHasEscapedHtml = RegExp(reEscapedHtml.source), + reHasUnescapedHtml = RegExp(reUnescapedHtml.source); + + /** Used to match template delimiters. */ + var reEscape = /<%-([\s\S]+?)%>/g, + reEvaluate = /<%([\s\S]+?)%>/g, + reInterpolate = /<%=([\s\S]+?)%>/g; + + /** Used to match property names within property paths. */ + var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/, + rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + + /** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ + var reRegExpChar = /[\\^$.*+?()[\]{}|]/g, + reHasRegExpChar = RegExp(reRegExpChar.source); + + /** Used to match leading and trailing whitespace. */ + var reTrim = /^\s+|\s+$/g, + reTrimStart = /^\s+/, + reTrimEnd = /\s+$/; + + /** Used to match wrap detail comments. */ + var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/, + reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/, + reSplitDetails = /,? & /; + + /** Used to match words composed of alphanumeric characters. */ + var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g; + + /** Used to match backslashes in property paths. */ + var reEscapeChar = /\\(\\)?/g; + + /** + * Used to match + * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components). + */ + var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g; + + /** Used to match `RegExp` flags from their coerced string values. */ + var reFlags = /\w*$/; + + /** Used to detect bad signed hexadecimal string values. */ + var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + + /** Used to detect binary string values. */ + var reIsBinary = /^0b[01]+$/i; + + /** Used to detect host constructors (Safari). */ + var reIsHostCtor = /^\[object .+?Constructor\]$/; + + /** Used to detect octal string values. */ + var reIsOctal = /^0o[0-7]+$/i; + + /** Used to detect unsigned integer values. */ + var reIsUint = /^(?:0|[1-9]\d*)$/; + + /** Used to match Latin Unicode letters (excluding mathematical operators). */ + var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g; + + /** Used to ensure capturing order of template delimiters. */ + var reNoMatch = /($^)/; + + /** Used to match unescaped characters in compiled string literals. */ + var reUnescapedString = /['\n\r\u2028\u2029\\]/g; + + /** Used to compose unicode character classes. */ + var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, + rsDingbatRange = '\\u2700-\\u27bf', + rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff', + rsMathOpRange = '\\xac\\xb1\\xd7\\xf7', + rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf', + rsPunctuationRange = '\\u2000-\\u206f', + rsSpaceRange = ' \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000', + rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde', + rsVarRange = '\\ufe0e\\ufe0f', + rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange; + + /** Used to compose unicode capture groups. */ + var rsApos = "['\u2019]", + rsAstral = '[' + rsAstralRange + ']', + rsBreak = '[' + rsBreakRange + ']', + rsCombo = '[' + rsComboRange + ']', + rsDigits = '\\d+', + rsDingbat = '[' + rsDingbatRange + ']', + rsLower = '[' + rsLowerRange + ']', + rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + rsAstralRange + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + rsUpper = '[' + rsUpperRange + ']', + rsZWJ = '\\u200d'; + + /** Used to compose unicode regexes. */ + var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')', + rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')', + rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?', + rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?', + reOptMod = rsModifier + '?', + rsOptVar = '[' + rsVarRange + ']?', + rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsOrdLower = '\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])', + rsOrdUpper = '\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq, + rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; + + /** Used to match apostrophes. */ + var reApos = RegExp(rsApos, 'g'); + + /** + * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and + * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols). + */ + var reComboMark = RegExp(rsCombo, 'g'); + + /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ + var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); + + /** Used to match complex or compound words. */ + var reUnicodeWord = RegExp([ + rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')', + rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')', + rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower, + rsUpper + '+' + rsOptContrUpper, + rsOrdUpper, + rsOrdLower, + rsDigits, + rsEmoji + ].join('|'), 'g'); + + /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ + var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); + + /** Used to detect strings that need a more robust regexp to match words. */ + var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/; + + /** Used to assign default `context` object properties. */ + var contextProps = [ + 'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array', + 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object', + 'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array', + 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap', + '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout' + ]; + + /** Used to make template sourceURLs easier to identify. */ + var templateCounter = -1; + + /** Used to identify `toStringTag` values of typed arrays. */ + var typedArrayTags = {}; + typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = + typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = + typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = + typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = + typedArrayTags[uint32Tag] = true; + typedArrayTags[argsTag] = typedArrayTags[arrayTag] = + typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = + typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = + typedArrayTags[errorTag] = typedArrayTags[funcTag] = + typedArrayTags[mapTag] = typedArrayTags[numberTag] = + typedArrayTags[objectTag] = typedArrayTags[regexpTag] = + typedArrayTags[setTag] = typedArrayTags[stringTag] = + typedArrayTags[weakMapTag] = false; + + /** Used to identify `toStringTag` values supported by `_.clone`. */ + var cloneableTags = {}; + cloneableTags[argsTag] = cloneableTags[arrayTag] = + cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] = + cloneableTags[boolTag] = cloneableTags[dateTag] = + cloneableTags[float32Tag] = cloneableTags[float64Tag] = + cloneableTags[int8Tag] = cloneableTags[int16Tag] = + cloneableTags[int32Tag] = cloneableTags[mapTag] = + cloneableTags[numberTag] = cloneableTags[objectTag] = + cloneableTags[regexpTag] = cloneableTags[setTag] = + cloneableTags[stringTag] = cloneableTags[symbolTag] = + cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = + cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true; + cloneableTags[errorTag] = cloneableTags[funcTag] = + cloneableTags[weakMapTag] = false; + + /** Used to map Latin Unicode letters to basic Latin letters. */ + var deburredLetters = { + // Latin-1 Supplement block. + '\xc0': 'A', '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A', + '\xe0': 'a', '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a', + '\xc7': 'C', '\xe7': 'c', + '\xd0': 'D', '\xf0': 'd', + '\xc8': 'E', '\xc9': 'E', '\xca': 'E', '\xcb': 'E', + '\xe8': 'e', '\xe9': 'e', '\xea': 'e', '\xeb': 'e', + '\xcc': 'I', '\xcd': 'I', '\xce': 'I', '\xcf': 'I', + '\xec': 'i', '\xed': 'i', '\xee': 'i', '\xef': 'i', + '\xd1': 'N', '\xf1': 'n', + '\xd2': 'O', '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O', + '\xf2': 'o', '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o', + '\xd9': 'U', '\xda': 'U', '\xdb': 'U', '\xdc': 'U', + '\xf9': 'u', '\xfa': 'u', '\xfb': 'u', '\xfc': 'u', + '\xdd': 'Y', '\xfd': 'y', '\xff': 'y', + '\xc6': 'Ae', '\xe6': 'ae', + '\xde': 'Th', '\xfe': 'th', + '\xdf': 'ss', + // Latin Extended-A block. + '\u0100': 'A', '\u0102': 'A', '\u0104': 'A', + '\u0101': 'a', '\u0103': 'a', '\u0105': 'a', + '\u0106': 'C', '\u0108': 'C', '\u010a': 'C', '\u010c': 'C', + '\u0107': 'c', '\u0109': 'c', '\u010b': 'c', '\u010d': 'c', + '\u010e': 'D', '\u0110': 'D', '\u010f': 'd', '\u0111': 'd', + '\u0112': 'E', '\u0114': 'E', '\u0116': 'E', '\u0118': 'E', '\u011a': 'E', + '\u0113': 'e', '\u0115': 'e', '\u0117': 'e', '\u0119': 'e', '\u011b': 'e', + '\u011c': 'G', '\u011e': 'G', '\u0120': 'G', '\u0122': 'G', + '\u011d': 'g', '\u011f': 'g', '\u0121': 'g', '\u0123': 'g', + '\u0124': 'H', '\u0126': 'H', '\u0125': 'h', '\u0127': 'h', + '\u0128': 'I', '\u012a': 'I', '\u012c': 'I', '\u012e': 'I', '\u0130': 'I', + '\u0129': 'i', '\u012b': 'i', '\u012d': 'i', '\u012f': 'i', '\u0131': 'i', + '\u0134': 'J', '\u0135': 'j', + '\u0136': 'K', '\u0137': 'k', '\u0138': 'k', + '\u0139': 'L', '\u013b': 'L', '\u013d': 'L', '\u013f': 'L', '\u0141': 'L', + '\u013a': 'l', '\u013c': 'l', '\u013e': 'l', '\u0140': 'l', '\u0142': 'l', + '\u0143': 'N', '\u0145': 'N', '\u0147': 'N', '\u014a': 'N', + '\u0144': 'n', '\u0146': 'n', '\u0148': 'n', '\u014b': 'n', + '\u014c': 'O', '\u014e': 'O', '\u0150': 'O', + '\u014d': 'o', '\u014f': 'o', '\u0151': 'o', + '\u0154': 'R', '\u0156': 'R', '\u0158': 'R', + '\u0155': 'r', '\u0157': 'r', '\u0159': 'r', + '\u015a': 'S', '\u015c': 'S', '\u015e': 'S', '\u0160': 'S', + '\u015b': 's', '\u015d': 's', '\u015f': 's', '\u0161': 's', + '\u0162': 'T', '\u0164': 'T', '\u0166': 'T', + '\u0163': 't', '\u0165': 't', '\u0167': 't', + '\u0168': 'U', '\u016a': 'U', '\u016c': 'U', '\u016e': 'U', '\u0170': 'U', '\u0172': 'U', + '\u0169': 'u', '\u016b': 'u', '\u016d': 'u', '\u016f': 'u', '\u0171': 'u', '\u0173': 'u', + '\u0174': 'W', '\u0175': 'w', + '\u0176': 'Y', '\u0177': 'y', '\u0178': 'Y', + '\u0179': 'Z', '\u017b': 'Z', '\u017d': 'Z', + '\u017a': 'z', '\u017c': 'z', '\u017e': 'z', + '\u0132': 'IJ', '\u0133': 'ij', + '\u0152': 'Oe', '\u0153': 'oe', + '\u0149': "'n", '\u017f': 's' + }; + + /** Used to map characters to HTML entities. */ + var htmlEscapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''' + }; + + /** Used to map HTML entities to characters. */ + var htmlUnescapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + ''': "'" + }; + + /** Used to escape characters for inclusion in compiled string literals. */ + var stringEscapes = { + '\\': '\\', + "'": "'", + '\n': 'n', + '\r': 'r', + '\u2028': 'u2028', + '\u2029': 'u2029' + }; + + /** Built-in method references without a dependency on `root`. */ + var freeParseFloat = parseFloat, + freeParseInt = parseInt; + + /** Detect free variable `global` from Node.js. */ + var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + + /** Detect free variable `self`. */ + var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + + /** Used as a reference to the global object. */ + var root = freeGlobal || freeSelf || Function('return this')(); + + /** Detect free variable `exports`. */ + var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + + /** Detect free variable `module`. */ + var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + + /** Detect the popular CommonJS extension `module.exports`. */ + var moduleExports = freeModule && freeModule.exports === freeExports; + + /** Detect free variable `process` from Node.js. */ + var freeProcess = moduleExports && freeGlobal.process; + + /** Used to access faster Node.js helpers. */ + var nodeUtil = (function() { + try { + // Use `util.types` for Node.js 10+. + var types = freeModule && freeModule.require && freeModule.require('util').types; + + if (types) { + return types; + } + + // Legacy `process.binding('util')` for Node.js < 10. + return freeProcess && freeProcess.binding && freeProcess.binding('util'); + } catch (e) {} + }()); + + /* Node.js helper references. */ + var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer, + nodeIsDate = nodeUtil && nodeUtil.isDate, + nodeIsMap = nodeUtil && nodeUtil.isMap, + nodeIsRegExp = nodeUtil && nodeUtil.isRegExp, + nodeIsSet = nodeUtil && nodeUtil.isSet, + nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; + + /*--------------------------------------------------------------------------*/ + + /** + * A faster alternative to `Function#apply`, this function invokes `func` + * with the `this` binding of `thisArg` and the arguments of `args`. + * + * @private + * @param {Function} func The function to invoke. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} args The arguments to invoke `func` with. + * @returns {*} Returns the result of `func`. + */ + function apply(func, thisArg, args) { + switch (args.length) { + case 0: return func.call(thisArg); + case 1: return func.call(thisArg, args[0]); + case 2: return func.call(thisArg, args[0], args[1]); + case 3: return func.call(thisArg, args[0], args[1], args[2]); + } + return func.apply(thisArg, args); + } + + /** + * A specialized version of `baseAggregator` for arrays. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} setter The function to set `accumulator` values. + * @param {Function} iteratee The iteratee to transform keys. + * @param {Object} accumulator The initial aggregated object. + * @returns {Function} Returns `accumulator`. + */ + function arrayAggregator(array, setter, iteratee, accumulator) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + var value = array[index]; + setter(accumulator, value, iteratee(value), array); + } + return accumulator; + } + + /** + * A specialized version of `_.forEach` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ + function arrayEach(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (iteratee(array[index], index, array) === false) { + break; + } + } + return array; + } + + /** + * A specialized version of `_.forEachRight` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ + function arrayEachRight(array, iteratee) { + var length = array == null ? 0 : array.length; + + while (length--) { + if (iteratee(array[length], length, array) === false) { + break; + } + } + return array; + } + + /** + * A specialized version of `_.every` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false`. + */ + function arrayEvery(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (!predicate(array[index], index, array)) { + return false; + } + } + return true; + } + + /** + * A specialized version of `_.filter` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ + function arrayFilter(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; + } + } + return result; + } + + /** + * A specialized version of `_.includes` for arrays without support for + * specifying an index to search from. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ + function arrayIncludes(array, value) { + var length = array == null ? 0 : array.length; + return !!length && baseIndexOf(array, value, 0) > -1; + } + + /** + * This function is like `arrayIncludes` except that it accepts a comparator. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @param {Function} comparator The comparator invoked per element. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ + function arrayIncludesWith(array, value, comparator) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (comparator(value, array[index])) { + return true; + } + } + return false; + } + + /** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ + function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; + } + + /** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ + function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; + } + return array; + } + + /** + * A specialized version of `_.reduce` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the first element of `array` as + * the initial value. + * @returns {*} Returns the accumulated value. + */ + function arrayReduce(array, iteratee, accumulator, initAccum) { + var index = -1, + length = array == null ? 0 : array.length; + + if (initAccum && length) { + accumulator = array[++index]; + } + while (++index < length) { + accumulator = iteratee(accumulator, array[index], index, array); + } + return accumulator; + } + + /** + * A specialized version of `_.reduceRight` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the last element of `array` as + * the initial value. + * @returns {*} Returns the accumulated value. + */ + function arrayReduceRight(array, iteratee, accumulator, initAccum) { + var length = array == null ? 0 : array.length; + if (initAccum && length) { + accumulator = array[--length]; + } + while (length--) { + accumulator = iteratee(accumulator, array[length], length, array); + } + return accumulator; + } + + /** + * A specialized version of `_.some` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ + function arraySome(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; + } + + /** + * Gets the size of an ASCII `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ + var asciiSize = baseProperty('length'); + + /** + * Converts an ASCII `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ + function asciiToArray(string) { + return string.split(''); + } + + /** + * Splits an ASCII `string` into an array of its words. + * + * @private + * @param {string} The string to inspect. + * @returns {Array} Returns the words of `string`. + */ + function asciiWords(string) { + return string.match(reAsciiWord) || []; + } + + /** + * The base implementation of methods like `_.findKey` and `_.findLastKey`, + * without support for iteratee shorthands, which iterates over `collection` + * using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the found element or its key, else `undefined`. + */ + function baseFindKey(collection, predicate, eachFunc) { + var result; + eachFunc(collection, function(value, key, collection) { + if (predicate(value, key, collection)) { + result = key; + return false; + } + }); + return result; + } + + /** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseFindIndex(array, predicate, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 1 : -1); + + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; + } + + /** + * The base implementation of `_.indexOf` without `fromIndex` bounds checks. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseIndexOf(array, value, fromIndex) { + return value === value + ? strictIndexOf(array, value, fromIndex) + : baseFindIndex(array, baseIsNaN, fromIndex); + } + + /** + * This function is like `baseIndexOf` except that it accepts a comparator. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @param {Function} comparator The comparator invoked per element. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseIndexOfWith(array, value, fromIndex, comparator) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (comparator(array[index], value)) { + return index; + } + } + return -1; + } + + /** + * The base implementation of `_.isNaN` without support for number objects. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + */ + function baseIsNaN(value) { + return value !== value; + } + + /** + * The base implementation of `_.mean` and `_.meanBy` without support for + * iteratee shorthands. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {number} Returns the mean. + */ + function baseMean(array, iteratee) { + var length = array == null ? 0 : array.length; + return length ? (baseSum(array, iteratee) / length) : NAN; + } + + /** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new accessor function. + */ + function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; + } + + /** + * The base implementation of `_.propertyOf` without support for deep paths. + * + * @private + * @param {Object} object The object to query. + * @returns {Function} Returns the new accessor function. + */ + function basePropertyOf(object) { + return function(key) { + return object == null ? undefined : object[key]; + }; + } + + /** + * The base implementation of `_.reduce` and `_.reduceRight`, without support + * for iteratee shorthands, which iterates over `collection` using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} accumulator The initial value. + * @param {boolean} initAccum Specify using the first or last element of + * `collection` as the initial value. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the accumulated value. + */ + function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { + eachFunc(collection, function(value, index, collection) { + accumulator = initAccum + ? (initAccum = false, value) + : iteratee(accumulator, value, index, collection); + }); + return accumulator; + } + + /** + * The base implementation of `_.sortBy` which uses `comparer` to define the + * sort order of `array` and replaces criteria objects with their corresponding + * values. + * + * @private + * @param {Array} array The array to sort. + * @param {Function} comparer The function to define sort order. + * @returns {Array} Returns `array`. + */ + function baseSortBy(array, comparer) { + var length = array.length; + + array.sort(comparer); + while (length--) { + array[length] = array[length].value; + } + return array; + } + + /** + * The base implementation of `_.sum` and `_.sumBy` without support for + * iteratee shorthands. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {number} Returns the sum. + */ + function baseSum(array, iteratee) { + var result, + index = -1, + length = array.length; + + while (++index < length) { + var current = iteratee(array[index]); + if (current !== undefined) { + result = result === undefined ? current : (result + current); + } + } + return result; + } + + /** + * The base implementation of `_.times` without support for iteratee shorthands + * or max array length checks. + * + * @private + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the array of results. + */ + function baseTimes(n, iteratee) { + var index = -1, + result = Array(n); + + while (++index < n) { + result[index] = iteratee(index); + } + return result; + } + + /** + * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array + * of key-value pairs for `object` corresponding to the property names of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the key-value pairs. + */ + function baseToPairs(object, props) { + return arrayMap(props, function(key) { + return [key, object[key]]; + }); + } + + /** + * The base implementation of `_.unary` without support for storing metadata. + * + * @private + * @param {Function} func The function to cap arguments for. + * @returns {Function} Returns the new capped function. + */ + function baseUnary(func) { + return function(value) { + return func(value); + }; + } + + /** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ + function baseValues(object, props) { + return arrayMap(props, function(key) { + return object[key]; + }); + } + + /** + * Checks if a `cache` value for `key` exists. + * + * @private + * @param {Object} cache The cache to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function cacheHas(cache, key) { + return cache.has(key); + } + + /** + * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol + * that is not found in the character symbols. + * + * @private + * @param {Array} strSymbols The string symbols to inspect. + * @param {Array} chrSymbols The character symbols to find. + * @returns {number} Returns the index of the first unmatched string symbol. + */ + function charsStartIndex(strSymbols, chrSymbols) { + var index = -1, + length = strSymbols.length; + + while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} + return index; + } + + /** + * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol + * that is not found in the character symbols. + * + * @private + * @param {Array} strSymbols The string symbols to inspect. + * @param {Array} chrSymbols The character symbols to find. + * @returns {number} Returns the index of the last unmatched string symbol. + */ + function charsEndIndex(strSymbols, chrSymbols) { + var index = strSymbols.length; + + while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} + return index; + } + + /** + * Gets the number of `placeholder` occurrences in `array`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} placeholder The placeholder to search for. + * @returns {number} Returns the placeholder count. + */ + function countHolders(array, placeholder) { + var length = array.length, + result = 0; + + while (length--) { + if (array[length] === placeholder) { + ++result; + } + } + return result; + } + + /** + * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A + * letters to basic Latin letters. + * + * @private + * @param {string} letter The matched letter to deburr. + * @returns {string} Returns the deburred letter. + */ + var deburrLetter = basePropertyOf(deburredLetters); + + /** + * Used by `_.escape` to convert characters to HTML entities. + * + * @private + * @param {string} chr The matched character to escape. + * @returns {string} Returns the escaped character. + */ + var escapeHtmlChar = basePropertyOf(htmlEscapes); + + /** + * Used by `_.template` to escape characters for inclusion in compiled string literals. + * + * @private + * @param {string} chr The matched character to escape. + * @returns {string} Returns the escaped character. + */ + function escapeStringChar(chr) { + return '\\' + stringEscapes[chr]; + } + + /** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ + function getValue(object, key) { + return object == null ? undefined : object[key]; + } + + /** + * Checks if `string` contains Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a symbol is found, else `false`. + */ + function hasUnicode(string) { + return reHasUnicode.test(string); + } + + /** + * Checks if `string` contains a word composed of Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a word is found, else `false`. + */ + function hasUnicodeWord(string) { + return reHasUnicodeWord.test(string); + } + + /** + * Converts `iterator` to an array. + * + * @private + * @param {Object} iterator The iterator to convert. + * @returns {Array} Returns the converted array. + */ + function iteratorToArray(iterator) { + var data, + result = []; + + while (!(data = iterator.next()).done) { + result.push(data.value); + } + return result; + } + + /** + * Converts `map` to its key-value pairs. + * + * @private + * @param {Object} map The map to convert. + * @returns {Array} Returns the key-value pairs. + */ + function mapToArray(map) { + var index = -1, + result = Array(map.size); + + map.forEach(function(value, key) { + result[++index] = [key, value]; + }); + return result; + } + + /** + * Creates a unary function that invokes `func` with its argument transformed. + * + * @private + * @param {Function} func The function to wrap. + * @param {Function} transform The argument transform. + * @returns {Function} Returns the new function. + */ + function overArg(func, transform) { + return function(arg) { + return func(transform(arg)); + }; + } + + /** + * Replaces all `placeholder` elements in `array` with an internal placeholder + * and returns an array of their indexes. + * + * @private + * @param {Array} array The array to modify. + * @param {*} placeholder The placeholder to replace. + * @returns {Array} Returns the new array of placeholder indexes. + */ + function replaceHolders(array, placeholder) { + var index = -1, + length = array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (value === placeholder || value === PLACEHOLDER) { + array[index] = PLACEHOLDER; + result[resIndex++] = index; + } + } + return result; + } + + /** + * Converts `set` to an array of its values. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the values. + */ + function setToArray(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = value; + }); + return result; + } + + /** + * Converts `set` to its value-value pairs. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the value-value pairs. + */ + function setToPairs(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = [value, value]; + }); + return result; + } + + /** + * A specialized version of `_.indexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function strictIndexOf(array, value, fromIndex) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (array[index] === value) { + return index; + } + } + return -1; + } + + /** + * A specialized version of `_.lastIndexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function strictLastIndexOf(array, value, fromIndex) { + var index = fromIndex + 1; + while (index--) { + if (array[index] === value) { + return index; + } + } + return index; + } + + /** + * Gets the number of symbols in `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the string size. + */ + function stringSize(string) { + return hasUnicode(string) + ? unicodeSize(string) + : asciiSize(string); + } + + /** + * Converts `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ + function stringToArray(string) { + return hasUnicode(string) + ? unicodeToArray(string) + : asciiToArray(string); + } + + /** + * Used by `_.unescape` to convert HTML entities to characters. + * + * @private + * @param {string} chr The matched character to unescape. + * @returns {string} Returns the unescaped character. + */ + var unescapeHtmlChar = basePropertyOf(htmlUnescapes); + + /** + * Gets the size of a Unicode `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ + function unicodeSize(string) { + var result = reUnicode.lastIndex = 0; + while (reUnicode.test(string)) { + ++result; + } + return result; + } + + /** + * Converts a Unicode `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ + function unicodeToArray(string) { + return string.match(reUnicode) || []; + } + + /** + * Splits a Unicode `string` into an array of its words. + * + * @private + * @param {string} The string to inspect. + * @returns {Array} Returns the words of `string`. + */ + function unicodeWords(string) { + return string.match(reUnicodeWord) || []; + } + + /*--------------------------------------------------------------------------*/ + + /** + * Create a new pristine `lodash` function using the `context` object. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Util + * @param {Object} [context=root] The context object. + * @returns {Function} Returns a new `lodash` function. + * @example + * + * _.mixin({ 'foo': _.constant('foo') }); + * + * var lodash = _.runInContext(); + * lodash.mixin({ 'bar': lodash.constant('bar') }); + * + * _.isFunction(_.foo); + * // => true + * _.isFunction(_.bar); + * // => false + * + * lodash.isFunction(lodash.foo); + * // => false + * lodash.isFunction(lodash.bar); + * // => true + * + * // Create a suped-up `defer` in Node.js. + * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer; + */ + var runInContext = (function runInContext(context) { + context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps)); + + /** Built-in constructor references. */ + var Array = context.Array, + Date = context.Date, + Error = context.Error, + Function = context.Function, + Math = context.Math, + Object = context.Object, + RegExp = context.RegExp, + String = context.String, + TypeError = context.TypeError; + + /** Used for built-in method references. */ + var arrayProto = Array.prototype, + funcProto = Function.prototype, + objectProto = Object.prototype; + + /** Used to detect overreaching core-js shims. */ + var coreJsData = context['__core-js_shared__']; + + /** Used to resolve the decompiled source of functions. */ + var funcToString = funcProto.toString; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** Used to generate unique IDs. */ + var idCounter = 0; + + /** Used to detect methods masquerading as native. */ + var maskSrcKey = (function() { + var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); + return uid ? ('Symbol(src)_1.' + uid) : ''; + }()); + + /** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ + var nativeObjectToString = objectProto.toString; + + /** Used to infer the `Object` constructor. */ + var objectCtorString = funcToString.call(Object); + + /** Used to restore the original `_` reference in `_.noConflict`. */ + var oldDash = root._; + + /** Used to detect if a method is native. */ + var reIsNative = RegExp('^' + + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' + ); + + /** Built-in value references. */ + var Buffer = moduleExports ? context.Buffer : undefined, + Symbol = context.Symbol, + Uint8Array = context.Uint8Array, + allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined, + getPrototype = overArg(Object.getPrototypeOf, Object), + objectCreate = Object.create, + propertyIsEnumerable = objectProto.propertyIsEnumerable, + splice = arrayProto.splice, + spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined, + symIterator = Symbol ? Symbol.iterator : undefined, + symToStringTag = Symbol ? Symbol.toStringTag : undefined; + + var defineProperty = (function() { + try { + var func = getNative(Object, 'defineProperty'); + func({}, '', {}); + return func; + } catch (e) {} + }()); + + /** Mocked built-ins. */ + var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout, + ctxNow = Date && Date.now !== root.Date.now && Date.now, + ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeCeil = Math.ceil, + nativeFloor = Math.floor, + nativeGetSymbols = Object.getOwnPropertySymbols, + nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined, + nativeIsFinite = context.isFinite, + nativeJoin = arrayProto.join, + nativeKeys = overArg(Object.keys, Object), + nativeMax = Math.max, + nativeMin = Math.min, + nativeNow = Date.now, + nativeParseInt = context.parseInt, + nativeRandom = Math.random, + nativeReverse = arrayProto.reverse; + + /* Built-in method references that are verified to be native. */ + var DataView = getNative(context, 'DataView'), + Map = getNative(context, 'Map'), + Promise = getNative(context, 'Promise'), + Set = getNative(context, 'Set'), + WeakMap = getNative(context, 'WeakMap'), + nativeCreate = getNative(Object, 'create'); + + /** Used to store function metadata. */ + var metaMap = WeakMap && new WeakMap; + + /** Used to lookup unminified function names. */ + var realNames = {}; + + /** Used to detect maps, sets, and weakmaps. */ + var dataViewCtorString = toSource(DataView), + mapCtorString = toSource(Map), + promiseCtorString = toSource(Promise), + setCtorString = toSource(Set), + weakMapCtorString = toSource(WeakMap); + + /** Used to convert symbols to primitives and strings. */ + var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a `lodash` object which wraps `value` to enable implicit method + * chain sequences. Methods that operate on and return arrays, collections, + * and functions can be chained together. Methods that retrieve a single value + * or may return a primitive value will automatically end the chain sequence + * and return the unwrapped value. Otherwise, the value must be unwrapped + * with `_#value`. + * + * Explicit chain sequences, which must be unwrapped with `_#value`, may be + * enabled using `_.chain`. + * + * The execution of chained methods is lazy, that is, it's deferred until + * `_#value` is implicitly or explicitly called. + * + * Lazy evaluation allows several methods to support shortcut fusion. + * Shortcut fusion is an optimization to merge iteratee calls; this avoids + * the creation of intermediate arrays and can greatly reduce the number of + * iteratee executions. Sections of a chain sequence qualify for shortcut + * fusion if the section is applied to an array and iteratees accept only + * one argument. The heuristic for whether a section qualifies for shortcut + * fusion is subject to change. + * + * Chaining is supported in custom builds as long as the `_#value` method is + * directly or indirectly included in the build. + * + * In addition to lodash methods, wrappers have `Array` and `String` methods. + * + * The wrapper `Array` methods are: + * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift` + * + * The wrapper `String` methods are: + * `replace` and `split` + * + * The wrapper methods that support shortcut fusion are: + * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`, + * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`, + * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray` + * + * The chainable wrapper methods are: + * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`, + * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`, + * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`, + * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`, + * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`, + * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`, + * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`, + * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`, + * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`, + * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`, + * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`, + * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`, + * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`, + * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`, + * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`, + * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`, + * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`, + * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`, + * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`, + * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`, + * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`, + * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`, + * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`, + * `zipObject`, `zipObjectDeep`, and `zipWith` + * + * The wrapper methods that are **not** chainable by default are: + * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`, + * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`, + * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`, + * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`, + * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`, + * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`, + * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`, + * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`, + * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`, + * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`, + * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`, + * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`, + * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`, + * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`, + * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`, + * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`, + * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`, + * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`, + * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`, + * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`, + * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`, + * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`, + * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`, + * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`, + * `upperFirst`, `value`, and `words` + * + * @name _ + * @constructor + * @category Seq + * @param {*} value The value to wrap in a `lodash` instance. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * function square(n) { + * return n * n; + * } + * + * var wrapped = _([1, 2, 3]); + * + * // Returns an unwrapped value. + * wrapped.reduce(_.add); + * // => 6 + * + * // Returns a wrapped value. + * var squares = wrapped.map(square); + * + * _.isArray(squares); + * // => false + * + * _.isArray(squares.value()); + * // => true + */ + function lodash(value) { + if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) { + if (value instanceof LodashWrapper) { + return value; + } + if (hasOwnProperty.call(value, '__wrapped__')) { + return wrapperClone(value); + } + } + return new LodashWrapper(value); + } + + /** + * The base implementation of `_.create` without support for assigning + * properties to the created object. + * + * @private + * @param {Object} proto The object to inherit from. + * @returns {Object} Returns the new object. + */ + var baseCreate = (function() { + function object() {} + return function(proto) { + if (!isObject(proto)) { + return {}; + } + if (objectCreate) { + return objectCreate(proto); + } + object.prototype = proto; + var result = new object; + object.prototype = undefined; + return result; + }; + }()); + + /** + * The function whose prototype chain sequence wrappers inherit from. + * + * @private + */ + function baseLodash() { + // No operation performed. + } + + /** + * The base constructor for creating `lodash` wrapper objects. + * + * @private + * @param {*} value The value to wrap. + * @param {boolean} [chainAll] Enable explicit method chain sequences. + */ + function LodashWrapper(value, chainAll) { + this.__wrapped__ = value; + this.__actions__ = []; + this.__chain__ = !!chainAll; + this.__index__ = 0; + this.__values__ = undefined; + } + + /** + * By default, the template delimiters used by lodash are like those in + * embedded Ruby (ERB) as well as ES2015 template strings. Change the + * following template settings to use alternative delimiters. + * + * @static + * @memberOf _ + * @type {Object} + */ + lodash.templateSettings = { + + /** + * Used to detect `data` property values to be HTML-escaped. + * + * @memberOf _.templateSettings + * @type {RegExp} + */ + 'escape': reEscape, + + /** + * Used to detect code to be evaluated. + * + * @memberOf _.templateSettings + * @type {RegExp} + */ + 'evaluate': reEvaluate, + + /** + * Used to detect `data` property values to inject. + * + * @memberOf _.templateSettings + * @type {RegExp} + */ + 'interpolate': reInterpolate, + + /** + * Used to reference the data object in the template text. + * + * @memberOf _.templateSettings + * @type {string} + */ + 'variable': '', + + /** + * Used to import variables into the compiled template. + * + * @memberOf _.templateSettings + * @type {Object} + */ + 'imports': { + + /** + * A reference to the `lodash` function. + * + * @memberOf _.templateSettings.imports + * @type {Function} + */ + '_': lodash + } + }; + + // Ensure wrappers are instances of `baseLodash`. + lodash.prototype = baseLodash.prototype; + lodash.prototype.constructor = lodash; + + LodashWrapper.prototype = baseCreate(baseLodash.prototype); + LodashWrapper.prototype.constructor = LodashWrapper; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation. + * + * @private + * @constructor + * @param {*} value The value to wrap. + */ + function LazyWrapper(value) { + this.__wrapped__ = value; + this.__actions__ = []; + this.__dir__ = 1; + this.__filtered__ = false; + this.__iteratees__ = []; + this.__takeCount__ = MAX_ARRAY_LENGTH; + this.__views__ = []; + } + + /** + * Creates a clone of the lazy wrapper object. + * + * @private + * @name clone + * @memberOf LazyWrapper + * @returns {Object} Returns the cloned `LazyWrapper` object. + */ + function lazyClone() { + var result = new LazyWrapper(this.__wrapped__); + result.__actions__ = copyArray(this.__actions__); + result.__dir__ = this.__dir__; + result.__filtered__ = this.__filtered__; + result.__iteratees__ = copyArray(this.__iteratees__); + result.__takeCount__ = this.__takeCount__; + result.__views__ = copyArray(this.__views__); + return result; + } + + /** + * Reverses the direction of lazy iteration. + * + * @private + * @name reverse + * @memberOf LazyWrapper + * @returns {Object} Returns the new reversed `LazyWrapper` object. + */ + function lazyReverse() { + if (this.__filtered__) { + var result = new LazyWrapper(this); + result.__dir__ = -1; + result.__filtered__ = true; + } else { + result = this.clone(); + result.__dir__ *= -1; + } + return result; + } + + /** + * Extracts the unwrapped value from its lazy wrapper. + * + * @private + * @name value + * @memberOf LazyWrapper + * @returns {*} Returns the unwrapped value. + */ + function lazyValue() { + var array = this.__wrapped__.value(), + dir = this.__dir__, + isArr = isArray(array), + isRight = dir < 0, + arrLength = isArr ? array.length : 0, + view = getView(0, arrLength, this.__views__), + start = view.start, + end = view.end, + length = end - start, + index = isRight ? end : (start - 1), + iteratees = this.__iteratees__, + iterLength = iteratees.length, + resIndex = 0, + takeCount = nativeMin(length, this.__takeCount__); + + if (!isArr || (!isRight && arrLength == length && takeCount == length)) { + return baseWrapperValue(array, this.__actions__); + } + var result = []; + + outer: + while (length-- && resIndex < takeCount) { + index += dir; + + var iterIndex = -1, + value = array[index]; + + while (++iterIndex < iterLength) { + var data = iteratees[iterIndex], + iteratee = data.iteratee, + type = data.type, + computed = iteratee(value); + + if (type == LAZY_MAP_FLAG) { + value = computed; + } else if (!computed) { + if (type == LAZY_FILTER_FLAG) { + continue outer; + } else { + break outer; + } + } + } + result[resIndex++] = value; + } + return result; + } + + // Ensure `LazyWrapper` is an instance of `baseLodash`. + LazyWrapper.prototype = baseCreate(baseLodash.prototype); + LazyWrapper.prototype.constructor = LazyWrapper; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a hash object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function Hash(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + + /** + * Removes all key-value entries from the hash. + * + * @private + * @name clear + * @memberOf Hash + */ + function hashClear() { + this.__data__ = nativeCreate ? nativeCreate(null) : {}; + this.size = 0; + } + + /** + * Removes `key` and its value from the hash. + * + * @private + * @name delete + * @memberOf Hash + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function hashDelete(key) { + var result = this.has(key) && delete this.__data__[key]; + this.size -= result ? 1 : 0; + return result; + } + + /** + * Gets the hash value for `key`. + * + * @private + * @name get + * @memberOf Hash + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function hashGet(key) { + var data = this.__data__; + if (nativeCreate) { + var result = data[key]; + return result === HASH_UNDEFINED ? undefined : result; + } + return hasOwnProperty.call(data, key) ? data[key] : undefined; + } + + /** + * Checks if a hash value for `key` exists. + * + * @private + * @name has + * @memberOf Hash + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function hashHas(key) { + var data = this.__data__; + return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key); + } + + /** + * Sets the hash `key` to `value`. + * + * @private + * @name set + * @memberOf Hash + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the hash instance. + */ + function hashSet(key, value) { + var data = this.__data__; + this.size += this.has(key) ? 0 : 1; + data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; + return this; + } + + // Add methods to `Hash`. + Hash.prototype.clear = hashClear; + Hash.prototype['delete'] = hashDelete; + Hash.prototype.get = hashGet; + Hash.prototype.has = hashHas; + Hash.prototype.set = hashSet; + + /*------------------------------------------------------------------------*/ + + /** + * Creates an list cache object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function ListCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + + /** + * Removes all key-value entries from the list cache. + * + * @private + * @name clear + * @memberOf ListCache + */ + function listCacheClear() { + this.__data__ = []; + this.size = 0; + } + + /** + * Removes `key` and its value from the list cache. + * + * @private + * @name delete + * @memberOf ListCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function listCacheDelete(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + return false; + } + var lastIndex = data.length - 1; + if (index == lastIndex) { + data.pop(); + } else { + splice.call(data, index, 1); + } + --this.size; + return true; + } + + /** + * Gets the list cache value for `key`. + * + * @private + * @name get + * @memberOf ListCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function listCacheGet(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + return index < 0 ? undefined : data[index][1]; + } + + /** + * Checks if a list cache value for `key` exists. + * + * @private + * @name has + * @memberOf ListCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function listCacheHas(key) { + return assocIndexOf(this.__data__, key) > -1; + } + + /** + * Sets the list cache `key` to `value`. + * + * @private + * @name set + * @memberOf ListCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the list cache instance. + */ + function listCacheSet(key, value) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + ++this.size; + data.push([key, value]); + } else { + data[index][1] = value; + } + return this; + } + + // Add methods to `ListCache`. + ListCache.prototype.clear = listCacheClear; + ListCache.prototype['delete'] = listCacheDelete; + ListCache.prototype.get = listCacheGet; + ListCache.prototype.has = listCacheHas; + ListCache.prototype.set = listCacheSet; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a map cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function MapCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + + /** + * Removes all key-value entries from the map. + * + * @private + * @name clear + * @memberOf MapCache + */ + function mapCacheClear() { + this.size = 0; + this.__data__ = { + 'hash': new Hash, + 'map': new (Map || ListCache), + 'string': new Hash + }; + } + + /** + * Removes `key` and its value from the map. + * + * @private + * @name delete + * @memberOf MapCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function mapCacheDelete(key) { + var result = getMapData(this, key)['delete'](key); + this.size -= result ? 1 : 0; + return result; + } + + /** + * Gets the map value for `key`. + * + * @private + * @name get + * @memberOf MapCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function mapCacheGet(key) { + return getMapData(this, key).get(key); + } + + /** + * Checks if a map value for `key` exists. + * + * @private + * @name has + * @memberOf MapCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function mapCacheHas(key) { + return getMapData(this, key).has(key); + } + + /** + * Sets the map `key` to `value`. + * + * @private + * @name set + * @memberOf MapCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the map cache instance. + */ + function mapCacheSet(key, value) { + var data = getMapData(this, key), + size = data.size; + + data.set(key, value); + this.size += data.size == size ? 0 : 1; + return this; + } + + // Add methods to `MapCache`. + MapCache.prototype.clear = mapCacheClear; + MapCache.prototype['delete'] = mapCacheDelete; + MapCache.prototype.get = mapCacheGet; + MapCache.prototype.has = mapCacheHas; + MapCache.prototype.set = mapCacheSet; + + /*------------------------------------------------------------------------*/ + + /** + * + * Creates an array cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ + function SetCache(values) { + var index = -1, + length = values == null ? 0 : values.length; + + this.__data__ = new MapCache; + while (++index < length) { + this.add(values[index]); + } + } + + /** + * Adds `value` to the array cache. + * + * @private + * @name add + * @memberOf SetCache + * @alias push + * @param {*} value The value to cache. + * @returns {Object} Returns the cache instance. + */ + function setCacheAdd(value) { + this.__data__.set(value, HASH_UNDEFINED); + return this; + } + + /** + * Checks if `value` is in the array cache. + * + * @private + * @name has + * @memberOf SetCache + * @param {*} value The value to search for. + * @returns {number} Returns `true` if `value` is found, else `false`. + */ + function setCacheHas(value) { + return this.__data__.has(value); + } + + // Add methods to `SetCache`. + SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; + SetCache.prototype.has = setCacheHas; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a stack cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function Stack(entries) { + var data = this.__data__ = new ListCache(entries); + this.size = data.size; + } + + /** + * Removes all key-value entries from the stack. + * + * @private + * @name clear + * @memberOf Stack + */ + function stackClear() { + this.__data__ = new ListCache; + this.size = 0; + } + + /** + * Removes `key` and its value from the stack. + * + * @private + * @name delete + * @memberOf Stack + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function stackDelete(key) { + var data = this.__data__, + result = data['delete'](key); + + this.size = data.size; + return result; + } + + /** + * Gets the stack value for `key`. + * + * @private + * @name get + * @memberOf Stack + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function stackGet(key) { + return this.__data__.get(key); + } + + /** + * Checks if a stack value for `key` exists. + * + * @private + * @name has + * @memberOf Stack + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function stackHas(key) { + return this.__data__.has(key); + } + + /** + * Sets the stack `key` to `value`. + * + * @private + * @name set + * @memberOf Stack + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the stack cache instance. + */ + function stackSet(key, value) { + var data = this.__data__; + if (data instanceof ListCache) { + var pairs = data.__data__; + if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) { + pairs.push([key, value]); + this.size = ++data.size; + return this; + } + data = this.__data__ = new MapCache(pairs); + } + data.set(key, value); + this.size = data.size; + return this; + } + + // Add methods to `Stack`. + Stack.prototype.clear = stackClear; + Stack.prototype['delete'] = stackDelete; + Stack.prototype.get = stackGet; + Stack.prototype.has = stackHas; + Stack.prototype.set = stackSet; + + /*------------------------------------------------------------------------*/ + + /** + * Creates an array of the enumerable property names of the array-like `value`. + * + * @private + * @param {*} value The value to query. + * @param {boolean} inherited Specify returning inherited property names. + * @returns {Array} Returns the array of property names. + */ + function arrayLikeKeys(value, inherited) { + var isArr = isArray(value), + isArg = !isArr && isArguments(value), + isBuff = !isArr && !isArg && isBuffer(value), + isType = !isArr && !isArg && !isBuff && isTypedArray(value), + skipIndexes = isArr || isArg || isBuff || isType, + result = skipIndexes ? baseTimes(value.length, String) : [], + length = result.length; + + for (var key in value) { + if ((inherited || hasOwnProperty.call(value, key)) && + !(skipIndexes && ( + // Safari 9 has enumerable `arguments.length` in strict mode. + key == 'length' || + // Node.js 0.10 has enumerable non-index properties on buffers. + (isBuff && (key == 'offset' || key == 'parent')) || + // PhantomJS 2 has enumerable non-index properties on typed arrays. + (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || + // Skip index properties. + isIndex(key, length) + ))) { + result.push(key); + } + } + return result; + } + + /** + * A specialized version of `_.sample` for arrays. + * + * @private + * @param {Array} array The array to sample. + * @returns {*} Returns the random element. + */ + function arraySample(array) { + var length = array.length; + return length ? array[baseRandom(0, length - 1)] : undefined; + } + + /** + * A specialized version of `_.sampleSize` for arrays. + * + * @private + * @param {Array} array The array to sample. + * @param {number} n The number of elements to sample. + * @returns {Array} Returns the random elements. + */ + function arraySampleSize(array, n) { + return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length)); + } + + /** + * A specialized version of `_.shuffle` for arrays. + * + * @private + * @param {Array} array The array to shuffle. + * @returns {Array} Returns the new shuffled array. + */ + function arrayShuffle(array) { + return shuffleSelf(copyArray(array)); + } + + /** + * This function is like `assignValue` except that it doesn't assign + * `undefined` values. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function assignMergeValue(object, key, value) { + if ((value !== undefined && !eq(object[key], value)) || + (value === undefined && !(key in object))) { + baseAssignValue(object, key, value); + } + } + + /** + * Assigns `value` to `key` of `object` if the existing value is not equivalent + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function assignValue(object, key, value) { + var objValue = object[key]; + if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || + (value === undefined && !(key in object))) { + baseAssignValue(object, key, value); + } + } + + /** + * Gets the index at which the `key` is found in `array` of key-value pairs. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} key The key to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function assocIndexOf(array, key) { + var length = array.length; + while (length--) { + if (eq(array[length][0], key)) { + return length; + } + } + return -1; + } + + /** + * Aggregates elements of `collection` on `accumulator` with keys transformed + * by `iteratee` and values set by `setter`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} setter The function to set `accumulator` values. + * @param {Function} iteratee The iteratee to transform keys. + * @param {Object} accumulator The initial aggregated object. + * @returns {Function} Returns `accumulator`. + */ + function baseAggregator(collection, setter, iteratee, accumulator) { + baseEach(collection, function(value, key, collection) { + setter(accumulator, value, iteratee(value), collection); + }); + return accumulator; + } + + /** + * The base implementation of `_.assign` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ + function baseAssign(object, source) { + return object && copyObject(source, keys(source), object); + } + + /** + * The base implementation of `_.assignIn` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ + function baseAssignIn(object, source) { + return object && copyObject(source, keysIn(source), object); + } + + /** + * The base implementation of `assignValue` and `assignMergeValue` without + * value checks. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function baseAssignValue(object, key, value) { + if (key == '__proto__' && defineProperty) { + defineProperty(object, key, { + 'configurable': true, + 'enumerable': true, + 'value': value, + 'writable': true + }); + } else { + object[key] = value; + } + } + + /** + * The base implementation of `_.at` without support for individual paths. + * + * @private + * @param {Object} object The object to iterate over. + * @param {string[]} paths The property paths to pick. + * @returns {Array} Returns the picked elements. + */ + function baseAt(object, paths) { + var index = -1, + length = paths.length, + result = Array(length), + skip = object == null; + + while (++index < length) { + result[index] = skip ? undefined : get(object, paths[index]); + } + return result; + } + + /** + * The base implementation of `_.clamp` which doesn't coerce arguments. + * + * @private + * @param {number} number The number to clamp. + * @param {number} [lower] The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the clamped number. + */ + function baseClamp(number, lower, upper) { + if (number === number) { + if (upper !== undefined) { + number = number <= upper ? number : upper; + } + if (lower !== undefined) { + number = number >= lower ? number : lower; + } + } + return number; + } + + /** + * The base implementation of `_.clone` and `_.cloneDeep` which tracks + * traversed objects. + * + * @private + * @param {*} value The value to clone. + * @param {boolean} bitmask The bitmask flags. + * 1 - Deep clone + * 2 - Flatten inherited properties + * 4 - Clone symbols + * @param {Function} [customizer] The function to customize cloning. + * @param {string} [key] The key of `value`. + * @param {Object} [object] The parent object of `value`. + * @param {Object} [stack] Tracks traversed objects and their clone counterparts. + * @returns {*} Returns the cloned value. + */ + function baseClone(value, bitmask, customizer, key, object, stack) { + var result, + isDeep = bitmask & CLONE_DEEP_FLAG, + isFlat = bitmask & CLONE_FLAT_FLAG, + isFull = bitmask & CLONE_SYMBOLS_FLAG; + + if (customizer) { + result = object ? customizer(value, key, object, stack) : customizer(value); + } + if (result !== undefined) { + return result; + } + if (!isObject(value)) { + return value; + } + var isArr = isArray(value); + if (isArr) { + result = initCloneArray(value); + if (!isDeep) { + return copyArray(value, result); + } + } else { + var tag = getTag(value), + isFunc = tag == funcTag || tag == genTag; + + if (isBuffer(value)) { + return cloneBuffer(value, isDeep); + } + if (tag == objectTag || tag == argsTag || (isFunc && !object)) { + result = (isFlat || isFunc) ? {} : initCloneObject(value); + if (!isDeep) { + return isFlat + ? copySymbolsIn(value, baseAssignIn(result, value)) + : copySymbols(value, baseAssign(result, value)); + } + } else { + if (!cloneableTags[tag]) { + return object ? value : {}; + } + result = initCloneByTag(value, tag, isDeep); + } + } + // Check for circular references and return its corresponding clone. + stack || (stack = new Stack); + var stacked = stack.get(value); + if (stacked) { + return stacked; + } + stack.set(value, result); + + if (isSet(value)) { + value.forEach(function(subValue) { + result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); + }); + } else if (isMap(value)) { + value.forEach(function(subValue, key) { + result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + } + + var keysFunc = isFull + ? (isFlat ? getAllKeysIn : getAllKeys) + : (isFlat ? keysIn : keys); + + var props = isArr ? undefined : keysFunc(value); + arrayEach(props || value, function(subValue, key) { + if (props) { + key = subValue; + subValue = value[key]; + } + // Recursively populate clone (susceptible to call stack limits). + assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + return result; + } + + /** + * The base implementation of `_.conforms` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property predicates to conform to. + * @returns {Function} Returns the new spec function. + */ + function baseConforms(source) { + var props = keys(source); + return function(object) { + return baseConformsTo(object, source, props); + }; + } + + /** + * The base implementation of `_.conformsTo` which accepts `props` to check. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property predicates to conform to. + * @returns {boolean} Returns `true` if `object` conforms, else `false`. + */ + function baseConformsTo(object, source, props) { + var length = props.length; + if (object == null) { + return !length; + } + object = Object(object); + while (length--) { + var key = props[length], + predicate = source[key], + value = object[key]; + + if ((value === undefined && !(key in object)) || !predicate(value)) { + return false; + } + } + return true; + } + + /** + * The base implementation of `_.delay` and `_.defer` which accepts `args` + * to provide to `func`. + * + * @private + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @param {Array} args The arguments to provide to `func`. + * @returns {number|Object} Returns the timer id or timeout object. + */ + function baseDelay(func, wait, args) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return setTimeout(function() { func.apply(undefined, args); }, wait); + } + + /** + * The base implementation of methods like `_.difference` without support + * for excluding multiple arrays or iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Array} values The values to exclude. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of filtered values. + */ + function baseDifference(array, values, iteratee, comparator) { + var index = -1, + includes = arrayIncludes, + isCommon = true, + length = array.length, + result = [], + valuesLength = values.length; + + if (!length) { + return result; + } + if (iteratee) { + values = arrayMap(values, baseUnary(iteratee)); + } + if (comparator) { + includes = arrayIncludesWith; + isCommon = false; + } + else if (values.length >= LARGE_ARRAY_SIZE) { + includes = cacheHas; + isCommon = false; + values = new SetCache(values); + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee == null ? value : iteratee(value); + + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var valuesIndex = valuesLength; + while (valuesIndex--) { + if (values[valuesIndex] === computed) { + continue outer; + } + } + result.push(value); + } + else if (!includes(values, computed, comparator)) { + result.push(value); + } + } + return result; + } + + /** + * The base implementation of `_.forEach` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ + var baseEach = createBaseEach(baseForOwn); + + /** + * The base implementation of `_.forEachRight` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ + var baseEachRight = createBaseEach(baseForOwnRight, true); + + /** + * The base implementation of `_.every` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false` + */ + function baseEvery(collection, predicate) { + var result = true; + baseEach(collection, function(value, index, collection) { + result = !!predicate(value, index, collection); + return result; + }); + return result; + } + + /** + * The base implementation of methods like `_.max` and `_.min` which accepts a + * `comparator` to determine the extremum value. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The iteratee invoked per iteration. + * @param {Function} comparator The comparator used to compare values. + * @returns {*} Returns the extremum value. + */ + function baseExtremum(array, iteratee, comparator) { + var index = -1, + length = array.length; + + while (++index < length) { + var value = array[index], + current = iteratee(value); + + if (current != null && (computed === undefined + ? (current === current && !isSymbol(current)) + : comparator(current, computed) + )) { + var computed = current, + result = value; + } + } + return result; + } + + /** + * The base implementation of `_.fill` without an iteratee call guard. + * + * @private + * @param {Array} array The array to fill. + * @param {*} value The value to fill `array` with. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns `array`. + */ + function baseFill(array, value, start, end) { + var length = array.length; + + start = toInteger(start); + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = (end === undefined || end > length) ? length : toInteger(end); + if (end < 0) { + end += length; + } + end = start > end ? 0 : toLength(end); + while (start < end) { + array[start++] = value; + } + return array; + } + + /** + * The base implementation of `_.filter` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ + function baseFilter(collection, predicate) { + var result = []; + baseEach(collection, function(value, index, collection) { + if (predicate(value, index, collection)) { + result.push(value); + } + }); + return result; + } + + /** + * The base implementation of `_.flatten` with support for restricting flattening. + * + * @private + * @param {Array} array The array to flatten. + * @param {number} depth The maximum recursion depth. + * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. + * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ + function baseFlatten(array, depth, predicate, isStrict, result) { + var index = -1, + length = array.length; + + predicate || (predicate = isFlattenable); + result || (result = []); + + while (++index < length) { + var value = array[index]; + if (depth > 0 && predicate(value)) { + if (depth > 1) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, depth - 1, predicate, isStrict, result); + } else { + arrayPush(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; + } + + /** + * The base implementation of `baseForOwn` which iterates over `object` + * properties returned by `keysFunc` and invokes `iteratee` for each property. + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ + var baseFor = createBaseFor(); + + /** + * This function is like `baseFor` except that it iterates over properties + * in the opposite order. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ + var baseForRight = createBaseFor(true); + + /** + * The base implementation of `_.forOwn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ + function baseForOwn(object, iteratee) { + return object && baseFor(object, iteratee, keys); + } + + /** + * The base implementation of `_.forOwnRight` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ + function baseForOwnRight(object, iteratee) { + return object && baseForRight(object, iteratee, keys); + } + + /** + * The base implementation of `_.functions` which creates an array of + * `object` function property names filtered from `props`. + * + * @private + * @param {Object} object The object to inspect. + * @param {Array} props The property names to filter. + * @returns {Array} Returns the function names. + */ + function baseFunctions(object, props) { + return arrayFilter(props, function(key) { + return isFunction(object[key]); + }); + } + + /** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ + function baseGet(object, path) { + path = castPath(path, object); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[toKey(path[index++])]; + } + return (index && index == length) ? object : undefined; + } + + /** + * The base implementation of `getAllKeys` and `getAllKeysIn` which uses + * `keysFunc` and `symbolsFunc` to get the enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Function} keysFunc The function to get the keys of `object`. + * @param {Function} symbolsFunc The function to get the symbols of `object`. + * @returns {Array} Returns the array of property names and symbols. + */ + function baseGetAllKeys(object, keysFunc, symbolsFunc) { + var result = keysFunc(object); + return isArray(object) ? result : arrayPush(result, symbolsFunc(object)); + } + + /** + * The base implementation of `getTag` without fallbacks for buggy environments. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ + function baseGetTag(value) { + if (value == null) { + return value === undefined ? undefinedTag : nullTag; + } + return (symToStringTag && symToStringTag in Object(value)) + ? getRawTag(value) + : objectToString(value); + } + + /** + * The base implementation of `_.gt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, + * else `false`. + */ + function baseGt(value, other) { + return value > other; + } + + /** + * The base implementation of `_.has` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ + function baseHas(object, key) { + return object != null && hasOwnProperty.call(object, key); + } + + /** + * The base implementation of `_.hasIn` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ + function baseHasIn(object, key) { + return object != null && key in Object(object); + } + + /** + * The base implementation of `_.inRange` which doesn't coerce arguments. + * + * @private + * @param {number} number The number to check. + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @returns {boolean} Returns `true` if `number` is in the range, else `false`. + */ + function baseInRange(number, start, end) { + return number >= nativeMin(start, end) && number < nativeMax(start, end); + } + + /** + * The base implementation of methods like `_.intersection`, without support + * for iteratee shorthands, that accepts an array of arrays to inspect. + * + * @private + * @param {Array} arrays The arrays to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of shared values. + */ + function baseIntersection(arrays, iteratee, comparator) { + var includes = comparator ? arrayIncludesWith : arrayIncludes, + length = arrays[0].length, + othLength = arrays.length, + othIndex = othLength, + caches = Array(othLength), + maxLength = Infinity, + result = []; + + while (othIndex--) { + var array = arrays[othIndex]; + if (othIndex && iteratee) { + array = arrayMap(array, baseUnary(iteratee)); + } + maxLength = nativeMin(array.length, maxLength); + caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120)) + ? new SetCache(othIndex && array) + : undefined; + } + array = arrays[0]; + + var index = -1, + seen = caches[0]; + + outer: + while (++index < length && result.length < maxLength) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + value = (comparator || value !== 0) ? value : 0; + if (!(seen + ? cacheHas(seen, computed) + : includes(result, computed, comparator) + )) { + othIndex = othLength; + while (--othIndex) { + var cache = caches[othIndex]; + if (!(cache + ? cacheHas(cache, computed) + : includes(arrays[othIndex], computed, comparator)) + ) { + continue outer; + } + } + if (seen) { + seen.push(computed); + } + result.push(value); + } + } + return result; + } + + /** + * The base implementation of `_.invert` and `_.invertBy` which inverts + * `object` with values transformed by `iteratee` and set by `setter`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} setter The function to set `accumulator` values. + * @param {Function} iteratee The iteratee to transform values. + * @param {Object} accumulator The initial inverted object. + * @returns {Function} Returns `accumulator`. + */ + function baseInverter(object, setter, iteratee, accumulator) { + baseForOwn(object, function(value, key, object) { + setter(accumulator, iteratee(value), key, object); + }); + return accumulator; + } + + /** + * The base implementation of `_.invoke` without support for individual + * method arguments. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the method to invoke. + * @param {Array} args The arguments to invoke the method with. + * @returns {*} Returns the result of the invoked method. + */ + function baseInvoke(object, path, args) { + path = castPath(path, object); + object = parent(object, path); + var func = object == null ? object : object[toKey(last(path))]; + return func == null ? undefined : apply(func, object, args); + } + + /** + * The base implementation of `_.isArguments`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + */ + function baseIsArguments(value) { + return isObjectLike(value) && baseGetTag(value) == argsTag; + } + + /** + * The base implementation of `_.isArrayBuffer` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. + */ + function baseIsArrayBuffer(value) { + return isObjectLike(value) && baseGetTag(value) == arrayBufferTag; + } + + /** + * The base implementation of `_.isDate` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a date object, else `false`. + */ + function baseIsDate(value) { + return isObjectLike(value) && baseGetTag(value) == dateTag; + } + + /** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {boolean} bitmask The bitmask flags. + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Function} [customizer] The function to customize comparisons. + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ + function baseIsEqual(value, other, bitmask, customizer, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) { + return value !== value && other !== other; + } + return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); + } + + /** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { + var objIsArr = isArray(object), + othIsArr = isArray(other), + objTag = objIsArr ? arrayTag : getTag(object), + othTag = othIsArr ? arrayTag : getTag(other); + + objTag = objTag == argsTag ? objectTag : objTag; + othTag = othTag == argsTag ? objectTag : othTag; + + var objIsObj = objTag == objectTag, + othIsObj = othTag == objectTag, + isSameTag = objTag == othTag; + + if (isSameTag && isBuffer(object)) { + if (!isBuffer(other)) { + return false; + } + objIsArr = true; + objIsObj = false; + } + if (isSameTag && !objIsObj) { + stack || (stack = new Stack); + return (objIsArr || isTypedArray(object)) + ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) + : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); + } + if (!(bitmask & COMPARE_PARTIAL_FLAG)) { + var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, + othUnwrapped = othIsWrapped ? other.value() : other; + + stack || (stack = new Stack); + return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new Stack); + return equalObjects(object, other, bitmask, customizer, equalFunc, stack); + } + + /** + * The base implementation of `_.isMap` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + */ + function baseIsMap(value) { + return isObjectLike(value) && getTag(value) == mapTag; + } + + /** + * The base implementation of `_.isMatch` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Array} matchData The property names, values, and compare flags to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + */ + function baseIsMatch(object, source, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer; + + if (object == null) { + return !length; + } + object = Object(object); + while (index--) { + var data = matchData[index]; + if ((noCustomizer && data[2]) + ? data[1] !== object[data[0]] + : !(data[0] in object) + ) { + return false; + } + } + while (++index < length) { + data = matchData[index]; + var key = data[0], + objValue = object[key], + srcValue = data[1]; + + if (noCustomizer && data[2]) { + if (objValue === undefined && !(key in object)) { + return false; + } + } else { + var stack = new Stack; + if (customizer) { + var result = customizer(objValue, srcValue, key, object, source, stack); + } + if (!(result === undefined + ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack) + : result + )) { + return false; + } + } + } + return true; + } + + /** + * The base implementation of `_.isNative` without bad shim checks. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + */ + function baseIsNative(value) { + if (!isObject(value) || isMasked(value)) { + return false; + } + var pattern = isFunction(value) ? reIsNative : reIsHostCtor; + return pattern.test(toSource(value)); + } + + /** + * The base implementation of `_.isRegExp` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. + */ + function baseIsRegExp(value) { + return isObjectLike(value) && baseGetTag(value) == regexpTag; + } + + /** + * The base implementation of `_.isSet` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + */ + function baseIsSet(value) { + return isObjectLike(value) && getTag(value) == setTag; + } + + /** + * The base implementation of `_.isTypedArray` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + */ + function baseIsTypedArray(value) { + return isObjectLike(value) && + isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; + } + + /** + * The base implementation of `_.iteratee`. + * + * @private + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. + */ + function baseIteratee(value) { + // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. + // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. + if (typeof value == 'function') { + return value; + } + if (value == null) { + return identity; + } + if (typeof value == 'object') { + return isArray(value) + ? baseMatchesProperty(value[0], value[1]) + : baseMatches(value); + } + return property(value); + } + + /** + * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function baseKeys(object) { + if (!isPrototype(object)) { + return nativeKeys(object); + } + var result = []; + for (var key in Object(object)) { + if (hasOwnProperty.call(object, key) && key != 'constructor') { + result.push(key); + } + } + return result; + } + + /** + * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function baseKeysIn(object) { + if (!isObject(object)) { + return nativeKeysIn(object); + } + var isProto = isPrototype(object), + result = []; + + for (var key in object) { + if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { + result.push(key); + } + } + return result; + } + + /** + * The base implementation of `_.lt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, + * else `false`. + */ + function baseLt(value, other) { + return value < other; + } + + /** + * The base implementation of `_.map` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ + function baseMap(collection, iteratee) { + var index = -1, + result = isArrayLike(collection) ? Array(collection.length) : []; + + baseEach(collection, function(value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; + } + + /** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + */ + function baseMatches(source) { + var matchData = getMatchData(source); + if (matchData.length == 1 && matchData[0][2]) { + return matchesStrictComparable(matchData[0][0], matchData[0][1]); + } + return function(object) { + return object === source || baseIsMatch(object, source, matchData); + }; + } + + /** + * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. + * + * @private + * @param {string} path The path of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ + function baseMatchesProperty(path, srcValue) { + if (isKey(path) && isStrictComparable(srcValue)) { + return matchesStrictComparable(toKey(path), srcValue); + } + return function(object) { + var objValue = get(object, path); + return (objValue === undefined && objValue === srcValue) + ? hasIn(object, path) + : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG); + }; + } + + /** + * The base implementation of `_.merge` without support for multiple sources. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {number} srcIndex The index of `source`. + * @param {Function} [customizer] The function to customize merged values. + * @param {Object} [stack] Tracks traversed source values and their merged + * counterparts. + */ + function baseMerge(object, source, srcIndex, customizer, stack) { + if (object === source) { + return; + } + baseFor(source, function(srcValue, key) { + stack || (stack = new Stack); + if (isObject(srcValue)) { + baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack); + } + else { + var newValue = customizer + ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack) + : undefined; + + if (newValue === undefined) { + newValue = srcValue; + } + assignMergeValue(object, key, newValue); + } + }, keysIn); + } + + /** + * A specialized version of `baseMerge` for arrays and objects which performs + * deep merges and tracks traversed objects enabling objects with circular + * references to be merged. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {string} key The key of the value to merge. + * @param {number} srcIndex The index of `source`. + * @param {Function} mergeFunc The function to merge values. + * @param {Function} [customizer] The function to customize assigned values. + * @param {Object} [stack] Tracks traversed source values and their merged + * counterparts. + */ + function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) { + var objValue = safeGet(object, key), + srcValue = safeGet(source, key), + stacked = stack.get(srcValue); + + if (stacked) { + assignMergeValue(object, key, stacked); + return; + } + var newValue = customizer + ? customizer(objValue, srcValue, (key + ''), object, source, stack) + : undefined; + + var isCommon = newValue === undefined; + + if (isCommon) { + var isArr = isArray(srcValue), + isBuff = !isArr && isBuffer(srcValue), + isTyped = !isArr && !isBuff && isTypedArray(srcValue); + + newValue = srcValue; + if (isArr || isBuff || isTyped) { + if (isArray(objValue)) { + newValue = objValue; + } + else if (isArrayLikeObject(objValue)) { + newValue = copyArray(objValue); + } + else if (isBuff) { + isCommon = false; + newValue = cloneBuffer(srcValue, true); + } + else if (isTyped) { + isCommon = false; + newValue = cloneTypedArray(srcValue, true); + } + else { + newValue = []; + } + } + else if (isPlainObject(srcValue) || isArguments(srcValue)) { + newValue = objValue; + if (isArguments(objValue)) { + newValue = toPlainObject(objValue); + } + else if (!isObject(objValue) || isFunction(objValue)) { + newValue = initCloneObject(srcValue); + } + } + else { + isCommon = false; + } + } + if (isCommon) { + // Recursively merge objects and arrays (susceptible to call stack limits). + stack.set(srcValue, newValue); + mergeFunc(newValue, srcValue, srcIndex, customizer, stack); + stack['delete'](srcValue); + } + assignMergeValue(object, key, newValue); + } + + /** + * The base implementation of `_.nth` which doesn't coerce arguments. + * + * @private + * @param {Array} array The array to query. + * @param {number} n The index of the element to return. + * @returns {*} Returns the nth element of `array`. + */ + function baseNth(array, n) { + var length = array.length; + if (!length) { + return; + } + n += n < 0 ? length : 0; + return isIndex(n, length) ? array[n] : undefined; + } + + /** + * The base implementation of `_.orderBy` without param guards. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. + * @param {string[]} orders The sort orders of `iteratees`. + * @returns {Array} Returns the new sorted array. + */ + function baseOrderBy(collection, iteratees, orders) { + if (iteratees.length) { + iteratees = arrayMap(iteratees, function(iteratee) { + if (isArray(iteratee)) { + return function(value) { + return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee); + } + } + return iteratee; + }); + } else { + iteratees = [identity]; + } + + var index = -1; + iteratees = arrayMap(iteratees, baseUnary(getIteratee())); + + var result = baseMap(collection, function(value, key, collection) { + var criteria = arrayMap(iteratees, function(iteratee) { + return iteratee(value); + }); + return { 'criteria': criteria, 'index': ++index, 'value': value }; + }); + + return baseSortBy(result, function(object, other) { + return compareMultiple(object, other, orders); + }); + } + + /** + * The base implementation of `_.pick` without support for individual + * property identifiers. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @returns {Object} Returns the new object. + */ + function basePick(object, paths) { + return basePickBy(object, paths, function(value, path) { + return hasIn(object, path); + }); + } + + /** + * The base implementation of `_.pickBy` without support for iteratee shorthands. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @param {Function} predicate The function invoked per property. + * @returns {Object} Returns the new object. + */ + function basePickBy(object, paths, predicate) { + var index = -1, + length = paths.length, + result = {}; + + while (++index < length) { + var path = paths[index], + value = baseGet(object, path); + + if (predicate(value, path)) { + baseSet(result, castPath(path, object), value); + } + } + return result; + } + + /** + * A specialized version of `baseProperty` which supports deep paths. + * + * @private + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + */ + function basePropertyDeep(path) { + return function(object) { + return baseGet(object, path); + }; + } + + /** + * The base implementation of `_.pullAllBy` without support for iteratee + * shorthands. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns `array`. + */ + function basePullAll(array, values, iteratee, comparator) { + var indexOf = comparator ? baseIndexOfWith : baseIndexOf, + index = -1, + length = values.length, + seen = array; + + if (array === values) { + values = copyArray(values); + } + if (iteratee) { + seen = arrayMap(array, baseUnary(iteratee)); + } + while (++index < length) { + var fromIndex = 0, + value = values[index], + computed = iteratee ? iteratee(value) : value; + + while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) { + if (seen !== array) { + splice.call(seen, fromIndex, 1); + } + splice.call(array, fromIndex, 1); + } + } + return array; + } + + /** + * The base implementation of `_.pullAt` without support for individual + * indexes or capturing the removed elements. + * + * @private + * @param {Array} array The array to modify. + * @param {number[]} indexes The indexes of elements to remove. + * @returns {Array} Returns `array`. + */ + function basePullAt(array, indexes) { + var length = array ? indexes.length : 0, + lastIndex = length - 1; + + while (length--) { + var index = indexes[length]; + if (length == lastIndex || index !== previous) { + var previous = index; + if (isIndex(index)) { + splice.call(array, index, 1); + } else { + baseUnset(array, index); + } + } + } + return array; + } + + /** + * The base implementation of `_.random` without support for returning + * floating-point numbers. + * + * @private + * @param {number} lower The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the random number. + */ + function baseRandom(lower, upper) { + return lower + nativeFloor(nativeRandom() * (upper - lower + 1)); + } + + /** + * The base implementation of `_.range` and `_.rangeRight` which doesn't + * coerce arguments. + * + * @private + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @param {number} step The value to increment or decrement by. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the range of numbers. + */ + function baseRange(start, end, step, fromRight) { + var index = -1, + length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), + result = Array(length); + + while (length--) { + result[fromRight ? length : ++index] = start; + start += step; + } + return result; + } + + /** + * The base implementation of `_.repeat` which doesn't coerce arguments. + * + * @private + * @param {string} string The string to repeat. + * @param {number} n The number of times to repeat the string. + * @returns {string} Returns the repeated string. + */ + function baseRepeat(string, n) { + var result = ''; + if (!string || n < 1 || n > MAX_SAFE_INTEGER) { + return result; + } + // Leverage the exponentiation by squaring algorithm for a faster repeat. + // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details. + do { + if (n % 2) { + result += string; + } + n = nativeFloor(n / 2); + if (n) { + string += string; + } + } while (n); + + return result; + } + + /** + * The base implementation of `_.rest` which doesn't validate or coerce arguments. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + */ + function baseRest(func, start) { + return setToString(overRest(func, start, identity), func + ''); + } + + /** + * The base implementation of `_.sample`. + * + * @private + * @param {Array|Object} collection The collection to sample. + * @returns {*} Returns the random element. + */ + function baseSample(collection) { + return arraySample(values(collection)); + } + + /** + * The base implementation of `_.sampleSize` without param guards. + * + * @private + * @param {Array|Object} collection The collection to sample. + * @param {number} n The number of elements to sample. + * @returns {Array} Returns the random elements. + */ + function baseSampleSize(collection, n) { + var array = values(collection); + return shuffleSelf(array, baseClamp(n, 0, array.length)); + } + + /** + * The base implementation of `_.set`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ + function baseSet(object, path, value, customizer) { + if (!isObject(object)) { + return object; + } + path = castPath(path, object); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = toKey(path[index]), + newValue = value; + + if (key === '__proto__' || key === 'constructor' || key === 'prototype') { + return object; + } + + if (index != lastIndex) { + var objValue = nested[key]; + newValue = customizer ? customizer(objValue, key, nested) : undefined; + if (newValue === undefined) { + newValue = isObject(objValue) + ? objValue + : (isIndex(path[index + 1]) ? [] : {}); + } + } + assignValue(nested, key, newValue); + nested = nested[key]; + } + return object; + } + + /** + * The base implementation of `setData` without support for hot loop shorting. + * + * @private + * @param {Function} func The function to associate metadata with. + * @param {*} data The metadata. + * @returns {Function} Returns `func`. + */ + var baseSetData = !metaMap ? identity : function(func, data) { + metaMap.set(func, data); + return func; + }; + + /** + * The base implementation of `setToString` without support for hot loop shorting. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ + var baseSetToString = !defineProperty ? identity : function(func, string) { + return defineProperty(func, 'toString', { + 'configurable': true, + 'enumerable': false, + 'value': constant(string), + 'writable': true + }); + }; + + /** + * The base implementation of `_.shuffle`. + * + * @private + * @param {Array|Object} collection The collection to shuffle. + * @returns {Array} Returns the new shuffled array. + */ + function baseShuffle(collection) { + return shuffleSelf(values(collection)); + } + + /** + * The base implementation of `_.slice` without an iteratee call guard. + * + * @private + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ + function baseSlice(array, start, end) { + var index = -1, + length = array.length; + + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = end > length ? length : end; + if (end < 0) { + end += length; + } + length = start > end ? 0 : ((end - start) >>> 0); + start >>>= 0; + + var result = Array(length); + while (++index < length) { + result[index] = array[index + start]; + } + return result; + } + + /** + * The base implementation of `_.some` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ + function baseSome(collection, predicate) { + var result; + + baseEach(collection, function(value, index, collection) { + result = predicate(value, index, collection); + return !result; + }); + return !!result; + } + + /** + * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which + * performs a binary search of `array` to determine the index at which `value` + * should be inserted into `array` in order to maintain its sort order. + * + * @private + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {boolean} [retHighest] Specify returning the highest qualified index. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + */ + function baseSortedIndex(array, value, retHighest) { + var low = 0, + high = array == null ? low : array.length; + + if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) { + while (low < high) { + var mid = (low + high) >>> 1, + computed = array[mid]; + + if (computed !== null && !isSymbol(computed) && + (retHighest ? (computed <= value) : (computed < value))) { + low = mid + 1; + } else { + high = mid; + } + } + return high; + } + return baseSortedIndexBy(array, value, identity, retHighest); + } + + /** + * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy` + * which invokes `iteratee` for `value` and each element of `array` to compute + * their sort ranking. The iteratee is invoked with one argument; (value). + * + * @private + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function} iteratee The iteratee invoked per element. + * @param {boolean} [retHighest] Specify returning the highest qualified index. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + */ + function baseSortedIndexBy(array, value, iteratee, retHighest) { + var low = 0, + high = array == null ? 0 : array.length; + if (high === 0) { + return 0; + } + + value = iteratee(value); + var valIsNaN = value !== value, + valIsNull = value === null, + valIsSymbol = isSymbol(value), + valIsUndefined = value === undefined; + + while (low < high) { + var mid = nativeFloor((low + high) / 2), + computed = iteratee(array[mid]), + othIsDefined = computed !== undefined, + othIsNull = computed === null, + othIsReflexive = computed === computed, + othIsSymbol = isSymbol(computed); + + if (valIsNaN) { + var setLow = retHighest || othIsReflexive; + } else if (valIsUndefined) { + setLow = othIsReflexive && (retHighest || othIsDefined); + } else if (valIsNull) { + setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull); + } else if (valIsSymbol) { + setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol); + } else if (othIsNull || othIsSymbol) { + setLow = false; + } else { + setLow = retHighest ? (computed <= value) : (computed < value); + } + if (setLow) { + low = mid + 1; + } else { + high = mid; + } + } + return nativeMin(high, MAX_ARRAY_INDEX); + } + + /** + * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ + function baseSortedUniq(array, iteratee) { + var index = -1, + length = array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + if (!index || !eq(computed, seen)) { + var seen = computed; + result[resIndex++] = value === 0 ? 0 : value; + } + } + return result; + } + + /** + * The base implementation of `_.toNumber` which doesn't ensure correct + * conversions of binary, hexadecimal, or octal string values. + * + * @private + * @param {*} value The value to process. + * @returns {number} Returns the number. + */ + function baseToNumber(value) { + if (typeof value == 'number') { + return value; + } + if (isSymbol(value)) { + return NAN; + } + return +value; + } + + /** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ + function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if (isArray(value)) { + // Recursively convert values (susceptible to call stack limits). + return arrayMap(value, baseToString) + ''; + } + if (isSymbol(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; + } + + /** + * The base implementation of `_.uniqBy` without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ + function baseUniq(array, iteratee, comparator) { + var index = -1, + includes = arrayIncludes, + length = array.length, + isCommon = true, + result = [], + seen = result; + + if (comparator) { + isCommon = false; + includes = arrayIncludesWith; + } + else if (length >= LARGE_ARRAY_SIZE) { + var set = iteratee ? null : createSet(array); + if (set) { + return setToArray(set); + } + isCommon = false; + includes = cacheHas; + seen = new SetCache; + } + else { + seen = iteratee ? [] : result; + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var seenIndex = seen.length; + while (seenIndex--) { + if (seen[seenIndex] === computed) { + continue outer; + } + } + if (iteratee) { + seen.push(computed); + } + result.push(value); + } + else if (!includes(seen, computed, comparator)) { + if (seen !== result) { + seen.push(computed); + } + result.push(value); + } + } + return result; + } + + /** + * The base implementation of `_.unset`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The property path to unset. + * @returns {boolean} Returns `true` if the property is deleted, else `false`. + */ + function baseUnset(object, path) { + path = castPath(path, object); + object = parent(object, path); + return object == null || delete object[toKey(last(path))]; + } + + /** + * The base implementation of `_.update`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to update. + * @param {Function} updater The function to produce the updated value. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ + function baseUpdate(object, path, updater, customizer) { + return baseSet(object, path, updater(baseGet(object, path)), customizer); + } + + /** + * The base implementation of methods like `_.dropWhile` and `_.takeWhile` + * without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to query. + * @param {Function} predicate The function invoked per iteration. + * @param {boolean} [isDrop] Specify dropping elements instead of taking them. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the slice of `array`. + */ + function baseWhile(array, predicate, isDrop, fromRight) { + var length = array.length, + index = fromRight ? length : -1; + + while ((fromRight ? index-- : ++index < length) && + predicate(array[index], index, array)) {} + + return isDrop + ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length)) + : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index)); + } + + /** + * The base implementation of `wrapperValue` which returns the result of + * performing a sequence of actions on the unwrapped `value`, where each + * successive action is supplied the return value of the previous. + * + * @private + * @param {*} value The unwrapped value. + * @param {Array} actions Actions to perform to resolve the unwrapped value. + * @returns {*} Returns the resolved value. + */ + function baseWrapperValue(value, actions) { + var result = value; + if (result instanceof LazyWrapper) { + result = result.value(); + } + return arrayReduce(actions, function(result, action) { + return action.func.apply(action.thisArg, arrayPush([result], action.args)); + }, result); + } + + /** + * The base implementation of methods like `_.xor`, without support for + * iteratee shorthands, that accepts an array of arrays to inspect. + * + * @private + * @param {Array} arrays The arrays to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of values. + */ + function baseXor(arrays, iteratee, comparator) { + var length = arrays.length; + if (length < 2) { + return length ? baseUniq(arrays[0]) : []; + } + var index = -1, + result = Array(length); + + while (++index < length) { + var array = arrays[index], + othIndex = -1; + + while (++othIndex < length) { + if (othIndex != index) { + result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator); + } + } + } + return baseUniq(baseFlatten(result, 1), iteratee, comparator); + } + + /** + * This base implementation of `_.zipObject` which assigns values using `assignFunc`. + * + * @private + * @param {Array} props The property identifiers. + * @param {Array} values The property values. + * @param {Function} assignFunc The function to assign values. + * @returns {Object} Returns the new object. + */ + function baseZipObject(props, values, assignFunc) { + var index = -1, + length = props.length, + valsLength = values.length, + result = {}; + + while (++index < length) { + var value = index < valsLength ? values[index] : undefined; + assignFunc(result, props[index], value); + } + return result; + } + + /** + * Casts `value` to an empty array if it's not an array like object. + * + * @private + * @param {*} value The value to inspect. + * @returns {Array|Object} Returns the cast array-like object. + */ + function castArrayLikeObject(value) { + return isArrayLikeObject(value) ? value : []; + } + + /** + * Casts `value` to `identity` if it's not a function. + * + * @private + * @param {*} value The value to inspect. + * @returns {Function} Returns cast function. + */ + function castFunction(value) { + return typeof value == 'function' ? value : identity; + } + + /** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @param {Object} [object] The object to query keys on. + * @returns {Array} Returns the cast property path array. + */ + function castPath(value, object) { + if (isArray(value)) { + return value; + } + return isKey(value, object) ? [value] : stringToPath(toString(value)); + } + + /** + * A `baseRest` alias which can be replaced with `identity` by module + * replacement plugins. + * + * @private + * @type {Function} + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ + var castRest = baseRest; + + /** + * Casts `array` to a slice if it's needed. + * + * @private + * @param {Array} array The array to inspect. + * @param {number} start The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the cast slice. + */ + function castSlice(array, start, end) { + var length = array.length; + end = end === undefined ? length : end; + return (!start && end >= length) ? array : baseSlice(array, start, end); + } + + /** + * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout). + * + * @private + * @param {number|Object} id The timer id or timeout object of the timer to clear. + */ + var clearTimeout = ctxClearTimeout || function(id) { + return root.clearTimeout(id); + }; + + /** + * Creates a clone of `buffer`. + * + * @private + * @param {Buffer} buffer The buffer to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Buffer} Returns the cloned buffer. + */ + function cloneBuffer(buffer, isDeep) { + if (isDeep) { + return buffer.slice(); + } + var length = buffer.length, + result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length); + + buffer.copy(result); + return result; + } + + /** + * Creates a clone of `arrayBuffer`. + * + * @private + * @param {ArrayBuffer} arrayBuffer The array buffer to clone. + * @returns {ArrayBuffer} Returns the cloned array buffer. + */ + function cloneArrayBuffer(arrayBuffer) { + var result = new arrayBuffer.constructor(arrayBuffer.byteLength); + new Uint8Array(result).set(new Uint8Array(arrayBuffer)); + return result; + } + + /** + * Creates a clone of `dataView`. + * + * @private + * @param {Object} dataView The data view to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned data view. + */ + function cloneDataView(dataView, isDeep) { + var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer; + return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); + } + + /** + * Creates a clone of `regexp`. + * + * @private + * @param {Object} regexp The regexp to clone. + * @returns {Object} Returns the cloned regexp. + */ + function cloneRegExp(regexp) { + var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); + result.lastIndex = regexp.lastIndex; + return result; + } + + /** + * Creates a clone of the `symbol` object. + * + * @private + * @param {Object} symbol The symbol object to clone. + * @returns {Object} Returns the cloned symbol object. + */ + function cloneSymbol(symbol) { + return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; + } + + /** + * Creates a clone of `typedArray`. + * + * @private + * @param {Object} typedArray The typed array to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned typed array. + */ + function cloneTypedArray(typedArray, isDeep) { + var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer; + return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); + } + + /** + * Compares values to sort them in ascending order. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {number} Returns the sort order indicator for `value`. + */ + function compareAscending(value, other) { + if (value !== other) { + var valIsDefined = value !== undefined, + valIsNull = value === null, + valIsReflexive = value === value, + valIsSymbol = isSymbol(value); + + var othIsDefined = other !== undefined, + othIsNull = other === null, + othIsReflexive = other === other, + othIsSymbol = isSymbol(other); + + if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || + (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || + (valIsNull && othIsDefined && othIsReflexive) || + (!valIsDefined && othIsReflexive) || + !valIsReflexive) { + return 1; + } + if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || + (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || + (othIsNull && valIsDefined && valIsReflexive) || + (!othIsDefined && valIsReflexive) || + !othIsReflexive) { + return -1; + } + } + return 0; + } + + /** + * Used by `_.orderBy` to compare multiple properties of a value to another + * and stable sort them. + * + * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, + * specify an order of "desc" for descending or "asc" for ascending sort order + * of corresponding values. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {boolean[]|string[]} orders The order to sort by for each property. + * @returns {number} Returns the sort order indicator for `object`. + */ + function compareMultiple(object, other, orders) { + var index = -1, + objCriteria = object.criteria, + othCriteria = other.criteria, + length = objCriteria.length, + ordersLength = orders.length; + + while (++index < length) { + var result = compareAscending(objCriteria[index], othCriteria[index]); + if (result) { + if (index >= ordersLength) { + return result; + } + var order = orders[index]; + return result * (order == 'desc' ? -1 : 1); + } + } + // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications + // that causes it, under certain circumstances, to provide the same value for + // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 + // for more details. + // + // This also ensures a stable sort in V8 and other engines. + // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. + return object.index - other.index; + } + + /** + * Creates an array that is the composition of partially applied arguments, + * placeholders, and provided arguments into a single array of arguments. + * + * @private + * @param {Array} args The provided arguments. + * @param {Array} partials The arguments to prepend to those provided. + * @param {Array} holders The `partials` placeholder indexes. + * @params {boolean} [isCurried] Specify composing for a curried function. + * @returns {Array} Returns the new array of composed arguments. + */ + function composeArgs(args, partials, holders, isCurried) { + var argsIndex = -1, + argsLength = args.length, + holdersLength = holders.length, + leftIndex = -1, + leftLength = partials.length, + rangeLength = nativeMax(argsLength - holdersLength, 0), + result = Array(leftLength + rangeLength), + isUncurried = !isCurried; + + while (++leftIndex < leftLength) { + result[leftIndex] = partials[leftIndex]; + } + while (++argsIndex < holdersLength) { + if (isUncurried || argsIndex < argsLength) { + result[holders[argsIndex]] = args[argsIndex]; + } + } + while (rangeLength--) { + result[leftIndex++] = args[argsIndex++]; + } + return result; + } + + /** + * This function is like `composeArgs` except that the arguments composition + * is tailored for `_.partialRight`. + * + * @private + * @param {Array} args The provided arguments. + * @param {Array} partials The arguments to append to those provided. + * @param {Array} holders The `partials` placeholder indexes. + * @params {boolean} [isCurried] Specify composing for a curried function. + * @returns {Array} Returns the new array of composed arguments. + */ + function composeArgsRight(args, partials, holders, isCurried) { + var argsIndex = -1, + argsLength = args.length, + holdersIndex = -1, + holdersLength = holders.length, + rightIndex = -1, + rightLength = partials.length, + rangeLength = nativeMax(argsLength - holdersLength, 0), + result = Array(rangeLength + rightLength), + isUncurried = !isCurried; + + while (++argsIndex < rangeLength) { + result[argsIndex] = args[argsIndex]; + } + var offset = argsIndex; + while (++rightIndex < rightLength) { + result[offset + rightIndex] = partials[rightIndex]; + } + while (++holdersIndex < holdersLength) { + if (isUncurried || argsIndex < argsLength) { + result[offset + holders[holdersIndex]] = args[argsIndex++]; + } + } + return result; + } + + /** + * Copies the values of `source` to `array`. + * + * @private + * @param {Array} source The array to copy values from. + * @param {Array} [array=[]] The array to copy values to. + * @returns {Array} Returns `array`. + */ + function copyArray(source, array) { + var index = -1, + length = source.length; + + array || (array = Array(length)); + while (++index < length) { + array[index] = source[index]; + } + return array; + } + + /** + * Copies properties of `source` to `object`. + * + * @private + * @param {Object} source The object to copy properties from. + * @param {Array} props The property identifiers to copy. + * @param {Object} [object={}] The object to copy properties to. + * @param {Function} [customizer] The function to customize copied values. + * @returns {Object} Returns `object`. + */ + function copyObject(source, props, object, customizer) { + var isNew = !object; + object || (object = {}); + + var index = -1, + length = props.length; + + while (++index < length) { + var key = props[index]; + + var newValue = customizer + ? customizer(object[key], source[key], key, object, source) + : undefined; + + if (newValue === undefined) { + newValue = source[key]; + } + if (isNew) { + baseAssignValue(object, key, newValue); + } else { + assignValue(object, key, newValue); + } + } + return object; + } + + /** + * Copies own symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ + function copySymbols(source, object) { + return copyObject(source, getSymbols(source), object); + } + + /** + * Copies own and inherited symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ + function copySymbolsIn(source, object) { + return copyObject(source, getSymbolsIn(source), object); + } + + /** + * Creates a function like `_.groupBy`. + * + * @private + * @param {Function} setter The function to set accumulator values. + * @param {Function} [initializer] The accumulator object initializer. + * @returns {Function} Returns the new aggregator function. + */ + function createAggregator(setter, initializer) { + return function(collection, iteratee) { + var func = isArray(collection) ? arrayAggregator : baseAggregator, + accumulator = initializer ? initializer() : {}; + + return func(collection, setter, getIteratee(iteratee, 2), accumulator); + }; + } + + /** + * Creates a function like `_.assign`. + * + * @private + * @param {Function} assigner The function to assign values. + * @returns {Function} Returns the new assigner function. + */ + function createAssigner(assigner) { + return baseRest(function(object, sources) { + var index = -1, + length = sources.length, + customizer = length > 1 ? sources[length - 1] : undefined, + guard = length > 2 ? sources[2] : undefined; + + customizer = (assigner.length > 3 && typeof customizer == 'function') + ? (length--, customizer) + : undefined; + + if (guard && isIterateeCall(sources[0], sources[1], guard)) { + customizer = length < 3 ? undefined : customizer; + length = 1; + } + object = Object(object); + while (++index < length) { + var source = sources[index]; + if (source) { + assigner(object, source, index, customizer); + } + } + return object; + }); + } + + /** + * Creates a `baseEach` or `baseEachRight` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ + function createBaseEach(eachFunc, fromRight) { + return function(collection, iteratee) { + if (collection == null) { + return collection; + } + if (!isArrayLike(collection)) { + return eachFunc(collection, iteratee); + } + var length = collection.length, + index = fromRight ? length : -1, + iterable = Object(collection); + + while ((fromRight ? index-- : ++index < length)) { + if (iteratee(iterable[index], index, iterable) === false) { + break; + } + } + return collection; + }; + } + + /** + * Creates a base function for methods like `_.forIn` and `_.forOwn`. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ + function createBaseFor(fromRight) { + return function(object, iteratee, keysFunc) { + var index = -1, + iterable = Object(object), + props = keysFunc(object), + length = props.length; + + while (length--) { + var key = props[fromRight ? length : ++index]; + if (iteratee(iterable[key], key, iterable) === false) { + break; + } + } + return object; + }; + } + + /** + * Creates a function that wraps `func` to invoke it with the optional `this` + * binding of `thisArg`. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {*} [thisArg] The `this` binding of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createBind(func, bitmask, thisArg) { + var isBind = bitmask & WRAP_BIND_FLAG, + Ctor = createCtor(func); + + function wrapper() { + var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + return fn.apply(isBind ? thisArg : this, arguments); + } + return wrapper; + } + + /** + * Creates a function like `_.lowerFirst`. + * + * @private + * @param {string} methodName The name of the `String` case method to use. + * @returns {Function} Returns the new case function. + */ + function createCaseFirst(methodName) { + return function(string) { + string = toString(string); + + var strSymbols = hasUnicode(string) + ? stringToArray(string) + : undefined; + + var chr = strSymbols + ? strSymbols[0] + : string.charAt(0); + + var trailing = strSymbols + ? castSlice(strSymbols, 1).join('') + : string.slice(1); + + return chr[methodName]() + trailing; + }; + } + + /** + * Creates a function like `_.camelCase`. + * + * @private + * @param {Function} callback The function to combine each word. + * @returns {Function} Returns the new compounder function. + */ + function createCompounder(callback) { + return function(string) { + return arrayReduce(words(deburr(string).replace(reApos, '')), callback, ''); + }; + } + + /** + * Creates a function that produces an instance of `Ctor` regardless of + * whether it was invoked as part of a `new` expression or by `call` or `apply`. + * + * @private + * @param {Function} Ctor The constructor to wrap. + * @returns {Function} Returns the new wrapped function. + */ + function createCtor(Ctor) { + return function() { + // Use a `switch` statement to work with class constructors. See + // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist + // for more details. + var args = arguments; + switch (args.length) { + case 0: return new Ctor; + case 1: return new Ctor(args[0]); + case 2: return new Ctor(args[0], args[1]); + case 3: return new Ctor(args[0], args[1], args[2]); + case 4: return new Ctor(args[0], args[1], args[2], args[3]); + case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]); + case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]); + case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]); + } + var thisBinding = baseCreate(Ctor.prototype), + result = Ctor.apply(thisBinding, args); + + // Mimic the constructor's `return` behavior. + // See https://es5.github.io/#x13.2.2 for more details. + return isObject(result) ? result : thisBinding; + }; + } + + /** + * Creates a function that wraps `func` to enable currying. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {number} arity The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createCurry(func, bitmask, arity) { + var Ctor = createCtor(func); + + function wrapper() { + var length = arguments.length, + args = Array(length), + index = length, + placeholder = getHolder(wrapper); + + while (index--) { + args[index] = arguments[index]; + } + var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder) + ? [] + : replaceHolders(args, placeholder); + + length -= holders.length; + if (length < arity) { + return createRecurry( + func, bitmask, createHybrid, wrapper.placeholder, undefined, + args, holders, undefined, undefined, arity - length); + } + var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + return apply(fn, this, args); + } + return wrapper; + } + + /** + * Creates a `_.find` or `_.findLast` function. + * + * @private + * @param {Function} findIndexFunc The function to find the collection index. + * @returns {Function} Returns the new find function. + */ + function createFind(findIndexFunc) { + return function(collection, predicate, fromIndex) { + var iterable = Object(collection); + if (!isArrayLike(collection)) { + var iteratee = getIteratee(predicate, 3); + collection = keys(collection); + predicate = function(key) { return iteratee(iterable[key], key, iterable); }; + } + var index = findIndexFunc(collection, predicate, fromIndex); + return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; + }; + } + + /** + * Creates a `_.flow` or `_.flowRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new flow function. + */ + function createFlow(fromRight) { + return flatRest(function(funcs) { + var length = funcs.length, + index = length, + prereq = LodashWrapper.prototype.thru; + + if (fromRight) { + funcs.reverse(); + } + while (index--) { + var func = funcs[index]; + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + if (prereq && !wrapper && getFuncName(func) == 'wrapper') { + var wrapper = new LodashWrapper([], true); + } + } + index = wrapper ? index : length; + while (++index < length) { + func = funcs[index]; + + var funcName = getFuncName(func), + data = funcName == 'wrapper' ? getData(func) : undefined; + + if (data && isLaziable(data[0]) && + data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) && + !data[4].length && data[9] == 1 + ) { + wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]); + } else { + wrapper = (func.length == 1 && isLaziable(func)) + ? wrapper[funcName]() + : wrapper.thru(func); + } + } + return function() { + var args = arguments, + value = args[0]; + + if (wrapper && args.length == 1 && isArray(value)) { + return wrapper.plant(value).value(); + } + var index = 0, + result = length ? funcs[index].apply(this, args) : value; + + while (++index < length) { + result = funcs[index].call(this, result); + } + return result; + }; + }); + } + + /** + * Creates a function that wraps `func` to invoke it with optional `this` + * binding of `thisArg`, partial application, and currying. + * + * @private + * @param {Function|string} func The function or method name to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {*} [thisArg] The `this` binding of `func`. + * @param {Array} [partials] The arguments to prepend to those provided to + * the new function. + * @param {Array} [holders] The `partials` placeholder indexes. + * @param {Array} [partialsRight] The arguments to append to those provided + * to the new function. + * @param {Array} [holdersRight] The `partialsRight` placeholder indexes. + * @param {Array} [argPos] The argument positions of the new function. + * @param {number} [ary] The arity cap of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) { + var isAry = bitmask & WRAP_ARY_FLAG, + isBind = bitmask & WRAP_BIND_FLAG, + isBindKey = bitmask & WRAP_BIND_KEY_FLAG, + isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG), + isFlip = bitmask & WRAP_FLIP_FLAG, + Ctor = isBindKey ? undefined : createCtor(func); + + function wrapper() { + var length = arguments.length, + args = Array(length), + index = length; + + while (index--) { + args[index] = arguments[index]; + } + if (isCurried) { + var placeholder = getHolder(wrapper), + holdersCount = countHolders(args, placeholder); + } + if (partials) { + args = composeArgs(args, partials, holders, isCurried); + } + if (partialsRight) { + args = composeArgsRight(args, partialsRight, holdersRight, isCurried); + } + length -= holdersCount; + if (isCurried && length < arity) { + var newHolders = replaceHolders(args, placeholder); + return createRecurry( + func, bitmask, createHybrid, wrapper.placeholder, thisArg, + args, newHolders, argPos, ary, arity - length + ); + } + var thisBinding = isBind ? thisArg : this, + fn = isBindKey ? thisBinding[func] : func; + + length = args.length; + if (argPos) { + args = reorder(args, argPos); + } else if (isFlip && length > 1) { + args.reverse(); + } + if (isAry && ary < length) { + args.length = ary; + } + if (this && this !== root && this instanceof wrapper) { + fn = Ctor || createCtor(fn); + } + return fn.apply(thisBinding, args); + } + return wrapper; + } + + /** + * Creates a function like `_.invertBy`. + * + * @private + * @param {Function} setter The function to set accumulator values. + * @param {Function} toIteratee The function to resolve iteratees. + * @returns {Function} Returns the new inverter function. + */ + function createInverter(setter, toIteratee) { + return function(object, iteratee) { + return baseInverter(object, setter, toIteratee(iteratee), {}); + }; + } + + /** + * Creates a function that performs a mathematical operation on two values. + * + * @private + * @param {Function} operator The function to perform the operation. + * @param {number} [defaultValue] The value used for `undefined` arguments. + * @returns {Function} Returns the new mathematical operation function. + */ + function createMathOperation(operator, defaultValue) { + return function(value, other) { + var result; + if (value === undefined && other === undefined) { + return defaultValue; + } + if (value !== undefined) { + result = value; + } + if (other !== undefined) { + if (result === undefined) { + return other; + } + if (typeof value == 'string' || typeof other == 'string') { + value = baseToString(value); + other = baseToString(other); + } else { + value = baseToNumber(value); + other = baseToNumber(other); + } + result = operator(value, other); + } + return result; + }; + } + + /** + * Creates a function like `_.over`. + * + * @private + * @param {Function} arrayFunc The function to iterate over iteratees. + * @returns {Function} Returns the new over function. + */ + function createOver(arrayFunc) { + return flatRest(function(iteratees) { + iteratees = arrayMap(iteratees, baseUnary(getIteratee())); + return baseRest(function(args) { + var thisArg = this; + return arrayFunc(iteratees, function(iteratee) { + return apply(iteratee, thisArg, args); + }); + }); + }); + } + + /** + * Creates the padding for `string` based on `length`. The `chars` string + * is truncated if the number of characters exceeds `length`. + * + * @private + * @param {number} length The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padding for `string`. + */ + function createPadding(length, chars) { + chars = chars === undefined ? ' ' : baseToString(chars); + + var charsLength = chars.length; + if (charsLength < 2) { + return charsLength ? baseRepeat(chars, length) : chars; + } + var result = baseRepeat(chars, nativeCeil(length / stringSize(chars))); + return hasUnicode(chars) + ? castSlice(stringToArray(result), 0, length).join('') + : result.slice(0, length); + } + + /** + * Creates a function that wraps `func` to invoke it with the `this` binding + * of `thisArg` and `partials` prepended to the arguments it receives. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} partials The arguments to prepend to those provided to + * the new function. + * @returns {Function} Returns the new wrapped function. + */ + function createPartial(func, bitmask, thisArg, partials) { + var isBind = bitmask & WRAP_BIND_FLAG, + Ctor = createCtor(func); + + function wrapper() { + var argsIndex = -1, + argsLength = arguments.length, + leftIndex = -1, + leftLength = partials.length, + args = Array(leftLength + argsLength), + fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + + while (++leftIndex < leftLength) { + args[leftIndex] = partials[leftIndex]; + } + while (argsLength--) { + args[leftIndex++] = arguments[++argsIndex]; + } + return apply(fn, isBind ? thisArg : this, args); + } + return wrapper; + } + + /** + * Creates a `_.range` or `_.rangeRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new range function. + */ + function createRange(fromRight) { + return function(start, end, step) { + if (step && typeof step != 'number' && isIterateeCall(start, end, step)) { + end = step = undefined; + } + // Ensure the sign of `-0` is preserved. + start = toFinite(start); + if (end === undefined) { + end = start; + start = 0; + } else { + end = toFinite(end); + } + step = step === undefined ? (start < end ? 1 : -1) : toFinite(step); + return baseRange(start, end, step, fromRight); + }; + } + + /** + * Creates a function that performs a relational operation on two values. + * + * @private + * @param {Function} operator The function to perform the operation. + * @returns {Function} Returns the new relational operation function. + */ + function createRelationalOperation(operator) { + return function(value, other) { + if (!(typeof value == 'string' && typeof other == 'string')) { + value = toNumber(value); + other = toNumber(other); + } + return operator(value, other); + }; + } + + /** + * Creates a function that wraps `func` to continue currying. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {Function} wrapFunc The function to create the `func` wrapper. + * @param {*} placeholder The placeholder value. + * @param {*} [thisArg] The `this` binding of `func`. + * @param {Array} [partials] The arguments to prepend to those provided to + * the new function. + * @param {Array} [holders] The `partials` placeholder indexes. + * @param {Array} [argPos] The argument positions of the new function. + * @param {number} [ary] The arity cap of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) { + var isCurry = bitmask & WRAP_CURRY_FLAG, + newHolders = isCurry ? holders : undefined, + newHoldersRight = isCurry ? undefined : holders, + newPartials = isCurry ? partials : undefined, + newPartialsRight = isCurry ? undefined : partials; + + bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG); + bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG); + + if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) { + bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG); + } + var newData = [ + func, bitmask, thisArg, newPartials, newHolders, newPartialsRight, + newHoldersRight, argPos, ary, arity + ]; + + var result = wrapFunc.apply(undefined, newData); + if (isLaziable(func)) { + setData(result, newData); + } + result.placeholder = placeholder; + return setWrapToString(result, func, bitmask); + } + + /** + * Creates a function like `_.round`. + * + * @private + * @param {string} methodName The name of the `Math` method to use when rounding. + * @returns {Function} Returns the new round function. + */ + function createRound(methodName) { + var func = Math[methodName]; + return function(number, precision) { + number = toNumber(number); + precision = precision == null ? 0 : nativeMin(toInteger(precision), 292); + if (precision && nativeIsFinite(number)) { + // Shift with exponential notation to avoid floating-point issues. + // See [MDN](https://mdn.io/round#Examples) for more details. + var pair = (toString(number) + 'e').split('e'), + value = func(pair[0] + 'e' + (+pair[1] + precision)); + + pair = (toString(value) + 'e').split('e'); + return +(pair[0] + 'e' + (+pair[1] - precision)); + } + return func(number); + }; + } + + /** + * Creates a set object of `values`. + * + * @private + * @param {Array} values The values to add to the set. + * @returns {Object} Returns the new set. + */ + var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) { + return new Set(values); + }; + + /** + * Creates a `_.toPairs` or `_.toPairsIn` function. + * + * @private + * @param {Function} keysFunc The function to get the keys of a given object. + * @returns {Function} Returns the new pairs function. + */ + function createToPairs(keysFunc) { + return function(object) { + var tag = getTag(object); + if (tag == mapTag) { + return mapToArray(object); + } + if (tag == setTag) { + return setToPairs(object); + } + return baseToPairs(object, keysFunc(object)); + }; + } + + /** + * Creates a function that either curries or invokes `func` with optional + * `this` binding and partially applied arguments. + * + * @private + * @param {Function|string} func The function or method name to wrap. + * @param {number} bitmask The bitmask flags. + * 1 - `_.bind` + * 2 - `_.bindKey` + * 4 - `_.curry` or `_.curryRight` of a bound function + * 8 - `_.curry` + * 16 - `_.curryRight` + * 32 - `_.partial` + * 64 - `_.partialRight` + * 128 - `_.rearg` + * 256 - `_.ary` + * 512 - `_.flip` + * @param {*} [thisArg] The `this` binding of `func`. + * @param {Array} [partials] The arguments to be partially applied. + * @param {Array} [holders] The `partials` placeholder indexes. + * @param {Array} [argPos] The argument positions of the new function. + * @param {number} [ary] The arity cap of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) { + var isBindKey = bitmask & WRAP_BIND_KEY_FLAG; + if (!isBindKey && typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + var length = partials ? partials.length : 0; + if (!length) { + bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG); + partials = holders = undefined; + } + ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0); + arity = arity === undefined ? arity : toInteger(arity); + length -= holders ? holders.length : 0; + + if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) { + var partialsRight = partials, + holdersRight = holders; + + partials = holders = undefined; + } + var data = isBindKey ? undefined : getData(func); + + var newData = [ + func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, + argPos, ary, arity + ]; + + if (data) { + mergeData(newData, data); + } + func = newData[0]; + bitmask = newData[1]; + thisArg = newData[2]; + partials = newData[3]; + holders = newData[4]; + arity = newData[9] = newData[9] === undefined + ? (isBindKey ? 0 : func.length) + : nativeMax(newData[9] - length, 0); + + if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) { + bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG); + } + if (!bitmask || bitmask == WRAP_BIND_FLAG) { + var result = createBind(func, bitmask, thisArg); + } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) { + result = createCurry(func, bitmask, arity); + } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) { + result = createPartial(func, bitmask, thisArg, partials); + } else { + result = createHybrid.apply(undefined, newData); + } + var setter = data ? baseSetData : setData; + return setWrapToString(setter(result, newData), func, bitmask); + } + + /** + * Used by `_.defaults` to customize its `_.assignIn` use to assign properties + * of source objects to the destination object for all destination properties + * that resolve to `undefined`. + * + * @private + * @param {*} objValue The destination value. + * @param {*} srcValue The source value. + * @param {string} key The key of the property to assign. + * @param {Object} object The parent object of `objValue`. + * @returns {*} Returns the value to assign. + */ + function customDefaultsAssignIn(objValue, srcValue, key, object) { + if (objValue === undefined || + (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) { + return srcValue; + } + return objValue; + } + + /** + * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source + * objects into destination objects that are passed thru. + * + * @private + * @param {*} objValue The destination value. + * @param {*} srcValue The source value. + * @param {string} key The key of the property to merge. + * @param {Object} object The parent object of `objValue`. + * @param {Object} source The parent object of `srcValue`. + * @param {Object} [stack] Tracks traversed source values and their merged + * counterparts. + * @returns {*} Returns the value to assign. + */ + function customDefaultsMerge(objValue, srcValue, key, object, source, stack) { + if (isObject(objValue) && isObject(srcValue)) { + // Recursively merge objects and arrays (susceptible to call stack limits). + stack.set(srcValue, objValue); + baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack); + stack['delete'](srcValue); + } + return objValue; + } + + /** + * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain + * objects. + * + * @private + * @param {*} value The value to inspect. + * @param {string} key The key of the property to inspect. + * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`. + */ + function customOmitClone(value) { + return isPlainObject(value) ? undefined : value; + } + + /** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ + function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + // Check that cyclic values are equal. + var arrStacked = stack.get(array); + var othStacked = stack.get(other); + if (arrStacked && othStacked) { + return arrStacked == other && othStacked == array; + } + var index = -1, + result = true, + seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined; + + stack.set(array, other); + stack.set(other, array); + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, arrValue, index, other, array, stack) + : customizer(arrValue, othValue, index, array, other, stack); + } + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (seen) { + if (!arraySome(other, function(othValue, othIndex) { + if (!cacheHas(seen, othIndex) && + (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { + return seen.push(othIndex); + } + })) { + result = false; + break; + } + } else if (!( + arrValue === othValue || + equalFunc(arrValue, othValue, bitmask, customizer, stack) + )) { + result = false; + break; + } + } + stack['delete'](array); + stack['delete'](other); + return result; + } + + /** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { + switch (tag) { + case dataViewTag: + if ((object.byteLength != other.byteLength) || + (object.byteOffset != other.byteOffset)) { + return false; + } + object = object.buffer; + other = other.buffer; + + case arrayBufferTag: + if ((object.byteLength != other.byteLength) || + !equalFunc(new Uint8Array(object), new Uint8Array(other))) { + return false; + } + return true; + + case boolTag: + case dateTag: + case numberTag: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return eq(+object, +other); + + case errorTag: + return object.name == other.name && object.message == other.message; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings, primitives and objects, + // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring + // for more details. + return object == (other + ''); + + case mapTag: + var convert = mapToArray; + + case setTag: + var isPartial = bitmask & COMPARE_PARTIAL_FLAG; + convert || (convert = setToArray); + + if (object.size != other.size && !isPartial) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + bitmask |= COMPARE_UNORDERED_FLAG; + + // Recursively compare objects (susceptible to call stack limits). + stack.set(object, other); + var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); + stack['delete'](object); + return result; + + case symbolTag: + if (symbolValueOf) { + return symbolValueOf.call(object) == symbolValueOf.call(other); + } + } + return false; + } + + /** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + objProps = getAllKeys(object), + objLength = objProps.length, + othProps = getAllKeys(other), + othLength = othProps.length; + + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { + return false; + } + } + // Check that cyclic values are equal. + var objStacked = stack.get(object); + var othStacked = stack.get(other); + if (objStacked && othStacked) { + return objStacked == other && othStacked == object; + } + var result = true; + stack.set(object, other); + stack.set(other, object); + + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, objValue, key, other, object, stack) + : customizer(objValue, othValue, key, object, other, stack); + } + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined + ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) + : compared + )) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + stack['delete'](object); + stack['delete'](other); + return result; + } + + /** + * A specialized version of `baseRest` which flattens the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ + function flatRest(func) { + return setToString(overRest(func, undefined, flatten), func + ''); + } + + /** + * Creates an array of own enumerable property names and symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ + function getAllKeys(object) { + return baseGetAllKeys(object, keys, getSymbols); + } + + /** + * Creates an array of own and inherited enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ + function getAllKeysIn(object) { + return baseGetAllKeys(object, keysIn, getSymbolsIn); + } + + /** + * Gets metadata for `func`. + * + * @private + * @param {Function} func The function to query. + * @returns {*} Returns the metadata for `func`. + */ + var getData = !metaMap ? noop : function(func) { + return metaMap.get(func); + }; + + /** + * Gets the name of `func`. + * + * @private + * @param {Function} func The function to query. + * @returns {string} Returns the function name. + */ + function getFuncName(func) { + var result = (func.name + ''), + array = realNames[result], + length = hasOwnProperty.call(realNames, result) ? array.length : 0; + + while (length--) { + var data = array[length], + otherFunc = data.func; + if (otherFunc == null || otherFunc == func) { + return data.name; + } + } + return result; + } + + /** + * Gets the argument placeholder value for `func`. + * + * @private + * @param {Function} func The function to inspect. + * @returns {*} Returns the placeholder value. + */ + function getHolder(func) { + var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func; + return object.placeholder; + } + + /** + * Gets the appropriate "iteratee" function. If `_.iteratee` is customized, + * this function returns the custom method, otherwise it returns `baseIteratee`. + * If arguments are provided, the chosen function is invoked with them and + * its result is returned. + * + * @private + * @param {*} [value] The value to convert to an iteratee. + * @param {number} [arity] The arity of the created iteratee. + * @returns {Function} Returns the chosen function or its result. + */ + function getIteratee() { + var result = lodash.iteratee || iteratee; + result = result === iteratee ? baseIteratee : result; + return arguments.length ? result(arguments[0], arguments[1]) : result; + } + + /** + * Gets the data for `map`. + * + * @private + * @param {Object} map The map to query. + * @param {string} key The reference key. + * @returns {*} Returns the map data. + */ + function getMapData(map, key) { + var data = map.__data__; + return isKeyable(key) + ? data[typeof key == 'string' ? 'string' : 'hash'] + : data.map; + } + + /** + * Gets the property names, values, and compare flags of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the match data of `object`. + */ + function getMatchData(object) { + var result = keys(object), + length = result.length; + + while (length--) { + var key = result[length], + value = object[key]; + + result[length] = [key, value, isStrictComparable(value)]; + } + return result; + } + + /** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ + function getNative(object, key) { + var value = getValue(object, key); + return baseIsNative(value) ? value : undefined; + } + + /** + * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the raw `toStringTag`. + */ + function getRawTag(value) { + var isOwn = hasOwnProperty.call(value, symToStringTag), + tag = value[symToStringTag]; + + try { + value[symToStringTag] = undefined; + var unmasked = true; + } catch (e) {} + + var result = nativeObjectToString.call(value); + if (unmasked) { + if (isOwn) { + value[symToStringTag] = tag; + } else { + delete value[symToStringTag]; + } + } + return result; + } + + /** + * Creates an array of the own enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ + var getSymbols = !nativeGetSymbols ? stubArray : function(object) { + if (object == null) { + return []; + } + object = Object(object); + return arrayFilter(nativeGetSymbols(object), function(symbol) { + return propertyIsEnumerable.call(object, symbol); + }); + }; + + /** + * Creates an array of the own and inherited enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ + var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) { + var result = []; + while (object) { + arrayPush(result, getSymbols(object)); + object = getPrototype(object); + } + return result; + }; + + /** + * Gets the `toStringTag` of `value`. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ + var getTag = baseGetTag; + + // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. + if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) || + (Map && getTag(new Map) != mapTag) || + (Promise && getTag(Promise.resolve()) != promiseTag) || + (Set && getTag(new Set) != setTag) || + (WeakMap && getTag(new WeakMap) != weakMapTag)) { + getTag = function(value) { + var result = baseGetTag(value), + Ctor = result == objectTag ? value.constructor : undefined, + ctorString = Ctor ? toSource(Ctor) : ''; + + if (ctorString) { + switch (ctorString) { + case dataViewCtorString: return dataViewTag; + case mapCtorString: return mapTag; + case promiseCtorString: return promiseTag; + case setCtorString: return setTag; + case weakMapCtorString: return weakMapTag; + } + } + return result; + }; + } + + /** + * Gets the view, applying any `transforms` to the `start` and `end` positions. + * + * @private + * @param {number} start The start of the view. + * @param {number} end The end of the view. + * @param {Array} transforms The transformations to apply to the view. + * @returns {Object} Returns an object containing the `start` and `end` + * positions of the view. + */ + function getView(start, end, transforms) { + var index = -1, + length = transforms.length; + + while (++index < length) { + var data = transforms[index], + size = data.size; + + switch (data.type) { + case 'drop': start += size; break; + case 'dropRight': end -= size; break; + case 'take': end = nativeMin(end, start + size); break; + case 'takeRight': start = nativeMax(start, end - size); break; + } + } + return { 'start': start, 'end': end }; + } + + /** + * Extracts wrapper details from the `source` body comment. + * + * @private + * @param {string} source The source to inspect. + * @returns {Array} Returns the wrapper details. + */ + function getWrapDetails(source) { + var match = source.match(reWrapDetails); + return match ? match[1].split(reSplitDetails) : []; + } + + /** + * Checks if `path` exists on `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @param {Function} hasFunc The function to check properties. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + */ + function hasPath(object, path, hasFunc) { + path = castPath(path, object); + + var index = -1, + length = path.length, + result = false; + + while (++index < length) { + var key = toKey(path[index]); + if (!(result = object != null && hasFunc(object, key))) { + break; + } + object = object[key]; + } + if (result || ++index != length) { + return result; + } + length = object == null ? 0 : object.length; + return !!length && isLength(length) && isIndex(key, length) && + (isArray(object) || isArguments(object)); + } + + /** + * Initializes an array clone. + * + * @private + * @param {Array} array The array to clone. + * @returns {Array} Returns the initialized clone. + */ + function initCloneArray(array) { + var length = array.length, + result = new array.constructor(length); + + // Add properties assigned by `RegExp#exec`. + if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) { + result.index = array.index; + result.input = array.input; + } + return result; + } + + /** + * Initializes an object clone. + * + * @private + * @param {Object} object The object to clone. + * @returns {Object} Returns the initialized clone. + */ + function initCloneObject(object) { + return (typeof object.constructor == 'function' && !isPrototype(object)) + ? baseCreate(getPrototype(object)) + : {}; + } + + /** + * Initializes an object clone based on its `toStringTag`. + * + * **Note:** This function only supports cloning values with tags of + * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. + * + * @private + * @param {Object} object The object to clone. + * @param {string} tag The `toStringTag` of the object to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the initialized clone. + */ + function initCloneByTag(object, tag, isDeep) { + var Ctor = object.constructor; + switch (tag) { + case arrayBufferTag: + return cloneArrayBuffer(object); + + case boolTag: + case dateTag: + return new Ctor(+object); + + case dataViewTag: + return cloneDataView(object, isDeep); + + case float32Tag: case float64Tag: + case int8Tag: case int16Tag: case int32Tag: + case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: + return cloneTypedArray(object, isDeep); + + case mapTag: + return new Ctor; + + case numberTag: + case stringTag: + return new Ctor(object); + + case regexpTag: + return cloneRegExp(object); + + case setTag: + return new Ctor; + + case symbolTag: + return cloneSymbol(object); + } + } + + /** + * Inserts wrapper `details` in a comment at the top of the `source` body. + * + * @private + * @param {string} source The source to modify. + * @returns {Array} details The details to insert. + * @returns {string} Returns the modified source. + */ + function insertWrapDetails(source, details) { + var length = details.length; + if (!length) { + return source; + } + var lastIndex = length - 1; + details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex]; + details = details.join(length > 2 ? ', ' : ' '); + return source.replace(reWrapComment, '{\n/* [wrapped with ' + details + '] */\n'); + } + + /** + * Checks if `value` is a flattenable `arguments` object or array. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. + */ + function isFlattenable(value) { + return isArray(value) || isArguments(value) || + !!(spreadableSymbol && value && value[spreadableSymbol]); + } + + /** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ + function isIndex(value, length) { + var type = typeof value; + length = length == null ? MAX_SAFE_INTEGER : length; + + return !!length && + (type == 'number' || + (type != 'symbol' && reIsUint.test(value))) && + (value > -1 && value % 1 == 0 && value < length); + } + + /** + * Checks if the given arguments are from an iteratee call. + * + * @private + * @param {*} value The potential iteratee value argument. + * @param {*} index The potential iteratee index or key argument. + * @param {*} object The potential iteratee object argument. + * @returns {boolean} Returns `true` if the arguments are from an iteratee call, + * else `false`. + */ + function isIterateeCall(value, index, object) { + if (!isObject(object)) { + return false; + } + var type = typeof index; + if (type == 'number' + ? (isArrayLike(object) && isIndex(index, object.length)) + : (type == 'string' && index in object) + ) { + return eq(object[index], value); + } + return false; + } + + /** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ + function isKey(value, object) { + if (isArray(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || isSymbol(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); + } + + /** + * Checks if `value` is suitable for use as unique object key. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is suitable, else `false`. + */ + function isKeyable(value) { + var type = typeof value; + return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') + ? (value !== '__proto__') + : (value === null); + } + + /** + * Checks if `func` has a lazy counterpart. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` has a lazy counterpart, + * else `false`. + */ + function isLaziable(func) { + var funcName = getFuncName(func), + other = lodash[funcName]; + + if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) { + return false; + } + if (func === other) { + return true; + } + var data = getData(other); + return !!data && func === data[0]; + } + + /** + * Checks if `func` has its source masked. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. + */ + function isMasked(func) { + return !!maskSrcKey && (maskSrcKey in func); + } + + /** + * Checks if `func` is capable of being masked. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `func` is maskable, else `false`. + */ + var isMaskable = coreJsData ? isFunction : stubFalse; + + /** + * Checks if `value` is likely a prototype object. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. + */ + function isPrototype(value) { + var Ctor = value && value.constructor, + proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; + + return value === proto; + } + + /** + * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` if suitable for strict + * equality comparisons, else `false`. + */ + function isStrictComparable(value) { + return value === value && !isObject(value); + } + + /** + * A specialized version of `matchesProperty` for source values suitable + * for strict equality comparisons, i.e. `===`. + * + * @private + * @param {string} key The key of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ + function matchesStrictComparable(key, srcValue) { + return function(object) { + if (object == null) { + return false; + } + return object[key] === srcValue && + (srcValue !== undefined || (key in Object(object))); + }; + } + + /** + * A specialized version of `_.memoize` which clears the memoized function's + * cache when it exceeds `MAX_MEMOIZE_SIZE`. + * + * @private + * @param {Function} func The function to have its output memoized. + * @returns {Function} Returns the new memoized function. + */ + function memoizeCapped(func) { + var result = memoize(func, function(key) { + if (cache.size === MAX_MEMOIZE_SIZE) { + cache.clear(); + } + return key; + }); + + var cache = result.cache; + return result; + } + + /** + * Merges the function metadata of `source` into `data`. + * + * Merging metadata reduces the number of wrappers used to invoke a function. + * This is possible because methods like `_.bind`, `_.curry`, and `_.partial` + * may be applied regardless of execution order. Methods like `_.ary` and + * `_.rearg` modify function arguments, making the order in which they are + * executed important, preventing the merging of metadata. However, we make + * an exception for a safe combined case where curried functions have `_.ary` + * and or `_.rearg` applied. + * + * @private + * @param {Array} data The destination metadata. + * @param {Array} source The source metadata. + * @returns {Array} Returns `data`. + */ + function mergeData(data, source) { + var bitmask = data[1], + srcBitmask = source[1], + newBitmask = bitmask | srcBitmask, + isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG); + + var isCombo = + ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) || + ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) || + ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG)); + + // Exit early if metadata can't be merged. + if (!(isCommon || isCombo)) { + return data; + } + // Use source `thisArg` if available. + if (srcBitmask & WRAP_BIND_FLAG) { + data[2] = source[2]; + // Set when currying a bound function. + newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG; + } + // Compose partial arguments. + var value = source[3]; + if (value) { + var partials = data[3]; + data[3] = partials ? composeArgs(partials, value, source[4]) : value; + data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4]; + } + // Compose partial right arguments. + value = source[5]; + if (value) { + partials = data[5]; + data[5] = partials ? composeArgsRight(partials, value, source[6]) : value; + data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6]; + } + // Use source `argPos` if available. + value = source[7]; + if (value) { + data[7] = value; + } + // Use source `ary` if it's smaller. + if (srcBitmask & WRAP_ARY_FLAG) { + data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]); + } + // Use source `arity` if one is not provided. + if (data[9] == null) { + data[9] = source[9]; + } + // Use source `func` and merge bitmasks. + data[0] = source[0]; + data[1] = newBitmask; + + return data; + } + + /** + * This function is like + * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * except that it includes inherited enumerable properties. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function nativeKeysIn(object) { + var result = []; + if (object != null) { + for (var key in Object(object)) { + result.push(key); + } + } + return result; + } + + /** + * Converts `value` to a string using `Object.prototype.toString`. + * + * @private + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + */ + function objectToString(value) { + return nativeObjectToString.call(value); + } + + /** + * A specialized version of `baseRest` which transforms the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @param {Function} transform The rest array transform. + * @returns {Function} Returns the new function. + */ + function overRest(func, start, transform) { + start = nativeMax(start === undefined ? (func.length - 1) : start, 0); + return function() { + var args = arguments, + index = -1, + length = nativeMax(args.length - start, 0), + array = Array(length); + + while (++index < length) { + array[index] = args[start + index]; + } + index = -1; + var otherArgs = Array(start + 1); + while (++index < start) { + otherArgs[index] = args[index]; + } + otherArgs[start] = transform(array); + return apply(func, this, otherArgs); + }; + } + + /** + * Gets the parent value at `path` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} path The path to get the parent value of. + * @returns {*} Returns the parent value. + */ + function parent(object, path) { + return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1)); + } + + /** + * Reorder `array` according to the specified indexes where the element at + * the first index is assigned as the first element, the element at + * the second index is assigned as the second element, and so on. + * + * @private + * @param {Array} array The array to reorder. + * @param {Array} indexes The arranged array indexes. + * @returns {Array} Returns `array`. + */ + function reorder(array, indexes) { + var arrLength = array.length, + length = nativeMin(indexes.length, arrLength), + oldArray = copyArray(array); + + while (length--) { + var index = indexes[length]; + array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined; + } + return array; + } + + /** + * Gets the value at `key`, unless `key` is "__proto__" or "constructor". + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ + function safeGet(object, key) { + if (key === 'constructor' && typeof object[key] === 'function') { + return; + } + + if (key == '__proto__') { + return; + } + + return object[key]; + } + + /** + * Sets metadata for `func`. + * + * **Note:** If this function becomes hot, i.e. is invoked a lot in a short + * period of time, it will trip its breaker and transition to an identity + * function to avoid garbage collection pauses in V8. See + * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070) + * for more details. + * + * @private + * @param {Function} func The function to associate metadata with. + * @param {*} data The metadata. + * @returns {Function} Returns `func`. + */ + var setData = shortOut(baseSetData); + + /** + * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout). + * + * @private + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @returns {number|Object} Returns the timer id or timeout object. + */ + var setTimeout = ctxSetTimeout || function(func, wait) { + return root.setTimeout(func, wait); + }; + + /** + * Sets the `toString` method of `func` to return `string`. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ + var setToString = shortOut(baseSetToString); + + /** + * Sets the `toString` method of `wrapper` to mimic the source of `reference` + * with wrapper details in a comment at the top of the source body. + * + * @private + * @param {Function} wrapper The function to modify. + * @param {Function} reference The reference function. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @returns {Function} Returns `wrapper`. + */ + function setWrapToString(wrapper, reference, bitmask) { + var source = (reference + ''); + return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask))); + } + + /** + * Creates a function that'll short out and invoke `identity` instead + * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` + * milliseconds. + * + * @private + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new shortable function. + */ + function shortOut(func) { + var count = 0, + lastCalled = 0; + + return function() { + var stamp = nativeNow(), + remaining = HOT_SPAN - (stamp - lastCalled); + + lastCalled = stamp; + if (remaining > 0) { + if (++count >= HOT_COUNT) { + return arguments[0]; + } + } else { + count = 0; + } + return func.apply(undefined, arguments); + }; + } + + /** + * A specialized version of `_.shuffle` which mutates and sets the size of `array`. + * + * @private + * @param {Array} array The array to shuffle. + * @param {number} [size=array.length] The size of `array`. + * @returns {Array} Returns `array`. + */ + function shuffleSelf(array, size) { + var index = -1, + length = array.length, + lastIndex = length - 1; + + size = size === undefined ? length : size; + while (++index < size) { + var rand = baseRandom(index, lastIndex), + value = array[rand]; + + array[rand] = array[index]; + array[index] = value; + } + array.length = size; + return array; + } + + /** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ + var stringToPath = memoizeCapped(function(string) { + var result = []; + if (string.charCodeAt(0) === 46 /* . */) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, subString) { + result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; + }); + + /** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ + function toKey(value) { + if (typeof value == 'string' || isSymbol(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; + } + + /** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to convert. + * @returns {string} Returns the source code. + */ + function toSource(func) { + if (func != null) { + try { + return funcToString.call(func); + } catch (e) {} + try { + return (func + ''); + } catch (e) {} + } + return ''; + } + + /** + * Updates wrapper `details` based on `bitmask` flags. + * + * @private + * @returns {Array} details The details to modify. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @returns {Array} Returns `details`. + */ + function updateWrapDetails(details, bitmask) { + arrayEach(wrapFlags, function(pair) { + var value = '_.' + pair[0]; + if ((bitmask & pair[1]) && !arrayIncludes(details, value)) { + details.push(value); + } + }); + return details.sort(); + } + + /** + * Creates a clone of `wrapper`. + * + * @private + * @param {Object} wrapper The wrapper to clone. + * @returns {Object} Returns the cloned wrapper. + */ + function wrapperClone(wrapper) { + if (wrapper instanceof LazyWrapper) { + return wrapper.clone(); + } + var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__); + result.__actions__ = copyArray(wrapper.__actions__); + result.__index__ = wrapper.__index__; + result.__values__ = wrapper.__values__; + return result; + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates an array of elements split into groups the length of `size`. + * If `array` can't be split evenly, the final chunk will be the remaining + * elements. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to process. + * @param {number} [size=1] The length of each chunk + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the new array of chunks. + * @example + * + * _.chunk(['a', 'b', 'c', 'd'], 2); + * // => [['a', 'b'], ['c', 'd']] + * + * _.chunk(['a', 'b', 'c', 'd'], 3); + * // => [['a', 'b', 'c'], ['d']] + */ + function chunk(array, size, guard) { + if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) { + size = 1; + } else { + size = nativeMax(toInteger(size), 0); + } + var length = array == null ? 0 : array.length; + if (!length || size < 1) { + return []; + } + var index = 0, + resIndex = 0, + result = Array(nativeCeil(length / size)); + + while (index < length) { + result[resIndex++] = baseSlice(array, index, (index += size)); + } + return result; + } + + /** + * Creates an array with all falsey values removed. The values `false`, `null`, + * `0`, `""`, `undefined`, and `NaN` are falsey. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to compact. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.compact([0, 1, false, 2, '', 3]); + * // => [1, 2, 3] + */ + function compact(array) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (value) { + result[resIndex++] = value; + } + } + return result; + } + + /** + * Creates a new array concatenating `array` with any additional arrays + * and/or values. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to concatenate. + * @param {...*} [values] The values to concatenate. + * @returns {Array} Returns the new concatenated array. + * @example + * + * var array = [1]; + * var other = _.concat(array, 2, [3], [[4]]); + * + * console.log(other); + * // => [1, 2, 3, [4]] + * + * console.log(array); + * // => [1] + */ + function concat() { + var length = arguments.length; + if (!length) { + return []; + } + var args = Array(length - 1), + array = arguments[0], + index = length; + + while (index--) { + args[index - 1] = arguments[index]; + } + return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1)); + } + + /** + * Creates an array of `array` values not included in the other given arrays + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. The order and references of result values are + * determined by the first array. + * + * **Note:** Unlike `_.pullAll`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @returns {Array} Returns the new array of filtered values. + * @see _.without, _.xor + * @example + * + * _.difference([2, 1], [2, 3]); + * // => [1] + */ + var difference = baseRest(function(array, values) { + return isArrayLikeObject(array) + ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true)) + : []; + }); + + /** + * This method is like `_.difference` except that it accepts `iteratee` which + * is invoked for each element of `array` and `values` to generate the criterion + * by which they're compared. The order and references of result values are + * determined by the first array. The iteratee is invoked with one argument: + * (value). + * + * **Note:** Unlike `_.pullAllBy`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor); + * // => [1.2] + * + * // The `_.property` iteratee shorthand. + * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x'); + * // => [{ 'x': 2 }] + */ + var differenceBy = baseRest(function(array, values) { + var iteratee = last(values); + if (isArrayLikeObject(iteratee)) { + iteratee = undefined; + } + return isArrayLikeObject(array) + ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2)) + : []; + }); + + /** + * This method is like `_.difference` except that it accepts `comparator` + * which is invoked to compare elements of `array` to `values`. The order and + * references of result values are determined by the first array. The comparator + * is invoked with two arguments: (arrVal, othVal). + * + * **Note:** Unlike `_.pullAllWith`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * + * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual); + * // => [{ 'x': 2, 'y': 1 }] + */ + var differenceWith = baseRest(function(array, values) { + var comparator = last(values); + if (isArrayLikeObject(comparator)) { + comparator = undefined; + } + return isArrayLikeObject(array) + ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator) + : []; + }); + + /** + * Creates a slice of `array` with `n` elements dropped from the beginning. + * + * @static + * @memberOf _ + * @since 0.5.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to drop. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.drop([1, 2, 3]); + * // => [2, 3] + * + * _.drop([1, 2, 3], 2); + * // => [3] + * + * _.drop([1, 2, 3], 5); + * // => [] + * + * _.drop([1, 2, 3], 0); + * // => [1, 2, 3] + */ + function drop(array, n, guard) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + return baseSlice(array, n < 0 ? 0 : n, length); + } + + /** + * Creates a slice of `array` with `n` elements dropped from the end. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to drop. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.dropRight([1, 2, 3]); + * // => [1, 2] + * + * _.dropRight([1, 2, 3], 2); + * // => [1] + * + * _.dropRight([1, 2, 3], 5); + * // => [] + * + * _.dropRight([1, 2, 3], 0); + * // => [1, 2, 3] + */ + function dropRight(array, n, guard) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + n = length - n; + return baseSlice(array, 0, n < 0 ? 0 : n); + } + + /** + * Creates a slice of `array` excluding elements dropped from the end. + * Elements are dropped until `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * _.dropRightWhile(users, function(o) { return !o.active; }); + * // => objects for ['barney'] + * + * // The `_.matches` iteratee shorthand. + * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false }); + * // => objects for ['barney', 'fred'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.dropRightWhile(users, ['active', false]); + * // => objects for ['barney'] + * + * // The `_.property` iteratee shorthand. + * _.dropRightWhile(users, 'active'); + * // => objects for ['barney', 'fred', 'pebbles'] + */ + function dropRightWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, getIteratee(predicate, 3), true, true) + : []; + } + + /** + * Creates a slice of `array` excluding elements dropped from the beginning. + * Elements are dropped until `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.dropWhile(users, function(o) { return !o.active; }); + * // => objects for ['pebbles'] + * + * // The `_.matches` iteratee shorthand. + * _.dropWhile(users, { 'user': 'barney', 'active': false }); + * // => objects for ['fred', 'pebbles'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.dropWhile(users, ['active', false]); + * // => objects for ['pebbles'] + * + * // The `_.property` iteratee shorthand. + * _.dropWhile(users, 'active'); + * // => objects for ['barney', 'fred', 'pebbles'] + */ + function dropWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, getIteratee(predicate, 3), true) + : []; + } + + /** + * Fills elements of `array` with `value` from `start` up to, but not + * including, `end`. + * + * **Note:** This method mutates `array`. + * + * @static + * @memberOf _ + * @since 3.2.0 + * @category Array + * @param {Array} array The array to fill. + * @param {*} value The value to fill `array` with. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns `array`. + * @example + * + * var array = [1, 2, 3]; + * + * _.fill(array, 'a'); + * console.log(array); + * // => ['a', 'a', 'a'] + * + * _.fill(Array(3), 2); + * // => [2, 2, 2] + * + * _.fill([4, 6, 8, 10], '*', 1, 3); + * // => [4, '*', '*', 10] + */ + function fill(array, value, start, end) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + if (start && typeof start != 'number' && isIterateeCall(array, value, start)) { + start = 0; + end = length; + } + return baseFill(array, value, start, end); + } + + /** + * This method is like `_.find` except that it returns the index of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.findIndex(users, function(o) { return o.user == 'barney'; }); + * // => 0 + * + * // The `_.matches` iteratee shorthand. + * _.findIndex(users, { 'user': 'fred', 'active': false }); + * // => 1 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findIndex(users, ['active', false]); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.findIndex(users, 'active'); + * // => 2 + */ + function findIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return baseFindIndex(array, getIteratee(predicate, 3), index); + } + + /** + * This method is like `_.findIndex` except that it iterates over elements + * of `collection` from right to left. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=array.length-1] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; }); + * // => 2 + * + * // The `_.matches` iteratee shorthand. + * _.findLastIndex(users, { 'user': 'barney', 'active': true }); + * // => 0 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findLastIndex(users, ['active', false]); + * // => 2 + * + * // The `_.property` iteratee shorthand. + * _.findLastIndex(users, 'active'); + * // => 0 + */ + function findLastIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = length - 1; + if (fromIndex !== undefined) { + index = toInteger(fromIndex); + index = fromIndex < 0 + ? nativeMax(length + index, 0) + : nativeMin(index, length - 1); + } + return baseFindIndex(array, getIteratee(predicate, 3), index, true); + } + + /** + * Flattens `array` a single level deep. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, [3, [4]], 5]]); + * // => [1, 2, [3, [4]], 5] + */ + function flatten(array) { + var length = array == null ? 0 : array.length; + return length ? baseFlatten(array, 1) : []; + } + + /** + * Recursively flattens `array`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flattenDeep([1, [2, [3, [4]], 5]]); + * // => [1, 2, 3, 4, 5] + */ + function flattenDeep(array) { + var length = array == null ? 0 : array.length; + return length ? baseFlatten(array, INFINITY) : []; + } + + /** + * Recursively flatten `array` up to `depth` times. + * + * @static + * @memberOf _ + * @since 4.4.0 + * @category Array + * @param {Array} array The array to flatten. + * @param {number} [depth=1] The maximum recursion depth. + * @returns {Array} Returns the new flattened array. + * @example + * + * var array = [1, [2, [3, [4]], 5]]; + * + * _.flattenDepth(array, 1); + * // => [1, 2, [3, [4]], 5] + * + * _.flattenDepth(array, 2); + * // => [1, 2, 3, [4], 5] + */ + function flattenDepth(array, depth) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + depth = depth === undefined ? 1 : toInteger(depth); + return baseFlatten(array, depth); + } + + /** + * The inverse of `_.toPairs`; this method returns an object composed + * from key-value `pairs`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} pairs The key-value pairs. + * @returns {Object} Returns the new object. + * @example + * + * _.fromPairs([['a', 1], ['b', 2]]); + * // => { 'a': 1, 'b': 2 } + */ + function fromPairs(pairs) { + var index = -1, + length = pairs == null ? 0 : pairs.length, + result = {}; + + while (++index < length) { + var pair = pairs[index]; + result[pair[0]] = pair[1]; + } + return result; + } + + /** + * Gets the first element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias first + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the first element of `array`. + * @example + * + * _.head([1, 2, 3]); + * // => 1 + * + * _.head([]); + * // => undefined + */ + function head(array) { + return (array && array.length) ? array[0] : undefined; + } + + /** + * Gets the index at which the first occurrence of `value` is found in `array` + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. If `fromIndex` is negative, it's used as the + * offset from the end of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.indexOf([1, 2, 1, 2], 2); + * // => 1 + * + * // Search from the `fromIndex`. + * _.indexOf([1, 2, 1, 2], 2, 2); + * // => 3 + */ + function indexOf(array, value, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return baseIndexOf(array, value, index); + } + + /** + * Gets all but the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.initial([1, 2, 3]); + * // => [1, 2] + */ + function initial(array) { + var length = array == null ? 0 : array.length; + return length ? baseSlice(array, 0, -1) : []; + } + + /** + * Creates an array of unique values that are included in all given arrays + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. The order and references of result values are + * determined by the first array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * _.intersection([2, 1], [2, 3]); + * // => [2] + */ + var intersection = baseRest(function(arrays) { + var mapped = arrayMap(arrays, castArrayLikeObject); + return (mapped.length && mapped[0] === arrays[0]) + ? baseIntersection(mapped) + : []; + }); + + /** + * This method is like `_.intersection` except that it accepts `iteratee` + * which is invoked for each element of each `arrays` to generate the criterion + * by which they're compared. The order and references of result values are + * determined by the first array. The iteratee is invoked with one argument: + * (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor); + * // => [2.1] + * + * // The `_.property` iteratee shorthand. + * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }] + */ + var intersectionBy = baseRest(function(arrays) { + var iteratee = last(arrays), + mapped = arrayMap(arrays, castArrayLikeObject); + + if (iteratee === last(mapped)) { + iteratee = undefined; + } else { + mapped.pop(); + } + return (mapped.length && mapped[0] === arrays[0]) + ? baseIntersection(mapped, getIteratee(iteratee, 2)) + : []; + }); + + /** + * This method is like `_.intersection` except that it accepts `comparator` + * which is invoked to compare elements of `arrays`. The order and references + * of result values are determined by the first array. The comparator is + * invoked with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.intersectionWith(objects, others, _.isEqual); + * // => [{ 'x': 1, 'y': 2 }] + */ + var intersectionWith = baseRest(function(arrays) { + var comparator = last(arrays), + mapped = arrayMap(arrays, castArrayLikeObject); + + comparator = typeof comparator == 'function' ? comparator : undefined; + if (comparator) { + mapped.pop(); + } + return (mapped.length && mapped[0] === arrays[0]) + ? baseIntersection(mapped, undefined, comparator) + : []; + }); + + /** + * Converts all elements in `array` into a string separated by `separator`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to convert. + * @param {string} [separator=','] The element separator. + * @returns {string} Returns the joined string. + * @example + * + * _.join(['a', 'b', 'c'], '~'); + * // => 'a~b~c' + */ + function join(array, separator) { + return array == null ? '' : nativeJoin.call(array, separator); + } + + /** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ + function last(array) { + var length = array == null ? 0 : array.length; + return length ? array[length - 1] : undefined; + } + + /** + * This method is like `_.indexOf` except that it iterates over elements of + * `array` from right to left. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} [fromIndex=array.length-1] The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.lastIndexOf([1, 2, 1, 2], 2); + * // => 3 + * + * // Search from the `fromIndex`. + * _.lastIndexOf([1, 2, 1, 2], 2, 2); + * // => 1 + */ + function lastIndexOf(array, value, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = length; + if (fromIndex !== undefined) { + index = toInteger(fromIndex); + index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1); + } + return value === value + ? strictLastIndexOf(array, value, index) + : baseFindIndex(array, baseIsNaN, index, true); + } + + /** + * Gets the element at index `n` of `array`. If `n` is negative, the nth + * element from the end is returned. + * + * @static + * @memberOf _ + * @since 4.11.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=0] The index of the element to return. + * @returns {*} Returns the nth element of `array`. + * @example + * + * var array = ['a', 'b', 'c', 'd']; + * + * _.nth(array, 1); + * // => 'b' + * + * _.nth(array, -2); + * // => 'c'; + */ + function nth(array, n) { + return (array && array.length) ? baseNth(array, toInteger(n)) : undefined; + } + + /** + * Removes all given values from `array` using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove` + * to remove elements from an array by predicate. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {...*} [values] The values to remove. + * @returns {Array} Returns `array`. + * @example + * + * var array = ['a', 'b', 'c', 'a', 'b', 'c']; + * + * _.pull(array, 'a', 'c'); + * console.log(array); + * // => ['b', 'b'] + */ + var pull = baseRest(pullAll); + + /** + * This method is like `_.pull` except that it accepts an array of values to remove. + * + * **Note:** Unlike `_.difference`, this method mutates `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @returns {Array} Returns `array`. + * @example + * + * var array = ['a', 'b', 'c', 'a', 'b', 'c']; + * + * _.pullAll(array, ['a', 'c']); + * console.log(array); + * // => ['b', 'b'] + */ + function pullAll(array, values) { + return (array && array.length && values && values.length) + ? basePullAll(array, values) + : array; + } + + /** + * This method is like `_.pullAll` except that it accepts `iteratee` which is + * invoked for each element of `array` and `values` to generate the criterion + * by which they're compared. The iteratee is invoked with one argument: (value). + * + * **Note:** Unlike `_.differenceBy`, this method mutates `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns `array`. + * @example + * + * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }]; + * + * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x'); + * console.log(array); + * // => [{ 'x': 2 }] + */ + function pullAllBy(array, values, iteratee) { + return (array && array.length && values && values.length) + ? basePullAll(array, values, getIteratee(iteratee, 2)) + : array; + } + + /** + * This method is like `_.pullAll` except that it accepts `comparator` which + * is invoked to compare elements of `array` to `values`. The comparator is + * invoked with two arguments: (arrVal, othVal). + * + * **Note:** Unlike `_.differenceWith`, this method mutates `array`. + * + * @static + * @memberOf _ + * @since 4.6.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns `array`. + * @example + * + * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }]; + * + * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual); + * console.log(array); + * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }] + */ + function pullAllWith(array, values, comparator) { + return (array && array.length && values && values.length) + ? basePullAll(array, values, undefined, comparator) + : array; + } + + /** + * Removes elements from `array` corresponding to `indexes` and returns an + * array of removed elements. + * + * **Note:** Unlike `_.at`, this method mutates `array`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {...(number|number[])} [indexes] The indexes of elements to remove. + * @returns {Array} Returns the new array of removed elements. + * @example + * + * var array = ['a', 'b', 'c', 'd']; + * var pulled = _.pullAt(array, [1, 3]); + * + * console.log(array); + * // => ['a', 'c'] + * + * console.log(pulled); + * // => ['b', 'd'] + */ + var pullAt = flatRest(function(array, indexes) { + var length = array == null ? 0 : array.length, + result = baseAt(array, indexes); + + basePullAt(array, arrayMap(indexes, function(index) { + return isIndex(index, length) ? +index : index; + }).sort(compareAscending)); + + return result; + }); + + /** + * Removes all elements from `array` that `predicate` returns truthy for + * and returns an array of the removed elements. The predicate is invoked + * with three arguments: (value, index, array). + * + * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull` + * to pull elements from an array by value. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new array of removed elements. + * @example + * + * var array = [1, 2, 3, 4]; + * var evens = _.remove(array, function(n) { + * return n % 2 == 0; + * }); + * + * console.log(array); + * // => [1, 3] + * + * console.log(evens); + * // => [2, 4] + */ + function remove(array, predicate) { + var result = []; + if (!(array && array.length)) { + return result; + } + var index = -1, + indexes = [], + length = array.length; + + predicate = getIteratee(predicate, 3); + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result.push(value); + indexes.push(index); + } + } + basePullAt(array, indexes); + return result; + } + + /** + * Reverses `array` so that the first element becomes the last, the second + * element becomes the second to last, and so on. + * + * **Note:** This method mutates `array` and is based on + * [`Array#reverse`](https://mdn.io/Array/reverse). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to modify. + * @returns {Array} Returns `array`. + * @example + * + * var array = [1, 2, 3]; + * + * _.reverse(array); + * // => [3, 2, 1] + * + * console.log(array); + * // => [3, 2, 1] + */ + function reverse(array) { + return array == null ? array : nativeReverse.call(array); + } + + /** + * Creates a slice of `array` from `start` up to, but not including, `end`. + * + * **Note:** This method is used instead of + * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are + * returned. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ + function slice(array, start, end) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + if (end && typeof end != 'number' && isIterateeCall(array, start, end)) { + start = 0; + end = length; + } + else { + start = start == null ? 0 : toInteger(start); + end = end === undefined ? length : toInteger(end); + } + return baseSlice(array, start, end); + } + + /** + * Uses a binary search to determine the lowest index at which `value` + * should be inserted into `array` in order to maintain its sort order. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * _.sortedIndex([30, 50], 40); + * // => 1 + */ + function sortedIndex(array, value) { + return baseSortedIndex(array, value); + } + + /** + * This method is like `_.sortedIndex` except that it accepts `iteratee` + * which is invoked for `value` and each element of `array` to compute their + * sort ranking. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * var objects = [{ 'x': 4 }, { 'x': 5 }]; + * + * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.sortedIndexBy(objects, { 'x': 4 }, 'x'); + * // => 0 + */ + function sortedIndexBy(array, value, iteratee) { + return baseSortedIndexBy(array, value, getIteratee(iteratee, 2)); + } + + /** + * This method is like `_.indexOf` except that it performs a binary + * search on a sorted `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.sortedIndexOf([4, 5, 5, 5, 6], 5); + * // => 1 + */ + function sortedIndexOf(array, value) { + var length = array == null ? 0 : array.length; + if (length) { + var index = baseSortedIndex(array, value); + if (index < length && eq(array[index], value)) { + return index; + } + } + return -1; + } + + /** + * This method is like `_.sortedIndex` except that it returns the highest + * index at which `value` should be inserted into `array` in order to + * maintain its sort order. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * _.sortedLastIndex([4, 5, 5, 5, 6], 5); + * // => 4 + */ + function sortedLastIndex(array, value) { + return baseSortedIndex(array, value, true); + } + + /** + * This method is like `_.sortedLastIndex` except that it accepts `iteratee` + * which is invoked for `value` and each element of `array` to compute their + * sort ranking. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * var objects = [{ 'x': 4 }, { 'x': 5 }]; + * + * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); + * // => 1 + * + * // The `_.property` iteratee shorthand. + * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x'); + * // => 1 + */ + function sortedLastIndexBy(array, value, iteratee) { + return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true); + } + + /** + * This method is like `_.lastIndexOf` except that it performs a binary + * search on a sorted `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5); + * // => 3 + */ + function sortedLastIndexOf(array, value) { + var length = array == null ? 0 : array.length; + if (length) { + var index = baseSortedIndex(array, value, true) - 1; + if (eq(array[index], value)) { + return index; + } + } + return -1; + } + + /** + * This method is like `_.uniq` except that it's designed and optimized + * for sorted arrays. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.sortedUniq([1, 1, 2]); + * // => [1, 2] + */ + function sortedUniq(array) { + return (array && array.length) + ? baseSortedUniq(array) + : []; + } + + /** + * This method is like `_.uniqBy` except that it's designed and optimized + * for sorted arrays. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor); + * // => [1.1, 2.3] + */ + function sortedUniqBy(array, iteratee) { + return (array && array.length) + ? baseSortedUniq(array, getIteratee(iteratee, 2)) + : []; + } + + /** + * Gets all but the first element of `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to query. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.tail([1, 2, 3]); + * // => [2, 3] + */ + function tail(array) { + var length = array == null ? 0 : array.length; + return length ? baseSlice(array, 1, length) : []; + } + + /** + * Creates a slice of `array` with `n` elements taken from the beginning. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to take. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.take([1, 2, 3]); + * // => [1] + * + * _.take([1, 2, 3], 2); + * // => [1, 2] + * + * _.take([1, 2, 3], 5); + * // => [1, 2, 3] + * + * _.take([1, 2, 3], 0); + * // => [] + */ + function take(array, n, guard) { + if (!(array && array.length)) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + return baseSlice(array, 0, n < 0 ? 0 : n); + } + + /** + * Creates a slice of `array` with `n` elements taken from the end. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to take. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.takeRight([1, 2, 3]); + * // => [3] + * + * _.takeRight([1, 2, 3], 2); + * // => [2, 3] + * + * _.takeRight([1, 2, 3], 5); + * // => [1, 2, 3] + * + * _.takeRight([1, 2, 3], 0); + * // => [] + */ + function takeRight(array, n, guard) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + n = length - n; + return baseSlice(array, n < 0 ? 0 : n, length); + } + + /** + * Creates a slice of `array` with elements taken from the end. Elements are + * taken until `predicate` returns falsey. The predicate is invoked with + * three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * _.takeRightWhile(users, function(o) { return !o.active; }); + * // => objects for ['fred', 'pebbles'] + * + * // The `_.matches` iteratee shorthand. + * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false }); + * // => objects for ['pebbles'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.takeRightWhile(users, ['active', false]); + * // => objects for ['fred', 'pebbles'] + * + * // The `_.property` iteratee shorthand. + * _.takeRightWhile(users, 'active'); + * // => [] + */ + function takeRightWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, getIteratee(predicate, 3), false, true) + : []; + } + + /** + * Creates a slice of `array` with elements taken from the beginning. Elements + * are taken until `predicate` returns falsey. The predicate is invoked with + * three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.takeWhile(users, function(o) { return !o.active; }); + * // => objects for ['barney', 'fred'] + * + * // The `_.matches` iteratee shorthand. + * _.takeWhile(users, { 'user': 'barney', 'active': false }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.takeWhile(users, ['active', false]); + * // => objects for ['barney', 'fred'] + * + * // The `_.property` iteratee shorthand. + * _.takeWhile(users, 'active'); + * // => [] + */ + function takeWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, getIteratee(predicate, 3)) + : []; + } + + /** + * Creates an array of unique values, in order, from all given arrays using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.union([2], [1, 2]); + * // => [2, 1] + */ + var union = baseRest(function(arrays) { + return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true)); + }); + + /** + * This method is like `_.union` except that it accepts `iteratee` which is + * invoked for each element of each `arrays` to generate the criterion by + * which uniqueness is computed. Result values are chosen from the first + * array in which the value occurs. The iteratee is invoked with one argument: + * (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.unionBy([2.1], [1.2, 2.3], Math.floor); + * // => [2.1, 1.2] + * + * // The `_.property` iteratee shorthand. + * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }, { 'x': 2 }] + */ + var unionBy = baseRest(function(arrays) { + var iteratee = last(arrays); + if (isArrayLikeObject(iteratee)) { + iteratee = undefined; + } + return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2)); + }); + + /** + * This method is like `_.union` except that it accepts `comparator` which + * is invoked to compare elements of `arrays`. Result values are chosen from + * the first array in which the value occurs. The comparator is invoked + * with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of combined values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.unionWith(objects, others, _.isEqual); + * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] + */ + var unionWith = baseRest(function(arrays) { + var comparator = last(arrays); + comparator = typeof comparator == 'function' ? comparator : undefined; + return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator); + }); + + /** + * Creates a duplicate-free version of an array, using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons, in which only the first occurrence of each element + * is kept. The order of result values is determined by the order they occur + * in the array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.uniq([2, 1, 2]); + * // => [2, 1] + */ + function uniq(array) { + return (array && array.length) ? baseUniq(array) : []; + } + + /** + * This method is like `_.uniq` except that it accepts `iteratee` which is + * invoked for each element in `array` to generate the criterion by which + * uniqueness is computed. The order of result values is determined by the + * order they occur in the array. The iteratee is invoked with one argument: + * (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.uniqBy([2.1, 1.2, 2.3], Math.floor); + * // => [2.1, 1.2] + * + * // The `_.property` iteratee shorthand. + * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }, { 'x': 2 }] + */ + function uniqBy(array, iteratee) { + return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : []; + } + + /** + * This method is like `_.uniq` except that it accepts `comparator` which + * is invoked to compare elements of `array`. The order of result values is + * determined by the order they occur in the array.The comparator is invoked + * with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.uniqWith(objects, _.isEqual); + * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }] + */ + function uniqWith(array, comparator) { + comparator = typeof comparator == 'function' ? comparator : undefined; + return (array && array.length) ? baseUniq(array, undefined, comparator) : []; + } + + /** + * This method is like `_.zip` except that it accepts an array of grouped + * elements and creates an array regrouping the elements to their pre-zip + * configuration. + * + * @static + * @memberOf _ + * @since 1.2.0 + * @category Array + * @param {Array} array The array of grouped elements to process. + * @returns {Array} Returns the new array of regrouped elements. + * @example + * + * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]); + * // => [['a', 1, true], ['b', 2, false]] + * + * _.unzip(zipped); + * // => [['a', 'b'], [1, 2], [true, false]] + */ + function unzip(array) { + if (!(array && array.length)) { + return []; + } + var length = 0; + array = arrayFilter(array, function(group) { + if (isArrayLikeObject(group)) { + length = nativeMax(group.length, length); + return true; + } + }); + return baseTimes(length, function(index) { + return arrayMap(array, baseProperty(index)); + }); + } + + /** + * This method is like `_.unzip` except that it accepts `iteratee` to specify + * how regrouped values should be combined. The iteratee is invoked with the + * elements of each group: (...group). + * + * @static + * @memberOf _ + * @since 3.8.0 + * @category Array + * @param {Array} array The array of grouped elements to process. + * @param {Function} [iteratee=_.identity] The function to combine + * regrouped values. + * @returns {Array} Returns the new array of regrouped elements. + * @example + * + * var zipped = _.zip([1, 2], [10, 20], [100, 200]); + * // => [[1, 10, 100], [2, 20, 200]] + * + * _.unzipWith(zipped, _.add); + * // => [3, 30, 300] + */ + function unzipWith(array, iteratee) { + if (!(array && array.length)) { + return []; + } + var result = unzip(array); + if (iteratee == null) { + return result; + } + return arrayMap(result, function(group) { + return apply(iteratee, undefined, group); + }); + } + + /** + * Creates an array excluding all given values using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * **Note:** Unlike `_.pull`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...*} [values] The values to exclude. + * @returns {Array} Returns the new array of filtered values. + * @see _.difference, _.xor + * @example + * + * _.without([2, 1, 2, 3], 1, 2); + * // => [3] + */ + var without = baseRest(function(array, values) { + return isArrayLikeObject(array) + ? baseDifference(array, values) + : []; + }); + + /** + * Creates an array of unique values that is the + * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference) + * of the given arrays. The order of result values is determined by the order + * they occur in the arrays. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of filtered values. + * @see _.difference, _.without + * @example + * + * _.xor([2, 1], [2, 3]); + * // => [1, 3] + */ + var xor = baseRest(function(arrays) { + return baseXor(arrayFilter(arrays, isArrayLikeObject)); + }); + + /** + * This method is like `_.xor` except that it accepts `iteratee` which is + * invoked for each element of each `arrays` to generate the criterion by + * which by which they're compared. The order of result values is determined + * by the order they occur in the arrays. The iteratee is invoked with one + * argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor); + * // => [1.2, 3.4] + * + * // The `_.property` iteratee shorthand. + * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 2 }] + */ + var xorBy = baseRest(function(arrays) { + var iteratee = last(arrays); + if (isArrayLikeObject(iteratee)) { + iteratee = undefined; + } + return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2)); + }); + + /** + * This method is like `_.xor` except that it accepts `comparator` which is + * invoked to compare elements of `arrays`. The order of result values is + * determined by the order they occur in the arrays. The comparator is invoked + * with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.xorWith(objects, others, _.isEqual); + * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] + */ + var xorWith = baseRest(function(arrays) { + var comparator = last(arrays); + comparator = typeof comparator == 'function' ? comparator : undefined; + return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator); + }); + + /** + * Creates an array of grouped elements, the first of which contains the + * first elements of the given arrays, the second of which contains the + * second elements of the given arrays, and so on. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to process. + * @returns {Array} Returns the new array of grouped elements. + * @example + * + * _.zip(['a', 'b'], [1, 2], [true, false]); + * // => [['a', 1, true], ['b', 2, false]] + */ + var zip = baseRest(unzip); + + /** + * This method is like `_.fromPairs` except that it accepts two arrays, + * one of property identifiers and one of corresponding values. + * + * @static + * @memberOf _ + * @since 0.4.0 + * @category Array + * @param {Array} [props=[]] The property identifiers. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObject(['a', 'b'], [1, 2]); + * // => { 'a': 1, 'b': 2 } + */ + function zipObject(props, values) { + return baseZipObject(props || [], values || [], assignValue); + } + + /** + * This method is like `_.zipObject` except that it supports property paths. + * + * @static + * @memberOf _ + * @since 4.1.0 + * @category Array + * @param {Array} [props=[]] The property identifiers. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]); + * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } } + */ + function zipObjectDeep(props, values) { + return baseZipObject(props || [], values || [], baseSet); + } + + /** + * This method is like `_.zip` except that it accepts `iteratee` to specify + * how grouped values should be combined. The iteratee is invoked with the + * elements of each group: (...group). + * + * @static + * @memberOf _ + * @since 3.8.0 + * @category Array + * @param {...Array} [arrays] The arrays to process. + * @param {Function} [iteratee=_.identity] The function to combine + * grouped values. + * @returns {Array} Returns the new array of grouped elements. + * @example + * + * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) { + * return a + b + c; + * }); + * // => [111, 222] + */ + var zipWith = baseRest(function(arrays) { + var length = arrays.length, + iteratee = length > 1 ? arrays[length - 1] : undefined; + + iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined; + return unzipWith(arrays, iteratee); + }); + + /*------------------------------------------------------------------------*/ + + /** + * Creates a `lodash` wrapper instance that wraps `value` with explicit method + * chain sequences enabled. The result of such sequences must be unwrapped + * with `_#value`. + * + * @static + * @memberOf _ + * @since 1.3.0 + * @category Seq + * @param {*} value The value to wrap. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 }, + * { 'user': 'pebbles', 'age': 1 } + * ]; + * + * var youngest = _ + * .chain(users) + * .sortBy('age') + * .map(function(o) { + * return o.user + ' is ' + o.age; + * }) + * .head() + * .value(); + * // => 'pebbles is 1' + */ + function chain(value) { + var result = lodash(value); + result.__chain__ = true; + return result; + } + + /** + * This method invokes `interceptor` and returns `value`. The interceptor + * is invoked with one argument; (value). The purpose of this method is to + * "tap into" a method chain sequence in order to modify intermediate results. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Seq + * @param {*} value The value to provide to `interceptor`. + * @param {Function} interceptor The function to invoke. + * @returns {*} Returns `value`. + * @example + * + * _([1, 2, 3]) + * .tap(function(array) { + * // Mutate input array. + * array.pop(); + * }) + * .reverse() + * .value(); + * // => [2, 1] + */ + function tap(value, interceptor) { + interceptor(value); + return value; + } + + /** + * This method is like `_.tap` except that it returns the result of `interceptor`. + * The purpose of this method is to "pass thru" values replacing intermediate + * results in a method chain sequence. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Seq + * @param {*} value The value to provide to `interceptor`. + * @param {Function} interceptor The function to invoke. + * @returns {*} Returns the result of `interceptor`. + * @example + * + * _(' abc ') + * .chain() + * .trim() + * .thru(function(value) { + * return [value]; + * }) + * .value(); + * // => ['abc'] + */ + function thru(value, interceptor) { + return interceptor(value); + } + + /** + * This method is the wrapper version of `_.at`. + * + * @name at + * @memberOf _ + * @since 1.0.0 + * @category Seq + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; + * + * _(object).at(['a[0].b.c', 'a[1]']).value(); + * // => [3, 4] + */ + var wrapperAt = flatRest(function(paths) { + var length = paths.length, + start = length ? paths[0] : 0, + value = this.__wrapped__, + interceptor = function(object) { return baseAt(object, paths); }; + + if (length > 1 || this.__actions__.length || + !(value instanceof LazyWrapper) || !isIndex(start)) { + return this.thru(interceptor); + } + value = value.slice(start, +start + (length ? 1 : 0)); + value.__actions__.push({ + 'func': thru, + 'args': [interceptor], + 'thisArg': undefined + }); + return new LodashWrapper(value, this.__chain__).thru(function(array) { + if (length && !array.length) { + array.push(undefined); + } + return array; + }); + }); + + /** + * Creates a `lodash` wrapper instance with explicit method chain sequences enabled. + * + * @name chain + * @memberOf _ + * @since 0.1.0 + * @category Seq + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 } + * ]; + * + * // A sequence without explicit chaining. + * _(users).head(); + * // => { 'user': 'barney', 'age': 36 } + * + * // A sequence with explicit chaining. + * _(users) + * .chain() + * .head() + * .pick('user') + * .value(); + * // => { 'user': 'barney' } + */ + function wrapperChain() { + return chain(this); + } + + /** + * Executes the chain sequence and returns the wrapped result. + * + * @name commit + * @memberOf _ + * @since 3.2.0 + * @category Seq + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var array = [1, 2]; + * var wrapped = _(array).push(3); + * + * console.log(array); + * // => [1, 2] + * + * wrapped = wrapped.commit(); + * console.log(array); + * // => [1, 2, 3] + * + * wrapped.last(); + * // => 3 + * + * console.log(array); + * // => [1, 2, 3] + */ + function wrapperCommit() { + return new LodashWrapper(this.value(), this.__chain__); + } + + /** + * Gets the next value on a wrapped object following the + * [iterator protocol](https://mdn.io/iteration_protocols#iterator). + * + * @name next + * @memberOf _ + * @since 4.0.0 + * @category Seq + * @returns {Object} Returns the next iterator value. + * @example + * + * var wrapped = _([1, 2]); + * + * wrapped.next(); + * // => { 'done': false, 'value': 1 } + * + * wrapped.next(); + * // => { 'done': false, 'value': 2 } + * + * wrapped.next(); + * // => { 'done': true, 'value': undefined } + */ + function wrapperNext() { + if (this.__values__ === undefined) { + this.__values__ = toArray(this.value()); + } + var done = this.__index__ >= this.__values__.length, + value = done ? undefined : this.__values__[this.__index__++]; + + return { 'done': done, 'value': value }; + } + + /** + * Enables the wrapper to be iterable. + * + * @name Symbol.iterator + * @memberOf _ + * @since 4.0.0 + * @category Seq + * @returns {Object} Returns the wrapper object. + * @example + * + * var wrapped = _([1, 2]); + * + * wrapped[Symbol.iterator]() === wrapped; + * // => true + * + * Array.from(wrapped); + * // => [1, 2] + */ + function wrapperToIterator() { + return this; + } + + /** + * Creates a clone of the chain sequence planting `value` as the wrapped value. + * + * @name plant + * @memberOf _ + * @since 3.2.0 + * @category Seq + * @param {*} value The value to plant. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * function square(n) { + * return n * n; + * } + * + * var wrapped = _([1, 2]).map(square); + * var other = wrapped.plant([3, 4]); + * + * other.value(); + * // => [9, 16] + * + * wrapped.value(); + * // => [1, 4] + */ + function wrapperPlant(value) { + var result, + parent = this; + + while (parent instanceof baseLodash) { + var clone = wrapperClone(parent); + clone.__index__ = 0; + clone.__values__ = undefined; + if (result) { + previous.__wrapped__ = clone; + } else { + result = clone; + } + var previous = clone; + parent = parent.__wrapped__; + } + previous.__wrapped__ = value; + return result; + } + + /** + * This method is the wrapper version of `_.reverse`. + * + * **Note:** This method mutates the wrapped array. + * + * @name reverse + * @memberOf _ + * @since 0.1.0 + * @category Seq + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var array = [1, 2, 3]; + * + * _(array).reverse().value() + * // => [3, 2, 1] + * + * console.log(array); + * // => [3, 2, 1] + */ + function wrapperReverse() { + var value = this.__wrapped__; + if (value instanceof LazyWrapper) { + var wrapped = value; + if (this.__actions__.length) { + wrapped = new LazyWrapper(this); + } + wrapped = wrapped.reverse(); + wrapped.__actions__.push({ + 'func': thru, + 'args': [reverse], + 'thisArg': undefined + }); + return new LodashWrapper(wrapped, this.__chain__); + } + return this.thru(reverse); + } + + /** + * Executes the chain sequence to resolve the unwrapped value. + * + * @name value + * @memberOf _ + * @since 0.1.0 + * @alias toJSON, valueOf + * @category Seq + * @returns {*} Returns the resolved unwrapped value. + * @example + * + * _([1, 2, 3]).value(); + * // => [1, 2, 3] + */ + function wrapperValue() { + return baseWrapperValue(this.__wrapped__, this.__actions__); + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates an object composed of keys generated from the results of running + * each element of `collection` thru `iteratee`. The corresponding value of + * each key is the number of times the key was returned by `iteratee`. The + * iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.5.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee to transform keys. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * _.countBy([6.1, 4.2, 6.3], Math.floor); + * // => { '4': 1, '6': 2 } + * + * // The `_.property` iteratee shorthand. + * _.countBy(['one', 'two', 'three'], 'length'); + * // => { '3': 2, '5': 1 } + */ + var countBy = createAggregator(function(result, value, key) { + if (hasOwnProperty.call(result, key)) { + ++result[key]; + } else { + baseAssignValue(result, key, 1); + } + }); + + /** + * Checks if `predicate` returns truthy for **all** elements of `collection`. + * Iteration is stopped once `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index|key, collection). + * + * **Note:** This method returns `true` for + * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because + * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of + * elements of empty collections. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false`. + * @example + * + * _.every([true, 1, null, 'yes'], Boolean); + * // => false + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * // The `_.matches` iteratee shorthand. + * _.every(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // The `_.matchesProperty` iteratee shorthand. + * _.every(users, ['active', false]); + * // => true + * + * // The `_.property` iteratee shorthand. + * _.every(users, 'active'); + * // => false + */ + function every(collection, predicate, guard) { + var func = isArray(collection) ? arrayEvery : baseEvery; + if (guard && isIterateeCall(collection, predicate, guard)) { + predicate = undefined; + } + return func(collection, getIteratee(predicate, 3)); + } + + /** + * Iterates over elements of `collection`, returning an array of all elements + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * **Note:** Unlike `_.remove`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.reject + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.filter(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, { 'age': 36, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.filter(users, 'active'); + * // => objects for ['barney'] + * + * // Combining several predicates using `_.overEvery` or `_.overSome`. + * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]])); + * // => objects for ['fred', 'barney'] + */ + function filter(collection, predicate) { + var func = isArray(collection) ? arrayFilter : baseFilter; + return func(collection, getIteratee(predicate, 3)); + } + + /** + * Iterates over elements of `collection`, returning the first element + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false }, + * { 'user': 'pebbles', 'age': 1, 'active': true } + * ]; + * + * _.find(users, function(o) { return o.age < 40; }); + * // => object for 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.find(users, { 'age': 1, 'active': true }); + * // => object for 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.find(users, ['active', false]); + * // => object for 'fred' + * + * // The `_.property` iteratee shorthand. + * _.find(users, 'active'); + * // => object for 'barney' + */ + var find = createFind(findIndex); + + /** + * This method is like `_.find` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=collection.length-1] The index to search from. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * _.findLast([1, 2, 3, 4], function(n) { + * return n % 2 == 1; + * }); + * // => 3 + */ + var findLast = createFind(findLastIndex); + + /** + * Creates a flattened array of values by running each element in `collection` + * thru `iteratee` and flattening the mapped results. The iteratee is invoked + * with three arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new flattened array. + * @example + * + * function duplicate(n) { + * return [n, n]; + * } + * + * _.flatMap([1, 2], duplicate); + * // => [1, 1, 2, 2] + */ + function flatMap(collection, iteratee) { + return baseFlatten(map(collection, iteratee), 1); + } + + /** + * This method is like `_.flatMap` except that it recursively flattens the + * mapped results. + * + * @static + * @memberOf _ + * @since 4.7.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new flattened array. + * @example + * + * function duplicate(n) { + * return [[[n, n]]]; + * } + * + * _.flatMapDeep([1, 2], duplicate); + * // => [1, 1, 2, 2] + */ + function flatMapDeep(collection, iteratee) { + return baseFlatten(map(collection, iteratee), INFINITY); + } + + /** + * This method is like `_.flatMap` except that it recursively flattens the + * mapped results up to `depth` times. + * + * @static + * @memberOf _ + * @since 4.7.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {number} [depth=1] The maximum recursion depth. + * @returns {Array} Returns the new flattened array. + * @example + * + * function duplicate(n) { + * return [[[n, n]]]; + * } + * + * _.flatMapDepth([1, 2], duplicate, 2); + * // => [[1, 1], [2, 2]] + */ + function flatMapDepth(collection, iteratee, depth) { + depth = depth === undefined ? 1 : toInteger(depth); + return baseFlatten(map(collection, iteratee), depth); + } + + /** + * Iterates over elements of `collection` and invokes `iteratee` for each element. + * The iteratee is invoked with three arguments: (value, index|key, collection). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * **Note:** As with other "Collections" methods, objects with a "length" + * property are iterated like arrays. To avoid this behavior use `_.forIn` + * or `_.forOwn` for object iteration. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias each + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEachRight + * @example + * + * _.forEach([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `1` then `2`. + * + * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ + function forEach(collection, iteratee) { + var func = isArray(collection) ? arrayEach : baseEach; + return func(collection, getIteratee(iteratee, 3)); + } + + /** + * This method is like `_.forEach` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @alias eachRight + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEach + * @example + * + * _.forEachRight([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `2` then `1`. + */ + function forEachRight(collection, iteratee) { + var func = isArray(collection) ? arrayEachRight : baseEachRight; + return func(collection, getIteratee(iteratee, 3)); + } + + /** + * Creates an object composed of keys generated from the results of running + * each element of `collection` thru `iteratee`. The order of grouped values + * is determined by the order they occur in `collection`. The corresponding + * value of each key is an array of elements responsible for generating the + * key. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee to transform keys. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * _.groupBy([6.1, 4.2, 6.3], Math.floor); + * // => { '4': [4.2], '6': [6.1, 6.3] } + * + * // The `_.property` iteratee shorthand. + * _.groupBy(['one', 'two', 'three'], 'length'); + * // => { '3': ['one', 'two'], '5': ['three'] } + */ + var groupBy = createAggregator(function(result, value, key) { + if (hasOwnProperty.call(result, key)) { + result[key].push(value); + } else { + baseAssignValue(result, key, [value]); + } + }); + + /** + * Checks if `value` is in `collection`. If `collection` is a string, it's + * checked for a substring of `value`, otherwise + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * is used for equality comparisons. If `fromIndex` is negative, it's used as + * the offset from the end of `collection`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @param {*} value The value to search for. + * @param {number} [fromIndex=0] The index to search from. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. + * @returns {boolean} Returns `true` if `value` is found, else `false`. + * @example + * + * _.includes([1, 2, 3], 1); + * // => true + * + * _.includes([1, 2, 3], 1, 2); + * // => false + * + * _.includes({ 'a': 1, 'b': 2 }, 1); + * // => true + * + * _.includes('abcd', 'bc'); + * // => true + */ + function includes(collection, value, fromIndex, guard) { + collection = isArrayLike(collection) ? collection : values(collection); + fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0; + + var length = collection.length; + if (fromIndex < 0) { + fromIndex = nativeMax(length + fromIndex, 0); + } + return isString(collection) + ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1) + : (!!length && baseIndexOf(collection, value, fromIndex) > -1); + } + + /** + * Invokes the method at `path` of each element in `collection`, returning + * an array of the results of each invoked method. Any additional arguments + * are provided to each invoked method. If `path` is a function, it's invoked + * for, and `this` bound to, each element in `collection`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Array|Function|string} path The path of the method to invoke or + * the function invoked per iteration. + * @param {...*} [args] The arguments to invoke each method with. + * @returns {Array} Returns the array of results. + * @example + * + * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort'); + * // => [[1, 5, 7], [1, 2, 3]] + * + * _.invokeMap([123, 456], String.prototype.split, ''); + * // => [['1', '2', '3'], ['4', '5', '6']] + */ + var invokeMap = baseRest(function(collection, path, args) { + var index = -1, + isFunc = typeof path == 'function', + result = isArrayLike(collection) ? Array(collection.length) : []; + + baseEach(collection, function(value) { + result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args); + }); + return result; + }); + + /** + * Creates an object composed of keys generated from the results of running + * each element of `collection` thru `iteratee`. The corresponding value of + * each key is the last element responsible for generating the key. The + * iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee to transform keys. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * var array = [ + * { 'dir': 'left', 'code': 97 }, + * { 'dir': 'right', 'code': 100 } + * ]; + * + * _.keyBy(array, function(o) { + * return String.fromCharCode(o.code); + * }); + * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } } + * + * _.keyBy(array, 'dir'); + * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } } + */ + var keyBy = createAggregator(function(result, value, key) { + baseAssignValue(result, key, value); + }); + + /** + * Creates an array of values by running each element in `collection` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. + * + * The guarded methods are: + * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, + * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, + * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, + * `template`, `trim`, `trimEnd`, `trimStart`, and `words` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + * @example + * + * function square(n) { + * return n * n; + * } + * + * _.map([4, 8], square); + * // => [16, 64] + * + * _.map({ 'a': 4, 'b': 8 }, square); + * // => [16, 64] (iteration order is not guaranteed) + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * // The `_.property` iteratee shorthand. + * _.map(users, 'user'); + * // => ['barney', 'fred'] + */ + function map(collection, iteratee) { + var func = isArray(collection) ? arrayMap : baseMap; + return func(collection, getIteratee(iteratee, 3)); + } + + /** + * This method is like `_.sortBy` except that it allows specifying the sort + * orders of the iteratees to sort by. If `orders` is unspecified, all values + * are sorted in ascending order. Otherwise, specify an order of "desc" for + * descending or "asc" for ascending sort order of corresponding values. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]] + * The iteratees to sort by. + * @param {string[]} [orders] The sort orders of `iteratees`. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 34 }, + * { 'user': 'fred', 'age': 40 }, + * { 'user': 'barney', 'age': 36 } + * ]; + * + * // Sort by `user` in ascending order and by `age` in descending order. + * _.orderBy(users, ['user', 'age'], ['asc', 'desc']); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]] + */ + function orderBy(collection, iteratees, orders, guard) { + if (collection == null) { + return []; + } + if (!isArray(iteratees)) { + iteratees = iteratees == null ? [] : [iteratees]; + } + orders = guard ? undefined : orders; + if (!isArray(orders)) { + orders = orders == null ? [] : [orders]; + } + return baseOrderBy(collection, iteratees, orders); + } + + /** + * Creates an array of elements split into two groups, the first of which + * contains elements `predicate` returns truthy for, the second of which + * contains elements `predicate` returns falsey for. The predicate is + * invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the array of grouped elements. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false }, + * { 'user': 'fred', 'age': 40, 'active': true }, + * { 'user': 'pebbles', 'age': 1, 'active': false } + * ]; + * + * _.partition(users, function(o) { return o.active; }); + * // => objects for [['fred'], ['barney', 'pebbles']] + * + * // The `_.matches` iteratee shorthand. + * _.partition(users, { 'age': 1, 'active': false }); + * // => objects for [['pebbles'], ['barney', 'fred']] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.partition(users, ['active', false]); + * // => objects for [['barney', 'pebbles'], ['fred']] + * + * // The `_.property` iteratee shorthand. + * _.partition(users, 'active'); + * // => objects for [['fred'], ['barney', 'pebbles']] + */ + var partition = createAggregator(function(result, value, key) { + result[key ? 0 : 1].push(value); + }, function() { return [[], []]; }); + + /** + * Reduces `collection` to a value which is the accumulated result of running + * each element in `collection` thru `iteratee`, where each successive + * invocation is supplied the return value of the previous. If `accumulator` + * is not given, the first element of `collection` is used as the initial + * value. The iteratee is invoked with four arguments: + * (accumulator, value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.reduce`, `_.reduceRight`, and `_.transform`. + * + * The guarded methods are: + * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, + * and `sortBy` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @returns {*} Returns the accumulated value. + * @see _.reduceRight + * @example + * + * _.reduce([1, 2], function(sum, n) { + * return sum + n; + * }, 0); + * // => 3 + * + * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + * (result[value] || (result[value] = [])).push(key); + * return result; + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) + */ + function reduce(collection, iteratee, accumulator) { + var func = isArray(collection) ? arrayReduce : baseReduce, + initAccum = arguments.length < 3; + + return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach); + } + + /** + * This method is like `_.reduce` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @returns {*} Returns the accumulated value. + * @see _.reduce + * @example + * + * var array = [[0, 1], [2, 3], [4, 5]]; + * + * _.reduceRight(array, function(flattened, other) { + * return flattened.concat(other); + * }, []); + * // => [4, 5, 2, 3, 0, 1] + */ + function reduceRight(collection, iteratee, accumulator) { + var func = isArray(collection) ? arrayReduceRight : baseReduce, + initAccum = arguments.length < 3; + + return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight); + } + + /** + * The opposite of `_.filter`; this method returns the elements of `collection` + * that `predicate` does **not** return truthy for. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.filter + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false }, + * { 'user': 'fred', 'age': 40, 'active': true } + * ]; + * + * _.reject(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.reject(users, { 'age': 40, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.reject(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.reject(users, 'active'); + * // => objects for ['barney'] + */ + function reject(collection, predicate) { + var func = isArray(collection) ? arrayFilter : baseFilter; + return func(collection, negate(getIteratee(predicate, 3))); + } + + /** + * Gets a random element from `collection`. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Collection + * @param {Array|Object} collection The collection to sample. + * @returns {*} Returns the random element. + * @example + * + * _.sample([1, 2, 3, 4]); + * // => 2 + */ + function sample(collection) { + var func = isArray(collection) ? arraySample : baseSample; + return func(collection); + } + + /** + * Gets `n` random elements at unique keys from `collection` up to the + * size of `collection`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to sample. + * @param {number} [n=1] The number of elements to sample. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the random elements. + * @example + * + * _.sampleSize([1, 2, 3], 2); + * // => [3, 1] + * + * _.sampleSize([1, 2, 3], 4); + * // => [2, 3, 1] + */ + function sampleSize(collection, n, guard) { + if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) { + n = 1; + } else { + n = toInteger(n); + } + var func = isArray(collection) ? arraySampleSize : baseSampleSize; + return func(collection, n); + } + + /** + * Creates an array of shuffled values, using a version of the + * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to shuffle. + * @returns {Array} Returns the new shuffled array. + * @example + * + * _.shuffle([1, 2, 3, 4]); + * // => [4, 1, 3, 2] + */ + function shuffle(collection) { + var func = isArray(collection) ? arrayShuffle : baseShuffle; + return func(collection); + } + + /** + * Gets the size of `collection` by returning its length for array-like + * values or the number of own enumerable string keyed properties for objects. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @returns {number} Returns the collection size. + * @example + * + * _.size([1, 2, 3]); + * // => 3 + * + * _.size({ 'a': 1, 'b': 2 }); + * // => 2 + * + * _.size('pebbles'); + * // => 7 + */ + function size(collection) { + if (collection == null) { + return 0; + } + if (isArrayLike(collection)) { + return isString(collection) ? stringSize(collection) : collection.length; + } + var tag = getTag(collection); + if (tag == mapTag || tag == setTag) { + return collection.size; + } + return baseKeys(collection).length; + } + + /** + * Checks if `predicate` returns truthy for **any** element of `collection`. + * Iteration is stopped once `predicate` returns truthy. The predicate is + * invoked with three arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + * @example + * + * _.some([null, 0, 'yes', false], Boolean); + * // => true + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false } + * ]; + * + * // The `_.matches` iteratee shorthand. + * _.some(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // The `_.matchesProperty` iteratee shorthand. + * _.some(users, ['active', false]); + * // => true + * + * // The `_.property` iteratee shorthand. + * _.some(users, 'active'); + * // => true + */ + function some(collection, predicate, guard) { + var func = isArray(collection) ? arraySome : baseSome; + if (guard && isIterateeCall(collection, predicate, guard)) { + predicate = undefined; + } + return func(collection, getIteratee(predicate, 3)); + } + + /** + * Creates an array of elements, sorted in ascending order by the results of + * running each element in a collection thru each iteratee. This method + * performs a stable sort, that is, it preserves the original sort order of + * equal elements. The iteratees are invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {...(Function|Function[])} [iteratees=[_.identity]] + * The iteratees to sort by. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 30 }, + * { 'user': 'barney', 'age': 34 } + * ]; + * + * _.sortBy(users, [function(o) { return o.user; }]); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]] + * + * _.sortBy(users, ['user', 'age']); + * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]] + */ + var sortBy = baseRest(function(collection, iteratees) { + if (collection == null) { + return []; + } + var length = iteratees.length; + if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) { + iteratees = []; + } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) { + iteratees = [iteratees[0]]; + } + return baseOrderBy(collection, baseFlatten(iteratees, 1), []); + }); + + /*------------------------------------------------------------------------*/ + + /** + * Gets the timestamp of the number of milliseconds that have elapsed since + * the Unix epoch (1 January 1970 00:00:00 UTC). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Date + * @returns {number} Returns the timestamp. + * @example + * + * _.defer(function(stamp) { + * console.log(_.now() - stamp); + * }, _.now()); + * // => Logs the number of milliseconds it took for the deferred invocation. + */ + var now = ctxNow || function() { + return root.Date.now(); + }; + + /*------------------------------------------------------------------------*/ + + /** + * The opposite of `_.before`; this method creates a function that invokes + * `func` once it's called `n` or more times. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {number} n The number of calls before `func` is invoked. + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * var saves = ['profile', 'settings']; + * + * var done = _.after(saves.length, function() { + * console.log('done saving!'); + * }); + * + * _.forEach(saves, function(type) { + * asyncSave({ 'type': type, 'complete': done }); + * }); + * // => Logs 'done saving!' after the two async saves have completed. + */ + function after(n, func) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + n = toInteger(n); + return function() { + if (--n < 1) { + return func.apply(this, arguments); + } + }; + } + + /** + * Creates a function that invokes `func`, with up to `n` arguments, + * ignoring any additional arguments. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {Function} func The function to cap arguments for. + * @param {number} [n=func.length] The arity cap. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Function} Returns the new capped function. + * @example + * + * _.map(['6', '8', '10'], _.ary(parseInt, 1)); + * // => [6, 8, 10] + */ + function ary(func, n, guard) { + n = guard ? undefined : n; + n = (func && n == null) ? func.length : n; + return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n); + } + + /** + * Creates a function that invokes `func`, with the `this` binding and arguments + * of the created function, while it's called less than `n` times. Subsequent + * calls to the created function return the result of the last `func` invocation. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {number} n The number of calls at which `func` is no longer invoked. + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * jQuery(element).on('click', _.before(5, addContactToList)); + * // => Allows adding up to 4 contacts to the list. + */ + function before(n, func) { + var result; + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + n = toInteger(n); + return function() { + if (--n > 0) { + result = func.apply(this, arguments); + } + if (n <= 1) { + func = undefined; + } + return result; + }; + } + + /** + * Creates a function that invokes `func` with the `this` binding of `thisArg` + * and `partials` prepended to the arguments it receives. + * + * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds, + * may be used as a placeholder for partially applied arguments. + * + * **Note:** Unlike native `Function#bind`, this method doesn't set the "length" + * property of bound functions. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to bind. + * @param {*} thisArg The `this` binding of `func`. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new bound function. + * @example + * + * function greet(greeting, punctuation) { + * return greeting + ' ' + this.user + punctuation; + * } + * + * var object = { 'user': 'fred' }; + * + * var bound = _.bind(greet, object, 'hi'); + * bound('!'); + * // => 'hi fred!' + * + * // Bound with placeholders. + * var bound = _.bind(greet, object, _, '!'); + * bound('hi'); + * // => 'hi fred!' + */ + var bind = baseRest(function(func, thisArg, partials) { + var bitmask = WRAP_BIND_FLAG; + if (partials.length) { + var holders = replaceHolders(partials, getHolder(bind)); + bitmask |= WRAP_PARTIAL_FLAG; + } + return createWrap(func, bitmask, thisArg, partials, holders); + }); + + /** + * Creates a function that invokes the method at `object[key]` with `partials` + * prepended to the arguments it receives. + * + * This method differs from `_.bind` by allowing bound functions to reference + * methods that may be redefined or don't yet exist. See + * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern) + * for more details. + * + * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for partially applied arguments. + * + * @static + * @memberOf _ + * @since 0.10.0 + * @category Function + * @param {Object} object The object to invoke the method on. + * @param {string} key The key of the method. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new bound function. + * @example + * + * var object = { + * 'user': 'fred', + * 'greet': function(greeting, punctuation) { + * return greeting + ' ' + this.user + punctuation; + * } + * }; + * + * var bound = _.bindKey(object, 'greet', 'hi'); + * bound('!'); + * // => 'hi fred!' + * + * object.greet = function(greeting, punctuation) { + * return greeting + 'ya ' + this.user + punctuation; + * }; + * + * bound('!'); + * // => 'hiya fred!' + * + * // Bound with placeholders. + * var bound = _.bindKey(object, 'greet', _, '!'); + * bound('hi'); + * // => 'hiya fred!' + */ + var bindKey = baseRest(function(object, key, partials) { + var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG; + if (partials.length) { + var holders = replaceHolders(partials, getHolder(bindKey)); + bitmask |= WRAP_PARTIAL_FLAG; + } + return createWrap(key, bitmask, object, partials, holders); + }); + + /** + * Creates a function that accepts arguments of `func` and either invokes + * `func` returning its result, if at least `arity` number of arguments have + * been provided, or returns a function that accepts the remaining `func` + * arguments, and so on. The arity of `func` may be specified if `func.length` + * is not sufficient. + * + * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds, + * may be used as a placeholder for provided arguments. + * + * **Note:** This method doesn't set the "length" property of curried functions. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Function + * @param {Function} func The function to curry. + * @param {number} [arity=func.length] The arity of `func`. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Function} Returns the new curried function. + * @example + * + * var abc = function(a, b, c) { + * return [a, b, c]; + * }; + * + * var curried = _.curry(abc); + * + * curried(1)(2)(3); + * // => [1, 2, 3] + * + * curried(1, 2)(3); + * // => [1, 2, 3] + * + * curried(1, 2, 3); + * // => [1, 2, 3] + * + * // Curried with placeholders. + * curried(1)(_, 3)(2); + * // => [1, 2, 3] + */ + function curry(func, arity, guard) { + arity = guard ? undefined : arity; + var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity); + result.placeholder = curry.placeholder; + return result; + } + + /** + * This method is like `_.curry` except that arguments are applied to `func` + * in the manner of `_.partialRight` instead of `_.partial`. + * + * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for provided arguments. + * + * **Note:** This method doesn't set the "length" property of curried functions. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {Function} func The function to curry. + * @param {number} [arity=func.length] The arity of `func`. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Function} Returns the new curried function. + * @example + * + * var abc = function(a, b, c) { + * return [a, b, c]; + * }; + * + * var curried = _.curryRight(abc); + * + * curried(3)(2)(1); + * // => [1, 2, 3] + * + * curried(2, 3)(1); + * // => [1, 2, 3] + * + * curried(1, 2, 3); + * // => [1, 2, 3] + * + * // Curried with placeholders. + * curried(3)(1, _)(2); + * // => [1, 2, 3] + */ + function curryRight(func, arity, guard) { + arity = guard ? undefined : arity; + var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity); + result.placeholder = curryRight.placeholder; + return result; + } + + /** + * Creates a debounced function that delays invoking `func` until after `wait` + * milliseconds have elapsed since the last time the debounced function was + * invoked. The debounced function comes with a `cancel` method to cancel + * delayed `func` invocations and a `flush` method to immediately invoke them. + * Provide `options` to indicate whether `func` should be invoked on the + * leading and/or trailing edge of the `wait` timeout. The `func` is invoked + * with the last arguments provided to the debounced function. Subsequent + * calls to the debounced function return the result of the last `func` + * invocation. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is + * invoked on the trailing edge of the timeout only if the debounced function + * is invoked more than once during the `wait` timeout. + * + * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred + * until to the next tick, similar to `setTimeout` with a timeout of `0`. + * + * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) + * for details over the differences between `_.debounce` and `_.throttle`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to debounce. + * @param {number} [wait=0] The number of milliseconds to delay. + * @param {Object} [options={}] The options object. + * @param {boolean} [options.leading=false] + * Specify invoking on the leading edge of the timeout. + * @param {number} [options.maxWait] + * The maximum time `func` is allowed to be delayed before it's invoked. + * @param {boolean} [options.trailing=true] + * Specify invoking on the trailing edge of the timeout. + * @returns {Function} Returns the new debounced function. + * @example + * + * // Avoid costly calculations while the window size is in flux. + * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); + * + * // Invoke `sendMail` when clicked, debouncing subsequent calls. + * jQuery(element).on('click', _.debounce(sendMail, 300, { + * 'leading': true, + * 'trailing': false + * })); + * + * // Ensure `batchLog` is invoked once after 1 second of debounced calls. + * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 }); + * var source = new EventSource('/stream'); + * jQuery(source).on('message', debounced); + * + * // Cancel the trailing debounced invocation. + * jQuery(window).on('popstate', debounced.cancel); + */ + function debounce(func, wait, options) { + var lastArgs, + lastThis, + maxWait, + result, + timerId, + lastCallTime, + lastInvokeTime = 0, + leading = false, + maxing = false, + trailing = true; + + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + wait = toNumber(wait) || 0; + if (isObject(options)) { + leading = !!options.leading; + maxing = 'maxWait' in options; + maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait; + trailing = 'trailing' in options ? !!options.trailing : trailing; + } + + function invokeFunc(time) { + var args = lastArgs, + thisArg = lastThis; + + lastArgs = lastThis = undefined; + lastInvokeTime = time; + result = func.apply(thisArg, args); + return result; + } + + function leadingEdge(time) { + // Reset any `maxWait` timer. + lastInvokeTime = time; + // Start the timer for the trailing edge. + timerId = setTimeout(timerExpired, wait); + // Invoke the leading edge. + return leading ? invokeFunc(time) : result; + } + + function remainingWait(time) { + var timeSinceLastCall = time - lastCallTime, + timeSinceLastInvoke = time - lastInvokeTime, + timeWaiting = wait - timeSinceLastCall; + + return maxing + ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) + : timeWaiting; + } + + function shouldInvoke(time) { + var timeSinceLastCall = time - lastCallTime, + timeSinceLastInvoke = time - lastInvokeTime; + + // Either this is the first call, activity has stopped and we're at the + // trailing edge, the system time has gone backwards and we're treating + // it as the trailing edge, or we've hit the `maxWait` limit. + return (lastCallTime === undefined || (timeSinceLastCall >= wait) || + (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait)); + } + + function timerExpired() { + var time = now(); + if (shouldInvoke(time)) { + return trailingEdge(time); + } + // Restart the timer. + timerId = setTimeout(timerExpired, remainingWait(time)); + } + + function trailingEdge(time) { + timerId = undefined; + + // Only invoke if we have `lastArgs` which means `func` has been + // debounced at least once. + if (trailing && lastArgs) { + return invokeFunc(time); + } + lastArgs = lastThis = undefined; + return result; + } + + function cancel() { + if (timerId !== undefined) { + clearTimeout(timerId); + } + lastInvokeTime = 0; + lastArgs = lastCallTime = lastThis = timerId = undefined; + } + + function flush() { + return timerId === undefined ? result : trailingEdge(now()); + } + + function debounced() { + var time = now(), + isInvoking = shouldInvoke(time); + + lastArgs = arguments; + lastThis = this; + lastCallTime = time; + + if (isInvoking) { + if (timerId === undefined) { + return leadingEdge(lastCallTime); + } + if (maxing) { + // Handle invocations in a tight loop. + clearTimeout(timerId); + timerId = setTimeout(timerExpired, wait); + return invokeFunc(lastCallTime); + } + } + if (timerId === undefined) { + timerId = setTimeout(timerExpired, wait); + } + return result; + } + debounced.cancel = cancel; + debounced.flush = flush; + return debounced; + } + + /** + * Defers invoking the `func` until the current call stack has cleared. Any + * additional arguments are provided to `func` when it's invoked. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to defer. + * @param {...*} [args] The arguments to invoke `func` with. + * @returns {number} Returns the timer id. + * @example + * + * _.defer(function(text) { + * console.log(text); + * }, 'deferred'); + * // => Logs 'deferred' after one millisecond. + */ + var defer = baseRest(function(func, args) { + return baseDelay(func, 1, args); + }); + + /** + * Invokes `func` after `wait` milliseconds. Any additional arguments are + * provided to `func` when it's invoked. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @param {...*} [args] The arguments to invoke `func` with. + * @returns {number} Returns the timer id. + * @example + * + * _.delay(function(text) { + * console.log(text); + * }, 1000, 'later'); + * // => Logs 'later' after one second. + */ + var delay = baseRest(function(func, wait, args) { + return baseDelay(func, toNumber(wait) || 0, args); + }); + + /** + * Creates a function that invokes `func` with arguments reversed. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Function + * @param {Function} func The function to flip arguments for. + * @returns {Function} Returns the new flipped function. + * @example + * + * var flipped = _.flip(function() { + * return _.toArray(arguments); + * }); + * + * flipped('a', 'b', 'c', 'd'); + * // => ['d', 'c', 'b', 'a'] + */ + function flip(func) { + return createWrap(func, WRAP_FLIP_FLAG); + } + + /** + * Creates a function that memoizes the result of `func`. If `resolver` is + * provided, it determines the cache key for storing the result based on the + * arguments provided to the memoized function. By default, the first argument + * provided to the memoized function is used as the map cache key. The `func` + * is invoked with the `this` binding of the memoized function. + * + * **Note:** The cache is exposed as the `cache` property on the memoized + * function. Its creation may be customized by replacing the `_.memoize.Cache` + * constructor with one whose instances implement the + * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) + * method interface of `clear`, `delete`, `get`, `has`, and `set`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to have its output memoized. + * @param {Function} [resolver] The function to resolve the cache key. + * @returns {Function} Returns the new memoized function. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * var other = { 'c': 3, 'd': 4 }; + * + * var values = _.memoize(_.values); + * values(object); + * // => [1, 2] + * + * values(other); + * // => [3, 4] + * + * object.a = 2; + * values(object); + * // => [1, 2] + * + * // Modify the result cache. + * values.cache.set(object, ['a', 'b']); + * values(object); + * // => ['a', 'b'] + * + * // Replace `_.memoize.Cache`. + * _.memoize.Cache = WeakMap; + */ + function memoize(func, resolver) { + if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) { + throw new TypeError(FUNC_ERROR_TEXT); + } + var memoized = function() { + var args = arguments, + key = resolver ? resolver.apply(this, args) : args[0], + cache = memoized.cache; + + if (cache.has(key)) { + return cache.get(key); + } + var result = func.apply(this, args); + memoized.cache = cache.set(key, result) || cache; + return result; + }; + memoized.cache = new (memoize.Cache || MapCache); + return memoized; + } + + // Expose `MapCache`. + memoize.Cache = MapCache; + + /** + * Creates a function that negates the result of the predicate `func`. The + * `func` predicate is invoked with the `this` binding and arguments of the + * created function. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {Function} predicate The predicate to negate. + * @returns {Function} Returns the new negated function. + * @example + * + * function isEven(n) { + * return n % 2 == 0; + * } + * + * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven)); + * // => [1, 3, 5] + */ + function negate(predicate) { + if (typeof predicate != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return function() { + var args = arguments; + switch (args.length) { + case 0: return !predicate.call(this); + case 1: return !predicate.call(this, args[0]); + case 2: return !predicate.call(this, args[0], args[1]); + case 3: return !predicate.call(this, args[0], args[1], args[2]); + } + return !predicate.apply(this, args); + }; + } + + /** + * Creates a function that is restricted to invoking `func` once. Repeat calls + * to the function return the value of the first invocation. The `func` is + * invoked with the `this` binding and arguments of the created function. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * var initialize = _.once(createApplication); + * initialize(); + * initialize(); + * // => `createApplication` is invoked once + */ + function once(func) { + return before(2, func); + } + + /** + * Creates a function that invokes `func` with its arguments transformed. + * + * @static + * @since 4.0.0 + * @memberOf _ + * @category Function + * @param {Function} func The function to wrap. + * @param {...(Function|Function[])} [transforms=[_.identity]] + * The argument transforms. + * @returns {Function} Returns the new function. + * @example + * + * function doubled(n) { + * return n * 2; + * } + * + * function square(n) { + * return n * n; + * } + * + * var func = _.overArgs(function(x, y) { + * return [x, y]; + * }, [square, doubled]); + * + * func(9, 3); + * // => [81, 6] + * + * func(10, 5); + * // => [100, 10] + */ + var overArgs = castRest(function(func, transforms) { + transforms = (transforms.length == 1 && isArray(transforms[0])) + ? arrayMap(transforms[0], baseUnary(getIteratee())) + : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee())); + + var funcsLength = transforms.length; + return baseRest(function(args) { + var index = -1, + length = nativeMin(args.length, funcsLength); + + while (++index < length) { + args[index] = transforms[index].call(this, args[index]); + } + return apply(func, this, args); + }); + }); + + /** + * Creates a function that invokes `func` with `partials` prepended to the + * arguments it receives. This method is like `_.bind` except it does **not** + * alter the `this` binding. + * + * The `_.partial.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for partially applied arguments. + * + * **Note:** This method doesn't set the "length" property of partially + * applied functions. + * + * @static + * @memberOf _ + * @since 0.2.0 + * @category Function + * @param {Function} func The function to partially apply arguments to. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new partially applied function. + * @example + * + * function greet(greeting, name) { + * return greeting + ' ' + name; + * } + * + * var sayHelloTo = _.partial(greet, 'hello'); + * sayHelloTo('fred'); + * // => 'hello fred' + * + * // Partially applied with placeholders. + * var greetFred = _.partial(greet, _, 'fred'); + * greetFred('hi'); + * // => 'hi fred' + */ + var partial = baseRest(function(func, partials) { + var holders = replaceHolders(partials, getHolder(partial)); + return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders); + }); + + /** + * This method is like `_.partial` except that partially applied arguments + * are appended to the arguments it receives. + * + * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for partially applied arguments. + * + * **Note:** This method doesn't set the "length" property of partially + * applied functions. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Function + * @param {Function} func The function to partially apply arguments to. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new partially applied function. + * @example + * + * function greet(greeting, name) { + * return greeting + ' ' + name; + * } + * + * var greetFred = _.partialRight(greet, 'fred'); + * greetFred('hi'); + * // => 'hi fred' + * + * // Partially applied with placeholders. + * var sayHelloTo = _.partialRight(greet, 'hello', _); + * sayHelloTo('fred'); + * // => 'hello fred' + */ + var partialRight = baseRest(function(func, partials) { + var holders = replaceHolders(partials, getHolder(partialRight)); + return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders); + }); + + /** + * Creates a function that invokes `func` with arguments arranged according + * to the specified `indexes` where the argument value at the first index is + * provided as the first argument, the argument value at the second index is + * provided as the second argument, and so on. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {Function} func The function to rearrange arguments for. + * @param {...(number|number[])} indexes The arranged argument indexes. + * @returns {Function} Returns the new function. + * @example + * + * var rearged = _.rearg(function(a, b, c) { + * return [a, b, c]; + * }, [2, 0, 1]); + * + * rearged('b', 'c', 'a') + * // => ['a', 'b', 'c'] + */ + var rearg = flatRest(function(func, indexes) { + return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes); + }); + + /** + * Creates a function that invokes `func` with the `this` binding of the + * created function and arguments from `start` and beyond provided as + * an array. + * + * **Note:** This method is based on the + * [rest parameter](https://mdn.io/rest_parameters). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Function + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + * @example + * + * var say = _.rest(function(what, names) { + * return what + ' ' + _.initial(names).join(', ') + + * (_.size(names) > 1 ? ', & ' : '') + _.last(names); + * }); + * + * say('hello', 'fred', 'barney', 'pebbles'); + * // => 'hello fred, barney, & pebbles' + */ + function rest(func, start) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + start = start === undefined ? start : toInteger(start); + return baseRest(func, start); + } + + /** + * Creates a function that invokes `func` with the `this` binding of the + * create function and an array of arguments much like + * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply). + * + * **Note:** This method is based on the + * [spread operator](https://mdn.io/spread_operator). + * + * @static + * @memberOf _ + * @since 3.2.0 + * @category Function + * @param {Function} func The function to spread arguments over. + * @param {number} [start=0] The start position of the spread. + * @returns {Function} Returns the new function. + * @example + * + * var say = _.spread(function(who, what) { + * return who + ' says ' + what; + * }); + * + * say(['fred', 'hello']); + * // => 'fred says hello' + * + * var numbers = Promise.all([ + * Promise.resolve(40), + * Promise.resolve(36) + * ]); + * + * numbers.then(_.spread(function(x, y) { + * return x + y; + * })); + * // => a Promise of 76 + */ + function spread(func, start) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + start = start == null ? 0 : nativeMax(toInteger(start), 0); + return baseRest(function(args) { + var array = args[start], + otherArgs = castSlice(args, 0, start); + + if (array) { + arrayPush(otherArgs, array); + } + return apply(func, this, otherArgs); + }); + } + + /** + * Creates a throttled function that only invokes `func` at most once per + * every `wait` milliseconds. The throttled function comes with a `cancel` + * method to cancel delayed `func` invocations and a `flush` method to + * immediately invoke them. Provide `options` to indicate whether `func` + * should be invoked on the leading and/or trailing edge of the `wait` + * timeout. The `func` is invoked with the last arguments provided to the + * throttled function. Subsequent calls to the throttled function return the + * result of the last `func` invocation. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is + * invoked on the trailing edge of the timeout only if the throttled function + * is invoked more than once during the `wait` timeout. + * + * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred + * until to the next tick, similar to `setTimeout` with a timeout of `0`. + * + * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) + * for details over the differences between `_.throttle` and `_.debounce`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to throttle. + * @param {number} [wait=0] The number of milliseconds to throttle invocations to. + * @param {Object} [options={}] The options object. + * @param {boolean} [options.leading=true] + * Specify invoking on the leading edge of the timeout. + * @param {boolean} [options.trailing=true] + * Specify invoking on the trailing edge of the timeout. + * @returns {Function} Returns the new throttled function. + * @example + * + * // Avoid excessively updating the position while scrolling. + * jQuery(window).on('scroll', _.throttle(updatePosition, 100)); + * + * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes. + * var throttled = _.throttle(renewToken, 300000, { 'trailing': false }); + * jQuery(element).on('click', throttled); + * + * // Cancel the trailing throttled invocation. + * jQuery(window).on('popstate', throttled.cancel); + */ + function throttle(func, wait, options) { + var leading = true, + trailing = true; + + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + if (isObject(options)) { + leading = 'leading' in options ? !!options.leading : leading; + trailing = 'trailing' in options ? !!options.trailing : trailing; + } + return debounce(func, wait, { + 'leading': leading, + 'maxWait': wait, + 'trailing': trailing + }); + } + + /** + * Creates a function that accepts up to one argument, ignoring any + * additional arguments. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Function + * @param {Function} func The function to cap arguments for. + * @returns {Function} Returns the new capped function. + * @example + * + * _.map(['6', '8', '10'], _.unary(parseInt)); + * // => [6, 8, 10] + */ + function unary(func) { + return ary(func, 1); + } + + /** + * Creates a function that provides `value` to `wrapper` as its first + * argument. Any additional arguments provided to the function are appended + * to those provided to the `wrapper`. The wrapper is invoked with the `this` + * binding of the created function. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {*} value The value to wrap. + * @param {Function} [wrapper=identity] The wrapper function. + * @returns {Function} Returns the new function. + * @example + * + * var p = _.wrap(_.escape, function(func, text) { + * return '

' + func(text) + '

'; + * }); + * + * p('fred, barney, & pebbles'); + * // => '

fred, barney, & pebbles

' + */ + function wrap(value, wrapper) { + return partial(castFunction(wrapper), value); + } + + /*------------------------------------------------------------------------*/ + + /** + * Casts `value` as an array if it's not one. + * + * @static + * @memberOf _ + * @since 4.4.0 + * @category Lang + * @param {*} value The value to inspect. + * @returns {Array} Returns the cast array. + * @example + * + * _.castArray(1); + * // => [1] + * + * _.castArray({ 'a': 1 }); + * // => [{ 'a': 1 }] + * + * _.castArray('abc'); + * // => ['abc'] + * + * _.castArray(null); + * // => [null] + * + * _.castArray(undefined); + * // => [undefined] + * + * _.castArray(); + * // => [] + * + * var array = [1, 2, 3]; + * console.log(_.castArray(array) === array); + * // => true + */ + function castArray() { + if (!arguments.length) { + return []; + } + var value = arguments[0]; + return isArray(value) ? value : [value]; + } + + /** + * Creates a shallow clone of `value`. + * + * **Note:** This method is loosely based on the + * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) + * and supports cloning arrays, array buffers, booleans, date objects, maps, + * numbers, `Object` objects, regexes, sets, strings, symbols, and typed + * arrays. The own enumerable properties of `arguments` objects are cloned + * as plain objects. An empty object is returned for uncloneable values such + * as error objects, functions, DOM nodes, and WeakMaps. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to clone. + * @returns {*} Returns the cloned value. + * @see _.cloneDeep + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var shallow = _.clone(objects); + * console.log(shallow[0] === objects[0]); + * // => true + */ + function clone(value) { + return baseClone(value, CLONE_SYMBOLS_FLAG); + } + + /** + * This method is like `_.clone` except that it accepts `customizer` which + * is invoked to produce the cloned value. If `customizer` returns `undefined`, + * cloning is handled by the method instead. The `customizer` is invoked with + * up to four arguments; (value [, index|key, object, stack]). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to clone. + * @param {Function} [customizer] The function to customize cloning. + * @returns {*} Returns the cloned value. + * @see _.cloneDeepWith + * @example + * + * function customizer(value) { + * if (_.isElement(value)) { + * return value.cloneNode(false); + * } + * } + * + * var el = _.cloneWith(document.body, customizer); + * + * console.log(el === document.body); + * // => false + * console.log(el.nodeName); + * // => 'BODY' + * console.log(el.childNodes.length); + * // => 0 + */ + function cloneWith(value, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + return baseClone(value, CLONE_SYMBOLS_FLAG, customizer); + } + + /** + * This method is like `_.clone` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Lang + * @param {*} value The value to recursively clone. + * @returns {*} Returns the deep cloned value. + * @see _.clone + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var deep = _.cloneDeep(objects); + * console.log(deep[0] === objects[0]); + * // => false + */ + function cloneDeep(value) { + return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); + } + + /** + * This method is like `_.cloneWith` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to recursively clone. + * @param {Function} [customizer] The function to customize cloning. + * @returns {*} Returns the deep cloned value. + * @see _.cloneWith + * @example + * + * function customizer(value) { + * if (_.isElement(value)) { + * return value.cloneNode(true); + * } + * } + * + * var el = _.cloneDeepWith(document.body, customizer); + * + * console.log(el === document.body); + * // => false + * console.log(el.nodeName); + * // => 'BODY' + * console.log(el.childNodes.length); + * // => 20 + */ + function cloneDeepWith(value, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer); + } + + /** + * Checks if `object` conforms to `source` by invoking the predicate + * properties of `source` with the corresponding property values of `object`. + * + * **Note:** This method is equivalent to `_.conforms` when `source` is + * partially applied. + * + * @static + * @memberOf _ + * @since 4.14.0 + * @category Lang + * @param {Object} object The object to inspect. + * @param {Object} source The object of property predicates to conform to. + * @returns {boolean} Returns `true` if `object` conforms, else `false`. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * + * _.conformsTo(object, { 'b': function(n) { return n > 1; } }); + * // => true + * + * _.conformsTo(object, { 'b': function(n) { return n > 2; } }); + * // => false + */ + function conformsTo(object, source) { + return source == null || baseConformsTo(object, source, keys(source)); + } + + /** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ + function eq(value, other) { + return value === other || (value !== value && other !== other); + } + + /** + * Checks if `value` is greater than `other`. + * + * @static + * @memberOf _ + * @since 3.9.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, + * else `false`. + * @see _.lt + * @example + * + * _.gt(3, 1); + * // => true + * + * _.gt(3, 3); + * // => false + * + * _.gt(1, 3); + * // => false + */ + var gt = createRelationalOperation(baseGt); + + /** + * Checks if `value` is greater than or equal to `other`. + * + * @static + * @memberOf _ + * @since 3.9.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than or equal to + * `other`, else `false`. + * @see _.lte + * @example + * + * _.gte(3, 1); + * // => true + * + * _.gte(3, 3); + * // => true + * + * _.gte(1, 3); + * // => false + */ + var gte = createRelationalOperation(function(value, other) { + return value >= other; + }); + + /** + * Checks if `value` is likely an `arguments` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + * else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ + var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { + return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && + !propertyIsEnumerable.call(value, 'callee'); + }; + + /** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ + var isArray = Array.isArray; + + /** + * Checks if `value` is classified as an `ArrayBuffer` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. + * @example + * + * _.isArrayBuffer(new ArrayBuffer(2)); + * // => true + * + * _.isArrayBuffer(new Array(2)); + * // => false + */ + var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer; + + /** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */ + function isArrayLike(value) { + return value != null && isLength(value.length) && !isFunction(value); + } + + /** + * This method is like `_.isArrayLike` except that it also checks if `value` + * is an object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array-like object, + * else `false`. + * @example + * + * _.isArrayLikeObject([1, 2, 3]); + * // => true + * + * _.isArrayLikeObject(document.body.children); + * // => true + * + * _.isArrayLikeObject('abc'); + * // => false + * + * _.isArrayLikeObject(_.noop); + * // => false + */ + function isArrayLikeObject(value) { + return isObjectLike(value) && isArrayLike(value); + } + + /** + * Checks if `value` is classified as a boolean primitive or object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a boolean, else `false`. + * @example + * + * _.isBoolean(false); + * // => true + * + * _.isBoolean(null); + * // => false + */ + function isBoolean(value) { + return value === true || value === false || + (isObjectLike(value) && baseGetTag(value) == boolTag); + } + + /** + * Checks if `value` is a buffer. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. + * @example + * + * _.isBuffer(new Buffer(2)); + * // => true + * + * _.isBuffer(new Uint8Array(2)); + * // => false + */ + var isBuffer = nativeIsBuffer || stubFalse; + + /** + * Checks if `value` is classified as a `Date` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a date object, else `false`. + * @example + * + * _.isDate(new Date); + * // => true + * + * _.isDate('Mon April 23 2012'); + * // => false + */ + var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate; + + /** + * Checks if `value` is likely a DOM element. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`. + * @example + * + * _.isElement(document.body); + * // => true + * + * _.isElement(''); + * // => false + */ + function isElement(value) { + return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value); + } + + /** + * Checks if `value` is an empty object, collection, map, or set. + * + * Objects are considered empty if they have no own enumerable string keyed + * properties. + * + * Array-like values such as `arguments` objects, arrays, buffers, strings, or + * jQuery-like collections are considered empty if they have a `length` of `0`. + * Similarly, maps and sets are considered empty if they have a `size` of `0`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is empty, else `false`. + * @example + * + * _.isEmpty(null); + * // => true + * + * _.isEmpty(true); + * // => true + * + * _.isEmpty(1); + * // => true + * + * _.isEmpty([1, 2, 3]); + * // => false + * + * _.isEmpty({ 'a': 1 }); + * // => false + */ + function isEmpty(value) { + if (value == null) { + return true; + } + if (isArrayLike(value) && + (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' || + isBuffer(value) || isTypedArray(value) || isArguments(value))) { + return !value.length; + } + var tag = getTag(value); + if (tag == mapTag || tag == setTag) { + return !value.size; + } + if (isPrototype(value)) { + return !baseKeys(value).length; + } + for (var key in value) { + if (hasOwnProperty.call(value, key)) { + return false; + } + } + return true; + } + + /** + * Performs a deep comparison between two values to determine if they are + * equivalent. + * + * **Note:** This method supports comparing arrays, array buffers, booleans, + * date objects, error objects, maps, numbers, `Object` objects, regexes, + * sets, strings, symbols, and typed arrays. `Object` objects are compared + * by their own, not inherited, enumerable properties. Functions and DOM + * nodes are compared by strict equality, i.e. `===`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.isEqual(object, other); + * // => true + * + * object === other; + * // => false + */ + function isEqual(value, other) { + return baseIsEqual(value, other); + } + + /** + * This method is like `_.isEqual` except that it accepts `customizer` which + * is invoked to compare values. If `customizer` returns `undefined`, comparisons + * are handled by the method instead. The `customizer` is invoked with up to + * six arguments: (objValue, othValue [, index|key, object, other, stack]). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * function isGreeting(value) { + * return /^h(?:i|ello)$/.test(value); + * } + * + * function customizer(objValue, othValue) { + * if (isGreeting(objValue) && isGreeting(othValue)) { + * return true; + * } + * } + * + * var array = ['hello', 'goodbye']; + * var other = ['hi', 'goodbye']; + * + * _.isEqualWith(array, other, customizer); + * // => true + */ + function isEqualWith(value, other, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + var result = customizer ? customizer(value, other) : undefined; + return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result; + } + + /** + * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`, + * `SyntaxError`, `TypeError`, or `URIError` object. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an error object, else `false`. + * @example + * + * _.isError(new Error); + * // => true + * + * _.isError(Error); + * // => false + */ + function isError(value) { + if (!isObjectLike(value)) { + return false; + } + var tag = baseGetTag(value); + return tag == errorTag || tag == domExcTag || + (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value)); + } + + /** + * Checks if `value` is a finite primitive number. + * + * **Note:** This method is based on + * [`Number.isFinite`](https://mdn.io/Number/isFinite). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a finite number, else `false`. + * @example + * + * _.isFinite(3); + * // => true + * + * _.isFinite(Number.MIN_VALUE); + * // => true + * + * _.isFinite(Infinity); + * // => false + * + * _.isFinite('3'); + * // => false + */ + function isFinite(value) { + return typeof value == 'number' && nativeIsFinite(value); + } + + /** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ + function isFunction(value) { + if (!isObject(value)) { + return false; + } + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 9 which returns 'object' for typed arrays and other constructors. + var tag = baseGetTag(value); + return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; + } + + /** + * Checks if `value` is an integer. + * + * **Note:** This method is based on + * [`Number.isInteger`](https://mdn.io/Number/isInteger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an integer, else `false`. + * @example + * + * _.isInteger(3); + * // => true + * + * _.isInteger(Number.MIN_VALUE); + * // => false + * + * _.isInteger(Infinity); + * // => false + * + * _.isInteger('3'); + * // => false + */ + function isInteger(value) { + return typeof value == 'number' && value == toInteger(value); + } + + /** + * Checks if `value` is a valid array-like length. + * + * **Note:** This method is loosely based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */ + function isLength(value) { + return typeof value == 'number' && + value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; + } + + /** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ + function isObject(value) { + var type = typeof value; + return value != null && (type == 'object' || type == 'function'); + } + + /** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ + function isObjectLike(value) { + return value != null && typeof value == 'object'; + } + + /** + * Checks if `value` is classified as a `Map` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + * @example + * + * _.isMap(new Map); + * // => true + * + * _.isMap(new WeakMap); + * // => false + */ + var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap; + + /** + * Performs a partial deep comparison between `object` and `source` to + * determine if `object` contains equivalent property values. + * + * **Note:** This method is equivalent to `_.matches` when `source` is + * partially applied. + * + * Partial comparisons will match empty array and empty object `source` + * values against any array or object value, respectively. See `_.isEqual` + * for a list of supported value comparisons. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * + * _.isMatch(object, { 'b': 2 }); + * // => true + * + * _.isMatch(object, { 'b': 1 }); + * // => false + */ + function isMatch(object, source) { + return object === source || baseIsMatch(object, source, getMatchData(source)); + } + + /** + * This method is like `_.isMatch` except that it accepts `customizer` which + * is invoked to compare values. If `customizer` returns `undefined`, comparisons + * are handled by the method instead. The `customizer` is invoked with five + * arguments: (objValue, srcValue, index|key, object, source). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + * @example + * + * function isGreeting(value) { + * return /^h(?:i|ello)$/.test(value); + * } + * + * function customizer(objValue, srcValue) { + * if (isGreeting(objValue) && isGreeting(srcValue)) { + * return true; + * } + * } + * + * var object = { 'greeting': 'hello' }; + * var source = { 'greeting': 'hi' }; + * + * _.isMatchWith(object, source, customizer); + * // => true + */ + function isMatchWith(object, source, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + return baseIsMatch(object, source, getMatchData(source), customizer); + } + + /** + * Checks if `value` is `NaN`. + * + * **Note:** This method is based on + * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as + * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for + * `undefined` and other non-number values. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + * @example + * + * _.isNaN(NaN); + * // => true + * + * _.isNaN(new Number(NaN)); + * // => true + * + * isNaN(undefined); + * // => true + * + * _.isNaN(undefined); + * // => false + */ + function isNaN(value) { + // An `NaN` primitive is the only value that is not equal to itself. + // Perform the `toStringTag` check first to avoid errors with some + // ActiveX objects in IE. + return isNumber(value) && value != +value; + } + + /** + * Checks if `value` is a pristine native function. + * + * **Note:** This method can't reliably detect native functions in the presence + * of the core-js package because core-js circumvents this kind of detection. + * Despite multiple requests, the core-js maintainer has made it clear: any + * attempt to fix the detection will be obstructed. As a result, we're left + * with little choice but to throw an error. Unfortunately, this also affects + * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill), + * which rely on core-js. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + * @example + * + * _.isNative(Array.prototype.push); + * // => true + * + * _.isNative(_); + * // => false + */ + function isNative(value) { + if (isMaskable(value)) { + throw new Error(CORE_ERROR_TEXT); + } + return baseIsNative(value); + } + + /** + * Checks if `value` is `null`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `null`, else `false`. + * @example + * + * _.isNull(null); + * // => true + * + * _.isNull(void 0); + * // => false + */ + function isNull(value) { + return value === null; + } + + /** + * Checks if `value` is `null` or `undefined`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is nullish, else `false`. + * @example + * + * _.isNil(null); + * // => true + * + * _.isNil(void 0); + * // => true + * + * _.isNil(NaN); + * // => false + */ + function isNil(value) { + return value == null; + } + + /** + * Checks if `value` is classified as a `Number` primitive or object. + * + * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are + * classified as numbers, use the `_.isFinite` method. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a number, else `false`. + * @example + * + * _.isNumber(3); + * // => true + * + * _.isNumber(Number.MIN_VALUE); + * // => true + * + * _.isNumber(Infinity); + * // => true + * + * _.isNumber('3'); + * // => false + */ + function isNumber(value) { + return typeof value == 'number' || + (isObjectLike(value) && baseGetTag(value) == numberTag); + } + + /** + * Checks if `value` is a plain object, that is, an object created by the + * `Object` constructor or one with a `[[Prototype]]` of `null`. + * + * @static + * @memberOf _ + * @since 0.8.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * _.isPlainObject(new Foo); + * // => false + * + * _.isPlainObject([1, 2, 3]); + * // => false + * + * _.isPlainObject({ 'x': 0, 'y': 0 }); + * // => true + * + * _.isPlainObject(Object.create(null)); + * // => true + */ + function isPlainObject(value) { + if (!isObjectLike(value) || baseGetTag(value) != objectTag) { + return false; + } + var proto = getPrototype(value); + if (proto === null) { + return true; + } + var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor; + return typeof Ctor == 'function' && Ctor instanceof Ctor && + funcToString.call(Ctor) == objectCtorString; + } + + /** + * Checks if `value` is classified as a `RegExp` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. + * @example + * + * _.isRegExp(/abc/); + * // => true + * + * _.isRegExp('/abc/'); + * // => false + */ + var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp; + + /** + * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754 + * double precision number which isn't the result of a rounded unsafe integer. + * + * **Note:** This method is based on + * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`. + * @example + * + * _.isSafeInteger(3); + * // => true + * + * _.isSafeInteger(Number.MIN_VALUE); + * // => false + * + * _.isSafeInteger(Infinity); + * // => false + * + * _.isSafeInteger('3'); + * // => false + */ + function isSafeInteger(value) { + return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER; + } + + /** + * Checks if `value` is classified as a `Set` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + * @example + * + * _.isSet(new Set); + * // => true + * + * _.isSet(new WeakSet); + * // => false + */ + var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet; + + /** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a string, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ + function isString(value) { + return typeof value == 'string' || + (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag); + } + + /** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ + function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && baseGetTag(value) == symbolTag); + } + + /** + * Checks if `value` is classified as a typed array. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + * @example + * + * _.isTypedArray(new Uint8Array); + * // => true + * + * _.isTypedArray([]); + * // => false + */ + var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; + + /** + * Checks if `value` is `undefined`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. + * @example + * + * _.isUndefined(void 0); + * // => true + * + * _.isUndefined(null); + * // => false + */ + function isUndefined(value) { + return value === undefined; + } + + /** + * Checks if `value` is classified as a `WeakMap` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a weak map, else `false`. + * @example + * + * _.isWeakMap(new WeakMap); + * // => true + * + * _.isWeakMap(new Map); + * // => false + */ + function isWeakMap(value) { + return isObjectLike(value) && getTag(value) == weakMapTag; + } + + /** + * Checks if `value` is classified as a `WeakSet` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a weak set, else `false`. + * @example + * + * _.isWeakSet(new WeakSet); + * // => true + * + * _.isWeakSet(new Set); + * // => false + */ + function isWeakSet(value) { + return isObjectLike(value) && baseGetTag(value) == weakSetTag; + } + + /** + * Checks if `value` is less than `other`. + * + * @static + * @memberOf _ + * @since 3.9.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, + * else `false`. + * @see _.gt + * @example + * + * _.lt(1, 3); + * // => true + * + * _.lt(3, 3); + * // => false + * + * _.lt(3, 1); + * // => false + */ + var lt = createRelationalOperation(baseLt); + + /** + * Checks if `value` is less than or equal to `other`. + * + * @static + * @memberOf _ + * @since 3.9.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than or equal to + * `other`, else `false`. + * @see _.gte + * @example + * + * _.lte(1, 3); + * // => true + * + * _.lte(3, 3); + * // => true + * + * _.lte(3, 1); + * // => false + */ + var lte = createRelationalOperation(function(value, other) { + return value <= other; + }); + + /** + * Converts `value` to an array. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to convert. + * @returns {Array} Returns the converted array. + * @example + * + * _.toArray({ 'a': 1, 'b': 2 }); + * // => [1, 2] + * + * _.toArray('abc'); + * // => ['a', 'b', 'c'] + * + * _.toArray(1); + * // => [] + * + * _.toArray(null); + * // => [] + */ + function toArray(value) { + if (!value) { + return []; + } + if (isArrayLike(value)) { + return isString(value) ? stringToArray(value) : copyArray(value); + } + if (symIterator && value[symIterator]) { + return iteratorToArray(value[symIterator]()); + } + var tag = getTag(value), + func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values); + + return func(value); + } + + /** + * Converts `value` to a finite number. + * + * @static + * @memberOf _ + * @since 4.12.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted number. + * @example + * + * _.toFinite(3.2); + * // => 3.2 + * + * _.toFinite(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toFinite(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toFinite('3.2'); + * // => 3.2 + */ + function toFinite(value) { + if (!value) { + return value === 0 ? value : 0; + } + value = toNumber(value); + if (value === INFINITY || value === -INFINITY) { + var sign = (value < 0 ? -1 : 1); + return sign * MAX_INTEGER; + } + return value === value ? value : 0; + } + + /** + * Converts `value` to an integer. + * + * **Note:** This method is loosely based on + * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toInteger(3.2); + * // => 3 + * + * _.toInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toInteger(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toInteger('3.2'); + * // => 3 + */ + function toInteger(value) { + var result = toFinite(value), + remainder = result % 1; + + return result === result ? (remainder ? result - remainder : result) : 0; + } + + /** + * Converts `value` to an integer suitable for use as the length of an + * array-like object. + * + * **Note:** This method is based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toLength(3.2); + * // => 3 + * + * _.toLength(Number.MIN_VALUE); + * // => 0 + * + * _.toLength(Infinity); + * // => 4294967295 + * + * _.toLength('3.2'); + * // => 3 + */ + function toLength(value) { + return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0; + } + + /** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ + function toNumber(value) { + if (typeof value == 'number') { + return value; + } + if (isSymbol(value)) { + return NAN; + } + if (isObject(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = isObject(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = value.replace(reTrim, ''); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); + } + + /** + * Converts `value` to a plain object flattening inherited enumerable string + * keyed properties of `value` to own properties of the plain object. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {Object} Returns the converted plain object. + * @example + * + * function Foo() { + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.assign({ 'a': 1 }, new Foo); + * // => { 'a': 1, 'b': 2 } + * + * _.assign({ 'a': 1 }, _.toPlainObject(new Foo)); + * // => { 'a': 1, 'b': 2, 'c': 3 } + */ + function toPlainObject(value) { + return copyObject(value, keysIn(value)); + } + + /** + * Converts `value` to a safe integer. A safe integer can be compared and + * represented correctly. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toSafeInteger(3.2); + * // => 3 + * + * _.toSafeInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toSafeInteger(Infinity); + * // => 9007199254740991 + * + * _.toSafeInteger('3.2'); + * // => 3 + */ + function toSafeInteger(value) { + return value + ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER) + : (value === 0 ? value : 0); + } + + /** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ + function toString(value) { + return value == null ? '' : baseToString(value); + } + + /*------------------------------------------------------------------------*/ + + /** + * Assigns own enumerable string keyed properties of source objects to the + * destination object. Source objects are applied from left to right. + * Subsequent sources overwrite property assignments of previous sources. + * + * **Note:** This method mutates `object` and is loosely based on + * [`Object.assign`](https://mdn.io/Object/assign). + * + * @static + * @memberOf _ + * @since 0.10.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.assignIn + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * function Bar() { + * this.c = 3; + * } + * + * Foo.prototype.b = 2; + * Bar.prototype.d = 4; + * + * _.assign({ 'a': 0 }, new Foo, new Bar); + * // => { 'a': 1, 'c': 3 } + */ + var assign = createAssigner(function(object, source) { + if (isPrototype(source) || isArrayLike(source)) { + copyObject(source, keys(source), object); + return; + } + for (var key in source) { + if (hasOwnProperty.call(source, key)) { + assignValue(object, key, source[key]); + } + } + }); + + /** + * This method is like `_.assign` except that it iterates over own and + * inherited source properties. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias extend + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.assign + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * function Bar() { + * this.c = 3; + * } + * + * Foo.prototype.b = 2; + * Bar.prototype.d = 4; + * + * _.assignIn({ 'a': 0 }, new Foo, new Bar); + * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 } + */ + var assignIn = createAssigner(function(object, source) { + copyObject(source, keysIn(source), object); + }); + + /** + * This method is like `_.assignIn` except that it accepts `customizer` + * which is invoked to produce the assigned values. If `customizer` returns + * `undefined`, assignment is handled by the method instead. The `customizer` + * is invoked with five arguments: (objValue, srcValue, key, object, source). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias extendWith + * @category Object + * @param {Object} object The destination object. + * @param {...Object} sources The source objects. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @see _.assignWith + * @example + * + * function customizer(objValue, srcValue) { + * return _.isUndefined(objValue) ? srcValue : objValue; + * } + * + * var defaults = _.partialRight(_.assignInWith, customizer); + * + * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ + var assignInWith = createAssigner(function(object, source, srcIndex, customizer) { + copyObject(source, keysIn(source), object, customizer); + }); + + /** + * This method is like `_.assign` except that it accepts `customizer` + * which is invoked to produce the assigned values. If `customizer` returns + * `undefined`, assignment is handled by the method instead. The `customizer` + * is invoked with five arguments: (objValue, srcValue, key, object, source). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} sources The source objects. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @see _.assignInWith + * @example + * + * function customizer(objValue, srcValue) { + * return _.isUndefined(objValue) ? srcValue : objValue; + * } + * + * var defaults = _.partialRight(_.assignWith, customizer); + * + * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ + var assignWith = createAssigner(function(object, source, srcIndex, customizer) { + copyObject(source, keys(source), object, customizer); + }); + + /** + * Creates an array of values corresponding to `paths` of `object`. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Array} Returns the picked values. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; + * + * _.at(object, ['a[0].b.c', 'a[1]']); + * // => [3, 4] + */ + var at = flatRest(baseAt); + + /** + * Creates an object that inherits from the `prototype` object. If a + * `properties` object is given, its own enumerable string keyed properties + * are assigned to the created object. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Object + * @param {Object} prototype The object to inherit from. + * @param {Object} [properties] The properties to assign to the object. + * @returns {Object} Returns the new object. + * @example + * + * function Shape() { + * this.x = 0; + * this.y = 0; + * } + * + * function Circle() { + * Shape.call(this); + * } + * + * Circle.prototype = _.create(Shape.prototype, { + * 'constructor': Circle + * }); + * + * var circle = new Circle; + * circle instanceof Circle; + * // => true + * + * circle instanceof Shape; + * // => true + */ + function create(prototype, properties) { + var result = baseCreate(prototype); + return properties == null ? result : baseAssign(result, properties); + } + + /** + * Assigns own and inherited enumerable string keyed properties of source + * objects to the destination object for all destination properties that + * resolve to `undefined`. Source objects are applied from left to right. + * Once a property is set, additional values of the same property are ignored. + * + * **Note:** This method mutates `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.defaultsDeep + * @example + * + * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ + var defaults = baseRest(function(object, sources) { + object = Object(object); + + var index = -1; + var length = sources.length; + var guard = length > 2 ? sources[2] : undefined; + + if (guard && isIterateeCall(sources[0], sources[1], guard)) { + length = 1; + } + + while (++index < length) { + var source = sources[index]; + var props = keysIn(source); + var propsIndex = -1; + var propsLength = props.length; + + while (++propsIndex < propsLength) { + var key = props[propsIndex]; + var value = object[key]; + + if (value === undefined || + (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { + object[key] = source[key]; + } + } + } + + return object; + }); + + /** + * This method is like `_.defaults` except that it recursively assigns + * default properties. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 3.10.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.defaults + * @example + * + * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } }); + * // => { 'a': { 'b': 2, 'c': 3 } } + */ + var defaultsDeep = baseRest(function(args) { + args.push(undefined, customDefaultsMerge); + return apply(mergeWith, undefined, args); + }); + + /** + * This method is like `_.find` except that it returns the key of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Object + * @param {Object} object The object to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {string|undefined} Returns the key of the matched element, + * else `undefined`. + * @example + * + * var users = { + * 'barney': { 'age': 36, 'active': true }, + * 'fred': { 'age': 40, 'active': false }, + * 'pebbles': { 'age': 1, 'active': true } + * }; + * + * _.findKey(users, function(o) { return o.age < 40; }); + * // => 'barney' (iteration order is not guaranteed) + * + * // The `_.matches` iteratee shorthand. + * _.findKey(users, { 'age': 1, 'active': true }); + * // => 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findKey(users, ['active', false]); + * // => 'fred' + * + * // The `_.property` iteratee shorthand. + * _.findKey(users, 'active'); + * // => 'barney' + */ + function findKey(object, predicate) { + return baseFindKey(object, getIteratee(predicate, 3), baseForOwn); + } + + /** + * This method is like `_.findKey` except that it iterates over elements of + * a collection in the opposite order. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Object + * @param {Object} object The object to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {string|undefined} Returns the key of the matched element, + * else `undefined`. + * @example + * + * var users = { + * 'barney': { 'age': 36, 'active': true }, + * 'fred': { 'age': 40, 'active': false }, + * 'pebbles': { 'age': 1, 'active': true } + * }; + * + * _.findLastKey(users, function(o) { return o.age < 40; }); + * // => returns 'pebbles' assuming `_.findKey` returns 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.findLastKey(users, { 'age': 36, 'active': true }); + * // => 'barney' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findLastKey(users, ['active', false]); + * // => 'fred' + * + * // The `_.property` iteratee shorthand. + * _.findLastKey(users, 'active'); + * // => 'pebbles' + */ + function findLastKey(object, predicate) { + return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight); + } + + /** + * Iterates over own and inherited enumerable string keyed properties of an + * object and invokes `iteratee` for each property. The iteratee is invoked + * with three arguments: (value, key, object). Iteratee functions may exit + * iteration early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forInRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forIn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). + */ + function forIn(object, iteratee) { + return object == null + ? object + : baseFor(object, getIteratee(iteratee, 3), keysIn); + } + + /** + * This method is like `_.forIn` except that it iterates over properties of + * `object` in the opposite order. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forIn + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forInRight(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'. + */ + function forInRight(object, iteratee) { + return object == null + ? object + : baseForRight(object, getIteratee(iteratee, 3), keysIn); + } + + /** + * Iterates over own enumerable string keyed properties of an object and + * invokes `iteratee` for each property. The iteratee is invoked with three + * arguments: (value, key, object). Iteratee functions may exit iteration + * early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forOwnRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ + function forOwn(object, iteratee) { + return object && baseForOwn(object, getIteratee(iteratee, 3)); + } + + /** + * This method is like `_.forOwn` except that it iterates over properties of + * `object` in the opposite order. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forOwn + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwnRight(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'. + */ + function forOwnRight(object, iteratee) { + return object && baseForOwnRight(object, getIteratee(iteratee, 3)); + } + + /** + * Creates an array of function property names from own enumerable properties + * of `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to inspect. + * @returns {Array} Returns the function names. + * @see _.functionsIn + * @example + * + * function Foo() { + * this.a = _.constant('a'); + * this.b = _.constant('b'); + * } + * + * Foo.prototype.c = _.constant('c'); + * + * _.functions(new Foo); + * // => ['a', 'b'] + */ + function functions(object) { + return object == null ? [] : baseFunctions(object, keys(object)); + } + + /** + * Creates an array of function property names from own and inherited + * enumerable properties of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to inspect. + * @returns {Array} Returns the function names. + * @see _.functions + * @example + * + * function Foo() { + * this.a = _.constant('a'); + * this.b = _.constant('b'); + * } + * + * Foo.prototype.c = _.constant('c'); + * + * _.functionsIn(new Foo); + * // => ['a', 'b', 'c'] + */ + function functionsIn(object) { + return object == null ? [] : baseFunctions(object, keysIn(object)); + } + + /** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ + function get(object, path, defaultValue) { + var result = object == null ? undefined : baseGet(object, path); + return result === undefined ? defaultValue : result; + } + + /** + * Checks if `path` is a direct property of `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = { 'a': { 'b': 2 } }; + * var other = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.has(object, 'a'); + * // => true + * + * _.has(object, 'a.b'); + * // => true + * + * _.has(object, ['a', 'b']); + * // => true + * + * _.has(other, 'a'); + * // => false + */ + function has(object, path) { + return object != null && hasPath(object, path, baseHas); + } + + /** + * Checks if `path` is a direct or inherited property of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.hasIn(object, 'a'); + * // => true + * + * _.hasIn(object, 'a.b'); + * // => true + * + * _.hasIn(object, ['a', 'b']); + * // => true + * + * _.hasIn(object, 'b'); + * // => false + */ + function hasIn(object, path) { + return object != null && hasPath(object, path, baseHasIn); + } + + /** + * Creates an object composed of the inverted keys and values of `object`. + * If `object` contains duplicate values, subsequent values overwrite + * property assignments of previous values. + * + * @static + * @memberOf _ + * @since 0.7.0 + * @category Object + * @param {Object} object The object to invert. + * @returns {Object} Returns the new inverted object. + * @example + * + * var object = { 'a': 1, 'b': 2, 'c': 1 }; + * + * _.invert(object); + * // => { '1': 'c', '2': 'b' } + */ + var invert = createInverter(function(result, value, key) { + if (value != null && + typeof value.toString != 'function') { + value = nativeObjectToString.call(value); + } + + result[value] = key; + }, constant(identity)); + + /** + * This method is like `_.invert` except that the inverted object is generated + * from the results of running each element of `object` thru `iteratee`. The + * corresponding inverted value of each inverted key is an array of keys + * responsible for generating the inverted value. The iteratee is invoked + * with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.1.0 + * @category Object + * @param {Object} object The object to invert. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Object} Returns the new inverted object. + * @example + * + * var object = { 'a': 1, 'b': 2, 'c': 1 }; + * + * _.invertBy(object); + * // => { '1': ['a', 'c'], '2': ['b'] } + * + * _.invertBy(object, function(value) { + * return 'group' + value; + * }); + * // => { 'group1': ['a', 'c'], 'group2': ['b'] } + */ + var invertBy = createInverter(function(result, value, key) { + if (value != null && + typeof value.toString != 'function') { + value = nativeObjectToString.call(value); + } + + if (hasOwnProperty.call(result, value)) { + result[value].push(key); + } else { + result[value] = [key]; + } + }, getIteratee); + + /** + * Invokes the method at `path` of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the method to invoke. + * @param {...*} [args] The arguments to invoke the method with. + * @returns {*} Returns the result of the invoked method. + * @example + * + * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] }; + * + * _.invoke(object, 'a[0].b.c.slice', 1, 3); + * // => [2, 3] + */ + var invoke = baseRest(baseInvoke); + + /** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ + function keys(object) { + return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); + } + + /** + * Creates an array of the own and inherited enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keysIn(new Foo); + * // => ['a', 'b', 'c'] (iteration order is not guaranteed) + */ + function keysIn(object) { + return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); + } + + /** + * The opposite of `_.mapValues`; this method creates an object with the + * same values as `object` and keys generated by running each own enumerable + * string keyed property of `object` thru `iteratee`. The iteratee is invoked + * with three arguments: (value, key, object). + * + * @static + * @memberOf _ + * @since 3.8.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns the new mapped object. + * @see _.mapValues + * @example + * + * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) { + * return key + value; + * }); + * // => { 'a1': 1, 'b2': 2 } + */ + function mapKeys(object, iteratee) { + var result = {}; + iteratee = getIteratee(iteratee, 3); + + baseForOwn(object, function(value, key, object) { + baseAssignValue(result, iteratee(value, key, object), value); + }); + return result; + } + + /** + * Creates an object with the same keys as `object` and values generated + * by running each own enumerable string keyed property of `object` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, key, object). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns the new mapped object. + * @see _.mapKeys + * @example + * + * var users = { + * 'fred': { 'user': 'fred', 'age': 40 }, + * 'pebbles': { 'user': 'pebbles', 'age': 1 } + * }; + * + * _.mapValues(users, function(o) { return o.age; }); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + * + * // The `_.property` iteratee shorthand. + * _.mapValues(users, 'age'); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + */ + function mapValues(object, iteratee) { + var result = {}; + iteratee = getIteratee(iteratee, 3); + + baseForOwn(object, function(value, key, object) { + baseAssignValue(result, key, iteratee(value, key, object)); + }); + return result; + } + + /** + * This method is like `_.assign` except that it recursively merges own and + * inherited enumerable string keyed properties of source objects into the + * destination object. Source properties that resolve to `undefined` are + * skipped if a destination value exists. Array and plain object properties + * are merged recursively. Other objects and value types are overridden by + * assignment. Source objects are applied from left to right. Subsequent + * sources overwrite property assignments of previous sources. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 0.5.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @example + * + * var object = { + * 'a': [{ 'b': 2 }, { 'd': 4 }] + * }; + * + * var other = { + * 'a': [{ 'c': 3 }, { 'e': 5 }] + * }; + * + * _.merge(object, other); + * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] } + */ + var merge = createAssigner(function(object, source, srcIndex) { + baseMerge(object, source, srcIndex); + }); + + /** + * This method is like `_.merge` except that it accepts `customizer` which + * is invoked to produce the merged values of the destination and source + * properties. If `customizer` returns `undefined`, merging is handled by the + * method instead. The `customizer` is invoked with six arguments: + * (objValue, srcValue, key, object, source, stack). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} sources The source objects. + * @param {Function} customizer The function to customize assigned values. + * @returns {Object} Returns `object`. + * @example + * + * function customizer(objValue, srcValue) { + * if (_.isArray(objValue)) { + * return objValue.concat(srcValue); + * } + * } + * + * var object = { 'a': [1], 'b': [2] }; + * var other = { 'a': [3], 'b': [4] }; + * + * _.mergeWith(object, other, customizer); + * // => { 'a': [1, 3], 'b': [2, 4] } + */ + var mergeWith = createAssigner(function(object, source, srcIndex, customizer) { + baseMerge(object, source, srcIndex, customizer); + }); + + /** + * The opposite of `_.pick`; this method creates an object composed of the + * own and inherited enumerable property paths of `object` that are not omitted. + * + * **Note:** This method is considerably slower than `_.pick`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [paths] The property paths to omit. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.omit(object, ['a', 'c']); + * // => { 'b': '2' } + */ + var omit = flatRest(function(object, paths) { + var result = {}; + if (object == null) { + return result; + } + var isDeep = false; + paths = arrayMap(paths, function(path) { + path = castPath(path, object); + isDeep || (isDeep = path.length > 1); + return path; + }); + copyObject(object, getAllKeysIn(object), result); + if (isDeep) { + result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone); + } + var length = paths.length; + while (length--) { + baseUnset(result, paths[length]); + } + return result; + }); + + /** + * The opposite of `_.pickBy`; this method creates an object composed of + * the own and inherited enumerable string keyed properties of `object` that + * `predicate` doesn't return truthy for. The predicate is invoked with two + * arguments: (value, key). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The source object. + * @param {Function} [predicate=_.identity] The function invoked per property. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.omitBy(object, _.isNumber); + * // => { 'b': '2' } + */ + function omitBy(object, predicate) { + return pickBy(object, negate(getIteratee(predicate))); + } + + /** + * Creates an object composed of the picked `object` properties. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pick(object, ['a', 'c']); + * // => { 'a': 1, 'c': 3 } + */ + var pick = flatRest(function(object, paths) { + return object == null ? {} : basePick(object, paths); + }); + + /** + * Creates an object composed of the `object` properties `predicate` returns + * truthy for. The predicate is invoked with two arguments: (value, key). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The source object. + * @param {Function} [predicate=_.identity] The function invoked per property. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pickBy(object, _.isNumber); + * // => { 'a': 1, 'c': 3 } + */ + function pickBy(object, predicate) { + if (object == null) { + return {}; + } + var props = arrayMap(getAllKeysIn(object), function(prop) { + return [prop]; + }); + predicate = getIteratee(predicate); + return basePickBy(object, props, function(value, path) { + return predicate(value, path[0]); + }); + } + + /** + * This method is like `_.get` except that if the resolved value is a + * function it's invoked with the `this` binding of its parent object and + * its result is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to resolve. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] }; + * + * _.result(object, 'a[0].b.c1'); + * // => 3 + * + * _.result(object, 'a[0].b.c2'); + * // => 4 + * + * _.result(object, 'a[0].b.c3', 'default'); + * // => 'default' + * + * _.result(object, 'a[0].b.c3', _.constant('default')); + * // => 'default' + */ + function result(object, path, defaultValue) { + path = castPath(path, object); + + var index = -1, + length = path.length; + + // Ensure the loop is entered when path is empty. + if (!length) { + length = 1; + object = undefined; + } + while (++index < length) { + var value = object == null ? undefined : object[toKey(path[index])]; + if (value === undefined) { + index = length; + value = defaultValue; + } + object = isFunction(value) ? value.call(object) : value; + } + return object; + } + + /** + * Sets the value at `path` of `object`. If a portion of `path` doesn't exist, + * it's created. Arrays are created for missing index properties while objects + * are created for all other missing properties. Use `_.setWith` to customize + * `path` creation. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @returns {Object} Returns `object`. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.set(object, 'a[0].b.c', 4); + * console.log(object.a[0].b.c); + * // => 4 + * + * _.set(object, ['x', '0', 'y', 'z'], 5); + * console.log(object.x[0].y.z); + * // => 5 + */ + function set(object, path, value) { + return object == null ? object : baseSet(object, path, value); + } + + /** + * This method is like `_.set` except that it accepts `customizer` which is + * invoked to produce the objects of `path`. If `customizer` returns `undefined` + * path creation is handled by the method instead. The `customizer` is invoked + * with three arguments: (nsValue, key, nsObject). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @example + * + * var object = {}; + * + * _.setWith(object, '[0][1]', 'a', Object); + * // => { '0': { '1': 'a' } } + */ + function setWith(object, path, value, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + return object == null ? object : baseSet(object, path, value, customizer); + } + + /** + * Creates an array of own enumerable string keyed-value pairs for `object` + * which can be consumed by `_.fromPairs`. If `object` is a map or set, its + * entries are returned. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias entries + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the key-value pairs. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.toPairs(new Foo); + * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed) + */ + var toPairs = createToPairs(keys); + + /** + * Creates an array of own and inherited enumerable string keyed-value pairs + * for `object` which can be consumed by `_.fromPairs`. If `object` is a map + * or set, its entries are returned. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias entriesIn + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the key-value pairs. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.toPairsIn(new Foo); + * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed) + */ + var toPairsIn = createToPairs(keysIn); + + /** + * An alternative to `_.reduce`; this method transforms `object` to a new + * `accumulator` object which is the result of running each of its own + * enumerable string keyed properties thru `iteratee`, with each invocation + * potentially mutating the `accumulator` object. If `accumulator` is not + * provided, a new object with the same `[[Prototype]]` will be used. The + * iteratee is invoked with four arguments: (accumulator, value, key, object). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 1.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The custom accumulator value. + * @returns {*} Returns the accumulated value. + * @example + * + * _.transform([2, 3, 4], function(result, n) { + * result.push(n *= n); + * return n % 2 == 0; + * }, []); + * // => [4, 9] + * + * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + * (result[value] || (result[value] = [])).push(key); + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } + */ + function transform(object, iteratee, accumulator) { + var isArr = isArray(object), + isArrLike = isArr || isBuffer(object) || isTypedArray(object); + + iteratee = getIteratee(iteratee, 4); + if (accumulator == null) { + var Ctor = object && object.constructor; + if (isArrLike) { + accumulator = isArr ? new Ctor : []; + } + else if (isObject(object)) { + accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {}; + } + else { + accumulator = {}; + } + } + (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) { + return iteratee(accumulator, value, index, object); + }); + return accumulator; + } + + /** + * Removes the property at `path` of `object`. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to unset. + * @returns {boolean} Returns `true` if the property is deleted, else `false`. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 7 } }] }; + * _.unset(object, 'a[0].b.c'); + * // => true + * + * console.log(object); + * // => { 'a': [{ 'b': {} }] }; + * + * _.unset(object, ['a', '0', 'b', 'c']); + * // => true + * + * console.log(object); + * // => { 'a': [{ 'b': {} }] }; + */ + function unset(object, path) { + return object == null ? true : baseUnset(object, path); + } + + /** + * This method is like `_.set` except that accepts `updater` to produce the + * value to set. Use `_.updateWith` to customize `path` creation. The `updater` + * is invoked with one argument: (value). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.6.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {Function} updater The function to produce the updated value. + * @returns {Object} Returns `object`. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.update(object, 'a[0].b.c', function(n) { return n * n; }); + * console.log(object.a[0].b.c); + * // => 9 + * + * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; }); + * console.log(object.x[0].y.z); + * // => 0 + */ + function update(object, path, updater) { + return object == null ? object : baseUpdate(object, path, castFunction(updater)); + } + + /** + * This method is like `_.update` except that it accepts `customizer` which is + * invoked to produce the objects of `path`. If `customizer` returns `undefined` + * path creation is handled by the method instead. The `customizer` is invoked + * with three arguments: (nsValue, key, nsObject). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.6.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {Function} updater The function to produce the updated value. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @example + * + * var object = {}; + * + * _.updateWith(object, '[0][1]', _.constant('a'), Object); + * // => { '0': { '1': 'a' } } + */ + function updateWith(object, path, updater, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer); + } + + /** + * Creates an array of the own enumerable string keyed property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ + function values(object) { + return object == null ? [] : baseValues(object, keys(object)); + } + + /** + * Creates an array of the own and inherited enumerable string keyed property + * values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.valuesIn(new Foo); + * // => [1, 2, 3] (iteration order is not guaranteed) + */ + function valuesIn(object) { + return object == null ? [] : baseValues(object, keysIn(object)); + } + + /*------------------------------------------------------------------------*/ + + /** + * Clamps `number` within the inclusive `lower` and `upper` bounds. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Number + * @param {number} number The number to clamp. + * @param {number} [lower] The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the clamped number. + * @example + * + * _.clamp(-10, -5, 5); + * // => -5 + * + * _.clamp(10, -5, 5); + * // => 5 + */ + function clamp(number, lower, upper) { + if (upper === undefined) { + upper = lower; + lower = undefined; + } + if (upper !== undefined) { + upper = toNumber(upper); + upper = upper === upper ? upper : 0; + } + if (lower !== undefined) { + lower = toNumber(lower); + lower = lower === lower ? lower : 0; + } + return baseClamp(toNumber(number), lower, upper); + } + + /** + * Checks if `n` is between `start` and up to, but not including, `end`. If + * `end` is not specified, it's set to `start` with `start` then set to `0`. + * If `start` is greater than `end` the params are swapped to support + * negative ranges. + * + * @static + * @memberOf _ + * @since 3.3.0 + * @category Number + * @param {number} number The number to check. + * @param {number} [start=0] The start of the range. + * @param {number} end The end of the range. + * @returns {boolean} Returns `true` if `number` is in the range, else `false`. + * @see _.range, _.rangeRight + * @example + * + * _.inRange(3, 2, 4); + * // => true + * + * _.inRange(4, 8); + * // => true + * + * _.inRange(4, 2); + * // => false + * + * _.inRange(2, 2); + * // => false + * + * _.inRange(1.2, 2); + * // => true + * + * _.inRange(5.2, 4); + * // => false + * + * _.inRange(-3, -2, -6); + * // => true + */ + function inRange(number, start, end) { + start = toFinite(start); + if (end === undefined) { + end = start; + start = 0; + } else { + end = toFinite(end); + } + number = toNumber(number); + return baseInRange(number, start, end); + } + + /** + * Produces a random number between the inclusive `lower` and `upper` bounds. + * If only one argument is provided a number between `0` and the given number + * is returned. If `floating` is `true`, or either `lower` or `upper` are + * floats, a floating-point number is returned instead of an integer. + * + * **Note:** JavaScript follows the IEEE-754 standard for resolving + * floating-point values which can produce unexpected results. + * + * @static + * @memberOf _ + * @since 0.7.0 + * @category Number + * @param {number} [lower=0] The lower bound. + * @param {number} [upper=1] The upper bound. + * @param {boolean} [floating] Specify returning a floating-point number. + * @returns {number} Returns the random number. + * @example + * + * _.random(0, 5); + * // => an integer between 0 and 5 + * + * _.random(5); + * // => also an integer between 0 and 5 + * + * _.random(5, true); + * // => a floating-point number between 0 and 5 + * + * _.random(1.2, 5.2); + * // => a floating-point number between 1.2 and 5.2 + */ + function random(lower, upper, floating) { + if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) { + upper = floating = undefined; + } + if (floating === undefined) { + if (typeof upper == 'boolean') { + floating = upper; + upper = undefined; + } + else if (typeof lower == 'boolean') { + floating = lower; + lower = undefined; + } + } + if (lower === undefined && upper === undefined) { + lower = 0; + upper = 1; + } + else { + lower = toFinite(lower); + if (upper === undefined) { + upper = lower; + lower = 0; + } else { + upper = toFinite(upper); + } + } + if (lower > upper) { + var temp = lower; + lower = upper; + upper = temp; + } + if (floating || lower % 1 || upper % 1) { + var rand = nativeRandom(); + return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper); + } + return baseRandom(lower, upper); + } + + /*------------------------------------------------------------------------*/ + + /** + * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the camel cased string. + * @example + * + * _.camelCase('Foo Bar'); + * // => 'fooBar' + * + * _.camelCase('--foo-bar--'); + * // => 'fooBar' + * + * _.camelCase('__FOO_BAR__'); + * // => 'fooBar' + */ + var camelCase = createCompounder(function(result, word, index) { + word = word.toLowerCase(); + return result + (index ? capitalize(word) : word); + }); + + /** + * Converts the first character of `string` to upper case and the remaining + * to lower case. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to capitalize. + * @returns {string} Returns the capitalized string. + * @example + * + * _.capitalize('FRED'); + * // => 'Fred' + */ + function capitalize(string) { + return upperFirst(toString(string).toLowerCase()); + } + + /** + * Deburrs `string` by converting + * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table) + * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A) + * letters to basic Latin letters and removing + * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to deburr. + * @returns {string} Returns the deburred string. + * @example + * + * _.deburr('déjà vu'); + * // => 'deja vu' + */ + function deburr(string) { + string = toString(string); + return string && string.replace(reLatin, deburrLetter).replace(reComboMark, ''); + } + + /** + * Checks if `string` ends with the given target string. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to inspect. + * @param {string} [target] The string to search for. + * @param {number} [position=string.length] The position to search up to. + * @returns {boolean} Returns `true` if `string` ends with `target`, + * else `false`. + * @example + * + * _.endsWith('abc', 'c'); + * // => true + * + * _.endsWith('abc', 'b'); + * // => false + * + * _.endsWith('abc', 'b', 2); + * // => true + */ + function endsWith(string, target, position) { + string = toString(string); + target = baseToString(target); + + var length = string.length; + position = position === undefined + ? length + : baseClamp(toInteger(position), 0, length); + + var end = position; + position -= target.length; + return position >= 0 && string.slice(position, end) == target; + } + + /** + * Converts the characters "&", "<", ">", '"', and "'" in `string` to their + * corresponding HTML entities. + * + * **Note:** No other characters are escaped. To escape additional + * characters use a third-party library like [_he_](https://mths.be/he). + * + * Though the ">" character is escaped for symmetry, characters like + * ">" and "/" don't need escaping in HTML and have no special meaning + * unless they're part of a tag or unquoted attribute value. See + * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands) + * (under "semi-related fun fact") for more details. + * + * When working with HTML you should always + * [quote attribute values](http://wonko.com/post/html-escaping) to reduce + * XSS vectors. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category String + * @param {string} [string=''] The string to escape. + * @returns {string} Returns the escaped string. + * @example + * + * _.escape('fred, barney, & pebbles'); + * // => 'fred, barney, & pebbles' + */ + function escape(string) { + string = toString(string); + return (string && reHasUnescapedHtml.test(string)) + ? string.replace(reUnescapedHtml, escapeHtmlChar) + : string; + } + + /** + * Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+", + * "?", "(", ")", "[", "]", "{", "}", and "|" in `string`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to escape. + * @returns {string} Returns the escaped string. + * @example + * + * _.escapeRegExp('[lodash](https://lodash.com/)'); + * // => '\[lodash\]\(https://lodash\.com/\)' + */ + function escapeRegExp(string) { + string = toString(string); + return (string && reHasRegExpChar.test(string)) + ? string.replace(reRegExpChar, '\\$&') + : string; + } + + /** + * Converts `string` to + * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the kebab cased string. + * @example + * + * _.kebabCase('Foo Bar'); + * // => 'foo-bar' + * + * _.kebabCase('fooBar'); + * // => 'foo-bar' + * + * _.kebabCase('__FOO_BAR__'); + * // => 'foo-bar' + */ + var kebabCase = createCompounder(function(result, word, index) { + return result + (index ? '-' : '') + word.toLowerCase(); + }); + + /** + * Converts `string`, as space separated words, to lower case. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the lower cased string. + * @example + * + * _.lowerCase('--Foo-Bar--'); + * // => 'foo bar' + * + * _.lowerCase('fooBar'); + * // => 'foo bar' + * + * _.lowerCase('__FOO_BAR__'); + * // => 'foo bar' + */ + var lowerCase = createCompounder(function(result, word, index) { + return result + (index ? ' ' : '') + word.toLowerCase(); + }); + + /** + * Converts the first character of `string` to lower case. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.lowerFirst('Fred'); + * // => 'fred' + * + * _.lowerFirst('FRED'); + * // => 'fRED' + */ + var lowerFirst = createCaseFirst('toLowerCase'); + + /** + * Pads `string` on the left and right sides if it's shorter than `length`. + * Padding characters are truncated if they can't be evenly divided by `length`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to pad. + * @param {number} [length=0] The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padded string. + * @example + * + * _.pad('abc', 8); + * // => ' abc ' + * + * _.pad('abc', 8, '_-'); + * // => '_-abc_-_' + * + * _.pad('abc', 3); + * // => 'abc' + */ + function pad(string, length, chars) { + string = toString(string); + length = toInteger(length); + + var strLength = length ? stringSize(string) : 0; + if (!length || strLength >= length) { + return string; + } + var mid = (length - strLength) / 2; + return ( + createPadding(nativeFloor(mid), chars) + + string + + createPadding(nativeCeil(mid), chars) + ); + } + + /** + * Pads `string` on the right side if it's shorter than `length`. Padding + * characters are truncated if they exceed `length`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to pad. + * @param {number} [length=0] The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padded string. + * @example + * + * _.padEnd('abc', 6); + * // => 'abc ' + * + * _.padEnd('abc', 6, '_-'); + * // => 'abc_-_' + * + * _.padEnd('abc', 3); + * // => 'abc' + */ + function padEnd(string, length, chars) { + string = toString(string); + length = toInteger(length); + + var strLength = length ? stringSize(string) : 0; + return (length && strLength < length) + ? (string + createPadding(length - strLength, chars)) + : string; + } + + /** + * Pads `string` on the left side if it's shorter than `length`. Padding + * characters are truncated if they exceed `length`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to pad. + * @param {number} [length=0] The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padded string. + * @example + * + * _.padStart('abc', 6); + * // => ' abc' + * + * _.padStart('abc', 6, '_-'); + * // => '_-_abc' + * + * _.padStart('abc', 3); + * // => 'abc' + */ + function padStart(string, length, chars) { + string = toString(string); + length = toInteger(length); + + var strLength = length ? stringSize(string) : 0; + return (length && strLength < length) + ? (createPadding(length - strLength, chars) + string) + : string; + } + + /** + * Converts `string` to an integer of the specified radix. If `radix` is + * `undefined` or `0`, a `radix` of `10` is used unless `value` is a + * hexadecimal, in which case a `radix` of `16` is used. + * + * **Note:** This method aligns with the + * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category String + * @param {string} string The string to convert. + * @param {number} [radix=10] The radix to interpret `value` by. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {number} Returns the converted integer. + * @example + * + * _.parseInt('08'); + * // => 8 + * + * _.map(['6', '08', '10'], _.parseInt); + * // => [6, 8, 10] + */ + function parseInt(string, radix, guard) { + if (guard || radix == null) { + radix = 0; + } else if (radix) { + radix = +radix; + } + return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0); + } + + /** + * Repeats the given string `n` times. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to repeat. + * @param {number} [n=1] The number of times to repeat the string. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {string} Returns the repeated string. + * @example + * + * _.repeat('*', 3); + * // => '***' + * + * _.repeat('abc', 2); + * // => 'abcabc' + * + * _.repeat('abc', 0); + * // => '' + */ + function repeat(string, n, guard) { + if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) { + n = 1; + } else { + n = toInteger(n); + } + return baseRepeat(toString(string), n); + } + + /** + * Replaces matches for `pattern` in `string` with `replacement`. + * + * **Note:** This method is based on + * [`String#replace`](https://mdn.io/String/replace). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to modify. + * @param {RegExp|string} pattern The pattern to replace. + * @param {Function|string} replacement The match replacement. + * @returns {string} Returns the modified string. + * @example + * + * _.replace('Hi Fred', 'Fred', 'Barney'); + * // => 'Hi Barney' + */ + function replace() { + var args = arguments, + string = toString(args[0]); + + return args.length < 3 ? string : string.replace(args[1], args[2]); + } + + /** + * Converts `string` to + * [snake case](https://en.wikipedia.org/wiki/Snake_case). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the snake cased string. + * @example + * + * _.snakeCase('Foo Bar'); + * // => 'foo_bar' + * + * _.snakeCase('fooBar'); + * // => 'foo_bar' + * + * _.snakeCase('--FOO-BAR--'); + * // => 'foo_bar' + */ + var snakeCase = createCompounder(function(result, word, index) { + return result + (index ? '_' : '') + word.toLowerCase(); + }); + + /** + * Splits `string` by `separator`. + * + * **Note:** This method is based on + * [`String#split`](https://mdn.io/String/split). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to split. + * @param {RegExp|string} separator The separator pattern to split by. + * @param {number} [limit] The length to truncate results to. + * @returns {Array} Returns the string segments. + * @example + * + * _.split('a-b-c', '-', 2); + * // => ['a', 'b'] + */ + function split(string, separator, limit) { + if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) { + separator = limit = undefined; + } + limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0; + if (!limit) { + return []; + } + string = toString(string); + if (string && ( + typeof separator == 'string' || + (separator != null && !isRegExp(separator)) + )) { + separator = baseToString(separator); + if (!separator && hasUnicode(string)) { + return castSlice(stringToArray(string), 0, limit); + } + } + return string.split(separator, limit); + } + + /** + * Converts `string` to + * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage). + * + * @static + * @memberOf _ + * @since 3.1.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the start cased string. + * @example + * + * _.startCase('--foo-bar--'); + * // => 'Foo Bar' + * + * _.startCase('fooBar'); + * // => 'Foo Bar' + * + * _.startCase('__FOO_BAR__'); + * // => 'FOO BAR' + */ + var startCase = createCompounder(function(result, word, index) { + return result + (index ? ' ' : '') + upperFirst(word); + }); + + /** + * Checks if `string` starts with the given target string. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to inspect. + * @param {string} [target] The string to search for. + * @param {number} [position=0] The position to search from. + * @returns {boolean} Returns `true` if `string` starts with `target`, + * else `false`. + * @example + * + * _.startsWith('abc', 'a'); + * // => true + * + * _.startsWith('abc', 'b'); + * // => false + * + * _.startsWith('abc', 'b', 1); + * // => true + */ + function startsWith(string, target, position) { + string = toString(string); + position = position == null + ? 0 + : baseClamp(toInteger(position), 0, string.length); + + target = baseToString(target); + return string.slice(position, position + target.length) == target; + } + + /** + * Creates a compiled template function that can interpolate data properties + * in "interpolate" delimiters, HTML-escape interpolated data properties in + * "escape" delimiters, and execute JavaScript in "evaluate" delimiters. Data + * properties may be accessed as free variables in the template. If a setting + * object is given, it takes precedence over `_.templateSettings` values. + * + * **Note:** In the development build `_.template` utilizes + * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl) + * for easier debugging. + * + * For more information on precompiling templates see + * [lodash's custom builds documentation](https://lodash.com/custom-builds). + * + * For more information on Chrome extension sandboxes see + * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval). + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category String + * @param {string} [string=''] The template string. + * @param {Object} [options={}] The options object. + * @param {RegExp} [options.escape=_.templateSettings.escape] + * The HTML "escape" delimiter. + * @param {RegExp} [options.evaluate=_.templateSettings.evaluate] + * The "evaluate" delimiter. + * @param {Object} [options.imports=_.templateSettings.imports] + * An object to import into the template as free variables. + * @param {RegExp} [options.interpolate=_.templateSettings.interpolate] + * The "interpolate" delimiter. + * @param {string} [options.sourceURL='lodash.templateSources[n]'] + * The sourceURL of the compiled template. + * @param {string} [options.variable='obj'] + * The data object variable name. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Function} Returns the compiled template function. + * @example + * + * // Use the "interpolate" delimiter to create a compiled template. + * var compiled = _.template('hello <%= user %>!'); + * compiled({ 'user': 'fred' }); + * // => 'hello fred!' + * + * // Use the HTML "escape" delimiter to escape data property values. + * var compiled = _.template('<%- value %>'); + * compiled({ 'value': ' + \ No newline at end of file diff --git a/extensions/fablabchemnitz/edit_attributes/edit_attributes.py b/extensions/fablabchemnitz/edit_attributes/edit_attributes.py new file mode 100644 index 00000000..4b21c8be --- /dev/null +++ b/extensions/fablabchemnitz/edit_attributes/edit_attributes.py @@ -0,0 +1,40 @@ +#!/usr/bin/env python3 + +import inkex +import sys + +class EditAttributes(inkex.EffectExtension): + def add_arguments(self, pars): + pars.add_argument("-a", "--attributeName", help="attribute name to set") + pars.add_argument("-v", "--attributeValue", help="attribute value to set") + pars.add_argument("-m", "--mode", default="set", help="mode of operation") + + def effect(self): + if not self.options.attributeName: # if attributeName is not given + inkex.errormsg("Attribute name not given") + return + if not self.options.attributeValue: # required to make proper behaviour + inkex.errormsg("Please define proper attribute value") + return + + elements = self.svg.selected.values() + for el in elements: + currentAtt = el.attrib.get(self.options.attributeName) + if currentAtt is None: + currentAtt = "" + if self.options.mode == "set": + el.set(self.options.attributeName, self.options.attributeValue) + elif self.options.mode == "append": + el.attrib[self.options.attributeName] = currentAtt + self.options.attributeValue + elif self.options.mode == "prefix": + el.attrib[self.options.attributeName] = self.options.attributeValue + currentAtt + elif self.options.mode == "subtract": + el.attrib[self.options.attributeName] = currentAtt.replace(self.options.attributeValue, "") + elif self.options.mode == "remove": + if self.options.attributeName in el.attrib: + del el.attrib[self.options.attributeName] + else: + inkex.errormsg("Invalid mode: " + self.options.mode) + +if __name__ == '__main__': + EditAttributes().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/eggmazing/eggmazing.inx b/extensions/fablabchemnitz/eggmazing/eggmazing.inx new file mode 100644 index 00000000..e0804fbb --- /dev/null +++ b/extensions/fablabchemnitz/eggmazing/eggmazing.inx @@ -0,0 +1,22 @@ + + + Eggmazing + fablabchemnitz.de.eggmazing + + + + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/eggmazing/eggmazing.py b/extensions/fablabchemnitz/eggmazing/eggmazing.py new file mode 100644 index 00000000..056cdcfb --- /dev/null +++ b/extensions/fablabchemnitz/eggmazing/eggmazing.py @@ -0,0 +1,661 @@ +#!/usr/bin/env python3 + +# Draw a cylindrical maze suitable for plotting with the Eggbot +# The maze itself is generated using a depth first search (DFS) + +# Written by Daniel C. Newman for the Eggbot Project +# Improvements and suggestions by W. Craig Trader +# 20 September 2010 + +# Update 26 April 2011 by Daniel C. Newman +# +# 1. Address Issue #40 +# The extension now draws the maze by columns, going down +# one column of cells and then up the next column. By using +# this technique, the impact of slippage is largely limited +# the the West and East ends of the maze not meeting. Otherwise, +# the maze will still look quite well aligned both locally and +# globally. Only very gross slippage will impact the local +# appearance of the maze. +# +# Note that this new drawing technique is nearly as fast as +# the prior method. The prior method has been preserved and +# can be selected by setting self.hpp = True. ("hpp" intended +# to mean "high plotting precision".) +# +# 2. Changed the page dimensions to use a height of 800 rather +# than 1000 pixels. +# +# 3. When drawing the solution layer, draw the ending cell last. +# Previously, the starting and ending cells were first drawn, +# and then the solution path itself. That caused the pen to +# move to the beginning, the end, and then back to the beginning +# again to start the solution path. Alternatively, the solution +# path might have been drawn from the end to the start. However, +# just drawing the ending cell last was easier code-wise. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +import sys +import array +import math +import random +import inkex +from lxml import etree + +# Initialize the pseudo random number generator +random.seed() + +PLOT_WIDTH = 3200 # Eggbot plot width in pixels +PLOT_HEIGHT = 800 # Eggbot plot height in pixels + +TARGET_WIDTH = 3200 # Desired plot width in pixels +TARGET_HEIGHT = 600 # Desired plot height in pixels + + +def draw_SVG_path(pts, c, t, parent): + """ + Add a SVG path element to the document + We could do this just as easily as a polyline + """ + if not pts: # Nothing to draw + return + if isinstance(pts, list): + assert len(pts) % 3 == 0, "len(pts) must be a multiple of three" + d = "{0} {1:d},{2:d}".format(pts[0], pts[1], pts[2]) + for i in range(3, len(pts), 3): + d += " {0} {1:d},{2:d}".format(pts[i], pts[i + 1], pts[i + 2]) + elif isinstance(pts, str): + d = pts + else: + return + style = {'stroke': c, 'stroke-width': str(t), 'fill': 'none'} + line_attribs = {'style': str(inkex.Style(style)), 'd': d} + etree.SubElement(parent, inkex.addNS('path', 'svg'), line_attribs) + + +def draw_SVG_rect(x, y, w, h, c, t, fill, parent): + """ + Add a SVG rect element to the document + """ + style = {'stroke': c, 'stroke-width': str(t), 'fill': fill} + rect_attribs = {'style': str(inkex.Style(style)), + 'x': str(x), 'y': str(y), + 'width': str(w), 'height': str(h)} + etree.SubElement(parent, inkex.addNS('rect', 'svg'), rect_attribs) + + +class Eggmazing(inkex.EffectExtension): + """ + Each cell in the maze is represented using 9 bits: + + Visited -- When set, indicates that this cell has been visited during + construction of the maze + + Border -- Four bits indicating which if any of this cell's walls are + part of the maze's boundary (i.e., are unremovable walls) + + Walls -- Four bits indicating which if any of this cell's walls are + still standing + + Visited Border Walls + x x x x x x x x x + W S E N W S E N + """ + + _VISITED = 0x0100 + _NORTH = 0x0001 + _EAST = 0x0002 + _SOUTH = 0x0004 + _WEST = 0x0008 + + def __init__(self): + + inkex.Effect.__init__(self) + self.arg_parser.add_argument("--tab", default="controls", help="The active tab when Apply was pressed") + self.arg_parser.add_argument("--mazeSize", default="MEDIUM", help="Difficulty of maze to build") + + self.hpp = False + + self.w = 0 + self.h = 0 + self.solved = 0 + self.start_x = 0 + self.start_y = 0 + self.finish_x = 0 + self.finish_y = 0 + self.solution_x = None + self.solution_y = None + self.cells = None + + # Drawing information + self.scale = 25.0 + self.last_point = None + self.path = '' + + def effect(self): + + # These dimensions are chosen so as to maintain integral dimensions + # with a ratio of width to height of TARGET_WIDTH to TARGET_HEIGHT. + # Presently that's 3200 to 600 which leads to a ratio of 5 and 1/3. + + if self.options.mazeSize == 'SMALL': + self.w = 32 + self.h = 6 + elif self.options.mazeSize == 'MEDIUM': + self.w = 64 + self.h = 12 + elif self.options.mazeSize == 'LARGE': + self.w = 96 + self.h = 18 + else: + self.w = 128 + self.h = 24 + + # The large mazes tend to hit the recursion limit + limit = sys.getrecursionlimit() + if limit < (4 + self.w * self.h): + sys.setrecursionlimit(4 + self.w * self.h) + + maze_size = self.w * self.h + self.finish_x = self.w - 1 + self.finish_y = self.h - 1 + self.solution_x = array.array('i', range(maze_size)) + self.solution_y = array.array('i', range(maze_size)) + self.cells = array.array('H', range(maze_size)) + + # Remove any old maze + for node in self.document.xpath('//svg:g[@inkscape:label="1 - Maze"]', namespaces=inkex.NSS): + parent = node.getparent() + parent.remove(node) + + # Remove any old solution + for node in self.document.xpath('//svg:g[@inkscape:label="2 - Solution"]', namespaces=inkex.NSS): + parent = node.getparent() + parent.remove(node) + + # Remove any empty, default "Layer 1" + for node in self.document.xpath('//svg:g[@id="layer1"]', namespaces=inkex.NSS): + if not node.getchildren(): + parent = node.getparent() + parent.remove(node) + + # Start a new maze + self.solved = 0 + self.start_x = random.randint(0, self.w - 1) + self.finish_x = random.randint(0, self.w - 1) + + # Initialize every cell with all four walls up + + for i in range(maze_size): + self.cells[i] = Eggmazing._NORTH | Eggmazing._EAST | Eggmazing._SOUTH | Eggmazing._WEST + + # Now set our borders -- borders being walls which cannot be removed. + # Since we are a maze on the surface of a cylinder we only have two + # edges and hence only two borders. We consider our two edges to run + # from WEST to EAST and to be at the NORTH and SOUTH. + + z = (self.h - 1) * self.w + for x in range(self.w): + self.cells[x] |= Eggmazing._NORTH << 4 + self.cells[x + z] |= Eggmazing._SOUTH << 4 + + # Build the maze + self.handle_cell(0, self.start_x, self.start_y) + + # Now that the maze has been built, remove the appropriate walls + # associated with the start and finish points of the maze + + # Note: we have to remove these after building the maze. If we + # remove them first, then the lack of a border at the start (or + # finish) cell will allow the handle_cell() routine to wander + # outside of the maze. I.e., handle_cell() doesn't do boundary + # checking on the cell cell coordinates it generates. Instead, it + # relies upon the presence of borders to prevent it wandering + # outside the confines of the maze. + + self.remove_border(self.start_x, self.start_y, Eggmazing._NORTH) + self.remove_wall(self.start_x, self.start_y, Eggmazing._NORTH) + + self.remove_border(self.finish_x, self.finish_y, Eggmazing._SOUTH) + self.remove_wall(self.finish_x, self.finish_y, Eggmazing._SOUTH) + + # Now draw the maze + + # The following scaling and translations scale the maze's + # (width, height) to (TARGET_WIDTH, TARGET_HEIGHT), and translates + # the maze so that it centered within a document of dimensions + # (width, height) = (PLOT_WIDTH, PLOT_HEIGHT) + + # Note that each cell in the maze is drawn 2 x units wide by + # 2 y units high. A width and height of 2 was chosen for + # convenience and for allowing easy identification (as the integer 1) + # of the centerline along which to draw solution paths. It is the + # abstract units which are then mapped to the TARGET_WIDTH eggbot x + # pixels by TARGET_HEIGHT eggbot y pixels rectangle. + + scale_x = float(TARGET_WIDTH) / float(2 * self.w) + scale_y = float(TARGET_HEIGHT) / float(2 * self.h) + translate_x = float(PLOT_WIDTH - TARGET_WIDTH) / 2.0 + translate_y = float(PLOT_HEIGHT - TARGET_HEIGHT) / 2.0 + + # And the SVG transform is thus + t = 'translate({0:f},{1:f}) scale({2:f},{3:f})'.format(translate_x, translate_y, scale_x, scale_y) + + # For scaling line thicknesses. We'll typically draw a line of + # thickness 1 but will need to make the SVG path have a thickness + # of 1 / scale so that after our transforms are applied, the + # resulting thickness is the 1 we wanted in the first place. + + if scale_x > scale_y: + self.scale = scale_x + else: + self.scale = scale_y + + self.last_point = None + self.path = '' + + if not self.hpp: + + # To draw the walls, we start at the left-most column of cells, draw down drawing + # the WEST and NORTH walls and then draw up drawing the EAST and SOUTH walls. + # By drawing in this back and forth fashion, we minimize the effect of slippage. + + for x in range(0, self.w, 2): + self.draw_vertical(x) + + else: + + # The drawing style of the "high plotting precision" / "faster plotting" mode + # is such that it minimizes the number of pen up / pen down operations + # but at the expense of requiring higher drawing precision. It's style + # of drawing works best when there is very minimal slippage of the egg + + # Draw the horizontal walls + + self.draw_horizontal_hpp(0, Eggmazing._NORTH) + for y in range(self.h - 1): + self.draw_horizontal_hpp(y, Eggmazing._SOUTH) + self.draw_horizontal_hpp(self.h - 1, Eggmazing._SOUTH) + + # Draw the vertical walls + + # Since this is a maze on the surface of a cylinder, we don't need + # to draw the vertical walls at the outer edges (x = 0 & x = w - 1) + + for x in range(self.w): + self.draw_vertical_hpp(x, Eggmazing._EAST) + + # Maze in layer "1 - Maze" + attribs = { + inkex.addNS('label', 'inkscape'): '1 - Maze', + inkex.addNS('groupmode', 'inkscape'): 'layer', + 'transform': t} + maze_layer = etree.SubElement(self.document.getroot(), 'g', attribs) + draw_SVG_path(self.path, "#000000", float(1 / self.scale), maze_layer) + + # Now draw the solution in red in layer "2 - Solution" + + attribs = { + inkex.addNS('label', 'inkscape'): '2 - Solution', + inkex.addNS('groupmode', 'inkscape'): 'layer', + 'transform': t} + maze_layer = etree.SubElement(self.document.getroot(), 'g', attribs) + + # Mark the starting cell + + draw_SVG_rect(0.25 + 2 * self.start_x, 0.25 + 2 * self.start_y, + 1.5, 1.5, "#ff0000", 0, "#ff0000", maze_layer) + + # And now generate the solution path itself + + # To minimize the number of plotted paths (and hence pen up / pen + # down operations), we generate as few SVG paths as possible. + # However, for aesthetic reasons we stop the path and start a new + # one when it runs off the edge of the document. We could keep on + # drawing as the eggbot will handle that just fine. However, it + # doesn't look as good in Inkscape. So, we end the path and start + # a new one which is wrapped to the other edge of the document. + + pts = [] + end_path = False + i = 0 + while i < self.solved: + + x1 = self.solution_x[i] + y1 = self.solution_y[i] + + i += 1 + x2 = self.solution_x[i] + y2 = self.solution_y[i] + + if math.fabs(x1 - x2) > 1: + + # We wrapped horizontally... + if x1 > x2: + x2 = x1 + 1 + else: + x2 = x1 - 1 + end_path = True + + if i == 1: + pts.extend(['M', 2 * x1 + 1, 2 * y1 + 1]) + pts.extend(['L', 2 * x2 + 1, 2 * y2 + 1]) + + if not end_path: + continue + + x2 = self.solution_x[i] + y2 = self.solution_y[i] + pts.extend(['M', 2 * x2 + 1, 2 * y2 + 1]) + end_path = False + + # Put the solution path into the drawing + draw_SVG_path(pts, '#ff0000', float(8 / self.scale), maze_layer) + + # Now mark the ending cell + draw_SVG_rect(0.25 + 2 * self.finish_x, 0.25 + 2 * self.finish_y, + 1.5, 1.5, "#ff0000", 0, "#ff0000", maze_layer) + + # Restore the recursion limit + sys.setrecursionlimit(limit) + + # Set some document properties + node = self.document.getroot() + node.set('width', '3200') + node.set('height', '800') + + # The following end up being ignored by Inkscape.... + node = self.svg.namedview + node.set('showborder', 'false') + node.set(inkex.addNS('cx', u'inkscape'), '1600') + node.set(inkex.addNS('cy', u'inkscape'), '500') + node.set(inkex.addNS('showpageshadow', u'inkscape'), 'false') + + # Mark the cell at (x, y) as "visited" + def visit(self, x, y): + self.cells[y * self.w + x] |= Eggmazing._VISITED + + # Return a non-zero value if the cell at (x, y) has been visited + def is_visited(self, x, y): + if self.cells[y * self.w + x] & Eggmazing._VISITED: + return -1 + else: + return 0 + + # Return a non-zero value if the cell at (x, y) has a wall + # in the direction d + def is_wall(self, x, y, d): + if self.cells[y * self.w + x] & d: + return -1 + else: + return 0 + + # Remove the wall in the direction d from the cell at (x, y) + def remove_wall(self, x, y, d): + self.cells[y * self.w + x] &= ~d + + # Return a non-zero value if the cell at (x, y) has a border wall + # in the direction d + def is_border(self, x, y, d): + if self.cells[y * self.w + x] & (d << 4): + return -1 + else: + return 0 + + # Remove the border in the direction d from the cell at (x, y) + def remove_border(self, x, y, d): + self.cells[y * self.w + x] &= ~(d << 4) + + # This is the DFS algorithm which builds the maze. We start at depth 0 + # at the starting cell (self.start_x, self.start_y). We then walk to a + # randomly selected neighboring cell which has not yet been visited (i.e., + # previously walked into). Each step of the walk is a recursive descent + # in depth. The solution to the maze comes about when we walk into the + # finish cell at (self.finish_x, self.finish_y). + # + # Each recursive descent finishes when the currently visited cell has no + # unvisited neighboring cells. + # + # Since we don't revisit previously visited cells, each cell is visited + # no more than once. As it turns out, each cell is visited, but that's a + # little harder to show. Net, net, each cell is visited exactly once. + + def handle_cell(self, depth, x, y): + + # Mark the current cell as visited + self.visit(x, y) + + # Save this cell's location in our solution trail / backtrace + if not self.solved: + + self.solution_x[depth] = x + self.solution_y[depth] = y + + if (x == self.finish_x) and (y == self.finish_y): + # Maze has been solved + self.solved = depth + + # Shuffle the four compass directions: this is the primary source + # of "randomness" in the generated maze. We need to visit each + # neighboring cell which has not yet been visited. If we always + # did that in the same order, then our mazes would look very regular. + # So, we shuffle the list of directions we try in order to find an + # unvisited neighbor. + + # HINT: TRY COMMENTING OUT THE shuffle() BELOW AND SEE FOR YOURSELF + + directions = [Eggmazing._NORTH, Eggmazing._SOUTH, Eggmazing._EAST, Eggmazing._WEST] + random.shuffle(directions) + + # Now from the cell at (x, y), look to each of the four + # directions for unvisited neighboring cells + + for each_direction in directions: + + # If there is a border in direction[i], then don't try + # looking for a neighboring cell in that direction. We + # Use this check and borders to prevent generating invalid + # cell coordinates. + + if self.is_border(x, y, each_direction): + continue + + # Determine the cell coordinates of a neighboring cell + # NOTE: we trust the use of maze borders to prevent us + # from generating invalid cell coordinates + + if each_direction == Eggmazing._NORTH: + nx = x + ny = y - 1 + opposite_direction = Eggmazing._SOUTH + + elif each_direction == Eggmazing._SOUTH: + nx = x + ny = y + 1 + opposite_direction = Eggmazing._NORTH + + elif each_direction == Eggmazing._EAST: + nx = x + 1 + ny = y + opposite_direction = Eggmazing._WEST + + else: + nx = x - 1 + ny = y + opposite_direction = Eggmazing._EAST + + # Wrap in the horizontal dimension + if nx < 0: + nx += self.w + elif nx >= self.w: + nx -= self.w + + # See if this neighboring cell has been visited + if self.is_visited(nx, ny): + # Neighbor has been visited already + continue + + # The neighboring cell has not been visited: remove the wall in + # the current cell leading to the neighbor. And, from the + # neighbor remove its wall leading to the current cell. + + self.remove_wall(x, y, each_direction) + self.remove_wall(nx, ny, opposite_direction) + + # Now recur by "moving" to this unvisited neighboring cell + + self.handle_cell(depth + 1, nx, ny) + + def draw_line(self, x1, y1, x2, y2): + + if self.last_point is not None: + if (self.last_point[0] == x1) and (self.last_point[1] == y1): + self.path += ' L {0:d},{1:d}'.format(x2, y2) + self.last_point = [x2, y2] + elif (self.last_point[0] == x2) and (self.last_point[1] == y2): + self.path += ' L {0:d},{1:d} L {2:d},{3:d}'.format(x1, y1, x2, y2) + # self.last_point unchanged + else: + self.path += ' M {0:d},{1:d} L {2:d},{3:d}'.format(x1, y1, x2, y2) + self.last_point = [x2, y2] + else: + self.path = 'M {0:d},{1:d} L {2:d},{3:d}'.format(x1, y1, x2, y2) + self.last_point = [x2, y2] + + def draw_wall(self, x, y, d, dir_): + + if dir_ > 0: + if d == Eggmazing._NORTH: + self.draw_line(2 * (x + 1), 2 * y, 2 * x, 2 * y) + elif d == Eggmazing._WEST: + self.draw_line(2 * x, 2 * y, 2 * x, 2 * (y + 1)) + elif d == Eggmazing._SOUTH: + self.draw_line(2 * (x + 1), 2 * (y + 1), 2 * x, 2 * (y + 1)) + else: # Eggmazing._EAST + self.draw_line(2 * (x + 1), 2 * y, 2 * (x + 1), 2 * (y + 1)) + else: + if d == Eggmazing._NORTH: + self.draw_line(2 * x, 2 * y, 2 * (x + 1), 2 * y) + elif d == Eggmazing._WEST: + self.draw_line(2 * x, 2 * (y + 1), 2 * x, 2 * y) + elif d == Eggmazing._SOUTH: + self.draw_line(2 * x, 2 * (y + 1), 2 * (x + 1), 2 * (y + 1)) + else: # Eggmazing._EAST + self.draw_line(2 * (x + 1), 2 * (y + 1), 2 * (x + 1), 2 * y) + + # Draw the vertical walls of the maze along the column of cells at + # horizontal positions + + def draw_vertical(self, x): + + # Drawing moving downwards from north to south + + if self.is_wall(x, 0, Eggmazing._NORTH): + self.draw_wall(x, 0, Eggmazing._NORTH, +1) + + for y in range(self.h): + if self.is_wall(x, y, Eggmazing._WEST): + self.draw_wall(x, y, Eggmazing._WEST, +1) + if self.is_wall(x, y, Eggmazing._SOUTH): + self.draw_wall(x, y, Eggmazing._SOUTH, +1) + + # Now, return drawing upwards moving from south to north + + x += 1 + if x >= self.w: + return + + for y in range(self.h - 1, -1, -1): + if self.is_wall(x, y, Eggmazing._SOUTH): + self.draw_wall(x, y, Eggmazing._SOUTH, -1) + if self.is_wall(x, y, Eggmazing._WEST): + self.draw_wall(x, y, Eggmazing._WEST, -1) + if self.is_wall(x, 0, Eggmazing._NORTH): + self.draw_wall(x, 0, Eggmazing._NORTH, -1) + + # Draw the horizontal walls of the maze along the row of + # cells at "height" y: "high plotting precision" version + + def draw_horizontal_hpp(self, y, wall): + + # Cater to Python 2.4 and earlier + # dy = 0 if wall == Eggmazing._NORTH else 1 + if wall == Eggmazing._NORTH: + dy = 0 + else: + dy = 1 + + tracing = False + segment = 0 + for x in range(self.w): + + if self.is_wall(x, y, wall): + if not tracing: + # Starting a new segment + segment = x + tracing = True + else: + if tracing: + # Reached the end of a segment + self.draw_line(2 * segment, 2 * (y + dy), + 2 * x, 2 * (y + dy)) + tracing = False + + if tracing: + # Draw the last wall segment + self.draw_line(2 * segment, 2 * (y + dy), + 2 * self.w, 2 * (y + dy)) + + # Draw the vertical walls of the maze along the column of cells at + # horizontal position x: "high plotting precision" version + + def draw_vertical_hpp(self, x, wall): + + dx = 0 if wall == Eggmazing._WEST else 1 + + # We alternate the direction in which we draw each vertical wall. + # First, from North to South and then from South to North. This + # reduces pen travel on the Eggbot + + if x % 2 == 0: # North-South + y_start, y_finis, dy, offset = 0, self.h, 1, 0 + else: # South-North + y_start, y_finis, dy, offset = self.h - 1, -1, -1, 2 + + tracing = False + segment = y_start + for y in range(y_start, y_finis, dy): + assert 0 <= y < self.h, "y ({0:d}) is out of range".format(y) + if self.is_wall(x, y, wall): + if not tracing: + # Starting a new segment + segment = y + tracing = True + else: + if tracing: + # Hit the end of a segment + self.draw_line(2 * (x + dx), 2 * segment + offset, + 2 * (x + dx), 2 * y + offset) + tracing = False + + if tracing: + # complete the last wall segment + self.draw_line(2 * (x + dx), 2 * segment + offset, + 2 * (x + dx), 2 * y_finis + offset) + + +if __name__ == '__main__': + Eggmazing().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/ellipse_by_five_points/ellipse_by_five_points.inx b/extensions/fablabchemnitz/ellipse_by_five_points/ellipse_by_five_points.inx new file mode 100644 index 00000000..6d11766a --- /dev/null +++ b/extensions/fablabchemnitz/ellipse_by_five_points/ellipse_by_five_points.inx @@ -0,0 +1,16 @@ + + + Ellipse By Five Points + fablabchemnitz.de.ellipse_by_five_points + + path + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/ellipse_by_five_points/ellipse_by_five_points.py b/extensions/fablabchemnitz/ellipse_by_five_points/ellipse_by_five_points.py new file mode 100644 index 00000000..a7dfe77f --- /dev/null +++ b/extensions/fablabchemnitz/ellipse_by_five_points/ellipse_by_five_points.py @@ -0,0 +1,230 @@ +#!/usr/bin/env python3 +# Copyright (c) 2012 Stuart Pernsteiner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED +# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +import sys +import inkex +from inkex.paths import Path +import gettext +_ = gettext.gettext +from copy import deepcopy +import math +from math import sqrt + +class EllipseByFivePoints(inkex.EffectExtension): + + def effect(self): + if len(self.svg.selected) == 0: + sys.exit(_("Error: You must select at least one path")) + + for pathId in self.svg.selected: + path = self.svg.selected[pathId] + pathdata = Path(path.get('d')).to_arrays() + if len(pathdata) < 5: + sys.exit(_("Error: The selected path has %d points, " + + "but 5 are needed.") % len(pathdata)) + + points = [] + for i in range(5): + # pathdata[i] is the i'th segment of the path + # pathdata[i][1] is the list of coordinates for the segment + # pathdata[i][1][-2] is the x-coordinate of the last x,y pair + # in the segment definition + segpoints = pathdata[i][1] + x = segpoints[-2] + y = segpoints[-1] + points.append((x,y)) + + conic = solve_conic(points) + [a,b,c,d,e,f] = conic + + if bareiss_determinant([[a,b/2,d/2],[b/2,c,e/2],[d/2,e/2,f]]) == 0 or a*c - b*b/4 <= 0: + sys.exit(_("Error: Could not find an ellipse that passes " + + "through the provided points")) + + center = ellipse_center(conic) + [ad1, ad2] = ellipse_axes(conic) + al1 = ellipse_axislen(conic, center, ad1) + al2 = ellipse_axislen(conic, center, ad2) + + # Create an object with the appropriate cx,cy and + # with the major axis in the x direction. Then add a transform to + # rotate it to the correct angle. + + if al1 > al2: + major_dir = ad1 + major_len = al1 + minor_len = al2 + else: + major_dir = ad2 + major_len = al2 + minor_len = al1 + + # add sodipodi magic to turn the path into an ellipse + def sodi(x): + return inkex.addNS(x, 'sodipodi') + path.set(sodi('cx'), str(center[0])) + path.set(sodi('cy'), str(center[1])) + path.set(sodi('rx'), str(major_len)) + path.set(sodi('ry'), str(minor_len)) + path.set(sodi('type'), 'arc') + + #inkex.utils.debug(str(center[0])) + #inkex.utils.debug(str(center[1])) + + angle = math.atan2(major_dir[1], major_dir[0]) + if angle > math.pi / 2: + angle -= math.pi + if angle < -math.pi / 2: + angle += math.pi + path.apply_transform() + path.set('transform', 'rotate(%f %f %f)' % (angle * 180 / math.pi, center[0], center[1])) + # NASTY BUGFIX: We do apply_transform and path.set twice because otherwise the ellipse will not be rendered correctly. Reason unknown! + path.apply_transform() + path.set('transform', 'rotate(%f %f %f)' % (angle * 180 / math.pi, center[0], center[1])) + +def solve_conic(pts): + # Find the equation of the conic section passing through the five given + # points. + # + # This technique is from + # http://math.fullerton.edu/mathews/n2003/conicfit/ConicFitMod/Links/ConicFitMod_lnk_9.html + # (retrieved 31 Jan 2012) + rowmajor_matrix = [] + for i in range(5): + (x,y) = pts[i] + row = [x*x, x*y, y*y, x, y, 1] + rowmajor_matrix.append(row) + + full_matrix = [] + for i in range(6): + col = [] + for j in range(5): + col.append(rowmajor_matrix[j][i]) + full_matrix.append(col); + + coeffs = [] + sign = 1 + for i in range(6): + mat = [] + for j in range(6): + if j == i: + continue + mat.append(full_matrix[j]) + coeffs.append(bareiss_determinant(mat) * sign) + sign = -sign + return coeffs + +def bareiss_determinant(mat_orig): + # Compute the determinant of the matrix using Bareiss's algorithm. It + # doesn't matter whether 'mat' is in row-major or column-major layout, + # because det(A) = det(A^T) + + # Algorithm from: + # Yap, Chee, "Linear Systems", Fundamental Problems of Algorithmic Algebra + # Lecture X, Section 2 + # http://cs.nyu.edu/~yap/book/alge/ftpSite/l10.ps.gz + + mat = deepcopy(mat_orig); + + size = len(mat) + last_akk = 1 + for k in range(size-1): + if last_akk == 0: + return 0 + for i in range(k+1, size): + for j in range(k+1, size): + mat[i][j] = (mat[i][j] * mat[k][k] - mat[i][k] * mat[k][j]) / last_akk + last_akk = mat[k][k] + return mat[size-1][size-1] + +def ellipse_center(conic): + # From + # http://en.wikipedia.org/wiki/Matrix_representation_of_conic_sections#Center + [a,b,c,d,e,f] = conic + x = (b*e - 2*c*d) / (4*a*c - b*b); + y = (d*b - 2*a*e) / (4*a*c - b*b); + return (x,y) + +def ellipse_axes(conic): + # Compute the axis directions of the ellipse. + # This technique is from + # http://en.wikipedia.org/wiki/Matrix_representation_of_conic_sections#Axes + [a,b,c,d,e,f] = conic + + # Compute the eigenvalues of + # / a b/2 \ + # \ b/2 c / + # This algorithm is from + # http://www.math.harvard.edu/archive/21b_fall_04/exhibits/2dmatrices/index.html + # (retrieved 31 Jan 2012) + ma = a + mb = b/2 + mc = b/2 + md = c + mdet = ma*md - mb*mc + mtrace = ma + md + + (l1,l2) = solve_quadratic(1, -mtrace, mdet); + + # Eigenvalues (\lambda_1, \lambda_2) + #l1 = mtrace / 2 + sqrt(mtrace*mtrace/4 - mdet) + #l2 = mtrace / 2 - sqrt(mtrace*mtrace/4 - mdet) + + if mb == 0: + return [(0,1), (1,0)] + else: + return [(mb, l1-ma), (mb, l2-ma)] + +def ellipse_axislen(conic, center, direction): + # Compute the axis length as a multiple of the magnitude of 'direction' + [a,b,c,d,e,f] = conic + (cx,cy) = center + (dx,dy) = direction + + dlen = sqrt(dx*dx + dy*dy) + dx /= dlen + dy /= dlen + + # Solve for t: + # a*x^2 + b*x*y + c*y^2 + d*x + e*y + f = 0 + # x = cx + t * dx + # y = cy + t * dy + # by substituting, we get qa*t^2 + qb*t + qc = 0, where: + qa = a*dx*dx + b*dx*dy + c*dy*dy + qb = a*2*cx*dx + b*(cx*dy + cy*dx) + c*2*cy*dy + d*dx + e*dy + qc = a*cx*cx + b*cx*cy + c*cy*cy + d*cx + e*cy + f + + (t1,t2) = solve_quadratic(qa,qb,qc) + + return max(t1,t2) + +def solve_quadratic(a,b,c): + disc = b*b - 4*a*c + disc_root = sqrt(b*b - 4*a*c) + x1 = (-b + disc_root) / (2*a) + x2 = (-b - disc_root) / (2*a) + return (x1,x2) + +if __name__ == '__main__': + EllipseByFivePoints().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/epilog_dashboard_bbox_adjust/epilog_dashboard_bbox_adjust.inx b/extensions/fablabchemnitz/epilog_dashboard_bbox_adjust/epilog_dashboard_bbox_adjust.inx new file mode 100644 index 00000000..bb13a277 --- /dev/null +++ b/extensions/fablabchemnitz/epilog_dashboard_bbox_adjust/epilog_dashboard_bbox_adjust.inx @@ -0,0 +1,62 @@ + + + Epilog Dashboard BBox Adjust + fablabchemnitz.de.epilog_dashboard_bbox_adjust + + + 1.0 + + + + + + false + + + + + + + + false + + + + + + + + + + + + + + + + + + + + + + + + + + ../000_about_fablabchemnitz.svg + + + + all + + + + + + Widen the document to send all lines properly to Epilog Dashboard + + + diff --git a/extensions/fablabchemnitz/epilog_dashboard_bbox_adjust/epilog_dashboard_bbox_adjust.py b/extensions/fablabchemnitz/epilog_dashboard_bbox_adjust/epilog_dashboard_bbox_adjust.py new file mode 100644 index 00000000..089e46e3 --- /dev/null +++ b/extensions/fablabchemnitz/epilog_dashboard_bbox_adjust/epilog_dashboard_bbox_adjust.py @@ -0,0 +1,127 @@ +#!/usr/bin/env python3 + +''' +Extension for InkScape 1.0 +Features +- This tool is a helper to adjust the document border including an offset value, which is added. +Sending vector data to Epilog Dashboard often results in trimmed paths. This leads to wrong geometry where the laser misses to cut them. +So we add a default (small) amount of 1.0 doc units to expand the document's canvas + +Author: Mario Voigt / FabLab Chemnitz +Mail: mario.voigt@stadtfabrikanten.org +Date: 21.04.2021 +Last patch: 27.05.2021 +License: GNU GPL v3 + +#known bugs: +- viewbox/width/height do not correctly apply if documents only contain an object (not a path). After converting it to path it works. Seems to be a bbox problem +- note from 07.05.2021: seems if the following order is viewBox/width/height, or width/height/viewBox, the units are not respected. So me mess around a little bit + +#Todo +- add some way to handle translations properly + +''' + +import math +import inkex +from inkex import Transform + +class EpilogDashboardBboxAdjust(inkex.EffectExtension): + + def getElementChildren(self, element, elements = None): + if elements == None: + elements = [] + if element.tag != inkex.addNS('g','svg'): + elements.append(element) + for child in element.getchildren(): + self.getElementChildren(child, elements) + return elements + + def add_arguments(self, pars): + pars.add_argument("--tab") + pars.add_argument("--offset", type=float, default="1.0", help="XY Offset (mm) from top left corner") + pars.add_argument("--removal", default="none", help="Remove all elements outside the bounding box or selection") + pars.add_argument("--use_machine_size", type=inkex.Boolean, default=False, help="Use machine size") + pars.add_argument("--machine_size", default="812x508", help="Machine/Size") + pars.add_argument("--debug", type=inkex.Boolean, default=False, help="Debug output") + + def effect(self): + offset = self.options.offset + #units = self.svg.unit + units = "mm" #force millimeters + + # create a new bounding box and get the bbox size of all elements of the document (we cannot use the page's bbox) + bbox = inkex.BoundingBox() + if len(self.svg.selected) > 0: + bbox = self.svg.selection.bounding_box() + #for element in self.svg.selected.values(): + # bbox += element.bounding_box() + else: + #for element in self.svg.root.getchildren(): + for element in self.document.getroot().iter("*"): + if isinstance (element, inkex.ShapeElement): + bbox += element.bounding_box() + + if abs(bbox.width) == math.inf or abs(bbox.height) == math.inf: + inkex.utils.debug("Error calculating bounding box! Impossible to continue!") + return + + # adjust the viewBox to the bbox size and add the desired offset + if self.options.use_machine_size is True: + machineWidth = float(self.options.machine_size.split('x')[0]) + machineHeight = float(self.options.machine_size.split('x')[1]) + width = f'{machineWidth}' + units + height = f'{machineHeight}' + units + viewBoxXmin = -offset + viewBoxYmin = -offset + viewBoxXmax = machineWidth + viewBoxYmax = machineHeight + else: + width = f'{bbox.width + offset * 2}' + units + height = f'{bbox.height + offset * 2}' + units + viewBoxXmin = -offset + viewBoxYmin = -offset + viewBoxXmax = bbox.width + offset * 2 + viewBoxYmax = bbox.height + offset * 2 + self.document.getroot().attrib['width'] = width + self.document.getroot().attrib['viewBox'] = f'{viewBoxXmin} {viewBoxYmin} {viewBoxXmax} {viewBoxYmax}' + self.document.getroot().attrib['height'] = height + + # translate all elements to fit the adjusted viewBox + mat = Transform("translate(%f, %f)" % (-bbox.left,-bbox.top)) + for element in self.document.getroot().iter("*"): + if isinstance (element, inkex.ShapeElement) and element.tag != inkex.addNS('g', 'svg'): + element.transform = Transform(mat) * element.transform + #element.transform = Transform(element.composed_transform().add_matrix(mat)) * element.transform + + if self.options.removal == "outside_canvas": + for element in self.document.getroot().iter("*"): + if isinstance (element, inkex.ShapeElement) and element.tag != inkex.addNS('g', 'svg'): + ebbox = element.bounding_box() + #self.msg("{} | bbox: left = {:0.3f} right = {:0.3f} top = {:0.3f} bottom = {:0.3f}".format(element.get('id'), ebbox.left, ebbox.right, ebbox.top, ebbox.bottom)) + #check if the element's bbox is inside the view canvas. If not: delete it! + if ebbox.right < viewBoxXmin or \ + ebbox.left > viewBoxXmax or \ + ebbox.top < viewBoxYmin or \ + ebbox.bottom > viewBoxYmax: + if self.options.debug is True: + self.msg("Removing {} {}".format(element.get('id'), ebbox)) + element.delete() + + elif self.options.removal == "outside_selection": + if len(self.svg.selected) == 0: + inkex.utils.debug("Your selection is empty but you have chosen the option to remove all elements outside selection!") + return + + allElements = [] + for selected in self.svg.selection: + allElements = self.getElementChildren(selected, allElements) + + for element in self.document.getroot().iter("*"): + if element not in allElements and isinstance (element, inkex.ShapeElement) and element.tag != inkex.addNS('g', 'svg'): + if self.options.debug is True: + self.msg("Removing {}".format(element.get('id'))) + element.delete() + +if __name__ == '__main__': + EpilogDashboardBboxAdjust().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/eraser_laser/eraser_layer.inx b/extensions/fablabchemnitz/eraser_laser/eraser_layer.inx new file mode 100644 index 00000000..d9dff89d --- /dev/null +++ b/extensions/fablabchemnitz/eraser_laser/eraser_layer.inx @@ -0,0 +1,16 @@ + + + Eraser Layer + fablabchemnitz.de.eraser_layer + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/eraser_laser/eraser_layer.py b/extensions/fablabchemnitz/eraser_laser/eraser_layer.py new file mode 100644 index 00000000..35c6e06a --- /dev/null +++ b/extensions/fablabchemnitz/eraser_laser/eraser_layer.py @@ -0,0 +1,145 @@ +#!/usr/bin/env python3 +''' +This extension Create a eraser layer + +Copyright (C) 2012 Jabiertxo Arraiza, jabier.arraiza@marker.es + +Version 0.4 - Eraser + +TODO: +Comment Better!!! + +CHANGE LOG +0.1 Start 30/07/2012 +0.3 fix bug with borders + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +''' + +import inkex +import sys +from lxml import etree + +class EraserLayer(inkex.EffectExtension): + + #inserta el flltro que pasa a negro la mascara + def insertFilter(self, svg): + xpathStr = '//filter[@id="Decolorize_0001"]' + filterElement = svg.xpath(xpathStr, namespaces=inkex.NSS) + if filterElement == []: + xpathStr = '//svg:defs' + defs = svg.xpath(xpathStr, namespaces=inkex.NSS) + flt = etree.SubElement(defs[0],inkex.addNS('filter','svg')) + for k, v in [('id', 'Decolorize_0001'), ('color-interpolation-filters', 'sRGB'), + ('height', '100'), ('width', '100'), + ('x', '-50'), ('y', '-50')]: + flt.set(k, v) + fltColorMatrix = etree.SubElement(flt,inkex.addNS('feColorMatrix','svg')) + for k, v in [('id', 'feColorMatrix_0001'),('values','1'), ('in', 'SourceGraphic'), + ('type', 'saturate'), ('result', 'result2')]: + fltColorMatrix.set(k, v) + fltFlood = etree.SubElement(flt,inkex.addNS('feFlood','svg')) + for k, v in [('id', 'feFlood_0001'),('flood-color','rgb(255,255,255)'), ('flood-opacity', '1'), + ('result', 'result1')]: + fltFlood.set(k, v) + fltComposite = etree.SubElement(flt,inkex.addNS('feComposite','svg')) + for k, v in [('id', 'feComposite_0001'),('operator', 'atop'),('in2', 'SourceGraphic') + ,('k2', '1'),('result', 'result4')]: + fltComposite.set(k, v) + + fltInverse = etree.SubElement(defs[0],inkex.addNS('filter','svg')) + for k, v in [('id', 'Inverse_0001'), ('color-interpolation-filters', 'sRGB'), + ('height', '100'), ('width', '100'), + ('x', '-50'), ('y', '-50')]: + fltInverse.set(k, v) + fltColorMatrixInverse = etree.SubElement(fltInverse,inkex.addNS('feColorMatrix','svg')) + for k, v in [('id', 'feColorMatrixInverse_0001'),('values','1'), + ('type', 'saturate'), ('result', 'fbSourceGraphic')]: + fltColorMatrixInverse.set(k, v) + fltColorMatrixInverse = etree.SubElement(fltInverse,inkex.addNS('feColorMatrix','svg')) + for k, v in [('id', 'feColorMatrixInverse_0002'),('in','fbSourceGraphic'), + ('values', '-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0 ')]: + fltColorMatrixInverse.set(k, v) + + #Inserta la mascara desde el grupo eraser + def insertMask(self, idLayer, svg): + xpathStr = '//mask[@id="MaskEraser_' + idLayer + '"]' + maskElement = svg.xpath(xpathStr, namespaces=inkex.NSS) + if maskElement == []: + xpathStr = '//svg:defs' + defs = svg.xpath(xpathStr, namespaces=inkex.NSS) + msk = etree.SubElement(defs[0],inkex.addNS('mask','svg')) + for k, v in [('id', 'Eraser_' + idLayer), ('maskUnits', 'userSpaceOnUse')]: + msk.set(k, v) + use = etree.SubElement(msk,inkex.addNS('use','svg')) + for k, v in [('id', 'Use_Eraser_' + idLayer), ('{http://www.w3.org/1999/xlink}href', + "#EraserLayer_" + idLayer),('style',"filter:url(#Inverse_0001)")]: + use.set(k, v) + rct = etree.SubElement(msk,inkex.addNS('rect','svg')) + for k, v in [('id', 'Background_' + idLayer), ('x', '-25000000'), + ('y', '-25000000'), ('width', '50000000'), ('height', '50000000'), + ('style', 'fill:#FFFFFF;fill-opacity:1')]: + rct.set(k, v) + + + ##crea el grupo contenedor que hara de borrador + def createEraserLayer(self, layer,idLayer): + container = etree.Element("g") + container.set("id","ContainerEraserLayer_" + idLayer) + container.set('style',"opacity:0.000000000000000000000000000000000000000000000001") + container.set("{http://www.inkscape.org/namespaces/inkscape}groupmode","layer") + container.set("{http://www.inkscape.org/namespaces/inkscape}label", "[container eraser] " + layer[0].get("{http://www.inkscape.org/namespaces/inkscape}label")) + for position, item in enumerate(layer[0].getparent().getchildren()): + if item == layer[0]: + break; + layer[0].getparent().insert(position+1,container) + eraser = etree.Element("g") + eraser.set("id","EraserLayer_" + idLayer) + eraser.set('style',"filter:url(#Decolorize_0001)") + eraser.set('transform',"rotate(360)") + eraser.set("{http://www.inkscape.org/namespaces/inkscape}groupmode","layer") + eraser.set("{http://www.inkscape.org/namespaces/inkscape}label", "[eraser] " + layer[0].get("{http://www.inkscape.org/namespaces/inkscape}label")) + layer[0].set('mask',"url(#Eraser_" + idLayer + ")") + selected = [] + for id, node in self.svg.selected.items(): + eraser.insert(1,node) + container.insert(1,eraser) + + def effect(self): + saveout = sys.stdout + sys.stdout = sys.stderr + svg = self.document.getroot() + xpathStr = '//sodipodi:namedview' + namedview = svg.xpath(xpathStr, namespaces=inkex.NSS) + idLayer = namedview[0].get('{http://www.inkscape.org/namespaces/inkscape}current-layer'); + if idLayer.startswith("[mask] ") == False and idLayer.startswith("[eraser] ") == False: + xpathStr = '//svg:g[@id="EraserLayer_'+idLayer+'"]' + filterElement = svg.xpath(xpathStr, namespaces=inkex.NSS) + if filterElement == []: + xpathStr = '//svg:g[@id="'+idLayer+'"]' + layer = svg.xpath(xpathStr, namespaces=inkex.NSS) + if len(layer) > 0 and layer[0] is not None and layer[0].get("{http://www.inkscape.org/namespaces/inkscape}label") is not None: + self.insertFilter(svg) + self.insertMask(idLayer, svg) + self.createEraserLayer(layer,idLayer) + else: + print ("Layer not found, Maybe insisde a group?") + else: + for id, node in self.svg.selected.items(): + filterElement[0].insert(1,node) + sys.stdout = saveout + +if __name__ == '__main__': + EraserLayer().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/estucheria/airplanetypelinearcase.inx b/extensions/fablabchemnitz/estucheria/airplanetypelinearcase.inx new file mode 100644 index 00000000..abef2acb --- /dev/null +++ b/extensions/fablabchemnitz/estucheria/airplanetypelinearcase.inx @@ -0,0 +1,26 @@ + + + Estucheria - Airplane Type Linear Case + fablabchemnitz.de.airplanetypelinearcase + airplanetypelinearcase.svg + + + + 25.0 + 25.0 + 25.0 + 5.0 + 5.0 + 5.0 + + all + + + + + + + + diff --git a/extensions/fablabchemnitz/estucheria/airplanetypelinearcase.py b/extensions/fablabchemnitz/estucheria/airplanetypelinearcase.py new file mode 100644 index 00000000..6bdb14a0 --- /dev/null +++ b/extensions/fablabchemnitz/estucheria/airplanetypelinearcase.py @@ -0,0 +1,239 @@ +#! /usr/bin/env python3 +# +# +# Este script dibuja el perfil exterior de corte la caja en un solo +# path cerrado y añade despues los otros flejes necesarios con colores +# diferentes para identificarlos. +# rojo > para cortes y perfil exterior +# azul > para hendidos +# verde > para taladros +# amarillo > medios cortes +# +# TODO: +# agregar opción de dibujo en cm/in +# mover dibujo al centro del documento +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# + +__version__ = "0.2" + +import inkex + +class GenerarEstuche(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument("--width", type=float, default=25.0, help="Ancho de la caja") + pars.add_argument("--height", type=float, default=25.0, help="Alto de la caja") + pars.add_argument("--depth", type=float, default=25.0, help="Largo de la caja") + pars.add_argument("--glue_tab", type=float, default=5.0, help="Ancho pestaña de engomado") + pars.add_argument("--close_tab", type=float, default=5.0, help="Alto pestaña de cierre") + pars.add_argument("--side_tabs", type=float, default=5.0, help="Alto pestañas laterales de cierre") + pars.add_argument("--unit", default="mm", help="Tipo de unidades") + + + def effect(self): + centro_ancho_documento = self.svg.unittouu(self.document.getroot().get('width'))/2 + centro_alto_documento = self.svg.unittouu(self.document.getroot().get('height'))/2 + + medida_pestana1=5 + medida_pestana2=1 + medida_pestana3=4 + medida_pestana4=3 + + ancho_caja = self.svg.unittouu(str(self.options.width) + self.options.unit) + alto_caja = self.svg.unittouu(str(self.options.height) + self.options.unit) + largo_caja = self.svg.unittouu(str(self.options.depth) + self.options.unit) + ancho_pestana_cola = self.svg.unittouu(str(self.options.glue_tab) + self.options.unit) + alto_pestana_cierre = self.svg.unittouu(str(self.options.close_tab) + self.options.unit) + alto_pestana = self.svg.unittouu(str(self.options.side_tabs) + self.options.unit) + + if self.options.unit=="cm": + medida_pestana1=0.5 + medida_pestana2=0.1 + medida_pestana3=0.4 + medida_pestana3=0.3 + + if self.options.unit=='in': + medida_pestana1=0.196 + medida_pestana2=0.039 + medida_pestana3=0.157 + medida_pestana3=0.118 + + medida1_pestanas_laterales=self.svg.unittouu(str(medida_pestana1) + self.options.unit) + medida2_pestanas_laterales=self.svg.unittouu(str(medida_pestana2) + self.options.unit) + medida3_pestanas_laterales=self.svg.unittouu(str(medida_pestana3) + self.options.unit) + medida4_pestanas_laterales=self.svg.unittouu(str(medida_pestana4) + self.options.unit) + + id_caja = self.svg.get_unique_id('estuche-lineal') + group = self.svg.get_current_layer().add(inkex.Group(id=id_caja)) + estilo_linea_cortes = {'stroke': '#FF0000', 'fill': 'none', 'stroke-width': str(self.svg.unittouu('1px'))} + estilo_linea_hendidos = {'stroke': '#0000FF', 'fill': 'none', 'stroke-width': str(self.svg.unittouu('1px'))} + estilo_linea_medioscortes = {'stroke': '#00FFFF', 'fill': 'none', 'stroke-width': str(self.svg.unittouu('1px'))} + + # line.path --> M = coordenadas absolutas + # line.path --> l = dibuja una linea desde el punto actual a las coordenadas especificadas + # line.path --> c = dibuja una curva beizer desde el punto actual a las coordenadas especificadas + # line.path --> q = dibuja un arco desde el punto actual a las coordenadas especificadas usando un punto como referencia + # line.path --> Z = cierra path + + #Perfil Exterior de la caja + line = group.add(inkex.PathElement(id=id_caja + '-perfil-exterior')) + line.path = [ + ['M', [0, 0]], + ['l', [0, 0-largo_caja]], + ['l', [0, 0]], + ['q', [0,0-alto_pestana_cierre,alto_pestana_cierre, 0-alto_pestana_cierre]], + ['l', [ancho_caja-(alto_pestana_cierre*2), 0]], + ['q', [alto_pestana_cierre,0,alto_pestana_cierre,alto_pestana_cierre]], + ['l', [0, 0]], + ['l', [0, (largo_caja)]], + ['l', [medida4_pestanas_laterales, 0-medida4_pestanas_laterales]], + ['l', [0,0-(alto_pestana-medida4_pestanas_laterales)]], + ['l', [(largo_caja-medida2_pestanas_laterales-medida3_pestanas_laterales-medida4_pestanas_laterales), 0]], + ['l', [medida3_pestanas_laterales, (alto_pestana-medida2_pestanas_laterales-medida1_pestanas_laterales)]], + ['l', [medida2_pestanas_laterales, medida2_pestanas_laterales]], + ['l', [0, medida1_pestanas_laterales]], + ['l', [0,0]], + ['l', [ancho_caja, 0]], + ['l', [0,0]], + ['l', [0, 0]], + ['l', [0, 0-medida1_pestanas_laterales]], + ['l', [medida2_pestanas_laterales, 0-medida2_pestanas_laterales]], + ['l', [medida3_pestanas_laterales, 0-(alto_pestana-medida2_pestanas_laterales-medida1_pestanas_laterales)]], + ['l', [(largo_caja-medida2_pestanas_laterales-medida3_pestanas_laterales-medida4_pestanas_laterales), 0]], + ['l', [0,alto_pestana-medida4_pestanas_laterales]], + ['l', [medida4_pestanas_laterales, medida4_pestanas_laterales]], + ['l', [0, alto_caja]], + ['l', [0-medida4_pestanas_laterales, medida4_pestanas_laterales]], + ['l', [0,(alto_pestana-medida4_pestanas_laterales)]], + ['l', [0-(largo_caja-medida2_pestanas_laterales-medida3_pestanas_laterales-medida4_pestanas_laterales), 0]], + ['l', [0-(medida3_pestanas_laterales), 0-(alto_pestana-medida2_pestanas_laterales-medida1_pestanas_laterales)]], + ['l', [0-(medida2_pestanas_laterales), 0-(medida2_pestanas_laterales)]], + ['l', [0, 0-medida1_pestanas_laterales]], + ['l', [0, 0]], + ['l', [0,0]], + ['l', [0-ancho_caja, 0]], + ['l', [0,0]], + ['l', [0, 0]], + ['l', [0, medida1_pestanas_laterales]], + ['l', [0-medida2_pestanas_laterales, medida2_pestanas_laterales]], + ['l', [0-medida3_pestanas_laterales, (alto_pestana-medida2_pestanas_laterales-medida1_pestanas_laterales)]], + ['l', [0-(largo_caja-medida2_pestanas_laterales-medida3_pestanas_laterales-medida4_pestanas_laterales), 0]], + ['l', [0,0-(alto_pestana-medida4_pestanas_laterales)]], + ['l', [0-medida4_pestanas_laterales, 0-medida4_pestanas_laterales]], + ['l', [0,0]], + ['l', [0, largo_caja]], + ['l', [0, 0]], + ['q', [0,alto_pestana_cierre,0-alto_pestana_cierre, alto_pestana_cierre]],# + ['l', [0-(ancho_caja-(alto_pestana_cierre*2)), 0]], + ['q', [0-alto_pestana_cierre,0,0-alto_pestana_cierre,0-alto_pestana_cierre]], + ['l', [0, 0]], + ['l', [0, 0-largo_caja]], + ['l', [0, 0-medida2_pestanas_laterales]], + ['l', [0-ancho_pestana_cola, 0-(ancho_pestana_cola/2)]], + ['l', [0, 0-(alto_caja-ancho_pestana_cola-(medida2_pestanas_laterales*2))]], + ['l', [ancho_pestana_cola, 0-(ancho_pestana_cola/2)]], + ['Z', []] + ] + line.style = estilo_linea_cortes + + #Hendidos + line = group.add(inkex.PathElement(id=id_caja + '-perfil-hendidos-1')) + line.path = [ + ['M', [0,0]], + ['l', [0,alto_caja]] + ] + line.style = estilo_linea_hendidos + + line = group.add(inkex.PathElement(id=id_caja + '-perfil-hendidos-2')) + line.path = [ + ['M', [ancho_caja,0]], + ['l', [0,alto_caja]] + ] + line.style = estilo_linea_hendidos + + line = group.add(inkex.PathElement(id=id_caja + '-perfil-hendidos-3')) + line.path = [ + ['M', [ancho_caja+largo_caja,0]], + ['l', [0,alto_caja]] + ] + line.style = estilo_linea_hendidos + + line = group.add(inkex.PathElement(id=id_caja + '-perfil-hendidos-4')) + line.path = [ + ['M', [ancho_caja+ancho_caja+largo_caja,0]], + ['l', [0,alto_caja]] + ] + line.style = estilo_linea_hendidos + + line = group.add(inkex.PathElement(id=id_caja + '-perfil-hendidos-5')) + line.path = [ + ['M', [ancho_caja,0]], + ['l', [largo_caja,0]] + ] + line.style = estilo_linea_hendidos + + line = group.add(inkex.PathElement(id=id_caja + '-perfil-hendidos-6')) + line.path = [ + ['M', [0,0]], + ['l', [ancho_caja,0]] + ] + line.style = estilo_linea_hendidos + + line = group.add(inkex.PathElement(id=id_caja + '-perfil-hendidos-7')) + line.path = [ + ['M', [(ancho_caja*2)+largo_caja,0]], + ['l', [largo_caja,0]] + ] + line.style = estilo_linea_hendidos + + line = group.add(inkex.PathElement(id=id_caja + '-perfil-hendidos-8')) + line.path = [ + ['M', [0,alto_caja]], + ['l', [ancho_caja,0]] + ] + line.style = estilo_linea_hendidos + + line = group.add(inkex.PathElement(id=id_caja + '-perfil-hendidos-9')) + line.path = [ + ['M', [ancho_caja,alto_caja]], + ['l', [largo_caja,0]] + ] + line.style = estilo_linea_hendidos + + line = group.add(inkex.PathElement(id=id_caja + '-perfil-hendidos-10')) + line.path = [ + ['M', [(ancho_caja*2)+largo_caja,alto_caja]], + ['l', [largo_caja,0]] + ] + line.style = estilo_linea_hendidos + + line = group.add(inkex.PathElement(id=id_caja + '-perfil-hendidos-11')) + line.path = [ + ['M', [0,0-(largo_caja)]], + ['l', [ancho_caja,0]] + ] + line.style = estilo_linea_hendidos + + line = group.add(inkex.PathElement(id=id_caja + '-perfil-hendidos-12')) + line.path = [ + ['M', [0,alto_caja+largo_caja]], + ['l', [ancho_caja,0]] + ] + line.style = estilo_linea_hendidos + +if __name__ == '__main__': + GenerarEstuche().run() diff --git a/extensions/fablabchemnitz/estucheria/airplanetypelinearcase.svg b/extensions/fablabchemnitz/estucheria/airplanetypelinearcase.svg new file mode 100644 index 00000000..884c88d3 --- /dev/null +++ b/extensions/fablabchemnitz/estucheria/airplanetypelinearcase.svg @@ -0,0 +1,228 @@ + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + A + L + H + T + C + P + + + + + + + + + + + + + + + + + diff --git a/extensions/fablabchemnitz/estucheria/automaticbottomcase.inx b/extensions/fablabchemnitz/estucheria/automaticbottomcase.inx new file mode 100644 index 00000000..85954f04 --- /dev/null +++ b/extensions/fablabchemnitz/estucheria/automaticbottomcase.inx @@ -0,0 +1,26 @@ + + + Estucheria - Automatic Bottom Case + fablabchemnitz.de.automaticbottomcase + automaticbottomcase.svg + + + + 25.0 + 25.0 + 25.0 + 5.0 + 5.0 + 5.0 + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/estucheria/automaticbottomcase.py b/extensions/fablabchemnitz/estucheria/automaticbottomcase.py new file mode 100644 index 00000000..ec50a671 --- /dev/null +++ b/extensions/fablabchemnitz/estucheria/automaticbottomcase.py @@ -0,0 +1,233 @@ +#! /usr/bin/env python3 +# +# +# This script draws the outer profile of the box cut in a single +# closed path and then add the other necessary strips with colours +# different to identify them. +# red > for cuts and outer profile +# blue > for crevices +# green > for drills +# yellow > half-cut +# +# EVERYTHING: +# add cm/in drawing option +# move drawing to the center of the document +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# + +__version__ = "0.2" + +import inkex + +class AutomaticBottomCase(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument("--width", type=float, default=25.0, help="Width of the box") + pars.add_argument("--height", type=float, default=25.0, help="Height of the box") + pars.add_argument("--depth", type=float, default=25.0, help="Length of the box") + pars.add_argument("--glue_tab", type=float, default=5.0, help="Tab width") + pars.add_argument("--close_tab", type=float, default=5.0, help="Height sealing flange") + pars.add_argument("--side_tabs", type=float, default=5.0, help="Height side sealing flanges") + pars.add_argument("--unit", default="mm", help="Type of units") + + def effect(self): + width_center_document = self.svg.unittouu(self.document.getroot().get('width'))/2 + height_center_document = self.svg.unittouu(self.document.getroot().get('height'))/2 + + eyelash_measure1=5 + eyelash_measure2=1 + eyelash_measure3=4 + eyelash_measure4=3 + + box_width = self.svg.unittouu(str(self.options.width) + self.options.unit) + box_height = self.svg.unittouu(str(self.options.height) + self.options.unit) + box_length = self.svg.unittouu(str(self.options.depth) + self.options.unit) + glue_width = self.svg.unittouu(str(self.options.glue_tab) + self.options.unit) + top_flap_closure = self.svg.unittouu(str(self.options.close_tab) + self.options.unit) + top_flap = self.svg.unittouu(str(self.options.side_tabs) + self.options.unit) + + if self.options.unit=="cm": + eyelash_measure1=0.5 + eyelash_measure2=0.1 + eyelash_measure3=0.4 + eyelash_measure3=0.3 + + if self.options.unit=='in': + eyelash_measure1=0.196 + eyelash_measure2=0.039 + eyelash_measure3=0.157 + eyelash_measure3=0.118 + + measure1_side_blind=self.svg.unittouu(str(eyelash_measure1) + self.options.unit) + measure2_side_blind=self.svg.unittouu(str(eyelash_measure2) + self.options.unit) + measure3_side_blind=self.svg.unittouu(str(eyelash_measure3) + self.options.unit) + measure4_side_blind=self.svg.unittouu(str(eyelash_measure4) + self.options.unit) + + box_id = self.svg.get_unique_id('automaticbottomcase') + group = self.svg.get_current_layer().add(inkex.Group(id=box_id)) + line_style_cuts = {'stroke': '#FF0000', 'fill': 'none', 'stroke-width': str(self.svg.unittouu('1px'))} + cleft_line_style = {'stroke': '#0000FF', 'fill': 'none', 'stroke-width': str(self.svg.unittouu('1px'))} + line_style_drills = {'stroke': '#00FF00', 'fill': 'none', 'stroke-width': str(self.svg.unittouu('1px'))} + media_line_style = {'stroke': '#00FFFF', 'fill': 'none', 'stroke-width': str(self.svg.unittouu('1px'))} + + # line.path --> M = absolute coordinates + # line.path --> l = draws a line from the current point to the specified coordinates + # line.path --> c = draws a beizer curve from the current point to the specified coordinates + # line.path --> q = draws an arc from the current point to the specified coordinates using a point as reference + # line.path --> Z = close path + + #Outside profile of the box + line = group.add(inkex.PathElement(id=box_id + '-profile-outside')) + line.path = [ + ['M', [0, 0]], + ['l', [0, 0-box_length]], + ['l', [0, 0]], + ['q', [0,0-top_flap_closure,top_flap_closure, 0-top_flap_closure]], + ['l', [box_width-(top_flap_closure*2), 0]], + ['q', [top_flap_closure,0,top_flap_closure,top_flap_closure]], + ['l', [0, 0]], + ['l', [0, (box_length)]], + ['l', [measure4_side_blind, 0-measure4_side_blind]], + ['l', [0,0-(top_flap-measure4_side_blind)]], + ['l', [(box_length-measure2_side_blind-measure3_side_blind-measure4_side_blind), 0]], + ['l', [measure3_side_blind, (top_flap-measure2_side_blind-measure1_side_blind)]], + ['l', [measure2_side_blind, measure2_side_blind]], + ['l', [0, measure1_side_blind]], + ['l', [0,0]], + ['l', [box_width, 0]], + ['l', [0,0]], + ['l', [0, 0]], + ['l', [0, 0-measure1_side_blind]], + ['l', [measure2_side_blind, 0-measure2_side_blind]], + ['l', [measure3_side_blind, 0-(top_flap-measure2_side_blind-measure1_side_blind)]], + ['l', [(box_length-measure2_side_blind-measure3_side_blind-measure4_side_blind), 0]], + ['l', [0,top_flap-measure4_side_blind]], + ['l', [measure4_side_blind, measure4_side_blind]], + ['l', [0, box_height]], + ['l', [0-((box_length/2)),box_length/2]], + ['l', [0-((box_length/2)-(measure2_side_blind)*2),0]], + ['l', [0-(measure2_side_blind),0-((box_length/2)-measure2_side_blind)]], + ['l', [0-measure2_side_blind,0-measure2_side_blind]], + ['l', [0-measure2_side_blind,measure2_side_blind]], + ['l', [0,box_length*0.7]], + ['l', [0-(((box_length*0.5)-measure2_side_blind)/2),0]], + ['l', [0-(((box_length*0.5)-measure2_side_blind)/2),0-((box_length*0.7)-(box_length*0.5))]], + ['l', [0-((box_width/2)-((box_length*0.5)-measure2_side_blind)),0]], + ['l', [measure3_side_blind,measure3_side_blind]], + ['l', [0-((box_length*0.7)-(box_length*0.5))-measure3_side_blind,((box_length*0.7)-(box_length*0.5))-measure3_side_blind]], + ['l', [0-(((box_width/2)-((box_length*0.5)))+((box_length*0.7)-(box_length*0.5))),0]], + ['l', [0-measure4_side_blind/2,0-((box_length*0.7))-measure2_side_blind]], + ['l', [0-(box_length/2),box_length/2]], + ['l', [0-((box_length/2)-(measure2_side_blind)*2),0]], + ['l', [0-measure2_side_blind,0-((box_length/2)-measure2_side_blind)]], + ['l', [0-measure2_side_blind,0-measure2_side_blind]], + ['l', [0-measure2_side_blind,measure2_side_blind]], + ['l', [0,box_length*0.7]], + ['l', [0-(((box_length*0.5)-measure2_side_blind)/2),0]], + ['l', [0-(((box_length*0.5)-measure2_side_blind)/2),0-((box_length*0.7)-(box_length*0.5))]], + ['l', [0-((box_width/2)-((box_length*0.5)-measure2_side_blind)),0]], + ['l', [measure3_side_blind,measure3_side_blind]], + ['l', [0-((box_length*0.7)-(box_length*0.5))-measure3_side_blind,((box_length*0.7)-(box_length*0.5))-measure3_side_blind]], + ['l', [0-(((box_width/2)-((box_length*0.5)))+((box_length*0.7)-(box_length*0.5))),0]], + ['l', [0-measure4_side_blind/2,0-((box_length*0.7))-measure2_side_blind]], + ['l', [0, 0-measure2_side_blind]], + ['l', [0-glue_width, 0-(glue_width/2)]], + ['l', [0, 0-(box_height-glue_width-(measure2_side_blind*2))]], + ['l', [glue_width, 0-(glue_width/2)]], + ['Z', []] + ] + line.style = line_style_cuts + + #Hendidos + line = group.add(inkex.PathElement(id=box_id + '-profile-splits-1')) + line.path = [ + ['M', [0,0]], + ['l', [0,box_height]] + ] + line.style = cleft_line_style + + line = group.add(inkex.PathElement(id=box_id + '-profile-splits-2')) + line.path = [ + ['M', [box_width,0]], + ['l', [0,box_height]] + ] + line.style = cleft_line_style + + line = group.add(inkex.PathElement(id=box_id + '-profile-splits-3')) + line.path = [ + ['M', [box_width+box_length,0]], + ['l', [0,box_height]] + ] + line.style = cleft_line_style + + line = group.add(inkex.PathElement(id=box_id + '-profile-splits-4')) + line.path = [ + ['M', [box_width+box_width+box_length,0]], + ['l', [0,box_height]] + ] + line.style = cleft_line_style + + line = group.add(inkex.PathElement(id=box_id + '-profile-splits-5')) + line.path = [ + ['M', [0,0]], + ['l', [box_width,0]] + ] + line.style = cleft_line_style + + line = group.add(inkex.PathElement(id=box_id + '-profile-splits-6')) + line.path = [ + ['M', [0,box_height]], + ['l', [((box_length+box_width)*2),0]] + ] + line.style = cleft_line_style + + line = group.add(inkex.PathElement(id=box_id + '-profile-splits-7')) + line.path = [ + ['M', [box_width,0]], + ['l', [box_length,0]] + ] + line.style = cleft_line_style + + line = group.add(inkex.PathElement(id=box_id + '-profile-splits-8')) + line.path = [ + ['M', [box_length+box_width*2,0]], + ['l', [box_length,0]] + ] + line.style = cleft_line_style + + line = group.add(inkex.PathElement(id=box_id + '-profile-splits-9')) + line.path = [ + ['M', [0,0-(box_length)]], + ['l', [box_width,0]] + ] + line.style = cleft_line_style + + line = group.add(inkex.PathElement(id=box_id + '-profile-drill-1')) + line.path = [ + ['M', [box_width-measure2_side_blind,box_height+measure2_side_blind]], + ['l', [0-((box_length*0.5)),(box_length*0.5)]] + ] + line.style = line_style_drills + + line = group.add(inkex.PathElement(id=box_id + '-profile-drill-2')) + line.path = [ + ['M', [((box_width*2)+box_length)-measure2_side_blind,box_height+measure2_side_blind]], + ['l', [0-((box_length*0.5)),(box_length*0.5)]] + ] + line.style = line_style_drills + +if __name__ == '__main__': + AutomaticBottomCase().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/estucheria/automaticbottomcase.svg b/extensions/fablabchemnitz/estucheria/automaticbottomcase.svg new file mode 100644 index 00000000..05fca8a0 --- /dev/null +++ b/extensions/fablabchemnitz/estucheria/automaticbottomcase.svg @@ -0,0 +1,236 @@ + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + A + L + H + T + P + + + + + + + + + + + + + + + C + + diff --git a/extensions/fablabchemnitz/estucheria/box4p.inx b/extensions/fablabchemnitz/estucheria/box4p.inx new file mode 100644 index 00000000..b1882e16 --- /dev/null +++ b/extensions/fablabchemnitz/estucheria/box4p.inx @@ -0,0 +1,23 @@ + + + Estucheria - 4 Point Base Box + fablabchemnitz.de.box4p + box4p.svg + + + + 25.0 + 25.0 + 25.0 + + all + + + + + + + + diff --git a/extensions/fablabchemnitz/estucheria/box4p.py b/extensions/fablabchemnitz/estucheria/box4p.py new file mode 100644 index 00000000..3a14b486 --- /dev/null +++ b/extensions/fablabchemnitz/estucheria/box4p.py @@ -0,0 +1,162 @@ +#! /usr/bin/env python3 +# +# Este script dibuja el perfil exterior de corte la caja en un solo +# path cerrado y añade despues los otros flejes necesarios con colores +# diferentes para identificarlos. +# rojo > para cortes y perfil exterior +# azul > para hendidos +# verde > para taladros +# amarillo > medios cortes +# +# TODO: +# agregar opción de dibujo en cm/in +# mover dibujo al centro del documento +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# + +__version__ = "0.2" + +import inkex + +class GenerarEstuche(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument("--width", type=float, default=25.0, help="Ancho de la caja") + pars.add_argument("--height", type=float, default=25.0, help="Alto de la caja") + pars.add_argument("--depth", type=float, default=25.0, help="Largo de la caja") + pars.add_argument("--unit", default="mm", help="Tipo de unidades") + + def effect(self): + centro_ancho_documento = self.svg.unittouu(self.document.getroot().get('width'))/2 + centro_alto_documento = self.svg.unittouu(self.document.getroot().get('height'))/2 + + medida_pestana1=2 + + ancho_caja = self.svg.unittouu(str(self.options.width) + self.options.unit) + alto_caja = self.svg.unittouu(str(self.options.height) + self.options.unit) + largo_caja = self.svg.unittouu(str(self.options.depth) + self.options.unit) + + if self.options.unit=="cm": + medida_pestana1=0.2 + + if self.options.unit=='in': + medida_pestana1=0.0787 + + medida1_pestanas_laterales=self.svg.unittouu(str(medida_pestana1) + self.options.unit) + + id_caja = self.svg.get_unique_id('bandeja-4P') + group = self.svg.get_current_layer().add(inkex.Group(id=id_caja)) + estilo_linea_cortes = {'stroke': '#FF0000', 'fill': 'none', 'stroke-width': str(self.svg.unittouu('1px'))} + estilo_linea_hendidos = {'stroke': '#0000FF', 'fill': 'none', 'stroke-width': str(self.svg.unittouu('1px'))} + estilo_linea_taladros = {'stroke': '#00FF00', 'fill': 'none', 'stroke-width': str(self.svg.unittouu('1px'))} + estilo_linea_medioscortes = {'stroke': '#00FFFF', 'fill': 'none', 'stroke-width': str(self.svg.unittouu('1px'))} + + # line.path --> M = coordenadas absolutas + # line.path --> l = dibuja una linea desde el punto actual a las coordenadas especificadas + # line.path --> c = dibuja una curva beizer desde el punto actual a las coordenadas especificadas + # line.path --> q = dibuja un arco desde el punto actual a las coordenadas especificadas usando un punto como referencia + # line.path --> Z = cierra path + + #Perfil Exterior de la caja + line = group.add(inkex.PathElement(id=id_caja + '-perfil-exterior')) + line.path = [ + ['M', [0, 0]], + ['l', [alto_caja,0]], + ['l', [ancho_caja,0]], + ['l', [alto_caja,0]], + ['l', [0,alto_caja-medida1_pestanas_laterales]], + ['l', [0-(alto_caja-medida1_pestanas_laterales),0]], + ['l', [0-medida1_pestanas_laterales,medida1_pestanas_laterales]], + ['l', [alto_caja,0]], + ['l', [0,largo_caja]], + ['l', [0-alto_caja,0]], + ['l', [medida1_pestanas_laterales,medida1_pestanas_laterales]], + ['l', [alto_caja-medida1_pestanas_laterales,0]], + ['l', [0,alto_caja-medida1_pestanas_laterales]], + ['l', [0-(alto_caja),0]], + ['l', [0-(ancho_caja),0]], + ['l', [0-(alto_caja),0]], + ['l', [0,0-(alto_caja-medida1_pestanas_laterales)]], + ['l', [alto_caja-medida1_pestanas_laterales,0]], + ['l', [medida1_pestanas_laterales,0-medida1_pestanas_laterales]], + ['l', [0-(alto_caja),0]], + ['l', [0,0-largo_caja]], + ['l', [alto_caja,0]], + ['l', [0-medida1_pestanas_laterales,0-medida1_pestanas_laterales]], + ['l', [0-(alto_caja-medida1_pestanas_laterales),0]], + ['Z', []] + ] + line.style = estilo_linea_cortes + + #Hendidos + line = group.add(inkex.PathElement(id=id_caja + '-perfil-hendidos-1')) + line.path = [ + ['M', [alto_caja,0]], + ['l', [0,largo_caja+(alto_caja*2)]] + ] + line.style = estilo_linea_hendidos + + line = group.add(inkex.PathElement(id=id_caja + '-perfil-hendidos-2')) + line.path = [ + ['M', [ancho_caja+alto_caja,0]], + ['l', [0,largo_caja+(alto_caja*2)]] + ] + line.style = estilo_linea_hendidos + + line = group.add(inkex.PathElement(id=id_caja + '-perfil-hendidos-3')) + line.path = [ + ['M', [alto_caja,alto_caja]], + ['l', [ancho_caja,0]] + ] + line.style = estilo_linea_hendidos + + line = group.add(inkex.PathElement(id=id_caja + '-perfil-hendidos-4')) + line.path = [ + ['M', [alto_caja,alto_caja+largo_caja]], + ['l', [ancho_caja,0]] + ] + line.style = estilo_linea_hendidos + + line = group.add(inkex.PathElement(id=id_caja + '-perfil-hendidos-5')) + line.path = [ + ['M', [alto_caja,alto_caja]], + ['l', [0-alto_caja,alto_caja]] + ] + line.style = estilo_linea_hendidos + + line = group.add(inkex.PathElement(id=id_caja + '-perfil-hendidos-6')) + line.path = [ + ['M', [alto_caja+ancho_caja,alto_caja]], + ['l', [alto_caja,alto_caja]] + ] + line.style = estilo_linea_hendidos + + line = group.add(inkex.PathElement(id=id_caja + '-perfil-hendidos-7')) + line.path = [ + ['M', [alto_caja+ancho_caja,alto_caja+largo_caja]], + ['l', [alto_caja,0-alto_caja]] + ] + line.style = estilo_linea_hendidos + + line = group.add(inkex.PathElement(id=id_caja + '-perfil-hendidos-8')) + line.path = [ + ['M', [alto_caja,alto_caja+largo_caja]], + ['l', [0-alto_caja,0-alto_caja]] + ] + line.style = estilo_linea_hendidos + +if __name__ == '__main__': + GenerarEstuche().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/estucheria/box4p.svg b/extensions/fablabchemnitz/estucheria/box4p.svg new file mode 100644 index 00000000..926e33f4 --- /dev/null +++ b/extensions/fablabchemnitz/estucheria/box4p.svg @@ -0,0 +1,212 @@ + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + A + L + H + + + + + + + + + + + + + diff --git a/extensions/fablabchemnitz/estucheria/doublerailingcase.inx b/extensions/fablabchemnitz/estucheria/doublerailingcase.inx new file mode 100644 index 00000000..2d3bf133 --- /dev/null +++ b/extensions/fablabchemnitz/estucheria/doublerailingcase.inx @@ -0,0 +1,24 @@ + + + Estucheria - Double Railing Case + fablabchemnitz.de.doublerailingcase + doublerailingcase.svg + + + + 25.0 + 25.0 + 25.0 + 5.0 + + all + + + + + + + + diff --git a/extensions/fablabchemnitz/estucheria/doublerailingcase.py b/extensions/fablabchemnitz/estucheria/doublerailingcase.py new file mode 100644 index 00000000..d0ec15cf --- /dev/null +++ b/extensions/fablabchemnitz/estucheria/doublerailingcase.py @@ -0,0 +1,225 @@ +#! /usr/bin/env python3 +# +# +# This script draws the outer profile of the box cut in a single +# closed path and then add the other necessary strips with colours +# different to identify them. +# red > for cuts and outer profile +# blue > for crevices +# green > for drills +# yellow > half-cut +# +# TODO: +# add cm/in drawing option +# move drawing to the center of the document +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# + +__version__ = "0.2" + +import inkex + +class GenerateBox(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument("--width", type=float, default=25.0, help="Width of the box") + pars.add_argument("--height", type=float, default=25.0, help="Height of the box") + pars.add_argument("--depth", type=float, default=25.0, help="Length of the box") + pars.add_argument("--glue_tab", type=float, default=5.0, help="Tab width") + pars.add_argument("--unit", default="mm", help="Type of units") + + def effect(self): + center_width_document = self.svg.unittouu(self.document.getroot().get('width'))/2 + center_height_document = self.svg.unittouu(self.document.getroot().get('height'))/2 + + box_width = self.svg.unittouu(str(self.options.width) + self.options.unit) + box_height = self.svg.unittouu(str(self.options.height) + self.options.unit) + box_length = self.svg.unittouu(str(self.options.depth) + self.options.unit) + eyelash_width = self.svg.unittouu(str(self.options.glue_tab) + self.options.unit) + + eyelash_measure1=2 + eyelash_measure2=1 + eyelash_measure3=5 + eyelash_measure4=3 + + id_box = self.svg.get_unique_id('double-railing-case') + group = self.svg.get_current_layer().add(inkex.Group(id=id_box)) + line_style_cuts = {'stroke': '#FF0000', 'fill': 'none', 'stroke-width': str(self.svg.unittouu('1px'))} + cleft_line_style = {'stroke': '#0000FF', 'fill': 'none', 'stroke-width': str(self.svg.unittouu('1px'))} + line_style_drills = {'stroke': '#00FF00', 'fill': 'none', 'stroke-width': str(self.svg.unittouu('1px'))} + media_line_style = {'stroke': '#00FFFF', 'fill': 'none', 'stroke-width': str(self.svg.unittouu('1px'))} + + # line.path --> M = absolute coordinates + # line.path --> l = draws a line from the current point to the specified coordinates + # line.path --> c = draws a beizer curve from the current point to the specified coordinates + # line.path --> q = draws an arc from the current point to the specified coordinates using a point as reference + # line.path --> Z = close path + + #Outside profile of the box + line = group.add(inkex.PathElement(id=id_box + '-profile-outside')) + line.path = [ + ['M', [0, 0]], + ['l', [box_width,0]], + ['l', [0,0]], + ['l', [0,eyelash_width]], + ['l', [eyelash_width,0]], + ['l', [0-(eyelash_width-eyelash_measure1),box_height-eyelash_measure4]], + ['l', [0-eyelash_measure1,eyelash_measure2]], + ['l', [0,eyelash_measure1]], + ['l', [box_height-eyelash_measure3,eyelash_measure3]], + ['l', [eyelash_measure3,box_height-eyelash_measure3]], + ['l', [eyelash_measure1,0]], + ['l', [eyelash_measure2,eyelash_measure1]], + ['l', [box_height-eyelash_measure4,eyelash_width-eyelash_measure1]], + ['l', [0,box_length-(eyelash_width*2)]], + ['l', [0-(box_height-eyelash_measure4),eyelash_width-eyelash_measure1]], + ['l', [0-eyelash_measure2,eyelash_measure1]], + ['l', [0-eyelash_measure1,0]], + ['l', [0-eyelash_measure3,box_height-eyelash_measure3]], + ['l', [0-(box_height-eyelash_measure3),eyelash_measure3]], + ['l', [0,eyelash_measure1]], + ['l', [eyelash_measure1,eyelash_measure2]], + ['l', [eyelash_width-eyelash_measure1,box_height-eyelash_measure4]], + ['l', [0-eyelash_width,0]], + ['l', [0,0]], + ['l', [0,eyelash_width]], + ['l', [0-box_width,0]], + ['l', [0,0-eyelash_width]], + ['l', [0,0]], + ['l', [0-eyelash_width,0]], + ['l', [eyelash_width-eyelash_measure1,0-(box_height-eyelash_measure4)]], + ['l', [eyelash_measure1,0-eyelash_measure2]], + ['l', [0,0-eyelash_measure1]], + ['l', [0-(box_height-eyelash_measure3),0-eyelash_measure3]], + ['l', [0-eyelash_measure3,0-(box_height-eyelash_measure3)]], + ['l', [0-eyelash_measure1,0]], + ['l', [0-eyelash_measure2,0-eyelash_measure1]], + ['l', [0-(box_height-eyelash_measure4),0-(eyelash_width-eyelash_measure1)]], + ['l', [0,0-(box_length-(eyelash_width*2))]], + ['l', [box_height-eyelash_measure4,0-(eyelash_width-eyelash_measure1),]], + ['l', [eyelash_measure2,0-eyelash_measure1]], + ['l', [eyelash_measure1,0]], + ['l', [eyelash_measure3,0-(box_height-eyelash_measure3)]], + ['l', [(box_height-eyelash_measure3),0-eyelash_measure3]], + ['l', [0,0-eyelash_measure1]], + ['l', [0-eyelash_measure1,0-eyelash_measure2]], + ['l', [0-(eyelash_width-eyelash_measure1),0-(box_height-eyelash_measure4)]], + ['l', [eyelash_width,0]], + ['Z', []] + ] + line.style = line_style_cuts + + #profile splits + line = group.add(inkex.PathElement(id=id_box + '-profile-splits-1')) + line.path = [ + ['M', [0,eyelash_width]], + ['l', [box_width,0]] + ] + line.style = cleft_line_style + + line = group.add(inkex.PathElement(id=id_box + '-profile-splits-2')) + line.path = [ + ['M', [0,(box_height+eyelash_width)]], + ['l', [box_width,0]] + ] + line.style = cleft_line_style + + line = group.add(inkex.PathElement(id=id_box + '-profile-splits-3')) + line.path = [ + ['M', [0-box_height,((box_height*2)+eyelash_width)]], + ['l', [box_width+(box_height*2),0]] + ] + line.style = cleft_line_style + + line = group.add(inkex.PathElement(id=id_box + '-profile-splits-4')) + line.path = [ + ['M', [0-box_height,(((box_height*2)+eyelash_width)+box_length)]], + ['l', [box_width+(box_height*2),0]] + ] + line.style = cleft_line_style + + line = group.add(inkex.PathElement(id=id_box + '-profile-splits-5')) + line.path = [ + ['M', [0,(box_height*3)+box_length+eyelash_width]], + ['l', [box_width,0]] + ] + line.style = cleft_line_style + + line = group.add(inkex.PathElement(id=id_box + '-profile-splits-6')) + line.path = [ + ['M', [0,(box_height*4)+box_length+eyelash_width]], + ['l', [box_width,0]] + ] + line.style = cleft_line_style + + line = group.add(inkex.PathElement(id=id_box + '-profile-splits-7')) + line.path = [ + ['M', [0,eyelash_width]], + ['l', [0,box_length+(box_height*4)]] + ] + line.style = cleft_line_style + + line = group.add(inkex.PathElement(id=id_box + '-profile-splits-8')) + line.path = [ + ['M', [box_width,eyelash_width]], + ['l', [0,box_length+(box_height*4)]] + ] + line.style = cleft_line_style + + line = group.add(inkex.PathElement(id=id_box + '-profile-splits-9')) + line.path = [ + ['M', [0-box_height,eyelash_width+(box_height*2)]], + ['l', [0,box_length]] + ] + line.style = cleft_line_style + + line = group.add(inkex.PathElement(id=id_box + '-profile-splits-10')) + line.path = [ + ['M', [box_width+box_height,eyelash_width+(box_height*2)]], + ['l', [0,box_length]] + ] + line.style = cleft_line_style + + line = group.add(inkex.PathElement(id=id_box + '-profile-splits-11')) + line.path = [ + ['M', [0,eyelash_width+(box_height*2)]], + ['l', [0-(box_height-eyelash_measure3),0-(box_height-eyelash_measure3)]] + ] + line.style = cleft_line_style + + line = group.add(inkex.PathElement(id=id_box + '-profile-splits-12')) + line.path = [ + ['M', [box_width,eyelash_width+(box_height*2)]], + ['l', [box_height-eyelash_measure3,0-(box_height-eyelash_measure3)]] + ] + line.style = cleft_line_style + + line = group.add(inkex.PathElement(id=id_box + '-profile-splits-13')) + line.path = [ + ['M', [box_width,eyelash_width+(box_height*2)+box_length]], + ['l', [box_height-eyelash_measure3,box_height-eyelash_measure3]] + ] + line.style = cleft_line_style + + line = group.add(inkex.PathElement(id=id_box + '-profile-splits-14')) + line.path = [ + ['M', [0,eyelash_width+(box_height*2)+box_length]], + ['l', [0-(box_height-eyelash_measure3),box_height-eyelash_measure3]] + ] + line.style = cleft_line_style + +if __name__ == '__main__': + GenerateBox().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/estucheria/doublerailingcase.svg b/extensions/fablabchemnitz/estucheria/doublerailingcase.svg new file mode 100644 index 00000000..bfcb1e28 --- /dev/null +++ b/extensions/fablabchemnitz/estucheria/doublerailingcase.svg @@ -0,0 +1,220 @@ + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + A + L + H + P + + + + + + + + + + + + + + + + + + + diff --git a/extensions/fablabchemnitz/estucheria/girdle.inx b/extensions/fablabchemnitz/estucheria/girdle.inx new file mode 100644 index 00000000..470d57b3 --- /dev/null +++ b/extensions/fablabchemnitz/estucheria/girdle.inx @@ -0,0 +1,24 @@ + + + Estucheria - Girdle + fablabchemnitz.de.girdle + girdle.svg + + + + 25.0 + 25.0 + 25.0 + 5.0 + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/estucheria/girdle.py b/extensions/fablabchemnitz/estucheria/girdle.py new file mode 100644 index 00000000..c15df7fd --- /dev/null +++ b/extensions/fablabchemnitz/estucheria/girdle.py @@ -0,0 +1,137 @@ +#! /usr/bin/env python3 +# +# Este script dibuja el perfil exterior de corte la caja en un solo +# path cerrado y añade despues los otros flejes necesarios con colores +# diferentes para identificarlos. +# rojo > para cortes y perfil exterior +# azul > para hendidos +# verde > para taladros +# amarillo > medios cortes +# +# TODO: +# agregar opción de dibujo en cm/in +# mover dibujo al centro del documento +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# + +__version__ = "0.2" + +import inkex + +class GenerarEstuche(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument("--width", type=float, default=25.0, help="Ancho de la caja") + pars.add_argument("--height", type=float, default=25.0, help="Alto de la caja") + pars.add_argument("--depth", type=float, default=25.0, help="Largo de la caja") + pars.add_argument("--glue_tab", type=float, default=5.0, help="Ancho pestaña de engomado") + pars.add_argument("--unit", default="mm", help="Tipo de unidades") + + def effect(self): + centro_ancho_documento = self.svg.unittouu(self.document.getroot().get('width'))/2 + centro_alto_documento = self.svg.unittouu(self.document.getroot().get('height'))/2 + + medida_pestana1=5 + medida_pestana2=1 + medida_pestana3=4 + medida_pestana4=3 + + ancho_caja = self.svg.unittouu(str(self.options.width) + self.options.unit) + alto_caja = self.svg.unittouu(str(self.options.height) + self.options.unit) + largo_caja = self.svg.unittouu(str(self.options.depth) + self.options.unit) + ancho_pestana_cola = self.svg.unittouu(str(self.options.glue_tab) + self.options.unit) + + if self.options.unit=="cm": + medida_pestana1=0.5 + medida_pestana2=0.1 + medida_pestana3=0.4 + medida_pestana3=0.3 + + if self.options.unit=='in': + medida_pestana1=0.196 + medida_pestana2=0.039 + medida_pestana3=0.157 + medida_pestana3=0.118 + + medida1_pestanas_laterales=self.svg.unittouu(str(medida_pestana1) + self.options.unit) + medida2_pestanas_laterales=self.svg.unittouu(str(medida_pestana2) + self.options.unit) + medida3_pestanas_laterales=self.svg.unittouu(str(medida_pestana3) + self.options.unit) + medida4_pestanas_laterales=self.svg.unittouu(str(medida_pestana4) + self.options.unit) + + id_caja = self.svg.get_unique_id('estuche-faja') + group = self.svg.get_current_layer().add(inkex.Group(id=id_caja)) + estilo_linea_cortes = {'stroke': '#FF0000', 'fill': 'none', 'stroke-width': str(self.svg.unittouu('1px'))} + estilo_linea_hendidos = {'stroke': '#0000FF', 'fill': 'none', 'stroke-width': str(self.svg.unittouu('1px'))} + estilo_linea_taladros = {'stroke': '#00FF00', 'fill': 'none', 'stroke-width': str(self.svg.unittouu('1px'))} + estilo_linea_medioscortes = {'stroke': '#00FFFF', 'fill': 'none', 'stroke-width': str(self.svg.unittouu('1px'))} + + # line.path --> M = coordenadas absolutas + # line.path --> l = dibuja una linea desde el punto actual a las coordenadas especificadas + # line.path --> c = dibuja una curva beizer desde el punto actual a las coordenadas especificadas + # line.path --> q = dibuja un arco desde el punto actual a las coordenadas especificadas usando un punto como referencia + # line.path --> Z = cierra path + + #Perfil Exterior de la caja + line = group.add(inkex.PathElement(id=id_caja + '-perfil-exterior')) + line.path = [ + ['M', [0, 0]], + ['l', [ancho_caja,0]], + ['l', [largo_caja,0]], + ['l', [ancho_caja,0]], + ['l', [largo_caja,0]], + ['l', [0,alto_caja]], + ['l', [0-(largo_caja),0]], + ['l', [0-(ancho_caja),0]], + ['l', [0-largo_caja,0]], + ['l', [0-ancho_caja,0]], + ['l', [0-ancho_pestana_cola,0-ancho_pestana_cola]], + ['l', [0,0-(alto_caja-(ancho_pestana_cola*2))]], + ['Z', []] + ] + line.style = estilo_linea_cortes + + #Hendidos + line = group.add(inkex.PathElement(id=id_caja + '-perfil-hendidos-1')) + line.path = [ + ['M', [0,0]], + ['l', [0,alto_caja]] + ] + line.style = estilo_linea_hendidos + + line = group.add(inkex.PathElement(id=id_caja + '-perfil-hendidos-2')) + line.path = [ + ['M', [ancho_caja,0]], + ['l', [0,alto_caja]] + ] + line.style = estilo_linea_hendidos + + line = group.add(inkex.PathElement(id=id_caja + '-perfil-hendidos-3')) + line.path = [ + ['M', [ancho_caja+largo_caja,0]], + ['l', [0,alto_caja]] + ] + line.style = estilo_linea_hendidos + + line = group.add(inkex.PathElement(id=id_caja + '-perfil-hendidos-4')) + line.path = [ + ['M', [ancho_caja+ancho_caja+largo_caja,0]], + ['l', [0,alto_caja]] + ] + line.style = estilo_linea_hendidos + + +if __name__ == '__main__': + GenerarEstuche().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/estucheria/girdle.svg b/extensions/fablabchemnitz/estucheria/girdle.svg new file mode 100644 index 00000000..48ca22e0 --- /dev/null +++ b/extensions/fablabchemnitz/estucheria/girdle.svg @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + A + L + H + P + + + + + + + + + diff --git a/extensions/fablabchemnitz/estucheria/linearcase.inx b/extensions/fablabchemnitz/estucheria/linearcase.inx new file mode 100644 index 00000000..476ea240 --- /dev/null +++ b/extensions/fablabchemnitz/estucheria/linearcase.inx @@ -0,0 +1,26 @@ + + + Estucheria - Linear Case + fablabchemnitz.de.linearcase + linearcase.svg + + + + 25.0 + 25.0 + 25.0 + 5.0 + 5.0 + 5.0 + + all + + + + + + + + diff --git a/extensions/fablabchemnitz/estucheria/linearcase.py b/extensions/fablabchemnitz/estucheria/linearcase.py new file mode 100644 index 00000000..ee56f585 --- /dev/null +++ b/extensions/fablabchemnitz/estucheria/linearcase.py @@ -0,0 +1,239 @@ +#! /usr/bin/env python3 +# +# +# Este script dibuja el perfil exterior de corte la caja en un solo +# path cerrado y añade despues los otros flejes necesarios con colores +# diferentes para identificarlos. +# rojo > para cortes y perfil exterior +# azul > para hendidos +# verde > para taladros +# amarillo > medios cortes +# +# TODO: +# agregar opción de dibujo en cm/in +# mover dibujo al centro del documento +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# + +__version__ = "0.2" + +import inkex + +class GenerarEstuche(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument("--width", type=float, default=25.0, help="Ancho de la caja") + pars.add_argument("--height", type=float, default=25.0, help="Alto de la caja") + pars.add_argument("--depth", type=float, default=25.0, help="Largo de la caja") + pars.add_argument("--glue_tab", type=float, default=5.0, help="Ancho pestaña de engomado") + pars.add_argument("--close_tab", type=float, default=5.0, help="Alto pestaña de cierre") + pars.add_argument("--side_tabs", type=float, default=5.0, help="Alto pestañas laterales de cierre") + pars.add_argument("--unit", default="mm", help="Tipo de unidades") + + def effect(self): + centro_ancho_documento = self.svg.unittouu(self.document.getroot().get('width'))/2 + centro_alto_documento = self.svg.unittouu(self.document.getroot().get('height'))/2 + + ancho_caja = self.svg.unittouu(str(self.options.width) + self.options.unit) + alto_caja = self.svg.unittouu(str(self.options.height) + self.options.unit) + largo_caja = self.svg.unittouu(str(self.options.depth) + self.options.unit) + ancho_pestana_cola = self.svg.unittouu(str(self.options.glue_tab) + self.options.unit) + alto_pestana_cierre = self.svg.unittouu(str(self.options.close_tab) + self.options.unit) + alto_pestana = self.svg.unittouu(str(self.options.side_tabs) + self.options.unit) + + if self.options.unit=="mm": + medida_pestana1=5 + medida_pestana2=1 + medida_pestana3=4 + medida_pestana4=3 + + if self.options.unit=="cm": + medida_pestana1=0.5 + medida_pestana2=0.1 + medida_pestana3=0.4 + medida_pestana4=0.3 + + if self.options.unit=='in': + medida_pestana1=0.196 + medida_pestana2=0.039 + medida_pestana3=0.157 + medida_pestana4=0.118 + + medida1_pestanas_laterales=self.svg.unittouu(str(medida_pestana1) + self.options.unit) + medida2_pestanas_laterales=self.svg.unittouu(str(medida_pestana2) + self.options.unit) + medida3_pestanas_laterales=self.svg.unittouu(str(medida_pestana3) + self.options.unit) + medida4_pestanas_laterales=self.svg.unittouu(str(medida_pestana4) + self.options.unit) + + id_caja = self.svg.get_unique_id('estuche-lineal') + group = self.svg.get_current_layer().add(inkex.Group(id=id_caja)) + estilo_linea_cortes = {'stroke': '#FF0000', 'fill': 'none', 'stroke-width': str(self.svg.unittouu('1px'))} + estilo_linea_hendidos = {'stroke': '#0000FF', 'fill': 'none', 'stroke-width': str(self.svg.unittouu('1px'))} + estilo_linea_medioscortes = {'stroke': '#00FFFF', 'fill': 'none', 'stroke-width': str(self.svg.unittouu('1px'))} + + # line.path --> M = coordenadas absolutas + # line.path --> l = dibuja una linea desde el punto actual a las coordenadas especificadas + # line.path --> c = dibuja una curva beizer desde el punto actual a las coordenadas especificadas + # line.path --> q = dibuja un arco desde el punto actual a las coordenadas especificadas usando un punto como referencia + # line.path --> Z = cierra path + + #Perfil Exterior de la caja + line = group.add(inkex.PathElement(id=id_caja + '-perfil-exterior')) + line.path = [ + ['M', [0, 0]], + ['l', [ancho_caja, 0]], + ['l', [0,0]], + ['l', [0, 0]], + ['l', [0, 0-medida1_pestanas_laterales]], + ['l', [medida2_pestanas_laterales, 0-medida2_pestanas_laterales]], + ['l', [medida3_pestanas_laterales, 0-(alto_pestana-medida2_pestanas_laterales-medida1_pestanas_laterales)]], + ['l', [(largo_caja-medida2_pestanas_laterales-medida3_pestanas_laterales-medida4_pestanas_laterales), 0]], + ['l', [0,alto_pestana-medida4_pestanas_laterales]], + ['l', [medida4_pestanas_laterales, medida4_pestanas_laterales]], + ['l', [0, 0-largo_caja]], + ['l', [0, 0]], + ['q', [0,0-alto_pestana_cierre,alto_pestana_cierre, 0-alto_pestana_cierre]], + ['l', [ancho_caja-(alto_pestana_cierre*2), 0]], + ['q', [alto_pestana_cierre,0,alto_pestana_cierre,alto_pestana_cierre]], + ['l', [0, 0]], + ['l', [0, (largo_caja)]], + ['l', [medida4_pestanas_laterales, 0-medida4_pestanas_laterales]], + ['l', [0,0-(alto_pestana-medida4_pestanas_laterales)]], + ['l', [(largo_caja-medida2_pestanas_laterales-medida3_pestanas_laterales-medida4_pestanas_laterales), 0]], + ['l', [medida3_pestanas_laterales, (alto_pestana-medida2_pestanas_laterales-medida1_pestanas_laterales)]], + ['l', [medida2_pestanas_laterales, medida2_pestanas_laterales]], + ['l', [0, medida1_pestanas_laterales]], + ['l', [0,0]], + ['l', [0, alto_caja]], + ['l', [0-medida4_pestanas_laterales, medida4_pestanas_laterales]], + ['l', [0,(alto_pestana-medida4_pestanas_laterales)]], + ['l', [0-(largo_caja-medida2_pestanas_laterales-medida3_pestanas_laterales-medida4_pestanas_laterales), 0]], + ['l', [0-(medida3_pestanas_laterales), 0-(alto_pestana-medida2_pestanas_laterales-medida1_pestanas_laterales)]], + ['l', [0-(medida2_pestanas_laterales), 0-(medida2_pestanas_laterales)]], + ['l', [0, 0-medida1_pestanas_laterales]], + ['l', [0, 0]], + ['l', [0,0]], + ['l', [0-ancho_caja, 0]], + ['l', [0,0]], + ['l', [0, 0]], + ['l', [0, medida1_pestanas_laterales]], + ['l', [0-medida2_pestanas_laterales, medida2_pestanas_laterales]], + ['l', [0-medida3_pestanas_laterales, (alto_pestana-medida2_pestanas_laterales-medida1_pestanas_laterales)]], + ['l', [0-(largo_caja-medida2_pestanas_laterales-medida3_pestanas_laterales-medida4_pestanas_laterales), 0]], + ['l', [0,0-(alto_pestana-medida4_pestanas_laterales)]], + ['l', [0-medida4_pestanas_laterales, 0-medida4_pestanas_laterales]], + ['l', [0,0]], + ['l', [0, largo_caja]], + ['l', [0, 0]], + ['q', [0,alto_pestana_cierre,0-alto_pestana_cierre, alto_pestana_cierre]],# + ['l', [0-(ancho_caja-(alto_pestana_cierre*2)), 0]], + ['q', [0-alto_pestana_cierre,0,0-alto_pestana_cierre,0-alto_pestana_cierre]], + ['l', [0, 0]], + ['l', [0, 0-largo_caja]], + ['l', [0, 0-medida2_pestanas_laterales]], + ['l', [0-ancho_pestana_cola, 0-(ancho_pestana_cola/2)]], + ['l', [0, 0-(alto_caja-ancho_pestana_cola-(medida2_pestanas_laterales*2))]], + ['l', [ancho_pestana_cola, 0-(ancho_pestana_cola/2)]], + ['Z', []] + ] + line.style = estilo_linea_cortes + + #Hendidos + line = group.add(inkex.PathElement(id=id_caja + '-perfil-hendidos-1')) + line.path = [ + ['M', [0,0]], + ['l', [0,alto_caja]] + ] + line.style = estilo_linea_hendidos + + line = group.add(inkex.PathElement(id=id_caja + '-perfil-hendidos-2')) + line.path = [ + ['M', [ancho_caja,0]], + ['l', [0,alto_caja]] + ] + line.style = estilo_linea_hendidos + + line = group.add(inkex.PathElement(id=id_caja + '-perfil-hendidos-3')) + line.path = [ + ['M', [ancho_caja+largo_caja,0]], + ['l', [0,alto_caja]] + ] + line.style = estilo_linea_hendidos + + line = group.add(inkex.PathElement(id=id_caja + '-perfil-hendidos-4')) + line.path = [ + ['M', [ancho_caja+ancho_caja+largo_caja,0]], + ['l', [0,alto_caja]] + ] + line.style = estilo_linea_hendidos + + line = group.add(inkex.PathElement(id=id_caja + '-perfil-hendidos-5')) + line.path = [ + ['M', [ancho_caja,0]], + ['l', [largo_caja,0]] + ] + line.style = estilo_linea_hendidos + + line = group.add(inkex.PathElement(id=id_caja + '-perfil-hendidos-6')) + line.path = [ + ['M', [ancho_caja+largo_caja,0]], + ['l', [ancho_caja,0]] + ] + line.style = estilo_linea_hendidos + + line = group.add(inkex.PathElement(id=id_caja + '-perfil-hendidos-7')) + line.path = [ + ['M', [(ancho_caja*2)+largo_caja,0]], + ['l', [largo_caja,0]] + ] + line.style = estilo_linea_hendidos + + line = group.add(inkex.PathElement(id=id_caja + '-perfil-hendidos-8')) + line.path = [ + ['M', [0,alto_caja]], + ['l', [ancho_caja,0]] + ] + line.style = estilo_linea_hendidos + + line = group.add(inkex.PathElement(id=id_caja + '-perfil-hendidos-9')) + line.path = [ + ['M', [ancho_caja,alto_caja]], + ['l', [largo_caja,0]] + ] + line.style = estilo_linea_hendidos + + line = group.add(inkex.PathElement(id=id_caja + '-perfil-hendidos-10')) + line.path = [ + ['M', [(ancho_caja*2)+largo_caja,alto_caja]], + ['l', [largo_caja,0]] + ] + line.style = estilo_linea_hendidos + + line = group.add(inkex.PathElement(id=id_caja + '-perfil-hendidos-11')) + line.path = [ + ['M', [ancho_caja+largo_caja,0-(largo_caja)]], + ['l', [ancho_caja,0]] + ] + line.style = estilo_linea_hendidos + + line = group.add(inkex.PathElement(id=id_caja + '-perfil-hendidos-12')) + line.path = [ + ['M', [0,alto_caja+largo_caja]], + ['l', [ancho_caja,0]] + ] + line.style = estilo_linea_hendidos + +if __name__ == '__main__': + GenerarEstuche().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/estucheria/linearcase.svg b/extensions/fablabchemnitz/estucheria/linearcase.svg new file mode 100644 index 00000000..933822b8 --- /dev/null +++ b/extensions/fablabchemnitz/estucheria/linearcase.svg @@ -0,0 +1,217 @@ + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + A + L + H + T + C + P + + + diff --git a/extensions/fablabchemnitz/estucheria/swissbottomcase.inx b/extensions/fablabchemnitz/estucheria/swissbottomcase.inx new file mode 100644 index 00000000..7031624b --- /dev/null +++ b/extensions/fablabchemnitz/estucheria/swissbottomcase.inx @@ -0,0 +1,26 @@ + + + Estucheria - Swiss Bottom Case + fablabchemnitz.de.swissbottomcase + swissbottomcase.svg + + + + 25.0 + 25.0 + 25.0 + 5.0 + 5.0 + 5.0 + + all + + + + + + + + diff --git a/extensions/fablabchemnitz/estucheria/swissbottomcase.py b/extensions/fablabchemnitz/estucheria/swissbottomcase.py new file mode 100644 index 00000000..e80b3276 --- /dev/null +++ b/extensions/fablabchemnitz/estucheria/swissbottomcase.py @@ -0,0 +1,218 @@ +#! /usr/bin/env python3 +# +# Este script dibuja el perfil exterior de corte la caja en un solo +# path cerrado y añade despues los otros flejes necesarios con colores +# diferentes para identificarlos. +# rojo > para cortes y perfil exterior +# azul > para hendidos +# verde > para taladros +# amarillo > medios cortes +# +# TODO: +# agregar opción de dibujo en cm/in +# mover dibujo al centro del documento. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# + +__version__ = "0.2" + +import inkex + +class GenerarEstuche(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument("--width", type=float, default=25.0, help="Ancho de la caja") + pars.add_argument("--height", type=float, default=25.0, help="Alto de la caja") + pars.add_argument("--depth", type=float, default=25.0, help="Largo de la caja") + pars.add_argument("--glue_tab", type=float, default=5.0, help="Ancho pestaña de engomado") + pars.add_argument("--close_tab", type=float, default=5.0, help="Alto pestaña de cierre") + pars.add_argument("--side_tabs", type=float, default=5.0, help="Alto pestañas laterales de cierre") + pars.add_argument("--unit", default="mm", help="Tipo de unidades") + + def effect(self): + centro_ancho_documento = self.svg.unittouu(self.document.getroot().get('width'))/2 + centro_alto_documento = self.svg.unittouu(self.document.getroot().get('height'))/2 + + medida_pestana1=5 + medida_pestana2=1 + medida_pestana3=4 + medida_pestana4=3 + medida_pestana5=10 + + ancho_caja = self.svg.unittouu(str(self.options.width) + self.options.unit) + alto_caja = self.svg.unittouu(str(self.options.height) + self.options.unit) + largo_caja = self.svg.unittouu(str(self.options.depth) + self.options.unit) + ancho_pestana_cola = self.svg.unittouu(str(self.options.glue_tab) + self.options.unit) + alto_pestana_cierre = self.svg.unittouu(str(self.options.close_tab) + self.options.unit) + alto_pestana = self.svg.unittouu(str(self.options.side_tabs) + self.options.unit) + + if self.options.unit=="cm": + medida_pestana1=0.5 + medida_pestana2=0.1 + medida_pestana3=0.4 + medida_pestana3=0.3 + medida_pestana5=1.0 + + if self.options.unit=="in": + medida_pestana1=0.196 + medida_pestana2=0.039 + medida_pestana3=0.157 + medida_pestana3=0.118 + medida_pestana5=0.393 + + medida1_pestanas_laterales=self.svg.unittouu(str(medida_pestana1) + self.options.unit) + medida2_pestanas_laterales=self.svg.unittouu(str(medida_pestana2) + self.options.unit) + medida3_pestanas_laterales=self.svg.unittouu(str(medida_pestana3) + self.options.unit) + medida4_pestanas_laterales=self.svg.unittouu(str(medida_pestana4) + self.options.unit) + medida1_pestanas_cierre=self.svg.unittouu(str(medida_pestana5) + self.options.unit) + + id_caja = self.svg.get_unique_id('estuche-fondosuizo') + group = self.svg.get_current_layer().add(inkex.Group(id=id_caja)) + estilo_linea_cortes = {'stroke': '#FF0000', 'fill': 'none', 'stroke-width': str(self.svg.unittouu('1px'))} + estilo_linea_hendidos = {'stroke': '#0000FF', 'fill': 'none', 'stroke-width': str(self.svg.unittouu('1px'))} + estilo_linea_taladros = {'stroke': '#00FF00', 'fill': 'none', 'stroke-width': str(self.svg.unittouu('1px'))} + estilo_linea_medioscortes = {'stroke': '#00FFFF', 'fill': 'none', 'stroke-width': str(self.svg.unittouu('1px'))} + + # line.path --> M = coordenadas absolutas + # line.path --> l = dibuja una linea desde el punto actual a las coordenadas especificadas + # line.path --> c = dibuja una curva beizer desde el punto actual a las coordenadas especificadas + # line.path --> q = dibuja un arco desde el punto actual a las coordenadas especificadas usando un punto como referencia + # line.path --> Z = cierra path + + #Perfil Exterior de la caja + line = group.add(inkex.PathElement(id=id_caja + '-perfil-exterior')) + line.path = [ + ['M', [0, 0]], + ['l', [ancho_caja, 0]], + ['l', [0,0]], + ['l', [0, 0]], + ['l', [0, 0-medida1_pestanas_laterales]], + ['l', [medida2_pestanas_laterales, 0-medida2_pestanas_laterales]], + ['l', [medida3_pestanas_laterales, 0-(alto_pestana-medida2_pestanas_laterales-medida1_pestanas_laterales)]], + ['l', [(largo_caja-medida2_pestanas_laterales-medida3_pestanas_laterales-medida4_pestanas_laterales), 0]], + ['l', [0,alto_pestana-medida4_pestanas_laterales]], + ['l', [medida4_pestanas_laterales, medida4_pestanas_laterales]], + ['l', [0, 0-largo_caja]], + ['l', [0, 0]], + ['q', [0,0-alto_pestana_cierre,alto_pestana_cierre, 0-alto_pestana_cierre]], + ['l', [ancho_caja-(alto_pestana_cierre*2), 0]], + ['q', [alto_pestana_cierre,0,alto_pestana_cierre,alto_pestana_cierre]], + ['l', [0, 0]], + ['l', [0, (largo_caja)]], + ['l', [medida4_pestanas_laterales, 0-medida4_pestanas_laterales]], + ['l', [0,0-(alto_pestana-medida4_pestanas_laterales)]], + ['l', [(largo_caja-medida2_pestanas_laterales-medida3_pestanas_laterales-medida4_pestanas_laterales), 0]], + ['l', [medida3_pestanas_laterales, (alto_pestana-medida2_pestanas_laterales-medida1_pestanas_laterales)]], + ['l', [medida2_pestanas_laterales, medida2_pestanas_laterales]], + ['l', [0, medida1_pestanas_laterales]], + ['l', [0,0]], + ['l', [0, alto_caja]], + ['l', [0,(largo_caja*0.5)+medida1_pestanas_cierre]], + ['l', [0-(largo_caja)*0.5,0]], + ['l', [0,0-medida1_pestanas_cierre]], + ['l', [0-(largo_caja)*0.5,0-((largo_caja)*0.5)]], + ['l', [0,(largo_caja*0.5)+medida1_pestanas_cierre]], + ['l', [0-(ancho_caja)*0.25,0]], + ['l', [0, 0-medida1_pestanas_cierre]], + ['l', [0-(ancho_caja)*0.5,0]], + ['l', [0, medida1_pestanas_cierre]], + ['l', [0-(ancho_caja)*0.25,0]], + ['l', [0,0-((largo_caja*0.5)+medida1_pestanas_cierre)]], + ['l', [0-(largo_caja)*0.5,((largo_caja*0.5))]], + ['l', [0,medida1_pestanas_cierre]], + ['l', [0-(largo_caja)*0.5,0]], + ['l', [0,0-((largo_caja*0.5)+medida1_pestanas_cierre)]], + ['l', [0-ancho_caja*0.25,(largo_caja*0.5)]], + ['l', [0,medida1_pestanas_cierre]], + ['l', [0-ancho_caja*0.5,0]], + ['l', [0,0-medida1_pestanas_cierre]], + ['l', [0-ancho_caja*0.25,0-(largo_caja*0.5)]], + ['l', [0, 0]], + ['l', [0, 0]], + ['l', [0, 0-medida2_pestanas_laterales]], + ['l', [0-ancho_pestana_cola, 0-(ancho_pestana_cola/2)]], + ['l', [0, 0-(alto_caja-ancho_pestana_cola-(medida2_pestanas_laterales*2))]], + ['l', [ancho_pestana_cola, 0-(ancho_pestana_cola/2)]], + ['Z', []] + ] + line.style = estilo_linea_cortes + + #Hendidos + line = group.add(inkex.PathElement(id=id_caja + '-perfil-hendidos-1')) + line.path = [ + ['M', [0,0]], + ['l', [0,alto_caja]] + ] + line.style = estilo_linea_hendidos + + line = group.add(inkex.PathElement(id=id_caja + '-perfil-hendidos-2')) + line.path = [ + ['M', [ancho_caja,0]], + ['l', [0,alto_caja]] + ] + line.style = estilo_linea_hendidos + + line = group.add(inkex.PathElement(id=id_caja + '-perfil-hendidos-3')) + line.path = [ + ['M', [ancho_caja+largo_caja,0]], + ['l', [0,alto_caja]] + ] + line.style = estilo_linea_hendidos + + line = group.add(inkex.PathElement(id=id_caja + '-perfil-hendidos-4')) + line.path = [ + ['M', [ancho_caja+ancho_caja+largo_caja,0]], + ['l', [0,alto_caja]] + ] + line.style = estilo_linea_hendidos + + line = group.add(inkex.PathElement(id=id_caja + '-perfil-hendidos-5')) + line.path = [ + ['M', [ancho_caja,0]], + ['l', [largo_caja,0]] + ] + line.style = estilo_linea_hendidos + + line = group.add(inkex.PathElement(id=id_caja + '-perfil-hendidos-6')) + line.path = [ + ['M', [largo_caja+ancho_caja,0]], + ['l', [ancho_caja,0]] + ] + line.style = estilo_linea_hendidos + + line = group.add(inkex.PathElement(id=id_caja + '-perfil-hendidos-7')) + line.path = [ + ['M', [(ancho_caja*2)+largo_caja,0]], + ['l', [largo_caja,0]] + ] + line.style = estilo_linea_hendidos + + line = group.add(inkex.PathElement(id=id_caja + '-perfil-hendidos-8')) + line.path = [ + ['M', [ancho_caja+largo_caja,0-largo_caja]], + ['l', [ancho_caja,0]] + ] + line.style = estilo_linea_hendidos + + line = group.add(inkex.PathElement(id=id_caja + '-perfil-hendidos-9')) + line.path = [ + ['M', [0,alto_caja]], + ['l', [(ancho_caja+largo_caja)*2,0]] + ] + line.style = estilo_linea_hendidos + +if __name__ == '__main__': + GenerarEstuche().run() diff --git a/extensions/fablabchemnitz/estucheria/swissbottomcase.svg b/extensions/fablabchemnitz/estucheria/swissbottomcase.svg new file mode 100644 index 00000000..a1290155 --- /dev/null +++ b/extensions/fablabchemnitz/estucheria/swissbottomcase.svg @@ -0,0 +1,232 @@ + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + A + L + H + P + T + + + + + + + + + + C + + diff --git a/extensions/fablabchemnitz/exponential_distort/exponential_distort.inx b/extensions/fablabchemnitz/exponential_distort/exponential_distort.inx new file mode 100644 index 00000000..f5b02b4d --- /dev/null +++ b/extensions/fablabchemnitz/exponential_distort/exponential_distort.inx @@ -0,0 +1,25 @@ + + + Exponential Distort + fablabchemnitz.de.exponential_distort + + 1.33 + 0 + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/exponential_distort/exponential_distort.py b/extensions/fablabchemnitz/exponential_distort/exponential_distort.py new file mode 100644 index 00000000..62724238 --- /dev/null +++ b/extensions/fablabchemnitz/exponential_distort/exponential_distort.py @@ -0,0 +1,108 @@ +#!/usr/bin/env python3 + +from __future__ import print_function +import sys +import math +import inkex +from inkex.paths import CubicSuperPath + +class ExponentialDistort(inkex.EffectExtension): + + def add_arguments(self, pars): + #pars.add_argument('-a', '--axis', default='x', help='distortion axis. Valid values are "x", "y", or "xy". Default is "x"') + pars.add_argument('-x', '--exponent', type=float, default=1.3, help='distortion factor. 1=no distortion, default 1.3') + pars.add_argument('-p', '--padding_perc', type=float, default=0, help='pad at origin. Padding 100% runs the exponential curve through [0.5 .. 1.0] -- default 0% runs through [0.0 .. 1.0]') + + def x_exp(self, bbox, x): + """ reference implementation ignoring padding. unused. """ + xmin = bbox[0] # maps to 0 + xmax = bbox[1] # maps to 1 + w = xmax-xmin # maps to 1 + # convert world to math coordinates + xm = (x-xmin)/w + # apply function with properties f(1.0) == 1.0 and f(0.0) == 0.0 + xm = xm**self.options.exponent # oh, parabola or logarithm? + # convert back from math to world coordinates. + return x*w + xmin + + def x_exp_p(self, bbox, x): + """ parabola mapping with padding + CAUTION: the properties f(1.0) == 1.0 and f(0.0) == 0.0 + do not really hold, as our x does not run the full range [0.0 .. 1.0] + FIXME: if you expect some c**xm here, instead of xm**c, think about c==1 ... + """ + xmin = bbox[0] # maps to 0 when padding=0, + xmax = bbox[1] # maps to 1 + xzero = xmin - (xmax-xmin)*self.options.padding_perc*0.01 # maps to 0, after applying padding + w = xmax - xzero + w = w * (1+self.options.padding_perc*0.01) + # convert world to math coordinates + xm = (x-xzero)/w + # apply function with properties f(1.0) == 1.0 and f(0.0) == 0.0 + xm = xm**self.options.exponent # oh, parabola or logarithm? + return xm + + def x_exp_p_inplace(self, bbox, xm): + """ back from mat to world coordinates, retaining xmin and xmax + + Algorithm: (pre)compute a linear mapping function by explicitly + running x_exp_p for the two points xmin and xmax. + Then use the resulting linear function to map back any xm into world coordinates x. + + An obvious speedup by factor 3 is waiting for you here. + """ + + xmin = bbox[0] + xmax = bbox[1] + ## assert that xmin maps to xmin and xmax maps to xmax, whatever x_exp_p() does to us. + f_xmin = self.x_exp_p(bbox, xmin) + f_xmax = self.x_exp_p(bbox, xmax) + f_x = self.x_exp_p(bbox, xm) + x = (f_x - f_xmin) * (xmax-xmin) / (f_xmax-f_xmin) + xmin + return x + + def computeBBox(self, pts): + """ 'improved' version of simplepath.computeBBox, this one includes b-spline handles.""" + xmin = None + xmax = None + ymin = None + ymax = None + for p in pts: + for pp in p: + for ppp in pp: + if xmin is None: xmin = ppp[0] + if xmax is None: xmax = ppp[0] + if ymin is None: ymin = ppp[1] + if ymax is None: ymax = ppp[1] + + if xmin > ppp[0]: xmin = ppp[0] + if xmax < ppp[0]: xmax = ppp[0] + if ymin > ppp[1]: ymin = ppp[1] + if ymax < ppp[1]: ymax = ppp[1] + return (xmin, xmax, ymin, ymax) + + def effect(self): + + if len(self.svg.selected) == 0: + inkex.errormsg("Please select an object to perform the " + + "exponential-distort transformation on.") + return + + for id, node in self.svg.selected.items(): + type = node.get("{http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd}type", "path") + if node.tag != '{http://www.w3.org/2000/svg}path' or type != 'path': + inkex.errormsg(node.tag + " is not a path. Type="+type+". Please use 'Path->Object to Path' first.") + else: + pts = CubicSuperPath(node.get('d')) + bbox = self.computeBBox(pts) + ## bbox (60.0, 160.0, 77.0, 197.0) + ## pts [[[[60.0, 77.0], [60.0, 77.0], [60.0, 77.0]], [[60.0, 197.0], [60.0, 197.0], [60.0, 197.0]], [[70.0, 197.0], ... + for p in pts: + for pp in p: + for ppp in pp: + ppp[0] = self.x_exp_p_inplace(bbox, ppp[0]) + + node.set('d', str(pts)) + +if __name__ == '__main__': + ExponentialDistort().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/export_selection_as/export_selection_as.inx b/extensions/fablabchemnitz/export_selection_as/export_selection_as.inx new file mode 100644 index 00000000..82a6070e --- /dev/null +++ b/extensions/fablabchemnitz/export_selection_as/export_selection_as.inx @@ -0,0 +1,63 @@ + + + Export Selection As ... + fablabchemnitz.de.export_selection_as + + + false + 1.000 + ./inkscape_export/ + false + /usr/share/inkscape/extensions/dxf_outlines.py + true + false + false + false + 96 + false + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ../000_about_fablabchemnitz.svg + + + + all + + + + + + Export selection to separate files. + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/export_selection_as/export_selection_as.py b/extensions/fablabchemnitz/export_selection_as/export_selection_as.py new file mode 100644 index 00000000..d8baaa39 --- /dev/null +++ b/extensions/fablabchemnitz/export_selection_as/export_selection_as.py @@ -0,0 +1,283 @@ +#!/usr/bin/env python3 + +from copy import deepcopy +from pathlib import Path +import logging +import math +import os +import sys +import subprocess +from subprocess import Popen, PIPE +import inkex +from inkex import Rectangle +import inkex.command +from inkex.command import inkscape, inkscape_command +import tempfile +from PIL import Image +import base64 +from io import BytesIO +import warnings +warnings.simplefilter('ignore', Image.DecompressionBombWarning) +from lxml import etree +from scour.scour import scourString + +logger = logging.getLogger(__name__) + +DETACHED_PROCESS = 0x00000008 +GROUP_ID = 'export_selection_transform' + +class ExportObject(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument("--tab") + pars.add_argument("--wrap_transform", type=inkex.Boolean, default=False, help="Wrap final document in transform") + pars.add_argument("--border_offset", type=float, default=1.000, help="Add border offset around selection") + pars.add_argument("--export_dir", default="~/inkscape_export/", help="Location to save exported documents") + pars.add_argument("--opendir", type=inkex.Boolean, default=False, help="Open containing output directory after export") + pars.add_argument("--dxf_exporter_path", default="/usr/share/inkscape/extensions/dxf_outlines.py", help="Location of dxf_outlines.py") + pars.add_argument("--export_svg", type=inkex.Boolean, default=False, help="Create a svg file") + pars.add_argument("--export_dxf", type=inkex.Boolean, default=False, help="Create a dxf file") + pars.add_argument("--export_pdf", type=inkex.Boolean, default=False, help="Create a pdf file") + pars.add_argument("--export_png", type=inkex.Boolean, default=False, help="Create a png file") + pars.add_argument("--png_dpi", type=float, default=96, help="PNG DPI (applies for export and replace)") + pars.add_argument("--replace_by_png", type=inkex.Boolean, default=False, help="Replace selection by png export") + pars.add_argument("--newwindow", type=inkex.Boolean, default=False, help="Open file in new Inkscape window") + + def openExplorer(self, dir): + if os.name == 'nt': + Popen(["explorer", dir], close_fds=True, creationflags=DETACHED_PROCESS).wait() + else: + Popen(["xdg-open", dir], close_fds=True, start_new_session=True).wait() + + def spawnIndependentInkscape(self, file): #function to spawn non-blocking inkscape instance. the inkscape command is available because it is added to ENVIRONMENT when Inkscape main instance is started + if not os.path.exists(file): + inkex.utils.debug("Error. {} does not exist!".format(file)) + exit(1) + warnings.simplefilter('ignore', ResourceWarning) #suppress "enable tracemalloc to get the object allocation traceback" + if os.name == 'nt': + Popen(["inkscape", file], close_fds=True, creationflags=DETACHED_PROCESS) + else: + subprocess.Popen(["inkscape", file], start_new_session=True, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) + warnings.simplefilter("default", ResourceWarning) + + def effect(self): + + svg_export = self.options.export_svg + extra_param = "--batch-process" + + if self.options.export_svg is False and \ + self.options.export_dxf is False and \ + self.options.export_pdf is False and \ + self.options.export_png is False and \ + self.options.replace_by_png is False and \ + self.options.newwindow is False: + inkex.utils.debug("You must select at least one option to continue!") + return + + if self.options.replace_by_png is True: + self.options.border_offset = 0 #override + + if not self.svg.selected: + inkex.errormsg("Selection is empty. Please select some objects first!") + return + + if self.options.export_dxf is True: + #preflight check for DXF input dir + if not os.path.exists(self.options.dxf_exporter_path): + inkex.utils.debug("Location of dxf_outlines.py does not exist. Please select a proper file and try again.") + exit(1) + + export_dir = Path(self.absolute_href(self.options.export_dir)) + os.makedirs(export_dir, exist_ok=True) + + offset = self.options.border_offset + + bbox = inkex.BoundingBox() + + selected = self.svg.selected + firstId = selected[0].get('id') + parent = self.svg.getElementById(firstId).getparent() + + for elem in selected.values(): + transform = inkex.Transform() + parent = elem.getparent() + if parent is not None and isinstance(parent, inkex.ShapeElement): + transform = parent.composed_transform() + try: + bbox += elem.bounding_box(transform) + except Exception: + logger.exception("Bounding box not computed") + logger.info("Skipping bounding box") + transform = elem.composed_transform() + x1, y1 = transform.apply_to_point([0, 0]) + x2, y2 = transform.apply_to_point([1, 1]) + bbox += inkex.BoundingBox((x1, x2), (y1, y2)) + + template = self.create_document() + svg_filename = None + + group = etree.SubElement(template, '{http://www.w3.org/2000/svg}g') + group.attrib['id'] = GROUP_ID + group.attrib['transform'] = str(inkex.Transform(((1, 0, -bbox.left), (0, 1, -bbox.top)))) + + for elem in self.svg.selected.values(): + if elem.tag == inkex.addNS('image', 'svg'): + continue #skip images + elem_copy = deepcopy(elem) + elem_copy.attrib['transform'] = str(elem.composed_transform()) + elem_copy.attrib['style'] = str(elem.composed_style()) + group.append(elem_copy) + + template.attrib['viewBox'] = f'{-offset} {-offset} {bbox.width + offset * 2} {bbox.height + offset * 2}' + template.attrib['width'] = f'{bbox.width + offset * 2}' + self.svg.unit + template.attrib['height'] = f'{bbox.height + offset * 2}' + self.svg.unit + + if svg_filename is None: + filename_base = elem.attrib.get('id', None).replace(os.sep, '_') + if filename_base: + svg_filename = filename_base + '.svg' + if not filename_base: #should never be the case. Inkscape might crash if the id attribute is empty or not existent due to invalid SVG + filename_base = self.svg.get_unique_id("selection") + svg_filename = filename_base + '.svg' + + if len(group) == 0: + self.msg("Selection does not contain any vector data.") + exit(1) + + template.append(group) + svg_out = os.path.join(tempfile.gettempdir(), svg_filename) + + if self.options.wrap_transform is False: + #self.load(inkscape_command(template.tostring(), select=GROUP_ID, verbs=['SelectionUnGroup;FileSave'])) #fails due to new bug + + #workaround + self.save_document(template, svg_out) #export recent file + actions_list=[] + actions_list.append("SelectionUnGroup") + actions_list.append("export-type:svg") + actions_list.append("export-filename:{}".format(svg_out)) + actions_list.append("export-do") + actions = ";".join(actions_list) + cli_output = inkscape(svg_out, extra_param, actions=actions) #process recent file + if len(cli_output) > 0: + self.msg("Inkscape returned the following output when trying to run the file export; the file export may still have worked:") + self.msg(cli_output) + self.load(svg_out) #reload recent file + + template = self.svg + for child in template.getchildren(): + if child.tag == '{http://www.w3.org/2000/svg}metadata': + template.remove(child) + + self.save_document(template, svg_out) # save one into temp dir to access for dxf/pdf/new window instance + + if self.options.export_svg is True: + self.save_document(template, export_dir / svg_filename) + + if self.options.opendir is True: + self.openExplorer(export_dir) + + if self.options.newwindow is True: + #inkscape(os.path.join(export_dir, svg_filename)) #blocking cmd + self.spawnIndependentInkscape(os.path.join(tempfile.gettempdir(), svg_filename)) #non-blocking + + if self.options.export_dxf is True: + #ensure that python command is available #we pass 25.4/96 which stands for unit mm. See inkex.units.UNITS and dxf_outlines.inx + cmd = [ + sys.executable, #the path of the python interpreter which is used for this script + self.options.dxf_exporter_path, + '--output=' + os.path.join(export_dir, filename_base + '.dxf'), + r'--units=25.4/96', + os.path.join(tempfile.gettempdir(), svg_filename) + ] + proc = Popen(cmd, shell=False, stdout=PIPE, stderr=PIPE) + stdout, stderr = proc.communicate() + if proc.returncode != 0: + inkex.utils.debug("%d %s %s" % (proc.returncode, stdout, stderr)) + + if self.options.export_pdf is True: + cli_output = inkscape(os.path.join(tempfile.gettempdir(), svg_filename), extra_param, actions='export-pdf-version:1.5;export-text-to-path;export-filename:{file_name};export-do'.format(file_name=os.path.join(export_dir, filename_base + '.pdf'))) + if len(cli_output) > 0: + self.msg("Inkscape returned the following output when trying to run the file export; the file export may still have worked:") + self.msg(cli_output) + + if self.options.export_png is True: + png_export=os.path.join(export_dir, filename_base + '.png') + try: + os.remove(png_export) + except OSError as e: + #inkex.utils.debug("Error while deleting previously generated output file " + png_export) + pass + actions_list=[] + actions_list.append("export-background:white") + actions_list.append("export-type:png") + actions_list.append("export-dpi:{}".format(self.options.png_dpi)) + actions_list.append("export-filename:{}".format(png_export)) + actions_list.append("export-do") + actions = ";".join(actions_list) + cli_output = inkscape(os.path.join(tempfile.gettempdir(), svg_filename), extra_param, actions=actions) + if len(cli_output) > 0: + self.msg("Inkscape returned the following output when trying to run the file export; the file export may still have worked:") + self.msg(cli_output) + + if self.options.replace_by_png is True: + #export to png file to temp + png_export=os.path.join(tempfile.gettempdir(), filename_base + '.png') + try: + os.remove(png_export) + except OSError as e: + #inkex.utils.debug("Error while deleting previously generated output file " + png_export) + pass + actions_list=[] + actions_list.append("export-background:white") + actions_list.append("export-type:png") + actions_list.append("export-dpi:{}".format(self.options.png_dpi)) + actions_list.append("export-filename:{}".format(png_export)) + actions_list.append("export-do") + actions = ";".join(actions_list) + cli_output = inkscape(os.path.join(tempfile.gettempdir(), svg_filename), extra_param, actions=actions) + if len(cli_output) > 0: + self.msg("Inkscape returned the following output when trying to run the file export; the file export may still have worked:") + self.msg(cli_output) + #then remove the selection and replace it by png + #self.msg(parent.get('id')) + for elem in selected.values(): + elem.delete() + #read png file and get base64 string from it + try: + img = Image.open(png_export) + except Image.DecompressionBombError as e: #we could also increse PIL.Image.MAX_IMAGE_PIXELS = some large int + self.msg("Error. Image is too large. Reduce DPI and try again!") + exit(1) + output_buffer = BytesIO() + img.save(output_buffer, format='PNG') + byte_data = output_buffer.getvalue() + base64_str = base64.b64encode(byte_data).decode('UTF-8') + #finally replace the svg:path(s) with svg:image + imgReplacement = etree.SubElement(Rectangle(), '{http://www.w3.org/2000/svg}image') + imgReplacement.attrib['x'] = str(bbox.left) + imgReplacement.attrib['y'] = str(bbox.top) + imgReplacement.attrib['width'] = str(bbox.width) + imgReplacement.attrib['height'] = str(bbox.height) + imgReplacement.attrib['id'] = firstId + imgReplacement.attrib['{http://www.w3.org/1999/xlink}href'] = "data:image/png;base64,{}".format(base64_str) + parent.append(imgReplacement) + del parent.attrib['transform'] #remove transform + + + def create_document(self): + document = self.svg.copy() + for child in document.getchildren(): + if child.tag == '{http://www.w3.org/2000/svg}defs': + continue + document.remove(child) + return document + + def save_document(self, document, filename): + with open(filename, 'wb') as fp: + document = document.tostring() + fp.write(scourString(document).encode('utf8')) + + +if __name__ == '__main__': + ExportObject().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/extruder/.gitattributes b/extensions/fablabchemnitz/extruder/.gitattributes new file mode 100644 index 00000000..dfe07704 --- /dev/null +++ b/extensions/fablabchemnitz/extruder/.gitattributes @@ -0,0 +1,2 @@ +# Auto detect text files and perform LF normalization +* text=auto diff --git a/extensions/fablabchemnitz/extruder/extruder.inx b/extensions/fablabchemnitz/extruder/extruder.inx new file mode 100644 index 00000000..3c6d5102 --- /dev/null +++ b/extensions/fablabchemnitz/extruder/extruder.inx @@ -0,0 +1,47 @@ + + + Extruder + fablabchemnitz.de.extruder + + + + 1.0 + 11.5 + 45.0 + 0.4 + 0.1 + + + + + + + + + + + + + false + false + 4278190335 + 65535 + + true + + + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/extruder/extruder.py b/extensions/fablabchemnitz/extruder/extruder.py new file mode 100644 index 00000000..84be9c3c --- /dev/null +++ b/extensions/fablabchemnitz/extruder/extruder.py @@ -0,0 +1,719 @@ +#!/usr/bin/env python3 +# +# Copyright (C) [2021] [Joseph Zakar], [observing@gmail.com] +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +""" +Given a closed path of straight lines, this program generates a paper model of +(1) another copy of the closed path; (2) an extrusion (or more if it exceeds the +maximum length) represented by a strip with tabs and score lines; and (3) strips +for covering the tabbed strips. +""" + +import inkex +from inkex import Path, Color +import math +import copy + +class pathStruct(object): + def __init__(self): + self.id="path0000" + self.path=[] + self.enclosed=False + def __str__(self): + return self.path + +class pnPoint(object): + # This class came from https://github.com/JoJocoder/PNPOLY + def __init__(self,p): + self.p=p + def __str__(self): + return self.p + def InPolygon(self,polygon,BoundCheck=False): + inside=False + if BoundCheck: + minX=polygon[0][0] + maxX=polygon[0][0] + minY=polygon[0][1] + maxY=polygon[0][1] + for p in polygon: + minX=min(p[0],minX) + maxX=max(p[0],maxX) + minY=min(p[1],minY) + maxY=max(p[1],maxY) + if self.p[0]maxX or self.p[1]maxY: + return False + j=len(polygon)-1 + for i in range(len(polygon)): + if ((polygon[i][1]>self.p[1])!=(polygon[j][1]>self.p[1]) and (self.p[0]<(polygon[j][0]-polygon[i][0])*(self.p[1]-polygon[i][1])/( polygon[j][1] - polygon[i][1] ) + polygon[i][0])): + inside =not inside + j=i + return inside + +class Extruder(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument("--usermenu") + pars.add_argument("--extrude", type=float, default=1.0, help="Width of extrusion in dimensional units") + pars.add_argument("--maxstrip", type=float, default=11.5, help="Maximum length of extrusion in dimensional units") + pars.add_argument("--tabangle", type=float, default=45.0, help="Angle of tab edges in degrees") + pars.add_argument("--tabheight", type=float, default=0.4, help="Height of tab in dimensional units") + pars.add_argument("--dashlength", type=float, default=0.1, help="Length of dashline in dimensional units (zero for solid line)") + pars.add_argument("--generate_decorative_wrapper", type=inkex.Boolean, default=False, help="Generate decorative wrapper") + pars.add_argument("--cosmetic_dash_style", type=inkex.Boolean, default=False, help="Cosmetic dash lines") + pars.add_argument("--unit", default="in", help="Dimensional units") + pars.add_argument("--color_solid", type=Color, default='4278190335', help="Solid line color") + pars.add_argument("--color_dash", type=Color, default='65535', help="Solid line dash") + pars.add_argument("--print_debug", type=inkex.Boolean, default=True, help="Print debug info") + + #draw SVG line segment(s) between the given (raw) points + def drawline(self, dstr, name, parent, sstr=None): + line_style = {'stroke':'{}','stroke-width':'1','fill':'none'.format(self.options.color_solid)} + if sstr == None: + stylestr = str(inkex.Style(line_style)) + else: + stylestr = sstr + el = parent.add(inkex.PathElement()) + el.path = dstr + el.style = stylestr + el.label = name + + def add_doc(self, path, apt1, apt2, offset, layer): + stylestr = "font-size:{0};line-height:1.25;font-family:sans-serif;stroke-width:0.264583".format(offset*2) + te = layer.add(inkex.TextElement()) + te.style = stylestr + te.label = te.get_id() + te.text = "1" + te.set('x', apt1.x) + te.set('y', apt1.y) + te = layer.add(inkex.TextElement()) + te.style = stylestr + te.label = te.get_id() + te.text = "2" + te.set('x', apt2.x) + te.set('y', apt2.y) + + def pathInsidePath(self, path, testpath): + enclosed = True + for tp in testpath: + # If any point in the testpath is outside the path, it's not enclosed + if self.insidePath(path, tp) == False: + enclosed = False + return enclosed # True if testpath is fully enclosed in path + return enclosed + + def insidePath(self, path, p): + point = pnPoint((p.x, p.y)) + pverts = [] + for pnum in path: + pverts.append((pnum.x, pnum.y)) + isInside = point.InPolygon(pverts, True) + return isInside # True if point p is inside path + + def makescore(self, pt1, pt2, dashlength): + # Draws a dashed line of dashlength between two points + # Dash = dashlength (in inches) space followed by dashlength mark + # if dashlength is zero, we want a solid line + apt1 = inkex.paths.Line(0.0,0.0) + apt2 = inkex.paths.Line(0.0,0.0) + ddash = '' + if math.isclose(dashlength, 0.0): + #inkex.utils.debug("Draw solid dashline") + ddash = ' M '+str(pt1.x)+','+str(pt1.y)+' L '+str(pt2.x)+','+str(pt2.y) + else: + if math.isclose(pt1.y, pt2.y): + #inkex.utils.debug("Draw horizontal dashline") + if pt1.x < pt2.x: + xcushion = pt2.x - dashlength + xpt = pt1.x + ypt = pt1.y + else: + xcushion = pt1.x - dashlength + xpt = pt2.x + ypt = pt2.y + ddash = '' + done = False + while not(done): + if (xpt + dashlength*2) <= xcushion: + xpt = xpt + dashlength + ddash = ddash + ' M ' + str(xpt) + ',' + str(ypt) + xpt = xpt + dashlength + ddash = ddash + ' L ' + str(xpt) + ',' + str(ypt) + else: + done = True + elif math.isclose(pt1.x, pt2.x): + #inkex.utils.debug("Draw vertical dashline") + if pt1.y < pt2.y: + ycushion = pt2.y - dashlength + xpt = pt1.x + ypt = pt1.y + else: + ycushion = pt1.y - dashlength + xpt = pt2.x + ypt = pt2.y + ddash = '' + done = False + while not(done): + if(ypt + dashlength*2) <= ycushion: + ypt = ypt + dashlength + ddash = ddash + ' M ' + str(xpt) + ',' + str(ypt) + ypt = ypt + dashlength + ddash = ddash + ' L ' + str(xpt) + ',' + str(ypt) + else: + done = True + else: + #inkex.utils.debug("Draw sloping dashline") + if pt1.y > pt2.y: + apt1.x = pt1.x + apt1.y = pt1.y + apt2.x = pt2.x + apt2.y = pt2.y + else: + apt1.x = pt2.x + apt1.y = pt2.y + apt2.x = pt1.x + apt2.y = pt1.y + m = (apt1.y-apt2.y)/(apt1.x-apt2.x) + theta = math.atan(m) + msign = (m>0) - (m<0) + ycushion = apt2.y + dashlength*math.sin(theta) + xcushion = apt2.x + msign*dashlength*math.cos(theta) + ddash = '' + xpt = apt1.x + ypt = apt1.y + done = False + while not(done): + nypt = ypt - dashlength*2*math.sin(theta) + nxpt = xpt - msign*dashlength*2*math.cos(theta) + if (nypt >= ycushion) and (((m<0) and (nxpt <= xcushion)) or ((m>0) and (nxpt >= xcushion))): + # move to end of space / beginning of mark + xpt = xpt - msign*dashlength*math.cos(theta) + ypt = ypt - msign*dashlength*math.sin(theta) + ddash = ddash + ' M ' + str(xpt) + ',' + str(ypt) + # draw the mark + xpt = xpt - msign*dashlength*math.cos(theta) + ypt = ypt - msign*dashlength*math.sin(theta) + ddash = ddash + ' L ' + str(xpt) + ',' + str(ypt) + else: + done = True + return ddash + + def detectIntersect(self, x1, y1, x2, y2, x3, y3, x4, y4): + td = (x1-x2)*(y3-y4)-(y1-y2)*(x3-x4) + if td == 0: + # These line segments are parallel + return False + t = ((x1-x3)*(y3-y4)-(y1-y3)*(x3-x4))/td + if (0.0 <= t) and (t <= 1.0): + return True + else: + return False + + def makeTab(self, tpath, pt1, pt2, tabht, taba): + # tpath - the pathstructure containing pt1 and pt2 + # pt1, pt2 - the two points where the tab will be inserted + # tabht - the height of the tab + # taba - the angle of the tab sides + # returns the two tab points in order of closest to pt1 + tpt1 = inkex.paths.Line(0.0,0.0) + tpt2 = inkex.paths.Line(0.0,0.0) + currTabHt = tabht + currTabAngle = taba + testAngle = 1.0 + testHt = currTabHt * 0.001 + adjustTab = 0 + tabDone = False + while not tabDone: + # Let's find out the orientation of the tab + if math.isclose(pt1.x, pt2.x): + # It's vertical. Let's try the right side + if pt1.y < pt2.y: + tpt1.x = pt1.x + testHt + tpt2.x = pt2.x + testHt + tpt1.y = pt1.y + testHt/math.tan(math.radians(testAngle)) + tpt2.y = pt2.y - testHt/math.tan(math.radians(testAngle)) + pnpt1 = inkex.paths.Move(tpt1.x, tpt1.y) + pnpt2 = inkex.paths.Move(tpt2.x, tpt2.y) + if ((not tpath.enclosed) and (self.insidePath(tpath.path, pnpt1) or self.insidePath(tpath.path, pnpt2))) or \ + (tpath.enclosed and ((not self.insidePath(tpath.path, pnpt1)) and (not self.insidePath(tpath.path, pnpt2)))): + tpt1.x = pt1.x - currTabHt + tpt2.x = pt2.x - currTabHt + else: + tpt1.x = pt1.x + currTabHt + tpt2.x = pt2.x + currTabHt + tpt1.y = pt1.y + currTabHt/math.tan(math.radians(currTabAngle)) + tpt2.y = pt2.y - currTabHt/math.tan(math.radians(currTabAngle)) + else: # pt2.y < pt1.y + tpt1.x = pt1.x + testHt + tpt2.x = pt2.x + testHt + tpt1.y = pt1.y - testHt/math.tan(math.radians(testAngle)) + tpt2.y = pt2.y + testHt/math.tan(math.radians(testAngle)) + pnpt1 = inkex.paths.Move(tpt1.x, tpt1.y) + pnpt2 = inkex.paths.Move(tpt2.x, tpt2.y) + if ((not tpath.enclosed) and (self.insidePath(tpath.path, pnpt1) or self.insidePath(tpath.path, pnpt2))) or \ + (tpath.enclosed and ((not self.insidePath(tpath.path, pnpt1)) and (not self.insidePath(tpath.path, pnpt2)))): + tpt1.x = pt1.x - currTabHt + tpt2.x = pt2.x - currTabHt + else: + tpt1.x = pt1.x + currTabHt + tpt2.x = pt2.x + currTabHt + tpt1.y = pt1.y - currTabHt/math.tan(math.radians(currTabAngle)) + tpt2.y = pt2.y + currTabHt/math.tan(math.radians(currTabAngle)) + elif math.isclose(pt1.y, pt2.y): + # It's horizontal. Let's try the top + if pt1.x < pt2.x: + tpt1.y = pt1.y - testHt + tpt2.y = pt2.y - testHt + tpt1.x = pt1.x + testHt/math.tan(math.radians(testAngle)) + tpt2.x = pt2.x - testHt/math.tan(math.radians(testAngle)) + pnpt1 = inkex.paths.Move(tpt1.x, tpt1.y) + pnpt2 = inkex.paths.Move(tpt2.x, tpt2.y) + if ((not tpath.enclosed) and (self.insidePath(tpath.path, pnpt1) or self.insidePath(tpath.path, pnpt2))) or \ + (tpath.enclosed and ((not self.insidePath(tpath.path, pnpt1)) and (not self.insidePath(tpath.path, pnpt2)))): + tpt1.y = pt1.y + currTabHt + tpt2.y = pt2.y + currTabHt + else: + tpt1.y = pt1.y - currTabHt + tpt2.y = pt2.y - currTabHt + tpt1.x = pt1.x + currTabHt/math.tan(math.radians(currTabAngle)) + tpt2.x = pt2.x - currTabHt/math.tan(math.radians(currTabAngle)) + else: # pt2.x < pt1.x + tpt1.y = pt1.y - testHt + tpt2.y = pt2.y - testHt + tpt1.x = pt1.x - testHt/math.tan(math.radians(testAngle)) + tpt2.x = pt2.x + testHt/math.tan(math.radians(testAngle)) + pnpt1 = inkex.paths.Move(tpt1.x, tpt1.y) + pnpt2 = inkex.paths.Move(tpt2.x, tpt2.y) + if ((not tpath.enclosed) and (self.insidePath(tpath.path, pnpt1) or self.insidePath(tpath.path, pnpt2))) or \ + (tpath.enclosed and ((not self.insidePath(tpath.path, pnpt1)) and (not self.insidePath(tpath.path, pnpt2)))): + tpt1.y = pt1.y + currTabHt + tpt2.y = pt2.y + currTabHt + else: + tpt1.y = pt1.y - currTabHt + tpt2.y = pt2.y - currTabHt + tpt1.x = pt1.x - currTabHt/math.tan(math.radians(currTabAngle)) + tpt2.x = pt2.x + currTabHt/math.tan(math.radians(currTabAngle)) + + else: # the orientation is neither horizontal nor vertical + # Let's get the slope of the line between the points + # Because Inkscape's origin is in the upper-left corner, + # a positive slope (/) will yield a negative value + slope = (pt2.y - pt1.y)/(pt2.x - pt1.x) + # Let's get the angle to the horizontal + theta = math.degrees(math.atan(slope)) + # Let's construct a horizontal tab + seglength = math.sqrt((pt1.x-pt2.x)**2 +(pt1.y-pt2.y)**2) + if slope < 0.0: + if pt1.x < pt2.x: + tpt1.y = pt1.y - testHt + tpt2.y = pt2.y - testHt + tpt1.x = pt1.x + testHt/math.tan(math.radians(testAngle)) + tpt2.x = pt2.x - testHt/math.tan(math.radians(testAngle)) + tl1 = [('M', [pt1.x,pt1.y])] + tl1 += [('L', [tpt1.x, tpt1.y])] + ele1 = inkex.Path(tl1) + tl2 = [('M', [pt1.x,pt1.y])] + tl2 += [('L', [tpt2.x, tpt2.y])] + ele2 = inkex.Path(tl2) + thetal1 = ele1.rotate(theta, [pt1.x,pt1.y]) + thetal2 = ele2.rotate(theta, [pt2.x,pt2.y]) + tpt1.x = thetal1[1].x + tpt1.y = thetal1[1].y + tpt2.x = thetal2[1].x + tpt2.y = thetal2[1].y + pnpt1 = inkex.paths.Move(tpt1.x, tpt1.y) + pnpt2 = inkex.paths.Move(tpt2.x, tpt2.y) + if ((not tpath.enclosed) and (self.insidePath(tpath.path, pnpt1) or self.insidePath(tpath.path, pnpt2))) or \ + (tpath.enclosed and ((not self.insidePath(tpath.path, pnpt1)) and (not self.insidePath(tpath.path, pnpt2)))): + tpt1.y = pt1.y + currTabHt + tpt2.y = pt2.y + currTabHt + else: + tpt1.y = pt1.y - currTabHt + tpt2.y = pt2.y - currTabHt + tpt1.x = pt1.x + currTabHt/math.tan(math.radians(currTabAngle)) + tpt2.x = pt2.x - currTabHt/math.tan(math.radians(currTabAngle)) + tl1 = [('M', [pt1.x,pt1.y])] + tl1 += [('L', [tpt1.x, tpt1.y])] + ele1 = inkex.Path(tl1) + tl2 = [('M', [pt1.x,pt1.y])] + tl2 += [('L', [tpt2.x, tpt2.y])] + ele2 = inkex.Path(tl2) + thetal1 = ele1.rotate(theta, [pt1.x,pt1.y]) + thetal2 = ele2.rotate(theta, [pt2.x,pt2.y]) + tpt1.x = thetal1[1].x + tpt1.y = thetal1[1].y + tpt2.x = thetal2[1].x + tpt2.y = thetal2[1].y + else: # pt1.x > pt2.x + tpt1.y = pt1.y - testHt + tpt2.y = pt2.y - testHt + tpt1.x = pt1.x - testHt/math.tan(math.radians(testAngle)) + tpt2.x = pt2.x + testHt/math.tan(math.radians(testAngle)) + tl1 = [('M', [pt1.x,pt1.y])] + tl1 += [('L', [tpt1.x, tpt1.y])] + ele1 = inkex.Path(tl1) + tl2 = [('M', [pt1.x,pt1.y])] + tl2 += [('L', [tpt2.x, tpt2.y])] + ele2 = inkex.Path(tl2) + thetal1 = ele1.rotate(theta, [pt1.x,pt1.y]) + thetal2 = ele2.rotate(theta, [pt2.x,pt2.y]) + tpt1.x = thetal1[1].x + tpt1.y = thetal1[1].y + tpt2.x = thetal2[1].x + tpt2.y = thetal2[1].y + pnpt1 = inkex.paths.Move(tpt1.x, tpt1.y) + pnpt2 = inkex.paths.Move(tpt2.x, tpt2.y) + if ((not tpath.enclosed) and (self.insidePath(tpath.path, pnpt1) or self.insidePath(tpath.path, pnpt2))) or \ + (tpath.enclosed and ((not self.insidePath(tpath.path, pnpt1)) and (not self.insidePath(tpath.path, pnpt2)))): + tpt1.y = pt1.y + currTabHt + tpt2.y = pt2.y + currTabHt + else: + tpt1.y = pt1.y - currTabHt + tpt2.y = pt2.y - currTabHt + tpt1.x = pt1.x - currTabHt/math.tan(math.radians(currTabAngle)) + tpt2.x = pt2.x + currTabHt/math.tan(math.radians(currTabAngle)) + tl1 = [('M', [pt1.x,pt1.y])] + tl1 += [('L', [tpt1.x, tpt1.y])] + ele1 = inkex.Path(tl1) + tl2 = [('M', [pt1.x,pt1.y])] + tl2 += [('L', [tpt2.x, tpt2.y])] + ele2 = inkex.Path(tl2) + thetal1 = ele1.rotate(theta, [pt1.x,pt1.y]) + thetal2 = ele2.rotate(theta, [pt2.x,pt2.y]) + tpt1.x = thetal1[1].x + tpt1.y = thetal1[1].y + tpt2.x = thetal2[1].x + tpt2.y = thetal2[1].y + else: # slope > 0.0 + if pt1.x < pt2.x: + tpt1.y = pt1.y - testHt + tpt2.y = pt2.y - testHt + tpt1.x = pt1.x + testHt/math.tan(math.radians(testAngle)) + tpt2.x = pt2.x - testHt/math.tan(math.radians(testAngle)) + tl1 = [('M', [pt1.x,pt1.y])] + tl1 += [('L', [tpt1.x, tpt1.y])] + ele1 = inkex.Path(tl1) + tl2 = [('M', [pt1.x,pt1.y])] + tl2 += [('L', [tpt2.x, tpt2.y])] + ele2 = inkex.Path(tl2) + thetal1 = ele1.rotate(theta, [pt1.x,pt1.y]) + thetal2 = ele2.rotate(theta, [pt2.x,pt2.y]) + tpt1.x = thetal1[1].x + tpt1.y = thetal1[1].y + tpt2.x = thetal2[1].x + tpt2.y = thetal2[1].y + pnpt1 = inkex.paths.Move(tpt1.x, tpt1.y) + pnpt2 = inkex.paths.Move(tpt2.x, tpt2.y) + if ((not tpath.enclosed) and (self.insidePath(tpath.path, pnpt1) or self.insidePath(tpath.path, pnpt2))) or \ + (tpath.enclosed and ((not self.insidePath(tpath.path, pnpt1)) and (not self.insidePath(tpath.path, pnpt2)))): + tpt1.y = pt1.y + currTabHt + tpt2.y = pt2.y + currTabHt + else: + tpt1.y = pt1.y - currTabHt + tpt2.y = pt2.y - currTabHt + tpt1.x = pt1.x + currTabHt/math.tan(math.radians(currTabAngle)) + tpt2.x = pt2.x - currTabHt/math.tan(math.radians(currTabAngle)) + tl1 = [('M', [pt1.x,pt1.y])] + tl1 += [('L', [tpt1.x, tpt1.y])] + ele1 = inkex.Path(tl1) + tl2 = [('M', [pt1.x,pt1.y])] + tl2 += [('L', [tpt2.x, tpt2.y])] + ele2 = inkex.Path(tl2) + thetal1 = ele1.rotate(theta, [pt1.x,pt1.y]) + thetal2 = ele2.rotate(theta, [pt2.x,pt2.y]) + tpt1.x = thetal1[1].x + tpt1.y = thetal1[1].y + tpt2.x = thetal2[1].x + tpt2.y = thetal2[1].y + else: # pt1.x > pt2.x + tpt1.y = pt1.y - testHt + tpt2.y = pt2.y - testHt + tpt1.x = pt1.x - testHt/math.tan(math.radians(testAngle)) + tpt2.x = pt2.x + testHt/math.tan(math.radians(testAngle)) + tl1 = [('M', [pt1.x,pt1.y])] + tl1 += [('L', [tpt1.x, tpt1.y])] + ele1 = inkex.Path(tl1) + tl2 = [('M', [pt1.x,pt1.y])] + tl2 += [('L', [tpt2.x, tpt2.y])] + ele2 = inkex.Path(tl2) + thetal1 = ele1.rotate(theta, [pt1.x,pt1.y]) + thetal2 = ele2.rotate(theta, [pt2.x,pt2.y]) + tpt1.x = thetal1[1].x + tpt1.y = thetal1[1].y + tpt2.x = thetal2[1].x + tpt2.y = thetal2[1].y + pnpt1 = inkex.paths.Move(tpt1.x, tpt1.y) + pnpt2 = inkex.paths.Move(tpt2.x, tpt2.y) + if ((not tpath.enclosed) and (self.insidePath(tpath.path, pnpt1) or self.insidePath(tpath.path, pnpt2))) or \ + (tpath.enclosed and ((not self.insidePath(tpath.path, pnpt1)) and (not self.insidePath(tpath.path, pnpt2)))): + tpt1.y = pt1.y + currTabHt + tpt2.y = pt2.y + currTabHt + else: + tpt1.y = pt1.y - currTabHt + tpt2.y = pt2.y - currTabHt + tpt1.x = pt1.x - currTabHt/math.tan(math.radians(currTabAngle)) + tpt2.x = pt2.x + currTabHt/math.tan(math.radians(currTabAngle)) + tl1 = [('M', [pt1.x,pt1.y])] + tl1 += [('L', [tpt1.x, tpt1.y])] + ele1 = inkex.Path(tl1) + tl2 = [('M', [pt1.x,pt1.y])] + tl2 += [('L', [tpt2.x, tpt2.y])] + ele2 = inkex.Path(tl2) + thetal1 = ele1.rotate(theta, [pt1.x,pt1.y]) + thetal2 = ele2.rotate(theta, [pt2.x,pt2.y]) + tpt1.x = thetal1[1].x + tpt1.y = thetal1[1].y + tpt2.x = thetal2[1].x + tpt2.y = thetal2[1].y + # Check to see if any tabs intersect each other + if self.detectIntersect(pt1.x, pt1.y, tpt1.x, tpt1.y, pt2.x, pt2.y, tpt2.x, tpt2.y): + # Found an intersection. + if adjustTab == 0: + # Try increasing the tab angle in one-degree increments + currTabAngle = currTabAngle + 1.0 + if currTabAngle > 88.0: # We're not increasing the tab angle above 89 degrees + adjustTab = 1 + currTabAngle = taba + if adjustTab == 1: + # So, try reducing the tab height in 20% increments instead + currTabHt = currTabHt - tabht*0.2 # Could this lead to a zero tab_height? + if currTabHt <= 0.0: + # Give up + currTabHt = tabht + adjustTab = 2 + if adjustTab == 2: + tabDone = True # Just show the failure + else: + tabDone = True + + return tpt1,tpt2 + + def effect(self): + layer = self.svg.get_current_layer() + doc_layer = self.svg.add(inkex.elements._groups.Layer.new('Layer Doc')) + scale = self.svg.unittouu('1'+self.options.unit) + extrude = float(self.options.extrude) * scale + maxstrip = float(self.options.maxstrip) * scale + tab_angle = float(self.options.tabangle) + tab_height = float(self.options.tabheight) * scale + dashlength = float(self.options.dashlength) * scale + #tabsets = self.options.tabsets <-- for a future feature + npaths = [] + elems = [] + for selem in self.svg.selection.filter(inkex.PathElement): + elems.append(selem) + if len(elems) == 0: + raise inkex.AbortExtension("Nothing selected") + for elem in elems: + backend = elem.copy() # Make a copy of it + layer.append(backend) + escale = 1.0 + if 'transform' in elem.attrib: + transforms = elem.attrib['transform'].split() + for tf in transforms: + if tf.startswith('scale'): + escale = float(tf.split('(')[1].split(')')[0]) + # Get style of original polygon + if 'style' in elem.attrib: + sstr = elem.attrib['style'] + if not math.isclose(escale, 1.0): + lsstr = sstr.split(';') + for stoken in range(len(lsstr)): + if lsstr[stoken].startswith('stroke-width'): + swt = lsstr[stoken].split(':')[1] + swf = str(float(swt)*escale) + lsstr[stoken] = lsstr[stoken].replace(swt, swf) + if lsstr[stoken].startswith('stroke-miterlimit'): + swt = lsstr[stoken].split(':')[1] + swf = str(float(swt)*escale) + lsstr[stoken] = lsstr[stoken].replace(swt, swf) + sstr = ";".join(lsstr) + else: + sstr = None + last_letter = 'Z' + savid = elem.get_id() + idmod = 0 + parent = elem.getparent() + #if parent != self.svg.root: + # elem.path.transform = elem.path.transform(parent.composed_transform()) + elementPath = elem.path.to_non_shorthand().to_absolute() + isClosed = False + raw = elementPath.to_arrays() + if raw[-1][0] == 'Z' or \ + (raw[-1][0] == 'L' and raw[0][1] == raw[-1][1]) or \ + (raw[-1][0] == 'C' and raw[0][1] == [raw[-1][1][-2], raw[-1][1][-1]]) \ + : #if first is last point the path is also closed. The "Z" command is not required + isClosed = True + if isClosed is False: + if self.options.print_debug is True: + self.msg("Warning! Path {} is not closed. Skipping ...".format(elem.get('id'))) + continue + npaths.clear() + + for ptoken in elementPath: # For each point in the path + ptx2 = None + pty2 = None + if ptoken.letter == 'M': # Starting point + # Hold this point in case we receive a Z + ptx1 = mx = ptoken.x * escale + pty1 = my = ptoken.y * escale + ''' + Assign a structure to the new path. We assume that there is + only one path and, therefore, it isn't enclosed by a + sub-path. However, we'll suffix the ID, if we find a + sub-path. + ''' + npath = pathStruct() + npath.enclosed = False + npath.id = elem.get_id()+"-"+str(idmod) + idmod += 1 + npath.path.append(inkex.paths.Move(ptx1,pty1)) + else: + if last_letter != 'M': + ptx1 = ptx2 + pty1 = pty2 + if ptoken.letter == 'L': + ptx2 = ptoken.x * escale + pty2 = ptoken.y * escale + elif ptoken.letter == 'H': + ptx2 = ptoken.x * escale + pty2 = pty1 + elif ptoken.letter == 'V': + ptx2 = ptx1 + pty2 = ptoken.y * escale + elif ptoken.letter == 'Z': + ptx2 = mx + pty2 = my + else: + raise inkex.AbortExtension("Unrecognized path command {0}. Please convert to polyline before!".format(ptoken.letter)) + npath.path.append(inkex.paths.Line(ptx2,pty2)) + if ptoken.letter == 'Z': + npaths.append(npath) + last_letter = ptoken.letter + # check for cutouts + if idmod > 1: + for apath in npaths: # We test these paths to see if they are fully enclosed + for bpath in npaths: # by these paths + if self.pathInsidePath(bpath.path, apath.path): + apath.enclosed = True + for opath in npaths: + if True: # We'll handle outside paths and the cutouts, too + # create the extruded path + xpos = ypos = 0.0 + segs = pathStruct() + segs.enclosed = False + segs.id = opath.id+"x" + segs.path.append(inkex.paths.Move(xpos,ypos)) + strips = [] # Needed because a single strip might be larger than the paper + scores = [] # holds lists of individual score lines per strip + score = [] # holds a list of individual score lines + spaths = '' + # create left edge of path + for jnode in range(0,len(opath.path)-1): + if jnode == 0: + # Let's draw the first two node numbers to show the starting point and direction + self.add_doc(opath.path, opath.path[jnode], opath.path[jnode+1], 0.5*tab_height, doc_layer) + # calculate length of segment between jnode and jnode+1 + seglength = math.sqrt((opath.path[jnode].x - opath.path[jnode+1].x)**2 + (opath.path[jnode].y - opath.path[jnode+1].y)**2) + if ypos + seglength + tab_height >= maxstrip: + # have to cut it at last segment + strips.append(copy.deepcopy(segs)) + segs = pathStruct() # start a new segment + segs.enclosed = False + segs.id = opath.id+"x" + ypos = 0 + scores.append(copy.deepcopy(score)) + score.clear() + spaths = '' + segs.path.append(inkex.paths.Move(xpos,ypos)) + ypos = ypos + seglength + segs.path.append(inkex.paths.Move(xpos,ypos)) + if jnode < len(opath.path)-1: + # Generate score lines across extrusion + score.append(self.makescore(inkex.paths.Move(xpos,ypos), inkex.paths.Move(extrude, ypos),dashlength)) + strips.append(copy.deepcopy(segs)) + scores.append(copy.deepcopy(score)) + score.clear() + # create right edge of path + for knode in range(len(strips)): + rsegs = strips[knode].path[::-1] + for jnode in range(0,len(rsegs)): + strips[knode].path.append(inkex.paths.Move(extrude, rsegs[jnode].y)) + rsegs.clear() + # Generate the deco strips from the extruded paths + for stripcnt in range(len(strips)): + for nodes in range(len(strips[stripcnt].path)): + if nodes == 0: + dprop = 'M ' + else: + dprop = dprop + ' L ' + dprop = dprop + str(strips[stripcnt].path[nodes].x) + ',' + str(strips[stripcnt].path[nodes].y) + ## and close the path + dprop = dprop + ' Z' + spaths = '' + for scorecnt in range(len(scores[stripcnt])-1): # each list of individual scorelines across extrusion per strip + scorex = scores[stripcnt][scorecnt] + for sc in scorex: + spaths += sc + if math.isclose(dashlength, 0.0) and spaths != '': + group = inkex.elements._groups.Group() + group.label = 'g'+opath.id+'ws'+str(stripcnt) + if self.options.generate_decorative_wrapper is True: + self.drawline(dprop,'wrapper'+str(stripcnt),group,sstr) # Output the model + self.drawline(spaths[1:],'score'+str(stripcnt)+'m',group,sstr) # Output the scorelines separately + layer.append(group) + else: + dprop = dprop + spaths + self.drawline(dprop,opath.id+'d'+str(stripcnt),layer,sstr) + # Generate the tabbed strips from the extruded paths + dprop = '' + for stripcnt in range(len(strips)): + strip = strips[stripcnt] + mpath = [strip.path[0]] + for ptn in range(len(strip.path)-1): + tabpt1, tabpt2 = self.makeTab(strip, strip.path[ptn], strip.path[ptn+1], tab_height, tab_angle) + mpath.append(tabpt1) + mpath.append(tabpt2) + mpath.append(strip.path[ptn+1]) + score.append(self.makescore(strip.path[ptn], strip.path[ptn+1],dashlength)) + scores[stripcnt].append(copy.deepcopy(score)) + score.clear() + for nodes in range(len(mpath)): + if nodes == 0: + dprop = 'M ' + else: + dprop = dprop + ' L ' + dprop = dprop + str(mpath[nodes].x) + ',' + str(mpath[nodes].y) + ## and close the path + dprop = dprop + ' Z' + spaths = '' + for scorecnt in range(len(scores[stripcnt])): # each list of individual scorelines across extrusion and tabs per strip + scorex = scores[stripcnt][scorecnt] + for sc in scorex: + spaths += sc + if spaths != '': + group = inkex.elements._groups.Group() + group.label = 'g'+opath.id+'ms'+str(stripcnt) + self.drawline(dprop,'model'+str(stripcnt),group,sstr+';stroke:{}'.format(self.options.color_solid)) # Output the model + dscore_style = sstr+';stroke:{}'.format(self.options.color_dash) + if self.options.cosmetic_dash_style is True: + dscore_style += ';stroke-dasharray:{}'.format(3, 3) + self.drawline(spaths[1:],'score'+str(stripcnt)+'m',group,dscore_style) # Output the scorelines separately + layer.append(group) + + +if __name__ == '__main__': + Extruder().run() diff --git a/extensions/fablabchemnitz/fibonacci_pattern/fibonacci_pattern.inx b/extensions/fablabchemnitz/fibonacci_pattern/fibonacci_pattern.inx new file mode 100644 index 00000000..b6eabcb3 --- /dev/null +++ b/extensions/fablabchemnitz/fibonacci_pattern/fibonacci_pattern.inx @@ -0,0 +1,20 @@ + + + Fibonacci Pattern + fablabchemnitz.de.fibonacci_pattern + 2 + 5 + 400 + 20 + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/fibonacci_pattern/fibonacci_pattern.py b/extensions/fablabchemnitz/fibonacci_pattern/fibonacci_pattern.py new file mode 100644 index 00000000..33ee8b70 --- /dev/null +++ b/extensions/fablabchemnitz/fibonacci_pattern/fibonacci_pattern.py @@ -0,0 +1,86 @@ +#!/usr/bin/env python3 +''' +Copyright (C) 2015-2015 Carlos Mostek carlosmostek@gmail.com + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +''' +import math +import inkex +from lxml import etree + +# This is basically the draw method from the help guides for inkscape +def draw_SVG_ellipse(rx, ry, cx, cy, parent, start_end=(0,2*math.pi),transform='' ): + + style = { 'stroke' : '#000000', + 'stroke-width' : '1', + 'fill' : 'none' } + ell_attribs = {'style':str(inkex.Style(style)), + inkex.addNS('cx','sodipodi') :str(cx), + inkex.addNS('cy','sodipodi') :str(cy), + inkex.addNS('rx','sodipodi') :str(rx), + inkex.addNS('ry','sodipodi') :str(ry), + inkex.addNS('start','sodipodi') :str(start_end[0]), + inkex.addNS('end','sodipodi') :str(start_end[1]), + inkex.addNS('open','sodipodi') :'true', #all ellipse sectors we will draw are open + inkex.addNS('type','sodipodi') :'arc', + 'transform' :transform + } + ell = etree.SubElement(parent, inkex.addNS('path','svg'), ell_attribs ) + +# This is the workhorse, it draws the circle based on which node number +def drawKthCircle(k,firstRadius,lastRadius,numNodes,spreadFactor,parent): + # Use golden circle phi + phi = (math.sqrt(5) - 1)/2 + + # Calculate the node radius + growth = lastRadius - firstRadius + nodeRadius = firstRadius + growth*float(k - 1)/float(numNodes) + + # Calculate X and Y from theta = 2 pi phi k and radius = sqrt(k) + r = spreadFactor * math.sqrt(k) + theta = 2*math.pi*phi*k + + # use simple trig to get cx and cy + x = r * math.cos(theta) + y = r * math.sin(theta) + + # Add the px to the size + nodeRadiusTxt = "%spx"%nodeRadius + + # Draw the node + draw_SVG_ellipse(nodeRadiusTxt,nodeRadiusTxt,x,y,parent) + + +class FibonacciPattern(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument("-f", "--FirstRadius", type=int, default="5", help="The radius of the first layer of circles in pixels.") + pars.add_argument("-l", "--LastRadius", type=int, default="10", help="The radius of the last layer of circles in pixels.") + pars.add_argument("-n", "--NumberOfNodes", type=int, default="5", help="The number of layers in the fibonacci spiral") + pars.add_argument("-s", "--SpreadFactor",type=int, default="10", help="This will create a larger spread between the nodes from the center.") + + def effect(self): + # Foreach Node + for k in range(1,self.options.NumberOfNodes): + # Draw the circle + drawKthCircle(k, + self.options.FirstRadius, + self.options.LastRadius, + self.options.NumberOfNodes, + self.options.SpreadFactor, + self.svg.get_current_layer()) + +if __name__ == '__main__': + FibonacciPattern().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/fill_rectangle_with_circle/fill_rectangle_with_circle.inx b/extensions/fablabchemnitz/fill_rectangle_with_circle/fill_rectangle_with_circle.inx new file mode 100644 index 00000000..466ba176 --- /dev/null +++ b/extensions/fablabchemnitz/fill_rectangle_with_circle/fill_rectangle_with_circle.inx @@ -0,0 +1,19 @@ + + + Fill Rectangle With Circles + fablabchemnitz.fill_rectangle_with_circle + 3.0 + 10.0 + 30.0 + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/fill_rectangle_with_circle/fill_rectangle_with_circle.py b/extensions/fablabchemnitz/fill_rectangle_with_circle/fill_rectangle_with_circle.py new file mode 100644 index 00000000..d16515df --- /dev/null +++ b/extensions/fablabchemnitz/fill_rectangle_with_circle/fill_rectangle_with_circle.py @@ -0,0 +1,83 @@ +#!/usr/bin/env python3 + +# Program allowing the addition of small grey dots in rectangles created using Inkscape. + +# Thomas Guzik, thomas.guzik@laposte.net +# Leo 130 contact@avilab.fr +# Corentin Bettiol - corentin-bettiol@hotmail.fr + +# -Creative Commons License +# -This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. +# -http://creativecommons.org/licenses/by-nc-sa/4.0/ + +import inkex +from lxml import etree + +def recup(selection, attrib): + l = [] + for i in selection: + selec = i + valr = selec.get(attrib) + l.append(valr) + return l + +def generCircle(y, x, r): + circle = etree.Element('{http://www.w3.org/2000/svg}circle') + circle.set('cy',str(y)) + circle.set('cx',str(x)) + circle.set('r',str(r)) + circle.set('fill','#000000') + circle.set('stroke','#000000') + circle.set('stroke-width','0') + return circle + +def toFloat(l): + for i in range(len(l)): + l[i] = float(l[i]) + return l + +class FillRectangleWithCircle(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument('--radius', type = float, default = 3.0, help = 'Radius to enter') + pars.add_argument('--margin', type = float, default = 10.0, help = 'Margin between the edge of the rectangles and the circles') + pars.add_argument('--space', type = float, default = 30.0, help = 'Spacing between circles') + + def effect(self): + # svg = self.svg.document.getroot() + # layer = etree.SubElement(svg, 'g') + # layer.set(inkex.addNS('label', 'inkscape'), 'Layer') + # layer.set(inkex.addNS('groupmode', 'inkscape'), 'layer') + # Should we add the circles on a different layer sheet? + + radius = self.options.radius + margin = self.options.margin + space = self.options.space + + if str(list(self.svg.selected.values())[0]) == 'rect': + selection = (self.svg.selected).values() + + y,x,height,width = [], [], [], [] + + if (len(selection))>0: + y = toFloat(recup(selection,'y')) + x = toFloat(recup(selection,'x')) + height = toFloat(recup(selection,'height')) + width = toFloat(recup(selection,'width')) + + for i in range(len(selection)): + xC = x[i] + margin + yC = y[i] + margin + + while xC < (x[i] + width[i] - margin): + while yC < (y[i] + height[i] - margin): + self.svg.get_current_layer().append(generCircle(yC,xC,radius)) + yC += (space + radius) + + xC += space + radius + yC = y[i] + margin + else: + inkex.utils.debug("No rectangle(s) have been selected.") + +if __name__ == '__main__': + FillRectangleWithCircle().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/fillet_and_chamfer/fillet_and_chamfer.inx b/extensions/fablabchemnitz/fillet_and_chamfer/fillet_and_chamfer.inx new file mode 100644 index 00000000..26023d66 --- /dev/null +++ b/extensions/fablabchemnitz/fillet_and_chamfer/fillet_and_chamfer.inx @@ -0,0 +1,28 @@ + + + Fillet And Chamfer + fablabchemnitz.de.fillet_and_chamfer + + + + + 5.0 + + + + + + + false + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/fillet_and_chamfer/fillet_and_chamfer.py b/extensions/fablabchemnitz/fillet_and_chamfer/fillet_and_chamfer.py new file mode 100644 index 00000000..b6ebc654 --- /dev/null +++ b/extensions/fablabchemnitz/fillet_and_chamfer/fillet_and_chamfer.py @@ -0,0 +1,293 @@ +#!/usr/bin/env python3 +''' +Copyright (C) 2018 Tao Wei taowei@buffalo.edu + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +''' +import inkex +import math +import svgpathtools +from lxml import etree + +KAPPA = 4/3. * (math.sqrt(2)-1) + +def cround(cnumber, ndigits): + return round(cnumber.real, ndigits) + round(cnumber.imag, ndigits)*1j + +def round_seg(seg, ndigits): + seg.start = cround(seg.start, ndigits) + seg.end = cround(seg.end, ndigits) + return seg + +def round_path(p, ndigits=6): + """fix for precision issue""" + for seg in p: + round_seg(seg, ndigits) + return p + +def remove_zero_length_segments(p, eps=1e-6): + "z will add a zero length line segment" + return svgpathtools.Path(*filter(lambda seg: seg.length() > eps, p)) + +def iscontinuous(p): + for seg1, seg2 in zip(p[:-1], p[1:]): + if abs(seg1.end-seg2.start) >= 1e-6: + return False + return True + +def isclosedac(p): + return abs(p.start-p.end) < 1e-6 + +def isclosed(p): + assert iscontinuous(p) + return isclosedac(p) + +from svgpathtools.path import Line, CubicBezier, QuadraticBezier, Arc + +def d_str(self, useSandT=False, use_closed_attrib=False, rel=False): + """Returns a path d-string for the path object. + For an explanation of useSandT and use_closed_attrib, see the + compatibility notes in the README.""" + + if use_closed_attrib: + self_closed = self.iscontinuous() and self.isclosed() + if self_closed: + segments = self[:-1] + else: + segments = self[:] + else: + self_closed = False + segments = self[:] + + current_pos = None + parts = [] + previous_segment = None + end = self[-1].end + + for segment in segments: + seg_start = segment.start + # If the start of this segment does not coincide with the end of + # the last segment or if this segment is actually the close point + # of a closed path, then we should start a new subpath here. + if current_pos != seg_start or \ + (self_closed and seg_start == end and use_closed_attrib): + if rel: + _seg_start = seg_start - current_pos if current_pos is not None else seg_start + else: + _seg_start = seg_start + parts.append('M {},{}'.format(_seg_start.real, _seg_start.imag)) + + if isinstance(segment, Line): + if rel: + _seg_end = segment.end - seg_start + else: + _seg_end = segment.end + parts.append('L {},{}'.format(_seg_end.real, _seg_end.imag)) + elif isinstance(segment, CubicBezier): + if useSandT and segment.is_smooth_from(previous_segment, + warning_on=False): + if rel: + _seg_control2 = segment.control2 - seg_start + _seg_end = segment.end - seg_start + else: + _seg_control2 = segment.control2 + _seg_end = segment.end + args = (_seg_control2.real, _seg_control2.imag, + _seg_end.real, _seg_end.imag) + parts.append('S {},{} {},{}'.format(*args)) + else: + if rel: + _seg_control1 = segment.control1 - seg_start + _seg_control2 = segment.control2 - seg_start + _seg_end = segment.end - seg_start + else: + _seg_control1 = segment.control1 + _seg_control2 = segment.control2 + _seg_end = segment.end + args = (_seg_control1.real, _seg_control1.imag, + _seg_control2.real, _seg_control2.imag, + _seg_end.real, _seg_end.imag) + parts.append('C {},{} {},{} {},{}'.format(*args)) + elif isinstance(segment, QuadraticBezier): + if useSandT and segment.is_smooth_from(previous_segment, + warning_on=False): + if rel: + _seg_end = segment.end - seg_start + else: + _seg_end = segment.end + args = _seg_end.real, _seg_end.imag + parts.append('T {},{}'.format(*args)) + else: + if rel: + _seg_control = segment.control - seg_start + _seg_end = segment.end - seg_start + else: + _seg_control = segment.control + _seg_end = segment.end + args = (_seg_control.real, _seg_control.imag, + _seg_end.real, _seg_end.imag) + parts.append('Q {},{} {},{}'.format(*args)) + + elif isinstance(segment, Arc): + if rel: + _seg_end = segment.end - seg_start + else: + _seg_end = segment.end + args = (segment.radius.real, segment.radius.imag, + segment.rotation,int(segment.large_arc), + int(segment.sweep),_seg_end.real, _seg_end.imag) + parts.append('A {},{} {} {:d},{:d} {},{}'.format(*args)) + current_pos = segment.end + previous_segment = segment + + if self_closed: + parts.append('Z') + + s = ' '.join(parts) + return s if not rel else s.lower() + +class FilletAndChamfer(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument("-t", "--fillet_type", default="fillet", help="Selects whether using fillet or chamfer") + pars.add_argument("-R", "--radius", type=float, default=60.0, help="The radius") + pars.add_argument('--unit', default='px', help='units of measurement') + pars.add_argument("--remove", type=inkex.Boolean, default=False, help="If True, control object will be removed") + + def addEle(self, ele, parent, props): + # https://inkscape.org/~pacogarcia/%E2%98%85new-version-of-shapes-extension + elem = etree.SubElement(parent, ele) + for n in props: elem.set(n,props[n]) + return elem + + def circle(self, c, r): + return svgpathtools.parse_path("m %f,%f a %f,%f 0 0 1 -%f,%f %f,%f 0 0 1 -%f,-%f %f,%f 0 0 1 %f,-%f %f,%f 0 0 1 %f,%f z" % tuple((c.real+r, c.imag) + (r,)*16)) + + def _calc_fillet_for_joint(self, p, i): + seg1 = p[(i) % len(p)] + seg2 = p[(i+1) % len(p)] + + ori_p = svgpathtools.Path(seg1, seg2) + new_p = svgpathtools.Path() + + # ignore the node if G1 continuity + tg1 = seg1.unit_tangent(1.0) + tg2 = seg2.unit_tangent(0.0) + cosA = abs(tg1.real * tg2.real + tg1.imag * tg2.imag) + if abs(cosA - 1.0) < 1e-6: + new_p.append(seg1.cropped(self._prev_t, 1.0)) + self._prev_t = 0.0 + if self._very_first_t is None: + self._very_first_t = 1.0 + if not isclosedac(p) and i == len(p) - 2: + new_p.append(seg2.cropped(0.0, 1.0)) # add last segment if not closed + else: + cir = self.circle(seg1.end, self.options.radius) + # new_p.extend(cir) + + intersects = ori_p.intersect(cir) + if len(intersects) != 2: + inkex.errormsg("Some fillet or chamfer may not be drawn: %d intersections!" % len(intersects)) + new_p.append(seg1.cropped(self._prev_t, 1.0)) + self._prev_t = 0.0 + if self._very_first_t is None: + self._very_first_t = 1.0 + if not isclosedac(p) and i == len(p) - 2: + new_p.append(seg2.cropped(0.0, 1.0)) # add last segment if not closed + else: + cb = []; segs = []; ts = [] + for (T1, seg1, t1), (T2, seg2, t2) in intersects: + c1 = seg1.point(t1) + tg1 = seg1.unit_tangent(t1) * (self.options.radius * KAPPA) + cb.extend([c1, tg1]) + segs.append(seg1); ts.append(t1) + + # cir1 = self.circle(c1, self.options.radius * KAPPA) + # new_p.extend(cir1) + # new_p.append(svgpathtools.Line(c1, c1+tg1)) + + assert len(cb) == 4 + new_p.append(segs[0].cropped(self._prev_t, ts[0])) + if self.options.fillet_type == 'fillet': + fillet = svgpathtools.CubicBezier(cb[0], cb[0]+cb[1], cb[2]-cb[3], cb[2]) + else: + fillet = svgpathtools.Line(cb[0], cb[2]) + new_p.append(fillet) + self._prev_t = ts[1] + if self._very_first_t is None: + self._very_first_t = ts[0] + + if isclosedac(p) and i == len(p) - 1: + new_p.append(segs[1].cropped(ts[1], self._very_first_t)) # update first segment if closed + elif not isclosedac(p) and i == len(p) - 2: + new_p.append(segs[1].cropped(ts[1], 1.0)) # add last segment if not closed + +# # fix for the first segment +# if p.isclosed(): +# new_p[0] = p[0].cropped(ts[1], self._very_first_t) + +# new_p.append(segs[0].cropped(ts[0], 1.0)) +# new_p.append(segs[1].cropped(0.0, ts[1])) +# if self.options.fillet_type == 'fillet': +# fillet = svgpathtools.CubicBezier(cb[0], cb[0]+cb[1], cb[2]-cb[3], cb[2]) +# else: +# fillet = svgpathtools.Line(cb[0], cb[2]) +# new_p.append(fillet.reversed()) + + return new_p + + def add_fillet_to_path(self, d): + p = svgpathtools.parse_path(d) + p = remove_zero_length_segments(p) # for z, a zero length line segment is possibly added + + if len(p) <= 1: + return d + + new_p = svgpathtools.Path() + self._prev_t = 0 # used as cache + self._very_first_t = None # update first segment if closed + if isclosedac(p): + for i in range(len(p)): + new_p.extend(self._calc_fillet_for_joint(p, i)) + if not isclosedac(new_p): + del new_p[0] # remove first segment if closed + else: + for i in range(len(p)-1): + new_p.extend(self._calc_fillet_for_joint(p, i)) + new_p = round_path(new_p, 6) + # inkex.errormsg(d_str(new_p, use_closed_attrib=True, rel=True)) + return d_str(new_p, use_closed_attrib=True, rel=True) + + def effect(self): + self.options.radius = self.svg.unittouu(str(self.options.radius) + self.options.unit) + + if self.options.radius == 0: + return + + for id, node in self.svg.selected.items(): + _shape = etree.QName(node.tag).localname + if _shape != "path": + inkex.errormsg("Fillet and chamfer only operates on path: %s is %s" % (id, _shape)) + else: + # inkex.errormsg(etree.tostring(node)) + attrib = {k:v for k,v in node.attrib.items()} + attrib['d'] = self.add_fillet_to_path(attrib['d']) + self.addEle(inkex.addNS('path','svg'), node.getparent(), attrib) + + if self.options.remove: + node.delete() + +if __name__ == '__main__': + FilletAndChamfer().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/filter_small_things/filter_small_things.inx b/extensions/fablabchemnitz/filter_small_things/filter_small_things.inx new file mode 100644 index 00000000..b7e2c130 --- /dev/null +++ b/extensions/fablabchemnitz/filter_small_things/filter_small_things.inx @@ -0,0 +1,27 @@ + + + Filter Small Things + fablabchemnitz.de.filter_small_things + + + + + + + 1.0 + + + + + + all + + + + + + + + diff --git a/extensions/fablabchemnitz/filter_small_things/filter_small_things.py b/extensions/fablabchemnitz/filter_small_things/filter_small_things.py new file mode 100644 index 00000000..97c3d0b0 --- /dev/null +++ b/extensions/fablabchemnitz/filter_small_things/filter_small_things.py @@ -0,0 +1,48 @@ +#!/usr/bin/env python3 + +''' +Extension for InkScape 1.0 +Features +- Filter paths which are smaller than a given length or area + +Author: Mario Voigt / FabLab Chemnitz +Mail: mario.voigt@stadtfabrikanten.org +Date: 03.08.2020 +Last patch: 20.04.2021 +License: GNU GPL v3 +''' + +import inkex +from inkex.bezier import csplength, csparea + +class FilterSmallThings(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument('--unit') + pars.add_argument('--threshold', type=float, help='Remove paths with an threshold smaller than this value') + pars.add_argument('--measure', default="length") + + def effect(self): + self.options.threshold = self.svg.unittouu(str(self.options.threshold) + self.svg.unit) + unit_factor = 1.0 / self.svg.uutounit(1.0,self.options.unit) + if self.options.threshold == 0: + return + + for element in self.document.xpath("//svg:path", namespaces=inkex.NSS): + try: + csp = element.path.transform(element.composed_transform()).to_superpath() + + if self.options.measure == "area": + area = -csparea(csp) #is returned as negative value. we need to invert with - + if area < (self.options.threshold * (unit_factor * unit_factor)): + element.delete() + + elif self.options.measure == "length": + slengths, stotal = csplength(csp) #get segment lengths and total length of path in document's internal unit + if stotal < (self.options.threshold * unit_factor): + element.delete() + except Exception as e: + pass + +if __name__ == '__main__': + FilterSmallThings().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/filter_to_layer/filter_to_layer.inx b/extensions/fablabchemnitz/filter_to_layer/filter_to_layer.inx new file mode 100644 index 00000000..96cab343 --- /dev/null +++ b/extensions/fablabchemnitz/filter_to_layer/filter_to_layer.inx @@ -0,0 +1,21 @@ + + + Filter To Layer + fablabchemnitz.de.filter_to_layer + + + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/filter_to_layer/filter_to_layer.py b/extensions/fablabchemnitz/filter_to_layer/filter_to_layer.py new file mode 100644 index 00000000..05b52699 --- /dev/null +++ b/extensions/fablabchemnitz/filter_to_layer/filter_to_layer.py @@ -0,0 +1,82 @@ +#!/usr/bin/env python3 +''' +This extension adds filters to current layer or removes filters from current layer + +Copyright (C) 2012 Jabiertxo Arraiza, jabier.arraiza@marker.es + +Version 0.3 + +TODO: +Comment Better!!! + +CHANGE LOG +0.1 Start 30/07/2012 + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +''' + +import inkex +import sys +import re + +class FilterToLayer(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument('--type', default = 'Add', help = 'Add or remove filters to current layer') + + def selectTop(self): + selectedSorted = None + if self.svg.selected is not None: + for element in self.document.getroot().iter(): + if element.get("id") in self.svg.selection: + selectedSorted = element + return selectedSorted + + def effect(self): + svg = self.document.getroot() + typeOperation = self.options.type + xpathStr = '//sodipodi:namedview' + namedview = svg.xpath(xpathStr, namespaces=inkex.NSS) + idLayer = namedview[0].get('{http://www.inkscape.org/namespaces/inkscape}current-layer'); + xpathStr = '//svg:g[@id="'+idLayer+'"]' + layer = svg.xpath(xpathStr, namespaces=inkex.NSS) + + if typeOperation == "Add": #Add action + element = self.selectTop() + if element is not None: + if element.get('style'): + matchObj = re.search( r'filter:url\(#.*?[^\)]\)', element.get('style'), re.M|re.I) + if matchObj: + filter = matchObj.group() + element.set('style',element.get('style').replace(filter,"").replace(";;",";")) + if layer[0].get('style'): + matchObj = re.search( r'filter:url\(#.*?[^\)]\)', layer[0].get('style'), re.M|re.I) + if matchObj: + element.set('style',element.get('style').replace(matchObj.group(),"").replace(";;",";")) + style = layer[0].get('style')+ ";" + filter; + layer[0].set('style',style.replace(";;",";")) + else: + layer[0].set('style',filter) + else: + inkex.utils.debug("Nothing selected") + + else: #Remove action + if layer[0].get('style'): + matchObj = re.search( r'filter:url\(#.*?[^\)]\)', layer[0].get('style'), re.M|re.I) + if matchObj: + layer[0].set('style',layer[0].get('style').replace(matchObj.group(),"").replace(";;",";")) + +if __name__ == '__main__': + FilterToLayer().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/flash_burst/flash_burst.inx b/extensions/fablabchemnitz/flash_burst/flash_burst.inx new file mode 100644 index 00000000..41945ce6 --- /dev/null +++ b/extensions/fablabchemnitz/flash_burst/flash_burst.inx @@ -0,0 +1,27 @@ + + + Flash Burst + fablabchemnitz.de.flash_burst + 10 + 10 + + 350 + 350 + + 5 + 10 + + 3 + 5 + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/flash_burst/flash_burst.py b/extensions/fablabchemnitz/flash_burst/flash_burst.py new file mode 100644 index 00000000..d5abab34 --- /dev/null +++ b/extensions/fablabchemnitz/flash_burst/flash_burst.py @@ -0,0 +1,105 @@ +#!/usr/bin/env python3 +# +# Copyright (C) 2021 Stefan Benediktsson +# +# GNU Affero General Public License v3.0 +# Permissions of this strongest copyleft license are +# conditioned on making available complete source code +# of licensed works and modifications, which include +# larger works using a licensed work, under the same +# license. Copyright and license notices must be preserved. +# Contributors provide an express grant of patent rights. +# When a modified version is used to provide a service +# over a network, the complete source code of the modified +# version must be made available. +""" +Generate a FlashBurst as SVG. +""" + +import random +from math import acos, cos, radians, sin, sqrt, tan + +import inkex + + +def points_to_svgd(p): + """ + p: list of 2 tuples (x, y coordinates) + """ + f = p[0] + p = p[1:] + svgd = 'M{:.3f},{:.3f}'.format(f[0], f[1]) + for x in p: + svgd += 'L{:.3f},{:.3f}'.format(x[0], x[1]) + svgd +='Z' + return svgd + +def checkSize(a, b): + if a >= b: + return b, a + else: + return a, b + +class FlashBurst(inkex.GenerateExtension): + container_label = 'Rendered FlashBurst' + def add_arguments(self, pars): + + pars.add_argument("--r1", type=int, default=20, help="Inner Radius min") + pars.add_argument("--r2", type=int, default=20, help="Inner Radius max") + pars.add_argument("--R1", type=int, default=350, help="Outer Radius min") + pars.add_argument("--R2", type=int, default=350, help="Outer Radius min") + pars.add_argument("--a1", type=int, default=5, help="Angle min") + pars.add_argument("--a2", type=int, default=7, help="Angle max") + pars.add_argument("--ad1", type=int, default=3, help="Angle delta min") + pars.add_argument("--ad2", type=int, default=2, help="Angle delta max") + + + + def generate(self): + r1 = self.options.r1 + r2 = self.options.r2 + R1 = self.options.R1 + R2 = self.options.R2 + a1 = self.options.a1 + a2 = self.options.a2 + ad1 = self.options.ad1 + ad2 = self.options.ad2 + + # generate points: list of (x, y) pairs + + r1, r2 = checkSize(r1, r2) + R1, R2 = checkSize(R1, R2) + a1, a2 = checkSize(a1, a2) + ad1, ad2 = checkSize(ad1, ad2) + + a = 0 + oX = 0 + oY = 0 + style = {'stroke': '#000000', 'fill': '#000000', 'stroke-width': str(self.svg.unittouu('1px'))} + + while a < 360: + a = a+random.randint(a1,a2) + dI = random.randint(r1,r2) + dO = random.randint(R1,R2) + ad = random.randint(ad1,ad2) + + x0 = cos(radians(a)) * dI + y0 = sin(radians(a)) * dI + + x10 = cos(radians(a-ad/2)) * dO + y10 = sin(radians(a-ad/2)) * dO + + x11 = cos(radians(a+ad/2)) * dO + y11 = sin(radians(a+ad/2)) * dO + + points = [] + points.append((x0, y0)) + points.append((x10,y10)) + points.append((x11,y11)) + path = points_to_svgd(points) + + yield inkex.PathElement(style=str(inkex.Style(style)), d=str(path)) + +if __name__ == '__main__': + FlashBurst().run() + diff --git a/extensions/fablabchemnitz/flevobezier/flevobezier.inx b/extensions/fablabchemnitz/flevobezier/flevobezier.inx new file mode 100644 index 00000000..e9f1f63b --- /dev/null +++ b/extensions/fablabchemnitz/flevobezier/flevobezier.inx @@ -0,0 +1,16 @@ + + + Flevobézier + fablabchemnitz.de.flevobezier + + path + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/flevobezier/flevobezier.py b/extensions/fablabchemnitz/flevobezier/flevobezier.py new file mode 100644 index 00000000..0492c6e6 --- /dev/null +++ b/extensions/fablabchemnitz/flevobezier/flevobezier.py @@ -0,0 +1,241 @@ +#!/usr/bin/env python3 +# Flevobezier: an Inkscape extension fitting Bezier curves +# Parcly Taxel / Jeremy Tan, 2019 +# https://gitlab.com/parclytaxel + +from __future__ import division +from math import * +from inkex.bezier import bezierpointatt +import inkex +import gettext +from inkex.paths import Path +import sys +def pout(t): sys.exit((gettext.gettext(t))) + +class FlevoBezier(inkex.EffectExtension): + + def effect(self): + if len(self.svg.selected) == 0: pout("Please select at least one path.") + for obj in self.svg.selected: # The objects are the paths, which may be compound + curr = self.svg.selected[obj] + raw = Path(curr.get("d")).to_arrays() + subpaths, prev = [], 0 + for i in range(len(raw)): # Breaks compound paths into simple paths + if raw[i][0] == 'M' and i != 0: + subpaths.append(raw[prev:i]) + prev = i + subpaths.append(raw[prev:]) + + output = "" + for simpath in subpaths: + closed = False + if simpath[-1][0] == 'Z': + closed = True + if simpath[-2][0] == 'L': simpath[-1][1] = simpath[0][1] + else: simpath.pop() + #nodes = [node(simpath[i][1][-2:]) for i in range(len(simpath))] + nodes = [] + for i in range(len(simpath)): + if simpath[i][0] == 'V': # vertical and horizontal lines only have one point in args, but 2 are required + #inkex.utils.debug(simpath[i][0]) + simpath[i][0]='L' #overwrite V with regular L command + add=simpath[i-1][1][0] #read the X value from previous segment + simpath[i][1].append(simpath[i][1][0]) #add the second (missing) argument by taking argument from previous segment + simpath[i][1][0]=add #replace with recent X after Y was appended + if simpath[i][0] == 'H': # vertical and horizontal lines only have one point in args, but 2 are required + #inkex.utils.debug(simpath[i][0]) + simpath[i][0]='L' #overwrite H with regular L command + simpath[i][1].append(simpath[i-1][1][1]) #add the second (missing) argument by taking argument from previous segment + #inkex.utils.debug(simpath[i]) + nodes.append(node(simpath[i][1][-2:])) + output += flevobezier(nodes, closed) + curr.set("d", output) + +# The main algorithm! Yay! +def flevobezier(points, z): + if len(points) < 2: pout("A curve isn't a point, silly!") + res = [] + prevtrail, trail, lead, window = 0, 0, 1, points[:2] # Start with first two points + maybeover = False # Over by error followed by over by angle -> backup + curcurve = [window[0], slide(window[0], window[1], 1 / 3), slide(window[0], window[1], 2 / 3), window[1]] # Current working curve, always a 4-list + while lead + 1 < len(points): + lead += 1 + window = points[trail:lead + 1] # Extend the window one more node + v = window[-3] - window[-2] + w = window[-1] - window[-2] + try: + dist(v) / dist(w) + except ZeroDivisionError as e: + pout("Division by zero. Check if your path contains duplicate handles.") + if dotp(v, w) / dist(v) / dist(w) >= 0.5: # 60 degrees or less, over by angle + if maybeover: # backup + newcurve = stress(points[prevtrail:lead])[0] + res[-3:] = newcurve[1:] # replace the last three nodes in res with those of newcurve + trail = lead - 1 + maybeover = False + else: + if not res: res += curcurve[:1] + res += curcurve[1:] + prevtrail = trail + trail = lead - 1 + window = points[trail:lead + 1] + curcurve = [window[0], slide(window[0], window[1], 1 / 3), slide(window[0], window[1], 2 / 3), window[1]] + else: # then see what to do based on how long the window is + over = False + if len(window) == 3: # Quadratic curve on three nodes stepped to a cubic + t = chords(window)[1] + qcurve = [window[0], (window[1] - (1 - t) * (1 - t) * window[0] - t * t * window[2]) / (2 * t * (1 - t)), window[2]] + newcurve = [qcurve[0], slide(qcurve[0], qcurve[1], 2 / 3), slide(qcurve[1], qcurve[2], 1 / 3), qcurve[2]] + elif len(window) == 4: # Cubic curve on four nodes + newcurve = cubicfrom4(window) + else: # Stress + product = stress(window) + shortseg = min([dist(window[i], window[i + 1]) for i in range(len(window) - 1)]) + # Stop condition: maximum error > 1 / 3 * minimum segment length + if max(product[1]) > 0.33 * shortseg: over = True + else: newcurve = product[0] + if over: # Over by error bound + maybeover = True + if not res: res += curcurve[:1] + res += curcurve[1:] + prevtrail = trail + trail = lead - 1 + window = points[trail:lead + 1] + curcurve = [window[0], slide(window[0], window[1], 1 / 3), slide(window[0], window[1], 2 / 3), window[1]] + else: curcurve, maybeover = newcurve, False + if maybeover: # When it has reached the end... + newcurve = stress(points[prevtrail:lead + 1])[0] + res[-3:] = newcurve[1:] + else: + if not res: res += curcurve[:1] + res += curcurve[1:] # If it has reached the end, accept curcurve + # Smoothing + ouro = res.pop() # Removes the final (redundant) node of closed paths. In the end, does not affect open paths. + for t in range(0, len(res), 3): + if t != 0 or z: # If not at beginning or if path is closed + v = res[t - 1] - res[t] # Previous handle + w = res[t + 1] - res[t] # Next handle + try: + angle = dotp(v, w) / dist(v) / dist(w) + if angle <= -0.94: # ~ cos(160 degrees) + # Rotate opposing handles and make a straight line. + theta = (pi - acos(angle)) / 2 # Angle to rotate by + sign = 1 if (dirc(v) > dirc(w)) ^ (abs(dirc(v) - dirc(w)) >= pi) else -1 # Direction to rotate (WTF?) + res[t - 1] = res[t] + spin(v, sign * theta) + res[t + 1] = res[t] + spin(w, -sign * theta) + except ZeroDivisionError: + pout("Path has only one point left. Cannot continue") + res.append(ouro) + # Formatting and final output + out = "M " + str(res[0]) + for c in range(1, len(res), 3): out += " ".join([" C", str(res[c]), str(res[c + 1]), str(res[c + 2])]) + if z: out += " Z " + return out + +'''Helper functions and classes below''' + +# Node object as a helper to simplify code. Calling it point would be SO cliched. +class node: + def __init__(self, x = None, y = None): + if y != None: self.x, self.y = float(x), float(y) + elif type(x) == list or type(x) == tuple: self.x, self.y = float(x[0]), float(x[1]) + else: self.x, self.y = 0.0, 0.0 + def __str__(self): return str(self.x) + " " + str(self.y) + def __repr__(self): return str(self) + def __add__(self, pode): return node(self.x + pode.x, self.y + pode.y) # Vector addition + def __sub__(self, pode): return node(self.x - pode.x, self.y - pode.y) # and subtraction + def __neg__(self): return node(-self.x, -self.y) + def __mul__(self, scal): # Multiplication by a scalar + if type(scal) == int or type(scal) == float: return node(self.x * scal, self.y * scal) + else: return node(self.x * scal.x - self.y * scal.y, self.y * scal.x + self.x * scal.y) # Fallback does complex multiplication + def __rmul__(self, scal): return self * scal + def __truediv__(self, scal): # Division by a scalar + if type(scal) == int or type(scal) == float: return node(self.x / scal, self.y / scal) + else: + n = scal.x * scal.x + scal.y * scal.y + return node(self.x * scal.x + self.y * scal.y, self.y * scal.x - self.x * scal.y) / n # Fallback does complex division + +# Operations on nodes +def dist(n0, n1 = None): return hypot(n1.y - n0.y, n1.x - n0.x) if n1 else hypot(n0.y, n0.x) # For these two functions +def dirc(n0, n1 = None): return atan2(n1.y - n0.y, n1.x - n0.x) if n1 else atan2(n0.y, n0.x) # n0 is the origin if n1 is present +def slide(n0, n1, t): return n0 + t * (n1 - n0) +def dotp(n0, n1): return n0.x * n1.x + n0.y * n1.y + +# Operation on vectors: rotation. Positive theta means counterclockwise rotation. +def spin(v, theta): return node(v.x * cos(theta) - v.y * sin(theta), v.x * sin(theta) + v.y * cos(theta)) + +# Wrapper function for node curves to mesh with bezierpointatt +def curveat(curve, t): return node(bezierpointatt(((node.x, node.y) for node in curve), t)) + +# This function takes in a list of nodes and returns +# a list of numbers between 0 and 1 corresponding to the relative positions +# of said nodes (assuming consecutive nodes are linked by straight lines). +# The first item is always 0.0 and the last one 1.0. +def chords(nodes): + lengths = [dist(nodes[i + 1], nodes[i]) for i in range(len(nodes) - 1)] + ratios = [0.0] + [sum(lengths[:i + 1]) / sum(lengths) for i in range(len(lengths))] + ratios[-1] = 1.0 # Just in case... + return ratios + +# Takes a list of four nodes and generates a curve passing through all based on chords(). +# If lm and mu (the two params for the middle nodes) are not given they are calculated. +def cubicfrom4(nodes, p = None, q = None): + if p == None or q == None: + store = chords(nodes) + lm, mu = store[1], store[2] # First one is short for lambda + else: lm, mu = p, q + a = 3 * (1 - lm) * (1 - lm) * lm + b = 3 * (1 - lm) * lm * lm + c = 3 * (1 - mu) * (1 - mu) * mu + d = 3 * (1 - mu) * mu * mu + x = nodes[1] - (1 - lm) ** 3 * nodes[0] - lm ** 3 * nodes[3] + y = nodes[2] - (1 - mu) ** 3 * nodes[0] - mu ** 3 * nodes[3] + det = a * d - b * c + if not det: pout("Singular matrix!") + l, m = (d * x - b * y) / det, (a * y - c * x) / det + return [nodes[0], l, m, nodes[3]] + +# Stress theory: takes a list of five or more nodes and stresses a curve to fit +def stress(string): + # Make an initial guess considering the end nodes together with the 2nd/2nd last, 3rd/3rd last, ... nodes. + # This is much faster than considering all sets of two interior nodes. + callipers, seeds = chords(string), [] + middle = len(string) // 2 + for i in range(1, middle): + seeds.append(cubicfrom4([string[0], string[i], string[-i - 1], string[-1]], callipers[i], callipers[-i - 1])) + a, b = node(), node() + for i in range(len(seeds)): + a += seeds[i][1] + b += seeds[i][2] + curve = [string[0], a / len(seeds), b / len(seeds), string[-1]] + # Refine by projection and handle shifting + for i in range(5): + for j in range(middle - 1, 0, -1): + delta1, delta2 = project(curve, string[j]), project(curve, string[-j - 1]) + curve[1] += 2.5 * delta1 + curve[2] += 2.5 * delta2 + errors = [dist(project(curve, k)) for k in string] + return curve, errors + +# Projection of node onto cubic curve based on public domain code by Mike "Pomax" Kamermans +# https://pomax.github.io/bezierinfo/#projections +def project(curve, node): + samples = 200 + lookup = [dist(curveat(curve, i / samples), node) for i in range(samples + 1)] + mindist = min(lookup) + t = lookup.index(mindist) / samples + width = 1 / samples # Width of search interval + while width > 1.0e-5: + left = dist(curveat(curve, max(t - width, 0)), node) + right = dist(curveat(curve, min(t + width, 1)), node) + if t == 0.0: left = mindist + 1 + if t == 1.0: right = mindist + 1 + if left < mindist or right < mindist: + mindist = min(left, right) + t = max(t - width, 0.0) if left < right else min(t + width, 1.0) + else: width /= 2 + projection = curveat(curve, t) + return node - projection + +if __name__ == '__main__': + FlevoBezier().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/flip/flip.inx b/extensions/fablabchemnitz/flip/flip.inx new file mode 100644 index 00000000..cd071345 --- /dev/null +++ b/extensions/fablabchemnitz/flip/flip.inx @@ -0,0 +1,16 @@ + + + Flip + fablabchemnitz.de.flip + + path + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/flip/flip.py b/extensions/fablabchemnitz/flip/flip.py new file mode 100644 index 00000000..3d083b9c --- /dev/null +++ b/extensions/fablabchemnitz/flip/flip.py @@ -0,0 +1,38 @@ +import math +from inkex import EffectExtension, PathElement, transforms as T + +# https://en.wikipedia.org/wiki/Rotations_and_reflections_in_two_dimensions +def reflection_matrix(theta): + theta2 = 2 * theta + return [ + [math.cos(theta2), math.sin(theta2), 0], + [math.sin(theta2), -math.cos(theta2), 0], + ] + +def svg_matrix_order(mat): + ((a, c, e), (b, d, f)) = mat + return a, b, c, d, e, f + +class Flip(EffectExtension): + """Extension to flip a path about the line from the start to end node""" + + def effect(self): + for node in self.svg.selection.filter(PathElement).values(): + points = list(node.path.end_points) + if len(points) < 2 or points[0] == points[-1]: + continue + start = points[0] + end = points[-1] + v = end - start + theta = math.atan2(v.y, v.x) + + # transforms go in reverse order + mat = T.Transform() + mat.add_translate(start) + mat.add_matrix(*svg_matrix_order(reflection_matrix(theta))) + mat.add_translate(-start) + + node.path = node.path.transform(mat) + +if __name__ == '__main__': + Flip().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/fret_ruler/fret_ruler.inx b/extensions/fablabchemnitz/fret_ruler/fret_ruler.inx new file mode 100644 index 00000000..7434006b --- /dev/null +++ b/extensions/fablabchemnitz/fret_ruler/fret_ruler.inx @@ -0,0 +1,175 @@ + + + Fret Ruler + fablabchemnitz.de.fret_ruler + + + + + + + + + + + + + + + + + + + + 0 + 12tet + + + + + + + + 25.5 + 1.35 + 18 + + false + + 25.5 + 7 + + + 0.1 + 0.125 + + true + true + + + + + false + 2.0 + false + 3,5,7,10,12,12,15 + false + + + + + + 0.014 + + + + true + 9.75 + 5 + true + 0.5 + 0.3 + + + + + + + + true + 12 + true + diatonic + + + + + + + + + + + + + + path + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/fret_ruler/fret_ruler.py b/extensions/fablabchemnitz/fret_ruler/fret_ruler.py new file mode 100644 index 00000000..124ca49d --- /dev/null +++ b/extensions/fablabchemnitz/fret_ruler/fret_ruler.py @@ -0,0 +1,503 @@ +#!/usr/bin/env python3 +# Distributed under the terms of the GNU Lesser General Public License v3.0 +### Author: Neon22 - github 2016 + + +### +import inkex +import fret_scale as fs +import os # for scala file filtering +from math import radians, cos, sin, pi +from lxml import etree + +###---------------------------------------------------------------------------- +### Styles - color and size settings +Black = "#000000" +Font_height = 5 +# factor used for marker radius +marker_rad_factor = 4 +Line_style = { 'stroke' : Black, + 'stroke-width' : '0.2px', + 'fill' : "none" } +Dash_style = { 'stroke' : Black, + 'stroke-width' : '0.1px', + 'stroke-dasharray' : '0.9,0.9', + 'fill' : "none" } +Label_style = { 'font-size' : str(int(Font_height))+'px', + 'font-family' : 'arial', + 'text-anchor' : 'end', # middle + 'fill' : Black } +Centerline_style = { 'stroke' : Black, + 'stroke-width' : '0.1px', + 'stroke-dasharray' : '1.2,0.7,0.3,0.7', + 'fill' : "none" } + + +# Helper functions +def build_line(x1, y1, x2, y2, unitFactor): + path = 'M %s,%s L %s,%s' % (x1*unitFactor, y1*unitFactor, x2*unitFactor, y2*unitFactor) + return path + +def build_notch(x,y, notch_width, unitFactor, dir=1): + """ draw a notch around the x value + - dir=-1 means notch is on other side + """ + w_2 = notch_width/2 + x1 = x - w_2 + x2 = x + w_2 + y2 = y + notch_width*dir + path = 'L %s,%s L %s,%s' % (x1*unitFactor, y*unitFactor, x1*unitFactor, y2*unitFactor) + path += 'L %s,%s L %s,%s' % (x2*unitFactor, y2*unitFactor, x2*unitFactor, y*unitFactor) + return path + +def draw_center_cross(x,y, parent, length=2, style=Line_style): + " center cross for holes " + d = 'M {0},{1} l {2},0 M {3},{4} l 0,{2}'.format(x-length,y, length*2, x,y-length) + cross_attribs = { inkex.addNS('label','inkscape'): 'Center cross', + 'style': str(inkex.Style(style)), 'd': d } + etree.SubElement(parent, inkex.addNS('path','svg'), cross_attribs ) + +def draw_SVG_circle(cx, cy, radius, parent, name='circle', style=Line_style): + " structure an SVG circle entity under parent " + circ_attribs = {'style': str(inkex.Style(style)), + 'cx': str(cx), 'cy': str(cy), + 'r': str(radius), + inkex.addNS('label','inkscape'): name} + circle = etree.SubElement(parent, inkex.addNS('circle','svg'), circ_attribs ) + +def draw_circle_marker(x,y, radius, parent): + " circle with cross at center " + draw_center_cross(x, y, parent, radius/5.0) + draw_SVG_circle(x, y, radius, parent) + + +### +class FretRuler(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument('--method', default='12th Root of 2', help="Method to calculate scale") + pars.add_argument('--draw_style', default='Ruler', help="How to draw the Ruler/NEck") + pars.add_argument("--nth", type=int,default=12, help="For different number of notes in a scale") + pars.add_argument('--scala_filename', default='12tet', help="Name of file in scales directory") + pars.add_argument("--units", default="in", help="The units of entered dimensions") + pars.add_argument("--length", type=float, default=25.5, help="Length of the Scale (and Ruler)") + pars.add_argument("--width", type=float, default=1.5, help="Width of the Ruler (= Nut if drawing a neck)") + pars.add_argument("--frets", type=int, default=18, help="number of frets on the scale") + # + pars.add_argument("--fanned", type=inkex.Boolean, default=False, help="Two scales on either side of the Neck") + pars.add_argument("--basslength", type=float, default=25.5, help="Length of the Bass side Scale") + pars.add_argument("--perpendicular", type=int, default=7, help="Fret number which is perpendicular to the Neck") + # + pars.add_argument("--linewidth", type=float, default=0.1, help="Width of drawn lines") + pars.add_argument("--notch_width", type=float, default=0.125, help="Width of Fret notches on Router template") + pars.add_argument("--annotate", type=inkex.Boolean, default=True, help="Annotate with Markers etc") + pars.add_argument("--centerline", type=inkex.Boolean, default=True, help="Draw a centerline") + # Neck + pars.add_argument("--constant_width", type=inkex.Boolean, default=True, help="Use Bridge width as well to make Neck") + pars.add_argument("--width_bridge", type=float, default=2.0, help="Width at the Bridge (drawing Neck not Ruler)") + pars.add_argument("--show_markers", type=inkex.Boolean, default=False, help="Show Neck Marker Positions") + pars.add_argument('--markers', default='3,5,7,10,12,12,15', help="List of frets to draw markers on") + # + pars.add_argument("--nutcomp", type=inkex.Boolean, default=False, help="Modify Nut position") + pars.add_argument("--nutcomp_value", default="0.012in (0.30mm)", help="Preset (usual) Nut compensation values") + pars.add_argument("--nutcomp_manual", type=float, default=0.014, help="Manual distance to move Nut closer to Bridge") + # + pars.add_argument("--show_curves", type=inkex.Boolean, default=False, help="Show a neck curvature ruler") + pars.add_argument("--neck_radius", type=float, default=2.0, help="Radius of Neck curvature") + pars.add_argument("--arc_length", type=float, default=2.0, help="Length of Arc") + pars.add_argument("--block_mode", type=inkex.Boolean, default=False, help="Draw block or finger style") + pars.add_argument("--arc_height", type=float, default=2.0, help="height of Arc") + pars.add_argument("--string_spacing", type=float, default=2.0, help="Spacing between strings") + # + pars.add_argument("--filter_tones", type=inkex.Boolean, default=True, help="Only show Scala files with this many notes in a scale.") + pars.add_argument("--scale", type=int, default=12, help="number of Notes in the scale") + pars.add_argument("--filter_label", type=inkex.Boolean, default=True, help="Only show Scala files with this keyword in them.") + pars.add_argument("--keywords", default="diatonic", help="Keywords to search for") + # here so we can have tabs + pars.add_argument("-t", "--active-tab", default='ruler', help="Active tab.") + + def filter_scala_files(self, parent): + """ Look in the scale directory for files. + - show only files matching the filters + """ + filter_tones = self.options.filter_tones + filter_names = self.options.filter_label + numtones = self.options.scale + keywords = self.options.keywords + keywords = keywords.strip().split(',') + keywords = [k.lower() for k in keywords] + # + probable_dir = os.getcwd()+'/scales/' + files = os.listdir(probable_dir) + # inkex.utils.debug("%s"%([os.getcwd(),len(files)])) + # Display filenames in document + filenames = [["Searched %d files"%(len(files)), "Found no matches", 0]] + for f in files: + fname = probable_dir+f + data = fs.read_scala(fname, False) + # filter out files that don't match + if filter_tones and filter_names: + if numtones == data[1]: + if filter_names: + for k in keywords: + if data[0].find(k) > -1 or f.find(k) > -1: + filenames.append([f, data[0], data[1]]) + elif filter_tones: + if numtones == data[1]: + filenames.append([f, data[0], data[1]]) + elif filter_names: + for k in keywords: + if data[0].find(k) > -1 or f.find(k) > -1: + filenames.append([f, data[0], data[1]]) + # inkex.utils.debug("%s"%(filenames)) + # gathered them all - display them + if len(filenames) != 0: + filenames[0][1] = "Found %d matches"%(len(filenames)-1) + x = 0 + y = 0 + Label_style['text-anchor'] = 'start' + for f in filenames: + label = f[0] + if f[2] != 0: + label += " - (%d tones)"%(f[2]) + self.draw_label(x, y, label, parent) + self.draw_label(x+Font_height*2, y+Font_height*1.2, f[1], parent) + if y ==0: y += Font_height + y += Font_height*2.8 + Label_style['text-anchor'] = 'end' + +### + def draw_label(self, x,y, label, parent, transform=False, style=Label_style): + " add a text entity " + text_atts = {'style':str(inkex.Style(style)), + 'x': str(x), 'y': str(y) } + if transform: text_atts['transform'] = transform + text = etree.SubElement(parent, 'text', text_atts) + text.text = "%s" %(label) + +### + def draw_ruler(self, neck, parent, show_numbers=False): + " draw the ruler with the centre of nut at 0,0 (unless fanned)" + # fanned frets have a bass side as well as the normal(treble) side scale length + # assume fanned + treble_length = neck.length + bass_length = treble_length if not neck.fanned else neck.bass_scale + y1 = neck.nut_width/2 + y2 = neck.bridge_width/2 + startx = 0 + endx = 0 + # if neck is fanned - adjust start, end + if neck.fanned: + if neck.fan_offset > 0: + startx = neck.fan_offset + else: + endx = -neck.fan_offset + pts = [[treble_length+startx,-y2], [bass_length+endx,y2], [endx,y1]] + # Create the boundary(neck) paths + path = 'M %s,%s ' % (startx*self.convFactor, -y1*self.convFactor) + for i in range(3): + path += " L %s,%s "%(pts[i][0]*self.convFactor, pts[i][1]*self.convFactor) + path += "Z" + line_attribs = {'style' : str(inkex.Style(Line_style)), + inkex.addNS('label','inkscape') : 'Outline' } + line_attribs['d'] = path + ell = etree.SubElement(parent, inkex.addNS('path','svg'), line_attribs ) + # Draw the fret lines + distances = neck.frets # do the zeroth value as well + for count, xt in enumerate(distances): # seq of x offsets for each fret + xb = xt if not neck.fanned else neck.bass_frets[count] + # if neck is not straight, calc the extra bit to draw in Y + yt = yb = y1 + if y1 != y2: # neck not straight + yt = y1 + ((xt-startx)/float(treble_length) * (y2-y1)) + yb = y1 + ((xb-endx)/float(bass_length) * (y2-y1)) + path = build_line(xt, -yt, xb, yb, self.convFactor) + line_attribs['d'] = path + ell = etree.SubElement(parent, inkex.addNS('path','svg'), line_attribs) + # Fret Numbers on odd frets(+octave) + if show_numbers and (count%2 == 0 or count == neck.notes_in_scale-1): + # try to push the lower fret numbers to the right a little + Label_style['text-anchor'] = 'start' if count < 9 else 'middle' + label_pos = neck.find_mid_point(count, -neck.nut_width/3) + self.draw_label(label_pos[0]*self.convFactor, label_pos[1]*self.convFactor, count+1, parent) + Label_style['text-anchor'] = 'end' + + def draw_router_template(self, neck, parent, notch_width, show_numbers=False): + " draw the ruler as a notched router template " + length = neck.length + y = neck.nut_width/2 + startx = notch_width*6 + pts = [[length,-y], [length,y], [-startx,y]] + path = 'M %s,%s ' % (-startx*self.convFactor, -y*self.convFactor) # start + distances = [0] + distances.extend(neck.frets) + # style + line_attribs = {'style' : str(inkex.Style(Line_style)), + inkex.addNS('label','inkscape') : 'Outline' } + # draw the fret notches, lines, labels + for count, x in enumerate(distances): + path += build_notch(x,-y, notch_width, self.convFactor) + if show_numbers and (count%2 == 1 or count == 0 or count == neck.notes_in_scale): + Label_style['text-anchor'] = 'start' if count < 9 else 'middle' + self.draw_label(x*self.convFactor-Font_height, -y*self.convFactor+Font_height*2.2, count, parent) + Label_style['text-anchor'] = 'end' + # other side markers + path2 = build_line(x, y, x, notch_width*2-y, self.convFactor) + line_attribs['d'] = path2 + ell = etree.SubElement(parent, inkex.addNS('path','svg'), line_attribs) + # close other side of template + for i in range(3): + path += " L %s,%s "%(pts[i][0]*self.convFactor, pts[i][1]*self.convFactor) + path += "Z" + # Draw + line_attribs['d'] = path + etree.SubElement(parent, inkex.addNS('path','svg'), line_attribs ) + + def draw_neck_curve_ruler(self, neck, radius, arc_length, arc_height, string_spacing, parent): + " draw arcs for curved fretboards " + # perfect world draw ruler and lines to curved ruler. + # mode = 'block1' + block_mode = self.options.block_mode + tab_length = arc_height*3 * self.convFactor + diam_in = radius * 2 * self.convFactor + angle_d = 180*arc_length / (2*pi*radius) + angle = radians(angle_d) + dist = arc_height*self.convFactor + path = "M%s %s L%s %s" %(diam_in + dist,0, diam_in,0) + x_a = diam_in * cos(angle) + y_a = diam_in * sin(angle) + x_b = (diam_in + dist) * cos(angle) + y_b = (diam_in + dist) * sin(angle) + path += " A %s,%s 0 0 1 %s %s" % (diam_in, diam_in, x_a, y_a) + path += " L%s %s" %(x_b, y_b) + if block_mode: + # use a solid block style + # add a midpoint for users to play with + path += " L%s %s" % (diam_in+dist+(x_b-diam_in-dist)/2, y_b/2) + tab_length = 0 + else: # tab mode + # need another arc with tab sections + small_angle = radians(90*string_spacing / (2*pi*radius)) + angle2 = angle/2 + small_angle + angle3 = angle/2 - small_angle + x_c = (diam_in + dist) * cos(angle2) + y_c = (diam_in + dist) * sin(angle2) + x_d = (diam_in + dist + tab_length) * cos(angle2) + y_d = (diam_in + dist + tab_length) * sin(angle2) + x_e = (diam_in + dist + tab_length) * cos(angle3) + y_e = (diam_in + dist + tab_length) * sin(angle3) + x_f = (diam_in + dist) * cos(angle3) + y_f = (diam_in + dist) * sin(angle3) + path += " A %s,%s 0 0 0 %s %s" % (diam_in, diam_in, x_c, y_c) + path += " L%s %s" %(x_d, y_d) + path += " L%s %s" %(x_e, y_e) + path += " L%s %s" %(x_f, y_f) + path += " A %s,%s 0 0 0 %s %s" % (diam_in, diam_in, diam_in + dist, 0) + + # close path + path += 'z' + ypos = diam_in + dist + tab_length + self.options.width*self.convFactor + line_attribs = {'style' : str(inkex.Style(Line_style)), inkex.addNS('label','inkscape') : 'Neck Curve', + 'transform': 'rotate(%f) translate(%s,%s)' % (-angle_d/2 -90, -ypos,-dist)} + line_attribs['d'] = path + etree.SubElement(parent, inkex.addNS('path','svg'), line_attribs ) + # label + size = "%d"%radius if radius-int(radius) == 0 else "%4.2f"%(radius) + Label_style['text-anchor'] = 'start' + self.draw_label(0, 0, "Radius: %s%s"% (size, neck.units), parent, + transform='translate(%s,%s)'%(0,ypos-diam_in-dist/2)) + Label_style['text-anchor'] = 'end' + + def draw_title(self, neck, parent, initial="Fret Ruler:"): + " Draw list of labels far right of ruler/Neck " + labels = [initial] + length = "%d"%neck.length if neck.length-int(neck.length) == 0 else "%4.2f"%(neck.length) + if neck.fanned: + basslength = "%d"%neck.bass_scale if neck.bass_scale-int(neck.bass_scale) == 0 else "%4.2f"%(neck.bass_scale) + labels.append("Scale(Fanned): %s%s - %s%s" %(length, neck.units, basslength, neck.units)) + else: # not fanned + labels.append("Scale: %s%s, %d frets" %(length, neck.units, len(neck.frets))) + # + label2 = "Method: %s" % (neck.method.title()) + if neck.method == 'scala': + label2 += " (%s) %d tones" %(neck.scala.split('/')[-1], len(neck.scala_notes)) + labels.append(label2) + labels.append('"%s"' %(neck.description)) + else: + labels.append(label2) + # unit formatting + units = self.options.units + precision = 1 if units=='mm' else 2 + widthN = self.options.width + widthB = self.options.width_bridge + label_w = "{:4.{prec}f}{}".format(widthN, units, prec=precision) + if not self.options.constant_width: + label_w += "(Nut) - {:4.{prec}f}{}(Bridge)".format(widthB, units, prec=precision) + labels.append("Width: %s"%(label_w)) + if not self.options.constant_width and len(neck.frets)>11: + distance12 = neck.frets[11] + # inkex.utils.debug("%s"%([distance12/float(neck.length)])) + width12 = widthN + (distance12/float(neck.length) * (widthB-widthN)) + labels.append("(at 12th fret: {:4.{prec}f}{})".format(width12, units, prec=precision)) + # where to draw + starty = widthN if self.options.constant_width else widthB + y = -starty/2*self.convFactor + Font_height*1.2 + x_offset = 0 + if neck.fanned and self.options.draw_style != 'template': + x_offset = neck.fan_offset + x = neck.length*self.convFactor - Font_height*1.5 + x_offset*self.convFactor + # Draw + for label in labels: + self.draw_label(x,y, label, parent) + y += Font_height*1.2 + + def draw_nut_compensation(self, neck, distance, parent): + " " + # inkex.utils.debug("%s"%([distance])) + startx = 0 + endx = 0 + if neck.fanned: + if neck.fan_offset > 0: + startx = neck.fan_offset + else: + endx = -neck.fan_offset + y = self.options.width/2 + path = build_line(startx+distance, -y, endx+distance, y, self.convFactor) + line_attribs = {'style' : str(inkex.Style(Dash_style)), 'd':path, + inkex.addNS('label','inkscape') : 'Nut Compensation' } + etree.SubElement(parent, inkex.addNS('path','svg'), line_attribs) + + def draw_neck_markers(self, neck, parent): + " draw symbol at fret pos. N possible " + # list may contain several occurences of a fret - meaning draw dots equidistant + positions = neck.frets + try: # user input weirdness + locations = self.options.markers.strip().split(",") + counts = [[int(i),locations.count(i)] for i in locations if i] + fret_counts = [] + for f in counts: + if f not in fret_counts: fret_counts.append(f) + except: + inkex.errormsg("Could not parse list of fret numbers. E.g. 3,5,7,7") + fret_counts = [[3,1]] + # marker radius based on thinnest of the (to be marked) fret spacings + spacings = [neck.frets[f-1] - neck.frets[max(0,f-2)] for f,c in fret_counts if f < len(neck.frets)+1] + thinnest = min(spacings) + marker_radius = thinnest/marker_rad_factor*self.convFactor + for fret, count in fret_counts: + if fret <= len(positions): # ignore if > #frets on this neck + # inkex.utils.debug("%s"%([fret,count,positions[fret]])) + fret = fret-1 + if count == 1: # if odd, draw in center + markerpos = neck.find_mid_point(fret, 0) + draw_circle_marker(markerpos[0]*self.convFactor, markerpos[1]*self.convFactor, marker_radius, parent) + else: # draw several at that fret + sep = neck.nut_width/float(count+2) + for i in range(count): + markerpos = neck.find_mid_point(fret, sep*i*2 - sep*(count-1)) + draw_circle_marker(markerpos[0]*self.convFactor, markerpos[1]*self.convFactor, marker_radius, parent) + + +### + def effect(self): + # calc units conversion + self.convFactor = self.svg.unittouu("1" + self.options.units) + # fix line width + Line_style['stroke-width'] = self.svg.unittouu(str(self.options.linewidth) + "mm") + # Usually we want 12 tone octaves + numtones = 12 + if self.options.method == 'Nroot2': + numtones = int(self.options.nth) + self.options.method = '%droot2'%(numtones) + # Usually we don't want a scala file + scala_filename=False + if self.options.method == 'scala': + scala_filename = "scales/"+self.options.scala_filename + if scala_filename[-4:] != ".scl": + scala_filename += ".scl" + # Create group center of view + t = 'translate(%s,%s)' % (self.svg.namedview.center[0]-self.options.length*self.convFactor/2, self.svg.namedview.center[1]) + grp_attribs = {inkex.addNS('label','inkscape'):'Fret Ruler', 'transform':t} + grp = etree.SubElement(self.svg.get_current_layer(), 'g', grp_attribs) + page = self.options.active_tab[1:-1] + draw_style = self.options.draw_style + # check if on Scala filters page + if page == 'filters': + # display filtered scala files + self.filter_scala_files(grp) + else: # Regular action of drawing a Ruler... + # select which style to draw based on user choice and what page they're on... + # if on Ruler page then use draw_style + title = "Fret Ruler:" + if page == 'neck': draw_style = 'neck' + if page == 'ruler' and draw_style=='ruler' or draw_style=='template': + # override constant width if on Ruler page + self.options.constant_width = True + # calc fret widths + fret_width = self.options.width + if (page == 'neck' or draw_style=='neck'): + title = "Neck Ruler:" + if not self.options.constant_width: + fret_width = [self.options.width, self.options.width_bridge] + # Make the Neck + neck = fs.Neck(self.options.length, units=self.options.units, fret_width=fret_width) + neck.calc_fret_offsets(self.options.length, self.options.frets, self.options.method, + numtones=numtones, scala_filename=scala_filename) + if self.options.fanned: + # fanned frets so calc bass scale and adjust + perpendicular = min(self.options.perpendicular, len(neck.frets)) + off = neck.set_fanned(self.options.basslength, perpendicular) + if draw_style=='template': + notch = self.options.notch_width + title = "Router Template:" + self.draw_router_template(neck, grp, notch, self.options.annotate) + else: + self.draw_ruler(neck, grp, self.options.annotate) + self.draw_title(neck, grp, title) + if self.options.centerline and self.options.draw_style != 'template': + path = build_line(-0.5,0, max(neck.length, neck.bass_scale)+0.5, 0, self.convFactor) + line_attribs = {'style' : str(inkex.Style(Centerline_style)), 'd':path, + inkex.addNS('label','inkscape') : 'Centerline' } + etree.SubElement(grp, inkex.addNS('path','svg'), line_attribs) + # Neck specials + if page == 'neck' or draw_style=='neck': + # Nut compensation + if self.options.nutcomp: + value = self.options.nutcomp_value + try: + compensation = float(value) if value != 'manual' else float(self.options.nutcomp_manual) + self.draw_nut_compensation(neck, compensation, grp) + except: + inkex.errormsg("Could not determine Nut compensation. Use a number.") + # Markers + if self.options.show_markers: + self.draw_neck_markers(neck, grp) + # inkex.utils.debug("#%s#"%(ordered_chords)) + if self.options.show_curves: + # position below max height of title text + self.draw_neck_curve_ruler(neck, self.options.neck_radius, self.options.arc_length, self.options.arc_height, self.options.string_spacing, grp) + + + + + +# Create effect instance and apply it. +if __name__ == '__main__': + FretRuler().run() + +### TODO: +# - draw option for fret0 hole to hang ruler from +# - draw strings +# - how many strings +# - separation distance +# - work out interval offsets +# - calc bridge compensation +# - calc stretch compensation +# - draw side view with bridge, relief distances + +#BUGS: +# + + +# Links: +# Nut compensation: http://www.lmii.com/scale-length-intonation \ No newline at end of file diff --git a/extensions/fablabchemnitz/fret_ruler/fret_scale.py b/extensions/fablabchemnitz/fret_ruler/fret_scale.py new file mode 100644 index 00000000..4366fdac --- /dev/null +++ b/extensions/fablabchemnitz/fret_ruler/fret_scale.py @@ -0,0 +1,399 @@ +#!/usr/bin/env python3 +# Distributed under the terms of the GNU Lesser General Public License v3.0 +### Author: Neon22 - github 2016 + +### fret scale calculation code + +from math import log, floor + +def fret_calc_ratio(length, howmany, ratio): + " given the ratio between notes, calc distance between frets " + # typically 18, 17.817, 17.835 for equal temperment scales + distances = [] + prev = 0 + for i in range(howmany): + distance = length / ratio + distances.append(prev+distance) + length -= distance + prev += distance + # print "%02d %6.4f %s" %(i, prev, distance) + return distances + +def fret_calc_root2(length, howmany, numtones=12): + " using Nroot2 method, calc distance between frets " + distances = [] + for i in range(howmany): + # Calculating Fret Spacing for a Single Fret + # d = s-(s/ (2^ (n/12))) + distance = length - (length / (pow(2, (i+1)/(float(numtones))) )) + distances.append(distance) + # print "%02d %6.4f" %(i, distance) + return distances + +def fret_calc_scala(length, howmany, scala_notes): + " use ratios from scala file, calc distance between frets " + distances = [] + for i in range(howmany): + if i < len(scala_notes): + r = scala_notes[i] + else: + end = pow(scala_notes[-1], int(i / float(len(scala_notes)))) + r = end * scala_notes[i%len(scala_notes)] + distance = length - (length / r) + distances.append(distance) + return distances + +def cents_to_ratio(cents): + " given a value in cents, calculate the ratio " + return pow(2, cents / 1200.0) + +def parse_scala(scala, filename, verbose=True): + """ Parse the readlines() from scala file into: + - description, numnotes, + - lists of pretty ratios, numeric ratios + """ + description = "" + numnotes = 0 + notes = [] + ratios = [] + error = False + # print scala + for line in scala: + try: + # take out leading and trailing spaces - get everything up to first space if exists + line = line.strip() # hold onto this for when we need the description + first = line.split()[0] # first element in the line + # print line + if first and first[0] != "!": # ignore all blank and comment lines + if not description: + # expecting description line first + # may contain unprintable characters - force into unicode + description = unicode(line, errors='ignore') + elif numnotes == 0: + # expecting notes count after description + numnotes = int(first) + else: # expecting sequences of notes + notes.append(first) # for later ref + # remove comments at end of line if exist + if first.count("!") > 0: + first = first[:first.find("!")] + if first.find('.') > -1: # cents + ratios.append(cents_to_ratio(float(first))) + elif first.find("/") > -1: # ratio + num, denom = first.split('/') + ratios.append(int(num)/float(denom)) + else: + ratios.append(int(first)) + except: + error = "ERROR: Failed to load "+filename + # + if verbose: + print ("Found:", description) + print ("",numnotes, "notes found.") + for n,r in zip(notes,ratios): + print (" %4.4f : %s"%(r, n)) + print (" check: indicated=found : %d=%d"%(numnotes,len(notes))) + if error: + return [error, numnotes, notes, ratios] + else: + return [description, numnotes, notes, ratios] + +def read_scala(filename, verbose=False): + " read and parse scala file into interval ratios " + try: + inf = open(filename, 'rB') + content = inf.readlines() + inf.close() + flag = verbose + # if filename.find("dyadic") > -1: flag = True + return parse_scala(content, filename, flag) + except: + return ["ERROR: Failed to load "+filename, 2, [1], [1.01]] + + +### frequency to note +def log_note(freq): + " find the octave the note is in " + octave = (log(freq) - log(261.626)) / log (2) + 4.0 + return octave + +def freq_to_note(freq): + lnote = log_note(freq) + octave = floor(lnote) + cents = 1200 * (lnote - octave) + notes = ['C','C#','D','D#','E','F','F#','G','G#','A','A#','B'] + offset = 50.0 + x = 1 + if cents < 50: + note = "C" + elif cents >= 1150: + note = "C" + cents -= 1200 + octave += 1 + else: + for j in range(1,12): + if offset <= cents < (offset + 100): + note = notes[x] + cents -= (j * 100) + break + offset += 100 + x += 1 + return "%s%d"%(note, int(octave)), "%4.2f"%(cents) + + +def int_or_float(value): + " true if value is an int or a float " + return type(value) == type(1) or type(value) == type(1.0) + + +### class to hold info about instrument necks +class Neck(object): + def __init__(self, length, strings=['G','C','E','A'], units='in', spacing=0.4, fret_width=1.5): + " " + # coerce single spacing value into a list of nut/bridge spacing + self.set_spacing(spacing) + # same for fret_width + self.set_width(fret_width) + # + self.length = length + self.strings = strings + self.units = units + self.frets = [] # Treble side frets if fanned + self.bass_frets =[] + self.fanned = False + self.bass_scale = 0 + self.fanned_vertical = False + self.method = '12root2' + self.notes_in_scale = False + # Scala + self.scala = False + self.description = False + self.scala_notes = False + self.scala_ratios = False + def __repr__(self): + extra = "" + if len(self.frets)>0: + extra += "%d frets"%(len(self.frets)) + if self.method == 'scala': + extra += "(%s)" %(self.scala.split('/')[-1]) # filename + return ""%(self.method, self.length, self.units, extra, len(self.strings)) + + def set_width(self, fret_width): + " get both values from this " + if int_or_float(fret_width): + fret_width = [fret_width,fret_width] + elif type(fret_width) != type([]): + fret_width = [1,1] + self.nut_width = fret_width[0] + self.bridge_width = fret_width[1] + + def set_spacing(self, spacing): + " get both values from this " + if int_or_float(spacing): + spacing = [spacing,spacing] + elif type(spacing) != type([]): + spacing = [1,1] + self.nut_spacing = spacing[0] + self.bridge_spacing = spacing[1] + + def set_fanned(self, bass_scale, vertical_fret): + """ keep existing treble calc and create Bass calc + - must have called calc_fret_offsets() before + (so notes_in_scale is set) + """ + # adjust the position of the treble side if required. + # calc fret_offset and if treble or bass side needs to be moved + # if treble - move self.frets + # if bass, add offset as calculated + treble = self.frets + # print treble + if self.method == 'scala': + bass = self.calc_fret_offsets(bass_scale, len(self.frets), method=self.method, scala_filename=self.scala) + else: + bass = self.calc_fret_offsets(bass_scale, len(self.frets), method=self.method, numtones=self.notes_in_scale) + offset = 0 if vertical_fret ==0 else bass[vertical_fret - 1] - treble[vertical_fret - 1] + # print "offset", offset, "bass",bass + if offset > 0: + # shift treble + for i in range(len(treble)): + treble[i] += offset + else: # shift bass + for i in range(len(bass)): + bass[i] -= offset + self.frets = treble + self.bass_frets = bass + self.bass_scale = bass_scale + self.fanned_vertical = vertical_fret + self.fan_offset = offset + self.fanned = True + return offset + + def find_mid_point(self, fret_index, width_offset): + """ find midpoint of fret, fret-1 along neck + and ///y width where width_offset=0 means center of neck + """ + y_factor = (width_offset + self.nut_width/2) / float(self.nut_width) + # assume fanned + tpos_f1 = self.frets[fret_index] + bpos_f1 = tpos_f1 if not self.fanned else self.bass_frets[fret_index] + if self.fanned: + if self.fan_offset >= 0: + tpos_f0 = self.fan_offset if fret_index<=1 else self.frets[fret_index-1] + bpos_f0 = 0 if fret_index<=1 else self.bass_frets[fret_index-1] + else: + bpos_f0 = -self.fan_offset if fret_index<=1 else self.bass_frets[fret_index-1] + tpos_f0 = 0 if fret_index<=1 else self.frets[fret_index-1] + else: + tpos_f0 = 0 if fret_index<=1 else self.frets[fret_index-1] + bpos_f0 = 0 if fret_index<=1 else tpos_f0 + # + mid_tpos = tpos_f0 + (tpos_f1 - tpos_f0)/2 + mid_bpos = bpos_f0 + (bpos_f1 - bpos_f0)/2 + # print fret_index, y_factor + # print " %4.2f %4.2f %4.2f"% (tpos_f0, tpos_f1, mid_tpos) + # print " %4.2f %4.2f %4.2f"% (bpos_f0, bpos_f1, mid_bpos) + # the mid_xx positions are self.nut_width apart + return [mid_tpos + (mid_bpos-mid_tpos)*y_factor, width_offset/self.nut_width*1.5] + + def calc_fret_offsets(self, length, howmany, method='12root2', numtones=12, scala_filename=False): + " calc fret positions from Nut for all methods " + frets = False # store them in here + if scala_filename: + scala_notes = read_scala(scala_filename) + self.method = 'scala' + self.scala = scala_filename + self.description = scala_notes[0] + self.scala_notes = scala_notes[2] + self.scala_ratios = scala_notes[3] # [-1] + frets = fret_calc_scala(length, howmany, self.scala_ratios) + self.notes_in_scale = len(self.scala_ratios) + elif method.find('root2') > -1: + self.method = method + frets = fret_calc_root2(length, howmany, numtones) + self.notes_in_scale = numtones + elif method == '18': + self.method = method + ratio = 18 + frets = fret_calc_ratio(length, howmany, ratio) + self.notes_in_scale = 12 + elif method == '17.817': + self.method = method + ratio = 17.81715374510580 + frets = fret_calc_ratio(length, howmany, ratio) + self.notes_in_scale = 12 + elif method == '17.835': + self.method = method + ratio = 17.835 + frets = fret_calc_ratio(length, howmany, ratio) + self.notes_in_scale = 12 + # update the iv + self.frets = frets + return frets + + def show_frets(self): + " pretty print " + for i,d in enumerate(self.frets): + print ("%2d: %4.4f" %(i+1,d)) + if self.bass_frets: + for i,d in enumerate(self.bass_frets): + print ("%2d: %4.4f" %(i+1,d)) + + def compare_methods(self, howmany, verbose=True): + " show differences in length for the main methods (not scala) " + distances = [] + differences = [] + methods = ['12root2', '18', '17.817', '17.835'] + n = Neck(30) # long one to maximise errors + for method in methods: + distances.append(n.calc_fret_offsets(n.length, howmany, method)) + # print distances[-1] + for i in range(1, len(methods)): + differences.append( [a-b for (a,b) in zip(distances[0], distances[i])] ) + if verbose: + print("Differences from 12root2") + for i,m in enumerate(methods[1:]): + print ("\nMethod = %s\n " %(m)) + for d in differences[i]: + print ("%2.3f " %(d)) + print("") + # package + combined = [] + for i,m in enumerate(methods[1:]): + combined.append([m, max(differences[i]), differences[i]]) + return combined + +# Gibson "rule of 18" base scale is in sys 18. +# Martin 24.9 (24.84), 25.4 (act 25.34) rough approx and round up. not actually the scale length +# The difference between 17.817 and 17.835 came from rounding early and carrying the roundoff error through the rest of the work. +# where r = twelfth root of two and put the first fret where it would make the sounding length of the string 1/r of its original length + + +### tests +if __name__ == "__main__": + n = Neck(24) + f = n.calc_fret_offsets(n.length, 12, '12root2') + n.show_frets() + print (n) + errors = n.compare_methods(22, False) + for m,e,d in errors: + print ("for method '%s': max difference from 12Root2 = %4.3f%s (on highest fret)"%(m,e, n.units)) + # + n = Neck(24) + f = n.calc_fret_offsets(n.length, 22, 'scala', scala_filename='scales/diat_chrom.scl') + n.show_frets() + print ("Fanning") + # n.set_fanned(25,0) + # n.show_frets() + # print n + # print n.description + # print n.scala + # print n.scala_notes + # print n.scala_ratios + + # similar to scale=10 to scale = 9.94 but slightly diff neaer the nut. + + # scala_notes = read_scala("scales/alembert2.scl")#, True) + # print "Notes=",len(scala_notes[-1]), scala_notes[1] + # for d in fret_calc_scala(24, scala_notes[-1]): print d + + # test load all scala files + # import os + # probable_dir = "scales/" + # files = os.listdir(probable_dir) + # for f in files: + # fname = probable_dir+f + # # print f + # data = read_scala(fname) + # # print " ",data[0] + # if data[0][:5] == "ERROR": + # print "!!!! ERROR",fname + + ## freq conversion + print("") + for f in [440,443,456,457, 500,777, 1086]: + print (f, freq_to_note(f)) + + ## fanned frets + # print + # for f in [1,11]: + # print n.find_mid_point(f,-0.75) + + # get to this eventually + string_compensation = [ + 0.0086, 0.0119, 0.0107, 0.0124, 0.0151, 0.0175, 0.020, 0.0222, 0.0244, 0.0263, + 0.0282, 0.030, 0.0371, 0.4235 + ] + +### Optionally: +# how many strings, +# (associated sequence of intervals) + + +### refs: +#http://fretfocus.anastigmatix.net/ +#http://windworld.com/features/tools-resources/exmis-fret-placement-calculator/ +#http://www.huygens-fokker.org/scala/ + +# superstart: +# notes on the fretboard +# https://www.youtube.com/watch?v=-jW1Xx0t3ZI \ No newline at end of file diff --git a/extensions/fablabchemnitz/funshapes/funshapes.inx b/extensions/fablabchemnitz/funshapes/funshapes.inx new file mode 100755 index 00000000..6f460904 --- /dev/null +++ b/extensions/fablabchemnitz/funshapes/funshapes.inx @@ -0,0 +1,16 @@ + + + Fun Shapes + fablabchemnitz.de.funshapes + + path + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/funshapes/funshapes.py b/extensions/fablabchemnitz/funshapes/funshapes.py new file mode 100644 index 00000000..5e1a9f6c --- /dev/null +++ b/extensions/fablabchemnitz/funshapes/funshapes.py @@ -0,0 +1,199 @@ +#!/usr/bin/env python3 +# coding=utf-8 +# +# Copyright (C) [2021] [Matt Cottam], [mpcottam@raincloud.co.uk] +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +""" +A simple Extension to test if a Gtk3 Gui will work on most Inkscape 1.1+ Systems. +Inkscape 1.1 is the minimum verion. +Draws a simple set of randomly coloured circles and outputs them to the canvas. +""" + +import inkex +from inkex.elements import Group, PathElement +from inkex import transforms, styles + +import random +import gi + +gi.require_version("Gtk", "3.0") +from gi.repository import Gtk, GdkPixbuf, Gdk +from lxml import etree + +# Could not find simplestyle, found this instead in extensions repo +def formatStyle(a): + """Format an inline style attribute from a dictionary""" + return ";".join([att + ":" + str(val) for att, val in a.items()]) + + +def random_rgb(self): + random_red = random.randrange(0, 255) + random_green = random.randrange(0, 255) + random_blue = random.randrange(0, 255) + + return f'rgb({random_red}, {random_green}, {random_blue})' + + +# Generate a circle or circle path +def draw_svg_circle(self, r, cx, cy, parent, is_path): + style = {'stroke': 'black', + # 'stroke-opacity': (r/200), + 'stroke-width': '0.1', + # 'fill': 'none' + 'fill': random_rgb(self) + } + + attribs = { + 'style': formatStyle(style), + 'r': str(r), + 'cx': str(cx), + 'cy': str(cy) + } + + my_circle = etree.SubElement(Funshapes.output_group, inkex.addNS('circle', 'svg'), attribs) + + +def draw_svg_circle_series(self, r, cx, cy, parent, is_path): + + my_list = range(1, 100) + for item in reversed(my_list): + draw_svg_circle(self, item, cx, cy, parent, is_path) + + gtk3_add_svg_image(self, Funshapes.output_group) + + +def draw_svg_circle_series_scale(self, r, cx, cy, parent, is_path): + Funshapes.output_group.clear() + + upper_range = int(Funshapes.main_window.h_scale.get_value()) + + my_list = range(1, upper_range) + for item in reversed(my_list): + draw_svg_circle(self, item, cx, cy, parent, is_path) + + gtk3_add_svg_image(self, Funshapes.output_group) + + + +def group_wrapper(self, my_objects, to_layer): + group_id = 'g' + str(random.randrange(100000, 1000000)) + + new_group = self.svg.add(Group.new('#' + group_id)) + # inkex set, takes account of NS attribs etc + new_group.set('inkscape:groupmode', 'layer') + new_group.set('inkscape:label', 'My_Layer_' + group_id) + + # When plucking an object from an svg, will only have its own transforms + # Composed transforms must be applied instead. + + for my_object in my_objects: + my_object_transforms = my_object.composed_transform() + my_object.attrib['transform'] = '' + my_object.transform.add_matrix(my_object_transforms) + new_group.append(my_object) + + new_group.attrib['id'] = group_id + return new_group + + +def object_to_xml_tag(self): + my_tag = str(self.tostring().decode("utf-8")) + return my_tag + +########################## +# GTK3 GUI SECTION BELOW +########################## + + +def gtk3_gui(self): + + Funshapes.main_window = Gtk.Window() + Funshapes.main_window.root_grid = Gtk.Grid() + Funshapes.main_window.add(Funshapes.main_window.root_grid) + + root_grid = Funshapes.main_window.root_grid + main_window = Funshapes.main_window + + gtk3_scales(root_grid, Funshapes.main_window) + + main_window.connect("destroy", Gtk.main_quit) + main_window.show_all() + + draw_svg_circle_series(self, 200, 100, 100, Funshapes.self.svg, 'yes') + + Gtk.main() + + return main_window + + +def gtk3_scales(grid, inkex_self): + ad1 = Gtk.Adjustment(value=20, lower=0, upper=100, step_increment=5, page_increment=10, page_size=0) + + inkex_self.h_scale = Gtk.Scale( + orientation=Gtk.Orientation.HORIZONTAL, adjustment=ad1) + + inkex_self.h_scale.set_digits(0) + inkex_self.h_scale.set_valign(Gtk.Align.START) + + inkex_self.h_scale.connect("value-changed", draw_svg_circle_series_scale, 50, 100, 100, None, None) + + grid.attach(inkex_self.h_scale, 1, 0, 1, 1) + + +def gtk3_add_svg_image(self, svg_object): + + Funshapes.base_image = Gtk.Image() + Funshapes.base_image.set_from_file('white.png') + + random_number = random.randrange(10000, 1000000, 1) + + # convert svg object to svg xml + svg = object_to_xml_tag(svg_object) + + svg = f'{svg} ' + + loader = GdkPixbuf.PixbufLoader() + loader.write(svg.encode()) + loader.close() + pixbuf = loader.get_pixbuf() + + Funshapes.preview_image = Gtk.Image.new_from_pixbuf(pixbuf) + Funshapes.preview_image.show_all() + + if Funshapes.main_window.root_grid.get_child_at(1, 1) is None: + Funshapes.main_window.root_grid.attach(Funshapes.preview_image, 1, 1, 1, 1) + else: + Funshapes.main_window.root_grid.get_child_at(1, 1).destroy() + Funshapes.main_window.root_grid.attach(Funshapes.preview_image, 1, 1, 1, 1) + + +class Funshapes(inkex.EffectExtension): + + def effect(self): + Funshapes.self = self + output_group_id = f'Funshapes_{random.randrange(10000, 1000000, 1)}' + Funshapes.output_group = Group.new('#' + output_group_id) + # create new gtk3 window and attach to effect self + self.win = gtk3_gui(self) + + # When GTK is exited + Funshapes.self.svg.append(Funshapes.output_group) + + +if __name__ == '__main__': + Funshapes().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/gcode_import/gcode_import.py b/extensions/fablabchemnitz/gcode_import/gcode_import.py new file mode 100644 index 00000000..2c8beefb --- /dev/null +++ b/extensions/fablabchemnitz/gcode_import/gcode_import.py @@ -0,0 +1,670 @@ +#!/usr/bin/env python3 +""" +ImportGCode, and Inkscape extension by Nathaniel Klumb + +This extension adds support for some GCode files to the File/Import... +dialog in Inkscape. It loads the GCode file passed to it by Inkscape as a +command-line parameter and writes the resulting SVG to stdout (which is how +Inkscape input plugins work). + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. +""" +import re +import inkex +import sys +import argparse +from io import StringIO +from math import sqrt ,pi, sin, cos, tan, acos, atan2, fabs +from lxml import etree + +class ImportGCode: + """ Import a GCode file and process it into an SVG. """ + current_id = 0 + geometry_error = False + + def __init__(self,gcode_filename,v_carve=False,laser_mode=False, + ignore_z=True,label_z=True, + tool_diameter=1.0,v_angle=90.0,v_top=0.0,v_step=1.0): + """ Load a GCode file and process it into an SVG. """ + self.unit = 1.0 + self.ignore_z = ignore_z or v_carve + self.label_z = label_z and not v_carve + self.tool_diameter = tool_diameter + self.v_carve = v_carve + self.v_angle = v_angle * pi / 180.0 + self.v_top = v_top + self.v_step = v_step + self.laser_mode = laser_mode + self.spindle = False + self.speed = 0 + with open(gcode_filename) as file: + self.loadGCode(file) + self.createSVG() + + def getIJ(self,x1,y1,x2,y2,r): + """ Calculate I and J from two arc endpoints and a radius. """ + theta = atan2(y2 - y1, x2 - x1) + alpha = acos(sqrt((x2 - x1)**2 + (y2 - y1)**2)/(2 * abs(r))) + return (r * cos(theta + alpha), r * sin(theta + alpha)) + + def getTangentPoints(self,x1,y1,r1,x2,y2,r2): + """ Compute the four outer tangent endpoints of two circles. """ + theta = atan2(y2 - y1, x2 - x1) + try: + alpha = acos((r1 - r2)/sqrt((x2 - x1)**2 + (y2 - y1)**2)) + except ValueError: + # It's broken, but we'll just cap it off. + # The SVG will be messed up, but that's better feedback + # than just blankly saying, "Sorry, please try again." + if not self.geometry_error: #Only show the error once. + inkex.errormsg('Math error importing V-carve: ' + 'V-bit angle too large?') + inkex.errormsg(' Check your included angle ' + 'setting and try again.') + self.geometry_error = True + if ((r1 - r2)/sqrt((x2 - x1)**2 + (y2 - y1)**2) < -1): + alpha = pi + else: + alpha = 0 + return ((x1 + r1 * cos(theta - alpha), y1 + r1 * sin(theta - alpha)), + (x1 + r1 * cos(theta + alpha), y1 + r1 * sin(theta + alpha)), + (x2 + r2 * cos(theta + alpha), y2 + r2 * sin(theta + alpha)), + (x2 + r2 * cos(theta - alpha), y2 + r2 * sin(theta - alpha))) + + def intersectLines(self, p1, p2, p3, p4): + """ Calculate the intersection of Line(p1,p2) and Line(p3,p4) + + returns a tuple: (x, y, valid, included) + (x, y): the intersection + valid: a unique solution exists + included: the solution is within both the line segments + Segment(p1,p2) and Segment(p3,p4) + """ + + DET_TOLERANCE = 0.00000001 + T = 0.00000001 + + # the first line is pt1 + r*(p2-p1) + x1,y1 = p1 + x2,y2 = p2 + dx1 = x2 - x1 + dy1 = y2 - y1 + + # the second line is p4 + s*(p4-p3) + x3,y3 = p3 + x4,y4 = p4; + dx2 = x4 - x3 + dy2 = y4 - y3 + + # In matrix form: + # [ dx1 -dx2 ][ r ] = [ x3-x1 ] + # [ dy1 -dy2 ][ s ] = [ y3-y1 ] + # + # Which can be solved: + # [ r ] = _1_ [ -dy2 dx2 ] [ x3-x1 ] + # [ s ] = DET [ -dy1 dx1 ] [ y3-y1 ] + # + # With the deteminant: DET = (-dx1 * dy2 + dy1 * dx2) + DET = (-dx1 * dy2 + dy1 * dx2) + + # If DET is zero, they're parallel + if fabs(DET) < DET_TOLERANCE: + # If they overlap, either p3 or p4 must be + # an included point, so check one, then check the + # other. If either falls inside the segment from + # p1 to p2, return it as *a* valid intersection. + # Otherwise, return the bad news -- no intersection. + # + # Also, when checking the limits, allow a tolerance, T, + # since we're working in floating point. + if ((((x3 >= x1 - T) and (x3 <= x2 + T)) or + ((x3 <= x1 + T) and (x3 >= x2 - T))) and + (((y3 >= y1 - T) and (y3 <= y2 + T)) or + ((y3 <= y1 + T) and (y3 >= y2 - T)))): + return (x3,y3,False,True) + elif ((((x4 >= x1 - T) and (x4 <= x2 + T)) or + ((x4 <= x1 + T) and (x4 >= x2 - T))) and + (((y4 >= y1 - T) and (y4 <= y2 + T)) or + ((y4 <= y1 + T) and (y4 >= y2 - T)))): + return (x4,y4,False,True) + # NO CONNECTION... *dialtone* + else: + return (None,None,False,False) + + # Since the determinant is non-zero, now take the reciprocal. + invDET = 1.0/DET + + # We want to calculate the intersection for each line so we can + # average the results together. They should be identical, but + # floating-point and rounding error, etc... + # Calculate the scalar distances along Line(p1,p2) and Line(p3,p4) + r = invDET * (-dy2 * (x3-x1) + dx2 * (y3-y1)) + s = invDET * (-dy1 * (x3-x1) + dx1 * (y3-y1)) + + # Average the intersection's coordinates from the two lines. + x = (x1 + r*dx1 + x3 + s*dx2)/2.0 + y = (y1 + r*dy1 + y3 + s*dy2)/2.0 + + # Now one last check to see if the intersection's coordinates are + # included within both line segments. + included = ((((x >= x1 - T) and (x <= x2 + T)) or + ((x <= x1 + T) and (x >= x2 - T))) and + (((y >= y1 - T) and (y <= y2 + T)) or + ((y <= y1 + T) and (y >= y2 - T))) and + (((x >= x3 - T) and (x <= x4 + T)) or + ((x <= x3 + T) and (x >= x4 - T))) and + (((y >= y3 - T) and (y <= y4 + T)) or + ((y <= y3 + T) and (y >= y4 - T)))) + return (x,y,True,included) + + def getRadius(self,Z): + """ Compute the radius of a V-bit given a Z coordinate. + + If the V-bit is above stock top, we just mirror it. + Technically, the file's broken, but hey, may as well do something. + """ + if (self.v_top <= Z): + return (Z - self.v_top) * tan(self.v_angle / 2) + else: + return (self.v_top - Z) * tan(self.v_angle / 2) + + def getAngle(self,center,point): + """ Calculate the angle from a center to a point. """ + a = atan2(point[1] - center[1], point[0] - center[0]) + return a + ((2*pi) if (a<0.0) else 0) + + def isLargeAngle(self,center,p1,p2): + """ Determine whether the SVG large angle flag should be set. """ + a1 = self.getAngle(center,p1) + a2 = self.getAngle(center,p2) + angle = a1 - a2 + if angle < 0: + angle += 2 * pi + return 1 if (abs(angle) > pi) else 0 + + def interpolatePoints(self,center,p1,p2): + """ Interpolate a set of points along an arc. """ + a1 = self.getAngle(center,p1) + a2 = self.getAngle(center,p2) + angle = a2 - a1 + dz = 1.0 * (p2[2]-p1[2]) + r = sqrt((center[0] - p1[0])**2 + (center[1] - p1[1])**2) + length = r * abs(angle) / pi + steps = int(round(length/self.v_step)) + points = [] + for i in range(1,steps): + point = (center[0] + r * cos(a1 + angle*i/steps), + center[1] + r * sin(a1 + angle*i/steps), + p1[2] + dz*i/steps) + points += [point] + points += [p2] + return points + + def makeVcarve(self,v_segments): + """ Connect multiple V-carve segments into one path. + + Start on one V-carve segment and chain all the way to the + opposite end, then add a switchback and chain all the way + back to the beginning. + """ + vs = v_segments + # Move to the starting point. + path = 'M {} {} '.format(vs[0][1][0][0],vs[0][1][0][1]) + # Initial arc, if it's not a point. + if vs[0][0][0][2] > 0: + path += ('A {} {} 0 {} {} {} {} ' + ).format(vs[0][0][0][2],vs[0][0][0][2], + 1 if (vs[0][0][0][2] > vs[0][0][1][2]) else 0, + 0,vs[0][1][1][0],vs[0][1][1][1]) + # Step through all the segments on the way to the other end. + for v in range(len(vs)-1): + # Check whether an intersection exists between the two + # line segments. If so, use it, otherwise, connect with an arc. + x,y,valid,included = self.intersectLines(vs[v][1][1], + vs[v][1][2], + vs[v+1][1][1], + vs[v+1][1][2]) + if included: #line segments + path += 'L {} {} '.format(x,y) + else: + path += ('L {} {} A {} {} 0 {} {} {} {} ' + ).format(vs[v][1][2][0],vs[v][1][2][1], + vs[v][0][1][2],vs[v][0][1][2], + self.isLargeAngle(vs[v][0][1], + vs[v][1][2], + vs[v+1][1][1]), + 0,vs[v+1][1][1][0],vs[v+1][1][1][1]) + # Connecting line. + path += 'L {} {} '.format(vs[len(vs)-1][1][2][0], + vs[len(vs)-1][1][2][1]) + # Switchback arc, if it's not a point. + if vs[len(vs)-1][0][1][2] > 0: + path += ('A {} {} 0 {} {} {} {} ' + ).format(vs[len(vs)-1][0][1][2],vs[len(vs)-1][0][1][2], + 1 if (vs[len(vs)-1][0][1][2] > + vs[len(vs)-2][0][0][2]) else 0, + 0,vs[len(vs)-1][1][3][0],vs[len(vs)-1][1][3][1]) + # Step through all the segments on the way back home. + for v in range(len(vs)-1,0,-1): + # Check whether an intersection exists between the two + # line segments. If so, use it, otherwise, connect with an arc. + x,y,valid,included = self.intersectLines(vs[v][1][3], + vs[v][1][0], + vs[v-1][1][3], + vs[v-1][1][0]) + if included: #line segments + path += 'L {} {} '.format(x,y) + else: + path += ('L {} {} A {} {} 0 {} {} {} {} ' + ).format(vs[v][1][0][0],vs[v][1][0][1], + vs[v-1][0][1][2],vs[v-1][0][1][2], + self.isLargeAngle(vs[v-1][0][1], + vs[v][1][0], + vs[v-1][1][3]), + 0,vs[v-1][1][3][0],vs[v-1][1][3][1]) + # And finally, close the curve. + path += 'Z' + return path + + def getVsegment(self,x1,y1,z1,x2,y2,z2): + """ Compute the required data to define a V-carve segment. """ + r1 = self.getRadius(z1) + r2 = self.getRadius(z2) + p = self.getTangentPoints(x1,y1,r1,x2,y2,r2) + return (((x1,y1,r1),(x2,y2,r2)),p) + + def parseLine(self,command,X,Y,Z,line,no_path=False): + """ Parse a line of G-code. + + This takes the current coordinates and modal command, then processes + the new line of G-code to yield a new ending set of coordinates + plus values necessary for curve computations. It also returns the + resulting path data, unless otherwise indicated, e.g. for V-carves. + """ + comments = re.compile('\([^\)]*\)') + commands = re.compile('([MSGXYZIJKR])([-.0-9]+)') + + lastX = X + lastY = Y + lastZ = Z + I = 0.0 + J = 0.0 + K = 0.0 + R = None + results = commands.findall(comments.sub('',line)) + for (code,val) in results: + v = float(val) + i = int(v) + + if code == 'M': + if i == 3: + self.spindle = True + elif i == 5: + self.spindle = False + elif code == 'S': + self.speed = v + elif code == 'G': + if i == 0: + command = 'G0' + elif i == 1: + command = 'G1' + elif i == 2: + command = 'G2' + elif i == 3: + command = 'G3' + elif i == 20: + self.unit = 25.4 + elif i == 21: + self.unit = 1.0 + elif val == "90": + self.absolute = True + elif val == "91": + self.absolute = False + elif val == "90.1": + self.absoluteIJK = True + elif val == "91.1": + self.absoluteIJK = False + elif code == 'X': + if self.absolute: + X = v * self.unit + else: + X += v * self.unit + elif code == 'Y': + if self.absolute: + Y = v * self.unit + else: + Y += v * self.unit + elif code == 'Z': + if self.absolute: + Z = v * self.unit + else: + Z += v * self.unit + elif code == 'I': + I = v * self.unit + if self.absoluteIJK: + I -= X + elif code == 'J': + J = v * self.unit + if self.absoluteIJK: + J -= Y + elif code == 'K': + # Sure, process it, but we don't *do* anything with K. + K = v * self.unit + if self.absoluteIJK: + K -= Z + elif code == 'R': + R = v * self.unit + + if no_path: # V-carving doesn't need any path data. + return ((command, X, Y, Z, I, J, K, R, '')) + + # The line's been parsed. Now let's generate path data from it. + path = '' + if command == 'G1': + # If there's any XY motion, make a line segment. + if ((X != lastX) or (Y != lastY)): + path = 'L {} {} '.format(round(X,5),round(Y,5)) + elif (command == 'G2') or (command == 'G3'): + # Arcs! Oh, what glorious fun we'll have! First, sweep direction. + sweep = 0 if (command == 'G2') else 1 + # R overrules I and J if both are present, so we compute + # new I and J values based on R. We need those to determine + # whether the Large Angle Flag needs to be set. + if R is not None: + I,J = self.getIJ(lastX,lastY,X,Y,R) + if (I != 0.0) or (J != 0.0): + if sweep == 0: + large_arc = self.isLargeAngle((lastX+I,lastY+J), + (lastX,lastY),(X,Y)) + else: + large_arc = self.isLargeAngle((lastX+I,lastY+J), + (X,Y),(lastX,lastY)) + radius = sqrt(I**2 + J**2) + path = 'A {} {} 0 {} {} {} {} '.format(round(radius,5), + round(radius,5), + large_arc,sweep, + round(X,5),round(Y,5)) + # No R, and no I or J either? Let's just call it a line segment. + # (It may have had a K, but we don't believe in K for SVG imports.) + else: + path = 'L {} {} '.format(round(X,5),round(Y,5)) + + # In laser mode, if the spindle isn't active or the speed is zero, + # there's no lasing to be had. Drop the path data. (The Inkscape + # extension from J Tech Photonics uses G1/G2/G3 moves throughout, + # with nary a G0, so if we don't do this, we'll show unlasered paths.) + if (self.laser_mode and ((not self.spindle) or (self.speed == 0))): + path = '' + return ((command, X, Y, Z, I, J, K, R, path)) + + def savePath(self,path,Z): + """ Save a set of path data, filing it by Z if appropriate. """ + if (path.find('A') == -1) and (path.find('L') == -1): + return #empty path + if self.ignore_z: + if path not in self.paths: + self.paths.add(path) + else: + try: + if path not in self.paths_by_z[Z]: + self.paths_by_z[Z].add(path) + except KeyError: + self.paths_by_z[Z] = set([path]) + + def loadGCode(self,gcode_file): + """ Load a G-code file, handling the contents. """ + if self.ignore_z: + self.paths = set([]) + else: + self.paths_by_z = {} + self.absolute = True + self.absoluteIJK = False + self.unit=1.0 + command = '' + X = 0.0 + Y = 0.0 + Z = 0.0 + lastX = X + lastY = Y + lastZ = Z + self.minX = 0.0 + self.minY = 0.0 + self.minZ = 0.0 + self.maxX = 0.0 + self.maxY = 0.0 + self.maxZ = 0.0 + + path = '' + line = gcode_file.readline() + v_segments = [] + while line: + command,X,Y,Z,I,J,K,R,path_data = self.parseLine(command, + X, Y, Z, line, + self.v_carve) + self.minX = X if X < self.minX else self.minX + self.maxX = X if X > self.maxX else self.maxX + self.minY = Y if Y < self.minY else self.minY + self.maxY = Y if Y > self.maxY else self.maxY + self.minZ = Z if Z < self.minZ else self.minZ + self.maxZ = Z if Z > self.maxZ else self.maxZ + + # V-carve mode. + if self.v_carve: + if (lastX != X) or (lastY != Y): + if command == 'G1': + v_segments += [self.getVsegment(lastX, lastY, lastZ, + X, Y, Z)] + elif (command == 'G2') or (command == 'G3'): + # We don't attempt to handle the plethora of curves + # that can result from V-carving arcs. Instead, we + # just interpolate them and process the subparts. + points = self.interpolatePoints((lastX+I,lastY+J), + (lastX,lastY,lastZ), + (X,Y,Z)) + iX = lastX + iY = lastY + iZ = lastZ + for p in points: + v_segments += [self.getVsegment(iX, iY, iZ, + p[0], p[1], p[2])] + iX = p[0] + iY = p[1] + iZ = p[2] + else: + if len(v_segments): + self.savePath(self.makeVcarve(v_segments),'VCarve') + v_segments = [] + # Standard mode (non-V-carve). + else: + if ((command == 'G0') or + (not self.ignore_z and (Z != lastZ)) or + (self.laser_mode and ((not self.spindle) or + (self.speed == 0)))): + if (path != ''): + self.savePath(path,lastZ) + path = '' + if (((command == 'G1') or + (command == 'G2') or + (command == 'G3')) and (path == '')): + path = 'M {} {} {}'.format(lastX,lastY,path_data) + else: + path += path_data + lastX = X + lastY = Y + lastZ = Z + line = gcode_file.readline() + # Always remember to save the tail end of your work. + if self.v_carve: + if len(v_segments): + self.savePath(self.makeVcarve(v_segments),'VCarve') + else: + if (path != ''): + self.savePath(path,lastZ) + + def filterPaths(self): + """ Filter out duplicate paths, leaving only the deepest instance. """ + if self.ignore_z: + return + z_depths = sorted(self.paths_by_z,None,None,True) + for i in range(0,len(z_depths)): + for j in range(i+1, len(z_depths)): + self.paths_by_z[z_depths[i]] -= self.paths_by_z[z_depths[j]] + + def next_id(self): + """ Return an incrementing value. """ + self.current_id += 1 + return self.current_id + + def getStyle(self,color='#000000',width=None): + """ Create a CSS-type style string. """ + if width is None: + width = self.tool_diameter + return ('opacity:1;vector-effect:none;fill:none;fill-opacity:1;' + 'stroke:{};stroke-width:{};stroke-opacity:1;' + 'stroke-linecap:round;stroke-linejoin:round;' + 'stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0' + ).format(color,width) + + def createSVG(self): + """ Create the output SVG. """ + base = ('' + ).format(self.maxX-self.minX, self.maxY-self.minY, + self.minX, self.minY, self.maxX-self.minX, self.maxY-self.minY) + self.doc = etree.parse(StringIO((base))) + svg = self.doc.getroot() + # Since G-code and SVG interpret Y in opposite directions, + # we just group everything under a transform that mirrors Y. + svg = etree.SubElement(svg,'g',{'id':'gcode', + 'transform':'scale(1,-1)'}) + # Add illustrative axes to the SVG to facilitate positioning. + etree.SubElement(svg,'path', + {'d':'M 0 {} V {}'.format(self.minY, self.maxY), + 'style':self.getStyle('#00ff00',0.5), + 'id':'vertical'}) + etree.SubElement(svg,'path', + {'d':'M {} 0 H {}'.format(self.minX, self.maxX), + 'style':self.getStyle('#ff0000',0.5), + 'id':'horizontal'}) + # For V-carves, include the paths and use a narrow stroke width. + if self.v_carve: + for path in self.paths: + etree.SubElement(svg,'path', + {'d':path, + 'style':self.getStyle(width=0.1), + 'id':'path{}'.format(self.next_id())}) + # For standard mode with Z ignored, include the paths. + elif self.ignore_z: + for path in self.paths: + etree.SubElement(svg,'path', + {'d':path, + 'style':self.getStyle(), + 'id':'path{}'.format(self.next_id())}) + # For standard mode with Z grouping, filter the paths, + # then add each group of paths (and optionally, labels). + else: + self.filterPaths() + z_depths = sorted(self.paths_by_z) + depth_num = 0 + for i in range(0,len(z_depths)): + if len(self.paths_by_z[z_depths[i]]): + params = {'id':('group{}-{}' + ).format(self.next_id(),z_depths[i]), + 'style':self.getStyle()} + group = etree.SubElement(svg,'g',params) + + # If labels are enabled, add the label to the group. + if self.label_z: + params = {'x':'{}'.format(self.maxX), + 'y':'{}'.format(depth_num*-5), + 'transform':'scale(1,-1)', + 'id':'text{}'.format(i), + 'style':('opacity:1;fill:#0000ff;' + 'fill-opacity:1;stroke:none;' + 'font-size:4.5')} + if self.unit == 1.0: + label = '{} mm'.format(z_depths[i]) + else: + label = '{} in'.format(z_depths[i]/self.unit) + etree.SubElement(group,'text',params + ).text = label + + depth_num += 1 + + # Now add the paths to the group. + for path in self.paths_by_z[z_depths[i]]: + id = 'path{}'.format(self.next_id()) + etree.SubElement(group,'path', + {'d':path, + 'style':self.getStyle(), + 'id':id}) + # If labels are enabled, label the labels. + if self.label_z: + etree.SubElement(svg,'text', + {'x':'{}'.format(self.maxX), + 'y':'{}'.format(depth_num*-5), + 'transform':'scale(1,-1)', + 'id':'text{}'.format(i), + 'style':('opacity:1;fill:#0000ff;' + 'fill-opacity:1;stroke:none;' + 'font-size:4.5')} + ).text = 'Z Groups:' + +# And now for the code to allow Inkscape to run our lovely extension. +if __name__ == '__main__': + parser = argparse.ArgumentParser(description=('usage: %prog [options] GCodeFile')) + parser.add_argument('-m', '--mode', help='Mode: vcarve, standard, laser', default='standard') + parser.add_argument('-a', '--v_angle', help='Included (full) angle for V-bit, in degrees.', default=None) + parser.add_argument('-t', '--v_top', help='Stock top (usually zero)', default=None) + parser.add_argument('-s', '--v_step', help='Step size for curve interpolation.', default=None) + parser.add_argument('-d', '--tool_diameter', help='Tool diameter / path width.', default=None) + parser.add_argument('-u', '--units', help='Dialog units.', default='mm') + parser.add_argument('-z', '--z_axis', help='Z-axis: ignore,group,label', default=False) + parser.add_argument('--tab') + parser.add_argument('--inputhelp') + parser.add_argument('inputfile') + + # Now, process, my lovelies! + args = parser.parse_args() + + # First steps first, what mode? + v_carve = False + ignore_z = False + laser_mode = False + if (args.mode == 'vcarve'): + v_carve = True + elif (args.mode == 'laser'): + laser_mode = True + + # V-carve parameters. + try: + v_angle = round(float(args.v_angle),3) + except ValueError: + v_angle = 1.0 + try: + v_top = round(float(args.v_top) * + (25.4 if (args.units == 'in') else 1.0),5) + except ValueError: + v_top = 0.0 + try: + v_step = round(float(args.v_step) * + (25.4 if (args.units == 'in') else 1.0),5) + except ValueError: + v_step = 1.0 + + # Standard parameters. + try: + diameter = round(float(args.tool_diameter) * + (25.4 if (args.units == 'in') else 1.0),3) + except ValueError: + diameter = 1.0 + + # General args. + ignore_z = (args.z_axis == 'ignore') + label_z = (args.z_axis == 'label') + + gc = ImportGCode(args.inputfile, v_carve, laser_mode, ignore_z, label_z, diameter, v_angle, v_top, v_step) + gc.doc.write(sys.stdout.buffer) \ No newline at end of file diff --git a/extensions/fablabchemnitz/gcode_import/gcode_import_gcode.inx b/extensions/fablabchemnitz/gcode_import/gcode_import_gcode.inx new file mode 100644 index 00000000..be0c3895 --- /dev/null +++ b/extensions/fablabchemnitz/gcode_import/gcode_import_gcode.inx @@ -0,0 +1,54 @@ + + + GCode Import (*.gcode) + fablabchemnitz.de.gcode_import.gcode + + + + + + + + + 90 + 0 + 0 + + 6.35 + + + + + + + + + + + + + + + + + .gcode + application/x-gcode + GCode File (*.gcode) + Import GCode File + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/gcode_import/gcode_import_nc.inx b/extensions/fablabchemnitz/gcode_import/gcode_import_nc.inx new file mode 100644 index 00000000..1fb6bb81 --- /dev/null +++ b/extensions/fablabchemnitz/gcode_import/gcode_import_nc.inx @@ -0,0 +1,54 @@ + + + GCode Import (*.nc) + fablabchemnitz.de.gcode_import.nc + + + + + + + + + 90 + 0 + 0 + + 6.35 + + + + + + + + + + + + + + + + + .nc + application/x-gcode + GCode File (*.nc) + Import GCode File + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/gears/gears.inx b/extensions/fablabchemnitz/gears/gears.inx new file mode 100644 index 00000000..15692460 --- /dev/null +++ b/extensions/fablabchemnitz/gears/gears.inx @@ -0,0 +1,94 @@ + + + Gears + fablabchemnitz.de.gears + + + 24 + 1.0 + + + + + + + + + + + + + + 20.0 + false + false + false + + + 0 + 0 + false + 4.0 + 3 + 3.0 + 10.0 + + + + + + + + + + + false + 10 + 5 + 5 + + + + + + + + true + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/gears/gears.py b/extensions/fablabchemnitz/gears/gears.py new file mode 100644 index 00000000..9d45add3 --- /dev/null +++ b/extensions/fablabchemnitz/gears/gears.py @@ -0,0 +1,661 @@ +#!/usr/bin/env python3 +''' +Copyright (C) 2007 Aaron Spike (aaron @ ekips.org) +Copyright (C) 2007 Tavmjong Bah (tavmjong @ free.fr) +Copyright (C) http://cnc-club.ru/forum/viewtopic.php?f=33&t=434&p=2594#p2500 +Copyright (C) 2014 Jürgen Weigert (juewei@fabmail.org) +Copyright (C) 2020 Spadino (spada.andrea @ gmail DOT com) + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +2014-03-20 jw@suse.de 0.2 Option --accuracy=0 for automatic added. +2014-03-21 sent upstream: https://bugs.launchpad.net/inkscape/+bug/1295641 +2014-03-21 jw@suse.de 0.3 Fixed center of rotation for gears with odd number of teeth. +2014-04-04 juewei 0.7 Revamped calc_unit_factor(). +2014-04-05 juewei 0.7a Correctly positioned rack gear. + The geometry above the meshing line is wrong. +2014-04-06 juewei 0.7b Undercut detection added. Reference: + http://nptel.ac.in/courses/IIT-MADRAS/Machine_Design_II/pdf/2_2.pdf + Manually merged https://github.com/jnweiger/inkscape-gears-dev/pull/15 +2014-04-07 juewei 0.7c Manually merged https://github.com/jnweiger/inkscape-gears-dev/pull/17 +2014-04-09 juewei 0.8 Fixed https://github.com/jnweiger/inkscape-gears-dev/issues/19 + Ring gears are ready for production now. Thanks neon22 for driving this. + Profile shift implemented (Advanced Tab), fixing + https://github.com/jnweiger/inkscape-gears-dev/issues/9 +2015-05-29 juewei 0.9 ported to inkscape 0.91 + AttributeError: 'module' object inkex has no attribute 'uutounit + Fixed https://github.com/jnweiger/inkscape-gears-dev +2020-7-4 spadino 1.0 ported to inkscape 1.0 +''' + +import inkex +from lxml import etree +from os import devnull # for debugging +from math import pi, cos, sin, tan, radians, degrees, ceil, asin, acos, sqrt +two_pi = 2 * pi + + +__version__ = '1.0' + +def uutounit(self,nn,uu): + return self.svg.uutounit(nn,uu) + +def linspace(a,b,n): + """ return list of linear interp of a to b in n steps + - if a and b are ints - you'll get an int result. + - n must be an integer + """ + return [a+x*(b-a)/(n-1) for x in range(0,n)] + +def involute_intersect_angle(Rb, R): + " " + Rb, R = float(Rb), float(R) + return (sqrt(R**2 - Rb**2) / (Rb)) - (acos(Rb / R)) + +def point_on_circle(radius, angle): + " return xy coord of the point at distance radius from origin at angle " + x = radius * cos(angle) + y = radius * sin(angle) + return (x, y) + +def points_to_bbox(p): + """ from a list of points (x,y pairs) + - return the lower-left xy and upper-right xy + """ + llx = urx = p[0][0] + lly = ury = p[0][1] + for x in p[1:]: + if x[0] < llx: llx = x[0] + elif x[0] > urx: urx = x[0] + if x[1] < lly: lly = x[1] + elif x[1] > ury: ury = x[1] + return (llx, lly, urx, ury) + +def points_to_bbox_center(p): + """ from a list of points (x,y pairs) + - find midpoint of bounding box around all points + - return (x,y) + """ + bbox = points_to_bbox(p) + return ((bbox[0]+bbox[2])/2.0, (bbox[1]+bbox[3])/2.0) + +def points_to_svgd(p): + " convert list of points into a closed SVG path list" + f = p[0] + p = p[1:] + svgd = 'M%.4f,%.4f' % f + for x in p: + svgd += 'L%.4f,%.4f' % x + svgd += 'z' + return svgd + +def draw_SVG_circle(parent, r, cx, cy, name, style): + " add an SVG circle entity to parent " + circ_attribs = {'style': str(inkex.Style(style)), + 'cx': str(cx), 'cy': str(cy), + 'r': str(r), + inkex.addNS('label','inkscape'):name} + circle = etree.SubElement(parent, inkex.addNS('circle','svg'), circ_attribs ) + + +### Undercut support functions +def undercut_min_teeth(pitch_angle, k=1.0): + """ computes the minimum tooth count for a + spur gear so that no undercut with the given pitch_angle (in deg) + and an addendum = k * metric_module, where 0 < k < 1 + Note: + The return value should be rounded upwards for perfect safety. E.g. + min_teeth = int(math.ceil(undercut_min_teeth(20.0))) # 18, not 17 + """ + x = sin(radians(pitch_angle)) + return 2*k /(x*x) + +def undercut_max_k(teeth, pitch_angle=20.0): + """ computes the maximum k value for a given teeth count and pitch_angle + so that no undercut occurs. + """ + x = sin(radians(pitch_angle)) + return 0.5 * teeth * x * x + +def undercut_min_angle(teeth, k=1.0): + """ computes the minimum pitch angle, to that the given teeth count (and + profile shift) cause no undercut. + """ + return degrees(asin(min(0.856, sqrt(2.0*k/teeth)))) # max 59.9 deg + + +def have_undercut(teeth, pitch_angle=20.0, k=1.0): + """ returns true if the specified number of teeth would + cause an undercut. + """ + return (teeth < undercut_min_teeth(pitch_angle, k)) + + +## gather all basic gear calculations in one place +def gear_calculations(num_teeth, circular_pitch, pressure_angle, clearance=0, ring_gear=False, profile_shift=0.): + """ Put base calcs for spur/ring gears in one place. + - negative profile shifting helps against undercut. + """ + diametral_pitch = pi / circular_pitch + pitch_diameter = num_teeth / diametral_pitch + pitch_radius = pitch_diameter / 2.0 + addendum = 1 / diametral_pitch + #dedendum = 1.157 / diametral_pitch # auto calc clearance + dedendum = addendum + dedendum *= 1+profile_shift + addendum *= 1-profile_shift + if ring_gear: + addendum = addendum + clearance # our method + else: + dedendum = dedendum + clearance # our method + # + # + base_radius = pitch_diameter * cos(radians(pressure_angle)) / 2.0 + outer_radius = pitch_radius + addendum + root_radius = pitch_radius - dedendum + # Tooth thickness: Tooth width along pitch circle. + tooth_thickness = ( pi * pitch_diameter ) / ( 2.0 * num_teeth ) + # we don't use these + working_depth = 2 / diametral_pitch + whole_depth = 2.157 / diametral_pitch + #outside_diameter = (num_teeth + 2) / diametral_pitch + # + return (pitch_radius, base_radius, + addendum, dedendum, outer_radius, root_radius, + tooth_thickness + ) + + +def generate_rack_points(tooth_count, pitch, addendum, pressure_angle, + rack_base_height, tab_length, clearance=0, draw_guides=False): + """ Return path (suitable for svg) of the Rack gear. + - rack gear uses straight sides + - involute on a circle of infinite radius is a simple linear ramp + - the meshing circle touches at y = 0, + - the highest elevation of the teeth is at y = +addendum + - the lowest elevation of the teeth is at y = -addendum-clearance + - the rack_base_height extends downwards from the lowest elevation. + - we generate this middle tooth exactly centered on the y=0 line. + (one extra tooth on the right hand side, if number of teeth is even) + """ + spacing = 0.5 * pitch # rolling one pitch distance on the spur gear pitch_diameter. + # roughly center rack in drawing, exact position is so that it meshes + # nicely with the spur gear. + # -0.5*spacing has a gap in the center. + # +0.5*spacing has a tooth in the center. + fudge = +0.5 * spacing + + tas = tan(radians(pressure_angle)) * addendum + tasc = tan(radians(pressure_angle)) * (addendum+clearance) + base_top = addendum+clearance + base_bot = addendum+clearance+rack_base_height + + x_lhs = -pitch * int(0.5*tooth_count-.5) - spacing - tab_length - tasc + fudge + #inkex.utils.debug("angle=%s spacing=%s"%(pressure_angle, spacing)) + # Start with base tab on LHS + points = [] # make list of points + points.append((x_lhs, base_bot)) + points.append((x_lhs, base_top)) + x = x_lhs + tab_length+tasc + + # An involute on a circle of infinite radius is a simple linear ramp. + # We need to add curve at bottom and use clearance. + for i in range(tooth_count): + # move along path, generating the next 'tooth' + # pitch line is at y=0. the left edge hits the pitch line at x + points.append((x-tasc, base_top)) + points.append((x+tas, -addendum)) + points.append((x+spacing-tas, -addendum)) + points.append((x+spacing+tasc, base_top)) + x += pitch + x -= spacing # remove last adjustment + # add base on RHS + x_rhs = x+tasc+tab_length + points.append((x_rhs, base_top)) + points.append((x_rhs, base_bot)) + # We don't close the path here. Caller does it. + # points.append((x_lhs, base_bot)) + + # Draw line representing the pitch circle of infinite diameter + guide_path = None + if draw_guides: + p = [] + p.append( (x_lhs + 0.5 * tab_length, 0) ) + p.append( (x_rhs - 0.5 * tab_length, 0) ) + guide_path = points_to_svgd(p) + # return points ready for use in an SVG 'path' + return (points, guide_path) + + +def generate_spur_points(teeth, base_radius, pitch_radius, outer_radius, root_radius, accuracy_involute, accuracy_circular): + """ given a set of core gear params + - generate the svg path for the gear + """ + half_thick_angle = two_pi / (4.0 * teeth ) #?? = pi / (2.0 * teeth) + pitch_to_base_angle = involute_intersect_angle( base_radius, pitch_radius ) + pitch_to_outer_angle = involute_intersect_angle( base_radius, outer_radius ) - pitch_to_base_angle + + start_involute_radius = max(base_radius, root_radius) + radii = linspace(start_involute_radius, outer_radius, accuracy_involute) + angles = [involute_intersect_angle(base_radius, r) for r in radii] + + centers = [(x * two_pi / float( teeth) ) for x in range( teeth ) ] + points = [] + + for c in centers: + # Angles + pitch1 = c - half_thick_angle + base1 = pitch1 - pitch_to_base_angle + offsetangles1 = [ base1 + x for x in angles] + points1 = [ point_on_circle( radii[i], offsetangles1[i]) for i in range(0,len(radii)) ] + + pitch2 = c + half_thick_angle + base2 = pitch2 + pitch_to_base_angle + offsetangles2 = [ base2 - x for x in angles] + points2 = [ point_on_circle( radii[i], offsetangles2[i]) for i in range(0,len(radii)) ] + + points_on_outer_radius = [ point_on_circle(outer_radius, x) for x in linspace(offsetangles1[-1], offsetangles2[-1], accuracy_circular) ] + + if root_radius > base_radius: + pitch_to_root_angle = pitch_to_base_angle - involute_intersect_angle(base_radius, root_radius ) + root1 = pitch1 - pitch_to_root_angle + root2 = pitch2 + pitch_to_root_angle + points_on_root = [point_on_circle (root_radius, x) for x in linspace(root2, root1+(two_pi/float(teeth)), accuracy_circular) ] + p_tmp = points1 + points_on_outer_radius[1:-1] + points2[::-1] + points_on_root[1:-1] # [::-1] reverses list; [1:-1] removes first and last element + else: + points_on_root = [point_on_circle (root_radius, x) for x in linspace(base2, base1+(two_pi/float(teeth)), accuracy_circular) ] + p_tmp = points1 + points_on_outer_radius[1:-1] + points2[::-1] + points_on_root # [::-1] reverses list + + points.extend( p_tmp ) + return (points) + + +def generate_spokes_path(root_radius, spoke_width, spoke_count, mount_radius, mount_hole, + unit_factor, unit_label): + """ given a set of constraints + - generate the svg path for the gear spokes + - lies between mount_radius (inner hole) and root_radius (bottom of the teeth) + - spoke width also defines the spacing at the root_radius + - mount_radius is adjusted so that spokes fit if there is room + - if no room (collision) then spokes not drawn + """ + # Spokes + collision = False # assume we draw spokes + messages = [] # messages to send back about changes. + path = '' + r_outer = root_radius - spoke_width + # checks for collision with spokes + # check for mount hole collision with inner spokes + if mount_radius <= mount_hole/2: + adj_factor = (r_outer - mount_hole/2) / 5 + if adj_factor < 0.1: + # not enough reasonable room + collision = True + else: + mount_radius = mount_hole/2 + adj_factor # small fix + messages.append("Mount support too small. Auto increased to %2.2f%s." % (mount_radius/unit_factor*2, unit_label)) + + # then check to see if cross-over on spoke width + if spoke_width * spoke_count +0.5 >= two_pi * mount_radius: + adj_factor = 1.2 # wrong value. its probably one of the points distances calculated below + mount_radius += adj_factor + messages.append("Too many spokes. Increased Mount support by %2.3f%s" % (adj_factor/unit_factor, unit_label)) + + # check for collision with outer rim + if r_outer <= mount_radius: + # not enough room to draw spokes so cancel + collision = True + if collision: # don't draw spokes if no room. + messages.append("Not enough room for Spokes. Decrease Spoke width.") + else: # draw spokes + for i in range(spoke_count): + points = [] + start_a, end_a = i * two_pi / spoke_count, (i+1) * two_pi / spoke_count + # inner circle around mount + asin_factor = spoke_width/mount_radius/2 + # check if need to clamp radius + asin_factor = max(-1.0, min(1.0, asin_factor)) # no longer needed - resized above + a = asin(asin_factor) + points += [ point_on_circle(mount_radius, start_a + a), point_on_circle(mount_radius, end_a - a)] + # is inner circle too small + asin_factor = spoke_width/r_outer/2 + # check if need to clamp radius + asin_factor = max(-1.0, min(1.0, asin_factor)) # no longer needed - resized above + a = asin(asin_factor) + points += [point_on_circle(r_outer, end_a - a), point_on_circle(r_outer, start_a + a) ] + + path += ( + "M %f,%f" % points[0] + + "A %f,%f %s %s %s %f,%f" % tuple((mount_radius, mount_radius, 0, 0 if spoke_count!=1 else 1, 1 ) + points[1]) + + "L %f,%f" % points[2] + + "A %f,%f %s %s %s %f,%f" % tuple((r_outer, r_outer, 0, 0 if spoke_count!=1 else 1, 0 ) + points[3]) + + "Z" + ) + return (path, messages) + + +class Gears(inkex.EffectExtension): + def __init__(self): + inkex.Effect.__init__(self) + # an alternate way to get debug info: + # could use inkex.utils.debug(string) instead... + # try: + # self.tty = open("/dev/tty", 'w') + # except: + # self.tty = open(devnull, 'w') # '/dev/null' for POSIX, 'nul' for Windows. + # # print >>self.tty, "gears-dev " + __version__ + + self.arg_parser.add_argument("-t", "--teeth", type=int, default=24, help="Number of teeth") + self.arg_parser.add_argument("-s", "--system", default='CP', help="Select system: 'CP' (Cyclic Pitch (default)), 'DP' (Diametral Pitch), 'MM' (Metric Module)") + self.arg_parser.add_argument("-d", "--dimension", type=float, default=1.0, help="Tooth size, depending on system (which defaults to CP)") + self.arg_parser.add_argument("-a", "--angle", type=float, default=20.0, help="Pressure Angle (common values: 14.5, 20, 25 degrees)") + self.arg_parser.add_argument("-p", "--profile_shift", type=float, default=20.0, help="Profile shift [in percent of the module]. Negative values help against undercut") + self.arg_parser.add_argument("-u", "--units", default='mm', help="Units this dialog is using") + self.arg_parser.add_argument("-A", "--accuracy", type=int, default=0, help="Accuracy of involute: automatic: 5..20 (default), best: 20(default), medium 10, low: 5; good acuracy is important with a low tooth count") + # Clearance: Radial distance between top of tooth on one gear to bottom of gap on another. + self.arg_parser.add_argument("-cl", "--clearance", type=float, default=0.0, help="Clearance between bottom of gap of this gear and top of tooth of another") + self.arg_parser.add_argument("-an", "--annotation", type=inkex.Boolean, default=False, help="Draw annotation text") + self.arg_parser.add_argument("-i", "--internal_ring", type=inkex.Boolean, default=False, help="Ring (or Internal) gear style (default: normal spur gear)") + self.arg_parser.add_argument("-mh", "--mount_hole", type=float, default=5, help="Mount hole diameter") + self.arg_parser.add_argument("-md", "--mount_diameter", type=float, default=15, help="Mount support diameter") + self.arg_parser.add_argument("-sc", "--spoke_count", type=int, default=3, help="Spokes count") + self.arg_parser.add_argument("-sw", "--spoke_width", type=float, default=5, help="Spoke width") + self.arg_parser.add_argument("-hr", "--holes_rounding", type=float, default=5, help="Holes rounding") + self.arg_parser.add_argument("-at", "--active_tab", default='', help="Active tab. Not used now.") + self.arg_parser.add_argument("-x", "--centercross", type=inkex.Boolean, default=False, help="Draw cross in center") + self.arg_parser.add_argument("-c", "--pitchcircle", type=inkex.Boolean, default=False, help="Draw pitch circle (for mating)") + self.arg_parser.add_argument("-r", "--draw_rack", type=inkex.Boolean, default=False, help="Draw rack gear instead of spur gear") + self.arg_parser.add_argument("-rl", "--rack_teeth_length", type=int, default=12, help="Length (in teeth) of rack") + self.arg_parser.add_argument("-rh", "--rack_base_height", type=float, default=8, help="Height of base of rack") + self.arg_parser.add_argument("-rt", "--rack_base_tab", type=float, default=14, help="Length of tabs on ends of rack") + self.arg_parser.add_argument("-ua", "--undercut_alert", type=inkex.Boolean, default=False, help="Let the user confirm a warning dialog if undercut occurs. This dialog also shows helpful hints against undercut") + + def add_text(self, node, text, position, text_height=12): + """ Create and insert a single line of text into the svg under node. + - use 'text' type and label as anootation + - where color is Ponoko Orange - so ignored when lasercutting + """ + line_style = {'font-size': '%dpx' % text_height, 'font-style':'normal', 'font-weight': 'normal', + 'fill': '#F6921E', 'font-family': 'Bitstream Vera Sans,sans-serif', + 'text-anchor': 'middle', 'text-align': 'center'} + line_attribs = {inkex.addNS('label','inkscape'): 'Annotation', + 'style': str(inkex.Style(line_style)), + 'x': str(position[0]), + 'y': str((position[1] + text_height) * 1.2) + } + line = etree.SubElement(node, inkex.addNS('text','svg'), line_attribs) + line.text = text + + + def calc_unit_factor(self): + """ return the scale factor for all dimension conversions. + - The document units are always irrelevant as + everything in inkscape is expected to be in 90dpi pixel units + """ + # namedView = self.document.getroot().find(inkex.addNS('namedview', 'sodipodi')) + # doc_units = uutounit(self, 1.0, namedView.get(inkex.addNS('document-units', 'inkscape'))) + dialog_units = uutounit(self, 1.0, self.options.units) + unit_factor = 1.0 / dialog_units + return unit_factor + + def calc_circular_pitch(self): + """ We use math based on circular pitch. + Expressed in inkscape units which is 90dpi 'pixel' units. + """ + dimension = self.options.dimension + # print >> self.tty, "unit_factor=%s, doc_units=%s, dialog_units=%s (%s), system=%s" % (unit_factor, doc_units, dialog_units, self.options.units, self.options.system) + if self.options.system == 'CP': # circular pitch + circular_pitch = dimension + elif self.options.system == 'DP': # diametral pitch + circular_pitch = pi / dimension + elif self.options.system == 'MM': # module (metric) + circular_pitch = dimension * pi / 25.4 + else: + inkex.utils.debug("unknown system '%s', try CP, DP, MM" % self.options.system) + # circular_pitch defines the size in inches. + # We divide the internal inch factor (px = 90dpi), to remove the inch + # unit. + # The internal inkscape unit is always px, + # it is independent of the doc_units! + return circular_pitch / uutounit(self, 1.0, 'in') + + + + def effect(self): + """ Calculate Gear factors from inputs. + - Make list of radii, angles, and centers for each tooth and + iterate through them + - Turn on other visual features e.g. cross, rack, annotations, etc + """ + path_stroke = '#000000' # might expose one day + path_fill = 'none' # no fill - just a line + path_stroke_width = uutounit(self, 0.1, 'mm') # might expose one day + path_stroke_light = uutounit(self, 0.05, 'mm') # guides are thinner + # + warnings = [] # list of extra messages to be shown in annotations + # calculate unit factor for units defined in dialog. + unit_factor = self.calc_unit_factor() + # User defined options + teeth = self.options.teeth + # Angle of tangent to tooth at circular pitch wrt radial line. + angle = self.options.angle + # Clearance: Radial distance between top of tooth on one gear to + # bottom of gap on another. + clearance = self.options.clearance * unit_factor + mount_hole = self.options.mount_hole * unit_factor + # for spokes + mount_radius = self.options.mount_diameter * 0.5 * unit_factor + spoke_count = self.options.spoke_count + spoke_width = self.options.spoke_width * unit_factor + holes_rounding = self.options.holes_rounding * unit_factor # unused + # visible guide lines + centercross = self.options.centercross # draw center or not (boolean) + pitchcircle = self.options.pitchcircle # draw pitch circle or not (boolean) + # Accuracy of teeth curves + accuracy_involute = 20 # Number of points of the involute curve + accuracy_circular = 9 # Number of points on circular parts + if self.options.accuracy is not None: + if self.options.accuracy == 0: + # automatic + if teeth < 10: accuracy_involute = 20 + elif teeth < 30: accuracy_involute = 12 + else: accuracy_involute = 6 + else: + accuracy_involute = self.options.accuracy + accuracy_circular = max(3, int(accuracy_involute/2) - 1) # never less than three + # print >>self.tty, "accuracy_circular=%s accuracy_involute=%s" % (accuracy_circular, accuracy_involute) + # Pitch (circular pitch): Length of the arc from one tooth to the next) + # Pitch diameter: Diameter of pitch circle. + pitch = self.calc_circular_pitch() + # Replace section below with this call to get the combined gear_calculations() above + (pitch_radius, base_radius, addendum, dedendum, + outer_radius, root_radius, tooth) = gear_calculations(teeth, pitch, angle, clearance, self.options.internal_ring, self.options.profile_shift*0.01) + + # Detect Undercut of teeth +## undercut = int(ceil(undercut_min_teeth( angle ))) +## needs_undercut = teeth < undercut #? no longer needed ? + if have_undercut(teeth, angle, 1.0): + min_teeth = int(ceil(undercut_min_teeth(angle, 1.0))) + min_angle = undercut_min_angle(teeth, 1.0) + .1 + max_k = undercut_max_k(teeth, angle) + msg = "Undercut Warning: This gear (%d teeth) will not work well.\nTry tooth count of %d or more,\nor a pressure angle of %.1f [deg] or more,\nor try a profile shift of %d %%.\nOr other decent combinations." % (teeth, min_teeth, min_angle, int(100. * max_k) - 100.) + # alas annotation cannot handle the degree symbol. Also it ignore + # newlines. + # so split and make a list + warnings.extend(msg.split("\n")) + #if self.options.undercut_alert: + # inkex.utils.debug(msg) + #else: + # print >> self.tty, msg + + # All base calcs done. Start building gear + points = generate_spur_points(teeth, base_radius, pitch_radius, outer_radius, root_radius, accuracy_involute, accuracy_circular) + +## half_thick_angle = two_pi / (4.0 * teeth ) #?? = pi / (2.0 * teeth) +## pitch_to_base_angle = involute_intersect_angle( base_radius, pitch_radius ) +## pitch_to_outer_angle = involute_intersect_angle( base_radius, outer_radius ) - pitch_to_base_angle +## +## start_involute_radius = max(base_radius, root_radius) +## radii = linspace(start_involute_radius, outer_radius, accuracy_involute) +## angles = [involute_intersect_angle(base_radius, r) for r in radii] +## +## centers = [(x * two_pi / float( teeth) ) for x in range( teeth ) ] +## points = [] +## +## for c in centers: +## # Angles +## pitch1 = c - half_thick_angle +## base1 = pitch1 - pitch_to_base_angle +## offsetangles1 = [ base1 + x for x in angles] +## points1 = [ point_on_circle( radii[i], offsetangles1[i]) for i in range(0,len(radii)) ] +## +## pitch2 = c + half_thick_angle +## base2 = pitch2 + pitch_to_base_angle +## offsetangles2 = [ base2 - x for x in angles] +## points2 = [ point_on_circle( radii[i], offsetangles2[i]) for i in range(0,len(radii)) ] +## +## points_on_outer_radius = [ point_on_circle(outer_radius, x) for x in linspace(offsetangles1[-1], offsetangles2[-1], accuracy_circular) ] +## +## if root_radius > base_radius: +## pitch_to_root_angle = pitch_to_base_angle - involute_intersect_angle(base_radius, root_radius ) +## root1 = pitch1 - pitch_to_root_angle +## root2 = pitch2 + pitch_to_root_angle +## points_on_root = [point_on_circle (root_radius, x) for x in linspace(root2, root1+(two_pi/float(teeth)), accuracy_circular) ] +## p_tmp = points1 + points_on_outer_radius[1:-1] + points2[::-1] + points_on_root[1:-1] # [::-1] reverses list; [1:-1] removes first and last element +## else: +## points_on_root = [point_on_circle (root_radius, x) for x in linspace(base2, base1+(two_pi/float(teeth)), accuracy_circular) ] +## p_tmp = points1 + points_on_outer_radius[1:-1] + points2[::-1] + points_on_root # [::-1] reverses list +## +## points.extend( p_tmp ) + + path = points_to_svgd( points ) + bbox_center = points_to_bbox_center( points ) + + # Spokes (add to current path) + if not self.options.internal_ring: # only draw internals if spur gear + spokes_path, msg = generate_spokes_path(root_radius, spoke_width, spoke_count, mount_radius, mount_hole, + unit_factor, self.options.units) + warnings.extend(msg) + path += spokes_path + + # Draw mount hole + # A : rx,ry x-axis-rotation, large-arch-flag, sweepflag x,y + r = mount_hole / 2 + path += ( + "M %f,%f" % (0,r) + + "A %f,%f %s %s %s %f,%f" % (r,r, 0,0,0, 0,-r) + + "A %f,%f %s %s %s %f,%f" % (r,r, 0,0,0, 0,r) + ) + else: + # its a ring gear + # which only has an outer ring where width = spoke width + r = outer_radius + spoke_width + path += ( + "M %f,%f" % (0,r) + + "A %f,%f %s %s %s %f,%f" % (r,r, 0,0,0, 0,-r) + + "A %f,%f %s %s %s %f,%f" % (r,r, 0,0,0, 0,r) + ) + + # Embed gear in group to make animation easier: + # Translate group, Rotate path. + t = 'translate(' + str( self.svg.namedview.center[0] ) + ',' + str( self.svg.namedview.center[1] ) + ')' + g_attribs = { inkex.addNS('label','inkscape'):'Gear' + str( teeth ), + inkex.addNS('transform-center-x','inkscape'): str(-bbox_center[0]), + inkex.addNS('transform-center-y','inkscape'): str(-bbox_center[1]), + 'transform':t, + 'info':'N:'+str(teeth)+'; Pitch:'+ str(pitch) + '; Pressure Angle: '+str(angle) } + # add the group to the current layer + g = etree.SubElement(self.svg.get_current_layer(), 'g', g_attribs ) + + # Create gear path under top level group + style = { 'stroke': path_stroke, 'fill': path_fill, 'stroke-width': path_stroke_width } + gear_attribs = { 'style': str(inkex.Style(style)), 'd': path } + gear = etree.SubElement(g, inkex.addNS('path','svg'), gear_attribs ) + + # Add center + if centercross: + style = {'stroke': path_stroke, 'fill': path_fill, + 'stroke-width': path_stroke_light} + cs = str(pitch / 3) # centercross length + d = 'M-'+cs+',0L'+cs+',0M0,-'+cs+'L0,'+cs # 'M-10,0L10,0M0,-10L0,10' + center_attribs = {inkex.addNS('label', 'inkscape'): 'Center cross', + 'style': str(inkex.Style(style)), 'd': d} + center = etree.SubElement( + g, inkex.addNS('path', 'svg'), center_attribs) + + # Add pitch circle (for mating) + if pitchcircle: + style = { 'stroke': path_stroke, 'fill': path_fill, 'stroke-width': path_stroke_light } + draw_SVG_circle(g, pitch_radius, 0, 0, 'Pitch circle', style) + + # Add Rack (below) + if self.options.draw_rack: + rack_base_height = self.options.rack_base_height * unit_factor + tab_width = self.options.rack_base_tab * unit_factor + tooth_count = self.options.rack_teeth_length + (points, guide_path) = generate_rack_points(tooth_count, pitch, addendum, angle, + rack_base_height, tab_width, clearance, pitchcircle) + path = points_to_svgd(points) + # position below Gear, so that it meshes nicely + # xoff = 0 ## if teeth % 4 == 2. + # xoff = -0.5*pitch ## if teeth % 4 == 0. + # xoff = -0.75*pitch ## if teeth % 4 == 3. + # xoff = -0.25*pitch ## if teeth % 4 == 1. + xoff = (-0.5, -0.25, 0, -0.75)[teeth % 4] * pitch + t = 'translate(' + str( xoff ) + ',' + str( pitch_radius ) + ')' + g_attribs = { inkex.addNS('label', 'inkscape'): 'RackGear' + str(tooth_count), + 'transform': t } + rack = etree.SubElement(g, 'g', g_attribs) + + # Create SVG Path for gear + style = {'stroke': path_stroke, 'fill': 'none', 'stroke-width': path_stroke_width } + gear_attribs = { 'style': str(inkex.Style(style)), 'd': path } + gear = etree.SubElement( + rack, inkex.addNS('path', 'svg'), gear_attribs) + if guide_path is not None: + style2 = { 'stroke': path_stroke, 'fill': 'none', 'stroke-width': path_stroke_light } + gear_attribs2 = { 'style': str(inkex.Style(style2)), 'd': guide_path } + gear = etree.SubElement( + rack, inkex.addNS('path', 'svg'), gear_attribs2) + + + # Add Annotations (above) + if self.options.annotation: + outer_dia = outer_radius * 2 + if self.options.internal_ring: + outer_dia += 2 * spoke_width + notes = [] + notes.extend(warnings) + #notes.append('Document (%s) scale conversion = %2.4f' % (self.document.getroot().find(inkex.addNS('namedview', 'sodipodi')).get(inkex.addNS('document-units', 'inkscape')), unit_factor)) + notes.extend(['Teeth: %d CP: %2.4f(%s) ' % (teeth, pitch / unit_factor, self.options.units), + 'DP: %2.3f Module: %2.4f' % (pi / pitch * unit_factor, pitch / pi * 25.4), + 'Pressure Angle: %2.2f degrees' % (angle), + 'Pitch diameter: %2.3f %s' % (pitch_radius * 2 / unit_factor, self.options.units), + 'Outer diameter: %2.3f %s' % (outer_dia / unit_factor, self.options.units), + 'Base diameter: %2.3f %s' % (base_radius * 2 / unit_factor, self.options.units)#, + #'Addendum: %2.4f %s' % (addendum / unit_factor, self.options.units), + #'Dedendum: %2.4f %s' % (dedendum / unit_factor, self.options.units) + ]) + # text height relative to gear size. + # ranges from 10 to 22 over outer radius size 60 to 360 + text_height = max(10, min(10+(outer_dia-60)/24, 22)) + # position above + y = - outer_radius - (len(notes)+1) * text_height * 1.2 + for note in notes: + self.add_text(g, note, [0,y], text_height) + y += text_height * 1.2 + +if __name__ == '__main__': + Gears().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/gears2/gears2.inx b/extensions/fablabchemnitz/gears2/gears2.inx new file mode 100644 index 00000000..cc18da09 --- /dev/null +++ b/extensions/fablabchemnitz/gears2/gears2.inx @@ -0,0 +1,49 @@ + + + Gears2 + fablabchemnitz.de.gears2 + + + 24 + 20 + + + + + + 5 + + + + + + + + + + + + all + + + + + + + + diff --git a/extensions/fablabchemnitz/gears2/gears2.py b/extensions/fablabchemnitz/gears2/gears2.py new file mode 100644 index 00000000..d996d9e1 --- /dev/null +++ b/extensions/fablabchemnitz/gears2/gears2.py @@ -0,0 +1,59 @@ +#!/usr/bin/env python3 +''' +Copyright (C) 2013 Matthew Dockrey (gfish @ cyphertext.net) + +Based on http://arc.id.au/GearDrawing.html by Dr A.R.Collins +And on the original gears.py by Aaron Spike and Tavmjong Bah +''' + +import inkex +from math import * +from lxml import etree + +from involute import * + +class Gears(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument("--tab", default="Options", help="The tab selected when OK was pressed") + pars.add_argument("-t", "--teeth", type=int, default=24, help="Number of teeth") + pars.add_argument("-p", "--pressure_angle", type=float, default="20", help="Pressure angle") + pars.add_argument("-y", "--size_type", type=int, default="1", help="Size type (1 = module (mm), 2 = pitch diameter (inches), 3 = diametral pitch (inches)") + pars.add_argument("-s", "--size", type=float, default="5", help="Size") + pars.add_argument("-o", "--orientation", type=int, default="1", help="Gear orientation") + + def effect(self): + Z = self.options.teeth + phi = self.options.pressure_angle + size_type = self.options.size_type + size = self.options.size + orientation = self.options.orientation + + # Convert size to module (mm) if needed + if (size_type == 2): + # Pitch diameter + size = 25.4 * size / Z + elif (size_type == 3): + # Diametral pitch + size = 25.4 / size + + m = self.svg.unittouu(str(size) + "mm") + + if (orientation == 2): + svg = CreateInternalGear(m, Z, phi) + else: + svg = CreateExternalGear(m, Z, phi) + + # Insert as a new element + gear_style = { 'stroke': '#000000', + 'stroke-width': self.svg.unittouu(str(0.1) + "mm"), + 'fill': 'none' + } + g_attribs = {inkex.addNS('label','inkscape'): 'Gear ' + str(Z), + 'transform': 'translate(' + str( self.svg.namedview.center[0] ) + ',' + str( self.svg.namedview.center[1] ) + ')', + 'style' : str(inkex.Style(gear_style)), + 'd' : svg } + g = etree.SubElement(self.svg.get_current_layer(), inkex.addNS('path','svg'), g_attribs) + +if __name__ == '__main__': + Gears().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/gears2/involute.py b/extensions/fablabchemnitz/gears2/involute.py new file mode 100644 index 00000000..c7817712 --- /dev/null +++ b/extensions/fablabchemnitz/gears2/involute.py @@ -0,0 +1,348 @@ +#!/usr/bin/env python3 +# Based on gearUtils-03.js by Dr A.R.Collins +# Latest version: + +# Calculation of Bezier coefficients for +# Higuchi et al. approximation to an involute. +# ref: YNU Digital Eng Lab Memorandum 05-1 + +from math import * + +def rotate(p, t): + return (p[0] * cos(t) - p[1] * sin(t), p[0] * sin(t) + p[1] * cos(t)) + +def SVG_move(p, t): + pp = rotate(p, t) + return 'M ' + str(pp[0]) + ',' + str(pp[1]) + '\n' + +def SVG_line(p, t): + pp = rotate(p, t) + return 'L ' + str(pp[0]) + ',' + str(pp[1]) + '\n' + +def SVG_circle(p, r, sweep, t): + pp = rotate(p, t) + return 'A ' + str(r) + ',' + str(r) + ' 0 0,' + str(sweep) + ' ' + str(pp[0]) + ',' + str(pp[1]) + '\n' + +def SVG_curve(p, c1, c2, t): + pp = rotate(p, t) + c1p = rotate(c1, t) + c2p = rotate(c2, t) + return 'C ' + str(pp[0]) + ',' + str(pp[1]) + ' ' + str(c1p[0]) + ',' + str(c1p[1]) + ' ' + str(c2p[0]) + ',' + str(c2p[1]) + '\n' + +def SVG_curve2(p1, c11, c12, p2, c21, c22, t): + p1p = rotate(p1, t) + c11p = rotate(c11, t) + c12p = rotate(c12, t) + p2p = rotate(p2, t) + c21p = rotate(c21, t) + c22p = rotate(c22, t) + return 'C ' + str(p1p[0]) + ',' + str(p1p[1]) + ' ' + str(c11p[0]) + ',' + str(c11p[1]) + ' ' + str(c12p[0]) + ',' + str(c12p[1]) + ' ' + str(p2p[0]) + ',' + str(p2p[1]) + ' ' + str(c21p[0]) + ',' + str(c21p[1]) + ' ' + str(c22p[0]) + ',' + str(c22p[1]) + '\n' + +def SVG_close(): + return 'Z\n' + +def genInvolutePolar(Rb, R): # Rb = base circle radius + # returns the involute angle as function of radius R. + return (sqrt(R*R - Rb*Rb) / Rb) - acos(Rb / R) + +def rotate(pt, rads): # rotate pt by rads radians about origin + sinA = sin(rads) + cosA = cos(rads) + return [pt[0] * cosA - pt[1] * sinA, + pt[0] * sinA + pt[1] * cosA] + +def toCartesian(radius, angle): # convert polar coords to cartesian + return [radius * cos(angle), radius * sin(angle)] + +def CreateExternalGear(m, Z, phi): + # ****** external gear specifications + addendum = m # distance from pitch circle to tip circle + dedendum = 1.25 * m # pitch circle to root, sets clearance + clearance = dedendum - addendum + + # Calculate radii + Rpitch = Z * m / 2 # pitch circle radius + Rb = Rpitch*cos(phi * pi / 180) # base circle radius + Ra = Rpitch + addendum # tip (addendum) circle radius + Rroot = Rpitch - dedendum # root circle radius + fRad = 1.5 * clearance # fillet radius, max 1.5*clearance + Rf = sqrt((Rroot + fRad) * (Rroot + fRad) - (fRad * fRad)) # radius at top of fillet + if (Rb < Rf): + Rf = Rroot + clearance + + # ****** calculate angles (all in radians) + pitchAngle = 2 * pi / Z # angle subtended by whole tooth (rads) + baseToPitchAngle = genInvolutePolar(Rb, Rpitch) + pitchToFilletAngle = baseToPitchAngle # profile starts at base circle + if (Rf > Rb): # start profile at top of fillet (if its greater) + pitchToFilletAngle -= genInvolutePolar(Rb, Rf) + + filletAngle = atan(fRad / (fRad + Rroot)) # radians + + # ****** generate Higuchi involute approximation + fe = 1 # fraction of profile length at end of approx + fs = 0.01 # fraction of length offset from base to avoid singularity + if (Rf > Rb): + fs = (Rf * Rf - Rb * Rb) / (Ra * Ra - Rb * Rb) # offset start to top of fillet + + # approximate in 2 sections, split 25% along the involute + fm = fs + (fe - fs) / 4 # fraction of length at junction (25% along profile) + dedBez = BezCoeffs(m, Z, phi, 3, fs, fm) + addBez = BezCoeffs(m, Z, phi, 3, fm, fe) + + dedInv = dedBez.involuteBezCoeffs() + addInv = addBez.involuteBezCoeffs() + + # join the 2 sets of coeffs (skip duplicate mid point) + inv = dedInv + addInv[1:] + + # create the back profile of tooth (mirror image) + invR = [0 for i in range(0, len(inv))] # involute profile along back of tooth + for i in range(0, len(inv)): + # rotate all points to put pitch point at y = 0 + pt = rotate(inv[i], -baseToPitchAngle - pitchAngle / 4) + inv[i] = pt + # generate the back of tooth profile nodes, mirror coords in X axis + invR[i] = [pt[0], -pt[1]] + + # ****** calculate section junction points R=back of tooth, Next=front of next tooth) + fillet = toCartesian(Rf, -pitchAngle / 4 - pitchToFilletAngle) # top of fillet + filletR = [fillet[0], -fillet[1]] # flip to make same point on back of tooth + rootR = toCartesian(Rroot, pitchAngle / 4 + pitchToFilletAngle + filletAngle) + rootNext = toCartesian(Rroot, 3 * pitchAngle / 4 - pitchToFilletAngle - filletAngle) + filletNext = rotate(fillet, pitchAngle) # top of fillet, front of next tooth + + # Draw the shapes in SVG + t_inc = 2.0 * pi / float(Z) + thetas = [(x * t_inc) for x in range(Z)] + + svg = SVG_move(fillet, 0) # start at top of fillet + + for theta in thetas: + if (Rf < Rb): + svg += SVG_line(inv[0], theta) # line from fillet up to base circle + + svg += SVG_curve2(inv[1], inv[2], inv[3], + inv[4], inv[5], inv[6], theta) + + svg += SVG_circle(invR[6], Ra, 1, theta) # arc across addendum circle + + # svg = SVG_move(invR[6]) # TEMP + svg += SVG_curve2(invR[5], invR[4], invR[3], + invR[2], invR[1], invR[0], theta) + + if (Rf < Rb): + svg += SVG_line(filletR, theta) # line down to topof fillet + + if (rootNext[1] > rootR[1]): # is there a section of root circle between fillets? + svg += SVG_circle(rootR, fRad, 0, theta) # back fillet + svg += SVG_circle(rootNext, Rroot, 1, theta) # root circle arc + + svg += SVG_circle(filletNext, fRad, 0, theta) + + svg += SVG_close() + + return svg + +def CreateInternalGear(m, Z, phi): + addendum = 0.6 * m # pitch circle to tip circle (ref G.M.Maitra) + dedendum = 1.25 * m # pitch circle to root radius, sets clearance + + # Calculate radii + Rpitch = Z * m / 2 # pitch radius + Rb = Rpitch * cos(phi * pi / 180) # base radius + Ra = Rpitch - addendum # addendum radius + Rroot = Rpitch + dedendum# root radius + clearance = 0.25 * m # gear dedendum - pinion addendum + Rf = Rroot - clearance # radius of top of fillet (end of profile) + fRad = 1.5 * clearance # fillet radius, 1 .. 1.5*clearance + + # ****** calculate subtended angles + pitchAngle = 2 * pi / Z # angle between teeth (rads) + baseToPitchAngle = genInvolutePolar(Rb, Rpitch) + tipToPitchAngle = baseToPitchAngle # profile starts from base circle + if (Ra > Rb): + tipToPitchAngle -= genInvolutePolar(Rb, Ra) # start profile from addendum + pitchToFilletAngle = genInvolutePolar(Rb, Rf) - baseToPitchAngle + filletAngle = 1.414 * clearance / Rf # to make fillet tangential to root + + # ****** generate Higuchi involute approximation + fe = 1 # fraction of involute length at end of approx (fillet circle) + fs = 0.01 # fraction of length offset from base to avoid singularity + if (Ra > Rb): + fs = (Ra*Ra - Rb*Rb) / (Rf*Rf - Rb*Rb) # start profile from addendum (tip circle) + + # approximate in 2 sections, split 25% along the profile + fm = fs + (fe - fs) / 4 + + addBez = BezCoeffs(m, Z, phi, 3, fs, fm) + dedBez = BezCoeffs(m, Z, phi, 3, fm, fe) + addInv = addBez.involuteBezCoeffs() + dedInv = dedBez.involuteBezCoeffs() + + # join the 2 sets of coeffs (skip duplicate mid point) + invR = addInv + dedInv[1:] + + # create the front profile of tooth (mirror image) + inv = [0 for i in range(0, len(invR))] # back involute profile + for i in range(0, len(inv)): + # rotate involute to put center of tooth at y = 0 + pt = rotate(invR[i], pitchAngle / 4 - baseToPitchAngle) + invR[i] = pt + # generate the back of tooth profile, flip Y coords + inv[i] = [pt[0], -pt[1]] + + # ****** calculate coords of section junctions + fillet = [inv[6][0], inv[6][1]] # top of fillet, front of tooth + tip = toCartesian(Ra, -pitchAngle / 4 + tipToPitchAngle) # tip, front of tooth + tipR = [tip[0], -tip[1]] # addendum, back of tooth + rootR = toCartesian(Rroot, pitchAngle / 4 + pitchToFilletAngle + filletAngle) + rootNext = toCartesian(Rroot, 3 * pitchAngle / 4 - pitchToFilletAngle - filletAngle) + filletNext = rotate(fillet, pitchAngle) # top of fillet, front of next tooth + + # Draw the shapes in SVG + t_inc = 2.0 * pi / float(Z) + thetas = [(x * t_inc) for x in range(Z)] + + svg = SVG_move(fillet, 0) # start at top of fillet + + for theta in thetas: + svg += SVG_curve2(inv[5], inv[4], inv[3], + inv[2], inv[1], inv[0], theta) + + if (Ra < Rb): + svg += SVG_line(tip, theta) # line from end of involute to addendum (tip) + + svg += SVG_circle(tipR, Ra, 1, theta) # arc across tip circle + + if (Ra < Rb): + svg += SVG_line(invR[0], theta) # line from addendum to start of involute + + svg += SVG_curve2(invR[1], invR[2], invR[3], + invR[4], invR[5], invR[6], theta) + + if (rootR[1] < rootNext[1]): # there is a section of root circle between fillets + svg += SVG_circle(rootR, fRad, 1, theta) # fillet on back of tooth + + svg += SVG_circle(rootNext, Rroot, 1, theta) # root circle arc + + svg += SVG_circle(filletNext, fRad, 1, theta) # fillet on next + + return svg + +class BezCoeffs: + def chebyExpnCoeffs(self, j, func): + N = 50 # a suitably large number N>>p + c = 0 + for k in range(1, N + 1): + c += func(cos(pi * (k - 0.5) / N)) * cos(pi * j * (k - 0.5) / N) + + return 2 *c / N + + def chebyPolyCoeffs(self, p, func): + coeffs = [0, 0, 0, 0] + fnCoeff = [0, 0, 0, 0] + T = [[1, 0, 0, 0, 0], + [0, 1, 0, 0, 0], + [0, 0, 0, 0, 0], + [0, 0, 0, 0, 0], + [0, 0, 0, 0, 0] + ] + + # now generate the Chebyshev polynomial coefficient using + # formula T(k+1) = 2xT(k) - T(k-1) which yields + # T = [ [ 1, 0, 0, 0, 0, 0], # T0(x) = +1 + # [ 0, 1, 0, 0, 0, 0], # T1(x) = 0 +x + # [-1, 0, 2, 0, 0, 0], # T2(x) = -1 0 +2xx + # [ 0, -3, 0, 4, 0, 0], # T3(x) = 0 -3x 0 +4xxx + # [ 1, 0, -8, 0, 8, 0], # T4(x) = +1 0 -8xx 0 +8xxxx + # [ 0, 5, 0,-20, 0, 16], # T5(x) = 0 5x 0 -20xxx 0 +16xxxxx + # ... ] + + for k in range(1, p + 1): + for j in range(0, len(T[k]) - 1): + T[k + 1][j + 1] = 2 * T[k][j] + for j in range(0, len(T[k - 1])): + T[k + 1][j] -= T[k - 1][j] + + # convert the chebyshev function series into a simple polynomial + # and collect like terms, out T polynomial coefficients + for k in range(0, p + 1): + fnCoeff[k] = self.chebyExpnCoeffs(k, func) + coeffs[k] = 0 + + for k in range(0, p + 1): + for pwr in range(0, p + 1): + coeffs[pwr] += fnCoeff[k] * T[k][pwr] + + coeffs[0] -= self.chebyExpnCoeffs(0, func) / 2 # fix the 0th coeff + + return coeffs + + # Equation of involute using the Bezier parameter t as variable + def involuteXbez(self, t): + # map t (0 <= t <= 1) onto x (where -1 <= x <= 1) + x = t * 2 - 1 + # map theta (where ts <= theta <= te) from x (-1 <=x <= 1) + theta = x * (self.te - self.ts) / 2 + (self.ts + self.te) / 2 + return self.Rb * (cos(theta) + theta * sin(theta)) + + def involuteYbez(self, t): + # map t (0 <= t <= 1) onto x (where -1 <= x <= 1) + x = t * 2 - 1 + # map theta (where ts <= theta <= te) from x (-1 <=x <= 1) + theta = x * (self.te - self.ts) / 2 + (self.ts + self.te) / 2 + return self.Rb * (sin(theta) - theta * cos(theta)) + + def binom(self, n, k): + coeff = 1 + for i in range(n - k + 1, n + 1): + coeff *= i + + for i in range(1, k + 1): + coeff /= i + + return coeff + + def bezCoeff(self, i, func): + # generate the polynomial coeffs in one go + polyCoeffs = self.chebyPolyCoeffs(self.p, func) + + bc = 0 + for j in range(0, i + 1): + bc += self.binom(i, j) * polyCoeffs[j] / self.binom(self.p, j) + + return bc + + def involuteBezCoeffs(self): + # calc Bezier coeffs + bzCoeffs = [] + for i in range(0, self.p + 1): + bcoeff = [0, 0] + bcoeff[0] = self.bezCoeff(i, self.involuteXbez) + bcoeff[1] = self.bezCoeff(i, self.involuteYbez) + bzCoeffs.append(bcoeff) + + return bzCoeffs + + # Parameters: + # module - sets the size of teeth (see gear design texts) + # numTeeth - number of teeth on the gear + # pressure angle - angle in degrees, usually 14.5 or 20 + # order - the order of the Bezier curve to be fitted [3, 4, 5, ..] + # fstart - fraction of distance along tooth profile to start + # fstop - fraction of distance along profile to stop + def __init__(self, module, numTeeth, pressureAngle, order, fstart, fstop): + self.Rpitch = module * numTeeth / 2 # pitch circle radius + self.phi = pressureAngle # pressure angle + self.Rb = self.Rpitch * cos(self.phi * pi / 180) # base circle radius + self.Ra = self.Rpitch + module # addendum radius (outer radius) + self.ta = sqrt(self.Ra * self.Ra - self.Rb * self.Rb) / self.Rb # involute angle at addendum + self.stop = fstop + + if (fstart < self.stop): + self.start = fstart + + self.te = sqrt(self.stop) * self.ta # involute angle, theta, at end of approx + self.ts = sqrt(self.start) * self.ta # involute angle, theta, at start of approx + self.p = order # order of Bezier approximation \ No newline at end of file diff --git a/extensions/fablabchemnitz/generate_palette/.editorconfig b/extensions/fablabchemnitz/generate_palette/.editorconfig new file mode 100644 index 00000000..4a7ea303 --- /dev/null +++ b/extensions/fablabchemnitz/generate_palette/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/extensions/fablabchemnitz/generate_palette/generate_palette.inx b/extensions/fablabchemnitz/generate_palette/generate_palette.inx new file mode 100644 index 00000000..78519e95 --- /dev/null +++ b/extensions/fablabchemnitz/generate_palette/generate_palette.inx @@ -0,0 +1,40 @@ + + + Generate Palette + fablabchemnitz.de.generate_palette + + + + + + + + + + + + + false + false + + + + + + + + + + info.svg + + + + all + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/generate_palette/generate_palette.py b/extensions/fablabchemnitz/generate_palette/generate_palette.py new file mode 100644 index 00000000..c6c40d71 --- /dev/null +++ b/extensions/fablabchemnitz/generate_palette/generate_palette.py @@ -0,0 +1,180 @@ +#! /usr/bin/env python3 + +import os +import sys +import inkex + +def log(text): + inkex.utils.debug(text) + + +def abort(text): + inkex.errormsg(_(text)) + exit() + + +class GeneratePalette(inkex.EffectExtension): + + + def add_arguments(self, pars): + pars.add_argument('--name', help='Palette name') + pars.add_argument('--property', help='Color property') + pars.add_argument('--default', type=inkex.Boolean, help='Default grays') + pars.add_argument('--sort', help='Sort type') + pars.add_argument('--replace', type=inkex.Boolean, dest='replace', help='Replace existing') + + + def get_palettes_path(self): + if sys.platform.startswith('win'): + path = os.path.join(os.environ['APPDATA'], 'inkscape', 'palettes') + else: + path = os.environ.get('XDG_CONFIG_HOME', '~/.config') + path = os.path.join(path, 'inkscape', 'palettes') + + return os.path.expanduser(path) + + + def get_file_path(self): + name = str(self.options.name).replace(' ', '-') + return "%s/%s.gpl" % (self.palettes_path, name) + + + def get_default_colors(self): + colors = [ + " 0 0 0 Black", + " 26 26 26 90% Gray", + " 51 51 51 80% Gray", + " 77 77 77 70% Gray", + "102 102 102 60% Gray", + "128 128 128 50% Gray", + "153 153 153 40% Gray", + "179 179 179 30% Gray", + "204 204 204 20% Gray", + "230 230 230 10% Gray", + "236 236 236 7.5% Gray", + "242 242 242 5% Gray", + "249 249 249 2.5% Gray", + "255 255 255 White" + ] + + return colors if self.options.default else [] + + + def get_node_prop(self, node, property): + attr = node.attrib.get('style') + style = dict(inkex.Style.parse_str(attr)) + + return style.get(property, 'none') + + + def get_node_index(self, item): + node = item[1] + id = node.attrib.get('id') + + return self.options.ids.index(id) + + + def get_node_x(self, item): + node = item[1] + return node.bounding_box().center_x + + + def get_node_y(self, item): + node = item[1] + return node.bounding_box().center_y + + + def get_formatted_color(self, color): + rgb = inkex.Color(color).to_rgb() + + if self.options.sort == 'hsl': + key = inkex.Color(color).to_hsl() + key = "{:03d}{:03d}{:03d}".format(*key) + else: + key = "{:03d}{:03d}{:03d}".format(*rgb) + + rgb = "{:3d} {:3d} {:3d}".format(*rgb) + color = str(color).upper() + name = str(inkex.Color(color).to_named()).upper() + + if name != color: + name = "%s (%s)" % (name.capitalize(), color) + + return "%s %s %s" % (key, rgb, name) + + + def get_selected_colors(self): + colors = [] + selected = list(self.svg.selected.items()) + + if self.options.sort == 'y_location': + selected.sort(key=self.get_node_x) + selected.sort(key=self.get_node_y) + elif self.options.sort == 'x_location': + selected.sort(key=self.get_node_y) + selected.sort(key=self.get_node_x) + else: + selected.sort(key=self.get_node_index) + + for id, node in selected: + if self.options.property in ['fill', 'both']: + fill = self.get_node_prop(node, 'fill') + + if inkex.colors.is_color(fill): + if fill != 'none' and fill not in colors: + colors.append(fill) + + if self.options.property in ['stroke', 'both']: + stroke = self.get_node_prop(node, 'stroke') + + if inkex.colors.is_color(stroke): + if stroke != 'none' and stroke not in colors: + colors.append(stroke) + + colors = list(map(self.get_formatted_color, colors)) + + if self.options.sort == 'hsl' or self.options.sort == 'rgb': + colors.sort() + + return list(map(lambda x : x[11:], colors)) + + + def write_palette(self): + file = open(self.file_path, 'w') + try: + file.write("GIMP Palette\n") + file.write("Name: %s\n" % self.options.name) + file.write("#\n# Generated with Inkscape Generate Palette\n#\n") + + for color in self.default_colors: + file.write("%s\n" % color) + + for color in self.selected_colors: + if color[:11] not in list(map(lambda x : x[:11], self.default_colors)): + file.write("%s\n" % color) + finally: + file.close() + + + def effect(self): + self.palettes_path = self.get_palettes_path() + self.file_path = self.get_file_path() + self.default_colors = self.get_default_colors() + self.selected_colors = self.get_selected_colors() + + if not self.options.replace and os.path.exists(self.file_path): + abort('Palette already exists!') + + if not self.options.name: + abort('Please enter a palette name.') + + if len(self.options.ids) < 2: + abort('Please select at least 2 objects.') + + if not len(self.selected_colors): + abort('No colors found in selected objects!') + + self.write_palette() + +if __name__ == '__main__': + GeneratePalette().run() diff --git a/extensions/fablabchemnitz/generate_palette/info.svg b/extensions/fablabchemnitz/generate_palette/info.svg new file mode 100644 index 00000000..2fafe0ab --- /dev/null +++ b/extensions/fablabchemnitz/generate_palette/info.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/extensions/fablabchemnitz/globe/globe.inx b/extensions/fablabchemnitz/globe/globe.inx new file mode 100644 index 00000000..c2284069 --- /dev/null +++ b/extensions/fablabchemnitz/globe/globe.inx @@ -0,0 +1,21 @@ + + + Globe + fablabchemnitz.de.globe + 8 + 5 + 0 + 0 + false + + path + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/globe/globe.py b/extensions/fablabchemnitz/globe/globe.py new file mode 100644 index 00000000..f219570f --- /dev/null +++ b/extensions/fablabchemnitz/globe/globe.py @@ -0,0 +1,266 @@ +#!/usr/bin/env python3 +''' +Globe rendering extension for Inkscape +Copyright (C) 2009 Gerrit Karius + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + +About the Globe rendering extension: + + + +''' +from __future__ import division +import inkex +from math import * +from lxml import etree + +#TODO: put the globe in the center of the view canvas + +def draw_ellipse_rotated(cx,cy,rx,ry, width, fill, name, parent, rotationAngle): + a = cos(rotationAngle) + b = sin(rotationAngle) + c = -sin(rotationAngle) + d = cos(rotationAngle) + e = -(a*cx + c*cy) + cx + f = -(b*cx + d*cy) + cy + style = { 'stroke': '#000000', 'stroke-width':str(width), 'fill':fill} + if rx == 0: + x1 = cx + x2 = cx + y1 = cy - ry + y2 = cy + ry + circle_attribs = {'style':str(inkex.Style(style)), + inkex.addNS('label','inkscape'):name, + 'd':'M '+str(x1)+','+str(y1)+' L '+str(x2)+','+str(y2), + 'transform':'matrix('+str(a)+','+str(b)+','+str(c)+','+str(d)+','+str(e)+','+str(f)+')'} + elif ry == 0: + x1 = cx - rx + x2 = cx + rx + y1 = cy + y2 = cy + circle_attribs = {'style':str(inkex.Style(style)), + inkex.addNS('label','inkscape'):name, + 'd':'M '+str(x1)+','+str(y1)+' L '+str(x2)+','+str(y2), + 'transform':'matrix('+str(a)+','+str(b)+','+str(c)+','+str(d)+','+str(e)+','+str(f)+')'} + else: + circle_attribs = {'style':str(inkex.Style(style)), + inkex.addNS('label','inkscape'):name, + inkex.addNS('cx','sodipodi'):str(cx), + inkex.addNS('cy','sodipodi'):str(cy), + inkex.addNS('rx','sodipodi'):str(rx), + inkex.addNS('ry','sodipodi'):str(ry), + inkex.addNS('type','sodipodi'):'arc', + 'transform':'matrix('+str(a)+','+str(b)+','+str(c)+','+str(d)+','+str(e)+','+str(f)+')'} + etree.SubElement(parent, inkex.addNS('path','svg'), circle_attribs) + +def draw_ellipse_segment_rotated(cx,cy,rx,ry, width, fill, name, parent, rotationAngle, segmentAngleStart, segmentAngleEnd): + a = cos(rotationAngle) + b = sin(rotationAngle) + c = -sin(rotationAngle) + d = cos(rotationAngle) + e = -(a*cx + c*cy) + cx + f = -(b*cx + d*cy) + cy + style = { 'stroke': '#000000', 'stroke-width':str(width), 'fill':fill} + if rx == 0: + x1 = cx + x2 = cx + y1 = cy - ry + y2 = cy + ry + circle_attribs = {'style':str(inkex.Style(style)), + inkex.addNS('label','inkscape'):name, + 'd':'M '+str(x1)+','+str(y1)+' L '+str(x2)+','+str(y2), + 'transform':'matrix('+str(a)+','+str(b)+','+str(c)+','+str(d)+','+str(e)+','+str(f)+')'} + elif ry == 0: + x1 = cx - rx + x2 = cx + rx + y1 = cy + y2 = cy + circle_attribs = {'style':str(inkex.Style(style)), + inkex.addNS('label','inkscape'):name, + 'd':'M '+str(x1)+','+str(y1)+' L '+str(x2)+','+str(y2), + 'transform':'matrix('+str(a)+','+str(b)+','+str(c)+','+str(d)+','+str(e)+','+str(f)+')'} + else: + circle_attribs = {'style':str(inkex.Style(style)), + inkex.addNS('label','inkscape'):name, + inkex.addNS('cx','sodipodi'):str(cx), + inkex.addNS('cy','sodipodi'):str(cy), + inkex.addNS('rx','sodipodi'):str(rx), + inkex.addNS('ry','sodipodi'):str(ry), + inkex.addNS('start','sodipodi'):str(segmentAngleStart), + inkex.addNS('end','sodipodi'):str(segmentAngleEnd), + inkex.addNS('open','sodipodi'):'true', + inkex.addNS('type','sodipodi'):'arc', + 'transform':'matrix('+str(a)+','+str(b)+','+str(c)+','+str(d)+','+str(e)+','+str(f)+')'} + etree.SubElement(parent, inkex.addNS('path','svg'), circle_attribs) + + +class Globe(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument("--longitudeLineCount", type=int, default=15, help="Number of longitude lines") + pars.add_argument("--latitudeLineCount", type=int, default=15, help="Number of latitude lines") + pars.add_argument("--rotationXDegrees", type=float, default=45, help="Rotation around X axis (degrees)") + pars.add_argument("--rotationYDegrees", type=float, default=-45, help="Rotation around Y axis (degrees)") + pars.add_argument("--isSeeThrough", type=inkex.Boolean, default=False, help="Is the globe see-through") + + def effect(self): + + name = 'globe' + + # globe fill and stroke style + fill = 'none' + width = 1 + + #input parameters - globe center and radius + cyb = 500.0 + cxb = 500.0 + rb = 100.0 + + longitudeRotationAngleDegrees = float(self.options.rotationYDegrees) + tiltForwardAngleDegrees = float(self.options.rotationXDegrees) + + # inputs range fixing + # tiltForwardAngle is adjusted to vary from 0 <= angle < pi + if tiltForwardAngleDegrees >= 180.0: + tiltForwardAngleDegrees -= 180.0 + elif tiltForwardAngleDegrees < 180.0: + tiltForwardAngleDegrees += 180.0 + + if self.options.longitudeLineCount > 0: + angleSpacingLongitudeLinesDegrees = 180.0 / float(self.options.longitudeLineCount); + # longitudeAngle is wrapped to vary from 0 <= angle < angleSpacingLongitudeLines. + while longitudeRotationAngleDegrees < 0: + longitudeRotationAngleDegrees += angleSpacingLongitudeLinesDegrees + while longitudeRotationAngleDegrees >= angleSpacingLongitudeLinesDegrees: + longitudeRotationAngleDegrees -= angleSpacingLongitudeLinesDegrees + + # units conversion from degrees to radians + tiltForwardAngle = tiltForwardAngleDegrees * pi / 180.0; + initialAngleLongitudeLines = longitudeRotationAngleDegrees * pi / 180.0 + + # derived parameters + rxb = rb + ryb = rb + + # + # start drawing + # + + # create the group to put the globe in + group_attribs = {inkex.addNS('label','inkscape'):name} + parent = etree.SubElement(self.svg.get_current_layer(), 'g', group_attribs) + + # draw the outside border + draw_ellipse_rotated(cxb,cyb,rxb,ryb, width, fill, 'border', parent, 0) + + # draw the longitude lines + # elipse #0 corresponds to ring on the front (visible only as a straight vertical line) + # elipse #n-1 corresponds to the ring that is almost 180 degrees away + # elipse #n/2 corresponds to ring around the side (overlaps with globe boundary) (only if n is even) + if self.options.longitudeLineCount > 0: + angleSpacingLongitudeLines = pi / float(self.options.longitudeLineCount); + yOfPole = ryb * cos(tiltForwardAngle) + for i in range(0, self.options.longitudeLineCount): + lineName = 'longitude' + str(i) + # longitudeAngle is always from 0 to pi. + # rotation angle is always from 0 to pi. + # rx is never negative. + longitudeAngle = ((float(i)) * angleSpacingLongitudeLines) + initialAngleLongitudeLines + if tiltForwardAngleDegrees == 0 or tiltForwardAngleDegrees == 180.0: + if longitudeAngle < pi/2: + rotationAngle = 0.0 + else: + rotationAngle = pi + rx = rxb * sin(longitudeAngle) + + arcStart = pi/2 + arcEnd = -pi/2 + + else: + rotationAngle = acos(cos(longitudeAngle) / sqrt(1 - pow(sin(longitudeAngle)*cos(tiltForwardAngle), 2))) + rx = rxb * sin(longitudeAngle) * cos(tiltForwardAngle) + if rx < 0: + rx = -rx + arcStart = -pi/2 + arcEnd = pi/2 + else: + arcStart = pi/2 + arcEnd = -pi/2 + ry = ryb + cx = cxb + cy = cyb + if self.options.isSeeThrough: + draw_ellipse_rotated(cx,cy,rx,ry, width, fill, lineName, parent, rotationAngle) + else: + draw_ellipse_segment_rotated(cx,cy,rx,ry, width, fill, lineName, parent, rotationAngle, arcStart, arcEnd) + + # draw the latitude lines + # elipse #0 corresponds to ring closest to north pole. + # elipse #n-1 corresponds to ring closest to south pole. + # equator is ring #(n-1)/2 (only if n is odd). + if self.options.latitudeLineCount > 0: + angleSpacingLatitudeLines = pi / (1.0 + float(self.options.latitudeLineCount)); + yOfPole = ryb * cos(tiltForwardAngle) + for i in range(0, self.options.latitudeLineCount): + lineName = 'latitude' + str(i) + # angleOfCurrentLatitudeLine is always from 0 to pi. + # tiltForwardAngle is always from 0 to pi. + # ry is never negative. + angleOfCurrentLatitudeLine = float(i + 1) * angleSpacingLatitudeLines + rx = rxb * sin(angleOfCurrentLatitudeLine) + ry = rx * sin(tiltForwardAngle) + cx = cxb + cy = cyb - yOfPole*cos(angleOfCurrentLatitudeLine) + if self.options.isSeeThrough: + #inkex.utils.debug(cx) + #inkex.utils.debug(cy) + #inkex.utils.debug(rx) + #inkex.utils.debug(ry) + #inkex.utils.debug(width) + #inkex.utils.debug(fill) + #inkex.utils.debug(lineName) + #inkex.utils.debug(parent) + draw_ellipse_rotated(cx,cy,rx,ry, width, fill, lineName, parent, 0) + else: + if tiltForwardAngle > pi/2: + # tilt away from viewaer + if rxb * cos(angleOfCurrentLatitudeLine) / cos(tiltForwardAngle) > rxb: + # elipse is not visible + pass + else: + if rxb * cos(angleOfCurrentLatitudeLine) / cos(tiltForwardAngle) < -rxb: + # elipse is all visible + segmentAngle = pi + else: + # elipse is only partially visible + segmentAngle = acos(max(-1,min(1, -tan(tiltForwardAngle) / tan(angleOfCurrentLatitudeLine)))) + draw_ellipse_segment_rotated(cx,cy,rx,ry, width, fill, lineName, parent, 0, pi/2+segmentAngle, pi/2-segmentAngle) + else: + # tilt towards viewer + if rxb * cos(angleOfCurrentLatitudeLine) / cos(tiltForwardAngle) < -rxb: + # elipse is not visible + pass + else: + if rxb * cos(angleOfCurrentLatitudeLine) / cos(tiltForwardAngle) > rxb: + # elipse is all visible + segmentAngle = pi + else: + # elipse is only partially visible + segmentAngle = acos(max(-1,min(1, tan(tiltForwardAngle) / tan(angleOfCurrentLatitudeLine)))) + draw_ellipse_segment_rotated(cx,cy,rx,ry, width, fill, lineName, parent, 0, -pi/2+segmentAngle, -pi/2-segmentAngle) +if __name__ == '__main__': + Globe().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/gpx_import/gpx_import.inx b/extensions/fablabchemnitz/gpx_import/gpx_import.inx new file mode 100644 index 00000000..69f9ab32 --- /dev/null +++ b/extensions/fablabchemnitz/gpx_import/gpx_import.inx @@ -0,0 +1,28 @@ + + + GPX Import + fablabchemnitz.de.gpx_import + + + 3000 + true + true + true + + + + + + + .gpx + application/gpx+xml + GPS eXchange Format (*.gpx) + Import GPX Format + + + diff --git a/extensions/fablabchemnitz/gpx_import/gpx_import.py b/extensions/fablabchemnitz/gpx_import/gpx_import.py new file mode 100644 index 00000000..51f0f967 --- /dev/null +++ b/extensions/fablabchemnitz/gpx_import/gpx_import.py @@ -0,0 +1,379 @@ +#!/usr/bin/env python3 + +# Copyright (c) 2012-2018 Tobias Leupold +# +# gpx2svg - Convert GPX formatted geodata to Scalable Vector Graphics (SVG) +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the Free +# Software Foundation in version 2 of the License. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. +# +# modified by monomono@disroot.org at 2019-08-05 for use on inkscape extension, +# 3to2 python converter and adjust parser_options for inkscape compatibility. + +from __future__ import division +from __future__ import absolute_import +from io import open +__version__ = u'@VERSION@' + +import argparse +import sys +import math +from xml.dom.minidom import parse as parseXml +from os.path import abspath + +def parseGpx(gpxFile): + u"""Get the latitude and longitude data of all track segments in a GPX file""" + + if gpxFile == u'/dev/stdin': + gpxFile = sys.stdin + + # Get the XML information + try: + gpx = parseXml(gpxFile) + except IOError as error: + print (sys.stderr, u'Error while reading file: {}. Terminating.'.format(error)) + sys.exit(1) + except: + print (sys.stderr, u'Error while parsing XML data:') + print (sys.stderr, sys.exc_info()) + print (sys.stderr, u'Terminating.') + sys.exit(1) + + # Iterate over all tracks, track segments and points + gpsData = [] + for track in gpx.getElementsByTagName(u'trk'): + for trackseg in track.getElementsByTagName(u'trkseg'): + trackSegData = [] + for point in trackseg.getElementsByTagName(u'trkpt'): + trackSegData.append( + (float(point.attributes[u'lon'].value), float(point.attributes[u'lat'].value)) + ) + # Leave out empty segments + if(trackSegData != []): + gpsData.append(trackSegData) + + return gpsData + +def calcProjection(gpsData): + u"""Calculate a plane projection for a GPS dataset""" + + projectedData = [] + for segment in gpsData: + projectedSegment = [] + for coord in segment: + # At the moment, we only have the Mercator projection + projectedSegment.append(mercatorProjection(coord)) + projectedData.append(projectedSegment) + + return projectedData + +def mercatorProjection(coord): + u"""Calculate the Mercator projection of a coordinate pair""" + + # Assuming we're on earth, we have (according to GRS 80): + r = 6378137.0 + + # As long as meridian = 0 and can't be changed, we don't need: + # meridian = meridian * math.pi / 180.0 + # x = r * ((coord[0] * math.pi / 180.0) - meridian) + + # Instead, we use this simplified version: + x = r * coord[0] * math.pi / 180.0 + y = r * math.log(math.tan((math.pi / 4.0) + ((coord[1] * math.pi / 180.0) / 2.0))) + return x, y + +def moveProjectedData(gpsData): + u"""Move a dataset to 0,0 and return it with the resulting width and height""" + + # Find the minimum and maximum x and y coordinates + minX = maxX = gpsData[0][0][0] + minY = maxY = gpsData[0][0][1] + for segment in gpsData: + for coord in segment: + if coord[0] < minX: + minX = coord[0] + if coord[0] > maxX: + maxX = coord[0] + if coord[1] < minY: + minY = coord[1] + if coord[1] > maxY: + maxY = coord[1] + + # Move the GPS data to 0,0 + movedGpsData = [] + for segment in gpsData: + movedSegment = [] + for coord in segment: + movedSegment.append((coord[0] - minX, coord[1] - minY)) + movedGpsData.append(movedSegment) + + # Return the moved data and it's width and height + return movedGpsData, maxX - minX, maxY - minY + +def searchCircularSegments(gpsData): + u"""Splits a GPS dataset to tracks that are circular and other tracks""" + + circularSegments = [] + straightSegments = [] + + for segment in gpsData: + if segment[0] == segment[len(segment) - 1]: + circularSegments.append(segment) + else: + straightSegments.append(segment) + + return circularSegments, straightSegments + +def combineSegmentPairs(gpsData): + u"""Combine segment pairs to one bigger segment""" + + combinedData = [] + + # Walk through the GPS data and search for segment pairs + # that end with the starting point of another track + while len(gpsData) > 0: + # Get one segment from the source GPS data + firstTrackData = gpsData.pop() + foundMatch = False + + # Try to find a matching segment + for i in xrange(len(gpsData)): + if firstTrackData[len(firstTrackData) - 1] == gpsData[i][0]: + # There is a matching segment, so break here + foundMatch = True + break + + if foundMatch == True: + # We found a pair of segments with one shared point, so pop the data of the second + # segment from the source GPS data and create a new segment containing all data, but + # without the overlapping point + firstTrackData.pop() + combinedData.append(firstTrackData + gpsData[i]) + gpsData.pop(i) + else: + # No segment with a shared point was found, so just append the data to the output + combinedData.append(firstTrackData) + + return searchCircularSegments(combinedData) + +def combineSegments(gpsData): + u"""Combine all segments of a GPS dataset that can be combined""" + + # Search for circular segments. We can't combine them with any other segment. + circularSegments, remainingSegments = searchCircularSegments(gpsData) + + # Search for segments that can be combined + while True: + # Look how many tracks we have now + segmentsBefore = len(remainingSegments) + + # Search for segments that can be combined + newCircularSegments, remainingSegments = combineSegmentPairs(remainingSegments) + + # Add newly found circular segments to processedSegments -- they can't be used anymore + circularSegments = circularSegments + newCircularSegments + + if segmentsBefore == len(remainingSegments): + # combineSegmentPairs() did not reduce the number of tracks anymore, + # so we can't combine more tracks and can stop here + break + + return circularSegments + remainingSegments + +def chronologyJoinSegments(gpsData): + u"""Join all segments to a big one in the order defined by the GPX file.""" + joinedSegment = [] + for segment in gpsData: + joinedSegment += segment + return [joinedSegment] + +def scaleCoords(coord, height, scale): + u"""Return a scaled pair of coordinates""" + return coord[0] * scale, (coord[1] * -1 + height) * scale + +def generateScaledSegment(segment, height, scale): + u"""Create the coordinate part of an SVG path string from a GPS data segment""" + for coord in segment: + yield scaleCoords(coord, height, scale) + +def writeSvgData(gpsData, width, height, maxPixels, dropSinglePoints, outfile): + u"""Output the SVG data -- quick 'n' dirty, without messing around with dom stuff ;-)""" + + # Calculate the scale factor we need to fit the requested maximal output size + if width <= maxPixels and height <= maxPixels: + scale = 1 + elif width > height: + scale = maxPixels / width + else: + scale = maxPixels / height + + # Open the requested output file or map to /dev/stdout + if outfile != u'/dev/stdout': + try: + fp = open(outfile, u'w') + except IOError as error: + print (sys.stderr, u"Can't open output file: {}. Terminating.".format(error)) + sys.exit(1) + else: + fp = sys.stdout + + # Header data + fp.write( u'\n') + fp.write((u'\n')) + fp.write( u'\n'.format(__version__)) + fp.write((u'\n').format(width * scale, height * scale)) + + # Process all track segments and generate ids and path drawing commands for them + + # First, we split the data to circular and straight segments + circularSegments, straightSegments = searchCircularSegments(gpsData) + realCircularSegments = [] + singlePoints = [] + for segment in circularSegments: + # We can leave out the last point, because it's equal to the first one + segment.pop() + if len(segment) == 1: + # It's a single point + if dropSinglePoints == False: + # We want to keep single points, so add it to singlePoints + singlePoints.append(segment) + else: + realCircularSegments.append(segment) + + circularSegments = realCircularSegments + + # Draw single points if requested + if len(singlePoints) > 0: + fp.write(u'\n') + for segment in singlePoints: + x, y = scaleCoords(segment[0], height, scale) + fp.write( + u'\n'.format(x, y) + ) + fp.write(u'\n') + + # Draw all circular segments + if len(circularSegments) > 0: + fp.write(u'\n') + for segment in circularSegments: + fp.write(u'\n') + fp.write(u'\n') + + # Draw all un-closed paths + if len(straightSegments) > 0: + fp.write(u'\n') + for segment in straightSegments: + fp.write(u'\n') + fp.write(u'\n') + + # Close the XML + fp.write(u'\n') + + # Close the file if necessary + if fp != sys.stdout: + fp.close() + +def main(): + # Setup the command line argument parser + cmdArgParser = argparse.ArgumentParser( + description = u'Convert GPX formatted geodata to Scalable Vector Graphics (SVG)', + epilog = u'gpx2svg {} - http://nasauber.de/opensource/gpx2svg/'.format(__version__) + ) + cmdArgParser.add_argument( + u'i', metavar = u'FILE', nargs = u'?', default = u'/dev/stdin', + help = u'GPX input file (default: read from STDIN)' + ) + cmdArgParser.add_argument( + u'--o', metavar = u'FILE', nargs = u'?', default = u'/dev/stdout', + help = u'SVG output file (default: write to STDOUT)' + ) + cmdArgParser.add_argument( + u'--m', metavar = u'PIXELS', nargs = u'?', type = int, default = 3000, + help = u'Maximum width or height of the SVG output in pixels (default: 3000)' + ) + cmdArgParser.add_argument( + u'--d', + help = u'Drop single points (default: draw a circle with 1px diameter)' + ) + cmdArgParser.add_argument( + u'--r', + help = (u'"Raw" conversion: Create one SVG path per track segment, don\'t try to combine ' + u'paths that end with the starting point of another path') + ) + cmdArgParser.add_argument( + u'--j', + help = (u'Join all segments to a big one in the order of the GPX file. This can create an ' + u'un-scattered path if the default combining algorithm does not work because there ' + u'are no matching points across segments (implies -r)') + ) + cmdArgParser.add_argument( + u'--tab', + help = (u'inkscape option') + ) + + + # Get the given arguments + cmdArgs = cmdArgParser.parse_args() + + # Map "-" to STDIN or STDOUT + if cmdArgs.i == u'-': + cmdArgs.i = u'/dev/stdin' + if cmdArgs.o == u'-': + cmdArgs.o = u'/dev/stdout' + + # Check if a given input or output file name is a relative representation of STDIN or STDOUT + if cmdArgs.i != u'/dev/stdin': + if abspath(cmdArgs.i) == u'/dev/stdin': + cmdArgs.i = u'/dev/stdin' + if cmdArgs.o != u'/dev/stdout': + if abspath(cmdArgs.o) == u'/dev/stdout': + cmdArgs.o = u'/dev/stdout' + + # Get the latitude and longitude data from the given GPX file or STDIN + gpsData = parseGpx(cmdArgs.i) + + # Check if we actually _have_ data + if gpsData == []: + print (sys.stderr, u'No data to convert. Terminating.') + sys.exit(1) + + # Join all segments if requested by "-j" + if bool(cmdArgs.j): + gpsData = chronologyJoinSegments(gpsData) + + # Try to combine all track segments that can be combined if not requested otherwise + # Don't execute if all segments are already joined with "-j" + if not bool(cmdArgs.r) and not bool(cmdArgs.j): + gpsData = combineSegments(gpsData) + + # Calculate a plane projection for a GPS dataset + # At the moment, we only have the Mercator projection + gpsData = calcProjection(gpsData) + + # Move the projected data to the 0,0 origin of a cartesial coordinate system + # and get the raw width and height of the resulting vector data + gpsData, width, height = moveProjectedData(gpsData) + + # Write the resulting SVG data to the requested output file or STDOUT + writeSvgData(gpsData, width, height, cmdArgs.m, bool(cmdArgs.d), cmdArgs.o) + +if __name__ == u'__main__': + main() diff --git a/extensions/fablabchemnitz/gradient_saver/GUI.glade b/extensions/fablabchemnitz/gradient_saver/GUI.glade new file mode 100644 index 00000000..e8cf6c39 --- /dev/null +++ b/extensions/fablabchemnitz/gradient_saver/GUI.glade @@ -0,0 +1,667 @@ + + + + + + False + Gradient Saver + False + center + 600 + 400 + icon.svg + north + + + + + + + True + True + + + + True + False + 400 + 250 + + + 600 + 180 + True + True + + + True + False + none + + + True + False + 30 + 10 + 2 + vertical + 20 + + + True + False + 10 + 18 + + + 150 + 42 + True + True + False + + + False + True + 0 + + + + + 325 + 42 + True + True + 25 + e.g Beautiful Color + + + False + True + 1 + + + + + False + False + 1 + + + + + + + + + 130 + + + + + 580 + 32 + True + False + 20 + 10 + end + + + Cancel + True + True + True + + + + True + True + 0 + + + + + Save + True + True + True + + + + True + True + 1 + + + + + 318 + + + + + 600 + 100 + True + False + 10 + top + + + 55 + True + False + 30 + 21 + gtk-info + 6 + + + False + True + 0 + + + + + 250 + True + False + 30 + 14 + <b>Hint:</b> +Select at least one object that use gradient color in order to add those gradient to your library. Selected gradient object will appear below. You can give a name for your gradients to help you recoginize it later. + True + True + + + False + True + 1 + + + + + + + 550 + 20 + True + False + 45 + 50 + 10 + 100 + + + True + False + <b>Preview</b> + True + + + False + True + 0 + + + + + True + False + <b>Gradient Name</b> + True + + + False + True + 1 + + + + + 100 + + + + + + + True + False + Add New + + + False + + + + + True + False + + + 580 + 32 + True + False + 20 + 6 + bottom + end + + + Remove + True + True + True + True + + + + True + True + 0 + + + + + Load + True + True + True + True + + + + True + True + 1 + + + + + 318 + + + + + 600 + 100 + True + False + 10 + top + + + 55 + True + False + 30 + 21 + gtk-info + 6 + + + False + True + 0 + + + + + 250 + True + False + 30 + 14 + <b>Hint:</b> +Select at least one object that use gradient color in order to add those gradient to your library. Selected gradient object will appear below. You can give a name for your gradients to help you recoginize it later. + True + True + + + False + True + 1 + + + + + + + 550 + 20 + True + False + 45 + 50 + 10 + 100 + + + True + False + <b>Your Current Gradient</b> + True + + + False + True + 0 + + + + + 100 + + + + + 600 + 180 + True + True + + + True + False + none + + + True + False + start + 10 + 10 + 30 + 10 + 2 + 2 + none + False + + + 60 + 42 + True + True + start + start + + + True + False + 5 + top + + + 42 + True + True + False + True + + + False + True + 0 + + + + + 100 + 42 + True + True + False + + + False + True + 1 + + + + + 42 + True + False + ijo trans + True + char + 25 + + + False + True + 2 + + + + + + + + + + + + + 130 + + + + + 1 + + + + + True + False + Load or Remove + + + 1 + False + + + + + True + False + + + 317 + 300 + True + False + <span font="12"><b>Version $VERSION</b></span> + True + True + + + 137 + -84 + + + + + 100 + 80 + True + False + icon.svg + + + 10 + 32 + + + + + 100 + 80 + True + False + <span font="12"><b>Gradient Saver</b></span> + True + + + 69 + 225 + + + + + 307 + 80 + True + False + <span>Gradient Saver is an extension for Inkscape that will help you to organize your favorite gradients. This extension created with love by <a href="#">Sofyan</a> &amp; <a href="https://raniaamina.id">Rania Amina</a> and fully supported by Gimpscape ID Community. + +Project Repository: +<a href="#"><b>https://github.com/artemtech/inkscape-gradient-saver</b></a></span> + True + True + + + 243 + 82 + + + + + 580 + 32 + True + False + 20 + 10 + end + + + Close + True + True + True + + + + True + True + 1 + + + + + 318 + + + + + 2 + + + + + True + False + About + + + 2 + False + + + + + + + False + Information + dialog-information + dialog + window + + + + + + False + 10 + 10 + 10 + 10 + vertical + 2 + + + False + 10 + 10 + center + + + Close + True + True + True + + + + True + True + 0 + + + + + False + False + 0 + + + + + True + False + + + 55 + True + False + gtk-info + 6 + + + False + True + 0 + + + + + True + False + label + + + False + True + 1 + + + + + False + True + 1 + + + + + + diff --git a/extensions/fablabchemnitz/gradient_saver/gradient_saver.inx b/extensions/fablabchemnitz/gradient_saver/gradient_saver.inx new file mode 100644 index 00000000..0a68851d --- /dev/null +++ b/extensions/fablabchemnitz/gradient_saver/gradient_saver.inx @@ -0,0 +1,16 @@ + + + Gradient Saver + fablabchemnitz.de.gradient_saver + + all + + + + + + + + diff --git a/extensions/fablabchemnitz/gradient_saver/gradient_saver.py b/extensions/fablabchemnitz/gradient_saver/gradient_saver.py new file mode 100644 index 00000000..6f8a2eff --- /dev/null +++ b/extensions/fablabchemnitz/gradient_saver/gradient_saver.py @@ -0,0 +1,385 @@ +#! /usr/bin/env python3 + +# OS modules +import os +import sys + +import gi +gi.require_version("Gtk", "3.0") +from gi.repository import Gtk + +# inkscape extension files +import cairo +from lxml import etree +import inkex # required +from inkex.utils import NSS +from inkex.utils import errormsg as show_errormsg +from inkex.styles import Style +from inkex.colors import Color + +__version__ = '1.0.0' + +saved_gradient_path = "../my-gradients.svg" + +def create_new_file(gradient_data): + root = etree.Element("svg", nsmap=NSS) + def_tree = etree.SubElement(root, "defs") + for i, item in enumerate(gradient_data): + gradient = etree.SubElement(def_tree, item.tag, attrib=item.attrib) + for j, gradient_stop in enumerate(item): + etree.SubElement(gradient, gradient_stop.tag, attrib=gradient_stop.attrib, id="stop%d%d" % (i, j)) + with open(saved_gradient_path, "w") as f: + f.write(etree.tostring( + root, encoding="utf-8", xml_declaration=True, pretty_print=True).decode("utf-8")) + +def save_to_file(data): + """ Wrapper for saving gradients to file. """ + if len(data) == 0: + return 1 + else: + try: + # read previous data then append it with current data + if os.path.exists(saved_gradient_path): + previous_data = load_gradients_from_file() + data = previous_data + data + create_new_file(data) + return 0 + except Exception as e: + import traceback + show_errormsg(e) + show_errormsg(traceback.print_exc()) + return -1 + +def load_gradients_from_file(): + """ Load gradients from saved gradient, returned as List """ + if os.path.exists(saved_gradient_path) and os.stat(saved_gradient_path).st_size != 0: + root = etree.parse(saved_gradient_path) + mygradients = root.xpath("//linearGradient", namespaces=NSS) + else: + mygradients = [] + return mygradients + +def read_stop_gradient(gradient): + stop_data = { + "id": gradient.attrib.get("id"), + "stops": [] + } + for stop in gradient: + offset = stop.attrib.get("offset") + style = Style(Style.parse_str(stop.attrib['style'])) + color = Color.parse_str(style.get("stop-color"))[1] + opacity = style.get("stop-opacity") + stop_data.get("stops").append( + tuple([float(offset)] + [x/256.0 for x in color] + [float(opacity)])) + return stop_data + +class MainWindow(Gtk.Builder): + def __init__(self, gradientSaver): + Gtk.Builder.__init__(self) + self.gradientSaver = gradientSaver + self.add_from_file("GUI.glade") + self.window = self.get_object("window") + self.app_version = self.get_object("extension_version") + self.app_version.set_label(self.app_version.get_label().replace("$VERSION",__version__)) + self.information_dialog = self.get_object("information_dialog") + # parsing components + # save gradient components + self.save_container = self.get_object("save_gradients_container") + save_template = self.get_object("save_gradient1") + self.save_container.remove(save_template) + for idx, item in enumerate(self.gradientSaver.doc_selected_gradients): + new_save_template = self.SaveGradientTemplate(item) + new_save_template.set_name("gradient%d" % idx) + self.save_container.add(new_save_template) + self.save_container.show_all() + # - end save gradient components + # load gradient components + self.load_container = self.get_object("load_gradients_container") + load_template = self.get_object("load_gradient1") + self.load_container.remove(load_template) + # - end load gradient components + # show the GUI + self.connect_signals(self.Handler(self)) + self.window.show() + + class SaveGradientTemplate(Gtk.HBox): + """ + Template for generating gradient name + and preview of selected object in the save page. + """ + + def __init__(self, gradient_data): + Gtk.HBox.__init__(self) + self.gradient_data = gradient_data + self.set_spacing(20) + preview = Gtk.DrawingArea() + preview.set_size_request(150, 42) + preview.set_app_paintable(True) + preview.connect("draw", self.on_draw, gradient_data) + self.pack_start(preview, False, True, 0) + self.input_entry = Gtk.Entry() + self.input_entry.set_placeholder_text("e.g Beautiful Color") + self.input_entry.set_size_request(250, 42) + self.input_entry.set_text(gradient_data.get("id")) + self.input_entry.set_max_length(25) + self.pack_start(self.input_entry, False, True, 1) + + def on_draw(self, wid, cr, data): + """ + Calllback for draw signal for rendering gradient. + params: + - wid :GtkWidget + - cr :Cairo + - data :list -> gradient data + """ + lg = cairo.LinearGradient(0.0, 20.0, 150.0, 20.0) + for stop in data["stops"]: + lg.add_color_stop_rgba( + stop[0], stop[1], stop[2], stop[3], stop[4]) + cr.rectangle(10.0, 0.0, 150.0, 42.0) + cr.set_source(lg) + cr.fill() + + def get_save_gradient_text(self): + return self.input_entry.get_text() + + def get_compiled_gradient(self, new_id): + # compiling gradient stops + root = etree.Element("linearGradient", id=new_id) + for idx, stop in enumerate(self.gradient_data["stops"]): + stop_id = self.get_name() + str(idx) + offset = stop[0] + color = Color([stop[1], stop[2], stop[3]],"rgb") + opacity = stop[4] + tmp_stops = { + "id": stop_id, + "offset": str(offset), + "style": Style({ + "stop-color": str(color), + "stop-opacity": str(opacity) + }).to_str() + } + current_stop = etree.SubElement(root, "stop", attrib=tmp_stops) + return root + + class LoadGradientTemplate(Gtk.FlowBoxChild): + """ + Template for generating gradient name + and preview of saved gradient in the load page. + """ + def __init__(self, gradient_data): + Gtk.FlowBoxChild.__init__(self) + self.gradient_data = gradient_data + self.set_size_request(60,32) + self.set_halign(Gtk.Align.START) + self.set_valign(Gtk.Align.START) + container = Gtk.HBox() + container.set_spacing(5) + container.set_baseline_position(Gtk.BaselinePosition.TOP) + self.checkbox = Gtk.CheckButton() + self.checkbox.draw_indicator = True + container.pack_start(self.checkbox,False,True,0) + preview = Gtk.DrawingArea() + preview.set_size_request(100, 32) + preview.set_app_paintable(True) + preview.connect("draw", self.on_draw, gradient_data) + container.pack_start(preview,False,True,0) + self.text_gradient = Gtk.Label() + self.text_gradient.set_text(gradient_data.get("id")) + self.text_gradient.set_line_wrap(True) + self.text_gradient.set_line_wrap_mode(1) + self.text_gradient.set_max_width_chars(25) + container.pack_start(self.text_gradient,False,True,0) + self.add(container) + + def on_draw(self, wid, cr, data): + """ + Calllback for draw signal for rendering gradient. + params: + - wid :GtkWidget + - cr :Cairo + - data :list -> gradient data + """ + lg = cairo.LinearGradient(0.0, 20.0, 100.0, 20.0) + for stop in data["stops"]: + lg.add_color_stop_rgba( + stop[0], stop[1], stop[2], stop[3], stop[4]) + cr.rectangle(10.0, 0.0, 110.0, 32.0) + cr.set_source(lg) + cr.fill() + + class Handler: + """ Signal Handler for GUI """ + + def __init__(self, main_window): + self.main_window = main_window + + def onDestroy(self, *args): + Gtk.main_quit() + + def onSwitchPage(self, notebook, page, page_num): + if page_num == 0: # save tab + pass + elif page_num == 1: # load/remove tab + self.main_window.gradients_to_load = [] + for children in self.main_window.load_container.get_children(): + self.main_window.load_container.remove(children) + loaded_gradients = load_gradients_from_file() + # TODO render with disabled checkbox if it already exists in current project doc + for idx,gradient in enumerate(loaded_gradients): + # parse gradient stops + stop_data = read_stop_gradient(gradient) + gradient_info = self.main_window.LoadGradientTemplate(stop_data) + gradient_info.checkbox.connect("toggled",self.onLoadGradientToggled, gradient) + gradient_info.set_name("gradient%d" % idx) + self.main_window.load_container.add(gradient_info) + self.main_window.load_container.show_all() + else: + pass + + def onSaveGradientClicked(self, button): + text = "" + gradient_to_save = [] + # get all gradient data in save_container + for item in self.main_window.save_container.get_children(): + # get new gradient name + new_name_gradient = item.get_save_gradient_text() + # strip all special chars + if not new_name_gradient.isalnum(): + new_name_gradient = ''.join(e for e in new_name_gradient if e.isalnum()) + # get gradient data + gradient_data = item.get_compiled_gradient(new_name_gradient) + text += "{0}\n-----\n".format(etree.tostring(gradient_data)) + gradient_to_save.append(gradient_data) + # save to file + status = save_to_file(gradient_to_save) + if status == 0: + info = "%d gradients saved successfully!" % len(gradient_to_save) + # reload current document info with saved gradients + self.main_window.gradientSaver.reload_current_gradients(gradient_to_save) + elif status == 1: + info = "Nothing to save, there is no object with gradient selected. Exiting..." + elif status == -1: + info = "Internal Error (-1)! " + # showing popup information + self.main_window.get_object("information_text").set_text(info) + self.main_window.information_dialog.set_title("Save Gradient Information") + self.main_window.information_dialog.show_all() + + def onLoadGradientToggled(self, togglebutton, gradient): + # if active, queue gradient, otherwise pop it + if togglebutton.get_active(): + self.main_window.gradients_to_load.append(gradient) + else: + self.main_window.gradients_to_load.remove(gradient) + + def onLoadGradientClicked(self, button): + if len(self.main_window.gradients_to_load) > 0: + self.main_window.gradientSaver.insert_new_gradients_to_current_doc(self.main_window.gradients_to_load) + teks = "Successfully loading these gradients:\n" + teks += "".join(["- "+gradient.attrib["id"]+"\n" for gradient in self.main_window.gradients_to_load]) + else: + teks = "No gradient(s) selected to load. Exiting..." + self.main_window.get_object("information_text").set_text(teks) + self.main_window.information_dialog.set_title("Load Gradient Information") + self.main_window.information_dialog.show_all() + + def onRemoveGradientClicked(self, button): + loaded_gradients = load_gradients_from_file() + if len(self.main_window.gradients_to_load) > 0: + gradient_to_remove = [gradient.attrib["id"] for gradient in self.main_window.gradients_to_load] + new_gradient_after = [gradient for gradient in loaded_gradients if gradient.attrib["id"] not in gradient_to_remove] + create_new_file(new_gradient_after) + teks = "Successfully removing these gradients:\n" + teks += "".join(["- "+gradient+"\n" for gradient in gradient_to_remove]) + else: + teks = "No gradient(s) selected to load. Exiting..." + self.main_window.get_object("information_text").set_text(teks) + self.main_window.information_dialog.set_title("Remove Gradient Information") + self.main_window.information_dialog.show_all() + + +class GradientSaver(inkex.Effect): + def __init__(self): + " define how the options are mapped from the inx file " + inkex.Effect.__init__(self) # initialize the super class + try: + self.tty = open("/dev/tty", 'w') + except: + self.tty = open(os.devnull, 'w') + self.doc_selected_gradients = [] + + def insert_new_gradients_to_current_doc(self, gradients): + defs_node = self.svg.getElement("//svg:defs") + for item in gradients: + gradient = etree.SubElement(defs_node,item.tag,attrib=item.attrib) + for stop in item: + etree.SubElement(gradient,stop.tag,attrib=stop.attrib) + + def reload_current_gradients(self, new_data): + " reload gradients information in current project with stored gradient " + for idx,gradient in enumerate(self.doc_selected_gradients): + # set old gradient id to new id + real_node = self.svg.getElement("//*[@id='%s']" % gradient["id"]) + # remove inkscape collect first + real_node.attrib.pop("{"+NSS["inkscape"]+"}collect", None) + real_node.attrib["id"] = new_data[idx].attrib["id"] + # set old xlink:href to new id + node_href = self.svg.getElement("//*[@xlink:href='#%s']" % gradient["id"]) + node_href.attrib["{"+NSS["xlink"]+"}href"] = "#"+new_data[idx].attrib["id"] + # last set up inkscape collect again + real_node.attrib["{"+NSS["inkscape"]+"}collect"] = "always" + + def get_all_doc_gradients(self): + """TODO + retrieve all gradient sources of current project document + """ + pass + + def get_selected_gradients_data(self): + selected_objects = self.svg.selected + gradient_list = [] + if len(selected_objects) > 0: + for item in selected_objects.values(): + style = Style(Style.parse_str(item.get('style'))) + fill = stroke = "None" + if style.get("fill"): + fill = style.get("fill")[5:-1] if "url" in style.get("fill") else "None" + if style.get("stroke"): + stroke = style("stroke")[5:-1] if "url" in style.get("stroke") else "None" + if fill == "None" and stroke == "None": + continue + # read fill data + if "radialGradient" in fill or "linearGradient" in fill: + real_fill = self.svg.getElementById(fill).attrib["{"+NSS["xlink"]+"}href"][1:] + real_fill_node = self.svg.getElementById(real_fill) + if real_fill_node not in gradient_list: + gradient_list.append(real_fill_node) + # read stroke data + if "radialGradient" in stroke or "linearGradient" in stroke: + real_stroke = self.svg.getElementById(stroke).attrib["{"+NSS["xlink"]+"}href"][1:] + real_stroke_node = self.svg.getElementById(real_stroke) + if real_stroke_node not in gradient_list: + gradient_list.append(real_stroke_node) + data = [] + # read gradients data + for gradient in gradient_list: + # parse gradient stops + stop_data = read_stop_gradient(gradient) + data.append(stop_data) + return data + + # called when the extension is running. + def effect(self): + self.doc_selected_gradients = self.get_selected_gradients_data() + try: + app = MainWindow(self) + Gtk.main() + except Exception as e: + import traceback + show_errormsg(e) + show_errormsg(traceback.print_exc()) + + +if __name__ == '__main__': + GradientSaver().run() diff --git a/extensions/fablabchemnitz/gradient_saver/icon.svg b/extensions/fablabchemnitz/gradient_saver/icon.svg new file mode 100644 index 00000000..1ef42700 --- /dev/null +++ b/extensions/fablabchemnitz/gradient_saver/icon.svg @@ -0,0 +1,678 @@ + + + + + Gradient Saver Icon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Gradient Saver Icon + + + Hadiid Pratama + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extensions/fablabchemnitz/grid_strip_creator/grid_strip_creator.inx b/extensions/fablabchemnitz/grid_strip_creator/grid_strip_creator.inx new file mode 100644 index 00000000..f5186209 --- /dev/null +++ b/extensions/fablabchemnitz/grid_strip_creator/grid_strip_creator.inx @@ -0,0 +1,32 @@ + + + Grid Strip Creator (qlocktwo) + fablabchemnitz.de.grid_strip_creator + 230.0 + 20.0 + 11 + 10 + false + 12.5 + 12.5 + 1.0 + 10.0 + false + false + + 3.0 + false + false + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/grid_strip_creator/grid_strip_creator.py b/extensions/fablabchemnitz/grid_strip_creator/grid_strip_creator.py new file mode 100644 index 00000000..eccabfab --- /dev/null +++ b/extensions/fablabchemnitz/grid_strip_creator/grid_strip_creator.py @@ -0,0 +1,345 @@ +#!/usr/bin/env python3 +''' +Grid Strip Creator v1.0 (30/11/2014) + + +Copyright (C) 2014 Thomas Gebert - tsgebert **AT** web.de + +## This basic extension allows you to automatically draw guides in inkscape for hexagons. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +''' + +import inkex +from xml.etree import ElementTree as ET +from lxml import etree + +def printDebug(string): + inkex.errormsg(string) + +class GridStripCreator(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument('--length', type = float, default = 230.0, help = 'Length of strip') + pars.add_argument('--width', type = float, default = 20.0, help = 'Width of strip') + pars.add_argument('--cellheight', type = float, default = 12.5, help = 'height of cell') + pars.add_argument('--cellwidth', type = float, default = 12.5, help = 'Width of cell') + pars.add_argument('--scalecells', type = inkex.Boolean, default = False, help = 'Scale cells over length') + pars.add_argument('--cellnumx', type = int, default = 11, help = 'Number of cells x') + pars.add_argument('--cellnumy', type = int, default = 10, help = 'Number of cells y') + pars.add_argument('--notchdepth', type = float, default = 1.0, help = 'Depth of notch') + pars.add_argument('--notchwidth', type = float, default = 10.0, help = 'Width of notch') + pars.add_argument('--notchhorizontal', type = inkex.Boolean, default = False, help = 'Make notches on horizontal strip') + pars.add_argument('--notchvertical', type = inkex.Boolean, default = False, help = 'Make notches on vertical strip') + pars.add_argument('--notch2width', type = float, default = 3.0, help = 'Width of notch') + pars.add_argument('--notchxcorner', type = inkex.Boolean, default = False, help = 'Make notches on corner of horizontal strip') + pars.add_argument('--notchycorner', type = inkex.Boolean, default = False, help = 'Make notches on corner of vertical strip') + + def effect(self): + # Get access to main SVG document element and get its dimensions. + svg = self.document.getroot() + # getting the parent tag of the guide + nv = self.document.xpath('/svg:svg/sodipodi:namedview',namespaces=inkex.NSS)[0] + + documentUnits = inkex.addNS('document-units', 'inkscape') + # inkex.utils.debug(nv.get(documentUnits)) + uunits = nv.get(documentUnits) + message="Units="+uunits + # inkex.utils.debug(message) + + # Get script's options value. + stripwidth=self.svg.unittouu(str(self.options.width)+uunits) + striplength=self.svg.unittouu(str(self.options.length)+uunits) + + cellheight=self.svg.unittouu(str(self.options.cellheight)+uunits) + cellwidth=self.svg.unittouu(str(self.options.cellwidth)+uunits) + + scalecells=(self.options.scalecells) + + cellnumx=(self.options.cellnumx) + cellnumy=(self.options.cellnumy) + + notchdepth=self.svg.unittouu(str(self.options.notchdepth)+uunits) + notchwidth=self.svg.unittouu(str(self.options.notchwidth)+uunits) + + notchhorizontal=(self.options.notchhorizontal) + notchvertical=(self.options.notchvertical) + +# notch2depth=self.svg.unittouu(str(self.options.notch2depth)+uunits) + notch2width=self.svg.unittouu(str(self.options.notch2width)+uunits) + + notch2depth= stripwidth/2 + + notchxcorner=(self.options.notchxcorner) + notchycorner=(self.options.notchycorner) + + if scalecells: + cellwidth=(striplength-4*notch2width)/cellnumx + cellheight=(striplength-4*notch2width)/cellnumy + notchxcorner=False + notchycorner=False + + linewidth=self.svg.unittouu(str(0.2)+uunits) + + distx=(striplength-cellnumx*cellwidth)/2 + disty=(striplength-cellnumy*cellheight)/2 + + celldistx=(cellwidth-notchwidth)/2 + celldisty=(cellheight-notch2width)/2 + + # getting the width and height attributes of the canvas + width = float(self.svg.unittouu(svg.attrib['width'])) + height = float(self.svg.unittouu(svg.attrib['height'])) + + parent = self.svg.get_current_layer() + layername='' + if notchhorizontal: + layername=layername+'VLED ' + if notchvertical: + layername=layername+'HLED ' + + # Create a new layer + layer = etree.SubElement(svg,'g') + layer.set(inkex.addNS('label', 'inkscape'),layername+'Long strips') + layer.set(inkex.addNS('groupmode','inkscape'), 'layer') + + + grp_name = 'group_horizontal_strip_long' + grp_attribs = {inkex.addNS('label','inkscape'):grp_name} + grp = etree.SubElement(layer, 'g', grp_attribs) #the group to put everything in + + style = { 'stroke': '#000000', 'stroke-width':str(linewidth), 'fill': 'none' } + + for num in range(0,2): + pathstring='M '+str(1)+','+str(1)+' L ' + if notchxcorner: + pathstring+=str(stripwidth-2*notchdepth)+','+str(1) # Obere Querkante + pathstring+=' L '+str(stripwidth-2*notchdepth)+','+str(notchwidth) # Erste Kerbe aussen + pathstring+=' L '+str(stripwidth)+','+str(notchwidth) # Ausrueckung + else: + pathstring+=str(stripwidth)+','+str(1) + if notchhorizontal: + pathstring+=' L '+str(stripwidth)+','+str(distx) # Distance to corner + y=distx + for i in range(0,cellnumx): + pathstring+=' L '+str(stripwidth)+','+str(y+celldistx) # Abstand + pathstring+=' L '+str(stripwidth-notchdepth)+','+str(y+celldistx) # Einrueckung + pathstring+=' L '+str(stripwidth-notchdepth)+','+str(y+celldistx+notchwidth) # Kerbe + pathstring+=' L '+str(stripwidth)+','+str(y+celldistx+notchwidth) # Ausrueckung + pathstring+=' L '+str(stripwidth)+','+str(y+2*celldistx+notchwidth) # Abstand + y=y+2*celldistx+notchwidth + if notchxcorner: + pathstring+=' L '+str(stripwidth)+','+str(striplength-notchwidth) # Untere rechte Ecke + pathstring+=' L '+str(stripwidth-2*notchdepth)+','+str(striplength-notchwidth) # Untere rechte Ecke + pathstring+=' L '+str(stripwidth-2*notchdepth)+','+str(striplength) # Untere rechte Ecke + else: + pathstring+=' L '+str(stripwidth)+','+str(striplength) + pathstring+=' L '+str(1)+','+str(striplength) # Linke untere Ecke + + + + y=striplength-distx+notch2width/2 + + pathstring+=' L '+str(1)+','+str(y) # Distance to corner + pathstring+=' L '+str(notch2depth)+','+str(y) # Einrueckung + + + for i in range(0,cellnumx): + pathstring+=' L '+str(notch2depth)+','+str(y-notch2width) # Kerbe + pathstring+=' L '+str(1)+','+str(y-notch2width) # Ausrueckung + pathstring+=' L '+str(1)+','+str(y-notch2width-cellwidth+notch2width) # Abstand + pathstring+=' L '+str(notch2depth)+','+str(y-notch2width-cellwidth+notch2width) # Einrueckung + y=y-notch2width-cellwidth+notch2width + + pathstring+=' L '+str(notch2depth)+','+str(y-notch2width) # Kerbe + pathstring+=' L '+str(1)+','+str(y-notch2width) # Ausrueckung + + pathstring+=' L '+str(1)+','+str(1)+' z' + + strip_transform= 'rotate(' + str(90)+')' + strip_transform+=' translate('+str(stripwidth*num)+','+str(1)+')' + strip_attribs = {'style':str(inkex.Style(style)), + inkex.addNS('label','inkscape'):"strip horizontal long", + 'transform': strip_transform, + 'd':pathstring} + etree.SubElement(grp, inkex.addNS('path','svg'), strip_attribs ) + + + celldisty=(cellheight-notch2width-notchwidth)/2 + + grp_name = 'group_vertical_strip_long' + grp_attribs = {inkex.addNS('label','inkscape'):grp_name} + grp = etree.SubElement(layer, 'g', grp_attribs) #the group to put everything in + + + for num in range(0,2): + y=disty-notch2width/2 + pathstring='M '+str(1)+','+str(1) + if notchycorner: + pathstring+=' L '+str(stripwidth-2*notchdepth)+','+str(1) # Obere Querkante + pathstring+=' L '+str(stripwidth-2*notchdepth)+','+str(notchwidth) + pathstring+=' L '+str(stripwidth)+','+str(notchwidth) + else: + pathstring+=' L '+str(stripwidth)+','+str(1) + pathstring+=' L '+str(stripwidth)+','+str(y) # Distance to corner + + for i in range(0,cellnumy): + pathstring+=' L '+str(stripwidth-notch2depth)+','+str(y) # Einrueckung + pathstring+=' L '+str(stripwidth-notch2depth)+','+str(y+notch2width) # Kerbe + pathstring+=' L '+str(stripwidth)+','+str(y+notch2width) # Ausrueckung + if notchvertical: + pathstring+=' L '+str(stripwidth)+','+str(y+notch2width+celldisty) # Abstand + pathstring+=' L '+str(stripwidth-notchdepth)+','+str(y+notch2width+celldisty) # Einrueckung + pathstring+=' L '+str(stripwidth-notchdepth)+','+str(y+notch2width+celldisty+notchwidth) # Kerbe + pathstring+=' L '+str(stripwidth)+','+str(y+notch2width+celldisty+notchwidth) # Ausrueckung + pathstring+=' L '+str(stripwidth)+','+str(y+notch2width+2*celldisty+notchwidth) # Abstand + y=y+notch2width+2*celldisty+notchwidth + + + pathstring+=' L '+str(stripwidth-notch2depth)+','+str(y) # Einrueckung + pathstring+=' L '+str(stripwidth-notch2depth)+','+str(y+notch2width) # Kerbe + pathstring+=' L '+str(stripwidth)+','+str(y+notch2width) # Ausrueckung + + if notchycorner: + pathstring+=' L '+str(stripwidth)+','+str(striplength-notchwidth) # Untere rechte Ecke + pathstring+=' L '+str(stripwidth-2*notchdepth)+','+str(striplength-notchwidth) # Untere rechte Ecke + pathstring+=' L '+str(stripwidth-2*notchdepth)+','+str(striplength) # Untere rechte Ecke + else: + pathstring+=' L '+str(stripwidth)+','+str(striplength) + pathstring+=' L '+str(1)+','+str(striplength) # Linke untere Ecke + pathstring+=' L '+str(1)+','+str(1)+' z' + + strip_transform= 'translate('+str(num*stripwidth)+','+str(1)+')' + strip_attribs = {'style':str(inkex.Style(style)), + inkex.addNS('label','inkscape'):"strip vertical long", + 'transform': strip_transform, + 'd':pathstring} + etree.SubElement(grp, inkex.addNS('path','svg'), strip_attribs ) + + # Create a new layer + layer = etree.SubElement(svg,'g') + layer.set(inkex.addNS('label', 'inkscape'), layername+'Horizontal strips short') + layer.set(inkex.addNS('groupmode','inkscape'), 'layer') + + grp_name = 'group horizontal_strip_short' + grp_attribs = {inkex.addNS('label','inkscape'):grp_name} + grp = etree.SubElement(layer, 'g', grp_attribs) #the group to put everything in + striplength=cellnumx*cellwidth+4*notch2width + distx=(striplength-cellnumx*cellwidth)/2 + disty=(striplength-cellnumy*cellheight)/2 + + style = { 'stroke': '#000000', 'stroke-width':str(linewidth), 'fill': 'none' } + + for num in range(1,cellnumy): + + pathstring='M '+str(1)+','+str(1)+' L ' + pathstring+=str(stripwidth)+','+str(1) + if notchhorizontal: + pathstring+=' L '+str(stripwidth)+','+str(distx) # Distance to corner + y=distx + for i in range(0,cellnumx): + pathstring+=' L '+str(stripwidth)+','+str(y+celldistx) # Abstand + pathstring+=' L '+str(stripwidth-notchdepth)+','+str(y+celldistx) # Einrueckung + pathstring+=' L '+str(stripwidth-notchdepth)+','+str(y+celldistx+notchwidth) # Kerbe + pathstring+=' L '+str(stripwidth)+','+str(y+celldistx+notchwidth) # Ausrueckung + pathstring+=' L '+str(stripwidth)+','+str(y+2*celldistx+notchwidth) # Abstand + y=y+2*celldistx+notchwidth + pathstring+=' L '+str(stripwidth)+','+str(striplength) + pathstring+=' L '+str(1)+','+str(striplength) # Linke untere Ecke + + y=striplength-distx+notch2width/2 + + pathstring+=' L '+str(1)+','+str(y) # Distance to corner + pathstring+=' L '+str(notch2depth)+','+str(y) # Einrueckung + + for i in range(0,cellnumx): + pathstring+=' L '+str(notch2depth)+','+str(y-notch2width) # Kerbe + pathstring+=' L '+str(1)+','+str(y-notch2width) # Ausrueckung + pathstring+=' L '+str(1)+','+str(y-notch2width-cellwidth+notch2width) # Abstand + pathstring+=' L '+str(notch2depth)+','+str(y-notch2width-cellwidth+notch2width) # Einrueckung + y=y-notch2width-cellwidth+notch2width + + pathstring+=' L '+str(notch2depth)+','+str(y-notch2width) # Kerbe + pathstring+=' L '+str(1)+','+str(y-notch2width) # Ausrueckung + + pathstring+=' L '+str(1)+','+str(1)+' z' + + strip_transform='rotate(' + str(90)+')' + strip_transform+=' translate('+str((num+1)*stripwidth+2)+','+str(1)+')' + stripname="strip horizontal short"+str(num) + strip_attribs = {'style':str(inkex.Style(style)), + inkex.addNS('label','inkscape'):stripname, + 'transform': strip_transform, + 'd':pathstring} + etree.SubElement(grp, inkex.addNS('path','svg'), strip_attribs ) + + + # Create a new layer + layer = etree.SubElement(svg,'g') + layer.set(inkex.addNS('label', 'inkscape'), layername+'Vertical strips short') + layer.set(inkex.addNS('groupmode','inkscape'), 'layer') + + grp_name = 'group vertical_strip_short' + grp_attribs = {inkex.addNS('label','inkscape'):grp_name} + grp = etree.SubElement(layer, 'g', grp_attribs) #the group to put everything in + + striplength=cellnumx*cellwidth+4*notch2width + distx=(striplength-cellnumx*cellwidth)/2 + disty=(striplength-cellnumy*cellheight)/2 + + striplength=cellnumy*cellheight+4*notch2width + distx=(striplength-cellnumx*cellwidth)/2 + disty=(striplength-cellnumy*cellheight)/2 + + celldisty=(cellheight-notch2width-notchwidth)/2 + + for num in range(1,cellnumx): + y=disty-notch2width/2 + pathstring='M '+str(1)+','+str(1) + pathstring+=' L '+str(stripwidth)+','+str(1) + pathstring+=' L '+str(stripwidth)+','+str(y) # Distance to corner + + for i in range(0,cellnumy): + pathstring+=' L '+str(stripwidth-notch2depth)+','+str(y) # Einrueckung + pathstring+=' L '+str(stripwidth-notch2depth)+','+str(y+notch2width) # Kerbe + pathstring+=' L '+str(stripwidth)+','+str(y+notch2width) # Ausrueckung + if notchvertical: + pathstring+=' L '+str(stripwidth)+','+str(y+notch2width+celldisty) # Abstand + pathstring+=' L '+str(stripwidth-notchdepth)+','+str(y+notch2width+celldisty) # Einrueckung + pathstring+=' L '+str(stripwidth-notchdepth)+','+str(y+notch2width+celldisty+notchwidth) # Kerbe + pathstring+=' L '+str(stripwidth)+','+str(y+notch2width+celldisty+notchwidth) # Ausrueckung + pathstring+=' L '+str(stripwidth)+','+str(y+notch2width+2*celldisty+notchwidth) # Abstand + y=y+notch2width+2*celldisty+notchwidth + + + pathstring+=' L '+str(stripwidth-notch2depth)+','+str(y) # Einrueckung + pathstring+=' L '+str(stripwidth-notch2depth)+','+str(y+notch2width) # Kerbe + pathstring+=' L '+str(stripwidth)+','+str(y+notch2width) # Ausrueckung + + pathstring+=' L '+str(stripwidth)+','+str(striplength) + pathstring+=' L '+str(1)+','+str(striplength) # Linke untere Ecke + pathstring+=' L '+str(1)+','+str(1)+' z' + + + strip_transform= 'translate('+str((num+1)*stripwidth+10)+','+str(1)+')' + stripname="strip vertical short"+str(num) + strip_attribs = {'style':str(inkex.Style(style)), + inkex.addNS('label','inkscape'):stripname, + 'transform': strip_transform, + 'd':pathstring} + etree.SubElement(grp, inkex.addNS('path','svg'), strip_attribs ) + +if __name__ == '__main__': + GridStripCreator().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/group_to_layer/group_to_layer.inx b/extensions/fablabchemnitz/group_to_layer/group_to_layer.inx new file mode 100644 index 00000000..f05a6835 --- /dev/null +++ b/extensions/fablabchemnitz/group_to_layer/group_to_layer.inx @@ -0,0 +1,17 @@ + + + Group To Layer + fablabchemnitz.de.group_to_layer + 1 + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/group_to_layer/group_to_layer.py b/extensions/fablabchemnitz/group_to_layer/group_to_layer.py new file mode 100644 index 00000000..e677af7b --- /dev/null +++ b/extensions/fablabchemnitz/group_to_layer/group_to_layer.py @@ -0,0 +1,52 @@ +#!/usr/bin/env python3 +# Copyright (c) 2012 Stuart Pernsteiner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED +# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +import inkex + +class GroupToLayer(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument('-d', '--depth', type = int, default = 1, help = 'Convert nested group up to DEPTH layers deep') + + def effect(self): + depth = self.options.depth + self.tag_g = inkex.addNS('g', 'svg') + if len(self.svg.selected) > 0: + for node in self.svg.selected.values(): + self.convert_group(node, depth) + else: + inkex.errormsg('Please select some objects first.') + return + + def convert_group(self, node, depth): + if depth <= 0: + return + if node.tag != self.tag_g: + return + node.set(inkex.addNS('groupmode', 'inkscape'), 'layer') + for child in node: + self.convert_group(child, depth - 1) + +if __name__ == '__main__': + GroupToLayer().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/guillotine_plus/guillotine_plus.inx b/extensions/fablabchemnitz/guillotine_plus/guillotine_plus.inx new file mode 100644 index 00000000..31750db1 --- /dev/null +++ b/extensions/fablabchemnitz/guillotine_plus/guillotine_plus.inx @@ -0,0 +1,20 @@ + + + Guillotine Plus + fablabchemnitz.de.guillotine_plus + ~/ + guillotined + 300 + false + + all + + + + + + + + diff --git a/extensions/fablabchemnitz/guillotine_plus/guillotine_plus.py b/extensions/fablabchemnitz/guillotine_plus/guillotine_plus.py new file mode 100644 index 00000000..46868eeb --- /dev/null +++ b/extensions/fablabchemnitz/guillotine_plus/guillotine_plus.py @@ -0,0 +1,184 @@ +#!/usr/bin/env python3 +# +# Copyright (C) 2010 Craig Marshall, craig9 [at] gmail.com +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +""" +This script slices an inkscape drawing along the guides, similarly to +the GIMP plugin called "guillotine". It can optionally export to the +same directory as the SVG file with the same name, but with a number +suffix. e.g. + +/home/foo/drawing.svg + +will export to: + +/home/foo/drawing0.png +/home/foo/drawing1.png +/home/foo/drawing2.png +/home/foo/drawing3.png + +etc. + +""" + +import os +import locale +import inkex +from inkex.command import inkscape + +class GuillotinePlus(inkex.EffectExtension): + + """Exports slices made using guides""" + def add_arguments(self, pars): + pars.add_argument("--directory") + pars.add_argument("--image") + pars.add_argument("--ignore", type=inkex.Boolean) + pars.add_argument("--dpi", type=int) + + def get_all_horizontal_guides(self): + """ + Returns all horizontal guides as a list of floats stored as + strings. Each value is the position from 0 in pixels. + """ + for guide in self.svg.namedview.get_guides(): + if guide.is_horizontal: + yield guide.point.y + + def get_all_vertical_guides(self): + """ + Returns all vertical guides as a list of floats stored as + strings. Each value is the position from 0 in pixels. + """ + for guide in self.svg.namedview.get_guides(): + if guide.is_vertical: + yield guide.point.x + + def get_horizontal_slice_positions(self): + """ + Make a sorted list of all horizontal guide positions, + including 0 and the document height, but not including + those outside of the canvas + """ + horizontals = [0.0] + height = float(self.svg.height) + for y in self.get_all_horizontal_guides(): + if 0.0 < y <= height: + horizontals.append(y) + horizontals.append(height) + return sorted(horizontals) + + def get_vertical_slice_positions(self): + """ + Make a sorted list of all vertical guide positions, + including 0 and the document width, but not including + those outside of the canvas. + """ + verticals = [0.0] + width = float(self.svg.width) + for x in self.get_all_vertical_guides(): + if 0.0 < x <= width: + verticals.append(x) + verticals.append(width) + return sorted(verticals) + + def get_slices(self): + """ + Returns a list of all "slices" as denoted by the guides + on the page. Each slice is really just a 4 element list of + floats (stored as strings), consisting of the X and Y start + position and the X and Y end position. + """ + hs = self.get_horizontal_slice_positions() + vs = self.get_vertical_slice_positions() + slices = [] + for i in range(len(hs) - 1): + for j in range(len(vs) - 1): + slices.append([vs[j], hs[i], vs[j + 1], hs[i + 1]]) + return slices + + def get_filename_parts(self): + """ + Attempts to get directory and image as passed in by the inkscape + dialog. If the boolean ignore flag is set, then it will ignore + these settings and try to use the settings from the export + filename. + """ + + if not self.options.ignore: + if self.options.image == "" or self.options.image is None: + raise inkex.AbortExtension("Please enter an image name") + return self.options.directory, self.options.image + else: + ''' + First get the export-filename from the document, if the + document has been exported before (TODO: Will not work if it + hasn't been exported yet), then uses this to return a tuple + consisting of the directory to export to, and the filename + without extension. + ''' + try: + export_file = self.svg.get('inkscape:export-filename') + except KeyError: + raise inkex.AbortExtension( + "To use the export hints option, you " + "need to have previously exported the document. " + "Otherwise no export hints exist!") + dirname, filename = os.path.split(export_file) + filename = filename.rsplit(".", 1)[0] # Without extension + return dirname, filename + + def get_localised_string(self, name): + return locale.format_string("%.f", float(name), 0) + + def export_slice(self, sli, filename): + """ + Runs inkscape's command line interface and exports the image + slice from the 4 coordinates in s, and saves as the filename + given. + """ + coords = ":".join([self.get_localised_string(dim) for dim in sli]) + inkscape(self.options.input_file, export_dpi=self.options.dpi, export_area=coords, export_filename=filename) + + def export_slices(self, slices): + """ + Takes the slices list and passes each one with a calculated + filename/directory into export_slice. + """ + dirname, filename = self.get_filename_parts() + # Remove some crusty extensions from name template + if filename.endswith('.svg') or filename.endswith('.png'): + filename = filename.rsplit('.', 1)[0] + if '{' not in filename: + filename += '_{}' + + dirname = os.path.abspath(os.path.expanduser(os.path.expandvars(dirname or './'))) + if not os.path.isdir(dirname): + os.makedirs(dirname) + + output_files = [] + for i, slico in enumerate(slices): + fname = os.path.join(dirname, filename.format(i) + '.png') + output_files.append(fname) + self.export_slice(slico, fname) + + #self.debug("The sliced bitmaps have been saved as:" + "\n\n" + "\n".join(output_files)) + + def effect(self): + self.export_slices(self.get_slices()) + +if __name__ == '__main__': + GuillotinePlus().run() diff --git a/extensions/fablabchemnitz/guitar_fretboard/guitar_fretboard.inx b/extensions/fablabchemnitz/guitar_fretboard/guitar_fretboard.inx new file mode 100644 index 00000000..d13a8bee --- /dev/null +++ b/extensions/fablabchemnitz/guitar_fretboard/guitar_fretboard.inx @@ -0,0 +1,21 @@ + + + Guitar Fretboard + fablabchemnitz.de.guitar_fretboard + 25.00in + 43mm + 53mm + 22 + 8mm + 2mm + + all + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/guitar_fretboard/guitar_fretboard.py b/extensions/fablabchemnitz/guitar_fretboard/guitar_fretboard.py new file mode 100644 index 00000000..8625f449 --- /dev/null +++ b/extensions/fablabchemnitz/guitar_fretboard/guitar_fretboard.py @@ -0,0 +1,237 @@ +#! /usr/bin/env python +''' +MIT License + +Copyright (c) 2021 Christophe Grellier + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +''' + +__version__ = "0.1" + +import inkex +from lxml import etree + + +class Fretboard: + + def __init__(self, scale=635.0): + self.scale = scale + self.nb_frets = 24 + self.fret_width = 2.0 + self.width_nut = 43.0 + self.width_12 = 53.0 + self.extension = 8.0 + + def fret_distance_bridge(self, fret): + return self.scale / pow(2.0, (fret / 12.0)) + + def fret_distance_nut(self, fret): + return self.scale - self.fret_distance_bridge(fret) + + def fb_lenght(self): + return self.fret_distance_nut(self.nb_frets) + self.extension + + def fb_width_at(self, dist): + return self.width_nut + 2.0 * (self.width_12 - self.width_nut) * dist / self.scale + + def fret_bounds(self, fret): + distup = self.fret_distance_nut(fret) - self.fret_width / 2.0 + distdown = self.fret_distance_nut(fret) + self.fret_width / 2.0 + width_up = self.fb_width_at(distup) + width_down = self.fb_width_at(distdown) + return distup, distdown, width_up, width_down + + def svg_polyline(self, pts, closed=False): + svg = "" + for pt in pts: + svg += "L {},{} ".format(pt[0], pt[1]) + svg = "M" + svg[1:] + if closed: + svg += "Z" + return svg + + def svg_contour(self): + lfb = self.fb_lenght() + lowwidth = self.fb_width_at(lfb) + pts = [(-self.width_nut / 2.0, 0), + (self.width_nut / 2.0, 0), + (lowwidth / 2.0, lfb), + (-lowwidth / 2.0, lfb)] + return self.svg_polyline(pts, True) + + def svg_h_line(self, width, y): + pts = [(-width / 2.0, y), + (width / 2.0, y)] + return self.svg_polyline(pts) + + def svg_fret_centerline(self, fret): + dist = self.fret_distance_nut(fret) + return self.svg_h_line(self.fb_width_at(dist), dist) + + def svg_fret_contour(self, fret): + distup, distdown, width_up, width_down = self.fret_bounds(fret) + pts = [(-width_up / 2.0, distup), + (width_up / 2.0, distup), + (width_down / 2.0, distdown), + (-width_down / 2.0, distdown)] + return self.svg_polyline(pts, True) + + def svg_fret_end(self, fret, side=1.0): + distup, distdown, width_up, width_down = self.fret_bounds(fret) + return 'M {},{} C {},{} {},{} {},{} Z'.format(side * width_up / 2.0, distup, + side * width_up / 2.0 - side * self.fret_width / 2.0, distup, + side * width_down / 2.0 - side * self.fret_width / 2.0, distdown, + side * width_down / 2.0, distdown) + + def svg_fret_cross(self, fret): + upperfretpos = self.fret_distance_nut(fret - 1) + lowerfretpos = self.fret_distance_nut(fret) + markerpos = upperfretpos + (lowerfretpos - upperfretpos) / 2.0 + hline_cross_path = 'M {},{} L {},{}'.format(-self.fb_width_at(markerpos) / 2.0, markerpos, + self.fb_width_at(markerpos) / 2.0, markerpos) + vline_cross_path = ' M {},{} L {},{}'.format(0, upperfretpos, + 0, lowerfretpos) + return hline_cross_path, vline_cross_path + + +class GuitarFretboard(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument("-s", "--scale", default="25in", help="The fingerboard scalelenght") + pars.add_argument("-w", "--lnut", default="43mm", help="The fingerboard width at nut") + pars.add_argument("-x", "--l12", default="53mm", help="The fingerboard width at fret 12") + pars.add_argument("-n", "--numfret", type=int, default=22, help="Number of frets") + pars.add_argument("-e", "--fbext", default="8mm", help="Lenght of the fingerboard extension below last fret") + pars.add_argument("-f", "--fretwidth", default="2mm", help="Fret Width") + + def effect(self): + svg = self.document.getroot() + + # ************ Layer 1 Definition *************** + + layer = etree.SubElement(svg, 'g') + layer.set(inkex.addNS('label', 'inkscape'), 'Fretboard') + layer.set(inkex.addNS('groupmode', 'inkscape'), 'layer') + + # ************ Layer 2 Definition *************** + + layer2 = etree.SubElement(svg, 'g') + layer2.set(inkex.addNS('label', 'inkscape'), 'Fret positions') + layer2.set(inkex.addNS('groupmode', 'inkscape'), 'layer') + + # ************ Group Definitions *************** + + fb_id = svg.get_unique_id('fretboard') + self.box = g = etree.SubElement(layer, 'g', {'id': fb_id}) + fp_id = svg.get_unique_id('fret-positions') + self.box2 = g3 = etree.SubElement(layer2, 'g', {'id': fp_id}) + fm_id = svg.get_unique_id('fretmarkers') + self.box4 = g4 = etree.SubElement(layer2, 'g', {'id': fm_id}) + + # ************ Style Definition *************** + + fill_black_style = str(inkex.Style({'stroke': 'none', 'fill': '#222222'})) + fill_grey_style = str(inkex.Style({'stroke': 'none', 'fill': '#aaaaaa'})) + fill_lightgrey_style = str(inkex.Style({'stroke': 'none', 'fill': '#dddddd'})) + stroke_black_style = str(inkex.Style({'stroke': '#000000', 'fill': 'none'})) + stroke_red_style = str(inkex.Style({'stroke': '#ff0000', 'fill': 'none'})) + text_style = "font-family:DejaVu Sans;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;font-size:10px;" + text_attributes = {'x': '12mm', 'y': '10mm', inkex.addNS("space", "xml"): "preserve", 'style': text_style} + + text = "Scalelenght : {}\n".format(self.options.scale) + text += "Nut width : {}\n".format(self.options.lnut) + text += "12th fret width : {}\n".format(self.options.l12) + text += "Number of frets : {}\n".format(self.options.numfret) + text += "Extension below last fret : {}\n".format(self.options.fbext) + text += "Fret width : {}".format(self.options.fretwidth) + + fretboard = Fretboard(svg.unittouu(str(self.options.scale))) + fretboard.width_nut = svg.unittouu(str(self.options.lnut)) + fretboard.width_12 = svg.unittouu(str(self.options.l12)) + fretboard.extension = svg.unittouu(str(self.options.fbext)) + fretboard.nb_frets = self.options.numfret + fretboard.fret_width = svg.unittouu(str(self.options.fretwidth)) + + fb_body_path = fretboard.svg_contour() + nut_line = fretboard.svg_fret_centerline(0) + bridge_line = fretboard.svg_h_line(fretboard.fb_width_at(fretboard.scale), fretboard.scale) + + # ************ Apply style to objects *************** + + fb_body_object = {'style': fill_black_style, 'id': fb_id + '-shape', 'd': fb_body_path} + nut_line_object = {'style': stroke_black_style, 'id': 'fret-0', 'd': nut_line} + bridge_line_object = {'style': stroke_black_style, 'id': 'bridge-line', 'd': bridge_line} + + # ************ Add objects to groups *************** + + etree.SubElement(g, inkex.addNS('path', 'svg'), fb_body_object) + etree.SubElement(g, inkex.addNS('path', 'svg'), bridge_line_object) + etree.SubElement(g3, inkex.addNS('path', 'svg'), bridge_line_object) + etree.SubElement(g3, inkex.addNS('path', 'svg'), nut_line_object) + + t = etree.SubElement(layer2, inkex.addNS('text', 'svg'), text_attributes) + + text = str(text).split("\n") + y = 100 + for s in text: + span = etree.SubElement(t, inkex.addNS('tspan', 'svg'), + {'x': '12', 'y': str(y), + inkex.addNS("role", "sodipodi"): "line", }) + y += 24 + span.text = str(s) + + for index in range(1, self.options.numfret + 1): + + linefret_path = fretboard.svg_fret_centerline(index) + fretpos_id = svg.get_unique_id('fretpos-' + str(index)) + linefret_atts = {'style': stroke_black_style, 'id': fretpos_id, 'd': linefret_path} + etree.SubElement(g3, inkex.addNS('path', 'svg'), linefret_atts) + + line_path = fretboard.svg_fret_contour(index) + curve_path = fretboard.svg_fret_end(index, 1.0) + curve_path2 = fretboard.svg_fret_end(index, -1.0) + fret_id = svg.get_unique_id('fret-' + str(index)) + self.fret = g2 = etree.SubElement(self.box, 'g', {'id': fret_id}) + + fretbody_id = svg.get_unique_id('fret-' + str(index) + '-body') + fretend_id1 = svg.get_unique_id('fret-' + str(index) + '-end1') + fretend_id2 = svg.get_unique_id('fret-' + str(index) + '-end2') + + line_atts = {'style': fill_grey_style, 'id': fretbody_id, 'd': line_path} + curve_atts = {'style': fill_lightgrey_style, 'id': fretend_id1, 'd': curve_path} + curve2_atts = {'style': fill_lightgrey_style, 'id': fretend_id2, 'd': curve_path2} + + etree.SubElement(g2, inkex.addNS('path', 'svg'), line_atts) + etree.SubElement(g2, inkex.addNS('path', 'svg'), curve_atts) + etree.SubElement(g2, inkex.addNS('path', 'svg'), curve2_atts) + + # ************ Add inlay cross *************** + val = index % 12 + if val in [0, 3, 5, 7, 9]: + hline_cross_path, vline_cross_path = fretboard.svg_fret_cross(index) + fretpos_id = svg.get_unique_id('marker-cross-' + str(index)) + hline_atts = {'style': stroke_red_style, 'id': fretpos_id, 'd': hline_cross_path} + vline_atts = {'style': stroke_red_style, 'id': fretpos_id, 'd': vline_cross_path} + etree.SubElement(g4, inkex.addNS('path', 'svg'), hline_atts) + etree.SubElement(g4, inkex.addNS('path', 'svg'), vline_atts) + + +if __name__ == '__main__': + GuitarFretboard().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/hatch_fill/hatch_fill.inx b/extensions/fablabchemnitz/hatch_fill/hatch_fill.inx new file mode 100644 index 00000000..174e969e --- /dev/null +++ b/extensions/fablabchemnitz/hatch_fill/hatch_fill.inx @@ -0,0 +1,47 @@ + + + Hatch Fill + fablabchemnitz.de.hatch_fill + + + + 3.0 + 45 + false + true + 3.0 + true + 1.0 + 3.0 + + + + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/hatch_fill/hatch_fill.py b/extensions/fablabchemnitz/hatch_fill/hatch_fill.py new file mode 100644 index 00000000..0bf3f4fb --- /dev/null +++ b/extensions/fablabchemnitz/hatch_fill/hatch_fill.py @@ -0,0 +1,2253 @@ +#!/usr/bin/env python3 +# coding=utf-8 +# HatchFill.py +# +# Generate hatch fills for the closed paths (polygons) in the currently +# selected document elements. If no elements are selected, then all the +# polygons throughout the document are hatched. The fill rule is an odd/even +# rule: odd numbered intersections (1, 3, 5, etc.) are a hatch line entering +# a polygon while even numbered intersections (2, 4, 6, etc.) are the same +# hatch line exiting the polygon. +# +# This extension first decomposes the selected , , , +# , , , and elements into individual +# moveto and lineto coordinates using the same procedure that eggbot.py uses +# for plotting. These coordinates are then used to build vertex lists. +# Only the vertex lists corresponding to polygons (closed paths) are +# kept. Note that a single graphical element may be composed of several +# subpaths, each subpath potentially a polygon. +# +# Once the lists of all the vertices are built, potential hatch lines are +# "projected" through the bounding box containing all of the vertices. +# For each potential hatch line, all intersections with all the polygon +# edges are determined. These intersections are stored as decimal fractions +# indicating where along the length of the hatch line the intersection +# occurs. These values will always be in the range [0, 1]. A value of 0 +# indicates that the intersection is at the start of the hatch line, a value +# of 0.5 midway, and a value of 1 at the end of the hatch line. +# +# For a given hatch line, all the fractional values are sorted and any +# duplicates removed. Duplicates occur, for instance, when the hatch +# line passes through a polygon vertex and thus intersects two edges +# segments of the polygon: the end of one edge and the start of +# another. +# +# Once sorted and duplicates removed, an odd/even rule is applied to +# determine which segments of the potential hatch line are within +# polygons. These segments found to be within polygons are then saved +# and become the hatch fill lines which will be drawn. +# +# With each saved hatch fill line, information about which SVG graphical +# element it is within is saved. This way, the hatch fill lines can +# later be grouped with the element they are associated with. This makes +# it possible to manipulate the two -- graphical element and hatch lines -- +# as a single object within Inkscape. +# +# Note: we also save the transformation matrix for each graphical element. +# That way, when we group the hatch fills with the element they are +# filling, we can invert the transformation. That is, in order to compute +# the hatch fills, we first have had apply ALL applicable transforms to +# all the graphical elements. We need to do that so that we know where in +# the drawing each of the graphical elements are relative to one another. +# However, this means that the hatch lines have been computed in a setting +# where no further transforms are needed. If we then put these hatch lines +# into the same groups as the elements being hatched in the ORIGINAL +# drawing, then the hatch lines will have transforms applied again. So, +# once we compute the hatch lines, we need to invert the transforms of +# the group they will be placed in and apply this inverse transform to the +# hatch lines. Hence the need to save the transform matrix for every +# graphical element. +# Written by Daniel C. Newman for the Eggbot Project +# dan dot newman at mtbaldy dot us +# Updated by Windell H. Oskay, 6/14/2012 +# Added tolerance parameter +# Update by Daniel C. Newman, 6/20/2012 +# Add min span/gap width +# Updated by Windell H. Oskay, 1/8/2016 +# Added live preview and correct issue with nonzero min gap +# https://github.com/evil-mad/EggBot/issues/32 +# Updated by Sheldon B. Michaels, 1/11/2016 thru 3/15/2016 +# shel at shel dot net +# Added feature: Option to inset the hatch segments from boundaries +# Added feature: Option to join hatch segments that are "nearby", to minimize pen lifts +# The joins are made using cubic Bezier segments. +# https://github.com/evil-mad/EggBot/issues/36 +# Updated by Nathan Depew, 12/6/2017 +# Modified hatch fill to create hatches as a relevant object it found on the SVG tree +# This prevents extremely complex plots from generating glitches +# Modifications are limited to recursivelyTraverseSvg and effect methods +# +# Forked July 2020 +# Updated for Inkscape v1.0 +# Updated code to remove deprecation warnings +# Added script to format xml & Python. +# Not tested on Python 2. +# Current software version: +# (v0.9.0b, July 2020) # forked from Evil-Mad EggBot (v2.3.2, September 29, 2019) +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +import math +from lxml import etree +import inkex +from inkex import Transform +from inkex.paths import Path, CubicSuperPath + +N_PAGE_WIDTH = 3200 +N_PAGE_HEIGHT = 800 + +F_MINGAP_SMALL_VALUE = 0.0000000001 +# Was 0.00001 in the original version which did not have joined lines. +# Reducing this by a factor of 10^5 decreased probability of occurrence of +# the bug in the original, which got confused when the path barely +# grazed a corner. + +BEZIER_OVERSHOOT_MULTIPLIER = 0.75 # evaluation of cubic Bezier curve equation value, +# at x = 0, with +# endpoints at ( -0.5, 0 ), ( +0.5, 0 ) +# and control points at ( -0.5, 1.0 ), ( +0.5, 1.0 ) + +RADIAN_TOLERANCE_FOR_COLINEAR = 0.1 +# Pragmatically adjusted to allow adjacent segments from the same scan line, even short ones, +# to be classified as having the same angle + +RADIAN_TOLERANCE_FOR_ALTERNATING_DIRECTION = 0.1 +# Pragmatic adjustment again, as with colinearity tolerance + +RECURSION_LIMIT = 500 +# Pragmatic - if too high, risk runtime python error; +# if too low, miss some chances for reducing pen lifts + +EXTREME_POS = 1.0e70 # Extremely large positive number +EXTREME_NEG = -1.0e70 # Extremely large negative number + +MIN_HATCH_FRACTION = 0.25 +# Minimum hatch length, as a fraction of the hatch spacing. + +""" +Geometry 101: Determining if two lines intersect + +A line L is defined by two points in space P1 and P2. Any point P on the +line L satisfies + + P = P1 + s (P2 - P1) + +for some value of the real number s in the range (-infinity, infinity). +If we confine s to the range [0, 1] then we've described the line segment +with end points P1 and P2. + +Consider now the line La defined by the points P1 and P2, and the line Lb +defined by the points P3 and P4. Any points Pa and Pb on the lines La and +Lb therefore satisfy + + Pa = P1 + sa (P2 - P1) + Pb = P3 + sb (P4 - P3) + +for some values of the real numbers sa and sb. To see if these two lines +La and Lb intersect, we wish to see if there are finite values sa and sb +for which + + Pa = Pb + +Or, equivalently, we ask if there exists values of sa and sb for which +the equation + + P1 + sa (P2 - P1) = P3 + sb (P4 - P3) + +holds. If we confine ourselves to a two-dimensional plane, and take + + P1 = (x1, y1) + P2 = (x2, y2) + P3 = (x3, y3) + P4 = (x4, y4) + +we then find that we have two equations in two unknowns, sa and sb, + + x1 + sa ( x2 - x1 ) = x3 + sb ( x4 - x3 ) + y1 + sa ( y2 - y1 ) = y3 + sb ( y4 - y3 ) + +Solving these two equations for sa and sb yields, + + sa = [ ( y1 - y3 ) ( x4 - x3 ) - ( y4 - y3 ) ( x1 - x3 ) ] / d + sb = [ ( y1 - y3 ) ( x2 - x1 ) - ( y2 - y1 ) ( x1 - x3 ) ] / d + +where the denominator, d, is given by + + d = ( y4 - y3 ) ( x2 - x1 ) - ( y2 - y1 ) ( x4 - x3 ) + +Substituting these back for the point (x, y) of intersection gives + + x = x1 + sa ( x2 - x1 ) + y = y1 + sa ( y2 - y1 ) + +Note that + +1. The lines are parallel when d = 0 +2. The lines are coincident d = 0 and the numerators for sa & sb are zero +3. For line segments, sa and sb are in the range [0, 1]; any value outside + that range indicates that the line segments do not intersect. +""" + + +def intersect(p1, p2, p3, p4): + """ + Determine if two line segments defined by the four points p1 & p2 and + p3 & p4 intersect. If they do intersect, then return the fractional + point of intersection "sa" along the first line at which the + intersection occurs. + """ + + # Precompute these values -- note that we're basically shifting from + # + # p = p1 + s (p2 - p1) + # + # to + # + # p = p1 + s d + # + # where D is a direction vector. The solution remains the same of + # course. We'll just be computing D once for each line rather than + # computing it a couple of times. + + d21x = p2[0] - p1[0] + d21y = p2[1] - p1[1] + d43x = p4[0] - p3[0] + d43y = p4[1] - p3[1] + + # Denominator + d = d21x * d43y - d21y * d43x + + # Return now if the denominator is zero + if d == 0: + return -1.0 + + # For our purposes, the first line segment given + # by p1 & p2 is the LONG hatch line running through + # the entire drawing. And, p3 & p4 describe the + # usually much shorter line segment from a polygon. + # As such, we compute sb first as it's more likely + # to indicate "no intersection". That is, sa is + # more likely to indicate an intersection with a + # much a long line containing p3 & p4. + + nb = (p1[1] - p3[1]) * d21x - (p1[0] - p3[0]) * d21y + + # Could first check if abs(nb) > abs(d) or if + # the signs differ. + sb = float(nb) / float(d) + if sb < 0 or sb > 1: + return -1.0 + + na = (p1[1] - p3[1]) * d43x - (p1[0] - p3[0]) * d43y + sa = float(na) / float(d) + if sa < 0 or sa > 1: + return -1.0 + + return sa + + +def interstices(self, p1, p2, paths, hatches, b_hold_back_hatches, f_hold_back_steps): + """ + For the line L defined by the points p1 & p2, determine the segments + of L which lie within the polygons described by the paths stored in + "paths" + + p1 -- (x,y) coordinate [list] + p2 -- (x,y) coordinate [list] + paths -- Dictionary of all the paths to check for intersections + + When an intersection of the line L is found with a polygon edge, then + the fractional distance along the line L is saved along with the + lxml.etree node which contained the intersecting polygon edge. This + fractional distance is always in the range [0, 1]. + + Once all polygons have been checked, the list of fractional distances + corresponding to intersections is sorted and any duplicates removed. + It is then assumed that the first intersection is the line L entering + a polygon; the second intersection the line leaving the polygon. This + line segment defined by the first and second intersection points is + thus a hatch fill line we sought to generate. In general, our hatch + fills become the line segments described by intersection i and i+1 + with i an odd value (1, 3, 5, ...). Since we know the lxml.etree node + corresponding to each intersection, we can then correlate the hatch + fill lines to the graphical elements in the original SVG document. + This enables us to group hatch lines with the elements being hatched. + + The hatch line segments are returned by populating a dictionary. + The dictionary is keyed off of the lxml.etree node pointer. Each + dictionary value is a list of 4-tuples, + + (x1, y1, x2, y2) + + where (x1, y1) and (x2, y2) are the (x,y) coordinates of the line + segment's starting and ending points. + """ + + d_and_a = [] + # p1 & p2 is the hatch line + # p3 & p4 is the polygon edge to check + for path in paths: + for subpath in paths[path]: + p3 = subpath[0] + for p4 in subpath[1:]: + s = intersect(p1, p2, p3, p4) + if 0.0 <= s <= 1.0: + # Save this intersection point along the hatch line + if b_hold_back_hatches: + # We will need to know how the hatch meets the polygon segment, so that we can + # calculate the end of a shorter line that stops short + # of the polygon segment. + # We compute the angle now while we have the information required, + # but do _not_ apply it now, as we need the real,original, intersects + # for the odd/even inside/outside operations yet to come. + # Note that though the intersect() routine _could_ compute the join angle, + # we do it here because we go thru here much less often than we go thru intersect(). + angle_hatch_radians = math.atan2( + -(p2[1] - p1[1]), (p2[0] - p1[0]) + ) # from p1 toward p2, cartesian coordinates + angle_segment_radians = math.atan2( + -(p4[1] - p3[1]), (p4[0] - p3[0]) + ) # from p3 toward p4, cartesian coordinates + angle_difference_radians = ( + angle_hatch_radians - angle_segment_radians + ) + # coerce to range -pi to +pi + if angle_difference_radians > math.pi: + angle_difference_radians -= 2 * math.pi + elif angle_difference_radians < -math.pi: + angle_difference_radians += 2 * math.pi + f_sin_of_join_angle = math.sin(angle_difference_radians) + f_abs_sin_of_join_angle = abs(f_sin_of_join_angle) + if ( + f_abs_sin_of_join_angle != 0.0 + ): # Worrying about case of intersecting a segment parallel to the hatch + prelim_length_to_be_removed = ( + f_hold_back_steps / f_abs_sin_of_join_angle + ) + b_unconditionally_excise_hatch = False + else: + b_unconditionally_excise_hatch = True + + if not b_unconditionally_excise_hatch: + # The relevant end of the segment is the end from which the hatch approaches at an acute angle. + intersection = [0, 0] + intersection[0] = p1[0] + s * ( + p2[0] - p1[0] + ) # compute intersection point of hatch with segment + intersection[1] = p1[1] + s * ( + p2[1] - p1[1] + ) # intersecting hatch line starts at p1, vectored toward p2, + # but terminates at intersection + # Note that atan2 returns answer in range -pi to pi + # Which end is the approach end of the hatch to the segment? + # The dot product tells the answer: + # if dot product is positive, p2 is at the p4 end, + # else p2 is at the p3 end + # We really don't need to take the time to actually take + # the cosine of the angle, we are just interested in + # the quadrant within which the angle lies. + # I'm sure there is an elegant way to do this, but I'll settle for results just now. + # If the angle is in quadrants I or IV then p4 is the relevant end, otherwise p3 is + # nb: Y increases down, rather than up + # nb: difference angle has been forced to the range -pi to +pi + if abs(angle_difference_radians) < math.pi / 2: + # It's near the p3 the relevant end from which the hatch departs + dist_intersection_to_relevant_end = math.hypot( + p3[0] - intersection[0], p3[1] - intersection[1] + ) + dist_intersection_to_irrelevant_end = math.hypot( + p4[0] - intersection[0], p4[1] - intersection[1] + ) + else: + # It's near the p4 end from which the hatch departs + dist_intersection_to_relevant_end = math.hypot( + p4[0] - intersection[0], p4[1] - intersection[1] + ) + dist_intersection_to_irrelevant_end = math.hypot( + p3[0] - intersection[0], p3[1] - intersection[1] + ) + + # Now, the problem defined in issue 22 is that we may not need to remove the + # entire preliminary length we've calculated. This problem occurs because + # we have so far been considering the polygon segment as a line of infinite extent. + # Thus, we may be holding back at a point where no holdback is required, when + # calculated holdback is well beyond the position of the segment end. + + # To make matters worse, we do not currently know whether we're + # starting a hatch or terminating a hatch, because the duplicates have + # yet to be removed. All we can do then, is calculate the required + # line shortening for both possibilities - and then choose the correct + # one after duplicate-removal, when actually finalizing the hatches. + + # Let's see if either end, or perhaps both ends, has a case of excessive holdback + + # First, default assumption is that neither end has excessive holdback + length_remove_starting_hatch = prelim_length_to_be_removed + length_remove_ending_hatch = prelim_length_to_be_removed + + # Now check each of the two ends + if prelim_length_to_be_removed > ( + dist_intersection_to_relevant_end + f_hold_back_steps + ): + # Yes, would be excessive holdback approaching from this direction + length_remove_starting_hatch = ( + dist_intersection_to_relevant_end + + f_hold_back_steps + ) + if prelim_length_to_be_removed > ( + dist_intersection_to_irrelevant_end + f_hold_back_steps + ): + # Yes, would be excessive holdback approaching from other direction + length_remove_ending_hatch = ( + dist_intersection_to_irrelevant_end + + f_hold_back_steps + ) + + d_and_a.append( + ( + s, + path, + length_remove_starting_hatch, + length_remove_ending_hatch, + ) + ) + else: + d_and_a.append( + (s, path, 123456.0, 123456.0) + ) # Mark for complete hatch excision, hatch is parallel to segment + # Just a random number guaranteed large enough to be longer than any hatch length + else: + d_and_a.append( + (s, path, 0, 0) + ) # zero length to be removed from hatch + + p3 = p4 + + # Return now if there were no intersections + if len(d_and_a) == 0: + return None + + d_and_a.sort() + + # Remove duplicate intersections. A common case where these arise + # is when the hatch line passes through a vertex where one line segment + # ends and the next one begins. + + # Having sorted the data, it's trivial to just scan through + # removing duplicates as we go and then truncating the array + + n = len(d_and_a) + i_last = 1 + i = 1 + last = d_and_a[0] + while i < n: + if (abs(d_and_a[i][0] - last[0])) > F_MINGAP_SMALL_VALUE: + d_and_a[i_last] = last = d_and_a[i] + i_last += 1 + i += 1 + d_and_a = d_and_a[:i_last] + if len(d_and_a) < 2: + return + + # Now, entries with even valued indices into sa[] are where we start + # a hatch line and odd valued indices where we end the hatch line. + + i = 0 + while i < (len(d_and_a) - 1): + if d_and_a[i][1] not in hatches: + hatches[d_and_a[i][1]] = [] + + x1 = p1[0] + d_and_a[i][0] * (p2[0] - p1[0]) + y1 = p1[1] + d_and_a[i][0] * (p2[1] - p1[1]) + x2 = p1[0] + d_and_a[i + 1][0] * (p2[0] - p1[0]) + y2 = p1[1] + d_and_a[i + 1][0] * (p2[1] - p1[1]) + + # These are the hatch ends if we are _not_ holding off from the boundary. + if not b_hold_back_hatches: + hatches[d_and_a[i][1]].append([[x1, y1], [x2, y2]]) + else: + # User wants us to perform a pseudo inset operation. + # We will accomplish this by trimming back the ends of the hatches. + # The amount by which to trim back depends on the angle between the + # intersecting hatch line with the intersecting polygon segment, and + # may well be different at the two different ends of the hatch line. + + # To visualize this, imagine a hatch intersecting a segment that is + # close to parallel with it. The length of the hatch would have to be + # drastically reduced in order that its closest approach to the + # segment be reduced to the desired distance. + + # Imagine a Cartesian coordinate system, with the X axis representing the + # polygon segment, and a line running through the origin with a small + # positive slope being the intersecting hatch line. + + # We see that we want a Y value of the specified hatch width, and that + # at that Y, the distance from the origin to that point is the + # hypotenuse of the triangle. + # Y / cutlength = sin(angle) + # therefore: + # cutlength = Y / sin(angle) + # Fortunately, we have already stored this angle for exactly this purpose. + # For each end, trim back the hatch line by the amount required by + # its own angle. If the resultant diminished hatch is too short, + # remove it from consideration by marking it as already drawn - a + # fiction, but is much quicker than actually removing the hatch from the list. + + f_min_allowed_hatch_length = self.options.hatchSpacing * MIN_HATCH_FRACTION + f_initial_hatch_length = math.hypot(x2 - x1, y2 - y1) + # We did as much as possible of the inset operation back when we were finding intersections. + # We did it back then because at that point we knew more about the geometry than we know now. + # Now we don't know where the ends of the segments are, so we can't address issue 22 here. + f_length_to_be_removed_from_pt1 = d_and_a[i][3] + f_length_to_be_removed_from_pt2 = d_and_a[i + 1][2] + + if ( + f_initial_hatch_length + - (f_length_to_be_removed_from_pt1 + f_length_to_be_removed_from_pt2) + ) <= f_min_allowed_hatch_length: + pass # Just don't insert it into the hatch list + else: + """ + Use: + def RelativeControlPointPosition( self, distance, fDeltaX, fDeltaY, deltaX, deltaY ): + # returns the point, relative to 0, 0 offset by deltaX, deltaY, + # which extends a distance of "distance" at a slope defined by fDeltaX and fDeltaY + """ + pt1 = self.RelativeControlPointPosition( + f_length_to_be_removed_from_pt1, x2 - x1, y2 - y1, x1, y1 + ) + pt2 = self.RelativeControlPointPosition( + f_length_to_be_removed_from_pt2, x1 - x2, y1 - y2, x2, y2 + ) + hatches[d_and_a[i][1]].append([[pt1[0], pt1[1]], [pt2[0], pt2[1]]]) + + # Remember the relative start and end of this hatch segment + last_d_and_a = [d_and_a[i], d_and_a[i + 1]] + + i += 2 + + +def inverseTransform(tran): + """ + An SVG transform matrix looks like + + [ a c e ] + [ b d f ] + [ 0 0 1 ] + + And it's inverse is + + [ d -c cf - de ] + [ -b a be - af ] * ( ad - bc ) ** -1 + [ 0 0 1 ] + + And, no reasonable 2d coordinate transform will have + the products ad and bc equal. + + SVG represents the transform matrix column by column as + matrix(a b c d e f) while Inkscape extensions store the + transform matrix as + + [[a, c, e], [b, d, f]] + + To invert the transform stored Inkscape style, we wish to + produce + + [[d/D, -c/D, (cf - de)/D], [-b/D, a/D, (be-af)/D]] + + where + + D = 1 / (ad - bc) + """ + D = tran.a * tran.d - tran.b * tran.c + if D == 0: + return None + + return [ + [tran.d / D, -tran.c / D, (tran.c * tran.f - tran.d * tran.e) / D], + [-tran.b / D, tran.a / D, (tran.b * tran.e - tran.a * tran.f) / D], + ] + + +import inkex.bezier + + +def subdivideCubicPath(sp, flat, i=1): + """ + Break up a bezier curve into smaller curves, each of which + is approximately a straight line within a given tolerance + (the "smoothness" defined by [flat]). + + to avoid recurrence. + """ + + while True: + while True: + if i >= len(sp): + return + + p0 = sp[i - 1][1] + p1 = sp[i - 1][2] + p2 = sp[i][0] + p3 = sp[i][1] + + b = (p0, p1, p2, p3) + + if inkex.bezier.maxdist(b) > flat: + break + + i += 1 + + one, two = inkex.bezier.beziersplitatt(b, 0.5) + sp[i - 1][2] = one[1] + sp[i][0] = two[2] + p = [one[2], one[3], two[1]] + sp[i:1] = [p] + + +def distanceSquared(p1, p2): + """ + Pythagorean distance formula WITHOUT the square root. Since + we just want to know if the distance is less than some fixed + fudge factor, we can just square the fudge factor once and run + with it rather than compute square roots over and over. + """ + + dx = p2[0] - p1[0] + dy = p2[1] - p1[1] + + return dx * dx + dy * dy + + +class HatchFill(inkex.Effect): + def __init__(self): + + inkex.Effect.__init__(self) + + self.xmin, self.ymin = (0.0, 0.0) + self.xmax, self.ymax = (0.0, 0.0) + self.paths = {} + self.grid = [] + self.hatches = {} + self.transforms = {} + + # For handling an SVG viewbox attribute, we will need to know the + # values of the document's width and height attributes as well + # as establishing a transform from the viewbox to the display. + self.docWidth = float(N_PAGE_WIDTH) + self.docHeight = float(N_PAGE_HEIGHT) + self.docTransform = [[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]] + + self.arg_parser.add_argument( "--holdBackSteps", type=float, default=3.0, help="How far hatch strokes stay from boundary (steps)", ) + self.arg_parser.add_argument( "--hatchScope", type=float, default=3.0, help="Radius searched for segments to join (units of hatch width)", ) + self.arg_parser.add_argument( "--holdBackHatchFromEdges", type=inkex.Boolean, default=True, help="Stay away from edges, so no need for inset", ) + self.arg_parser.add_argument( "--reducePenLifts", type=inkex.Boolean, default=True, help="Reduce plotting time by joining some hatches", ) + self.arg_parser.add_argument( "--crossHatch", type=inkex.Boolean, default=False, help="Generate a cross hatch pattern", ) + self.arg_parser.add_argument( "--hatchAngle", type=float, default=90.0, help="Angle of inclination for hatch lines", ) + self.arg_parser.add_argument( "--hatchSpacing", type=float, default=10.0, help="Spacing between hatch lines", ) + self.arg_parser.add_argument( "--tolerance", type=float, default=20.0, help="Allowed deviation from original paths", ) + self.arg_parser.add_argument( "--tab", default="splash") + + def getDocProps(self): + + """ + Get the document's height and width attributes from the tag. + Use a default value in case the property is not present or is + expressed in units of percentages. + """ + + self.docHeight = getLength(self, "height", N_PAGE_HEIGHT) + self.docWidth = getLength(self, "width", N_PAGE_WIDTH) + + if self.docHeight is None or self.docWidth is None: + return False + else: + return True + + def handleViewBox(self): + + """ + Set up the document-wide transform in the event that the document has an SVG viewbox + """ + + if self.getDocProps(): + viewbox = self.document.getroot().get("viewBox") + if viewbox: + vinfo = viewbox.strip().replace(",", " ").split(" ") + if vinfo[2] != 0 and vinfo[3] != 0: + sx = self.docWidth / float(vinfo[2]) + sy = self.docHeight / float(vinfo[3]) + # self.docTransform = Transform('scale({0:f},{1:f})'.format(sx, sy)) + self.docTransform = Transform( + f"scale({sx}, {sy})" + ).matrix + + def addPathVertices(self, path, node=None, transform=None): + + """ + Decompose the path data from an SVG element into individual + subpaths, each starting with an absolute move-to (x, y) + coordinate followed by one or more absolute line-to (x, y) + coordinates. Each subpath is stored as a list of (x, y) + coordinates, with the first entry understood to be a + move-to coordinate and the rest line-to coordinates. A list + is then made of all the subpath lists and then stored in the + self.paths dictionary using the path's lxml.etree node pointer + as the dictionary key. + """ + + if not path or len(path) == 0: + return + + # parsePath() may raise an exception. This is okay + sp = inkex.paths.Path(path).to_arrays() + if not sp or len(sp) == 0: + return + + # Get a cubic super duper path + p = CubicSuperPath(sp) + if not p or len(p) == 0: + return + + # Apply any transformation + if transform is not None: + Path(p).transform(transform) + + # Now traverse the simplified path + subpaths = [] + subpath_vertices = [] + for sp in p: + # We've started a new subpath + # See if there is a prior subpath and whether we should keep it + if len(subpath_vertices): + if distanceSquared(subpath_vertices[0], subpath_vertices[-1]) < 1: + # Keep the prior subpath: it appears to be a closed path + subpaths.append(subpath_vertices) + subpath_vertices = [] + subdivideCubicPath(sp, float(self.options.tolerance / 100)) + for csp in sp: + # Add this vertex to the list of vertices + subpath_vertices.append(csp[1]) + + # Handle final subpath + if len(subpath_vertices): + if distanceSquared(subpath_vertices[0], subpath_vertices[-1]) < 1: + # Path appears to be closed so let's keep it + subpaths.append(subpath_vertices) + + # Empty path? + if len(subpaths) == 0: + return + + # And add this path to our dictionary of paths + self.paths[node] = subpaths + + # And save the transform for this element in a dictionary keyed + # by the element's lxml node pointer + self.transforms[node] = transform + + def getBoundingBox(self): + + """ + Determine the bounding box for our collection of polygons + """ + + self.xmin, self.xmax = EXTREME_POS, EXTREME_NEG + self.ymin, self.ymax = EXTREME_POS, EXTREME_NEG + for path in self.paths: + for subpath in self.paths[path]: + for vertex in subpath: + if vertex[0] < self.xmin: + self.xmin = vertex[0] + elif vertex[0] > self.xmax: + self.xmax = vertex[0] + if vertex[1] < self.ymin: + self.ymin = vertex[1] + elif vertex[1] > self.ymax: + self.ymax = vertex[1] + + def recursivelyTraverseSvg( + self, a_node_list, mat_current=None, parent_visibility="visible" + ): + """ + Recursively walk the SVG document, building polygon vertex lists + for each graphical element we support. + + Rendered SVG elements: + , , , , , , + + Supported SVG elements: + , + + Ignored SVG elements: + , , , , + + All other SVG elements trigger an error (including ) + + Once a supported graphical element is found, we call functions to + create a hatchfill specific to this element. These hatches and their + corresponding transforms are stored in self.hatches and self.transforms + These two dictionaries are used when we return to the effect method + in joinFillsWithNode() + + """ + if mat_current is None: + mat_current = [[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]] + for node in a_node_list: + + """ + Initialize dictionary for each new node + This allows us to create hatch fills as if each + object to be hatched has been selected individually + + """ + self.xmin, self.ymin = (0.0, 0.0) + self.xmax, self.ymax = (0.0, 0.0) + self.paths = {} + self.grid = [] + + # Ignore invisible nodes + v = node.get("visibility", parent_visibility) + if v == "inherit": + v = parent_visibility + if v == "hidden" or v == "collapse": + pass + + # first apply the current matrix transform to this node's transform + mat_new = Transform(mat_current) * Transform(Transform(node.get("transform")).matrix) + + if node.tag in [inkex.addNS("g", "svg"), "g"]: + self.recursivelyTraverseSvg(node, mat_new, parent_visibility=v) + + elif node.tag in [inkex.addNS("use", "svg"), "use"]: + + # A element refers to another SVG element via an xlink:href="#blah" + # attribute. We will handle the element by doing an XPath search through + # the document, looking for the element with the matching id="blah" + # attribute. We then recursively process that element after applying + # any necessary (x,y) translation. + # + # Notes: + # 1. We ignore the height and width attributes as they do not apply to + # path-like elements, and + # 2. Even if the use element has visibility="hidden", SVG still calls + # for processing the referenced element. The referenced element is + # hidden only if its visibility is "inherit" or "hidden". + + refid = node.get(inkex.addNS("href", "xlink")) + + # [1:] to ignore leading '#' in reference + path = '//*[@id="{0}"]'.format(refid[1:]) + refnode = node.xpath(path) + if refnode: + x = float(node.get("x", "0")) + y = float(node.get("y", "0")) + # Note: the transform has already been applied + if x != 0 or y != 0: + mat_new2 = Transform(mat_new) * Transform(Transform("translate({0:f},{1:f})".format(x, y))) + else: + mat_new2 = mat_new + v = node.get("visibility", v) + self.recursivelyTraverseSvg(refnode, mat_new2, parent_visibility=v) + + elif node.tag == inkex.addNS("path", "svg"): + + path_data = node.get("d") + if path_data: + self.addPathVertices(path_data, node, mat_new) + # We now have a path we want to apply a (cross)hatch to + # Apply appropriate functions + b_have_grid = self.makeHatchGrid( + float(self.options.hatchAngle), + float(self.options.hatchSpacing), + True, + ) + if b_have_grid: + if self.options.crossHatch: + self.makeHatchGrid( + float(self.options.hatchAngle + 90.0), + float(self.options.hatchSpacing), + False, + ) + # Now loop over our hatch lines looking for intersections + for h in self.grid: + interstices( + self, + (h[0], h[1]), + (h[2], h[3]), + self.paths, + self.hatches, + self.options.holdBackHatchFromEdges, + self.options.holdBackSteps, + ) + + elif node.tag in [inkex.addNS("rect", "svg"), "rect"]: + + # Manually transform + # + # + # + # into + # + # + # + # I.e., explicitly draw three sides of the rectangle and the + # fourth side implicitly + + # Create a path with the outline of the rectangle + x = float(node.get("x")) + y = float(node.get("y")) + + w = float(node.get("width", "0")) + h = float(node.get("height", "0")) + a = [ + ["M", [x, y]], + ["l", [w, 0]], + ["l", [0, h]], + ["l", [-w, 0]], + ["Z", []], + ] + ret = Path(a) + self.addPathVertices(ret, node, mat_new) + # We now have a path we want to apply a (cross)hatch to + # Apply appropriate functions + b_have_grid = self.makeHatchGrid( + float(self.options.hatchAngle), + float(self.options.hatchSpacing), + True, + ) + if b_have_grid: + if self.options.crossHatch: + self.makeHatchGrid( + float(self.options.hatchAngle + 90.0), + float(self.options.hatchSpacing), + False, + ) + # Now loop over our hatch lines looking for intersections + for h in self.grid: + interstices( + self, + (h[0], h[1]), + (h[2], h[3]), + self.paths, + self.hatches, + self.options.holdBackHatchFromEdges, + self.options.holdBackSteps, + ) + + elif node.tag in [inkex.addNS("line", "svg"), "line"]: + + # Convert + # + # + + x1 = float(node.get("x1")) + y1 = float(node.get("y1")) + x2 = float(node.get("x2")) + y2 = float(node.get("y2")) + + a = [ + ["M ", [x1, y1]], + [" L ", [x2, y2]], + ] + self.addPathVertices(Path(a), node, mat_new) + # We now have a path we want to apply a (cross)hatch to + # Apply appropriate functions + b_have_grid = self.makeHatchGrid( + float(self.options.hatchAngle), + float(self.options.hatchSpacing), + True, + ) + if b_have_grid: + if self.options.crossHatch: + self.makeHatchGrid( + float(self.options.hatchAngle + 90.0), + float(self.options.hatchSpacing), + False, + ) + # Now loop over our hatch lines looking for intersections + for h in self.grid: + interstices( + self, + (h[0], h[1]), + (h[2], h[3]), + self.paths, + self.hatches, + self.options.holdBackHatchFromEdges, + self.options.holdBackSteps, + ) + + elif node.tag in [inkex.addNS("polyline", "svg"), "polyline"]: + + # Convert + # + # + # + # to + # + # + # + # Note: we ignore polylines with no points + + pl = node.get("points", "").strip() + if pl == "": + continue + pa = pl.split() + if not pa: + continue + pathLength = len(pa) + if pathLength < 4: # Minimum of x1,y1 x2,y2 required. + continue + + d = "M " + pa[0] + " " + pa[1] + i = 2 + while i < (pathLength - 1): + d += " L " + pa[i] + " " + pa[i + 1] + i += 2 + + if d: + self.addPathVertices(d, node, mat_new) + + # We now have a path we want to apply a (cross)hatch to + # Apply appropriate functions + b_have_grid = self.makeHatchGrid( + float(self.options.hatchAngle), + float(self.options.hatchSpacing), + True, + ) + if b_have_grid: + if self.options.crossHatch: + self.makeHatchGrid( + float(self.options.hatchAngle + 90.0), + float(self.options.hatchSpacing), + False, + ) + # Now loop over our hatch lines looking for intersections + for h in self.grid: + interstices( + self, + (h[0], h[1]), + (h[2], h[3]), + self.paths, + self.hatches, + self.options.holdBackHatchFromEdges, + self.options.holdBackSteps, + ) + + elif node.tag in [inkex.addNS("polygon", "svg"), "polygon"]: + # Convert + # + # + # + # to + # + # + # + # Note: we ignore polygons with no points + + pl = node.get("points", "").strip() + + pa = pl.split() + d = "".join( + [ + "M " + pa[i] if i == 0 else " L " + pa[i] + for i in range(0, len(pa)) + ] + ) + d += " Z" + self.addPathVertices(d, node, mat_new) + # We now have a path we want to apply a (cross)hatch to + # Apply appropriate functions + b_have_grid = self.makeHatchGrid( + float(self.options.hatchAngle), + float(self.options.hatchSpacing), + True, + ) + if b_have_grid: + if self.options.crossHatch: + self.makeHatchGrid( + float(self.options.hatchAngle + 90.0), + float(self.options.hatchSpacing), + False, + ) + # Now loop over our hatch lines looking for intersections + for h in self.grid: + interstices( + self, + (h[0], h[1]), + (h[2], h[3]), + self.paths, + self.hatches, + self.options.holdBackHatchFromEdges, + self.options.holdBackSteps, + ) + + elif node.tag in [ + inkex.addNS("ellipse", "svg"), + "ellipse", + inkex.addNS("circle", "svg"), + "circle", + ]: + + # Convert circles and ellipses to a path with two 180 degree arcs. + # In general (an ellipse), we convert + # + # + # + # to + # + # + # + # where + # + # X1 = CX - RX + # X2 = CX + RX + # + # Note: ellipses or circles with a radius attribute of value 0 are ignored + + if node.tag in [inkex.addNS("ellipse", "svg"), "ellipse"]: + rx = float(node.get("rx", "0")) + ry = float(node.get("ry", "0")) + else: + rx = float(node.get("r", "0")) + ry = rx + + cx = float(node.get("cx", "0")) + cy = float(node.get("cy", "0")) + x1 = cx - rx + x2 = cx + rx + + d = ( + "M {x1:f},{cy:f} " + "A {rx:f},{ry:f} " + "0 1 0 {x2:f},{cy:f} " + "A {rx:f},{ry:f} " + "0 1 0 {x1:f},{cy:f}".format(x1=x1, x2=x2, rx=rx, ry=ry, cy=cy) + ) + self.addPathVertices(d, node, mat_new) + # We now have a path we want to apply a (cross)hatch to + # Apply appropriate functions + b_have_grid = self.makeHatchGrid( + float(self.options.hatchAngle), + float(self.options.hatchSpacing), + True, + ) + if b_have_grid: + if self.options.crossHatch: + self.makeHatchGrid( + float(self.options.hatchAngle + 90.0), + float(self.options.hatchSpacing), + False, + ) + # Now loop over our hatch lines looking for intersections + for h in self.grid: + interstices( + self, + (h[0], h[1]), + (h[2], h[3]), + self.paths, + self.hatches, + self.options.holdBackHatchFromEdges, + self.options.holdBackSteps, + ) + + elif node.tag in [inkex.addNS("pattern", "svg"), "pattern"]: + pass + elif node.tag in [inkex.addNS("metadata", "svg"), "metadata"]: + pass + elif node.tag in [inkex.addNS("defs", "svg"), "defs"]: + pass + elif node.tag in [inkex.addNS("namedview", "sodipodi"), "namedview"]: + pass + elif node.tag in [inkex.addNS("eggbot", "svg"), "eggbot"]: + pass + elif node.tag in [inkex.addNS("WCB", "svg"), "WCB"]: + pass + elif node.tag in [inkex.addNS("text", "svg"), "text"]: + inkex.errormsg( + "Warning: unable to draw text, please convert it to a path first." + ) + pass + elif not isinstance(node.tag, basestring): + pass + else: + inkex.errormsg( + "Warning: unable to hatch object <{0}>, please convert it to a path first.".format( + node.tag + ) + ) + pass + + def joinFillsWithNode(self, node, stroke_width, path): + + """ + Generate a SVG element containing the path data "path". + Then put this new element into a with the supplied + node. This means making a new element and moving node + under it with the new as a sibling element. + """ + + if not path or len(path) == 0: + return + + # Make a new SVG element whose parent is the parent of node + parent = node.getparent() + if parent is None: + parent = self.document.getroot() + g = etree.SubElement(parent, inkex.addNS("g", "svg")) + # Move node to be a child of this new element + g.append(node) + + # Now make a element which contains the hatches & is a child + # of the new element + stroke_color = "#000000" # default assumption + stroke_width = "1.0" # default value + + try: + style = node.get("style") + if style is not None: + declarations = style.split(";") + for i, declaration in enumerate(declarations): + parts = declaration.split(":", 2) + if len(parts) == 2: + (prop, val) = parts + prop = prop.strip().lower() + if prop == "stroke-width": + stroke_width = val.strip() + elif prop == "stroke": + val = val.strip() + stroke_color = val + finally: + style = { + "stroke": "{0}".format(stroke_color), + "fill": "none", + "stroke-width": "{0}".format(stroke_width), + } + line_attribs = {"style": str(inkex.Style(style)), "d": path} + tran = node.get("transform") + if tran is not None and tran != "": + line_attribs["transform"] = tran + etree.SubElement(g, inkex.addNS("path", "svg"), line_attribs) + + def makeHatchGrid( + self, angle, spacing, init=True + ): # returns True if succeeds in making grid, else False + + """ + Build a grid of hatch lines which encompasses the entire bounding + box of the graphical elements we are to hatch. + + 1. Figure out the bounding box for all of the graphical elements + 2. Pick a rectangle larger than that bounding box so that we can + later rotate the rectangle and still have it cover the bounding + box of the graphical elements. + 3. Center the rectangle of 2 on the origin (0, 0). + 4. Build the hatch line grid in this rectangle. + 5. Rotate the rectangle by the hatch angle. + 6. Translate the center of the rotated rectangle, (0, 0), to be + the center of the bounding box for the graphical elements. + 7. We now have a grid of hatch lines which overlay the graphical + elements and can now be intersected with those graphical elements. + """ + + # If this is the first call, do some one time initializations + # When generating cross hatches, we may be called more than once + if init: + self.getBoundingBox() + self.grid = [] + + # Determine the width and height of the bounding box containing + # all the polygons to be hatched + w = self.xmax - self.xmin + h = self.ymax - self.ymin + + b_bounding_box_exists = (w != (EXTREME_NEG - EXTREME_POS)) and ( + h != (EXTREME_NEG - EXTREME_POS) + ) + ret_value = b_bounding_box_exists + + if b_bounding_box_exists: + # Nice thing about rectangles is that the diameter of the circle + # encompassing them is the length the rectangle's diagonal... + r = math.sqrt(w * w + h * h) / 2.0 + + # Length of a hatch line will be 2r + # Now generate hatch lines within the square + # centered at (0, 0) and with side length at least d + + # While we could generate these lines running back and forth, + # that makes for weird behavior later when applying odd/even + # rules AND there are nested polygons. Instead, when we + # generate the SVG elements with the hatch line + # segments, we can do the back and forth weaving. + + # Rotation information + ca = math.cos(math.radians(90 - angle)) + sa = math.sin(math.radians(90 - angle)) + + # Translation information + cx = self.xmin + (w / 2) + cy = self.ymin + (h / 2) + + # Since the spacing may be fractional (e.g., 6.5), we + # don't try to use range() or other integer iterator + spacing = float(abs(spacing)) + i = -r + while i <= r: + # Line starts at (i, -r) and goes to (i, +r) + x1 = cx + (i * ca) + (r * sa) # i * ca - (-r) * sa + y1 = cy + (i * sa) - (r * ca) # i * sa + (-r) * ca + x2 = cx + (i * ca) - (r * sa) # i * ca - (+r) * sa + y2 = cy + (i * sa) + (r * ca) # i * sa + (+r) * ca + i += spacing + # Remove any potential hatch lines which are entirely + # outside of the bounding box + if (x1 < self.xmin and x2 < self.xmin) or ( + x1 > self.xmax and x2 > self.xmax + ): + continue + if (y1 < self.ymin and y2 < self.ymin) or ( + y1 > self.ymax and y2 > self.ymax + ): + continue + self.grid.append((x1, y1, x2, y2)) + + return ret_value + + def effect(self): + + global ref_count + global pt_last_position_abs + # Viewbox handling + self.handleViewBox() + + if self.options.hatchSpacing == 0: + self.options.hatchSpacing = 0.1 # Hardcode minimum value + + ref_count = 0 + pt_last_position_abs = [0, 0] + + # Build a list of the vertices for the document's graphical elements + if self.options.ids: + # Traverse the selected objects + for id_ in self.options.ids: + self.recursivelyTraverseSvg([self.svg.selected[id_]], self.docTransform) + else: + # Traverse the entire document + self.recursivelyTraverseSvg(self.document.getroot(), self.docTransform) + + # After recursively traversing the svg, we will have a dictionary of transforms and hatches + # Target stroke width will be (doc width + doc height) / 2 / 1000 + # stroke_width_target = ( self.docHeight + self.docWidth ) / 2000 + # stroke_width_target = 1 + stroke_width_target = 1 + # Each hatch line stroke will be within an SVG object which may + # be subject to transforms. So, on an object by object basis, + # we need to transform our target width to a width suitable + # for that object (so that after the object and its hatches are + # transformed, the result has the desired width). + + # To aid in the process, we use a diagonal line segment of length + # stroke_width_target. We then run this segment through an object's + # inverse transform and see what the resulting length of the inversely + # transformed segment is. We could, alternatively, look at the + # x and y scaling factors in the transform and average them. + s = stroke_width_target / math.sqrt(2) + + # Now, dump the hatch fills sorted by which document element + # they correspond to. This is made easy by the fact that we + # saved the information and used each element's lxml.etree node + # pointer as the dictionary key under which to save the hatch + # fills for that node. + + abs_line_segments = {} # Absolute line segments + n_abs_line_segment_total = 0 + n_pen_lifts = 0 + # To implement + for key in self.hatches: + direction = True + if key in self.transforms: + transform = inverseTransform(self.transforms[key]) + # Determine the scaled stroke width for a hatch line + # We produce a line segment of unit length, transform + # its endpoints and then determine the length of the + # resulting line segment. + pt1 = [0, 0] + pt2 = [s, s] + Transform(transform).apply_to_point(pt1) + Transform(transform).apply_to_point(pt2) + dx = pt2[0] - pt1[0] + dy = pt2[1] - pt1[1] + stroke_width = math.sqrt(dx * dx + dy * dy) + else: + transform = None + stroke_width = 1.0 + + # The transform also applies to the hatch spacing we use when searching for end connections + transformed_hatch_spacing = stroke_width * self.options.hatchSpacing + + path = "" # regardless of whether or not we're reducing pen lifts + pt_last_position_abs = [0, 0] + pt_last_position_abs[0] = 0 + pt_last_position_abs[1] = 0 + f_distance_moved_with_pen_up = 0 + if not self.options.reducePenLifts: + for segment in self.hatches[key]: + if len(segment) < 2: + continue + pt1 = segment[0] + pt2 = segment[1] + # Okay, we're going to put these hatch lines into the same + # group as the element they hatch. That element is down + # some chain of SVG elements, some of which may have + # transforms attached. But, our hatch lines have been + # computed assuming that those transforms have already + # been applied (since we had to apply them so as to know + # where this element is on the page relative to other + # elements and their transforms). So, we need to invert + # the transforms for this element and then either apply + # that inverse transform here and now or set it in a + # transform attribute of the element. Having it + # set in the path element seems a bit counterintuitive + # after the fact (i.e., what's this transform here for?). + # So, we compute the inverse transform and apply it here. + if transform is not None: + Transform(transform).apply_to_point(pt1) + Transform(transform).apply_to_point(pt2) + # Now generate the path data for the + if direction: + # Go this direction + path += "M {0:f},{1:f} l {2:f},{3:f} ".format( + pt1[0], pt1[1], pt2[0] - pt1[0], pt2[1] - pt1[1] + ) + else: + # Or go this direction + path += "M {0:f},{1:f} l {2:f},{3:f} ".format( + pt2[0], pt2[1], pt1[0] - pt2[0], pt1[1] - pt2[1] + ) + + direction = not direction + self.joinFillsWithNode(key, stroke_width, path[:-1]) + + else: + for segment in self.hatches[key]: + if ( + len(segment) < 2 + ): # Copied from original, no idea why this is needed [sbm] + continue + if direction: + pt1 = segment[0] + pt2 = segment[1] + else: + pt1 = segment[1] + pt2 = segment[0] + # Okay, we're going to put these hatch lines into the same + # group as the element they hatch. That element is down + # some chain of SVG elements, some of which may have + # transforms attached. But, our hatch lines have been + # computed assuming that those transforms have already + # been applied (since we had to apply them so as to know + # where this element is on the page relative to other + # elements and their transforms). So, we need to invert + # the transforms for this element and then either apply + # that inverse transform here and now or set it in a + # transform attribute of the element. Having it + # set in the path element seems a bit counterintuitive + # after the fact (i.e., what's this transform here for?). + # So, we compute the inverse transform and apply it here. + if transform is not None: + Transform(transform).apply_to_point(pt1) + Transform(transform).apply_to_point(pt2) + + # Now generate the path data for the + # BUT we want to combine as many paths as possible to reduce pen lifts. + # In order to combine paths, we need to know all of the path segments. + # The solution to this conundrum is to generate all path segments, + # but instead of drawing them into the path right away, we put them in + # an array where they'll be available for random access + # by our anti-pen-lift algorithm + abs_line_segments[n_abs_line_segment_total] = [ + pt1, + pt2, + False, + ] # False indicates that segment has not yet been drawn + n_abs_line_segment_total += 1 + direction = not direction + + # Now have a nice juicy buffer full of line segments with absolute coordinates + f_proposed_neighborhood_radius_squared = self.ProposeNeighborhoodRadiusSquared( + transformed_hatch_spacing + ) + # Just fixed and simple for now - may make function of neighborhood later + + for ref_count in range( + n_abs_line_segment_total + ): # This is the entire range of segments, + # Sets global ref_count to segment which has an end closest to current pen position. + # Doesn't need to select which end is closest, as that will happen below, with n_ref_end_index. + # When we have gone thru this whole range, we will be completely done. + # We only get here again, after all _connected_ segments have been "drawn". + if not abs_line_segments[ref_count][ + 2 + ]: # Test whether this segment has been drawn + # Has not been drawn yet + + # Before we do any irrevocable changes to path, let's see if we are going to be able to append any segments. + # The below solution is inelegant, but has the virtue of being relatively simple to implement. + # Pre-qualify this segment on the issue of whether it has any connecting segments. + # If it does not, then just add the path for this one segment, and go on to the next. + # If it does have connecting segments, we need to go through the recursive logic. + # Lazily, again, select the desired direction of line ahead of time. + + b_found_segment_to_add = False # default assumption + n_ref_end_index_at_closest = 0 + f_closest_distance_squared = ( + 123456 # just a random large number + ) + for n_ref_end_index in range(2): + pt_reference = abs_line_segments[ref_count][n_ref_end_index] + pt_reference_other_end = abs_line_segments[ref_count][ + not n_ref_end_index + ] + f_reference_direction_radians = math.atan2( + pt_reference_other_end[1] - pt_reference[1], + pt_reference_other_end[0] - pt_reference[0], + ) # from other end to this end + # The following is just a simple copy from the routine in recursivelyAppendNearbySegments procedure + # Look through all possibilities to choose the closest that fulfills all requirements e.g. direction and colinearity + for innerCount in range( + n_abs_line_segment_total + ): # investigate all segments + if not abs_line_segments[innerCount][2]: + # This segment currently undrawn, so it is a candidate for a path extension + # Need to check both ends of each and every proposed segment so we can find the most appropriate one + # Define pt2 in the reference as the end which we want to extend + for nNewSegmentInitialEndIndex in range(2): + # First try initial end of test segment (aka pt1) vs final end (aka pt2) of reference segment + if ( + innerCount != ref_count + ): # don't investigate self ends + delta_x = ( + abs_line_segments[innerCount][ + nNewSegmentInitialEndIndex + ][0] + - pt_reference[0] + ) # proposed initial pt1 X minus existing final pt1 X + delta_y = ( + abs_line_segments[innerCount][ + nNewSegmentInitialEndIndex + ][1] + - pt_reference[1] + ) # proposed initial pt1 Y minus existing final pt1 Y + if ( + (delta_x * delta_x + delta_y * delta_y) + < f_proposed_neighborhood_radius_squared + ): + f_this_distance_squared = ( + delta_x * delta_x + + delta_y * delta_y + ) + pt_new_segment_this_end = abs_line_segments[ + innerCount + ][ + nNewSegmentInitialEndIndex + ] + pt_new_segment_other_end = abs_line_segments[ + innerCount + ][ + not nNewSegmentInitialEndIndex + ] + f_new_segment_direction_radians = math.atan2( + pt_new_segment_this_end[1] + - pt_new_segment_other_end[1], + pt_new_segment_this_end[0] + - pt_new_segment_other_end[0], + ) # from other end to this end + # If this end would cause an alternating direction, + # then exclude it + if not self.WouldBeAnAlternatingDirection( + f_reference_direction_radians, + f_new_segment_direction_radians, + ): + pass + elif ( + f_this_distance_squared + < f_closest_distance_squared + ): + # One other thing could rule out choosing this segment end: + # Want to screen and remove two segments that, while close enough, + # should be disqualified because they are colinear. The reason for this is that + # if they are colinear, they arose from the same global grid line, which means + # that the gap between them arises from intersections with the boundary. + # The idea here is that, all things being more-or-less equal, + # we would like to give preference to connecting to a segment + # which is the reverse of our current direction. This makes for better + # bezier curve join. + # The criterion for being colinear is that the reference segment angle is effectively + # the same as the line connecting the reference segment to the end of the new segment. + f_joiner_direction_radians = math.atan2( + pt_new_segment_this_end[1] + - pt_reference[1], + pt_new_segment_this_end[0] + - pt_reference[0], + ) + if not self.AreCoLinear( + f_reference_direction_radians, + f_joiner_direction_radians, + ): + # not colinear + f_closest_distance_squared = ( + f_this_distance_squared + ) + b_found_segment_to_add = True + n_ref_end_index_at_closest = ( + n_ref_end_index + ) + + # At last we've looked at all the candidate segment ends, as related to all the reference ends + if not b_found_segment_to_add: + # This segment is solitary. + # Must start a new line, not joined to any previous paths + delta_x = ( + abs_line_segments[ref_count][1][0] + - abs_line_segments[ref_count][0][0] + ) # end minus start, in original direction + delta_y = ( + abs_line_segments[ref_count][1][1] + - abs_line_segments[ref_count][0][1] + ) # end minus start, in original direction + path += "M {0:f},{1:f} l {2:f},{3:f} ".format( + abs_line_segments[ref_count][0][0], + abs_line_segments[ref_count][0][1], + delta_x, + delta_y, + ) # delta is from initial point + f_distance_moved_with_pen_up += math.hypot( + abs_line_segments[ref_count][0][0] + - pt_last_position_abs[0], + abs_line_segments[ref_count][0][1] + - pt_last_position_abs[1], + ) + pt_last_position_abs[0] = ( + abs_line_segments[ref_count][0][0] + delta_x + ) + pt_last_position_abs[1] = ( + abs_line_segments[ref_count][0][1] + delta_y + ) + abs_line_segments[ref_count][ + 2 + ] = True # True flags that this line segment has been + # added to the path to be drawn, so should + # no longer be a candidate for any kind of move. + n_pen_lifts += 1 + else: + # Found segment to add, and we must get to it in absolute terms + delta_x = ( + abs_line_segments[ref_count][ + n_ref_end_index_at_closest + ][0] + - abs_line_segments[ref_count][ + not n_ref_end_index_at_closest + ][0] + ) + # final point (which was closer to the closest continuation segment) minus initial point = delta_x + + delta_y = ( + abs_line_segments[ref_count][ + n_ref_end_index_at_closest + ][1] + - abs_line_segments[ref_count][ + not n_ref_end_index_at_closest + ][1] + ) + # final point (which was closer to the closest continuation segment) minus initial point = delta_y + + path += "M {0:f},{1:f} l ".format( + abs_line_segments[ref_count][ + not n_ref_end_index_at_closest + ][0], + abs_line_segments[ref_count][ + not n_ref_end_index_at_closest + ][1], + ) + f_distance_moved_with_pen_up += math.hypot( + abs_line_segments[ref_count][ + not n_ref_end_index_at_closest + ][0] + - pt_last_position_abs[0], + abs_line_segments[ref_count][ + not n_ref_end_index_at_closest + ][1] + - pt_last_position_abs[1], + ) + pt_last_position_abs[0] = abs_line_segments[ref_count][ + not n_ref_end_index_at_closest + ][0] + pt_last_position_abs[1] = abs_line_segments[ref_count][ + not n_ref_end_index_at_closest + ][1] + # Note that this does not complete the line, as the completion (the delta_x, delta_y part) is being held in abeyance + + # We are coming up on a problem: + # If we add a curve to the end of the line, we have made the curve extend beyond the end of the line, + # and thus beyond the boundaries we should be respecting. + # The solution is to hold in abeyance the actual plotting of the line, + # holding it available for shrinking if a curve is to be added. + # That is + relative_held_line_pos = {0: delta_x, 1: delta_y} + # delta is from initial point + # Will be printed after we know if it must be modified + # to keep the ending join within bounds + pt_last_position_abs[0] += delta_x + pt_last_position_abs[1] += delta_y + + abs_line_segments[ref_count][ + 2 + ] = True # True flags that this line segment has been + # added to the path to be drawn, so should + # no longer be a candidate for any kind of move. + n_pen_lifts += 1 + # Now comes the speedup logic: + # We've just drawn a segment starting at an absolute, not relative, position. + # It was drawn from pt1 to pt2. + # Look for an as-yet-not-drawn segment which has a beginning or ending + # point "near" the end point of this absolute draw, and leave the pen down + # while moving to and then drawing this found line. + # Do this recursively, marking each segment True to show that + # it has been "drawn" already. + # pt2 is the reference point, ie. the point from which the next segment will start + path = self.recursivelyAppendNearbySegments( + transformed_hatch_spacing, + 0, + ref_count, + n_ref_end_index_at_closest, + n_abs_line_segment_total, + abs_line_segments, + path, + relative_held_line_pos, + ) + + self.joinFillsWithNode(key, stroke_width, path[:-1]) + + def recursivelyAppendNearbySegments( + self, + transformed_hatch_spacing, + n_recursion_count, + n_ref_segment_count, + n_ref_end_index, + n_abs_line_segment_total, + abs_line_segments, + cumulative_path, + relative_held_line_pos, + ): + + global pt_last_position_abs + f_proposed_neighborhood_radius_squared = self.ProposeNeighborhoodRadiusSquared( + transformed_hatch_spacing + ) + + # Look through all possibilities to choose the closest + b_found_segment_to_add = False # default assumption + n_new_segment_end1_index_at_closest = 0 + n_outer_count_at_closest = -1 + f_closest_distance_squared = 123456789.0 # just a random large number + + pt_reference = abs_line_segments[n_ref_segment_count][n_ref_end_index] + pt_reference_other_end = abs_line_segments[n_ref_segment_count][ + not n_ref_end_index + ] + f_reference_delta_x = pt_reference_other_end[0] - pt_reference[0] + f_reference_delta_y = pt_reference_other_end[1] - pt_reference[1] + f_reference_direction_radians = math.atan2( + f_reference_delta_y, f_reference_delta_x + ) # from other end to this end + + for outerCount in range(n_abs_line_segment_total): # investigate all segments + if not abs_line_segments[outerCount][2]: + # This segment currently undrawn, so it is a candidate for a path extension + + # Need to check both ends of each and every proposed segment until we find one in the neighborhood + # Defines pt2 in the reference as the end which we want to extend + + for n_new_segment_end1_index in range(2): + # First try initial end of test segment (aka pt1) vs final end (aka pt2) of reference segment + if outerCount != n_ref_segment_count: # don't investigate self ends + delta_x = ( + abs_line_segments[outerCount][n_new_segment_end1_index][0] + - pt_reference[0] + ) # proposed initial pt1 X minus existing final pt1 X + delta_y = ( + abs_line_segments[outerCount][n_new_segment_end1_index][1] + - pt_reference[1] + ) # proposed initial pt1 Y minus existing final pt1 Y + if ( + delta_x * delta_x + delta_y * delta_y + ) < f_proposed_neighborhood_radius_squared: + f_this_distance_squared = ( + delta_x * delta_x + delta_y * delta_y + ) + pt_new_segment_this_end = abs_line_segments[outerCount][ + n_new_segment_end1_index + ] + pt_new_segment_other_end = abs_line_segments[outerCount][ + not n_new_segment_end1_index + ] + f_new_segment_Dx = ( + pt_new_segment_this_end[0] - pt_new_segment_other_end[0] + ) + f_new_segment_Dy = ( + pt_new_segment_this_end[1] - pt_new_segment_other_end[1] + ) + f_new_segment_direction_radians = math.atan2( + f_new_segment_Dy, f_new_segment_Dx + ) # from other end to this end + if not self.WouldBeAnAlternatingDirection( + f_reference_direction_radians, + f_new_segment_direction_radians, + ): + # If this end would cause an alternating direction, + # then exclude it regardless of how close it is + pass + + elif f_this_distance_squared < f_closest_distance_squared: + # One other thing could rule out choosing this segment end: + # Want to screen and remove two segments that, while close enough, + # should be disqualified because they are colinear. The reason for this is that + # if they are colinear, they arose from the same global grid line, which means + # that the gap between them arises from intersections with the boundary. + # The idea here is that, all things being more-or-less equal, + # we would like to give preference to connecting to a segment + # which is the reverse of our current direction. This makes for better + # bezier curve join. + # The criterion for being colinear is that the reference segment angle is effectively + # the same as the line connecting the reference segment to the end of the new segment. + + f_joiner_direction_radians = math.atan2( + pt_new_segment_this_end[1] - pt_reference[1], + pt_new_segment_this_end[0] - pt_reference[0], + ) + if not self.AreCoLinear( + f_reference_direction_radians, + f_joiner_direction_radians, + ): + # not colinear + f_closest_distance_squared = f_this_distance_squared + b_found_segment_to_add = True + n_new_segment_end1_index_at_closest = ( + n_new_segment_end1_index + ) + n_outer_count_at_closest = outerCount + delta_x_at_closest = delta_x + delta_y_at_closest = delta_y + + # At last we've looked at all the candidate segment ends + n_recursion_count += 1 + if not b_found_segment_to_add or n_recursion_count >= RECURSION_LIMIT: + cumulative_path += "{0:f},{1:f} ".format( + relative_held_line_pos[0], relative_held_line_pos[1] + ) # close out this segment + pt_last_position_abs[0] += relative_held_line_pos[0] + pt_last_position_abs[1] += relative_held_line_pos[1] + return cumulative_path # No undrawn segments were suitable for appending, + # or there were so many that we worry about python recursion limit + else: + n_new_segment_end1_index = n_new_segment_end1_index_at_closest + n_new_segment_end2_index = not n_new_segment_end1_index + # n_new_segment_end1_index is 0 for connecting to pt1, + # and is 1 for connecting to pt2 + count = n_outer_count_at_closest # count is the index of the segment to be appended. + delta_x = delta_x_at_closest # delta from final end of incoming segment to initial end of outgoing segment + delta_y = delta_y_at_closest + + # First, move pen to initial end (may be either its pt1 or its pt2) of new segment + + # Insert a bezier curve for this transition element + # To accomplish this, we need information on the incoming and outgoing segments. + # Specifically, we need to know the lengths and angles of the segments in + # order to decide on control points. + f_in_Dx = ( + abs_line_segments[n_ref_segment_count][n_ref_end_index][0] + - abs_line_segments[n_ref_segment_count][not n_ref_end_index][0] + ) + f_in_Dy = ( + abs_line_segments[n_ref_segment_count][n_ref_end_index][1] + - abs_line_segments[n_ref_segment_count][not n_ref_end_index][1] + ) + # The outgoing deltas are based on the reverse direction of the segment, i.e. the segment pointing back to the joiner bezier curve + f_out_Dx = ( + abs_line_segments[count][n_new_segment_end1_index][0] + - abs_line_segments[count][n_new_segment_end2_index][0] + ) # index is [count][start point = 0, final point = 1][0=x, 1=y] + f_out_Dy = ( + abs_line_segments[count][n_new_segment_end1_index][1] + - abs_line_segments[count][n_new_segment_end2_index][1] + ) + + length_of_incoming = math.hypot(f_in_Dx, f_in_Dy) + length_of_outgoing = math.hypot(f_out_Dx, f_out_Dy) + + # We are going to trim-up the ends of the incoming and outgoing segments, + # in order to get a curve which reliably does not extend beyond the boundary. + # Crude readings from inkscape on bezier curve overshoot, using control points extended hatch-spacing distance parallel to segment: + # when end points are in line, overshoot 12/16 in direction of segment + # when at 45 degrees, overshoot 12/16 in direction of segment + # when at 60 degrees, overshoot 12/16 in direction of segment + # Conclusion, at any angle, remove 0.75 * hatch spacing from the length of both lines, + # where 0.75 is, by no coincidence, BEZIER_OVERSHOOT_MULTIPLIER + + # If hatches are getting quite short, we can use a smaller Bezier loop at + # the end to squeeze into smaller spaces. We'll use a normal nice smooth + # curve for non-short hatches + f_desired_shorten_for_smoothest_join = ( + transformed_hatch_spacing * BEZIER_OVERSHOOT_MULTIPLIER + ) # This is what we really want to use for smooth curves + # Separately check incoming vs outgoing lengths to see if bezier distances must be reduced, + # then choose greatest reduction to apply to both - lest we go off-course + # Finally, clip reduction to be no less than 1.0 + f_control_point_divider_incoming = ( + 2.0 * f_desired_shorten_for_smoothest_join / length_of_incoming + ) + f_control_point_divider_outgoing = ( + 2.0 * f_desired_shorten_for_smoothest_join / length_of_outgoing + ) + if f_control_point_divider_incoming > f_control_point_divider_outgoing: + f_largest_desired_control_point_divider = ( + f_control_point_divider_incoming + ) + else: + f_largest_desired_control_point_divider = ( + f_control_point_divider_outgoing + ) + if f_largest_desired_control_point_divider < 1.0: + f_control_point_divider = 1.0 + else: + f_control_point_divider = f_largest_desired_control_point_divider + f_desired_shorten = ( + f_desired_shorten_for_smoothest_join / f_control_point_divider + ) + + pt_delta_to_subtract_from_incoming_end = self.RelativeControlPointPosition( + f_desired_shorten, f_in_Dx, f_in_Dy, 0, 0 + ) + # Note that this will be subtracted from the _point held in abeyance_. + relative_held_line_pos[0] -= pt_delta_to_subtract_from_incoming_end[0] + relative_held_line_pos[1] -= pt_delta_to_subtract_from_incoming_end[1] + + pt_delta_to_add_to_outgoing_start = self.RelativeControlPointPosition( + f_desired_shorten, f_out_Dx, f_out_Dy, 0, 0 + ) + + # We know that when we tack on a curve, we must chop some off the end of the incoming segment, + # and also chop some off the start of the outgoing segment. + # Now, we know we want the control points to be on a projection of each segment, + # in order that there be no abrupt change of plotting angle. The question is, how + # far beyond the endpoint should we place the control point. + pt_relative_control_point_in = self.RelativeControlPointPosition( + transformed_hatch_spacing / f_control_point_divider, + f_in_Dx, + f_in_Dy, + 0, + 0, + ) + pt_relative_control_point_out = self.RelativeControlPointPosition( + transformed_hatch_spacing / f_control_point_divider, + f_out_Dx, + f_out_Dy, + delta_x, + delta_y, + ) + + cumulative_path += "{0:f},{1:f} ".format( + relative_held_line_pos[0], relative_held_line_pos[1] + ) # close out this segment, which has been modified + pt_last_position_abs[0] += relative_held_line_pos[0] + pt_last_position_abs[1] += relative_held_line_pos[1] + # add bezier cubic curve + cumulative_path += "c {0:f},{1:f} {2:f},{3:f} {4:f},{5:f} l ".format( + pt_relative_control_point_in[0], + pt_relative_control_point_in[1], + pt_relative_control_point_out[0], + pt_relative_control_point_out[1], + delta_x, + delta_y, + ) + pt_last_position_abs[0] += delta_x + pt_last_position_abs[1] += delta_y + # Next, move pen in appropriate direction to draw the new segment, given that + # we have just moved to the initial end of the new segment. + # This needs special treatment, as we just did some length changing. + delta_x = ( + abs_line_segments[count][n_new_segment_end2_index][0] + - abs_line_segments[count][n_new_segment_end1_index][0] + + pt_delta_to_add_to_outgoing_start[0] + ) + delta_y = ( + abs_line_segments[count][n_new_segment_end2_index][1] + - abs_line_segments[count][n_new_segment_end1_index][1] + + pt_delta_to_add_to_outgoing_start[1] + ) + relative_held_line_pos[0] = delta_x # delta is from initial point + relative_held_line_pos[ + 1 + ] = delta_y # Will be printed after we know if it must be modified + + # Mark this segment as drawn + abs_line_segments[count][2] = True + + cumulative_path = self.recursivelyAppendNearbySegments( + transformed_hatch_spacing, + n_recursion_count, + count, + n_new_segment_end2_index, + n_abs_line_segment_total, + abs_line_segments, + cumulative_path, + relative_held_line_pos, + ) + return cumulative_path + + def ProposeNeighborhoodRadiusSquared(self, transformed_hatch_spacing): + return ( + transformed_hatch_spacing + * transformed_hatch_spacing + * self.options.hatchScope + * self.options.hatchScope + ) + # The multiplier of x generates a radius of x^0.5 times the hatch spacing. + + @staticmethod + def RelativeControlPointPosition(distance, f_delta_x, f_delta_y, delta_x, delta_y): + + # returns the point, relative to 0, 0 offset by delta_x, delta_y, + # which extends a distance of "distance" at a slope defined by f_delta_x and f_delta_y + pt_return = [0, 0] + + if f_delta_x == 0: + pt_return[0] = delta_x + pt_return[1] = math.copysign(distance, f_delta_y) + delta_y + elif f_delta_y == 0: + pt_return[0] = math.copysign(distance, f_delta_x) + delta_x + pt_return[1] = delta_y + else: + f_slope = math.atan2(f_delta_y, f_delta_x) + pt_return[0] = distance * math.cos(f_slope) + delta_x + pt_return[1] = distance * math.sin(f_slope) + delta_y + + return pt_return + + @staticmethod + def WouldBeAnAlternatingDirection( + f_reference_direction_radians, f_new_segment_direction_radians + ): + # atan2 returns values in the range -pi to +pi, so we must evaluate difference values + # in the range of -2*pi to +2*pi + # f_dir_diff_rad: Direction difference, radians + f_dir_diff_rad = f_reference_direction_radians - f_new_segment_direction_radians + if f_dir_diff_rad < 0: + f_dir_diff_rad += 2 * math.pi + # Without having changed the vector direction of the difference, we have + # now reduced the range to 0 to 2*pi + f_dir_diff_rad -= ( + math.pi + ) # flip opposite direction to coincide with same direction + # Of course they may not be _exactly_ pi different due to osmosis, so allow a tolerance + b_ret_val = abs(f_dir_diff_rad) < RADIAN_TOLERANCE_FOR_ALTERNATING_DIRECTION + + return b_ret_val + + @staticmethod + def AreCoLinear(f_direction_1_radians, f_direction_2_radians): + # allow slight difference in angles, for floating-point indeterminacy + f_abs_delta_radians = abs(f_direction_1_radians - f_direction_2_radians) + if f_abs_delta_radians < RADIAN_TOLERANCE_FOR_COLINEAR: + return True + elif abs(f_abs_delta_radians - math.pi) < RADIAN_TOLERANCE_FOR_COLINEAR: + return True + else: + return False + + +def parseLengthWithUnits(string_to_parse): + """ + Parse an SVG value which may or may not have units attached. + There is a more general routine to consider in scour.py if more + generality is ever needed. + """ + u = "px" + s = string_to_parse.strip() + if s[-2:] == "px": # pixels, at a size of PX_PER_INCH per inch + s = s[:-2] + elif s[-2:] == "in": # inches + s = s[:-2] + u = "in" + elif s[-2:] == "mm": # millimeters + s = s[:-2] + u = "mm" + elif s[-2:] == "cm": # centimeters + s = s[:-2] + u = "cm" + elif s[-2:] == "pt": # points; 1pt = 1/72th of 1in + s = s[:-2] + u = "pt" + elif s[-2:] == "pc": # picas; 1pc = 1/6th of 1in + s = s[:-2] + u = "pc" + elif s[-1:] == "Q" or s[-1:] == "q": # quarter-millimeters. 1q = 1/40th of 1cm + s = s[:-1] + u = "Q" + elif s[-1:] == "%": + u = "%" + s = s[:-1] + + try: + v = float(s) + except: + return None, None + + return v, u + + +def getLength(altself, name, default): + + PX_PER_INCH = 96.0 + """ + Get the attribute with name "name" and default value "default" + Parse the attribute into a value and associated units. Then, accept + no units (''), units of pixels ('px'), and units of percentage ('%'). + Return value in px. + """ + string_to_parse = altself.document.getroot().get(name) + + if string_to_parse: + v, u = parseLengthWithUnits(string_to_parse) + if v is None: + return None + elif u == "" or u == "px": + return float(v) + elif u == "in": + return float(v) * PX_PER_INCH + elif u == "mm": + return float(v) * PX_PER_INCH / 25.4 + elif u == "cm": + return float(v) * PX_PER_INCH / 2.54 + elif u == "Q" or u == "q": + return float(v) * PX_PER_INCH / (40.0 * 2.54) + elif u == "pc": + return float(v) * PX_PER_INCH / 6.0 + elif u == "pt": + return float(v) * PX_PER_INCH / 72.0 + elif u == "%": + return float(default) * v / 100.0 + else: + # Unsupported units + return None + else: + # No width specified; assume the default value + return float(default) + + +def inkscape_run_debug(): + import sys + import os + import datetime + import shutil + import tempfile + + # If we aren't calling this from our own script. + if os.environ.get("DEBUG_RECURSION", "0") == "1": + return + script_path = os.path.abspath(sys.argv[0]) + #debug_dir = os.path.join(os.path.dirname(script_path), "debug") + debug_dir = tempfile.gettempdir() + os.makedirs(debug_dir, exist_ok=True) + base_name, _ = os.path.splitext(os.path.basename(script_path)) + + # Debug Information. + with open(os.path.join(debug_dir, f"{base_name}.debug"), "w") as fid: + fid.write("#" * 20) + fid.write("\n# ") + fid.write(str(datetime.datetime.now())) + fid.write("\n") + fid.write("#" * 20) + + fid.write("\nExecutable: \n\t") + fid.write(sys.executable) + + fid.write("\nCurrentDirectory: \n\t") + fid.write(os.path.abspath(os.path.curdir)) + + fid.write("\nPaths:\n") + for path in sys.path: + fid.write("\t") + fid.write(path) + fid.write("\n") + + fid.write("\nArgs:\n") + for arg in sys.argv: + fid.write("\t") + fid.write(arg) + fid.write("\n") + + # Copy the temporary file to a permanent location for debugging. + in_file = sys.argv[-1] + if not in_file.endswith(".svg"): + out_file = os.path.join(debug_dir, "input_file.svg") + shutil.copy2(sys.argv[-1], out_file) + else: + out_file = in_file + + # Script to run Inkscape Extension as a Python script. + with open(os.path.join(debug_dir, f"{base_name}.sh"), "w") as fid: + fid.write("#!/usr/bin/env bash") + fid.write("\n# ") + fid.write(str(datetime.datetime.now())) + fid.write("\n" * 2) + fid.write("export DEBUG_RECURSION=1\n") + fid.write("export PYTHONPATH=") + fid.write(os.pathsep.join(sys.path)) + fid.write("\n") + fid.write(sys.executable) + fid.write(" ") + fid.write(os.path.abspath(sys.argv[0])) + + # Python program to programmatically call the Inkscape Extension (with the same settings) + # Useful for debugging an extension with VSCode or other debugger. + with open(os.path.join(debug_dir, f"{base_name}_run.py"), "w") as fid: + fid.write("#!" + sys.executable) + fid.write(f"\n# {datetime.datetime.now()}\n") + for module in ["sys", "os"]: + fid.write(f"import {module}\n") + for sys_path in list(sys.path): + if len(sys_path) == 0: + continue + fid.write(f"sys.path.append('{sys_path}')\n") + + fid.write("args = [\n") + for arg in sys.argv[1:-1]: + fid.write(f' "{arg}",\n') + fid.write(f' "{out_file}"\n') + fid.write("]\n") + + fid.write(f"import {base_name}\n") + fid.write("hatchfill = HatchFill.HatchFill()\n") + fid.write("hatchfill.run(args)\n") + + +if __name__ == "__main__": + # Debug script when called from Inkscape + inkscape_run_debug() + HatchFill().run() diff --git a/extensions/fablabchemnitz/hershey_text_alternative/hershey_text_alternative.inx b/extensions/fablabchemnitz/hershey_text_alternative/hershey_text_alternative.inx new file mode 100644 index 00000000..7b23d675 --- /dev/null +++ b/extensions/fablabchemnitz/hershey_text_alternative/hershey_text_alternative.inx @@ -0,0 +1,97 @@ + + + Hershey Text Alternative + fablabchemnitz.de.hershey_text_alternative + + + + + + + + + + + + + + + + + + + + + + + + + + + + + HersheySans1 + false + + + + + + + + + +The Quick Brown Fox Jumps Over a Lazy Dog + + + + + + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/hershey_text_alternative/hershey_text_alternative.py b/extensions/fablabchemnitz/hershey_text_alternative/hershey_text_alternative.py new file mode 100644 index 00000000..f3229e2c --- /dev/null +++ b/extensions/fablabchemnitz/hershey_text_alternative/hershey_text_alternative.py @@ -0,0 +1,1878 @@ +#!/usr/bin/env python3 +# +# Copyright (C) 2019 - Windell H. Oskay, www.evilmadscientist.com +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# + +''' +Hershey Text 3.0.3, 2019-11-11 + +Copyright 2019, Windell H. Oskay, www.evilmadscientist.com + +Major revisions in Hershey Text 3.0: + +1. Migrate font format to use SVG fonts. + - SVG fonts support unicode, meaning that we can use a full range of + characters. We are no longer limited to the ASCII range that the + historical Hershey font formats used. + - Arbitrary curves are supported within glyphs; we are no longer limited to + the straight line segments used in the historical Hershey format. + - The set of fonts can now be expanded. + +2. Add a mechanism for adding your own SVG fonts, either within the + folder containing the default fonts, or from an external file or directory. + This is particularly important for installations where one does not + have access to edit the contents of the Inkscape extensions directory. + +3. Support font mapping: If a given font face is used for a given block of + text, check first to see if a matching SVG font is present. If not, + substitute with the default (selected) stroke font from the list of + included fonts. + +4. Instead of entering text (one line at a time) in the extension, + this script now converts text (either all text, or all selected text) + in the document, replacing it in place. While not every possible + method of formatting text is supported, many are. + +''' + +import os +import math +from copy import deepcopy +import inkex +from inkex import Transform, Style, units +from inkex.elements import load_svg, Group, TextElement, FlowPara, FlowSpan, Tspan, FlowRoot, Rectangle, Use, PathElement, Defs + +class HersheyTextAlternative(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument( "--tab", dest="mode", default="render", help="The active tab or mode when Apply was pressed" ) + pars.add_argument( "--fontface", dest="fontface", default="HersheySans1", help="The selected font face when Apply was pressed" ) + pars.add_argument( "--otherfont", dest="otherfont", default="", help="Optional other font name or path to use" ) + pars.add_argument( "--preserve", type=inkex.Boolean, dest="preserve_text", default=False, help="Preserve original text") + pars.add_argument("--action", dest="util_mode", default="sample", help="The utility option selected") + pars.add_argument("--text", dest="sample_text", default="sample", help="Text to use for font table") + + PX_PER_INCH = 96.0 + + help_text = '''====== Hershey Text Help ====== + +The Hershey Text extension is designed to replace text in your document (either +selected text or all text) with specialized "stroke" or "engraving" fonts +designed for plotters. + +Whereas regular "outline" fonts (e.g., TrueType) work by filling in the region +inside an invisible outline, stroke fonts are composed only of individual lines +or strokes with finite width; much like human handwriting when using a physical +pen. + +Stroke fonts are most often used for creating text-like paths that computer +controlled drawing and cutting machines (from pen plotters to CNC routers) can +efficiently follow. + +A full user guide for Hershey Text is available to download from + http://wiki.evilmadscientist.com/hershey + + + ==== Basic operation ==== + +To use Hershey Text, start with a document that contains text objects. Select +the "Render" tab of Hershey Text, and choose a font face from the pop-up menu. + +When you click Apply, it will render all text elements on your page with the +selected stroke-based typeface. If you would like to convert only certain text +elements, click Apply with just those elements selected. + +If the "Preserve original text" box is checked, then the original text elements +on the page will be preserved even when you click Apply. If it is unchecked, +then the original font elements will be removed once rendered. + +You can generate a list of available SVG fonts or a list of all glyphs available +in a given font by using the tools available on the "Utilities" tab. + + + ==== How Hershey Text works ==== + +Hershey Text works by performing font substitution, starting with the text in +your document and replacing it with paths generated from the characters in the +selected SVG font. + +Hershey Text uses fonts in the SVG font format. While SVG fonts are one of the +few types that support stroke-based characters, it is important to note that +converting an outline font to SVG format does not convert it to a stroke based +font. Indeed, most SVG fonts are actually outline fonts. + +This extension *does not* convert outline fonts into stroke fonts, nor does it +convert other fonts into SVG format. Its sole function is to replace the text +in your document with paths from the selected SVG font. + + + ==== Using an external SVG font ==== + +To use an external SVG font -- one not included with the distribution -- select +"Other" for the name of the font in the pop-up menu on the "Render" tab. Then, +do one of the following: + +(1) Add your SVG font file (perhaps "example.svg") to the "svg_fonts" directory +within your Inkscape extensions directory, and enter the name of the font +("example") in the "Other SVG font name or path" box on the "Render" tab. + +or + +(2) Place your SVG font file anywhere on your computer, and enter the full path +to the file in the "Other SVG font name or path" box on the "Render" tab. +A full path might, for example, look like: + /Users/Robin/Documents/AxiDraw/fonts/path_handwriting.svg + + + ==== Using SVG fonts: Advanced methods ==== + +In addition to using a single SVG font for substitution, you can also use +font name mapping to automatically use particular stroke fonts in place of +specific font faces, to support various automated workflows and to support +the rapid use of multiple stroke font faces within the same document. + +Several SVG fonts are included with this distribution, including both +single-stroke and multi-stroke fonts. These fonts are included within the +"svg_fonts" directory within your Inkscape extensions directory. + +You can select the font that you would like to use from the pop-up menu on the +"Render" Tab. You can also make use of your own SVG fonts. + +Order of preference for SVG fonts: + +(1) If there is an SVG font with name matching that of the font for a given +piece of text, that font will be used. For example, if the original text is in +font "FancyScript" and there is a file in svg_fonts with name FancyScript.svg, +then FancyScript.svg will be used to render the text. + +(2) Otherwise (if there is no SVG font available matching the name of the font +for a given block of text), the face selected from the "Font face" pop-up menu +will be used as the default font when rendering text with Hershey Text. + +(3) You can also enter text in the "Name/Path" box, which can represent one of +the following: (i) a font name (for a font located in the svg_fonts directory), +(ii) the path to a font file elsewhere on your computer, or (iii) the path to a +directory containing (one or more) font files. + +(3a) Using a font name: +If you move a custom SVG font file into your svg_fonts directory, then you can +enter the name of the SVG font in the "Name/Path" text box and select "Other" +from the pop-up menu. Then, the named font will be used as the default. + +(3b) Using a file path: +If you enter the path to an SVG font file in the "Name/Path" text box and +select "Other" from the pop-up menu. Then, that font will be used as the +default. All SVG fonts located in the same directory as that font file will +also be available for name-based font substitution. If there are multiple +font-name matches, files in an external directory take precedence over ones in +the svg_fonts directory. + +(3c) Using a directory path: +If you enter the path to a directory containing SVG font files in the +"Name/Path" text box, then all SVG font files files in that directory will be +available for name-based font substitution. If there are multiple font-name +matches, files in an external directory take precedence over ones in the +svg_fonts directory. + + + +Tips about using these methods with your own custom fonts: + +(A) These methods can be used to render different text elements with different +SVG font faces. You can even rename a font -- either your own custom one or one +of the bundled ones -- to match the name of a font that you're using. For +example, if you rename a script font you name a font to "Helvetica.svg", +then all text in Helvetica will be replaced with that SVG font. + +(B) Using a directory path (3c) is a particularly helpful method if you do +not have access to modify the svg_fonts directory. + + + + ==== Limitations ==== + +This extension renders text into non-editable paths, generated from the +character geometry of SVG fonts. Once you have rendered the text, the resulting +paths can be edited with path editing tools, but not text editing tools. + +Since this extension works by a process of font substitution, text spanning a +single line will generally stay that way, whereas text flowed in a box (that +may span multiple lines) will be re-flowed from scratch. Style information such +as text size and line spacing can be lost in some cases. + +We recommend that you use the live preview option to achieve best results with +this extension. + + +(c) 2019 Windell H. Oskay +Evil Mad Scientist Laboratories +''' + + def getLengthInches(self, name): + """ + Get the attribute with name "name", and parse it as a length, + into a value and associated units. Return value in inches. + + This may cause scaling issues in some circumstances. Note, for + example, that Adobe Illustrator uses 72 px per inch, and Inkscape + used 90 px per inch prior to version 0.92. + """ + string_to_parse = self.document.getroot().get(name) + if string_to_parse: + v, u = units.parse_unit(string_to_parse) + if v is None: + return None + bad_units = {'%','ex','em'} # Unsupported units + if u in bad_units: + return None + + return units.convert_unit( string_to_parse, 'in') + + + def unitsToUserUnits(self, input_string): + """ + Custom replacement for the old "unittouu" routine + + Parse the attribute into a value and associated units. + Return value in user units (typically "px"). + Importantly, return None for malformed inputs. + """ + + v, u = units.parse_unit(input_string) + if v is None: + return None + + return units.convert_unit( input_string, '') + + + def vb_scale(self, vb, p_a_r, doc_width, doc_height): + """" + Parse SVG viewbox and generate scaling parameters. + Reference documentation: https://www.w3.org/TR/SVG11/coords.html + + Inputs: + vb: Contents of SVG viewbox attribute + p_a_r: Contents of SVG preserveAspectRatio attribute + doc_width: Width of SVG document + doc_height: Height of SVG document + + Output: sx, sy, ox, oy + Scale parameters (sx,sy) and offset parameters (ox,oy) + + """ + if vb is None: + return 1,1,0,0 # No viewbox; return default transform + else: + vb_array = vb.strip().replace(',', ' ').split() + + if len(vb_array) < 4: + return 1,1,0,0 # invalid viewbox; return default transform + + min_x = float(vb_array[0]) # Viewbox offset: x + min_y = float(vb_array[1]) # Viewbox offset: y + width = float(vb_array[2]) # Viewbox width + height = float(vb_array[3]) # Viewbox height + + if width <= 0 or height <= 0: + return 1,1,0,0 # invalid viewbox; return default transform + + d_width = float(doc_width) + d_height = float(doc_height) + + if d_width <= 0 or d_height <= 0: + return 1,1,0,0 # invalid document size; return default transform + + ar_doc = d_height / d_width # Document aspect ratio + ar_vb = height / width # Viewbox aspect ratio + + # Default values of the two preserveAspectRatio parameters: + par_align = "xmidymid" # "align" parameter (lowercased) + par_mos = "meet" # "meetOrSlice" parameter + + if p_a_r is not None: + par_array = p_a_r.strip().replace(',', ' ').lower().split() + if len(par_array) > 0: + par0 = par_array[0] + if par0 == "defer": + if len(par_array) > 1: + par_align = par_array[1] + if len(par_array) > 2: + par_mos = par_array[2] + else: + par_align = par0 + if len(par_array) > 1: + par_mos = par_array[1] + + if par_align == "none": + # Scale document to fill page. Do not preserve aspect ratio. + # This is not default behavior, nor what happens if par_align + # is not given; the "none" value must be _explicitly_ specified. + + sx = d_width/ width + sy = d_height / height + ox = -min_x + oy = -min_y + return sx,sy,ox,oy + + """ + Other than "none", all situations fall into two classes: + + 1) (ar_doc >= ar_vb AND par_mos == "meet") + or (ar_doc < ar_vb AND par_mos == "slice") + -> In these cases, scale document up until VB fills doc in X. + + 2) All other cases, i.e., + (ar_doc < ar_vb AND par_mos == "meet") + or (ar_doc >= ar_vb AND par_mos == "slice") + -> In these cases, scale document up until VB fills doc in Y. + + Note in cases where the scaled viewbox exceeds the document + (page) boundaries (all "slice" cases and many "meet" cases where + an offset value is given) that this routine does not perform + any clipping, but subsequent clipping to the page boundary + is appropriate. + + Besides "none", there are 9 possible values of par_align: + xminymin xmidymin xmaxymin + xminymid xmidymid xmaxymid + xminymax xmidymax xmaxymax + """ + + if (((ar_doc >= ar_vb) and (par_mos == "meet")) + or ((ar_doc < ar_vb) and (par_mos == "slice"))): + # Case 1: Scale document up until VB fills doc in X. + + sx = d_width / width + sy = sx # Uniform aspect ratio + ox = -min_x + + scaled_vb_height = ar_doc * width + excess_height = scaled_vb_height - height + + if par_align in {"xminymin", "xmidymin", "xmaxymin"}: + # Case: Y-Min: Align viewbox to minimum Y of the viewport. + oy = -min_y + # OK: tested with Tall-Meet, Wide-Slice + + elif par_align in {"xminymax", "xmidymax", "xmaxymax"}: + # Case: Y-Max: Align viewbox to maximum Y of the viewport. + oy = -min_y + excess_height + # OK: tested with Tall-Meet, Wide-Slice + + else: # par_align in {"xminymid", "xmidymid", "xmaxymid"}: + # Default case: Y-Mid: Center viewbox on page in Y + oy = -min_y + excess_height / 2 + # OK: Tested with Tall-Meet, Wide-Slice + + return sx,sy,ox,oy + else: + # Case 2: Scale document up until VB fills doc in Y. + + sy = d_height / height + sx = sy # Uniform aspect ratio + oy = -min_y + + scaled_vb_width = height / ar_doc + excess_width = scaled_vb_width - width + + if par_align in {"xminymin", "xminymid", "xminymax"}: + # Case: X-Min: Align viewbox to minimum X of the viewport. + ox = -min_x + # OK: Tested with Tall-Slice, Wide-Meet + + elif par_align in {"xmaxymin", "xmaxymid", "xmaxymax"}: + # Case: X-Max: Align viewbox to maximum X of the viewport. + ox = -min_x + excess_width + # Need test: Tall-Slice, Wide-Meet + + else: # par_align in {"xmidymin", "xmidymid", "xmidymax"}: + # Default case: X-Mid: Center viewbox on page in X + ox = -min_x + excess_width / 2 + # OK: Tested with Tall-Slice, Wide-Meet + + return sx,sy,ox,oy + return 1,1,0,0 # Catch-all: return default transform + + + def strip_quotes(self, fontname): + ''' + A multi-word font name may have a leading and trailing + single or double quotes, depending on the source. + If so, remove those quotes. + ''' + + if fontname.startswith("'") and fontname.endswith("'"): + return fontname[1:-1] + if fontname.startswith('"') and fontname.endswith('"'): + return fontname[1:-1] + return fontname + + def parse_svg_font( self, node_list ): + ''' + Parse an input svg, searching for an SVG font. If an + SVG font is found, parse it and return a "digest" containing + structured information from the font. See below for more + about the digest format. + + If the font is not found cannot be parsed, return none. + + Notable limitations: + + (1) This function only parses the first font face found within the + tree. We may, in the future, support discovering multiple fonts + within an SVG file. + + (2) We are only processing left-to-right and horizontal text, + not vertical text nor RTL. + + (3) This function currently performs only certain recursive searches, + within the element. It will not discover fonts nested within + groups or other elements. So far as we know, that is not a limitation + in practice. (If you have a counterexample please contact Evil Mad + Scientist tech support and let us know!) + + (4) Kerning details are not implemented yet. + ''' + + digest = None + + if node_list is None: + return None + + for node in node_list: + if isinstance(node, Defs): +# if node.tag == inkex.addNS('defs', 'svg') or node.tag == 'defs': + return self.parse_svg_font(node) # Recursive call + + if node.tag == inkex.addNS( 'font', 'svg' ) or node.tag == 'font': + ''' + === Internal structure for storing font information === + + We parse the SVG font file and create a keyed "digest" + from it that we can use while rendering text on the page. + + This "digest" will be added to a dictionary that maps + each font family name to a single digest. + + The digest itself is a dictionary with the following + keys, some of which may have empty values. This format + will allow us to add additional keys at a later date, + to support additional SVG font features. + + font_id (a string) + + font_family (a string) + + glyphs + A dictionary mapping unicode points to a specific + dictionary for each point. See below for more about + the key format. + The dictionary for a given point will include keys: + glyph_name (string) + horiz_adv_x (numeric) + d (string) + + missing_glyph + A dictionary for a single code point, with keys: + horiz_adv_x (numeric) + d (string) + + geometry + A dictionary containing geometric data + Keys will include: + horiz_adv_x (numeric) -- Default value + units_per_em (numeric) + ascent (numeric) + descent (numeric) + x_height (numeric) + cap_height (numeric) + bbox (string) + underline_position (numeric) + scale + A numeric scaling factor computed from the + units_per_em value, which gives the overall scale + ''' + + digest = dict() + geometry = dict() + glyphs = dict() + missing_glyph = dict() + + digest['font_id'] = node.get('id') + + horiz_adv_x = node.get('horiz-adv-x') + + if horiz_adv_x is not None: + geometry['horiz_adv_x'] = float(horiz_adv_x) + # Note: case of no horiz_adv_x value is not handled. + + glyph_tag = inkex.addNS( 'glyph', 'svg' ) + ff_tag = inkex.addNS( 'font-face', 'svg' ) + mg_tag = inkex.addNS( 'missing-glyph', 'svg' ) + + for element in node: + + if element.tag == 'glyph' or element.tag == glyph_tag: + # First, because it is the most common element + try: + uni_text = element.get('unicode') + except: + # Can't use this point if no unicode mapping. + continue + + if uni_text is None: + continue + + uni_text2 = uni_text + if uni_text in glyphs: + # Skip if that unicode point is already in the + # list of glyphs. (There is not currently support + # for alternate glyphs in the font.) + continue + + glyph_dict = dict() + glyph_dict['glyph_name'] = element.get('glyph-name') + + horiz_adv_x = element.get('horiz-adv-x') + + if horiz_adv_x is not None: + glyph_dict['horiz_adv_x'] = float(horiz_adv_x) + else: + glyph_dict['horiz_adv_x'] = geometry['horiz_adv_x'] + + glyph_dict['d'] = element.get('d') # SVG path data + glyphs[uni_text] = glyph_dict + + elif element.tag == 'font-face' or element.tag == ff_tag: + digest['font_family'] = element.get('font-family') + units_per_em = element.get('units-per-em') + + if units_per_em is None: + # Default: 1000, per SVG specification. + geometry['units_per_em'] = 1000.0 + else: + geometry['units_per_em'] = float(units_per_em) + + ascent = element.get('ascent') + if ascent is not None: + geometry['ascent'] = float(ascent) + + descent = element.get('descent') + if descent is not None: + geometry['descent'] = float(descent) + + ''' + # Skip these attributes that we are not currently using + geometry['x_height'] = element.get('x-height') + geometry['cap_height'] = element.get('cap-height') + geometry['bbox'] = element.get('bbox') + geometry['underline_position'] = element.get('underline-position') + ''' + + elif element.tag == 'missing-glyph' or element.tag == mg_tag: + horiz_adv_x = element.get('horiz-adv-x') + + if horiz_adv_x is not None: + missing_glyph['horiz_adv_x'] = float(horiz_adv_x) + else: + missing_glyph['horiz_adv_x'] = geometry['horiz_adv_x'] + + missing_glyph['d'] = element.get('d') # SVG path data + digest['missing_glyph'] = missing_glyph + + + # Main scaling factor + digest['scale'] = 1.0 / geometry['units_per_em'] + + digest['glyphs'] = glyphs + digest['geometry'] = geometry + + return digest + + + def load_font( self, fontname ): + ''' + Attempt to load an SVG font from a file in our list + of (likely) SVG font files. + If we can, add the contents to the font library. + Otherwise, add a "None" entry to the font library. + ''' + + if fontname is None: + return + + if fontname in self.font_dict: + return # Awesome: The font is already loaded. + + if fontname in self.font_file_list: + the_path = self.font_file_list[fontname] + else: + self.font_dict[fontname] = None + return # Font not located. + try: + ''' + Check to see if there is an SVG font file for us to read. + + At present, only one font file will be read per font family; + the name of the file must be FONT_NAME.svg, where FONT_NAME + is the name of the font family. + + Only the first font found in the font file will be read. + Multiple weights and styles within a font family are not + presently supported. + ''' + font_svg = load_svg(the_path) + self.font_dict[fontname] = self.parse_svg_font( font_svg.getroot() ) + + except IOError as e: + self.font_dict[fontname] = None + pass + except: + inkex.errormsg('Error parsing SVG font at ' + str(the_path)) + self.font_dict[fontname] = None + + + def font_table (self): + # Generate display table of all available SVG fonts + + self.options.preserve_text = False + + # Embed text in group to make manipulation easier: + g = self.svg.get_current_layer().add(Group()) + for fontname in self.font_file_list: + self.load_font(fontname) + + font_size = 0.2 # in inches -- will be scaled by viewbox factor. + font_size_text = str( font_size / self.vb_scale_factor) + 'px' + + labeltext_style = str(Style({ 'stroke' : 'none', \ + 'font-size':font_size_text, 'fill' : 'black', \ + 'font-family' : 'sans-serif', 'text-anchor': 'end'})) + + x_offset = font_size / self.vb_scale_factor + y_offset = 1.5 * x_offset + y = y_offset + + for fontname in sorted(self.font_dict): + if self.font_dict[fontname] == None: + continue # If the SVG file did NOT contain a font, skip it. + + text_attribs = {'x':'0','y': str(y),'hershey-ignore':'true'} + textline = g.add(TextElement(**text_attribs)) + textline.text = fontname + textline.style = labeltext_style + text_attribs = {'x':str(x_offset) ,'y': str(y) } + + sampletext_style = { 'stroke' : 'none', \ + 'font-size':font_size_text, \ + 'fill' : 'black', 'font-family' : fontname,\ + 'text-anchor': 'start'} + sampleline = g.add(TextElement(**text_attribs)) + + try: # python 2 + sampleline.text = self.options.sample_text.decode('utf-8') + except AttributeError: # python 3 + sampleline.text = self.options.sample_text + + sampleline.style = sampletext_style + y += y_offset + self.recursively_traverse_svg( g, self.docTransform ) + + + def glyph_table (self): + # Generate display table of glyphs within the current SVG font. + # Sorted display of all printable characters in the font _except_ + # missing glyph. + + self.options.preserve_text = False + + fontname = self.font_load_wrapper('not_a_font_name') # force load of default + + if self.font_load_fail: + inkex.errormsg('Font not found; Unable to generate glyph table.') + return + + # Embed in group to make manipulation easier: + g = self.svg.get_current_layer().add(Group()) + + missing_glyph = self.font_dict[fontname]['missing_glyph'] + + glyph_count = 0 + for glyph in self.font_dict[fontname]['glyphs']: + if self.font_dict[fontname]['glyphs'][glyph]['d'] is not None: + glyph_count += 1 + + columns = int(math.floor(math.sqrt(glyph_count))) + + font_size = 0.4 # in inches -- will be scaled by viewbox factor. + font_size_text = str( font_size / self.vb_scale_factor) + 'px' + + glyph_style = str(Style({ 'stroke' : 'none', \ + 'font-size':font_size_text, 'fill' : 'black', \ + 'font-family' : fontname, 'text-anchor': 'start'})) + + x_offset = 1.5 * font_size / self.vb_scale_factor + y_offset = x_offset + x = x_offset + y = y_offset + + draw_position = 0 + + for glyph in sorted(self.font_dict[fontname]['glyphs']): + if self.font_dict[fontname]['glyphs'][glyph]['d'] is None: + continue + y_pos,x_pos = divmod(draw_position,columns) + x = x_offset * ( x_pos + 1) + y = y_offset * ( y_pos + 1) + text_attribs = {'x':str(x),'y': str(y)} + sampleline = g.add(TextElement(**text_attribs)) + sampleline.text = glyph + sampleline.style = glyph_style + draw_position = draw_position + 1 + + self.recursively_traverse_svg( g, self.docTransform ) + + + def find_font_files (self): + ''' + Create list of "plausible" SVG font files + + List items in primary svg_fonts directory, typically located in the + directory where this script is being executed from. + + If there is text given in the "Other name/path" input, that text may + represent one of the following: + + (A) The name of a font file, located in the svg_fonts directory. + - This may be given with or without the .svg suffix. + - If it is a font file, and the font face selected is "other", + then use this as the default font face. + + (B) The path to a font file, located elsewhere. + - If it is a font file, and the font face selected is "other", + then use this as the default font face. + - ALSO: Search the directory where that file is located for + any other SVG fonts. + + (C) The path to a directory + - It may or may not have a trailing separator + - Search that directory for SVG fonts. + + This function will create a list of available files that + appear to be SVG (SVG font) files. It does not parse the files. + We will format it as a dictionary, that maps each file name + (without extension) to a path. + ''' + + self.font_file_list = dict() + + # List contents of primary font directory: + font_directory_name = 'svg_fonts' + + font_dir = os.path.realpath( + os.path.join(os.getcwd(), font_directory_name)) + for dir_item in os.listdir(font_dir): + if dir_item.endswith((".svg", ".SVG")): + file_path = os.path.join(font_dir,dir_item) + if os.path.isfile(file_path): # i.e., if not a directory + root, ext = os.path.splitext(dir_item) + self.font_file_list[root] = file_path + + # split off file extension (e.g., ".svg") + root, ext = os.path.splitext(self.options.otherfont) + + # Check for case "(A)": Input text is the name + # of an item in the primary font directory. + if root in self.font_file_list: + # If we already have that name in our font_file_list, + # and "other" is selected, this is now + # our default font face. + if self.options.fontface == "other": + self.options.fontface = root + return + + test_path = os.path.realpath(self.options.otherfont) + + # Check for case "(B)": A file, not in primary font directory + if os.path.isfile(test_path): + directory, file_name = os.path.split(test_path) + root, ext = os.path.splitext(file_name) + self.font_file_list[root] = test_path + + if self.options.fontface == "other": + self.options.fontface = root + + # Also search the directory where that file + # was located for other SVG files (which may be fonts) + + for dir_item in os.listdir(directory): + if dir_item.endswith((".svg", ".SVG")): + file_path = os.path.join(directory,dir_item) + if os.path.isfile(file_path): # i.e., if not a directory + root, _ext = os.path.splitext(dir_item) + self.font_file_list[root] = file_path + return + + # Check for case "(C)": A directory name + if os.path.isdir(test_path): + for dir_item in os.listdir(test_path): + if dir_item.endswith((".svg", ".SVG")): + file_path = os.path.join(test_path,dir_item) + if os.path.isfile(file_path): # i.e., if not a directory + root, _ext = os.path.splitext(dir_item) + self.font_file_list[root] = file_path + + + def font_load_wrapper( self, fontname ): + ''' + + This implements the following logic: + + * Check to see if the font name is in our lookup table of fonts, + self.font_dict + + * If the font is not listed in font_dict[]: + * Check to see if there is a corresponding SVG font file that + can be opened and parsed. + + * If the font can be opened and parsed: + * Add that font to font_dict. + * Otherwise + * Add the font name to font_dict as None. + + * If the font has value None in font_dict: + * Try to load fallback font. + + * Fallback font: + * If an SVG font matching that in the SVG is not available, + check to see if the default font is available. That font + is given by self.options.fontface + + * If a font is loaded and available, return the font name. + Otherwise, return none. + + ''' + + self.load_font(fontname) # Load the font if available + + ''' + It *may* be worth building one stroke font (e.g., Hershey Sans 1-stroke) as a + variable defined in this file so that it can be used even if no external + SVG font files are available. + ''' + + if self.font_dict[fontname] is None: + + # If we were not able to load the requested font:: + fontname = self.options.fontface # Fallback + if fontname not in self.font_dict: + self.load_font(fontname) + else: + pass + + if self.font_dict[fontname] is None: + self.font_load_fail = True # Set a flag so that we only generate one copy of this error. + return None + else: + return fontname + + + def get_font_char( self, fontname, char ): + ''' + Given a font face name and a character (unicode point), + return an SVG path, horizontal advance value, + and scaling factor. + + If the font is not available by name, use the default font. + ''' + + fontname = self.font_load_wrapper(fontname) # Load the font if available + + if fontname is None: + return None + + try: + scale_factor = self.font_dict[fontname]['scale'] + except: + scale_factor = 0.001 # Default: 1/1000 + + try: + if char not in self.font_dict[fontname]['glyphs']: + x_adv = self.font_dict[fontname]['missing_glyph']['horiz_adv_x'] + + return self.font_dict[fontname]['missing_glyph']['d'], \ + x_adv, scale_factor + else: + x_adv = self.font_dict[fontname]['glyphs'][char]['horiz_adv_x'] + + return self.font_dict[fontname]['glyphs'][char]['d'], \ + x_adv, scale_factor + except: + return None + + + def handle_viewBox( self ): + + self.svg_height = self.getLengthInches( 'height' ) + self.svg_width = self.getLengthInches( 'width' ) + + self.svg = self.document.getroot() + vb = self.svg.get('viewBox') + if vb: + p_a_r = self.svg.get('preserveAspectRatio') + sx,sy,ox,oy = self.vb_scale(vb, p_a_r, self.svg_width, self.svg_height) + else: + sx = 1.0 / float(self.PX_PER_INCH) # Handle case of no viewbox + sy = sx + ox = 0.0 + oy = 0.0 + + # Initial transform of document is based on viewbox, if present: + self.docTransform = Transform(scale=(sx, sy), translate=(ox, oy)) + + self.vb_scale_factor = (sx + sy) / 2.0 + # In case of non-square aspect ratio, use average value. + + + def draw_svg_text(self, chardata, parent): + char = chardata['char'] + font_family = chardata['font_family'] + offset = chardata['offset'] + vertoffset = chardata['vertoffset'] + font_height = chardata['font_height'] + font_scale = 1.0 + + # Stroke scale factor, including external transformations: + stroke_scale = chardata['stroke_scale'] * self.vb_scale_factor + + try: + path_string, adv_x, scale_factor = self.get_font_char( font_family, char ) + except: + adv_x = 0 + path_string = None + scale_factor = 1.0 + + if self.font_load_fail: + return 0 + + font_scale *= scale_factor * font_height + + hOffset = 0 + vOffset = 0 + + # SVG fonts use inverted Y axis; mirror vertically + scale_transform = Transform(scale=(font_scale, -font_scale)) + + # Combine scales of external transformations with the scaling + # applied by this function: + _scale = font_scale * stroke_scale + if _scale == 0: + _scale = 1 # Todo: reconsider what this default should be. + stroke_width = self.render_width / _scale + + # Stroke-width is a css style element; cannot use scientific notation. + # Thus, use variable width for encoding the stroke width factor: + + log_ten = math.log10(stroke_width) + if log_ten > 0: # For stroke_width > 1 + width_string = "{0:.3f}in".format(stroke_width) + else: + prec = int(math.ceil(-log_ten) + 3) + width_string = "{0:.{1}f}in".format(stroke_width, prec) + + p_style = {'stroke-width': width_string} + + the_transform = Transform(translate=(offset + hOffset, vertoffset + vOffset)) + the_transform *= scale_transform + + if path_string is not None: + path_element = parent.add(PathElement()) + path_element.set_path(path_string) + path_element.style = p_style + path_element.transform = the_transform + self.OutputGenerated = True + + return offset + float(adv_x) * font_scale # new horizontal offset value + + + def recursivelyGetEnclosingTransform( self, node ): + + ''' + Determine the cumulative transform which node inherits from + its chain of ancestors. + ''' + node = node.getparent() + if node is not None: + parent_transform = self.recursivelyGetEnclosingTransform( node ) + node_transform = node.get( 'transform', None ) + if node_transform is None: + return parent_transform + else: + tr = Transform(node_transform).matrix + + if parent_transform is None: + return tr + else: + return Transform( parent_transform) * Transform( tr ) + else: + return self.docTransform + + def recursivelyParseFlowRoot( self, NodeList, parent_info): + + font_height_local = parent_info['font_height'] # By default, inherit these values from parent. + font_family_local = parent_info['font_family'] + line_spacing_local = parent_info['line_spacing'] + text_align_local = parent_info['align'] + + for node in NodeList: + try: + node_style = node.style + except ValueError: + pass + + try: + font_height = node_style['font-size'] + font_height_local = self.unitsToUserUnits(font_height) + except KeyError: + pass + + try: + font_family_local = self.strip_quotes(node_style['font-family']) + except: + pass + + try: + line_spacing = node_style['line-height'] + if "%" in line_spacing: # Handle percentage line spacing (e.g., 125%) + line_spacing_local = float(line_spacing.rstrip("%")) / 100.0 + else: + line_spacing_local = float(line_spacing) # (e.g., line-height:1.25) + except KeyError: + pass + + try: + text_align_local = node_style['text-align'] # Use text-anchor in text nodes + except KeyError: + pass + + if node.text is not None: + self.text_string += node.text + + for char in node.text: + self.text_families.append(font_family_local) + self.text_heights.append(font_height_local) + self.text_spacings.append(line_spacing_local) + self.text_aligns.append(text_align_local) + + if isinstance(node, (FlowPara, FlowSpan)): + the_style = dict() + the_style['font_height'] = font_height_local + the_style['font_family'] = font_family_local + the_style['line_spacing'] = line_spacing_local + the_style['align'] = text_align_local + + self.recursivelyParseFlowRoot( node, the_style ) + + if node.tail is not None: + font_height_local = parent_info['font_height'] # By default, inherit these values from parent. + font_family_local = parent_info['font_family'] + line_spacing_local = parent_info['line_spacing'] + + text_align_local = parent_info['align'] + self.text_string += node.tail + for char in node.tail: + self.text_families.append(font_family_local) + self.text_heights.append(font_height_local) + self.text_spacings.append(line_spacing_local) + self.text_aligns.append(text_align_local) + + if isinstance(node, FlowPara): + self.text_string += "\n" # Conclude every flowpara with a return + self.text_families.append(font_family_local) + self.text_heights.append(font_height_local) + self.text_spacings.append(line_spacing_local) + self.text_aligns.append(text_align_local) + + def recursivelyParseTextNode( self, node, parent_info): + + font_height_local = parent_info['font_height'] # By default, inherit these values from parent. + font_family_local = parent_info['font_family'] + anchor_local = parent_info['anchor'] + x_local = parent_info['x_pos'] + y_local = parent_info['y_pos'] + parent_line_spacing = parent_info['line_spacing'] + + try: + node_style = node.style + except: + pass + + try: + font_height = node_style['font-size'] + font_height_local = self.unitsToUserUnits(font_height) + except KeyError: + pass + + try: + font_family_local = self.strip_quotes(node_style['font-family']) + except KeyError: + pass + + try: + anchor_local = node_style['text-anchor'] # Use text-anchor in text nodes + except KeyError: + pass + + try: + xTemp = node.get('x') + if xTemp is not None: + x_local = xTemp + except ValueError: + pass + + try: + yTemp = node.get('y') + if yTemp is not None: + y_local = yTemp + else: + # Special case, to handle multi-line text given by tspan + # elements that do not have y values + if y_local is None: + y_local = 0 + y_local = float(y_local) + self.line_number * parent_line_spacing * font_height_local + except ValueError: + pass + + if node.text is not None: + self.text_string += node.text + + for char in node.text: + self.text_families.append(font_family_local) + self.text_heights.append(font_height_local) + self.text_aligns.append(anchor_local) + self.text_x.append(x_local) + self.text_y.append(y_local) + + + for subNode in node: + # If text is located within a subnode of this node, process that subnode, with this very routine. + + if isinstance(subNode, Tspan): + # Note: There may be additional types of text tags that we should recursively search as well. + node_info = dict() + node_info['font_height'] = font_height_local + node_info['font_family'] = font_family_local + node_info['anchor'] = anchor_local + node_info['x_pos'] = x_local + node_info['y_pos'] = y_local + node_info['line_spacing'] = parent_line_spacing + + adv_line = False + role = subNode.get('sodipodi:role') + if role == "line": + adv_line = True + + self.recursivelyParseTextNode( subNode, node_info) + + # Increment line after tspan if it is labeled as a line + if adv_line: + self.line_number = self.line_number + 1 + + if node.tail is not None: + _stripped_tail = node.tail.strip() + if _stripped_tail is not None: + font_height_local = parent_info['font_height'] # By default, inherit these values from parent. + font_family_local = parent_info['font_family'] + text_align_local = parent_info['anchor'] + x_local = parent_info['x_pos'] + y_local = parent_info['y_pos'] + self.text_string += _stripped_tail + for char in _stripped_tail: + self.text_heights.append(font_height_local) + self.text_families.append(font_family_local) + self.text_aligns.append(text_align_local) + self.text_x.append(x_local) + self.text_y.append(y_local) + + def recursively_traverse_svg( self, aNodeList, + matCurrent=[[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]], + parent_visibility='visible' ): + + for node in aNodeList: + + # Ignore invisible nodes + v = node.get( 'visibility', parent_visibility ) + if v == 'inherit': + v = parent_visibility + if v == 'hidden' or v == 'collapse': + continue + + # First apply the current matrix transform to this node's tranform + _matrix = node.transform + matNew = Transform( matCurrent) * Transform( _matrix ) + + if isinstance(node, Group): + + recurseGroup = True + ink_label = node.get('inkscape:label') + + if not ink_label: + pass + else: + if (ink_label == 'Hershey Text'): + recurseGroup = False # Do not traverse groups of rendered text. + if recurseGroup: + self.recursively_traverse_svg( node, matNew, v ) + + elif isinstance(node, Use): + # A element refers to another SVG element via an xlink:href="#blah" + # attribute. We will handle the element by doing an XPath search through + # the document, looking for the element with the matching id="blah" + # attribute. We then recursively process that element after applying + # any necessary (x,y) translation. + # + # Notes: + # 1. We ignore the height and width attributes as they do not apply to + # path-like elements, and + # 2. Even if the use element has visibility="hidden", SVG still calls + # for processing the referenced element. The referenced element is + # hidden only if its visibility is "inherit" or "hidden". + + refnode = node.href + if refnode is None: + continue # missing reference + + local_transform = Transform( _matrix ) + x = float( node.get( 'x', '0' ) ) + y = float( node.get( 'y', '0' ) ) + # Note: the transform has already been applied + if ( x != 0 ) or (y != 0 ): + _trans_string = 'translate({0:.6E},{1:.6E})'.format(x, y) + ref_transform = Transform( _matrix ) * Transform(_trans_string) + else: + ref_transform = local_transform + + try: + ref_group = aNodeList.add(Group())# Add a subgroup + except AttributeError: + inkex.errormsg('Unable to process selected nodes. Consider unlinking cloned text.') + continue + + # Tests are not using the preset seed for this atm + #if 'id' not in ref_group.attrib: + # ref_group.set_random_id('') + + ref_group.set( 'transform',ref_transform) + + ref_group.append( deepcopy(refnode) ) + + for subnode in ref_group: + # The copied text elements should be removed at the end, + # or they will persist if original elements are preserved. + self.nodes_to_delete.append(subnode) + + #Preserve original element? + if not self.options.preserve_text: + self.nodes_to_delete.append(node) + + + elif isinstance(node, (TextElement,FlowRoot)): + + # Variables are initially zeroed for each text object. + self.baseline_offset = 0.0 # Baseline Shift + self.indent_offset = 0.0 + self.kern_offset = 0.0 + self.fontSize_offset = 0.0 # Deviation of font size away from nominal + self.newLine = True # Flag for when we start a new line of text, for use with indents. + + startX = 0 # Defaults; Fail gracefully in case xy position is not given. + startY = 0 + + # Default line spacing and font height: 125%, 16 px + line_spacing = "1.25" # Default + font_height = self.unitsToUserUnits("16px") # Default + + startX = node.get('x') # XY Position of element + startY = node.get('y') + + bounding_rect = False + rect_height = 100 #default size of bounding rectangle for flowroot object + rect_width = 100 #default size of bounding rectangle for flowroot object + transform = "" #transform (scale, translate, matrix, etc.) + text_align = "start" + + try: + hershey_ignore = node.get('hershey-ignore') + if hershey_ignore is not None: + continue # If the attribute is present, skip this node. + except ValueError: + pass + + try: + node_style = node.style + except ValueError: + pass + + font_height = 16 + try: + font_height_temp = node_style['font-size'] + font_height = self.unitsToUserUnits(font_height_temp) + except KeyError: + pass + + font_family = 'sans-serif' + try: + font_family = self.strip_quotes(node_style['font-family']) + except KeyError: + pass + + try: + line_spacing_temp = node_style['line-height'] + if "%" in line_spacing_temp: # Handle percentage line spacing (e.g., 125%) + line_spacing = float(line_spacing_temp.rstrip("%")) / 100.0 + else: + line_spacing = float(line_spacing_temp) # (e.g., line-height:1.25) + except KeyError: + pass + + try: + transform = node.transform + except ValueError: + pass + + if (transform is not None): + transform2 = Transform(transform).matrix + + ''' + Compute estimate of transformation scale applied to + this element, for purposes of calculating the + stroke width to apply. When all transforms are applied + and our elements are displayed on the page, we want the + final visible stroke width to be reasonable. + Transformation matrix is [[a c e][b d f]] + scale_x = sqrt(a * a + b * b), + scale_y = sqrt(c * c + d * d) + Take estimated scale as the mean of the two. + ''' + + scale_x = math.sqrt(transform2[0][0] * transform2[0][0] + + transform2[1][0] * transform2[1][0]) + scale_y = math.sqrt(transform2[0][1] * transform2[0][1] + + transform2[1][1] * transform2[1][1]) + + scale_r = (scale_x + scale_y) / 2.0 # Average. ¯\_(ツ)_/¯ + else: + scale_r = 1.0 + + id = node.get('id') + + #Initialize text attribute lists for each top-level text object: + self.text_string = "" + self.text_families = [] # Lis of font family for characters in the string + self.text_heights = [] # List of font heights + self.text_spacings = [] # List of vertical line heights + self.text_aligns = [] # List of horizontal alignment values + self.text_x = [] #List; x-coordinate of text line start + self.text_y = [] #List; y-coordinate of text line start + + # Group generated paths together, to make the rendered letters + # easier to manipulate in Inkscape once generated: + g_attribs = {inkex.addNS('label','inkscape'):'Hershey Text' } + parent = node.getparent() + + g = parent.add(Group(**g_attribs)) + + style = { 'stroke' : '#000000', 'fill' : 'none', \ + 'stroke-linecap' : 'round', 'stroke-linejoin' : 'round' } + + # Apply rounding to ends to improve final engraved text appearance. + g.style = style + # Some common variables used in both cases A and B: + strPos = 0 # Position through the full string that we are rendering + i = 0 # Dummy (index) variable for looping over letters in string + w = 0 # Initial spacing offset + wTemp = 0 # Temporary variable for horizontal spacing offset + widthThisLine = 0 # Estimated width of characters to be stored on this line + + ''' + CASE A: Handle flowed text nodes + ''' + + if isinstance(node, FlowRoot): + + try: + text_align = node_style['text-align'] # Use text-align, not text-anchor, in flowroot + except KeyError: + pass + + #selects the flowRegion's child (svg:rect) to get @X and @Y + flowref = self.svg.getElement('/svg:svg//*[@id="%s"]/svg:flowRegion[1]' % id)[0] + + + if isinstance(flowref, Rectangle): + startX = flowref.left + startY = flowref.top + rect_height = flowref.height + rect_width = flowref.width + bounding_rect = True + + elif isinstance(flowref, Use): + pass + + # A element refers to another SVG element via an xlink:href="#blah" + # attribute. We will handle the element by doing an XPath search through + # the document, looking for the element with the matching id="blah" + # attribute. We then recursively process that element after applying + # any necessary (x,y) translation. + # + # Notes: + # 1. We ignore the height and width attributes as they do not apply to + # path-like elements, and + # 2. Even if the use element has visibility="hidden", SVG still calls + # for processing the referenced element. The referenced element is + # hidden only if its visibility is "inherit" or "hidden". + # 3. We may be able to unlink clones using the code in pathmodifier.py + + # The following code can render text flowed into a rectangle object. + # HOWEVER, it does not handle the various transformations that could occur + # be present on those objects, and does not handle more general cases, such + # as a rotated rectangle -- for which text *should* flow in a diamond shape. + # For the time being, we skip these and issue a warning. + # + # refid = flowref.get( inkex.addNS( 'href', 'xlink' ) ) + # if refid is not None: + # # [1:] to ignore leading '#' in reference + # path = '//*[@id="%s"]' % refid[1:] + # refnode = flowref.xpath( path ) + # if refnode is not None: + # refnode = refnode[0] + # if refnode.tag == inkex.addNS("rect", "svg"): + # startX = refnode.get('x") + # startY = refnode.get('y") + # rect_height = refnode.get('height") + # rect_width = refnode.get('width") + # bounding_rect = True + + if not bounding_rect: + self.warnUnflow = True + continue + + ''' + Recursively loop through content of the flowroot object, + looping through text, flowpara, and other things. + + Create multiple lists: One of text content, + others of style that should be applied to that content. + + then, loop through those lists, one line at a time, + finding how many words fit on a line, etc. + ''' + + the_style = dict() + the_style['font_height'] = font_height + the_style['font_family'] = font_family + the_style['line_spacing'] = line_spacing + the_style['align'] = text_align + + self.recursivelyParseFlowRoot( node, the_style ) + + if (self.text_string == ""): + continue # No convertable text in this SVG element. + + if (self.text_string.isspace()): + continue # No convertable text in this SVG element. + + # Initial vertical offset for the flowed text block: + v = 0 + + # Record that we are on the first line of the paragraph + # for setting the v position of the first line. + first_line = True + + # Keep track of text height on first line, for moving entire text box: + y_offs_overall = 0 + + # Split text by lines AND make a list of how long each + # line is, including the newline characters. + # We need to keep track of this to match up styling + # information to the printable characters. + + text_lines = self.text_string.splitlines() + extd_text_lines = self.text_string.splitlines(True) + strPos_eol = 0 # strPos after end of previous text_line. + + nbsp = u'\xa0' # Unicode non-breaking space character + + for line_number, text_line in enumerate(text_lines): + + line_length = len(text_line) + extd_line_length = len(extd_text_lines[line_number]) + + i = 0 # Position within this text_line. + + # A given text_line may take more than one strip + # to render, if it overflows our box width. + + line_start = 0 # Value of i when the current strip started. + + if line_length == 0: + strPos_temp = strPos_eol + char_height = float(self.text_heights[strPos_temp]) + charline_spacing = float(self.text_spacings[strPos_temp]) + charVSpacing = charline_spacing * char_height + v = v + charVSpacing + else: + while (i < line_length): + + word_start = i # Value of i at beginning of the current word. + + while (i < line_length): # Step through the line + # until we reach the end of the line or word. + # (i.e., until we reach whitespace) + character = text_line[i] # character is unicode (not byte string) + strPos_temp = strPos_eol + i + + char_height = self.text_heights[strPos_temp] + char_family = self.text_families[strPos_temp] + + try: + _a, x_adv, scale_factor = self.get_font_char( char_family, character ) + except: + x_adv = 0 + scale_factor = 1 + + wTemp += x_adv * scale_factor * char_height + + i += 1 + if character.isspace() and not character == nbsp: + break # Break at space, except non-breaking + + render_line = False + if wTemp > rect_width: # If the word will overflow the box + if word_start == line_start: + # This is the first word in the strip, so this + # word (alone) is wider than the box. Render it. + render_line = True + else: # Not the first word in the strip. + # Render the line up UNTIL this word. + render_line = True + i = word_start + elif i >= line_length: + # Render at end of text_line, if not overflowing. + render_line = True + + if render_line: + # Create group for rendering a strip of text: + lineGroup = g.add(Group()) + + wTemp = 0 + w = 0 + + self.newLine = True + widthThisLine = 0 + lineMaxVSpacing = 0 + + j = line_start + + while ( j < i ): # Calculate max height for the strip: + strPos_temp = strPos_eol + j + char_height = float(self.text_heights[strPos_temp]) + charline_spacing = float(self.text_spacings[strPos_temp]) + charVSpacing = charline_spacing * char_height + if (charVSpacing > lineMaxVSpacing): + lineMaxVSpacing = charVSpacing + j = j + 1 + + v = v + lineMaxVSpacing + + char_data = dict() + char_data['vertoffset']= v + char_data['stroke_scale'] = scale_r + + j = line_start + while ( j < i ): # Render the strip on the page + strPos = strPos_eol + j + + char_height = self.text_heights[strPos] + char_family = self.text_families[strPos] + text_align = self.text_aligns[strPos] + + char_data['char'] = text_line[j] + char_data['font_height'] = char_height + char_data['font_family'] = char_family + char_data['offset'] = w + + w = self.draw_svg_text(char_data, lineGroup) + + widthThisLine = w + firstWordOfLine = False + + j = j + 1 + strPos = strPos + 1 + + line_start = i + + # Alignment for the strip: + + the_transform = None + if (text_align == "center"): # when using text-align + the_transform = Transform(translate=((float(rect_width) - widthThisLine)/2)) + elif (text_align == "end"): + the_transform = Transform(translate=(float(rect_width) - widthThisLine)) + if the_transform is not None: + lineGroup.transform = the_transform + + if first_line: + y_offs_overall = lineMaxVSpacing / 3 # Heuristic + first_line = False + + strPos_eol = strPos_eol + extd_line_length + strPos = strPos_eol + + the_transform = Transform(translate=(startX, float(startY) - y_offs_overall)) + + else: # If this is a text object, rather than a flowroot object: + ''' + CASE B: Handle regular (non-flowroot) text nodes + ''' + + try: + # Use text-anchor, not text-align, in text (not flowroot) elements + text_align = node_style["text-anchor"] + except KeyError: + pass + + ''' + Recursively loop through content of the text object, + looping through text, tspan, and other things as necessary. + (A recursive search since style elements may be nested.) + + Create multiple lists: One of text content, others of the + style that should be applied to that content. + + For each line, want to record the plain text, font size + per character, text alignment, and x,y start values + for that line) + + (We may need to eventually handle additional text types and + tags, as when importing from other SVG sources. We should + try to eventually support additional formulations + of x, y, dx, dy, etc. + https://www.w3.org/TR/SVG/text.html#TSpanElement ) + + then, loop through those lists, one line at a time, + rendering text onto lines. If the x or y values changed, + assume we've started a new line. + + Note: A text element creates a single line + of text; it does not create multiline text by including + line returns within the text itself. Multiple lines of text + are created with multiple text or tspan elements. + ''' + + node_info = dict() + node_info['font_height'] = font_height + node_info['font_family'] = font_family + node_info['anchor'] = text_align + node_info['x_pos'] = startX + node_info['y_pos'] = startY + node_info['line_spacing'] = line_spacing + + # Keep track of line number. Used in cases where daughter + # tspan elements do not have Y positions given. + # Reset to zero on each text element. + self.line_number = 0 + + self.recursivelyParseTextNode( node, node_info) + # self.recursivelyParseTextNode( node, font_height, text_align, startX, startY ) + + if (self.text_string == ""): + continue # No convertable text in this SVG element. + if (self.text_string.isspace()): + continue # No convertable text in this SVG element. + + letter_vals = [q for q in self.text_string] + strLen = len(letter_vals) + + lineGroup = g.add(Group()) # Use a group for each line. This starts the first. + + i = 0 + while (i < strLen): # Loop through the entire text of the string. + + xStartLine = float(self.text_x[i]) # We are starting a new line here. + yStartLine = float(self.text_y[i]) + + while (i < strLen): # Inner while loop, that we will break out of, back to the outer while loop. + + q = letter_vals[i] + charfont_height = self.text_heights[i] + + char_data = dict() + char_data['char'] = q + char_data['font_family'] = self.text_families[i] + + char_data['font_height'] = charfont_height + char_data['offset'] = w + char_data['vertoffset']= 0 + char_data['stroke_scale'] = scale_r + + w = self.draw_svg_text(char_data, lineGroup) + widthThisLine = w + wTemp = w + + # Set the alignment if (A) this is the last character in the string + # or if the next piece of the string is at a different position + + setAlignment = False + iNext = i + 1 + if (iNext >= strLen): # End of the string; this is the last character. + setAlignment = True + elif ((float(self.text_x[iNext]) != xStartLine) or (float(self.text_y[iNext]) != yStartLine) ): + setAlignment = True + + if setAlignment: + text_align = self.text_aligns[i] + # Not currently supporting text alignment that changes in the span; + # Use the text alignment as of the last character. + + # Left (or "start") alignment is default. + # if (text_align == "middle"): Center alignment + # if (text_align == "end"): Right alignment + # + # Strategy: Align every row (left, center, or right) as it is created. + + xShift = 0 + if (text_align == "middle"): # when using text-anchor + xShift = xStartLine - (widthThisLine / 2) + elif (text_align == "end"): + xShift = xStartLine - widthThisLine + else: + xShift = xStartLine + + yShift = yStartLine + + the_transform = Transform(translate=(xShift, yShift)) + + lineGroup.transform = the_transform + + lineGroup = g.add(Group()) # Create new group for this line + + self.newLine = True # Used for managing indent defects + w = 0 + i += 1 + break + i += 1 # Only executed when setAlignment is false. + t = "" + + the_transform = Transform() + + if len(lineGroup) == 0: + parent = lineGroup.getparent() + parent.remove(lineGroup) + + #End cases A & B. Apply transform to text/flowroot object: + + if (transform is not None): + result = Transform( transform) * the_transform + else: + result = the_transform + + g.transform = result + + if not self.OutputGenerated: + parent = g.getparent() + parent.remove(g) #remove empty group + + #Preserve original element? + if not self.options.preserve_text and self.OutputGenerated: + self.nodes_to_delete.append(node) + + + def effect( self ): + + # Input sanitization: + self.options.mode = self.options.mode.strip("\"") + self.options.fontface = self.options.fontface.strip("\"") + self.options.otherfont = self.options.otherfont.strip("\"") + self.options.util_mode = self.options.util_mode.strip("\"") + self.options.sample_text = self.options.sample_text.strip("\"") + + self.docTransform = [[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]] + + self.font_load_fail = False + + self.find_font_files() + + # Font dictionary - Dictionary of loaded fonts + self.font_dict = dict() + + self.OutputGenerated = False + + self.warnUnflow = False + self.warnTextPath = False # For future use: Give warning about text attached to path. + + self.nodes_to_delete = [] # List of font elements to remove + + self.handle_viewBox() + + # Calculate "ideal" effective width of rendered strokes: + # Default: 1/800 of page width or height, whichever is smaller + + _rendered_stroke_scale = 1 / (self.PX_PER_INCH * 800.0) + + self.render_width = 1 + if self.svg_width is not None: + if self.svg_width < self.svg_height: + self.render_width = self.svg_width * _rendered_stroke_scale + else: + self.render_width = self.svg_height * _rendered_stroke_scale + + if self.options.mode == "help": + inkex.errormsg(self.help_text) + elif self.options.mode == "utilities": + + if self.options.util_mode == "sample": + self.font_table() + else: + self.glyph_table() + else: + if self.options.ids: + # Traverse selected objects + for id in self.options.ids: + transform = self.recursivelyGetEnclosingTransform( self.svg.selected[id] ) + self.recursively_traverse_svg( [self.svg.selected[id]], transform) + else: # Traverse entire document + self.recursively_traverse_svg( self.document.getroot(), self.docTransform ) + + for element_to_remove in self.nodes_to_delete: + if element_to_remove is not None: + parent = element_to_remove.getparent() + if parent is not None: + parent.remove(element_to_remove) + + if self.font_load_fail: + inkex.errormsg( 'Warning: unable to load SVG stroke fonts.') + + if self.warnUnflow: + inkex.errormsg( 'Warning: unable to convert text flowed into a frame.\n' + + 'Please use Text > Unflow to convert it prior to use.\n' + + 'If you are unable to identify the object in question, ' + + 'please contact technical support for help.' + ) + +if __name__ == '__main__': + HersheyTextAlternative().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/hershey_text_alternative/svg_fonts/EMSAllure.svg b/extensions/fablabchemnitz/hershey_text_alternative/svg_fonts/EMSAllure.svg new file mode 100644 index 00000000..79115cf1 --- /dev/null +++ b/extensions/fablabchemnitz/hershey_text_alternative/svg_fonts/EMSAllure.svg @@ -0,0 +1,235 @@ + + + + + + +Font name: EMS Allure +License: SIL Open Font License http://scripts.sil.org/OFL +Created by: Sheldon B. Michaels +SVG font conversion by: Windell H. Oskay +A derivative of: Allura +Designer: Rob Leuschke, TypeSETit +Link: http://www.typesetit.com +Google font page: https://fonts.google.com/specimen/Allura + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/hershey_text_alternative/svg_fonts/EMSElfin.svg b/extensions/fablabchemnitz/hershey_text_alternative/svg_fonts/EMSElfin.svg new file mode 100644 index 00000000..989b235b --- /dev/null +++ b/extensions/fablabchemnitz/hershey_text_alternative/svg_fonts/EMSElfin.svg @@ -0,0 +1,236 @@ + + + + + + +Font name: EMS Elfin +License: SIL Open Font License http://scripts.sil.org/OFL +Created by: Sheldon B. Michaels +SVG font conversion by: Windell H. Oskay +A derivative of: Mountains of Christmas +Designer: Crystal Kluge, Tart Workshop +Link: http://www.tartworkshop.com +Google font page: https://fonts.google.com/specimen/Mountains+of+Christmas +Note: SIL OFL per metadata; Google cites Apache License, version 2.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/hershey_text_alternative/svg_fonts/EMSFelix.svg b/extensions/fablabchemnitz/hershey_text_alternative/svg_fonts/EMSFelix.svg new file mode 100644 index 00000000..7ab9b161 --- /dev/null +++ b/extensions/fablabchemnitz/hershey_text_alternative/svg_fonts/EMSFelix.svg @@ -0,0 +1,235 @@ + + + + + + +Font name: EMS Felix +License: SIL Open Font License http://scripts.sil.org/OFL +Created by: Sheldon B. Michaels +SVG font conversion by: Windell H. Oskay +A derivative of: Felipa +Designer: Fontstage +Link: https://twitter.com/fontstage +Google font page: https://fonts.google.com/specimen/Felipa + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/hershey_text_alternative/svg_fonts/EMSNixish.svg b/extensions/fablabchemnitz/hershey_text_alternative/svg_fonts/EMSNixish.svg new file mode 100644 index 00000000..6710f2b8 --- /dev/null +++ b/extensions/fablabchemnitz/hershey_text_alternative/svg_fonts/EMSNixish.svg @@ -0,0 +1,235 @@ + + + + + + +Font name: EMS Nixish +License: SIL Open Font License http://scripts.sil.org/OFL +Created by: Sheldon B. Michaels +SVG font conversion by: Windell H. Oskay +A derivative of: Nixie One +Designer: Jovanny Lemonad +Link: http://jovanny.ru +Google font page: https://fonts.google.com/specimen/Nixie+One + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/hershey_text_alternative/svg_fonts/EMSNixishItalic.svg b/extensions/fablabchemnitz/hershey_text_alternative/svg_fonts/EMSNixishItalic.svg new file mode 100644 index 00000000..df9c3aed --- /dev/null +++ b/extensions/fablabchemnitz/hershey_text_alternative/svg_fonts/EMSNixishItalic.svg @@ -0,0 +1,235 @@ + + + + + + +Font name: EMS Nixish Italic +License: SIL Open Font License http://scripts.sil.org/OFL +Created by: Sheldon B. Michaels +SVG font conversion by: Windell H. Oskay +A derivative of: Nixie One +Designer: Jovanny Lemonad +Link: http://jovanny.ru +Google font page: https://fonts.google.com/specimen/Nixie+One + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/hershey_text_alternative/svg_fonts/EMSOsmotron.svg b/extensions/fablabchemnitz/hershey_text_alternative/svg_fonts/EMSOsmotron.svg new file mode 100644 index 00000000..03f053c2 --- /dev/null +++ b/extensions/fablabchemnitz/hershey_text_alternative/svg_fonts/EMSOsmotron.svg @@ -0,0 +1,235 @@ + + + + + + +Font name: EMS Osmotron +License: SIL Open Font License http://scripts.sil.org/OFL +Created by: Sheldon B. Michaels +SVG font conversion by: Windell H. Oskay +A derivative of: Orbitron (Regular) +Designer: Matt McInerney, the League of Moveable Type +Link: https://www.theleagueofmoveabletype.com +Google font page: https://fonts.google.com/specimen/Orbitron + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/hershey_text_alternative/svg_fonts/EMSReadability.svg b/extensions/fablabchemnitz/hershey_text_alternative/svg_fonts/EMSReadability.svg new file mode 100644 index 00000000..88a59fe0 --- /dev/null +++ b/extensions/fablabchemnitz/hershey_text_alternative/svg_fonts/EMSReadability.svg @@ -0,0 +1,235 @@ + + + + + + +Font name: EMS Readability +License: SIL Open Font License http://scripts.sil.org/OFL +Created by: Sheldon B. Michaels +SVG font conversion by: Windell H. Oskay +A derivative of: Source Sans Pro-Light +Designer: Paul D. Hunt, Adobe +Link: http://www.adobe.com +Google font page: https://fonts.google.com/specimen/Source+Sans+Pro + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/hershey_text_alternative/svg_fonts/EMSReadabilityItalic.svg b/extensions/fablabchemnitz/hershey_text_alternative/svg_fonts/EMSReadabilityItalic.svg new file mode 100644 index 00000000..b4d8efeb --- /dev/null +++ b/extensions/fablabchemnitz/hershey_text_alternative/svg_fonts/EMSReadabilityItalic.svg @@ -0,0 +1,235 @@ + + + + + + +Font name: EMS Readability Italic +License: SIL Open Font License http://scripts.sil.org/OFL +Created by: Sheldon B. Michaels +SVG font conversion by: Windell H. Oskay +A derivative of: Source Sans Pro-Light +Designer: Paul D. Hunt, Adobe +Link: http://www.adobe.com +Google font page: https://fonts.google.com/specimen/Source+Sans+Pro + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/hershey_text_alternative/svg_fonts/EMSTech.svg b/extensions/fablabchemnitz/hershey_text_alternative/svg_fonts/EMSTech.svg new file mode 100644 index 00000000..0b2f1080 --- /dev/null +++ b/extensions/fablabchemnitz/hershey_text_alternative/svg_fonts/EMSTech.svg @@ -0,0 +1,236 @@ + + + + + + + +Font name: EMS Tech +License: SIL Open Font License http://scripts.sil.org/OFL +Created by: Sheldon B. Michaels +SVG font conversion by: Windell H. Oskay +A derivative of: Architects Daughter +Designer: Kimberly Geswein, Kimberly Geswein Fonts +Link: http://www.kimberlygeswein.com/ +Google font page: https://fonts.google.com/specimen/Architects+Daughter + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/hershey_text_alternative/svg_fonts/HersheyGothEnglish.svg b/extensions/fablabchemnitz/hershey_text_alternative/svg_fonts/HersheyGothEnglish.svg new file mode 100644 index 00000000..d7e95b53 --- /dev/null +++ b/extensions/fablabchemnitz/hershey_text_alternative/svg_fonts/HersheyGothEnglish.svg @@ -0,0 +1,261 @@ + + + + + + +Font name: Hershey Gothic English + +Originally prepared in 2011 and converted to SVG fonts +in 2019 by Windell H. Oskay, www.evilmadscientist.com + +Contents adapted from emergent.unpythonic.net/software/hershey + by way of "Hershey Fonts in SVG" by Marty McGuire + http://www.thingiverse.com/thing:6168 + +------------------------------------------------------------------- +The Hershey Fonts are a set of vector fonts with a liberal license. + +USE RESTRICTION: + This distribution of the Hershey Fonts may be used by anyone for + any purpose, commercial or otherwise, providing that: + 1. The following acknowledgements must be distributed with + the font data: + - The Hershey Fonts were originally created by Dr. + A. V. Hershey while working at the U. S. + National Bureau of Standards. + - The format of the Font data in this distribution + was originally created by + James Hurt + Cognition, Inc. + 900 Technology Park Drive + Billerica, MA 01821 + (mit-eddie!ci-dandelion!hurt) + 2. The font data in this distribution may be converted into + any other format *EXCEPT* the format distributed by + the U.S. NTIS where each point is described + in eight bytes as "xxx yyy:", where xxx and yyy are + the coordinate values as ASCII numbers. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/hershey_text_alternative/svg_fonts/HersheySans1.svg b/extensions/fablabchemnitz/hershey_text_alternative/svg_fonts/HersheySans1.svg new file mode 100644 index 00000000..9321d2e3 --- /dev/null +++ b/extensions/fablabchemnitz/hershey_text_alternative/svg_fonts/HersheySans1.svg @@ -0,0 +1,260 @@ + + + + + + +Font name: Hershey Sans 1-stroke + +Originally prepared in 2011 and converted to SVG fonts +in 2019 by Windell H. Oskay, www.evilmadscientist.com + +Contents adapted from emergent.unpythonic.net/software/hershey + by way of "Hershey Fonts in SVG" by Marty McGuire + http://www.thingiverse.com/thing:6168 + +------------------------------------------------------------------- +The Hershey Fonts are a set of vector fonts with a liberal license. + +USE RESTRICTION: + This distribution of the Hershey Fonts may be used by anyone for + any purpose, commercial or otherwise, providing that: + 1. The following acknowledgements must be distributed with + the font data: + - The Hershey Fonts were originally created by Dr. + A. V. Hershey while working at the U. S. + National Bureau of Standards. + - The format of the Font data in this distribution + was originally created by + James Hurt + Cognition, Inc. + 900 Technology Park Drive + Billerica, MA 01821 + (mit-eddie!ci-dandelion!hurt) + 2. The font data in this distribution may be converted into + any other format *EXCEPT* the format distributed by + the U.S. NTIS where each point is described + in eight bytes as "xxx yyy:", where xxx and yyy are + the coordinate values as ASCII numbers. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/hershey_text_alternative/svg_fonts/HersheySansMed.svg b/extensions/fablabchemnitz/hershey_text_alternative/svg_fonts/HersheySansMed.svg new file mode 100644 index 00000000..d586e096 --- /dev/null +++ b/extensions/fablabchemnitz/hershey_text_alternative/svg_fonts/HersheySansMed.svg @@ -0,0 +1,260 @@ + + + + + + +Font name: Hershey Sans medium + +Originally prepared in 2011 and converted to SVG fonts +in 2019 by Windell H. Oskay, www.evilmadscientist.com + +Contents adapted from emergent.unpythonic.net/software/hershey + by way of "Hershey Fonts in SVG" by Marty McGuire + http://www.thingiverse.com/thing:6168 + +------------------------------------------------------------------- +The Hershey Fonts are a set of vector fonts with a liberal license. + +USE RESTRICTION: + This distribution of the Hershey Fonts may be used by anyone for + any purpose, commercial or otherwise, providing that: + 1. The following acknowledgements must be distributed with + the font data: + - The Hershey Fonts were originally created by Dr. + A. V. Hershey while working at the U. S. + National Bureau of Standards. + - The format of the Font data in this distribution + was originally created by + James Hurt + Cognition, Inc. + 900 Technology Park Drive + Billerica, MA 01821 + (mit-eddie!ci-dandelion!hurt) + 2. The font data in this distribution may be converted into + any other format *EXCEPT* the format distributed by + the U.S. NTIS where each point is described + in eight bytes as "xxx yyy:", where xxx and yyy are + the coordinate values as ASCII numbers. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/hershey_text_alternative/svg_fonts/HersheyScript1.svg b/extensions/fablabchemnitz/hershey_text_alternative/svg_fonts/HersheyScript1.svg new file mode 100644 index 00000000..202db1e2 --- /dev/null +++ b/extensions/fablabchemnitz/hershey_text_alternative/svg_fonts/HersheyScript1.svg @@ -0,0 +1,261 @@ + + + + + + +Font name: Hershey Script 1-stroke + +Originally prepared in 2011 and converted to SVG fonts +in 2019 by Windell H. Oskay, www.evilmadscientist.com + +Contents adapted from emergent.unpythonic.net/software/hershey + by way of "Hershey Fonts in SVG" by Marty McGuire + http://www.thingiverse.com/thing:6168 + +------------------------------------------------------------------- +The Hershey Fonts are a set of vector fonts with a liberal license. + +USE RESTRICTION: + This distribution of the Hershey Fonts may be used by anyone for + any purpose, commercial or otherwise, providing that: + 1. The following acknowledgements must be distributed with + the font data: + - The Hershey Fonts were originally created by Dr. + A. V. Hershey while working at the U. S. + National Bureau of Standards. + - The format of the Font data in this distribution + was originally created by + James Hurt + Cognition, Inc. + 900 Technology Park Drive + Billerica, MA 01821 + (mit-eddie!ci-dandelion!hurt) + 2. The font data in this distribution may be converted into + any other format *EXCEPT* the format distributed by + the U.S. NTIS where each point is described + in eight bytes as "xxx yyy:", where xxx and yyy are + the coordinate values as ASCII numbers. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/hershey_text_alternative/svg_fonts/HersheyScriptMed.svg b/extensions/fablabchemnitz/hershey_text_alternative/svg_fonts/HersheyScriptMed.svg new file mode 100644 index 00000000..3c734699 --- /dev/null +++ b/extensions/fablabchemnitz/hershey_text_alternative/svg_fonts/HersheyScriptMed.svg @@ -0,0 +1,261 @@ + + + + + + +Font name: Hershey Script medium + +Originally prepared in 2011 and converted to SVG fonts +in 2019 by Windell H. Oskay, www.evilmadscientist.com + +Contents adapted from emergent.unpythonic.net/software/hershey + by way of "Hershey Fonts in SVG" by Marty McGuire + http://www.thingiverse.com/thing:6168 + +------------------------------------------------------------------- +The Hershey Fonts are a set of vector fonts with a liberal license. + +USE RESTRICTION: + This distribution of the Hershey Fonts may be used by anyone for + any purpose, commercial or otherwise, providing that: + 1. The following acknowledgements must be distributed with + the font data: + - The Hershey Fonts were originally created by Dr. + A. V. Hershey while working at the U. S. + National Bureau of Standards. + - The format of the Font data in this distribution + was originally created by + James Hurt + Cognition, Inc. + 900 Technology Park Drive + Billerica, MA 01821 + (mit-eddie!ci-dandelion!hurt) + 2. The font data in this distribution may be converted into + any other format *EXCEPT* the format distributed by + the U.S. NTIS where each point is described + in eight bytes as "xxx yyy:", where xxx and yyy are + the coordinate values as ASCII numbers. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/hershey_text_alternative/svg_fonts/HersheySerifBold.svg b/extensions/fablabchemnitz/hershey_text_alternative/svg_fonts/HersheySerifBold.svg new file mode 100644 index 00000000..193977b0 --- /dev/null +++ b/extensions/fablabchemnitz/hershey_text_alternative/svg_fonts/HersheySerifBold.svg @@ -0,0 +1,261 @@ + + + + + + +Font name: Hershey Serif bold + +Originally prepared in 2011 and converted to SVG fonts +in 2019 by Windell H. Oskay, www.evilmadscientist.com + +Contents adapted from emergent.unpythonic.net/software/hershey + by way of "Hershey Fonts in SVG" by Marty McGuire + http://www.thingiverse.com/thing:6168 + +------------------------------------------------------------------- +The Hershey Fonts are a set of vector fonts with a liberal license. + +USE RESTRICTION: + This distribution of the Hershey Fonts may be used by anyone for + any purpose, commercial or otherwise, providing that: + 1. The following acknowledgements must be distributed with + the font data: + - The Hershey Fonts were originally created by Dr. + A. V. Hershey while working at the U. S. + National Bureau of Standards. + - The format of the Font data in this distribution + was originally created by + James Hurt + Cognition, Inc. + 900 Technology Park Drive + Billerica, MA 01821 + (mit-eddie!ci-dandelion!hurt) + 2. The font data in this distribution may be converted into + any other format *EXCEPT* the format distributed by + the U.S. NTIS where each point is described + in eight bytes as "xxx yyy:", where xxx and yyy are + the coordinate values as ASCII numbers. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/hershey_text_alternative/svg_fonts/HersheySerifBoldItalic.svg b/extensions/fablabchemnitz/hershey_text_alternative/svg_fonts/HersheySerifBoldItalic.svg new file mode 100644 index 00000000..9dcf9e7a --- /dev/null +++ b/extensions/fablabchemnitz/hershey_text_alternative/svg_fonts/HersheySerifBoldItalic.svg @@ -0,0 +1,262 @@ + + + + + + +Font name: Hershey Serif bold italic + +Originally prepared in 2011 and converted to SVG fonts +in 2019 by Windell H. Oskay, www.evilmadscientist.com + +Contents adapted from emergent.unpythonic.net/software/hershey + by way of "Hershey Fonts in SVG" by Marty McGuire + http://www.thingiverse.com/thing:6168 + +------------------------------------------------------------------- +The Hershey Fonts are a set of vector fonts with a liberal license. + +USE RESTRICTION: + This distribution of the Hershey Fonts may be used by anyone for + any purpose, commercial or otherwise, providing that: + 1. The following acknowledgements must be distributed with + the font data: + - The Hershey Fonts were originally created by Dr. + A. V. Hershey while working at the U. S. + National Bureau of Standards. + - The format of the Font data in this distribution + was originally created by + James Hurt + Cognition, Inc. + 900 Technology Park Drive + Billerica, MA 01821 + (mit-eddie!ci-dandelion!hurt) + 2. The font data in this distribution may be converted into + any other format *EXCEPT* the format distributed by + the U.S. NTIS where each point is described + in eight bytes as "xxx yyy:", where xxx and yyy are + the coordinate values as ASCII numbers. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/hershey_text_alternative/svg_fonts/HersheySerifMed.svg b/extensions/fablabchemnitz/hershey_text_alternative/svg_fonts/HersheySerifMed.svg new file mode 100644 index 00000000..22ecabdf --- /dev/null +++ b/extensions/fablabchemnitz/hershey_text_alternative/svg_fonts/HersheySerifMed.svg @@ -0,0 +1,260 @@ + + + + + + +Font name: Hershey Serif medium + +Originally prepared in 2011 and converted to SVG fonts +in 2019 by Windell H. Oskay, www.evilmadscientist.com + +Contents adapted from emergent.unpythonic.net/software/hershey + by way of "Hershey Fonts in SVG" by Marty McGuire + http://www.thingiverse.com/thing:6168 + +------------------------------------------------------------------- +The Hershey Fonts are a set of vector fonts with a liberal license. + +USE RESTRICTION: + This distribution of the Hershey Fonts may be used by anyone for + any purpose, commercial or otherwise, providing that: + 1. The following acknowledgements must be distributed with + the font data: + - The Hershey Fonts were originally created by Dr. + A. V. Hershey while working at the U. S. + National Bureau of Standards. + - The format of the Font data in this distribution + was originally created by + James Hurt + Cognition, Inc. + 900 Technology Park Drive + Billerica, MA 01821 + (mit-eddie!ci-dandelion!hurt) + 2. The font data in this distribution may be converted into + any other format *EXCEPT* the format distributed by + the U.S. NTIS where each point is described + in eight bytes as "xxx yyy:", where xxx and yyy are + the coordinate values as ASCII numbers. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/hershey_text_alternative/svg_fonts/HersheySerifMedItalic.svg b/extensions/fablabchemnitz/hershey_text_alternative/svg_fonts/HersheySerifMedItalic.svg new file mode 100644 index 00000000..5b7a37fe --- /dev/null +++ b/extensions/fablabchemnitz/hershey_text_alternative/svg_fonts/HersheySerifMedItalic.svg @@ -0,0 +1,260 @@ + + + + + + +Font name: Hershey Serif medium italic + +Originally prepared in 2011 and converted to SVG fonts +in 2019 by Windell H. Oskay, www.evilmadscientist.com + +Contents adapted from emergent.unpythonic.net/software/hershey + by way of "Hershey Fonts in SVG" by Marty McGuire + http://www.thingiverse.com/thing:6168 + +------------------------------------------------------------------- +The Hershey Fonts are a set of vector fonts with a liberal license. + +USE RESTRICTION: + This distribution of the Hershey Fonts may be used by anyone for + any purpose, commercial or otherwise, providing that: + 1. The following acknowledgements must be distributed with + the font data: + - The Hershey Fonts were originally created by Dr. + A. V. Hershey while working at the U. S. + National Bureau of Standards. + - The format of the Font data in this distribution + was originally created by + James Hurt + Cognition, Inc. + 900 Technology Park Drive + Billerica, MA 01821 + (mit-eddie!ci-dandelion!hurt) + 2. The font data in this distribution may be converted into + any other format *EXCEPT* the format distributed by + the U.S. NTIS where each point is described + in eight bytes as "xxx yyy:", where xxx and yyy are + the coordinate values as ASCII numbers. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/hershey_text_alternative/svg_fonts/OFL.txt b/extensions/fablabchemnitz/hershey_text_alternative/svg_fonts/OFL.txt new file mode 100644 index 00000000..1456c180 --- /dev/null +++ b/extensions/fablabchemnitz/hershey_text_alternative/svg_fonts/OFL.txt @@ -0,0 +1,97 @@ +Copyright (c) , (), +with Reserved Font Name . +Copyright (c) , (), +with Reserved Font Name . +Copyright (c) , (). + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/extensions/fablabchemnitz/hex_tiles/hex_tiles.inx b/extensions/fablabchemnitz/hex_tiles/hex_tiles.inx new file mode 100644 index 00000000..8118bcb6 --- /dev/null +++ b/extensions/fablabchemnitz/hex_tiles/hex_tiles.inx @@ -0,0 +1,20 @@ + + + Hex Tiles + fablabchemnitz.de.hex_tiles + 19 + 2 + 2 + 15 + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/hex_tiles/hex_tiles.py b/extensions/fablabchemnitz/hex_tiles/hex_tiles.py new file mode 100644 index 00000000..fd568710 --- /dev/null +++ b/extensions/fablabchemnitz/hex_tiles/hex_tiles.py @@ -0,0 +1,457 @@ +#!/usr/bin/env python3 +# Copyright 2016 Luke Phillips (lukerazor@hotmail.com) +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +#along with this program; if not, write to the Free Software +#Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +from lxml import etree +import inkex +import copy +import math + +FOLD_GAP = 5 +CROP_GAP = 2 +CROP_LENGTH = 3 + +inkex.NSS[u'cs'] = u'http://www.razorfoss.org/tuckboxextension/' + +def PrintDebug(string): + inkex.utils.debug( _(str(string)) ) + +def RoundAndDeduplicatePoints(points): + return sorted(list(set(map(lambda x: round(x, 3), points)))) + +class Point(): + def __init__(self, x, y): + self.x = x + self.y = y + + def rotate(self, angle, origin): + """ + Rotate a point counterclockwise by a given angle around a given origin. + + The angle should be given in degrees. + """ + rads = math.radians(angle) + newX = origin.x + math.cos(rads) * (self.x - origin.x) - math.sin(rads) * (self.y - origin.y) + newY = origin.y + math.sin(rads) * (self.x - origin.x) + math.cos(rads) * (self.y - origin.y) + + return Point(newX, newY) + + def add(self, point): + return Point(self.x + point.x, self.y + point.y) + + @staticmethod + def parsePoint(pointString): + x, y = map(lambda v: float(v), pointString.split(",")) + return Point(x, y) + + @staticmethod + def parse(pointString, orientationString=None): + p1 = Point.parsePoint(pointString) + p = Point(p1.x, p1.y) + + if orientationString != None: + po = Point.parsePoint(orientationString) + p = p1.add(po.rotate(270, Point(0, 0))) + + return p + +class HexGeneratorBase(object): + def __init__(self, hexDiameter, hexMargin, bleedMargin, pageWidth, pageHeight, pageMargin, unitConverterFunc): + self.UnitConverterFunc = unitConverterFunc + self.HexDiameter = hexDiameter + self.HexMargin = hexMargin + self.BleedMargin = bleedMargin + + self.PageWidth = pageWidth + self.PageHeight = pageHeight + self.PageMargin = pageMargin + + self.ContainerWidth = -1 + self.ContainerHeight = -1 + + def CalcPageLeftMargin(self): + return (self.PageWidth - self.ContentWidth) / 2.0 + + def CalcPageBottomMargin(self): + return (self.PageHeight - self.ContentHeight) / 2.0 + + def DrawGuide(self, xmlParent, xpos, ypos): + posString = "{},{}".format(xpos, ypos) + attribs = {'position': posString, 'orientation': posString} + + etree.SubElement(xmlParent, inkex.addNS('guide',"sodipodi"), attribs) + + def DrawAngledGuide(self, xmlParent, xpos, ypos, angle): + # Angles are taken from the horizontal axis, positive angles move clockwise + posString = "{},{}".format(xpos, ypos) + orientationString = "{}, {}".format(math.sin(math.radians(angle)), math.cos(math.radians(angle))) + attribs = {'position': posString, 'orientation': orientationString} + + etree.SubElement(xmlParent, inkex.addNS('guide',"sodipodi"), attribs) + + def ConvertPoint(self, p): + # convert point into svg approriate values, including catering for inkscapes "alternative" axis sytem ie 0, 0 is bottom left not top left + newX = self.UnitConverterFunc("{}mm".format(p.x)) + newY = self.PageHeight - self.UnitConverterFunc("{}mm".format(p.y)) + + return Point(newX, newY) + + def DrawLine(self, xmlParent, p1, p2): + cp1 = self.ConvertPoint(p1) + cp2 = self.ConvertPoint(p2) + + pathStr = "M {},{} {}, {}".format(cp1.x, cp1.y, cp2.x, cp2.y) + style = {'stroke': '#000000', 'stroke-width': self.UnitConverterFunc('0.25mm'), 'fill': 'none'} + attribs = {'style': str(inkex.Style(style)), 'd': pathStr} + + etree.SubElement(xmlParent, inkex.addNS('path','svg'), attribs ) + + def DrawVerticleGuides(self, xmlParent, positions, gap): + curPos = self.CalcPageLeftMargin() + lastPos = -1 + while curPos + self.ContainerWidth <= self.PageWidth - self.PageMargin: + for offset in positions: + curPos += offset + if curPos != lastPos: # don't double draw + self.DrawGuide(xmlParent, curPos, 0) + + lastPos = curPos + + curPos += gap + + def DrawHorizontalGuides(self, xmlParent, positions, gap): + curPos = self.CalcPageBottomMargin() + lastPos = -1 + while curPos + self.ContainerHeight <= self.PageHeight - self.PageMargin: + for offset in positions: + curPos += offset + if curPos != lastPos: # don't double draw + self.DrawGuide(xmlParent, 0, curPos) + + lastPos = curPos + + curPos += gap + + def DrawAngledGuides(self, xmlParent, offsetPositions, angle, gap): + + numExtraTopContainers = 0 + numExtraBottomContainers = 0 + if angle > 0: + numExtraTopContainers = math.ceil(self.NumContainersAcross / 2.0) - 1 + if angle < 0: + numExtraBottomContainers = math.ceil(self.NumContainersAcross / 2.0) - 1 + + # draw sets of guides per point avoiding duplicate lines + # NOTE: Effectivly we draw the bottom guides first and then move up (ie y is increasing) + curPos = self.CalcPageBottomMargin() - numExtraBottomContainers * self.ContainerHeight + lastPos = -1 + + while curPos + self.ContainerHeight <= self.PageHeight - self.PageMargin + numExtraTopContainers*self.ContainerHeight: + for offset in offsetPositions: + curPos += offset + if curPos != lastPos: # don't double draw + self.DrawAngledGuide(xmlParent, self.CalcPageLeftMargin() + self.ContainerWidth/2, curPos, angle) + + lastPos = curPos + + curPos += gap + + def GenerateFoldLines(self, xmlParent): + lines = self.GetFoldLinePositions() + + for line in lines: + self.DrawLine(xmlParent, line[0], line[1]) + + def GenerateCropMarks(self, xmlParent): + lines = self.GetCropMarkLines() + + for line in lines: + self.DrawLine(xmlParent, line[0], line[1]) + + @staticmethod + def CalculateBorderVerticalOffset(borderWidth): + if borderWidth == 0: + return 0 + + return borderWidth / math.sin(math.radians(60)) + + @staticmethod + def CreateHexGenerator(hexDiameter, hexMargin, bleedMargin, pageWidth, pageHeight, pageMargin, unitConverterFunc): + return SimpleHexGridLineGenerator(hexDiameter, hexMargin, bleedMargin, pageWidth, pageHeight, pageMargin, unitConverterFunc) + +class SimpleHexGridLineGenerator(HexGeneratorBase): + def __init__(self, hexDiameter, hexMargin, bleedMargin, pageWidth, pageHeight, pageMargin, unitConverterFunc): + super(SimpleHexGridLineGenerator, self).__init__(hexDiameter, hexMargin, bleedMargin, pageWidth, pageHeight, pageMargin, unitConverterFunc) + + self.HexWidth = math.sqrt(3) * (hexDiameter/2) + self.ContainerWidth = self.HexWidth + 2*bleedMargin + self.ContainerHeight = hexDiameter + 2*HexGeneratorBase.CalculateBorderVerticalOffset(bleedMargin) + + # num across + # num down + self.NumContainersAcross = int((self.PageWidth - 2*self.PageMargin) // self.ContainerWidth) # round down division + self.NumContainersDown = int((self.PageHeight - 2*self.PageMargin) // self.ContainerHeight) # round down division + + # content sizes + self.ContentWidth = self.NumContainersAcross * self.ContainerWidth + self.ContentHeight = self.NumContainersDown * self.ContainerHeight + + def GenerateGuides(self, xmlParent): + verticalGuideOffsets = [ + 0, + self.BleedMargin, + self.HexMargin, + self.HexWidth - 2*self.HexMargin, + self.HexMargin, + self.BleedMargin + ] + + bleedVerticalOffset = HexGeneratorBase.CalculateBorderVerticalOffset(self.BleedMargin) + hexMarginVerticalOffset = HexGeneratorBase.CalculateBorderVerticalOffset(self.HexMargin) + horizontalGuideOffsets = [ + 0, + bleedVerticalOffset, + hexMarginVerticalOffset, + self.HexDiameter - 2*hexMarginVerticalOffset, + hexMarginVerticalOffset, + bleedVerticalOffset + ] + + self.DrawVerticleGuides(xmlParent, verticalGuideOffsets, 0) + self.DrawAngledGuides(xmlParent, horizontalGuideOffsets, -30, 0) + self.DrawAngledGuides(xmlParent, horizontalGuideOffsets, 30, 0) + + def GetFoldLinePositions(self): + return [] # no fold lines in simple grid + + def GetCropMarkLines(self): + lines = [] + + leftMargin = self.CalcPageLeftMargin() + bottomMargin = self.CalcPageBottomMargin() + bleedVerticalOffset = HexGeneratorBase.CalculateBorderVerticalOffset(self.BleedMargin) + + def CalcOppositeDeltaGivenAdjacentDelta(xdelta, angle): + return math.tan(math.radians(angle)) * xdelta + + #--------------------------------------------------------------------------------- + #determine all vertical crop marks, duplicates possible + # figure out the xpos' + vertical_xpos = [] + for idx in range(self.NumContainersAcross): + leftX = self.BleedMargin + rightX = leftX + self.HexWidth + containerOffset = leftMargin + idx * self.ContainerWidth + + vertical_xpos.append(containerOffset + leftX) + vertical_xpos.append(containerOffset + rightX) + + vertical_xpos = RoundAndDeduplicatePoints(vertical_xpos) + + # add to list of lines + vertical_ypos = [bottomMargin - CROP_GAP, self.PageHeight - bottomMargin + CROP_GAP + CROP_LENGTH] + for xpos in vertical_xpos: + for ypos in vertical_ypos: + lines.append([ + Point(xpos, ypos), + Point(xpos, ypos - CROP_LENGTH) + ]) + + #--------------------------------------------------------------------------------- + # figure out NW, SW, NE and SE crop marks for both sides of the page + vertical_ypos_nw = [] + vertical_ypos_sw = [] + vertical_ypos_ne = [] + vertical_ypos_se = [] + + yoffset = CalcOppositeDeltaGivenAdjacentDelta(self.ContainerWidth/2 + CROP_GAP, 30) + + lastColumnHasHalfStep = (self.NumContainersAcross % 2) == 0 # an even numbered containers across means that the last column is 1/2 a continer up and has 1 less container + staggeredContainerOffset = 0 + if lastColumnHasHalfStep: + staggeredContainerOffset = self.ContainerHeight/2 + + for idx in range(self.NumContainersDown): + leftContainerOffset = idx * self.ContainerHeight + bottomMargin + rightContainerOffset = leftContainerOffset + staggeredContainerOffset + + bottomY = bleedVerticalOffset + topY = self.ContainerHeight - bleedVerticalOffset + + vertical_ypos_nw.append(leftContainerOffset + topY + yoffset) + vertical_ypos_nw.append(leftContainerOffset + bottomY + yoffset) + + vertical_ypos_sw.append(leftContainerOffset + topY - yoffset) + vertical_ypos_sw.append(leftContainerOffset + bottomY - yoffset) + + vertical_ypos_ne.append(rightContainerOffset + topY + yoffset) + vertical_ypos_ne.append(rightContainerOffset + bottomY + yoffset) + + vertical_ypos_se.append(rightContainerOffset + topY - yoffset) + vertical_ypos_se.append(rightContainerOffset + bottomY - yoffset) + + # sort out a staggered last col + if lastColumnHasHalfStep: # if it's a half step column we need to remove the last container and add acouple of extra lines + vertical_ypos_ne = vertical_ypos_ne[:-2] + vertical_ypos_se = vertical_ypos_se[:-2] + vertical_ypos_ne.append(max(vertical_ypos_ne) + 2*bleedVerticalOffset) + vertical_ypos_se.append(min(vertical_ypos_se) - 2*bleedVerticalOffset) + + # remove duplicate positions + vertical_ypos_nw = RoundAndDeduplicatePoints(vertical_ypos_nw) + vertical_ypos_sw = RoundAndDeduplicatePoints(vertical_ypos_sw) + vertical_ypos_ne = RoundAndDeduplicatePoints(vertical_ypos_ne) + vertical_ypos_se = RoundAndDeduplicatePoints(vertical_ypos_se) + + # add to list of lines + xpos_left = leftMargin - CROP_GAP + xpos_right = self.PageWidth - leftMargin + CROP_GAP + yoffset = CalcOppositeDeltaGivenAdjacentDelta(CROP_LENGTH, 30) + + for ypos in vertical_ypos_nw: + lines.append([ + Point(xpos_left, ypos), + Point(xpos_left - CROP_LENGTH, ypos + yoffset) + ]) + + for ypos in vertical_ypos_sw: + lines.append([ + Point(xpos_left, ypos), + Point(xpos_left - CROP_LENGTH, ypos - yoffset) + ]) + + for ypos in vertical_ypos_ne: + lines.append([ + Point(xpos_right, ypos), + Point(xpos_right + CROP_LENGTH, ypos + yoffset) + ]) + + for ypos in vertical_ypos_se: + lines.append([ + Point(xpos_right, ypos), + Point(xpos_right + CROP_LENGTH, ypos - yoffset) + ]) + + #--------------------------------------------------------------------------------- + # figure out NW, SW, NE and SE crop marks for top and bottom of the page + xpos_nw = [] + xpos_sw = [] + xpos_ne = [] + xpos_se = [] + + xoffset_near = CalcOppositeDeltaGivenAdjacentDelta(bleedVerticalOffset + CROP_GAP, 60) + xoffset_far = CalcOppositeDeltaGivenAdjacentDelta(self.ContainerHeight - bleedVerticalOffset + CROP_GAP, 60) + + for idx in range(0, self.NumContainersAcross, 2): #we only need to do every other container because of the stepping + containerOffset = idx * self.ContainerWidth + leftMargin + topY = self.ContainerHeight - bleedVerticalOffset + bottomY = bleedVerticalOffset + xpos = self.ContainerWidth/2 + + xpos_nw.append(containerOffset + xpos - xoffset_near) + xpos_nw.append(containerOffset + xpos - xoffset_far) + + xpos_sw.append(containerOffset + xpos - xoffset_near) + xpos_sw.append(containerOffset + xpos - xoffset_far) + + xpos_ne.append(containerOffset + xpos + xoffset_near) + xpos_ne.append(containerOffset + xpos + xoffset_far) + + xpos_se.append(containerOffset + xpos + xoffset_near) + xpos_se.append(containerOffset + xpos + xoffset_far) + + + # remove duplicate positions + xpos_nw = RoundAndDeduplicatePoints(xpos_nw) + xpos_sw = RoundAndDeduplicatePoints(xpos_sw) + xpos_ne = RoundAndDeduplicatePoints(xpos_ne) + xpos_se = RoundAndDeduplicatePoints(xpos_se) + + # add to list of lines + ypos_bottom = bottomMargin - CROP_GAP + ypos_top = self.PageHeight - bottomMargin + CROP_GAP + yoffset = CalcOppositeDeltaGivenAdjacentDelta(CROP_LENGTH, 30) + + for xpos in xpos_nw: + if xpos > 0 and xpos < self.PageWidth: + lines.append([ + Point(xpos, ypos_top), + Point(xpos - CROP_LENGTH, ypos_top + yoffset) + ]) + + for xpos in xpos_sw: + if xpos > 0 and xpos < self.PageWidth: + lines.append([ + Point(xpos, ypos_bottom), + Point(xpos - CROP_LENGTH, ypos_bottom - yoffset) + ]) + + for xpos in xpos_ne: + if xpos > 0 and xpos < self.PageWidth: + lines.append([ + Point(xpos, ypos_top), + Point(xpos + CROP_LENGTH, ypos_top + yoffset) + ]) + + for xpos in xpos_se: + if xpos > 0 and xpos < self.PageWidth: + lines.append([ + Point(xpos, ypos_bottom), + Point(xpos + CROP_LENGTH, ypos_bottom - yoffset) + ]) + + #--------------------------------------------------------------------------------- + return lines + +class HexTiles(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument('-d', '--hex_diameter', type = float, dest = 'HexDiameter') + pars.add_argument('-c', '--hex_margin', type = float, dest = 'HexMargin') + pars.add_argument('-b', '--bleed_margin', type = float, dest = 'BleedMargin') + pars.add_argument('-p', '--page_margin', type = float, dest = 'PageMargin') + + def effect(self): + # find dimensions of page + pageWidth = self.svg.uutounit(self.svg.width, "mm") + pageHeight = self.svg.uutounit(self.svg.height, "mm") + + opt = self.options + + guideParent = self.document.xpath('//sodipodi:namedview',namespaces=inkex.NSS)[0] + + ### GUIDES + # remove all the existing guides + [node.delete() for node in self.document.xpath('//sodipodi:guide',namespaces=inkex.NSS)] + + # create the object generator + gen = HexGeneratorBase.CreateHexGenerator(opt.HexDiameter, opt.HexMargin, opt.BleedMargin, pageWidth, pageHeight, opt.PageMargin, self.svg.unittouu) + + gen.GenerateGuides(guideParent) + + ### CROP MARKS + # remove any existing 'Crop marks' layer + [node.delete() for node in self.document.xpath("//svg:g[@inkscape:label='Crop Marks']",namespaces=inkex.NSS)] + + svg = self.document.xpath('//svg:svg', namespaces=inkex.NSS)[0] + layer = etree.SubElement(svg, inkex.addNS('g',"svg"), {}) + layer.set(inkex.addNS('label', 'inkscape'), "Crop Marks") + layer.set(inkex.addNS('groupmode', 'inkscape'), 'layer') + #layer.set(inkex.addNS('insensitive', 'sodipodi'), 'true') + + gen.GenerateCropMarks(layer) + +if __name__ == '__main__': + HexTiles().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/ids_to_text/ids_to_text.inx b/extensions/fablabchemnitz/ids_to_text/ids_to_text.inx new file mode 100644 index 00000000..5b0bd50f --- /dev/null +++ b/extensions/fablabchemnitz/ids_to_text/ids_to_text.inx @@ -0,0 +1,35 @@ + + + Ids To Text + fablabchemnitz.de.ids_to_text + 10 + 255 + Roboto + + + + + + + + + + 0 + false + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/ids_to_text/ids_to_text.py b/extensions/fablabchemnitz/ids_to_text/ids_to_text.py new file mode 100644 index 00000000..eb9b14b1 --- /dev/null +++ b/extensions/fablabchemnitz/ids_to_text/ids_to_text.py @@ -0,0 +1,51 @@ +#!/usr/bin/env python3 + +import inkex +from inkex import TextElement, TextPath, Tspan +from inkex.bezier import csparea, cspcofm, csplength +from inkex.colors import Color + +class IdsToText(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument('--fontsize', type = int, default = '10', help = 'Font Size') + pars.add_argument('--color', type=Color, default = 255, help = 'Color') + pars.add_argument('--font', default = 'Roboto', help = 'Font Family') + pars.add_argument('--fontweight', default = 'bold', help = 'Font Weight') + pars.add_argument('--replaced', default = '', help = 'Text to replace') + pars.add_argument('--replacewith', default = '', help = 'Replace with this text') + pars.add_argument('--angle', type = float, dest = 'angle', default = 0, help = 'Rotation angle') + pars.add_argument('--capitals', type = inkex.Boolean, default = False, help = 'Capitalize') + + def effect(self): + if len(self.svg.selected) == 0: + inkex.errormsg("Please select some paths first.") + exit() + + for id, node in self.svg.selected.items(): + id = node.get('id') + self.group = node.getparent().add(TextElement()) + csp = node.path.transform(node.composed_transform()).to_superpath() + bbox = node.bounding_box() + tx, ty = bbox.center + anchor = 'middle' + + node = self.group + new = node.add(Tspan()) + new.set('sodipodi:role', 'line') + s = {'text-align': 'center', 'vertical-align': 'bottom', + 'text-anchor': 'middle', 'font-size': str(self.options.fontsize) + 'px', + 'font-weight': self.options.fontweight, 'font-style': 'normal', 'font-family': self.options.font, 'fill': str(self.options.color)} + new.set('style', str(inkex.Style(s))) + new.set('dy', '0') + + if self.options.capitals: + id = id.upper() + + new.text = id.replace(self.options.replaced, self.options.replacewith) + node.set('x', str(tx)) + node.set('y', str(ty)) + node.set('transform', 'rotate(%s, %s, %s)' % (-int(self.options.angle), tx, ty)) + +if __name__ == '__main__': + IdsToText().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/ifs_fractals/ifs_fractals.inx b/extensions/fablabchemnitz/ifs_fractals/ifs_fractals.inx new file mode 100644 index 00000000..9788f349 --- /dev/null +++ b/extensions/fablabchemnitz/ifs_fractals/ifs_fractals.inx @@ -0,0 +1,80 @@ + + + IFS Fractals + fablabchemnitz.de.ifs_fractals + + + 3 + + + + true + 0.5 + 0 + 0 + 0.5 + 0 + 0 + + + false + 0.5 + 0 + 0 + 0.5 + 1 + 0 + + + false + 0.5 + 0 + 0 + 0.5 + 0.5 + 1 + + + false + 0.5 + 0 + 0 + 0.5 + 0 + 0 + + + false + 0.5 + 0 + 0 + 0.5 + 0 + 0 + + + + + + + + + + + all + + + + + + + + diff --git a/extensions/fablabchemnitz/ifs_fractals/ifs_fractals.py b/extensions/fablabchemnitz/ifs_fractals/ifs_fractals.py new file mode 100644 index 00000000..1b0adb53 --- /dev/null +++ b/extensions/fablabchemnitz/ifs_fractals/ifs_fractals.py @@ -0,0 +1,72 @@ +#!/usr/bin/env python3 +# coding=utf-8 +# +# Copyright (C) 2020 Dylan Simon, dylan@dylex.net +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +""" +Perform fixed-depth IFS repeated duplicate-and-transform. +""" + +import inkex + +class IFSFractals(inkex.EffectExtension): + NXFORM = 5 + XFORM_PARAMS = list("ABCDEF") + + def add_arguments(self, pars): + pars.add_argument("--tab") + pars.add_argument("--iter", type=int, default=3, help="number of iterations") + for i in range(self.NXFORM): + pars.add_argument("--xform%d"%i, type=inkex.Boolean, default=False, help="enable transformation %d"%i) + for p in self.XFORM_PARAMS: + pars.add_argument("--%s%d"%(p,i), type=float, help="transformation matrix %d %s"%(i,p)) + + def effect(self): + xforms = [] + for i in range(self.NXFORM): + if getattr(self.options,'xform%d'%i): + t = [getattr(self.options,"%s%d"%(p,i)) for p in self.XFORM_PARAMS] + xforms.append(inkex.Transform(t)) + + if not xforms: + inkex.errormsg(_('There are no transforms to apply')) + return False + + if not self.svg.selected: + inkex.errormsg(_('There is no selection to duplicate')) + return False + + nodes = self.svg.selected.values() + grp = inkex.Group('IFS') + layer = self.svg.get_current_layer().add(grp) + + for i in range(self.options.iter): + n = [] + for node in nodes: + for x in xforms: + d = node.copy() + d.transform = x * d.transform + n.append(d) + g = inkex.Group('IFS iter %d'%i) + g.add(*n) + grp.add(g) + nodes = n + + return True + +if __name__ == '__main__': + IFSFractals().run() diff --git a/extensions/fablabchemnitz/image_triangulation/image_triangulation.inx b/extensions/fablabchemnitz/image_triangulation/image_triangulation.inx new file mode 100644 index 00000000..9ec1a8c5 --- /dev/null +++ b/extensions/fablabchemnitz/image_triangulation/image_triangulation.inx @@ -0,0 +1,26 @@ + + + Image Triangulation + fablabchemnitz.de.image_triangulation + + + 150 + 200 + 255 + false + false + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/image_triangulation/image_triangulation.py b/extensions/fablabchemnitz/image_triangulation/image_triangulation.py new file mode 100644 index 00000000..fb62ff7d --- /dev/null +++ b/extensions/fablabchemnitz/image_triangulation/image_triangulation.py @@ -0,0 +1,248 @@ +#!/usr/bin/env python3 +''' +Copyright (C) 2014 Nicola Romano', romano.nicola@gmail.com + +version 0.1 + 0.1: first working version + +------------------------------------------------------------------------ +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +------------------------------------------------------------------------ + +''' +import base64 +from io import BytesIO +import inkex +import os +from PIL import Image +from lxml import etree +import numpy as np +from scipy.spatial import Delaunay +from scipy.cluster.vq import kmeans2 +import cv2 +import urllib.request as urllib + +class ImageTriangulation(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument("-n", "--num_points", type=int, default=100, help="Number of points to be sampled") + pars.add_argument("-m", "--edge_thresh_min", type=int, default=200, help="Minimum threshold for edge detection") + pars.add_argument("-M", "--edge_thresh_max", type=int, default=255, help="Maximum threshold for edge detection") + pars.add_argument("-c", "--add_corners", type=inkex.Boolean, default=0, help="Use corners for triangulation?") + pars.add_argument("-g", "--gradient_fill", type=inkex.Boolean, default=0, help="Fill triangles with gradient?") + pars.add_argument("-b", "--tab", default='', help="The tab of the interface") + + def draw_SVG_path(self, points, closed, style, parent): + pathdesc = "M " + for p in points: + pathdesc = pathdesc + str(p[0]) + "," + str(p[1]) + " " + if closed == 1: + pathdesc = pathdesc + "Z" + path = etree.SubElement(parent, inkex.addNS('path','svg'), {'style' : str(inkex.Style(style)), 'd' : pathdesc}) + return path + + def checkImagePath(self, node): + """Embed the data of the selected Image Tag element""" + xlink = node.get('xlink:href') + if xlink and xlink[:5] == 'data:': + # No need, data alread embedded + return + + url = urllib.urlparse(xlink) + href = urllib.url2pathname(url.path) + + # Primary location always the filename itself. + path = self.absolute_href(href or '') + + # Backup directory where we can find the image + if not os.path.isfile(path): + path = node.get('sodipodi:absref', path) + + if not os.path.isfile(path): + inkex.errormsg('File not found "{}". Unable to embed image.').format(path) + return + + if (os.path.isfile(path)): + return path + + def effect(self): + + # Check we have something selected + if len(self.svg.selected) == 0: + inkex.errormsg("Please select an image.") + exit() + else: + # Check it is an image + for id, obj in self.svg.selected.items(): + if obj.tag[len(obj.tag)-5:] != "image": + inkex.errormsg("The selected object (" + id + ") is not an image, skipping.") + continue + else: + self.path = self.checkImagePath(obj) # This also ensures the file exists + + grpname = 'img_triangles' + # Make sure that the id/name is unique + index = 0 + while (str(self.svg.get_ids()) in grpname): + grpname = 'axis' + str(index) + index = index + 1 + + grp_name = grpname + grp_attribs = {inkex.addNS('label','inkscape'):grp_name} + # The group to put everything in + grp = etree.SubElement(self.svg.get_current_layer(), 'g', grp_attribs) + # Find image size and position in Inkscape + try: + self.img_x_pos = float(obj.get("x")) + self.img_y_pos = float(obj.get("y")) + except: + self.img_x_pos = 0 + self.img_y_pos = 0 + self.img_width = float(obj.get("width")) + self.img_height = float(obj.get("height")) + + if self.path is None: #check if image is embedded or linked + image_string = obj.get('{http://www.w3.org/1999/xlink}href') + # find comma position + i = 0 + while i < 40: + if image_string[i] == ',': + break + i = i + 1 + im = Image.open(BytesIO(base64.b64decode(image_string[i + 1:len(image_string)]))) + else: + im = Image.open(self.path) + + # IMPORTANT! + # The numpy array is accessed as im.data[row,column], that is data[y_coord, x_coord] + # Be careful not to pass coordinates as (x,y): rather use (y,x)! + im.data = np.asarray(im) + # The RGB components of all the pixels in the image + self.red, self.green, self.blue = im.data[:,:,0], im.data[:,:,1], im.data[:,:,2] + + # Find real image size + (self.img_real_width, self.img_real_height) = im.size + + self.doTriangulation(im, grp) + + # Converts image coordinates to screen coordinates + def imgToScreen(self, x, y): + newx = x / (self.img_real_width/self.img_width) + self.img_x_pos + newy = y / (self.img_real_height/self.img_height) + self.img_y_pos + return (newx, newy) + + def createLinearGradient(self, x1, y1, x2, y2, color1, color2, gradID): + attribs = { + 'x1' : str(x1), + 'y1' : str(y1), + 'x2' : str(x2), + 'y2' : str(y2), + 'id' : gradID, + 'gradientUnits' : "userSpaceOnUse", + '{'+inkex.NSS[u'xlink']+'}href': "#"+gradID + } + + svgdefs = self.document.getroot().find(inkex.addNS('defs', 'svg')) + gradient = etree.SubElement(svgdefs, inkex.addNS('linearGradient','svg'), attribs) + + attribs = { + 'offset' : "0%", + 'style' : "stop-color:"+color1+"; stop-opacity:1" + } + stop1 = etree.SubElement(gradient, inkex.addNS('stop','svg'), attribs) + attribs = { + 'offset' : "100%", + 'style' : "stop-color:"+color2+"; stop-opacity:1" + } + stop2 = etree.SubElement(gradient, inkex.addNS('stop','svg'), attribs) + return gradient + + def doTriangulation (self, im, grp): + # Read image with OpenCV + imcv = np.array(im) + #imcv = cv2.imread(self.path) + # Convert to grayscale + gray = cv2.cvtColor(imcv,cv2.COLOR_RGB2GRAY) + gray = np.float32(gray) + # Find edges + edges = cv2.Canny(imcv, self.options.edge_thresh_min, self.options.edge_thresh_max, 100) + # Find coordinates of the edges + coords = [(float(x),float(y)) for y, row in enumerate(edges) for x, col in enumerate(row) if col>0] + try: + pt, idx = kmeans2(np.array(coords), self.options.num_points, minit="points") + except ValueError: + inkex.utils.debug("Too much points. Reduce sampled points and try again!") + exit(1) + if self.options.add_corners: + # Add the four corners + corners = [(0, 0), + (self.img_real_width-1, 0), + (0, self.img_real_height-1), + (self.img_real_width-1, self.img_real_height-1)] + + pt = np.vstack((pt, corners)) + + # Perform Delaunay triangulation + tri = Delaunay(pt) + tri_coord = [(pt[t[0]], pt[t[1]], pt[t[2]]) for t in tri.simplices] + tri_colors = [( + (self.red[int(t[0][1]),int(t[0][0])], self.green[int(t[0][1]),int(t[0][0])], self.blue[int(t[0][1]),int(t[0][0])]), + (self.red[int(t[1][1]),int(t[1][0])], self.green[int(t[1][1]),int(t[1][0])], self.blue[int(t[1][1]),int(t[1][0])]), + (self.red[int(t[2][1]),int(t[2][0])], self.green[int(t[2][1]),int(t[2][0])], self.blue[int(t[2][1]),int(t[2][0])]) + ) + for t in tri_coord] + + for i, c in enumerate(tri_coord): + # Convert to screen coordinates + v0 = self.imgToScreen(c[0][0], c[0][1]) + v1 = self.imgToScreen(c[1][0], c[1][1]) + v2 = self.imgToScreen(c[2][0], c[2][1]) + col = tri_colors[i] + fill = "" + + if self.options.gradient_fill: + color1 = "rgb("+str(col[0][0])+","+str(col[0][1])+","+str(col[0][2])+")" + color2 = "rgb("+str(0.5*col[1][0]+0.5*col[2][0])+","+ \ + str(0.5*col[1][1]+0.5*col[2][1])+","+ \ + str(0.5*col[1][2]+0.5*col[2][2])+")" + gradID = 'linearGradient' + # Make sure that the id is inique + index = 0 + while (str(self.svg.get_ids()) in gradID): + gradID = 'linearGradient' + str(index) + index = index + 1 + + #self.doc_ids[gradID]=1 + + gradient = self.createLinearGradient(v0[0], v0[1], + 0.5*(v1[0]+v2[0]), 0.5*(v1[1]+v2[1]), + color1, color2, gradID) + fill = "url(#"+gradient.get("id")+")" + else: + fill = "rgb("+str(col[0][0])+","+str(col[0][1])+","+str(col[0][2])+")" + + tri_style = { + 'stroke-width' : '1px', + 'stroke-linecap' : 'round', + 'stroke-opacity' : '1', + 'fill' : fill, + 'fill-opacity' : '1', + 'stroke' : fill + } + + self.draw_SVG_path([v0, v1, v2], 1, tri_style, grp) + +if __name__ == '__main__': + ImageTriangulation().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/.eslintrc.json b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/.eslintrc.json new file mode 100644 index 00000000..87f6bce6 --- /dev/null +++ b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/.eslintrc.json @@ -0,0 +1,24 @@ +{ + "env": { + "browser": true + }, + "extends": "eslint:recommended", + "rules": { + "indent": [ + 2, + "tab" + ], + "linebreak-style": [ + 2, + "windows" + ], + "quotes": [ + 2, + "single" + ], + "semi": [ + 2, + "always" + ] + } +} \ No newline at end of file diff --git a/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/.project b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/.project new file mode 100644 index 00000000..4a32755f --- /dev/null +++ b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/.project @@ -0,0 +1,17 @@ + + + imagetracerjs + + + + + + org.eclipse.wst.jsdt.core.javascriptValidator + + + + + + org.eclipse.wst.jsdt.core.jsNature + + diff --git a/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/.settings/.jsdtscope b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/.settings/.jsdtscope new file mode 100644 index 00000000..c19fafc7 --- /dev/null +++ b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/.settings/.jsdtscope @@ -0,0 +1,6 @@ + + + + + + diff --git a/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/.settings/org.eclipse.wst.jsdt.ui.superType.container b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/.settings/org.eclipse.wst.jsdt.ui.superType.container new file mode 100644 index 00000000..49c8cd4f --- /dev/null +++ b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/.settings/org.eclipse.wst.jsdt.ui.superType.container @@ -0,0 +1 @@ +org.eclipse.wst.jsdt.launching.JRE_CONTAINER \ No newline at end of file diff --git a/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/.settings/org.eclipse.wst.jsdt.ui.superType.name b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/.settings/org.eclipse.wst.jsdt.ui.superType.name new file mode 100644 index 00000000..11006e2a --- /dev/null +++ b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/.settings/org.eclipse.wst.jsdt.ui.superType.name @@ -0,0 +1 @@ +Global \ No newline at end of file diff --git a/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/LICENSE b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/LICENSE new file mode 100644 index 00000000..a84c3956 --- /dev/null +++ b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/LICENSE @@ -0,0 +1,25 @@ +This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or +distribute this software, either in source code form or as a compiled +binary, for any purpose, commercial or non-commercial, and by any +means. + +In jurisdictions that recognize copyright laws, the author or authors +of this software dedicate any and all copyright interest in the +software to the public domain. We make this dedication for the benefit +of the public at large and to the detriment of our heirs and +successors. We intend this dedication to be an overt act of +relinquishment in perpetuity of all present and future rights to this +software under copyright law. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +For more information, please refer to + diff --git a/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/README.md b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/README.md new file mode 100644 index 00000000..6e9d6c9d --- /dev/null +++ b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/README.md @@ -0,0 +1,306 @@ +# imagetracerjs +![alt Bitmap to Svg](docimages/s1.png) + +Simple raster image tracer and vectorizer written in JavaScript. + +--- + +## Table of contents +- [Getting started](#getting-started) +- [News](#news) +- [API](#api) +- [Options](#options) +- [Examples](#examples) +- [Process overview](#process-overview) +- [License](#license) + +--- + +## Getting started + +### Using in the Browser +Include the script: +```javascript + +``` +Then: +```javascript +// Loading an image, tracing with the 'posterized2' option preset, and appending the SVG to an element with id="svgcontainer" +ImageTracer.imageToSVG( + + 'panda.png', /* input filename / URL */ + + function(svgstr){ ImageTracer.appendSVGString( svgstr, 'svgcontainer' ); }, /* callback function to run on SVG string result */ + + 'posterized2' /* Option preset */ + +); +``` + +### Using with Node.js + +Node.js Command line interface example: + +``` +imagetracerjs/nodecli>node nodecli ../panda.png outfilename panda.svg scale 10 +``` + +Expected result: + +``` +imagetracerjs/nodecli/panda.svg was saved! +``` + +--- + +## News + +### 1.2.6 + - FIXED: hole shape parent search (Issues #31 #39) + - FIXED: Handle (absolute) paths in CLI correctly Issue #42 + +### 1.2.5 + - RGBA ImageData check in colorquantization(), solving Issue #24 and #18 + +### 1.2.4 + - ```options.layering``` : default 0 = sequential, new method ; 1 = parallel, old method. (Enhancement Issue #17) + - case insensitive option preset names + - README.md reorganizing + +[Version history](https://github.com/jankovicsandras/imagetracerjs/blob/master/version_history.md) + +--- + +## API +|Function name|Arguments|Returns|Run type| +|-------------|---------|-------|--------| +|```imageToSVG```|```image_url /*string*/ , callback /*function*/ , options /*optional object or preset name*/```|Nothing, ```callback(svgstring)``` will be executed|Asynchronous, Browser only| +|```imagedataToSVG```|```imagedata /*object*/ , options /*optional object or preset name*/```|```svgstring /*string*/```|Synchronous, Browser & Node.js| +|```imageToTracedata```|```image_url /*string*/ , callback /*function*/ , options /*optional object or preset name*/```|Nothing, ```callback(tracedata)``` will be executed|Asynchronous, Browser only| +|```imagedataToTracedata```|```imagedata /*object*/ , options /*optional object or preset name*/```|```tracedata /*object*/```|Synchronous, Browser & Node.js| + +```imagedata``` is standard [ImageData](https://developer.mozilla.org/en-US/docs/Web/API/ImageData) here, ```canvas``` is [canvas](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/canvas) . + +### Helper Functions (Browser only) +|Function name|Arguments|Returns|Run type| +|-------------|---------|-------|--------| +|```appendSVGString```|```svgstring /*string*/, parentid /*string*/```|Nothing, an SVG will be appended to the container DOM element with id=parentid.|Synchronous, Browser only| +|```loadImage```|```url /*string*/, callback /*function*/```|Nothing, loading an image from a URL, then executing ```callback(canvas)```|Asynchronous, Browser only| +|```getImgdata```|```canvas /*object*/```|```imagedata /*object*/```|Synchronous, Browser only| + +```imagedata``` is standard [ImageData](https://developer.mozilla.org/en-US/docs/Web/API/ImageData) here, ```canvas``` is [canvas](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/canvas) . +There are more functions for advanced users, read the source if you are interested. :) + +"Browser only" means that Node.js doesn't have built-in canvas and DOM support as of 2018, so loading an image to an ImageData object needs an external library. + +--- + +## Options +You can use an option preset name (string) or an [options object](https://github.com/jankovicsandras/imagetracerjs/blob/master/options.md) to control the tracing and rendering process. + +![Option presets gallery](docimages/option_presets_small.png) + +These strings can be passed instead of the options object: +```'default'``` +```'posterized1'``` +```'posterized2'``` +```'posterized3'``` +```'curvy'``` +```'sharp'``` +```'detailed'``` +```'smoothed'``` +```'grayscale'``` +```'fixedpalette'``` +```'randomsampling1'``` +```'randomsampling2'``` +```'artistic1'``` +```'artistic2'``` +```'artistic3'``` +```'artistic4'``` + +[Read more about options.](https://github.com/jankovicsandras/imagetracerjs/blob/master/options.md) + +--- + +## Examples + +### Using in the Browser +Include the script: +```javascript + +``` +Then +```javascript +// Loading smiley.png, tracing and calling alert callback on the SVG string result +ImageTracer.imageToSVG( 'smiley.png', alert ); + + +// Almost the same with options, and the ImageTracer.appendSVGString callback will append the SVG +ImageTracer.imageToSVG( 'smiley.png', ImageTracer.appendSVGString, { ltres:0.1, qtres:1, scale:10, strokewidth:5 } ); + + +// This uses the 'posterized2' option preset and appends the SVG to an element with id="svgcontainer" +ImageTracer.imageToSVG( + 'panda.png', + function(svgstr){ ImageTracer.appendSVGString( svgstr, 'svgcontainer' ); }, + 'posterized2' +); + + +// The helper function loadImage() loads an image to a canvas, then executing callback: +// appending the canvas to a div here. +ImageTracer.loadImage( + 'panda.png', + function(canvas){ (document.getElementById('canvascontainer')).appendChild(canvas); } +); + + +// ImageData can be traced to an SVG string synchronously. +ImageTracer.loadImage( + 'smiley.png', + function(canvas){ + + // Getting ImageData from canvas with the helper function getImgdata(). + var imgd = ImageTracer.getImgdata( canvas ); + + // Synchronous tracing to SVG string + var svgstr = ImageTracer.imagedataToSVG( imgd, { scale:5 } ); + + // Appending SVG + ImageTracer.appendSVGString( svgstr, 'svgcontainer' ); + + } +); + + +// This will load an image, trace it when loaded, and execute callback on the tracedata: +// stringifying and alerting it here. +ImageTracer.imageToTracedata( + 'smiley.png', + function(tracedata){ alert( JSON.stringify( tracedata ) ); }, + { ltres:0.1, qtres:1, scale:10 } +); + + +// imagedataToTracedata() is very similar to the previous functions. This returns tracedata synchronously. +ImageTracer.loadImage( + 'smiley.png', + function(canvas){ + + // Getting ImageData from canvas with the helper function getImgdata(). + var imgd = ImageTracer.getImgdata(canvas); + + // Synchronous tracing to tracedata + var tracedata = ImageTracer.imagedataToTracedata( imgd, { ltres:1, qtres:0.01, scale:10 } ); + + alert( JSON.stringify( tracedata ) ); + } +); +``` + +### Using with Node.js CLI + +Node.js Command line interface example: + +``` +imagetracerjs/nodecli>node nodecli ../panda.png outfilename panda.svg scale 10 +``` + +Expected result: + +``` +imagetracerjs/nodecli/panda.svg was saved! +``` + +CLI parameter names are supported both with and without trailing dash: ```-scale 10``` and ```scale 10``` are both correct. +Almost all options are supported, except ```pal``` and ```layercontainerid```. + +### Simple Node.js converting example + +```javascript +"use strict"; + +var fs = require('fs'); + +var ImageTracer = require( __dirname + '/../imagetracer_v1.2.6' ); + +// This example uses https://github.com/arian/pngjs +// , but other libraries can be used to load an image file to an ImageData object. +var PNGReader = require( __dirname + '/PNGReader' ); + +// Input and output filepaths / URLs +var infilepath = __dirname + '/' + 'panda.png'; +var outfilepath = __dirname + '/' + 'panda.svg'; + + +fs.readFile( + + infilepath, + + function( err, bytes ){ // fs.readFile callback + if(err){ console.log(err); throw err; } + + var reader = new PNGReader(bytes); + + reader.parse( function( err, png ){ // PNGReader callback + if(err){ console.log(err); throw err; } + + // creating an ImageData object + var myImageData = { width:png.width, height:png.height, data:png.pixels }; + + // tracing to SVG string + var options = { scale: 5 }; // options object; option preset string can be used also + + var svgstring = ImageTracer.imagedataToSVG( myImageData, options ); + + // writing to file + fs.writeFile( + outfilepath, + svgstring, + function(err){ if(err){ console.log(err); throw err; } console.log( outfilepath + ' was saved!' ); } + ); + + });// End of reader.parse() + + }// End of readFile callback() + +);// End of fs.readFile() +``` + +### Tracedata processing / Simplify.js example +It's possible to process the traced geometry and color data before SVG rendering. This example [simplify_interop.html](https://github.com/jankovicsandras/imagetracerjs/blob/master/simplify_interop.html) shows polyline simplification. You need to download simplify.js from https://github.com/mourner/simplify-js . + +--- + +## Process overview +See [Process overview and Ideas for improvement](https://github.com/jankovicsandras/imagetracerjs/blob/master/process_overview.md) + +--- + +## License +### The Unlicense / PUBLIC DOMAIN + +This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or +distribute this software, either in source code form or as a compiled +binary, for any purpose, commercial or non-commercial, and by any +means. + +In jurisdictions that recognize copyright laws, the author or authors +of this software dedicate any and all copyright interest in the +software to the public domain. We make this dedication for the benefit +of the public at large and to the detriment of our heirs and +successors. We intend this dedication to be an overt act of +relinquishment in perpetuity of all present and future rights to this +software under copyright law. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +For more information, please refer to [http://unlicense.org](http://unlicense.org) diff --git a/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/bower.json b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/bower.json new file mode 100644 index 00000000..5fcf697f --- /dev/null +++ b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/bower.json @@ -0,0 +1,34 @@ +{ + "name": "imagetracerjs", + "description": "raster image tracer and vectorizer, bitmap to SVG converter", + "repository": { + "type": "git", + "url": "https://github.com/jankovicsandras/imagetracerjs.git" + }, + "main": "imagetracer_v1.2.6.js", + "keywords": [ + "image", + "tracer", + "tracing", + "vector", + "raster", + "vectorize", + "vectorizing", + "convert", + "conversion", + "converting", + "bitmap", + "svg", + "bmp", + "png", + "jpg", + "jpeg", + "gif" + ], + "authors": [ "András Jankovics" ], + "license": "Unlicense", + "bugs": { + "url": "https://github.com/jankovicsandras/imagetracerjs/issues" + }, + "homepage": "https://github.com/jankovicsandras/imagetracerjs#readme" +} diff --git a/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/docimages/cover_problem.png b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/docimages/cover_problem.png new file mode 100644 index 00000000..f457b688 Binary files /dev/null and b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/docimages/cover_problem.png differ diff --git a/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/docimages/option_presets.png b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/docimages/option_presets.png new file mode 100644 index 00000000..49be0a9d Binary files /dev/null and b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/docimages/option_presets.png differ diff --git a/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/docimages/option_presets_small.png b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/docimages/option_presets_small.png new file mode 100644 index 00000000..dc21ab62 Binary files /dev/null and b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/docimages/option_presets_small.png differ diff --git a/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/docimages/s1.png b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/docimages/s1.png new file mode 100644 index 00000000..469e2acd Binary files /dev/null and b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/docimages/s1.png differ diff --git a/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/docimages/s10.png b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/docimages/s10.png new file mode 100644 index 00000000..358cb023 Binary files /dev/null and b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/docimages/s10.png differ diff --git a/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/docimages/s11.png b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/docimages/s11.png new file mode 100644 index 00000000..3af8e7c2 Binary files /dev/null and b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/docimages/s11.png differ diff --git a/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/docimages/s12.png b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/docimages/s12.png new file mode 100644 index 00000000..e0c8f699 Binary files /dev/null and b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/docimages/s12.png differ diff --git a/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/docimages/s13.png b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/docimages/s13.png new file mode 100644 index 00000000..64eb1f6a Binary files /dev/null and b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/docimages/s13.png differ diff --git a/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/docimages/s14.png b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/docimages/s14.png new file mode 100644 index 00000000..4a61d942 Binary files /dev/null and b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/docimages/s14.png differ diff --git a/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/docimages/s15.png b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/docimages/s15.png new file mode 100644 index 00000000..33d7506e Binary files /dev/null and b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/docimages/s15.png differ diff --git a/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/docimages/s2.png b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/docimages/s2.png new file mode 100644 index 00000000..ddde649f Binary files /dev/null and b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/docimages/s2.png differ diff --git a/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/docimages/s3.png b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/docimages/s3.png new file mode 100644 index 00000000..2045a109 Binary files /dev/null and b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/docimages/s3.png differ diff --git a/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/docimages/s4.png b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/docimages/s4.png new file mode 100644 index 00000000..c517488e Binary files /dev/null and b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/docimages/s4.png differ diff --git a/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/docimages/s7.png b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/docimages/s7.png new file mode 100644 index 00000000..6aaf04d7 Binary files /dev/null and b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/docimages/s7.png differ diff --git a/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/docimages/s8.png b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/docimages/s8.png new file mode 100644 index 00000000..1e024247 Binary files /dev/null and b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/docimages/s8.png differ diff --git a/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/docimages/s9.png b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/docimages/s9.png new file mode 100644 index 00000000..17285597 Binary files /dev/null and b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/docimages/s9.png differ diff --git a/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/docimages/transparency_problem.png b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/docimages/transparency_problem.png new file mode 100644 index 00000000..754593ed Binary files /dev/null and b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/docimages/transparency_problem.png differ diff --git a/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/imagetracer_examples.html b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/imagetracer_examples.html new file mode 100644 index 00000000..32d6ce7e --- /dev/null +++ b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/imagetracer_examples.html @@ -0,0 +1,82 @@ + + + + + + + + + +
+
+ \ No newline at end of file diff --git a/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/imagetracer_options_gallery.html b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/imagetracer_options_gallery.html new file mode 100644 index 00000000..1866d658 --- /dev/null +++ b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/imagetracer_options_gallery.html @@ -0,0 +1,69 @@ + + + + + + + imagetracer.js options gallery + + + + + + + +
+ + + + + +

Original
+
+ + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/imagetracer_test_automation.html b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/imagetracer_test_automation.html new file mode 100644 index 00000000..ff17b688 --- /dev/null +++ b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/imagetracer_test_automation.html @@ -0,0 +1,334 @@ + + + + + imagetracer.js test automation + + + + + + +
+

Test images

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
















+

Settings

+
+
+
+
+ Example Custom Options:
{"ltres":1,"qtres":1,"pathomit":8,"colorsampling":true,"numberofcolors":16,"mincolorratio":0.02,"colorquantcycles":3,"scale":1,"simplifytolerance":0,"roundcoords":1,"lcpr":0,"qcpr":0,"desc":true,"viewbox":false,"blurradius":0,"blurdelta":20}
+
+ + +
+ +

Result (if Draw SVG is active)

+ + + + + + + + + + + + +
Traced SVGOriginal rasterSVG rendered as rasterDifference
+ +

Measurements

+
+ + + + + + + + + + + + + + + + + + + +
RowIDFilenamewidth (pixels)height (pixels)area (pixels)SVG string length (bytes)Tracing time (ms)Rendering time (ms)Nr. of pathsRGBA difference (cummulative RGBA difference / (area*4))Different pixels (%)Options
+ +
+ \ No newline at end of file diff --git a/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/imagetracer_v1.2.6.js b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/imagetracer_v1.2.6.js new file mode 100644 index 00000000..6c62432e --- /dev/null +++ b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/imagetracer_v1.2.6.js @@ -0,0 +1,1217 @@ +/* + imagetracer.js version 1.2.6 + Simple raster image tracer and vectorizer written in JavaScript. + andras@jankovics.net +*/ + +/* + +The Unlicense / PUBLIC DOMAIN + +This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or +distribute this software, either in source code form or as a compiled +binary, for any purpose, commercial or non-commercial, and by any +means. + +In jurisdictions that recognize copyright laws, the author or authors +of this software dedicate any and all copyright interest in the +software to the public domain. We make this dedication for the benefit +of the public at large and to the detriment of our heirs and +successors. We intend this dedication to be an overt act of +relinquishment in perpetuity of all present and future rights to this +software under copyright law. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +For more information, please refer to http://unlicense.org/ + +*/ + +(function(){ 'use strict'; + +function ImageTracer(){ + var _this = this; + + this.versionnumber = '1.2.6', + + //////////////////////////////////////////////////////////// + // + // API + // + //////////////////////////////////////////////////////////// + + // Loading an image from a URL, tracing when loaded, + // then executing callback with the scaled svg string as argument + this.imageToSVG = function( url, callback, options ){ + options = _this.checkoptions(options); + // loading image, tracing and callback + _this.loadImage( + url, + function(canvas){ + callback( + _this.imagedataToSVG( _this.getImgdata(canvas), options ) + ); + }, + options + ); + },// End of imageToSVG() + + // Tracing imagedata, then returning the scaled svg string + this.imagedataToSVG = function( imgd, options ){ + options = _this.checkoptions(options); + // tracing imagedata + var td = _this.imagedataToTracedata( imgd, options ); + // returning SVG string + return _this.getsvgstring(td, options); + },// End of imagedataToSVG() + + // Loading an image from a URL, tracing when loaded, + // then executing callback with tracedata as argument + this.imageToTracedata = function( url, callback, options ){ + options = _this.checkoptions(options); + // loading image, tracing and callback + _this.loadImage( + url, + function(canvas){ + callback( + _this.imagedataToTracedata( _this.getImgdata(canvas), options ) + ); + }, + options + ); + },// End of imageToTracedata() + + // Tracing imagedata, then returning tracedata (layers with paths, palette, image size) + this.imagedataToTracedata = function( imgd, options ){ + options = _this.checkoptions(options); + + // 1. Color quantization + var ii = _this.colorquantization( imgd, options ); + + if(options.layering === 0){// Sequential layering + + // create tracedata object + var tracedata = { + layers : [], + palette : ii.palette, + width : ii.array[0].length-2, + height : ii.array.length-2 + }; + + // Loop to trace each color layer + for(var colornum=0; colornum pathscan -> internodes -> batchtracepaths + var tracedlayer = + _this.batchtracepaths( + + _this.internodes( + + _this.pathscan( + _this.layeringstep( ii, colornum ), + options.pathomit + ), + + options + + ), + + options.ltres, + options.qtres + + ); + + // adding traced layer + tracedata.layers.push(tracedlayer); + + }// End of color loop + + }else{// Parallel layering + // 2. Layer separation and edge detection + var ls = _this.layering( ii ); + + // Optional edge node visualization + if(options.layercontainerid){ _this.drawLayers( ls, _this.specpalette, options.scale, options.layercontainerid ); } + + // 3. Batch pathscan + var bps = _this.batchpathscan( ls, options.pathomit ); + + // 4. Batch interpollation + var bis = _this.batchinternodes( bps, options ); + + // 5. Batch tracing and creating tracedata object + var tracedata = { + layers : _this.batchtracelayers( bis, options.ltres, options.qtres ), + palette : ii.palette, + width : imgd.width, + height : imgd.height + }; + + }// End of parallel layering + + // return tracedata + return tracedata; + + },// End of imagedataToTracedata() + + this.optionpresets = { + 'default': { + + // Tracing + corsenabled : false, + ltres : 1, + qtres : 1, + pathomit : 8, + rightangleenhance : true, + + // Color quantization + colorsampling : 2, + numberofcolors : 16, + mincolorratio : 0, + colorquantcycles : 3, + + // Layering method + layering : 0, + + // SVG rendering + strokewidth : 1, + linefilter : false, + scale : 1, + roundcoords : 1, + viewbox : false, + desc : false, + lcpr : 0, + qcpr : 0, + + // Blur + blurradius : 0, + blurdelta : 20 + + }, + 'posterized1': { colorsampling:0, numberofcolors:2 }, + 'posterized2': { numberofcolors:4, blurradius:5 }, + 'curvy': { ltres:0.01, linefilter:true, rightangleenhance:false }, + 'sharp': { qtres:0.01, linefilter:false }, + 'detailed': { pathomit:0, roundcoords:2, ltres:0.5, qtres:0.5, numberofcolors:64 }, + 'smoothed': { blurradius:5, blurdelta: 64 }, + 'grayscale': { colorsampling:0, colorquantcycles:1, numberofcolors:7 }, + 'fixedpalette': { colorsampling:0, colorquantcycles:1, numberofcolors:27 }, + 'randomsampling1': { colorsampling:1, numberofcolors:8 }, + 'randomsampling2': { colorsampling:1, numberofcolors:64 }, + 'artistic1': { colorsampling:0, colorquantcycles:1, pathomit:0, blurradius:5, blurdelta: 64, ltres:0.01, linefilter:true, numberofcolors:16, strokewidth:2 }, + 'artistic2': { qtres:0.01, colorsampling:0, colorquantcycles:1, numberofcolors:4, strokewidth:0 }, + 'artistic3': { qtres:10, ltres:10, numberofcolors:8 }, + 'artistic4': { qtres:10, ltres:10, numberofcolors:64, blurradius:5, blurdelta: 256, strokewidth:2 }, + 'posterized3': { ltres: 1, qtres: 1, pathomit: 20, rightangleenhance: true, colorsampling: 0, numberofcolors: 3, + mincolorratio: 0, colorquantcycles: 3, blurradius: 3, blurdelta: 20, strokewidth: 0, linefilter: false, + roundcoords: 1, pal: [ { r: 0, g: 0, b: 100, a: 255 }, { r: 255, g: 255, b: 255, a: 255 } ] } + },// End of optionpresets + + // creating options object, setting defaults for missing values + this.checkoptions = function(options){ + options = options || {}; + // Option preset + if(typeof options === 'string'){ + options = options.toLowerCase(); + if( _this.optionpresets[options] ){ options = _this.optionpresets[options]; }else{ options = {}; } + } + // Defaults + var ok = Object.keys(_this.optionpresets['default']); + for(var k=0; k + return options; + },// End of checkoptions() + + //////////////////////////////////////////////////////////// + // + // Vectorizing functions + // + //////////////////////////////////////////////////////////// + + // 1. Color quantization + // Using a form of k-means clustering repeatead options.colorquantcycles times. http://en.wikipedia.org/wiki/Color_quantization + this.colorquantization = function( imgd, options ){ + var arr = [], idx=0, cd,cdl,ci, paletteacc = [], pixelnum = imgd.width * imgd.height, i, j, k, cnt, palette; + + // imgd.data must be RGBA, not just RGB + if( imgd.data.length < pixelnum * 4 ){ + var newimgddata = new Uint8ClampedArray(pixelnum * 4); + for(var pxcnt = 0; pxcnt < pixelnum ; pxcnt++){ + newimgddata[pxcnt*4 ] = imgd.data[pxcnt*3 ]; + newimgddata[pxcnt*4+1] = imgd.data[pxcnt*3+1]; + newimgddata[pxcnt*4+2] = imgd.data[pxcnt*3+2]; + newimgddata[pxcnt*4+3] = 255; + } + imgd.data = newimgddata; + }// End of RGBA imgd.data check + + // Filling arr (color index array) with -1 + for( j=0; j 0 ){ imgd = _this.blur( imgd, options.blurradius, options.blurdelta ); } + + // Repeat clustering step options.colorquantcycles times + for( cnt=0; cnt < options.colorquantcycles; cnt++ ){ + + // Average colors from the second iteration + if(cnt>0){ + // averaging paletteacc for palette + for( k=0; k < palette.length; k++ ){ + + // averaging + if( paletteacc[k].n > 0 ){ + palette[k] = { r: Math.floor( paletteacc[k].r / paletteacc[k].n ), + g: Math.floor( paletteacc[k].g / paletteacc[k].n ), + b: Math.floor( paletteacc[k].b / paletteacc[k].n ), + a: Math.floor( paletteacc[k].a / paletteacc[k].n ) }; + } + + // Randomizing a color, if there are too few pixels and there will be a new cycle + if( ( paletteacc[k].n/pixelnum < options.mincolorratio ) && ( cnt < options.colorquantcycles-1 ) ){ + palette[k] = { r: Math.floor(Math.random()*255), + g: Math.floor(Math.random()*255), + b: Math.floor(Math.random()*255), + a: Math.floor(Math.random()*255) }; + } + + }// End of palette loop + }// End of Average colors from the second iteration + + // Reseting palette accumulator for averaging + for( i=0; i < palette.length; i++ ){ paletteacc[i] = { r:0, g:0, b:0, a:0, n:0 }; } + + // loop through all pixels + for( j=0; j < imgd.height; j++ ){ + for( i=0; i < imgd.width; i++ ){ + + // pixel index + idx = (j*imgd.width+i)*4; + + // find closest color from palette by measuring (rectilinear) color distance between this pixel and all palette colors + ci=0; cdl = 1024; // 4 * 256 is the maximum RGBA distance + for( k=0; k p.y) !== (pa[j].y > p.y)) && (p.x < (pa[j].x - pa[i].x) * (p.y - pa[i].y) / (pa[j].y - pa[i].y) + pa[i].x) ) + ? !isin : isin; + } + + return isin; + }, + + // Lookup tables for pathscan + // pathscan_combined_lookup[ arr[py][px] ][ dir ] = [nextarrpypx, nextdir, deltapx, deltapy]; + this.pathscan_combined_lookup = [ + [[-1,-1,-1,-1], [-1,-1,-1,-1], [-1,-1,-1,-1], [-1,-1,-1,-1]],// arr[py][px]===0 is invalid + [[ 0, 1, 0,-1], [-1,-1,-1,-1], [-1,-1,-1,-1], [ 0, 2,-1, 0]], + [[-1,-1,-1,-1], [-1,-1,-1,-1], [ 0, 1, 0,-1], [ 0, 0, 1, 0]], + [[ 0, 0, 1, 0], [-1,-1,-1,-1], [ 0, 2,-1, 0], [-1,-1,-1,-1]], + + [[-1,-1,-1,-1], [ 0, 0, 1, 0], [ 0, 3, 0, 1], [-1,-1,-1,-1]], + [[13, 3, 0, 1], [13, 2,-1, 0], [ 7, 1, 0,-1], [ 7, 0, 1, 0]], + [[-1,-1,-1,-1], [ 0, 1, 0,-1], [-1,-1,-1,-1], [ 0, 3, 0, 1]], + [[ 0, 3, 0, 1], [ 0, 2,-1, 0], [-1,-1,-1,-1], [-1,-1,-1,-1]], + + [[ 0, 3, 0, 1], [ 0, 2,-1, 0], [-1,-1,-1,-1], [-1,-1,-1,-1]], + [[-1,-1,-1,-1], [ 0, 1, 0,-1], [-1,-1,-1,-1], [ 0, 3, 0, 1]], + [[11, 1, 0,-1], [14, 0, 1, 0], [14, 3, 0, 1], [11, 2,-1, 0]], + [[-1,-1,-1,-1], [ 0, 0, 1, 0], [ 0, 3, 0, 1], [-1,-1,-1,-1]], + + [[ 0, 0, 1, 0], [-1,-1,-1,-1], [ 0, 2,-1, 0], [-1,-1,-1,-1]], + [[-1,-1,-1,-1], [-1,-1,-1,-1], [ 0, 1, 0,-1], [ 0, 0, 1, 0]], + [[ 0, 1, 0,-1], [-1,-1,-1,-1], [-1,-1,-1,-1], [ 0, 2,-1, 0]], + [[-1,-1,-1,-1], [-1,-1,-1,-1], [-1,-1,-1,-1], [-1,-1,-1,-1]]// arr[py][px]===15 is invalid + ], + + // 3. Walking through an edge node array, discarding edge node types 0 and 15 and creating paths from the rest. + // Walk directions (dir): 0 > ; 1 ^ ; 2 < ; 3 v + this.pathscan = function( arr, pathomit ){ + var paths=[], pacnt=0, pcnt=0, px=0, py=0, w = arr[0].length, h = arr.length, + dir=0, pathfinished=true, holepath=false, lookuprow; + + for(var j=0; j paths[pacnt].boundingbox[2] ){ paths[pacnt].boundingbox[2] = px-1; } + if( (py-1) < paths[pacnt].boundingbox[1] ){ paths[pacnt].boundingbox[1] = py-1; } + if( (py-1) > paths[pacnt].boundingbox[3] ){ paths[pacnt].boundingbox[3] = py-1; } + + // Next: look up the replacement, direction and coordinate changes = clear this cell, turn if required, walk forward + lookuprow = _this.pathscan_combined_lookup[ arr[py][px] ][ dir ]; + arr[py][px] = lookuprow[0]; dir = lookuprow[1]; px += lookuprow[2]; py += lookuprow[3]; + + // Close path + if( (px-1 === paths[pacnt].points[0].x ) && ( py-1 === paths[pacnt].points[0].y ) ){ + pathfinished = true; + + // Discarding paths shorter than pathomit + if( paths[pacnt].points.length < pathomit ){ + paths.pop(); + }else{ + + paths[pacnt].isholepath = holepath ? true : false; + + // Finding the parent shape for this hole + if(holepath){ + + var parentidx = 0, parentbbox = [-1,-1,w+1,h+1]; + for(var parentcnt=0; parentcnt < pacnt; parentcnt++){ + if( (!paths[parentcnt].isholepath) && + _this.boundingboxincludes( paths[parentcnt].boundingbox , paths[pacnt].boundingbox ) && + _this.boundingboxincludes( parentbbox , paths[parentcnt].boundingbox ) && + _this.pointinpoly( paths[pacnt].points[0], paths[parentcnt].points ) + ){ + parentidx = parentcnt; + parentbbox = paths[parentcnt].boundingbox; + } + } + + paths[parentidx].holechildren.push( pacnt ); + + }// End of holepath parent finding + + pacnt++; + + } + + }// End of Close path + + pcnt++; + + }// End of Path points loop + + }// End of Follow path + + }// End of i loop + }// End of j loop + + return paths; + },// End of pathscan() + + this.boundingboxincludes = function( parentbbox, childbbox ){ + return ( ( parentbbox[0] < childbbox[0] ) && ( parentbbox[1] < childbbox[1] ) && ( parentbbox[2] > childbbox[2] ) && ( parentbbox[3] > childbbox[3] ) ); + },// End of boundingboxincludes() + + // 3. Batch pathscan + this.batchpathscan = function( layers, pathomit ){ + var bpaths = []; + for(var k in layers){ + if(!layers.hasOwnProperty(k)){ continue; } + bpaths[k] = _this.pathscan( layers[k], pathomit ); + } + return bpaths; + }, + + // 4. interpollating between path points for nodes with 8 directions ( East, SouthEast, S, SW, W, NW, N, NE ) + this.internodes = function( paths, options ){ + var ins = [], palen=0, nextidx=0, nextidx2=0, previdx=0, previdx2=0, pacnt, pcnt; + + // paths loop + for(pacnt=0; pacnt 0){ + ins[pacnt].points[ ins[pacnt].points.length-1 ].linesegment = _this.getdirection( + ins[pacnt].points[ ins[pacnt].points.length-1 ].x, + ins[pacnt].points[ ins[pacnt].points.length-1 ].y, + paths[pacnt].points[pcnt].x, + paths[pacnt].points[pcnt].y + ); + } + + // This corner point + ins[pacnt].points.push({ + x : paths[pacnt].points[pcnt].x, + y : paths[pacnt].points[pcnt].y, + linesegment : _this.getdirection( + paths[pacnt].points[pcnt].x, + paths[pacnt].points[pcnt].y, + (( paths[pacnt].points[pcnt].x + paths[pacnt].points[nextidx].x ) /2), + (( paths[pacnt].points[pcnt].y + paths[pacnt].points[nextidx].y ) /2) + ) + }); + + }// End of right angle enhance + + // interpolate between two path points + ins[pacnt].points.push({ + x : (( paths[pacnt].points[pcnt].x + paths[pacnt].points[nextidx].x ) /2), + y : (( paths[pacnt].points[pcnt].y + paths[pacnt].points[nextidx].y ) /2), + linesegment : _this.getdirection( + (( paths[pacnt].points[pcnt].x + paths[pacnt].points[nextidx].x ) /2), + (( paths[pacnt].points[pcnt].y + paths[pacnt].points[nextidx].y ) /2), + (( paths[pacnt].points[nextidx].x + paths[pacnt].points[nextidx2].x ) /2), + (( paths[pacnt].points[nextidx].y + paths[pacnt].points[nextidx2].y ) /2) + ) + }); + + }// End of pathpoints loop + + }// End of paths loop + + return ins; + },// End of internodes() + + this.testrightangle = function( path, idx1, idx2, idx3, idx4, idx5 ){ + return ( (( path.points[idx3].x === path.points[idx1].x) && + ( path.points[idx3].x === path.points[idx2].x) && + ( path.points[idx3].y === path.points[idx4].y) && + ( path.points[idx3].y === path.points[idx5].y) + ) || + (( path.points[idx3].y === path.points[idx1].y) && + ( path.points[idx3].y === path.points[idx2].y) && + ( path.points[idx3].x === path.points[idx4].x) && + ( path.points[idx3].x === path.points[idx5].x) + ) + ); + },// End of testrightangle() + + this.getdirection = function( x1, y1, x2, y2 ){ + var val = 8; + if(x1 < x2){ + if (y1 < y2){ val = 1; }// SouthEast + else if(y1 > y2){ val = 7; }// NE + else { val = 0; }// E + }else if(x1 > x2){ + if (y1 < y2){ val = 3; }// SW + else if(y1 > y2){ val = 5; }// NW + else { val = 4; }// W + }else{ + if (y1 < y2){ val = 2; }// S + else if(y1 > y2){ val = 6; }// N + else { val = 8; }// center, this should not happen + } + return val; + },// End of getdirection() + + // 4. Batch interpollation + this.batchinternodes = function( bpaths, options ){ + var binternodes = []; + for (var k in bpaths) { + if(!bpaths.hasOwnProperty(k)){ continue; } + binternodes[k] = _this.internodes(bpaths[k], options); + } + return binternodes; + }, + + // 5. tracepath() : recursively trying to fit straight and quadratic spline segments on the 8 direction internode path + + // 5.1. Find sequences of points with only 2 segment types + // 5.2. Fit a straight line on the sequence + // 5.3. If the straight line fails (distance error > ltres), find the point with the biggest error + // 5.4. Fit a quadratic spline through errorpoint (project this to get controlpoint), then measure errors on every point in the sequence + // 5.5. If the spline fails (distance error > qtres), find the point with the biggest error, set splitpoint = fitting point + // 5.6. Split sequence and recursively apply 5.2. - 5.6. to startpoint-splitpoint and splitpoint-endpoint sequences + + this.tracepath = function( path, ltres, qtres ){ + var pcnt=0, segtype1, segtype2, seqend, smp = {}; + smp.segments = []; + smp.boundingbox = path.boundingbox; + smp.holechildren = path.holechildren; + smp.isholepath = path.isholepath; + + while(pcnt < path.points.length){ + // 5.1. Find sequences of points with only 2 segment types + segtype1 = path.points[pcnt].linesegment; segtype2 = -1; seqend=pcnt+1; + while( + ((path.points[seqend].linesegment === segtype1) || (path.points[seqend].linesegment === segtype2) || (segtype2 === -1)) + && (seqend < path.points.length-1) ){ + + if((path.points[seqend].linesegment!==segtype1) && (segtype2===-1)){ segtype2 = path.points[seqend].linesegment; } + seqend++; + + } + if(seqend === path.points.length-1){ seqend = 0; } + + // 5.2. - 5.6. Split sequence and recursively apply 5.2. - 5.6. to startpoint-splitpoint and splitpoint-endpoint sequences + smp.segments = smp.segments.concat( _this.fitseq(path, ltres, qtres, pcnt, seqend) ); + + // forward pcnt; + if(seqend>0){ pcnt = seqend; }else{ pcnt = path.points.length; } + + }// End of pcnt loop + + return smp; + },// End of tracepath() + + // 5.2. - 5.6. recursively fitting a straight or quadratic line segment on this sequence of path nodes, + // called from tracepath() + this.fitseq = function( path, ltres, qtres, seqstart, seqend ){ + // return if invalid seqend + if( (seqend>path.points.length) || (seqend<0) ){ return []; } + // variables + var errorpoint=seqstart, errorval=0, curvepass=true, px, py, dist2; + var tl = (seqend-seqstart); if(tl<0){ tl += path.points.length; } + var vx = (path.points[seqend].x-path.points[seqstart].x) / tl, + vy = (path.points[seqend].y-path.points[seqstart].y) / tl; + + // 5.2. Fit a straight line on the sequence + var pcnt = (seqstart+1) % path.points.length, pl; + while(pcnt != seqend){ + pl = pcnt-seqstart; if(pl<0){ pl += path.points.length; } + px = path.points[seqstart].x + vx * pl; py = path.points[seqstart].y + vy * pl; + dist2 = (path.points[pcnt].x-px)*(path.points[pcnt].x-px) + (path.points[pcnt].y-py)*(path.points[pcnt].y-py); + if(dist2>ltres){curvepass=false;} + if(dist2>errorval){ errorpoint=pcnt; errorval=dist2; } + pcnt = (pcnt+1)%path.points.length; + } + // return straight line if fits + if(curvepass){ return [{ type:'L', x1:path.points[seqstart].x, y1:path.points[seqstart].y, x2:path.points[seqend].x, y2:path.points[seqend].y }]; } + + // 5.3. If the straight line fails (distance error>ltres), find the point with the biggest error + var fitpoint = errorpoint; curvepass = true; errorval = 0; + + // 5.4. Fit a quadratic spline through this point, measure errors on every point in the sequence + // helpers and projecting to get control point + var t=(fitpoint-seqstart)/tl, t1=(1-t)*(1-t), t2=2*(1-t)*t, t3=t*t; + var cpx = (t1*path.points[seqstart].x + t3*path.points[seqend].x - path.points[fitpoint].x)/-t2 , + cpy = (t1*path.points[seqstart].y + t3*path.points[seqend].y - path.points[fitpoint].y)/-t2 ; + + // Check every point + pcnt = seqstart+1; + while(pcnt != seqend){ + t=(pcnt-seqstart)/tl; t1=(1-t)*(1-t); t2=2*(1-t)*t; t3=t*t; + px = t1 * path.points[seqstart].x + t2 * cpx + t3 * path.points[seqend].x; + py = t1 * path.points[seqstart].y + t2 * cpy + t3 * path.points[seqend].y; + + dist2 = (path.points[pcnt].x-px)*(path.points[pcnt].x-px) + (path.points[pcnt].y-py)*(path.points[pcnt].y-py); + + if(dist2>qtres){curvepass=false;} + if(dist2>errorval){ errorpoint=pcnt; errorval=dist2; } + pcnt = (pcnt+1)%path.points.length; + } + // return spline if fits + if(curvepass){ return [{ type:'Q', x1:path.points[seqstart].x, y1:path.points[seqstart].y, x2:cpx, y2:cpy, x3:path.points[seqend].x, y3:path.points[seqend].y }]; } + // 5.5. If the spline fails (distance error>qtres), find the point with the biggest error + var splitpoint = fitpoint; // Earlier: Math.floor((fitpoint + errorpoint)/2); + + // 5.6. Split sequence and recursively apply 5.2. - 5.6. to startpoint-splitpoint and splitpoint-endpoint sequences + return _this.fitseq( path, ltres, qtres, seqstart, splitpoint ).concat( + _this.fitseq( path, ltres, qtres, splitpoint, seqend ) ); + + },// End of fitseq() + + // 5. Batch tracing paths + this.batchtracepaths = function(internodepaths,ltres,qtres){ + var btracedpaths = []; + for(var k in internodepaths){ + if(!internodepaths.hasOwnProperty(k)){ continue; } + btracedpaths.push( _this.tracepath(internodepaths[k],ltres,qtres) ); + } + return btracedpaths; + }, + + // 5. Batch tracing layers + this.batchtracelayers = function(binternodes, ltres, qtres){ + var btbis = []; + for(var k in binternodes){ + if(!binternodes.hasOwnProperty(k)){ continue; } + btbis[k] = _this.batchtracepaths(binternodes[k], ltres, qtres); + } + return btbis; + }, + + //////////////////////////////////////////////////////////// + // + // SVG Drawing functions + // + //////////////////////////////////////////////////////////// + + // Rounding to given decimals https://stackoverflow.com/questions/11832914/round-to-at-most-2-decimal-places-in-javascript + this.roundtodec = function(val,places){ return +val.toFixed(places); }, + + // Getting SVG path element string from a traced path + this.svgpathstring = function( tracedata, lnum, pathnum, options ){ + + var layer = tracedata.layers[lnum], smp = layer[pathnum], str='', pcnt; + + // Line filter + if(options.linefilter && (smp.segments.length < 3)){ return str; } + + // Starting path element, desc contains layer and path number + str = ''; + + // Rendering control points + if(options.lcpr || options.qcpr){ + for(pcnt=0; pcnt'; + str += ''; + str += ''; + str += ''; + } + if( (!smp.segments[pcnt].hasOwnProperty('x3')) && options.lcpr){ + str += ''; + } + } + + // Hole children control points + for( var hcnt=0; hcnt < smp.holechildren.length; hcnt++){ + var hsmp = layer[ smp.holechildren[hcnt] ]; + for(pcnt=0; pcnt'; + str += ''; + str += ''; + str += ''; + } + if( (!hsmp.segments[pcnt].hasOwnProperty('x3')) && options.lcpr){ + str += ''; + } + } + } + }// End of Rendering control points + + return str; + + },// End of svgpathstring() + + // Converting tracedata to an SVG string + this.getsvgstring = function( tracedata, options ){ + + options = _this.checkoptions(options); + + var w = tracedata.width * options.scale, h = tracedata.height * options.scale; + + // SVG start + var svgstr = ''; + + // Drawing: Layers and Paths loops + for(var lcnt=0; lcnt < tracedata.layers.length; lcnt++){ + for(var pcnt=0; pcnt < tracedata.layers[lcnt].length; pcnt++){ + + // Adding SVG string + if( !tracedata.layers[lcnt][pcnt].isholepath ){ + svgstr += _this.svgpathstring( tracedata, lcnt, pcnt, options ); + } + + }// End of paths loop + }// End of layers loop + + // SVG End + svgstr+=''; + + return svgstr; + + },// End of getsvgstring() + + // Comparator for numeric Array.sort + this.compareNumbers = function(a,b){ return a - b; }, + + // Convert color object to rgba string + this.torgbastr = function(c){ return 'rgba('+c.r+','+c.g+','+c.b+','+c.a+')'; }, + + // Convert color object to SVG color string + this.tosvgcolorstr = function(c, options){ + return 'fill="rgb('+c.r+','+c.g+','+c.b+')" stroke="rgb('+c.r+','+c.g+','+c.b+')" stroke-width="'+options.strokewidth+'" opacity="'+c.a/255.0+'" '; + }, + + // Helper function: Appending an element to a container from an svgstring + this.appendSVGString = function(svgstr,parentid){ + var div; + if(parentid){ + div = document.getElementById(parentid); + if(!div){ + div = document.createElement('div'); + div.id = parentid; + document.body.appendChild(div); + } + }else{ + div = document.createElement('div'); + document.body.appendChild(div); + } + div.innerHTML += svgstr; + }, + + //////////////////////////////////////////////////////////// + // + // Canvas functions + // + //////////////////////////////////////////////////////////// + + // Gaussian kernels for blur + this.gks = [ [0.27901,0.44198,0.27901], [0.135336,0.228569,0.272192,0.228569,0.135336], [0.086776,0.136394,0.178908,0.195843,0.178908,0.136394,0.086776], + [0.063327,0.093095,0.122589,0.144599,0.152781,0.144599,0.122589,0.093095,0.063327], [0.049692,0.069304,0.089767,0.107988,0.120651,0.125194,0.120651,0.107988,0.089767,0.069304,0.049692] ], + + // Selective Gaussian blur for preprocessing + this.blur = function(imgd,radius,delta){ + var i,j,k,d,idx,racc,gacc,bacc,aacc,wacc; + + // new ImageData + var imgd2 = { width:imgd.width, height:imgd.height, data:[] }; + + // radius and delta limits, this kernel + radius = Math.floor(radius); if(radius<1){ return imgd; } if(radius>5){ radius = 5; } delta = Math.abs( delta ); if(delta>1024){ delta = 1024; } + var thisgk = _this.gks[radius-1]; + + // loop through all pixels, horizontal blur + for( j=0; j < imgd.height; j++ ){ + for( i=0; i < imgd.width; i++ ){ + + racc = 0; gacc = 0; bacc = 0; aacc = 0; wacc = 0; + // gauss kernel loop + for( k = -radius; k < radius+1; k++){ + // add weighted color values + if( (i+k > 0) && (i+k < imgd.width) ){ + idx = (j*imgd.width+i+k)*4; + racc += imgd.data[idx ] * thisgk[k+radius]; + gacc += imgd.data[idx+1] * thisgk[k+radius]; + bacc += imgd.data[idx+2] * thisgk[k+radius]; + aacc += imgd.data[idx+3] * thisgk[k+radius]; + wacc += thisgk[k+radius]; + } + } + // The new pixel + idx = (j*imgd.width+i)*4; + imgd2.data[idx ] = Math.floor(racc / wacc); + imgd2.data[idx+1] = Math.floor(gacc / wacc); + imgd2.data[idx+2] = Math.floor(bacc / wacc); + imgd2.data[idx+3] = Math.floor(aacc / wacc); + + }// End of width loop + }// End of horizontal blur + + // copying the half blurred imgd2 + var himgd = new Uint8ClampedArray(imgd2.data); + + // loop through all pixels, vertical blur + for( j=0; j < imgd.height; j++ ){ + for( i=0; i < imgd.width; i++ ){ + + racc = 0; gacc = 0; bacc = 0; aacc = 0; wacc = 0; + // gauss kernel loop + for( k = -radius; k < radius+1; k++){ + // add weighted color values + if( (j+k > 0) && (j+k < imgd.height) ){ + idx = ((j+k)*imgd.width+i)*4; + racc += himgd[idx ] * thisgk[k+radius]; + gacc += himgd[idx+1] * thisgk[k+radius]; + bacc += himgd[idx+2] * thisgk[k+radius]; + aacc += himgd[idx+3] * thisgk[k+radius]; + wacc += thisgk[k+radius]; + } + } + // The new pixel + idx = (j*imgd.width+i)*4; + imgd2.data[idx ] = Math.floor(racc / wacc); + imgd2.data[idx+1] = Math.floor(gacc / wacc); + imgd2.data[idx+2] = Math.floor(bacc / wacc); + imgd2.data[idx+3] = Math.floor(aacc / wacc); + + }// End of width loop + }// End of vertical blur + + // Selective blur: loop through all pixels + for( j=0; j < imgd.height; j++ ){ + for( i=0; i < imgd.width; i++ ){ + + idx = (j*imgd.width+i)*4; + // d is the difference between the blurred and the original pixel + d = Math.abs(imgd2.data[idx ] - imgd.data[idx ]) + Math.abs(imgd2.data[idx+1] - imgd.data[idx+1]) + + Math.abs(imgd2.data[idx+2] - imgd.data[idx+2]) + Math.abs(imgd2.data[idx+3] - imgd.data[idx+3]); + // selective blur: if d>delta, put the original pixel back + if(d>delta){ + imgd2.data[idx ] = imgd.data[idx ]; + imgd2.data[idx+1] = imgd.data[idx+1]; + imgd2.data[idx+2] = imgd.data[idx+2]; + imgd2.data[idx+3] = imgd.data[idx+3]; + } + } + }// End of Selective blur + + return imgd2; + + },// End of blur() + + // Helper function: loading an image from a URL, then executing callback with canvas as argument + this.loadImage = function(url,callback,options){ + var img = new Image(); + if(options && options.corsenabled){ img.crossOrigin = 'Anonymous'; } + img.onload = function(){ + var canvas = document.createElement('canvas'); + canvas.width = img.width; + canvas.height = img.height; + var context = canvas.getContext('2d'); + context.drawImage(img,0,0); + callback(canvas); + }; + img.src = url; + }, + + // Helper function: getting ImageData from a canvas + this.getImgdata = function(canvas){ + var context = canvas.getContext('2d'); + return context.getImageData(0,0,canvas.width,canvas.height); + }, + + // Special palette to use with drawlayers() + this.specpalette = [ + {r:0,g:0,b:0,a:255}, {r:128,g:128,b:128,a:255}, {r:0,g:0,b:128,a:255}, {r:64,g:64,b:128,a:255}, + {r:192,g:192,b:192,a:255}, {r:255,g:255,b:255,a:255}, {r:128,g:128,b:192,a:255}, {r:0,g:0,b:192,a:255}, + {r:128,g:0,b:0,a:255}, {r:128,g:64,b:64,a:255}, {r:128,g:0,b:128,a:255}, {r:168,g:168,b:168,a:255}, + {r:192,g:128,b:128,a:255}, {r:192,g:0,b:0,a:255}, {r:255,g:255,b:255,a:255}, {r:0,g:128,b:0,a:255} + ], + + // Helper function: Drawing all edge node layers into a container + this.drawLayers = function(layers,palette,scale,parentid){ + scale = scale||1; + var w,h,i,j,k; + + // Preparing container + var div; + if(parentid){ + div = document.getElementById(parentid); + if(!div){ + div = document.createElement('div'); + div.id = parentid; + document.body.appendChild(div); + } + }else{ + div = document.createElement('div'); + document.body.appendChild(div); + } + + // Layers loop + for (k in layers) { + if(!layers.hasOwnProperty(k)){ continue; } + + // width, height + w=layers[k][0].length; h=layers[k].length; + + // Creating new canvas for every layer + var canvas = document.createElement('canvas'); canvas.width=w*scale; canvas.height=h*scale; + var context = canvas.getContext('2d'); + + // Drawing + for(j=0; j \ No newline at end of file diff --git a/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/process_overview.md b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/process_overview.md new file mode 100644 index 00000000..099dc9cc --- /dev/null +++ b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/process_overview.md @@ -0,0 +1,57 @@ +### Process overview +#### 1. Color quantization +The **colorquantization** function creates an indexed image (https://en.wikipedia.org/wiki/Indexed_color) using a variant of the https://en.wikipedia.org/wiki/K-means_clustering or https://en.wikipedia.org/wiki/K-medians_clustering algorithm. + +![alt Original image (20x scale)](docimages/s2.png) + +#### 2. Layer separation and edge detection +The **layering** function creates arrays for every color, and calculates edge node types. These are at the center of every 4 pixels, shown here as dots. This, **pathscan** and **interpolation** are a reinvented variant of the https://en.wikipedia.org/wiki/Marching_squares algorithm. + +![alt layer 0: black](docimages/s3.png) +![alt layer 1: yellow](docimages/s4.png) +![alt edge node examples](docimages/s7.png) + +#### 3. Pathscan +The **pathscan** function finds chains of edge nodes, example: the cyan dots and lines. + +![alt an edge node path](docimages/s8.png) + +#### 4. Interpolation +The **internodes** function interpolates the coordinates of the edge node paths. Every line segment in the new path has one of the 8 directions (East, North East, N, NW, W, SW, S, SE). + +![alt interpolating](docimages/s9.png) +![alt interpolation result](docimages/s10.png) + +#### 5. Tracing +The **tracepath** function splits the interpolated paths into sequences with two directions. + +![alt a sequence](docimages/s11.png) + +The **fitseq** function tries to fit a straight line on the start- and endpoint of the sequence (black line). If the distance error between the calculated points (black line) and actual sequence points (blue dots) is greater than the treshold, the point with the greatest error is selected (red line). + +![alt fitting a straight line](docimages/s12.png) + +The **fitseq** function tries to fit a quadratic spline through the error point. + +![alt fitting a quadratic spline](docimages/s13.png) +![alt fitting line segments](docimages/s14.png) +![alt result with control points](docimages/s15.png) + +If the **fitseq** function can not fit a straight line or a quadratic spline to the sequence with the given error tresholds, then it will split the sequence in two and recursively call **fitseq** on each part (https://en.wikipedia.org/wiki/Divide_and_conquer_algorithm). + +#### 6. SVG rendering +The coordinates are rendered to [SVG Paths](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) in the **getsvgstring** function. + +### Ideas for improvement + +- Error handling: there's very little error handling now, Out of memory can happen easily with big images or many layers. +- Color quantization: other algorithms e.g. https://en.wikipedia.org/wiki/Octree ? +- Color quantization: colors with few pixels are randomized, but probably the most distant colors should be found instead. +- Tracing: 5.1. finding more suitable sequences. +- Tracing: 5.5. splitpoint = fitpoint ; this is just a guess, there might be a better splitpoint. +- Tracing: 5.7. If splitpoint-endpoint is a spline, try to add new points from the next sequence; this is not implemented. +- Tracing: cubic splines or other curves? +- Default values: they are chosen because they seemed OK, not based on calculations. +- Output: [PDF](https://en.wikipedia.org/wiki/Portable_Document_Format), [DXF](https://en.wikipedia.org/wiki/AutoCAD_DXF), [G-code](https://en.wikipedia.org/wiki/G-code) or other output? +- comparing and integrating ideas from https://en.wikipedia.org/wiki/Potrace +- Pathomit with background hole path shrinking diff --git a/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/simplify_interop.html b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/simplify_interop.html new file mode 100644 index 00000000..f53a71aa --- /dev/null +++ b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/simplify_interop.html @@ -0,0 +1,126 @@ + + + + + + + + + + +
+ + diff --git a/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/smiley.png b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/smiley.png new file mode 100644 index 00000000..f926601f Binary files /dev/null and b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/smiley.png differ diff --git a/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/smileyRGB.png b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/smileyRGB.png new file mode 100644 index 00000000..a7c9eeea Binary files /dev/null and b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/smileyRGB.png differ diff --git a/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/testimages/1.png b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/testimages/1.png new file mode 100644 index 00000000..225ee402 Binary files /dev/null and b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/testimages/1.png differ diff --git a/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/testimages/10.png b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/testimages/10.png new file mode 100644 index 00000000..425774b7 Binary files /dev/null and b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/testimages/10.png differ diff --git a/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/testimages/11.png b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/testimages/11.png new file mode 100644 index 00000000..1cc54288 Binary files /dev/null and b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/testimages/11.png differ diff --git a/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/testimages/12.png b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/testimages/12.png new file mode 100644 index 00000000..89259220 Binary files /dev/null and b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/testimages/12.png differ diff --git a/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/testimages/13.png b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/testimages/13.png new file mode 100644 index 00000000..9dcc9097 Binary files /dev/null and b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/testimages/13.png differ diff --git a/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/testimages/14.png b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/testimages/14.png new file mode 100644 index 00000000..433a73b7 Binary files /dev/null and b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/testimages/14.png differ diff --git a/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/testimages/15.png b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/testimages/15.png new file mode 100644 index 00000000..394b8006 Binary files /dev/null and b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/testimages/15.png differ diff --git a/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/testimages/16.png b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/testimages/16.png new file mode 100644 index 00000000..832f93dc Binary files /dev/null and b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/testimages/16.png differ diff --git a/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/testimages/2.png b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/testimages/2.png new file mode 100644 index 00000000..d598a470 Binary files /dev/null and b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/testimages/2.png differ diff --git a/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/testimages/3.png b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/testimages/3.png new file mode 100644 index 00000000..dda0fa36 Binary files /dev/null and b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/testimages/3.png differ diff --git a/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/testimages/4.png b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/testimages/4.png new file mode 100644 index 00000000..62b75c1d Binary files /dev/null and b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/testimages/4.png differ diff --git a/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/testimages/5.png b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/testimages/5.png new file mode 100644 index 00000000..5b5f5509 Binary files /dev/null and b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/testimages/5.png differ diff --git a/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/testimages/6.png b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/testimages/6.png new file mode 100644 index 00000000..21925083 Binary files /dev/null and b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/testimages/6.png differ diff --git a/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/testimages/7.png b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/testimages/7.png new file mode 100644 index 00000000..1514eee5 Binary files /dev/null and b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/testimages/7.png differ diff --git a/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/testimages/8.png b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/testimages/8.png new file mode 100644 index 00000000..7c8a32c1 Binary files /dev/null and b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/testimages/8.png differ diff --git a/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/testimages/9.png b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/testimages/9.png new file mode 100644 index 00000000..caff72c5 Binary files /dev/null and b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/testimages/9.png differ diff --git a/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/testimages/combined.png b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/testimages/combined.png new file mode 100644 index 00000000..a5741ea1 Binary files /dev/null and b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/testimages/combined.png differ diff --git a/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/version_history.md b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/version_history.md new file mode 100644 index 00000000..ca1dd00a --- /dev/null +++ b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs-master/version_history.md @@ -0,0 +1,75 @@ +## Version history + +### 1.2.6 + - FIXED: hole shape parent search (Issues #31 #39) + - FIXED: Handle (absolute) paths in CLI correctly Issue #42 + +### 1.2.5 + - RGBA ImageData check in colorquantization(), solving Issue #24 and #18 + +### 1.2.4 + - ```options.layering``` : default 0 = sequential, new method ; 1 = parallel, old method. (Enhancement Issue #17) + - case insensitive option preset names + - README.md reorganizing + +### 1.2.3 + + - Node.js Command line interface (Enhancement Issue #13) + - FIXED: Pathomit problem thanks to EusthEnoptEron (Issue #14) + - options.corsenabled for [CORS Image loading](https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image) thanks to neel-radica (Issue #12) + +### 1.2.2 + + - FIXED: missing hole in path because of incorrect bounding box (Issue #11) + - Posterized3 option preset + - Changed svgpathstring() arguments to simplify getsvgstring() + +### 1.2.1 + + - FIXED: Gaussian blur preprocessing is now independent of DOM and canvas, thus working directly with Node.js (Issue #9) + +### 1.2.0 + +This is a major update, changing some internal logic and option default values. The API is compatible, so it should work out of the box. + + - FIXED: transparent holes are now possible. ( Issue #7 and #8 ) + - Deterministic output by default: ```options.colorsampling = 2``` ; ```options.mincolorratio = 0``` are deterministic and the defaults now. + - Right angle enhancing: ```options.rightangleenhance``` ( default : true ) + - Option presets (see below) + - Custom strokewidth with ```options.strokewidth``` ( default : 1 ) + - Line filter with ```options.linefilter``` ( default : false ) + - Simplified ```getsvgstring()```; ```options.desc = false``` by default; splitpoint = fitpoint in fitseq(); small bugfixes and optimizations + +Version history and README for the old 1.1.2 version is [here.](https://github.com/jankovicsandras/imagetracerjs/blob/master/README_v1.1.2.md) + +### 1.1.2 + +- minor bugfixes +- lookup based ```pathscan()``` + +### 1.1.1 + +- Bugfix: CSS3 RGBA output in SVG was technically incorrect (however supported by major browsers), so this is changed. [More info](https://stackoverflow.com/questions/6042550/svg-fill-color-transparency-alpha) + +### 1.1.0 + +- it works with Node.js (external library required to load image into an ImageData object) +- export as AMD module / Node module / browser or worker variable +- new syntax: ```ImageTracer112.imageToTracedata()```, no need to initialize +- fixed ```options``` with hasOwnProperty: 0 values are not replaced with defaults, fixed polygons with coordinates x=0 or y=0 +- transparency support: alpha is not discarded now, it is given more weight in color quantization +- new ```options.roundcoords``` : rounding coordinates to a given decimal place. This can reduce SVG length significantly (>20%) with minor loss of precision. +- new ```options.desc``` : setting this to false will turn off path descriptions, reducing SVG length. +- new ```options.viewbox``` : setting this to true will use viewBox instead of exact width and height +- new ```options.colorsampling``` : color quantization will sample the colors now by default, can be turned off. +- new ```options.blurradius``` : setting this to 1..5 will preprocess the image with a selective Gaussian blur with ```options.blurdelta``` treshold. This can filter noise and improve quality. +- ```imagedataToTracedata()``` returns image width and height in tracedata +- ```getsvgstring()``` needs now only ```tracedata``` and ```options``` as parameters +- ```colorquantization()``` needs now only ```imgd``` and ```options``` as parameters +- background field is removed from the results of color quantization +- ESLint passed +- test automation and simple statistics in imagetracer_test_automation.html + +### 1.0.0 - 1.0.4 + +- first published version + bugfixes \ No newline at end of file diff --git a/extensions/fablabchemnitz/imagetracerjs/imagetracerjs.inx b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs.inx new file mode 100644 index 00000000..b7b50c4f --- /dev/null +++ b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs.inx @@ -0,0 +1,93 @@ + + + Imagetracer.js + fablabchemnitz.de.imagetracerjs + + + + + + + false + 1.0 + 1.0 + 8 + true + + + + + + + + + 16 + 0 + 3 + + + + + + + + + + + + 1.0 + false + + 1 + false + false + + + + 0 + 20.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ../000_about_fablabchemnitz.svg + + + + all + + + + + + + + diff --git a/extensions/fablabchemnitz/imagetracerjs/imagetracerjs.py b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs.py new file mode 100644 index 00000000..25ecf4b1 --- /dev/null +++ b/extensions/fablabchemnitz/imagetracerjs/imagetracerjs.py @@ -0,0 +1,212 @@ +#!/usr/bin/env python3 + +import sys +import inkex +import os +import base64 +import urllib.request as urllib +from PIL import Image +from io import BytesIO +from lxml import etree + +""" +Extension for InkScape 1.X +Features + - will vectorize your beautiful image into a more beautiful SVG trace with separated infills(break apart into single surfaces like a puzzle) + +Author: Mario Voigt / FabLab Chemnitz +Mail: mario.voigt@stadtfabrikanten.org +Date: 18.08.2020 +Last patch: 24.04.2021 +License: GNU GPL v3 + +Used version of imagetracerjs: https://github.com/jankovicsandras/imagetracerjs/commit/4d0f429efbb936db1a43db80815007a2cb113b34 + +""" + +class Imagetracerjs(inkex.EffectExtension): + + def checkImagePath(self, element): + xlink = element.get('xlink:href') + if xlink and xlink[:5] == 'data:': + # No need, data alread embedded + return + + url = urllib.urlparse(xlink) + href = urllib.url2pathname(url.path) + + # Primary location always the filename itself. + path = self.absolute_href(href or '') + + # Backup directory where we can find the image + if not os.path.isfile(path): + path = element.get('sodipodi:absref', path) + + if not os.path.isfile(path): + inkex.errormsg('File not found "{}". Unable to embed image.').format(path) + return + + if (os.path.isfile(path)): + return path + + def add_arguments(self, pars): + pars.add_argument("--tab") + pars.add_argument("--keeporiginal", type=inkex.Boolean, default=False, help="Keep original image on canvas") + pars.add_argument("--ltres", type=float, default=1.0, help="Error treshold straight lines") + pars.add_argument("--qtres", type=float, default=1.0, help="Error treshold quadratic splines") + pars.add_argument("--pathomit", type=int, default=8, help="Noise reduction - discard edge node paths shorter than") + pars.add_argument("--rightangleenhance", type=inkex.Boolean, default=True, help="Enhance right angle corners") + pars.add_argument("--colorsampling", default="2",help="Color sampling") + pars.add_argument("--numberofcolors", type=int, default=16, help="Number of colors to use on palette") + pars.add_argument("--mincolorratio", type=int, default=0, help="Color randomization ratio") + pars.add_argument("--colorquantcycles", type=int, default=3, help="Color quantization will be repeated this many times") + pars.add_argument("--layering", default="0",help="Layering") + pars.add_argument("--strokewidth", type=float, default=1.0, help="SVG stroke-width") + pars.add_argument("--linefilter", type=inkex.Boolean, default=False, help="Noise reduction line filter") + #pars.add_argument("--scale", type=float, default=1.0, help="Coordinate scale factor") + pars.add_argument("--roundcoords", type=int, default=1, help="Decimal places for rounding") + pars.add_argument("--viewbox", type=inkex.Boolean, default=False, help="Enable or disable SVG viewBox") + pars.add_argument("--desc", type=inkex.Boolean, default=False, help="SVG descriptions") + pars.add_argument("--blurradius", type=int, default=0, help="Selective Gaussian blur preprocessing") + pars.add_argument("--blurdelta", type=float, default=20.0, help="RGBA delta treshold for selective Gaussian blur preprocessing") + + def effect(self): + + # internal overwrite for scale: + self.options.scale = 1.0 + + if len(self.svg.selected) > 0: + images = self.svg.selection.filter(inkex.Image).values() + if len(images) > 0: + for image in images: + self.path = self.checkImagePath(image) # This also ensures the file exists + if self.path is None: # check if image is embedded or linked + image_string = image.get('{http://www.w3.org/1999/xlink}href') + # find comma position + i = 0 + while i < 40: + if image_string[i] == ',': + break + i = i + 1 + img = Image.open(BytesIO(base64.b64decode(image_string[i + 1:len(image_string)]))) + else: + img = Image.open(self.path) + + # Write the embedded or linked image to temporary directory + if os.name == "nt": + exportfile = "imagetracerjs.png" + else: + exportfile ="/tmp/imagetracerjs.png" + + if img.mode != 'RGB': + img = img.convert('RGB') + img.save(exportfile, "png") + + nodeclipath = os.path.join("imagetracerjs-master", "nodecli", "nodecli.js") + + ## Build up imagetracerjs command according to your settings from extension GUI + command = "node " # "node.exe" or "node" on Windows or just "node" on Linux + if os.name=="nt": # your OS is Windows. We handle path separator as "\\" instead of unix-like "/" + command += str(nodeclipath).replace("\\", "\\\\") + else: + command += str(nodeclipath) + command += " " + exportfile + command += " ltres " + str(self.options.ltres) + command += " qtres " + str(self.options.qtres) + command += " pathomit " + str(self.options.pathomit) + command += " rightangleenhance " + str(self.options.rightangleenhance).lower() + command += " colorsampling " + str(self.options.colorsampling) + command += " numberofcolors " + str(self.options.numberofcolors) + command += " mincolorratio " + str(self.options.mincolorratio) + command += " numberofcolors " + str(self.options.numberofcolors) + command += " colorquantcycles " + str(self.options.colorquantcycles) + command += " layering " + str(self.options.layering) + command += " strokewidth " + str(self.options.strokewidth) + command += " linefilter " + str(self.options.linefilter).lower() + command += " scale " + str(self.options.scale) + command += " roundcoords " + str(self.options.roundcoords) + command += " viewbox " + str(self.options.viewbox).lower() + command += " desc " + str(self.options.desc).lower() + command += " blurradius " + str(self.options.blurradius) + command += " blurdelta " + str(self.options.blurdelta) + + # Create the vector traced SVG file + with os.popen(command, "r") as tracerprocess: + result = tracerprocess.read() + if "was saved!" not in result: + self.msg("Error while processing input: " + result) + self.msg("Check the image file (maybe convert and save as new file) and try again.") + self.msg("\nYour parser command:") + self.msg(command) + + + # proceed if traced SVG file was successfully created + if os.path.exists(exportfile + ".svg"): + # Delete the temporary png file again because we do not need it anymore + if os.path.exists(exportfile): + os.remove(exportfile) + + # new parse the SVG file and insert it as new group into the current document tree + doc = etree.parse(exportfile + ".svg").getroot() + newGroup = self.document.getroot().add(inkex.Group()) + trace_width = None + trace_height = None + if doc.get('width') is not None and doc.get('height') is not None: + trace_width = doc.get('width') + trace_height = doc.get('height') + else: + viewBox = doc.get('viewBox') #eg "0 0 700 600" + trace_width = viewBox.split(' ')[2] + trace_height = viewBox.split(' ')[3] + + # add transformation to fit previous XY coordinates and width/height + # image might also be influenced by other transformations from parent: + parent = image.getparent() + if parent is not None and parent != self.document.getroot(): + tpc = parent.composed_transform() + x_offset = tpc.e + y_offset = tpc.f + else: + x_offset = 0.0 + y_offset = 0.0 + img_w = image.get('width') + img_h = image.get('height') + img_x = image.get('x') + img_y = image.get('y') + if img_w is not None and img_h is not None and img_x is not None and img_y is not None: + #if width/height are not unitless but end with px, mm, in etc. we have to convert to a float number + if img_w[-1].isdigit() is False: + img_w = self.svg.uutounit(img_w) + if img_h[-1].isdigit() is False: + img_h = self.svg.uutounit(img_h) + + transform = "matrix({:1.6f}, 0, 0, {:1.6f}, {:1.6f}, {:1.6f})"\ + .format(float(img_w) / float(trace_width), float(img_h) / float(trace_height), float(img_x) + x_offset, float(img_y) + y_offset) + newGroup.attrib['transform'] = transform + else: + t = image.composed_transform() + img_w = t.a + img_h = t.d + img_x = t.e + img_y = t.f + transform = "matrix({:1.6f}, 0, 0, {:1.6f}, {:1.6f}, {:1.6f})"\ + .format(float(img_w) / float(trace_width), float(img_h) / float(trace_height), float(img_x) + x_offset, float(img_y) + y_offset) + newGroup.attrib['transform'] = transform + + for child in doc.getchildren(): + newGroup.append(child) + + # Delete the temporary svg file + if os.path.exists(exportfile + ".svg"): + os.remove(exportfile + ".svg") + + #remove the old image or not + if self.options.keeporiginal is not True: + image.delete() + else: + self.msg("No images found in selection! Check if you selected a group instead.") + else: + self.msg("Selection is empty. Please select one or more images.") + +if __name__ == '__main__': + Imagetracerjs().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/imagetracerjs/node.exe b/extensions/fablabchemnitz/imagetracerjs/node.exe new file mode 100644 index 00000000..a57ccd90 Binary files /dev/null and b/extensions/fablabchemnitz/imagetracerjs/node.exe differ diff --git a/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/cube.obj b/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/cube.obj new file mode 100644 index 00000000..b577ce11 --- /dev/null +++ b/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/cube.obj @@ -0,0 +1,19 @@ +#Name:Cube +#Type:Face-specified +#Direction:Clockwise + +v -0.5 -0.5 -0.5 +v -0.5 -0.5 0.5 +v -0.5 0.5 -0.5 +v -0.5 0.5 0.5 +v 0.5 -0.5 -0.5 +v 0.5 -0.5 0.5 +v 0.5 0.5 -0.5 +v 0.5 0.5 0.5 + +f 8 4 2 6 +f 8 6 5 7 +f 8 7 3 4 +f 4 3 1 2 +f 1 3 7 5 +f 2 1 5 6 \ No newline at end of file diff --git a/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/cuboct.obj b/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/cuboct.obj new file mode 100644 index 00000000..709606bc --- /dev/null +++ b/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/cuboct.obj @@ -0,0 +1,30 @@ +#Name:Cuboctahedron +#Type:Face_specified + +v -1. 0 0 +v -0.5 -0.5 -0.70710678 +v -0.5 -0.5 0.70710678 +v -0.5 0.5 -0.70710678 +v -0.5 0.5 0.70710678 +v 0 -1. 0 +v 0 1. 0 +v 0.5 -0.5 -0.70710678 +v 0.5 -0.5 0.70710678 +v 0.5 0.5 -0.70710678 +v 0.5 0.5 0.70710678 +v 1. 0 0 + +f 12 11 9 +f 3 5 1 +f 6 9 3 +f 5 11 7 +f 8 10 12 +f 1 4 2 +f 2 8 6 +f 7 10 4 +f 4 10 8 2 +f 3 9 11 5 +f 9 6 8 12 +f 3 1 2 6 +f 5 7 4 1 +f 11 12 10 7 diff --git a/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/dodec.obj b/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/dodec.obj new file mode 100644 index 00000000..5b66f09e --- /dev/null +++ b/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/dodec.obj @@ -0,0 +1,36 @@ +#NameDodecahedron +#Type:Face_specified + +v 0 0 1.4012585 +v 0 0 -1.4012585 +v 0.17841104 -1.3090170 0.46708618 +v 0.17841104 1.3090170 0.46708618 +v 0.46708618 -0.80901699 -1.0444364 +v 0.46708618 0.80901699 -1.0444364 +v 1.0444364 -0.80901699 0.46708618 +v 1.0444364 0.80901699 0.46708618 +v -1.2228475 -0.5 0.46708618 +v -1.2228475 0.5 0.46708618 +v 1.2228475 -0.5 -0.46708618 +v 1.2228475 0.5 -0.46708618 +v -0.93417236 0 -1.0444364 +v -0.46708618 -0.80901699 1.0444364 +v -0.46708618 0.80901699 1.0444364 +v 0.93417236 0 1.0444364 +v -1.0444364 -0.80901699 -0.46708618 +v -1.0444364 0.80901699 -0.46708618 +v -0.17841104 -1.3090170 -0.46708618 +v -0.17841104 1.3090170 -0.46708618 + +f 15 10 9 14 1 +f 2 6 12 11 5 +f 5 11 7 3 19 +f 11 12 8 16 7 +f 12 6 20 4 8 +f 6 2 13 18 20 +f 2 5 19 17 13 +f 4 20 18 10 15 +f 18 13 17 9 10 +f 17 19 3 14 9 +f 3 7 16 1 14 +f 16 8 4 15 1 diff --git a/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/great_dodec.obj b/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/great_dodec.obj new file mode 100644 index 00000000..2d12f028 --- /dev/null +++ b/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/great_dodec.obj @@ -0,0 +1,96 @@ +#Name:Great Dodecahedron +#Type:Face_specified + +v 0. 0. -0.951057 +v 0. 0. 0.951057 +v -0.425325 -0.309017 -0.100406 +v -0.425325 0.309017 -0.100406 +v 0.425325 -0.309017 0.100406 +v 0.425325 0.309017 0.100406 +v -0.688191 -0.5 0.425325 +v -0.688191 0.5 0.425325 +v 0.688191 -0.5 -0.425325 +v 0.688191 0.5 -0.425325 +v -0.850651 0. -0.425325 +v 0.850651 0. 0.425325 +v -0.100406 -0.309017 0.425325 +v -0.100406 0.309017 0.425325 +v 0.100406 -0.309017 -0.425325 +v 0.100406 0.309017 -0.425325 +v -0.32492 0. 0.425325 +v -0.16246 -0.5 0.100406 +v -0.16246 0.5 0.100406 +v 0.16246 -0.5 -0.100406 +v 0.16246 0.5 -0.100406 +v 0.32492 0. -0.425325 +v -0.525731 0. 0.100406 +v -0.262866 -0.809017 -0.425325 +v -0.262866 0.190983 -0.425325 +v -0.262866 -0.190983 -0.425325 +v -0.262866 0.809017 -0.425325 +v 0.262866 -0.809017 0.425325 +v 0.262866 0.190983 0.425325 +v 0.262866 -0.190983 0.425325 +v 0.262866 0.809017 0.425325 +v 0.525731 0. -0.100406 + +f 14 2 31 +f 14 31 8 +f 14 8 2 +f 17 2 8 +f 17 8 7 +f 17 7 2 +f 13 2 7 +f 13 7 28 +f 13 28 2 +f 30 2 28 +f 30 28 12 +f 30 12 2 +f 29 2 12 +f 29 12 31 +f 29 31 2 +f 15 9 24 +f 15 24 1 +f 15 1 9 +f 22 10 9 +f 22 9 1 +f 22 1 10 +f 16 27 10 +f 16 10 1 +f 16 1 27 +f 25 11 27 +f 25 27 1 +f 25 1 11 +f 26 24 11 +f 26 11 1 +f 26 1 24 +f 19 31 27 +f 19 27 8 +f 19 8 31 +f 23 8 11 +f 23 11 7 +f 23 7 8 +f 18 7 24 +f 18 24 28 +f 18 28 7 +f 5 28 9 +f 5 9 12 +f 5 12 28 +f 6 12 10 +f 6 10 31 +f 6 31 12 +f 20 9 28 +f 20 28 24 +f 20 24 9 +f 32 10 12 +f 32 12 9 +f 32 9 10 +f 21 27 31 +f 21 31 10 +f 21 10 27 +f 4 11 8 +f 4 8 27 +f 4 27 11 +f 3 24 7 +f 3 7 11 +f 3 11 24 diff --git a/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/great_rhombicosidodec.obj b/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/great_rhombicosidodec.obj new file mode 100644 index 00000000..88bdccc5 --- /dev/null +++ b/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/great_rhombicosidodec.obj @@ -0,0 +1,185 @@ +#Name:Great Rhombicosidodecahedron +#Type:face_specified +v -1. -1.30902 -3.42705 +v -1. -1.30902 3.42705 +v -1. 1.30902 -3.42705 +v -1. 1.30902 3.42705 +v -0.5 -0.5 -3.73607 +v -0.5 -0.5 3.73607 +v -0.5 0.5 -3.73607 +v -0.5 0.5 3.73607 +v -0.5 -3.73607 -0.5 +v -0.5 -3.73607 0.5 +v -0.5 -2.11803 -3.11803 +v -0.5 -2.11803 3.11803 +v -0.5 3.73607 -0.5 +v -0.5 3.73607 0.5 +v -0.5 2.11803 -3.11803 +v -0.5 2.11803 3.11803 +v 0.5 -0.5 -3.73607 +v 0.5 -0.5 3.73607 +v 0.5 0.5 -3.73607 +v 0.5 0.5 3.73607 +v 0.5 -3.73607 -0.5 +v 0.5 -3.73607 0.5 +v 0.5 -2.11803 -3.11803 +v 0.5 -2.11803 3.11803 +v 0.5 3.73607 -0.5 +v 0.5 3.73607 0.5 +v 0.5 2.11803 -3.11803 +v 0.5 2.11803 3.11803 +v 1. -1.30902 -3.42705 +v 1. -1.30902 3.42705 +v 1. 1.30902 -3.42705 +v 1. 1.30902 3.42705 +v -3.42705 -1. -1.30902 +v -3.42705 -1. 1.30902 +v -3.42705 1. -1.30902 +v -3.42705 1. 1.30902 +v -2.92705 -1.80902 -1.61803 +v -2.92705 -1.80902 1.61803 +v -2.92705 1.80902 -1.61803 +v -2.92705 1.80902 1.61803 +v -1.80902 -1.61803 -2.92705 +v -1.80902 -1.61803 2.92705 +v -1.80902 1.61803 -2.92705 +v -1.80902 1.61803 2.92705 +v -1.30902 -3.42705 -1. +v -1.30902 -3.42705 1. +v -1.30902 -2.42705 -2.61803 +v -1.30902 -2.42705 2.61803 +v -1.30902 2.42705 -2.61803 +v -1.30902 2.42705 2.61803 +v -1.30902 3.42705 -1. +v -1.30902 3.42705 1. +v -2.61803 -1.30902 -2.42705 +v -2.61803 -1.30902 2.42705 +v -2.61803 1.30902 -2.42705 +v -2.61803 1.30902 2.42705 +v -3.73607 -0.5 -0.5 +v -3.73607 -0.5 0.5 +v -3.73607 0.5 -0.5 +v -3.73607 0.5 0.5 +v -1.61803 -2.92705 -1.80902 +v -1.61803 -2.92705 1.80902 +v -1.61803 2.92705 -1.80902 +v -1.61803 2.92705 1.80902 +v -3.11803 -0.5 -2.11803 +v -3.11803 -0.5 2.11803 +v -3.11803 0.5 -2.11803 +v -3.11803 0.5 2.11803 +v -2.11803 -3.11803 -0.5 +v -2.11803 -3.11803 0.5 +v -2.11803 3.11803 -0.5 +v -2.11803 3.11803 0.5 +v -2.42705 -2.61803 -1.30902 +v -2.42705 -2.61803 1.30902 +v -2.42705 2.61803 -1.30902 +v -2.42705 2.61803 1.30902 +v 1.61803 -2.92705 -1.80902 +v 1.61803 -2.92705 1.80902 +v 1.61803 2.92705 -1.80902 +v 1.61803 2.92705 1.80902 +v 2.42705 -2.61803 -1.30902 +v 2.42705 -2.61803 1.30902 +v 2.42705 2.61803 -1.30902 +v 2.42705 2.61803 1.30902 +v 3.73607 -0.5 -0.5 +v 3.73607 -0.5 0.5 +v 3.73607 0.5 -0.5 +v 3.73607 0.5 0.5 +v 2.11803 -3.11803 -0.5 +v 2.11803 -3.11803 0.5 +v 2.11803 3.11803 -0.5 +v 2.11803 3.11803 0.5 +v 1.30902 -3.42705 -1. +v 1.30902 -3.42705 1. +v 1.30902 -2.42705 -2.61803 +v 1.30902 -2.42705 2.61803 +v 1.30902 2.42705 -2.61803 +v 1.30902 2.42705 2.61803 +v 1.30902 3.42705 -1. +v 1.30902 3.42705 1. +v 2.61803 -1.30902 -2.42705 +v 2.61803 -1.30902 2.42705 +v 2.61803 1.30902 -2.42705 +v 2.61803 1.30902 2.42705 +v 3.11803 -0.5 -2.11803 +v 3.11803 -0.5 2.11803 +v 3.11803 0.5 -2.11803 +v 3.11803 0.5 2.11803 +v 1.80902 -1.61803 -2.92705 +v 1.80902 -1.61803 2.92705 +v 1.80902 1.61803 -2.92705 +v 1.80902 1.61803 2.92705 +v 2.92705 -1.80902 -1.61803 +v 2.92705 -1.80902 1.61803 +v 2.92705 1.80902 -1.61803 +v 2.92705 1.80902 1.61803 +v 3.42705 -1. -1.30902 +v 3.42705 -1. 1.30902 +v 3.42705 1. -1.30902 +v 3.42705 1. 1.30902 + +f 2 6 8 4 44 56 68 66 54 42 +f 109 29 17 19 31 111 103 107 105 101 +f 24 30 18 6 2 12 +f 7 3 15 27 31 19 +f 58 57 33 37 73 69 70 74 38 34 +f 84 116 120 88 87 119 115 83 91 92 +f 90 89 81 113 117 85 86 118 114 82 +f 36 40 76 72 71 75 39 35 59 60 +f 5 17 29 23 11 1 +f 4 8 20 32 28 16 +f 67 55 43 3 7 5 1 41 53 65 +f 18 30 110 102 106 108 104 112 32 20 +f 79 83 115 103 111 97 +f 38 74 62 48 42 54 +f 4 16 50 44 +f 23 29 109 95 +f 96 110 30 24 +f 43 49 15 3 +f 53 41 47 61 73 37 +f 98 112 104 116 84 80 +f 69 45 9 10 46 70 +f 26 100 92 91 99 25 +f 82 114 102 110 96 78 +f 55 39 75 63 49 43 +f 1 11 47 41 +f 28 32 112 98 +f 61 47 11 23 95 77 93 21 9 45 +f 50 16 28 98 80 100 26 14 52 64 +f 97 111 31 27 +f 42 48 12 2 +f 44 50 64 76 40 56 +f 77 95 109 101 113 81 +f 63 51 13 25 99 79 97 27 15 49 +f 46 10 22 94 78 96 24 12 48 62 +f 52 14 13 51 71 72 +f 22 21 93 89 90 94 +f 115 119 107 103 +f 34 38 54 66 +f 71 51 63 75 +f 94 90 82 78 +f 114 118 106 102 +f 35 39 55 67 +f 70 46 62 74 +f 99 91 83 79 +f 65 53 37 33 +f 104 108 120 116 +f 77 81 89 93 +f 76 64 52 72 +f 59 35 67 65 33 57 +f 106 118 86 88 120 108 +f 68 56 40 36 +f 101 105 117 113 +f 80 84 92 100 +f 73 61 45 69 +f 34 66 68 36 60 58 +f 105 107 119 87 85 117 +f 7 19 17 5 +f 6 18 20 8 +f 14 26 25 13 +f 9 21 22 10 +f 58 60 59 57 +f 85 87 88 86 diff --git a/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/great_rhombicuboct.obj b/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/great_rhombicuboct.obj new file mode 100644 index 00000000..1ef7b4c7 --- /dev/null +++ b/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/great_rhombicuboct.obj @@ -0,0 +1,77 @@ +#Name:Great Rhombicuboctahedron +#Type:face_specified +v -0.5 1.20711 -1.91421 +v -0.5 1.20711 1.91421 +v -0.5 -1.20711 -1.91421 +v -0.5 -1.20711 1.91421 +v -0.5 -1.91421 1.20711 +v -0.5 -1.91421 -1.20711 +v -0.5 1.91421 1.20711 +v -0.5 1.91421 -1.20711 +v 0.5 1.20711 -1.91421 +v 0.5 1.20711 1.91421 +v 0.5 -1.20711 -1.91421 +v 0.5 -1.20711 1.91421 +v 0.5 -1.91421 1.20711 +v 0.5 -1.91421 -1.20711 +v 0.5 1.91421 1.20711 +v 0.5 1.91421 -1.20711 +v 1.20711 -0.5 -1.91421 +v 1.20711 -0.5 1.91421 +v 1.20711 0.5 -1.91421 +v 1.20711 0.5 1.91421 +v 1.20711 -1.91421 -0.5 +v 1.20711 -1.91421 0.5 +v 1.20711 1.91421 -0.5 +v 1.20711 1.91421 0.5 +v -1.20711 -0.5 -1.91421 +v -1.20711 -0.5 1.91421 +v -1.20711 0.5 -1.91421 +v -1.20711 0.5 1.91421 +v -1.20711 -1.91421 -0.5 +v -1.20711 -1.91421 0.5 +v -1.20711 1.91421 -0.5 +v -1.20711 1.91421 0.5 +v -1.91421 -0.5 1.20711 +v -1.91421 -0.5 -1.20711 +v -1.91421 0.5 1.20711 +v -1.91421 0.5 -1.20711 +v -1.91421 1.20711 -0.5 +v -1.91421 1.20711 0.5 +v -1.91421 -1.20711 -0.5 +v -1.91421 -1.20711 0.5 +v 1.91421 -0.5 1.20711 +v 1.91421 -0.5 -1.20711 +v 1.91421 0.5 1.20711 +v 1.91421 0.5 -1.20711 +v 1.91421 1.20711 -0.5 +v 1.91421 1.20711 0.5 +v 1.91421 -1.20711 -0.5 +v 1.91421 -1.20711 0.5 + +f 44 42 17 19 +f 14 6 3 11 +f 34 36 27 25 +f 8 16 9 1 +f 20 18 41 43 +f 12 4 5 13 +f 26 28 35 33 +f 2 10 15 7 +f 45 23 24 46 +f 39 29 30 40 +f 48 22 21 47 +f 38 32 31 37 +f 9 19 17 11 3 25 27 1 +f 2 28 26 4 12 18 20 10 +f 41 48 47 42 44 45 46 43 +f 35 38 37 36 34 39 40 33 +f 15 24 23 16 8 31 32 7 +f 5 30 29 6 14 21 22 13 +f 46 24 15 10 20 43 +f 35 28 2 7 32 38 +f 41 18 12 13 22 48 +f 40 30 5 4 26 33 +f 44 19 9 16 23 45 +f 37 31 8 1 27 36 +f 47 21 14 11 17 42 +f 34 25 3 6 29 39 diff --git a/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/great_stel_dodec.obj b/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/great_stel_dodec.obj new file mode 100644 index 00000000..b0e54299 --- /dev/null +++ b/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/great_stel_dodec.obj @@ -0,0 +1,96 @@ +#Name:Great Stellated Dodecahedron +#Type:face_specified + +v 0. 0. -0.951057 +v 0. 0. 0.951057 +v -0.425325 -1.30902 1.80171 +v -0.425325 1.30902 1.80171 +v 0.425325 -1.30902 -1.80171 +v 0.425325 1.30902 -1.80171 +v -0.688191 -0.5 0.425325 +v -0.688191 0.5 0.425325 +v -0.688191 -2.11803 0.425325 +v -0.688191 2.11803 0.425325 +v 0.688191 -0.5 -0.425325 +v 0.688191 0.5 -0.425325 +v 0.688191 -2.11803 -0.425325 +v 0.688191 2.11803 -0.425325 +v -0.850651 0. -0.425325 +v 0.850651 0. 0.425325 +v -1.11352 -0.809017 -1.80171 +v -1.11352 0.809017 -1.80171 +v 1.11352 -0.809017 1.80171 +v 1.11352 0.809017 1.80171 +v -1.80171 -1.30902 -0.425325 +v -1.80171 1.30902 -0.425325 +v 1.80171 -1.30902 0.425325 +v 1.80171 1.30902 0.425325 +v -2.22703 0. 0.425325 +v 2.22703 0. -0.425325 +v -0.262866 -0.809017 -0.425325 +v -0.262866 0.809017 -0.425325 +v 0.262866 -0.809017 0.425325 +v 0.262866 0.809017 0.425325 +v -1.37638 0. 1.80171 +v 1.37638 0. -1.80171 + +f 4 2 30 +f 4 30 8 +f 4 8 2 +f 31 2 8 +f 31 8 7 +f 31 7 2 +f 3 2 7 +f 3 7 29 +f 3 29 2 +f 19 2 29 +f 19 29 16 +f 19 16 2 +f 20 2 16 +f 20 16 30 +f 20 30 2 +f 5 11 27 +f 5 27 1 +f 5 1 11 +f 32 12 11 +f 32 11 1 +f 32 1 12 +f 6 28 12 +f 6 12 1 +f 6 1 28 +f 18 15 28 +f 18 28 1 +f 18 1 15 +f 17 27 15 +f 17 15 1 +f 17 1 27 +f 10 30 28 +f 10 28 8 +f 10 8 30 +f 25 8 15 +f 25 15 7 +f 25 7 8 +f 9 7 27 +f 9 27 29 +f 9 29 7 +f 23 29 11 +f 23 11 16 +f 23 16 29 +f 24 16 12 +f 24 12 30 +f 24 30 16 +f 13 11 29 +f 13 29 27 +f 13 27 11 +f 26 12 16 +f 26 16 11 +f 26 11 12 +f 14 28 30 +f 14 30 12 +f 14 12 28 +f 22 15 8 +f 22 8 28 +f 22 28 15 +f 21 27 7 +f 21 7 15 +f 21 15 27 diff --git a/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/icos.obj b/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/icos.obj new file mode 100644 index 00000000..ed55ea4f --- /dev/null +++ b/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/icos.obj @@ -0,0 +1,36 @@ +#Name:Icosahedron +#Type:face_specified + +v 0 0 -0.95105652 +v 0 0 0.95105652 +v -0.85065081 0 -0.42532540 +v 0.85065081 0 0.42532540 +v 0.68819096 -0.50000000 -0.42532540 +v 0.68819096 0.50000000 -0.42532540 +v -0.68819096 -0.50000000 0.42532540 +v -0.68819096 0.50000000 0.42532540 +v -0.26286556 -0.80901699 -0.42532540 +v -0.26286556 0.80901699 -0.42532540 +v 0.26286556 -0.80901699 0.42532540 +v 0.26286556 0.80901699 0.42532540 + +f 2 12 8 +f 2 8 7 +f 2 7 11 +f 2 11 4 +f 2 4 12 +f 5 9 1 +f 6 5 1 +f 10 6 1 +f 3 10 1 +f 9 3 1 +f 12 10 8 +f 8 3 7 +f 7 9 11 +f 11 5 4 +f 4 6 12 +f 5 11 9 +f 6 4 5 +f 10 12 6 +f 3 8 10 +f 9 7 3 diff --git a/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/icosidodec.obj b/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/icosidodec.obj new file mode 100644 index 00000000..961bec20 --- /dev/null +++ b/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/icosidodec.obj @@ -0,0 +1,65 @@ +#Name:Icosidodecahedron +#Type:face_specified +v 0. -1.61803 0. +v 0. 1.61803 0. +v 0.262866 -0.809017 -1.37638 +v 0.262866 0.809017 -1.37638 +v 0.425325 -1.30902 0.850651 +v 0.425325 1.30902 0.850651 +v 0.688191 -0.5 1.37638 +v 0.688191 0.5 1.37638 +v 1.11352 -0.809017 -0.850651 +v 1.11352 0.809017 -0.850651 +v -1.37638 0. -0.850651 +v -0.688191 -0.5 -1.37638 +v -0.688191 0.5 -1.37638 +v 1.37638 0. 0.850651 +v 0.951057 -1.30902 0. +v 0.951057 1.30902 0. +v 0.850651 0. -1.37638 +v -0.951057 -1.30902 0. +v -0.951057 1.30902 0. +v -1.53884 -0.5 0. +v -1.53884 0.5 0. +v 1.53884 -0.5 0. +v 1.53884 0.5 0. +v -0.850651 0. 1.37638 +v -1.11352 -0.809017 0.850651 +v -1.11352 0.809017 0.850651 +v -0.425325 -1.30902 -0.850651 +v -0.425325 1.30902 -0.850651 +v -0.262866 -0.809017 1.37638 +v -0.262866 0.809017 1.37638 + +f 30 24 29 7 8 +f 26 24 30 +f 25 29 24 +f 5 7 29 +f 14 8 7 +f 6 30 8 +f 16 2 6 +f 19 21 26 +f 20 18 25 +f 1 15 5 +f 22 23 14 +f 2 19 26 30 6 +f 21 20 25 24 26 +f 18 1 5 29 25 +f 15 22 14 7 5 +f 23 16 6 8 14 +f 12 13 4 17 3 +f 3 17 9 +f 17 4 10 +f 4 13 28 +f 13 12 11 +f 12 3 27 +f 27 1 18 +f 9 22 15 +f 10 16 23 +f 28 19 2 +f 11 20 21 +f 27 3 9 15 1 +f 9 17 10 23 22 +f 10 4 28 2 16 +f 28 13 11 21 19 +f 11 12 27 18 20 diff --git a/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/jessens_orthog_icos.obj b/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/jessens_orthog_icos.obj new file mode 100644 index 00000000..41aff7a6 --- /dev/null +++ b/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/jessens_orthog_icos.obj @@ -0,0 +1,35 @@ +#Name:Jessen's Orthogonal Icosahedron +#Type:face_specified +v 0. -0.809017 0.5 +v 0. -0.809017 -0.5 +v 0. 0.809017 0.5 +v 0. 0.809017 -0.5 +v 0.5 0. -0.809017 +v 0.5 0. 0.809017 +v -0.5 0. -0.809017 +v -0.5 0. 0.809017 +v -0.809017 0.5 0. +v -0.809017 -0.5 0. +v 0.809017 0.5 0. +v 0.809017 -0.5 0. + +f 3 1 6 +f 6 1 12 +f 6 12 5 +f 11 3 6 +f 6 5 11 +f 12 1 10 +f 12 10 2 +f 5 12 2 +f 3 11 9 +f 1 3 8 +f 8 10 1 +f 7 2 10 +f 10 8 7 +f 3 9 8 +f 7 8 9 +f 5 2 4 +f 2 7 4 +f 7 9 4 +f 4 9 11 +f 5 4 11 \ No newline at end of file diff --git a/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/methane.obj b/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/methane.obj new file mode 100644 index 00000000..0b2d7441 --- /dev/null +++ b/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/methane.obj @@ -0,0 +1,13 @@ +#Name:Methane Molecule +#Type:edge_specified + +v 0 0 0 +v 0 0 0.61237244 +v -0.28867513 -0.50000000 -0.20412415 +v -0.28867513 0.50000000 -0.20412415 +v 0.57735027 0 -0.20412415 + +l 1 2 +l 1 3 +l 1 4 +l 1 5 diff --git a/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/oct.obj b/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/oct.obj new file mode 100644 index 00000000..f356b698 --- /dev/null +++ b/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/oct.obj @@ -0,0 +1,17 @@ +#Name:Octahedron +#Type:face_specified +v -0.5 -0.5 0 +v -0.5 0.5 0 +v 0 0 -0.70710678 +v 0 0 0.70710678 +v 0.5 -0.5 0 +v 0.5 0.5 0 + +f 4 5 6 +f 4 6 2 +f 4 2 1 +f 4 1 5 +f 5 1 3 +f 5 3 6 +f 3 1 2 +f 6 3 2 diff --git a/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/rh_axes.obj b/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/rh_axes.obj new file mode 100644 index 00000000..cc6623fc --- /dev/null +++ b/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/rh_axes.obj @@ -0,0 +1,12 @@ +#Name:Right Handed Coordinate Axes +#Type:Edge_specified + +v 0 0 0 +v 1 0 0 +v 0 1 0 +v 0 0 1 + +l 1 2 +l 1 3 +l 1 4 + diff --git a/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/rhomb_dodec.obj b/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/rhomb_dodec.obj new file mode 100644 index 00000000..9fde9d66 --- /dev/null +++ b/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/rhomb_dodec.obj @@ -0,0 +1,29 @@ +#Name:Rhombic Dodecahedron +#Type:face_specified +v -0.816497 -0.816497 0. +v -0.816497 0. -0.57735 +v -0.816497 0. 0.57735 +v -0.816497 0.816497 0. +v 0. -0.816497 -0.57735 +v 0. -0.816497 0.57735 +v 0. 0. -1.1547 +v 0. 0. 1.1547 +v 0. 0.816497 -0.57735 +v 0. 0.816497 0.57735 +v 0.816497 -0.816497 0. +v 0.816497 0. -0.57735 +v 0.816497 0. 0.57735 +v 0.816497 0.816497 0. + +f 2 1 3 4 +f 1 2 7 5 +f 6 8 3 1 +f 2 4 9 7 +f 8 10 4 3 +f 11 6 1 5 +f 9 4 10 14 +f 5 7 12 11 +f 11 13 8 6 +f 7 9 14 12 +f 13 14 10 8 +f 14 13 11 12 \ No newline at end of file diff --git a/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/rhomb_triacont.obj b/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/rhomb_triacont.obj new file mode 100644 index 00000000..70acebf5 --- /dev/null +++ b/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/rhomb_triacont.obj @@ -0,0 +1,65 @@ +#Name:Rhombic Triacontahedron +#Type:face_specified +v 0. 0. -1.61803 +v 0. 0. 1.61803 +v 0.276393 -0.850651 1.17082 +v 0.276393 0.850651 1.17082 +v 0.894427 0. 1.17082 +v 1.17082 -0.850651 0.723607 +v 1.17082 -0.850651 -0.276393 +v 1.17082 0.850651 0.723607 +v 1.17082 0.850651 -0.276393 +v -0.894427 0. -1.17082 +v -0.447214 -1.37638 0.723607 +v -0.447214 -1.37638 -0.276393 +v -0.447214 1.37638 0.723607 +v -0.447214 1.37638 -0.276393 +v 0.447214 -1.37638 0.276393 +v 0.447214 -1.37638 -0.723607 +v 0.447214 1.37638 0.276393 +v 0.447214 1.37638 -0.723607 +v -1.44721 0. 0.723607 +v -1.44721 0. -0.276393 +v -0.723607 -0.525731 1.17082 +v -0.723607 0.525731 1.17082 +v 0.723607 -0.525731 -1.17082 +v 0.723607 0.525731 -1.17082 +v 1.44721 0. 0.276393 +v 1.44721 0. -0.723607 +v -1.17082 -0.850651 0.276393 +v -1.17082 -0.850651 -0.723607 +v -1.17082 0.850651 0.276393 +v -1.17082 0.850651 -0.723607 +v -0.276393 -0.850651 -1.17082 +v -0.276393 0.850651 -1.17082 + +f 16 15 11 12 +f 14 13 17 18 +f 10 28 20 30 +f 8 5 6 25 +f 12 28 31 16 +f 32 30 14 18 +f 6 3 11 15 +f 8 17 13 4 +f 11 21 19 27 +f 13 29 19 22 +f 7 16 23 26 +f 24 18 9 26 +f 12 11 27 28 +f 30 29 13 14 +f 7 6 15 16 +f 18 17 8 9 +f 2 22 19 21 +f 23 1 24 26 +f 3 2 21 11 +f 4 13 22 2 +f 16 31 1 23 +f 1 32 18 24 +f 31 28 10 1 +f 10 30 32 1 +f 6 5 2 3 +f 8 4 2 5 +f 28 27 19 20 +f 20 19 29 30 +f 26 25 6 7 +f 9 8 25 26 diff --git a/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/small_rhombicosidodec.obj b/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/small_rhombicosidodec.obj new file mode 100644 index 00000000..a209ba2c --- /dev/null +++ b/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/small_rhombicosidodec.obj @@ -0,0 +1,127 @@ +#Name:Small Rhombicosidodecahedron +#Type:face_specified + +v -0.5 -0.5 -2.11803 +v -0.5 -0.5 2.11803 +v -0.5 0.5 -2.11803 +v -0.5 0.5 2.11803 +v -0.5 -2.11803 -0.5 +v -0.5 -2.11803 0.5 +v -0.5 2.11803 -0.5 +v -0.5 2.11803 0.5 +v 0. -1.30902 -1.80902 +v 0. -1.30902 1.80902 +v 0. 1.30902 -1.80902 +v 0. 1.30902 1.80902 +v 0.5 -0.5 -2.11803 +v 0.5 -0.5 2.11803 +v 0.5 0.5 -2.11803 +v 0.5 0.5 2.11803 +v 0.5 -2.11803 -0.5 +v 0.5 -2.11803 0.5 +v 0.5 2.11803 -0.5 +v 0.5 2.11803 0.5 +v -1.80902 0. -1.30902 +v -1.80902 0. 1.30902 +v -0.809017 -1.61803 -1.30902 +v -0.809017 -1.61803 1.30902 +v -0.809017 1.61803 -1.30902 +v -0.809017 1.61803 1.30902 +v -1.61803 -1.30902 -0.809017 +v -1.61803 -1.30902 0.809017 +v -1.61803 1.30902 -0.809017 +v -1.61803 1.30902 0.809017 +v -2.11803 -0.5 -0.5 +v -2.11803 -0.5 0.5 +v -2.11803 0.5 -0.5 +v -2.11803 0.5 0.5 +v -1.30902 -1.80902 0. +v -1.30902 -0.809017 -1.61803 +v -1.30902 -0.809017 1.61803 +v -1.30902 0.809017 -1.61803 +v -1.30902 0.809017 1.61803 +v -1.30902 1.80902 0. +v 0.809017 -1.61803 -1.30902 +v 0.809017 -1.61803 1.30902 +v 0.809017 1.61803 -1.30902 +v 0.809017 1.61803 1.30902 +v 1.61803 -1.30902 -0.809017 +v 1.61803 -1.30902 0.809017 +v 1.61803 1.30902 -0.809017 +v 1.61803 1.30902 0.809017 +v 2.11803 -0.5 -0.5 +v 2.11803 -0.5 0.5 +v 2.11803 0.5 -0.5 +v 2.11803 0.5 0.5 +v 1.30902 -1.80902 0. +v 1.30902 -0.809017 -1.61803 +v 1.30902 -0.809017 1.61803 +v 1.30902 0.809017 -1.61803 +v 1.30902 0.809017 1.61803 +v 1.30902 1.80902 0. +v 1.80902 0. -1.30902 +v 1.80902 0. 1.30902 + +f 36 23 27 +f 37 28 24 +f 40 8 7 +f 35 5 6 +f 38 29 25 +f 39 26 30 +f 10 14 2 +f 9 1 13 +f 12 4 16 +f 11 15 3 +f 54 45 41 +f 55 42 46 +f 58 19 20 +f 53 18 17 +f 56 43 47 +f 57 48 44 +f 34 32 22 +f 33 21 31 +f 59 51 49 +f 60 50 52 +f 27 31 21 36 +f 23 36 1 9 +f 10 2 37 24 +f 37 22 32 28 +f 8 40 30 26 +f 25 29 40 7 +f 35 27 23 5 +f 6 24 28 35 +f 3 38 25 11 +f 21 33 29 38 +f 39 30 34 22 +f 12 26 39 4 +f 55 14 10 42 +f 41 9 13 54 +f 57 44 12 16 +f 15 11 43 56 +f 45 54 59 49 +f 50 60 55 46 +f 48 58 20 44 +f 43 19 58 47 +f 53 17 41 45 +f 46 42 18 53 +f 59 56 47 51 +f 52 48 57 60 +f 31 32 34 33 +f 17 18 6 5 +f 1 3 15 13 +f 14 16 4 2 +f 7 8 20 19 +f 51 52 50 49 +f 3 1 36 21 38 +f 22 37 2 4 39 +f 29 33 34 30 40 +f 27 35 28 32 31 +f 42 10 24 6 18 +f 41 17 5 23 9 +f 20 8 26 12 44 +f 11 25 7 19 43 +f 56 59 54 13 15 +f 57 16 14 55 60 +f 58 48 52 51 47 +f 49 50 46 53 45 + diff --git a/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/small_rhombicuboct.obj b/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/small_rhombicuboct.obj new file mode 100644 index 00000000..2d064aba --- /dev/null +++ b/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/small_rhombicuboct.obj @@ -0,0 +1,54 @@ +#Name:Small Rhombicuboctahedron +#Type:face_specified + +v -0.5 -0.5 -1.20711 +v -0.5 -0.5 1.20711 +v -0.5 0.5 -1.20711 +v -0.5 0.5 1.20711 +v -0.5 -1.20711 -0.5 +v -0.5 -1.20711 0.5 +v -0.5 1.20711 -0.5 +v -0.5 1.20711 0.5 +v 0.5 -0.5 -1.20711 +v 0.5 -0.5 1.20711 +v 0.5 0.5 -1.20711 +v 0.5 0.5 1.20711 +v 0.5 -1.20711 -0.5 +v 0.5 -1.20711 0.5 +v 0.5 1.20711 -0.5 +v 0.5 1.20711 0.5 +v -1.20711 -0.5 -0.5 +v -1.20711 -0.5 0.5 +v -1.20711 0.5 -0.5 +v -1.20711 0.5 0.5 +v 1.20711 -0.5 -0.5 +v 1.20711 -0.5 0.5 +v 1.20711 0.5 -0.5 +v 1.20711 0.5 0.5 + +f 3 11 9 1 +f 2 10 12 4 +f 24 22 21 23 +f 19 17 18 20 +f 5 13 14 6 +f 8 16 15 7 +f 13 21 22 14 +f 16 24 23 15 +f 6 18 17 5 +f 7 19 20 8 +f 6 14 10 2 +f 4 12 16 8 +f 22 24 12 10 +f 2 4 20 18 +f 1 9 13 5 +f 7 15 11 3 +f 9 11 23 21 +f 17 19 3 1 +f 22 10 14 +f 16 12 24 +f 6 2 18 +f 20 4 8 +f 13 9 21 +f 23 11 15 +f 17 1 5 +f 7 3 19 diff --git a/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/small_triam_icos.obj b/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/small_triam_icos.obj new file mode 100644 index 00000000..1d366ff2 --- /dev/null +++ b/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/small_triam_icos.obj @@ -0,0 +1,95 @@ +#Name:Small Triambic Icosahedron +#Type:face_specified +v 0. 0. -0.951057 +v 0. 0. 0.951057 +v 0.262866 -0.809017 0.425325 +v 0.262866 0.809017 0.425325 +v 0.688191 -0.5 -0.425325 +v 0.688191 0.5 -0.425325 +v 0.995959 0. -0.190211 +v -0.688191 -0.5 0.425325 +v -0.688191 0.5 0.425325 +v -0.49798 -0.361803 -0.805748 +v -0.49798 0.361803 -0.805748 +v 0.49798 -0.361803 0.805748 +v 0.49798 0.361803 0.805748 +v 0.190211 -0.58541 -0.805748 +v 0.190211 0.58541 -0.805748 +v 0.850651 0. 0.425325 +v -0.190211 -0.58541 0.805748 +v -0.190211 0.58541 0.805748 +v -0.615537 0. 0.805748 +v -0.307768 -0.947214 0.190211 +v -0.307768 0.947214 0.190211 +v 0.307768 -0.947214 -0.190211 +v 0.307768 0.947214 -0.190211 +v 0.615537 0. -0.805748 +v 0.805748 -0.58541 0.190211 +v 0.805748 0.58541 0.190211 +v -0.850651 0. -0.425325 +v -0.262866 -0.809017 -0.425325 +v -0.262866 0.809017 -0.425325 +v -0.995959 0. 0.190211 +v -0.805748 -0.58541 -0.190211 +v -0.805748 0.58541 -0.190211 + +f 18 2 4 +f 18 4 9 +f 18 9 2 +f 19 2 9 +f 19 9 8 +f 19 8 2 +f 17 2 8 +f 17 8 3 +f 17 3 2 +f 12 2 3 +f 12 3 16 +f 12 16 2 +f 13 2 16 +f 13 16 4 +f 13 4 2 +f 14 5 28 +f 14 28 1 +f 14 1 5 +f 24 6 5 +f 24 5 1 +f 24 1 6 +f 15 29 6 +f 15 6 1 +f 15 1 29 +f 11 27 29 +f 11 29 1 +f 11 1 27 +f 10 28 27 +f 10 27 1 +f 10 1 28 +f 21 4 29 +f 21 29 9 +f 21 9 4 +f 30 9 27 +f 30 27 8 +f 30 8 9 +f 20 8 28 +f 20 28 3 +f 20 3 8 +f 25 3 5 +f 25 5 16 +f 25 16 3 +f 26 16 6 +f 26 6 4 +f 26 4 16 +f 22 5 3 +f 22 3 28 +f 22 28 5 +f 7 6 16 +f 7 16 5 +f 7 5 6 +f 23 29 4 +f 23 4 6 +f 23 6 29 +f 32 27 9 +f 32 9 29 +f 32 29 27 +f 31 28 8 +f 31 8 27 +f 31 27 28 diff --git a/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/snub_cube.obj b/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/snub_cube.obj new file mode 100644 index 00000000..de018af2 --- /dev/null +++ b/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/snub_cube.obj @@ -0,0 +1,65 @@ +#Name:Snub Cube +#Type:face_specified +v -1.1426135 -0.33775397 -0.62122641 +v -1.1426135 0.33775397 0.62122641 +v -1.1426135 -0.62122641 0.33775397 +v -1.1426135 0.62122641 -0.33775397 +v 1.1426135 -0.33775397 0.62122641 +v 1.1426135 0.33775397 -0.62122641 +v 1.1426135 -0.62122641 -0.33775397 +v 1.1426135 0.62122641 0.33775397 +v -0.33775397 -1.1426135 0.62122641 +v -0.33775397 1.1426135 -0.62122641 +v -0.33775397 -0.62122641 -1.1426135 +v -0.33775397 0.62122641 1.1426135 +v 0.33775397 -1.1426135 -0.62122641 +v 0.33775397 1.1426135 0.62122641 +v 0.33775397 -0.62122641 1.1426135 +v 0.33775397 0.62122641 -1.1426135 +v -0.62122641 -1.1426135 -0.33775397 +v -0.62122641 1.1426135 0.33775397 +v -0.62122641 -0.33775397 1.1426135 +v -0.62122641 0.33775397 -1.1426135 +v 0.62122641 -1.1426135 0.33775397 +v 0.62122641 1.1426135 -0.33775397 +v 0.62122641 -0.33775397 -1.1426135 +v 0.62122641 0.33775397 1.1426135 + +f 3 1 17 +f 3 17 9 +f 3 19 2 +f 3 9 19 +f 1 4 20 +f 1 20 11 +f 1 11 17 +f 2 19 12 +f 2 18 4 +f 2 12 18 +f 4 18 10 +f 4 10 20 +f 17 11 13 +f 19 9 15 +f 18 12 14 +f 20 10 16 +f 9 21 15 +f 11 23 13 +f 12 24 14 +f 10 22 16 +f 13 23 7 +f 13 7 21 +f 15 21 5 +f 15 5 24 +f 16 22 6 +f 16 6 23 +f 14 24 8 +f 14 8 22 +f 21 7 5 +f 23 6 7 +f 24 5 8 +f 22 8 6 +f 1 3 2 4 +f 21 9 17 13 +f 24 12 19 15 +f 10 18 14 22 +f 11 20 16 23 +f 8 5 7 6 diff --git a/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/snub_dodec.obj b/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/snub_dodec.obj new file mode 100644 index 00000000..d8309789 --- /dev/null +++ b/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/snub_dodec.obj @@ -0,0 +1,156 @@ +#Name:Snub Dodecahedron +#Type:face_specified + +v -2.0502159 -0.64302961 0.17539263 +v 2.0502159 -0.64302961 -0.17539263 +v -1.6450691 0.64302961 1.2360806 +v 1.6450691 0.64302961 -1.2360806 +v -2.0927544 0.33092102 0.39812710 +v 2.0927544 0.33092102 -0.39812710 +v -1.3329632 1.6469179 -0.39812710 +v 1.3329632 1.6469179 0.39812710 +v -1.8252651 -0.33092102 1.0984232 +v 1.8252651 -0.33092102 -1.0984232 +v -0.62604653 1.7461864 -1.0984232 +v 0.62604653 1.7461864 1.0984232 +v -1.0622158 1.4540242 1.1853886 +v 1.0622158 1.4540242 -1.1853886 +v -1.9321359 0.84755005 -0.44288192 +v 1.9321359 0.84755005 0.44288192 +v -1.1448745 -0.84755005 1.6181953 +v 1.1448745 -0.84755005 -1.6181953 +v -1.5819879 -1.4540242 -0.17539263 +v 1.5819879 -1.4540242 0.17539263 +v -1.0574124 0.37482166 -1.8409298 +v 1.0574124 0.37482166 1.8409298 +v -0.43913786 -0.37482166 -2.0770897 +v 0.43913786 -0.37482166 2.0770897 +v -1.5624104 -1.2495038 0.80327387 +v 1.5624104 -1.2495038 -0.80327387 +v -1.8633072 -0.72833518 -0.80327387 +v 1.8633072 -0.72833518 0.80327387 +v -1.7000678 1.2495038 0.44288192 +v 1.7000678 1.2495038 -0.44288192 +v -0.72811404 -1.6469179 1.1853886 +v 0.72811404 -1.6469179 -1.1853886 +v -0.26565458 -1.7461864 -1.2360806 +v 0.26565458 -1.7461864 1.2360806 +v -0.75979117 -1.9778390 -0.39812710 +v 0.75979117 -1.9778390 0.39812710 +v -1.1992186 -1.4152654 -1.0984232 +v 1.1992186 -1.4152654 1.0984232 +v -1.7903298 0.19289371 -1.1853886 +v 1.7903298 0.19289371 1.1853886 +v -1.3064371 -0.56771537 -1.6181953 +v 1.3064371 -0.56771537 1.6181953 +v -0.85331128 0.72833518 1.8409298 +v 0.85331128 0.72833518 -1.8409298 +v -1.3794145 1.1031568 -1.2360806 +v 1.3794145 1.1031568 1.2360806 +v -0.10503615 0.56771537 -2.0770897 +v 0.10503615 0.56771537 2.0770897 +v -0.46822796 2.0970538 -0.17539263 +v 0.46822796 2.0970538 0.17539263 +v -0.30089684 1.9778390 0.80327387 +v 0.30089684 1.9778390 -0.80327387 +v -0.16156263 1.4152654 1.6181953 +v 0.16156263 1.4152654 -1.6181953 +v -0.54417401 -0.19289371 2.0770897 +v 0.54417401 -0.19289371 -2.0770897 +v -0.23206810 -2.0970538 0.44288192 +v 0.23206810 -2.0970538 -0.44288192 +v -0.20410113 -1.1031568 1.8409298 +v 0.20410113 -1.1031568 -1.8409298 + +f 5 1 9 +f 5 9 3 +f 5 29 15 +f 5 3 29 +f 1 27 19 +f 1 19 25 +f 1 25 9 +f 15 29 7 +f 15 45 39 +f 15 7 45 +f 27 39 41 +f 27 41 37 +f 27 37 19 +f 9 25 17 +f 39 45 21 +f 39 21 41 +f 29 3 13 +f 3 43 13 +f 19 37 35 +f 25 31 17 +f 45 7 11 +f 7 49 11 +f 41 21 23 +f 37 33 35 +f 17 31 59 +f 17 59 55 +f 13 43 53 +f 13 53 51 +f 21 47 23 +f 43 55 48 +f 43 48 53 +f 35 33 58 +f 35 58 57 +f 31 57 34 +f 31 34 59 +f 11 49 52 +f 11 52 54 +f 55 59 24 +f 55 24 48 +f 49 51 50 +f 49 50 52 +f 23 47 56 +f 23 56 60 +f 51 53 12 +f 51 12 50 +f 33 60 32 +f 33 32 58 +f 57 58 36 +f 57 36 34 +f 47 54 44 +f 47 44 56 +f 48 24 22 +f 54 52 14 +f 54 14 44 +f 60 56 18 +f 60 18 32 +f 34 36 38 +f 24 42 22 +f 50 12 8 +f 12 46 8 +f 32 18 26 +f 36 20 38 +f 44 14 4 +f 22 42 40 +f 22 40 46 +f 14 30 4 +f 18 10 26 +f 38 20 28 +f 38 28 42 +f 42 28 40 +f 8 46 16 +f 8 16 30 +f 46 40 16 +f 26 10 2 +f 26 2 20 +f 20 2 28 +f 4 30 6 +f 4 6 10 +f 30 16 6 +f 10 6 2 +f 39 27 1 5 15 +f 3 9 17 55 43 +f 51 49 7 29 13 +f 57 31 25 19 35 +f 47 21 45 11 54 +f 33 37 41 23 60 +f 42 24 59 34 38 +f 46 12 53 48 22 +f 36 58 32 26 20 +f 14 52 50 8 30 +f 44 4 10 18 56 +f 16 40 28 2 6 diff --git a/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/szilassi.obj b/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/szilassi.obj new file mode 100644 index 00000000..9dbce05a --- /dev/null +++ b/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/szilassi.obj @@ -0,0 +1,24 @@ +#Face:Szilassi Polyhedron +#Type:face_specified +v -4.8 0. 4.8 +v -2.8 -1. 0.8 +v -2.8 0. 0.8 +v -1.8 1. 0.8 +v -1.5 -1.5 -1.2 +v -0.8 2. -3.2 +v 0. -5.04 -4.8 +v 0. 5.04 -4.8 +v 0.8 -2. -3.2 +v 1.5 1.5 -1.2 +v 1.8 -1. 0.8 +v 2.8 0. 0.8 +v 2.8 1. 0.8 +v 4.8 0. 4.8 + +f 4 10 6 1 14 13 +f 3 2 1 6 8 7 +f 5 10 4 3 7 9 +f 10 5 11 12 8 6 +f 12 13 14 9 7 8 +f 11 5 9 14 1 2 +f 13 12 11 2 3 4 diff --git a/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/tet.obj b/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/tet.obj new file mode 100644 index 00000000..3bd8f0ea --- /dev/null +++ b/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/tet.obj @@ -0,0 +1,12 @@ +#Name:Tetrahedron +#Type:face_specified + +v 0 0 0.61237244 +v -0.28867513 -0.50000000 -0.20412415 +v -0.28867513 0.50000000 -0.20412415 +v 0.57735027 0 -0.20412415 + +f 2 3 4 +f 3 2 1 +f 4 1 2 +f 1 4 3 diff --git a/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/trunc_cube.obj b/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/trunc_cube.obj new file mode 100644 index 00000000..1dbcfa60 --- /dev/null +++ b/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/trunc_cube.obj @@ -0,0 +1,42 @@ +#Name:Truncated Cube +#Type:face_specified + +v -0.5 1.2071068 1.2071068 +v -0.5 1.2071068 -1.2071068 +v -0.5 -1.2071068 1.2071068 +v -0.5 -1.2071068 -1.2071068 +v 0.5 1.2071068 1.2071068 +v 0.5 1.2071068 -1.2071068 +v 0.5 -1.2071068 1.2071068 +v 0.5 -1.2071068 -1.2071068 +v 1.2071068 -0.5 1.2071068 +v 1.2071068 -0.5 -1.2071068 +v 1.2071068 0.5 1.2071068 +v 1.2071068 0.5 -1.2071068 +v 1.2071068 1.2071068 -0.5 +v 1.2071068 1.2071068 0.5 +v 1.2071068 -1.2071068 -0.5 +v 1.2071068 -1.2071068 0.5 +v -1.2071068 -0.5 1.2071068 +v -1.2071068 -0.5 -1.2071068 +v -1.2071068 0.5 1.2071068 +v -1.2071068 0.5 -1.2071068 +v -1.2071068 1.2071068 -0.5 +v -1.2071068 1.2071068 0.5 +v -1.2071068 -1.2071068 -0.5 +v -1.2071068 -1.2071068 0.5 + +f 6 12 10 8 4 18 20 2 +f 1 19 17 3 7 9 11 5 +f 3 24 23 4 8 15 16 7 +f 5 14 13 6 2 21 22 1 +f 9 16 15 10 12 13 14 11 +f 19 22 21 20 18 23 24 17 +f 16 9 7 +f 5 11 14 +f 3 17 24 +f 22 19 1 +f 8 10 15 +f 13 12 6 +f 23 18 4 +f 2 20 21 diff --git a/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/trunc_dodec.obj b/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/trunc_dodec.obj new file mode 100644 index 00000000..9a5743af --- /dev/null +++ b/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/trunc_dodec.obj @@ -0,0 +1,96 @@ +#Name:Truncated Dodecahedron +#Type:face_specified + +v 0 -1.6180340 2.4898983 +v 0 -1.6180340 -2.4898983 +v 0 1.6180340 2.4898983 +v 0 1.6180340 -2.4898983 +v 0.42532540 -2.9270510 0.26286556 +v 0.42532540 2.9270510 0.26286556 +v 0.68819096 -2.1180340 1.9641672 +v 0.68819096 2.1180340 1.9641672 +v -2.7527638 0 -1.1135164 +v -2.0645729 -2.1180340 0.26286556 +v -2.0645729 2.1180340 0.26286556 +v -1.3763819 -2.6180340 -0.26286556 +v -1.3763819 2.6180340 -0.26286556 +v -0.68819096 -2.1180340 -1.9641672 +v -0.68819096 2.1180340 -1.9641672 +v 1.3763819 -2.6180340 0.26286556 +v 1.3763819 2.6180340 0.26286556 +v 2.7527638 0 1.1135164 +v 1.8017073 -1.3090170 -1.9641672 +v 1.8017073 1.3090170 -1.9641672 +v 2.0645729 -2.1180340 -0.26286556 +v 2.0645729 2.1180340 -0.26286556 +v 2.2270327 0 1.9641672 +v 2.2270327 -1.6180340 -1.1135164 +v 2.2270327 1.6180340 -1.1135164 +v -2.6523581 -1.3090170 0.26286556 +v -2.6523581 1.3090170 0.26286556 +v 2.6523581 -1.3090170 -0.26286556 +v 2.6523581 1.3090170 -0.26286556 +v 2.9152237 -0.5 0.26286556 +v 2.9152237 0.5 0.26286556 +v -2.9152237 -0.5 -0.26286556 +v -2.9152237 0.5 -0.26286556 +v 0.95105652 -1.3090170 2.4898983 +v 0.95105652 -1.3090170 -2.4898983 +v 0.95105652 1.3090170 2.4898983 +v 0.95105652 1.3090170 -2.4898983 +v 0.85065081 -2.6180340 1.1135164 +v 0.85065081 2.6180340 1.1135164 +v -0.95105652 -1.3090170 2.4898983 +v -0.95105652 -1.3090170 -2.4898983 +v -0.95105652 1.3090170 2.4898983 +v -0.95105652 1.3090170 -2.4898983 +v -1.5388418 -0.5 2.4898983 +v -1.5388418 -0.5 -2.4898983 +v -1.5388418 0.5 2.4898983 +v -1.5388418 0.5 -2.4898983 +v 1.5388418 -0.5 2.4898983 +v 1.5388418 -0.5 -2.4898983 +v 1.5388418 0.5 2.4898983 +v 1.5388418 0.5 -2.4898983 +v -2.2270327 0 -1.9641672 +v -2.2270327 -1.6180340 1.1135164 +v -2.2270327 1.6180340 1.1135164 +v -0.85065081 -2.6180340 -1.1135164 +v -0.85065081 2.6180340 -1.1135164 +v -1.8017073 -1.3090170 1.9641672 +v -1.8017073 1.3090170 1.9641672 +v -0.42532540 -2.9270510 -0.26286556 +v -0.42532540 2.9270510 -0.26286556 + +f 3 42 46 44 40 1 34 48 50 36 +f 47 43 4 37 51 49 35 2 41 45 +f 2 35 19 24 21 16 5 59 55 14 +f 49 51 20 25 29 31 30 28 24 19 +f 37 4 15 56 60 6 17 22 25 20 +f 43 47 52 9 33 27 11 13 56 15 +f 45 41 14 55 12 10 26 32 9 52 +f 6 60 13 11 54 58 42 3 8 39 +f 27 33 32 26 53 57 44 46 58 54 +f 10 12 59 5 38 7 1 40 57 53 +f 16 21 28 30 18 23 48 34 7 38 +f 31 29 22 17 39 8 36 50 23 18 +f 9 32 33 +f 18 30 31 +f 47 45 52 +f 50 48 23 +f 10 53 26 +f 27 54 11 +f 21 24 28 +f 29 25 22 +f 40 44 57 +f 58 46 42 +f 35 49 19 +f 20 51 37 +f 12 55 59 +f 60 56 13 +f 41 2 14 +f 15 4 43 +f 34 1 7 +f 8 3 36 +f 38 5 16 +f 17 6 39 diff --git a/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/trunc_icos.obj b/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/trunc_icos.obj new file mode 100644 index 00000000..4b535ba5 --- /dev/null +++ b/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/trunc_icos.obj @@ -0,0 +1,96 @@ +#Name:Truncated Icosahedron +#Type:Face_specified + +v -0.16245985 -2.1180340 1.2759762 +v -0.16245985 2.1180340 1.2759762 +v 0.16245985 -2.1180340 -1.2759762 +v 0.16245985 2.1180340 -1.2759762 +v -0.26286556 -0.80901699 -2.3274384 +v -0.26286556 -2.4270510 -0.42532540 +v -0.26286556 0.80901699 -2.3274384 +v -0.26286556 2.4270510 -0.42532540 +v 0.26286556 -0.80901699 2.3274384 +v 0.26286556 -2.4270510 0.42532540 +v 0.26286556 0.80901699 2.3274384 +v 0.26286556 2.4270510 0.42532540 +v 0.68819096 -0.5 -2.3274384 +v 0.68819096 0.5 -2.3274384 +v 1.2139221 -2.1180340 0.42532540 +v 1.2139221 2.1180340 0.42532540 +v -2.0645729 -0.5 1.2759762 +v -2.0645729 0.5 1.2759762 +v -1.3763819 -1.0 1.8017073 +v -1.3763819 1.0 1.8017073 +v -1.3763819 -1.6180340 -1.2759762 +v -1.3763819 1.6180340 -1.2759762 +v -0.68819096 -0.5 2.3274384 +v -0.68819096 0.5 2.3274384 +v 1.3763819 -1.0 -1.8017073 +v 1.3763819 1.0 -1.8017073 +v 1.3763819 -1.6180340 1.2759762 +v 1.3763819 1.6180340 1.2759762 +v -1.7013016 0 -1.8017073 +v 1.7013016 0 1.8017073 +v -1.2139221 -2.1180340 -0.42532540 +v -1.2139221 2.1180340 -0.42532540 +v -1.9641672 -0.80901699 -1.2759762 +v -1.9641672 0.80901699 -1.2759762 +v 2.0645729 -0.5 -1.2759762 +v 2.0645729 0.5 -1.2759762 +v 2.2270327 -1.0 -0.42532540 +v 2.2270327 1.0 -0.42532540 +v 2.3894926 -0.5 0.42532540 +v 2.3894926 0.5 0.42532540 +v -1.1135164 -1.8090170 1.2759762 +v -1.1135164 1.8090170 1.2759762 +v 1.1135164 -1.8090170 -1.2759762 +v 1.1135164 1.8090170 -1.2759762 +v -2.3894926 -0.5 -0.42532540 +v -2.3894926 0.5 -0.42532540 +v -1.6392475 -1.8090170 0.42532540 +v -1.6392475 1.8090170 0.42532540 +v 1.6392475 -1.8090170 -0.42532540 +v 1.6392475 1.8090170 -0.42532540 +v 1.9641672 -0.80901699 1.2759762 +v 1.9641672 0.80901699 1.2759762 +v 0.85065081 0 2.3274384 +v -2.2270327 -1.0 0.42532540 +v -2.2270327 1.0 0.42532540 +v -0.85065081 0 -2.3274384 +v -0.52573111 -1.6180340 -1.8017073 +v -0.52573111 1.6180340 -1.8017073 +v 0.52573111 -1.6180340 1.8017073 +v 0.52573111 1.6180340 1.8017073 + +f 53 11 24 23 9 +f 51 39 40 52 30 +f 60 28 16 12 2 +f 20 42 48 55 18 +f 19 17 54 47 41 +f 1 10 15 27 59 +f 36 26 44 50 38 +f 4 58 22 32 8 +f 34 29 33 45 46 +f 21 57 3 6 31 +f 37 49 43 25 35 +f 13 5 56 7 14 +f 9 59 27 51 30 53 +f 53 30 52 28 60 11 +f 11 60 2 42 20 24 +f 24 20 18 17 19 23 +f 23 19 41 1 59 9 +f 13 25 43 3 57 5 +f 5 57 21 33 29 56 +f 56 29 34 22 58 7 +f 7 58 4 44 26 14 +f 14 26 36 35 25 13 +f 40 38 50 16 28 52 +f 16 50 44 4 8 12 +f 12 8 32 48 42 2 +f 48 32 22 34 46 55 +f 55 46 45 54 17 18 +f 54 45 33 21 31 47 +f 47 31 6 10 1 41 +f 10 6 3 43 49 15 +f 15 49 37 39 51 27 +f 39 37 35 36 38 40 diff --git a/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/trunc_oct.obj b/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/trunc_oct.obj new file mode 100644 index 00000000..0c7c8ad9 --- /dev/null +++ b/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/trunc_oct.obj @@ -0,0 +1,42 @@ +#Name:Truncated Octahedron +#Type:face_specified + +v -1.5 -0.5 0 +v -1.5 0.5 0 +v -1. -1. -0.70710678 +v -1. -1. 0.70710678 +v -1. 1. -0.70710678 +v -1. 1. 0.70710678 +v -0.5 -1.5 0 +v -0.5 -0.5 -1.4142136 +v -0.5 -0.5 1.4142136 +v -0.5 0.5 -1.4142136 +v -0.5 0.5 1.4142136 +v -0.5 1.5 0 +v 0.5 -1.5 0 +v 0.5 -0.5 -1.4142136 +v 0.5 -0.5 1.4142136 +v 0.5 0.5 -1.4142136 +v 0.5 0.5 1.4142136 +v 0.5 1.5 0 +v 1. -1. -0.70710678 +v 1. -1. 0.70710678 +v 1. 1. -0.70710678 +v 1. 1. 0.70710678 +v 1.5 -0.5 0 +v 1.5 0.5 0 + +f 17 11 9 15 +f 14 8 10 16 +f 22 24 21 18 +f 12 5 2 6 +f 13 19 23 20 +f 4 1 3 7 +f 19 13 7 3 8 14 +f 15 9 4 7 13 20 +f 16 10 5 12 18 21 +f 22 18 12 6 11 17 +f 20 23 24 22 17 15 +f 14 16 21 24 23 19 +f 9 11 6 2 1 4 +f 3 1 2 5 10 8 \ No newline at end of file diff --git a/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/trunc_tet.obj b/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/trunc_tet.obj new file mode 100644 index 00000000..d2c9cebb --- /dev/null +++ b/extensions/fablabchemnitz/import_3d_mesh/Poly3DObjects/trunc_tet.obj @@ -0,0 +1,24 @@ +#Name:Truncated Tetrahedron +#Type:face_specified + +v 0 -1. -0.61237244 +v 0 1. -0.61237244 +v -0.57735027 -1. 0.20412415 +v -0.57735027 1. 0.20412415 +v -0.28867513 -0.5 1.0206207 +v -0.28867513 0.5 1.0206207 +v 0.57735027 0 1.0206207 +v 1.1547005 0 0.20412415 +v -0.86602540 -0.5 -0.61237244 +v -0.86602540 0.5 -0.61237244 +v 0.86602540 -0.5 -0.61237244 +v 0.86602540 0.5 -0.61237244 + +f 11 12 8 +f 3 9 1 +f 2 10 4 +f 6 5 7 +f 11 8 7 5 3 1 +f 2 4 6 7 8 12 +f 9 3 5 6 4 10 +f 2 12 11 1 9 10 \ No newline at end of file diff --git a/extensions/fablabchemnitz/import_3d_mesh/import_3d_mesh.inx b/extensions/fablabchemnitz/import_3d_mesh/import_3d_mesh.inx new file mode 100644 index 00000000..d0468a16 --- /dev/null +++ b/extensions/fablabchemnitz/import_3d_mesh/import_3d_mesh.inx @@ -0,0 +1,114 @@ + + + Import 3D Mesh + fablabchemnitz.de.import_3d_mesh + + + + + + + + + + + + + + + + + + + + + + + + + /your/object/file.stl + + + + + false + 100 + + + + + + + + 0 + + + + + + 0 + + + + + + 0 + + + + + + 0 + + + + + + 0 + + + + + + 0 + + + + + 1943148287 + + + + 100 + 2 + true + 1 + 1 + -2 + + + + + + false + + + + + + + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/import_3d_mesh/import_3d_mesh.py b/extensions/fablabchemnitz/import_3d_mesh/import_3d_mesh.py new file mode 100644 index 00000000..8e4f288f --- /dev/null +++ b/extensions/fablabchemnitz/import_3d_mesh/import_3d_mesh.py @@ -0,0 +1,393 @@ +#!/usr/bin/env python3 +# +# Copyright (C) 2007 John Beard john.j.beard@gmail.com +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +""" +This extension draws 3d objects from a Wavefront .obj 3D file stored in a local folder +Many settings for appearance, lighting, rotation, etc are available. + + ^y + | + __--``| |_--``| __-- + __--`` | __--``| |_--`` + | z | | |_--``| + | <----|--------|-----_0-----|---------------- + | | |_--`` | | + | __--`` <-``| |_--`` + |__--`` x |__--``| + IMAGE PLANE SCENE| + | + + Vertices are given as "v" followed by three numbers (x,y,z). + All files need a vertex list + v x.xxx y.yyy z.zzz + + Faces are given by a list of vertices + (vertex 1 is the first in the list above, 2 the second, etc): + f 1 2 3 + + Edges are given by a list of vertices. These will be broken down + into adjacent pairs automatically. + l 1 2 3 + + Faces are rendered according to the painter's algorithm and perhaps + back-face culling, if selected. The parameter to sort the faces by + is user-selectable between max, min and average z-value of the vertices +""" + +import os +from math import acos, cos, floor, pi, sin, sqrt +import numpy +import tempfile +import openmesh as om + +import inkex +from inkex import Group, Circle, Color +from inkex.utils import pairwise +from inkex.paths import Move, Line + + +def draw_circle(r, cx, cy, width, fill, name, parent): + """Draw an SVG circle""" + circle = parent.add(Circle(cx=str(cx), cy=str(cy), r=str(r))) + circle.style = {'stroke': '#000000', 'stroke-width': str(width), 'fill': fill} + circle.label = name + + +def draw_line(x1, y1, x2, y2, width, name, parent): + elem = parent.add(inkex.PathElement()) + elem.style = {'stroke': '#000000', 'stroke-width': str(width), 'fill': 'none', + 'stroke-linecap': 'round'} + elem.set('inkscape:label', name) + elem.path = [Move(x1, y1), Line(x2, y2)] + +def draw_poly(pts, face, st, name, parent): + """Draw polygone""" + style = {'stroke': '#000000', 'stroke-width': str(st.th), 'stroke-linejoin': st.linejoin, + 'stroke-opacity': st.s_opac, 'fill': st.fill, 'fill-opacity': st.fill_opacity} + path = inkex.Path() + for facet in face: + if not path: # for first point + path.append(Move(pts[facet - 1][0], -pts[facet - 1][1])) + else: + path.append(Line(pts[facet - 1][0], -pts[facet - 1][1])) + path.close() + + poly = parent.add(inkex.PathElement()) + poly.label = name + poly.style = style + poly.path = path + + +def draw_edges(edge_list, pts, st, parent): + for edge in edge_list: # for every edge + pt_1 = pts[edge[0] - 1][0:2] # the point at the start + pt_2 = pts[edge[1] - 1][0:2] # the point at the end + name = 'Edge' + str(edge[0]) + '-' + str(edge[1]) + draw_line(pt_1[0], -pt_1[1], pt_2[0], -pt_2[1], st.th, name, parent) + + +def draw_faces(faces_data, pts, obj, shading, fill_col, st, parent): + for face in faces_data: # for every polygon that has been sorted + if shading: + st.fill = get_darkened_colour(fill_col, face[1] / pi) # darken proportionally to angle to lighting vector + else: + st.fill = get_darkened_colour(fill_col, 1) # do not darken colour + + face_no = face[3] # the number of the face to draw + draw_poly(pts, obj.fce[face_no], st, 'Face:' + str(face_no), parent) + + +def get_darkened_colour(rgb, factor): + """return a hex triplet of colour, reduced in lightness 0.0-1.0""" + return '#' + "%02X" % floor(factor * rgb[0]) \ + + "%02X" % floor(factor * rgb[1]) \ + + "%02X" % floor(factor * rgb[2]) # make the colour string + + +def make_rotation_log(options): + """makes a string recording the axes and angles of each rotation, so an object can be repeated""" + return options.r1_ax + str('%.2f' % options.r1_ang) + ':' + \ + options.r2_ax + str('%.2f' % options.r2_ang) + ':' + \ + options.r3_ax + str('%.2f' % options.r3_ang) + ':' + \ + options.r1_ax + str('%.2f' % options.r4_ang) + ':' + \ + options.r2_ax + str('%.2f' % options.r5_ang) + ':' + \ + options.r3_ax + str('%.2f' % options.r6_ang) + +def normalise(vector): + """return the unit vector pointing in the same direction as the argument""" + length = sqrt(numpy.dot(vector, vector)) + return numpy.array(vector) / length + +def get_normal(pts, face): + """normal vector for the plane passing though the first three elements of face of pts""" + return numpy.cross( + (numpy.array(pts[face[0] - 1]) - numpy.array(pts[face[1] - 1])), + (numpy.array(pts[face[0] - 1]) - numpy.array(pts[face[2] - 1])), + ).flatten() + +def get_unit_normal(pts, face, cw_wound): + """ + Returns the unit normal for the plane passing through the + first three points of face, taking account of winding + """ + # if it is clockwise wound, reverse the vector direction + winding = -1 if cw_wound else 1 + return winding * normalise(get_normal(pts, face)) + +def rotate(matrix, rads, axis): + """choose the correct rotation matrix to use""" + if axis == 'x': + trans_mat = numpy.array([ + [1, 0, 0], [0, cos(rads), -sin(rads)], [0, sin(rads), cos(rads)]]) + elif axis == 'y': + trans_mat = numpy.array([ + [cos(rads), 0, sin(rads)], [0, 1, 0], [-sin(rads), 0, cos(rads)]]) + elif axis == 'z': + trans_mat = numpy.array([ + [cos(rads), -sin(rads), 0], [sin(rads), cos(rads), 0], [0, 0, 1]]) + return numpy.matmul(trans_mat, matrix) + +class Style(object): # container for style information + def __init__(self, options): + self.th = options.th + self.fill = '#ff0000' + self.col = '#000000' + self.r = 2 + self.s_opac = str(options.s_opac / 100.0) + self.fill_opacity = options.fill_color.alpha + self.linecap = 'round' + self.linejoin = 'round' + + +class WavefrontObj(object): + """Wavefront based 3d object defined by the vertices and the faces (eg a polyhedron)""" + name = property(lambda self: self.meta.get('name', None)) + + def __init__(self, filename): + self.meta = { + 'name': os.path.basename(filename).rsplit('.', 1)[0] + } + self.vtx = [] + self.edg = [] + self.fce = [] + self._parse_file(filename) + + def _parse_file(self, filename): + if not os.path.isfile(filename): + raise IOError("Can't find wavefront object file {}".format(filename)) + with open(filename, 'r') as fhl: + for line in fhl: + self._parse_line(line.strip()) + + def _parse_line(self, line): + if line.startswith('#'): + if ':' in line: + name, value = line.split(':', 1) + self.meta[name.lower()] = value + elif line: + (kind, line) = line.split(None, 1) + kind_name = 'add_' + kind + if hasattr(self, kind_name): + getattr(self, kind_name)(line) + + @staticmethod + def _parse_numbers(line, typ=str): + # Ignore any slash options and always pick the first one + return [typ(v.split('/')[0]) for v in line.split()] + + def add_v(self, line): + """Add vertex from parsed line""" + vertex = self._parse_numbers(line, float) + if len(vertex) == 3: + self.vtx.append(vertex) + + def add_l(self, line): + """Add line from parsed line""" + vtxlist = self._parse_numbers(line, int) + # we need at least 2 vertices to make an edge + if len(vtxlist) > 1: + # we can have more than one vertex per line - get adjacent pairs + self.edg.append(pairwise(vtxlist)) + + def add_f(self, line): + """Add face from parsed line""" + vtxlist = self._parse_numbers(line, int) + # we need at least 3 vertices to make an edge + if len(vtxlist) > 2: + self.fce.append(vtxlist) + + def get_transformed_pts(self, trans_mat): + """translate vertex points according to the matrix""" + transformed_pts = [] + for vtx in self.vtx: + transformed_pts.append((numpy.matmul(trans_mat, numpy.array(vtx).T)).T.tolist()) + return transformed_pts + + def get_edge_list(self): + """make an edge vertex list from an existing face vertex list""" + edge_list = [] + for face in self.fce: + for j, edge in enumerate(face): + # Ascending order of vertices (for duplicate detection) + edge_list.append(sorted([edge, face[(j + 1) % len(face)]])) + return [list(x) for x in sorted(set(tuple(x) for x in edge_list))] + +class Import3DMesh(inkex.GenerateExtension): + + """Generate a polyhedron from a wavefront 3d model file""" + def add_arguments(self, pars): + pars.add_argument("--tab", default="object") + + # MODEL FILE SETTINGS + pars.add_argument("--obj", default='cube') + pars.add_argument("--input_choice", default='default') + pars.add_argument("--spec_file", default='great_rhombicuboct.obj') + pars.add_argument("--cw_wound", type=inkex.Boolean, default=True) + pars.add_argument("--type", default='face') + # VEIW SETTINGS + pars.add_argument("--r1_ax", default="x") + pars.add_argument("--r2_ax", default="x") + pars.add_argument("--r3_ax", default="x") + pars.add_argument("--r4_ax", default="x") + pars.add_argument("--r5_ax", default="x") + pars.add_argument("--r6_ax", default="x") + pars.add_argument("--r1_ang", type=float, default=0.0) + pars.add_argument("--r2_ang", type=float, default=0.0) + pars.add_argument("--r3_ang", type=float, default=0.0) + pars.add_argument("--r4_ang", type=float, default=0.0) + pars.add_argument("--r5_ang", type=float, default=0.0) + pars.add_argument("--r6_ang", type=float, default=0.0) + pars.add_argument("--scl", type=float, default=100.0) + # STYLE SETTINGS + pars.add_argument("--show", type=self.arg_method('gen')) + pars.add_argument("--shade", type=inkex.Boolean, default=True) + pars.add_argument("--fill_color", type=Color, default='1943148287', help="Fill color") + pars.add_argument("--s_opac", type=int, default=100) + pars.add_argument("--th", type=float, default=2) + pars.add_argument("--lv_x", type=float, default=1) + pars.add_argument("--lv_y", type=float, default=1) + pars.add_argument("--lv_z", type=float, default=-2) + pars.add_argument("--back", type=inkex.Boolean, default=False) + pars.add_argument("--z_sort", type=self.arg_method('z_sort'), default=self.z_sort_min) + + def get_filename(self): + """Get the filename for the spec file""" + if self.options.input_choice == 'custom': + return self.options.spec_file + if self.options.input_choice == 'default': + moddir = self.ext_path() + return os.path.join(moddir, 'Poly3DObjects', self.options.obj + '.obj') + + def generate(self): + so = self.options + + if not os.path.exists(self.get_filename()): + inkex.utils.debug("The input file does not exist.") + exit(1) + + input_mesh = om.read_polymesh(self.get_filename()) #read input file + output_obj = os.path.join(tempfile.gettempdir(), "input_mesh.obj") + om.write_mesh(output_obj, input_mesh) + #write to obj file + + obj = WavefrontObj(output_obj) + + scale = self.svg.unittouu('1px') # convert to document units + st = Style(so) # initialise style + + # we will put all the rotations in the object name, so it can be repeated in + poly = Group.new(obj.name + ':' + make_rotation_log(so)) + (pos_x, pos_y) = self.svg.namedview.center + #poly.transform.add_translate(pos_x, pos_y) + poly.transform.add_scale(scale) + + # TRANSFORMATION OF THE OBJECT (ROTATION, SCALE, ETC) + trans_mat = numpy.identity(3, float) # init. trans matrix as identity matrix + for i in range(1, 7): # for each rotation + axis = getattr(so, 'r{}_ax'.format(i)) + angle = getattr(so, 'r{}_ang'.format(i)) * pi / 180 + trans_mat = rotate(trans_mat, angle, axis) + # scale by linear factor (do this only after the transforms to reduce round-off) + trans_mat = trans_mat * so.scl + + # the points as projected in the z-axis onto the viewplane + transformed_pts = obj.get_transformed_pts(trans_mat) + so.show(obj, st, poly, transformed_pts) + return poly + + def gen_vtx(self, obj, st, poly, transformed_pts): + """Generate Vertex""" + for i, pts in enumerate(transformed_pts): + draw_circle(st.r, pts[0], pts[1], st.th, '#000000', 'Point' + str(i), poly) + + def gen_edg(self, obj, st, poly, transformed_pts): + """Generate edges""" + # we already have an edge list + edge_list = obj.edg + if obj.fce: + # we must generate the edge list from the faces + edge_list = obj.get_edge_list() + + draw_edges(edge_list, transformed_pts, st, poly) + + def gen_fce(self, obj, st, poly, transformed_pts): + """Generate face""" + so = self.options + # colour tuple for the face fill + # unit light vector + lighting = normalise((so.lv_x, -so.lv_y, so.lv_z)) + # we have a face list + if obj.fce: + z_list = [] + + for i, face in enumerate(obj.fce): + # get the normal vector to the face + norm = get_unit_normal(transformed_pts, face, so.cw_wound) + # get the angle between the normal and the lighting vector + angle = acos(numpy.dot(norm, lighting)) + z_sort_param = so.z_sort(transformed_pts, face) + + # include all polygons or just the front-facing ones as needed + if so.back or norm[2] > 0: + # record the maximum z-value of the face and angle to + # light, along with the face ID and normal + z_list.append((z_sort_param, angle, norm, i)) + + z_list.sort(key=lambda x: x[0]) # sort by ascending sort parameter of the face + draw_faces(z_list, transformed_pts, obj, so.shade, self.options.fill_color, st, poly) + + else: # we cannot generate a list of faces from the edges without a lot of computation + raise inkex.AbortExtension("Face data not found.") + + @staticmethod + def z_sort_max(pts, face): + """returns the largest z_value of any point in the face""" + return max([pts[facet - 1][2] for facet in face]) + + @staticmethod + def z_sort_min(pts, face): + """returns the smallest z_value of any point in the face""" + return min([pts[facet - 1][2] for facet in face]) + + @staticmethod + def z_sort_cent(pts, face): + """returns the centroid z_value of any point in the face""" + return sum([pts[facet - 1][2] for facet in face]) / len(face) + +if __name__ == '__main__': + Import3DMesh().run() diff --git a/extensions/fablabchemnitz/import_attributes/import_attributes.inx b/extensions/fablabchemnitz/import_attributes/import_attributes.inx new file mode 100644 index 00000000..efd07a4b --- /dev/null +++ b/extensions/fablabchemnitz/import_attributes/import_attributes.inx @@ -0,0 +1,20 @@ + + + Import Attributes + fablabchemnitz.de.import_attributes + + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/import_attributes/import_attributes.py b/extensions/fablabchemnitz/import_attributes/import_attributes.py new file mode 100644 index 00000000..5ae16d8c --- /dev/null +++ b/extensions/fablabchemnitz/import_attributes/import_attributes.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python3 + +import inkex +import os +import lxml + +class ImportAttributes(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument("--data", default="", help="data file") + + def effect(self): + + if not os.path.exists(self.options.data): + self.msg("The input file does not exist. Please select a proper file and try again.") + exit(1) + + if os.path.isdir(self.options.data): + self.msg("You must specify a file, not a directory!") + exit(1) + + with open(self.options.data, 'r') as f: + lines = f.read().splitlines() + for line in lines: + #split on , max 2+1 = 3 items + parts = line.split(",", 2) + if len(parts) >= 3: + id = parts[0] + attribute = parts[1] + value = parts[2] + try: + node = self.svg.getElementById(id) + if node is not None: + try: + node.set(attribute, value) + except AttributeError: + inkex.utils.debug("Unknown Attribute") + except AttributeError: + inkex.utils.debug("element with id '" + id + "' not found in current selection.") + except lxml.etree.XPathEvalError: + inkex.utils.debug("invalid input file") + exit(1) + +if __name__ == '__main__': + ImportAttributes().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/incadiff/incadiff.inx b/extensions/fablabchemnitz/incadiff/incadiff.inx new file mode 100644 index 00000000..8591d315 --- /dev/null +++ b/extensions/fablabchemnitz/incadiff/incadiff.inx @@ -0,0 +1,17 @@ + + + Incadiff + fablabchemnitz.de.incadiff + + all + + + + + + Apply successive difference operations on superimposed paths. Useful for plotter addicts. + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/incadiff/incadiff.py b/extensions/fablabchemnitz/incadiff/incadiff.py new file mode 100644 index 00000000..f01f3405 --- /dev/null +++ b/extensions/fablabchemnitz/incadiff/incadiff.py @@ -0,0 +1,359 @@ +#!/usr/bin/env python3 +# coding=utf-8 + +""" +Copyright (C) 2021 Thomas Maziere + +Largely and mostly inspired by inx-pathops (https://gitlab.com/moini_ink/inx-pathops/) +Copyright (C) 2014 Ryan Lerch (multiple difference) + 2016 Maren Hachmann + (refactoring, extend to multibool) + 2017 su_v + Rewrite to support large selections (process in chunks), to + improve performance (support groups, z-sort ids with python + instead of external query), and to extend GUI options. + + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +""" + +""" +incadiff +Apply successive difference operations on superimposed paths. Useful for plotter addicts. +""" + +import os +from shutil import copy2 +import time +from lxml import etree + + +import inkex +import inkex.command + +__version__ = '0.2' + +# Global "constants" +SVG_SHAPES = ('rect', 'circle', 'ellipse', 'line', 'polyline', 'polygon') + + +# ----- general helper functions + +def timed(f): + """Minimalistic timer for functions.""" + # pylint: disable=invalid-name + start = time.time() + ret = f() + elapsed = time.time() - start + return ret, elapsed + + +def get_inkscape_version(): + ink = inkex.command.INKSCAPE_EXECUTABLE_NAME + try: # needed prior to 1.1 + ink_version = inkex.command.call(ink, '--version').decode("utf-8") + except AttributeError: # needed starting from 1.1 + ink_version = inkex.command.call(ink, '--version') + + pos = ink_version.find("Inkscape ") + if pos != -1: + pos += 9 + else: + return None + v_num = ink_version[pos:pos+3] + return(v_num) + +# ----- SVG element helper functions + + +def get_defs(node): + """Find in children of *node*, return first one found.""" + path = '/svg:svg//svg:defs' + try: + return node.xpath(path, namespaces=inkex.NSS)[0] + except IndexError: + return etree.SubElement(node, inkex.addNS('defs', 'svg')) + + +def is_group(node): + """Check node for group tag.""" + return node.tag == inkex.addNS('g', 'svg') + + +def is_path(node): + """Check node for path tag.""" + return node.tag == inkex.addNS('path', 'svg') + + +def is_basic_shape(node): + """Check node for SVG basic shape tag.""" + return node.tag in (inkex.addNS(tag, 'svg') for tag in SVG_SHAPES) + + +def is_custom_shape(node): + """Check node for Inkscape custom shape type.""" + return inkex.addNS('type', 'sodipodi') in node.attrib + + +def is_shape(node): + """Check node for SVG basic shape tag or Inkscape custom shape type.""" + return is_basic_shape(node) or is_custom_shape(node) + + +def has_path_effect(node): + """Check node for Inkscape path-effect attribute.""" + return inkex.addNS('path-effect', 'inkscape') in node.attrib + + +def is_modifiable_path(node): + """Check node for editable path data.""" + return is_path(node) and not (has_path_effect(node) or + is_custom_shape(node)) + + +def is_image(node): + """Check node for image tag.""" + return node.tag == inkex.addNS('image', 'svg') + + +def is_text(node): + """Check node for text tag.""" + return node.tag == inkex.addNS('text', 'svg') + + +def does_pathops(node): + """Check whether node is supported by Inkscape path operations.""" + return (is_path(node) or + is_shape(node) or + is_text(node)) + + +# ----- list processing helper functions + +def recurse_selection(node, id_list, level=0, current=0): + """Recursively process selection, add checked elements to id list.""" + current += 1 + if not level or current <= level: + if is_group(node): + for child in node: + id_list = recurse_selection(child, id_list, level, current) + if does_pathops(node): + id_list.append(node.get('id')) + return id_list + + +def z_sort(node, alist): + """Return new list sorted in document order (depth-first traversal).""" + ordered = [] + id_list = list(alist) + count = len(id_list) + for element in node.iter(): + element_id = element.get('id') + if element_id is not None and element_id in id_list: + id_list.remove(element_id) + ordered.append(element_id) + count -= 1 + if not count: + break + return ordered + + +def z_iter(node, alist): + """Return iterator over ids in document order (depth-first traversal).""" + id_list = list(alist) + for element in node.iter(): + element_id = element.get('id') + if element_id is not None and element_id in id_list: + id_list.remove(element_id) + yield element_id + + +def chunks(alist, max_len): + """Chunk a list into sublists of max_len length.""" + for i in range(0, len(alist), max_len): + yield alist[i:i+max_len] + + +class IncadiffExtension(inkex.Effect): + + def __init__(self): + inkex.Effect.__init__(self) + self.actions_list = [] + + def add_arguments(self, pars): + pars.add_argument("--my_option", type=inkex.Boolean, + help="An example option, put your options here") + + def get_selected_ids(self): + """Return a list of valid ids for inkscape path operations.""" + id_list = [] + if len(self.svg.selected) == 0: + pass + else: + level = 0 + for node in self.svg.selected.values(): + recurse_selection(node, id_list, level) + if len(id_list) < 2: + inkex.errormsg("This extension requires at least 2 elements " + + "of type path, shape or text. " + + "The elements can be part of selected groups, " + + "or directly selected.") + return None + if len(id_list) > 64: + inkex.errormsg("You should not select more than 64 shapes/paths, " + + "and ideally you should apply this extension to small groups of objects.") + return None + + else: + return id_list + + def get_sorted_ids(self): + """Return a list with z-sorted ids.""" + sorted_ids = None + id_list = self.get_selected_ids() + if id_list is not None: + sorted_ids = list(z_iter(self.document.getroot(), id_list)) + return (sorted_ids) + else: + return + + + def run_cmd(self, tempfile): + #ink_version = get_inkscape_version() + self.actions_list.append("FileSave") + extra_param = "--batch-process" + # if ink_version == "1.0": + # self.actions_list.append("FileQuit") + # extra_param = "--with-gui" + actions = ";".join(self.actions_list) + inkex.command.inkscape(tempfile, extra_param, actions=actions) + + def duplicate_and_diff(self, id_list, tempfile): + # for each selected path, duplicate and diff for each path below + nb_shapes = len(id_list) + for i in range(0, nb_shapes): + top_path = id_list[i] + j = i + while j > 0: + j -= 1 + self.actions_list.append("select-by-id:"+top_path) + self.actions_list.append("EditDuplicate") + self.actions_list.append("select-by-id:" + id_list[j]) + self.actions_list.append("SelectionDiff") + self.actions_list.append("EditDeselect") + if nb_shapes > 20: + self.run_cmd(tempfile) + self.actions_list = [] + if len(self.actions_list) > 0: + self.run_cmd(tempfile) + self.actions_list = [] + + def loop_diff(self): + """Loop through selected items and run external command(s).""" + + tempfile = self.options.input_file + "-incadiff.svg" + # prepare + # we need to do this because command line Inkscape with gui + # gives lots of info dialogs when the file extension isn't 'svg' + # so the inkscape() call cannot open the file without user + # interaction, and fails in the end when trying to save + copy2(self.options.input_file, tempfile) + + # loop through selected paths + id_list = self.get_sorted_ids() + if id_list is not None: + self.duplicate_and_diff(id_list, tempfile) + else: + return + + + # replace current document with content of temp copy file + self.document = inkex.load_svg(tempfile) + # update self.svg + self.svg = self.document.getroot() + + # purge missing tagrefs (see below) + self.update_tagrefs() + # clean up + self.cleanup(tempfile) + + def cleanup(self, tempfile): + """Clean up tempfile.""" + try: + os.remove(tempfile) + except Exception: # pylint: disable=broad-except + pass + + def effect(self): + if self.has_tagrefs(): + # unsafe to use with extensions ... + inkex.utils.errormsg("This document uses Inkscape selection sets. " + + "Modifying the content with this extension " + + "may cause Inkscape to crash on reload or close. " + + "Please delete the selection sets, " + + "save the document under a new name and " + + "try again in a new Inkscape session.") + else: + self.loop_diff() + + def has_tagrefs(self): + """Check whether document has selection sets with tagrefs.""" + defs = get_defs(self.document.getroot()) + inkscape_tagrefs = defs.findall( + "inkscape:tag/inkscape:tagref", namespaces=inkex.NSS) + return len(inkscape_tagrefs) > 0 + + def update_tagrefs(self, mode='purge'): + """Check tagrefs for deleted objects.""" + defs = get_defs(self.document.getroot()) + inkscape_tagrefs = defs.findall( + "inkscape:tag/inkscape:tagref", namespaces=inkex.NSS) + if len(inkscape_tagrefs) > 0: + for tagref in inkscape_tagrefs: + href = tagref.get(inkex.addNS('href', 'xlink'))[1:] + if self.svg.getElementById(href) is None: + if mode == 'purge': + tagref.getparent().remove(tagref) + elif mode == 'placeholder': + temp = etree.Element(inkex.addNS('path', 'svg')) + temp.set('id', href) + temp.set('d', 'M 0,0 Z') + self.document.getroot().append(temp) + + # ----- workaround to fix Effect() performance with large selections + + def collect_ids(self, doc=None): + """Iterate all elements, build id dicts (doc_ids, selected).""" + doc = self.document if doc is None else doc + id_list = list(self.options.ids) + for node in doc.getroot().iter(tag=etree.Element): + if 'id' in node.attrib: + node_id = node.get('id') + self.doc_ids[node_id] = 1 + if node_id in id_list: + self.svg.selected[node_id] = node + id_list.remove(node_id) + + def getselected(self): + """Overload Effect() method.""" + self.collect_ids() + + def getdocids(self): + """Overload Effect() method.""" + pass + + +if __name__ == '__main__': + IncadiffExtension().run() diff --git a/extensions/fablabchemnitz/inkcut/inkcut.py b/extensions/fablabchemnitz/inkcut/inkcut.py new file mode 100644 index 00000000..13d009a6 --- /dev/null +++ b/extensions/fablabchemnitz/inkcut/inkcut.py @@ -0,0 +1,57 @@ +#!/usr/bin/env python3 +""" +Inkcut, Plot HPGL directly from Inkscape. + inkcut.py + + Copyright 2018 The Inkcut Team + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + MA 02110-1301, USA. +""" +import os +import inkex +from lxml import etree +from subprocess import Popen, PIPE +from shutil import copy2 +from distutils.spawn import find_executable + +def contains_text(nodes): + for node in nodes: + tag = node.tag[node.tag.rfind("}")+1:] + if tag == 'text': + return True + return False + +def convert_objects_to_paths(file, document): + tempfile = os.path.splitext(file)[0] + "-prepare.svg" + # tempfile is needed here only because we want to force the extension to be .svg + # so that we can open and close it silently + copy2(file, tempfile) + + command = "inkscape " + tempfile + ' --actions="EditSelectAllInAllLayers;EditUnlinkClone;ObjectToPath;FileSave;FileQuit"' + + if find_executable('xvfb-run'): + command = 'xvfb-run -a ' + command + + p = Popen(command, shell=True, stdout=PIPE, stderr=PIPE) + (out, err) = p.communicate() + + if p.returncode != 0: + inkex.errormsg("Failed to convert objects to paths. Continued without converting.") + inkex.errormsg(out) + inkex.errormsg(err) + return document.getroot() + else: + return etree.parse(tempfile).getroot() diff --git a/extensions/fablabchemnitz/inkcut/inkcut_cut.inx b/extensions/fablabchemnitz/inkcut/inkcut_cut.inx new file mode 100644 index 00000000..89e47676 --- /dev/null +++ b/extensions/fablabchemnitz/inkcut/inkcut_cut.inx @@ -0,0 +1,16 @@ + + + Inkcut - Cut selection + fablabchemnitz.de.inkcut_cut + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/inkcut/inkcut_cut.py b/extensions/fablabchemnitz/inkcut/inkcut_cut.py new file mode 100644 index 00000000..8203b635 --- /dev/null +++ b/extensions/fablabchemnitz/inkcut/inkcut_cut.py @@ -0,0 +1,79 @@ +#!/usr/bin/env python3 +""" +Inkcut, Plot HPGL directly from Inkscape. + extension.py + + Copyright 2010-2018 The Inkcut Team + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + MA 02110-1301, USA. +""" +import os +import sys + +import inkex +from lxml import etree +import subprocess +from inkcut import contains_text, convert_objects_to_paths + +DEBUG = False + +try: + from subprocess import DEVNULL # py3k +except ImportError: + import os + DEVNULL = open(os.devnull, 'wb') + +class InkscapeInkcutPlugin(inkex.Effect): + def effect(self): + """ Like cut but requires no selection and does no validation for + text nodes. + """ + + nodes = self.svg.selected + if not len(nodes): + inkex.errormsg("There were no paths were selected.") + return + + document = self.document + if contains_text(self.svg.selected.values()): + document = convert_objects_to_paths(self.args[-1], self.document) + + #: If running from source + if DEBUG: + python = '~/inkcut/venv/bin/python' + inkcut = '~/inkcut/main.py' + cmd = [python, inkcut] + else: + cmd = ['inkcut'] + + cmd += ['open', '-', + '--nodes']+[str(k) for k in nodes.keys()] + p = subprocess.Popen(cmd, + stdin=subprocess.PIPE, + stdout=DEVNULL, + stderr=subprocess.STDOUT, + close_fds=sys.platform != "win32") + p.stdin.write(etree.tostring(document)) + p.stdin.close() + + # Set the returncode to avoid this warning when popen is garbage collected: + # "ResourceWarning: subprocess XXX is still running". + # See https://bugs.python.org/issue38890 and + # https://bugs.python.org/issue26741. + p.returncode = 0 + +if __name__ == '__main__': + InkscapeInkcutPlugin().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/inkcut/inkcut_open.inx b/extensions/fablabchemnitz/inkcut/inkcut_open.inx new file mode 100644 index 00000000..5a39917c --- /dev/null +++ b/extensions/fablabchemnitz/inkcut/inkcut_open.inx @@ -0,0 +1,16 @@ + + + Inkcut - Open current document + fablabchemnitz.de.inkcut_open + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/inkcut/inkcut_open.py b/extensions/fablabchemnitz/inkcut/inkcut_open.py new file mode 100644 index 00000000..8024f108 --- /dev/null +++ b/extensions/fablabchemnitz/inkcut/inkcut_open.py @@ -0,0 +1,70 @@ +#!/usr/bin/env python3 + +""" +Inkcut, Plot HPGL directly from Inkscape. + extension.py + + Copyright 2010-2018 The Inkcut Team + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + MA 02110-1301, USA. +""" +import os +import sys +import inkex +import importlib +import subprocess +from lxml import etree +from inkcut import convert_objects_to_paths + +DEBUG = False +try: + from subprocess import DEVNULL # py3k +except ImportError: + import os + DEVNULL = open(os.devnull, 'wb') + + +class InkscapeInkcutPlugin(inkex.Effect): + def effect(self): + """ Like cut but requires no selection and does no validation for + text nodes. + """ + #: If running from source + if DEBUG: + python = '~/inkcut/venv/bin/python' + inkcut = '~/inkcut/main.py' + cmd = [python, inkcut] + else: + cmd = ['inkcut'] + + document = convert_objects_to_paths(self.options.input_file, self.document) + + cmd += ['open', '-'] + p = subprocess.Popen(cmd, + stdin=subprocess.PIPE, + stdout=DEVNULL, + stderr=subprocess.STDOUT, + close_fds=sys.platform != "win32") + p.stdin.write(etree.tostring(document)) + p.stdin.close() + # Set the returncode to avoid this warning when popen is garbage collected: + # "ResourceWarning: subprocess XXX is still running". + # See https://bugs.python.org/issue38890 and + # https://bugs.python.org/issue26741. + p.returncode = 0 + +if __name__ == '__main__': + InkscapeInkcutPlugin().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/inklin/inklin.glade b/extensions/fablabchemnitz/inklin/inklin.glade new file mode 100644 index 00000000..a9e8bdd9 --- /dev/null +++ b/extensions/fablabchemnitz/inklin/inklin.glade @@ -0,0 +1,421 @@ + + + + + + 200 + 100 + 1 + 10 + + + 3 + 50 + 3 + 1 + 1 + + + Inklin - a collection of things I 'ave an inkling might be useful to someone. + +https://inkscape.org/~inklinea/ + +https://inkscape.org/~bipper/ + + + 500 + 20 + 0.10000000000000001 + 0.10000000000000001 + + + 500 + 20 + 0.10000000000000001 + 0.10000000000000001 + + + 359 + 0.050000000000000003 + 0.10000000000000001 + + + False + False + 600 + 600 + True + + + + + + True + True + + + True + False + + + + True + False + + + Arc Radius 1 + True + True + False + True + + + + + 0 + 0 + + + + + True + True + arc_radius2_adjustment + 1 + + + + 0 + 3 + + + + + True + True + True + arc_radius1_adjustment + 1 + + + + 0 + 1 + + + + + Arc Radius 2 + True + True + False + True + + + + + 0 + 2 + + + + + 1 + 0 + + + + + True + False + + + True + False + + + Test Slider + True + True + True + 0_to_200 + 1 + + + + 0 + 1 + + + + + True + False + Radius + + + 0 + 0 + + + + + 0 + 0 + + + + + True + False + + + True + False + Sectors + + + 0 + 0 + + + + + True + True + True + 1_to_50 + 1 + + + + 0 + 1 + + + + + 0 + 1 + + + + + 0 + 0 + + + + + True + False + + + Sweep Flag + True + True + False + Arc sweep flag + True + + + + + 0 + 0 + + + + + Large Flag + True + True + False + Arc large flag + True + + + + + 0 + 1 + + + + + Point Circles + True + True + False + Draw a small circle at each vertex point + True + + + + + 0 + 4 + + + + + Outer Circle + True + True + False + Show the outer circle the vertices lie on + True + + + + + 0 + 3 + + + + + True + False + + + 0 + 2 + + + + + Numbering + True + True + False + Numbering of vertices + True + + + + + 0 + 5 + + + + + 2 + 0 + + + + + True + False + + + True + False + gtk-ok + + + 0 + 2 + 3 + + + + + True + True + True + deg_rotate + 1 + + + + 0 + 1 + + + + + x rotate + True + True + False + True + + + + + 0 + 0 + + + + + + + + + + + + + + + + + 0 + 1 + 4 + + + + + + + + + + True + False + PolyArcs + + + False + + + + + True + True + 10 + 10 + 10 + 10 + 2 + 3 + 15 + 15 + 15 + 15 + AboutText + + + 1 + + + + + True + False + About + + + 1 + False + + + + + + diff --git a/extensions/fablabchemnitz/inklin/inklin.inx b/extensions/fablabchemnitz/inklin/inklin.inx new file mode 100755 index 00000000..3ca8db5b --- /dev/null +++ b/extensions/fablabchemnitz/inklin/inklin.inx @@ -0,0 +1,16 @@ + + + Inklin + fablabchemnitz.de.inklin + + path + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/inklin/inklin.py b/extensions/fablabchemnitz/inklin/inklin.py new file mode 100644 index 00000000..9a8dee3a --- /dev/null +++ b/extensions/fablabchemnitz/inklin/inklin.py @@ -0,0 +1,251 @@ +#!/usr/bin/env python3 +# +# Copyright (C) [2021] [Matt Cottam], [mpcottam@raincloud.co.uk] +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# + +############################################################################## +# Inklin - a collection of things I 'ave an inkling might be useful to someone. +############################################################################## + + +import inkex +from inkex import Group +import random +from lxml import etree +import math +import gi +import io + +gi.require_version("Gtk", "3.0") +from gi.repository import Gtk +from gi.repository import Gtk, GdkPixbuf, Gdk +from gi.repository.GdkPixbuf import Pixbuf, InterpType + + +def group_wrapper(self, my_objects): + group_id = 'g' + str(random.randrange(100000, 1000000)) + + new_group = self.svg.add(Group.new('#' + group_id)) + # inkex set, takes account of NS attribs etc + new_group.set('inkscape:groupmode', 'layer') + new_group.set('inkscape:label', 'My_Layer_' + group_id) + + for my_object in my_objects: + new_group.append(my_object) + + new_group.attrib['id'] = group_id + + +def svg_arcs(cx, cy, radius, sectors, arc_radius1, arc_radius2, arc_x_rotate, arc_large_flag, arc_sweep_flag, + outer_circle_checkbutton_bool, point_circles_checkbutton_bool, numbering_checkbutton_bool): + + x_start = cx + y_start = cy - radius + + point_circles = '' + point_labels = '' + + angle = 0 + + y_start = cy / 2 + (radius * (math.sin(angle))) + x_start = cx / 2 + (radius * (math.cos(angle))) + + arcs = f'M {x_start} {y_start}' + + for sector in range(1, sectors + 1): + angle = (sector * math.pi) / (sectors / 2) + + y = cy / 2 + (radius * (math.sin(angle))) + x = cx / 2 + (radius * (math.cos(angle))) + + x_start = x + y_start = y + + + # A rx ry x-axis-rotation large-arc-flag sweep-flag x y + + arcs = arcs + f'A {arc_radius1} {arc_radius2} {arc_x_rotate} {arc_large_flag} {arc_sweep_flag} {x} {y} ' + + if not point_circles_checkbutton_bool: + point_circles = '' + else: + point_circles = point_circles + f'' + + if not numbering_checkbutton_bool: + None + else: + point_labels = point_labels + f'{sector}' + + if not outer_circle_checkbutton_bool: + outline_circle = '' + else: + outline_circle = f'' + + # svg = f'' \ + f'{outline_circle}' \ + f'{point_circles}' \ + f'{point_labels}' \ + f'' \ + f'' + + LoadSvg.master_svg = svg + + gtk3_add_svg_image(svg) + + +def gtk3_add_svg_image(svg): + loader = GdkPixbuf.PixbufLoader() + loader.write(svg.encode()) + loader.close() + pixbuf = loader.get_pixbuf() + + # pixbuf = pixbuf.scale_simple(500, 500, InterpType.BILINEAR) + + LoadSvg.preview_image.set_from_pixbuf(pixbuf) + + LoadSvg.preview_image.show_all() + + +def init_arc(): + radius = LoadSvg.builder.get_object('radius_gtk_scale').get_value() + arc_radius1 = LoadSvg.builder.get_object('arc_radius1_gtk_scale').get_value() + arc_radius2 = LoadSvg.builder.get_object('arc_radius2_gtk_scale').get_value() + arc_x_rotate_checkbutton1_bool = LoadSvg.builder.get_object('arc_x_rotate_gtk_checkbutton').get_active() + arc_radius_checkbutton1_bool = LoadSvg.builder.get_object('arc_radius1_gtk_checkbutton').get_active() + arc_radius_checkbutton2_bool = LoadSvg.builder.get_object('arc_radius2_gtk_checkbutton').get_active() + sectors = int(LoadSvg.builder.get_object('sectors_gtk_scale').get_value()) + arc_large_flag = LoadSvg.builder.get_object('arc_large_flag_gtk_checkbutton').get_active() + arc_sweep_flag = LoadSvg.builder.get_object('arc_sweep_flag_gtk_checkbutton').get_active() + + outer_circle_checkbutton_bool = LoadSvg.builder.get_object('outer_circle_gtk_checkbutton').get_active() + point_circles_checkbutton_bool = LoadSvg.builder.get_object('point_circles_gtk_checkbutton').get_active() + numbering_checkbutton_bool = LoadSvg.builder.get_object('numbering_gtk_checkbutton').get_active() + + if not arc_radius_checkbutton1_bool: + arc_radius1 = radius + LoadSvg.builder.get_object('arc_radius1_gtk_scale').set_value(radius) + + if not arc_radius_checkbutton2_bool: + arc_radius2 = radius + LoadSvg.builder.get_object('arc_radius2_gtk_scale').set_value(radius) + + if not arc_x_rotate_checkbutton1_bool: + arc_x_rotate = 0 + else: + arc_x_rotate = LoadSvg.builder.get_object('arc_x_rotate_gtk_scale').get_value() + + if not arc_sweep_flag: + arc_sweep_flag = 0 + else: + arc_sweep_flag = 1 + + if not arc_large_flag: + arc_large_flag = 0 + else: + arc_large_flag = 1 + + + svg_arcs(500, 500, radius, sectors, arc_radius1, arc_radius2, arc_x_rotate, arc_large_flag, arc_sweep_flag, outer_circle_checkbutton_bool, point_circles_checkbutton_bool, numbering_checkbutton_bool) + + # inkex.errormsg(f'arc1 {arc_radius_checkbutton1_bool} arc2 {arc_radius_checkbutton2_bool}') + + +######################################################## +# Gtk Section # +######################################################## + +class Handler: + def onDestroy(self, *args): + Gtk.main_quit() + + def onButtonPressed(self, button): + print("Hello World!") + + # def arcButtonPressed(self, button): + # svg_arcs(500, 500, 50, 8) + # test_print() + + def onScaleChangeRadius(self, scale): + init_arc() + + def onScaleChangeSides(self, scale): + init_arc() + + def onScaleChangeArcRadius(self, scale): + init_arc() + + def arcRadiusCheckbuttonChange(self, scale): + init_arc() + + def onScaleChangeXRotate(self, scale): + init_arc() + + def arcXRotateCheckbuttonChange(self, scale): + init_arc() + + def arcSweepFlagCheckbuttonChange(self, scale): + init_arc() + + def arcLargeFlagCheckbuttonChange(self, scale): + init_arc() + + def outerCircleCheckbuttonChange(self, scale): + init_arc() + + def pointCirclesCheckbuttonChange(self, scale): + init_arc() + + def numberingCheckbuttonChange(self, scale): + init_arc() + + +def run_gtk(): + LoadSvg.builder = Gtk.Builder() + LoadSvg.builder.add_from_file("inklin.glade") + LoadSvg.builder.connect_signals(Handler()) + + LoadSvg.window = LoadSvg.builder.get_object("main_window") + LoadSvg.window.show_all() + LoadSvg.window.set_title('Inklin') + + LoadSvg.preview_image = LoadSvg.builder.get_object('preview_image') + + init_arc() + + Gtk.main() + + +######################################################## +# Inkex effect section # +######################################################## + +class LoadSvg(inkex.EffectExtension): + + def effect(self): + run_gtk() + + svg_etree = etree.fromstring(LoadSvg.master_svg) + + group_wrapper(self, svg_etree) + + +if __name__ == '__main__': + LoadSvg().run() diff --git a/extensions/fablabchemnitz/inkpacking/inkpacking.inx b/extensions/fablabchemnitz/inkpacking/inkpacking.inx new file mode 100644 index 00000000..f50ffb5c --- /dev/null +++ b/extensions/fablabchemnitz/inkpacking/inkpacking.inx @@ -0,0 +1,93 @@ + + + InkPACKING + fablabchemnitz.de.inkpacking + + + 40 + 30 + 80 + 0.5 + + + + + + + + + true + + + + + + + + true + 0.6 + 0 + 14 + 18 + false + false + 5 + + + + + 0 + 2 + 7 + 3 + 3 + 12 + + + true + 0 + 2 + 7 + 3 + 3 + 12 + + + 13 + 12 + false + + + + + + + + + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/inkpacking/inkpacking.py b/extensions/fablabchemnitz/inkpacking/inkpacking.py new file mode 100644 index 00000000..3698dada --- /dev/null +++ b/extensions/fablabchemnitz/inkpacking/inkpacking.py @@ -0,0 +1,776 @@ +#!/usr/bin/env python3 +''' +Copyleft ( ) 2009 Celso Junior celsojr2008 at gmail dot com>, + 2015 Maren Hachmann (updated for Inkscape 0.91) +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +TODO: Mailer Lock; Tuck and Tongle; Gusset Tuck; Arthur Lock +Dust Flaps; Edge Lock; Houghland Snap Lock Bottom +(semi automatic); Quad Lock Bottom; Himes Lock (Automatic Bottom); Security Zipper + +''' + +import inkex +from math import * +from lxml import etree +from inkex.paths import Path + +class inkpacking(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument("--pages") + pars.add_argument("--dustpages") + pars.add_argument("--width", type=float, default=10.0) + pars.add_argument("--height", type=float, default=15.0) + pars.add_argument("--depth", type=float, default=3.0) + pars.add_argument("--unit", default="mm") + pars.add_argument("--topscheme", default="rwlf") + pars.add_argument("--botscheme", default="rwlf") + pars.add_argument("--paper_thickness", type=float, default=0.5) + pars.add_argument("--tab_proportion", type=float, default=14, help="Inner tab propotion for upper tab") + pars.add_argument("--lockroundradius", type=float, default=18, help="Lock Radius") + pars.add_argument("--clueflapsize", type=float, default=13, help="Clue Flap Size") + pars.add_argument("--clueflapangle", type=float, default=12, help="Clue Flap Angle") + pars.add_argument("--clueflapside", type=inkex.Boolean, default=False) + pars.add_argument("--tfal", type=inkex.Boolean, default=False) + pars.add_argument("--bfal", type=inkex.Boolean, default=False) + pars.add_argument("--hotmeltprop", type=float, default=0.6) + pars.add_argument("--createshapes", type=inkex.Boolean, default=False) + pars.add_argument("--createglueshapes", type=inkex.Boolean, default=False) + pars.add_argument("--fingergrepa", type=inkex.Boolean, default=False) + pars.add_argument("--fingergrepb", type=inkex.Boolean, default=False) + pars.add_argument("--fingergrepr", type=float, default=5) + pars.add_argument("--usetop", type=inkex.Boolean, default=False) + pars.add_argument("--glueflapinoff", type=float, default=0) + pars.add_argument("--glueflapin45", type=float, default=2) + pars.add_argument("--glueflapinang", type=float, default=7) + pars.add_argument("--glueflapouoff", type=float, default=0) + pars.add_argument("--glueflapou45", type=float, default=3) + pars.add_argument("--glueflapouang", type=float, default=12) + pars.add_argument("--bglueflapinoff", type=float, default=0) + pars.add_argument("--bglueflapin45", type=float, default=2) + pars.add_argument("--bglueflapinang", type=float, default=7) + pars.add_argument("--bglueflapouoff", type=float, default=0) + pars.add_argument("--bglueflapou45", type=float, default=3) + pars.add_argument("--bglueflapouang", type=float, default=12) + pars.add_argument("--roto", type=float, default=0) + + def effect(self): + docW = self.svg.unittouu(self.document.getroot().get('width')) + docH = self.svg.unittouu(self.document.getroot().get('height')) + roto = self.svg.unittouu( str(self.options.roto) + self.options.unit ) + boxW = self.svg.unittouu( str(self.options.width) + self.options.unit ) + boxH = self.svg.unittouu( str(self.options.height) + self.options.unit ) + boxD = self.svg.unittouu( str(self.options.depth) + self.options.unit ) + boxL = self.svg.unittouu( str(self.options.tab_proportion) + self.options.unit ) + thck = self.svg.unittouu( str(self.options.paper_thickness) + self.options.unit ) + fingergrepr = self.svg.unittouu( str(self.options.fingergrepr) + self.options.unit ) + gflapsize = self.svg.unittouu( str(self.options.clueflapsize) + self.options.unit ) + gflapangle = self.options.clueflapangle + gfmirror = self.options.clueflapside + fingergrepa = self.options.fingergrepa + fingergrepb = self.options.fingergrepb + gflapangle = 90 - gflapangle + usetop = self.options.usetop + glueflapinoff = self.svg.unittouu( str(self.options.glueflapinoff) + self.options.unit ) + glueflapin45 = self.svg.unittouu( str(self.options.glueflapin45) + self.options.unit ) + lockrr = self.svg.unittouu( str(self.options.lockroundradius) + self.options.unit ) + glueflapinang = self.options.glueflapinang + glueflapindesl = (( (boxD + boxL) / 2 - glueflapinoff - glueflapin45) / sin(radians(90 - glueflapinang)) * sin(radians(glueflapinang))) + glueflapouoff = self.svg.unittouu( str(self.options.glueflapouoff) + self.options.unit ) + glueflapou45 = self.svg.unittouu( str(self.options.glueflapou45) + self.options.unit ) + glueflapouang = self.options.glueflapouang + glueflapoudesl = (( (boxD + boxL) / 2 - glueflapouoff - glueflapou45) / sin(radians(90 - glueflapouang)) * sin(radians(glueflapouang))) + bglueflapinoff = self.svg.unittouu( str(self.options.bglueflapinoff) + self.options.unit ) + bglueflapin45 = self.svg.unittouu( str(self.options.bglueflapin45) + self.options.unit ) + bglueflapinang = self.options.bglueflapinang + bglueflapindesl = (( (boxD + boxL) / 2 - bglueflapinoff - bglueflapin45) / sin(radians(90 - bglueflapinang)) * sin(radians(bglueflapinang))) + bglueflapouoff = self.svg.unittouu( str(self.options.bglueflapouoff) + self.options.unit ) + bglueflapou45 = self.svg.unittouu( str(self.options.bglueflapou45) + self.options.unit ) + bglueflapouang = self.options.bglueflapouang + bglueflapoudesl = (( (boxD + boxL) / 2 - bglueflapouoff - bglueflapou45) / sin(radians(90 - bglueflapouang)) * sin(radians(bglueflapouang))) + tpsc = self.options.topscheme + btsc = self.options.botscheme + tfal = self.options.tfal + bfal = self.options.bfal + hotmeltp = self.options.hotmeltprop + + angx = asin( (boxL - thck) / lockrr ) + angy = (3.141615 / 2) - angx + lockroff = lockrr - (lockrr * sin(angy)) + + box_id = self.svg.get_unique_id('box') + self.box = g = etree.SubElement(self.svg.get_current_layer(), 'g', {'id':box_id}) + cut_line_style = str(inkex.Style(({ 'stroke': '#000000', 'fill': 'none', 'stroke-width':'0.3px' }))) + engrave_line_style = str(inkex.Style(({ 'stroke': '#ff0000', 'fill': 'none', 'stroke-width':'0.3px' }))) + + gflapoffy = (gflapsize / sin( (gflapangle / 360) * 6.28 )) * sin( ((90 - gflapangle) / 360 ) * 6.28) + + # Side Glueflap + if not gfmirror: + line_path = [ + [ 'M', [0, 0]], + [ 'L', [gflapsize * -1, gflapoffy]], + [ 'L', [gflapsize * -1, boxH - gflapoffy]], + [ 'L', [0, boxH]], + [ 'M', [0, 0]] + ] + + if gfmirror: + line_path = [ + [ 'M', [boxW+boxD+boxW+boxD - thck, 0]], + [ 'L', [boxW+boxD+boxW+boxD - thck + gflapsize, gflapoffy]], + [ 'L', [boxW+boxD+boxW+boxD - thck + gflapsize, boxH - gflapoffy]], + [ 'L', [boxW+boxD+boxW+boxD - thck, boxH]], + [ 'M', [boxW+boxD+boxW+boxD - thck, 0]] + ] + + + line_atts = { 'style':cut_line_style, 'id':box_id+'-sideglueflap', 'd':str(Path(line_path)) } + etree.SubElement(g, inkex.addNS('path','svg'), line_atts ) + + + # MainBody + line_path = [ + [ 'M', [0, 0]], + [ 'L', [0, boxH]] + ] + if gfmirror: + style = cut_line_style + else: + style = engrave_line_style + line_atts = { 'style':style, 'id':box_id+'-body-left', 'd':str(Path(line_path)) } + etree.SubElement(g, inkex.addNS('path','svg'), line_atts ) + + line_path = [ + [ 'M', [boxW, 0]], + [ 'L', [boxW, boxH]], + + [ 'M', [boxW + boxD, 0]], + [ 'L', [boxW + boxD, boxH]], + + [ 'M', [boxW + boxD + boxW, 0]], + [ 'L', [boxW + boxD + boxW, boxH]] + ] + line_atts = { 'style':engrave_line_style, 'id':box_id+'-body-mid', 'd':str(Path(line_path)) } + etree.SubElement(g, inkex.addNS('path','svg'), line_atts ) + + if gfmirror: + style = engrave_line_style + else: + style = cut_line_style + line_path = [ + [ 'M', [boxW + boxD + boxW + boxD - thck, 0]], + [ 'L', [boxW + boxD + boxW + boxD - thck, boxH]], + ] + line_atts = { 'style':style, 'id':box_id+'-body-left', 'd':str(Path(line_path)) } + etree.SubElement(g, inkex.addNS('path','svg'), line_atts ) + + # No Top Option + if tpsc == "notp": + if not fingergrepa and not fingergrepb: + line_path = [ + [ 'M', [0, 0]], + [ 'L', [boxW, 0]], + [ 'L', [boxW + boxD, 0]], + [ 'L', [boxW + boxD + boxW, 0]], + [ 'L', [boxW + boxD + boxW + boxD - thck, 0]] + ] + if fingergrepa and not fingergrepb: + line_path = [ + [ 'M', [0, 0]], + [ 'L', [boxW / 2 - fingergrepr, 0]], + [ 'A', [fingergrepr, fingergrepr, 0, 1, 0, boxW - boxW / 2 + fingergrepr, 0]], + [ 'L', [boxW, 0]], + [ 'L', [boxW + boxD, 0]], + [ 'L', [boxW + boxD + boxW / 2 - fingergrepr, 0]], + [ 'A', [fingergrepr, fingergrepr, 0, 1, 0, boxW + boxD + boxW - boxW / 2 + fingergrepr, 0]], + [ 'L', [boxW + boxD + boxW, 0]], + [ 'L', [boxW + boxD + boxW + boxD - thck, 0]] + ] + if fingergrepa and fingergrepb: + line_path = [ + [ 'M', [0, 0]], + [ 'L', [boxW / 2 - fingergrepr, 0]], + [ 'A', [fingergrepr, fingergrepr, 0, 1, 0, boxW - boxW / 2 + fingergrepr, 0]], + [ 'L', [boxW, 0]], + [ 'L', [boxW + boxD / 2 - fingergrepr, 0]], + [ 'A', [fingergrepr, fingergrepr, 0, 1, 0, boxW + boxD - boxD / 2 + fingergrepr, 0]], + [ 'L', [boxW + boxD, 0]], + [ 'L', [boxW + boxD + boxW / 2 - fingergrepr, 0]], + [ 'A', [fingergrepr, fingergrepr, 0, 1, 0, boxW + boxD + boxW - boxW / 2 + fingergrepr, 0]], + [ 'L', [boxW + boxD + boxW, 0]], + [ 'L', [boxW + boxD + boxW + boxD - thck - ( (boxD - thck) / 2 ) - fingergrepr, 0]], + [ 'A', [fingergrepr, fingergrepr, 0, 1, 0, boxW + boxD + boxW - thck + boxD - ( ( boxD - thck ) / 2 ) + fingergrepr , 0]], + [ 'L', [boxW + boxD + boxW + boxD - thck, 0]] + ] + + if not fingergrepa and fingergrepb: + line_path = [ + [ 'M', [0, 0]], + [ 'L', [boxW, 0]], + [ 'L', [boxW + boxD / 2 - fingergrepr, 0]], + [ 'A', [fingergrepr, fingergrepr, 0, 1, 0, boxW + boxD - boxD / 2 + fingergrepr, 0]], + [ 'L', [boxW + boxD, 0]], + [ 'L', [boxW + boxD + boxW, 0]], + [ 'L', [boxW + boxD + boxW + boxD - thck - ( (boxD - thck) / 2 ) - fingergrepr, 0]], + [ 'A', [fingergrepr, fingergrepr, 0, 1, 0, boxW + boxD + boxW - thck + boxD - ( ( boxD - thck ) / 2 ) + fingergrepr , 0]], + [ 'L', [boxW + boxD + boxW + boxD - thck, 0]] + ] + + + line_atts = { 'style':cut_line_style, 'id':box_id+'-topdraw', 'd':str(Path(line_path)) } + etree.SubElement(g, inkex.addNS('path','svg'), line_atts ) + + # No Bottom Option + if btsc == "nobt": + if not fingergrepa and not fingergrepb: + line_path = [ + [ 'M', [0, boxH]], + [ 'L', [boxW, boxH]], + [ 'L', [boxW + boxD, boxH]], + [ 'L', [boxW + boxD + boxW, boxH]], + [ 'L', [boxW + boxD + boxW + boxD - thck, boxH]] + ] + if fingergrepa and not fingergrepb: + line_path = [ + [ 'M', [0, boxH]], + [ 'L', [boxW / 2 - fingergrepr, boxH]], + [ 'A', [fingergrepr, fingergrepr, 0, 1, 1, boxW - boxW / 2 + fingergrepr, boxH]], + [ 'L', [boxW, boxH]], + [ 'L', [boxW + boxD, boxH]], + [ 'L', [boxW + boxD + boxW / 2 - fingergrepr, boxH]], + [ 'A', [fingergrepr, fingergrepr, 0, 1, 1, boxW + boxD + boxW - boxW / 2 + fingergrepr, boxH]], + [ 'L', [boxW + boxD + boxW, boxH]], + [ 'L', [boxW + boxD + boxW + boxD - thck, boxH]], + [ 'M', [0, boxH]] + ] + if fingergrepa and fingergrepb: + line_path = [ + [ 'M', [0, boxH]], + [ 'L', [boxW / 2 - fingergrepr, boxH]], + [ 'A', [fingergrepr, fingergrepr, 0, 1, 1, boxW - boxW / 2 + fingergrepr, boxH]], + [ 'L', [boxW, boxH]], + [ 'L', [boxW + boxD / 2 - fingergrepr, boxH]], + [ 'A', [fingergrepr, fingergrepr, 0, 1, 1, boxW + boxD - boxD / 2 + fingergrepr, boxH]], + [ 'L', [boxW + boxD, boxH]], + [ 'L', [boxW + boxD + boxW / 2 - fingergrepr, boxH]], + [ 'A', [fingergrepr, fingergrepr, 0, 1, 1, boxW + boxD + boxW - boxW / 2 + fingergrepr, boxH]], + [ 'L', [boxW + boxD + boxW, boxH]], + [ 'L', [boxW + boxD + boxW + boxD - thck - ( (boxD - thck) / 2 ) - fingergrepr, boxH]], + [ 'A', [fingergrepr, fingergrepr, 0, 1, 1, boxW + boxD + boxW - thck + boxD - ( ( boxD - thck ) / 2 ) + fingergrepr , boxH]], + [ 'L', [boxW + boxD + boxW + boxD - thck, boxH]], + [ 'M', [0, boxH]] + ] + + if not fingergrepa and fingergrepb: + line_path = [ + [ 'M', [0, boxH]], + [ 'L', [boxW, boxH]], + [ 'L', [boxW + boxD / 2 - fingergrepr, boxH]], + [ 'A', [fingergrepr, fingergrepr, 0, 1, 1, boxW + boxD - boxD / 2 + fingergrepr, boxH]], + [ 'L', [boxW + boxD, boxH]], + [ 'L', [boxW + boxD + boxW, boxH]], + [ 'L', [boxW + boxD + boxW + boxD - thck - ( (boxD - thck) / 2 ) - fingergrepr, boxH]], + [ 'A', [fingergrepr, fingergrepr, 0, 1, 1, boxW + boxD + boxW - thck + boxD - ( ( boxD - thck ) / 2 ) + fingergrepr , boxH]], + [ 'L', [boxW + boxD + boxW + boxD - thck, boxH]], + [ 'M', [0, boxH]] + ] + + line_atts = { 'style':cut_line_style, 'id':box_id+'-botdraw', 'd':str(Path(line_path)) } + etree.SubElement(g, inkex.addNS('path','svg'), line_atts ) + + # Flat Bottom with Lock Flaps + if btsc == "fwlf": + desloc = 0 + inicut = boxW + boxD + if not bfal: + desloc = boxW + boxD + inicut = 0 + line_path = [ + [ 'M', [desloc,boxH]], + [ 'l', [0, boxD]], + [ 'm', [6, 0]], + [ 'l', [0, thck * -2]], + [ 'm', [0, thck]], + [ 'l', [boxW - 12, 0]], + [ 'm', [0, thck * -1]], + [ 'l', [0, thck * 2]], + [ 'm', [6, 0]], + [ 'l', [0, boxD * -1]], + [ 'M', [desloc, boxH]], + [ 'm', [0, boxD *1]], + [ 'm', [thck, 0]], + [ 'l', [lockroff, (boxL - thck)]], + [ 'l', [boxW - lockroff - lockroff - thck - thck, 0]], + [ 'l', [lockroff, (boxL - thck) * -1]] + ] + line_atts = { 'style':cut_line_style, 'id':box_id+'-bothead', 'd':str(Path(line_path)) } + etree.SubElement(g, inkex.addNS('path','svg'), line_atts ) + + line_path = [ + [ 'M', [desloc, boxH + boxD]], + [ 'l', [6, 0]], + [ 'M', [desloc + boxW - 6, boxH + boxD]], + [ 'l', [6, 0]], + [ 'M', [desloc,boxH + thck]], + [ 'l', [boxW,0]] + ] + line_atts = { 'style':engrave_line_style, 'id':box_id+'-bothead', 'd':str(Path(line_path)) } + etree.SubElement(g, inkex.addNS('path','svg'), line_atts ) + + if fingergrepa: + line_path = [ + ["M", [inicut, boxH]], + ["l", [boxW / 2 - fingergrepr, 0]], + ["a", [fingergrepr, fingergrepr, 0, 0, 1, fingergrepr * 2,0]], + ["l", [boxW / 2 - fingergrepr, 0]] + ] + line_atts = { 'style':cut_line_style, 'id':box_id+'-botcut', 'd':str(Path(line_path)) } + etree.SubElement(g, inkex.addNS('path','svg'), line_atts ) + if not fingergrepa: + line_path = [ + ["M", [inicut, boxH]], + ["l", [boxW, 0]] + ] + line_atts = { 'style':cut_line_style, 'id':box_id+'-botcut', 'd':str(Path(line_path)) } + etree.SubElement(g, inkex.addNS('path','svg'), line_atts ) + + + # Flat Top with Lock Flaps + if tpsc == "fwlf": + desloc = 0 + inicut = boxW + boxD + if not tfal: + desloc = boxW + boxD + inicut = 0 + line_path = [ + [ 'M', [desloc,0]], + [ 'l', [0, boxD * -1]], + [ 'm', [6, 0]], + [ 'l', [0, thck * 2]], + [ 'm', [0, thck * -1]], + [ 'l', [boxW - 12, 0]], + [ 'm', [0, thck]], + [ 'l', [0, thck * -2]], + [ 'm', [6, 0]], + [ 'l', [0, boxD]], + [ 'M', [desloc, 0]], + [ 'm', [0, boxD *-1]], + [ 'm', [thck, 0]], + [ 'l', [lockroff, (boxL - thck) * -1]], + [ 'l', [boxW - lockroff - lockroff - thck - thck, 0]], + [ 'l', [lockroff, (boxL - thck)]] + + ] + line_atts = { 'style':cut_line_style, 'id':box_id+'-tophead', 'd':str(Path(line_path)) } + etree.SubElement(g, inkex.addNS('path','svg'), line_atts ) + + line_path = [ + [ 'M', [desloc, boxD * -1]], + [ 'l', [6, 0]], + [ 'M', [desloc + boxW - 6, boxD * -1]], + [ 'l', [6, 0]], + [ 'M', [desloc,thck * -1]], + [ 'l', [boxW,0]] + ] + line_atts = { 'style':engrave_line_style, 'id':box_id+'-tophead', 'd':str(Path(line_path)) } + etree.SubElement(g, inkex.addNS('path','svg'), line_atts ) + + if fingergrepa: + line_path = [ + ["M", [inicut,0]], + ["l", [boxW / 2 - fingergrepr, 0]], + ["a", [fingergrepr, fingergrepr, 0, 0, 0, fingergrepr * 2,0]], + ["l", [boxW / 2 - fingergrepr, 0]] + ] + line_atts = { 'style':cut_line_style, 'id':box_id+'-topcut', 'd':str(Path(line_path)) } + etree.SubElement(g, inkex.addNS('path','svg'), line_atts ) + if not fingergrepa: + line_path = [ + ["M", [inicut,0]], + ["l", [boxW, 0]] + ] + line_atts = { 'style':cut_line_style, 'id':box_id+'-topcut', 'd':str(Path(line_path)) } + etree.SubElement(g, inkex.addNS('path','svg'), line_atts ) + + # Rounded Bottom with Lock Flaps + if btsc == "rwlf": + desloc = 0 + inicut = boxW + boxD + if not bfal: + desloc = boxW + boxD + inicut = 0 + line_path = [ + [ 'M', [desloc,boxH]], + [ 'l', [0, boxD]], + [ 'm', [6, 0]], + [ 'l', [0, thck * -2]], + [ 'm', [0, thck]], + [ 'l', [boxW - 12, 0]], + [ 'm', [0, thck * -1]], + [ 'l', [0, thck * 2]], + [ 'm', [6, 0]], + [ 'l', [0, boxD * -1]], + [ 'M', [desloc, boxH]], + [ 'm', [0, boxD]], + [ 'm', [thck, 0]], + [ 'a', [lockrr , lockrr, 0, 0, 0, lockroff, (boxL - thck)]], + [ 'l', [boxW - lockroff - lockroff - thck - thck, 0]], + [ 'a', [lockrr, lockrr, roto, 0, 0, lockroff, (boxL - thck) * - 1]] + ] + line_atts = { 'style':cut_line_style, 'id':box_id+'-bothead', 'd':str(Path(line_path)) } + etree.SubElement(g, inkex.addNS('path','svg'), line_atts ) + + line_path = [ + [ 'M', [desloc, boxH + boxD]], + [ 'l', [6, 0]], + [ 'M', [desloc + boxW - 6, boxH + boxD]], + [ 'l', [6, 0]], + [ 'M', [desloc,boxH + thck]], + [ 'l', [boxW,0]] + ] + line_atts = { 'style':engrave_line_style, 'id':box_id+'-bothead', 'd':str(Path(line_path)) } + etree.SubElement(g, inkex.addNS('path','svg'), line_atts ) + + if fingergrepa: + line_path = [ + ["M", [inicut,boxH]], + ["l", [boxW / 2 - fingergrepr, 0]], + ["a", [fingergrepr, fingergrepr, 0, 0, 1, fingergrepr * 2,0]], + ["l", [boxW / 2 - fingergrepr, 0]] + ] + line_atts = { 'style':cut_line_style, 'id':box_id+'-botcut', 'd':str(Path(line_path)) } + etree.SubElement(g, inkex.addNS('path','svg'), line_atts ) + if not fingergrepa: + line_path = [ + ["M", [inicut,boxH]], + ["l", [boxW, 0]] + ] + line_atts = { 'style':cut_line_style, 'id':box_id+'-botcut', 'd':str(Path(line_path)) } + etree.SubElement(g, inkex.addNS('path','svg'), line_atts ) + + # Rounded Top with Lock Flaps + if tpsc == "rwlf": + desloc = 0 + inicut = boxW + boxD + if not tfal: + desloc = boxW + boxD + inicut = 0 + line_path = [ + [ 'M', [desloc,0]], + [ 'l', [0, boxD * -1]], + [ 'm', [6, 0]], + [ 'l', [0, thck * 2]], + [ 'm', [0, thck * -1]], + [ 'l', [boxW - 12, 0]], + [ 'm', [0, thck]], + [ 'l', [0, thck * -2]], + [ 'm', [6, 0]], + [ 'l', [0, boxD]], + [ 'M', [desloc, 0]], + [ 'm', [0, boxD *-1]], + [ 'm', [thck, 0]], + [ 'a', [lockrr , lockrr, 0, 0, 1, lockroff, (boxL - thck) * -1]], + [ 'l', [boxW - lockroff - lockroff - thck - thck, 0]], + [ 'a', [lockrr, lockrr, roto, 0, 1, lockroff, (boxL - thck)]] + ] + line_atts = { 'style':cut_line_style, 'id':box_id+'-tophead', 'd':str(Path(line_path)) } + etree.SubElement(g, inkex.addNS('path','svg'), line_atts ) + + line_path = [ + [ 'M', [desloc, boxD * -1]], + [ 'l', [6, 0]], + [ 'M', [desloc + boxW - 6, boxD * -1]], + [ 'l', [6, 0]], + [ 'M', [desloc,thck * -1]], + [ 'l', [boxW,0]] + ] + line_atts = { 'style':engrave_line_style, 'id':box_id+'-tophead', 'd':str(Path(line_path)) } + etree.SubElement(g, inkex.addNS('path','svg'), line_atts ) + if fingergrepa: + line_path = [ + ["M", [inicut,0]], + ["l", [boxW / 2 - fingergrepr, 0]], + ["a", [fingergrepr, fingergrepr, 0, 0, 0, fingergrepr * 2,0]], + ["l", [boxW / 2 - fingergrepr, 0]] + ] + line_atts = { 'style':cut_line_style, 'id':box_id+'-topcut', 'd':str(Path(line_path)) } + etree.SubElement(g, inkex.addNS('path','svg'), line_atts ) + if not fingergrepa: + line_path = [ + ["M", [inicut,0]], + ["l", [boxW, 0]] + ] + line_atts = { 'style':cut_line_style, 'id':box_id+'-topcut', 'd':str(Path(line_path)) } + etree.SubElement(g, inkex.addNS('path','svg'), line_atts ) + + # HotMelt Top + if tpsc == "fwnf": + if tfal: + cut_line_path = [ + [ 'M', [0, 0]], + [ 'L', [0, boxD * -1]], + [ 'L', [boxW, boxD * -1]], + [ 'L', [boxW, 0]], + [ 'M', [boxW, boxD * -1 / 2]], + [ 'M', [boxW + boxD, boxD * -1 / 2]], + [ 'M', [boxW + boxD, 0]], + [ 'L', [boxW + boxD, boxD * -1 * hotmeltp]], + [ 'L', [boxW + boxD + boxW, boxD * -1 * hotmeltp]], + [ 'L', [boxW + boxD + boxW, 0]], + [ 'M', [boxW + boxD + boxW, boxD * -1 /2]], + [ 'M', [boxW + boxD + boxW + boxD - thck, boxD * -1 /2]], + [ 'M', [boxW + boxD + boxW + boxD - thck, 0]] + ] + engrave_line_path = [ + [ 'M', [0, 0 - thck]], + [ 'L', [boxW, 0 - thck]], + [ 'M', [boxW + boxD, 0 - thck]], + [ 'L', [boxW + boxD + boxW, 0 - thck]] + ] + if not tfal: + cut_line_path = [ + [ 'M', [0, 0]], + [ 'L', [0, boxD * -1 * hotmeltp]], + [ 'L', [boxW, boxD * -1 * hotmeltp]], + [ 'L', [boxW, 0]], + [ 'M', [boxW, boxD * -1 / 2]], + [ 'M', [boxW + boxD, boxD * -1 / 2]], + [ 'M', [boxW + boxD, 0]], + [ 'L', [boxW + boxD, boxD * -1]], + [ 'L', [boxW + boxD + boxW, boxD * -1]], + [ 'L', [boxW + boxD + boxW, 0]], + [ 'M', [boxW + boxD + boxW, boxD * -1 /2]], + [ 'M', [boxW + boxD + boxW + boxD - thck, boxD * -1 /2]], + [ 'M', [boxW + boxD + boxW + boxD - thck, 0]] + ] + engrave_line_path = [ + [ 'M', [0, 0 - thck]], + [ 'L', [boxW, 0 - thck]], + [ 'M', [boxW + boxD, 0 - thck]], + [ 'L', [boxW + boxD + boxW, 0 - thck]] + ] + line_atts = { 'style':cut_line_style, 'id':box_id+'-topdraw_cut', 'd':str(Path(cut_line_path)) } + etree.SubElement(g, inkex.addNS('path','svg'), line_atts ) + line_atts = { 'style':engrave_line_style, 'id':box_id+'-topdraw_engrave', 'd':str(Path(engrave_line_path)) } + etree.SubElement(g, inkex.addNS('path','svg'), line_atts ) + # HotMelt Bottom + if btsc == "fwnf": + if bfal: + cut_line_path = [ + [ 'M', [0, boxH]], + [ 'L', [0, boxH + boxD]], + [ 'L', [boxW, boxH + boxD]], + [ 'L', [boxW, boxH]], + [ 'M', [boxW, boxH + boxD / 2]], + [ 'M', [boxW + boxD, boxH + boxD / 2]], + [ 'M', [boxW + boxD, boxH]], + [ 'L', [boxW + boxD, boxH + boxD * hotmeltp]], + [ 'L', [boxW + boxD + boxW, boxH + boxD * hotmeltp]], + [ 'L', [boxW + boxD + boxW, boxH]], + [ 'M', [boxW + boxD + boxW, boxH + boxD /2]], + [ 'M', [boxW + boxD + boxW + boxD - thck, boxH + boxD /2]], + [ 'M', [boxW + boxD + boxW + boxD - thck, boxH]] + + ] + engrave_line_path = [ + [ 'M', [0, boxH + thck]], + [ 'L', [boxW, boxH + thck]], + [ 'M', [boxW + boxD, boxH + thck]], + [ 'L', [boxW + boxD + boxW, boxH + thck]] + ] + if not bfal: + cut_line_path = [ + [ 'M', [0, boxH]], + [ 'L', [0, boxH + boxD * hotmeltp]], + [ 'L', [boxW, boxH + boxD * hotmeltp]], + [ 'L', [boxW, boxH]], + [ 'M', [boxW, boxH + boxD / 2]], + [ 'M', [boxW + boxD, boxH + boxD / 2]], + [ 'M', [boxW + boxD, boxH]], + [ 'L', [boxW + boxD, boxH + boxD]], + [ 'L', [boxW + boxD + boxW, boxH + boxD]], + [ 'L', [boxW + boxD + boxW, boxH]], + [ 'M', [boxW + boxD + boxW, boxH + boxD /2]], + [ 'M', [boxW + boxD + boxW + boxD - thck, boxH + boxD /2]], + [ 'M', [boxW + boxD + boxW + boxD - thck, boxH]] + ] + engrave_line_path = [ + [ 'M', [0, boxH + thck]], + [ 'L', [boxW, boxH + thck]], + [ 'M', [boxW + boxD, boxH + thck]], + [ 'L', [boxW + boxD + boxW, boxH + thck]] + ] + line_atts = { 'style':cut_line_style, 'id':box_id+'-botdraw_cut', 'd':str(Path(cut_line_path)) } + etree.SubElement(g, inkex.addNS('path','svg'), line_atts ) + line_atts = { 'style':engrave_line_style, 'id':box_id+'-botdraw_engrave', 'd':str(Path(engrave_line_path)) } + etree.SubElement(g, inkex.addNS('path','svg'), line_atts ) + thck2 = thck / 2 + + # Top Glue Flaps + if tpsc != "notp": + desclock = thck + if tpsc == "fwnf": + desclock = 0 + if tfal: + cut_line_path = [ + [ 'M', [boxW, 0]], + [ 'l', [0, glueflapinoff * -1]], + [ 'l', [glueflapin45, glueflapin45 * -1]], + [ 'l', [glueflapindesl, ((boxD + boxL) / 2 - glueflapinoff - glueflapin45) * -1 + thck2]], + [ 'M', [boxW + boxD, 0]], + [ 'l', [desclock * -1, 0]], + [ 'l', [0, glueflapouoff * -1]], + [ 'l', [glueflapou45 * -1, glueflapou45 * -1]], + [ 'l', [glueflapoudesl * -1, ((boxD + boxL) / 2 - glueflapouoff - glueflapou45) * -1 + thck2]], + [ 'l', [(boxD - glueflapindesl - glueflapoudesl - glueflapin45 - glueflapou45 - desclock) * -1, 0]], + [ 'M', [boxW + boxW + boxD + boxD - thck, 0]], + [ 'l', [0, glueflapinoff * -1]], + [ 'l', [glueflapin45 * -1, glueflapin45 * -1]], + [ 'l', [glueflapindesl * -1, ((boxD + boxL) / 2 - glueflapinoff - glueflapin45) * -1 + thck2]], + [ 'M', [boxW + boxD + boxW, 0]], + [ 'l', [desclock, 0]], + [ 'l', [0, glueflapouoff * -1]], + [ 'l', [glueflapou45, glueflapou45 * -1]], + [ 'l', [glueflapoudesl, ((boxD + boxL) / 2 - glueflapouoff - glueflapou45) * -1 + thck2]], + [ 'l', [(boxD - glueflapindesl - glueflapoudesl - glueflapin45 - glueflapou45 - desclock -thck ), 0]] + ] + engrave_line_path = [ + [ 'M', [boxW, 0]], + [ 'l', [boxD - desclock, 0]], + [ 'M', [boxW + boxD + boxW + desclock, 0]], + [ 'l', [boxD - thck - desclock, 0]] + ] + + if not tfal: + cut_line_path = [ + [ 'M', [boxW + boxD, 0]], + [ 'l', [0, glueflapinoff * -1]], + [ 'l', [glueflapin45 * -1, glueflapin45 * -1]], + [ 'l', [glueflapindesl * -1, ((boxD + boxL) / 2 - glueflapinoff - glueflapin45) * -1 + thck2]], + [ 'M', [boxW, 0]], + [ 'l', [desclock, 0]], + [ 'l', [0, glueflapouoff * -1]], + [ 'l', [glueflapou45, glueflapou45 * -1]], + [ 'l', [glueflapoudesl, ((boxD + boxL) / 2 - glueflapouoff - glueflapou45) * -1 + thck2]], + [ 'l', [(boxD - glueflapindesl - glueflapoudesl - glueflapin45 - glueflapou45 - desclock), 0]], + [ 'M', [boxW + boxD + boxW, 0]], + [ 'l', [0, glueflapinoff * -1]], + [ 'l', [glueflapin45, glueflapin45 * -1]], + [ 'l', [glueflapindesl, ((boxD + boxL) / 2 - glueflapinoff - glueflapin45) * -1 + thck2]], + [ 'M', [boxW + boxD + boxW + boxD - thck, 0]], + [ 'l', [desclock * -1, 0]], + [ 'l', [0, glueflapouoff * -1]], + [ 'l', [glueflapou45 * -1, glueflapou45 * -1]], + [ 'l', [glueflapoudesl * -1, ((boxD + boxL) / 2 - glueflapouoff - glueflapou45) * -1 + thck2]], + [ 'l', [(boxD - glueflapindesl - glueflapoudesl - glueflapin45 - glueflapou45 - desclock -thck) * -1, 0]] + ] + engrave_line_path = [ + [ 'M', [boxW + desclock, 0]], + [ 'l', [boxD - desclock, 0]], + [ 'M', [boxW + boxD + boxW, 0]], + [ 'l', [boxD -thck - desclock, 0]] + ] + + line_atts = { 'style':cut_line_style, 'id':box_id+'-topglueflap_cut', 'd':str(Path(cut_line_path)) } + etree.SubElement(g, inkex.addNS('path','svg'), line_atts ) + line_atts = { 'style':engrave_line_style, 'id':box_id+'-topglueflap_engrave', 'd':str(Path(engrave_line_path)) } + etree.SubElement(g, inkex.addNS('path','svg'), line_atts ) + + + # Bottom Glue Flaps + if not usetop: + glueflapinoff = bglueflapinoff + glueflapin45 = bglueflapin45 + glueflapindesl = bglueflapindesl + glueflapouoff = bglueflapouoff + glueflapou45 = bglueflapou45 + glueflapoudesl = bglueflapoudesl + + if btsc != "nobt": + desclock = thck + if btsc == "fwnf": + desclock = 0 + if bfal: + cut_line_path = [ + [ 'M', [boxW, boxH]], + [ 'l', [0, glueflapinoff]], + [ 'l', [glueflapin45, glueflapin45]], + [ 'l', [glueflapindesl, ((boxD + boxL) / 2 - glueflapinoff - glueflapin45) -thck2]], + [ 'M', [boxW + boxD, boxH]], + [ 'l', [desclock * -1, 0]], + [ 'l', [0, glueflapouoff]], + [ 'l', [glueflapou45 * -1, glueflapou45]], + [ 'l', [glueflapoudesl * -1, ((boxD + boxL) / 2 - glueflapouoff - glueflapou45) -thck2]], + [ 'l', [(boxD - glueflapindesl - glueflapoudesl - glueflapin45 - glueflapou45 - desclock) * -1, 0]], + [ 'M', [boxW + boxW + boxD + boxD - thck, boxH]], + [ 'l', [0, glueflapinoff]], + [ 'l', [glueflapin45 * -1, glueflapin45]], + [ 'l', [glueflapindesl * -1, ((boxD + boxL) / 2 - glueflapinoff - glueflapin45) - thck2]], + [ 'M', [boxW + boxD + boxW, boxH]], + [ 'l', [desclock, 0]], + [ 'l', [0, glueflapouoff]], + [ 'l', [glueflapou45, glueflapou45]], + [ 'l', [glueflapoudesl, ((boxD + boxL) / 2 - glueflapouoff - glueflapou45) -thck2]], + [ 'l', [(boxD - glueflapindesl - glueflapoudesl - glueflapin45 - glueflapou45 - desclock -thck ), 0]] + ] + engrave_line_path = [ + [ 'M', [boxW, boxH]], + [ 'l', [boxD - desclock, 0]], + [ 'M', [boxW + boxD + boxW + desclock, boxH]], + [ 'l', [boxD - thck - desclock, 0]] + ] + + if not bfal: + cut_line_path = [ + [ 'M', [boxW + boxD, boxH]], + + [ 'l', [0, glueflapinoff]], + [ 'l', [glueflapin45 * -1, glueflapin45]], + [ 'l', [glueflapindesl * -1, ((boxD + boxL) / 2 - glueflapinoff - glueflapin45) - thck2]], + [ 'M', [boxW, boxH]], + [ 'l', [desclock, 0]], + [ 'l', [0, glueflapouoff]], + [ 'l', [glueflapou45, glueflapou45]], + [ 'l', [glueflapoudesl, ((boxD + boxL) / 2 - glueflapouoff - glueflapou45) - thck2]], + [ 'l', [(boxD - glueflapindesl - glueflapoudesl - glueflapin45 - glueflapou45 - desclock), 0]], + [ 'M', [boxW + boxD + boxW, boxH]], + [ 'l', [0, glueflapinoff]], + [ 'l', [glueflapin45, glueflapin45]], + [ 'l', [glueflapindesl, ((boxD + boxL) / 2 - glueflapinoff - glueflapin45) - thck2]], + [ 'M', [boxW + boxD + boxW + boxD - thck, boxH]], + [ 'l', [desclock * -1, 0]], + [ 'l', [0, glueflapouoff]], + [ 'l', [glueflapou45 * -1, glueflapou45]], + [ 'l', [glueflapoudesl * -1, ((boxD + boxL) / 2 - glueflapouoff - glueflapou45) - thck2]], + [ 'l', [(boxD - glueflapindesl - glueflapoudesl - glueflapin45 - glueflapou45 - desclock -thck) * -1, 0]] + ] + engrave_line_path = [ + [ 'M', [boxW + desclock, boxH]], + [ 'l', [boxD - desclock, 0]], + [ 'M', [boxW + boxD + boxW, boxH]], + [ 'l', [boxD -thck - desclock, 0]] + ] + + line_atts = { 'style':cut_line_style, 'id':box_id+'-botglueflap_cut', 'd':str(Path(cut_line_path)) } + etree.SubElement(g, inkex.addNS('path','svg'), line_atts ) + line_atts = { 'style':engrave_line_style, 'id':box_id+'-botglueflap_engrave', 'd':str(Path(engrave_line_path)) } + etree.SubElement(g, inkex.addNS('path','svg'), line_atts ) + + +if __name__ == '__main__': + inkpacking().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/inkscape.extension.rng b/extensions/fablabchemnitz/inkscape.extension.rng new file mode 100644 index 00000000..a4632c5f --- /dev/null +++ b/extensions/fablabchemnitz/inkscape.extension.rng @@ -0,0 +1,550 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + file + executable + extension + + + + + + + + + + + + + + + + + + + + python + perl + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + path + extensions + inx + absolute + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + all + g + path + rect + text + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + header + url + + + + + + + default + preserve + + + + + + + + + + + + + + + + + + + + + + + + + + + + expand + + + + + + + + + + + + + + + + + + + + + + + + + + int + + + + + + + + + + + + + + full + + + + + + + + + + float + + + + + + + + + + + + + + + + + + + full + + + + + + + bool + + + + + + color + + + + + colorbutton + + + + + + + + + + + + string + + + + + + + + + + multiline + + + + + + + + + + + path + + + + + file + files + folder + folders + file_new + folder_new + + + + + + + + + + + + + optiongroup + + + + + combo + radio + + + + + + + + + + + + + + + + + + + + + + + + notebook + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + 1 + + + + + + + yes + no + + + + + diff --git a/extensions/fablabchemnitz/inkstitch/bin/Include/pyconfig.h b/extensions/fablabchemnitz/inkstitch/bin/Include/pyconfig.h new file mode 100644 index 00000000..5fa63987 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/Include/pyconfig.h @@ -0,0 +1,770 @@ +#ifndef Py_CONFIG_H +#define Py_CONFIG_H + +/* pyconfig.h. NOT Generated automatically by configure. + +This is a manually maintained version used for the Watcom, +Borland and Microsoft Visual C++ compilers. It is a +standard part of the Python distribution. + +WINDOWS DEFINES: +The code specific to Windows should be wrapped around one of +the following #defines + +MS_WIN64 - Code specific to the MS Win64 API +MS_WIN32 - Code specific to the MS Win32 (and Win64) API (obsolete, this covers all supported APIs) +MS_WINDOWS - Code specific to Windows, but all versions. +MS_WINCE - Code specific to Windows CE +Py_ENABLE_SHARED - Code if the Python core is built as a DLL. + +Also note that neither "_M_IX86" or "_MSC_VER" should be used for +any purpose other than "Windows Intel x86 specific" and "Microsoft +compiler specific". Therefore, these should be very rare. + + +NOTE: The following symbols are deprecated: +NT, USE_DL_EXPORT, USE_DL_IMPORT, DL_EXPORT, DL_IMPORT +MS_CORE_DLL. + +WIN32 is still required for the locale module. + +*/ + +#ifdef _WIN32_WCE +#define MS_WINCE +#endif + +/* Deprecated USE_DL_EXPORT macro - please use Py_BUILD_CORE */ +#ifdef USE_DL_EXPORT +# define Py_BUILD_CORE +#endif /* USE_DL_EXPORT */ + +/* Visual Studio 2005 introduces deprecation warnings for + "insecure" and POSIX functions. The insecure functions should + be replaced by *_s versions (according to Microsoft); the + POSIX functions by _* versions (which, according to Microsoft, + would be ISO C conforming). Neither renaming is feasible, so + we just silence the warnings. */ + +#ifndef _CRT_SECURE_NO_DEPRECATE +#define _CRT_SECURE_NO_DEPRECATE 1 +#endif +#ifndef _CRT_NONSTDC_NO_DEPRECATE +#define _CRT_NONSTDC_NO_DEPRECATE 1 +#endif + +/* Windows CE does not have these */ +#ifndef MS_WINCE +#define HAVE_IO_H +#define HAVE_SYS_UTIME_H +#define HAVE_TEMPNAM +#define HAVE_TMPFILE +#define HAVE_TMPNAM +#define HAVE_CLOCK +#define HAVE_STRERROR +#endif + +#ifdef HAVE_IO_H +#include +#endif + +#define HAVE_HYPOT +#define HAVE_STRFTIME +#define DONT_HAVE_SIG_ALARM +#define DONT_HAVE_SIG_PAUSE +#define LONG_BIT 32 +#define WORD_BIT 32 +#define PREFIX "" +#define EXEC_PREFIX "" + +#define MS_WIN32 /* only support win32 and greater. */ +#define MS_WINDOWS +#ifndef PYTHONPATH +# define PYTHONPATH ".\\DLLs;.\\lib;.\\lib\\plat-win;.\\lib\\lib-tk" +#endif +#define NT_THREADS +#define WITH_THREAD +#ifndef NETSCAPE_PI +#define USE_SOCKET +#endif + +/* CE6 doesn't have strdup() but _strdup(). Assume the same for earlier versions. */ +#if defined(MS_WINCE) +# include +# define strdup _strdup +#endif + +#ifdef MS_WINCE +/* Windows CE does not support environment variables */ +#define getenv(v) (NULL) +#define environ (NULL) +#endif + +/* Compiler specific defines */ + +/* ------------------------------------------------------------------------*/ +/* Microsoft C defines _MSC_VER */ +#ifdef _MSC_VER + +/* We want COMPILER to expand to a string containing _MSC_VER's *value*. + * This is horridly tricky, because the stringization operator only works + * on macro arguments, and doesn't evaluate macros passed *as* arguments. + * Attempts simpler than the following appear doomed to produce "_MSC_VER" + * literally in the string. + */ +#define _Py_PASTE_VERSION(SUFFIX) \ + ("[MSC v." _Py_STRINGIZE(_MSC_VER) " " SUFFIX "]") +/* e.g., this produces, after compile-time string catenation, + * ("[MSC v.1200 32 bit (Intel)]") + * + * _Py_STRINGIZE(_MSC_VER) expands to + * _Py_STRINGIZE1((_MSC_VER)) expands to + * _Py_STRINGIZE2(_MSC_VER) but as this call is the result of token-pasting + * it's scanned again for macros and so further expands to (under MSVC 6) + * _Py_STRINGIZE2(1200) which then expands to + * "1200" + */ +#define _Py_STRINGIZE(X) _Py_STRINGIZE1((X)) +#define _Py_STRINGIZE1(X) _Py_STRINGIZE2 ## X +#define _Py_STRINGIZE2(X) #X + +/* MSVC defines _WINxx to differentiate the windows platform types + + Note that for compatibility reasons _WIN32 is defined on Win32 + *and* on Win64. For the same reasons, in Python, MS_WIN32 is + defined on Win32 *and* Win64. Win32 only code must therefore be + guarded as follows: + #if defined(MS_WIN32) && !defined(MS_WIN64) + Some modules are disabled on Itanium processors, therefore we + have MS_WINI64 set for those targets, otherwise MS_WINX64 +*/ +#ifdef _WIN64 +#define MS_WIN64 +#endif + +/* set the COMPILER */ +#ifdef MS_WIN64 +#if defined(_M_IA64) +#define COMPILER _Py_PASTE_VERSION("64 bit (Itanium)") +#define MS_WINI64 +#elif defined(_M_X64) || defined(_M_AMD64) +#ifdef __INTEL_COMPILER +#define COMPILER ("[ICC v." _Py_STRINGIZE(__INTEL_COMPILER) " 64 bit (amd64) with MSC v." _Py_STRINGIZE(_MSC_VER) " CRT]") +#else +#define COMPILER _Py_PASTE_VERSION("64 bit (AMD64)") +#endif /* __INTEL_COMPILER */ +#define MS_WINX64 +#else +#define COMPILER _Py_PASTE_VERSION("64 bit (Unknown)") +#endif +#endif /* MS_WIN64 */ + +/* set the version macros for the windows headers */ +#ifdef MS_WINX64 +/* 64 bit only runs on XP or greater */ +#define Py_WINVER _WIN32_WINNT_WINXP +#define Py_NTDDI NTDDI_WINXP +#else +/* Python 2.6+ requires Windows 2000 or greater */ +#ifdef _WIN32_WINNT_WIN2K +#define Py_WINVER _WIN32_WINNT_WIN2K +#else +#define Py_WINVER 0x0500 +#endif +#define Py_NTDDI NTDDI_WIN2KSP4 +#endif + +/* We only set these values when building Python - we don't want to force + these values on extensions, as that will affect the prototypes and + structures exposed in the Windows headers. Even when building Python, we + allow a single source file to override this - they may need access to + structures etc so it can optionally use new Windows features if it + determines at runtime they are available. +*/ +#if defined(Py_BUILD_CORE) || defined(Py_BUILD_CORE_MODULE) +#ifndef NTDDI_VERSION +#define NTDDI_VERSION Py_NTDDI +#endif +#ifndef WINVER +#define WINVER Py_WINVER +#endif +#ifndef _WIN32_WINNT +#define _WIN32_WINNT Py_WINVER +#endif +#endif + +/* _W64 is not defined for VC6 or eVC4 */ +#ifndef _W64 +#define _W64 +#endif + +/* Define like size_t, omitting the "unsigned" */ +#ifdef MS_WIN64 +typedef __int64 ssize_t; +#else +typedef _W64 int ssize_t; +#endif +#define HAVE_SSIZE_T 1 + +#if defined(MS_WIN32) && !defined(MS_WIN64) +#ifdef _M_IX86 +#ifdef __INTEL_COMPILER +#define COMPILER ("[ICC v." _Py_STRINGIZE(__INTEL_COMPILER) " 32 bit (Intel) with MSC v." _Py_STRINGIZE(_MSC_VER) " CRT]") +#else +#define COMPILER _Py_PASTE_VERSION("32 bit (Intel)") +#endif /* __INTEL_COMPILER */ +#else +#define COMPILER _Py_PASTE_VERSION("32 bit (Unknown)") +#endif +#endif /* MS_WIN32 && !MS_WIN64 */ + +typedef int pid_t; + +#include +#define Py_IS_NAN _isnan +#define Py_IS_INFINITY(X) (!_finite(X) && !_isnan(X)) +#define Py_IS_FINITE(X) _finite(X) +#define copysign _copysign + +#endif /* _MSC_VER */ + +/* define some ANSI types that are not defined in earlier Win headers */ +#if defined(_MSC_VER) && _MSC_VER >= 1200 +/* This file only exists in VC 6.0 or higher */ +#include +#endif + +/* ------------------------------------------------------------------------*/ +/* The Borland compiler defines __BORLANDC__ */ +/* XXX These defines are likely incomplete, but should be easy to fix. */ +#ifdef __BORLANDC__ +#define COMPILER "[Borland]" + +#ifdef _WIN32 +/* tested with BCC 5.5 (__BORLANDC__ >= 0x0550) + */ + +typedef int pid_t; +/* BCC55 seems to understand __declspec(dllimport), it is used in its + own header files (winnt.h, ...) - so we can do nothing and get the default*/ + +#undef HAVE_SYS_UTIME_H +#define HAVE_UTIME_H +#define HAVE_DIRENT_H + +/* rename a few functions for the Borland compiler */ +#include +#define _chsize chsize +#define _setmode setmode + +#else /* !_WIN32 */ +#error "Only Win32 and later are supported" +#endif /* !_WIN32 */ + +#endif /* BORLANDC */ + +/* ------------------------------------------------------------------------*/ +/* egcs/gnu-win32 defines __GNUC__ and _WIN32 */ +#if defined(__GNUC__) && defined(_WIN32) +/* XXX These defines are likely incomplete, but should be easy to fix. + They should be complete enough to build extension modules. */ +/* Suggested by Rene Liebscher to avoid a GCC 2.91.* + bug that requires structure imports. More recent versions of the + compiler don't exhibit this bug. +*/ +#if (__GNUC__==2) && (__GNUC_MINOR__<=91) +#warning "Please use an up-to-date version of gcc! (>2.91 recommended)" +#endif + +#define COMPILER "[gcc]" +#define PY_LONG_LONG long long +#define PY_LLONG_MIN LLONG_MIN +#define PY_LLONG_MAX LLONG_MAX +#define PY_ULLONG_MAX ULLONG_MAX +#endif /* GNUC */ + +/* ------------------------------------------------------------------------*/ +/* lcc-win32 defines __LCC__ */ +#if defined(__LCC__) +/* XXX These defines are likely incomplete, but should be easy to fix. + They should be complete enough to build extension modules. */ + +#define COMPILER "[lcc-win32]" +typedef int pid_t; +/* __declspec() is supported here too - do nothing to get the defaults */ + +#endif /* LCC */ + +/* ------------------------------------------------------------------------*/ +/* End of compilers - finish up */ + +#ifndef NO_STDIO_H +# include +#endif + +/* 64 bit ints are usually spelt __int64 unless compiler has overridden */ +#define HAVE_LONG_LONG 1 +#ifndef PY_LONG_LONG +# define PY_LONG_LONG __int64 +# define PY_LLONG_MAX _I64_MAX +# define PY_LLONG_MIN _I64_MIN +# define PY_ULLONG_MAX _UI64_MAX +#endif + +/* For Windows the Python core is in a DLL by default. Test +Py_NO_ENABLE_SHARED to find out. Also support MS_NO_COREDLL for b/w compat */ +#if !defined(MS_NO_COREDLL) && !defined(Py_NO_ENABLE_SHARED) +# define Py_ENABLE_SHARED 1 /* standard symbol for shared library */ +# define MS_COREDLL /* deprecated old symbol */ +#endif /* !MS_NO_COREDLL && ... */ + +/* All windows compilers that use this header support __declspec */ +#define HAVE_DECLSPEC_DLL + +/* For an MSVC DLL, we can nominate the .lib files used by extensions */ +#ifdef MS_COREDLL +# ifndef Py_BUILD_CORE /* not building the core - must be an ext */ +# if defined(_MSC_VER) + /* So MSVC users need not specify the .lib file in + their Makefile (other compilers are generally + taken care of by distutils.) */ +# ifdef _DEBUG +# pragma comment(lib,"python27_d.lib") +# else +# pragma comment(lib,"python27.lib") +# endif /* _DEBUG */ +# endif /* _MSC_VER */ +# endif /* Py_BUILD_CORE */ +#endif /* MS_COREDLL */ + +#if defined(MS_WIN64) +/* maintain "win32" sys.platform for backward compatibility of Python code, + the Win64 API should be close enough to the Win32 API to make this + preferable */ +# define PLATFORM "win32" +# define SIZEOF_VOID_P 8 +# define SIZEOF_TIME_T 8 +# define SIZEOF_OFF_T 4 +# define SIZEOF_FPOS_T 8 +# define SIZEOF_HKEY 8 +# define SIZEOF_SIZE_T 8 +/* configure.ac defines HAVE_LARGEFILE_SUPPORT iff HAVE_LONG_LONG, + sizeof(off_t) > sizeof(long), and sizeof(PY_LONG_LONG) >= sizeof(off_t). + On Win64 the second condition is not true, but if fpos_t replaces off_t + then this is true. The uses of HAVE_LARGEFILE_SUPPORT imply that Win64 + should define this. */ +# define HAVE_LARGEFILE_SUPPORT +#elif defined(MS_WIN32) +# define PLATFORM "win32" +# define HAVE_LARGEFILE_SUPPORT +# define SIZEOF_VOID_P 4 +# define SIZEOF_OFF_T 4 +# define SIZEOF_FPOS_T 8 +# define SIZEOF_HKEY 4 +# define SIZEOF_SIZE_T 4 + /* MS VS2005 changes time_t to a 64-bit type on all platforms */ +# if defined(_MSC_VER) && _MSC_VER >= 1400 +# define SIZEOF_TIME_T 8 +# else +# define SIZEOF_TIME_T 4 +# endif +#endif + +#ifdef _DEBUG +# define Py_DEBUG +#endif + + +#ifdef MS_WIN32 + +#define SIZEOF_SHORT 2 +#define SIZEOF_INT 4 +#define SIZEOF_LONG 4 +#define SIZEOF_LONG_LONG 8 +#define SIZEOF_DOUBLE 8 +#define SIZEOF_FLOAT 4 + +/* VC 7.1 has them and VC 6.0 does not. VC 6.0 has a version number of 1200. + Microsoft eMbedded Visual C++ 4.0 has a version number of 1201 and doesn't + define these. + If some compiler does not provide them, modify the #if appropriately. */ +#if defined(_MSC_VER) +#if _MSC_VER > 1300 +#define HAVE_UINTPTR_T 1 +#define HAVE_INTPTR_T 1 +#else +/* VC6, VS 2002 and eVC4 don't support the C99 LL suffix for 64-bit integer literals */ +#define Py_LL(x) x##I64 +#endif /* _MSC_VER > 1200 */ +#endif /* _MSC_VER */ + +#endif + +/* define signed and unsigned exact-width 32-bit and 64-bit types, used in the + implementation of Python long integers. */ +#ifndef PY_UINT32_T +#if SIZEOF_INT == 4 +#define HAVE_UINT32_T 1 +#define PY_UINT32_T unsigned int +#elif SIZEOF_LONG == 4 +#define HAVE_UINT32_T 1 +#define PY_UINT32_T unsigned long +#endif +#endif + +#ifndef PY_UINT64_T +#if SIZEOF_LONG_LONG == 8 +#define HAVE_UINT64_T 1 +#define PY_UINT64_T unsigned PY_LONG_LONG +#endif +#endif + +#ifndef PY_INT32_T +#if SIZEOF_INT == 4 +#define HAVE_INT32_T 1 +#define PY_INT32_T int +#elif SIZEOF_LONG == 4 +#define HAVE_INT32_T 1 +#define PY_INT32_T long +#endif +#endif + +#ifndef PY_INT64_T +#if SIZEOF_LONG_LONG == 8 +#define HAVE_INT64_T 1 +#define PY_INT64_T PY_LONG_LONG +#endif +#endif + +/* Fairly standard from here! */ + +/* Define to 1 if you have the `copysign' function. */ +#define HAVE_COPYSIGN 1 + +/* Define to 1 if you have the `round' function. */ +#if _MSC_VER >= 1800 +#define HAVE_ROUND 1 +#endif + +/* Define to 1 if you have the `isinf' macro. */ +#define HAVE_DECL_ISINF 1 + +/* Define to 1 if you have the `isnan' function. */ +#define HAVE_DECL_ISNAN 1 + +/* Define if on AIX 3. + System headers sometimes define this. + We just want to avoid a redefinition error message. */ +#ifndef _ALL_SOURCE +/* #undef _ALL_SOURCE */ +#endif + +/* Define to empty if the keyword does not work. */ +/* #define const */ + +/* Define to 1 if you have the header file. */ +#ifndef MS_WINCE +#define HAVE_CONIO_H 1 +#endif + +/* Define to 1 if you have the header file. */ +#ifndef MS_WINCE +#define HAVE_DIRECT_H 1 +#endif + +/* Define if you have dirent.h. */ +/* #define DIRENT 1 */ + +/* Define to the type of elements in the array set by `getgroups'. + Usually this is either `int' or `gid_t'. */ +/* #undef GETGROUPS_T */ + +/* Define to `int' if doesn't define. */ +/* #undef gid_t */ + +/* Define if your struct tm has tm_zone. */ +/* #undef HAVE_TM_ZONE */ + +/* Define if you don't have tm_zone but do have the external array + tzname. */ +#define HAVE_TZNAME + +/* Define to `int' if doesn't define. */ +/* #undef mode_t */ + +/* Define if you don't have dirent.h, but have ndir.h. */ +/* #undef NDIR */ + +/* Define to `long' if doesn't define. */ +/* #undef off_t */ + +/* Define to `int' if doesn't define. */ +/* #undef pid_t */ + +/* Define if the system does not provide POSIX.1 features except + with this defined. */ +/* #undef _POSIX_1_SOURCE */ + +/* Define if you need to in order for stat and other things to work. */ +/* #undef _POSIX_SOURCE */ + +/* Define as the return type of signal handlers (int or void). */ +#define RETSIGTYPE void + +/* Define to `unsigned' if doesn't define. */ +/* #undef size_t */ + +/* Define if you have the ANSI C header files. */ +#define STDC_HEADERS 1 + +/* Define if you don't have dirent.h, but have sys/dir.h. */ +/* #undef SYSDIR */ + +/* Define if you don't have dirent.h, but have sys/ndir.h. */ +/* #undef SYSNDIR */ + +/* Define if you can safely include both and . */ +/* #undef TIME_WITH_SYS_TIME */ + +/* Define if your declares struct tm. */ +/* #define TM_IN_SYS_TIME 1 */ + +/* Define to `int' if doesn't define. */ +/* #undef uid_t */ + +/* Define if the closedir function returns void instead of int. */ +/* #undef VOID_CLOSEDIR */ + +/* Define if getpgrp() must be called as getpgrp(0) + and (consequently) setpgrp() as setpgrp(0, 0). */ +/* #undef GETPGRP_HAVE_ARGS */ + +/* Define this if your time.h defines altzone */ +/* #define HAVE_ALTZONE */ + +/* Define if you have the putenv function. */ +#ifndef MS_WINCE +#define HAVE_PUTENV +#endif + +/* Define if your compiler supports function prototypes */ +#define HAVE_PROTOTYPES + +/* Define if you can safely include both and + (which you can't on SCO ODT 3.0). */ +/* #undef SYS_SELECT_WITH_SYS_TIME */ + +/* Define if you want documentation strings in extension modules */ +#define WITH_DOC_STRINGS 1 + +/* Define if you want to compile in rudimentary thread support */ +/* #undef WITH_THREAD */ + +/* Define if you want to use the GNU readline library */ +/* #define WITH_READLINE 1 */ + +/* Define if you want to have a Unicode type. */ +#define Py_USING_UNICODE + +/* Define as the size of the unicode type. */ +/* This is enough for unicodeobject.h to do the "right thing" on Windows. */ +#define Py_UNICODE_SIZE 2 + +/* Use Python's own small-block memory-allocator. */ +#define WITH_PYMALLOC 1 + +/* Define if you have clock. */ +/* #define HAVE_CLOCK */ + +/* Define when any dynamic module loading is enabled */ +#define HAVE_DYNAMIC_LOADING + +/* Define if you have ftime. */ +#ifndef MS_WINCE +#define HAVE_FTIME +#endif + +/* Define if you have getpeername. */ +#define HAVE_GETPEERNAME + +/* Define if you have getpgrp. */ +/* #undef HAVE_GETPGRP */ + +/* Define if you have getpid. */ +#ifndef MS_WINCE +#define HAVE_GETPID +#endif + +/* Define if you have gettimeofday. */ +/* #undef HAVE_GETTIMEOFDAY */ + +/* Define if you have getwd. */ +/* #undef HAVE_GETWD */ + +/* Define if you have lstat. */ +/* #undef HAVE_LSTAT */ + +/* Define if you have the mktime function. */ +#define HAVE_MKTIME + +/* Define if you have nice. */ +/* #undef HAVE_NICE */ + +/* Define if you have readlink. */ +/* #undef HAVE_READLINK */ + +/* Define if you have select. */ +/* #undef HAVE_SELECT */ + +/* Define if you have setpgid. */ +/* #undef HAVE_SETPGID */ + +/* Define if you have setpgrp. */ +/* #undef HAVE_SETPGRP */ + +/* Define if you have setsid. */ +/* #undef HAVE_SETSID */ + +/* Define if you have setvbuf. */ +#define HAVE_SETVBUF + +/* Define if you have siginterrupt. */ +/* #undef HAVE_SIGINTERRUPT */ + +/* Define if you have symlink. */ +/* #undef HAVE_SYMLINK */ + +/* Define if you have tcgetpgrp. */ +/* #undef HAVE_TCGETPGRP */ + +/* Define if you have tcsetpgrp. */ +/* #undef HAVE_TCSETPGRP */ + +/* Define if you have times. */ +/* #undef HAVE_TIMES */ + +/* Define if you have uname. */ +/* #undef HAVE_UNAME */ + +/* Define if you have waitpid. */ +/* #undef HAVE_WAITPID */ + +/* Define to 1 if you have the `wcscoll' function. */ +#ifndef MS_WINCE +#define HAVE_WCSCOLL 1 +#endif + +/* Define if the zlib library has inflateCopy */ +#define HAVE_ZLIB_COPY 1 + +/* Define if you have the header file. */ +/* #undef HAVE_DLFCN_H */ + +/* Define to 1 if you have the header file. */ +#ifndef MS_WINCE +#define HAVE_ERRNO_H 1 +#endif + +/* Define if you have the header file. */ +#ifndef MS_WINCE +#define HAVE_FCNTL_H 1 +#endif + +/* Define to 1 if you have the header file. */ +#ifndef MS_WINCE +#define HAVE_PROCESS_H 1 +#endif + +/* Define to 1 if you have the header file. */ +#ifndef MS_WINCE +#define HAVE_SIGNAL_H 1 +#endif + +/* Define if you have the prototypes. */ +#define HAVE_STDARG_PROTOTYPES + +/* Define if you have the header file. */ +#define HAVE_STDDEF_H 1 + +/* Define if you have the header file. */ +/* #undef HAVE_SYS_AUDIOIO_H */ + +/* Define if you have the header file. */ +/* #define HAVE_SYS_PARAM_H 1 */ + +/* Define if you have the header file. */ +/* #define HAVE_SYS_SELECT_H 1 */ + +/* Define to 1 if you have the header file. */ +#ifndef MS_WINCE +#define HAVE_SYS_STAT_H 1 +#endif + +/* Define if you have the header file. */ +/* #define HAVE_SYS_TIME_H 1 */ + +/* Define if you have the header file. */ +/* #define HAVE_SYS_TIMES_H 1 */ + +/* Define to 1 if you have the header file. */ +#ifndef MS_WINCE +#define HAVE_SYS_TYPES_H 1 +#endif + +/* Define if you have the header file. */ +/* #define HAVE_SYS_UN_H 1 */ + +/* Define if you have the header file. */ +/* #define HAVE_SYS_UTIME_H 1 */ + +/* Define if you have the header file. */ +/* #define HAVE_SYS_UTSNAME_H 1 */ + +/* Define if you have the header file. */ +/* #undef HAVE_THREAD_H */ + +/* Define if you have the header file. */ +/* #define HAVE_UNISTD_H 1 */ + +/* Define if you have the header file. */ +/* #define HAVE_UTIME_H 1 */ + +/* Define if the compiler provides a wchar.h header file. */ +#define HAVE_WCHAR_H 1 + +/* Define if you have the dl library (-ldl). */ +/* #undef HAVE_LIBDL */ + +/* Define if you have the mpc library (-lmpc). */ +/* #undef HAVE_LIBMPC */ + +/* Define if you have the nsl library (-lnsl). */ +#define HAVE_LIBNSL 1 + +/* Define if you have the seq library (-lseq). */ +/* #undef HAVE_LIBSEQ */ + +/* Define if you have the socket library (-lsocket). */ +#define HAVE_LIBSOCKET 1 + +/* Define if you have the sun library (-lsun). */ +/* #undef HAVE_LIBSUN */ + +/* Define if you have the termcap library (-ltermcap). */ +/* #undef HAVE_LIBTERMCAP */ + +/* Define if you have the termlib library (-ltermlib). */ +/* #undef HAVE_LIBTERMLIB */ + +/* Define if you have the thread library (-lthread). */ +/* #undef HAVE_LIBTHREAD */ + +/* WinSock does not use a bitmask in select, and uses + socket handles greater than FD_SETSIZE */ +#define Py_SOCKET_FD_CAN_BE_GE_FD_SETSIZE + +/* Define if C doubles are 64-bit IEEE 754 binary format, stored with the + least significant byte first */ +#define DOUBLE_IS_LITTLE_ENDIAN_IEEE754 1 + +#endif /* !Py_CONFIG_H */ diff --git a/extensions/fablabchemnitz/inkstitch/bin/Microsoft.VC90.CRT.manifest b/extensions/fablabchemnitz/inkstitch/bin/Microsoft.VC90.CRT.manifest new file mode 100644 index 00000000..d334f0c0 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/Microsoft.VC90.CRT.manifest @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/inkstitch/bin/Microsoft.VC90.MFC.manifest b/extensions/fablabchemnitz/inkstitch/bin/Microsoft.VC90.MFC.manifest new file mode 100644 index 00000000..1d839332 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/Microsoft.VC90.MFC.manifest @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/inkstitch/bin/_bsddb.pyd b/extensions/fablabchemnitz/inkstitch/bin/_bsddb.pyd new file mode 100644 index 00000000..a13e13f4 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/_bsddb.pyd differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/_ctypes.pyd b/extensions/fablabchemnitz/inkstitch/bin/_ctypes.pyd new file mode 100644 index 00000000..db27f2ca Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/_ctypes.pyd differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/_elementtree.pyd b/extensions/fablabchemnitz/inkstitch/bin/_elementtree.pyd new file mode 100644 index 00000000..cd3f5d1f Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/_elementtree.pyd differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/_hashlib.pyd b/extensions/fablabchemnitz/inkstitch/bin/_hashlib.pyd new file mode 100644 index 00000000..8d2fc8e5 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/_hashlib.pyd differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/_multiprocessing.pyd b/extensions/fablabchemnitz/inkstitch/bin/_multiprocessing.pyd new file mode 100644 index 00000000..e30b7004 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/_multiprocessing.pyd differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/_socket.pyd b/extensions/fablabchemnitz/inkstitch/bin/_socket.pyd new file mode 100644 index 00000000..f9af2f68 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/_socket.pyd differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/_ssl.pyd b/extensions/fablabchemnitz/inkstitch/bin/_ssl.pyd new file mode 100644 index 00000000..68064f5d Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/_ssl.pyd differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/_testcapi.pyd b/extensions/fablabchemnitz/inkstitch/bin/_testcapi.pyd new file mode 100644 index 00000000..adbaabae Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/_testcapi.pyd differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/_tkinter.pyd b/extensions/fablabchemnitz/inkstitch/bin/_tkinter.pyd new file mode 100644 index 00000000..1486e639 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/_tkinter.pyd differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/_win32sysloader.pyd b/extensions/fablabchemnitz/inkstitch/bin/_win32sysloader.pyd new file mode 100644 index 00000000..75cd3aff Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/_win32sysloader.pyd differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/bz2.pyd b/extensions/fablabchemnitz/inkstitch/bin/bz2.pyd new file mode 100644 index 00000000..3c6d8eb3 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/bz2.pyd differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/certifi/cacert.pem b/extensions/fablabchemnitz/inkstitch/bin/certifi/cacert.pem new file mode 100644 index 00000000..ece147c9 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/certifi/cacert.pem @@ -0,0 +1,4641 @@ + +# Issuer: CN=GlobalSign Root CA O=GlobalSign nv-sa OU=Root CA +# Subject: CN=GlobalSign Root CA O=GlobalSign nv-sa OU=Root CA +# Label: "GlobalSign Root CA" +# Serial: 4835703278459707669005204 +# MD5 Fingerprint: 3e:45:52:15:09:51:92:e1:b7:5d:37:9f:b1:87:29:8a +# SHA1 Fingerprint: b1:bc:96:8b:d4:f4:9d:62:2a:a8:9a:81:f2:15:01:52:a4:1d:82:9c +# SHA256 Fingerprint: eb:d4:10:40:e4:bb:3e:c7:42:c9:e3:81:d3:1e:f2:a4:1a:48:b6:68:5c:96:e7:ce:f3:c1:df:6c:d4:33:1c:99 +-----BEGIN CERTIFICATE----- +MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG +A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv +b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw +MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i +YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT +aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ +jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp +xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp +1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG +snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ +U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8 +9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E +BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B +AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz +yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE +38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP +AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad +DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME +HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A== +-----END CERTIFICATE----- + +# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R2 +# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R2 +# Label: "GlobalSign Root CA - R2" +# Serial: 4835703278459682885658125 +# MD5 Fingerprint: 94:14:77:7e:3e:5e:fd:8f:30:bd:41:b0:cf:e7:d0:30 +# SHA1 Fingerprint: 75:e0:ab:b6:13:85:12:27:1c:04:f8:5f:dd:de:38:e4:b7:24:2e:fe +# SHA256 Fingerprint: ca:42:dd:41:74:5f:d0:b8:1e:b9:02:36:2c:f9:d8:bf:71:9d:a1:bd:1b:1e:fc:94:6f:5b:4c:99:f4:2c:1b:9e +-----BEGIN CERTIFICATE----- +MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4G +A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNp +Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1 +MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMjETMBEG +A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6ErPL +v4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8 +eoLrvozps6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklq +tTleiDTsvHgMCJiEbKjNS7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzd +C9XZzPnqJworc5HGnRusyMvo4KD0L5CLTfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pa +zq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6CygPCm48CAwEAAaOBnDCB +mTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUm+IH +V2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5n +bG9iYWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG +3lm0mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4Gs +J0/WwbgcQ3izDJr86iw8bmEbTUsp9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO +291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu01yiPqFbQfXf5WRDLenVOavS +ot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG79G+dwfCMNYxd +AfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7 +TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg== +-----END CERTIFICATE----- + +# Issuer: CN=VeriSign Class 3 Public Primary Certification Authority - G3 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 1999 VeriSign, Inc. - For authorized use only +# Subject: CN=VeriSign Class 3 Public Primary Certification Authority - G3 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 1999 VeriSign, Inc. - For authorized use only +# Label: "Verisign Class 3 Public Primary Certification Authority - G3" +# Serial: 206684696279472310254277870180966723415 +# MD5 Fingerprint: cd:68:b6:a7:c7:c4:ce:75:e0:1d:4f:57:44:61:92:09 +# SHA1 Fingerprint: 13:2d:0d:45:53:4b:69:97:cd:b2:d5:c3:39:e2:55:76:60:9b:5c:c6 +# SHA256 Fingerprint: eb:04:cf:5e:b1:f3:9a:fa:76:2f:2b:b1:20:f2:96:cb:a5:20:c1:b9:7d:b1:58:95:65:b8:1c:b9:a1:7b:72:44 +-----BEGIN CERTIFICATE----- +MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQsw +CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl +cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu +LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT +aWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp +dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD +VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT +aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ +bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu +IENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg +LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMu6nFL8eB8aHm8b +N3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1EUGO+i2t +KmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGu +kxUccLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBm +CC+Vk7+qRy+oRpfwEuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJ +Xwzw3sJ2zq/3avL6QaaiMxTJ5Xpj055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWu +imi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAERSWwauSCPc/L8my/uRan2Te +2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5fj267Cz3qWhMe +DGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC +/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565p +F4ErWjfJXir0xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGt +TxzhT5yvDwyd93gN2PQ1VoDat20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ== +-----END CERTIFICATE----- + +# Issuer: CN=Entrust.net Certification Authority (2048) O=Entrust.net OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited +# Subject: CN=Entrust.net Certification Authority (2048) O=Entrust.net OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited +# Label: "Entrust.net Premium 2048 Secure Server CA" +# Serial: 946069240 +# MD5 Fingerprint: ee:29:31:bc:32:7e:9a:e6:e8:b5:f7:51:b4:34:71:90 +# SHA1 Fingerprint: 50:30:06:09:1d:97:d4:f5:ae:39:f7:cb:e7:92:7d:7d:65:2d:34:31 +# SHA256 Fingerprint: 6d:c4:71:72:e0:1c:bc:b0:bf:62:58:0d:89:5f:e2:b8:ac:9a:d4:f8:73:80:1e:0c:10:b9:c8:37:d2:1e:b1:77 +-----BEGIN CERTIFICATE----- +MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML +RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp +bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5 +IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp +ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0yOTA3 +MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3 +LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp +YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG +A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq +K0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe +sYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX +MlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT +XTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/ +HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH +4QIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV +HQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJKoZIhvcNAQEFBQADggEBADub +j1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPyT/4xmf3IDExo +U8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf +zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5b +u/8j72gZyxKTJ1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+ +bYQLCIt+jerXmCHG8+c8eS9enNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/Er +fF6adulZkMV8gzURZVE= +-----END CERTIFICATE----- + +# Issuer: CN=Baltimore CyberTrust Root O=Baltimore OU=CyberTrust +# Subject: CN=Baltimore CyberTrust Root O=Baltimore OU=CyberTrust +# Label: "Baltimore CyberTrust Root" +# Serial: 33554617 +# MD5 Fingerprint: ac:b6:94:a5:9c:17:e0:d7:91:52:9b:b1:97:06:a6:e4 +# SHA1 Fingerprint: d4:de:20:d0:5e:66:fc:53:fe:1a:50:88:2c:78:db:28:52:ca:e4:74 +# SHA256 Fingerprint: 16:af:57:a9:f6:76:b0:ab:12:60:95:aa:5e:ba:de:f2:2a:b3:11:19:d6:44:ac:95:cd:4b:93:db:f3:f2:6a:eb +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ +RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD +VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX +DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y +ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy +VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr +mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr +IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK +mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu +XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy +dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye +jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1 +BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3 +DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92 +9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx +jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0 +Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz +ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS +R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp +-----END CERTIFICATE----- + +# Issuer: CN=AddTrust External CA Root O=AddTrust AB OU=AddTrust External TTP Network +# Subject: CN=AddTrust External CA Root O=AddTrust AB OU=AddTrust External TTP Network +# Label: "AddTrust External Root" +# Serial: 1 +# MD5 Fingerprint: 1d:35:54:04:85:78:b0:3f:42:42:4d:bf:20:73:0a:3f +# SHA1 Fingerprint: 02:fa:f3:e2:91:43:54:68:60:78:57:69:4d:f5:e4:5b:68:85:18:68 +# SHA256 Fingerprint: 68:7f:a4:51:38:22:78:ff:f0:c8:b1:1f:8d:43:d5:76:67:1c:6e:b2:bc:ea:b4:13:fb:83:d9:65:d0:6d:2f:f2 +-----BEGIN CERTIFICATE----- +MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU +MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs +IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290 +MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux +FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h +bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v +dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt +H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9 +uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX +mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX +a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN +E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0 +WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD +VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0 +Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU +cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx +IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN +AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH +YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5 +6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC +Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX +c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a +mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ= +-----END CERTIFICATE----- + +# Issuer: CN=Entrust Root Certification Authority O=Entrust, Inc. OU=www.entrust.net/CPS is incorporated by reference/(c) 2006 Entrust, Inc. +# Subject: CN=Entrust Root Certification Authority O=Entrust, Inc. OU=www.entrust.net/CPS is incorporated by reference/(c) 2006 Entrust, Inc. +# Label: "Entrust Root Certification Authority" +# Serial: 1164660820 +# MD5 Fingerprint: d6:a5:c3:ed:5d:dd:3e:00:c1:3d:87:92:1f:1d:3f:e4 +# SHA1 Fingerprint: b3:1e:b1:b7:40:e3:6c:84:02:da:dc:37:d4:4d:f5:d4:67:49:52:f9 +# SHA256 Fingerprint: 73:c1:76:43:4f:1b:c6:d5:ad:f4:5b:0e:76:e7:27:28:7c:8d:e5:76:16:c1:e6:e6:14:1a:2b:2c:bc:7d:8e:4c +-----BEGIN CERTIFICATE----- +MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMC +VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0 +Lm5ldC9DUFMgaXMgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMW +KGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsGA1UEAxMkRW50cnVzdCBSb290IENl +cnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0MloXDTI2MTEyNzIw +NTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMTkw +NwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSBy +ZWZlcmVuY2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNV +BAMTJEVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJ +KoZIhvcNAQEBBQADggEPADCCAQoCggEBALaVtkNC+sZtKm9I35RMOVcF7sN5EUFo +Nu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYszA9u3g3s+IIRe7bJWKKf4 +4LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOwwCj0Yzfv9 +KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGI +rb68j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi +94DkZfs0Nw4pgHBNrziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOB +sDCBrTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAi +gA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1MzQyWjAfBgNVHSMEGDAWgBRo +kORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DHhmak8fdLQ/uE +vW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA +A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9t +O1KzKtvn1ISMY/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6Zua +AGAT/3B+XxFNSRuzFVJ7yVTav52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP +9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTSW3iDVuycNsMm4hH2Z0kdkquM++v/ +eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0tHuu2guQOHXvgR1m +0vdXcDazv/wor3ElhVsT/h5/WrQ8 +-----END CERTIFICATE----- + +# Issuer: CN=GeoTrust Global CA O=GeoTrust Inc. +# Subject: CN=GeoTrust Global CA O=GeoTrust Inc. +# Label: "GeoTrust Global CA" +# Serial: 144470 +# MD5 Fingerprint: f7:75:ab:29:fb:51:4e:b7:77:5e:ff:05:3c:99:8e:f5 +# SHA1 Fingerprint: de:28:f4:a4:ff:e5:b9:2f:a3:c5:03:d1:a3:49:a7:f9:96:2a:82:12 +# SHA256 Fingerprint: ff:85:6a:2d:25:1d:cd:88:d3:66:56:f4:50:12:67:98:cf:ab:aa:de:40:79:9c:72:2d:e4:d2:b5:db:36:a7:3a +-----BEGIN CERTIFICATE----- +MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT +MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i +YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG +EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg +R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9 +9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq +fnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDv +iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU +1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+ +bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoW +MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA +ephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l +uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKIn +Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS +tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF +PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un +hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV +5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw== +-----END CERTIFICATE----- + +# Issuer: CN=GeoTrust Universal CA O=GeoTrust Inc. +# Subject: CN=GeoTrust Universal CA O=GeoTrust Inc. +# Label: "GeoTrust Universal CA" +# Serial: 1 +# MD5 Fingerprint: 92:65:58:8b:a2:1a:31:72:73:68:5c:b4:a5:7a:07:48 +# SHA1 Fingerprint: e6:21:f3:35:43:79:05:9a:4b:68:30:9d:8a:2f:74:22:15:87:ec:79 +# SHA256 Fingerprint: a0:45:9b:9f:63:b2:25:59:f5:fa:5d:4c:6d:b3:f9:f7:2f:f1:93:42:03:35:78:f0:73:bf:1d:1b:46:cb:b9:12 +-----BEGIN CERTIFICATE----- +MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEW +MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVy +c2FsIENBMB4XDTA0MDMwNDA1MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UE +BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xHjAcBgNVBAMTFUdlb1RydXN0 +IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKYV +VaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9tJPi8 +cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTT +QjOgNB0eRXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFh +F7em6fgemdtzbvQKoiFs7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2v +c7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d8Lsrlh/eezJS/R27tQahsiFepdaVaH/w +mZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7VqnJNk22CDtucvc+081xd +VHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3CgaRr0BHdCX +teGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZ +f9hBZ3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfRe +Bi9Fi1jUIxaS5BZuKGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+ +nhutxx9z3SxPGWX9f5NAEC7S8O08ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB +/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0XG0D08DYj3rWMB8GA1UdIwQY +MBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG +9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc +aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fX +IwjhmF7DWgh2qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzyn +ANXH/KttgCJwpQzgXQQpAvvLoJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0z +uzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsKxr2EoyNB3tZ3b4XUhRxQ4K5RirqN +Pnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxFKyDuSN/n3QmOGKja +QI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2DFKW +koRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9 +ER/frslKxfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQt +DF4JbAiXfKM9fJP/P6EUp8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/Sfuvm +bJxPgWp6ZKy7PtXny3YuxadIwVyQD8vIP/rmMuGNG2+k5o7Y+SlIis5z/iw= +-----END CERTIFICATE----- + +# Issuer: CN=GeoTrust Universal CA 2 O=GeoTrust Inc. +# Subject: CN=GeoTrust Universal CA 2 O=GeoTrust Inc. +# Label: "GeoTrust Universal CA 2" +# Serial: 1 +# MD5 Fingerprint: 34:fc:b8:d0:36:db:9e:14:b3:c2:f2:db:8f:e4:94:c7 +# SHA1 Fingerprint: 37:9a:19:7b:41:85:45:35:0c:a6:03:69:f3:3c:2e:af:47:4f:20:79 +# SHA256 Fingerprint: a0:23:4f:3b:c8:52:7c:a5:62:8e:ec:81:ad:5d:69:89:5d:a5:68:0d:c9:1d:1c:b8:47:7f:33:f8:78:b9:5b:0b +-----BEGIN CERTIFICATE----- +MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEW +MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVy +c2FsIENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYD +VQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1 +c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC +AQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0DE81 +WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUG +FF+3Qs17j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdq +XbboW0W63MOhBW9Wjo8QJqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxL +se4YuU6W3Nx2/zu+z18DwPw76L5GG//aQMJS9/7jOvdqdzXQ2o3rXhhqMcceujwb +KNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2WP0+GfPtDCapkzj4T8Fd +IgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP20gaXT73 +y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRt +hAAnZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgoc +QIgfksILAAX/8sgCSqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4 +Lt1ZrtmhN79UNdxzMk+MBB4zsslG8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAfBgNV +HSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8EBAMCAYYwDQYJ +KoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z +dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQ +L1EuxBRa3ugZ4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgr +Fg5fNuH8KrUwJM/gYwx7WBr+mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSo +ag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpqA1Ihn0CoZ1Dy81of398j9tx4TuaY +T1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpgY+RdM4kX2TGq2tbz +GDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiPpm8m +1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJV +OCiNUW7dFGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH +6aLcr34YEoP9VhdBLtUpgn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwX +QMAJKOSLakhT2+zNVVXxxvjpoixMptEmX36vWkzaH6byHCx+rgIW0lbQL1dTR+iS +-----END CERTIFICATE----- + +# Issuer: CN=AAA Certificate Services O=Comodo CA Limited +# Subject: CN=AAA Certificate Services O=Comodo CA Limited +# Label: "Comodo AAA Services root" +# Serial: 1 +# MD5 Fingerprint: 49:79:04:b0:eb:87:19:ac:47:b0:bc:11:51:9b:74:d0 +# SHA1 Fingerprint: d1:eb:23:a4:6d:17:d6:8f:d9:25:64:c2:f1:f1:60:17:64:d8:e3:49 +# SHA256 Fingerprint: d7:a7:a0:fb:5d:7e:27:31:d7:71:e9:48:4e:bc:de:f7:1d:5f:0c:3e:0a:29:48:78:2b:c8:3e:e0:ea:69:9e:f4 +-----BEGIN CERTIFICATE----- +MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEb +MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow +GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmlj +YXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVowezEL +MAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE +BwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNVBAMM +GEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQua +BtDFcCLNSS1UY8y2bmhGC1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe +3M/vg4aijJRPn2jymJBGhCfHdr/jzDUsi14HZGWCwEiwqJH5YZ92IFCokcdmtet4 +YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszWY19zjNoFmag4qMsXeDZR +rOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjHYpy+g8cm +ez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQU +oBEKIz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF +MAMBAf8wewYDVR0fBHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20v +QUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29t +b2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDANBgkqhkiG9w0BAQUF +AAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1Q +GE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz +Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2 +G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsi +l2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3 +smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg== +-----END CERTIFICATE----- + +# Issuer: CN=QuoVadis Root Certification Authority O=QuoVadis Limited OU=Root Certification Authority +# Subject: CN=QuoVadis Root Certification Authority O=QuoVadis Limited OU=Root Certification Authority +# Label: "QuoVadis Root CA" +# Serial: 985026699 +# MD5 Fingerprint: 27:de:36:fe:72:b7:00:03:00:9d:f4:f0:1e:6c:04:24 +# SHA1 Fingerprint: de:3f:40:bd:50:93:d3:9b:6c:60:f6:da:bc:07:62:01:00:89:76:c9 +# SHA256 Fingerprint: a4:5e:de:3b:bb:f0:9c:8a:e1:5c:72:ef:c0:72:68:d6:93:a2:1c:99:6f:d5:1e:67:ca:07:94:60:fd:6d:88:73 +-----BEGIN CERTIFICATE----- +MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJC +TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0 +aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0 +aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAzMTkxODMzMzNaFw0yMTAzMTcxODMz +MzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUw +IwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQDEyVR +dW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG +9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Yp +li4kVEAkOPcahdxYTMukJ0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2D +rOpm2RgbaIr1VxqYuvXtdj182d6UajtLF8HVj71lODqV0D1VNk7feVcxKh7YWWVJ +WCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeLYzcS19Dsw3sgQUSj7cug +F+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWenAScOospU +xbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCC +Ak4wPQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVv +dmFkaXNvZmZzaG9yZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREw +ggENMIIBCQYJKwYBBAG+WAABMIH7MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNl +IG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBh +c3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFy +ZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh +Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYI +KwYBBQUHAgEWFmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3T +KbkGGew5Oanwl4Rqy+/fMIGuBgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rq +y+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1p +dGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYD +VQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6tlCL +MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSk +fnIYj9lofFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf8 +7C9TqnN7Az10buYWnuulLsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1R +cHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2xgI4JVrmcGmD+XcHXetwReNDWXcG31a0y +mQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi5upZIof4l/UO/erMkqQW +xFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi5nrQNiOK +SnQ2+Q== +-----END CERTIFICATE----- + +# Issuer: CN=QuoVadis Root CA 2 O=QuoVadis Limited +# Subject: CN=QuoVadis Root CA 2 O=QuoVadis Limited +# Label: "QuoVadis Root CA 2" +# Serial: 1289 +# MD5 Fingerprint: 5e:39:7b:dd:f8:ba:ec:82:e9:ac:62:ba:0c:54:00:2b +# SHA1 Fingerprint: ca:3a:fb:cf:12:40:36:4b:44:b2:16:20:88:80:48:39:19:93:7c:f7 +# SHA256 Fingerprint: 85:a0:dd:7d:d7:20:ad:b7:ff:05:f8:3d:54:2b:20:9d:c7:ff:45:28:f7:d6:77:b1:83:89:fe:a5:e5:c4:9e:86 +-----BEGIN CERTIFICATE----- +MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x +GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv +b3QgQ0EgMjAeFw0wNjExMjQxODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNV +BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W +YWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCa +GMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6XJxg +Fyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55J +WpzmM+Yklvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bB +rrcCaoF6qUWD4gXmuVbBlDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp ++ARz8un+XJiM9XOva7R+zdRcAitMOeGylZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1 +ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt66/3FsvbzSUr5R/7mp/i +Ucw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1JdxnwQ5hYIiz +PtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og +/zOhD7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UH +oycR7hYQe7xFSkyyBNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuI +yV77zGHcizN300QyNQliBJIWENieJ0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1Ud +EwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBQahGK8SEwzJQTU7tD2 +A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGUa6FJpEcwRTEL +MAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT +ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2f +BluornFdLwUvZ+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzn +g/iN/Ae42l9NLmeyhP3ZRPx3UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2Bl +fF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodmVjB3pjd4M1IQWK4/YY7yarHvGH5K +WWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK+JDSV6IZUaUtl0Ha +B0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrWIozc +hLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPR +TUIZ3Ph1WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWD +mbA4CD/pXvk1B+TJYm5Xf6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0Z +ohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y +4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8VCLAAVBpQ570su9t+Oza +8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u +-----END CERTIFICATE----- + +# Issuer: CN=QuoVadis Root CA 3 O=QuoVadis Limited +# Subject: CN=QuoVadis Root CA 3 O=QuoVadis Limited +# Label: "QuoVadis Root CA 3" +# Serial: 1478 +# MD5 Fingerprint: 31:85:3c:62:94:97:63:b9:aa:fd:89:4e:af:6f:e0:cf +# SHA1 Fingerprint: 1f:49:14:f7:d8:74:95:1d:dd:ae:02:c0:be:fd:3a:2d:82:75:51:85 +# SHA256 Fingerprint: 18:f1:fc:7f:20:5d:f8:ad:dd:eb:7f:e0:07:dd:57:e3:af:37:5a:9c:4d:8d:73:54:6b:f4:f1:fe:d1:e1:8d:35 +-----BEGIN CERTIFICATE----- +MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x +GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv +b3QgQ0EgMzAeFw0wNjExMjQxOTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNV +BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W +YWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDM +V0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNggDhoB +4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUr +H556VOijKTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd +8lyyBTNvijbO0BNO/79KDDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9Cabwv +vWhDFlaJKjdhkf2mrk7AyxRllDdLkgbvBNDInIjbC3uBr7E9KsRlOni27tyAsdLT +mZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwpp5ijJUMv7/FfJuGITfhe +btfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8nT8KKdjc +T5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDt +WAEXMJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZ +c6tsgLjoC2SToJyMGf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A +4iLItLRkT9a6fUg+qGkM17uGcclzuD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYD +VR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHTBgkrBgEEAb5YAAMwgcUwgZMG +CCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmljYXRlIGNvbnN0 +aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0 +aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVu +dC4wLQYIKwYBBQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2Nw +czALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4G +A1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4ywLQoUmkRzBFMQswCQYDVQQGEwJC +TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UEAxMSUXVvVmFkaXMg +Um9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZVqyM0 +7ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSem +d1o417+shvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd ++LJ2w/w4E6oM3kJpK27zPOuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B +4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadN +t54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp8kokUvd0/bpO5qgdAm6x +DYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBCbjPsMZ57 +k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6s +zHXug/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0j +Wy10QJLZYxkNc91pvGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeT +mJlglFwjz1onl14LBQaTNx47aTbrqZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK +4SVhM7JZG+Ju1zdXtg2pEto= +-----END CERTIFICATE----- + +# Issuer: O=SECOM Trust.net OU=Security Communication RootCA1 +# Subject: O=SECOM Trust.net OU=Security Communication RootCA1 +# Label: "Security Communication Root CA" +# Serial: 0 +# MD5 Fingerprint: f1:bc:63:6a:54:e0:b5:27:f5:cd:e7:1a:e3:4d:6e:4a +# SHA1 Fingerprint: 36:b1:2b:49:f9:81:9e:d7:4c:9e:bc:38:0f:c6:56:8f:5d:ac:b2:f7 +# SHA256 Fingerprint: e7:5e:72:ed:9f:56:0e:ec:6e:b4:80:00:73:a4:3f:c3:ad:19:19:5a:39:22:82:01:78:95:97:4a:99:02:6b:6c +-----BEGIN CERTIFICATE----- +MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEY +MBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21t +dW5pY2F0aW9uIFJvb3RDQTEwHhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5 +WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYD +VQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw8yl8 +9f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJ +DKaVv0uMDPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9 +Ms+k2Y7CI9eNqPPYJayX5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/N +QV3Is00qVUarH9oe4kA92819uZKAnDfdDJZkndwi92SL32HeFZRSFaB9UslLqCHJ +xrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2JChzAgMBAAGjPzA9MB0G +A1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYwDwYDVR0T +AQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vG +kl3g0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfr +Uj94nK9NrvjVT8+amCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5 +Bw+SUEmK3TGXX8npN6o7WWWXlDLJs58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJU +JRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ6rBK+1YWc26sTfcioU+tHXot +RSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAiFL39vmwLAw== +-----END CERTIFICATE----- + +# Issuer: CN=Sonera Class2 CA O=Sonera +# Subject: CN=Sonera Class2 CA O=Sonera +# Label: "Sonera Class 2 Root CA" +# Serial: 29 +# MD5 Fingerprint: a3:ec:75:0f:2e:88:df:fa:48:01:4e:0b:5c:48:6f:fb +# SHA1 Fingerprint: 37:f7:6d:e6:07:7c:90:c5:b1:3e:93:1a:b7:41:10:b4:f2:e4:9a:27 +# SHA256 Fingerprint: 79:08:b4:03:14:c1:38:10:0b:51:8d:07:35:80:7f:fb:fc:f8:51:8a:00:95:33:71:05:ba:38:6b:15:3d:d9:27 +-----BEGIN CERTIFICATE----- +MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEP +MA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAx +MDQwNjA3Mjk0MFoXDTIxMDQwNjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNV +BAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMiBDQTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3/Ei9vX+ALTU74W+o +Z6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybTdXnt +5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s +3TmVToMGf+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2Ej +vOr7nQKV0ba5cTppCD8PtOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu +8nYybieDwnPz3BjotJPqdURrBGAgcVeHnfO+oJAjPYok4doh28MCAwEAAaMzMDEw +DwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITTXjwwCwYDVR0PBAQDAgEG +MA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt0jSv9zil +zqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/ +3DEIcbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvD +FNr450kkkdAdavphOe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6 +Tk6ezAyNlNzZRZxe7EJQY670XcSxEtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2 +ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLHllpwrN9M +-----END CERTIFICATE----- + +# Issuer: CN=XRamp Global Certification Authority O=XRamp Security Services Inc OU=www.xrampsecurity.com +# Subject: CN=XRamp Global Certification Authority O=XRamp Security Services Inc OU=www.xrampsecurity.com +# Label: "XRamp Global CA Root" +# Serial: 107108908803651509692980124233745014957 +# MD5 Fingerprint: a1:0b:44:b3:ca:10:d8:00:6e:9d:0f:d8:0f:92:0a:d1 +# SHA1 Fingerprint: b8:01:86:d1:eb:9c:86:a5:41:04:cf:30:54:f3:4c:52:b7:e5:58:c6 +# SHA256 Fingerprint: ce:cd:dc:90:50:99:d8:da:df:c5:b1:d2:09:b7:37:cb:e2:c1:8c:fb:2c:10:c0:ff:0b:cf:0d:32:86:fc:1a:a2 +-----BEGIN CERTIFICATE----- +MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCB +gjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEk +MCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRY +UmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQxMTAxMTcx +NDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3 +dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2Vy +dmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB +dXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS6 +38eMpSe2OAtp87ZOqCwuIR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCP +KZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMxfoArtYzAQDsRhtDLooY2YKTVMIJt2W7Q +DxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FEzG+gSqmUsE3a56k0enI4 +qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqsAxcZZPRa +JSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNVi +PvryxS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0P +BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASs +jVy16bYbMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0 +eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQEwDQYJKoZIhvcNAQEFBQAD +ggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc/Kh4ZzXxHfAR +vbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt +qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLa +IR9NmXmd4c8nnxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSy +i6mx5O+aGtA9aZnuqCij4Tyz8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQ +O+7ETPTsJ3xCwnR8gooJybQDJbw= +-----END CERTIFICATE----- + +# Issuer: O=The Go Daddy Group, Inc. OU=Go Daddy Class 2 Certification Authority +# Subject: O=The Go Daddy Group, Inc. OU=Go Daddy Class 2 Certification Authority +# Label: "Go Daddy Class 2 CA" +# Serial: 0 +# MD5 Fingerprint: 91:de:06:25:ab:da:fd:32:17:0c:bb:25:17:2a:84:67 +# SHA1 Fingerprint: 27:96:ba:e6:3f:18:01:e2:77:26:1b:a0:d7:77:70:02:8f:20:ee:e4 +# SHA256 Fingerprint: c3:84:6b:f2:4b:9e:93:ca:64:27:4c:0e:c6:7c:1e:cc:5e:02:4f:fc:ac:d2:d7:40:19:35:0e:81:fe:54:6a:e4 +-----BEGIN CERTIFICATE----- +MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEh +MB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBE +YWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3 +MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRo +ZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3Mg +MiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggEN +ADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCA +PVYYYwhv2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6w +wdhFJ2+qN1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXi +EqITLdiOr18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMY +avx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+ +YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0OBBYEFNLE +sNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h +/t2oatTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5 +IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmlj +YXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD +ggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wimPQoZ+YeAEW5p5JYXMP80kWNy +OO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKtI3lpjbi2Tc7P +TMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ +HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mER +dEr/VxqHD3VILs9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5Cuf +ReYNnyicsbkqWletNw+vHX/bvZ8= +-----END CERTIFICATE----- + +# Issuer: O=Starfield Technologies, Inc. OU=Starfield Class 2 Certification Authority +# Subject: O=Starfield Technologies, Inc. OU=Starfield Class 2 Certification Authority +# Label: "Starfield Class 2 CA" +# Serial: 0 +# MD5 Fingerprint: 32:4a:4b:bb:c8:63:69:9b:be:74:9a:c6:dd:1d:46:24 +# SHA1 Fingerprint: ad:7e:1c:28:b0:64:ef:8f:60:03:40:20:14:c3:d0:e3:37:0e:b5:8a +# SHA256 Fingerprint: 14:65:fa:20:53:97:b8:76:fa:a6:f0:a9:95:8e:55:90:e4:0f:cc:7f:aa:4f:b7:c2:c8:67:75:21:fb:5f:b6:58 +-----BEGIN CERTIFICATE----- +MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzEl +MCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMp +U3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQw +NjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBoMQswCQYDVQQGEwJVUzElMCMGA1UE +ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZp +ZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqGSIb3 +DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf +8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN ++lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0 +X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVmepsZGD3/cVE8MC5fvj13c7JdBmzDI1aa +K4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA +1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HFMIHCMB0G +A1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fR +zt0fhvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0 +YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBD +bGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8w +DQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1epoXkJKtv3 +L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLMPUxA2IGvd56D +eruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl +xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynp +VSJYACPq4xJDKVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEY +WQPJIrSPnNVeKtelttQKbfi3QBFGmh95DmK/D5fs4C8fF5Q= +-----END CERTIFICATE----- + +# Issuer: O=Government Root Certification Authority +# Subject: O=Government Root Certification Authority +# Label: "Taiwan GRCA" +# Serial: 42023070807708724159991140556527066870 +# MD5 Fingerprint: 37:85:44:53:32:45:1f:20:f0:f3:95:e1:25:c4:43:4e +# SHA1 Fingerprint: f4:8b:11:bf:de:ab:be:94:54:20:71:e6:41:de:6b:be:88:2b:40:b9 +# SHA256 Fingerprint: 76:00:29:5e:ef:e8:5b:9e:1f:d6:24:db:76:06:2a:aa:ae:59:81:8a:54:d2:77:4c:d4:c0:b2:c0:11:31:e1:b3 +-----BEGIN CERTIFICATE----- +MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/ +MQswCQYDVQQGEwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmlj +YXRpb24gQXV0aG9yaXR5MB4XDTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1ow +PzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dvdmVybm1lbnQgUm9vdCBDZXJ0aWZp +Y2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB +AJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qNw8XR +IePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1q +gQdW8or5BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKy +yhwOeYHWtXBiCAEuTk8O1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAts +F/tnyMKtsc2AtJfcdgEWFelq16TheEfOhtX7MfP6Mb40qij7cEwdScevLJ1tZqa2 +jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wovJ5pGfaENda1UhhXcSTvx +ls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7Q3hub/FC +VGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHK +YS1tB6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoH +EgKXTiCQ8P8NHuJBO9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThN +Xo+EHWbNxWCWtFJaBYmOlXqYwZE8lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1Ud +DgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNVHRMEBTADAQH/MDkGBGcqBwAE +MTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg209yewDL7MTqK +UWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ +TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyf +qzvS/3WXy6TjZwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaK +ZEk9GhiHkASfQlK3T8v+R0F2Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFE +JPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlUD7gsL0u8qV1bYH+Mh6XgUmMqvtg7 +hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6QzDxARvBMB1uUO07+1 +EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+HbkZ6Mm +nD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WX +udpVBrkk7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44Vbnz +ssQwmSNOXfJIoRIM3BKQCZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDe +LMDDav7v3Aun+kbfYNucpllQdSNpc5Oy+fwC00fmcc4QAu4njIT/rEUNE1yDMuAl +pYYsfPQS +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert Assured ID Root CA O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert Assured ID Root CA O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert Assured ID Root CA" +# Serial: 17154717934120587862167794914071425081 +# MD5 Fingerprint: 87:ce:0b:7b:2a:0e:49:00:e1:58:71:9b:37:a8:93:72 +# SHA1 Fingerprint: 05:63:b8:63:0d:62:d7:5a:bb:c8:ab:1e:4b:df:b5:a8:99:b2:4d:43 +# SHA256 Fingerprint: 3e:90:99:b5:01:5e:8f:48:6c:00:bc:ea:9d:11:1e:e7:21:fa:ba:35:5a:89:bc:f1:df:69:56:1e:3d:c6:32:5c +-----BEGIN CERTIFICATE----- +MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv +b3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl +cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi +MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c +JpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP +mDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+ +wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4 +VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/ +AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB +AAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW +BBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun +pyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC +dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf +fwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm +NW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx +H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe ++o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g== +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert Global Root CA O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert Global Root CA O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert Global Root CA" +# Serial: 10944719598952040374951832963794454346 +# MD5 Fingerprint: 79:e4:a9:84:0d:7d:3a:96:d7:c0:4f:e2:43:4c:89:2e +# SHA1 Fingerprint: a8:98:5d:3a:65:e5:e5:c4:b2:d7:d6:6d:40:c6:dd:2f:b1:9c:54:36 +# SHA256 Fingerprint: 43:48:a0:e9:44:4c:78:cb:26:5e:05:8d:5e:89:44:b4:d8:4f:96:62:bd:26:db:25:7f:89:34:a4:43:c7:01:61 +-----BEGIN CERTIFICATE----- +MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD +QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT +MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j +b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG +9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB +CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97 +nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt +43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P +T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4 +gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO +BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR +TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw +DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr +hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg +06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF +PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls +YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk +CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert High Assurance EV Root CA O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert High Assurance EV Root CA O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert High Assurance EV Root CA" +# Serial: 3553400076410547919724730734378100087 +# MD5 Fingerprint: d4:74:de:57:5c:39:b2:d3:9c:85:83:c5:c0:65:49:8a +# SHA1 Fingerprint: 5f:b7:ee:06:33:e2:59:db:ad:0c:4c:9a:e6:d3:8f:1a:61:c7:dc:25 +# SHA256 Fingerprint: 74:31:e5:f4:c3:c1:ce:46:90:77:4f:0b:61:e0:54:40:88:3b:a9:a0:1e:d0:0b:a6:ab:d7:80:6e:d3:b1:18:cf +-----BEGIN CERTIFICATE----- +MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j +ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL +MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3 +LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug +RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm ++9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW +PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM +xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB +Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3 +hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg +EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF +MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA +FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec +nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z +eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF +hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2 +Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe +vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep ++OkuE6N36B9K +-----END CERTIFICATE----- + +# Issuer: CN=DST Root CA X3 O=Digital Signature Trust Co. +# Subject: CN=DST Root CA X3 O=Digital Signature Trust Co. +# Label: "DST Root CA X3" +# Serial: 91299735575339953335919266965803778155 +# MD5 Fingerprint: 41:03:52:dc:0f:f7:50:1b:16:f0:02:8e:ba:6f:45:c5 +# SHA1 Fingerprint: da:c9:02:4f:54:d8:f6:df:94:93:5f:b1:73:26:38:ca:6a:d7:7c:13 +# SHA256 Fingerprint: 06:87:26:03:31:a7:24:03:d9:09:f1:05:e6:9b:cf:0d:32:e1:bd:24:93:ff:c6:d9:20:6d:11:bc:d6:77:07:39 +-----BEGIN CERTIFICATE----- +MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/ +MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT +DkRTVCBSb290IENBIFgzMB4XDTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVow +PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD +Ew5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB +AN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmTrE4O +rz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEq +OLl5CjH9UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9b +xiqKqy69cK3FCxolkHRyxXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw +7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40dutolucbY38EVAjqr2m7xPi71XAicPNaD +aeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV +HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQMA0GCSqG +SIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69 +ikugdB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXr +AvHRAosZy5Q6XkjEGB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZz +R8srzJmwN0jP41ZL9c8PDHIyh8bwRLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5 +JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubSfZGL+T0yjWW06XyxV3bqxbYo +Ob8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ +-----END CERTIFICATE----- + +# Issuer: CN=SwissSign Gold CA - G2 O=SwissSign AG +# Subject: CN=SwissSign Gold CA - G2 O=SwissSign AG +# Label: "SwissSign Gold CA - G2" +# Serial: 13492815561806991280 +# MD5 Fingerprint: 24:77:d9:a8:91:d1:3b:fa:88:2d:c2:ff:f8:cd:33:93 +# SHA1 Fingerprint: d8:c5:38:8a:b7:30:1b:1b:6e:d4:7a:e6:45:25:3a:6f:9f:1a:27:61 +# SHA256 Fingerprint: 62:dd:0b:e9:b9:f5:0a:16:3e:a0:f8:e7:5c:05:3b:1e:ca:57:ea:55:c8:68:8f:64:7c:68:81:f2:c8:35:7b:95 +-----BEGIN CERTIFICATE----- +MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV +BAYTAkNIMRUwEwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2ln +biBHb2xkIENBIC0gRzIwHhcNMDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBF +MQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWduIEFHMR8wHQYDVQQDExZT +d2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC +CgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUqt2/8 +76LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+ +bbqBHH5CjCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c +6bM8K8vzARO/Ws/BtQpgvd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqE +emA8atufK+ze3gE/bk3lUIbLtK/tREDFylqM2tIrfKjuvqblCqoOpd8FUrdVxyJd +MmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvRAiTysybUa9oEVeXBCsdt +MDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuendjIj3o02y +MszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69y +FGkOpeUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPi +aG59je883WX0XaxR7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxM +gI93e2CaHt+28kgeDrpOVG2Y4OGiGqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCB +qTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUWyV7 +lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64OfPAeGZe6Drn +8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov +L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe6 +45R88a7A3hfm5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczO +UYrHUDFu4Up+GC9pWbY9ZIEr44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5 +O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOfMke6UiI0HTJ6CVanfCU2qT1L2sCC +bwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6mGu6uLftIdxf+u+yv +GPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxpmo/a +77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCC +hdiDyyJkvC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid3 +92qgQmwLOM7XdVAyksLfKzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEpp +Ld6leNcG2mqeSz53OiATIgHQv2ieY2BrNU0LbbqhPcCT4H8js1WtciVORvnSFu+w +ZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6LqjviOvrv1vA+ACOzB2+htt +Qc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ +-----END CERTIFICATE----- + +# Issuer: CN=SwissSign Silver CA - G2 O=SwissSign AG +# Subject: CN=SwissSign Silver CA - G2 O=SwissSign AG +# Label: "SwissSign Silver CA - G2" +# Serial: 5700383053117599563 +# MD5 Fingerprint: e0:06:a1:c9:7d:cf:c9:fc:0d:c0:56:75:96:d8:62:13 +# SHA1 Fingerprint: 9b:aa:e5:9f:56:ee:21:cb:43:5a:be:25:93:df:a7:f0:40:d1:1d:cb +# SHA256 Fingerprint: be:6c:4d:a2:bb:b9:ba:59:b6:f3:93:97:68:37:42:46:c3:c0:05:99:3f:a9:8f:02:0d:1d:ed:be:d4:8a:81:d5 +-----BEGIN CERTIFICATE----- +MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UE +BhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWdu +IFNpbHZlciBDQSAtIEcyMB4XDTA2MTAyNTA4MzI0NloXDTM2MTAyNTA4MzI0Nlow +RzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMY +U3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A +MIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dOcbpLj6VzHVxumK4DV644N0Mv +Fz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gREpzn5/ASLHvGiTSf5YXu6t+WiE7br +YT7QbNHm+/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi0R86TieF +nbAVlDLaYQ1HTWBCrpJH6INaUFjpiou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH +6ATK72oxh9TAtvmUcXtnZLi2kUpCe2UuMGoM9ZDulebyzYLs2aFK7PayS+VFheZt +eJMELpyCbTapxDFkH4aDCyr0NQp4yVXPQbBH6TCfmb5hqAaEuSh6XzjZG6k4sIN/ +c8HDO0gqgg8hm7jMqDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5FZGkECwJ +MoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRH +HTBsROopN4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTf +jNFusB3hB48IHpmccelM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb6 +5i/4z3GcRm25xBWNOHkDRUjvxF3XCO6HOSKGsg0PWEP3calILv3q1h8CAwEAAaOB +rDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU +F6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRBtjpbO8tFnb0c +wpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggrBgEFBQcCARYgaHR0 +cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIB +AHPGgeAn0i0P4JUw4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShp +WJHckRE1qTodvBqlYJ7YH39FkWnZfrt4csEGDyrOj4VwYaygzQu4OSlWhDJOhrs9 +xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcSH9/L3XWgwF15kIwb4FDm3jH+mHtwX6WQ +2K34ArZv02DdQEsixT2tOnqfGhpHkXkzuoLcMmkDlm4fS/Bx/uNncqCxv1yL5PqZ +IseEuRuNI5c/7SXgz2W79WEE790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFaDGi8 +aRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2X +em1ZqSqPe97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQR +dAtq/gsD/KNVV4n+SsuuWxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/ +OMpXEA29MC/HpeZBoNquBYeaoKRlbEwJDIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+ +hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ubDgEj8Z+7fNzcbBGXJbLy +tGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u +-----END CERTIFICATE----- + +# Issuer: CN=GeoTrust Primary Certification Authority O=GeoTrust Inc. +# Subject: CN=GeoTrust Primary Certification Authority O=GeoTrust Inc. +# Label: "GeoTrust Primary Certification Authority" +# Serial: 32798226551256963324313806436981982369 +# MD5 Fingerprint: 02:26:c3:01:5e:08:30:37:43:a9:d0:7d:cf:37:e6:bf +# SHA1 Fingerprint: 32:3c:11:8e:1b:f7:b8:b6:52:54:e2:e2:10:0d:d6:02:90:37:f0:96 +# SHA256 Fingerprint: 37:d5:10:06:c5:12:ea:ab:62:64:21:f1:ec:8c:92:01:3f:c5:f8:2a:e9:8e:e5:33:eb:46:19:b8:de:b4:d0:6c +-----BEGIN CERTIFICATE----- +MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBY +MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMo +R2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEx +MjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgxCzAJBgNVBAYTAlVTMRYwFAYDVQQK +Ew1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQcmltYXJ5IENlcnRp +ZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9 +AWbK7hWNb6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjA +ZIVcFU2Ix7e64HXprQU9nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE0 +7e9GceBrAqg1cmuXm2bgyxx5X9gaBGgeRwLmnWDiNpcB3841kt++Z8dtd1k7j53W +kBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGttm/81w7a4DSwDRp35+MI +mO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4G +A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJ +KoZIhvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ1 +6CePbJC/kRYkRj5KTs4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl +4b7UVXGYNTq+k+qurUKykG/g/CFNNWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6K +oKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHaFloxt/m0cYASSJlyc1pZU8Fj +UjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG1riR/aYNKxoU +AT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk= +-----END CERTIFICATE----- + +# Issuer: CN=thawte Primary Root CA O=thawte, Inc. OU=Certification Services Division/(c) 2006 thawte, Inc. - For authorized use only +# Subject: CN=thawte Primary Root CA O=thawte, Inc. OU=Certification Services Division/(c) 2006 thawte, Inc. - For authorized use only +# Label: "thawte Primary Root CA" +# Serial: 69529181992039203566298953787712940909 +# MD5 Fingerprint: 8c:ca:dc:0b:22:ce:f5:be:72:ac:41:1a:11:a8:d8:12 +# SHA1 Fingerprint: 91:c6:d6:ee:3e:8a:c8:63:84:e5:48:c2:99:29:5c:75:6c:81:7b:81 +# SHA256 Fingerprint: 8d:72:2f:81:a9:c1:13:c0:79:1d:f1:36:a2:96:6d:b2:6c:95:0a:97:1d:b4:6b:41:99:f4:ea:54:b7:8b:fb:9f +-----BEGIN CERTIFICATE----- +MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCB +qTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf +Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw +MDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNV +BAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3MDAwMDAwWhcNMzYw +NzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5j +LjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYG +A1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl +IG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqG +SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCsoPD7gFnUnMekz52hWXMJEEUMDSxuaPFs +W0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ1CRfBsDMRJSUjQJib+ta +3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGcq/gcfomk +6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6 +Sk/KaAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94J +NqR32HuHUETVPm4pafs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBA +MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XP +r87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUFAAOCAQEAeRHAS7ORtvzw6WfU +DW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeEuzLlQRHAd9mz +YJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX +xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2 +/qxAeeWsEG89jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/ +LHbTY5xZ3Y+m4Q6gLkH3LpVHz7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7 +jVaMaA== +-----END CERTIFICATE----- + +# Issuer: CN=VeriSign Class 3 Public Primary Certification Authority - G5 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2006 VeriSign, Inc. - For authorized use only +# Subject: CN=VeriSign Class 3 Public Primary Certification Authority - G5 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2006 VeriSign, Inc. - For authorized use only +# Label: "VeriSign Class 3 Public Primary Certification Authority - G5" +# Serial: 33037644167568058970164719475676101450 +# MD5 Fingerprint: cb:17:e4:31:67:3e:e2:09:fe:45:57:93:f3:0a:fa:1c +# SHA1 Fingerprint: 4e:b6:d5:78:49:9b:1c:cf:5f:58:1e:ad:56:be:3d:9b:67:44:a5:e5 +# SHA256 Fingerprint: 9a:cf:ab:7e:43:c8:d8:80:d0:6b:26:2a:94:de:ee:e4:b4:65:99:89:c3:d0:ca:f1:9b:af:64:05:e4:1a:b7:df +-----BEGIN CERTIFICATE----- +MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCB +yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL +ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp +U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW +ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0 +aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCByjEL +MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW +ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2ln +biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp +U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y +aXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1 +nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbex +t0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIz +SdhDY2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQG +BO+QueQA5N06tRn/Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+ +rCpSx4/VBEnkjWNHiDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/ +NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8E +BAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAH +BgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy +aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKv +MzEzMA0GCSqGSIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzE +p6B4Eq1iDkVwZMXnl2YtmAl+X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y +5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKEKQsTb47bDN0lAtukixlE0kF6BWlK +WE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiCKm0oHw0LxOXnGiYZ +4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vEZV8N +hnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq +-----END CERTIFICATE----- + +# Issuer: CN=SecureTrust CA O=SecureTrust Corporation +# Subject: CN=SecureTrust CA O=SecureTrust Corporation +# Label: "SecureTrust CA" +# Serial: 17199774589125277788362757014266862032 +# MD5 Fingerprint: dc:32:c3:a7:6d:25:57:c7:68:09:9d:ea:2d:a9:a2:d1 +# SHA1 Fingerprint: 87:82:c6:c3:04:35:3b:cf:d2:96:92:d2:59:3e:7d:44:d9:34:ff:11 +# SHA256 Fingerprint: f1:c1:b5:0a:e5:a2:0d:d8:03:0e:c9:f6:bc:24:82:3d:d3:67:b5:25:57:59:b4:e7:1b:61:fc:e9:f7:37:5d:73 +-----BEGIN CERTIFICATE----- +MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBI +MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x +FzAVBgNVBAMTDlNlY3VyZVRydXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIz +MTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1NlY3VyZVRydXN0IENv +cnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCCASIwDQYJKoZIhvcN +AQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQXOZEz +Zum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO +0gMdA+9tDWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIao +wW8xQmxSPmjL8xk037uHGFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj +7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b01k/unK8RCSc43Oz969XL0Imnal0ugBS +8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmHursCAwEAAaOBnTCBmjAT +BgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB +/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCeg +JYYjaHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGC +NxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt3 +6Z3q059c4EVlew3KW+JwULKUBRSuSceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/ +3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHfmbx8IVQr5Fiiu1cprp6poxkm +D5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZnMUFdAvnZyPS +CPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR +3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE= +-----END CERTIFICATE----- + +# Issuer: CN=Secure Global CA O=SecureTrust Corporation +# Subject: CN=Secure Global CA O=SecureTrust Corporation +# Label: "Secure Global CA" +# Serial: 9751836167731051554232119481456978597 +# MD5 Fingerprint: cf:f4:27:0d:d4:ed:dc:65:16:49:6d:3d:da:bf:6e:de +# SHA1 Fingerprint: 3a:44:73:5a:e5:81:90:1f:24:86:61:46:1e:3b:9c:c4:5f:f5:3a:1b +# SHA256 Fingerprint: 42:00:f5:04:3a:c8:59:0e:bb:52:7d:20:9e:d1:50:30:29:fb:cb:d4:1c:a1:b5:06:ec:27:f1:5a:de:7d:ac:69 +-----BEGIN CERTIFICATE----- +MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBK +MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x +GTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkx +MjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3Qg +Q29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwggEiMA0GCSqG +SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jxYDiJ +iQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa +/FHtaMbQbqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJ +jnIFHovdRIWCQtBJwB1g8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnI +HmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYVHDGA76oYa8J719rO+TMg1fW9ajMtgQT7 +sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi0XPnj3pDAgMBAAGjgZ0w +gZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQF +MAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCsw +KaAnoCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsG +AQQBgjcVAQQDAgEAMA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0L +URYD7xh8yOOvaliTFGCRsoTciE6+OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXO +H0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cnCDpOGR86p1hcF895P4vkp9Mm +I50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/53CYNv6ZHdAbY +iNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc +f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW +-----END CERTIFICATE----- + +# Issuer: CN=COMODO Certification Authority O=COMODO CA Limited +# Subject: CN=COMODO Certification Authority O=COMODO CA Limited +# Label: "COMODO Certification Authority" +# Serial: 104350513648249232941998508985834464573 +# MD5 Fingerprint: 5c:48:dc:f7:42:72:ec:56:94:6d:1c:cc:71:35:80:75 +# SHA1 Fingerprint: 66:31:bf:9e:f7:4f:9e:b6:c9:d5:a6:0c:ba:6a:be:d1:f7:bd:ef:7b +# SHA256 Fingerprint: 0c:2c:d6:3d:f7:80:6f:a3:99:ed:e8:09:11:6b:57:5b:f8:79:89:f0:65:18:f9:80:8c:86:05:03:17:8b:af:66 +-----BEGIN CERTIFICATE----- +MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCB +gTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G +A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNV +BAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEyMDEwMDAw +MDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3Jl +YXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01P +RE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0 +aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3 +UcEbVASY06m/weaKXTuH+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI +2GqGd0S7WWaXUF601CxwRM/aN5VCaTwwxHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8 +Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV4EajcNxo2f8ESIl33rXp ++2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA1KGzqSX+ +DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5O +nKVIrLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW +/zAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6g +PKA6hjhodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9u +QXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOCAQEAPpiem/Yb6dc5t3iuHXIY +SdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CPOGEIqB6BCsAv +IC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/ +RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4 +zJVSk/BwJVmcIGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5dd +BA6+C4OmF4O5MBKgxTMVBbkN+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IB +ZQ== +-----END CERTIFICATE----- + +# Issuer: CN=Network Solutions Certificate Authority O=Network Solutions L.L.C. +# Subject: CN=Network Solutions Certificate Authority O=Network Solutions L.L.C. +# Label: "Network Solutions Certificate Authority" +# Serial: 116697915152937497490437556386812487904 +# MD5 Fingerprint: d3:f3:a6:16:c0:fa:6b:1d:59:b1:2d:96:4d:0e:11:2e +# SHA1 Fingerprint: 74:f8:a3:c3:ef:e7:b3:90:06:4b:83:90:3c:21:64:60:20:e5:df:ce +# SHA256 Fingerprint: 15:f0:ba:00:a3:ac:7a:f3:ac:88:4c:07:2b:10:11:a0:77:bd:77:c0:97:f4:01:64:b2:f8:59:8a:bd:83:86:0c +-----BEGIN CERTIFICATE----- +MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBi +MQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu +MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3Jp +dHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMxMjM1OTU5WjBiMQswCQYDVQQGEwJV +UzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydO +ZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG +SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwz +c7MEL7xxjOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPP +OCwGJgl6cvf6UDL4wpPTaaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rl +mGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXTcrA/vGp97Eh/jcOrqnErU2lBUzS1sLnF +BgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc/Qzpf14Dl847ABSHJ3A4 +qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMBAAGjgZcw +gZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIB +BjAPBgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwu +bmV0c29sc3NsLmNvbS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3Jp +dHkuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc8 +6fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q4LqILPxFzBiwmZVRDuwduIj/ +h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/GGUsyfJj4akH +/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv +wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHN +pGxlaKFJdlxDydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey +-----END CERTIFICATE----- + +# Issuer: CN=COMODO ECC Certification Authority O=COMODO CA Limited +# Subject: CN=COMODO ECC Certification Authority O=COMODO CA Limited +# Label: "COMODO ECC Certification Authority" +# Serial: 41578283867086692638256921589707938090 +# MD5 Fingerprint: 7c:62:ff:74:9d:31:53:5e:68:4a:d5:78:aa:1e:bf:23 +# SHA1 Fingerprint: 9f:74:4e:9f:2b:4d:ba:ec:0f:31:2c:50:b6:56:3b:8e:2d:93:c3:11 +# SHA256 Fingerprint: 17:93:92:7a:06:14:54:97:89:ad:ce:2f:8f:34:f7:f0:b6:6d:0f:3a:e3:a3:b8:4d:21:ec:15:db:ba:4f:ad:c7 +-----BEGIN CERTIFICATE----- +MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTEL +MAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE +BxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMT +IkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwMzA2MDAw +MDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdy +ZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09N +T0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlv +biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSR +FtSrYpn1PlILBs5BAH+X4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0J +cfRK9ChQtP6IHG4/bC8vCVlbpVsLM5niwz2J+Wos77LTBumjQjBAMB0GA1UdDgQW +BBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ +BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VGFAkK+qDm +fQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdv +GDeAU/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY= +-----END CERTIFICATE----- + +# Issuer: CN=OISTE WISeKey Global Root GA CA O=WISeKey OU=Copyright (c) 2005/OISTE Foundation Endorsed +# Subject: CN=OISTE WISeKey Global Root GA CA O=WISeKey OU=Copyright (c) 2005/OISTE Foundation Endorsed +# Label: "OISTE WISeKey Global Root GA CA" +# Serial: 86718877871133159090080555911823548314 +# MD5 Fingerprint: bc:6c:51:33:a7:e9:d3:66:63:54:15:72:1b:21:92:93 +# SHA1 Fingerprint: 59:22:a1:e1:5a:ea:16:35:21:f8:98:39:6a:46:46:b0:44:1b:0f:a9 +# SHA256 Fingerprint: 41:c9:23:86:6a:b4:ca:d6:b7:ad:57:80:81:58:2e:02:07:97:a6:cb:df:4f:ff:78:ce:83:96:b3:89:37:d7:f5 +-----BEGIN CERTIFICATE----- +MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCB +ijELMAkGA1UEBhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHly +aWdodCAoYykgMjAwNTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNl +ZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQSBDQTAeFw0w +NTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYDVQQGEwJDSDEQMA4G +A1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIwIAYD +VQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBX +SVNlS2V5IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEAy0+zAJs9Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxR +VVuuk+g3/ytr6dTqvirdqFEr12bDYVxgAsj1znJ7O7jyTmUIms2kahnBAbtzptf2 +w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbDd50kc3vkDIzh2TbhmYsF +mQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ/yxViJGg +4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t9 +4B3RLoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYw +DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQw +EAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOx +SPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vImMMkQyh2I+3QZH4VFvbBsUfk2 +ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4+vg1YFkCExh8 +vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa +hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZi +Fj4A4xylNoEYokxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ +/L7fCg0= +-----END CERTIFICATE----- + +# Issuer: CN=Certigna O=Dhimyotis +# Subject: CN=Certigna O=Dhimyotis +# Label: "Certigna" +# Serial: 18364802974209362175 +# MD5 Fingerprint: ab:57:a6:5b:7d:42:82:19:b5:d8:58:26:28:5e:fd:ff +# SHA1 Fingerprint: b1:2e:13:63:45:86:a4:6f:1a:b2:60:68:37:58:2d:c4:ac:fd:94:97 +# SHA256 Fingerprint: e3:b6:a2:db:2e:d7:ce:48:84:2f:7a:c5:32:41:c7:b7:1d:54:14:4b:fb:40:c1:1f:3f:1d:0b:42:f5:ee:a1:2d +-----BEGIN CERTIFICATE----- +MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNV +BAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4X +DTA3MDYyOTE1MTMwNVoXDTI3MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQ +BgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwIQ2VydGlnbmEwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7qXOEm7RFHYeGifBZ4 +QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyHGxny +gQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbw +zBfsV1/pogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q +130yGLMLLGq/jj8UEYkgDncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2 +JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKfIrjxwo1p3Po6WAbfAgMBAAGjgbwwgbkw +DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQtCRZvgHyUtVF9lo53BEw +ZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJBgNVBAYT +AkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzj +AQ/JSP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG +9w0BAQUFAAOCAQEAhQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8h +bV6lUmPOEvjvKtpv6zf+EwLHyzs+ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFnc +fca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1kluPBS1xp81HlDQwY9qcEQCYsuu +HWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY1gkIl2PlwS6w +t0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw +WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg== +-----END CERTIFICATE----- + +# Issuer: CN=Cybertrust Global Root O=Cybertrust, Inc +# Subject: CN=Cybertrust Global Root O=Cybertrust, Inc +# Label: "Cybertrust Global Root" +# Serial: 4835703278459682877484360 +# MD5 Fingerprint: 72:e4:4a:87:e3:69:40:80:77:ea:bc:e3:f4:ff:f0:e1 +# SHA1 Fingerprint: 5f:43:e5:b1:bf:f8:78:8c:ac:1c:c7:ca:4a:9a:c6:22:2b:cc:34:c6 +# SHA256 Fingerprint: 96:0a:df:00:63:e9:63:56:75:0c:29:65:dd:0a:08:67:da:0b:9c:bd:6e:77:71:4a:ea:fb:23:49:ab:39:3d:a3 +-----BEGIN CERTIFICATE----- +MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYG +A1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2Jh +bCBSb290MB4XDTA2MTIxNTA4MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UE +ChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBS +b290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA+Mi8vRRQZhP/8NN5 +7CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW0ozS +J8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2y +HLtgwEZLAfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iP +t3sMpTjr3kfb1V05/Iin89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNz +FtApD0mpSPCzqrdsxacwOUBdrsTiXSZT8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAY +XSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/ +MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2MDSgMqAw +hi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3Js +MB8GA1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUA +A4IBAQBW7wojoFROlZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMj +Wqd8BfP9IjsO0QbE2zZMcwSO5bAi5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUx +XOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2hO0j9n0Hq0V+09+zv+mKts2o +omcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+TX3EJIrduPuoc +A06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW +WL1WMRJOEcgh4LMRkWXbtKaIOM5V +-----END CERTIFICATE----- + +# Issuer: O=Chunghwa Telecom Co., Ltd. OU=ePKI Root Certification Authority +# Subject: O=Chunghwa Telecom Co., Ltd. OU=ePKI Root Certification Authority +# Label: "ePKI Root Certification Authority" +# Serial: 28956088682735189655030529057352760477 +# MD5 Fingerprint: 1b:2e:00:ca:26:06:90:3d:ad:fe:6f:15:68:d3:6b:b3 +# SHA1 Fingerprint: 67:65:0d:f1:7e:8e:7e:5b:82:40:a4:f4:56:4b:cf:e2:3d:69:c6:f0 +# SHA256 Fingerprint: c0:a6:f4:dc:63:a2:4b:fd:cf:54:ef:2a:6a:08:2a:0a:72:de:35:80:3e:2f:f5:ff:52:7a:e5:d8:72:06:df:d5 +-----BEGIN CERTIFICATE----- +MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBe +MQswCQYDVQQGEwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0 +ZC4xKjAoBgNVBAsMIWVQS0kgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe +Fw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMxMjdaMF4xCzAJBgNVBAYTAlRXMSMw +IQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEqMCgGA1UECwwhZVBL +SSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEF +AAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAH +SyZbCUNsIZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAh +ijHyl3SJCRImHJ7K2RKilTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3X +DZoTM1PRYfl61dd4s5oz9wCGzh1NlDivqOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1 +TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX12ruOzjjK9SXDrkb5wdJ +fzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0OWQqraffA +sgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uU +WH1+ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLS +nT0IFaUQAS2zMnaolQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pH +dmX2Os+PYhcZewoozRrSgx4hxyy/vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJip +NiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXiZo1jDiVN1Rmy5nk3pyKdVDEC +AwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/QkqiMAwGA1UdEwQF +MAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH +ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGB +uvl2ICO1J2B01GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6Yl +PwZpVnPDimZI+ymBV3QGypzqKOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkP +JXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdVxrsStZf0X4OFunHB2WyBEXYKCrC/ +gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEPNXubrjlpC2JgQCA2 +j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+rGNm6 +5ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUB +o2M3IUxExJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS +/jQ6fbjpKdx2qcgw+BRxgMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2z +Gp1iro2C6pSe3VkQw63d4k3jMdXH7OjysP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTE +W9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmODBCEIZ43ygknQW/2xzQ+D +hNQ+IIX3Sj0rnP0qCglN6oH4EZw= +-----END CERTIFICATE----- + +# Issuer: O=certSIGN OU=certSIGN ROOT CA +# Subject: O=certSIGN OU=certSIGN ROOT CA +# Label: "certSIGN ROOT CA" +# Serial: 35210227249154 +# MD5 Fingerprint: 18:98:c0:d6:e9:3a:fc:f9:b0:f5:0c:f7:4b:01:44:17 +# SHA1 Fingerprint: fa:b7:ee:36:97:26:62:fb:2d:b0:2a:f6:bf:03:fd:e8:7c:4b:2f:9b +# SHA256 Fingerprint: ea:a9:62:c4:fa:4a:6b:af:eb:e4:15:19:6d:35:1c:cd:88:8d:4f:53:f3:fa:8a:e6:d7:c4:66:a9:4e:60:42:bb +-----BEGIN CERTIFICATE----- +MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYT +AlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBD +QTAeFw0wNjA3MDQxNzIwMDRaFw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJP +MREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTCC +ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7IJUqOtdu0KBuqV5Do +0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHHrfAQ +UySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5d +RdY4zTW2ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQ +OA7+j0xbm0bqQfWwCHTD0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwv +JoIQ4uNllAoEwF73XVv4EOLQunpL+943AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08C +AwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAcYwHQYDVR0O +BBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IBAQA+0hyJ +LjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecY +MnQ8SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ +44gx+FkagQnIl6Z0x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6I +Jd1hJyMctTEHBDa0GpC9oHRxUIltvBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNw +i/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7NzTogVZ96edhBiIL5VaZVDADlN +9u6wWk5JRFRYX0KD +-----END CERTIFICATE----- + +# Issuer: CN=GeoTrust Primary Certification Authority - G3 O=GeoTrust Inc. OU=(c) 2008 GeoTrust Inc. - For authorized use only +# Subject: CN=GeoTrust Primary Certification Authority - G3 O=GeoTrust Inc. OU=(c) 2008 GeoTrust Inc. - For authorized use only +# Label: "GeoTrust Primary Certification Authority - G3" +# Serial: 28809105769928564313984085209975885599 +# MD5 Fingerprint: b5:e8:34:36:c9:10:44:58:48:70:6d:2e:83:d4:b8:05 +# SHA1 Fingerprint: 03:9e:ed:b8:0b:e7:a0:3c:69:53:89:3b:20:d2:d9:32:3a:4c:2a:fd +# SHA256 Fingerprint: b4:78:b8:12:25:0d:f8:78:63:5c:2a:a7:ec:7d:15:5e:aa:62:5e:e8:29:16:e2:cd:29:43:61:88:6c:d1:fb:d4 +-----BEGIN CERTIFICATE----- +MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCB +mDELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsT +MChjKSAyMDA4IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s +eTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhv +cml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIzNTk1OVowgZgxCzAJ +BgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg +MjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0 +BgNVBAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg +LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz ++uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5jK/BGvESyiaHAKAxJcCGVn2TAppMSAmUm +hsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdEc5IiaacDiGydY8hS2pgn +5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3CIShwiP/W +JmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exAL +DmKudlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZC +huOl1UcCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYw +HQYDVR0OBBYEFMR5yo6hTgMdHNxr2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IB +AQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9cr5HqQ6XErhK8WTTOd8lNNTB +zU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbEAp7aDHdlDkQN +kv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD +AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUH +SJsMC8tJP33st/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2G +spki4cErx5z481+oghLrGREt +-----END CERTIFICATE----- + +# Issuer: CN=thawte Primary Root CA - G2 O=thawte, Inc. OU=(c) 2007 thawte, Inc. - For authorized use only +# Subject: CN=thawte Primary Root CA - G2 O=thawte, Inc. OU=(c) 2007 thawte, Inc. - For authorized use only +# Label: "thawte Primary Root CA - G2" +# Serial: 71758320672825410020661621085256472406 +# MD5 Fingerprint: 74:9d:ea:60:24:c4:fd:22:53:3e:cc:3a:72:d9:29:4f +# SHA1 Fingerprint: aa:db:bc:22:23:8f:c4:01:a1:27:bb:38:dd:f4:1d:db:08:9e:f0:12 +# SHA256 Fingerprint: a4:31:0d:50:af:18:a6:44:71:90:37:2a:86:af:af:8b:95:1f:fb:43:1d:83:7f:1e:56:88:b4:59:71:ed:15:57 +-----BEGIN CERTIFICATE----- +MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDEL +MAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMp +IDIwMDcgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAi +BgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMjAeFw0wNzExMDUwMDAw +MDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh +d3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBGb3Ig +YXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9v +dCBDQSAtIEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/ +BebfowJPDQfGAFG6DAJSLSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6 +papu+7qzcMBniKI11KOasf2twu8x+qi58/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8E +BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUmtgAMADna3+FGO6Lts6K +DPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUNG4k8VIZ3 +KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41ox +XZ3Krr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg== +-----END CERTIFICATE----- + +# Issuer: CN=thawte Primary Root CA - G3 O=thawte, Inc. OU=Certification Services Division/(c) 2008 thawte, Inc. - For authorized use only +# Subject: CN=thawte Primary Root CA - G3 O=thawte, Inc. OU=Certification Services Division/(c) 2008 thawte, Inc. - For authorized use only +# Label: "thawte Primary Root CA - G3" +# Serial: 127614157056681299805556476275995414779 +# MD5 Fingerprint: fb:1b:5d:43:8a:94:cd:44:c6:76:f2:43:4b:47:e7:31 +# SHA1 Fingerprint: f1:8b:53:8d:1b:e9:03:b6:a6:f0:56:43:5b:17:15:89:ca:f3:6b:f2 +# SHA256 Fingerprint: 4b:03:f4:58:07:ad:70:f2:1b:fc:2c:ae:71:c9:fd:e4:60:4c:06:4c:f5:ff:b6:86:ba:e5:db:aa:d7:fd:d3:4c +-----BEGIN CERTIFICATE----- +MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCB +rjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf +Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw +MDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNV +BAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0wODA0MDIwMDAwMDBa +Fw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhhd3Rl +LCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9u +MTgwNgYDVQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXpl +ZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEcz +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsr8nLPvb2FvdeHsbnndm +gcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2AtP0LMqmsywCPLLEHd5N/8 +YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC+BsUa0Lf +b1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS9 +9irY7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2S +zhkGcuYMXDhpxwTWvGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUk +OQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNV +HQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJKoZIhvcNAQELBQADggEBABpA +2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweKA3rD6z8KLFIW +oCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu +t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7c +KUGRIjxpp7sC8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fM +m7v/OeZWYdMKp8RcTGB7BXcmer/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZu +MdRAGmI0Nj81Aa6sY6A= +-----END CERTIFICATE----- + +# Issuer: CN=GeoTrust Primary Certification Authority - G2 O=GeoTrust Inc. OU=(c) 2007 GeoTrust Inc. - For authorized use only +# Subject: CN=GeoTrust Primary Certification Authority - G2 O=GeoTrust Inc. OU=(c) 2007 GeoTrust Inc. - For authorized use only +# Label: "GeoTrust Primary Certification Authority - G2" +# Serial: 80682863203381065782177908751794619243 +# MD5 Fingerprint: 01:5e:d8:6b:bd:6f:3d:8e:a1:31:f8:12:e0:98:73:6a +# SHA1 Fingerprint: 8d:17:84:d5:37:f3:03:7d:ec:70:fe:57:8b:51:9a:99:e6:10:d7:b0 +# SHA256 Fingerprint: 5e:db:7a:c4:3b:82:a0:6a:87:61:e8:d7:be:49:79:eb:f2:61:1f:7d:d7:9b:f9:1c:1c:6b:56:6a:21:9e:d7:66 +-----BEGIN CERTIFICATE----- +MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDEL +MAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChj +KSAyMDA3IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2 +MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 +eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1OVowgZgxCzAJBgNV +BAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykgMjAw +NyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNV +BAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH +MjB2MBAGByqGSM49AgEGBSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcL +So17VDs6bl8VAsBQps8lL33KSLjHUGMcKiEIfJo22Av+0SbFWDEwKCXzXV2juLal +tJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO +BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+EVXVMAoG +CCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGT +qQ7mndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBucz +rD6ogRLQy7rQkgu2npaqBA+K +-----END CERTIFICATE----- + +# Issuer: CN=VeriSign Universal Root Certification Authority O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2008 VeriSign, Inc. - For authorized use only +# Subject: CN=VeriSign Universal Root Certification Authority O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2008 VeriSign, Inc. - For authorized use only +# Label: "VeriSign Universal Root Certification Authority" +# Serial: 85209574734084581917763752644031726877 +# MD5 Fingerprint: 8e:ad:b5:01:aa:4d:81:e4:8c:1d:d1:e1:14:00:95:19 +# SHA1 Fingerprint: 36:79:ca:35:66:87:72:30:4d:30:a5:fb:87:3b:0f:a7:7b:b7:0d:54 +# SHA256 Fingerprint: 23:99:56:11:27:a5:71:25:de:8c:ef:ea:61:0d:df:2f:a0:78:b5:c8:06:7f:4e:82:82:90:bf:b8:60:e8:4b:3c +-----BEGIN CERTIFICATE----- +MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCB +vTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL +ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJp +U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MTgwNgYDVQQDEy9W +ZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe +Fw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJVUzEX +MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0 +IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9y +IGF1dGhvcml6ZWQgdXNlIG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNh +bCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj1mCOkdeQmIN65lgZOIzF +9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGPMiJhgsWH +H26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+H +LL729fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN +/BMReYTtXlT2NJ8IAfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPT +rJ9VAMf2CGqUuV/c4DPxhGD5WycRtPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1Ud +EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0GCCsGAQUFBwEMBGEwX6FdoFsw +WTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2Oa8PPgGrUSBgs +exkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud +DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4 +sAPmLGd75JR3Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+ +seQxIcaBlVZaDrHC1LGmWazxY8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz +4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTxP/jgdFcrGJ2BtMQo2pSXpXDrrB2+ +BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+PwGZsY6rp2aQW9IHR +lRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4mJO3 +7M2CYfE45k+XmCpajQ== +-----END CERTIFICATE----- + +# Issuer: CN=VeriSign Class 3 Public Primary Certification Authority - G4 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2007 VeriSign, Inc. - For authorized use only +# Subject: CN=VeriSign Class 3 Public Primary Certification Authority - G4 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2007 VeriSign, Inc. - For authorized use only +# Label: "VeriSign Class 3 Public Primary Certification Authority - G4" +# Serial: 63143484348153506665311985501458640051 +# MD5 Fingerprint: 3a:52:e1:e7:fd:6f:3a:e3:6f:f3:6f:99:1b:f9:22:41 +# SHA1 Fingerprint: 22:d5:d8:df:8f:02:31:d1:8d:f7:9d:b7:cf:8a:2d:64:c9:3f:6c:3a +# SHA256 Fingerprint: 69:dd:d7:ea:90:bb:57:c9:3e:13:5d:c8:5e:a6:fc:d5:48:0b:60:32:39:bd:c4:54:fc:75:8b:2a:26:cf:7f:79 +-----BEGIN CERTIFICATE----- +MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjEL +MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW +ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2ln +biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp +U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y +aXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjELMAkG +A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJp +U2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwg +SW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2ln +biBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8Utpkmw4tXNherJI9/gHm +GUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGzrl0Bp3ve +fLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUw +AwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJ +aW1hZ2UvZ2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYj +aHR0cDovL2xvZ28udmVyaXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMW +kf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMDA2gAMGUCMGYhDBgmYFo4e1ZC +4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIxAJw9SDkjOVga +FRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA== +-----END CERTIFICATE----- + +# Issuer: CN=NetLock Arany (Class Gold) F\u0151tan\xfas\xedtv\xe1ny O=NetLock Kft. OU=Tan\xfas\xedtv\xe1nykiad\xf3k (Certification Services) +# Subject: CN=NetLock Arany (Class Gold) F\u0151tan\xfas\xedtv\xe1ny O=NetLock Kft. OU=Tan\xfas\xedtv\xe1nykiad\xf3k (Certification Services) +# Label: "NetLock Arany (Class Gold) F\u0151tan\xfas\xedtv\xe1ny" +# Serial: 80544274841616 +# MD5 Fingerprint: c5:a1:b7:ff:73:dd:d6:d7:34:32:18:df:fc:3c:ad:88 +# SHA1 Fingerprint: 06:08:3f:59:3f:15:a1:04:a0:69:a4:6b:a9:03:d0:06:b7:97:09:91 +# SHA256 Fingerprint: 6c:61:da:c3:a2:de:f0:31:50:6b:e0:36:d2:a6:fe:40:19:94:fb:d1:3d:f9:c8:d4:66:59:92:74:c4:46:ec:98 +-----BEGIN CERTIFICATE----- +MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQG +EwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3 +MDUGA1UECwwuVGFuw7pzw610dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNl +cnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBBcmFueSAoQ2xhc3MgR29sZCkgRsWR +dGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgxMjA2MTUwODIxWjCB +pzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxOZXRM +b2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlm +aWNhdGlvbiBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNz +IEdvbGQpIEbFkXRhbsO6c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEAxCRec75LbRTDofTjl5Bu0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrT +lF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw/HpYzY6b7cNGbIRwXdrz +AZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAkH3B5r9s5 +VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRG +ILdwfzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2 +BJtr+UBdADTHLpl1neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAG +AQH/AgEEMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2M +U9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwWqZw8UQCgwBEIBaeZ5m8BiFRh +bvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTtaYtOUZcTh5m2C ++C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC +bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2F +uLjbvrW5KfnaNwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2 +XjG4Kvte9nHfRCaexOYNkbQudZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E= +-----END CERTIFICATE----- + +# Issuer: CN=Staat der Nederlanden Root CA - G2 O=Staat der Nederlanden +# Subject: CN=Staat der Nederlanden Root CA - G2 O=Staat der Nederlanden +# Label: "Staat der Nederlanden Root CA - G2" +# Serial: 10000012 +# MD5 Fingerprint: 7c:a5:0f:f8:5b:9a:7d:6d:30:ae:54:5a:e3:42:a2:8a +# SHA1 Fingerprint: 59:af:82:79:91:86:c7:b4:75:07:cb:cf:03:57:46:eb:04:dd:b7:16 +# SHA256 Fingerprint: 66:8c:83:94:7d:a6:3b:72:4b:ec:e1:74:3c:31:a0:e6:ae:d0:db:8e:c5:b3:1b:e3:77:bb:78:4f:91:b6:71:6f +-----BEGIN CERTIFICATE----- +MIIFyjCCA7KgAwIBAgIEAJiWjDANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJO +TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFh +dCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQSAtIEcyMB4XDTA4MDMyNjExMTgxN1oX +DTIwMDMyNTExMDMxMFowWjELMAkGA1UEBhMCTkwxHjAcBgNVBAoMFVN0YWF0IGRl +ciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5lZGVybGFuZGVuIFJv +b3QgQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMVZ5291 +qj5LnLW4rJ4L5PnZyqtdj7U5EILXr1HgO+EASGrP2uEGQxGZqhQlEq0i6ABtQ8Sp +uOUfiUtnvWFI7/3S4GCI5bkYYCjDdyutsDeqN95kWSpGV+RLufg3fNU254DBtvPU +Z5uW6M7XxgpT0GtJlvOjCwV3SPcl5XCsMBQgJeN/dVrlSPhOewMHBPqCYYdu8DvE +pMfQ9XQ+pV0aCPKbJdL2rAQmPlU6Yiile7Iwr/g3wtG61jj99O9JMDeZJiFIhQGp +5Rbn3JBV3w/oOM2ZNyFPXfUib2rFEhZgF1XyZWampzCROME4HYYEhLoaJXhena/M +UGDWE4dS7WMfbWV9whUYdMrhfmQpjHLYFhN9C0lK8SgbIHRrxT3dsKpICT0ugpTN +GmXZK4iambwYfp/ufWZ8Pr2UuIHOzZgweMFvZ9C+X+Bo7d7iscksWXiSqt8rYGPy +5V6548r6f1CGPqI0GAwJaCgRHOThuVw+R7oyPxjMW4T182t0xHJ04eOLoEq9jWYv +6q012iDTiIJh8BIitrzQ1aTsr1SIJSQ8p22xcik/Plemf1WvbibG/ufMQFxRRIEK +eN5KzlW/HdXZt1bv8Hb/C3m1r737qWmRRpdogBQ2HbN/uymYNqUg+oJgYjOk7Na6 +B6duxc8UpufWkjTYgfX8HV2qXB72o007uPc5AgMBAAGjgZcwgZQwDwYDVR0TAQH/ +BAUwAwEB/zBSBgNVHSAESzBJMEcGBFUdIAAwPzA9BggrBgEFBQcCARYxaHR0cDov +L3d3dy5wa2lvdmVyaGVpZC5ubC9wb2xpY2llcy9yb290LXBvbGljeS1HMjAOBgNV +HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJFoMocVHYnitfGsNig0jQt8YojrMA0GCSqG +SIb3DQEBCwUAA4ICAQCoQUpnKpKBglBu4dfYszk78wIVCVBR7y29JHuIhjv5tLyS +CZa59sCrI2AGeYwRTlHSeYAz+51IvuxBQ4EffkdAHOV6CMqqi3WtFMTC6GY8ggen +5ieCWxjmD27ZUD6KQhgpxrRW/FYQoAUXvQwjf/ST7ZwaUb7dRUG/kSS0H4zpX897 +IZmflZ85OkYcbPnNe5yQzSipx6lVu6xiNGI1E0sUOlWDuYaNkqbG9AclVMwWVxJK +gnjIFNkXgiYtXSAfea7+1HAWFpWD2DU5/1JddRwWxRNVz0fMdWVSSt7wsKfkCpYL ++63C4iWEst3kvX5ZbJvw8NjnyvLplzh+ib7M+zkXYT9y2zqR2GUBGR2tUKRXCnxL +vJxxcypFURmFzI79R6d0lR2o0a9OF7FpJsKqeFdbxU2n5Z4FF5TKsl+gSRiNNOkm +bEgeqmiSBeGCc1qb3AdbCG19ndeNIdn8FCCqwkXfP+cAslHkwvgFuXkajDTznlvk +N1trSt8sV4pAWja63XVECDdCcAz+3F4hoKOKwJCcaNpQ5kUQR3i2TtJlycM33+FC +Y7BXN0Ute4qcvwXqZVUz9zkQxSgqIXobisQk+T8VyJoVIPVVYpbtbZNQvOSqeK3Z +ywplh6ZmwcSBo3c6WB4L7oOLnR7SUqTMHW+wmG2UMbX4cQrcufx9MmDm66+KAQ== +-----END CERTIFICATE----- + +# Issuer: CN=Hongkong Post Root CA 1 O=Hongkong Post +# Subject: CN=Hongkong Post Root CA 1 O=Hongkong Post +# Label: "Hongkong Post Root CA 1" +# Serial: 1000 +# MD5 Fingerprint: a8:0d:6f:39:78:b9:43:6d:77:42:6d:98:5a:cc:23:ca +# SHA1 Fingerprint: d6:da:a8:20:8d:09:d2:15:4d:24:b5:2f:cb:34:6e:b2:58:b2:8a:58 +# SHA256 Fingerprint: f9:e6:7d:33:6c:51:00:2a:c0:54:c6:32:02:2d:66:dd:a2:e7:e3:ff:f1:0a:d0:61:ed:31:d8:bb:b4:10:cf:b2 +-----BEGIN CERTIFICATE----- +MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsx +FjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3Qg +Um9vdCBDQSAxMB4XDTAzMDUxNTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkG +A1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdr +b25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1ApzQ +jVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEn +PzlTCeqrauh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjh +ZY4bXSNmO7ilMlHIhqqhqZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9 +nnV0ttgCXjqQesBCNnLsak3c78QA3xMYV18meMjWCnl3v/evt3a5pQuEF10Q6m/h +q5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNVHRMBAf8ECDAGAQH/AgED +MA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7ih9legYsC +mEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI3 +7piol7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clB +oiMBdDhViw+5LmeiIAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJs +EhTkYY2sEJCehFC78JZvRZ+K88psT/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpO +fMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilTc4afU9hDDl3WY4JxHYB0yvbi +AmvZWg== +-----END CERTIFICATE----- + +# Issuer: CN=SecureSign RootCA11 O=Japan Certification Services, Inc. +# Subject: CN=SecureSign RootCA11 O=Japan Certification Services, Inc. +# Label: "SecureSign RootCA11" +# Serial: 1 +# MD5 Fingerprint: b7:52:74:e2:92:b4:80:93:f2:75:e4:cc:d7:f2:ea:26 +# SHA1 Fingerprint: 3b:c4:9f:48:f8:f3:73:a0:9c:1e:bd:f8:5b:b1:c3:65:c7:d8:11:b3 +# SHA256 Fingerprint: bf:0f:ee:fb:9e:3a:58:1a:d5:f9:e9:db:75:89:98:57:43:d2:61:08:5c:4d:31:4f:6f:5d:72:59:aa:42:16:12 +-----BEGIN CERTIFICATE----- +MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDEr +MCkGA1UEChMiSmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoG +A1UEAxMTU2VjdXJlU2lnbiBSb290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0 +MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSswKQYDVQQKEyJKYXBhbiBDZXJ0aWZp +Y2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1cmVTaWduIFJvb3RD +QTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvLTJsz +i1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8 +h9uuywGOwvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOV +MdrAG/LuYpmGYz+/3ZMqg6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9 +UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rPO7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni +8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitAbpSACW22s293bzUIUPsC +h8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZXt94wDgYD +VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEB +AKChOBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xm +KbabfSVSSUOrTC4rbnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQ +X5Ucv+2rIrVls4W6ng+4reV6G4pQOh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWr +QbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01y8hSyn+B/tlr0/cR7SXf+Of5 +pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061lgeLKBObjBmN +QSdJQO7e5iNEOdyhIta6A/I= +-----END CERTIFICATE----- + +# Issuer: CN=Microsec e-Szigno Root CA 2009 O=Microsec Ltd. +# Subject: CN=Microsec e-Szigno Root CA 2009 O=Microsec Ltd. +# Label: "Microsec e-Szigno Root CA 2009" +# Serial: 14014712776195784473 +# MD5 Fingerprint: f8:49:f4:03:bc:44:2d:83:be:48:69:7d:29:64:fc:b1 +# SHA1 Fingerprint: 89:df:74:fe:5c:f4:0f:4a:80:f9:e3:37:7d:54:da:91:e1:01:31:8e +# SHA256 Fingerprint: 3c:5f:81:fe:a5:fa:b8:2c:64:bf:a2:ea:ec:af:cd:e8:e0:77:fc:86:20:a7:ca:e5:37:16:3d:f3:6e:db:f3:78 +-----BEGIN CERTIFICATE----- +MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYD +VQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0 +ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0G +CSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTAeFw0wOTA2MTYxMTMwMThaFw0y +OTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3Qx +FjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3pp +Z25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o +dTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvP +kd6mJviZpWNwrZuuyjNAfW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tc +cbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG0IMZfcChEhyVbUr02MelTTMuhTlAdX4U +fIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKApxn1ntxVUwOXewdI/5n7 +N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm1HxdrtbC +xkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1 ++rUCAwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G +A1UdDgQWBBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPM +Pcu1SCOhGnqmKrs0aDAbBgNVHREEFDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqG +SIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0olZMEyL/azXm4Q5DwpL7v8u8h +mLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfXI/OMn74dseGk +ddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775 +tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c +2Pm2G2JwCz02yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5t +HMN1Rq41Bab2XD0h7lbwyYIiLXpUq3DDfSJlgnCW +-----END CERTIFICATE----- + +# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R3 +# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R3 +# Label: "GlobalSign Root CA - R3" +# Serial: 4835703278459759426209954 +# MD5 Fingerprint: c5:df:b8:49:ca:05:13:55:ee:2d:ba:1a:c3:3e:b0:28 +# SHA1 Fingerprint: d6:9b:56:11:48:f0:1c:77:c5:45:78:c1:09:26:df:5b:85:69:76:ad +# SHA256 Fingerprint: cb:b5:22:d7:b7:f1:27:ad:6a:01:13:86:5b:df:1c:d4:10:2e:7d:07:59:af:63:5a:7c:f4:72:0d:c9:63:c5:3b +-----BEGIN CERTIFICATE----- +MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4G +A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNp +Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4 +MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEG +A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWtiHL8 +RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsT +gHeMCOFJ0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmm +KPZpO/bLyCiR5Z2KYVc3rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zd +QQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjlOCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZ +XriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2xmmFghcCAwEAAaNCMEAw +DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI/wS3+o +LkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZU +RUm7lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMp +jjM5RcOO5LlXbKr8EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK +6fBdRoyV3XpYKBovHd7NADdBj+1EbddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQX +mcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18YIvDQVETI53O9zJrlAGomecs +Mx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7rkpeDMdmztcpH +WD9f +-----END CERTIFICATE----- + +# Issuer: CN=Autoridad de Certificacion Firmaprofesional CIF A62634068 +# Subject: CN=Autoridad de Certificacion Firmaprofesional CIF A62634068 +# Label: "Autoridad de Certificacion Firmaprofesional CIF A62634068" +# Serial: 6047274297262753887 +# MD5 Fingerprint: 73:3a:74:7a:ec:bb:a3:96:a6:c2:e4:e2:c8:9b:c0:c3 +# SHA1 Fingerprint: ae:c5:fb:3f:c8:e1:bf:c4:e5:4f:03:07:5a:9a:e8:00:b7:f7:b6:fa +# SHA256 Fingerprint: 04:04:80:28:bf:1f:28:64:d4:8f:9a:d4:d8:32:94:36:6a:82:88:56:55:3f:3b:14:30:3f:90:14:7f:5d:40:ef +-----BEGIN CERTIFICATE----- +MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UE +BhMCRVMxQjBABgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1h +cHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEy +MzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIwQAYDVQQDDDlBdXRvcmlkYWQgZGUg +Q2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBBNjI2MzQwNjgwggIi +MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDDUtd9 +thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQM +cas9UX4PB99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefG +L9ItWY16Ck6WaVICqjaY7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15i +NA9wBj4gGFrO93IbJWyTdBSTo3OxDqqHECNZXyAFGUftaI6SEspd/NYrspI8IM/h +X68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyIplD9amML9ZMWGxmPsu2b +m8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctXMbScyJCy +Z/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirja +EbsXLZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/T +KI8xWVvTyQKmtFLKbpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF +6NkBiDkal4ZkQdU7hwxu+g/GvUgUvzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVh +OSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1UdEwEB/wQIMAYBAf8CAQEwDgYD +VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNHDhpkLzCBpgYD +VR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp +cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBv +ACAAZABlACAAbABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBl +AGwAbwBuAGEAIAAwADgAMAAxADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF +661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx51tkljYyGOylMnfX40S2wBEqgLk9 +am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qkR71kMrv2JYSiJ0L1 +ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaPT481 +PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS +3a/DTg4fJl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5k +SeTy36LssUzAKh3ntLFlosS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF +3dvd6qJ2gHN99ZwExEWN57kci57q13XRcrHedUTnQn3iV2t93Jm8PYMo6oCTjcVM +ZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoRsaS8I8nkvof/uZS2+F0g +StRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTDKCOM/icz +Q0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQB +jLMi6Et8Vcad+qMUu2WFbm5PEn4KPJ2V +-----END CERTIFICATE----- + +# Issuer: CN=Izenpe.com O=IZENPE S.A. +# Subject: CN=Izenpe.com O=IZENPE S.A. +# Label: "Izenpe.com" +# Serial: 917563065490389241595536686991402621 +# MD5 Fingerprint: a6:b0:cd:85:80:da:5c:50:34:a3:39:90:2f:55:67:73 +# SHA1 Fingerprint: 2f:78:3d:25:52:18:a7:4a:65:39:71:b5:2c:a2:9c:45:15:6f:e9:19 +# SHA256 Fingerprint: 25:30:cc:8e:98:32:15:02:ba:d9:6f:9b:1f:ba:1b:09:9e:2d:29:9e:0f:45:48:bb:91:4f:36:3b:c0:d4:53:1f +-----BEGIN CERTIFICATE----- +MIIF8TCCA9mgAwIBAgIQALC3WhZIX7/hy/WL1xnmfTANBgkqhkiG9w0BAQsFADA4 +MQswCQYDVQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6 +ZW5wZS5jb20wHhcNMDcxMjEzMTMwODI4WhcNMzcxMjEzMDgyNzI1WjA4MQswCQYD +VQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6ZW5wZS5j +b20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDJ03rKDx6sp4boFmVq +scIbRTJxldn+EFvMr+eleQGPicPK8lVx93e+d5TzcqQsRNiekpsUOqHnJJAKClaO +xdgmlOHZSOEtPtoKct2jmRXagaKH9HtuJneJWK3W6wyyQXpzbm3benhB6QiIEn6H +LmYRY2xU+zydcsC8Lv/Ct90NduM61/e0aL6i9eOBbsFGb12N4E3GVFWJGjMxCrFX +uaOKmMPsOzTFlUFpfnXCPCDFYbpRR6AgkJOhkEvzTnyFRVSa0QUmQbC1TR0zvsQD +yCV8wXDbO/QJLVQnSKwv4cSsPsjLkkxTOTcj7NMB+eAJRE1NZMDhDVqHIrytG6P+ +JrUV86f8hBnp7KGItERphIPzidF0BqnMC9bC3ieFUCbKF7jJeodWLBoBHmy+E60Q +rLUk9TiRodZL2vG70t5HtfG8gfZZa88ZU+mNFctKy6lvROUbQc/hhqfK0GqfvEyN +BjNaooXlkDWgYlwWTvDjovoDGrQscbNYLN57C9saD+veIR8GdwYDsMnvmfzAuU8L +hij+0rnq49qlw0dpEuDb8PYZi+17cNcC1u2HGCgsBCRMd+RIihrGO5rUD8r6ddIB +QFqNeb+Lz0vPqhbBleStTIo+F5HUsWLlguWABKQDfo2/2n+iD5dPDNMN+9fR5XJ+ +HMh3/1uaD7euBUbl8agW7EekFwIDAQABo4H2MIHzMIGwBgNVHREEgagwgaWBD2lu +Zm9AaXplbnBlLmNvbaSBkTCBjjFHMEUGA1UECgw+SVpFTlBFIFMuQS4gLSBDSUYg +QTAxMzM3MjYwLVJNZXJjLlZpdG9yaWEtR2FzdGVpeiBUMTA1NSBGNjIgUzgxQzBB +BgNVBAkMOkF2ZGEgZGVsIE1lZGl0ZXJyYW5lbyBFdG9yYmlkZWEgMTQgLSAwMTAx +MCBWaXRvcmlhLUdhc3RlaXowDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AQYwHQYDVR0OBBYEFB0cZQ6o8iV7tJHP5LGx5r1VdGwFMA0GCSqGSIb3DQEBCwUA +A4ICAQB4pgwWSp9MiDrAyw6lFn2fuUhfGI8NYjb2zRlrrKvV9pF9rnHzP7MOeIWb +laQnIUdCSnxIOvVFfLMMjlF4rJUT3sb9fbgakEyrkgPH7UIBzg/YsfqikuFgba56 +awmqxinuaElnMIAkejEWOVt+8Rwu3WwJrfIxwYJOubv5vr8qhT/AQKM6WfxZSzwo +JNu0FXWuDYi6LnPAvViH5ULy617uHjAimcs30cQhbIHsvm0m5hzkQiCeR7Csg1lw +LDXWrzY0tM07+DKo7+N4ifuNRSzanLh+QBxh5z6ikixL8s36mLYp//Pye6kfLqCT +VyvehQP5aTfLnnhqBbTFMXiJ7HqnheG5ezzevh55hM6fcA5ZwjUukCox2eRFekGk +LhObNA5me0mrZJfQRsN5nXJQY6aYWwa9SG3YOYNw6DXwBdGqvOPbyALqfP2C2sJb +UjWumDqtujWTI6cfSN01RpiyEGjkpTHCClguGYEQyVB1/OpaFs4R1+7vUIgtYf8/ +QnMFlEPVjjxOAToZpR9GTnfQXeWBIiGH/pR9hNiTrdZoQ0iy2+tzJOeRf1SktoA+ +naM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1ZWrOZyGls +QyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw== +-----END CERTIFICATE----- + +# Issuer: CN=Chambers of Commerce Root - 2008 O=AC Camerfirma S.A. +# Subject: CN=Chambers of Commerce Root - 2008 O=AC Camerfirma S.A. +# Label: "Chambers of Commerce Root - 2008" +# Serial: 11806822484801597146 +# MD5 Fingerprint: 5e:80:9e:84:5a:0e:65:0b:17:02:f3:55:18:2a:3e:d7 +# SHA1 Fingerprint: 78:6a:74:ac:76:ab:14:7f:9c:6a:30:50:ba:9e:a8:7e:fe:9a:ce:3c +# SHA256 Fingerprint: 06:3e:4a:fa:c4:91:df:d3:32:f3:08:9b:85:42:e9:46:17:d8:93:d7:fe:94:4e:10:a7:93:7e:e2:9d:96:93:c0 +-----BEGIN CERTIFICATE----- +MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYD +VQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0 +IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3 +MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xKTAnBgNVBAMTIENoYW1iZXJz +IG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEyMjk1MFoXDTM4MDcz +MTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBj +dXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIw +EAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEp +MCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0G +CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW9 +28sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKAXuFixrYp4YFs8r/lfTJq +VKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorjh40G072Q +DuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR +5gN/ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfL +ZEFHcpOrUMPrCXZkNNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05a +Sd+pZgvMPMZ4fKecHePOjlO+Bd5gD2vlGts/4+EhySnB8esHnFIbAURRPHsl18Tl +UlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331lubKgdaX8ZSD6e2wsWsSaR6s ++12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ0wlf2eOKNcx5 +Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj +ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAx +hduub+84Mxh2EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNV +HQ4EFgQU+SSsD7K1+HnA+mCIG8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1 ++HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpN +YWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29t +L2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVy +ZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAt +IDIwMDiCCQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRV +HSAAMCowKAYIKwYBBQUHAgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20w +DQYJKoZIhvcNAQEFBQADggIBAJASryI1wqM58C7e6bXpeHxIvj99RZJe6dqxGfwW +PJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH3qLPaYRgM+gQDROpI9CF +5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbURWpGqOt1 +glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaH +FoI6M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2 +pSB7+R5KBWIBpih1YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MD +xvbxrN8y8NmBGuScvfaAFPDRLLmF9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QG +tjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcKzBIKinmwPQN/aUv0NCB9szTq +jktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvGnrDQWzilm1De +fhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg +OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZ +d0jQ +-----END CERTIFICATE----- + +# Issuer: CN=Global Chambersign Root - 2008 O=AC Camerfirma S.A. +# Subject: CN=Global Chambersign Root - 2008 O=AC Camerfirma S.A. +# Label: "Global Chambersign Root - 2008" +# Serial: 14541511773111788494 +# MD5 Fingerprint: 9e:80:ff:78:01:0c:2e:c1:36:bd:fe:96:90:6e:08:f3 +# SHA1 Fingerprint: 4a:bd:ee:ec:95:0d:35:9c:89:ae:c7:52:a1:2c:5b:29:f6:d6:aa:0c +# SHA256 Fingerprint: 13:63:35:43:93:34:a7:69:80:16:a0:d3:24:de:72:28:4e:07:9d:7b:52:20:bb:8f:bd:74:78:16:ee:be:ba:ca +-----BEGIN CERTIFICATE----- +MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYD +VQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0 +IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3 +MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD +aGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMxNDBaFw0zODA3MzEx +MjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3Vy +cmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAG +A1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAl +BgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZI +hvcNAQEBBQADggIPADCCAgoCggIBAMDfVtPkOpt2RbQT2//BthmLN0EYlVJH6xed +KYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXfXjaOcNFccUMd2drvXNL7 +G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0ZJJ0YPP2 +zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4 +ddPB/gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyG +HoiMvvKRhI9lNNgATH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2 +Id3UwD2ln58fQ1DJu7xsepeY7s2MH/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3V +yJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfeOx2YItaswTXbo6Al/3K1dh3e +beksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSFHTynyQbehP9r +6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh +wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsog +zCtLkykPAgMBAAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQW +BBS5CcqcHtvTbDprru1U8VuTBjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDpr +ru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UEBhMCRVUxQzBBBgNVBAcTOk1hZHJp +ZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJmaXJtYS5jb20vYWRk +cmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJmaXJt +YSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiC +CQDJzdPp1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCow +KAYIKwYBBQUHAgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZI +hvcNAQEFBQADggIBAICIf3DekijZBZRG/5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZ +UohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6ReAJ3spED8IXDneRRXoz +X1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/sdZ7LoR/x +fxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVz +a2Mg9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yyd +Yhz2rXzdpjEetrHHfoUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMd +SqlapskD7+3056huirRXhOukP9DuqqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9O +AP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETrP3iZ8ntxPjzxmKfFGBI/5rso +M0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVqc5iJWzouE4ge +v8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z +09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B +-----END CERTIFICATE----- + +# Issuer: CN=Go Daddy Root Certificate Authority - G2 O=GoDaddy.com, Inc. +# Subject: CN=Go Daddy Root Certificate Authority - G2 O=GoDaddy.com, Inc. +# Label: "Go Daddy Root Certificate Authority - G2" +# Serial: 0 +# MD5 Fingerprint: 80:3a:bc:22:c1:e6:fb:8d:9b:3b:27:4a:32:1b:9a:01 +# SHA1 Fingerprint: 47:be:ab:c9:22:ea:e8:0e:78:78:34:62:a7:9f:45:c2:54:fd:e6:8b +# SHA256 Fingerprint: 45:14:0b:32:47:eb:9c:c8:c5:b4:f0:d7:b5:30:91:f7:32:92:08:9e:6e:5a:63:e2:74:9d:d3:ac:a9:19:8e:da +-----BEGIN CERTIFICATE----- +MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMx +EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoT +EUdvRGFkZHkuY29tLCBJbmMuMTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRp +ZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIz +NTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQH +EwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8GA1UE +AxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIw +DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKD +E6bFIEMBO4Tx5oVJnyfq9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH +/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD+qK+ihVqf94Lw7YZFAXK6sOoBJQ7Rnwy +DfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutdfMh8+7ArU6SSYmlRJQVh +GkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMlNAJWJwGR +tDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEA +AaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE +FDqahQcQZyi27/a9BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmX +WWcDYfF+OwYxdS2hII5PZYe096acvNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu +9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r5N9ss4UXnT3ZJE95kTXWXwTr +gIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYVN8Gb5DKj7Tjo +2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO +LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI +4uJEvlz36hz1 +-----END CERTIFICATE----- + +# Issuer: CN=Starfield Root Certificate Authority - G2 O=Starfield Technologies, Inc. +# Subject: CN=Starfield Root Certificate Authority - G2 O=Starfield Technologies, Inc. +# Label: "Starfield Root Certificate Authority - G2" +# Serial: 0 +# MD5 Fingerprint: d6:39:81:c6:52:7e:96:69:fc:fc:ca:66:ed:05:f2:96 +# SHA1 Fingerprint: b5:1c:06:7c:ee:2b:0c:3d:f8:55:ab:2d:92:f4:fe:39:d4:e7:0f:0e +# SHA256 Fingerprint: 2c:e1:cb:0b:f9:d2:f9:e1:02:99:3f:be:21:51:52:c3:b2:dd:0c:ab:de:1c:68:e5:31:9b:83:91:54:db:b7:f5 +-----BEGIN CERTIFICATE----- +MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMx +EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT +HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVs +ZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAw +MFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6 +b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQgVGVj +aG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZp +Y2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAL3twQP89o/8ArFvW59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMg +nLRJdzIpVv257IzdIvpy3Cdhl+72WoTsbhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1 +HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNkN3mSwOxGXn/hbVNMYq/N +Hwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7NfZTD4p7dN +dloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0 +HZbUJtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO +BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0G +CSqGSIb3DQEBCwUAA4IBAQARWfolTwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjU +sHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx4mcujJUDJi5DnUox9g61DLu3 +4jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUwF5okxBDgBPfg +8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K +pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1 +mMpYjn0q7pBZc2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0 +-----END CERTIFICATE----- + +# Issuer: CN=Starfield Services Root Certificate Authority - G2 O=Starfield Technologies, Inc. +# Subject: CN=Starfield Services Root Certificate Authority - G2 O=Starfield Technologies, Inc. +# Label: "Starfield Services Root Certificate Authority - G2" +# Serial: 0 +# MD5 Fingerprint: 17:35:74:af:7b:61:1c:eb:f4:f9:3c:e2:ee:40:f9:a2 +# SHA1 Fingerprint: 92:5a:8f:8d:2c:6d:04:e0:66:5f:59:6a:ff:22:d8:63:e8:25:6f:3f +# SHA256 Fingerprint: 56:8d:69:05:a2:c8:87:08:a4:b3:02:51:90:ed:cf:ed:b1:97:4a:60:6a:13:c6:e5:29:0f:cb:2a:e6:3e:da:b5 +-----BEGIN CERTIFICATE----- +MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMx +EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT +HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVs +ZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5 +MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFy +ZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2Vy +dmljZXMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20p +OsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm2 +8xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4PahHQUw2eeBGg6345AWh1K +Ts9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLPLJGmpufe +hRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk +6mFBrMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAw +DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+q +AdcwKziIorhtSpzyEZGDMA0GCSqGSIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMI +bw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPPE95Dz+I0swSdHynVv/heyNXB +ve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTyxQGjhdByPq1z +qwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd +iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn +0q23KXB56jzaYyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCN +sSi6 +-----END CERTIFICATE----- + +# Issuer: CN=AffirmTrust Commercial O=AffirmTrust +# Subject: CN=AffirmTrust Commercial O=AffirmTrust +# Label: "AffirmTrust Commercial" +# Serial: 8608355977964138876 +# MD5 Fingerprint: 82:92:ba:5b:ef:cd:8a:6f:a6:3d:55:f9:84:f6:d6:b7 +# SHA1 Fingerprint: f9:b5:b6:32:45:5f:9c:be:ec:57:5f:80:dc:e9:6e:2c:c7:b2:78:b7 +# SHA256 Fingerprint: 03:76:ab:1d:54:c5:f9:80:3c:e4:b2:e2:01:a0:ee:7e:ef:7b:57:b6:36:e8:a9:3c:9b:8d:48:60:c9:6f:5f:a7 +-----BEGIN CERTIFICATE----- +MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UE +BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz +dCBDb21tZXJjaWFsMB4XDTEwMDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDEL +MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp +cm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6EqdbDuKP +Hx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yr +ba0F8PrVC8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPAL +MeIrJmqbTFeurCA+ukV6BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1 +yHp52UKqK39c/s4mT6NmgTWvRLpUHhwwMmWd5jyTXlBOeuM61G7MGvv50jeuJCqr +VwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNVHQ4EFgQUnZPGU4teyq8/ +nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ +KoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYG +XUPGhi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNj +vbz4YYCanrHOQnDiqX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivt +Z8SOyUOyXGsViQK8YvxO8rUzqrJv0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9g +N53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0khsUlHRUe072o0EclNmsxZt9YC +nlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8= +-----END CERTIFICATE----- + +# Issuer: CN=AffirmTrust Networking O=AffirmTrust +# Subject: CN=AffirmTrust Networking O=AffirmTrust +# Label: "AffirmTrust Networking" +# Serial: 8957382827206547757 +# MD5 Fingerprint: 42:65:ca:be:01:9a:9a:4c:a9:8c:41:49:cd:c0:d5:7f +# SHA1 Fingerprint: 29:36:21:02:8b:20:ed:02:f5:66:c5:32:d1:d6:ed:90:9f:45:00:2f +# SHA256 Fingerprint: 0a:81:ec:5a:92:97:77:f1:45:90:4a:f3:8d:5d:50:9f:66:b5:e2:c5:8f:cd:b5:31:05:8b:0e:17:f3:f0:b4:1b +-----BEGIN CERTIFICATE----- +MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UE +BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz +dCBOZXR3b3JraW5nMB4XDTEwMDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDEL +MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp +cm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SEHi3y +YJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbua +kCNrmreIdIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRL +QESxG9fhwoXA3hA/Pe24/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp +6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gbh+0t+nvujArjqWaJGctB+d1ENmHP4ndG +yH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNVHQ4EFgQUBx/S55zawm6i +QLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ +KoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfO +tDIuUFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzu +QY0x2+c06lkh1QF612S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZ +Lgo/bNjR9eUJtGxUAArgFU2HdW23WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4u +olu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9/ZFvgrG+CJPbFEfxojfHRZ48 +x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s= +-----END CERTIFICATE----- + +# Issuer: CN=AffirmTrust Premium O=AffirmTrust +# Subject: CN=AffirmTrust Premium O=AffirmTrust +# Label: "AffirmTrust Premium" +# Serial: 7893706540734352110 +# MD5 Fingerprint: c4:5d:0e:48:b6:ac:28:30:4e:0a:bc:f9:38:16:87:57 +# SHA1 Fingerprint: d8:a6:33:2c:e0:03:6f:b1:85:f6:63:4f:7d:6a:06:65:26:32:28:27 +# SHA256 Fingerprint: 70:a7:3f:7f:37:6b:60:07:42:48:90:45:34:b1:14:82:d5:bf:0e:69:8e:cc:49:8d:f5:25:77:eb:f2:e9:3b:9a +-----BEGIN CERTIFICATE----- +MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UE +BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVz +dCBQcmVtaXVtMB4XDTEwMDEyOTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkG +A1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1U +cnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxBLf +qV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtnBKAQ +JG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ ++jjeRFcV5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrS +s8PhaJyJ+HoAVt70VZVs+7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5 +HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmdGPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d7 +70O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5Rp9EixAqnOEhss/n/fauG +V+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NIS+LI+H+S +qHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S +5u046uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4Ia +C1nEWTJ3s7xgaVY5/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TX +OwF0lkLgAOIua+rF7nKsu7/+6qqo+Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYE +FJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/ +BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByvMiPIs0laUZx2 +KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg +Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B +8OWycvpEgjNC6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQ +MKSOyARiqcTtNd56l+0OOF6SL5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc +0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK+4w1IX2COPKpVJEZNZOUbWo6xbLQ +u4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmVBtWVyuEklut89pMF +u+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFgIxpH +YoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8 +GKa1qF60g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaO +RtGdFNrHF+QFlozEJLUbzxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6e +KeC2uAloGRwYQw== +-----END CERTIFICATE----- + +# Issuer: CN=AffirmTrust Premium ECC O=AffirmTrust +# Subject: CN=AffirmTrust Premium ECC O=AffirmTrust +# Label: "AffirmTrust Premium ECC" +# Serial: 8401224907861490260 +# MD5 Fingerprint: 64:b0:09:55:cf:b1:d5:99:e2:be:13:ab:a6:5d:ea:4d +# SHA1 Fingerprint: b8:23:6b:00:2f:1d:16:86:53:01:55:6c:11:a4:37:ca:eb:ff:c3:bb +# SHA256 Fingerprint: bd:71:fd:f6:da:97:e4:cf:62:d1:64:7a:dd:25:81:b0:7d:79:ad:f8:39:7e:b4:ec:ba:9c:5e:84:88:82:14:23 +-----BEGIN CERTIFICATE----- +MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMC +VVMxFDASBgNVBAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQ +cmVtaXVtIEVDQzAeFw0xMDAxMjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJ +BgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1UcnVzdDEgMB4GA1UEAwwXQWZmaXJt +VHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQNMF4bFZ0D +0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQN8O9 +ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0G +A1UdDgQWBBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4G +A1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/Vs +aobgxCd05DhT1wV/GzTjxi+zygk8N53X57hG8f2h4nECMEJZh0PUUd+60wkyWs6I +flc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKMeQ== +-----END CERTIFICATE----- + +# Issuer: CN=Certum Trusted Network CA O=Unizeto Technologies S.A. OU=Certum Certification Authority +# Subject: CN=Certum Trusted Network CA O=Unizeto Technologies S.A. OU=Certum Certification Authority +# Label: "Certum Trusted Network CA" +# Serial: 279744 +# MD5 Fingerprint: d5:e9:81:40:c5:18:69:fc:46:2c:89:75:62:0f:aa:78 +# SHA1 Fingerprint: 07:e0:32:e0:20:b7:2c:3f:19:2f:06:28:a2:59:3a:19:a7:0f:06:9e +# SHA256 Fingerprint: 5c:58:46:8d:55:f5:8e:49:7e:74:39:82:d2:b5:00:10:b6:d1:65:37:4a:cf:83:a7:d4:a3:2d:b7:68:c4:40:8e +-----BEGIN CERTIFICATE----- +MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBM +MSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5D +ZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBU +cnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIyMTIwNzM3WhcNMjkxMjMxMTIwNzM3 +WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMg +Uy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSIw +IAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0B +AQEFAAOCAQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rH +UV+rpDKmYYe2bg+G0jACl/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LM +TXPb865Px1bVWqeWifrzq2jUI4ZZJ88JJ7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVU +BBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4fOQtf/WsX+sWn7Et0brM +kUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0cvW0QM8x +AcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNV +HQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15y +sHhE49wcrwn9I0j6vSrEuVUEtRCjjSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfL +I9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1mS1FhIrlQgnXdAIv94nYmem8 +J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5ajZt3hrvJBW8qY +VoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI +03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw= +-----END CERTIFICATE----- + +# Issuer: CN=TWCA Root Certification Authority O=TAIWAN-CA OU=Root CA +# Subject: CN=TWCA Root Certification Authority O=TAIWAN-CA OU=Root CA +# Label: "TWCA Root Certification Authority" +# Serial: 1 +# MD5 Fingerprint: aa:08:8f:f6:f9:7b:b7:f2:b1:a7:1e:9b:ea:ea:bd:79 +# SHA1 Fingerprint: cf:9e:87:6d:d3:eb:fc:42:26:97:a3:b5:a3:7a:a0:76:a9:06:23:48 +# SHA256 Fingerprint: bf:d8:8f:e1:10:1c:41:ae:3e:80:1b:f8:be:56:35:0e:e9:ba:d1:a6:b9:bd:51:5e:dc:5c:6d:5b:87:11:ac:44 +-----BEGIN CERTIFICATE----- +MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzES +MBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFU +V0NBIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMz +WhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJVEFJV0FO +LUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlm +aWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB +AQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFE +AcK0HMMxQhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HH +K3XLfJ+utdGdIzdjp9xCoi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeX +RfwZVzsrb+RH9JlF/h3x+JejiB03HFyP4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/z +rX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1ry+UPizgN7gr8/g+YnzAx +3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkq +hkiG9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeC +MErJk/9q56YAf4lCmtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdls +XebQ79NqZp4VKIV66IIArB6nCWlWQtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62D +lhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVYT0bf+215WfKEIlKuD8z7fDvn +aspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocnyYh0igzyXxfkZ +YiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw== +-----END CERTIFICATE----- + +# Issuer: O=SECOM Trust Systems CO.,LTD. OU=Security Communication RootCA2 +# Subject: O=SECOM Trust Systems CO.,LTD. OU=Security Communication RootCA2 +# Label: "Security Communication RootCA2" +# Serial: 0 +# MD5 Fingerprint: 6c:39:7d:a4:0e:55:59:b2:3f:d6:41:b1:12:50:de:43 +# SHA1 Fingerprint: 5f:3b:8c:f2:f8:10:b3:7d:78:b4:ce:ec:19:19:c3:73:34:b9:c7:74 +# SHA256 Fingerprint: 51:3b:2c:ec:b8:10:d4:cd:e5:dd:85:39:1a:df:c6:c2:dd:60:d8:7b:b7:36:d2:b5:21:48:4a:a4:7a:0e:be:f6 +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDEl +MCMGA1UEChMcU0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMe +U2VjdXJpdHkgQ29tbXVuaWNhdGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoX +DTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRy +dXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3VyaXR5IENvbW11bmlj +YXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANAV +OVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGr +zbl+dp+++T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVM +VAX3NuRFg3sUZdbcDE3R3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQ +hNBqyjoGADdH5H5XTz+L62e4iKrFvlNVspHEfbmwhRkGeC7bYRr6hfVKkaHnFtWO +ojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1KEOtOghY6rCcMU/Gt1SSw +awNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8QIH4D5cs +OPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3 +DQEBCwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpF +coJxDjrSzG+ntKEju/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXc +okgfGT+Ok+vx+hfuzU7jBBJV1uXk3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8 +t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6qtnRGEmyR7jTV7JqR50S+kDFy +1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29mvVXIwAHIRc/ +SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03 +-----END CERTIFICATE----- + +# Issuer: CN=EC-ACC O=Agencia Catalana de Certificacio (NIF Q-0801176-I) OU=Serveis Publics de Certificacio/Vegeu https://www.catcert.net/verarrel (c)03/Jerarquia Entitats de Certificacio Catalanes +# Subject: CN=EC-ACC O=Agencia Catalana de Certificacio (NIF Q-0801176-I) OU=Serveis Publics de Certificacio/Vegeu https://www.catcert.net/verarrel (c)03/Jerarquia Entitats de Certificacio Catalanes +# Label: "EC-ACC" +# Serial: -23701579247955709139626555126524820479 +# MD5 Fingerprint: eb:f5:9d:29:0d:61:f9:42:1f:7c:c2:ba:6d:e3:15:09 +# SHA1 Fingerprint: 28:90:3a:63:5b:52:80:fa:e6:77:4c:0b:6d:a7:d6:ba:a6:4a:f2:e8 +# SHA256 Fingerprint: 88:49:7f:01:60:2f:31:54:24:6a:e2:8c:4d:5a:ef:10:f1:d8:7e:bb:76:62:6f:4a:e0:b7:f9:5b:a7:96:87:99 +-----BEGIN CERTIFICATE----- +MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB +8zELMAkGA1UEBhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2Vy +dGlmaWNhY2lvIChOSUYgUS0wODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1 +YmxpY3MgZGUgQ2VydGlmaWNhY2lvMTUwMwYDVQQLEyxWZWdldSBodHRwczovL3d3 +dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAoYykwMzE1MDMGA1UECxMsSmVyYXJxdWlh +IEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRhbGFuZXMxDzANBgNVBAMTBkVD +LUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTlaMIHzMQswCQYDVQQG +EwJFUzE7MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8g +KE5JRiBRLTA4MDExNzYtSSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBD +ZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZlZ2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQu +bmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJhcnF1aWEgRW50aXRhdHMg +ZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUNDMIIBIjAN +BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R +85iKw5K4/0CQBXCHYMkAqbWUZRkiFRfCQ2xmRJoNBD45b6VLeqpjt4pEndljkYRm +4CgPukLjbo73FCeTae6RDqNfDrHrZqJyTxIThmV6PttPB/SnCWDaOkKZx7J/sxaV +HMf5NLWUhdWZXqBIoH7nF2W4onW4HvPlQn2v7fOKSGRdghST2MDk/7NQcvJ29rNd +QlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0aE9jD2z3Il3rucO2n5nzbcc8t +lGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw0JDnJwIDAQAB +o4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8E +BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4 +opvpXY0wfwYDVR0gBHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBo +dHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidW +ZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAwDQYJKoZIhvcN +AQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/sXE7zDkJlF7W2u++AVtd0x7Y +/X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPpqojlNcAZQmNaAl6k +SBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7AwaboMMPOhy +Rp/7SNVel+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOS +Agu+TGbrIP65y7WZf+a2E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xl +nJ2lYJU6Un/10asIbvPuW/mIPX64b24D5EI= +-----END CERTIFICATE----- + +# Issuer: CN=Hellenic Academic and Research Institutions RootCA 2011 O=Hellenic Academic and Research Institutions Cert. Authority +# Subject: CN=Hellenic Academic and Research Institutions RootCA 2011 O=Hellenic Academic and Research Institutions Cert. Authority +# Label: "Hellenic Academic and Research Institutions RootCA 2011" +# Serial: 0 +# MD5 Fingerprint: 73:9f:4c:4b:73:5b:79:e9:fa:ba:1c:ef:6e:cb:d5:c9 +# SHA1 Fingerprint: fe:45:65:9b:79:03:5b:98:a1:61:b5:51:2e:ac:da:58:09:48:22:4d +# SHA256 Fingerprint: bc:10:4f:15:a4:8b:e7:09:dc:a5:42:a7:e1:d4:b9:df:6f:05:45:27:e8:02:ea:a9:2d:59:54:44:25:8a:fe:71 +-----BEGIN CERTIFICATE----- +MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1Ix +RDBCBgNVBAoTO0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1 +dGlvbnMgQ2VydC4gQXV0aG9yaXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1p +YyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIFJvb3RDQSAyMDExMB4XDTExMTIw +NjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYTAkdSMUQwQgYDVQQK +EztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIENl +cnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl +c2VhcmNoIEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEB +BQADggEPADCCAQoCggEBAKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPz +dYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJ +fel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa71HFK9+WXesyHgLacEns +bgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u8yBRQlqD +75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSP +FEDH3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNV +HRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp +5dgTBCPuQSUwRwYDVR0eBEAwPqA8MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQu +b3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQub3JnMA0GCSqGSIb3DQEBBQUA +A4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVtXdMiKahsog2p +6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8 +TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7 +dIsXRSZMFpGD/md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8Acys +Nnq/onN694/BtZqhFLKPM58N7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXI +l7WdmplNsDz4SgCbZN2fOUvRJ9e4 +-----END CERTIFICATE----- + +# Issuer: CN=Actalis Authentication Root CA O=Actalis S.p.A./03358520967 +# Subject: CN=Actalis Authentication Root CA O=Actalis S.p.A./03358520967 +# Label: "Actalis Authentication Root CA" +# Serial: 6271844772424770508 +# MD5 Fingerprint: 69:c1:0d:4f:07:a3:1b:c3:fe:56:3d:04:bc:11:f6:a6 +# SHA1 Fingerprint: f3:73:b3:87:06:5a:28:84:8a:f2:f3:4a:ce:19:2b:dd:c7:8e:9c:ac +# SHA256 Fingerprint: 55:92:60:84:ec:96:3a:64:b9:6e:2a:be:01:ce:0b:a8:6a:64:fb:fe:bc:c7:aa:b5:af:c1:55:b3:7f:d7:60:66 +-----BEGIN CERTIFICATE----- +MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UE +BhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8w +MzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290 +IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDkyMjExMjIwMlowazELMAkGA1UEBhMC +SVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1 +ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENB +MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNv +UTufClrJwkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX +4ay8IMKx4INRimlNAJZaby/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9 +KK3giq0itFZljoZUj5NDKd45RnijMCO6zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/ +gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1fYVEiVRvjRuPjPdA1Yprb +rxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2oxgkg4YQ +51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2F +be8lEfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxe +KF+w6D9Fz8+vm2/7hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4F +v6MGn8i1zeQf1xcGDXqVdFUNaBr8EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbn +fpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5jF66CyCU3nuDuP/jVo23Eek7 +jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLYiDrIn3hm7Ynz +ezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt +ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQAL +e3KHwGCmSUyIWOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70 +jsNjLiNmsGe+b7bAEzlgqqI0JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDz +WochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKxK3JCaKygvU5a2hi/a5iB0P2avl4V +SM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+Xlff1ANATIGk0k9j +pwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC4yyX +X04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+Ok +fcvHlXHo2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7R +K4X9p2jIugErsWx0Hbhzlefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btU +ZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXemOR/qnuOf0GZvBeyqdn6/axag67XH/JJU +LysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9vwGYT7JZVEc+NHt4bVaT +LnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg== +-----END CERTIFICATE----- + +# Issuer: O=Trustis Limited OU=Trustis FPS Root CA +# Subject: O=Trustis Limited OU=Trustis FPS Root CA +# Label: "Trustis FPS Root CA" +# Serial: 36053640375399034304724988975563710553 +# MD5 Fingerprint: 30:c9:e7:1e:6b:e6:14:eb:65:b2:16:69:20:31:67:4d +# SHA1 Fingerprint: 3b:c0:38:0b:33:c3:f6:a6:0c:86:15:22:93:d9:df:f5:4b:81:c0:04 +# SHA256 Fingerprint: c1:b4:82:99:ab:a5:20:8f:e9:63:0a:ce:55:ca:68:a0:3e:da:5a:51:9c:88:02:a0:d3:a6:73:be:8f:8e:55:7d +-----BEGIN CERTIFICATE----- +MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBF +MQswCQYDVQQGEwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQL +ExNUcnVzdGlzIEZQUyBSb290IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTEx +MzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNVBAoTD1RydXN0aXMgTGltaXRlZDEc +MBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQAD +ggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQRUN+ +AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihH +iTHcDnlkH5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjj +vSkCqPoc4Vu5g6hBSLwacY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA +0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zto3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlB +OrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEAAaNTMFEwDwYDVR0TAQH/ +BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAdBgNVHQ4E +FgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01 +GX2cGE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmW +zaD+vkAMXBJV+JOCyinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP4 +1BIy+Q7DsdwyhEQsb8tGD+pmQQ9P8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZE +f1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHVl/9D7S3B2l0pKoU/rGXuhg8F +jZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYliB6XzCGcKQEN +ZetX2fNXlrtIzYE= +-----END CERTIFICATE----- + +# Issuer: CN=Buypass Class 2 Root CA O=Buypass AS-983163327 +# Subject: CN=Buypass Class 2 Root CA O=Buypass AS-983163327 +# Label: "Buypass Class 2 Root CA" +# Serial: 2 +# MD5 Fingerprint: 46:a7:d2:fe:45:fb:64:5a:a8:59:90:9b:78:44:9b:29 +# SHA1 Fingerprint: 49:0a:75:74:de:87:0a:47:fe:58:ee:f6:c7:6b:eb:c6:0b:12:40:99 +# SHA256 Fingerprint: 9a:11:40:25:19:7c:5b:b9:5d:94:e6:3d:55:cd:43:79:08:47:b6:46:b2:3c:df:11:ad:a4:a0:0e:ff:15:fb:48 +-----BEGIN CERTIFICATE----- +MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd +MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg +Q2xhc3MgMiBSb290IENBMB4XDTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1ow +TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw +HgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB +BQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1g1Lr +6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPV +L4O2fuPn9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC91 +1K2GScuVr1QGbNgGE41b/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHx +MlAQTn/0hpPshNOOvEu/XAFOBz3cFIqUCqTqc/sLUegTBxj6DvEr0VQVfTzh97QZ +QmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeffawrbD02TTqigzXsu8lkB +arcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgIzRFo1clr +Us3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLi +FRhnBkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRS +P/TizPJhk9H9Z2vXUq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN +9SG9dKpN6nIDSdvHXx1iY8f93ZHsM+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxP +AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMmAd+BikoL1Rpzz +uvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAU18h +9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s +A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3t +OluwlN5E40EIosHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo ++fsicdl9sz1Gv7SEr5AcD48Saq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7 +KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYdDnkM/crqJIByw5c/8nerQyIKx+u2 +DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWDLfJ6v9r9jv6ly0Us +H8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0oyLQ +I+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK7 +5t98biGCwWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h +3PFaTWwyI0PurKju7koSCTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPz +Y11aWOIv4x3kqdbQCtCev9eBCfHJxyYNrJgWVqA= +-----END CERTIFICATE----- + +# Issuer: CN=Buypass Class 3 Root CA O=Buypass AS-983163327 +# Subject: CN=Buypass Class 3 Root CA O=Buypass AS-983163327 +# Label: "Buypass Class 3 Root CA" +# Serial: 2 +# MD5 Fingerprint: 3d:3b:18:9e:2c:64:5a:e8:d5:88:ce:0e:f9:37:c2:ec +# SHA1 Fingerprint: da:fa:f7:fa:66:84:ec:06:8f:14:50:bd:c7:c2:81:a5:bc:a9:64:57 +# SHA256 Fingerprint: ed:f7:eb:bc:a2:7a:2a:38:4d:38:7b:7d:40:10:c6:66:e2:ed:b4:84:3e:4c:29:b4:ae:1d:5b:93:32:e6:b2:4d +-----BEGIN CERTIFICATE----- +MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd +MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg +Q2xhc3MgMyBSb290IENBMB4XDTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFow +TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw +HgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB +BQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRHsJ8Y +ZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3E +N3coTRiR5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9 +tznDDgFHmV0ST9tD+leh7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX +0DJq1l1sDPGzbjniazEuOQAnFN44wOwZZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c +/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH2xc519woe2v1n/MuwU8X +KhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV/afmiSTY +zIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvS +O1UQRwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D +34xFMFbG02SrZvPAXpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgP +K9Dx2hzLabjKSWJtyNBjYt1gD1iqj6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3 +AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFEe4zf/lb+74suwv +Tg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAACAj +QTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV +cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXS +IGrs/CIBKM+GuIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2 +HJLw5QY33KbmkJs4j1xrG0aGQ0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsa +O5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8ZORK15FTAaggiG6cX0S5y2CBNOxv +033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2KSb12tjE8nVhz36u +dmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz6MkE +kbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg41 +3OEMXbugUZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvD +u79leNKGef9JOxqDDPDeeOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq +4/g7u9xN12TyUb7mqqta6THuBrxzvxNiCp/HuZc= +-----END CERTIFICATE----- + +# Issuer: CN=T-TeleSec GlobalRoot Class 3 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center +# Subject: CN=T-TeleSec GlobalRoot Class 3 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center +# Label: "T-TeleSec GlobalRoot Class 3" +# Serial: 1 +# MD5 Fingerprint: ca:fb:40:a8:4e:39:92:8a:1d:fe:8e:2f:c4:27:ea:ef +# SHA1 Fingerprint: 55:a6:72:3e:cb:f2:ec:cd:c3:23:74:70:19:9d:2a:be:11:e3:81:d1 +# SHA256 Fingerprint: fd:73:da:d3:1c:64:4f:f1:b4:3b:ef:0c:cd:da:96:71:0b:9c:d9:87:5e:ca:7e:31:70:7a:f3:e9:6d:52:2b:bd +-----BEGIN CERTIFICATE----- +MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx +KzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd +BgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNl +YyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgxMDAxMTAyOTU2WhcNMzMxMDAxMjM1 +OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnBy +aXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50 +ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN +8ELg63iIVl6bmlQdTQyK9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/ +RLyTPWGrTs0NvvAgJ1gORH8EGoel15YUNpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4 +hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZFiP0Zf3WHHx+xGwpzJFu5 +ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W0eDrXltM +EnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGj +QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1 +A/d2O2GCahKqGFPrAyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOy +WL6ukK2YJ5f+AbGwUgC4TeQbIXQbfsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ +1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzTucpH9sry9uetuUg/vBa3wW30 +6gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7hP0HHRwA11fXT +91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml +e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4p +TpPDpFQUWw== +-----END CERTIFICATE----- + +# Issuer: CN=EE Certification Centre Root CA O=AS Sertifitseerimiskeskus +# Subject: CN=EE Certification Centre Root CA O=AS Sertifitseerimiskeskus +# Label: "EE Certification Centre Root CA" +# Serial: 112324828676200291871926431888494945866 +# MD5 Fingerprint: 43:5e:88:d4:7d:1a:4a:7e:fd:84:2e:52:eb:01:d4:6f +# SHA1 Fingerprint: c9:a8:b9:e7:55:80:5e:58:e3:53:77:a7:25:eb:af:c3:7b:27:cc:d7 +# SHA256 Fingerprint: 3e:84:ba:43:42:90:85:16:e7:75:73:c0:99:2f:09:79:ca:08:4e:46:85:68:1f:f1:95:cc:ba:8a:22:9b:8a:76 +-----BEGIN CERTIFICATE----- +MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1 +MQswCQYDVQQGEwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1 +czEoMCYGA1UEAwwfRUUgQ2VydGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYG +CSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIwMTAxMDMwMTAxMDMwWhgPMjAzMDEy +MTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlBUyBTZXJ0aWZpdHNl +ZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRyZSBS +b290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEB +AQUAA4IBDwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUy +euuOF0+W2Ap7kaJjbMeMTC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvO +bntl8jixwKIy72KyaOBhU8E2lf/slLo2rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIw +WFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw93X2PaRka9ZP585ArQ/d +MtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtNP2MbRMNE +1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYD +VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/ +zQas8fElyalL1BSZMEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYB +BQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEF +BQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+RjxY6hUFaTlrg4wCQiZrxTFGGV +v9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqMlIpPnTX/dqQG +E5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u +uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIW +iAYLtqZLICjU3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/v +GVCJYMzpJJUPwssd8m92kMfMdcGWxZ0= +-----END CERTIFICATE----- + +# Issuer: CN=D-TRUST Root Class 3 CA 2 2009 O=D-Trust GmbH +# Subject: CN=D-TRUST Root Class 3 CA 2 2009 O=D-Trust GmbH +# Label: "D-TRUST Root Class 3 CA 2 2009" +# Serial: 623603 +# MD5 Fingerprint: cd:e0:25:69:8d:47:ac:9c:89:35:90:f7:fd:51:3d:2f +# SHA1 Fingerprint: 58:e8:ab:b0:36:15:33:fb:80:f7:9b:1b:6d:29:d3:ff:8d:5f:00:f0 +# SHA256 Fingerprint: 49:e7:a4:42:ac:f0:ea:62:87:05:00:54:b5:25:64:b6:50:e4:f4:9e:42:e3:48:d6:aa:38:e0:39:e9:57:b1:c1 +-----BEGIN CERTIFICATE----- +MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRF +MRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBD +bGFzcyAzIENBIDIgMjAwOTAeFw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NTha +ME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMM +HkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIwDQYJKoZIhvcNAQEB +BQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOADER03 +UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42 +tSHKXzlABF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9R +ySPocq60vFYJfxLLHLGvKZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsM +lFqVlNpQmvH/pStmMaTJOKDfHR+4CS7zp+hnUquVH+BGPtikw8paxTGA6Eian5Rp +/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUCAwEAAaOCARowggEWMA8G +A1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ4PGEMA4G +A1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVj +dG9yeS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUy +MENBJTIwMiUyMDIwMDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRl +cmV2b2NhdGlvbmxpc3QwQ6BBoD+GPWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3Js +L2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAwOS5jcmwwDQYJKoZIhvcNAQEL +BQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm2H6NMLVwMeni +acfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0 +o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4K +zCUqNQT4YJEVdT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8 +PIWmawomDeCTmGCufsYkl4phX5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3Y +Johw1+qRzT65ysCQblrGXnRl11z+o+I= +-----END CERTIFICATE----- + +# Issuer: CN=D-TRUST Root Class 3 CA 2 EV 2009 O=D-Trust GmbH +# Subject: CN=D-TRUST Root Class 3 CA 2 EV 2009 O=D-Trust GmbH +# Label: "D-TRUST Root Class 3 CA 2 EV 2009" +# Serial: 623604 +# MD5 Fingerprint: aa:c6:43:2c:5e:2d:cd:c4:34:c0:50:4f:11:02:4f:b6 +# SHA1 Fingerprint: 96:c9:1b:0b:95:b4:10:98:42:fa:d0:d8:22:79:fe:60:fa:b9:16:83 +# SHA256 Fingerprint: ee:c5:49:6b:98:8c:e9:86:25:b9:34:09:2e:ec:29:08:be:d0:b0:f3:16:c2:d4:73:0c:84:ea:f1:f3:d3:48:81 +-----BEGIN CERTIFICATE----- +MIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRF +MRUwEwYDVQQKDAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBD +bGFzcyAzIENBIDIgRVYgMjAwOTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUw +NDZaMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxKjAoBgNV +BAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAwOTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3MKCOvXwEz75ivJn9gpfSegpn +ljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut8Mxk2og+KbgPCdM0 +3TP1YtHhzRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsTl28So/6Z +qQTMFexgaDbtCHu39b+T7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lR +p75mpoo6Kr3HGrHhFPC+Oh25z1uxav60sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8 +HgQ+HKDYD8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure3511H3a6UCAwEAAaOCASQw +ggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyvcop9Ntea +HNxnMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFw +Oi8vZGlyZWN0b3J5LmQtdHJ1c3QubmV0L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xh +c3MlMjAzJTIwQ0ElMjAyJTIwRVYlMjAyMDA5LE89RC1UcnVzdCUyMEdtYkgsQz1E +RT9jZXJ0aWZpY2F0ZXJldm9jYXRpb25saXN0MEagRKBChkBodHRwOi8vd3d3LmQt +dHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xhc3NfM19jYV8yX2V2XzIwMDku +Y3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+PPoeUSbrh/Yp +3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05 +nsKtjHEh8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNF +CSuGdXzfX2lXANtu2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7na +xpeG0ILD5EJt/rDiZE4OJudANCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqX +KVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVvw9y4AyHqnxbxLFS1 +-----END CERTIFICATE----- + +# Issuer: CN=CA Disig Root R2 O=Disig a.s. +# Subject: CN=CA Disig Root R2 O=Disig a.s. +# Label: "CA Disig Root R2" +# Serial: 10572350602393338211 +# MD5 Fingerprint: 26:01:fb:d8:27:a7:17:9a:45:54:38:1a:43:01:3b:03 +# SHA1 Fingerprint: b5:61:eb:ea:a4:de:e4:25:4b:69:1a:98:a5:57:47:c2:34:c7:d9:71 +# SHA256 Fingerprint: e2:3d:4a:03:6d:7b:70:e9:f5:95:b1:42:20:79:d2:b9:1e:df:bb:1f:b6:51:a0:63:3e:aa:8a:9d:c5:f8:07:03 +-----BEGIN CERTIFICATE----- +MIIFaTCCA1GgAwIBAgIJAJK4iNuwisFjMA0GCSqGSIb3DQEBCwUAMFIxCzAJBgNV +BAYTAlNLMRMwEQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMu +MRkwFwYDVQQDExBDQSBEaXNpZyBSb290IFIyMB4XDTEyMDcxOTA5MTUzMFoXDTQy +MDcxOTA5MTUzMFowUjELMAkGA1UEBhMCU0sxEzARBgNVBAcTCkJyYXRpc2xhdmEx +EzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERpc2lnIFJvb3QgUjIw +ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCio8QACdaFXS1tFPbCw3Oe +NcJxVX6B+6tGUODBfEl45qt5WDza/3wcn9iXAng+a0EE6UG9vgMsRfYvZNSrXaNH +PWSb6WiaxswbP7q+sos0Ai6YVRn8jG+qX9pMzk0DIaPY0jSTVpbLTAwAFjxfGs3I +x2ymrdMxp7zo5eFm1tL7A7RBZckQrg4FY8aAamkw/dLukO8NJ9+flXP04SXabBbe +QTg06ov80egEFGEtQX6sx3dOy1FU+16SGBsEWmjGycT6txOgmLcRK7fWV8x8nhfR +yyX+hk4kLlYMeE2eARKmK6cBZW58Yh2EhN/qwGu1pSqVg8NTEQxzHQuyRpDRQjrO +QG6Vrf/GlK1ul4SOfW+eioANSW1z4nuSHsPzwfPrLgVv2RvPN3YEyLRa5Beny912 +H9AZdugsBbPWnDTYltxhh5EF5EQIM8HauQhl1K6yNg3ruji6DOWbnuuNZt2Zz9aJ +QfYEkoopKW1rOhzndX0CcQ7zwOe9yxndnWCywmZgtrEE7snmhrmaZkCo5xHtgUUD +i/ZnWejBBhG93c+AAk9lQHhcR1DIm+YfgXvkRKhbhZri3lrVx/k6RGZL5DJUfORs +nLMOPReisjQS1n6yqEm70XooQL6iFh/f5DcfEXP7kAplQ6INfPgGAVUzfbANuPT1 +rqVCV3w2EYx7XsQDnYx5nQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud +DwEB/wQEAwIBBjAdBgNVHQ4EFgQUtZn4r7CU9eMg1gqtzk5WpC5uQu0wDQYJKoZI +hvcNAQELBQADggIBACYGXnDnZTPIgm7ZnBc6G3pmsgH2eDtpXi/q/075KMOYKmFM +tCQSin1tERT3nLXK5ryeJ45MGcipvXrA1zYObYVybqjGom32+nNjf7xueQgcnYqf +GopTpti72TVVsRHFqQOzVju5hJMiXn7B9hJSi+osZ7z+Nkz1uM/Rs0mSO9MpDpkb +lvdhuDvEK7Z4bLQjb/D907JedR+Zlais9trhxTF7+9FGs9K8Z7RiVLoJ92Owk6Ka ++elSLotgEqv89WBW7xBci8QaQtyDW2QOy7W81k/BfDxujRNt+3vrMNDcTa/F1bal +TFtxyegxvug4BkihGuLq0t4SOVga/4AOgnXmt8kHbA7v/zjxmHHEt38OFdAlab0i +nSvtBfZGR6ztwPDUO+Ls7pZbkBNOHlY667DvlruWIxG68kOGdGSVyCh13x01utI3 +gzhTODY7z2zp+WsO0PsE6E9312UBeIYMej4hYvF/Y3EMyZ9E26gnonW+boE+18Dr +G5gPcFw0sorMwIUY6256s/daoQe/qUKS82Ail+QUoQebTnbAjn39pCXHR+3/H3Os +zMOl6W8KjptlwlCFtaOgUxLMVYdh84GuEEZhvUQhuMI9dM9+JDX6HAcOmz0iyu8x +L4ysEr3vQCj8KWefshNPZiTEUxnpHikV7+ZtsH8tZ/3zbBt1RqPlShfppNcL +-----END CERTIFICATE----- + +# Issuer: CN=ACCVRAIZ1 O=ACCV OU=PKIACCV +# Subject: CN=ACCVRAIZ1 O=ACCV OU=PKIACCV +# Label: "ACCVRAIZ1" +# Serial: 6828503384748696800 +# MD5 Fingerprint: d0:a0:5a:ee:05:b6:09:94:21:a1:7d:f1:b2:29:82:02 +# SHA1 Fingerprint: 93:05:7a:88:15:c6:4f:ce:88:2f:fa:91:16:52:28:78:bc:53:64:17 +# SHA256 Fingerprint: 9a:6e:c0:12:e1:a7:da:9d:be:34:19:4d:47:8a:d7:c0:db:18:22:fb:07:1d:f1:29:81:49:6e:d1:04:38:41:13 +-----BEGIN CERTIFICATE----- +MIIH0zCCBbugAwIBAgIIXsO3pkN/pOAwDQYJKoZIhvcNAQEFBQAwQjESMBAGA1UE +AwwJQUNDVlJBSVoxMRAwDgYDVQQLDAdQS0lBQ0NWMQ0wCwYDVQQKDARBQ0NWMQsw +CQYDVQQGEwJFUzAeFw0xMTA1MDUwOTM3MzdaFw0zMDEyMzEwOTM3MzdaMEIxEjAQ +BgNVBAMMCUFDQ1ZSQUlaMTEQMA4GA1UECwwHUEtJQUNDVjENMAsGA1UECgwEQUND +VjELMAkGA1UEBhMCRVMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCb +qau/YUqXry+XZpp0X9DZlv3P4uRm7x8fRzPCRKPfmt4ftVTdFXxpNRFvu8gMjmoY +HtiP2Ra8EEg2XPBjs5BaXCQ316PWywlxufEBcoSwfdtNgM3802/J+Nq2DoLSRYWo +G2ioPej0RGy9ocLLA76MPhMAhN9KSMDjIgro6TenGEyxCQ0jVn8ETdkXhBilyNpA +lHPrzg5XPAOBOp0KoVdDaaxXbXmQeOW1tDvYvEyNKKGno6e6Ak4l0Squ7a4DIrhr +IA8wKFSVf+DuzgpmndFALW4ir50awQUZ0m/A8p/4e7MCQvtQqR0tkw8jq8bBD5L/ +0KIV9VMJcRz/RROE5iZe+OCIHAr8Fraocwa48GOEAqDGWuzndN9wrqODJerWx5eH +k6fGioozl2A3ED6XPm4pFdahD9GILBKfb6qkxkLrQaLjlUPTAYVtjrs78yM2x/47 +4KElB0iryYl0/wiPgL/AlmXz7uxLaL2diMMxs0Dx6M/2OLuc5NF/1OVYm3z61PMO +m3WR5LpSLhl+0fXNWhn8ugb2+1KoS5kE3fj5tItQo05iifCHJPqDQsGH+tUtKSpa +cXpkatcnYGMN285J9Y0fkIkyF/hzQ7jSWpOGYdbhdQrqeWZ2iE9x6wQl1gpaepPl +uUsXQA+xtrn13k/c4LOsOxFwYIRKQ26ZIMApcQrAZQIDAQABo4ICyzCCAscwfQYI +KwYBBQUHAQEEcTBvMEwGCCsGAQUFBzAChkBodHRwOi8vd3d3LmFjY3YuZXMvZmls +ZWFkbWluL0FyY2hpdm9zL2NlcnRpZmljYWRvcy9yYWl6YWNjdjEuY3J0MB8GCCsG +AQUFBzABhhNodHRwOi8vb2NzcC5hY2N2LmVzMB0GA1UdDgQWBBTSh7Tj3zcnk1X2 +VuqB5TbMjB4/vTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNKHtOPfNyeT +VfZW6oHlNsyMHj+9MIIBcwYDVR0gBIIBajCCAWYwggFiBgRVHSAAMIIBWDCCASIG +CCsGAQUFBwICMIIBFB6CARAAQQB1AHQAbwByAGkAZABhAGQAIABkAGUAIABDAGUA +cgB0AGkAZgBpAGMAYQBjAGkA8wBuACAAUgBhAO0AegAgAGQAZQAgAGwAYQAgAEEA +QwBDAFYAIAAoAEEAZwBlAG4AYwBpAGEAIABkAGUAIABUAGUAYwBuAG8AbABvAGcA +7QBhACAAeQAgAEMAZQByAHQAaQBmAGkAYwBhAGMAaQDzAG4AIABFAGwAZQBjAHQA +cgDzAG4AaQBjAGEALAAgAEMASQBGACAAUQA0ADYAMAAxADEANQA2AEUAKQAuACAA +QwBQAFMAIABlAG4AIABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBjAGMAdgAuAGUA +czAwBggrBgEFBQcCARYkaHR0cDovL3d3dy5hY2N2LmVzL2xlZ2lzbGFjaW9uX2Mu +aHRtMFUGA1UdHwROMEwwSqBIoEaGRGh0dHA6Ly93d3cuYWNjdi5lcy9maWxlYWRt +aW4vQXJjaGl2b3MvY2VydGlmaWNhZG9zL3JhaXphY2N2MV9kZXIuY3JsMA4GA1Ud +DwEB/wQEAwIBBjAXBgNVHREEEDAOgQxhY2N2QGFjY3YuZXMwDQYJKoZIhvcNAQEF +BQADggIBAJcxAp/n/UNnSEQU5CmH7UwoZtCPNdpNYbdKl02125DgBS4OxnnQ8pdp +D70ER9m+27Up2pvZrqmZ1dM8MJP1jaGo/AaNRPTKFpV8M9xii6g3+CfYCS0b78gU +JyCpZET/LtZ1qmxNYEAZSUNUY9rizLpm5U9EelvZaoErQNV/+QEnWCzI7UiRfD+m +AM/EKXMRNt6GGT6d7hmKG9Ww7Y49nCrADdg9ZuM8Db3VlFzi4qc1GwQA9j9ajepD +vV+JHanBsMyZ4k0ACtrJJ1vnE5Bc5PUzolVt3OAJTS+xJlsndQAJxGJ3KQhfnlms +tn6tn1QwIgPBHnFk/vk4CpYY3QIUrCPLBhwepH2NDd4nQeit2hW3sCPdK6jT2iWH +7ehVRE2I9DZ+hJp4rPcOVkkO1jMl1oRQQmwgEh0q1b688nCBpHBgvgW1m54ERL5h +I6zppSSMEYCUWqKiuUnSwdzRp+0xESyeGabu4VXhwOrPDYTkF7eifKXeVSUG7szA +h1xA2syVP1XgNce4hL60Xc16gwFy7ofmXx2utYXGJt/mwZrpHgJHnyqobalbz+xF +d3+YJ5oyXSrjhO7FmGYvliAd3djDJ9ew+f7Zfc3Qn48LFFhRny+Lwzgt3uiP1o2H +pPVWQxaZLPSkVrQ0uGE3ycJYgBugl6H8WY3pEfbRD0tVNEYqi4Y7 +-----END CERTIFICATE----- + +# Issuer: CN=TWCA Global Root CA O=TAIWAN-CA OU=Root CA +# Subject: CN=TWCA Global Root CA O=TAIWAN-CA OU=Root CA +# Label: "TWCA Global Root CA" +# Serial: 3262 +# MD5 Fingerprint: f9:03:7e:cf:e6:9e:3c:73:7a:2a:90:07:69:ff:2b:96 +# SHA1 Fingerprint: 9c:bb:48:53:f6:a4:f6:d3:52:a4:e8:32:52:55:60:13:f5:ad:af:65 +# SHA256 Fingerprint: 59:76:90:07:f7:68:5d:0f:cd:50:87:2f:9f:95:d5:75:5a:5b:2b:45:7d:81:f3:69:2b:61:0a:98:67:2f:0e:1b +-----BEGIN CERTIFICATE----- +MIIFQTCCAymgAwIBAgICDL4wDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCVFcx +EjAQBgNVBAoTCVRBSVdBTi1DQTEQMA4GA1UECxMHUm9vdCBDQTEcMBoGA1UEAxMT +VFdDQSBHbG9iYWwgUm9vdCBDQTAeFw0xMjA2MjcwNjI4MzNaFw0zMDEyMzExNTU5 +NTlaMFExCzAJBgNVBAYTAlRXMRIwEAYDVQQKEwlUQUlXQU4tQ0ExEDAOBgNVBAsT +B1Jvb3QgQ0ExHDAaBgNVBAMTE1RXQ0EgR2xvYmFsIFJvb3QgQ0EwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQCwBdvI64zEbooh745NnHEKH1Jw7W2CnJfF +10xORUnLQEK1EjRsGcJ0pDFfhQKX7EMzClPSnIyOt7h52yvVavKOZsTuKwEHktSz +0ALfUPZVr2YOy+BHYC8rMjk1Ujoog/h7FsYYuGLWRyWRzvAZEk2tY/XTP3VfKfCh +MBwqoJimFb3u/Rk28OKRQ4/6ytYQJ0lM793B8YVwm8rqqFpD/G2Gb3PpN0Wp8DbH +zIh1HrtsBv+baz4X7GGqcXzGHaL3SekVtTzWoWH1EfcFbx39Eb7QMAfCKbAJTibc +46KokWofwpFFiFzlmLhxpRUZyXx1EcxwdE8tmx2RRP1WKKD+u4ZqyPpcC1jcxkt2 +yKsi2XMPpfRaAok/T54igu6idFMqPVMnaR1sjjIsZAAmY2E2TqNGtz99sy2sbZCi +laLOz9qC5wc0GZbpuCGqKX6mOL6OKUohZnkfs8O1CWfe1tQHRvMq2uYiN2DLgbYP +oA/pyJV/v1WRBXrPPRXAb94JlAGD1zQbzECl8LibZ9WYkTunhHiVJqRaCPgrdLQA +BDzfuBSO6N+pjWxnkjMdwLfS7JLIvgm/LCkFbwJrnu+8vyq8W8BQj0FwcYeyTbcE +qYSjMq+u7msXi7Kx/mzhkIyIqJdIzshNy/MGz19qCkKxHh53L46g5pIOBvwFItIm +4TFRfTLcDwIDAQABoyMwITAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB +/zANBgkqhkiG9w0BAQsFAAOCAgEAXzSBdu+WHdXltdkCY4QWwa6gcFGn90xHNcgL +1yg9iXHZqjNB6hQbbCEAwGxCGX6faVsgQt+i0trEfJdLjbDorMjupWkEmQqSpqsn +LhpNgb+E1HAerUf+/UqdM+DyucRFCCEK2mlpc3INvjT+lIutwx4116KD7+U4x6WF +H6vPNOw/KP4M8VeGTslV9xzU2KV9Bnpv1d8Q34FOIWWxtuEXeZVFBs5fzNxGiWNo +RI2T9GRwoD2dKAXDOXC4Ynsg/eTb6QihuJ49CcdP+yz4k3ZB3lLg4VfSnQO8d57+ +nile98FRYB/e2guyLXW3Q0iT5/Z5xoRdgFlglPx4mI88k1HtQJAH32RjJMtOcQWh +15QaiDLxInQirqWm2BJpTGCjAu4r7NRjkgtevi92a6O2JryPA9gK8kxkRr05YuWW +6zRjESjMlfGt7+/cgFhI6Uu46mWs6fyAtbXIRfmswZ/ZuepiiI7E8UuDEq3mi4TW +nsLrgxifarsbJGAzcMzs9zLzXNl5fe+epP7JI8Mk7hWSsT2RTyaGvWZzJBPqpK5j +wa19hAM8EHiGG3njxPPyBJUgriOCxLM6AGK/5jYk4Ve6xx6QddVfP5VhK8E7zeWz +aGHQRiapIVJpLesux+t3zqY6tQMzT3bR51xUAV3LePTJDL/PEo4XLSNolOer/qmy +KwbQBM0= +-----END CERTIFICATE----- + +# Issuer: CN=TeliaSonera Root CA v1 O=TeliaSonera +# Subject: CN=TeliaSonera Root CA v1 O=TeliaSonera +# Label: "TeliaSonera Root CA v1" +# Serial: 199041966741090107964904287217786801558 +# MD5 Fingerprint: 37:41:49:1b:18:56:9a:26:f5:ad:c2:66:fb:40:a5:4c +# SHA1 Fingerprint: 43:13:bb:96:f1:d5:86:9b:c1:4e:6a:92:f6:cf:f6:34:69:87:82:37 +# SHA256 Fingerprint: dd:69:36:fe:21:f8:f0:77:c1:23:a1:a5:21:c1:22:24:f7:22:55:b7:3e:03:a7:26:06:93:e8:a2:4b:0f:a3:89 +-----BEGIN CERTIFICATE----- +MIIFODCCAyCgAwIBAgIRAJW+FqD3LkbxezmCcvqLzZYwDQYJKoZIhvcNAQEFBQAw +NzEUMBIGA1UECgwLVGVsaWFTb25lcmExHzAdBgNVBAMMFlRlbGlhU29uZXJhIFJv +b3QgQ0EgdjEwHhcNMDcxMDE4MTIwMDUwWhcNMzIxMDE4MTIwMDUwWjA3MRQwEgYD +VQQKDAtUZWxpYVNvbmVyYTEfMB0GA1UEAwwWVGVsaWFTb25lcmEgUm9vdCBDQSB2 +MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMK+6yfwIaPzaSZVfp3F +VRaRXP3vIb9TgHot0pGMYzHw7CTww6XScnwQbfQ3t+XmfHnqjLWCi65ItqwA3GV1 +7CpNX8GH9SBlK4GoRz6JI5UwFpB/6FcHSOcZrr9FZ7E3GwYq/t75rH2D+1665I+X +Z75Ljo1kB1c4VWk0Nj0TSO9P4tNmHqTPGrdeNjPUtAa9GAH9d4RQAEX1jF3oI7x+ +/jXh7VB7qTCNGdMJjmhnXb88lxhTuylixcpecsHHltTbLaC0H2kD7OriUPEMPPCs +81Mt8Bz17Ww5OXOAFshSsCPN4D7c3TxHoLs1iuKYaIu+5b9y7tL6pe0S7fyYGKkm +dtwoSxAgHNN/Fnct7W+A90m7UwW7XWjH1Mh1Fj+JWov3F0fUTPHSiXk+TT2YqGHe +Oh7S+F4D4MHJHIzTjU3TlTazN19jY5szFPAtJmtTfImMMsJu7D0hADnJoWjiUIMu +sDor8zagrC/kb2HCUQk5PotTubtn2txTuXZZNp1D5SDgPTJghSJRt8czu90VL6R4 +pgd7gUY2BIbdeTXHlSw7sKMXNeVzH7RcWe/a6hBle3rQf5+ztCo3O3CLm1u5K7fs +slESl1MpWtTwEhDcTwK7EpIvYtQ/aUN8Ddb8WHUBiJ1YFkveupD/RwGJBmr2X7KQ +arMCpgKIv7NHfirZ1fpoeDVNAgMBAAGjPzA9MA8GA1UdEwEB/wQFMAMBAf8wCwYD +VR0PBAQDAgEGMB0GA1UdDgQWBBTwj1k4ALP1j5qWDNXr+nuqF+gTEjANBgkqhkiG +9w0BAQUFAAOCAgEAvuRcYk4k9AwI//DTDGjkk0kiP0Qnb7tt3oNmzqjMDfz1mgbl +dxSR651Be5kqhOX//CHBXfDkH1e3damhXwIm/9fH907eT/j3HEbAek9ALCI18Bmx +0GtnLLCo4MBANzX2hFxc469CeP6nyQ1Q6g2EdvZR74NTxnr/DlZJLo961gzmJ1Tj +TQpgcmLNkQfWpb/ImWvtxBnmq0wROMVvMeJuScg/doAmAyYp4Db29iBT4xdwNBed +Y2gea+zDTYa4EzAvXUYNR0PVG6pZDrlcjQZIrXSHX8f8MVRBE+LHIQ6e4B4N4cB7 +Q4WQxYpYxmUKeFfyxiMPAdkgS94P+5KFdSpcc41teyWRyu5FrgZLAMzTsVlQ2jqI +OylDRl6XK1TOU2+NSueW+r9xDkKLfP0ooNBIytrEgUy7onOTJsjrDNYmiLbAJM+7 +vVvrdX3pCI6GMyx5dwlppYn8s3CQh3aP0yK7Qs69cwsgJirQmz1wHiRszYd2qReW +t88NkvuOGKmYSdGe/mBEciG5Ge3C9THxOUiIkCR1VBatzvT4aRRkOfujuLpwQMcn +HL/EVlP6Y2XQ8xwOFvVrhlhNGNTkDY6lnVuR3HYkUD/GKvvZt5y11ubQ2egZixVx +SK236thZiNSQvxaz2emsWWFUyBy6ysHK4bkgTI86k4mloMy/0/Z1pHWWbVY= +-----END CERTIFICATE----- + +# Issuer: CN=E-Tugra Certification Authority O=E-Tu\u011fra EBG Bili\u015fim Teknolojileri ve Hizmetleri A.\u015e. OU=E-Tugra Sertifikasyon Merkezi +# Subject: CN=E-Tugra Certification Authority O=E-Tu\u011fra EBG Bili\u015fim Teknolojileri ve Hizmetleri A.\u015e. OU=E-Tugra Sertifikasyon Merkezi +# Label: "E-Tugra Certification Authority" +# Serial: 7667447206703254355 +# MD5 Fingerprint: b8:a1:03:63:b0:bd:21:71:70:8a:6f:13:3a:bb:79:49 +# SHA1 Fingerprint: 51:c6:e7:08:49:06:6e:f3:92:d4:5c:a0:0d:6d:a3:62:8f:c3:52:39 +# SHA256 Fingerprint: b0:bf:d5:2b:b0:d7:d9:bd:92:bf:5d:4d:c1:3d:a2:55:c0:2c:54:2f:37:83:65:ea:89:39:11:f5:5e:55:f2:3c +-----BEGIN CERTIFICATE----- +MIIGSzCCBDOgAwIBAgIIamg+nFGby1MwDQYJKoZIhvcNAQELBQAwgbIxCzAJBgNV +BAYTAlRSMQ8wDQYDVQQHDAZBbmthcmExQDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBC +aWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhpem1ldGxlcmkgQS7Fni4xJjAkBgNV +BAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBNZXJrZXppMSgwJgYDVQQDDB9FLVR1 +Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTEzMDMwNTEyMDk0OFoXDTIz +MDMwMzEyMDk0OFowgbIxCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmExQDA+ +BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhp +em1ldGxlcmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBN +ZXJrZXppMSgwJgYDVQQDDB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA4vU/kwVRHoViVF56C/UY +B4Oufq9899SKa6VjQzm5S/fDxmSJPZQuVIBSOTkHS0vdhQd2h8y/L5VMzH2nPbxH +D5hw+IyFHnSOkm0bQNGZDbt1bsipa5rAhDGvykPL6ys06I+XawGb1Q5KCKpbknSF +Q9OArqGIW66z6l7LFpp3RMih9lRozt6Plyu6W0ACDGQXwLWTzeHxE2bODHnv0ZEo +q1+gElIwcxmOj+GMB6LDu0rw6h8VqO4lzKRG+Bsi77MOQ7osJLjFLFzUHPhdZL3D +k14opz8n8Y4e0ypQBaNV2cvnOVPAmJ6MVGKLJrD3fY185MaeZkJVgkfnsliNZvcH +fC425lAcP9tDJMW/hkd5s3kc91r0E+xs+D/iWR+V7kI+ua2oMoVJl0b+SzGPWsut +dEcf6ZG33ygEIqDUD13ieU/qbIWGvaimzuT6w+Gzrt48Ue7LE3wBf4QOXVGUnhMM +ti6lTPk5cDZvlsouDERVxcr6XQKj39ZkjFqzAQqptQpHF//vkUAqjqFGOjGY5RH8 +zLtJVor8udBhmm9lbObDyz51Sf6Pp+KJxWfXnUYTTjF2OySznhFlhqt/7x3U+Lzn +rFpct1pHXFXOVbQicVtbC/DP3KBhZOqp12gKY6fgDT+gr9Oq0n7vUaDmUStVkhUX +U8u3Zg5mTPj5dUyQ5xJwx0UCAwEAAaNjMGEwHQYDVR0OBBYEFC7j27JJ0JxUeVz6 +Jyr+zE7S6E5UMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAULuPbsknQnFR5 +XPonKv7MTtLoTlQwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQAF +Nzr0TbdF4kV1JI+2d1LoHNgQk2Xz8lkGpD4eKexd0dCrfOAKkEh47U6YA5n+KGCR +HTAduGN8qOY1tfrTYXbm1gdLymmasoR6d5NFFxWfJNCYExL/u6Au/U5Mh/jOXKqY +GwXgAEZKgoClM4so3O0409/lPun++1ndYYRP0lSWE2ETPo+Aab6TR7U1Q9Jauz1c +77NCR807VRMGsAnb/WP2OogKmW9+4c4bU2pEZiNRCHu8W1Ki/QY3OEBhj0qWuJA3 ++GbHeJAAFS6LrVE1Uweoa2iu+U48BybNCAVwzDk/dr2l02cmAYamU9JgO3xDf1WK +vJUawSg5TB9D0pH0clmKuVb8P7Sd2nCcdlqMQ1DujjByTd//SffGqWfZbawCEeI6 +FiWnWAjLb1NBnEg4R2gz0dfHj9R0IdTDBZB6/86WiLEVKV0jq9BgoRJP3vQXzTLl +yb/IQ639Lo7xr+L0mPoSHyDYwKcMhcWQ9DstliaxLL5Mq+ux0orJ23gTDx4JnW2P +AJ8C2sH6H3p6CcRK5ogql5+Ji/03X186zjhZhkuvcQu02PJwT58yE+Owp1fl2tpD +y4Q08ijE6m30Ku/Ba3ba+367hTzSU8JNvnHhRdH9I2cNE3X7z2VnIp2usAnRCf8d +NL/+I5c30jn6PQ0GC7TbO6Orb1wdtn7os4I07QZcJA== +-----END CERTIFICATE----- + +# Issuer: CN=T-TeleSec GlobalRoot Class 2 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center +# Subject: CN=T-TeleSec GlobalRoot Class 2 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center +# Label: "T-TeleSec GlobalRoot Class 2" +# Serial: 1 +# MD5 Fingerprint: 2b:9b:9e:e4:7b:6c:1f:00:72:1a:cc:c1:77:79:df:6a +# SHA1 Fingerprint: 59:0d:2d:7d:88:4f:40:2e:61:7e:a5:62:32:17:65:cf:17:d8:94:e9 +# SHA256 Fingerprint: 91:e2:f5:78:8d:58:10:eb:a7:ba:58:73:7d:e1:54:8a:8e:ca:cd:01:45:98:bc:0b:14:3e:04:1b:17:05:25:52 +-----BEGIN CERTIFICATE----- +MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx +KzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd +BgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNl +YyBHbG9iYWxSb290IENsYXNzIDIwHhcNMDgxMDAxMTA0MDE0WhcNMzMxMDAxMjM1 +OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnBy +aXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50 +ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCqX9obX+hzkeXaXPSi5kfl82hVYAUd +AqSzm1nzHoqvNK38DcLZSBnuaY/JIPwhqgcZ7bBcrGXHX+0CfHt8LRvWurmAwhiC +FoT6ZrAIxlQjgeTNuUk/9k9uN0goOA/FvudocP05l03Sx5iRUKrERLMjfTlH6VJi +1hKTXrcxlkIF+3anHqP1wvzpesVsqXFP6st4vGCvx9702cu+fjOlbpSD8DT6Iavq +jnKgP6TeMFvvhk1qlVtDRKgQFRzlAVfFmPHmBiiRqiDFt1MmUUOyCxGVWOHAD3bZ +wI18gfNycJ5v/hqO2V81xrJvNHy+SE/iWjnX2J14np+GPgNeGYtEotXHAgMBAAGj +QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS/ +WSA2AHmgoCJrjNXyYdK4LMuCSjANBgkqhkiG9w0BAQsFAAOCAQEAMQOiYQsfdOhy +NsZt+U2e+iKo4YFWz827n+qrkRk4r6p8FU3ztqONpfSO9kSpp+ghla0+AGIWiPAC +uvxhI+YzmzB6azZie60EI4RYZeLbK4rnJVM3YlNfvNoBYimipidx5joifsFvHZVw +IEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR3p1m0IvVVGb6 +g1XqfMIpiRvpb7PO4gWEyS8+eIVibslfwXhjdFjASBgMmTnrpMwatXlajRWc2BQN +9noHV8cigwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlP +BSeOE6Fuwg== +-----END CERTIFICATE----- + +# Issuer: CN=Atos TrustedRoot 2011 O=Atos +# Subject: CN=Atos TrustedRoot 2011 O=Atos +# Label: "Atos TrustedRoot 2011" +# Serial: 6643877497813316402 +# MD5 Fingerprint: ae:b9:c4:32:4b:ac:7f:5d:66:cc:77:94:bb:2a:77:56 +# SHA1 Fingerprint: 2b:b1:f5:3e:55:0c:1d:c5:f1:d4:e6:b7:6a:46:4b:55:06:02:ac:21 +# SHA256 Fingerprint: f3:56:be:a2:44:b7:a9:1e:b3:5d:53:ca:9a:d7:86:4a:ce:01:8e:2d:35:d5:f8:f9:6d:df:68:a6:f4:1a:a4:74 +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIIXDPLYixfszIwDQYJKoZIhvcNAQELBQAwPDEeMBwGA1UE +AwwVQXRvcyBUcnVzdGVkUm9vdCAyMDExMQ0wCwYDVQQKDARBdG9zMQswCQYDVQQG +EwJERTAeFw0xMTA3MDcxNDU4MzBaFw0zMDEyMzEyMzU5NTlaMDwxHjAcBgNVBAMM +FUF0b3MgVHJ1c3RlZFJvb3QgMjAxMTENMAsGA1UECgwEQXRvczELMAkGA1UEBhMC +REUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCVhTuXbyo7LjvPpvMp +Nb7PGKw+qtn4TaA+Gke5vJrf8v7MPkfoepbCJI419KkM/IL9bcFyYie96mvr54rM +VD6QUM+A1JX76LWC1BTFtqlVJVfbsVD2sGBkWXppzwO3bw2+yj5vdHLqqjAqc2K+ +SZFhyBH+DgMq92og3AIVDV4VavzjgsG1xZ1kCWyjWZgHJ8cblithdHFsQ/H3NYkQ +4J7sVaE3IqKHBAUsR320HLliKWYoyrfhk/WklAOZuXCFteZI6o1Q/NnezG8HDt0L +cp2AMBYHlT8oDv3FdU9T1nSatCQujgKRz3bFmx5VdJx4IbHwLfELn8LVlhgf8FQi +eowHAgMBAAGjfTB7MB0GA1UdDgQWBBSnpQaxLKYJYO7Rl+lwrrw7GWzbITAPBgNV +HRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKelBrEspglg7tGX6XCuvDsZbNshMBgG +A1UdIAQRMA8wDQYLKwYBBAGwLQMEAQEwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3 +DQEBCwUAA4IBAQAmdzTblEiGKkGdLD4GkGDEjKwLVLgfuXvTBznk+j57sj1O7Z8j +vZfza1zv7v1Apt+hk6EKhqzvINB5Ab149xnYJDE0BAGmuhWawyfc2E8PzBhj/5kP +DpFrdRbhIfzYJsdHt6bPWHJxfrrhTZVHO8mvbaG0weyJ9rQPOLXiZNwlz6bb65pc +maHFCN795trV1lpFDMS3wrUU77QR/w4VtfX128a961qn8FYiqTxlVMYVqL2Gns2D +lmh6cYGJ4Qvh6hEbaAjMaZ7snkGeRDImeuKHCnE96+RapNLbxc3G3mB/ufNPRJLv +KrcYPqcZ2Qt9sTdBQrC6YB3y/gkRsPCHe6ed +-----END CERTIFICATE----- + +# Issuer: CN=QuoVadis Root CA 1 G3 O=QuoVadis Limited +# Subject: CN=QuoVadis Root CA 1 G3 O=QuoVadis Limited +# Label: "QuoVadis Root CA 1 G3" +# Serial: 687049649626669250736271037606554624078720034195 +# MD5 Fingerprint: a4:bc:5b:3f:fe:37:9a:fa:64:f0:e2:fa:05:3d:0b:ab +# SHA1 Fingerprint: 1b:8e:ea:57:96:29:1a:c9:39:ea:b8:0a:81:1a:73:73:c0:93:79:67 +# SHA256 Fingerprint: 8a:86:6f:d1:b2:76:b5:7e:57:8e:92:1c:65:82:8a:2b:ed:58:e9:f2:f2:88:05:41:34:b7:f1:f4:bf:c9:cc:74 +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIUeFhfLq0sGUvjNwc1NBMotZbUZZMwDQYJKoZIhvcNAQEL +BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc +BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMSBHMzAeFw0xMjAxMTIxNzI3NDRaFw00 +MjAxMTIxNzI3NDRaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM +aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDEgRzMwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQCgvlAQjunybEC0BJyFuTHK3C3kEakEPBtV +wedYMB0ktMPvhd6MLOHBPd+C5k+tR4ds7FtJwUrVu4/sh6x/gpqG7D0DmVIB0jWe +rNrwU8lmPNSsAgHaJNM7qAJGr6Qc4/hzWHa39g6QDbXwz8z6+cZM5cOGMAqNF341 +68Xfuw6cwI2H44g4hWf6Pser4BOcBRiYz5P1sZK0/CPTz9XEJ0ngnjybCKOLXSoh +4Pw5qlPafX7PGglTvF0FBM+hSo+LdoINofjSxxR3W5A2B4GbPgb6Ul5jxaYA/qXp +UhtStZI5cgMJYr2wYBZupt0lwgNm3fME0UDiTouG9G/lg6AnhF4EwfWQvTA9xO+o +abw4m6SkltFi2mnAAZauy8RRNOoMqv8hjlmPSlzkYZqn0ukqeI1RPToV7qJZjqlc +3sX5kCLliEVx3ZGZbHqfPT2YfF72vhZooF6uCyP8Wg+qInYtyaEQHeTTRCOQiJ/G +KubX9ZqzWB4vMIkIG1SitZgj7Ah3HJVdYdHLiZxfokqRmu8hqkkWCKi9YSgxyXSt +hfbZxbGL0eUQMk1fiyA6PEkfM4VZDdvLCXVDaXP7a3F98N/ETH3Goy7IlXnLc6KO +Tk0k+17kBL5yG6YnLUlamXrXXAkgt3+UuU/xDRxeiEIbEbfnkduebPRq34wGmAOt +zCjvpUfzUwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB +BjAdBgNVHQ4EFgQUo5fW816iEOGrRZ88F2Q87gFwnMwwDQYJKoZIhvcNAQELBQAD +ggIBABj6W3X8PnrHX3fHyt/PX8MSxEBd1DKquGrX1RUVRpgjpeaQWxiZTOOtQqOC +MTaIzen7xASWSIsBx40Bz1szBpZGZnQdT+3Btrm0DWHMY37XLneMlhwqI2hrhVd2 +cDMT/uFPpiN3GPoajOi9ZcnPP/TJF9zrx7zABC4tRi9pZsMbj/7sPtPKlL92CiUN +qXsCHKnQO18LwIE6PWThv6ctTr1NxNgpxiIY0MWscgKCP6o6ojoilzHdCGPDdRS5 +YCgtW2jgFqlmgiNR9etT2DGbe+m3nUvriBbP+V04ikkwj+3x6xn0dxoxGE1nVGwv +b2X52z3sIexe9PSLymBlVNFxZPT5pqOBMzYzcfCkeF9OrYMh3jRJjehZrJ3ydlo2 +8hP0r+AJx2EqbPfgna67hkooby7utHnNkDPDs3b69fBsnQGQ+p6Q9pxyz0fawx/k +NSBT8lTR32GDpgLiJTjehTItXnOQUl1CxM49S+H5GYQd1aJQzEH7QRTDvdbJWqNj +ZgKAvQU6O0ec7AAmTPWIUb+oI38YB7AL7YsmoWTTYUrrXJ/es69nA7Mf3W1daWhp +q1467HxpvMc7hU6eFbm0FU/DlXpY18ls6Wy58yljXrQs8C097Vpl4KlbQMJImYFt +nh8GKjwStIsPm6Ik8KaN1nrgS7ZklmOVhMJKzRwuJIczYOXD +-----END CERTIFICATE----- + +# Issuer: CN=QuoVadis Root CA 2 G3 O=QuoVadis Limited +# Subject: CN=QuoVadis Root CA 2 G3 O=QuoVadis Limited +# Label: "QuoVadis Root CA 2 G3" +# Serial: 390156079458959257446133169266079962026824725800 +# MD5 Fingerprint: af:0c:86:6e:bf:40:2d:7f:0b:3e:12:50:ba:12:3d:06 +# SHA1 Fingerprint: 09:3c:61:f3:8b:8b:dc:7d:55:df:75:38:02:05:00:e1:25:f5:c8:36 +# SHA256 Fingerprint: 8f:e4:fb:0a:f9:3a:4d:0d:67:db:0b:eb:b2:3e:37:c7:1b:f3:25:dc:bc:dd:24:0e:a0:4d:af:58:b4:7e:18:40 +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIURFc0JFuBiZs18s64KztbpybwdSgwDQYJKoZIhvcNAQEL +BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc +BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMiBHMzAeFw0xMjAxMTIxODU5MzJaFw00 +MjAxMTIxODU5MzJaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM +aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDIgRzMwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQChriWyARjcV4g/Ruv5r+LrI3HimtFhZiFf +qq8nUeVuGxbULX1QsFN3vXg6YOJkApt8hpvWGo6t/x8Vf9WVHhLL5hSEBMHfNrMW +n4rjyduYNM7YMxcoRvynyfDStNVNCXJJ+fKH46nafaF9a7I6JaltUkSs+L5u+9ym +c5GQYaYDFCDy54ejiK2toIz/pgslUiXnFgHVy7g1gQyjO/Dh4fxaXc6AcW34Sas+ +O7q414AB+6XrW7PFXmAqMaCvN+ggOp+oMiwMzAkd056OXbxMmO7FGmh77FOm6RQ1 +o9/NgJ8MSPsc9PG/Srj61YxxSscfrf5BmrODXfKEVu+lV0POKa2Mq1W/xPtbAd0j +IaFYAI7D0GoT7RPjEiuA3GfmlbLNHiJuKvhB1PLKFAeNilUSxmn1uIZoL1NesNKq +IcGY5jDjZ1XHm26sGahVpkUG0CM62+tlXSoREfA7T8pt9DTEceT/AFr2XK4jYIVz +8eQQsSWu1ZK7E8EM4DnatDlXtas1qnIhO4M15zHfeiFuuDIIfR0ykRVKYnLP43eh +vNURG3YBZwjgQQvD6xVu+KQZ2aKrr+InUlYrAoosFCT5v0ICvybIxo/gbjh9Uy3l +7ZizlWNof/k19N+IxWA1ksB8aRxhlRbQ694Lrz4EEEVlWFA4r0jyWbYW8jwNkALG +cC4BrTwV1wIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB +BjAdBgNVHQ4EFgQU7edvdlq/YOxJW8ald7tyFnGbxD0wDQYJKoZIhvcNAQELBQAD +ggIBAJHfgD9DCX5xwvfrs4iP4VGyvD11+ShdyLyZm3tdquXK4Qr36LLTn91nMX66 +AarHakE7kNQIXLJgapDwyM4DYvmL7ftuKtwGTTwpD4kWilhMSA/ohGHqPHKmd+RC +roijQ1h5fq7KpVMNqT1wvSAZYaRsOPxDMuHBR//47PERIjKWnML2W2mWeyAMQ0Ga +W/ZZGYjeVYg3UQt4XAoeo0L9x52ID8DyeAIkVJOviYeIyUqAHerQbj5hLja7NQ4n +lv1mNDthcnPxFlxHBlRJAHpYErAK74X9sbgzdWqTHBLmYF5vHX/JHyPLhGGfHoJE ++V+tYlUkmlKY7VHnoX6XOuYvHxHaU4AshZ6rNRDbIl9qxV6XU/IyAgkwo1jwDQHV +csaxfGl7w/U2Rcxhbl5MlMVerugOXou/983g7aEOGzPuVBj+D77vfoRrQ+NwmNtd +dbINWQeFFSM51vHfqSYP1kjHs6Yi9TM3WpVHn3u6GBVv/9YUZINJ0gpnIdsPNWNg +KCLjsZWDzYWm3S8P52dSbrsvhXz1SnPnxT7AvSESBT/8twNJAlvIJebiVDj1eYeM +HVOyToV7BjjHLPj4sHKNJeV3UvQDHEimUF+IIDBu8oJDqz2XhOdT+yHBTw8imoa4 +WSr2Rz0ZiC3oheGe7IUIarFsNMkd7EgrO3jtZsSOeWmD3n+M +-----END CERTIFICATE----- + +# Issuer: CN=QuoVadis Root CA 3 G3 O=QuoVadis Limited +# Subject: CN=QuoVadis Root CA 3 G3 O=QuoVadis Limited +# Label: "QuoVadis Root CA 3 G3" +# Serial: 268090761170461462463995952157327242137089239581 +# MD5 Fingerprint: df:7d:b9:ad:54:6f:68:a1:df:89:57:03:97:43:b0:d7 +# SHA1 Fingerprint: 48:12:bd:92:3c:a8:c4:39:06:e7:30:6d:27:96:e6:a4:cf:22:2e:7d +# SHA256 Fingerprint: 88:ef:81:de:20:2e:b0:18:45:2e:43:f8:64:72:5c:ea:5f:bd:1f:c2:d9:d2:05:73:07:09:c5:d8:b8:69:0f:46 +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIULvWbAiin23r/1aOp7r0DoM8Sah0wDQYJKoZIhvcNAQEL +BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc +BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMyBHMzAeFw0xMjAxMTIyMDI2MzJaFw00 +MjAxMTIyMDI2MzJaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM +aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDMgRzMwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQCzyw4QZ47qFJenMioKVjZ/aEzHs286IxSR +/xl/pcqs7rN2nXrpixurazHb+gtTTK/FpRp5PIpM/6zfJd5O2YIyC0TeytuMrKNu +FoM7pmRLMon7FhY4futD4tN0SsJiCnMK3UmzV9KwCoWdcTzeo8vAMvMBOSBDGzXR +U7Ox7sWTaYI+FrUoRqHe6okJ7UO4BUaKhvVZR74bbwEhELn9qdIoyhA5CcoTNs+c +ra1AdHkrAj80//ogaX3T7mH1urPnMNA3I4ZyYUUpSFlob3emLoG+B01vr87ERROR +FHAGjx+f+IdpsQ7vw4kZ6+ocYfx6bIrc1gMLnia6Et3UVDmrJqMz6nWB2i3ND0/k +A9HvFZcba5DFApCTZgIhsUfei5pKgLlVj7WiL8DWM2fafsSntARE60f75li59wzw +eyuxwHApw0BiLTtIadwjPEjrewl5qW3aqDCYz4ByA4imW0aucnl8CAMhZa634Ryl +sSqiMd5mBPfAdOhx3v89WcyWJhKLhZVXGqtrdQtEPREoPHtht+KPZ0/l7DxMYIBp +VzgeAVuNVejH38DMdyM0SXV89pgR6y3e7UEuFAUCf+D+IOs15xGsIs5XPd7JMG0Q +A4XN8f+MFrXBsj6IbGB/kE+V9/YtrQE5BwT6dYB9v0lQ7e/JxHwc64B+27bQ3RP+ +ydOc17KXqQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB +BjAdBgNVHQ4EFgQUxhfQvKjqAkPyGwaZXSuQILnXnOQwDQYJKoZIhvcNAQELBQAD +ggIBADRh2Va1EodVTd2jNTFGu6QHcrxfYWLopfsLN7E8trP6KZ1/AvWkyaiTt3px +KGmPc+FSkNrVvjrlt3ZqVoAh313m6Tqe5T72omnHKgqwGEfcIHB9UqM+WXzBusnI +FUBhynLWcKzSt/Ac5IYp8M7vaGPQtSCKFWGafoaYtMnCdvvMujAWzKNhxnQT5Wvv +oxXqA/4Ti2Tk08HS6IT7SdEQTXlm66r99I0xHnAUrdzeZxNMgRVhvLfZkXdxGYFg +u/BYpbWcC/ePIlUnwEsBbTuZDdQdm2NnL9DuDcpmvJRPpq3t/O5jrFc/ZSXPsoaP +0Aj/uHYUbt7lJ+yreLVTubY/6CD50qi+YUbKh4yE8/nxoGibIh6BJpsQBJFxwAYf +3KDTuVan45gtf4Od34wrnDKOMpTwATwiKp9Dwi7DmDkHOHv8XgBCH/MyJnmDhPbl +8MFREsALHgQjDFSlTC9JxUrRtm5gDWv8a4uFJGS3iQ6rJUdbPM9+Sb3H6QrG2vd+ +DhcI00iX0HGS8A85PjRqHH3Y8iKuu2n0M7SmSFXRDw4m6Oy2Cy2nhTXN/VnIn9HN +PlopNLk9hM6xZdRZkZFWdSHBd575euFgndOtBBj0fOtek49TSiIp+EgrPk2GrFt/ +ywaZWWDYWGWVjUTR939+J399roD1B0y2PpxxVJkES/1Y+Zj0 +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert Assured ID Root G2 O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert Assured ID Root G2 O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert Assured ID Root G2" +# Serial: 15385348160840213938643033620894905419 +# MD5 Fingerprint: 92:38:b9:f8:63:24:82:65:2c:57:33:e6:fe:81:8f:9d +# SHA1 Fingerprint: a1:4b:48:d9:43:ee:0a:0e:40:90:4f:3c:e0:a4:c0:91:93:51:5d:3f +# SHA256 Fingerprint: 7d:05:eb:b6:82:33:9f:8c:94:51:ee:09:4e:eb:fe:fa:79:53:a1:14:ed:b2:f4:49:49:45:2f:ab:7d:2f:c1:85 +-----BEGIN CERTIFICATE----- +MIIDljCCAn6gAwIBAgIQC5McOtY5Z+pnI7/Dr5r0SzANBgkqhkiG9w0BAQsFADBl +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv +b3QgRzIwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBlMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl +cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIwggEi +MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZ5ygvUj82ckmIkzTz+GoeMVSA +n61UQbVH35ao1K+ALbkKz3X9iaV9JPrjIgwrvJUXCzO/GU1BBpAAvQxNEP4Htecc +biJVMWWXvdMX0h5i89vqbFCMP4QMls+3ywPgym2hFEwbid3tALBSfK+RbLE4E9Hp +EgjAALAcKxHad3A2m67OeYfcgnDmCXRwVWmvo2ifv922ebPynXApVfSr/5Vh88lA +bx3RvpO704gqu52/clpWcTs/1PPRCv4o76Pu2ZmvA9OPYLfykqGxvYmJHzDNw6Yu +YjOuFgJ3RFrngQo8p0Quebg/BLxcoIfhG69Rjs3sLPr4/m3wOnyqi+RnlTGNAgMB +AAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQW +BBTOw0q5mVXyuNtgv6l+vVa1lzan1jANBgkqhkiG9w0BAQsFAAOCAQEAyqVVjOPI +QW5pJ6d1Ee88hjZv0p3GeDgdaZaikmkuOGybfQTUiaWxMTeKySHMq2zNixya1r9I +0jJmwYrA8y8678Dj1JGG0VDjA9tzd29KOVPt3ibHtX2vK0LRdWLjSisCx1BL4Gni +lmwORGYQRI+tBev4eaymG+g3NJ1TyWGqolKvSnAWhsI6yLETcDbYz+70CjTVW0z9 +B5yiutkBclzzTcHdDrEcDcRjvq30FPuJ7KJBDkzMyFdA0G4Dqs0MjomZmWzwPDCv +ON9vvKO+KSAnq3T/EyJ43pdSVR6DtVQgA+6uwE9W3jfMw3+qBCe703e4YtsXfJwo +IhNzbM8m9Yop5w== +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert Assured ID Root G3 O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert Assured ID Root G3 O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert Assured ID Root G3" +# Serial: 15459312981008553731928384953135426796 +# MD5 Fingerprint: 7c:7f:65:31:0c:81:df:8d:ba:3e:99:e2:5c:ad:6e:fb +# SHA1 Fingerprint: f5:17:a2:4f:9a:48:c6:c9:f8:a2:00:26:9f:dc:0f:48:2c:ab:30:89 +# SHA256 Fingerprint: 7e:37:cb:8b:4c:47:09:0c:ab:36:55:1b:a6:f4:5d:b8:40:68:0f:ba:16:6a:95:2d:b1:00:71:7f:43:05:3f:c2 +-----BEGIN CERTIFICATE----- +MIICRjCCAc2gAwIBAgIQC6Fa+h3foLVJRK/NJKBs7DAKBggqhkjOPQQDAzBlMQsw +CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu +ZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3Qg +RzMwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBlMQswCQYDVQQGEwJV +UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQu +Y29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwdjAQBgcq +hkjOPQIBBgUrgQQAIgNiAAQZ57ysRGXtzbg/WPuNsVepRC0FFfLvC/8QdJ+1YlJf +Zn4f5dwbRXkLzMZTCp2NXQLZqVneAlr2lSoOjThKiknGvMYDOAdfVdp+CW7if17Q +RSAPWXYQ1qAk8C3eNvJsKTmjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/ +BAQDAgGGMB0GA1UdDgQWBBTL0L2p4ZgFUaFNN6KDec6NHSrkhDAKBggqhkjOPQQD +AwNnADBkAjAlpIFFAmsSS3V0T8gj43DydXLefInwz5FyYZ5eEJJZVrmDxxDnOOlY +JjZ91eQ0hjkCMHw2U/Aw5WJjOpnitqM7mzT6HtoQknFekROn3aRukswy1vUhZscv +6pZjamVFkpUBtA== +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert Global Root G2 O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert Global Root G2 O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert Global Root G2" +# Serial: 4293743540046975378534879503202253541 +# MD5 Fingerprint: e4:a6:8a:c8:54:ac:52:42:46:0a:fd:72:48:1b:2a:44 +# SHA1 Fingerprint: df:3c:24:f9:bf:d6:66:76:1b:26:80:73:fe:06:d1:cc:8d:4f:82:a4 +# SHA256 Fingerprint: cb:3c:cb:b7:60:31:e5:e0:13:8f:8d:d3:9a:23:f9:de:47:ff:c3:5e:43:c1:14:4c:ea:27:d4:6a:5a:b1:cb:5f +-----BEGIN CERTIFICATE----- +MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBh +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH +MjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVT +MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j +b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkqhkiG +9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI +2/Ou8jqJkTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx +1x7e/dfgy5SDN67sH0NO3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQ +q2EGnI/yuum06ZIya7XzV+hdG82MHauVBJVJ8zUtluNJbd134/tJS7SsVQepj5Wz +tCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyMUNGPHgm+F6HmIcr9g+UQ +vIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQABo0IwQDAP +BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV +5uNu5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY +1Yl9PMWLSn/pvtsrF9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4 +NeF22d+mQrvHRAiGfzZ0JFrabA0UWTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NG +Fdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBHQRFXGU7Aj64GxJUTFy8bJZ91 +8rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/iyK5S9kJRaTe +pLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl +MrY= +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert Global Root G3 O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert Global Root G3 O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert Global Root G3" +# Serial: 7089244469030293291760083333884364146 +# MD5 Fingerprint: f5:5d:a4:50:a5:fb:28:7e:1e:0f:0d:cc:96:57:56:ca +# SHA1 Fingerprint: 7e:04:de:89:6a:3e:66:6d:00:e6:87:d3:3f:fa:d9:3b:e8:3d:34:9e +# SHA256 Fingerprint: 31:ad:66:48:f8:10:41:38:c7:38:f3:9e:a4:32:01:33:39:3e:3a:18:cc:02:29:6e:f9:7c:2a:c9:ef:67:31:d0 +-----BEGIN CERTIFICATE----- +MIICPzCCAcWgAwIBAgIQBVVWvPJepDU1w6QP1atFcjAKBggqhkjOPQQDAzBhMQsw +CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu +ZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMzAe +Fw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVTMRUw +EwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20x +IDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEczMHYwEAYHKoZIzj0CAQYF +K4EEACIDYgAE3afZu4q4C/sLfyHS8L6+c/MzXRq8NOrexpu80JX28MzQC7phW1FG +fp4tn+6OYwwX7Adw9c+ELkCDnOg/QW07rdOkFFk2eJ0DQ+4QE2xy3q6Ip6FrtUPO +Z9wj/wMco+I+o0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAd +BgNVHQ4EFgQUs9tIpPmhxdiuNkHMEWNpYim8S8YwCgYIKoZIzj0EAwMDaAAwZQIx +AK288mw/EkrRLTnDCgmXc/SINoyIJ7vmiI1Qhadj+Z4y3maTD/HMsQmP3Wyr+mt/ +oAIwOWZbwmSNuJ5Q3KjVSaLtx9zRSX8XAbjIho9OjIgrqJqpisXRAL34VOKa5Vt8 +sycX +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert Trusted Root G4 O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert Trusted Root G4 O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert Trusted Root G4" +# Serial: 7451500558977370777930084869016614236 +# MD5 Fingerprint: 78:f2:fc:aa:60:1f:2f:b4:eb:c9:37:ba:53:2e:75:49 +# SHA1 Fingerprint: dd:fb:16:cd:49:31:c9:73:a2:03:7d:3f:c8:3a:4d:7d:77:5d:05:e4 +# SHA256 Fingerprint: 55:2f:7b:dc:f1:a7:af:9e:6c:e6:72:01:7f:4f:12:ab:f7:72:40:c7:8e:76:1a:c2:03:d1:d9:d2:0a:c8:99:88 +-----BEGIN CERTIFICATE----- +MIIFkDCCA3igAwIBAgIQBZsbV56OITLiOQe9p3d1XDANBgkqhkiG9w0BAQwFADBi +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3Qg +RzQwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBiMQswCQYDVQQGEwJV +UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQu +Y29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3y +ithZwuEppz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1If +xp4VpX6+n6lXFllVcq9ok3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDV +ySAdYyktzuxeTsiT+CFhmzTrBcZe7FsavOvJz82sNEBfsXpm7nfISKhmV1efVFiO +DCu3T6cw2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGYQJB5w3jHtrHEtWoYOAMQ +jdjUN6QuBX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6MUSaM0C/ +CNdaSaTC5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCi +EhtmmnTK3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADM +fRyVw4/3IbKyEbe7f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QY +uKZ3AeEPlAwhHbJUKSWJbOUOUlFHdL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXK +chYiCd98THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8oR7FwI+isX4KJpn15GkvmB0t +9dmpsh3lGwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB +hjAdBgNVHQ4EFgQU7NfjgtJxXWRM3y5nP+e6mK4cD08wDQYJKoZIhvcNAQEMBQAD +ggIBALth2X2pbL4XxJEbw6GiAI3jZGgPVs93rnD5/ZpKmbnJeFwMDF/k5hQpVgs2 +SV1EY+CtnJYYZhsjDT156W1r1lT40jzBQ0CuHVD1UvyQO7uYmWlrx8GnqGikJ9yd ++SeuMIW59mdNOj6PWTkiU0TryF0Dyu1Qen1iIQqAyHNm0aAFYF/opbSnr6j3bTWc +fFqK1qI4mfN4i/RN0iAL3gTujJtHgXINwBQy7zBZLq7gcfJW5GqXb5JQbZaNaHqa +sjYUegbyJLkJEVDXCLG4iXqEI2FCKeWjzaIgQdfRnGTZ6iahixTXTBmyUEFxPT9N +cCOGDErcgdLMMpSEDQgJlxxPwO5rIHQw0uA5NBCFIRUBCOhVMt5xSdkoF1BN5r5N +0XWs0Mr7QbhDparTwwVETyw2m+L64kW4I1NsBm9nVX9GtUw/bihaeSbSpKhil9Ie +4u1Ki7wb/UdKDd9nZn6yW0HQO+T0O/QEY+nvwlQAUaCKKsnOeMzV6ocEGLPOr0mI +r/OSmbaz5mEP0oUA51Aa5BuVnRmhuZyxm7EAHu/QD09CbMkKvO5D+jpxpchNJqU1 +/YldvIViHTLSoCtU7ZpXwdv6EM8Zt4tKG48BtieVU+i2iW1bvGjUI+iLUaJW+fCm +gKDWHrO8Dw9TdSmq6hN35N6MgSGtBxBHEa2HPQfRdbzP82Z+ +-----END CERTIFICATE----- + +# Issuer: CN=COMODO RSA Certification Authority O=COMODO CA Limited +# Subject: CN=COMODO RSA Certification Authority O=COMODO CA Limited +# Label: "COMODO RSA Certification Authority" +# Serial: 101909084537582093308941363524873193117 +# MD5 Fingerprint: 1b:31:b0:71:40:36:cc:14:36:91:ad:c4:3e:fd:ec:18 +# SHA1 Fingerprint: af:e5:d2:44:a8:d1:19:42:30:ff:47:9f:e2:f8:97:bb:cd:7a:8c:b4 +# SHA256 Fingerprint: 52:f0:e1:c4:e5:8e:c6:29:29:1b:60:31:7f:07:46:71:b8:5d:7e:a8:0d:5b:07:27:34:63:53:4b:32:b4:02:34 +-----BEGIN CERTIFICATE----- +MIIF2DCCA8CgAwIBAgIQTKr5yttjb+Af907YWwOGnTANBgkqhkiG9w0BAQwFADCB +hTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G +A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNV +BAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAwMTE5 +MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgT +EkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR +Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCR +6FSS0gpWsawNJN3Fz0RndJkrN6N9I3AAcbxT38T6KhKPS38QVr2fcHK3YX/JSw8X +pz3jsARh7v8Rl8f0hj4K+j5c+ZPmNHrZFGvnnLOFoIJ6dq9xkNfs/Q36nGz637CC +9BR++b7Epi9Pf5l/tfxnQ3K9DADWietrLNPtj5gcFKt+5eNu/Nio5JIk2kNrYrhV +/erBvGy2i/MOjZrkm2xpmfh4SDBF1a3hDTxFYPwyllEnvGfDyi62a+pGx8cgoLEf +Zd5ICLqkTqnyg0Y3hOvozIFIQ2dOciqbXL1MGyiKXCJ7tKuY2e7gUYPDCUZObT6Z ++pUX2nwzV0E8jVHtC7ZcryxjGt9XyD+86V3Em69FmeKjWiS0uqlWPc9vqv9JWL7w +qP/0uK3pN/u6uPQLOvnoQ0IeidiEyxPx2bvhiWC4jChWrBQdnArncevPDt09qZah +SL0896+1DSJMwBGB7FY79tOi4lu3sgQiUpWAk2nojkxl8ZEDLXB0AuqLZxUpaVIC +u9ffUGpVRr+goyhhf3DQw6KqLCGqR84onAZFdr+CGCe01a60y1Dma/RMhnEw6abf +Fobg2P9A3fvQQoh/ozM6LlweQRGBY84YcWsr7KaKtzFcOmpH4MN5WdYgGq/yapiq +crxXStJLnbsQ/LBMQeXtHT1eKJ2czL+zUdqnR+WEUwIDAQABo0IwQDAdBgNVHQ4E +FgQUu69+Aj36pvE8hI6t7jiY7NkyMtQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB +/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAArx1UaEt65Ru2yyTUEUAJNMnMvl +wFTPoCWOAvn9sKIN9SCYPBMtrFaisNZ+EZLpLrqeLppysb0ZRGxhNaKatBYSaVqM +4dc+pBroLwP0rmEdEBsqpIt6xf4FpuHA1sj+nq6PK7o9mfjYcwlYRm6mnPTXJ9OV +2jeDchzTc+CiR5kDOF3VSXkAKRzH7JsgHAckaVd4sjn8OoSgtZx8jb8uk2Intzna +FxiuvTwJaP+EmzzV1gsD41eeFPfR60/IvYcjt7ZJQ3mFXLrrkguhxuhoqEwWsRqZ +CuhTLJK7oQkYdQxlqHvLI7cawiiFwxv/0Cti76R7CZGYZ4wUAc1oBmpjIXUDgIiK +boHGhfKppC3n9KUkEEeDys30jXlYsQab5xoq2Z0B15R97QNKyvDb6KkBPvVWmcke +jkk9u+UJueBPSZI9FoJAzMxZxuY67RIuaTxslbH9qh17f4a+Hg4yRvv7E491f0yL +S0Zj/gA0QHDBw7mh3aZw4gSzQbzpgJHqZJx64SIDqZxubw5lT2yHh17zbqD5daWb +QOhTsiedSrnAdyGN/4fy3ryM7xfft0kL0fJuMAsaDk527RH89elWsn2/x20Kk4yl +0MC2Hb46TpSi125sC8KKfPog88Tk5c0NqMuRkrF8hey1FGlmDoLnzc7ILaZRfyHB +NVOFBkpdn627G190 +-----END CERTIFICATE----- + +# Issuer: CN=USERTrust RSA Certification Authority O=The USERTRUST Network +# Subject: CN=USERTrust RSA Certification Authority O=The USERTRUST Network +# Label: "USERTrust RSA Certification Authority" +# Serial: 2645093764781058787591871645665788717 +# MD5 Fingerprint: 1b:fe:69:d1:91:b7:19:33:a3:72:a8:0f:e1:55:e5:b5 +# SHA1 Fingerprint: 2b:8f:1b:57:33:0d:bb:a2:d0:7a:6c:51:f7:0e:e9:0d:da:b9:ad:8e +# SHA256 Fingerprint: e7:93:c9:b0:2f:d8:aa:13:e2:1c:31:22:8a:cc:b0:81:19:64:3b:74:9c:89:89:64:b1:74:6d:46:c3:d4:cb:d2 +-----BEGIN CERTIFICATE----- +MIIF3jCCA8agAwIBAgIQAf1tMPyjylGoG7xkDjUDLTANBgkqhkiG9w0BAQwFADCB +iDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0pl +cnNleSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNV +BAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAw +MjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMCVVMxEzARBgNV +BAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU +aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBSU0EgQ2Vy +dGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK +AoICAQCAEmUXNg7D2wiz0KxXDXbtzSfTTK1Qg2HiqiBNCS1kCdzOiZ/MPans9s/B +3PHTsdZ7NygRK0faOca8Ohm0X6a9fZ2jY0K2dvKpOyuR+OJv0OwWIJAJPuLodMkY +tJHUYmTbf6MG8YgYapAiPLz+E/CHFHv25B+O1ORRxhFnRghRy4YUVD+8M/5+bJz/ +Fp0YvVGONaanZshyZ9shZrHUm3gDwFA66Mzw3LyeTP6vBZY1H1dat//O+T23LLb2 +VN3I5xI6Ta5MirdcmrS3ID3KfyI0rn47aGYBROcBTkZTmzNg95S+UzeQc0PzMsNT +79uq/nROacdrjGCT3sTHDN/hMq7MkztReJVni+49Vv4M0GkPGw/zJSZrM233bkf6 +c0Plfg6lZrEpfDKEY1WJxA3Bk1QwGROs0303p+tdOmw1XNtB1xLaqUkL39iAigmT +Yo61Zs8liM2EuLE/pDkP2QKe6xJMlXzzawWpXhaDzLhn4ugTncxbgtNMs+1b/97l +c6wjOy0AvzVVdAlJ2ElYGn+SNuZRkg7zJn0cTRe8yexDJtC/QV9AqURE9JnnV4ee +UB9XVKg+/XRjL7FQZQnmWEIuQxpMtPAlR1n6BB6T1CZGSlCBst6+eLf8ZxXhyVeE +Hg9j1uliutZfVS7qXMYoCAQlObgOK6nyTJccBz8NUvXt7y+CDwIDAQABo0IwQDAd +BgNVHQ4EFgQUU3m/WqorSs9UgOHYm8Cd8rIDZsswDgYDVR0PAQH/BAQDAgEGMA8G +A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAFzUfA3P9wF9QZllDHPF +Up/L+M+ZBn8b2kMVn54CVVeWFPFSPCeHlCjtHzoBN6J2/FNQwISbxmtOuowhT6KO +VWKR82kV2LyI48SqC/3vqOlLVSoGIG1VeCkZ7l8wXEskEVX/JJpuXior7gtNn3/3 +ATiUFJVDBwn7YKnuHKsSjKCaXqeYalltiz8I+8jRRa8YFWSQEg9zKC7F4iRO/Fjs +8PRF/iKz6y+O0tlFYQXBl2+odnKPi4w2r78NBc5xjeambx9spnFixdjQg3IM8WcR +iQycE0xyNN+81XHfqnHd4blsjDwSXWXavVcStkNr/+XeTWYRUc+ZruwXtuhxkYze +Sf7dNXGiFSeUHM9h4ya7b6NnJSFd5t0dCy5oGzuCr+yDZ4XUmFF0sbmZgIn/f3gZ +XHlKYC6SQK5MNyosycdiyA5d9zZbyuAlJQG03RoHnHcAP9Dc1ew91Pq7P8yF1m9/ +qS3fuQL39ZeatTXaw2ewh0qpKJ4jjv9cJ2vhsE/zB+4ALtRZh8tSQZXq9EfX7mRB +VXyNWQKV3WKdwrnuWih0hKWbt5DHDAff9Yk2dDLWKMGwsAvgnEzDHNb842m1R0aB +L6KCq9NjRHDEjf8tM7qtj3u1cIiuPhnPQCjY/MiQu12ZIvVS5ljFH4gxQ+6IHdfG +jjxDah2nGN59PRbxYvnKkKj9 +-----END CERTIFICATE----- + +# Issuer: CN=USERTrust ECC Certification Authority O=The USERTRUST Network +# Subject: CN=USERTrust ECC Certification Authority O=The USERTRUST Network +# Label: "USERTrust ECC Certification Authority" +# Serial: 123013823720199481456569720443997572134 +# MD5 Fingerprint: fa:68:bc:d9:b5:7f:ad:fd:c9:1d:06:83:28:cc:24:c1 +# SHA1 Fingerprint: d1:cb:ca:5d:b2:d5:2a:7f:69:3b:67:4d:e5:f0:5a:1d:0c:95:7d:f0 +# SHA256 Fingerprint: 4f:f4:60:d5:4b:9c:86:da:bf:bc:fc:57:12:e0:40:0d:2b:ed:3f:bc:4d:4f:bd:aa:86:e0:6a:dc:d2:a9:ad:7a +-----BEGIN CERTIFICATE----- +MIICjzCCAhWgAwIBAgIQXIuZxVqUxdJxVt7NiYDMJjAKBggqhkjOPQQDAzCBiDEL +MAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNl +eSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMT +JVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAwMjAx +MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgT +Ck5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVUaGUg +VVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlm +aWNhdGlvbiBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQarFRaqflo +I+d61SRvU8Za2EurxtW20eZzca7dnNYMYf3boIkDuAUU7FfO7l0/4iGzzvfUinng +o4N+LZfQYcTxmdwlkWOrfzCjtHDix6EznPO/LlxTsV+zfTJ/ijTjeXmjQjBAMB0G +A1UdDgQWBBQ64QmG1M8ZwpZ2dEl23OA1xmNjmjAOBgNVHQ8BAf8EBAMCAQYwDwYD +VR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjA2Z6EWCNzklwBBHU6+4WMB +zzuqQhFkoJ2UOQIReVx7Hfpkue4WQrO/isIJxOzksU0CMQDpKmFHjFJKS04YcPbW +RNZu9YO6bVi9JNlWSOrvxKJGgYhqOkbRqZtNyWHa0V1Xahg= +-----END CERTIFICATE----- + +# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R4 +# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R4 +# Label: "GlobalSign ECC Root CA - R4" +# Serial: 14367148294922964480859022125800977897474 +# MD5 Fingerprint: 20:f0:27:68:d1:7e:a0:9d:0e:e6:2a:ca:df:5c:89:8e +# SHA1 Fingerprint: 69:69:56:2e:40:80:f4:24:a1:e7:19:9f:14:ba:f3:ee:58:ab:6a:bb +# SHA256 Fingerprint: be:c9:49:11:c2:95:56:76:db:6c:0a:55:09:86:d7:6e:3b:a0:05:66:7c:44:2c:97:62:b4:fb:b7:73:de:22:8c +-----BEGIN CERTIFICATE----- +MIIB4TCCAYegAwIBAgIRKjikHJYKBN5CsiilC+g0mAIwCgYIKoZIzj0EAwIwUDEk +MCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpH +bG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoX +DTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBD +QSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWdu +MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEuMZ5049sJQ6fLjkZHAOkrprlOQcJ +FspjsbmG+IpXwVfOQvpzofdlQv8ewQCybnMO/8ch5RikqtlxP6jUuc6MHaNCMEAw +DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFFSwe61F +uOJAf/sKbvu+M8k8o4TVMAoGCCqGSM49BAMCA0gAMEUCIQDckqGgE6bPA7DmxCGX +kPoUVy0D7O48027KqGx2vKLeuwIgJ6iFJzWbVsaj8kfSt24bAgAXqmemFZHe+pTs +ewv4n4Q= +-----END CERTIFICATE----- + +# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R5 +# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R5 +# Label: "GlobalSign ECC Root CA - R5" +# Serial: 32785792099990507226680698011560947931244 +# MD5 Fingerprint: 9f:ad:3b:1c:02:1e:8a:ba:17:74:38:81:0c:a2:bc:08 +# SHA1 Fingerprint: 1f:24:c6:30:cd:a4:18:ef:20:69:ff:ad:4f:dd:5f:46:3a:1b:69:aa +# SHA256 Fingerprint: 17:9f:bc:14:8a:3d:d0:0f:d2:4e:a1:34:58:cc:43:bf:a7:f5:9c:81:82:d7:83:a5:13:f6:eb:ec:10:0c:89:24 +-----BEGIN CERTIFICATE----- +MIICHjCCAaSgAwIBAgIRYFlJ4CYuu1X5CneKcflK2GwwCgYIKoZIzj0EAwMwUDEk +MCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpH +bG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoX +DTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBD +QSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWdu +MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAER0UOlvt9Xb/pOdEh+J8LttV7HpI6SFkc +8GIxLcB6KP4ap1yztsyX50XUWPrRd21DosCHZTQKH3rd6zwzocWdTaRvQZU4f8ke +hOvRnkmSh5SHDDqFSmafnVmTTZdhBoZKo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYD +VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUPeYpSJvqB8ohREom3m7e0oPQn1kwCgYI +KoZIzj0EAwMDaAAwZQIxAOVpEslu28YxuglB4Zf4+/2a4n0Sye18ZNPLBSWLVtmg +515dTguDnFt2KaAJJiFqYgIwcdK1j1zqO+F4CYWodZI7yFz9SO8NdCKoCOJuxUnO +xwy8p2Fp8fc74SrL+SvzZpA3 +-----END CERTIFICATE----- + +# Issuer: CN=Staat der Nederlanden Root CA - G3 O=Staat der Nederlanden +# Subject: CN=Staat der Nederlanden Root CA - G3 O=Staat der Nederlanden +# Label: "Staat der Nederlanden Root CA - G3" +# Serial: 10003001 +# MD5 Fingerprint: 0b:46:67:07:db:10:2f:19:8c:35:50:60:d1:0b:f4:37 +# SHA1 Fingerprint: d8:eb:6b:41:51:92:59:e0:f3:e7:85:00:c0:3d:b6:88:97:c9:ee:fc +# SHA256 Fingerprint: 3c:4f:b0:b9:5a:b8:b3:00:32:f4:32:b8:6f:53:5f:e1:72:c1:85:d0:fd:39:86:58:37:cf:36:18:7f:a6:f4:28 +-----BEGIN CERTIFICATE----- +MIIFdDCCA1ygAwIBAgIEAJiiOTANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJO +TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFh +dCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQSAtIEczMB4XDTEzMTExNDExMjg0MloX +DTI4MTExMzIzMDAwMFowWjELMAkGA1UEBhMCTkwxHjAcBgNVBAoMFVN0YWF0IGRl +ciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5lZGVybGFuZGVuIFJv +b3QgQ0EgLSBHMzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL4yolQP +cPssXFnrbMSkUeiFKrPMSjTysF/zDsccPVMeiAho2G89rcKezIJnByeHaHE6n3WW +IkYFsO2tx1ueKt6c/DrGlaf1F2cY5y9JCAxcz+bMNO14+1Cx3Gsy8KL+tjzk7FqX +xz8ecAgwoNzFs21v0IJyEavSgWhZghe3eJJg+szeP4TrjTgzkApyI/o1zCZxMdFy +KJLZWyNtZrVtB0LrpjPOktvA9mxjeM3KTj215VKb8b475lRgsGYeCasH/lSJEULR +9yS6YHgamPfJEf0WwTUaVHXvQ9Plrk7O53vDxk5hUUurmkVLoR9BvUhTFXFkC4az +5S6+zqQbwSmEorXLCCN2QyIkHxcE1G6cxvx/K2Ya7Irl1s9N9WMJtxU51nus6+N8 +6U78dULI7ViVDAZCopz35HCz33JvWjdAidiFpNfxC95DGdRKWCyMijmev4SH8RY7 +Ngzp07TKbBlBUgmhHbBqv4LvcFEhMtwFdozL92TkA1CvjJFnq8Xy7ljY3r735zHP +bMk7ccHViLVlvMDoFxcHErVc0qsgk7TmgoNwNsXNo42ti+yjwUOH5kPiNL6VizXt +BznaqB16nzaeErAMZRKQFWDZJkBE41ZgpRDUajz9QdwOWke275dhdU/Z/seyHdTt +XUmzqWrLZoQT1Vyg3N9udwbRcXXIV2+vD3dbAgMBAAGjQjBAMA8GA1UdEwEB/wQF +MAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRUrfrHkleuyjWcLhL75Lpd +INyUVzANBgkqhkiG9w0BAQsFAAOCAgEAMJmdBTLIXg47mAE6iqTnB/d6+Oea31BD +U5cqPco8R5gu4RV78ZLzYdqQJRZlwJ9UXQ4DO1t3ApyEtg2YXzTdO2PCwyiBwpwp +LiniyMMB8jPqKqrMCQj3ZWfGzd/TtiunvczRDnBfuCPRy5FOCvTIeuXZYzbB1N/8 +Ipf3YF3qKS9Ysr1YvY2WTxB1v0h7PVGHoTx0IsL8B3+A3MSs/mrBcDCw6Y5p4ixp +gZQJut3+TcCDjJRYwEYgr5wfAvg1VUkvRtTA8KCWAg8zxXHzniN9lLf9OtMJgwYh +/WA9rjLA0u6NpvDntIJ8CsxwyXmA+P5M9zWEGYox+wrZ13+b8KKaa8MFSu1BYBQw +0aoRQm7TIwIEC8Zl3d1Sd9qBa7Ko+gE4uZbqKmxnl4mUnrzhVNXkanjvSr0rmj1A +fsbAddJu+2gw7OyLnflJNZoaLNmzlTnVHpL3prllL+U9bTpITAjc5CgSKL59NVzq +4BZ+Extq1z7XnvwtdbLBFNUjA9tbbws+eC8N3jONFrdI54OagQ97wUNNVQQXOEpR +1VmiiXTTn74eS9fGbbeIJG9gkaSChVtWQbzQRKtqE77RLFi3EjNYsjdj3BP1lB0/ +QFH1T/U67cjF68IeHRaVesd+QnGTbksVtzDfqu1XhUisHWrdOWnk4Xl4vs4Fv6EM +94B7IWcnMFk= +-----END CERTIFICATE----- + +# Issuer: CN=Staat der Nederlanden EV Root CA O=Staat der Nederlanden +# Subject: CN=Staat der Nederlanden EV Root CA O=Staat der Nederlanden +# Label: "Staat der Nederlanden EV Root CA" +# Serial: 10000013 +# MD5 Fingerprint: fc:06:af:7b:e8:1a:f1:9a:b4:e8:d2:70:1f:c0:f5:ba +# SHA1 Fingerprint: 76:e2:7e:c1:4f:db:82:c1:c0:a6:75:b5:05:be:3d:29:b4:ed:db:bb +# SHA256 Fingerprint: 4d:24:91:41:4c:fe:95:67:46:ec:4c:ef:a6:cf:6f:72:e2:8a:13:29:43:2f:9d:8a:90:7a:c4:cb:5d:ad:c1:5a +-----BEGIN CERTIFICATE----- +MIIFcDCCA1igAwIBAgIEAJiWjTANBgkqhkiG9w0BAQsFADBYMQswCQYDVQQGEwJO +TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSkwJwYDVQQDDCBTdGFh +dCBkZXIgTmVkZXJsYW5kZW4gRVYgUm9vdCBDQTAeFw0xMDEyMDgxMTE5MjlaFw0y +MjEyMDgxMTEwMjhaMFgxCzAJBgNVBAYTAk5MMR4wHAYDVQQKDBVTdGFhdCBkZXIg +TmVkZXJsYW5kZW4xKTAnBgNVBAMMIFN0YWF0IGRlciBOZWRlcmxhbmRlbiBFViBS +b290IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA48d+ifkkSzrS +M4M1LGns3Amk41GoJSt5uAg94JG6hIXGhaTK5skuU6TJJB79VWZxXSzFYGgEt9nC +UiY4iKTWO0Cmws0/zZiTs1QUWJZV1VD+hq2kY39ch/aO5ieSZxeSAgMs3NZmdO3d +Z//BYY1jTw+bbRcwJu+r0h8QoPnFfxZpgQNH7R5ojXKhTbImxrpsX23Wr9GxE46p +rfNeaXUmGD5BKyF/7otdBwadQ8QpCiv8Kj6GyzyDOvnJDdrFmeK8eEEzduG/L13l +pJhQDBXd4Pqcfzho0LKmeqfRMb1+ilgnQ7O6M5HTp5gVXJrm0w912fxBmJc+qiXb +j5IusHsMX/FjqTf5m3VpTCgmJdrV8hJwRVXj33NeN/UhbJCONVrJ0yPr08C+eKxC +KFhmpUZtcALXEPlLVPxdhkqHz3/KRawRWrUgUY0viEeXOcDPusBCAUCZSCELa6fS +/ZbV0b5GnUngC6agIk440ME8MLxwjyx1zNDFjFE7PZQIZCZhfbnDZY8UnCHQqv0X +cgOPvZuM5l5Tnrmd74K74bzickFbIZTTRTeU0d8JOV3nI6qaHcptqAqGhYqCvkIH +1vI4gnPah1vlPNOePqc7nvQDs/nxfRN0Av+7oeX6AHkcpmZBiFxgV6YuCcS6/ZrP +px9Aw7vMWgpVSzs4dlG4Y4uElBbmVvMCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB +/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFP6rAJCYniT8qcwaivsnuL8wbqg7 +MA0GCSqGSIb3DQEBCwUAA4ICAQDPdyxuVr5Os7aEAJSrR8kN0nbHhp8dB9O2tLsI +eK9p0gtJ3jPFrK3CiAJ9Brc1AsFgyb/E6JTe1NOpEyVa/m6irn0F3H3zbPB+po3u +2dfOWBfoqSmuc0iH55vKbimhZF8ZE/euBhD/UcabTVUlT5OZEAFTdfETzsemQUHS +v4ilf0X8rLiltTMMgsT7B/Zq5SWEXwbKwYY5EdtYzXc7LMJMD16a4/CrPmEbUCTC +wPTxGfARKbalGAKb12NMcIxHowNDXLldRqANb/9Zjr7dn3LDWyvfjFvO5QxGbJKy +CqNMVEIYFRIYvdr8unRu/8G2oGTYqV9Vrp9canaW2HNnh/tNf1zuacpzEPuKqf2e +vTY4SUmH9A4U8OmHuD+nT3pajnnUk+S7aFKErGzp85hwVXIy+TSrK0m1zSBi5Dp6 +Z2Orltxtrpfs/J92VoguZs9btsmksNcFuuEnL5O7Jiqik7Ab846+HUCjuTaPPoIa +Gl6I6lD4WeKDRikL40Rc4ZW2aZCaFG+XroHPaO+Zmr615+F/+PoTRxZMzG0IQOeL +eG9QgkRQP2YGiqtDhFZKDyAthg710tvSeopLzaXoTvFeJiUBWSOgftL2fiFX1ye8 +FVdMpEbB4IMeDExNH08GGeL5qPQ6gqGyeUN51q1veieQA6TqJIc/2b3Z6fJfUEkc +7uzXLg== +-----END CERTIFICATE----- + +# Issuer: CN=IdenTrust Commercial Root CA 1 O=IdenTrust +# Subject: CN=IdenTrust Commercial Root CA 1 O=IdenTrust +# Label: "IdenTrust Commercial Root CA 1" +# Serial: 13298821034946342390520003877796839426 +# MD5 Fingerprint: b3:3e:77:73:75:ee:a0:d3:e3:7e:49:63:49:59:bb:c7 +# SHA1 Fingerprint: df:71:7e:aa:4a:d9:4e:c9:55:84:99:60:2d:48:de:5f:bc:f0:3a:25 +# SHA256 Fingerprint: 5d:56:49:9b:e4:d2:e0:8b:cf:ca:d0:8a:3e:38:72:3d:50:50:3b:de:70:69:48:e4:2f:55:60:30:19:e5:28:ae +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIQCgFCgAAAAUUjyES1AAAAAjANBgkqhkiG9w0BAQsFADBK +MQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVu +VHJ1c3QgQ29tbWVyY2lhbCBSb290IENBIDEwHhcNMTQwMTE2MTgxMjIzWhcNMzQw +MTE2MTgxMjIzWjBKMQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MScw +JQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBSb290IENBIDEwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQCnUBneP5k91DNG8W9RYYKyqU+PZ4ldhNlT +3Qwo2dfw/66VQ3KZ+bVdfIrBQuExUHTRgQ18zZshq0PirK1ehm7zCYofWjK9ouuU ++ehcCuz/mNKvcbO0U59Oh++SvL3sTzIwiEsXXlfEU8L2ApeN2WIrvyQfYo3fw7gp +S0l4PJNgiCL8mdo2yMKi1CxUAGc1bnO/AljwpN3lsKImesrgNqUZFvX9t++uP0D1 +bVoE/c40yiTcdCMbXTMTEl3EASX2MN0CXZ/g1Ue9tOsbobtJSdifWwLziuQkkORi +T0/Br4sOdBeo0XKIanoBScy0RnnGF7HamB4HWfp1IYVl3ZBWzvurpWCdxJ35UrCL +vYf5jysjCiN2O/cz4ckA82n5S6LgTrx+kzmEB/dEcH7+B1rlsazRGMzyNeVJSQjK +Vsk9+w8YfYs7wRPCTY/JTw436R+hDmrfYi7LNQZReSzIJTj0+kuniVyc0uMNOYZK +dHzVWYfCP04MXFL0PfdSgvHqo6z9STQaKPNBiDoT7uje/5kdX7rL6B7yuVBgwDHT +c+XvvqDtMwt0viAgxGds8AgDelWAf0ZOlqf0Hj7h9tgJ4TNkK2PXMl6f+cB7D3hv +l7yTmvmcEpB4eoCHFddydJxVdHixuuFucAS6T6C6aMN7/zHwcz09lCqxC0EOoP5N +iGVreTO01wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB +/zAdBgNVHQ4EFgQU7UQZwNPwBovupHu+QucmVMiONnYwDQYJKoZIhvcNAQELBQAD +ggIBAA2ukDL2pkt8RHYZYR4nKM1eVO8lvOMIkPkp165oCOGUAFjvLi5+U1KMtlwH +6oi6mYtQlNeCgN9hCQCTrQ0U5s7B8jeUeLBfnLOic7iPBZM4zY0+sLj7wM+x8uwt +LRvM7Kqas6pgghstO8OEPVeKlh6cdbjTMM1gCIOQ045U8U1mwF10A0Cj7oV+wh93 +nAbowacYXVKV7cndJZ5t+qntozo00Fl72u1Q8zW/7esUTTHHYPTa8Yec4kjixsU3 ++wYQ+nVZZjFHKdp2mhzpgq7vmrlR94gjmmmVYjzlVYA211QC//G5Xc7UI2/YRYRK +W2XviQzdFKcgyxilJbQN+QHwotL0AMh0jqEqSI5l2xPE4iUXfeu+h1sXIFRRk0pT +AwvsXcoz7WL9RccvW9xYoIA55vrX/hMUpu09lEpCdNTDd1lzzY9GvlU47/rokTLq +l1gEIt44w8y8bckzOmoKaT+gyOpyj4xjhiO9bTyWnpXgSUyqorkqG5w2gXjtw+hG +4iZZRHUe2XWJUc0QhJ1hYMtd+ZciTY6Y5uN/9lu7rs3KSoFrXgvzUeF0K+l+J6fZ +mUlO+KWA2yUPHGNiiskzZ2s8EIPGrd6ozRaOjfAHN3Gf8qv8QfXBi+wAN10J5U6A +7/qxXDgGpRtK4dw4LTzcqx+QGtVKnO7RcGzM7vRX+Bi6hG6H +-----END CERTIFICATE----- + +# Issuer: CN=IdenTrust Public Sector Root CA 1 O=IdenTrust +# Subject: CN=IdenTrust Public Sector Root CA 1 O=IdenTrust +# Label: "IdenTrust Public Sector Root CA 1" +# Serial: 13298821034946342390521976156843933698 +# MD5 Fingerprint: 37:06:a5:b0:fc:89:9d:ba:f4:6b:8c:1a:64:cd:d5:ba +# SHA1 Fingerprint: ba:29:41:60:77:98:3f:f4:f3:ef:f2:31:05:3b:2e:ea:6d:4d:45:fd +# SHA256 Fingerprint: 30:d0:89:5a:9a:44:8a:26:20:91:63:55:22:d1:f5:20:10:b5:86:7a:ca:e1:2c:78:ef:95:8f:d4:f4:38:9f:2f +-----BEGIN CERTIFICATE----- +MIIFZjCCA06gAwIBAgIQCgFCgAAAAUUjz0Z8AAAAAjANBgkqhkiG9w0BAQsFADBN +MQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVu +VHJ1c3QgUHVibGljIFNlY3RvciBSb290IENBIDEwHhcNMTQwMTE2MTc1MzMyWhcN +MzQwMTE2MTc1MzMyWjBNMQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0 +MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3RvciBSb290IENBIDEwggIi +MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2IpT8pEiv6EdrCvsnduTyP4o7 +ekosMSqMjbCpwzFrqHd2hCa2rIFCDQjrVVi7evi8ZX3yoG2LqEfpYnYeEe4IFNGy +RBb06tD6Hi9e28tzQa68ALBKK0CyrOE7S8ItneShm+waOh7wCLPQ5CQ1B5+ctMlS +bdsHyo+1W/CD80/HLaXIrcuVIKQxKFdYWuSNG5qrng0M8gozOSI5Cpcu81N3uURF +/YTLNiCBWS2ab21ISGHKTN9T0a9SvESfqy9rg3LvdYDaBjMbXcjaY8ZNzaxmMc3R +3j6HEDbhuaR672BQssvKplbgN6+rNBM5Jeg5ZuSYeqoSmJxZZoY+rfGwyj4GD3vw +EUs3oERte8uojHH01bWRNszwFcYr3lEXsZdMUD2xlVl8BX0tIdUAvwFnol57plzy +9yLxkA2T26pEUWbMfXYD62qoKjgZl3YNa4ph+bz27nb9cCvdKTz4Ch5bQhyLVi9V +GxyhLrXHFub4qjySjmm2AcG1hp2JDws4lFTo6tyePSW8Uybt1as5qsVATFSrsrTZ +2fjXctscvG29ZV/viDUqZi/u9rNl8DONfJhBaUYPQxxp+pu10GFqzcpL2UyQRqsV +WaFHVCkugyhfHMKiq3IXAAaOReyL4jM9f9oZRORicsPfIsbyVtTdX5Vy7W1f90gD +W/3FKqD2cyOEEBsB5wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ +BAUwAwEB/zAdBgNVHQ4EFgQU43HgntinQtnbcZFrlJPrw6PRFKMwDQYJKoZIhvcN +AQELBQADggIBAEf63QqwEZE4rU1d9+UOl1QZgkiHVIyqZJnYWv6IAcVYpZmxI1Qj +t2odIFflAWJBF9MJ23XLblSQdf4an4EKwt3X9wnQW3IV5B4Jaj0z8yGa5hV+rVHV +DRDtfULAj+7AmgjVQdZcDiFpboBhDhXAuM/FSRJSzL46zNQuOAXeNf0fb7iAaJg9 +TaDKQGXSc3z1i9kKlT/YPyNtGtEqJBnZhbMX73huqVjRI9PHE+1yJX9dsXNw0H8G +lwmEKYBhHfpe/3OsoOOJuBxxFcbeMX8S3OFtm6/n6J91eEyrRjuazr8FGF1NFTwW +mhlQBJqymm9li1JfPFgEKCXAZmExfrngdbkaqIHWchezxQMxNRF4eKLg6TCMf4Df +WN88uieW4oA0beOY02QnrEh+KHdcxiVhJfiFDGX6xDIvpZgF5PgLZxYWxoK4Mhn5 ++bl53B/N66+rDt0b20XkeucC4pVd/GnwU2lhlXV5C15V5jgclKlZM57IcXR5f1GJ +tshquDDIajjDbp7hNxbqBWJMWxJH7ae0s1hWx0nzfxJoCTFx8G34Tkf71oXuxVhA +GaQdp/lLQzfcaFpPz+vCZHTetBXZ9FRUGi8c15dxVJCO2SCdUyt/q4/i6jC8UDfv +8Ue1fXwsBOxonbRJRBD0ckscZOf85muQ3Wl9af0AVqW3rLatt8o+Ae+c +-----END CERTIFICATE----- + +# Issuer: CN=Entrust Root Certification Authority - G2 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2009 Entrust, Inc. - for authorized use only +# Subject: CN=Entrust Root Certification Authority - G2 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2009 Entrust, Inc. - for authorized use only +# Label: "Entrust Root Certification Authority - G2" +# Serial: 1246989352 +# MD5 Fingerprint: 4b:e2:c9:91:96:65:0c:f4:0e:5a:93:92:a0:0a:fe:b2 +# SHA1 Fingerprint: 8c:f4:27:fd:79:0c:3a:d1:66:06:8d:e8:1e:57:ef:bb:93:22:72:d4 +# SHA256 Fingerprint: 43:df:57:74:b0:3e:7f:ef:5f:e4:0d:93:1a:7b:ed:f1:bb:2e:6b:42:73:8c:4e:6d:38:41:10:3d:3a:a7:f3:39 +-----BEGIN CERTIFICATE----- +MIIEPjCCAyagAwIBAgIESlOMKDANBgkqhkiG9w0BAQsFADCBvjELMAkGA1UEBhMC +VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50 +cnVzdC5uZXQvbGVnYWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3Qs +IEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25seTEyMDAGA1UEAxMpRW50cnVz +dCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIwHhcNMDkwNzA3MTcy +NTU0WhcNMzAxMjA3MTc1NTU0WjCBvjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUVu +dHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwt +dGVybXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0 +aG9yaXplZCB1c2Ugb25seTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmlj +YXRpb24gQXV0aG9yaXR5IC0gRzIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK +AoIBAQC6hLZy254Ma+KZ6TABp3bqMriVQRrJ2mFOWHLP/vaCeb9zYQYKpSfYs1/T +RU4cctZOMvJyig/3gxnQaoCAAEUesMfnmr8SVycco2gvCoe9amsOXmXzHHfV1IWN +cCG0szLni6LVhjkCsbjSR87kyUnEO6fe+1R9V77w6G7CebI6C1XiUJgWMhNcL3hW +wcKUs/Ja5CeanyTXxuzQmyWC48zCxEXFjJd6BmsqEZ+pCm5IO2/b1BEZQvePB7/1 +U1+cPvQXLOZprE4yTGJ36rfo5bs0vBmLrpxR57d+tVOxMyLlbc9wPBr64ptntoP0 +jaWvYkxN4FisZDQSA/i2jZRjJKRxAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAP +BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqciZ60B7vfec7aVHUbI2fkBJmqzAN +BgkqhkiG9w0BAQsFAAOCAQEAeZ8dlsa2eT8ijYfThwMEYGprmi5ZiXMRrEPR9RP/ +jTkrwPK9T3CMqS/qF8QLVJ7UG5aYMzyorWKiAHarWWluBh1+xLlEjZivEtRh2woZ +Rkfz6/djwUAFQKXSt/S1mja/qYh2iARVBCuch38aNzx+LaUa2NSJXsq9rD1s2G2v +1fN2D807iDginWyTmsQ9v4IbZT+mD12q/OWyFcq1rca8PdCE6OoGcrBNOTJ4vz4R +nAuknZoh8/CbCzB428Hch0P+vGOaysXCHMnHjf87ElgI5rY97HosTvuDls4MPGmH +VHOkc8KT/1EQrBVUAdj8BbGJoX90g5pJ19xOe4pIb4tF9g== +-----END CERTIFICATE----- + +# Issuer: CN=Entrust Root Certification Authority - EC1 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2012 Entrust, Inc. - for authorized use only +# Subject: CN=Entrust Root Certification Authority - EC1 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2012 Entrust, Inc. - for authorized use only +# Label: "Entrust Root Certification Authority - EC1" +# Serial: 51543124481930649114116133369 +# MD5 Fingerprint: b6:7e:1d:f0:58:c5:49:6c:24:3b:3d:ed:98:18:ed:bc +# SHA1 Fingerprint: 20:d8:06:40:df:9b:25:f5:12:25:3a:11:ea:f7:59:8a:eb:14:b5:47 +# SHA256 Fingerprint: 02:ed:0e:b2:8c:14:da:45:16:5c:56:67:91:70:0d:64:51:d7:fb:56:f0:b2:ab:1d:3b:8e:b0:70:e5:6e:df:f5 +-----BEGIN CERTIFICATE----- +MIIC+TCCAoCgAwIBAgINAKaLeSkAAAAAUNCR+TAKBggqhkjOPQQDAzCBvzELMAkG +A1UEBhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3 +d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDEyIEVu +dHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25seTEzMDEGA1UEAxMq +RW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRUMxMB4XDTEy +MTIxODE1MjUzNloXDTM3MTIxODE1NTUzNlowgb8xCzAJBgNVBAYTAlVTMRYwFAYD +VQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0 +L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxMiBFbnRydXN0LCBJbmMuIC0g +Zm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxMzAxBgNVBAMTKkVudHJ1c3QgUm9vdCBD +ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEVDMTB2MBAGByqGSM49AgEGBSuBBAAi +A2IABIQTydC6bUF74mzQ61VfZgIaJPRbiWlH47jCffHyAsWfoPZb1YsGGYZPUxBt +ByQnoaD41UcZYUx9ypMn6nQM72+WCf5j7HBdNq1nd67JnXxVRDqiY1Ef9eNi1KlH +Bz7MIKNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O +BBYEFLdj5xrdjekIplWDpOBqUEFlEUJJMAoGCCqGSM49BAMDA2cAMGQCMGF52OVC +R98crlOZF7ZvHH3hvxGU0QOIdeSNiaSKd0bebWHvAvX7td/M/k7//qnmpwIwW5nX +hTcGtXsI/esni0qU+eH6p44mCOh8kmhtc9hvJqwhAriZtyZBWyVgrtBIGu4G +-----END CERTIFICATE----- + +# Issuer: CN=CFCA EV ROOT O=China Financial Certification Authority +# Subject: CN=CFCA EV ROOT O=China Financial Certification Authority +# Label: "CFCA EV ROOT" +# Serial: 407555286 +# MD5 Fingerprint: 74:e1:b6:ed:26:7a:7a:44:30:33:94:ab:7b:27:81:30 +# SHA1 Fingerprint: e2:b8:29:4b:55:84:ab:6b:58:c2:90:46:6c:ac:3f:b8:39:8f:84:83 +# SHA256 Fingerprint: 5c:c3:d7:8e:4e:1d:5e:45:54:7a:04:e6:87:3e:64:f9:0c:f9:53:6d:1c:cc:2e:f8:00:f3:55:c4:c5:fd:70:fd +-----BEGIN CERTIFICATE----- +MIIFjTCCA3WgAwIBAgIEGErM1jANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJD +TjEwMC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9y +aXR5MRUwEwYDVQQDDAxDRkNBIEVWIFJPT1QwHhcNMTIwODA4MDMwNzAxWhcNMjkx +MjMxMDMwNzAxWjBWMQswCQYDVQQGEwJDTjEwMC4GA1UECgwnQ2hpbmEgRmluYW5j +aWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQDDAxDRkNBIEVWIFJP +T1QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDXXWvNED8fBVnVBU03 +sQ7smCuOFR36k0sXgiFxEFLXUWRwFsJVaU2OFW2fvwwbwuCjZ9YMrM8irq93VCpL +TIpTUnrD7i7es3ElweldPe6hL6P3KjzJIx1qqx2hp/Hz7KDVRM8Vz3IvHWOX6Jn5 +/ZOkVIBMUtRSqy5J35DNuF++P96hyk0g1CXohClTt7GIH//62pCfCqktQT+x8Rgp +7hZZLDRJGqgG16iI0gNyejLi6mhNbiyWZXvKWfry4t3uMCz7zEasxGPrb382KzRz +EpR/38wmnvFyXVBlWY9ps4deMm/DGIq1lY+wejfeWkU7xzbh72fROdOXW3NiGUgt +hxwG+3SYIElz8AXSG7Ggo7cbcNOIabla1jj0Ytwli3i/+Oh+uFzJlU9fpy25IGvP +a931DfSCt/SyZi4QKPaXWnuWFo8BGS1sbn85WAZkgwGDg8NNkt0yxoekN+kWzqot +aK8KgWU6cMGbrU1tVMoqLUuFG7OA5nBFDWteNfB/O7ic5ARwiRIlk9oKmSJgamNg +TnYGmE69g60dWIolhdLHZR4tjsbftsbhf4oEIRUpdPA+nJCdDC7xij5aqgwJHsfV +PKPtl8MeNPo4+QgO48BdK4PRVmrJtqhUUy54Mmc9gn900PvhtgVguXDbjgv5E1hv +cWAQUhC5wUEJ73IfZzF4/5YFjQIDAQABo2MwYTAfBgNVHSMEGDAWgBTj/i39KNAL +tbq2osS/BqoFjJP7LzAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAd +BgNVHQ4EFgQU4/4t/SjQC7W6tqLEvwaqBYyT+y8wDQYJKoZIhvcNAQELBQADggIB +ACXGumvrh8vegjmWPfBEp2uEcwPenStPuiB/vHiyz5ewG5zz13ku9Ui20vsXiObT +ej/tUxPQ4i9qecsAIyjmHjdXNYmEwnZPNDatZ8POQQaIxffu2Bq41gt/UP+TqhdL +jOztUmCypAbqTuv0axn96/Ua4CUqmtzHQTb3yHQFhDmVOdYLO6Qn+gjYXB74BGBS +ESgoA//vU2YApUo0FmZ8/Qmkrp5nGm9BC2sGE5uPhnEFtC+NiWYzKXZUmhH4J/qy +P5Hgzg0b8zAarb8iXRvTvyUFTeGSGn+ZnzxEk8rUQElsgIfXBDrDMlI1Dlb4pd19 +xIsNER9Tyx6yF7Zod1rg1MvIB671Oi6ON7fQAUtDKXeMOZePglr4UeWJoBjnaH9d +Ci77o0cOPaYjesYBx4/IXr9tgFa+iiS6M+qf4TIRnvHST4D2G0CvOJ4RUHlzEhLN +5mydLIhyPDCBBpEi6lmt2hkuIsKNuYyH4Ga8cyNfIWRjgEj1oDwYPZTISEEdQLpe +/v5WOaHIz16eGWRGENoXkbcFgKyLmZJ956LYBws2J+dIeWCKw9cTXPhyQN9Ky8+Z +AAoACxGV2lZFA4gKn2fQ1XmxqI1AbQ3CekD6819kR5LLU7m7Wc5P/dAVUwHY3+vZ +5nbv0CO7O6l5s9UCKc2Jo5YPSjXnTkLAdc0Hz+Ys63su +-----END CERTIFICATE----- + +# Issuer: CN=OISTE WISeKey Global Root GB CA O=WISeKey OU=OISTE Foundation Endorsed +# Subject: CN=OISTE WISeKey Global Root GB CA O=WISeKey OU=OISTE Foundation Endorsed +# Label: "OISTE WISeKey Global Root GB CA" +# Serial: 157768595616588414422159278966750757568 +# MD5 Fingerprint: a4:eb:b9:61:28:2e:b7:2f:98:b0:35:26:90:99:51:1d +# SHA1 Fingerprint: 0f:f9:40:76:18:d3:d7:6a:4b:98:f0:a8:35:9e:0c:fd:27:ac:cc:ed +# SHA256 Fingerprint: 6b:9c:08:e8:6e:b0:f7:67:cf:ad:65:cd:98:b6:21:49:e5:49:4a:67:f5:84:5e:7b:d1:ed:01:9f:27:b8:6b:d6 +-----BEGIN CERTIFICATE----- +MIIDtTCCAp2gAwIBAgIQdrEgUnTwhYdGs/gjGvbCwDANBgkqhkiG9w0BAQsFADBt +MQswCQYDVQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUg +Rm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9i +YWwgUm9vdCBHQiBDQTAeFw0xNDEyMDExNTAwMzJaFw0zOTEyMDExNTEwMzFaMG0x +CzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYDVQQLExlPSVNURSBG +b3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEdsb2Jh +bCBSb290IEdCIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2Be3 +HEokKtaXscriHvt9OO+Y9bI5mE4nuBFde9IllIiCFSZqGzG7qFshISvYD06fWvGx +WuR51jIjK+FTzJlFXHtPrby/h0oLS5daqPZI7H17Dc0hBt+eFf1Biki3IPShehtX +1F1Q/7pn2COZH8g/497/b1t3sWtuuMlk9+HKQUYOKXHQuSP8yYFfTvdv37+ErXNk +u7dCjmn21HYdfp2nuFeKUWdy19SouJVUQHMD9ur06/4oQnc/nSMbsrY9gBQHTC5P +99UKFg29ZkM3fiNDecNAhvVMKdqOmq0NpQSHiB6F4+lT1ZvIiwNjeOvgGUpuuy9r +M2RYk61pv48b74JIxwIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw +AwEB/zAdBgNVHQ4EFgQUNQ/INmNe4qPs+TtmFc5RUuORmj0wEAYJKwYBBAGCNxUB +BAMCAQAwDQYJKoZIhvcNAQELBQADggEBAEBM+4eymYGQfp3FsLAmzYh7KzKNbrgh +cViXfa43FK8+5/ea4n32cZiZBKpDdHij40lhPnOMTZTg+XHEthYOU3gf1qKHLwI5 +gSk8rxWYITD+KJAAjNHhy/peyP34EEY7onhCkRd0VQreUGdNZtGn//3ZwLWoo4rO +ZvUPQ82nK1d7Y0Zqqi5S2PTt4W2tKZB4SLrhI6qjiey1q5bAtEuiHZeeevJuQHHf +aPFlTc58Bd9TZaml8LGXBHAVRgOY1NK/VLSgWH1Sb9pWJmLU2NuJMW8c8CLC02Ic +Nc1MaRVUGpCY3useX8p3x8uOPUNpnJpY0CQ73xtAln41rYHHTnG6iBM= +-----END CERTIFICATE----- + +# Issuer: CN=SZAFIR ROOT CA2 O=Krajowa Izba Rozliczeniowa S.A. +# Subject: CN=SZAFIR ROOT CA2 O=Krajowa Izba Rozliczeniowa S.A. +# Label: "SZAFIR ROOT CA2" +# Serial: 357043034767186914217277344587386743377558296292 +# MD5 Fingerprint: 11:64:c1:89:b0:24:b1:8c:b1:07:7e:89:9e:51:9e:99 +# SHA1 Fingerprint: e2:52:fa:95:3f:ed:db:24:60:bd:6e:28:f3:9c:cc:cf:5e:b3:3f:de +# SHA256 Fingerprint: a1:33:9d:33:28:1a:0b:56:e5:57:d3:d3:2b:1c:e7:f9:36:7e:b0:94:bd:5f:a7:2a:7e:50:04:c8:de:d7:ca:fe +-----BEGIN CERTIFICATE----- +MIIDcjCCAlqgAwIBAgIUPopdB+xV0jLVt+O2XwHrLdzk1uQwDQYJKoZIhvcNAQEL +BQAwUTELMAkGA1UEBhMCUEwxKDAmBgNVBAoMH0tyYWpvd2EgSXpiYSBSb3psaWN6 +ZW5pb3dhIFMuQS4xGDAWBgNVBAMMD1NaQUZJUiBST09UIENBMjAeFw0xNTEwMTkw +NzQzMzBaFw0zNTEwMTkwNzQzMzBaMFExCzAJBgNVBAYTAlBMMSgwJgYDVQQKDB9L +cmFqb3dhIEl6YmEgUm96bGljemVuaW93YSBTLkEuMRgwFgYDVQQDDA9TWkFGSVIg +Uk9PVCBDQTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC3vD5QqEvN +QLXOYeeWyrSh2gwisPq1e3YAd4wLz32ohswmUeQgPYUM1ljj5/QqGJ3a0a4m7utT +3PSQ1hNKDJA8w/Ta0o4NkjrcsbH/ON7Dui1fgLkCvUqdGw+0w8LBZwPd3BucPbOw +3gAeqDRHu5rr/gsUvTaE2g0gv/pby6kWIK05YO4vdbbnl5z5Pv1+TW9NL++IDWr6 +3fE9biCloBK0TXC5ztdyO4mTp4CEHCdJckm1/zuVnsHMyAHs6A6KCpbns6aH5db5 +BSsNl0BwPLqsdVqc1U2dAgrSS5tmS0YHF2Wtn2yIANwiieDhZNRnvDF5YTy7ykHN +XGoAyDw4jlivAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD +AgEGMB0GA1UdDgQWBBQuFqlKGLXLzPVvUPMjX/hd56zwyDANBgkqhkiG9w0BAQsF +AAOCAQEAtXP4A9xZWx126aMqe5Aosk3AM0+qmrHUuOQn/6mWmc5G4G18TKI4pAZw +8PRBEew/R40/cof5O/2kbytTAOD/OblqBw7rHRz2onKQy4I9EYKL0rufKq8h5mOG +nXkZ7/e7DDWQw4rtTw/1zBLZpD67oPwglV9PJi8RI4NOdQcPv5vRtB3pEAT+ymCP +oky4rc/hkA/NrgrHXXu3UNLUYfrVFdvXn4dRVOul4+vJhaAlIDf7js4MNIThPIGy +d05DpYhfhmehPea0XGG2Ptv+tyjFogeutcrKjSoS75ftwjCkySp6+/NNIxuZMzSg +LvWpCz/UXeHPhJ/iGcJfitYgHuNztw== +-----END CERTIFICATE----- + +# Issuer: CN=Certum Trusted Network CA 2 O=Unizeto Technologies S.A. OU=Certum Certification Authority +# Subject: CN=Certum Trusted Network CA 2 O=Unizeto Technologies S.A. OU=Certum Certification Authority +# Label: "Certum Trusted Network CA 2" +# Serial: 44979900017204383099463764357512596969 +# MD5 Fingerprint: 6d:46:9e:d9:25:6d:08:23:5b:5e:74:7d:1e:27:db:f2 +# SHA1 Fingerprint: d3:dd:48:3e:2b:bf:4c:05:e8:af:10:f5:fa:76:26:cf:d3:dc:30:92 +# SHA256 Fingerprint: b6:76:f2:ed:da:e8:77:5c:d3:6c:b0:f6:3c:d1:d4:60:39:61:f4:9e:62:65:ba:01:3a:2f:03:07:b6:d0:b8:04 +-----BEGIN CERTIFICATE----- +MIIF0jCCA7qgAwIBAgIQIdbQSk8lD8kyN/yqXhKN6TANBgkqhkiG9w0BAQ0FADCB +gDELMAkGA1UEBhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMu +QS4xJzAlBgNVBAsTHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIG +A1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29yayBDQSAyMCIYDzIwMTExMDA2MDgz +OTU2WhgPMjA0NjEwMDYwODM5NTZaMIGAMQswCQYDVQQGEwJQTDEiMCAGA1UEChMZ +VW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRp +ZmljYXRpb24gQXV0aG9yaXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3 +b3JrIENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC9+Xj45tWA +DGSdhhuWZGc/IjoedQF97/tcZ4zJzFxrqZHmuULlIEub2pt7uZld2ZuAS9eEQCsn +0+i6MLs+CRqnSZXvK0AkwpfHp+6bJe+oCgCXhVqqndwpyeI1B+twTUrWwbNWuKFB +OJvR+zF/j+Bf4bE/D44WSWDXBo0Y+aomEKsq09DRZ40bRr5HMNUuctHFY9rnY3lE +fktjJImGLjQ/KUxSiyqnwOKRKIm5wFv5HdnnJ63/mgKXwcZQkpsCLL2puTRZCr+E +Sv/f/rOf69me4Jgj7KZrdxYq28ytOxykh9xGc14ZYmhFV+SQgkK7QtbwYeDBoz1m +o130GO6IyY0XRSmZMnUCMe4pJshrAua1YkV/NxVaI2iJ1D7eTiew8EAMvE0Xy02i +sx7QBlrd9pPPV3WZ9fqGGmd4s7+W/jTcvedSVuWz5XV710GRBdxdaeOVDUO5/IOW +OZV7bIBaTxNyxtd9KXpEulKkKtVBRgkg/iKgtlswjbyJDNXXcPiHUv3a76xRLgez +Tv7QCdpw75j6VuZt27VXS9zlLCUVyJ4ueE742pyehizKV/Ma5ciSixqClnrDvFAS +adgOWkaLOusm+iPJtrCBvkIApPjW/jAux9JG9uWOdf3yzLnQh1vMBhBgu4M1t15n +3kfsmUjxpKEV/q2MYo45VU85FrmxY53/twIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAOBgNVHQ8BAf8EBAMC +AQYwDQYJKoZIhvcNAQENBQADggIBAHGlDs7k6b8/ONWJWsQCYftMxRQXLYtPU2sQ +F/xlhMcQSZDe28cmk4gmb3DWAl45oPePq5a1pRNcgRRtDoGCERuKTsZPpd1iHkTf +CVn0W3cLN+mLIMb4Ck4uWBzrM9DPhmDJ2vuAL55MYIR4PSFk1vtBHxgP58l1cb29 +XN40hz5BsA72udY/CROWFC/emh1auVbONTqwX3BNXuMp8SMoclm2q8KMZiYcdywm +djWLKKdpoPk79SPdhRB0yZADVpHnr7pH1BKXESLjokmUbOe3lEu6LaTaM4tMpkT/ +WjzGHWTYtTHkpjx6qFcL2+1hGsvxznN3Y6SHb0xRONbkX8eftoEq5IVIeVheO/jb +AoJnwTnbw3RLPTYe+SmTiGhbqEQZIfCn6IENLOiTNrQ3ssqwGyZ6miUfmpqAnksq +P/ujmv5zMnHCnsZy4YpoJ/HkD7TETKVhk/iXEAcqMCWpuchxuO9ozC1+9eB+D4Ko +b7a6bINDd82Kkhehnlt4Fj1F4jNy3eFmypnTycUm/Q1oBEauttmbjL4ZvrHG8hnj +XALKLNhvSgfZyTXaQHXyxKcZb55CEJh15pWLYLztxRLXis7VmFxWlgPF7ncGNf/P +5O4/E2Hu29othfDNrp2yGAlFw5Khchf8R7agCyzxxN5DaAhqXzvwdmP7zAYspsbi +DrW5viSP +-----END CERTIFICATE----- + +# Issuer: CN=Hellenic Academic and Research Institutions RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority +# Subject: CN=Hellenic Academic and Research Institutions RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority +# Label: "Hellenic Academic and Research Institutions RootCA 2015" +# Serial: 0 +# MD5 Fingerprint: ca:ff:e2:db:03:d9:cb:4b:e9:0f:ad:84:fd:7b:18:ce +# SHA1 Fingerprint: 01:0c:06:95:a6:98:19:14:ff:bf:5f:c6:b0:b6:95:ea:29:e9:12:a6 +# SHA256 Fingerprint: a0:40:92:9a:02:ce:53:b4:ac:f4:f2:ff:c6:98:1c:e4:49:6f:75:5e:6d:45:fe:0b:2a:69:2b:cd:52:52:3f:36 +-----BEGIN CERTIFICATE----- +MIIGCzCCA/OgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBpjELMAkGA1UEBhMCR1Ix +DzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5k +IFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMT +N0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9v +dENBIDIwMTUwHhcNMTUwNzA3MTAxMTIxWhcNNDAwNjMwMTAxMTIxWjCBpjELMAkG +A1UEBhMCR1IxDzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNh +ZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkx +QDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1 +dGlvbnMgUm9vdENBIDIwMTUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC +AQDC+Kk/G4n8PDwEXT2QNrCROnk8ZlrvbTkBSRq0t89/TSNTt5AA4xMqKKYx8ZEA +4yjsriFBzh/a/X0SWwGDD7mwX5nh8hKDgE0GPt+sr+ehiGsxr/CL0BgzuNtFajT0 +AoAkKAoCFZVedioNmToUW/bLy1O8E00BiDeUJRtCvCLYjqOWXjrZMts+6PAQZe10 +4S+nfK8nNLspfZu2zwnI5dMK/IhlZXQK3HMcXM1AsRzUtoSMTFDPaI6oWa7CJ06C +ojXdFPQf/7J31Ycvqm59JCfnxssm5uX+Zwdj2EUN3TpZZTlYepKZcj2chF6IIbjV +9Cz82XBST3i4vTwri5WY9bPRaM8gFH5MXF/ni+X1NYEZN9cRCLdmvtNKzoNXADrD +gfgXy5I2XdGj2HUb4Ysn6npIQf1FGQatJ5lOwXBH3bWfgVMS5bGMSF0xQxfjjMZ6 +Y5ZLKTBOhE5iGV48zpeQpX8B653g+IuJ3SWYPZK2fu/Z8VFRfS0myGlZYeCsargq +NhEEelC9MoS+L9xy1dcdFkfkR2YgP/SWxa+OAXqlD3pk9Q0Yh9muiNX6hME6wGko +LfINaFGq46V3xqSQDqE3izEjR8EJCOtu93ib14L8hCCZSRm2Ekax+0VVFqmjZayc +Bw/qa9wfLgZy7IaIEuQt218FL+TwA9MmM+eAws1CoRc0CwIDAQABo0IwQDAPBgNV +HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUcRVnyMjJvXVd +ctA4GGqd83EkVAswDQYJKoZIhvcNAQELBQADggIBAHW7bVRLqhBYRjTyYtcWNl0I +XtVsyIe9tC5G8jH4fOpCtZMWVdyhDBKg2mF+D1hYc2Ryx+hFjtyp8iY/xnmMsVMI +M4GwVhO+5lFc2JsKT0ucVlMC6U/2DWDqTUJV6HwbISHTGzrMd/K4kPFox/la/vot +9L/J9UUbzjgQKjeKeaO04wlshYaT/4mWJ3iBj2fjRnRUjtkNaeJK9E10A/+yd+2V +Z5fkscWrv2oj6NSU4kQoYsRL4vDY4ilrGnB+JGGTe08DMiUNRSQrlrRGar9KC/ea +j8GsGsVn82800vpzY4zvFrCopEYq+OsS7HK07/grfoxSwIuEVPkvPuNVqNxmsdnh +X9izjFk0WaSrT2y7HxjbdavYy5LNlDhhDgcGH0tGEPEVvo2FXDtKK4F5D7Rpn0lQ +l033DlZdwJVqwjbDG2jJ9SrcR5q+ss7FJej6A7na+RZukYT1HCjI/CbM1xyQVqdf +bzoEvM14iQuODy+jqk+iGxI9FghAD/FGTNeqewjBCvVtJ94Cj8rDtSvK6evIIVM4 +pcw72Hc3MKJP2W/R8kCtQXoXxdZKNYm3QdV8hn9VTYNKpXMgwDqvkPGaJI7ZjnHK +e7iG2rKPmT4dEw0SEe7Uq/DpFXYC5ODfqiAeW2GFZECpkJcNrVPSWh2HagCXZWK0 +vm9qp/UsQu0yrbYhnr68 +-----END CERTIFICATE----- + +# Issuer: CN=Hellenic Academic and Research Institutions ECC RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority +# Subject: CN=Hellenic Academic and Research Institutions ECC RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority +# Label: "Hellenic Academic and Research Institutions ECC RootCA 2015" +# Serial: 0 +# MD5 Fingerprint: 81:e5:b4:17:eb:c2:f5:e1:4b:0d:41:7b:49:92:fe:ef +# SHA1 Fingerprint: 9f:f1:71:8d:92:d5:9a:f3:7d:74:97:b4:bc:6f:84:68:0b:ba:b6:66 +# SHA256 Fingerprint: 44:b5:45:aa:8a:25:e6:5a:73:ca:15:dc:27:fc:36:d2:4c:1c:b9:95:3a:06:65:39:b1:15:82:dc:48:7b:48:33 +-----BEGIN CERTIFICATE----- +MIICwzCCAkqgAwIBAgIBADAKBggqhkjOPQQDAjCBqjELMAkGA1UEBhMCR1IxDzAN +BgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl +c2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxRDBCBgNVBAMTO0hl +bGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgRUNDIFJv +b3RDQSAyMDE1MB4XDTE1MDcwNzEwMzcxMloXDTQwMDYzMDEwMzcxMlowgaoxCzAJ +BgNVBAYTAkdSMQ8wDQYDVQQHEwZBdGhlbnMxRDBCBgNVBAoTO0hlbGxlbmljIEFj +YWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9yaXR5 +MUQwQgYDVQQDEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0 +dXRpb25zIEVDQyBSb290Q0EgMjAxNTB2MBAGByqGSM49AgEGBSuBBAAiA2IABJKg +QehLgoRc4vgxEZmGZE4JJS+dQS8KrjVPdJWyUWRrjWvmP3CV8AVER6ZyOFB2lQJa +jq4onvktTpnvLEhvTCUp6NFxW98dwXU3tNf6e3pCnGoKVlp8aQuqgAkkbH7BRqNC +MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFLQi +C4KZJAEOnLvkDv2/+5cgk5kqMAoGCCqGSM49BAMCA2cAMGQCMGfOFmI4oqxiRaep +lSTAGiecMjvAwNW6qef4BENThe5SId6d9SWDPp5YSy/XZxMOIQIwBeF1Ad5o7Sof +TUwJCA3sS61kFyjndc5FZXIhF8siQQ6ME5g4mlRtm8rifOoCWCKR +-----END CERTIFICATE----- + +# Issuer: CN=ISRG Root X1 O=Internet Security Research Group +# Subject: CN=ISRG Root X1 O=Internet Security Research Group +# Label: "ISRG Root X1" +# Serial: 172886928669790476064670243504169061120 +# MD5 Fingerprint: 0c:d2:f9:e0:da:17:73:e9:ed:86:4d:a5:e3:70:e7:4e +# SHA1 Fingerprint: ca:bd:2a:79:a1:07:6a:31:f2:1d:25:36:35:cb:03:9d:43:29:a5:e8 +# SHA256 Fingerprint: 96:bc:ec:06:26:49:76:f3:74:60:77:9a:cf:28:c5:a7:cf:e8:a3:c0:aa:e1:1a:8f:fc:ee:05:c0:bd:df:08:c6 +-----BEGIN CERTIFICATE----- +MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw +TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh +cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4 +WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu +ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY +MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc +h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+ +0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U +A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW +T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH +B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC +B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv +KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn +OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn +jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw +qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI +rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq +hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL +ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ +3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK +NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5 +ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur +TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC +jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc +oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq +4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA +mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d +emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc= +-----END CERTIFICATE----- + +# Issuer: O=FNMT-RCM OU=AC RAIZ FNMT-RCM +# Subject: O=FNMT-RCM OU=AC RAIZ FNMT-RCM +# Label: "AC RAIZ FNMT-RCM" +# Serial: 485876308206448804701554682760554759 +# MD5 Fingerprint: e2:09:04:b4:d3:bd:d1:a0:14:fd:1a:d2:47:c4:57:1d +# SHA1 Fingerprint: ec:50:35:07:b2:15:c4:95:62:19:e2:a8:9a:5b:42:99:2c:4c:2c:20 +# SHA256 Fingerprint: eb:c5:57:0c:29:01:8c:4d:67:b1:aa:12:7b:af:12:f7:03:b4:61:1e:bc:17:b7:da:b5:57:38:94:17:9b:93:fa +-----BEGIN CERTIFICATE----- +MIIFgzCCA2ugAwIBAgIPXZONMGc2yAYdGsdUhGkHMA0GCSqGSIb3DQEBCwUAMDsx +CzAJBgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJ +WiBGTk1ULVJDTTAeFw0wODEwMjkxNTU5NTZaFw0zMDAxMDEwMDAwMDBaMDsxCzAJ +BgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJWiBG +Tk1ULVJDTTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALpxgHpMhm5/ +yBNtwMZ9HACXjywMI7sQmkCpGreHiPibVmr75nuOi5KOpyVdWRHbNi63URcfqQgf +BBckWKo3Shjf5TnUV/3XwSyRAZHiItQDwFj8d0fsjz50Q7qsNI1NOHZnjrDIbzAz +WHFctPVrbtQBULgTfmxKo0nRIBnuvMApGGWn3v7v3QqQIecaZ5JCEJhfTzC8PhxF +tBDXaEAUwED653cXeuYLj2VbPNmaUtu1vZ5Gzz3rkQUCwJaydkxNEJY7kvqcfw+Z +374jNUUeAlz+taibmSXaXvMiwzn15Cou08YfxGyqxRxqAQVKL9LFwag0Jl1mpdIC +IfkYtwb1TplvqKtMUejPUBjFd8g5CSxJkjKZqLsXF3mwWsXmo8RZZUc1g16p6DUL +mbvkzSDGm0oGObVo/CK67lWMK07q87Hj/LaZmtVC+nFNCM+HHmpxffnTtOmlcYF7 +wk5HlqX2doWjKI/pgG6BU6VtX7hI+cL5NqYuSf+4lsKMB7ObiFj86xsc3i1w4peS +MKGJ47xVqCfWS+2QrYv6YyVZLag13cqXM7zlzced0ezvXg5KkAYmY6252TUtB7p2 +ZSysV4999AeU14ECll2jB0nVetBX+RvnU0Z1qrB5QstocQjpYL05ac70r8NWQMet +UqIJ5G+GR4of6ygnXYMgrwTJbFaai0b1AgMBAAGjgYMwgYAwDwYDVR0TAQH/BAUw +AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFPd9xf3E6Jobd2Sn9R2gzL+H +YJptMD4GA1UdIAQ3MDUwMwYEVR0gADArMCkGCCsGAQUFBwIBFh1odHRwOi8vd3d3 +LmNlcnQuZm5tdC5lcy9kcGNzLzANBgkqhkiG9w0BAQsFAAOCAgEAB5BK3/MjTvDD +nFFlm5wioooMhfNzKWtN/gHiqQxjAb8EZ6WdmF/9ARP67Jpi6Yb+tmLSbkyU+8B1 +RXxlDPiyN8+sD8+Nb/kZ94/sHvJwnvDKuO+3/3Y3dlv2bojzr2IyIpMNOmqOFGYM +LVN0V2Ue1bLdI4E7pWYjJ2cJj+F3qkPNZVEI7VFY/uY5+ctHhKQV8Xa7pO6kO8Rf +77IzlhEYt8llvhjho6Tc+hj507wTmzl6NLrTQfv6MooqtyuGC2mDOL7Nii4LcK2N +JpLuHvUBKwrZ1pebbuCoGRw6IYsMHkCtA+fdZn71uSANA+iW+YJF1DngoABd15jm +fZ5nc8OaKveri6E6FO80vFIOiZiaBECEHX5FaZNXzuvO+FB8TxxuBEOb+dY7Ixjp +6o7RTUaN8Tvkasq6+yO3m/qZASlaWFot4/nUbQ4mrcFuNLwy+AwF+mWj2zs3gyLp +1txyM/1d8iC9djwj2ij3+RvrWWTV3F9yfiD8zYm1kGdNYno/Tq0dwzn+evQoFt9B +9kiABdcPUXmsEKvU7ANm5mqwujGSQkBqvjrTcuFqN1W8rB2Vt2lh8kORdOag0wok +RqEIr9baRRmW1FMdW4R58MD3R++Lj8UGrp1MYp3/RgT408m2ECVAdf4WqslKYIYv +uu8wd+RU4riEmViAqhOLUTpPSPaLtrM= +-----END CERTIFICATE----- + +# Issuer: CN=Amazon Root CA 1 O=Amazon +# Subject: CN=Amazon Root CA 1 O=Amazon +# Label: "Amazon Root CA 1" +# Serial: 143266978916655856878034712317230054538369994 +# MD5 Fingerprint: 43:c6:bf:ae:ec:fe:ad:2f:18:c6:88:68:30:fc:c8:e6 +# SHA1 Fingerprint: 8d:a7:f9:65:ec:5e:fc:37:91:0f:1c:6e:59:fd:c1:cc:6a:6e:de:16 +# SHA256 Fingerprint: 8e:cd:e6:88:4f:3d:87:b1:12:5b:a3:1a:c3:fc:b1:3d:70:16:de:7f:57:cc:90:4f:e1:cb:97:c6:ae:98:19:6e +-----BEGIN CERTIFICATE----- +MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsF +ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6 +b24gUm9vdCBDQSAxMB4XDTE1MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTEL +MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv +b3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJ4gHHKeNXj +ca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgHFzZM +9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qw +IFAGbHrQgLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6 +VOujw5H5SNz/0egwLX0tdHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L +93FcXmn/6pUCyziKrlA4b9v7LWIbxcceVOF34GfID5yHI9Y/QCB/IIDEgEw+OyQm +jgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3DQEBCwUA +A4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDI +U5PMCCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUs +N+gDS63pYaACbvXy8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vv +o/ufQJVtMVT8QtPHRh8jrdkPSHCa2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU +5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2xJNDd2ZhwLnoQdeXeGADbkpy +rqXRfboQnoZsG4q5WTP468SQvvG5 +-----END CERTIFICATE----- + +# Issuer: CN=Amazon Root CA 2 O=Amazon +# Subject: CN=Amazon Root CA 2 O=Amazon +# Label: "Amazon Root CA 2" +# Serial: 143266982885963551818349160658925006970653239 +# MD5 Fingerprint: c8:e5:8d:ce:a8:42:e2:7a:c0:2a:5c:7c:9e:26:bf:66 +# SHA1 Fingerprint: 5a:8c:ef:45:d7:a6:98:59:76:7a:8c:8b:44:96:b5:78:cf:47:4b:1a +# SHA256 Fingerprint: 1b:a5:b2:aa:8c:65:40:1a:82:96:01:18:f8:0b:ec:4f:62:30:4d:83:ce:c4:71:3a:19:c3:9c:01:1e:a4:6d:b4 +-----BEGIN CERTIFICATE----- +MIIFQTCCAymgAwIBAgITBmyf0pY1hp8KD+WGePhbJruKNzANBgkqhkiG9w0BAQwF +ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6 +b24gUm9vdCBDQSAyMB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTEL +MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv +b3QgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK2Wny2cSkxK +gXlRmeyKy2tgURO8TW0G/LAIjd0ZEGrHJgw12MBvIITplLGbhQPDW9tK6Mj4kHbZ +W0/jTOgGNk3Mmqw9DJArktQGGWCsN0R5hYGCrVo34A3MnaZMUnbqQ523BNFQ9lXg +1dKmSYXpN+nKfq5clU1Imj+uIFptiJXZNLhSGkOQsL9sBbm2eLfq0OQ6PBJTYv9K +8nu+NQWpEjTj82R0Yiw9AElaKP4yRLuH3WUnAnE72kr3H9rN9yFVkE8P7K6C4Z9r +2UXTu/Bfh+08LDmG2j/e7HJV63mjrdvdfLC6HM783k81ds8P+HgfajZRRidhW+me +z/CiVX18JYpvL7TFz4QuK/0NURBs+18bvBt+xa47mAExkv8LV/SasrlX6avvDXbR +8O70zoan4G7ptGmh32n2M8ZpLpcTnqWHsFcQgTfJU7O7f/aS0ZzQGPSSbtqDT6Zj +mUyl+17vIWR6IF9sZIUVyzfpYgwLKhbcAS4y2j5L9Z469hdAlO+ekQiG+r5jqFoz +7Mt0Q5X5bGlSNscpb/xVA1wf+5+9R+vnSUeVC06JIglJ4PVhHvG/LopyboBZ/1c6 ++XUyo05f7O0oYtlNc/LMgRdg7c3r3NunysV+Ar3yVAhU/bQtCSwXVEqY0VThUWcI +0u1ufm8/0i2BWSlmy5A5lREedCf+3euvAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMB +Af8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSwDPBMMPQFWAJI/TPlUq9LhONm +UjANBgkqhkiG9w0BAQwFAAOCAgEAqqiAjw54o+Ci1M3m9Zh6O+oAA7CXDpO8Wqj2 +LIxyh6mx/H9z/WNxeKWHWc8w4Q0QshNabYL1auaAn6AFC2jkR2vHat+2/XcycuUY ++gn0oJMsXdKMdYV2ZZAMA3m3MSNjrXiDCYZohMr/+c8mmpJ5581LxedhpxfL86kS +k5Nrp+gvU5LEYFiwzAJRGFuFjWJZY7attN6a+yb3ACfAXVU3dJnJUH/jWS5E4ywl +7uxMMne0nxrpS10gxdr9HIcWxkPo1LsmmkVwXqkLN1PiRnsn/eBG8om3zEK2yygm +btmlyTrIQRNg91CMFa6ybRoVGld45pIq2WWQgj9sAq+uEjonljYE1x2igGOpm/Hl +urR8FLBOybEfdF849lHqm/osohHUqS0nGkWxr7JOcQ3AWEbWaQbLU8uz/mtBzUF+ +fUwPfHJ5elnNXkoOrJupmHN5fLT0zLm4BwyydFy4x2+IoZCn9Kr5v2c69BoVYh63 +n749sSmvZ6ES8lgQGVMDMBu4Gon2nL2XA46jCfMdiyHxtN/kHNGfZQIG6lzWE7OE +76KlXIx3KadowGuuQNKotOrN8I1LOJwZmhsoVLiJkO/KdYE+HvJkJMcYr07/R54H +9jVlpNMKVv/1F2Rs76giJUmTtt8AF9pYfl3uxRuw0dFfIRDH+fO6AgonB8Xx1sfT +4PsJYGw= +-----END CERTIFICATE----- + +# Issuer: CN=Amazon Root CA 3 O=Amazon +# Subject: CN=Amazon Root CA 3 O=Amazon +# Label: "Amazon Root CA 3" +# Serial: 143266986699090766294700635381230934788665930 +# MD5 Fingerprint: a0:d4:ef:0b:f7:b5:d8:49:95:2a:ec:f5:c4:fc:81:87 +# SHA1 Fingerprint: 0d:44:dd:8c:3c:8c:1a:1a:58:75:64:81:e9:0f:2e:2a:ff:b3:d2:6e +# SHA256 Fingerprint: 18:ce:6c:fe:7b:f1:4e:60:b2:e3:47:b8:df:e8:68:cb:31:d0:2e:bb:3a:da:27:15:69:f5:03:43:b4:6d:b3:a4 +-----BEGIN CERTIFICATE----- +MIIBtjCCAVugAwIBAgITBmyf1XSXNmY/Owua2eiedgPySjAKBggqhkjOPQQDAjA5 +MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24g +Um9vdCBDQSAzMB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkG +A1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3Qg +Q0EgMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCmXp8ZBf8ANm+gBG1bG8lKl +ui2yEujSLtf6ycXYqm0fc4E7O5hrOXwzpcVOho6AF2hiRVd9RFgdszflZwjrZt6j +QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSr +ttvXBp43rDCGB5Fwx5zEGbF4wDAKBggqhkjOPQQDAgNJADBGAiEA4IWSoxe3jfkr +BqWTrBqYaGFy+uGh0PsceGCmQ5nFuMQCIQCcAu/xlJyzlvnrxir4tiz+OpAUFteM +YyRIHN8wfdVoOw== +-----END CERTIFICATE----- + +# Issuer: CN=Amazon Root CA 4 O=Amazon +# Subject: CN=Amazon Root CA 4 O=Amazon +# Label: "Amazon Root CA 4" +# Serial: 143266989758080763974105200630763877849284878 +# MD5 Fingerprint: 89:bc:27:d5:eb:17:8d:06:6a:69:d5:fd:89:47:b4:cd +# SHA1 Fingerprint: f6:10:84:07:d6:f8:bb:67:98:0c:c2:e2:44:c2:eb:ae:1c:ef:63:be +# SHA256 Fingerprint: e3:5d:28:41:9e:d0:20:25:cf:a6:90:38:cd:62:39:62:45:8d:a5:c6:95:fb:de:a3:c2:2b:0b:fb:25:89:70:92 +-----BEGIN CERTIFICATE----- +MIIB8jCCAXigAwIBAgITBmyf18G7EEwpQ+Vxe3ssyBrBDjAKBggqhkjOPQQDAzA5 +MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24g +Um9vdCBDQSA0MB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkG +A1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3Qg +Q0EgNDB2MBAGByqGSM49AgEGBSuBBAAiA2IABNKrijdPo1MN/sGKe0uoe0ZLY7Bi +9i0b2whxIdIA6GO9mif78DluXeo9pcmBqqNbIJhFXRbb/egQbeOc4OO9X4Ri83Bk +M6DLJC9wuoihKqB1+IGuYgbEgds5bimwHvouXKNCMEAwDwYDVR0TAQH/BAUwAwEB +/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFNPsxzplbszh2naaVvuc84ZtV+WB +MAoGCCqGSM49BAMDA2gAMGUCMDqLIfG9fhGt0O9Yli/W651+kI0rz2ZVwyzjKKlw +CkcO8DdZEv8tmZQoTipPNU0zWgIxAOp1AE47xDqUEpHJWEadIRNyp4iciuRMStuW +1KyLa2tJElMzrdfkviT8tQp21KW8EA== +-----END CERTIFICATE----- + +# Issuer: CN=LuxTrust Global Root 2 O=LuxTrust S.A. +# Subject: CN=LuxTrust Global Root 2 O=LuxTrust S.A. +# Label: "LuxTrust Global Root 2" +# Serial: 59914338225734147123941058376788110305822489521 +# MD5 Fingerprint: b2:e1:09:00:61:af:f7:f1:91:6f:c4:ad:8d:5e:3b:7c +# SHA1 Fingerprint: 1e:0e:56:19:0a:d1:8b:25:98:b2:04:44:ff:66:8a:04:17:99:5f:3f +# SHA256 Fingerprint: 54:45:5f:71:29:c2:0b:14:47:c4:18:f9:97:16:8f:24:c5:8f:c5:02:3b:f5:da:5b:e2:eb:6e:1d:d8:90:2e:d5 +-----BEGIN CERTIFICATE----- +MIIFwzCCA6ugAwIBAgIUCn6m30tEntpqJIWe5rgV0xZ/u7EwDQYJKoZIhvcNAQEL +BQAwRjELMAkGA1UEBhMCTFUxFjAUBgNVBAoMDUx1eFRydXN0IFMuQS4xHzAdBgNV +BAMMFkx1eFRydXN0IEdsb2JhbCBSb290IDIwHhcNMTUwMzA1MTMyMTU3WhcNMzUw +MzA1MTMyMTU3WjBGMQswCQYDVQQGEwJMVTEWMBQGA1UECgwNTHV4VHJ1c3QgUy5B +LjEfMB0GA1UEAwwWTHV4VHJ1c3QgR2xvYmFsIFJvb3QgMjCCAiIwDQYJKoZIhvcN +AQEBBQADggIPADCCAgoCggIBANeFl78RmOnwYoNMPIf5U2o3C/IPPIfOb9wmKb3F +ibrJgz337spbxm1Jc7TJRqMbNBM/wYlFV/TZsfs2ZUv7COJIcRHIbjuend+JZTem +hfY7RBi2xjcwYkSSl2l9QjAk5A0MiWtj3sXh306pFGxT4GHO9hcvHTy95iJMHZP1 +EMShduxq3sVs35a0VkBCwGKSMKEtFZSg0iAGCW5qbeXrt77U8PEVfIvmTroTzEsn +Xpk8F12PgX8zPU/TPxvsXD/wPEx1bvKm1Z3aLQdjAsZy6ZS8TEmVT4hSyNvoaYL4 +zDRbIvCGp4m9SAptZoFtyMhk+wHh9OHe2Z7d21vUKpkmFRseTJIpgp7VkoGSQXAZ +96Tlk0u8d2cx3Rz9MXANF5kM+Qw5GSoXtTBxVdUPrljhPS80m8+f9niFwpN6cj5m +j5wWEWCPnolvZ77gR1o7DJpni89Gxq44o/KnvObWhWszJHAiS8sIm7vI+AIpHb4g +DEa/a4ebsypmQjVGbKq6rfmYe+lQVRQxv7HaLe2ArWgk+2mr2HETMOZns4dA/Yl+ +8kPREd8vZS9kzl8UubG/Mb2HeFpZZYiq/FkySIbWTLkpS5XTdvN3JW1CHDiDTf2j +X5t/Lax5Gw5CMZdjpPuKadUiDTSQMC6otOBttpSsvItO13D8xTiOZCXhTTmQzsmH +hFhxAgMBAAGjgagwgaUwDwYDVR0TAQH/BAUwAwEB/zBCBgNVHSAEOzA5MDcGByuB +KwEBAQowLDAqBggrBgEFBQcCARYeaHR0cHM6Ly9yZXBvc2l0b3J5Lmx1eHRydXN0 +Lmx1MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBT/GCh2+UgFLKGu8SsbK7JT ++Et8szAdBgNVHQ4EFgQU/xgodvlIBSyhrvErGyuyU/hLfLMwDQYJKoZIhvcNAQEL +BQADggIBAGoZFO1uecEsh9QNcH7X9njJCwROxLHOk3D+sFTAMs2ZMGQXvw/l4jP9 +BzZAcg4atmpZ1gDlaCDdLnINH2pkMSCEfUmmWjfrRcmF9dTHF5kH5ptV5AzoqbTO +jFu1EVzPig4N1qx3gf4ynCSecs5U89BvolbW7MM3LGVYvlcAGvI1+ut7MV3CwRI9 +loGIlonBWVx65n9wNOeD4rHh4bhY79SV5GCc8JaXcozrhAIuZY+kt9J/Z93I055c +qqmkoCUUBpvsT34tC38ddfEz2O3OuHVtPlu5mB0xDVbYQw8wkbIEa91WvpWAVWe+ +2M2D2RjuLg+GLZKecBPs3lHJQ3gCpU3I+V/EkVhGFndadKpAvAefMLmx9xIX3eP/ +JEAdemrRTxgKqpAd60Ae36EeRJIQmvKN4dFLRp7oRUKX6kWZ8+xm1QL68qZKJKre +zrnK+T+Tb/mjuuqlPpmt/f97mfVl7vBZKGfXkJWkE4SphMHozs51k2MavDzq1WQf +LSoSOcbDWjLtR5EWDrw4wVDej8oqkDQc7kGUnF4ZLvhFSZl0kbAEb+MEWrGrKqv+ +x9CWttrhSmQGbmBNvUJO/3jaJMobtNeWOWyu8Q6qp31IiyBMz2TWuJdGsE7RKlY6 +oJO9r4Ak4Ap+58rVyuiFVdw2KuGUaJPHZnJED4AhMmwlxyOAgwrr +-----END CERTIFICATE----- + +# Issuer: CN=TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1 O=Turkiye Bilimsel ve Teknolojik Arastirma Kurumu - TUBITAK OU=Kamu Sertifikasyon Merkezi - Kamu SM +# Subject: CN=TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1 O=Turkiye Bilimsel ve Teknolojik Arastirma Kurumu - TUBITAK OU=Kamu Sertifikasyon Merkezi - Kamu SM +# Label: "TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1" +# Serial: 1 +# MD5 Fingerprint: dc:00:81:dc:69:2f:3e:2f:b0:3b:f6:3d:5a:91:8e:49 +# SHA1 Fingerprint: 31:43:64:9b:ec:ce:27:ec:ed:3a:3f:0b:8f:0d:e4:e8:91:dd:ee:ca +# SHA256 Fingerprint: 46:ed:c3:68:90:46:d5:3a:45:3f:b3:10:4a:b8:0d:ca:ec:65:8b:26:60:ea:16:29:dd:7e:86:79:90:64:87:16 +-----BEGIN CERTIFICATE----- +MIIEYzCCA0ugAwIBAgIBATANBgkqhkiG9w0BAQsFADCB0jELMAkGA1UEBhMCVFIx +GDAWBgNVBAcTD0dlYnplIC0gS29jYWVsaTFCMEAGA1UEChM5VHVya2l5ZSBCaWxp +bXNlbCB2ZSBUZWtub2xvamlrIEFyYXN0aXJtYSBLdXJ1bXUgLSBUVUJJVEFLMS0w +KwYDVQQLEyRLYW11IFNlcnRpZmlrYXN5b24gTWVya2V6aSAtIEthbXUgU00xNjA0 +BgNVBAMTLVRVQklUQUsgS2FtdSBTTSBTU0wgS29rIFNlcnRpZmlrYXNpIC0gU3Vy +dW0gMTAeFw0xMzExMjUwODI1NTVaFw00MzEwMjUwODI1NTVaMIHSMQswCQYDVQQG +EwJUUjEYMBYGA1UEBxMPR2ViemUgLSBLb2NhZWxpMUIwQAYDVQQKEzlUdXJraXll +IEJpbGltc2VsIHZlIFRla25vbG9qaWsgQXJhc3Rpcm1hIEt1cnVtdSAtIFRVQklU +QUsxLTArBgNVBAsTJEthbXUgU2VydGlmaWthc3lvbiBNZXJrZXppIC0gS2FtdSBT +TTE2MDQGA1UEAxMtVFVCSVRBSyBLYW11IFNNIFNTTCBLb2sgU2VydGlmaWthc2kg +LSBTdXJ1bSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr3UwM6q7 +a9OZLBI3hNmNe5eA027n/5tQlT6QlVZC1xl8JoSNkvoBHToP4mQ4t4y86Ij5iySr +LqP1N+RAjhgleYN1Hzv/bKjFxlb4tO2KRKOrbEz8HdDc72i9z+SqzvBV96I01INr +N3wcwv61A+xXzry0tcXtAA9TNypN9E8Mg/uGz8v+jE69h/mniyFXnHrfA2eJLJ2X +YacQuFWQfw4tJzh03+f92k4S400VIgLI4OD8D62K18lUUMw7D8oWgITQUVbDjlZ/ +iSIzL+aFCr2lqBs23tPcLG07xxO9WSMs5uWk99gL7eqQQESolbuT1dCANLZGeA4f +AJNG4e7p+exPFwIDAQABo0IwQDAdBgNVHQ4EFgQUZT/HiobGPN08VFw1+DrtUgxH +V8gwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEL +BQADggEBACo/4fEyjq7hmFxLXs9rHmoJ0iKpEsdeV31zVmSAhHqT5Am5EM2fKifh +AHe+SMg1qIGf5LgsyX8OsNJLN13qudULXjS99HMpw+0mFZx+CFOKWI3QSyjfwbPf +IPP54+M638yclNhOT8NrF7f3cuitZjO1JVOr4PhMqZ398g26rrnZqsZr+ZO7rqu4 +lzwDGrpDxpa5RXI4s6ehlj2Re37AIVNMh+3yC1SVUZPVIqUNivGTDj5UDrDYyU7c +8jEyVupk+eq1nRZmQnLzf9OxMUP8pI4X8W0jq5Rm+K37DwhuJi1/FwcJsoz7UMCf +lo3Ptv0AnVoUmr8CRPXBwp8iXqIPoeM= +-----END CERTIFICATE----- + +# Issuer: CN=GDCA TrustAUTH R5 ROOT O=GUANG DONG CERTIFICATE AUTHORITY CO.,LTD. +# Subject: CN=GDCA TrustAUTH R5 ROOT O=GUANG DONG CERTIFICATE AUTHORITY CO.,LTD. +# Label: "GDCA TrustAUTH R5 ROOT" +# Serial: 9009899650740120186 +# MD5 Fingerprint: 63:cc:d9:3d:34:35:5c:6f:53:a3:e2:08:70:48:1f:b4 +# SHA1 Fingerprint: 0f:36:38:5b:81:1a:25:c3:9b:31:4e:83:ca:e9:34:66:70:cc:74:b4 +# SHA256 Fingerprint: bf:ff:8f:d0:44:33:48:7d:6a:8a:a6:0c:1a:29:76:7a:9f:c2:bb:b0:5e:42:0f:71:3a:13:b9:92:89:1d:38:93 +-----BEGIN CERTIFICATE----- +MIIFiDCCA3CgAwIBAgIIfQmX/vBH6nowDQYJKoZIhvcNAQELBQAwYjELMAkGA1UE +BhMCQ04xMjAwBgNVBAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZ +IENPLixMVEQuMR8wHQYDVQQDDBZHRENBIFRydXN0QVVUSCBSNSBST09UMB4XDTE0 +MTEyNjA1MTMxNVoXDTQwMTIzMTE1NTk1OVowYjELMAkGA1UEBhMCQ04xMjAwBgNV +BAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZIENPLixMVEQuMR8w +HQYDVQQDDBZHRENBIFRydXN0QVVUSCBSNSBST09UMIICIjANBgkqhkiG9w0BAQEF +AAOCAg8AMIICCgKCAgEA2aMW8Mh0dHeb7zMNOwZ+Vfy1YI92hhJCfVZmPoiC7XJj +Dp6L3TQsAlFRwxn9WVSEyfFrs0yw6ehGXTjGoqcuEVe6ghWinI9tsJlKCvLriXBj +TnnEt1u9ol2x8kECK62pOqPseQrsXzrj/e+APK00mxqriCZ7VqKChh/rNYmDf1+u +KU49tm7srsHwJ5uu4/Ts765/94Y9cnrrpftZTqfrlYwiOXnhLQiPzLyRuEH3FMEj +qcOtmkVEs7LXLM3GKeJQEK5cy4KOFxg2fZfmiJqwTTQJ9Cy5WmYqsBebnh52nUpm +MUHfP/vFBu8btn4aRjb3ZGM74zkYI+dndRTVdVeSN72+ahsmUPI2JgaQxXABZG12 +ZuGR224HwGGALrIuL4xwp9E7PLOR5G62xDtw8mySlwnNR30YwPO7ng/Wi64HtloP +zgsMR6flPri9fcebNaBhlzpBdRfMK5Z3KpIhHtmVdiBnaM8Nvd/WHwlqmuLMc3Gk +L30SgLdTMEZeS1SZD2fJpcjyIMGC7J0R38IC+xo70e0gmu9lZJIQDSri3nDxGGeC +jGHeuLzRL5z7D9Ar7Rt2ueQ5Vfj4oR24qoAATILnsn8JuLwwoC8N9VKejveSswoA +HQBUlwbgsQfZxw9cZX08bVlX5O2ljelAU58VS6Bx9hoh49pwBiFYFIeFd3mqgnkC +AwEAAaNCMEAwHQYDVR0OBBYEFOLJQJ9NzuiaoXzPDj9lxSmIahlRMA8GA1UdEwEB +/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQDRSVfg +p8xoWLoBDysZzY2wYUWsEe1jUGn4H3++Fo/9nesLqjJHdtJnJO29fDMylyrHBYZm +DRd9FBUb1Ov9H5r2XpdptxolpAqzkT9fNqyL7FeoPueBihhXOYV0GkLH6VsTX4/5 +COmSdI31R9KrO9b7eGZONn356ZLpBN79SWP8bfsUcZNnL0dKt7n/HipzcEYwv1ry +L3ml4Y0M2fmyYzeMN2WFcGpcWwlyua1jPLHd+PwyvzeG5LuOmCd+uh8W4XAR8gPf +JWIyJyYYMoSf/wA6E7qaTfRPuBRwIrHKK5DOKcFw9C+df/KQHtZa37dG/OaG+svg +IHZ6uqbL9XzeYqWxi+7egmaKTjowHz+Ay60nugxe19CxVsp3cbK1daFQqUBDF8Io +2c9Si1vIY9RCPqAzekYu9wogRlR+ak8x8YF+QnQ4ZXMn7sZ8uI7XpTrXmKGcjBBV +09tL7ECQ8s1uV9JiDnxXk7Gnbc2dg7sq5+W2O3FYrf3RRbxake5TFW/TRQl1brqQ +XR4EzzffHqhmsYzmIGrv/EhOdJhCrylvLmrH+33RZjEizIYAfmaDDEL0vTSSwxrq +T8p+ck0LcIymSLumoRT2+1hEmRSuqguTaaApJUqlyyvdimYHFngVV3Eb7PVHhPOe +MTd61X8kreS8/f3MboPoDKi3QWwH3b08hpcv0g== +-----END CERTIFICATE----- + +# Issuer: CN=TrustCor RootCert CA-1 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority +# Subject: CN=TrustCor RootCert CA-1 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority +# Label: "TrustCor RootCert CA-1" +# Serial: 15752444095811006489 +# MD5 Fingerprint: 6e:85:f1:dc:1a:00:d3:22:d5:b2:b2:ac:6b:37:05:45 +# SHA1 Fingerprint: ff:bd:cd:e7:82:c8:43:5e:3c:6f:26:86:5c:ca:a8:3a:45:5b:c3:0a +# SHA256 Fingerprint: d4:0e:9c:86:cd:8f:e4:68:c1:77:69:59:f4:9e:a7:74:fa:54:86:84:b6:c4:06:f3:90:92:61:f4:dc:e2:57:5c +-----BEGIN CERTIFICATE----- +MIIEMDCCAxigAwIBAgIJANqb7HHzA7AZMA0GCSqGSIb3DQEBCwUAMIGkMQswCQYD +VQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEk +MCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5U +cnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxHzAdBgNVBAMMFlRydXN0Q29y +IFJvb3RDZXJ0IENBLTEwHhcNMTYwMjA0MTIzMjE2WhcNMjkxMjMxMTcyMzE2WjCB +pDELMAkGA1UEBhMCUEExDzANBgNVBAgMBlBhbmFtYTEUMBIGA1UEBwwLUGFuYW1h +IENpdHkxJDAiBgNVBAoMG1RydXN0Q29yIFN5c3RlbXMgUy4gZGUgUi5MLjEnMCUG +A1UECwweVHJ1c3RDb3IgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MR8wHQYDVQQDDBZU +cnVzdENvciBSb290Q2VydCBDQS0xMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB +CgKCAQEAv463leLCJhJrMxnHQFgKq1mqjQCj/IDHUHuO1CAmujIS2CNUSSUQIpid +RtLByZ5OGy4sDjjzGiVoHKZaBeYei0i/mJZ0PmnK6bV4pQa81QBeCQryJ3pS/C3V +seq0iWEk8xoT26nPUu0MJLq5nux+AHT6k61sKZKuUbS701e/s/OojZz0JEsq1pme +9J7+wH5COucLlVPat2gOkEz7cD+PSiyU8ybdY2mplNgQTsVHCJCZGxdNuWxu72CV +EY4hgLW9oHPY0LJ3xEXqWib7ZnZ2+AYfYW0PVcWDtxBWcgYHpfOxGgMFZA6dWorW +hnAbJN7+KIor0Gqw/Hqi3LJ5DotlDwIDAQABo2MwYTAdBgNVHQ4EFgQU7mtJPHo/ +DeOxCbeKyKsZn3MzUOcwHwYDVR0jBBgwFoAU7mtJPHo/DeOxCbeKyKsZn3MzUOcw +DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQAD +ggEBACUY1JGPE+6PHh0RU9otRCkZoB5rMZ5NDp6tPVxBb5UrJKF5mDo4Nvu7Zp5I +/5CQ7z3UuJu0h3U/IJvOcs+hVcFNZKIZBqEHMwwLKeXx6quj7LUKdJDHfXLy11yf +ke+Ri7fc7Waiz45mO7yfOgLgJ90WmMCV1Aqk5IGadZQ1nJBfiDcGrVmVCrDRZ9MZ +yonnMlo2HD6CqFqTvsbQZJG2z9m2GM/bftJlo6bEjhcxwft+dtvTheNYsnd6djts +L1Ac59v2Z3kf9YKVmgenFK+P3CghZwnS1k1aHBkcjndcw5QkPTJrS37UeJSDvjdN +zl/HHk484IkzlQsPpTLWPFp5LBk= +-----END CERTIFICATE----- + +# Issuer: CN=TrustCor RootCert CA-2 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority +# Subject: CN=TrustCor RootCert CA-2 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority +# Label: "TrustCor RootCert CA-2" +# Serial: 2711694510199101698 +# MD5 Fingerprint: a2:e1:f8:18:0b:ba:45:d5:c7:41:2a:bb:37:52:45:64 +# SHA1 Fingerprint: b8:be:6d:cb:56:f1:55:b9:63:d4:12:ca:4e:06:34:c7:94:b2:1c:c0 +# SHA256 Fingerprint: 07:53:e9:40:37:8c:1b:d5:e3:83:6e:39:5d:ae:a5:cb:83:9e:50:46:f1:bd:0e:ae:19:51:cf:10:fe:c7:c9:65 +-----BEGIN CERTIFICATE----- +MIIGLzCCBBegAwIBAgIIJaHfyjPLWQIwDQYJKoZIhvcNAQELBQAwgaQxCzAJBgNV +BAYTAlBBMQ8wDQYDVQQIDAZQYW5hbWExFDASBgNVBAcMC1BhbmFtYSBDaXR5MSQw +IgYDVQQKDBtUcnVzdENvciBTeXN0ZW1zIFMuIGRlIFIuTC4xJzAlBgNVBAsMHlRy +dXN0Q29yIENlcnRpZmljYXRlIEF1dGhvcml0eTEfMB0GA1UEAwwWVHJ1c3RDb3Ig +Um9vdENlcnQgQ0EtMjAeFw0xNjAyMDQxMjMyMjNaFw0zNDEyMzExNzI2MzlaMIGk +MQswCQYDVQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEg +Q2l0eTEkMCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYD +VQQLDB5UcnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxHzAdBgNVBAMMFlRy +dXN0Q29yIFJvb3RDZXJ0IENBLTIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK +AoICAQCnIG7CKqJiJJWQdsg4foDSq8GbZQWU9MEKENUCrO2fk8eHyLAnK0IMPQo+ +QVqedd2NyuCb7GgypGmSaIwLgQ5WoD4a3SwlFIIvl9NkRvRUqdw6VC0xK5mC8tkq +1+9xALgxpL56JAfDQiDyitSSBBtlVkxs1Pu2YVpHI7TYabS3OtB0PAx1oYxOdqHp +2yqlO/rOsP9+aij9JxzIsekp8VduZLTQwRVtDr4uDkbIXvRR/u8OYzo7cbrPb1nK +DOObXUm4TOJXsZiKQlecdu/vvdFoqNL0Cbt3Nb4lggjEFixEIFapRBF37120Hape +az6LMvYHL1cEksr1/p3C6eizjkxLAjHZ5DxIgif3GIJ2SDpxsROhOdUuxTTCHWKF +3wP+TfSvPd9cW436cOGlfifHhi5qjxLGhF5DUVCcGZt45vz27Ud+ez1m7xMTiF88 +oWP7+ayHNZ/zgp6kPwqcMWmLmaSISo5uZk3vFsQPeSghYA2FFn3XVDjxklb9tTNM +g9zXEJ9L/cb4Qr26fHMC4P99zVvh1Kxhe1fVSntb1IVYJ12/+CtgrKAmrhQhJ8Z3 +mjOAPF5GP/fDsaOGM8boXg25NSyqRsGFAnWAoOsk+xWq5Gd/bnc/9ASKL3x74xdh +8N0JqSDIvgmk0H5Ew7IwSjiqqewYmgeCK9u4nBit2uBGF6zPXQIDAQABo2MwYTAd +BgNVHQ4EFgQU2f4hQG6UnrybPZx9mCAZ5YwwYrIwHwYDVR0jBBgwFoAU2f4hQG6U +nrybPZx9mCAZ5YwwYrIwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYw +DQYJKoZIhvcNAQELBQADggIBAJ5Fngw7tu/hOsh80QA9z+LqBrWyOrsGS2h60COX +dKcs8AjYeVrXWoSK2BKaG9l9XE1wxaX5q+WjiYndAfrs3fnpkpfbsEZC89NiqpX+ +MWcUaViQCqoL7jcjx1BRtPV+nuN79+TMQjItSQzL/0kMmx40/W5ulop5A7Zv2wnL +/V9lFDfhOPXzYRZY5LVtDQsEGz9QLX+zx3oaFoBg+Iof6Rsqxvm6ARppv9JYx1RX +CI/hOWB3S6xZhBqI8d3LT3jX5+EzLfzuQfogsL7L9ziUwOHQhQ+77Sxzq+3+knYa +ZH9bDTMJBzN7Bj8RpFxwPIXAz+OQqIN3+tvmxYxoZxBnpVIt8MSZj3+/0WvitUfW +2dCFmU2Umw9Lje4AWkcdEQOsQRivh7dvDDqPys/cA8GiCcjl/YBeyGBCARsaU1q7 +N6a3vLqE6R5sGtRk2tRD/pOLS/IseRYQ1JMLiI+h2IYURpFHmygk71dSTlxCnKr3 +Sewn6EAes6aJInKc9Q0ztFijMDvd1GpUk74aTfOTlPf8hAs/hCBcNANExdqtvArB +As8e5ZTZ845b2EzwnexhF7sUMlQMAimTHpKG9n/v55IFDlndmQguLvqcAFLTxWYp +5KeXRKQOKIETNcX2b2TmQcTVL8w0RSXPQQCWPUouwpaYT05KnJe32x+SMsj/D1Fu +1uwJ +-----END CERTIFICATE----- + +# Issuer: CN=TrustCor ECA-1 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority +# Subject: CN=TrustCor ECA-1 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority +# Label: "TrustCor ECA-1" +# Serial: 9548242946988625984 +# MD5 Fingerprint: 27:92:23:1d:0a:f5:40:7c:e9:e6:6b:9d:d8:f5:e7:6c +# SHA1 Fingerprint: 58:d1:df:95:95:67:6b:63:c0:f0:5b:1c:17:4d:8b:84:0b:c8:78:bd +# SHA256 Fingerprint: 5a:88:5d:b1:9c:01:d9:12:c5:75:93:88:93:8c:af:bb:df:03:1a:b2:d4:8e:91:ee:15:58:9b:42:97:1d:03:9c +-----BEGIN CERTIFICATE----- +MIIEIDCCAwigAwIBAgIJAISCLF8cYtBAMA0GCSqGSIb3DQEBCwUAMIGcMQswCQYD +VQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEk +MCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5U +cnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxFzAVBgNVBAMMDlRydXN0Q29y +IEVDQS0xMB4XDTE2MDIwNDEyMzIzM1oXDTI5MTIzMTE3MjgwN1owgZwxCzAJBgNV +BAYTAlBBMQ8wDQYDVQQIDAZQYW5hbWExFDASBgNVBAcMC1BhbmFtYSBDaXR5MSQw +IgYDVQQKDBtUcnVzdENvciBTeXN0ZW1zIFMuIGRlIFIuTC4xJzAlBgNVBAsMHlRy +dXN0Q29yIENlcnRpZmljYXRlIEF1dGhvcml0eTEXMBUGA1UEAwwOVHJ1c3RDb3Ig +RUNBLTEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDPj+ARtZ+odnbb +3w9U73NjKYKtR8aja+3+XzP4Q1HpGjORMRegdMTUpwHmspI+ap3tDvl0mEDTPwOA +BoJA6LHip1GnHYMma6ve+heRK9jGrB6xnhkB1Zem6g23xFUfJ3zSCNV2HykVh0A5 +3ThFEXXQmqc04L/NyFIduUd+Dbi7xgz2c1cWWn5DkR9VOsZtRASqnKmcp0yJF4Ou +owReUoCLHhIlERnXDH19MURB6tuvsBzvgdAsxZohmz3tQjtQJvLsznFhBmIhVE5/ +wZ0+fyCMgMsq2JdiyIMzkX2woloPV+g7zPIlstR8L+xNxqE6FXrntl019fZISjZF +ZtS6mFjBAgMBAAGjYzBhMB0GA1UdDgQWBBREnkj1zG1I1KBLf/5ZJC+Dl5mahjAf +BgNVHSMEGDAWgBREnkj1zG1I1KBLf/5ZJC+Dl5mahjAPBgNVHRMBAf8EBTADAQH/ +MA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOCAQEABT41XBVwm8nHc2Fv +civUwo/yQ10CzsSUuZQRg2dd4mdsdXa/uwyqNsatR5Nj3B5+1t4u/ukZMjgDfxT2 +AHMsWbEhBuH7rBiVDKP/mZb3Kyeb1STMHd3BOuCYRLDE5D53sXOpZCz2HAF8P11F +hcCF5yWPldwX8zyfGm6wyuMdKulMY/okYWLW2n62HGz1Ah3UKt1VkOsqEUc8Ll50 +soIipX1TH0XsJ5F95yIW6MBoNtjG8U+ARDL54dHRHareqKucBK+tIA5kmE2la8BI +WJZpTdwHjFGTot+fDz2LYLSCjaoITmJF4PkL0uDgPFveXHEnJcLmA4GLEFPjx1Wi +tJ/X5g== +-----END CERTIFICATE----- + +# Issuer: CN=SSL.com Root Certification Authority RSA O=SSL Corporation +# Subject: CN=SSL.com Root Certification Authority RSA O=SSL Corporation +# Label: "SSL.com Root Certification Authority RSA" +# Serial: 8875640296558310041 +# MD5 Fingerprint: 86:69:12:c0:70:f1:ec:ac:ac:c2:d5:bc:a5:5b:a1:29 +# SHA1 Fingerprint: b7:ab:33:08:d1:ea:44:77:ba:14:80:12:5a:6f:bd:a9:36:49:0c:bb +# SHA256 Fingerprint: 85:66:6a:56:2e:e0:be:5c:e9:25:c1:d8:89:0a:6f:76:a8:7e:c1:6d:4d:7d:5f:29:ea:74:19:cf:20:12:3b:69 +-----BEGIN CERTIFICATE----- +MIIF3TCCA8WgAwIBAgIIeyyb0xaAMpkwDQYJKoZIhvcNAQELBQAwfDELMAkGA1UE +BhMCVVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQK +DA9TU0wgQ29ycG9yYXRpb24xMTAvBgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZp +Y2F0aW9uIEF1dGhvcml0eSBSU0EwHhcNMTYwMjEyMTczOTM5WhcNNDEwMjEyMTcz +OTM5WjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hv +dXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NMLmNv +bSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFJTQTCCAiIwDQYJKoZIhvcN +AQEBBQADggIPADCCAgoCggIBAPkP3aMrfcvQKv7sZ4Wm5y4bunfh4/WvpOz6Sl2R +xFdHaxh3a3by/ZPkPQ/CFp4LZsNWlJ4Xg4XOVu/yFv0AYvUiCVToZRdOQbngT0aX +qhvIuG5iXmmxX9sqAn78bMrzQdjt0Oj8P2FI7bADFB0QDksZ4LtO7IZl/zbzXmcC +C52GVWH9ejjt/uIZALdvoVBidXQ8oPrIJZK0bnoix/geoeOy3ZExqysdBP+lSgQ3 +6YWkMyv94tZVNHwZpEpox7Ko07fKoZOI68GXvIz5HdkihCR0xwQ9aqkpk8zruFvh +/l8lqjRYyMEjVJ0bmBHDOJx+PYZspQ9AhnwC9FwCTyjLrnGfDzrIM/4RJTXq/LrF +YD3ZfBjVsqnTdXgDciLKOsMf7yzlLqn6niy2UUb9rwPW6mBo6oUWNmuF6R7As93E +JNyAKoFBbZQ+yODJgUEAnl6/f8UImKIYLEJAs/lvOCdLToD0PYFH4Ih86hzOtXVc +US4cK38acijnALXRdMbX5J+tB5O2UzU1/Dfkw/ZdFr4hc96SCvigY2q8lpJqPvi8 +ZVWb3vUNiSYE/CUapiVpy8JtynziWV+XrOvvLsi81xtZPCvM8hnIk2snYxnP/Okm ++Mpxm3+T/jRnhE6Z6/yzeAkzcLpmpnbtG3PrGqUNxCITIJRWCk4sbE6x/c+cCbqi +M+2HAgMBAAGjYzBhMB0GA1UdDgQWBBTdBAkHovV6fVJTEpKV7jiAJQ2mWTAPBgNV +HRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFN0ECQei9Xp9UlMSkpXuOIAlDaZZMA4G +A1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAIBgRlCn7Jp0cHh5wYfGV +cpNxJK1ok1iOMq8bs3AD/CUrdIWQPXhq9LmLpZc7tRiRux6n+UBbkflVma8eEdBc +Hadm47GUBwwyOabqG7B52B2ccETjit3E+ZUfijhDPwGFpUenPUayvOUiaPd7nNgs +PgohyC0zrL/FgZkxdMF1ccW+sfAjRfSda/wZY52jvATGGAslu1OJD7OAUN5F7kR/ +q5R4ZJjT9ijdh9hwZXT7DrkT66cPYakylszeu+1jTBi7qUD3oFRuIIhxdRjqerQ0 +cuAjJ3dctpDqhiVAq+8zD8ufgr6iIPv2tS0a5sKFsXQP+8hlAqRSAUfdSSLBv9jr +a6x+3uxjMxW3IwiPxg+NQVrdjsW5j+VFP3jbutIbQLH+cU0/4IGiul607BXgk90I +H37hVZkLId6Tngr75qNJvTYw/ud3sqB1l7UtgYgXZSD32pAAn8lSzDLKNXz1PQ/Y +K9f1JmzJBjSWFupwWRoyeXkLtoh/D1JIPb9s2KJELtFOt3JY04kTlf5Eq/jXixtu +nLwsoFvVagCvXzfh1foQC5ichucmj87w7G6KVwuA406ywKBjYZC6VWg3dGq2ktuf +oYYitmUnDuy2n0Jg5GfCtdpBC8TTi2EbvPofkSvXRAdeuims2cXp71NIWuuA8ShY +Ic2wBlX7Jz9TkHCpBB5XJ7k= +-----END CERTIFICATE----- + +# Issuer: CN=SSL.com Root Certification Authority ECC O=SSL Corporation +# Subject: CN=SSL.com Root Certification Authority ECC O=SSL Corporation +# Label: "SSL.com Root Certification Authority ECC" +# Serial: 8495723813297216424 +# MD5 Fingerprint: 2e:da:e4:39:7f:9c:8f:37:d1:70:9f:26:17:51:3a:8e +# SHA1 Fingerprint: c3:19:7c:39:24:e6:54:af:1b:c4:ab:20:95:7a:e2:c3:0e:13:02:6a +# SHA256 Fingerprint: 34:17:bb:06:cc:60:07:da:1b:96:1c:92:0b:8a:b4:ce:3f:ad:82:0e:4a:a3:0b:9a:cb:c4:a7:4e:bd:ce:bc:65 +-----BEGIN CERTIFICATE----- +MIICjTCCAhSgAwIBAgIIdebfy8FoW6gwCgYIKoZIzj0EAwIwfDELMAkGA1UEBhMC +VVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9T +U0wgQ29ycG9yYXRpb24xMTAvBgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZpY2F0 +aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYwMjEyMTgxNDAzWhcNNDEwMjEyMTgxNDAz +WjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hvdXN0 +b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NMLmNvbSBS +b290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49AgEGBSuB +BAAiA2IABEVuqVDEpiM2nl8ojRfLliJkP9x6jh3MCLOicSS6jkm5BBtHllirLZXI +7Z4INcgn64mMU1jrYor+8FsPazFSY0E7ic3s7LaNGdM0B9y7xgZ/wkWV7Mt/qCPg +CemB+vNH06NjMGEwHQYDVR0OBBYEFILRhXMw5zUE044CkvvlpNHEIejNMA8GA1Ud +EwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUgtGFczDnNQTTjgKS++Wk0cQh6M0wDgYD +VR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2cAMGQCMG/n61kRpGDPYbCWe+0F+S8T +kdzt5fxQaxFGRrMcIQBiu77D5+jNB5n5DQtdcj7EqgIwH7y6C+IwJPt8bYBVCpk+ +gA0z5Wajs6O7pdWLjwkspl1+4vAHCGht0nxpbl/f5Wpl +-----END CERTIFICATE----- + +# Issuer: CN=SSL.com EV Root Certification Authority RSA R2 O=SSL Corporation +# Subject: CN=SSL.com EV Root Certification Authority RSA R2 O=SSL Corporation +# Label: "SSL.com EV Root Certification Authority RSA R2" +# Serial: 6248227494352943350 +# MD5 Fingerprint: e1:1e:31:58:1a:ae:54:53:02:f6:17:6a:11:7b:4d:95 +# SHA1 Fingerprint: 74:3a:f0:52:9b:d0:32:a0:f4:4a:83:cd:d4:ba:a9:7b:7c:2e:c4:9a +# SHA256 Fingerprint: 2e:7b:f1:6c:c2:24:85:a7:bb:e2:aa:86:96:75:07:61:b0:ae:39:be:3b:2f:e9:d0:cc:6d:4e:f7:34:91:42:5c +-----BEGIN CERTIFICATE----- +MIIF6zCCA9OgAwIBAgIIVrYpzTS8ePYwDQYJKoZIhvcNAQELBQAwgYIxCzAJBgNV +BAYTAlVTMQ4wDAYDVQQIDAVUZXhhczEQMA4GA1UEBwwHSG91c3RvbjEYMBYGA1UE +CgwPU1NMIENvcnBvcmF0aW9uMTcwNQYDVQQDDC5TU0wuY29tIEVWIFJvb3QgQ2Vy +dGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIyMB4XDTE3MDUzMTE4MTQzN1oXDTQy +MDUzMDE4MTQzN1owgYIxCzAJBgNVBAYTAlVTMQ4wDAYDVQQIDAVUZXhhczEQMA4G +A1UEBwwHSG91c3RvbjEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMTcwNQYDVQQD +DC5TU0wuY29tIEVWIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIy +MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAjzZlQOHWTcDXtOlG2mvq +M0fNTPl9fb69LT3w23jhhqXZuglXaO1XPqDQCEGD5yhBJB/jchXQARr7XnAjssuf +OePPxU7Gkm0mxnu7s9onnQqG6YE3Bf7wcXHswxzpY6IXFJ3vG2fThVUCAtZJycxa +4bH3bzKfydQ7iEGonL3Lq9ttewkfokxykNorCPzPPFTOZw+oz12WGQvE43LrrdF9 +HSfvkusQv1vrO6/PgN3B0pYEW3p+pKk8OHakYo6gOV7qd89dAFmPZiw+B6KjBSYR +aZfqhbcPlgtLyEDhULouisv3D5oi53+aNxPN8k0TayHRwMwi8qFG9kRpnMphNQcA +b9ZhCBHqurj26bNg5U257J8UZslXWNvNh2n4ioYSA0e/ZhN2rHd9NCSFg83XqpyQ +Gp8hLH94t2S42Oim9HizVcuE0jLEeK6jj2HdzghTreyI/BXkmg3mnxp3zkyPuBQV +PWKchjgGAGYS5Fl2WlPAApiiECtoRHuOec4zSnaqW4EWG7WK2NAAe15itAnWhmMO +pgWVSbooi4iTsjQc2KRVbrcc0N6ZVTsj9CLg+SlmJuwgUHfbSguPvuUCYHBBXtSu +UDkiFCbLsjtzdFVHB3mBOagwE0TlBIqulhMlQg+5U8Sb/M3kHN48+qvWBkofZ6aY +MBzdLNvcGJVXZsb/XItW9XcCAwEAAaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAfBgNV +HSMEGDAWgBT5YLvU49U09rj1BoAlp3PbRmmonjAdBgNVHQ4EFgQU+WC71OPVNPa4 +9QaAJadz20ZpqJ4wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQBW +s47LCp1Jjr+kxJG7ZhcFUZh1++VQLHqe8RT6q9OKPv+RKY9ji9i0qVQBDb6Thi/5 +Sm3HXvVX+cpVHBK+Rw82xd9qt9t1wkclf7nxY/hoLVUE0fKNsKTPvDxeH3jnpaAg +cLAExbf3cqfeIg29MyVGjGSSJuM+LmOW2puMPfgYCdcDzH2GguDKBAdRUNf/ktUM +79qGn5nX67evaOI5JpS6aLe/g9Pqemc9YmeuJeVy6OLk7K4S9ksrPJ/psEDzOFSz +/bdoyNrGj1E8svuR3Bznm53htw1yj+KkxKl4+esUrMZDBcJlOSgYAsOCsp0FvmXt +ll9ldDz7CTUue5wT/RsPXcdtgTpWD8w74a8CLyKsRspGPKAcTNZEtF4uXBVmCeEm +Kf7GUmG6sXP/wwyc5WxqlD8UykAWlYTzWamsX0xhk23RO8yilQwipmdnRC652dKK +QbNmC1r7fSOl8hqw/96bg5Qu0T/fkreRrwU7ZcegbLHNYhLDkBvjJc40vG93drEQ +w/cFGsDWr3RiSBd3kmmQYRzelYB0VI8YHMPzA9C/pEN1hlMYegouCRw2n5H9gooi +S9EOUCXdywMMF8mDAAhONU2Ki+3wApRmLER/y5UnlhetCTCstnEXbosX9hwJ1C07 +mKVx01QT2WDz9UtmT/rx7iASjbSsV7FFY6GsdqnC+w== +-----END CERTIFICATE----- + +# Issuer: CN=SSL.com EV Root Certification Authority ECC O=SSL Corporation +# Subject: CN=SSL.com EV Root Certification Authority ECC O=SSL Corporation +# Label: "SSL.com EV Root Certification Authority ECC" +# Serial: 3182246526754555285 +# MD5 Fingerprint: 59:53:22:65:83:42:01:54:c0:ce:42:b9:5a:7c:f2:90 +# SHA1 Fingerprint: 4c:dd:51:a3:d1:f5:20:32:14:b0:c6:c5:32:23:03:91:c7:46:42:6d +# SHA256 Fingerprint: 22:a2:c1:f7:bd:ed:70:4c:c1:e7:01:b5:f4:08:c3:10:88:0f:e9:56:b5:de:2a:4a:44:f9:9c:87:3a:25:a7:c8 +-----BEGIN CERTIFICATE----- +MIIClDCCAhqgAwIBAgIILCmcWxbtBZUwCgYIKoZIzj0EAwIwfzELMAkGA1UEBhMC +VVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9T +U0wgQ29ycG9yYXRpb24xNDAyBgNVBAMMK1NTTC5jb20gRVYgUm9vdCBDZXJ0aWZp +Y2F0aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYwMjEyMTgxNTIzWhcNNDEwMjEyMTgx +NTIzWjB/MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hv +dXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjE0MDIGA1UEAwwrU1NMLmNv +bSBFViBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49 +AgEGBSuBBAAiA2IABKoSR5CYG/vvw0AHgyBO8TCCogbR8pKGYfL2IWjKAMTH6kMA +VIbc/R/fALhBYlzccBYy3h+Z1MzFB8gIH2EWB1E9fVwHU+M1OIzfzZ/ZLg1Kthku +WnBaBu2+8KGwytAJKaNjMGEwHQYDVR0OBBYEFFvKXuXe0oGqzagtZFG22XKbl+ZP +MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUW8pe5d7SgarNqC1kUbbZcpuX +5k8wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2gAMGUCMQCK5kCJN+vp1RPZ +ytRrJPOwPYdGWBrssd9v+1a6cGvHOMzosYxPD/fxZ3YOg9AeUY8CMD32IygmTMZg +h5Mmm7I1HrrW9zzRHM76JTymGoEVW/MSD2zuZYrJh6j5B+BimoxcSg== +-----END CERTIFICATE----- + +# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R6 +# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R6 +# Label: "GlobalSign Root CA - R6" +# Serial: 1417766617973444989252670301619537 +# MD5 Fingerprint: 4f:dd:07:e4:d4:22:64:39:1e:0c:37:42:ea:d1:c6:ae +# SHA1 Fingerprint: 80:94:64:0e:b5:a7:a1:ca:11:9c:1f:dd:d5:9f:81:02:63:a7:fb:d1 +# SHA256 Fingerprint: 2c:ab:ea:fe:37:d0:6c:a2:2a:ba:73:91:c0:03:3d:25:98:29:52:c4:53:64:73:49:76:3a:3a:b5:ad:6c:cf:69 +-----BEGIN CERTIFICATE----- +MIIFgzCCA2ugAwIBAgIORea7A4Mzw4VlSOb/RVEwDQYJKoZIhvcNAQEMBQAwTDEg +MB4GA1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjYxEzARBgNVBAoTCkdsb2Jh +bFNpZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMTQxMjEwMDAwMDAwWhcNMzQx +MjEwMDAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSNjET +MBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCAiIwDQYJ +KoZIhvcNAQEBBQADggIPADCCAgoCggIBAJUH6HPKZvnsFMp7PPcNCPG0RQssgrRI +xutbPK6DuEGSMxSkb3/pKszGsIhrxbaJ0cay/xTOURQh7ErdG1rG1ofuTToVBu1k +ZguSgMpE3nOUTvOniX9PeGMIyBJQbUJmL025eShNUhqKGoC3GYEOfsSKvGRMIRxD +aNc9PIrFsmbVkJq3MQbFvuJtMgamHvm566qjuL++gmNQ0PAYid/kD3n16qIfKtJw +LnvnvJO7bVPiSHyMEAc4/2ayd2F+4OqMPKq0pPbzlUoSB239jLKJz9CgYXfIWHSw +1CM69106yqLbnQneXUQtkPGBzVeS+n68UARjNN9rkxi+azayOeSsJDa38O+2HBNX +k7besvjihbdzorg1qkXy4J02oW9UivFyVm4uiMVRQkQVlO6jxTiWm05OWgtH8wY2 +SXcwvHE35absIQh1/OZhFj931dmRl4QKbNQCTXTAFO39OfuD8l4UoQSwC+n+7o/h +bguyCLNhZglqsQY6ZZZZwPA1/cnaKI0aEYdwgQqomnUdnjqGBQCe24DWJfncBZ4n +WUx2OVvq+aWh2IMP0f/fMBH5hc8zSPXKbWQULHpYT9NLCEnFlWQaYw55PfWzjMpY +rZxCRXluDocZXFSxZba/jJvcE+kNb7gu3GduyYsRtYQUigAZcIN5kZeR1Bonvzce +MgfYFGM8KEyvAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTAD +AQH/MB0GA1UdDgQWBBSubAWjkxPioufi1xzWx/B/yGdToDAfBgNVHSMEGDAWgBSu +bAWjkxPioufi1xzWx/B/yGdToDANBgkqhkiG9w0BAQwFAAOCAgEAgyXt6NH9lVLN +nsAEoJFp5lzQhN7craJP6Ed41mWYqVuoPId8AorRbrcWc+ZfwFSY1XS+wc3iEZGt +Ixg93eFyRJa0lV7Ae46ZeBZDE1ZXs6KzO7V33EByrKPrmzU+sQghoefEQzd5Mr61 +55wsTLxDKZmOMNOsIeDjHfrYBzN2VAAiKrlNIC5waNrlU/yDXNOd8v9EDERm8tLj +vUYAGm0CuiVdjaExUd1URhxN25mW7xocBFymFe944Hn+Xds+qkxV/ZoVqW/hpvvf +cDDpw+5CRu3CkwWJ+n1jez/QcYF8AOiYrg54NMMl+68KnyBr3TsTjxKM4kEaSHpz +oHdpx7Zcf4LIHv5YGygrqGytXm3ABdJ7t+uA/iU3/gKbaKxCXcPu9czc8FB10jZp +nOZ7BN9uBmm23goJSFmH63sUYHpkqmlD75HHTOwY3WzvUy2MmeFe8nI+z1TIvWfs +pA9MRf/TuTAjB0yPEL+GltmZWrSZVxykzLsViVO6LAUP5MSeGbEYNNVMnbrt9x+v +JJUEeKgDu+6B5dpffItKoZB0JaezPkvILFa9x8jvOOJckvB595yEunQtYQEgfn7R +8k8HWV+LLUNS60YMlOH1Zkd5d9VUWx+tJDfLRVpOoERIyNiwmcUVhAn21klJwGW4 +5hpxbqCo8YLoRT5s1gLXCmeDBVrJpBA= +-----END CERTIFICATE----- + +# Issuer: CN=OISTE WISeKey Global Root GC CA O=WISeKey OU=OISTE Foundation Endorsed +# Subject: CN=OISTE WISeKey Global Root GC CA O=WISeKey OU=OISTE Foundation Endorsed +# Label: "OISTE WISeKey Global Root GC CA" +# Serial: 44084345621038548146064804565436152554 +# MD5 Fingerprint: a9:d6:b9:2d:2f:93:64:f8:a5:69:ca:91:e9:68:07:23 +# SHA1 Fingerprint: e0:11:84:5e:34:de:be:88:81:b9:9c:f6:16:26:d1:96:1f:c3:b9:31 +# SHA256 Fingerprint: 85:60:f9:1c:36:24:da:ba:95:70:b5:fe:a0:db:e3:6f:f1:1a:83:23:be:94:86:85:4f:b3:f3:4a:55:71:19:8d +-----BEGIN CERTIFICATE----- +MIICaTCCAe+gAwIBAgIQISpWDK7aDKtARb8roi066jAKBggqhkjOPQQDAzBtMQsw +CQYDVQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUgRm91 +bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwg +Um9vdCBHQyBDQTAeFw0xNzA1MDkwOTQ4MzRaFw00MjA1MDkwOTU4MzNaMG0xCzAJ +BgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYDVQQLExlPSVNURSBGb3Vu +ZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEdsb2JhbCBS +b290IEdDIENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAETOlQwMYPchi82PG6s4ni +eUqjFqdrVCTbUf/q9Akkwwsin8tqJ4KBDdLArzHkdIJuyiXZjHWd8dvQmqJLIX4W +p2OQ0jnUsYd4XxiWD1AbNTcPasbc2RNNpI6QN+a9WzGRo1QwUjAOBgNVHQ8BAf8E +BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUSIcUrOPDnpBgOtfKie7T +rYy0UGYwEAYJKwYBBAGCNxUBBAMCAQAwCgYIKoZIzj0EAwMDaAAwZQIwJsdpW9zV +57LnyAyMjMPdeYwbY9XJUpROTYJKcx6ygISpJcBMWm1JKWB4E+J+SOtkAjEA2zQg +Mgj/mkkCtojeFK9dbJlxjRo/i9fgojaGHAeCOnZT/cKi7e97sIBPWA9LUzm9 +-----END CERTIFICATE----- + +# Issuer: CN=GTS Root R1 O=Google Trust Services LLC +# Subject: CN=GTS Root R1 O=Google Trust Services LLC +# Label: "GTS Root R1" +# Serial: 146587175971765017618439757810265552097 +# MD5 Fingerprint: 82:1a:ef:d4:d2:4a:f2:9f:e2:3d:97:06:14:70:72:85 +# SHA1 Fingerprint: e1:c9:50:e6:ef:22:f8:4c:56:45:72:8b:92:20:60:d7:d5:a7:a3:e8 +# SHA256 Fingerprint: 2a:57:54:71:e3:13:40:bc:21:58:1c:bd:2c:f1:3e:15:84:63:20:3e:ce:94:bc:f9:d3:cc:19:6b:f0:9a:54:72 +-----BEGIN CERTIFICATE----- +MIIFWjCCA0KgAwIBAgIQbkepxUtHDA3sM9CJuRz04TANBgkqhkiG9w0BAQwFADBH +MQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExM +QzEUMBIGA1UEAxMLR1RTIFJvb3QgUjEwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIy +MDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNl +cnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjEwggIiMA0GCSqGSIb3DQEB +AQUAA4ICDwAwggIKAoICAQC2EQKLHuOhd5s73L+UPreVp0A8of2C+X0yBoJx9vaM +f/vo27xqLpeXo4xL+Sv2sfnOhB2x+cWX3u+58qPpvBKJXqeqUqv4IyfLpLGcY9vX +mX7wCl7raKb0xlpHDU0QM+NOsROjyBhsS+z8CZDfnWQpJSMHobTSPS5g4M/SCYe7 +zUjwTcLCeoiKu7rPWRnWr4+wB7CeMfGCwcDfLqZtbBkOtdh+JhpFAz2weaSUKK0P +fyblqAj+lug8aJRT7oM6iCsVlgmy4HqMLnXWnOunVmSPlk9orj2XwoSPwLxAwAtc +vfaHszVsrBhQf4TgTM2S0yDpM7xSma8ytSmzJSq0SPly4cpk9+aCEI3oncKKiPo4 +Zor8Y/kB+Xj9e1x3+naH+uzfsQ55lVe0vSbv1gHR6xYKu44LtcXFilWr06zqkUsp +zBmkMiVOKvFlRNACzqrOSbTqn3yDsEB750Orp2yjj32JgfpMpf/VjsPOS+C12LOO +Rc92wO1AK/1TD7Cn1TsNsYqiA94xrcx36m97PtbfkSIS5r762DL8EGMUUXLeXdYW +k70paDPvOmbsB4om3xPXV2V4J95eSRQAogB/mqghtqmxlbCluQ0WEdrHbEg8QOB+ +DVrNVjzRlwW5y0vtOUucxD/SVRNuJLDWcfr0wbrM7Rv1/oFB2ACYPTrIrnqYNxgF +lQIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV +HQ4EFgQU5K8rJnEaK0gnhS9SZizv8IkTcT4wDQYJKoZIhvcNAQEMBQADggIBADiW +Cu49tJYeX++dnAsznyvgyv3SjgofQXSlfKqE1OXyHuY3UjKcC9FhHb8owbZEKTV1 +d5iyfNm9dKyKaOOpMQkpAWBz40d8U6iQSifvS9efk+eCNs6aaAyC58/UEBZvXw6Z +XPYfcX3v73svfuo21pdwCxXu11xWajOl40k4DLh9+42FpLFZXvRq4d2h9mREruZR +gyFmxhE+885H7pwoHyXa/6xmld01D1zvICxi/ZG6qcz8WpyTgYMpl0p8WnK0OdC3 +d8t5/Wk6kjftbjhlRn7pYL15iJdfOBL07q9bgsiG1eGZbYwE8na6SfZu6W0eX6Dv +J4J2QPim01hcDyxC2kLGe4g0x8HYRZvBPsVhHdljUEn2NIVq4BjFbkerQUIpm/Zg +DdIx02OYI5NaAIFItO/Nis3Jz5nu2Z6qNuFoS3FJFDYoOj0dzpqPJeaAcWErtXvM ++SUWgeExX6GjfhaknBZqlxi9dnKlC54dNuYvoS++cJEPqOba+MSSQGwlfnuzCdyy +F62ARPBopY+Udf90WuioAnwMCeKpSwughQtiue+hMZL77/ZRBIls6Kl0obsXs7X9 +SQ98POyDGCBDTtWTurQ0sR8WNh8M5mQ5Fkzc4P4dyKliPUDqysU0ArSuiYgzNdws +E3PYJ/HQcu51OyLemGhmW/HGY0dVHLqlCFF1pkgl +-----END CERTIFICATE----- + +# Issuer: CN=GTS Root R2 O=Google Trust Services LLC +# Subject: CN=GTS Root R2 O=Google Trust Services LLC +# Label: "GTS Root R2" +# Serial: 146587176055767053814479386953112547951 +# MD5 Fingerprint: 44:ed:9a:0e:a4:09:3b:00:f2:ae:4c:a3:c6:61:b0:8b +# SHA1 Fingerprint: d2:73:96:2a:2a:5e:39:9f:73:3f:e1:c7:1e:64:3f:03:38:34:fc:4d +# SHA256 Fingerprint: c4:5d:7b:b0:8e:6d:67:e6:2e:42:35:11:0b:56:4e:5f:78:fd:92:ef:05:8c:84:0a:ea:4e:64:55:d7:58:5c:60 +-----BEGIN CERTIFICATE----- +MIIFWjCCA0KgAwIBAgIQbkepxlqz5yDFMJo/aFLybzANBgkqhkiG9w0BAQwFADBH +MQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExM +QzEUMBIGA1UEAxMLR1RTIFJvb3QgUjIwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIy +MDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNl +cnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjIwggIiMA0GCSqGSIb3DQEB +AQUAA4ICDwAwggIKAoICAQDO3v2m++zsFDQ8BwZabFn3GTXd98GdVarTzTukk3Lv +CvptnfbwhYBboUhSnznFt+4orO/LdmgUud+tAWyZH8QiHZ/+cnfgLFuv5AS/T3Kg +GjSY6Dlo7JUle3ah5mm5hRm9iYz+re026nO8/4Piy33B0s5Ks40FnotJk9/BW9Bu +XvAuMC6C/Pq8tBcKSOWIm8Wba96wyrQD8Nr0kLhlZPdcTK3ofmZemde4wj7I0BOd +re7kRXuJVfeKH2JShBKzwkCX44ofR5GmdFrS+LFjKBC4swm4VndAoiaYecb+3yXu +PuWgf9RhD1FLPD+M2uFwdNjCaKH5wQzpoeJ/u1U8dgbuak7MkogwTZq9TwtImoS1 +mKPV+3PBV2HdKFZ1E66HjucMUQkQdYhMvI35ezzUIkgfKtzra7tEscszcTJGr61K +8YzodDqs5xoic4DSMPclQsciOzsSrZYuxsN2B6ogtzVJV+mSSeh2FnIxZyuWfoqj +x5RWIr9qS34BIbIjMt/kmkRtWVtd9QCgHJvGeJeNkP+byKq0rxFROV7Z+2et1VsR +nTKaG73VululycslaVNVJ1zgyjbLiGH7HrfQy+4W+9OmTN6SpdTi3/UGVN4unUu0 +kzCqgc7dGtxRcw1PcOnlthYhGXmy5okLdWTK1au8CcEYof/UVKGFPP0UJAOyh9Ok +twIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV +HQ4EFgQUu//KjiOfT5nK2+JopqUVJxce2Q4wDQYJKoZIhvcNAQEMBQADggIBALZp +8KZ3/p7uC4Gt4cCpx/k1HUCCq+YEtN/L9x0Pg/B+E02NjO7jMyLDOfxA325BS0JT +vhaI8dI4XsRomRyYUpOM52jtG2pzegVATX9lO9ZY8c6DR2Dj/5epnGB3GFW1fgiT +z9D2PGcDFWEJ+YF59exTpJ/JjwGLc8R3dtyDovUMSRqodt6Sm2T4syzFJ9MHwAiA +pJiS4wGWAqoC7o87xdFtCjMwc3i5T1QWvwsHoaRc5svJXISPD+AVdyx+Jn7axEvb +pxZ3B7DNdehyQtaVhJ2Gg/LkkM0JR9SLA3DaWsYDQvTtN6LwG1BUSw7YhN4ZKJmB +R64JGz9I0cNv4rBgF/XuIwKl2gBbbZCr7qLpGzvpx0QnRY5rn/WkhLx3+WuXrD5R +RaIRpsyF7gpo8j5QOHokYh4XIDdtak23CZvJ/KRY9bb7nE4Yu5UC56GtmwfuNmsk +0jmGwZODUNKBRqhfYlcsu2xkiAhu7xNUX90txGdj08+JN7+dIPT7eoOboB6BAFDC +5AwiWVIQ7UNWhwD4FFKnHYuTjKJNRn8nxnGbJN7k2oaLDX5rIMHAnuFl2GqjpuiF +izoHCBy69Y9Vmhh1fuXsgWbRIXOhNUQLgD1bnF5vKheW0YMjiGZt5obicDIvUiLn +yOd/xCxgXS/Dr55FBcOEArf9LAhST4Ldo/DUhgkC +-----END CERTIFICATE----- + +# Issuer: CN=GTS Root R3 O=Google Trust Services LLC +# Subject: CN=GTS Root R3 O=Google Trust Services LLC +# Label: "GTS Root R3" +# Serial: 146587176140553309517047991083707763997 +# MD5 Fingerprint: 1a:79:5b:6b:04:52:9c:5d:c7:74:33:1b:25:9a:f9:25 +# SHA1 Fingerprint: 30:d4:24:6f:07:ff:db:91:89:8a:0b:e9:49:66:11:eb:8c:5e:46:e5 +# SHA256 Fingerprint: 15:d5:b8:77:46:19:ea:7d:54:ce:1c:a6:d0:b0:c4:03:e0:37:a9:17:f1:31:e8:a0:4e:1e:6b:7a:71:ba:bc:e5 +-----BEGIN CERTIFICATE----- +MIICDDCCAZGgAwIBAgIQbkepx2ypcyRAiQ8DVd2NHTAKBggqhkjOPQQDAzBHMQsw +CQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEU +MBIGA1UEAxMLR1RTIFJvb3QgUjMwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAw +MDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZp +Y2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjMwdjAQBgcqhkjOPQIBBgUrgQQA +IgNiAAQfTzOHMymKoYTey8chWEGJ6ladK0uFxh1MJ7x/JlFyb+Kf1qPKzEUURout +736GjOyxfi//qXGdGIRFBEFVbivqJn+7kAHjSxm65FSWRQmx1WyRRK2EE46ajA2A +DDL24CejQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud +DgQWBBTB8Sa6oC2uhYHP0/EqEr24Cmf9vDAKBggqhkjOPQQDAwNpADBmAjEAgFuk +fCPAlaUs3L6JbyO5o91lAFJekazInXJ0glMLfalAvWhgxeG4VDvBNhcl2MG9AjEA +njWSdIUlUfUk7GRSJFClH9voy8l27OyCbvWFGFPouOOaKaqW04MjyaR7YbPMAuhd +-----END CERTIFICATE----- + +# Issuer: CN=GTS Root R4 O=Google Trust Services LLC +# Subject: CN=GTS Root R4 O=Google Trust Services LLC +# Label: "GTS Root R4" +# Serial: 146587176229350439916519468929765261721 +# MD5 Fingerprint: 5d:b6:6a:c4:60:17:24:6a:1a:99:a8:4b:ee:5e:b4:26 +# SHA1 Fingerprint: 2a:1d:60:27:d9:4a:b1:0a:1c:4d:91:5c:cd:33:a0:cb:3e:2d:54:cb +# SHA256 Fingerprint: 71:cc:a5:39:1f:9e:79:4b:04:80:25:30:b3:63:e1:21:da:8a:30:43:bb:26:66:2f:ea:4d:ca:7f:c9:51:a4:bd +-----BEGIN CERTIFICATE----- +MIICCjCCAZGgAwIBAgIQbkepyIuUtui7OyrYorLBmTAKBggqhkjOPQQDAzBHMQsw +CQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEU +MBIGA1UEAxMLR1RTIFJvb3QgUjQwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAw +MDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZp +Y2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjQwdjAQBgcqhkjOPQIBBgUrgQQA +IgNiAATzdHOnaItgrkO4NcWBMHtLSZ37wWHO5t5GvWvVYRg1rkDdc/eJkTBa6zzu +hXyiQHY7qca4R9gq55KRanPpsXI5nymfopjTX15YhmUPoYRlBtHci8nHc8iMai/l +xKvRHYqjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud +DgQWBBSATNbrdP9JNqPV2Py1PsVq8JQdjDAKBggqhkjOPQQDAwNnADBkAjBqUFJ0 +CMRw3J5QdCHojXohw0+WbhXRIjVhLfoIN+4Zba3bssx9BzT1YBkstTTZbyACMANx +sbqjYAuG7ZoIapVon+Kz4ZNkfF6Tpt95LY2F45TPI11xzPKwTdb+mciUqXWi4w== +-----END CERTIFICATE----- + +# Issuer: CN=UCA Global G2 Root O=UniTrust +# Subject: CN=UCA Global G2 Root O=UniTrust +# Label: "UCA Global G2 Root" +# Serial: 124779693093741543919145257850076631279 +# MD5 Fingerprint: 80:fe:f0:c4:4a:f0:5c:62:32:9f:1c:ba:78:a9:50:f8 +# SHA1 Fingerprint: 28:f9:78:16:19:7a:ff:18:25:18:aa:44:fe:c1:a0:ce:5c:b6:4c:8a +# SHA256 Fingerprint: 9b:ea:11:c9:76:fe:01:47:64:c1:be:56:a6:f9:14:b5:a5:60:31:7a:bd:99:88:39:33:82:e5:16:1a:a0:49:3c +-----BEGIN CERTIFICATE----- +MIIFRjCCAy6gAwIBAgIQXd+x2lqj7V2+WmUgZQOQ7zANBgkqhkiG9w0BAQsFADA9 +MQswCQYDVQQGEwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxGzAZBgNVBAMMElVDQSBH +bG9iYWwgRzIgUm9vdDAeFw0xNjAzMTEwMDAwMDBaFw00MDEyMzEwMDAwMDBaMD0x +CzAJBgNVBAYTAkNOMREwDwYDVQQKDAhVbmlUcnVzdDEbMBkGA1UEAwwSVUNBIEds +b2JhbCBHMiBSb290MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxeYr +b3zvJgUno4Ek2m/LAfmZmqkywiKHYUGRO8vDaBsGxUypK8FnFyIdK+35KYmToni9 +kmugow2ifsqTs6bRjDXVdfkX9s9FxeV67HeToI8jrg4aA3++1NDtLnurRiNb/yzm +VHqUwCoV8MmNsHo7JOHXaOIxPAYzRrZUEaalLyJUKlgNAQLx+hVRZ2zA+te2G3/R +VogvGjqNO7uCEeBHANBSh6v7hn4PJGtAnTRnvI3HLYZveT6OqTwXS3+wmeOwcWDc +C/Vkw85DvG1xudLeJ1uK6NjGruFZfc8oLTW4lVYa8bJYS7cSN8h8s+1LgOGN+jIj +tm+3SJUIsUROhYw6AlQgL9+/V087OpAh18EmNVQg7Mc/R+zvWr9LesGtOxdQXGLY +D0tK3Cv6brxzks3sx1DoQZbXqX5t2Okdj4q1uViSukqSKwxW/YDrCPBeKW4bHAyv +j5OJrdu9o54hyokZ7N+1wxrrFv54NkzWbtA+FxyQF2smuvt6L78RHBgOLXMDj6Dl +NaBa4kx1HXHhOThTeEDMg5PXCp6dW4+K5OXgSORIskfNTip1KnvyIvbJvgmRlld6 +iIis7nCs+dwp4wwcOxJORNanTrAmyPPZGpeRaOrvjUYG0lZFWJo8DA+DuAUlwznP +O6Q0ibd5Ei9Hxeepl2n8pndntd978XplFeRhVmUCAwEAAaNCMEAwDgYDVR0PAQH/ +BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFIHEjMz15DD/pQwIX4wV +ZyF0Ad/fMA0GCSqGSIb3DQEBCwUAA4ICAQATZSL1jiutROTL/7lo5sOASD0Ee/oj +L3rtNtqyzm325p7lX1iPyzcyochltq44PTUbPrw7tgTQvPlJ9Zv3hcU2tsu8+Mg5 +1eRfB70VVJd0ysrtT7q6ZHafgbiERUlMjW+i67HM0cOU2kTC5uLqGOiiHycFutfl +1qnN3e92mI0ADs0b+gO3joBYDic/UvuUospeZcnWhNq5NXHzJsBPd+aBJ9J3O5oU +b3n09tDh05S60FdRvScFDcH9yBIw7m+NESsIndTUv4BFFJqIRNow6rSn4+7vW4LV +PtateJLbXDzz2K36uGt/xDYotgIVilQsnLAXc47QN6MUPJiVAAwpBVueSUmxX8fj +y88nZY41F7dXyDDZQVu5FLbowg+UMaeUmMxq67XhJ/UQqAHojhJi6IjMtX9Gl8Cb +EGY4GjZGXyJoPd/JxhMnq1MGrKI8hgZlb7F+sSlEmqO6SWkoaY/X5V+tBIZkbxqg +DMUIYs6Ao9Dz7GjevjPHF1t/gMRMTLGmhIrDO7gJzRSBuhjjVFc2/tsvfEehOjPI ++Vg7RE+xygKJBJYoaMVLuCaJu9YzL1DV/pqJuhgyklTGW+Cd+V7lDSKb9triyCGy +YiGqhkCyLmTTX8jjfhFnRR8F/uOi77Oos/N9j/gMHyIfLXC0uAE0djAA5SN4p1bX +UB+K+wb1whnw0A== +-----END CERTIFICATE----- + +# Issuer: CN=UCA Extended Validation Root O=UniTrust +# Subject: CN=UCA Extended Validation Root O=UniTrust +# Label: "UCA Extended Validation Root" +# Serial: 106100277556486529736699587978573607008 +# MD5 Fingerprint: a1:f3:5f:43:c6:34:9b:da:bf:8c:7e:05:53:ad:96:e2 +# SHA1 Fingerprint: a3:a1:b0:6f:24:61:23:4a:e3:36:a5:c2:37:fc:a6:ff:dd:f0:d7:3a +# SHA256 Fingerprint: d4:3a:f9:b3:54:73:75:5c:96:84:fc:06:d7:d8:cb:70:ee:5c:28:e7:73:fb:29:4e:b4:1e:e7:17:22:92:4d:24 +-----BEGIN CERTIFICATE----- +MIIFWjCCA0KgAwIBAgIQT9Irj/VkyDOeTzRYZiNwYDANBgkqhkiG9w0BAQsFADBH +MQswCQYDVQQGEwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxJTAjBgNVBAMMHFVDQSBF +eHRlbmRlZCBWYWxpZGF0aW9uIFJvb3QwHhcNMTUwMzEzMDAwMDAwWhcNMzgxMjMx +MDAwMDAwWjBHMQswCQYDVQQGEwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxJTAjBgNV +BAMMHFVDQSBFeHRlbmRlZCBWYWxpZGF0aW9uIFJvb3QwggIiMA0GCSqGSIb3DQEB +AQUAA4ICDwAwggIKAoICAQCpCQcoEwKwmeBkqh5DFnpzsZGgdT6o+uM4AHrsiWog +D4vFsJszA1qGxliG1cGFu0/GnEBNyr7uaZa4rYEwmnySBesFK5pI0Lh2PpbIILvS +sPGP2KxFRv+qZ2C0d35qHzwaUnoEPQc8hQ2E0B92CvdqFN9y4zR8V05WAT558aop +O2z6+I9tTcg1367r3CTueUWnhbYFiN6IXSV8l2RnCdm/WhUFhvMJHuxYMjMR83dk +sHYf5BA1FxvyDrFspCqjc/wJHx4yGVMR59mzLC52LqGj3n5qiAno8geK+LLNEOfi +c0CTuwjRP+H8C5SzJe98ptfRr5//lpr1kXuYC3fUfugH0mK1lTnj8/FtDw5lhIpj +VMWAtuCeS31HJqcBCF3RiJ7XwzJE+oJKCmhUfzhTA8ykADNkUVkLo4KRel7sFsLz +KuZi2irbWWIQJUoqgQtHB0MGcIfS+pMRKXpITeuUx3BNr2fVUbGAIAEBtHoIppB/ +TuDvB0GHr2qlXov7z1CymlSvw4m6WC31MJixNnI5fkkE/SmnTHnkBVfblLkWU41G +sx2VYVdWf6/wFlthWG82UBEL2KwrlRYaDh8IzTY0ZRBiZtWAXxQgXy0MoHgKaNYs +1+lvK9JKBZP8nm9rZ/+I8U6laUpSNwXqxhaN0sSZ0YIrO7o1dfdRUVjzyAfd5LQD +fwIDAQABo0IwQDAdBgNVHQ4EFgQU2XQ65DA9DfcS3H5aBZ8eNJr34RQwDwYDVR0T +AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQADggIBADaN +l8xCFWQpN5smLNb7rhVpLGsaGvdftvkHTFnq88nIua7Mui563MD1sC3AO6+fcAUR +ap8lTwEpcOPlDOHqWnzcSbvBHiqB9RZLcpHIojG5qtr8nR/zXUACE/xOHAbKsxSQ +VBcZEhrxH9cMaVr2cXj0lH2RC47skFSOvG+hTKv8dGT9cZr4QQehzZHkPJrgmzI5 +c6sq1WnIeJEmMX3ixzDx/BR4dxIOE/TdFpS/S2d7cFOFyrC78zhNLJA5wA3CXWvp +4uXViI3WLL+rG761KIcSF3Ru/H38j9CHJrAb+7lsq+KePRXBOy5nAliRn+/4Qh8s +t2j1da3Ptfb/EX3C8CSlrdP6oDyp+l3cpaDvRKS+1ujl5BOWF3sGPjLtx7dCvHaj +2GU4Kzg1USEODm8uNBNA4StnDG1KQTAYI1oyVZnJF+A83vbsea0rWBmirSwiGpWO +vpaQXUJXxPkUAzUrHC1RVwinOt4/5Mi0A3PCwSaAuwtCH60NryZy2sy+s6ODWA2C +xR9GUeOcGMyNm43sSet1UNWMKFnKdDTajAshqx7qG+XH/RU+wBeq+yNuJkbL+vmx +cmtpzyKEC2IPrNkZAJSidjzULZrtBJ4tBmIQN1IchXIbJ+XMxjHsN+xjWZsLHXbM +fjKaiJUINlK73nZfdklJrX+9ZSCyycErdhh2n1ax +-----END CERTIFICATE----- + +# Issuer: CN=Certigna Root CA O=Dhimyotis OU=0002 48146308100036 +# Subject: CN=Certigna Root CA O=Dhimyotis OU=0002 48146308100036 +# Label: "Certigna Root CA" +# Serial: 269714418870597844693661054334862075617 +# MD5 Fingerprint: 0e:5c:30:62:27:eb:5b:bc:d7:ae:62:ba:e9:d5:df:77 +# SHA1 Fingerprint: 2d:0d:52:14:ff:9e:ad:99:24:01:74:20:47:6e:6c:85:27:27:f5:43 +# SHA256 Fingerprint: d4:8d:3d:23:ee:db:50:a4:59:e5:51:97:60:1c:27:77:4b:9d:7b:18:c9:4d:5a:05:95:11:a1:02:50:b9:31:68 +-----BEGIN CERTIFICATE----- +MIIGWzCCBEOgAwIBAgIRAMrpG4nxVQMNo+ZBbcTjpuEwDQYJKoZIhvcNAQELBQAw +WjELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczEcMBoGA1UECwwTMDAw +MiA0ODE0NjMwODEwMDAzNjEZMBcGA1UEAwwQQ2VydGlnbmEgUm9vdCBDQTAeFw0x +MzEwMDEwODMyMjdaFw0zMzEwMDEwODMyMjdaMFoxCzAJBgNVBAYTAkZSMRIwEAYD +VQQKDAlEaGlteW90aXMxHDAaBgNVBAsMEzAwMDIgNDgxNDYzMDgxMDAwMzYxGTAX +BgNVBAMMEENlcnRpZ25hIFJvb3QgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw +ggIKAoICAQDNGDllGlmx6mQWDoyUJJV8g9PFOSbcDO8WV43X2KyjQn+Cyu3NW9sO +ty3tRQgXstmzy9YXUnIo245Onoq2C/mehJpNdt4iKVzSs9IGPjA5qXSjklYcoW9M +CiBtnyN6tMbaLOQdLNyzKNAT8kxOAkmhVECe5uUFoC2EyP+YbNDrihqECB63aCPu +I9Vwzm1RaRDuoXrC0SIxwoKF0vJVdlB8JXrJhFwLrN1CTivngqIkicuQstDuI7pm +TLtipPlTWmR7fJj6o0ieD5Wupxj0auwuA0Wv8HT4Ks16XdG+RCYyKfHx9WzMfgIh +C59vpD++nVPiz32pLHxYGpfhPTc3GGYo0kDFUYqMwy3OU4gkWGQwFsWq4NYKpkDf +ePb1BHxpE4S80dGnBs8B92jAqFe7OmGtBIyT46388NtEbVncSVmurJqZNjBBe3Yz +IoejwpKGbvlw7q6Hh5UbxHq9MfPU0uWZ/75I7HX1eBYdpnDBfzwboZL7z8g81sWT +Co/1VTp2lc5ZmIoJlXcymoO6LAQ6l73UL77XbJuiyn1tJslV1c/DeVIICZkHJC1k +JWumIWmbat10TWuXekG9qxf5kBdIjzb5LdXF2+6qhUVB+s06RbFo5jZMm5BX7CO5 +hwjCxAnxl4YqKE3idMDaxIzb3+KhF1nOJFl0Mdp//TBt2dzhauH8XwIDAQABo4IB +GjCCARYwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE +FBiHVuBud+4kNTxOc5of1uHieX4rMB8GA1UdIwQYMBaAFBiHVuBud+4kNTxOc5of +1uHieX4rMEQGA1UdIAQ9MDswOQYEVR0gADAxMC8GCCsGAQUFBwIBFiNodHRwczov +L3d3d3cuY2VydGlnbmEuZnIvYXV0b3JpdGVzLzBtBgNVHR8EZjBkMC+gLaArhilo +dHRwOi8vY3JsLmNlcnRpZ25hLmZyL2NlcnRpZ25hcm9vdGNhLmNybDAxoC+gLYYr +aHR0cDovL2NybC5kaGlteW90aXMuY29tL2NlcnRpZ25hcm9vdGNhLmNybDANBgkq +hkiG9w0BAQsFAAOCAgEAlLieT/DjlQgi581oQfccVdV8AOItOoldaDgvUSILSo3L +6btdPrtcPbEo/uRTVRPPoZAbAh1fZkYJMyjhDSSXcNMQH+pkV5a7XdrnxIxPTGRG +HVyH41neQtGbqH6mid2PHMkwgu07nM3A6RngatgCdTer9zQoKJHyBApPNeNgJgH6 +0BGM+RFq7q89w1DTj18zeTyGqHNFkIwgtnJzFyO+B2XleJINugHA64wcZr+shncB +lA2c5uk5jR+mUYyZDDl34bSb+hxnV29qao6pK0xXeXpXIs/NX2NGjVxZOob4Mkdi +o2cNGJHc+6Zr9UhhcyNZjgKnvETq9Emd8VRY+WCv2hikLyhF3HqgiIZd8zvn/yk1 +gPxkQ5Tm4xxvvq0OKmOZK8l+hfZx6AYDlf7ej0gcWtSS6Cvu5zHbugRqh5jnxV/v +faci9wHYTfmJ0A6aBVmknpjZbyvKcL5kwlWj9Omvw5Ip3IgWJJk8jSaYtlu3zM63 +Nwf9JtmYhST/WSMDmu2dnajkXjjO11INb9I/bbEFa0nOipFGc/T2L/Coc3cOZayh +jWZSaX5LaAzHHjcng6WMxwLkFM1JAbBzs/3GkDpv0mztO+7skb6iQ12LAEpmJURw +3kAP+HwV96LOPNdeE4yBFxgX0b3xdxA61GU5wSesVywlVP+i2k+KYTlerj1KjL0= +-----END CERTIFICATE----- + +# Issuer: CN=emSign Root CA - G1 O=eMudhra Technologies Limited OU=emSign PKI +# Subject: CN=emSign Root CA - G1 O=eMudhra Technologies Limited OU=emSign PKI +# Label: "emSign Root CA - G1" +# Serial: 235931866688319308814040 +# MD5 Fingerprint: 9c:42:84:57:dd:cb:0b:a7:2e:95:ad:b6:f3:da:bc:ac +# SHA1 Fingerprint: 8a:c7:ad:8f:73:ac:4e:c1:b5:75:4d:a5:40:f4:fc:cf:7c:b5:8e:8c +# SHA256 Fingerprint: 40:f6:af:03:46:a9:9a:a1:cd:1d:55:5a:4e:9c:ce:62:c7:f9:63:46:03:ee:40:66:15:83:3d:c8:c8:d0:03:67 +-----BEGIN CERTIFICATE----- +MIIDlDCCAnygAwIBAgIKMfXkYgxsWO3W2DANBgkqhkiG9w0BAQsFADBnMQswCQYD +VQQGEwJJTjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBU +ZWNobm9sb2dpZXMgTGltaXRlZDEcMBoGA1UEAxMTZW1TaWduIFJvb3QgQ0EgLSBH +MTAeFw0xODAyMTgxODMwMDBaFw00MzAyMTgxODMwMDBaMGcxCzAJBgNVBAYTAklO +MRMwEQYDVQQLEwplbVNpZ24gUEtJMSUwIwYDVQQKExxlTXVkaHJhIFRlY2hub2xv +Z2llcyBMaW1pdGVkMRwwGgYDVQQDExNlbVNpZ24gUm9vdCBDQSAtIEcxMIIBIjAN +BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAk0u76WaK7p1b1TST0Bsew+eeuGQz +f2N4aLTNLnF115sgxk0pvLZoYIr3IZpWNVrzdr3YzZr/k1ZLpVkGoZM0Kd0WNHVO +8oG0x5ZOrRkVUkr+PHB1cM2vK6sVmjM8qrOLqs1D/fXqcP/tzxE7lM5OMhbTI0Aq +d7OvPAEsbO2ZLIvZTmmYsvePQbAyeGHWDV/D+qJAkh1cF+ZwPjXnorfCYuKrpDhM +tTk1b+oDafo6VGiFbdbyL0NVHpENDtjVaqSW0RM8LHhQ6DqS0hdW5TUaQBw+jSzt +Od9C4INBdN+jzcKGYEho42kLVACL5HZpIQ15TjQIXhTCzLG3rdd8cIrHhQIDAQAB +o0IwQDAdBgNVHQ4EFgQU++8Nhp6w492pufEhF38+/PB3KxowDgYDVR0PAQH/BAQD +AgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAFn/8oz1h31x +PaOfG1vR2vjTnGs2vZupYeveFix0PZ7mddrXuqe8QhfnPZHr5X3dPpzxz5KsbEjM +wiI/aTvFthUvozXGaCocV685743QNcMYDHsAVhzNixl03r4PEuDQqqE/AjSxcM6d +GNYIAwlG7mDgfrbESQRRfXBgvKqy/3lyeqYdPV8q+Mri/Tm3R7nrft8EI6/6nAYH +6ftjk4BAtcZsCjEozgyfz7MjNYBBjWzEN3uBL4ChQEKF6dk4jeihU80Bv2noWgby +RQuQ+q7hv53yrlc8pa6yVvSLZUDp/TGBLPQ5Cdjua6e0ph0VpZj3AYHYhX3zUVxx +iN66zB+Afko= +-----END CERTIFICATE----- + +# Issuer: CN=emSign ECC Root CA - G3 O=eMudhra Technologies Limited OU=emSign PKI +# Subject: CN=emSign ECC Root CA - G3 O=eMudhra Technologies Limited OU=emSign PKI +# Label: "emSign ECC Root CA - G3" +# Serial: 287880440101571086945156 +# MD5 Fingerprint: ce:0b:72:d1:9f:88:8e:d0:50:03:e8:e3:b8:8b:67:40 +# SHA1 Fingerprint: 30:43:fa:4f:f2:57:dc:a0:c3:80:ee:2e:58:ea:78:b2:3f:e6:bb:c1 +# SHA256 Fingerprint: 86:a1:ec:ba:08:9c:4a:8d:3b:be:27:34:c6:12:ba:34:1d:81:3e:04:3c:f9:e8:a8:62:cd:5c:57:a3:6b:be:6b +-----BEGIN CERTIFICATE----- +MIICTjCCAdOgAwIBAgIKPPYHqWhwDtqLhDAKBggqhkjOPQQDAzBrMQswCQYDVQQG +EwJJTjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNo +bm9sb2dpZXMgTGltaXRlZDEgMB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0g +RzMwHhcNMTgwMjE4MTgzMDAwWhcNNDMwMjE4MTgzMDAwWjBrMQswCQYDVQQGEwJJ +TjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNobm9s +b2dpZXMgTGltaXRlZDEgMB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0gRzMw +djAQBgcqhkjOPQIBBgUrgQQAIgNiAAQjpQy4LRL1KPOxst3iAhKAnjlfSU2fySU0 +WXTsuwYc58Byr+iuL+FBVIcUqEqy6HyC5ltqtdyzdc6LBtCGI79G1Y4PPwT01xyS +fvalY8L1X44uT6EYGQIrMgqCZH0Wk9GjQjBAMB0GA1UdDgQWBBR8XQKEE9TMipuB +zhccLikenEhjQjAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggq +hkjOPQQDAwNpADBmAjEAvvNhzwIQHWSVB7gYboiFBS+DCBeQyh+KTOgNG3qxrdWB +CUfvO6wIBHxcmbHtRwfSAjEAnbpV/KlK6O3t5nYBQnvI+GDZjVGLVTv7jHvrZQnD ++JbNR6iC8hZVdyR+EhCVBCyj +-----END CERTIFICATE----- + +# Issuer: CN=emSign Root CA - C1 O=eMudhra Inc OU=emSign PKI +# Subject: CN=emSign Root CA - C1 O=eMudhra Inc OU=emSign PKI +# Label: "emSign Root CA - C1" +# Serial: 825510296613316004955058 +# MD5 Fingerprint: d8:e3:5d:01:21:fa:78:5a:b0:df:ba:d2:ee:2a:5f:68 +# SHA1 Fingerprint: e7:2e:f1:df:fc:b2:09:28:cf:5d:d4:d5:67:37:b1:51:cb:86:4f:01 +# SHA256 Fingerprint: 12:56:09:aa:30:1d:a0:a2:49:b9:7a:82:39:cb:6a:34:21:6f:44:dc:ac:9f:39:54:b1:42:92:f2:e8:c8:60:8f +-----BEGIN CERTIFICATE----- +MIIDczCCAlugAwIBAgILAK7PALrEzzL4Q7IwDQYJKoZIhvcNAQELBQAwVjELMAkG +A1UEBhMCVVMxEzARBgNVBAsTCmVtU2lnbiBQS0kxFDASBgNVBAoTC2VNdWRocmEg +SW5jMRwwGgYDVQQDExNlbVNpZ24gUm9vdCBDQSAtIEMxMB4XDTE4MDIxODE4MzAw +MFoXDTQzMDIxODE4MzAwMFowVjELMAkGA1UEBhMCVVMxEzARBgNVBAsTCmVtU2ln +biBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMRwwGgYDVQQDExNlbVNpZ24gUm9v +dCBDQSAtIEMxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz+upufGZ +BczYKCFK83M0UYRWEPWgTywS4/oTmifQz/l5GnRfHXk5/Fv4cI7gklL35CX5VIPZ +HdPIWoU/Xse2B+4+wM6ar6xWQio5JXDWv7V7Nq2s9nPczdcdioOl+yuQFTdrHCZH +3DspVpNqs8FqOp099cGXOFgFixwR4+S0uF2FHYP+eF8LRWgYSKVGczQ7/g/IdrvH +GPMF0Ybzhe3nudkyrVWIzqa2kbBPrH4VI5b2P/AgNBbeCsbEBEV5f6f9vtKppa+c +xSMq9zwhbL2vj07FOrLzNBL834AaSaTUqZX3noleoomslMuoaJuvimUnzYnu3Yy1 +aylwQ6BpC+S5DwIDAQABo0IwQDAdBgNVHQ4EFgQU/qHgcB4qAzlSWkK+XJGFehiq +TbUwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEL +BQADggEBAMJKVvoVIXsoounlHfv4LcQ5lkFMOycsxGwYFYDGrK9HWS8mC+M2sO87 +/kOXSTKZEhVb3xEp/6tT+LvBeA+snFOvV71ojD1pM/CjoCNjO2RnIkSt1XHLVip4 +kqNPEjE2NuLe/gDEo2APJ62gsIq1NnpSob0n9CAnYuhNlCQT5AoE6TyrLshDCUrG +YQTlSTR+08TI9Q/Aqum6VF7zYytPT1DU/rl7mYw9wC68AivTxEDkigcxHpvOJpkT ++xHqmiIMERnHXhuBUDDIlhJu58tBf5E7oke3VIAb3ADMmpDqw8NQBmIMMMAVSKeo +WXzhriKi4gp6D/piq1JM4fHfyr6DDUI= +-----END CERTIFICATE----- + +# Issuer: CN=emSign ECC Root CA - C3 O=eMudhra Inc OU=emSign PKI +# Subject: CN=emSign ECC Root CA - C3 O=eMudhra Inc OU=emSign PKI +# Label: "emSign ECC Root CA - C3" +# Serial: 582948710642506000014504 +# MD5 Fingerprint: 3e:53:b3:a3:81:ee:d7:10:f8:d3:b0:1d:17:92:f5:d5 +# SHA1 Fingerprint: b6:af:43:c2:9b:81:53:7d:f6:ef:6b:c3:1f:1f:60:15:0c:ee:48:66 +# SHA256 Fingerprint: bc:4d:80:9b:15:18:9d:78:db:3e:1d:8c:f4:f9:72:6a:79:5d:a1:64:3c:a5:f1:35:8e:1d:db:0e:dc:0d:7e:b3 +-----BEGIN CERTIFICATE----- +MIICKzCCAbGgAwIBAgIKe3G2gla4EnycqDAKBggqhkjOPQQDAzBaMQswCQYDVQQG +EwJVUzETMBEGA1UECxMKZW1TaWduIFBLSTEUMBIGA1UEChMLZU11ZGhyYSBJbmMx +IDAeBgNVBAMTF2VtU2lnbiBFQ0MgUm9vdCBDQSAtIEMzMB4XDTE4MDIxODE4MzAw +MFoXDTQzMDIxODE4MzAwMFowWjELMAkGA1UEBhMCVVMxEzARBgNVBAsTCmVtU2ln +biBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMSAwHgYDVQQDExdlbVNpZ24gRUND +IFJvb3QgQ0EgLSBDMzB2MBAGByqGSM49AgEGBSuBBAAiA2IABP2lYa57JhAd6bci +MK4G9IGzsUJxlTm801Ljr6/58pc1kjZGDoeVjbk5Wum739D+yAdBPLtVb4Ojavti +sIGJAnB9SMVK4+kiVCJNk7tCDK93nCOmfddhEc5lx/h//vXyqaNCMEAwHQYDVR0O +BBYEFPtaSNCAIEDyqOkAB2kZd6fmw/TPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMB +Af8EBTADAQH/MAoGCCqGSM49BAMDA2gAMGUCMQC02C8Cif22TGK6Q04ThHK1rt0c +3ta13FaPWEBaLd4gTCKDypOofu4SQMfWh0/434UCMBwUZOR8loMRnLDRWmFLpg9J +0wD8ofzkpf9/rdcw0Md3f76BB1UwUCAU9Vc4CqgxUQ== +-----END CERTIFICATE----- + +# Issuer: CN=Hongkong Post Root CA 3 O=Hongkong Post +# Subject: CN=Hongkong Post Root CA 3 O=Hongkong Post +# Label: "Hongkong Post Root CA 3" +# Serial: 46170865288971385588281144162979347873371282084 +# MD5 Fingerprint: 11:fc:9f:bd:73:30:02:8a:fd:3f:f3:58:b9:cb:20:f0 +# SHA1 Fingerprint: 58:a2:d0:ec:20:52:81:5b:c1:f3:f8:64:02:24:4e:c2:8e:02:4b:02 +# SHA256 Fingerprint: 5a:2f:c0:3f:0c:83:b0:90:bb:fa:40:60:4b:09:88:44:6c:76:36:18:3d:f9:84:6e:17:10:1a:44:7f:b8:ef:d6 +-----BEGIN CERTIFICATE----- +MIIFzzCCA7egAwIBAgIUCBZfikyl7ADJk0DfxMauI7gcWqQwDQYJKoZIhvcNAQEL +BQAwbzELMAkGA1UEBhMCSEsxEjAQBgNVBAgTCUhvbmcgS29uZzESMBAGA1UEBxMJ +SG9uZyBLb25nMRYwFAYDVQQKEw1Ib25na29uZyBQb3N0MSAwHgYDVQQDExdIb25n +a29uZyBQb3N0IFJvb3QgQ0EgMzAeFw0xNzA2MDMwMjI5NDZaFw00MjA2MDMwMjI5 +NDZaMG8xCzAJBgNVBAYTAkhLMRIwEAYDVQQIEwlIb25nIEtvbmcxEjAQBgNVBAcT +CUhvbmcgS29uZzEWMBQGA1UEChMNSG9uZ2tvbmcgUG9zdDEgMB4GA1UEAxMXSG9u +Z2tvbmcgUG9zdCBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK +AoICAQCziNfqzg8gTr7m1gNt7ln8wlffKWihgw4+aMdoWJwcYEuJQwy51BWy7sFO +dem1p+/l6TWZ5Mwc50tfjTMwIDNT2aa71T4Tjukfh0mtUC1Qyhi+AViiE3CWu4mI +VoBc+L0sPOFMV4i707mV78vH9toxdCim5lSJ9UExyuUmGs2C4HDaOym71QP1mbpV +9WTRYA6ziUm4ii8F0oRFKHyPaFASePwLtVPLwpgchKOesL4jpNrcyCse2m5FHomY +2vkALgbpDDtw1VAliJnLzXNg99X/NWfFobxeq81KuEXryGgeDQ0URhLj0mRiikKY +vLTGCAj4/ahMZJx2Ab0vqWwzD9g/KLg8aQFChn5pwckGyuV6RmXpwtZQQS4/t+Tt +bNe/JgERohYpSms0BpDsE9K2+2p20jzt8NYt3eEV7KObLyzJPivkaTv/ciWxNoZb +x39ri1UbSsUgYT2uy1DhCDq+sI9jQVMwCFk8mB13umOResoQUGC/8Ne8lYePl8X+ +l2oBlKN8W4UdKjk60FSh0Tlxnf0h+bV78OLgAo9uliQlLKAeLKjEiafv7ZkGL7YK +TE/bosw3Gq9HhS2KX8Q0NEwA/RiTZxPRN+ZItIsGxVd7GYYKecsAyVKvQv83j+Gj +Hno9UKtjBucVtT+2RTeUN7F+8kjDf8V1/peNRY8apxpyKBpADwIDAQABo2MwYTAP +BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBQXnc0e +i9Y5K3DTXNSguB+wAPzFYTAdBgNVHQ4EFgQUF53NHovWOStw01zUoLgfsAD8xWEw +DQYJKoZIhvcNAQELBQADggIBAFbVe27mIgHSQpsY1Q7XZiNc4/6gx5LS6ZStS6LG +7BJ8dNVI0lkUmcDrudHr9EgwW62nV3OZqdPlt9EuWSRY3GguLmLYauRwCy0gUCCk +MpXRAJi70/33MvJJrsZ64Ee+bs7Lo3I6LWldy8joRTnU+kLBEUx3XZL7av9YROXr +gZ6voJmtvqkBZss4HTzfQx/0TW60uhdG/H39h4F5ag0zD/ov+BS5gLNdTaqX4fnk +GMX41TiMJjz98iji7lpJiCzfeT2OnpA8vUFKOt1b9pq0zj8lMH8yfaIDlNDceqFS +3m6TjRgm/VWsvY+b0s+v54Ysyx8Jb6NvqYTUc79NoXQbTiNg8swOqn+knEwlqLJm +Ozj/2ZQw9nKEvmhVEA/GcywWaZMH/rFF7buiVWqw2rVKAiUnhde3t4ZEFolsgCs+ +l6mc1X5VTMbeRRAc6uk7nwNT7u56AQIWeNTowr5GdogTPyK7SBIdUgC0An4hGh6c +JfTzPV4e0hz5sy229zdcxsshTrD3mUcYhcErulWuBurQB7Lcq9CClnXO0lD+mefP +L5/ndtFhKvshuzHQqp9HpLIiyhY6UFfEW0NnxWViA0kB60PZ2Pierc+xYw5F9KBa +LJstxabArahH9CdMOA0uG0k7UvToiIMrVCjU8jVStDKDYmlkDJGcn5fqdBb9HxEG +mpv0 +-----END CERTIFICATE----- + +# Issuer: CN=Entrust Root Certification Authority - G4 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2015 Entrust, Inc. - for authorized use only +# Subject: CN=Entrust Root Certification Authority - G4 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2015 Entrust, Inc. - for authorized use only +# Label: "Entrust Root Certification Authority - G4" +# Serial: 289383649854506086828220374796556676440 +# MD5 Fingerprint: 89:53:f1:83:23:b7:7c:8e:05:f1:8c:71:38:4e:1f:88 +# SHA1 Fingerprint: 14:88:4e:86:26:37:b0:26:af:59:62:5c:40:77:ec:35:29:ba:96:01 +# SHA256 Fingerprint: db:35:17:d1:f6:73:2a:2d:5a:b9:7c:53:3e:c7:07:79:ee:32:70:a6:2f:b4:ac:42:38:37:24:60:e6:f0:1e:88 +-----BEGIN CERTIFICATE----- +MIIGSzCCBDOgAwIBAgIRANm1Q3+vqTkPAAAAAFVlrVgwDQYJKoZIhvcNAQELBQAw +gb4xCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQL +Ex9TZWUgd3d3LmVudHJ1c3QubmV0L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykg +MjAxNSBFbnRydXN0LCBJbmMuIC0gZm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxMjAw +BgNVBAMTKUVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEc0 +MB4XDTE1MDUyNzExMTExNloXDTM3MTIyNzExNDExNlowgb4xCzAJBgNVBAYTAlVT +MRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1 +c3QubmV0L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxNSBFbnRydXN0LCBJ +bmMuIC0gZm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxMjAwBgNVBAMTKUVudHJ1c3Qg +Um9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEc0MIICIjANBgkqhkiG9w0B +AQEFAAOCAg8AMIICCgKCAgEAsewsQu7i0TD/pZJH4i3DumSXbcr3DbVZwbPLqGgZ +2K+EbTBwXX7zLtJTmeH+H17ZSK9dE43b/2MzTdMAArzE+NEGCJR5WIoV3imz/f3E +T+iq4qA7ec2/a0My3dl0ELn39GjUu9CH1apLiipvKgS1sqbHoHrmSKvS0VnM1n4j +5pds8ELl3FFLFUHtSUrJ3hCX1nbB76W1NhSXNdh4IjVS70O92yfbYVaCNNzLiGAM +C1rlLAHGVK/XqsEQe9IFWrhAnoanw5CGAlZSCXqc0ieCU0plUmr1POeo8pyvi73T +DtTUXm6Hnmo9RR3RXRv06QqsYJn7ibT/mCzPfB3pAqoEmh643IhuJbNsZvc8kPNX +wbMv9W3y+8qh+CmdRouzavbmZwe+LGcKKh9asj5XxNMhIWNlUpEbsZmOeX7m640A +2Vqq6nPopIICR5b+W45UYaPrL0swsIsjdXJ8ITzI9vF01Bx7owVV7rtNOzK+mndm +nqxpkCIHH2E6lr7lmk/MBTwoWdPBDFSoWWG9yHJM6Nyfh3+9nEg2XpWjDrk4JFX8 +dWbrAuMINClKxuMrLzOg2qOGpRKX/YAr2hRC45K9PvJdXmd0LhyIRyk0X+IyqJwl +N4y6mACXi0mWHv0liqzc2thddG5msP9E36EYxr5ILzeUePiVSj9/E15dWf10hkNj +c0kCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD +VR0OBBYEFJ84xFYjwznooHFs6FRM5Og6sb9nMA0GCSqGSIb3DQEBCwUAA4ICAQAS +5UKme4sPDORGpbZgQIeMJX6tuGguW8ZAdjwD+MlZ9POrYs4QjbRaZIxowLByQzTS +Gwv2LFPSypBLhmb8qoMi9IsabyZIrHZ3CL/FmFz0Jomee8O5ZDIBf9PD3Vht7LGr +hFV0d4QEJ1JrhkzO3bll/9bGXp+aEJlLdWr+aumXIOTkdnrG0CSqkM0gkLpHZPt/ +B7NTeLUKYvJzQ85BK4FqLoUWlFPUa19yIqtRLULVAJyZv967lDtX/Zr1hstWO1uI +AeV8KEsD+UmDfLJ/fOPtjqF/YFOOVZ1QNBIPt5d7bIdKROf1beyAN/BYGW5KaHbw +H5Lk6rWS02FREAutp9lfx1/cH6NcjKF+m7ee01ZvZl4HliDtC3T7Zk6LERXpgUl+ +b7DUUH8i119lAg2m9IUe2K4GS0qn0jFmwvjO5QimpAKWRGhXxNUzzxkvFMSUHHuk +2fCfDrGA4tGeEWSpiBE6doLlYsKA2KSD7ZPvfC+QsDJMlhVoSFLUmQjAJOgc47Ol +IQ6SwJAfzyBfyjs4x7dtOvPmRLgOMWuIjnDrnBdSqEGULoe256YSxXXfW8AKbnuk +5F6G+TaU33fD6Q3AOfF5u0aOq0NZJ7cguyPpVkAh7DE9ZapD8j3fcEThuk0mEDuY +n/PIjhs4ViFqUZPTkcpG2om3PVODLAgfi49T3f+sHw== +-----END CERTIFICATE----- diff --git a/extensions/fablabchemnitz/inkstitch/bin/geos.dll b/extensions/fablabchemnitz/inkstitch/bin/geos.dll new file mode 100644 index 00000000..85be1299 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/geos.dll differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/geos_c.dll b/extensions/fablabchemnitz/inkstitch/bin/geos_c.dll new file mode 100644 index 00000000..85be1299 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/geos_c.dll differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/icons/pencil.png b/extensions/fablabchemnitz/inkstitch/bin/icons/pencil.png new file mode 100644 index 00000000..70e1d60e Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/icons/pencil.png differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/icons/pencil_20x20.png b/extensions/fablabchemnitz/inkstitch/bin/icons/pencil_20x20.png new file mode 100644 index 00000000..cd902ba5 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/icons/pencil_20x20.png differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/inkstitch.exe b/extensions/fablabchemnitz/inkstitch/bin/inkstitch.exe new file mode 100644 index 00000000..105dc6c7 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/inkstitch.exe differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/inkstitch.exe.manifest b/extensions/fablabchemnitz/inkstitch/bin/inkstitch.exe.manifest new file mode 100644 index 00000000..49502813 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/inkstitch.exe.manifest @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/inkstitch/bin/libopenblas.KZGMSHIV2CB7DB4HQYDV2LEPUALNSYMY.gfortran-win32.dll b/extensions/fablabchemnitz/inkstitch/bin/libopenblas.KZGMSHIV2CB7DB4HQYDV2LEPUALNSYMY.gfortran-win32.dll new file mode 100644 index 00000000..6066926f Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/libopenblas.KZGMSHIV2CB7DB4HQYDV2LEPUALNSYMY.gfortran-win32.dll differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/locales/af_ZA/LC_MESSAGES/inkstitch.mo b/extensions/fablabchemnitz/inkstitch/bin/locales/af_ZA/LC_MESSAGES/inkstitch.mo new file mode 100644 index 00000000..437ea31c Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/locales/af_ZA/LC_MESSAGES/inkstitch.mo differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/locales/ar_SA/LC_MESSAGES/inkstitch.mo b/extensions/fablabchemnitz/inkstitch/bin/locales/ar_SA/LC_MESSAGES/inkstitch.mo new file mode 100644 index 00000000..445ef2b8 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/locales/ar_SA/LC_MESSAGES/inkstitch.mo differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/locales/ca_ES/LC_MESSAGES/inkstitch.mo b/extensions/fablabchemnitz/inkstitch/bin/locales/ca_ES/LC_MESSAGES/inkstitch.mo new file mode 100644 index 00000000..df6c9cc8 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/locales/ca_ES/LC_MESSAGES/inkstitch.mo differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/locales/cs_CZ/LC_MESSAGES/inkstitch.mo b/extensions/fablabchemnitz/inkstitch/bin/locales/cs_CZ/LC_MESSAGES/inkstitch.mo new file mode 100644 index 00000000..c6787af9 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/locales/cs_CZ/LC_MESSAGES/inkstitch.mo differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/locales/da_DK/LC_MESSAGES/inkstitch.mo b/extensions/fablabchemnitz/inkstitch/bin/locales/da_DK/LC_MESSAGES/inkstitch.mo new file mode 100644 index 00000000..8c9d2f80 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/locales/da_DK/LC_MESSAGES/inkstitch.mo differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/locales/de_DE/LC_MESSAGES/inkstitch.mo b/extensions/fablabchemnitz/inkstitch/bin/locales/de_DE/LC_MESSAGES/inkstitch.mo new file mode 100644 index 00000000..5d45fd6a Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/locales/de_DE/LC_MESSAGES/inkstitch.mo differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/locales/el_GR/LC_MESSAGES/inkstitch.mo b/extensions/fablabchemnitz/inkstitch/bin/locales/el_GR/LC_MESSAGES/inkstitch.mo new file mode 100644 index 00000000..aa23e3ca Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/locales/el_GR/LC_MESSAGES/inkstitch.mo differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/locales/en_US/LC_MESSAGES/inkstitch.mo b/extensions/fablabchemnitz/inkstitch/bin/locales/en_US/LC_MESSAGES/inkstitch.mo new file mode 100644 index 00000000..ff7ee884 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/locales/en_US/LC_MESSAGES/inkstitch.mo differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/locales/es_ES/LC_MESSAGES/inkstitch.mo b/extensions/fablabchemnitz/inkstitch/bin/locales/es_ES/LC_MESSAGES/inkstitch.mo new file mode 100644 index 00000000..1e467230 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/locales/es_ES/LC_MESSAGES/inkstitch.mo differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/locales/fi_FI/LC_MESSAGES/inkstitch.mo b/extensions/fablabchemnitz/inkstitch/bin/locales/fi_FI/LC_MESSAGES/inkstitch.mo new file mode 100644 index 00000000..deac7316 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/locales/fi_FI/LC_MESSAGES/inkstitch.mo differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/locales/fr_FR/LC_MESSAGES/inkstitch.mo b/extensions/fablabchemnitz/inkstitch/bin/locales/fr_FR/LC_MESSAGES/inkstitch.mo new file mode 100644 index 00000000..a6e14336 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/locales/fr_FR/LC_MESSAGES/inkstitch.mo differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/locales/he_IL/LC_MESSAGES/inkstitch.mo b/extensions/fablabchemnitz/inkstitch/bin/locales/he_IL/LC_MESSAGES/inkstitch.mo new file mode 100644 index 00000000..2aa39304 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/locales/he_IL/LC_MESSAGES/inkstitch.mo differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/locales/hu_HU/LC_MESSAGES/inkstitch.mo b/extensions/fablabchemnitz/inkstitch/bin/locales/hu_HU/LC_MESSAGES/inkstitch.mo new file mode 100644 index 00000000..2f22abca Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/locales/hu_HU/LC_MESSAGES/inkstitch.mo differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/locales/it_IT/LC_MESSAGES/inkstitch.mo b/extensions/fablabchemnitz/inkstitch/bin/locales/it_IT/LC_MESSAGES/inkstitch.mo new file mode 100644 index 00000000..f310c66a Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/locales/it_IT/LC_MESSAGES/inkstitch.mo differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/locales/ja_JP/LC_MESSAGES/inkstitch.mo b/extensions/fablabchemnitz/inkstitch/bin/locales/ja_JP/LC_MESSAGES/inkstitch.mo new file mode 100644 index 00000000..ede3a160 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/locales/ja_JP/LC_MESSAGES/inkstitch.mo differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/locales/ko_KR/LC_MESSAGES/inkstitch.mo b/extensions/fablabchemnitz/inkstitch/bin/locales/ko_KR/LC_MESSAGES/inkstitch.mo new file mode 100644 index 00000000..38e37ff3 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/locales/ko_KR/LC_MESSAGES/inkstitch.mo differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/locales/nl_NL/LC_MESSAGES/inkstitch.mo b/extensions/fablabchemnitz/inkstitch/bin/locales/nl_NL/LC_MESSAGES/inkstitch.mo new file mode 100644 index 00000000..70b26770 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/locales/nl_NL/LC_MESSAGES/inkstitch.mo differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/locales/no_NO/LC_MESSAGES/inkstitch.mo b/extensions/fablabchemnitz/inkstitch/bin/locales/no_NO/LC_MESSAGES/inkstitch.mo new file mode 100644 index 00000000..6986f704 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/locales/no_NO/LC_MESSAGES/inkstitch.mo differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/locales/pl_PL/LC_MESSAGES/inkstitch.mo b/extensions/fablabchemnitz/inkstitch/bin/locales/pl_PL/LC_MESSAGES/inkstitch.mo new file mode 100644 index 00000000..7c0034bd Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/locales/pl_PL/LC_MESSAGES/inkstitch.mo differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/locales/pt_BR/LC_MESSAGES/inkstitch.mo b/extensions/fablabchemnitz/inkstitch/bin/locales/pt_BR/LC_MESSAGES/inkstitch.mo new file mode 100644 index 00000000..3147ab08 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/locales/pt_BR/LC_MESSAGES/inkstitch.mo differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/locales/pt_PT/LC_MESSAGES/inkstitch.mo b/extensions/fablabchemnitz/inkstitch/bin/locales/pt_PT/LC_MESSAGES/inkstitch.mo new file mode 100644 index 00000000..412bf307 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/locales/pt_PT/LC_MESSAGES/inkstitch.mo differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/locales/ro_RO/LC_MESSAGES/inkstitch.mo b/extensions/fablabchemnitz/inkstitch/bin/locales/ro_RO/LC_MESSAGES/inkstitch.mo new file mode 100644 index 00000000..b00fb32b Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/locales/ro_RO/LC_MESSAGES/inkstitch.mo differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/locales/ru_RU/LC_MESSAGES/inkstitch.mo b/extensions/fablabchemnitz/inkstitch/bin/locales/ru_RU/LC_MESSAGES/inkstitch.mo new file mode 100644 index 00000000..9533b322 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/locales/ru_RU/LC_MESSAGES/inkstitch.mo differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/locales/sr_SP/LC_MESSAGES/inkstitch.mo b/extensions/fablabchemnitz/inkstitch/bin/locales/sr_SP/LC_MESSAGES/inkstitch.mo new file mode 100644 index 00000000..0dba0ab4 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/locales/sr_SP/LC_MESSAGES/inkstitch.mo differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/locales/sv_SE/LC_MESSAGES/inkstitch.mo b/extensions/fablabchemnitz/inkstitch/bin/locales/sv_SE/LC_MESSAGES/inkstitch.mo new file mode 100644 index 00000000..3710e73b Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/locales/sv_SE/LC_MESSAGES/inkstitch.mo differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/locales/tr_TR/LC_MESSAGES/inkstitch.mo b/extensions/fablabchemnitz/inkstitch/bin/locales/tr_TR/LC_MESSAGES/inkstitch.mo new file mode 100644 index 00000000..1fae478d Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/locales/tr_TR/LC_MESSAGES/inkstitch.mo differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/locales/uk_UA/LC_MESSAGES/inkstitch.mo b/extensions/fablabchemnitz/inkstitch/bin/locales/uk_UA/LC_MESSAGES/inkstitch.mo new file mode 100644 index 00000000..2e00cda3 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/locales/uk_UA/LC_MESSAGES/inkstitch.mo differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/locales/vi_VN/LC_MESSAGES/inkstitch.mo b/extensions/fablabchemnitz/inkstitch/bin/locales/vi_VN/LC_MESSAGES/inkstitch.mo new file mode 100644 index 00000000..269421f3 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/locales/vi_VN/LC_MESSAGES/inkstitch.mo differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/locales/zh_CN/LC_MESSAGES/inkstitch.mo b/extensions/fablabchemnitz/inkstitch/bin/locales/zh_CN/LC_MESSAGES/inkstitch.mo new file mode 100644 index 00000000..97533cdb Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/locales/zh_CN/LC_MESSAGES/inkstitch.mo differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/locales/zh_TW/LC_MESSAGES/inkstitch.mo b/extensions/fablabchemnitz/inkstitch/bin/locales/zh_TW/LC_MESSAGES/inkstitch.mo new file mode 100644 index 00000000..e1c56712 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/locales/zh_TW/LC_MESSAGES/inkstitch.mo differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/lxml._elementpath.pyd b/extensions/fablabchemnitz/inkstitch/bin/lxml._elementpath.pyd new file mode 100644 index 00000000..e79e4232 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/lxml._elementpath.pyd differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/lxml.etree.pyd b/extensions/fablabchemnitz/inkstitch/bin/lxml.etree.pyd new file mode 100644 index 00000000..32f23ffa Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/lxml.etree.pyd differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/markupsafe._speedups.pyd b/extensions/fablabchemnitz/inkstitch/bin/markupsafe._speedups.pyd new file mode 100644 index 00000000..23780941 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/markupsafe._speedups.pyd differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/mfc90.dll b/extensions/fablabchemnitz/inkstitch/bin/mfc90.dll new file mode 100644 index 00000000..98b82b12 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/mfc90.dll differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/mfc90u.dll b/extensions/fablabchemnitz/inkstitch/bin/mfc90u.dll new file mode 100644 index 00000000..9e7c6d90 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/mfc90u.dll differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/mfcm90.dll b/extensions/fablabchemnitz/inkstitch/bin/mfcm90.dll new file mode 100644 index 00000000..55b19e3d Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/mfcm90.dll differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/mfcm90u.dll b/extensions/fablabchemnitz/inkstitch/bin/mfcm90u.dll new file mode 100644 index 00000000..ae3ee52a Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/mfcm90u.dll differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/msvcm90.dll b/extensions/fablabchemnitz/inkstitch/bin/msvcm90.dll new file mode 100644 index 00000000..5ac2105c Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/msvcm90.dll differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/msvcp90.dll b/extensions/fablabchemnitz/inkstitch/bin/msvcp90.dll new file mode 100644 index 00000000..7b0af636 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/msvcp90.dll differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/msvcr90.dll b/extensions/fablabchemnitz/inkstitch/bin/msvcr90.dll new file mode 100644 index 00000000..299590da Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/msvcr90.dll differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/numpy.core._multiarray_tests.pyd b/extensions/fablabchemnitz/inkstitch/bin/numpy.core._multiarray_tests.pyd new file mode 100644 index 00000000..d233e68a Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/numpy.core._multiarray_tests.pyd differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/numpy.core.multiarray.pyd b/extensions/fablabchemnitz/inkstitch/bin/numpy.core.multiarray.pyd new file mode 100644 index 00000000..74a0d9bb Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/numpy.core.multiarray.pyd differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/numpy.core.umath.pyd b/extensions/fablabchemnitz/inkstitch/bin/numpy.core.umath.pyd new file mode 100644 index 00000000..af83e815 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/numpy.core.umath.pyd differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/numpy.fft.fftpack_lite.pyd b/extensions/fablabchemnitz/inkstitch/bin/numpy.fft.fftpack_lite.pyd new file mode 100644 index 00000000..c3673efb Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/numpy.fft.fftpack_lite.pyd differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/numpy.linalg._umath_linalg.pyd b/extensions/fablabchemnitz/inkstitch/bin/numpy.linalg._umath_linalg.pyd new file mode 100644 index 00000000..82e725b5 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/numpy.linalg._umath_linalg.pyd differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/numpy.linalg.lapack_lite.pyd b/extensions/fablabchemnitz/inkstitch/bin/numpy.linalg.lapack_lite.pyd new file mode 100644 index 00000000..b0717096 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/numpy.linalg.lapack_lite.pyd differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/numpy.random.mtrand.pyd b/extensions/fablabchemnitz/inkstitch/bin/numpy.random.mtrand.pyd new file mode 100644 index 00000000..3c3194d7 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/numpy.random.mtrand.pyd differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/print/resources/barlow-bold.ttf b/extensions/fablabchemnitz/inkstitch/bin/print/resources/barlow-bold.ttf new file mode 100644 index 00000000..af272404 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/print/resources/barlow-bold.ttf differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/print/resources/barlow-condensed-bold.ttf b/extensions/fablabchemnitz/inkstitch/bin/print/resources/barlow-condensed-bold.ttf new file mode 100644 index 00000000..cb5e617c Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/print/resources/barlow-condensed-bold.ttf differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/print/resources/barlow-condensed-extra-bold.ttf b/extensions/fablabchemnitz/inkstitch/bin/print/resources/barlow-condensed-extra-bold.ttf new file mode 100644 index 00000000..d9352f09 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/print/resources/barlow-condensed-extra-bold.ttf differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/print/resources/barlow-extra-bold.ttf b/extensions/fablabchemnitz/inkstitch/bin/print/resources/barlow-extra-bold.ttf new file mode 100644 index 00000000..45456d4b Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/print/resources/barlow-extra-bold.ttf differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/print/resources/barlow.ttf b/extensions/fablabchemnitz/inkstitch/bin/print/resources/barlow.ttf new file mode 100644 index 00000000..7885fbf8 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/print/resources/barlow.ttf differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/print/resources/barlow_condensed.ttf b/extensions/fablabchemnitz/inkstitch/bin/print/resources/barlow_condensed.ttf new file mode 100644 index 00000000..7885fbf8 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/print/resources/barlow_condensed.ttf differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/print/resources/favicon.ico b/extensions/fablabchemnitz/inkstitch/bin/print/resources/favicon.ico new file mode 100644 index 00000000..1b5455bd Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/print/resources/favicon.ico differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/print/resources/inkstitch-logo.svg b/extensions/fablabchemnitz/inkstitch/bin/print/resources/inkstitch-logo.svg new file mode 100644 index 00000000..138318b9 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/print/resources/inkstitch-logo.svg @@ -0,0 +1,98 @@ + + + +image/svg+xml + + + + + + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/inkstitch/bin/print/resources/inkstitch.js b/extensions/fablabchemnitz/inkstitch/bin/print/resources/inkstitch.js new file mode 100644 index 00000000..a5d57e26 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/print/resources/inkstitch.js @@ -0,0 +1,734 @@ +var electron = require('electron'); + +$.postJSON = function(url, data, success=null) { + return $.ajax(url, { + type: 'POST', + data: JSON.stringify(data), + contentType: 'application/json', + success: success + }); +}; + +var realistic_rendering = {}; +var realistic_cache = {}; +var normal_rendering = {}; + +//function to chunk opd view into pieces + // source: https://stackoverflow.com/questions/3366529/wrap-every-3-divs-in-a-div +$.fn.chunk = function(size) { + var arr = []; + for (var i = 0; i < this.length; i += size) { + arr.push(this.slice(i, i + size)); + } + return this.pushStack(arr, "chunk", size); +} + +// build operator detailed view (opd) +function buildOpd(thumbnail_size = $('#operator-detailedview-thumbnail-size').val() ) { + + var thumbnail_size = parseInt(thumbnail_size); + var thumbnail_size_mm = thumbnail_size + 'mm'; + + var thumbnail_layout = (thumbnail_size >= 60) ? 'medium' : 'small'; + + // remove old settings + $('div.page.operator-detailedview header').remove(); + $('div.page.operator-detailedview footer').remove(); + $('div.page.operator-detailedview .job-headline').remove(); + $('div.page.operator-detailedview .opd-color-block').parentsUntil('div.page.operator-detailedview').addBack().unwrap(); + $('.opd-color-block').removeClass('medium large'); + $('.opd-color-block').removeAttr('style'); + + // set thumbnail size + $('.operator-svg.operator-preview').css({ + 'width': thumbnail_size_mm, + 'height': thumbnail_size_mm, + 'max-width': thumbnail_size_mm + }); + + // calculate number of blocks per page + var num_blocks_per_page = 1; + if(thumbnail_layout == 'medium') { + $('.opd-color-block').addClass('medium'); + // set width to be able to calculate the height + $('.opd-color-block').css({ 'width': thumbnail_size_mm }); + // calculate max height -> source: https://stackoverflow.com/questions/6060992/element-with-the-max-height-from-a-set-of-elements + var color_box_height = Math.max.apply(null, $('.opd-color-block').map(function () { return $(this).height(); }).get()); + var container_height = $('#opd-info').height(); + var num_rows = Math.floor(container_height / color_box_height); + var num_columns = Math.floor(175 / thumbnail_size); + // if only two blocks fit into one row, use 50% of the space for each of them + if(num_columns == 2) { $('.opd-color-block').css({ 'width': 'calc(50% - 2mm)' }); } + // set equal height for all color blocks + $('.opd-color-block').css({ 'height': color_box_height }); + // set number of color blocks per page for medium thumbnails + num_blocks_per_page = num_columns * num_rows; + // use layout for large thumbnails if only 2 or less color blocks fit on one page + if(num_blocks_per_page <= 2) { + $('.opd-color-block').removeClass('medium').removeAttr('style').addClass('large'); + thumbnail_layout = 'large'; + // set number of color blocks per page for large thumbnails + num_blocks_per_page = 2; + } + } else { + // set number of color blocks per page for small thumbnails + num_blocks_per_page = Math.floor(220 / thumbnail_size); + } + // set number of color blocks per page to 1 if it defaults to zero + // this should never happen, but we want to avoid the browser to crash + num_blocks_per_page = (num_blocks_per_page <= 0) ? '1' : num_blocks_per_page; + + // adjust to new settings + var header = $('#opd-info header').prop('outerHTML'); + var footer = $('#opd-info footer').prop('outerHTML'); + var job_headline = $('#opd-info .job-headline').prop('outerHTML'); + var opd_visibility = ($('#operator-detailedview').is(':checked')) ? 'block' :'none'; + var paper_size = $('#printing-size').val(); + $('.opd-color-block').chunk(num_blocks_per_page).wrap('
'); + $('div.operator-detailedview').prepend(header); + $('.operator-job-info').prepend(job_headline); + $('div.operator-detailedview').append(footer); + // update page numbers + setPageNumbers(); +} + +// set pagenumbers +function setPageNumbers() { + var totalPageNum = $('body').find('.page:visible').length; + $('span.total-page-num').text(totalPageNum); + $('.page:visible span.page-num').each(function( index ) { + $(this).text(index + 1); + }); +} + +// Calculate estimated time +function setEstimatedTime() { + var speed = Math.floor($('#machine-speed').val() / 60); // convert to seconds + speed = (speed <= 0) ? 1 : speed; + var timeTrim = ($('#time-trims').val() == '') ? 0 : parseInt($('#time-trims').val()); + var addToTotal = ($('#time-additional').val() == '') ? 0 : parseInt($('#time-additional').val()); + var timeColorChange = ($('#time-color-change').val() == '') ? 0 : parseInt($('#time-color-change').val()); + + // operator detailed view + $('.estimated-time').each(function(index, item) { + var selector = $(this); + var stitchCount = parseInt($(selector).closest('p').find('.num-stitches').text().match(/\d+/)); + var numTrims = parseInt($( selector ).closest('div').find('p span.num-trims').text().match(/\d+/)); + var estimatedTime = stitchCount/speed + (timeTrim * numTrims); + writeEstimatedTime( selector, estimatedTime ); + }); + + // client detailed view + $('.cld-estimated-time').each(function(index, item) { + var selector = $(this); + var stitchCount = parseInt($(selector).closest('div.page').find('main .detailed .color-info span.num-stitches').text().match(/\d+/)); + var numTrims = parseInt($( selector ).closest('div.page').find('main .detailed .color-info span.num-trims').text().match(/\d+/)); + var estimatedTime = stitchCount/speed + (timeTrim * numTrims); + writeEstimatedTime( selector, estimatedTime ); + }); + + var stitchCount = parseInt($('.total-num-stitches').first().text().match(/\d+/)); + var numTrims = parseInt($('.total-trims').first().text().match(/\d+/)); + var numColorBlocks = parseInt($('.num-color-blocks').first().text().match(/\d+/))-1; // the last color-block is not a color change + var selector = '.total-estimated-time'; + var estimatedTime = stitchCount/speed + (timeTrim * numTrims) + (timeColorChange * numColorBlocks) + addToTotal; + writeEstimatedTime( selector, estimatedTime ); +} + +function attachLeadingZero(n) { + return (n < 10) ? ("0" + n) : n; +} + +function writeEstimatedTime( selector, estimatedTime ) { + var hours = attachLeadingZero(Math.floor(estimatedTime / 3600)); + var minutes = attachLeadingZero(Math.floor((estimatedTime - (hours*3600)) / 60)); + var seconds = attachLeadingZero(Math.floor(estimatedTime % 60)); + $(selector).text( hours + ':' + minutes + ':' + seconds ); +} + +// Scale SVG (fit || full size) +function scaleSVG(element, scale = 'fit') { + + // always center svg + transform = "translate(-50%, -50%)"; + + if(scale == 'fit') { + var scale = Math.min( + element.width() / element.find('svg').width(), + element.height() / element.find('svg').height() + ); + } + + transform += " scale(" + scale + ")"; + var label = parseInt(scale*100); + + element.find('svg').css({ transform: transform }); + element.find('.scale').text(label); +} + +// set preview svg scale to fit into its box if display block and transform is not set +function scaleAllSvg() { + $('.page').each(function() { + if( $(this).css('display') == 'block' ) { + if( $(this).find('.inksimulation svg').css('transform') == 'none') { + scaleSVG($(this).find('.inksimulation'), 'fit'); + } + } + }); +} + +var saveTimerHandles = {}; + +function setSVGTransform(figure, transform) { + var field_name = $(figure).data('field-name'); + var scale = transform.match(/-?[\d\.]+/g)[0]; + figure.find('svg').css({ transform: transform }); + figure.find(".scale").text(parseInt(scale*100)); + + // avoid spamming updates + if (saveTimerHandles[field_name] != null) + clearTimeout(saveTimerHandles[field_name]); + + saveTimerHandles[field_name] = setTimeout(function() { + $.postJSON('/settings/' + field_name, {value: transform}); + }, 250); +} + +$(function() { + /* SCALING AND MOVING SVG */ + + /* Mousewheel scaling */ + $('figure.inksimulation').on( 'DOMMouseScroll mousewheel', function (e) { + if(e.ctrlKey == true) { + + var svg = $(this).find('svg'); + var transform = svg.css('transform').match(/-?[\d\.]+/g); + var scale = parseFloat(transform[0]); + + if (e.originalEvent.detail > 0 || e.originalEvent.wheelDelta < 0) { + // scroll down = zoom out + scale *= 0.97; + if (scale < 0.01) + scale = 0.01; + } else { + //scroll up + scale *= 1.03; + } + + // set modified scale + transform[0] = scale; + transform[3] = scale; + + setSVGTransform($(this), 'matrix(' + transform + ')'); + + //prevent page fom scrolling + return false; + } + }); + + /* Fit SVG */ + $('button.svg-fit').click(function() { + var svgfigure = $(this).closest('figure'); + scaleSVG(svgfigure, 'fit'); + }); + + /* Full Size SVG */ + $('button.svg-full').click(function() { + var svgfigure = $(this).closest('figure'); + scaleSVG(svgfigure, '1'); + }); + + /* Drag SVG */ + $('figure.inksimulation').on('mousedown', function(e) { + var p0 = { x: e.pageX, y: e.pageY }; + var start_transform = $(this).find('svg').css('transform').match(/-?[\d\.]+/g); + var start_offset = { x: parseFloat(start_transform[4]), y: parseFloat(start_transform[5]) }; + + $(this).css({cursor: 'move'}); + $(this).on('mousemove', function(e) { + var p1 = { x: e.pageX, y: e.pageY }; + // set modified translate + var transform = $(this).find('svg').css('transform').match(/-?[\d\.]+/g); + transform[4] = start_offset.x + (p1.x - p0.x); + transform[5] = start_offset.y + (p1.y - p0.y); + + // I'd ike to use setSVGTransform() here but this code runs many + // times per second and it's just too CPU-intensive. + $(this).find('svg').css({transform: 'matrix(' + transform + ')'}); + }); + }).on('mouseup', function(e) { + $(this).css({cursor: 'auto'}); + $(this).data('p0', null); + $(this).off('mousemove'); + + // set it using setSVGTransform() to ensure that it's saved to the server + setSVGTransform($(this), $(this).find('svg').css('transform')); + }); + + // ignore mouse events on the buttons (Fill, 100%, Apply to All) + $('figure.inksimulation div').on('mousedown mouseup', function(e) { + e.stopPropagation(); + }); + + /* Apply transforms to All */ + $('button.svg-apply').click(function() { + var transform = $(this).parent().siblings('svg').css('transform'); + $('.inksimulation').each(function() { + setSVGTransform($(this), transform); + }) + }); + + /* Contendeditable Fields */ + + $('body').on('focusout', '[contenteditable="true"]:not(.info-text)', function() { + /* change svg scale */ + var content = $(this).text(); + var field_name = $(this).attr('data-field-name'); + if(field_name == 'svg-scale') { + var scale = parseInt(content); + var svg = $(this).parent().siblings('svg'); + var transform = svg.css('transform').match(/-?[\d\.]+/g); + + transform[0] = scale / 100; + transform[3] = scale / 100; + svg.css({ transform: 'matrix(' + transform + ')' }); + } else { + /* When we focus out from a contenteditable field, we want to + * set the same content to all fields with the same classname */ + $('[data-field-name="' + field_name + '"]').text(content); + $.postJSON('/settings/' + field_name, {value: content}); + } + }); + + // load up initial metadata values + $.getJSON('/settings', function(settings) { + $.each(settings, function(field_name, value) { + $('[data-field-name="' + field_name + '"]').each(function(i, item) { + var item = $(item); + if (item.is(':checkbox')) { + item.prop('checked', value).trigger('initialize'); + } else if (item.is('img')) { + item.attr('src', value); + } else if (item.is('select')) { + item.val(value).trigger('initialize'); + } else if (item.is('input[type=range]')) { + item.val(value).trigger('initialize'); + $('#display-thumbnail-size').text(value + 'mm'); + } else if (item.is('input[type=number]')) { + item.val(value).trigger('initialize'); + } else if (item.is('figure.inksimulation')) { + setSVGTransform(item, value); + } else if (item.is('div.footer-info')) { + $('#footer-info-text').html($.parseHTML(value)); + item.html($.parseHTML(value)); + } else if (item.is('#custom-page-content')) { + $('#custom-page-content').html($.parseHTML(value)); + } else { + item.text(value); + } + }); + }); + + // wait until page size is set (if they've specified one) and then scale SVGs to fit and build operator detailed view + setTimeout(function() { + scaleAllSvg(); + buildOpd(); + }, 500); + }); + + $('body').on('keypress', '[contenteditable="true"]:not(.info-text)', function(e) { + if (e.which == 13) { + // pressing enter defocuses the element + this.blur(); + // also suppress the enter keystroke to avoid adding a new line + return false; + } else { + return true; + } + }); + + $('#footer-info-text[contenteditable="true"]').keypress(function(e) { + if (e.which == 13) { + if($(this).find('div').length > 2) { + return false; + } else { + return true; + } + } + }); + + $('.info-text[contenteditable="true"]').focusout(function() { + updateEditableText($(this)); + }); + + /* Settings Bar */ + + $('button.close').click(function() { + window.close(); + }); + + $('button.print').click(function() { + var pageSize = $('select#printing-size').find(':selected').text(); + electron.ipcRenderer.send('open-pdf', pageSize) + }); + + $('button.save-pdf').click(function() { + var pageSize = $('select#printing-size').find(':selected').text(); + electron.ipcRenderer.send('save-pdf', pageSize) + }); + + $('button.settings').click(function(){ + $('#settings-ui').show(); + }); + + $('#close-settings').click(function(){ + $('#settings-ui').hide(); + }); + + /* Settings */ + + // Settings Tabs + $('#tabs button').click(function() { + var active_fieldset_position = $(this).index() +1; + $('#settings-ui #fieldsets-ui > fieldset').css({'display': 'none'}); + $('#settings-ui #fieldsets-ui > fieldset:nth-child('+active_fieldset_position+')').css({'display': 'block'}); + $('#tabs .tab.active').removeClass("active"); + $(this).addClass("active"); + }); + + // Footer + function getEditMode(element){ + return element.closest('fieldset').find('.switch-mode').prop('checked'); + } + + $('.switch-mode').change(function() { + var element = $(this); + var info_text = element.closest('fieldset').find('.info-text'); + var editMode = getEditMode(element); + if (editMode) { + info_text.text( info_text.html() ); + element.closest('.tool-bar').find('.tb-button.edit-only').prop("disabled", true); + } else { + info_text.css('display', 'block'); + var sourceText = info_text.text(); + info_text.html( $.parseHTML(sourceText) ); + element.closest('.tool-bar').find('.tb-button.edit-only').prop('disabled', false); + } + }); + + function updateEditableText(element) { + var editMode = getEditMode(element); + var info_text = element.closest('fieldset').find('.info-text'); + var editableText = ''; + + if (editMode) { + editableText = info_text.text(); + } else { + editableText = info_text.html(); + } + + if(info_text.is('#footer-info-text')) { + $('div.footer-info').html($.parseHTML(editableText)); + $.postJSON('/settings/footer-info', {value: editableText}); + } else { + $.postJSON('/settings/custom-page-content', {value: editableText}); + } + } + + function formatText(selection, value) { + if(window.getSelection().toString()){ + document.execCommand(selection, false, value); + } + } + + $('.tb-bold').click(function() { + if(!getEditMode($(this))) { + formatText('bold'); + updateEditableText($(this)); + } + }); + + $('.tb-italic').click(function() { + if(!getEditMode($(this))) { + formatText('italic'); + updateEditableText($(this)); + } + }); + + $('.tb-underline').click(function() { + if(!getEditMode($(this))) { + formatText('underline'); + updateEditableText($(this)); + } + }); + + $('.tb-remove').click(function() { + if(!getEditMode($(this))) { + formatText('removeFormat'); + updateEditableText($(this)); + } + }); + + $('.tb-hyperlink').click(function() { + if(!getEditMode($(this))) { + formatText('createlink', 'tempurl'); + updateEditableText($(this)); + $(this).closest('.tool-bar').children('.url-window').css('display', 'block'); + } + }); + + $('.url-ok').click(function() { + var link = $(this).closest('.tool-bar').find('.user-url').val(); + $(this).closest('fieldset').find('.info-text').find('a[href="tempurl"]').attr('href', link); + $('.user-url').val('https://'); + $('.url-window').css('display', 'none'); + updateEditableText($(this)); + }); + + $('.url-cancel').click(function() { + $(this).closest('fieldset').find('.info-text').find('a[href="tempurl"]').contents().unwrap(); + $('.user-url').val('https://'); + $('.url-window').css('display', 'none'); + updateEditableText($(this)); + }); + + $('.tb-mail').click(function() { + if(!getEditMode($(this))) { + formatText('createlink', 'tempurl'); + updateEditableText($(this)); + $(this).closest('.tool-bar').find('.mail-window').css('display', 'block'); + } + }); + + $('.mail-ok').click(function() { + var link = 'mailto:' + $(this).closest('.tool-bar').find('.user-mail').val(); + $(this).closest('fieldset').find('.info-text').find('a[href="tempurl"]').attr('href', link); + $('.user-mail').val('@'); + $('.mail-window').css('display', 'none'); + updateEditableText($(this)); + }); + + $('.mail-cancel').click(function() { + $(this).closest('fieldset').find('.info-text').find('a[href="tempurl"]').contents().unwrap(); + $('.user-mail').val('@'); + $('.mail-window').css('display', 'none'); + updateEditableText($(this)); + }); + + $('.tb-reset').click(function() { + $(this).closest('.tool-bar').find('.reset-window').css('display', 'block'); + }); + + $('.reset-ok').click(function() { + var htmlMode = getEditMode($(this)); + if(!htmlMode) { + $(this).closest('fieldset').find('.info-text').html($(this).closest('.tool-bar').find('.original-info').html()); + } else { + $(this).closest('fieldset').find('.info-text').text($(this).closest('.tool-bar').find('.original-info').html()); + } + $('.reset-window').css('display', 'none'); + updateEditableText($(this)); + }); + + $('.reset-cancel').click(function() { + $('.reset-window').css('display', 'none'); + }); + + $('body').on("click", ".edit-footer-link", function() { + $("button.settings").trigger("click"); + $("#branding-tab").trigger("click"); + }); + + + // Paper Size + $('select#printing-size').on('change initialize', function(){ + $('.page').toggleClass('a4', $(this).find(':selected').val() == 'a4'); + }).on('change', function() { + $.postJSON('/settings/paper-size', {value: $(this).find(':selected').val()}); + }); + + // Operator detailed view: thumbnail size setting + $(document).on('input', '#operator-detailedview-thumbnail-size', function() { + var thumbnail_size_mm = $(this).val() + 'mm'; + $('#display-thumbnail-size').text( thumbnail_size_mm ); + }); + + // Operator detailed view: thumbnail size setting action + $('#operator-detailedview-thumbnail-size').change(function() { + // set thumbnail size + var thumbnail_size = $(this).val(); + // set page break positions + buildOpd(thumbnail_size); + + $.postJSON('/settings/operator-detailedview-thumbnail-size', {value: thumbnail_size}); + }); + + // Thread Palette + $('select#thread-palette').change(function(){ + $('.modal').show(); + }).on('update', function() { + $(this).data('current-value', $(this).find(':selected').val()); + }).trigger('update'); + + $('#modal-yes').on('click', function(){ + $("select#thread-palette").trigger("update"); + $('.modal').hide(); + var body = {'name': $('select#thread-palette').find(':selected').val()}; + $.postJSON('/palette', body, function() { + $.getJSON('/threads', function(threads) { + console.log("threads: " + JSON.stringify(threads)); + $.each(threads, function(i, thread) { + console.log("doing: " + JSON.stringify(thread)); + $('[data-field-name="color-' + thread.hex + '"]').text(thread.name); + var thread_description = thread.manufacturer; + if (thread.number) { + thread_description += " #" + thread.number; + } + $('[data-field-name="thread-' + thread.hex + '"]').text(thread_description); + }); + }); + }); + }); + + $('#modal-no').on('click', function(){ + var select = $("select#thread-palette"); + select.find('[value="' + select.data('current-value') + '"]').prop('selected', true); + $('.modal').hide(); + }); + + // View selection checkboxes + $(':checkbox.view').on('change initialize', function() { + var field_name = $(this).attr('data-field-name'); + $('.' + field_name).toggle($(this).prop('checked')); + scaleAllSvg(); + setPageNumbers(); + }).on('change', function() { + var field_name = $(this).attr('data-field-name'); + $.postJSON('/settings/' + field_name, {value: $(this).prop('checked')}); + }); + + // Estimated Time + $('#machine-speed, #time-additional, #time-color-change, #time-trims').on('input initialize', function() { + setEstimatedTime(); + }).on('change', function() { + var field_name = $(this).attr('data-field-name'); + $.postJSON('/settings/' + field_name, {value: $(this).val()}); + }); + + // Display Estimated Time checkboxes + $(':checkbox.time-display').on('input initialize', function() { + var field_name = $(this).attr('data-field-name'); + $('.' + field_name).toggle($(this).prop('checked')); + }).on('change', function() { + var field_name = $(this).attr('data-field-name'); + $.postJSON('/settings/' + field_name, {value: $(this).prop('checked')}); + }); + + // Realistic rendering checkboxes + $(':checkbox.realistic').on('change', function(e) { + console.log("realistic rendering checkbox"); + + var item = $(this).data('field-name'); + var figure = $(this).closest('figure'); + var svg = figure.find('svg'); + var transform = svg.css('transform'); + var checked = $(this).prop('checked'); + + console.log("" + item + " " + transform); + + function finalize(svg_content) { + svg[0].outerHTML = svg_content; + // can't use the svg variable here because setting outerHTML created a new tag + figure.find('svg').css({transform: transform}); + } + + // do this later to allow this event handler to return now, + // which will cause the checkbox to be checked or unchecked + // immediately even if SVG rendering takes awhile + setTimeout(function() { + if (checked) { + if (!(item in normal_rendering)) { + normal_rendering[item] = svg[0].outerHTML; + } + + if (!(item in realistic_cache)) { + // pre-render the realistic SVG to a raster image to spare the poor browser + var image = document.createElement('img'); + image.onload = function() { + console.log("rendering!"); + var canvas = document.createElement('canvas'); + + // maybe make DPI configurable? for now, use 600 + canvas.width = image.width / 96 * 600; + canvas.height = image.height / 96 * 600; + + var ctx = canvas.getContext('2d'); + ctx.drawImage(image, 0, 0, image.width, image.height, 0, 0, canvas.width, canvas.height); + realistic_cache[item] = '' + + '' + + ''; + finalize(realistic_cache[item]); + }; + image.src = '/realistic/' + item; + } else { + finalize(realistic_cache[item]); + } + } else { + finalize(normal_rendering[item]); + } + }, 100); + + e.stopPropagation(); + return true; + }); + + setTimeout(function() { + setEstimatedTime(); + }, 100); + + $('button.svg-realistic').click(function(e){ + $(this).find('input').click(); + }); + + // Logo + $(document).on("change", ".logo-picker", function(e) { + var file = e.currentTarget.files[0]; + var reader = new FileReader(); + reader.onloadend = function() { + var data = reader.result; + $('figure.brandlogo img').attr('src', data); + $.postJSON('/settings/logo', {value: data}); + }; + reader.readAsDataURL(file); + }); + + // "save as defaults" button + $('button.save-settings').click(function(e) { + var settings = {}; + settings["client-overview"] = $("[data-field-name='client-overview']").is(':checked'); + settings["client-detailedview"] = $("[data-field-name='client-detailedview']").is(':checked'); + settings["operator-overview"] = $("[data-field-name='operator-overview']").is(':checked'); + settings["operator-detailedview"] = $("[data-field-name='operator-detailedview']").is(':checked'); + settings["operator-detailedview-thumbnail-size"] = $("[data-field-name='operator-detailedview-thumbnail-size']").val(); + settings["custom-page"] = $("[data-field-name='custom-page']").is(':checked'); + settings["paper-size"] = $('select#printing-size').find(':selected').val(); + + var logo = $("figure.brandlogo img").attr('src'); + if (logo.startsWith("data:")) { + settings["logo"] = logo; + } + settings["footer-info"] = $("[data-field-name='footer-info']").html(); + + settings["machine-speed"] = $("[data-field-name='machine-speed']").val(); + settings["time-additional"] = $("[data-field-name='time-additional']").val(); + settings["time-color-change"] = $("[data-field-name='time-color-change']").val(); + settings["time-trims"] = $("[data-field-name='time-trims']").val(); + + settings["time-clo"] = $("[data-field-name='time-clo']").val(); + settings["time-cld"] = $("[data-field-name='time-cld']").val(); + settings["time-opo"] = $("[data-field-name='time-opo']").val(); + settings["time-opd"] = $("[data-field-name='time-opd']").val(); + + $.postJSON('/defaults', {'value': settings}); + }); +}); diff --git a/extensions/fablabchemnitz/inkstitch/bin/print/resources/jquery-3.3.1.min.js b/extensions/fablabchemnitz/inkstitch/bin/print/resources/jquery-3.3.1.min.js new file mode 100644 index 00000000..4d9b3a25 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/print/resources/jquery-3.3.1.min.js @@ -0,0 +1,2 @@ +/*! jQuery v3.3.1 | (c) JS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(e,t){"use strict";var n=[],r=e.document,i=Object.getPrototypeOf,o=n.slice,a=n.concat,s=n.push,u=n.indexOf,l={},c=l.toString,f=l.hasOwnProperty,p=f.toString,d=p.call(Object),h={},g=function e(t){return"function"==typeof t&&"number"!=typeof t.nodeType},y=function e(t){return null!=t&&t===t.window},v={type:!0,src:!0,noModule:!0};function m(e,t,n){var i,o=(t=t||r).createElement("script");if(o.text=e,n)for(i in v)n[i]&&(o[i]=n[i]);t.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[c.call(e)]||"object":typeof e}var b="3.3.1",w=function(e,t){return new w.fn.init(e,t)},T=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;w.fn=w.prototype={jquery:"3.3.1",constructor:w,length:0,toArray:function(){return o.call(this)},get:function(e){return null==e?o.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=w.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return w.each(this,e)},map:function(e){return this.pushStack(w.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(o.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n0&&t-1 in e)}var E=function(e){var t,n,r,i,o,a,s,u,l,c,f,p,d,h,g,y,v,m,x,b="sizzle"+1*new Date,w=e.document,T=0,C=0,E=ae(),k=ae(),S=ae(),D=function(e,t){return e===t&&(f=!0),0},N={}.hasOwnProperty,A=[],j=A.pop,q=A.push,L=A.push,H=A.slice,O=function(e,t){for(var n=0,r=e.length;n+~]|"+M+")"+M+"*"),z=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),X=new RegExp(W),U=new RegExp("^"+R+"$"),V={ID:new RegExp("^#("+R+")"),CLASS:new RegExp("^\\.("+R+")"),TAG:new RegExp("^("+R+"|[*])"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+W),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+P+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},G=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Q=/^[^{]+\{\s*\[native \w/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,K=/[+~]/,Z=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ee=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},te=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ne=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},re=function(){p()},ie=me(function(e){return!0===e.disabled&&("form"in e||"label"in e)},{dir:"parentNode",next:"legend"});try{L.apply(A=H.call(w.childNodes),w.childNodes),A[w.childNodes.length].nodeType}catch(e){L={apply:A.length?function(e,t){q.apply(e,H.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function oe(e,t,r,i){var o,s,l,c,f,h,v,m=t&&t.ownerDocument,T=t?t.nodeType:9;if(r=r||[],"string"!=typeof e||!e||1!==T&&9!==T&&11!==T)return r;if(!i&&((t?t.ownerDocument||t:w)!==d&&p(t),t=t||d,g)){if(11!==T&&(f=J.exec(e)))if(o=f[1]){if(9===T){if(!(l=t.getElementById(o)))return r;if(l.id===o)return r.push(l),r}else if(m&&(l=m.getElementById(o))&&x(t,l)&&l.id===o)return r.push(l),r}else{if(f[2])return L.apply(r,t.getElementsByTagName(e)),r;if((o=f[3])&&n.getElementsByClassName&&t.getElementsByClassName)return L.apply(r,t.getElementsByClassName(o)),r}if(n.qsa&&!S[e+" "]&&(!y||!y.test(e))){if(1!==T)m=t,v=e;else if("object"!==t.nodeName.toLowerCase()){(c=t.getAttribute("id"))?c=c.replace(te,ne):t.setAttribute("id",c=b),s=(h=a(e)).length;while(s--)h[s]="#"+c+" "+ve(h[s]);v=h.join(","),m=K.test(e)&&ge(t.parentNode)||t}if(v)try{return L.apply(r,m.querySelectorAll(v)),r}catch(e){}finally{c===b&&t.removeAttribute("id")}}}return u(e.replace(B,"$1"),t,r,i)}function ae(){var e=[];function t(n,i){return e.push(n+" ")>r.cacheLength&&delete t[e.shift()],t[n+" "]=i}return t}function se(e){return e[b]=!0,e}function ue(e){var t=d.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function le(e,t){var n=e.split("|"),i=n.length;while(i--)r.attrHandle[n[i]]=t}function ce(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function fe(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}function pe(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function de(e){return function(t){return"form"in t?t.parentNode&&!1===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&ie(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function he(e){return se(function(t){return t=+t,se(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function ge(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}n=oe.support={},o=oe.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},p=oe.setDocument=function(e){var t,i,a=e?e.ownerDocument||e:w;return a!==d&&9===a.nodeType&&a.documentElement?(d=a,h=d.documentElement,g=!o(d),w!==d&&(i=d.defaultView)&&i.top!==i&&(i.addEventListener?i.addEventListener("unload",re,!1):i.attachEvent&&i.attachEvent("onunload",re)),n.attributes=ue(function(e){return e.className="i",!e.getAttribute("className")}),n.getElementsByTagName=ue(function(e){return e.appendChild(d.createComment("")),!e.getElementsByTagName("*").length}),n.getElementsByClassName=Q.test(d.getElementsByClassName),n.getById=ue(function(e){return h.appendChild(e).id=b,!d.getElementsByName||!d.getElementsByName(b).length}),n.getById?(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){return e.getAttribute("id")===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n=t.getElementById(e);return n?[n]:[]}}):(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){var n="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),r.find.TAG=n.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},r.find.CLASS=n.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&g)return t.getElementsByClassName(e)},v=[],y=[],(n.qsa=Q.test(d.querySelectorAll))&&(ue(function(e){h.appendChild(e).innerHTML="
",e.querySelectorAll("[msallowcapture^='']").length&&y.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||y.push("\\["+M+"*(?:value|"+P+")"),e.querySelectorAll("[id~="+b+"-]").length||y.push("~="),e.querySelectorAll(":checked").length||y.push(":checked"),e.querySelectorAll("a#"+b+"+*").length||y.push(".#.+[+~]")}),ue(function(e){e.innerHTML="";var t=d.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&y.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&y.push(":enabled",":disabled"),h.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&y.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),y.push(",.*:")})),(n.matchesSelector=Q.test(m=h.matches||h.webkitMatchesSelector||h.mozMatchesSelector||h.oMatchesSelector||h.msMatchesSelector))&&ue(function(e){n.disconnectedMatch=m.call(e,"*"),m.call(e,"[s!='']:x"),v.push("!=",W)}),y=y.length&&new RegExp(y.join("|")),v=v.length&&new RegExp(v.join("|")),t=Q.test(h.compareDocumentPosition),x=t||Q.test(h.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return f=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r||(1&(r=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!n.sortDetached&&t.compareDocumentPosition(e)===r?e===d||e.ownerDocument===w&&x(w,e)?-1:t===d||t.ownerDocument===w&&x(w,t)?1:c?O(c,e)-O(c,t):0:4&r?-1:1)}:function(e,t){if(e===t)return f=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===d?-1:t===d?1:i?-1:o?1:c?O(c,e)-O(c,t):0;if(i===o)return ce(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?ce(a[r],s[r]):a[r]===w?-1:s[r]===w?1:0},d):d},oe.matches=function(e,t){return oe(e,null,null,t)},oe.matchesSelector=function(e,t){if((e.ownerDocument||e)!==d&&p(e),t=t.replace(z,"='$1']"),n.matchesSelector&&g&&!S[t+" "]&&(!v||!v.test(t))&&(!y||!y.test(t)))try{var r=m.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return oe(t,d,null,[e]).length>0},oe.contains=function(e,t){return(e.ownerDocument||e)!==d&&p(e),x(e,t)},oe.attr=function(e,t){(e.ownerDocument||e)!==d&&p(e);var i=r.attrHandle[t.toLowerCase()],o=i&&N.call(r.attrHandle,t.toLowerCase())?i(e,t,!g):void 0;return void 0!==o?o:n.attributes||!g?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null},oe.escape=function(e){return(e+"").replace(te,ne)},oe.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},oe.uniqueSort=function(e){var t,r=[],i=0,o=0;if(f=!n.detectDuplicates,c=!n.sortStable&&e.slice(0),e.sort(D),f){while(t=e[o++])t===e[o]&&(i=r.push(o));while(i--)e.splice(r[i],1)}return c=null,e},i=oe.getText=function(e){var t,n="",r=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=i(e)}else if(3===o||4===o)return e.nodeValue}else while(t=e[r++])n+=i(t);return n},(r=oe.selectors={cacheLength:50,createPseudo:se,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(Z,ee),e[3]=(e[3]||e[4]||e[5]||"").replace(Z,ee),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||oe.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&oe.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return V.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=a(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(Z,ee).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=E[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&E(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=oe.attr(r,e);return null==i?"!="===t:!t||(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i.replace($," ")+" ").indexOf(n)>-1:"|="===t&&(i===n||i.slice(0,n.length+1)===n+"-"))}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,f,p,d,h,g=o!==a?"nextSibling":"previousSibling",y=t.parentNode,v=s&&t.nodeName.toLowerCase(),m=!u&&!s,x=!1;if(y){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===v:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?y.firstChild:y.lastChild],a&&m){x=(d=(l=(c=(f=(p=y)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1])&&l[2],p=d&&y.childNodes[d];while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if(1===p.nodeType&&++x&&p===t){c[e]=[T,d,x];break}}else if(m&&(x=d=(l=(c=(f=(p=t)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1]),!1===x)while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===v:1===p.nodeType)&&++x&&(m&&((c=(f=p[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]=[T,x]),p===t))break;return(x-=i)===r||x%r==0&&x/r>=0}}},PSEUDO:function(e,t){var n,i=r.pseudos[e]||r.setFilters[e.toLowerCase()]||oe.error("unsupported pseudo: "+e);return i[b]?i(t):i.length>1?(n=[e,e,"",t],r.setFilters.hasOwnProperty(e.toLowerCase())?se(function(e,n){var r,o=i(e,t),a=o.length;while(a--)e[r=O(e,o[a])]=!(n[r]=o[a])}):function(e){return i(e,0,n)}):i}},pseudos:{not:se(function(e){var t=[],n=[],r=s(e.replace(B,"$1"));return r[b]?se(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),t[0]=null,!n.pop()}}),has:se(function(e){return function(t){return oe(e,t).length>0}}),contains:se(function(e){return e=e.replace(Z,ee),function(t){return(t.textContent||t.innerText||i(t)).indexOf(e)>-1}}),lang:se(function(e){return U.test(e||"")||oe.error("unsupported lang: "+e),e=e.replace(Z,ee).toLowerCase(),function(t){var n;do{if(n=g?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(n=n.toLowerCase())===e||0===n.indexOf(e+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===h},focus:function(e){return e===d.activeElement&&(!d.hasFocus||d.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:de(!1),disabled:de(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!r.pseudos.empty(e)},header:function(e){return Y.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:he(function(){return[0]}),last:he(function(e,t){return[t-1]}),eq:he(function(e,t,n){return[n<0?n+t:n]}),even:he(function(e,t){for(var n=0;n=0;)e.push(r);return e}),gt:he(function(e,t,n){for(var r=n<0?n+t:n;++r1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function be(e,t,n){for(var r=0,i=t.length;r-1&&(o[l]=!(a[l]=f))}}else v=we(v===a?v.splice(h,v.length):v),i?i(null,a,v,u):L.apply(a,v)})}function Ce(e){for(var t,n,i,o=e.length,a=r.relative[e[0].type],s=a||r.relative[" "],u=a?1:0,c=me(function(e){return e===t},s,!0),f=me(function(e){return O(t,e)>-1},s,!0),p=[function(e,n,r){var i=!a&&(r||n!==l)||((t=n).nodeType?c(e,n,r):f(e,n,r));return t=null,i}];u1&&xe(p),u>1&&ve(e.slice(0,u-1).concat({value:" "===e[u-2].type?"*":""})).replace(B,"$1"),n,u0,i=e.length>0,o=function(o,a,s,u,c){var f,h,y,v=0,m="0",x=o&&[],b=[],w=l,C=o||i&&r.find.TAG("*",c),E=T+=null==w?1:Math.random()||.1,k=C.length;for(c&&(l=a===d||a||c);m!==k&&null!=(f=C[m]);m++){if(i&&f){h=0,a||f.ownerDocument===d||(p(f),s=!g);while(y=e[h++])if(y(f,a||d,s)){u.push(f);break}c&&(T=E)}n&&((f=!y&&f)&&v--,o&&x.push(f))}if(v+=m,n&&m!==v){h=0;while(y=t[h++])y(x,b,a,s);if(o){if(v>0)while(m--)x[m]||b[m]||(b[m]=j.call(u));b=we(b)}L.apply(u,b),c&&!o&&b.length>0&&v+t.length>1&&oe.uniqueSort(u)}return c&&(T=E,l=w),x};return n?se(o):o}return s=oe.compile=function(e,t){var n,r=[],i=[],o=S[e+" "];if(!o){t||(t=a(e)),n=t.length;while(n--)(o=Ce(t[n]))[b]?r.push(o):i.push(o);(o=S(e,Ee(i,r))).selector=e}return o},u=oe.select=function(e,t,n,i){var o,u,l,c,f,p="function"==typeof e&&e,d=!i&&a(e=p.selector||e);if(n=n||[],1===d.length){if((u=d[0]=d[0].slice(0)).length>2&&"ID"===(l=u[0]).type&&9===t.nodeType&&g&&r.relative[u[1].type]){if(!(t=(r.find.ID(l.matches[0].replace(Z,ee),t)||[])[0]))return n;p&&(t=t.parentNode),e=e.slice(u.shift().value.length)}o=V.needsContext.test(e)?0:u.length;while(o--){if(l=u[o],r.relative[c=l.type])break;if((f=r.find[c])&&(i=f(l.matches[0].replace(Z,ee),K.test(u[0].type)&&ge(t.parentNode)||t))){if(u.splice(o,1),!(e=i.length&&ve(u)))return L.apply(n,i),n;break}}}return(p||s(e,d))(i,t,!g,n,!t||K.test(e)&&ge(t.parentNode)||t),n},n.sortStable=b.split("").sort(D).join("")===b,n.detectDuplicates=!!f,p(),n.sortDetached=ue(function(e){return 1&e.compareDocumentPosition(d.createElement("fieldset"))}),ue(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||le("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),n.attributes&&ue(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||le("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ue(function(e){return null==e.getAttribute("disabled")})||le(P,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),oe}(e);w.find=E,w.expr=E.selectors,w.expr[":"]=w.expr.pseudos,w.uniqueSort=w.unique=E.uniqueSort,w.text=E.getText,w.isXMLDoc=E.isXML,w.contains=E.contains,w.escapeSelector=E.escape;var k=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&w(e).is(n))break;r.push(e)}return r},S=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},D=w.expr.match.needsContext;function N(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var A=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,t,n){return g(t)?w.grep(e,function(e,r){return!!t.call(e,r,e)!==n}):t.nodeType?w.grep(e,function(e){return e===t!==n}):"string"!=typeof t?w.grep(e,function(e){return u.call(t,e)>-1!==n}):w.filter(t,e,n)}w.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?w.find.matchesSelector(r,e)?[r]:[]:w.find.matches(e,w.grep(t,function(e){return 1===e.nodeType}))},w.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(w(e).filter(function(){for(t=0;t1?w.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&D.test(e)?w(e):e||[],!1).length}});var q,L=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(w.fn.init=function(e,t,n){var i,o;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(i="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:L.exec(e))||!i[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(i[1]){if(t=t instanceof w?t[0]:t,w.merge(this,w.parseHTML(i[1],t&&t.nodeType?t.ownerDocument||t:r,!0)),A.test(i[1])&&w.isPlainObject(t))for(i in t)g(this[i])?this[i](t[i]):this.attr(i,t[i]);return this}return(o=r.getElementById(i[2]))&&(this[0]=o,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):g(e)?void 0!==n.ready?n.ready(e):e(w):w.makeArray(e,this)}).prototype=w.fn,q=w(r);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};w.fn.extend({has:function(e){var t=w(e,this),n=t.length;return this.filter(function(){for(var e=0;e-1:1===n.nodeType&&w.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?w.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?u.call(w(e),this[0]):u.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(w.uniqueSort(w.merge(this.get(),w(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}w.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return k(e,"parentNode")},parentsUntil:function(e,t,n){return k(e,"parentNode",n)},next:function(e){return P(e,"nextSibling")},prev:function(e){return P(e,"previousSibling")},nextAll:function(e){return k(e,"nextSibling")},prevAll:function(e){return k(e,"previousSibling")},nextUntil:function(e,t,n){return k(e,"nextSibling",n)},prevUntil:function(e,t,n){return k(e,"previousSibling",n)},siblings:function(e){return S((e.parentNode||{}).firstChild,e)},children:function(e){return S(e.firstChild)},contents:function(e){return N(e,"iframe")?e.contentDocument:(N(e,"template")&&(e=e.content||e),w.merge([],e.childNodes))}},function(e,t){w.fn[e]=function(n,r){var i=w.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=w.filter(r,i)),this.length>1&&(O[e]||w.uniqueSort(i),H.test(e)&&i.reverse()),this.pushStack(i)}});var M=/[^\x20\t\r\n\f]+/g;function R(e){var t={};return w.each(e.match(M)||[],function(e,n){t[n]=!0}),t}w.Callbacks=function(e){e="string"==typeof e?R(e):w.extend({},e);var t,n,r,i,o=[],a=[],s=-1,u=function(){for(i=i||e.once,r=t=!0;a.length;s=-1){n=a.shift();while(++s-1)o.splice(n,1),n<=s&&s--}),this},has:function(e){return e?w.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=a=[],o=n="",this},disabled:function(){return!o},lock:function(){return i=a=[],n||t||(o=n=""),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=[e,(n=n||[]).slice?n.slice():n],a.push(n),t||u()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l};function I(e){return e}function W(e){throw e}function $(e,t,n,r){var i;try{e&&g(i=e.promise)?i.call(e).done(t).fail(n):e&&g(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}w.extend({Deferred:function(t){var n=[["notify","progress",w.Callbacks("memory"),w.Callbacks("memory"),2],["resolve","done",w.Callbacks("once memory"),w.Callbacks("once memory"),0,"resolved"],["reject","fail",w.Callbacks("once memory"),w.Callbacks("once memory"),1,"rejected"]],r="pending",i={state:function(){return r},always:function(){return o.done(arguments).fail(arguments),this},"catch":function(e){return i.then(null,e)},pipe:function(){var e=arguments;return w.Deferred(function(t){w.each(n,function(n,r){var i=g(e[r[4]])&&e[r[4]];o[r[1]](function(){var e=i&&i.apply(this,arguments);e&&g(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[r[0]+"With"](this,i?[e]:arguments)})}),e=null}).promise()},then:function(t,r,i){var o=0;function a(t,n,r,i){return function(){var s=this,u=arguments,l=function(){var e,l;if(!(t=o&&(r!==W&&(s=void 0,u=[e]),n.rejectWith(s,u))}};t?c():(w.Deferred.getStackHook&&(c.stackTrace=w.Deferred.getStackHook()),e.setTimeout(c))}}return w.Deferred(function(e){n[0][3].add(a(0,e,g(i)?i:I,e.notifyWith)),n[1][3].add(a(0,e,g(t)?t:I)),n[2][3].add(a(0,e,g(r)?r:W))}).promise()},promise:function(e){return null!=e?w.extend(e,i):i}},o={};return w.each(n,function(e,t){var a=t[2],s=t[5];i[t[1]]=a.add,s&&a.add(function(){r=s},n[3-e][2].disable,n[3-e][3].disable,n[0][2].lock,n[0][3].lock),a.add(t[3].fire),o[t[0]]=function(){return o[t[0]+"With"](this===o?void 0:this,arguments),this},o[t[0]+"With"]=a.fireWith}),i.promise(o),t&&t.call(o,o),o},when:function(e){var t=arguments.length,n=t,r=Array(n),i=o.call(arguments),a=w.Deferred(),s=function(e){return function(n){r[e]=this,i[e]=arguments.length>1?o.call(arguments):n,--t||a.resolveWith(r,i)}};if(t<=1&&($(e,a.done(s(n)).resolve,a.reject,!t),"pending"===a.state()||g(i[n]&&i[n].then)))return a.then();while(n--)$(i[n],s(n),a.reject);return a.promise()}});var B=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;w.Deferred.exceptionHook=function(t,n){e.console&&e.console.warn&&t&&B.test(t.name)&&e.console.warn("jQuery.Deferred exception: "+t.message,t.stack,n)},w.readyException=function(t){e.setTimeout(function(){throw t})};var F=w.Deferred();w.fn.ready=function(e){return F.then(e)["catch"](function(e){w.readyException(e)}),this},w.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--w.readyWait:w.isReady)||(w.isReady=!0,!0!==e&&--w.readyWait>0||F.resolveWith(r,[w]))}}),w.ready.then=F.then;function _(){r.removeEventListener("DOMContentLoaded",_),e.removeEventListener("load",_),w.ready()}"complete"===r.readyState||"loading"!==r.readyState&&!r.documentElement.doScroll?e.setTimeout(w.ready):(r.addEventListener("DOMContentLoaded",_),e.addEventListener("load",_));var z=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===x(n)){i=!0;for(s in n)z(e,t,s,n[s],!0,o,a)}else if(void 0!==r&&(i=!0,g(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(w(e),n)})),t))for(;s1,null,!0)},removeData:function(e){return this.each(function(){K.remove(this,e)})}}),w.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=J.get(e,t),n&&(!r||Array.isArray(n)?r=J.access(e,t,w.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=w.queue(e,t),r=n.length,i=n.shift(),o=w._queueHooks(e,t),a=function(){w.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return J.get(e,n)||J.access(e,n,{empty:w.Callbacks("once memory").add(function(){J.remove(e,[t+"queue",n])})})}}),w.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length\x20\t\r\n\f]+)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};ge.optgroup=ge.option,ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td;function ye(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&N(e,t)?w.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n-1)i&&i.push(o);else if(l=w.contains(o.ownerDocument,o),a=ye(f.appendChild(o),"script"),l&&ve(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}!function(){var e=r.createDocumentFragment().appendChild(r.createElement("div")),t=r.createElement("input");t.setAttribute("type","radio"),t.setAttribute("checked","checked"),t.setAttribute("name","t"),e.appendChild(t),h.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,e.innerHTML="",h.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue}();var be=r.documentElement,we=/^key/,Te=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ce=/^([^.]*)(?:\.(.+)|)/;function Ee(){return!0}function ke(){return!1}function Se(){try{return r.activeElement}catch(e){}}function De(e,t,n,r,i,o){var a,s;if("object"==typeof t){"string"!=typeof n&&(r=r||n,n=void 0);for(s in t)De(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=ke;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return w().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=w.guid++)),e.each(function(){w.event.add(this,t,i,r,n)})}w.event={global:{},add:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.get(e);if(y){n.handler&&(n=(o=n).handler,i=o.selector),i&&w.find.matchesSelector(be,i),n.guid||(n.guid=w.guid++),(u=y.events)||(u=y.events={}),(a=y.handle)||(a=y.handle=function(t){return"undefined"!=typeof w&&w.event.triggered!==t.type?w.event.dispatch.apply(e,arguments):void 0}),l=(t=(t||"").match(M)||[""]).length;while(l--)d=g=(s=Ce.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=w.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=w.event.special[d]||{},c=w.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&w.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(e,r,h,a)||e.addEventListener&&e.addEventListener(d,a)),f.add&&(f.add.call(e,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),w.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.hasData(e)&&J.get(e);if(y&&(u=y.events)){l=(t=(t||"").match(M)||[""]).length;while(l--)if(s=Ce.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){f=w.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,y.handle)||w.removeEvent(e,d,y.handle),delete u[d])}else for(d in u)w.event.remove(e,d+t[l],n,r,!0);w.isEmptyObject(u)&&J.remove(e,"handle events")}},dispatch:function(e){var t=w.event.fix(e),n,r,i,o,a,s,u=new Array(arguments.length),l=(J.get(this,"events")||{})[t.type]||[],c=w.event.special[t.type]||{};for(u[0]=t,n=1;n=1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n-1:w.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u\x20\t\r\n\f]*)[^>]*)\/>/gi,Ae=/\s*$/g;function Le(e,t){return N(e,"table")&&N(11!==t.nodeType?t:t.firstChild,"tr")?w(e).children("tbody")[0]||e:e}function He(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Oe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Pe(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(J.hasData(e)&&(o=J.access(e),a=J.set(t,o),l=o.events)){delete a.handle,a.events={};for(i in l)for(n=0,r=l[i].length;n1&&"string"==typeof y&&!h.checkClone&&je.test(y))return e.each(function(i){var o=e.eq(i);v&&(t[0]=y.call(this,i,o.html())),Re(o,t,n,r)});if(p&&(i=xe(t,e[0].ownerDocument,!1,e,r),o=i.firstChild,1===i.childNodes.length&&(i=o),o||r)){for(u=(s=w.map(ye(i,"script"),He)).length;f")},clone:function(e,t,n){var r,i,o,a,s=e.cloneNode(!0),u=w.contains(e.ownerDocument,e);if(!(h.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||w.isXMLDoc(e)))for(a=ye(s),r=0,i=(o=ye(e)).length;r0&&ve(a,!u&&ye(e,"script")),s},cleanData:function(e){for(var t,n,r,i=w.event.special,o=0;void 0!==(n=e[o]);o++)if(Y(n)){if(t=n[J.expando]){if(t.events)for(r in t.events)i[r]?w.event.remove(n,r):w.removeEvent(n,r,t.handle);n[J.expando]=void 0}n[K.expando]&&(n[K.expando]=void 0)}}}),w.fn.extend({detach:function(e){return Ie(this,e,!0)},remove:function(e){return Ie(this,e)},text:function(e){return z(this,function(e){return void 0===e?w.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Re(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Le(this,e).appendChild(e)})},prepend:function(){return Re(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Le(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(w.cleanData(ye(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return w.clone(this,e,t)})},html:function(e){return z(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Ae.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=w.htmlPrefilter(e);try{for(;n=0&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))),u}function et(e,t,n){var r=$e(e),i=Fe(e,t,r),o="border-box"===w.css(e,"boxSizing",!1,r),a=o;if(We.test(i)){if(!n)return i;i="auto"}return a=a&&(h.boxSizingReliable()||i===e.style[t]),("auto"===i||!parseFloat(i)&&"inline"===w.css(e,"display",!1,r))&&(i=e["offset"+t[0].toUpperCase()+t.slice(1)],a=!0),(i=parseFloat(i)||0)+Ze(e,t,n||(o?"border":"content"),a,r,i)+"px"}w.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Fe(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=G(t),u=Xe.test(t),l=e.style;if(u||(t=Je(s)),a=w.cssHooks[t]||w.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"==(o=typeof n)&&(i=ie.exec(n))&&i[1]&&(n=ue(e,t,i),o="number"),null!=n&&n===n&&("number"===o&&(n+=i&&i[3]||(w.cssNumber[s]?"":"px")),h.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=G(t);return Xe.test(t)||(t=Je(s)),(a=w.cssHooks[t]||w.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Fe(e,t,r)),"normal"===i&&t in Ve&&(i=Ve[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),w.each(["height","width"],function(e,t){w.cssHooks[t]={get:function(e,n,r){if(n)return!ze.test(w.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?et(e,t,r):se(e,Ue,function(){return et(e,t,r)})},set:function(e,n,r){var i,o=$e(e),a="border-box"===w.css(e,"boxSizing",!1,o),s=r&&Ze(e,t,r,a,o);return a&&h.scrollboxSize()===o.position&&(s-=Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-parseFloat(o[t])-Ze(e,t,"border",!1,o)-.5)),s&&(i=ie.exec(n))&&"px"!==(i[3]||"px")&&(e.style[t]=n,n=w.css(e,t)),Ke(e,n,s)}}}),w.cssHooks.marginLeft=_e(h.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Fe(e,"marginLeft"))||e.getBoundingClientRect().left-se(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),w.each({margin:"",padding:"",border:"Width"},function(e,t){w.cssHooks[e+t]={expand:function(n){for(var r=0,i={},o="string"==typeof n?n.split(" "):[n];r<4;r++)i[e+oe[r]+t]=o[r]||o[r-2]||o[0];return i}},"margin"!==e&&(w.cssHooks[e+t].set=Ke)}),w.fn.extend({css:function(e,t){return z(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=$e(e),i=t.length;a1)}});function tt(e,t,n,r,i){return new tt.prototype.init(e,t,n,r,i)}w.Tween=tt,tt.prototype={constructor:tt,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||w.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(w.cssNumber[n]?"":"px")},cur:function(){var e=tt.propHooks[this.prop];return e&&e.get?e.get(this):tt.propHooks._default.get(this)},run:function(e){var t,n=tt.propHooks[this.prop];return this.options.duration?this.pos=t=w.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):tt.propHooks._default.set(this),this}},tt.prototype.init.prototype=tt.prototype,tt.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=w.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){w.fx.step[e.prop]?w.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[w.cssProps[e.prop]]&&!w.cssHooks[e.prop]?e.elem[e.prop]=e.now:w.style(e.elem,e.prop,e.now+e.unit)}}},tt.propHooks.scrollTop=tt.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},w.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},w.fx=tt.prototype.init,w.fx.step={};var nt,rt,it=/^(?:toggle|show|hide)$/,ot=/queueHooks$/;function at(){rt&&(!1===r.hidden&&e.requestAnimationFrame?e.requestAnimationFrame(at):e.setTimeout(at,w.fx.interval),w.fx.tick())}function st(){return e.setTimeout(function(){nt=void 0}),nt=Date.now()}function ut(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=oe[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function lt(e,t,n){for(var r,i=(pt.tweeners[t]||[]).concat(pt.tweeners["*"]),o=0,a=i.length;o1)},removeAttr:function(e){return this.each(function(){w.removeAttr(this,e)})}}),w.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?w.prop(e,t,n):(1===o&&w.isXMLDoc(e)||(i=w.attrHooks[t.toLowerCase()]||(w.expr.match.bool.test(t)?dt:void 0)),void 0!==n?null===n?void w.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=w.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!h.radioValue&&"radio"===t&&N(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(M);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),dt={set:function(e,t,n){return!1===t?w.removeAttr(e,n):e.setAttribute(n,n),n}},w.each(w.expr.match.bool.source.match(/\w+/g),function(e,t){var n=ht[t]||w.find.attr;ht[t]=function(e,t,r){var i,o,a=t.toLowerCase();return r||(o=ht[a],ht[a]=i,i=null!=n(e,t,r)?a:null,ht[a]=o),i}});var gt=/^(?:input|select|textarea|button)$/i,yt=/^(?:a|area)$/i;w.fn.extend({prop:function(e,t){return z(this,w.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[w.propFix[e]||e]})}}),w.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&w.isXMLDoc(e)||(t=w.propFix[t]||t,i=w.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=w.find.attr(e,"tabindex");return t?parseInt(t,10):gt.test(e.nodeName)||yt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),h.optSelected||(w.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),w.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){w.propFix[this.toLowerCase()]=this});function vt(e){return(e.match(M)||[]).join(" ")}function mt(e){return e.getAttribute&&e.getAttribute("class")||""}function xt(e){return Array.isArray(e)?e:"string"==typeof e?e.match(M)||[]:[]}w.fn.extend({addClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).addClass(e.call(this,t,mt(this)))});if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=t[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},removeClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).removeClass(e.call(this,t,mt(this)))});if(!arguments.length)return this.attr("class","");if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=t[a++])while(r.indexOf(" "+o+" ")>-1)r=r.replace(" "+o+" "," ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},toggleClass:function(e,t){var n=typeof e,r="string"===n||Array.isArray(e);return"boolean"==typeof t&&r?t?this.addClass(e):this.removeClass(e):g(e)?this.each(function(n){w(this).toggleClass(e.call(this,n,mt(this),t),t)}):this.each(function(){var t,i,o,a;if(r){i=0,o=w(this),a=xt(e);while(t=a[i++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else void 0!==e&&"boolean"!==n||((t=mt(this))&&J.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||!1===e?"":J.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&(" "+vt(mt(n))+" ").indexOf(t)>-1)return!0;return!1}});var bt=/\r/g;w.fn.extend({val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=g(e),this.each(function(n){var i;1===this.nodeType&&(null==(i=r?e.call(this,n,w(this).val()):e)?i="":"number"==typeof i?i+="":Array.isArray(i)&&(i=w.map(i,function(e){return null==e?"":e+""})),(t=w.valHooks[this.type]||w.valHooks[this.nodeName.toLowerCase()])&&"set"in t&&void 0!==t.set(this,i,"value")||(this.value=i))});if(i)return(t=w.valHooks[i.type]||w.valHooks[i.nodeName.toLowerCase()])&&"get"in t&&void 0!==(n=t.get(i,"value"))?n:"string"==typeof(n=i.value)?n.replace(bt,""):null==n?"":n}}}),w.extend({valHooks:{option:{get:function(e){var t=w.find.attr(e,"value");return null!=t?t:vt(w.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r-1)&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),w.each(["radio","checkbox"],function(){w.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=w.inArray(w(e).val(),t)>-1}},h.checkOn||(w.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),h.focusin="onfocusin"in e;var wt=/^(?:focusinfocus|focusoutblur)$/,Tt=function(e){e.stopPropagation()};w.extend(w.event,{trigger:function(t,n,i,o){var a,s,u,l,c,p,d,h,v=[i||r],m=f.call(t,"type")?t.type:t,x=f.call(t,"namespace")?t.namespace.split("."):[];if(s=h=u=i=i||r,3!==i.nodeType&&8!==i.nodeType&&!wt.test(m+w.event.triggered)&&(m.indexOf(".")>-1&&(m=(x=m.split(".")).shift(),x.sort()),c=m.indexOf(":")<0&&"on"+m,t=t[w.expando]?t:new w.Event(m,"object"==typeof t&&t),t.isTrigger=o?2:3,t.namespace=x.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+x.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=i),n=null==n?[t]:w.makeArray(n,[t]),d=w.event.special[m]||{},o||!d.trigger||!1!==d.trigger.apply(i,n))){if(!o&&!d.noBubble&&!y(i)){for(l=d.delegateType||m,wt.test(l+m)||(s=s.parentNode);s;s=s.parentNode)v.push(s),u=s;u===(i.ownerDocument||r)&&v.push(u.defaultView||u.parentWindow||e)}a=0;while((s=v[a++])&&!t.isPropagationStopped())h=s,t.type=a>1?l:d.bindType||m,(p=(J.get(s,"events")||{})[t.type]&&J.get(s,"handle"))&&p.apply(s,n),(p=c&&s[c])&&p.apply&&Y(s)&&(t.result=p.apply(s,n),!1===t.result&&t.preventDefault());return t.type=m,o||t.isDefaultPrevented()||d._default&&!1!==d._default.apply(v.pop(),n)||!Y(i)||c&&g(i[m])&&!y(i)&&((u=i[c])&&(i[c]=null),w.event.triggered=m,t.isPropagationStopped()&&h.addEventListener(m,Tt),i[m](),t.isPropagationStopped()&&h.removeEventListener(m,Tt),w.event.triggered=void 0,u&&(i[c]=u)),t.result}},simulate:function(e,t,n){var r=w.extend(new w.Event,n,{type:e,isSimulated:!0});w.event.trigger(r,null,t)}}),w.fn.extend({trigger:function(e,t){return this.each(function(){w.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return w.event.trigger(e,t,n,!0)}}),h.focusin||w.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){w.event.simulate(t,e.target,w.event.fix(e))};w.event.special[t]={setup:function(){var r=this.ownerDocument||this,i=J.access(r,t);i||r.addEventListener(e,n,!0),J.access(r,t,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this,i=J.access(r,t)-1;i?J.access(r,t,i):(r.removeEventListener(e,n,!0),J.remove(r,t))}}});var Ct=e.location,Et=Date.now(),kt=/\?/;w.parseXML=function(t){var n;if(!t||"string"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,"text/xml")}catch(e){n=void 0}return n&&!n.getElementsByTagName("parsererror").length||w.error("Invalid XML: "+t),n};var St=/\[\]$/,Dt=/\r?\n/g,Nt=/^(?:submit|button|image|reset|file)$/i,At=/^(?:input|select|textarea|keygen)/i;function jt(e,t,n,r){var i;if(Array.isArray(t))w.each(t,function(t,i){n||St.test(e)?r(e,i):jt(e+"["+("object"==typeof i&&null!=i?t:"")+"]",i,n,r)});else if(n||"object"!==x(t))r(e,t);else for(i in t)jt(e+"["+i+"]",t[i],n,r)}w.param=function(e,t){var n,r=[],i=function(e,t){var n=g(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(Array.isArray(e)||e.jquery&&!w.isPlainObject(e))w.each(e,function(){i(this.name,this.value)});else for(n in e)jt(n,e[n],t,i);return r.join("&")},w.fn.extend({serialize:function(){return w.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=w.prop(this,"elements");return e?w.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!w(this).is(":disabled")&&At.test(this.nodeName)&&!Nt.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=w(this).val();return null==n?null:Array.isArray(n)?w.map(n,function(e){return{name:t.name,value:e.replace(Dt,"\r\n")}}):{name:t.name,value:n.replace(Dt,"\r\n")}}).get()}});var qt=/%20/g,Lt=/#.*$/,Ht=/([?&])_=[^&]*/,Ot=/^(.*?):[ \t]*([^\r\n]*)$/gm,Pt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Mt=/^(?:GET|HEAD)$/,Rt=/^\/\//,It={},Wt={},$t="*/".concat("*"),Bt=r.createElement("a");Bt.href=Ct.href;function Ft(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(M)||[];if(g(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function _t(e,t,n,r){var i={},o=e===Wt;function a(s){var u;return i[s]=!0,w.each(e[s]||[],function(e,s){var l=s(t,n,r);return"string"!=typeof l||o||i[l]?o?!(u=l):void 0:(t.dataTypes.unshift(l),a(l),!1)}),u}return a(t.dataTypes[0])||!i["*"]&&a("*")}function zt(e,t){var n,r,i=w.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&w.extend(!0,e,r),e}function Xt(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}function Ut(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}w.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ct.href,type:"GET",isLocal:Pt.test(Ct.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":$t,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":w.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?zt(zt(e,w.ajaxSettings),t):zt(w.ajaxSettings,e)},ajaxPrefilter:Ft(It),ajaxTransport:Ft(Wt),ajax:function(t,n){"object"==typeof t&&(n=t,t=void 0),n=n||{};var i,o,a,s,u,l,c,f,p,d,h=w.ajaxSetup({},n),g=h.context||h,y=h.context&&(g.nodeType||g.jquery)?w(g):w.event,v=w.Deferred(),m=w.Callbacks("once memory"),x=h.statusCode||{},b={},T={},C="canceled",E={readyState:0,getResponseHeader:function(e){var t;if(c){if(!s){s={};while(t=Ot.exec(a))s[t[1].toLowerCase()]=t[2]}t=s[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return c?a:null},setRequestHeader:function(e,t){return null==c&&(e=T[e.toLowerCase()]=T[e.toLowerCase()]||e,b[e]=t),this},overrideMimeType:function(e){return null==c&&(h.mimeType=e),this},statusCode:function(e){var t;if(e)if(c)E.always(e[E.status]);else for(t in e)x[t]=[x[t],e[t]];return this},abort:function(e){var t=e||C;return i&&i.abort(t),k(0,t),this}};if(v.promise(E),h.url=((t||h.url||Ct.href)+"").replace(Rt,Ct.protocol+"//"),h.type=n.method||n.type||h.method||h.type,h.dataTypes=(h.dataType||"*").toLowerCase().match(M)||[""],null==h.crossDomain){l=r.createElement("a");try{l.href=h.url,l.href=l.href,h.crossDomain=Bt.protocol+"//"+Bt.host!=l.protocol+"//"+l.host}catch(e){h.crossDomain=!0}}if(h.data&&h.processData&&"string"!=typeof h.data&&(h.data=w.param(h.data,h.traditional)),_t(It,h,n,E),c)return E;(f=w.event&&h.global)&&0==w.active++&&w.event.trigger("ajaxStart"),h.type=h.type.toUpperCase(),h.hasContent=!Mt.test(h.type),o=h.url.replace(Lt,""),h.hasContent?h.data&&h.processData&&0===(h.contentType||"").indexOf("application/x-www-form-urlencoded")&&(h.data=h.data.replace(qt,"+")):(d=h.url.slice(o.length),h.data&&(h.processData||"string"==typeof h.data)&&(o+=(kt.test(o)?"&":"?")+h.data,delete h.data),!1===h.cache&&(o=o.replace(Ht,"$1"),d=(kt.test(o)?"&":"?")+"_="+Et+++d),h.url=o+d),h.ifModified&&(w.lastModified[o]&&E.setRequestHeader("If-Modified-Since",w.lastModified[o]),w.etag[o]&&E.setRequestHeader("If-None-Match",w.etag[o])),(h.data&&h.hasContent&&!1!==h.contentType||n.contentType)&&E.setRequestHeader("Content-Type",h.contentType),E.setRequestHeader("Accept",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+("*"!==h.dataTypes[0]?", "+$t+"; q=0.01":""):h.accepts["*"]);for(p in h.headers)E.setRequestHeader(p,h.headers[p]);if(h.beforeSend&&(!1===h.beforeSend.call(g,E,h)||c))return E.abort();if(C="abort",m.add(h.complete),E.done(h.success),E.fail(h.error),i=_t(Wt,h,n,E)){if(E.readyState=1,f&&y.trigger("ajaxSend",[E,h]),c)return E;h.async&&h.timeout>0&&(u=e.setTimeout(function(){E.abort("timeout")},h.timeout));try{c=!1,i.send(b,k)}catch(e){if(c)throw e;k(-1,e)}}else k(-1,"No Transport");function k(t,n,r,s){var l,p,d,b,T,C=n;c||(c=!0,u&&e.clearTimeout(u),i=void 0,a=s||"",E.readyState=t>0?4:0,l=t>=200&&t<300||304===t,r&&(b=Xt(h,E,r)),b=Ut(h,b,E,l),l?(h.ifModified&&((T=E.getResponseHeader("Last-Modified"))&&(w.lastModified[o]=T),(T=E.getResponseHeader("etag"))&&(w.etag[o]=T)),204===t||"HEAD"===h.type?C="nocontent":304===t?C="notmodified":(C=b.state,p=b.data,l=!(d=b.error))):(d=C,!t&&C||(C="error",t<0&&(t=0))),E.status=t,E.statusText=(n||C)+"",l?v.resolveWith(g,[p,C,E]):v.rejectWith(g,[E,C,d]),E.statusCode(x),x=void 0,f&&y.trigger(l?"ajaxSuccess":"ajaxError",[E,h,l?p:d]),m.fireWith(g,[E,C]),f&&(y.trigger("ajaxComplete",[E,h]),--w.active||w.event.trigger("ajaxStop")))}return E},getJSON:function(e,t,n){return w.get(e,t,n,"json")},getScript:function(e,t){return w.get(e,void 0,t,"script")}}),w.each(["get","post"],function(e,t){w[t]=function(e,n,r,i){return g(n)&&(i=i||r,r=n,n=void 0),w.ajax(w.extend({url:e,type:t,dataType:i,data:n,success:r},w.isPlainObject(e)&&e))}}),w._evalUrl=function(e){return w.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},w.fn.extend({wrapAll:function(e){var t;return this[0]&&(g(e)&&(e=e.call(this[0])),t=w(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return g(e)?this.each(function(t){w(this).wrapInner(e.call(this,t))}):this.each(function(){var t=w(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=g(e);return this.each(function(n){w(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not("body").each(function(){w(this).replaceWith(this.childNodes)}),this}}),w.expr.pseudos.hidden=function(e){return!w.expr.pseudos.visible(e)},w.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},w.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var Vt={0:200,1223:204},Gt=w.ajaxSettings.xhr();h.cors=!!Gt&&"withCredentials"in Gt,h.ajax=Gt=!!Gt,w.ajaxTransport(function(t){var n,r;if(h.cors||Gt&&!t.crossDomain)return{send:function(i,o){var a,s=t.xhr();if(s.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(a in t.xhrFields)s[a]=t.xhrFields[a];t.mimeType&&s.overrideMimeType&&s.overrideMimeType(t.mimeType),t.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");for(a in i)s.setRequestHeader(a,i[a]);n=function(e){return function(){n&&(n=r=s.onload=s.onerror=s.onabort=s.ontimeout=s.onreadystatechange=null,"abort"===e?s.abort():"error"===e?"number"!=typeof s.status?o(0,"error"):o(s.status,s.statusText):o(Vt[s.status]||s.status,s.statusText,"text"!==(s.responseType||"text")||"string"!=typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=n(),r=s.onerror=s.ontimeout=n("error"),void 0!==s.onabort?s.onabort=r:s.onreadystatechange=function(){4===s.readyState&&e.setTimeout(function(){n&&r()})},n=n("abort");try{s.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}},abort:function(){n&&n()}}}),w.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),w.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return w.globalEval(e),e}}}),w.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),w.ajaxTransport("script",function(e){if(e.crossDomain){var t,n;return{send:function(i,o){t=w(" + + + + + + + {% include 'ui.html' %} +{# client overview #} +
{% include 'print_overview.html' %}
+ +{# client detailedview #} + {% set printview = 'detailedview' %} + {% for color_block in color_blocks %} + {% set outer_loop = loop %} +
{% include 'print_detail.html' %}
+ {% endfor %} + +{# operator overview #} +
{% include 'operator_overview.html' %}
+ +{# operator detailed view #} + {% include 'operator_detailedview.html' %} + +{# custom pages #} +
{% include 'custom-page.html' %}
+ + diff --git a/extensions/fablabchemnitz/inkstitch/bin/print/templates/operator_detailedview.html b/extensions/fablabchemnitz/inkstitch/bin/print/templates/operator_detailedview.html new file mode 100644 index 00000000..c74a7a72 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/print/templates/operator_detailedview.html @@ -0,0 +1,75 @@ + + +
+

+ ## +

+

+ {{ svg_overview|replace("

  • ", "")|replace("
  • ", "")|safe }} +

    +

    + {{ _('Unique Colors') }}: {{ job.num_colors }} + {{ _('Color Blocks') }}: {{ job.num_color_blocks }} +

    +

    + {{ _('Design box size') }}: {{ "%0.1fmm X %0.1fmm" | format(*job.dimensions) }} + + {{ _('Total stitch count') }}: {{job.num_stitches }} + {{ ('Estimated time') }}: +

    +

    + {{ _('Total stops') }}: {{ job.num_stops }} + {{ _('Total trims') }}: {{ job.num_trims }} +

    +

    + +

    +
    + + {% for color_block in color_blocks %} + +
    +

    + + + + #{{ loop.index }} + + +

    +

    + {{ color_block.svg_preview|replace("

  • ", "")|replace("
  • ", "")|safe }} +

    +

    + {{ color_block.color.name }} + {{ color_block.color.rgb }} + {{ color_block.color.manufacturer }} {{ "#" + color_block.color.number if color_block.color.number }} +

    +

    + + {{ _('# stitches') }}: {{ color_block.num_stitches }} + {{ _('estimated time') }}: +

    +

    + {{ _('trims') }}: {{ color_block.num_trims }} + {{ _('stop after?') }}: {{ _("yes") if color_block.stop_after else _("no") }} + +

    +

    + +

    +
    + {% endfor %} diff --git a/extensions/fablabchemnitz/inkstitch/bin/print/templates/operator_overview.html b/extensions/fablabchemnitz/inkstitch/bin/print/templates/operator_overview.html new file mode 100644 index 00000000..71c5ea2e --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/print/templates/operator_overview.html @@ -0,0 +1,36 @@ +
    + {% include 'headline.html' %} +
    +
    +
    +

    {{ _('Unique Colors') }}:{{ job.num_colors }}

    +

    {{ _('Color Blocks') }}:{{ job.num_color_blocks }}

    +

    {{ _('Total stops') }}:{{ job.num_stops }}

    +

    {{ _('Total trims') }}:{{ job.num_trims }}

    +
    +
    +
    +
    +

    {{ _('Design box size') }}:{{ "%0.1fmm X %0.1fmm" | format(*job.dimensions) }}

    +

    {{ _('Total stitch count') }}:{{job.num_stitches }}

    +

    {{ _('Total thread used') }}:{{job.total_thread_used }}

    +
    +
    +
    +
    +

    {{ _('Job estimated time') }}:

    +

    +
    +
    +
    +
    +
    +
    + {{ svg_overview|replace("
  • ", "")|replace("
  • ", "")|safe }} + {% with %} + {% set realistic_id='realistic-operator-overview' %} + {% include 'ui_svg_action_buttons.html' with context %} + {% endwith %} +
    +
    + {% include 'footer.html' %} diff --git a/extensions/fablabchemnitz/inkstitch/bin/print/templates/print_detail.html b/extensions/fablabchemnitz/inkstitch/bin/print/templates/print_detail.html new file mode 100644 index 00000000..f076fc04 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/print/templates/print_detail.html @@ -0,0 +1,30 @@ +
    + {% include 'headline.html' %} +
    +
    +
    +

    {{ _('COLOR') }}:{{ color_block.color.thread_name }}

    +
    +
    +
    +
    +

    {{ _('Estimated time') }}:

    +

    +
    +
    +
    +
    +
    +
    + {{color_block.svg_preview|replace("
  • ", "")|replace("
  • ", "")|safe}} + {% with %} + {% set loop_index=loop.index0 %} + {% include 'ui_svg_action_buttons.html' with context %} + {% endwith %} +
    +
    + {% include 'color_swatch.html' %} +
    +
    + + {% include 'footer.html' %} diff --git a/extensions/fablabchemnitz/inkstitch/bin/print/templates/print_overview.html b/extensions/fablabchemnitz/inkstitch/bin/print/templates/print_overview.html new file mode 100644 index 00000000..34478438 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/print/templates/print_overview.html @@ -0,0 +1,45 @@ +
    + {% include 'headline.html' %} +
    +
    +
    +

    {{ _('Unique Colors') }}:{{ job.num_colors }}

    +

    {{ _('Color Blocks') }}:{{ job.num_color_blocks }}

    +

    {{ _('Total stops') }}:{{ job.num_stops }}

    +

    {{ _('Total trims') }}:{{ job.num_trims }}

    +
    +
    +
    +
    +

    {{ _('Design box size') }}:{{ "%0.1fmm X %0.1fmm" | format(*job.dimensions) }}

    +

    {{ _('Total stitch count') }}:{{job.num_stitches }}

    +

    {{ _('Total thread used') }}:{{job.estimated_thread }}

    +
    +
    +
    +
    +

    {{ _('Job estimated time') }}:

    +

    +
    +
    +
    +
    +
    +
    + {{ svg_overview|replace("
  • ", "")|replace("
  • ", "")|safe }} + {% with %} + {% set realistic_id='realistic-client-overview' %} + {% include 'ui_svg_action_buttons.html' with context %} + {% endwith %} +
    + +
    + {% for color_block in color_blocks %} + {% include 'color_swatch.html' %} + {% endfor %} + +
    +
    {{ _('Client Signature') }}
    +
    + + {% include 'footer.html' %} diff --git a/extensions/fablabchemnitz/inkstitch/bin/print/templates/ui.html b/extensions/fablabchemnitz/inkstitch/bin/print/templates/ui.html new file mode 100644 index 00000000..57c17205 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/print/templates/ui.html @@ -0,0 +1,172 @@ +
    +

    {{ _('Ink/Stitch Print Preview') }}

    +
    + + + + +
    +
    + {{ _('âš  lost connection to Ink/Stitch') }} +
    +
    + +
    +

    X

    +

    {{ _('Settings') }}

    + +
    + + + + +
    + +
    + +
    +
    + {{ _('Page Setup') }} +

    + + +

    +
    +
    + {{ _('Print Layouts') }} +

    + + +

    +

    + + +

    +

    + + +

    +

    + + +

    +

    {{ _('Thumbnail size') }}: + + 15mm +

    +

    + + +

    +
    + +
    + +
    +
    + {{ _('Logo') }} + +
    + + +
    + +
    + {{ _('Estimated Time') }} +
    + {{ _('Machine Settings') }} +

    + + +

    +
    +
    + {{ _('Time Factors') }} +

    + + +

    +

    + +

    +

    + +

    +
    +
    + {{ _('Display Time On') }} +
    +

    +

    +

    +

    +
    +
    + +
    + +
    + {{ _('Design') }} +

    + +

    +
    + +
    + +
    + + + diff --git a/extensions/fablabchemnitz/inkstitch/bin/print/templates/ui_svg_action_buttons.html b/extensions/fablabchemnitz/inkstitch/bin/print/templates/ui_svg_action_buttons.html new file mode 100644 index 00000000..6b199383 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/print/templates/ui_svg_action_buttons.html @@ -0,0 +1,15 @@ +
    {{ _('Scale') }} %
    +
    + + + + +
    diff --git a/extensions/fablabchemnitz/inkstitch/bin/pyexpat.pyd b/extensions/fablabchemnitz/inkstitch/bin/pyexpat.pyd new file mode 100644 index 00000000..ac732705 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/pyexpat.pyd differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/python27.dll b/extensions/fablabchemnitz/inkstitch/bin/python27.dll new file mode 100644 index 00000000..a26b60ce Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/python27.dll differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/pythoncom27.dll b/extensions/fablabchemnitz/inkstitch/bin/pythoncom27.dll new file mode 100644 index 00000000..db39b960 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/pythoncom27.dll differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/pywintypes27.dll b/extensions/fablabchemnitz/inkstitch/bin/pywintypes27.dll new file mode 100644 index 00000000..7eab3cc7 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/pywintypes27.dll differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/select.pyd b/extensions/fablabchemnitz/inkstitch/bin/select.pyd new file mode 100644 index 00000000..b7461441 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/select.pyd differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/shapely.speedups._speedups.pyd b/extensions/fablabchemnitz/inkstitch/bin/shapely.speedups._speedups.pyd new file mode 100644 index 00000000..8db9e8e9 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/shapely.speedups._speedups.pyd differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/auto.tcl b/extensions/fablabchemnitz/inkstitch/bin/tcl/auto.tcl new file mode 100644 index 00000000..ec680de2 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/auto.tcl @@ -0,0 +1,618 @@ +# auto.tcl -- +# +# utility procs formerly in init.tcl dealing with auto execution +# of commands and can be auto loaded themselves. +# +# Copyright (c) 1991-1993 The Regents of the University of California. +# Copyright (c) 1994-1998 Sun Microsystems, Inc. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. +# + +# auto_reset -- +# +# Destroy all cached information for auto-loading and auto-execution, +# so that the information gets recomputed the next time it's needed. +# Also delete any commands that are listed in the auto-load index. +# +# Arguments: +# None. + +proc auto_reset {} { + global auto_execs auto_index auto_path + if {[array exists auto_index]} { + foreach cmdName [array names auto_index] { + set fqcn [namespace which $cmdName] + if {$fqcn eq ""} {continue} + rename $fqcn {} + } + } + unset -nocomplain auto_execs auto_index ::tcl::auto_oldpath + if {[catch {llength $auto_path}]} { + set auto_path [list [info library]] + } else { + if {[info library] ni $auto_path} { + lappend auto_path [info library] + } + } +} + +# tcl_findLibrary -- +# +# This is a utility for extensions that searches for a library directory +# using a canonical searching algorithm. A side effect is to source +# the initialization script and set a global library variable. +# +# Arguments: +# basename Prefix of the directory name, (e.g., "tk") +# version Version number of the package, (e.g., "8.0") +# patch Patchlevel of the package, (e.g., "8.0.3") +# initScript Initialization script to source (e.g., tk.tcl) +# enVarName environment variable to honor (e.g., TK_LIBRARY) +# varName Global variable to set when done (e.g., tk_library) + +proc tcl_findLibrary {basename version patch initScript enVarName varName} { + upvar #0 $varName the_library + global auto_path env tcl_platform + + set dirs {} + set errors {} + + # The C application may have hardwired a path, which we honor + + if {[info exists the_library] && $the_library ne ""} { + lappend dirs $the_library + } else { + + # Do the canonical search + + # 1. From an environment variable, if it exists. + # Placing this first gives the end-user ultimate control + # to work-around any bugs, or to customize. + + if {[info exists env($enVarName)]} { + lappend dirs $env($enVarName) + } + + # 2. In the package script directory registered within + # the configuration of the package itself. + + if {[catch { + ::${basename}::pkgconfig get scriptdir,runtime + } value] == 0} { + lappend dirs $value + } + + # 3. Relative to auto_path directories. This checks relative to the + # Tcl library as well as allowing loading of libraries added to the + # auto_path that is not relative to the core library or binary paths. + foreach d $auto_path { + lappend dirs [file join $d $basename$version] + if {$tcl_platform(platform) eq "unix" + && $tcl_platform(os) eq "Darwin"} { + # 4. On MacOSX, check the Resources/Scripts subdir too + lappend dirs [file join $d $basename$version Resources Scripts] + } + } + + # 3. Various locations relative to the executable + # ../lib/foo1.0 (From bin directory in install hierarchy) + # ../../lib/foo1.0 (From bin/arch directory in install hierarchy) + # ../library (From unix directory in build hierarchy) + # + # Remaining locations are out of date (when relevant, they ought + # to be covered by the $::auto_path seach above) and disabled. + # + # ../../library (From unix/arch directory in build hierarchy) + # ../../foo1.0.1/library + # (From unix directory in parallel build hierarchy) + # ../../../foo1.0.1/library + # (From unix/arch directory in parallel build hierarchy) + + set parentDir [file dirname [file dirname [info nameofexecutable]]] + set grandParentDir [file dirname $parentDir] + lappend dirs [file join $parentDir lib $basename$version] + lappend dirs [file join $grandParentDir lib $basename$version] + lappend dirs [file join $parentDir library] + if {0} { + lappend dirs [file join $grandParentDir library] + lappend dirs [file join $grandParentDir $basename$patch library] + lappend dirs [file join [file dirname $grandParentDir] \ + $basename$patch library] + } + } + # uniquify $dirs in order + array set seen {} + foreach i $dirs { + # Take note that the [file normalize] below has been noted to + # cause difficulties for the freewrap utility. See Bug 1072136. + # Until freewrap resolves the matter, one might work around the + # problem by disabling that branch. + if {[interp issafe]} { + set norm $i + } else { + set norm [file normalize $i] + } + if {[info exists seen($norm)]} { continue } + set seen($norm) "" + lappend uniqdirs $i + } + set dirs $uniqdirs + foreach i $dirs { + set the_library $i + set file [file join $i $initScript] + + # source everything when in a safe interpreter because + # we have a source command, but no file exists command + + if {[interp issafe] || [file exists $file]} { + if {![catch {uplevel #0 [list source $file]} msg opts]} { + return + } else { + append errors "$file: $msg\n" + append errors [dict get $opts -errorinfo]\n + } + } + } + unset -nocomplain the_library + set msg "Can't find a usable $initScript in the following directories: \n" + append msg " $dirs\n\n" + append msg "$errors\n\n" + append msg "This probably means that $basename wasn't installed properly.\n" + error $msg +} + + +# ---------------------------------------------------------------------- +# auto_mkindex +# ---------------------------------------------------------------------- +# The following procedures are used to generate the tclIndex file +# from Tcl source files. They use a special safe interpreter to +# parse Tcl source files, writing out index entries as "proc" +# commands are encountered. This implementation won't work in a +# safe interpreter, since a safe interpreter can't create the +# special parser and mess with its commands. + +if {[interp issafe]} { + return ;# Stop sourcing the file here +} + +# auto_mkindex -- +# Regenerate a tclIndex file from Tcl source files. Takes as argument +# the name of the directory in which the tclIndex file is to be placed, +# followed by any number of glob patterns to use in that directory to +# locate all of the relevant files. +# +# Arguments: +# dir - Name of the directory in which to create an index. +# args - Any number of additional arguments giving the +# names of files within dir. If no additional +# are given auto_mkindex will look for *.tcl. + +proc auto_mkindex {dir args} { + if {[interp issafe]} { + error "can't generate index within safe interpreter" + } + + set oldDir [pwd] + cd $dir + set dir [pwd] + + append index "# Tcl autoload index file, version 2.0\n" + append index "# This file is generated by the \"auto_mkindex\" command\n" + append index "# and sourced to set up indexing information for one or\n" + append index "# more commands. Typically each line is a command that\n" + append index "# sets an element in the auto_index array, where the\n" + append index "# element name is the name of a command and the value is\n" + append index "# a script that loads the command.\n\n" + if {[llength $args] == 0} { + set args *.tcl + } + + auto_mkindex_parser::init + foreach file [glob -- {*}$args] { + if {[catch {auto_mkindex_parser::mkindex $file} msg opts] == 0} { + append index $msg + } else { + cd $oldDir + return -options $opts $msg + } + } + auto_mkindex_parser::cleanup + + set fid [open "tclIndex" w] + puts -nonewline $fid $index + close $fid + cd $oldDir +} + +# Original version of auto_mkindex that just searches the source +# code for "proc" at the beginning of the line. + +proc auto_mkindex_old {dir args} { + set oldDir [pwd] + cd $dir + set dir [pwd] + append index "# Tcl autoload index file, version 2.0\n" + append index "# This file is generated by the \"auto_mkindex\" command\n" + append index "# and sourced to set up indexing information for one or\n" + append index "# more commands. Typically each line is a command that\n" + append index "# sets an element in the auto_index array, where the\n" + append index "# element name is the name of a command and the value is\n" + append index "# a script that loads the command.\n\n" + if {[llength $args] == 0} { + set args *.tcl + } + foreach file [glob -- {*}$args] { + set f "" + set error [catch { + set f [open $file] + while {[gets $f line] >= 0} { + if {[regexp {^proc[ ]+([^ ]*)} $line match procName]} { + set procName [lindex [auto_qualify $procName "::"] 0] + append index "set [list auto_index($procName)]" + append index " \[list source \[file join \$dir [list $file]\]\]\n" + } + } + close $f + } msg opts] + if {$error} { + catch {close $f} + cd $oldDir + return -options $opts $msg + } + } + set f "" + set error [catch { + set f [open tclIndex w] + puts -nonewline $f $index + close $f + cd $oldDir + } msg opts] + if {$error} { + catch {close $f} + cd $oldDir + error $msg $info $code + return -options $opts $msg + } +} + +# Create a safe interpreter that can be used to parse Tcl source files +# generate a tclIndex file for autoloading. This interp contains +# commands for things that need index entries. Each time a command +# is executed, it writes an entry out to the index file. + +namespace eval auto_mkindex_parser { + variable parser "" ;# parser used to build index + variable index "" ;# maintains index as it is built + variable scriptFile "" ;# name of file being processed + variable contextStack "" ;# stack of namespace scopes + variable imports "" ;# keeps track of all imported cmds + variable initCommands ;# list of commands that create aliases + if {![info exists initCommands]} { + set initCommands [list] + } + + proc init {} { + variable parser + variable initCommands + + if {![interp issafe]} { + set parser [interp create -safe] + $parser hide info + $parser hide rename + $parser hide proc + $parser hide namespace + $parser hide eval + $parser hide puts + $parser invokehidden namespace delete :: + $parser invokehidden proc unknown {args} {} + + # We'll need access to the "namespace" command within the + # interp. Put it back, but move it out of the way. + + $parser expose namespace + $parser invokehidden rename namespace _%@namespace + $parser expose eval + $parser invokehidden rename eval _%@eval + + # Install all the registered psuedo-command implementations + + foreach cmd $initCommands { + eval $cmd + } + } + } + proc cleanup {} { + variable parser + interp delete $parser + unset parser + } +} + +# auto_mkindex_parser::mkindex -- +# +# Used by the "auto_mkindex" command to create a "tclIndex" file for +# the given Tcl source file. Executes the commands in the file, and +# handles things like the "proc" command by adding an entry for the +# index file. Returns a string that represents the index file. +# +# Arguments: +# file Name of Tcl source file to be indexed. + +proc auto_mkindex_parser::mkindex {file} { + variable parser + variable index + variable scriptFile + variable contextStack + variable imports + + set scriptFile $file + + set fid [open $file] + set contents [read $fid] + close $fid + + # There is one problem with sourcing files into the safe + # interpreter: references like "$x" will fail since code is not + # really being executed and variables do not really exist. + # To avoid this, we replace all $ with \0 (literally, the null char) + # later, when getting proc names we will have to reverse this replacement, + # in case there were any $ in the proc name. This will cause a problem + # if somebody actually tries to have a \0 in their proc name. Too bad + # for them. + set contents [string map [list \$ \0] $contents] + + set index "" + set contextStack "" + set imports "" + + $parser eval $contents + + foreach name $imports { + catch {$parser eval [list _%@namespace forget $name]} + } + return $index +} + +# auto_mkindex_parser::hook command +# +# Registers a Tcl command to evaluate when initializing the +# slave interpreter used by the mkindex parser. +# The command is evaluated in the master interpreter, and can +# use the variable auto_mkindex_parser::parser to get to the slave + +proc auto_mkindex_parser::hook {cmd} { + variable initCommands + + lappend initCommands $cmd +} + +# auto_mkindex_parser::slavehook command +# +# Registers a Tcl command to evaluate when initializing the +# slave interpreter used by the mkindex parser. +# The command is evaluated in the slave interpreter. + +proc auto_mkindex_parser::slavehook {cmd} { + variable initCommands + + # The $parser variable is defined to be the name of the + # slave interpreter when this command is used later. + + lappend initCommands "\$parser eval [list $cmd]" +} + +# auto_mkindex_parser::command -- +# +# Registers a new command with the "auto_mkindex_parser" interpreter +# that parses Tcl files. These commands are fake versions of things +# like the "proc" command. When you execute them, they simply write +# out an entry to a "tclIndex" file for auto-loading. +# +# This procedure allows extensions to register their own commands +# with the auto_mkindex facility. For example, a package like +# [incr Tcl] might register a "class" command so that class definitions +# could be added to a "tclIndex" file for auto-loading. +# +# Arguments: +# name Name of command recognized in Tcl files. +# arglist Argument list for command. +# body Implementation of command to handle indexing. + +proc auto_mkindex_parser::command {name arglist body} { + hook [list auto_mkindex_parser::commandInit $name $arglist $body] +} + +# auto_mkindex_parser::commandInit -- +# +# This does the actual work set up by auto_mkindex_parser::command +# This is called when the interpreter used by the parser is created. +# +# Arguments: +# name Name of command recognized in Tcl files. +# arglist Argument list for command. +# body Implementation of command to handle indexing. + +proc auto_mkindex_parser::commandInit {name arglist body} { + variable parser + + set ns [namespace qualifiers $name] + set tail [namespace tail $name] + if {$ns eq ""} { + set fakeName [namespace current]::_%@fake_$tail + } else { + set fakeName [namespace current]::[string map {:: _} _%@fake_$name] + } + proc $fakeName $arglist $body + + # YUK! Tcl won't let us alias fully qualified command names, + # so we can't handle names like "::itcl::class". Instead, + # we have to build procs with the fully qualified names, and + # have the procs point to the aliases. + + if {[string match *::* $name]} { + set exportCmd [list _%@namespace export [namespace tail $name]] + $parser eval [list _%@namespace eval $ns $exportCmd] + + # The following proc definition does not work if you + # want to tolerate space or something else diabolical + # in the procedure name, (i.e., space in $alias) + # The following does not work: + # "_%@eval {$alias} \$args" + # because $alias gets concat'ed to $args. + # The following does not work because $cmd is somehow undefined + # "set cmd {$alias} \; _%@eval {\$cmd} \$args" + # A gold star to someone that can make test + # autoMkindex-3.3 work properly + + set alias [namespace tail $fakeName] + $parser invokehidden proc $name {args} "_%@eval {$alias} \$args" + $parser alias $alias $fakeName + } else { + $parser alias $name $fakeName + } + return +} + +# auto_mkindex_parser::fullname -- +# Used by commands like "proc" within the auto_mkindex parser. +# Returns the qualified namespace name for the "name" argument. +# If the "name" does not start with "::", elements are added from +# the current namespace stack to produce a qualified name. Then, +# the name is examined to see whether or not it should really be +# qualified. If the name has more than the leading "::", it is +# returned as a fully qualified name. Otherwise, it is returned +# as a simple name. That way, the Tcl autoloader will recognize +# it properly. +# +# Arguments: +# name - Name that is being added to index. + +proc auto_mkindex_parser::fullname {name} { + variable contextStack + + if {![string match ::* $name]} { + foreach ns $contextStack { + set name "${ns}::$name" + if {[string match ::* $name]} { + break + } + } + } + + if {[namespace qualifiers $name] eq ""} { + set name [namespace tail $name] + } elseif {![string match ::* $name]} { + set name "::$name" + } + + # Earlier, mkindex replaced all $'s with \0. Now, we have to reverse + # that replacement. + return [string map [list \0 \$] $name] +} + +if {[llength $::auto_mkindex_parser::initCommands]} { + return +} + +# Register all of the procedures for the auto_mkindex parser that +# will build the "tclIndex" file. + +# AUTO MKINDEX: proc name arglist body +# Adds an entry to the auto index list for the given procedure name. + +auto_mkindex_parser::command proc {name args} { + variable index + variable scriptFile + # Do some fancy reformatting on the "source" call to handle platform + # differences with respect to pathnames. Use format just so that the + # command is a little easier to read (otherwise it'd be full of + # backslashed dollar signs, etc. + append index [list set auto_index([fullname $name])] \ + [format { [list source [file join $dir %s]]} \ + [file split $scriptFile]] "\n" +} + +# Conditionally add support for Tcl byte code files. There are some +# tricky details here. First, we need to get the tbcload library +# initialized in the current interpreter. We cannot load tbcload into the +# slave until we have done so because it needs access to the tcl_patchLevel +# variable. Second, because the package index file may defer loading the +# library until we invoke a command, we need to explicitly invoke auto_load +# to force it to be loaded. This should be a noop if the package has +# already been loaded + +auto_mkindex_parser::hook { + if {![catch {package require tbcload}]} { + if {[namespace which -command tbcload::bcproc] eq ""} { + auto_load tbcload::bcproc + } + load {} tbcload $auto_mkindex_parser::parser + + # AUTO MKINDEX: tbcload::bcproc name arglist body + # Adds an entry to the auto index list for the given pre-compiled + # procedure name. + + auto_mkindex_parser::commandInit tbcload::bcproc {name args} { + variable index + variable scriptFile + # Do some nice reformatting of the "source" call, to get around + # path differences on different platforms. We use the format + # command just so that the code is a little easier to read. + append index [list set auto_index([fullname $name])] \ + [format { [list source [file join $dir %s]]} \ + [file split $scriptFile]] "\n" + } + } +} + +# AUTO MKINDEX: namespace eval name command ?arg arg...? +# Adds the namespace name onto the context stack and evaluates the +# associated body of commands. +# +# AUTO MKINDEX: namespace import ?-force? pattern ?pattern...? +# Performs the "import" action in the parser interpreter. This is +# important for any commands contained in a namespace that affect +# the index. For example, a script may say "itcl::class ...", +# or it may import "itcl::*" and then say "class ...". This +# procedure does the import operation, but keeps track of imported +# patterns so we can remove the imports later. + +auto_mkindex_parser::command namespace {op args} { + switch -- $op { + eval { + variable parser + variable contextStack + + set name [lindex $args 0] + set args [lrange $args 1 end] + + set contextStack [linsert $contextStack 0 $name] + $parser eval [list _%@namespace eval $name] $args + set contextStack [lrange $contextStack 1 end] + } + import { + variable parser + variable imports + foreach pattern $args { + if {$pattern ne "-force"} { + lappend imports $pattern + } + } + catch {$parser eval "_%@namespace import $args"} + } + ensemble { + variable parser + variable contextStack + if {[lindex $args 0] eq "create"} { + set name ::[join [lreverse $contextStack] ::] + # create artifical proc to force an entry in the tclIndex + $parser eval [list ::proc $name {} {}] + } + } + } +} + +return diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/clock.tcl b/extensions/fablabchemnitz/inkstitch/bin/tcl/clock.tcl new file mode 100644 index 00000000..eb872512 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/clock.tcl @@ -0,0 +1,4695 @@ +#---------------------------------------------------------------------- +# +# clock.tcl -- +# +# This file implements the portions of the [clock] ensemble that +# are coded in Tcl. Refer to the users' manual to see the description +# of the [clock] command and its subcommands. +# +# +#---------------------------------------------------------------------- +# +# Copyright (c) 2004,2005,2006,2007 by Kevin B. Kenny +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. +# +#---------------------------------------------------------------------- + +# We must have message catalogs that support the root locale, and +# we need access to the Registry on Windows systems. + +uplevel \#0 { + package require msgcat 1.4 + if { $::tcl_platform(platform) eq {windows} } { + if { [catch { package require registry 1.1 }] } { + namespace eval ::tcl::clock [list variable NoRegistry {}] + } + } +} + +# Put the library directory into the namespace for the ensemble +# so that the library code can find message catalogs and time zone +# definition files. + +namespace eval ::tcl::clock \ + [list variable LibDir [file dirname [info script]]] + +#---------------------------------------------------------------------- +# +# clock -- +# +# Manipulate times. +# +# The 'clock' command manipulates time. Refer to the user documentation +# for the available subcommands and what they do. +# +#---------------------------------------------------------------------- + +namespace eval ::tcl::clock { + + # Export the subcommands + + namespace export format + namespace export clicks + namespace export microseconds + namespace export milliseconds + namespace export scan + namespace export seconds + namespace export add + + # Import the message catalog commands that we use. + + namespace import ::msgcat::mcload + namespace import ::msgcat::mclocale + +} + +#---------------------------------------------------------------------- +# +# ::tcl::clock::Initialize -- +# +# Finish initializing the 'clock' subsystem +# +# Results: +# None. +# +# Side effects: +# Namespace variable in the 'clock' subsystem are initialized. +# +# The '::tcl::clock::Initialize' procedure initializes the namespace +# variables and root locale message catalog for the 'clock' subsystem. +# It is broken into a procedure rather than simply evaluated as a script +# so that it will be able to use local variables, avoiding the dangers +# of 'creative writing' as in Bug 1185933. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::Initialize {} { + + rename ::tcl::clock::Initialize {} + + variable LibDir + + # Define the Greenwich time zone + + proc InitTZData {} { + variable TZData + array unset TZData + set TZData(:Etc/GMT) { + {-9223372036854775808 0 0 GMT} + } + set TZData(:GMT) $TZData(:Etc/GMT) + set TZData(:Etc/UTC) { + {-9223372036854775808 0 0 UTC} + } + set TZData(:UTC) $TZData(:Etc/UTC) + set TZData(:localtime) {} + } + InitTZData + + # Define the message catalog for the root locale. + + ::msgcat::mcmset {} { + AM {am} + BCE {B.C.E.} + CE {C.E.} + DATE_FORMAT {%m/%d/%Y} + DATE_TIME_FORMAT {%a %b %e %H:%M:%S %Y} + DAYS_OF_WEEK_ABBREV { + Sun Mon Tue Wed Thu Fri Sat + } + DAYS_OF_WEEK_FULL { + Sunday Monday Tuesday Wednesday Thursday Friday Saturday + } + GREGORIAN_CHANGE_DATE 2299161 + LOCALE_DATE_FORMAT {%m/%d/%Y} + LOCALE_DATE_TIME_FORMAT {%a %b %e %H:%M:%S %Y} + LOCALE_ERAS {} + LOCALE_NUMERALS { + 00 01 02 03 04 05 06 07 08 09 + 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 + } + LOCALE_TIME_FORMAT {%H:%M:%S} + LOCALE_YEAR_FORMAT {%EC%Ey} + MONTHS_ABBREV { + Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec + } + MONTHS_FULL { + January February March + April May June + July August September + October November December + } + PM {pm} + TIME_FORMAT {%H:%M:%S} + TIME_FORMAT_12 {%I:%M:%S %P} + TIME_FORMAT_24 {%H:%M} + TIME_FORMAT_24_SECS {%H:%M:%S} + } + + # Define a few Gregorian change dates for other locales. In most cases + # the change date follows a language, because a nation's colonies changed + # at the same time as the nation itself. In many cases, different + # national boundaries existed; the dominating rule is to follow the + # nation's capital. + + # Italy, Spain, Portugal, Poland + + ::msgcat::mcset it GREGORIAN_CHANGE_DATE 2299161 + ::msgcat::mcset es GREGORIAN_CHANGE_DATE 2299161 + ::msgcat::mcset pt GREGORIAN_CHANGE_DATE 2299161 + ::msgcat::mcset pl GREGORIAN_CHANGE_DATE 2299161 + + # France, Austria + + ::msgcat::mcset fr GREGORIAN_CHANGE_DATE 2299227 + + # For Belgium, we follow Southern Netherlands; Liege Diocese + # changed several weeks later. + + ::msgcat::mcset fr_BE GREGORIAN_CHANGE_DATE 2299238 + ::msgcat::mcset nl_BE GREGORIAN_CHANGE_DATE 2299238 + + # Austria + + ::msgcat::mcset de_AT GREGORIAN_CHANGE_DATE 2299527 + + # Hungary + + ::msgcat::mcset hu GREGORIAN_CHANGE_DATE 2301004 + + # Germany, Norway, Denmark (Catholic Germany changed earlier) + + ::msgcat::mcset de_DE GREGORIAN_CHANGE_DATE 2342032 + ::msgcat::mcset nb GREGORIAN_CHANGE_DATE 2342032 + ::msgcat::mcset nn GREGORIAN_CHANGE_DATE 2342032 + ::msgcat::mcset no GREGORIAN_CHANGE_DATE 2342032 + ::msgcat::mcset da GREGORIAN_CHANGE_DATE 2342032 + + # Holland (Brabant, Gelderland, Flanders, Friesland, etc. changed + # at various times) + + ::msgcat::mcset nl GREGORIAN_CHANGE_DATE 2342165 + + # Protestant Switzerland (Catholic cantons changed earlier) + + ::msgcat::mcset fr_CH GREGORIAN_CHANGE_DATE 2361342 + ::msgcat::mcset it_CH GREGORIAN_CHANGE_DATE 2361342 + ::msgcat::mcset de_CH GREGORIAN_CHANGE_DATE 2361342 + + # English speaking countries + + ::msgcat::mcset en GREGORIAN_CHANGE_DATE 2361222 + + # Sweden (had several changes onto and off of the Gregorian calendar) + + ::msgcat::mcset sv GREGORIAN_CHANGE_DATE 2361390 + + # Russia + + ::msgcat::mcset ru GREGORIAN_CHANGE_DATE 2421639 + + # Romania (Transylvania changed earler - perhaps de_RO should show + # the earlier date?) + + ::msgcat::mcset ro GREGORIAN_CHANGE_DATE 2422063 + + # Greece + + ::msgcat::mcset el GREGORIAN_CHANGE_DATE 2423480 + + #------------------------------------------------------------------ + # + # CONSTANTS + # + #------------------------------------------------------------------ + + # Paths at which binary time zone data for the Olson libraries + # are known to reside on various operating systems + + variable ZoneinfoPaths {} + foreach path { + /usr/share/zoneinfo + /usr/share/lib/zoneinfo + /usr/lib/zoneinfo + /usr/local/etc/zoneinfo + } { + if { [file isdirectory $path] } { + lappend ZoneinfoPaths $path + } + } + + # Define the directories for time zone data and message catalogs. + + variable DataDir [file join $LibDir tzdata] + variable MsgDir [file join $LibDir msgs] + + # Number of days in the months, in common years and leap years. + + variable DaysInRomanMonthInCommonYear \ + { 31 28 31 30 31 30 31 31 30 31 30 31 } + variable DaysInRomanMonthInLeapYear \ + { 31 29 31 30 31 30 31 31 30 31 30 31 } + variable DaysInPriorMonthsInCommonYear [list 0] + variable DaysInPriorMonthsInLeapYear [list 0] + set i 0 + foreach j $DaysInRomanMonthInCommonYear { + lappend DaysInPriorMonthsInCommonYear [incr i $j] + } + set i 0 + foreach j $DaysInRomanMonthInLeapYear { + lappend DaysInPriorMonthsInLeapYear [incr i $j] + } + + # Another epoch (Hi, Jeff!) + + variable Roddenberry 1946 + + # Integer ranges + + variable MINWIDE -9223372036854775808 + variable MAXWIDE 9223372036854775807 + + # Day before Leap Day + + variable FEB_28 58 + + # Translation table to map Windows TZI onto cities, so that + # the Olson rules can apply. In some cases the mapping is ambiguous, + # so it's wise to specify $::env(TCL_TZ) rather than simply depending + # on the system time zone. + + # The keys are long lists of values obtained from the time zone + # information in the Registry. In order, the list elements are: + # Bias StandardBias DaylightBias + # StandardDate.wYear StandardDate.wMonth StandardDate.wDayOfWeek + # StandardDate.wDay StandardDate.wHour StandardDate.wMinute + # StandardDate.wSecond StandardDate.wMilliseconds + # DaylightDate.wYear DaylightDate.wMonth DaylightDate.wDayOfWeek + # DaylightDate.wDay DaylightDate.wHour DaylightDate.wMinute + # DaylightDate.wSecond DaylightDate.wMilliseconds + # The values are the names of time zones where those rules apply. + # There is considerable ambiguity in certain zones; an attempt has + # been made to make a reasonable guess, but this table needs to be + # taken with a grain of salt. + + variable WinZoneInfo [dict create {*}{ + {-43200 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :Pacific/Kwajalein + {-39600 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :Pacific/Midway + {-36000 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :Pacific/Honolulu + {-32400 0 3600 0 11 0 1 2 0 0 0 0 3 0 2 2 0 0 0} :America/Anchorage + {-28800 0 3600 0 11 0 1 2 0 0 0 0 3 0 2 2 0 0 0} :America/Los_Angeles + {-28800 0 3600 0 10 0 5 2 0 0 0 0 4 0 1 2 0 0 0} :America/Tijuana + {-25200 0 3600 0 11 0 1 2 0 0 0 0 3 0 2 2 0 0 0} :America/Denver + {-25200 0 3600 0 10 0 5 2 0 0 0 0 4 0 1 2 0 0 0} :America/Chihuahua + {-25200 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :America/Phoenix + {-21600 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :America/Regina + {-21600 0 3600 0 11 0 1 2 0 0 0 0 3 0 2 2 0 0 0} :America/Chicago + {-21600 0 3600 0 10 0 5 2 0 0 0 0 4 0 1 2 0 0 0} :America/Mexico_City + {-18000 0 3600 0 11 0 1 2 0 0 0 0 3 0 2 2 0 0 0} :America/New_York + {-18000 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :America/Indianapolis + {-14400 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :America/Caracas + {-14400 0 3600 0 3 6 2 23 59 59 999 0 10 6 2 23 59 59 999} + :America/Santiago + {-14400 0 3600 0 2 0 5 2 0 0 0 0 11 0 1 2 0 0 0} :America/Manaus + {-14400 0 3600 0 11 0 1 2 0 0 0 0 3 0 2 2 0 0 0} :America/Halifax + {-12600 0 3600 0 10 0 5 2 0 0 0 0 4 0 1 2 0 0 0} :America/St_Johns + {-10800 0 3600 0 2 0 2 2 0 0 0 0 10 0 3 2 0 0 0} :America/Sao_Paulo + {-10800 0 3600 0 10 0 5 2 0 0 0 0 4 0 1 2 0 0 0} :America/Godthab + {-10800 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :America/Buenos_Aires + {-10800 0 3600 0 2 0 5 2 0 0 0 0 11 0 1 2 0 0 0} :America/Bahia + {-10800 0 3600 0 3 0 2 2 0 0 0 0 10 0 1 2 0 0 0} :America/Montevideo + {-7200 0 3600 0 9 0 5 2 0 0 0 0 3 0 5 2 0 0 0} :America/Noronha + {-3600 0 3600 0 10 0 5 3 0 0 0 0 3 0 5 2 0 0 0} :Atlantic/Azores + {-3600 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :Atlantic/Cape_Verde + {0 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :UTC + {0 0 3600 0 10 0 5 2 0 0 0 0 3 0 5 1 0 0 0} :Europe/London + {3600 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :Africa/Kinshasa + {3600 0 3600 0 10 0 5 3 0 0 0 0 3 0 5 2 0 0 0} :CET + {7200 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :Africa/Harare + {7200 0 3600 0 9 4 5 23 59 59 0 0 4 4 5 23 59 59 0} + :Africa/Cairo + {7200 0 3600 0 10 0 5 4 0 0 0 0 3 0 5 3 0 0 0} :Europe/Helsinki + {7200 0 3600 0 9 0 3 2 0 0 0 0 3 5 5 2 0 0 0} :Asia/Jerusalem + {7200 0 3600 0 9 0 5 1 0 0 0 0 3 0 5 0 0 0 0} :Europe/Bucharest + {7200 0 3600 0 10 0 5 3 0 0 0 0 3 0 5 2 0 0 0} :Europe/Athens + {7200 0 3600 0 9 5 5 1 0 0 0 0 3 4 5 0 0 0 0} :Asia/Amman + {7200 0 3600 0 10 6 5 23 59 59 999 0 3 0 5 0 0 0 0} + :Asia/Beirut + {7200 0 -3600 0 4 0 1 2 0 0 0 0 9 0 1 2 0 0 0} :Africa/Windhoek + {10800 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :Asia/Riyadh + {10800 0 3600 0 10 0 1 4 0 0 0 0 4 0 1 3 0 0 0} :Asia/Baghdad + {10800 0 3600 0 10 0 5 3 0 0 0 0 3 0 5 2 0 0 0} :Europe/Moscow + {12600 0 3600 0 9 2 4 2 0 0 0 0 3 0 1 2 0 0 0} :Asia/Tehran + {14400 0 3600 0 10 0 5 5 0 0 0 0 3 0 5 4 0 0 0} :Asia/Baku + {14400 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :Asia/Muscat + {14400 0 3600 0 10 0 5 3 0 0 0 0 3 0 5 2 0 0 0} :Asia/Tbilisi + {16200 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :Asia/Kabul + {18000 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :Asia/Karachi + {18000 0 3600 0 10 0 5 3 0 0 0 0 3 0 5 2 0 0 0} :Asia/Yekaterinburg + {19800 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :Asia/Calcutta + {20700 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :Asia/Katmandu + {21600 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :Asia/Dhaka + {21600 0 3600 0 10 0 5 3 0 0 0 0 3 0 5 2 0 0 0} :Asia/Novosibirsk + {23400 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :Asia/Rangoon + {25200 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :Asia/Bangkok + {25200 0 3600 0 10 0 5 3 0 0 0 0 3 0 5 2 0 0 0} :Asia/Krasnoyarsk + {28800 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :Asia/Chongqing + {28800 0 3600 0 10 0 5 3 0 0 0 0 3 0 5 2 0 0 0} :Asia/Irkutsk + {32400 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :Asia/Tokyo + {32400 0 3600 0 10 0 5 3 0 0 0 0 3 0 5 2 0 0 0} :Asia/Yakutsk + {34200 0 3600 0 3 0 5 3 0 0 0 0 10 0 5 2 0 0 0} :Australia/Adelaide + {34200 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :Australia/Darwin + {36000 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :Australia/Brisbane + {36000 0 3600 0 10 0 5 3 0 0 0 0 3 0 5 2 0 0 0} :Asia/Vladivostok + {36000 0 3600 0 3 0 5 3 0 0 0 0 10 0 1 2 0 0 0} :Australia/Hobart + {36000 0 3600 0 3 0 5 3 0 0 0 0 10 0 5 2 0 0 0} :Australia/Sydney + {39600 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :Pacific/Noumea + {43200 0 3600 0 3 0 3 3 0 0 0 0 10 0 1 2 0 0 0} :Pacific/Auckland + {43200 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :Pacific/Fiji + {46800 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :Pacific/Tongatapu + }] + + # Groups of fields that specify the date, priorities, and + # code bursts that determine Julian Day Number given those groups. + # The code in [clock scan] will choose the highest priority + # (lowest numbered) set of fields that determines the date. + + variable DateParseActions { + + { seconds } 0 {} + + { julianDay } 1 {} + + { era century yearOfCentury month dayOfMonth } 2 { + dict set date year [expr { 100 * [dict get $date century] + + [dict get $date yearOfCentury] }] + set date [GetJulianDayFromEraYearMonthDay $date[set date {}] \ + $changeover] + } + { era century yearOfCentury dayOfYear } 2 { + dict set date year [expr { 100 * [dict get $date century] + + [dict get $date yearOfCentury] }] + set date [GetJulianDayFromEraYearDay $date[set date {}] \ + $changeover] + } + + { century yearOfCentury month dayOfMonth } 3 { + dict set date era CE + dict set date year [expr { 100 * [dict get $date century] + + [dict get $date yearOfCentury] }] + set date [GetJulianDayFromEraYearMonthDay $date[set date {}] \ + $changeover] + } + { century yearOfCentury dayOfYear } 3 { + dict set date era CE + dict set date year [expr { 100 * [dict get $date century] + + [dict get $date yearOfCentury] }] + set date [GetJulianDayFromEraYearDay $date[set date {}] \ + $changeover] + } + { iso8601Century iso8601YearOfCentury iso8601Week dayOfWeek } 3 { + dict set date era CE + dict set date iso8601Year \ + [expr { 100 * [dict get $date iso8601Century] + + [dict get $date iso8601YearOfCentury] }] + set date [GetJulianDayFromEraYearWeekDay $date[set date {}] \ + $changeover] + } + + { yearOfCentury month dayOfMonth } 4 { + set date [InterpretTwoDigitYear $date[set date {}] $baseTime] + dict set date era CE + set date [GetJulianDayFromEraYearMonthDay $date[set date {}] \ + $changeover] + } + { yearOfCentury dayOfYear } 4 { + set date [InterpretTwoDigitYear $date[set date {}] $baseTime] + dict set date era CE + set date [GetJulianDayFromEraYearDay $date[set date {}] \ + $changeover] + } + { iso8601YearOfCentury iso8601Week dayOfWeek } 4 { + set date [InterpretTwoDigitYear \ + $date[set date {}] $baseTime \ + iso8601YearOfCentury iso8601Year] + dict set date era CE + set date [GetJulianDayFromEraYearWeekDay $date[set date {}] \ + $changeover] + } + + { month dayOfMonth } 5 { + set date [AssignBaseYear $date[set date {}] \ + $baseTime $timeZone $changeover] + set date [GetJulianDayFromEraYearMonthDay $date[set date {}] \ + $changeover] + } + { dayOfYear } 5 { + set date [AssignBaseYear $date[set date {}] \ + $baseTime $timeZone $changeover] + set date [GetJulianDayFromEraYearDay $date[set date {}] \ + $changeover] + } + { iso8601Week dayOfWeek } 5 { + set date [AssignBaseIso8601Year $date[set date {}] \ + $baseTime $timeZone $changeover] + set date [GetJulianDayFromEraYearWeekDay $date[set date {}] \ + $changeover] + } + + { dayOfMonth } 6 { + set date [AssignBaseMonth $date[set date {}] \ + $baseTime $timeZone $changeover] + set date [GetJulianDayFromEraYearMonthDay $date[set date {}] \ + $changeover] + } + + { dayOfWeek } 7 { + set date [AssignBaseWeek $date[set date {}] \ + $baseTime $timeZone $changeover] + set date [GetJulianDayFromEraYearWeekDay $date[set date {}] \ + $changeover] + } + + {} 8 { + set date [AssignBaseJulianDay $date[set date {}] \ + $baseTime $timeZone $changeover] + } + } + + # Groups of fields that specify time of day, priorities, + # and code that processes them + + variable TimeParseActions { + + seconds 1 {} + + { hourAMPM minute second amPmIndicator } 2 { + dict set date secondOfDay [InterpretHMSP $date] + } + { hour minute second } 2 { + dict set date secondOfDay [InterpretHMS $date] + } + + { hourAMPM minute amPmIndicator } 3 { + dict set date second 0 + dict set date secondOfDay [InterpretHMSP $date] + } + { hour minute } 3 { + dict set date second 0 + dict set date secondOfDay [InterpretHMS $date] + } + + { hourAMPM amPmIndicator } 4 { + dict set date minute 0 + dict set date second 0 + dict set date secondOfDay [InterpretHMSP $date] + } + { hour } 4 { + dict set date minute 0 + dict set date second 0 + dict set date secondOfDay [InterpretHMS $date] + } + + { } 5 { + dict set date secondOfDay 0 + } + } + + # Legacy time zones, used primarily for parsing RFC822 dates. + + variable LegacyTimeZone [dict create \ + gmt +0000 \ + ut +0000 \ + utc +0000 \ + bst +0100 \ + wet +0000 \ + wat -0100 \ + at -0200 \ + nft -0330 \ + nst -0330 \ + ndt -0230 \ + ast -0400 \ + adt -0300 \ + est -0500 \ + edt -0400 \ + cst -0600 \ + cdt -0500 \ + mst -0700 \ + mdt -0600 \ + pst -0800 \ + pdt -0700 \ + yst -0900 \ + ydt -0800 \ + hst -1000 \ + hdt -0900 \ + cat -1000 \ + ahst -1000 \ + nt -1100 \ + idlw -1200 \ + cet +0100 \ + cest +0200 \ + met +0100 \ + mewt +0100 \ + mest +0200 \ + swt +0100 \ + sst +0200 \ + fwt +0100 \ + fst +0200 \ + eet +0200 \ + eest +0300 \ + bt +0300 \ + it +0330 \ + zp4 +0400 \ + zp5 +0500 \ + ist +0530 \ + zp6 +0600 \ + wast +0700 \ + wadt +0800 \ + jt +0730 \ + cct +0800 \ + jst +0900 \ + kst +0900 \ + cast +0930 \ + jdt +1000 \ + kdt +1000 \ + cadt +1030 \ + east +1000 \ + eadt +1030 \ + gst +1000 \ + nzt +1200 \ + nzst +1200 \ + nzdt +1300 \ + idle +1200 \ + a +0100 \ + b +0200 \ + c +0300 \ + d +0400 \ + e +0500 \ + f +0600 \ + g +0700 \ + h +0800 \ + i +0900 \ + k +1000 \ + l +1100 \ + m +1200 \ + n -0100 \ + o -0200 \ + p -0300 \ + q -0400 \ + r -0500 \ + s -0600 \ + t -0700 \ + u -0800 \ + v -0900 \ + w -1000 \ + x -1100 \ + y -1200 \ + z +0000 \ + ] + + # Caches + + variable LocaleNumeralCache {}; # Dictionary whose keys are locale + # names and whose values are pairs + # comprising regexes matching numerals + # in the given locales and dictionaries + # mapping the numerals to their numeric + # values. + variable McLoaded {}; # Dictionary whose keys are locales + # in which [mcload] has been executed + # and whose values are second-level + # dictionaries indexed by message + # name and giving message text. + # variable CachedSystemTimeZone; # If 'CachedSystemTimeZone' exists, + # it contains the value of the + # system time zone, as determined from + # the environment. + variable TimeZoneBad {}; # Dictionary whose keys are time zone + # names and whose values are 1 if + # the time zone is unknown and 0 + # if it is known. + variable TZData; # Array whose keys are time zone names + # and whose values are lists of quads + # comprising start time, UTC offset, + # Daylight Saving Time indicator, and + # time zone abbreviation. + variable FormatProc; # Array mapping format group + # and locale to the name of a procedure + # that renders the given format +} +::tcl::clock::Initialize + +#---------------------------------------------------------------------- +# +# clock format -- +# +# Formats a count of seconds since the Posix Epoch as a time +# of day. +# +# The 'clock format' command formats times of day for output. +# Refer to the user documentation to see what it does. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::format { args } { + + variable FormatProc + variable TZData + + lassign [ParseFormatArgs {*}$args] format locale timezone + set locale [string tolower $locale] + set clockval [lindex $args 0] + + # Get the data for time changes in the given zone + + if {$timezone eq ""} { + set timezone [GetSystemTimeZone] + } + if {![info exists TZData($timezone)]} { + if {[catch {SetupTimeZone $timezone} retval opts]} { + dict unset opts -errorinfo + return -options $opts $retval + } + } + + # Build a procedure to format the result. Cache the built procedure's + # name in the 'FormatProc' array to avoid losing its internal + # representation, which contains the name resolution. + + set procName formatproc'$format'$locale + set procName [namespace current]::[string map {: {\:} \\ {\\}} $procName] + if {[info exists FormatProc($procName)]} { + set procName $FormatProc($procName) + } else { + set FormatProc($procName) \ + [ParseClockFormatFormat $procName $format $locale] + } + + return [$procName $clockval $timezone] + +} + +#---------------------------------------------------------------------- +# +# ParseClockFormatFormat -- +# +# Builds and caches a procedure that formats a time value. +# +# Parameters: +# format -- Format string to use +# locale -- Locale in which the format string is to be interpreted +# +# Results: +# Returns the name of the newly-built procedure. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::ParseClockFormatFormat {procName format locale} { + + if {[namespace which $procName] ne {}} { + return $procName + } + + # Map away the locale-dependent composite format groups + + EnterLocale $locale oldLocale + + # Change locale if a fresh locale has been given on the command line. + + set status [catch { + + ParseClockFormatFormat2 $format $locale $procName + + } result opts] + + # Restore the locale + + if { [info exists oldLocale] } { + mclocale $oldLocale + } + + # Return either the error or the proc name + + if { $status == 1 } { + if { [lindex [dict get $opts -errorcode] 0] eq {clock} } { + return -code error $result + } else { + return -options $opts $result + } + } else { + return $result + } + +} + +proc ::tcl::clock::ParseClockFormatFormat2 {format locale procName} { + + set didLocaleEra 0 + set didLocaleNumerals 0 + set preFormatCode \ + [string map [list @GREGORIAN_CHANGE_DATE@ \ + [mc GREGORIAN_CHANGE_DATE]] \ + { + variable TZData + set date [GetDateFields $clockval \ + $TZData($timezone) \ + @GREGORIAN_CHANGE_DATE@] + }] + set formatString {} + set substituents {} + set state {} + + set format [LocalizeFormat $locale $format] + + foreach char [split $format {}] { + switch -exact -- $state { + {} { + if { [string equal % $char] } { + set state percent + } else { + append formatString $char + } + } + percent { # Character following a '%' character + set state {} + switch -exact -- $char { + % { # A literal character, '%' + append formatString %% + } + a { # Day of week, abbreviated + append formatString %s + append substituents \ + [string map \ + [list @DAYS_OF_WEEK_ABBREV@ \ + [list [mc DAYS_OF_WEEK_ABBREV]]] \ + { [lindex @DAYS_OF_WEEK_ABBREV@ \ + [expr {[dict get $date dayOfWeek] \ + % 7}]]}] + } + A { # Day of week, spelt out. + append formatString %s + append substituents \ + [string map \ + [list @DAYS_OF_WEEK_FULL@ \ + [list [mc DAYS_OF_WEEK_FULL]]] \ + { [lindex @DAYS_OF_WEEK_FULL@ \ + [expr {[dict get $date dayOfWeek] \ + % 7}]]}] + } + b - h { # Name of month, abbreviated. + append formatString %s + append substituents \ + [string map \ + [list @MONTHS_ABBREV@ \ + [list [mc MONTHS_ABBREV]]] \ + { [lindex @MONTHS_ABBREV@ \ + [expr {[dict get $date month]-1}]]}] + } + B { # Name of month, spelt out + append formatString %s + append substituents \ + [string map \ + [list @MONTHS_FULL@ \ + [list [mc MONTHS_FULL]]] \ + { [lindex @MONTHS_FULL@ \ + [expr {[dict get $date month]-1}]]}] + } + C { # Century number + append formatString %02d + append substituents \ + { [expr {[dict get $date year] / 100}]} + } + d { # Day of month, with leading zero + append formatString %02d + append substituents { [dict get $date dayOfMonth]} + } + e { # Day of month, without leading zero + append formatString %2d + append substituents { [dict get $date dayOfMonth]} + } + E { # Format group in a locale-dependent + # alternative era + set state percentE + if {!$didLocaleEra} { + append preFormatCode \ + [string map \ + [list @LOCALE_ERAS@ \ + [list [mc LOCALE_ERAS]]] \ + { + set date [GetLocaleEra \ + $date[set date {}] \ + @LOCALE_ERAS@]}] \n + set didLocaleEra 1 + } + if {!$didLocaleNumerals} { + append preFormatCode \ + [list set localeNumerals \ + [mc LOCALE_NUMERALS]] \n + set didLocaleNumerals 1 + } + } + g { # Two-digit year relative to ISO8601 + # week number + append formatString %02d + append substituents \ + { [expr { [dict get $date iso8601Year] % 100 }]} + } + G { # Four-digit year relative to ISO8601 + # week number + append formatString %02d + append substituents { [dict get $date iso8601Year]} + } + H { # Hour in the 24-hour day, leading zero + append formatString %02d + append substituents \ + { [expr { [dict get $date localSeconds] \ + / 3600 % 24}]} + } + I { # Hour AM/PM, with leading zero + append formatString %02d + append substituents \ + { [expr { ( ( ( [dict get $date localSeconds] \ + % 86400 ) \ + + 86400 \ + - 3600 ) \ + / 3600 ) \ + % 12 + 1 }] } + } + j { # Day of year (001-366) + append formatString %03d + append substituents { [dict get $date dayOfYear]} + } + J { # Julian Day Number + append formatString %07ld + append substituents { [dict get $date julianDay]} + } + k { # Hour (0-23), no leading zero + append formatString %2d + append substituents \ + { [expr { [dict get $date localSeconds] + / 3600 + % 24 }]} + } + l { # Hour (12-11), no leading zero + append formatString %2d + append substituents \ + { [expr { ( ( ( [dict get $date localSeconds] + % 86400 ) + + 86400 + - 3600 ) + / 3600 ) + % 12 + 1 }]} + } + m { # Month number, leading zero + append formatString %02d + append substituents { [dict get $date month]} + } + M { # Minute of the hour, leading zero + append formatString %02d + append substituents \ + { [expr { [dict get $date localSeconds] + / 60 + % 60 }]} + } + n { # A literal newline + append formatString \n + } + N { # Month number, no leading zero + append formatString %2d + append substituents { [dict get $date month]} + } + O { # A format group in the locale's + # alternative numerals + set state percentO + if {!$didLocaleNumerals} { + append preFormatCode \ + [list set localeNumerals \ + [mc LOCALE_NUMERALS]] \n + set didLocaleNumerals 1 + } + } + p { # Localized 'AM' or 'PM' indicator + # converted to uppercase + append formatString %s + append preFormatCode \ + [list set AM [string toupper [mc AM]]] \n \ + [list set PM [string toupper [mc PM]]] \n + append substituents \ + { [expr {(([dict get $date localSeconds] + % 86400) < 43200) ? + $AM : $PM}]} + } + P { # Localized 'AM' or 'PM' indicator + append formatString %s + append preFormatCode \ + [list set am [mc AM]] \n \ + [list set pm [mc PM]] \n + append substituents \ + { [expr {(([dict get $date localSeconds] + % 86400) < 43200) ? + $am : $pm}]} + + } + Q { # Hi, Jeff! + append formatString %s + append substituents { [FormatStarDate $date]} + } + s { # Seconds from the Posix Epoch + append formatString %s + append substituents { [dict get $date seconds]} + } + S { # Second of the minute, with + # leading zero + append formatString %02d + append substituents \ + { [expr { [dict get $date localSeconds] + % 60 }]} + } + t { # A literal tab character + append formatString \t + } + u { # Day of the week (1-Monday, 7-Sunday) + append formatString %1d + append substituents { [dict get $date dayOfWeek]} + } + U { # Week of the year (00-53). The + # first Sunday of the year is the + # first day of week 01 + append formatString %02d + append preFormatCode { + set dow [dict get $date dayOfWeek] + if { $dow == 7 } { + set dow 0 + } + incr dow + set UweekNumber \ + [expr { ( [dict get $date dayOfYear] + - $dow + 7 ) + / 7 }] + } + append substituents { $UweekNumber} + } + V { # The ISO8601 week number + append formatString %02d + append substituents { [dict get $date iso8601Week]} + } + w { # Day of the week (0-Sunday, + # 6-Saturday) + append formatString %1d + append substituents \ + { [expr { [dict get $date dayOfWeek] % 7 }]} + } + W { # Week of the year (00-53). The first + # Monday of the year is the first day + # of week 01. + append preFormatCode { + set WweekNumber \ + [expr { ( [dict get $date dayOfYear] + - [dict get $date dayOfWeek] + + 7 ) + / 7 }] + } + append formatString %02d + append substituents { $WweekNumber} + } + y { # The two-digit year of the century + append formatString %02d + append substituents \ + { [expr { [dict get $date year] % 100 }]} + } + Y { # The four-digit year + append formatString %04d + append substituents { [dict get $date year]} + } + z { # The time zone as hours and minutes + # east (+) or west (-) of Greenwich + append formatString %s + append substituents { [FormatNumericTimeZone \ + [dict get $date tzOffset]]} + } + Z { # The name of the time zone + append formatString %s + append substituents { [dict get $date tzName]} + } + % { # A literal percent character + append formatString %% + } + default { # An unknown escape sequence + append formatString %% $char + } + } + } + percentE { # Character following %E + set state {} + switch -exact -- $char { + E { + append formatString %s + append substituents { } \ + [string map \ + [list @BCE@ [list [mc BCE]] \ + @CE@ [list [mc CE]]] \ + {[dict get {BCE @BCE@ CE @CE@} \ + [dict get $date era]]}] + } + C { # Locale-dependent era + append formatString %s + append substituents { [dict get $date localeEra]} + } + y { # Locale-dependent year of the era + append preFormatCode { + set y [dict get $date localeYear] + if { $y >= 0 && $y < 100 } { + set Eyear [lindex $localeNumerals $y] + } else { + set Eyear $y + } + } + append formatString %s + append substituents { $Eyear} + } + default { # Unknown %E format group + append formatString %%E $char + } + } + } + percentO { # Character following %O + set state {} + switch -exact -- $char { + d - e { # Day of the month in alternative + # numerals + append formatString %s + append substituents \ + { [lindex $localeNumerals \ + [dict get $date dayOfMonth]]} + } + H - k { # Hour of the day in alternative + # numerals + append formatString %s + append substituents \ + { [lindex $localeNumerals \ + [expr { [dict get $date localSeconds] + / 3600 + % 24 }]]} + } + I - l { # Hour (12-11) AM/PM in alternative + # numerals + append formatString %s + append substituents \ + { [lindex $localeNumerals \ + [expr { ( ( ( [dict get $date localSeconds] + % 86400 ) + + 86400 + - 3600 ) + / 3600 ) + % 12 + 1 }]]} + } + m { # Month number in alternative numerals + append formatString %s + append substituents \ + { [lindex $localeNumerals [dict get $date month]]} + } + M { # Minute of the hour in alternative + # numerals + append formatString %s + append substituents \ + { [lindex $localeNumerals \ + [expr { [dict get $date localSeconds] + / 60 + % 60 }]]} + } + S { # Second of the minute in alternative + # numerals + append formatString %s + append substituents \ + { [lindex $localeNumerals \ + [expr { [dict get $date localSeconds] + % 60 }]]} + } + u { # Day of the week (Monday=1,Sunday=7) + # in alternative numerals + append formatString %s + append substituents \ + { [lindex $localeNumerals \ + [dict get $date dayOfWeek]]} + } + w { # Day of the week (Sunday=0,Saturday=6) + # in alternative numerals + append formatString %s + append substituents \ + { [lindex $localeNumerals \ + [expr { [dict get $date dayOfWeek] % 7 }]]} + } + y { # Year of the century in alternative + # numerals + append formatString %s + append substituents \ + { [lindex $localeNumerals \ + [expr { [dict get $date year] % 100 }]]} + } + default { # Unknown format group + append formatString %%O $char + } + } + } + } + } + + # Clean up any improperly terminated groups + + switch -exact -- $state { + percent { + append formatString %% + } + percentE { + append retval %%E + } + percentO { + append retval %%O + } + } + + proc $procName {clockval timezone} " + $preFormatCode + return \[::format [list $formatString] $substituents\] + " + + # puts [list $procName [info args $procName] [info body $procName]] + + return $procName +} + +#---------------------------------------------------------------------- +# +# clock scan -- +# +# Inputs a count of seconds since the Posix Epoch as a time +# of day. +# +# The 'clock format' command scans times of day on input. +# Refer to the user documentation to see what it does. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::scan { args } { + + set format {} + + # Check the count of args + + if { [llength $args] < 1 || [llength $args] % 2 != 1 } { + set cmdName "clock scan" + return -code error \ + -errorcode [list CLOCK wrongNumArgs] \ + "wrong \# args: should be\ + \"$cmdName string\ + ?-base seconds?\ + ?-format string? ?-gmt boolean?\ + ?-locale LOCALE? ?-timezone ZONE?\"" + } + + # Set defaults + + set base [clock seconds] + set string [lindex $args 0] + set format {} + set gmt 0 + set locale c + set timezone [GetSystemTimeZone] + + # Pick up command line options. + + foreach { flag value } [lreplace $args 0 0] { + set saw($flag) {} + switch -exact -- $flag { + -b - -ba - -bas - -base { + set base $value + } + -f - -fo - -for - -form - -forma - -format { + set format $value + } + -g - -gm - -gmt { + set gmt $value + } + -l - -lo - -loc - -loca - -local - -locale { + set locale [string tolower $value] + } + -t - -ti - -tim - -time - -timez - -timezo - -timezon - -timezone { + set timezone $value + } + default { + return -code error \ + -errorcode [list CLOCK badSwitch $flag] \ + "bad switch \"$flag\",\ + must be -base, -format, -gmt, -locale or -timezone" + } + } + } + + # Check options for validity + + if { [info exists saw(-gmt)] && [info exists saw(-timezone)] } { + return -code error \ + -errorcode [list CLOCK gmtWithTimezone] \ + "cannot use -gmt and -timezone in same call" + } + if { [catch { expr { wide($base) } } result] } { + return -code error \ + "expected integer but got \"$base\"" + } + if { ![string is boolean $gmt] } { + return -code error \ + "expected boolean value but got \"$gmt\"" + } else { + if { $gmt } { + set timezone :GMT + } + } + + if { ![info exists saw(-format)] } { + # Perhaps someday we'll localize the legacy code. Right now, + # it's not localized. + if { [info exists saw(-locale)] } { + return -code error \ + -errorcode [list CLOCK flagWithLegacyFormat] \ + "legacy \[clock scan\] does not support -locale" + + } + return [FreeScan $string $base $timezone $locale] + } + + # Change locale if a fresh locale has been given on the command line. + + EnterLocale $locale oldLocale + + set status [catch { + + # Map away the locale-dependent composite format groups + + set scanner [ParseClockScanFormat $format $locale] + $scanner $string $base $timezone + + } result opts] + + # Restore the locale + + if { [info exists oldLocale] } { + mclocale $oldLocale + } + + if { $status == 1 } { + if { [lindex [dict get $opts -errorcode] 0] eq {clock} } { + return -code error $result + } else { + return -options $opts $result + } + } else { + return $result + } + +} + +#---------------------------------------------------------------------- +# +# FreeScan -- +# +# Scans a time in free format +# +# Parameters: +# string - String containing the time to scan +# base - Base time, expressed in seconds from the Epoch +# timezone - Default time zone in which the time will be expressed +# locale - (Unused) Name of the locale where the time will be scanned. +# +# Results: +# Returns the date and time extracted from the string in seconds +# from the epoch +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::FreeScan { string base timezone locale } { + + variable TZData + + # Get the data for time changes in the given zone + + if {[catch {SetupTimeZone $timezone} retval opts]} { + dict unset opts -errorinfo + return -options $opts $retval + } + + # Extract year, month and day from the base time for the + # parser to use as defaults + + set date [GetDateFields \ + $base \ + $TZData($timezone) \ + 2361222] + dict set date secondOfDay [expr { [dict get $date localSeconds] + % 86400 }] + + # Parse the date. The parser will return a list comprising + # date, time, time zone, relative month/day/seconds, relative + # weekday, ordinal month. + + set status [catch { + Oldscan $string \ + [dict get $date year] \ + [dict get $date month] \ + [dict get $date dayOfMonth] + } result] + if { $status != 0 } { + return -code error "unable to convert date-time string \"$string\": $result" + } + + lassign $result parseDate parseTime parseZone parseRel \ + parseWeekday parseOrdinalMonth + + # If the caller supplied a date in the string, update the 'date' dict + # with the value. If the caller didn't specify a time with the date, + # default to midnight. + + if { [llength $parseDate] > 0 } { + lassign $parseDate y m d + if { $y < 100 } { + if { $y >= 39 } { + incr y 1900 + } else { + incr y 2000 + } + } + dict set date era CE + dict set date year $y + dict set date month $m + dict set date dayOfMonth $d + if { $parseTime eq {} } { + set parseTime 0 + } + } + + # If the caller supplied a time zone in the string, it comes back + # as a two-element list; the first element is the number of minutes + # east of Greenwich, and the second is a Daylight Saving Time + # indicator ( 1 == yes, 0 == no, -1 == unknown ). We make it into + # a time zone indicator of +-hhmm. + + if { [llength $parseZone] > 0 } { + lassign $parseZone minEast dstFlag + set timezone [FormatNumericTimeZone \ + [expr { 60 * $minEast + 3600 * $dstFlag }]] + SetupTimeZone $timezone + } + dict set date tzName $timezone + + # Assemble date, time, zone into seconds-from-epoch + + set date [GetJulianDayFromEraYearMonthDay $date[set date {}] 2361222] + if { $parseTime ne {} } { + dict set date secondOfDay $parseTime + } elseif { [llength $parseWeekday] != 0 + || [llength $parseOrdinalMonth] != 0 + || ( [llength $parseRel] != 0 + && ( [lindex $parseRel 0] != 0 + || [lindex $parseRel 1] != 0 ) ) } { + dict set date secondOfDay 0 + } + + dict set date localSeconds \ + [expr { -210866803200 + + ( 86400 * wide([dict get $date julianDay]) ) + + [dict get $date secondOfDay] }] + dict set date tzName $timezone + set date [ConvertLocalToUTC $date[set date {}] $TZData($timezone) 2361222] + set seconds [dict get $date seconds] + + # Do relative times + + if { [llength $parseRel] > 0 } { + lassign $parseRel relMonth relDay relSecond + set seconds [add $seconds \ + $relMonth months $relDay days $relSecond seconds \ + -timezone $timezone -locale $locale] + } + + # Do relative weekday + + if { [llength $parseWeekday] > 0 } { + + lassign $parseWeekday dayOrdinal dayOfWeek + set date2 [GetDateFields $seconds $TZData($timezone) 2361222] + dict set date2 era CE + set jdwkday [WeekdayOnOrBefore $dayOfWeek \ + [expr { [dict get $date2 julianDay] + + 6 }]] + incr jdwkday [expr { 7 * $dayOrdinal }] + if { $dayOrdinal > 0 } { + incr jdwkday -7 + } + dict set date2 secondOfDay \ + [expr { [dict get $date2 localSeconds] % 86400 }] + dict set date2 julianDay $jdwkday + dict set date2 localSeconds \ + [expr { -210866803200 + + ( 86400 * wide([dict get $date2 julianDay]) ) + + [dict get $date secondOfDay] }] + dict set date2 tzName $timezone + set date2 [ConvertLocalToUTC $date2[set date2 {}] $TZData($timezone) \ + 2361222] + set seconds [dict get $date2 seconds] + + } + + # Do relative month + + if { [llength $parseOrdinalMonth] > 0 } { + + lassign $parseOrdinalMonth monthOrdinal monthNumber + if { $monthOrdinal > 0 } { + set monthDiff [expr { $monthNumber - [dict get $date month] }] + if { $monthDiff <= 0 } { + incr monthDiff 12 + } + incr monthOrdinal -1 + } else { + set monthDiff [expr { [dict get $date month] - $monthNumber }] + if { $monthDiff >= 0 } { + incr monthDiff -12 + } + incr monthOrdinal + } + set seconds [add $seconds $monthOrdinal years $monthDiff months \ + -timezone $timezone -locale $locale] + + } + + return $seconds +} + + +#---------------------------------------------------------------------- +# +# ParseClockScanFormat -- +# +# Parses a format string given to [clock scan -format] +# +# Parameters: +# formatString - The format being parsed +# locale - The current locale +# +# Results: +# Constructs and returns a procedure that accepts the +# string being scanned, the base time, and the time zone. +# The procedure will either return the scanned time or +# else throw an error that should be rethrown to the caller +# of [clock scan] +# +# Side effects: +# The given procedure is defined in the ::tcl::clock +# namespace. Scan procedures are not deleted once installed. +# +# Why do we parse dates by defining a procedure to parse them? +# The reason is that by doing so, we have one convenient place to +# cache all the information: the regular expressions that match the +# patterns (which will be compiled), the code that assembles the +# date information, everything lands in one place. In this way, +# when a given format is reused at run time, all the information +# of how to apply it is available in a single place. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::ParseClockScanFormat {formatString locale} { + + # Check whether the format has been parsed previously, and return + # the existing recognizer if it has. + + set procName scanproc'$formatString'$locale + set procName [namespace current]::[string map {: {\:} \\ {\\}} $procName] + if { [namespace which $procName] != {} } { + return $procName + } + + variable DateParseActions + variable TimeParseActions + + # Localize the %x, %X, etc. groups + + set formatString [LocalizeFormat $locale $formatString] + + # Condense whitespace + + regsub -all {[[:space:]]+} $formatString { } formatString + + # Walk through the groups of the format string. In this loop, we + # accumulate: + # - a regular expression that matches the string, + # - the count of capturing brackets in the regexp + # - a set of code that post-processes the fields captured by the regexp, + # - a dictionary whose keys are the names of fields that are present + # in the format string. + + set re {^[[:space:]]*} + set captureCount 0 + set postcode {} + set fieldSet [dict create] + set fieldCount 0 + set postSep {} + set state {} + + foreach c [split $formatString {}] { + switch -exact -- $state { + {} { + if { $c eq "%" } { + set state % + } elseif { $c eq " " } { + append re {[[:space:]]+} + } else { + if { ! [string is alnum $c] } { + append re \\ + } + append re $c + } + } + % { + set state {} + switch -exact -- $c { + % { + append re % + } + { } { + append re "\[\[:space:\]\]*" + } + a - A { # Day of week, in words + set l {} + foreach \ + i {7 1 2 3 4 5 6} \ + abr [mc DAYS_OF_WEEK_ABBREV] \ + full [mc DAYS_OF_WEEK_FULL] { + dict set l [string tolower $abr] $i + dict set l [string tolower $full] $i + incr i + } + lassign [UniquePrefixRegexp $l] regex lookup + append re ( $regex ) + dict set fieldSet dayOfWeek [incr fieldCount] + append postcode "dict set date dayOfWeek \[" \ + "dict get " [list $lookup] " " \ + \[ {string tolower $field} [incr captureCount] \] \ + "\]\n" + } + b - B - h { # Name of month + set i 0 + set l {} + foreach \ + abr [mc MONTHS_ABBREV] \ + full [mc MONTHS_FULL] { + incr i + dict set l [string tolower $abr] $i + dict set l [string tolower $full] $i + } + lassign [UniquePrefixRegexp $l] regex lookup + append re ( $regex ) + dict set fieldSet month [incr fieldCount] + append postcode "dict set date month \[" \ + "dict get " [list $lookup] \ + " " \[ {string tolower $field} \ + [incr captureCount] \] \ + "\]\n" + } + C { # Gregorian century + append re \\s*(\\d\\d?) + dict set fieldSet century [incr fieldCount] + append postcode "dict set date century \[" \ + "::scan \$field" [incr captureCount] " %d" \ + "\]\n" + } + d - e { # Day of month + append re \\s*(\\d\\d?) + dict set fieldSet dayOfMonth [incr fieldCount] + append postcode "dict set date dayOfMonth \[" \ + "::scan \$field" [incr captureCount] " %d" \ + "\]\n" + } + E { # Prefix for locale-specific codes + set state %E + } + g { # ISO8601 2-digit year + append re \\s*(\\d\\d) + dict set fieldSet iso8601YearOfCentury \ + [incr fieldCount] + append postcode \ + "dict set date iso8601YearOfCentury \[" \ + "::scan \$field" [incr captureCount] " %d" \ + "\]\n" + } + G { # ISO8601 4-digit year + append re \\s*(\\d\\d)(\\d\\d) + dict set fieldSet iso8601Century [incr fieldCount] + dict set fieldSet iso8601YearOfCentury \ + [incr fieldCount] + append postcode \ + "dict set date iso8601Century \[" \ + "::scan \$field" [incr captureCount] " %d" \ + "\]\n" \ + "dict set date iso8601YearOfCentury \[" \ + "::scan \$field" [incr captureCount] " %d" \ + "\]\n" + } + H - k { # Hour of day + append re \\s*(\\d\\d?) + dict set fieldSet hour [incr fieldCount] + append postcode "dict set date hour \[" \ + "::scan \$field" [incr captureCount] " %d" \ + "\]\n" + } + I - l { # Hour, AM/PM + append re \\s*(\\d\\d?) + dict set fieldSet hourAMPM [incr fieldCount] + append postcode "dict set date hourAMPM \[" \ + "::scan \$field" [incr captureCount] " %d" \ + "\]\n" + } + j { # Day of year + append re \\s*(\\d\\d?\\d?) + dict set fieldSet dayOfYear [incr fieldCount] + append postcode "dict set date dayOfYear \[" \ + "::scan \$field" [incr captureCount] " %d" \ + "\]\n" + } + J { # Julian Day Number + append re \\s*(\\d+) + dict set fieldSet julianDay [incr fieldCount] + append postcode "dict set date julianDay \[" \ + "::scan \$field" [incr captureCount] " %ld" \ + "\]\n" + } + m - N { # Month number + append re \\s*(\\d\\d?) + dict set fieldSet month [incr fieldCount] + append postcode "dict set date month \[" \ + "::scan \$field" [incr captureCount] " %d" \ + "\]\n" + } + M { # Minute + append re \\s*(\\d\\d?) + dict set fieldSet minute [incr fieldCount] + append postcode "dict set date minute \[" \ + "::scan \$field" [incr captureCount] " %d" \ + "\]\n" + } + n { # Literal newline + append re \\n + } + O { # Prefix for locale numerics + set state %O + } + p - P { # AM/PM indicator + set l [list [string tolower [mc AM]] 0 \ + [string tolower [mc PM]] 1] + lassign [UniquePrefixRegexp $l] regex lookup + append re ( $regex ) + dict set fieldSet amPmIndicator [incr fieldCount] + append postcode "dict set date amPmIndicator \[" \ + "dict get " [list $lookup] " \[string tolower " \ + "\$field" \ + [incr captureCount] \ + "\]\]\n" + } + Q { # Hi, Jeff! + append re {Stardate\s+([-+]?\d+)(\d\d\d)[.](\d)} + incr captureCount + dict set fieldSet seconds [incr fieldCount] + append postcode {dict set date seconds } \[ \ + {ParseStarDate $field} [incr captureCount] \ + { $field} [incr captureCount] \ + { $field} [incr captureCount] \ + \] \n + } + s { # Seconds from Posix Epoch + # This next case is insanely difficult, + # because it's problematic to determine + # whether the field is actually within + # the range of a wide integer. + append re {\s*([-+]?\d+)} + dict set fieldSet seconds [incr fieldCount] + append postcode {dict set date seconds } \[ \ + {ScanWide $field} [incr captureCount] \] \n + } + S { # Second + append re \\s*(\\d\\d?) + dict set fieldSet second [incr fieldCount] + append postcode "dict set date second \[" \ + "::scan \$field" [incr captureCount] " %d" \ + "\]\n" + } + t { # Literal tab character + append re \\t + } + u - w { # Day number within week, 0 or 7 == Sun + # 1=Mon, 6=Sat + append re \\s*(\\d) + dict set fieldSet dayOfWeek [incr fieldCount] + append postcode {::scan $field} [incr captureCount] \ + { %d dow} \n \ + { + if { $dow == 0 } { + set dow 7 + } elseif { $dow > 7 } { + return -code error \ + -errorcode [list CLOCK badDayOfWeek] \ + "day of week is greater than 7" + } + dict set date dayOfWeek $dow + } + } + U { # Week of year. The + # first Sunday of the year is the + # first day of week 01. No scan rule + # uses this group. + append re \\s*\\d\\d? + } + V { # Week of ISO8601 year + + append re \\s*(\\d\\d?) + dict set fieldSet iso8601Week [incr fieldCount] + append postcode "dict set date iso8601Week \[" \ + "::scan \$field" [incr captureCount] " %d" \ + "\]\n" + } + W { # Week of the year (00-53). The first + # Monday of the year is the first day + # of week 01. No scan rule uses this + # group. + append re \\s*\\d\\d? + } + y { # Two-digit Gregorian year + append re \\s*(\\d\\d?) + dict set fieldSet yearOfCentury [incr fieldCount] + append postcode "dict set date yearOfCentury \[" \ + "::scan \$field" [incr captureCount] " %d" \ + "\]\n" + } + Y { # 4-digit Gregorian year + append re \\s*(\\d\\d)(\\d\\d) + dict set fieldSet century [incr fieldCount] + dict set fieldSet yearOfCentury [incr fieldCount] + append postcode \ + "dict set date century \[" \ + "::scan \$field" [incr captureCount] " %d" \ + "\]\n" \ + "dict set date yearOfCentury \[" \ + "::scan \$field" [incr captureCount] " %d" \ + "\]\n" + } + z - Z { # Time zone name + append re {(?:([-+]\d\d(?::?\d\d(?::?\d\d)?)?)|([[:alnum:]]{1,4}))} + dict set fieldSet tzName [incr fieldCount] + append postcode \ + {if } \{ { $field} [incr captureCount] \ + { ne "" } \} { } \{ \n \ + {dict set date tzName $field} \ + $captureCount \n \ + \} { else } \{ \n \ + {dict set date tzName } \[ \ + {ConvertLegacyTimeZone $field} \ + [incr captureCount] \] \n \ + \} \n \ + } + % { # Literal percent character + append re % + } + default { + append re % + if { ! [string is alnum $c] } { + append re \\ + } + append re $c + } + } + } + %E { + switch -exact -- $c { + C { # Locale-dependent era + set d {} + foreach triple [mc LOCALE_ERAS] { + lassign $triple t symbol year + dict set d [string tolower $symbol] $year + } + lassign [UniquePrefixRegexp $d] regex lookup + append re (?: $regex ) + } + E { + set l {} + dict set l [string tolower [mc BCE]] BCE + dict set l [string tolower [mc CE]] CE + dict set l b.c.e. BCE + dict set l c.e. CE + dict set l b.c. BCE + dict set l a.d. CE + lassign [UniquePrefixRegexp $l] regex lookup + append re ( $regex ) + dict set fieldSet era [incr fieldCount] + append postcode "dict set date era \["\ + "dict get " [list $lookup] \ + { } \[ {string tolower $field} \ + [incr captureCount] \] \ + "\]\n" + } + y { # Locale-dependent year of the era + lassign [LocaleNumeralMatcher $locale] regex lookup + append re $regex + incr captureCount + } + default { + append re %E + if { ! [string is alnum $c] } { + append re \\ + } + append re $c + } + } + set state {} + } + %O { + switch -exact -- $c { + d - e { + lassign [LocaleNumeralMatcher $locale] regex lookup + append re $regex + dict set fieldSet dayOfMonth [incr fieldCount] + append postcode "dict set date dayOfMonth \[" \ + "dict get " [list $lookup] " \$field" \ + [incr captureCount] \ + "\]\n" + } + H - k { + lassign [LocaleNumeralMatcher $locale] regex lookup + append re $regex + dict set fieldSet hour [incr fieldCount] + append postcode "dict set date hour \[" \ + "dict get " [list $lookup] " \$field" \ + [incr captureCount] \ + "\]\n" + } + I - l { + lassign [LocaleNumeralMatcher $locale] regex lookup + append re $regex + dict set fieldSet hourAMPM [incr fieldCount] + append postcode "dict set date hourAMPM \[" \ + "dict get " [list $lookup] " \$field" \ + [incr captureCount] \ + "\]\n" + } + m { + lassign [LocaleNumeralMatcher $locale] regex lookup + append re $regex + dict set fieldSet month [incr fieldCount] + append postcode "dict set date month \[" \ + "dict get " [list $lookup] " \$field" \ + [incr captureCount] \ + "\]\n" + } + M { + lassign [LocaleNumeralMatcher $locale] regex lookup + append re $regex + dict set fieldSet minute [incr fieldCount] + append postcode "dict set date minute \[" \ + "dict get " [list $lookup] " \$field" \ + [incr captureCount] \ + "\]\n" + } + S { + lassign [LocaleNumeralMatcher $locale] regex lookup + append re $regex + dict set fieldSet second [incr fieldCount] + append postcode "dict set date second \[" \ + "dict get " [list $lookup] " \$field" \ + [incr captureCount] \ + "\]\n" + } + u - w { + lassign [LocaleNumeralMatcher $locale] regex lookup + append re $regex + dict set fieldSet dayOfWeek [incr fieldCount] + append postcode "set dow \[dict get " [list $lookup] \ + { $field} [incr captureCount] \] \n \ + { + if { $dow == 0 } { + set dow 7 + } elseif { $dow > 7 } { + return -code error \ + -errorcode [list CLOCK badDayOfWeek] \ + "day of week is greater than 7" + } + dict set date dayOfWeek $dow + } + } + y { + lassign [LocaleNumeralMatcher $locale] regex lookup + append re $regex + dict set fieldSet yearOfCentury [incr fieldCount] + append postcode {dict set date yearOfCentury } \[ \ + {dict get } [list $lookup] { $field} \ + [incr captureCount] \] \n + } + default { + append re %O + if { ! [string is alnum $c] } { + append re \\ + } + append re $c + } + } + set state {} + } + } + } + + # Clean up any unfinished format groups + + append re $state \\s*\$ + + # Build the procedure + + set procBody {} + append procBody "variable ::tcl::clock::TZData" \n + append procBody "if \{ !\[ regexp -nocase [list $re] \$string ->" + for { set i 1 } { $i <= $captureCount } { incr i } { + append procBody " " field $i + } + append procBody "\] \} \{" \n + append procBody { + return -code error -errorcode [list CLOCK badInputString] \ + {input string does not match supplied format} + } + append procBody \}\n + append procBody "set date \[dict create\]" \n + append procBody {dict set date tzName $timeZone} \n + append procBody $postcode + append procBody [list set changeover [mc GREGORIAN_CHANGE_DATE]] \n + + # Get time zone if needed + + if { ![dict exists $fieldSet seconds] + && ![dict exists $fieldSet starDate] } { + if { [dict exists $fieldSet tzName] } { + append procBody { + set timeZone [dict get $date tzName] + } + } + append procBody { + ::tcl::clock::SetupTimeZone $timeZone + } + } + + # Add code that gets Julian Day Number from the fields. + + append procBody [MakeParseCodeFromFields $fieldSet $DateParseActions] + + # Get time of day + + append procBody [MakeParseCodeFromFields $fieldSet $TimeParseActions] + + # Assemble seconds, and convert local nominal time to UTC. + + if { ![dict exists $fieldSet seconds] + && ![dict exists $fieldSet starDate] } { + append procBody { + if { [dict get $date julianDay] > 5373484 } { + return -code error -errorcode [list CLOCK dateTooLarge] \ + "requested date too large to represent" + } + dict set date localSeconds \ + [expr { -210866803200 + + ( 86400 * wide([dict get $date julianDay]) ) + + [dict get $date secondOfDay] }] + } + append procBody { + set date [::tcl::clock::ConvertLocalToUTC $date[set date {}] \ + $TZData($timeZone) \ + $changeover] + } + } + + # Return result + + append procBody {return [dict get $date seconds]} \n + + proc $procName { string baseTime timeZone } $procBody + + # puts [list proc $procName [list string baseTime timeZone] $procBody] + + return $procName +} + +#---------------------------------------------------------------------- +# +# LocaleNumeralMatcher -- +# +# Composes a regexp that captures the numerals in the given +# locale, and a dictionary to map them to conventional numerals. +# +# Parameters: +# locale - Name of the current locale +# +# Results: +# Returns a two-element list comprising the regexp and the +# dictionary. +# +# Side effects: +# Caches the result. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::LocaleNumeralMatcher {l} { + + variable LocaleNumeralCache + + if { ![dict exists $LocaleNumeralCache $l] } { + set d {} + set i 0 + set sep \( + foreach n [mc LOCALE_NUMERALS] { + dict set d $n $i + regsub -all {[^[:alnum:]]} $n \\\\& subex + append re $sep $subex + set sep | + incr i + } + append re \) + dict set LocaleNumeralCache $l [list $re $d] + } + return [dict get $LocaleNumeralCache $l] +} + + + +#---------------------------------------------------------------------- +# +# UniquePrefixRegexp -- +# +# Composes a regexp that performs unique-prefix matching. The +# RE matches one of a supplied set of strings, or any unique +# prefix thereof. +# +# Parameters: +# data - List of alternating match-strings and values. +# Match-strings with distinct values are considered +# distinct. +# +# Results: +# Returns a two-element list. The first is a regexp that +# matches any unique prefix of any of the strings. The second +# is a dictionary whose keys are match values from the regexp +# and whose values are the corresponding values from 'data'. +# +# Side effects: +# None. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::UniquePrefixRegexp { data } { + + # The 'successors' dictionary will contain, for each string that + # is a prefix of any key, all characters that may follow that + # prefix. The 'prefixMapping' dictionary will have keys that + # are prefixes of keys and values that correspond to the keys. + + set prefixMapping [dict create] + set successors [dict create {} {}] + + # Walk the key-value pairs + + foreach { key value } $data { + + # Construct all prefixes of the key; + + set prefix {} + foreach char [split $key {}] { + set oldPrefix $prefix + dict set successors $oldPrefix $char {} + append prefix $char + + # Put the prefixes in the 'prefixMapping' and 'successors' + # dictionaries + + dict lappend prefixMapping $prefix $value + if { ![dict exists $successors $prefix] } { + dict set successors $prefix {} + } + } + } + + # Identify those prefixes that designate unique values, and + # those that are the full keys + + set uniquePrefixMapping {} + dict for { key valueList } $prefixMapping { + if { [llength $valueList] == 1 } { + dict set uniquePrefixMapping $key [lindex $valueList 0] + } + } + foreach { key value } $data { + dict set uniquePrefixMapping $key $value + } + + # Construct the re. + + return [list \ + [MakeUniquePrefixRegexp $successors $uniquePrefixMapping {}] \ + $uniquePrefixMapping] +} + +#---------------------------------------------------------------------- +# +# MakeUniquePrefixRegexp -- +# +# Service procedure for 'UniquePrefixRegexp' that constructs +# a regular expresison that matches the unique prefixes. +# +# Parameters: +# successors - Dictionary whose keys are all prefixes +# of keys passed to 'UniquePrefixRegexp' and whose +# values are dictionaries whose keys are the characters +# that may follow those prefixes. +# uniquePrefixMapping - Dictionary whose keys are the unique +# prefixes and whose values are not examined. +# prefixString - Current prefix being processed. +# +# Results: +# Returns a constructed regular expression that matches the set +# of unique prefixes beginning with the 'prefixString'. +# +# Side effects: +# None. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::MakeUniquePrefixRegexp { successors + uniquePrefixMapping + prefixString } { + + # Get the characters that may follow the current prefix string + + set schars [lsort -ascii [dict keys [dict get $successors $prefixString]]] + if { [llength $schars] == 0 } { + return {} + } + + # If there is more than one successor character, or if the current + # prefix is a unique prefix, surround the generated re with non-capturing + # parentheses. + + set re {} + if { [dict exists $uniquePrefixMapping $prefixString] + || [llength $schars] > 1 } { + append re "(?:" + } + + # Generate a regexp that matches the successors. + + set sep "" + foreach { c } $schars { + set nextPrefix $prefixString$c + regsub -all {[^[:alnum:]]} $c \\\\& rechar + append re $sep $rechar \ + [MakeUniquePrefixRegexp \ + $successors $uniquePrefixMapping $nextPrefix] + set sep | + } + + # If the current prefix is a unique prefix, make all following text + # optional. Otherwise, if there is more than one successor character, + # close the non-capturing parentheses. + + if { [dict exists $uniquePrefixMapping $prefixString] } { + append re ")?" + } elseif { [llength $schars] > 1 } { + append re ")" + } + + return $re +} + +#---------------------------------------------------------------------- +# +# MakeParseCodeFromFields -- +# +# Composes Tcl code to extract the Julian Day Number from a +# dictionary containing date fields. +# +# Parameters: +# dateFields -- Dictionary whose keys are fields of the date, +# and whose values are the rightmost positions +# at which those fields appear. +# parseActions -- List of triples: field set, priority, and +# code to emit. Smaller priorities are better, and +# the list must be in ascending order by priority +# +# Results: +# Returns a burst of code that extracts the day number from the +# given date. +# +# Side effects: +# None. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::MakeParseCodeFromFields { dateFields parseActions } { + + set currPrio 999 + set currFieldPos [list] + set currCodeBurst { + error "in ::tcl::clock::MakeParseCodeFromFields: can't happen" + } + + foreach { fieldSet prio parseAction } $parseActions { + + # If we've found an answer that's better than any that follow, + # quit now. + + if { $prio > $currPrio } { + break + } + + # Accumulate the field positions that are used in the current + # field grouping. + + set fieldPos [list] + set ok true + foreach field $fieldSet { + if { ! [dict exists $dateFields $field] } { + set ok 0 + break + } + lappend fieldPos [dict get $dateFields $field] + } + + # Quit if we don't have a complete set of fields + if { !$ok } { + continue + } + + # Determine whether the current answer is better than the last. + + set fPos [lsort -integer -decreasing $fieldPos] + + if { $prio == $currPrio } { + foreach currPos $currFieldPos newPos $fPos { + if { ![string is integer $newPos] + || ![string is integer $currPos] + || $newPos > $currPos } { + break + } + if { $newPos < $currPos } { + set ok 0 + break + } + } + } + if { !$ok } { + continue + } + + # Remember the best possibility for extracting date information + + set currPrio $prio + set currFieldPos $fPos + set currCodeBurst $parseAction + + } + + return $currCodeBurst + +} + +#---------------------------------------------------------------------- +# +# EnterLocale -- +# +# Switch [mclocale] to a given locale if necessary +# +# Parameters: +# locale -- Desired locale +# oldLocaleVar -- Name of a variable in caller's scope that +# tracks the previous locale name. +# +# Results: +# Returns the locale that was previously current. +# +# Side effects: +# Does [mclocale]. If necessary, uses [mcload] to load the +# designated locale's files, and tracks that it has done so +# in the 'McLoaded' variable. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::EnterLocale { locale oldLocaleVar } { + + upvar 1 $oldLocaleVar oldLocale + + variable MsgDir + variable McLoaded + + set oldLocale [mclocale] + if { $locale eq {system} } { + + if { $::tcl_platform(platform) ne {windows} } { + + # On a non-windows platform, the 'system' locale is + # the same as the 'current' locale + + set locale current + } else { + + # On a windows platform, the 'system' locale is + # adapted from the 'current' locale by applying the + # date and time formats from the Control Panel. + # First, load the 'current' locale if it's not yet loaded + + if {![dict exists $McLoaded $oldLocale] } { + mcload $MsgDir + dict set McLoaded $oldLocale {} + } + + # Make a new locale string for the system locale, and + # get the Control Panel information + + set locale ${oldLocale}_windows + if { ![dict exists $McLoaded $locale] } { + LoadWindowsDateTimeFormats $locale + dict set McLoaded $locale {} + } + } + } + if { $locale eq {current}} { + set locale $oldLocale + unset oldLocale + } elseif { $locale eq $oldLocale } { + unset oldLocale + } else { + mclocale $locale + } + if { ![dict exists $McLoaded $locale] } { + mcload $MsgDir + dict set McLoaded $locale {} + } + +} + +#---------------------------------------------------------------------- +# +# LoadWindowsDateTimeFormats -- +# +# Load the date/time formats from the Control Panel in Windows +# and convert them so that they're usable by Tcl. +# +# Parameters: +# locale - Name of the locale in whose message catalog +# the converted formats are to be stored. +# +# Results: +# None. +# +# Side effects: +# Updates the given message catalog with the locale strings. +# +# Presumes that on entry, [mclocale] is set to the current locale, +# so that default strings can be obtained if the Registry query +# fails. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::LoadWindowsDateTimeFormats { locale } { + + # Bail out if we can't find the Registry + + variable NoRegistry + if { [info exists NoRegistry] } return + + if { ![catch { + registry get "HKEY_CURRENT_USER\\Control Panel\\International" \ + sShortDate + } string] } { + set quote {} + set datefmt {} + foreach { unquoted quoted } [split $string '] { + append datefmt $quote [string map { + dddd %A + ddd %a + dd %d + d %e + MMMM %B + MMM %b + MM %m + M %N + yyyy %Y + yy %y + y %y + gg {} + } $unquoted] + if { $quoted eq {} } { + set quote ' + } else { + set quote $quoted + } + } + ::msgcat::mcset $locale DATE_FORMAT $datefmt + } + + if { ![catch { + registry get "HKEY_CURRENT_USER\\Control Panel\\International" \ + sLongDate + } string] } { + set quote {} + set ldatefmt {} + foreach { unquoted quoted } [split $string '] { + append ldatefmt $quote [string map { + dddd %A + ddd %a + dd %d + d %e + MMMM %B + MMM %b + MM %m + M %N + yyyy %Y + yy %y + y %y + gg {} + } $unquoted] + if { $quoted eq {} } { + set quote ' + } else { + set quote $quoted + } + } + ::msgcat::mcset $locale LOCALE_DATE_FORMAT $ldatefmt + } + + if { ![catch { + registry get "HKEY_CURRENT_USER\\Control Panel\\International" \ + sTimeFormat + } string] } { + set quote {} + set timefmt {} + foreach { unquoted quoted } [split $string '] { + append timefmt $quote [string map { + HH %H + H %k + hh %I + h %l + mm %M + m %M + ss %S + s %S + tt %p + t %p + } $unquoted] + if { $quoted eq {} } { + set quote ' + } else { + set quote $quoted + } + } + ::msgcat::mcset $locale TIME_FORMAT $timefmt + } + + catch { + ::msgcat::mcset $locale DATE_TIME_FORMAT "$datefmt $timefmt" + } + catch { + ::msgcat::mcset $locale LOCALE_DATE_TIME_FORMAT "$ldatefmt $timefmt" + } + + return + +} + +#---------------------------------------------------------------------- +# +# LocalizeFormat -- +# +# Map away locale-dependent format groups in a clock format. +# +# Parameters: +# locale -- Current [mclocale] locale, supplied to avoid +# an extra call +# format -- Format supplied to [clock scan] or [clock format] +# +# Results: +# Returns the string with locale-dependent composite format +# groups substituted out. +# +# Side effects: +# None. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::LocalizeFormat { locale format } { + + variable McLoaded + + if { [dict exists $McLoaded $locale FORMAT $format] } { + return [dict get $McLoaded $locale FORMAT $format] + } + set inFormat $format + + # Handle locale-dependent format groups by mapping them out of the format + # string. Note that the order of the [string map] operations is + # significant because later formats can refer to later ones; for example + # %c can refer to %X, which in turn can refer to %T. + + set list { + %% %% + %D %m/%d/%Y + %+ {%a %b %e %H:%M:%S %Z %Y} + } + lappend list %EY [string map $list [mc LOCALE_YEAR_FORMAT]] + lappend list %T [string map $list [mc TIME_FORMAT_24_SECS]] + lappend list %R [string map $list [mc TIME_FORMAT_24]] + lappend list %r [string map $list [mc TIME_FORMAT_12]] + lappend list %X [string map $list [mc TIME_FORMAT]] + lappend list %EX [string map $list [mc LOCALE_TIME_FORMAT]] + lappend list %x [string map $list [mc DATE_FORMAT]] + lappend list %Ex [string map $list [mc LOCALE_DATE_FORMAT]] + lappend list %c [string map $list [mc DATE_TIME_FORMAT]] + lappend list %Ec [string map $list [mc LOCALE_DATE_TIME_FORMAT]] + set format [string map $list $format] + + dict set McLoaded $locale FORMAT $inFormat $format + return $format +} + +#---------------------------------------------------------------------- +# +# FormatNumericTimeZone -- +# +# Formats a time zone as +hhmmss +# +# Parameters: +# z - Time zone in seconds east of Greenwich +# +# Results: +# Returns the time zone formatted in a numeric form +# +# Side effects: +# None. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::FormatNumericTimeZone { z } { + + if { $z < 0 } { + set z [expr { - $z }] + set retval - + } else { + set retval + + } + append retval [::format %02d [expr { $z / 3600 }]] + set z [expr { $z % 3600 }] + append retval [::format %02d [expr { $z / 60 }]] + set z [expr { $z % 60 }] + if { $z != 0 } { + append retval [::format %02d $z] + } + return $retval + +} + +#---------------------------------------------------------------------- +# +# FormatStarDate -- +# +# Formats a date as a StarDate. +# +# Parameters: +# date - Dictionary containing 'year', 'dayOfYear', and +# 'localSeconds' fields. +# +# Results: +# Returns the given date formatted as a StarDate. +# +# Side effects: +# None. +# +# Jeff Hobbs put this in to support an atrocious pun about Tcl being +# "Enterprise ready." Now we're stuck with it. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::FormatStarDate { date } { + + variable Roddenberry + + # Get day of year, zero based + + set doy [expr { [dict get $date dayOfYear] - 1 }] + + # Determine whether the year is a leap year + + set lp [IsGregorianLeapYear $date] + + # Convert day of year to a fractional year + + if { $lp } { + set fractYear [expr { 1000 * $doy / 366 }] + } else { + set fractYear [expr { 1000 * $doy / 365 }] + } + + # Put together the StarDate + + return [::format "Stardate %02d%03d.%1d" \ + [expr { [dict get $date year] - $Roddenberry }] \ + $fractYear \ + [expr { [dict get $date localSeconds] % 86400 + / ( 86400 / 10 ) }]] +} + +#---------------------------------------------------------------------- +# +# ParseStarDate -- +# +# Parses a StarDate +# +# Parameters: +# year - Year from the Roddenberry epoch +# fractYear - Fraction of a year specifiying the day of year. +# fractDay - Fraction of a day +# +# Results: +# Returns a count of seconds from the Posix epoch. +# +# Side effects: +# None. +# +# Jeff Hobbs put this in to support an atrocious pun about Tcl being +# "Enterprise ready." Now we're stuck with it. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::ParseStarDate { year fractYear fractDay } { + + variable Roddenberry + + # Build a tentative date from year and fraction. + + set date [dict create \ + gregorian 1 \ + era CE \ + year [expr { $year + $Roddenberry }] \ + dayOfYear [expr { $fractYear * 365 / 1000 + 1 }]] + set date [GetJulianDayFromGregorianEraYearDay $date[set date {}]] + + # Determine whether the given year is a leap year + + set lp [IsGregorianLeapYear $date] + + # Reconvert the fractional year according to whether the given + # year is a leap year + + if { $lp } { + dict set date dayOfYear \ + [expr { $fractYear * 366 / 1000 + 1 }] + } else { + dict set date dayOfYear \ + [expr { $fractYear * 365 / 1000 + 1 }] + } + dict unset date julianDay + dict unset date gregorian + set date [GetJulianDayFromGregorianEraYearDay $date[set date {}]] + + return [expr { 86400 * [dict get $date julianDay] + - 210866803200 + + ( 86400 / 10 ) * $fractDay }] + +} + +#---------------------------------------------------------------------- +# +# ScanWide -- +# +# Scans a wide integer from an input +# +# Parameters: +# str - String containing a decimal wide integer +# +# Results: +# Returns the string as a pure wide integer. Throws an error if +# the string is misformatted or out of range. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::ScanWide { str } { + set count [::scan $str {%ld %c} result junk] + if { $count != 1 } { + return -code error -errorcode [list CLOCK notAnInteger $str] \ + "\"$str\" is not an integer" + } + if { [incr result 0] != $str } { + return -code error -errorcode [list CLOCK integervalueTooLarge] \ + "integer value too large to represent" + } + return $result +} + +#---------------------------------------------------------------------- +# +# InterpretTwoDigitYear -- +# +# Given a date that contains only the year of the century, +# determines the target value of a two-digit year. +# +# Parameters: +# date - Dictionary containing fields of the date. +# baseTime - Base time relative to which the date is expressed. +# twoDigitField - Name of the field that stores the two-digit year. +# Default is 'yearOfCentury' +# fourDigitField - Name of the field that will receive the four-digit +# year. Default is 'year' +# +# Results: +# Returns the dictionary augmented with the four-digit year, stored in +# the given key. +# +# Side effects: +# None. +# +# The current rule for interpreting a two-digit year is that the year +# shall be between 1937 and 2037, thus staying within the range of a +# 32-bit signed value for time. This rule may change to a sliding +# window in future versions, so the 'baseTime' parameter (which is +# currently ignored) is provided in the procedure signature. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::InterpretTwoDigitYear { date baseTime + { twoDigitField yearOfCentury } + { fourDigitField year } } { + + set yr [dict get $date $twoDigitField] + if { $yr <= 37 } { + dict set date $fourDigitField [expr { $yr + 2000 }] + } else { + dict set date $fourDigitField [expr { $yr + 1900 }] + } + return $date + +} + +#---------------------------------------------------------------------- +# +# AssignBaseYear -- +# +# Places the number of the current year into a dictionary. +# +# Parameters: +# date - Dictionary value to update +# baseTime - Base time from which to extract the year, expressed +# in seconds from the Posix epoch +# timezone - the time zone in which the date is being scanned +# changeover - the Julian Day on which the Gregorian calendar +# was adopted in the target locale. +# +# Results: +# Returns the dictionary with the current year assigned. +# +# Side effects: +# None. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::AssignBaseYear { date baseTime timezone changeover } { + + variable TZData + + # Find the Julian Day Number corresponding to the base time, and + # find the Gregorian year corresponding to that Julian Day. + + set date2 [GetDateFields $baseTime $TZData($timezone) $changeover] + + # Store the converted year + + dict set date era [dict get $date2 era] + dict set date year [dict get $date2 year] + + return $date + +} + +#---------------------------------------------------------------------- +# +# AssignBaseIso8601Year -- +# +# Determines the base year in the ISO8601 fiscal calendar. +# +# Parameters: +# date - Dictionary containing the fields of the date that +# is to be augmented with the base year. +# baseTime - Base time expressed in seconds from the Posix epoch. +# timeZone - Target time zone +# changeover - Julian Day of adoption of the Gregorian calendar in +# the target locale. +# +# Results: +# Returns the given date with "iso8601Year" set to the +# base year. +# +# Side effects: +# None. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::AssignBaseIso8601Year {date baseTime timeZone changeover} { + + variable TZData + + # Find the Julian Day Number corresponding to the base time + + set date2 [GetDateFields $baseTime $TZData($timeZone) $changeover] + + # Calculate the ISO8601 date and transfer the year + + dict set date era CE + dict set date iso8601Year [dict get $date2 iso8601Year] + return $date +} + +#---------------------------------------------------------------------- +# +# AssignBaseMonth -- +# +# Places the number of the current year and month into a +# dictionary. +# +# Parameters: +# date - Dictionary value to update +# baseTime - Time from which the year and month are to be +# obtained, expressed in seconds from the Posix epoch. +# timezone - Name of the desired time zone +# changeover - Julian Day on which the Gregorian calendar was adopted. +# +# Results: +# Returns the dictionary with the base year and month assigned. +# +# Side effects: +# None. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::AssignBaseMonth {date baseTime timezone changeover} { + + variable TZData + + # Find the year and month corresponding to the base time + + set date2 [GetDateFields $baseTime $TZData($timezone) $changeover] + dict set date era [dict get $date2 era] + dict set date year [dict get $date2 year] + dict set date month [dict get $date2 month] + return $date + +} + +#---------------------------------------------------------------------- +# +# AssignBaseWeek -- +# +# Determines the base year and week in the ISO8601 fiscal calendar. +# +# Parameters: +# date - Dictionary containing the fields of the date that +# is to be augmented with the base year and week. +# baseTime - Base time expressed in seconds from the Posix epoch. +# changeover - Julian Day on which the Gregorian calendar was adopted +# in the target locale. +# +# Results: +# Returns the given date with "iso8601Year" set to the +# base year and "iso8601Week" to the week number. +# +# Side effects: +# None. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::AssignBaseWeek {date baseTime timeZone changeover} { + + variable TZData + + # Find the Julian Day Number corresponding to the base time + + set date2 [GetDateFields $baseTime $TZData($timeZone) $changeover] + + # Calculate the ISO8601 date and transfer the year + + dict set date era CE + dict set date iso8601Year [dict get $date2 iso8601Year] + dict set date iso8601Week [dict get $date2 iso8601Week] + return $date +} + +#---------------------------------------------------------------------- +# +# AssignBaseJulianDay -- +# +# Determines the base day for a time-of-day conversion. +# +# Parameters: +# date - Dictionary that is to get the base day +# baseTime - Base time expressed in seconds from the Posix epoch +# changeover - Julian day on which the Gregorian calendar was +# adpoted in the target locale. +# +# Results: +# Returns the given dictionary augmented with a 'julianDay' field +# that contains the base day. +# +# Side effects: +# None. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::AssignBaseJulianDay { date baseTime timeZone changeover } { + + variable TZData + + # Find the Julian Day Number corresponding to the base time + + set date2 [GetDateFields $baseTime $TZData($timeZone) $changeover] + dict set date julianDay [dict get $date2 julianDay] + + return $date +} + +#---------------------------------------------------------------------- +# +# InterpretHMSP -- +# +# Interprets a time in the form "hh:mm:ss am". +# +# Parameters: +# date -- Dictionary containing "hourAMPM", "minute", "second" +# and "amPmIndicator" fields. +# +# Results: +# Returns the number of seconds from local midnight. +# +# Side effects: +# None. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::InterpretHMSP { date } { + + set hr [dict get $date hourAMPM] + if { $hr == 12 } { + set hr 0 + } + if { [dict get $date amPmIndicator] } { + incr hr 12 + } + dict set date hour $hr + return [InterpretHMS $date[set date {}]] + +} + +#---------------------------------------------------------------------- +# +# InterpretHMS -- +# +# Interprets a 24-hour time "hh:mm:ss" +# +# Parameters: +# date -- Dictionary containing the "hour", "minute" and "second" +# fields. +# +# Results: +# Returns the given dictionary augmented with a "secondOfDay" +# field containing the number of seconds from local midnight. +# +# Side effects: +# None. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::InterpretHMS { date } { + + return [expr { ( [dict get $date hour] * 60 + + [dict get $date minute] ) * 60 + + [dict get $date second] }] + +} + +#---------------------------------------------------------------------- +# +# GetSystemTimeZone -- +# +# Determines the system time zone, which is the default for the +# 'clock' command if no other zone is supplied. +# +# Parameters: +# None. +# +# Results: +# Returns the system time zone. +# +# Side effects: +# Stores the sustem time zone in the 'CachedSystemTimeZone' +# variable, since determining it may be an expensive process. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::GetSystemTimeZone {} { + + variable CachedSystemTimeZone + variable TimeZoneBad + + if {[set result [getenv TCL_TZ]] ne {}} { + set timezone $result + } elseif {[set result [getenv TZ]] ne {}} { + set timezone $result + } + if {![info exists timezone]} { + # Cache the time zone only if it was detected by one of the + # expensive methods. + if { [info exists CachedSystemTimeZone] } { + set timezone $CachedSystemTimeZone + } elseif { $::tcl_platform(platform) eq {windows} } { + set timezone [GuessWindowsTimeZone] + } elseif { [file exists /etc/localtime] + && ![catch {ReadZoneinfoFile \ + Tcl/Localtime /etc/localtime}] } { + set timezone :Tcl/Localtime + } else { + set timezone :localtime + } + set CachedSystemTimeZone $timezone + } + if { ![dict exists $TimeZoneBad $timezone] } { + dict set TimeZoneBad $timezone [catch {SetupTimeZone $timezone}] + } + if { [dict get $TimeZoneBad $timezone] } { + return :localtime + } else { + return $timezone + } + +} + +#---------------------------------------------------------------------- +# +# ConvertLegacyTimeZone -- +# +# Given an alphanumeric time zone identifier and the system +# time zone, convert the alphanumeric identifier to an +# unambiguous time zone. +# +# Parameters: +# tzname - Name of the time zone to convert +# +# Results: +# Returns a time zone name corresponding to tzname, but +# in an unambiguous form, generally +hhmm. +# +# This procedure is implemented primarily to allow the parsing of +# RFC822 date/time strings. Processing a time zone name on input +# is not recommended practice, because there is considerable room +# for ambiguity; for instance, is BST Brazilian Standard Time, or +# British Summer Time? +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::ConvertLegacyTimeZone { tzname } { + + variable LegacyTimeZone + + set tzname [string tolower $tzname] + if { ![dict exists $LegacyTimeZone $tzname] } { + return -code error -errorcode [list CLOCK badTZName $tzname] \ + "time zone \"$tzname\" not found" + } else { + return [dict get $LegacyTimeZone $tzname] + } + +} + +#---------------------------------------------------------------------- +# +# SetupTimeZone -- +# +# Given the name or specification of a time zone, sets up +# its in-memory data. +# +# Parameters: +# tzname - Name of a time zone +# +# Results: +# Unless the time zone is ':localtime', sets the TZData array +# to contain the lookup table for local<->UTC conversion. +# Returns an error if the time zone cannot be parsed. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::SetupTimeZone { timezone } { + + variable TZData + + if {! [info exists TZData($timezone)] } { + variable MINWIDE + if { $timezone eq {:localtime} } { + + # Nothing to do, we'll convert using the localtime function + + } elseif { [regexp {^([-+])(\d\d)(?::?(\d\d)(?::?(\d\d))?)?} $timezone \ + -> s hh mm ss] } { + + # Make a fixed offset + + ::scan $hh %d hh + if { $mm eq {} } { + set mm 0 + } else { + ::scan $mm %d mm + } + if { $ss eq {} } { + set ss 0 + } else { + ::scan $ss %d ss + } + set offset [expr { ( $hh * 60 + $mm ) * 60 + $ss }] + if { $s eq {-} } { + set offset [expr { - $offset }] + } + set TZData($timezone) [list [list $MINWIDE $offset -1 $timezone]] + + } elseif { [string index $timezone 0] eq {:} } { + + # Convert using a time zone file + + if { + [catch { + LoadTimeZoneFile [string range $timezone 1 end] + }] + && [catch { + LoadZoneinfoFile [string range $timezone 1 end] + }] + } { + return -code error \ + -errorcode [list CLOCK badTimeZone $timezone] \ + "time zone \"$timezone\" not found" + } + + } elseif { ![catch {ParsePosixTimeZone $timezone} tzfields] } { + + # This looks like a POSIX time zone - try to process it + + if { [catch {ProcessPosixTimeZone $tzfields} data opts] } { + if { [lindex [dict get $opts -errorcode] 0] eq {CLOCK} } { + dict unset opts -errorinfo + } + return -options $opts $data + } else { + set TZData($timezone) $data + } + + } else { + + # We couldn't parse this as a POSIX time zone. Try + # again with a time zone file - this time without a colon + + if { [catch { LoadTimeZoneFile $timezone }] + && [catch { LoadZoneinfoFile $timezone } - opts] } { + dict unset opts -errorinfo + return -options $opts "time zone $timezone not found" + } + set TZData($timezone) $TZData(:$timezone) + } + } + + return +} + +#---------------------------------------------------------------------- +# +# GuessWindowsTimeZone -- +# +# Determines the system time zone on windows. +# +# Parameters: +# None. +# +# Results: +# Returns a time zone specifier that corresponds to the system +# time zone information found in the Registry. +# +# Bugs: +# Fixed dates for DST change are unimplemented at present, because +# no time zone information supplied with Windows actually uses +# them! +# +# On a Windows system where neither $env(TCL_TZ) nor $env(TZ) is +# specified, GuessWindowsTimeZone looks in the Registry for the +# system time zone information. It then attempts to find an entry +# in WinZoneInfo for a time zone that uses the same rules. If +# it finds one, it returns it; otherwise, it constructs a Posix-style +# time zone string and returns that. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::GuessWindowsTimeZone {} { + + variable WinZoneInfo + variable NoRegistry + variable TimeZoneBad + + if { [info exists NoRegistry] } { + return :localtime + } + + # Dredge time zone information out of the registry + + if { [catch { + set rpath HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Control\\TimeZoneInformation + set data [list \ + [expr { -60 + * [registry get $rpath Bias] }] \ + [expr { -60 + * [registry get $rpath StandardBias] }] \ + [expr { -60 \ + * [registry get $rpath DaylightBias] }]] + set stdtzi [registry get $rpath StandardStart] + foreach ind {0 2 14 4 6 8 10 12} { + binary scan $stdtzi @${ind}s val + lappend data $val + } + set daytzi [registry get $rpath DaylightStart] + foreach ind {0 2 14 4 6 8 10 12} { + binary scan $daytzi @${ind}s val + lappend data $val + } + }] } { + + # Missing values in the Registry - bail out + + return :localtime + } + + # Make up a Posix time zone specifier if we can't find one. + # Check here that the tzdata file exists, in case we're running + # in an environment (e.g. starpack) where tzdata is incomplete. + # (Bug 1237907) + + if { [dict exists $WinZoneInfo $data] } { + set tzname [dict get $WinZoneInfo $data] + if { ! [dict exists $TimeZoneBad $tzname] } { + dict set TimeZoneBad $tzname [catch {SetupTimeZone $tzname}] + } + } else { + set tzname {} + } + if { $tzname eq {} || [dict get $TimeZoneBad $tzname] } { + lassign $data \ + bias stdBias dstBias \ + stdYear stdMonth stdDayOfWeek stdDayOfMonth \ + stdHour stdMinute stdSecond stdMillisec \ + dstYear dstMonth dstDayOfWeek dstDayOfMonth \ + dstHour dstMinute dstSecond dstMillisec + set stdDelta [expr { $bias + $stdBias }] + set dstDelta [expr { $bias + $dstBias }] + if { $stdDelta <= 0 } { + set stdSignum + + set stdDelta [expr { - $stdDelta }] + set dispStdSignum - + } else { + set stdSignum - + set dispStdSignum + + } + set hh [::format %02d [expr { $stdDelta / 3600 }]] + set mm [::format %02d [expr { ($stdDelta / 60 ) % 60 }]] + set ss [::format %02d [expr { $stdDelta % 60 }]] + set tzname {} + append tzname < $dispStdSignum $hh $mm > $stdSignum $hh : $mm : $ss + if { $stdMonth >= 0 } { + if { $dstDelta <= 0 } { + set dstSignum + + set dstDelta [expr { - $dstDelta }] + set dispDstSignum - + } else { + set dstSignum - + set dispDstSignum + + } + set hh [::format %02d [expr { $dstDelta / 3600 }]] + set mm [::format %02d [expr { ($dstDelta / 60 ) % 60 }]] + set ss [::format %02d [expr { $dstDelta % 60 }]] + append tzname < $dispDstSignum $hh $mm > $dstSignum $hh : $mm : $ss + if { $dstYear == 0 } { + append tzname ,M $dstMonth . $dstDayOfMonth . $dstDayOfWeek + } else { + # I have not been able to find any locale on which + # Windows converts time zone on a fixed day of the year, + # hence don't know how to interpret the fields. + # If someone can inform me, I'd be glad to code it up. + # For right now, we bail out in such a case. + return :localtime + } + append tzname / [::format %02d $dstHour] \ + : [::format %02d $dstMinute] \ + : [::format %02d $dstSecond] + if { $stdYear == 0 } { + append tzname ,M $stdMonth . $stdDayOfMonth . $stdDayOfWeek + } else { + # I have not been able to find any locale on which + # Windows converts time zone on a fixed day of the year, + # hence don't know how to interpret the fields. + # If someone can inform me, I'd be glad to code it up. + # For right now, we bail out in such a case. + return :localtime + } + append tzname / [::format %02d $stdHour] \ + : [::format %02d $stdMinute] \ + : [::format %02d $stdSecond] + } + dict set WinZoneInfo $data $tzname + } + + return [dict get $WinZoneInfo $data] + +} + +#---------------------------------------------------------------------- +# +# LoadTimeZoneFile -- +# +# Load the data file that specifies the conversion between a +# given time zone and Greenwich. +# +# Parameters: +# fileName -- Name of the file to load +# +# Results: +# None. +# +# Side effects: +# TZData(:fileName) contains the time zone data +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::LoadTimeZoneFile { fileName } { + variable DataDir + variable TZData + + if { [info exists TZData($fileName)] } { + return + } + + # Since an unsafe interp uses the [clock] command in the master, + # this code is security sensitive. Make sure that the path name + # cannot escape the given directory. + + if { ![regexp {^[[.-.][:alpha:]_]+(?:/[[.-.][:alpha:]_]+)*$} $fileName] } { + return -code error \ + -errorcode [list CLOCK badTimeZone $:fileName] \ + "time zone \":$fileName\" not valid" + } + if { [catch { + source -encoding utf-8 [file join $DataDir $fileName] + }] } { + return -code error \ + -errorcode [list CLOCK badTimeZone :$fileName] \ + "time zone \":$fileName\" not found" + } + return +} + +#---------------------------------------------------------------------- +# +# LoadZoneinfoFile -- +# +# Loads a binary time zone information file in Olson format. +# +# Parameters: +# fileName - Relative path name of the file to load. +# +# Results: +# Returns an empty result normally; returns an error if no +# Olson file was found or the file was malformed in some way. +# +# Side effects: +# TZData(:fileName) contains the time zone data +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::LoadZoneinfoFile { fileName } { + + variable ZoneinfoPaths + + # Since an unsafe interp uses the [clock] command in the master, + # this code is security sensitive. Make sure that the path name + # cannot escape the given directory. + + if { ![regexp {^[[.-.][:alpha:]_]+(?:/[[.-.][:alpha:]_]+)*$} $fileName] } { + return -code error \ + -errorcode [list CLOCK badTimeZone $:fileName] \ + "time zone \":$fileName\" not valid" + } + foreach d $ZoneinfoPaths { + set fname [file join $d $fileName] + if { [file readable $fname] && [file isfile $fname] } { + break + } + unset fname + } + ReadZoneinfoFile $fileName $fname +} + +#---------------------------------------------------------------------- +# +# ReadZoneinfoFile -- +# +# Loads a binary time zone information file in Olson format. +# +# Parameters: +# fileName - Name of the time zone (relative path name of the +# file). +# fname - Absolute path name of the file. +# +# Results: +# Returns an empty result normally; returns an error if no +# Olson file was found or the file was malformed in some way. +# +# Side effects: +# TZData(:fileName) contains the time zone data +# +#---------------------------------------------------------------------- + + +proc ::tcl::clock::ReadZoneinfoFile {fileName fname} { + variable MINWIDE + variable TZData + if { ![file exists $fname] } { + return -code error "$fileName not found" + } + + if { [file size $fname] > 262144 } { + return -code error "$fileName too big" + } + + # Suck in all the data from the file + + set f [open $fname r] + fconfigure $f -translation binary + set d [read $f] + close $f + + # The file begins with a magic number, sixteen reserved bytes, + # and then six 4-byte integers giving counts of fileds in the file. + + binary scan $d a4a1x15IIIIII \ + magic version nIsGMT nIsStd nLeap nTime nType nChar + set seek 44 + set ilen 4 + set iformat I + if { $magic != {TZif} } { + return -code error "$fileName not a time zone information file" + } + if { $nType > 255 } { + return -code error "$fileName contains too many time types" + } + # Accept only Posix-style zoneinfo. Sorry, 'leaps' bigots. + if { $nLeap != 0 } { + return -code error "$fileName contains leap seconds" + } + + # In a version 2 file, we use the second part of the file, which + # contains 64-bit transition times. + + if {$version eq "2"} { + set seek [expr {44 + + 5 * $nTime + + 6 * $nType + + 4 * $nLeap + + $nIsStd + + $nIsGMT + + $nChar + }] + binary scan $d @${seek}a4a1x15IIIIII \ + magic version nIsGMT nIsStd nLeap nTime nType nChar + if {$magic ne {TZif}} { + return -code error "seek address $seek miscomputed, magic = $magic" + } + set iformat W + set ilen 8 + incr seek 44 + } + + # Next come ${nTime} transition times, followed by ${nTime} time type + # codes. The type codes are unsigned 1-byte quantities. We insert an + # arbitrary start time in front of the transitions. + + binary scan $d @${seek}${iformat}${nTime}c${nTime} times tempCodes + incr seek [expr { ($ilen + 1) * $nTime }] + set times [linsert $times 0 $MINWIDE] + set codes {} + foreach c $tempCodes { + lappend codes [expr { $c & 0xff }] + } + set codes [linsert $codes 0 0] + + # Next come ${nType} time type descriptions, each of which has an + # offset (seconds east of GMT), a DST indicator, and an index into + # the abbreviation text. + + for { set i 0 } { $i < $nType } { incr i } { + binary scan $d @${seek}Icc gmtOff isDst abbrInd + lappend types [list $gmtOff $isDst $abbrInd] + incr seek 6 + } + + # Next come $nChar characters of time zone name abbreviations, + # which are null-terminated. + # We build them up into a dictionary indexed by character index, + # because that's what's in the indices above. + + binary scan $d @${seek}a${nChar} abbrs + incr seek ${nChar} + set abbrList [split $abbrs \0] + set i 0 + set abbrevs {} + foreach a $abbrList { + for {set j 0} {$j <= [string length $a]} {incr j} { + dict set abbrevs $i [string range $a $j end] + incr i + } + } + + # Package up a list of tuples, each of which contains transition time, + # seconds east of Greenwich, DST flag and time zone abbreviation. + + set r {} + set lastTime $MINWIDE + foreach t $times c $codes { + if { $t < $lastTime } { + return -code error "$fileName has times out of order" + } + set lastTime $t + lassign [lindex $types $c] gmtoff isDst abbrInd + set abbrev [dict get $abbrevs $abbrInd] + lappend r [list $t $gmtoff $isDst $abbrev] + } + + # In a version 2 file, there is also a POSIX-style time zone description + # at the very end of the file. To get to it, skip over + # nLeap leap second values (8 bytes each), + # nIsStd standard/DST indicators and nIsGMT UTC/local indicators. + + if {$version eq {2}} { + set seek [expr {$seek + 8 * $nLeap + $nIsStd + $nIsGMT + 1}] + set last [string first \n $d $seek] + set posix [string range $d $seek [expr {$last-1}]] + if {[llength $posix] > 0} { + set posixFields [ParsePosixTimeZone $posix] + foreach tuple [ProcessPosixTimeZone $posixFields] { + lassign $tuple t gmtoff isDst abbrev + if {$t > $lastTime} { + lappend r $tuple + } + } + } + } + + set TZData(:$fileName) $r + + return +} + +#---------------------------------------------------------------------- +# +# ParsePosixTimeZone -- +# +# Parses the TZ environment variable in Posix form +# +# Parameters: +# tz Time zone specifier to be interpreted +# +# Results: +# Returns a dictionary whose values contain the various pieces of +# the time zone specification. +# +# Side effects: +# None. +# +# Errors: +# Throws an error if the syntax of the time zone is incorrect. +# +# The following keys are present in the dictionary: +# stdName - Name of the time zone when Daylight Saving Time +# is not in effect. +# stdSignum - Sign (+, -, or empty) of the offset from Greenwich +# to the given (non-DST) time zone. + and the empty +# string denote zones west of Greenwich, - denotes east +# of Greenwich; this is contrary to the ISO convention +# but follows Posix. +# stdHours - Hours part of the offset from Greenwich to the given +# (non-DST) time zone. +# stdMinutes - Minutes part of the offset from Greenwich to the +# given (non-DST) time zone. Empty denotes zero. +# stdSeconds - Seconds part of the offset from Greenwich to the +# given (non-DST) time zone. Empty denotes zero. +# dstName - Name of the time zone when DST is in effect, or the +# empty string if the time zone does not observe Daylight +# Saving Time. +# dstSignum, dstHours, dstMinutes, dstSeconds - +# Fields corresponding to stdSignum, stdHours, stdMinutes, +# stdSeconds for the Daylight Saving Time version of the +# time zone. If dstHours is empty, it is presumed to be 1. +# startDayOfYear - The ordinal number of the day of the year on which +# Daylight Saving Time begins. If this field is +# empty, then DST begins on a given month-week-day, +# as below. +# startJ - The letter J, or an empty string. If a J is present in +# this field, then startDayOfYear does not count February 29 +# even in leap years. +# startMonth - The number of the month in which Daylight Saving Time +# begins, supplied if startDayOfYear is empty. If both +# startDayOfYear and startMonth are empty, then US rules +# are presumed. +# startWeekOfMonth - The number of the week in the month in which +# Daylight Saving Time begins, in the range 1-5. +# 5 denotes the last week of the month even in a +# 4-week month. +# startDayOfWeek - The number of the day of the week (Sunday=0, +# Saturday=6) on which Daylight Saving Time begins. +# startHours - The hours part of the time of day at which Daylight +# Saving Time begins. An empty string is presumed to be 2. +# startMinutes - The minutes part of the time of day at which DST begins. +# An empty string is presumed zero. +# startSeconds - The seconds part of the time of day at which DST begins. +# An empty string is presumed zero. +# endDayOfYear, endJ, endMonth, endWeekOfMonth, endDayOfWeek, +# endHours, endMinutes, endSeconds - +# Specify the end of DST in the same way that the start* fields +# specify the beginning of DST. +# +# This procedure serves only to break the time specifier into fields. +# No attempt is made to canonicalize the fields or supply default values. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::ParsePosixTimeZone { tz } { + + if {[regexp -expanded -nocase -- { + ^ + # 1 - Standard time zone name + ([[:alpha:]]+ | <[-+[:alnum:]]+>) + # 2 - Standard time zone offset, signum + ([-+]?) + # 3 - Standard time zone offset, hours + ([[:digit:]]{1,2}) + (?: + # 4 - Standard time zone offset, minutes + : ([[:digit:]]{1,2}) + (?: + # 5 - Standard time zone offset, seconds + : ([[:digit:]]{1,2} ) + )? + )? + (?: + # 6 - DST time zone name + ([[:alpha:]]+ | <[-+[:alnum:]]+>) + (?: + (?: + # 7 - DST time zone offset, signum + ([-+]?) + # 8 - DST time zone offset, hours + ([[:digit:]]{1,2}) + (?: + # 9 - DST time zone offset, minutes + : ([[:digit:]]{1,2}) + (?: + # 10 - DST time zone offset, seconds + : ([[:digit:]]{1,2}) + )? + )? + )? + (?: + , + (?: + # 11 - Optional J in n and Jn form 12 - Day of year + ( J ? ) ( [[:digit:]]+ ) + | M + # 13 - Month number 14 - Week of month 15 - Day of week + ( [[:digit:]] + ) + [.] ( [[:digit:]] + ) + [.] ( [[:digit:]] + ) + ) + (?: + # 16 - Start time of DST - hours + / ( [[:digit:]]{1,2} ) + (?: + # 17 - Start time of DST - minutes + : ( [[:digit:]]{1,2} ) + (?: + # 18 - Start time of DST - seconds + : ( [[:digit:]]{1,2} ) + )? + )? + )? + , + (?: + # 19 - Optional J in n and Jn form 20 - Day of year + ( J ? ) ( [[:digit:]]+ ) + | M + # 21 - Month number 22 - Week of month 23 - Day of week + ( [[:digit:]] + ) + [.] ( [[:digit:]] + ) + [.] ( [[:digit:]] + ) + ) + (?: + # 24 - End time of DST - hours + / ( [[:digit:]]{1,2} ) + (?: + # 25 - End time of DST - minutes + : ( [[:digit:]]{1,2} ) + (?: + # 26 - End time of DST - seconds + : ( [[:digit:]]{1,2} ) + )? + )? + )? + )? + )? + )? + $ + } $tz -> x(stdName) x(stdSignum) x(stdHours) x(stdMinutes) x(stdSeconds) \ + x(dstName) x(dstSignum) x(dstHours) x(dstMinutes) x(dstSeconds) \ + x(startJ) x(startDayOfYear) \ + x(startMonth) x(startWeekOfMonth) x(startDayOfWeek) \ + x(startHours) x(startMinutes) x(startSeconds) \ + x(endJ) x(endDayOfYear) \ + x(endMonth) x(endWeekOfMonth) x(endDayOfWeek) \ + x(endHours) x(endMinutes) x(endSeconds)] } { + + # it's a good timezone + + return [array get x] + + } else { + + return -code error\ + -errorcode [list CLOCK badTimeZone $tz] \ + "unable to parse time zone specification \"$tz\"" + + } + +} + +#---------------------------------------------------------------------- +# +# ProcessPosixTimeZone -- +# +# Handle a Posix time zone after it's been broken out into +# fields. +# +# Parameters: +# z - Dictionary returned from 'ParsePosixTimeZone' +# +# Results: +# Returns time zone information for the 'TZData' array. +# +# Side effects: +# None. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::ProcessPosixTimeZone { z } { + + variable MINWIDE + variable TZData + + # Determine the standard time zone name and seconds east of Greenwich + + set stdName [dict get $z stdName] + if { [string index $stdName 0] eq {<} } { + set stdName [string range $stdName 1 end-1] + } + if { [dict get $z stdSignum] eq {-} } { + set stdSignum +1 + } else { + set stdSignum -1 + } + set stdHours [lindex [::scan [dict get $z stdHours] %d] 0] + if { [dict get $z stdMinutes] ne {} } { + set stdMinutes [lindex [::scan [dict get $z stdMinutes] %d] 0] + } else { + set stdMinutes 0 + } + if { [dict get $z stdSeconds] ne {} } { + set stdSeconds [lindex [::scan [dict get $z stdSeconds] %d] 0] + } else { + set stdSeconds 0 + } + set stdOffset [expr { ( ( $stdHours * 60 + $stdMinutes ) + * 60 + $stdSeconds ) + * $stdSignum }] + set data [list [list $MINWIDE $stdOffset 0 $stdName]] + + # If there's no daylight zone, we're done + + set dstName [dict get $z dstName] + if { $dstName eq {} } { + return $data + } + if { [string index $dstName 0] eq {<} } { + set dstName [string range $dstName 1 end-1] + } + + # Determine the daylight name + + if { [dict get $z dstSignum] eq {-} } { + set dstSignum +1 + } else { + set dstSignum -1 + } + if { [dict get $z dstHours] eq {} } { + set dstOffset [expr { 3600 + $stdOffset }] + } else { + set dstHours [lindex [::scan [dict get $z dstHours] %d] 0] + if { [dict get $z dstMinutes] ne {} } { + set dstMinutes [lindex [::scan [dict get $z dstMinutes] %d] 0] + } else { + set dstMinutes 0 + } + if { [dict get $z dstSeconds] ne {} } { + set dstSeconds [lindex [::scan [dict get $z dstSeconds] %d] 0] + } else { + set dstSeconds 0 + } + set dstOffset [expr { ( ( $dstHours * 60 + $dstMinutes ) + * 60 + $dstSeconds ) + * $dstSignum }] + } + + # Fill in defaults for European or US DST rules + # US start time is the second Sunday in March + # EU start time is the last Sunday in March + # US end time is the first Sunday in November. + # EU end time is the last Sunday in October + + if { [dict get $z startDayOfYear] eq {} + && [dict get $z startMonth] eq {} } { + if {($stdSignum * $stdHours>=0) && ($stdSignum * $stdHours<=12)} { + # EU + dict set z startWeekOfMonth 5 + if {$stdHours>2} { + dict set z startHours 2 + } else { + dict set z startHours [expr {$stdHours+1}] + } + } else { + # US + dict set z startWeekOfMonth 2 + dict set z startHours 2 + } + dict set z startMonth 3 + dict set z startDayOfWeek 0 + dict set z startMinutes 0 + dict set z startSeconds 0 + } + if { [dict get $z endDayOfYear] eq {} + && [dict get $z endMonth] eq {} } { + if {($stdSignum * $stdHours>=0) && ($stdSignum * $stdHours<=12)} { + # EU + dict set z endMonth 10 + dict set z endWeekOfMonth 5 + if {$stdHours>2} { + dict set z endHours 3 + } else { + dict set z endHours [expr {$stdHours+2}] + } + } else { + # US + dict set z endMonth 11 + dict set z endWeekOfMonth 1 + dict set z endHours 2 + } + dict set z endDayOfWeek 0 + dict set z endMinutes 0 + dict set z endSeconds 0 + } + + # Put DST in effect in all years from 1916 to 2099. + + for { set y 1916 } { $y < 2100 } { incr y } { + set startTime [DeterminePosixDSTTime $z start $y] + incr startTime [expr { - wide($stdOffset) }] + set endTime [DeterminePosixDSTTime $z end $y] + incr endTime [expr { - wide($dstOffset) }] + if { $startTime < $endTime } { + lappend data \ + [list $startTime $dstOffset 1 $dstName] \ + [list $endTime $stdOffset 0 $stdName] + } else { + lappend data \ + [list $endTime $stdOffset 0 $stdName] \ + [list $startTime $dstOffset 1 $dstName] + } + } + + return $data + +} + +#---------------------------------------------------------------------- +# +# DeterminePosixDSTTime -- +# +# Determines the time that Daylight Saving Time starts or ends +# from a Posix time zone specification. +# +# Parameters: +# z - Time zone data returned from ParsePosixTimeZone. +# Missing fields are expected to be filled in with +# default values. +# bound - The word 'start' or 'end' +# y - The year for which the transition time is to be determined. +# +# Results: +# Returns the transition time as a count of seconds from +# the epoch. The time is relative to the wall clock, not UTC. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::DeterminePosixDSTTime { z bound y } { + + variable FEB_28 + + # Determine the start or end day of DST + + set date [dict create era CE year $y] + set doy [dict get $z ${bound}DayOfYear] + if { $doy ne {} } { + + # Time was specified as a day of the year + + if { [dict get $z ${bound}J] ne {} + && [IsGregorianLeapYear $y] + && ( $doy > $FEB_28 ) } { + incr doy + } + dict set date dayOfYear $doy + set date [GetJulianDayFromEraYearDay $date[set date {}] 2361222] + } else { + + # Time was specified as a day of the week within a month + + dict set date month [dict get $z ${bound}Month] + dict set date dayOfWeek [dict get $z ${bound}DayOfWeek] + set dowim [dict get $z ${bound}WeekOfMonth] + if { $dowim >= 5 } { + set dowim -1 + } + dict set date dayOfWeekInMonth $dowim + set date [GetJulianDayFromEraYearMonthWeekDay $date[set date {}] 2361222] + + } + + set jd [dict get $date julianDay] + set seconds [expr { wide($jd) * wide(86400) + - wide(210866803200) }] + + set h [dict get $z ${bound}Hours] + if { $h eq {} } { + set h 2 + } else { + set h [lindex [::scan $h %d] 0] + } + set m [dict get $z ${bound}Minutes] + if { $m eq {} } { + set m 0 + } else { + set m [lindex [::scan $m %d] 0] + } + set s [dict get $z ${bound}Seconds] + if { $s eq {} } { + set s 0 + } else { + set s [lindex [::scan $s %d] 0] + } + set tod [expr { ( $h * 60 + $m ) * 60 + $s }] + return [expr { $seconds + $tod }] + +} + +#---------------------------------------------------------------------- +# +# GetLocaleEra -- +# +# Given local time expressed in seconds from the Posix epoch, +# determine localized era and year within the era. +# +# Parameters: +# date - Dictionary that must contain the keys, 'localSeconds', +# whose value is expressed as the appropriate local time; +# and 'year', whose value is the Gregorian year. +# etable - Value of the LOCALE_ERAS key in the message catalogue +# for the target locale. +# +# Results: +# Returns the dictionary, augmented with the keys, 'localeEra' +# and 'localeYear'. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::GetLocaleEra { date etable } { + + set index [BSearch $etable [dict get $date localSeconds]] + if { $index < 0} { + dict set date localeEra \ + [::format %02d [expr { [dict get $date year] / 100 }]] + dict set date localeYear \ + [expr { [dict get $date year] % 100 }] + } else { + dict set date localeEra [lindex $etable $index 1] + dict set date localeYear [expr { [dict get $date year] + - [lindex $etable $index 2] }] + } + return $date + +} + +#---------------------------------------------------------------------- +# +# GetJulianDayFromEraYearDay -- +# +# Given a year, month and day on the Gregorian calendar, determines +# the Julian Day Number beginning at noon on that date. +# +# Parameters: +# date -- A dictionary in which the 'era', 'year', and +# 'dayOfYear' slots are populated. The calendar in use +# is determined by the date itself relative to: +# changeover -- Julian day on which the Gregorian calendar was +# adopted in the current locale. +# +# Results: +# Returns the given dictionary augmented with a 'julianDay' key +# whose value is the desired Julian Day Number, and a 'gregorian' +# key that specifies whether the calendar is Gregorian (1) or +# Julian (0). +# +# Side effects: +# None. +# +# Bugs: +# This code needs to be moved to the C layer. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::GetJulianDayFromEraYearDay {date changeover} { + + # Get absolute year number from the civil year + + switch -exact -- [dict get $date era] { + BCE { + set year [expr { 1 - [dict get $date year] }] + } + CE { + set year [dict get $date year] + } + } + set ym1 [expr { $year - 1 }] + + # Try the Gregorian calendar first. + + dict set date gregorian 1 + set jd [expr { 1721425 + + [dict get $date dayOfYear] + + ( 365 * $ym1 ) + + ( $ym1 / 4 ) + - ( $ym1 / 100 ) + + ( $ym1 / 400 ) }] + + # If the date is before the Gregorian change, use the Julian calendar. + + if { $jd < $changeover } { + dict set date gregorian 0 + set jd [expr { 1721423 + + [dict get $date dayOfYear] + + ( 365 * $ym1 ) + + ( $ym1 / 4 ) }] + } + + dict set date julianDay $jd + return $date +} + +#---------------------------------------------------------------------- +# +# GetJulianDayFromEraYearMonthWeekDay -- +# +# Determines the Julian Day number corresponding to the nth +# given day-of-the-week in a given month. +# +# Parameters: +# date - Dictionary containing the keys, 'era', 'year', 'month' +# 'weekOfMonth', 'dayOfWeek', and 'dayOfWeekInMonth'. +# changeover - Julian Day of adoption of the Gregorian calendar +# +# Results: +# Returns the given dictionary, augmented with a 'julianDay' key. +# +# Side effects: +# None. +# +# Bugs: +# This code needs to be moved to the C layer. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::GetJulianDayFromEraYearMonthWeekDay {date changeover} { + + # Come up with a reference day; either the zeroeth day of the + # given month (dayOfWeekInMonth >= 0) or the seventh day of the + # following month (dayOfWeekInMonth < 0) + + set date2 $date + set week [dict get $date dayOfWeekInMonth] + if { $week >= 0 } { + dict set date2 dayOfMonth 0 + } else { + dict incr date2 month + dict set date2 dayOfMonth 7 + } + set date2 [GetJulianDayFromEraYearMonthDay $date2[set date2 {}] \ + $changeover] + set wd0 [WeekdayOnOrBefore [dict get $date dayOfWeek] \ + [dict get $date2 julianDay]] + dict set date julianDay [expr { $wd0 + 7 * $week }] + return $date + +} + +#---------------------------------------------------------------------- +# +# IsGregorianLeapYear -- +# +# Determines whether a given date represents a leap year in the +# Gregorian calendar. +# +# Parameters: +# date -- The date to test. The fields, 'era', 'year' and 'gregorian' +# must be set. +# +# Results: +# Returns 1 if the year is a leap year, 0 otherwise. +# +# Side effects: +# None. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::IsGregorianLeapYear { date } { + + switch -exact -- [dict get $date era] { + BCE { + set year [expr { 1 - [dict get $date year]}] + } + CE { + set year [dict get $date year] + } + } + if { $year % 4 != 0 } { + return 0 + } elseif { ![dict get $date gregorian] } { + return 1 + } elseif { $year % 400 == 0 } { + return 1 + } elseif { $year % 100 == 0 } { + return 0 + } else { + return 1 + } + +} + +#---------------------------------------------------------------------- +# +# WeekdayOnOrBefore -- +# +# Determine the nearest day of week (given by the 'weekday' +# parameter, Sunday==0) on or before a given Julian Day. +# +# Parameters: +# weekday -- Day of the week +# j -- Julian Day number +# +# Results: +# Returns the Julian Day Number of the desired date. +# +# Side effects: +# None. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::WeekdayOnOrBefore { weekday j } { + + set k [expr { ( $weekday + 6 ) % 7 }] + return [expr { $j - ( $j - $k ) % 7 }] + +} + +#---------------------------------------------------------------------- +# +# BSearch -- +# +# Service procedure that does binary search in several places +# inside the 'clock' command. +# +# Parameters: +# list - List of lists, sorted in ascending order by the +# first elements +# key - Value to search for +# +# Results: +# Returns the index of the greatest element in $list that is less +# than or equal to $key. +# +# Side effects: +# None. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::BSearch { list key } { + + if {[llength $list] == 0} { + return -1 + } + if { $key < [lindex $list 0 0] } { + return -1 + } + + set l 0 + set u [expr { [llength $list] - 1 }] + + while { $l < $u } { + + # At this point, we know that + # $k >= [lindex $list $l 0] + # Either $u == [llength $list] or else $k < [lindex $list $u+1 0] + # We find the midpoint of the interval {l,u} rounded UP, compare + # against it, and set l or u to maintain the invariant. Note + # that the interval shrinks at each step, guaranteeing convergence. + + set m [expr { ( $l + $u + 1 ) / 2 }] + if { $key >= [lindex $list $m 0] } { + set l $m + } else { + set u [expr { $m - 1 }] + } + } + + return $l +} + +#---------------------------------------------------------------------- +# +# clock add -- +# +# Adds an offset to a given time. +# +# Syntax: +# clock add clockval ?count unit?... ?-option value? +# +# Parameters: +# clockval -- Starting time value +# count -- Amount of a unit of time to add +# unit -- Unit of time to add, must be one of: +# years year months month weeks week +# days day hours hour minutes minute +# seconds second +# +# Options: +# -gmt BOOLEAN +# (Deprecated) Flag synonymous with '-timezone :GMT' +# -timezone ZONE +# Name of the time zone in which calculations are to be done. +# -locale NAME +# Name of the locale in which calculations are to be done. +# Used to determine the Gregorian change date. +# +# Results: +# Returns the given time adjusted by the given offset(s) in +# order. +# +# Notes: +# It is possible that adding a number of months or years will adjust +# the day of the month as well. For instance, the time at +# one month after 31 January is either 28 or 29 February, because +# February has fewer than 31 days. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::add { clockval args } { + + if { [llength $args] % 2 != 0 } { + set cmdName "clock add" + return -code error \ + -errorcode [list CLOCK wrongNumArgs] \ + "wrong \# args: should be\ + \"$cmdName clockval ?number units?...\ + ?-gmt boolean? ?-locale LOCALE? ?-timezone ZONE?\"" + } + if { [catch { expr {wide($clockval)} } result] } { + return -code error $result + } + + set offsets {} + set gmt 0 + set locale c + set timezone [GetSystemTimeZone] + + foreach { a b } $args { + + if { [string is integer -strict $a] } { + + lappend offsets $a $b + + } else { + + switch -exact -- $a { + + -g - -gm - -gmt { + set gmt $b + } + -l - -lo - -loc - -loca - -local - -locale { + set locale [string tolower $b] + } + -t - -ti - -tim - -time - -timez - -timezo - -timezon - + -timezone { + set timezone $b + } + default { + return -code error \ + -errorcode [list CLOCK badSwitch $a] \ + "bad switch \"$a\",\ + must be -gmt, -locale or -timezone" + } + } + } + } + + # Check options for validity + + if { [info exists saw(-gmt)] && [info exists saw(-timezone)] } { + return -code error \ + -errorcode [list CLOCK gmtWithTimezone] \ + "cannot use -gmt and -timezone in same call" + } + if { [catch { expr { wide($clockval) } } result] } { + return -code error \ + "expected integer but got \"$clockval\"" + } + if { ![string is boolean $gmt] } { + return -code error \ + "expected boolean value but got \"$gmt\"" + } else { + if { $gmt } { + set timezone :GMT + } + } + + EnterLocale $locale oldLocale + + set changeover [mc GREGORIAN_CHANGE_DATE] + + if {[catch {SetupTimeZone $timezone} retval opts]} { + dict unset opts -errorinfo + return -options $opts $retval + } + + set status [catch { + + foreach { quantity unit } $offsets { + + switch -exact -- $unit { + + years - year { + set clockval \ + [AddMonths [expr { 12 * $quantity }] \ + $clockval $timezone $changeover] + } + months - month { + set clockval [AddMonths $quantity $clockval $timezone \ + $changeover] + } + + weeks - week { + set clockval [AddDays [expr { 7 * $quantity }] \ + $clockval $timezone $changeover] + } + days - day { + set clockval [AddDays $quantity $clockval $timezone \ + $changeover] + } + + hours - hour { + set clockval [expr { 3600 * $quantity + $clockval }] + } + minutes - minute { + set clockval [expr { 60 * $quantity + $clockval }] + } + seconds - second { + set clockval [expr { $quantity + $clockval }] + } + + default { + error "unknown unit \"$unit\", must be \ + years, months, weeks, days, hours, minutes or seconds" \ + "unknown unit \"$unit\", must be \ + years, months, weeks, days, hours, minutes or seconds" \ + [list CLOCK badUnit $unit] + } + } + } + } result opts] + + # Restore the locale + + if { [info exists oldLocale] } { + mclocale $oldLocale + } + + if { $status == 1 } { + if { [lindex [dict get $opts -errorcode] 0] eq {CLOCK} } { + dict unset opts -errorinfo + } + return -options $opts $result + } else { + return $clockval + } + +} + +#---------------------------------------------------------------------- +# +# AddMonths -- +# +# Add a given number of months to a given clock value in a given +# time zone. +# +# Parameters: +# months - Number of months to add (may be negative) +# clockval - Seconds since the epoch before the operation +# timezone - Time zone in which the operation is to be performed +# +# Results: +# Returns the new clock value as a number of seconds since +# the epoch. +# +# Side effects: +# None. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::AddMonths { months clockval timezone changeover } { + + variable DaysInRomanMonthInCommonYear + variable DaysInRomanMonthInLeapYear + variable TZData + + # Convert the time to year, month, day, and fraction of day. + + set date [GetDateFields $clockval $TZData($timezone) $changeover] + dict set date secondOfDay [expr { [dict get $date localSeconds] + % 86400 }] + dict set date tzName $timezone + + # Add the requisite number of months + + set m [dict get $date month] + incr m $months + incr m -1 + set delta [expr { $m / 12 }] + set mm [expr { $m % 12 }] + dict set date month [expr { $mm + 1 }] + dict incr date year $delta + + # If the date doesn't exist in the current month, repair it + + if { [IsGregorianLeapYear $date] } { + set hath [lindex $DaysInRomanMonthInLeapYear $mm] + } else { + set hath [lindex $DaysInRomanMonthInCommonYear $mm] + } + if { [dict get $date dayOfMonth] > $hath } { + dict set date dayOfMonth $hath + } + + # Reconvert to a number of seconds + + set date [GetJulianDayFromEraYearMonthDay \ + $date[set date {}]\ + $changeover] + dict set date localSeconds \ + [expr { -210866803200 + + ( 86400 * wide([dict get $date julianDay]) ) + + [dict get $date secondOfDay] }] + set date [ConvertLocalToUTC $date[set date {}] $TZData($timezone) \ + $changeover] + + return [dict get $date seconds] + +} + +#---------------------------------------------------------------------- +# +# AddDays -- +# +# Add a given number of days to a given clock value in a given +# time zone. +# +# Parameters: +# days - Number of days to add (may be negative) +# clockval - Seconds since the epoch before the operation +# timezone - Time zone in which the operation is to be performed +# changeover - Julian Day on which the Gregorian calendar was adopted +# in the target locale. +# +# Results: +# Returns the new clock value as a number of seconds since +# the epoch. +# +# Side effects: +# None. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::AddDays { days clockval timezone changeover } { + + variable TZData + + # Convert the time to Julian Day + + set date [GetDateFields $clockval $TZData($timezone) $changeover] + dict set date secondOfDay [expr { [dict get $date localSeconds] + % 86400 }] + dict set date tzName $timezone + + # Add the requisite number of days + + dict incr date julianDay $days + + # Reconvert to a number of seconds + + dict set date localSeconds \ + [expr { -210866803200 + + ( 86400 * wide([dict get $date julianDay]) ) + + [dict get $date secondOfDay] }] + set date [ConvertLocalToUTC $date[set date {}] $TZData($timezone) \ + $changeover] + + return [dict get $date seconds] + +} + +#---------------------------------------------------------------------- +# +# mc -- +# +# Wrapper around ::msgcat::mc that caches the result according +# to the locale. +# +# Parameters: +# Accepts the name of the message to retrieve. +# +# Results: +# Returns the message text. +# +# Side effects: +# Caches the message text. +# +# Notes: +# Only the single-argument version of [mc] is supported. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::mc { name } { + variable McLoaded + set Locale [mclocale] + if { [dict exists $McLoaded $Locale $name] } { + return [dict get $McLoaded $Locale $name] + } else { + set val [::msgcat::mc $name] + dict set McLoaded $Locale $name $val + return $val + } +} + +#---------------------------------------------------------------------- +# +# ClearCaches -- +# +# Clears all caches to reclaim the memory used in [clock] +# +# Parameters: +# None. +# +# Results: +# None. +# +# Side effects: +# Caches are cleared. +# +#---------------------------------------------------------------------- + +proc ::tcl::clock::ClearCaches {} { + + variable FormatProc + variable LocaleNumeralCache + variable McLoaded + variable CachedSystemTimeZone + variable TimeZoneBad + + foreach p [info procs [namespace current]::scanproc'*] { + rename $p {} + } + foreach p [info procs [namespace current]::formatproc'*] { + rename $p {} + } + + catch {unset FormatProc} + set LocaleNumeralCache {} + set McLoaded {} + catch {unset CachedSystemTimeZone} + set TimeZoneBad {} + InitTZData + +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/ascii.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/ascii.enc new file mode 100644 index 00000000..e0320b8c --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/ascii.enc @@ -0,0 +1,20 @@ +# Encoding file: ascii, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/big5.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/big5.enc new file mode 100644 index 00000000..26179f43 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/big5.enc @@ -0,0 +1,1516 @@ +# Encoding file: big5, multi-byte +M +003F 0 89 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +0080008100820083008400850086008700880089008A008B008C008D008E008F +0090009100920093009400950096009700980099009A009B009C009D009E009F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +A1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3000FF0C30013002FF0E2022FF1BFF1AFF1FFF01FE3020262025FE50FF64FE52 +00B7FE54FE55FE56FE57FF5C2013FE312014FE33FFFDFE34FE4FFF08FF09FE35 +FE36FF5BFF5DFE37FE3830143015FE39FE3A30103011FE3BFE3C300A300BFE3D +FE3E30083009FE3FFE40300C300DFE41FE42300E300FFE43FE44FE59FE5A0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000FE5BFE5CFE5DFE5E20182019201C201D301D301E20352032FF03FF06FF0A +203B00A7300325CB25CF25B325B225CE2606260525C725C625A125A025BD25BC +32A32105203EFFFDFF3FFFFDFE49FE4AFE4DFE4EFE4BFE4CFE5FFE60FE61FF0B +FF0D00D700F700B1221AFF1CFF1EFF1D226622672260221E22522261FE62FE63 +FE64FE65FE66223C2229222A22A52220221F22BF33D233D1222B222E22352234 +26402642264126092191219321902192219621972199219822252223FFFD0000 +A2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +FFFDFF0FFF3CFF0400A5301200A200A3FF05FF2021032109FE69FE6AFE6B33D5 +339C339D339E33CE33A1338E338F33C400B05159515B515E515D5161516355E7 +74E97CCE25812582258325842585258625872588258F258E258D258C258B258A +2589253C2534252C2524251C2594250025022595250C251025142518256D0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000256E2570256F2550255E256A256125E225E325E525E4257125722573FF10 +FF11FF12FF13FF14FF15FF16FF17FF18FF192160216121622163216421652166 +216721682169302130223023302430253026302730283029FFFD5344FFFDFF21 +FF22FF23FF24FF25FF26FF27FF28FF29FF2AFF2BFF2CFF2DFF2EFF2FFF30FF31 +FF32FF33FF34FF35FF36FF37FF38FF39FF3AFF41FF42FF43FF44FF45FF46FF47 +FF48FF49FF4AFF4BFF4CFF4DFF4EFF4FFF50FF51FF52FF53FF54FF55FF560000 +A3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +FF57FF58FF59FF5A039103920393039403950396039703980399039A039B039C +039D039E039F03A003A103A303A403A503A603A703A803A903B103B203B303B4 +03B503B603B703B803B903BA03BB03BC03BD03BE03BF03C003C103C303C403C5 +03C603C703C803C931053106310731083109310A310B310C310D310E310F0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00003110311131123113311431153116311731183119311A311B311C311D311E +311F312031213122312331243125312631273128312902D902C902CA02C702CB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +A4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4E004E594E014E034E434E5D4E864E8C4EBA513F5165516B51E052005201529B +53155341535C53C84E094E0B4E084E0A4E2B4E3851E14E454E484E5F4E5E4E8E +4EA15140520352FA534353C953E3571F58EB5915592759735B505B515B535BF8 +5C0F5C225C385C715DDD5DE55DF15DF25DF35DFE5E725EFE5F0B5F13624D0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004E114E104E0D4E2D4E304E394E4B5C394E884E914E954E924E944EA24EC1 +4EC04EC34EC64EC74ECD4ECA4ECB4EC4514351415167516D516E516C519751F6 +52065207520852FB52FE52FF53165339534853475345535E538453CB53CA53CD +58EC5929592B592A592D5B545C115C245C3A5C6F5DF45E7B5EFF5F145F155FC3 +62086236624B624E652F6587659765A465B965E566F0670867286B206B626B79 +6BCB6BD46BDB6C0F6C34706B722A7236723B72477259725B72AC738B4E190000 +A5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4E164E154E144E184E3B4E4D4E4F4E4E4EE54ED84ED44ED54ED64ED74EE34EE4 +4ED94EDE514551445189518A51AC51F951FA51F8520A52A0529F530553065317 +531D4EDF534A534953615360536F536E53BB53EF53E453F353EC53EE53E953E8 +53FC53F853F553EB53E653EA53F253F153F053E553ED53FB56DB56DA59160000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000592E5931597459765B555B835C3C5DE85DE75DE65E025E035E735E7C5F01 +5F185F175FC5620A625362546252625165A565E6672E672C672A672B672D6B63 +6BCD6C116C106C386C416C406C3E72AF7384738974DC74E67518751F75287529 +7530753175327533758B767D76AE76BF76EE77DB77E277F3793A79BE7A747ACB +4E1E4E1F4E524E534E694E994EA44EA64EA54EFF4F094F194F0A4F154F0D4F10 +4F114F0F4EF24EF64EFB4EF04EF34EFD4F014F0B514951475146514851680000 +A6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5171518D51B0521752115212520E521652A3530853215320537053715409540F +540C540A54105401540B54045411540D54085403540E5406541256E056DE56DD +573357305728572D572C572F57295919591A59375938598459785983597D5979 +598259815B575B585B875B885B855B895BFA5C165C795DDE5E065E765E740000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005F0F5F1B5FD95FD6620E620C620D62106263625B6258653665E965E865EC +65ED66F266F36709673D6734673167356B216B646B7B6C166C5D6C576C596C5F +6C606C506C556C616C5B6C4D6C4E7070725F725D767E7AF97C737CF87F367F8A +7FBD80018003800C80128033807F8089808B808C81E381EA81F381FC820C821B +821F826E8272827E866B8840884C8863897F96214E324EA84F4D4F4F4F474F57 +4F5E4F344F5B4F554F304F504F514F3D4F3A4F384F434F544F3C4F464F630000 +A7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4F5C4F604F2F4F4E4F364F594F5D4F484F5A514C514B514D517551B651B75225 +52245229522A522852AB52A952AA52AC532353735375541D542D541E543E5426 +544E542754465443543354485442541B5429544A5439543B5438542E54355436 +5420543C54405431542B541F542C56EA56F056E456EB574A57515740574D0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005747574E573E5750574F573B58EF593E599D599259A8599E59A359995996 +598D59A45993598A59A55B5D5B5C5B5A5B5B5B8C5B8B5B8F5C2C5C405C415C3F +5C3E5C905C915C945C8C5DEB5E0C5E8F5E875E8A5EF75F045F1F5F645F625F77 +5F795FD85FCC5FD75FCD5FF15FEB5FF85FEA6212621162846297629662806276 +6289626D628A627C627E627962736292626F6298626E62956293629162866539 +653B653865F166F4675F674E674F67506751675C6756675E6749674667600000 +A8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +675367576B656BCF6C426C5E6C996C816C886C896C856C9B6C6A6C7A6C906C70 +6C8C6C686C966C926C7D6C836C726C7E6C746C866C766C8D6C946C986C827076 +707C707D707872627261726072C472C27396752C752B75377538768276EF77E3 +79C179C079BF7A767CFB7F5580968093809D8098809B809A80B2826F82920000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000828B828D898B89D28A008C378C468C558C9D8D648D708DB38EAB8ECA8F9B +8FB08FC28FC68FC58FC45DE1909190A290AA90A690A3914991C691CC9632962E +9631962A962C4E264E564E734E8B4E9B4E9E4EAB4EAC4F6F4F9D4F8D4F734F7F +4F6C4F9B4F8B4F864F834F704F754F884F694F7B4F964F7E4F8F4F914F7A5154 +51525155516951775176517851BD51FD523B52385237523A5230522E52365241 +52BE52BB5352535453535351536653775378537953D653D453D7547354750000 +A9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5496547854955480547B5477548454925486547C549054715476548C549A5462 +5468548B547D548E56FA57835777576A5769576157665764577C591C59495947 +59485944595459BE59BB59D459B959AE59D159C659D059CD59CB59D359CA59AF +59B359D259C55B5F5B645B635B975B9A5B985B9C5B995B9B5C1A5C485C450000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005C465CB75CA15CB85CA95CAB5CB15CB35E185E1A5E165E155E1B5E115E78 +5E9A5E975E9C5E955E965EF65F265F275F295F805F815F7F5F7C5FDD5FE05FFD +5FF55FFF600F6014602F60356016602A6015602160276029602B601B62166215 +623F623E6240627F62C962CC62C462BF62C262B962D262DB62AB62D362D462CB +62C862A862BD62BC62D062D962C762CD62B562DA62B162D862D662D762C662AC +62CE653E65A765BC65FA66146613660C66066602660E6600660F6615660A0000 +AA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6607670D670B676D678B67956771679C677367776787679D6797676F6770677F +6789677E67906775679A6793677C676A67726B236B666B676B7F6C136C1B6CE3 +6CE86CF36CB16CCC6CE56CB36CBD6CBE6CBC6CE26CAB6CD56CD36CB86CC46CB9 +6CC16CAE6CD76CC56CF16CBF6CBB6CE16CDB6CCA6CAC6CEF6CDC6CD66CE00000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007095708E7092708A7099722C722D723872487267726972C072CE72D972D7 +72D073A973A8739F73AB73A5753D759D7599759A768476C276F276F477E577FD +793E7940794179C979C87A7A7A797AFA7CFE7F547F8C7F8B800580BA80A580A2 +80B180A180AB80A980B480AA80AF81E581FE820D82B3829D829982AD82BD829F +82B982B182AC82A582AF82B882A382B082BE82B7864E8671521D88688ECB8FCE +8FD48FD190B590B890B190B691C791D195779580961C9640963F963B96440000 +AB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +964296B996E89752975E4E9F4EAD4EAE4FE14FB54FAF4FBF4FE04FD14FCF4FDD +4FC34FB64FD84FDF4FCA4FD74FAE4FD04FC44FC24FDA4FCE4FDE4FB751575192 +519151A0524E5243524A524D524C524B524752C752C952C352C1530D5357537B +539A53DB54AC54C054A854CE54C954B854A654B354C754C254BD54AA54C10000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000054C454C854AF54AB54B154BB54A954A754BF56FF5782578B57A057A357A2 +57CE57AE579359555951594F594E595059DC59D859FF59E359E85A0359E559EA +59DA59E65A0159FB5B695BA35BA65BA45BA25BA55C015C4E5C4F5C4D5C4B5CD9 +5CD25DF75E1D5E255E1F5E7D5EA05EA65EFA5F085F2D5F655F885F855F8A5F8B +5F875F8C5F896012601D60206025600E6028604D60706068606260466043606C +606B606A6064624162DC6316630962FC62ED630162EE62FD630762F162F70000 +AC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +62EF62EC62FE62F463116302653F654565AB65BD65E26625662D66206627662F +661F66286631662466F767FF67D367F167D467D067EC67B667AF67F567E967EF +67C467D167B467DA67E567B867CF67DE67F367B067D967E267DD67D26B6A6B83 +6B866BB56BD26BD76C1F6CC96D0B6D326D2A6D416D256D0C6D316D1E6D170000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006D3B6D3D6D3E6D366D1B6CF56D396D276D386D296D2E6D356D0E6D2B70AB +70BA70B370AC70AF70AD70B870AE70A472307272726F727472E972E072E173B7 +73CA73BB73B273CD73C073B3751A752D754F754C754E754B75AB75A475A575A2 +75A3767876867687768876C876C676C376C5770176F976F87709770B76FE76FC +770777DC78027814780C780D794679497948794779B979BA79D179D279CB7A7F +7A817AFF7AFD7C7D7D027D057D007D097D077D047D067F387F8E7FBF80040000 +AD +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8010800D8011803680D680E580DA80C380C480CC80E180DB80CE80DE80E480DD +81F4822282E78303830582E382DB82E6830482E58302830982D282D782F18301 +82DC82D482D182DE82D382DF82EF830686508679867B867A884D886B898189D4 +8A088A028A038C9E8CA08D748D738DB48ECD8ECC8FF08FE68FE28FEA8FE50000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008FED8FEB8FE48FE890CA90CE90C190C3914B914A91CD95829650964B964C +964D9762976997CB97ED97F3980198A898DB98DF999699994E584EB3500C500D +50234FEF502650254FF8502950165006503C501F501A501250114FFA50005014 +50284FF15021500B501950184FF34FEE502D502A4FFE502B5009517C51A451A5 +51A251CD51CC51C651CB5256525C5254525B525D532A537F539F539D53DF54E8 +55105501553754FC54E554F2550654FA551454E954ED54E1550954EE54EA0000 +AE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +54E65527550754FD550F5703570457C257D457CB57C35809590F59575958595A +5A115A185A1C5A1F5A1B5A1359EC5A205A235A295A255A0C5A095B6B5C585BB0 +5BB35BB65BB45BAE5BB55BB95BB85C045C515C555C505CED5CFD5CFB5CEA5CE8 +5CF05CF65D015CF45DEE5E2D5E2B5EAB5EAD5EA75F315F925F915F9060590000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006063606560506055606D6069606F6084609F609A608D6094608C60856096 +624762F3630862FF634E633E632F635563426346634F6349633A6350633D632A +632B6328634D634C65486549659965C165C566426649664F66436652664C6645 +664166F867146715671768216838684868466853683968426854682968B36817 +684C6851683D67F468506840683C6843682A68456813681868416B8A6B896BB7 +6C236C276C286C266C246CF06D6A6D956D886D876D666D786D776D596D930000 +AF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6D6C6D896D6E6D5A6D746D696D8C6D8A6D796D856D656D9470CA70D870E470D9 +70C870CF7239727972FC72F972FD72F872F7738673ED740973EE73E073EA73DE +7554755D755C755A755975BE75C575C775B275B375BD75BC75B975C275B8768B +76B076CA76CD76CE7729771F7720772877E9783078277838781D783478370000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007825782D7820781F7832795579507960795F7956795E795D7957795A79E4 +79E379E779DF79E679E979D87A847A887AD97B067B117C897D217D177D0B7D0A +7D207D227D147D107D157D1A7D1C7D0D7D197D1B7F3A7F5F7F947FC57FC18006 +8018801580198017803D803F80F1810280F0810580ED80F4810680F880F38108 +80FD810A80FC80EF81ED81EC82008210822A822B8228822C82BB832B83528354 +834A83388350834983358334834F833283398336831783408331832883430000 +B0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8654868A86AA869386A486A9868C86A3869C8870887788818882887D88798A18 +8A108A0E8A0C8A158A0A8A178A138A168A0F8A118C488C7A8C798CA18CA28D77 +8EAC8ED28ED48ECF8FB1900190068FF790008FFA8FF490038FFD90058FF89095 +90E190DD90E29152914D914C91D891DD91D791DC91D995839662966396610000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000965B965D96649658965E96BB98E299AC9AA89AD89B259B329B3C4E7E507A +507D505C50475043504C505A504950655076504E5055507550745077504F500F +506F506D515C519551F0526A526F52D252D952D852D55310530F5319533F5340 +533E53C366FC5546556A55665544555E55615543554A55315556554F5555552F +55645538552E555C552C55635533554155575708570B570957DF5805580A5806 +57E057E457FA5802583557F757F9592059625A365A415A495A665A6A5A400000 +B1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5A3C5A625A5A5A465A4A5B705BC75BC55BC45BC25BBF5BC65C095C085C075C60 +5C5C5C5D5D075D065D0E5D1B5D165D225D115D295D145D195D245D275D175DE2 +5E385E365E335E375EB75EB85EB65EB55EBE5F355F375F575F6C5F695F6B5F97 +5F995F9E5F985FA15FA05F9C607F60A3608960A060A860CB60B460E660BD0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000060C560BB60B560DC60BC60D860D560C660DF60B860DA60C7621A621B6248 +63A063A76372639663A263A563776367639863AA637163A963896383639B636B +63A863846388639963A163AC6392638F6380637B63696368637A655D65566551 +65596557555F654F655865556554659C659B65AC65CF65CB65CC65CE665D665A +666466686666665E66F952D7671B688168AF68A2689368B5687F687668B168A7 +689768B0688368C468AD688668856894689D68A8689F68A168826B326BBA0000 +B2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6BEB6BEC6C2B6D8E6DBC6DF36DD96DB26DE16DCC6DE46DFB6DFA6E056DC76DCB +6DAF6DD16DAE6DDE6DF96DB86DF76DF56DC56DD26E1A6DB56DDA6DEB6DD86DEA +6DF16DEE6DE86DC66DC46DAA6DEC6DBF6DE670F97109710A70FD70EF723D727D +7281731C731B73167313731973877405740A7403740673FE740D74E074F60000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000074F7751C75227565756675627570758F75D475D575B575CA75CD768E76D4 +76D276DB7737773E773C77367738773A786B7843784E79657968796D79FB7A92 +7A957B207B287B1B7B2C7B267B197B1E7B2E7C927C977C957D467D437D717D2E +7D397D3C7D407D307D337D447D2F7D427D327D317F3D7F9E7F9A7FCC7FCE7FD2 +801C804A8046812F81168123812B81298130812482028235823782368239838E +839E8398837883A2839683BD83AB8392838A8393838983A08377837B837C0000 +B3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +838683A786555F6A86C786C086B686C486B586C686CB86B186AF86C98853889E +888888AB88928896888D888B8993898F8A2A8A1D8A238A258A318A2D8A1F8A1B +8A228C498C5A8CA98CAC8CAB8CA88CAA8CA78D678D668DBE8DBA8EDB8EDF9019 +900D901A90179023901F901D90109015901E9020900F90229016901B90140000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000090E890ED90FD915791CE91F591E691E391E791ED91E99589966A96759673 +96789670967496769677966C96C096EA96E97AE07ADF980298039B5A9CE59E75 +9E7F9EA59EBB50A2508D508550995091508050965098509A670051F152725274 +5275526952DE52DD52DB535A53A5557B558055A7557C558A559D55985582559C +55AA55945587558B558355B355AE559F553E55B2559A55BB55AC55B1557E5589 +55AB5599570D582F582A58345824583058315821581D582058F958FA59600000 +B4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5A775A9A5A7F5A925A9B5AA75B735B715BD25BCC5BD35BD05C0A5C0B5C315D4C +5D505D345D475DFD5E455E3D5E405E435E7E5ECA5EC15EC25EC45F3C5F6D5FA9 +5FAA5FA860D160E160B260B660E0611C612360FA611560F060FB60F4616860F1 +610E60F6610961006112621F624963A3638C63CF63C063E963C963C663CD0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000063D263E363D063E163D663ED63EE637663F463EA63DB645263DA63F9655E +6566656265636591659065AF666E667066746676666F6691667A667E667766FE +66FF671F671D68FA68D568E068D868D7690568DF68F568EE68E768F968D268F2 +68E368CB68CD690D6912690E68C968DA696E68FB6B3E6B3A6B3D6B986B966BBC +6BEF6C2E6C2F6C2C6E2F6E386E546E216E326E676E4A6E206E256E236E1B6E5B +6E586E246E566E6E6E2D6E266E6F6E346E4D6E3A6E2C6E436E1D6E3E6ECB0000 +B5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6E896E196E4E6E636E446E726E696E5F7119711A7126713071217136716E711C +724C728472807336732573347329743A742A743374227425743574367434742F +741B7426742875257526756B756A75E275DB75E375D975D875DE75E0767B767C +7696769376B476DC774F77ED785D786C786F7A0D7A087A0B7A057A007A980000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007A977A967AE57AE37B497B567B467B507B527B547B4D7B4B7B4F7B517C9F +7CA57D5E7D507D687D557D2B7D6E7D727D617D667D627D707D7355847FD47FD5 +800B8052808581558154814B8151814E81398146813E814C815381748212821C +83E9840383F8840D83E083C5840B83C183EF83F183F48457840A83F0840C83CC +83FD83F283CA8438840E840483DC840783D483DF865B86DF86D986ED86D486DB +86E486D086DE885788C188C288B1898389968A3B8A608A558A5E8A3C8A410000 +B6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8A548A5B8A508A468A348A3A8A368A568C618C828CAF8CBC8CB38CBD8CC18CBB +8CC08CB48CB78CB68CBF8CB88D8A8D858D818DCE8DDD8DCB8DDA8DD18DCC8DDB +8DC68EFB8EF88EFC8F9C902E90359031903890329036910290F5910990FE9163 +916591CF9214921592239209921E920D9210920792119594958F958B95910000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000095939592958E968A968E968B967D96859686968D9672968496C196C596C4 +96C696C796EF96F297CC98059806980898E798EA98EF98E998F298ED99AE99AD +9EC39ECD9ED14E8250AD50B550B250B350C550BE50AC50B750BB50AF50C7527F +5277527D52DF52E652E452E252E3532F55DF55E855D355E655CE55DC55C755D1 +55E355E455EF55DA55E155C555C655E555C957125713585E585158585857585A +5854586B584C586D584A58625852584B59675AC15AC95ACC5ABE5ABD5ABC0000 +B7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5AB35AC25AB25D695D6F5E4C5E795EC95EC85F125F595FAC5FAE611A610F6148 +611F60F3611B60F961016108614E614C6144614D613E61346127610D61066137 +622162226413643E641E642A642D643D642C640F641C6414640D643664166417 +6406656C659F65B06697668966876688669666846698668D67036994696D0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000695A697769606954697569306982694A6968696B695E695369796986695D +6963695B6B476B726BC06BBF6BD36BFD6EA26EAF6ED36EB66EC26E906E9D6EC7 +6EC56EA56E986EBC6EBA6EAB6ED16E966E9C6EC46ED46EAA6EA76EB4714E7159 +7169716471497167715C716C7166714C7165715E714671687156723A72527337 +7345733F733E746F745A7455745F745E7441743F7459745B745C757675787600 +75F0760175F275F175FA75FF75F475F376DE76DF775B776B7766775E77630000 +B8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7779776A776C775C77657768776277EE788E78B078977898788C7889787C7891 +7893787F797A797F7981842C79BD7A1C7A1A7A207A147A1F7A1E7A9F7AA07B77 +7BC07B607B6E7B677CB17CB37CB57D937D797D917D817D8F7D5B7F6E7F697F6A +7F727FA97FA87FA480568058808680848171817081788165816E8173816B0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008179817A81668205824784828477843D843184758466846B8449846C845B +843C8435846184638469846D8446865E865C865F86F9871387088707870086FE +86FB870287038706870A885988DF88D488D988DC88D888DD88E188CA88D588D2 +899C89E38A6B8A728A738A668A698A708A878A7C8A638AA08A718A858A6D8A62 +8A6E8A6C8A798A7B8A3E8A688C628C8A8C898CCA8CC78CC88CC48CB28CC38CC2 +8CC58DE18DDF8DE88DEF8DF38DFA8DEA8DE48DE68EB28F038F098EFE8F0A0000 +B9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8F9F8FB2904B904A905390429054903C905590509047904F904E904D9051903E +904191129117916C916A916991C9923792579238923D9240923E925B924B9264 +925192349249924D92459239923F925A959896989694969596CD96CB96C996CA +96F796FB96F996F6975697749776981098119813980A9812980C98FC98F40000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000098FD98FE99B399B199B49AE19CE99E829F0E9F139F2050E750EE50E550D6 +50ED50DA50D550CF50D150F150CE50E9516251F352835282533153AD55FE5600 +561B561755FD561456065609560D560E55F75616561F5608561055F657185716 +5875587E58835893588A58795885587D58FD592559225924596A59695AE15AE6 +5AE95AD75AD65AD85AE35B755BDE5BE75BE15BE55BE65BE85BE25BE45BDF5C0D +5C625D845D875E5B5E635E555E575E545ED35ED65F0A5F465F705FB961470000 +BA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +613F614B617761626163615F615A61586175622A64876458645464A46478645F +647A645164676434646D647B657265A165D765D666A266A8669D699C69A86995 +69C169AE69D369CB699B69B769BB69AB69B469D069CD69AD69CC69A669C369A3 +6B496B4C6C336F336F146EFE6F136EF46F296F3E6F206F2C6F0F6F026F220000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006EFF6EEF6F066F316F386F326F236F156F2B6F2F6F886F2A6EEC6F016EF2 +6ECC6EF771947199717D718A71847192723E729272967344735074647463746A +7470746D750475917627760D760B7609761376E176E37784777D777F776178C1 +789F78A778B378A978A3798E798F798D7A2E7A317AAA7AA97AED7AEF7BA17B95 +7B8B7B757B977B9D7B947B8F7BB87B877B847CB97CBD7CBE7DBB7DB07D9C7DBD +7DBE7DA07DCA7DB47DB27DB17DBA7DA27DBF7DB57DB87DAD7DD27DC77DAC0000 +BB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7F707FE07FE17FDF805E805A808781508180818F8188818A817F818281E781FA +82078214821E824B84C984BF84C684C48499849E84B2849C84CB84B884C084D3 +849084BC84D184CA873F871C873B872287258734871887558737872988F38902 +88F488F988F888FD88E8891A88EF8AA68A8C8A9E8AA38A8D8AA18A938AA40000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008AAA8AA58AA88A988A918A9A8AA78C6A8C8D8C8C8CD38CD18CD28D6B8D99 +8D958DFC8F148F128F158F138FA390609058905C90639059905E9062905D905B +91199118911E917591789177917492789280928592989296927B9293929C92A8 +927C929195A195A895A995A395A595A49699969C969B96CC96D29700977C9785 +97F69817981898AF98B199039905990C990999C19AAF9AB09AE69B419B429CF4 +9CF69CF39EBC9F3B9F4A5104510050FB50F550F9510251085109510551DC0000 +BC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +528752885289528D528A52F053B2562E563B56395632563F563456295653564E +565756745636562F56305880589F589E58B3589C58AE58A958A6596D5B095AFB +5B0B5AF55B0C5B085BEE5BEC5BE95BEB5C645C655D9D5D945E625E5F5E615EE2 +5EDA5EDF5EDD5EE35EE05F485F715FB75FB561766167616E615D615561820000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000617C6170616B617E61A7619061AB618E61AC619A61A4619461AE622E6469 +646F6479649E64B26488649064B064A56493649564A9649264AE64AD64AB649A +64AC649964A264B365756577657866AE66AB66B466B16A236A1F69E86A016A1E +6A1969FD6A216A136A0A69F36A026A0569ED6A116B506B4E6BA46BC56BC66F3F +6F7C6F846F516F666F546F866F6D6F5B6F786F6E6F8E6F7A6F706F646F976F58 +6ED56F6F6F606F5F719F71AC71B171A87256729B734E73577469748B74830000 +BD +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +747E7480757F76207629761F7624762676217622769A76BA76E4778E7787778C +7791778B78CB78C578BA78CA78BE78D578BC78D07A3F7A3C7A407A3D7A377A3B +7AAF7AAE7BAD7BB17BC47BB47BC67BC77BC17BA07BCC7CCA7DE07DF47DEF7DFB +7DD87DEC7DDD7DE87DE37DDA7DDE7DE97D9E7DD97DF27DF97F757F777FAF0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007FE98026819B819C819D81A0819A81988517853D851A84EE852C852D8513 +851185238521851484EC852584FF850687828774877687608766877887688759 +8757874C8753885B885D89108907891289138915890A8ABC8AD28AC78AC48A95 +8ACB8AF88AB28AC98AC28ABF8AB08AD68ACD8AB68AB98ADB8C4C8C4E8C6C8CE0 +8CDE8CE68CE48CEC8CED8CE28CE38CDC8CEA8CE18D6D8D9F8DA38E2B8E108E1D +8E228E0F8E298E1F8E218E1E8EBA8F1D8F1B8F1F8F298F268F2A8F1C8F1E0000 +BE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8F259069906E9068906D90779130912D9127913191879189918B918392C592BB +92B792EA92AC92E492C192B392BC92D292C792F092B295AD95B1970497069707 +97099760978D978B978F9821982B981C98B3990A99139912991899DD99D099DF +99DB99D199D599D299D99AB79AEE9AEF9B279B459B449B779B6F9D069D090000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009D039EA99EBE9ECE58A89F5251125118511451105115518051AA51DD5291 +529352F35659566B5679566956645678566A566856655671566F566C56625676 +58C158BE58C758C5596E5B1D5B345B785BF05C0E5F4A61B2619161A9618A61CD +61B661BE61CA61C8623064C564C164CB64BB64BC64DA64C464C764C264CD64BF +64D264D464BE657466C666C966B966C466C766B86A3D6A386A3A6A596A6B6A58 +6A396A446A626A616A4B6A476A356A5F6A486B596B776C056FC26FB16FA10000 +BF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6FC36FA46FC16FA76FB36FC06FB96FB66FA66FA06FB471BE71C971D071D271C8 +71D571B971CE71D971DC71C371C47368749C74A37498749F749E74E2750C750D +76347638763A76E776E577A0779E779F77A578E878DA78EC78E779A67A4D7A4E +7A467A4C7A4B7ABA7BD97C117BC97BE47BDB7BE17BE97BE67CD57CD67E0A0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007E117E087E1B7E237E1E7E1D7E097E107F797FB27FF07FF17FEE802881B3 +81A981A881FB820882588259854A855985488568856985438549856D856A855E +8783879F879E87A2878D8861892A89328925892B892189AA89A68AE68AFA8AEB +8AF18B008ADC8AE78AEE8AFE8B018B028AF78AED8AF38AF68AFC8C6B8C6D8C93 +8CF48E448E318E348E428E398E358F3B8F2F8F388F338FA88FA6907590749078 +9072907C907A913491929320933692F89333932F932292FC932B9304931A0000 +C0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +9310932693219315932E931995BB96A796A896AA96D5970E97119716970D9713 +970F975B975C9766979898309838983B9837982D9839982499109928991E991B +9921991A99ED99E299F19AB89ABC9AFB9AED9B289B919D159D239D269D289D12 +9D1B9ED89ED49F8D9F9C512A511F5121513252F5568E56805690568556870000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000568F58D558D358D158CE5B305B2A5B245B7A5C375C685DBC5DBA5DBD5DB8 +5E6B5F4C5FBD61C961C261C761E661CB6232623464CE64CA64D864E064F064E6 +64EC64F164E264ED6582658366D966D66A806A946A846AA26A9C6ADB6AA36A7E +6A976A906AA06B5C6BAE6BDA6C086FD86FF16FDF6FE06FDB6FE46FEB6FEF6F80 +6FEC6FE16FE96FD56FEE6FF071E771DF71EE71E671E571ED71EC71F471E07235 +72467370737274A974B074A674A876467642764C76EA77B377AA77B077AC0000 +C1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +77A777AD77EF78F778FA78F478EF790179A779AA7A577ABF7C077C0D7BFE7BF7 +7C0C7BE07CE07CDC7CDE7CE27CDF7CD97CDD7E2E7E3E7E467E377E327E437E2B +7E3D7E317E457E417E347E397E487E357E3F7E2F7F447FF37FFC807180728070 +806F807381C681C381BA81C281C081BF81BD81C981BE81E88209827185AA0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008584857E859C8591859485AF859B858785A8858A866787C087D187B387D2 +87C687AB87BB87BA87C887CB893B893689448938893D89AC8B0E8B178B198B1B +8B0A8B208B1D8B048B108C418C3F8C738CFA8CFD8CFC8CF88CFB8DA88E498E4B +8E488E4A8F448F3E8F428F458F3F907F907D9084908190829080913991A3919E +919C934D938293289375934A9365934B9318937E936C935B9370935A935495CA +95CB95CC95C895C696B196B896D6971C971E97A097D3984698B699359A010000 +C2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +99FF9BAE9BAB9BAA9BAD9D3B9D3F9E8B9ECF9EDE9EDC9EDD9EDB9F3E9F4B53E2 +569556AE58D958D85B385F5D61E3623364F464F264FE650664FA64FB64F765B7 +66DC67266AB36AAC6AC36ABB6AB86AC26AAE6AAF6B5F6B786BAF7009700B6FFE +70066FFA7011700F71FB71FC71FE71F87377737574A774BF7515765676580000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000765277BD77BF77BB77BC790E79AE7A617A627A607AC47AC57C2B7C277C2A +7C1E7C237C217CE77E547E557E5E7E5A7E617E527E597F487FF97FFB80778076 +81CD81CF820A85CF85A985CD85D085C985B085BA85B985A687EF87EC87F287E0 +898689B289F48B288B398B2C8B2B8C508D058E598E638E668E648E5F8E558EC0 +8F498F4D90879083908891AB91AC91D09394938A939693A293B393AE93AC93B0 +9398939A939795D495D695D095D596E296DC96D996DB96DE972497A397A60000 +C3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +97AD97F9984D984F984C984E985398BA993E993F993D992E99A59A0E9AC19B03 +9B069B4F9B4E9B4D9BCA9BC99BFD9BC89BC09D519D5D9D609EE09F159F2C5133 +56A558DE58DF58E25BF59F905EEC61F261F761F661F56500650F66E066DD6AE5 +6ADD6ADA6AD3701B701F7028701A701D701570187206720D725872A273780000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000737A74BD74CA74E375877586765F766177C7791979B17A6B7A697C3E7C3F +7C387C3D7C377C407E6B7E6D7E797E697E6A7F857E737FB67FB97FB881D885E9 +85DD85EA85D585E485E585F787FB8805880D87F987FE8960895F8956895E8B41 +8B5C8B588B498B5A8B4E8B4F8B468B598D088D0A8E7C8E728E878E768E6C8E7A +8E748F548F4E8FAD908A908B91B191AE93E193D193DF93C393C893DC93DD93D6 +93E293CD93D893E493D793E895DC96B496E3972A9727976197DC97FB985E0000 +C4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +9858985B98BC994599499A169A199B0D9BE89BE79BD69BDB9D899D619D729D6A +9D6C9E929E979E939EB452F856A856B756B656B456BC58E45B405B435B7D5BF6 +5DC961F861FA65186514651966E667276AEC703E703070327210737B74CF7662 +76657926792A792C792B7AC77AF67C4C7C437C4D7CEF7CF08FAE7E7D7E7C0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007E827F4C800081DA826685FB85F9861185FA8606860B8607860A88148815 +896489BA89F88B708B6C8B668B6F8B5F8B6B8D0F8D0D8E898E818E858E8291B4 +91CB9418940393FD95E1973098C49952995199A89A2B9A309A379A359C139C0D +9E799EB59EE89F2F9F5F9F639F615137513856C156C056C259145C6C5DCD61FC +61FE651D651C659566E96AFB6B046AFA6BB2704C721B72A774D674D4766977D3 +7C507E8F7E8C7FBC8617862D861A882388228821881F896A896C89BD8B740000 +C5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8B778B7D8D138E8A8E8D8E8B8F5F8FAF91BA942E94339435943A94389432942B +95E297389739973297FF9867986599579A459A439A409A3E9ACF9B549B519C2D +9C259DAF9DB49DC29DB89E9D9EEF9F199F5C9F669F67513C513B56C856CA56C9 +5B7F5DD45DD25F4E61FF65246B0A6B6170517058738074E4758A766E766C0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000079B37C607C5F807E807D81DF8972896F89FC8B808D168D178E918E938F61 +9148944494519452973D973E97C397C1986B99559A559A4D9AD29B1A9C499C31 +9C3E9C3B9DD39DD79F349F6C9F6A9F9456CC5DD662006523652B652A66EC6B10 +74DA7ACA7C647C637C657E937E967E9481E28638863F88318B8A9090908F9463 +946094649768986F995C9A5A9A5B9A579AD39AD49AD19C549C579C569DE59E9F +9EF456D158E9652C705E7671767277D77F507F888836883988628B938B920000 +C6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8B9682778D1B91C0946A97429748974497C698709A5F9B229B589C5F9DF99DFA +9E7C9E7D9F079F779F725EF36B1670637C6C7C6E883B89C08EA191C194729470 +9871995E9AD69B239ECC706477DA8B9A947797C99A629A657E9C8B9C8EAA91C5 +947D947E947C9C779C789EF78C54947F9E1A72289A6A9B319E1B9E1E7C720000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000030FE309D309E3005304130423043304430453046304730483049304A304B +304C304D304E304F3050305130523053305430553056305730583059305A305B +305C305D305E305F3060306130623063306430653066306730683069306A306B +306C306D306E306F3070307130723073307430753076307730783079307A307B +307C307D307E307F3080308130823083308430853086308730883089308A308B +308C308D308E308F309030913092309330A130A230A330A430A530A630A70000 +C7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +30A830A930AA30AB30AC30AD30AE30AF30B030B130B230B330B430B530B630B7 +30B830B930BA30BB30BC30BD30BE30BF30C030C130C230C330C430C530C630C7 +30C830C930CA30CB30CC30CD30CE30CF30D030D130D230D330D430D530D630D7 +30D830D930DA30DB30DC30DD30DE30DF30E030E130E230E330E430E530E60000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000030E730E830E930EA30EB30EC30ED30EE30EF30F030F130F230F330F430F5 +30F60414041504010416041704180419041A041B041C04230424042504260427 +04280429042A042B042C042D042E042F04300431043204330434043504510436 +043704380439043A043B043C043D043E043F0440044104420443044404450446 +044704480449044A044B044C044D044E044F2460246124622463246424652466 +246724682469247424752476247724782479247A247B247C247D000000000000 +C9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4E424E5C51F5531A53824E074E0C4E474E8D56D7FA0C5C6E5F734E0F51874E0E +4E2E4E934EC24EC94EC8519852FC536C53B957205903592C5C105DFF65E16BB3 +6BCC6C14723F4E314E3C4EE84EDC4EE94EE14EDD4EDA520C531C534C57225723 +5917592F5B815B845C125C3B5C745C735E045E805E825FC9620962506C150000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006C366C436C3F6C3B72AE72B0738A79B8808A961E4F0E4F184F2C4EF54F14 +4EF14F004EF74F084F1D4F024F054F224F134F044EF44F1251B1521352095210 +52A65322531F534D538A540756E156DF572E572A5734593C5980597C5985597B +597E5977597F5B565C155C255C7C5C7A5C7B5C7E5DDF5E755E845F025F1A5F74 +5FD55FD45FCF625C625E626462616266626262596260625A626565EF65EE673E +67396738673B673A673F673C67336C186C466C526C5C6C4F6C4A6C546C4B0000 +CA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6C4C7071725E72B472B5738E752A767F7A757F518278827C8280827D827F864D +897E909990979098909B909496229624962096234F564F3B4F624F494F534F64 +4F3E4F674F524F5F4F414F584F2D4F334F3F4F61518F51B9521C521E522152AD +52AE530953635372538E538F54305437542A545454455419541C542554180000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000543D544F544154285424544756EE56E756E557415745574C5749574B5752 +5906594059A6599859A05997598E59A25990598F59A759A15B8E5B925C285C2A +5C8D5C8F5C885C8B5C895C925C8A5C865C935C955DE05E0A5E0E5E8B5E895E8C +5E885E8D5F055F1D5F785F765FD25FD15FD05FED5FE85FEE5FF35FE15FE45FE3 +5FFA5FEF5FF75FFB60005FF4623A6283628C628E628F629462876271627B627A +6270628162886277627D62726274653765F065F465F365F265F5674567470000 +CB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +67596755674C6748675D674D675A674B6BD06C196C1A6C786C676C6B6C846C8B +6C8F6C716C6F6C696C9A6C6D6C876C956C9C6C666C736C656C7B6C8E7074707A +726372BF72BD72C372C672C172BA72C573957397739373947392753A75397594 +75957681793D80348095809980908092809C8290828F8285828E829182930000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000828A828382848C788FC98FBF909F90A190A5909E90A790A096309628962F +962D4E334F984F7C4F854F7D4F804F874F764F744F894F844F774F4C4F974F6A +4F9A4F794F814F784F904F9C4F944F9E4F924F824F954F6B4F6E519E51BC51BE +5235523252335246523152BC530A530B533C539253945487547F548154915482 +5488546B547A547E5465546C54745466548D546F546154605498546354675464 +56F756F9576F5772576D576B57715770577657805775577B5773577457620000 +CC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5768577D590C594559B559BA59CF59CE59B259CC59C159B659BC59C359D659B1 +59BD59C059C859B459C75B625B655B935B955C445C475CAE5CA45CA05CB55CAF +5CA85CAC5C9F5CA35CAD5CA25CAA5CA75C9D5CA55CB65CB05CA65E175E145E19 +5F285F225F235F245F545F825F7E5F7D5FDE5FE5602D602660196032600B0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006034600A60176033601A601E602C6022600D6010602E60136011600C6009 +601C6214623D62AD62B462D162BE62AA62B662CA62AE62B362AF62BB62A962B0 +62B8653D65A865BB660965FC66046612660865FB6603660B660D660565FD6611 +661066F6670A6785676C678E67926776677B6798678667846774678D678C677A +679F679167996783677D67816778677967946B256B806B7E6BDE6C1D6C936CEC +6CEB6CEE6CD96CB66CD46CAD6CE76CB76CD06CC26CBA6CC36CC66CED6CF20000 +CD +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6CD26CDD6CB46C8A6C9D6C806CDE6CC06D306CCD6CC76CB06CF96CCF6CE96CD1 +709470987085709370867084709170967082709A7083726A72D672CB72D872C9 +72DC72D272D472DA72CC72D173A473A173AD73A673A273A073AC739D74DD74E8 +753F7540753E758C759876AF76F376F176F076F577F877FC77F977FB77FA0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000077F77942793F79C57A787A7B7AFB7C757CFD8035808F80AE80A380B880B5 +80AD822082A082C082AB829A8298829B82B582A782AE82BC829E82BA82B482A8 +82A182A982C282A482C382B682A28670866F866D866E8C568FD28FCB8FD38FCD +8FD68FD58FD790B290B490AF90B390B09639963D963C963A96434FCD4FC54FD3 +4FB24FC94FCB4FC14FD44FDC4FD94FBB4FB34FDB4FC74FD64FBA4FC04FB94FEC +5244524952C052C2533D537C539753965399539854BA54A154AD54A554CF0000 +CE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +54C3830D54B754AE54D654B654C554C654A0547054BC54A254BE547254DE54B0 +57B5579E579F57A4578C5797579D579B57945798578F579957A5579A579558F4 +590D595359E159DE59EE5A0059F159DD59FA59FD59FC59F659E459F259F759DB +59E959F359F559E059FE59F459ED5BA85C4C5CD05CD85CCC5CD75CCB5CDB0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005CDE5CDA5CC95CC75CCA5CD65CD35CD45CCF5CC85CC65CCE5CDF5CF85DF9 +5E215E225E235E205E245EB05EA45EA25E9B5EA35EA55F075F2E5F565F866037 +603960546072605E6045605360476049605B604C60406042605F602460446058 +6066606E6242624362CF630D630B62F5630E630362EB62F9630F630C62F862F6 +63006313631462FA631562FB62F06541654365AA65BF6636662166326635661C +662666226633662B663A661D66346639662E670F671067C167F267C867BA0000 +CF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +67DC67BB67F867D867C067B767C567EB67E467DF67B567CD67B367F767F667EE +67E367C267B967CE67E767F067B267FC67C667ED67CC67AE67E667DB67FA67C9 +67CA67C367EA67CB6B286B826B846BB66BD66BD86BE06C206C216D286D346D2D +6D1F6D3C6D3F6D126D0A6CDA6D336D046D196D3A6D1A6D116D006D1D6D420000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006D016D186D376D036D0F6D406D076D206D2C6D086D226D096D1070B7709F +70BE70B170B070A170B470B570A972417249724A726C72707273726E72CA72E4 +72E872EB72DF72EA72E672E3738573CC73C273C873C573B973B673B573B473EB +73BF73C773BE73C373C673B873CB74EC74EE752E7547754875A775AA767976C4 +7708770377047705770A76F776FB76FA77E777E878067811781278057810780F +780E780978037813794A794C794B7945794479D579CD79CF79D679CE7A800000 +D0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7A7E7AD17B007B017C7A7C787C797C7F7C807C817D037D087D017F587F917F8D +7FBE8007800E800F8014803780D880C780E080D180C880C280D080C580E380D9 +80DC80CA80D580C980CF80D780E680CD81FF8221829482D982FE82F9830782E8 +830082D5833A82EB82D682F482EC82E182F282F5830C82FB82F682F082EA0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000082E482E082FA82F382ED86778674867C86738841884E8867886A886989D3 +8A048A078D728FE38FE18FEE8FE090F190BD90BF90D590C590BE90C790CB90C8 +91D491D39654964F96519653964A964E501E50055007501350225030501B4FF5 +4FF450335037502C4FF64FF75017501C502050275035502F5031500E515A5194 +519351CA51C451C551C851CE5261525A5252525E525F5255526252CD530E539E +552654E25517551254E754F354E4551A54FF5504550854EB5511550554F10000 +D1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +550A54FB54F754F854E0550E5503550B5701570257CC583257D557D257BA57C6 +57BD57BC57B857B657BF57C757D057B957C1590E594A5A195A165A2D5A2E5A15 +5A0F5A175A0A5A1E5A335B6C5BA75BAD5BAC5C035C565C545CEC5CFF5CEE5CF1 +5CF75D005CF95E295E285EA85EAE5EAA5EAC5F335F305F67605D605A60670000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000604160A26088608060926081609D60836095609B60976087609C608E6219 +624662F263106356632C634463456336634363E46339634B634A633C63296341 +6334635863546359632D63476333635A63516338635763406348654A654665C6 +65C365C465C2664A665F6647665167126713681F681A684968326833683B684B +684F68166831681C6835682B682D682F684E68446834681D6812681468266828 +682E684D683A682568206B2C6B2F6B2D6B316B346B6D80826B886BE66BE40000 +D2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6BE86BE36BE26BE76C256D7A6D636D646D766D0D6D616D926D586D626D6D6D6F +6D916D8D6DEF6D7F6D866D5E6D676D606D976D706D7C6D5F6D826D986D2F6D68 +6D8B6D7E6D806D846D166D836D7B6D7D6D756D9070DC70D370D170DD70CB7F39 +70E270D770D270DE70E070D470CD70C570C670C770DA70CE70E1724272780000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000072777276730072FA72F472FE72F672F372FB730173D373D973E573D673BC +73E773E373E973DC73D273DB73D473DD73DA73D773D873E874DE74DF74F474F5 +7521755B755F75B075C175BB75C475C075BF75B675BA768A76C9771D771B7710 +771377127723771177157719771A772277277823782C78227835782F7828782E +782B782178297833782A78317954795B794F795C79537952795179EB79EC79E0 +79EE79ED79EA79DC79DE79DD7A867A897A857A8B7A8C7A8A7A877AD87B100000 +D3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7B047B137B057B0F7B087B0A7B0E7B097B127C847C917C8A7C8C7C887C8D7C85 +7D1E7D1D7D117D0E7D187D167D137D1F7D127D0F7D0C7F5C7F617F5E7F607F5D +7F5B7F967F927FC37FC27FC08016803E803980FA80F280F980F5810180FB8100 +8201822F82258333832D83448319835183258356833F83418326831C83220000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008342834E831B832A8308833C834D8316832483208337832F832983478345 +834C8353831E832C834B832783488653865286A286A88696868D8691869E8687 +86978686868B869A868586A5869986A186A786958698868E869D869086948843 +8844886D88758876887288808871887F886F8883887E8874887C8A128C478C57 +8C7B8CA48CA38D768D788DB58DB78DB68ED18ED38FFE8FF590028FFF8FFB9004 +8FFC8FF690D690E090D990DA90E390DF90E590D890DB90D790DC90E491500000 +D4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +914E914F91D591E291DA965C965F96BC98E39ADF9B2F4E7F5070506A5061505E +50605053504B505D50725048504D5041505B504A506250155045505F5069506B +5063506450465040506E50735057505151D0526B526D526C526E52D652D3532D +539C55755576553C554D55505534552A55515562553655355530555255450000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000550C55325565554E55395548552D553B5540554B570A570757FB581457E2 +57F657DC57F4580057ED57FD580857F8580B57F357CF580757EE57E357F257E5 +57EC57E1580E57FC581057E75801580C57F157E957F0580D5804595C5A605A58 +5A555A675A5E5A385A355A6D5A505A5F5A655A6C5A535A645A575A435A5D5A52 +5A445A5B5A485A8E5A3E5A4D5A395A4C5A705A695A475A515A565A425A5C5B72 +5B6E5BC15BC05C595D1E5D0B5D1D5D1A5D205D0C5D285D0D5D265D255D0F0000 +D5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5D305D125D235D1F5D2E5E3E5E345EB15EB45EB95EB25EB35F365F385F9B5F96 +5F9F608A6090608660BE60B060BA60D360D460CF60E460D960DD60C860B160DB +60B760CA60BF60C360CD60C063326365638A6382637D63BD639E63AD639D6397 +63AB638E636F63876390636E63AF6375639C636D63AE637C63A4633B639F0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006378638563816391638D6370655365CD66656661665B6659665C66626718 +687968876890689C686D686E68AE68AB6956686F68A368AC68A96875687468B2 +688F68776892687C686B687268AA68806871687E689B6896688B68A0688968A4 +6878687B6891688C688A687D6B366B336B376B386B916B8F6B8D6B8E6B8C6C2A +6DC06DAB6DB46DB36E746DAC6DE96DE26DB76DF66DD46E006DC86DE06DDF6DD6 +6DBE6DE56DDC6DDD6DDB6DF46DCA6DBD6DED6DF06DBA6DD56DC26DCF6DC90000 +D6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6DD06DF26DD36DFD6DD76DCD6DE36DBB70FA710D70F7711770F4710C70F07104 +70F3711070FC70FF71067113710070F870F6710B7102710E727E727B727C727F +731D7317730773117318730A730872FF730F731E738873F673F873F574047401 +73FD7407740073FA73FC73FF740C740B73F474087564756375CE75D275CF0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000075CB75CC75D175D0768F768976D37739772F772D7731773277347733773D +7725773B7735784878527849784D784A784C782678457850796479677969796A +7963796B796179BB79FA79F879F679F77A8F7A947A907B357B477B347B257B30 +7B227B247B337B187B2A7B1D7B317B2B7B2D7B2F7B327B387B1A7B237C947C98 +7C967CA37D357D3D7D387D367D3A7D457D2C7D297D417D477D3E7D3F7D4A7D3B +7D287F637F957F9C7F9D7F9B7FCA7FCB7FCD7FD07FD17FC77FCF7FC9801F0000 +D7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +801E801B804780438048811881258119811B812D811F812C811E812181158127 +811D8122821182388233823A823482328274839083A383A8838D837A837383A4 +8374838F8381839583998375839483A9837D8383838C839D839B83AA838B837E +83A583AF8388839783B0837F83A6838783AE8376839A8659865686BF86B70000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000086C286C186C586BA86B086C886B986B386B886CC86B486BB86BC86C386BD +86BE88528889889588A888A288AA889A889188A1889F889888A78899889B8897 +88A488AC888C8893888E898289D689D989D58A308A278A2C8A1E8C398C3B8C5C +8C5D8C7D8CA58D7D8D7B8D798DBC8DC28DB98DBF8DC18ED88EDE8EDD8EDC8ED7 +8EE08EE19024900B9011901C900C902190EF90EA90F090F490F290F390D490EB +90EC90E991569158915A9153915591EC91F491F191F391F891E491F991EA0000 +D8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +91EB91F791E891EE957A95869588967C966D966B9671966F96BF976A980498E5 +9997509B50955094509E508B50A35083508C508E509D5068509C509250825087 +515F51D45312531153A453A7559155A855A555AD5577564555A255935588558F +55B5558155A3559255A4557D558C55A6557F559555A1558E570C582958370000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005819581E58275823582857F558485825581C581B5833583F5836582E5839 +5838582D582C583B59615AAF5A945A9F5A7A5AA25A9E5A785AA65A7C5AA55AAC +5A955AAE5A375A845A8A5A975A835A8B5AA95A7B5A7D5A8C5A9C5A8F5A935A9D +5BEA5BCD5BCB5BD45BD15BCA5BCE5C0C5C305D375D435D6B5D415D4B5D3F5D35 +5D515D4E5D555D335D3A5D525D3D5D315D595D425D395D495D385D3C5D325D36 +5D405D455E445E415F585FA65FA55FAB60C960B960CC60E260CE60C461140000 +D9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +60F2610A6116610560F5611360F860FC60FE60C161036118611D611060FF6104 +610B624A639463B163B063CE63E563E863EF63C3649D63F363CA63E063F663D5 +63F263F5646163DF63BE63DD63DC63C463D863D363C263C763CC63CB63C863F0 +63D763D965326567656A6564655C65686565658C659D659E65AE65D065D20000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000667C666C667B668066716679666A66726701690C68D3690468DC692A68EC +68EA68F1690F68D668F768EB68E468F66913691068F368E1690768CC69086970 +68B4691168EF68C6691468F868D068FD68FC68E8690B690A691768CE68C868DD +68DE68E668F468D1690668D468E96915692568C76B396B3B6B3F6B3C6B946B97 +6B996B956BBD6BF06BF26BF36C306DFC6E466E476E1F6E496E886E3C6E3D6E45 +6E626E2B6E3F6E416E5D6E736E1C6E336E4B6E406E516E3B6E036E2E6E5E0000 +DA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6E686E5C6E616E316E286E606E716E6B6E396E226E306E536E656E276E786E64 +6E776E556E796E526E666E356E366E5A7120711E712F70FB712E713171237125 +71227132711F7128713A711B724B725A7288728972867285728B7312730B7330 +73227331733373277332732D732673237335730C742E742C7430742B74160000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000741A7421742D743174247423741D74297420743274FB752F756F756C75E7 +75DA75E175E675DD75DF75E475D77695769276DA774677477744774D7745774A +774E774B774C77DE77EC786078647865785C786D7871786A786E787078697868 +785E786279747973797279707A027A0A7A037A0C7A047A997AE67AE47B4A7B3B +7B447B487B4C7B4E7B407B587B457CA27C9E7CA87CA17D587D6F7D637D537D56 +7D677D6A7D4F7D6D7D5C7D6B7D527D547D697D517D5F7D4E7F3E7F3F7F650000 +DB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7F667FA27FA07FA17FD78051804F805080FE80D48143814A8152814F8147813D +814D813A81E681EE81F781F881F98204823C823D823F8275833B83CF83F98423 +83C083E8841283E783E483FC83F6841083C683C883EB83E383BF840183DD83E5 +83D883FF83E183CB83CE83D683F583C98409840F83DE8411840683C283F30000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000083D583FA83C783D183EA841383C383EC83EE83C483FB83D783E2841B83DB +83FE86D886E286E686D386E386DA86EA86DD86EB86DC86EC86E986D786E886D1 +88488856885588BA88D788B988B888C088BE88B688BC88B788BD88B2890188C9 +89958998899789DD89DA89DB8A4E8A4D8A398A598A408A578A588A448A458A52 +8A488A518A4A8A4C8A4F8C5F8C818C808CBA8CBE8CB08CB98CB58D848D808D89 +8DD88DD38DCD8DC78DD68DDC8DCF8DD58DD98DC88DD78DC58EEF8EF78EFA0000 +DC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8EF98EE68EEE8EE58EF58EE78EE88EF68EEB8EF18EEC8EF48EE9902D9034902F +9106912C910490FF90FC910890F990FB9101910091079105910391619164915F +916291609201920A92259203921A9226920F920C9200921291FF91FD92069204 +92279202921C92249219921792059216957B958D958C95909687967E96880000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000096899683968096C296C896C396F196F0976C9770976E980798A998EB9CE6 +9EF94E834E844EB650BD50BF50C650AE50C450CA50B450C850C250B050C150BA +50B150CB50C950B650B851D7527A5278527B527C55C355DB55CC55D055CB55CA +55DD55C055D455C455E955BF55D2558D55CF55D555E255D655C855F255CD55D9 +55C25714585358685864584F584D5849586F5855584E585D58595865585B583D +5863587158FC5AC75AC45ACB5ABA5AB85AB15AB55AB05ABF5AC85ABB5AC60000 +DD +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5AB75AC05ACA5AB45AB65ACD5AB95A905BD65BD85BD95C1F5C335D715D635D4A +5D655D725D6C5D5E5D685D675D625DF05E4F5E4E5E4A5E4D5E4B5EC55ECC5EC6 +5ECB5EC75F405FAF5FAD60F76149614A612B614561366132612E6146612F614F +612961406220916862236225622463C563F163EB641064126409642064240000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000064336443641F641564186439643764226423640C64266430642864416435 +642F640A641A644064256427640B63E7641B642E6421640E656F659265D36686 +668C66956690668B668A66996694667867206966695F6938694E69626971693F +6945696A6939694269576959697A694869496935696C6933693D696568F06978 +693469696940696F69446976695869416974694C693B694B6937695C694F6951 +69326952692F697B693C6B466B456B436B426B486B416B9BFA0D6BFB6BFC0000 +DE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6BF96BF76BF86E9B6ED66EC86E8F6EC06E9F6E936E946EA06EB16EB96EC66ED2 +6EBD6EC16E9E6EC96EB76EB06ECD6EA66ECF6EB26EBE6EC36EDC6ED86E996E92 +6E8E6E8D6EA46EA16EBF6EB36ED06ECA6E976EAE6EA371477154715271637160 +7141715D716271727178716A7161714271587143714B7170715F715071530000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007144714D715A724F728D728C72917290728E733C7342733B733A7340734A +73497444744A744B7452745174577440744F7450744E74427446744D745474E1 +74FF74FE74FD751D75797577698375EF760F760375F775FE75FC75F975F87610 +75FB75F675ED75F575FD769976B576DD7755775F776077527756775A77697767 +77547759776D77E07887789A7894788F788478957885788678A1788378797899 +78807896787B797C7982797D79797A117A187A197A127A177A157A227A130000 +DF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7A1B7A107AA37AA27A9E7AEB7B667B647B6D7B747B697B727B657B737B717B70 +7B617B787B767B637CB27CB47CAF7D887D867D807D8D7D7F7D857D7A7D8E7D7B +7D837D7C7D8C7D947D847D7D7D927F6D7F6B7F677F687F6C7FA67FA57FA77FDB +7FDC8021816481608177815C8169815B816281726721815E81768167816F0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000081448161821D8249824482408242824584F1843F845684768479848F848D +846584518440848684678430844D847D845A845984748473845D8507845E8437 +843A8434847A8443847884328445842983D9844B842F8442842D845F84708439 +844E844C8452846F84C5848E843B8447843684338468847E8444842B84608454 +846E8450870B870486F7870C86FA86D686F5874D86F8870E8709870186F6870D +870588D688CB88CD88CE88DE88DB88DA88CC88D08985899B89DF89E589E40000 +E0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +89E189E089E289DC89E68A768A868A7F8A618A3F8A778A828A848A758A838A81 +8A748A7A8C3C8C4B8C4A8C658C648C668C868C848C858CCC8D688D698D918D8C +8D8E8D8F8D8D8D938D948D908D928DF08DE08DEC8DF18DEE8DD08DE98DE38DE2 +8DE78DF28DEB8DF48F068EFF8F018F008F058F078F088F028F0B9052903F0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000090449049903D9110910D910F911191169114910B910E916E916F92489252 +9230923A926692339265925E9283922E924A9246926D926C924F92609267926F +92369261927092319254926392509272924E9253924C92569232959F959C959E +959B969296939691969796CE96FA96FD96F896F59773977797789772980F980D +980E98AC98F698F999AF99B299B099B59AAD9AAB9B5B9CEA9CED9CE79E809EFD +50E650D450D750E850F350DB50EA50DD50E450D350EC50F050EF50E350E00000 +E1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +51D85280528152E952EB533053AC56275615560C561255FC560F561C56015613 +560255FA561D560455FF55F95889587C5890589858865881587F5874588B587A +58875891588E587658825888587B5894588F58FE596B5ADC5AEE5AE55AD55AEA +5ADA5AED5AEB5AF35AE25AE05ADB5AEC5ADE5ADD5AD95AE85ADF5B775BE00000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005BE35C635D825D805D7D5D865D7A5D815D775D8A5D895D885D7E5D7C5D8D +5D795D7F5E585E595E535ED85ED15ED75ECE5EDC5ED55ED95ED25ED45F445F43 +5F6F5FB6612C61286141615E61716173615261536172616C618061746154617A +615B6165613B616A6161615662296227622B642B644D645B645D647464766472 +6473647D6475646664A6644E6482645E645C644B645364606450647F643F646C +646B645964656477657365A066A166A0669F67056704672269B169B669C90000 +E2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +69A069CE699669B069AC69BC69916999698E69A7698D69A969BE69AF69BF69C4 +69BD69A469D469B969CA699A69CF69B3699369AA69A1699E69D96997699069C2 +69B569A569C66B4A6B4D6B4B6B9E6B9F6BA06BC36BC46BFE6ECE6EF56EF16F03 +6F256EF86F376EFB6F2E6F096F4E6F196F1A6F276F186F3B6F126EED6F0A0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006F366F736EF96EEE6F2D6F406F306F3C6F356EEB6F076F0E6F436F056EFD +6EF66F396F1C6EFC6F3A6F1F6F0D6F1E6F086F21718771907189718071857182 +718F717B718671817197724472537297729572937343734D7351734C74627473 +7471747574727467746E750075027503757D759076167608760C76157611760A +761476B87781777C77857782776E7780776F777E778378B278AA78B478AD78A8 +787E78AB789E78A578A078AC78A278A47998798A798B79967995799479930000 +E3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +79977988799279907A2B7A4A7A307A2F7A287A267AA87AAB7AAC7AEE7B887B9C +7B8A7B917B907B967B8D7B8C7B9B7B8E7B857B9852847B997BA47B827CBB7CBF +7CBC7CBA7DA77DB77DC27DA37DAA7DC17DC07DC57D9D7DCE7DC47DC67DCB7DCC +7DAF7DB97D967DBC7D9F7DA67DAE7DA97DA17DC97F737FE27FE37FE57FDE0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008024805D805C8189818681838187818D818C818B8215849784A484A1849F +84BA84CE84C284AC84AE84AB84B984B484C184CD84AA849A84B184D0849D84A7 +84BB84A2849484C784CC849B84A984AF84A884D6849884B684CF84A084D784D4 +84D284DB84B084918661873387238728876B8740872E871E87218719871B8743 +872C8741873E874687208732872A872D873C8712873A87318735874287268727 +87388724871A8730871188F788E788F188F288FA88FE88EE88FC88F688FB0000 +E4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +88F088EC88EB899D89A1899F899E89E989EB89E88AAB8A998A8B8A928A8F8A96 +8C3D8C688C698CD58CCF8CD78D968E098E028DFF8E0D8DFD8E0A8E038E078E06 +8E058DFE8E008E048F108F118F0E8F0D9123911C91209122911F911D911A9124 +9121911B917A91729179917392A592A49276929B927A92A0929492AA928D0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000092A6929A92AB92799297927F92A392EE928E9282929592A2927D928892A1 +928A9286928C929992A7927E928792A9929D928B922D969E96A196FF9758977D +977A977E978397809782977B97849781977F97CE97CD981698AD98AE99029900 +9907999D999C99C399B999BB99BA99C299BD99C79AB19AE39AE79B3E9B3F9B60 +9B619B5F9CF19CF29CF59EA750FF5103513050F85106510750F650FE510B510C +50FD510A528B528C52F152EF56485642564C56355641564A5649564656580000 +E5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +565A56405633563D562C563E5638562A563A571A58AB589D58B158A058A358AF +58AC58A558A158FF5AFF5AF45AFD5AF75AF65B035AF85B025AF95B015B075B05 +5B0F5C675D995D975D9F5D925DA25D935D955DA05D9C5DA15D9A5D9E5E695E5D +5E605E5C7DF35EDB5EDE5EE15F495FB2618B6183617961B161B061A261890000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000619B619361AF61AD619F619261AA61A1618D616661B3622D646E64706496 +64A064856497649C648F648B648A648C64A3649F646864B164986576657A6579 +657B65B265B366B566B066A966B266B766AA66AF6A006A066A1769E569F86A15 +69F169E46A2069FF69EC69E26A1B6A1D69FE6A2769F269EE6A1469F769E76A40 +6A0869E669FB6A0D69FC69EB6A096A046A186A256A0F69F66A266A0769F46A16 +6B516BA56BA36BA26BA66C016C006BFF6C026F416F266F7E6F876FC66F920000 +E6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6F8D6F896F8C6F626F4F6F856F5A6F966F766F6C6F826F556F726F526F506F57 +6F946F936F5D6F006F616F6B6F7D6F676F906F536F8B6F696F7F6F956F636F77 +6F6A6F7B71B271AF719B71B071A0719A71A971B5719D71A5719E71A471A171AA +719C71A771B37298729A73587352735E735F7360735D735B7361735A73590000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000736274877489748A74867481747D74857488747C747975087507757E7625 +761E7619761D761C7623761A7628761B769C769D769E769B778D778F77897788 +78CD78BB78CF78CC78D178CE78D478C878C378C478C9799A79A179A0799C79A2 +799B6B767A397AB27AB47AB37BB77BCB7BBE7BAC7BCE7BAF7BB97BCA7BB57CC5 +7CC87CCC7CCB7DF77DDB7DEA7DE77DD77DE17E037DFA7DE67DF67DF17DF07DEE +7DDF7F767FAC7FB07FAD7FED7FEB7FEA7FEC7FE67FE88064806781A3819F0000 +E7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +819E819581A2819981978216824F825382528250824E82518524853B850F8500 +8529850E8509850D851F850A8527851C84FB852B84FA8508850C84F4852A84F2 +851584F784EB84F384FC851284EA84E9851684FE8528851D852E850284FD851E +84F68531852684E784E884F084EF84F9851885208530850B8519852F86620000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000875687638764877787E1877387588754875B87528761875A8751875E876D +876A8750874E875F875D876F876C877A876E875C8765874F877B877587628767 +8769885A8905890C8914890B891789188919890689168911890E890989A289A4 +89A389ED89F089EC8ACF8AC68AB88AD38AD18AD48AD58ABB8AD78ABE8AC08AC5 +8AD88AC38ABA8ABD8AD98C3E8C4D8C8F8CE58CDF8CD98CE88CDA8CDD8CE78DA0 +8D9C8DA18D9B8E208E238E258E248E2E8E158E1B8E168E118E198E268E270000 +E8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8E148E128E188E138E1C8E178E1A8F2C8F248F188F1A8F208F238F168F179073 +9070906F9067906B912F912B9129912A91329126912E91859186918A91819182 +9184918092D092C392C492C092D992B692CF92F192DF92D892E992D792DD92CC +92EF92C292E892CA92C892CE92E692CD92D592C992E092DE92E792D192D30000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000092B592E192C692B4957C95AC95AB95AE95B096A496A296D3970597089702 +975A978A978E978897D097CF981E981D9826982998289820981B982798B29908 +98FA9911991499169917991599DC99CD99CF99D399D499CE99C999D699D899CB +99D799CC9AB39AEC9AEB9AF39AF29AF19B469B439B679B749B719B669B769B75 +9B709B689B649B6C9CFC9CFA9CFD9CFF9CF79D079D009CF99CFB9D089D059D04 +9E839ED39F0F9F10511C51135117511A511151DE533453E156705660566E0000 +E9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +567356665663566D5672565E5677571C571B58C858BD58C958BF58BA58C258BC +58C65B175B195B1B5B215B145B135B105B165B285B1A5B205B1E5BEF5DAC5DB1 +5DA95DA75DB55DB05DAE5DAA5DA85DB25DAD5DAF5DB45E675E685E665E6F5EE9 +5EE75EE65EE85EE55F4B5FBC619D61A8619661C561B461C661C161CC61BA0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000061BF61B8618C64D764D664D064CF64C964BD648964C364DB64F364D96533 +657F657C65A266C866BE66C066CA66CB66CF66BD66BB66BA66CC67236A346A66 +6A496A676A326A686A3E6A5D6A6D6A766A5B6A516A286A5A6A3B6A3F6A416A6A +6A646A506A4F6A546A6F6A696A606A3C6A5E6A566A556A4D6A4E6A466B556B54 +6B566BA76BAA6BAB6BC86BC76C046C036C066FAD6FCB6FA36FC76FBC6FCE6FC8 +6F5E6FC46FBD6F9E6FCA6FA870046FA56FAE6FBA6FAC6FAA6FCF6FBF6FB80000 +EA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6FA26FC96FAB6FCD6FAF6FB26FB071C571C271BF71B871D671C071C171CB71D4 +71CA71C771CF71BD71D871BC71C671DA71DB729D729E736973667367736C7365 +736B736A747F749A74A074947492749574A1750B7580762F762D7631763D7633 +763C76357632763076BB76E6779A779D77A1779C779B77A277A3779577990000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000779778DD78E978E578EA78DE78E378DB78E178E278ED78DF78E079A47A44 +7A487A477AB67AB87AB57AB17AB77BDE7BE37BE77BDD7BD57BE57BDA7BE87BF9 +7BD47BEA7BE27BDC7BEB7BD87BDF7CD27CD47CD77CD07CD17E127E217E177E0C +7E1F7E207E137E0E7E1C7E157E1A7E227E0B7E0F7E167E0D7E147E257E247F43 +7F7B7F7C7F7A7FB17FEF802A8029806C81B181A681AE81B981B581AB81B081AC +81B481B281B781A781F282558256825785568545856B854D8553856185580000 +EB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +854085468564854185628544855185478563853E855B8571854E856E85758555 +85678560858C8566855D85548565856C866386658664879B878F879787938792 +87888781879687988779878787A3878587908791879D87848794879C879A8789 +891E89268930892D892E89278931892289298923892F892C891F89F18AE00000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008AE28AF28AF48AF58ADD8B148AE48ADF8AF08AC88ADE8AE18AE88AFF8AEF +8AFB8C918C928C908CF58CEE8CF18CF08CF38D6C8D6E8DA58DA78E338E3E8E38 +8E408E458E368E3C8E3D8E418E308E3F8EBD8F368F2E8F358F328F398F378F34 +90769079907B908690FA913391359136919391909191918D918F9327931E9308 +931F9306930F937A9338933C931B9323931293019346932D930E930D92CB931D +92FA9325931392F992F793349302932492FF932993399335932A9314930C0000 +EC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +930B92FE9309930092FB931695BC95CD95BE95B995BA95B695BF95B595BD96A9 +96D4970B9712971097999797979497F097F89835982F98329924991F99279929 +999E99EE99EC99E599E499F099E399EA99E999E79AB99ABF9AB49ABB9AF69AFA +9AF99AF79B339B809B859B879B7C9B7E9B7B9B829B939B929B909B7A9B950000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009B7D9B889D259D179D209D1E9D149D299D1D9D189D229D109D199D1F9E88 +9E869E879EAE9EAD9ED59ED69EFA9F129F3D51265125512251245120512952F4 +5693568C568D568656845683567E5682567F568158D658D458CF58D25B2D5B25 +5B325B235B2C5B275B265B2F5B2E5B7B5BF15BF25DB75E6C5E6A5FBE5FBB61C3 +61B561BC61E761E061E561E461E861DE64EF64E964E364EB64E464E865816580 +65B665DA66D26A8D6A966A816AA56A896A9F6A9B6AA16A9E6A876A936A8E0000 +ED +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6A956A836AA86AA46A916A7F6AA66A9A6A856A8C6A926B5B6BAD6C096FCC6FA9 +6FF46FD46FE36FDC6FED6FE76FE66FDE6FF26FDD6FE26FE871E171F171E871F2 +71E471F071E27373736E736F749774B274AB749074AA74AD74B174A574AF7510 +75117512750F7584764376487649764776A476E977B577AB77B277B777B60000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000077B477B177A877F078F378FD790278FB78FC78F2790578F978FE790479AB +79A87A5C7A5B7A567A587A547A5A7ABE7AC07AC17C057C0F7BF27C007BFF7BFB +7C0E7BF47C0B7BF37C027C097C037C017BF87BFD7C067BF07BF17C107C0A7CE8 +7E2D7E3C7E427E3398487E387E2A7E497E407E477E297E4C7E307E3B7E367E44 +7E3A7F457F7F7F7E7F7D7FF47FF2802C81BB81C481CC81CA81C581C781BC81E9 +825B825A825C85838580858F85A7859585A0858B85A3857B85A4859A859E0000 +EE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8577857C858985A1857A85788557858E85968586858D8599859D858185A28582 +858885858579857685988590859F866887BE87AA87AD87C587B087AC87B987B5 +87BC87AE87C987C387C287CC87B787AF87C487CA87B487B687BF87B887BD87DE +87B289358933893C893E894189528937894289AD89AF89AE89F289F38B1E0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008B188B168B118B058B0B8B228B0F8B128B158B078B0D8B088B068B1C8B13 +8B1A8C4F8C708C728C718C6F8C958C948CF98D6F8E4E8E4D8E538E508E4C8E47 +8F438F409085907E9138919A91A2919B9199919F91A1919D91A093A1938393AF +936493569347937C9358935C93769349935093519360936D938F934C936A9379 +935793559352934F93719377937B9361935E936393679380934E935995C795C0 +95C995C395C595B796AE96B096AC9720971F9718971D9719979A97A1979C0000 +EF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +979E979D97D597D497F198419844984A9849984598439925992B992C992A9933 +9932992F992D99319930999899A399A19A0299FA99F499F799F999F899F699FB +99FD99FE99FC9A039ABE9AFE9AFD9B019AFC9B489B9A9BA89B9E9B9B9BA69BA1 +9BA59BA49B869BA29BA09BAF9D339D419D679D369D2E9D2F9D319D389D300000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009D459D429D439D3E9D379D409D3D7FF59D2D9E8A9E899E8D9EB09EC89EDA +9EFB9EFF9F249F239F229F549FA05131512D512E5698569C5697569A569D5699 +59705B3C5C695C6A5DC05E6D5E6E61D861DF61ED61EE61F161EA61F061EB61D6 +61E964FF650464FD64F86501650364FC659465DB66DA66DB66D86AC56AB96ABD +6AE16AC66ABA6AB66AB76AC76AB46AAD6B5E6BC96C0B7007700C700D70017005 +7014700E6FFF70006FFB70266FFC6FF7700A720171FF71F9720371FD73760000 +F0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +74B874C074B574C174BE74B674BB74C275147513765C76647659765076537657 +765A76A676BD76EC77C277BA78FF790C79137914790979107912791179AD79AC +7A5F7C1C7C297C197C207C1F7C2D7C1D7C267C287C227C257C307E5C7E507E56 +7E637E587E627E5F7E517E607E577E537FB57FB37FF77FF8807581D181D20000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000081D0825F825E85B485C685C085C385C285B385B585BD85C785C485BF85CB +85CE85C885C585B185B685D2862485B885B785BE866987E787E687E287DB87EB +87EA87E587DF87F387E487D487DC87D387ED87D887E387A487D787D9880187F4 +87E887DD8953894B894F894C89468950895189498B2A8B278B238B338B308B35 +8B478B2F8B3C8B3E8B318B258B378B268B368B2E8B248B3B8B3D8B3A8C428C75 +8C998C988C978CFE8D048D028D008E5C8E628E608E578E568E5E8E658E670000 +F1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8E5B8E5A8E618E5D8E698E548F468F478F488F4B9128913A913B913E91A891A5 +91A791AF91AA93B5938C939293B7939B939D938993A7938E93AA939E93A69395 +93889399939F938D93B1939193B293A493A893B493A393A595D295D395D196B3 +96D796DA5DC296DF96D896DD97239722972597AC97AE97A897AB97A497AA0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000097A297A597D797D997D697D897FA98509851985298B89941993C993A9A0F +9A0B9A099A0D9A049A119A0A9A059A079A069AC09ADC9B089B049B059B299B35 +9B4A9B4C9B4B9BC79BC69BC39BBF9BC19BB59BB89BD39BB69BC49BB99BBD9D5C +9D539D4F9D4A9D5B9D4B9D599D569D4C9D579D529D549D5F9D589D5A9E8E9E8C +9EDF9F019F009F169F259F2B9F2A9F299F289F4C9F5551345135529652F753B4 +56AB56AD56A656A756AA56AC58DA58DD58DB59125B3D5B3E5B3F5DC35E700000 +F2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5FBF61FB65076510650D6509650C650E658465DE65DD66DE6AE76AE06ACC6AD1 +6AD96ACB6ADF6ADC6AD06AEB6ACF6ACD6ADE6B606BB06C0C7019702770207016 +702B702170227023702970177024701C702A720C720A72077202720572A572A6 +72A472A372A174CB74C574B774C37516766077C977CA77C477F1791D791B0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007921791C7917791E79B07A677A687C337C3C7C397C2C7C3B7CEC7CEA7E76 +7E757E787E707E777E6F7E7A7E727E747E687F4B7F4A7F837F867FB77FFD7FFE +807881D781D582648261826385EB85F185ED85D985E185E885DA85D785EC85F2 +85F885D885DF85E385DC85D185F085E685EF85DE85E2880087FA880387F687F7 +8809880C880B880687FC880887FF880A88028962895A895B89578961895C8958 +895D8959898889B789B689F68B508B488B4A8B408B538B568B548B4B8B550000 +F3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8B518B428B528B578C438C778C768C9A8D068D078D098DAC8DAA8DAD8DAB8E6D +8E788E738E6A8E6F8E7B8EC28F528F518F4F8F508F538FB49140913F91B091AD +93DE93C793CF93C293DA93D093F993EC93CC93D993A993E693CA93D493EE93E3 +93D593C493CE93C093D293E7957D95DA95DB96E19729972B972C972897260000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000097B397B797B697DD97DE97DF985C9859985D985798BF98BD98BB98BE9948 +9947994399A699A79A1A9A159A259A1D9A249A1B9A229A209A279A239A1E9A1C +9A149AC29B0B9B0A9B0E9B0C9B379BEA9BEB9BE09BDE9BE49BE69BE29BF09BD4 +9BD79BEC9BDC9BD99BE59BD59BE19BDA9D779D819D8A9D849D889D719D809D78 +9D869D8B9D8C9D7D9D6B9D749D759D709D699D859D739D7B9D829D6F9D799D7F +9D879D689E949E919EC09EFC9F2D9F409F419F4D9F569F579F58533756B20000 +F4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +56B556B358E35B455DC65DC75EEE5EEF5FC05FC161F9651765166515651365DF +66E866E366E46AF36AF06AEA6AE86AF96AF16AEE6AEF703C7035702F70377034 +703170427038703F703A70397040703B703370417213721472A8737D737C74BA +76AB76AA76BE76ED77CC77CE77CF77CD77F27925792379277928792479290000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000079B27A6E7A6C7A6D7AF77C497C487C4A7C477C457CEE7E7B7E7E7E817E80 +7FBA7FFF807981DB81D9820B82688269862285FF860185FE861B860085F68604 +86098605860C85FD8819881088118817881388168963896689B989F78B608B6A +8B5D8B688B638B658B678B6D8DAE8E868E888E848F598F568F578F558F588F5A +908D9143914191B791B591B291B3940B941393FB9420940F941493FE94159410 +94289419940D93F5940093F79407940E9416941293FA940993F8940A93FF0000 +F5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +93FC940C93F69411940695DE95E095DF972E972F97B997BB97FD97FE98609862 +9863985F98C198C29950994E9959994C994B99539A329A349A319A2C9A2A9A36 +9A299A2E9A389A2D9AC79ACA9AC69B109B129B119C0B9C089BF79C059C129BF8 +9C409C079C0E9C069C179C149C099D9F9D999DA49D9D9D929D989D909D9B0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009DA09D949D9C9DAA9D979DA19D9A9DA29DA89D9E9DA39DBF9DA99D969DA6 +9DA79E999E9B9E9A9EE59EE49EE79EE69F309F2E9F5B9F609F5E9F5D9F599F91 +513A51395298529756C356BD56BE5B485B475DCB5DCF5EF161FD651B6B026AFC +6B036AF86B0070437044704A7048704970457046721D721A7219737E7517766A +77D0792D7931792F7C547C537CF27E8A7E877E887E8B7E867E8D7F4D7FBB8030 +81DD8618862A8626861F8623861C86198627862E862186208629861E86250000 +F6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8829881D881B88208824881C882B884A896D8969896E896B89FA8B798B788B45 +8B7A8B7B8D108D148DAF8E8E8E8C8F5E8F5B8F5D91469144914591B9943F943B +94369429943D943C94309439942A9437942C9440943195E595E495E39735973A +97BF97E1986498C998C698C0995899569A399A3D9A469A449A429A419A3A0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009A3F9ACD9B159B179B189B169B3A9B529C2B9C1D9C1C9C2C9C239C289C29 +9C249C219DB79DB69DBC9DC19DC79DCA9DCF9DBE9DC59DC39DBB9DB59DCE9DB9 +9DBA9DAC9DC89DB19DAD9DCC9DB39DCD9DB29E7A9E9C9EEB9EEE9EED9F1B9F18 +9F1A9F319F4E9F659F649F924EB956C656C556CB59715B4B5B4C5DD55DD15EF2 +65216520652665226B0B6B086B096C0D7055705670577052721E721F72A9737F +74D874D574D974D7766D76AD793579B47A707A717C577C5C7C597C5B7C5A0000 +F7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7CF47CF17E917F4F7F8781DE826B863486358633862C86328636882C88288826 +882A8825897189BF89BE89FB8B7E8B848B828B868B858B7F8D158E958E948E9A +8E928E908E968E978F608F629147944C9450944A944B944F9447944594489449 +9446973F97E3986A986998CB9954995B9A4E9A539A549A4C9A4F9A489A4A0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009A499A529A509AD09B199B2B9B3B9B569B559C469C489C3F9C449C399C33 +9C419C3C9C379C349C329C3D9C369DDB9DD29DDE9DDA9DCB9DD09DDC9DD19DDF +9DE99DD99DD89DD69DF59DD59DDD9EB69EF09F359F339F329F429F6B9F959FA2 +513D529958E858E759725B4D5DD8882F5F4F62016203620465296525659666EB +6B116B126B0F6BCA705B705A7222738273817383767077D47C677C667E95826C +863A86408639863C8631863B863E88308832882E883389768974897389FE0000 +F8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8B8C8B8E8B8B8B888C458D198E988F648F6391BC94629455945D9457945E97C4 +97C598009A569A599B1E9B1F9B209C529C589C509C4A9C4D9C4B9C559C599C4C +9C4E9DFB9DF79DEF9DE39DEB9DF89DE49DF69DE19DEE9DE69DF29DF09DE29DEC +9DF49DF39DE89DED9EC29ED09EF29EF39F069F1C9F389F379F369F439F4F0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009F719F709F6E9F6F56D356CD5B4E5C6D652D66ED66EE6B13705F7061705D +7060722374DB74E577D5793879B779B67C6A7E977F89826D8643883888378835 +884B8B948B958E9E8E9F8EA08E9D91BE91BD91C2946B9468946996E597469743 +974797C797E59A5E9AD59B599C639C679C669C629C5E9C609E029DFE9E079E03 +9E069E059E009E019E099DFF9DFD9E049EA09F1E9F469F749F759F7656D4652E +65B86B186B196B176B1A7062722672AA77D877D979397C697C6B7CF67E9A0000 +F9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7E987E9B7E9981E081E18646864786488979897A897C897B89FF8B988B998EA5 +8EA48EA3946E946D946F9471947397499872995F9C689C6E9C6D9E0B9E0D9E10 +9E0F9E129E119EA19EF59F099F479F789F7B9F7A9F79571E70667C6F883C8DB2 +8EA691C394749478947694759A609C749C739C719C759E149E139EF69F0A0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009FA4706870657CF7866A883E883D883F8B9E8C9C8EA98EC9974B98739874 +98CC996199AB9A649A669A679B249E159E179F4862076B1E7227864C8EA89482 +948094819A699A689B2E9E197229864B8B9F94839C799EB776759A6B9C7A9E1D +7069706A9EA49F7E9F499F980000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp1250.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp1250.enc new file mode 100644 index 00000000..070ad901 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp1250.enc @@ -0,0 +1,20 @@ +# Encoding file: cp1250, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +20AC0081201A0083201E2026202020210088203001602039015A0164017D0179 +009020182019201C201D202220132014009821220161203A015B0165017E017A +00A002C702D8014100A4010400A600A700A800A9015E00AB00AC00AD00AE017B +00B000B102DB014200B400B500B600B700B80105015F00BB013D02DD013E017C +015400C100C2010200C40139010600C7010C00C9011800CB011A00CD00CE010E +01100143014700D300D4015000D600D70158016E00DA017000DC00DD016200DF +015500E100E2010300E4013A010700E7010D00E9011900EB011B00ED00EE010F +01110144014800F300F4015100F600F70159016F00FA017100FC00FD016302D9 diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp1251.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp1251.enc new file mode 100644 index 00000000..376b1b40 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp1251.enc @@ -0,0 +1,20 @@ +# Encoding file: cp1251, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +04020403201A0453201E20262020202120AC203004092039040A040C040B040F +045220182019201C201D202220132014009821220459203A045A045C045B045F +00A0040E045E040800A4049000A600A7040100A9040400AB00AC00AD00AE0407 +00B000B104060456049100B500B600B704512116045400BB0458040504550457 +0410041104120413041404150416041704180419041A041B041C041D041E041F +0420042104220423042404250426042704280429042A042B042C042D042E042F +0430043104320433043404350436043704380439043A043B043C043D043E043F +0440044104420443044404450446044704480449044A044B044C044D044E044F diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp1252.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp1252.enc new file mode 100644 index 00000000..dd525ea4 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp1252.enc @@ -0,0 +1,20 @@ +# Encoding file: cp1252, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +20AC0081201A0192201E20262020202102C62030016020390152008D017D008F +009020182019201C201D20222013201402DC21220161203A0153009D017E0178 +00A000A100A200A300A400A500A600A700A800A900AA00AB00AC00AD00AE00AF +00B000B100B200B300B400B500B600B700B800B900BA00BB00BC00BD00BE00BF +00C000C100C200C300C400C500C600C700C800C900CA00CB00CC00CD00CE00CF +00D000D100D200D300D400D500D600D700D800D900DA00DB00DC00DD00DE00DF +00E000E100E200E300E400E500E600E700E800E900EA00EB00EC00ED00EE00EF +00F000F100F200F300F400F500F600F700F800F900FA00FB00FC00FD00FE00FF diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp1253.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp1253.enc new file mode 100644 index 00000000..a8754c37 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp1253.enc @@ -0,0 +1,20 @@ +# Encoding file: cp1253, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +20AC0081201A0192201E20262020202100882030008A2039008C008D008E008F +009020182019201C201D20222013201400982122009A203A009C009D009E009F +00A00385038600A300A400A500A600A700A800A9000000AB00AC00AD00AE2015 +00B000B100B200B3038400B500B600B703880389038A00BB038C00BD038E038F +0390039103920393039403950396039703980399039A039B039C039D039E039F +03A003A1000003A303A403A503A603A703A803A903AA03AB03AC03AD03AE03AF +03B003B103B203B303B403B503B603B703B803B903BA03BB03BC03BD03BE03BF +03C003C103C203C303C403C503C603C703C803C903CA03CB03CC03CD03CE0000 diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp1254.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp1254.enc new file mode 100644 index 00000000..b9e3b3c5 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp1254.enc @@ -0,0 +1,20 @@ +# Encoding file: cp1254, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +20AC0081201A0192201E20262020202102C62030016020390152008D008E008F +009020182019201C201D20222013201402DC21220161203A0153009D009E0178 +00A000A100A200A300A400A500A600A700A800A900AA00AB00AC00AD00AE00AF +00B000B100B200B300B400B500B600B700B800B900BA00BB00BC00BD00BE00BF +00C000C100C200C300C400C500C600C700C800C900CA00CB00CC00CD00CE00CF +011E00D100D200D300D400D500D600D700D800D900DA00DB00DC0130015E00DF +00E000E100E200E300E400E500E600E700E800E900EA00EB00EC00ED00EE00EF +011F00F100F200F300F400F500F600F700F800F900FA00FB00FC0131015F00FF diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp1255.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp1255.enc new file mode 100644 index 00000000..6e78b954 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp1255.enc @@ -0,0 +1,20 @@ +# Encoding file: cp1255, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +20AC0081201A0192201E20262020202102C62030008A2039008C008D008E008F +009020182019201C201D20222013201402DC2122009A203A009C009D009E009F +00A000A100A200A320AA00A500A600A700A800A900D700AB00AC00AD00AE00AF +00B000B100B200B300B400B500B600B700B800B900F700BB00BC00BD00BE00BF +05B005B105B205B305B405B505B605B705B805B9000005BB05BC05BD05BE05BF +05C005C105C205C305F005F105F205F305F40000000000000000000000000000 +05D005D105D205D305D405D505D605D705D805D905DA05DB05DC05DD05DE05DF +05E005E105E205E305E405E505E605E705E805E905EA00000000200E200F0000 diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp1256.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp1256.enc new file mode 100644 index 00000000..a98762a0 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp1256.enc @@ -0,0 +1,20 @@ +# Encoding file: cp1256, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +20AC067E201A0192201E20262020202102C62030067920390152068606980688 +06AF20182019201C201D20222013201406A921220691203A0153200C200D06BA +00A0060C00A200A300A400A500A600A700A800A906BE00AB00AC00AD00AE00AF +00B000B100B200B300B400B500B600B700B800B9061B00BB00BC00BD00BE061F +06C1062106220623062406250626062706280629062A062B062C062D062E062F +063006310632063306340635063600D7063706380639063A0640064106420643 +00E0064400E2064506460647064800E700E800E900EA00EB0649064A00EE00EF +064B064C064D064E00F4064F065000F7065100F9065200FB00FC200E200F06D2 diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp1257.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp1257.enc new file mode 100644 index 00000000..4aa135df --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp1257.enc @@ -0,0 +1,20 @@ +# Encoding file: cp1257, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +20AC0081201A0083201E20262020202100882030008A2039008C00A802C700B8 +009020182019201C201D20222013201400982122009A203A009C00AF02DB009F +00A0000000A200A300A4000000A600A700D800A9015600AB00AC00AD00AE00C6 +00B000B100B200B300B400B500B600B700F800B9015700BB00BC00BD00BE00E6 +0104012E0100010600C400C501180112010C00C90179011601220136012A013B +01600143014500D3014C00D500D600D701720141015A016A00DC017B017D00DF +0105012F0101010700E400E501190113010D00E9017A011701230137012B013C +01610144014600F3014D00F500F600F701730142015B016B00FC017C017E02D9 diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp1258.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp1258.enc new file mode 100644 index 00000000..95fdef88 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp1258.enc @@ -0,0 +1,20 @@ +# Encoding file: cp1258, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +20AC0081201A0192201E20262020202102C62030008A20390152008D008E008F +009020182019201C201D20222013201402DC2122009A203A0153009D009E0178 +00A000A100A200A300A400A500A600A700A800A900AA00AB00AC00AD00AE00AF +00B000B100B200B300B400B500B600B700B800B900BA00BB00BC00BD00BE00BF +00C000C100C2010200C400C500C600C700C800C900CA00CB030000CD00CE00CF +011000D1030900D300D401A000D600D700D800D900DA00DB00DC01AF030300DF +00E000E100E2010300E400E500E600E700E800E900EA00EB030100ED00EE00EF +011100F1032300F300F401A100F600F700F800F900FA00FB00FC01B020AB00FF diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp437.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp437.enc new file mode 100644 index 00000000..ecae4e65 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp437.enc @@ -0,0 +1,20 @@ +# Encoding file: cp437, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +00C700FC00E900E200E400E000E500E700EA00EB00E800EF00EE00EC00C400C5 +00C900E600C600F400F600F200FB00F900FF00D600DC00A200A300A520A70192 +00E100ED00F300FA00F100D100AA00BA00BF231000AC00BD00BC00A100AB00BB +259125922593250225242561256225562555256325512557255D255C255B2510 +25142534252C251C2500253C255E255F255A25542569256625602550256C2567 +2568256425652559255825522553256B256A2518250C25882584258C25902580 +03B100DF039303C003A303C300B503C403A6039803A903B4221E03C603B52229 +226100B1226522642320232100F7224800B0221900B7221A207F00B225A000A0 diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp737.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp737.enc new file mode 100644 index 00000000..5b59661e --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp737.enc @@ -0,0 +1,20 @@ +# Encoding file: cp737, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +039103920393039403950396039703980399039A039B039C039D039E039F03A0 +03A103A303A403A503A603A703A803A903B103B203B303B403B503B603B703B8 +03B903BA03BB03BC03BD03BE03BF03C003C103C303C203C403C503C603C703C8 +259125922593250225242561256225562555256325512557255D255C255B2510 +25142534252C251C2500253C255E255F255A25542569256625602550256C2567 +2568256425652559255825522553256B256A2518250C25882584258C25902580 +03C903AC03AD03AE03CA03AF03CC03CD03CB03CE038603880389038A038C038E +038F00B12265226403AA03AB00F7224800B0221900B7221A207F00B225A000A0 diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp775.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp775.enc new file mode 100644 index 00000000..71b65c32 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp775.enc @@ -0,0 +1,20 @@ +# Encoding file: cp775, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +010600FC00E9010100E4012300E501070142011301560157012B017900C400C5 +00C900E600C6014D00F6012200A2015A015B00D600DC00F800A300D800D700A4 +0100012A00F3017B017C017A201D00A600A900AE00AC00BD00BC014100AB00BB +259125922593250225240104010C01180116256325512557255D012E01602510 +25142534252C251C2500253C0172016A255A25542569256625602550256C017D +0105010D01190117012F01610173016B017E2518250C25882584258C25902580 +00D300DF014C014300F500D500B5014401360137013B013C0146011201452019 +00AD00B1201C00BE00B600A700F7201E00B0221900B700B900B300B225A000A0 diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp850.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp850.enc new file mode 100644 index 00000000..4e7a90d7 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp850.enc @@ -0,0 +1,20 @@ +# Encoding file: cp850, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +00C700FC00E900E200E400E000E500E700EA00EB00E800EF00EE00EC00C400C5 +00C900E600C600F400F600F200FB00F900FF00D600DC00F800A300D800D70192 +00E100ED00F300FA00F100D100AA00BA00BF00AE00AC00BD00BC00A100AB00BB +2591259225932502252400C100C200C000A9256325512557255D00A200A52510 +25142534252C251C2500253C00E300C3255A25542569256625602550256C00A4 +00F000D000CA00CB00C8013100CD00CE00CF2518250C2588258400A600CC2580 +00D300DF00D400D200F500D500B500FE00DE00DA00DB00D900FD00DD00AF00B4 +00AD00B1201700BE00B600A700F700B800B000A800B700B900B300B225A000A0 diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp852.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp852.enc new file mode 100644 index 00000000..f34899ee --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp852.enc @@ -0,0 +1,20 @@ +# Encoding file: cp852, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +00C700FC00E900E200E4016F010700E7014200EB0150015100EE017900C40106 +00C90139013A00F400F6013D013E015A015B00D600DC01640165014100D7010D +00E100ED00F300FA01040105017D017E0118011900AC017A010C015F00AB00BB +2591259225932502252400C100C2011A015E256325512557255D017B017C2510 +25142534252C251C2500253C01020103255A25542569256625602550256C00A4 +01110110010E00CB010F014700CD00CE011B2518250C258825840162016E2580 +00D300DF00D401430144014801600161015400DA0155017000FD00DD016300B4 +00AD02DD02DB02C702D800A700F700B800B000A802D901710158015925A000A0 diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp855.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp855.enc new file mode 100644 index 00000000..4d58b86c --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp855.enc @@ -0,0 +1,20 @@ +# Encoding file: cp855, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +0452040204530403045104010454040404550405045604060457040704580408 +04590409045A040A045B040B045C040C045E040E045F040F044E042E044A042A +0430041004310411044604260434041404350415044404240433041300AB00BB +259125922593250225240445042504380418256325512557255D043904192510 +25142534252C251C2500253C043A041A255A25542569256625602550256C00A4 +043B041B043C041C043D041D043E041E043F2518250C25882584041F044F2580 +042F044004200441042104420422044304230436041604320412044C042C2116 +00AD044B042B0437041704480428044D042D044904290447042700A725A000A0 diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp857.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp857.enc new file mode 100644 index 00000000..b42ed557 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp857.enc @@ -0,0 +1,20 @@ +# Encoding file: cp857, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +00C700FC00E900E200E400E000E500E700EA00EB00E800EF00EE013100C400C5 +00C900E600C600F400F600F200FB00F9013000D600DC00F800A300D8015E015F +00E100ED00F300FA00F100D1011E011F00BF00AE00AC00BD00BC00A100AB00BB +2591259225932502252400C100C200C000A9256325512557255D00A200A52510 +25142534252C251C2500253C00E300C3255A25542569256625602550256C00A4 +00BA00AA00CA00CB00C8000000CD00CE00CF2518250C2588258400A600CC2580 +00D300DF00D400D200F500D500B5000000D700DA00DB00D900EC00FF00AF00B4 +00AD00B1000000BE00B600A700F700B800B000A800B700B900B300B225A000A0 diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp860.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp860.enc new file mode 100644 index 00000000..871943b3 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp860.enc @@ -0,0 +1,20 @@ +# Encoding file: cp860, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +00C700FC00E900E200E300E000C100E700EA00CA00E800CD00D400EC00C300C2 +00C900C000C800F400F500F200DA00F900CC00D500DC00A200A300D920A700D3 +00E100ED00F300FA00F100D100AA00BA00BF00D200AC00BD00BC00A100AB00BB +259125922593250225242561256225562555256325512557255D255C255B2510 +25142534252C251C2500253C255E255F255A25542569256625602550256C2567 +2568256425652559255825522553256B256A2518250C25882584258C25902580 +03B100DF039303C003A303C300B503C403A6039803A903B4221E03C603B52229 +226100B1226522642320232100F7224800B0221900B7221A207F00B225A000A0 diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp861.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp861.enc new file mode 100644 index 00000000..3f8f605e --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp861.enc @@ -0,0 +1,20 @@ +# Encoding file: cp861, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +00C700FC00E900E200E400E000E500E700EA00EB00E800D000F000DE00C400C5 +00C900E600C600F400F600FE00FB00DD00FD00D600DC00F800A300D820A70192 +00E100ED00F300FA00C100CD00D300DA00BF231000AC00BD00BC00A100AB00BB +259125922593250225242561256225562555256325512557255D255C255B2510 +25142534252C251C2500253C255E255F255A25542569256625602550256C2567 +2568256425652559255825522553256B256A2518250C25882584258C25902580 +03B100DF039303C003A303C300B503C403A6039803A903B4221E03C603B52229 +226100B1226522642320232100F7224800B0221900B7221A207F00B225A000A0 diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp862.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp862.enc new file mode 100644 index 00000000..5f9d16cc --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp862.enc @@ -0,0 +1,20 @@ +# Encoding file: cp862, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +05D005D105D205D305D405D505D605D705D805D905DA05DB05DC05DD05DE05DF +05E005E105E205E305E405E505E605E705E805E905EA00A200A300A520A70192 +00E100ED00F300FA00F100D100AA00BA00BF231000AC00BD00BC00A100AB00BB +259125922593250225242561256225562555256325512557255D255C255B2510 +25142534252C251C2500253C255E255F255A25542569256625602550256C2567 +2568256425652559255825522553256B256A2518250C25882584258C25902580 +03B100DF039303C003A303C300B503C403A6039803A903B4221E03C603B52229 +226100B1226522642320232100F7224800B0221900B7221A207F00B225A000A0 diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp863.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp863.enc new file mode 100644 index 00000000..c8b8686f --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp863.enc @@ -0,0 +1,20 @@ +# Encoding file: cp863, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +00C700FC00E900E200C200E000B600E700EA00EB00E800EF00EE201700C000A7 +00C900C800CA00F400CB00CF00FB00F900A400D400DC00A200A300D900DB0192 +00A600B400F300FA00A800B800B300AF00CE231000AC00BD00BC00BE00AB00BB +259125922593250225242561256225562555256325512557255D255C255B2510 +25142534252C251C2500253C255E255F255A25542569256625602550256C2567 +2568256425652559255825522553256B256A2518250C25882584258C25902580 +03B100DF039303C003A303C300B503C403A6039803A903B4221E03C603B52229 +226100B1226522642320232100F7224800B0221900B7221A207F00B225A000A0 diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp864.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp864.enc new file mode 100644 index 00000000..71f9e62b --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp864.enc @@ -0,0 +1,20 @@ +# Encoding file: cp864, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +00200021002200230024066A0026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +00B000B72219221A259225002502253C2524252C251C25342510250C25142518 +03B2221E03C600B100BD00BC224800AB00BBFEF7FEF8009B009CFEFBFEFC009F +00A000ADFE8200A300A4FE8400000000FE8EFE8FFE95FE99060CFE9DFEA1FEA5 +0660066106620663066406650666066706680669FED1061BFEB1FEB5FEB9061F +00A2FE80FE81FE83FE85FECAFE8BFE8DFE91FE93FE97FE9BFE9FFEA3FEA7FEA9 +FEABFEADFEAFFEB3FEB7FEBBFEBFFEC1FEC5FECBFECF00A600AC00F700D7FEC9 +0640FED3FED7FEDBFEDFFEE3FEE7FEEBFEEDFEEFFEF3FEBDFECCFECEFECDFEE1 +FE7D0651FEE5FEE9FEECFEF0FEF2FED0FED5FEF5FEF6FEDDFED9FEF125A00000 diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp865.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp865.enc new file mode 100644 index 00000000..543da9c5 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp865.enc @@ -0,0 +1,20 @@ +# Encoding file: cp865, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +00C700FC00E900E200E400E000E500E700EA00EB00E800EF00EE00EC00C400C5 +00C900E600C600F400F600F200FB00F900FF00D600DC00F800A300D820A70192 +00E100ED00F300FA00F100D100AA00BA00BF231000AC00BD00BC00A100AB00A4 +259125922593250225242561256225562555256325512557255D255C255B2510 +25142534252C251C2500253C255E255F255A25542569256625602550256C2567 +2568256425652559255825522553256B256A2518250C25882584258C25902580 +03B100DF039303C003A303C300B503C403A6039803A903B4221E03C603B52229 +226100B1226522642320232100F7224800B0221900B7221A207F00B225A000A0 diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp866.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp866.enc new file mode 100644 index 00000000..b851cf5b --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp866.enc @@ -0,0 +1,20 @@ +# Encoding file: cp866, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +0410041104120413041404150416041704180419041A041B041C041D041E041F +0420042104220423042404250426042704280429042A042B042C042D042E042F +0430043104320433043404350436043704380439043A043B043C043D043E043F +259125922593250225242561256225562555256325512557255D255C255B2510 +25142534252C251C2500253C255E255F255A25542569256625602550256C2567 +2568256425652559255825522553256B256A2518250C25882584258C25902580 +0440044104420443044404450446044704480449044A044B044C044D044E044F +040104510404045404070457040E045E00B0221900B7221A211600A425A000A0 diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp869.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp869.enc new file mode 100644 index 00000000..9fd29290 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp869.enc @@ -0,0 +1,20 @@ +# Encoding file: cp869, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +0080008100820083008400850386008700B700AC00A620182019038820150389 +038A03AA038C00930094038E03AB00A9038F00B200B303AC00A303AD03AE03AF +03CA039003CC03CD039103920393039403950396039700BD0398039900AB00BB +25912592259325022524039A039B039C039D256325512557255D039E039F2510 +25142534252C251C2500253C03A003A1255A25542569256625602550256C03A3 +03A403A503A603A703A803A903B103B203B32518250C2588258403B403B52580 +03B603B703B803B903BA03BB03BC03BD03BE03BF03C003C103C303C203C40384 +00AD00B103C503C603C700A703C8038500B000A803C903CB03B003CE25A000A0 diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp874.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp874.enc new file mode 100644 index 00000000..0487b97d --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp874.enc @@ -0,0 +1,20 @@ +# Encoding file: cp874, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +20AC008100820083008420260086008700880089008A008B008C008D008E008F +009020182019201C201D20222013201400980099009A009B009C009D009E009F +00A00E010E020E030E040E050E060E070E080E090E0A0E0B0E0C0E0D0E0E0E0F +0E100E110E120E130E140E150E160E170E180E190E1A0E1B0E1C0E1D0E1E0E1F +0E200E210E220E230E240E250E260E270E280E290E2A0E2B0E2C0E2D0E2E0E2F +0E300E310E320E330E340E350E360E370E380E390E3A00000000000000000E3F +0E400E410E420E430E440E450E460E470E480E490E4A0E4B0E4C0E4D0E4E0E4F +0E500E510E520E530E540E550E560E570E580E590E5A0E5B0000000000000000 diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp932.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp932.enc new file mode 100644 index 00000000..8da8cd69 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp932.enc @@ -0,0 +1,801 @@ +# Encoding file: cp932, multi-byte +M +003F 0 46 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +0080000000000000000000850086000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000FF61FF62FF63FF64FF65FF66FF67FF68FF69FF6AFF6BFF6CFF6DFF6EFF6F +FF70FF71FF72FF73FF74FF75FF76FF77FF78FF79FF7AFF7BFF7CFF7DFF7EFF7F +FF80FF81FF82FF83FF84FF85FF86FF87FF88FF89FF8AFF8BFF8CFF8DFF8EFF8F +FF90FF91FF92FF93FF94FF95FF96FF97FF98FF99FF9AFF9BFF9CFF9DFF9EFF9F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +81 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +300030013002FF0CFF0E30FBFF1AFF1BFF1FFF01309B309C00B4FF4000A8FF3E +FFE3FF3F30FD30FE309D309E30034EDD30053006300730FC20152010FF0FFF3C +FF5E2225FF5C2026202520182019201C201DFF08FF0930143015FF3BFF3DFF5B +FF5D30083009300A300B300C300D300E300F30103011FF0BFF0D00B100D70000 +00F7FF1D2260FF1CFF1E22662267221E22342642264000B0203220332103FFE5 +FF04FFE0FFE1FF05FF03FF06FF0AFF2000A72606260525CB25CF25CE25C725C6 +25A125A025B325B225BD25BC203B301221922190219121933013000000000000 +000000000000000000000000000000002208220B2286228722822283222A2229 +0000000000000000000000000000000022272228FFE221D221D4220022030000 +0000000000000000000000000000000000000000222022A52312220222072261 +2252226A226B221A223D221D2235222B222C0000000000000000000000000000 +212B2030266F266D266A2020202100B6000000000000000025EF000000000000 +82 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000FF10 +FF11FF12FF13FF14FF15FF16FF17FF18FF190000000000000000000000000000 +FF21FF22FF23FF24FF25FF26FF27FF28FF29FF2AFF2BFF2CFF2DFF2EFF2FFF30 +FF31FF32FF33FF34FF35FF36FF37FF38FF39FF3A000000000000000000000000 +0000FF41FF42FF43FF44FF45FF46FF47FF48FF49FF4AFF4BFF4CFF4DFF4EFF4F +FF50FF51FF52FF53FF54FF55FF56FF57FF58FF59FF5A00000000000000003041 +30423043304430453046304730483049304A304B304C304D304E304F30503051 +30523053305430553056305730583059305A305B305C305D305E305F30603061 +30623063306430653066306730683069306A306B306C306D306E306F30703071 +30723073307430753076307730783079307A307B307C307D307E307F30803081 +30823083308430853086308730883089308A308B308C308D308E308F30903091 +3092309300000000000000000000000000000000000000000000000000000000 +83 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +30A130A230A330A430A530A630A730A830A930AA30AB30AC30AD30AE30AF30B0 +30B130B230B330B430B530B630B730B830B930BA30BB30BC30BD30BE30BF30C0 +30C130C230C330C430C530C630C730C830C930CA30CB30CC30CD30CE30CF30D0 +30D130D230D330D430D530D630D730D830D930DA30DB30DC30DD30DE30DF0000 +30E030E130E230E330E430E530E630E730E830E930EA30EB30EC30ED30EE30EF +30F030F130F230F330F430F530F6000000000000000000000000000000000391 +03920393039403950396039703980399039A039B039C039D039E039F03A003A1 +03A303A403A503A603A703A803A90000000000000000000000000000000003B1 +03B203B303B403B503B603B703B803B903BA03BB03BC03BD03BE03BF03C003C1 +03C303C403C503C603C703C803C9000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +84 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +04100411041204130414041504010416041704180419041A041B041C041D041E +041F0420042104220423042404250426042704280429042A042B042C042D042E +042F000000000000000000000000000000000000000000000000000000000000 +04300431043204330434043504510436043704380439043A043B043C043D0000 +043E043F0440044104420443044404450446044704480449044A044B044C044D +044E044F00000000000000000000000000000000000000000000000000002500 +2502250C251025182514251C252C25242534253C25012503250F2513251B2517 +25232533252B253B254B2520252F25282537253F251D25302525253825420000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +87 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +2460246124622463246424652466246724682469246A246B246C246D246E246F +2470247124722473216021612162216321642165216621672168216900003349 +33143322334D331833273303333633513357330D33263323332B334A333B339C +339D339E338E338F33C433A100000000000000000000000000000000337B0000 +301D301F211633CD212132A432A532A632A732A8323132323239337E337D337C +22522261222B222E2211221A22A52220221F22BF22352229222A000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +88 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000004E9C +55165A03963F54C0611B632859F690228475831C7A5060AA63E16E2565ED8466 +82A69BF56893572765A162715B9B59D0867B98F47D627DBE9B8E62167C9F88B7 +5B895EB563096697684895C7978D674F4EE54F0A4F4D4F9D504956F2593759D4 +5A015C0960DF610F61706613690570BA754F757079FB7DAD7DEF80C3840E8863 +8B029055907A533B4E954EA557DF80B290C178EF4E0058F16EA290387A328328 +828B9C2F5141537054BD54E156E059FB5F1598F26DEB80E4852D000000000000 +89 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +9662967096A097FB540B53F35B8770CF7FBD8FC296E8536F9D5C7ABA4E117893 +81FC6E26561855046B1D851A9C3B59E553A96D6674DC958F56424E91904B96F2 +834F990C53E155B65B305F71662066F368046C386CF36D29745B76C87A4E9834 +82F1885B8A6092ED6DB275AB76CA99C560A68B018D8A95B2698E53AD51860000 +5712583059445BB45EF6602863A963F46CBF6F14708E7114715971D5733F7E01 +827682D185979060925B9D1B586965BC6C5A752551F9592E59655F805FDC62BC +65FA6A2A6B276BB4738B7FC189569D2C9D0E9EC45CA16C96837B51045C4B61B6 +81C6687672614E594FFA537860696E297A4F97F34E0B53164EEE4F554F3D4FA1 +4F7352A053EF5609590F5AC15BB65BE179D16687679C67B66B4C6CB3706B73C2 +798D79BE7A3C7B8782B182DB8304837783EF83D387668AB256298CA88FE6904E +971E868A4FC45CE862117259753B81E582BD86FE8CC096C5991399D54ECB4F1A +89E356DE584A58CA5EFB5FEB602A6094606261D0621262D06539000000000000 +8A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +9B41666668B06D777070754C76867D7582A587F9958B968E8C9D51F152BE5916 +54B35BB35D16616869826DAF788D84CB88578A7293A79AB86D6C99A886D957A3 +67FF86CE920E5283568754045ED362E164B9683C68386BBB737278BA7A6B899A +89D28D6B8F0390ED95A3969497695B665CB3697D984D984E639B7B206A2B0000 +6A7F68B69C0D6F5F5272559D607062EC6D3B6E076ED1845B89108F444E149C39 +53F6691B6A3A9784682A515C7AC384B291DC938C565B9D286822830584317CA5 +520882C574E64E7E4F8351A05BD2520A52D852E75DFB559A582A59E65B8C5B98 +5BDB5E725E7960A3611F616361BE63DB656267D1685368FA6B3E6B536C576F22 +6F976F4574B0751876E3770B7AFF7BA17C217DE97F367FF0809D8266839E89B3 +8ACC8CAB908494519593959195A2966597D3992882184E38542B5CB85DCC73A9 +764C773C5CA97FEB8D0B96C19811985498584F014F0E5371559C566857FA5947 +5B095BC45C905E0C5E7E5FCC63EE673A65D765E2671F68CB68C4000000000000 +8B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6A5F5E306BC56C176C7D757F79485B637A007D005FBD898F8A188CB48D778ECC +8F1D98E29A0E9B3C4E80507D510059935B9C622F628064EC6B3A72A075917947 +7FA987FB8ABC8B7063AC83CA97A05409540355AB68546A588A70782767759ECD +53745BA2811A865090064E184E454EC74F1153CA54385BAE5F13602565510000 +673D6C426C726CE3707874037A767AAE7B087D1A7CFE7D6665E7725B53BB5C45 +5DE862D262E063196E20865A8A318DDD92F86F0179A69B5A4EA84EAB4EAC4F9B +4FA050D151477AF6517151F653545321537F53EB55AC58835CE15F375F4A602F +6050606D631F65596A4B6CC172C272ED77EF80F881058208854E90F793E197FF +99579A5A4EF051DD5C2D6681696D5C4066F26975738968507C8150C552E45747 +5DFE932665A46B236B3D7434798179BD7B4B7DCA82B983CC887F895F8B398FD1 +91D1541F92804E5D503653E5533A72D7739677E982E68EAF99C699C899D25177 +611A865E55B07A7A50765BD3904796854E326ADB91E75C515C48000000000000 +8C +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +63987A9F6C9397748F617AAA718A96887C8268177E706851936C52F2541B85AB +8A137FA48ECD90E15366888879414FC250BE521151445553572D73EA578B5951 +5F625F8460756176616761A963B2643A656C666F68426E1375667A3D7CFB7D4C +7D997E4B7F6B830E834A86CD8A088A638B668EFD981A9D8F82B88FCE9BE80000 +5287621F64836FC09699684150916B206C7A6F547A747D5088408A2367084EF6 +503950265065517C5238526355A7570F58055ACC5EFA61B261F862F36372691C +6A29727D72AC732E7814786F7D79770C80A9898B8B198CE28ED290639375967A +98559A139E785143539F53B35E7B5F266E1B6E90738473FE7D4382378A008AFA +96504E4E500B53E4547C56FA59D15B645DF15EAB5F276238654567AF6E5672D0 +7CCA88B480A180E183F0864E8A878DE8923796C798679F134E944E924F0D5348 +5449543E5A2F5F8C5FA1609F68A76A8E745A78818A9E8AA48B7791904E5E9BC9 +4EA44F7C4FAF501950165149516C529F52B952FE539A53E35411000000000000 +8D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +540E5589575157A2597D5B545B5D5B8F5DE55DE75DF75E785E835E9A5EB75F18 +6052614C629762D863A7653B6602664366F4676D6821689769CB6C5F6D2A6D69 +6E2F6E9D75327687786C7A3F7CE07D057D187D5E7DB18015800380AF80B18154 +818F822A8352884C88618B1B8CA28CFC90CA91759271783F92FC95A4964D0000 +980599999AD89D3B525B52AB53F7540858D562F76FE08C6A8F5F9EB9514B523B +544A56FD7A4091779D609ED273446F09817075115FFD60DA9AA872DB8FBC6B64 +98034ECA56F0576458BE5A5A606861C7660F6606683968B16DF775D57D3A826E +9B424E9B4F5053C955065D6F5DE65DEE67FB6C99747378028A50939688DF5750 +5EA7632B50B550AC518D670054C9585E59BB5BB05F69624D63A1683D6B736E08 +707D91C7728078157826796D658E7D3083DC88C18F09969B5264572867507F6A +8CA151B45742962A583A698A80B454B25D0E57FC78959DFA4F5C524A548B643E +6628671467F57A847B567D22932F685C9BAD7B395319518A5237000000000000 +8E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5BDF62F664AE64E6672D6BBA85A996D176909BD6634C93069BAB76BF66524E09 +509853C25C7160E864926563685F71E673CA75237B977E8286958B838CDB9178 +991065AC66AB6B8B4ED54ED44F3A4F7F523A53F853F255E356DB58EB59CB59C9 +59FF5B505C4D5E025E2B5FD7601D6307652F5B5C65AF65BD65E8679D6B620000 +6B7B6C0F7345794979C17CF87D197D2B80A2810281F389968A5E8A698A668A8C +8AEE8CC78CDC96CC98FC6B6F4E8B4F3C4F8D51505B575BFA6148630166426B21 +6ECB6CBB723E74BD75D478C1793A800C803381EA84948F9E6C509E7F5F0F8B58 +9D2B7AFA8EF85B8D96EB4E0353F157F759315AC95BA460896E7F6F0675BE8CEA +5B9F85007BE0507267F4829D5C61854A7E1E820E51995C0463688D66659C716E +793E7D1780058B1D8ECA906E86C790AA501F52FA5C3A6753707C7235914C91C8 +932B82E55BC25F3160F94E3B53D65B88624B67316B8A72E973E07A2E816B8DA3 +91529996511253D7546A5BFF63886A397DAC970056DA53CE5468000000000000 +8F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5B975C315DDE4FEE610162FE6D3279C079CB7D427E4D7FD281ED821F84908846 +89728B908E748F2F9031914B916C96C6919C4EC04F4F514553415F93620E67D4 +6C416E0B73637E2691CD928353D459195BBF6DD1795D7E2E7C9B587E719F51FA +88538FF04FCA5CFB662577AC7AE3821C99FF51C65FAA65EC696F6B896DF30000 +6E966F6476FE7D145DE190759187980651E6521D6240669166D96E1A5EB67DD2 +7F7266F885AF85F78AF852A953D959735E8F5F90605592E4966450B7511F52DD +5320534753EC54E8554655315617596859BE5A3C5BB55C065C0F5C115C1A5E84 +5E8A5EE05F70627F628462DB638C63776607660C662D6676677E68A26A1F6A35 +6CBC6D886E096E58713C7126716775C77701785D7901796579F07AE07B117CA7 +7D39809683D6848B8549885D88F38A1F8A3C8A548A738C618CDE91A49266937E +9418969C97984E0A4E084E1E4E575197527057CE583458CC5B225E3860C564FE +676167566D4472B675737A6384B88B7291B89320563157F498FE000000000000 +90 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +62ED690D6B9671ED7E548077827289E698DF87558FB15C3B4F384FE14FB55507 +5A205BDD5BE95FC3614E632F65B0664B68EE699B6D786DF1753375B9771F795E +79E67D3381E382AF85AA89AA8A3A8EAB8F9B903291DD97074EBA4EC152035875 +58EC5C0B751A5C3D814E8A0A8FC59663976D7B258ACF9808916256F353A80000 +9017543957825E2563A86C34708A77617C8B7FE088709042915493109318968F +745E9AC45D075D69657067A28DA896DB636E6749691983C5981796C088FE6F84 +647A5BF84E16702C755D662F51C4523652E259D35F8160276210653F6574661F +667468F268166B636E057272751F76DB7CBE805658F088FD897F8AA08A938ACB +901D91929752975965897A0E810696BB5E2D60DC621A65A56614679077F37A4D +7C4D7E3E810A8CAC8D648DE18E5F78A9520762D963A5644262988A2D7A837BC0 +8AAC96EA7D76820C87494ED95148534353605BA35C025C165DDD6226624764B0 +681368346CC96D456D1767D36F5C714E717D65CB7A7F7BAD7DDA000000000000 +91 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7E4A7FA8817A821B823985A68A6E8CCE8DF59078907792AD929195839BAE524D +55846F387136516879857E5581B37CCE564C58515CA863AA66FE66FD695A72D9 +758F758E790E795679DF7C977D207D4486078A34963B90619F2050E7527553CC +53E2500955AA58EE594F723D5B8B5C64531D60E360F3635C6383633F63BB0000 +64CD65E966F95DE369CD69FD6F1571E54E8975E976F87A937CDF7DCF7D9C8061 +83498358846C84BC85FB88C58D709001906D9397971C9A1250CF5897618E81D3 +85358D0890204FC3507452475373606F6349675F6E2C8DB3901F4FD75C5E8CCA +65CF7D9A53528896517663C35B585B6B5C0A640D6751905C4ED6591A592A6C70 +8A51553E581559A560F0625367C182356955964099C49A284F5358065BFE8010 +5CB15E2F5F856020614B623466FF6CF06EDE80CE817F82D4888B8CB89000902E +968A9EDB9BDB4EE353F059277B2C918D984C9DF96EDD7027535355445B856258 +629E62D36CA26FEF74228A1794386FC18AFE833851E786F853EA000000000000 +92 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +53E94F4690548FB0596A81315DFD7AEA8FBF68DA8C3772F89C486A3D8AB04E39 +53585606576662C563A265E66B4E6DE16E5B70AD77ED7AEF7BAA7DBB803D80C6 +86CB8A95935B56E358C75F3E65AD66966A806BB575378AC7502477E557305F1B +6065667A6C6075F47A1A7F6E81F48718904599B37BC9755C7AF97B5184C40000 +901079E97A9283365AE177404E2D4EF25B995FE062BD663C67F16CE8866B8877 +8A3B914E92F399D06A177026732A82E784578CAF4E01514651CB558B5BF55E16 +5E335E815F145F355F6B5FB461F2631166A2671D6F6E7252753A773A80748139 +817887768ABF8ADC8D858DF3929A957798029CE552C5635776F467156C8873CD +8CC393AE96736D25589C690E69CC8FFD939A75DB901A585A680263B469FB4F43 +6F2C67D88FBB85267DB49354693F6F70576A58F75B2C7D2C722A540A91E39DB4 +4EAD4F4E505C507552438C9E544858245B9A5E1D5E955EAD5EF75F1F608C62B5 +633A63D068AF6C407887798E7A0B7DE082478A028AE68E449013000000000000 +93 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +90B8912D91D89F0E6CE5645864E265756EF476847B1B906993D16EBA54F25FB9 +64A48F4D8FED92445178586B59295C555E976DFB7E8F751C8CBC8EE2985B70B9 +4F1D6BBF6FB1753096FB514E54105835585759AC5C605F926597675C6E21767B +83DF8CED901490FD934D7825783A52AA5EA6571F597460125012515A51AC0000 +51CD520055105854585859575B955CF65D8B60BC6295642D6771684368BC68DF +76D76DD86E6F6D9B706F71C85F5375D879777B497B547B527CD67D7152308463 +856985E48A0E8B048C468E0F9003900F94199676982D9A3095D850CD52D5540C +58025C0E61A7649E6D1E77B37AE580F48404905392855CE09D07533F5F975FB3 +6D9C7279776379BF7BE46BD272EC8AAD68036A6151F87A8169345C4A9CF682EB +5BC59149701E56785C6F60C765666C8C8C5A90419813545166C7920D594890A3 +51854E4D51EA85998B0E7058637A934B696299B47E047577535769608EDF96E3 +6C5D4E8C5C3C5F108FE953028CD1808986795EFF65E54E735165000000000000 +94 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +59825C3F97EE4EFB598A5FCD8A8D6FE179B079625BE78471732B71B15E745FF5 +637B649A71C37C984E435EFC4E4B57DC56A260A96FC37D0D80FD813381BF8FB2 +899786A45DF4628A64AD898767776CE26D3E743678345A467F7582AD99AC4FF3 +5EC362DD63926557676F76C3724C80CC80BA8F29914D500D57F95A9268850000 +6973716472FD8CB758F28CE0966A9019877F79E477E784294F2F5265535A62CD +67CF6CCA767D7B947C95823685848FEB66DD6F2072067E1B83AB99C19EA651FD +7BB178727BB880877B486AE85E61808C75517560516B92626E8C767A91979AEA +4F107F70629C7B4F95A59CE9567A585986E496BC4F345224534A53CD53DB5E06 +642C6591677F6C3E6C4E724872AF73ED75547E41822C85E98CA97BC491C67169 +981298EF633D6669756A76E478D0854386EE532A5351542659835E875F7C60B2 +6249627962AB65906BD46CCC75B276AE789179D87DCB7F7780A588AB8AB98CBB +907F975E98DB6A0B7C3850995C3E5FAE67876BD8743577097F8E000000000000 +95 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +9F3B67CA7A175339758B9AED5F66819D83F180985F3C5FC575627B46903C6867 +59EB5A9B7D10767E8B2C4FF55F6A6A196C376F0274E2796888688A558C795EDF +63CF75C579D282D7932892F2849C86ED9C2D54C15F6C658C6D5C70158CA78CD3 +983B654F74F64E0D4ED857E0592B5A665BCC51A85E035E9C6016627665770000 +65A7666E6D6E72367B268150819A82998B5C8CA08CE68D74961C96444FAE64AB +6B66821E8461856A90E85C01695398A8847A85574F0F526F5FA95E45670D798F +8179890789866DF55F1762556CB84ECF72699B925206543B567458B361A4626E +711A596E7C897CDE7D1B96F06587805E4E194F75517558405E635E735F0A67C4 +4E26853D9589965B7C73980150FB58C1765678A7522577A585117B86504F5909 +72477BC77DE88FBA8FD4904D4FBF52C95A295F0197AD4FDD821792EA57036355 +6B69752B88DC8F147A4252DF58936155620A66AE6BCD7C3F83E950234FF85305 +5446583159495B9D5CF05CEF5D295E9662B16367653E65B9670B000000000000 +96 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6CD56CE170F978327E2B80DE82B3840C84EC870289128A2A8C4A90A692D298FD +9CF39D6C4E4F4EA1508D5256574A59A85E3D5FD85FD9623F66B4671B67D068D2 +51927D2180AA81A88B008C8C8CBF927E96325420982C531750D5535C58A864B2 +6734726777667A4691E652C36CA16B8658005E4C5954672C7FFB51E176C60000 +646978E89B549EBB57CB59B96627679A6BCE54E969D95E55819C67959BAA67FE +9C52685D4EA64FE353C862B9672B6CAB8FC44FAD7E6D9EBF4E0761626E806F2B +85135473672A9B455DF37B955CAC5BC6871C6E4A84D17A14810859997C8D6C11 +772052D959227121725F77DB97279D61690B5A7F5A1851A5540D547D660E76DF +8FF792989CF459EA725D6EC5514D68C97DBF7DEC97629EBA64786A2183025984 +5B5F6BDB731B76F27DB280178499513267289ED976EE676252FF99055C24623B +7C7E8CB0554F60B67D0B958053014E5F51B6591C723A803691CE5F2577E25384 +5F797D0485AC8A338E8D975667F385AE9453610961086CB97652000000000000 +97 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8AED8F38552F4F51512A52C753CB5BA55E7D60A0618263D6670967DA6E676D8C +733673377531795088D58A98904A909190F596C4878D59154E884F594E0E8A89 +8F3F981050AD5E7C59965BB95EB863DA63FA64C166DC694A69D86D0B6EB67194 +75287AAF7F8A8000844984C989818B218E0A9065967D990A617E62916B320000 +6C836D747FCC7FFC6DC07F8587BA88F8676583B1983C96F76D1B7D61843D916A +4E7153755D506B046FEB85CD862D89A75229540F5C65674E68A87406748375E2 +88CF88E191CC96E296785F8B73877ACB844E63A0756552896D416E9C74097559 +786B7C9296867ADC9F8D4FB6616E65C5865C4E864EAE50DA4E2151CC5BEE6599 +68816DBC731F764277AD7A1C7CE7826F8AD2907C91CF96759818529B7DD1502B +539867976DCB71D0743381E88F2A96A39C579E9F746058416D997D2F985E4EE4 +4F364F8B51B752B15DBA601C73B2793C82D3923496B796F6970A9E979F6266A6 +6B74521752A370C888C25EC9604B61906F2371497C3E7DF4806F000000000000 +98 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +84EE9023932C54429B6F6AD370898CC28DEF973252B45A415ECA5F046717697C +69946D6A6F0F726272FC7BED8001807E874B90CE516D9E937984808B93328AD6 +502D548C8A716B6A8CC4810760D167A09DF24E994E989C108A6B85C185686900 +6E7E789781550000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000005F0C +4E104E154E2A4E314E364E3C4E3F4E424E564E584E824E858C6B4E8A82125F0D +4E8E4E9E4E9F4EA04EA24EB04EB34EB64ECE4ECD4EC44EC64EC24ED74EDE4EED +4EDF4EF74F094F5A4F304F5B4F5D4F574F474F764F884F8F4F984F7B4F694F70 +4F914F6F4F864F9651184FD44FDF4FCE4FD84FDB4FD14FDA4FD04FE44FE5501A +50285014502A502550054F1C4FF650215029502C4FFE4FEF5011500650435047 +6703505550505048505A5056506C50785080509A508550B450B2000000000000 +99 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +50C950CA50B350C250D650DE50E550ED50E350EE50F950F55109510151025116 +51155114511A5121513A5137513C513B513F51405152514C515451627AF85169 +516A516E5180518256D8518C5189518F519151935195519651A451A651A251A9 +51AA51AB51B351B151B251B051B551BD51C551C951DB51E0865551E951ED0000 +51F051F551FE5204520B5214520E5227522A522E52335239524F5244524B524C +525E5254526A527452695273527F527D528D529452925271528852918FA88FA7 +52AC52AD52BC52B552C152CD52D752DE52E352E698ED52E052F352F552F852F9 +530653087538530D5310530F5315531A5323532F533153335338534053465345 +4E175349534D51D6535E5369536E5918537B53775382539653A053A653A553AE +53B053B653C37C1296D953DF66FC71EE53EE53E853ED53FA5401543D5440542C +542D543C542E54365429541D544E548F5475548E545F5471547754705492547B +5480547654845490548654C754A254B854A554AC54C454C854A8000000000000 +9A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +54AB54C254A454BE54BC54D854E554E6550F551454FD54EE54ED54FA54E25539 +55405563554C552E555C55455556555755385533555D5599558054AF558A559F +557B557E5598559E55AE557C558355A9558755A855DA55C555DF55C455DC55E4 +55D4561455F7561655FE55FD561B55F9564E565071DF56345636563256380000 +566B5664562F566C566A56865680568A56A05694568F56A556AE56B656B456C2 +56BC56C156C356C056C856CE56D156D356D756EE56F9570056FF570457095708 +570B570D57135718571655C7571C572657375738574E573B5740574F576957C0 +57885761577F5789579357A057B357A457AA57B057C357C657D457D257D3580A +57D657E3580B5819581D587258215862584B58706BC05852583D5879588558B9 +589F58AB58BA58DE58BB58B858AE58C558D358D158D758D958D858E558DC58E4 +58DF58EF58FA58F958FB58FC58FD5902590A5910591B68A65925592C592D5932 +5938593E7AD259555950594E595A5958596259605967596C5969000000000000 +9B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +59785981599D4F5E4FAB59A359B259C659E859DC598D59D959DA5A255A1F5A11 +5A1C5A095A1A5A405A6C5A495A355A365A625A6A5A9A5ABC5ABE5ACB5AC25ABD +5AE35AD75AE65AE95AD65AFA5AFB5B0C5B0B5B165B325AD05B2A5B365B3E5B43 +5B455B405B515B555B5A5B5B5B655B695B705B735B755B7865885B7A5B800000 +5B835BA65BB85BC35BC75BC95BD45BD05BE45BE65BE25BDE5BE55BEB5BF05BF6 +5BF35C055C075C085C0D5C135C205C225C285C385C395C415C465C4E5C535C50 +5C4F5B715C6C5C6E4E625C765C795C8C5C915C94599B5CAB5CBB5CB65CBC5CB7 +5CC55CBE5CC75CD95CE95CFD5CFA5CED5D8C5CEA5D0B5D155D175D5C5D1F5D1B +5D115D145D225D1A5D195D185D4C5D525D4E5D4B5D6C5D735D765D875D845D82 +5DA25D9D5DAC5DAE5DBD5D905DB75DBC5DC95DCD5DD35DD25DD65DDB5DEB5DF2 +5DF55E0B5E1A5E195E115E1B5E365E375E445E435E405E4E5E575E545E5F5E62 +5E645E475E755E765E7A9EBC5E7F5EA05EC15EC25EC85ED05ECF000000000000 +9C +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5ED65EE35EDD5EDA5EDB5EE25EE15EE85EE95EEC5EF15EF35EF05EF45EF85EFE +5F035F095F5D5F5C5F0B5F115F165F295F2D5F385F415F485F4C5F4E5F2F5F51 +5F565F575F595F615F6D5F735F775F835F825F7F5F8A5F885F915F875F9E5F99 +5F985FA05FA85FAD5FBC5FD65FFB5FE45FF85FF15FDD60B35FFF602160600000 +601960106029600E6031601B6015602B6026600F603A605A6041606A6077605F +604A6046604D6063604360646042606C606B60596081608D60E76083609A6084 +609B60966097609260A7608B60E160B860E060D360B45FF060BD60C660B560D8 +614D6115610660F660F7610060F460FA6103612160FB60F1610D610E6147613E +61286127614A613F613C612C6134613D614261446173617761586159615A616B +6174616F61656171615F615D6153617561996196618761AC6194619A618A6191 +61AB61AE61CC61CA61C961F761C861C361C661BA61CB7F7961CD61E661E361F6 +61FA61F461FF61FD61FC61FE620062086209620D620C6214621B000000000000 +9D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +621E6221622A622E6230623262336241624E625E6263625B62606268627C6282 +6289627E62926293629662D46283629462D762D162BB62CF62FF62C664D462C8 +62DC62CC62CA62C262C7629B62C9630C62EE62F163276302630862EF62F56350 +633E634D641C634F6396638E638063AB637663A3638F6389639F63B5636B0000 +636963BE63E963C063C663E363C963D263F663C4641664346406641364266436 +651D64176428640F6467646F6476644E652A6495649364A564A9648864BC64DA +64D264C564C764BB64D864C264F164E7820964E064E162AC64E364EF652C64F6 +64F464F264FA650064FD6518651C650565246523652B65346535653765366538 +754B654865566555654D6558655E655D65726578658265838B8A659B659F65AB +65B765C365C665C165C465CC65D265DB65D965E065E165F16772660A660365FB +6773663566366634661C664F664466496641665E665D666466676668665F6662 +667066836688668E668966846698669D66C166B966C966BE66BC000000000000 +9E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +66C466B866D666DA66E0663F66E666E966F066F566F7670F6716671E67266727 +9738672E673F67366741673867376746675E67606759676367646789677067A9 +677C676A678C678B67A667A1678567B767EF67B467EC67B367E967B867E467DE +67DD67E267EE67B967CE67C667E76A9C681E684668296840684D6832684E0000 +68B3682B685968636877687F689F688F68AD6894689D689B68836AAE68B96874 +68B568A068BA690F688D687E690168CA690868D86922692668E1690C68CD68D4 +68E768D569366912690468D768E3692568F968E068EF6928692A691A69236921 +68C669796977695C6978696B6954697E696E69396974693D695969306961695E +695D6981696A69B269AE69D069BF69C169D369BE69CE5BE869CA69DD69BB69C3 +69A76A2E699169A0699C699569B469DE69E86A026A1B69FF6B0A69F969F269E7 +6A0569B16A1E69ED6A1469EB6A0A6A126AC16A236A136A446A0C6A726A366A78 +6A476A626A596A666A486A386A226A906A8D6AA06A846AA26AA3000000000000 +9F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6A9786176ABB6AC36AC26AB86AB36AAC6ADE6AD16ADF6AAA6ADA6AEA6AFB6B05 +86166AFA6B126B169B316B1F6B386B3776DC6B3998EE6B476B436B496B506B59 +6B546B5B6B5F6B616B786B796B7F6B806B846B836B8D6B986B956B9E6BA46BAA +6BAB6BAF6BB26BB16BB36BB76BBC6BC66BCB6BD36BDF6BEC6BEB6BF36BEF0000 +9EBE6C086C136C146C1B6C246C236C5E6C556C626C6A6C826C8D6C9A6C816C9B +6C7E6C686C736C926C906CC46CF16CD36CBD6CD76CC56CDD6CAE6CB16CBE6CBA +6CDB6CEF6CD96CEA6D1F884D6D366D2B6D3D6D386D196D356D336D126D0C6D63 +6D936D646D5A6D796D596D8E6D956FE46D856DF96E156E0A6DB56DC76DE66DB8 +6DC66DEC6DDE6DCC6DE86DD26DC56DFA6DD96DE46DD56DEA6DEE6E2D6E6E6E2E +6E196E726E5F6E3E6E236E6B6E2B6E766E4D6E1F6E436E3A6E4E6E246EFF6E1D +6E386E826EAA6E986EC96EB76ED36EBD6EAF6EC46EB26ED46ED56E8F6EA56EC2 +6E9F6F416F11704C6EEC6EF86EFE6F3F6EF26F316EEF6F326ECC000000000000 +E0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6F3E6F136EF76F866F7A6F786F816F806F6F6F5B6FF36F6D6F826F7C6F586F8E +6F916FC26F666FB36FA36FA16FA46FB96FC66FAA6FDF6FD56FEC6FD46FD86FF1 +6FEE6FDB7009700B6FFA70117001700F6FFE701B701A6F74701D7018701F7030 +703E7032705170637099709270AF70F170AC70B870B370AE70DF70CB70DD0000 +70D9710970FD711C711971657155718871667162714C7156716C718F71FB7184 +719571A871AC71D771B971BE71D271C971D471CE71E071EC71E771F571FC71F9 +71FF720D7210721B7228722D722C72307232723B723C723F72407246724B7258 +7274727E7282728172877292729672A272A772B972B272C372C672C472CE72D2 +72E272E072E172F972F7500F7317730A731C7316731D7334732F73297325733E +734E734F9ED87357736A7368737073787375737B737A73C873B373CE73BB73C0 +73E573EE73DE74A27405746F742573F87432743A7455743F745F74597441745C +746974707463746A7476747E748B749E74A774CA74CF74D473F1000000000000 +E1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +74E074E374E774E974EE74F274F074F174F874F7750475037505750C750E750D +75157513751E7526752C753C7544754D754A7549755B7546755A756975647567 +756B756D75787576758675877574758A758975827594759A759D75A575A375C2 +75B375C375B575BD75B875BC75B175CD75CA75D275D975E375DE75FE75FF0000 +75FC760175F075FA75F275F3760B760D7609761F762776207621762276247634 +7630763B764776487646765C76587661766276687669766A7667766C76707672 +76767678767C768076837688768B768E769676937699769A76B076B476B876B9 +76BA76C276CD76D676D276DE76E176E576E776EA862F76FB7708770777047729 +7724771E77257726771B773777387747775A7768776B775B7765777F777E7779 +778E778B779177A0779E77B077B677B977BF77BC77BD77BB77C777CD77D777DA +77DC77E377EE77FC780C781279267820792A7845788E78747886787C789A788C +78A378B578AA78AF78D178C678CB78D478BE78BC78C578CA78EC000000000000 +E2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +78E778DA78FD78F47907791279117919792C792B794079607957795F795A7955 +7953797A797F798A799D79A79F4B79AA79AE79B379B979BA79C979D579E779EC +79E179E37A087A0D7A187A197A207A1F79807A317A3B7A3E7A377A437A577A49 +7A617A627A699F9D7A707A797A7D7A887A977A957A987A967AA97AC87AB00000 +7AB67AC57AC47ABF90837AC77ACA7ACD7ACF7AD57AD37AD97ADA7ADD7AE17AE2 +7AE67AED7AF07B027B0F7B0A7B067B337B187B197B1E7B357B287B367B507B7A +7B047B4D7B0B7B4C7B457B757B657B747B677B707B717B6C7B6E7B9D7B987B9F +7B8D7B9C7B9A7B8B7B927B8F7B5D7B997BCB7BC17BCC7BCF7BB47BC67BDD7BE9 +7C117C147BE67BE57C607C007C077C137BF37BF77C177C0D7BF67C237C277C2A +7C1F7C377C2B7C3D7C4C7C437C547C4F7C407C507C587C5F7C647C567C657C6C +7C757C837C907CA47CAD7CA27CAB7CA17CA87CB37CB27CB17CAE7CB97CBD7CC0 +7CC57CC27CD87CD27CDC7CE29B3B7CEF7CF27CF47CF67CFA7D06000000000000 +E3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7D027D1C7D157D0A7D457D4B7D2E7D327D3F7D357D467D737D567D4E7D727D68 +7D6E7D4F7D637D937D897D5B7D8F7D7D7D9B7DBA7DAE7DA37DB57DC77DBD7DAB +7E3D7DA27DAF7DDC7DB87D9F7DB07DD87DDD7DE47DDE7DFB7DF27DE17E057E0A +7E237E217E127E317E1F7E097E0B7E227E467E667E3B7E357E397E437E370000 +7E327E3A7E677E5D7E567E5E7E597E5A7E797E6A7E697E7C7E7B7E837DD57E7D +8FAE7E7F7E887E897E8C7E927E907E937E947E967E8E7E9B7E9C7F387F3A7F45 +7F4C7F4D7F4E7F507F517F557F547F587F5F7F607F687F697F677F787F827F86 +7F837F887F877F8C7F947F9E7F9D7F9A7FA37FAF7FB27FB97FAE7FB67FB88B71 +7FC57FC67FCA7FD57FD47FE17FE67FE97FF37FF998DC80068004800B80128018 +8019801C80218028803F803B804A804680528058805A805F8062806880738072 +807080768079807D807F808480868085809B8093809A80AD519080AC80DB80E5 +80D980DD80C480DA80D6810980EF80F1811B81298123812F814B000000000000 +E4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +968B8146813E8153815180FC8171816E81658166817481838188818A81808182 +81A0819581A481A3815F819381A981B081B581BE81B881BD81C081C281BA81C9 +81CD81D181D981D881C881DA81DF81E081E781FA81FB81FE8201820282058207 +820A820D821082168229822B82388233824082598258825D825A825F82640000 +82628268826A826B822E827182778278827E828D829282AB829F82BB82AC82E1 +82E382DF82D282F482F382FA8393830382FB82F982DE830682DC830982D98335 +83348316833283318340833983508345832F832B831783188385839A83AA839F +83A283968323838E8387838A837C83B58373837583A0838983A883F4841383EB +83CE83FD840383D8840B83C183F7840783E083F2840D8422842083BD84388506 +83FB846D842A843C855A84848477846B84AD846E848284698446842C846F8479 +843584CA846284B984BF849F84D984CD84BB84DA84D084C184C684D684A18521 +84FF84F485178518852C851F8515851484FC8540856385588548000000000000 +E5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +85418602854B8555858085A485888591858A85A8856D8594859B85EA8587859C +8577857E859085C985BA85CF85B985D085D585DD85E585DC85F9860A8613860B +85FE85FA86068622861A8630863F864D4E558654865F86678671869386A386A9 +86AA868B868C86B686AF86C486C686B086C9882386AB86D486DE86E986EC0000 +86DF86DB86EF8712870687088700870386FB87118709870D86F9870A8734873F +8737873B87258729871A8760875F8778874C874E877487578768876E87598753 +8763876A880587A2879F878287AF87CB87BD87C087D096D687AB87C487B387C7 +87C687BB87EF87F287E0880F880D87FE87F687F7880E87D28811881688158822 +88218831883688398827883B8844884288528859885E8862886B8881887E889E +8875887D88B5887288828897889288AE889988A2888D88A488B088BF88B188C3 +88C488D488D888D988DD88F9890288FC88F488E888F28904890C890A89138943 +891E8925892A892B89418944893B89368938894C891D8960895E000000000000 +E6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +89668964896D896A896F89748977897E89838988898A8993899889A189A989A6 +89AC89AF89B289BA89BD89BF89C089DA89DC89DD89E789F489F88A038A168A10 +8A0C8A1B8A1D8A258A368A418A5B8A528A468A488A7C8A6D8A6C8A628A858A82 +8A848AA88AA18A918AA58AA68A9A8AA38AC48ACD8AC28ADA8AEB8AF38AE70000 +8AE48AF18B148AE08AE28AF78ADE8ADB8B0C8B078B1A8AE18B168B108B178B20 +8B3397AB8B268B2B8B3E8B288B418B4C8B4F8B4E8B498B568B5B8B5A8B6B8B5F +8B6C8B6F8B748B7D8B808B8C8B8E8B928B938B968B998B9A8C3A8C418C3F8C48 +8C4C8C4E8C508C558C628C6C8C788C7A8C828C898C858C8A8C8D8C8E8C948C7C +8C98621D8CAD8CAA8CBD8CB28CB38CAE8CB68CC88CC18CE48CE38CDA8CFD8CFA +8CFB8D048D058D0A8D078D0F8D0D8D109F4E8D138CCD8D148D168D678D6D8D71 +8D738D818D998DC28DBE8DBA8DCF8DDA8DD68DCC8DDB8DCB8DEA8DEB8DDF8DE3 +8DFC8E088E098DFF8E1D8E1E8E108E1F8E428E358E308E348E4A000000000000 +E7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8E478E498E4C8E508E488E598E648E608E2A8E638E558E768E728E7C8E818E87 +8E858E848E8B8E8A8E938E918E948E998EAA8EA18EAC8EB08EC68EB18EBE8EC5 +8EC88ECB8EDB8EE38EFC8EFB8EEB8EFE8F0A8F058F158F128F198F138F1C8F1F +8F1B8F0C8F268F338F3B8F398F458F428F3E8F4C8F498F468F4E8F578F5C0000 +8F628F638F648F9C8F9F8FA38FAD8FAF8FB78FDA8FE58FE28FEA8FEF90878FF4 +90058FF98FFA901190159021900D901E9016900B90279036903590398FF8904F +905090519052900E9049903E90569058905E9068906F907696A890729082907D +90819080908A9089908F90A890AF90B190B590E290E4624890DB910291129119 +91329130914A9156915891639165916991739172918B9189918291A291AB91AF +91AA91B591B491BA91C091C191C991CB91D091D691DF91E191DB91FC91F591F6 +921E91FF9214922C92159211925E925792459249926492489295923F924B9250 +929C92969293929B925A92CF92B992B792E9930F92FA9344932E000000000000 +E8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +93199322931A9323933A9335933B935C9360937C936E935693B093AC93AD9394 +93B993D693D793E893E593D893C393DD93D093C893E4941A9414941394039407 +94109436942B94359421943A944194529444945B94609462945E946A92299470 +94759477947D945A947C947E9481947F95829587958A95949596959895990000 +95A095A895A795AD95BC95BB95B995BE95CA6FF695C395CD95CC95D595D495D6 +95DC95E195E595E296219628962E962F9642964C964F964B9677965C965E965D +965F96669672966C968D96989695969796AA96A796B196B296B096B496B696B8 +96B996CE96CB96C996CD894D96DC970D96D596F99704970697089713970E9711 +970F971697199724972A97309739973D973E97449746974897429749975C9760 +97649766976852D2976B977197799785977C9781977A9786978B978F9790979C +97A897A697A397B397B497C397C697C897CB97DC97ED9F4F97F27ADF97F697F5 +980F980C9838982498219837983D9846984F984B986B986F9870000000000000 +E9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +98719874987398AA98AF98B198B698C498C398C698E998EB9903990999129914 +99189921991D991E99249920992C992E993D993E9942994999459950994B9951 +9952994C99559997999899A599AD99AE99BC99DF99DB99DD99D899D199ED99EE +99F199F299FB99F89A019A0F9A0599E29A199A2B9A379A459A429A409A430000 +9A3E9A559A4D9A5B9A579A5F9A629A659A649A699A6B9A6A9AAD9AB09ABC9AC0 +9ACF9AD19AD39AD49ADE9ADF9AE29AE39AE69AEF9AEB9AEE9AF49AF19AF79AFB +9B069B189B1A9B1F9B229B239B259B279B289B299B2A9B2E9B2F9B329B449B43 +9B4F9B4D9B4E9B519B589B749B939B839B919B969B979B9F9BA09BA89BB49BC0 +9BCA9BB99BC69BCF9BD19BD29BE39BE29BE49BD49BE19C3A9BF29BF19BF09C15 +9C149C099C139C0C9C069C089C129C0A9C049C2E9C1B9C259C249C219C309C47 +9C329C469C3E9C5A9C609C679C769C789CE79CEC9CF09D099D089CEB9D039D06 +9D2A9D269DAF9D239D1F9D449D159D129D419D3F9D3E9D469D48000000000000 +EA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +9D5D9D5E9D649D519D509D599D729D899D879DAB9D6F9D7A9D9A9DA49DA99DB2 +9DC49DC19DBB9DB89DBA9DC69DCF9DC29DD99DD39DF89DE69DED9DEF9DFD9E1A +9E1B9E1E9E759E799E7D9E819E889E8B9E8C9E929E959E919E9D9EA59EA99EB8 +9EAA9EAD97619ECC9ECE9ECF9ED09ED49EDC9EDE9EDD9EE09EE59EE89EEF0000 +9EF49EF69EF79EF99EFB9EFC9EFD9F079F0876B79F159F219F2C9F3E9F4A9F52 +9F549F639F5F9F609F619F669F679F6C9F6A9F779F729F769F959F9C9FA0582F +69C79059746451DC719900000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +ED +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7E8A891C9348928884DC4FC970BB663168C892F966FB5F454E284EE14EFC4F00 +4F034F394F564F924F8A4F9A4F944FCD504050224FFF501E5046507050425094 +50F450D8514A5164519D51BE51EC5215529C52A652C052DB5300530753245372 +539353B253DDFA0E549C548A54A954FF55865759576557AC57C857C7FA0F0000 +FA10589E58B2590B5953595B595D596359A459BA5B565BC0752F5BD85BEC5C1E +5CA65CBA5CF55D275D53FA115D425D6D5DB85DB95DD05F215F345F675FB75FDE +605D6085608A60DE60D5612060F26111613761306198621362A663F56460649D +64CE654E66006615663B6609662E661E6624666566576659FA126673669966A0 +66B266BF66FA670EF929676667BB685267C06801684468CFFA136968FA146998 +69E26A306A6B6A466A736A7E6AE26AE46BD66C3F6C5C6C866C6F6CDA6D046D87 +6D6F6D966DAC6DCF6DF86DF26DFC6E396E5C6E276E3C6EBF6F886FB56FF57005 +70077028708570AB710F7104715C71467147FA1571C171FE72B1000000000000 +EE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +72BE7324FA16737773BD73C973D673E373D2740773F57426742A7429742E7462 +7489749F7501756F7682769C769E769B76A6FA17774652AF7821784E7864787A +7930FA18FA19FA1A7994FA1B799B7AD17AE7FA1C7AEB7B9EFA1D7D487D5C7DB7 +7DA07DD67E527F477FA1FA1E83018362837F83C783F6844884B4855385590000 +856BFA1F85B0FA20FA21880788F58A128A378A798AA78ABE8ADFFA228AF68B53 +8B7F8CF08CF48D128D76FA238ECFFA24FA25906790DEFA269115912791DA91D7 +91DE91ED91EE91E491E592069210920A923A9240923C924E9259925192399267 +92A79277927892E792D792D992D0FA2792D592E092D39325932192FBFA28931E +92FF931D93029370935793A493C693DE93F89431944594489592F9DCFA29969D +96AF9733973B9743974D974F9751975598579865FA2AFA2B9927FA2C999E9A4E +9AD99ADC9B759B729B8F9BB19BBB9C009D709D6BFA2D9E199ED1000000002170 +217121722173217421752176217721782179FFE2FFE4FF07FF02000000000000 +FA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +2170217121722173217421752176217721782179216021612162216321642165 +2166216721682169FFE2FFE4FF07FF0232312116212122357E8A891C93489288 +84DC4FC970BB663168C892F966FB5F454E284EE14EFC4F004F034F394F564F92 +4F8A4F9A4F944FCD504050224FFF501E504650705042509450F450D8514A0000 +5164519D51BE51EC5215529C52A652C052DB5300530753245372539353B253DD +FA0E549C548A54A954FF55865759576557AC57C857C7FA0FFA10589E58B2590B +5953595B595D596359A459BA5B565BC0752F5BD85BEC5C1E5CA65CBA5CF55D27 +5D53FA115D425D6D5DB85DB95DD05F215F345F675FB75FDE605D6085608A60DE +60D5612060F26111613761306198621362A663F56460649D64CE654E66006615 +663B6609662E661E6624666566576659FA126673669966A066B266BF66FA670E +F929676667BB685267C06801684468CFFA136968FA14699869E26A306A6B6A46 +6A736A7E6AE26AE46BD66C3F6C5C6C866C6F6CDA6D046D876D6F000000000000 +FB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6D966DAC6DCF6DF86DF26DFC6E396E5C6E276E3C6EBF6F886FB56FF570057007 +7028708570AB710F7104715C71467147FA1571C171FE72B172BE7324FA167377 +73BD73C973D673E373D2740773F57426742A7429742E74627489749F7501756F +7682769C769E769B76A6FA17774652AF7821784E7864787A7930FA18FA190000 +FA1A7994FA1B799B7AD17AE7FA1C7AEB7B9EFA1D7D487D5C7DB77DA07DD67E52 +7F477FA1FA1E83018362837F83C783F6844884B485538559856BFA1F85B0FA20 +FA21880788F58A128A378A798AA78ABE8ADFFA228AF68B538B7F8CF08CF48D12 +8D76FA238ECFFA24FA25906790DEFA269115912791DA91D791DE91ED91EE91E4 +91E592069210920A923A9240923C924E925992519239926792A79277927892E7 +92D792D992D0FA2792D592E092D39325932192FBFA28931E92FF931D93029370 +935793A493C693DE93F89431944594489592F9DCFA29969D96AF9733973B9743 +974D974F9751975598579865FA2AFA2B9927FA2C999E9A4E9AD9000000000000 +FC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +9ADC9B759B729B8F9BB19BBB9C009D709D6BFA2D9E199ED10000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +R +8160 301C FF5E +8161 2016 2225 +817C 2212 FF0D +8191 00A2 FFE0 +8192 00A3 FFE1 +81CA 00AC FFE2 +81BE 222a +81BF 2229 +81DA 2220 +81DB 22a5 +81DF 2261 +81E0 2252 +81E3 221a +81E6 2235 +81E7 222b diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp936.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp936.enc new file mode 100644 index 00000000..37bcc80d --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp936.enc @@ -0,0 +1,2162 @@ +# Encoding file: cp936, multi-byte +M +003F 0 127 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +20AC000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +81 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4E024E044E054E064E0F4E124E174E1F4E204E214E234E264E294E2E4E2F4E31 +4E334E354E374E3C4E404E414E424E444E464E4A4E514E554E574E5A4E5B4E62 +4E634E644E654E674E684E6A4E6B4E6C4E6D4E6E4E6F4E724E744E754E764E77 +4E784E794E7A4E7B4E7C4E7D4E7F4E804E814E824E834E844E854E874E8A0000 +4E904E964E974E994E9C4E9D4E9E4EA34EAA4EAF4EB04EB14EB44EB64EB74EB8 +4EB94EBC4EBD4EBE4EC84ECC4ECF4ED04ED24EDA4EDB4EDC4EE04EE24EE64EE7 +4EE94EED4EEE4EEF4EF14EF44EF84EF94EFA4EFC4EFE4F004F024F034F044F05 +4F064F074F084F0B4F0C4F124F134F144F154F164F1C4F1D4F214F234F284F29 +4F2C4F2D4F2E4F314F334F354F374F394F3B4F3E4F3F4F404F414F424F444F45 +4F474F484F494F4A4F4B4F4C4F524F544F564F614F624F664F684F6A4F6B4F6D +4F6E4F714F724F754F774F784F794F7A4F7D4F804F814F824F854F864F874F8A +4F8C4F8E4F904F924F934F954F964F984F994F9A4F9C4F9E4F9F4FA14FA20000 +82 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4FA44FAB4FAD4FB04FB14FB24FB34FB44FB64FB74FB84FB94FBA4FBB4FBC4FBD +4FBE4FC04FC14FC24FC64FC74FC84FC94FCB4FCC4FCD4FD24FD34FD44FD54FD6 +4FD94FDB4FE04FE24FE44FE54FE74FEB4FEC4FF04FF24FF44FF54FF64FF74FF9 +4FFB4FFC4FFD4FFF5000500150025003500450055006500750085009500A0000 +500B500E501050115013501550165017501B501D501E50205022502350245027 +502B502F5030503150325033503450355036503750385039503B503D503F5040 +504150425044504550465049504A504B504D5050505150525053505450565057 +50585059505B505D505E505F506050615062506350645066506750685069506A +506B506D506E506F50705071507250735074507550785079507A507C507D5081 +508250835084508650875089508A508B508C508E508F50905091509250935094 +50955096509750985099509A509B509C509D509E509F50A050A150A250A450A6 +50AA50AB50AD50AE50AF50B050B150B350B450B550B650B750B850B950BC0000 +83 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +50BD50BE50BF50C050C150C250C350C450C550C650C750C850C950CA50CB50CC +50CD50CE50D050D150D250D350D450D550D750D850D950DB50DC50DD50DE50DF +50E050E150E250E350E450E550E850E950EA50EB50EF50F050F150F250F450F6 +50F750F850F950FA50FC50FD50FE50FF51005101510251035104510551080000 +5109510A510C510D510E510F511051115113511451155116511751185119511A +511B511C511D511E511F512051225123512451255126512751285129512A512B +512C512D512E512F5130513151325133513451355136513751385139513A513B +513C513D513E51425147514A514C514E514F515051525153515751585159515B +515D515E515F5160516151635164516651675169516A516F5172517A517E517F +5183518451865187518A518B518E518F51905191519351945198519A519D519E +519F51A151A351A651A751A851A951AA51AD51AE51B451B851B951BA51BE51BF +51C151C251C351C551C851CA51CD51CE51D051D251D351D451D551D651D70000 +84 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +51D851D951DA51DC51DE51DF51E251E351E551E651E751E851E951EA51EC51EE +51F151F251F451F751FE520452055209520B520C520F5210521352145215521C +521E521F522152225223522552265227522A522C522F5231523252345235523C +523E524452455246524752485249524B524E524F525252535255525752580000 +5259525A525B525D525F526052625263526452665268526B526C526D526E5270 +52715273527452755276527752785279527A527B527C527E5280528352845285 +528652875289528A528B528C528D528E528F5291529252945295529652975298 +5299529A529C52A452A552A652A752AE52AF52B052B452B552B652B752B852B9 +52BA52BB52BC52BD52C052C152C252C452C552C652C852CA52CC52CD52CE52CF +52D152D352D452D552D752D952DA52DB52DC52DD52DE52E052E152E252E352E5 +52E652E752E852E952EA52EB52EC52ED52EE52EF52F152F252F352F452F552F6 +52F752F852FB52FC52FD530153025303530453075309530A530B530C530E0000 +85 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +53115312531353145318531B531C531E531F532253245325532753285329532B +532C532D532F533053315332533353345335533653375338533C533D53405342 +53445346534B534C534D5350535453585359535B535D53655368536A536C536D +537253765379537B537C537D537E53805381538353875388538A538E538F0000 +53905391539253935394539653975399539B539C539E53A053A153A453A753AA +53AB53AC53AD53AF53B053B153B253B353B453B553B753B853B953BA53BC53BD +53BE53C053C353C453C553C653C753CE53CF53D053D253D353D553DA53DC53DD +53DE53E153E253E753F453FA53FE53FF5400540254055407540B541454185419 +541A541C542254245425542A5430543354365437543A543D543F544154425444 +544554475449544C544D544E544F5451545A545D545E545F5460546154635465 +54675469546A546B546C546D546E546F547054745479547A547E547F54815483 +5485548754885489548A548D5491549354975498549C549E549F54A054A10000 +86 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +54A254A554AE54B054B254B554B654B754B954BA54BC54BE54C354C554CA54CB +54D654D854DB54E054E154E254E354E454EB54EC54EF54F054F154F454F554F6 +54F754F854F954FB54FE550055025503550455055508550A550B550C550D550E +5512551355155516551755185519551A551C551D551E551F5521552555260000 +55285529552B552D553255345535553655385539553A553B553D554055425545 +55475548554B554C554D554E554F5551555255535554555755585559555A555B +555D555E555F55605562556355685569556B556F557055715572557355745579 +557A557D557F55855586558C558D558E559055925593559555965597559A559B +559E55A055A155A255A355A455A555A655A855A955AA55AB55AC55AD55AE55AF +55B055B255B455B655B855BA55BC55BF55C055C155C255C355C655C755C855CA +55CB55CE55CF55D055D555D755D855D955DA55DB55DE55E055E255E755E955ED +55EE55F055F155F455F655F855F955FA55FB55FC55FF56025603560456050000 +87 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +56065607560A560B560D561056115612561356145615561656175619561A561C +561D5620562156225625562656285629562A562B562E562F5630563356355637 +5638563A563C563D563E5640564156425643564456455646564756485649564A +564B564F565056515652565356555656565A565B565D565E565F566056610000 +5663566556665667566D566E566F56705672567356745675567756785679567A +567D567E567F56805681568256835684568756885689568A568B568C568D5690 +56915692569456955696569756985699569A569B569C569D569E569F56A056A1 +56A256A456A556A656A756A856A956AA56AB56AC56AD56AE56B056B156B256B3 +56B456B556B656B856B956BA56BB56BD56BE56BF56C056C156C256C356C456C5 +56C656C756C856C956CB56CC56CD56CE56CF56D056D156D256D356D556D656D8 +56D956DC56E356E556E656E756E856E956EA56EC56EE56EF56F256F356F656F7 +56F856FB56FC57005701570257055707570B570C570D570E570F571057110000 +88 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +57125713571457155716571757185719571A571B571D571E5720572157225724 +572557265727572B5731573257345735573657375738573C573D573F57415743 +57445745574657485749574B5752575357545755575657585759576257635765 +5767576C576E5770577157725774577557785779577A577D577E577F57800000 +5781578757885789578A578D578E578F57905791579457955796579757985799 +579A579C579D579E579F57A557A857AA57AC57AF57B057B157B357B557B657B7 +57B957BA57BB57BC57BD57BE57BF57C057C157C457C557C657C757C857C957CA +57CC57CD57D057D157D357D657D757DB57DC57DE57E157E257E357E557E657E7 +57E857E957EA57EB57EC57EE57F057F157F257F357F557F657F757FB57FC57FE +57FF580158035804580558085809580A580C580E580F58105812581358145816 +58175818581A581B581C581D581F5822582358255826582758285829582B582C +582D582E582F58315832583358345836583758385839583A583B583C583D0000 +89 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +583E583F584058415842584358455846584758485849584A584B584E584F5850 +585258535855585658575859585A585B585C585D585F58605861586258635864 +5866586758685869586A586D586E586F58705871587258735874587558765877 +58785879587A587B587C587D587F58825884588658875888588A588B588C0000 +588D588E588F5890589158945895589658975898589B589C589D58A058A158A2 +58A358A458A558A658A758AA58AB58AC58AD58AE58AF58B058B158B258B358B4 +58B558B658B758B858B958BA58BB58BD58BE58BF58C058C258C358C458C658C7 +58C858C958CA58CB58CC58CD58CE58CF58D058D258D358D458D658D758D858D9 +58DA58DB58DC58DD58DE58DF58E058E158E258E358E558E658E758E858E958EA +58ED58EF58F158F258F458F558F758F858FA58FB58FC58FD58FE58FF59005901 +59035905590659085909590A590B590C590E591059115912591359175918591B +591D591E592059215922592359265928592C59305932593359355936593B0000 +8A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +593D593E593F5940594359455946594A594C594D5950595259535959595B595C +595D595E595F5961596359645966596759685969596A596B596C596D596E596F +59705971597259755977597A597B597C597E597F598059855989598B598C598E +598F59905991599459955998599A599B599C599D599F59A059A159A259A60000 +59A759AC59AD59B059B159B359B459B559B659B759B859BA59BC59BD59BF59C0 +59C159C259C359C459C559C759C859C959CC59CD59CE59CF59D559D659D959DB +59DE59DF59E059E159E259E459E659E759E959EA59EB59ED59EE59EF59F059F1 +59F259F359F459F559F659F759F859FA59FC59FD59FE5A005A025A0A5A0B5A0D +5A0E5A0F5A105A125A145A155A165A175A195A1A5A1B5A1D5A1E5A215A225A24 +5A265A275A285A2A5A2B5A2C5A2D5A2E5A2F5A305A335A355A375A385A395A3A +5A3B5A3D5A3E5A3F5A415A425A435A445A455A475A485A4B5A4C5A4D5A4E5A4F +5A505A515A525A535A545A565A575A585A595A5B5A5C5A5D5A5E5A5F5A600000 +8B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5A615A635A645A655A665A685A695A6B5A6C5A6D5A6E5A6F5A705A715A725A73 +5A785A795A7B5A7C5A7D5A7E5A805A815A825A835A845A855A865A875A885A89 +5A8A5A8B5A8C5A8D5A8E5A8F5A905A915A935A945A955A965A975A985A995A9C +5A9D5A9E5A9F5AA05AA15AA25AA35AA45AA55AA65AA75AA85AA95AAB5AAC0000 +5AAD5AAE5AAF5AB05AB15AB45AB65AB75AB95ABA5ABB5ABC5ABD5ABF5AC05AC3 +5AC45AC55AC65AC75AC85ACA5ACB5ACD5ACE5ACF5AD05AD15AD35AD55AD75AD9 +5ADA5ADB5ADD5ADE5ADF5AE25AE45AE55AE75AE85AEA5AEC5AED5AEE5AEF5AF0 +5AF25AF35AF45AF55AF65AF75AF85AF95AFA5AFB5AFC5AFD5AFE5AFF5B005B01 +5B025B035B045B055B065B075B085B0A5B0B5B0C5B0D5B0E5B0F5B105B115B12 +5B135B145B155B185B195B1A5B1B5B1C5B1D5B1E5B1F5B205B215B225B235B24 +5B255B265B275B285B295B2A5B2B5B2C5B2D5B2E5B2F5B305B315B335B355B36 +5B385B395B3A5B3B5B3C5B3D5B3E5B3F5B415B425B435B445B455B465B470000 +8C +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5B485B495B4A5B4B5B4C5B4D5B4E5B4F5B525B565B5E5B605B615B675B685B6B +5B6D5B6E5B6F5B725B745B765B775B785B795B7B5B7C5B7E5B7F5B825B865B8A +5B8D5B8E5B905B915B925B945B965B9F5BA75BA85BA95BAC5BAD5BAE5BAF5BB1 +5BB25BB75BBA5BBB5BBC5BC05BC15BC35BC85BC95BCA5BCB5BCD5BCE5BCF0000 +5BD15BD45BD55BD65BD75BD85BD95BDA5BDB5BDC5BE05BE25BE35BE65BE75BE9 +5BEA5BEB5BEC5BED5BEF5BF15BF25BF35BF45BF55BF65BF75BFD5BFE5C005C02 +5C035C055C075C085C0B5C0C5C0D5C0E5C105C125C135C175C195C1B5C1E5C1F +5C205C215C235C265C285C295C2A5C2B5C2D5C2E5C2F5C305C325C335C355C36 +5C375C435C445C465C475C4C5C4D5C525C535C545C565C575C585C5A5C5B5C5C +5C5D5C5F5C625C645C675C685C695C6A5C6B5C6C5C6D5C705C725C735C745C75 +5C765C775C785C7B5C7C5C7D5C7E5C805C835C845C855C865C875C895C8A5C8B +5C8E5C8F5C925C935C955C9D5C9E5C9F5CA05CA15CA45CA55CA65CA75CA80000 +8D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5CAA5CAE5CAF5CB05CB25CB45CB65CB95CBA5CBB5CBC5CBE5CC05CC25CC35CC5 +5CC65CC75CC85CC95CCA5CCC5CCD5CCE5CCF5CD05CD15CD35CD45CD55CD65CD7 +5CD85CDA5CDB5CDC5CDD5CDE5CDF5CE05CE25CE35CE75CE95CEB5CEC5CEE5CEF +5CF15CF25CF35CF45CF55CF65CF75CF85CF95CFA5CFC5CFD5CFE5CFF5D000000 +5D015D045D055D085D095D0A5D0B5D0C5D0D5D0F5D105D115D125D135D155D17 +5D185D195D1A5D1C5D1D5D1F5D205D215D225D235D255D285D2A5D2B5D2C5D2F +5D305D315D325D335D355D365D375D385D395D3A5D3B5D3C5D3F5D405D415D42 +5D435D445D455D465D485D495D4D5D4E5D4F5D505D515D525D535D545D555D56 +5D575D595D5A5D5C5D5E5D5F5D605D615D625D635D645D655D665D675D685D6A +5D6D5D6E5D705D715D725D735D755D765D775D785D795D7A5D7B5D7C5D7D5D7E +5D7F5D805D815D835D845D855D865D875D885D895D8A5D8B5D8C5D8D5D8E5D8F +5D905D915D925D935D945D955D965D975D985D9A5D9B5D9C5D9E5D9F5DA00000 +8E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5DA15DA25DA35DA45DA55DA65DA75DA85DA95DAA5DAB5DAC5DAD5DAE5DAF5DB0 +5DB15DB25DB35DB45DB55DB65DB85DB95DBA5DBB5DBC5DBD5DBE5DBF5DC05DC1 +5DC25DC35DC45DC65DC75DC85DC95DCA5DCB5DCC5DCE5DCF5DD05DD15DD25DD3 +5DD45DD55DD65DD75DD85DD95DDA5DDC5DDF5DE05DE35DE45DEA5DEC5DED0000 +5DF05DF55DF65DF85DF95DFA5DFB5DFC5DFF5E005E045E075E095E0A5E0B5E0D +5E0E5E125E135E175E1E5E1F5E205E215E225E235E245E255E285E295E2A5E2B +5E2C5E2F5E305E325E335E345E355E365E395E3A5E3E5E3F5E405E415E435E46 +5E475E485E495E4A5E4B5E4D5E4E5E4F5E505E515E525E535E565E575E585E59 +5E5A5E5C5E5D5E5F5E605E635E645E655E665E675E685E695E6A5E6B5E6C5E6D +5E6E5E6F5E705E715E755E775E795E7E5E815E825E835E855E885E895E8C5E8D +5E8E5E925E985E9B5E9D5EA15EA25EA35EA45EA85EA95EAA5EAB5EAC5EAE5EAF +5EB05EB15EB25EB45EBA5EBB5EBC5EBD5EBF5EC05EC15EC25EC35EC45EC50000 +8F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5EC65EC75EC85ECB5ECC5ECD5ECE5ECF5ED05ED45ED55ED75ED85ED95EDA5EDC +5EDD5EDE5EDF5EE05EE15EE25EE35EE45EE55EE65EE75EE95EEB5EEC5EED5EEE +5EEF5EF05EF15EF25EF35EF55EF85EF95EFB5EFC5EFD5F055F065F075F095F0C +5F0D5F0E5F105F125F145F165F195F1A5F1C5F1D5F1E5F215F225F235F240000 +5F285F2B5F2C5F2E5F305F325F335F345F355F365F375F385F3B5F3D5F3E5F3F +5F415F425F435F445F455F465F475F485F495F4A5F4B5F4C5F4D5F4E5F4F5F51 +5F545F595F5A5F5B5F5C5F5E5F5F5F605F635F655F675F685F6B5F6E5F6F5F72 +5F745F755F765F785F7A5F7D5F7E5F7F5F835F865F8D5F8E5F8F5F915F935F94 +5F965F9A5F9B5F9D5F9E5F9F5FA05FA25FA35FA45FA55FA65FA75FA95FAB5FAC +5FAF5FB05FB15FB25FB35FB45FB65FB85FB95FBA5FBB5FBE5FBF5FC05FC15FC2 +5FC75FC85FCA5FCB5FCE5FD35FD45FD55FDA5FDB5FDC5FDE5FDF5FE25FE35FE5 +5FE65FE85FE95FEC5FEF5FF05FF25FF35FF45FF65FF75FF95FFA5FFC60070000 +90 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +60086009600B600C60106011601360176018601A601E601F602260236024602C +602D602E603060316032603360346036603760386039603A603D603E60406044 +60456046604760486049604A604C604E604F605160536054605660576058605B +605C605E605F6060606160656066606E60716072607460756077607E60800000 +608160826085608660876088608A608B608E608F609060916093609560976098 +6099609C609E60A160A260A460A560A760A960AA60AE60B060B360B560B660B7 +60B960BA60BD60BE60BF60C060C160C260C360C460C760C860C960CC60CD60CE +60CF60D060D260D360D460D660D760D960DB60DE60E160E260E360E460E560EA +60F160F260F560F760F860FB60FC60FD60FE60FF61026103610461056107610A +610B610C611061116112611361146116611761186119611B611C611D611E6121 +6122612561286129612A612C612D612E612F6130613161326133613461356136 +613761386139613A613B613C613D613E61406141614261436144614561460000 +91 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +61476149614B614D614F61506152615361546156615761586159615A615B615C +615E615F6160616161636164616561666169616A616B616C616D616E616F6171 +617261736174617661786179617A617B617C617D617E617F6180618161826183 +618461856186618761886189618A618C618D618F619061916192619361950000 +6196619761986199619A619B619C619E619F61A061A161A261A361A461A561A6 +61AA61AB61AD61AE61AF61B061B161B261B361B461B561B661B861B961BA61BB +61BC61BD61BF61C061C161C361C461C561C661C761C961CC61CD61CE61CF61D0 +61D361D561D661D761D861D961DA61DB61DC61DD61DE61DF61E061E161E261E3 +61E461E561E761E861E961EA61EB61EC61ED61EE61EF61F061F161F261F361F4 +61F661F761F861F961FA61FB61FC61FD61FE6200620162026203620462056207 +6209621362146219621C621D621E622062236226622762286229622B622D622F +6230623162326235623662386239623A623B623C6242624462456246624A0000 +92 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +624F62506255625662576259625A625C625D625E625F62606261626262646265 +6268627162726274627562776278627A627B627D628162826283628562866287 +6288628B628C628D628E628F629062946299629C629D629E62A362A662A762A9 +62AA62AD62AE62AF62B062B262B362B462B662B762B862BA62BE62C062C10000 +62C362CB62CF62D162D562DD62DE62E062E162E462EA62EB62F062F262F562F8 +62F962FA62FB63006303630463056306630A630B630C630D630F631063126313 +63146315631763186319631C632663276329632C632D632E6330633163336334 +6335633663376338633B633C633E633F63406341634463476348634A63516352 +635363546356635763586359635A635B635C635D63606364636563666368636A +636B636C636F6370637263736374637563786379637C637D637E637F63816383 +638463856386638B638D639163936394639563976399639A639B639C639D639E +639F63A163A463A663AB63AF63B163B263B563B663B963BB63BD63BF63C00000 +93 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +63C163C263C363C563C763C863CA63CB63CC63D163D363D463D563D763D863D9 +63DA63DB63DC63DD63DF63E263E463E563E663E763E863EB63EC63EE63EF63F0 +63F163F363F563F763F963FA63FB63FC63FE640364046406640764086409640A +640D640E6411641264156416641764186419641A641D641F6422642364240000 +6425642764286429642B642E642F643064316432643364356436643764386439 +643B643C643E6440644264436449644B644C644D644E644F6450645164536455 +645664576459645A645B645C645D645F64606461646264636464646564666468 +646A646B646C646E646F64706471647264736474647564766477647B647C647D +647E647F648064816483648664886489648A648B648C648D648E648F64906493 +649464976498649A649B649C649D649F64A064A164A264A364A564A664A764A8 +64AA64AB64AF64B164B264B364B464B664B964BB64BD64BE64BF64C164C364C4 +64C664C764C864C964CA64CB64CC64CF64D164D364D464D564D664D964DA0000 +94 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +64DB64DC64DD64DF64E064E164E364E564E764E864E964EA64EB64EC64ED64EE +64EF64F064F164F264F364F464F564F664F764F864F964FA64FB64FC64FD64FE +64FF65016502650365046505650665076508650A650B650C650D650E650F6510 +6511651365146515651665176519651A651B651C651D651E651F652065210000 +6522652365246526652765286529652A652C652D65306531653265336537653A +653C653D6540654165426543654465466547654A654B654D654E655065526553 +655465576558655A655C655F6560656165646565656765686569656A656D656E +656F657165736575657665786579657A657B657C657D657E657F658065816582 +658365846585658665886589658A658D658E658F65926594659565966598659A +659D659E65A065A265A365A665A865AA65AC65AE65B165B265B365B465B565B6 +65B765B865BA65BB65BE65BF65C065C265C765C865C965CA65CD65D065D165D3 +65D465D565D865D965DA65DB65DC65DD65DE65DF65E165E365E465EA65EB0000 +95 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +65F265F365F465F565F865F965FB65FC65FD65FE65FF66016604660566076608 +6609660B660D661066116612661666176618661A661B661C661E662166226623 +662466266629662A662B662C662E663066326633663766386639663A663B663D +663F66406642664466456646664766486649664A664D664E6650665166580000 +6659665B665C665D665E666066626663666566676669666A666B666C666D6671 +66726673667566786679667B667C667D667F6680668166836685668666886689 +668A668B668D668E668F6690669266936694669566986699669A669B669C669E +669F66A066A166A266A366A466A566A666A966AA66AB66AC66AD66AF66B066B1 +66B266B366B566B666B766B866BA66BB66BC66BD66BF66C066C166C266C366C4 +66C566C666C766C866C966CA66CB66CC66CD66CE66CF66D066D166D266D366D4 +66D566D666D766D866DA66DE66DF66E066E166E266E366E466E566E766E866EA +66EB66EC66ED66EE66EF66F166F566F666F866FA66FB66FD6701670267030000 +96 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6704670567066707670C670E670F671167126713671667186719671A671C671E +67206721672267236724672567276729672E6730673267336736673767386739 +673B673C673E673F6741674467456747674A674B674D67526754675567576758 +6759675A675B675D67626763676467666767676B676C676E6771677467760000 +67786779677A677B677D678067826783678567866788678A678C678D678E678F +679167926793679467966799679B679F67A067A167A467A667A967AC67AE67B1 +67B267B467B967BA67BB67BC67BD67BE67BF67C067C267C567C667C767C867C9 +67CA67CB67CC67CD67CE67D567D667D767DB67DF67E167E367E467E667E767E8 +67EA67EB67ED67EE67F267F567F667F767F867F967FA67FB67FC67FE68016802 +680368046806680D681068126814681568186819681A681B681C681E681F6820 +6822682368246825682668276828682B682C682D682E682F6830683168346835 +6836683A683B683F6847684B684D684F68526856685768586859685A685B0000 +97 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +685C685D685E685F686A686C686D686E686F6870687168726873687568786879 +687A687B687C687D687E687F688068826884688768886889688A688B688C688D +688E68906891689268946895689668986899689A689B689C689D689E689F68A0 +68A168A368A468A568A968AA68AB68AC68AE68B168B268B468B668B768B80000 +68B968BA68BB68BC68BD68BE68BF68C168C368C468C568C668C768C868CA68CC +68CE68CF68D068D168D368D468D668D768D968DB68DC68DD68DE68DF68E168E2 +68E468E568E668E768E868E968EA68EB68EC68ED68EF68F268F368F468F668F7 +68F868FB68FD68FE68FF69006902690369046906690769086909690A690C690F +69116913691469156916691769186919691A691B691C691D691E692169226923 +69256926692769286929692A692B692C692E692F693169326933693569366937 +6938693A693B693C693E694069416943694469456946694769486949694A694B +694C694D694E694F69506951695269536955695669586959695B695C695F0000 +98 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6961696269646965696769686969696A696C696D696F69706972697369746975 +6976697A697B697D697E697F698169836985698A698B698C698E698F69906991 +69926993699669976999699A699D699E699F69A069A169A269A369A469A569A6 +69A969AA69AC69AE69AF69B069B269B369B569B669B869B969BA69BC69BD0000 +69BE69BF69C069C269C369C469C569C669C769C869C969CB69CD69CF69D169D2 +69D369D569D669D769D869D969DA69DC69DD69DE69E169E269E369E469E569E6 +69E769E869E969EA69EB69EC69EE69EF69F069F169F369F469F569F669F769F8 +69F969FA69FB69FC69FE6A006A016A026A036A046A056A066A076A086A096A0B +6A0C6A0D6A0E6A0F6A106A116A126A136A146A156A166A196A1A6A1B6A1C6A1D +6A1E6A206A226A236A246A256A266A276A296A2B6A2C6A2D6A2E6A306A326A33 +6A346A366A376A386A396A3A6A3B6A3C6A3F6A406A416A426A436A456A466A48 +6A496A4A6A4B6A4C6A4D6A4E6A4F6A516A526A536A546A556A566A576A5A0000 +99 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6A5C6A5D6A5E6A5F6A606A626A636A646A666A676A686A696A6A6A6B6A6C6A6D +6A6E6A6F6A706A726A736A746A756A766A776A786A7A6A7B6A7D6A7E6A7F6A81 +6A826A836A856A866A876A886A896A8A6A8B6A8C6A8D6A8F6A926A936A946A95 +6A966A986A996A9A6A9B6A9C6A9D6A9E6A9F6AA16AA26AA36AA46AA56AA60000 +6AA76AA86AAA6AAD6AAE6AAF6AB06AB16AB26AB36AB46AB56AB66AB76AB86AB9 +6ABA6ABB6ABC6ABD6ABE6ABF6AC06AC16AC26AC36AC46AC56AC66AC76AC86AC9 +6ACA6ACB6ACC6ACD6ACE6ACF6AD06AD16AD26AD36AD46AD56AD66AD76AD86AD9 +6ADA6ADB6ADC6ADD6ADE6ADF6AE06AE16AE26AE36AE46AE56AE66AE76AE86AE9 +6AEA6AEB6AEC6AED6AEE6AEF6AF06AF16AF26AF36AF46AF56AF66AF76AF86AF9 +6AFA6AFB6AFC6AFD6AFE6AFF6B006B016B026B036B046B056B066B076B086B09 +6B0A6B0B6B0C6B0D6B0E6B0F6B106B116B126B136B146B156B166B176B186B19 +6B1A6B1B6B1C6B1D6B1E6B1F6B256B266B286B296B2A6B2B6B2C6B2D6B2E0000 +9A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6B2F6B306B316B336B346B356B366B386B3B6B3C6B3D6B3F6B406B416B426B44 +6B456B486B4A6B4B6B4D6B4E6B4F6B506B516B526B536B546B556B566B576B58 +6B5A6B5B6B5C6B5D6B5E6B5F6B606B616B686B696B6B6B6C6B6D6B6E6B6F6B70 +6B716B726B736B746B756B766B776B786B7A6B7D6B7E6B7F6B806B856B880000 +6B8C6B8E6B8F6B906B916B946B956B976B986B996B9C6B9D6B9E6B9F6BA06BA2 +6BA36BA46BA56BA66BA76BA86BA96BAB6BAC6BAD6BAE6BAF6BB06BB16BB26BB6 +6BB86BB96BBA6BBB6BBC6BBD6BBE6BC06BC36BC46BC66BC76BC86BC96BCA6BCC +6BCE6BD06BD16BD86BDA6BDC6BDD6BDE6BDF6BE06BE26BE36BE46BE56BE66BE7 +6BE86BE96BEC6BED6BEE6BF06BF16BF26BF46BF66BF76BF86BFA6BFB6BFC6BFE +6BFF6C006C016C026C036C046C086C096C0A6C0B6C0C6C0E6C126C176C1C6C1D +6C1E6C206C236C256C2B6C2C6C2D6C316C336C366C376C396C3A6C3B6C3C6C3E +6C3F6C436C446C456C486C4B6C4C6C4D6C4E6C4F6C516C526C536C566C580000 +9B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6C596C5A6C626C636C656C666C676C6B6C6C6C6D6C6E6C6F6C716C736C756C77 +6C786C7A6C7B6C7C6C7F6C806C846C876C8A6C8B6C8D6C8E6C916C926C956C96 +6C976C986C9A6C9C6C9D6C9E6CA06CA26CA86CAC6CAF6CB06CB46CB56CB66CB7 +6CBA6CC06CC16CC26CC36CC66CC76CC86CCB6CCD6CCE6CCF6CD16CD26CD80000 +6CD96CDA6CDC6CDD6CDF6CE46CE66CE76CE96CEC6CED6CF26CF46CF96CFF6D00 +6D026D036D056D066D086D096D0A6D0D6D0F6D106D116D136D146D156D166D18 +6D1C6D1D6D1F6D206D216D226D236D246D266D286D296D2C6D2D6D2F6D306D34 +6D366D376D386D3A6D3F6D406D426D446D496D4C6D506D556D566D576D586D5B +6D5D6D5F6D616D626D646D656D676D686D6B6D6C6D6D6D706D716D726D736D75 +6D766D796D7A6D7B6D7D6D7E6D7F6D806D816D836D846D866D876D8A6D8B6D8D +6D8F6D906D926D966D976D986D996D9A6D9C6DA26DA56DAC6DAD6DB06DB16DB3 +6DB46DB66DB76DB96DBA6DBB6DBC6DBD6DBE6DC16DC26DC36DC86DC96DCA0000 +9C +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6DCD6DCE6DCF6DD06DD26DD36DD46DD56DD76DDA6DDB6DDC6DDF6DE26DE36DE5 +6DE76DE86DE96DEA6DED6DEF6DF06DF26DF46DF56DF66DF86DFA6DFD6DFE6DFF +6E006E016E026E036E046E066E076E086E096E0B6E0F6E126E136E156E186E19 +6E1B6E1C6E1E6E1F6E226E266E276E286E2A6E2C6E2E6E306E316E336E350000 +6E366E376E396E3B6E3C6E3D6E3E6E3F6E406E416E426E456E466E476E486E49 +6E4A6E4B6E4C6E4F6E506E516E526E556E576E596E5A6E5C6E5D6E5E6E606E61 +6E626E636E646E656E666E676E686E696E6A6E6C6E6D6E6F6E706E716E726E73 +6E746E756E766E776E786E796E7A6E7B6E7C6E7D6E806E816E826E846E876E88 +6E8A6E8B6E8C6E8D6E8E6E916E926E936E946E956E966E976E996E9A6E9B6E9D +6E9E6EA06EA16EA36EA46EA66EA86EA96EAB6EAC6EAD6EAE6EB06EB36EB56EB8 +6EB96EBC6EBE6EBF6EC06EC36EC46EC56EC66EC86EC96ECA6ECC6ECD6ECE6ED0 +6ED26ED66ED86ED96EDB6EDC6EDD6EE36EE76EEA6EEB6EEC6EED6EEE6EEF0000 +9D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6EF06EF16EF26EF36EF56EF66EF76EF86EFA6EFB6EFC6EFD6EFE6EFF6F006F01 +6F036F046F056F076F086F0A6F0B6F0C6F0D6F0E6F106F116F126F166F176F18 +6F196F1A6F1B6F1C6F1D6F1E6F1F6F216F226F236F256F266F276F286F2C6F2E +6F306F326F346F356F376F386F396F3A6F3B6F3C6F3D6F3F6F406F416F420000 +6F436F446F456F486F496F4A6F4C6F4E6F4F6F506F516F526F536F546F556F56 +6F576F596F5A6F5B6F5D6F5F6F606F616F636F646F656F676F686F696F6A6F6B +6F6C6F6F6F706F716F736F756F766F776F796F7B6F7D6F7E6F7F6F806F816F82 +6F836F856F866F876F8A6F8B6F8F6F906F916F926F936F946F956F966F976F98 +6F996F9A6F9B6F9D6F9E6F9F6FA06FA26FA36FA46FA56FA66FA86FA96FAA6FAB +6FAC6FAD6FAE6FAF6FB06FB16FB26FB46FB56FB76FB86FBA6FBB6FBC6FBD6FBE +6FBF6FC16FC36FC46FC56FC66FC76FC86FCA6FCB6FCC6FCD6FCE6FCF6FD06FD3 +6FD46FD56FD66FD76FD86FD96FDA6FDB6FDC6FDD6FDF6FE26FE36FE46FE50000 +9E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6FE66FE76FE86FE96FEA6FEB6FEC6FED6FF06FF16FF26FF36FF46FF56FF66FF7 +6FF86FF96FFA6FFB6FFC6FFD6FFE6FFF70007001700270037004700570067007 +70087009700A700B700C700D700E700F70107012701370147015701670177018 +7019701C701D701E701F702070217022702470257026702770287029702A0000 +702B702C702D702E702F70307031703270337034703670377038703A703B703C +703D703E703F7040704170427043704470457046704770487049704A704B704D +704E7050705170527053705470557056705770587059705A705B705C705D705F +7060706170627063706470657066706770687069706A706E7071707270737074 +70777079707A707B707D7081708270837084708670877088708B708C708D708F +70907091709370977098709A709B709E709F70A070A170A270A370A470A570A6 +70A770A870A970AA70B070B270B470B570B670BA70BE70BF70C470C570C670C7 +70C970CB70CC70CD70CE70CF70D070D170D270D370D470D570D670D770DA0000 +9F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +70DC70DD70DE70E070E170E270E370E570EA70EE70F070F170F270F370F470F5 +70F670F870FA70FB70FC70FE70FF710071017102710371047105710671077108 +710B710C710D710E710F7111711271147117711B711C711D711E711F71207121 +7122712371247125712771287129712A712B712C712D712E7132713371340000 +7135713771387139713A713B713C713D713E713F714071417142714371447146 +714771487149714B714D714F7150715171527153715471557156715771587159 +715A715B715D715F716071617162716371657169716A716B716C716D716F7170 +717171747175717671777179717B717C717E717F718071817182718371857186 +718771887189718B718C718D718E7190719171927193719571967197719A719B +719C719D719E71A171A271A371A471A571A671A771A971AA71AB71AD71AE71AF +71B071B171B271B471B671B771B871BA71BB71BC71BD71BE71BF71C071C171C2 +71C471C571C671C771C871C971CA71CB71CC71CD71CF71D071D171D271D30000 +A0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +71D671D771D871D971DA71DB71DC71DD71DE71DF71E171E271E371E471E671E8 +71E971EA71EB71EC71ED71EF71F071F171F271F371F471F571F671F771F871FA +71FB71FC71FD71FE71FF720072017202720372047205720772087209720A720B +720C720D720E720F7210721172127213721472157216721772187219721A0000 +721B721C721E721F722072217222722372247225722672277229722B722D722E +722F723272337234723A723C723E72407241724272437244724572467249724A +724B724E724F7250725172537254725572577258725A725C725E726072637264 +72657268726A726B726C726D7270727172737274727672777278727B727C727D +7282728372857286728772887289728C728E7290729172937294729572967297 +72987299729A729B729C729D729E72A072A172A272A372A472A572A672A772A8 +72A972AA72AB72AE72B172B272B372B572BA72BB72BC72BD72BE72BF72C072C5 +72C672C772C972CA72CB72CC72CF72D172D372D472D572D672D872DA72DB0000 +A1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000030003001300200B702C902C700A8300330052014FF5E2016202620182019 +201C201D3014301530083009300A300B300C300D300E300F3016301730103011 +00B100D700F72236222722282211220F222A222922082237221A22A522252220 +23122299222B222E2261224C2248223D221D2260226E226F22642265221E2235 +22342642264000B0203220332103FF0400A4FFE0FFE1203000A7211626062605 +25CB25CF25CE25C725C625A125A025B325B2203B219221902191219330130000 +A2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000217021712172217321742175217621772178217900000000000000000000 +000024882489248A248B248C248D248E248F2490249124922493249424952496 +249724982499249A249B247424752476247724782479247A247B247C247D247E +247F248024812482248324842485248624872460246124622463246424652466 +2467246824690000000032203221322232233224322532263227322832290000 +00002160216121622163216421652166216721682169216A216B000000000000 +A3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000FF01FF02FF03FFE5FF05FF06FF07FF08FF09FF0AFF0BFF0CFF0DFF0EFF0F +FF10FF11FF12FF13FF14FF15FF16FF17FF18FF19FF1AFF1BFF1CFF1DFF1EFF1F +FF20FF21FF22FF23FF24FF25FF26FF27FF28FF29FF2AFF2BFF2CFF2DFF2EFF2F +FF30FF31FF32FF33FF34FF35FF36FF37FF38FF39FF3AFF3BFF3CFF3DFF3EFF3F +FF40FF41FF42FF43FF44FF45FF46FF47FF48FF49FF4AFF4BFF4CFF4DFF4EFF4F +FF50FF51FF52FF53FF54FF55FF56FF57FF58FF59FF5AFF5BFF5CFF5DFFE30000 +A4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000304130423043304430453046304730483049304A304B304C304D304E304F +3050305130523053305430553056305730583059305A305B305C305D305E305F +3060306130623063306430653066306730683069306A306B306C306D306E306F +3070307130723073307430753076307730783079307A307B307C307D307E307F +3080308130823083308430853086308730883089308A308B308C308D308E308F +3090309130923093000000000000000000000000000000000000000000000000 +A5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000030A130A230A330A430A530A630A730A830A930AA30AB30AC30AD30AE30AF +30B030B130B230B330B430B530B630B730B830B930BA30BB30BC30BD30BE30BF +30C030C130C230C330C430C530C630C730C830C930CA30CB30CC30CD30CE30CF +30D030D130D230D330D430D530D630D730D830D930DA30DB30DC30DD30DE30DF +30E030E130E230E330E430E530E630E730E830E930EA30EB30EC30ED30EE30EF +30F030F130F230F330F430F530F6000000000000000000000000000000000000 +A6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000039103920393039403950396039703980399039A039B039C039D039E039F +03A003A103A303A403A503A603A703A803A90000000000000000000000000000 +000003B103B203B303B403B503B603B703B803B903BA03BB03BC03BD03BE03BF +03C003C103C303C403C503C603C703C803C90000000000000000000000000000 +FE35FE36FE39FE3AFE3FFE40FE3DFE3EFE41FE42FE43FE4400000000FE3BFE3C +FE37FE38FE310000FE33FE340000000000000000000000000000000000000000 +A7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000004100411041204130414041504010416041704180419041A041B041C041D +041E041F0420042104220423042404250426042704280429042A042B042C042D +042E042F00000000000000000000000000000000000000000000000000000000 +000004300431043204330434043504510436043704380439043A043B043C043D +043E043F0440044104420443044404450446044704480449044A044B044C044D +044E044F00000000000000000000000000000000000000000000000000000000 +A8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +02CA02CB02D920132015202520352105210921962197219821992215221F2223 +22522266226722BF2550255125522553255425552556255725582559255A255B +255C255D255E255F2560256125622563256425652566256725682569256A256B +256C256D256E256F257025712572257325812582258325842585258625870000 +25882589258A258B258C258D258E258F25932594259525BC25BD25E225E325E4 +25E5260922953012301D301E0000000000000000000000000000000000000000 +0000010100E101CE00E0011300E9011B00E8012B00ED01D000EC014D00F301D2 +00F2016B00FA01D400F901D601D801DA01DC00FC00EA02510000014401480000 +0261000000000000000031053106310731083109310A310B310C310D310E310F +3110311131123113311431153116311731183119311A311B311C311D311E311F +3120312131223123312431253126312731283129000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +A9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +30213022302330243025302630273028302932A3338E338F339C339D339E33A1 +33C433CE33D133D233D5FE30FFE2FFE400002121323100002010000000000000 +30FC309B309C30FD30FE3006309D309EFE49FE4AFE4BFE4CFE4DFE4EFE4FFE50 +FE51FE52FE54FE55FE56FE57FE59FE5AFE5BFE5CFE5DFE5EFE5FFE60FE610000 +FE62FE63FE64FE65FE66FE68FE69FE6AFE6B0000000000000000000000000000 +0000000000000000000000003007000000000000000000000000000000000000 +00000000000000002500250125022503250425052506250725082509250A250B +250C250D250E250F2510251125122513251425152516251725182519251A251B +251C251D251E251F2520252125222523252425252526252725282529252A252B +252C252D252E252F2530253125322533253425352536253725382539253A253B +253C253D253E253F2540254125422543254425452546254725482549254A254B +0000000000000000000000000000000000000000000000000000000000000000 +AA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +72DC72DD72DF72E272E372E472E572E672E772EA72EB72F572F672F972FD72FE +72FF73007302730473057306730773087309730B730C730D730F731073117312 +731473187319731A731F732073237324732673277328732D732F733073327333 +73357336733A733B733C733D7340734173427343734473457346734773480000 +7349734A734B734C734E734F7351735373547355735673587359735A735B735C +735D735E735F736173627363736473657366736773687369736A736B736E7370 +7371000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +AB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +73727373737473757376737773787379737A737B737C737D737F738073817382 +7383738573867388738A738C738D738F73907392739373947395739773987399 +739A739C739D739E73A073A173A373A473A573A673A773A873AA73AC73AD73B1 +73B473B573B673B873B973BC73BD73BE73BF73C173C373C473C573C673C70000 +73CB73CC73CE73D273D373D473D573D673D773D873DA73DB73DC73DD73DF73E1 +73E273E373E473E673E873EA73EB73EC73EE73EF73F073F173F373F473F573F6 +73F7000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +AC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +73F873F973FA73FB73FC73FD73FE73FF740074017402740474077408740B740C +740D740E741174127413741474157416741774187419741C741D741E741F7420 +74217423742474277429742B742D742F74317432743774387439743A743B743D +743E743F744074427443744474457446744774487449744A744B744C744D0000 +744E744F7450745174527453745474567458745D746074617462746374647465 +7466746774687469746A746B746C746E746F7471747274737474747574787479 +747A000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +AD +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +747B747C747D747F748274847485748674887489748A748C748D748F74917492 +7493749474957496749774987499749A749B749D749F74A074A174A274A374A4 +74A574A674AA74AB74AC74AD74AE74AF74B074B174B274B374B474B574B674B7 +74B874B974BB74BC74BD74BE74BF74C074C174C274C374C474C574C674C70000 +74C874C974CA74CB74CC74CD74CE74CF74D074D174D374D474D574D674D774D8 +74D974DA74DB74DD74DF74E174E574E774E874E974EA74EB74EC74ED74F074F1 +74F2000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +AE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +74F374F574F874F974FA74FB74FC74FD74FE7500750175027503750575067507 +75087509750A750B750C750E751075127514751575167517751B751D751E7520 +752175227523752475267527752A752E753475367539753C753D753F75417542 +75437544754675477549754A754D755075517552755375557556755775580000 +755D755E755F75607561756275637564756775687569756B756C756D756E756F +757075717573757575767577757A757B757C757D757E75807581758275847585 +7587000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +AF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +75887589758A758C758D758E7590759375957598759B759C759E75A275A675A7 +75A875A975AA75AD75B675B775BA75BB75BF75C075C175C675CB75CC75CE75CF +75D075D175D375D775D975DA75DC75DD75DF75E075E175E575E975EC75ED75EE +75EF75F275F375F575F675F775F875FA75FB75FD75FE76027604760676070000 +76087609760B760D760E760F76117612761376147616761A761C761D761E7621 +762376277628762C762E762F76317632763676377639763A763B763D76417642 +7644000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +B0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +76457646764776487649764A764B764E764F7650765176527653765576577658 +7659765A765B765D765F766076617662766476657666766776687669766A766C +766D766E767076717672767376747675767676777679767A767C767F76807681 +768376857689768A768C768D768F769076927694769576977698769A769B0000 +769C769D769E769F76A076A176A276A376A576A676A776A876A976AA76AB76AC +76AD76AF76B076B376B576B676B776B876B976BA76BB76BC76BD76BE76C076C1 +76C3554A963F57C3632854CE550954C07691764C853C77EE827E788D72319698 +978D6C285B894FFA630966975CB880FA684880AE660276CE51F9655671AC7FF1 +888450B2596561CA6FB382AD634C625253ED54277B06516B75A45DF462D48DCB +9776628A8019575D97387F627238767D67CF767E64464F708D2562DC7A176591 +73ED642C6273822C9881677F7248626E62CC4F3474E3534A529E7ECA90A65E2E +6886699C81807ED168D278C5868C9551508D8C2482DE80DE5305891252650000 +B1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +76C476C776C976CB76CC76D376D576D976DA76DC76DD76DE76E076E176E276E3 +76E476E676E776E876E976EA76EB76EC76ED76F076F376F576F676F776FA76FB +76FD76FF77007702770377057706770A770C770E770F77107711771277137714 +7715771677177718771B771C771D771E77217723772477257727772A772B0000 +772C772E773077317732773377347739773B773D773E773F7742774477457746 +77487749774A774B774C774D774E774F77527753775477557756775777587759 +775C858496F94FDD582199715B9D62B162A566B48C799C8D7206676F789160B2 +535153178F8880CC8D1D94A1500D72C8590760EB711988AB595482EF672C7B28 +5D297EF7752D6CF58E668FF8903C9F3B6BD491197B145F7C78A784D6853D6BD5 +6BD96BD65E015E8775F995ED655D5F0A5FC58F9F58C181C2907F965B97AD8FB9 +7F168D2C62414FBF53D8535E8FA88FA98FAB904D68075F6A819888689CD6618B +522B762A5F6C658C6FD26EE85BBE6448517551B067C44E1979C9997C70B30000 +B2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +775D775E775F7760776477677769776A776D776E776F77707771777277737774 +7775777677777778777A777B777C7781778277837786778777887789778A778B +778F77907793779477957796779777987799779A779B779C779D779E77A177A3 +77A477A677A877AB77AD77AE77AF77B177B277B477B677B777B877B977BA0000 +77BC77BE77C077C177C277C377C477C577C677C777C877C977CA77CB77CC77CE +77CF77D077D177D277D377D477D577D677D877D977DA77DD77DE77DF77E077E1 +77E475C55E7673BB83E064AD62E894B56CE2535A52C3640F94C27B944F2F5E1B +82368116818A6E246CCA9A736355535C54FA886557E04E0D5E036B657C3F90E8 +601664E6731C88C16750624D8D22776C8E2991C75F6983DC8521991053C28695 +6B8B60ED60E8707F82CD82314ED36CA785CF64CD7CD969FD66F9834953957B56 +4FA7518C6D4B5C428E6D63D253C9832C833667E578B4643D5BDF5C945DEE8BE7 +62C667F48C7A640063BA8749998B8C177F2094F24EA7961098A4660C73160000 +B3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +77E677E877EA77EF77F077F177F277F477F577F777F977FA77FB77FC78037804 +7805780678077808780A780B780E780F7810781378157819781B781E78207821 +782278247828782A782B782E782F78317832783378357836783D783F78417842 +78437844784678487849784A784B784D784F78517853785478587859785A0000 +785B785C785E785F7860786178627863786478657866786778687869786F7870 +78717872787378747875787678787879787A787B787D787E787F788078817882 +7883573A5C1D5E38957F507F80A05382655E7545553150218D856284949E671D +56326F6E5DE2543570928F66626F64A463A35F7B6F8890F481E38FB05C186668 +5FF16C8996488D81886C649179F057CE6A59621054484E587A0B60E96F848BDA +627F901E9A8B79E4540375F4630153196C608FDF5F1B9A70803B9F7F4F885C3A +8D647FC565A570BD514551B2866B5D075BA062BD916C75748E0C7A2061017B79 +4EC77EF877854E1181ED521D51FA6A7153A88E87950496CF6EC19664695A0000 +B4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7884788578867888788A788B788F789078927894789578967899789D789E78A0 +78A278A478A678A878A978AA78AB78AC78AD78AE78AF78B578B678B778B878BA +78BB78BC78BD78BF78C078C278C378C478C678C778C878CC78CD78CE78CF78D1 +78D278D378D678D778D878DA78DB78DC78DD78DE78DF78E078E178E278E30000 +78E478E578E678E778E978EA78EB78ED78EE78EF78F078F178F378F578F678F8 +78F978FB78FC78FD78FE78FF79007902790379047906790779087909790A790B +790C784050A877D7641089E6590463E35DDD7A7F693D4F20823955984E3275AE +7A975E625E8A95EF521B5439708A6376952457826625693F918755076DF37EAF +882262337EF075B5832878C196CC8F9E614874F78BCD6B64523A8D506B21806A +847156F153064ECE4E1B51D17C97918B7C074FC38E7F7BE17A9C64675D1450AC +810676017CB96DEC7FE067515B585BF878CB64AE641363AA632B9519642D8FBE +7B5476296253592754466B7950A362345E266B864EE38D37888B5F85902E0000 +B5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +790D790E790F791079117912791479157916791779187919791A791B791C791D +791F792079217922792379257926792779287929792A792B792C792D792E792F +793079317932793379357936793779387939793D793F79427943794479457947 +794A794B794C794D794E794F7950795179527954795579587959796179630000 +796479667969796A796B796C796E79707971797279737974797579767979797B +797C797D797E797F798279837986798779887989798B798C798D798E79907991 +79926020803D62C54E39535590F863B880C665E66C2E4F4660EE6DE18BDE5F39 +86CB5F536321515A83616863520063638E4850125C9B79775BFC52307A3B60BC +905376D75FB75F9776848E6C706F767B7B4977AA51F3909358244F4E6EF48FEA +654C7B1B72C46DA47FDF5AE162B55E95573084827B2C5E1D5F1F90127F1498A0 +63826EC7789870B95178975B57AB75354F4375385E9760E659606DC06BBF7889 +53FC96D551CB52016389540A94938C038DCC7239789F87768FED8C0D53E00000 +B6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7993799479957996799779987999799B799C799D799E799F79A079A179A279A3 +79A479A579A679A879A979AA79AB79AC79AD79AE79AF79B079B179B279B479B5 +79B679B779B879BC79BF79C279C479C579C779C879CA79CC79CE79CF79D079D3 +79D479D679D779D979DA79DB79DC79DD79DE79E079E179E279E579E879EA0000 +79EC79EE79F179F279F379F479F579F679F779F979FA79FC79FE79FF7A017A04 +7A057A077A087A097A0A7A0C7A0F7A107A117A127A137A157A167A187A197A1B +7A1C4E0176EF53EE948998769F0E952D5B9A8BA24E224E1C51AC846361C252A8 +680B4F97606B51BB6D1E515C6296659796618C46901775D890FD77636BD2728A +72EC8BFB583577798D4C675C9540809A5EA66E2159927AEF77ED953B6BB565AD +7F0E58065151961F5BF958A954288E726566987F56E4949D76FE9041638754C6 +591A593A579B8EB267358DFA8235524160F0581586FE5CE89E454FC4989D8BB9 +5A2560765384627C904F9102997F6069800C513F80335C1499756D314E8C0000 +B7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7A1D7A1F7A217A227A247A257A267A277A287A297A2A7A2B7A2C7A2D7A2E7A2F +7A307A317A327A347A357A367A387A3A7A3E7A407A417A427A437A447A457A47 +7A487A497A4A7A4B7A4C7A4D7A4E7A4F7A507A527A537A547A557A567A587A59 +7A5A7A5B7A5C7A5D7A5E7A5F7A607A617A627A637A647A657A667A677A680000 +7A697A6A7A6B7A6C7A6D7A6E7A6F7A717A727A737A757A7B7A7C7A7D7A7E7A82 +7A857A877A897A8A7A8B7A8C7A8E7A8F7A907A937A947A997A9A7A9B7A9E7AA1 +7AA28D3053D17F5A7B4F4F104E4F96006CD573D085E95E06756A7FFB6A0A77FE +94927E4151E170E653CD8FD483038D2972AF996D6CDB574A82B365B980AA623F +963259A84EFF8BBF7EBA653E83F2975E556198DE80A5532A8BFD542080BA5E9F +6CB88D3982AC915A54296C1B52067EB7575F711A6C7E7C89594B4EFD5FFF6124 +7CAA4E305C0167AB87025CF0950B98CE75AF70FD902251AF7F1D8BBD594951E4 +4F5B5426592B657780A45B75627662C28F905E456C1F7B264F0F4FD8670D0000 +B8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7AA37AA47AA77AA97AAA7AAB7AAE7AAF7AB07AB17AB27AB47AB57AB67AB77AB8 +7AB97ABA7ABB7ABC7ABD7ABE7AC07AC17AC27AC37AC47AC57AC67AC77AC87AC9 +7ACA7ACC7ACD7ACE7ACF7AD07AD17AD27AD37AD47AD57AD77AD87ADA7ADB7ADC +7ADD7AE17AE27AE47AE77AE87AE97AEA7AEB7AEC7AEE7AF07AF17AF27AF30000 +7AF47AF57AF67AF77AF87AFB7AFC7AFE7B007B017B027B057B077B097B0C7B0D +7B0E7B107B127B137B167B177B187B1A7B1C7B1D7B1F7B217B227B237B277B29 +7B2D6D6E6DAA798F88B15F17752B629A8F854FEF91DC65A7812F81515E9C8150 +8D74526F89868D4B590D50854ED8961C723681798D1F5BCC8BA3964459877F1A +54905676560E8BE565396982949976D66E895E727518674667D17AFF809D8D76 +611F79C665628D635188521A94A27F38809B7EB25C976E2F67607BD9768B9AD8 +818F7F947CD5641E95507A3F544A54E56B4C640162089E3D80F3759952729769 +845B683C86E49601969494EC4E2A54047ED968398DDF801566F45E9A7FB90000 +B9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7B2F7B307B327B347B357B367B377B397B3B7B3D7B3F7B407B417B427B437B44 +7B467B487B4A7B4D7B4E7B537B557B577B597B5C7B5E7B5F7B617B637B647B65 +7B667B677B687B697B6A7B6B7B6C7B6D7B6F7B707B737B747B767B787B7A7B7C +7B7D7B7F7B817B827B837B847B867B877B887B897B8A7B8B7B8C7B8E7B8F0000 +7B917B927B937B967B987B997B9A7B9B7B9E7B9F7BA07BA37BA47BA57BAE7BAF +7BB07BB27BB37BB57BB67BB77BB97BBA7BBB7BBC7BBD7BBE7BBF7BC07BC27BC3 +7BC457C2803F68975DE5653B529F606D9F9A4F9B8EAC516C5BAB5F135DE96C5E +62F18D21517194A952FE6C9F82DF72D757A267848D2D591F8F9C83C754957B8D +4F306CBD5B6459D19F1353E486CA9AA88C3780A16545987E56FA96C7522E74DC +52505BE1630289024E5662D0602A68FA51735B9851A089C27BA199867F5060EF +704C8D2F51495E7F901B747089C4572D78455F529F9F95FA8F689B3C8BE17678 +684267DC8DEA8D35523D8F8A6EDA68CD950590ED56FD679C88F98FC754C80000 +BA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7BC57BC87BC97BCA7BCB7BCD7BCE7BCF7BD07BD27BD47BD57BD67BD77BD87BDB +7BDC7BDE7BDF7BE07BE27BE37BE47BE77BE87BE97BEB7BEC7BED7BEF7BF07BF2 +7BF37BF47BF57BF67BF87BF97BFA7BFB7BFD7BFF7C007C017C027C037C047C05 +7C067C087C097C0A7C0D7C0E7C107C117C127C137C147C157C177C187C190000 +7C1A7C1B7C1C7C1D7C1E7C207C217C227C237C247C257C287C297C2B7C2C7C2D +7C2E7C2F7C307C317C327C337C347C357C367C377C397C3A7C3B7C3C7C3D7C3E +7C429AB85B696D776C264EA55BB39A87916361A890AF97E9542B6DB55BD251FD +558A7F557FF064BC634D65F161BE608D710A6C576C49592F676D822A58D5568E +8C6A6BEB90DD597D801753F76D695475559D837783CF683879BE548C4F555408 +76D28C8996026CB36DB88D6B89109E648D3A563F9ED175D55F8872E0606854FC +4EA86A2A886160528F7054C470D886799E3F6D2A5B8F5F187EA255894FAF7334 +543C539A5019540E547C4E4E5FFD745A58F6846B80E1877472D07CCA6E560000 +BB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7C437C447C457C467C477C487C497C4A7C4B7C4C7C4E7C4F7C507C517C527C53 +7C547C557C567C577C587C597C5A7C5B7C5C7C5D7C5E7C5F7C607C617C627C63 +7C647C657C667C677C687C697C6A7C6B7C6C7C6D7C6E7C6F7C707C717C727C75 +7C767C777C787C797C7A7C7E7C7F7C807C817C827C837C847C857C867C870000 +7C887C8A7C8B7C8C7C8D7C8E7C8F7C907C937C947C967C997C9A7C9B7CA07CA1 +7CA37CA67CA77CA87CA97CAB7CAC7CAD7CAF7CB07CB47CB57CB67CB77CB87CBA +7CBB5F27864E552C62A44E926CAA623782B154D7534E733E6ED1753B52125316 +8BDD69D05F8A60006DEE574F6B2273AF68538FD87F13636260A3552475EA8C62 +71156DA35BA65E7B8352614C9EC478FA87577C27768751F060F6714C66435E4C +604D8C0E707063258F895FBD606286D456DE6BC160946167534960E066668D3F +79FD4F1A70E96C478BB38BF27ED88364660F5A5A9B426D516DF78C416D3B4F19 +706B83B7621660D1970D8D27797851FB573E57FA673A75787A3D79EF7B950000 +BC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7CBF7CC07CC27CC37CC47CC67CC97CCB7CCE7CCF7CD07CD17CD27CD37CD47CD8 +7CDA7CDB7CDD7CDE7CE17CE27CE37CE47CE57CE67CE77CE97CEA7CEB7CEC7CED +7CEE7CF07CF17CF27CF37CF47CF57CF67CF77CF97CFA7CFC7CFD7CFE7CFF7D00 +7D017D027D037D047D057D067D077D087D097D0B7D0C7D0D7D0E7D0F7D100000 +7D117D127D137D147D157D167D177D187D197D1A7D1B7D1C7D1D7D1E7D1F7D21 +7D237D247D257D267D287D297D2A7D2C7D2D7D2E7D307D317D327D337D347D35 +7D36808C99658FF96FC08BA59E2159EC7EE97F095409678168D88F917C4D96C6 +53CA602575BE6C7253735AC97EA7632451E0810A5DF184DF628051805B634F0E +796D524260B86D4E5BC45BC28BA18BB065E25FCC964559937EE77EAA560967B7 +59394F735BB652A0835A988A8D3E753294BE50477A3C4EF767B69A7E5AC16B7C +76D1575A5C167B3A95F4714E517C80A9827059787F04832768C067EC78B17877 +62E363617B804FED526A51CF835069DB92748DF58D3189C1952E7BAD4EF60000 +BD +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7D377D387D397D3A7D3B7D3C7D3D7D3E7D3F7D407D417D427D437D447D457D46 +7D477D487D497D4A7D4B7D4C7D4D7D4E7D4F7D507D517D527D537D547D557D56 +7D577D587D597D5A7D5B7D5C7D5D7D5E7D5F7D607D617D627D637D647D657D66 +7D677D687D697D6A7D6B7D6C7D6D7D6F7D707D717D727D737D747D757D760000 +7D787D797D7A7D7B7D7C7D7D7D7E7D7F7D807D817D827D837D847D857D867D87 +7D887D897D8A7D8B7D8C7D8D7D8E7D8F7D907D917D927D937D947D957D967D97 +7D98506582305251996F6E106E856DA75EFA50F559DC5C066D466C5F7586848B +686859568BB253209171964D854969127901712680F64EA490CA6D479A845A07 +56BC640594F077EB4FA5811A72E189D2997A7F347EDE527F655991758F7F8F83 +53EB7A9663ED63A5768679F888579636622A52AB8282685467706377776B7AED +6D017ED389E359D0621285C982A5754C501F4ECB75A58BEB5C4A5DFE7B4B65A4 +91D14ECA6D25895F7D2795264EC58C288FDB9773664B79818FD170EC6D780000 +BE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7D997D9A7D9B7D9C7D9D7D9E7D9F7DA07DA17DA27DA37DA47DA57DA77DA87DA9 +7DAA7DAB7DAC7DAD7DAF7DB07DB17DB27DB37DB47DB57DB67DB77DB87DB97DBA +7DBB7DBC7DBD7DBE7DBF7DC07DC17DC27DC37DC47DC57DC67DC77DC87DC97DCA +7DCB7DCC7DCD7DCE7DCF7DD07DD17DD27DD37DD47DD57DD67DD77DD87DD90000 +7DDA7DDB7DDC7DDD7DDE7DDF7DE07DE17DE27DE37DE47DE57DE67DE77DE87DE9 +7DEA7DEB7DEC7DED7DEE7DEF7DF07DF17DF27DF37DF47DF57DF67DF77DF87DF9 +7DFA5C3D52B283465162830E775B66769CB84EAC60CA7CBE7CB37ECF4E958B66 +666F988897595883656C955C5F8475C997567ADF7ADE51C070AF7A9863EA7A76 +7EA0739697ED4E4570784E5D915253A9655165E781FC8205548E5C31759A97A0 +62D872D975BD5C459A7983CA5C40548077E94E3E6CAE805A62D2636E5DE85177 +8DDD8E1E952F4FF153E560E770AC526763509E435A1F5026773753777EE26485 +652B628963985014723589C951B38BC07EDD574783CC94A7519B541B5CFB0000 +BF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7DFB7DFC7DFD7DFE7DFF7E007E017E027E037E047E057E067E077E087E097E0A +7E0B7E0C7E0D7E0E7E0F7E107E117E127E137E147E157E167E177E187E197E1A +7E1B7E1C7E1D7E1E7E1F7E207E217E227E237E247E257E267E277E287E297E2A +7E2B7E2C7E2D7E2E7E2F7E307E317E327E337E347E357E367E377E387E390000 +7E3A7E3C7E3D7E3E7E3F7E407E427E437E447E457E467E487E497E4A7E4B7E4C +7E4D7E4E7E4F7E507E517E527E537E547E557E567E577E587E597E5A7E5B7E5C +7E5D4FCA7AE36D5A90E19A8F55805496536154AF5F0063E9697751EF6168520A +582A52D8574E780D770B5EB761777CE0625B62974EA27095800362F770E49760 +577782DB67EF68F578D5989779D158F354B353EF6E34514B523B5BA28BFE80AF +554357A660735751542D7A7A60505B5463A762A053E362635BC767AF54ED7A9F +82E691775E9388E4593857AE630E8DE880EF57577B774FA95FEB5BBD6B3E5321 +7B5072C2684677FF773665F751B54E8F76D45CBF7AA58475594E9B4150800000 +C0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7E5E7E5F7E607E617E627E637E647E657E667E677E687E697E6A7E6B7E6C7E6D +7E6E7E6F7E707E717E727E737E747E757E767E777E787E797E7A7E7B7E7C7E7D +7E7E7E7F7E807E817E837E847E857E867E877E887E897E8A7E8B7E8C7E8D7E8E +7E8F7E907E917E927E937E947E957E967E977E987E997E9A7E9C7E9D7E9E0000 +7EAE7EB47EBB7EBC7ED67EE47EEC7EF97F0A7F107F1E7F377F397F3B7F3C7F3D +7F3E7F3F7F407F417F437F467F477F487F497F4A7F4B7F4C7F4D7F4E7F4F7F52 +7F53998861276E8357646606634656F062EC62695ED39614578362C955878721 +814A8FA3556683B167658D5684DD5A6A680F62E67BEE961151706F9C8C3063FD +89C861D27F0670C26EE57405699472FC5ECA90CE67176D6A635E52B372628001 +4F6C59E5916A70D96D9D52D24E5096F7956D857E78CA7D2F5121579264C2808B +7C7B6CEA68F1695E51B7539868A872819ECE7BF172F879BB6F137406674E91CC +9CA4793C83898354540F68174E3D538952B1783E5386522950884F8B4FD00000 +C1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7F567F597F5B7F5C7F5D7F5E7F607F637F647F657F667F677F6B7F6C7F6D7F6F +7F707F737F757F767F777F787F7A7F7B7F7C7F7D7F7F7F807F827F837F847F85 +7F867F877F887F897F8B7F8D7F8F7F907F917F927F937F957F967F977F987F99 +7F9B7F9C7FA07FA27FA37FA57FA67FA87FA97FAA7FAB7FAC7FAD7FAE7FB10000 +7FB37FB47FB57FB67FB77FBA7FBB7FBE7FC07FC27FC37FC47FC67FC77FC87FC9 +7FCB7FCD7FCF7FD07FD17FD27FD37FD67FD77FD97FDA7FDB7FDC7FDD7FDE7FE2 +7FE375E27ACB7C926CA596B6529B748354E94FE9805483B28FDE95705EC9601C +6D9F5E18655B813894FE604B70BC7EC37CAE51C968817CB1826F4E248F8691CF +667E4EAE8C0564A9804A50DA759771CE5BE58FBD6F664E86648295635ED66599 +521788C270C852A3730E7433679778F797164E3490BB9CDE6DCB51DB8D41541D +62CE73B283F196F69F8494C34F367F9A51CC707596755CAD988653E64EE46E9C +740969B4786B998F7559521876246D4167F3516D9F99804B54997B3C7ABF0000 +C2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7FE47FE77FE87FEA7FEB7FEC7FED7FEF7FF27FF47FF57FF67FF77FF87FF97FFA +7FFD7FFE7FFF8002800780088009800A800E800F80118013801A801B801D801E +801F802180238024802B802C802D802E802F8030803280348039803A803C803E +8040804180448045804780488049804E804F8050805180538055805680570000 +8059805B805C805D805E805F806080618062806380648065806680678068806B +806C806D806E806F807080728073807480758076807780788079807A807B807C +807D9686578462E29647697C5A0464027BD36F0F964B82A6536298855E907089 +63B35364864F9C819E93788C97328DEF8D429E7F6F5E79845F559646622E9A74 +541594DD4FA365C55C655C617F1586516C2F5F8B73876EE47EFF5CE6631B5B6A +6EE653754E7163A0756562A18F6E4F264ED16CA67EB68BBA841D87BA7F57903B +95237BA99AA188F8843D6D1B9A867EDC59889EBB739B780186829A6C9A82561B +541757CB4E709EA653568FC881097792999286EE6EE1851366FC61626F2B0000 +C3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +807E8081808280858088808A808D808E808F8090809180928094809580978099 +809E80A380A680A780A880AC80B080B380B580B680B880B980BB80C580C780C8 +80C980CA80CB80CF80D080D180D280D380D480D580D880DF80E080E280E380E6 +80EE80F580F780F980FB80FE80FF8100810181038104810581078108810B0000 +810C811581178119811B811C811D811F81208121812281238124812581268127 +81288129812A812B812D812E813081338134813581378139813A813B813C813D +813F8C298292832B76F26C135FD983BD732B8305951A6BDB77DB94C6536F8302 +51925E3D8C8C8D384E4873AB679A68859176970971646CA177095A9295416BCF +7F8E66275BD059B95A9A95E895F74EEC840C84996AAC76DF9530731B68A65B5F +772F919A97617CDC8FF78C1C5F257C7379D889C56CCC871C5BC65E4268C97720 +7EF55195514D52C95A297F05976282D763CF778485D079D26E3A5E9959998511 +706D6C1162BF76BF654F60AF95FD660E879F9E2394ED540D547D8C2C64780000 +C4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +81408141814281438144814581478149814D814E814F8152815681578158815B +815C815D815E815F816181628163816481668168816A816B816C816F81728173 +81758176817781788181818381848185818681878189818B818C818D818E8190 +8192819381948195819681978199819A819E819F81A081A181A281A481A50000 +81A781A981AB81AC81AD81AE81AF81B081B181B281B481B581B681B781B881B9 +81BC81BD81BE81BF81C481C581C781C881C981CB81CD81CE81CF81D081D181D2 +81D3647986116A21819C78E864699B5462B9672B83AB58A89ED86CAB6F205BDE +964C8C0B725F67D062C772614EA959C66BCD589366AE5E5552DF6155672876EE +776672677A4662FF54EA545094A090A35A1C7EB36C164E435976801059485357 +753796BE56CA63208111607C95F96DD65462998151855AE980FD59AE9713502A +6CE55C3C62DF4F60533F817B90066EBA852B62C85E7478BE64B5637B5FF55A18 +917F9E1F5C3F634F80425B7D556E954A954D6D8560A867E072DE51DD5B810000 +C5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +81D481D581D681D781D881D981DA81DB81DC81DD81DE81DF81E081E181E281E4 +81E581E681E881E981EB81EE81EF81F081F181F281F581F681F781F881F981FA +81FD81FF8203820782088209820A820B820E820F821182138215821682178218 +8219821A821D822082248225822682278229822E8232823A823C823D823F0000 +8240824182428243824582468248824A824C824D824E82508251825282538254 +8255825682578259825B825C825D825E82608261826282638264826582668267 +826962E76CDE725B626D94AE7EBD81136D53519C5F04597452AA601259736696 +8650759F632A61E67CEF8BFA54E66B279E256BB485D5545550766CA4556A8DB4 +722C5E156015743662CD6392724C5F986E436D3E65006F5876D878D076FC7554 +522453DB4E535E9E65C1802A80D6629B5486522870AE888D8DD16CE1547880DA +57F988F48D54966A914D4F696C9B55B776C6783062A870F96F8E5F6D84EC68DA +787C7BF781A8670B9E4F636778B0576F78129739627962AB528874356BD70000 +C6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +826A826B826C826D82718275827682778278827B827C82808281828382858286 +82878289828C82908293829482958296829A829B829E82A082A282A382A782B2 +82B582B682BA82BB82BC82BF82C082C282C382C582C682C982D082D682D982DA +82DD82E282E782E882E982EA82EC82ED82EE82F082F282F382F582F682F80000 +82FA82FC82FD82FE82FF8300830A830B830D831083128313831683188319831D +831E831F83208321832283238324832583268329832A832E833083328337833B +833D5564813E75B276AE533975DE50FB5C418B6C7BC7504F72479A9798D86F02 +74E27968648777A562FC98918D2B54C180584E52576A82F9840D5E7351ED74F6 +8BC45C4F57616CFC98875A4678349B448FEB7C955256625194FA4EC683868461 +83E984B257D467345703666E6D668C3166DD7011671F6B3A6816621A59BB4E03 +51C46F0667D26C8F517668CB59476B6775665D0E81109F5065D7794879419A91 +8D775C824E5E4F01542F5951780C56686C148FC45F036C7D6CE38BAB63900000 +C7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +833E833F83418342834483458348834A834B834C834D834E8353835583568357 +83588359835D836283708371837283738374837583768379837A837E837F8380 +838183828383838483878388838A838B838C838D838F83908391839483958396 +83978399839A839D839F83A183A283A383A483A583A683A783AC83AD83AE0000 +83AF83B583BB83BE83BF83C283C383C483C683C883C983CB83CD83CE83D083D1 +83D283D383D583D783D983DA83DB83DE83E283E383E483E683E783E883EB83EC +83ED60706D3D72756266948E94C553438FC17B7E4EDF8C264E7E9ED494B194B3 +524D6F5C90636D458C3458115D4C6B206B4967AA545B81547F8C589985375F3A +62A26A47953965726084686577A74E544FA85DE7979864AC7FD85CED4FCF7A8D +520783044E14602F7A8394A64FB54EB279E6743452E482B964D279BD5BDD6C81 +97528F7B6C22503E537F6E0564CE66746C3060C598778BF75E86743C7A7779CB +4E1890B174036C4256DA914B6CC58D8B533A86C666F28EAF5C489A716E200000 +C8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +83EE83EF83F383F483F583F683F783FA83FB83FC83FE83FF8400840284058407 +84088409840A84108412841384148415841684178419841A841B841E841F8420 +8421842284238429842A842B842C842D842E842F843084328433843484358436 +84378439843A843B843E843F8440844184428443844484458447844884490000 +844A844B844C844D844E844F8450845284538454845584568458845D845E845F +8460846284648465846684678468846A846E846F84708472847484778479847B +847C53D65A369F8B8DA353BB570898A76743919B6CC9516875CA62F372AC5238 +529D7F3A7094763853749E4A69B7786E96C088D97FA4713671C3518967D374E4 +58E4651856B78BA9997662707ED560F970ED58EC4EC14EBA5FCD97E74EFB8BA4 +5203598A7EAB62544ECD65E5620E833884C98363878D71946EB65BB97ED25197 +63C967D480898339881551125B7A59828FB14E736C5D516589258F6F962E854A +745E951095F06DA682E55F3164926D128428816E9CC3585E8D5B4E0953C10000 +C9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +847D847E847F848084818483848484858486848A848D848F8490849184928493 +8494849584968498849A849B849D849E849F84A084A284A384A484A584A684A7 +84A884A984AA84AB84AC84AD84AE84B084B184B384B584B684B784BB84BC84BE +84C084C284C384C584C684C784C884CB84CC84CE84CF84D284D484D584D70000 +84D884D984DA84DB84DC84DE84E184E284E484E784E884E984EA84EB84ED84EE +84EF84F184F284F384F484F584F684F784F884F984FA84FB84FD84FE85008501 +85024F1E6563685155D34E2764149A9A626B5AC2745F82726DA968EE50E7838E +7802674052396C997EB150BB5565715E7B5B665273CA82EB67495C715220717D +886B95EA965564C58D6181B355846C5562477F2E58924F2455468D4F664C4E0A +5C1A88F368A2634E7A0D70E7828D52FA97F65C1154E890B57ECD59628D4A86C7 +820C820D8D6664445C0461516D89793E8BBE78377533547B4F388EAB6DF15A20 +7EC5795E6C885BA15A76751A80BE614E6E1758F0751F7525727253477EF30000 +CA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8503850485058506850785088509850A850B850D850E850F8510851285148515 +851685188519851B851C851D851E852085228523852485258526852785288529 +852A852D852E852F8530853185328533853485358536853E853F854085418542 +8544854585468547854B854C854D854E854F8550855185528553855485550000 +85578558855A855B855C855D855F85608561856285638565856685678569856A +856B856C856D856E856F8570857185738575857685778578857C857D857F8580 +8581770176DB526980DC57235E08593172EE65BD6E7F8BD75C388671534177F3 +62FE65F64EC098DF86805B9E8BC653F277E24F7F5C4E9A7659CB5F0F793A58EB +4E1667FF4E8B62ED8A93901D52BF662F55DC566C90024ED54F8D91CA99706C0F +5E0260435BA489C68BD56536624B99965B885BFF6388552E53D77626517D852C +67A268B36B8A62928F9353D482126DD1758F4E668D4E5B70719F85AF669166D9 +7F7287009ECD9F205C5E672F8FF06811675F620D7AD658855EB665706F310000 +CB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +85828583858685888589858A858B858C858D858E859085918592859385948595 +8596859785988599859A859D859E859F85A085A185A285A385A585A685A785A9 +85AB85AC85AD85B185B285B385B485B585B685B885BA85BB85BC85BD85BE85BF +85C085C285C385C485C585C685C785C885CA85CB85CC85CD85CE85D185D20000 +85D485D685D785D885D985DA85DB85DD85DE85DF85E085E185E285E385E585E6 +85E785E885EA85EB85EC85ED85EE85EF85F085F185F285F385F485F585F685F7 +85F860555237800D6454887075295E05681362F4971C53CC723D8C016C347761 +7A0E542E77AC987A821C8BF47855671470C165AF64955636601D79C153F84E1D +6B7B80865BFA55E356DB4F3A4F3C99725DF3677E80386002988290015B8B8BBC +8BF5641C825864DE55FD82CF91654FD77D20901F7C9F50F358516EAF5BBF8BC9 +80839178849C7B97867D968B968F7EE59AD3788E5C817A57904296A7795F5B59 +635F7B0B84D168AD55067F2974107D2295016240584C4ED65B83597958540000 +CC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +85F985FA85FC85FD85FE860086018602860386048606860786088609860A860B +860C860D860E860F86108612861386148615861786188619861A861B861C861D +861E861F86208621862286238624862586268628862A862B862C862D862E862F +863086318632863386348635863686378639863A863B863D863E863F86400000 +864186428643864486458646864786488649864A864B864C8652865386558656 +865786588659865B865C865D865F866086618663866486658666866786688669 +866A736D631E8E4B8E0F80CE82D462AC53F06CF0915E592A60016C70574D644A +8D2A762B6EE9575B6A8075F06F6D8C2D8C0857666BEF889278B363A253F970AD +6C645858642A580268E0819B55107CD650188EBA6DCC8D9F70EB638F6D9B6ED4 +7EE68404684390036DD896768BA85957727985E4817E75BC8A8A68AF52548E22 +951163D098988E44557C4F5366FF568F60D56D9552435C4959296DFB586B7530 +751C606C82148146631167618FE2773A8DF38D3494C15E165385542C70C30000 +CD +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +866D866F86708672867386748675867686778678868386848685868686878688 +8689868E868F86908691869286948696869786988699869A869B869E869F86A0 +86A186A286A586A686AB86AD86AE86B286B386B786B886B986BB86BC86BD86BE +86BF86C186C286C386C586C886CC86CD86D286D386D586D686D786DA86DC0000 +86DD86E086E186E286E386E586E686E786E886EA86EB86EC86EF86F586F686F7 +86FA86FB86FC86FD86FF8701870487058706870B870C870E870F871087118714 +87166C405EF7505C4EAD5EAD633A8247901A6850916E77B3540C94DC5F647AE5 +687663457B527EDF75DB507762955934900F51F879C37A8156FE5F9290146D82 +5C60571F541051546E4D56E263A89893817F8715892A9000541E5C6F81C062D6 +625881319E3596409A6E9A7C692D59A562D3553E631654C786D96D3C5A0374E6 +889C6B6A59168C4C5F2F6E7E73A9987D4E3870F75B8C7897633D665A769660CB +5B9B5A494E0781556C6A738B4EA167897F515F8065FA671B5FD859845A010000 +CE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8719871B871D871F87208724872687278728872A872B872C872D872F87308732 +87338735873687388739873A873C873D8740874187428743874487458746874A +874B874D874F8750875187528754875587568758875A875B875C875D875E875F +876187628766876787688769876A876B876C876D876F87718772877387750000 +877787788779877A877F878087818784878687878789878A878C878E878F8790 +8791879287948795879687988799879A879B879C879D879E87A087A187A287A3 +87A45DCD5FAE537197E68FDD684556F4552F60DF4E3A6F4D7EF482C7840E59D4 +4F1F4F2A5C3E7EAC672A851A5473754F80C355829B4F4F4D6E2D8C135C096170 +536B761F6E29868A658795FB7EB9543B7A337D0A95EE55E17FC174EE631D8717 +6DA17A9D621165A1536763E16C835DEB545C94A84E4C6C618BEC5C4B65E0829C +68A7543E54346BCB6B664E9463425348821E4F0D4FAE575E620A96FE66647269 +52FF52A1609F8BEF661471996790897F785277FD6670563B54389521727A0000 +CF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +87A587A687A787A987AA87AE87B087B187B287B487B687B787B887B987BB87BC +87BE87BF87C187C287C387C487C587C787C887C987CC87CD87CE87CF87D087D4 +87D587D687D787D887D987DA87DC87DD87DE87DF87E187E287E387E487E687E7 +87E887E987EB87EC87ED87EF87F087F187F287F387F487F587F687F787F80000 +87FA87FB87FC87FD87FF880088018802880488058806880788088809880B880C +880D880E880F8810881188128814881788188819881A881C881D881E881F8820 +88237A00606F5E0C6089819D591560DC718470EF6EAA6C5072806A8488AD5E2D +4E605AB3559C94E36D177CFB9699620F7EC6778E867E5323971E8F9666875CE1 +4FA072ED4E0B53A6590F54136380952851484ED99C9C7EA454B88D2488548237 +95F26D8E5F265ACC663E966973B0732E53BF817A99857FA15BAA967796507EBF +76F853A2957699997BB189446E584E617FD479658BE660F354CD4EAB98795DF7 +6A6150CF54118C618427785D9704524A54EE56A395006D885BB56DC666530000 +D0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +882488258826882788288829882A882B882C882D882E882F8830883188338834 +8835883688378838883A883B883D883E883F8841884288438846884788488849 +884A884B884E884F8850885188528853885588568858885A885B885C885D885E +885F886088668867886A886D886F8871887388748875887688788879887A0000 +887B887C88808883888688878889888A888C888E888F88908891889388948895 +889788988899889A889B889D889E889F88A088A188A388A588A688A788A888A9 +88AA5C0F5B5D6821809655787B11654869544E9B6B47874E978B534F631F643A +90AA659C80C18C10519968B0537887F961C86CC46CFB8C225C5185AA82AF950C +6B238F9B65B05FFB5FC34FE18845661F8165732960FA51745211578B5F6290A2 +884C91925E78674F602759D3514451F680F853086C7996C4718A4F114FEE7F9E +673D55C5950879C088967EE3589F620C9700865A5618987B5F908BB884C49157 +53D965ED5E8F755C60647D6E5A7F7EEA7EED8F6955A75BA360AC65CB73840000 +D1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +88AC88AE88AF88B088B288B388B488B588B688B888B988BA88BB88BD88BE88BF +88C088C388C488C788C888CA88CB88CC88CD88CF88D088D188D388D688D788DA +88DB88DC88DD88DE88E088E188E688E788E988EA88EB88EC88ED88EE88EF88F2 +88F588F688F788FA88FB88FD88FF890089018903890489058906890789080000 +8909890B890C890D890E890F891189148915891689178918891C891D891E891F +89208922892389248926892789288929892C892D892E892F8931893289338935 +89379009766377297EDA9774859B5B667A7496EA884052CB718F5FAA65EC8BE2 +5BFB9A6F5DE16B896C5B8BAD8BAF900A8FC5538B62BC9E269E2D54404E2B82BD +7259869C5D1688596DAF96C554D14E9A8BB6710954BD960970DF6DF976D04E25 +781487125CA95EF68A00989C960E708E6CBF594463A9773C884D6F1482735830 +71D5538C781A96C155015F6671305BB48C1A9A8C6B83592E9E2F79E76768626C +4F6F75A17F8A6D0B96336C274EF075D2517B68376F3E90808170599674760000 +D2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +89388939893A893B893C893D893E893F89408942894389458946894789488949 +894A894B894C894D894E894F8950895189528953895489558956895789588959 +895A895B895C895D896089618962896389648965896789688969896A896B896C +896D896E896F8970897189728973897489758976897789788979897A897C0000 +897D897E8980898289848985898789888989898A898B898C898D898E898F8990 +899189928993899489958996899789988999899A899B899C899D899E899F89A0 +89A164475C2790657A918C2359DA54AC8200836F898180006930564E80367237 +91CE51B64E5F987563964E1A53F666F3814B591C6DB24E0058F9533B63D694F1 +4F9D4F0A886398905937905779FB4EEA80F075916C825B9C59E85F5D69058681 +501A5DF24E5977E34EE5827A6291661390915C794EBF5F7981C69038808475AB +4EA688D4610F6BC55FC64E4976CA6EA28BE38BAE8C0A8BD15F027FFC7FCC7ECE +8335836B56E06BB797F3963459FB541F94F66DEB5BC5996E5C395F1596900000 +D3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +89A289A389A489A589A689A789A889A989AA89AB89AC89AD89AE89AF89B089B1 +89B289B389B489B589B689B789B889B989BA89BB89BC89BD89BE89BF89C089C3 +89CD89D389D489D589D789D889D989DB89DD89DF89E089E189E289E489E789E8 +89E989EA89EC89ED89EE89F089F189F289F489F589F689F789F889F989FA0000 +89FB89FC89FD89FE89FF8A018A028A038A048A058A068A088A098A0A8A0B8A0C +8A0D8A0E8A0F8A108A118A128A138A148A158A168A178A188A198A1A8A1B8A1C +8A1D537082F16A315A749E705E947F2883B984248425836787478FCE8D6276C8 +5F719896786C662054DF62E54F6381C375C85EB896CD8E0A86F9548F6CF36D8C +6C38607F52C775285E7D4F1860A05FE75C24753190AE94C072B96CB96E389149 +670953CB53F34F5191C98BF153C85E7C8FC26DE44E8E76C26986865E611A8206 +4F594FDE903E9C7C61096E1D6E1496854E885A3196E84E0E5C7F79B95B878BED +7FBD738957DF828B90C15401904755BB5CEA5FA161086B3272F180B28A890000 +D4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8A1E8A1F8A208A218A228A238A248A258A268A278A288A298A2A8A2B8A2C8A2D +8A2E8A2F8A308A318A328A338A348A358A368A378A388A398A3A8A3B8A3C8A3D +8A3F8A408A418A428A438A448A458A468A478A498A4A8A4B8A4C8A4D8A4E8A4F +8A508A518A528A538A548A558A568A578A588A598A5A8A5B8A5C8A5D8A5E0000 +8A5F8A608A618A628A638A648A658A668A678A688A698A6A8A6B8A6C8A6D8A6E +8A6F8A708A718A728A738A748A758A768A778A788A7A8A7B8A7C8A7D8A7E8A7F +8A806D745BD388D598848C6B9A6D9E336E0A51A4514357A38881539F63F48F95 +56ED54585706733F6E907F188FDC82D1613F6028966266F07EA68D8A8DC394A5 +5CB37CA4670860A6960580184E9190E75300966851418FD08574915D665597F5 +5B55531D78386742683D54C9707E5BB08F7D518D572854B1651266828D5E8D43 +810F846C906D7CDF51FF85FB67A365E96FA186A48E81566A90207682707671E5 +8D2362E952196CFD8D3C600E589E618E66FE8D60624E55B36E23672D8F670000 +D5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8A818A828A838A848A858A868A878A888A8B8A8C8A8D8A8E8A8F8A908A918A92 +8A948A958A968A978A988A998A9A8A9B8A9C8A9D8A9E8A9F8AA08AA18AA28AA3 +8AA48AA58AA68AA78AA88AA98AAA8AAB8AAC8AAD8AAE8AAF8AB08AB18AB28AB3 +8AB48AB58AB68AB78AB88AB98ABA8ABB8ABC8ABD8ABE8ABF8AC08AC18AC20000 +8AC38AC48AC58AC68AC78AC88AC98ACA8ACB8ACC8ACD8ACE8ACF8AD08AD18AD2 +8AD38AD48AD58AD68AD78AD88AD98ADA8ADB8ADC8ADD8ADE8ADF8AE08AE18AE2 +8AE394E195F87728680569A8548B4E4D70B88BC86458658B5B857A84503A5BE8 +77BB6BE18A797C986CBE76CF65A98F975D2D5C5586386808536062187AD96E5B +7EFD6A1F7AE05F706F335F20638C6DA867564E085E108D264ED780C07634969C +62DB662D627E6CBC8D7571677F695146808753EC906E629854F286F08F998005 +951785178FD96D5973CD659F771F7504782781FB8D1E94884FA6679575B98BCA +9707632F9547963584B8632377415F8172F04E896014657462EF6B63653F0000 +D6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8AE48AE58AE68AE78AE88AE98AEA8AEB8AEC8AED8AEE8AEF8AF08AF18AF28AF3 +8AF48AF58AF68AF78AF88AF98AFA8AFB8AFC8AFD8AFE8AFF8B008B018B028B03 +8B048B058B068B088B098B0A8B0B8B0C8B0D8B0E8B0F8B108B118B128B138B14 +8B158B168B178B188B198B1A8B1B8B1C8B1D8B1E8B1F8B208B218B228B230000 +8B248B258B278B288B298B2A8B2B8B2C8B2D8B2E8B2F8B308B318B328B338B34 +8B358B368B378B388B398B3A8B3B8B3C8B3D8B3E8B3F8B408B418B428B438B44 +8B455E2775C790D18BC1829D679D652F5431871877E580A281026C414E4B7EC7 +804C76F4690D6B966267503C4F84574063076B628DBE53EA65E87EB85FD7631A +63B781F381F47F6E5E1C5CD95236667A79E97A1A8D28709975D46EDE6CBB7A92 +4E2D76C55FE0949F88777EC879CD80BF91CD4EF24F17821F54685DDE6D328BCC +7CA58F7480985E1A549276B15B99663C9AA473E0682A86DB6731732A8BF88BDB +90107AF970DB716E62C477A956314E3B845767F152A986C08D2E94F87B510000 +D7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8B468B478B488B498B4A8B4B8B4C8B4D8B4E8B4F8B508B518B528B538B548B55 +8B568B578B588B598B5A8B5B8B5C8B5D8B5E8B5F8B608B618B628B638B648B65 +8B678B688B698B6A8B6B8B6D8B6E8B6F8B708B718B728B738B748B758B768B77 +8B788B798B7A8B7B8B7C8B7D8B7E8B7F8B808B818B828B838B848B858B860000 +8B878B888B898B8A8B8B8B8C8B8D8B8E8B8F8B908B918B928B938B948B958B96 +8B978B988B998B9A8B9B8B9C8B9D8B9E8B9F8BAC8BB18BBB8BC78BD08BEA8C09 +8C1E4F4F6CE8795D9A7B6293722A62FD4E1378168F6C64B08D5A7BC668695E84 +88C55986649E58EE72B6690E95258FFD8D5857607F008C0651C6634962D95353 +684C74228301914C55447740707C6D4A517954A88D4459FF6ECB6DC45B5C7D2B +4ED47C7D6ED35B5081EA6E0D5B579B0368D58E2A5B977EFC603B7EB590B98D70 +594F63CD79DF8DB3535265CF79568BC5963B7EC494BB7E825634918967007F6A +5C0A907566285DE64F5067DE505A4F5C57505EA7000000000000000000000000 +D8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8C388C398C3A8C3B8C3C8C3D8C3E8C3F8C408C428C438C448C458C488C4A8C4B +8C4D8C4E8C4F8C508C518C528C538C548C568C578C588C598C5B8C5C8C5D8C5E +8C5F8C608C638C648C658C668C678C688C698C6C8C6D8C6E8C6F8C708C718C72 +8C748C758C768C778C7B8C7C8C7D8C7E8C7F8C808C818C838C848C868C870000 +8C888C8B8C8D8C8E8C8F8C908C918C928C938C958C968C978C998C9A8C9B8C9C +8C9D8C9E8C9F8CA08CA18CA28CA38CA48CA58CA68CA78CA88CA98CAA8CAB8CAC +8CAD4E8D4E0C51404E105EFF53454E154E984E1E9B325B6C56694E2879BA4E3F +53154E47592D723B536E6C1056DF80E499976BD3777E9F174E364E9F9F104E5C +4E694E9382885B5B556C560F4EC4538D539D53A353A553AE97658D5D531A53F5 +5326532E533E8D5C5366536352025208520E522D5233523F5240524C525E5261 +525C84AF527D528252815290529351827F544EBB4EC34EC94EC24EE84EE14EEB +4EDE4F1B4EF34F224F644EF54F254F274F094F2B4F5E4F6765384F5A4F5D0000 +D9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8CAE8CAF8CB08CB18CB28CB38CB48CB58CB68CB78CB88CB98CBA8CBB8CBC8CBD +8CBE8CBF8CC08CC18CC28CC38CC48CC58CC68CC78CC88CC98CCA8CCB8CCC8CCD +8CCE8CCF8CD08CD18CD28CD38CD48CD58CD68CD78CD88CD98CDA8CDB8CDC8CDD +8CDE8CDF8CE08CE18CE28CE38CE48CE58CE68CE78CE88CE98CEA8CEB8CEC0000 +8CED8CEE8CEF8CF08CF18CF28CF38CF48CF58CF68CF78CF88CF98CFA8CFB8CFC +8CFD8CFE8CFF8D008D018D028D038D048D058D068D078D088D098D0A8D0B8D0C +8D0D4F5F4F574F324F3D4F764F744F914F894F834F8F4F7E4F7B4FAA4F7C4FAC +4F944FE64FE84FEA4FC54FDA4FE34FDC4FD14FDF4FF85029504C4FF3502C500F +502E502D4FFE501C500C50255028507E504350555048504E506C507B50A550A7 +50A950BA50D6510650ED50EC50E650EE5107510B4EDD6C3D4F584F654FCE9FA0 +6C467C74516E5DFD9EC999985181591452F9530D8A07531051EB591951554EA0 +51564EB3886E88A44EB5811488D279805B3488037FB851AB51B151BD51BC0000 +DA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8D0E8D0F8D108D118D128D138D148D158D168D178D188D198D1A8D1B8D1C8D20 +8D518D528D578D5F8D658D688D698D6A8D6C8D6E8D6F8D718D728D788D798D7A +8D7B8D7C8D7D8D7E8D7F8D808D828D838D868D878D888D898D8C8D8D8D8E8D8F +8D908D928D938D958D968D978D988D998D9A8D9B8D9C8D9D8D9E8DA08DA10000 +8DA28DA48DA58DA68DA78DA88DA98DAA8DAB8DAC8DAD8DAE8DAF8DB08DB28DB6 +8DB78DB98DBB8DBD8DC08DC18DC28DC58DC78DC88DC98DCA8DCD8DD08DD28DD3 +8DD451C7519651A251A58BA08BA68BA78BAA8BB48BB58BB78BC28BC38BCB8BCF +8BCE8BD28BD38BD48BD68BD88BD98BDC8BDF8BE08BE48BE88BE98BEE8BF08BF3 +8BF68BF98BFC8BFF8C008C028C048C078C0C8C0F8C118C128C148C158C168C19 +8C1B8C188C1D8C1F8C208C218C258C278C2A8C2B8C2E8C2F8C328C338C358C36 +5369537A961D962296219631962A963D963C964296499654965F9667966C9672 +96749688968D969796B09097909B909D909990AC90A190B490B390B690BA0000 +DB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8DD58DD88DD98DDC8DE08DE18DE28DE58DE68DE78DE98DED8DEE8DF08DF18DF2 +8DF48DF68DFC8DFE8DFF8E008E018E028E038E048E068E078E088E0B8E0D8E0E +8E108E118E128E138E158E168E178E188E198E1A8E1B8E1C8E208E218E248E25 +8E268E278E288E2B8E2D8E308E328E338E348E368E378E388E3B8E3C8E3E0000 +8E3F8E438E458E468E4C8E4D8E4E8E4F8E508E538E548E558E568E578E588E5A +8E5B8E5C8E5D8E5E8E5F8E608E618E628E638E648E658E678E688E6A8E6B8E6E +8E7190B890B090CF90C590BE90D090C490C790D390E690E290DC90D790DB90EB +90EF90FE91049122911E91239131912F913991439146520D594252A252AC52AD +52BE54FF52D052D652F053DF71EE77CD5EF451F551FC9B2F53B65F01755A5DEF +574C57A957A1587E58BC58C558D15729572C572A57335739572E572F575C573B +574257695785576B5786577C577B5768576D5776577357AD57A4578C57B257CF +57A757B4579357A057D557D857DA57D957D257B857F457EF57F857E457DD0000 +DC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8E738E758E778E788E798E7A8E7B8E7D8E7E8E808E828E838E848E868E888E89 +8E8A8E8B8E8C8E8D8E8E8E918E928E938E958E968E978E988E998E9A8E9B8E9D +8E9F8EA08EA18EA28EA38EA48EA58EA68EA78EA88EA98EAA8EAD8EAE8EB08EB1 +8EB38EB48EB58EB68EB78EB88EB98EBB8EBC8EBD8EBE8EBF8EC08EC18EC20000 +8EC38EC48EC58EC68EC78EC88EC98ECA8ECB8ECC8ECD8ECF8ED08ED18ED28ED3 +8ED48ED58ED68ED78ED88ED98EDA8EDB8EDC8EDD8EDE8EDF8EE08EE18EE28EE3 +8EE4580B580D57FD57ED5800581E5819584458205865586C58815889589A5880 +99A89F1961FF8279827D827F828F828A82A88284828E82918297829982AB82B8 +82BE82B082C882CA82E3829882B782AE82CB82CC82C182A982B482A182AA829F +82C482CE82A482E1830982F782E4830F830782DC82F482D282D8830C82FB82D3 +8311831A83068314831582E082D5831C8351835B835C83088392833C83348331 +839B835E832F834F83478343835F834083178360832D833A8333836683650000 +DD +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8EE58EE68EE78EE88EE98EEA8EEB8EEC8EED8EEE8EEF8EF08EF18EF28EF38EF4 +8EF58EF68EF78EF88EF98EFA8EFB8EFC8EFD8EFE8EFF8F008F018F028F038F04 +8F058F068F078F088F098F0A8F0B8F0C8F0D8F0E8F0F8F108F118F128F138F14 +8F158F168F178F188F198F1A8F1B8F1C8F1D8F1E8F1F8F208F218F228F230000 +8F248F258F268F278F288F298F2A8F2B8F2C8F2D8F2E8F2F8F308F318F328F33 +8F348F358F368F378F388F398F3A8F3B8F3C8F3D8F3E8F3F8F408F418F428F43 +8F448368831B8369836C836A836D836E83B0837883B383B483A083AA8393839C +8385837C83B683A9837D83B8837B8398839E83A883BA83BC83C1840183E583D8 +58078418840B83DD83FD83D6841C84388411840683D483DF840F840383F883F9 +83EA83C583C0842683F083E1845C8451845A8459847384878488847A84898478 +843C844684698476848C848E8431846D84C184CD84D084E684BD84D384CA84BF +84BA84E084A184B984B4849784E584E3850C750D853884F08539851F853A0000 +DE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8F458F468F478F488F498F4A8F4B8F4C8F4D8F4E8F4F8F508F518F528F538F54 +8F558F568F578F588F598F5A8F5B8F5C8F5D8F5E8F5F8F608F618F628F638F64 +8F658F6A8F808F8C8F928F9D8FA08FA18FA28FA48FA58FA68FA78FAA8FAC8FAD +8FAE8FAF8FB28FB38FB48FB58FB78FB88FBA8FBB8FBC8FBF8FC08FC38FC60000 +8FC98FCA8FCB8FCC8FCD8FCF8FD28FD68FD78FDA8FE08FE18FE38FE78FEC8FEF +8FF18FF28FF48FF58FF68FFA8FFB8FFC8FFE8FFF90079008900C900E90139015 +90188556853B84FF84FC8559854885688564855E857A77A285438572857B85A4 +85A88587858F857985AE859C858585B985B785B085D385C185DC85FF86278605 +86298616863C5EFE5F08593C594180375955595A5958530F5C225C255C2C5C34 +624C626A629F62BB62CA62DA62D762EE632262F66339634B634363AD63F66371 +637A638E63B4636D63AC638A636963AE63BC63F263F863E063FF63C463DE63CE +645263C663BE64456441640B641B6420640C64266421645E6484646D64960000 +DF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +9019901C902390249025902790289029902A902B902C90309031903290339034 +90379039903A903D903F904090439045904690489049904A904B904C904E9054 +905590569059905A905C905D905E905F906090619064906690679069906A906B +906C906F90709071907290739076907790789079907A907B907C907E90810000 +90849085908690879089908A908C908D908E908F90909092909490969098909A +909C909E909F90A090A490A590A790A890A990AB90AD90B290B790BC90BD90BF +90C0647A64B764B8649964BA64C064D064D764E464E265096525652E5F0B5FD2 +75195F11535F53F153FD53E953E853FB541254165406544B5452545354545456 +54435421545754595423543254825494547754715464549A549B548454765466 +549D54D054AD54C254B454D254A754A654D354D4547254A354D554BB54BF54CC +54D954DA54DC54A954AA54A454DD54CF54DE551B54E7552054FD551454F35522 +5523550F55115527552A5567558F55B55549556D55415555553F5550553C0000 +E0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +90C290C390C690C890C990CB90CC90CD90D290D490D590D690D890D990DA90DE +90DF90E090E390E490E590E990EA90EC90EE90F090F190F290F390F590F690F7 +90F990FA90FB90FC90FF91009101910391059106910791089109910A910B910C +910D910E910F911091119112911391149115911691179118911A911B911C0000 +911D911F91209121912491259126912791289129912A912B912C912D912E9130 +9132913391349135913691379138913A913B913C913D913E913F914091419142 +91445537555655755576557755335530555C558B55D2558355B155B955885581 +559F557E55D65591557B55DF55BD55BE5594559955EA55F755C9561F55D155EB +55EC55D455E655DD55C455EF55E555F255F355CC55CD55E855F555E48F94561E +5608560C56015624562355FE56005627562D565856395657562C564D56625659 +565C564C5654568656645671566B567B567C5685569356AF56D456D756DD56E1 +56F556EB56F956FF5704570A5709571C5E0F5E195E145E115E315E3B5E3C0000 +E1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +9145914791489151915391549155915691589159915B915C915F916091669167 +9168916B916D9173917A917B917C9180918191829183918491869188918A918E +918F9193919491959196919791989199919C919D919E919F91A091A191A491A5 +91A691A791A891A991AB91AC91B091B191B291B391B691B791B891B991BB0000 +91BC91BD91BE91BF91C091C191C291C391C491C591C691C891CB91D091D291D3 +91D491D591D691D791D891D991DA91DB91DD91DE91DF91E091E191E291E391E4 +91E55E375E445E545E5B5E5E5E615C8C5C7A5C8D5C905C965C885C985C995C91 +5C9A5C9C5CB55CA25CBD5CAC5CAB5CB15CA35CC15CB75CC45CD25CE45CCB5CE5 +5D025D035D275D265D2E5D245D1E5D065D1B5D585D3E5D345D3D5D6C5D5B5D6F +5D5D5D6B5D4B5D4A5D695D745D825D995D9D8C735DB75DC55F735F775F825F87 +5F895F8C5F955F995F9C5FA85FAD5FB55FBC88625F6172AD72B072B472B772B8 +72C372C172CE72CD72D272E872EF72E972F272F472F7730172F3730372FA0000 +E2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +91E691E791E891E991EA91EB91EC91ED91EE91EF91F091F191F291F391F491F5 +91F691F791F891F991FA91FB91FC91FD91FE91FF920092019202920392049205 +9206920792089209920A920B920C920D920E920F921092119212921392149215 +9216921792189219921A921B921C921D921E921F922092219222922392240000 +92259226922792289229922A922B922C922D922E922F92309231923292339234 +92359236923792389239923A923B923C923D923E923F92409241924292439244 +924572FB731773137321730A731E731D7315732273397325732C733873317350 +734D73577360736C736F737E821B592598E7592459029963996799689969996A +996B996C99749977997D998099849987998A998D999099919993999499955E80 +5E915E8B5E965EA55EA05EB95EB55EBE5EB38D535ED25ED15EDB5EE85EEA81BA +5FC45FC95FD65FCF60035FEE60045FE15FE45FFE600560065FEA5FED5FF86019 +60356026601B600F600D6029602B600A603F602160786079607B607A60420000 +E3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +9246924792489249924A924B924C924D924E924F925092519252925392549255 +9256925792589259925A925B925C925D925E925F926092619262926392649265 +9266926792689269926A926B926C926D926E926F927092719272927392759276 +927792789279927A927B927C927D927E927F9280928192829283928492850000 +9286928792889289928A928B928C928D928F9290929192929293929492959296 +929792989299929A929B929C929D929E929F92A092A192A292A392A492A592A6 +92A7606A607D6096609A60AD609D60836092608C609B60EC60BB60B160DD60D8 +60C660DA60B4612061266115612360F46100610E612B614A617561AC619461A7 +61B761D461F55FDD96B395E995EB95F195F395F595F695FC95FE960396049606 +9608960A960B960C960D960F96129615961696179619961A4E2C723F62156C35 +6C546C5C6C4A6CA36C856C906C946C8C6C686C696C746C766C866CA96CD06CD4 +6CAD6CF76CF86CF16CD76CB26CE06CD66CFA6CEB6CEE6CB16CD36CEF6CFE0000 +E4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +92A892A992AA92AB92AC92AD92AF92B092B192B292B392B492B592B692B792B8 +92B992BA92BB92BC92BD92BE92BF92C092C192C292C392C492C592C692C792C9 +92CA92CB92CC92CD92CE92CF92D092D192D292D392D492D592D692D792D892D9 +92DA92DB92DC92DD92DE92DF92E092E192E292E392E492E592E692E792E80000 +92E992EA92EB92EC92ED92EE92EF92F092F192F292F392F492F592F692F792F8 +92F992FA92FB92FC92FD92FE92FF930093019302930393049305930693079308 +93096D396D276D0C6D436D486D076D046D196D0E6D2B6D4D6D2E6D356D1A6D4F +6D526D546D336D916D6F6D9E6DA06D5E6D936D946D5C6D606D7C6D636E1A6DC7 +6DC56DDE6E0E6DBF6DE06E116DE66DDD6DD96E166DAB6E0C6DAE6E2B6E6E6E4E +6E6B6EB26E5F6E866E536E546E326E256E446EDF6EB16E986EE06F2D6EE26EA5 +6EA76EBD6EBB6EB76ED76EB46ECF6E8F6EC26E9F6F626F466F476F246F156EF9 +6F2F6F366F4B6F746F2A6F096F296F896F8D6F8C6F786F726F7C6F7A6FD10000 +E5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +930A930B930C930D930E930F9310931193129313931493159316931793189319 +931A931B931C931D931E931F9320932193229323932493259326932793289329 +932A932B932C932D932E932F9330933193329333933493359336933793389339 +933A933B933C933D933F93409341934293439344934593469347934893490000 +934A934B934C934D934E934F9350935193529353935493559356935793589359 +935A935B935C935D935E935F9360936193629363936493659366936793689369 +936B6FC96FA76FB96FB66FC26FE16FEE6FDE6FE06FEF701A7023701B70397035 +704F705E5B805B845B955B935BA55BB8752F9A9E64345BE45BEE89305BF08E47 +8B078FB68FD38FD58FE58FEE8FE48FE98FE68FF38FE890059004900B90269011 +900D9016902190359036902D902F9044905190529050906890589062905B66B9 +9074907D908290889083908B5F505F575F565F585C3B54AB5C505C595B715C63 +5C667FBC5F2A5F295F2D82745F3C9B3B5C6E59815983598D59A959AA59A30000 +E6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +936C936D936E936F9370937193729373937493759376937793789379937A937B +937C937D937E937F9380938193829383938493859386938793889389938A938B +938C938D938E9390939193929393939493959396939793989399939A939B939C +939D939E939F93A093A193A293A393A493A593A693A793A893A993AA93AB0000 +93AC93AD93AE93AF93B093B193B293B393B493B593B693B793B893B993BA93BB +93BC93BD93BE93BF93C093C193C293C393C493C593C693C793C893C993CB93CC +93CD599759CA59AB599E59A459D259B259AF59D759BE5A055A0659DD5A0859E3 +59D859F95A0C5A095A325A345A115A235A135A405A675A4A5A555A3C5A625A75 +80EC5AAA5A9B5A775A7A5ABE5AEB5AB25AD25AD45AB85AE05AE35AF15AD65AE6 +5AD85ADC5B095B175B165B325B375B405C155C1C5B5A5B655B735B515B535B62 +9A759A779A789A7A9A7F9A7D9A809A819A859A889A8A9A909A929A939A969A98 +9A9B9A9C9A9D9A9F9AA09AA29AA39AA59AA77E9F7EA17EA37EA57EA87EA90000 +E7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +93CE93CF93D093D193D293D393D493D593D793D893D993DA93DB93DC93DD93DE +93DF93E093E193E293E393E493E593E693E793E893E993EA93EB93EC93ED93EE +93EF93F093F193F293F393F493F593F693F793F893F993FA93FB93FC93FD93FE +93FF9400940194029403940494059406940794089409940A940B940C940D0000 +940E940F9410941194129413941494159416941794189419941A941B941C941D +941E941F9420942194229423942494259426942794289429942A942B942C942D +942E7EAD7EB07EBE7EC07EC17EC27EC97ECB7ECC7ED07ED47ED77EDB7EE07EE1 +7EE87EEB7EEE7EEF7EF17EF27F0D7EF67EFA7EFB7EFE7F017F027F037F077F08 +7F0B7F0C7F0F7F117F127F177F197F1C7F1B7F1F7F217F227F237F247F257F26 +7F277F2A7F2B7F2C7F2D7F2F7F307F317F327F337F355E7A757F5DDB753E9095 +738E739173AE73A2739F73CF73C273D173B773B373C073C973C873E573D9987C +740A73E973E773DE73BA73F2740F742A745B7426742574287430742E742C0000 +E8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +942F9430943194329433943494359436943794389439943A943B943C943D943F +9440944194429443944494459446944794489449944A944B944C944D944E944F +9450945194529453945494559456945794589459945A945B945C945D945E945F +9460946194629463946494659466946794689469946A946C946D946E946F0000 +9470947194729473947494759476947794789479947A947B947C947D947E947F +9480948194829483948494919496949894C794CF94D394D494DA94E694FB951C +9520741B741A7441745C7457745574597477746D747E749C748E748074817487 +748B749E74A874A9749074A774D274BA97EA97EB97EC674C6753675E67486769 +67A56787676A6773679867A7677567A8679E67AD678B6777677C67F0680967D8 +680A67E967B0680C67D967B567DA67B367DD680067C367B867E2680E67C167FD +6832683368606861684E6862684468646883681D68556866684168676840683E +684A6849682968B5688F687468776893686B68C2696E68FC691F692068F90000 +E9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +95279533953D95439548954B9555955A9560956E95749575957795789579957A +957B957C957D957E9580958195829583958495859586958795889589958A958B +958C958D958E958F9590959195929593959495959596959795989599959A959B +959C959D959E959F95A095A195A295A395A495A595A695A795A895A995AA0000 +95AB95AC95AD95AE95AF95B095B195B295B395B495B595B695B795B895B995BA +95BB95BC95BD95BE95BF95C095C195C295C395C495C595C695C795C895C995CA +95CB692468F0690B6901695768E369106971693969606942695D6984696B6980 +69986978693469CC6987698869CE6989696669636979699B69A769BB69AB69AD +69D469B169C169CA69DF699569E0698D69FF6A2F69ED6A176A186A6569F26A44 +6A3E6AA06A506A5B6A356A8E6A796A3D6A286A586A7C6A916A906AA96A976AAB +733773526B816B826B876B846B926B936B8D6B9A6B9B6BA16BAA8F6B8F6D8F71 +8F728F738F758F768F788F778F798F7A8F7C8F7E8F818F828F848F878F8B0000 +EA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +95CC95CD95CE95CF95D095D195D295D395D495D595D695D795D895D995DA95DB +95DC95DD95DE95DF95E095E195E295E395E495E595E695E795EC95FF96079613 +9618961B961E96209623962496259626962796289629962B962C962D962F9630 +963796389639963A963E96419643964A964E964F965196529653965696570000 +96589659965A965C965D965E9660966396659666966B966D966E966F96709671 +967396789679967A967B967C967D967E967F9680968196829683968496879689 +968A8F8D8F8E8F8F8F988F9A8ECE620B6217621B621F6222622162256224622C +81E774EF74F474FF750F75117513653465EE65EF65F0660A6619677266036615 +6600708566F7661D66346631663666358006665F66546641664F665666616657 +66776684668C66A7669D66BE66DB66DC66E666E98D328D338D368D3B8D3D8D40 +8D458D468D488D498D478D4D8D558D5989C789CA89CB89CC89CE89CF89D089D1 +726E729F725D7266726F727E727F7284728B728D728F72926308633263B00000 +EB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +968C968E96919692969396959696969A969B969D969E969F96A096A196A296A3 +96A496A596A696A896A996AA96AB96AC96AD96AE96AF96B196B296B496B596B7 +96B896BA96BB96BF96C296C396C896CA96CB96D096D196D396D496D696D796D8 +96D996DA96DB96DC96DD96DE96DF96E196E296E396E496E596E696E796EB0000 +96EC96ED96EE96F096F196F296F496F596F896FA96FB96FC96FD96FF97029703 +9705970A970B970C97109711971297149715971797189719971A971B971D971F +9720643F64D880046BEA6BF36BFD6BF56BF96C056C076C066C0D6C156C186C19 +6C1A6C216C296C246C2A6C3265356555656B724D72527256723086625216809F +809C809380BC670A80BD80B180AB80AD80B480B780E780E880E980EA80DB80C2 +80C480D980CD80D7671080DD80EB80F180F480ED810D810E80F280FC67158112 +8C5A8136811E812C811881328148814C815381748159815A817181608169817C +817D816D8167584D5AB58188818281916ED581A381AA81CC672681CA81BB0000 +EC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +972197229723972497259726972797289729972B972C972E972F973197339734 +973597369737973A973B973C973D973F97409741974297439744974597469747 +97489749974A974B974C974D974E974F975097519754975597579758975A975C +975D975F97639764976697679768976A976B976C976D976E976F977097710000 +97729775977797789779977A977B977D977E977F978097819782978397849786 +978797889789978A978C978E978F979097939795979697979799979A979B979C +979D81C181A66B246B376B396B436B466B5998D198D298D398D598D998DA6BB3 +5F406BC289F365909F51659365BC65C665C465C365CC65CE65D265D67080709C +7096709D70BB70C070B770AB70B170E870CA711071137116712F71317173715C +716871457172714A7178717A719871B371B571A871A071E071D471E771F9721D +7228706C7118716671B9623E623D624362486249793B794079467949795B795C +7953795A796279577960796F7967797A7985798A799A79A779B35FD15FD00000 +ED +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +979E979F97A197A297A497A597A697A797A897A997AA97AC97AE97B097B197B3 +97B597B697B797B897B997BA97BB97BC97BD97BE97BF97C097C197C297C397C4 +97C597C697C797C897C997CA97CB97CC97CD97CE97CF97D097D197D297D397D4 +97D597D697D797D897D997DA97DB97DC97DD97DE97DF97E097E197E297E30000 +97E497E597E897EE97EF97F097F197F297F497F797F897F997FA97FB97FC97FD +97FE97FF9800980198029803980498059806980798089809980A980B980C980D +980E603C605D605A606760416059606360AB6106610D615D61A9619D61CB61D1 +62068080807F6C936CF66DFC77F677F87800780978177818781165AB782D781C +781D7839783A783B781F783C7825782C78237829784E786D7856785778267850 +7847784C786A789B7893789A7887789C78A178A378B278B978A578D478D978C9 +78EC78F2790578F479137924791E79349F9B9EF99EFB9EFC76F17704770D76F9 +77077708771A77227719772D7726773577387750775177477743775A77680000 +EE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +980F9810981198129813981498159816981798189819981A981B981C981D981E +981F9820982198229823982498259826982798289829982A982B982C982D982E +982F9830983198329833983498359836983798389839983A983B983C983D983E +983F9840984198429843984498459846984798489849984A984B984C984D0000 +984E984F9850985198529853985498559856985798589859985A985B985C985D +985E985F9860986198629863986498659866986798689869986A986B986C986D +986E77627765777F778D777D7780778C7791779F77A077B077B577BD753A7540 +754E754B7548755B7572757975837F587F617F5F8A487F687F747F717F797F81 +7F7E76CD76E58832948594869487948B948A948C948D948F9490949494979495 +949A949B949C94A394A494AB94AA94AD94AC94AF94B094B294B494B694B794B8 +94B994BA94BC94BD94BF94C494C894C994CA94CB94CC94CD94CE94D094D194D2 +94D594D694D794D994D894DB94DE94DF94E094E294E494E594E794E894EA0000 +EF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +986F98709871987298739874988B988E98929895989998A398A898A998AA98AB +98AC98AD98AE98AF98B098B198B298B398B498B598B698B798B898B998BA98BB +98BC98BD98BE98BF98C098C198C298C398C498C598C698C798C898C998CA98CB +98CC98CD98CF98D098D498D698D798DB98DC98DD98E098E198E298E398E40000 +98E598E698E998EA98EB98EC98ED98EE98EF98F098F198F298F398F498F598F6 +98F798F898F998FA98FB98FC98FD98FE98FF9900990199029903990499059906 +990794E994EB94EE94EF94F394F494F594F794F994FC94FD94FF950395029506 +95079509950A950D950E950F951295139514951595169518951B951D951E951F +9522952A952B9529952C953195329534953695379538953C953E953F95429535 +9544954595469549954C954E954F9552955395549556955795589559955B955E +955F955D95619562956495659566956795689569956A956B956C956F95719572 +9573953A77E777EC96C979D579ED79E379EB7A065D477A037A027A1E7A140000 +F0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +99089909990A990B990C990E990F991199129913991499159916991799189919 +991A991B991C991D991E991F9920992199229923992499259926992799289929 +992A992B992C992D992F9930993199329933993499359936993799389939993A +993B993C993D993E993F99409941994299439944994599469947994899490000 +994A994B994C994D994E994F99509951995299539956995799589959995A995B +995C995D995E995F99609961996299649966997399789979997B997E99829983 +99897A397A377A519ECF99A57A707688768E7693769976A474DE74E0752C9E20 +9E229E289E299E2A9E2B9E2C9E329E319E369E389E379E399E3A9E3E9E419E42 +9E449E469E479E489E499E4B9E4C9E4E9E519E559E579E5A9E5B9E5C9E5E9E63 +9E669E679E689E699E6A9E6B9E6C9E719E6D9E7375927594759675A0759D75AC +75A375B375B475B875C475B175B075C375C275D675CD75E375E875E675E475EB +75E7760375F175FC75FF761076007605760C7617760A76257618761576190000 +F1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +998C998E999A999B999C999D999E999F99A099A199A299A399A499A699A799A9 +99AA99AB99AC99AD99AE99AF99B099B199B299B399B499B599B699B799B899B9 +99BA99BB99BC99BD99BE99BF99C099C199C299C399C499C599C699C799C899C9 +99CA99CB99CC99CD99CE99CF99D099D199D299D399D499D599D699D799D80000 +99D999DA99DB99DC99DD99DE99DF99E099E199E299E399E499E599E699E799E8 +99E999EA99EB99EC99ED99EE99EF99F099F199F299F399F499F599F699F799F8 +99F9761B763C762276207640762D7630763F76357643763E7633764D765E7654 +765C7656766B766F7FCA7AE67A787A797A807A867A887A957AA67AA07AAC7AA8 +7AAD7AB3886488698872887D887F888288A288C688B788BC88C988E288CE88E3 +88E588F1891A88FC88E888FE88F0892189198913891B890A8934892B89368941 +8966897B758B80E576B276B477DC801280148016801C80208022802580268027 +802980288031800B803580438046804D80528069807189839878988098830000 +F2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +99FA99FB99FC99FD99FE99FF9A009A019A029A039A049A059A069A079A089A09 +9A0A9A0B9A0C9A0D9A0E9A0F9A109A119A129A139A149A159A169A179A189A19 +9A1A9A1B9A1C9A1D9A1E9A1F9A209A219A229A239A249A259A269A279A289A29 +9A2A9A2B9A2C9A2D9A2E9A2F9A309A319A329A339A349A359A369A379A380000 +9A399A3A9A3B9A3C9A3D9A3E9A3F9A409A419A429A439A449A459A469A479A48 +9A499A4A9A4B9A4C9A4D9A4E9A4F9A509A519A529A539A549A559A569A579A58 +9A599889988C988D988F9894989A989B989E989F98A198A298A598A6864D8654 +866C866E867F867A867C867B86A8868D868B86AC869D86A786A386AA869386A9 +86B686C486B586CE86B086BA86B186AF86C986CF86B486E986F186F286ED86F3 +86D0871386DE86F486DF86D886D18703870786F88708870A870D87098723873B +871E8725872E871A873E87488734873187298737873F87828722877D877E877B +87608770874C876E878B87538763877C876487598765879387AF87A887D20000 +F3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +9A5A9A5B9A5C9A5D9A5E9A5F9A609A619A629A639A649A659A669A679A689A69 +9A6A9A6B9A729A839A899A8D9A8E9A949A959A999AA69AA99AAA9AAB9AAC9AAD +9AAE9AAF9AB29AB39AB49AB59AB99ABB9ABD9ABE9ABF9AC39AC49AC69AC79AC8 +9AC99ACA9ACD9ACE9ACF9AD09AD29AD49AD59AD69AD79AD99ADA9ADB9ADC0000 +9ADD9ADE9AE09AE29AE39AE49AE59AE79AE89AE99AEA9AEC9AEE9AF09AF19AF2 +9AF39AF49AF59AF69AF79AF89AFA9AFC9AFD9AFE9AFF9B009B019B029B049B05 +9B0687C68788878587AD8797878387AB87E587AC87B587B387CB87D387BD87D1 +87C087CA87DB87EA87E087EE8816881387FE880A881B88218839883C7F367F42 +7F447F4582107AFA7AFD7B087B037B047B157B0A7B2B7B0F7B477B387B2A7B19 +7B2E7B317B207B257B247B337B3E7B1E7B587B5A7B457B757B4C7B5D7B607B6E +7B7B7B627B727B717B907BA67BA77BB87BAC7B9D7BA87B857BAA7B9C7BA27BAB +7BB47BD17BC17BCC7BDD7BDA7BE57BE67BEA7C0C7BFE7BFC7C0F7C167C0B0000 +F4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +9B079B099B0A9B0B9B0C9B0D9B0E9B109B119B129B149B159B169B179B189B19 +9B1A9B1B9B1C9B1D9B1E9B209B219B229B249B259B269B279B289B299B2A9B2B +9B2C9B2D9B2E9B309B319B339B349B359B369B379B389B399B3A9B3D9B3E9B3F +9B409B469B4A9B4B9B4C9B4E9B509B529B539B559B569B579B589B599B5A0000 +9B5B9B5C9B5D9B5E9B5F9B609B619B629B639B649B659B669B679B689B699B6A +9B6B9B6C9B6D9B6E9B6F9B709B719B729B739B749B759B769B779B789B799B7A +9B7B7C1F7C2A7C267C387C417C4081FE82018202820481EC8844822182228223 +822D822F8228822B8238823B82338234823E82448249824B824F825A825F8268 +887E8885888888D888DF895E7F9D7F9F7FA77FAF7FB07FB27C7C65497C917C9D +7C9C7C9E7CA27CB27CBC7CBD7CC17CC77CCC7CCD7CC87CC57CD77CE8826E66A8 +7FBF7FCE7FD57FE57FE17FE67FE97FEE7FF37CF87D777DA67DAE7E477E9B9EB8 +9EB48D738D848D948D918DB18D678D6D8C478C49914A9150914E914F91640000 +F5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +9B7C9B7D9B7E9B7F9B809B819B829B839B849B859B869B879B889B899B8A9B8B +9B8C9B8D9B8E9B8F9B909B919B929B939B949B959B969B979B989B999B9A9B9B +9B9C9B9D9B9E9B9F9BA09BA19BA29BA39BA49BA59BA69BA79BA89BA99BAA9BAB +9BAC9BAD9BAE9BAF9BB09BB19BB29BB39BB49BB59BB69BB79BB89BB99BBA0000 +9BBB9BBC9BBD9BBE9BBF9BC09BC19BC29BC39BC49BC59BC69BC79BC89BC99BCA +9BCB9BCC9BCD9BCE9BCF9BD09BD19BD29BD39BD49BD59BD69BD79BD89BD99BDA +9BDB9162916191709169916F917D917E917291749179918C91859190918D9191 +91A291A391AA91AD91AE91AF91B591B491BA8C559E7E8DB88DEB8E058E598E69 +8DB58DBF8DBC8DBA8DC48DD68DD78DDA8DDE8DCE8DCF8DDB8DC68DEC8DF78DF8 +8DE38DF98DFB8DE48E098DFD8E148E1D8E1F8E2C8E2E8E238E2F8E3A8E408E39 +8E358E3D8E318E498E418E428E518E528E4A8E708E768E7C8E6F8E748E858E8F +8E948E908E9C8E9E8C788C828C8A8C858C988C94659B89D689DE89DA89DC0000 +F6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +9BDC9BDD9BDE9BDF9BE09BE19BE29BE39BE49BE59BE69BE79BE89BE99BEA9BEB +9BEC9BED9BEE9BEF9BF09BF19BF29BF39BF49BF59BF69BF79BF89BF99BFA9BFB +9BFC9BFD9BFE9BFF9C009C019C029C039C049C059C069C079C089C099C0A9C0B +9C0C9C0D9C0E9C0F9C109C119C129C139C149C159C169C179C189C199C1A0000 +9C1B9C1C9C1D9C1E9C1F9C209C219C229C239C249C259C269C279C289C299C2A +9C2B9C2C9C2D9C2E9C2F9C309C319C329C339C349C359C369C379C389C399C3A +9C3B89E589EB89EF8A3E8B26975396E996F396EF970697019708970F970E972A +972D9730973E9F809F839F859F869F879F889F899F8A9F8C9EFE9F0B9F0D96B9 +96BC96BD96CE96D277BF96E0928E92AE92C8933E936A93CA938F943E946B9C7F +9C829C859C869C879C887A239C8B9C8E9C909C919C929C949C959C9A9C9B9C9E +9C9F9CA09CA19CA29CA39CA59CA69CA79CA89CA99CAB9CAD9CAE9CB09CB19CB2 +9CB39CB49CB59CB69CB79CBA9CBB9CBC9CBD9CC49CC59CC69CC79CCA9CCB0000 +F7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +9C3C9C3D9C3E9C3F9C409C419C429C439C449C459C469C479C489C499C4A9C4B +9C4C9C4D9C4E9C4F9C509C519C529C539C549C559C569C579C589C599C5A9C5B +9C5C9C5D9C5E9C5F9C609C619C629C639C649C659C669C679C689C699C6A9C6B +9C6C9C6D9C6E9C6F9C709C719C729C739C749C759C769C779C789C799C7A0000 +9C7B9C7D9C7E9C809C839C849C899C8A9C8C9C8F9C939C969C979C989C999C9D +9CAA9CAC9CAF9CB99CBE9CBF9CC09CC19CC29CC89CC99CD19CD29CDA9CDB9CE0 +9CE19CCC9CCD9CCE9CCF9CD09CD39CD49CD59CD79CD89CD99CDC9CDD9CDF9CE2 +977C978597919792979497AF97AB97A397B297B49AB19AB09AB79E589AB69ABA +9ABC9AC19AC09AC59AC29ACB9ACC9AD19B459B439B479B499B489B4D9B5198E8 +990D992E995599549ADF9AE19AE69AEF9AEB9AFB9AED9AF99B089B0F9B139B1F +9B239EBD9EBE7E3B9E829E879E889E8B9E9293D69E9D9E9F9EDB9EDC9EDD9EE0 +9EDF9EE29EE99EE79EE59EEA9EEF9F229F2C9F2F9F399F379F3D9F3E9F440000 +F8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +9CE39CE49CE59CE69CE79CE89CE99CEA9CEB9CEC9CED9CEE9CEF9CF09CF19CF2 +9CF39CF49CF59CF69CF79CF89CF99CFA9CFB9CFC9CFD9CFE9CFF9D009D019D02 +9D039D049D059D069D079D089D099D0A9D0B9D0C9D0D9D0E9D0F9D109D119D12 +9D139D149D159D169D179D189D199D1A9D1B9D1C9D1D9D1E9D1F9D209D210000 +9D229D239D249D259D269D279D289D299D2A9D2B9D2C9D2D9D2E9D2F9D309D31 +9D329D339D349D359D369D379D389D399D3A9D3B9D3C9D3D9D3E9D3F9D409D41 +9D42000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +F9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +9D439D449D459D469D479D489D499D4A9D4B9D4C9D4D9D4E9D4F9D509D519D52 +9D539D549D559D569D579D589D599D5A9D5B9D5C9D5D9D5E9D5F9D609D619D62 +9D639D649D659D669D679D689D699D6A9D6B9D6C9D6D9D6E9D6F9D709D719D72 +9D739D749D759D769D779D789D799D7A9D7B9D7C9D7D9D7E9D7F9D809D810000 +9D829D839D849D859D869D879D889D899D8A9D8B9D8C9D8D9D8E9D8F9D909D91 +9D929D939D949D959D969D979D989D999D9A9D9B9D9C9D9D9D9E9D9F9DA09DA1 +9DA2000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +FA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +9DA39DA49DA59DA69DA79DA89DA99DAA9DAB9DAC9DAD9DAE9DAF9DB09DB19DB2 +9DB39DB49DB59DB69DB79DB89DB99DBA9DBB9DBC9DBD9DBE9DBF9DC09DC19DC2 +9DC39DC49DC59DC69DC79DC89DC99DCA9DCB9DCC9DCD9DCE9DCF9DD09DD19DD2 +9DD39DD49DD59DD69DD79DD89DD99DDA9DDB9DDC9DDD9DDE9DDF9DE09DE10000 +9DE29DE39DE49DE59DE69DE79DE89DE99DEA9DEB9DEC9DED9DEE9DEF9DF09DF1 +9DF29DF39DF49DF59DF69DF79DF89DF99DFA9DFB9DFC9DFD9DFE9DFF9E009E01 +9E02000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +FB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +9E039E049E059E069E079E089E099E0A9E0B9E0C9E0D9E0E9E0F9E109E119E12 +9E139E149E159E169E179E189E199E1A9E1B9E1C9E1D9E1E9E249E279E2E9E30 +9E349E3B9E3C9E409E4D9E509E529E539E549E569E599E5D9E5F9E609E619E62 +9E659E6E9E6F9E729E749E759E769E779E789E799E7A9E7B9E7C9E7D9E800000 +9E819E839E849E859E869E899E8A9E8C9E8D9E8E9E8F9E909E919E949E959E96 +9E979E989E999E9A9E9B9E9C9E9E9EA09EA19EA29EA39EA49EA59EA79EA89EA9 +9EAA000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +FC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +9EAB9EAC9EAD9EAE9EAF9EB09EB19EB29EB39EB59EB69EB79EB99EBA9EBC9EBF +9EC09EC19EC29EC39EC59EC69EC79EC89ECA9ECB9ECC9ED09ED29ED39ED59ED6 +9ED79ED99EDA9EDE9EE19EE39EE49EE69EE89EEB9EEC9EED9EEE9EF09EF19EF2 +9EF39EF49EF59EF69EF79EF89EFA9EFD9EFF9F009F019F029F039F049F050000 +9F069F079F089F099F0A9F0C9F0F9F119F129F149F159F169F189F1A9F1B9F1C +9F1D9F1E9F1F9F219F239F249F259F269F279F289F299F2A9F2B9F2D9F2E9F30 +9F31000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +FD +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +9F329F339F349F359F369F389F3A9F3C9F3F9F409F419F429F439F459F469F47 +9F489F499F4A9F4B9F4C9F4D9F4E9F4F9F529F539F549F559F569F579F589F59 +9F5A9F5B9F5C9F5D9F5E9F5F9F609F619F629F639F649F659F669F679F689F69 +9F6A9F6B9F6C9F6D9F6E9F6F9F709F719F729F739F749F759F769F779F780000 +9F799F7A9F7B9F7C9F7D9F7E9F819F829F8D9F8E9F8F9F909F919F929F939F94 +9F959F969F979F989F9C9F9D9F9E9FA19FA29FA39FA49FA5F92CF979F995F9E7 +F9F1000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +FE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +FA0CFA0DFA0EFA0FFA11FA13FA14FA18FA1FFA20FA21FA23FA24FA27FA28FA29 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp949.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp949.enc new file mode 100644 index 00000000..2f3ec39f --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp949.enc @@ -0,0 +1,2128 @@ +# Encoding file: cp949, multi-byte +M +003F 0 125 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +0080000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +81 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000AC02AC03AC05AC06AC0BAC0CAC0DAC0EAC0FAC18AC1EAC1FAC21AC22AC23 +AC25AC26AC27AC28AC29AC2AAC2BAC2EAC32AC33AC3400000000000000000000 +0000AC35AC36AC37AC3AAC3BAC3DAC3EAC3FAC41AC42AC43AC44AC45AC46AC47 +AC48AC49AC4AAC4CAC4EAC4FAC50AC51AC52AC53AC5500000000000000000000 +0000AC56AC57AC59AC5AAC5BAC5DAC5EAC5FAC60AC61AC62AC63AC64AC65AC66 +AC67AC68AC69AC6AAC6BAC6CAC6DAC6EAC6FAC72AC73AC75AC76AC79AC7BAC7C +AC7DAC7EAC7FAC82AC87AC88AC8DAC8EAC8FAC91AC92AC93AC95AC96AC97AC98 +AC99AC9AAC9BAC9EACA2ACA3ACA4ACA5ACA6ACA7ACABACADACAEACB1ACB2ACB3 +ACB4ACB5ACB6ACB7ACBAACBEACBFACC0ACC2ACC3ACC5ACC6ACC7ACC9ACCAACCB +ACCDACCEACCFACD0ACD1ACD2ACD3ACD4ACD6ACD8ACD9ACDAACDBACDCACDDACDE +ACDFACE2ACE3ACE5ACE6ACE9ACEBACEDACEEACF2ACF4ACF7ACF8ACF9ACFAACFB +ACFEACFFAD01AD02AD03AD05AD07AD08AD09AD0AAD0BAD0EAD10AD12AD130000 +82 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000AD14AD15AD16AD17AD19AD1AAD1BAD1DAD1EAD1FAD21AD22AD23AD24AD25 +AD26AD27AD28AD2AAD2BAD2EAD2FAD30AD31AD32AD3300000000000000000000 +0000AD36AD37AD39AD3AAD3BAD3DAD3EAD3FAD40AD41AD42AD43AD46AD48AD4A +AD4BAD4CAD4DAD4EAD4FAD51AD52AD53AD55AD56AD5700000000000000000000 +0000AD59AD5AAD5BAD5CAD5DAD5EAD5FAD60AD62AD64AD65AD66AD67AD68AD69 +AD6AAD6BAD6EAD6FAD71AD72AD77AD78AD79AD7AAD7EAD80AD83AD84AD85AD86 +AD87AD8AAD8BAD8DAD8EAD8FAD91AD92AD93AD94AD95AD96AD97AD98AD99AD9A +AD9BAD9EAD9FADA0ADA1ADA2ADA3ADA5ADA6ADA7ADA8ADA9ADAAADABADACADAD +ADAEADAFADB0ADB1ADB2ADB3ADB4ADB5ADB6ADB8ADB9ADBAADBBADBCADBDADBE +ADBFADC2ADC3ADC5ADC6ADC7ADC9ADCAADCBADCCADCDADCEADCFADD2ADD4ADD5 +ADD6ADD7ADD8ADD9ADDAADDBADDDADDEADDFADE1ADE2ADE3ADE5ADE6ADE7ADE8 +ADE9ADEAADEBADECADEDADEEADEFADF0ADF1ADF2ADF3ADF4ADF5ADF6ADF70000 +83 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000ADFAADFBADFDADFEAE02AE03AE04AE05AE06AE07AE0AAE0CAE0EAE0FAE10 +AE11AE12AE13AE15AE16AE17AE18AE19AE1AAE1BAE1C00000000000000000000 +0000AE1DAE1EAE1FAE20AE21AE22AE23AE24AE25AE26AE27AE28AE29AE2AAE2B +AE2CAE2DAE2EAE2FAE32AE33AE35AE36AE39AE3BAE3C00000000000000000000 +0000AE3DAE3EAE3FAE42AE44AE47AE48AE49AE4BAE4FAE51AE52AE53AE55AE57 +AE58AE59AE5AAE5BAE5EAE62AE63AE64AE66AE67AE6AAE6BAE6DAE6EAE6FAE71 +AE72AE73AE74AE75AE76AE77AE7AAE7EAE7FAE80AE81AE82AE83AE86AE87AE88 +AE89AE8AAE8BAE8DAE8EAE8FAE90AE91AE92AE93AE94AE95AE96AE97AE98AE99 +AE9AAE9BAE9CAE9DAE9EAE9FAEA0AEA1AEA2AEA3AEA4AEA5AEA6AEA7AEA8AEA9 +AEAAAEABAEACAEADAEAEAEAFAEB0AEB1AEB2AEB3AEB4AEB5AEB6AEB7AEB8AEB9 +AEBAAEBBAEBFAEC1AEC2AEC3AEC5AEC6AEC7AEC8AEC9AECAAECBAECEAED2AED3 +AED4AED5AED6AED7AEDAAEDBAEDDAEDEAEDFAEE0AEE1AEE2AEE3AEE4AEE50000 +84 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000AEE6AEE7AEE9AEEAAEECAEEEAEEFAEF0AEF1AEF2AEF3AEF5AEF6AEF7AEF9 +AEFAAEFBAEFDAEFEAEFFAF00AF01AF02AF03AF04AF0500000000000000000000 +0000AF06AF09AF0AAF0BAF0CAF0EAF0FAF11AF12AF13AF14AF15AF16AF17AF18 +AF19AF1AAF1BAF1CAF1DAF1EAF1FAF20AF21AF22AF2300000000000000000000 +0000AF24AF25AF26AF27AF28AF29AF2AAF2BAF2EAF2FAF31AF33AF35AF36AF37 +AF38AF39AF3AAF3BAF3EAF40AF44AF45AF46AF47AF4AAF4BAF4CAF4DAF4EAF4F +AF51AF52AF53AF54AF55AF56AF57AF58AF59AF5AAF5BAF5EAF5FAF60AF61AF62 +AF63AF66AF67AF68AF69AF6AAF6BAF6CAF6DAF6EAF6FAF70AF71AF72AF73AF74 +AF75AF76AF77AF78AF7AAF7BAF7CAF7DAF7EAF7FAF81AF82AF83AF85AF86AF87 +AF89AF8AAF8BAF8CAF8DAF8EAF8FAF92AF93AF94AF96AF97AF98AF99AF9AAF9B +AF9DAF9EAF9FAFA0AFA1AFA2AFA3AFA4AFA5AFA6AFA7AFA8AFA9AFAAAFABAFAC +AFADAFAEAFAFAFB0AFB1AFB2AFB3AFB4AFB5AFB6AFB7AFBAAFBBAFBDAFBE0000 +85 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000AFBFAFC1AFC2AFC3AFC4AFC5AFC6AFCAAFCCAFCFAFD0AFD1AFD2AFD3AFD5 +AFD6AFD7AFD8AFD9AFDAAFDBAFDDAFDEAFDFAFE0AFE100000000000000000000 +0000AFE2AFE3AFE4AFE5AFE6AFE7AFEAAFEBAFECAFEDAFEEAFEFAFF2AFF3AFF5 +AFF6AFF7AFF9AFFAAFFBAFFCAFFDAFFEAFFFB002B00300000000000000000000 +0000B005B006B007B008B009B00AB00BB00DB00EB00FB011B012B013B015B016 +B017B018B019B01AB01BB01EB01FB020B021B022B023B024B025B026B027B029 +B02AB02BB02CB02DB02EB02FB030B031B032B033B034B035B036B037B038B039 +B03AB03BB03CB03DB03EB03FB040B041B042B043B046B047B049B04BB04DB04F +B050B051B052B056B058B05AB05BB05CB05EB05FB060B061B062B063B064B065 +B066B067B068B069B06AB06BB06CB06DB06EB06FB070B071B072B073B074B075 +B076B077B078B079B07AB07BB07EB07FB081B082B083B085B086B087B088B089 +B08AB08BB08EB090B092B093B094B095B096B097B09BB09DB09EB0A3B0A40000 +86 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000B0A5B0A6B0A7B0AAB0B0B0B2B0B6B0B7B0B9B0BAB0BBB0BDB0BEB0BFB0C0 +B0C1B0C2B0C3B0C6B0CAB0CBB0CCB0CDB0CEB0CFB0D200000000000000000000 +0000B0D3B0D5B0D6B0D7B0D9B0DAB0DBB0DCB0DDB0DEB0DFB0E1B0E2B0E3B0E4 +B0E6B0E7B0E8B0E9B0EAB0EBB0ECB0EDB0EEB0EFB0F000000000000000000000 +0000B0F1B0F2B0F3B0F4B0F5B0F6B0F7B0F8B0F9B0FAB0FBB0FCB0FDB0FEB0FF +B100B101B102B103B104B105B106B107B10AB10DB10EB10FB111B114B115B116 +B117B11AB11EB11FB120B121B122B126B127B129B12AB12BB12DB12EB12FB130 +B131B132B133B136B13AB13BB13CB13DB13EB13FB142B143B145B146B147B149 +B14AB14BB14CB14DB14EB14FB152B153B156B157B159B15AB15BB15DB15EB15F +B161B162B163B164B165B166B167B168B169B16AB16BB16CB16DB16EB16FB170 +B171B172B173B174B175B176B177B17AB17BB17DB17EB17FB181B183B184B185 +B186B187B18AB18CB18EB18FB190B191B195B196B197B199B19AB19BB19D0000 +87 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000B19EB19FB1A0B1A1B1A2B1A3B1A4B1A5B1A6B1A7B1A9B1AAB1ABB1ACB1AD +B1AEB1AFB1B0B1B1B1B2B1B3B1B4B1B5B1B6B1B7B1B800000000000000000000 +0000B1B9B1BAB1BBB1BCB1BDB1BEB1BFB1C0B1C1B1C2B1C3B1C4B1C5B1C6B1C7 +B1C8B1C9B1CAB1CBB1CDB1CEB1CFB1D1B1D2B1D3B1D500000000000000000000 +0000B1D6B1D7B1D8B1D9B1DAB1DBB1DEB1E0B1E1B1E2B1E3B1E4B1E5B1E6B1E7 +B1EAB1EBB1EDB1EEB1EFB1F1B1F2B1F3B1F4B1F5B1F6B1F7B1F8B1FAB1FCB1FE +B1FFB200B201B202B203B206B207B209B20AB20DB20EB20FB210B211B212B213 +B216B218B21AB21BB21CB21DB21EB21FB221B222B223B224B225B226B227B228 +B229B22AB22BB22CB22DB22EB22FB230B231B232B233B235B236B237B238B239 +B23AB23BB23DB23EB23FB240B241B242B243B244B245B246B247B248B249B24A +B24BB24CB24DB24EB24FB250B251B252B253B254B255B256B257B259B25AB25B +B25DB25EB25FB261B262B263B264B265B266B267B26AB26BB26CB26DB26E0000 +88 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000B26FB270B271B272B273B276B277B278B279B27AB27BB27DB27EB27FB280 +B281B282B283B286B287B288B28AB28BB28CB28DB28E00000000000000000000 +0000B28FB292B293B295B296B297B29BB29CB29DB29EB29FB2A2B2A4B2A7B2A8 +B2A9B2ABB2ADB2AEB2AFB2B1B2B2B2B3B2B5B2B6B2B700000000000000000000 +0000B2B8B2B9B2BAB2BBB2BCB2BDB2BEB2BFB2C0B2C1B2C2B2C3B2C4B2C5B2C6 +B2C7B2CAB2CBB2CDB2CEB2CFB2D1B2D3B2D4B2D5B2D6B2D7B2DAB2DCB2DEB2DF +B2E0B2E1B2E3B2E7B2E9B2EAB2F0B2F1B2F2B2F6B2FCB2FDB2FEB302B303B305 +B306B307B309B30AB30BB30CB30DB30EB30FB312B316B317B318B319B31AB31B +B31DB31EB31FB320B321B322B323B324B325B326B327B328B329B32AB32BB32C +B32DB32EB32FB330B331B332B333B334B335B336B337B338B339B33AB33BB33C +B33DB33EB33FB340B341B342B343B344B345B346B347B348B349B34AB34BB34C +B34DB34EB34FB350B351B352B353B357B359B35AB35DB360B361B362B3630000 +89 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000B366B368B36AB36CB36DB36FB372B373B375B376B377B379B37AB37BB37C +B37DB37EB37FB382B386B387B388B389B38AB38BB38D00000000000000000000 +0000B38EB38FB391B392B393B395B396B397B398B399B39AB39BB39CB39DB39E +B39FB3A2B3A3B3A4B3A5B3A6B3A7B3A9B3AAB3ABB3AD00000000000000000000 +0000B3AEB3AFB3B0B3B1B3B2B3B3B3B4B3B5B3B6B3B7B3B8B3B9B3BAB3BBB3BC +B3BDB3BEB3BFB3C0B3C1B3C2B3C3B3C6B3C7B3C9B3CAB3CDB3CFB3D1B3D2B3D3 +B3D6B3D8B3DAB3DCB3DEB3DFB3E1B3E2B3E3B3E5B3E6B3E7B3E9B3EAB3EBB3EC +B3EDB3EEB3EFB3F0B3F1B3F2B3F3B3F4B3F5B3F6B3F7B3F8B3F9B3FAB3FBB3FD +B3FEB3FFB400B401B402B403B404B405B406B407B408B409B40AB40BB40CB40D +B40EB40FB411B412B413B414B415B416B417B419B41AB41BB41DB41EB41FB421 +B422B423B424B425B426B427B42AB42CB42DB42EB42FB430B431B432B433B435 +B436B437B438B439B43AB43BB43CB43DB43EB43FB440B441B442B443B4440000 +8A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000B445B446B447B448B449B44AB44BB44CB44DB44EB44FB452B453B455B456 +B457B459B45AB45BB45CB45DB45EB45FB462B464B46600000000000000000000 +0000B467B468B469B46AB46BB46DB46EB46FB470B471B472B473B474B475B476 +B477B478B479B47AB47BB47CB47DB47EB47FB481B48200000000000000000000 +0000B483B484B485B486B487B489B48AB48BB48CB48DB48EB48FB490B491B492 +B493B494B495B496B497B498B499B49AB49BB49CB49EB49FB4A0B4A1B4A2B4A3 +B4A5B4A6B4A7B4A9B4AAB4ABB4ADB4AEB4AFB4B0B4B1B4B2B4B3B4B4B4B6B4B8 +B4BAB4BBB4BCB4BDB4BEB4BFB4C1B4C2B4C3B4C5B4C6B4C7B4C9B4CAB4CBB4CC +B4CDB4CEB4CFB4D1B4D2B4D3B4D4B4D6B4D7B4D8B4D9B4DAB4DBB4DEB4DFB4E1 +B4E2B4E5B4E7B4E8B4E9B4EAB4EBB4EEB4F0B4F2B4F3B4F4B4F5B4F6B4F7B4F9 +B4FAB4FBB4FCB4FDB4FEB4FFB500B501B502B503B504B505B506B507B508B509 +B50AB50BB50CB50DB50EB50FB510B511B512B513B516B517B519B51AB51D0000 +8B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000B51EB51FB520B521B522B523B526B52BB52CB52DB52EB52FB532B533B535 +B536B537B539B53AB53BB53CB53DB53EB53FB542B54600000000000000000000 +0000B547B548B549B54AB54EB54FB551B552B553B555B556B557B558B559B55A +B55BB55EB562B563B564B565B566B567B568B569B56A00000000000000000000 +0000B56BB56CB56DB56EB56FB570B571B572B573B574B575B576B577B578B579 +B57AB57BB57CB57DB57EB57FB580B581B582B583B584B585B586B587B588B589 +B58AB58BB58CB58DB58EB58FB590B591B592B593B594B595B596B597B598B599 +B59AB59BB59CB59DB59EB59FB5A2B5A3B5A5B5A6B5A7B5A9B5ACB5ADB5AEB5AF +B5B2B5B6B5B7B5B8B5B9B5BAB5BEB5BFB5C1B5C2B5C3B5C5B5C6B5C7B5C8B5C9 +B5CAB5CBB5CEB5D2B5D3B5D4B5D5B5D6B5D7B5D9B5DAB5DBB5DCB5DDB5DEB5DF +B5E0B5E1B5E2B5E3B5E4B5E5B5E6B5E7B5E8B5E9B5EAB5EBB5EDB5EEB5EFB5F0 +B5F1B5F2B5F3B5F4B5F5B5F6B5F7B5F8B5F9B5FAB5FBB5FCB5FDB5FEB5FF0000 +8C +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000B600B601B602B603B604B605B606B607B608B609B60AB60BB60CB60DB60E +B60FB612B613B615B616B617B619B61AB61BB61CB61D00000000000000000000 +0000B61EB61FB620B621B622B623B624B626B627B628B629B62AB62BB62DB62E +B62FB630B631B632B633B635B636B637B638B639B63A00000000000000000000 +0000B63BB63CB63DB63EB63FB640B641B642B643B644B645B646B647B649B64A +B64BB64CB64DB64EB64FB650B651B652B653B654B655B656B657B658B659B65A +B65BB65CB65DB65EB65FB660B661B662B663B665B666B667B669B66AB66BB66C +B66DB66EB66FB670B671B672B673B674B675B676B677B678B679B67AB67BB67C +B67DB67EB67FB680B681B682B683B684B685B686B687B688B689B68AB68BB68C +B68DB68EB68FB690B691B692B693B694B695B696B697B698B699B69AB69BB69E +B69FB6A1B6A2B6A3B6A5B6A6B6A7B6A8B6A9B6AAB6ADB6AEB6AFB6B0B6B2B6B3 +B6B4B6B5B6B6B6B7B6B8B6B9B6BAB6BBB6BCB6BDB6BEB6BFB6C0B6C1B6C20000 +8D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000B6C3B6C4B6C5B6C6B6C7B6C8B6C9B6CAB6CBB6CCB6CDB6CEB6CFB6D0B6D1 +B6D2B6D3B6D5B6D6B6D7B6D8B6D9B6DAB6DBB6DCB6DD00000000000000000000 +0000B6DEB6DFB6E0B6E1B6E2B6E3B6E4B6E5B6E6B6E7B6E8B6E9B6EAB6EBB6EC +B6EDB6EEB6EFB6F1B6F2B6F3B6F5B6F6B6F7B6F9B6FA00000000000000000000 +0000B6FBB6FCB6FDB6FEB6FFB702B703B704B706B707B708B709B70AB70BB70C +B70DB70EB70FB710B711B712B713B714B715B716B717B718B719B71AB71BB71C +B71DB71EB71FB720B721B722B723B724B725B726B727B72AB72BB72DB72EB731 +B732B733B734B735B736B737B73AB73CB73DB73EB73FB740B741B742B743B745 +B746B747B749B74AB74BB74DB74EB74FB750B751B752B753B756B757B758B759 +B75AB75BB75CB75DB75EB75FB761B762B763B765B766B767B769B76AB76BB76C +B76DB76EB76FB772B774B776B777B778B779B77AB77BB77EB77FB781B782B783 +B785B786B787B788B789B78AB78BB78EB793B794B795B79AB79BB79DB79E0000 +8E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000B79FB7A1B7A2B7A3B7A4B7A5B7A6B7A7B7AAB7AEB7AFB7B0B7B1B7B2B7B3 +B7B6B7B7B7B9B7BAB7BBB7BCB7BDB7BEB7BFB7C0B7C100000000000000000000 +0000B7C2B7C3B7C4B7C5B7C6B7C8B7CAB7CBB7CCB7CDB7CEB7CFB7D0B7D1B7D2 +B7D3B7D4B7D5B7D6B7D7B7D8B7D9B7DAB7DBB7DCB7DD00000000000000000000 +0000B7DEB7DFB7E0B7E1B7E2B7E3B7E4B7E5B7E6B7E7B7E8B7E9B7EAB7EBB7EE +B7EFB7F1B7F2B7F3B7F5B7F6B7F7B7F8B7F9B7FAB7FBB7FEB802B803B804B805 +B806B80AB80BB80DB80EB80FB811B812B813B814B815B816B817B81AB81CB81E +B81FB820B821B822B823B826B827B829B82AB82BB82DB82EB82FB830B831B832 +B833B836B83AB83BB83CB83DB83EB83FB841B842B843B845B846B847B848B849 +B84AB84BB84CB84DB84EB84FB850B852B854B855B856B857B858B859B85AB85B +B85EB85FB861B862B863B865B866B867B868B869B86AB86BB86EB870B872B873 +B874B875B876B877B879B87AB87BB87DB87EB87FB880B881B882B883B8840000 +8F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000B885B886B887B888B889B88AB88BB88CB88EB88FB890B891B892B893B894 +B895B896B897B898B899B89AB89BB89CB89DB89EB89F00000000000000000000 +0000B8A0B8A1B8A2B8A3B8A4B8A5B8A6B8A7B8A9B8AAB8ABB8ACB8ADB8AEB8AF +B8B1B8B2B8B3B8B5B8B6B8B7B8B9B8BAB8BBB8BCB8BD00000000000000000000 +0000B8BEB8BFB8C2B8C4B8C6B8C7B8C8B8C9B8CAB8CBB8CDB8CEB8CFB8D1B8D2 +B8D3B8D5B8D6B8D7B8D8B8D9B8DAB8DBB8DCB8DEB8E0B8E2B8E3B8E4B8E5B8E6 +B8E7B8EAB8EBB8EDB8EEB8EFB8F1B8F2B8F3B8F4B8F5B8F6B8F7B8FAB8FCB8FE +B8FFB900B901B902B903B905B906B907B908B909B90AB90BB90CB90DB90EB90F +B910B911B912B913B914B915B916B917B919B91AB91BB91CB91DB91EB91FB921 +B922B923B924B925B926B927B928B929B92AB92BB92CB92DB92EB92FB930B931 +B932B933B934B935B936B937B938B939B93AB93BB93EB93FB941B942B943B945 +B946B947B948B949B94AB94BB94DB94EB950B952B953B954B955B956B9570000 +90 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000B95AB95BB95DB95EB95FB961B962B963B964B965B966B967B96AB96CB96E +B96FB970B971B972B973B976B977B979B97AB97BB97D00000000000000000000 +0000B97EB97FB980B981B982B983B986B988B98BB98CB98FB990B991B992B993 +B994B995B996B997B998B999B99AB99BB99CB99DB99E00000000000000000000 +0000B99FB9A0B9A1B9A2B9A3B9A4B9A5B9A6B9A7B9A8B9A9B9AAB9ABB9AEB9AF +B9B1B9B2B9B3B9B5B9B6B9B7B9B8B9B9B9BAB9BBB9BEB9C0B9C2B9C3B9C4B9C5 +B9C6B9C7B9CAB9CBB9CDB9D3B9D4B9D5B9D6B9D7B9DAB9DCB9DFB9E0B9E2B9E6 +B9E7B9E9B9EAB9EBB9EDB9EEB9EFB9F0B9F1B9F2B9F3B9F6B9FBB9FCB9FDB9FE +B9FFBA02BA03BA04BA05BA06BA07BA09BA0ABA0BBA0CBA0DBA0EBA0FBA10BA11 +BA12BA13BA14BA16BA17BA18BA19BA1ABA1BBA1CBA1DBA1EBA1FBA20BA21BA22 +BA23BA24BA25BA26BA27BA28BA29BA2ABA2BBA2CBA2DBA2EBA2FBA30BA31BA32 +BA33BA34BA35BA36BA37BA3ABA3BBA3DBA3EBA3FBA41BA43BA44BA45BA460000 +91 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000BA47BA4ABA4CBA4FBA50BA51BA52BA56BA57BA59BA5ABA5BBA5DBA5EBA5F +BA60BA61BA62BA63BA66BA6ABA6BBA6CBA6DBA6EBA6F00000000000000000000 +0000BA72BA73BA75BA76BA77BA79BA7ABA7BBA7CBA7DBA7EBA7FBA80BA81BA82 +BA86BA88BA89BA8ABA8BBA8DBA8EBA8FBA90BA91BA9200000000000000000000 +0000BA93BA94BA95BA96BA97BA98BA99BA9ABA9BBA9CBA9DBA9EBA9FBAA0BAA1 +BAA2BAA3BAA4BAA5BAA6BAA7BAAABAADBAAEBAAFBAB1BAB3BAB4BAB5BAB6BAB7 +BABABABCBABEBABFBAC0BAC1BAC2BAC3BAC5BAC6BAC7BAC9BACABACBBACCBACD +BACEBACFBAD0BAD1BAD2BAD3BAD4BAD5BAD6BAD7BADABADBBADCBADDBADEBADF +BAE0BAE1BAE2BAE3BAE4BAE5BAE6BAE7BAE8BAE9BAEABAEBBAECBAEDBAEEBAEF +BAF0BAF1BAF2BAF3BAF4BAF5BAF6BAF7BAF8BAF9BAFABAFBBAFDBAFEBAFFBB01 +BB02BB03BB05BB06BB07BB08BB09BB0ABB0BBB0CBB0EBB10BB12BB13BB14BB15 +BB16BB17BB19BB1ABB1BBB1DBB1EBB1FBB21BB22BB23BB24BB25BB26BB270000 +92 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000BB28BB2ABB2CBB2DBB2EBB2FBB30BB31BB32BB33BB37BB39BB3ABB3FBB40 +BB41BB42BB43BB46BB48BB4ABB4BBB4CBB4EBB51BB5200000000000000000000 +0000BB53BB55BB56BB57BB59BB5ABB5BBB5CBB5DBB5EBB5FBB60BB62BB64BB65 +BB66BB67BB68BB69BB6ABB6BBB6DBB6EBB6FBB70BB7100000000000000000000 +0000BB72BB73BB74BB75BB76BB77BB78BB79BB7ABB7BBB7CBB7DBB7EBB7FBB80 +BB81BB82BB83BB84BB85BB86BB87BB89BB8ABB8BBB8DBB8EBB8FBB91BB92BB93 +BB94BB95BB96BB97BB98BB99BB9ABB9BBB9CBB9DBB9EBB9FBBA0BBA1BBA2BBA3 +BBA5BBA6BBA7BBA9BBAABBABBBADBBAEBBAFBBB0BBB1BBB2BBB3BBB5BBB6BBB8 +BBB9BBBABBBBBBBCBBBDBBBEBBBFBBC1BBC2BBC3BBC5BBC6BBC7BBC9BBCABBCB +BBCCBBCDBBCEBBCFBBD1BBD2BBD4BBD5BBD6BBD7BBD8BBD9BBDABBDBBBDCBBDD +BBDEBBDFBBE0BBE1BBE2BBE3BBE4BBE5BBE6BBE7BBE8BBE9BBEABBEBBBECBBED +BBEEBBEFBBF0BBF1BBF2BBF3BBF4BBF5BBF6BBF7BBFABBFBBBFDBBFEBC010000 +93 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000BC03BC04BC05BC06BC07BC0ABC0EBC10BC12BC13BC19BC1ABC20BC21BC22 +BC23BC26BC28BC2ABC2BBC2CBC2EBC2FBC32BC33BC3500000000000000000000 +0000BC36BC37BC39BC3ABC3BBC3CBC3DBC3EBC3FBC42BC46BC47BC48BC4ABC4B +BC4EBC4FBC51BC52BC53BC54BC55BC56BC57BC58BC5900000000000000000000 +0000BC5ABC5BBC5CBC5EBC5FBC60BC61BC62BC63BC64BC65BC66BC67BC68BC69 +BC6ABC6BBC6CBC6DBC6EBC6FBC70BC71BC72BC73BC74BC75BC76BC77BC78BC79 +BC7ABC7BBC7CBC7DBC7EBC7FBC80BC81BC82BC83BC86BC87BC89BC8ABC8DBC8F +BC90BC91BC92BC93BC96BC98BC9BBC9CBC9DBC9EBC9FBCA2BCA3BCA5BCA6BCA9 +BCAABCABBCACBCADBCAEBCAFBCB2BCB6BCB7BCB8BCB9BCBABCBBBCBEBCBFBCC1 +BCC2BCC3BCC5BCC6BCC7BCC8BCC9BCCABCCBBCCCBCCEBCD2BCD3BCD4BCD6BCD7 +BCD9BCDABCDBBCDDBCDEBCDFBCE0BCE1BCE2BCE3BCE4BCE5BCE6BCE7BCE8BCE9 +BCEABCEBBCECBCEDBCEEBCEFBCF0BCF1BCF2BCF3BCF7BCF9BCFABCFBBCFD0000 +94 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000BCFEBCFFBD00BD01BD02BD03BD06BD08BD0ABD0BBD0CBD0DBD0EBD0FBD11 +BD12BD13BD15BD16BD17BD18BD19BD1ABD1BBD1CBD1D00000000000000000000 +0000BD1EBD1FBD20BD21BD22BD23BD25BD26BD27BD28BD29BD2ABD2BBD2DBD2E +BD2FBD30BD31BD32BD33BD34BD35BD36BD37BD38BD3900000000000000000000 +0000BD3ABD3BBD3CBD3DBD3EBD3FBD41BD42BD43BD44BD45BD46BD47BD4ABD4B +BD4DBD4EBD4FBD51BD52BD53BD54BD55BD56BD57BD5ABD5BBD5CBD5DBD5EBD5F +BD60BD61BD62BD63BD65BD66BD67BD69BD6ABD6BBD6CBD6DBD6EBD6FBD70BD71 +BD72BD73BD74BD75BD76BD77BD78BD79BD7ABD7BBD7CBD7DBD7EBD7FBD82BD83 +BD85BD86BD8BBD8CBD8DBD8EBD8FBD92BD94BD96BD97BD98BD9BBD9DBD9EBD9F +BDA0BDA1BDA2BDA3BDA5BDA6BDA7BDA8BDA9BDAABDABBDACBDADBDAEBDAFBDB1 +BDB2BDB3BDB4BDB5BDB6BDB7BDB9BDBABDBBBDBCBDBDBDBEBDBFBDC0BDC1BDC2 +BDC3BDC4BDC5BDC6BDC7BDC8BDC9BDCABDCBBDCCBDCDBDCEBDCFBDD0BDD10000 +95 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000BDD2BDD3BDD6BDD7BDD9BDDABDDBBDDDBDDEBDDFBDE0BDE1BDE2BDE3BDE4 +BDE5BDE6BDE7BDE8BDEABDEBBDECBDEDBDEEBDEFBDF100000000000000000000 +0000BDF2BDF3BDF5BDF6BDF7BDF9BDFABDFBBDFCBDFDBDFEBDFFBE01BE02BE04 +BE06BE07BE08BE09BE0ABE0BBE0EBE0FBE11BE12BE1300000000000000000000 +0000BE15BE16BE17BE18BE19BE1ABE1BBE1EBE20BE21BE22BE23BE24BE25BE26 +BE27BE28BE29BE2ABE2BBE2CBE2DBE2EBE2FBE30BE31BE32BE33BE34BE35BE36 +BE37BE38BE39BE3ABE3BBE3CBE3DBE3EBE3FBE40BE41BE42BE43BE46BE47BE49 +BE4ABE4BBE4DBE4FBE50BE51BE52BE53BE56BE58BE5CBE5DBE5EBE5FBE62BE63 +BE65BE66BE67BE69BE6BBE6CBE6DBE6EBE6FBE72BE76BE77BE78BE79BE7ABE7E +BE7FBE81BE82BE83BE85BE86BE87BE88BE89BE8ABE8BBE8EBE92BE93BE94BE95 +BE96BE97BE9ABE9BBE9CBE9DBE9EBE9FBEA0BEA1BEA2BEA3BEA4BEA5BEA6BEA7 +BEA9BEAABEABBEACBEADBEAEBEAFBEB0BEB1BEB2BEB3BEB4BEB5BEB6BEB70000 +96 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000BEB8BEB9BEBABEBBBEBCBEBDBEBEBEBFBEC0BEC1BEC2BEC3BEC4BEC5BEC6 +BEC7BEC8BEC9BECABECBBECCBECDBECEBECFBED2BED300000000000000000000 +0000BED5BED6BED9BEDABEDBBEDCBEDDBEDEBEDFBEE1BEE2BEE6BEE7BEE8BEE9 +BEEABEEBBEEDBEEEBEEFBEF0BEF1BEF2BEF3BEF4BEF500000000000000000000 +0000BEF6BEF7BEF8BEF9BEFABEFBBEFCBEFDBEFEBEFFBF00BF02BF03BF04BF05 +BF06BF07BF0ABF0BBF0CBF0DBF0EBF0FBF10BF11BF12BF13BF14BF15BF16BF17 +BF1ABF1EBF1FBF20BF21BF22BF23BF24BF25BF26BF27BF28BF29BF2ABF2BBF2C +BF2DBF2EBF2FBF30BF31BF32BF33BF34BF35BF36BF37BF38BF39BF3ABF3BBF3C +BF3DBF3EBF3FBF42BF43BF45BF46BF47BF49BF4ABF4BBF4CBF4DBF4EBF4FBF52 +BF53BF54BF56BF57BF58BF59BF5ABF5BBF5CBF5DBF5EBF5FBF60BF61BF62BF63 +BF64BF65BF66BF67BF68BF69BF6ABF6BBF6CBF6DBF6EBF6FBF70BF71BF72BF73 +BF74BF75BF76BF77BF78BF79BF7ABF7BBF7CBF7DBF7EBF7FBF80BF81BF820000 +97 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000BF83BF84BF85BF86BF87BF88BF89BF8ABF8BBF8CBF8DBF8EBF8FBF90BF91 +BF92BF93BF95BF96BF97BF98BF99BF9ABF9BBF9CBF9D00000000000000000000 +0000BF9EBF9FBFA0BFA1BFA2BFA3BFA4BFA5BFA6BFA7BFA8BFA9BFAABFABBFAC +BFADBFAEBFAFBFB1BFB2BFB3BFB4BFB5BFB6BFB7BFB800000000000000000000 +0000BFB9BFBABFBBBFBCBFBDBFBEBFBFBFC0BFC1BFC2BFC3BFC4BFC6BFC7BFC8 +BFC9BFCABFCBBFCEBFCFBFD1BFD2BFD3BFD5BFD6BFD7BFD8BFD9BFDABFDBBFDD +BFDEBFE0BFE2BFE3BFE4BFE5BFE6BFE7BFE8BFE9BFEABFEBBFECBFEDBFEEBFEF +BFF0BFF1BFF2BFF3BFF4BFF5BFF6BFF7BFF8BFF9BFFABFFBBFFCBFFDBFFEBFFF +C000C001C002C003C004C005C006C007C008C009C00AC00BC00CC00DC00EC00F +C010C011C012C013C014C015C016C017C018C019C01AC01BC01CC01DC01EC01F +C020C021C022C023C024C025C026C027C028C029C02AC02BC02CC02DC02EC02F +C030C031C032C033C034C035C036C037C038C039C03AC03BC03DC03EC03F0000 +98 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000C040C041C042C043C044C045C046C047C048C049C04AC04BC04CC04DC04E +C04FC050C052C053C054C055C056C057C059C05AC05B00000000000000000000 +0000C05DC05EC05FC061C062C063C064C065C066C067C06AC06BC06CC06DC06E +C06FC070C071C072C073C074C075C076C077C078C07900000000000000000000 +0000C07AC07BC07CC07DC07EC07FC080C081C082C083C084C085C086C087C088 +C089C08AC08BC08CC08DC08EC08FC092C093C095C096C097C099C09AC09BC09C +C09DC09EC09FC0A2C0A4C0A6C0A7C0A8C0A9C0AAC0ABC0AEC0B1C0B2C0B7C0B8 +C0B9C0BAC0BBC0BEC0C2C0C3C0C4C0C6C0C7C0CAC0CBC0CDC0CEC0CFC0D1C0D2 +C0D3C0D4C0D5C0D6C0D7C0DAC0DEC0DFC0E0C0E1C0E2C0E3C0E6C0E7C0E9C0EA +C0EBC0EDC0EEC0EFC0F0C0F1C0F2C0F3C0F6C0F8C0FAC0FBC0FCC0FDC0FEC0FF +C101C102C103C105C106C107C109C10AC10BC10CC10DC10EC10FC111C112C113 +C114C116C117C118C119C11AC11BC121C122C125C128C129C12AC12BC12E0000 +99 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000C132C133C134C135C137C13AC13BC13DC13EC13FC141C142C143C144C145 +C146C147C14AC14EC14FC150C151C152C153C156C15700000000000000000000 +0000C159C15AC15BC15DC15EC15FC160C161C162C163C166C16AC16BC16CC16D +C16EC16FC171C172C173C175C176C177C179C17AC17B00000000000000000000 +0000C17CC17DC17EC17FC180C181C182C183C184C186C187C188C189C18AC18B +C18FC191C192C193C195C197C198C199C19AC19BC19EC1A0C1A2C1A3C1A4C1A6 +C1A7C1AAC1ABC1ADC1AEC1AFC1B1C1B2C1B3C1B4C1B5C1B6C1B7C1B8C1B9C1BA +C1BBC1BCC1BEC1BFC1C0C1C1C1C2C1C3C1C5C1C6C1C7C1C9C1CAC1CBC1CDC1CE +C1CFC1D0C1D1C1D2C1D3C1D5C1D6C1D9C1DAC1DBC1DCC1DDC1DEC1DFC1E1C1E2 +C1E3C1E5C1E6C1E7C1E9C1EAC1EBC1ECC1EDC1EEC1EFC1F2C1F4C1F5C1F6C1F7 +C1F8C1F9C1FAC1FBC1FEC1FFC201C202C203C205C206C207C208C209C20AC20B +C20EC210C212C213C214C215C216C217C21AC21BC21DC21EC221C222C2230000 +9A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000C224C225C226C227C22AC22CC22EC230C233C235C236C237C238C239C23A +C23BC23CC23DC23EC23FC240C241C242C243C244C24500000000000000000000 +0000C246C247C249C24AC24BC24CC24DC24EC24FC252C253C255C256C257C259 +C25AC25BC25CC25DC25EC25FC261C262C263C264C26600000000000000000000 +0000C267C268C269C26AC26BC26EC26FC271C272C273C275C276C277C278C279 +C27AC27BC27EC280C282C283C284C285C286C287C28AC28BC28CC28DC28EC28F +C291C292C293C294C295C296C297C299C29AC29CC29EC29FC2A0C2A1C2A2C2A3 +C2A6C2A7C2A9C2AAC2ABC2AEC2AFC2B0C2B1C2B2C2B3C2B6C2B8C2BAC2BBC2BC +C2BDC2BEC2BFC2C0C2C1C2C2C2C3C2C4C2C5C2C6C2C7C2C8C2C9C2CAC2CBC2CC +C2CDC2CEC2CFC2D0C2D1C2D2C2D3C2D4C2D5C2D6C2D7C2D8C2D9C2DAC2DBC2DE +C2DFC2E1C2E2C2E5C2E6C2E7C2E8C2E9C2EAC2EEC2F0C2F2C2F3C2F4C2F5C2F7 +C2FAC2FDC2FEC2FFC301C302C303C304C305C306C307C30AC30BC30EC30F0000 +9B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000C310C311C312C316C317C319C31AC31BC31DC31EC31FC320C321C322C323 +C326C327C32AC32BC32CC32DC32EC32FC330C331C33200000000000000000000 +0000C333C334C335C336C337C338C339C33AC33BC33CC33DC33EC33FC340C341 +C342C343C344C346C347C348C349C34AC34BC34CC34D00000000000000000000 +0000C34EC34FC350C351C352C353C354C355C356C357C358C359C35AC35BC35C +C35DC35EC35FC360C361C362C363C364C365C366C367C36AC36BC36DC36EC36F +C371C373C374C375C376C377C37AC37BC37EC37FC380C381C382C383C385C386 +C387C389C38AC38BC38DC38EC38FC390C391C392C393C394C395C396C397C398 +C399C39AC39BC39CC39DC39EC39FC3A0C3A1C3A2C3A3C3A4C3A5C3A6C3A7C3A8 +C3A9C3AAC3ABC3ACC3ADC3AEC3AFC3B0C3B1C3B2C3B3C3B4C3B5C3B6C3B7C3B8 +C3B9C3BAC3BBC3BCC3BDC3BEC3BFC3C1C3C2C3C3C3C4C3C5C3C6C3C7C3C8C3C9 +C3CAC3CBC3CCC3CDC3CEC3CFC3D0C3D1C3D2C3D3C3D4C3D5C3D6C3D7C3DA0000 +9C +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000C3DBC3DDC3DEC3E1C3E3C3E4C3E5C3E6C3E7C3EAC3EBC3ECC3EEC3EFC3F0 +C3F1C3F2C3F3C3F6C3F7C3F9C3FAC3FBC3FCC3FDC3FE00000000000000000000 +0000C3FFC400C401C402C403C404C405C406C407C409C40AC40BC40CC40DC40E +C40FC411C412C413C414C415C416C417C418C419C41A00000000000000000000 +0000C41BC41CC41DC41EC41FC420C421C422C423C425C426C427C428C429C42A +C42BC42DC42EC42FC431C432C433C435C436C437C438C439C43AC43BC43EC43F +C440C441C442C443C444C445C446C447C449C44AC44BC44CC44DC44EC44FC450 +C451C452C453C454C455C456C457C458C459C45AC45BC45CC45DC45EC45FC460 +C461C462C463C466C467C469C46AC46BC46DC46EC46FC470C471C472C473C476 +C477C478C47AC47BC47CC47DC47EC47FC481C482C483C484C485C486C487C488 +C489C48AC48BC48CC48DC48EC48FC490C491C492C493C495C496C497C498C499 +C49AC49BC49DC49EC49FC4A0C4A1C4A2C4A3C4A4C4A5C4A6C4A7C4A8C4A90000 +9D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000C4AAC4ABC4ACC4ADC4AEC4AFC4B0C4B1C4B2C4B3C4B4C4B5C4B6C4B7C4B9 +C4BAC4BBC4BDC4BEC4BFC4C0C4C1C4C2C4C3C4C4C4C500000000000000000000 +0000C4C6C4C7C4C8C4C9C4CAC4CBC4CCC4CDC4CEC4CFC4D0C4D1C4D2C4D3C4D4 +C4D5C4D6C4D7C4D8C4D9C4DAC4DBC4DCC4DDC4DEC4DF00000000000000000000 +0000C4E0C4E1C4E2C4E3C4E4C4E5C4E6C4E7C4E8C4EAC4EBC4ECC4EDC4EEC4EF +C4F2C4F3C4F5C4F6C4F7C4F9C4FBC4FCC4FDC4FEC502C503C504C505C506C507 +C508C509C50AC50BC50DC50EC50FC511C512C513C515C516C517C518C519C51A +C51BC51DC51EC51FC520C521C522C523C524C525C526C527C52AC52BC52DC52E +C52FC531C532C533C534C535C536C537C53AC53CC53EC53FC540C541C542C543 +C546C547C54BC54FC550C551C552C556C55AC55BC55CC55FC562C563C565C566 +C567C569C56AC56BC56CC56DC56EC56FC572C576C577C578C579C57AC57BC57E +C57FC581C582C583C585C586C588C589C58AC58BC58EC590C592C593C5940000 +9E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000C596C599C59AC59BC59DC59EC59FC5A1C5A2C5A3C5A4C5A5C5A6C5A7C5A8 +C5AAC5ABC5ACC5ADC5AEC5AFC5B0C5B1C5B2C5B3C5B600000000000000000000 +0000C5B7C5BAC5BFC5C0C5C1C5C2C5C3C5CBC5CDC5CFC5D2C5D3C5D5C5D6C5D7 +C5D9C5DAC5DBC5DCC5DDC5DEC5DFC5E2C5E4C5E6C5E700000000000000000000 +0000C5E8C5E9C5EAC5EBC5EFC5F1C5F2C5F3C5F5C5F8C5F9C5FAC5FBC602C603 +C604C609C60AC60BC60DC60EC60FC611C612C613C614C615C616C617C61AC61D +C61EC61FC620C621C622C623C626C627C629C62AC62BC62FC631C632C636C638 +C63AC63CC63DC63EC63FC642C643C645C646C647C649C64AC64BC64CC64DC64E +C64FC652C656C657C658C659C65AC65BC65EC65FC661C662C663C664C665C666 +C667C668C669C66AC66BC66DC66EC670C672C673C674C675C676C677C67AC67B +C67DC67EC67FC681C682C683C684C685C686C687C68AC68CC68EC68FC690C691 +C692C693C696C697C699C69AC69BC69DC69EC69FC6A0C6A1C6A2C6A3C6A60000 +9F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000C6A8C6AAC6ABC6ACC6ADC6AEC6AFC6B2C6B3C6B5C6B6C6B7C6BBC6BCC6BD +C6BEC6BFC6C2C6C4C6C6C6C7C6C8C6C9C6CAC6CBC6CE00000000000000000000 +0000C6CFC6D1C6D2C6D3C6D5C6D6C6D7C6D8C6D9C6DAC6DBC6DEC6DFC6E2C6E3 +C6E4C6E5C6E6C6E7C6EAC6EBC6EDC6EEC6EFC6F1C6F200000000000000000000 +0000C6F3C6F4C6F5C6F6C6F7C6FAC6FBC6FCC6FEC6FFC700C701C702C703C706 +C707C709C70AC70BC70DC70EC70FC710C711C712C713C716C718C71AC71BC71C +C71DC71EC71FC722C723C725C726C727C729C72AC72BC72CC72DC72EC72FC732 +C734C736C738C739C73AC73BC73EC73FC741C742C743C745C746C747C748C749 +C74BC74EC750C759C75AC75BC75DC75EC75FC761C762C763C764C765C766C767 +C769C76AC76CC76DC76EC76FC770C771C772C773C776C777C779C77AC77BC77F +C780C781C782C786C78BC78CC78DC78FC792C793C795C799C79BC79CC79DC79E +C79FC7A2C7A7C7A8C7A9C7AAC7ABC7AEC7AFC7B1C7B2C7B3C7B5C7B6C7B70000 +A0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000C7B8C7B9C7BAC7BBC7BEC7C2C7C3C7C4C7C5C7C6C7C7C7CAC7CBC7CDC7CF +C7D1C7D2C7D3C7D4C7D5C7D6C7D7C7D9C7DAC7DBC7DC00000000000000000000 +0000C7DEC7DFC7E0C7E1C7E2C7E3C7E5C7E6C7E7C7E9C7EAC7EBC7EDC7EEC7EF +C7F0C7F1C7F2C7F3C7F4C7F5C7F6C7F7C7F8C7F9C7FA00000000000000000000 +0000C7FBC7FCC7FDC7FEC7FFC802C803C805C806C807C809C80BC80CC80DC80E +C80FC812C814C817C818C819C81AC81BC81EC81FC821C822C823C825C826C827 +C828C829C82AC82BC82EC830C832C833C834C835C836C837C839C83AC83BC83D +C83EC83FC841C842C843C844C845C846C847C84AC84BC84EC84FC850C851C852 +C853C855C856C857C858C859C85AC85BC85CC85DC85EC85FC860C861C862C863 +C864C865C866C867C868C869C86AC86BC86CC86DC86EC86FC872C873C875C876 +C877C879C87BC87CC87DC87EC87FC882C884C888C889C88AC88EC88FC890C891 +C892C893C895C896C897C898C899C89AC89BC89CC89EC8A0C8A2C8A3C8A40000 +A1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000C8A5C8A6C8A7C8A9C8AAC8ABC8ACC8ADC8AEC8AFC8B0C8B1C8B2C8B3C8B4 +C8B5C8B6C8B7C8B8C8B9C8BAC8BBC8BEC8BFC8C0C8C100000000000000000000 +0000C8C2C8C3C8C5C8C6C8C7C8C9C8CAC8CBC8CDC8CEC8CFC8D0C8D1C8D2C8D3 +C8D6C8D8C8DAC8DBC8DCC8DDC8DEC8DFC8E2C8E3C8E500000000000000000000 +0000C8E6C8E7C8E8C8E9C8EAC8EBC8ECC8EDC8EEC8EFC8F0C8F1C8F2C8F3C8F4 +C8F6C8F7C8F8C8F9C8FAC8FBC8FEC8FFC901C902C903C907C908C909C90AC90B +C90E30003001300200B72025202600A8300300AD20152225FF3C223C20182019 +201C201D3014301530083009300A300B300C300D300E300F3010301100B100D7 +00F7226022642265221E223400B0203220332103212BFFE0FFE1FFE526422640 +222022A52312220222072261225200A7203B2606260525CB25CF25CE25C725C6 +25A125A025B325B225BD25BC219221902191219321943013226A226B221A223D +221D2235222B222C2208220B2286228722822283222A222922272228FFE20000 +A2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000C910C912C913C914C915C916C917C919C91AC91BC91CC91DC91EC91FC920 +C921C922C923C924C925C926C927C928C929C92AC92B00000000000000000000 +0000C92DC92EC92FC930C931C932C933C935C936C937C938C939C93AC93BC93C +C93DC93EC93FC940C941C942C943C944C945C946C94700000000000000000000 +0000C948C949C94AC94BC94CC94DC94EC94FC952C953C955C956C957C959C95A +C95BC95CC95DC95EC95FC962C964C965C966C967C968C969C96AC96BC96DC96E +C96F21D221D42200220300B4FF5E02C702D802DD02DA02D900B802DB00A100BF +02D0222E2211220F00A42109203025C125C025B725B626642660266126652667 +2663229925C825A325D025D1259225A425A525A825A725A625A92668260F260E +261C261E00B62020202121952197219921962198266D2669266A266C327F321C +211633C7212233C233D8212120AC00AE00000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +A3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000C971C972C973C975C976C977C978C979C97AC97BC97DC97EC97FC980C981 +C982C983C984C985C986C987C98AC98BC98DC98EC98F00000000000000000000 +0000C991C992C993C994C995C996C997C99AC99CC99EC99FC9A0C9A1C9A2C9A3 +C9A4C9A5C9A6C9A7C9A8C9A9C9AAC9ABC9ACC9ADC9AE00000000000000000000 +0000C9AFC9B0C9B1C9B2C9B3C9B4C9B5C9B6C9B7C9B8C9B9C9BAC9BBC9BCC9BD +C9BEC9BFC9C2C9C3C9C5C9C6C9C9C9CBC9CCC9CDC9CEC9CFC9D2C9D4C9D7C9D8 +C9DBFF01FF02FF03FF04FF05FF06FF07FF08FF09FF0AFF0BFF0CFF0DFF0EFF0F +FF10FF11FF12FF13FF14FF15FF16FF17FF18FF19FF1AFF1BFF1CFF1DFF1EFF1F +FF20FF21FF22FF23FF24FF25FF26FF27FF28FF29FF2AFF2BFF2CFF2DFF2EFF2F +FF30FF31FF32FF33FF34FF35FF36FF37FF38FF39FF3AFF3BFFE6FF3DFF3EFF3F +FF40FF41FF42FF43FF44FF45FF46FF47FF48FF49FF4AFF4BFF4CFF4DFF4EFF4F +FF50FF51FF52FF53FF54FF55FF56FF57FF58FF59FF5AFF5BFF5CFF5DFFE30000 +A4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000C9DEC9DFC9E1C9E3C9E5C9E6C9E8C9E9C9EAC9EBC9EEC9F2C9F3C9F4C9F5 +C9F6C9F7C9FAC9FBC9FDC9FEC9FFCA01CA02CA03CA0400000000000000000000 +0000CA05CA06CA07CA0ACA0ECA0FCA10CA11CA12CA13CA15CA16CA17CA19CA1A +CA1BCA1CCA1DCA1ECA1FCA20CA21CA22CA23CA24CA2500000000000000000000 +0000CA26CA27CA28CA2ACA2BCA2CCA2DCA2ECA2FCA30CA31CA32CA33CA34CA35 +CA36CA37CA38CA39CA3ACA3BCA3CCA3DCA3ECA3FCA40CA41CA42CA43CA44CA45 +CA46313131323133313431353136313731383139313A313B313C313D313E313F +3140314131423143314431453146314731483149314A314B314C314D314E314F +3150315131523153315431553156315731583159315A315B315C315D315E315F +3160316131623163316431653166316731683169316A316B316C316D316E316F +3170317131723173317431753176317731783179317A317B317C317D317E317F +3180318131823183318431853186318731883189318A318B318C318D318E0000 +A5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000CA47CA48CA49CA4ACA4BCA4ECA4FCA51CA52CA53CA55CA56CA57CA58CA59 +CA5ACA5BCA5ECA62CA63CA64CA65CA66CA67CA69CA6A00000000000000000000 +0000CA6BCA6CCA6DCA6ECA6FCA70CA71CA72CA73CA74CA75CA76CA77CA78CA79 +CA7ACA7BCA7CCA7ECA7FCA80CA81CA82CA83CA85CA8600000000000000000000 +0000CA87CA88CA89CA8ACA8BCA8CCA8DCA8ECA8FCA90CA91CA92CA93CA94CA95 +CA96CA97CA99CA9ACA9BCA9CCA9DCA9ECA9FCAA0CAA1CAA2CAA3CAA4CAA5CAA6 +CAA7217021712172217321742175217621772178217900000000000000000000 +2160216121622163216421652166216721682169000000000000000000000000 +0000039103920393039403950396039703980399039A039B039C039D039E039F +03A003A103A303A403A503A603A703A803A90000000000000000000000000000 +000003B103B203B303B403B503B603B703B803B903BA03BB03BC03BD03BE03BF +03C003C103C303C403C503C603C703C803C90000000000000000000000000000 +A6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000CAA8CAA9CAAACAABCAACCAADCAAECAAFCAB0CAB1CAB2CAB3CAB4CAB5CAB6 +CAB7CAB8CAB9CABACABBCABECABFCAC1CAC2CAC3CAC500000000000000000000 +0000CAC6CAC7CAC8CAC9CACACACBCACECAD0CAD2CAD4CAD5CAD6CAD7CADACADB +CADCCADDCADECADFCAE1CAE2CAE3CAE4CAE5CAE6CAE700000000000000000000 +0000CAE8CAE9CAEACAEBCAEDCAEECAEFCAF0CAF1CAF2CAF3CAF5CAF6CAF7CAF8 +CAF9CAFACAFBCAFCCAFDCAFECAFFCB00CB01CB02CB03CB04CB05CB06CB07CB09 +CB0A25002502250C251025182514251C252C25242534253C25012503250F2513 +251B251725232533252B253B254B2520252F25282537253F251D253025252538 +254225122511251A251925162515250E250D251E251F25212522252625272529 +252A252D252E25312532253525362539253A253D253E25402541254325442545 +2546254725482549254A00000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +A7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000CB0BCB0CCB0DCB0ECB0FCB11CB12CB13CB15CB16CB17CB19CB1ACB1BCB1C +CB1DCB1ECB1FCB22CB23CB24CB25CB26CB27CB28CB2900000000000000000000 +0000CB2ACB2BCB2CCB2DCB2ECB2FCB30CB31CB32CB33CB34CB35CB36CB37CB38 +CB39CB3ACB3BCB3CCB3DCB3ECB3FCB40CB42CB43CB4400000000000000000000 +0000CB45CB46CB47CB4ACB4BCB4DCB4ECB4FCB51CB52CB53CB54CB55CB56CB57 +CB5ACB5BCB5CCB5ECB5FCB60CB61CB62CB63CB65CB66CB67CB68CB69CB6ACB6B +CB6C3395339633972113339833C433A333A433A533A63399339A339B339C339D +339E339F33A033A133A233CA338D338E338F33CF3388338933C833A733A833B0 +33B133B233B333B433B533B633B733B833B93380338133823383338433BA33BB +33BC33BD33BE33BF33903391339233933394212633C033C1338A338B338C33D6 +33C533AD33AE33AF33DB33A933AA33AB33AC33DD33D033D333C333C933DC33C6 +0000000000000000000000000000000000000000000000000000000000000000 +A8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000CB6DCB6ECB6FCB70CB71CB72CB73CB74CB75CB76CB77CB7ACB7BCB7CCB7D +CB7ECB7FCB80CB81CB82CB83CB84CB85CB86CB87CB8800000000000000000000 +0000CB89CB8ACB8BCB8CCB8DCB8ECB8FCB90CB91CB92CB93CB94CB95CB96CB97 +CB98CB99CB9ACB9BCB9DCB9ECB9FCBA0CBA1CBA2CBA300000000000000000000 +0000CBA4CBA5CBA6CBA7CBA8CBA9CBAACBABCBACCBADCBAECBAFCBB0CBB1CBB2 +CBB3CBB4CBB5CBB6CBB7CBB9CBBACBBBCBBCCBBDCBBECBBFCBC0CBC1CBC2CBC3 +CBC400C600D000AA0126000001320000013F014100D8015200BA00DE0166014A +00003260326132623263326432653266326732683269326A326B326C326D326E +326F3270327132723273327432753276327732783279327A327B24D024D124D2 +24D324D424D524D624D724D824D924DA24DB24DC24DD24DE24DF24E024E124E2 +24E324E424E524E624E724E824E9246024612462246324642465246624672468 +2469246A246B246C246D246E00BD2153215400BC00BE215B215C215D215E0000 +A9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000CBC5CBC6CBC7CBC8CBC9CBCACBCBCBCCCBCDCBCECBCFCBD0CBD1CBD2CBD3 +CBD5CBD6CBD7CBD8CBD9CBDACBDBCBDCCBDDCBDECBDF00000000000000000000 +0000CBE0CBE1CBE2CBE3CBE5CBE6CBE8CBEACBEBCBECCBEDCBEECBEFCBF0CBF1 +CBF2CBF3CBF4CBF5CBF6CBF7CBF8CBF9CBFACBFBCBFC00000000000000000000 +0000CBFDCBFECBFFCC00CC01CC02CC03CC04CC05CC06CC07CC08CC09CC0ACC0B +CC0ECC0FCC11CC12CC13CC15CC16CC17CC18CC19CC1ACC1BCC1ECC1FCC20CC23 +CC2400E6011100F001270131013301380140014200F8015300DF00FE0167014B +01493200320132023203320432053206320732083209320A320B320C320D320E +320F3210321132123213321432153216321732183219321A321B249C249D249E +249F24A024A124A224A324A424A524A624A724A824A924AA24AB24AC24AD24AE +24AF24B024B124B224B324B424B5247424752476247724782479247A247B247C +247D247E247F24802481248200B900B200B32074207F20812082208320840000 +AA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000CC25CC26CC2ACC2BCC2DCC2FCC31CC32CC33CC34CC35CC36CC37CC3ACC3F +CC40CC41CC42CC43CC46CC47CC49CC4ACC4BCC4DCC4E00000000000000000000 +0000CC4FCC50CC51CC52CC53CC56CC5ACC5BCC5CCC5DCC5ECC5FCC61CC62CC63 +CC65CC67CC69CC6ACC6BCC6CCC6DCC6ECC6FCC71CC7200000000000000000000 +0000CC73CC74CC76CC77CC78CC79CC7ACC7BCC7CCC7DCC7ECC7FCC80CC81CC82 +CC83CC84CC85CC86CC87CC88CC89CC8ACC8BCC8CCC8DCC8ECC8FCC90CC91CC92 +CC93304130423043304430453046304730483049304A304B304C304D304E304F +3050305130523053305430553056305730583059305A305B305C305D305E305F +3060306130623063306430653066306730683069306A306B306C306D306E306F +3070307130723073307430753076307730783079307A307B307C307D307E307F +3080308130823083308430853086308730883089308A308B308C308D308E308F +3090309130923093000000000000000000000000000000000000000000000000 +AB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000CC94CC95CC96CC97CC9ACC9BCC9DCC9ECC9FCCA1CCA2CCA3CCA4CCA5CCA6 +CCA7CCAACCAECCAFCCB0CCB1CCB2CCB3CCB6CCB7CCB900000000000000000000 +0000CCBACCBBCCBDCCBECCBFCCC0CCC1CCC2CCC3CCC6CCC8CCCACCCBCCCCCCCD +CCCECCCFCCD1CCD2CCD3CCD5CCD6CCD7CCD8CCD9CCDA00000000000000000000 +0000CCDBCCDCCCDDCCDECCDFCCE0CCE1CCE2CCE3CCE5CCE6CCE7CCE8CCE9CCEA +CCEBCCEDCCEECCEFCCF1CCF2CCF3CCF4CCF5CCF6CCF7CCF8CCF9CCFACCFBCCFC +CCFD30A130A230A330A430A530A630A730A830A930AA30AB30AC30AD30AE30AF +30B030B130B230B330B430B530B630B730B830B930BA30BB30BC30BD30BE30BF +30C030C130C230C330C430C530C630C730C830C930CA30CB30CC30CD30CE30CF +30D030D130D230D330D430D530D630D730D830D930DA30DB30DC30DD30DE30DF +30E030E130E230E330E430E530E630E730E830E930EA30EB30EC30ED30EE30EF +30F030F130F230F330F430F530F6000000000000000000000000000000000000 +AC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000CCFECCFFCD00CD02CD03CD04CD05CD06CD07CD0ACD0BCD0DCD0ECD0FCD11 +CD12CD13CD14CD15CD16CD17CD1ACD1CCD1ECD1FCD2000000000000000000000 +0000CD21CD22CD23CD25CD26CD27CD29CD2ACD2BCD2DCD2ECD2FCD30CD31CD32 +CD33CD34CD35CD36CD37CD38CD3ACD3BCD3CCD3DCD3E00000000000000000000 +0000CD3FCD40CD41CD42CD43CD44CD45CD46CD47CD48CD49CD4ACD4BCD4CCD4D +CD4ECD4FCD50CD51CD52CD53CD54CD55CD56CD57CD58CD59CD5ACD5BCD5DCD5E +CD5F04100411041204130414041504010416041704180419041A041B041C041D +041E041F0420042104220423042404250426042704280429042A042B042C042D +042E042F00000000000000000000000000000000000000000000000000000000 +000004300431043204330434043504510436043704380439043A043B043C043D +043E043F0440044104420443044404450446044704480449044A044B044C044D +044E044F00000000000000000000000000000000000000000000000000000000 +AD +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000CD61CD62CD63CD65CD66CD67CD68CD69CD6ACD6BCD6ECD70CD72CD73CD74 +CD75CD76CD77CD79CD7ACD7BCD7CCD7DCD7ECD7FCD8000000000000000000000 +0000CD81CD82CD83CD84CD85CD86CD87CD89CD8ACD8BCD8CCD8DCD8ECD8FCD90 +CD91CD92CD93CD96CD97CD99CD9ACD9BCD9DCD9ECD9F00000000000000000000 +0000CDA0CDA1CDA2CDA3CDA6CDA8CDAACDABCDACCDADCDAECDAFCDB1CDB2CDB3 +CDB4CDB5CDB6CDB7CDB8CDB9CDBACDBBCDBCCDBDCDBECDBFCDC0CDC1CDC2CDC3 +CDC5000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +AE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000CDC6CDC7CDC8CDC9CDCACDCBCDCDCDCECDCFCDD1CDD2CDD3CDD4CDD5CDD6 +CDD7CDD8CDD9CDDACDDBCDDCCDDDCDDECDDFCDE0CDE100000000000000000000 +0000CDE2CDE3CDE4CDE5CDE6CDE7CDE9CDEACDEBCDEDCDEECDEFCDF1CDF2CDF3 +CDF4CDF5CDF6CDF7CDFACDFCCDFECDFFCE00CE01CE0200000000000000000000 +0000CE03CE05CE06CE07CE09CE0ACE0BCE0DCE0ECE0FCE10CE11CE12CE13CE15 +CE16CE17CE18CE1ACE1BCE1CCE1DCE1ECE1FCE22CE23CE25CE26CE27CE29CE2A +CE2B000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +AF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000CE2CCE2DCE2ECE2FCE32CE34CE36CE37CE38CE39CE3ACE3BCE3CCE3DCE3E +CE3FCE40CE41CE42CE43CE44CE45CE46CE47CE48CE4900000000000000000000 +0000CE4ACE4BCE4CCE4DCE4ECE4FCE50CE51CE52CE53CE54CE55CE56CE57CE5A +CE5BCE5DCE5ECE62CE63CE64CE65CE66CE67CE6ACE6C00000000000000000000 +0000CE6ECE6FCE70CE71CE72CE73CE76CE77CE79CE7ACE7BCE7DCE7ECE7FCE80 +CE81CE82CE83CE86CE88CE8ACE8BCE8CCE8DCE8ECE8FCE92CE93CE95CE96CE97 +CE99000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +B0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000CE9ACE9BCE9CCE9DCE9ECE9FCEA2CEA6CEA7CEA8CEA9CEAACEABCEAECEAF +CEB0CEB1CEB2CEB3CEB4CEB5CEB6CEB7CEB8CEB9CEBA00000000000000000000 +0000CEBBCEBCCEBDCEBECEBFCEC0CEC2CEC3CEC4CEC5CEC6CEC7CEC8CEC9CECA +CECBCECCCECDCECECECFCED0CED1CED2CED3CED4CED500000000000000000000 +0000CED6CED7CED8CED9CEDACEDBCEDCCEDDCEDECEDFCEE0CEE1CEE2CEE3CEE6 +CEE7CEE9CEEACEEDCEEECEEFCEF0CEF1CEF2CEF3CEF6CEFACEFBCEFCCEFDCEFE +CEFFAC00AC01AC04AC07AC08AC09AC0AAC10AC11AC12AC13AC14AC15AC16AC17 +AC19AC1AAC1BAC1CAC1DAC20AC24AC2CAC2DAC2FAC30AC31AC38AC39AC3CAC40 +AC4BAC4DAC54AC58AC5CAC70AC71AC74AC77AC78AC7AAC80AC81AC83AC84AC85 +AC86AC89AC8AAC8BAC8CAC90AC94AC9CAC9DAC9FACA0ACA1ACA8ACA9ACAAACAC +ACAFACB0ACB8ACB9ACBBACBCACBDACC1ACC4ACC8ACCCACD5ACD7ACE0ACE1ACE4 +ACE7ACE8ACEAACECACEFACF0ACF1ACF3ACF5ACF6ACFCACFDAD00AD04AD060000 +B1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000CF02CF03CF05CF06CF07CF09CF0ACF0BCF0CCF0DCF0ECF0FCF12CF14CF16 +CF17CF18CF19CF1ACF1BCF1DCF1ECF1FCF21CF22CF2300000000000000000000 +0000CF25CF26CF27CF28CF29CF2ACF2BCF2ECF32CF33CF34CF35CF36CF37CF39 +CF3ACF3BCF3CCF3DCF3ECF3FCF40CF41CF42CF43CF4400000000000000000000 +0000CF45CF46CF47CF48CF49CF4ACF4BCF4CCF4DCF4ECF4FCF50CF51CF52CF53 +CF56CF57CF59CF5ACF5BCF5DCF5ECF5FCF60CF61CF62CF63CF66CF68CF6ACF6B +CF6CAD0CAD0DAD0FAD11AD18AD1CAD20AD29AD2CAD2DAD34AD35AD38AD3CAD44 +AD45AD47AD49AD50AD54AD58AD61AD63AD6CAD6DAD70AD73AD74AD75AD76AD7B +AD7CAD7DAD7FAD81AD82AD88AD89AD8CAD90AD9CAD9DADA4ADB7ADC0ADC1ADC4 +ADC8ADD0ADD1ADD3ADDCADE0ADE4ADF8ADF9ADFCADFFAE00AE01AE08AE09AE0B +AE0DAE14AE30AE31AE34AE37AE38AE3AAE40AE41AE43AE45AE46AE4AAE4CAE4D +AE4EAE50AE54AE56AE5CAE5DAE5FAE60AE61AE65AE68AE69AE6CAE70AE780000 +B2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000CF6DCF6ECF6FCF72CF73CF75CF76CF77CF79CF7ACF7BCF7CCF7DCF7ECF7F +CF81CF82CF83CF84CF86CF87CF88CF89CF8ACF8BCF8D00000000000000000000 +0000CF8ECF8FCF90CF91CF92CF93CF94CF95CF96CF97CF98CF99CF9ACF9BCF9C +CF9DCF9ECF9FCFA0CFA2CFA3CFA4CFA5CFA6CFA7CFA900000000000000000000 +0000CFAACFABCFACCFADCFAECFAFCFB1CFB2CFB3CFB4CFB5CFB6CFB7CFB8CFB9 +CFBACFBBCFBCCFBDCFBECFBFCFC0CFC1CFC2CFC3CFC5CFC6CFC7CFC8CFC9CFCA +CFCBAE79AE7BAE7CAE7DAE84AE85AE8CAEBCAEBDAEBEAEC0AEC4AECCAECDAECF +AED0AED1AED8AED9AEDCAEE8AEEBAEEDAEF4AEF8AEFCAF07AF08AF0DAF10AF2C +AF2DAF30AF32AF34AF3CAF3DAF3FAF41AF42AF43AF48AF49AF50AF5CAF5DAF64 +AF65AF79AF80AF84AF88AF90AF91AF95AF9CAFB8AFB9AFBCAFC0AFC7AFC8AFC9 +AFCBAFCDAFCEAFD4AFDCAFE8AFE9AFF0AFF1AFF4AFF8B000B001B004B00CB010 +B014B01CB01DB028B044B045B048B04AB04CB04EB053B054B055B057B0590000 +B3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000CFCCCFCDCFCECFCFCFD0CFD1CFD2CFD3CFD4CFD5CFD6CFD7CFD8CFD9CFDA +CFDBCFDCCFDDCFDECFDFCFE2CFE3CFE5CFE6CFE7CFE900000000000000000000 +0000CFEACFEBCFECCFEDCFEECFEFCFF2CFF4CFF6CFF7CFF8CFF9CFFACFFBCFFD +CFFECFFFD001D002D003D005D006D007D008D009D00A00000000000000000000 +0000D00BD00CD00DD00ED00FD010D012D013D014D015D016D017D019D01AD01B +D01CD01DD01ED01FD020D021D022D023D024D025D026D027D028D029D02AD02B +D02CB05DB07CB07DB080B084B08CB08DB08FB091B098B099B09AB09CB09FB0A0 +B0A1B0A2B0A8B0A9B0ABB0ACB0ADB0AEB0AFB0B1B0B3B0B4B0B5B0B8B0BCB0C4 +B0C5B0C7B0C8B0C9B0D0B0D1B0D4B0D8B0E0B0E5B108B109B10BB10CB110B112 +B113B118B119B11BB11CB11DB123B124B125B128B12CB134B135B137B138B139 +B140B141B144B148B150B151B154B155B158B15CB160B178B179B17CB180B182 +B188B189B18BB18DB192B193B194B198B19CB1A8B1CCB1D0B1D4B1DCB1DD0000 +B4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000D02ED02FD030D031D032D033D036D037D039D03AD03BD03DD03ED03FD040 +D041D042D043D046D048D04AD04BD04CD04DD04ED04F00000000000000000000 +0000D051D052D053D055D056D057D059D05AD05BD05CD05DD05ED05FD061D062 +D063D064D065D066D067D068D069D06AD06BD06ED06F00000000000000000000 +0000D071D072D073D075D076D077D078D079D07AD07BD07ED07FD080D082D083 +D084D085D086D087D088D089D08AD08BD08CD08DD08ED08FD090D091D092D093 +D094B1DFB1E8B1E9B1ECB1F0B1F9B1FBB1FDB204B205B208B20BB20CB214B215 +B217B219B220B234B23CB258B25CB260B268B269B274B275B27CB284B285B289 +B290B291B294B298B299B29AB2A0B2A1B2A3B2A5B2A6B2AAB2ACB2B0B2B4B2C8 +B2C9B2CCB2D0B2D2B2D8B2D9B2DBB2DDB2E2B2E4B2E5B2E6B2E8B2EBB2ECB2ED +B2EEB2EFB2F3B2F4B2F5B2F7B2F8B2F9B2FAB2FBB2FFB300B301B304B308B310 +B311B313B314B315B31CB354B355B356B358B35BB35CB35EB35FB364B3650000 +B5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000D095D096D097D098D099D09AD09BD09CD09DD09ED09FD0A0D0A1D0A2D0A3 +D0A6D0A7D0A9D0AAD0ABD0ADD0AED0AFD0B0D0B1D0B200000000000000000000 +0000D0B3D0B6D0B8D0BAD0BBD0BCD0BDD0BED0BFD0C2D0C3D0C5D0C6D0C7D0CA +D0CBD0CCD0CDD0CED0CFD0D2D0D6D0D7D0D8D0D9D0DA00000000000000000000 +0000D0DBD0DED0DFD0E1D0E2D0E3D0E5D0E6D0E7D0E8D0E9D0EAD0EBD0EED0F2 +D0F3D0F4D0F5D0F6D0F7D0F9D0FAD0FBD0FCD0FDD0FED0FFD100D101D102D103 +D104B367B369B36BB36EB370B371B374B378B380B381B383B384B385B38CB390 +B394B3A0B3A1B3A8B3ACB3C4B3C5B3C8B3CBB3CCB3CEB3D0B3D4B3D5B3D7B3D9 +B3DBB3DDB3E0B3E4B3E8B3FCB410B418B41CB420B428B429B42BB434B450B451 +B454B458B460B461B463B465B46CB480B488B49DB4A4B4A8B4ACB4B5B4B7B4B9 +B4C0B4C4B4C8B4D0B4D5B4DCB4DDB4E0B4E3B4E4B4E6B4ECB4EDB4EFB4F1B4F8 +B514B515B518B51BB51CB524B525B527B528B529B52AB530B531B534B5380000 +B6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000D105D106D107D108D109D10AD10BD10CD10ED10FD110D111D112D113D114 +D115D116D117D118D119D11AD11BD11CD11DD11ED11F00000000000000000000 +0000D120D121D122D123D124D125D126D127D128D129D12AD12BD12CD12DD12E +D12FD132D133D135D136D137D139D13BD13CD13DD13E00000000000000000000 +0000D13FD142D146D147D148D149D14AD14BD14ED14FD151D152D153D155D156 +D157D158D159D15AD15BD15ED160D162D163D164D165D166D167D169D16AD16B +D16DB540B541B543B544B545B54BB54CB54DB550B554B55CB55DB55FB560B561 +B5A0B5A1B5A4B5A8B5AAB5ABB5B0B5B1B5B3B5B4B5B5B5BBB5BCB5BDB5C0B5C4 +B5CCB5CDB5CFB5D0B5D1B5D8B5ECB610B611B614B618B625B62CB634B648B664 +B668B69CB69DB6A0B6A4B6ABB6ACB6B1B6D4B6F0B6F4B6F8B700B701B705B728 +B729B72CB72FB730B738B739B73BB744B748B74CB754B755B760B764B768B770 +B771B773B775B77CB77DB780B784B78CB78DB78FB790B791B792B796B7970000 +B7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000D16ED16FD170D171D172D173D174D175D176D177D178D179D17AD17BD17D +D17ED17FD180D181D182D183D185D186D187D189D18A00000000000000000000 +0000D18BD18CD18DD18ED18FD190D191D192D193D194D195D196D197D198D199 +D19AD19BD19CD19DD19ED19FD1A2D1A3D1A5D1A6D1A700000000000000000000 +0000D1A9D1AAD1ABD1ACD1ADD1AED1AFD1B2D1B4D1B6D1B7D1B8D1B9D1BBD1BD +D1BED1BFD1C1D1C2D1C3D1C4D1C5D1C6D1C7D1C8D1C9D1CAD1CBD1CCD1CDD1CE +D1CFB798B799B79CB7A0B7A8B7A9B7ABB7ACB7ADB7B4B7B5B7B8B7C7B7C9B7EC +B7EDB7F0B7F4B7FCB7FDB7FFB800B801B807B808B809B80CB810B818B819B81B +B81DB824B825B828B82CB834B835B837B838B839B840B844B851B853B85CB85D +B860B864B86CB86DB86FB871B878B87CB88DB8A8B8B0B8B4B8B8B8C0B8C1B8C3 +B8C5B8CCB8D0B8D4B8DDB8DFB8E1B8E8B8E9B8ECB8F0B8F8B8F9B8FBB8FDB904 +B918B920B93CB93DB940B944B94CB94FB951B958B959B95CB960B968B9690000 +B8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000D1D0D1D1D1D2D1D3D1D4D1D5D1D6D1D7D1D9D1DAD1DBD1DCD1DDD1DED1DF +D1E0D1E1D1E2D1E3D1E4D1E5D1E6D1E7D1E8D1E9D1EA00000000000000000000 +0000D1EBD1ECD1EDD1EED1EFD1F0D1F1D1F2D1F3D1F5D1F6D1F7D1F9D1FAD1FB +D1FCD1FDD1FED1FFD200D201D202D203D204D205D20600000000000000000000 +0000D208D20AD20BD20CD20DD20ED20FD211D212D213D214D215D216D217D218 +D219D21AD21BD21CD21DD21ED21FD220D221D222D223D224D225D226D227D228 +D229B96BB96DB974B975B978B97CB984B985B987B989B98AB98DB98EB9ACB9AD +B9B0B9B4B9BCB9BDB9BFB9C1B9C8B9C9B9CCB9CEB9CFB9D0B9D1B9D2B9D8B9D9 +B9DBB9DDB9DEB9E1B9E3B9E4B9E5B9E8B9ECB9F4B9F5B9F7B9F8B9F9B9FABA00 +BA01BA08BA15BA38BA39BA3CBA40BA42BA48BA49BA4BBA4DBA4EBA53BA54BA55 +BA58BA5CBA64BA65BA67BA68BA69BA70BA71BA74BA78BA83BA84BA85BA87BA8C +BAA8BAA9BAABBAACBAB0BAB2BAB8BAB9BABBBABDBAC4BAC8BAD8BAD9BAFC0000 +B9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000D22AD22BD22ED22FD231D232D233D235D236D237D238D239D23AD23BD23E +D240D242D243D244D245D246D247D249D24AD24BD24C00000000000000000000 +0000D24DD24ED24FD250D251D252D253D254D255D256D257D258D259D25AD25B +D25DD25ED25FD260D261D262D263D265D266D267D26800000000000000000000 +0000D269D26AD26BD26CD26DD26ED26FD270D271D272D273D274D275D276D277 +D278D279D27AD27BD27CD27DD27ED27FD282D283D285D286D287D289D28AD28B +D28CBB00BB04BB0DBB0FBB11BB18BB1CBB20BB29BB2BBB34BB35BB36BB38BB3B +BB3CBB3DBB3EBB44BB45BB47BB49BB4DBB4FBB50BB54BB58BB61BB63BB6CBB88 +BB8CBB90BBA4BBA8BBACBBB4BBB7BBC0BBC4BBC8BBD0BBD3BBF8BBF9BBFCBBFF +BC00BC02BC08BC09BC0BBC0CBC0DBC0FBC11BC14BC15BC16BC17BC18BC1BBC1C +BC1DBC1EBC1FBC24BC25BC27BC29BC2DBC30BC31BC34BC38BC40BC41BC43BC44 +BC45BC49BC4CBC4DBC50BC5DBC84BC85BC88BC8BBC8CBC8EBC94BC95BC970000 +BA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000D28DD28ED28FD292D293D294D296D297D298D299D29AD29BD29DD29ED29F +D2A1D2A2D2A3D2A5D2A6D2A7D2A8D2A9D2AAD2ABD2AD00000000000000000000 +0000D2AED2AFD2B0D2B2D2B3D2B4D2B5D2B6D2B7D2BAD2BBD2BDD2BED2C1D2C3 +D2C4D2C5D2C6D2C7D2CAD2CCD2CDD2CED2CFD2D0D2D100000000000000000000 +0000D2D2D2D3D2D5D2D6D2D7D2D9D2DAD2DBD2DDD2DED2DFD2E0D2E1D2E2D2E3 +D2E6D2E7D2E8D2E9D2EAD2EBD2ECD2EDD2EED2EFD2F2D2F3D2F5D2F6D2F7D2F9 +D2FABC99BC9ABCA0BCA1BCA4BCA7BCA8BCB0BCB1BCB3BCB4BCB5BCBCBCBDBCC0 +BCC4BCCDBCCFBCD0BCD1BCD5BCD8BCDCBCF4BCF5BCF6BCF8BCFCBD04BD05BD07 +BD09BD10BD14BD24BD2CBD40BD48BD49BD4CBD50BD58BD59BD64BD68BD80BD81 +BD84BD87BD88BD89BD8ABD90BD91BD93BD95BD99BD9ABD9CBDA4BDB0BDB8BDD4 +BDD5BDD8BDDCBDE9BDF0BDF4BDF8BE00BE03BE05BE0CBE0DBE10BE14BE1CBE1D +BE1FBE44BE45BE48BE4CBE4EBE54BE55BE57BE59BE5ABE5BBE60BE61BE640000 +BB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000D2FBD2FCD2FDD2FED2FFD302D304D306D307D308D309D30AD30BD30FD311 +D312D313D315D317D318D319D31AD31BD31ED322D32300000000000000000000 +0000D324D326D327D32AD32BD32DD32ED32FD331D332D333D334D335D336D337 +D33AD33ED33FD340D341D342D343D346D347D348D34900000000000000000000 +0000D34AD34BD34CD34DD34ED34FD350D351D352D353D354D355D356D357D358 +D359D35AD35BD35CD35DD35ED35FD360D361D362D363D364D365D366D367D368 +D369BE68BE6ABE70BE71BE73BE74BE75BE7BBE7CBE7DBE80BE84BE8CBE8DBE8F +BE90BE91BE98BE99BEA8BED0BED1BED4BED7BED8BEE0BEE3BEE4BEE5BEECBF01 +BF08BF09BF18BF19BF1BBF1CBF1DBF40BF41BF44BF48BF50BF51BF55BF94BFB0 +BFC5BFCCBFCDBFD0BFD4BFDCBFDFBFE1C03CC051C058C05CC060C068C069C090 +C091C094C098C0A0C0A1C0A3C0A5C0ACC0ADC0AFC0B0C0B3C0B4C0B5C0B6C0BC +C0BDC0BFC0C0C0C1C0C5C0C8C0C9C0CCC0D0C0D8C0D9C0DBC0DCC0DDC0E40000 +BC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000D36AD36BD36CD36DD36ED36FD370D371D372D373D374D375D376D377D378 +D379D37AD37BD37ED37FD381D382D383D385D386D38700000000000000000000 +0000D388D389D38AD38BD38ED392D393D394D395D396D397D39AD39BD39DD39E +D39FD3A1D3A2D3A3D3A4D3A5D3A6D3A7D3AAD3ACD3AE00000000000000000000 +0000D3AFD3B0D3B1D3B2D3B3D3B5D3B6D3B7D3B9D3BAD3BBD3BDD3BED3BFD3C0 +D3C1D3C2D3C3D3C6D3C7D3CAD3CBD3CCD3CDD3CED3CFD3D1D3D2D3D3D3D4D3D5 +D3D6C0E5C0E8C0ECC0F4C0F5C0F7C0F9C100C104C108C110C115C11CC11DC11E +C11FC120C123C124C126C127C12CC12DC12FC130C131C136C138C139C13CC140 +C148C149C14BC14CC14DC154C155C158C15CC164C165C167C168C169C170C174 +C178C185C18CC18DC18EC190C194C196C19CC19DC19FC1A1C1A5C1A8C1A9C1AC +C1B0C1BDC1C4C1C8C1CCC1D4C1D7C1D8C1E0C1E4C1E8C1F0C1F1C1F3C1FCC1FD +C200C204C20CC20DC20FC211C218C219C21CC21FC220C228C229C22BC22D0000 +BD +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000D3D7D3D9D3DAD3DBD3DCD3DDD3DED3DFD3E0D3E2D3E4D3E5D3E6D3E7D3E8 +D3E9D3EAD3EBD3EED3EFD3F1D3F2D3F3D3F5D3F6D3F700000000000000000000 +0000D3F8D3F9D3FAD3FBD3FED400D402D403D404D405D406D407D409D40AD40B +D40CD40DD40ED40FD410D411D412D413D414D415D41600000000000000000000 +0000D417D418D419D41AD41BD41CD41ED41FD420D421D422D423D424D425D426 +D427D428D429D42AD42BD42CD42DD42ED42FD430D431D432D433D434D435D436 +D437C22FC231C232C234C248C250C251C254C258C260C265C26CC26DC270C274 +C27CC27DC27FC281C288C289C290C298C29BC29DC2A4C2A5C2A8C2ACC2ADC2B4 +C2B5C2B7C2B9C2DCC2DDC2E0C2E3C2E4C2EBC2ECC2EDC2EFC2F1C2F6C2F8C2F9 +C2FBC2FCC300C308C309C30CC30DC313C314C315C318C31CC324C325C328C329 +C345C368C369C36CC370C372C378C379C37CC37DC384C388C38CC3C0C3D8C3D9 +C3DCC3DFC3E0C3E2C3E8C3E9C3EDC3F4C3F5C3F8C408C410C424C42CC4300000 +BE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000D438D439D43AD43BD43CD43DD43ED43FD441D442D443D445D446D447D448 +D449D44AD44BD44CD44DD44ED44FD450D451D452D45300000000000000000000 +0000D454D455D456D457D458D459D45AD45BD45DD45ED45FD461D462D463D465 +D466D467D468D469D46AD46BD46CD46ED470D471D47200000000000000000000 +0000D473D474D475D476D477D47AD47BD47DD47ED481D483D484D485D486D487 +D48AD48CD48ED48FD490D491D492D493D495D496D497D498D499D49AD49BD49C +D49DC434C43CC43DC448C464C465C468C46CC474C475C479C480C494C49CC4B8 +C4BCC4E9C4F0C4F1C4F4C4F8C4FAC4FFC500C501C50CC510C514C51CC528C529 +C52CC530C538C539C53BC53DC544C545C548C549C54AC54CC54DC54EC553C554 +C555C557C558C559C55DC55EC560C561C564C568C570C571C573C574C575C57C +C57DC580C584C587C58CC58DC58FC591C595C597C598C59CC5A0C5A9C5B4C5B5 +C5B8C5B9C5BBC5BCC5BDC5BEC5C4C5C5C5C6C5C7C5C8C5C9C5CAC5CCC5CE0000 +BF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000D49ED49FD4A0D4A1D4A2D4A3D4A4D4A5D4A6D4A7D4A8D4AAD4ABD4ACD4AD +D4AED4AFD4B0D4B1D4B2D4B3D4B4D4B5D4B6D4B7D4B800000000000000000000 +0000D4B9D4BAD4BBD4BCD4BDD4BED4BFD4C0D4C1D4C2D4C3D4C4D4C5D4C6D4C7 +D4C8D4C9D4CAD4CBD4CDD4CED4CFD4D1D4D2D4D3D4D500000000000000000000 +0000D4D6D4D7D4D8D4D9D4DAD4DBD4DDD4DED4E0D4E1D4E2D4E3D4E4D4E5D4E6 +D4E7D4E9D4EAD4EBD4EDD4EED4EFD4F1D4F2D4F3D4F4D4F5D4F6D4F7D4F9D4FA +D4FCC5D0C5D1C5D4C5D8C5E0C5E1C5E3C5E5C5ECC5EDC5EEC5F0C5F4C5F6C5F7 +C5FCC5FDC5FEC5FFC600C601C605C606C607C608C60CC610C618C619C61BC61C +C624C625C628C62CC62DC62EC630C633C634C635C637C639C63BC640C641C644 +C648C650C651C653C654C655C65CC65DC660C66CC66FC671C678C679C67CC680 +C688C689C68BC68DC694C695C698C69CC6A4C6A5C6A7C6A9C6B0C6B1C6B4C6B8 +C6B9C6BAC6C0C6C1C6C3C6C5C6CCC6CDC6D0C6D4C6DCC6DDC6E0C6E1C6E80000 +C0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000D4FED4FFD500D501D502D503D505D506D507D509D50AD50BD50DD50ED50F +D510D511D512D513D516D518D519D51AD51BD51CD51D00000000000000000000 +0000D51ED51FD520D521D522D523D524D525D526D527D528D529D52AD52BD52C +D52DD52ED52FD530D531D532D533D534D535D536D53700000000000000000000 +0000D538D539D53AD53BD53ED53FD541D542D543D545D546D547D548D549D54A +D54BD54ED550D552D553D554D555D556D557D55AD55BD55DD55ED55FD561D562 +D563C6E9C6ECC6F0C6F8C6F9C6FDC704C705C708C70CC714C715C717C719C720 +C721C724C728C730C731C733C735C737C73CC73DC740C744C74AC74CC74DC74F +C751C752C753C754C755C756C757C758C75CC760C768C76BC774C775C778C77C +C77DC77EC783C784C785C787C788C789C78AC78EC790C791C794C796C797C798 +C79AC7A0C7A1C7A3C7A4C7A5C7A6C7ACC7ADC7B0C7B4C7BCC7BDC7BFC7C0C7C1 +C7C8C7C9C7CCC7CEC7D0C7D8C7DDC7E4C7E8C7ECC800C801C804C808C80A0000 +C1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000D564D566D567D56AD56CD56ED56FD570D571D572D573D576D577D579D57A +D57BD57DD57ED57FD580D581D582D583D586D58AD58B00000000000000000000 +0000D58CD58DD58ED58FD591D592D593D594D595D596D597D598D599D59AD59B +D59CD59DD59ED59FD5A0D5A1D5A2D5A3D5A4D5A6D5A700000000000000000000 +0000D5A8D5A9D5AAD5ABD5ACD5ADD5AED5AFD5B0D5B1D5B2D5B3D5B4D5B5D5B6 +D5B7D5B8D5B9D5BAD5BBD5BCD5BDD5BED5BFD5C0D5C1D5C2D5C3D5C4D5C5D5C6 +D5C7C810C811C813C815C816C81CC81DC820C824C82CC82DC82FC831C838C83C +C840C848C849C84CC84DC854C870C871C874C878C87AC880C881C883C885C886 +C887C88BC88CC88DC894C89DC89FC8A1C8A8C8BCC8BDC8C4C8C8C8CCC8D4C8D5 +C8D7C8D9C8E0C8E1C8E4C8F5C8FCC8FDC900C904C905C906C90CC90DC90FC911 +C918C92CC934C950C951C954C958C960C961C963C96CC970C974C97CC988C989 +C98CC990C998C999C99BC99DC9C0C9C1C9C4C9C7C9C8C9CAC9D0C9D1C9D30000 +C2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000D5CAD5CBD5CDD5CED5CFD5D1D5D3D5D4D5D5D5D6D5D7D5DAD5DCD5DED5DF +D5E0D5E1D5E2D5E3D5E6D5E7D5E9D5EAD5EBD5EDD5EE00000000000000000000 +0000D5EFD5F0D5F1D5F2D5F3D5F6D5F8D5FAD5FBD5FCD5FDD5FED5FFD602D603 +D605D606D607D609D60AD60BD60CD60DD60ED60FD61200000000000000000000 +0000D616D617D618D619D61AD61BD61DD61ED61FD621D622D623D625D626D627 +D628D629D62AD62BD62CD62ED62FD630D631D632D633D634D635D636D637D63A +D63BC9D5C9D6C9D9C9DAC9DCC9DDC9E0C9E2C9E4C9E7C9ECC9EDC9EFC9F0C9F1 +C9F8C9F9C9FCCA00CA08CA09CA0BCA0CCA0DCA14CA18CA29CA4CCA4DCA50CA54 +CA5CCA5DCA5FCA60CA61CA68CA7DCA84CA98CABCCABDCAC0CAC4CACCCACDCACF +CAD1CAD3CAD8CAD9CAE0CAECCAF4CB08CB10CB14CB18CB20CB21CB41CB48CB49 +CB4CCB50CB58CB59CB5DCB64CB78CB79CB9CCBB8CBD4CBE4CBE7CBE9CC0CCC0D +CC10CC14CC1CCC1DCC21CC22CC27CC28CC29CC2CCC2ECC30CC38CC39CC3B0000 +C3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000D63DD63ED63FD641D642D643D644D646D647D64AD64CD64ED64FD650D652 +D653D656D657D659D65AD65BD65DD65ED65FD660D66100000000000000000000 +0000D662D663D664D665D666D668D66AD66BD66CD66DD66ED66FD672D673D675 +D676D677D678D679D67AD67BD67CD67DD67ED67FD68000000000000000000000 +0000D681D682D684D686D687D688D689D68AD68BD68ED68FD691D692D693D695 +D696D697D698D699D69AD69BD69CD69ED6A0D6A2D6A3D6A4D6A5D6A6D6A7D6A9 +D6AACC3CCC3DCC3ECC44CC45CC48CC4CCC54CC55CC57CC58CC59CC60CC64CC66 +CC68CC70CC75CC98CC99CC9CCCA0CCA8CCA9CCABCCACCCADCCB4CCB5CCB8CCBC +CCC4CCC5CCC7CCC9CCD0CCD4CCE4CCECCCF0CD01CD08CD09CD0CCD10CD18CD19 +CD1BCD1DCD24CD28CD2CCD39CD5CCD60CD64CD6CCD6DCD6FCD71CD78CD88CD94 +CD95CD98CD9CCDA4CDA5CDA7CDA9CDB0CDC4CDCCCDD0CDE8CDECCDF0CDF8CDF9 +CDFBCDFDCE04CE08CE0CCE14CE19CE20CE21CE24CE28CE30CE31CE33CE350000 +C4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000D6ABD6ADD6AED6AFD6B1D6B2D6B3D6B4D6B5D6B6D6B7D6B8D6BAD6BCD6BD +D6BED6BFD6C0D6C1D6C2D6C3D6C6D6C7D6C9D6CAD6CB00000000000000000000 +0000D6CDD6CED6CFD6D0D6D2D6D3D6D5D6D6D6D8D6DAD6DBD6DCD6DDD6DED6DF +D6E1D6E2D6E3D6E5D6E6D6E7D6E9D6EAD6EBD6ECD6ED00000000000000000000 +0000D6EED6EFD6F1D6F2D6F3D6F4D6F6D6F7D6F8D6F9D6FAD6FBD6FED6FFD701 +D702D703D705D706D707D708D709D70AD70BD70CD70DD70ED70FD710D712D713 +D714CE58CE59CE5CCE5FCE60CE61CE68CE69CE6BCE6DCE74CE75CE78CE7CCE84 +CE85CE87CE89CE90CE91CE94CE98CEA0CEA1CEA3CEA4CEA5CEACCEADCEC1CEE4 +CEE5CEE8CEEBCEECCEF4CEF5CEF7CEF8CEF9CF00CF01CF04CF08CF10CF11CF13 +CF15CF1CCF20CF24CF2CCF2DCF2FCF30CF31CF38CF54CF55CF58CF5CCF64CF65 +CF67CF69CF70CF71CF74CF78CF80CF85CF8CCFA1CFA8CFB0CFC4CFE0CFE1CFE4 +CFE8CFF0CFF1CFF3CFF5CFFCD000D004D011D018D02DD034D035D038D03C0000 +C5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000D715D716D717D71AD71BD71DD71ED71FD721D722D723D724D725D726D727 +D72AD72CD72ED72FD730D731D732D733D736D737D73900000000000000000000 +0000D73AD73BD73DD73ED73FD740D741D742D743D745D746D748D74AD74BD74C +D74DD74ED74FD752D753D755D75AD75BD75CD75DD75E00000000000000000000 +0000D75FD762D764D766D767D768D76AD76BD76DD76ED76FD771D772D773D775 +D776D777D778D779D77AD77BD77ED77FD780D782D783D784D785D786D787D78A +D78BD044D045D047D049D050D054D058D060D06CD06DD070D074D07CD07DD081 +D0A4D0A5D0A8D0ACD0B4D0B5D0B7D0B9D0C0D0C1D0C4D0C8D0C9D0D0D0D1D0D3 +D0D4D0D5D0DCD0DDD0E0D0E4D0ECD0EDD0EFD0F0D0F1D0F8D10DD130D131D134 +D138D13AD140D141D143D144D145D14CD14DD150D154D15CD15DD15FD161D168 +D16CD17CD184D188D1A0D1A1D1A4D1A8D1B0D1B1D1B3D1B5D1BAD1BCD1C0D1D8 +D1F4D1F8D207D209D210D22CD22DD230D234D23CD23DD23FD241D248D25C0000 +C6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000D78DD78ED78FD791D792D793D794D795D796D797D79AD79CD79ED79FD7A0 +D7A1D7A2D7A30000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000D264D280D281D284D288D290D291D295D29CD2A0D2A4D2ACD2B1D2B8D2B9 +D2BCD2BFD2C0D2C2D2C8D2C9D2CBD2D4D2D8D2DCD2E4D2E5D2F0D2F1D2F4D2F8 +D300D301D303D305D30CD30DD30ED310D314D316D31CD31DD31FD320D321D325 +D328D329D32CD330D338D339D33BD33CD33DD344D345D37CD37DD380D384D38C +D38DD38FD390D391D398D399D39CD3A0D3A8D3A9D3ABD3ADD3B4D3B8D3BCD3C4 +D3C5D3C8D3C9D3D0D3D8D3E1D3E3D3ECD3EDD3F0D3F4D3FCD3FDD3FFD4010000 +C7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000D408D41DD440D444D45CD460D464D46DD46FD478D479D47CD47FD480D482 +D488D489D48BD48DD494D4A9D4CCD4D0D4D4D4DCD4DFD4E8D4ECD4F0D4F8D4FB +D4FDD504D508D50CD514D515D517D53CD53DD540D544D54CD54DD54FD551D558 +D559D55CD560D565D568D569D56BD56DD574D575D578D57CD584D585D587D588 +D589D590D5A5D5C8D5C9D5CCD5D0D5D2D5D8D5D9D5DBD5DDD5E4D5E5D5E8D5EC +D5F4D5F5D5F7D5F9D600D601D604D608D610D611D613D614D615D61CD6200000 +C8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000D624D62DD638D639D63CD640D645D648D649D64BD64DD651D654D655D658 +D65CD667D669D670D671D674D683D685D68CD68DD690D694D69DD69FD6A1D6A8 +D6ACD6B0D6B9D6BBD6C4D6C5D6C8D6CCD6D1D6D4D6D7D6D9D6E0D6E4D6E8D6F0 +D6F5D6FCD6FDD700D704D711D718D719D71CD720D728D729D72BD72DD734D735 +D738D73CD744D747D749D750D751D754D756D757D758D759D760D761D763D765 +D769D76CD770D774D77CD77DD781D788D789D78CD790D798D799D79BD79D0000 +CA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004F3D4F73504750F952A053EF547554E556095AC15BB6668767B667B767EF +6B4C73C275C27A3C82DB8304885788888A368CC88DCF8EFB8FE699D5523B5374 +5404606A61646BBC73CF811A89BA89D295A34F83520A58BE597859E65E725E79 +61C763C0674667EC687F6F97764E770B78F57A087AFF7C21809D826E82718AEB +95934E6B559D66F76E3478A37AED845B8910874E97A852D8574E582A5D4C611F +61BE6221656267D16A446E1B751875B376E377B07D3A90AF945194529F950000 +CB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000053235CAC753280DB92409598525B580859DC5CA15D175EB75F3A5F4A6177 +6C5F757A75867CE07D737DB17F8C81548221859189418B1B92FC964D9C474ECB +4EF7500B51F1584F6137613E6168653969EA6F1175A5768676D67B8782A584CB +F90093A7958B55805BA25751F9017CB37FB991B5502853BB5C455DE862D2636E +64DA64E76E2070AC795B8DDD8E1EF902907D924592F84E7E4EF650655DFE5EFA +61066957817186548E4793759A2B4E5E5091677068405109528D52926AA20000 +CC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000077BC92109ED452AB602F8FF2504861A963ED64CA683C6A846FC0818889A1 +96945805727D72AC75047D797E6D80A9898B8B7490639D5162896C7A6F547D50 +7F3A8A23517C614A7B9D8B199257938C4EAC4FD3501E50BE510652C152CD537F +577058835E9A5F91617661AC64CE656C666F66BB66F468976D87708570F1749F +74A574CA75D9786C78EC7ADF7AF67D457D938015803F811B83968B668F159015 +93E1980398389A5A9BE84FC25553583A59515B635C4660B86212684268B00000 +CD +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000068E86EAA754C767878CE7A3D7CFB7E6B7E7C8A088AA18C3F968E9DC453E4 +53E9544A547156FA59D15B645C3B5EAB62F765376545657266A067AF69C16CBD +75FC7690777E7A3F7F94800380A1818F82E682FD83F085C1883188B48AA5F903 +8F9C932E96C798679AD89F1354ED659B66F2688F7A408C379D6056F057645D11 +660668B168CD6EFE7428889E9BE46C68F9049AA84F9B516C5171529F5B545DE5 +6050606D62F163A7653B73D97A7A86A38CA2978F4E325BE16208679C74DC0000 +CE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000079D183D38A878AB28DE8904E934B98465ED369E885FF90EDF90551A05B98 +5BEC616368FA6B3E704C742F74D87BA17F5083C589C08CAB95DC9928522E605D +62EC90024F8A5149532158D95EE366E06D38709A72C273D67B5080F1945B5366 +639B7F6B4E565080584A58DE602A612762D069D09B415B8F7D1880B18F5F4EA4 +50D154AC55AC5B0C5DA05DE7652A654E68216A4B72E1768E77EF7D5E7FF981A0 +854E86DF8F038F4E90CA99039A559BAB4E184E454E5D4EC74FF1517752FE0000 +CF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000534053E353E5548E5614577557A25BC75D875ED061FC62D8655167B867E9 +69CB6B506BC66BEC6C426E9D707872D77396740377BF77E97A767D7F800981FC +8205820A82DF88628B338CFC8EC0901190B1926492B699D29A459CE99DD79F9C +570B5C4083CA97A097AB9EB4541B7A987FA488D98ECD90E158005C4863987A9F +5BAE5F137A797AAE828E8EAC5026523852F85377570862F363726B0A6DC37737 +53A5735785688E7695D5673A6AC36F708A6D8ECC994BF90666776B788CB40000 +D0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009B3CF90753EB572D594E63C669FB73EA78457ABA7AC57CFE8475898F8D73 +903595A852FB574775477B6083CC921EF9086A58514B524B5287621F68D86975 +969950C552A452E461C365A4683969FF747E7B4B82B983EB89B28B398FD19949 +F9094ECA599764D266116A8E7434798179BD82A9887E887F895FF90A93264F0B +53CA602562716C727D1A7D664E98516277DC80AF4F014F0E5176518055DC5668 +573B57FA57FC5914594759935BC45C905D0E5DF15E7E5FCC628065D765E30000 +D1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000671E671F675E68CB68C46A5F6B3A6C236C7D6C826DC773987426742A7482 +74A37578757F788178EF794179477948797A7B957D007DBA7F888006802D808C +8A188B4F8C488D779321932498E299519A0E9A0F9A659E927DCA4F76540962EE +685491D155AB513AF90BF90C5A1C61E6F90D62CF62FFF90EF90FF910F911F912 +F91390A3F914F915F916F917F9188AFEF919F91AF91BF91C6696F91D7156F91E +F91F96E3F920634F637A5357F921678F69606E73F9227537F923F924F9250000 +D2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007D0DF926F927887256CA5A18F928F929F92AF92BF92C4E43F92D51675948 +67F08010F92E59735E74649A79CA5FF5606C62C8637B5BE75BD752AAF92F5974 +5F296012F930F931F9327459F933F934F935F936F937F93899D1F939F93AF93B +F93CF93DF93EF93FF940F941F942F9436FC3F944F94581BF8FB260F1F946F947 +8166F948F9495C3FF94AF94BF94CF94DF94EF94FF950F9515AE98A25677B7D10 +F952F953F954F955F956F95780FDF958F9595C3C6CE5533F6EBA591A83360000 +D3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004E394EB64F4655AE571858C75F5665B765E66A806BB56E4D77ED7AEF7C1E +7DDE86CB88929132935B64BB6FBE737A75B890545556574D61BA64D466C76DE1 +6E5B6F6D6FB975F0804381BD854189838AC78B5A931F6C9375537B548E0F905D +5510580258585E626207649E68E075767CD687B39EE84EE35788576E59275C0D +5CB15E365F85623464E173B381FA888B8CB8968A9EDB5B855FB760B350125200 +52305716583558575C0E5C605CF65D8B5EA65F9260BC63116389641768430000 +D4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000068F96AC26DD86E216ED46FE471FE76DC777979B17A3B840489A98CED8DF3 +8E4890039014905390FD934D967697DC6BD27006725872A27368776379BF7BE4 +7E9B8B8058A960C7656665FD66BE6C8C711E71C98C5A98134E6D7A814EDD51AC +51CD52D5540C61A76771685068DF6D1E6F7C75BC77B37AE580F484639285515C +6597675C679375D87AC78373F95A8C469017982D5C6F81C0829A9041906F920D +5F975D9D6A5971C8767B7B4985E48B0491279A30558761F6F95B76697F850000 +D5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000863F87BA88F8908FF95C6D1B70D973DE7D61843DF95D916A99F1F95E4E82 +53756B046B12703E721B862D9E1E524C8FA35D5064E5652C6B166FEB7C437E9C +85CD896489BD62C981D8881F5ECA67176D6A72FC7405746F878290DE4F865D0D +5FA0840A51B763A075654EAE5006516951C968816A117CAE7CB17CE7826F8AD2 +8F1B91CF4FB6513752F554425EEC616E623E65C56ADA6FFE792A85DC882395AD +9A629A6A9E979ECE529B66C66B77701D792B8F6297426190620065236F230000 +D6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000714974897DF4806F84EE8F269023934A51BD521752A36D0C70C888C25EC9 +65826BAE6FC27C3E73754EE44F3656F9F95F5CBA5DBA601C73B27B2D7F9A7FCE +8046901E923496F6974898189F614F8B6FA779AE91B496B752DEF960648864C4 +6AD36F5E7018721076E780018606865C8DEF8F0597329B6F9DFA9E75788C797F +7DA083C993049E7F9E938AD658DF5F046727702774CF7C60807E512170287262 +78CA8CC28CDA8CF496F74E8650DA5BEE5ED6659971CE764277AD804A84FC0000 +D7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000907C9B279F8D58D85A415C626A136DDA6F0F763B7D2F7E37851E893893E4 +964B528965D267F369B46D416E9C700F7409746075597624786B8B2C985E516D +622E96784F96502B5D196DEA7DB88F2A5F8B61446817F961968652D2808B51DC +51CC695E7A1C7DBE83F196754FDA52295398540F550E5C6560A7674E68A86D6C +728172F874067483F96275E27C6C7F797FB8838988CF88E191CC91D096E29BC9 +541D6F7E71D0749885FA8EAA96A39C579E9F67976DCB743381E89716782C0000 +D8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007ACB7B207C926469746A75F278BC78E899AC9B549EBB5BDE5E556F20819C +83AB90884E07534D5A295DD25F4E6162633D666966FC6EFF6F2B7063779E842C +8513883B8F1399459C3B551C62B9672B6CAB8309896A977A4EA159845FD85FD9 +671B7DB27F548292832B83BD8F1E909957CB59B95A925BD06627679A68856BCF +71647F758CB78CE390819B4581088C8A964C9A409EA55B5F6C13731B76F276DF +840C51AA8993514D519552C968C96C94770477207DBF7DEC97629EB56EC50000 +D9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000851151A5540D547D660E669D69276E9F76BF7791831784C2879F91699298 +9CF488824FAE519252DF59C65E3D61556478647966AE67D06A216BCD6BDB725F +72617441773877DB801782BC83058B008B288C8C67286C90726776EE77667A46 +9DA96B7F6C92592267268499536F589359995EDF63CF663467736E3A732B7AD7 +82D7932852D95DEB61AE61CB620A62C764AB65E069596B666BCB712173F7755D +7E46821E8302856A8AA38CBF97279D6158A89ED85011520E543B554F65870000 +DA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006C767D0A7D0B805E868A958096EF52FF6C95726954735A9A5C3E5D4B5F4C +5FAE672A68B669636E3C6E4477097C737F8E85878B0E8FF797619EF45CB760B6 +610D61AB654F65FB65FC6C116CEF739F73C97DE195945BC6871C8B10525D535A +62CD640F64B267346A386CCA73C0749E7B947C957E1B818A823685848FEB96F9 +99C14F34534A53CD53DB62CC642C6500659169C36CEE6F5873ED7554762276E4 +76FC78D078FB792C7D46822C87E08FD4981298EF52C362D464A56E246F510000 +DB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000767C8DCB91B192629AEE9B435023508D574A59A85C285E475F77623F653E +65B965C16609678B699C6EC278C57D2180AA8180822B82B384A1868C8A2A8B17 +90A696329F90500D4FF3F96357F95F9862DC6392676F6E43711976C380CC80DA +88F488F589198CE08F29914D966A4F2F4F705E1B67CF6822767D767E9B445E61 +6A0A716971D4756AF9647E41854385E998DC4F107B4F7F7095A551E15E0668B5 +6C3E6C4E6CDB72AF7BC483036CD5743A50FB528858C164D86A9774A776560000 +DC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000078A7861795E29739F965535E5F018B8A8FA88FAF908A522577A59C499F08 +4E19500251755C5B5E77661E663A67C468C570B3750175C579C97ADD8F279920 +9A084FDD582158315BF6666E6B656D116E7A6F7D73E4752B83E988DC89138B5C +8F144F0F50D55310535C5B935FA9670D798F8179832F8514890789868F398F3B +99A59C12672C4E764FF859495C015CEF5CF0636768D270FD71A2742B7E2B84EC +8702902292D29CF34E0D4ED84FEF50855256526F5426549057E0592B5A660000 +DD +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005B5A5B755BCC5E9CF9666276657765A76D6E6EA572367B267C3F7F368150 +8151819A8240829983A98A038CA08CE68CFB8D748DBA90E891DC961C964499D9 +9CE7531752065429567458B35954596E5FFF61A4626E66106C7E711A76C67C89 +7CDE7D1B82AC8CC196F0F9674F5B5F175F7F62C25D29670B68DA787C7E439D6C +4E1550995315532A535159835A625E8760B2618A624962796590678769A76BD4 +6BD66BD76BD86CB8F968743575FA7812789179D579D87C837DCB7FE180A50000 +DE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000813E81C283F2871A88E88AB98B6C8CBB9119975E98DB9F3B56AC5B2A5F6C +658C6AB36BAF6D5C6FF17015725D73AD8CA78CD3983B61916C3780589A014E4D +4E8B4E9B4ED54F3A4F3C4F7F4FDF50FF53F253F8550655E356DB58EB59625A11 +5BEB5BFA5C045DF35E2B5F99601D6368659C65AF67F667FB68AD6B7B6C996CD7 +6E23700973457802793E7940796079C17BE97D177D728086820D838E84D186C7 +88DF8A508A5E8B1D8CDC8D668FAD90AA98FC99DF9E9D524AF9696714F96A0000 +DF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005098522A5C7165636C5573CA7523759D7B97849C917897304E7764926BBA +715E85A94E09F96B674968EE6E17829F8518886B63F76F81921298AF4E0A50B7 +50CF511F554655AA56175B405C195CE05E385E8A5EA05EC260F368516A616E58 +723D724072C076F879657BB17FD488F389F48A738C618CDE971C585E74BD8CFD +55C7F96C7A617D2282727272751F7525F96D7B19588558FB5DBC5E8F5EB65F90 +60556292637F654D669166D966F8681668F27280745E7B6E7D6E7DD67F720000 +E0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000080E5821285AF897F8A93901D92E49ECD9F205915596D5E2D60DC66146673 +67906C506DC56F5F77F378A984C691CB932B4ED950CA514855845B0B5BA36247 +657E65CB6E32717D74017444748774BF766C79AA7DDA7E557FA8817A81B38239 +861A87EC8A758DE3907892919425994D9BAE53685C5169546CC46D296E2B820C +859B893B8A2D8AAA96EA9F67526166B96BB27E9687FE8D0D9583965D651D6D89 +71EEF96E57CE59D35BAC602760FA6210661F665F732973F976DB77017B6C0000 +E1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008056807281658AA091924E1652E26B726D177A057B397D30F96F8CB053EC +562F58515BB55C0F5C115DE2624063836414662D68B36CBC6D886EAF701F70A4 +71D27526758F758E76197B117BE07C2B7D207D39852C856D86078A34900D9061 +90B592B797F69A374FD75C6C675F6D917C9F7E8C8B168D16901F5B6B5DFD640D +84C0905C98E173875B8B609A677E6DDE8A1F8AA69001980C5237F9707051788E +9396887091D74FEE53D755FD56DA578258FD5AC25B885CAB5CC05E2561010000 +E2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000620D624B6388641C653665786A396B8A6C346D196F3171E772E973787407 +74B27626776179C07A577AEA7CB97D8F7DAC7E617F9E81298331849084DA85EA +88968AB08B908F3890429083916C929692B9968B96A796A896D6970098089996 +9AD39B1A53D4587E59195B705BBF6DD16F5A719F742174B9808583FD5DE15F87 +5FAA604265EC6812696F6A536B896D356DF373E376FE77AC7B4D7D148123821C +834084F485638A628AC49187931E980699B4620C88538FF092655D075D270000 +E3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005D69745F819D87686FD562FE7FD2893689724E1E4E5850E752DD5347627F +66077E698805965E4F8D5319563659CB5AA45C385C4E5C4D5E025F11604365BD +662F664267BE67F4731C77E2793A7FC5849484CD89968A668A698AE18C558C7A +57F45BD45F0F606F62ED690D6B966E5C71847BD287558B588EFE98DF98FE4F38 +4F814FE1547B5A205BB8613C65B0666871FC7533795E7D33814E81E3839885AA +85CE87038A0A8EAB8F9BF9718FC559315BA45BE660895BE95C0B5FC36C810000 +E4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000F9726DF1700B751A82AF8AF64EC05341F97396D96C0F4E9E4FC45152555E +5A255CE86211725982BD83AA86FE88598A1D963F96C599139D099D5D580A5CB3 +5DBD5E4460E1611563E16A026E2591029354984E9C109F775B895CB86309664F +6848773C96C1978D98549B9F65A18B018ECB95BC55355CA95DD65EB56697764C +83F495C758D362BC72CE9D284EF0592E600F663B6B8379E79D26539354C057C3 +5D16611B66D66DAF788D827E969897445384627C63966DB27E0A814B984D0000 +E5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006AFB7F4C9DAF9E1A4E5F503B51B6591C60F963F66930723A8036F97491CE +5F31F975F9767D0482E5846F84BB85E58E8DF9774F6FF978F97958E45B436059 +63DA6518656D6698F97A694A6A236D0B7001716C75D2760D79B37A70F97B7F8A +F97C8944F97D8B9391C0967DF97E990A57045FA165BC6F01760079A68A9E99AD +9B5A9F6C510461B662916A8D81C6504358305F6671098A008AFA5B7C86164FFA +513C56B4594463A96DF95DAA696D51864E884F59F97FF980F9815982F9820000 +E6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000F9836B5F6C5DF98474B57916F9858207824583398F3F8F5DF9869918F987 +F988F9894EA6F98A57DF5F796613F98BF98C75AB7E798B6FF98D90069A5B56A5 +582759F85A1F5BB4F98E5EF6F98FF9906350633BF991693D6C876CBF6D8E6D93 +6DF56F14F99270DF71367159F99371C371D5F994784F786FF9957B757DE3F996 +7E2FF997884D8EDFF998F999F99A925BF99B9CF6F99CF99DF99E60856D85F99F +71B1F9A0F9A195B153ADF9A2F9A3F9A467D3F9A5708E71307430827682D20000 +E7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000F9A695BB9AE59E7D66C4F9A771C18449F9A8F9A9584BF9AAF9AB5DB85F71 +F9AC6620668E697969AE6C386CF36E366F416FDA701B702F715071DF7370F9AD +745BF9AE74D476C87A4E7E93F9AFF9B082F18A608FCEF9B19348F9B29719F9B3 +F9B44E42502AF9B5520853E166F36C6D6FCA730A777F7A6282AE85DD8602F9B6 +88D48A638B7D8C6BF9B792B3F9B8971398104E944F0D4FC950B25348543E5433 +55DA586258BA59675A1B5BE4609FF9B961CA655665FF666468A76C5A6FB30000 +E8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000070CF71AC73527B7D87088AA49C329F075C4B6C8373447389923A6EAB7465 +761F7A697E15860A514058C564C174EE751576707FC1909596CD99546E2674E6 +7AA97AAA81E586D987788A1B5A495B8C5B9B68A169006D6373A97413742C7897 +7DE97FEB81188155839E8C4C962E981166F05F8065FA67896C6A738B502D5A03 +6B6A77EE59165D6C5DCD7325754FF9BAF9BB50E551F9582F592D599659DA5BE5 +F9BCF9BD5DA262D76416649364FEF9BE66DCF9BF6A48F9C071FF7464F9C10000 +E9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007A887AAF7E477E5E80008170F9C287EF89818B209059F9C390809952617E +6B326D747E1F89258FB14FD150AD519752C757C758895BB95EB8614269956D8C +6E676EB6719474627528752C8073833884C98E0A939493DEF9C44E8E4F515076 +512A53C853CB53F35B875BD35C24611A618265F4725B7397744076C279507991 +79B97D067FBD828B85D5865E8FC2904790F591EA968596E896E952D65F6765ED +6631682F715C7A3690C1980A4E91F9C56A526B9E6F907189801882B885530000 +EA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000904B969596F297FB851A9B314E90718A96C45143539F54E15713571257A3 +5A9B5AC45BC36028613F63F46C856D396E726E907230733F745782D188818F45 +9060F9C6966298589D1B67088D8A925E4F4D504950DE5371570D59D45A015C09 +617066906E2D7232744B7DEF80C3840E8466853F875F885B89188B02905597CB +9B4F4E734F915112516AF9C7552F55A95B7A5BA55E7C5E7D5EBE60A060DF6108 +610963C465386709F9C867D467DAF9C9696169626CB96D27F9CA6E38F9CB0000 +EB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006FE173367337F9CC745C7531F9CD7652F9CEF9CF7DAD81FE843888D58A98 +8ADB8AED8E308E42904A903E907A914991C9936EF9D0F9D15809F9D26BD38089 +80B2F9D3F9D45141596B5C39F9D5F9D66F6473A780E48D07F9D79217958FF9D8 +F9D9F9DAF9DB807F620E701C7D68878DF9DC57A0606961476BB78ABE928096B1 +4E59541F6DEB852D967097F398EE63D66CE3909151DD61C981BA9DF94F9D501A +51005B9C610F61FF64EC69056BC5759177E37FA98264858F87FB88638ABC0000 +EC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008B7091AB4E8C4EE54F0AF9DDF9DE593759E8F9DF5DF25F1B5F5B6021F9E0 +F9E1F9E2F9E3723E73E5F9E4757075CDF9E579FBF9E6800C8033808482E18351 +F9E7F9E88CBD8CB39087F9E9F9EA98F4990CF9EBF9EC703776CA7FCA7FCC7FFC +8B1A4EBA4EC152035370F9ED54BD56E059FB5BC55F155FCD6E6EF9EEF9EF7D6A +8335F9F086938A8DF9F1976D9777F9F2F9F34E004F5A4F7E58F965E56EA29038 +93B099B94EFB58EC598A59D96041F9F4F9F57A14F9F6834F8CC3516553440000 +ED +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000F9F7F9F8F9F94ECD52695B5582BF4ED4523A54A859C959FF5B505B575B5C +606361486ECB7099716E738674F775B578C17D2B800581EA8328851785C98AEE +8CC796CC4F5C52FA56BC65AB6628707C70B872357DBD828D914C96C09D725B71 +68E76B986F7A76DE5C9166AB6F5B7BB47C2A883696DC4E084ED75320583458BB +58EF596C5C075E335E845F35638C66B267566A1F6AA36B0C6F3F7246F9FA7350 +748B7AE07CA7817881DF81E7838A846C8523859485CF88DD8D1391AC95770000 +EE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000969C518D54C957285BB0624D6750683D68936E3D6ED3707D7E2188C18CA1 +8F099F4B9F4E722D7B8F8ACD931A4F474F4E5132548059D05E9562B56775696E +6A176CAE6E1A72D9732A75BD7BB87D3582E783F9845785F78A5B8CAF8E879019 +90B896CE9F5F52E3540A5AE15BC2645865756EF472C4F9FB76847A4D7B1B7C4D +7E3E7FDF837B8B2B8CCA8D648DE18E5F8FEA8FF9906993D14F434F7A50B35168 +5178524D526A5861587C59605C085C555EDB609B623068136BBF6C086FB10000 +EF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000714E742075307538755176727B4C7B8B7BAD7BC67E8F8A6E8F3E8F49923F +92939322942B96FB985A986B991E5207622A62986D5976647ACA7BC07D765360 +5CBE5E976F3870B97C9897119B8E9EDE63A5647A87764E014E954EAD505C5075 +544859C35B9A5E405EAD5EF75F8160C5633A653F657465CC6676667867FE6968 +6A896B636C406DC06DE86E1F6E5E701E70A1738E73FD753A775B7887798E7A0B +7A7D7CBE7D8E82478A028AEA8C9E912D914A91D8926692CC9320970697560000 +F0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000975C98029F0E52365291557C58245E1D5F1F608C63D068AF6FDF796D7B2C +81CD85BA88FD8AF88E44918D9664969B973D984C9F4A4FCE514651CB52A95632 +5F145F6B63AA64CD65E9664166FA66F9671D689D68D769FD6F156F6E716771E5 +722A74AA773A7956795A79DF7A207A957C977CDF7D447E70808785FB86A48A54 +8ABF8D998E819020906D91E3963B96D59CE565CF7C078DB393C35B585C0A5352 +62D9731D50275B975F9E60B0616B68D56DD9742E7A2E7D427D9C7E31816B0000 +F1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008E2A8E35937E94184F5057505DE65EA7632B7F6A4E3B4F4F4F8F505A59DD +80C4546A546855FE594F5B995DDE5EDA665D673167F1682A6CE86D326E4A6F8D +70B773E075877C4C7D027D2C7DA2821F86DB8A3B8A858D708E8A8F339031914E +9152944499D07AF97CA54FCA510151C657C85BEF5CFB66596A3D6D5A6E966FEC +710C756F7AE388229021907596CB99FF83014E2D4EF2884691CD537D6ADB696B +6C41847A589E618E66FE62EF70DD751175C77E5284B88B498D084E4B53EA0000 +F2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000054AB573057405FD763016307646F652F65E8667A679D67B36B626C606C9A +6F2C77E57825794979577D1980A2810281F3829D82B787188A8CF9FC8D048DBE +907276F47A197A377E548077550755D45875632F64226649664B686D699B6B84 +6D256EB173CD746874A1755B75B976E1771E778B79E67E097E1D81FB852F8897 +8A3A8CD18EEB8FB0903293AD9663967397074F8453F159EA5AC95E19684E74C6 +75BE79E97A9281A386ED8CEA8DCC8FED659F6715F9FD57F76F577DDD8F2F0000 +F3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000093F696C65FB561F26F844E144F98501F53C955DF5D6F5DEE6B216B6478CB +7B9AF9FE8E498ECA906E6349643E77407A84932F947F9F6A64B06FAF71E674A8 +74DA7AC47C127E827CB27E988B9A8D0A947D9910994C52395BDF64E6672D7D2E +50ED53C358796158615961FA65AC7AD98B928B9650095021527555315A3C5EE0 +5F706134655E660C663666A269CD6EC46F32731676217A938139825983D684BC +50B557F05BC05BE85F6963A178267DB583DC852191C791F5518A67F57B560000 +F4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008CAC51C459BB60BD8655501CF9FF52545C3A617D621A62D364F265A56ECC +7620810A8E60965F96BB4EDF5343559859295DDD64C56CC96DFA73947A7F821B +85A68CE48E10907791E795E1962197C651F854F255865FB964A46F887DB48F1F +8F4D943550C95C166CBE6DFB751B77BB7C3D7C648A798AC2581E59BE5E166377 +7252758A776B8ADC8CBC8F125EF366746DF8807D83C18ACB97519BD6FA005243 +66FF6D956EEF7DE08AE6902E905E9AD4521D527F54E86194628462DB68A20000 +F5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006912695A6A3570927126785D7901790E79D27A0D8096827882D583498549 +8C828D859162918B91AE4FC356D171ED77D7870089F85BF85FD6675190A853E2 +585A5BF560A4618164607E3D80708525928364AE50AC5D146700589C62BD63A8 +690E69786A1E6E6B76BA79CB82BB84298ACF8DA88FFD9112914B919C93109318 +939A96DB9A369C0D4E11755C795D7AFA7B517BC97E2E84C48E598E748EF89010 +6625693F744351FA672E9EDC51455FE06C9687F2885D887760B481B584030000 +F6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008D0553D6543956345A365C31708A7FE0805A810681ED8DA391899A5F9DF2 +50744EC453A060FB6E2C5C644F88502455E45CD95E5F606568946CBB6DC471BE +75D475F476617A1A7A497DC77DFB7F6E81F486A98F1C96C999B39F52524752C5 +98ED89AA4E0367D26F064FB55BE267956C886D78741B782791DD937C87C479E4 +7A315FEB4ED654A4553E58AE59A560F0625362D6673669558235964099B199DD +502C53535544577CFA016258FA0264E2666B67DD6FC16FEF742274388A170000 +F7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000094385451560657665F48619A6B4E705870AD7DBB8A95596A812B63A27708 +803D8CAA5854642D69BB5B955E116E6FFA038569514C53F0592A6020614B6B86 +6C706CF07B1E80CE82D48DC690B098B1FA0464C76FA464916504514E5410571F +8A0E615F6876FA0575DB7B527D71901A580669CC817F892A9000983950785957 +59AC6295900F9B2A615D727995D657615A465DF4628A64AD64FA67776CE26D3E +722C743678347F7782AD8DDB981752245742677F724874E38CA98FA692110000 +F8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000962A516B53ED634C4F695504609665576C9B6D7F724C72FD7A1789878C9D +5F6D6F8E70F981A8610E4FBF504F624172477BC77DE87FE9904D97AD9A198CB6 +576A5E7367B0840D8A5554205B165E635EE25F0A658380BA853D9589965B4F48 +5305530D530F548654FA57035E036016629B62B16355FA066CE16D6675B17832 +80DE812F82DE846184B2888D8912900B92EA98FD9B915E4566B466DD70117206 +FA074FF5527D5F6A615367536A196F0274E2796888688C7998C798C49A430000 +F9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000054C17A1F69538AF78C4A98A899AE5F7C62AB75B276AE88AB907F96425339 +5F3C5FC56CCC73CC7562758B7B4682FE999D4E4F903C4E0B4F5553A6590F5EC8 +66306CB37455837787668CC09050971E9C1558D15B7886508B149DB45BD26068 +608D65F16C576F226FA3701A7F557FF095919592965097D352728F4451FD542B +54B85563558A6ABB6DB57DD88266929C96779E79540854C876D286E495A495D4 +965C4EA24F0959EE5AE65DF760526297676D68416C866E2F7F38809B822A0000 +FA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000FA08FA0998054EA5505554B35793595A5B695BB361C869776D77702387F9 +89E38A728AE7908299ED9AB852BE683850165E78674F8347884C4EAB541156AE +73E6911597FF9909995799995653589F865B8A3161B26AF6737B8ED26B4796AA +9A57595572008D6B97694FD45CF45F2661F8665B6CEB70AB738473B973FE7729 +774D7D437D627E2382378852FA0A8CE29249986F5B517A74884098015ACC4FE0 +5354593E5CFD633E6D7972F98105810783A292CF98304EA851445211578B0000 +FB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005F626CC26ECE7005705070AF719273E97469834A87A28861900890A293A3 +99A8516E5F5760E0616766B385598E4A91AF978B4E4E4E92547C58D558FA597D +5CB55F2762366248660A66676BEB6D696DCF6E566EF86F946FE06FE9705D72D0 +7425745A74E07693795C7CCA7E1E80E182A6846B84BF864E865F87748B778C6A +93AC9800986560D1621691775A5A660F6DF76E3E743F9B425FFD60DA7B0F54C4 +5F186C5E6CD36D2A70D87D0586798A0C9D3B5316548C5B056A3A706B75750000 +FC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000798D79BE82B183EF8A718B418CA89774FA0B64F4652B78BA78BB7A6B4E38 +559A59505BA65E7B60A363DB6B61666568536E19716574B07D0890849A699C25 +6D3B6ED1733E8C4195CA51F05E4C5FA8604D60F66130614C6643664469A56CC1 +6E5F6EC96F62714C749C76877BC17C27835287579051968D9EC3532F56DE5EFB +5F8A6062609461F7666667036A9C6DEE6FAE7070736A7E6A81BE833486D48AA8 +8CC4528373725B966A6B940454EE56865B5D6548658566C9689F6D8D6DC60000 +FD +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000723B80B491759A4D4FAF5019539A540E543C558955C55E3F5F8C673D7166 +73DD900552DB52F3586458CE7104718F71FB85B08A13668885A855A76684714A +8431534955996BC15F595FBD63EE668971478AF18F1D9EBE4F11643A70CB7566 +866760648B4E9DF8514751F653086D3680F89ED166156B23709875D554035C79 +7D078A166B206B3D6B46543860706D3D7FD5820850D651DE559C566B56CD59EC +5B095E0C619961986231665E66E6719971B971BA72A779A77A007FB28A700000 diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp950.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp950.enc new file mode 100644 index 00000000..f33d7854 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/cp950.enc @@ -0,0 +1,1499 @@ +# Encoding file: cp950, multi-byte +M +003F 0 88 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +0080008100820083008400850086008700880089008A008B008C008D008E008F +0090009100920093009400950096009700980099009A009B009C009D009E009F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +A1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3000FF0C30013002FF0E2027FF1BFF1AFF1FFF01FE3020262025FE50FE51FE52 +00B7FE54FE55FE56FE57FF5C2013FE312014FE332574FE34FE4FFF08FF09FE35 +FE36FF5BFF5DFE37FE3830143015FE39FE3A30103011FE3BFE3C300A300BFE3D +FE3E30083009FE3FFE40300C300DFE41FE42300E300FFE43FE44FE59FE5A0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000FE5BFE5CFE5DFE5E20182019201C201D301D301E20352032FF03FF06FF0A +203B00A7300325CB25CF25B325B225CE2606260525C725C625A125A025BD25BC +32A3210500AFFFE3FF3F02CDFE49FE4AFE4DFE4EFE4BFE4CFE5FFE60FE61FF0B +FF0D00D700F700B1221AFF1CFF1EFF1D226622672260221E22522261FE62FE63 +FE64FE65FE66FF5E2229222A22A52220221F22BF33D233D1222B222E22352234 +26402642229522992191219321902192219621972199219822252223FF0F0000 +A2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +FF3C2215FE68FF04FFE53012FFE0FFE1FF05FF2021032109FE69FE6AFE6B33D5 +339C339D339E33CE33A1338E338F33C400B05159515B515E515D5161516355E7 +74E97CCE25812582258325842585258625872588258F258E258D258C258B258A +2589253C2534252C2524251C2594250025022595250C251025142518256D0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000256E2570256F2550255E256A256125E225E325E525E4257125722573FF10 +FF11FF12FF13FF14FF15FF16FF17FF18FF192160216121622163216421652166 +216721682169302130223023302430253026302730283029534153445345FF21 +FF22FF23FF24FF25FF26FF27FF28FF29FF2AFF2BFF2CFF2DFF2EFF2FFF30FF31 +FF32FF33FF34FF35FF36FF37FF38FF39FF3AFF41FF42FF43FF44FF45FF46FF47 +FF48FF49FF4AFF4BFF4CFF4DFF4EFF4FFF50FF51FF52FF53FF54FF55FF560000 +A3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +FF57FF58FF59FF5A039103920393039403950396039703980399039A039B039C +039D039E039F03A003A103A303A403A503A603A703A803A903B103B203B303B4 +03B503B603B703B803B903BA03BB03BC03BD03BE03BF03C003C103C303C403C5 +03C603C703C803C931053106310731083109310A310B310C310D310E310F0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00003110311131123113311431153116311731183119311A311B311C311D311E +311F312031213122312331243125312631273128312902D902C902CA02C702CB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000020AC00000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +A4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4E004E594E014E034E434E5D4E864E8C4EBA513F5165516B51E052005201529B +53155341535C53C84E094E0B4E084E0A4E2B4E3851E14E454E484E5F4E5E4E8E +4EA15140520352FA534353C953E3571F58EB5915592759735B505B515B535BF8 +5C0F5C225C385C715DDD5DE55DF15DF25DF35DFE5E725EFE5F0B5F13624D0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004E114E104E0D4E2D4E304E394E4B5C394E884E914E954E924E944EA24EC1 +4EC04EC34EC64EC74ECD4ECA4ECB4EC4514351415167516D516E516C519751F6 +52065207520852FB52FE52FF53165339534853475345535E538453CB53CA53CD +58EC5929592B592A592D5B545C115C245C3A5C6F5DF45E7B5EFF5F145F155FC3 +62086236624B624E652F6587659765A465B965E566F0670867286B206B626B79 +6BCB6BD46BDB6C0F6C34706B722A7236723B72477259725B72AC738B4E190000 +A5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4E164E154E144E184E3B4E4D4E4F4E4E4EE54ED84ED44ED54ED64ED74EE34EE4 +4ED94EDE514551445189518A51AC51F951FA51F8520A52A0529F530553065317 +531D4EDF534A534953615360536F536E53BB53EF53E453F353EC53EE53E953E8 +53FC53F853F553EB53E653EA53F253F153F053E553ED53FB56DB56DA59160000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000592E5931597459765B555B835C3C5DE85DE75DE65E025E035E735E7C5F01 +5F185F175FC5620A625362546252625165A565E6672E672C672A672B672D6B63 +6BCD6C116C106C386C416C406C3E72AF7384738974DC74E67518751F75287529 +7530753175327533758B767D76AE76BF76EE77DB77E277F3793A79BE7A747ACB +4E1E4E1F4E524E534E694E994EA44EA64EA54EFF4F094F194F0A4F154F0D4F10 +4F114F0F4EF24EF64EFB4EF04EF34EFD4F014F0B514951475146514851680000 +A6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5171518D51B0521752115212520E521652A3530853215320537053715409540F +540C540A54105401540B54045411540D54085403540E5406541256E056DE56DD +573357305728572D572C572F57295919591A59375938598459785983597D5979 +598259815B575B585B875B885B855B895BFA5C165C795DDE5E065E765E740000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005F0F5F1B5FD95FD6620E620C620D62106263625B6258653665E965E865EC +65ED66F266F36709673D6734673167356B216B646B7B6C166C5D6C576C596C5F +6C606C506C556C616C5B6C4D6C4E7070725F725D767E7AF97C737CF87F367F8A +7FBD80018003800C80128033807F8089808B808C81E381EA81F381FC820C821B +821F826E8272827E866B8840884C8863897F96214E324EA84F4D4F4F4F474F57 +4F5E4F344F5B4F554F304F504F514F3D4F3A4F384F434F544F3C4F464F630000 +A7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4F5C4F604F2F4F4E4F364F594F5D4F484F5A514C514B514D517551B651B75225 +52245229522A522852AB52A952AA52AC532353735375541D542D541E543E5426 +544E542754465443543354485442541B5429544A5439543B5438542E54355436 +5420543C54405431542B541F542C56EA56F056E456EB574A57515740574D0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005747574E573E5750574F573B58EF593E599D599259A8599E59A359995996 +598D59A45993598A59A55B5D5B5C5B5A5B5B5B8C5B8B5B8F5C2C5C405C415C3F +5C3E5C905C915C945C8C5DEB5E0C5E8F5E875E8A5EF75F045F1F5F645F625F77 +5F795FD85FCC5FD75FCD5FF15FEB5FF85FEA6212621162846297629662806276 +6289626D628A627C627E627962736292626F6298626E62956293629162866539 +653B653865F166F4675F674E674F67506751675C6756675E6749674667600000 +A8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +675367576B656BCF6C426C5E6C996C816C886C896C856C9B6C6A6C7A6C906C70 +6C8C6C686C966C926C7D6C836C726C7E6C746C866C766C8D6C946C986C827076 +707C707D707872627261726072C472C27396752C752B75377538768276EF77E3 +79C179C079BF7A767CFB7F5580968093809D8098809B809A80B2826F82920000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000828B828D898B89D28A008C378C468C558C9D8D648D708DB38EAB8ECA8F9B +8FB08FC28FC68FC58FC45DE1909190A290AA90A690A3914991C691CC9632962E +9631962A962C4E264E564E734E8B4E9B4E9E4EAB4EAC4F6F4F9D4F8D4F734F7F +4F6C4F9B4F8B4F864F834F704F754F884F694F7B4F964F7E4F8F4F914F7A5154 +51525155516951775176517851BD51FD523B52385237523A5230522E52365241 +52BE52BB5352535453535351536653775378537953D653D453D7547354750000 +A9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5496547854955480547B5477548454925486547C549054715476548C549A5462 +5468548B547D548E56FA57835777576A5769576157665764577C591C59495947 +59485944595459BE59BB59D459B959AE59D159C659D059CD59CB59D359CA59AF +59B359D259C55B5F5B645B635B975B9A5B985B9C5B995B9B5C1A5C485C450000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005C465CB75CA15CB85CA95CAB5CB15CB35E185E1A5E165E155E1B5E115E78 +5E9A5E975E9C5E955E965EF65F265F275F295F805F815F7F5F7C5FDD5FE05FFD +5FF55FFF600F6014602F60356016602A6015602160276029602B601B62166215 +623F623E6240627F62C962CC62C462BF62C262B962D262DB62AB62D362D462CB +62C862A862BD62BC62D062D962C762CD62B562DA62B162D862D662D762C662AC +62CE653E65A765BC65FA66146613660C66066602660E6600660F6615660A0000 +AA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6607670D670B676D678B67956771679C677367776787679D6797676F6770677F +6789677E67906775679A6793677C676A67726B236B666B676B7F6C136C1B6CE3 +6CE86CF36CB16CCC6CE56CB36CBD6CBE6CBC6CE26CAB6CD56CD36CB86CC46CB9 +6CC16CAE6CD76CC56CF16CBF6CBB6CE16CDB6CCA6CAC6CEF6CDC6CD66CE00000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007095708E7092708A7099722C722D723872487267726972C072CE72D972D7 +72D073A973A8739F73AB73A5753D759D7599759A768476C276F276F477E577FD +793E7940794179C979C87A7A7A797AFA7CFE7F547F8C7F8B800580BA80A580A2 +80B180A180AB80A980B480AA80AF81E581FE820D82B3829D829982AD82BD829F +82B982B182AC82A582AF82B882A382B082BE82B7864E8671521D88688ECB8FCE +8FD48FD190B590B890B190B691C791D195779580961C9640963F963B96440000 +AB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +964296B996E89752975E4E9F4EAD4EAE4FE14FB54FAF4FBF4FE04FD14FCF4FDD +4FC34FB64FD84FDF4FCA4FD74FAE4FD04FC44FC24FDA4FCE4FDE4FB751575192 +519151A0524E5243524A524D524C524B524752C752C952C352C1530D5357537B +539A53DB54AC54C054A854CE54C954B854A654B354C754C254BD54AA54C10000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000054C454C854AF54AB54B154BB54A954A754BF56FF5782578B57A057A357A2 +57CE57AE579359555951594F594E595059DC59D859FF59E359E85A0359E559EA +59DA59E65A0159FB5B695BA35BA65BA45BA25BA55C015C4E5C4F5C4D5C4B5CD9 +5CD25DF75E1D5E255E1F5E7D5EA05EA65EFA5F085F2D5F655F885F855F8A5F8B +5F875F8C5F896012601D60206025600E6028604D60706068606260466043606C +606B606A6064624162DC6316630962FC62ED630162EE62FD630762F162F70000 +AC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +62EF62EC62FE62F463116302653F654565AB65BD65E26625662D66206627662F +661F66286631662466F767FF67D367F167D467D067EC67B667AF67F567E967EF +67C467D167B467DA67E567B867CF67DE67F367B067D967E267DD67D26B6A6B83 +6B866BB56BD26BD76C1F6CC96D0B6D326D2A6D416D256D0C6D316D1E6D170000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006D3B6D3D6D3E6D366D1B6CF56D396D276D386D296D2E6D356D0E6D2B70AB +70BA70B370AC70AF70AD70B870AE70A472307272726F727472E972E072E173B7 +73CA73BB73B273CD73C073B3751A752D754F754C754E754B75AB75A475A575A2 +75A3767876867687768876C876C676C376C5770176F976F87709770B76FE76FC +770777DC78027814780C780D794679497948794779B979BA79D179D279CB7A7F +7A817AFF7AFD7C7D7D027D057D007D097D077D047D067F387F8E7FBF80040000 +AD +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8010800D8011803680D680E580DA80C380C480CC80E180DB80CE80DE80E480DD +81F4822282E78303830582E382DB82E6830482E58302830982D282D782F18301 +82DC82D482D182DE82D382DF82EF830686508679867B867A884D886B898189D4 +8A088A028A038C9E8CA08D748D738DB48ECD8ECC8FF08FE68FE28FEA8FE50000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008FED8FEB8FE48FE890CA90CE90C190C3914B914A91CD95829650964B964C +964D9762976997CB97ED97F3980198A898DB98DF999699994E584EB3500C500D +50234FEF502650254FF8502950165006503C501F501A501250114FFA50005014 +50284FF15021500B501950184FF34FEE502D502A4FFE502B5009517C51A451A5 +51A251CD51CC51C651CB5256525C5254525B525D532A537F539F539D53DF54E8 +55105501553754FC54E554F2550654FA551454E954ED54E1550954EE54EA0000 +AE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +54E65527550754FD550F5703570457C257D457CB57C35809590F59575958595A +5A115A185A1C5A1F5A1B5A1359EC5A205A235A295A255A0C5A095B6B5C585BB0 +5BB35BB65BB45BAE5BB55BB95BB85C045C515C555C505CED5CFD5CFB5CEA5CE8 +5CF05CF65D015CF45DEE5E2D5E2B5EAB5EAD5EA75F315F925F915F9060590000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006063606560506055606D6069606F6084609F609A608D6094608C60856096 +624762F3630862FF634E633E632F635563426346634F6349633A6350633D632A +632B6328634D634C65486549659965C165C566426649664F66436652664C6645 +664166F867146715671768216838684868466853683968426854682968B36817 +684C6851683D67F468506840683C6843682A68456813681868416B8A6B896BB7 +6C236C276C286C266C246CF06D6A6D956D886D876D666D786D776D596D930000 +AF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6D6C6D896D6E6D5A6D746D696D8C6D8A6D796D856D656D9470CA70D870E470D9 +70C870CF7239727972FC72F972FD72F872F7738673ED740973EE73E073EA73DE +7554755D755C755A755975BE75C575C775B275B375BD75BC75B975C275B8768B +76B076CA76CD76CE7729771F7720772877E9783078277838781D783478370000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007825782D7820781F7832795579507960795F7956795E795D7957795A79E4 +79E379E779DF79E679E979D87A847A887AD97B067B117C897D217D177D0B7D0A +7D207D227D147D107D157D1A7D1C7D0D7D197D1B7F3A7F5F7F947FC57FC18006 +8018801580198017803D803F80F1810280F0810580ED80F4810680F880F38108 +80FD810A80FC80EF81ED81EC82008210822A822B8228822C82BB832B83528354 +834A83388350834983358334834F833283398336831783408331832883430000 +B0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8654868A86AA869386A486A9868C86A3869C8870887788818882887D88798A18 +8A108A0E8A0C8A158A0A8A178A138A168A0F8A118C488C7A8C798CA18CA28D77 +8EAC8ED28ED48ECF8FB1900190068FF790008FFA8FF490038FFD90058FF89095 +90E190DD90E29152914D914C91D891DD91D791DC91D995839662966396610000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000965B965D96649658965E96BB98E299AC9AA89AD89B259B329B3C4E7E507A +507D505C50475043504C505A504950655076504E5055507550745077504F500F +506F506D515C519551F0526A526F52D252D952D852D55310530F5319533F5340 +533E53C366FC5546556A55665544555E55615543554A55315556554F5555552F +55645538552E555C552C55635533554155575708570B570957DF5805580A5806 +57E057E457FA5802583557F757F9592059625A365A415A495A665A6A5A400000 +B1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5A3C5A625A5A5A465A4A5B705BC75BC55BC45BC25BBF5BC65C095C085C075C60 +5C5C5C5D5D075D065D0E5D1B5D165D225D115D295D145D195D245D275D175DE2 +5E385E365E335E375EB75EB85EB65EB55EBE5F355F375F575F6C5F695F6B5F97 +5F995F9E5F985FA15FA05F9C607F60A3608960A060A860CB60B460E660BD0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000060C560BB60B560DC60BC60D860D560C660DF60B860DA60C7621A621B6248 +63A063A76372639663A263A563776367639863AA637163A963896383639B636B +63A863846388639963A163AC6392638F6380637B63696368637A655D65566551 +65596557555F654F655865556554659C659B65AC65CF65CB65CC65CE665D665A +666466686666665E66F952D7671B688168AF68A2689368B5687F687668B168A7 +689768B0688368C468AD688668856894689D68A8689F68A168826B326BBA0000 +B2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6BEB6BEC6C2B6D8E6DBC6DF36DD96DB26DE16DCC6DE46DFB6DFA6E056DC76DCB +6DAF6DD16DAE6DDE6DF96DB86DF76DF56DC56DD26E1A6DB56DDA6DEB6DD86DEA +6DF16DEE6DE86DC66DC46DAA6DEC6DBF6DE670F97109710A70FD70EF723D727D +7281731C731B73167313731973877405740A7403740673FE740D74E074F60000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000074F7751C75227565756675627570758F75D475D575B575CA75CD768E76D4 +76D276DB7737773E773C77367738773A786B7843784E79657968796D79FB7A92 +7A957B207B287B1B7B2C7B267B197B1E7B2E7C927C977C957D467D437D717D2E +7D397D3C7D407D307D337D447D2F7D427D327D317F3D7F9E7F9A7FCC7FCE7FD2 +801C804A8046812F81168123812B81298130812482028235823782368239838E +839E8398837883A2839683BD83AB8392838A8393838983A08377837B837C0000 +B3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +838683A786555F6A86C786C086B686C486B586C686CB86B186AF86C98853889E +888888AB88928896888D888B8993898F8A2A8A1D8A238A258A318A2D8A1F8A1B +8A228C498C5A8CA98CAC8CAB8CA88CAA8CA78D678D668DBE8DBA8EDB8EDF9019 +900D901A90179023901F901D90109015901E9020900F90229016901B90140000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000090E890ED90FD915791CE91F591E691E391E791ED91E99589966A96759673 +96789670967496769677966C96C096EA96E97AE07ADF980298039B5A9CE59E75 +9E7F9EA59EBB50A2508D508550995091508050965098509A670051F152725274 +5275526952DE52DD52DB535A53A5557B558055A7557C558A559D55985582559C +55AA55945587558B558355B355AE559F553E55B2559A55BB55AC55B1557E5589 +55AB5599570D582F582A58345824583058315821581D582058F958FA59600000 +B4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5A775A9A5A7F5A925A9B5AA75B735B715BD25BCC5BD35BD05C0A5C0B5C315D4C +5D505D345D475DFD5E455E3D5E405E435E7E5ECA5EC15EC25EC45F3C5F6D5FA9 +5FAA5FA860D160E160B260B660E0611C612360FA611560F060FB60F4616860F1 +610E60F6610961006112621F624963A3638C63CF63C063E963C963C663CD0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000063D263E363D063E163D663ED63EE637663F463EA63DB645263DA63F9655E +6566656265636591659065AF666E667066746676666F6691667A667E667766FE +66FF671F671D68FA68D568E068D868D7690568DF68F568EE68E768F968D268F2 +68E368CB68CD690D6912690E68C968DA696E68FB6B3E6B3A6B3D6B986B966BBC +6BEF6C2E6C2F6C2C6E2F6E386E546E216E326E676E4A6E206E256E236E1B6E5B +6E586E246E566E6E6E2D6E266E6F6E346E4D6E3A6E2C6E436E1D6E3E6ECB0000 +B5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6E896E196E4E6E636E446E726E696E5F7119711A7126713071217136716E711C +724C728472807336732573347329743A742A743374227425743574367434742F +741B7426742875257526756B756A75E275DB75E375D975D875DE75E0767B767C +7696769376B476DC774F77ED785D786C786F7A0D7A087A0B7A057A007A980000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007A977A967AE57AE37B497B567B467B507B527B547B4D7B4B7B4F7B517C9F +7CA57D5E7D507D687D557D2B7D6E7D727D617D667D627D707D7355847FD47FD5 +800B8052808581558154814B8151814E81398146813E814C815381748212821C +83E9840383F8840D83E083C5840B83C183EF83F183F48457840A83F0840C83CC +83FD83F283CA8438840E840483DC840783D483DF865B86DF86D986ED86D486DB +86E486D086DE885788C188C288B1898389968A3B8A608A558A5E8A3C8A410000 +B6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8A548A5B8A508A468A348A3A8A368A568C618C828CAF8CBC8CB38CBD8CC18CBB +8CC08CB48CB78CB68CBF8CB88D8A8D858D818DCE8DDD8DCB8DDA8DD18DCC8DDB +8DC68EFB8EF88EFC8F9C902E90359031903890329036910290F5910990FE9163 +916591CF9214921592239209921E920D9210920792119594958F958B95910000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000095939592958E968A968E968B967D96859686968D9672968496C196C596C4 +96C696C796EF96F297CC98059806980898E798EA98EF98E998F298ED99AE99AD +9EC39ECD9ED14E8250AD50B550B250B350C550BE50AC50B750BB50AF50C7527F +5277527D52DF52E652E452E252E3532F55DF55E855D355E655CE55DC55C755D1 +55E355E455EF55DA55E155C555C655E555C957125713585E585158585857585A +5854586B584C586D584A58625852584B59675AC15AC95ACC5ABE5ABD5ABC0000 +B7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5AB35AC25AB25D695D6F5E4C5E795EC95EC85F125F595FAC5FAE611A610F6148 +611F60F3611B60F961016108614E614C6144614D613E61346127610D61066137 +622162226413643E641E642A642D643D642C640F641C6414640D643664166417 +6406656C659F65B06697668966876688669666846698668D67036994696D0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000695A697769606954697569306982694A6968696B695E695369796986695D +6963695B6B476B726BC06BBF6BD36BFD6EA26EAF6ED36EB66EC26E906E9D6EC7 +6EC56EA56E986EBC6EBA6EAB6ED16E966E9C6EC46ED46EAA6EA76EB4714E7159 +7169716471497167715C716C7166714C7165715E714671687156723A72527337 +7345733F733E746F745A7455745F745E7441743F7459745B745C757675787600 +75F0760175F275F175FA75FF75F475F376DE76DF775B776B7766775E77630000 +B8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7779776A776C775C77657768776277EE788E78B078977898788C7889787C7891 +7893787F797A797F7981842C79BD7A1C7A1A7A207A147A1F7A1E7A9F7AA07B77 +7BC07B607B6E7B677CB17CB37CB57D937D797D917D817D8F7D5B7F6E7F697F6A +7F727FA97FA87FA480568058808680848171817081788165816E8173816B0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008179817A81668205824784828477843D843184758466846B8449846C845B +843C8435846184638469846D8446865E865C865F86F9871387088707870086FE +86FB870287038706870A885988DF88D488D988DC88D888DD88E188CA88D588D2 +899C89E38A6B8A728A738A668A698A708A878A7C8A638AA08A718A858A6D8A62 +8A6E8A6C8A798A7B8A3E8A688C628C8A8C898CCA8CC78CC88CC48CB28CC38CC2 +8CC58DE18DDF8DE88DEF8DF38DFA8DEA8DE48DE68EB28F038F098EFE8F0A0000 +B9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8F9F8FB2904B904A905390429054903C905590509047904F904E904D9051903E +904191129117916C916A916991C9923792579238923D9240923E925B924B9264 +925192349249924D92459239923F925A959896989694969596CD96CB96C996CA +96F796FB96F996F6975697749776981098119813980A9812980C98FC98F40000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000098FD98FE99B399B199B49AE19CE99E829F0E9F139F2050E750EE50E550D6 +50ED50DA50D550CF50D150F150CE50E9516251F352835282533153AD55FE5600 +561B561755FD561456065609560D560E55F75616561F5608561055F657185716 +5875587E58835893588A58795885587D58FD592559225924596A59695AE15AE6 +5AE95AD75AD65AD85AE35B755BDE5BE75BE15BE55BE65BE85BE25BE45BDF5C0D +5C625D845D875E5B5E635E555E575E545ED35ED65F0A5F465F705FB961470000 +BA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +613F614B617761626163615F615A61586175622A64876458645464A46478645F +647A645164676434646D647B657265A165D765D666A266A8669D699C69A86995 +69C169AE69D369CB699B69B769BB69AB69B469D069CD69AD69CC69A669C369A3 +6B496B4C6C336F336F146EFE6F136EF46F296F3E6F206F2C6F0F6F026F220000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006EFF6EEF6F066F316F386F326F236F156F2B6F2F6F886F2A6EEC6F016EF2 +6ECC6EF771947199717D718A71847192723E729272967344735074647463746A +7470746D750475917627760D760B7609761376E176E37784777D777F776178C1 +789F78A778B378A978A3798E798F798D7A2E7A317AAA7AA97AED7AEF7BA17B95 +7B8B7B757B977B9D7B947B8F7BB87B877B847CB97CBD7CBE7DBB7DB07D9C7DBD +7DBE7DA07DCA7DB47DB27DB17DBA7DA27DBF7DB57DB87DAD7DD27DC77DAC0000 +BB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7F707FE07FE17FDF805E805A808781508180818F8188818A817F818281E781FA +82078214821E824B84C984BF84C684C48499849E84B2849C84CB84B884C084D3 +849084BC84D184CA873F871C873B872287258734871887558737872988F38902 +88F488F988F888FD88E8891A88EF8AA68A8C8A9E8AA38A8D8AA18A938AA40000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008AAA8AA58AA88A988A918A9A8AA78C6A8C8D8C8C8CD38CD18CD28D6B8D99 +8D958DFC8F148F128F158F138FA390609058905C90639059905E9062905D905B +91199118911E917591789177917492789280928592989296927B9293929C92A8 +927C929195A195A895A995A395A595A49699969C969B96CC96D29700977C9785 +97F69817981898AF98B199039905990C990999C19AAF9AB09AE69B419B429CF4 +9CF69CF39EBC9F3B9F4A5104510050FB50F550F9510251085109510551DC0000 +BC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +528752885289528D528A52F053B2562E563B56395632563F563456295653564E +565756745636562F56305880589F589E58B3589C58AE58A958A6596D5B095AFB +5B0B5AF55B0C5B085BEE5BEC5BE95BEB5C645C655D9D5D945E625E5F5E615EE2 +5EDA5EDF5EDD5EE35EE05F485F715FB75FB561766167616E615D615561820000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000617C6170616B617E61A7619061AB618E61AC619A61A4619461AE622E6469 +646F6479649E64B26488649064B064A56493649564A9649264AE64AD64AB649A +64AC649964A264B365756577657866AE66AB66B466B16A236A1F69E86A016A1E +6A1969FD6A216A136A0A69F36A026A0569ED6A116B506B4E6BA46BC56BC66F3F +6F7C6F846F516F666F546F866F6D6F5B6F786F6E6F8E6F7A6F706F646F976F58 +6ED56F6F6F606F5F719F71AC71B171A87256729B734E73577469748B74830000 +BD +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +747E7480757F76207629761F7624762676217622769A76BA76E4778E7787778C +7791778B78CB78C578BA78CA78BE78D578BC78D07A3F7A3C7A407A3D7A377A3B +7AAF7AAE7BAD7BB17BC47BB47BC67BC77BC17BA07BCC7CCA7DE07DF47DEF7DFB +7DD87DEC7DDD7DE87DE37DDA7DDE7DE97D9E7DD97DF27DF97F757F777FAF0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007FE98026819B819C819D81A0819A81988517853D851A84EE852C852D8513 +851185238521851484EC852584FF850687828774877687608766877887688759 +8757874C8753885B885D89108907891289138915890A8ABC8AD28AC78AC48A95 +8ACB8AF88AB28AC98AC28ABF8AB08AD68ACD8AB68AB98ADB8C4C8C4E8C6C8CE0 +8CDE8CE68CE48CEC8CED8CE28CE38CDC8CEA8CE18D6D8D9F8DA38E2B8E108E1D +8E228E0F8E298E1F8E218E1E8EBA8F1D8F1B8F1F8F298F268F2A8F1C8F1E0000 +BE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8F259069906E9068906D90779130912D9127913191879189918B918392C592BB +92B792EA92AC92E492C192B392BC92D292C792F092B295AD95B1970497069707 +97099760978D978B978F9821982B981C98B3990A99139912991899DD99D099DF +99DB99D199D599D299D99AB79AEE9AEF9B279B459B449B779B6F9D069D090000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009D039EA99EBE9ECE58A89F5251125118511451105115518051AA51DD5291 +529352F35659566B5679566956645678566A566856655671566F566C56625676 +58C158BE58C758C5596E5B1D5B345B785BF05C0E5F4A61B2619161A9618A61CD +61B661BE61CA61C8623064C564C164CB64BB64BC64DA64C464C764C264CD64BF +64D264D464BE657466C666C966B966C466C766B86A3D6A386A3A6A596A6B6A58 +6A396A446A626A616A4B6A476A356A5F6A486B596B776C056FC26FB16FA10000 +BF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6FC36FA46FC16FA76FB36FC06FB96FB66FA66FA06FB471BE71C971D071D271C8 +71D571B971CE71D971DC71C371C47368749C74A37498749F749E74E2750C750D +76347638763A76E776E577A0779E779F77A578E878DA78EC78E779A67A4D7A4E +7A467A4C7A4B7ABA7BD97C117BC97BE47BDB7BE17BE97BE67CD57CD67E0A0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007E117E087E1B7E237E1E7E1D7E097E107F797FB27FF07FF17FEE802881B3 +81A981A881FB820882588259854A855985488568856985438549856D856A855E +8783879F879E87A2878D8861892A89328925892B892189AA89A68AE68AFA8AEB +8AF18B008ADC8AE78AEE8AFE8B018B028AF78AED8AF38AF68AFC8C6B8C6D8C93 +8CF48E448E318E348E428E398E358F3B8F2F8F388F338FA88FA6907590749078 +9072907C907A913491929320933692F89333932F932292FC932B9304931A0000 +C0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +9310932693219315932E931995BB96A796A896AA96D5970E97119716970D9713 +970F975B975C9766979898309838983B9837982D9839982499109928991E991B +9921991A99ED99E299F19AB89ABC9AFB9AED9B289B919D159D239D269D289D12 +9D1B9ED89ED49F8D9F9C512A511F5121513252F5568E56805690568556870000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000568F58D558D358D158CE5B305B2A5B245B7A5C375C685DBC5DBA5DBD5DB8 +5E6B5F4C5FBD61C961C261C761E661CB6232623464CE64CA64D864E064F064E6 +64EC64F164E264ED6582658366D966D66A806A946A846AA26A9C6ADB6AA36A7E +6A976A906AA06B5C6BAE6BDA6C086FD86FF16FDF6FE06FDB6FE46FEB6FEF6F80 +6FEC6FE16FE96FD56FEE6FF071E771DF71EE71E671E571ED71EC71F471E07235 +72467370737274A974B074A674A876467642764C76EA77B377AA77B077AC0000 +C1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +77A777AD77EF78F778FA78F478EF790179A779AA7A577ABF7C077C0D7BFE7BF7 +7C0C7BE07CE07CDC7CDE7CE27CDF7CD97CDD7E2E7E3E7E467E377E327E437E2B +7E3D7E317E457E417E347E397E487E357E3F7E2F7F447FF37FFC807180728070 +806F807381C681C381BA81C281C081BF81BD81C981BE81E88209827185AA0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008584857E859C8591859485AF859B858785A8858A866787C087D187B387D2 +87C687AB87BB87BA87C887CB893B893689448938893D89AC8B0E8B178B198B1B +8B0A8B208B1D8B048B108C418C3F8C738CFA8CFD8CFC8CF88CFB8DA88E498E4B +8E488E4A8F448F3E8F428F458F3F907F907D9084908190829080913991A3919E +919C934D938293289375934A9365934B9318937E936C935B9370935A935495CA +95CB95CC95C895C696B196B896D6971C971E97A097D3984698B699359A010000 +C2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +99FF9BAE9BAB9BAA9BAD9D3B9D3F9E8B9ECF9EDE9EDC9EDD9EDB9F3E9F4B53E2 +569556AE58D958D85B385F5D61E3623364F464F264FE650664FA64FB64F765B7 +66DC67266AB36AAC6AC36ABB6AB86AC26AAE6AAF6B5F6B786BAF7009700B6FFE +70066FFA7011700F71FB71FC71FE71F87377737574A774BF7515765676580000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000765277BD77BF77BB77BC790E79AE7A617A627A607AC47AC57C2B7C277C2A +7C1E7C237C217CE77E547E557E5E7E5A7E617E527E597F487FF97FFB80778076 +81CD81CF820A85CF85A985CD85D085C985B085BA85B985A687EF87EC87F287E0 +898689B289F48B288B398B2C8B2B8C508D058E598E638E668E648E5F8E558EC0 +8F498F4D90879083908891AB91AC91D09394938A939693A293B393AE93AC93B0 +9398939A939795D495D695D095D596E296DC96D996DB96DE972497A397A60000 +C3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +97AD97F9984D984F984C984E985398BA993E993F993D992E99A59A0E9AC19B03 +9B069B4F9B4E9B4D9BCA9BC99BFD9BC89BC09D519D5D9D609EE09F159F2C5133 +56A558DE58DF58E25BF59F905EEC61F261F761F661F56500650F66E066DD6AE5 +6ADD6ADA6AD3701B701F7028701A701D701570187206720D725872A273780000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000737A74BD74CA74E375877586765F766177C7791979B17A6B7A697C3E7C3F +7C387C3D7C377C407E6B7E6D7E797E697E6A7F857E737FB67FB97FB881D885E9 +85DD85EA85D585E485E585F787FB8805880D87F987FE8960895F8956895E8B41 +8B5C8B588B498B5A8B4E8B4F8B468B598D088D0A8E7C8E728E878E768E6C8E7A +8E748F548F4E8FAD908A908B91B191AE93E193D193DF93C393C893DC93DD93D6 +93E293CD93D893E493D793E895DC96B496E3972A9727976197DC97FB985E0000 +C4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +9858985B98BC994599499A169A199B0D9BE89BE79BD69BDB9D899D619D729D6A +9D6C9E929E979E939EB452F856A856B756B656B456BC58E45B405B435B7D5BF6 +5DC961F861FA65186514651966E667276AEC703E703070327210737B74CF7662 +76657926792A792C792B7AC77AF67C4C7C437C4D7CEF7CF08FAE7E7D7E7C0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007E827F4C800081DA826685FB85F9861185FA8606860B8607860A88148815 +896489BA89F88B708B6C8B668B6F8B5F8B6B8D0F8D0D8E898E818E858E8291B4 +91CB9418940393FD95E1973098C49952995199A89A2B9A309A379A359C139C0D +9E799EB59EE89F2F9F5F9F639F615137513856C156C056C259145C6C5DCD61FC +61FE651D651C659566E96AFB6B046AFA6BB2704C721B72A774D674D4766977D3 +7C507E8F7E8C7FBC8617862D861A882388228821881F896A896C89BD8B740000 +C5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8B778B7D8D138E8A8E8D8E8B8F5F8FAF91BA942E94339435943A94389432942B +95E297389739973297FF9867986599579A459A439A409A3E9ACF9B549B519C2D +9C259DAF9DB49DC29DB89E9D9EEF9F199F5C9F669F67513C513B56C856CA56C9 +5B7F5DD45DD25F4E61FF65246B0A6B6170517058738074E4758A766E766C0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000079B37C607C5F807E807D81DF8972896F89FC8B808D168D178E918E938F61 +9148944494519452973D973E97C397C1986B99559A559A4D9AD29B1A9C499C31 +9C3E9C3B9DD39DD79F349F6C9F6A9F9456CC5DD662006523652B652A66EC6B10 +74DA7ACA7C647C637C657E937E967E9481E28638863F88318B8A9090908F9463 +946094649768986F995C9A5A9A5B9A579AD39AD49AD19C549C579C569DE59E9F +9EF456D158E9652C705E7671767277D77F507F888836883988628B938B920000 +C6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8B9682778D1B91C0946A97429748974497C698709A5F9B229B589C5F9DF99DFA +9E7C9E7D9F079F779F725EF36B1670637C6C7C6E883B89C08EA191C194729470 +9871995E9AD69B239ECC706477DA8B9A947797C99A629A657E9C8B9C8EAA91C5 +947D947E947C9C779C789EF78C54947F9E1A72289A6A9B319E1B9E1E7C720000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +C9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4E424E5C51F5531A53824E074E0C4E474E8D56D7FA0C5C6E5F734E0F51874E0E +4E2E4E934EC24EC94EC8519852FC536C53B957205903592C5C105DFF65E16BB3 +6BCC6C14723F4E314E3C4EE84EDC4EE94EE14EDD4EDA520C531C534C57225723 +5917592F5B815B845C125C3B5C745C735E045E805E825FC9620962506C150000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006C366C436C3F6C3B72AE72B0738A79B8808A961E4F0E4F184F2C4EF54F14 +4EF14F004EF74F084F1D4F024F054F224F134F044EF44F1251B1521352095210 +52A65322531F534D538A540756E156DF572E572A5734593C5980597C5985597B +597E5977597F5B565C155C255C7C5C7A5C7B5C7E5DDF5E755E845F025F1A5F74 +5FD55FD45FCF625C625E626462616266626262596260625A626565EF65EE673E +67396738673B673A673F673C67336C186C466C526C5C6C4F6C4A6C546C4B0000 +CA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6C4C7071725E72B472B5738E752A767F7A757F518278827C8280827D827F864D +897E909990979098909B909496229624962096234F564F3B4F624F494F534F64 +4F3E4F674F524F5F4F414F584F2D4F334F3F4F61518F51B9521C521E522152AD +52AE530953635372538E538F54305437542A545454455419541C542554180000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000543D544F544154285424544756EE56E756E557415745574C5749574B5752 +5906594059A6599859A05997598E59A25990598F59A759A15B8E5B925C285C2A +5C8D5C8F5C885C8B5C895C925C8A5C865C935C955DE05E0A5E0E5E8B5E895E8C +5E885E8D5F055F1D5F785F765FD25FD15FD05FED5FE85FEE5FF35FE15FE45FE3 +5FFA5FEF5FF75FFB60005FF4623A6283628C628E628F629462876271627B627A +6270628162886277627D62726274653765F065F465F365F265F5674567470000 +CB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +67596755674C6748675D674D675A674B6BD06C196C1A6C786C676C6B6C846C8B +6C8F6C716C6F6C696C9A6C6D6C876C956C9C6C666C736C656C7B6C8E7074707A +726372BF72BD72C372C672C172BA72C573957397739373947392753A75397594 +75957681793D80348095809980908092809C8290828F8285828E829182930000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000828A828382848C788FC98FBF909F90A190A5909E90A790A096309628962F +962D4E334F984F7C4F854F7D4F804F874F764F744F894F844F774F4C4F974F6A +4F9A4F794F814F784F904F9C4F944F9E4F924F824F954F6B4F6E519E51BC51BE +5235523252335246523152BC530A530B533C539253945487547F548154915482 +5488546B547A547E5465546C54745466548D546F546154605498546354675464 +56F756F9576F5772576D576B57715770577657805775577B5773577457620000 +CC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5768577D590C594559B559BA59CF59CE59B259CC59C159B659BC59C359D659B1 +59BD59C059C859B459C75B625B655B935B955C445C475CAE5CA45CA05CB55CAF +5CA85CAC5C9F5CA35CAD5CA25CAA5CA75C9D5CA55CB65CB05CA65E175E145E19 +5F285F225F235F245F545F825F7E5F7D5FDE5FE5602D602660196032600B0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006034600A60176033601A601E602C6022600D6010602E60136011600C6009 +601C6214623D62AD62B462D162BE62AA62B662CA62AE62B362AF62BB62A962B0 +62B8653D65A865BB660965FC66046612660865FB6603660B660D660565FD6611 +661066F6670A6785676C678E67926776677B6798678667846774678D678C677A +679F679167996783677D67816778677967946B256B806B7E6BDE6C1D6C936CEC +6CEB6CEE6CD96CB66CD46CAD6CE76CB76CD06CC26CBA6CC36CC66CED6CF20000 +CD +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6CD26CDD6CB46C8A6C9D6C806CDE6CC06D306CCD6CC76CB06CF96CCF6CE96CD1 +709470987085709370867084709170967082709A7083726A72D672CB72D872C9 +72DC72D272D472DA72CC72D173A473A173AD73A673A273A073AC739D74DD74E8 +753F7540753E758C759876AF76F376F176F076F577F877FC77F977FB77FA0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000077F77942793F79C57A787A7B7AFB7C757CFD8035808F80AE80A380B880B5 +80AD822082A082C082AB829A8298829B82B582A782AE82BC829E82BA82B482A8 +82A182A982C282A482C382B682A28670866F866D866E8C568FD28FCB8FD38FCD +8FD68FD58FD790B290B490AF90B390B09639963D963C963A96434FCD4FC54FD3 +4FB24FC94FCB4FC14FD44FDC4FD94FBB4FB34FDB4FC74FD64FBA4FC04FB94FEC +5244524952C052C2533D537C539753965399539854BA54A154AD54A554CF0000 +CE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +54C3830D54B754AE54D654B654C554C654A0547054BC54A254BE547254DE54B0 +57B5579E579F57A4578C5797579D579B57945798578F579957A5579A579558F4 +590D595359E159DE59EE5A0059F159DD59FA59FD59FC59F659E459F259F759DB +59E959F359F559E059FE59F459ED5BA85C4C5CD05CD85CCC5CD75CCB5CDB0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005CDE5CDA5CC95CC75CCA5CD65CD35CD45CCF5CC85CC65CCE5CDF5CF85DF9 +5E215E225E235E205E245EB05EA45EA25E9B5EA35EA55F075F2E5F565F866037 +603960546072605E6045605360476049605B604C60406042605F602460446058 +6066606E6242624362CF630D630B62F5630E630362EB62F9630F630C62F862F6 +63006313631462FA631562FB62F06541654365AA65BF6636662166326635661C +662666226633662B663A661D66346639662E670F671067C167F267C867BA0000 +CF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +67DC67BB67F867D867C067B767C567EB67E467DF67B567CD67B367F767F667EE +67E367C267B967CE67E767F067B267FC67C667ED67CC67AE67E667DB67FA67C9 +67CA67C367EA67CB6B286B826B846BB66BD66BD86BE06C206C216D286D346D2D +6D1F6D3C6D3F6D126D0A6CDA6D336D046D196D3A6D1A6D116D006D1D6D420000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006D016D186D376D036D0F6D406D076D206D2C6D086D226D096D1070B7709F +70BE70B170B070A170B470B570A972417249724A726C72707273726E72CA72E4 +72E872EB72DF72EA72E672E3738573CC73C273C873C573B973B673B573B473EB +73BF73C773BE73C373C673B873CB74EC74EE752E7547754875A775AA767976C4 +7708770377047705770A76F776FB76FA77E777E878067811781278057810780F +780E780978037813794A794C794B7945794479D579CD79CF79D679CE7A800000 +D0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7A7E7AD17B007B017C7A7C787C797C7F7C807C817D037D087D017F587F917F8D +7FBE8007800E800F8014803780D880C780E080D180C880C280D080C580E380D9 +80DC80CA80D580C980CF80D780E680CD81FF8221829482D982FE82F9830782E8 +830082D5833A82EB82D682F482EC82E182F282F5830C82FB82F682F082EA0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000082E482E082FA82F382ED86778674867C86738841884E8867886A886989D3 +8A048A078D728FE38FE18FEE8FE090F190BD90BF90D590C590BE90C790CB90C8 +91D491D39654964F96519653964A964E501E50055007501350225030501B4FF5 +4FF450335037502C4FF64FF75017501C502050275035502F5031500E515A5194 +519351CA51C451C551C851CE5261525A5252525E525F5255526252CD530E539E +552654E25517551254E754F354E4551A54FF5504550854EB5511550554F10000 +D1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +550A54FB54F754F854E0550E5503550B5701570257CC583257D557D257BA57C6 +57BD57BC57B857B657BF57C757D057B957C1590E594A5A195A165A2D5A2E5A15 +5A0F5A175A0A5A1E5A335B6C5BA75BAD5BAC5C035C565C545CEC5CFF5CEE5CF1 +5CF75D005CF95E295E285EA85EAE5EAA5EAC5F335F305F67605D605A60670000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000604160A26088608060926081609D60836095609B60976087609C608E6219 +624662F263106356632C634463456336634363E46339634B634A633C63296341 +6334635863546359632D63476333635A63516338635763406348654A654665C6 +65C365C465C2664A665F6647665167126713681F681A684968326833683B684B +684F68166831681C6835682B682D682F684E68446834681D6812681468266828 +682E684D683A682568206B2C6B2F6B2D6B316B346B6D80826B886BE66BE40000 +D2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6BE86BE36BE26BE76C256D7A6D636D646D766D0D6D616D926D586D626D6D6D6F +6D916D8D6DEF6D7F6D866D5E6D676D606D976D706D7C6D5F6D826D986D2F6D68 +6D8B6D7E6D806D846D166D836D7B6D7D6D756D9070DC70D370D170DD70CB7F39 +70E270D770D270DE70E070D470CD70C570C670C770DA70CE70E1724272780000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000072777276730072FA72F472FE72F672F372FB730173D373D973E573D673BC +73E773E373E973DC73D273DB73D473DD73DA73D773D873E874DE74DF74F474F5 +7521755B755F75B075C175BB75C475C075BF75B675BA768A76C9771D771B7710 +771377127723771177157719771A772277277823782C78227835782F7828782E +782B782178297833782A78317954795B794F795C79537952795179EB79EC79E0 +79EE79ED79EA79DC79DE79DD7A867A897A857A8B7A8C7A8A7A877AD87B100000 +D3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7B047B137B057B0F7B087B0A7B0E7B097B127C847C917C8A7C8C7C887C8D7C85 +7D1E7D1D7D117D0E7D187D167D137D1F7D127D0F7D0C7F5C7F617F5E7F607F5D +7F5B7F967F927FC37FC27FC08016803E803980FA80F280F980F5810180FB8100 +8201822F82258333832D83448319835183258356833F83418326831C83220000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008342834E831B832A8308833C834D8316832483208337832F832983478345 +834C8353831E832C834B832783488653865286A286A88696868D8691869E8687 +86978686868B869A868586A5869986A186A786958698868E869D869086948843 +8844886D88758876887288808871887F886F8883887E8874887C8A128C478C57 +8C7B8CA48CA38D768D788DB58DB78DB68ED18ED38FFE8FF590028FFF8FFB9004 +8FFC8FF690D690E090D990DA90E390DF90E590D890DB90D790DC90E491500000 +D4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +914E914F91D591E291DA965C965F96BC98E39ADF9B2F4E7F5070506A5061505E +50605053504B505D50725048504D5041505B504A506250155045505F5069506B +5063506450465040506E50735057505151D0526B526D526C526E52D652D3532D +539C55755576553C554D55505534552A55515562553655355530555255450000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000550C55325565554E55395548552D553B5540554B570A570757FB581457E2 +57F657DC57F4580057ED57FD580857F8580B57F357CF580757EE57E357F257E5 +57EC57E1580E57FC581057E75801580C57F157E957F0580D5804595C5A605A58 +5A555A675A5E5A385A355A6D5A505A5F5A655A6C5A535A645A575A435A5D5A52 +5A445A5B5A485A8E5A3E5A4D5A395A4C5A705A695A475A515A565A425A5C5B72 +5B6E5BC15BC05C595D1E5D0B5D1D5D1A5D205D0C5D285D0D5D265D255D0F0000 +D5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5D305D125D235D1F5D2E5E3E5E345EB15EB45EB95EB25EB35F365F385F9B5F96 +5F9F608A6090608660BE60B060BA60D360D460CF60E460D960DD60C860B160DB +60B760CA60BF60C360CD60C063326365638A6382637D63BD639E63AD639D6397 +63AB638E636F63876390636E63AF6375639C636D63AE637C63A4633B639F0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006378638563816391638D6370655365CD66656661665B6659665C66626718 +687968876890689C686D686E68AE68AB6956686F68A368AC68A96875687468B2 +688F68776892687C686B687268AA68806871687E689B6896688B68A0688968A4 +6878687B6891688C688A687D6B366B336B376B386B916B8F6B8D6B8E6B8C6C2A +6DC06DAB6DB46DB36E746DAC6DE96DE26DB76DF66DD46E006DC86DE06DDF6DD6 +6DBE6DE56DDC6DDD6DDB6DF46DCA6DBD6DED6DF06DBA6DD56DC26DCF6DC90000 +D6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6DD06DF26DD36DFD6DD76DCD6DE36DBB70FA710D70F7711770F4710C70F07104 +70F3711070FC70FF71067113710070F870F6710B7102710E727E727B727C727F +731D7317730773117318730A730872FF730F731E738873F673F873F574047401 +73FD7407740073FA73FC73FF740C740B73F474087564756375CE75D275CF0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000075CB75CC75D175D0768F768976D37739772F772D7731773277347733773D +7725773B7735784878527849784D784A784C782678457850796479677969796A +7963796B796179BB79FA79F879F679F77A8F7A947A907B357B477B347B257B30 +7B227B247B337B187B2A7B1D7B317B2B7B2D7B2F7B327B387B1A7B237C947C98 +7C967CA37D357D3D7D387D367D3A7D457D2C7D297D417D477D3E7D3F7D4A7D3B +7D287F637F957F9C7F9D7F9B7FCA7FCB7FCD7FD07FD17FC77FCF7FC9801F0000 +D7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +801E801B804780438048811881258119811B812D811F812C811E812181158127 +811D8122821182388233823A823482328274839083A383A8838D837A837383A4 +8374838F8381839583998375839483A9837D8383838C839D839B83AA838B837E +83A583AF8388839783B0837F83A6838783AE8376839A8659865686BF86B70000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000086C286C186C586BA86B086C886B986B386B886CC86B486BB86BC86C386BD +86BE88528889889588A888A288AA889A889188A1889F889888A78899889B8897 +88A488AC888C8893888E898289D689D989D58A308A278A2C8A1E8C398C3B8C5C +8C5D8C7D8CA58D7D8D7B8D798DBC8DC28DB98DBF8DC18ED88EDE8EDD8EDC8ED7 +8EE08EE19024900B9011901C900C902190EF90EA90F090F490F290F390D490EB +90EC90E991569158915A9153915591EC91F491F191F391F891E491F991EA0000 +D8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +91EB91F791E891EE957A95869588967C966D966B9671966F96BF976A980498E5 +9997509B50955094509E508B50A35083508C508E509D5068509C509250825087 +515F51D45312531153A453A7559155A855A555AD5577564555A255935588558F +55B5558155A3559255A4557D558C55A6557F559555A1558E570C582958370000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005819581E58275823582857F558485825581C581B5833583F5836582E5839 +5838582D582C583B59615AAF5A945A9F5A7A5AA25A9E5A785AA65A7C5AA55AAC +5A955AAE5A375A845A8A5A975A835A8B5AA95A7B5A7D5A8C5A9C5A8F5A935A9D +5BEA5BCD5BCB5BD45BD15BCA5BCE5C0C5C305D375D435D6B5D415D4B5D3F5D35 +5D515D4E5D555D335D3A5D525D3D5D315D595D425D395D495D385D3C5D325D36 +5D405D455E445E415F585FA65FA55FAB60C960B960CC60E260CE60C461140000 +D9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +60F2610A6116610560F5611360F860FC60FE60C161036118611D611060FF6104 +610B624A639463B163B063CE63E563E863EF63C3649D63F363CA63E063F663D5 +63F263F5646163DF63BE63DD63DC63C463D863D363C263C763CC63CB63C863F0 +63D763D965326567656A6564655C65686565658C659D659E65AE65D065D20000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000667C666C667B668066716679666A66726701690C68D3690468DC692A68EC +68EA68F1690F68D668F768EB68E468F66913691068F368E1690768CC69086970 +68B4691168EF68C6691468F868D068FD68FC68E8690B690A691768CE68C868DD +68DE68E668F468D1690668D468E96915692568C76B396B3B6B3F6B3C6B946B97 +6B996B956BBD6BF06BF26BF36C306DFC6E466E476E1F6E496E886E3C6E3D6E45 +6E626E2B6E3F6E416E5D6E736E1C6E336E4B6E406E516E3B6E036E2E6E5E0000 +DA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6E686E5C6E616E316E286E606E716E6B6E396E226E306E536E656E276E786E64 +6E776E556E796E526E666E356E366E5A7120711E712F70FB712E713171237125 +71227132711F7128713A711B724B725A7288728972867285728B7312730B7330 +73227331733373277332732D732673237335730C742E742C7430742B74160000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000741A7421742D743174247423741D74297420743274FB752F756F756C75E7 +75DA75E175E675DD75DF75E475D77695769276DA774677477744774D7745774A +774E774B774C77DE77EC786078647865785C786D7871786A786E787078697868 +785E786279747973797279707A027A0A7A037A0C7A047A997AE67AE47B4A7B3B +7B447B487B4C7B4E7B407B587B457CA27C9E7CA87CA17D587D6F7D637D537D56 +7D677D6A7D4F7D6D7D5C7D6B7D527D547D697D517D5F7D4E7F3E7F3F7F650000 +DB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7F667FA27FA07FA17FD78051804F805080FE80D48143814A8152814F8147813D +814D813A81E681EE81F781F881F98204823C823D823F8275833B83CF83F98423 +83C083E8841283E783E483FC83F6841083C683C883EB83E383BF840183DD83E5 +83D883FF83E183CB83CE83D683F583C98409840F83DE8411840683C283F30000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000083D583FA83C783D183EA841383C383EC83EE83C483FB83D783E2841B83DB +83FE86D886E286E686D386E386DA86EA86DD86EB86DC86EC86E986D786E886D1 +88488856885588BA88D788B988B888C088BE88B688BC88B788BD88B2890188C9 +89958998899789DD89DA89DB8A4E8A4D8A398A598A408A578A588A448A458A52 +8A488A518A4A8A4C8A4F8C5F8C818C808CBA8CBE8CB08CB98CB58D848D808D89 +8DD88DD38DCD8DC78DD68DDC8DCF8DD58DD98DC88DD78DC58EEF8EF78EFA0000 +DC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8EF98EE68EEE8EE58EF58EE78EE88EF68EEB8EF18EEC8EF48EE9902D9034902F +9106912C910490FF90FC910890F990FB9101910091079105910391619164915F +916291609201920A92259203921A9226920F920C9200921291FF91FD92069204 +92279202921C92249219921792059216957B958D958C95909687967E96880000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000096899683968096C296C896C396F196F0976C9770976E980798A998EB9CE6 +9EF94E834E844EB650BD50BF50C650AE50C450CA50B450C850C250B050C150BA +50B150CB50C950B650B851D7527A5278527B527C55C355DB55CC55D055CB55CA +55DD55C055D455C455E955BF55D2558D55CF55D555E255D655C855F255CD55D9 +55C25714585358685864584F584D5849586F5855584E585D58595865585B583D +5863587158FC5AC75AC45ACB5ABA5AB85AB15AB55AB05ABF5AC85ABB5AC60000 +DD +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5AB75AC05ACA5AB45AB65ACD5AB95A905BD65BD85BD95C1F5C335D715D635D4A +5D655D725D6C5D5E5D685D675D625DF05E4F5E4E5E4A5E4D5E4B5EC55ECC5EC6 +5ECB5EC75F405FAF5FAD60F76149614A612B614561366132612E6146612F614F +612961406220916862236225622463C563F163EB641064126409642064240000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000064336443641F641564186439643764226423640C64266430642864416435 +642F640A641A644064256427640B63E7641B642E6421640E656F659265D36686 +668C66956690668B668A66996694667867206966695F6938694E69626971693F +6945696A6939694269576959697A694869496935696C6933693D696568F06978 +693469696940696F69446976695869416974694C693B694B6937695C694F6951 +69326952692F697B693C6B466B456B436B426B486B416B9BFA0D6BFB6BFC0000 +DE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6BF96BF76BF86E9B6ED66EC86E8F6EC06E9F6E936E946EA06EB16EB96EC66ED2 +6EBD6EC16E9E6EC96EB76EB06ECD6EA66ECF6EB26EBE6EC36EDC6ED86E996E92 +6E8E6E8D6EA46EA16EBF6EB36ED06ECA6E976EAE6EA371477154715271637160 +7141715D716271727178716A7161714271587143714B7170715F715071530000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007144714D715A724F728D728C72917290728E733C7342733B733A7340734A +73497444744A744B7452745174577440744F7450744E74427446744D745474E1 +74FF74FE74FD751D75797577698375EF760F760375F775FE75FC75F975F87610 +75FB75F675ED75F575FD769976B576DD7755775F776077527756775A77697767 +77547759776D77E07887789A7894788F788478957885788678A1788378797899 +78807896787B797C7982797D79797A117A187A197A127A177A157A227A130000 +DF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7A1B7A107AA37AA27A9E7AEB7B667B647B6D7B747B697B727B657B737B717B70 +7B617B787B767B637CB27CB47CAF7D887D867D807D8D7D7F7D857D7A7D8E7D7B +7D837D7C7D8C7D947D847D7D7D927F6D7F6B7F677F687F6C7FA67FA57FA77FDB +7FDC8021816481608177815C8169815B816281726721815E81768167816F0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000081448161821D8249824482408242824584F1843F845684768479848F848D +846584518440848684678430844D847D845A845984748473845D8507845E8437 +843A8434847A8443847884328445842983D9844B842F8442842D845F84708439 +844E844C8452846F84C5848E843B8447843684338468847E8444842B84608454 +846E8450870B870486F7870C86FA86D686F5874D86F8870E8709870186F6870D +870588D688CB88CD88CE88DE88DB88DA88CC88D08985899B89DF89E589E40000 +E0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +89E189E089E289DC89E68A768A868A7F8A618A3F8A778A828A848A758A838A81 +8A748A7A8C3C8C4B8C4A8C658C648C668C868C848C858CCC8D688D698D918D8C +8D8E8D8F8D8D8D938D948D908D928DF08DE08DEC8DF18DEE8DD08DE98DE38DE2 +8DE78DF28DEB8DF48F068EFF8F018F008F058F078F088F028F0B9052903F0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000090449049903D9110910D910F911191169114910B910E916E916F92489252 +9230923A926692339265925E9283922E924A9246926D926C924F92609267926F +92369261927092319254926392509272924E9253924C92569232959F959C959E +959B969296939691969796CE96FA96FD96F896F59773977797789772980F980D +980E98AC98F698F999AF99B299B099B59AAD9AAB9B5B9CEA9CED9CE79E809EFD +50E650D450D750E850F350DB50EA50DD50E450D350EC50F050EF50E350E00000 +E1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +51D85280528152E952EB533053AC56275615560C561255FC560F561C56015613 +560255FA561D560455FF55F95889587C5890589858865881587F5874588B587A +58875891588E587658825888587B5894588F58FE596B5ADC5AEE5AE55AD55AEA +5ADA5AED5AEB5AF35AE25AE05ADB5AEC5ADE5ADD5AD95AE85ADF5B775BE00000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005BE35C635D825D805D7D5D865D7A5D815D775D8A5D895D885D7E5D7C5D8D +5D795D7F5E585E595E535ED85ED15ED75ECE5EDC5ED55ED95ED25ED45F445F43 +5F6F5FB6612C61286141615E61716173615261536172616C618061746154617A +615B6165613B616A6161615662296227622B642B644D645B645D647464766472 +6473647D6475646664A6644E6482645E645C644B645364606450647F643F646C +646B645964656477657365A066A166A0669F67056704672269B169B669C90000 +E2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +69A069CE699669B069AC69BC69916999698E69A7698D69A969BE69AF69BF69C4 +69BD69A469D469B969CA699A69CF69B3699369AA69A1699E69D96997699069C2 +69B569A569C66B4A6B4D6B4B6B9E6B9F6BA06BC36BC46BFE6ECE6EF56EF16F03 +6F256EF86F376EFB6F2E6F096F4E6F196F1A6F276F186F3B6F126EED6F0A0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006F366F736EF96EEE6F2D6F406F306F3C6F356EEB6F076F0E6F436F056EFD +6EF66F396F1C6EFC6F3A6F1F6F0D6F1E6F086F21718771907189718071857182 +718F717B718671817197724472537297729572937343734D7351734C74627473 +7471747574727467746E750075027503757D759076167608760C76157611760A +761476B87781777C77857782776E7780776F777E778378B278AA78B478AD78A8 +787E78AB789E78A578A078AC78A278A47998798A798B79967995799479930000 +E3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +79977988799279907A2B7A4A7A307A2F7A287A267AA87AAB7AAC7AEE7B887B9C +7B8A7B917B907B967B8D7B8C7B9B7B8E7B857B9852847B997BA47B827CBB7CBF +7CBC7CBA7DA77DB77DC27DA37DAA7DC17DC07DC57D9D7DCE7DC47DC67DCB7DCC +7DAF7DB97D967DBC7D9F7DA67DAE7DA97DA17DC97F737FE27FE37FE57FDE0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008024805D805C8189818681838187818D818C818B8215849784A484A1849F +84BA84CE84C284AC84AE84AB84B984B484C184CD84AA849A84B184D0849D84A7 +84BB84A2849484C784CC849B84A984AF84A884D6849884B684CF84A084D784D4 +84D284DB84B084918661873387238728876B8740872E871E87218719871B8743 +872C8741873E874687208732872A872D873C8712873A87318735874287268727 +87388724871A8730871188F788E788F188F288FA88FE88EE88FC88F688FB0000 +E4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +88F088EC88EB899D89A1899F899E89E989EB89E88AAB8A998A8B8A928A8F8A96 +8C3D8C688C698CD58CCF8CD78D968E098E028DFF8E0D8DFD8E0A8E038E078E06 +8E058DFE8E008E048F108F118F0E8F0D9123911C91209122911F911D911A9124 +9121911B917A91729179917392A592A49276929B927A92A0929492AA928D0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000092A6929A92AB92799297927F92A392EE928E9282929592A2927D928892A1 +928A9286928C929992A7927E928792A9929D928B922D969E96A196FF9758977D +977A977E978397809782977B97849781977F97CE97CD981698AD98AE99029900 +9907999D999C99C399B999BB99BA99C299BD99C79AB19AE39AE79B3E9B3F9B60 +9B619B5F9CF19CF29CF59EA750FF5103513050F85106510750F650FE510B510C +50FD510A528B528C52F152EF56485642564C56355641564A5649564656580000 +E5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +565A56405633563D562C563E5638562A563A571A58AB589D58B158A058A358AF +58AC58A558A158FF5AFF5AF45AFD5AF75AF65B035AF85B025AF95B015B075B05 +5B0F5C675D995D975D9F5D925DA25D935D955DA05D9C5DA15D9A5D9E5E695E5D +5E605E5C7DF35EDB5EDE5EE15F495FB2618B6183617961B161B061A261890000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000619B619361AF61AD619F619261AA61A1618D616661B3622D646E64706496 +64A064856497649C648F648B648A648C64A3649F646864B164986576657A6579 +657B65B265B366B566B066A966B266B766AA66AF6A006A066A1769E569F86A15 +69F169E46A2069FF69EC69E26A1B6A1D69FE6A2769F269EE6A1469F769E76A40 +6A0869E669FB6A0D69FC69EB6A096A046A186A256A0F69F66A266A0769F46A16 +6B516BA56BA36BA26BA66C016C006BFF6C026F416F266F7E6F876FC66F920000 +E6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6F8D6F896F8C6F626F4F6F856F5A6F966F766F6C6F826F556F726F526F506F57 +6F946F936F5D6F006F616F6B6F7D6F676F906F536F8B6F696F7F6F956F636F77 +6F6A6F7B71B271AF719B71B071A0719A71A971B5719D71A5719E71A471A171AA +719C71A771B37298729A73587352735E735F7360735D735B7361735A73590000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000736274877489748A74867481747D74857488747C747975087507757E7625 +761E7619761D761C7623761A7628761B769C769D769E769B778D778F77897788 +78CD78BB78CF78CC78D178CE78D478C878C378C478C9799A79A179A0799C79A2 +799B6B767A397AB27AB47AB37BB77BCB7BBE7BAC7BCE7BAF7BB97BCA7BB57CC5 +7CC87CCC7CCB7DF77DDB7DEA7DE77DD77DE17E037DFA7DE67DF67DF17DF07DEE +7DDF7F767FAC7FB07FAD7FED7FEB7FEA7FEC7FE67FE88064806781A3819F0000 +E7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +819E819581A2819981978216824F825382528250824E82518524853B850F8500 +8529850E8509850D851F850A8527851C84FB852B84FA8508850C84F4852A84F2 +851584F784EB84F384FC851284EA84E9851684FE8528851D852E850284FD851E +84F68531852684E784E884F084EF84F9851885208530850B8519852F86620000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000875687638764877787E1877387588754875B87528761875A8751875E876D +876A8750874E875F875D876F876C877A876E875C8765874F877B877587628767 +8769885A8905890C8914890B891789188919890689168911890E890989A289A4 +89A389ED89F089EC8ACF8AC68AB88AD38AD18AD48AD58ABB8AD78ABE8AC08AC5 +8AD88AC38ABA8ABD8AD98C3E8C4D8C8F8CE58CDF8CD98CE88CDA8CDD8CE78DA0 +8D9C8DA18D9B8E208E238E258E248E2E8E158E1B8E168E118E198E268E270000 +E8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8E148E128E188E138E1C8E178E1A8F2C8F248F188F1A8F208F238F168F179073 +9070906F9067906B912F912B9129912A91329126912E91859186918A91819182 +9184918092D092C392C492C092D992B692CF92F192DF92D892E992D792DD92CC +92EF92C292E892CA92C892CE92E692CD92D592C992E092DE92E792D192D30000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000092B592E192C692B4957C95AC95AB95AE95B096A496A296D3970597089702 +975A978A978E978897D097CF981E981D9826982998289820981B982798B29908 +98FA9911991499169917991599DC99CD99CF99D399D499CE99C999D699D899CB +99D799CC9AB39AEC9AEB9AF39AF29AF19B469B439B679B749B719B669B769B75 +9B709B689B649B6C9CFC9CFA9CFD9CFF9CF79D079D009CF99CFB9D089D059D04 +9E839ED39F0F9F10511C51135117511A511151DE533453E156705660566E0000 +E9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +567356665663566D5672565E5677571C571B58C858BD58C958BF58BA58C258BC +58C65B175B195B1B5B215B145B135B105B165B285B1A5B205B1E5BEF5DAC5DB1 +5DA95DA75DB55DB05DAE5DAA5DA85DB25DAD5DAF5DB45E675E685E665E6F5EE9 +5EE75EE65EE85EE55F4B5FBC619D61A8619661C561B461C661C161CC61BA0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000061BF61B8618C64D764D664D064CF64C964BD648964C364DB64F364D96533 +657F657C65A266C866BE66C066CA66CB66CF66BD66BB66BA66CC67236A346A66 +6A496A676A326A686A3E6A5D6A6D6A766A5B6A516A286A5A6A3B6A3F6A416A6A +6A646A506A4F6A546A6F6A696A606A3C6A5E6A566A556A4D6A4E6A466B556B54 +6B566BA76BAA6BAB6BC86BC76C046C036C066FAD6FCB6FA36FC76FBC6FCE6FC8 +6F5E6FC46FBD6F9E6FCA6FA870046FA56FAE6FBA6FAC6FAA6FCF6FBF6FB80000 +EA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6FA26FC96FAB6FCD6FAF6FB26FB071C571C271BF71B871D671C071C171CB71D4 +71CA71C771CF71BD71D871BC71C671DA71DB729D729E736973667367736C7365 +736B736A747F749A74A074947492749574A1750B7580762F762D7631763D7633 +763C76357632763076BB76E6779A779D77A1779C779B77A277A3779577990000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000779778DD78E978E578EA78DE78E378DB78E178E278ED78DF78E079A47A44 +7A487A477AB67AB87AB57AB17AB77BDE7BE37BE77BDD7BD57BE57BDA7BE87BF9 +7BD47BEA7BE27BDC7BEB7BD87BDF7CD27CD47CD77CD07CD17E127E217E177E0C +7E1F7E207E137E0E7E1C7E157E1A7E227E0B7E0F7E167E0D7E147E257E247F43 +7F7B7F7C7F7A7FB17FEF802A8029806C81B181A681AE81B981B581AB81B081AC +81B481B281B781A781F282558256825785568545856B854D8553856185580000 +EB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +854085468564854185628544855185478563853E855B8571854E856E85758555 +85678560858C8566855D85548565856C866386658664879B878F879787938792 +87888781879687988779878787A3878587908791879D87848794879C879A8789 +891E89268930892D892E89278931892289298923892F892C891F89F18AE00000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008AE28AF28AF48AF58ADD8B148AE48ADF8AF08AC88ADE8AE18AE88AFF8AEF +8AFB8C918C928C908CF58CEE8CF18CF08CF38D6C8D6E8DA58DA78E338E3E8E38 +8E408E458E368E3C8E3D8E418E308E3F8EBD8F368F2E8F358F328F398F378F34 +90769079907B908690FA913391359136919391909191918D918F9327931E9308 +931F9306930F937A9338933C931B9323931293019346932D930E930D92CB931D +92FA9325931392F992F793349302932492FF932993399335932A9314930C0000 +EC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +930B92FE9309930092FB931695BC95CD95BE95B995BA95B695BF95B595BD96A9 +96D4970B9712971097999797979497F097F89835982F98329924991F99279929 +999E99EE99EC99E599E499F099E399EA99E999E79AB99ABF9AB49ABB9AF69AFA +9AF99AF79B339B809B859B879B7C9B7E9B7B9B829B939B929B909B7A9B950000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009B7D9B889D259D179D209D1E9D149D299D1D9D189D229D109D199D1F9E88 +9E869E879EAE9EAD9ED59ED69EFA9F129F3D51265125512251245120512952F4 +5693568C568D568656845683567E5682567F568158D658D458CF58D25B2D5B25 +5B325B235B2C5B275B265B2F5B2E5B7B5BF15BF25DB75E6C5E6A5FBE5FBB61C3 +61B561BC61E761E061E561E461E861DE64EF64E964E364EB64E464E865816580 +65B665DA66D26A8D6A966A816AA56A896A9F6A9B6AA16A9E6A876A936A8E0000 +ED +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6A956A836AA86AA46A916A7F6AA66A9A6A856A8C6A926B5B6BAD6C096FCC6FA9 +6FF46FD46FE36FDC6FED6FE76FE66FDE6FF26FDD6FE26FE871E171F171E871F2 +71E471F071E27373736E736F749774B274AB749074AA74AD74B174A574AF7510 +75117512750F7584764376487649764776A476E977B577AB77B277B777B60000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000077B477B177A877F078F378FD790278FB78FC78F2790578F978FE790479AB +79A87A5C7A5B7A567A587A547A5A7ABE7AC07AC17C057C0F7BF27C007BFF7BFB +7C0E7BF47C0B7BF37C027C097C037C017BF87BFD7C067BF07BF17C107C0A7CE8 +7E2D7E3C7E427E3398487E387E2A7E497E407E477E297E4C7E307E3B7E367E44 +7E3A7F457F7F7F7E7F7D7FF47FF2802C81BB81C481CC81CA81C581C781BC81E9 +825B825A825C85838580858F85A7859585A0858B85A3857B85A4859A859E0000 +EE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8577857C858985A1857A85788557858E85968586858D8599859D858185A28582 +858885858579857685988590859F866887BE87AA87AD87C587B087AC87B987B5 +87BC87AE87C987C387C287CC87B787AF87C487CA87B487B687BF87B887BD87DE +87B289358933893C893E894189528937894289AD89AF89AE89F289F38B1E0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008B188B168B118B058B0B8B228B0F8B128B158B078B0D8B088B068B1C8B13 +8B1A8C4F8C708C728C718C6F8C958C948CF98D6F8E4E8E4D8E538E508E4C8E47 +8F438F409085907E9138919A91A2919B9199919F91A1919D91A093A1938393AF +936493569347937C9358935C93769349935093519360936D938F934C936A9379 +935793559352934F93719377937B9361935E936393679380934E935995C795C0 +95C995C395C595B796AE96B096AC9720971F9718971D9719979A97A1979C0000 +EF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +979E979D97D597D497F198419844984A9849984598439925992B992C992A9933 +9932992F992D99319930999899A399A19A0299FA99F499F799F999F899F699FB +99FD99FE99FC9A039ABE9AFE9AFD9B019AFC9B489B9A9BA89B9E9B9B9BA69BA1 +9BA59BA49B869BA29BA09BAF9D339D419D679D369D2E9D2F9D319D389D300000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009D459D429D439D3E9D379D409D3D7FF59D2D9E8A9E899E8D9EB09EC89EDA +9EFB9EFF9F249F239F229F549FA05131512D512E5698569C5697569A569D5699 +59705B3C5C695C6A5DC05E6D5E6E61D861DF61ED61EE61F161EA61F061EB61D6 +61E964FF650464FD64F86501650364FC659465DB66DA66DB66D86AC56AB96ABD +6AE16AC66ABA6AB66AB76AC76AB46AAD6B5E6BC96C0B7007700C700D70017005 +7014700E6FFF70006FFB70266FFC6FF7700A720171FF71F9720371FD73760000 +F0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +74B874C074B574C174BE74B674BB74C275147513765C76647659765076537657 +765A76A676BD76EC77C277BA78FF790C79137914790979107912791179AD79AC +7A5F7C1C7C297C197C207C1F7C2D7C1D7C267C287C227C257C307E5C7E507E56 +7E637E587E627E5F7E517E607E577E537FB57FB37FF77FF8807581D181D20000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000081D0825F825E85B485C685C085C385C285B385B585BD85C785C485BF85CB +85CE85C885C585B185B685D2862485B885B785BE866987E787E687E287DB87EB +87EA87E587DF87F387E487D487DC87D387ED87D887E387A487D787D9880187F4 +87E887DD8953894B894F894C89468950895189498B2A8B278B238B338B308B35 +8B478B2F8B3C8B3E8B318B258B378B268B368B2E8B248B3B8B3D8B3A8C428C75 +8C998C988C978CFE8D048D028D008E5C8E628E608E578E568E5E8E658E670000 +F1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8E5B8E5A8E618E5D8E698E548F468F478F488F4B9128913A913B913E91A891A5 +91A791AF91AA93B5938C939293B7939B939D938993A7938E93AA939E93A69395 +93889399939F938D93B1939193B293A493A893B493A393A595D295D395D196B3 +96D796DA5DC296DF96D896DD97239722972597AC97AE97A897AB97A497AA0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000097A297A597D797D997D697D897FA98509851985298B89941993C993A9A0F +9A0B9A099A0D9A049A119A0A9A059A079A069AC09ADC9B089B049B059B299B35 +9B4A9B4C9B4B9BC79BC69BC39BBF9BC19BB59BB89BD39BB69BC49BB99BBD9D5C +9D539D4F9D4A9D5B9D4B9D599D569D4C9D579D529D549D5F9D589D5A9E8E9E8C +9EDF9F019F009F169F259F2B9F2A9F299F289F4C9F5551345135529652F753B4 +56AB56AD56A656A756AA56AC58DA58DD58DB59125B3D5B3E5B3F5DC35E700000 +F2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5FBF61FB65076510650D6509650C650E658465DE65DD66DE6AE76AE06ACC6AD1 +6AD96ACB6ADF6ADC6AD06AEB6ACF6ACD6ADE6B606BB06C0C7019702770207016 +702B702170227023702970177024701C702A720C720A72077202720572A572A6 +72A472A372A174CB74C574B774C37516766077C977CA77C477F1791D791B0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007921791C7917791E79B07A677A687C337C3C7C397C2C7C3B7CEC7CEA7E76 +7E757E787E707E777E6F7E7A7E727E747E687F4B7F4A7F837F867FB77FFD7FFE +807881D781D582648261826385EB85F185ED85D985E185E885DA85D785EC85F2 +85F885D885DF85E385DC85D185F085E685EF85DE85E2880087FA880387F687F7 +8809880C880B880687FC880887FF880A88028962895A895B89578961895C8958 +895D8959898889B789B689F68B508B488B4A8B408B538B568B548B4B8B550000 +F3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8B518B428B528B578C438C778C768C9A8D068D078D098DAC8DAA8DAD8DAB8E6D +8E788E738E6A8E6F8E7B8EC28F528F518F4F8F508F538FB49140913F91B091AD +93DE93C793CF93C293DA93D093F993EC93CC93D993A993E693CA93D493EE93E3 +93D593C493CE93C093D293E7957D95DA95DB96E19729972B972C972897260000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000097B397B797B697DD97DE97DF985C9859985D985798BF98BD98BB98BE9948 +9947994399A699A79A1A9A159A259A1D9A249A1B9A229A209A279A239A1E9A1C +9A149AC29B0B9B0A9B0E9B0C9B379BEA9BEB9BE09BDE9BE49BE69BE29BF09BD4 +9BD79BEC9BDC9BD99BE59BD59BE19BDA9D779D819D8A9D849D889D719D809D78 +9D869D8B9D8C9D7D9D6B9D749D759D709D699D859D739D7B9D829D6F9D799D7F +9D879D689E949E919EC09EFC9F2D9F409F419F4D9F569F579F58533756B20000 +F4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +56B556B358E35B455DC65DC75EEE5EEF5FC05FC161F9651765166515651365DF +66E866E366E46AF36AF06AEA6AE86AF96AF16AEE6AEF703C7035702F70377034 +703170427038703F703A70397040703B703370417213721472A8737D737C74BA +76AB76AA76BE76ED77CC77CE77CF77CD77F27925792379277928792479290000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000079B27A6E7A6C7A6D7AF77C497C487C4A7C477C457CEE7E7B7E7E7E817E80 +7FBA7FFF807981DB81D9820B82688269862285FF860185FE861B860085F68604 +86098605860C85FD8819881088118817881388168963896689B989F78B608B6A +8B5D8B688B638B658B678B6D8DAE8E868E888E848F598F568F578F558F588F5A +908D9143914191B791B591B291B3940B941393FB9420940F941493FE94159410 +94289419940D93F5940093F79407940E9416941293FA940993F8940A93FF0000 +F5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +93FC940C93F69411940695DE95E095DF972E972F97B997BB97FD97FE98609862 +9863985F98C198C29950994E9959994C994B99539A329A349A319A2C9A2A9A36 +9A299A2E9A389A2D9AC79ACA9AC69B109B129B119C0B9C089BF79C059C129BF8 +9C409C079C0E9C069C179C149C099D9F9D999DA49D9D9D929D989D909D9B0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009DA09D949D9C9DAA9D979DA19D9A9DA29DA89D9E9DA39DBF9DA99D969DA6 +9DA79E999E9B9E9A9EE59EE49EE79EE69F309F2E9F5B9F609F5E9F5D9F599F91 +513A51395298529756C356BD56BE5B485B475DCB5DCF5EF161FD651B6B026AFC +6B036AF86B0070437044704A7048704970457046721D721A7219737E7517766A +77D0792D7931792F7C547C537CF27E8A7E877E887E8B7E867E8D7F4D7FBB8030 +81DD8618862A8626861F8623861C86198627862E862186208629861E86250000 +F6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8829881D881B88208824881C882B884A896D8969896E896B89FA8B798B788B45 +8B7A8B7B8D108D148DAF8E8E8E8C8F5E8F5B8F5D91469144914591B9943F943B +94369429943D943C94309439942A9437942C9440943195E595E495E39735973A +97BF97E1986498C998C698C0995899569A399A3D9A469A449A429A419A3A0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009A3F9ACD9B159B179B189B169B3A9B529C2B9C1D9C1C9C2C9C239C289C29 +9C249C219DB79DB69DBC9DC19DC79DCA9DCF9DBE9DC59DC39DBB9DB59DCE9DB9 +9DBA9DAC9DC89DB19DAD9DCC9DB39DCD9DB29E7A9E9C9EEB9EEE9EED9F1B9F18 +9F1A9F319F4E9F659F649F924EB956C656C556CB59715B4B5B4C5DD55DD15EF2 +65216520652665226B0B6B086B096C0D7055705670577052721E721F72A9737F +74D874D574D974D7766D76AD793579B47A707A717C577C5C7C597C5B7C5A0000 +F7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7CF47CF17E917F4F7F8781DE826B863486358633862C86328636882C88288826 +882A8825897189BF89BE89FB8B7E8B848B828B868B858B7F8D158E958E948E9A +8E928E908E968E978F608F629147944C9450944A944B944F9447944594489449 +9446973F97E3986A986998CB9954995B9A4E9A539A549A4C9A4F9A489A4A0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009A499A529A509AD09B199B2B9B3B9B569B559C469C489C3F9C449C399C33 +9C419C3C9C379C349C329C3D9C369DDB9DD29DDE9DDA9DCB9DD09DDC9DD19DDF +9DE99DD99DD89DD69DF59DD59DDD9EB69EF09F359F339F329F429F6B9F959FA2 +513D529958E858E759725B4D5DD8882F5F4F62016203620465296525659666EB +6B116B126B0F6BCA705B705A7222738273817383767077D47C677C667E95826C +863A86408639863C8631863B863E88308832882E883389768974897389FE0000 +F8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8B8C8B8E8B8B8B888C458D198E988F648F6391BC94629455945D9457945E97C4 +97C598009A569A599B1E9B1F9B209C529C589C509C4A9C4D9C4B9C559C599C4C +9C4E9DFB9DF79DEF9DE39DEB9DF89DE49DF69DE19DEE9DE69DF29DF09DE29DEC +9DF49DF39DE89DED9EC29ED09EF29EF39F069F1C9F389F379F369F439F4F0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009F719F709F6E9F6F56D356CD5B4E5C6D652D66ED66EE6B13705F7061705D +7060722374DB74E577D5793879B779B67C6A7E977F89826D8643883888378835 +884B8B948B958E9E8E9F8EA08E9D91BE91BD91C2946B9468946996E597469743 +974797C797E59A5E9AD59B599C639C679C669C629C5E9C609E029DFE9E079E03 +9E069E059E009E019E099DFF9DFD9E049EA09F1E9F469F749F759F7656D4652E +65B86B186B196B176B1A7062722672AA77D877D979397C697C6B7CF67E9A0000 +F9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7E987E9B7E9981E081E18646864786488979897A897C897B89FF8B988B998EA5 +8EA48EA3946E946D946F9471947397499872995F9C689C6E9C6D9E0B9E0D9E10 +9E0F9E129E119EA19EF59F099F479F789F7B9F7A9F79571E70667C6F883C8DB2 +8EA691C394749478947694759A609C749C739C719C759E149E139EF69F0A0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009FA4706870657CF7866A883E883D883F8B9E8C9C8EA98EC9974B98739874 +98CC996199AB9A649A669A679B249E159E179F4862076B1E7227864C8EA89482 +948094819A699A689B2E9E197229864B8B9F94839C799EB776759A6B9C7A9E1D +7069706A9EA49F7E9F499F98788192B988CF58BB60527CA75AFA255425662557 +2560256C2563255A2569255D255225642555255E256A256125582567255B2553 +25652556255F256B256225592568255C25512550256D256E2570256F25930000 diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/dingbats.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/dingbats.enc new file mode 100644 index 00000000..97294876 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/dingbats.enc @@ -0,0 +1,20 @@ +# Encoding file: dingbats, single-byte +S +003F 1 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +00202701270227032704260E2706270727082709261B261E270C270D270E270F +2710271127122713271427152716271727182719271A271B271C271D271E271F +2720272127222723272427252726272726052729272A272B272C272D272E272F +2730273127322733273427352736273727382739273A273B273C273D273E273F +2740274127422743274427452746274727482749274A274B25CF274D25A0274F +27502751275225B225BC25C6275625D727582759275A275B275C275D275E007F +0080008100820083008400850086008700880089008A008B008C008D008E008F +0090009100920093009400950096009700980099009A009B009C009D009E009F +0000276127622763276427652766276726632666266526602460246124622463 +2464246524662467246824692776277727782779277A277B277C277D277E277F +2780278127822783278427852786278727882789278A278B278C278D278E278F +2790279127922793279421922194219527982799279A279B279C279D279E279F +27A027A127A227A327A427A527A627A727A827A927AA27AB27AC27AD27AE27AF +000027B127B227B327B427B527B627B727B827B927BA27BB27BC27BD27BE0000 diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/ebcdic.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/ebcdic.enc new file mode 100644 index 00000000..f451de59 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/ebcdic.enc @@ -0,0 +1,19 @@ +S +006F 0 1 +00 +0000000100020003008500090086007F0087008D008E000B000C000D000E000F +0010001100120013008F000A0008009700180019009C009D001C001D001E001F +0080008100820083008400920017001B00880089008A008B008C000500060007 +0090009100160093009400950096000400980099009A009B00140015009E001A +002000A000E200E400E000E100E300E500E700F10060002E003C0028002B007C +002600E900EA00EB00E800ED00EE00EF00EC00DF00210024002A0029003B009F +002D002F00C200C400C000C100C300C500C700D1005E002C0025005F003E003F +00F800C900CA00CB00C800CD00CE00CF00CC00A8003A002300400027003D0022 +00D800610062006300640065006600670068006900AB00BB00F000FD00FE00B1 +00B0006A006B006C006D006E006F00700071007200AA00BA00E600B800C600A4 +00B500AF0073007400750076007700780079007A00A100BF00D000DD00DE00AE +00A200A300A500B700A900A700B600BC00BD00BE00AC005B005C005D00B400D7 +00F900410042004300440045004600470048004900AD00F400F600F200F300F5 +00A6004A004B004C004D004E004F00500051005200B900FB00FC00DB00FA00FF +00D900F70053005400550056005700580059005A00B200D400D600D200D300D5 +003000310032003300340035003600370038003900B3007B00DC007D00DA007E diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/euc-cn.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/euc-cn.enc new file mode 100644 index 00000000..4b2f8c73 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/euc-cn.enc @@ -0,0 +1,1397 @@ +# Encoding file: euc-cn, multi-byte +M +003F 0 82 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +0080008100820083008400850086008700880089008A008B008C008D008E008F +0090009100920093009400950096009700980099009A009B009C009D009E009F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +A1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000030003001300230FB02C902C700A8300330052015FF5E2225202620182019 +201C201D3014301530083009300A300B300C300D300E300F3016301730103011 +00B100D700F72236222722282211220F222A222922082237221A22A522252220 +23122299222B222E2261224C2248223D221D2260226E226F22642265221E2235 +22342642264000B0203220332103FF0400A4FFE0FFE1203000A7211626062605 +25CB25CF25CE25C725C625A125A025B325B2203B219221902191219330130000 +A2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000024882489248A248B248C248D248E248F2490249124922493249424952496 +249724982499249A249B247424752476247724782479247A247B247C247D247E +247F248024812482248324842485248624872460246124622463246424652466 +2467246824690000000032203221322232233224322532263227322832290000 +00002160216121622163216421652166216721682169216A216B000000000000 +A3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000FF01FF02FF03FFE5FF05FF06FF07FF08FF09FF0AFF0BFF0CFF0DFF0EFF0F +FF10FF11FF12FF13FF14FF15FF16FF17FF18FF19FF1AFF1BFF1CFF1DFF1EFF1F +FF20FF21FF22FF23FF24FF25FF26FF27FF28FF29FF2AFF2BFF2CFF2DFF2EFF2F +FF30FF31FF32FF33FF34FF35FF36FF37FF38FF39FF3AFF3BFF3CFF3DFF3EFF3F +FF40FF41FF42FF43FF44FF45FF46FF47FF48FF49FF4AFF4BFF4CFF4DFF4EFF4F +FF50FF51FF52FF53FF54FF55FF56FF57FF58FF59FF5AFF5BFF5CFF5DFFE30000 +A4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000304130423043304430453046304730483049304A304B304C304D304E304F +3050305130523053305430553056305730583059305A305B305C305D305E305F +3060306130623063306430653066306730683069306A306B306C306D306E306F +3070307130723073307430753076307730783079307A307B307C307D307E307F +3080308130823083308430853086308730883089308A308B308C308D308E308F +3090309130923093000000000000000000000000000000000000000000000000 +A5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000030A130A230A330A430A530A630A730A830A930AA30AB30AC30AD30AE30AF +30B030B130B230B330B430B530B630B730B830B930BA30BB30BC30BD30BE30BF +30C030C130C230C330C430C530C630C730C830C930CA30CB30CC30CD30CE30CF +30D030D130D230D330D430D530D630D730D830D930DA30DB30DC30DD30DE30DF +30E030E130E230E330E430E530E630E730E830E930EA30EB30EC30ED30EE30EF +30F030F130F230F330F430F530F6000000000000000000000000000000000000 +A6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000039103920393039403950396039703980399039A039B039C039D039E039F +03A003A103A303A403A503A603A703A803A90000000000000000000000000000 +000003B103B203B303B403B503B603B703B803B903BA03BB03BC03BD03BE03BF +03C003C103C303C403C503C603C703C803C90000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +A7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000004100411041204130414041504010416041704180419041A041B041C041D +041E041F0420042104220423042404250426042704280429042A042B042C042D +042E042F00000000000000000000000000000000000000000000000000000000 +000004300431043204330434043504510436043704380439043A043B043C043D +043E043F0440044104420443044404450446044704480449044A044B044C044D +044E044F00000000000000000000000000000000000000000000000000000000 +A8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000010100E101CE00E0011300E9011B00E8012B00ED01D000EC014D00F301D2 +00F2016B00FA01D400F901D601D801DA01DC00FC00EA00000000000000000000 +0000000000000000000031053106310731083109310A310B310C310D310E310F +3110311131123113311431153116311731183119311A311B311C311D311E311F +3120312131223123312431253126312731283129000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +A9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00000000000000002500250125022503250425052506250725082509250A250B +250C250D250E250F2510251125122513251425152516251725182519251A251B +251C251D251E251F2520252125222523252425252526252725282529252A252B +252C252D252E252F2530253125322533253425352536253725382539253A253B +253C253D253E253F2540254125422543254425452546254725482549254A254B +0000000000000000000000000000000000000000000000000000000000000000 +B0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000554A963F57C3632854CE550954C07691764C853C77EE827E788D72319698 +978D6C285B894FFA630966975CB880FA684880AE660276CE51F9655671AC7FF1 +888450B2596561CA6FB382AD634C625253ED54277B06516B75A45DF462D48DCB +9776628A8019575D97387F627238767D67CF767E64464F708D2562DC7A176591 +73ED642C6273822C9881677F7248626E62CC4F3474E3534A529E7ECA90A65E2E +6886699C81807ED168D278C5868C9551508D8C2482DE80DE5305891252650000 +B1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000858496F94FDD582199715B9D62B162A566B48C799C8D7206676F789160B2 +535153178F8880CC8D1D94A1500D72C8590760EB711988AB595482EF672C7B28 +5D297EF7752D6CF58E668FF8903C9F3B6BD491197B145F7C78A784D6853D6BD5 +6BD96BD65E015E8775F995ED655D5F0A5FC58F9F58C181C2907F965B97AD8FB9 +7F168D2C62414FBF53D8535E8FA88FA98FAB904D68075F6A819888689CD6618B +522B762A5F6C658C6FD26EE85BBE6448517551B067C44E1979C9997C70B30000 +B2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000075C55E7673BB83E064AD62E894B56CE2535A52C3640F94C27B944F2F5E1B +82368116818A6E246CCA9A736355535C54FA886557E04E0D5E036B657C3F90E8 +601664E6731C88C16750624D8D22776C8E2991C75F6983DC8521991053C28695 +6B8B60ED60E8707F82CD82314ED36CA785CF64CD7CD969FD66F9834953957B56 +4FA7518C6D4B5C428E6D63D253C9832C833667E578B4643D5BDF5C945DEE8BE7 +62C667F48C7A640063BA8749998B8C177F2094F24EA7961098A4660C73160000 +B3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000573A5C1D5E38957F507F80A05382655E7545553150218D856284949E671D +56326F6E5DE2543570928F66626F64A463A35F7B6F8890F481E38FB05C186668 +5FF16C8996488D81886C649179F057CE6A59621054484E587A0B60E96F848BDA +627F901E9A8B79E4540375F4630153196C608FDF5F1B9A70803B9F7F4F885C3A +8D647FC565A570BD514551B2866B5D075BA062BD916C75748E0C7A2061017B79 +4EC77EF877854E1181ED521D51FA6A7153A88E87950496CF6EC19664695A0000 +B4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000784050A877D7641089E6590463E35DDD7A7F693D4F20823955984E3275AE +7A975E625E8A95EF521B5439708A6376952457826625693F918755076DF37EAF +882262337EF075B5832878C196CC8F9E614874F78BCD6B64523A8D506B21806A +847156F153064ECE4E1B51D17C97918B7C074FC38E7F7BE17A9C64675D1450AC +810676017CB96DEC7FE067515B585BF878CB64AE641363AA632B9519642D8FBE +7B5476296253592754466B7950A362345E266B864EE38D37888B5F85902E0000 +B5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006020803D62C54E39535590F863B880C665E66C2E4F4660EE6DE18BDE5F39 +86CB5F536321515A83616863520063638E4850125C9B79775BFC52307A3B60BC +905376D75FB75F9776848E6C706F767B7B4977AA51F3909358244F4E6EF48FEA +654C7B1B72C46DA47FDF5AE162B55E95573084827B2C5E1D5F1F90127F1498A0 +63826EC7789870B95178975B57AB75354F4375385E9760E659606DC06BBF7889 +53FC96D551CB52016389540A94938C038DCC7239789F87768FED8C0D53E00000 +B6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004E0176EF53EE948998769F0E952D5B9A8BA24E224E1C51AC846361C252A8 +680B4F97606B51BB6D1E515C6296659796618C46901775D890FD77636BD2728A +72EC8BFB583577798D4C675C9540809A5EA66E2159927AEF77ED953B6BB565AD +7F0E58065151961F5BF958A954288E726566987F56E4949D76FE9041638754C6 +591A593A579B8EB267358DFA8235524160F0581586FE5CE89E454FC4989D8BB9 +5A2560765384627C904F9102997F6069800C513F80335C1499756D314E8C0000 +B7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008D3053D17F5A7B4F4F104E4F96006CD573D085E95E06756A7FFB6A0A77FE +94927E4151E170E653CD8FD483038D2972AF996D6CDB574A82B365B980AA623F +963259A84EFF8BBF7EBA653E83F2975E556198DE80A5532A8BFD542080BA5E9F +6CB88D3982AC915A54296C1B52067EB7575F711A6C7E7C89594B4EFD5FFF6124 +7CAA4E305C0167AB87025CF0950B98CE75AF70FD902251AF7F1D8BBD594951E4 +4F5B5426592B657780A45B75627662C28F905E456C1F7B264F0F4FD8670D0000 +B8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006D6E6DAA798F88B15F17752B629A8F854FEF91DC65A7812F81515E9C8150 +8D74526F89868D4B590D50854ED8961C723681798D1F5BCC8BA3964459877F1A +54905676560E8BE565396982949976D66E895E727518674667D17AFF809D8D76 +611F79C665628D635188521A94A27F38809B7EB25C976E2F67607BD9768B9AD8 +818F7F947CD5641E95507A3F544A54E56B4C640162089E3D80F3759952729769 +845B683C86E49601969494EC4E2A54047ED968398DDF801566F45E9A7FB90000 +B9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000057C2803F68975DE5653B529F606D9F9A4F9B8EAC516C5BAB5F135DE96C5E +62F18D21517194A952FE6C9F82DF72D757A267848D2D591F8F9C83C754957B8D +4F306CBD5B6459D19F1353E486CA9AA88C3780A16545987E56FA96C7522E74DC +52505BE1630289024E5662D0602A68FA51735B9851A089C27BA199867F5060EF +704C8D2F51495E7F901B747089C4572D78455F529F9F95FA8F689B3C8BE17678 +684267DC8DEA8D35523D8F8A6EDA68CD950590ED56FD679C88F98FC754C80000 +BA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009AB85B696D776C264EA55BB39A87916361A890AF97E9542B6DB55BD251FD +558A7F557FF064BC634D65F161BE608D710A6C576C49592F676D822A58D5568E +8C6A6BEB90DD597D801753F76D695475559D837783CF683879BE548C4F555408 +76D28C8996026CB36DB88D6B89109E648D3A563F9ED175D55F8872E0606854FC +4EA86A2A886160528F7054C470D886799E3F6D2A5B8F5F187EA255894FAF7334 +543C539A5019540E547C4E4E5FFD745A58F6846B80E1877472D07CCA6E560000 +BB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005F27864E552C62A44E926CAA623782B154D7534E733E6ED1753B52125316 +8BDD69D05F8A60006DEE574F6B2273AF68538FD87F13636260A3552475EA8C62 +71156DA35BA65E7B8352614C9EC478FA87577C27768751F060F6714C66435E4C +604D8C0E707063258F895FBD606286D456DE6BC160946167534960E066668D3F +79FD4F1A70E96C478BB38BF27ED88364660F5A5A9B426D516DF78C416D3B4F19 +706B83B7621660D1970D8D27797851FB573E57FA673A75787A3D79EF7B950000 +BC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000808C99658FF96FC08BA59E2159EC7EE97F095409678168D88F917C4D96C6 +53CA602575BE6C7253735AC97EA7632451E0810A5DF184DF628051805B634F0E +796D524260B86D4E5BC45BC28BA18BB065E25FCC964559937EE77EAA560967B7 +59394F735BB652A0835A988A8D3E753294BE50477A3C4EF767B69A7E5AC16B7C +76D1575A5C167B3A95F4714E517C80A9827059787F04832768C067EC78B17877 +62E363617B804FED526A51CF835069DB92748DF58D3189C1952E7BAD4EF60000 +BD +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000506582305251996F6E106E856DA75EFA50F559DC5C066D466C5F7586848B +686859568BB253209171964D854969127901712680F64EA490CA6D479A845A07 +56BC640594F077EB4FA5811A72E189D2997A7F347EDE527F655991758F7F8F83 +53EB7A9663ED63A5768679F888579636622A52AB8282685467706377776B7AED +6D017ED389E359D0621285C982A5754C501F4ECB75A58BEB5C4A5DFE7B4B65A4 +91D14ECA6D25895F7D2795264EC58C288FDB9773664B79818FD170EC6D780000 +BE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005C3D52B283465162830E775B66769CB84EAC60CA7CBE7CB37ECF4E958B66 +666F988897595883656C955C5F8475C997567ADF7ADE51C070AF7A9863EA7A76 +7EA0739697ED4E4570784E5D915253A9655165E781FC8205548E5C31759A97A0 +62D872D975BD5C459A7983CA5C40548077E94E3E6CAE805A62D2636E5DE85177 +8DDD8E1E952F4FF153E560E770AC526763509E435A1F5026773753777EE26485 +652B628963985014723589C951B38BC07EDD574783CC94A7519B541B5CFB0000 +BF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004FCA7AE36D5A90E19A8F55805496536154AF5F0063E9697751EF6168520A +582A52D8574E780D770B5EB761777CE0625B62974EA27095800362F770E49760 +577782DB67EF68F578D5989779D158F354B353EF6E34514B523B5BA28BFE80AF +554357A660735751542D7A7A60505B5463A762A053E362635BC767AF54ED7A9F +82E691775E9388E4593857AE630E8DE880EF57577B774FA95FEB5BBD6B3E5321 +7B5072C2684677FF773665F751B54E8F76D45CBF7AA58475594E9B4150800000 +C0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000998861276E8357646606634656F062EC62695ED39614578362C955878721 +814A8FA3556683B167658D5684DD5A6A680F62E67BEE961151706F9C8C3063FD +89C861D27F0670C26EE57405699472FC5ECA90CE67176D6A635E52B372628001 +4F6C59E5916A70D96D9D52D24E5096F7956D857E78CA7D2F5121579264C2808B +7C7B6CEA68F1695E51B7539868A872819ECE7BF172F879BB6F137406674E91CC +9CA4793C83898354540F68174E3D538952B1783E5386522950884F8B4FD00000 +C1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000075E27ACB7C926CA596B6529B748354E94FE9805483B28FDE95705EC9601C +6D9F5E18655B813894FE604B70BC7EC37CAE51C968817CB1826F4E248F8691CF +667E4EAE8C0564A9804A50DA759771CE5BE58FBD6F664E86648295635ED66599 +521788C270C852A3730E7433679778F797164E3490BB9CDE6DCB51DB8D41541D +62CE73B283F196F69F8494C34F367F9A51CC707596755CAD988653E64EE46E9C +740969B4786B998F7559521876246D4167F3516D9F99804B54997B3C7ABF0000 +C2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009686578462E29647697C5A0464027BD36F0F964B82A6536298855E907089 +63B35364864F9C819E93788C97328DEF8D429E7F6F5E79845F559646622E9A74 +541594DD4FA365C55C655C617F1586516C2F5F8B73876EE47EFF5CE6631B5B6A +6EE653754E7163A0756562A18F6E4F264ED16CA67EB68BBA841D87BA7F57903B +95237BA99AA188F8843D6D1B9A867EDC59889EBB739B780186829A6C9A82561B +541757CB4E709EA653568FC881097792999286EE6EE1851366FC61626F2B0000 +C3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008C298292832B76F26C135FD983BD732B8305951A6BDB77DB94C6536F8302 +51925E3D8C8C8D384E4873AB679A68859176970971646CA177095A9295416BCF +7F8E66275BD059B95A9A95E895F74EEC840C84996AAC76DF9530731B68A65B5F +772F919A97617CDC8FF78C1C5F257C7379D889C56CCC871C5BC65E4268C97720 +7EF55195514D52C95A297F05976282D763CF778485D079D26E3A5E9959998511 +706D6C1162BF76BF654F60AF95FD660E879F9E2394ED540D547D8C2C64780000 +C4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000647986116A21819C78E864699B5462B9672B83AB58A89ED86CAB6F205BDE +964C8C0B725F67D062C772614EA959C66BCD589366AE5E5552DF6155672876EE +776672677A4662FF54EA545094A090A35A1C7EB36C164E435976801059485357 +753796BE56CA63208111607C95F96DD65462998151855AE980FD59AE9713502A +6CE55C3C62DF4F60533F817B90066EBA852B62C85E7478BE64B5637B5FF55A18 +917F9E1F5C3F634F80425B7D556E954A954D6D8560A867E072DE51DD5B810000 +C5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000062E76CDE725B626D94AE7EBD81136D53519C5F04597452AA601259736696 +8650759F632A61E67CEF8BFA54E66B279E256BB485D5545550766CA4556A8DB4 +722C5E156015743662CD6392724C5F986E436D3E65006F5876D878D076FC7554 +522453DB4E535E9E65C1802A80D6629B5486522870AE888D8DD16CE1547880DA +57F988F48D54966A914D4F696C9B55B776C6783062A870F96F8E5F6D84EC68DA +787C7BF781A8670B9E4F636778B0576F78129739627962AB528874356BD70000 +C6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005564813E75B276AE533975DE50FB5C418B6C7BC7504F72479A9798D86F02 +74E27968648777A562FC98918D2B54C180584E52576A82F9840D5E7351ED74F6 +8BC45C4F57616CFC98875A4678349B448FEB7C955256625194FA4EC683868461 +83E984B257D467345703666E6D668C3166DD7011671F6B3A6816621A59BB4E03 +51C46F0667D26C8F517668CB59476B6775665D0E81109F5065D7794879419A91 +8D775C824E5E4F01542F5951780C56686C148FC45F036C7D6CE38BAB63900000 +C7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000060706D3D72756266948E94C553438FC17B7E4EDF8C264E7E9ED494B194B3 +524D6F5C90636D458C3458115D4C6B206B4967AA545B81547F8C589985375F3A +62A26A47953965726084686577A74E544FA85DE7979864AC7FD85CED4FCF7A8D +520783044E14602F7A8394A64FB54EB279E6743452E482B964D279BD5BDD6C81 +97528F7B6C22503E537F6E0564CE66746C3060C598778BF75E86743C7A7779CB +4E1890B174036C4256DA914B6CC58D8B533A86C666F28EAF5C489A716E200000 +C8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000053D65A369F8B8DA353BB570898A76743919B6CC9516875CA62F372AC5238 +529D7F3A7094763853749E4A69B7786E96C088D97FA4713671C3518967D374E4 +58E4651856B78BA9997662707ED560F970ED58EC4EC14EBA5FCD97E74EFB8BA4 +5203598A7EAB62544ECD65E5620E833884C98363878D71946EB65BB97ED25197 +63C967D480898339881551125B7A59828FB14E736C5D516589258F6F962E854A +745E951095F06DA682E55F3164926D128428816E9CC3585E8D5B4E0953C10000 +C9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004F1E6563685155D34E2764149A9A626B5AC2745F82726DA968EE50E7838E +7802674052396C997EB150BB5565715E7B5B665273CA82EB67495C715220717D +886B95EA965564C58D6181B355846C5562477F2E58924F2455468D4F664C4E0A +5C1A88F368A2634E7A0D70E7828D52FA97F65C1154E890B57ECD59628D4A86C7 +820C820D8D6664445C0461516D89793E8BBE78377533547B4F388EAB6DF15A20 +7EC5795E6C885BA15A76751A80BE614E6E1758F0751F7525727253477EF30000 +CA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000770176DB526980DC57235E08593172EE65BD6E7F8BD75C388671534177F3 +62FE65F64EC098DF86805B9E8BC653F277E24F7F5C4E9A7659CB5F0F793A58EB +4E1667FF4E8B62ED8A93901D52BF662F55DC566C90024ED54F8D91CA99706C0F +5E0260435BA489C68BD56536624B99965B885BFF6388552E53D77626517D852C +67A268B36B8A62928F9353D482126DD1758F4E668D4E5B70719F85AF669166D9 +7F7287009ECD9F205C5E672F8FF06811675F620D7AD658855EB665706F310000 +CB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000060555237800D6454887075295E05681362F4971C53CC723D8C016C347761 +7A0E542E77AC987A821C8BF47855671470C165AF64955636601D79C153F84E1D +6B7B80865BFA55E356DB4F3A4F3C99725DF3677E80386002988290015B8B8BBC +8BF5641C825864DE55FD82CF91654FD77D20901F7C9F50F358516EAF5BBF8BC9 +80839178849C7B97867D968B968F7EE59AD3788E5C817A57904296A7795F5B59 +635F7B0B84D168AD55067F2974107D2295016240584C4ED65B83597958540000 +CC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000736D631E8E4B8E0F80CE82D462AC53F06CF0915E592A60016C70574D644A +8D2A762B6EE9575B6A8075F06F6D8C2D8C0857666BEF889278B363A253F970AD +6C645858642A580268E0819B55107CD650188EBA6DCC8D9F70EB638F6D9B6ED4 +7EE68404684390036DD896768BA85957727985E4817E75BC8A8A68AF52548E22 +951163D098988E44557C4F5366FF568F60D56D9552435C4959296DFB586B7530 +751C606C82148146631167618FE2773A8DF38D3494C15E165385542C70C30000 +CD +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006C405EF7505C4EAD5EAD633A8247901A6850916E77B3540C94DC5F647AE5 +687663457B527EDF75DB507762955934900F51F879C37A8156FE5F9290146D82 +5C60571F541051546E4D56E263A89893817F8715892A9000541E5C6F81C062D6 +625881319E3596409A6E9A7C692D59A562D3553E631654C786D96D3C5A0374E6 +889C6B6A59168C4C5F2F6E7E73A9987D4E3870F75B8C7897633D665A769660CB +5B9B5A494E0781556C6A738B4EA167897F515F8065FA671B5FD859845A010000 +CE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005DCD5FAE537197E68FDD684556F4552F60DF4E3A6F4D7EF482C7840E59D4 +4F1F4F2A5C3E7EAC672A851A5473754F80C355829B4F4F4D6E2D8C135C096170 +536B761F6E29868A658795FB7EB9543B7A337D0A95EE55E17FC174EE631D8717 +6DA17A9D621165A1536763E16C835DEB545C94A84E4C6C618BEC5C4B65E0829C +68A7543E54346BCB6B664E9463425348821E4F0D4FAE575E620A96FE66647269 +52FF52A1609F8BEF661471996790897F785277FD6670563B54389521727A0000 +CF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007A00606F5E0C6089819D591560DC718470EF6EAA6C5072806A8488AD5E2D +4E605AB3559C94E36D177CFB9699620F7EC6778E867E5323971E8F9666875CE1 +4FA072ED4E0B53A6590F54136380952851484ED99C9C7EA454B88D2488548237 +95F26D8E5F265ACC663E966973B0732E53BF817A99857FA15BAA967796507EBF +76F853A2957699997BB189446E584E617FD479658BE660F354CD4EAB98795DF7 +6A6150CF54118C618427785D9704524A54EE56A395006D885BB56DC666530000 +D0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005C0F5B5D6821809655787B11654869544E9B6B47874E978B534F631F643A +90AA659C80C18C10519968B0537887F961C86CC46CFB8C225C5185AA82AF950C +6B238F9B65B05FFB5FC34FE18845661F8165732960FA51745211578B5F6290A2 +884C91925E78674F602759D3514451F680F853086C7996C4718A4F114FEE7F9E +673D55C5950879C088967EE3589F620C9700865A5618987B5F908BB884C49157 +53D965ED5E8F755C60647D6E5A7F7EEA7EED8F6955A75BA360AC65CB73840000 +D1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009009766377297EDA9774859B5B667A7496EA884052CB718F5FAA65EC8BE2 +5BFB9A6F5DE16B896C5B8BAD8BAF900A8FC5538B62BC9E269E2D54404E2B82BD +7259869C5D1688596DAF96C554D14E9A8BB6710954BD960970DF6DF976D04E25 +781487125CA95EF68A00989C960E708E6CBF594463A9773C884D6F1482735830 +71D5538C781A96C155015F6671305BB48C1A9A8C6B83592E9E2F79E76768626C +4F6F75A17F8A6D0B96336C274EF075D2517B68376F3E90808170599674760000 +D2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000064475C2790657A918C2359DA54AC8200836F898180006930564E80367237 +91CE51B64E5F987563964E1A53F666F3814B591C6DB24E0058F9533B63D694F1 +4F9D4F0A886398905937905779FB4EEA80F075916C825B9C59E85F5D69058681 +501A5DF24E5977E34EE5827A6291661390915C794EBF5F7981C69038808475AB +4EA688D4610F6BC55FC64E4976CA6EA28BE38BAE8C0A8BD15F027FFC7FCC7ECE +8335836B56E06BB797F3963459FB541F94F66DEB5BC5996E5C395F1596900000 +D3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000537082F16A315A749E705E947F2883B984248425836787478FCE8D6276C8 +5F719896786C662054DF62E54F6381C375C85EB896CD8E0A86F9548F6CF36D8C +6C38607F52C775285E7D4F1860A05FE75C24753190AE94C072B96CB96E389149 +670953CB53F34F5191C98BF153C85E7C8FC26DE44E8E76C26986865E611A8206 +4F594FDE903E9C7C61096E1D6E1496854E885A3196E84E0E5C7F79B95B878BED +7FBD738957DF828B90C15401904755BB5CEA5FA161086B3272F180B28A890000 +D4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006D745BD388D598848C6B9A6D9E336E0A51A4514357A38881539F63F48F95 +56ED54585706733F6E907F188FDC82D1613F6028966266F07EA68D8A8DC394A5 +5CB37CA4670860A6960580184E9190E75300966851418FD08574915D665597F5 +5B55531D78386742683D54C9707E5BB08F7D518D572854B1651266828D5E8D43 +810F846C906D7CDF51FF85FB67A365E96FA186A48E81566A90207682707671E5 +8D2362E952196CFD8D3C600E589E618E66FE8D60624E55B36E23672D8F670000 +D5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000094E195F87728680569A8548B4E4D70B88BC86458658B5B857A84503A5BE8 +77BB6BE18A797C986CBE76CF65A98F975D2D5C5586386808536062187AD96E5B +7EFD6A1F7AE05F706F335F20638C6DA867564E085E108D264ED780C07634969C +62DB662D627E6CBC8D7571677F695146808753EC906E629854F286F08F998005 +951785178FD96D5973CD659F771F7504782781FB8D1E94884FA6679575B98BCA +9707632F9547963584B8632377415F8172F04E896014657462EF6B63653F0000 +D6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005E2775C790D18BC1829D679D652F5431871877E580A281026C414E4B7EC7 +804C76F4690D6B966267503C4F84574063076B628DBE53EA65E87EB85FD7631A +63B781F381F47F6E5E1C5CD95236667A79E97A1A8D28709975D46EDE6CBB7A92 +4E2D76C55FE0949F88777EC879CD80BF91CD4EF24F17821F54685DDE6D328BCC +7CA58F7480985E1A549276B15B99663C9AA473E0682A86DB6731732A8BF88BDB +90107AF970DB716E62C477A956314E3B845767F152A986C08D2E94F87B510000 +D7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004F4F6CE8795D9A7B6293722A62FD4E1378168F6C64B08D5A7BC668695E84 +88C55986649E58EE72B6690E95258FFD8D5857607F008C0651C6634962D95353 +684C74228301914C55447740707C6D4A517954A88D4459FF6ECB6DC45B5C7D2B +4ED47C7D6ED35B5081EA6E0D5B579B0368D58E2A5B977EFC603B7EB590B98D70 +594F63CD79DF8DB3535265CF79568BC5963B7EC494BB7E825634918967007F6A +5C0A907566285DE64F5067DE505A4F5C57505EA7000000000000000000000000 +D8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004E8D4E0C51404E105EFF53454E154E984E1E9B325B6C56694E2879BA4E3F +53154E47592D723B536E6C1056DF80E499976BD3777E9F174E364E9F9F104E5C +4E694E9382885B5B556C560F4EC4538D539D53A353A553AE97658D5D531A53F5 +5326532E533E8D5C5366536352025208520E522D5233523F5240524C525E5261 +525C84AF527D528252815290529351827F544EBB4EC34EC94EC24EE84EE14EEB +4EDE4F1B4EF34F224F644EF54F254F274F094F2B4F5E4F6765384F5A4F5D0000 +D9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004F5F4F574F324F3D4F764F744F914F894F834F8F4F7E4F7B4FAA4F7C4FAC +4F944FE64FE84FEA4FC54FDA4FE34FDC4FD14FDF4FF85029504C4FF3502C500F +502E502D4FFE501C500C50255028507E504350555048504E506C507B50A550A7 +50A950BA50D6510650ED50EC50E650EE5107510B4EDD6C3D4F584F654FCE9FA0 +6C467C74516E5DFD9EC999985181591452F9530D8A07531051EB591951554EA0 +51564EB3886E88A44EB5811488D279805B3488037FB851AB51B151BD51BC0000 +DA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000051C7519651A251A58BA08BA68BA78BAA8BB48BB58BB78BC28BC38BCB8BCF +8BCE8BD28BD38BD48BD68BD88BD98BDC8BDF8BE08BE48BE88BE98BEE8BF08BF3 +8BF68BF98BFC8BFF8C008C028C048C078C0C8C0F8C118C128C148C158C168C19 +8C1B8C188C1D8C1F8C208C218C258C278C2A8C2B8C2E8C2F8C328C338C358C36 +5369537A961D962296219631962A963D963C964296499654965F9667966C9672 +96749688968D969796B09097909B909D909990AC90A190B490B390B690BA0000 +DB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000090B890B090CF90C590BE90D090C490C790D390E690E290DC90D790DB90EB +90EF90FE91049122911E91239131912F913991439146520D594252A252AC52AD +52BE54FF52D052D652F053DF71EE77CD5EF451F551FC9B2F53B65F01755A5DEF +574C57A957A1587E58BC58C558D15729572C572A57335739572E572F575C573B +574257695785576B5786577C577B5768576D5776577357AD57A4578C57B257CF +57A757B4579357A057D557D857DA57D957D257B857F457EF57F857E457DD0000 +DC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000580B580D57FD57ED5800581E5819584458205865586C58815889589A5880 +99A89F1961FF8279827D827F828F828A82A88284828E82918297829982AB82B8 +82BE82B082C882CA82E3829882B782AE82CB82CC82C182A982B482A182AA829F +82C482CE82A482E1830982F782E4830F830782DC82F482D282D8830C82FB82D3 +8311831A83068314831582E082D5831C8351835B835C83088392833C83348331 +839B835E832F834F83478343835F834083178360832D833A8333836683650000 +DD +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008368831B8369836C836A836D836E83B0837883B383B483A083AA8393839C +8385837C83B683A9837D83B8837B8398839E83A883BA83BC83C1840183E583D8 +58078418840B83DD83FD83D6841C84388411840683D483DF840F840383F883F9 +83EA83C583C0842683F083E1845C8451845A8459847384878488847A84898478 +843C844684698476848C848E8431846D84C184CD84D084E684BD84D384CA84BF +84BA84E084A184B984B4849784E584E3850C750D853884F08539851F853A0000 +DE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008556853B84FF84FC8559854885688564855E857A77A285438572857B85A4 +85A88587858F857985AE859C858585B985B785B085D385C185DC85FF86278605 +86298616863C5EFE5F08593C594180375955595A5958530F5C225C255C2C5C34 +624C626A629F62BB62CA62DA62D762EE632262F66339634B634363AD63F66371 +637A638E63B4636D63AC638A636963AE63BC63F263F863E063FF63C463DE63CE +645263C663BE64456441640B641B6420640C64266421645E6484646D64960000 +DF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000647A64B764B8649964BA64C064D064D764E464E265096525652E5F0B5FD2 +75195F11535F53F153FD53E953E853FB541254165406544B5452545354545456 +54435421545754595423543254825494547754715464549A549B548454765466 +549D54D054AD54C254B454D254A754A654D354D4547254A354D554BB54BF54CC +54D954DA54DC54A954AA54A454DD54CF54DE551B54E7552054FD551454F35522 +5523550F55115527552A5567558F55B55549556D55415555553F5550553C0000 +E0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005537555655755576557755335530555C558B55D2558355B155B955885581 +559F557E55D65591557B55DF55BD55BE5594559955EA55F755C9561F55D155EB +55EC55D455E655DD55C455EF55E555F255F355CC55CD55E855F555E48F94561E +5608560C56015624562355FE56005627562D565856395657562C564D56625659 +565C564C5654568656645671566B567B567C5685569356AF56D456D756DD56E1 +56F556EB56F956FF5704570A5709571C5E0F5E195E145E115E315E3B5E3C0000 +E1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005E375E445E545E5B5E5E5E615C8C5C7A5C8D5C905C965C885C985C995C91 +5C9A5C9C5CB55CA25CBD5CAC5CAB5CB15CA35CC15CB75CC45CD25CE45CCB5CE5 +5D025D035D275D265D2E5D245D1E5D065D1B5D585D3E5D345D3D5D6C5D5B5D6F +5D5D5D6B5D4B5D4A5D695D745D825D995D9D8C735DB75DC55F735F775F825F87 +5F895F8C5F955F995F9C5FA85FAD5FB55FBC88625F6172AD72B072B472B772B8 +72C372C172CE72CD72D272E872EF72E972F272F472F7730172F3730372FA0000 +E2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000072FB731773137321730A731E731D7315732273397325732C733873317350 +734D73577360736C736F737E821B592598E7592459029963996799689969996A +996B996C99749977997D998099849987998A998D999099919993999499955E80 +5E915E8B5E965EA55EA05EB95EB55EBE5EB38D535ED25ED15EDB5EE85EEA81BA +5FC45FC95FD65FCF60035FEE60045FE15FE45FFE600560065FEA5FED5FF86019 +60356026601B600F600D6029602B600A603F602160786079607B607A60420000 +E3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000606A607D6096609A60AD609D60836092608C609B60EC60BB60B160DD60D8 +60C660DA60B4612061266115612360F46100610E612B614A617561AC619461A7 +61B761D461F55FDD96B395E995EB95F195F395F595F695FC95FE960396049606 +9608960A960B960C960D960F96129615961696179619961A4E2C723F62156C35 +6C546C5C6C4A6CA36C856C906C946C8C6C686C696C746C766C866CA96CD06CD4 +6CAD6CF76CF86CF16CD76CB26CE06CD66CFA6CEB6CEE6CB16CD36CEF6CFE0000 +E4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006D396D276D0C6D436D486D076D046D196D0E6D2B6D4D6D2E6D356D1A6D4F +6D526D546D336D916D6F6D9E6DA06D5E6D936D946D5C6D606D7C6D636E1A6DC7 +6DC56DDE6E0E6DBF6DE06E116DE66DDD6DD96E166DAB6E0C6DAE6E2B6E6E6E4E +6E6B6EB26E5F6E866E536E546E326E256E446EDF6EB16E986EE06F2D6EE26EA5 +6EA76EBD6EBB6EB76ED76EB46ECF6E8F6EC26E9F6F626F466F476F246F156EF9 +6F2F6F366F4B6F746F2A6F096F296F896F8D6F8C6F786F726F7C6F7A6FD10000 +E5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006FC96FA76FB96FB66FC26FE16FEE6FDE6FE06FEF701A7023701B70397035 +704F705E5B805B845B955B935BA55BB8752F9A9E64345BE45BEE89305BF08E47 +8B078FB68FD38FD58FE58FEE8FE48FE98FE68FF38FE890059004900B90269011 +900D9016902190359036902D902F9044905190529050906890589062905B66B9 +9074907D908290889083908B5F505F575F565F585C3B54AB5C505C595B715C63 +5C667FBC5F2A5F295F2D82745F3C9B3B5C6E59815983598D59A959AA59A30000 +E6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000599759CA59AB599E59A459D259B259AF59D759BE5A055A0659DD5A0859E3 +59D859F95A0C5A095A325A345A115A235A135A405A675A4A5A555A3C5A625A75 +80EC5AAA5A9B5A775A7A5ABE5AEB5AB25AD25AD45AB85AE05AE35AF15AD65AE6 +5AD85ADC5B095B175B165B325B375B405C155C1C5B5A5B655B735B515B535B62 +9A759A779A789A7A9A7F9A7D9A809A819A859A889A8A9A909A929A939A969A98 +9A9B9A9C9A9D9A9F9AA09AA29AA39AA59AA77E9F7EA17EA37EA57EA87EA90000 +E7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007EAD7EB07EBE7EC07EC17EC27EC97ECB7ECC7ED07ED47ED77EDB7EE07EE1 +7EE87EEB7EEE7EEF7EF17EF27F0D7EF67EFA7EFB7EFE7F017F027F037F077F08 +7F0B7F0C7F0F7F117F127F177F197F1C7F1B7F1F7F217F227F237F247F257F26 +7F277F2A7F2B7F2C7F2D7F2F7F307F317F327F337F355E7A757F5DDB753E9095 +738E739173AE73A2739F73CF73C273D173B773B373C073C973C873E573D9987C +740A73E973E773DE73BA73F2740F742A745B7426742574287430742E742C0000 +E8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000741B741A7441745C7457745574597477746D747E749C748E748074817487 +748B749E74A874A9749074A774D274BA97EA97EB97EC674C6753675E67486769 +67A56787676A6773679867A7677567A8679E67AD678B6777677C67F0680967D8 +680A67E967B0680C67D967B567DA67B367DD680067C367B867E2680E67C167FD +6832683368606861684E6862684468646883681D68556866684168676840683E +684A6849682968B5688F687468776893686B68C2696E68FC691F692068F90000 +E9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000692468F0690B6901695768E369106971693969606942695D6984696B6980 +69986978693469CC6987698869CE6989696669636979699B69A769BB69AB69AD +69D469B169C169CA69DF699569E0698D69FF6A2F69ED6A176A186A6569F26A44 +6A3E6AA06A506A5B6A356A8E6A796A3D6A286A586A7C6A916A906AA96A976AAB +733773526B816B826B876B846B926B936B8D6B9A6B9B6BA16BAA8F6B8F6D8F71 +8F728F738F758F768F788F778F798F7A8F7C8F7E8F818F828F848F878F8B0000 +EA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008F8D8F8E8F8F8F988F9A8ECE620B6217621B621F6222622162256224622C +81E774EF74F474FF750F75117513653465EE65EF65F0660A6619677266036615 +6600708566F7661D66346631663666358006665F66546641664F665666616657 +66776684668C66A7669D66BE66DB66DC66E666E98D328D338D368D3B8D3D8D40 +8D458D468D488D498D478D4D8D558D5989C789CA89CB89CC89CE89CF89D089D1 +726E729F725D7266726F727E727F7284728B728D728F72926308633263B00000 +EB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000643F64D880046BEA6BF36BFD6BF56BF96C056C076C066C0D6C156C186C19 +6C1A6C216C296C246C2A6C3265356555656B724D72527256723086625216809F +809C809380BC670A80BD80B180AB80AD80B480B780E780E880E980EA80DB80C2 +80C480D980CD80D7671080DD80EB80F180F480ED810D810E80F280FC67158112 +8C5A8136811E812C811881328148814C815381748159815A817181608169817C +817D816D8167584D5AB58188818281916ED581A381AA81CC672681CA81BB0000 +EC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000081C181A66B246B376B396B436B466B5998D198D298D398D598D998DA6BB3 +5F406BC289F365909F51659365BC65C665C465C365CC65CE65D265D67080709C +7096709D70BB70C070B770AB70B170E870CA711071137116712F71317173715C +716871457172714A7178717A719871B371B571A871A071E071D471E771F9721D +7228706C7118716671B9623E623D624362486249793B794079467949795B795C +7953795A796279577960796F7967797A7985798A799A79A779B35FD15FD00000 +ED +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000603C605D605A606760416059606360AB6106610D615D61A9619D61CB61D1 +62068080807F6C936CF66DFC77F677F87800780978177818781165AB782D781C +781D7839783A783B781F783C7825782C78237829784E786D7856785778267850 +7847784C786A789B7893789A7887789C78A178A378B278B978A578D478D978C9 +78EC78F2790578F479137924791E79349F9B9EF99EFB9EFC76F17704770D76F9 +77077708771A77227719772D7726773577387750775177477743775A77680000 +EE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000077627765777F778D777D7780778C7791779F77A077B077B577BD753A7540 +754E754B7548755B7572757975837F587F617F5F8A487F687F747F717F797F81 +7F7E76CD76E58832948594869487948B948A948C948D948F9490949494979495 +949A949B949C94A394A494AB94AA94AD94AC94AF94B094B294B494B694B794B8 +94B994BA94BC94BD94BF94C494C894C994CA94CB94CC94CD94CE94D094D194D2 +94D594D694D794D994D894DB94DE94DF94E094E294E494E594E794E894EA0000 +EF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000094E994EB94EE94EF94F394F494F594F794F994FC94FD94FF950395029506 +95079509950A950D950E950F951295139514951595169518951B951D951E951F +9522952A952B9529952C953195329534953695379538953C953E953F95429535 +9544954595469549954C954E954F9552955395549556955795589559955B955E +955F955D95619562956495659566956795689569956A956B956C956F95719572 +9573953A77E777EC96C979D579ED79E379EB7A065D477A037A027A1E7A140000 +F0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007A397A377A519ECF99A57A707688768E7693769976A474DE74E0752C9E20 +9E229E289E299E2A9E2B9E2C9E329E319E369E389E379E399E3A9E3E9E419E42 +9E449E469E479E489E499E4B9E4C9E4E9E519E559E579E5A9E5B9E5C9E5E9E63 +9E669E679E689E699E6A9E6B9E6C9E719E6D9E7375927594759675A0759D75AC +75A375B375B475B875C475B175B075C375C275D675CD75E375E875E675E475EB +75E7760375F175FC75FF761076007605760C7617760A76257618761576190000 +F1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000761B763C762276207640762D7630763F76357643763E7633764D765E7654 +765C7656766B766F7FCA7AE67A787A797A807A867A887A957AA67AA07AAC7AA8 +7AAD7AB3886488698872887D887F888288A288C688B788BC88C988E288CE88E3 +88E588F1891A88FC88E888FE88F0892189198913891B890A8934892B89368941 +8966897B758B80E576B276B477DC801280148016801C80208022802580268027 +802980288031800B803580438046804D80528069807189839878988098830000 +F2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009889988C988D988F9894989A989B989E989F98A198A298A598A6864D8654 +866C866E867F867A867C867B86A8868D868B86AC869D86A786A386AA869386A9 +86B686C486B586CE86B086BA86B186AF86C986CF86B486E986F186F286ED86F3 +86D0871386DE86F486DF86D886D18703870786F88708870A870D87098723873B +871E8725872E871A873E87488734873187298737873F87828722877D877E877B +87608770874C876E878B87538763877C876487598765879387AF87A887D20000 +F3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000087C68788878587AD8797878387AB87E587AC87B587B387CB87D387BD87D1 +87C087CA87DB87EA87E087EE8816881387FE880A881B88218839883C7F367F42 +7F447F4582107AFA7AFD7B087B037B047B157B0A7B2B7B0F7B477B387B2A7B19 +7B2E7B317B207B257B247B337B3E7B1E7B587B5A7B457B757B4C7B5D7B607B6E +7B7B7B627B727B717B907BA67BA77BB87BAC7B9D7BA87B857BAA7B9C7BA27BAB +7BB47BD17BC17BCC7BDD7BDA7BE57BE67BEA7C0C7BFE7BFC7C0F7C167C0B0000 +F4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007C1F7C2A7C267C387C417C4081FE82018202820481EC8844822182228223 +822D822F8228822B8238823B82338234823E82448249824B824F825A825F8268 +887E8885888888D888DF895E7F9D7F9F7FA77FAF7FB07FB27C7C65497C917C9D +7C9C7C9E7CA27CB27CBC7CBD7CC17CC77CCC7CCD7CC87CC57CD77CE8826E66A8 +7FBF7FCE7FD57FE57FE17FE67FE97FEE7FF37CF87D777DA67DAE7E477E9B9EB8 +9EB48D738D848D948D918DB18D678D6D8C478C49914A9150914E914F91640000 +F5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009162916191709169916F917D917E917291749179918C91859190918D9191 +91A291A391AA91AD91AE91AF91B591B491BA8C559E7E8DB88DEB8E058E598E69 +8DB58DBF8DBC8DBA8DC48DD68DD78DDA8DDE8DCE8DCF8DDB8DC68DEC8DF78DF8 +8DE38DF98DFB8DE48E098DFD8E148E1D8E1F8E2C8E2E8E238E2F8E3A8E408E39 +8E358E3D8E318E498E418E428E518E528E4A8E708E768E7C8E6F8E748E858E8F +8E948E908E9C8E9E8C788C828C8A8C858C988C94659B89D689DE89DA89DC0000 +F6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000089E589EB89EF8A3E8B26975396E996F396EF970697019708970F970E972A +972D9730973E9F809F839F859F869F879F889F899F8A9F8C9EFE9F0B9F0D96B9 +96BC96BD96CE96D277BF96E0928E92AE92C8933E936A93CA938F943E946B9C7F +9C829C859C869C879C887A239C8B9C8E9C909C919C929C949C959C9A9C9B9C9E +9C9F9CA09CA19CA29CA39CA59CA69CA79CA89CA99CAB9CAD9CAE9CB09CB19CB2 +9CB39CB49CB59CB69CB79CBA9CBB9CBC9CBD9CC49CC59CC69CC79CCA9CCB0000 +F7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009CCC9CCD9CCE9CCF9CD09CD39CD49CD59CD79CD89CD99CDC9CDD9CDF9CE2 +977C978597919792979497AF97AB97A397B297B49AB19AB09AB79E589AB69ABA +9ABC9AC19AC09AC59AC29ACB9ACC9AD19B459B439B479B499B489B4D9B5198E8 +990D992E995599549ADF9AE19AE69AEF9AEB9AFB9AED9AF99B089B0F9B139B1F +9B239EBD9EBE7E3B9E829E879E889E8B9E9293D69E9D9E9F9EDB9EDC9EDD9EE0 +9EDF9EE29EE99EE79EE59EEA9EEF9F229F2C9F2F9F399F379F3D9F3E9F440000 diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/euc-jp.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/euc-jp.enc new file mode 100644 index 00000000..db56c888 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/euc-jp.enc @@ -0,0 +1,1353 @@ +# Encoding file: euc-jp, multi-byte +M +003F 0 79 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +0080008100820083008400850086008700880089008A008B008C008D0000008F +0090009100920093009400950096009700980099009A009B009C009D009E009F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000FF61FF62FF63FF64FF65FF66FF67FF68FF69FF6AFF6BFF6CFF6DFF6EFF6F +FF70FF71FF72FF73FF74FF75FF76FF77FF78FF79FF7AFF7BFF7CFF7DFF7EFF7F +FF80FF81FF82FF83FF84FF85FF86FF87FF88FF89FF8AFF8BFF8CFF8DFF8EFF8F +FF90FF91FF92FF93FF94FF95FF96FF97FF98FF99FF9AFF9BFF9CFF9DFF9EFF9F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +A1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000300030013002FF0CFF0E30FBFF1AFF1BFF1FFF01309B309C00B4FF4000A8 +FF3EFFE3FF3F30FD30FE309D309E30034EDD30053006300730FC20152010FF0F +FF3C301C2016FF5C2026202520182019201C201DFF08FF0930143015FF3BFF3D +FF5BFF5D30083009300A300B300C300D300E300F30103011FF0B221200B100D7 +00F7FF1D2260FF1CFF1E22662267221E22342642264000B0203220332103FFE5 +FF0400A200A3FF05FF03FF06FF0AFF2000A72606260525CB25CF25CE25C70000 +A2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000025C625A125A025B325B225BD25BC203B3012219221902191219330130000 +00000000000000000000000000000000000000002208220B2286228722822283 +222A2229000000000000000000000000000000002227222800AC21D221D42200 +220300000000000000000000000000000000000000000000222022A523122202 +220722612252226A226B221A223D221D2235222B222C00000000000000000000 +00000000212B2030266F266D266A2020202100B6000000000000000025EF0000 +A3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +FF10FF11FF12FF13FF14FF15FF16FF17FF18FF19000000000000000000000000 +0000FF21FF22FF23FF24FF25FF26FF27FF28FF29FF2AFF2BFF2CFF2DFF2EFF2F +FF30FF31FF32FF33FF34FF35FF36FF37FF38FF39FF3A00000000000000000000 +0000FF41FF42FF43FF44FF45FF46FF47FF48FF49FF4AFF4BFF4CFF4DFF4EFF4F +FF50FF51FF52FF53FF54FF55FF56FF57FF58FF59FF5A00000000000000000000 +A4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000304130423043304430453046304730483049304A304B304C304D304E304F +3050305130523053305430553056305730583059305A305B305C305D305E305F +3060306130623063306430653066306730683069306A306B306C306D306E306F +3070307130723073307430753076307730783079307A307B307C307D307E307F +3080308130823083308430853086308730883089308A308B308C308D308E308F +3090309130923093000000000000000000000000000000000000000000000000 +A5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000030A130A230A330A430A530A630A730A830A930AA30AB30AC30AD30AE30AF +30B030B130B230B330B430B530B630B730B830B930BA30BB30BC30BD30BE30BF +30C030C130C230C330C430C530C630C730C830C930CA30CB30CC30CD30CE30CF +30D030D130D230D330D430D530D630D730D830D930DA30DB30DC30DD30DE30DF +30E030E130E230E330E430E530E630E730E830E930EA30EB30EC30ED30EE30EF +30F030F130F230F330F430F530F6000000000000000000000000000000000000 +A6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000039103920393039403950396039703980399039A039B039C039D039E039F +03A003A103A303A403A503A603A703A803A90000000000000000000000000000 +000003B103B203B303B403B503B603B703B803B903BA03BB03BC03BD03BE03BF +03C003C103C303C403C503C603C703C803C90000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +A7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000004100411041204130414041504010416041704180419041A041B041C041D +041E041F0420042104220423042404250426042704280429042A042B042C042D +042E042F00000000000000000000000000000000000000000000000000000000 +000004300431043204330434043504510436043704380439043A043B043C043D +043E043F0440044104420443044404450446044704480449044A044B044C044D +044E044F00000000000000000000000000000000000000000000000000000000 +A8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000025002502250C251025182514251C252C25242534253C25012503250F2513 +251B251725232533252B253B254B2520252F25282537253F251D253025252538 +2542000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +B0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004E9C55165A03963F54C0611B632859F690228475831C7A5060AA63E16E25 +65ED846682A69BF56893572765A162715B9B59D0867B98F47D627DBE9B8E6216 +7C9F88B75B895EB563096697684895C7978D674F4EE54F0A4F4D4F9D504956F2 +593759D45A015C0960DF610F61706613690570BA754F757079FB7DAD7DEF80C3 +840E88638B029055907A533B4E954EA557DF80B290C178EF4E0058F16EA29038 +7A328328828B9C2F5141537054BD54E156E059FB5F1598F26DEB80E4852D0000 +B1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009662967096A097FB540B53F35B8770CF7FBD8FC296E8536F9D5C7ABA4E11 +789381FC6E26561855046B1D851A9C3B59E553A96D6674DC958F56424E91904B +96F2834F990C53E155B65B305F71662066F368046C386CF36D29745B76C87A4E +983482F1885B8A6092ED6DB275AB76CA99C560A68B018D8A95B2698E53AD5186 +5712583059445BB45EF6602863A963F46CBF6F14708E7114715971D5733F7E01 +827682D185979060925B9D1B586965BC6C5A752551F9592E59655F805FDC0000 +B2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000062BC65FA6A2A6B276BB4738B7FC189569D2C9D0E9EC45CA16C96837B5104 +5C4B61B681C6687672614E594FFA537860696E297A4F97F34E0B53164EEE4F55 +4F3D4FA14F7352A053EF5609590F5AC15BB65BE179D16687679C67B66B4C6CB3 +706B73C2798D79BE7A3C7B8782B182DB8304837783EF83D387668AB256298CA8 +8FE6904E971E868A4FC45CE862117259753B81E582BD86FE8CC096C5991399D5 +4ECB4F1A89E356DE584A58CA5EFB5FEB602A6094606261D0621262D065390000 +B3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009B41666668B06D777070754C76867D7582A587F9958B968E8C9D51F152BE +591654B35BB35D16616869826DAF788D84CB88578A7293A79AB86D6C99A886D9 +57A367FF86CE920E5283568754045ED362E164B9683C68386BBB737278BA7A6B +899A89D28D6B8F0390ED95A3969497695B665CB3697D984D984E639B7B206A2B +6A7F68B69C0D6F5F5272559D607062EC6D3B6E076ED1845B89108F444E149C39 +53F6691B6A3A9784682A515C7AC384B291DC938C565B9D286822830584310000 +B4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007CA5520882C574E64E7E4F8351A05BD2520A52D852E75DFB559A582A59E6 +5B8C5B985BDB5E725E7960A3611F616361BE63DB656267D1685368FA6B3E6B53 +6C576F226F976F4574B0751876E3770B7AFF7BA17C217DE97F367FF0809D8266 +839E89B38ACC8CAB908494519593959195A2966597D3992882184E38542B5CB8 +5DCC73A9764C773C5CA97FEB8D0B96C19811985498584F014F0E5371559C5668 +57FA59475B095BC45C905E0C5E7E5FCC63EE673A65D765E2671F68CB68C40000 +B5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006A5F5E306BC56C176C7D757F79485B637A007D005FBD898F8A188CB48D77 +8ECC8F1D98E29A0E9B3C4E80507D510059935B9C622F628064EC6B3A72A07591 +79477FA987FB8ABC8B7063AC83CA97A05409540355AB68546A588A7078276775 +9ECD53745BA2811A865090064E184E454EC74F1153CA54385BAE5F1360256551 +673D6C426C726CE3707874037A767AAE7B087D1A7CFE7D6665E7725B53BB5C45 +5DE862D262E063196E20865A8A318DDD92F86F0179A69B5A4EA84EAB4EAC0000 +B6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004F9B4FA050D151477AF6517151F653545321537F53EB55AC58835CE15F37 +5F4A602F6050606D631F65596A4B6CC172C272ED77EF80F881058208854E90F7 +93E197FF99579A5A4EF051DD5C2D6681696D5C4066F26975738968507C8150C5 +52E457475DFE932665A46B236B3D7434798179BD7B4B7DCA82B983CC887F895F +8B398FD191D1541F92804E5D503653E5533A72D7739677E982E68EAF99C699C8 +99D25177611A865E55B07A7A50765BD3904796854E326ADB91E75C515C480000 +B7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000063987A9F6C9397748F617AAA718A96887C8268177E706851936C52F2541B +85AB8A137FA48ECD90E15366888879414FC250BE521151445553572D73EA578B +59515F625F8460756176616761A963B2643A656C666F68426E1375667A3D7CFB +7D4C7D997E4B7F6B830E834A86CD8A088A638B668EFD981A9D8F82B88FCE9BE8 +5287621F64836FC09699684150916B206C7A6F547A747D5088408A2367084EF6 +503950265065517C5238526355A7570F58055ACC5EFA61B261F862F363720000 +B8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000691C6A29727D72AC732E7814786F7D79770C80A9898B8B198CE28ED29063 +9375967A98559A139E785143539F53B35E7B5F266E1B6E90738473FE7D438237 +8A008AFA96504E4E500B53E4547C56FA59D15B645DF15EAB5F276238654567AF +6E5672D07CCA88B480A180E183F0864E8A878DE8923796C798679F134E944E92 +4F0D53485449543E5A2F5F8C5FA1609F68A76A8E745A78818A9E8AA48B779190 +4E5E9BC94EA44F7C4FAF501950165149516C529F52B952FE539A53E354110000 +B9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000540E5589575157A2597D5B545B5D5B8F5DE55DE75DF75E785E835E9A5EB7 +5F186052614C629762D863A7653B6602664366F4676D6821689769CB6C5F6D2A +6D696E2F6E9D75327687786C7A3F7CE07D057D187D5E7DB18015800380AF80B1 +8154818F822A8352884C88618B1B8CA28CFC90CA91759271783F92FC95A4964D +980599999AD89D3B525B52AB53F7540858D562F76FE08C6A8F5F9EB9514B523B +544A56FD7A4091779D609ED273446F09817075115FFD60DA9AA872DB8FBC0000 +BA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006B6498034ECA56F0576458BE5A5A606861C7660F6606683968B16DF775D5 +7D3A826E9B424E9B4F5053C955065D6F5DE65DEE67FB6C99747378028A509396 +88DF57505EA7632B50B550AC518D670054C9585E59BB5BB05F69624D63A1683D +6B736E08707D91C7728078157826796D658E7D3083DC88C18F09969B52645728 +67507F6A8CA151B45742962A583A698A80B454B25D0E57FC78959DFA4F5C524A +548B643E6628671467F57A847B567D22932F685C9BAD7B395319518A52370000 +BB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005BDF62F664AE64E6672D6BBA85A996D176909BD6634C93069BAB76BF6652 +4E09509853C25C7160E864926563685F71E673CA75237B977E8286958B838CDB +9178991065AC66AB6B8B4ED54ED44F3A4F7F523A53F853F255E356DB58EB59CB +59C959FF5B505C4D5E025E2B5FD7601D6307652F5B5C65AF65BD65E8679D6B62 +6B7B6C0F7345794979C17CF87D197D2B80A2810281F389968A5E8A698A668A8C +8AEE8CC78CDC96CC98FC6B6F4E8B4F3C4F8D51505B575BFA6148630166420000 +BC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006B216ECB6CBB723E74BD75D478C1793A800C803381EA84948F9E6C509E7F +5F0F8B589D2B7AFA8EF85B8D96EB4E0353F157F759315AC95BA460896E7F6F06 +75BE8CEA5B9F85007BE0507267F4829D5C61854A7E1E820E51995C0463688D66 +659C716E793E7D1780058B1D8ECA906E86C790AA501F52FA5C3A6753707C7235 +914C91C8932B82E55BC25F3160F94E3B53D65B88624B67316B8A72E973E07A2E +816B8DA391529996511253D7546A5BFF63886A397DAC970056DA53CE54680000 +BD +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005B975C315DDE4FEE610162FE6D3279C079CB7D427E4D7FD281ED821F8490 +884689728B908E748F2F9031914B916C96C6919C4EC04F4F514553415F93620E +67D46C416E0B73637E2691CD928353D459195BBF6DD1795D7E2E7C9B587E719F +51FA88538FF04FCA5CFB662577AC7AE3821C99FF51C65FAA65EC696F6B896DF3 +6E966F6476FE7D145DE190759187980651E6521D6240669166D96E1A5EB67DD2 +7F7266F885AF85F78AF852A953D959735E8F5F90605592E4966450B7511F0000 +BE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000052DD5320534753EC54E8554655315617596859BE5A3C5BB55C065C0F5C11 +5C1A5E845E8A5EE05F70627F628462DB638C63776607660C662D6676677E68A2 +6A1F6A356CBC6D886E096E58713C7126716775C77701785D7901796579F07AE0 +7B117CA77D39809683D6848B8549885D88F38A1F8A3C8A548A738C618CDE91A4 +9266937E9418969C97984E0A4E084E1E4E575197527057CE583458CC5B225E38 +60C564FE676167566D4472B675737A6384B88B7291B89320563157F498FE0000 +BF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000062ED690D6B9671ED7E548077827289E698DF87558FB15C3B4F384FE14FB5 +55075A205BDD5BE95FC3614E632F65B0664B68EE699B6D786DF1753375B9771F +795E79E67D3381E382AF85AA89AA8A3A8EAB8F9B903291DD97074EBA4EC15203 +587558EC5C0B751A5C3D814E8A0A8FC59663976D7B258ACF9808916256F353A8 +9017543957825E2563A86C34708A77617C8B7FE088709042915493109318968F +745E9AC45D075D69657067A28DA896DB636E6749691983C5981796C088FE0000 +C0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006F84647A5BF84E16702C755D662F51C4523652E259D35F8160276210653F +6574661F667468F268166B636E057272751F76DB7CBE805658F088FD897F8AA0 +8A938ACB901D91929752975965897A0E810696BB5E2D60DC621A65A566146790 +77F37A4D7C4D7E3E810A8CAC8D648DE18E5F78A9520762D963A5644262988A2D +7A837BC08AAC96EA7D76820C87494ED95148534353605BA35C025C165DDD6226 +624764B0681368346CC96D456D1767D36F5C714E717D65CB7A7F7BAD7DDA0000 +C1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007E4A7FA8817A821B823985A68A6E8CCE8DF59078907792AD929195839BAE +524D55846F387136516879857E5581B37CCE564C58515CA863AA66FE66FD695A +72D9758F758E790E795679DF7C977D207D4486078A34963B90619F2050E75275 +53CC53E2500955AA58EE594F723D5B8B5C64531D60E360F3635C6383633F63BB +64CD65E966F95DE369CD69FD6F1571E54E8975E976F87A937CDF7DCF7D9C8061 +83498358846C84BC85FB88C58D709001906D9397971C9A1250CF5897618E0000 +C2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000081D385358D0890204FC3507452475373606F6349675F6E2C8DB3901F4FD7 +5C5E8CCA65CF7D9A53528896517663C35B585B6B5C0A640D6751905C4ED6591A +592A6C708A51553E581559A560F0625367C182356955964099C49A284F535806 +5BFE80105CB15E2F5F856020614B623466FF6CF06EDE80CE817F82D4888B8CB8 +9000902E968A9EDB9BDB4EE353F059277B2C918D984C9DF96EDD702753535544 +5B856258629E62D36CA26FEF74228A1794386FC18AFE833851E786F853EA0000 +C3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000053E94F4690548FB0596A81315DFD7AEA8FBF68DA8C3772F89C486A3D8AB0 +4E3953585606576662C563A265E66B4E6DE16E5B70AD77ED7AEF7BAA7DBB803D +80C686CB8A95935B56E358C75F3E65AD66966A806BB575378AC7502477E55730 +5F1B6065667A6C6075F47A1A7F6E81F48718904599B37BC9755C7AF97B5184C4 +901079E97A9283365AE177404E2D4EF25B995FE062BD663C67F16CE8866B8877 +8A3B914E92F399D06A177026732A82E784578CAF4E01514651CB558B5BF50000 +C4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005E165E335E815F145F355F6B5FB461F2631166A2671D6F6E7252753A773A +80748139817887768ABF8ADC8D858DF3929A957798029CE552C5635776F46715 +6C8873CD8CC393AE96736D25589C690E69CC8FFD939A75DB901A585A680263B4 +69FB4F436F2C67D88FBB85267DB49354693F6F70576A58F75B2C7D2C722A540A +91E39DB44EAD4F4E505C507552438C9E544858245B9A5E1D5E955EAD5EF75F1F +608C62B5633A63D068AF6C407887798E7A0B7DE082478A028AE68E4490130000 +C5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000090B8912D91D89F0E6CE5645864E265756EF476847B1B906993D16EBA54F2 +5FB964A48F4D8FED92445178586B59295C555E976DFB7E8F751C8CBC8EE2985B +70B94F1D6BBF6FB1753096FB514E54105835585759AC5C605F926597675C6E21 +767B83DF8CED901490FD934D7825783A52AA5EA6571F597460125012515A51AC +51CD520055105854585859575B955CF65D8B60BC6295642D6771684368BC68DF +76D76DD86E6F6D9B706F71C85F5375D879777B497B547B527CD67D7152300000 +C6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008463856985E48A0E8B048C468E0F9003900F94199676982D9A3095D850CD +52D5540C58025C0E61A7649E6D1E77B37AE580F48404905392855CE09D07533F +5F975FB36D9C7279776379BF7BE46BD272EC8AAD68036A6151F87A8169345C4A +9CF682EB5BC59149701E56785C6F60C765666C8C8C5A90419813545166C7920D +594890A351854E4D51EA85998B0E7058637A934B696299B47E04757753576960 +8EDF96E36C5D4E8C5C3C5F108FE953028CD1808986795EFF65E54E7351650000 +C7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000059825C3F97EE4EFB598A5FCD8A8D6FE179B079625BE78471732B71B15E74 +5FF5637B649A71C37C984E435EFC4E4B57DC56A260A96FC37D0D80FD813381BF +8FB2899786A45DF4628A64AD898767776CE26D3E743678345A467F7582AD99AC +4FF35EC362DD63926557676F76C3724C80CC80BA8F29914D500D57F95A926885 +6973716472FD8CB758F28CE0966A9019877F79E477E784294F2F5265535A62CD +67CF6CCA767D7B947C95823685848FEB66DD6F2072067E1B83AB99C19EA60000 +C8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000051FD7BB178727BB880877B486AE85E61808C75517560516B92626E8C767A +91979AEA4F107F70629C7B4F95A59CE9567A585986E496BC4F345224534A53CD +53DB5E06642C6591677F6C3E6C4E724872AF73ED75547E41822C85E98CA97BC4 +91C67169981298EF633D6669756A76E478D0854386EE532A5351542659835E87 +5F7C60B26249627962AB65906BD46CCC75B276AE789179D87DCB7F7780A588AB +8AB98CBB907F975E98DB6A0B7C3850995C3E5FAE67876BD8743577097F8E0000 +C9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009F3B67CA7A175339758B9AED5F66819D83F180985F3C5FC575627B46903C +686759EB5A9B7D10767E8B2C4FF55F6A6A196C376F0274E2796888688A558C79 +5EDF63CF75C579D282D7932892F2849C86ED9C2D54C15F6C658C6D5C70158CA7 +8CD3983B654F74F64E0D4ED857E0592B5A665BCC51A85E035E9C601662766577 +65A7666E6D6E72367B268150819A82998B5C8CA08CE68D74961C96444FAE64AB +6B66821E8461856A90E85C01695398A8847A85574F0F526F5FA95E45670D0000 +CA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000798F8179890789866DF55F1762556CB84ECF72699B925206543B567458B3 +61A4626E711A596E7C897CDE7D1B96F06587805E4E194F75517558405E635E73 +5F0A67C44E26853D9589965B7C73980150FB58C1765678A7522577A585117B86 +504F590972477BC77DE88FBA8FD4904D4FBF52C95A295F0197AD4FDD821792EA +570363556B69752B88DC8F147A4252DF58936155620A66AE6BCD7C3F83E95023 +4FF853055446583159495B9D5CF05CEF5D295E9662B16367653E65B9670B0000 +CB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006CD56CE170F978327E2B80DE82B3840C84EC870289128A2A8C4A90A692D2 +98FD9CF39D6C4E4F4EA1508D5256574A59A85E3D5FD85FD9623F66B4671B67D0 +68D251927D2180AA81A88B008C8C8CBF927E96325420982C531750D5535C58A8 +64B26734726777667A4691E652C36CA16B8658005E4C5954672C7FFB51E176C6 +646978E89B549EBB57CB59B96627679A6BCE54E969D95E55819C67959BAA67FE +9C52685D4EA64FE353C862B9672B6CAB8FC44FAD7E6D9EBF4E0761626E800000 +CC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006F2B85135473672A9B455DF37B955CAC5BC6871C6E4A84D17A1481085999 +7C8D6C11772052D959227121725F77DB97279D61690B5A7F5A1851A5540D547D +660E76DF8FF792989CF459EA725D6EC5514D68C97DBF7DEC97629EBA64786A21 +830259845B5F6BDB731B76F27DB280178499513267289ED976EE676252FF9905 +5C24623B7C7E8CB0554F60B67D0B958053014E5F51B6591C723A803691CE5F25 +77E253845F797D0485AC8A338E8D975667F385AE9453610961086CB976520000 +CD +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008AED8F38552F4F51512A52C753CB5BA55E7D60A0618263D6670967DA6E67 +6D8C733673377531795088D58A98904A909190F596C4878D59154E884F594E0E +8A898F3F981050AD5E7C59965BB95EB863DA63FA64C166DC694A69D86D0B6EB6 +719475287AAF7F8A8000844984C989818B218E0A9065967D990A617E62916B32 +6C836D747FCC7FFC6DC07F8587BA88F8676583B1983C96F76D1B7D61843D916A +4E7153755D506B046FEB85CD862D89A75229540F5C65674E68A8740674830000 +CE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000075E288CF88E191CC96E296785F8B73877ACB844E63A0756552896D416E9C +74097559786B7C9296867ADC9F8D4FB6616E65C5865C4E864EAE50DA4E2151CC +5BEE659968816DBC731F764277AD7A1C7CE7826F8AD2907C91CF96759818529B +7DD1502B539867976DCB71D0743381E88F2A96A39C579E9F746058416D997D2F +985E4EE44F364F8B51B752B15DBA601C73B2793C82D3923496B796F6970A9E97 +9F6266A66B74521752A370C888C25EC9604B61906F2371497C3E7DF4806F0000 +CF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000084EE9023932C54429B6F6AD370898CC28DEF973252B45A415ECA5F046717 +697C69946D6A6F0F726272FC7BED8001807E874B90CE516D9E937984808B9332 +8AD6502D548C8A716B6A8CC4810760D167A09DF24E994E989C108A6B85C18568 +69006E7E78978155000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +D0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005F0C4E104E154E2A4E314E364E3C4E3F4E424E564E584E824E858C6B4E8A +82125F0D4E8E4E9E4E9F4EA04EA24EB04EB34EB64ECE4ECD4EC44EC64EC24ED7 +4EDE4EED4EDF4EF74F094F5A4F304F5B4F5D4F574F474F764F884F8F4F984F7B +4F694F704F914F6F4F864F9651184FD44FDF4FCE4FD84FDB4FD14FDA4FD04FE4 +4FE5501A50285014502A502550054F1C4FF650215029502C4FFE4FEF50115006 +504350476703505550505048505A5056506C50785080509A508550B450B20000 +D1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000050C950CA50B350C250D650DE50E550ED50E350EE50F950F5510951015102 +511651155114511A5121513A5137513C513B513F51405152514C515451627AF8 +5169516A516E5180518256D8518C5189518F519151935195519651A451A651A2 +51A951AA51AB51B351B151B251B051B551BD51C551C951DB51E0865551E951ED +51F051F551FE5204520B5214520E5227522A522E52335239524F5244524B524C +525E5254526A527452695273527F527D528D529452925271528852918FA80000 +D2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008FA752AC52AD52BC52B552C152CD52D752DE52E352E698ED52E052F352F5 +52F852F9530653087538530D5310530F5315531A5323532F5331533353385340 +534653454E175349534D51D6535E5369536E5918537B53775382539653A053A6 +53A553AE53B053B653C37C1296D953DF66FC71EE53EE53E853ED53FA5401543D +5440542C542D543C542E54365429541D544E548F5475548E545F547154775470 +5492547B5480547654845490548654C754A254B854A554AC54C454C854A80000 +D3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000054AB54C254A454BE54BC54D854E554E6550F551454FD54EE54ED54FA54E2 +553955405563554C552E555C55455556555755385533555D5599558054AF558A +559F557B557E5598559E55AE557C558355A9558755A855DA55C555DF55C455DC +55E455D4561455F7561655FE55FD561B55F9564E565071DF5634563656325638 +566B5664562F566C566A56865680568A56A05694568F56A556AE56B656B456C2 +56BC56C156C356C056C856CE56D156D356D756EE56F9570056FF570457090000 +D4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005708570B570D57135718571655C7571C572657375738574E573B5740574F +576957C057885761577F5789579357A057B357A457AA57B057C357C657D457D2 +57D3580A57D657E3580B5819581D587258215862584B58706BC05852583D5879 +588558B9589F58AB58BA58DE58BB58B858AE58C558D358D158D758D958D858E5 +58DC58E458DF58EF58FA58F958FB58FC58FD5902590A5910591B68A65925592C +592D59325938593E7AD259555950594E595A5958596259605967596C59690000 +D5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000059785981599D4F5E4FAB59A359B259C659E859DC598D59D959DA5A255A1F +5A115A1C5A095A1A5A405A6C5A495A355A365A625A6A5A9A5ABC5ABE5ACB5AC2 +5ABD5AE35AD75AE65AE95AD65AFA5AFB5B0C5B0B5B165B325AD05B2A5B365B3E +5B435B455B405B515B555B5A5B5B5B655B695B705B735B755B7865885B7A5B80 +5B835BA65BB85BC35BC75BC95BD45BD05BE45BE65BE25BDE5BE55BEB5BF05BF6 +5BF35C055C075C085C0D5C135C205C225C285C385C395C415C465C4E5C530000 +D6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005C505C4F5B715C6C5C6E4E625C765C795C8C5C915C94599B5CAB5CBB5CB6 +5CBC5CB75CC55CBE5CC75CD95CE95CFD5CFA5CED5D8C5CEA5D0B5D155D175D5C +5D1F5D1B5D115D145D225D1A5D195D185D4C5D525D4E5D4B5D6C5D735D765D87 +5D845D825DA25D9D5DAC5DAE5DBD5D905DB75DBC5DC95DCD5DD35DD25DD65DDB +5DEB5DF25DF55E0B5E1A5E195E115E1B5E365E375E445E435E405E4E5E575E54 +5E5F5E625E645E475E755E765E7A9EBC5E7F5EA05EC15EC25EC85ED05ECF0000 +D7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005ED65EE35EDD5EDA5EDB5EE25EE15EE85EE95EEC5EF15EF35EF05EF45EF8 +5EFE5F035F095F5D5F5C5F0B5F115F165F295F2D5F385F415F485F4C5F4E5F2F +5F515F565F575F595F615F6D5F735F775F835F825F7F5F8A5F885F915F875F9E +5F995F985FA05FA85FAD5FBC5FD65FFB5FE45FF85FF15FDD60B35FFF60216060 +601960106029600E6031601B6015602B6026600F603A605A6041606A6077605F +604A6046604D6063604360646042606C606B60596081608D60E76083609A0000 +D8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006084609B60966097609260A7608B60E160B860E060D360B45FF060BD60C6 +60B560D8614D6115610660F660F7610060F460FA6103612160FB60F1610D610E +6147613E61286127614A613F613C612C6134613D614261446173617761586159 +615A616B6174616F61656171615F615D6153617561996196618761AC6194619A +618A619161AB61AE61CC61CA61C961F761C861C361C661BA61CB7F7961CD61E6 +61E361F661FA61F461FF61FD61FC61FE620062086209620D620C6214621B0000 +D9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000621E6221622A622E6230623262336241624E625E6263625B62606268627C +62826289627E62926293629662D46283629462D762D162BB62CF62FF62C664D4 +62C862DC62CC62CA62C262C7629B62C9630C62EE62F163276302630862EF62F5 +6350633E634D641C634F6396638E638063AB637663A3638F6389639F63B5636B +636963BE63E963C063C663E363C963D263F663C4641664346406641364266436 +651D64176428640F6467646F6476644E652A6495649364A564A9648864BC0000 +DA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000064DA64D264C564C764BB64D864C264F164E7820964E064E162AC64E364EF +652C64F664F464F264FA650064FD6518651C650565246523652B653465356537 +65366538754B654865566555654D6558655E655D65726578658265838B8A659B +659F65AB65B765C365C665C165C465CC65D265DB65D965E065E165F16772660A +660365FB6773663566366634661C664F664466496641665E665D666466676668 +665F6662667066836688668E668966846698669D66C166B966C966BE66BC0000 +DB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000066C466B866D666DA66E0663F66E666E966F066F566F7670F6716671E6726 +67279738672E673F67366741673867376746675E676067596763676467896770 +67A9677C676A678C678B67A667A1678567B767EF67B467EC67B367E967B867E4 +67DE67DD67E267EE67B967CE67C667E76A9C681E684668296840684D6832684E +68B3682B685968636877687F689F688F68AD6894689D689B68836AAE68B96874 +68B568A068BA690F688D687E690168CA690868D86922692668E1690C68CD0000 +DC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000068D468E768D569366912690468D768E3692568F968E068EF6928692A691A +6923692168C669796977695C6978696B6954697E696E69396974693D69596930 +6961695E695D6981696A69B269AE69D069BF69C169D369BE69CE5BE869CA69DD +69BB69C369A76A2E699169A0699C699569B469DE69E86A026A1B69FF6B0A69F9 +69F269E76A0569B16A1E69ED6A1469EB6A0A6A126AC16A236A136A446A0C6A72 +6A366A786A476A626A596A666A486A386A226A906A8D6AA06A846AA26AA30000 +DD +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006A9786176ABB6AC36AC26AB86AB36AAC6ADE6AD16ADF6AAA6ADA6AEA6AFB +6B0586166AFA6B126B169B316B1F6B386B3776DC6B3998EE6B476B436B496B50 +6B596B546B5B6B5F6B616B786B796B7F6B806B846B836B8D6B986B956B9E6BA4 +6BAA6BAB6BAF6BB26BB16BB36BB76BBC6BC66BCB6BD36BDF6BEC6BEB6BF36BEF +9EBE6C086C136C146C1B6C246C236C5E6C556C626C6A6C826C8D6C9A6C816C9B +6C7E6C686C736C926C906CC46CF16CD36CBD6CD76CC56CDD6CAE6CB16CBE0000 +DE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006CBA6CDB6CEF6CD96CEA6D1F884D6D366D2B6D3D6D386D196D356D336D12 +6D0C6D636D936D646D5A6D796D596D8E6D956FE46D856DF96E156E0A6DB56DC7 +6DE66DB86DC66DEC6DDE6DCC6DE86DD26DC56DFA6DD96DE46DD56DEA6DEE6E2D +6E6E6E2E6E196E726E5F6E3E6E236E6B6E2B6E766E4D6E1F6E436E3A6E4E6E24 +6EFF6E1D6E386E826EAA6E986EC96EB76ED36EBD6EAF6EC46EB26ED46ED56E8F +6EA56EC26E9F6F416F11704C6EEC6EF86EFE6F3F6EF26F316EEF6F326ECC0000 +DF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006F3E6F136EF76F866F7A6F786F816F806F6F6F5B6FF36F6D6F826F7C6F58 +6F8E6F916FC26F666FB36FA36FA16FA46FB96FC66FAA6FDF6FD56FEC6FD46FD8 +6FF16FEE6FDB7009700B6FFA70117001700F6FFE701B701A6F74701D7018701F +7030703E7032705170637099709270AF70F170AC70B870B370AE70DF70CB70DD +70D9710970FD711C711971657155718871667162714C7156716C718F71FB7184 +719571A871AC71D771B971BE71D271C971D471CE71E071EC71E771F571FC0000 +E0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000071F971FF720D7210721B7228722D722C72307232723B723C723F72407246 +724B72587274727E7282728172877292729672A272A772B972B272C372C672C4 +72CE72D272E272E072E172F972F7500F7317730A731C7316731D7334732F7329 +7325733E734E734F9ED87357736A7368737073787375737B737A73C873B373CE +73BB73C073E573EE73DE74A27405746F742573F87432743A7455743F745F7459 +7441745C746974707463746A7476747E748B749E74A774CA74CF74D473F10000 +E1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000074E074E374E774E974EE74F274F074F174F874F7750475037505750C750E +750D75157513751E7526752C753C7544754D754A7549755B7546755A75697564 +7567756B756D75787576758675877574758A758975827594759A759D75A575A3 +75C275B375C375B575BD75B875BC75B175CD75CA75D275D975E375DE75FE75FF +75FC760175F075FA75F275F3760B760D7609761F762776207621762276247634 +7630763B764776487646765C76587661766276687669766A7667766C76700000 +E2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000767276767678767C768076837688768B768E769676937699769A76B076B4 +76B876B976BA76C276CD76D676D276DE76E176E576E776EA862F76FB77087707 +770477297724771E77257726771B773777387747775A7768776B775B7765777F +777E7779778E778B779177A0779E77B077B677B977BF77BC77BD77BB77C777CD +77D777DA77DC77E377EE77FC780C781279267820792A7845788E78747886787C +789A788C78A378B578AA78AF78D178C678CB78D478BE78BC78C578CA78EC0000 +E3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000078E778DA78FD78F47907791279117919792C792B794079607957795F795A +79557953797A797F798A799D79A79F4B79AA79AE79B379B979BA79C979D579E7 +79EC79E179E37A087A0D7A187A197A207A1F79807A317A3B7A3E7A377A437A57 +7A497A617A627A699F9D7A707A797A7D7A887A977A957A987A967AA97AC87AB0 +7AB67AC57AC47ABF90837AC77ACA7ACD7ACF7AD57AD37AD97ADA7ADD7AE17AE2 +7AE67AED7AF07B027B0F7B0A7B067B337B187B197B1E7B357B287B367B500000 +E4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007B7A7B047B4D7B0B7B4C7B457B757B657B747B677B707B717B6C7B6E7B9D +7B987B9F7B8D7B9C7B9A7B8B7B927B8F7B5D7B997BCB7BC17BCC7BCF7BB47BC6 +7BDD7BE97C117C147BE67BE57C607C007C077C137BF37BF77C177C0D7BF67C23 +7C277C2A7C1F7C377C2B7C3D7C4C7C437C547C4F7C407C507C587C5F7C647C56 +7C657C6C7C757C837C907CA47CAD7CA27CAB7CA17CA87CB37CB27CB17CAE7CB9 +7CBD7CC07CC57CC27CD87CD27CDC7CE29B3B7CEF7CF27CF47CF67CFA7D060000 +E5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007D027D1C7D157D0A7D457D4B7D2E7D327D3F7D357D467D737D567D4E7D72 +7D687D6E7D4F7D637D937D897D5B7D8F7D7D7D9B7DBA7DAE7DA37DB57DC77DBD +7DAB7E3D7DA27DAF7DDC7DB87D9F7DB07DD87DDD7DE47DDE7DFB7DF27DE17E05 +7E0A7E237E217E127E317E1F7E097E0B7E227E467E667E3B7E357E397E437E37 +7E327E3A7E677E5D7E567E5E7E597E5A7E797E6A7E697E7C7E7B7E837DD57E7D +8FAE7E7F7E887E897E8C7E927E907E937E947E967E8E7E9B7E9C7F387F3A0000 +E6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007F457F4C7F4D7F4E7F507F517F557F547F587F5F7F607F687F697F677F78 +7F827F867F837F887F877F8C7F947F9E7F9D7F9A7FA37FAF7FB27FB97FAE7FB6 +7FB88B717FC57FC67FCA7FD57FD47FE17FE67FE97FF37FF998DC80068004800B +801280188019801C80218028803F803B804A804680528058805A805F80628068 +80738072807080768079807D807F808480868085809B8093809A80AD519080AC +80DB80E580D980DD80C480DA80D6810980EF80F1811B81298123812F814B0000 +E7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000968B8146813E8153815180FC8171816E81658166817481838188818A8180 +818281A0819581A481A3815F819381A981B081B581BE81B881BD81C081C281BA +81C981CD81D181D981D881C881DA81DF81E081E781FA81FB81FE820182028205 +8207820A820D821082168229822B82388233824082598258825D825A825F8264 +82628268826A826B822E827182778278827E828D829282AB829F82BB82AC82E1 +82E382DF82D282F482F382FA8393830382FB82F982DE830682DC830982D90000 +E8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000833583348316833283318340833983508345832F832B831783188385839A +83AA839F83A283968323838E8387838A837C83B58373837583A0838983A883F4 +841383EB83CE83FD840383D8840B83C183F7840783E083F2840D8422842083BD +8438850683FB846D842A843C855A84848477846B84AD846E848284698446842C +846F8479843584CA846284B984BF849F84D984CD84BB84DA84D084C184C684D6 +84A1852184FF84F485178518852C851F8515851484FC85408563855885480000 +E9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000085418602854B8555858085A485888591858A85A8856D8594859B85EA8587 +859C8577857E859085C985BA85CF85B985D085D585DD85E585DC85F9860A8613 +860B85FE85FA86068622861A8630863F864D4E558654865F86678671869386A3 +86A986AA868B868C86B686AF86C486C686B086C9882386AB86D486DE86E986EC +86DF86DB86EF8712870687088700870386FB87118709870D86F9870A8734873F +8737873B87258729871A8760875F8778874C874E877487578768876E87590000 +EA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000087538763876A880587A2879F878287AF87CB87BD87C087D096D687AB87C4 +87B387C787C687BB87EF87F287E0880F880D87FE87F687F7880E87D288118816 +8815882288218831883688398827883B8844884288528859885E8862886B8881 +887E889E8875887D88B5887288828897889288AE889988A2888D88A488B088BF +88B188C388C488D488D888D988DD88F9890288FC88F488E888F28904890C890A +89138943891E8925892A892B89418944893B89368938894C891D8960895E0000 +EB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000089668964896D896A896F89748977897E89838988898A8993899889A189A9 +89A689AC89AF89B289BA89BD89BF89C089DA89DC89DD89E789F489F88A038A16 +8A108A0C8A1B8A1D8A258A368A418A5B8A528A468A488A7C8A6D8A6C8A628A85 +8A828A848AA88AA18A918AA58AA68A9A8AA38AC48ACD8AC28ADA8AEB8AF38AE7 +8AE48AF18B148AE08AE28AF78ADE8ADB8B0C8B078B1A8AE18B168B108B178B20 +8B3397AB8B268B2B8B3E8B288B418B4C8B4F8B4E8B498B568B5B8B5A8B6B0000 +EC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008B5F8B6C8B6F8B748B7D8B808B8C8B8E8B928B938B968B998B9A8C3A8C41 +8C3F8C488C4C8C4E8C508C558C628C6C8C788C7A8C828C898C858C8A8C8D8C8E +8C948C7C8C98621D8CAD8CAA8CBD8CB28CB38CAE8CB68CC88CC18CE48CE38CDA +8CFD8CFA8CFB8D048D058D0A8D078D0F8D0D8D109F4E8D138CCD8D148D168D67 +8D6D8D718D738D818D998DC28DBE8DBA8DCF8DDA8DD68DCC8DDB8DCB8DEA8DEB +8DDF8DE38DFC8E088E098DFF8E1D8E1E8E108E1F8E428E358E308E348E4A0000 +ED +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008E478E498E4C8E508E488E598E648E608E2A8E638E558E768E728E7C8E81 +8E878E858E848E8B8E8A8E938E918E948E998EAA8EA18EAC8EB08EC68EB18EBE +8EC58EC88ECB8EDB8EE38EFC8EFB8EEB8EFE8F0A8F058F158F128F198F138F1C +8F1F8F1B8F0C8F268F338F3B8F398F458F428F3E8F4C8F498F468F4E8F578F5C +8F628F638F648F9C8F9F8FA38FAD8FAF8FB78FDA8FE58FE28FEA8FEF90878FF4 +90058FF98FFA901190159021900D901E9016900B90279036903590398FF80000 +EE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000904F905090519052900E9049903E90569058905E9068906F907696A89072 +9082907D90819080908A9089908F90A890AF90B190B590E290E4624890DB9102 +9112911991329130914A9156915891639165916991739172918B9189918291A2 +91AB91AF91AA91B591B491BA91C091C191C991CB91D091D691DF91E191DB91FC +91F591F6921E91FF9214922C92159211925E925792459249926492489295923F +924B9250929C92969293929B925A92CF92B992B792E9930F92FA9344932E0000 +EF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000093199322931A9323933A9335933B935C9360937C936E935693B093AC93AD +939493B993D693D793E893E593D893C393DD93D093C893E4941A941494139403 +940794109436942B94359421943A944194529444945B94609462945E946A9229 +947094759477947D945A947C947E9481947F95829587958A9594959695989599 +95A095A895A795AD95BC95BB95B995BE95CA6FF695C395CD95CC95D595D495D6 +95DC95E195E595E296219628962E962F9642964C964F964B9677965C965E0000 +F0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000965D965F96669672966C968D96989695969796AA96A796B196B296B096B4 +96B696B896B996CE96CB96C996CD894D96DC970D96D596F99704970697089713 +970E9711970F971697199724972A97309739973D973E97449746974897429749 +975C976097649766976852D2976B977197799785977C9781977A9786978B978F +9790979C97A897A697A397B397B497C397C697C897CB97DC97ED9F4F97F27ADF +97F697F5980F980C9838982498219837983D9846984F984B986B986F98700000 +F1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000098719874987398AA98AF98B198B698C498C398C698E998EB990399099912 +991499189921991D991E99249920992C992E993D993E9942994999459950994B +99519952994C99559997999899A599AD99AE99BC99DF99DB99DD99D899D199ED +99EE99F199F299FB99F89A019A0F9A0599E29A199A2B9A379A459A429A409A43 +9A3E9A559A4D9A5B9A579A5F9A629A659A649A699A6B9A6A9AAD9AB09ABC9AC0 +9ACF9AD19AD39AD49ADE9ADF9AE29AE39AE69AEF9AEB9AEE9AF49AF19AF70000 +F2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009AFB9B069B189B1A9B1F9B229B239B259B279B289B299B2A9B2E9B2F9B32 +9B449B439B4F9B4D9B4E9B519B589B749B939B839B919B969B979B9F9BA09BA8 +9BB49BC09BCA9BB99BC69BCF9BD19BD29BE39BE29BE49BD49BE19C3A9BF29BF1 +9BF09C159C149C099C139C0C9C069C089C129C0A9C049C2E9C1B9C259C249C21 +9C309C479C329C469C3E9C5A9C609C679C769C789CE79CEC9CF09D099D089CEB +9D039D069D2A9D269DAF9D239D1F9D449D159D129D419D3F9D3E9D469D480000 +F3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009D5D9D5E9D649D519D509D599D729D899D879DAB9D6F9D7A9D9A9DA49DA9 +9DB29DC49DC19DBB9DB89DBA9DC69DCF9DC29DD99DD39DF89DE69DED9DEF9DFD +9E1A9E1B9E1E9E759E799E7D9E819E889E8B9E8C9E929E959E919E9D9EA59EA9 +9EB89EAA9EAD97619ECC9ECE9ECF9ED09ED49EDC9EDE9EDD9EE09EE59EE89EEF +9EF49EF69EF79EF99EFB9EFC9EFD9F079F0876B79F159F219F2C9F3E9F4A9F52 +9F549F639F5F9F609F619F669F679F6C9F6A9F779F729F769F959F9C9FA00000 +F4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000582F69C79059746451DC7199000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +R +A1C1 301C FF5E +A1C2 2016 2225 +A1DD 2212 FF0D +A1F1 00A2 FFE0 +A1F2 00A3 FFE1 +A2CC 00AC FFE2 diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/euc-kr.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/euc-kr.enc new file mode 100644 index 00000000..5e9bb93b --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/euc-kr.enc @@ -0,0 +1,1533 @@ +# Encoding file: euc-kr, multi-byte +M +003F 0 90 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +0080008100820083008400850086008700880089008A008B008C008D008E008F +0090009100920093009400950096009700980099009A009B009C009D009E009F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +A1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000030003001300200B72025202600A8300300AD20152225FF3C223C20182019 +201C201D3014301530083009300A300B300C300D300E300F3010301100B100D7 +00F7226022642265221E223400B0203220332103212BFFE0FFE1FFE526422640 +222022A52312220222072261225200A7203B2606260525CB25CF25CE25C725C6 +25A125A025B325B225BD25BC219221902191219321943013226A226B221A223D +221D2235222B222C2208220B2286228722822283222A222922272228FFE20000 +A2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000021D221D42200220300B4FF5E02C702D802DD02DA02D900B802DB00A100BF +02D0222E2211220F00A42109203025C125C025B725B626642660266126652667 +2663229925C825A325D025D1259225A425A525A825A725A625A92668260F260E +261C261E00B62020202121952197219921962198266D2669266A266C327F321C +211633C7212233C233D821210000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +A3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000FF01FF02FF03FF04FF05FF06FF07FF08FF09FF0AFF0BFF0CFF0DFF0EFF0F +FF10FF11FF12FF13FF14FF15FF16FF17FF18FF19FF1AFF1BFF1CFF1DFF1EFF1F +FF20FF21FF22FF23FF24FF25FF26FF27FF28FF29FF2AFF2BFF2CFF2DFF2EFF2F +FF30FF31FF32FF33FF34FF35FF36FF37FF38FF39FF3AFF3BFFE6FF3DFF3EFF3F +FF40FF41FF42FF43FF44FF45FF46FF47FF48FF49FF4AFF4BFF4CFF4DFF4EFF4F +FF50FF51FF52FF53FF54FF55FF56FF57FF58FF59FF5AFF5BFF5CFF5DFFE30000 +A4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000313131323133313431353136313731383139313A313B313C313D313E313F +3140314131423143314431453146314731483149314A314B314C314D314E314F +3150315131523153315431553156315731583159315A315B315C315D315E315F +3160316131623163316431653166316731683169316A316B316C316D316E316F +3170317131723173317431753176317731783179317A317B317C317D317E317F +3180318131823183318431853186318731883189318A318B318C318D318E0000 +A5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000217021712172217321742175217621772178217900000000000000000000 +2160216121622163216421652166216721682169000000000000000000000000 +0000039103920393039403950396039703980399039A039B039C039D039E039F +03A003A103A303A403A503A603A703A803A90000000000000000000000000000 +000003B103B203B303B403B503B603B703B803B903BA03BB03BC03BD03BE03BF +03C003C103C303C403C503C603C703C803C90000000000000000000000000000 +A6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000025002502250C251025182514251C252C25242534253C25012503250F2513 +251B251725232533252B253B254B2520252F25282537253F251D253025252538 +254225122511251A251925162515250E250D251E251F25212522252625272529 +252A252D252E25312532253525362539253A253D253E25402541254325442545 +2546254725482549254A00000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +A7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00003395339633972113339833C433A333A433A533A63399339A339B339C339D +339E339F33A033A133A233CA338D338E338F33CF3388338933C833A733A833B0 +33B133B233B333B433B533B633B733B833B93380338133823383338433BA33BB +33BC33BD33BE33BF33903391339233933394212633C033C1338A338B338C33D6 +33C533AD33AE33AF33DB33A933AA33AB33AC33DD33D033D333C333C933DC33C6 +0000000000000000000000000000000000000000000000000000000000000000 +A8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000000C600D000AA0126000001320000013F014100D8015200BA00DE0166014A +00003260326132623263326432653266326732683269326A326B326C326D326E +326F3270327132723273327432753276327732783279327A327B24D024D124D2 +24D324D424D524D624D724D824D924DA24DB24DC24DD24DE24DF24E024E124E2 +24E324E424E524E624E724E824E9246024612462246324642465246624672468 +2469246A246B246C246D246E00BD2153215400BC00BE215B215C215D215E0000 +A9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000000E6011100F001270131013301380140014200F8015300DF00FE0167014B +01493200320132023203320432053206320732083209320A320B320C320D320E +320F3210321132123213321432153216321732183219321A321B249C249D249E +249F24A024A124A224A324A424A524A624A724A824A924AA24AB24AC24AD24AE +24AF24B024B124B224B324B424B5247424752476247724782479247A247B247C +247D247E247F24802481248200B900B200B32074207F20812082208320840000 +AA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000304130423043304430453046304730483049304A304B304C304D304E304F +3050305130523053305430553056305730583059305A305B305C305D305E305F +3060306130623063306430653066306730683069306A306B306C306D306E306F +3070307130723073307430753076307730783079307A307B307C307D307E307F +3080308130823083308430853086308730883089308A308B308C308D308E308F +3090309130923093000000000000000000000000000000000000000000000000 +AB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000030A130A230A330A430A530A630A730A830A930AA30AB30AC30AD30AE30AF +30B030B130B230B330B430B530B630B730B830B930BA30BB30BC30BD30BE30BF +30C030C130C230C330C430C530C630C730C830C930CA30CB30CC30CD30CE30CF +30D030D130D230D330D430D530D630D730D830D930DA30DB30DC30DD30DE30DF +30E030E130E230E330E430E530E630E730E830E930EA30EB30EC30ED30EE30EF +30F030F130F230F330F430F530F6000000000000000000000000000000000000 +AC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000004100411041204130414041504010416041704180419041A041B041C041D +041E041F0420042104220423042404250426042704280429042A042B042C042D +042E042F00000000000000000000000000000000000000000000000000000000 +000004300431043204330434043504510436043704380439043A043B043C043D +043E043F0440044104420443044404450446044704480449044A044B044C044D +044E044F00000000000000000000000000000000000000000000000000000000 +B0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000AC00AC01AC04AC07AC08AC09AC0AAC10AC11AC12AC13AC14AC15AC16AC17 +AC19AC1AAC1BAC1CAC1DAC20AC24AC2CAC2DAC2FAC30AC31AC38AC39AC3CAC40 +AC4BAC4DAC54AC58AC5CAC70AC71AC74AC77AC78AC7AAC80AC81AC83AC84AC85 +AC86AC89AC8AAC8BAC8CAC90AC94AC9CAC9DAC9FACA0ACA1ACA8ACA9ACAAACAC +ACAFACB0ACB8ACB9ACBBACBCACBDACC1ACC4ACC8ACCCACD5ACD7ACE0ACE1ACE4 +ACE7ACE8ACEAACECACEFACF0ACF1ACF3ACF5ACF6ACFCACFDAD00AD04AD060000 +B1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000AD0CAD0DAD0FAD11AD18AD1CAD20AD29AD2CAD2DAD34AD35AD38AD3CAD44 +AD45AD47AD49AD50AD54AD58AD61AD63AD6CAD6DAD70AD73AD74AD75AD76AD7B +AD7CAD7DAD7FAD81AD82AD88AD89AD8CAD90AD9CAD9DADA4ADB7ADC0ADC1ADC4 +ADC8ADD0ADD1ADD3ADDCADE0ADE4ADF8ADF9ADFCADFFAE00AE01AE08AE09AE0B +AE0DAE14AE30AE31AE34AE37AE38AE3AAE40AE41AE43AE45AE46AE4AAE4CAE4D +AE4EAE50AE54AE56AE5CAE5DAE5FAE60AE61AE65AE68AE69AE6CAE70AE780000 +B2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000AE79AE7BAE7CAE7DAE84AE85AE8CAEBCAEBDAEBEAEC0AEC4AECCAECDAECF +AED0AED1AED8AED9AEDCAEE8AEEBAEEDAEF4AEF8AEFCAF07AF08AF0DAF10AF2C +AF2DAF30AF32AF34AF3CAF3DAF3FAF41AF42AF43AF48AF49AF50AF5CAF5DAF64 +AF65AF79AF80AF84AF88AF90AF91AF95AF9CAFB8AFB9AFBCAFC0AFC7AFC8AFC9 +AFCBAFCDAFCEAFD4AFDCAFE8AFE9AFF0AFF1AFF4AFF8B000B001B004B00CB010 +B014B01CB01DB028B044B045B048B04AB04CB04EB053B054B055B057B0590000 +B3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000B05DB07CB07DB080B084B08CB08DB08FB091B098B099B09AB09CB09FB0A0 +B0A1B0A2B0A8B0A9B0ABB0ACB0ADB0AEB0AFB0B1B0B3B0B4B0B5B0B8B0BCB0C4 +B0C5B0C7B0C8B0C9B0D0B0D1B0D4B0D8B0E0B0E5B108B109B10BB10CB110B112 +B113B118B119B11BB11CB11DB123B124B125B128B12CB134B135B137B138B139 +B140B141B144B148B150B151B154B155B158B15CB160B178B179B17CB180B182 +B188B189B18BB18DB192B193B194B198B19CB1A8B1CCB1D0B1D4B1DCB1DD0000 +B4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000B1DFB1E8B1E9B1ECB1F0B1F9B1FBB1FDB204B205B208B20BB20CB214B215 +B217B219B220B234B23CB258B25CB260B268B269B274B275B27CB284B285B289 +B290B291B294B298B299B29AB2A0B2A1B2A3B2A5B2A6B2AAB2ACB2B0B2B4B2C8 +B2C9B2CCB2D0B2D2B2D8B2D9B2DBB2DDB2E2B2E4B2E5B2E6B2E8B2EBB2ECB2ED +B2EEB2EFB2F3B2F4B2F5B2F7B2F8B2F9B2FAB2FBB2FFB300B301B304B308B310 +B311B313B314B315B31CB354B355B356B358B35BB35CB35EB35FB364B3650000 +B5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000B367B369B36BB36EB370B371B374B378B380B381B383B384B385B38CB390 +B394B3A0B3A1B3A8B3ACB3C4B3C5B3C8B3CBB3CCB3CEB3D0B3D4B3D5B3D7B3D9 +B3DBB3DDB3E0B3E4B3E8B3FCB410B418B41CB420B428B429B42BB434B450B451 +B454B458B460B461B463B465B46CB480B488B49DB4A4B4A8B4ACB4B5B4B7B4B9 +B4C0B4C4B4C8B4D0B4D5B4DCB4DDB4E0B4E3B4E4B4E6B4ECB4EDB4EFB4F1B4F8 +B514B515B518B51BB51CB524B525B527B528B529B52AB530B531B534B5380000 +B6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000B540B541B543B544B545B54BB54CB54DB550B554B55CB55DB55FB560B561 +B5A0B5A1B5A4B5A8B5AAB5ABB5B0B5B1B5B3B5B4B5B5B5BBB5BCB5BDB5C0B5C4 +B5CCB5CDB5CFB5D0B5D1B5D8B5ECB610B611B614B618B625B62CB634B648B664 +B668B69CB69DB6A0B6A4B6ABB6ACB6B1B6D4B6F0B6F4B6F8B700B701B705B728 +B729B72CB72FB730B738B739B73BB744B748B74CB754B755B760B764B768B770 +B771B773B775B77CB77DB780B784B78CB78DB78FB790B791B792B796B7970000 +B7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000B798B799B79CB7A0B7A8B7A9B7ABB7ACB7ADB7B4B7B5B7B8B7C7B7C9B7EC +B7EDB7F0B7F4B7FCB7FDB7FFB800B801B807B808B809B80CB810B818B819B81B +B81DB824B825B828B82CB834B835B837B838B839B840B844B851B853B85CB85D +B860B864B86CB86DB86FB871B878B87CB88DB8A8B8B0B8B4B8B8B8C0B8C1B8C3 +B8C5B8CCB8D0B8D4B8DDB8DFB8E1B8E8B8E9B8ECB8F0B8F8B8F9B8FBB8FDB904 +B918B920B93CB93DB940B944B94CB94FB951B958B959B95CB960B968B9690000 +B8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000B96BB96DB974B975B978B97CB984B985B987B989B98AB98DB98EB9ACB9AD +B9B0B9B4B9BCB9BDB9BFB9C1B9C8B9C9B9CCB9CEB9CFB9D0B9D1B9D2B9D8B9D9 +B9DBB9DDB9DEB9E1B9E3B9E4B9E5B9E8B9ECB9F4B9F5B9F7B9F8B9F9B9FABA00 +BA01BA08BA15BA38BA39BA3CBA40BA42BA48BA49BA4BBA4DBA4EBA53BA54BA55 +BA58BA5CBA64BA65BA67BA68BA69BA70BA71BA74BA78BA83BA84BA85BA87BA8C +BAA8BAA9BAABBAACBAB0BAB2BAB8BAB9BABBBABDBAC4BAC8BAD8BAD9BAFC0000 +B9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000BB00BB04BB0DBB0FBB11BB18BB1CBB20BB29BB2BBB34BB35BB36BB38BB3B +BB3CBB3DBB3EBB44BB45BB47BB49BB4DBB4FBB50BB54BB58BB61BB63BB6CBB88 +BB8CBB90BBA4BBA8BBACBBB4BBB7BBC0BBC4BBC8BBD0BBD3BBF8BBF9BBFCBBFF +BC00BC02BC08BC09BC0BBC0CBC0DBC0FBC11BC14BC15BC16BC17BC18BC1BBC1C +BC1DBC1EBC1FBC24BC25BC27BC29BC2DBC30BC31BC34BC38BC40BC41BC43BC44 +BC45BC49BC4CBC4DBC50BC5DBC84BC85BC88BC8BBC8CBC8EBC94BC95BC970000 +BA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000BC99BC9ABCA0BCA1BCA4BCA7BCA8BCB0BCB1BCB3BCB4BCB5BCBCBCBDBCC0 +BCC4BCCDBCCFBCD0BCD1BCD5BCD8BCDCBCF4BCF5BCF6BCF8BCFCBD04BD05BD07 +BD09BD10BD14BD24BD2CBD40BD48BD49BD4CBD50BD58BD59BD64BD68BD80BD81 +BD84BD87BD88BD89BD8ABD90BD91BD93BD95BD99BD9ABD9CBDA4BDB0BDB8BDD4 +BDD5BDD8BDDCBDE9BDF0BDF4BDF8BE00BE03BE05BE0CBE0DBE10BE14BE1CBE1D +BE1FBE44BE45BE48BE4CBE4EBE54BE55BE57BE59BE5ABE5BBE60BE61BE640000 +BB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000BE68BE6ABE70BE71BE73BE74BE75BE7BBE7CBE7DBE80BE84BE8CBE8DBE8F +BE90BE91BE98BE99BEA8BED0BED1BED4BED7BED8BEE0BEE3BEE4BEE5BEECBF01 +BF08BF09BF18BF19BF1BBF1CBF1DBF40BF41BF44BF48BF50BF51BF55BF94BFB0 +BFC5BFCCBFCDBFD0BFD4BFDCBFDFBFE1C03CC051C058C05CC060C068C069C090 +C091C094C098C0A0C0A1C0A3C0A5C0ACC0ADC0AFC0B0C0B3C0B4C0B5C0B6C0BC +C0BDC0BFC0C0C0C1C0C5C0C8C0C9C0CCC0D0C0D8C0D9C0DBC0DCC0DDC0E40000 +BC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000C0E5C0E8C0ECC0F4C0F5C0F7C0F9C100C104C108C110C115C11CC11DC11E +C11FC120C123C124C126C127C12CC12DC12FC130C131C136C138C139C13CC140 +C148C149C14BC14CC14DC154C155C158C15CC164C165C167C168C169C170C174 +C178C185C18CC18DC18EC190C194C196C19CC19DC19FC1A1C1A5C1A8C1A9C1AC +C1B0C1BDC1C4C1C8C1CCC1D4C1D7C1D8C1E0C1E4C1E8C1F0C1F1C1F3C1FCC1FD +C200C204C20CC20DC20FC211C218C219C21CC21FC220C228C229C22BC22D0000 +BD +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000C22FC231C232C234C248C250C251C254C258C260C265C26CC26DC270C274 +C27CC27DC27FC281C288C289C290C298C29BC29DC2A4C2A5C2A8C2ACC2ADC2B4 +C2B5C2B7C2B9C2DCC2DDC2E0C2E3C2E4C2EBC2ECC2EDC2EFC2F1C2F6C2F8C2F9 +C2FBC2FCC300C308C309C30CC30DC313C314C315C318C31CC324C325C328C329 +C345C368C369C36CC370C372C378C379C37CC37DC384C388C38CC3C0C3D8C3D9 +C3DCC3DFC3E0C3E2C3E8C3E9C3EDC3F4C3F5C3F8C408C410C424C42CC4300000 +BE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000C434C43CC43DC448C464C465C468C46CC474C475C479C480C494C49CC4B8 +C4BCC4E9C4F0C4F1C4F4C4F8C4FAC4FFC500C501C50CC510C514C51CC528C529 +C52CC530C538C539C53BC53DC544C545C548C549C54AC54CC54DC54EC553C554 +C555C557C558C559C55DC55EC560C561C564C568C570C571C573C574C575C57C +C57DC580C584C587C58CC58DC58FC591C595C597C598C59CC5A0C5A9C5B4C5B5 +C5B8C5B9C5BBC5BCC5BDC5BEC5C4C5C5C5C6C5C7C5C8C5C9C5CAC5CCC5CE0000 +BF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000C5D0C5D1C5D4C5D8C5E0C5E1C5E3C5E5C5ECC5EDC5EEC5F0C5F4C5F6C5F7 +C5FCC5FDC5FEC5FFC600C601C605C606C607C608C60CC610C618C619C61BC61C +C624C625C628C62CC62DC62EC630C633C634C635C637C639C63BC640C641C644 +C648C650C651C653C654C655C65CC65DC660C66CC66FC671C678C679C67CC680 +C688C689C68BC68DC694C695C698C69CC6A4C6A5C6A7C6A9C6B0C6B1C6B4C6B8 +C6B9C6BAC6C0C6C1C6C3C6C5C6CCC6CDC6D0C6D4C6DCC6DDC6E0C6E1C6E80000 +C0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000C6E9C6ECC6F0C6F8C6F9C6FDC704C705C708C70CC714C715C717C719C720 +C721C724C728C730C731C733C735C737C73CC73DC740C744C74AC74CC74DC74F +C751C752C753C754C755C756C757C758C75CC760C768C76BC774C775C778C77C +C77DC77EC783C784C785C787C788C789C78AC78EC790C791C794C796C797C798 +C79AC7A0C7A1C7A3C7A4C7A5C7A6C7ACC7ADC7B0C7B4C7BCC7BDC7BFC7C0C7C1 +C7C8C7C9C7CCC7CEC7D0C7D8C7DDC7E4C7E8C7ECC800C801C804C808C80A0000 +C1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000C810C811C813C815C816C81CC81DC820C824C82CC82DC82FC831C838C83C +C840C848C849C84CC84DC854C870C871C874C878C87AC880C881C883C885C886 +C887C88BC88CC88DC894C89DC89FC8A1C8A8C8BCC8BDC8C4C8C8C8CCC8D4C8D5 +C8D7C8D9C8E0C8E1C8E4C8F5C8FCC8FDC900C904C905C906C90CC90DC90FC911 +C918C92CC934C950C951C954C958C960C961C963C96CC970C974C97CC988C989 +C98CC990C998C999C99BC99DC9C0C9C1C9C4C9C7C9C8C9CAC9D0C9D1C9D30000 +C2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000C9D5C9D6C9D9C9DAC9DCC9DDC9E0C9E2C9E4C9E7C9ECC9EDC9EFC9F0C9F1 +C9F8C9F9C9FCCA00CA08CA09CA0BCA0CCA0DCA14CA18CA29CA4CCA4DCA50CA54 +CA5CCA5DCA5FCA60CA61CA68CA7DCA84CA98CABCCABDCAC0CAC4CACCCACDCACF +CAD1CAD3CAD8CAD9CAE0CAECCAF4CB08CB10CB14CB18CB20CB21CB41CB48CB49 +CB4CCB50CB58CB59CB5DCB64CB78CB79CB9CCBB8CBD4CBE4CBE7CBE9CC0CCC0D +CC10CC14CC1CCC1DCC21CC22CC27CC28CC29CC2CCC2ECC30CC38CC39CC3B0000 +C3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000CC3CCC3DCC3ECC44CC45CC48CC4CCC54CC55CC57CC58CC59CC60CC64CC66 +CC68CC70CC75CC98CC99CC9CCCA0CCA8CCA9CCABCCACCCADCCB4CCB5CCB8CCBC +CCC4CCC5CCC7CCC9CCD0CCD4CCE4CCECCCF0CD01CD08CD09CD0CCD10CD18CD19 +CD1BCD1DCD24CD28CD2CCD39CD5CCD60CD64CD6CCD6DCD6FCD71CD78CD88CD94 +CD95CD98CD9CCDA4CDA5CDA7CDA9CDB0CDC4CDCCCDD0CDE8CDECCDF0CDF8CDF9 +CDFBCDFDCE04CE08CE0CCE14CE19CE20CE21CE24CE28CE30CE31CE33CE350000 +C4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000CE58CE59CE5CCE5FCE60CE61CE68CE69CE6BCE6DCE74CE75CE78CE7CCE84 +CE85CE87CE89CE90CE91CE94CE98CEA0CEA1CEA3CEA4CEA5CEACCEADCEC1CEE4 +CEE5CEE8CEEBCEECCEF4CEF5CEF7CEF8CEF9CF00CF01CF04CF08CF10CF11CF13 +CF15CF1CCF20CF24CF2CCF2DCF2FCF30CF31CF38CF54CF55CF58CF5CCF64CF65 +CF67CF69CF70CF71CF74CF78CF80CF85CF8CCFA1CFA8CFB0CFC4CFE0CFE1CFE4 +CFE8CFF0CFF1CFF3CFF5CFFCD000D004D011D018D02DD034D035D038D03C0000 +C5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000D044D045D047D049D050D054D058D060D06CD06DD070D074D07CD07DD081 +D0A4D0A5D0A8D0ACD0B4D0B5D0B7D0B9D0C0D0C1D0C4D0C8D0C9D0D0D0D1D0D3 +D0D4D0D5D0DCD0DDD0E0D0E4D0ECD0EDD0EFD0F0D0F1D0F8D10DD130D131D134 +D138D13AD140D141D143D144D145D14CD14DD150D154D15CD15DD15FD161D168 +D16CD17CD184D188D1A0D1A1D1A4D1A8D1B0D1B1D1B3D1B5D1BAD1BCD1C0D1D8 +D1F4D1F8D207D209D210D22CD22DD230D234D23CD23DD23FD241D248D25C0000 +C6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000D264D280D281D284D288D290D291D295D29CD2A0D2A4D2ACD2B1D2B8D2B9 +D2BCD2BFD2C0D2C2D2C8D2C9D2CBD2D4D2D8D2DCD2E4D2E5D2F0D2F1D2F4D2F8 +D300D301D303D305D30CD30DD30ED310D314D316D31CD31DD31FD320D321D325 +D328D329D32CD330D338D339D33BD33CD33DD344D345D37CD37DD380D384D38C +D38DD38FD390D391D398D399D39CD3A0D3A8D3A9D3ABD3ADD3B4D3B8D3BCD3C4 +D3C5D3C8D3C9D3D0D3D8D3E1D3E3D3ECD3EDD3F0D3F4D3FCD3FDD3FFD4010000 +C7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000D408D41DD440D444D45CD460D464D46DD46FD478D479D47CD47FD480D482 +D488D489D48BD48DD494D4A9D4CCD4D0D4D4D4DCD4DFD4E8D4ECD4F0D4F8D4FB +D4FDD504D508D50CD514D515D517D53CD53DD540D544D54CD54DD54FD551D558 +D559D55CD560D565D568D569D56BD56DD574D575D578D57CD584D585D587D588 +D589D590D5A5D5C8D5C9D5CCD5D0D5D2D5D8D5D9D5DBD5DDD5E4D5E5D5E8D5EC +D5F4D5F5D5F7D5F9D600D601D604D608D610D611D613D614D615D61CD6200000 +C8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000D624D62DD638D639D63CD640D645D648D649D64BD64DD651D654D655D658 +D65CD667D669D670D671D674D683D685D68CD68DD690D694D69DD69FD6A1D6A8 +D6ACD6B0D6B9D6BBD6C4D6C5D6C8D6CCD6D1D6D4D6D7D6D9D6E0D6E4D6E8D6F0 +D6F5D6FCD6FDD700D704D711D718D719D71CD720D728D729D72BD72DD734D735 +D738D73CD744D747D749D750D751D754D756D757D758D759D760D761D763D765 +D769D76CD770D774D77CD77DD781D788D789D78CD790D798D799D79BD79D0000 +CA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004F3D4F73504750F952A053EF547554E556095AC15BB6668767B667B767EF +6B4C73C275C27A3C82DB8304885788888A368CC88DCF8EFB8FE699D5523B5374 +5404606A61646BBC73CF811A89BA89D295A34F83520A58BE597859E65E725E79 +61C763C0674667EC687F6F97764E770B78F57A087AFF7C21809D826E82718AEB +95934E6B559D66F76E3478A37AED845B8910874E97A852D8574E582A5D4C611F +61BE6221656267D16A446E1B751875B376E377B07D3A90AF945194529F950000 +CB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000053235CAC753280DB92409598525B580859DC5CA15D175EB75F3A5F4A6177 +6C5F757A75867CE07D737DB17F8C81548221859189418B1B92FC964D9C474ECB +4EF7500B51F1584F6137613E6168653969EA6F1175A5768676D67B8782A584CB +F90093A7958B55805BA25751F9017CB37FB991B5502853BB5C455DE862D2636E +64DA64E76E2070AC795B8DDD8E1EF902907D924592F84E7E4EF650655DFE5EFA +61066957817186548E4793759A2B4E5E5091677068405109528D52926AA20000 +CC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000077BC92109ED452AB602F8FF2504861A963ED64CA683C6A846FC0818889A1 +96945805727D72AC75047D797E6D80A9898B8B7490639D5162896C7A6F547D50 +7F3A8A23517C614A7B9D8B199257938C4EAC4FD3501E50BE510652C152CD537F +577058835E9A5F91617661AC64CE656C666F66BB66F468976D87708570F1749F +74A574CA75D9786C78EC7ADF7AF67D457D938015803F811B83968B668F159015 +93E1980398389A5A9BE84FC25553583A59515B635C4660B86212684268B00000 +CD +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000068E86EAA754C767878CE7A3D7CFB7E6B7E7C8A088AA18C3F968E9DC453E4 +53E9544A547156FA59D15B645C3B5EAB62F765376545657266A067AF69C16CBD +75FC7690777E7A3F7F94800380A1818F82E682FD83F085C1883188B48AA5F903 +8F9C932E96C798679AD89F1354ED659B66F2688F7A408C379D6056F057645D11 +660668B168CD6EFE7428889E9BE46C68F9049AA84F9B516C5171529F5B545DE5 +6050606D62F163A7653B73D97A7A86A38CA2978F4E325BE16208679C74DC0000 +CE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000079D183D38A878AB28DE8904E934B98465ED369E885FF90EDF90551A05B98 +5BEC616368FA6B3E704C742F74D87BA17F5083C589C08CAB95DC9928522E605D +62EC90024F8A5149532158D95EE366E06D38709A72C273D67B5080F1945B5366 +639B7F6B4E565080584A58DE602A612762D069D09B415B8F7D1880B18F5F4EA4 +50D154AC55AC5B0C5DA05DE7652A654E68216A4B72E1768E77EF7D5E7FF981A0 +854E86DF8F038F4E90CA99039A559BAB4E184E454E5D4EC74FF1517752FE0000 +CF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000534053E353E5548E5614577557A25BC75D875ED061FC62D8655167B867E9 +69CB6B506BC66BEC6C426E9D707872D77396740377BF77E97A767D7F800981FC +8205820A82DF88628B338CFC8EC0901190B1926492B699D29A459CE99DD79F9C +570B5C4083CA97A097AB9EB4541B7A987FA488D98ECD90E158005C4863987A9F +5BAE5F137A797AAE828E8EAC5026523852F85377570862F363726B0A6DC37737 +53A5735785688E7695D5673A6AC36F708A6D8ECC994BF90666776B788CB40000 +D0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009B3CF90753EB572D594E63C669FB73EA78457ABA7AC57CFE8475898F8D73 +903595A852FB574775477B6083CC921EF9086A58514B524B5287621F68D86975 +969950C552A452E461C365A4683969FF747E7B4B82B983EB89B28B398FD19949 +F9094ECA599764D266116A8E7434798179BD82A9887E887F895FF90A93264F0B +53CA602562716C727D1A7D664E98516277DC80AF4F014F0E5176518055DC5668 +573B57FA57FC5914594759935BC45C905D0E5DF15E7E5FCC628065D765E30000 +D1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000671E671F675E68CB68C46A5F6B3A6C236C7D6C826DC773987426742A7482 +74A37578757F788178EF794179477948797A7B957D007DBA7F888006802D808C +8A188B4F8C488D779321932498E299519A0E9A0F9A659E927DCA4F76540962EE +685491D155AB513AF90BF90C5A1C61E6F90D62CF62FFF90EF90FF910F911F912 +F91390A3F914F915F916F917F9188AFEF919F91AF91BF91C6696F91D7156F91E +F91F96E3F920634F637A5357F921678F69606E73F9227537F923F924F9250000 +D2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007D0DF926F927887256CA5A18F928F929F92AF92BF92C4E43F92D51675948 +67F08010F92E59735E74649A79CA5FF5606C62C8637B5BE75BD752AAF92F5974 +5F296012F930F931F9327459F933F934F935F936F937F93899D1F939F93AF93B +F93CF93DF93EF93FF940F941F942F9436FC3F944F94581BF8FB260F1F946F947 +8166F948F9495C3FF94AF94BF94CF94DF94EF94FF950F9515AE98A25677B7D10 +F952F953F954F955F956F95780FDF958F9595C3C6CE5533F6EBA591A83360000 +D3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004E394EB64F4655AE571858C75F5665B765E66A806BB56E4D77ED7AEF7C1E +7DDE86CB88929132935B64BB6FBE737A75B890545556574D61BA64D466C76DE1 +6E5B6F6D6FB975F0804381BD854189838AC78B5A931F6C9375537B548E0F905D +5510580258585E626207649E68E075767CD687B39EE84EE35788576E59275C0D +5CB15E365F85623464E173B381FA888B8CB8968A9EDB5B855FB760B350125200 +52305716583558575C0E5C605CF65D8B5EA65F9260BC63116389641768430000 +D4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000068F96AC26DD86E216ED46FE471FE76DC777979B17A3B840489A98CED8DF3 +8E4890039014905390FD934D967697DC6BD27006725872A27368776379BF7BE4 +7E9B8B8058A960C7656665FD66BE6C8C711E71C98C5A98134E6D7A814EDD51AC +51CD52D5540C61A76771685068DF6D1E6F7C75BC77B37AE580F484639285515C +6597675C679375D87AC78373F95A8C469017982D5C6F81C0829A9041906F920D +5F975D9D6A5971C8767B7B4985E48B0491279A30558761F6F95B76697F850000 +D5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000863F87BA88F8908FF95C6D1B70D973DE7D61843DF95D916A99F1F95E4E82 +53756B046B12703E721B862D9E1E524C8FA35D5064E5652C6B166FEB7C437E9C +85CD896489BD62C981D8881F5ECA67176D6A72FC7405746F878290DE4F865D0D +5FA0840A51B763A075654EAE5006516951C968816A117CAE7CB17CE7826F8AD2 +8F1B91CF4FB6513752F554425EEC616E623E65C56ADA6FFE792A85DC882395AD +9A629A6A9E979ECE529B66C66B77701D792B8F6297426190620065236F230000 +D6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000714974897DF4806F84EE8F269023934A51BD521752A36D0C70C888C25EC9 +65826BAE6FC27C3E73754EE44F3656F9F95F5CBA5DBA601C73B27B2D7F9A7FCE +8046901E923496F6974898189F614F8B6FA779AE91B496B752DEF960648864C4 +6AD36F5E7018721076E780018606865C8DEF8F0597329B6F9DFA9E75788C797F +7DA083C993049E7F9E938AD658DF5F046727702774CF7C60807E512170287262 +78CA8CC28CDA8CF496F74E8650DA5BEE5ED6659971CE764277AD804A84FC0000 +D7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000907C9B279F8D58D85A415C626A136DDA6F0F763B7D2F7E37851E893893E4 +964B528965D267F369B46D416E9C700F7409746075597624786B8B2C985E516D +622E96784F96502B5D196DEA7DB88F2A5F8B61446817F961968652D2808B51DC +51CC695E7A1C7DBE83F196754FDA52295398540F550E5C6560A7674E68A86D6C +728172F874067483F96275E27C6C7F797FB8838988CF88E191CC91D096E29BC9 +541D6F7E71D0749885FA8EAA96A39C579E9F67976DCB743381E89716782C0000 +D8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007ACB7B207C926469746A75F278BC78E899AC9B549EBB5BDE5E556F20819C +83AB90884E07534D5A295DD25F4E6162633D666966FC6EFF6F2B7063779E842C +8513883B8F1399459C3B551C62B9672B6CAB8309896A977A4EA159845FD85FD9 +671B7DB27F548292832B83BD8F1E909957CB59B95A925BD06627679A68856BCF +71647F758CB78CE390819B4581088C8A964C9A409EA55B5F6C13731B76F276DF +840C51AA8993514D519552C968C96C94770477207DBF7DEC97629EB56EC50000 +D9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000851151A5540D547D660E669D69276E9F76BF7791831784C2879F91699298 +9CF488824FAE519252DF59C65E3D61556478647966AE67D06A216BCD6BDB725F +72617441773877DB801782BC83058B008B288C8C67286C90726776EE77667A46 +9DA96B7F6C92592267268499536F589359995EDF63CF663467736E3A732B7AD7 +82D7932852D95DEB61AE61CB620A62C764AB65E069596B666BCB712173F7755D +7E46821E8302856A8AA38CBF97279D6158A89ED85011520E543B554F65870000 +DA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006C767D0A7D0B805E868A958096EF52FF6C95726954735A9A5C3E5D4B5F4C +5FAE672A68B669636E3C6E4477097C737F8E85878B0E8FF797619EF45CB760B6 +610D61AB654F65FB65FC6C116CEF739F73C97DE195945BC6871C8B10525D535A +62CD640F64B267346A386CCA73C0749E7B947C957E1B818A823685848FEB96F9 +99C14F34534A53CD53DB62CC642C6500659169C36CEE6F5873ED7554762276E4 +76FC78D078FB792C7D46822C87E08FD4981298EF52C362D464A56E246F510000 +DB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000767C8DCB91B192629AEE9B435023508D574A59A85C285E475F77623F653E +65B965C16609678B699C6EC278C57D2180AA8180822B82B384A1868C8A2A8B17 +90A696329F90500D4FF3F96357F95F9862DC6392676F6E43711976C380CC80DA +88F488F589198CE08F29914D966A4F2F4F705E1B67CF6822767D767E9B445E61 +6A0A716971D4756AF9647E41854385E998DC4F107B4F7F7095A551E15E0668B5 +6C3E6C4E6CDB72AF7BC483036CD5743A50FB528858C164D86A9774A776560000 +DC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000078A7861795E29739F965535E5F018B8A8FA88FAF908A522577A59C499F08 +4E19500251755C5B5E77661E663A67C468C570B3750175C579C97ADD8F279920 +9A084FDD582158315BF6666E6B656D116E7A6F7D73E4752B83E988DC89138B5C +8F144F0F50D55310535C5B935FA9670D798F8179832F8514890789868F398F3B +99A59C12672C4E764FF859495C015CEF5CF0636768D270FD71A2742B7E2B84EC +8702902292D29CF34E0D4ED84FEF50855256526F5426549057E0592B5A660000 +DD +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005B5A5B755BCC5E9CF9666276657765A76D6E6EA572367B267C3F7F368150 +8151819A8240829983A98A038CA08CE68CFB8D748DBA90E891DC961C964499D9 +9CE7531752065429567458B35954596E5FFF61A4626E66106C7E711A76C67C89 +7CDE7D1B82AC8CC196F0F9674F5B5F175F7F62C25D29670B68DA787C7E439D6C +4E1550995315532A535159835A625E8760B2618A624962796590678769A76BD4 +6BD66BD76BD86CB8F968743575FA7812789179D579D87C837DCB7FE180A50000 +DE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000813E81C283F2871A88E88AB98B6C8CBB9119975E98DB9F3B56AC5B2A5F6C +658C6AB36BAF6D5C6FF17015725D73AD8CA78CD3983B61916C3780589A014E4D +4E8B4E9B4ED54F3A4F3C4F7F4FDF50FF53F253F8550655E356DB58EB59625A11 +5BEB5BFA5C045DF35E2B5F99601D6368659C65AF67F667FB68AD6B7B6C996CD7 +6E23700973457802793E7940796079C17BE97D177D728086820D838E84D186C7 +88DF8A508A5E8B1D8CDC8D668FAD90AA98FC99DF9E9D524AF9696714F96A0000 +DF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005098522A5C7165636C5573CA7523759D7B97849C917897304E7764926BBA +715E85A94E09F96B674968EE6E17829F8518886B63F76F81921298AF4E0A50B7 +50CF511F554655AA56175B405C195CE05E385E8A5EA05EC260F368516A616E58 +723D724072C076F879657BB17FD488F389F48A738C618CDE971C585E74BD8CFD +55C7F96C7A617D2282727272751F7525F96D7B19588558FB5DBC5E8F5EB65F90 +60556292637F654D669166D966F8681668F27280745E7B6E7D6E7DD67F720000 +E0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000080E5821285AF897F8A93901D92E49ECD9F205915596D5E2D60DC66146673 +67906C506DC56F5F77F378A984C691CB932B4ED950CA514855845B0B5BA36247 +657E65CB6E32717D74017444748774BF766C79AA7DDA7E557FA8817A81B38239 +861A87EC8A758DE3907892919425994D9BAE53685C5169546CC46D296E2B820C +859B893B8A2D8AAA96EA9F67526166B96BB27E9687FE8D0D9583965D651D6D89 +71EEF96E57CE59D35BAC602760FA6210661F665F732973F976DB77017B6C0000 +E1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008056807281658AA091924E1652E26B726D177A057B397D30F96F8CB053EC +562F58515BB55C0F5C115DE2624063836414662D68B36CBC6D886EAF701F70A4 +71D27526758F758E76197B117BE07C2B7D207D39852C856D86078A34900D9061 +90B592B797F69A374FD75C6C675F6D917C9F7E8C8B168D16901F5B6B5DFD640D +84C0905C98E173875B8B609A677E6DDE8A1F8AA69001980C5237F9707051788E +9396887091D74FEE53D755FD56DA578258FD5AC25B885CAB5CC05E2561010000 +E2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000620D624B6388641C653665786A396B8A6C346D196F3171E772E973787407 +74B27626776179C07A577AEA7CB97D8F7DAC7E617F9E81298331849084DA85EA +88968AB08B908F3890429083916C929692B9968B96A796A896D6970098089996 +9AD39B1A53D4587E59195B705BBF6DD16F5A719F742174B9808583FD5DE15F87 +5FAA604265EC6812696F6A536B896D356DF373E376FE77AC7B4D7D148123821C +834084F485638A628AC49187931E980699B4620C88538FF092655D075D270000 +E3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005D69745F819D87686FD562FE7FD2893689724E1E4E5850E752DD5347627F +66077E698805965E4F8D5319563659CB5AA45C385C4E5C4D5E025F11604365BD +662F664267BE67F4731C77E2793A7FC5849484CD89968A668A698AE18C558C7A +57F45BD45F0F606F62ED690D6B966E5C71847BD287558B588EFE98DF98FE4F38 +4F814FE1547B5A205BB8613C65B0666871FC7533795E7D33814E81E3839885AA +85CE87038A0A8EAB8F9BF9718FC559315BA45BE660895BE95C0B5FC36C810000 +E4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000F9726DF1700B751A82AF8AF64EC05341F97396D96C0F4E9E4FC45152555E +5A255CE86211725982BD83AA86FE88598A1D963F96C599139D099D5D580A5CB3 +5DBD5E4460E1611563E16A026E2591029354984E9C109F775B895CB86309664F +6848773C96C1978D98549B9F65A18B018ECB95BC55355CA95DD65EB56697764C +83F495C758D362BC72CE9D284EF0592E600F663B6B8379E79D26539354C057C3 +5D16611B66D66DAF788D827E969897445384627C63966DB27E0A814B984D0000 +E5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006AFB7F4C9DAF9E1A4E5F503B51B6591C60F963F66930723A8036F97491CE +5F31F975F9767D0482E5846F84BB85E58E8DF9774F6FF978F97958E45B436059 +63DA6518656D6698F97A694A6A236D0B7001716C75D2760D79B37A70F97B7F8A +F97C8944F97D8B9391C0967DF97E990A57045FA165BC6F01760079A68A9E99AD +9B5A9F6C510461B662916A8D81C6504358305F6671098A008AFA5B7C86164FFA +513C56B4594463A96DF95DAA696D51864E884F59F97FF980F9815982F9820000 +E6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000F9836B5F6C5DF98474B57916F9858207824583398F3F8F5DF9869918F987 +F988F9894EA6F98A57DF5F796613F98BF98C75AB7E798B6FF98D90069A5B56A5 +582759F85A1F5BB4F98E5EF6F98FF9906350633BF991693D6C876CBF6D8E6D93 +6DF56F14F99270DF71367159F99371C371D5F994784F786FF9957B757DE3F996 +7E2FF997884D8EDFF998F999F99A925BF99B9CF6F99CF99DF99E60856D85F99F +71B1F9A0F9A195B153ADF9A2F9A3F9A467D3F9A5708E71307430827682D20000 +E7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000F9A695BB9AE59E7D66C4F9A771C18449F9A8F9A9584BF9AAF9AB5DB85F71 +F9AC6620668E697969AE6C386CF36E366F416FDA701B702F715071DF7370F9AD +745BF9AE74D476C87A4E7E93F9AFF9B082F18A608FCEF9B19348F9B29719F9B3 +F9B44E42502AF9B5520853E166F36C6D6FCA730A777F7A6282AE85DD8602F9B6 +88D48A638B7D8C6BF9B792B3F9B8971398104E944F0D4FC950B25348543E5433 +55DA586258BA59675A1B5BE4609FF9B961CA655665FF666468A76C5A6FB30000 +E8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000070CF71AC73527B7D87088AA49C329F075C4B6C8373447389923A6EAB7465 +761F7A697E15860A514058C564C174EE751576707FC1909596CD99546E2674E6 +7AA97AAA81E586D987788A1B5A495B8C5B9B68A169006D6373A97413742C7897 +7DE97FEB81188155839E8C4C962E981166F05F8065FA67896C6A738B502D5A03 +6B6A77EE59165D6C5DCD7325754FF9BAF9BB50E551F9582F592D599659DA5BE5 +F9BCF9BD5DA262D76416649364FEF9BE66DCF9BF6A48F9C071FF7464F9C10000 +E9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007A887AAF7E477E5E80008170F9C287EF89818B209059F9C390809952617E +6B326D747E1F89258FB14FD150AD519752C757C758895BB95EB8614269956D8C +6E676EB6719474627528752C8073833884C98E0A939493DEF9C44E8E4F515076 +512A53C853CB53F35B875BD35C24611A618265F4725B7397744076C279507991 +79B97D067FBD828B85D5865E8FC2904790F591EA968596E896E952D65F6765ED +6631682F715C7A3690C1980A4E91F9C56A526B9E6F907189801882B885530000 +EA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000904B969596F297FB851A9B314E90718A96C45143539F54E15713571257A3 +5A9B5AC45BC36028613F63F46C856D396E726E907230733F745782D188818F45 +9060F9C6966298589D1B67088D8A925E4F4D504950DE5371570D59D45A015C09 +617066906E2D7232744B7DEF80C3840E8466853F875F885B89188B02905597CB +9B4F4E734F915112516AF9C7552F55A95B7A5BA55E7C5E7D5EBE60A060DF6108 +610963C465386709F9C867D467DAF9C9696169626CB96D27F9CA6E38F9CB0000 +EB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006FE173367337F9CC745C7531F9CD7652F9CEF9CF7DAD81FE843888D58A98 +8ADB8AED8E308E42904A903E907A914991C9936EF9D0F9D15809F9D26BD38089 +80B2F9D3F9D45141596B5C39F9D5F9D66F6473A780E48D07F9D79217958FF9D8 +F9D9F9DAF9DB807F620E701C7D68878DF9DC57A0606961476BB78ABE928096B1 +4E59541F6DEB852D967097F398EE63D66CE3909151DD61C981BA9DF94F9D501A +51005B9C610F61FF64EC69056BC5759177E37FA98264858F87FB88638ABC0000 +EC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008B7091AB4E8C4EE54F0AF9DDF9DE593759E8F9DF5DF25F1B5F5B6021F9E0 +F9E1F9E2F9E3723E73E5F9E4757075CDF9E579FBF9E6800C8033808482E18351 +F9E7F9E88CBD8CB39087F9E9F9EA98F4990CF9EBF9EC703776CA7FCA7FCC7FFC +8B1A4EBA4EC152035370F9ED54BD56E059FB5BC55F155FCD6E6EF9EEF9EF7D6A +8335F9F086938A8DF9F1976D9777F9F2F9F34E004F5A4F7E58F965E56EA29038 +93B099B94EFB58EC598A59D96041F9F4F9F57A14F9F6834F8CC3516553440000 +ED +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000F9F7F9F8F9F94ECD52695B5582BF4ED4523A54A859C959FF5B505B575B5C +606361486ECB7099716E738674F775B578C17D2B800581EA8328851785C98AEE +8CC796CC4F5C52FA56BC65AB6628707C70B872357DBD828D914C96C09D725B71 +68E76B986F7A76DE5C9166AB6F5B7BB47C2A883696DC4E084ED75320583458BB +58EF596C5C075E335E845F35638C66B267566A1F6AA36B0C6F3F7246F9FA7350 +748B7AE07CA7817881DF81E7838A846C8523859485CF88DD8D1391AC95770000 +EE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000969C518D54C957285BB0624D6750683D68936E3D6ED3707D7E2188C18CA1 +8F099F4B9F4E722D7B8F8ACD931A4F474F4E5132548059D05E9562B56775696E +6A176CAE6E1A72D9732A75BD7BB87D3582E783F9845785F78A5B8CAF8E879019 +90B896CE9F5F52E3540A5AE15BC2645865756EF472C4F9FB76847A4D7B1B7C4D +7E3E7FDF837B8B2B8CCA8D648DE18E5F8FEA8FF9906993D14F434F7A50B35168 +5178524D526A5861587C59605C085C555EDB609B623068136BBF6C086FB10000 +EF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000714E742075307538755176727B4C7B8B7BAD7BC67E8F8A6E8F3E8F49923F +92939322942B96FB985A986B991E5207622A62986D5976647ACA7BC07D765360 +5CBE5E976F3870B97C9897119B8E9EDE63A5647A87764E014E954EAD505C5075 +544859C35B9A5E405EAD5EF75F8160C5633A653F657465CC6676667867FE6968 +6A896B636C406DC06DE86E1F6E5E701E70A1738E73FD753A775B7887798E7A0B +7A7D7CBE7D8E82478A028AEA8C9E912D914A91D8926692CC9320970697560000 +F0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000975C98029F0E52365291557C58245E1D5F1F608C63D068AF6FDF796D7B2C +81CD85BA88FD8AF88E44918D9664969B973D984C9F4A4FCE514651CB52A95632 +5F145F6B63AA64CD65E9664166FA66F9671D689D68D769FD6F156F6E716771E5 +722A74AA773A7956795A79DF7A207A957C977CDF7D447E70808785FB86A48A54 +8ABF8D998E819020906D91E3963B96D59CE565CF7C078DB393C35B585C0A5352 +62D9731D50275B975F9E60B0616B68D56DD9742E7A2E7D427D9C7E31816B0000 +F1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008E2A8E35937E94184F5057505DE65EA7632B7F6A4E3B4F4F4F8F505A59DD +80C4546A546855FE594F5B995DDE5EDA665D673167F1682A6CE86D326E4A6F8D +70B773E075877C4C7D027D2C7DA2821F86DB8A3B8A858D708E8A8F339031914E +9152944499D07AF97CA54FCA510151C657C85BEF5CFB66596A3D6D5A6E966FEC +710C756F7AE388229021907596CB99FF83014E2D4EF2884691CD537D6ADB696B +6C41847A589E618E66FE62EF70DD751175C77E5284B88B498D084E4B53EA0000 +F2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000054AB573057405FD763016307646F652F65E8667A679D67B36B626C606C9A +6F2C77E57825794979577D1980A2810281F3829D82B787188A8CF9FC8D048DBE +907276F47A197A377E548077550755D45875632F64226649664B686D699B6B84 +6D256EB173CD746874A1755B75B976E1771E778B79E67E097E1D81FB852F8897 +8A3A8CD18EEB8FB0903293AD9663967397074F8453F159EA5AC95E19684E74C6 +75BE79E97A9281A386ED8CEA8DCC8FED659F6715F9FD57F76F577DDD8F2F0000 +F3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000093F696C65FB561F26F844E144F98501F53C955DF5D6F5DEE6B216B6478CB +7B9AF9FE8E498ECA906E6349643E77407A84932F947F9F6A64B06FAF71E674A8 +74DA7AC47C127E827CB27E988B9A8D0A947D9910994C52395BDF64E6672D7D2E +50ED53C358796158615961FA65AC7AD98B928B9650095021527555315A3C5EE0 +5F706134655E660C663666A269CD6EC46F32731676217A938139825983D684BC +50B557F05BC05BE85F6963A178267DB583DC852191C791F5518A67F57B560000 +F4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008CAC51C459BB60BD8655501CF9FF52545C3A617D621A62D364F265A56ECC +7620810A8E60965F96BB4EDF5343559859295DDD64C56CC96DFA73947A7F821B +85A68CE48E10907791E795E1962197C651F854F255865FB964A46F887DB48F1F +8F4D943550C95C166CBE6DFB751B77BB7C3D7C648A798AC2581E59BE5E166377 +7252758A776B8ADC8CBC8F125EF366746DF8807D83C18ACB97519BD6FA005243 +66FF6D956EEF7DE08AE6902E905E9AD4521D527F54E86194628462DB68A20000 +F5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006912695A6A3570927126785D7901790E79D27A0D8096827882D583498549 +8C828D859162918B91AE4FC356D171ED77D7870089F85BF85FD6675190A853E2 +585A5BF560A4618164607E3D80708525928364AE50AC5D146700589C62BD63A8 +690E69786A1E6E6B76BA79CB82BB84298ACF8DA88FFD9112914B919C93109318 +939A96DB9A369C0D4E11755C795D7AFA7B517BC97E2E84C48E598E748EF89010 +6625693F744351FA672E9EDC51455FE06C9687F2885D887760B481B584030000 +F6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008D0553D6543956345A365C31708A7FE0805A810681ED8DA391899A5F9DF2 +50744EC453A060FB6E2C5C644F88502455E45CD95E5F606568946CBB6DC471BE +75D475F476617A1A7A497DC77DFB7F6E81F486A98F1C96C999B39F52524752C5 +98ED89AA4E0367D26F064FB55BE267956C886D78741B782791DD937C87C479E4 +7A315FEB4ED654A4553E58AE59A560F0625362D6673669558235964099B199DD +502C53535544577CFA016258FA0264E2666B67DD6FC16FEF742274388A170000 +F7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000094385451560657665F48619A6B4E705870AD7DBB8A95596A812B63A27708 +803D8CAA5854642D69BB5B955E116E6FFA038569514C53F0592A6020614B6B86 +6C706CF07B1E80CE82D48DC690B098B1FA0464C76FA464916504514E5410571F +8A0E615F6876FA0575DB7B527D71901A580669CC817F892A9000983950785957 +59AC6295900F9B2A615D727995D657615A465DF4628A64AD64FA67776CE26D3E +722C743678347F7782AD8DDB981752245742677F724874E38CA98FA692110000 +F8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000962A516B53ED634C4F695504609665576C9B6D7F724C72FD7A1789878C9D +5F6D6F8E70F981A8610E4FBF504F624172477BC77DE87FE9904D97AD9A198CB6 +576A5E7367B0840D8A5554205B165E635EE25F0A658380BA853D9589965B4F48 +5305530D530F548654FA57035E036016629B62B16355FA066CE16D6675B17832 +80DE812F82DE846184B2888D8912900B92EA98FD9B915E4566B466DD70117206 +FA074FF5527D5F6A615367536A196F0274E2796888688C7998C798C49A430000 +F9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000054C17A1F69538AF78C4A98A899AE5F7C62AB75B276AE88AB907F96425339 +5F3C5FC56CCC73CC7562758B7B4682FE999D4E4F903C4E0B4F5553A6590F5EC8 +66306CB37455837787668CC09050971E9C1558D15B7886508B149DB45BD26068 +608D65F16C576F226FA3701A7F557FF095919592965097D352728F4451FD542B +54B85563558A6ABB6DB57DD88266929C96779E79540854C876D286E495A495D4 +965C4EA24F0959EE5AE65DF760526297676D68416C866E2F7F38809B822A0000 +FA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000FA08FA0998054EA5505554B35793595A5B695BB361C869776D77702387F9 +89E38A728AE7908299ED9AB852BE683850165E78674F8347884C4EAB541156AE +73E6911597FF9909995799995653589F865B8A3161B26AF6737B8ED26B4796AA +9A57595572008D6B97694FD45CF45F2661F8665B6CEB70AB738473B973FE7729 +774D7D437D627E2382378852FA0A8CE29249986F5B517A74884098015ACC4FE0 +5354593E5CFD633E6D7972F98105810783A292CF98304EA851445211578B0000 +FB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005F626CC26ECE7005705070AF719273E97469834A87A28861900890A293A3 +99A8516E5F5760E0616766B385598E4A91AF978B4E4E4E92547C58D558FA597D +5CB55F2762366248660A66676BEB6D696DCF6E566EF86F946FE06FE9705D72D0 +7425745A74E07693795C7CCA7E1E80E182A6846B84BF864E865F87748B778C6A +93AC9800986560D1621691775A5A660F6DF76E3E743F9B425FFD60DA7B0F54C4 +5F186C5E6CD36D2A70D87D0586798A0C9D3B5316548C5B056A3A706B75750000 +FC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000798D79BE82B183EF8A718B418CA89774FA0B64F4652B78BA78BB7A6B4E38 +559A59505BA65E7B60A363DB6B61666568536E19716574B07D0890849A699C25 +6D3B6ED1733E8C4195CA51F05E4C5FA8604D60F66130614C6643664469A56CC1 +6E5F6EC96F62714C749C76877BC17C27835287579051968D9EC3532F56DE5EFB +5F8A6062609461F7666667036A9C6DEE6FAE7070736A7E6A81BE833486D48AA8 +8CC4528373725B966A6B940454EE56865B5D6548658566C9689F6D8D6DC60000 +FD +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000723B80B491759A4D4FAF5019539A540E543C558955C55E3F5F8C673D7166 +73DD900552DB52F3586458CE7104718F71FB85B08A13668885A855A76684714A +8431534955996BC15F595FBD63EE668971478AF18F1D9EBE4F11643A70CB7566 +866760648B4E9DF8514751F653086D3680F89ED166156B23709875D554035C79 +7D078A166B206B3D6B46543860706D3D7FD5820850D651DE559C566B56CD59EC +5B095E0C619961986231665E66E6719971B971BA72A779A77A007FB28A700000 diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/gb12345.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/gb12345.enc new file mode 100644 index 00000000..3f3f4d25 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/gb12345.enc @@ -0,0 +1,1414 @@ +# Encoding file: gb12345, double-byte +D +233F 0 83 +21 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000030003001300230FB02C902C700A8300330052015FF5E2225202620182019 +201C201D3014301530083009300A300B300C300D300E300F3016301730103011 +00B100D700F72236222722282211220F222A222922082237221A22A522252220 +23122299222B222E2261224C2248223D221D2260226E226F22642265221E2235 +22342642264000B0203220332103FF0400A4FFE0FFE1203000A7211626062605 +25CB25CF25CE25C725C625A125A025B325B2203B219221902191219330130000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +22 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000024882489248A248B248C248D248E248F2490249124922493249424952496 +249724982499249A249B247424752476247724782479247A247B247C247D247E +247F248024812482248324842485248624872460246124622463246424652466 +2467246824690000000032203221322232233224322532263227322832290000 +00002160216121622163216421652166216721682169216A216B000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +23 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000FF01FF02FF03FFE5FF05FF06FF07FF08FF09FF0AFF0BFF0CFF0DFF0EFF0F +FF10FF11FF12FF13FF14FF15FF16FF17FF18FF19FF1AFF1BFF1CFF1DFF1EFF1F +FF20FF21FF22FF23FF24FF25FF26FF27FF28FF29FF2AFF2BFF2CFF2DFF2EFF2F +FF30FF31FF32FF33FF34FF35FF36FF37FF38FF39FF3AFF3BFF3CFF3DFF3EFF3F +FF40FF41FF42FF43FF44FF45FF46FF47FF48FF49FF4AFF4BFF4CFF4DFF4EFF4F +FF50FF51FF52FF53FF54FF55FF56FF57FF58FF59FF5AFF5BFF5CFF5DFFE30000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +24 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000304130423043304430453046304730483049304A304B304C304D304E304F +3050305130523053305430553056305730583059305A305B305C305D305E305F +3060306130623063306430653066306730683069306A306B306C306D306E306F +3070307130723073307430753076307730783079307A307B307C307D307E307F +3080308130823083308430853086308730883089308A308B308C308D308E308F +3090309130923093000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +25 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000030A130A230A330A430A530A630A730A830A930AA30AB30AC30AD30AE30AF +30B030B130B230B330B430B530B630B730B830B930BA30BB30BC30BD30BE30BF +30C030C130C230C330C430C530C630C730C830C930CA30CB30CC30CD30CE30CF +30D030D130D230D330D430D530D630D730D830D930DA30DB30DC30DD30DE30DF +30E030E130E230E330E430E530E630E730E830E930EA30EB30EC30ED30EE30EF +30F030F130F230F330F430F530F6000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +26 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000039103920393039403950396039703980399039A039B039C039D039E039F +03A003A103A303A403A503A603A703A803A90000000000000000000000000000 +000003B103B203B303B403B503B603B703B803B903BA03BB03BC03BD03BE03BF +03C003C103C303C403C503C603C703C803C90000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +27 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000004100411041204130414041504010416041704180419041A041B041C041D +041E041F0420042104220423042404250426042704280429042A042B042C042D +042E042F00000000000000000000000000000000000000000000000000000000 +000004300431043204330434043504510436043704380439043A043B043C043D +043E043F0440044104420443044404450446044704480449044A044B044C044D +044E044F00000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +28 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000010100E101CE00E0011300E9011B00E8012B00ED01D000EC014D00F301D2 +00F2016B00FA01D400F901D601D801DA01DC00FC00EA00000000000000000000 +0000000000000000000031053106310731083109310A310B310C310D310E310F +3110311131123113311431153116311731183119311A311B311C311D311E311F +3120312131223123312431253126312731283129000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +29 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00000000000000002500250125022503250425052506250725082509250A250B +250C250D250E250F2510251125122513251425152516251725182519251A251B +251C251D251E251F2520252125222523252425252526252725282529252A252B +252C252D252E252F2530253125322533253425352536253725382539253A253B +253C253D253E253F2540254125422543254425452546254725482549254A254B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +30 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000554A963F57C3632854CE550954C0769A764C85F977EE827E7919611B9698 +978D6C285B894FFA630966975CB880FA68489AAF660276CE51F9655671AC7FF1 +895650B2596561CA6FB382AD634C625253ED54277B06516B75A45DF462D48DCB +9776628A801958E997387F777238767D67CF767E64FA4F70655762DC7A176591 +73ED642C6273822C9812677F7248626E62CC4F3474E3534A8FA67D4690A65E6B +6886699C81807D8168D278C5868C938A508D8B1782DE80DE5305891252650000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +31 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000858496F94FDD582198FD5BF662B1583166B48C799B917206676F789160B2 +535153178F2980CC8C9D92C7500D72FD5099618A711988AB595482EF672C7B28 +5D297DB3752D6CF58E668FF8903C9F3B6BD491197B465F7C78A784D6853D7562 +65836BD65E635E8775F99589655D5F0A5FC58F9F58C181C2907F965B97AD908A +7DE88CB662414FBF8B8A535E8FA88FAF8FAE904D6A195F6A819888689C49618B +522B765F5F6C658C70156FF18CD364EF517551B067C44E1979C9990570B30000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +32 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000075C55E7673BB83E064AD64A592626CE2535A52C3640F92517B944F2F5E1B +82368116818A6E246CCA99C16355535C54FA88DC57E04E0D5E036B657C3F90E8 +601664E6731C88C16750624D8CA1776C8E2991C75F6983DC8521991053C38836 +6B98615A615871E684BC825950096EC485CF64CD7CD969FD66F9834953A07B56 +5074518C6E2C5C648E6D63D253C9832C833667E578B4643D5BDF5C945DEE8A6B +62C667F48C7A6519647B87EC995E8B927E8F93DF752395E1986B660C73160000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +33 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000583456175E389577511F81785EE0655E66A2553150218D8562849214671D +56326F6E5DE2543570928ECA626F64A463A35FB96F8890F481E38FB058756668 +5FF16C8996738D81896F64917A3157CE6A59621054484E587A0B61F26F848AA0 +627F901E9A0179E4540375F4630153196C6090725F1B99B3803B9F524F885C3A +8D647FC565A571BE5145885D87F25D075BF562BD916C75878E8A7A2061017C4C +4EC77DA27785919C81ED521D51FA6A7153A88E8792E496DB6EC19664695A0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +34 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000790E513277D7641089F8865563E35DDD7A7F693D50B3823955984E327621 +7A975E625E8A95D652755439708A6376931857826625693F918755076DF37D14 +882262337DBD75B5832878C196CC8FAD614874F78A5E6B64523A8CDC6B218070 +847156F153065F9E53E251D17C97918B7C074FC38EA57BE17AC464675D1450AC +810676017CB96DEC7FE067515B585BF878CB64AE641363AA632B932F642D9054 +7B5476296253592754466B7950A362345E366B864EE38CB8888B5F85902E0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +35 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006020803D64D44E3955AE913264A381BD65E66C2E4F46619A6DE18A955F48 +86CB757664CB9EE885696A94520064178E4850125CF679B15C0E52307A3B60BC +905376D75FB75F9776848E6C71C8767B7B4977AA51F3912758244F4E6EF48FEA +65757B1B72C46ECC7FDF5AE162B55E95573084827B2C5E1D5F1F905E7DE0985B +63826EC778989EDE5178975B588A96FB4F4375385E9760E659606FB16BBF7889 +53FC96D551CB52016389540A91E38ABF8DCC7239789F87768FED8ADC758A0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +36 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004E0176EF53EE91D898029F0E93205B9A8A024E22677151AC846361C252D5 +68DF4F97606B51CD6D1E515C62969B2596618C46901775D890FD77636BD272A2 +73688B80583577798CED675C934D809A5EA66E2159927AEF77ED935B6BB565B7 +7DDE58065151968A5C0D58A956788E726566981356E4920D76FE9041638754C6 +591A596A579B8EB267358DFA8235524160F058AE86FE5CE89D5D4FC4984D8A1B +5A2560E15384627C904F910299136069800C51528033723E990C6D314E8C0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +37 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008CB3767C7F707B4F4F104E4F95A56CD573D085E95E06756A7FFB6A0A792C +91E97E4151E1716953CD8FD47BC48CA972AF98EF6CDB574A82B365B980AA623F +963259A84EFF8A2A7D21653E83F2975E556198DB80A5532A8AB9542080BA5EE2 +6CB88CBB82AC915A54296C1B52067D1B58B3711A6C7E7C89596E4EFD5FFF61A4 +7CDE8C505C01695387025CF092D298A8760B70FD902299AE7E2B8AF759499CF3 +4F5B5426592B6577819A5B75627662C28F3B5E456C1F7B264F0F4FD8670D0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +38 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006D6E6DAA798F88B15F17752B64AB8F144FEF91DC65A7812F81515E9C8150 +8D74526F89868CE65FA950854ED8961C723681798CA05BCC8A0396445A667E1B +54905676560E8A7265396982922384CB6E895E797518674667D17AFF809D8D95 +611F79C665628D1B5CA1525B92FC7F38809B7DB15D176E2F67607BD9768B9AD8 +818F7F947CD5641E93AC7A3F544A54E56B4C64F162089D3F80F3759952729769 +845B683C86E495A39694927B500B54047D6668398DDF801566F45E9A7FB90000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +39 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000057C2803F68975DE5653B529F606D9F944F9B8EAC516C5BAB5F13978F6C5E +62F18CA25171920E52FE6E9D82DF72D757A269CB8CFC591F8F9C83C754957B8D +4F306CBD5B6459D19F1353E488319AA88C3780A16545986756FA96C7522E74DC +526E5BE1630289024E5662D0602A68FA95DC5B9851A089C07BA199287F506163 +704C8CAB51495EE3901B7470898F572D78456B789F9C95A88ECC9B3C8A6D7678 +68426AC38DEA8CB4528A8F256EDA68CD934B90ED570B679C88F9904E54C80000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009AB85B696D776C264EA55BB399ED916361A890AF97D3542B6DB55BD251FD +558A7F557FF064BC634D65F161BE608D710A6C576F22592F676D822A58D5568E +8C6A6BEB90DD597D8017865F6D695475559D837783CF683879BE548C4F555408 +76D28C8995A16CB36DB88D6B89109DB48CC0563F9ED175D55F8872E0606854FC +4EA86A2A886160528F5F54C470D886799D3B6D2A5B8F5F187D0555894FAF7334 +543C539A50195F8C547C4E4E5FFD745A58FA846B80E1877472D07CCA6E560000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005F27864E552C8B774E926EEC623782B1562983EF733E6ED1756B52835316 +8A7169D05F8A61F76DEE58DE6B6174B0685390847DE963DB60A3559A76138C62 +71656E195BA65E7B8352614C9EC478FA87577C27768751F060F6714C66435E4C +604D8B0A707063EE8F1D5FBD606286D456DE6BC160946167534960E066668CC4 +7A62670371F4532F8AF18AA87E6A8477660F5A5A9B426E3E6DF78C416D3B4F19 +706B7372621660D1970D8CA8798D64CA573E57FA6A5F75787A3D7A4D7B950000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3C +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000808C99518FF96FC08B4F9DC459EC7E3E7DDD5409697568D88F2F7C4D96C6 +53CA602575BE6C7253735AC97D1A64E05E7E810A5DF1858A628051805B634F0E +796D529160B86FDF5BC45BC28A088A1865E25FCC969B59937E7C7D00560967B7 +593E4F735BB652A083A298308CC87532924050477A3C50F967B699D55AC16BB2 +76E358055C167B8B9593714E517C80A9827159787DD87E6D6AA267EC78B19E7C +63C064BF7C215109526A51CF85A66ABB94528E108CE4898B93757BAD4EF60000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000050658266528D991E6F386FFA6F975EFA50F559DC5C076F3F6C5F75868523 +69F3596C8B1B532091AC964D854969127901712681A04EA490CA6F869A555B0C +56BC652A927877EF50E5811A72E189D299037E737D5E527F655991758F4E8F03 +53EB7A9663ED63A5768679F88857968E622A52AB7BC0685467706377776B7AED +6F547D5089E359D0621285C982A5754C501F4ECB75A58AA15C4A5DFE7B4B65A4 +91D14ECA6D25895F7DCA932650C58B3990329773664979818FD171FC6D780000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000076E152C1834651628396775B66769BE84EAC9A5A7CBE7CB37D934E958B66 +666F9838975C5883656C93E15F9175D997567ADF7AF651C870AF7A9863EA7A76 +7CFE739697ED4E4570784E5D915253A96551820A81FC8205548E5C31759A97A0 +62D872D975BD5C4599D283CA5C40548077E982096CAE805A62D264DA5DE85177 +8DDD8E1E92F84FF153E561FC70AC528763509D515A1F5026773753777D796485 +652B628963985014723589BA51B38A237D76574783CC921E8ECD541B5CFB0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004FCA7AE36D5A90E199FF55805496536154AF958B63E9697751F16168520A +582A52D8574E780D770B5EB761777CE0625B62974EA27095800362F770E49760 +577782DB67EF68F578D5984679D16BBB54B353EF6E34514B523B5BA28AB280AF +554358BE61C75751542D7A7A60505B5463A7647353E362635BC767AF54ED7A9F +82E691775EAB89328A8757AE630E8DE880EF584A7B7751085FEB5BEC6B3E5321 +7B5072C268467926773666E051B5866776D45DCB7ABA8475594E9B4150800000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +40 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000994B61276F7057646606634656F062EC64F45ED395CA578362C95587881F +81D88FA35566840A4F868CF485CD5A6A6B0465147C4395CC862D703E8B95652C +89BD61F67E9C721B6FEB7405699472FC5ECA90CE67176D6A648852DE72628001 +4F6C59E5916A70D96F8752D26A0296F79433857E78CA7D2F512158D864C2808B +985E6CEA68F1695E51B7539868A872819ECE7C6C72F896E270557406674E88CF +9BC979AE83898354540F68179E9753B252F5792B6B77522950884F8B4FD00000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +41 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000075E27ACB7C92701D96B8529B748354E95006806F84EE9023942E5EC96190 +6F237C3E658281C993C8620071497DF47CE751C968817CB1826F51698F1B91CF +667E4EAE8AD264A9804A50DA764271CE5BE5907C6F664E86648294105ED66599 +521788C270C852A373757433679778F7971681E891309C576DCB51DB8CC3541D +62CE73B283F196F69F6192344F367F9A51CC974896755DBA981853E64EE46E9C +740969B4786B993E7559528976246D4167F3516D9F8D807E56A87C607ABF0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +42 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000968658DF650F96B46A135A41645F7C0D6F0F964B860676E798715EEC7210 +64C46EF7865C9B6F9E93788C97328DEF8CC29E7F6F5E798493329678622E9A62 +541592C14FA365C55C655C627E37616E6C2F5F8B73876FFE7DD15DD265235B7F +706453754E8263A0756563848F2A502B4F966DEA7DB88AD6863F87BA7F85908F +947C7C6E9A3E88F8843D6D1B99F17D615ABD9EBB746A78BC879E99AC99E1561B +55CE57CB8CB79EA58CE390818109779E9945883B6EFF851366FC61626F2B0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +43 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008B3E8292832B76F26C135FD983BD732B830593286BDB77DB925A536F8302 +51925E3D8C8C8CBF9EBD73AB679A68859176970971646CA177095A9293826BCF +7F8E66275BD059B95A9A958060B65011840C84996AAC76DF9333731B59225B5F +772F919A97617CDC8FF78B0E5F4C7C7379D889936CCC871C5BC65E4268C97720 +7DBF5195514D52C95A297DEC976282D763CF778485D079D26E3A5EDF59998511 +6EC56C1162BF76BF654F61AB95A9660E879F9CF49298540D547D8B2C64780000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +44 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000647986116A21819C78E864699B5462B9672B83AB58A89ED86CAB6F205BDE +964C8B00725F67D062C77261755D59C66BCD589366AE5E5552DF6155672876EE +776672677A4662FF54EA5450920990A35A1C7D0D6C164E435976801059485357 +753796E356CA6493816660F19B276DD65462991251855AE980FD59AE9713502A +6CE55C3C64EC4F60533F81A990066EBA852B62C85E7478BE6506637B5FF55A18 +91C09CE55C3F634F80765B7D5699947793B36D8560A86AB8737051DD5BE70000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +45 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000064F06FD8725B626D92157D1081BF6FC38FB25F04597452AA601259736696 +86507627632A61E67CEF8AFE54E66B509DD76BC685D5561450766F1A556A8DB4 +722C5E156015743662CD6392724C5F986E436D3E65006F5876E478D076FC7554 +522453DB4E539F9065C1802A80D6629B5486522870AE888D8DD16CE1547880DA +57F988F48CE0966A914D4F696C9B567476C6783062A870F96F8E5F6D84EC68DA +787C7BF781A8670B9D6C636778B0576F78129739627962AB528874356BD70000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +46 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005564813E75B276AE533975DE50FB5C418B6C7BC7504F72479A1998C46F02 +74E27968648777A562FC983B8CA754C180584E52576A860B840D5E73619174F6 +8A555C4F57616F5198175A4678349B448FEB7C95525664B292EA50D583868461 +83E984B257D46A385703666E6D668B5C66DD7011671F6B3A68F2621A59BB4E03 +51C46F0667D26C8F517668CB59476B6775665D0E81CD9F4A65D7794879419A0E +8D778C484E5E4F0155535951780C56686C238FC468C46C7D6CE38A1663900000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +47 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000060706D3D727D626691FA925B534390777C3D4EDF8B194E7E9ED493229257 +524D6F5B90636DFA8B7458795D4C6B206B4969CD55C681547F8C58BB85945F3A +64366A47936C657260846A4B77A755AC50D15DE7979864AC7FF95CED4FCF7AC5 +520783044E14602F7ACA6B3D4FB589AA79E6743452E482B964D279BD5BE26C81 +97528F156C2B50BE537F6E0564CE66746C3060C598038ACB617674CA7AAE79CB +4E1890B174036C4256DA914B6CC58DA8534086C666F28EC05C489A456E200000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +48 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000053D65A369F728DA353BB570898746B0A919B6CC9516875CA62F372AC5238 +52F87F3A7094763853749D7269B778BA96C088D97FA4713671C3518967D374E4 +58E4651856B78B93995264FE7E5E60F971B158EC4EC14EBA5FCD97CC4EFB8A8D +5203598A7D0962544ECD65E5620E833884C969AE878D71946EB65BB97D685197 +63C967D480898339881551125B7A59828FB14E736C5D516589258EDF962E854A +745E92ED958F6F6482E55F316492705185A9816E9C13585E8CFD4E0953C10000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +49 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000050986563685155D355AA64149A3763835AC2745F82726F8068EE50E7838E +78026BBA52396C997D1750BB5565715E7BE966EC73CA82EB67495C715220717D +886B9583965D64C58D0D81B355846C5562477E55589250B755468CDE664C4E0A +5C1A88F368A2634E7A0D71D2828D52FA97F65C1154E890B57D3959628CD286C7 +820C63688D66651D5C0461FE6D89793E8A2D78377533547B4F388EAB6DF15A20 +7D33795E6C885BE95B38751A814E614E6EF28072751F7525727253477E690000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000770176DB526952DD80565E2B5931734565BD6FD58A695C388671534177F3 +62FE66424EC098DF87555BE68B5853F277E24F7F5C4E99DB59CB5F0F793A58EB +4E1667FF4E8B62ED8A93901D52E2662F55DC566C90694ED54F8D91CB98FE6C0F +5E0260435BA489968A666536624B99965B8858FD6388552E53D776267378852C +6A1E68B36B8A62928F3853D482126DD1758F66F88D165B70719F85AF669166D9 +7F7287009ECD9F205C6C88538FF06A39675F620D7AEA58855EB665786F310000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000060555237800D6454887075295E25681362F4971C96D9723D8AB06C347761 +7A0E542E77AC9806821C8AAC78A96714720D65AF64955636601D79C153F87D72 +6B7B80865BFA55E356DB4F3A4F3C98FC5DF39B068073616B980C90015B8B8A1F +8AA6641C825864FB55FD860791654FD77D20901F7C9F50F358516EAF5BBF8A34 +80859178849C7B9796D6968B96A87D8F9AD3788E6B727A57904296A7795F5B6B +640D7B0B84D168AD55067E2E74637D2293966240584C4ED65B83597958540000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4C +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000737A64BB8E4B8E0F80CE82D462AC81FA6CF0915E592A614B6C70574D6524 +8CAA7671705858C76A8075F06F6D8B5A8AC757666BEF889278B363A2560670AD +6E6F5858642A580268E0819B55107CD650188EBA6DCC8D9F71D9638F6FE46ED4 +7E278404684390036DD896768A0E5957727985E49A3075BC8B0468AF52548E22 +92BB63D0984C8E44557C9AD466FF568F60D56D9552435C4959296DFB586B7530 +751C606C821481466311689D8FE2773A8DF38CBC94355E165EF3807D70F40000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006C405EF7505C4EAD5EAD633A8247901A6850916E77B3540C92855F647AE5 +687663457B527D7175DB50776295982D900F51F879C37A8157165F9290145857 +5C60571F541051546E4D571863A8983D817F8715892A9000541E5C6F81C062D6 +625881319D15964099B199DD6A6259A562D3553E631654C786D97AAA5A0374E6 +896A6B6A59168C4C5F4E706373A998114E3870F75B8C7897633D665A769660CB +5B9B5A49842C81556C6A738B4EA167897DB25F8065FA671B5FD859845A010000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005DCD5FAE537197CB90556845570D552F60DF72326FF07DAD8466840E59D4 +504950DE5C3E7DEF672A851A5473754F80C355829B4F4F4D6E2D8B025C096170 +885B761F6E29868A6587805E7D0B543B7A697D0A554F55E17FC174EE64BE8778 +6E267AA9621165A1536763E16C835DEB55DA93A270CF6C618AA35C4B7121856A +68A7543E54346BCB6B664E9463425348821E4F0D4FAE5862620A972766647269 +52FF52D9609F8AA4661471996790897F785277FD6670563B5438932B72A70000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007A00606F5E0C6089819D591560DC718470EF6EAA6C5072806A8489725E2D +7FD25AB3559C92916D177CFB969962327D30778E87665323971E8F4466875CFD +4FE072F94E0B53A6590F56876380934151484ED99BAE7E9654B88CE2929C8237 +95916D8E5F265ACC986F96AA73FE737B7E23817A99217FA161B2967796507DAB +76F853A2947299997BB189446E5891097FD479658A7360F397FF4EAB98055DF7 +6A6150CF54118C61856D785D9704524A54EE56C292B76D885BB56DC666C90000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +50 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005C0F5B5D68218096562F7B11654869544E9B6B47874E978B5354633E643A +90AA659C81058AE75BEB68B0537887F961C86CC470098B1D5C5185AA82AF92C5 +6B238F9B65B05FFB5FC34FE191C1661F8165732960FA82085211578B5F6290A2 +884C91925E78674F602759D3514451F680F853086C7996C4718A4F114FEE7F9E +673D55C592B979C088967D89589F620C9700865A561898085F908A3184C49157 +53D965ED5E8F755C60647D6E5A7F7DD27E8C8ED255A75BA361F865CB73840000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +51 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009078766C77297D629774859B5B787A7496EA884052DB718F5FAA65EC8A62 +5C0B99B45DE16B896C5B8A138A0A905C8FC558D362BC9D099D2854404E2B82BD +7259869C5D1688596DAF96C5555E4E9E8A1D710954BD95B970DF6DF99E7D56B4 +781487125CA95EF68A00985495BB708E6CBF594463A9773C884D6F1482775830 +71D553AD786F96C155015F6671305BB48AFA9A576B83592E9D2679E7694A63DA +4F6F760D7F8A6D0B967D6C274EF07662990A6A236F3E90808170599674760000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +52 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006447582F90657A918B2159DA54AC820085E5898180006930564E8036723A +91CE51B64E5F98016396696D844966F3814B591C6DB24E0058F991AB63D692A5 +4F9D4F0A886398245937907A79FB510080F075916C825B9C59E85F5D690587FB +501A5DF24E5977E34EE585DD6291661390915C7951045F7981C69038808475AB +4EA688D4610F6BC561B67FA976CA6EA28A638B708ABC8B6F5F027FFC7FCC7E79 +8335852D56E06BB797F3967059FB541F92806DEB5BC598F25C395F1596B10000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +53 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000537082F16AFB5B309DF961C97E93746987A271DF719288058FCE8D0F76C8 +5F717A4E786C662055B264C150AD81C376705EB896CD8E3486F9548F6CF36D8C +6C38607F52C775285E7D512A60A061825C24753190F5923E73366CB96E389149 +670953CB53F34F5191C98A9853C85E7C8FC26DE44E8E76C26986865E611A8F3F +99184FDE903E9B5A61096E1D6F0196854E885A3196E882075DBC79B95B878A9E +7FBD738957DF828B9B315401904755BB5CEA5FA161086B32734480B28B7D0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +54 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006D745BD388D598108C6B99AD9D1B6DF551A4514357A38881539F63F48F45 +571254E15713733F6E907DE3906082D198586028966266F07D048D8A8E8D9470 +5CB37CA4670860A695B2801896F29116530096955141904B85F49196668897F5 +5B55531D783896DC683D54C9707E5BB08F09518D572854B1652266AB8D0A8D1C +81DF846C906D7CDF947F85FB68D765E96FA186A48E81566A902076827AC871E5 +8CAC64C752476FA48CCA600E589E618E66FE8D08624E55B36E23672D8ECB0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +55 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000935895987728680569A8548B4E4D70B88A5064589F4B5B857A8450B55BE8 +77BB6C088A797C986CBE76DE65AC8F3E5D845C55863868E7536062307AD96E5B +7DBB6A1F7AE05F706F335F35638C6F3267564E085E338CEC4ED781397634969C +62DB662D627E6CBC8D9971677F695146808753EC906E629854F287C48F4D8005 +937A851790196D5973CD659F771F7504782781FB8C9E91DD5075679575B98A3A +9707632F93AE966384B86399775C5F817319722D6014657462EF6B63653F0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +56 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005E407665912D8B49829D679D652F5431871877E580A281026C414E4B7E54 +807776F4690D6B9657F7503C4F84574063076B628DBE887965E87D195FD7646F +64F281F381F47F6E5E5F5CD95236667A79E97A1A8CEA709975D46EEF6CBB7A92 +4E2D76C55FE0941888777D427A2E816B91CD4EF28846821F54685DDE6D328B05 +7CA58EF880985E1A549276BA5B99665D9A5F73E0682A86DB6731732A8AF88A85 +90107AF971ED716E62C477DA56D14E3B845767F152A986C08CAF94447BC90000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +57 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004F4F6CE8795D99D06293722A62FD5C0878DA8F4964B08CFA7BC66A01838A +88DD599D649E58EF72C0690E93108FFD8D05589C7DB48AC46E96634962D95353 +684C74228301914C55447740707C6FC1517954A88CC759FF6ECB6DC45B5C7D2B +4ED47C7D6ED35B5081EA6F2C5B579B0368D58E2A5B977D9C7E3D7E3191128D70 +594F63CD79DF8DB3535265CF79568A5B963B7D44947D7E825634918967007F6A +5C0A907566285DE64F5067DE505A4F5C57505EA7000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +58 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004E8D4E0C51404E105EFF53454E154E984E1E9B325B6C56694E2879BA4E3F +53154E47592D723B536E6C1056DF80E499976BD3777E9F174E364E9F9F104E5C +4E694E9382885B5B55C7560F4EC45399539D53B453A553AE97688D0B531A53F5 +532D5331533E8CFE5366536352025208520E52445233528C5274524C525E5261 +525C84AF527D528252815290529351827F544EBB4EC34EC94EC24EE84EE14EEB +4EDE50B44EF34F224F644EF5500050964F094F474F5E4F6765384F5A4F5D0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +59 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004F5F4F574F324F3D4F764F744F914F894F834F8F4F7E4F7B51154F7C5102 +4F945114513C51374FC54FDA4FE34FDC4FD14FDF4FF85029504C4FF3502C500F +502E502D4FFE501C500C5025502850E8504350555048504E506C50C2513B5110 +513A50BA50D6510650ED50EC50E650EE5107510B4EDD6C3D4F5850C94FCE9FA0 +6C467CF4516E5DFD9ECC999856C5591452F9530D8A0753109CEC591951554EA0 +51564EB3886E88A4893B81E088D279805B3488037FB851AB51B151BD51BC0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000051C7519651A251A58A018A108A0C8A158B338A4E8A258A418A368A468A54 +8A588A528A868A848A7F8A708A7C8A758A6C8A6E8ACD8AE28A618A9A8AA58A91 +8A928ACF8AD18AC98ADB8AD78AC28AB68AF68AEB8B148B018AE48AED8AFC8AF3 +8AE68AEE8ADE8B288B9C8B168B1A8B108B2B8B2D8B568B598B4E8B9E8B6B8B96 +5369537A961D962296219631962A963D963C964296589654965F9689966C9672 +96749688968D969796B09097909B913A9099911490A190B490B390B691340000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000090B890B090DF90C590BE913690C490C79106914890E290DC90D790DB90EB +90EF90FE91049122911E91239131912F91399143914682BB595052F152AC52AD +52BE54FF52D052D652F053DF71EE77CD5EF451F551FC9B2F53B65F01755A5DF0 +574C580A57A1587E58BC58C558D15729572C572A573358D9572E572F58E2573B +5742576958E0576B58DA577C577B5768576D5776577357E157A4578C584F57CF +57A75816579357A057D55852581D586457D257B857F457EF57F857E457DD0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5C +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000580B580D57FD57ED5800581E5819584458205865586C58815889589A5880 +99A89F1961FF8279827D827F828F828A82A88284828E8291858C829982AB8553 +82BE82B085F682CA82E3829882B782AE83A7840784EF82A982B482A182AA829F +82C482E782A482E1830982F782E48622830782DC82F482D282D8830C82FB82D3 +8526831A8306584B716282E082D5831C8351855884FD83088392833C83348331 +839B854E832F834F8347834385888340831785BA832D833A833372966ECE0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008541831B85CE855284C08452846483B083788494843583A083AA8393839C +8385837C859F83A9837D8555837B8398839E83A89DAF849383C1840183E583D8 +58078418840B83DD83FD83D6841C84388411840683D483DF840F840383F883F9 +83EA83C583C07E0883F083E1845C8451845A8459847385468488847A85628478 +843C844684698476851E848E8431846D84C184CD84D09A4084BD84D384CA84BF +84BA863A84A184B984B4849793A38577850C750D853884F0861E851F85FA0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008556853B84FF84FC8559854885688564855E857A77A285438604857B85A4 +85A88587858F857985EA859C858585B985B785B0861A85C185DC85FF86278605 +86298616863C5EFE5F08593C596980375955595A5958530F5C225C255C2C5C37 +624C636B647662BB62CA62DA62D762EE649F62F66339634B634363AD63F66371 +637A638E6451636D63AC638A636963AE645C63F263F863E064B363C463DE63CE +645263C663BE65046441640B641B6420640C64266421645E6516646D64960000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000647A64F764FC6499651B64C064D064D764E464E265096525652E5F0B5FD2 +75195F11535F53F1563053E953E853FB541254165406544B563856C8545456A6 +54435421550454BC5423543254825494547754715464549A5680548454765466 +565D54D054AD54C254B4566054A754A6563555F6547254A3566654BB54BF54CC +567254DA568C54A954AA54A4566554CF54DE561C54E7562E54FD551454F355E9 +5523550F55115527552A5616558F55B5554956C055415555553F5550553C0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +60 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005537555655755576557755335530555C558B55D2558355B155B955885581 +559F557E55D65591557B55DF560D56B35594559955EA55F755C9561F55D156C1 +55EC55D455E655DD55C455EF55E555F2566F55CC55CD55E855F555E48F61561E +5608560C560156B6562355FE56005627562D565856395657562C564D56625659 +5695564C5654568656645671566B567B567C5685569356AF56D456D756DD56E1 +570756EB56F956FF5704570A5709571C5E435E195E145E115E6C5E585E570000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +61 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005E375E445E545E5B5E5E5E615C8C5C7A5C8D5C905D875C885CF45C995C91 +5D505C9C5CB55CA25D2C5CAC5CAB5CB15CA35CC15CB75DA75CD25DA05CCB5D22 +5D975D0D5D275D265D2E5D245D1E5D065D1B5DB85D3E5D345D3D5D6C5D5B5D6F +5D815D6B5D4B5D4A5D695D745D825D995D9D8C735DB75DD45F735F775F825F87 +5F89540E5FA05F995F9C5FA85FAD5FB55FBC88625F6172AD72B072B473777341 +72C372C172CE72CD72D272E8736A72E9733B72F472F7730172F3736B72FA0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +62 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000072FB731773137380730A731E731D737C732273397325732C733873317350 +734D73577360736C736F737E821B592598E75924590298E0993398E9993C98EA +98EB98ED98F4990999114F59991B9937993F994399489949994A994C99625E80 +5EE15E8B5E965EA55EA05EB95EB55EBE5EB38CE15ED25ED15EDB5EE85EEA81BA +5FC45FC95FD661FA61AE5FEE616A5FE15FE4613E60B561345FEA5FED5FF86019 +60356026601B600F600D6029602B600A61CC6021615F61E860FB613760420000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +63 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000606A60F26096609A6173609D60836092608C609B611C60BB60B160DD60D8 +60C660DA60B4612061926115612360F46100610E612B614A617561AC619461A7 +61B761D461F55FDD96B39582958695C8958E9594958C95E595AD95AB9B2E95AC +95BE95B69B2995BF95BD95BC95C395CB95D495D095D595DE4E2C723F62156C35 +6C546C5C6C4A70436C856C906C946C8C6C686C696C746C766C866F596CD06CD4 +6CAD702770186CF16CD76CB26CE06CD66FFC6CEB6CEE6CB16CD36CEF6D870000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +64 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006D396D276D0C6D796E5E6D076D046D196D0E6D2B6FAE6D2E6D356D1A700F +6EF86F6F6D336D916D6F6DF66F7F6D5E6D936D946D5C6D606D7C6D636E1A6DC7 +6DC56DDE70066DBF6DE06FA06DE66DDD6DD9700B6DAB6E0C6DAE6E2B6E6E6E4E +6E6B6EB26E5F6E866E536E546E326E256E4470676EB16E9870446F2D70056EA5 +6EA76EBD6EBB6EB76F776EB46ECF6E8F6EC26E9F6F627020701F6F246F156EF9 +6F2F6F3670326F746F2A6F096F296F896F8D6F8C6F786F726F7C6F7A70280000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +65 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006FC96FA76FB96FB66FC26FE16FEE6FDE6FE06FEF701A7023701B70397035 +705D705E5B805B845B955B935BA55BB8752F9A2B64345BE45BEE89305BF08E47 +8B078FB68FD38FD58FE58FEE8FE490878FE690158FE890059004900B90909011 +900D9016902190359036902D902F9044905190529050906890589062905B66B9 +9074907D908290889083908B5F505F575F565F585C3B54AB5C505C595B715C63 +5C687FBC5F335F295F2D82745F3C9B3B5C6E59815983598D5AF55AD759A30000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +66 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000599759CA5B00599E59A459D259B259AF59D759BE5A6D5B0859DD5B4C59E3 +59D859F95A0C5A095AA75AFB5A115A235A135A405A675A4A5A555A3C5A625B0B +80EC5AAA5A9B5A775A7A5ABE5AEB5AB25B215B2A5AB85AE05AE35B195AD65AE6 +5AD85ADC5B095B175B165B325B375B405C155C1C5B5A5B655B735B515B535B62 +99D499DF99D99A369A5B99D199D89A4D9A4A99E29A6A9A0F9A0D9A059A429A2D +9A169A419A2E9A389A439A449A4F9A659A647CF97D067D027D077D087E8A0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +67 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007D1C7D157D137D3A7D327D317E107D3C7D407D3F7D5D7D4E7D737D867D83 +7D887DBE7DBA7DCB7DD47DC47D9E7DAC7DB97DA37DB07DC77DD97DD77DF97DF2 +7E627DE67DF67DF17E0B7DE17E097E1D7E1F7E1E7E2D7E0A7E117E7D7E397E35 +7E327E467E457E887E5A7E527E6E7E7E7E707E6F7E985E7A757F5DDB753E9095 +738E74A3744B73A2739F73CF73C274CF73B773B373C073C973C873E573D9980A +740A73E973E773DE74BD743F7489742A745B7426742574287430742E742C0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +68 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000741B741A7441745C74577455745974A6746D747E749C74D4748074817487 +748B749E74A874A9749074A774DA74BA97D997DE97DC674C6753675E674869AA +6AEA6787676A677367986898677568D66A05689F678B6777677C67F06ADB67D8 +6AF367E967B06AE867D967B567DA67B367DD680067C367B867E26ADF67C16A89 +68326833690F6A48684E6968684469BF6883681D68556A3A68416A9C68406B12 +684A6849682968B5688F687468776893686B6B1E696E68FC6ADD69E768F90000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +69 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006B0F68F0690B6901695768E369106971693969606942695D6B16696B6980 +69986978693469CC6AEC6ADA69CE6AF8696669636979699B69A769BB69AB69AD +69D469B169C169CA6AB369956AE7698D69FF6AA369ED6A176A186A6569F26A44 +6A3E6AA06A506A5B6A356A8E6AD36A3D6A286A586ADE6A916A906AA96A976AAB +733773526B816B826BA46B846B9E6BAE6B8D6BAB6B9B6BAF6BAA8ED48EDB8EF2 +8EFB8F648EF98EFC8EEB8EE48F628EFA8EFE8F0A8F078F058F128F268F1E0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008F1F8F1C8F338F468F548ECE62146227621B621F62226221622562246229 +81E7750C74F474FF750F75117513653465EE65EF65F0660A66C7677266036615 +6600708566F7661D66346631663666358006665F66C46641664F668966616657 +66776684668C66D6669D66BE66DB66DC66E666E98CC18CB08CBA8CBD8D048CB2 +8CC58D108CD18CDA8CD58CEB8CE78CFB899889AC89A189BF89A689AF89B289B7 +726E729F725D7266726F727E727F7284728B728D728F72926308633263B00000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000643F64D880046BEA6BF36BFD6BFF6BF96C056C0C6C066C0D6C156C186C19 +6C1A6C216C2C6C246C2A6C3265356555656B725872527256723086625216809F +809C809380BC670A80BD80B180AB80AD80B480B76727815680E981DA80DB80C2 +80C480D980CD80D7671080DD811B80F180F480ED81BE810E80F280FC67158112 +8C5A8161811E812C811881328148814C815381748159815A817181608169817C +817D816D8167584D5AB58188818281CF6ED581A381AA81CC672681CA81BB0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6C +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000081C181A66B5F6B376B396B436B466B5998AE98AF98B698BC98C698C86BB3 +5F408F4289F365909F4F659565BC65C665C465C365CC65CE65D265D6716C7152 +7096719770BB70C070B770AB70B171C170CA7110711371DC712F71317173715C +716871457172714A7178717A719871B371B571A871A071E071D471E771F9721D +7228706C71FE716671B9623E623D624362486249793B794079467949795B795C +7953795A79B079577960798E7967797A79AA798A799A79A779B35FD15FD00000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000061DF605D605A606760416059606361646106610D615D61A9619D61CB61E3 +62078080807F6C936FA96DFC78EF77F878AD780978687818781165AB782D78B8 +781D7839792A7931781F783C7825782C78237829784E786D786478FD78267850 +7847784C786A78E77893789A788778E378A178A378B278B978A578D478D978C9 +78EC78F2790578F479137924791E79349F959EF99EFB9EFC76F17704779876F9 +77077708771A77227719772D772677357738775E77BC77477743775A77680000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000077627765777F778D777D7780778C7791779F77A077B077B577BD753A7540 +754E754B7548755B7572757975837F587F617F5F8A487F687F867F717F797F88 +7F7E76CD76E5883291D291D391D491D991D791D591F791E791E4934691F591F9 +9208922692459211921092019227920492259200923A9266923792339255923D +9238925E926C926D923F9460923092499248924D922E9239943892AC92A0927A +92AA92EE92CF940392E3943A92B192A693A7929692CC92A993F59293927F0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000093A9929A931A92AB9283940B92A892A39412933892F193D792E592F092EF +92E892BC92DD92F69426942792C392DF92E6931293069369931B934093019315 +932E934393079308931F93199365934793769354936493AA9370938493E493D8 +9428938793CC939893B893BF93A693B093B5944C93E293DC93DD93CD93DE93C3 +93C793D19414941D93F794659413946D9420947993F99419944A9432943F9454 +9463937E77E777EC96C979D579ED79E379EB7A065D477A037A027A1E7A140000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +70 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007A397A377A619ECF99A57A707688768E7693769976A474DE74E0752C9CE9 +9CF69D079D069D239D879E159D1D9D1F9DE59D2F9DD99D309D429E1E9D539E1D +9D609D529DF39D5C9D619D939D6A9D6F9D899D989D9A9DC09DA59DA99DC29DBC +9E1A9DD39DDA9DEF9DE69DF29DF89E0C9DFA9E1B7592759476647658759D7667 +75A375B375B475B875C475B175B075C375C2760275CD75E3764675E675E47647 +75E7760375F175FC75FF761076007649760C761E760A7625763B761576190000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +71 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000761B763C762276207640762D7630766D76357643766E7633764D76697654 +765C76567672766F7FCA7AE67A787A797A807A867A887A957AC77AA07AAC7AA8 +7AB67AB3886488698872887D887F888288A2896088B788BC88C9893388CE895D +894788F1891A88FC88E888FE88F08921891989138938890A8964892B89368941 +8966897B758B80E576B876B477DC801280148016801C8020802E80258026802C +802980288031800B803580438046807980528075807189839807980E980F0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +72 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009821981C6F4198269837984E98539873986298599865986C9870864D8654 +866C87E38806867A867C867B86A8868D868B8706869D86A786A386AA869386A9 +86B686C486B5882386B086BA86B186AF86C987F686B486E986FA87EF86ED8784 +86D0871386DE881086DF86D886D18703870786F88708870A870D87098723873B +871E8725872E871A873E87C88734873187298737873F87828722877D8811877B +87608770874C876E878B8753876387BB876487598765879387AF87CE87D20000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +73 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000087C68788878587AD8797878387AB87E587AC87B587B387CB87D387BD87D1 +87C087CA87DB87EA87E087EE8816881387FE880A881B88218839883C7F367F4C +7F447F4582107AFA7AFD7B087BE47B047B677B0A7B2B7B0F7B477B387B2A7B19 +7B2E7B317B207B257B247B337C697B1E7B587BF37B457B757B4C7B8F7B607B6E +7B7B7B627B727B717B907C007BCB7BB87BAC7B9D7C5C7B857C1E7B9C7BA27C2B +7BB47C237BC17BCC7BDD7BDA7BE57BE67BEA7C0C7BFE7BFC7C0F7C6A7C0B0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +74 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007C1F7C2A7C267C387C5F7C4081FE82018202820481EC8844822182228264 +822D822F8228822B8238826B82338234823E82448249824B824F825A825F8268 +887E88CA888888D888DF895E7F9D7FA57FA77FAF7FB07FB27C7C65497C917CF2 +7CF67C9E7CA27CB27CBC7CBD7CDD7CC77CCC7CCD7CC87CC57CD77CE8826E66A8 +7FBF7FCE7FD57FE57FE17FE67FE97FEE7FF37CF87E367DA67DAE7E477E9B9EA9 +9EB48D738D848D948D918DB28D678D6D8C478C49914A9150914E914F91640000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +75 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009162916191709169916F91C591C3917291749179918C91859190918D9191 +91A291A391AA91AD91AE91AF91B591B491BA8C559E7A8E898DEB8E058E598E69 +8DB58DBF8DBC8DBA8E4C8DD68DD78DDA8E928DCE8DCF8DDB8DC68DEC8E7A8E55 +8DE38E9A8E8B8DE48E098DFD8E148E1D8E1F8E938E2E8E238E918E3A8E408E39 +8E358E3D8E318E498E418E428EA18E638E4A8E708E768E7C8E6F8E748E858EAA +8E948E908EA68E9E8C788C828C8A8C858C988C94659B89D689F489DA89DC0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +76 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000089E589EB89F68A3E8B26975A96E9974296EF9706973D9708970F970E972A +97449730973E9F549F5F9F599F609F5C9F669F6C9F6A9F779EFD9EFF9F0996B9 +96BC96BD96CE96D277BF8B8E928E947E92C893E8936A93CA938F943E946B9B77 +9B749B819B839B8E9C787A4C9B929C5F9B909BAD9B9A9BAA9B9E9C6D9BAB9B9D +9C589BC19C7A9C319C399C239C379BC09BCA9BC79BFD9BD69BEA9BEB9BE19BE4 +9BE79BDD9BE29BF09BDB9BF49BD49C5D9C089C109C0D9C129C099BFF9C200000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +77 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009C329C2D9C289C259C299C339C3E9C489C3B9C359C459C569C549C529C67 +977C978597C397BD979497C997AB97A397B297B49AB19AB09AB79DBB9AB69ABA +9ABC9AC19AC09ACF9AC29AD69AD59AD19B459B439B589B4E9B489B4D9B519957 +995C992E995599549ADF9AE19AE69AEF9AEB9AFB9AED9AF99B089B0F9B229B1F +9B234E489EBE7E3B9E829E879E889E8B9E9293D69E9D9E9F9EDB9EDC9EDD9EE0 +9EDF9EE29EF79EE79EE59EF29EEF9F229F2C9F2F9F399F379F3D9F3E9F440000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +78 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000896C95C693365F4685147E94538251B24E119F635679515A6DC09F156597 +56419AEE83034E3089075E727A4098B35E7F95A49B0D52128FF45F597A6B98E2 +51E050A24EF7835085915118636E6372524B5938774F8721814A7E8D91CC66C6 +5E1877AD9E7556C99EF46FDB61DE77C770309EB5884A95E282F951ED62514EC6 +673497C67C647E3497A69EAF786E820D672F677E56CC53F098B16AAF7F4E6D82 +7CF04E074FC27E6B9E7956AE9B1A846F53F690C179A67C72613F4E919AD20000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +79 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000075C796BB53EA7DFB88FD79CD78437B5151C6000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/gb1988.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/gb1988.enc new file mode 100644 index 00000000..298732cc --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/gb1988.enc @@ -0,0 +1,20 @@ +# Encoding file: gb1988, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +002000210022002300A500250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D203E007F +0080008100820083008400850086008700880089008A008B008C008D008E008F +0090009100920093009400950096009700980099009A009B009C009D009E009F +0000FF61FF62FF63FF64FF65FF66FF67FF68FF69FF6AFF6BFF6CFF6DFF6EFF6F +FF70FF71FF72FF73FF74FF75FF76FF77FF78FF79FF7AFF7BFF7CFF7DFF7EFF7F +FF80FF81FF82FF83FF84FF85FF86FF87FF88FF89FF8AFF8BFF8CFF8DFF8EFF8F +FF90FF91FF92FF93FF94FF95FF96FF97FF98FF99FF9AFF9BFF9CFF9DFF9EFF9F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/gb2312-raw.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/gb2312-raw.enc new file mode 100644 index 00000000..813d7a6f --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/gb2312-raw.enc @@ -0,0 +1,1380 @@ +# Encoding file: gb2312, double-byte +D +233F 0 81 +21 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000030003001300230FB02C902C700A8300330052015FF5E2225202620182019 +201C201D3014301530083009300A300B300C300D300E300F3016301730103011 +00B100D700F72236222722282211220F222A222922082237221A22A522252220 +23122299222B222E2261224C2248223D221D2260226E226F22642265221E2235 +22342642264000B0203220332103FF0400A4FFE0FFE1203000A7211626062605 +25CB25CF25CE25C725C625A125A025B325B2203B219221902191219330130000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +22 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000024882489248A248B248C248D248E248F2490249124922493249424952496 +249724982499249A249B247424752476247724782479247A247B247C247D247E +247F248024812482248324842485248624872460246124622463246424652466 +2467246824690000000032203221322232233224322532263227322832290000 +00002160216121622163216421652166216721682169216A216B000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +23 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000FF01FF02FF03FFE5FF05FF06FF07FF08FF09FF0AFF0BFF0CFF0DFF0EFF0F +FF10FF11FF12FF13FF14FF15FF16FF17FF18FF19FF1AFF1BFF1CFF1DFF1EFF1F +FF20FF21FF22FF23FF24FF25FF26FF27FF28FF29FF2AFF2BFF2CFF2DFF2EFF2F +FF30FF31FF32FF33FF34FF35FF36FF37FF38FF39FF3AFF3BFF3CFF3DFF3EFF3F +FF40FF41FF42FF43FF44FF45FF46FF47FF48FF49FF4AFF4BFF4CFF4DFF4EFF4F +FF50FF51FF52FF53FF54FF55FF56FF57FF58FF59FF5AFF5BFF5CFF5DFFE30000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +24 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000304130423043304430453046304730483049304A304B304C304D304E304F +3050305130523053305430553056305730583059305A305B305C305D305E305F +3060306130623063306430653066306730683069306A306B306C306D306E306F +3070307130723073307430753076307730783079307A307B307C307D307E307F +3080308130823083308430853086308730883089308A308B308C308D308E308F +3090309130923093000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +25 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000030A130A230A330A430A530A630A730A830A930AA30AB30AC30AD30AE30AF +30B030B130B230B330B430B530B630B730B830B930BA30BB30BC30BD30BE30BF +30C030C130C230C330C430C530C630C730C830C930CA30CB30CC30CD30CE30CF +30D030D130D230D330D430D530D630D730D830D930DA30DB30DC30DD30DE30DF +30E030E130E230E330E430E530E630E730E830E930EA30EB30EC30ED30EE30EF +30F030F130F230F330F430F530F6000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +26 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000039103920393039403950396039703980399039A039B039C039D039E039F +03A003A103A303A403A503A603A703A803A90000000000000000000000000000 +000003B103B203B303B403B503B603B703B803B903BA03BB03BC03BD03BE03BF +03C003C103C303C403C503C603C703C803C90000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +27 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000004100411041204130414041504010416041704180419041A041B041C041D +041E041F0420042104220423042404250426042704280429042A042B042C042D +042E042F00000000000000000000000000000000000000000000000000000000 +000004300431043204330434043504510436043704380439043A043B043C043D +043E043F0440044104420443044404450446044704480449044A044B044C044D +044E044F00000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +28 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000010100E101CE00E0011300E9011B00E8012B00ED01D000EC014D00F301D2 +00F2016B00FA01D400F901D601D801DA01DC00FC00EA00000000000000000000 +0000000000000000000031053106310731083109310A310B310C310D310E310F +3110311131123113311431153116311731183119311A311B311C311D311E311F +3120312131223123312431253126312731283129000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +29 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00000000000000002500250125022503250425052506250725082509250A250B +250C250D250E250F2510251125122513251425152516251725182519251A251B +251C251D251E251F2520252125222523252425252526252725282529252A252B +252C252D252E252F2530253125322533253425352536253725382539253A253B +253C253D253E253F2540254125422543254425452546254725482549254A254B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +30 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000554A963F57C3632854CE550954C07691764C853C77EE827E788D72319698 +978D6C285B894FFA630966975CB880FA684880AE660276CE51F9655671AC7FF1 +888450B2596561CA6FB382AD634C625253ED54277B06516B75A45DF462D48DCB +9776628A8019575D97387F627238767D67CF767E64464F708D2562DC7A176591 +73ED642C6273822C9881677F7248626E62CC4F3474E3534A529E7ECA90A65E2E +6886699C81807ED168D278C5868C9551508D8C2482DE80DE5305891252650000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +31 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000858496F94FDD582199715B9D62B162A566B48C799C8D7206676F789160B2 +535153178F8880CC8D1D94A1500D72C8590760EB711988AB595482EF672C7B28 +5D297EF7752D6CF58E668FF8903C9F3B6BD491197B145F7C78A784D6853D6BD5 +6BD96BD65E015E8775F995ED655D5F0A5FC58F9F58C181C2907F965B97AD8FB9 +7F168D2C62414FBF53D8535E8FA88FA98FAB904D68075F6A819888689CD6618B +522B762A5F6C658C6FD26EE85BBE6448517551B067C44E1979C9997C70B30000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +32 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000075C55E7673BB83E064AD62E894B56CE2535A52C3640F94C27B944F2F5E1B +82368116818A6E246CCA9A736355535C54FA886557E04E0D5E036B657C3F90E8 +601664E6731C88C16750624D8D22776C8E2991C75F6983DC8521991053C28695 +6B8B60ED60E8707F82CD82314ED36CA785CF64CD7CD969FD66F9834953957B56 +4FA7518C6D4B5C428E6D63D253C9832C833667E578B4643D5BDF5C945DEE8BE7 +62C667F48C7A640063BA8749998B8C177F2094F24EA7961098A4660C73160000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +33 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000573A5C1D5E38957F507F80A05382655E7545553150218D856284949E671D +56326F6E5DE2543570928F66626F64A463A35F7B6F8890F481E38FB05C186668 +5FF16C8996488D81886C649179F057CE6A59621054484E587A0B60E96F848BDA +627F901E9A8B79E4540375F4630153196C608FDF5F1B9A70803B9F7F4F885C3A +8D647FC565A570BD514551B2866B5D075BA062BD916C75748E0C7A2061017B79 +4EC77EF877854E1181ED521D51FA6A7153A88E87950496CF6EC19664695A0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +34 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000784050A877D7641089E6590463E35DDD7A7F693D4F20823955984E3275AE +7A975E625E8A95EF521B5439708A6376952457826625693F918755076DF37EAF +882262337EF075B5832878C196CC8F9E614874F78BCD6B64523A8D506B21806A +847156F153064ECE4E1B51D17C97918B7C074FC38E7F7BE17A9C64675D1450AC +810676017CB96DEC7FE067515B585BF878CB64AE641363AA632B9519642D8FBE +7B5476296253592754466B7950A362345E266B864EE38D37888B5F85902E0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +35 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006020803D62C54E39535590F863B880C665E66C2E4F4660EE6DE18BDE5F39 +86CB5F536321515A83616863520063638E4850125C9B79775BFC52307A3B60BC +905376D75FB75F9776848E6C706F767B7B4977AA51F3909358244F4E6EF48FEA +654C7B1B72C46DA47FDF5AE162B55E95573084827B2C5E1D5F1F90127F1498A0 +63826EC7789870B95178975B57AB75354F4375385E9760E659606DC06BBF7889 +53FC96D551CB52016389540A94938C038DCC7239789F87768FED8C0D53E00000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +36 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004E0176EF53EE948998769F0E952D5B9A8BA24E224E1C51AC846361C252A8 +680B4F97606B51BB6D1E515C6296659796618C46901775D890FD77636BD2728A +72EC8BFB583577798D4C675C9540809A5EA66E2159927AEF77ED953B6BB565AD +7F0E58065151961F5BF958A954288E726566987F56E4949D76FE9041638754C6 +591A593A579B8EB267358DFA8235524160F0581586FE5CE89E454FC4989D8BB9 +5A2560765384627C904F9102997F6069800C513F80335C1499756D314E8C0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +37 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008D3053D17F5A7B4F4F104E4F96006CD573D085E95E06756A7FFB6A0A77FE +94927E4151E170E653CD8FD483038D2972AF996D6CDB574A82B365B980AA623F +963259A84EFF8BBF7EBA653E83F2975E556198DE80A5532A8BFD542080BA5E9F +6CB88D3982AC915A54296C1B52067EB7575F711A6C7E7C89594B4EFD5FFF6124 +7CAA4E305C0167AB87025CF0950B98CE75AF70FD902251AF7F1D8BBD594951E4 +4F5B5426592B657780A45B75627662C28F905E456C1F7B264F0F4FD8670D0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +38 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006D6E6DAA798F88B15F17752B629A8F854FEF91DC65A7812F81515E9C8150 +8D74526F89868D4B590D50854ED8961C723681798D1F5BCC8BA3964459877F1A +54905676560E8BE565396982949976D66E895E727518674667D17AFF809D8D76 +611F79C665628D635188521A94A27F38809B7EB25C976E2F67607BD9768B9AD8 +818F7F947CD5641E95507A3F544A54E56B4C640162089E3D80F3759952729769 +845B683C86E49601969494EC4E2A54047ED968398DDF801566F45E9A7FB90000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +39 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000057C2803F68975DE5653B529F606D9F9A4F9B8EAC516C5BAB5F135DE96C5E +62F18D21517194A952FE6C9F82DF72D757A267848D2D591F8F9C83C754957B8D +4F306CBD5B6459D19F1353E486CA9AA88C3780A16545987E56FA96C7522E74DC +52505BE1630289024E5662D0602A68FA51735B9851A089C27BA199867F5060EF +704C8D2F51495E7F901B747089C4572D78455F529F9F95FA8F689B3C8BE17678 +684267DC8DEA8D35523D8F8A6EDA68CD950590ED56FD679C88F98FC754C80000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009AB85B696D776C264EA55BB39A87916361A890AF97E9542B6DB55BD251FD +558A7F557FF064BC634D65F161BE608D710A6C576C49592F676D822A58D5568E +8C6A6BEB90DD597D801753F76D695475559D837783CF683879BE548C4F555408 +76D28C8996026CB36DB88D6B89109E648D3A563F9ED175D55F8872E0606854FC +4EA86A2A886160528F7054C470D886799E3F6D2A5B8F5F187EA255894FAF7334 +543C539A5019540E547C4E4E5FFD745A58F6846B80E1877472D07CCA6E560000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005F27864E552C62A44E926CAA623782B154D7534E733E6ED1753B52125316 +8BDD69D05F8A60006DEE574F6B2273AF68538FD87F13636260A3552475EA8C62 +71156DA35BA65E7B8352614C9EC478FA87577C27768751F060F6714C66435E4C +604D8C0E707063258F895FBD606286D456DE6BC160946167534960E066668D3F +79FD4F1A70E96C478BB38BF27ED88364660F5A5A9B426D516DF78C416D3B4F19 +706B83B7621660D1970D8D27797851FB573E57FA673A75787A3D79EF7B950000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3C +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000808C99658FF96FC08BA59E2159EC7EE97F095409678168D88F917C4D96C6 +53CA602575BE6C7253735AC97EA7632451E0810A5DF184DF628051805B634F0E +796D524260B86D4E5BC45BC28BA18BB065E25FCC964559937EE77EAA560967B7 +59394F735BB652A0835A988A8D3E753294BE50477A3C4EF767B69A7E5AC16B7C +76D1575A5C167B3A95F4714E517C80A9827059787F04832768C067EC78B17877 +62E363617B804FED526A51CF835069DB92748DF58D3189C1952E7BAD4EF60000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000506582305251996F6E106E856DA75EFA50F559DC5C066D466C5F7586848B +686859568BB253209171964D854969127901712680F64EA490CA6D479A845A07 +56BC640594F077EB4FA5811A72E189D2997A7F347EDE527F655991758F7F8F83 +53EB7A9663ED63A5768679F888579636622A52AB8282685467706377776B7AED +6D017ED389E359D0621285C982A5754C501F4ECB75A58BEB5C4A5DFE7B4B65A4 +91D14ECA6D25895F7D2795264EC58C288FDB9773664B79818FD170EC6D780000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005C3D52B283465162830E775B66769CB84EAC60CA7CBE7CB37ECF4E958B66 +666F988897595883656C955C5F8475C997567ADF7ADE51C070AF7A9863EA7A76 +7EA0739697ED4E4570784E5D915253A9655165E781FC8205548E5C31759A97A0 +62D872D975BD5C459A7983CA5C40548077E94E3E6CAE805A62D2636E5DE85177 +8DDD8E1E952F4FF153E560E770AC526763509E435A1F5026773753777EE26485 +652B628963985014723589C951B38BC07EDD574783CC94A7519B541B5CFB0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004FCA7AE36D5A90E19A8F55805496536154AF5F0063E9697751EF6168520A +582A52D8574E780D770B5EB761777CE0625B62974EA27095800362F770E49760 +577782DB67EF68F578D5989779D158F354B353EF6E34514B523B5BA28BFE80AF +554357A660735751542D7A7A60505B5463A762A053E362635BC767AF54ED7A9F +82E691775E9388E4593857AE630E8DE880EF57577B774FA95FEB5BBD6B3E5321 +7B5072C2684677FF773665F751B54E8F76D45CBF7AA58475594E9B4150800000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +40 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000998861276E8357646606634656F062EC62695ED39614578362C955878721 +814A8FA3556683B167658D5684DD5A6A680F62E67BEE961151706F9C8C3063FD +89C861D27F0670C26EE57405699472FC5ECA90CE67176D6A635E52B372628001 +4F6C59E5916A70D96D9D52D24E5096F7956D857E78CA7D2F5121579264C2808B +7C7B6CEA68F1695E51B7539868A872819ECE7BF172F879BB6F137406674E91CC +9CA4793C83898354540F68174E3D538952B1783E5386522950884F8B4FD00000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +41 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000075E27ACB7C926CA596B6529B748354E94FE9805483B28FDE95705EC9601C +6D9F5E18655B813894FE604B70BC7EC37CAE51C968817CB1826F4E248F8691CF +667E4EAE8C0564A9804A50DA759771CE5BE58FBD6F664E86648295635ED66599 +521788C270C852A3730E7433679778F797164E3490BB9CDE6DCB51DB8D41541D +62CE73B283F196F69F8494C34F367F9A51CC707596755CAD988653E64EE46E9C +740969B4786B998F7559521876246D4167F3516D9F99804B54997B3C7ABF0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +42 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009686578462E29647697C5A0464027BD36F0F964B82A6536298855E907089 +63B35364864F9C819E93788C97328DEF8D429E7F6F5E79845F559646622E9A74 +541594DD4FA365C55C655C617F1586516C2F5F8B73876EE47EFF5CE6631B5B6A +6EE653754E7163A0756562A18F6E4F264ED16CA67EB68BBA841D87BA7F57903B +95237BA99AA188F8843D6D1B9A867EDC59889EBB739B780186829A6C9A82561B +541757CB4E709EA653568FC881097792999286EE6EE1851366FC61626F2B0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +43 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008C298292832B76F26C135FD983BD732B8305951A6BDB77DB94C6536F8302 +51925E3D8C8C8D384E4873AB679A68859176970971646CA177095A9295416BCF +7F8E66275BD059B95A9A95E895F74EEC840C84996AAC76DF9530731B68A65B5F +772F919A97617CDC8FF78C1C5F257C7379D889C56CCC871C5BC65E4268C97720 +7EF55195514D52C95A297F05976282D763CF778485D079D26E3A5E9959998511 +706D6C1162BF76BF654F60AF95FD660E879F9E2394ED540D547D8C2C64780000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +44 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000647986116A21819C78E864699B5462B9672B83AB58A89ED86CAB6F205BDE +964C8C0B725F67D062C772614EA959C66BCD589366AE5E5552DF6155672876EE +776672677A4662FF54EA545094A090A35A1C7EB36C164E435976801059485357 +753796BE56CA63208111607C95F96DD65462998151855AE980FD59AE9713502A +6CE55C3C62DF4F60533F817B90066EBA852B62C85E7478BE64B5637B5FF55A18 +917F9E1F5C3F634F80425B7D556E954A954D6D8560A867E072DE51DD5B810000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +45 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000062E76CDE725B626D94AE7EBD81136D53519C5F04597452AA601259736696 +8650759F632A61E67CEF8BFA54E66B279E256BB485D5545550766CA4556A8DB4 +722C5E156015743662CD6392724C5F986E436D3E65006F5876D878D076FC7554 +522453DB4E535E9E65C1802A80D6629B5486522870AE888D8DD16CE1547880DA +57F988F48D54966A914D4F696C9B55B776C6783062A870F96F8E5F6D84EC68DA +787C7BF781A8670B9E4F636778B0576F78129739627962AB528874356BD70000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +46 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005564813E75B276AE533975DE50FB5C418B6C7BC7504F72479A9798D86F02 +74E27968648777A562FC98918D2B54C180584E52576A82F9840D5E7351ED74F6 +8BC45C4F57616CFC98875A4678349B448FEB7C955256625194FA4EC683868461 +83E984B257D467345703666E6D668C3166DD7011671F6B3A6816621A59BB4E03 +51C46F0667D26C8F517668CB59476B6775665D0E81109F5065D7794879419A91 +8D775C824E5E4F01542F5951780C56686C148FC45F036C7D6CE38BAB63900000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +47 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000060706D3D72756266948E94C553438FC17B7E4EDF8C264E7E9ED494B194B3 +524D6F5C90636D458C3458115D4C6B206B4967AA545B81547F8C589985375F3A +62A26A47953965726084686577A74E544FA85DE7979864AC7FD85CED4FCF7A8D +520783044E14602F7A8394A64FB54EB279E6743452E482B964D279BD5BDD6C81 +97528F7B6C22503E537F6E0564CE66746C3060C598778BF75E86743C7A7779CB +4E1890B174036C4256DA914B6CC58D8B533A86C666F28EAF5C489A716E200000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +48 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000053D65A369F8B8DA353BB570898A76743919B6CC9516875CA62F372AC5238 +529D7F3A7094763853749E4A69B7786E96C088D97FA4713671C3518967D374E4 +58E4651856B78BA9997662707ED560F970ED58EC4EC14EBA5FCD97E74EFB8BA4 +5203598A7EAB62544ECD65E5620E833884C98363878D71946EB65BB97ED25197 +63C967D480898339881551125B7A59828FB14E736C5D516589258F6F962E854A +745E951095F06DA682E55F3164926D128428816E9CC3585E8D5B4E0953C10000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +49 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004F1E6563685155D34E2764149A9A626B5AC2745F82726DA968EE50E7838E +7802674052396C997EB150BB5565715E7B5B665273CA82EB67495C715220717D +886B95EA965564C58D6181B355846C5562477F2E58924F2455468D4F664C4E0A +5C1A88F368A2634E7A0D70E7828D52FA97F65C1154E890B57ECD59628D4A86C7 +820C820D8D6664445C0461516D89793E8BBE78377533547B4F388EAB6DF15A20 +7EC5795E6C885BA15A76751A80BE614E6E1758F0751F7525727253477EF30000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000770176DB526980DC57235E08593172EE65BD6E7F8BD75C388671534177F3 +62FE65F64EC098DF86805B9E8BC653F277E24F7F5C4E9A7659CB5F0F793A58EB +4E1667FF4E8B62ED8A93901D52BF662F55DC566C90024ED54F8D91CA99706C0F +5E0260435BA489C68BD56536624B99965B885BFF6388552E53D77626517D852C +67A268B36B8A62928F9353D482126DD1758F4E668D4E5B70719F85AF669166D9 +7F7287009ECD9F205C5E672F8FF06811675F620D7AD658855EB665706F310000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000060555237800D6454887075295E05681362F4971C53CC723D8C016C347761 +7A0E542E77AC987A821C8BF47855671470C165AF64955636601D79C153F84E1D +6B7B80865BFA55E356DB4F3A4F3C99725DF3677E80386002988290015B8B8BBC +8BF5641C825864DE55FD82CF91654FD77D20901F7C9F50F358516EAF5BBF8BC9 +80839178849C7B97867D968B968F7EE59AD3788E5C817A57904296A7795F5B59 +635F7B0B84D168AD55067F2974107D2295016240584C4ED65B83597958540000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4C +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000736D631E8E4B8E0F80CE82D462AC53F06CF0915E592A60016C70574D644A +8D2A762B6EE9575B6A8075F06F6D8C2D8C0857666BEF889278B363A253F970AD +6C645858642A580268E0819B55107CD650188EBA6DCC8D9F70EB638F6D9B6ED4 +7EE68404684390036DD896768BA85957727985E4817E75BC8A8A68AF52548E22 +951163D098988E44557C4F5366FF568F60D56D9552435C4959296DFB586B7530 +751C606C82148146631167618FE2773A8DF38D3494C15E165385542C70C30000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006C405EF7505C4EAD5EAD633A8247901A6850916E77B3540C94DC5F647AE5 +687663457B527EDF75DB507762955934900F51F879C37A8156FE5F9290146D82 +5C60571F541051546E4D56E263A89893817F8715892A9000541E5C6F81C062D6 +625881319E3596409A6E9A7C692D59A562D3553E631654C786D96D3C5A0374E6 +889C6B6A59168C4C5F2F6E7E73A9987D4E3870F75B8C7897633D665A769660CB +5B9B5A494E0781556C6A738B4EA167897F515F8065FA671B5FD859845A010000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005DCD5FAE537197E68FDD684556F4552F60DF4E3A6F4D7EF482C7840E59D4 +4F1F4F2A5C3E7EAC672A851A5473754F80C355829B4F4F4D6E2D8C135C096170 +536B761F6E29868A658795FB7EB9543B7A337D0A95EE55E17FC174EE631D8717 +6DA17A9D621165A1536763E16C835DEB545C94A84E4C6C618BEC5C4B65E0829C +68A7543E54346BCB6B664E9463425348821E4F0D4FAE575E620A96FE66647269 +52FF52A1609F8BEF661471996790897F785277FD6670563B54389521727A0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007A00606F5E0C6089819D591560DC718470EF6EAA6C5072806A8488AD5E2D +4E605AB3559C94E36D177CFB9699620F7EC6778E867E5323971E8F9666875CE1 +4FA072ED4E0B53A6590F54136380952851484ED99C9C7EA454B88D2488548237 +95F26D8E5F265ACC663E966973B0732E53BF817A99857FA15BAA967796507EBF +76F853A2957699997BB189446E584E617FD479658BE660F354CD4EAB98795DF7 +6A6150CF54118C618427785D9704524A54EE56A395006D885BB56DC666530000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +50 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005C0F5B5D6821809655787B11654869544E9B6B47874E978B534F631F643A +90AA659C80C18C10519968B0537887F961C86CC46CFB8C225C5185AA82AF950C +6B238F9B65B05FFB5FC34FE18845661F8165732960FA51745211578B5F6290A2 +884C91925E78674F602759D3514451F680F853086C7996C4718A4F114FEE7F9E +673D55C5950879C088967EE3589F620C9700865A5618987B5F908BB884C49157 +53D965ED5E8F755C60647D6E5A7F7EEA7EED8F6955A75BA360AC65CB73840000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +51 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009009766377297EDA9774859B5B667A7496EA884052CB718F5FAA65EC8BE2 +5BFB9A6F5DE16B896C5B8BAD8BAF900A8FC5538B62BC9E269E2D54404E2B82BD +7259869C5D1688596DAF96C554D14E9A8BB6710954BD960970DF6DF976D04E25 +781487125CA95EF68A00989C960E708E6CBF594463A9773C884D6F1482735830 +71D5538C781A96C155015F6671305BB48C1A9A8C6B83592E9E2F79E76768626C +4F6F75A17F8A6D0B96336C274EF075D2517B68376F3E90808170599674760000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +52 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000064475C2790657A918C2359DA54AC8200836F898180006930564E80367237 +91CE51B64E5F987563964E1A53F666F3814B591C6DB24E0058F9533B63D694F1 +4F9D4F0A886398905937905779FB4EEA80F075916C825B9C59E85F5D69058681 +501A5DF24E5977E34EE5827A6291661390915C794EBF5F7981C69038808475AB +4EA688D4610F6BC55FC64E4976CA6EA28BE38BAE8C0A8BD15F027FFC7FCC7ECE +8335836B56E06BB797F3963459FB541F94F66DEB5BC5996E5C395F1596900000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +53 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000537082F16A315A749E705E947F2883B984248425836787478FCE8D6276C8 +5F719896786C662054DF62E54F6381C375C85EB896CD8E0A86F9548F6CF36D8C +6C38607F52C775285E7D4F1860A05FE75C24753190AE94C072B96CB96E389149 +670953CB53F34F5191C98BF153C85E7C8FC26DE44E8E76C26986865E611A8206 +4F594FDE903E9C7C61096E1D6E1496854E885A3196E84E0E5C7F79B95B878BED +7FBD738957DF828B90C15401904755BB5CEA5FA161086B3272F180B28A890000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +54 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006D745BD388D598848C6B9A6D9E336E0A51A4514357A38881539F63F48F95 +56ED54585706733F6E907F188FDC82D1613F6028966266F07EA68D8A8DC394A5 +5CB37CA4670860A6960580184E9190E75300966851418FD08574915D665597F5 +5B55531D78386742683D54C9707E5BB08F7D518D572854B1651266828D5E8D43 +810F846C906D7CDF51FF85FB67A365E96FA186A48E81566A90207682707671E5 +8D2362E952196CFD8D3C600E589E618E66FE8D60624E55B36E23672D8F670000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +55 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000094E195F87728680569A8548B4E4D70B88BC86458658B5B857A84503A5BE8 +77BB6BE18A797C986CBE76CF65A98F975D2D5C5586386808536062187AD96E5B +7EFD6A1F7AE05F706F335F20638C6DA867564E085E108D264ED780C07634969C +62DB662D627E6CBC8D7571677F695146808753EC906E629854F286F08F998005 +951785178FD96D5973CD659F771F7504782781FB8D1E94884FA6679575B98BCA +9707632F9547963584B8632377415F8172F04E896014657462EF6B63653F0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +56 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005E2775C790D18BC1829D679D652F5431871877E580A281026C414E4B7EC7 +804C76F4690D6B966267503C4F84574063076B628DBE53EA65E87EB85FD7631A +63B781F381F47F6E5E1C5CD95236667A79E97A1A8D28709975D46EDE6CBB7A92 +4E2D76C55FE0949F88777EC879CD80BF91CD4EF24F17821F54685DDE6D328BCC +7CA58F7480985E1A549276B15B99663C9AA473E0682A86DB6731732A8BF88BDB +90107AF970DB716E62C477A956314E3B845767F152A986C08D2E94F87B510000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +57 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004F4F6CE8795D9A7B6293722A62FD4E1378168F6C64B08D5A7BC668695E84 +88C55986649E58EE72B6690E95258FFD8D5857607F008C0651C6634962D95353 +684C74228301914C55447740707C6D4A517954A88D4459FF6ECB6DC45B5C7D2B +4ED47C7D6ED35B5081EA6E0D5B579B0368D58E2A5B977EFC603B7EB590B98D70 +594F63CD79DF8DB3535265CF79568BC5963B7EC494BB7E825634918967007F6A +5C0A907566285DE64F5067DE505A4F5C57505EA7000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +58 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004E8D4E0C51404E105EFF53454E154E984E1E9B325B6C56694E2879BA4E3F +53154E47592D723B536E6C1056DF80E499976BD3777E9F174E364E9F9F104E5C +4E694E9382885B5B556C560F4EC4538D539D53A353A553AE97658D5D531A53F5 +5326532E533E8D5C5366536352025208520E522D5233523F5240524C525E5261 +525C84AF527D528252815290529351827F544EBB4EC34EC94EC24EE84EE14EEB +4EDE4F1B4EF34F224F644EF54F254F274F094F2B4F5E4F6765384F5A4F5D0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +59 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004F5F4F574F324F3D4F764F744F914F894F834F8F4F7E4F7B4FAA4F7C4FAC +4F944FE64FE84FEA4FC54FDA4FE34FDC4FD14FDF4FF85029504C4FF3502C500F +502E502D4FFE501C500C50255028507E504350555048504E506C507B50A550A7 +50A950BA50D6510650ED50EC50E650EE5107510B4EDD6C3D4F584F654FCE9FA0 +6C467C74516E5DFD9EC999985181591452F9530D8A07531051EB591951554EA0 +51564EB3886E88A44EB5811488D279805B3488037FB851AB51B151BD51BC0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000051C7519651A251A58BA08BA68BA78BAA8BB48BB58BB78BC28BC38BCB8BCF +8BCE8BD28BD38BD48BD68BD88BD98BDC8BDF8BE08BE48BE88BE98BEE8BF08BF3 +8BF68BF98BFC8BFF8C008C028C048C078C0C8C0F8C118C128C148C158C168C19 +8C1B8C188C1D8C1F8C208C218C258C278C2A8C2B8C2E8C2F8C328C338C358C36 +5369537A961D962296219631962A963D963C964296499654965F9667966C9672 +96749688968D969796B09097909B909D909990AC90A190B490B390B690BA0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000090B890B090CF90C590BE90D090C490C790D390E690E290DC90D790DB90EB +90EF90FE91049122911E91239131912F913991439146520D594252A252AC52AD +52BE54FF52D052D652F053DF71EE77CD5EF451F551FC9B2F53B65F01755A5DEF +574C57A957A1587E58BC58C558D15729572C572A57335739572E572F575C573B +574257695785576B5786577C577B5768576D5776577357AD57A4578C57B257CF +57A757B4579357A057D557D857DA57D957D257B857F457EF57F857E457DD0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5C +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000580B580D57FD57ED5800581E5819584458205865586C58815889589A5880 +99A89F1961FF8279827D827F828F828A82A88284828E82918297829982AB82B8 +82BE82B082C882CA82E3829882B782AE82CB82CC82C182A982B482A182AA829F +82C482CE82A482E1830982F782E4830F830782DC82F482D282D8830C82FB82D3 +8311831A83068314831582E082D5831C8351835B835C83088392833C83348331 +839B835E832F834F83478343835F834083178360832D833A8333836683650000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008368831B8369836C836A836D836E83B0837883B383B483A083AA8393839C +8385837C83B683A9837D83B8837B8398839E83A883BA83BC83C1840183E583D8 +58078418840B83DD83FD83D6841C84388411840683D483DF840F840383F883F9 +83EA83C583C0842683F083E1845C8451845A8459847384878488847A84898478 +843C844684698476848C848E8431846D84C184CD84D084E684BD84D384CA84BF +84BA84E084A184B984B4849784E584E3850C750D853884F08539851F853A0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008556853B84FF84FC8559854885688564855E857A77A285438572857B85A4 +85A88587858F857985AE859C858585B985B785B085D385C185DC85FF86278605 +86298616863C5EFE5F08593C594180375955595A5958530F5C225C255C2C5C34 +624C626A629F62BB62CA62DA62D762EE632262F66339634B634363AD63F66371 +637A638E63B4636D63AC638A636963AE63BC63F263F863E063FF63C463DE63CE +645263C663BE64456441640B641B6420640C64266421645E6484646D64960000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000647A64B764B8649964BA64C064D064D764E464E265096525652E5F0B5FD2 +75195F11535F53F153FD53E953E853FB541254165406544B5452545354545456 +54435421545754595423543254825494547754715464549A549B548454765466 +549D54D054AD54C254B454D254A754A654D354D4547254A354D554BB54BF54CC +54D954DA54DC54A954AA54A454DD54CF54DE551B54E7552054FD551454F35522 +5523550F55115527552A5567558F55B55549556D55415555553F5550553C0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +60 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005537555655755576557755335530555C558B55D2558355B155B955885581 +559F557E55D65591557B55DF55BD55BE5594559955EA55F755C9561F55D155EB +55EC55D455E655DD55C455EF55E555F255F355CC55CD55E855F555E48F94561E +5608560C56015624562355FE56005627562D565856395657562C564D56625659 +565C564C5654568656645671566B567B567C5685569356AF56D456D756DD56E1 +56F556EB56F956FF5704570A5709571C5E0F5E195E145E115E315E3B5E3C0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +61 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005E375E445E545E5B5E5E5E615C8C5C7A5C8D5C905C965C885C985C995C91 +5C9A5C9C5CB55CA25CBD5CAC5CAB5CB15CA35CC15CB75CC45CD25CE45CCB5CE5 +5D025D035D275D265D2E5D245D1E5D065D1B5D585D3E5D345D3D5D6C5D5B5D6F +5D5D5D6B5D4B5D4A5D695D745D825D995D9D8C735DB75DC55F735F775F825F87 +5F895F8C5F955F995F9C5FA85FAD5FB55FBC88625F6172AD72B072B472B772B8 +72C372C172CE72CD72D272E872EF72E972F272F472F7730172F3730372FA0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +62 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000072FB731773137321730A731E731D7315732273397325732C733873317350 +734D73577360736C736F737E821B592598E7592459029963996799689969996A +996B996C99749977997D998099849987998A998D999099919993999499955E80 +5E915E8B5E965EA55EA05EB95EB55EBE5EB38D535ED25ED15EDB5EE85EEA81BA +5FC45FC95FD65FCF60035FEE60045FE15FE45FFE600560065FEA5FED5FF86019 +60356026601B600F600D6029602B600A603F602160786079607B607A60420000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +63 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000606A607D6096609A60AD609D60836092608C609B60EC60BB60B160DD60D8 +60C660DA60B4612061266115612360F46100610E612B614A617561AC619461A7 +61B761D461F55FDD96B395E995EB95F195F395F595F695FC95FE960396049606 +9608960A960B960C960D960F96129615961696179619961A4E2C723F62156C35 +6C546C5C6C4A6CA36C856C906C946C8C6C686C696C746C766C866CA96CD06CD4 +6CAD6CF76CF86CF16CD76CB26CE06CD66CFA6CEB6CEE6CB16CD36CEF6CFE0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +64 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006D396D276D0C6D436D486D076D046D196D0E6D2B6D4D6D2E6D356D1A6D4F +6D526D546D336D916D6F6D9E6DA06D5E6D936D946D5C6D606D7C6D636E1A6DC7 +6DC56DDE6E0E6DBF6DE06E116DE66DDD6DD96E166DAB6E0C6DAE6E2B6E6E6E4E +6E6B6EB26E5F6E866E536E546E326E256E446EDF6EB16E986EE06F2D6EE26EA5 +6EA76EBD6EBB6EB76ED76EB46ECF6E8F6EC26E9F6F626F466F476F246F156EF9 +6F2F6F366F4B6F746F2A6F096F296F896F8D6F8C6F786F726F7C6F7A6FD10000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +65 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006FC96FA76FB96FB66FC26FE16FEE6FDE6FE06FEF701A7023701B70397035 +704F705E5B805B845B955B935BA55BB8752F9A9E64345BE45BEE89305BF08E47 +8B078FB68FD38FD58FE58FEE8FE48FE98FE68FF38FE890059004900B90269011 +900D9016902190359036902D902F9044905190529050906890589062905B66B9 +9074907D908290889083908B5F505F575F565F585C3B54AB5C505C595B715C63 +5C667FBC5F2A5F295F2D82745F3C9B3B5C6E59815983598D59A959AA59A30000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +66 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000599759CA59AB599E59A459D259B259AF59D759BE5A055A0659DD5A0859E3 +59D859F95A0C5A095A325A345A115A235A135A405A675A4A5A555A3C5A625A75 +80EC5AAA5A9B5A775A7A5ABE5AEB5AB25AD25AD45AB85AE05AE35AF15AD65AE6 +5AD85ADC5B095B175B165B325B375B405C155C1C5B5A5B655B735B515B535B62 +9A759A779A789A7A9A7F9A7D9A809A819A859A889A8A9A909A929A939A969A98 +9A9B9A9C9A9D9A9F9AA09AA29AA39AA59AA77E9F7EA17EA37EA57EA87EA90000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +67 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007EAD7EB07EBE7EC07EC17EC27EC97ECB7ECC7ED07ED47ED77EDB7EE07EE1 +7EE87EEB7EEE7EEF7EF17EF27F0D7EF67EFA7EFB7EFE7F017F027F037F077F08 +7F0B7F0C7F0F7F117F127F177F197F1C7F1B7F1F7F217F227F237F247F257F26 +7F277F2A7F2B7F2C7F2D7F2F7F307F317F327F337F355E7A757F5DDB753E9095 +738E739173AE73A2739F73CF73C273D173B773B373C073C973C873E573D9987C +740A73E973E773DE73BA73F2740F742A745B7426742574287430742E742C0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +68 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000741B741A7441745C7457745574597477746D747E749C748E748074817487 +748B749E74A874A9749074A774D274BA97EA97EB97EC674C6753675E67486769 +67A56787676A6773679867A7677567A8679E67AD678B6777677C67F0680967D8 +680A67E967B0680C67D967B567DA67B367DD680067C367B867E2680E67C167FD +6832683368606861684E6862684468646883681D68556866684168676840683E +684A6849682968B5688F687468776893686B68C2696E68FC691F692068F90000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +69 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000692468F0690B6901695768E369106971693969606942695D6984696B6980 +69986978693469CC6987698869CE6989696669636979699B69A769BB69AB69AD +69D469B169C169CA69DF699569E0698D69FF6A2F69ED6A176A186A6569F26A44 +6A3E6AA06A506A5B6A356A8E6A796A3D6A286A586A7C6A916A906AA96A976AAB +733773526B816B826B876B846B926B936B8D6B9A6B9B6BA16BAA8F6B8F6D8F71 +8F728F738F758F768F788F778F798F7A8F7C8F7E8F818F828F848F878F8B0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008F8D8F8E8F8F8F988F9A8ECE620B6217621B621F6222622162256224622C +81E774EF74F474FF750F75117513653465EE65EF65F0660A6619677266036615 +6600708566F7661D66346631663666358006665F66546641664F665666616657 +66776684668C66A7669D66BE66DB66DC66E666E98D328D338D368D3B8D3D8D40 +8D458D468D488D498D478D4D8D558D5989C789CA89CB89CC89CE89CF89D089D1 +726E729F725D7266726F727E727F7284728B728D728F72926308633263B00000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000643F64D880046BEA6BF36BFD6BF56BF96C056C076C066C0D6C156C186C19 +6C1A6C216C296C246C2A6C3265356555656B724D72527256723086625216809F +809C809380BC670A80BD80B180AB80AD80B480B780E780E880E980EA80DB80C2 +80C480D980CD80D7671080DD80EB80F180F480ED810D810E80F280FC67158112 +8C5A8136811E812C811881328148814C815381748159815A817181608169817C +817D816D8167584D5AB58188818281916ED581A381AA81CC672681CA81BB0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6C +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000081C181A66B246B376B396B436B466B5998D198D298D398D598D998DA6BB3 +5F406BC289F365909F51659365BC65C665C465C365CC65CE65D265D67080709C +7096709D70BB70C070B770AB70B170E870CA711071137116712F71317173715C +716871457172714A7178717A719871B371B571A871A071E071D471E771F9721D +7228706C7118716671B9623E623D624362486249793B794079467949795B795C +7953795A796279577960796F7967797A7985798A799A79A779B35FD15FD00000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000603C605D605A606760416059606360AB6106610D615D61A9619D61CB61D1 +62068080807F6C936CF66DFC77F677F87800780978177818781165AB782D781C +781D7839783A783B781F783C7825782C78237829784E786D7856785778267850 +7847784C786A789B7893789A7887789C78A178A378B278B978A578D478D978C9 +78EC78F2790578F479137924791E79349F9B9EF99EFB9EFC76F17704770D76F9 +77077708771A77227719772D7726773577387750775177477743775A77680000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000077627765777F778D777D7780778C7791779F77A077B077B577BD753A7540 +754E754B7548755B7572757975837F587F617F5F8A487F687F747F717F797F81 +7F7E76CD76E58832948594869487948B948A948C948D948F9490949494979495 +949A949B949C94A394A494AB94AA94AD94AC94AF94B094B294B494B694B794B8 +94B994BA94BC94BD94BF94C494C894C994CA94CB94CC94CD94CE94D094D194D2 +94D594D694D794D994D894DB94DE94DF94E094E294E494E594E794E894EA0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000094E994EB94EE94EF94F394F494F594F794F994FC94FD94FF950395029506 +95079509950A950D950E950F951295139514951595169518951B951D951E951F +9522952A952B9529952C953195329534953695379538953C953E953F95429535 +9544954595469549954C954E954F9552955395549556955795589559955B955E +955F955D95619562956495659566956795689569956A956B956C956F95719572 +9573953A77E777EC96C979D579ED79E379EB7A065D477A037A027A1E7A140000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +70 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007A397A377A519ECF99A57A707688768E7693769976A474DE74E0752C9E20 +9E229E289E299E2A9E2B9E2C9E329E319E369E389E379E399E3A9E3E9E419E42 +9E449E469E479E489E499E4B9E4C9E4E9E519E559E579E5A9E5B9E5C9E5E9E63 +9E669E679E689E699E6A9E6B9E6C9E719E6D9E7375927594759675A0759D75AC +75A375B375B475B875C475B175B075C375C275D675CD75E375E875E675E475EB +75E7760375F175FC75FF761076007605760C7617760A76257618761576190000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +71 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000761B763C762276207640762D7630763F76357643763E7633764D765E7654 +765C7656766B766F7FCA7AE67A787A797A807A867A887A957AA67AA07AAC7AA8 +7AAD7AB3886488698872887D887F888288A288C688B788BC88C988E288CE88E3 +88E588F1891A88FC88E888FE88F0892189198913891B890A8934892B89368941 +8966897B758B80E576B276B477DC801280148016801C80208022802580268027 +802980288031800B803580438046804D80528069807189839878988098830000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +72 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009889988C988D988F9894989A989B989E989F98A198A298A598A6864D8654 +866C866E867F867A867C867B86A8868D868B86AC869D86A786A386AA869386A9 +86B686C486B586CE86B086BA86B186AF86C986CF86B486E986F186F286ED86F3 +86D0871386DE86F486DF86D886D18703870786F88708870A870D87098723873B +871E8725872E871A873E87488734873187298737873F87828722877D877E877B +87608770874C876E878B87538763877C876487598765879387AF87A887D20000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +73 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000087C68788878587AD8797878387AB87E587AC87B587B387CB87D387BD87D1 +87C087CA87DB87EA87E087EE8816881387FE880A881B88218839883C7F367F42 +7F447F4582107AFA7AFD7B087B037B047B157B0A7B2B7B0F7B477B387B2A7B19 +7B2E7B317B207B257B247B337B3E7B1E7B587B5A7B457B757B4C7B5D7B607B6E +7B7B7B627B727B717B907BA67BA77BB87BAC7B9D7BA87B857BAA7B9C7BA27BAB +7BB47BD17BC17BCC7BDD7BDA7BE57BE67BEA7C0C7BFE7BFC7C0F7C167C0B0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +74 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007C1F7C2A7C267C387C417C4081FE82018202820481EC8844822182228223 +822D822F8228822B8238823B82338234823E82448249824B824F825A825F8268 +887E8885888888D888DF895E7F9D7F9F7FA77FAF7FB07FB27C7C65497C917C9D +7C9C7C9E7CA27CB27CBC7CBD7CC17CC77CCC7CCD7CC87CC57CD77CE8826E66A8 +7FBF7FCE7FD57FE57FE17FE67FE97FEE7FF37CF87D777DA67DAE7E477E9B9EB8 +9EB48D738D848D948D918DB18D678D6D8C478C49914A9150914E914F91640000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +75 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009162916191709169916F917D917E917291749179918C91859190918D9191 +91A291A391AA91AD91AE91AF91B591B491BA8C559E7E8DB88DEB8E058E598E69 +8DB58DBF8DBC8DBA8DC48DD68DD78DDA8DDE8DCE8DCF8DDB8DC68DEC8DF78DF8 +8DE38DF98DFB8DE48E098DFD8E148E1D8E1F8E2C8E2E8E238E2F8E3A8E408E39 +8E358E3D8E318E498E418E428E518E528E4A8E708E768E7C8E6F8E748E858E8F +8E948E908E9C8E9E8C788C828C8A8C858C988C94659B89D689DE89DA89DC0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +76 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000089E589EB89EF8A3E8B26975396E996F396EF970697019708970F970E972A +972D9730973E9F809F839F859F869F879F889F899F8A9F8C9EFE9F0B9F0D96B9 +96BC96BD96CE96D277BF96E0928E92AE92C8933E936A93CA938F943E946B9C7F +9C829C859C869C879C887A239C8B9C8E9C909C919C929C949C959C9A9C9B9C9E +9C9F9CA09CA19CA29CA39CA59CA69CA79CA89CA99CAB9CAD9CAE9CB09CB19CB2 +9CB39CB49CB59CB69CB79CBA9CBB9CBC9CBD9CC49CC59CC69CC79CCA9CCB0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +77 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009CCC9CCD9CCE9CCF9CD09CD39CD49CD59CD79CD89CD99CDC9CDD9CDF9CE2 +977C978597919792979497AF97AB97A397B297B49AB19AB09AB79E589AB69ABA +9ABC9AC19AC09AC59AC29ACB9ACC9AD19B459B439B479B499B489B4D9B5198E8 +990D992E995599549ADF9AE19AE69AEF9AEB9AFB9AED9AF99B089B0F9B139B1F +9B239EBD9EBE7E3B9E829E879E889E8B9E9293D69E9D9E9F9EDB9EDC9EDD9EE0 +9EDF9EE29EE99EE79EE59EEA9EEF9F229F2C9F2F9F399F379F3D9F3E9F440000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/gb2312.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/gb2312.enc new file mode 100644 index 00000000..4b2f8c73 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/gb2312.enc @@ -0,0 +1,1397 @@ +# Encoding file: euc-cn, multi-byte +M +003F 0 82 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +0080008100820083008400850086008700880089008A008B008C008D008E008F +0090009100920093009400950096009700980099009A009B009C009D009E009F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +A1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000030003001300230FB02C902C700A8300330052015FF5E2225202620182019 +201C201D3014301530083009300A300B300C300D300E300F3016301730103011 +00B100D700F72236222722282211220F222A222922082237221A22A522252220 +23122299222B222E2261224C2248223D221D2260226E226F22642265221E2235 +22342642264000B0203220332103FF0400A4FFE0FFE1203000A7211626062605 +25CB25CF25CE25C725C625A125A025B325B2203B219221902191219330130000 +A2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000024882489248A248B248C248D248E248F2490249124922493249424952496 +249724982499249A249B247424752476247724782479247A247B247C247D247E +247F248024812482248324842485248624872460246124622463246424652466 +2467246824690000000032203221322232233224322532263227322832290000 +00002160216121622163216421652166216721682169216A216B000000000000 +A3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000FF01FF02FF03FFE5FF05FF06FF07FF08FF09FF0AFF0BFF0CFF0DFF0EFF0F +FF10FF11FF12FF13FF14FF15FF16FF17FF18FF19FF1AFF1BFF1CFF1DFF1EFF1F +FF20FF21FF22FF23FF24FF25FF26FF27FF28FF29FF2AFF2BFF2CFF2DFF2EFF2F +FF30FF31FF32FF33FF34FF35FF36FF37FF38FF39FF3AFF3BFF3CFF3DFF3EFF3F +FF40FF41FF42FF43FF44FF45FF46FF47FF48FF49FF4AFF4BFF4CFF4DFF4EFF4F +FF50FF51FF52FF53FF54FF55FF56FF57FF58FF59FF5AFF5BFF5CFF5DFFE30000 +A4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000304130423043304430453046304730483049304A304B304C304D304E304F +3050305130523053305430553056305730583059305A305B305C305D305E305F +3060306130623063306430653066306730683069306A306B306C306D306E306F +3070307130723073307430753076307730783079307A307B307C307D307E307F +3080308130823083308430853086308730883089308A308B308C308D308E308F +3090309130923093000000000000000000000000000000000000000000000000 +A5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000030A130A230A330A430A530A630A730A830A930AA30AB30AC30AD30AE30AF +30B030B130B230B330B430B530B630B730B830B930BA30BB30BC30BD30BE30BF +30C030C130C230C330C430C530C630C730C830C930CA30CB30CC30CD30CE30CF +30D030D130D230D330D430D530D630D730D830D930DA30DB30DC30DD30DE30DF +30E030E130E230E330E430E530E630E730E830E930EA30EB30EC30ED30EE30EF +30F030F130F230F330F430F530F6000000000000000000000000000000000000 +A6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000039103920393039403950396039703980399039A039B039C039D039E039F +03A003A103A303A403A503A603A703A803A90000000000000000000000000000 +000003B103B203B303B403B503B603B703B803B903BA03BB03BC03BD03BE03BF +03C003C103C303C403C503C603C703C803C90000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +A7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000004100411041204130414041504010416041704180419041A041B041C041D +041E041F0420042104220423042404250426042704280429042A042B042C042D +042E042F00000000000000000000000000000000000000000000000000000000 +000004300431043204330434043504510436043704380439043A043B043C043D +043E043F0440044104420443044404450446044704480449044A044B044C044D +044E044F00000000000000000000000000000000000000000000000000000000 +A8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000010100E101CE00E0011300E9011B00E8012B00ED01D000EC014D00F301D2 +00F2016B00FA01D400F901D601D801DA01DC00FC00EA00000000000000000000 +0000000000000000000031053106310731083109310A310B310C310D310E310F +3110311131123113311431153116311731183119311A311B311C311D311E311F +3120312131223123312431253126312731283129000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +A9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00000000000000002500250125022503250425052506250725082509250A250B +250C250D250E250F2510251125122513251425152516251725182519251A251B +251C251D251E251F2520252125222523252425252526252725282529252A252B +252C252D252E252F2530253125322533253425352536253725382539253A253B +253C253D253E253F2540254125422543254425452546254725482549254A254B +0000000000000000000000000000000000000000000000000000000000000000 +B0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000554A963F57C3632854CE550954C07691764C853C77EE827E788D72319698 +978D6C285B894FFA630966975CB880FA684880AE660276CE51F9655671AC7FF1 +888450B2596561CA6FB382AD634C625253ED54277B06516B75A45DF462D48DCB +9776628A8019575D97387F627238767D67CF767E64464F708D2562DC7A176591 +73ED642C6273822C9881677F7248626E62CC4F3474E3534A529E7ECA90A65E2E +6886699C81807ED168D278C5868C9551508D8C2482DE80DE5305891252650000 +B1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000858496F94FDD582199715B9D62B162A566B48C799C8D7206676F789160B2 +535153178F8880CC8D1D94A1500D72C8590760EB711988AB595482EF672C7B28 +5D297EF7752D6CF58E668FF8903C9F3B6BD491197B145F7C78A784D6853D6BD5 +6BD96BD65E015E8775F995ED655D5F0A5FC58F9F58C181C2907F965B97AD8FB9 +7F168D2C62414FBF53D8535E8FA88FA98FAB904D68075F6A819888689CD6618B +522B762A5F6C658C6FD26EE85BBE6448517551B067C44E1979C9997C70B30000 +B2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000075C55E7673BB83E064AD62E894B56CE2535A52C3640F94C27B944F2F5E1B +82368116818A6E246CCA9A736355535C54FA886557E04E0D5E036B657C3F90E8 +601664E6731C88C16750624D8D22776C8E2991C75F6983DC8521991053C28695 +6B8B60ED60E8707F82CD82314ED36CA785CF64CD7CD969FD66F9834953957B56 +4FA7518C6D4B5C428E6D63D253C9832C833667E578B4643D5BDF5C945DEE8BE7 +62C667F48C7A640063BA8749998B8C177F2094F24EA7961098A4660C73160000 +B3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000573A5C1D5E38957F507F80A05382655E7545553150218D856284949E671D +56326F6E5DE2543570928F66626F64A463A35F7B6F8890F481E38FB05C186668 +5FF16C8996488D81886C649179F057CE6A59621054484E587A0B60E96F848BDA +627F901E9A8B79E4540375F4630153196C608FDF5F1B9A70803B9F7F4F885C3A +8D647FC565A570BD514551B2866B5D075BA062BD916C75748E0C7A2061017B79 +4EC77EF877854E1181ED521D51FA6A7153A88E87950496CF6EC19664695A0000 +B4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000784050A877D7641089E6590463E35DDD7A7F693D4F20823955984E3275AE +7A975E625E8A95EF521B5439708A6376952457826625693F918755076DF37EAF +882262337EF075B5832878C196CC8F9E614874F78BCD6B64523A8D506B21806A +847156F153064ECE4E1B51D17C97918B7C074FC38E7F7BE17A9C64675D1450AC +810676017CB96DEC7FE067515B585BF878CB64AE641363AA632B9519642D8FBE +7B5476296253592754466B7950A362345E266B864EE38D37888B5F85902E0000 +B5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006020803D62C54E39535590F863B880C665E66C2E4F4660EE6DE18BDE5F39 +86CB5F536321515A83616863520063638E4850125C9B79775BFC52307A3B60BC +905376D75FB75F9776848E6C706F767B7B4977AA51F3909358244F4E6EF48FEA +654C7B1B72C46DA47FDF5AE162B55E95573084827B2C5E1D5F1F90127F1498A0 +63826EC7789870B95178975B57AB75354F4375385E9760E659606DC06BBF7889 +53FC96D551CB52016389540A94938C038DCC7239789F87768FED8C0D53E00000 +B6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004E0176EF53EE948998769F0E952D5B9A8BA24E224E1C51AC846361C252A8 +680B4F97606B51BB6D1E515C6296659796618C46901775D890FD77636BD2728A +72EC8BFB583577798D4C675C9540809A5EA66E2159927AEF77ED953B6BB565AD +7F0E58065151961F5BF958A954288E726566987F56E4949D76FE9041638754C6 +591A593A579B8EB267358DFA8235524160F0581586FE5CE89E454FC4989D8BB9 +5A2560765384627C904F9102997F6069800C513F80335C1499756D314E8C0000 +B7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008D3053D17F5A7B4F4F104E4F96006CD573D085E95E06756A7FFB6A0A77FE +94927E4151E170E653CD8FD483038D2972AF996D6CDB574A82B365B980AA623F +963259A84EFF8BBF7EBA653E83F2975E556198DE80A5532A8BFD542080BA5E9F +6CB88D3982AC915A54296C1B52067EB7575F711A6C7E7C89594B4EFD5FFF6124 +7CAA4E305C0167AB87025CF0950B98CE75AF70FD902251AF7F1D8BBD594951E4 +4F5B5426592B657780A45B75627662C28F905E456C1F7B264F0F4FD8670D0000 +B8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006D6E6DAA798F88B15F17752B629A8F854FEF91DC65A7812F81515E9C8150 +8D74526F89868D4B590D50854ED8961C723681798D1F5BCC8BA3964459877F1A +54905676560E8BE565396982949976D66E895E727518674667D17AFF809D8D76 +611F79C665628D635188521A94A27F38809B7EB25C976E2F67607BD9768B9AD8 +818F7F947CD5641E95507A3F544A54E56B4C640162089E3D80F3759952729769 +845B683C86E49601969494EC4E2A54047ED968398DDF801566F45E9A7FB90000 +B9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000057C2803F68975DE5653B529F606D9F9A4F9B8EAC516C5BAB5F135DE96C5E +62F18D21517194A952FE6C9F82DF72D757A267848D2D591F8F9C83C754957B8D +4F306CBD5B6459D19F1353E486CA9AA88C3780A16545987E56FA96C7522E74DC +52505BE1630289024E5662D0602A68FA51735B9851A089C27BA199867F5060EF +704C8D2F51495E7F901B747089C4572D78455F529F9F95FA8F689B3C8BE17678 +684267DC8DEA8D35523D8F8A6EDA68CD950590ED56FD679C88F98FC754C80000 +BA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009AB85B696D776C264EA55BB39A87916361A890AF97E9542B6DB55BD251FD +558A7F557FF064BC634D65F161BE608D710A6C576C49592F676D822A58D5568E +8C6A6BEB90DD597D801753F76D695475559D837783CF683879BE548C4F555408 +76D28C8996026CB36DB88D6B89109E648D3A563F9ED175D55F8872E0606854FC +4EA86A2A886160528F7054C470D886799E3F6D2A5B8F5F187EA255894FAF7334 +543C539A5019540E547C4E4E5FFD745A58F6846B80E1877472D07CCA6E560000 +BB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005F27864E552C62A44E926CAA623782B154D7534E733E6ED1753B52125316 +8BDD69D05F8A60006DEE574F6B2273AF68538FD87F13636260A3552475EA8C62 +71156DA35BA65E7B8352614C9EC478FA87577C27768751F060F6714C66435E4C +604D8C0E707063258F895FBD606286D456DE6BC160946167534960E066668D3F +79FD4F1A70E96C478BB38BF27ED88364660F5A5A9B426D516DF78C416D3B4F19 +706B83B7621660D1970D8D27797851FB573E57FA673A75787A3D79EF7B950000 +BC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000808C99658FF96FC08BA59E2159EC7EE97F095409678168D88F917C4D96C6 +53CA602575BE6C7253735AC97EA7632451E0810A5DF184DF628051805B634F0E +796D524260B86D4E5BC45BC28BA18BB065E25FCC964559937EE77EAA560967B7 +59394F735BB652A0835A988A8D3E753294BE50477A3C4EF767B69A7E5AC16B7C +76D1575A5C167B3A95F4714E517C80A9827059787F04832768C067EC78B17877 +62E363617B804FED526A51CF835069DB92748DF58D3189C1952E7BAD4EF60000 +BD +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000506582305251996F6E106E856DA75EFA50F559DC5C066D466C5F7586848B +686859568BB253209171964D854969127901712680F64EA490CA6D479A845A07 +56BC640594F077EB4FA5811A72E189D2997A7F347EDE527F655991758F7F8F83 +53EB7A9663ED63A5768679F888579636622A52AB8282685467706377776B7AED +6D017ED389E359D0621285C982A5754C501F4ECB75A58BEB5C4A5DFE7B4B65A4 +91D14ECA6D25895F7D2795264EC58C288FDB9773664B79818FD170EC6D780000 +BE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005C3D52B283465162830E775B66769CB84EAC60CA7CBE7CB37ECF4E958B66 +666F988897595883656C955C5F8475C997567ADF7ADE51C070AF7A9863EA7A76 +7EA0739697ED4E4570784E5D915253A9655165E781FC8205548E5C31759A97A0 +62D872D975BD5C459A7983CA5C40548077E94E3E6CAE805A62D2636E5DE85177 +8DDD8E1E952F4FF153E560E770AC526763509E435A1F5026773753777EE26485 +652B628963985014723589C951B38BC07EDD574783CC94A7519B541B5CFB0000 +BF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004FCA7AE36D5A90E19A8F55805496536154AF5F0063E9697751EF6168520A +582A52D8574E780D770B5EB761777CE0625B62974EA27095800362F770E49760 +577782DB67EF68F578D5989779D158F354B353EF6E34514B523B5BA28BFE80AF +554357A660735751542D7A7A60505B5463A762A053E362635BC767AF54ED7A9F +82E691775E9388E4593857AE630E8DE880EF57577B774FA95FEB5BBD6B3E5321 +7B5072C2684677FF773665F751B54E8F76D45CBF7AA58475594E9B4150800000 +C0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000998861276E8357646606634656F062EC62695ED39614578362C955878721 +814A8FA3556683B167658D5684DD5A6A680F62E67BEE961151706F9C8C3063FD +89C861D27F0670C26EE57405699472FC5ECA90CE67176D6A635E52B372628001 +4F6C59E5916A70D96D9D52D24E5096F7956D857E78CA7D2F5121579264C2808B +7C7B6CEA68F1695E51B7539868A872819ECE7BF172F879BB6F137406674E91CC +9CA4793C83898354540F68174E3D538952B1783E5386522950884F8B4FD00000 +C1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000075E27ACB7C926CA596B6529B748354E94FE9805483B28FDE95705EC9601C +6D9F5E18655B813894FE604B70BC7EC37CAE51C968817CB1826F4E248F8691CF +667E4EAE8C0564A9804A50DA759771CE5BE58FBD6F664E86648295635ED66599 +521788C270C852A3730E7433679778F797164E3490BB9CDE6DCB51DB8D41541D +62CE73B283F196F69F8494C34F367F9A51CC707596755CAD988653E64EE46E9C +740969B4786B998F7559521876246D4167F3516D9F99804B54997B3C7ABF0000 +C2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009686578462E29647697C5A0464027BD36F0F964B82A6536298855E907089 +63B35364864F9C819E93788C97328DEF8D429E7F6F5E79845F559646622E9A74 +541594DD4FA365C55C655C617F1586516C2F5F8B73876EE47EFF5CE6631B5B6A +6EE653754E7163A0756562A18F6E4F264ED16CA67EB68BBA841D87BA7F57903B +95237BA99AA188F8843D6D1B9A867EDC59889EBB739B780186829A6C9A82561B +541757CB4E709EA653568FC881097792999286EE6EE1851366FC61626F2B0000 +C3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008C298292832B76F26C135FD983BD732B8305951A6BDB77DB94C6536F8302 +51925E3D8C8C8D384E4873AB679A68859176970971646CA177095A9295416BCF +7F8E66275BD059B95A9A95E895F74EEC840C84996AAC76DF9530731B68A65B5F +772F919A97617CDC8FF78C1C5F257C7379D889C56CCC871C5BC65E4268C97720 +7EF55195514D52C95A297F05976282D763CF778485D079D26E3A5E9959998511 +706D6C1162BF76BF654F60AF95FD660E879F9E2394ED540D547D8C2C64780000 +C4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000647986116A21819C78E864699B5462B9672B83AB58A89ED86CAB6F205BDE +964C8C0B725F67D062C772614EA959C66BCD589366AE5E5552DF6155672876EE +776672677A4662FF54EA545094A090A35A1C7EB36C164E435976801059485357 +753796BE56CA63208111607C95F96DD65462998151855AE980FD59AE9713502A +6CE55C3C62DF4F60533F817B90066EBA852B62C85E7478BE64B5637B5FF55A18 +917F9E1F5C3F634F80425B7D556E954A954D6D8560A867E072DE51DD5B810000 +C5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000062E76CDE725B626D94AE7EBD81136D53519C5F04597452AA601259736696 +8650759F632A61E67CEF8BFA54E66B279E256BB485D5545550766CA4556A8DB4 +722C5E156015743662CD6392724C5F986E436D3E65006F5876D878D076FC7554 +522453DB4E535E9E65C1802A80D6629B5486522870AE888D8DD16CE1547880DA +57F988F48D54966A914D4F696C9B55B776C6783062A870F96F8E5F6D84EC68DA +787C7BF781A8670B9E4F636778B0576F78129739627962AB528874356BD70000 +C6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005564813E75B276AE533975DE50FB5C418B6C7BC7504F72479A9798D86F02 +74E27968648777A562FC98918D2B54C180584E52576A82F9840D5E7351ED74F6 +8BC45C4F57616CFC98875A4678349B448FEB7C955256625194FA4EC683868461 +83E984B257D467345703666E6D668C3166DD7011671F6B3A6816621A59BB4E03 +51C46F0667D26C8F517668CB59476B6775665D0E81109F5065D7794879419A91 +8D775C824E5E4F01542F5951780C56686C148FC45F036C7D6CE38BAB63900000 +C7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000060706D3D72756266948E94C553438FC17B7E4EDF8C264E7E9ED494B194B3 +524D6F5C90636D458C3458115D4C6B206B4967AA545B81547F8C589985375F3A +62A26A47953965726084686577A74E544FA85DE7979864AC7FD85CED4FCF7A8D +520783044E14602F7A8394A64FB54EB279E6743452E482B964D279BD5BDD6C81 +97528F7B6C22503E537F6E0564CE66746C3060C598778BF75E86743C7A7779CB +4E1890B174036C4256DA914B6CC58D8B533A86C666F28EAF5C489A716E200000 +C8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000053D65A369F8B8DA353BB570898A76743919B6CC9516875CA62F372AC5238 +529D7F3A7094763853749E4A69B7786E96C088D97FA4713671C3518967D374E4 +58E4651856B78BA9997662707ED560F970ED58EC4EC14EBA5FCD97E74EFB8BA4 +5203598A7EAB62544ECD65E5620E833884C98363878D71946EB65BB97ED25197 +63C967D480898339881551125B7A59828FB14E736C5D516589258F6F962E854A +745E951095F06DA682E55F3164926D128428816E9CC3585E8D5B4E0953C10000 +C9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004F1E6563685155D34E2764149A9A626B5AC2745F82726DA968EE50E7838E +7802674052396C997EB150BB5565715E7B5B665273CA82EB67495C715220717D +886B95EA965564C58D6181B355846C5562477F2E58924F2455468D4F664C4E0A +5C1A88F368A2634E7A0D70E7828D52FA97F65C1154E890B57ECD59628D4A86C7 +820C820D8D6664445C0461516D89793E8BBE78377533547B4F388EAB6DF15A20 +7EC5795E6C885BA15A76751A80BE614E6E1758F0751F7525727253477EF30000 +CA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000770176DB526980DC57235E08593172EE65BD6E7F8BD75C388671534177F3 +62FE65F64EC098DF86805B9E8BC653F277E24F7F5C4E9A7659CB5F0F793A58EB +4E1667FF4E8B62ED8A93901D52BF662F55DC566C90024ED54F8D91CA99706C0F +5E0260435BA489C68BD56536624B99965B885BFF6388552E53D77626517D852C +67A268B36B8A62928F9353D482126DD1758F4E668D4E5B70719F85AF669166D9 +7F7287009ECD9F205C5E672F8FF06811675F620D7AD658855EB665706F310000 +CB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000060555237800D6454887075295E05681362F4971C53CC723D8C016C347761 +7A0E542E77AC987A821C8BF47855671470C165AF64955636601D79C153F84E1D +6B7B80865BFA55E356DB4F3A4F3C99725DF3677E80386002988290015B8B8BBC +8BF5641C825864DE55FD82CF91654FD77D20901F7C9F50F358516EAF5BBF8BC9 +80839178849C7B97867D968B968F7EE59AD3788E5C817A57904296A7795F5B59 +635F7B0B84D168AD55067F2974107D2295016240584C4ED65B83597958540000 +CC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000736D631E8E4B8E0F80CE82D462AC53F06CF0915E592A60016C70574D644A +8D2A762B6EE9575B6A8075F06F6D8C2D8C0857666BEF889278B363A253F970AD +6C645858642A580268E0819B55107CD650188EBA6DCC8D9F70EB638F6D9B6ED4 +7EE68404684390036DD896768BA85957727985E4817E75BC8A8A68AF52548E22 +951163D098988E44557C4F5366FF568F60D56D9552435C4959296DFB586B7530 +751C606C82148146631167618FE2773A8DF38D3494C15E165385542C70C30000 +CD +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006C405EF7505C4EAD5EAD633A8247901A6850916E77B3540C94DC5F647AE5 +687663457B527EDF75DB507762955934900F51F879C37A8156FE5F9290146D82 +5C60571F541051546E4D56E263A89893817F8715892A9000541E5C6F81C062D6 +625881319E3596409A6E9A7C692D59A562D3553E631654C786D96D3C5A0374E6 +889C6B6A59168C4C5F2F6E7E73A9987D4E3870F75B8C7897633D665A769660CB +5B9B5A494E0781556C6A738B4EA167897F515F8065FA671B5FD859845A010000 +CE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005DCD5FAE537197E68FDD684556F4552F60DF4E3A6F4D7EF482C7840E59D4 +4F1F4F2A5C3E7EAC672A851A5473754F80C355829B4F4F4D6E2D8C135C096170 +536B761F6E29868A658795FB7EB9543B7A337D0A95EE55E17FC174EE631D8717 +6DA17A9D621165A1536763E16C835DEB545C94A84E4C6C618BEC5C4B65E0829C +68A7543E54346BCB6B664E9463425348821E4F0D4FAE575E620A96FE66647269 +52FF52A1609F8BEF661471996790897F785277FD6670563B54389521727A0000 +CF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007A00606F5E0C6089819D591560DC718470EF6EAA6C5072806A8488AD5E2D +4E605AB3559C94E36D177CFB9699620F7EC6778E867E5323971E8F9666875CE1 +4FA072ED4E0B53A6590F54136380952851484ED99C9C7EA454B88D2488548237 +95F26D8E5F265ACC663E966973B0732E53BF817A99857FA15BAA967796507EBF +76F853A2957699997BB189446E584E617FD479658BE660F354CD4EAB98795DF7 +6A6150CF54118C618427785D9704524A54EE56A395006D885BB56DC666530000 +D0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005C0F5B5D6821809655787B11654869544E9B6B47874E978B534F631F643A +90AA659C80C18C10519968B0537887F961C86CC46CFB8C225C5185AA82AF950C +6B238F9B65B05FFB5FC34FE18845661F8165732960FA51745211578B5F6290A2 +884C91925E78674F602759D3514451F680F853086C7996C4718A4F114FEE7F9E +673D55C5950879C088967EE3589F620C9700865A5618987B5F908BB884C49157 +53D965ED5E8F755C60647D6E5A7F7EEA7EED8F6955A75BA360AC65CB73840000 +D1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009009766377297EDA9774859B5B667A7496EA884052CB718F5FAA65EC8BE2 +5BFB9A6F5DE16B896C5B8BAD8BAF900A8FC5538B62BC9E269E2D54404E2B82BD +7259869C5D1688596DAF96C554D14E9A8BB6710954BD960970DF6DF976D04E25 +781487125CA95EF68A00989C960E708E6CBF594463A9773C884D6F1482735830 +71D5538C781A96C155015F6671305BB48C1A9A8C6B83592E9E2F79E76768626C +4F6F75A17F8A6D0B96336C274EF075D2517B68376F3E90808170599674760000 +D2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000064475C2790657A918C2359DA54AC8200836F898180006930564E80367237 +91CE51B64E5F987563964E1A53F666F3814B591C6DB24E0058F9533B63D694F1 +4F9D4F0A886398905937905779FB4EEA80F075916C825B9C59E85F5D69058681 +501A5DF24E5977E34EE5827A6291661390915C794EBF5F7981C69038808475AB +4EA688D4610F6BC55FC64E4976CA6EA28BE38BAE8C0A8BD15F027FFC7FCC7ECE +8335836B56E06BB797F3963459FB541F94F66DEB5BC5996E5C395F1596900000 +D3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000537082F16A315A749E705E947F2883B984248425836787478FCE8D6276C8 +5F719896786C662054DF62E54F6381C375C85EB896CD8E0A86F9548F6CF36D8C +6C38607F52C775285E7D4F1860A05FE75C24753190AE94C072B96CB96E389149 +670953CB53F34F5191C98BF153C85E7C8FC26DE44E8E76C26986865E611A8206 +4F594FDE903E9C7C61096E1D6E1496854E885A3196E84E0E5C7F79B95B878BED +7FBD738957DF828B90C15401904755BB5CEA5FA161086B3272F180B28A890000 +D4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006D745BD388D598848C6B9A6D9E336E0A51A4514357A38881539F63F48F95 +56ED54585706733F6E907F188FDC82D1613F6028966266F07EA68D8A8DC394A5 +5CB37CA4670860A6960580184E9190E75300966851418FD08574915D665597F5 +5B55531D78386742683D54C9707E5BB08F7D518D572854B1651266828D5E8D43 +810F846C906D7CDF51FF85FB67A365E96FA186A48E81566A90207682707671E5 +8D2362E952196CFD8D3C600E589E618E66FE8D60624E55B36E23672D8F670000 +D5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000094E195F87728680569A8548B4E4D70B88BC86458658B5B857A84503A5BE8 +77BB6BE18A797C986CBE76CF65A98F975D2D5C5586386808536062187AD96E5B +7EFD6A1F7AE05F706F335F20638C6DA867564E085E108D264ED780C07634969C +62DB662D627E6CBC8D7571677F695146808753EC906E629854F286F08F998005 +951785178FD96D5973CD659F771F7504782781FB8D1E94884FA6679575B98BCA +9707632F9547963584B8632377415F8172F04E896014657462EF6B63653F0000 +D6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005E2775C790D18BC1829D679D652F5431871877E580A281026C414E4B7EC7 +804C76F4690D6B966267503C4F84574063076B628DBE53EA65E87EB85FD7631A +63B781F381F47F6E5E1C5CD95236667A79E97A1A8D28709975D46EDE6CBB7A92 +4E2D76C55FE0949F88777EC879CD80BF91CD4EF24F17821F54685DDE6D328BCC +7CA58F7480985E1A549276B15B99663C9AA473E0682A86DB6731732A8BF88BDB +90107AF970DB716E62C477A956314E3B845767F152A986C08D2E94F87B510000 +D7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004F4F6CE8795D9A7B6293722A62FD4E1378168F6C64B08D5A7BC668695E84 +88C55986649E58EE72B6690E95258FFD8D5857607F008C0651C6634962D95353 +684C74228301914C55447740707C6D4A517954A88D4459FF6ECB6DC45B5C7D2B +4ED47C7D6ED35B5081EA6E0D5B579B0368D58E2A5B977EFC603B7EB590B98D70 +594F63CD79DF8DB3535265CF79568BC5963B7EC494BB7E825634918967007F6A +5C0A907566285DE64F5067DE505A4F5C57505EA7000000000000000000000000 +D8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004E8D4E0C51404E105EFF53454E154E984E1E9B325B6C56694E2879BA4E3F +53154E47592D723B536E6C1056DF80E499976BD3777E9F174E364E9F9F104E5C +4E694E9382885B5B556C560F4EC4538D539D53A353A553AE97658D5D531A53F5 +5326532E533E8D5C5366536352025208520E522D5233523F5240524C525E5261 +525C84AF527D528252815290529351827F544EBB4EC34EC94EC24EE84EE14EEB +4EDE4F1B4EF34F224F644EF54F254F274F094F2B4F5E4F6765384F5A4F5D0000 +D9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004F5F4F574F324F3D4F764F744F914F894F834F8F4F7E4F7B4FAA4F7C4FAC +4F944FE64FE84FEA4FC54FDA4FE34FDC4FD14FDF4FF85029504C4FF3502C500F +502E502D4FFE501C500C50255028507E504350555048504E506C507B50A550A7 +50A950BA50D6510650ED50EC50E650EE5107510B4EDD6C3D4F584F654FCE9FA0 +6C467C74516E5DFD9EC999985181591452F9530D8A07531051EB591951554EA0 +51564EB3886E88A44EB5811488D279805B3488037FB851AB51B151BD51BC0000 +DA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000051C7519651A251A58BA08BA68BA78BAA8BB48BB58BB78BC28BC38BCB8BCF +8BCE8BD28BD38BD48BD68BD88BD98BDC8BDF8BE08BE48BE88BE98BEE8BF08BF3 +8BF68BF98BFC8BFF8C008C028C048C078C0C8C0F8C118C128C148C158C168C19 +8C1B8C188C1D8C1F8C208C218C258C278C2A8C2B8C2E8C2F8C328C338C358C36 +5369537A961D962296219631962A963D963C964296499654965F9667966C9672 +96749688968D969796B09097909B909D909990AC90A190B490B390B690BA0000 +DB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000090B890B090CF90C590BE90D090C490C790D390E690E290DC90D790DB90EB +90EF90FE91049122911E91239131912F913991439146520D594252A252AC52AD +52BE54FF52D052D652F053DF71EE77CD5EF451F551FC9B2F53B65F01755A5DEF +574C57A957A1587E58BC58C558D15729572C572A57335739572E572F575C573B +574257695785576B5786577C577B5768576D5776577357AD57A4578C57B257CF +57A757B4579357A057D557D857DA57D957D257B857F457EF57F857E457DD0000 +DC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000580B580D57FD57ED5800581E5819584458205865586C58815889589A5880 +99A89F1961FF8279827D827F828F828A82A88284828E82918297829982AB82B8 +82BE82B082C882CA82E3829882B782AE82CB82CC82C182A982B482A182AA829F +82C482CE82A482E1830982F782E4830F830782DC82F482D282D8830C82FB82D3 +8311831A83068314831582E082D5831C8351835B835C83088392833C83348331 +839B835E832F834F83478343835F834083178360832D833A8333836683650000 +DD +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008368831B8369836C836A836D836E83B0837883B383B483A083AA8393839C +8385837C83B683A9837D83B8837B8398839E83A883BA83BC83C1840183E583D8 +58078418840B83DD83FD83D6841C84388411840683D483DF840F840383F883F9 +83EA83C583C0842683F083E1845C8451845A8459847384878488847A84898478 +843C844684698476848C848E8431846D84C184CD84D084E684BD84D384CA84BF +84BA84E084A184B984B4849784E584E3850C750D853884F08539851F853A0000 +DE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008556853B84FF84FC8559854885688564855E857A77A285438572857B85A4 +85A88587858F857985AE859C858585B985B785B085D385C185DC85FF86278605 +86298616863C5EFE5F08593C594180375955595A5958530F5C225C255C2C5C34 +624C626A629F62BB62CA62DA62D762EE632262F66339634B634363AD63F66371 +637A638E63B4636D63AC638A636963AE63BC63F263F863E063FF63C463DE63CE +645263C663BE64456441640B641B6420640C64266421645E6484646D64960000 +DF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000647A64B764B8649964BA64C064D064D764E464E265096525652E5F0B5FD2 +75195F11535F53F153FD53E953E853FB541254165406544B5452545354545456 +54435421545754595423543254825494547754715464549A549B548454765466 +549D54D054AD54C254B454D254A754A654D354D4547254A354D554BB54BF54CC +54D954DA54DC54A954AA54A454DD54CF54DE551B54E7552054FD551454F35522 +5523550F55115527552A5567558F55B55549556D55415555553F5550553C0000 +E0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005537555655755576557755335530555C558B55D2558355B155B955885581 +559F557E55D65591557B55DF55BD55BE5594559955EA55F755C9561F55D155EB +55EC55D455E655DD55C455EF55E555F255F355CC55CD55E855F555E48F94561E +5608560C56015624562355FE56005627562D565856395657562C564D56625659 +565C564C5654568656645671566B567B567C5685569356AF56D456D756DD56E1 +56F556EB56F956FF5704570A5709571C5E0F5E195E145E115E315E3B5E3C0000 +E1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005E375E445E545E5B5E5E5E615C8C5C7A5C8D5C905C965C885C985C995C91 +5C9A5C9C5CB55CA25CBD5CAC5CAB5CB15CA35CC15CB75CC45CD25CE45CCB5CE5 +5D025D035D275D265D2E5D245D1E5D065D1B5D585D3E5D345D3D5D6C5D5B5D6F +5D5D5D6B5D4B5D4A5D695D745D825D995D9D8C735DB75DC55F735F775F825F87 +5F895F8C5F955F995F9C5FA85FAD5FB55FBC88625F6172AD72B072B472B772B8 +72C372C172CE72CD72D272E872EF72E972F272F472F7730172F3730372FA0000 +E2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000072FB731773137321730A731E731D7315732273397325732C733873317350 +734D73577360736C736F737E821B592598E7592459029963996799689969996A +996B996C99749977997D998099849987998A998D999099919993999499955E80 +5E915E8B5E965EA55EA05EB95EB55EBE5EB38D535ED25ED15EDB5EE85EEA81BA +5FC45FC95FD65FCF60035FEE60045FE15FE45FFE600560065FEA5FED5FF86019 +60356026601B600F600D6029602B600A603F602160786079607B607A60420000 +E3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000606A607D6096609A60AD609D60836092608C609B60EC60BB60B160DD60D8 +60C660DA60B4612061266115612360F46100610E612B614A617561AC619461A7 +61B761D461F55FDD96B395E995EB95F195F395F595F695FC95FE960396049606 +9608960A960B960C960D960F96129615961696179619961A4E2C723F62156C35 +6C546C5C6C4A6CA36C856C906C946C8C6C686C696C746C766C866CA96CD06CD4 +6CAD6CF76CF86CF16CD76CB26CE06CD66CFA6CEB6CEE6CB16CD36CEF6CFE0000 +E4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006D396D276D0C6D436D486D076D046D196D0E6D2B6D4D6D2E6D356D1A6D4F +6D526D546D336D916D6F6D9E6DA06D5E6D936D946D5C6D606D7C6D636E1A6DC7 +6DC56DDE6E0E6DBF6DE06E116DE66DDD6DD96E166DAB6E0C6DAE6E2B6E6E6E4E +6E6B6EB26E5F6E866E536E546E326E256E446EDF6EB16E986EE06F2D6EE26EA5 +6EA76EBD6EBB6EB76ED76EB46ECF6E8F6EC26E9F6F626F466F476F246F156EF9 +6F2F6F366F4B6F746F2A6F096F296F896F8D6F8C6F786F726F7C6F7A6FD10000 +E5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006FC96FA76FB96FB66FC26FE16FEE6FDE6FE06FEF701A7023701B70397035 +704F705E5B805B845B955B935BA55BB8752F9A9E64345BE45BEE89305BF08E47 +8B078FB68FD38FD58FE58FEE8FE48FE98FE68FF38FE890059004900B90269011 +900D9016902190359036902D902F9044905190529050906890589062905B66B9 +9074907D908290889083908B5F505F575F565F585C3B54AB5C505C595B715C63 +5C667FBC5F2A5F295F2D82745F3C9B3B5C6E59815983598D59A959AA59A30000 +E6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000599759CA59AB599E59A459D259B259AF59D759BE5A055A0659DD5A0859E3 +59D859F95A0C5A095A325A345A115A235A135A405A675A4A5A555A3C5A625A75 +80EC5AAA5A9B5A775A7A5ABE5AEB5AB25AD25AD45AB85AE05AE35AF15AD65AE6 +5AD85ADC5B095B175B165B325B375B405C155C1C5B5A5B655B735B515B535B62 +9A759A779A789A7A9A7F9A7D9A809A819A859A889A8A9A909A929A939A969A98 +9A9B9A9C9A9D9A9F9AA09AA29AA39AA59AA77E9F7EA17EA37EA57EA87EA90000 +E7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007EAD7EB07EBE7EC07EC17EC27EC97ECB7ECC7ED07ED47ED77EDB7EE07EE1 +7EE87EEB7EEE7EEF7EF17EF27F0D7EF67EFA7EFB7EFE7F017F027F037F077F08 +7F0B7F0C7F0F7F117F127F177F197F1C7F1B7F1F7F217F227F237F247F257F26 +7F277F2A7F2B7F2C7F2D7F2F7F307F317F327F337F355E7A757F5DDB753E9095 +738E739173AE73A2739F73CF73C273D173B773B373C073C973C873E573D9987C +740A73E973E773DE73BA73F2740F742A745B7426742574287430742E742C0000 +E8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000741B741A7441745C7457745574597477746D747E749C748E748074817487 +748B749E74A874A9749074A774D274BA97EA97EB97EC674C6753675E67486769 +67A56787676A6773679867A7677567A8679E67AD678B6777677C67F0680967D8 +680A67E967B0680C67D967B567DA67B367DD680067C367B867E2680E67C167FD +6832683368606861684E6862684468646883681D68556866684168676840683E +684A6849682968B5688F687468776893686B68C2696E68FC691F692068F90000 +E9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000692468F0690B6901695768E369106971693969606942695D6984696B6980 +69986978693469CC6987698869CE6989696669636979699B69A769BB69AB69AD +69D469B169C169CA69DF699569E0698D69FF6A2F69ED6A176A186A6569F26A44 +6A3E6AA06A506A5B6A356A8E6A796A3D6A286A586A7C6A916A906AA96A976AAB +733773526B816B826B876B846B926B936B8D6B9A6B9B6BA16BAA8F6B8F6D8F71 +8F728F738F758F768F788F778F798F7A8F7C8F7E8F818F828F848F878F8B0000 +EA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008F8D8F8E8F8F8F988F9A8ECE620B6217621B621F6222622162256224622C +81E774EF74F474FF750F75117513653465EE65EF65F0660A6619677266036615 +6600708566F7661D66346631663666358006665F66546641664F665666616657 +66776684668C66A7669D66BE66DB66DC66E666E98D328D338D368D3B8D3D8D40 +8D458D468D488D498D478D4D8D558D5989C789CA89CB89CC89CE89CF89D089D1 +726E729F725D7266726F727E727F7284728B728D728F72926308633263B00000 +EB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000643F64D880046BEA6BF36BFD6BF56BF96C056C076C066C0D6C156C186C19 +6C1A6C216C296C246C2A6C3265356555656B724D72527256723086625216809F +809C809380BC670A80BD80B180AB80AD80B480B780E780E880E980EA80DB80C2 +80C480D980CD80D7671080DD80EB80F180F480ED810D810E80F280FC67158112 +8C5A8136811E812C811881328148814C815381748159815A817181608169817C +817D816D8167584D5AB58188818281916ED581A381AA81CC672681CA81BB0000 +EC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000081C181A66B246B376B396B436B466B5998D198D298D398D598D998DA6BB3 +5F406BC289F365909F51659365BC65C665C465C365CC65CE65D265D67080709C +7096709D70BB70C070B770AB70B170E870CA711071137116712F71317173715C +716871457172714A7178717A719871B371B571A871A071E071D471E771F9721D +7228706C7118716671B9623E623D624362486249793B794079467949795B795C +7953795A796279577960796F7967797A7985798A799A79A779B35FD15FD00000 +ED +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000603C605D605A606760416059606360AB6106610D615D61A9619D61CB61D1 +62068080807F6C936CF66DFC77F677F87800780978177818781165AB782D781C +781D7839783A783B781F783C7825782C78237829784E786D7856785778267850 +7847784C786A789B7893789A7887789C78A178A378B278B978A578D478D978C9 +78EC78F2790578F479137924791E79349F9B9EF99EFB9EFC76F17704770D76F9 +77077708771A77227719772D7726773577387750775177477743775A77680000 +EE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000077627765777F778D777D7780778C7791779F77A077B077B577BD753A7540 +754E754B7548755B7572757975837F587F617F5F8A487F687F747F717F797F81 +7F7E76CD76E58832948594869487948B948A948C948D948F9490949494979495 +949A949B949C94A394A494AB94AA94AD94AC94AF94B094B294B494B694B794B8 +94B994BA94BC94BD94BF94C494C894C994CA94CB94CC94CD94CE94D094D194D2 +94D594D694D794D994D894DB94DE94DF94E094E294E494E594E794E894EA0000 +EF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000094E994EB94EE94EF94F394F494F594F794F994FC94FD94FF950395029506 +95079509950A950D950E950F951295139514951595169518951B951D951E951F +9522952A952B9529952C953195329534953695379538953C953E953F95429535 +9544954595469549954C954E954F9552955395549556955795589559955B955E +955F955D95619562956495659566956795689569956A956B956C956F95719572 +9573953A77E777EC96C979D579ED79E379EB7A065D477A037A027A1E7A140000 +F0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007A397A377A519ECF99A57A707688768E7693769976A474DE74E0752C9E20 +9E229E289E299E2A9E2B9E2C9E329E319E369E389E379E399E3A9E3E9E419E42 +9E449E469E479E489E499E4B9E4C9E4E9E519E559E579E5A9E5B9E5C9E5E9E63 +9E669E679E689E699E6A9E6B9E6C9E719E6D9E7375927594759675A0759D75AC +75A375B375B475B875C475B175B075C375C275D675CD75E375E875E675E475EB +75E7760375F175FC75FF761076007605760C7617760A76257618761576190000 +F1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000761B763C762276207640762D7630763F76357643763E7633764D765E7654 +765C7656766B766F7FCA7AE67A787A797A807A867A887A957AA67AA07AAC7AA8 +7AAD7AB3886488698872887D887F888288A288C688B788BC88C988E288CE88E3 +88E588F1891A88FC88E888FE88F0892189198913891B890A8934892B89368941 +8966897B758B80E576B276B477DC801280148016801C80208022802580268027 +802980288031800B803580438046804D80528069807189839878988098830000 +F2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009889988C988D988F9894989A989B989E989F98A198A298A598A6864D8654 +866C866E867F867A867C867B86A8868D868B86AC869D86A786A386AA869386A9 +86B686C486B586CE86B086BA86B186AF86C986CF86B486E986F186F286ED86F3 +86D0871386DE86F486DF86D886D18703870786F88708870A870D87098723873B +871E8725872E871A873E87488734873187298737873F87828722877D877E877B +87608770874C876E878B87538763877C876487598765879387AF87A887D20000 +F3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000087C68788878587AD8797878387AB87E587AC87B587B387CB87D387BD87D1 +87C087CA87DB87EA87E087EE8816881387FE880A881B88218839883C7F367F42 +7F447F4582107AFA7AFD7B087B037B047B157B0A7B2B7B0F7B477B387B2A7B19 +7B2E7B317B207B257B247B337B3E7B1E7B587B5A7B457B757B4C7B5D7B607B6E +7B7B7B627B727B717B907BA67BA77BB87BAC7B9D7BA87B857BAA7B9C7BA27BAB +7BB47BD17BC17BCC7BDD7BDA7BE57BE67BEA7C0C7BFE7BFC7C0F7C167C0B0000 +F4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007C1F7C2A7C267C387C417C4081FE82018202820481EC8844822182228223 +822D822F8228822B8238823B82338234823E82448249824B824F825A825F8268 +887E8885888888D888DF895E7F9D7F9F7FA77FAF7FB07FB27C7C65497C917C9D +7C9C7C9E7CA27CB27CBC7CBD7CC17CC77CCC7CCD7CC87CC57CD77CE8826E66A8 +7FBF7FCE7FD57FE57FE17FE67FE97FEE7FF37CF87D777DA67DAE7E477E9B9EB8 +9EB48D738D848D948D918DB18D678D6D8C478C49914A9150914E914F91640000 +F5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009162916191709169916F917D917E917291749179918C91859190918D9191 +91A291A391AA91AD91AE91AF91B591B491BA8C559E7E8DB88DEB8E058E598E69 +8DB58DBF8DBC8DBA8DC48DD68DD78DDA8DDE8DCE8DCF8DDB8DC68DEC8DF78DF8 +8DE38DF98DFB8DE48E098DFD8E148E1D8E1F8E2C8E2E8E238E2F8E3A8E408E39 +8E358E3D8E318E498E418E428E518E528E4A8E708E768E7C8E6F8E748E858E8F +8E948E908E9C8E9E8C788C828C8A8C858C988C94659B89D689DE89DA89DC0000 +F6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000089E589EB89EF8A3E8B26975396E996F396EF970697019708970F970E972A +972D9730973E9F809F839F859F869F879F889F899F8A9F8C9EFE9F0B9F0D96B9 +96BC96BD96CE96D277BF96E0928E92AE92C8933E936A93CA938F943E946B9C7F +9C829C859C869C879C887A239C8B9C8E9C909C919C929C949C959C9A9C9B9C9E +9C9F9CA09CA19CA29CA39CA59CA69CA79CA89CA99CAB9CAD9CAE9CB09CB19CB2 +9CB39CB49CB59CB69CB79CBA9CBB9CBC9CBD9CC49CC59CC69CC79CCA9CCB0000 +F7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009CCC9CCD9CCE9CCF9CD09CD39CD49CD59CD79CD89CD99CDC9CDD9CDF9CE2 +977C978597919792979497AF97AB97A397B297B49AB19AB09AB79E589AB69ABA +9ABC9AC19AC09AC59AC29ACB9ACC9AD19B459B439B479B499B489B4D9B5198E8 +990D992E995599549ADF9AE19AE69AEF9AEB9AFB9AED9AF99B089B0F9B139B1F +9B239EBD9EBE7E3B9E829E879E889E8B9E9293D69E9D9E9F9EDB9EDC9EDD9EE0 +9EDF9EE29EE99EE79EE59EEA9EEF9F229F2C9F2F9F399F379F3D9F3E9F440000 diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/iso2022-jp.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/iso2022-jp.enc new file mode 100644 index 00000000..f6dabe56 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/iso2022-jp.enc @@ -0,0 +1,12 @@ +# Encoding file: iso2022-jp, escape-driven +E +name iso2022-jp +init {} +final {} +ascii \x1b(B +jis0201 \x1b(J +jis0208 \x1b$B +jis0208 \x1b$@ +jis0212 \x1b$(D +gb2312 \x1b$A +ksc5601 \x1b$(C diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/iso2022-kr.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/iso2022-kr.enc new file mode 100644 index 00000000..d20ce2bc --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/iso2022-kr.enc @@ -0,0 +1,7 @@ +# Encoding file: iso2022-kr, escape-driven +E +name iso2022-kr +init \x1b$)C +final {} +iso8859-1 \x0f +ksc5601 \x0e diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/iso2022.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/iso2022.enc new file mode 100644 index 00000000..a58f8e3e --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/iso2022.enc @@ -0,0 +1,14 @@ +# Encoding file: iso2022, escape-driven +E +name iso2022 +init {} +final {} +iso8859-1 \x1b(B +jis0201 \x1b(J +gb1988 \x1b(T +jis0208 \x1b$B +jis0208 \x1b$@ +jis0212 \x1b$(D +gb2312 \x1b$A +ksc5601 \x1b$(C +jis0208 \x1b&@\x1b$B diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/iso8859-1.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/iso8859-1.enc new file mode 100644 index 00000000..045d8fa2 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/iso8859-1.enc @@ -0,0 +1,20 @@ +# Encoding file: iso8859-1, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +0080008100820083008400850086008700880089008A008B008C008D008E008F +0090009100920093009400950096009700980099009A009B009C009D009E009F +00A000A100A200A300A400A500A600A700A800A900AA00AB00AC00AD00AE00AF +00B000B100B200B300B400B500B600B700B800B900BA00BB00BC00BD00BE00BF +00C000C100C200C300C400C500C600C700C800C900CA00CB00CC00CD00CE00CF +00D000D100D200D300D400D500D600D700D800D900DA00DB00DC00DD00DE00DF +00E000E100E200E300E400E500E600E700E800E900EA00EB00EC00ED00EE00EF +00F000F100F200F300F400F500F600F700F800F900FA00FB00FC00FD00FE00FF diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/iso8859-10.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/iso8859-10.enc new file mode 100644 index 00000000..934b3b92 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/iso8859-10.enc @@ -0,0 +1,20 @@ +# Encoding file: iso8859-10, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +0080008100820083008400850086008700880089008A008B008C008D008E008F +0090009100920093009400950096009700980099009A009B009C009D009E009F +00A0010401120122012A0128013600A7013B011001600166017D00AD016A014A +00B0010501130123012B0129013700B7013C011101610167017E2015016B014B +010000C100C200C300C400C500C6012E010C00C9011800CB011600CD00CE00CF +00D00145014C00D300D400D500D6016800D8017200DA00DB00DC00DD00DE00DF +010100E100E200E300E400E500E6012F010D00E9011900EB011700ED00EE00EF +00F00146014D00F300F400F500F6016900F8017300FA00FB00FC00FD00FE0138 diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/iso8859-13.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/iso8859-13.enc new file mode 100644 index 00000000..b7edcaf3 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/iso8859-13.enc @@ -0,0 +1,20 @@ +# Encoding file: iso8859-13, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +0080008100820083008400850086008700880089008A008B008C008D008E008F +0090009100920093009400950096009700980099009A009B009C009D009E009F +00A0201D00A200A300A4201E00A600A700D800A9015600AB00AC00AD00AE00C6 +00B000B100B200B3201C00B500B600B700F800B9015700BB00BC00BD00BE00E6 +0104012E0100010600C400C501180112010C00C90179011601220136012A013B +01600143014500D3014C00D500D600D701720141015A016A00DC017B017D00DF +0105012F0101010700E400E501190113010D00E9017A011701230137012B013C +01610144014600F3014D00F500F600F701730142015B016B00FC017C017E2019 diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/iso8859-14.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/iso8859-14.enc new file mode 100644 index 00000000..a65ba05b --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/iso8859-14.enc @@ -0,0 +1,20 @@ +# Encoding file: iso8859-14, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +0080008100820083008400850086008700880089008A008B008C008D008E008F +0090009100920093009400950096009700980099009A009B009C009D009E009F +00A01E021E0300A3010A010B1E0A00A71E8000A91E821E0B1EF200AD00AE0178 +1E1E1E1F012001211E401E4100B61E561E811E571E831E601EF31E841E851E61 +00C000C100C200C300C400C500C600C700C800C900CA00CB00CC00CD00CE00CF +017400D100D200D300D400D500D61E6A00D800D900DA00DB00DC00DD017600DF +00E000E100E200E300E400E500E600E700E800E900EA00EB00EC00ED00EE00EF +017500F100F200F300F400F500F61E6B00F800F900FA00FB00FC00FD017700FF diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/iso8859-15.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/iso8859-15.enc new file mode 100644 index 00000000..823af466 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/iso8859-15.enc @@ -0,0 +1,20 @@ +# Encoding file: iso8859-15, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +0080008100820083008400850086008700880089008A008B008C008D008E008F +0090009100920093009400950096009700980099009A009B009C009D009E009F +00A000A100A200A320AC00A5016000A7016100A900AA00AB00AC00AD00AE00AF +00B000B100B200B3017D00B500B600B7017E00B900BA00BB01520153017800BF +00C000C100C200C300C400C500C600C700C800C900CA00CB00CC00CD00CE00CF +00D000D100D200D300D400D500D600D700D800D900DA00DB00DC00DD00DE00DF +00E000E100E200E300E400E500E600E700E800E900EA00EB00EC00ED00EE00EF +00F000F100F200F300F400F500F600F700F800F900FA00FB00FC00FD00FE00FF diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/iso8859-16.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/iso8859-16.enc new file mode 100644 index 00000000..da337093 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/iso8859-16.enc @@ -0,0 +1,20 @@ +# Encoding file: iso8859-16, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +0080008100820083008400850086008700880089008A008B008C008D008E008F +0090009100920093009400950096009700980099009A009B009C009D009E009F +00A001040105014120AC201E016000A7016100A9021800AB017900AD017A017B +00B000B1010C0142017D201D00B600B7017E010D021900BB015201530178017C +00C000C100C2010200C4010600C600C700C800C900CA00CB00CC00CD00CE00CF +0110014300D200D300D4015000D6015A017000D900DA00DB00DC0118021A00DF +00E000E100E2010300E4010700E600E700E800E900EA00EB00EC00ED00EE00EF +0111014400F200F300F4015100F6015B017100F900FA00FB00FC0119021B00FF diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/iso8859-2.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/iso8859-2.enc new file mode 100644 index 00000000..16faab66 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/iso8859-2.enc @@ -0,0 +1,20 @@ +# Encoding file: iso8859-2, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +0080008100820083008400850086008700880089008A008B008C008D008E008F +0090009100920093009400950096009700980099009A009B009C009D009E009F +00A0010402D8014100A4013D015A00A700A80160015E0164017900AD017D017B +00B0010502DB014200B4013E015B02C700B80161015F0165017A02DD017E017C +015400C100C2010200C40139010600C7010C00C9011800CB011A00CD00CE010E +01100143014700D300D4015000D600D70158016E00DA017000DC00DD016200DF +015500E100E2010300E4013A010700E7010D00E9011900EB011B00ED00EE010F +01110144014800F300F4015100F600F70159016F00FA017100FC00FD016302D9 diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/iso8859-3.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/iso8859-3.enc new file mode 100644 index 00000000..c914bce7 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/iso8859-3.enc @@ -0,0 +1,20 @@ +# Encoding file: iso8859-3, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +0080008100820083008400850086008700880089008A008B008C008D008E008F +0090009100920093009400950096009700980099009A009B009C009D009E009F +00A0012602D800A300A40000012400A700A80130015E011E013400AD0000017B +00B0012700B200B300B400B5012500B700B80131015F011F013500BD0000017C +00C000C100C2000000C4010A010800C700C800C900CA00CB00CC00CD00CE00CF +000000D100D200D300D4012000D600D7011C00D900DA00DB00DC016C015C00DF +00E000E100E2000000E4010B010900E700E800E900EA00EB00EC00ED00EE00EF +000000F100F200F300F4012100F600F7011D00F900FA00FB00FC016D015D02D9 diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/iso8859-4.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/iso8859-4.enc new file mode 100644 index 00000000..ef5c5a99 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/iso8859-4.enc @@ -0,0 +1,20 @@ +# Encoding file: iso8859-4, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +0080008100820083008400850086008700880089008A008B008C008D008E008F +0090009100920093009400950096009700980099009A009B009C009D009E009F +00A001040138015600A40128013B00A700A8016001120122016600AD017D00AF +00B0010502DB015700B40129013C02C700B80161011301230167014A017E014B +010000C100C200C300C400C500C6012E010C00C9011800CB011600CD00CE012A +01100145014C013600D400D500D600D700D8017200DA00DB00DC0168016A00DF +010100E100E200E300E400E500E6012F010D00E9011900EB011700ED00EE012B +01110146014D013700F400F500F600F700F8017300FA00FB00FC0169016B02D9 diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/iso8859-5.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/iso8859-5.enc new file mode 100644 index 00000000..bf4ee82b --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/iso8859-5.enc @@ -0,0 +1,20 @@ +# Encoding file: iso8859-5, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +0080008100820083008400850086008700880089008A008B008C008D008E008F +0090009100920093009400950096009700980099009A009B009C009D009E009F +00A0040104020403040404050406040704080409040A040B040C00AD040E040F +0410041104120413041404150416041704180419041A041B041C041D041E041F +0420042104220423042404250426042704280429042A042B042C042D042E042F +0430043104320433043404350436043704380439043A043B043C043D043E043F +0440044104420443044404450446044704480449044A044B044C044D044E044F +2116045104520453045404550456045704580459045A045B045C00A7045E045F diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/iso8859-6.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/iso8859-6.enc new file mode 100644 index 00000000..19ddefbc --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/iso8859-6.enc @@ -0,0 +1,20 @@ +# Encoding file: iso8859-6, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +0080008100820083008400850086008700880089008A008B008C008D008E008F +0090009100920093009400950096009700980099009A009B009C009D009E009F +00A000000000000000A40000000000000000000000000000060C00AD00000000 +00000000000000000000000000000000000000000000061B000000000000061F +0000062106220623062406250626062706280629062A062B062C062D062E062F +0630063106320633063406350636063706380639063A00000000000000000000 +0640064106420643064406450646064706480649064A064B064C064D064E064F +0650065106520000000000000000000000000000000000000000000000000000 diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/iso8859-7.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/iso8859-7.enc new file mode 100644 index 00000000..0f93ac88 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/iso8859-7.enc @@ -0,0 +1,20 @@ +# Encoding file: iso8859-7, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +0080008100820083008400850086008700880089008A008B008C008D008E008F +0090009100920093009400950096009700980099009A009B009C009D009E009F +00A02018201900A30000000000A600A700A800A9000000AB00AC00AD00002015 +00B000B100B200B303840385038600B703880389038A00BB038C00BD038E038F +0390039103920393039403950396039703980399039A039B039C039D039E039F +03A003A1000003A303A403A503A603A703A803A903AA03AB03AC03AD03AE03AF +03B003B103B203B303B403B503B603B703B803B903BA03BB03BC03BD03BE03BF +03C003C103C203C303C403C503C603C703C803C903CA03CB03CC03CD03CE0000 diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/iso8859-8.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/iso8859-8.enc new file mode 100644 index 00000000..579fa5b4 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/iso8859-8.enc @@ -0,0 +1,20 @@ +# Encoding file: iso8859-8, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +0080008100820083008400850086008700880089008A008B008C008D008E008F +0090009100920093009400950096009700980099009A009B009C009D009E009F +00A0000000A200A300A400A500A600A700A800A900D700AB00AC00AD00AE00AF +00B000B100B200B300B400B500B600B700B800B900F700BB00BC00BD00BE0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000002017 +05D005D105D205D305D405D505D605D705D805D905DA05DB05DC05DD05DE05DF +05E005E105E205E305E405E505E605E705E805E905EA00000000200E200F0000 diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/iso8859-9.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/iso8859-9.enc new file mode 100644 index 00000000..6eed3f1a --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/iso8859-9.enc @@ -0,0 +1,20 @@ +# Encoding file: iso8859-9, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +0080008100820083008400850086008700880089008A008B008C008D008E008F +0090009100920093009400950096009700980099009A009B009C009D009E009F +00A000A100A200A300A400A500A600A700A800A900AA00AB00AC00AD00AE00AF +00B000B100B200B300B400B500B600B700B800B900BA00BB00BC00BD00BE00BF +00C000C100C200C300C400C500C600C700C800C900CA00CB00CC00CD00CE00CF +011E00D100D200D300D400D500D600D700D800D900DA00DB00DC0130015E00DF +00E000E100E200E300E400E500E600E700E800E900EA00EB00EC00ED00EE00EF +011F00F100F200F300F400F500F600F700F800F900FA00FB00FC0131015F00FF diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/jis0201.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/jis0201.enc new file mode 100644 index 00000000..64f423f1 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/jis0201.enc @@ -0,0 +1,20 @@ +# Encoding file: jis0201, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D203E007F +0080008100820083008400850086008700880089008A008B008C008D008E008F +0090009100920093009400950096009700980099009A009B009C009D009E009F +0000FF61FF62FF63FF64FF65FF66FF67FF68FF69FF6AFF6BFF6CFF6DFF6EFF6F +FF70FF71FF72FF73FF74FF75FF76FF77FF78FF79FF7AFF7BFF7CFF7DFF7EFF7F +FF80FF81FF82FF83FF84FF85FF86FF87FF88FF89FF8AFF8BFF8CFF8DFF8EFF8F +FF90FF91FF92FF93FF94FF95FF96FF97FF98FF99FF9AFF9BFF9CFF9DFF9EFF9F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/jis0208.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/jis0208.enc new file mode 100644 index 00000000..11c49a4a --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/jis0208.enc @@ -0,0 +1,1319 @@ +# Encoding file: jis0208, double-byte +D +2129 0 77 +21 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000300030013002FF0CFF0E30FBFF1AFF1BFF1FFF01309B309C00B4FF4000A8 +FF3EFFE3FF3F30FD30FE309D309E30034EDD30053006300730FC20152010FF0F +FF3C301C2016FF5C2026202520182019201C201DFF08FF0930143015FF3BFF3D +FF5BFF5D30083009300A300B300C300D300E300F30103011FF0B221200B100D7 +00F7FF1D2260FF1CFF1E22662267221E22342642264000B0203220332103FFE5 +FF0400A200A3FF05FF03FF06FF0AFF2000A72606260525CB25CF25CE25C70000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +22 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000025C625A125A025B325B225BD25BC203B3012219221902191219330130000 +00000000000000000000000000000000000000002208220B2286228722822283 +222A2229000000000000000000000000000000002227222800AC21D221D42200 +220300000000000000000000000000000000000000000000222022A523122202 +220722612252226A226B221A223D221D2235222B222C00000000000000000000 +00000000212B2030266F266D266A2020202100B6000000000000000025EF0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +23 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +FF10FF11FF12FF13FF14FF15FF16FF17FF18FF19000000000000000000000000 +0000FF21FF22FF23FF24FF25FF26FF27FF28FF29FF2AFF2BFF2CFF2DFF2EFF2F +FF30FF31FF32FF33FF34FF35FF36FF37FF38FF39FF3A00000000000000000000 +0000FF41FF42FF43FF44FF45FF46FF47FF48FF49FF4AFF4BFF4CFF4DFF4EFF4F +FF50FF51FF52FF53FF54FF55FF56FF57FF58FF59FF5A00000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +24 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000304130423043304430453046304730483049304A304B304C304D304E304F +3050305130523053305430553056305730583059305A305B305C305D305E305F +3060306130623063306430653066306730683069306A306B306C306D306E306F +3070307130723073307430753076307730783079307A307B307C307D307E307F +3080308130823083308430853086308730883089308A308B308C308D308E308F +3090309130923093000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +25 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000030A130A230A330A430A530A630A730A830A930AA30AB30AC30AD30AE30AF +30B030B130B230B330B430B530B630B730B830B930BA30BB30BC30BD30BE30BF +30C030C130C230C330C430C530C630C730C830C930CA30CB30CC30CD30CE30CF +30D030D130D230D330D430D530D630D730D830D930DA30DB30DC30DD30DE30DF +30E030E130E230E330E430E530E630E730E830E930EA30EB30EC30ED30EE30EF +30F030F130F230F330F430F530F6000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +26 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000039103920393039403950396039703980399039A039B039C039D039E039F +03A003A103A303A403A503A603A703A803A90000000000000000000000000000 +000003B103B203B303B403B503B603B703B803B903BA03BB03BC03BD03BE03BF +03C003C103C303C403C503C603C703C803C90000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +27 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000004100411041204130414041504010416041704180419041A041B041C041D +041E041F0420042104220423042404250426042704280429042A042B042C042D +042E042F00000000000000000000000000000000000000000000000000000000 +000004300431043204330434043504510436043704380439043A043B043C043D +043E043F0440044104420443044404450446044704480449044A044B044C044D +044E044F00000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +28 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000025002502250C251025182514251C252C25242534253C25012503250F2513 +251B251725232533252B253B254B2520252F25282537253F251D253025252538 +2542000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +30 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004E9C55165A03963F54C0611B632859F690228475831C7A5060AA63E16E25 +65ED846682A69BF56893572765A162715B9B59D0867B98F47D627DBE9B8E6216 +7C9F88B75B895EB563096697684895C7978D674F4EE54F0A4F4D4F9D504956F2 +593759D45A015C0960DF610F61706613690570BA754F757079FB7DAD7DEF80C3 +840E88638B029055907A533B4E954EA557DF80B290C178EF4E0058F16EA29038 +7A328328828B9C2F5141537054BD54E156E059FB5F1598F26DEB80E4852D0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +31 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009662967096A097FB540B53F35B8770CF7FBD8FC296E8536F9D5C7ABA4E11 +789381FC6E26561855046B1D851A9C3B59E553A96D6674DC958F56424E91904B +96F2834F990C53E155B65B305F71662066F368046C386CF36D29745B76C87A4E +983482F1885B8A6092ED6DB275AB76CA99C560A68B018D8A95B2698E53AD5186 +5712583059445BB45EF6602863A963F46CBF6F14708E7114715971D5733F7E01 +827682D185979060925B9D1B586965BC6C5A752551F9592E59655F805FDC0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +32 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000062BC65FA6A2A6B276BB4738B7FC189569D2C9D0E9EC45CA16C96837B5104 +5C4B61B681C6687672614E594FFA537860696E297A4F97F34E0B53164EEE4F55 +4F3D4FA14F7352A053EF5609590F5AC15BB65BE179D16687679C67B66B4C6CB3 +706B73C2798D79BE7A3C7B8782B182DB8304837783EF83D387668AB256298CA8 +8FE6904E971E868A4FC45CE862117259753B81E582BD86FE8CC096C5991399D5 +4ECB4F1A89E356DE584A58CA5EFB5FEB602A6094606261D0621262D065390000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +33 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009B41666668B06D777070754C76867D7582A587F9958B968E8C9D51F152BE +591654B35BB35D16616869826DAF788D84CB88578A7293A79AB86D6C99A886D9 +57A367FF86CE920E5283568754045ED362E164B9683C68386BBB737278BA7A6B +899A89D28D6B8F0390ED95A3969497695B665CB3697D984D984E639B7B206A2B +6A7F68B69C0D6F5F5272559D607062EC6D3B6E076ED1845B89108F444E149C39 +53F6691B6A3A9784682A515C7AC384B291DC938C565B9D286822830584310000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +34 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007CA5520882C574E64E7E4F8351A05BD2520A52D852E75DFB559A582A59E6 +5B8C5B985BDB5E725E7960A3611F616361BE63DB656267D1685368FA6B3E6B53 +6C576F226F976F4574B0751876E3770B7AFF7BA17C217DE97F367FF0809D8266 +839E89B38ACC8CAB908494519593959195A2966597D3992882184E38542B5CB8 +5DCC73A9764C773C5CA97FEB8D0B96C19811985498584F014F0E5371559C5668 +57FA59475B095BC45C905E0C5E7E5FCC63EE673A65D765E2671F68CB68C40000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +35 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006A5F5E306BC56C176C7D757F79485B637A007D005FBD898F8A188CB48D77 +8ECC8F1D98E29A0E9B3C4E80507D510059935B9C622F628064EC6B3A72A07591 +79477FA987FB8ABC8B7063AC83CA97A05409540355AB68546A588A7078276775 +9ECD53745BA2811A865090064E184E454EC74F1153CA54385BAE5F1360256551 +673D6C426C726CE3707874037A767AAE7B087D1A7CFE7D6665E7725B53BB5C45 +5DE862D262E063196E20865A8A318DDD92F86F0179A69B5A4EA84EAB4EAC0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +36 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004F9B4FA050D151477AF6517151F653545321537F53EB55AC58835CE15F37 +5F4A602F6050606D631F65596A4B6CC172C272ED77EF80F881058208854E90F7 +93E197FF99579A5A4EF051DD5C2D6681696D5C4066F26975738968507C8150C5 +52E457475DFE932665A46B236B3D7434798179BD7B4B7DCA82B983CC887F895F +8B398FD191D1541F92804E5D503653E5533A72D7739677E982E68EAF99C699C8 +99D25177611A865E55B07A7A50765BD3904796854E326ADB91E75C515C480000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +37 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000063987A9F6C9397748F617AAA718A96887C8268177E706851936C52F2541B +85AB8A137FA48ECD90E15366888879414FC250BE521151445553572D73EA578B +59515F625F8460756176616761A963B2643A656C666F68426E1375667A3D7CFB +7D4C7D997E4B7F6B830E834A86CD8A088A638B668EFD981A9D8F82B88FCE9BE8 +5287621F64836FC09699684150916B206C7A6F547A747D5088408A2367084EF6 +503950265065517C5238526355A7570F58055ACC5EFA61B261F862F363720000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +38 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000691C6A29727D72AC732E7814786F7D79770C80A9898B8B198CE28ED29063 +9375967A98559A139E785143539F53B35E7B5F266E1B6E90738473FE7D438237 +8A008AFA96504E4E500B53E4547C56FA59D15B645DF15EAB5F276238654567AF +6E5672D07CCA88B480A180E183F0864E8A878DE8923796C798679F134E944E92 +4F0D53485449543E5A2F5F8C5FA1609F68A76A8E745A78818A9E8AA48B779190 +4E5E9BC94EA44F7C4FAF501950165149516C529F52B952FE539A53E354110000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +39 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000540E5589575157A2597D5B545B5D5B8F5DE55DE75DF75E785E835E9A5EB7 +5F186052614C629762D863A7653B6602664366F4676D6821689769CB6C5F6D2A +6D696E2F6E9D75327687786C7A3F7CE07D057D187D5E7DB18015800380AF80B1 +8154818F822A8352884C88618B1B8CA28CFC90CA91759271783F92FC95A4964D +980599999AD89D3B525B52AB53F7540858D562F76FE08C6A8F5F9EB9514B523B +544A56FD7A4091779D609ED273446F09817075115FFD60DA9AA872DB8FBC0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006B6498034ECA56F0576458BE5A5A606861C7660F6606683968B16DF775D5 +7D3A826E9B424E9B4F5053C955065D6F5DE65DEE67FB6C99747378028A509396 +88DF57505EA7632B50B550AC518D670054C9585E59BB5BB05F69624D63A1683D +6B736E08707D91C7728078157826796D658E7D3083DC88C18F09969B52645728 +67507F6A8CA151B45742962A583A698A80B454B25D0E57FC78959DFA4F5C524A +548B643E6628671467F57A847B567D22932F685C9BAD7B395319518A52370000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005BDF62F664AE64E6672D6BBA85A996D176909BD6634C93069BAB76BF6652 +4E09509853C25C7160E864926563685F71E673CA75237B977E8286958B838CDB +9178991065AC66AB6B8B4ED54ED44F3A4F7F523A53F853F255E356DB58EB59CB +59C959FF5B505C4D5E025E2B5FD7601D6307652F5B5C65AF65BD65E8679D6B62 +6B7B6C0F7345794979C17CF87D197D2B80A2810281F389968A5E8A698A668A8C +8AEE8CC78CDC96CC98FC6B6F4E8B4F3C4F8D51505B575BFA6148630166420000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3C +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006B216ECB6CBB723E74BD75D478C1793A800C803381EA84948F9E6C509E7F +5F0F8B589D2B7AFA8EF85B8D96EB4E0353F157F759315AC95BA460896E7F6F06 +75BE8CEA5B9F85007BE0507267F4829D5C61854A7E1E820E51995C0463688D66 +659C716E793E7D1780058B1D8ECA906E86C790AA501F52FA5C3A6753707C7235 +914C91C8932B82E55BC25F3160F94E3B53D65B88624B67316B8A72E973E07A2E +816B8DA391529996511253D7546A5BFF63886A397DAC970056DA53CE54680000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005B975C315DDE4FEE610162FE6D3279C079CB7D427E4D7FD281ED821F8490 +884689728B908E748F2F9031914B916C96C6919C4EC04F4F514553415F93620E +67D46C416E0B73637E2691CD928353D459195BBF6DD1795D7E2E7C9B587E719F +51FA88538FF04FCA5CFB662577AC7AE3821C99FF51C65FAA65EC696F6B896DF3 +6E966F6476FE7D145DE190759187980651E6521D6240669166D96E1A5EB67DD2 +7F7266F885AF85F78AF852A953D959735E8F5F90605592E4966450B7511F0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000052DD5320534753EC54E8554655315617596859BE5A3C5BB55C065C0F5C11 +5C1A5E845E8A5EE05F70627F628462DB638C63776607660C662D6676677E68A2 +6A1F6A356CBC6D886E096E58713C7126716775C77701785D7901796579F07AE0 +7B117CA77D39809683D6848B8549885D88F38A1F8A3C8A548A738C618CDE91A4 +9266937E9418969C97984E0A4E084E1E4E575197527057CE583458CC5B225E38 +60C564FE676167566D4472B675737A6384B88B7291B89320563157F498FE0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000062ED690D6B9671ED7E548077827289E698DF87558FB15C3B4F384FE14FB5 +55075A205BDD5BE95FC3614E632F65B0664B68EE699B6D786DF1753375B9771F +795E79E67D3381E382AF85AA89AA8A3A8EAB8F9B903291DD97074EBA4EC15203 +587558EC5C0B751A5C3D814E8A0A8FC59663976D7B258ACF9808916256F353A8 +9017543957825E2563A86C34708A77617C8B7FE088709042915493109318968F +745E9AC45D075D69657067A28DA896DB636E6749691983C5981796C088FE0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +40 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006F84647A5BF84E16702C755D662F51C4523652E259D35F8160276210653F +6574661F667468F268166B636E057272751F76DB7CBE805658F088FD897F8AA0 +8A938ACB901D91929752975965897A0E810696BB5E2D60DC621A65A566146790 +77F37A4D7C4D7E3E810A8CAC8D648DE18E5F78A9520762D963A5644262988A2D +7A837BC08AAC96EA7D76820C87494ED95148534353605BA35C025C165DDD6226 +624764B0681368346CC96D456D1767D36F5C714E717D65CB7A7F7BAD7DDA0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +41 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007E4A7FA8817A821B823985A68A6E8CCE8DF59078907792AD929195839BAE +524D55846F387136516879857E5581B37CCE564C58515CA863AA66FE66FD695A +72D9758F758E790E795679DF7C977D207D4486078A34963B90619F2050E75275 +53CC53E2500955AA58EE594F723D5B8B5C64531D60E360F3635C6383633F63BB +64CD65E966F95DE369CD69FD6F1571E54E8975E976F87A937CDF7DCF7D9C8061 +83498358846C84BC85FB88C58D709001906D9397971C9A1250CF5897618E0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +42 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000081D385358D0890204FC3507452475373606F6349675F6E2C8DB3901F4FD7 +5C5E8CCA65CF7D9A53528896517663C35B585B6B5C0A640D6751905C4ED6591A +592A6C708A51553E581559A560F0625367C182356955964099C49A284F535806 +5BFE80105CB15E2F5F856020614B623466FF6CF06EDE80CE817F82D4888B8CB8 +9000902E968A9EDB9BDB4EE353F059277B2C918D984C9DF96EDD702753535544 +5B856258629E62D36CA26FEF74228A1794386FC18AFE833851E786F853EA0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +43 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000053E94F4690548FB0596A81315DFD7AEA8FBF68DA8C3772F89C486A3D8AB0 +4E3953585606576662C563A265E66B4E6DE16E5B70AD77ED7AEF7BAA7DBB803D +80C686CB8A95935B56E358C75F3E65AD66966A806BB575378AC7502477E55730 +5F1B6065667A6C6075F47A1A7F6E81F48718904599B37BC9755C7AF97B5184C4 +901079E97A9283365AE177404E2D4EF25B995FE062BD663C67F16CE8866B8877 +8A3B914E92F399D06A177026732A82E784578CAF4E01514651CB558B5BF50000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +44 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005E165E335E815F145F355F6B5FB461F2631166A2671D6F6E7252753A773A +80748139817887768ABF8ADC8D858DF3929A957798029CE552C5635776F46715 +6C8873CD8CC393AE96736D25589C690E69CC8FFD939A75DB901A585A680263B4 +69FB4F436F2C67D88FBB85267DB49354693F6F70576A58F75B2C7D2C722A540A +91E39DB44EAD4F4E505C507552438C9E544858245B9A5E1D5E955EAD5EF75F1F +608C62B5633A63D068AF6C407887798E7A0B7DE082478A028AE68E4490130000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +45 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000090B8912D91D89F0E6CE5645864E265756EF476847B1B906993D16EBA54F2 +5FB964A48F4D8FED92445178586B59295C555E976DFB7E8F751C8CBC8EE2985B +70B94F1D6BBF6FB1753096FB514E54105835585759AC5C605F926597675C6E21 +767B83DF8CED901490FD934D7825783A52AA5EA6571F597460125012515A51AC +51CD520055105854585859575B955CF65D8B60BC6295642D6771684368BC68DF +76D76DD86E6F6D9B706F71C85F5375D879777B497B547B527CD67D7152300000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +46 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008463856985E48A0E8B048C468E0F9003900F94199676982D9A3095D850CD +52D5540C58025C0E61A7649E6D1E77B37AE580F48404905392855CE09D07533F +5F975FB36D9C7279776379BF7BE46BD272EC8AAD68036A6151F87A8169345C4A +9CF682EB5BC59149701E56785C6F60C765666C8C8C5A90419813545166C7920D +594890A351854E4D51EA85998B0E7058637A934B696299B47E04757753576960 +8EDF96E36C5D4E8C5C3C5F108FE953028CD1808986795EFF65E54E7351650000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +47 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000059825C3F97EE4EFB598A5FCD8A8D6FE179B079625BE78471732B71B15E74 +5FF5637B649A71C37C984E435EFC4E4B57DC56A260A96FC37D0D80FD813381BF +8FB2899786A45DF4628A64AD898767776CE26D3E743678345A467F7582AD99AC +4FF35EC362DD63926557676F76C3724C80CC80BA8F29914D500D57F95A926885 +6973716472FD8CB758F28CE0966A9019877F79E477E784294F2F5265535A62CD +67CF6CCA767D7B947C95823685848FEB66DD6F2072067E1B83AB99C19EA60000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +48 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000051FD7BB178727BB880877B486AE85E61808C75517560516B92626E8C767A +91979AEA4F107F70629C7B4F95A59CE9567A585986E496BC4F345224534A53CD +53DB5E06642C6591677F6C3E6C4E724872AF73ED75547E41822C85E98CA97BC4 +91C67169981298EF633D6669756A76E478D0854386EE532A5351542659835E87 +5F7C60B26249627962AB65906BD46CCC75B276AE789179D87DCB7F7780A588AB +8AB98CBB907F975E98DB6A0B7C3850995C3E5FAE67876BD8743577097F8E0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +49 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009F3B67CA7A175339758B9AED5F66819D83F180985F3C5FC575627B46903C +686759EB5A9B7D10767E8B2C4FF55F6A6A196C376F0274E2796888688A558C79 +5EDF63CF75C579D282D7932892F2849C86ED9C2D54C15F6C658C6D5C70158CA7 +8CD3983B654F74F64E0D4ED857E0592B5A665BCC51A85E035E9C601662766577 +65A7666E6D6E72367B268150819A82998B5C8CA08CE68D74961C96444FAE64AB +6B66821E8461856A90E85C01695398A8847A85574F0F526F5FA95E45670D0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000798F8179890789866DF55F1762556CB84ECF72699B925206543B567458B3 +61A4626E711A596E7C897CDE7D1B96F06587805E4E194F75517558405E635E73 +5F0A67C44E26853D9589965B7C73980150FB58C1765678A7522577A585117B86 +504F590972477BC77DE88FBA8FD4904D4FBF52C95A295F0197AD4FDD821792EA +570363556B69752B88DC8F147A4252DF58936155620A66AE6BCD7C3F83E95023 +4FF853055446583159495B9D5CF05CEF5D295E9662B16367653E65B9670B0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006CD56CE170F978327E2B80DE82B3840C84EC870289128A2A8C4A90A692D2 +98FD9CF39D6C4E4F4EA1508D5256574A59A85E3D5FD85FD9623F66B4671B67D0 +68D251927D2180AA81A88B008C8C8CBF927E96325420982C531750D5535C58A8 +64B26734726777667A4691E652C36CA16B8658005E4C5954672C7FFB51E176C6 +646978E89B549EBB57CB59B96627679A6BCE54E969D95E55819C67959BAA67FE +9C52685D4EA64FE353C862B9672B6CAB8FC44FAD7E6D9EBF4E0761626E800000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4C +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006F2B85135473672A9B455DF37B955CAC5BC6871C6E4A84D17A1481085999 +7C8D6C11772052D959227121725F77DB97279D61690B5A7F5A1851A5540D547D +660E76DF8FF792989CF459EA725D6EC5514D68C97DBF7DEC97629EBA64786A21 +830259845B5F6BDB731B76F27DB280178499513267289ED976EE676252FF9905 +5C24623B7C7E8CB0554F60B67D0B958053014E5F51B6591C723A803691CE5F25 +77E253845F797D0485AC8A338E8D975667F385AE9453610961086CB976520000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008AED8F38552F4F51512A52C753CB5BA55E7D60A0618263D6670967DA6E67 +6D8C733673377531795088D58A98904A909190F596C4878D59154E884F594E0E +8A898F3F981050AD5E7C59965BB95EB863DA63FA64C166DC694A69D86D0B6EB6 +719475287AAF7F8A8000844984C989818B218E0A9065967D990A617E62916B32 +6C836D747FCC7FFC6DC07F8587BA88F8676583B1983C96F76D1B7D61843D916A +4E7153755D506B046FEB85CD862D89A75229540F5C65674E68A8740674830000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000075E288CF88E191CC96E296785F8B73877ACB844E63A0756552896D416E9C +74097559786B7C9296867ADC9F8D4FB6616E65C5865C4E864EAE50DA4E2151CC +5BEE659968816DBC731F764277AD7A1C7CE7826F8AD2907C91CF96759818529B +7DD1502B539867976DCB71D0743381E88F2A96A39C579E9F746058416D997D2F +985E4EE44F364F8B51B752B15DBA601C73B2793C82D3923496B796F6970A9E97 +9F6266A66B74521752A370C888C25EC9604B61906F2371497C3E7DF4806F0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000084EE9023932C54429B6F6AD370898CC28DEF973252B45A415ECA5F046717 +697C69946D6A6F0F726272FC7BED8001807E874B90CE516D9E937984808B9332 +8AD6502D548C8A716B6A8CC4810760D167A09DF24E994E989C108A6B85C18568 +69006E7E78978155000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +50 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005F0C4E104E154E2A4E314E364E3C4E3F4E424E564E584E824E858C6B4E8A +82125F0D4E8E4E9E4E9F4EA04EA24EB04EB34EB64ECE4ECD4EC44EC64EC24ED7 +4EDE4EED4EDF4EF74F094F5A4F304F5B4F5D4F574F474F764F884F8F4F984F7B +4F694F704F914F6F4F864F9651184FD44FDF4FCE4FD84FDB4FD14FDA4FD04FE4 +4FE5501A50285014502A502550054F1C4FF650215029502C4FFE4FEF50115006 +504350476703505550505048505A5056506C50785080509A508550B450B20000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +51 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000050C950CA50B350C250D650DE50E550ED50E350EE50F950F5510951015102 +511651155114511A5121513A5137513C513B513F51405152514C515451627AF8 +5169516A516E5180518256D8518C5189518F519151935195519651A451A651A2 +51A951AA51AB51B351B151B251B051B551BD51C551C951DB51E0865551E951ED +51F051F551FE5204520B5214520E5227522A522E52335239524F5244524B524C +525E5254526A527452695273527F527D528D529452925271528852918FA80000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +52 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008FA752AC52AD52BC52B552C152CD52D752DE52E352E698ED52E052F352F5 +52F852F9530653087538530D5310530F5315531A5323532F5331533353385340 +534653454E175349534D51D6535E5369536E5918537B53775382539653A053A6 +53A553AE53B053B653C37C1296D953DF66FC71EE53EE53E853ED53FA5401543D +5440542C542D543C542E54365429541D544E548F5475548E545F547154775470 +5492547B5480547654845490548654C754A254B854A554AC54C454C854A80000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +53 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000054AB54C254A454BE54BC54D854E554E6550F551454FD54EE54ED54FA54E2 +553955405563554C552E555C55455556555755385533555D5599558054AF558A +559F557B557E5598559E55AE557C558355A9558755A855DA55C555DF55C455DC +55E455D4561455F7561655FE55FD561B55F9564E565071DF5634563656325638 +566B5664562F566C566A56865680568A56A05694568F56A556AE56B656B456C2 +56BC56C156C356C056C856CE56D156D356D756EE56F9570056FF570457090000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +54 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005708570B570D57135718571655C7571C572657375738574E573B5740574F +576957C057885761577F5789579357A057B357A457AA57B057C357C657D457D2 +57D3580A57D657E3580B5819581D587258215862584B58706BC05852583D5879 +588558B9589F58AB58BA58DE58BB58B858AE58C558D358D158D758D958D858E5 +58DC58E458DF58EF58FA58F958FB58FC58FD5902590A5910591B68A65925592C +592D59325938593E7AD259555950594E595A5958596259605967596C59690000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +55 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000059785981599D4F5E4FAB59A359B259C659E859DC598D59D959DA5A255A1F +5A115A1C5A095A1A5A405A6C5A495A355A365A625A6A5A9A5ABC5ABE5ACB5AC2 +5ABD5AE35AD75AE65AE95AD65AFA5AFB5B0C5B0B5B165B325AD05B2A5B365B3E +5B435B455B405B515B555B5A5B5B5B655B695B705B735B755B7865885B7A5B80 +5B835BA65BB85BC35BC75BC95BD45BD05BE45BE65BE25BDE5BE55BEB5BF05BF6 +5BF35C055C075C085C0D5C135C205C225C285C385C395C415C465C4E5C530000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +56 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005C505C4F5B715C6C5C6E4E625C765C795C8C5C915C94599B5CAB5CBB5CB6 +5CBC5CB75CC55CBE5CC75CD95CE95CFD5CFA5CED5D8C5CEA5D0B5D155D175D5C +5D1F5D1B5D115D145D225D1A5D195D185D4C5D525D4E5D4B5D6C5D735D765D87 +5D845D825DA25D9D5DAC5DAE5DBD5D905DB75DBC5DC95DCD5DD35DD25DD65DDB +5DEB5DF25DF55E0B5E1A5E195E115E1B5E365E375E445E435E405E4E5E575E54 +5E5F5E625E645E475E755E765E7A9EBC5E7F5EA05EC15EC25EC85ED05ECF0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +57 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005ED65EE35EDD5EDA5EDB5EE25EE15EE85EE95EEC5EF15EF35EF05EF45EF8 +5EFE5F035F095F5D5F5C5F0B5F115F165F295F2D5F385F415F485F4C5F4E5F2F +5F515F565F575F595F615F6D5F735F775F835F825F7F5F8A5F885F915F875F9E +5F995F985FA05FA85FAD5FBC5FD65FFB5FE45FF85FF15FDD60B35FFF60216060 +601960106029600E6031601B6015602B6026600F603A605A6041606A6077605F +604A6046604D6063604360646042606C606B60596081608D60E76083609A0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +58 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006084609B60966097609260A7608B60E160B860E060D360B45FF060BD60C6 +60B560D8614D6115610660F660F7610060F460FA6103612160FB60F1610D610E +6147613E61286127614A613F613C612C6134613D614261446173617761586159 +615A616B6174616F61656171615F615D6153617561996196618761AC6194619A +618A619161AB61AE61CC61CA61C961F761C861C361C661BA61CB7F7961CD61E6 +61E361F661FA61F461FF61FD61FC61FE620062086209620D620C6214621B0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +59 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000621E6221622A622E6230623262336241624E625E6263625B62606268627C +62826289627E62926293629662D46283629462D762D162BB62CF62FF62C664D4 +62C862DC62CC62CA62C262C7629B62C9630C62EE62F163276302630862EF62F5 +6350633E634D641C634F6396638E638063AB637663A3638F6389639F63B5636B +636963BE63E963C063C663E363C963D263F663C4641664346406641364266436 +651D64176428640F6467646F6476644E652A6495649364A564A9648864BC0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000064DA64D264C564C764BB64D864C264F164E7820964E064E162AC64E364EF +652C64F664F464F264FA650064FD6518651C650565246523652B653465356537 +65366538754B654865566555654D6558655E655D65726578658265838B8A659B +659F65AB65B765C365C665C165C465CC65D265DB65D965E065E165F16772660A +660365FB6773663566366634661C664F664466496641665E665D666466676668 +665F6662667066836688668E668966846698669D66C166B966C966BE66BC0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000066C466B866D666DA66E0663F66E666E966F066F566F7670F6716671E6726 +67279738672E673F67366741673867376746675E676067596763676467896770 +67A9677C676A678C678B67A667A1678567B767EF67B467EC67B367E967B867E4 +67DE67DD67E267EE67B967CE67C667E76A9C681E684668296840684D6832684E +68B3682B685968636877687F689F688F68AD6894689D689B68836AAE68B96874 +68B568A068BA690F688D687E690168CA690868D86922692668E1690C68CD0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5C +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000068D468E768D569366912690468D768E3692568F968E068EF6928692A691A +6923692168C669796977695C6978696B6954697E696E69396974693D69596930 +6961695E695D6981696A69B269AE69D069BF69C169D369BE69CE5BE869CA69DD +69BB69C369A76A2E699169A0699C699569B469DE69E86A026A1B69FF6B0A69F9 +69F269E76A0569B16A1E69ED6A1469EB6A0A6A126AC16A236A136A446A0C6A72 +6A366A786A476A626A596A666A486A386A226A906A8D6AA06A846AA26AA30000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006A9786176ABB6AC36AC26AB86AB36AAC6ADE6AD16ADF6AAA6ADA6AEA6AFB +6B0586166AFA6B126B169B316B1F6B386B3776DC6B3998EE6B476B436B496B50 +6B596B546B5B6B5F6B616B786B796B7F6B806B846B836B8D6B986B956B9E6BA4 +6BAA6BAB6BAF6BB26BB16BB36BB76BBC6BC66BCB6BD36BDF6BEC6BEB6BF36BEF +9EBE6C086C136C146C1B6C246C236C5E6C556C626C6A6C826C8D6C9A6C816C9B +6C7E6C686C736C926C906CC46CF16CD36CBD6CD76CC56CDD6CAE6CB16CBE0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006CBA6CDB6CEF6CD96CEA6D1F884D6D366D2B6D3D6D386D196D356D336D12 +6D0C6D636D936D646D5A6D796D596D8E6D956FE46D856DF96E156E0A6DB56DC7 +6DE66DB86DC66DEC6DDE6DCC6DE86DD26DC56DFA6DD96DE46DD56DEA6DEE6E2D +6E6E6E2E6E196E726E5F6E3E6E236E6B6E2B6E766E4D6E1F6E436E3A6E4E6E24 +6EFF6E1D6E386E826EAA6E986EC96EB76ED36EBD6EAF6EC46EB26ED46ED56E8F +6EA56EC26E9F6F416F11704C6EEC6EF86EFE6F3F6EF26F316EEF6F326ECC0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006F3E6F136EF76F866F7A6F786F816F806F6F6F5B6FF36F6D6F826F7C6F58 +6F8E6F916FC26F666FB36FA36FA16FA46FB96FC66FAA6FDF6FD56FEC6FD46FD8 +6FF16FEE6FDB7009700B6FFA70117001700F6FFE701B701A6F74701D7018701F +7030703E7032705170637099709270AF70F170AC70B870B370AE70DF70CB70DD +70D9710970FD711C711971657155718871667162714C7156716C718F71FB7184 +719571A871AC71D771B971BE71D271C971D471CE71E071EC71E771F571FC0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +60 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000071F971FF720D7210721B7228722D722C72307232723B723C723F72407246 +724B72587274727E7282728172877292729672A272A772B972B272C372C672C4 +72CE72D272E272E072E172F972F7500F7317730A731C7316731D7334732F7329 +7325733E734E734F9ED87357736A7368737073787375737B737A73C873B373CE +73BB73C073E573EE73DE74A27405746F742573F87432743A7455743F745F7459 +7441745C746974707463746A7476747E748B749E74A774CA74CF74D473F10000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +61 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000074E074E374E774E974EE74F274F074F174F874F7750475037505750C750E +750D75157513751E7526752C753C7544754D754A7549755B7546755A75697564 +7567756B756D75787576758675877574758A758975827594759A759D75A575A3 +75C275B375C375B575BD75B875BC75B175CD75CA75D275D975E375DE75FE75FF +75FC760175F075FA75F275F3760B760D7609761F762776207621762276247634 +7630763B764776487646765C76587661766276687669766A7667766C76700000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +62 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000767276767678767C768076837688768B768E769676937699769A76B076B4 +76B876B976BA76C276CD76D676D276DE76E176E576E776EA862F76FB77087707 +770477297724771E77257726771B773777387747775A7768776B775B7765777F +777E7779778E778B779177A0779E77B077B677B977BF77BC77BD77BB77C777CD +77D777DA77DC77E377EE77FC780C781279267820792A7845788E78747886787C +789A788C78A378B578AA78AF78D178C678CB78D478BE78BC78C578CA78EC0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +63 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000078E778DA78FD78F47907791279117919792C792B794079607957795F795A +79557953797A797F798A799D79A79F4B79AA79AE79B379B979BA79C979D579E7 +79EC79E179E37A087A0D7A187A197A207A1F79807A317A3B7A3E7A377A437A57 +7A497A617A627A699F9D7A707A797A7D7A887A977A957A987A967AA97AC87AB0 +7AB67AC57AC47ABF90837AC77ACA7ACD7ACF7AD57AD37AD97ADA7ADD7AE17AE2 +7AE67AED7AF07B027B0F7B0A7B067B337B187B197B1E7B357B287B367B500000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +64 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007B7A7B047B4D7B0B7B4C7B457B757B657B747B677B707B717B6C7B6E7B9D +7B987B9F7B8D7B9C7B9A7B8B7B927B8F7B5D7B997BCB7BC17BCC7BCF7BB47BC6 +7BDD7BE97C117C147BE67BE57C607C007C077C137BF37BF77C177C0D7BF67C23 +7C277C2A7C1F7C377C2B7C3D7C4C7C437C547C4F7C407C507C587C5F7C647C56 +7C657C6C7C757C837C907CA47CAD7CA27CAB7CA17CA87CB37CB27CB17CAE7CB9 +7CBD7CC07CC57CC27CD87CD27CDC7CE29B3B7CEF7CF27CF47CF67CFA7D060000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +65 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007D027D1C7D157D0A7D457D4B7D2E7D327D3F7D357D467D737D567D4E7D72 +7D687D6E7D4F7D637D937D897D5B7D8F7D7D7D9B7DBA7DAE7DA37DB57DC77DBD +7DAB7E3D7DA27DAF7DDC7DB87D9F7DB07DD87DDD7DE47DDE7DFB7DF27DE17E05 +7E0A7E237E217E127E317E1F7E097E0B7E227E467E667E3B7E357E397E437E37 +7E327E3A7E677E5D7E567E5E7E597E5A7E797E6A7E697E7C7E7B7E837DD57E7D +8FAE7E7F7E887E897E8C7E927E907E937E947E967E8E7E9B7E9C7F387F3A0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +66 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007F457F4C7F4D7F4E7F507F517F557F547F587F5F7F607F687F697F677F78 +7F827F867F837F887F877F8C7F947F9E7F9D7F9A7FA37FAF7FB27FB97FAE7FB6 +7FB88B717FC57FC67FCA7FD57FD47FE17FE67FE97FF37FF998DC80068004800B +801280188019801C80218028803F803B804A804680528058805A805F80628068 +80738072807080768079807D807F808480868085809B8093809A80AD519080AC +80DB80E580D980DD80C480DA80D6810980EF80F1811B81298123812F814B0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +67 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000968B8146813E8153815180FC8171816E81658166817481838188818A8180 +818281A0819581A481A3815F819381A981B081B581BE81B881BD81C081C281BA +81C981CD81D181D981D881C881DA81DF81E081E781FA81FB81FE820182028205 +8207820A820D821082168229822B82388233824082598258825D825A825F8264 +82628268826A826B822E827182778278827E828D829282AB829F82BB82AC82E1 +82E382DF82D282F482F382FA8393830382FB82F982DE830682DC830982D90000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +68 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000833583348316833283318340833983508345832F832B831783188385839A +83AA839F83A283968323838E8387838A837C83B58373837583A0838983A883F4 +841383EB83CE83FD840383D8840B83C183F7840783E083F2840D8422842083BD +8438850683FB846D842A843C855A84848477846B84AD846E848284698446842C +846F8479843584CA846284B984BF849F84D984CD84BB84DA84D084C184C684D6 +84A1852184FF84F485178518852C851F8515851484FC85408563855885480000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +69 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000085418602854B8555858085A485888591858A85A8856D8594859B85EA8587 +859C8577857E859085C985BA85CF85B985D085D585DD85E585DC85F9860A8613 +860B85FE85FA86068622861A8630863F864D4E558654865F86678671869386A3 +86A986AA868B868C86B686AF86C486C686B086C9882386AB86D486DE86E986EC +86DF86DB86EF8712870687088700870386FB87118709870D86F9870A8734873F +8737873B87258729871A8760875F8778874C874E877487578768876E87590000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000087538763876A880587A2879F878287AF87CB87BD87C087D096D687AB87C4 +87B387C787C687BB87EF87F287E0880F880D87FE87F687F7880E87D288118816 +8815882288218831883688398827883B8844884288528859885E8862886B8881 +887E889E8875887D88B5887288828897889288AE889988A2888D88A488B088BF +88B188C388C488D488D888D988DD88F9890288FC88F488E888F28904890C890A +89138943891E8925892A892B89418944893B89368938894C891D8960895E0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000089668964896D896A896F89748977897E89838988898A8993899889A189A9 +89A689AC89AF89B289BA89BD89BF89C089DA89DC89DD89E789F489F88A038A16 +8A108A0C8A1B8A1D8A258A368A418A5B8A528A468A488A7C8A6D8A6C8A628A85 +8A828A848AA88AA18A918AA58AA68A9A8AA38AC48ACD8AC28ADA8AEB8AF38AE7 +8AE48AF18B148AE08AE28AF78ADE8ADB8B0C8B078B1A8AE18B168B108B178B20 +8B3397AB8B268B2B8B3E8B288B418B4C8B4F8B4E8B498B568B5B8B5A8B6B0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6C +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008B5F8B6C8B6F8B748B7D8B808B8C8B8E8B928B938B968B998B9A8C3A8C41 +8C3F8C488C4C8C4E8C508C558C628C6C8C788C7A8C828C898C858C8A8C8D8C8E +8C948C7C8C98621D8CAD8CAA8CBD8CB28CB38CAE8CB68CC88CC18CE48CE38CDA +8CFD8CFA8CFB8D048D058D0A8D078D0F8D0D8D109F4E8D138CCD8D148D168D67 +8D6D8D718D738D818D998DC28DBE8DBA8DCF8DDA8DD68DCC8DDB8DCB8DEA8DEB +8DDF8DE38DFC8E088E098DFF8E1D8E1E8E108E1F8E428E358E308E348E4A0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008E478E498E4C8E508E488E598E648E608E2A8E638E558E768E728E7C8E81 +8E878E858E848E8B8E8A8E938E918E948E998EAA8EA18EAC8EB08EC68EB18EBE +8EC58EC88ECB8EDB8EE38EFC8EFB8EEB8EFE8F0A8F058F158F128F198F138F1C +8F1F8F1B8F0C8F268F338F3B8F398F458F428F3E8F4C8F498F468F4E8F578F5C +8F628F638F648F9C8F9F8FA38FAD8FAF8FB78FDA8FE58FE28FEA8FEF90878FF4 +90058FF98FFA901190159021900D901E9016900B90279036903590398FF80000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000904F905090519052900E9049903E90569058905E9068906F907696A89072 +9082907D90819080908A9089908F90A890AF90B190B590E290E4624890DB9102 +9112911991329130914A9156915891639165916991739172918B9189918291A2 +91AB91AF91AA91B591B491BA91C091C191C991CB91D091D691DF91E191DB91FC +91F591F6921E91FF9214922C92159211925E925792459249926492489295923F +924B9250929C92969293929B925A92CF92B992B792E9930F92FA9344932E0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000093199322931A9323933A9335933B935C9360937C936E935693B093AC93AD +939493B993D693D793E893E593D893C393DD93D093C893E4941A941494139403 +940794109436942B94359421943A944194529444945B94609462945E946A9229 +947094759477947D945A947C947E9481947F95829587958A9594959695989599 +95A095A895A795AD95BC95BB95B995BE95CA6FF695C395CD95CC95D595D495D6 +95DC95E195E595E296219628962E962F9642964C964F964B9677965C965E0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +70 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000965D965F96669672966C968D96989695969796AA96A796B196B296B096B4 +96B696B896B996CE96CB96C996CD894D96DC970D96D596F99704970697089713 +970E9711970F971697199724972A97309739973D973E97449746974897429749 +975C976097649766976852D2976B977197799785977C9781977A9786978B978F +9790979C97A897A697A397B397B497C397C697C897CB97DC97ED9F4F97F27ADF +97F697F5980F980C9838982498219837983D9846984F984B986B986F98700000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +71 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000098719874987398AA98AF98B198B698C498C398C698E998EB990399099912 +991499189921991D991E99249920992C992E993D993E9942994999459950994B +99519952994C99559997999899A599AD99AE99BC99DF99DB99DD99D899D199ED +99EE99F199F299FB99F89A019A0F9A0599E29A199A2B9A379A459A429A409A43 +9A3E9A559A4D9A5B9A579A5F9A629A659A649A699A6B9A6A9AAD9AB09ABC9AC0 +9ACF9AD19AD39AD49ADE9ADF9AE29AE39AE69AEF9AEB9AEE9AF49AF19AF70000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +72 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009AFB9B069B189B1A9B1F9B229B239B259B279B289B299B2A9B2E9B2F9B32 +9B449B439B4F9B4D9B4E9B519B589B749B939B839B919B969B979B9F9BA09BA8 +9BB49BC09BCA9BB99BC69BCF9BD19BD29BE39BE29BE49BD49BE19C3A9BF29BF1 +9BF09C159C149C099C139C0C9C069C089C129C0A9C049C2E9C1B9C259C249C21 +9C309C479C329C469C3E9C5A9C609C679C769C789CE79CEC9CF09D099D089CEB +9D039D069D2A9D269DAF9D239D1F9D449D159D129D419D3F9D3E9D469D480000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +73 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009D5D9D5E9D649D519D509D599D729D899D879DAB9D6F9D7A9D9A9DA49DA9 +9DB29DC49DC19DBB9DB89DBA9DC69DCF9DC29DD99DD39DF89DE69DED9DEF9DFD +9E1A9E1B9E1E9E759E799E7D9E819E889E8B9E8C9E929E959E919E9D9EA59EA9 +9EB89EAA9EAD97619ECC9ECE9ECF9ED09ED49EDC9EDE9EDD9EE09EE59EE89EEF +9EF49EF69EF79EF99EFB9EFC9EFD9F079F0876B79F159F219F2C9F3E9F4A9F52 +9F549F639F5F9F609F619F669F679F6C9F6A9F779F729F769F959F9C9FA00000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +74 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000582F69C79059746451DC7199000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +R +2141 301C FF5E +2142 2016 2225 +215D 2212 FF0D +2171 00A2 FFE0 +2172 00A3 FFE1 +224C 00AC FFE2 diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/jis0212.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/jis0212.enc new file mode 100644 index 00000000..cddbbba9 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/jis0212.enc @@ -0,0 +1,1159 @@ +# Encoding file: jis0212, double-byte +D +2244 0 68 +22 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000002D8 +02C700B802D902DD00AF02DB02DA007E03840385000000000000000000000000 +0000000000A100A600BF00000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000BA00AA00A900AE2122 +00A4211600000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +26 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000038603880389038A03AA0000038C0000038E03AB0000038F000000000000 +000003AC03AD03AE03AF03CA039003CC03C203CD03CB03B003CE000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +27 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000004020403040404050406040704080409040A040B040C040E040F0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000004520453045404550456045704580459045A045B045C045E045F0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +29 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000000C60110000001260000013200000141013F0000014A00D8015200000166 +00DE000000000000000000000000000000000000000000000000000000000000 +000000E6011100F00127013101330138014201400149014B00F8015300DF0167 +00FE000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +2A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000000C100C000C400C2010201CD0100010400C500C301060108010C00C7010A +010E00C900C800CB00CA011A0116011201180000011C011E01220120012400CD +00CC00CF00CE01CF0130012A012E0128013401360139013D013B014301470145 +00D100D300D200D600D401D10150014C00D5015401580156015A015C0160015E +0164016200DA00D900DC00DB016C01D30170016A0172016E016801D701DB01D9 +01D5017400DD017801760179017D017B00000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +2B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000000E100E000E400E2010301CE0101010500E500E301070109010D00E7010B +010F00E900E800EB00EA011B01170113011901F5011D011F00000121012500ED +00EC00EF00EE01D00000012B012F012901350137013A013E013C014401480146 +00F100F300F200F600F401D20151014D00F5015501590157015B015D0161015F +0165016300FA00F900FC00FB016D01D40171016B0173016F016901D801DC01DA +01D6017500FD00FF0177017A017E017C00000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +30 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004E024E044E054E0C4E124E1F4E234E244E284E2B4E2E4E2F4E304E354E40 +4E414E444E474E514E5A4E5C4E634E684E694E744E754E794E7F4E8D4E964E97 +4E9D4EAF4EB94EC34ED04EDA4EDB4EE04EE14EE24EE84EEF4EF14EF34EF54EFD +4EFE4EFF4F004F024F034F084F0B4F0C4F124F154F164F174F194F2E4F314F60 +4F334F354F374F394F3B4F3E4F404F424F484F494F4B4F4C4F524F544F564F58 +4F5F4F634F6A4F6C4F6E4F714F774F784F794F7A4F7D4F7E4F814F824F840000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +31 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004F854F894F8A4F8C4F8E4F904F924F934F944F974F994F9A4F9E4F9F4FB2 +4FB74FB94FBB4FBC4FBD4FBE4FC04FC14FC54FC64FC84FC94FCB4FCC4FCD4FCF +4FD24FDC4FE04FE24FF04FF24FFC4FFD4FFF5000500150045007500A500C500E +5010501350175018501B501C501D501E50225027502E50305032503350355040 +5041504250455046504A504C504E50515052505350575059505F506050625063 +50665067506A506D50705071503B5081508350845086508A508E508F50900000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +32 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005092509350945096509B509C509E509F50A050A150A250AA50AF50B050B9 +50BA50BD50C050C350C450C750CC50CE50D050D350D450D850DC50DD50DF50E2 +50E450E650E850E950EF50F150F650FA50FE5103510651075108510B510C510D +510E50F2511051175119511B511C511D511E512351275128512C512D512F5131 +513351345135513851395142514A514F5153515551575158515F51645166517E +51835184518B518E5198519D51A151A351AD51B851BA51BC51BE51BF51C20000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +33 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000051C851CF51D151D251D351D551D851DE51E251E551EE51F251F351F451F7 +5201520252055212521352155216521852225228523152325235523C52455249 +525552575258525A525C525F526052615266526E527752785279528052825285 +528A528C52935295529652975298529A529C52A452A552A652A752AF52B052B6 +52B752B852BA52BB52BD52C052C452C652C852CC52CF52D152D452D652DB52DC +52E152E552E852E952EA52EC52F052F152F452F652F753005303530A530B0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +34 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000530C531153135318531B531C531E531F5325532753285329532B532C532D +533053325335533C533D533E5342534C534B5359535B536153635365536C536D +53725379537E538353875388538E539353945399539D53A153A453AA53AB53AF +53B253B453B553B753B853BA53BD53C053C553CF53D253D353D553DA53DD53DE +53E053E653E753F554025413541A542154275428542A542F5431543454355443 +54445447544D544F545E54625464546654675469546B546D546E5474547F0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +35 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000054815483548554885489548D549154955496549C549F54A154A654A754A9 +54AA54AD54AE54B154B754B954BA54BB54BF54C654CA54CD54CE54E054EA54EC +54EF54F654FC54FE54FF55005501550555085509550C550D550E5515552A552B +553255355536553B553C553D554155475549554A554D555055515558555A555B +555E5560556155645566557F5581558255865588558E558F5591559255935594 +559755A355A455AD55B255BF55C155C355C655C955CB55CC55CE55D155D20000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +36 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000055D355D755D855DB55DE55E255E955F655FF56055608560A560D560E560F +5610561156125619562C56305633563556375639563B563C563D563F56405641 +5643564456465649564B564D564F5654565E566056615662566356665669566D +566F567156725675568456855688568B568C56955699569A569D569E569F56A6 +56A756A856A956AB56AC56AD56B156B356B756BE56C556C956CA56CB56CF56D0 +56CC56CD56D956DC56DD56DF56E156E456E556E656E756E856F156EB56ED0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +37 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000056F656F7570157025707570A570C57115715571A571B571D572057225723 +572457255729572A572C572E572F57335734573D573E573F57455746574C574D +57525762576557675768576B576D576E576F5770577157735774577557775779 +577A577B577C577E57815783578C579457975799579A579C579D579E579F57A1 +579557A757A857A957AC57B857BD57C757C857CC57CF57D557DD57DE57E457E6 +57E757E957ED57F057F557F657F857FD57FE57FF580358045808580957E10000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +38 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000580C580D581B581E581F582058265827582D58325839583F5849584C584D +584F58505855585F58615864586758685878587C587F58805881588758885889 +588A588C588D588F589058945896589D58A058A158A258A658A958B158B258C4 +58BC58C258C858CD58CE58D058D258D458D658DA58DD58E158E258E958F35905 +5906590B590C5912591359148641591D5921592359245928592F593059335935 +5936593F59435946595259535959595B595D595E595F59615963596B596D0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +39 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000596F5972597559765979597B597C598B598C598E599259955997599F59A4 +59A759AD59AE59AF59B059B359B759BA59BC59C159C359C459C859CA59CD59D2 +59DD59DE59DF59E359E459E759EE59EF59F159F259F459F75A005A045A0C5A0D +5A0E5A125A135A1E5A235A245A275A285A2A5A2D5A305A445A455A475A485A4C +5A505A555A5E5A635A655A675A6D5A775A7A5A7B5A7E5A8B5A905A935A965A99 +5A9C5A9E5A9F5AA05AA25AA75AAC5AB15AB25AB35AB55AB85ABA5ABB5ABF0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005AC45AC65AC85ACF5ADA5ADC5AE05AE55AEA5AEE5AF55AF65AFD5B005B01 +5B085B175B345B195B1B5B1D5B215B255B2D5B385B415B4B5B4C5B525B565B5E +5B685B6E5B6F5B7C5B7D5B7E5B7F5B815B845B865B8A5B8E5B905B915B935B94 +5B965BA85BA95BAC5BAD5BAF5BB15BB25BB75BBA5BBC5BC05BC15BCD5BCF5BD6 +5BD75BD85BD95BDA5BE05BEF5BF15BF45BFD5C0C5C175C1E5C1F5C235C265C29 +5C2B5C2C5C2E5C305C325C355C365C595C5A5C5C5C625C635C675C685C690000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005C6D5C705C745C755C7A5C7B5C7C5C7D5C875C885C8A5C8F5C925C9D5C9F +5CA05CA25CA35CA65CAA5CB25CB45CB55CBA5CC95CCB5CD25CDD5CD75CEE5CF1 +5CF25CF45D015D065D0D5D125D2B5D235D245D265D275D315D345D395D3D5D3F +5D425D435D465D485D555D515D595D4A5D5F5D605D615D625D645D6A5D6D5D70 +5D795D7A5D7E5D7F5D815D835D885D8A5D925D935D945D955D995D9B5D9F5DA0 +5DA75DAB5DB05DB45DB85DB95DC35DC75DCB5DD05DCE5DD85DD95DE05DE40000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3C +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005DE95DF85DF95E005E075E0D5E125E145E155E185E1F5E205E2E5E285E32 +5E355E3E5E4B5E505E495E515E565E585E5B5E5C5E5E5E685E6A5E6B5E6C5E6D +5E6E5E705E805E8B5E8E5EA25EA45EA55EA85EAA5EAC5EB15EB35EBD5EBE5EBF +5EC65ECC5ECB5ECE5ED15ED25ED45ED55EDC5EDE5EE55EEB5F025F065F075F08 +5F0E5F195F1C5F1D5F215F225F235F245F285F2B5F2C5F2E5F305F345F365F3B +5F3D5F3F5F405F445F455F475F4D5F505F545F585F5B5F605F635F645F670000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005F6F5F725F745F755F785F7A5F7D5F7E5F895F8D5F8F5F965F9C5F9D5FA2 +5FA75FAB5FA45FAC5FAF5FB05FB15FB85FC45FC75FC85FC95FCB5FD05FD15FD2 +5FD35FD45FDE5FE15FE25FE85FE95FEA5FEC5FED5FEE5FEF5FF25FF35FF65FFA +5FFC6007600A600D6013601460176018601A601F6024602D6033603560406047 +60486049604C6051605460566057605D606160676071607E607F608260866088 +608A608E6091609360956098609D609E60A260A460A560A860B060B160B70000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000060BB60BE60C260C460C860C960CA60CB60CE60CF60D460D560D960DB60DD +60DE60E260E560F260F560F860FC60FD61026107610A610C6110611161126113 +6114611661176119611C611E6122612A612B6130613161356136613761396141 +614561466149615E6160616C61726178617B617C617F6180618161836184618B +618D6192619361976198619C619D619F61A061A561A861AA61AD61B861B961BC +61C061C161C261CE61CF61D561DC61DD61DE61DF61E161E261E761E961E50000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000061EC61ED61EF620162036204620762136215621C62206222622362276229 +622B6239623D6242624362446246624C62506251625262546256625A625C6264 +626D626F6273627A627D628D628E628F629062A662A862B362B662B762BA62BE +62BF62C462CE62D562D662DA62EA62F262F462FC62FD63036304630A630B630D +63106313631663186329632A632D633563366339633C63416342634363446346 +634A634B634E6352635363546358635B63656366636C636D6371637463750000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +40 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006378637C637D637F638263846387638A6390639463956399639A639E63A4 +63A663AD63AE63AF63BD63C163C563C863CE63D163D363D463D563DC63E063E5 +63EA63EC63F263F363F563F863F96409640A6410641264146418641E64206422 +642464256429642A642F64306435643D643F644B644F6451645264536454645A +645B645C645D645F646064616463646D64736474647B647D64856487648F6490 +649164986499649B649D649F64A164A364A664A864AC64B364BD64BE64BF0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +41 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000064C464C964CA64CB64CC64CE64D064D164D564D764E464E564E964EA64ED +64F064F564F764FB64FF6501650465086509650A650F6513651465166519651B +651E651F652265266529652E6531653A653C653D654365476549655065526554 +655F65606567656B657A657D65816585658A659265956598659D65A065A365A6 +65AE65B265B365B465BF65C265C865C965CE65D065D465D665D865DF65F065F2 +65F465F565F965FE65FF6600660466086609660D6611661266156616661D0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +42 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000661E662166226623662466266629662A662B662C662E6630663166336639 +6637664066456646664A664C6651664E665766586659665B665C6660666166FB +666A666B666C667E66736675667F667766786679667B6680667C668B668C668D +669066926699669A669B669C669F66A066A466AD66B166B266B566BB66BF66C0 +66C266C366C866CC66CE66CF66D466DB66DF66E866EB66EC66EE66FA67056707 +670E67136719671C672067226733673E674567476748674C67546755675D0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +43 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006766676C676E67746776677B67816784678E678F67916793679667986799 +679B67B067B167B267B567BB67BC67BD67F967C067C267C367C567C867C967D2 +67D767D967DC67E167E667F067F267F667F7685268146819681D681F68286827 +682C682D682F683068316833683B683F68446845684A684C685568576858685B +686B686E686F68706871687268756879687A687B687C68826884688668886896 +6898689A689C68A168A368A568A968AA68AE68B268BB68C568C868CC68CF0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +44 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000068D068D168D368D668D968DC68DD68E568E868EA68EB68EC68ED68F068F1 +68F568F668FB68FC68FD69066909690A69106911691369166917693169336935 +6938693B694269456949694E6957695B696369646965696669686969696C6970 +69716972697A697B697F6980698D69926996699869A169A569A669A869AB69AD +69AF69B769B869BA69BC69C569C869D169D669D769E269E569EE69EF69F169F3 +69F569FE6A006A016A036A0F6A116A156A1A6A1D6A206A246A286A306A320000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +45 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006A346A376A3B6A3E6A3F6A456A466A496A4A6A4E6A506A516A526A556A56 +6A5B6A646A676A6A6A716A736A7E6A816A836A866A876A896A8B6A916A9B6A9D +6A9E6A9F6AA56AAB6AAF6AB06AB16AB46ABD6ABE6ABF6AC66AC96AC86ACC6AD0 +6AD46AD56AD66ADC6ADD6AE46AE76AEC6AF06AF16AF26AFC6AFD6B026B036B06 +6B076B096B0F6B106B116B176B1B6B1E6B246B286B2B6B2C6B2F6B356B366B3B +6B3F6B466B4A6B4D6B526B566B586B5D6B606B676B6B6B6E6B706B756B7D0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +46 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006B7E6B826B856B976B9B6B9F6BA06BA26BA36BA86BA96BAC6BAD6BAE6BB0 +6BB86BB96BBD6BBE6BC36BC46BC96BCC6BD66BDA6BE16BE36BE66BE76BEE6BF1 +6BF76BF96BFF6C026C046C056C096C0D6C0E6C106C126C196C1F6C266C276C28 +6C2C6C2E6C336C356C366C3A6C3B6C3F6C4A6C4B6C4D6C4F6C526C546C596C5B +6C5C6C6B6C6D6C6F6C746C766C786C796C7B6C856C866C876C896C946C956C97 +6C986C9C6C9F6CB06CB26CB46CC26CC66CCD6CCF6CD06CD16CD26CD46CD60000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +47 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006CDA6CDC6CE06CE76CE96CEB6CEC6CEE6CF26CF46D046D076D0A6D0E6D0F +6D116D136D1A6D266D276D286C676D2E6D2F6D316D396D3C6D3F6D576D5E6D5F +6D616D656D676D6F6D706D7C6D826D876D916D926D946D966D976D986DAA6DAC +6DB46DB76DB96DBD6DBF6DC46DC86DCA6DCE6DCF6DD66DDB6DDD6DDF6DE06DE2 +6DE56DE96DEF6DF06DF46DF66DFC6E006E046E1E6E226E276E326E366E396E3B +6E3C6E446E456E486E496E4B6E4F6E516E526E536E546E576E5C6E5D6E5E0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +48 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006E626E636E686E736E7B6E7D6E8D6E936E996EA06EA76EAD6EAE6EB16EB3 +6EBB6EBF6EC06EC16EC36EC76EC86ECA6ECD6ECE6ECF6EEB6EED6EEE6EF96EFB +6EFD6F046F086F0A6F0C6F0D6F166F186F1A6F1B6F266F296F2A6F2F6F306F33 +6F366F3B6F3C6F2D6F4F6F516F526F536F576F596F5A6F5D6F5E6F616F626F68 +6F6C6F7D6F7E6F836F876F886F8B6F8C6F8D6F906F926F936F946F966F9A6F9F +6FA06FA56FA66FA76FA86FAE6FAF6FB06FB56FB66FBC6FC56FC76FC86FCA0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +49 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006FDA6FDE6FE86FE96FF06FF56FF96FFC6FFD7000700570067007700D7017 +70207023702F703470377039703C7043704470487049704A704B70547055705D +705E704E70647065706C706E70757076707E7081708570867094709570967097 +7098709B70A470AB70B070B170B470B770CA70D170D370D470D570D670D870DC +70E470FA71037104710571067107710B710C710F711E7120712B712D712F7130 +713171387141714571467147714A714B715071527157715A715C715E71600000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000071687179718071857187718C7192719A719B71A071A271AF71B071B271B3 +71BA71BF71C071C171C471CB71CC71D371D671D971DA71DC71F871FE72007207 +7208720972137217721A721D721F7224722B722F723472387239724172427243 +7245724E724F7250725372557256725A725C725E726072637268726B726E726F +727172777278727B727C727F72847289728D728E7293729B72A872AD72AE72B1 +72B472BE72C172C772C972CC72D572D672D872DF72E572F372F472FA72FB0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000072FE7302730473057307730B730D7312731373187319731E732273247327 +7328732C733173327335733A733B733D7343734D7350735273567358735D735E +735F7360736673677369736B736C736E736F737173777379737C738073817383 +73857386738E73907393739573977398739C739E739F73A073A273A573A673AA +73AB73AD73B573B773B973BC73BD73BF73C573C673C973CB73CC73CF73D273D3 +73D673D973DD73E173E373E673E773E973F473F573F773F973FA73FB73FD0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4C +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000073FF7400740174047407740A7411741A741B7424742674287429742A742B +742C742D742E742F74307431743974407443744474467447744B744D74517452 +7457745D7462746674677468746B746D746E7471747274807481748574867487 +7489748F74907491749274987499749A749C749F74A074A174A374A674A874A9 +74AA74AB74AE74AF74B174B274B574B974BB74BF74C874C974CC74D074D374D8 +74DA74DB74DE74DF74E474E874EA74EB74EF74F474FA74FB74FC74FF75060000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000075127516751775207521752475277529752A752F75367539753D753E753F +7540754375477548754E755075527557755E755F7561756F75717579757A757B +757C757D757E7581758575907592759375957599759C75A275A475B475BA75BF +75C075C175C475C675CC75CE75CF75D775DC75DF75E075E175E475E775EC75EE +75EF75F175F9760076027603760476077608760A760C760F7612761376157616 +7619761B761C761D761E7623762576267629762D763276337635763876390000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000763A763C764A764076417643764476457649764B76557659765F76647665 +766D766E766F7671767476817685768C768D7695769B769C769D769F76A076A2 +76A376A476A576A676A776A876AA76AD76BD76C176C576C976CB76CC76CE76D4 +76D976E076E676E876EC76F076F176F676F976FC77007706770A770E77127714 +771577177719771A771C77227728772D772E772F7734773577367739773D773E +774277457746774A774D774E774F775277567757775C775E775F776077620000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000077647767776A776C7770777277737774777A777D77807784778C778D7794 +77957796779A779F77A277A777AA77AE77AF77B177B577BE77C377C977D177D2 +77D577D977DE77DF77E077E477E677EA77EC77F077F177F477F877FB78057806 +7809780D780E7811781D782178227823782D782E783078357837784378447847 +7848784C784E7852785C785E78607861786378647868786A786E787A787E788A +788F7894789878A1789D789E789F78A478A878AC78AD78B078B178B278B30000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +50 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000078BB78BD78BF78C778C878C978CC78CE78D278D378D578D678E478DB78DF +78E078E178E678EA78F278F3790078F678F778FA78FB78FF7906790C7910791A +791C791E791F7920792579277929792D793179347935793B793D793F79447945 +7946794A794B794F795179547958795B795C79677969796B79727979797B797C +797E798B798C799179937994799579967998799B799C79A179A879A979AB79AF +79B179B479B879BB79C279C479C779C879CA79CF79D479D679DA79DD79DE0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +51 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000079E079E279E579EA79EB79ED79F179F879FC7A027A037A077A097A0A7A0C +7A117A157A1B7A1E7A217A277A2B7A2D7A2F7A307A347A357A387A397A3A7A44 +7A457A477A487A4C7A557A567A597A5C7A5D7A5F7A607A657A677A6A7A6D7A75 +7A787A7E7A807A827A857A867A8A7A8B7A907A917A947A9E7AA07AA37AAC7AB3 +7AB57AB97ABB7ABC7AC67AC97ACC7ACE7AD17ADB7AE87AE97AEB7AEC7AF17AF4 +7AFB7AFD7AFE7B077B147B1F7B237B277B297B2A7B2B7B2D7B2E7B2F7B300000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +52 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007B317B347B3D7B3F7B407B417B477B4E7B557B607B647B667B697B6A7B6D +7B6F7B727B737B777B847B897B8E7B907B917B967B9B7B9E7BA07BA57BAC7BAF +7BB07BB27BB57BB67BBA7BBB7BBC7BBD7BC27BC57BC87BCA7BD47BD67BD77BD9 +7BDA7BDB7BE87BEA7BF27BF47BF57BF87BF97BFA7BFC7BFE7C017C027C037C04 +7C067C097C0B7C0C7C0E7C0F7C197C1B7C207C257C267C287C2C7C317C337C34 +7C367C397C3A7C467C4A7C557C517C527C537C597C5A7C5B7C5C7C5D7C5E0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +53 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007C617C637C677C697C6D7C6E7C707C727C797C7C7C7D7C867C877C8F7C94 +7C9E7CA07CA67CB07CB67CB77CBA7CBB7CBC7CBF7CC47CC77CC87CC97CCD7CCF +7CD37CD47CD57CD77CD97CDA7CDD7CE67CE97CEB7CF57D037D077D087D097D0F +7D117D127D137D167D1D7D1E7D237D267D2A7D2D7D317D3C7D3D7D3E7D407D41 +7D477D487D4D7D517D537D577D597D5A7D5C7D5D7D657D677D6A7D707D787D7A +7D7B7D7F7D817D827D837D857D867D887D8B7D8C7D8D7D917D967D977D9D0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +54 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007D9E7DA67DA77DAA7DB37DB67DB77DB97DC27DC37DC47DC57DC67DCC7DCD +7DCE7DD77DD97E007DE27DE57DE67DEA7DEB7DED7DF17DF57DF67DF97DFA7E08 +7E107E117E157E177E1C7E1D7E207E277E287E2C7E2D7E2F7E337E367E3F7E44 +7E457E477E4E7E507E527E587E5F7E617E627E657E6B7E6E7E6F7E737E787E7E +7E817E867E877E8A7E8D7E917E957E987E9A7E9D7E9E7F3C7F3B7F3D7F3E7F3F +7F437F447F477F4F7F527F537F5B7F5C7F5D7F617F637F647F657F667F6D0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +55 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007F717F7D7F7E7F7F7F807F8B7F8D7F8F7F907F917F967F977F9C7FA17FA2 +7FA67FAA7FAD7FB47FBC7FBF7FC07FC37FC87FCE7FCF7FDB7FDF7FE37FE57FE8 +7FEC7FEE7FEF7FF27FFA7FFD7FFE7FFF80078008800A800D800E800F80118013 +80148016801D801E801F802080248026802C802E80308034803580378039803A +803C803E80408044806080648066806D8071807580818088808E809C809E80A6 +80A780AB80B880B980C880CD80CF80D280D480D580D780D880E080ED80EE0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +56 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000080F080F280F380F680F980FA80FE8103810B811681178118811C811E8120 +81248127812C81308135813A813C81458147814A814C81528157816081618167 +81688169816D816F817781818190818481858186818B818E81968198819B819E +81A281AE81B281B481BB81CB81C381C581CA81CE81CF81D581D781DB81DD81DE +81E181E481EB81EC81F081F181F281F581F681F881F981FD81FF82008203820F +821382148219821A821D82218222822882328234823A82438244824582460000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +57 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000824B824E824F82518256825C826082638267826D8274827B827D827F8280 +82818283828482878289828A828E8291829482968298829A829B82A082A182A3 +82A482A782A882A982AA82AE82B082B282B482B782BA82BC82BE82BF82C682D0 +82D582DA82E082E282E482E882EA82ED82EF82F682F782FD82FE830083018307 +8308830A830B8354831B831D831E831F83218322832C832D832E833083338337 +833A833C833D8342834383448347834D834E8351835583568357837083780000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +58 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000837D837F8380838283848386838D83928394839583988399839B839C839D +83A683A783A983AC83BE83BF83C083C783C983CF83D083D183D483DD835383E8 +83EA83F683F883F983FC84018406840A840F84118415841983AD842F84398445 +84478448844A844D844F84518452845684588459845A845C8460846484658467 +846A84708473847484768478847C847D84818485849284938495849E84A684A8 +84A984AA84AF84B184B484BA84BD84BE84C084C284C784C884CC84CF84D30000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +59 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000084DC84E784EA84EF84F084F184F284F7853284FA84FB84FD850285038507 +850C850E8510851C851E85228523852485258527852A852B852F853385348536 +853F8546854F855085518552855385568559855C855D855E855F856085618562 +8564856B856F8579857A857B857D857F8581858585868589858B858C858F8593 +8598859D859F85A085A285A585A785B485B685B785B885BC85BD85BE85BF85C2 +85C785CA85CB85CE85AD85D885DA85DF85E085E685E885ED85F385F685FC0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000085FF860086048605860D860E86108611861286188619861B861E86218627 +862986368638863A863C863D864086428646865286538656865786588659865D +866086618662866386648669866C866F867586768677867A868D869186968698 +869A869C86A186A686A786A886AD86B186B386B486B586B786B886B986BF86C0 +86C186C386C586D186D286D586D786DA86DC86E086E386E586E7868886FA86FC +86FD870487058707870B870E870F8710871387148719871E871F872187230000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008728872E872F873187328739873A873C873D873E874087438745874D8758 +875D876187648765876F87718772877B8783878487858786878787888789878B +878C879087938795879787988799879E87A087A387A787AC87AD87AE87B187B5 +87BE87BF87C187C887C987CA87CE87D587D687D987DA87DC87DF87E287E387E4 +87EA87EB87ED87F187F387F887FA87FF8801880388068809880A880B88108819 +8812881388148818881A881B881C881E881F8828882D882E8830883288350000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5C +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000883A883C88418843884588488849884A884B884E8851885588568858885A +885C885F88608864886988718879887B88808898889A889B889C889F88A088A8 +88AA88BA88BD88BE88C088CA88CB88CC88CD88CE88D188D288D388DB88DE88E7 +88EF88F088F188F588F789018906890D890E890F8915891689188919891A891C +892089268927892889308931893289358939893A893E89408942894589468949 +894F89528957895A895B895C896189628963896B896E897089738975897A0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000897B897C897D8989898D899089948995899B899C899F89A089A589B089B4 +89B589B689B789BC89D489D589D689D789D889E589E989EB89ED89F189F389F6 +89F989FD89FF8A048A058A078A0F8A118A128A148A158A1E8A208A228A248A26 +8A2B8A2C8A2F8A358A378A3D8A3E8A408A438A458A478A498A4D8A4E8A538A56 +8A578A588A5C8A5D8A618A658A678A758A768A778A798A7A8A7B8A7E8A7F8A80 +8A838A868A8B8A8F8A908A928A968A978A998A9F8AA78AA98AAE8AAF8AB30000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008AB68AB78ABB8ABE8AC38AC68AC88AC98ACA8AD18AD38AD48AD58AD78ADD +8ADF8AEC8AF08AF48AF58AF68AFC8AFF8B058B068B0B8B118B1C8B1E8B1F8B0A +8B2D8B308B378B3C8B428B438B448B458B468B488B528B538B548B598B4D8B5E +8B638B6D8B768B788B798B7C8B7E8B818B848B858B8B8B8D8B8F8B948B958B9C +8B9E8B9F8C388C398C3D8C3E8C458C478C498C4B8C4F8C518C538C548C578C58 +8C5B8C5D8C598C638C648C668C688C698C6D8C738C758C768C7B8C7E8C860000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008C878C8B8C908C928C938C998C9B8C9C8CA48CB98CBA8CC58CC68CC98CCB +8CCF8CD68CD58CD98CDD8CE18CE88CEC8CEF8CF08CF28CF58CF78CF88CFE8CFF +8D018D038D098D128D178D1B8D658D698D6C8D6E8D7F8D828D848D888D8D8D90 +8D918D958D9E8D9F8DA08DA68DAB8DAC8DAF8DB28DB58DB78DB98DBB8DC08DC5 +8DC68DC78DC88DCA8DCE8DD18DD48DD58DD78DD98DE48DE58DE78DEC8DF08DBC +8DF18DF28DF48DFD8E018E048E058E068E0B8E118E148E168E208E218E220000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +60 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008E238E268E278E318E338E368E378E388E398E3D8E408E418E4B8E4D8E4E +8E4F8E548E5B8E5C8E5D8E5E8E618E628E698E6C8E6D8E6F8E708E718E798E7A +8E7B8E828E838E898E908E928E958E9A8E9B8E9D8E9E8EA28EA78EA98EAD8EAE +8EB38EB58EBA8EBB8EC08EC18EC38EC48EC78ECF8ED18ED48EDC8EE88EEE8EF0 +8EF18EF78EF98EFA8EED8F008F028F078F088F0F8F108F168F178F188F1E8F20 +8F218F238F258F278F288F2C8F2D8F2E8F348F358F368F378F3A8F408F410000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +61 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008F438F478F4F8F518F528F538F548F558F588F5D8F5E8F658F9D8FA08FA1 +8FA48FA58FA68FB58FB68FB88FBE8FC08FC18FC68FCA8FCB8FCD8FD08FD28FD3 +8FD58FE08FE38FE48FE88FEE8FF18FF58FF68FFB8FFE900290049008900C9018 +901B90289029902F902A902C902D903390349037903F90439044904C905B905D +906290669067906C90709074907990859088908B908C908E9090909590979098 +9099909B90A090A190A290A590B090B290B390B490B690BD90CC90BE90C30000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +62 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000090C490C590C790C890D590D790D890D990DC90DD90DF90E590D290F690EB +90EF90F090F490FE90FF91009104910591069108910D91109114911691179118 +911A911C911E912091259122912391279129912E912F91319134913691379139 +913A913C913D914391479148914F915391579159915A915B916191649167916D +91749179917A917B9181918391859186918A918E91919193919491959198919E +91A191A691A891AC91AD91AE91B091B191B291B391B691BB91BC91BD91BF0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +63 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000091C291C391C591D391D491D791D991DA91DE91E491E591E991EA91EC91ED +91EE91EF91F091F191F791F991FB91FD9200920192049205920692079209920A +920C92109212921392169218921C921D92239224922592269228922E922F9230 +92339235923692389239923A923C923E92409242924392469247924A924D924E +924F925192589259925C925D926092619265926792689269926E926F92709275 +9276927792789279927B927C927D927F92889289928A928D928E929292970000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +64 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009299929F92A092A492A592A792A892AB92AF92B292B692B892BA92BB92BC +92BD92BF92C092C192C292C392C592C692C792C892CB92CC92CD92CE92D092D3 +92D592D792D892D992DC92DD92DF92E092E192E392E592E792E892EC92EE92F0 +92F992FB92FF930093029308930D931193149315931C931D931E931F93219324 +932593279329932A933393349336933793479348934993509351935293559357 +9358935A935E9364936593679369936A936D936F937093719373937493760000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +65 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000937A937D937F9380938193829388938A938B938D938F939293959398939B +939E93A193A393A493A693A893AB93B493B593B693BA93A993C193C493C593C6 +93C793C993CA93CB93CC93CD93D393D993DC93DE93DF93E293E693E793F993F7 +93F893FA93FB93FD94019402940494089409940D940E940F941594169417941F +942E942F9431943294339434943B943F943D944394459448944A944C94559459 +945C945F946194639468946B946D946E946F9471947294849483957895790000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +66 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000957E95849588958C958D958E959D959E959F95A195A695A995AB95AC95B4 +95B695BA95BD95BF95C695C895C995CB95D095D195D295D395D995DA95DD95DE +95DF95E095E495E6961D961E9622962496259626962C96319633963796389639 +963A963C963D9641965296549656965796589661966E9674967B967C967E967F +9681968296839684968996919696969A969D969F96A496A596A696A996AE96AF +96B396BA96CA96D25DB296D896DA96DD96DE96DF96E996EF96F196FA97020000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +67 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000970397059709971A971B971D97219722972397289731973397419743974A +974E974F975597579758975A975B97639767976A976E9773977697779778977B +977D977F978097899795979697979799979A979E979F97A297AC97AE97B197B2 +97B597B697B897B997BA97BC97BE97BF97C197C497C597C797C997CA97CC97CD +97CE97D097D197D497D797D897D997DD97DE97E097DB97E197E497EF97F197F4 +97F797F897FA9807980A9819980D980E98149816981C981E9820982398260000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +68 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000982B982E982F98309832983398359825983E98449847984A985198529853 +985698579859985A9862986398659866986A986C98AB98AD98AE98B098B498B7 +98B898BA98BB98BF98C298C598C898CC98E198E398E598E698E798EA98F398F6 +9902990799089911991599169917991A991B991C991F992299269927992B9931 +99329933993499359939993A993B993C99409941994699479948994D994E9954 +99589959995B995C995E995F9960999B999D999F99A699B099B199B299B50000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +69 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000099B999BA99BD99BF99C399C999D399D499D999DA99DC99DE99E799EA99EB +99EC99F099F499F599F999FD99FE9A029A039A049A0B9A0C9A109A119A169A1E +9A209A229A239A249A279A2D9A2E9A339A359A369A389A479A419A449A4A9A4B +9A4C9A4E9A519A549A569A5D9AAA9AAC9AAE9AAF9AB29AB49AB59AB69AB99ABB +9ABE9ABF9AC19AC39AC69AC89ACE9AD09AD29AD59AD69AD79ADB9ADC9AE09AE4 +9AE59AE79AE99AEC9AF29AF39AF59AF99AFA9AFD9AFF9B009B019B029B030000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009B049B059B089B099B0B9B0C9B0D9B0E9B109B129B169B199B1B9B1C9B20 +9B269B2B9B2D9B339B349B359B379B399B3A9B3D9B489B4B9B4C9B559B569B57 +9B5B9B5E9B619B639B659B669B689B6A9B6B9B6C9B6D9B6E9B739B759B779B78 +9B799B7F9B809B849B859B869B879B899B8A9B8B9B8D9B8F9B909B949B9A9B9D +9B9E9BA69BA79BA99BAC9BB09BB19BB29BB79BB89BBB9BBC9BBE9BBF9BC19BC7 +9BC89BCE9BD09BD79BD89BDD9BDF9BE59BE79BEA9BEB9BEF9BF39BF79BF80000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009BF99BFA9BFD9BFF9C009C029C0B9C0F9C119C169C189C199C1A9C1C9C1E +9C229C239C269C279C289C299C2A9C319C359C369C379C3D9C419C439C449C45 +9C499C4A9C4E9C4F9C509C539C549C569C589C5B9C5D9C5E9C5F9C639C699C6A +9C5C9C6B9C689C6E9C709C729C759C779C7B9CE69CF29CF79CF99D0B9D029D11 +9D179D189D1C9D1D9D1E9D2F9D309D329D339D349D3A9D3C9D459D3D9D429D43 +9D479D4A9D539D549D5F9D639D629D659D699D6A9D6B9D709D769D779D7B0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6C +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009D7C9D7E9D839D849D869D8A9D8D9D8E9D929D939D959D969D979D989DA1 +9DAA9DAC9DAE9DB19DB59DB99DBC9DBF9DC39DC79DC99DCA9DD49DD59DD69DD7 +9DDA9DDE9DDF9DE09DE59DE79DE99DEB9DEE9DF09DF39DF49DFE9E0A9E029E07 +9E0E9E109E119E129E159E169E199E1C9E1D9E7A9E7B9E7C9E809E829E839E84 +9E859E879E8E9E8F9E969E989E9B9E9E9EA49EA89EAC9EAE9EAF9EB09EB39EB4 +9EB59EC69EC89ECB9ED59EDF9EE49EE79EEC9EED9EEE9EF09EF19EF29EF50000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009EF89EFF9F029F039F099F0F9F109F119F129F149F169F179F199F1A9F1B +9F1F9F229F269F2A9F2B9F2F9F319F329F349F379F399F3A9F3C9F3D9F3F9F41 +9F439F449F459F469F479F539F559F569F579F589F5A9F5D9F5E9F689F699F6D +9F6E9F6F9F709F719F739F759F7A9F7D9F8F9F909F919F929F949F969F979F9E +9FA19FA29FA39FA5000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/koi8-r.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/koi8-r.enc new file mode 100644 index 00000000..49bf2ea6 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/koi8-r.enc @@ -0,0 +1,20 @@ +# Encoding file: koi8-r, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +25002502250C251025142518251C2524252C2534253C258025842588258C2590 +259125922593232025A02219221A22482264226500A0232100B000B200B700F7 +25502551255204512553255425552556255725582559255A255B255C255D255E +255F25602561040125622563256425652566256725682569256A256B256C00A9 +044E0430043104460434043504440433044504380439043A043B043C043D043E +043F044F044004410442044304360432044C044B04370448044D04490447044A +042E0410041104260414041504240413042504180419041A041B041C041D041E +041F042F042004210422042304160412042C042B04170428042D04290427042A diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/koi8-u.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/koi8-u.enc new file mode 100644 index 00000000..e4eeb845 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/koi8-u.enc @@ -0,0 +1,20 @@ +# Encoding file: koi8-u, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +25002502250C251025142518251C2524252C2534253C258025842588258C2590 +259125922593232025A02219221A22482264226500A0232100B000B200B700F7 +25502551255204510454255404560457255725582559255A255B0491255D255E +255F25602561040104032563040604072566256725682569256A0490256C00A9 +044E0430043104460434043504440433044504380439043A043B043C043D043E +043F044F044004410442044304360432044C044B04370448044D04490447044A +042E0410041104260414041504240413042504180419041A041B041C041D041E +041F042F042004210422042304160412042C042B04170428042D04290427042A diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/ksc5601.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/ksc5601.enc new file mode 100644 index 00000000..bec61d0f --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/ksc5601.enc @@ -0,0 +1,1516 @@ +# Encoding file: ksc5601, double-byte +D +233F 0 89 +21 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000030003001300200B72025202600A8300300AD20152225FF3C223C20182019 +201C201D3014301530083009300A300B300C300D300E300F3010301100B100D7 +00F7226022642265221E223400B0203220332103212BFFE0FFE1FFE526422640 +222022A52312220222072261225200A7203B2606260525CB25CF25CE25C725C6 +25A125A025B325B225BD25BC219221902191219321943013226A226B221A223D +221D2235222B222C2208220B2286228722822283222A222922272228FFE20000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +22 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000021D221D42200220300B4FF5E02C702D802DD02DA02D900B802DB00A100BF +02D0222E2211220F00A42109203025C125C025B725B626642660266126652667 +2663229925C825A325D025D1259225A425A525A825A725A625A92668260F260E +261C261E00B62020202121952197219921962198266D2669266A266C327F321C +211633C7212233C233D821210000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +23 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000FF01FF02FF03FF04FF05FF06FF07FF08FF09FF0AFF0BFF0CFF0DFF0EFF0F +FF10FF11FF12FF13FF14FF15FF16FF17FF18FF19FF1AFF1BFF1CFF1DFF1EFF1F +FF20FF21FF22FF23FF24FF25FF26FF27FF28FF29FF2AFF2BFF2CFF2DFF2EFF2F +FF30FF31FF32FF33FF34FF35FF36FF37FF38FF39FF3AFF3BFFE6FF3DFF3EFF3F +FF40FF41FF42FF43FF44FF45FF46FF47FF48FF49FF4AFF4BFF4CFF4DFF4EFF4F +FF50FF51FF52FF53FF54FF55FF56FF57FF58FF59FF5AFF5BFF5CFF5DFFE30000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +24 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000313131323133313431353136313731383139313A313B313C313D313E313F +3140314131423143314431453146314731483149314A314B314C314D314E314F +3150315131523153315431553156315731583159315A315B315C315D315E315F +3160316131623163316431653166316731683169316A316B316C316D316E316F +3170317131723173317431753176317731783179317A317B317C317D317E317F +3180318131823183318431853186318731883189318A318B318C318D318E0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +25 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000217021712172217321742175217621772178217900000000000000000000 +2160216121622163216421652166216721682169000000000000000000000000 +0000039103920393039403950396039703980399039A039B039C039D039E039F +03A003A103A303A403A503A603A703A803A90000000000000000000000000000 +000003B103B203B303B403B503B603B703B803B903BA03BB03BC03BD03BE03BF +03C003C103C303C403C503C603C703C803C90000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +26 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000025002502250C251025182514251C252C25242534253C25012503250F2513 +251B251725232533252B253B254B2520252F25282537253F251D253025252538 +254225122511251A251925162515250E250D251E251F25212522252625272529 +252A252D252E25312532253525362539253A253D253E25402541254325442545 +2546254725482549254A00000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +27 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00003395339633972113339833C433A333A433A533A63399339A339B339C339D +339E339F33A033A133A233CA338D338E338F33CF3388338933C833A733A833B0 +33B133B233B333B433B533B633B733B833B93380338133823383338433BA33BB +33BC33BD33BE33BF33903391339233933394212633C033C1338A338B338C33D6 +33C533AD33AE33AF33DB33A933AA33AB33AC33DD33D033D333C333C933DC33C6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +28 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000000C600D000AA0126000001320000013F014100D8015200BA00DE0166014A +00003260326132623263326432653266326732683269326A326B326C326D326E +326F3270327132723273327432753276327732783279327A327B24D024D124D2 +24D324D424D524D624D724D824D924DA24DB24DC24DD24DE24DF24E024E124E2 +24E324E424E524E624E724E824E9246024612462246324642465246624672468 +2469246A246B246C246D246E00BD2153215400BC00BE215B215C215D215E0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +29 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000000E6011100F001270131013301380140014200F8015300DF00FE0167014B +01493200320132023203320432053206320732083209320A320B320C320D320E +320F3210321132123213321432153216321732183219321A321B249C249D249E +249F24A024A124A224A324A424A524A624A724A824A924AA24AB24AC24AD24AE +24AF24B024B124B224B324B424B5247424752476247724782479247A247B247C +247D247E247F24802481248200B900B200B32074207F20812082208320840000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +2A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000304130423043304430453046304730483049304A304B304C304D304E304F +3050305130523053305430553056305730583059305A305B305C305D305E305F +3060306130623063306430653066306730683069306A306B306C306D306E306F +3070307130723073307430753076307730783079307A307B307C307D307E307F +3080308130823083308430853086308730883089308A308B308C308D308E308F +3090309130923093000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +2B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000030A130A230A330A430A530A630A730A830A930AA30AB30AC30AD30AE30AF +30B030B130B230B330B430B530B630B730B830B930BA30BB30BC30BD30BE30BF +30C030C130C230C330C430C530C630C730C830C930CA30CB30CC30CD30CE30CF +30D030D130D230D330D430D530D630D730D830D930DA30DB30DC30DD30DE30DF +30E030E130E230E330E430E530E630E730E830E930EA30EB30EC30ED30EE30EF +30F030F130F230F330F430F530F6000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +2C +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000004100411041204130414041504010416041704180419041A041B041C041D +041E041F0420042104220423042404250426042704280429042A042B042C042D +042E042F00000000000000000000000000000000000000000000000000000000 +000004300431043204330434043504510436043704380439043A043B043C043D +043E043F0440044104420443044404450446044704480449044A044B044C044D +044E044F00000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +30 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000AC00AC01AC04AC07AC08AC09AC0AAC10AC11AC12AC13AC14AC15AC16AC17 +AC19AC1AAC1BAC1CAC1DAC20AC24AC2CAC2DAC2FAC30AC31AC38AC39AC3CAC40 +AC4BAC4DAC54AC58AC5CAC70AC71AC74AC77AC78AC7AAC80AC81AC83AC84AC85 +AC86AC89AC8AAC8BAC8CAC90AC94AC9CAC9DAC9FACA0ACA1ACA8ACA9ACAAACAC +ACAFACB0ACB8ACB9ACBBACBCACBDACC1ACC4ACC8ACCCACD5ACD7ACE0ACE1ACE4 +ACE7ACE8ACEAACECACEFACF0ACF1ACF3ACF5ACF6ACFCACFDAD00AD04AD060000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +31 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000AD0CAD0DAD0FAD11AD18AD1CAD20AD29AD2CAD2DAD34AD35AD38AD3CAD44 +AD45AD47AD49AD50AD54AD58AD61AD63AD6CAD6DAD70AD73AD74AD75AD76AD7B +AD7CAD7DAD7FAD81AD82AD88AD89AD8CAD90AD9CAD9DADA4ADB7ADC0ADC1ADC4 +ADC8ADD0ADD1ADD3ADDCADE0ADE4ADF8ADF9ADFCADFFAE00AE01AE08AE09AE0B +AE0DAE14AE30AE31AE34AE37AE38AE3AAE40AE41AE43AE45AE46AE4AAE4CAE4D +AE4EAE50AE54AE56AE5CAE5DAE5FAE60AE61AE65AE68AE69AE6CAE70AE780000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +32 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000AE79AE7BAE7CAE7DAE84AE85AE8CAEBCAEBDAEBEAEC0AEC4AECCAECDAECF +AED0AED1AED8AED9AEDCAEE8AEEBAEEDAEF4AEF8AEFCAF07AF08AF0DAF10AF2C +AF2DAF30AF32AF34AF3CAF3DAF3FAF41AF42AF43AF48AF49AF50AF5CAF5DAF64 +AF65AF79AF80AF84AF88AF90AF91AF95AF9CAFB8AFB9AFBCAFC0AFC7AFC8AFC9 +AFCBAFCDAFCEAFD4AFDCAFE8AFE9AFF0AFF1AFF4AFF8B000B001B004B00CB010 +B014B01CB01DB028B044B045B048B04AB04CB04EB053B054B055B057B0590000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +33 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000B05DB07CB07DB080B084B08CB08DB08FB091B098B099B09AB09CB09FB0A0 +B0A1B0A2B0A8B0A9B0ABB0ACB0ADB0AEB0AFB0B1B0B3B0B4B0B5B0B8B0BCB0C4 +B0C5B0C7B0C8B0C9B0D0B0D1B0D4B0D8B0E0B0E5B108B109B10BB10CB110B112 +B113B118B119B11BB11CB11DB123B124B125B128B12CB134B135B137B138B139 +B140B141B144B148B150B151B154B155B158B15CB160B178B179B17CB180B182 +B188B189B18BB18DB192B193B194B198B19CB1A8B1CCB1D0B1D4B1DCB1DD0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +34 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000B1DFB1E8B1E9B1ECB1F0B1F9B1FBB1FDB204B205B208B20BB20CB214B215 +B217B219B220B234B23CB258B25CB260B268B269B274B275B27CB284B285B289 +B290B291B294B298B299B29AB2A0B2A1B2A3B2A5B2A6B2AAB2ACB2B0B2B4B2C8 +B2C9B2CCB2D0B2D2B2D8B2D9B2DBB2DDB2E2B2E4B2E5B2E6B2E8B2EBB2ECB2ED +B2EEB2EFB2F3B2F4B2F5B2F7B2F8B2F9B2FAB2FBB2FFB300B301B304B308B310 +B311B313B314B315B31CB354B355B356B358B35BB35CB35EB35FB364B3650000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +35 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000B367B369B36BB36EB370B371B374B378B380B381B383B384B385B38CB390 +B394B3A0B3A1B3A8B3ACB3C4B3C5B3C8B3CBB3CCB3CEB3D0B3D4B3D5B3D7B3D9 +B3DBB3DDB3E0B3E4B3E8B3FCB410B418B41CB420B428B429B42BB434B450B451 +B454B458B460B461B463B465B46CB480B488B49DB4A4B4A8B4ACB4B5B4B7B4B9 +B4C0B4C4B4C8B4D0B4D5B4DCB4DDB4E0B4E3B4E4B4E6B4ECB4EDB4EFB4F1B4F8 +B514B515B518B51BB51CB524B525B527B528B529B52AB530B531B534B5380000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +36 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000B540B541B543B544B545B54BB54CB54DB550B554B55CB55DB55FB560B561 +B5A0B5A1B5A4B5A8B5AAB5ABB5B0B5B1B5B3B5B4B5B5B5BBB5BCB5BDB5C0B5C4 +B5CCB5CDB5CFB5D0B5D1B5D8B5ECB610B611B614B618B625B62CB634B648B664 +B668B69CB69DB6A0B6A4B6ABB6ACB6B1B6D4B6F0B6F4B6F8B700B701B705B728 +B729B72CB72FB730B738B739B73BB744B748B74CB754B755B760B764B768B770 +B771B773B775B77CB77DB780B784B78CB78DB78FB790B791B792B796B7970000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +37 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000B798B799B79CB7A0B7A8B7A9B7ABB7ACB7ADB7B4B7B5B7B8B7C7B7C9B7EC +B7EDB7F0B7F4B7FCB7FDB7FFB800B801B807B808B809B80CB810B818B819B81B +B81DB824B825B828B82CB834B835B837B838B839B840B844B851B853B85CB85D +B860B864B86CB86DB86FB871B878B87CB88DB8A8B8B0B8B4B8B8B8C0B8C1B8C3 +B8C5B8CCB8D0B8D4B8DDB8DFB8E1B8E8B8E9B8ECB8F0B8F8B8F9B8FBB8FDB904 +B918B920B93CB93DB940B944B94CB94FB951B958B959B95CB960B968B9690000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +38 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000B96BB96DB974B975B978B97CB984B985B987B989B98AB98DB98EB9ACB9AD +B9B0B9B4B9BCB9BDB9BFB9C1B9C8B9C9B9CCB9CEB9CFB9D0B9D1B9D2B9D8B9D9 +B9DBB9DDB9DEB9E1B9E3B9E4B9E5B9E8B9ECB9F4B9F5B9F7B9F8B9F9B9FABA00 +BA01BA08BA15BA38BA39BA3CBA40BA42BA48BA49BA4BBA4DBA4EBA53BA54BA55 +BA58BA5CBA64BA65BA67BA68BA69BA70BA71BA74BA78BA83BA84BA85BA87BA8C +BAA8BAA9BAABBAACBAB0BAB2BAB8BAB9BABBBABDBAC4BAC8BAD8BAD9BAFC0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +39 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000BB00BB04BB0DBB0FBB11BB18BB1CBB20BB29BB2BBB34BB35BB36BB38BB3B +BB3CBB3DBB3EBB44BB45BB47BB49BB4DBB4FBB50BB54BB58BB61BB63BB6CBB88 +BB8CBB90BBA4BBA8BBACBBB4BBB7BBC0BBC4BBC8BBD0BBD3BBF8BBF9BBFCBBFF +BC00BC02BC08BC09BC0BBC0CBC0DBC0FBC11BC14BC15BC16BC17BC18BC1BBC1C +BC1DBC1EBC1FBC24BC25BC27BC29BC2DBC30BC31BC34BC38BC40BC41BC43BC44 +BC45BC49BC4CBC4DBC50BC5DBC84BC85BC88BC8BBC8CBC8EBC94BC95BC970000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000BC99BC9ABCA0BCA1BCA4BCA7BCA8BCB0BCB1BCB3BCB4BCB5BCBCBCBDBCC0 +BCC4BCCDBCCFBCD0BCD1BCD5BCD8BCDCBCF4BCF5BCF6BCF8BCFCBD04BD05BD07 +BD09BD10BD14BD24BD2CBD40BD48BD49BD4CBD50BD58BD59BD64BD68BD80BD81 +BD84BD87BD88BD89BD8ABD90BD91BD93BD95BD99BD9ABD9CBDA4BDB0BDB8BDD4 +BDD5BDD8BDDCBDE9BDF0BDF4BDF8BE00BE03BE05BE0CBE0DBE10BE14BE1CBE1D +BE1FBE44BE45BE48BE4CBE4EBE54BE55BE57BE59BE5ABE5BBE60BE61BE640000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000BE68BE6ABE70BE71BE73BE74BE75BE7BBE7CBE7DBE80BE84BE8CBE8DBE8F +BE90BE91BE98BE99BEA8BED0BED1BED4BED7BED8BEE0BEE3BEE4BEE5BEECBF01 +BF08BF09BF18BF19BF1BBF1CBF1DBF40BF41BF44BF48BF50BF51BF55BF94BFB0 +BFC5BFCCBFCDBFD0BFD4BFDCBFDFBFE1C03CC051C058C05CC060C068C069C090 +C091C094C098C0A0C0A1C0A3C0A5C0ACC0ADC0AFC0B0C0B3C0B4C0B5C0B6C0BC +C0BDC0BFC0C0C0C1C0C5C0C8C0C9C0CCC0D0C0D8C0D9C0DBC0DCC0DDC0E40000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3C +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000C0E5C0E8C0ECC0F4C0F5C0F7C0F9C100C104C108C110C115C11CC11DC11E +C11FC120C123C124C126C127C12CC12DC12FC130C131C136C138C139C13CC140 +C148C149C14BC14CC14DC154C155C158C15CC164C165C167C168C169C170C174 +C178C185C18CC18DC18EC190C194C196C19CC19DC19FC1A1C1A5C1A8C1A9C1AC +C1B0C1BDC1C4C1C8C1CCC1D4C1D7C1D8C1E0C1E4C1E8C1F0C1F1C1F3C1FCC1FD +C200C204C20CC20DC20FC211C218C219C21CC21FC220C228C229C22BC22D0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000C22FC231C232C234C248C250C251C254C258C260C265C26CC26DC270C274 +C27CC27DC27FC281C288C289C290C298C29BC29DC2A4C2A5C2A8C2ACC2ADC2B4 +C2B5C2B7C2B9C2DCC2DDC2E0C2E3C2E4C2EBC2ECC2EDC2EFC2F1C2F6C2F8C2F9 +C2FBC2FCC300C308C309C30CC30DC313C314C315C318C31CC324C325C328C329 +C345C368C369C36CC370C372C378C379C37CC37DC384C388C38CC3C0C3D8C3D9 +C3DCC3DFC3E0C3E2C3E8C3E9C3EDC3F4C3F5C3F8C408C410C424C42CC4300000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000C434C43CC43DC448C464C465C468C46CC474C475C479C480C494C49CC4B8 +C4BCC4E9C4F0C4F1C4F4C4F8C4FAC4FFC500C501C50CC510C514C51CC528C529 +C52CC530C538C539C53BC53DC544C545C548C549C54AC54CC54DC54EC553C554 +C555C557C558C559C55DC55EC560C561C564C568C570C571C573C574C575C57C +C57DC580C584C587C58CC58DC58FC591C595C597C598C59CC5A0C5A9C5B4C5B5 +C5B8C5B9C5BBC5BCC5BDC5BEC5C4C5C5C5C6C5C7C5C8C5C9C5CAC5CCC5CE0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000C5D0C5D1C5D4C5D8C5E0C5E1C5E3C5E5C5ECC5EDC5EEC5F0C5F4C5F6C5F7 +C5FCC5FDC5FEC5FFC600C601C605C606C607C608C60CC610C618C619C61BC61C +C624C625C628C62CC62DC62EC630C633C634C635C637C639C63BC640C641C644 +C648C650C651C653C654C655C65CC65DC660C66CC66FC671C678C679C67CC680 +C688C689C68BC68DC694C695C698C69CC6A4C6A5C6A7C6A9C6B0C6B1C6B4C6B8 +C6B9C6BAC6C0C6C1C6C3C6C5C6CCC6CDC6D0C6D4C6DCC6DDC6E0C6E1C6E80000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +40 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000C6E9C6ECC6F0C6F8C6F9C6FDC704C705C708C70CC714C715C717C719C720 +C721C724C728C730C731C733C735C737C73CC73DC740C744C74AC74CC74DC74F +C751C752C753C754C755C756C757C758C75CC760C768C76BC774C775C778C77C +C77DC77EC783C784C785C787C788C789C78AC78EC790C791C794C796C797C798 +C79AC7A0C7A1C7A3C7A4C7A5C7A6C7ACC7ADC7B0C7B4C7BCC7BDC7BFC7C0C7C1 +C7C8C7C9C7CCC7CEC7D0C7D8C7DDC7E4C7E8C7ECC800C801C804C808C80A0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +41 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000C810C811C813C815C816C81CC81DC820C824C82CC82DC82FC831C838C83C +C840C848C849C84CC84DC854C870C871C874C878C87AC880C881C883C885C886 +C887C88BC88CC88DC894C89DC89FC8A1C8A8C8BCC8BDC8C4C8C8C8CCC8D4C8D5 +C8D7C8D9C8E0C8E1C8E4C8F5C8FCC8FDC900C904C905C906C90CC90DC90FC911 +C918C92CC934C950C951C954C958C960C961C963C96CC970C974C97CC988C989 +C98CC990C998C999C99BC99DC9C0C9C1C9C4C9C7C9C8C9CAC9D0C9D1C9D30000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +42 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000C9D5C9D6C9D9C9DAC9DCC9DDC9E0C9E2C9E4C9E7C9ECC9EDC9EFC9F0C9F1 +C9F8C9F9C9FCCA00CA08CA09CA0BCA0CCA0DCA14CA18CA29CA4CCA4DCA50CA54 +CA5CCA5DCA5FCA60CA61CA68CA7DCA84CA98CABCCABDCAC0CAC4CACCCACDCACF +CAD1CAD3CAD8CAD9CAE0CAECCAF4CB08CB10CB14CB18CB20CB21CB41CB48CB49 +CB4CCB50CB58CB59CB5DCB64CB78CB79CB9CCBB8CBD4CBE4CBE7CBE9CC0CCC0D +CC10CC14CC1CCC1DCC21CC22CC27CC28CC29CC2CCC2ECC30CC38CC39CC3B0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +43 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000CC3CCC3DCC3ECC44CC45CC48CC4CCC54CC55CC57CC58CC59CC60CC64CC66 +CC68CC70CC75CC98CC99CC9CCCA0CCA8CCA9CCABCCACCCADCCB4CCB5CCB8CCBC +CCC4CCC5CCC7CCC9CCD0CCD4CCE4CCECCCF0CD01CD08CD09CD0CCD10CD18CD19 +CD1BCD1DCD24CD28CD2CCD39CD5CCD60CD64CD6CCD6DCD6FCD71CD78CD88CD94 +CD95CD98CD9CCDA4CDA5CDA7CDA9CDB0CDC4CDCCCDD0CDE8CDECCDF0CDF8CDF9 +CDFBCDFDCE04CE08CE0CCE14CE19CE20CE21CE24CE28CE30CE31CE33CE350000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +44 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000CE58CE59CE5CCE5FCE60CE61CE68CE69CE6BCE6DCE74CE75CE78CE7CCE84 +CE85CE87CE89CE90CE91CE94CE98CEA0CEA1CEA3CEA4CEA5CEACCEADCEC1CEE4 +CEE5CEE8CEEBCEECCEF4CEF5CEF7CEF8CEF9CF00CF01CF04CF08CF10CF11CF13 +CF15CF1CCF20CF24CF2CCF2DCF2FCF30CF31CF38CF54CF55CF58CF5CCF64CF65 +CF67CF69CF70CF71CF74CF78CF80CF85CF8CCFA1CFA8CFB0CFC4CFE0CFE1CFE4 +CFE8CFF0CFF1CFF3CFF5CFFCD000D004D011D018D02DD034D035D038D03C0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +45 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000D044D045D047D049D050D054D058D060D06CD06DD070D074D07CD07DD081 +D0A4D0A5D0A8D0ACD0B4D0B5D0B7D0B9D0C0D0C1D0C4D0C8D0C9D0D0D0D1D0D3 +D0D4D0D5D0DCD0DDD0E0D0E4D0ECD0EDD0EFD0F0D0F1D0F8D10DD130D131D134 +D138D13AD140D141D143D144D145D14CD14DD150D154D15CD15DD15FD161D168 +D16CD17CD184D188D1A0D1A1D1A4D1A8D1B0D1B1D1B3D1B5D1BAD1BCD1C0D1D8 +D1F4D1F8D207D209D210D22CD22DD230D234D23CD23DD23FD241D248D25C0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +46 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000D264D280D281D284D288D290D291D295D29CD2A0D2A4D2ACD2B1D2B8D2B9 +D2BCD2BFD2C0D2C2D2C8D2C9D2CBD2D4D2D8D2DCD2E4D2E5D2F0D2F1D2F4D2F8 +D300D301D303D305D30CD30DD30ED310D314D316D31CD31DD31FD320D321D325 +D328D329D32CD330D338D339D33BD33CD33DD344D345D37CD37DD380D384D38C +D38DD38FD390D391D398D399D39CD3A0D3A8D3A9D3ABD3ADD3B4D3B8D3BCD3C4 +D3C5D3C8D3C9D3D0D3D8D3E1D3E3D3ECD3EDD3F0D3F4D3FCD3FDD3FFD4010000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +47 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000D408D41DD440D444D45CD460D464D46DD46FD478D479D47CD47FD480D482 +D488D489D48BD48DD494D4A9D4CCD4D0D4D4D4DCD4DFD4E8D4ECD4F0D4F8D4FB +D4FDD504D508D50CD514D515D517D53CD53DD540D544D54CD54DD54FD551D558 +D559D55CD560D565D568D569D56BD56DD574D575D578D57CD584D585D587D588 +D589D590D5A5D5C8D5C9D5CCD5D0D5D2D5D8D5D9D5DBD5DDD5E4D5E5D5E8D5EC +D5F4D5F5D5F7D5F9D600D601D604D608D610D611D613D614D615D61CD6200000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +48 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000D624D62DD638D639D63CD640D645D648D649D64BD64DD651D654D655D658 +D65CD667D669D670D671D674D683D685D68CD68DD690D694D69DD69FD6A1D6A8 +D6ACD6B0D6B9D6BBD6C4D6C5D6C8D6CCD6D1D6D4D6D7D6D9D6E0D6E4D6E8D6F0 +D6F5D6FCD6FDD700D704D711D718D719D71CD720D728D729D72BD72DD734D735 +D738D73CD744D747D749D750D751D754D756D757D758D759D760D761D763D765 +D769D76CD770D774D77CD77DD781D788D789D78CD790D798D799D79BD79D0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004F3D4F73504750F952A053EF547554E556095AC15BB6668767B667B767EF +6B4C73C275C27A3C82DB8304885788888A368CC88DCF8EFB8FE699D5523B5374 +5404606A61646BBC73CF811A89BA89D295A34F83520A58BE597859E65E725E79 +61C763C0674667EC687F6F97764E770B78F57A087AFF7C21809D826E82718AEB +95934E6B559D66F76E3478A37AED845B8910874E97A852D8574E582A5D4C611F +61BE6221656267D16A446E1B751875B376E377B07D3A90AF945194529F950000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000053235CAC753280DB92409598525B580859DC5CA15D175EB75F3A5F4A6177 +6C5F757A75867CE07D737DB17F8C81548221859189418B1B92FC964D9C474ECB +4EF7500B51F1584F6137613E6168653969EA6F1175A5768676D67B8782A584CB +F90093A7958B55805BA25751F9017CB37FB991B5502853BB5C455DE862D2636E +64DA64E76E2070AC795B8DDD8E1EF902907D924592F84E7E4EF650655DFE5EFA +61066957817186548E4793759A2B4E5E5091677068405109528D52926AA20000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4C +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000077BC92109ED452AB602F8FF2504861A963ED64CA683C6A846FC0818889A1 +96945805727D72AC75047D797E6D80A9898B8B7490639D5162896C7A6F547D50 +7F3A8A23517C614A7B9D8B199257938C4EAC4FD3501E50BE510652C152CD537F +577058835E9A5F91617661AC64CE656C666F66BB66F468976D87708570F1749F +74A574CA75D9786C78EC7ADF7AF67D457D938015803F811B83968B668F159015 +93E1980398389A5A9BE84FC25553583A59515B635C4660B86212684268B00000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000068E86EAA754C767878CE7A3D7CFB7E6B7E7C8A088AA18C3F968E9DC453E4 +53E9544A547156FA59D15B645C3B5EAB62F765376545657266A067AF69C16CBD +75FC7690777E7A3F7F94800380A1818F82E682FD83F085C1883188B48AA5F903 +8F9C932E96C798679AD89F1354ED659B66F2688F7A408C379D6056F057645D11 +660668B168CD6EFE7428889E9BE46C68F9049AA84F9B516C5171529F5B545DE5 +6050606D62F163A7653B73D97A7A86A38CA2978F4E325BE16208679C74DC0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000079D183D38A878AB28DE8904E934B98465ED369E885FF90EDF90551A05B98 +5BEC616368FA6B3E704C742F74D87BA17F5083C589C08CAB95DC9928522E605D +62EC90024F8A5149532158D95EE366E06D38709A72C273D67B5080F1945B5366 +639B7F6B4E565080584A58DE602A612762D069D09B415B8F7D1880B18F5F4EA4 +50D154AC55AC5B0C5DA05DE7652A654E68216A4B72E1768E77EF7D5E7FF981A0 +854E86DF8F038F4E90CA99039A559BAB4E184E454E5D4EC74FF1517752FE0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +4F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000534053E353E5548E5614577557A25BC75D875ED061FC62D8655167B867E9 +69CB6B506BC66BEC6C426E9D707872D77396740377BF77E97A767D7F800981FC +8205820A82DF88628B338CFC8EC0901190B1926492B699D29A459CE99DD79F9C +570B5C4083CA97A097AB9EB4541B7A987FA488D98ECD90E158005C4863987A9F +5BAE5F137A797AAE828E8EAC5026523852F85377570862F363726B0A6DC37737 +53A5735785688E7695D5673A6AC36F708A6D8ECC994BF90666776B788CB40000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +50 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00009B3CF90753EB572D594E63C669FB73EA78457ABA7AC57CFE8475898F8D73 +903595A852FB574775477B6083CC921EF9086A58514B524B5287621F68D86975 +969950C552A452E461C365A4683969FF747E7B4B82B983EB89B28B398FD19949 +F9094ECA599764D266116A8E7434798179BD82A9887E887F895FF90A93264F0B +53CA602562716C727D1A7D664E98516277DC80AF4F014F0E5176518055DC5668 +573B57FA57FC5914594759935BC45C905D0E5DF15E7E5FCC628065D765E30000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +51 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000671E671F675E68CB68C46A5F6B3A6C236C7D6C826DC773987426742A7482 +74A37578757F788178EF794179477948797A7B957D007DBA7F888006802D808C +8A188B4F8C488D779321932498E299519A0E9A0F9A659E927DCA4F76540962EE +685491D155AB513AF90BF90C5A1C61E6F90D62CF62FFF90EF90FF910F911F912 +F91390A3F914F915F916F917F9188AFEF919F91AF91BF91C6696F91D7156F91E +F91F96E3F920634F637A5357F921678F69606E73F9227537F923F924F9250000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +52 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007D0DF926F927887256CA5A18F928F929F92AF92BF92C4E43F92D51675948 +67F08010F92E59735E74649A79CA5FF5606C62C8637B5BE75BD752AAF92F5974 +5F296012F930F931F9327459F933F934F935F936F937F93899D1F939F93AF93B +F93CF93DF93EF93FF940F941F942F9436FC3F944F94581BF8FB260F1F946F947 +8166F948F9495C3FF94AF94BF94CF94DF94EF94FF950F9515AE98A25677B7D10 +F952F953F954F955F956F95780FDF958F9595C3C6CE5533F6EBA591A83360000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +53 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00004E394EB64F4655AE571858C75F5665B765E66A806BB56E4D77ED7AEF7C1E +7DDE86CB88929132935B64BB6FBE737A75B890545556574D61BA64D466C76DE1 +6E5B6F6D6FB975F0804381BD854189838AC78B5A931F6C9375537B548E0F905D +5510580258585E626207649E68E075767CD687B39EE84EE35788576E59275C0D +5CB15E365F85623464E173B381FA888B8CB8968A9EDB5B855FB760B350125200 +52305716583558575C0E5C605CF65D8B5EA65F9260BC63116389641768430000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +54 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000068F96AC26DD86E216ED46FE471FE76DC777979B17A3B840489A98CED8DF3 +8E4890039014905390FD934D967697DC6BD27006725872A27368776379BF7BE4 +7E9B8B8058A960C7656665FD66BE6C8C711E71C98C5A98134E6D7A814EDD51AC +51CD52D5540C61A76771685068DF6D1E6F7C75BC77B37AE580F484639285515C +6597675C679375D87AC78373F95A8C469017982D5C6F81C0829A9041906F920D +5F975D9D6A5971C8767B7B4985E48B0491279A30558761F6F95B76697F850000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +55 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000863F87BA88F8908FF95C6D1B70D973DE7D61843DF95D916A99F1F95E4E82 +53756B046B12703E721B862D9E1E524C8FA35D5064E5652C6B166FEB7C437E9C +85CD896489BD62C981D8881F5ECA67176D6A72FC7405746F878290DE4F865D0D +5FA0840A51B763A075654EAE5006516951C968816A117CAE7CB17CE7826F8AD2 +8F1B91CF4FB6513752F554425EEC616E623E65C56ADA6FFE792A85DC882395AD +9A629A6A9E979ECE529B66C66B77701D792B8F6297426190620065236F230000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +56 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000714974897DF4806F84EE8F269023934A51BD521752A36D0C70C888C25EC9 +65826BAE6FC27C3E73754EE44F3656F9F95F5CBA5DBA601C73B27B2D7F9A7FCE +8046901E923496F6974898189F614F8B6FA779AE91B496B752DEF960648864C4 +6AD36F5E7018721076E780018606865C8DEF8F0597329B6F9DFA9E75788C797F +7DA083C993049E7F9E938AD658DF5F046727702774CF7C60807E512170287262 +78CA8CC28CDA8CF496F74E8650DA5BEE5ED6659971CE764277AD804A84FC0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +57 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000907C9B279F8D58D85A415C626A136DDA6F0F763B7D2F7E37851E893893E4 +964B528965D267F369B46D416E9C700F7409746075597624786B8B2C985E516D +622E96784F96502B5D196DEA7DB88F2A5F8B61446817F961968652D2808B51DC +51CC695E7A1C7DBE83F196754FDA52295398540F550E5C6560A7674E68A86D6C +728172F874067483F96275E27C6C7F797FB8838988CF88E191CC91D096E29BC9 +541D6F7E71D0749885FA8EAA96A39C579E9F67976DCB743381E89716782C0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +58 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007ACB7B207C926469746A75F278BC78E899AC9B549EBB5BDE5E556F20819C +83AB90884E07534D5A295DD25F4E6162633D666966FC6EFF6F2B7063779E842C +8513883B8F1399459C3B551C62B9672B6CAB8309896A977A4EA159845FD85FD9 +671B7DB27F548292832B83BD8F1E909957CB59B95A925BD06627679A68856BCF +71647F758CB78CE390819B4581088C8A964C9A409EA55B5F6C13731B76F276DF +840C51AA8993514D519552C968C96C94770477207DBF7DEC97629EB56EC50000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +59 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000851151A5540D547D660E669D69276E9F76BF7791831784C2879F91699298 +9CF488824FAE519252DF59C65E3D61556478647966AE67D06A216BCD6BDB725F +72617441773877DB801782BC83058B008B288C8C67286C90726776EE77667A46 +9DA96B7F6C92592267268499536F589359995EDF63CF663467736E3A732B7AD7 +82D7932852D95DEB61AE61CB620A62C764AB65E069596B666BCB712173F7755D +7E46821E8302856A8AA38CBF97279D6158A89ED85011520E543B554F65870000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006C767D0A7D0B805E868A958096EF52FF6C95726954735A9A5C3E5D4B5F4C +5FAE672A68B669636E3C6E4477097C737F8E85878B0E8FF797619EF45CB760B6 +610D61AB654F65FB65FC6C116CEF739F73C97DE195945BC6871C8B10525D535A +62CD640F64B267346A386CCA73C0749E7B947C957E1B818A823685848FEB96F9 +99C14F34534A53CD53DB62CC642C6500659169C36CEE6F5873ED7554762276E4 +76FC78D078FB792C7D46822C87E08FD4981298EF52C362D464A56E246F510000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000767C8DCB91B192629AEE9B435023508D574A59A85C285E475F77623F653E +65B965C16609678B699C6EC278C57D2180AA8180822B82B384A1868C8A2A8B17 +90A696329F90500D4FF3F96357F95F9862DC6392676F6E43711976C380CC80DA +88F488F589198CE08F29914D966A4F2F4F705E1B67CF6822767D767E9B445E61 +6A0A716971D4756AF9647E41854385E998DC4F107B4F7F7095A551E15E0668B5 +6C3E6C4E6CDB72AF7BC483036CD5743A50FB528858C164D86A9774A776560000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5C +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000078A7861795E29739F965535E5F018B8A8FA88FAF908A522577A59C499F08 +4E19500251755C5B5E77661E663A67C468C570B3750175C579C97ADD8F279920 +9A084FDD582158315BF6666E6B656D116E7A6F7D73E4752B83E988DC89138B5C +8F144F0F50D55310535C5B935FA9670D798F8179832F8514890789868F398F3B +99A59C12672C4E764FF859495C015CEF5CF0636768D270FD71A2742B7E2B84EC +8702902292D29CF34E0D4ED84FEF50855256526F5426549057E0592B5A660000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005B5A5B755BCC5E9CF9666276657765A76D6E6EA572367B267C3F7F368150 +8151819A8240829983A98A038CA08CE68CFB8D748DBA90E891DC961C964499D9 +9CE7531752065429567458B35954596E5FFF61A4626E66106C7E711A76C67C89 +7CDE7D1B82AC8CC196F0F9674F5B5F175F7F62C25D29670B68DA787C7E439D6C +4E1550995315532A535159835A625E8760B2618A624962796590678769A76BD4 +6BD66BD76BD86CB8F968743575FA7812789179D579D87C837DCB7FE180A50000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000813E81C283F2871A88E88AB98B6C8CBB9119975E98DB9F3B56AC5B2A5F6C +658C6AB36BAF6D5C6FF17015725D73AD8CA78CD3983B61916C3780589A014E4D +4E8B4E9B4ED54F3A4F3C4F7F4FDF50FF53F253F8550655E356DB58EB59625A11 +5BEB5BFA5C045DF35E2B5F99601D6368659C65AF67F667FB68AD6B7B6C996CD7 +6E23700973457802793E7940796079C17BE97D177D728086820D838E84D186C7 +88DF8A508A5E8B1D8CDC8D668FAD90AA98FC99DF9E9D524AF9696714F96A0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005098522A5C7165636C5573CA7523759D7B97849C917897304E7764926BBA +715E85A94E09F96B674968EE6E17829F8518886B63F76F81921298AF4E0A50B7 +50CF511F554655AA56175B405C195CE05E385E8A5EA05EC260F368516A616E58 +723D724072C076F879657BB17FD488F389F48A738C618CDE971C585E74BD8CFD +55C7F96C7A617D2282727272751F7525F96D7B19588558FB5DBC5E8F5EB65F90 +60556292637F654D669166D966F8681668F27280745E7B6E7D6E7DD67F720000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +60 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000080E5821285AF897F8A93901D92E49ECD9F205915596D5E2D60DC66146673 +67906C506DC56F5F77F378A984C691CB932B4ED950CA514855845B0B5BA36247 +657E65CB6E32717D74017444748774BF766C79AA7DDA7E557FA8817A81B38239 +861A87EC8A758DE3907892919425994D9BAE53685C5169546CC46D296E2B820C +859B893B8A2D8AAA96EA9F67526166B96BB27E9687FE8D0D9583965D651D6D89 +71EEF96E57CE59D35BAC602760FA6210661F665F732973F976DB77017B6C0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +61 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008056807281658AA091924E1652E26B726D177A057B397D30F96F8CB053EC +562F58515BB55C0F5C115DE2624063836414662D68B36CBC6D886EAF701F70A4 +71D27526758F758E76197B117BE07C2B7D207D39852C856D86078A34900D9061 +90B592B797F69A374FD75C6C675F6D917C9F7E8C8B168D16901F5B6B5DFD640D +84C0905C98E173875B8B609A677E6DDE8A1F8AA69001980C5237F9707051788E +9396887091D74FEE53D755FD56DA578258FD5AC25B885CAB5CC05E2561010000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +62 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000620D624B6388641C653665786A396B8A6C346D196F3171E772E973787407 +74B27626776179C07A577AEA7CB97D8F7DAC7E617F9E81298331849084DA85EA +88968AB08B908F3890429083916C929692B9968B96A796A896D6970098089996 +9AD39B1A53D4587E59195B705BBF6DD16F5A719F742174B9808583FD5DE15F87 +5FAA604265EC6812696F6A536B896D356DF373E376FE77AC7B4D7D148123821C +834084F485638A628AC49187931E980699B4620C88538FF092655D075D270000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +63 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005D69745F819D87686FD562FE7FD2893689724E1E4E5850E752DD5347627F +66077E698805965E4F8D5319563659CB5AA45C385C4E5C4D5E025F11604365BD +662F664267BE67F4731C77E2793A7FC5849484CD89968A668A698AE18C558C7A +57F45BD45F0F606F62ED690D6B966E5C71847BD287558B588EFE98DF98FE4F38 +4F814FE1547B5A205BB8613C65B0666871FC7533795E7D33814E81E3839885AA +85CE87038A0A8EAB8F9BF9718FC559315BA45BE660895BE95C0B5FC36C810000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +64 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000F9726DF1700B751A82AF8AF64EC05341F97396D96C0F4E9E4FC45152555E +5A255CE86211725982BD83AA86FE88598A1D963F96C599139D099D5D580A5CB3 +5DBD5E4460E1611563E16A026E2591029354984E9C109F775B895CB86309664F +6848773C96C1978D98549B9F65A18B018ECB95BC55355CA95DD65EB56697764C +83F495C758D362BC72CE9D284EF0592E600F663B6B8379E79D26539354C057C3 +5D16611B66D66DAF788D827E969897445384627C63966DB27E0A814B984D0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +65 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006AFB7F4C9DAF9E1A4E5F503B51B6591C60F963F66930723A8036F97491CE +5F31F975F9767D0482E5846F84BB85E58E8DF9774F6FF978F97958E45B436059 +63DA6518656D6698F97A694A6A236D0B7001716C75D2760D79B37A70F97B7F8A +F97C8944F97D8B9391C0967DF97E990A57045FA165BC6F01760079A68A9E99AD +9B5A9F6C510461B662916A8D81C6504358305F6671098A008AFA5B7C86164FFA +513C56B4594463A96DF95DAA696D51864E884F59F97FF980F9815982F9820000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +66 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000F9836B5F6C5DF98474B57916F9858207824583398F3F8F5DF9869918F987 +F988F9894EA6F98A57DF5F796613F98BF98C75AB7E798B6FF98D90069A5B56A5 +582759F85A1F5BB4F98E5EF6F98FF9906350633BF991693D6C876CBF6D8E6D93 +6DF56F14F99270DF71367159F99371C371D5F994784F786FF9957B757DE3F996 +7E2FF997884D8EDFF998F999F99A925BF99B9CF6F99CF99DF99E60856D85F99F +71B1F9A0F9A195B153ADF9A2F9A3F9A467D3F9A5708E71307430827682D20000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +67 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000F9A695BB9AE59E7D66C4F9A771C18449F9A8F9A9584BF9AAF9AB5DB85F71 +F9AC6620668E697969AE6C386CF36E366F416FDA701B702F715071DF7370F9AD +745BF9AE74D476C87A4E7E93F9AFF9B082F18A608FCEF9B19348F9B29719F9B3 +F9B44E42502AF9B5520853E166F36C6D6FCA730A777F7A6282AE85DD8602F9B6 +88D48A638B7D8C6BF9B792B3F9B8971398104E944F0D4FC950B25348543E5433 +55DA586258BA59675A1B5BE4609FF9B961CA655665FF666468A76C5A6FB30000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +68 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000070CF71AC73527B7D87088AA49C329F075C4B6C8373447389923A6EAB7465 +761F7A697E15860A514058C564C174EE751576707FC1909596CD99546E2674E6 +7AA97AAA81E586D987788A1B5A495B8C5B9B68A169006D6373A97413742C7897 +7DE97FEB81188155839E8C4C962E981166F05F8065FA67896C6A738B502D5A03 +6B6A77EE59165D6C5DCD7325754FF9BAF9BB50E551F9582F592D599659DA5BE5 +F9BCF9BD5DA262D76416649364FEF9BE66DCF9BF6A48F9C071FF7464F9C10000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +69 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00007A887AAF7E477E5E80008170F9C287EF89818B209059F9C390809952617E +6B326D747E1F89258FB14FD150AD519752C757C758895BB95EB8614269956D8C +6E676EB6719474627528752C8073833884C98E0A939493DEF9C44E8E4F515076 +512A53C853CB53F35B875BD35C24611A618265F4725B7397744076C279507991 +79B97D067FBD828B85D5865E8FC2904790F591EA968596E896E952D65F6765ED +6631682F715C7A3690C1980A4E91F9C56A526B9E6F907189801882B885530000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000904B969596F297FB851A9B314E90718A96C45143539F54E15713571257A3 +5A9B5AC45BC36028613F63F46C856D396E726E907230733F745782D188818F45 +9060F9C6966298589D1B67088D8A925E4F4D504950DE5371570D59D45A015C09 +617066906E2D7232744B7DEF80C3840E8466853F875F885B89188B02905597CB +9B4F4E734F915112516AF9C7552F55A95B7A5BA55E7C5E7D5EBE60A060DF6108 +610963C465386709F9C867D467DAF9C9696169626CB96D27F9CA6E38F9CB0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006FE173367337F9CC745C7531F9CD7652F9CEF9CF7DAD81FE843888D58A98 +8ADB8AED8E308E42904A903E907A914991C9936EF9D0F9D15809F9D26BD38089 +80B2F9D3F9D45141596B5C39F9D5F9D66F6473A780E48D07F9D79217958FF9D8 +F9D9F9DAF9DB807F620E701C7D68878DF9DC57A0606961476BB78ABE928096B1 +4E59541F6DEB852D967097F398EE63D66CE3909151DD61C981BA9DF94F9D501A +51005B9C610F61FF64EC69056BC5759177E37FA98264858F87FB88638ABC0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6C +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008B7091AB4E8C4EE54F0AF9DDF9DE593759E8F9DF5DF25F1B5F5B6021F9E0 +F9E1F9E2F9E3723E73E5F9E4757075CDF9E579FBF9E6800C8033808482E18351 +F9E7F9E88CBD8CB39087F9E9F9EA98F4990CF9EBF9EC703776CA7FCA7FCC7FFC +8B1A4EBA4EC152035370F9ED54BD56E059FB5BC55F155FCD6E6EF9EEF9EF7D6A +8335F9F086938A8DF9F1976D9777F9F2F9F34E004F5A4F7E58F965E56EA29038 +93B099B94EFB58EC598A59D96041F9F4F9F57A14F9F6834F8CC3516553440000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000F9F7F9F8F9F94ECD52695B5582BF4ED4523A54A859C959FF5B505B575B5C +606361486ECB7099716E738674F775B578C17D2B800581EA8328851785C98AEE +8CC796CC4F5C52FA56BC65AB6628707C70B872357DBD828D914C96C09D725B71 +68E76B986F7A76DE5C9166AB6F5B7BB47C2A883696DC4E084ED75320583458BB +58EF596C5C075E335E845F35638C66B267566A1F6AA36B0C6F3F7246F9FA7350 +748B7AE07CA7817881DF81E7838A846C8523859485CF88DD8D1391AC95770000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000969C518D54C957285BB0624D6750683D68936E3D6ED3707D7E2188C18CA1 +8F099F4B9F4E722D7B8F8ACD931A4F474F4E5132548059D05E9562B56775696E +6A176CAE6E1A72D9732A75BD7BB87D3582E783F9845785F78A5B8CAF8E879019 +90B896CE9F5F52E3540A5AE15BC2645865756EF472C4F9FB76847A4D7B1B7C4D +7E3E7FDF837B8B2B8CCA8D648DE18E5F8FEA8FF9906993D14F434F7A50B35168 +5178524D526A5861587C59605C085C555EDB609B623068136BBF6C086FB10000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000714E742075307538755176727B4C7B8B7BAD7BC67E8F8A6E8F3E8F49923F +92939322942B96FB985A986B991E5207622A62986D5976647ACA7BC07D765360 +5CBE5E976F3870B97C9897119B8E9EDE63A5647A87764E014E954EAD505C5075 +544859C35B9A5E405EAD5EF75F8160C5633A653F657465CC6676667867FE6968 +6A896B636C406DC06DE86E1F6E5E701E70A1738E73FD753A775B7887798E7A0B +7A7D7CBE7D8E82478A028AEA8C9E912D914A91D8926692CC9320970697560000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +70 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000975C98029F0E52365291557C58245E1D5F1F608C63D068AF6FDF796D7B2C +81CD85BA88FD8AF88E44918D9664969B973D984C9F4A4FCE514651CB52A95632 +5F145F6B63AA64CD65E9664166FA66F9671D689D68D769FD6F156F6E716771E5 +722A74AA773A7956795A79DF7A207A957C977CDF7D447E70808785FB86A48A54 +8ABF8D998E819020906D91E3963B96D59CE565CF7C078DB393C35B585C0A5352 +62D9731D50275B975F9E60B0616B68D56DD9742E7A2E7D427D9C7E31816B0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +71 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008E2A8E35937E94184F5057505DE65EA7632B7F6A4E3B4F4F4F8F505A59DD +80C4546A546855FE594F5B995DDE5EDA665D673167F1682A6CE86D326E4A6F8D +70B773E075877C4C7D027D2C7DA2821F86DB8A3B8A858D708E8A8F339031914E +9152944499D07AF97CA54FCA510151C657C85BEF5CFB66596A3D6D5A6E966FEC +710C756F7AE388229021907596CB99FF83014E2D4EF2884691CD537D6ADB696B +6C41847A589E618E66FE62EF70DD751175C77E5284B88B498D084E4B53EA0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +72 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000054AB573057405FD763016307646F652F65E8667A679D67B36B626C606C9A +6F2C77E57825794979577D1980A2810281F3829D82B787188A8CF9FC8D048DBE +907276F47A197A377E548077550755D45875632F64226649664B686D699B6B84 +6D256EB173CD746874A1755B75B976E1771E778B79E67E097E1D81FB852F8897 +8A3A8CD18EEB8FB0903293AD9663967397074F8453F159EA5AC95E19684E74C6 +75BE79E97A9281A386ED8CEA8DCC8FED659F6715F9FD57F76F577DDD8F2F0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +73 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000093F696C65FB561F26F844E144F98501F53C955DF5D6F5DEE6B216B6478CB +7B9AF9FE8E498ECA906E6349643E77407A84932F947F9F6A64B06FAF71E674A8 +74DA7AC47C127E827CB27E988B9A8D0A947D9910994C52395BDF64E6672D7D2E +50ED53C358796158615961FA65AC7AD98B928B9650095021527555315A3C5EE0 +5F706134655E660C663666A269CD6EC46F32731676217A938139825983D684BC +50B557F05BC05BE85F6963A178267DB583DC852191C791F5518A67F57B560000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +74 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008CAC51C459BB60BD8655501CF9FF52545C3A617D621A62D364F265A56ECC +7620810A8E60965F96BB4EDF5343559859295DDD64C56CC96DFA73947A7F821B +85A68CE48E10907791E795E1962197C651F854F255865FB964A46F887DB48F1F +8F4D943550C95C166CBE6DFB751B77BB7C3D7C648A798AC2581E59BE5E166377 +7252758A776B8ADC8CBC8F125EF366746DF8807D83C18ACB97519BD6FA005243 +66FF6D956EEF7DE08AE6902E905E9AD4521D527F54E86194628462DB68A20000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +75 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00006912695A6A3570927126785D7901790E79D27A0D8096827882D583498549 +8C828D859162918B91AE4FC356D171ED77D7870089F85BF85FD6675190A853E2 +585A5BF560A4618164607E3D80708525928364AE50AC5D146700589C62BD63A8 +690E69786A1E6E6B76BA79CB82BB84298ACF8DA88FFD9112914B919C93109318 +939A96DB9A369C0D4E11755C795D7AFA7B517BC97E2E84C48E598E748EF89010 +6625693F744351FA672E9EDC51455FE06C9687F2885D887760B481B584030000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +76 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00008D0553D6543956345A365C31708A7FE0805A810681ED8DA391899A5F9DF2 +50744EC453A060FB6E2C5C644F88502455E45CD95E5F606568946CBB6DC471BE +75D475F476617A1A7A497DC77DFB7F6E81F486A98F1C96C999B39F52524752C5 +98ED89AA4E0367D26F064FB55BE267956C886D78741B782791DD937C87C479E4 +7A315FEB4ED654A4553E58AE59A560F0625362D6673669558235964099B199DD +502C53535544577CFA016258FA0264E2666B67DD6FC16FEF742274388A170000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +77 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000094385451560657665F48619A6B4E705870AD7DBB8A95596A812B63A27708 +803D8CAA5854642D69BB5B955E116E6FFA038569514C53F0592A6020614B6B86 +6C706CF07B1E80CE82D48DC690B098B1FA0464C76FA464916504514E5410571F +8A0E615F6876FA0575DB7B527D71901A580669CC817F892A9000983950785957 +59AC6295900F9B2A615D727995D657615A465DF4628A64AD64FA67776CE26D3E +722C743678347F7782AD8DDB981752245742677F724874E38CA98FA692110000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +78 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000962A516B53ED634C4F695504609665576C9B6D7F724C72FD7A1789878C9D +5F6D6F8E70F981A8610E4FBF504F624172477BC77DE87FE9904D97AD9A198CB6 +576A5E7367B0840D8A5554205B165E635EE25F0A658380BA853D9589965B4F48 +5305530D530F548654FA57035E036016629B62B16355FA066CE16D6675B17832 +80DE812F82DE846184B2888D8912900B92EA98FD9B915E4566B466DD70117206 +FA074FF5527D5F6A615367536A196F0274E2796888688C7998C798C49A430000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +79 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000054C17A1F69538AF78C4A98A899AE5F7C62AB75B276AE88AB907F96425339 +5F3C5FC56CCC73CC7562758B7B4682FE999D4E4F903C4E0B4F5553A6590F5EC8 +66306CB37455837787668CC09050971E9C1558D15B7886508B149DB45BD26068 +608D65F16C576F226FA3701A7F557FF095919592965097D352728F4451FD542B +54B85563558A6ABB6DB57DD88266929C96779E79540854C876D286E495A495D4 +965C4EA24F0959EE5AE65DF760526297676D68416C866E2F7F38809B822A0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000FA08FA0998054EA5505554B35793595A5B695BB361C869776D77702387F9 +89E38A728AE7908299ED9AB852BE683850165E78674F8347884C4EAB541156AE +73E6911597FF9909995799995653589F865B8A3161B26AF6737B8ED26B4796AA +9A57595572008D6B97694FD45CF45F2661F8665B6CEB70AB738473B973FE7729 +774D7D437D627E2382378852FA0A8CE29249986F5B517A74884098015ACC4FE0 +5354593E5CFD633E6D7972F98105810783A292CF98304EA851445211578B0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00005F626CC26ECE7005705070AF719273E97469834A87A28861900890A293A3 +99A8516E5F5760E0616766B385598E4A91AF978B4E4E4E92547C58D558FA597D +5CB55F2762366248660A66676BEB6D696DCF6E566EF86F946FE06FE9705D72D0 +7425745A74E07693795C7CCA7E1E80E182A6846B84BF864E865F87748B778C6A +93AC9800986560D1621691775A5A660F6DF76E3E743F9B425FFD60DA7B0F54C4 +5F186C5E6CD36D2A70D87D0586798A0C9D3B5316548C5B056A3A706B75750000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7C +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000798D79BE82B183EF8A718B418CA89774FA0B64F4652B78BA78BB7A6B4E38 +559A59505BA65E7B60A363DB6B61666568536E19716574B07D0890849A699C25 +6D3B6ED1733E8C4195CA51F05E4C5FA8604D60F66130614C6643664469A56CC1 +6E5F6EC96F62714C749C76877BC17C27835287579051968D9EC3532F56DE5EFB +5F8A6062609461F7666667036A9C6DEE6FAE7070736A7E6A81BE833486D48AA8 +8CC4528373725B966A6B940454EE56865B5D6548658566C9689F6D8D6DC60000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000723B80B491759A4D4FAF5019539A540E543C558955C55E3F5F8C673D7166 +73DD900552DB52F3586458CE7104718F71FB85B08A13668885A855A76684714A +8431534955996BC15F595FBD63EE668971478AF18F1D9EBE4F11643A70CB7566 +866760648B4E9DF8514751F653086D3680F89ED166156B23709875D554035C79 +7D078A166B206B3D6B46543860706D3D7FD5820850D651DE559C566B56CD59EC +5B095E0C619961986231665E66E6719971B971BA72A779A77A007FB28A700000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/macCentEuro.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/macCentEuro.enc new file mode 100644 index 00000000..dde616a4 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/macCentEuro.enc @@ -0,0 +1,20 @@ +# Encoding file: macCentEuro, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +00C40100010100C9010400D600DC00E10105010C00E4010D0106010700E90179 +017A010E00ED010F01120113011600F3011700F400F600F500FA011A011B00FC +202000B0011800A300A7202200B600DF00AE00A92122011900A822600123012E +012F012A22642265012B0136220222110142013B013C013D013E0139013A0145 +0146014300AC221A01440147220600AB00BB202600A00148015000D50151014C +20132014201C201D2018201900F725CA014D0154015501582039203A01590156 +01570160201A201E0161015A015B00C10164016500CD017D017E016A00D300D4 +016B016E00DA016F017001710172017300DD00FD0137017B0141017C012202C7 diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/macCroatian.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/macCroatian.enc new file mode 100644 index 00000000..c23d0f0b --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/macCroatian.enc @@ -0,0 +1,20 @@ +# Encoding file: macCroatian, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +00C400C500C700C900D100D600DC00E100E000E200E400E300E500E700E900E8 +00EA00EB00ED00EC00EE00EF00F100F300F200F400F600F500FA00F900FB00FC +202000B000A200A300A7202200B600DF00AE0160212200B400A82260017D00D8 +221E00B122642265220600B522022211220F0161222B00AA00BA03A9017E00F8 +00BF00A100AC221A01922248010600AB010C202600A000C000C300D501520153 +01102014201C201D2018201900F725CAF8FF00A9204420AC2039203A00C600BB +201300B7201A201E203000C2010700C1010D00C800CD00CE00CF00CC00D300D4 +011100D200DA00DB00D9013102C602DC00AF03C000CB02DA00B800CA00E602C7 diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/macCyrillic.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/macCyrillic.enc new file mode 100644 index 00000000..e657739b --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/macCyrillic.enc @@ -0,0 +1,20 @@ +# Encoding file: macCyrillic, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +0410041104120413041404150416041704180419041A041B041C041D041E041F +0420042104220423042404250426042704280429042A042B042C042D042E042F +202000B0049000A300A7202200B6040600AE00A9212204020452226004030453 +221E00B122642265045600B504910408040404540407045704090459040A045A +0458040500AC221A01922248220600AB00BB202600A0040B045B040C045C0455 +20132014201C201D2018201900F7201E040E045E040F045F211604010451044F +0430043104320433043404350436043704380439043A043B043C043D043E043F +0440044104420443044404450446044704480449044A044B044C044D044E20AC diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/macDingbats.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/macDingbats.enc new file mode 100644 index 00000000..28449cdd --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/macDingbats.enc @@ -0,0 +1,20 @@ +# Encoding file: macDingbats, single-byte +S +003F 1 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +00202701270227032704260E2706270727082709261B261E270C270D270E270F +2710271127122713271427152716271727182719271A271B271C271D271E271F +2720272127222723272427252726272726052729272A272B272C272D272E272F +2730273127322733273427352736273727382739273A273B273C273D273E273F +2740274127422743274427452746274727482749274A274B25CF274D25A0274F +27502751275225B225BC25C6275625D727582759275A275B275C275D275E007F +F8D7F8D8F8D9F8DAF8DBF8DCF8DDF8DEF8DFF8E0F8E1F8E2F8E3F8E4008E008F +0090009100920093009400950096009700980099009A009B009C009D009E009F +0000276127622763276427652766276726632666266526602460246124622463 +2464246524662467246824692776277727782779277A277B277C277D277E277F +2780278127822783278427852786278727882789278A278B278C278D278E278F +2790279127922793279421922194219527982799279A279B279C279D279E279F +27A027A127A227A327A427A527A627A727A827A927AA27AB27AC27AD27AE27AF +000027B127B227B327B427B527B627B727B827B927BA27BB27BC27BD27BE0000 diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/macGreek.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/macGreek.enc new file mode 100644 index 00000000..67b9953d --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/macGreek.enc @@ -0,0 +1,20 @@ +# Encoding file: macGreek, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +00C400B900B200C900B300D600DC038500E000E200E4038400A800E700E900E8 +00EA00EB00A3212200EE00EF202200BD203000F400F600A600AD00F900FB00FC +2020039303940398039B039E03A000DF00AE00A903A303AA00A7226000B000B7 +039100B12264226500A503920395039603970399039A039C03A603AB03A803A9 +03AC039D00AC039F03A1224803A400AB00BB202600A003A503A7038603880153 +20132015201C201D2018201900F70389038A038C038E03AD03AE03AF03CC038F +03CD03B103B203C803B403B503C603B303B703B903BE03BA03BB03BC03BD03BF +03C003CE03C103C303C403B803C903C203C703C503B603CA03CB039003B0F8A0 diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/macIceland.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/macIceland.enc new file mode 100644 index 00000000..c6360698 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/macIceland.enc @@ -0,0 +1,20 @@ +# Encoding file: macIceland, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +00C400C500C700C900D100D600DC00E100E000E200E400E300E500E700E900E8 +00EA00EB00ED00EC00EE00EF00F100F300F200F400F600F500FA00F900FB00FC +00DD00B000A200A300A7202200B600DF00AE00A9212200B400A8226000C600D8 +221E00B12264226500A500B522022211220F03C0222B00AA00BA03A900E600F8 +00BF00A100AC221A01922248220600AB00BB202600A000C000C300D501520153 +20132014201C201D2018201900F725CA00FF0178204420AC00D000F000DE00FE +00FD00B7201A201E203000C200CA00C100CB00C800CD00CE00CF00CC00D300D4 +F8FF00D200DA00DB00D9013102C602DC00AF02D802D902DA00B802DD02DB02C7 diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/macJapan.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/macJapan.enc new file mode 100644 index 00000000..dba24bd8 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/macJapan.enc @@ -0,0 +1,785 @@ +# Encoding file: macJapan, multi-byte +M +003F 0 46 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +0080000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00A0FF61FF62FF63FF64FF65FF66FF67FF68FF69FF6AFF6BFF6CFF6DFF6EFF6F +FF70FF71FF72FF73FF74FF75FF76FF77FF78FF79FF7AFF7BFF7CFF7DFF7EFF7F +FF80FF81FF82FF83FF84FF85FF86FF87FF88FF89FF8AFF8BFF8CFF8DFF8EFF8F +FF90FF91FF92FF93FF94FF95FF96FF97FF98FF99FF9AFF9BFF9CFF9DFF9EFF9F +0000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000A921222026 +81 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +300030013002FF0CFF0E30FBFF1AFF1BFF1FFF01309B309C00B4FF4000A8FF3E +203EFF3F30FD30FE309D309E30034EDD30053006300730FC20142010FF0FFF3C +301C2016FF5C22EF202520182019201C201DFF08FF0930143015FF3BFF3DFF5B +FF5D30083009300A300B300C300D300E300F30103011FF0B221200B100D70000 +00F7FF1D2260FF1CFF1E22662267221E22342642264000B0203220332103FFE5 +FF0400A200A3FF05FF03FF06FF0AFF2000A72606260525CB25CF25CE25C725C6 +25A125A025B325B225BD25BC203B301221922190219121933013000000000000 +000000000000000000000000000000002208220B2286228722822283222A2229 +000000000000000000000000000000002227222800AC21D221D4220022030000 +0000000000000000000000000000000000000000222022A52312220222072261 +2252226A226B221A223D221D2235222B222C0000000000000000000000000000 +212B2030266F266D266A2020202100B6000000000000000025EF000000000000 +82 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000FF10 +FF11FF12FF13FF14FF15FF16FF17FF18FF190000000000000000000000000000 +FF21FF22FF23FF24FF25FF26FF27FF28FF29FF2AFF2BFF2CFF2DFF2EFF2FFF30 +FF31FF32FF33FF34FF35FF36FF37FF38FF39FF3A000000000000000000000000 +0000FF41FF42FF43FF44FF45FF46FF47FF48FF49FF4AFF4BFF4CFF4DFF4EFF4F +FF50FF51FF52FF53FF54FF55FF56FF57FF58FF59FF5A00000000000000003041 +30423043304430453046304730483049304A304B304C304D304E304F30503051 +30523053305430553056305730583059305A305B305C305D305E305F30603061 +30623063306430653066306730683069306A306B306C306D306E306F30703071 +30723073307430753076307730783079307A307B307C307D307E307F30803081 +30823083308430853086308730883089308A308B308C308D308E308F30903091 +3092309300000000000000000000000000000000000000000000000000000000 +83 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +30A130A230A330A430A530A630A730A830A930AA30AB30AC30AD30AE30AF30B0 +30B130B230B330B430B530B630B730B830B930BA30BB30BC30BD30BE30BF30C0 +30C130C230C330C430C530C630C730C830C930CA30CB30CC30CD30CE30CF30D0 +30D130D230D330D430D530D630D730D830D930DA30DB30DC30DD30DE30DF0000 +30E030E130E230E330E430E530E630E730E830E930EA30EB30EC30ED30EE30EF +30F030F130F230F330F430F530F6000000000000000000000000000000000391 +03920393039403950396039703980399039A039B039C039D039E039F03A003A1 +03A303A403A503A603A703A803A90000000000000000000000000000000003B1 +03B203B303B403B503B603B703B803B903BA03BB03BC03BD03BE03BF03C003C1 +03C303C403C503C603C703C803C9000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +84 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +04100411041204130414041504010416041704180419041A041B041C041D041E +041F0420042104220423042404250426042704280429042A042B042C042D042E +042F000000000000000000000000000000000000000000000000000000000000 +04300431043204330434043504510436043704380439043A043B043C043D0000 +043E043F0440044104420443044404450446044704480449044A044B044C044D +044E044F00000000000000000000000000000000000000000000000000002500 +2502250C251025182514251C252C25242534253C25012503250F2513251B2517 +25232533252B253B254B2520252F25282537253F251D25302525253825420000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +85 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +2460246124622463246424652466246724682469246A246B246C246D246E246F +2470247124722473000000000000000000000000000000000000000024742475 +2476247724782479247A247B247C247D247E247F248024812482248324842485 +2486248700000000000000000000000000000000000000002776277727780000 +2779277A277B277C277D277E0000000000000000000000000000000000000000 +0000F8A124882489248A248B248C248D248E248F249000000000000000002160 +216121622163216421652166216721682169216A216BF8A2F8A3F8A400000000 +0000000000002170217121722173217421752176217721782179217A217BF8A5 +F8A6F8A700000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000249C249D249E249F24A0 +24A124A224A324A424A524A624A724A824A924AA24AB24AC24AD24AE24AF24B0 +24B124B224B324B424B500000000000000000000000000000000000000000000 +86 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +339C339F339D33A033A4F8A833A133A5339E33A2338EF8A9338F33C433963397 +F8AA339833B333B233B133B0210933D433CB3390338533863387F8AB00000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000211633CD2121F8AC2664 +2667266126622660266326652666000000000000000000000000000000000000 +0000000000003020260E30040000000000000000000000000000000000000000 +0000000000000000000000000000261E261C261D261F21C621C421C5F8AD21E8 +21E621E721E9F8AEF8AFF8B0F8B1000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +87 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +3230322A322B322C322D322E322F32403237324232433239323A3231323E3234 +3232323B323632333235323C323D323F32380000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000059275C0F32A432A532A632A732A832A93296329D3298329E63A732993349 +3322334D3314331633053333334E330333363318331533273351334A33393357 +330D334233233326333B332B00000000000000000000000000003300331E332A +3331334700000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000337E337D337C337B0000000000000000000000000000 +0000000000000000000000000000000000000000337FF8B2F8B3000000000000 +88 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +222E221F22BF0000000000000000000000000000000000000000000000000000 +0000000000000000301DF8B40000000000000000000000000000000000000000 +000000000000000000000000000000003094000030F730F830F930FA00000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000004E9C +55165A03963F54C0611B632859F690228475831C7A5060AA63E16E2565ED8466 +82A69BF56893572765A162715B9B59D0867B98F47D627DBE9B8E62167C9F88B7 +5B895EB563096697684895C7978D674F4EE54F0A4F4D4F9D504956F2593759D4 +5A015C0960DF610F61706613690570BA754F757079FB7DAD7DEF80C3840E8863 +8B029055907A533B4E954EA557DF80B290C178EF4E0058F16EA290387A328328 +828B9C2F5141537054BD54E156E059FB5F1598F26DEB80E4852D000000000000 +89 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +9662967096A097FB540B53F35B8770CF7FBD8FC296E8536F9D5C7ABA4E117893 +81FC6E26561855046B1D851A9C3B59E553A96D6674DC958F56424E91904B96F2 +834F990C53E155B65B305F71662066F368046C386CF36D29745B76C87A4E9834 +82F1885B8A6092ED6DB275AB76CA99C560A68B018D8A95B2698E53AD51860000 +5712583059445BB45EF6602863A963F46CBF6F14708E7114715971D5733F7E01 +827682D185979060925B9D1B586965BC6C5A752551F9592E59655F805FDC62BC +65FA6A2A6B276BB4738B7FC189569D2C9D0E9EC45CA16C96837B51045C4B61B6 +81C6687672614E594FFA537860696E297A4F97F34E0B53164EEE4F554F3D4FA1 +4F7352A053EF5609590F5AC15BB65BE179D16687679C67B66B4C6CB3706B73C2 +798D79BE7A3C7B8782B182DB8304837783EF83D387668AB256298CA88FE6904E +971E868A4FC45CE862117259753B81E582BD86FE8CC096C5991399D54ECB4F1A +89E356DE584A58CA5EFB5FEB602A6094606261D0621262D06539000000000000 +8A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +9B41666668B06D777070754C76867D7582A587F9958B968E8C9D51F152BE5916 +54B35BB35D16616869826DAF788D84CB88578A7293A79AB86D6C99A886D957A3 +67FF86CE920E5283568754045ED362E164B9683C68386BBB737278BA7A6B899A +89D28D6B8F0390ED95A3969497695B665CB3697D984D984E639B7B206A2B0000 +6A7F68B69C0D6F5F5272559D607062EC6D3B6E076ED1845B89108F444E149C39 +53F6691B6A3A9784682A515C7AC384B291DC938C565B9D286822830584317CA5 +520882C574E64E7E4F8351A05BD2520A52D852E75DFB559A582A59E65B8C5B98 +5BDB5E725E7960A3611F616361BE63DB656267D1685368FA6B3E6B536C576F22 +6F976F4574B0751876E3770B7AFF7BA17C217DE97F367FF0809D8266839E89B3 +8ACC8CAB908494519593959195A2966597D3992882184E38542B5CB85DCC73A9 +764C773C5CA97FEB8D0B96C19811985498584F014F0E5371559C566857FA5947 +5B095BC45C905E0C5E7E5FCC63EE673A65D765E2671F68CB68C4000000000000 +8B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6A5F5E306BC56C176C7D757F79485B637A007D005FBD898F8A188CB48D778ECC +8F1D98E29A0E9B3C4E80507D510059935B9C622F628064EC6B3A72A075917947 +7FA987FB8ABC8B7063AC83CA97A05409540355AB68546A588A70782767759ECD +53745BA2811A865090064E184E454EC74F1153CA54385BAE5F13602565510000 +673D6C426C726CE3707874037A767AAE7B087D1A7CFE7D6665E7725B53BB5C45 +5DE862D262E063196E20865A8A318DDD92F86F0179A69B5A4EA84EAB4EAC4F9B +4FA050D151477AF6517151F653545321537F53EB55AC58835CE15F375F4A602F +6050606D631F65596A4B6CC172C272ED77EF80F881058208854E90F793E197FF +99579A5A4EF051DD5C2D6681696D5C4066F26975738968507C8150C552E45747 +5DFE932665A46B236B3D7434798179BD7B4B7DCA82B983CC887F895F8B398FD1 +91D1541F92804E5D503653E5533A72D7739677E982E68EAF99C699C899D25177 +611A865E55B07A7A50765BD3904796854E326ADB91E75C515C48000000000000 +8C +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +63987A9F6C9397748F617AAA718A96887C8268177E706851936C52F2541B85AB +8A137FA48ECD90E15366888879414FC250BE521151445553572D73EA578B5951 +5F625F8460756176616761A963B2643A656C666F68426E1375667A3D7CFB7D4C +7D997E4B7F6B830E834A86CD8A088A638B668EFD981A9D8F82B88FCE9BE80000 +5287621F64836FC09699684150916B206C7A6F547A747D5088408A2367084EF6 +503950265065517C5238526355A7570F58055ACC5EFA61B261F862F36372691C +6A29727D72AC732E7814786F7D79770C80A9898B8B198CE28ED290639375967A +98559A139E785143539F53B35E7B5F266E1B6E90738473FE7D4382378A008AFA +96504E4E500B53E4547C56FA59D15B645DF15EAB5F276238654567AF6E5672D0 +7CCA88B480A180E183F0864E8A878DE8923796C798679F134E944E924F0D5348 +5449543E5A2F5F8C5FA1609F68A76A8E745A78818A9E8AA48B7791904E5E9BC9 +4EA44F7C4FAF501950165149516C529F52B952FE539A53E35411000000000000 +8D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +540E5589575157A2597D5B545B5D5B8F5DE55DE75DF75E785E835E9A5EB75F18 +6052614C629762D863A7653B6602664366F4676D6821689769CB6C5F6D2A6D69 +6E2F6E9D75327687786C7A3F7CE07D057D187D5E7DB18015800380AF80B18154 +818F822A8352884C88618B1B8CA28CFC90CA91759271783F92FC95A4964D0000 +980599999AD89D3B525B52AB53F7540858D562F76FE08C6A8F5F9EB9514B523B +544A56FD7A4091779D609ED273446F09817075115FFD60DA9AA872DB8FBC6B64 +98034ECA56F0576458BE5A5A606861C7660F6606683968B16DF775D57D3A826E +9B424E9B4F5053C955065D6F5DE65DEE67FB6C99747378028A50939688DF5750 +5EA7632B50B550AC518D670054C9585E59BB5BB05F69624D63A1683D6B736E08 +707D91C7728078157826796D658E7D3083DC88C18F09969B5264572867507F6A +8CA151B45742962A583A698A80B454B25D0E57FC78959DFA4F5C524A548B643E +6628671467F57A847B567D22932F685C9BAD7B395319518A5237000000000000 +8E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5BDF62F664AE64E6672D6BBA85A996D176909BD6634C93069BAB76BF66524E09 +509853C25C7160E864926563685F71E673CA75237B977E8286958B838CDB9178 +991065AC66AB6B8B4ED54ED44F3A4F7F523A53F853F255E356DB58EB59CB59C9 +59FF5B505C4D5E025E2B5FD7601D6307652F5B5C65AF65BD65E8679D6B620000 +6B7B6C0F7345794979C17CF87D197D2B80A2810281F389968A5E8A698A668A8C +8AEE8CC78CDC96CC98FC6B6F4E8B4F3C4F8D51505B575BFA6148630166426B21 +6ECB6CBB723E74BD75D478C1793A800C803381EA84948F9E6C509E7F5F0F8B58 +9D2B7AFA8EF85B8D96EB4E0353F157F759315AC95BA460896E7F6F0675BE8CEA +5B9F85007BE0507267F4829D5C61854A7E1E820E51995C0463688D66659C716E +793E7D1780058B1D8ECA906E86C790AA501F52FA5C3A6753707C7235914C91C8 +932B82E55BC25F3160F94E3B53D65B88624B67316B8A72E973E07A2E816B8DA3 +91529996511253D7546A5BFF63886A397DAC970056DA53CE5468000000000000 +8F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5B975C315DDE4FEE610162FE6D3279C079CB7D427E4D7FD281ED821F84908846 +89728B908E748F2F9031914B916C96C6919C4EC04F4F514553415F93620E67D4 +6C416E0B73637E2691CD928353D459195BBF6DD1795D7E2E7C9B587E719F51FA +88538FF04FCA5CFB662577AC7AE3821C99FF51C65FAA65EC696F6B896DF30000 +6E966F6476FE7D145DE190759187980651E6521D6240669166D96E1A5EB67DD2 +7F7266F885AF85F78AF852A953D959735E8F5F90605592E4966450B7511F52DD +5320534753EC54E8554655315617596859BE5A3C5BB55C065C0F5C115C1A5E84 +5E8A5EE05F70627F628462DB638C63776607660C662D6676677E68A26A1F6A35 +6CBC6D886E096E58713C7126716775C77701785D7901796579F07AE07B117CA7 +7D39809683D6848B8549885D88F38A1F8A3C8A548A738C618CDE91A49266937E +9418969C97984E0A4E084E1E4E575197527057CE583458CC5B225E3860C564FE +676167566D4472B675737A6384B88B7291B89320563157F498FE000000000000 +90 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +62ED690D6B9671ED7E548077827289E698DF87558FB15C3B4F384FE14FB55507 +5A205BDD5BE95FC3614E632F65B0664B68EE699B6D786DF1753375B9771F795E +79E67D3381E382AF85AA89AA8A3A8EAB8F9B903291DD97074EBA4EC152035875 +58EC5C0B751A5C3D814E8A0A8FC59663976D7B258ACF9808916256F353A80000 +9017543957825E2563A86C34708A77617C8B7FE088709042915493109318968F +745E9AC45D075D69657067A28DA896DB636E6749691983C5981796C088FE6F84 +647A5BF84E16702C755D662F51C4523652E259D35F8160276210653F6574661F +667468F268166B636E057272751F76DB7CBE805658F088FD897F8AA08A938ACB +901D91929752975965897A0E810696BB5E2D60DC621A65A56614679077F37A4D +7C4D7E3E810A8CAC8D648DE18E5F78A9520762D963A5644262988A2D7A837BC0 +8AAC96EA7D76820C87494ED95148534353605BA35C025C165DDD6226624764B0 +681368346CC96D456D1767D36F5C714E717D65CB7A7F7BAD7DDA000000000000 +91 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7E4A7FA8817A821B823985A68A6E8CCE8DF59078907792AD929195839BAE524D +55846F387136516879857E5581B37CCE564C58515CA863AA66FE66FD695A72D9 +758F758E790E795679DF7C977D207D4486078A34963B90619F2050E7527553CC +53E2500955AA58EE594F723D5B8B5C64531D60E360F3635C6383633F63BB0000 +64CD65E966F95DE369CD69FD6F1571E54E8975E976F87A937CDF7DCF7D9C8061 +83498358846C84BC85FB88C58D709001906D9397971C9A1250CF5897618E81D3 +85358D0890204FC3507452475373606F6349675F6E2C8DB3901F4FD75C5E8CCA +65CF7D9A53528896517663C35B585B6B5C0A640D6751905C4ED6591A592A6C70 +8A51553E581559A560F0625367C182356955964099C49A284F5358065BFE8010 +5CB15E2F5F856020614B623466FF6CF06EDE80CE817F82D4888B8CB89000902E +968A9EDB9BDB4EE353F059277B2C918D984C9DF96EDD7027535355445B856258 +629E62D36CA26FEF74228A1794386FC18AFE833851E786F853EA000000000000 +92 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +53E94F4690548FB0596A81315DFD7AEA8FBF68DA8C3772F89C486A3D8AB04E39 +53585606576662C563A265E66B4E6DE16E5B70AD77ED7AEF7BAA7DBB803D80C6 +86CB8A95935B56E358C75F3E65AD66966A806BB575378AC7502477E557305F1B +6065667A6C6075F47A1A7F6E81F48718904599B37BC9755C7AF97B5184C40000 +901079E97A9283365AE177404E2D4EF25B995FE062BD663C67F16CE8866B8877 +8A3B914E92F399D06A177026732A82E784578CAF4E01514651CB558B5BF55E16 +5E335E815F145F355F6B5FB461F2631166A2671D6F6E7252753A773A80748139 +817887768ABF8ADC8D858DF3929A957798029CE552C5635776F467156C8873CD +8CC393AE96736D25589C690E69CC8FFD939A75DB901A585A680263B469FB4F43 +6F2C67D88FBB85267DB49354693F6F70576A58F75B2C7D2C722A540A91E39DB4 +4EAD4F4E505C507552438C9E544858245B9A5E1D5E955EAD5EF75F1F608C62B5 +633A63D068AF6C407887798E7A0B7DE082478A028AE68E449013000000000000 +93 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +90B8912D91D89F0E6CE5645864E265756EF476847B1B906993D16EBA54F25FB9 +64A48F4D8FED92445178586B59295C555E976DFB7E8F751C8CBC8EE2985B70B9 +4F1D6BBF6FB1753096FB514E54105835585759AC5C605F926597675C6E21767B +83DF8CED901490FD934D7825783A52AA5EA6571F597460125012515A51AC0000 +51CD520055105854585859575B955CF65D8B60BC6295642D6771684368BC68DF +76D76DD86E6F6D9B706F71C85F5375D879777B497B547B527CD67D7152308463 +856985E48A0E8B048C468E0F9003900F94199676982D9A3095D850CD52D5540C +58025C0E61A7649E6D1E77B37AE580F48404905392855CE09D07533F5F975FB3 +6D9C7279776379BF7BE46BD272EC8AAD68036A6151F87A8169345C4A9CF682EB +5BC59149701E56785C6F60C765666C8C8C5A90419813545166C7920D594890A3 +51854E4D51EA85998B0E7058637A934B696299B47E047577535769608EDF96E3 +6C5D4E8C5C3C5F108FE953028CD1808986795EFF65E54E735165000000000000 +94 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +59825C3F97EE4EFB598A5FCD8A8D6FE179B079625BE78471732B71B15E745FF5 +637B649A71C37C984E435EFC4E4B57DC56A260A96FC37D0D80FD813381BF8FB2 +899786A45DF4628A64AD898767776CE26D3E743678345A467F7582AD99AC4FF3 +5EC362DD63926557676F76C3724C80CC80BA8F29914D500D57F95A9268850000 +6973716472FD8CB758F28CE0966A9019877F79E477E784294F2F5265535A62CD +67CF6CCA767D7B947C95823685848FEB66DD6F2072067E1B83AB99C19EA651FD +7BB178727BB880877B486AE85E61808C75517560516B92626E8C767A91979AEA +4F107F70629C7B4F95A59CE9567A585986E496BC4F345224534A53CD53DB5E06 +642C6591677F6C3E6C4E724872AF73ED75547E41822C85E98CA97BC491C67169 +981298EF633D6669756A76E478D0854386EE532A5351542659835E875F7C60B2 +6249627962AB65906BD46CCC75B276AE789179D87DCB7F7780A588AB8AB98CBB +907F975E98DB6A0B7C3850995C3E5FAE67876BD8743577097F8E000000000000 +95 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +9F3B67CA7A175339758B9AED5F66819D83F180985F3C5FC575627B46903C6867 +59EB5A9B7D10767E8B2C4FF55F6A6A196C376F0274E2796888688A558C795EDF +63CF75C579D282D7932892F2849C86ED9C2D54C15F6C658C6D5C70158CA78CD3 +983B654F74F64E0D4ED857E0592B5A665BCC51A85E035E9C6016627665770000 +65A7666E6D6E72367B268150819A82998B5C8CA08CE68D74961C96444FAE64AB +6B66821E8461856A90E85C01695398A8847A85574F0F526F5FA95E45670D798F +8179890789866DF55F1762556CB84ECF72699B925206543B567458B361A4626E +711A596E7C897CDE7D1B96F06587805E4E194F75517558405E635E735F0A67C4 +4E26853D9589965B7C73980150FB58C1765678A7522577A585117B86504F5909 +72477BC77DE88FBA8FD4904D4FBF52C95A295F0197AD4FDD821792EA57036355 +6B69752B88DC8F147A4252DF58936155620A66AE6BCD7C3F83E950234FF85305 +5446583159495B9D5CF05CEF5D295E9662B16367653E65B9670B000000000000 +96 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6CD56CE170F978327E2B80DE82B3840C84EC870289128A2A8C4A90A692D298FD +9CF39D6C4E4F4EA1508D5256574A59A85E3D5FD85FD9623F66B4671B67D068D2 +51927D2180AA81A88B008C8C8CBF927E96325420982C531750D5535C58A864B2 +6734726777667A4691E652C36CA16B8658005E4C5954672C7FFB51E176C60000 +646978E89B549EBB57CB59B96627679A6BCE54E969D95E55819C67959BAA67FE +9C52685D4EA64FE353C862B9672B6CAB8FC44FAD7E6D9EBF4E0761626E806F2B +85135473672A9B455DF37B955CAC5BC6871C6E4A84D17A14810859997C8D6C11 +772052D959227121725F77DB97279D61690B5A7F5A1851A5540D547D660E76DF +8FF792989CF459EA725D6EC5514D68C97DBF7DEC97629EBA64786A2183025984 +5B5F6BDB731B76F27DB280178499513267289ED976EE676252FF99055C24623B +7C7E8CB0554F60B67D0B958053014E5F51B6591C723A803691CE5F2577E25384 +5F797D0485AC8A338E8D975667F385AE9453610961086CB97652000000000000 +97 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8AED8F38552F4F51512A52C753CB5BA55E7D60A0618263D6670967DA6E676D8C +733673377531795088D58A98904A909190F596C4878D59154E884F594E0E8A89 +8F3F981050AD5E7C59965BB95EB863DA63FA64C166DC694A69D86D0B6EB67194 +75287AAF7F8A8000844984C989818B218E0A9065967D990A617E62916B320000 +6C836D747FCC7FFC6DC07F8587BA88F8676583B1983C96F76D1B7D61843D916A +4E7153755D506B046FEB85CD862D89A75229540F5C65674E68A87406748375E2 +88CF88E191CC96E296785F8B73877ACB844E63A0756552896D416E9C74097559 +786B7C9296867ADC9F8D4FB6616E65C5865C4E864EAE50DA4E2151CC5BEE6599 +68816DBC731F764277AD7A1C7CE7826F8AD2907C91CF96759818529B7DD1502B +539867976DCB71D0743381E88F2A96A39C579E9F746058416D997D2F985E4EE4 +4F364F8B51B752B15DBA601C73B2793C82D3923496B796F6970A9E979F6266A6 +6B74521752A370C888C25EC9604B61906F2371497C3E7DF4806F000000000000 +98 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +84EE9023932C54429B6F6AD370898CC28DEF973252B45A415ECA5F046717697C +69946D6A6F0F726272FC7BED8001807E874B90CE516D9E937984808B93328AD6 +502D548C8A716B6A8CC4810760D167A09DF24E994E989C108A6B85C185686900 +6E7E789781550000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000005F0C +4E104E154E2A4E314E364E3C4E3F4E424E564E584E824E858C6B4E8A82125F0D +4E8E4E9E4E9F4EA04EA24EB04EB34EB64ECE4ECD4EC44EC64EC24ED74EDE4EED +4EDF4EF74F094F5A4F304F5B4F5D4F574F474F764F884F8F4F984F7B4F694F70 +4F914F6F4F864F9651184FD44FDF4FCE4FD84FDB4FD14FDA4FD04FE44FE5501A +50285014502A502550054F1C4FF650215029502C4FFE4FEF5011500650435047 +6703505550505048505A5056506C50785080509A508550B450B2000000000000 +99 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +50C950CA50B350C250D650DE50E550ED50E350EE50F950F55109510151025116 +51155114511A5121513A5137513C513B513F51405152514C515451627AF85169 +516A516E5180518256D8518C5189518F519151935195519651A451A651A251A9 +51AA51AB51B351B151B251B051B551BD51C551C951DB51E0865551E951ED0000 +51F051F551FE5204520B5214520E5227522A522E52335239524F5244524B524C +525E5254526A527452695273527F527D528D529452925271528852918FA88FA7 +52AC52AD52BC52B552C152CD52D752DE52E352E698ED52E052F352F552F852F9 +530653087538530D5310530F5315531A5323532F533153335338534053465345 +4E175349534D51D6535E5369536E5918537B53775382539653A053A653A553AE +53B053B653C37C1296D953DF66FC71EE53EE53E853ED53FA5401543D5440542C +542D543C542E54365429541D544E548F5475548E545F5471547754705492547B +5480547654845490548654C754A254B854A554AC54C454C854A8000000000000 +9A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +54AB54C254A454BE54BC54D854E554E6550F551454FD54EE54ED54FA54E25539 +55405563554C552E555C55455556555755385533555D5599558054AF558A559F +557B557E5598559E55AE557C558355A9558755A855DA55C555DF55C455DC55E4 +55D4561455F7561655FE55FD561B55F9564E565071DF56345636563256380000 +566B5664562F566C566A56865680568A56A05694568F56A556AE56B656B456C2 +56BC56C156C356C056C856CE56D156D356D756EE56F9570056FF570457095708 +570B570D57135718571655C7571C572657375738574E573B5740574F576957C0 +57885761577F5789579357A057B357A457AA57B057C357C657D457D257D3580A +57D657E3580B5819581D587258215862584B58706BC05852583D5879588558B9 +589F58AB58BA58DE58BB58B858AE58C558D358D158D758D958D858E558DC58E4 +58DF58EF58FA58F958FB58FC58FD5902590A5910591B68A65925592C592D5932 +5938593E7AD259555950594E595A5958596259605967596C5969000000000000 +9B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +59785981599D4F5E4FAB59A359B259C659E859DC598D59D959DA5A255A1F5A11 +5A1C5A095A1A5A405A6C5A495A355A365A625A6A5A9A5ABC5ABE5ACB5AC25ABD +5AE35AD75AE65AE95AD65AFA5AFB5B0C5B0B5B165B325AD05B2A5B365B3E5B43 +5B455B405B515B555B5A5B5B5B655B695B705B735B755B7865885B7A5B800000 +5B835BA65BB85BC35BC75BC95BD45BD05BE45BE65BE25BDE5BE55BEB5BF05BF6 +5BF35C055C075C085C0D5C135C205C225C285C385C395C415C465C4E5C535C50 +5C4F5B715C6C5C6E4E625C765C795C8C5C915C94599B5CAB5CBB5CB65CBC5CB7 +5CC55CBE5CC75CD95CE95CFD5CFA5CED5D8C5CEA5D0B5D155D175D5C5D1F5D1B +5D115D145D225D1A5D195D185D4C5D525D4E5D4B5D6C5D735D765D875D845D82 +5DA25D9D5DAC5DAE5DBD5D905DB75DBC5DC95DCD5DD35DD25DD65DDB5DEB5DF2 +5DF55E0B5E1A5E195E115E1B5E365E375E445E435E405E4E5E575E545E5F5E62 +5E645E475E755E765E7A9EBC5E7F5EA05EC15EC25EC85ED05ECF000000000000 +9C +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5ED65EE35EDD5EDA5EDB5EE25EE15EE85EE95EEC5EF15EF35EF05EF45EF85EFE +5F035F095F5D5F5C5F0B5F115F165F295F2D5F385F415F485F4C5F4E5F2F5F51 +5F565F575F595F615F6D5F735F775F835F825F7F5F8A5F885F915F875F9E5F99 +5F985FA05FA85FAD5FBC5FD65FFB5FE45FF85FF15FDD60B35FFF602160600000 +601960106029600E6031601B6015602B6026600F603A605A6041606A6077605F +604A6046604D6063604360646042606C606B60596081608D60E76083609A6084 +609B60966097609260A7608B60E160B860E060D360B45FF060BD60C660B560D8 +614D6115610660F660F7610060F460FA6103612160FB60F1610D610E6147613E +61286127614A613F613C612C6134613D614261446173617761586159615A616B +6174616F61656171615F615D6153617561996196618761AC6194619A618A6191 +61AB61AE61CC61CA61C961F761C861C361C661BA61CB7F7961CD61E661E361F6 +61FA61F461FF61FD61FC61FE620062086209620D620C6214621B000000000000 +9D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +621E6221622A622E6230623262336241624E625E6263625B62606268627C6282 +6289627E62926293629662D46283629462D762D162BB62CF62FF62C664D462C8 +62DC62CC62CA62C262C7629B62C9630C62EE62F163276302630862EF62F56350 +633E634D641C634F6396638E638063AB637663A3638F6389639F63B5636B0000 +636963BE63E963C063C663E363C963D263F663C4641664346406641364266436 +651D64176428640F6467646F6476644E652A6495649364A564A9648864BC64DA +64D264C564C764BB64D864C264F164E7820964E064E162AC64E364EF652C64F6 +64F464F264FA650064FD6518651C650565246523652B65346535653765366538 +754B654865566555654D6558655E655D65726578658265838B8A659B659F65AB +65B765C365C665C165C465CC65D265DB65D965E065E165F16772660A660365FB +6773663566366634661C664F664466496641665E665D666466676668665F6662 +667066836688668E668966846698669D66C166B966C966BE66BC000000000000 +9E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +66C466B866D666DA66E0663F66E666E966F066F566F7670F6716671E67266727 +9738672E673F67366741673867376746675E67606759676367646789677067A9 +677C676A678C678B67A667A1678567B767EF67B467EC67B367E967B867E467DE +67DD67E267EE67B967CE67C667E76A9C681E684668296840684D6832684E0000 +68B3682B685968636877687F689F688F68AD6894689D689B68836AAE68B96874 +68B568A068BA690F688D687E690168CA690868D86922692668E1690C68CD68D4 +68E768D569366912690468D768E3692568F968E068EF6928692A691A69236921 +68C669796977695C6978696B6954697E696E69396974693D695969306961695E +695D6981696A69B269AE69D069BF69C169D369BE69CE5BE869CA69DD69BB69C3 +69A76A2E699169A0699C699569B469DE69E86A026A1B69FF6B0A69F969F269E7 +6A0569B16A1E69ED6A1469EB6A0A6A126AC16A236A136A446A0C6A726A366A78 +6A476A626A596A666A486A386A226A906A8D6AA06A846AA26AA3000000000000 +9F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6A9786176ABB6AC36AC26AB86AB36AAC6ADE6AD16ADF6AAA6ADA6AEA6AFB6B05 +86166AFA6B126B169B316B1F6B386B3776DC6B3998EE6B476B436B496B506B59 +6B546B5B6B5F6B616B786B796B7F6B806B846B836B8D6B986B956B9E6BA46BAA +6BAB6BAF6BB26BB16BB36BB76BBC6BC66BCB6BD36BDF6BEC6BEB6BF36BEF0000 +9EBE6C086C136C146C1B6C246C236C5E6C556C626C6A6C826C8D6C9A6C816C9B +6C7E6C686C736C926C906CC46CF16CD36CBD6CD76CC56CDD6CAE6CB16CBE6CBA +6CDB6CEF6CD96CEA6D1F884D6D366D2B6D3D6D386D196D356D336D126D0C6D63 +6D936D646D5A6D796D596D8E6D956FE46D856DF96E156E0A6DB56DC76DE66DB8 +6DC66DEC6DDE6DCC6DE86DD26DC56DFA6DD96DE46DD56DEA6DEE6E2D6E6E6E2E +6E196E726E5F6E3E6E236E6B6E2B6E766E4D6E1F6E436E3A6E4E6E246EFF6E1D +6E386E826EAA6E986EC96EB76ED36EBD6EAF6EC46EB26ED46ED56E8F6EA56EC2 +6E9F6F416F11704C6EEC6EF86EFE6F3F6EF26F316EEF6F326ECC000000000000 +E0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6F3E6F136EF76F866F7A6F786F816F806F6F6F5B6FF36F6D6F826F7C6F586F8E +6F916FC26F666FB36FA36FA16FA46FB96FC66FAA6FDF6FD56FEC6FD46FD86FF1 +6FEE6FDB7009700B6FFA70117001700F6FFE701B701A6F74701D7018701F7030 +703E7032705170637099709270AF70F170AC70B870B370AE70DF70CB70DD0000 +70D9710970FD711C711971657155718871667162714C7156716C718F71FB7184 +719571A871AC71D771B971BE71D271C971D471CE71E071EC71E771F571FC71F9 +71FF720D7210721B7228722D722C72307232723B723C723F72407246724B7258 +7274727E7282728172877292729672A272A772B972B272C372C672C472CE72D2 +72E272E072E172F972F7500F7317730A731C7316731D7334732F73297325733E +734E734F9ED87357736A7368737073787375737B737A73C873B373CE73BB73C0 +73E573EE73DE74A27405746F742573F87432743A7455743F745F74597441745C +746974707463746A7476747E748B749E74A774CA74CF74D473F1000000000000 +E1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +74E074E374E774E974EE74F274F074F174F874F7750475037505750C750E750D +75157513751E7526752C753C7544754D754A7549755B7546755A756975647567 +756B756D75787576758675877574758A758975827594759A759D75A575A375C2 +75B375C375B575BD75B875BC75B175CD75CA75D275D975E375DE75FE75FF0000 +75FC760175F075FA75F275F3760B760D7609761F762776207621762276247634 +7630763B764776487646765C76587661766276687669766A7667766C76707672 +76767678767C768076837688768B768E769676937699769A76B076B476B876B9 +76BA76C276CD76D676D276DE76E176E576E776EA862F76FB7708770777047729 +7724771E77257726771B773777387747775A7768776B775B7765777F777E7779 +778E778B779177A0779E77B077B677B977BF77BC77BD77BB77C777CD77D777DA +77DC77E377EE77FC780C781279267820792A7845788E78747886787C789A788C +78A378B578AA78AF78D178C678CB78D478BE78BC78C578CA78EC000000000000 +E2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +78E778DA78FD78F47907791279117919792C792B794079607957795F795A7955 +7953797A797F798A799D79A79F4B79AA79AE79B379B979BA79C979D579E779EC +79E179E37A087A0D7A187A197A207A1F79807A317A3B7A3E7A377A437A577A49 +7A617A627A699F9D7A707A797A7D7A887A977A957A987A967AA97AC87AB00000 +7AB67AC57AC47ABF90837AC77ACA7ACD7ACF7AD57AD37AD97ADA7ADD7AE17AE2 +7AE67AED7AF07B027B0F7B0A7B067B337B187B197B1E7B357B287B367B507B7A +7B047B4D7B0B7B4C7B457B757B657B747B677B707B717B6C7B6E7B9D7B987B9F +7B8D7B9C7B9A7B8B7B927B8F7B5D7B997BCB7BC17BCC7BCF7BB47BC67BDD7BE9 +7C117C147BE67BE57C607C007C077C137BF37BF77C177C0D7BF67C237C277C2A +7C1F7C377C2B7C3D7C4C7C437C547C4F7C407C507C587C5F7C647C567C657C6C +7C757C837C907CA47CAD7CA27CAB7CA17CA87CB37CB27CB17CAE7CB97CBD7CC0 +7CC57CC27CD87CD27CDC7CE29B3B7CEF7CF27CF47CF67CFA7D06000000000000 +E3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7D027D1C7D157D0A7D457D4B7D2E7D327D3F7D357D467D737D567D4E7D727D68 +7D6E7D4F7D637D937D897D5B7D8F7D7D7D9B7DBA7DAE7DA37DB57DC77DBD7DAB +7E3D7DA27DAF7DDC7DB87D9F7DB07DD87DDD7DE47DDE7DFB7DF27DE17E057E0A +7E237E217E127E317E1F7E097E0B7E227E467E667E3B7E357E397E437E370000 +7E327E3A7E677E5D7E567E5E7E597E5A7E797E6A7E697E7C7E7B7E837DD57E7D +8FAE7E7F7E887E897E8C7E927E907E937E947E967E8E7E9B7E9C7F387F3A7F45 +7F4C7F4D7F4E7F507F517F557F547F587F5F7F607F687F697F677F787F827F86 +7F837F887F877F8C7F947F9E7F9D7F9A7FA37FAF7FB27FB97FAE7FB67FB88B71 +7FC57FC67FCA7FD57FD47FE17FE67FE97FF37FF998DC80068004800B80128018 +8019801C80218028803F803B804A804680528058805A805F8062806880738072 +807080768079807D807F808480868085809B8093809A80AD519080AC80DB80E5 +80D980DD80C480DA80D6810980EF80F1811B81298123812F814B000000000000 +E4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +968B8146813E8153815180FC8171816E81658166817481838188818A81808182 +81A0819581A481A3815F819381A981B081B581BE81B881BD81C081C281BA81C9 +81CD81D181D981D881C881DA81DF81E081E781FA81FB81FE8201820282058207 +820A820D821082168229822B82388233824082598258825D825A825F82640000 +82628268826A826B822E827182778278827E828D829282AB829F82BB82AC82E1 +82E382DF82D282F482F382FA8393830382FB82F982DE830682DC830982D98335 +83348316833283318340833983508345832F832B831783188385839A83AA839F +83A283968323838E8387838A837C83B58373837583A0838983A883F4841383EB +83CE83FD840383D8840B83C183F7840783E083F2840D8422842083BD84388506 +83FB846D842A843C855A84848477846B84AD846E848284698446842C846F8479 +843584CA846284B984BF849F84D984CD84BB84DA84D084C184C684D684A18521 +84FF84F485178518852C851F8515851484FC8540856385588548000000000000 +E5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +85418602854B8555858085A485888591858A85A8856D8594859B85EA8587859C +8577857E859085C985BA85CF85B985D085D585DD85E585DC85F9860A8613860B +85FE85FA86068622861A8630863F864D4E558654865F86678671869386A386A9 +86AA868B868C86B686AF86C486C686B086C9882386AB86D486DE86E986EC0000 +86DF86DB86EF8712870687088700870386FB87118709870D86F9870A8734873F +8737873B87258729871A8760875F8778874C874E877487578768876E87598753 +8763876A880587A2879F878287AF87CB87BD87C087D096D687AB87C487B387C7 +87C687BB87EF87F287E0880F880D87FE87F687F7880E87D28811881688158822 +88218831883688398827883B8844884288528859885E8862886B8881887E889E +8875887D88B5887288828897889288AE889988A2888D88A488B088BF88B188C3 +88C488D488D888D988DD88F9890288FC88F488E888F28904890C890A89138943 +891E8925892A892B89418944893B89368938894C891D8960895E000000000000 +E6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +89668964896D896A896F89748977897E89838988898A8993899889A189A989A6 +89AC89AF89B289BA89BD89BF89C089DA89DC89DD89E789F489F88A038A168A10 +8A0C8A1B8A1D8A258A368A418A5B8A528A468A488A7C8A6D8A6C8A628A858A82 +8A848AA88AA18A918AA58AA68A9A8AA38AC48ACD8AC28ADA8AEB8AF38AE70000 +8AE48AF18B148AE08AE28AF78ADE8ADB8B0C8B078B1A8AE18B168B108B178B20 +8B3397AB8B268B2B8B3E8B288B418B4C8B4F8B4E8B498B568B5B8B5A8B6B8B5F +8B6C8B6F8B748B7D8B808B8C8B8E8B928B938B968B998B9A8C3A8C418C3F8C48 +8C4C8C4E8C508C558C628C6C8C788C7A8C828C898C858C8A8C8D8C8E8C948C7C +8C98621D8CAD8CAA8CBD8CB28CB38CAE8CB68CC88CC18CE48CE38CDA8CFD8CFA +8CFB8D048D058D0A8D078D0F8D0D8D109F4E8D138CCD8D148D168D678D6D8D71 +8D738D818D998DC28DBE8DBA8DCF8DDA8DD68DCC8DDB8DCB8DEA8DEB8DDF8DE3 +8DFC8E088E098DFF8E1D8E1E8E108E1F8E428E358E308E348E4A000000000000 +E7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8E478E498E4C8E508E488E598E648E608E2A8E638E558E768E728E7C8E818E87 +8E858E848E8B8E8A8E938E918E948E998EAA8EA18EAC8EB08EC68EB18EBE8EC5 +8EC88ECB8EDB8EE38EFC8EFB8EEB8EFE8F0A8F058F158F128F198F138F1C8F1F +8F1B8F0C8F268F338F3B8F398F458F428F3E8F4C8F498F468F4E8F578F5C0000 +8F628F638F648F9C8F9F8FA38FAD8FAF8FB78FDA8FE58FE28FEA8FEF90878FF4 +90058FF98FFA901190159021900D901E9016900B90279036903590398FF8904F +905090519052900E9049903E90569058905E9068906F907696A890729082907D +90819080908A9089908F90A890AF90B190B590E290E4624890DB910291129119 +91329130914A9156915891639165916991739172918B9189918291A291AB91AF +91AA91B591B491BA91C091C191C991CB91D091D691DF91E191DB91FC91F591F6 +921E91FF9214922C92159211925E925792459249926492489295923F924B9250 +929C92969293929B925A92CF92B992B792E9930F92FA9344932E000000000000 +E8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +93199322931A9323933A9335933B935C9360937C936E935693B093AC93AD9394 +93B993D693D793E893E593D893C393DD93D093C893E4941A9414941394039407 +94109436942B94359421943A944194529444945B94609462945E946A92299470 +94759477947D945A947C947E9481947F95829587958A95949596959895990000 +95A095A895A795AD95BC95BB95B995BE95CA6FF695C395CD95CC95D595D495D6 +95DC95E195E595E296219628962E962F9642964C964F964B9677965C965E965D +965F96669672966C968D96989695969796AA96A796B196B296B096B496B696B8 +96B996CE96CB96C996CD894D96DC970D96D596F99704970697089713970E9711 +970F971697199724972A97309739973D973E97449746974897429749975C9760 +97649766976852D2976B977197799785977C9781977A9786978B978F9790979C +97A897A697A397B397B497C397C697C897CB97DC97ED9F4F97F27ADF97F697F5 +980F980C9838982498219837983D9846984F984B986B986F9870000000000000 +E9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +98719874987398AA98AF98B198B698C498C398C698E998EB9903990999129914 +99189921991D991E99249920992C992E993D993E9942994999459950994B9951 +9952994C99559997999899A599AD99AE99BC99DF99DB99DD99D899D199ED99EE +99F199F299FB99F89A019A0F9A0599E29A199A2B9A379A459A429A409A430000 +9A3E9A559A4D9A5B9A579A5F9A629A659A649A699A6B9A6A9AAD9AB09ABC9AC0 +9ACF9AD19AD39AD49ADE9ADF9AE29AE39AE69AEF9AEB9AEE9AF49AF19AF79AFB +9B069B189B1A9B1F9B229B239B259B279B289B299B2A9B2E9B2F9B329B449B43 +9B4F9B4D9B4E9B519B589B749B939B839B919B969B979B9F9BA09BA89BB49BC0 +9BCA9BB99BC69BCF9BD19BD29BE39BE29BE49BD49BE19C3A9BF29BF19BF09C15 +9C149C099C139C0C9C069C089C129C0A9C049C2E9C1B9C259C249C219C309C47 +9C329C469C3E9C5A9C609C679C769C789CE79CEC9CF09D099D089CEB9D039D06 +9D2A9D269DAF9D239D1F9D449D159D129D419D3F9D3E9D469D48000000000000 +EA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +9D5D9D5E9D649D519D509D599D729D899D879DAB9D6F9D7A9D9A9DA49DA99DB2 +9DC49DC19DBB9DB89DBA9DC69DCF9DC29DD99DD39DF89DE69DED9DEF9DFD9E1A +9E1B9E1E9E759E799E7D9E819E889E8B9E8C9E929E959E919E9D9EA59EA99EB8 +9EAA9EAD97619ECC9ECE9ECF9ED09ED49EDC9EDE9EDD9EE09EE59EE89EEF0000 +9EF49EF69EF79EF99EFB9EFC9EFD9F079F0876B79F159F219F2C9F3E9F4A9F52 +9F549F639F5F9F609F619F669F679F6C9F6A9F779F729F769F959F9C9FA0582F +69C79059746451DC719900000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +EB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000F8B5F8B60000000000000000000000000000000000000000000000000000 +F8B7FE33000000000000000000000000000000000000F8B8FE31F8B900000000 +F8BAF8BBF8BCF8BDFE300000000000000000FE35FE36FE39FE3AF8BEF8BFFE37 +FE38FE3FFE40FE3DFE3EFE41FE42FE43FE44FE3BFE3C00000000000000000000 +0000F8C000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +EC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000F8C1 +0000F8C20000F8C30000F8C40000F8C500000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000F8C600000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000F8C70000F8C80000F8C9000000000000000000000000F8CA000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +ED +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +F8CB0000F8CC0000F8CD0000F8CE0000F8CF0000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00000000F8D00000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000000000000F8D10000F8D20000F8D3000000000000000000000000F8D40000 +00000000000000000000F8D5F8D6000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/macRoman.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/macRoman.enc new file mode 100644 index 00000000..15de2662 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/macRoman.enc @@ -0,0 +1,20 @@ +# Encoding file: macRoman, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +00C400C500C700C900D100D600DC00E100E000E200E400E300E500E700E900E8 +00EA00EB00ED00EC00EE00EF00F100F300F200F400F600F500FA00F900FB00FC +202000B000A200A300A7202200B600DF00AE00A9212200B400A8226000C600D8 +221E00B12264226500A500B522022211220F03C0222B00AA00BA03A900E600F8 +00BF00A100AC221A01922248220600AB00BB202600A000C000C300D501520153 +20132014201C201D2018201900F725CA00FF0178204420AC2039203AFB01FB02 +202100B7201A201E203000C200CA00C100CB00C800CD00CE00CF00CC00D300D4 +F8FF00D200DA00DB00D9013102C602DC00AF02D802D902DA00B802DD02DB02C7 diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/macRomania.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/macRomania.enc new file mode 100644 index 00000000..ce41cf42 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/macRomania.enc @@ -0,0 +1,20 @@ +# Encoding file: macRomania, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +00C400C500C700C900D100D600DC00E100E000E200E400E300E500E700E900E8 +00EA00EB00ED00EC00EE00EF00F100F300F200F400F600F500FA00F900FB00FC +202000B000A200A300A7202200B600DF00AE00A9212200B400A822600102015E +221E00B12264226500A500B522022211220F03C0222B00AA00BA21260103015F +00BF00A100AC221A01922248220600AB00BB202600A000C000C300D501520153 +20132014201C201D2018201900F725CA00FF0178204400A42039203A01620163 +202100B7201A201E203000C200CA00C100CB00C800CD00CE00CF00CC00D300D4 +F8FF00D200DA00DB00D9013102C602DC00AF02D802D902DA00B802DD02DB02C7 diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/macThai.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/macThai.enc new file mode 100644 index 00000000..7d9c8ad4 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/macThai.enc @@ -0,0 +1,20 @@ +# Encoding file: macThai, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +00AB00BB2026F88CF88FF892F895F898F88BF88EF891F894F897201C201DF899 +FFFD2022F884F889F885F886F887F888F88AF88DF890F893F89620182019FFFD +00A00E010E020E030E040E050E060E070E080E090E0A0E0B0E0C0E0D0E0E0E0F +0E100E110E120E130E140E150E160E170E180E190E1A0E1B0E1C0E1D0E1E0E1F +0E200E210E220E230E240E250E260E270E280E290E2A0E2B0E2C0E2D0E2E0E2F +0E300E310E320E330E340E350E360E370E380E390E3AFEFF200B201320140E3F +0E400E410E420E430E440E450E460E470E480E490E4A0E4B0E4C0E4D21220E4F +0E500E510E520E530E540E550E560E570E580E5900AE00A9FFFDFFFDFFFDFFFD diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/macTurkish.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/macTurkish.enc new file mode 100644 index 00000000..f9542ae5 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/macTurkish.enc @@ -0,0 +1,20 @@ +# Encoding file: macTurkish, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +00C400C500C700C900D100D600DC00E100E000E200E400E300E500E700E900E8 +00EA00EB00ED00EC00EE00EF00F100F300F200F400F600F500FA00F900FB00FC +202000B000A200A300A7202200B600DF00AE00A9212200B400A8226000C600D8 +221E00B12264226500A500B522022211220F03C0222B00AA00BA03A900E600F8 +00BF00A100AC221A01922248220600AB00BB202600A000C000C300D501520153 +20132014201C201D2018201900F725CA00FF0178011E011F01300131015E015F +202100B7201A201E203000C200CA00C100CB00C800CD00CE00CF00CC00D300D4 +F8FF00D200DA00DB00D9F8A002C602DC00AF02D802D902DA00B802DD02DB02C7 diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/macUkraine.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/macUkraine.enc new file mode 100644 index 00000000..643cc45e --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/macUkraine.enc @@ -0,0 +1,20 @@ +# Encoding file: macUkraine, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +0410041104120413041404150416041704180419041A041B041C041D041E041F +0420042104220423042404250426042704280429042A042B042C042D042E042F +202000B0049000A300A7202200B6040600AE00A9212204020452226004030453 +221E00B122642265045600B504910408040404540407045704090459040A045A +0458040500AC221A01922248220600AB00BB202600A0040B045B040C045C0455 +20132014201C201D2018201900F7201E040E045E040F045F211604010451044F +0430043104320433043404350436043704380439043A043B043C043D043E043F +0440044104420443044404450446044704480449044A044B044C044D044E00A4 diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/shiftjis.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/shiftjis.enc new file mode 100644 index 00000000..140aec4c --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/shiftjis.enc @@ -0,0 +1,690 @@ +# Encoding file: shiftjis, multi-byte +M +003F 0 40 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E007F +0080000000000000000000850086008700000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000FF61FF62FF63FF64FF65FF66FF67FF68FF69FF6AFF6BFF6CFF6DFF6EFF6F +FF70FF71FF72FF73FF74FF75FF76FF77FF78FF79FF7AFF7BFF7CFF7DFF7EFF7F +FF80FF81FF82FF83FF84FF85FF86FF87FF88FF89FF8AFF8BFF8CFF8DFF8EFF8F +FF90FF91FF92FF93FF94FF95FF96FF97FF98FF99FF9AFF9BFF9CFF9DFF9EFF9F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +81 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +300030013002FF0CFF0E30FBFF1AFF1BFF1FFF01309B309C00B4FF4000A8FF3E +FFE3FF3F30FD30FE309D309E30034EDD30053006300730FC20152010FF0FFF3C +301C2016FF5C2026202520182019201C201DFF08FF0930143015FF3BFF3DFF5B +FF5D30083009300A300B300C300D300E300F30103011FF0B221200B100D70000 +00F7FF1D2260FF1CFF1E22662267221E22342642264000B0203220332103FFE5 +FF0400A200A3FF05FF03FF06FF0AFF2000A72606260525CB25CF25CE25C725C6 +25A125A025B325B225BD25BC203B301221922190219121933013000000000000 +000000000000000000000000000000002208220B2286228722822283222A2229 +000000000000000000000000000000002227222800AC21D221D4220022030000 +0000000000000000000000000000000000000000222022A52312220222072261 +2252226A226B221A223D221D2235222B222C0000000000000000000000000000 +212B2030266F266D266A2020202100B6000000000000000025EF000000000000 +82 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000FF10 +FF11FF12FF13FF14FF15FF16FF17FF18FF190000000000000000000000000000 +FF21FF22FF23FF24FF25FF26FF27FF28FF29FF2AFF2BFF2CFF2DFF2EFF2FFF30 +FF31FF32FF33FF34FF35FF36FF37FF38FF39FF3A000000000000000000000000 +0000FF41FF42FF43FF44FF45FF46FF47FF48FF49FF4AFF4BFF4CFF4DFF4EFF4F +FF50FF51FF52FF53FF54FF55FF56FF57FF58FF59FF5A00000000000000003041 +30423043304430453046304730483049304A304B304C304D304E304F30503051 +30523053305430553056305730583059305A305B305C305D305E305F30603061 +30623063306430653066306730683069306A306B306C306D306E306F30703071 +30723073307430753076307730783079307A307B307C307D307E307F30803081 +30823083308430853086308730883089308A308B308C308D308E308F30903091 +3092309300000000000000000000000000000000000000000000000000000000 +83 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +30A130A230A330A430A530A630A730A830A930AA30AB30AC30AD30AE30AF30B0 +30B130B230B330B430B530B630B730B830B930BA30BB30BC30BD30BE30BF30C0 +30C130C230C330C430C530C630C730C830C930CA30CB30CC30CD30CE30CF30D0 +30D130D230D330D430D530D630D730D830D930DA30DB30DC30DD30DE30DF0000 +30E030E130E230E330E430E530E630E730E830E930EA30EB30EC30ED30EE30EF +30F030F130F230F330F430F530F6000000000000000000000000000000000391 +03920393039403950396039703980399039A039B039C039D039E039F03A003A1 +03A303A403A503A603A703A803A90000000000000000000000000000000003B1 +03B203B303B403B503B603B703B803B903BA03BB03BC03BD03BE03BF03C003C1 +03C303C403C503C603C703C803C9000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +84 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +04100411041204130414041504010416041704180419041A041B041C041D041E +041F0420042104220423042404250426042704280429042A042B042C042D042E +042F000000000000000000000000000000000000000000000000000000000000 +04300431043204330434043504510436043704380439043A043B043C043D0000 +043E043F0440044104420443044404450446044704480449044A044B044C044D +044E044F00000000000000000000000000000000000000000000000000002500 +2502250C251025182514251C252C25242534253C25012503250F2513251B2517 +25232533252B253B254B2520252F25282537253F251D25302525253825420000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +88 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000004E9C +55165A03963F54C0611B632859F690228475831C7A5060AA63E16E2565ED8466 +82A69BF56893572765A162715B9B59D0867B98F47D627DBE9B8E62167C9F88B7 +5B895EB563096697684895C7978D674F4EE54F0A4F4D4F9D504956F2593759D4 +5A015C0960DF610F61706613690570BA754F757079FB7DAD7DEF80C3840E8863 +8B029055907A533B4E954EA557DF80B290C178EF4E0058F16EA290387A328328 +828B9C2F5141537054BD54E156E059FB5F1598F26DEB80E4852D000000000000 +89 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +9662967096A097FB540B53F35B8770CF7FBD8FC296E8536F9D5C7ABA4E117893 +81FC6E26561855046B1D851A9C3B59E553A96D6674DC958F56424E91904B96F2 +834F990C53E155B65B305F71662066F368046C386CF36D29745B76C87A4E9834 +82F1885B8A6092ED6DB275AB76CA99C560A68B018D8A95B2698E53AD51860000 +5712583059445BB45EF6602863A963F46CBF6F14708E7114715971D5733F7E01 +827682D185979060925B9D1B586965BC6C5A752551F9592E59655F805FDC62BC +65FA6A2A6B276BB4738B7FC189569D2C9D0E9EC45CA16C96837B51045C4B61B6 +81C6687672614E594FFA537860696E297A4F97F34E0B53164EEE4F554F3D4FA1 +4F7352A053EF5609590F5AC15BB65BE179D16687679C67B66B4C6CB3706B73C2 +798D79BE7A3C7B8782B182DB8304837783EF83D387668AB256298CA88FE6904E +971E868A4FC45CE862117259753B81E582BD86FE8CC096C5991399D54ECB4F1A +89E356DE584A58CA5EFB5FEB602A6094606261D0621262D06539000000000000 +8A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +9B41666668B06D777070754C76867D7582A587F9958B968E8C9D51F152BE5916 +54B35BB35D16616869826DAF788D84CB88578A7293A79AB86D6C99A886D957A3 +67FF86CE920E5283568754045ED362E164B9683C68386BBB737278BA7A6B899A +89D28D6B8F0390ED95A3969497695B665CB3697D984D984E639B7B206A2B0000 +6A7F68B69C0D6F5F5272559D607062EC6D3B6E076ED1845B89108F444E149C39 +53F6691B6A3A9784682A515C7AC384B291DC938C565B9D286822830584317CA5 +520882C574E64E7E4F8351A05BD2520A52D852E75DFB559A582A59E65B8C5B98 +5BDB5E725E7960A3611F616361BE63DB656267D1685368FA6B3E6B536C576F22 +6F976F4574B0751876E3770B7AFF7BA17C217DE97F367FF0809D8266839E89B3 +8ACC8CAB908494519593959195A2966597D3992882184E38542B5CB85DCC73A9 +764C773C5CA97FEB8D0B96C19811985498584F014F0E5371559C566857FA5947 +5B095BC45C905E0C5E7E5FCC63EE673A65D765E2671F68CB68C4000000000000 +8B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6A5F5E306BC56C176C7D757F79485B637A007D005FBD898F8A188CB48D778ECC +8F1D98E29A0E9B3C4E80507D510059935B9C622F628064EC6B3A72A075917947 +7FA987FB8ABC8B7063AC83CA97A05409540355AB68546A588A70782767759ECD +53745BA2811A865090064E184E454EC74F1153CA54385BAE5F13602565510000 +673D6C426C726CE3707874037A767AAE7B087D1A7CFE7D6665E7725B53BB5C45 +5DE862D262E063196E20865A8A318DDD92F86F0179A69B5A4EA84EAB4EAC4F9B +4FA050D151477AF6517151F653545321537F53EB55AC58835CE15F375F4A602F +6050606D631F65596A4B6CC172C272ED77EF80F881058208854E90F793E197FF +99579A5A4EF051DD5C2D6681696D5C4066F26975738968507C8150C552E45747 +5DFE932665A46B236B3D7434798179BD7B4B7DCA82B983CC887F895F8B398FD1 +91D1541F92804E5D503653E5533A72D7739677E982E68EAF99C699C899D25177 +611A865E55B07A7A50765BD3904796854E326ADB91E75C515C48000000000000 +8C +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +63987A9F6C9397748F617AAA718A96887C8268177E706851936C52F2541B85AB +8A137FA48ECD90E15366888879414FC250BE521151445553572D73EA578B5951 +5F625F8460756176616761A963B2643A656C666F68426E1375667A3D7CFB7D4C +7D997E4B7F6B830E834A86CD8A088A638B668EFD981A9D8F82B88FCE9BE80000 +5287621F64836FC09699684150916B206C7A6F547A747D5088408A2367084EF6 +503950265065517C5238526355A7570F58055ACC5EFA61B261F862F36372691C +6A29727D72AC732E7814786F7D79770C80A9898B8B198CE28ED290639375967A +98559A139E785143539F53B35E7B5F266E1B6E90738473FE7D4382378A008AFA +96504E4E500B53E4547C56FA59D15B645DF15EAB5F276238654567AF6E5672D0 +7CCA88B480A180E183F0864E8A878DE8923796C798679F134E944E924F0D5348 +5449543E5A2F5F8C5FA1609F68A76A8E745A78818A9E8AA48B7791904E5E9BC9 +4EA44F7C4FAF501950165149516C529F52B952FE539A53E35411000000000000 +8D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +540E5589575157A2597D5B545B5D5B8F5DE55DE75DF75E785E835E9A5EB75F18 +6052614C629762D863A7653B6602664366F4676D6821689769CB6C5F6D2A6D69 +6E2F6E9D75327687786C7A3F7CE07D057D187D5E7DB18015800380AF80B18154 +818F822A8352884C88618B1B8CA28CFC90CA91759271783F92FC95A4964D0000 +980599999AD89D3B525B52AB53F7540858D562F76FE08C6A8F5F9EB9514B523B +544A56FD7A4091779D609ED273446F09817075115FFD60DA9AA872DB8FBC6B64 +98034ECA56F0576458BE5A5A606861C7660F6606683968B16DF775D57D3A826E +9B424E9B4F5053C955065D6F5DE65DEE67FB6C99747378028A50939688DF5750 +5EA7632B50B550AC518D670054C9585E59BB5BB05F69624D63A1683D6B736E08 +707D91C7728078157826796D658E7D3083DC88C18F09969B5264572867507F6A +8CA151B45742962A583A698A80B454B25D0E57FC78959DFA4F5C524A548B643E +6628671467F57A847B567D22932F685C9BAD7B395319518A5237000000000000 +8E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5BDF62F664AE64E6672D6BBA85A996D176909BD6634C93069BAB76BF66524E09 +509853C25C7160E864926563685F71E673CA75237B977E8286958B838CDB9178 +991065AC66AB6B8B4ED54ED44F3A4F7F523A53F853F255E356DB58EB59CB59C9 +59FF5B505C4D5E025E2B5FD7601D6307652F5B5C65AF65BD65E8679D6B620000 +6B7B6C0F7345794979C17CF87D197D2B80A2810281F389968A5E8A698A668A8C +8AEE8CC78CDC96CC98FC6B6F4E8B4F3C4F8D51505B575BFA6148630166426B21 +6ECB6CBB723E74BD75D478C1793A800C803381EA84948F9E6C509E7F5F0F8B58 +9D2B7AFA8EF85B8D96EB4E0353F157F759315AC95BA460896E7F6F0675BE8CEA +5B9F85007BE0507267F4829D5C61854A7E1E820E51995C0463688D66659C716E +793E7D1780058B1D8ECA906E86C790AA501F52FA5C3A6753707C7235914C91C8 +932B82E55BC25F3160F94E3B53D65B88624B67316B8A72E973E07A2E816B8DA3 +91529996511253D7546A5BFF63886A397DAC970056DA53CE5468000000000000 +8F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5B975C315DDE4FEE610162FE6D3279C079CB7D427E4D7FD281ED821F84908846 +89728B908E748F2F9031914B916C96C6919C4EC04F4F514553415F93620E67D4 +6C416E0B73637E2691CD928353D459195BBF6DD1795D7E2E7C9B587E719F51FA +88538FF04FCA5CFB662577AC7AE3821C99FF51C65FAA65EC696F6B896DF30000 +6E966F6476FE7D145DE190759187980651E6521D6240669166D96E1A5EB67DD2 +7F7266F885AF85F78AF852A953D959735E8F5F90605592E4966450B7511F52DD +5320534753EC54E8554655315617596859BE5A3C5BB55C065C0F5C115C1A5E84 +5E8A5EE05F70627F628462DB638C63776607660C662D6676677E68A26A1F6A35 +6CBC6D886E096E58713C7126716775C77701785D7901796579F07AE07B117CA7 +7D39809683D6848B8549885D88F38A1F8A3C8A548A738C618CDE91A49266937E +9418969C97984E0A4E084E1E4E575197527057CE583458CC5B225E3860C564FE +676167566D4472B675737A6384B88B7291B89320563157F498FE000000000000 +90 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +62ED690D6B9671ED7E548077827289E698DF87558FB15C3B4F384FE14FB55507 +5A205BDD5BE95FC3614E632F65B0664B68EE699B6D786DF1753375B9771F795E +79E67D3381E382AF85AA89AA8A3A8EAB8F9B903291DD97074EBA4EC152035875 +58EC5C0B751A5C3D814E8A0A8FC59663976D7B258ACF9808916256F353A80000 +9017543957825E2563A86C34708A77617C8B7FE088709042915493109318968F +745E9AC45D075D69657067A28DA896DB636E6749691983C5981796C088FE6F84 +647A5BF84E16702C755D662F51C4523652E259D35F8160276210653F6574661F +667468F268166B636E057272751F76DB7CBE805658F088FD897F8AA08A938ACB +901D91929752975965897A0E810696BB5E2D60DC621A65A56614679077F37A4D +7C4D7E3E810A8CAC8D648DE18E5F78A9520762D963A5644262988A2D7A837BC0 +8AAC96EA7D76820C87494ED95148534353605BA35C025C165DDD6226624764B0 +681368346CC96D456D1767D36F5C714E717D65CB7A7F7BAD7DDA000000000000 +91 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7E4A7FA8817A821B823985A68A6E8CCE8DF59078907792AD929195839BAE524D +55846F387136516879857E5581B37CCE564C58515CA863AA66FE66FD695A72D9 +758F758E790E795679DF7C977D207D4486078A34963B90619F2050E7527553CC +53E2500955AA58EE594F723D5B8B5C64531D60E360F3635C6383633F63BB0000 +64CD65E966F95DE369CD69FD6F1571E54E8975E976F87A937CDF7DCF7D9C8061 +83498358846C84BC85FB88C58D709001906D9397971C9A1250CF5897618E81D3 +85358D0890204FC3507452475373606F6349675F6E2C8DB3901F4FD75C5E8CCA +65CF7D9A53528896517663C35B585B6B5C0A640D6751905C4ED6591A592A6C70 +8A51553E581559A560F0625367C182356955964099C49A284F5358065BFE8010 +5CB15E2F5F856020614B623466FF6CF06EDE80CE817F82D4888B8CB89000902E +968A9EDB9BDB4EE353F059277B2C918D984C9DF96EDD7027535355445B856258 +629E62D36CA26FEF74228A1794386FC18AFE833851E786F853EA000000000000 +92 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +53E94F4690548FB0596A81315DFD7AEA8FBF68DA8C3772F89C486A3D8AB04E39 +53585606576662C563A265E66B4E6DE16E5B70AD77ED7AEF7BAA7DBB803D80C6 +86CB8A95935B56E358C75F3E65AD66966A806BB575378AC7502477E557305F1B +6065667A6C6075F47A1A7F6E81F48718904599B37BC9755C7AF97B5184C40000 +901079E97A9283365AE177404E2D4EF25B995FE062BD663C67F16CE8866B8877 +8A3B914E92F399D06A177026732A82E784578CAF4E01514651CB558B5BF55E16 +5E335E815F145F355F6B5FB461F2631166A2671D6F6E7252753A773A80748139 +817887768ABF8ADC8D858DF3929A957798029CE552C5635776F467156C8873CD +8CC393AE96736D25589C690E69CC8FFD939A75DB901A585A680263B469FB4F43 +6F2C67D88FBB85267DB49354693F6F70576A58F75B2C7D2C722A540A91E39DB4 +4EAD4F4E505C507552438C9E544858245B9A5E1D5E955EAD5EF75F1F608C62B5 +633A63D068AF6C407887798E7A0B7DE082478A028AE68E449013000000000000 +93 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +90B8912D91D89F0E6CE5645864E265756EF476847B1B906993D16EBA54F25FB9 +64A48F4D8FED92445178586B59295C555E976DFB7E8F751C8CBC8EE2985B70B9 +4F1D6BBF6FB1753096FB514E54105835585759AC5C605F926597675C6E21767B +83DF8CED901490FD934D7825783A52AA5EA6571F597460125012515A51AC0000 +51CD520055105854585859575B955CF65D8B60BC6295642D6771684368BC68DF +76D76DD86E6F6D9B706F71C85F5375D879777B497B547B527CD67D7152308463 +856985E48A0E8B048C468E0F9003900F94199676982D9A3095D850CD52D5540C +58025C0E61A7649E6D1E77B37AE580F48404905392855CE09D07533F5F975FB3 +6D9C7279776379BF7BE46BD272EC8AAD68036A6151F87A8169345C4A9CF682EB +5BC59149701E56785C6F60C765666C8C8C5A90419813545166C7920D594890A3 +51854E4D51EA85998B0E7058637A934B696299B47E047577535769608EDF96E3 +6C5D4E8C5C3C5F108FE953028CD1808986795EFF65E54E735165000000000000 +94 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +59825C3F97EE4EFB598A5FCD8A8D6FE179B079625BE78471732B71B15E745FF5 +637B649A71C37C984E435EFC4E4B57DC56A260A96FC37D0D80FD813381BF8FB2 +899786A45DF4628A64AD898767776CE26D3E743678345A467F7582AD99AC4FF3 +5EC362DD63926557676F76C3724C80CC80BA8F29914D500D57F95A9268850000 +6973716472FD8CB758F28CE0966A9019877F79E477E784294F2F5265535A62CD +67CF6CCA767D7B947C95823685848FEB66DD6F2072067E1B83AB99C19EA651FD +7BB178727BB880877B486AE85E61808C75517560516B92626E8C767A91979AEA +4F107F70629C7B4F95A59CE9567A585986E496BC4F345224534A53CD53DB5E06 +642C6591677F6C3E6C4E724872AF73ED75547E41822C85E98CA97BC491C67169 +981298EF633D6669756A76E478D0854386EE532A5351542659835E875F7C60B2 +6249627962AB65906BD46CCC75B276AE789179D87DCB7F7780A588AB8AB98CBB +907F975E98DB6A0B7C3850995C3E5FAE67876BD8743577097F8E000000000000 +95 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +9F3B67CA7A175339758B9AED5F66819D83F180985F3C5FC575627B46903C6867 +59EB5A9B7D10767E8B2C4FF55F6A6A196C376F0274E2796888688A558C795EDF +63CF75C579D282D7932892F2849C86ED9C2D54C15F6C658C6D5C70158CA78CD3 +983B654F74F64E0D4ED857E0592B5A665BCC51A85E035E9C6016627665770000 +65A7666E6D6E72367B268150819A82998B5C8CA08CE68D74961C96444FAE64AB +6B66821E8461856A90E85C01695398A8847A85574F0F526F5FA95E45670D798F +8179890789866DF55F1762556CB84ECF72699B925206543B567458B361A4626E +711A596E7C897CDE7D1B96F06587805E4E194F75517558405E635E735F0A67C4 +4E26853D9589965B7C73980150FB58C1765678A7522577A585117B86504F5909 +72477BC77DE88FBA8FD4904D4FBF52C95A295F0197AD4FDD821792EA57036355 +6B69752B88DC8F147A4252DF58936155620A66AE6BCD7C3F83E950234FF85305 +5446583159495B9D5CF05CEF5D295E9662B16367653E65B9670B000000000000 +96 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6CD56CE170F978327E2B80DE82B3840C84EC870289128A2A8C4A90A692D298FD +9CF39D6C4E4F4EA1508D5256574A59A85E3D5FD85FD9623F66B4671B67D068D2 +51927D2180AA81A88B008C8C8CBF927E96325420982C531750D5535C58A864B2 +6734726777667A4691E652C36CA16B8658005E4C5954672C7FFB51E176C60000 +646978E89B549EBB57CB59B96627679A6BCE54E969D95E55819C67959BAA67FE +9C52685D4EA64FE353C862B9672B6CAB8FC44FAD7E6D9EBF4E0761626E806F2B +85135473672A9B455DF37B955CAC5BC6871C6E4A84D17A14810859997C8D6C11 +772052D959227121725F77DB97279D61690B5A7F5A1851A5540D547D660E76DF +8FF792989CF459EA725D6EC5514D68C97DBF7DEC97629EBA64786A2183025984 +5B5F6BDB731B76F27DB280178499513267289ED976EE676252FF99055C24623B +7C7E8CB0554F60B67D0B958053014E5F51B6591C723A803691CE5F2577E25384 +5F797D0485AC8A338E8D975667F385AE9453610961086CB9765200000000FF5E +97 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8AED8F38552F4F51512A52C753CB5BA55E7D60A0618263D6670967DA6E676D8C +733673377531795088D58A98904A909190F596C4878D59154E884F594E0E8A89 +8F3F981050AD5E7C59965BB95EB863DA63FA64C166DC694A69D86D0B6EB67194 +75287AAF7F8A8000844984C989818B218E0A9065967D990A617E62916B320000 +6C836D747FCC7FFC6DC07F8587BA88F8676583B1983C96F76D1B7D61843D916A +4E7153755D506B046FEB85CD862D89A75229540F5C65674E68A87406748375E2 +88CF88E191CC96E296785F8B73877ACB844E63A0756552896D416E9C74097559 +786B7C9296867ADC9F8D4FB6616E65C5865C4E864EAE50DA4E2151CC5BEE6599 +68816DBC731F764277AD7A1C7CE7826F8AD2907C91CF96759818529B7DD1502B +539867976DCB71D0743381E88F2A96A39C579E9F746058416D997D2F985E4EE4 +4F364F8B51B752B15DBA601C73B2793C82D3923496B796F6970A9E979F6266A6 +6B74521752A370C888C25EC9604B61906F2371497C3E7DF4806F000000000000 +98 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +84EE9023932C54429B6F6AD370898CC28DEF973252B45A415ECA5F046717697C +69946D6A6F0F726272FC7BED8001807E874B90CE516D9E937984808B93328AD6 +502D548C8A716B6A8CC4810760D167A09DF24E994E989C108A6B85C185686900 +6E7E789781550000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000005F0C +4E104E154E2A4E314E364E3C4E3F4E424E564E584E824E858C6B4E8A82125F0D +4E8E4E9E4E9F4EA04EA24EB04EB34EB64ECE4ECD4EC44EC64EC24ED74EDE4EED +4EDF4EF74F094F5A4F304F5B4F5D4F574F474F764F884F8F4F984F7B4F694F70 +4F914F6F4F864F9651184FD44FDF4FCE4FD84FDB4FD14FDA4FD04FE44FE5501A +50285014502A502550054F1C4FF650215029502C4FFE4FEF5011500650435047 +6703505550505048505A5056506C50785080509A508550B450B2000000000000 +99 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +50C950CA50B350C250D650DE50E550ED50E350EE50F950F55109510151025116 +51155114511A5121513A5137513C513B513F51405152514C515451627AF85169 +516A516E5180518256D8518C5189518F519151935195519651A451A651A251A9 +51AA51AB51B351B151B251B051B551BD51C551C951DB51E0865551E951ED0000 +51F051F551FE5204520B5214520E5227522A522E52335239524F5244524B524C +525E5254526A527452695273527F527D528D529452925271528852918FA88FA7 +52AC52AD52BC52B552C152CD52D752DE52E352E698ED52E052F352F552F852F9 +530653087538530D5310530F5315531A5323532F533153335338534053465345 +4E175349534D51D6535E5369536E5918537B53775382539653A053A653A553AE +53B053B653C37C1296D953DF66FC71EE53EE53E853ED53FA5401543D5440542C +542D543C542E54365429541D544E548F5475548E545F5471547754705492547B +5480547654845490548654C754A254B854A554AC54C454C854A8000000000000 +9A +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +54AB54C254A454BE54BC54D854E554E6550F551454FD54EE54ED54FA54E25539 +55405563554C552E555C55455556555755385533555D5599558054AF558A559F +557B557E5598559E55AE557C558355A9558755A855DA55C555DF55C455DC55E4 +55D4561455F7561655FE55FD561B55F9564E565071DF56345636563256380000 +566B5664562F566C566A56865680568A56A05694568F56A556AE56B656B456C2 +56BC56C156C356C056C856CE56D156D356D756EE56F9570056FF570457095708 +570B570D57135718571655C7571C572657375738574E573B5740574F576957C0 +57885761577F5789579357A057B357A457AA57B057C357C657D457D257D3580A +57D657E3580B5819581D587258215862584B58706BC05852583D5879588558B9 +589F58AB58BA58DE58BB58B858AE58C558D358D158D758D958D858E558DC58E4 +58DF58EF58FA58F958FB58FC58FD5902590A5910591B68A65925592C592D5932 +5938593E7AD259555950594E595A5958596259605967596C5969000000000000 +9B +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +59785981599D4F5E4FAB59A359B259C659E859DC598D59D959DA5A255A1F5A11 +5A1C5A095A1A5A405A6C5A495A355A365A625A6A5A9A5ABC5ABE5ACB5AC25ABD +5AE35AD75AE65AE95AD65AFA5AFB5B0C5B0B5B165B325AD05B2A5B365B3E5B43 +5B455B405B515B555B5A5B5B5B655B695B705B735B755B7865885B7A5B800000 +5B835BA65BB85BC35BC75BC95BD45BD05BE45BE65BE25BDE5BE55BEB5BF05BF6 +5BF35C055C075C085C0D5C135C205C225C285C385C395C415C465C4E5C535C50 +5C4F5B715C6C5C6E4E625C765C795C8C5C915C94599B5CAB5CBB5CB65CBC5CB7 +5CC55CBE5CC75CD95CE95CFD5CFA5CED5D8C5CEA5D0B5D155D175D5C5D1F5D1B +5D115D145D225D1A5D195D185D4C5D525D4E5D4B5D6C5D735D765D875D845D82 +5DA25D9D5DAC5DAE5DBD5D905DB75DBC5DC95DCD5DD35DD25DD65DDB5DEB5DF2 +5DF55E0B5E1A5E195E115E1B5E365E375E445E435E405E4E5E575E545E5F5E62 +5E645E475E755E765E7A9EBC5E7F5EA05EC15EC25EC85ED05ECF000000000000 +9C +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +5ED65EE35EDD5EDA5EDB5EE25EE15EE85EE95EEC5EF15EF35EF05EF45EF85EFE +5F035F095F5D5F5C5F0B5F115F165F295F2D5F385F415F485F4C5F4E5F2F5F51 +5F565F575F595F615F6D5F735F775F835F825F7F5F8A5F885F915F875F9E5F99 +5F985FA05FA85FAD5FBC5FD65FFB5FE45FF85FF15FDD60B35FFF602160600000 +601960106029600E6031601B6015602B6026600F603A605A6041606A6077605F +604A6046604D6063604360646042606C606B60596081608D60E76083609A6084 +609B60966097609260A7608B60E160B860E060D360B45FF060BD60C660B560D8 +614D6115610660F660F7610060F460FA6103612160FB60F1610D610E6147613E +61286127614A613F613C612C6134613D614261446173617761586159615A616B +6174616F61656171615F615D6153617561996196618761AC6194619A618A6191 +61AB61AE61CC61CA61C961F761C861C361C661BA61CB7F7961CD61E661E361F6 +61FA61F461FF61FD61FC61FE620062086209620D620C6214621B000000000000 +9D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +621E6221622A622E6230623262336241624E625E6263625B62606268627C6282 +6289627E62926293629662D46283629462D762D162BB62CF62FF62C664D462C8 +62DC62CC62CA62C262C7629B62C9630C62EE62F163276302630862EF62F56350 +633E634D641C634F6396638E638063AB637663A3638F6389639F63B5636B0000 +636963BE63E963C063C663E363C963D263F663C4641664346406641364266436 +651D64176428640F6467646F6476644E652A6495649364A564A9648864BC64DA +64D264C564C764BB64D864C264F164E7820964E064E162AC64E364EF652C64F6 +64F464F264FA650064FD6518651C650565246523652B65346535653765366538 +754B654865566555654D6558655E655D65726578658265838B8A659B659F65AB +65B765C365C665C165C465CC65D265DB65D965E065E165F16772660A660365FB +6773663566366634661C664F664466496641665E665D666466676668665F6662 +667066836688668E668966846698669D66C166B966C966BE66BC000000000000 +9E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +66C466B866D666DA66E0663F66E666E966F066F566F7670F6716671E67266727 +9738672E673F67366741673867376746675E67606759676367646789677067A9 +677C676A678C678B67A667A1678567B767EF67B467EC67B367E967B867E467DE +67DD67E267EE67B967CE67C667E76A9C681E684668296840684D6832684E0000 +68B3682B685968636877687F689F688F68AD6894689D689B68836AAE68B96874 +68B568A068BA690F688D687E690168CA690868D86922692668E1690C68CD68D4 +68E768D569366912690468D768E3692568F968E068EF6928692A691A69236921 +68C669796977695C6978696B6954697E696E69396974693D695969306961695E +695D6981696A69B269AE69D069BF69C169D369BE69CE5BE869CA69DD69BB69C3 +69A76A2E699169A0699C699569B469DE69E86A026A1B69FF6B0A69F969F269E7 +6A0569B16A1E69ED6A1469EB6A0A6A126AC16A236A136A446A0C6A726A366A78 +6A476A626A596A666A486A386A226A906A8D6AA06A846AA26AA3000000000000 +9F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6A9786176ABB6AC36AC26AB86AB36AAC6ADE6AD16ADF6AAA6ADA6AEA6AFB6B05 +86166AFA6B126B169B316B1F6B386B3776DC6B3998EE6B476B436B496B506B59 +6B546B5B6B5F6B616B786B796B7F6B806B846B836B8D6B986B956B9E6BA46BAA +6BAB6BAF6BB26BB16BB36BB76BBC6BC66BCB6BD36BDF6BEC6BEB6BF36BEF0000 +9EBE6C086C136C146C1B6C246C236C5E6C556C626C6A6C826C8D6C9A6C816C9B +6C7E6C686C736C926C906CC46CF16CD36CBD6CD76CC56CDD6CAE6CB16CBE6CBA +6CDB6CEF6CD96CEA6D1F884D6D366D2B6D3D6D386D196D356D336D126D0C6D63 +6D936D646D5A6D796D596D8E6D956FE46D856DF96E156E0A6DB56DC76DE66DB8 +6DC66DEC6DDE6DCC6DE86DD26DC56DFA6DD96DE46DD56DEA6DEE6E2D6E6E6E2E +6E196E726E5F6E3E6E236E6B6E2B6E766E4D6E1F6E436E3A6E4E6E246EFF6E1D +6E386E826EAA6E986EC96EB76ED36EBD6EAF6EC46EB26ED46ED56E8F6EA56EC2 +6E9F6F416F11704C6EEC6EF86EFE6F3F6EF26F316EEF6F326ECC000000000000 +E0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +6F3E6F136EF76F866F7A6F786F816F806F6F6F5B6FF36F6D6F826F7C6F586F8E +6F916FC26F666FB36FA36FA16FA46FB96FC66FAA6FDF6FD56FEC6FD46FD86FF1 +6FEE6FDB7009700B6FFA70117001700F6FFE701B701A6F74701D7018701F7030 +703E7032705170637099709270AF70F170AC70B870B370AE70DF70CB70DD0000 +70D9710970FD711C711971657155718871667162714C7156716C718F71FB7184 +719571A871AC71D771B971BE71D271C971D471CE71E071EC71E771F571FC71F9 +71FF720D7210721B7228722D722C72307232723B723C723F72407246724B7258 +7274727E7282728172877292729672A272A772B972B272C372C672C472CE72D2 +72E272E072E172F972F7500F7317730A731C7316731D7334732F73297325733E +734E734F9ED87357736A7368737073787375737B737A73C873B373CE73BB73C0 +73E573EE73DE74A27405746F742573F87432743A7455743F745F74597441745C +746974707463746A7476747E748B749E74A774CA74CF74D473F1000000000000 +E1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +74E074E374E774E974EE74F274F074F174F874F7750475037505750C750E750D +75157513751E7526752C753C7544754D754A7549755B7546755A756975647567 +756B756D75787576758675877574758A758975827594759A759D75A575A375C2 +75B375C375B575BD75B875BC75B175CD75CA75D275D975E375DE75FE75FF0000 +75FC760175F075FA75F275F3760B760D7609761F762776207621762276247634 +7630763B764776487646765C76587661766276687669766A7667766C76707672 +76767678767C768076837688768B768E769676937699769A76B076B476B876B9 +76BA76C276CD76D676D276DE76E176E576E776EA862F76FB7708770777047729 +7724771E77257726771B773777387747775A7768776B775B7765777F777E7779 +778E778B779177A0779E77B077B677B977BF77BC77BD77BB77C777CD77D777DA +77DC77E377EE77FC780C781279267820792A7845788E78747886787C789A788C +78A378B578AA78AF78D178C678CB78D478BE78BC78C578CA78EC000000000000 +E2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +78E778DA78FD78F47907791279117919792C792B794079607957795F795A7955 +7953797A797F798A799D79A79F4B79AA79AE79B379B979BA79C979D579E779EC +79E179E37A087A0D7A187A197A207A1F79807A317A3B7A3E7A377A437A577A49 +7A617A627A699F9D7A707A797A7D7A887A977A957A987A967AA97AC87AB00000 +7AB67AC57AC47ABF90837AC77ACA7ACD7ACF7AD57AD37AD97ADA7ADD7AE17AE2 +7AE67AED7AF07B027B0F7B0A7B067B337B187B197B1E7B357B287B367B507B7A +7B047B4D7B0B7B4C7B457B757B657B747B677B707B717B6C7B6E7B9D7B987B9F +7B8D7B9C7B9A7B8B7B927B8F7B5D7B997BCB7BC17BCC7BCF7BB47BC67BDD7BE9 +7C117C147BE67BE57C607C007C077C137BF37BF77C177C0D7BF67C237C277C2A +7C1F7C377C2B7C3D7C4C7C437C547C4F7C407C507C587C5F7C647C567C657C6C +7C757C837C907CA47CAD7CA27CAB7CA17CA87CB37CB27CB17CAE7CB97CBD7CC0 +7CC57CC27CD87CD27CDC7CE29B3B7CEF7CF27CF47CF67CFA7D06000000000000 +E3 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +7D027D1C7D157D0A7D457D4B7D2E7D327D3F7D357D467D737D567D4E7D727D68 +7D6E7D4F7D637D937D897D5B7D8F7D7D7D9B7DBA7DAE7DA37DB57DC77DBD7DAB +7E3D7DA27DAF7DDC7DB87D9F7DB07DD87DDD7DE47DDE7DFB7DF27DE17E057E0A +7E237E217E127E317E1F7E097E0B7E227E467E667E3B7E357E397E437E370000 +7E327E3A7E677E5D7E567E5E7E597E5A7E797E6A7E697E7C7E7B7E837DD57E7D +8FAE7E7F7E887E897E8C7E927E907E937E947E967E8E7E9B7E9C7F387F3A7F45 +7F4C7F4D7F4E7F507F517F557F547F587F5F7F607F687F697F677F787F827F86 +7F837F887F877F8C7F947F9E7F9D7F9A7FA37FAF7FB27FB97FAE7FB67FB88B71 +7FC57FC67FCA7FD57FD47FE17FE67FE97FF37FF998DC80068004800B80128018 +8019801C80218028803F803B804A804680528058805A805F8062806880738072 +807080768079807D807F808480868085809B8093809A80AD519080AC80DB80E5 +80D980DD80C480DA80D6810980EF80F1811B81298123812F814B000000000000 +E4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +968B8146813E8153815180FC8171816E81658166817481838188818A81808182 +81A0819581A481A3815F819381A981B081B581BE81B881BD81C081C281BA81C9 +81CD81D181D981D881C881DA81DF81E081E781FA81FB81FE8201820282058207 +820A820D821082168229822B82388233824082598258825D825A825F82640000 +82628268826A826B822E827182778278827E828D829282AB829F82BB82AC82E1 +82E382DF82D282F482F382FA8393830382FB82F982DE830682DC830982D98335 +83348316833283318340833983508345832F832B831783188385839A83AA839F +83A283968323838E8387838A837C83B58373837583A0838983A883F4841383EB +83CE83FD840383D8840B83C183F7840783E083F2840D8422842083BD84388506 +83FB846D842A843C855A84848477846B84AD846E848284698446842C846F8479 +843584CA846284B984BF849F84D984CD84BB84DA84D084C184C684D684A18521 +84FF84F485178518852C851F8515851484FC8540856385588548000000000000 +E5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +85418602854B8555858085A485888591858A85A8856D8594859B85EA8587859C +8577857E859085C985BA85CF85B985D085D585DD85E585DC85F9860A8613860B +85FE85FA86068622861A8630863F864D4E558654865F86678671869386A386A9 +86AA868B868C86B686AF86C486C686B086C9882386AB86D486DE86E986EC0000 +86DF86DB86EF8712870687088700870386FB87118709870D86F9870A8734873F +8737873B87258729871A8760875F8778874C874E877487578768876E87598753 +8763876A880587A2879F878287AF87CB87BD87C087D096D687AB87C487B387C7 +87C687BB87EF87F287E0880F880D87FE87F687F7880E87D28811881688158822 +88218831883688398827883B8844884288528859885E8862886B8881887E889E +8875887D88B5887288828897889288AE889988A2888D88A488B088BF88B188C3 +88C488D488D888D988DD88F9890288FC88F488E888F28904890C890A89138943 +891E8925892A892B89418944893B89368938894C891D8960895E000000000000 +E6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +89668964896D896A896F89748977897E89838988898A8993899889A189A989A6 +89AC89AF89B289BA89BD89BF89C089DA89DC89DD89E789F489F88A038A168A10 +8A0C8A1B8A1D8A258A368A418A5B8A528A468A488A7C8A6D8A6C8A628A858A82 +8A848AA88AA18A918AA58AA68A9A8AA38AC48ACD8AC28ADA8AEB8AF38AE70000 +8AE48AF18B148AE08AE28AF78ADE8ADB8B0C8B078B1A8AE18B168B108B178B20 +8B3397AB8B268B2B8B3E8B288B418B4C8B4F8B4E8B498B568B5B8B5A8B6B8B5F +8B6C8B6F8B748B7D8B808B8C8B8E8B928B938B968B998B9A8C3A8C418C3F8C48 +8C4C8C4E8C508C558C628C6C8C788C7A8C828C898C858C8A8C8D8C8E8C948C7C +8C98621D8CAD8CAA8CBD8CB28CB38CAE8CB68CC88CC18CE48CE38CDA8CFD8CFA +8CFB8D048D058D0A8D078D0F8D0D8D109F4E8D138CCD8D148D168D678D6D8D71 +8D738D818D998DC28DBE8DBA8DCF8DDA8DD68DCC8DDB8DCB8DEA8DEB8DDF8DE3 +8DFC8E088E098DFF8E1D8E1E8E108E1F8E428E358E308E348E4A000000000000 +E7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +8E478E498E4C8E508E488E598E648E608E2A8E638E558E768E728E7C8E818E87 +8E858E848E8B8E8A8E938E918E948E998EAA8EA18EAC8EB08EC68EB18EBE8EC5 +8EC88ECB8EDB8EE38EFC8EFB8EEB8EFE8F0A8F058F158F128F198F138F1C8F1F +8F1B8F0C8F268F338F3B8F398F458F428F3E8F4C8F498F468F4E8F578F5C0000 +8F628F638F648F9C8F9F8FA38FAD8FAF8FB78FDA8FE58FE28FEA8FEF90878FF4 +90058FF98FFA901190159021900D901E9016900B90279036903590398FF8904F +905090519052900E9049903E90569058905E9068906F907696A890729082907D +90819080908A9089908F90A890AF90B190B590E290E4624890DB910291129119 +91329130914A9156915891639165916991739172918B9189918291A291AB91AF +91AA91B591B491BA91C091C191C991CB91D091D691DF91E191DB91FC91F591F6 +921E91FF9214922C92159211925E925792459249926492489295923F924B9250 +929C92969293929B925A92CF92B992B792E9930F92FA9344932E000000000000 +E8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +93199322931A9323933A9335933B935C9360937C936E935693B093AC93AD9394 +93B993D693D793E893E593D893C393DD93D093C893E4941A9414941394039407 +94109436942B94359421943A944194529444945B94609462945E946A92299470 +94759477947D945A947C947E9481947F95829587958A95949596959895990000 +95A095A895A795AD95BC95BB95B995BE95CA6FF695C395CD95CC95D595D495D6 +95DC95E195E595E296219628962E962F9642964C964F964B9677965C965E965D +965F96669672966C968D96989695969796AA96A796B196B296B096B496B696B8 +96B996CE96CB96C996CD894D96DC970D96D596F99704970697089713970E9711 +970F971697199724972A97309739973D973E97449746974897429749975C9760 +97649766976852D2976B977197799785977C9781977A9786978B978F9790979C +97A897A697A397B397B497C397C697C897CB97DC97ED9F4F97F27ADF97F697F5 +980F980C9838982498219837983D9846984F984B986B986F9870000000000000 +E9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +98719874987398AA98AF98B198B698C498C398C698E998EB9903990999129914 +99189921991D991E99249920992C992E993D993E9942994999459950994B9951 +9952994C99559997999899A599AD99AE99BC99DF99DB99DD99D899D199ED99EE +99F199F299FB99F89A019A0F9A0599E29A199A2B9A379A459A429A409A430000 +9A3E9A559A4D9A5B9A579A5F9A629A659A649A699A6B9A6A9AAD9AB09ABC9AC0 +9ACF9AD19AD39AD49ADE9ADF9AE29AE39AE69AEF9AEB9AEE9AF49AF19AF79AFB +9B069B189B1A9B1F9B229B239B259B279B289B299B2A9B2E9B2F9B329B449B43 +9B4F9B4D9B4E9B519B589B749B939B839B919B969B979B9F9BA09BA89BB49BC0 +9BCA9BB99BC69BCF9BD19BD29BE39BE29BE49BD49BE19C3A9BF29BF19BF09C15 +9C149C099C139C0C9C069C089C129C0A9C049C2E9C1B9C259C249C219C309C47 +9C329C469C3E9C5A9C609C679C769C789CE79CEC9CF09D099D089CEB9D039D06 +9D2A9D269DAF9D239D1F9D449D159D129D419D3F9D3E9D469D48000000000000 +EA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +9D5D9D5E9D649D519D509D599D729D899D879DAB9D6F9D7A9D9A9DA49DA99DB2 +9DC49DC19DBB9DB89DBA9DC69DCF9DC29DD99DD39DF89DE69DED9DEF9DFD9E1A +9E1B9E1E9E759E799E7D9E819E889E8B9E8C9E929E959E919E9D9EA59EA99EB8 +9EAA9EAD97619ECC9ECE9ECF9ED09ED49EDC9EDE9EDD9EE09EE59EE89EEF0000 +9EF49EF69EF79EF99EFB9EFC9EFD9F079F0876B79F159F219F2C9F3E9F4A9F52 +9F549F639F5F9F609F619F669F679F6C9F6A9F779F729F769F959F9C9FA0582F +69C79059746451DC719900000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +R +8160 301C FF5E +8161 2016 2225 +817C 2212 FF0D +8191 00A2 FFE0 +8192 00A3 FFE1 +81CA 00AC FFE2 diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/symbol.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/symbol.enc new file mode 100644 index 00000000..ffda9e3e --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/symbol.enc @@ -0,0 +1,20 @@ +# Encoding file: symbol, single-byte +S +003F 1 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002122000023220300250026220D002800292217002B002C2212002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +22450391039203A70394039503A603930397039903D1039A039B039C039D039F +03A0039803A103A303A403A503C203A9039E03A80396005B2234005D22A5005F +F8E503B103B203C703B403B503C603B303B703B903D503BA03BB03BC03BD03BF +03C003B803C103C303C403C503D603C903BE03C803B6007B007C007D223C007F +0080008100820083008400850086008700880089008A008B008C008D008E008F +0090009100920093009400950096009700980099009A009B009C009D009E009F +000003D2203222642044221E0192266326662665266021942190219121922193 +00B000B12033226500D7221D2202202200F72260226122482026F8E6F8E721B5 +21352111211C21182297229522052229222A2283228722842282228622082209 +2220220700AE00A92122220F221A22C500AC2227222821D421D021D121D221D3 +22C42329F8E8F8E9F8EA2211F8EBF8ECF8EDF8EEF8EFF8F0F8F1F8F2F8F3F8F4 +F8FF232A222B2320F8F52321F8F6F8F7F8F8F8F9F8FAF8FBF8FCF8FDF8FE0000 diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/tis-620.enc b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/tis-620.enc new file mode 100644 index 00000000..c233be5d --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/encoding/tis-620.enc @@ -0,0 +1,20 @@ +# Encoding file: tis-620, single-byte +S +003F 0 1 +00 +0000000100020003000400050006000700080009000A000B000C000D000E000F +0010001100120013001400150016001700180019001A001B001C001D001E001F +0020002100220023002400250026002700280029002A002B002C002D002E002F +0030003100320033003400350036003700380039003A003B003C003D003E003F +0040004100420043004400450046004700480049004A004B004C004D004E004F +0050005100520053005400550056005700580059005A005B005C005D005E005F +0060006100620063006400650066006700680069006A006B006C006D006E006F +0070007100720073007400750076007700780079007A007B007C007D007E0000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00000E010E020E030E040E050E060E070E080E090E0A0E0B0E0C0E0D0E0E0E0F +0E100E110E120E130E140E150E160E170E180E190E1A0E1B0E1C0E1D0E1E0E1F +0E200E210E220E230E240E250E260E270E280E290E2A0E2B0E2C0E2D0E2E0E2F +0E300E310E320E330E340E350E360E370E380E390E3A00000000000000000E3F +0E400E410E420E430E440E450E460E470E480E490E4A0E4B0E4C0E4D0E4E0E4F +0E500E510E520E530E540E550E560E570E580E590E5A0E5B0000000000000000 \ No newline at end of file diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/history.tcl b/extensions/fablabchemnitz/inkstitch/bin/tcl/history.tcl new file mode 100644 index 00000000..888d1445 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/history.tcl @@ -0,0 +1,373 @@ +# history.tcl -- +# +# Implementation of the history command. +# +# Copyright (c) 1997 Sun Microsystems, Inc. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. +# + +# The tcl::history array holds the history list and +# some additional bookkeeping variables. +# +# nextid the index used for the next history list item. +# keep the max size of the history list +# oldest the index of the oldest item in the history. + +namespace eval tcl { + variable history + if {![info exists history]} { + array set history { + nextid 0 + keep 20 + oldest -20 + } + } +} + +# history -- +# +# This is the main history command. See the man page for its interface. +# This does argument checking and calls helper procedures in the +# history namespace. + +proc history {args} { + set len [llength $args] + if {$len == 0} { + return [tcl::HistInfo] + } + set key [lindex $args 0] + set options "add, change, clear, event, info, keep, nextid, or redo" + switch -glob -- $key { + a* { # history add + + if {$len > 3} { + return -code error "wrong # args: should be \"history add event ?exec?\"" + } + if {![string match $key* add]} { + return -code error "bad option \"$key\": must be $options" + } + if {$len == 3} { + set arg [lindex $args 2] + if {! ([string match e* $arg] && [string match $arg* exec])} { + return -code error "bad argument \"$arg\": should be \"exec\"" + } + } + return [tcl::HistAdd [lindex $args 1] [lindex $args 2]] + } + ch* { # history change + + if {($len > 3) || ($len < 2)} { + return -code error "wrong # args: should be \"history change newValue ?event?\"" + } + if {![string match $key* change]} { + return -code error "bad option \"$key\": must be $options" + } + if {$len == 2} { + set event 0 + } else { + set event [lindex $args 2] + } + + return [tcl::HistChange [lindex $args 1] $event] + } + cl* { # history clear + + if {($len > 1)} { + return -code error "wrong # args: should be \"history clear\"" + } + if {![string match $key* clear]} { + return -code error "bad option \"$key\": must be $options" + } + return [tcl::HistClear] + } + e* { # history event + + if {$len > 2} { + return -code error "wrong # args: should be \"history event ?event?\"" + } + if {![string match $key* event]} { + return -code error "bad option \"$key\": must be $options" + } + if {$len == 1} { + set event -1 + } else { + set event [lindex $args 1] + } + return [tcl::HistEvent $event] + } + i* { # history info + + if {$len > 2} { + return -code error "wrong # args: should be \"history info ?count?\"" + } + if {![string match $key* info]} { + return -code error "bad option \"$key\": must be $options" + } + return [tcl::HistInfo [lindex $args 1]] + } + k* { # history keep + + if {$len > 2} { + return -code error "wrong # args: should be \"history keep ?count?\"" + } + if {$len == 1} { + return [tcl::HistKeep] + } else { + set limit [lindex $args 1] + if {[catch {expr {~$limit}}] || ($limit < 0)} { + return -code error "illegal keep count \"$limit\"" + } + return [tcl::HistKeep $limit] + } + } + n* { # history nextid + + if {$len > 1} { + return -code error "wrong # args: should be \"history nextid\"" + } + if {![string match $key* nextid]} { + return -code error "bad option \"$key\": must be $options" + } + return [expr {$tcl::history(nextid) + 1}] + } + r* { # history redo + + if {$len > 2} { + return -code error "wrong # args: should be \"history redo ?event?\"" + } + if {![string match $key* redo]} { + return -code error "bad option \"$key\": must be $options" + } + return [tcl::HistRedo [lindex $args 1]] + } + default { + return -code error "bad option \"$key\": must be $options" + } + } +} + +# tcl::HistAdd -- +# +# Add an item to the history, and optionally eval it at the global scope +# +# Parameters: +# command the command to add +# exec (optional) a substring of "exec" causes the +# command to be evaled. +# Results: +# If executing, then the results of the command are returned +# +# Side Effects: +# Adds to the history list + + proc tcl::HistAdd {command {exec {}}} { + variable history + + # Do not add empty commands to the history + if {[string trim $command] eq ""} { + return "" + } + + set i [incr history(nextid)] + set history($i) $command + set j [incr history(oldest)] + unset -nocomplain history($j) + if {[string match e* $exec]} { + return [uplevel #0 $command] + } else { + return {} + } +} + +# tcl::HistKeep -- +# +# Set or query the limit on the length of the history list +# +# Parameters: +# limit (optional) the length of the history list +# +# Results: +# If no limit is specified, the current limit is returned +# +# Side Effects: +# Updates history(keep) if a limit is specified + + proc tcl::HistKeep {{limit {}}} { + variable history + if {$limit eq ""} { + return $history(keep) + } else { + set oldold $history(oldest) + set history(oldest) [expr {$history(nextid) - $limit}] + for {} {$oldold <= $history(oldest)} {incr oldold} { + unset -nocomplain history($oldold) + } + set history(keep) $limit + } +} + +# tcl::HistClear -- +# +# Erase the history list +# +# Parameters: +# none +# +# Results: +# none +# +# Side Effects: +# Resets the history array, except for the keep limit + + proc tcl::HistClear {} { + variable history + set keep $history(keep) + unset history + array set history [list \ + nextid 0 \ + keep $keep \ + oldest -$keep \ + ] +} + +# tcl::HistInfo -- +# +# Return a pretty-printed version of the history list +# +# Parameters: +# num (optional) the length of the history list to return +# +# Results: +# A formatted history list + + proc tcl::HistInfo {{num {}}} { + variable history + if {$num eq ""} { + set num [expr {$history(keep) + 1}] + } + set result {} + set newline "" + for {set i [expr {$history(nextid) - $num + 1}]} \ + {$i <= $history(nextid)} {incr i} { + if {![info exists history($i)]} { + continue + } + set cmd [string map [list \n \n\t] [string trimright $history($i) \ \n]] + append result $newline[format "%6d %s" $i $cmd] + set newline \n + } + return $result +} + +# tcl::HistRedo -- +# +# Fetch the previous or specified event, execute it, and then +# replace the current history item with that event. +# +# Parameters: +# event (optional) index of history item to redo. Defaults to -1, +# which means the previous event. +# +# Results: +# Those of the command being redone. +# +# Side Effects: +# Replaces the current history list item with the one being redone. + + proc tcl::HistRedo {{event -1}} { + variable history + if {$event eq ""} { + set event -1 + } + set i [HistIndex $event] + if {$i == $history(nextid)} { + return -code error "cannot redo the current event" + } + set cmd $history($i) + HistChange $cmd 0 + uplevel #0 $cmd +} + +# tcl::HistIndex -- +# +# Map from an event specifier to an index in the history list. +# +# Parameters: +# event index of history item to redo. +# If this is a positive number, it is used directly. +# If it is a negative number, then it counts back to a previous +# event, where -1 is the most recent event. +# A string can be matched, either by being the prefix of +# a command or by matching a command with string match. +# +# Results: +# The index into history, or an error if the index didn't match. + + proc tcl::HistIndex {event} { + variable history + if {[catch {expr {~$event}}]} { + for {set i [expr {$history(nextid)-1}]} {[info exists history($i)]} \ + {incr i -1} { + if {[string match $event* $history($i)]} { + return $i; + } + if {[string match $event $history($i)]} { + return $i; + } + } + return -code error "no event matches \"$event\"" + } elseif {$event <= 0} { + set i [expr {$history(nextid) + $event}] + } else { + set i $event + } + if {$i <= $history(oldest)} { + return -code error "event \"$event\" is too far in the past" + } + if {$i > $history(nextid)} { + return -code error "event \"$event\" hasn't occured yet" + } + return $i +} + +# tcl::HistEvent -- +# +# Map from an event specifier to the value in the history list. +# +# Parameters: +# event index of history item to redo. See index for a +# description of possible event patterns. +# +# Results: +# The value from the history list. + + proc tcl::HistEvent {event} { + variable history + set i [HistIndex $event] + if {[info exists history($i)]} { + return [string trimright $history($i) \ \n] + } else { + return ""; + } +} + +# tcl::HistChange -- +# +# Replace a value in the history list. +# +# Parameters: +# cmd The new value to put into the history list. +# event (optional) index of history item to redo. See index for a +# description of possible event patterns. This defaults +# to 0, which specifies the current event. +# +# Side Effects: +# Changes the history list. + + proc tcl::HistChange {cmd {event 0}} { + variable history + set i [HistIndex $event] + set history($i) $cmd +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/http1.0/http.tcl b/extensions/fablabchemnitz/inkstitch/bin/tcl/http1.0/http.tcl new file mode 100644 index 00000000..8041ee47 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/http1.0/http.tcl @@ -0,0 +1,377 @@ +# http.tcl +# Client-side HTTP for GET, POST, and HEAD commands. +# These routines can be used in untrusted code that uses the Safesock +# security policy. +# These procedures use a callback interface to avoid using vwait, +# which is not defined in the safe base. +# +# See the http.n man page for documentation + +package provide http 1.0 + +array set http { + -accept */* + -proxyhost {} + -proxyport {} + -useragent {Tcl http client package 1.0} + -proxyfilter httpProxyRequired +} +proc http_config {args} { + global http + set options [lsort [array names http -*]] + set usage [join $options ", "] + if {[llength $args] == 0} { + set result {} + foreach name $options { + lappend result $name $http($name) + } + return $result + } + regsub -all -- - $options {} options + set pat ^-([join $options |])$ + if {[llength $args] == 1} { + set flag [lindex $args 0] + if {[regexp -- $pat $flag]} { + return $http($flag) + } else { + return -code error "Unknown option $flag, must be: $usage" + } + } else { + foreach {flag value} $args { + if {[regexp -- $pat $flag]} { + set http($flag) $value + } else { + return -code error "Unknown option $flag, must be: $usage" + } + } + } +} + + proc httpFinish { token {errormsg ""} } { + upvar #0 $token state + global errorInfo errorCode + if {[string length $errormsg] != 0} { + set state(error) [list $errormsg $errorInfo $errorCode] + set state(status) error + } + catch {close $state(sock)} + catch {after cancel $state(after)} + if {[info exists state(-command)]} { + if {[catch {eval $state(-command) {$token}} err]} { + if {[string length $errormsg] == 0} { + set state(error) [list $err $errorInfo $errorCode] + set state(status) error + } + } + unset state(-command) + } +} +proc http_reset { token {why reset} } { + upvar #0 $token state + set state(status) $why + catch {fileevent $state(sock) readable {}} + httpFinish $token + if {[info exists state(error)]} { + set errorlist $state(error) + unset state(error) + eval error $errorlist + } +} +proc http_get { url args } { + global http + if {![info exists http(uid)]} { + set http(uid) 0 + } + set token http#[incr http(uid)] + upvar #0 $token state + http_reset $token + array set state { + -blocksize 8192 + -validate 0 + -headers {} + -timeout 0 + state header + meta {} + currentsize 0 + totalsize 0 + type text/html + body {} + status "" + } + set options {-blocksize -channel -command -handler -headers \ + -progress -query -validate -timeout} + set usage [join $options ", "] + regsub -all -- - $options {} options + set pat ^-([join $options |])$ + foreach {flag value} $args { + if {[regexp $pat $flag]} { + # Validate numbers + if {[info exists state($flag)] && \ + [regexp {^[0-9]+$} $state($flag)] && \ + ![regexp {^[0-9]+$} $value]} { + return -code error "Bad value for $flag ($value), must be integer" + } + set state($flag) $value + } else { + return -code error "Unknown option $flag, can be: $usage" + } + } + if {! [regexp -nocase {^(http://)?([^/:]+)(:([0-9]+))?(/.*)?$} $url \ + x proto host y port srvurl]} { + error "Unsupported URL: $url" + } + if {[string length $port] == 0} { + set port 80 + } + if {[string length $srvurl] == 0} { + set srvurl / + } + if {[string length $proto] == 0} { + set url http://$url + } + set state(url) $url + if {![catch {$http(-proxyfilter) $host} proxy]} { + set phost [lindex $proxy 0] + set pport [lindex $proxy 1] + } + if {$state(-timeout) > 0} { + set state(after) [after $state(-timeout) [list http_reset $token timeout]] + } + if {[info exists phost] && [string length $phost]} { + set srvurl $url + set s [socket $phost $pport] + } else { + set s [socket $host $port] + } + set state(sock) $s + + # Send data in cr-lf format, but accept any line terminators + + fconfigure $s -translation {auto crlf} -buffersize $state(-blocksize) + + # The following is disallowed in safe interpreters, but the socket + # is already in non-blocking mode in that case. + + catch {fconfigure $s -blocking off} + set len 0 + set how GET + if {[info exists state(-query)]} { + set len [string length $state(-query)] + if {$len > 0} { + set how POST + } + } elseif {$state(-validate)} { + set how HEAD + } + puts $s "$how $srvurl HTTP/1.0" + puts $s "Accept: $http(-accept)" + puts $s "Host: $host" + puts $s "User-Agent: $http(-useragent)" + foreach {key value} $state(-headers) { + regsub -all \[\n\r\] $value {} value + set key [string trim $key] + if {[string length $key]} { + puts $s "$key: $value" + } + } + if {$len > 0} { + puts $s "Content-Length: $len" + puts $s "Content-Type: application/x-www-form-urlencoded" + puts $s "" + fconfigure $s -translation {auto binary} + puts -nonewline $s $state(-query) + } else { + puts $s "" + } + flush $s + fileevent $s readable [list httpEvent $token] + if {! [info exists state(-command)]} { + http_wait $token + } + return $token +} +proc http_data {token} { + upvar #0 $token state + return $state(body) +} +proc http_status {token} { + upvar #0 $token state + return $state(status) +} +proc http_code {token} { + upvar #0 $token state + return $state(http) +} +proc http_size {token} { + upvar #0 $token state + return $state(currentsize) +} + + proc httpEvent {token} { + upvar #0 $token state + set s $state(sock) + + if {[eof $s]} { + httpEof $token + return + } + if {$state(state) == "header"} { + set n [gets $s line] + if {$n == 0} { + set state(state) body + if {![regexp -nocase ^text $state(type)]} { + # Turn off conversions for non-text data + fconfigure $s -translation binary + if {[info exists state(-channel)]} { + fconfigure $state(-channel) -translation binary + } + } + if {[info exists state(-channel)] && + ![info exists state(-handler)]} { + # Initiate a sequence of background fcopies + fileevent $s readable {} + httpCopyStart $s $token + } + } elseif {$n > 0} { + if {[regexp -nocase {^content-type:(.+)$} $line x type]} { + set state(type) [string trim $type] + } + if {[regexp -nocase {^content-length:(.+)$} $line x length]} { + set state(totalsize) [string trim $length] + } + if {[regexp -nocase {^([^:]+):(.+)$} $line x key value]} { + lappend state(meta) $key $value + } elseif {[regexp ^HTTP $line]} { + set state(http) $line + } + } + } else { + if {[catch { + if {[info exists state(-handler)]} { + set n [eval $state(-handler) {$s $token}] + } else { + set block [read $s $state(-blocksize)] + set n [string length $block] + if {$n >= 0} { + append state(body) $block + } + } + if {$n >= 0} { + incr state(currentsize) $n + } + } err]} { + httpFinish $token $err + } else { + if {[info exists state(-progress)]} { + eval $state(-progress) {$token $state(totalsize) $state(currentsize)} + } + } + } +} + proc httpCopyStart {s token} { + upvar #0 $token state + if {[catch { + fcopy $s $state(-channel) -size $state(-blocksize) -command \ + [list httpCopyDone $token] + } err]} { + httpFinish $token $err + } +} + proc httpCopyDone {token count {error {}}} { + upvar #0 $token state + set s $state(sock) + incr state(currentsize) $count + if {[info exists state(-progress)]} { + eval $state(-progress) {$token $state(totalsize) $state(currentsize)} + } + if {([string length $error] != 0)} { + httpFinish $token $error + } elseif {[eof $s]} { + httpEof $token + } else { + httpCopyStart $s $token + } +} + proc httpEof {token} { + upvar #0 $token state + if {$state(state) == "header"} { + # Premature eof + set state(status) eof + } else { + set state(status) ok + } + set state(state) eof + httpFinish $token +} +proc http_wait {token} { + upvar #0 $token state + if {![info exists state(status)] || [string length $state(status)] == 0} { + vwait $token\(status) + } + if {[info exists state(error)]} { + set errorlist $state(error) + unset state(error) + eval error $errorlist + } + return $state(status) +} + +# Call http_formatQuery with an even number of arguments, where the first is +# a name, the second is a value, the third is another name, and so on. + +proc http_formatQuery {args} { + set result "" + set sep "" + foreach i $args { + append result $sep [httpMapReply $i] + if {$sep != "="} { + set sep = + } else { + set sep & + } + } + return $result +} + +# do x-www-urlencoded character mapping +# The spec says: "non-alphanumeric characters are replaced by '%HH'" +# 1 leave alphanumerics characters alone +# 2 Convert every other character to an array lookup +# 3 Escape constructs that are "special" to the tcl parser +# 4 "subst" the result, doing all the array substitutions + + proc httpMapReply {string} { + global httpFormMap + set alphanumeric a-zA-Z0-9 + if {![info exists httpFormMap]} { + + for {set i 1} {$i <= 256} {incr i} { + set c [format %c $i] + if {![string match \[$alphanumeric\] $c]} { + set httpFormMap($c) %[format %.2x $i] + } + } + # These are handled specially + array set httpFormMap { + " " + \n %0d%0a + } + } + regsub -all \[^$alphanumeric\] $string {$httpFormMap(&)} string + regsub -all \n $string {\\n} string + regsub -all \t $string {\\t} string + regsub -all {[][{})\\]\)} $string {\\&} string + return [subst $string] +} + +# Default proxy filter. + proc httpProxyRequired {host} { + global http + if {[info exists http(-proxyhost)] && [string length $http(-proxyhost)]} { + if {![info exists http(-proxyport)] || ![string length $http(-proxyport)]} { + set http(-proxyport) 8080 + } + return [list $http(-proxyhost) $http(-proxyport)] + } else { + return {} + } +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/http1.0/pkgIndex.tcl b/extensions/fablabchemnitz/inkstitch/bin/tcl/http1.0/pkgIndex.tcl new file mode 100644 index 00000000..ab6170f7 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/http1.0/pkgIndex.tcl @@ -0,0 +1,11 @@ +# Tcl package index file, version 1.0 +# This file is generated by the "pkg_mkIndex" command +# and sourced either when an application starts up or +# by a "package unknown" script. It invokes the +# "package ifneeded" command to set up package-related +# information so that packages will be loaded automatically +# in response to "package require" commands. When this +# script is sourced, the variable $dir must contain the +# full path name of this file's directory. + +package ifneeded http 1.0 [list tclPkgSetup $dir http 1.0 {{http.tcl source {httpCopyDone httpCopyStart httpEof httpEvent httpFinish httpMapReply httpProxyRequired http_code http_config http_data http_formatQuery http_get http_reset http_size http_status http_wait}}}] diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/init.tcl b/extensions/fablabchemnitz/inkstitch/bin/tcl/init.tcl new file mode 100644 index 00000000..aaf148b2 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/init.tcl @@ -0,0 +1,831 @@ +# init.tcl -- +# +# Default system startup file for Tcl-based applications. Defines +# "unknown" procedure and auto-load facilities. +# +# Copyright (c) 1991-1993 The Regents of the University of California. +# Copyright (c) 1994-1996 Sun Microsystems, Inc. +# Copyright (c) 1998-1999 Scriptics Corporation. +# Copyright (c) 2004 by Kevin B. Kenny. All rights reserved. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. +# + +# This test intentionally written in pre-7.5 Tcl +if {[info commands package] == ""} { + error "version mismatch: library\nscripts expect Tcl version 7.5b1 or later but the loaded version is\nonly [info patchlevel]" +} +package require -exact Tcl 8.5.19 + +# Compute the auto path to use in this interpreter. +# The values on the path come from several locations: +# +# The environment variable TCLLIBPATH +# +# tcl_library, which is the directory containing this init.tcl script. +# [tclInit] (Tcl_Init()) searches around for the directory containing this +# init.tcl and defines tcl_library to that location before sourcing it. +# +# The parent directory of tcl_library. Adding the parent +# means that packages in peer directories will be found automatically. +# +# Also add the directory ../lib relative to the directory where the +# executable is located. This is meant to find binary packages for the +# same architecture as the current executable. +# +# tcl_pkgPath, which is set by the platform-specific initialization routines +# On UNIX it is compiled in +# On Windows, it is not used + +if {![info exists auto_path]} { + if {[info exists env(TCLLIBPATH)]} { + set auto_path $env(TCLLIBPATH) + } else { + set auto_path "" + } +} +namespace eval tcl { + variable Dir + foreach Dir [list $::tcl_library [file dirname $::tcl_library]] { + if {$Dir ni $::auto_path} { + lappend ::auto_path $Dir + } + } + set Dir [file join [file dirname [file dirname \ + [info nameofexecutable]]] lib] + if {$Dir ni $::auto_path} { + lappend ::auto_path $Dir + } + catch { + foreach Dir $::tcl_pkgPath { + if {$Dir ni $::auto_path} { + lappend ::auto_path $Dir + } + } + } + + if {![interp issafe]} { + variable Path [encoding dirs] + set Dir [file join $::tcl_library encoding] + if {$Dir ni $Path} { + lappend Path $Dir + encoding dirs $Path + } + } + + # TIP #255 min and max functions + namespace eval mathfunc { + proc min {args} { + if {![llength $args]} { + return -code error \ + "too few arguments to math function \"min\"" + } + set val Inf + foreach arg $args { + # This will handle forcing the numeric value without + # ruining the internal type of a numeric object + if {[catch {expr {double($arg)}} err]} { + return -code error $err + } + if {$arg < $val} {set val $arg} + } + return $val + } + proc max {args} { + if {![llength $args]} { + return -code error \ + "too few arguments to math function \"max\"" + } + set val -Inf + foreach arg $args { + # This will handle forcing the numeric value without + # ruining the internal type of a numeric object + if {[catch {expr {double($arg)}} err]} { + return -code error $err + } + if {$arg > $val} {set val $arg} + } + return $val + } + namespace export min max + } +} + +# Windows specific end of initialization + +if {(![interp issafe]) && ($tcl_platform(platform) eq "windows")} { + namespace eval tcl { + proc EnvTraceProc {lo n1 n2 op} { + global env + set x $env($n2) + set env($lo) $x + set env([string toupper $lo]) $x + } + proc InitWinEnv {} { + global env tcl_platform + foreach p [array names env] { + set u [string toupper $p] + if {$u ne $p} { + switch -- $u { + COMSPEC - + PATH { + set temp $env($p) + unset env($p) + set env($u) $temp + trace add variable env($p) write \ + [namespace code [list EnvTraceProc $p]] + trace add variable env($u) write \ + [namespace code [list EnvTraceProc $p]] + } + } + } + } + if {![info exists env(COMSPEC)]} { + if {$tcl_platform(os) eq "Windows NT"} { + set env(COMSPEC) cmd.exe + } else { + set env(COMSPEC) command.com + } + } + } + InitWinEnv + } +} + +# Setup the unknown package handler + + +if {[interp issafe]} { + package unknown {::tcl::tm::UnknownHandler ::tclPkgUnknown} +} else { + # Set up search for Tcl Modules (TIP #189). + # and setup platform specific unknown package handlers + if {$tcl_platform(os) eq "Darwin" + && $tcl_platform(platform) eq "unix"} { + package unknown {::tcl::tm::UnknownHandler \ + {::tcl::MacOSXPkgUnknown ::tclPkgUnknown}} + } else { + package unknown {::tcl::tm::UnknownHandler ::tclPkgUnknown} + } + + # Set up the 'clock' ensemble + + namespace eval ::tcl::clock [list variable TclLibDir $::tcl_library] + + proc clock args { + namespace eval ::tcl::clock [list namespace ensemble create -command \ + [uplevel 1 [list namespace origin [lindex [info level 0] 0]]] \ + -subcommands { + add clicks format microseconds milliseconds scan seconds + }] + + # Auto-loading stubs for 'clock.tcl' + + foreach cmd {add format scan} { + proc ::tcl::clock::$cmd args { + variable TclLibDir + source -encoding utf-8 [file join $TclLibDir clock.tcl] + return [uplevel 1 [info level 0]] + } + } + + return [uplevel 1 [info level 0]] + } +} + +# Conditionalize for presence of exec. + +if {[namespace which -command exec] eq ""} { + + # Some machines do not have exec. Also, on all + # platforms, safe interpreters do not have exec. + + set auto_noexec 1 +} + +# Define a log command (which can be overwitten to log errors +# differently, specially when stderr is not available) + +if {[namespace which -command tclLog] eq ""} { + proc tclLog {string} { + catch {puts stderr $string} + } +} + +# unknown -- +# This procedure is called when a Tcl command is invoked that doesn't +# exist in the interpreter. It takes the following steps to make the +# command available: +# +# 1. See if the command has the form "namespace inscope ns cmd" and +# if so, concatenate its arguments onto the end and evaluate it. +# 2. See if the autoload facility can locate the command in a +# Tcl script file. If so, load it and execute it. +# 3. If the command was invoked interactively at top-level: +# (a) see if the command exists as an executable UNIX program. +# If so, "exec" the command. +# (b) see if the command requests csh-like history substitution +# in one of the common forms !!, !, or ^old^new. If +# so, emulate csh's history substitution. +# (c) see if the command is a unique abbreviation for another +# command. If so, invoke the command. +# +# Arguments: +# args - A list whose elements are the words of the original +# command, including the command name. + +proc unknown args { + variable ::tcl::UnknownPending + global auto_noexec auto_noload env tcl_interactive errorInfo errorCode + + # If the command word has the form "namespace inscope ns cmd" + # then concatenate its arguments onto the end and evaluate it. + + set cmd [lindex $args 0] + if {[regexp "^:*namespace\[ \t\n\]+inscope" $cmd] && [llength $cmd] == 4} { + #return -code error "You need an {*}" + set arglist [lrange $args 1 end] + set ret [catch {uplevel 1 ::$cmd $arglist} result opts] + dict unset opts -errorinfo + dict incr opts -level + return -options $opts $result + } + + catch {set savedErrorInfo $errorInfo} + catch {set savedErrorCode $errorCode} + set name $cmd + if {![info exists auto_noload]} { + # + # Make sure we're not trying to load the same proc twice. + # + if {[info exists UnknownPending($name)]} { + return -code error "self-referential recursion\ + in \"unknown\" for command \"$name\"" + } + set UnknownPending($name) pending + set ret [catch { + auto_load $name [uplevel 1 {::namespace current}] + } msg opts] + unset UnknownPending($name) + if {$ret != 0} { + dict append opts -errorinfo "\n (autoloading \"$name\")" + return -options $opts $msg + } + if {![array size UnknownPending]} { + unset UnknownPending + } + if {$msg} { + if {[info exists savedErrorCode]} { + set ::errorCode $savedErrorCode + } else { + unset -nocomplain ::errorCode + } + if {[info exists savedErrorInfo]} { + set errorInfo $savedErrorInfo + } else { + unset -nocomplain errorInfo + } + set code [catch {uplevel 1 $args} msg opts] + if {$code == 1} { + # + # Compute stack trace contribution from the [uplevel]. + # Note the dependence on how Tcl_AddErrorInfo, etc. + # construct the stack trace. + # + set errInfo [dict get $opts -errorinfo] + set errCode [dict get $opts -errorcode] + set cinfo $args + if {[string bytelength $cinfo] > 150} { + set cinfo [string range $cinfo 0 150] + while {[string bytelength $cinfo] > 150} { + set cinfo [string range $cinfo 0 end-1] + } + append cinfo ... + } + append cinfo "\"\n (\"uplevel\" body line 1)" + append cinfo "\n invoked from within" + append cinfo "\n\"uplevel 1 \$args\"" + # + # Try each possible form of the stack trace + # and trim the extra contribution from the matching case + # + set expect "$msg\n while executing\n\"$cinfo" + if {$errInfo eq $expect} { + # + # The stack has only the eval from the expanded command + # Do not generate any stack trace here. + # + dict unset opts -errorinfo + dict incr opts -level + return -options $opts $msg + } + # + # Stack trace is nested, trim off just the contribution + # from the extra "eval" of $args due to the "catch" above. + # + set expect "\n invoked from within\n\"$cinfo" + set exlen [string length $expect] + set eilen [string length $errInfo] + set i [expr {$eilen - $exlen - 1}] + set einfo [string range $errInfo 0 $i] + # + # For now verify that $errInfo consists of what we are about + # to return plus what we expected to trim off. + # + if {$errInfo ne "$einfo$expect"} { + error "Tcl bug: unexpected stack trace in \"unknown\"" {} \ + [list CORE UNKNOWN BADTRACE $einfo $expect $errInfo] + } + return -code error -errorcode $errCode \ + -errorinfo $einfo $msg + } else { + dict incr opts -level + return -options $opts $msg + } + } + } + + if {([info level] == 1) && ([info script] eq "") + && [info exists tcl_interactive] && $tcl_interactive} { + if {![info exists auto_noexec]} { + set new [auto_execok $name] + if {$new ne ""} { + set redir "" + if {[namespace which -command console] eq ""} { + set redir ">&@stdout <@stdin" + } + uplevel 1 [list ::catch \ + [concat exec $redir $new [lrange $args 1 end]] \ + ::tcl::UnknownResult ::tcl::UnknownOptions] + dict incr ::tcl::UnknownOptions -level + return -options $::tcl::UnknownOptions $::tcl::UnknownResult + } + } + if {$name eq "!!"} { + set newcmd [history event] + } elseif {[regexp {^!(.+)$} $name -> event]} { + set newcmd [history event $event] + } elseif {[regexp {^\^([^^]*)\^([^^]*)\^?$} $name -> old new]} { + set newcmd [history event -1] + catch {regsub -all -- $old $newcmd $new newcmd} + } + if {[info exists newcmd]} { + tclLog $newcmd + history change $newcmd 0 + uplevel 1 [list ::catch $newcmd \ + ::tcl::UnknownResult ::tcl::UnknownOptions] + dict incr ::tcl::UnknownOptions -level + return -options $::tcl::UnknownOptions $::tcl::UnknownResult + } + + set ret [catch {set candidates [info commands $name*]} msg] + if {$name eq "::"} { + set name "" + } + if {$ret != 0} { + dict append opts -errorinfo \ + "\n (expanding command prefix \"$name\" in unknown)" + return -options $opts $msg + } + # Filter out bogus matches when $name contained + # a glob-special char [Bug 946952] + if {$name eq ""} { + # Handle empty $name separately due to strangeness + # in [string first] (See RFE 1243354) + set cmds $candidates + } else { + set cmds [list] + foreach x $candidates { + if {[string first $name $x] == 0} { + lappend cmds $x + } + } + } + if {[llength $cmds] == 1} { + uplevel 1 [list ::catch [lreplace $args 0 0 [lindex $cmds 0]] \ + ::tcl::UnknownResult ::tcl::UnknownOptions] + dict incr ::tcl::UnknownOptions -level + return -options $::tcl::UnknownOptions $::tcl::UnknownResult + } + if {[llength $cmds]} { + return -code error "ambiguous command name \"$name\": [lsort $cmds]" + } + } + return -code error "invalid command name \"$name\"" +} + +# auto_load -- +# Checks a collection of library directories to see if a procedure +# is defined in one of them. If so, it sources the appropriate +# library file to create the procedure. Returns 1 if it successfully +# loaded the procedure, 0 otherwise. +# +# Arguments: +# cmd - Name of the command to find and load. +# namespace (optional) The namespace where the command is being used - must be +# a canonical namespace as returned [namespace current] +# for instance. If not given, namespace current is used. + +proc auto_load {cmd {namespace {}}} { + global auto_index auto_path + + if {$namespace eq ""} { + set namespace [uplevel 1 [list ::namespace current]] + } + set nameList [auto_qualify $cmd $namespace] + # workaround non canonical auto_index entries that might be around + # from older auto_mkindex versions + lappend nameList $cmd + foreach name $nameList { + if {[info exists auto_index($name)]} { + namespace eval :: $auto_index($name) + # There's a couple of ways to look for a command of a given + # name. One is to use + # info commands $name + # Unfortunately, if the name has glob-magic chars in it like * + # or [], it may not match. For our purposes here, a better + # route is to use + # namespace which -command $name + if {[namespace which -command $name] ne ""} { + return 1 + } + } + } + if {![info exists auto_path]} { + return 0 + } + + if {![auto_load_index]} { + return 0 + } + foreach name $nameList { + if {[info exists auto_index($name)]} { + namespace eval :: $auto_index($name) + if {[namespace which -command $name] ne ""} { + return 1 + } + } + } + return 0 +} + +# auto_load_index -- +# Loads the contents of tclIndex files on the auto_path directory +# list. This is usually invoked within auto_load to load the index +# of available commands. Returns 1 if the index is loaded, and 0 if +# the index is already loaded and up to date. +# +# Arguments: +# None. + +proc auto_load_index {} { + variable ::tcl::auto_oldpath + global auto_index auto_path + + if {[info exists auto_oldpath] && ($auto_oldpath eq $auto_path)} { + return 0 + } + set auto_oldpath $auto_path + + # Check if we are a safe interpreter. In that case, we support only + # newer format tclIndex files. + + set issafe [interp issafe] + for {set i [expr {[llength $auto_path] - 1}]} {$i >= 0} {incr i -1} { + set dir [lindex $auto_path $i] + set f "" + if {$issafe} { + catch {source [file join $dir tclIndex]} + } elseif {[catch {set f [open [file join $dir tclIndex]]}]} { + continue + } else { + set error [catch { + set id [gets $f] + if {$id eq "# Tcl autoload index file, version 2.0"} { + eval [read $f] + } elseif {$id eq "# Tcl autoload index file: each line identifies a Tcl"} { + while {[gets $f line] >= 0} { + if {([string index $line 0] eq "#") \ + || ([llength $line] != 2)} { + continue + } + set name [lindex $line 0] + set auto_index($name) \ + "source [file join $dir [lindex $line 1]]" + } + } else { + error "[file join $dir tclIndex] isn't a proper Tcl index file" + } + } msg opts] + if {$f ne ""} { + close $f + } + if {$error} { + return -options $opts $msg + } + } + } + return 1 +} + +# auto_qualify -- +# +# Compute a fully qualified names list for use in the auto_index array. +# For historical reasons, commands in the global namespace do not have leading +# :: in the index key. The list has two elements when the command name is +# relative (no leading ::) and the namespace is not the global one. Otherwise +# only one name is returned (and searched in the auto_index). +# +# Arguments - +# cmd The command name. Can be any name accepted for command +# invocations (Like "foo::::bar"). +# namespace The namespace where the command is being used - must be +# a canonical namespace as returned by [namespace current] +# for instance. + +proc auto_qualify {cmd namespace} { + + # count separators and clean them up + # (making sure that foo:::::bar will be treated as foo::bar) + set n [regsub -all {::+} $cmd :: cmd] + + # Ignore namespace if the name starts with :: + # Handle special case of only leading :: + + # Before each return case we give an example of which category it is + # with the following form : + # (inputCmd, inputNameSpace) -> output + + if {[string match ::* $cmd]} { + if {$n > 1} { + # (::foo::bar , *) -> ::foo::bar + return [list $cmd] + } else { + # (::global , *) -> global + return [list [string range $cmd 2 end]] + } + } + + # Potentially returning 2 elements to try : + # (if the current namespace is not the global one) + + if {$n == 0} { + if {$namespace eq "::"} { + # (nocolons , ::) -> nocolons + return [list $cmd] + } else { + # (nocolons , ::sub) -> ::sub::nocolons nocolons + return [list ${namespace}::$cmd $cmd] + } + } elseif {$namespace eq "::"} { + # (foo::bar , ::) -> ::foo::bar + return [list ::$cmd] + } else { + # (foo::bar , ::sub) -> ::sub::foo::bar ::foo::bar + return [list ${namespace}::$cmd ::$cmd] + } +} + +# auto_import -- +# +# Invoked during "namespace import" to make see if the imported commands +# reside in an autoloaded library. If so, the commands are loaded so +# that they will be available for the import links. If not, then this +# procedure does nothing. +# +# Arguments - +# pattern The pattern of commands being imported (like "foo::*") +# a canonical namespace as returned by [namespace current] + +proc auto_import {pattern} { + global auto_index + + # If no namespace is specified, this will be an error case + + if {![string match *::* $pattern]} { + return + } + + set ns [uplevel 1 [list ::namespace current]] + set patternList [auto_qualify $pattern $ns] + + auto_load_index + + foreach pattern $patternList { + foreach name [array names auto_index $pattern] { + if {([namespace which -command $name] eq "") + && ([namespace qualifiers $pattern] eq [namespace qualifiers $name])} { + namespace eval :: $auto_index($name) + } + } + } +} + +# auto_execok -- +# +# Returns string that indicates name of program to execute if +# name corresponds to a shell builtin or an executable in the +# Windows search path, or "" otherwise. Builds an associative +# array auto_execs that caches information about previous checks, +# for speed. +# +# Arguments: +# name - Name of a command. + +if {$tcl_platform(platform) eq "windows"} { +# Windows version. +# +# Note that info executable doesn't work under Windows, so we have to +# look for files with .exe, .com, or .bat extensions. Also, the path +# may be in the Path or PATH environment variables, and path +# components are separated with semicolons, not colons as under Unix. +# +proc auto_execok name { + global auto_execs env tcl_platform + + if {[info exists auto_execs($name)]} { + return $auto_execs($name) + } + set auto_execs($name) "" + + set shellBuiltins [list cls copy date del dir echo erase md mkdir \ + mklink rd ren rename rmdir start time type ver vol] + if {[info exists env(PATHEXT)]} { + # Add an initial ; to have the {} extension check first. + set execExtensions [split ";$env(PATHEXT)" ";"] + } else { + set execExtensions [list {} .com .exe .bat .cmd] + } + + if {[string tolower $name] in $shellBuiltins} { + # When this is command.com for some reason on Win2K, Tcl won't + # exec it unless the case is right, which this corrects. COMSPEC + # may not point to a real file, so do the check. + set cmd $env(COMSPEC) + if {[file exists $cmd]} { + set cmd [file attributes $cmd -shortname] + } + return [set auto_execs($name) [list $cmd /c $name]] + } + + if {[llength [file split $name]] != 1} { + foreach ext $execExtensions { + set file ${name}${ext} + if {[file exists $file] && ![file isdirectory $file]} { + return [set auto_execs($name) [list $file]] + } + } + return "" + } + + set path "[file dirname [info nameof]];.;" + if {[info exists env(WINDIR)]} { + set windir $env(WINDIR) + } + if {[info exists windir]} { + if {$tcl_platform(os) eq "Windows NT"} { + append path "$windir/system32;" + } + append path "$windir/system;$windir;" + } + + foreach var {PATH Path path} { + if {[info exists env($var)]} { + append path ";$env($var)" + } + } + + foreach ext $execExtensions { + unset -nocomplain checked + foreach dir [split $path {;}] { + # Skip already checked directories + if {[info exists checked($dir)] || ($dir eq "")} { + continue + } + set checked($dir) {} + set file [file join $dir ${name}${ext}] + if {[file exists $file] && ![file isdirectory $file]} { + return [set auto_execs($name) [list $file]] + } + } + } + return "" +} + +} else { +# Unix version. +# +proc auto_execok name { + global auto_execs env + + if {[info exists auto_execs($name)]} { + return $auto_execs($name) + } + set auto_execs($name) "" + if {[llength [file split $name]] != 1} { + if {[file executable $name] && ![file isdirectory $name]} { + set auto_execs($name) [list $name] + } + return $auto_execs($name) + } + foreach dir [split $env(PATH) :] { + if {$dir eq ""} { + set dir . + } + set file [file join $dir $name] + if {[file executable $file] && ![file isdirectory $file]} { + set auto_execs($name) [list $file] + return $auto_execs($name) + } + } + return "" +} + +} + +# ::tcl::CopyDirectory -- +# +# This procedure is called by Tcl's core when attempts to call the +# filesystem's copydirectory function fail. The semantics of the call +# are that 'dest' does not yet exist, i.e. dest should become the exact +# image of src. If dest does exist, we throw an error. +# +# Note that making changes to this procedure can change the results +# of running Tcl's tests. +# +# Arguments: +# action - "renaming" or "copying" +# src - source directory +# dest - destination directory +proc tcl::CopyDirectory {action src dest} { + set nsrc [file normalize $src] + set ndest [file normalize $dest] + + if {$action eq "renaming"} { + # Can't rename volumes. We could give a more precise + # error message here, but that would break the test suite. + if {$nsrc in [file volumes]} { + return -code error "error $action \"$src\" to\ + \"$dest\": trying to rename a volume or move a directory\ + into itself" + } + } + if {[file exists $dest]} { + if {$nsrc eq $ndest} { + return -code error "error $action \"$src\" to\ + \"$dest\": trying to rename a volume or move a directory\ + into itself" + } + if {$action eq "copying"} { + # We used to throw an error here, but, looking more closely + # at the core copy code in tclFCmd.c, if the destination + # exists, then we should only call this function if -force + # is true, which means we just want to over-write. So, + # the following code is now commented out. + # + # return -code error "error $action \"$src\" to\ + # \"$dest\": file already exists" + } else { + # Depending on the platform, and on the current + # working directory, the directories '.', '..' + # can be returned in various combinations. Anyway, + # if any other file is returned, we must signal an error. + set existing [glob -nocomplain -directory $dest * .*] + lappend existing {*}[glob -nocomplain -directory $dest \ + -type hidden * .*] + foreach s $existing { + if {[file tail $s] ni {. ..}} { + return -code error "error $action \"$src\" to\ + \"$dest\": file already exists" + } + } + } + } else { + if {[string first $nsrc $ndest] != -1} { + set srclen [expr {[llength [file split $nsrc]] - 1}] + set ndest [lindex [file split $ndest] $srclen] + if {$ndest eq [file tail $nsrc]} { + return -code error "error $action \"$src\" to\ + \"$dest\": trying to rename a volume or move a directory\ + into itself" + } + } + file mkdir $dest + } + # Have to be careful to capture both visible and hidden files. + # We will also be more generous to the file system and not + # assume the hidden and non-hidden lists are non-overlapping. + # + # On Unix 'hidden' files begin with '.'. On other platforms + # or filesystems hidden files may have other interpretations. + set filelist [concat [glob -nocomplain -directory $src *] \ + [glob -nocomplain -directory $src -types hidden *]] + + foreach s [lsort -unique $filelist] { + if {[file tail $s] ni {. ..}} { + file copy -force -- $s [file join $dest [file tail $s]] + } + } + return +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/af.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/af.msg new file mode 100644 index 00000000..08926157 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/af.msg @@ -0,0 +1,49 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset af DAYS_OF_WEEK_ABBREV [list \ + "So"\ + "Ma"\ + "Di"\ + "Wo"\ + "Do"\ + "Vr"\ + "Sa"] + ::msgcat::mcset af DAYS_OF_WEEK_FULL [list \ + "Sondag"\ + "Maandag"\ + "Dinsdag"\ + "Woensdag"\ + "Donderdag"\ + "Vrydag"\ + "Saterdag"] + ::msgcat::mcset af MONTHS_ABBREV [list \ + "Jan"\ + "Feb"\ + "Mar"\ + "Apr"\ + "Mei"\ + "Jun"\ + "Jul"\ + "Aug"\ + "Sep"\ + "Okt"\ + "Nov"\ + "Des"\ + ""] + ::msgcat::mcset af MONTHS_FULL [list \ + "Januarie"\ + "Februarie"\ + "Maart"\ + "April"\ + "Mei"\ + "Junie"\ + "Julie"\ + "Augustus"\ + "September"\ + "Oktober"\ + "November"\ + "Desember"\ + ""] + ::msgcat::mcset af AM "VM" + ::msgcat::mcset af PM "NM" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/af_za.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/af_za.msg new file mode 100644 index 00000000..fef48ad4 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/af_za.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset af_ZA DATE_FORMAT "%d %B %Y" + ::msgcat::mcset af_ZA TIME_FORMAT_12 "%l:%M:%S %P" + ::msgcat::mcset af_ZA DATE_TIME_FORMAT "%d %B %Y %l:%M:%S %P %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/ar.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/ar.msg new file mode 100644 index 00000000..257157fd --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/ar.msg @@ -0,0 +1,54 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset ar DAYS_OF_WEEK_ABBREV [list \ + "\u062d"\ + "\u0646"\ + "\u062b"\ + "\u0631"\ + "\u062e"\ + "\u062c"\ + "\u0633"] + ::msgcat::mcset ar DAYS_OF_WEEK_FULL [list \ + "\u0627\u0644\u0623\u062d\u062f"\ + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646"\ + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621"\ + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621"\ + "\u0627\u0644\u062e\u0645\u064a\u0633"\ + "\u0627\u0644\u062c\u0645\u0639\u0629"\ + "\u0627\u0644\u0633\u0628\u062a"] + ::msgcat::mcset ar MONTHS_ABBREV [list \ + "\u064a\u0646\u0627"\ + "\u0641\u0628\u0631"\ + "\u0645\u0627\u0631"\ + "\u0623\u0628\u0631"\ + "\u0645\u0627\u064a"\ + "\u064a\u0648\u0646"\ + "\u064a\u0648\u0644"\ + "\u0623\u063a\u0633"\ + "\u0633\u0628\u062a"\ + "\u0623\u0643\u062a"\ + "\u0646\u0648\u0641"\ + "\u062f\u064a\u0633"\ + ""] + ::msgcat::mcset ar MONTHS_FULL [list \ + "\u064a\u0646\u0627\u064a\u0631"\ + "\u0641\u0628\u0631\u0627\u064a\u0631"\ + "\u0645\u0627\u0631\u0633"\ + "\u0623\u0628\u0631\u064a\u0644"\ + "\u0645\u0627\u064a\u0648"\ + "\u064a\u0648\u0646\u064a\u0648"\ + "\u064a\u0648\u0644\u064a\u0648"\ + "\u0623\u063a\u0633\u0637\u0633"\ + "\u0633\u0628\u062a\u0645\u0628\u0631"\ + "\u0623\u0643\u062a\u0648\u0628\u0631"\ + "\u0646\u0648\u0641\u0645\u0628\u0631"\ + "\u062f\u064a\u0633\u0645\u0628\u0631"\ + ""] + ::msgcat::mcset ar BCE "\u0642.\u0645" + ::msgcat::mcset ar CE "\u0645" + ::msgcat::mcset ar AM "\u0635" + ::msgcat::mcset ar PM "\u0645" + ::msgcat::mcset ar DATE_FORMAT "%d/%m/%Y" + ::msgcat::mcset ar TIME_FORMAT_12 "%I:%M:%S %P" + ::msgcat::mcset ar DATE_TIME_FORMAT "%d/%m/%Y %I:%M:%S %P %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/ar_in.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/ar_in.msg new file mode 100644 index 00000000..185e49c3 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/ar_in.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset ar_IN DATE_FORMAT "%A %d %B %Y" + ::msgcat::mcset ar_IN TIME_FORMAT_12 "%I:%M:%S %z" + ::msgcat::mcset ar_IN DATE_TIME_FORMAT "%A %d %B %Y %I:%M:%S %z %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/ar_jo.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/ar_jo.msg new file mode 100644 index 00000000..0f5e2697 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/ar_jo.msg @@ -0,0 +1,39 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset ar_JO DAYS_OF_WEEK_ABBREV [list \ + "\u0627\u0644\u0623\u062d\u062f"\ + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646"\ + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621"\ + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621"\ + "\u0627\u0644\u062e\u0645\u064a\u0633"\ + "\u0627\u0644\u062c\u0645\u0639\u0629"\ + "\u0627\u0644\u0633\u0628\u062a"] + ::msgcat::mcset ar_JO MONTHS_ABBREV [list \ + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a"\ + "\u0634\u0628\u0627\u0637"\ + "\u0622\u0630\u0627\u0631"\ + "\u0646\u064a\u0633\u0627\u0646"\ + "\u0646\u0648\u0627\u0631"\ + "\u062d\u0632\u064a\u0631\u0627\u0646"\ + "\u062a\u0645\u0648\u0632"\ + "\u0622\u0628"\ + "\u0623\u064a\u0644\u0648\u0644"\ + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644"\ + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a"\ + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644"\ + ""] + ::msgcat::mcset ar_JO MONTHS_FULL [list \ + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a"\ + "\u0634\u0628\u0627\u0637"\ + "\u0622\u0630\u0627\u0631"\ + "\u0646\u064a\u0633\u0627\u0646"\ + "\u0646\u0648\u0627\u0631"\ + "\u062d\u0632\u064a\u0631\u0627\u0646"\ + "\u062a\u0645\u0648\u0632"\ + "\u0622\u0628"\ + "\u0623\u064a\u0644\u0648\u0644"\ + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644"\ + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a"\ + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644"\ + ""] +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/ar_lb.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/ar_lb.msg new file mode 100644 index 00000000..e62acd35 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/ar_lb.msg @@ -0,0 +1,39 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset ar_LB DAYS_OF_WEEK_ABBREV [list \ + "\u0627\u0644\u0623\u062d\u062f"\ + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646"\ + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621"\ + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621"\ + "\u0627\u0644\u062e\u0645\u064a\u0633"\ + "\u0627\u0644\u062c\u0645\u0639\u0629"\ + "\u0627\u0644\u0633\u0628\u062a"] + ::msgcat::mcset ar_LB MONTHS_ABBREV [list \ + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a"\ + "\u0634\u0628\u0627\u0637"\ + "\u0622\u0630\u0627\u0631"\ + "\u0646\u064a\u0633\u0627\u0646"\ + "\u0646\u0648\u0627\u0631"\ + "\u062d\u0632\u064a\u0631\u0627\u0646"\ + "\u062a\u0645\u0648\u0632"\ + "\u0622\u0628"\ + "\u0623\u064a\u0644\u0648\u0644"\ + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644"\ + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a"\ + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644"\ + ""] + ::msgcat::mcset ar_LB MONTHS_FULL [list \ + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a"\ + "\u0634\u0628\u0627\u0637"\ + "\u0622\u0630\u0627\u0631"\ + "\u0646\u064a\u0633\u0627\u0646"\ + "\u0646\u0648\u0627\u0631"\ + "\u062d\u0632\u064a\u0631\u0627\u0646"\ + "\u062a\u0645\u0648\u0632"\ + "\u0622\u0628"\ + "\u0623\u064a\u0644\u0648\u0644"\ + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644"\ + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a"\ + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644"\ + ""] +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/ar_sy.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/ar_sy.msg new file mode 100644 index 00000000..d5e1c873 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/ar_sy.msg @@ -0,0 +1,39 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset ar_SY DAYS_OF_WEEK_ABBREV [list \ + "\u0627\u0644\u0623\u062d\u062f"\ + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646"\ + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621"\ + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621"\ + "\u0627\u0644\u062e\u0645\u064a\u0633"\ + "\u0627\u0644\u062c\u0645\u0639\u0629"\ + "\u0627\u0644\u0633\u0628\u062a"] + ::msgcat::mcset ar_SY MONTHS_ABBREV [list \ + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a"\ + "\u0634\u0628\u0627\u0637"\ + "\u0622\u0630\u0627\u0631"\ + "\u0646\u064a\u0633\u0627\u0646"\ + "\u0646\u0648\u0627\u0631"\ + "\u062d\u0632\u064a\u0631\u0627\u0646"\ + "\u062a\u0645\u0648\u0632"\ + "\u0622\u0628"\ + "\u0623\u064a\u0644\u0648\u0644"\ + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644"\ + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a"\ + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644"\ + ""] + ::msgcat::mcset ar_SY MONTHS_FULL [list \ + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a"\ + "\u0634\u0628\u0627\u0637"\ + "\u0622\u0630\u0627\u0631"\ + "\u0646\u064a\u0633\u0627\u0646"\ + "\u0646\u0648\u0627\u0631\u0627\u0646"\ + "\u062d\u0632\u064a\u0631"\ + "\u062a\u0645\u0648\u0632"\ + "\u0622\u0628"\ + "\u0623\u064a\u0644\u0648\u0644"\ + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644"\ + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a"\ + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644"\ + ""] +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/be.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/be.msg new file mode 100644 index 00000000..379a1d7e --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/be.msg @@ -0,0 +1,52 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset be DAYS_OF_WEEK_ABBREV [list \ + "\u043d\u0434"\ + "\u043f\u043d"\ + "\u0430\u0442"\ + "\u0441\u0440"\ + "\u0447\u0446"\ + "\u043f\u0442"\ + "\u0441\u0431"] + ::msgcat::mcset be DAYS_OF_WEEK_FULL [list \ + "\u043d\u044f\u0434\u0437\u0435\u043b\u044f"\ + "\u043f\u0430\u043d\u044f\u0434\u0437\u0435\u043b\u0430\u043a"\ + "\u0430\u045e\u0442\u043e\u0440\u0430\u043a"\ + "\u0441\u0435\u0440\u0430\u0434\u0430"\ + "\u0447\u0430\u0446\u0432\u0435\u0440"\ + "\u043f\u044f\u0442\u043d\u0456\u0446\u0430"\ + "\u0441\u0443\u0431\u043e\u0442\u0430"] + ::msgcat::mcset be MONTHS_ABBREV [list \ + "\u0441\u0442\u0434"\ + "\u043b\u044e\u0442"\ + "\u0441\u043a\u0432"\ + "\u043a\u0440\u0441"\ + "\u043c\u0430\u0439"\ + "\u0447\u0440\u0432"\ + "\u043b\u043f\u043d"\ + "\u0436\u043d\u0432"\ + "\u0432\u0440\u0441"\ + "\u043a\u0441\u0442"\ + "\u043b\u0441\u0442"\ + "\u0441\u043d\u0436"\ + ""] + ::msgcat::mcset be MONTHS_FULL [list \ + "\u0441\u0442\u0443\u0434\u0437\u0435\u043d\u044f"\ + "\u043b\u044e\u0442\u0430\u0433\u0430"\ + "\u0441\u0430\u043a\u0430\u0432\u0456\u043a\u0430"\ + "\u043a\u0440\u0430\u0441\u0430\u0432\u0456\u043a\u0430"\ + "\u043c\u0430\u044f"\ + "\u0447\u0440\u0432\u0435\u043d\u044f"\ + "\u043b\u0456\u043f\u0435\u043d\u044f"\ + "\u0436\u043d\u0456\u045e\u043d\u044f"\ + "\u0432\u0435\u0440\u0430\u0441\u043d\u044f"\ + "\u043a\u0430\u0441\u0442\u0440\u044b\u0447\u043d\u0456\u043a\u0430"\ + "\u043b\u0438\u0441\u0442\u0430\u043f\u0430\u0434\u0430"\ + "\u0441\u043d\u0435\u0436\u043d\u044f"\ + ""] + ::msgcat::mcset be BCE "\u0434\u0430 \u043d.\u0435." + ::msgcat::mcset be CE "\u043d.\u0435." + ::msgcat::mcset be DATE_FORMAT "%e.%m.%Y" + ::msgcat::mcset be TIME_FORMAT "%k.%M.%S" + ::msgcat::mcset be DATE_TIME_FORMAT "%e.%m.%Y %k.%M.%S %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/bg.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/bg.msg new file mode 100644 index 00000000..ff177590 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/bg.msg @@ -0,0 +1,52 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset bg DAYS_OF_WEEK_ABBREV [list \ + "\u041d\u0434"\ + "\u041f\u043d"\ + "\u0412\u0442"\ + "\u0421\u0440"\ + "\u0427\u0442"\ + "\u041f\u0442"\ + "\u0421\u0431"] + ::msgcat::mcset bg DAYS_OF_WEEK_FULL [list \ + "\u041d\u0435\u0434\u0435\u043b\u044f"\ + "\u041f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a"\ + "\u0412\u0442\u043e\u0440\u043d\u0438\u043a"\ + "\u0421\u0440\u044f\u0434\u0430"\ + "\u0427\u0435\u0442\u0432\u044a\u0440\u0442\u044a\u043a"\ + "\u041f\u0435\u0442\u044a\u043a"\ + "\u0421\u044a\u0431\u043e\u0442\u0430"] + ::msgcat::mcset bg MONTHS_ABBREV [list \ + "I"\ + "II"\ + "III"\ + "IV"\ + "V"\ + "VI"\ + "VII"\ + "VIII"\ + "IX"\ + "X"\ + "XI"\ + "XII"\ + ""] + ::msgcat::mcset bg MONTHS_FULL [list \ + "\u042f\u043d\u0443\u0430\u0440\u0438"\ + "\u0424\u0435\u0432\u0440\u0443\u0430\u0440\u0438"\ + "\u041c\u0430\u0440\u0442"\ + "\u0410\u043f\u0440\u0438\u043b"\ + "\u041c\u0430\u0439"\ + "\u042e\u043d\u0438"\ + "\u042e\u043b\u0438"\ + "\u0410\u0432\u0433\u0443\u0441\u0442"\ + "\u0421\u0435\u043f\u0442\u0435\u043c\u0432\u0440\u0438"\ + "\u041e\u043a\u0442\u043e\u043c\u0432\u0440\u0438"\ + "\u041d\u043e\u0435\u043c\u0432\u0440\u0438"\ + "\u0414\u0435\u043a\u0435\u043c\u0432\u0440\u0438"\ + ""] + ::msgcat::mcset bg BCE "\u043f\u0440.\u043d.\u0435." + ::msgcat::mcset bg CE "\u043d.\u0435." + ::msgcat::mcset bg DATE_FORMAT "%Y-%m-%e" + ::msgcat::mcset bg TIME_FORMAT "%k:%M:%S" + ::msgcat::mcset bg DATE_TIME_FORMAT "%Y-%m-%e %k:%M:%S %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/bn.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/bn.msg new file mode 100644 index 00000000..664b9d84 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/bn.msg @@ -0,0 +1,49 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset bn DAYS_OF_WEEK_ABBREV [list \ + "\u09b0\u09ac\u09bf"\ + "\u09b8\u09cb\u09ae"\ + "\u09ae\u0999\u0997\u09b2"\ + "\u09ac\u09c1\u09a7"\ + "\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf"\ + "\u09b6\u09c1\u0995\u09cd\u09b0"\ + "\u09b6\u09a8\u09bf"] + ::msgcat::mcset bn DAYS_OF_WEEK_FULL [list \ + "\u09b0\u09ac\u09bf\u09ac\u09be\u09b0"\ + "\u09b8\u09cb\u09ae\u09ac\u09be\u09b0"\ + "\u09ae\u0999\u0997\u09b2\u09ac\u09be\u09b0"\ + "\u09ac\u09c1\u09a7\u09ac\u09be\u09b0"\ + "\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf\u09ac\u09be\u09b0"\ + "\u09b6\u09c1\u0995\u09cd\u09b0\u09ac\u09be\u09b0"\ + "\u09b6\u09a8\u09bf\u09ac\u09be\u09b0"] + ::msgcat::mcset bn MONTHS_ABBREV [list \ + "\u099c\u09be\u09a8\u09c1\u09df\u09be\u09b0\u09c0"\ + "\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09df\u09be\u09b0\u09c0"\ + "\u09ae\u09be\u09b0\u09cd\u099a"\ + "\u098f\u09aa\u09cd\u09b0\u09bf\u09b2"\ + "\u09ae\u09c7"\ + "\u099c\u09c1\u09a8"\ + "\u099c\u09c1\u09b2\u09be\u0987"\ + "\u0986\u0997\u09b8\u09cd\u099f"\ + "\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0"\ + "\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0"\ + "\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0"\ + "\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0"\ + ""] + ::msgcat::mcset bn MONTHS_FULL [list \ + "\u099c\u09be\u09a8\u09c1\u09df\u09be\u09b0\u09c0"\ + "\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09df\u09be\u09b0\u09c0"\ + "\u09ae\u09be\u09b0\u09cd\u099a"\ + "\u098f\u09aa\u09cd\u09b0\u09bf\u09b2"\ + "\u09ae\u09c7"\ + "\u099c\u09c1\u09a8"\ + "\u099c\u09c1\u09b2\u09be\u0987"\ + "\u0986\u0997\u09b8\u09cd\u099f"\ + "\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0"\ + "\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0"\ + "\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0"\ + "\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0"\ + ""] + ::msgcat::mcset bn AM "\u09aa\u09c2\u09b0\u09cd\u09ac\u09be\u09b9\u09cd\u09a3" + ::msgcat::mcset bn PM "\u0985\u09aa\u09b0\u09be\u09b9\u09cd\u09a3" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/bn_in.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/bn_in.msg new file mode 100644 index 00000000..28c000f2 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/bn_in.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset bn_IN DATE_FORMAT "%A %d %b %Y" + ::msgcat::mcset bn_IN TIME_FORMAT_12 "%I:%M:%S %z" + ::msgcat::mcset bn_IN DATE_TIME_FORMAT "%A %d %b %Y %I:%M:%S %z %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/ca.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/ca.msg new file mode 100644 index 00000000..36c97725 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/ca.msg @@ -0,0 +1,50 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset ca DAYS_OF_WEEK_ABBREV [list \ + "dg."\ + "dl."\ + "dt."\ + "dc."\ + "dj."\ + "dv."\ + "ds."] + ::msgcat::mcset ca DAYS_OF_WEEK_FULL [list \ + "diumenge"\ + "dilluns"\ + "dimarts"\ + "dimecres"\ + "dijous"\ + "divendres"\ + "dissabte"] + ::msgcat::mcset ca MONTHS_ABBREV [list \ + "gen."\ + "feb."\ + "mar\u00e7"\ + "abr."\ + "maig"\ + "juny"\ + "jul."\ + "ag."\ + "set."\ + "oct."\ + "nov."\ + "des."\ + ""] + ::msgcat::mcset ca MONTHS_FULL [list \ + "gener"\ + "febrer"\ + "mar\u00e7"\ + "abril"\ + "maig"\ + "juny"\ + "juliol"\ + "agost"\ + "setembre"\ + "octubre"\ + "novembre"\ + "desembre"\ + ""] + ::msgcat::mcset ca DATE_FORMAT "%d/%m/%Y" + ::msgcat::mcset ca TIME_FORMAT "%H:%M:%S" + ::msgcat::mcset ca DATE_TIME_FORMAT "%d/%m/%Y %H:%M:%S %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/cs.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/cs.msg new file mode 100644 index 00000000..8db8bdd8 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/cs.msg @@ -0,0 +1,54 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset cs DAYS_OF_WEEK_ABBREV [list \ + "Ne"\ + "Po"\ + "\u00dat"\ + "St"\ + "\u010ct"\ + "P\u00e1"\ + "So"] + ::msgcat::mcset cs DAYS_OF_WEEK_FULL [list \ + "Ned\u011ble"\ + "Pond\u011bl\u00ed"\ + "\u00dater\u00fd"\ + "St\u0159eda"\ + "\u010ctvrtek"\ + "P\u00e1tek"\ + "Sobota"] + ::msgcat::mcset cs MONTHS_ABBREV [list \ + "I"\ + "II"\ + "III"\ + "IV"\ + "V"\ + "VI"\ + "VII"\ + "VIII"\ + "IX"\ + "X"\ + "XI"\ + "XII"\ + ""] + ::msgcat::mcset cs MONTHS_FULL [list \ + "leden"\ + "\u00fanor"\ + "b\u0159ezen"\ + "duben"\ + "kv\u011bten"\ + "\u010derven"\ + "\u010dervenec"\ + "srpen"\ + "z\u00e1\u0159\u00ed"\ + "\u0159\u00edjen"\ + "listopad"\ + "prosinec"\ + ""] + ::msgcat::mcset cs BCE "p\u0159.Kr." + ::msgcat::mcset cs CE "po Kr." + ::msgcat::mcset cs AM "dop." + ::msgcat::mcset cs PM "odp." + ::msgcat::mcset cs DATE_FORMAT "%e.%m.%Y" + ::msgcat::mcset cs TIME_FORMAT "%k:%M:%S" + ::msgcat::mcset cs DATE_TIME_FORMAT "%e.%m.%Y %k:%M:%S %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/da.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/da.msg new file mode 100644 index 00000000..e4fec7f0 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/da.msg @@ -0,0 +1,52 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset da DAYS_OF_WEEK_ABBREV [list \ + "s\u00f8"\ + "ma"\ + "ti"\ + "on"\ + "to"\ + "fr"\ + "l\u00f8"] + ::msgcat::mcset da DAYS_OF_WEEK_FULL [list \ + "s\u00f8ndag"\ + "mandag"\ + "tirsdag"\ + "onsdag"\ + "torsdag"\ + "fredag"\ + "l\u00f8rdag"] + ::msgcat::mcset da MONTHS_ABBREV [list \ + "jan"\ + "feb"\ + "mar"\ + "apr"\ + "maj"\ + "jun"\ + "jul"\ + "aug"\ + "sep"\ + "okt"\ + "nov"\ + "dec"\ + ""] + ::msgcat::mcset da MONTHS_FULL [list \ + "januar"\ + "februar"\ + "marts"\ + "april"\ + "maj"\ + "juni"\ + "juli"\ + "august"\ + "september"\ + "oktober"\ + "november"\ + "december"\ + ""] + ::msgcat::mcset da BCE "f.Kr." + ::msgcat::mcset da CE "e.Kr." + ::msgcat::mcset da DATE_FORMAT "%d-%m-%Y" + ::msgcat::mcset da TIME_FORMAT "%H:%M:%S" + ::msgcat::mcset da DATE_TIME_FORMAT "%d-%m-%Y %H:%M:%S %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/de.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/de.msg new file mode 100644 index 00000000..9eb31454 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/de.msg @@ -0,0 +1,54 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset de DAYS_OF_WEEK_ABBREV [list \ + "So"\ + "Mo"\ + "Di"\ + "Mi"\ + "Do"\ + "Fr"\ + "Sa"] + ::msgcat::mcset de DAYS_OF_WEEK_FULL [list \ + "Sonntag"\ + "Montag"\ + "Dienstag"\ + "Mittwoch"\ + "Donnerstag"\ + "Freitag"\ + "Samstag"] + ::msgcat::mcset de MONTHS_ABBREV [list \ + "Jan"\ + "Feb"\ + "Mrz"\ + "Apr"\ + "Mai"\ + "Jun"\ + "Jul"\ + "Aug"\ + "Sep"\ + "Okt"\ + "Nov"\ + "Dez"\ + ""] + ::msgcat::mcset de MONTHS_FULL [list \ + "Januar"\ + "Februar"\ + "M\u00e4rz"\ + "April"\ + "Mai"\ + "Juni"\ + "Juli"\ + "August"\ + "September"\ + "Oktober"\ + "November"\ + "Dezember"\ + ""] + ::msgcat::mcset de BCE "v. Chr." + ::msgcat::mcset de CE "n. Chr." + ::msgcat::mcset de AM "vorm." + ::msgcat::mcset de PM "nachm." + ::msgcat::mcset de DATE_FORMAT "%d.%m.%Y" + ::msgcat::mcset de TIME_FORMAT "%H:%M:%S" + ::msgcat::mcset de DATE_TIME_FORMAT "%d.%m.%Y %H:%M:%S %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/de_at.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/de_at.msg new file mode 100644 index 00000000..61bc2666 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/de_at.msg @@ -0,0 +1,35 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset de_AT MONTHS_ABBREV [list \ + "J\u00e4n"\ + "Feb"\ + "M\u00e4r"\ + "Apr"\ + "Mai"\ + "Jun"\ + "Jul"\ + "Aug"\ + "Sep"\ + "Okt"\ + "Nov"\ + "Dez"\ + ""] + ::msgcat::mcset de_AT MONTHS_FULL [list \ + "J\u00e4nner"\ + "Februar"\ + "M\u00e4rz"\ + "April"\ + "Mai"\ + "Juni"\ + "Juli"\ + "August"\ + "September"\ + "Oktober"\ + "November"\ + "Dezember"\ + ""] + ::msgcat::mcset de_AT DATE_FORMAT "%Y-%m-%d" + ::msgcat::mcset de_AT TIME_FORMAT "%T" + ::msgcat::mcset de_AT TIME_FORMAT_12 "%T" + ::msgcat::mcset de_AT DATE_TIME_FORMAT "%a %d %b %Y %T %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/de_be.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/de_be.msg new file mode 100644 index 00000000..3614763a --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/de_be.msg @@ -0,0 +1,53 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset de_BE DAYS_OF_WEEK_ABBREV [list \ + "Son"\ + "Mon"\ + "Die"\ + "Mit"\ + "Don"\ + "Fre"\ + "Sam"] + ::msgcat::mcset de_BE DAYS_OF_WEEK_FULL [list \ + "Sonntag"\ + "Montag"\ + "Dienstag"\ + "Mittwoch"\ + "Donnerstag"\ + "Freitag"\ + "Samstag"] + ::msgcat::mcset de_BE MONTHS_ABBREV [list \ + "Jan"\ + "Feb"\ + "M\u00e4r"\ + "Apr"\ + "Mai"\ + "Jun"\ + "Jul"\ + "Aug"\ + "Sep"\ + "Okt"\ + "Nov"\ + "Dez"\ + ""] + ::msgcat::mcset de_BE MONTHS_FULL [list \ + "Januar"\ + "Februar"\ + "M\u00e4rz"\ + "April"\ + "Mai"\ + "Juni"\ + "Juli"\ + "August"\ + "September"\ + "Oktober"\ + "November"\ + "Dezember"\ + ""] + ::msgcat::mcset de_BE AM "vorm" + ::msgcat::mcset de_BE PM "nachm" + ::msgcat::mcset de_BE DATE_FORMAT "%Y-%m-%d" + ::msgcat::mcset de_BE TIME_FORMAT "%T" + ::msgcat::mcset de_BE TIME_FORMAT_12 "%T" + ::msgcat::mcset de_BE DATE_TIME_FORMAT "%a %d %b %Y %T %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/el.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/el.msg new file mode 100644 index 00000000..ac19f62d --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/el.msg @@ -0,0 +1,52 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset el DAYS_OF_WEEK_ABBREV [list \ + "\u039a\u03c5\u03c1"\ + "\u0394\u03b5\u03c5"\ + "\u03a4\u03c1\u03b9"\ + "\u03a4\u03b5\u03c4"\ + "\u03a0\u03b5\u03bc"\ + "\u03a0\u03b1\u03c1"\ + "\u03a3\u03b1\u03b2"] + ::msgcat::mcset el DAYS_OF_WEEK_FULL [list \ + "\u039a\u03c5\u03c1\u03b9\u03b1\u03ba\u03ae"\ + "\u0394\u03b5\u03c5\u03c4\u03ad\u03c1\u03b1"\ + "\u03a4\u03c1\u03af\u03c4\u03b7"\ + "\u03a4\u03b5\u03c4\u03ac\u03c1\u03c4\u03b7"\ + "\u03a0\u03ad\u03bc\u03c0\u03c4\u03b7"\ + "\u03a0\u03b1\u03c1\u03b1\u03c3\u03ba\u03b5\u03c5\u03ae"\ + "\u03a3\u03ac\u03b2\u03b2\u03b1\u03c4\u03bf"] + ::msgcat::mcset el MONTHS_ABBREV [list \ + "\u0399\u03b1\u03bd"\ + "\u03a6\u03b5\u03b2"\ + "\u039c\u03b1\u03c1"\ + "\u0391\u03c0\u03c1"\ + "\u039c\u03b1\u03ca"\ + "\u0399\u03bf\u03c5\u03bd"\ + "\u0399\u03bf\u03c5\u03bb"\ + "\u0391\u03c5\u03b3"\ + "\u03a3\u03b5\u03c0"\ + "\u039f\u03ba\u03c4"\ + "\u039d\u03bf\u03b5"\ + "\u0394\u03b5\u03ba"\ + ""] + ::msgcat::mcset el MONTHS_FULL [list \ + "\u0399\u03b1\u03bd\u03bf\u03c5\u03ac\u03c1\u03b9\u03bf\u03c2"\ + "\u03a6\u03b5\u03b2\u03c1\u03bf\u03c5\u03ac\u03c1\u03b9\u03bf\u03c2"\ + "\u039c\u03ac\u03c1\u03c4\u03b9\u03bf\u03c2"\ + "\u0391\u03c0\u03c1\u03af\u03bb\u03b9\u03bf\u03c2"\ + "\u039c\u03ac\u03ca\u03bf\u03c2"\ + "\u0399\u03bf\u03cd\u03bd\u03b9\u03bf\u03c2"\ + "\u0399\u03bf\u03cd\u03bb\u03b9\u03bf\u03c2"\ + "\u0391\u03cd\u03b3\u03bf\u03c5\u03c3\u03c4\u03bf\u03c2"\ + "\u03a3\u03b5\u03c0\u03c4\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2"\ + "\u039f\u03ba\u03c4\u03ce\u03b2\u03c1\u03b9\u03bf\u03c2"\ + "\u039d\u03bf\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2"\ + "\u0394\u03b5\u03ba\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2"\ + ""] + ::msgcat::mcset el AM "\u03c0\u03bc" + ::msgcat::mcset el PM "\u03bc\u03bc" + ::msgcat::mcset el DATE_FORMAT "%e/%m/%Y" + ::msgcat::mcset el TIME_FORMAT_12 "%l:%M:%S %P" + ::msgcat::mcset el DATE_TIME_FORMAT "%e/%m/%Y %l:%M:%S %P %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/en_au.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/en_au.msg new file mode 100644 index 00000000..7f9870c9 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/en_au.msg @@ -0,0 +1,7 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset en_AU DATE_FORMAT "%e/%m/%Y" + ::msgcat::mcset en_AU TIME_FORMAT "%H:%M:%S" + ::msgcat::mcset en_AU TIME_FORMAT_12 "%I:%M:%S %P %z" + ::msgcat::mcset en_AU DATE_TIME_FORMAT "%e/%m/%Y %H:%M:%S %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/en_be.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/en_be.msg new file mode 100644 index 00000000..5072986d --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/en_be.msg @@ -0,0 +1,7 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset en_BE DATE_FORMAT "%d %b %Y" + ::msgcat::mcset en_BE TIME_FORMAT "%k:%M:%S" + ::msgcat::mcset en_BE TIME_FORMAT_12 "%k h %M min %S s %z" + ::msgcat::mcset en_BE DATE_TIME_FORMAT "%d %b %Y %k:%M:%S %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/en_bw.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/en_bw.msg new file mode 100644 index 00000000..8fd20c7e --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/en_bw.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset en_BW DATE_FORMAT "%d %B %Y" + ::msgcat::mcset en_BW TIME_FORMAT_12 "%l:%M:%S %P" + ::msgcat::mcset en_BW DATE_TIME_FORMAT "%d %B %Y %l:%M:%S %P %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/en_ca.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/en_ca.msg new file mode 100644 index 00000000..278efe71 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/en_ca.msg @@ -0,0 +1,7 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset en_CA DATE_FORMAT "%d/%m/%y" + ::msgcat::mcset en_CA TIME_FORMAT "%r" + ::msgcat::mcset en_CA TIME_FORMAT_12 "%I:%M:%S %p" + ::msgcat::mcset en_CA DATE_TIME_FORMAT "%a %d %b %Y %r %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/en_gb.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/en_gb.msg new file mode 100644 index 00000000..5c61c43c --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/en_gb.msg @@ -0,0 +1,7 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset en_GB DATE_FORMAT "%d/%m/%y" + ::msgcat::mcset en_GB TIME_FORMAT "%T" + ::msgcat::mcset en_GB TIME_FORMAT_12 "%T" + ::msgcat::mcset en_GB DATE_TIME_FORMAT "%a %d %b %Y %T %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/en_hk.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/en_hk.msg new file mode 100644 index 00000000..8b33bc06 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/en_hk.msg @@ -0,0 +1,8 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset en_HK AM "AM" + ::msgcat::mcset en_HK PM "PM" + ::msgcat::mcset en_HK DATE_FORMAT "%B %e, %Y" + ::msgcat::mcset en_HK TIME_FORMAT_12 "%l:%M:%S %P" + ::msgcat::mcset en_HK DATE_TIME_FORMAT "%B %e, %Y %l:%M:%S %P %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/en_ie.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/en_ie.msg new file mode 100644 index 00000000..ba621cf2 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/en_ie.msg @@ -0,0 +1,7 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset en_IE DATE_FORMAT "%d/%m/%y" + ::msgcat::mcset en_IE TIME_FORMAT "%T" + ::msgcat::mcset en_IE TIME_FORMAT_12 "%T" + ::msgcat::mcset en_IE DATE_TIME_FORMAT "%a %d %b %Y %T %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/en_in.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/en_in.msg new file mode 100644 index 00000000..a1f155d2 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/en_in.msg @@ -0,0 +1,8 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset en_IN AM "AM" + ::msgcat::mcset en_IN PM "PM" + ::msgcat::mcset en_IN DATE_FORMAT "%d %B %Y" + ::msgcat::mcset en_IN TIME_FORMAT "%H:%M:%S" + ::msgcat::mcset en_IN DATE_TIME_FORMAT "%d %B %Y %H:%M:%S %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/en_nz.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/en_nz.msg new file mode 100644 index 00000000..b419017a --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/en_nz.msg @@ -0,0 +1,7 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset en_NZ DATE_FORMAT "%e/%m/%Y" + ::msgcat::mcset en_NZ TIME_FORMAT "%H:%M:%S" + ::msgcat::mcset en_NZ TIME_FORMAT_12 "%I:%M:%S %P %z" + ::msgcat::mcset en_NZ DATE_TIME_FORMAT "%e/%m/%Y %H:%M:%S %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/en_ph.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/en_ph.msg new file mode 100644 index 00000000..682666d5 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/en_ph.msg @@ -0,0 +1,8 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset en_PH AM "AM" + ::msgcat::mcset en_PH PM "PM" + ::msgcat::mcset en_PH DATE_FORMAT "%B %e, %Y" + ::msgcat::mcset en_PH TIME_FORMAT_12 "%l:%M:%S %P" + ::msgcat::mcset en_PH DATE_TIME_FORMAT "%B %e, %Y %l:%M:%S %P %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/en_sg.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/en_sg.msg new file mode 100644 index 00000000..4dc5b1d3 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/en_sg.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset en_SG DATE_FORMAT "%d %b %Y" + ::msgcat::mcset en_SG TIME_FORMAT_12 "%P %I:%M:%S" + ::msgcat::mcset en_SG DATE_TIME_FORMAT "%d %b %Y %P %I:%M:%S %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/en_za.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/en_za.msg new file mode 100644 index 00000000..fe43797f --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/en_za.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset en_ZA DATE_FORMAT "%Y/%m/%d" + ::msgcat::mcset en_ZA TIME_FORMAT_12 "%I:%M:%S" + ::msgcat::mcset en_ZA DATE_TIME_FORMAT "%Y/%m/%d %I:%M:%S %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/en_zw.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/en_zw.msg new file mode 100644 index 00000000..2a5804fa --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/en_zw.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset en_ZW DATE_FORMAT "%d %B %Y" + ::msgcat::mcset en_ZW TIME_FORMAT_12 "%l:%M:%S %P" + ::msgcat::mcset en_ZW DATE_TIME_FORMAT "%d %B %Y %l:%M:%S %P %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/eo.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/eo.msg new file mode 100644 index 00000000..1d2a24fe --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/eo.msg @@ -0,0 +1,54 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset eo DAYS_OF_WEEK_ABBREV [list \ + "di"\ + "lu"\ + "ma"\ + "me"\ + "\u0135a"\ + "ve"\ + "sa"] + ::msgcat::mcset eo DAYS_OF_WEEK_FULL [list \ + "diman\u0109o"\ + "lundo"\ + "mardo"\ + "merkredo"\ + "\u0135a\u016ddo"\ + "vendredo"\ + "sabato"] + ::msgcat::mcset eo MONTHS_ABBREV [list \ + "jan"\ + "feb"\ + "mar"\ + "apr"\ + "maj"\ + "jun"\ + "jul"\ + "a\u016dg"\ + "sep"\ + "okt"\ + "nov"\ + "dec"\ + ""] + ::msgcat::mcset eo MONTHS_FULL [list \ + "januaro"\ + "februaro"\ + "marto"\ + "aprilo"\ + "majo"\ + "junio"\ + "julio"\ + "a\u016dgusto"\ + "septembro"\ + "oktobro"\ + "novembro"\ + "decembro"\ + ""] + ::msgcat::mcset eo BCE "aK" + ::msgcat::mcset eo CE "pK" + ::msgcat::mcset eo AM "atm" + ::msgcat::mcset eo PM "ptm" + ::msgcat::mcset eo DATE_FORMAT "%Y-%b-%d" + ::msgcat::mcset eo TIME_FORMAT "%H:%M:%S" + ::msgcat::mcset eo DATE_TIME_FORMAT "%Y-%b-%d %H:%M:%S %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/es.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/es.msg new file mode 100644 index 00000000..a24f0a1b --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/es.msg @@ -0,0 +1,52 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset es DAYS_OF_WEEK_ABBREV [list \ + "dom"\ + "lun"\ + "mar"\ + "mi\u00e9"\ + "jue"\ + "vie"\ + "s\u00e1b"] + ::msgcat::mcset es DAYS_OF_WEEK_FULL [list \ + "domingo"\ + "lunes"\ + "martes"\ + "mi\u00e9rcoles"\ + "jueves"\ + "viernes"\ + "s\u00e1bado"] + ::msgcat::mcset es MONTHS_ABBREV [list \ + "ene"\ + "feb"\ + "mar"\ + "abr"\ + "may"\ + "jun"\ + "jul"\ + "ago"\ + "sep"\ + "oct"\ + "nov"\ + "dic"\ + ""] + ::msgcat::mcset es MONTHS_FULL [list \ + "enero"\ + "febrero"\ + "marzo"\ + "abril"\ + "mayo"\ + "junio"\ + "julio"\ + "agosto"\ + "septiembre"\ + "octubre"\ + "noviembre"\ + "diciembre"\ + ""] + ::msgcat::mcset es BCE "a.C." + ::msgcat::mcset es CE "d.C." + ::msgcat::mcset es DATE_FORMAT "%e de %B de %Y" + ::msgcat::mcset es TIME_FORMAT "%k:%M:%S" + ::msgcat::mcset es DATE_TIME_FORMAT "%e de %B de %Y %k:%M:%S %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/es_ar.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/es_ar.msg new file mode 100644 index 00000000..7d350274 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/es_ar.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset es_AR DATE_FORMAT "%d/%m/%Y" + ::msgcat::mcset es_AR TIME_FORMAT "%H:%M:%S" + ::msgcat::mcset es_AR DATE_TIME_FORMAT "%d/%m/%Y %H:%M:%S %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/es_bo.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/es_bo.msg new file mode 100644 index 00000000..498ad0d1 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/es_bo.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset es_BO DATE_FORMAT "%d-%m-%Y" + ::msgcat::mcset es_BO TIME_FORMAT_12 "%I:%M:%S %P" + ::msgcat::mcset es_BO DATE_TIME_FORMAT "%d-%m-%Y %I:%M:%S %P %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/es_cl.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/es_cl.msg new file mode 100644 index 00000000..31d465c9 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/es_cl.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset es_CL DATE_FORMAT "%d-%m-%Y" + ::msgcat::mcset es_CL TIME_FORMAT_12 "%I:%M:%S %P" + ::msgcat::mcset es_CL DATE_TIME_FORMAT "%d-%m-%Y %I:%M:%S %P %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/es_co.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/es_co.msg new file mode 100644 index 00000000..77e57f0b --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/es_co.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset es_CO DATE_FORMAT "%e/%m/%Y" + ::msgcat::mcset es_CO TIME_FORMAT_12 "%I:%M:%S %P" + ::msgcat::mcset es_CO DATE_TIME_FORMAT "%e/%m/%Y %I:%M:%S %P %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/es_cr.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/es_cr.msg new file mode 100644 index 00000000..7a652fa4 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/es_cr.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset es_CR DATE_FORMAT "%d/%m/%Y" + ::msgcat::mcset es_CR TIME_FORMAT_12 "%I:%M:%S %P" + ::msgcat::mcset es_CR DATE_TIME_FORMAT "%d/%m/%Y %I:%M:%S %P %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/es_do.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/es_do.msg new file mode 100644 index 00000000..0e283da8 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/es_do.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset es_DO DATE_FORMAT "%m/%d/%Y" + ::msgcat::mcset es_DO TIME_FORMAT_12 "%I:%M:%S %P" + ::msgcat::mcset es_DO DATE_TIME_FORMAT "%m/%d/%Y %I:%M:%S %P %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/es_ec.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/es_ec.msg new file mode 100644 index 00000000..9e921e02 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/es_ec.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset es_EC DATE_FORMAT "%d/%m/%Y" + ::msgcat::mcset es_EC TIME_FORMAT_12 "%I:%M:%S %P" + ::msgcat::mcset es_EC DATE_TIME_FORMAT "%d/%m/%Y %I:%M:%S %P %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/es_gt.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/es_gt.msg new file mode 100644 index 00000000..ecd6faf9 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/es_gt.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset es_GT DATE_FORMAT "%e/%m/%Y" + ::msgcat::mcset es_GT TIME_FORMAT_12 "%I:%M:%S %P" + ::msgcat::mcset es_GT DATE_TIME_FORMAT "%e/%m/%Y %I:%M:%S %P %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/es_hn.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/es_hn.msg new file mode 100644 index 00000000..a758ca2b --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/es_hn.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset es_HN DATE_FORMAT "%m-%d-%Y" + ::msgcat::mcset es_HN TIME_FORMAT_12 "%I:%M:%S %P" + ::msgcat::mcset es_HN DATE_TIME_FORMAT "%m-%d-%Y %I:%M:%S %P %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/es_mx.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/es_mx.msg new file mode 100644 index 00000000..7cfb545b --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/es_mx.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset es_MX DATE_FORMAT "%e/%m/%Y" + ::msgcat::mcset es_MX TIME_FORMAT_12 "%I:%M:%S %P" + ::msgcat::mcset es_MX DATE_TIME_FORMAT "%e/%m/%Y %I:%M:%S %P %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/es_ni.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/es_ni.msg new file mode 100644 index 00000000..7c394953 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/es_ni.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset es_NI DATE_FORMAT "%m-%d-%Y" + ::msgcat::mcset es_NI TIME_FORMAT_12 "%I:%M:%S %P" + ::msgcat::mcset es_NI DATE_TIME_FORMAT "%m-%d-%Y %I:%M:%S %P %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/es_pa.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/es_pa.msg new file mode 100644 index 00000000..cecacdce --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/es_pa.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset es_PA DATE_FORMAT "%m/%d/%Y" + ::msgcat::mcset es_PA TIME_FORMAT_12 "%I:%M:%S %P" + ::msgcat::mcset es_PA DATE_TIME_FORMAT "%m/%d/%Y %I:%M:%S %P %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/es_pe.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/es_pe.msg new file mode 100644 index 00000000..9f90595f --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/es_pe.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset es_PE DATE_FORMAT "%d/%m/%Y" + ::msgcat::mcset es_PE TIME_FORMAT_12 "%I:%M:%S %P" + ::msgcat::mcset es_PE DATE_TIME_FORMAT "%d/%m/%Y %I:%M:%S %P %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/es_pr.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/es_pr.msg new file mode 100644 index 00000000..8511b126 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/es_pr.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset es_PR DATE_FORMAT "%m-%d-%Y" + ::msgcat::mcset es_PR TIME_FORMAT_12 "%I:%M:%S %P" + ::msgcat::mcset es_PR DATE_TIME_FORMAT "%m-%d-%Y %I:%M:%S %P %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/es_py.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/es_py.msg new file mode 100644 index 00000000..aa93d36b --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/es_py.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset es_PY DATE_FORMAT "%d/%m/%Y" + ::msgcat::mcset es_PY TIME_FORMAT_12 "%I:%M:%S %P" + ::msgcat::mcset es_PY DATE_TIME_FORMAT "%d/%m/%Y %I:%M:%S %P %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/es_sv.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/es_sv.msg new file mode 100644 index 00000000..fc7954d6 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/es_sv.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset es_SV DATE_FORMAT "%m-%d-%Y" + ::msgcat::mcset es_SV TIME_FORMAT_12 "%I:%M:%S %P" + ::msgcat::mcset es_SV DATE_TIME_FORMAT "%m-%d-%Y %I:%M:%S %P %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/es_uy.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/es_uy.msg new file mode 100644 index 00000000..b33525c0 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/es_uy.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset es_UY DATE_FORMAT "%d/%m/%Y" + ::msgcat::mcset es_UY TIME_FORMAT_12 "%I:%M:%S %P" + ::msgcat::mcset es_UY DATE_TIME_FORMAT "%d/%m/%Y %I:%M:%S %P %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/es_ve.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/es_ve.msg new file mode 100644 index 00000000..7c2a7b0a --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/es_ve.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset es_VE DATE_FORMAT "%d/%m/%Y" + ::msgcat::mcset es_VE TIME_FORMAT_12 "%I:%M:%S %P" + ::msgcat::mcset es_VE DATE_TIME_FORMAT "%d/%m/%Y %I:%M:%S %P %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/et.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/et.msg new file mode 100644 index 00000000..8d32e9e5 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/et.msg @@ -0,0 +1,52 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset et DAYS_OF_WEEK_ABBREV [list \ + "P"\ + "E"\ + "T"\ + "K"\ + "N"\ + "R"\ + "L"] + ::msgcat::mcset et DAYS_OF_WEEK_FULL [list \ + "p\u00fchap\u00e4ev"\ + "esmasp\u00e4ev"\ + "teisip\u00e4ev"\ + "kolmap\u00e4ev"\ + "neljap\u00e4ev"\ + "reede"\ + "laup\u00e4ev"] + ::msgcat::mcset et MONTHS_ABBREV [list \ + "Jaan"\ + "Veebr"\ + "M\u00e4rts"\ + "Apr"\ + "Mai"\ + "Juuni"\ + "Juuli"\ + "Aug"\ + "Sept"\ + "Okt"\ + "Nov"\ + "Dets"\ + ""] + ::msgcat::mcset et MONTHS_FULL [list \ + "Jaanuar"\ + "Veebruar"\ + "M\u00e4rts"\ + "Aprill"\ + "Mai"\ + "Juuni"\ + "Juuli"\ + "August"\ + "September"\ + "Oktoober"\ + "November"\ + "Detsember"\ + ""] + ::msgcat::mcset et BCE "e.m.a." + ::msgcat::mcset et CE "m.a.j." + ::msgcat::mcset et DATE_FORMAT "%e-%m-%Y" + ::msgcat::mcset et TIME_FORMAT "%k:%M:%S" + ::msgcat::mcset et DATE_TIME_FORMAT "%e-%m-%Y %k:%M:%S %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/eu.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/eu.msg new file mode 100644 index 00000000..cf708b6b --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/eu.msg @@ -0,0 +1,47 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset eu DAYS_OF_WEEK_ABBREV [list \ + "igandea"\ + "astelehena"\ + "asteartea"\ + "asteazkena"\ + "osteguna"\ + "ostirala"\ + "larunbata"] + ::msgcat::mcset eu DAYS_OF_WEEK_FULL [list \ + "igandea"\ + "astelehena"\ + "asteartea"\ + "asteazkena"\ + "osteguna"\ + "ostirala"\ + "larunbata"] + ::msgcat::mcset eu MONTHS_ABBREV [list \ + "urt"\ + "ots"\ + "mar"\ + "api"\ + "mai"\ + "eka"\ + "uzt"\ + "abu"\ + "ira"\ + "urr"\ + "aza"\ + "abe"\ + ""] + ::msgcat::mcset eu MONTHS_FULL [list \ + "urtarrila"\ + "otsaila"\ + "martxoa"\ + "apirila"\ + "maiatza"\ + "ekaina"\ + "uztaila"\ + "abuztua"\ + "iraila"\ + "urria"\ + "azaroa"\ + "abendua"\ + ""] +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/eu_es.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/eu_es.msg new file mode 100644 index 00000000..2694418d --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/eu_es.msg @@ -0,0 +1,7 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset eu_ES DATE_FORMAT "%a, %Yeko %bren %da" + ::msgcat::mcset eu_ES TIME_FORMAT "%T" + ::msgcat::mcset eu_ES TIME_FORMAT_12 "%T" + ::msgcat::mcset eu_ES DATE_TIME_FORMAT "%y-%m-%d %T %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/fa.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/fa.msg new file mode 100644 index 00000000..89b2f908 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/fa.msg @@ -0,0 +1,47 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset fa DAYS_OF_WEEK_ABBREV [list \ + "\u06cc\u2214"\ + "\u062f\u2214"\ + "\u0633\u2214"\ + "\u0686\u2214"\ + "\u067e\u2214"\ + "\u062c\u2214"\ + "\u0634\u2214"] + ::msgcat::mcset fa DAYS_OF_WEEK_FULL [list \ + "\u06cc\u06cc\u200c\u0634\u0646\u0628\u0647"\ + "\u062f\u0648\u0634\u0646\u0628\u0647"\ + "\u0633\u0647\u200c\u0634\u0646\u0628\u0647"\ + "\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647"\ + "\u067e\u0646\u062c\u200c\u0634\u0646\u0628\u0647"\ + "\u062c\u0645\u0639\u0647"\ + "\u0634\u0646\u0628\u0647"] + ::msgcat::mcset fa MONTHS_ABBREV [list \ + "\u0698\u0627\u0646"\ + "\u0641\u0648\u0631"\ + "\u0645\u0627\u0631"\ + "\u0622\u0648\u0631"\ + "\u0645\u0640\u0647"\ + "\u0698\u0648\u0646"\ + "\u0698\u0648\u06cc"\ + "\u0627\u0648\u062a"\ + "\u0633\u067e\u062a"\ + "\u0627\u0643\u062a"\ + "\u0646\u0648\u0627"\ + "\u062f\u0633\u0627"\ + ""] + ::msgcat::mcset fa MONTHS_FULL [list \ + "\u0698\u0627\u0646\u0648\u06cc\u0647"\ + "\u0641\u0648\u0631\u0648\u06cc\u0647"\ + "\u0645\u0627\u0631\u0633"\ + "\u0622\u0648\u0631\u06cc\u0644"\ + "\u0645\u0647"\ + "\u0698\u0648\u0626\u0646"\ + "\u0698\u0648\u0626\u06cc\u0647"\ + "\u0627\u0648\u062a"\ + "\u0633\u067e\u062a\u0627\u0645\u0628\u0631"\ + "\u0627\u0643\u062a\u0628\u0631"\ + "\u0646\u0648\u0627\u0645\u0628\u0631"\ + "\u062f\u0633\u0627\u0645\u0628\u0631"\ + ""] +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/fa_in.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/fa_in.msg new file mode 100644 index 00000000..adc9e91d --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/fa_in.msg @@ -0,0 +1,52 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset fa_IN DAYS_OF_WEEK_ABBREV [list \ + "\u06cc\u2214"\ + "\u062f\u2214"\ + "\u0633\u2214"\ + "\u0686\u2214"\ + "\u067e\u2214"\ + "\u062c\u2214"\ + "\u0634\u2214"] + ::msgcat::mcset fa_IN DAYS_OF_WEEK_FULL [list \ + "\u06cc\u06cc\u200c\u0634\u0646\u0628\u0647"\ + "\u062f\u0648\u0634\u0646\u0628\u0647"\ + "\u0633\u0647\u200c\u0634\u0646\u0628\u0647"\ + "\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647"\ + "\u067e\u0646\u062c\u200c\u0634\u0646\u0628\u0647"\ + "\u062c\u0645\u0639\u0647"\ + "\u0634\u0646\u0628\u0647"] + ::msgcat::mcset fa_IN MONTHS_ABBREV [list \ + "\u0698\u0627\u0646"\ + "\u0641\u0648\u0631"\ + "\u0645\u0627\u0631"\ + "\u0622\u0648\u0631"\ + "\u0645\u0640\u0647"\ + "\u0698\u0648\u0646"\ + "\u0698\u0648\u06cc"\ + "\u0627\u0648\u062a"\ + "\u0633\u067e\u062a"\ + "\u0627\u0643\u062a"\ + "\u0646\u0648\u0627"\ + "\u062f\u0633\u0627"\ + ""] + ::msgcat::mcset fa_IN MONTHS_FULL [list \ + "\u0698\u0627\u0646\u0648\u06cc\u0647"\ + "\u0641\u0648\u0631\u0648\u06cc\u0647"\ + "\u0645\u0627\u0631\u0633"\ + "\u0622\u0648\u0631\u06cc\u0644"\ + "\u0645\u0647"\ + "\u0698\u0648\u0626\u0646"\ + "\u0698\u0648\u0626\u06cc\u0647"\ + "\u0627\u0648\u062a"\ + "\u0633\u067e\u062a\u0627\u0645\u0628\u0631"\ + "\u0627\u0643\u062a\u0628\u0631"\ + "\u0646\u0648\u0627\u0645\u0628\u0631"\ + "\u062f\u0633\u0627\u0645\u0628\u0631"\ + ""] + ::msgcat::mcset fa_IN AM "\u0635\u0628\u062d" + ::msgcat::mcset fa_IN PM "\u0639\u0635\u0631" + ::msgcat::mcset fa_IN DATE_FORMAT "%A %d %B %Y" + ::msgcat::mcset fa_IN TIME_FORMAT_12 "%I:%M:%S %z" + ::msgcat::mcset fa_IN DATE_TIME_FORMAT "%A %d %B %Y %I:%M:%S %z %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/fa_ir.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/fa_ir.msg new file mode 100644 index 00000000..597ce9d7 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/fa_ir.msg @@ -0,0 +1,9 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset fa_IR AM "\u0635\u0628\u062d" + ::msgcat::mcset fa_IR PM "\u0639\u0635\u0631" + ::msgcat::mcset fa_IR DATE_FORMAT "%d\u2044%m\u2044%Y" + ::msgcat::mcset fa_IR TIME_FORMAT "%S:%M:%H" + ::msgcat::mcset fa_IR TIME_FORMAT_12 "%S:%M:%l %P" + ::msgcat::mcset fa_IR DATE_TIME_FORMAT "%d\u2044%m\u2044%Y %S:%M:%H %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/fi.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/fi.msg new file mode 100644 index 00000000..acabba09 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/fi.msg @@ -0,0 +1,50 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset fi DAYS_OF_WEEK_ABBREV [list \ + "su"\ + "ma"\ + "ti"\ + "ke"\ + "to"\ + "pe"\ + "la"] + ::msgcat::mcset fi DAYS_OF_WEEK_FULL [list \ + "sunnuntai"\ + "maanantai"\ + "tiistai"\ + "keskiviikko"\ + "torstai"\ + "perjantai"\ + "lauantai"] + ::msgcat::mcset fi MONTHS_ABBREV [list \ + "tammi"\ + "helmi"\ + "maalis"\ + "huhti"\ + "touko"\ + "kes\u00e4"\ + "hein\u00e4"\ + "elo"\ + "syys"\ + "loka"\ + "marras"\ + "joulu"\ + ""] + ::msgcat::mcset fi MONTHS_FULL [list \ + "tammikuu"\ + "helmikuu"\ + "maaliskuu"\ + "huhtikuu"\ + "toukokuu"\ + "kes\u00e4kuu"\ + "hein\u00e4kuu"\ + "elokuu"\ + "syyskuu"\ + "lokakuu"\ + "marraskuu"\ + "joulukuu"\ + ""] + ::msgcat::mcset fi DATE_FORMAT "%e.%m.%Y" + ::msgcat::mcset fi TIME_FORMAT "%k:%M:%S" + ::msgcat::mcset fi DATE_TIME_FORMAT "%e.%m.%Y %k:%M:%S %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/fo.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/fo.msg new file mode 100644 index 00000000..4696e628 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/fo.msg @@ -0,0 +1,47 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset fo DAYS_OF_WEEK_ABBREV [list \ + "sun"\ + "m\u00e1n"\ + "t\u00fds"\ + "mik"\ + "h\u00f3s"\ + "fr\u00ed"\ + "ley"] + ::msgcat::mcset fo DAYS_OF_WEEK_FULL [list \ + "sunnudagur"\ + "m\u00e1nadagur"\ + "t\u00fdsdagur"\ + "mikudagur"\ + "h\u00f3sdagur"\ + "fr\u00edggjadagur"\ + "leygardagur"] + ::msgcat::mcset fo MONTHS_ABBREV [list \ + "jan"\ + "feb"\ + "mar"\ + "apr"\ + "mai"\ + "jun"\ + "jul"\ + "aug"\ + "sep"\ + "okt"\ + "nov"\ + "des"\ + ""] + ::msgcat::mcset fo MONTHS_FULL [list \ + "januar"\ + "februar"\ + "mars"\ + "apr\u00edl"\ + "mai"\ + "juni"\ + "juli"\ + "august"\ + "september"\ + "oktober"\ + "november"\ + "desember"\ + ""] +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/fo_fo.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/fo_fo.msg new file mode 100644 index 00000000..2392b8e6 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/fo_fo.msg @@ -0,0 +1,7 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset fo_FO DATE_FORMAT "%d/%m-%Y" + ::msgcat::mcset fo_FO TIME_FORMAT "%T" + ::msgcat::mcset fo_FO TIME_FORMAT_12 "%T" + ::msgcat::mcset fo_FO DATE_TIME_FORMAT "%a %d %b %Y %T %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/fr.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/fr.msg new file mode 100644 index 00000000..55b19bf9 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/fr.msg @@ -0,0 +1,52 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset fr DAYS_OF_WEEK_ABBREV [list \ + "dim."\ + "lun."\ + "mar."\ + "mer."\ + "jeu."\ + "ven."\ + "sam."] + ::msgcat::mcset fr DAYS_OF_WEEK_FULL [list \ + "dimanche"\ + "lundi"\ + "mardi"\ + "mercredi"\ + "jeudi"\ + "vendredi"\ + "samedi"] + ::msgcat::mcset fr MONTHS_ABBREV [list \ + "janv."\ + "f\u00e9vr."\ + "mars"\ + "avr."\ + "mai"\ + "juin"\ + "juil."\ + "ao\u00fbt"\ + "sept."\ + "oct."\ + "nov."\ + "d\u00e9c."\ + ""] + ::msgcat::mcset fr MONTHS_FULL [list \ + "janvier"\ + "f\u00e9vrier"\ + "mars"\ + "avril"\ + "mai"\ + "juin"\ + "juillet"\ + "ao\u00fbt"\ + "septembre"\ + "octobre"\ + "novembre"\ + "d\u00e9cembre"\ + ""] + ::msgcat::mcset fr BCE "av. J.-C." + ::msgcat::mcset fr CE "ap. J.-C." + ::msgcat::mcset fr DATE_FORMAT "%e %B %Y" + ::msgcat::mcset fr TIME_FORMAT "%H:%M:%S" + ::msgcat::mcset fr DATE_TIME_FORMAT "%e %B %Y %H:%M:%S %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/fr_be.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/fr_be.msg new file mode 100644 index 00000000..cdb13bd7 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/fr_be.msg @@ -0,0 +1,7 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset fr_BE DATE_FORMAT "%d/%m/%y" + ::msgcat::mcset fr_BE TIME_FORMAT "%T" + ::msgcat::mcset fr_BE TIME_FORMAT_12 "%T" + ::msgcat::mcset fr_BE DATE_TIME_FORMAT "%a %d %b %Y %T %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/fr_ca.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/fr_ca.msg new file mode 100644 index 00000000..00ccfffc --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/fr_ca.msg @@ -0,0 +1,7 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset fr_CA DATE_FORMAT "%Y-%m-%d" + ::msgcat::mcset fr_CA TIME_FORMAT "%T" + ::msgcat::mcset fr_CA TIME_FORMAT_12 "%T" + ::msgcat::mcset fr_CA DATE_TIME_FORMAT "%a %d %b %Y %T %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/fr_ch.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/fr_ch.msg new file mode 100644 index 00000000..7e2bac73 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/fr_ch.msg @@ -0,0 +1,7 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset fr_CH DATE_FORMAT "%d. %m. %y" + ::msgcat::mcset fr_CH TIME_FORMAT "%T" + ::msgcat::mcset fr_CH TIME_FORMAT_12 "%T" + ::msgcat::mcset fr_CH DATE_TIME_FORMAT "%a %d %b %Y %T %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/ga.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/ga.msg new file mode 100644 index 00000000..6edf13aa --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/ga.msg @@ -0,0 +1,47 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset ga DAYS_OF_WEEK_ABBREV [list \ + "Domh"\ + "Luan"\ + "M\u00e1irt"\ + "C\u00e9ad"\ + "D\u00e9ar"\ + "Aoine"\ + "Sath"] + ::msgcat::mcset ga DAYS_OF_WEEK_FULL [list \ + "D\u00e9 Domhnaigh"\ + "D\u00e9 Luain"\ + "D\u00e9 M\u00e1irt"\ + "D\u00e9 C\u00e9adaoin"\ + "D\u00e9ardaoin"\ + "D\u00e9 hAoine"\ + "D\u00e9 Sathairn"] + ::msgcat::mcset ga MONTHS_ABBREV [list \ + "Ean"\ + "Feabh"\ + "M\u00e1rta"\ + "Aib"\ + "Beal"\ + "Meith"\ + "I\u00fail"\ + "L\u00fan"\ + "MF\u00f3mh"\ + "DF\u00f3mh"\ + "Samh"\ + "Noll"\ + ""] + ::msgcat::mcset ga MONTHS_FULL [list \ + "Ean\u00e1ir"\ + "Feabhra"\ + "M\u00e1rta"\ + "Aibre\u00e1n"\ + "M\u00ed na Bealtaine"\ + "Meith"\ + "I\u00fail"\ + "L\u00fanasa"\ + "Me\u00e1n F\u00f3mhair"\ + "Deireadh F\u00f3mhair"\ + "M\u00ed na Samhna"\ + "M\u00ed na Nollag"\ + ""] +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/ga_ie.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/ga_ie.msg new file mode 100644 index 00000000..b6acbbc2 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/ga_ie.msg @@ -0,0 +1,7 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset ga_IE DATE_FORMAT "%d.%m.%y" + ::msgcat::mcset ga_IE TIME_FORMAT "%T" + ::msgcat::mcset ga_IE TIME_FORMAT_12 "%T" + ::msgcat::mcset ga_IE DATE_TIME_FORMAT "%a %d %b %Y %T %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/gl.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/gl.msg new file mode 100644 index 00000000..4b869e85 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/gl.msg @@ -0,0 +1,47 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset gl DAYS_OF_WEEK_ABBREV [list \ + "Dom"\ + "Lun"\ + "Mar"\ + "M\u00e9r"\ + "Xov"\ + "Ven"\ + "S\u00e1b"] + ::msgcat::mcset gl DAYS_OF_WEEK_FULL [list \ + "Domingo"\ + "Luns"\ + "Martes"\ + "M\u00e9rcores"\ + "Xoves"\ + "Venres"\ + "S\u00e1bado"] + ::msgcat::mcset gl MONTHS_ABBREV [list \ + "Xan"\ + "Feb"\ + "Mar"\ + "Abr"\ + "Mai"\ + "Xu\u00f1"\ + "Xul"\ + "Ago"\ + "Set"\ + "Out"\ + "Nov"\ + "Dec"\ + ""] + ::msgcat::mcset gl MONTHS_FULL [list \ + "Xaneiro"\ + "Febreiro"\ + "Marzo"\ + "Abril"\ + "Maio"\ + "Xu\u00f1o"\ + "Xullo"\ + "Agosto"\ + "Setembro"\ + "Outubro"\ + "Novembro"\ + "Decembro"\ + ""] +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/gl_es.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/gl_es.msg new file mode 100644 index 00000000..d4ed2704 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/gl_es.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset gl_ES DATE_FORMAT "%d %B %Y" + ::msgcat::mcset gl_ES TIME_FORMAT_12 "%l:%M:%S %P" + ::msgcat::mcset gl_ES DATE_TIME_FORMAT "%d %B %Y %l:%M:%S %P %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/gv.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/gv.msg new file mode 100644 index 00000000..7d332ad5 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/gv.msg @@ -0,0 +1,47 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset gv DAYS_OF_WEEK_ABBREV [list \ + "Jed"\ + "Jel"\ + "Jem"\ + "Jerc"\ + "Jerd"\ + "Jeh"\ + "Jes"] + ::msgcat::mcset gv DAYS_OF_WEEK_FULL [list \ + "Jedoonee"\ + "Jelhein"\ + "Jemayrt"\ + "Jercean"\ + "Jerdein"\ + "Jeheiney"\ + "Jesarn"] + ::msgcat::mcset gv MONTHS_ABBREV [list \ + "J-guer"\ + "T-arree"\ + "Mayrnt"\ + "Avrril"\ + "Boaldyn"\ + "M-souree"\ + "J-souree"\ + "Luanistyn"\ + "M-fouyir"\ + "J-fouyir"\ + "M.Houney"\ + "M.Nollick"\ + ""] + ::msgcat::mcset gv MONTHS_FULL [list \ + "Jerrey-geuree"\ + "Toshiaght-arree"\ + "Mayrnt"\ + "Averil"\ + "Boaldyn"\ + "Mean-souree"\ + "Jerrey-souree"\ + "Luanistyn"\ + "Mean-fouyir"\ + "Jerrey-fouyir"\ + "Mee Houney"\ + "Mee ny Nollick"\ + ""] +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/gv_gb.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/gv_gb.msg new file mode 100644 index 00000000..5e96e6f3 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/gv_gb.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset gv_GB DATE_FORMAT "%d %B %Y" + ::msgcat::mcset gv_GB TIME_FORMAT_12 "%l:%M:%S %P" + ::msgcat::mcset gv_GB DATE_TIME_FORMAT "%d %B %Y %l:%M:%S %P %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/he.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/he.msg new file mode 100644 index 00000000..4fd921d6 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/he.msg @@ -0,0 +1,52 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset he DAYS_OF_WEEK_ABBREV [list \ + "\u05d0"\ + "\u05d1"\ + "\u05d2"\ + "\u05d3"\ + "\u05d4"\ + "\u05d5"\ + "\u05e9"] + ::msgcat::mcset he DAYS_OF_WEEK_FULL [list \ + "\u05d9\u05d5\u05dd \u05e8\u05d0\u05e9\u05d5\u05df"\ + "\u05d9\u05d5\u05dd \u05e9\u05e0\u05d9"\ + "\u05d9\u05d5\u05dd \u05e9\u05dc\u05d9\u05e9\u05d9"\ + "\u05d9\u05d5\u05dd \u05e8\u05d1\u05d9\u05e2\u05d9"\ + "\u05d9\u05d5\u05dd \u05d7\u05de\u05d9\u05e9\u05d9"\ + "\u05d9\u05d5\u05dd \u05e9\u05d9\u05e9\u05d9"\ + "\u05e9\u05d1\u05ea"] + ::msgcat::mcset he MONTHS_ABBREV [list \ + "\u05d9\u05e0\u05d5"\ + "\u05e4\u05d1\u05e8"\ + "\u05de\u05e8\u05e5"\ + "\u05d0\u05e4\u05e8"\ + "\u05de\u05d0\u05d9"\ + "\u05d9\u05d5\u05e0"\ + "\u05d9\u05d5\u05dc"\ + "\u05d0\u05d5\u05d2"\ + "\u05e1\u05e4\u05d8"\ + "\u05d0\u05d5\u05e7"\ + "\u05e0\u05d5\u05d1"\ + "\u05d3\u05e6\u05de"\ + ""] + ::msgcat::mcset he MONTHS_FULL [list \ + "\u05d9\u05e0\u05d5\u05d0\u05e8"\ + "\u05e4\u05d1\u05e8\u05d5\u05d0\u05e8"\ + "\u05de\u05e8\u05e5"\ + "\u05d0\u05e4\u05e8\u05d9\u05dc"\ + "\u05de\u05d0\u05d9"\ + "\u05d9\u05d5\u05e0\u05d9"\ + "\u05d9\u05d5\u05dc\u05d9"\ + "\u05d0\u05d5\u05d2\u05d5\u05e1\u05d8"\ + "\u05e1\u05e4\u05d8\u05de\u05d1\u05e8"\ + "\u05d0\u05d5\u05e7\u05d8\u05d5\u05d1\u05e8"\ + "\u05e0\u05d5\u05d1\u05de\u05d1\u05e8"\ + "\u05d3\u05e6\u05de\u05d1\u05e8"\ + ""] + ::msgcat::mcset he BCE "\u05dc\u05e1\u05d4\u0022\u05e0" + ::msgcat::mcset he CE "\u05dc\u05e4\u05e1\u05d4\u0022\u05e0" + ::msgcat::mcset he DATE_FORMAT "%d/%m/%Y" + ::msgcat::mcset he TIME_FORMAT "%H:%M:%S" + ::msgcat::mcset he DATE_TIME_FORMAT "%d/%m/%Y %H:%M:%S %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/hi.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/hi.msg new file mode 100644 index 00000000..50c9fb80 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/hi.msg @@ -0,0 +1,39 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset hi DAYS_OF_WEEK_FULL [list \ + "\u0930\u0935\u093f\u0935\u093e\u0930"\ + "\u0938\u094b\u092e\u0935\u093e\u0930"\ + "\u092e\u0902\u0917\u0932\u0935\u093e\u0930"\ + "\u092c\u0941\u0927\u0935\u093e\u0930"\ + "\u0917\u0941\u0930\u0941\u0935\u093e\u0930"\ + "\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930"\ + "\u0936\u0928\u093f\u0935\u093e\u0930"] + ::msgcat::mcset hi MONTHS_ABBREV [list \ + "\u091c\u0928\u0935\u0930\u0940"\ + "\u092b\u093c\u0930\u0935\u0930\u0940"\ + "\u092e\u093e\u0930\u094d\u091a"\ + "\u0905\u092a\u094d\u0930\u0947\u0932"\ + "\u092e\u0908"\ + "\u091c\u0942\u0928"\ + "\u091c\u0941\u0932\u093e\u0908"\ + "\u0905\u0917\u0938\u094d\u0924"\ + "\u0938\u093f\u0924\u092e\u094d\u092c\u0930"\ + "\u0905\u0915\u094d\u091f\u0942\u092c\u0930"\ + "\u0928\u0935\u092e\u094d\u092c\u0930"\ + "\u0926\u093f\u0938\u092e\u094d\u092c\u0930"] + ::msgcat::mcset hi MONTHS_FULL [list \ + "\u091c\u0928\u0935\u0930\u0940"\ + "\u092b\u093c\u0930\u0935\u0930\u0940"\ + "\u092e\u093e\u0930\u094d\u091a"\ + "\u0905\u092a\u094d\u0930\u0947\u0932"\ + "\u092e\u0908"\ + "\u091c\u0942\u0928"\ + "\u091c\u0941\u0932\u093e\u0908"\ + "\u0905\u0917\u0938\u094d\u0924"\ + "\u0938\u093f\u0924\u092e\u094d\u092c\u0930"\ + "\u0905\u0915\u094d\u091f\u0942\u092c\u0930"\ + "\u0928\u0935\u092e\u094d\u092c\u0930"\ + "\u0926\u093f\u0938\u092e\u094d\u092c\u0930"] + ::msgcat::mcset hi AM "\u0908\u0938\u093e\u092a\u0942\u0930\u094d\u0935" + ::msgcat::mcset hi PM "." +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/hi_in.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/hi_in.msg new file mode 100644 index 00000000..239793f1 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/hi_in.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset hi_IN DATE_FORMAT "%d %M %Y" + ::msgcat::mcset hi_IN TIME_FORMAT_12 "%I:%M:%S %P" + ::msgcat::mcset hi_IN DATE_TIME_FORMAT "%d %M %Y %I:%M:%S %P %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/hr.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/hr.msg new file mode 100644 index 00000000..cec145b0 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/hr.msg @@ -0,0 +1,50 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset hr DAYS_OF_WEEK_ABBREV [list \ + "ned"\ + "pon"\ + "uto"\ + "sri"\ + "\u010det"\ + "pet"\ + "sub"] + ::msgcat::mcset hr DAYS_OF_WEEK_FULL [list \ + "nedjelja"\ + "ponedjeljak"\ + "utorak"\ + "srijeda"\ + "\u010detvrtak"\ + "petak"\ + "subota"] + ::msgcat::mcset hr MONTHS_ABBREV [list \ + "sij"\ + "vel"\ + "o\u017eu"\ + "tra"\ + "svi"\ + "lip"\ + "srp"\ + "kol"\ + "ruj"\ + "lis"\ + "stu"\ + "pro"\ + ""] + ::msgcat::mcset hr MONTHS_FULL [list \ + "sije\u010danj"\ + "velja\u010da"\ + "o\u017eujak"\ + "travanj"\ + "svibanj"\ + "lipanj"\ + "srpanj"\ + "kolovoz"\ + "rujan"\ + "listopad"\ + "studeni"\ + "prosinac"\ + ""] + ::msgcat::mcset hr DATE_FORMAT "%Y.%m.%d" + ::msgcat::mcset hr TIME_FORMAT "%H:%M:%S" + ::msgcat::mcset hr DATE_TIME_FORMAT "%Y.%m.%d %H:%M:%S %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/hu.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/hu.msg new file mode 100644 index 00000000..e5e68d92 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/hu.msg @@ -0,0 +1,54 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset hu DAYS_OF_WEEK_ABBREV [list \ + "V"\ + "H"\ + "K"\ + "Sze"\ + "Cs"\ + "P"\ + "Szo"] + ::msgcat::mcset hu DAYS_OF_WEEK_FULL [list \ + "vas\u00e1rnap"\ + "h\u00e9tf\u0151"\ + "kedd"\ + "szerda"\ + "cs\u00fct\u00f6rt\u00f6k"\ + "p\u00e9ntek"\ + "szombat"] + ::msgcat::mcset hu MONTHS_ABBREV [list \ + "jan."\ + "febr."\ + "m\u00e1rc."\ + "\u00e1pr."\ + "m\u00e1j."\ + "j\u00fan."\ + "j\u00fal."\ + "aug."\ + "szept."\ + "okt."\ + "nov."\ + "dec."\ + ""] + ::msgcat::mcset hu MONTHS_FULL [list \ + "janu\u00e1r"\ + "febru\u00e1r"\ + "m\u00e1rcius"\ + "\u00e1prilis"\ + "m\u00e1jus"\ + "j\u00fanius"\ + "j\u00falius"\ + "augusztus"\ + "szeptember"\ + "okt\u00f3ber"\ + "november"\ + "december"\ + ""] + ::msgcat::mcset hu BCE "i.e." + ::msgcat::mcset hu CE "i.u." + ::msgcat::mcset hu AM "DE" + ::msgcat::mcset hu PM "DU" + ::msgcat::mcset hu DATE_FORMAT "%Y.%m.%d." + ::msgcat::mcset hu TIME_FORMAT "%k:%M:%S" + ::msgcat::mcset hu DATE_TIME_FORMAT "%Y.%m.%d. %k:%M:%S %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/id.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/id.msg new file mode 100644 index 00000000..17c6bb59 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/id.msg @@ -0,0 +1,47 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset id DAYS_OF_WEEK_ABBREV [list \ + "Min"\ + "Sen"\ + "Sel"\ + "Rab"\ + "Kam"\ + "Jum"\ + "Sab"] + ::msgcat::mcset id DAYS_OF_WEEK_FULL [list \ + "Minggu"\ + "Senin"\ + "Selasa"\ + "Rabu"\ + "Kamis"\ + "Jumat"\ + "Sabtu"] + ::msgcat::mcset id MONTHS_ABBREV [list \ + "Jan"\ + "Peb"\ + "Mar"\ + "Apr"\ + "Mei"\ + "Jun"\ + "Jul"\ + "Agu"\ + "Sep"\ + "Okt"\ + "Nov"\ + "Des"\ + ""] + ::msgcat::mcset id MONTHS_FULL [list \ + "Januari"\ + "Pebruari"\ + "Maret"\ + "April"\ + "Mei"\ + "Juni"\ + "Juli"\ + "Agustus"\ + "September"\ + "Oktober"\ + "November"\ + "Desember"\ + ""] +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/id_id.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/id_id.msg new file mode 100644 index 00000000..bb672c11 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/id_id.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset id_ID DATE_FORMAT "%d %B %Y" + ::msgcat::mcset id_ID TIME_FORMAT_12 "%l:%M:%S %P" + ::msgcat::mcset id_ID DATE_TIME_FORMAT "%d %B %Y %l:%M:%S %P %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/is.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/is.msg new file mode 100644 index 00000000..adc2d2a3 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/is.msg @@ -0,0 +1,50 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset is DAYS_OF_WEEK_ABBREV [list \ + "sun."\ + "m\u00e1n."\ + "\u00feri."\ + "mi\u00f0."\ + "fim."\ + "f\u00f6s."\ + "lau."] + ::msgcat::mcset is DAYS_OF_WEEK_FULL [list \ + "sunnudagur"\ + "m\u00e1nudagur"\ + "\u00feri\u00f0judagur"\ + "mi\u00f0vikudagur"\ + "fimmtudagur"\ + "f\u00f6studagur"\ + "laugardagur"] + ::msgcat::mcset is MONTHS_ABBREV [list \ + "jan."\ + "feb."\ + "mar."\ + "apr."\ + "ma\u00ed"\ + "j\u00fan."\ + "j\u00fal."\ + "\u00e1g\u00fa."\ + "sep."\ + "okt."\ + "n\u00f3v."\ + "des."\ + ""] + ::msgcat::mcset is MONTHS_FULL [list \ + "jan\u00faar"\ + "febr\u00faar"\ + "mars"\ + "apr\u00edl"\ + "ma\u00ed"\ + "j\u00fan\u00ed"\ + "j\u00fal\u00ed"\ + "\u00e1g\u00fast"\ + "september"\ + "okt\u00f3ber"\ + "n\u00f3vember"\ + "desember"\ + ""] + ::msgcat::mcset is DATE_FORMAT "%e.%m.%Y" + ::msgcat::mcset is TIME_FORMAT "%H:%M:%S" + ::msgcat::mcset is DATE_TIME_FORMAT "%e.%m.%Y %H:%M:%S %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/it.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/it.msg new file mode 100644 index 00000000..b641cdec --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/it.msg @@ -0,0 +1,54 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset it DAYS_OF_WEEK_ABBREV [list \ + "dom"\ + "lun"\ + "mar"\ + "mer"\ + "gio"\ + "ven"\ + "sab"] + ::msgcat::mcset it DAYS_OF_WEEK_FULL [list \ + "domenica"\ + "luned\u00ec"\ + "marted\u00ec"\ + "mercoled\u00ec"\ + "gioved\u00ec"\ + "venerd\u00ec"\ + "sabato"] + ::msgcat::mcset it MONTHS_ABBREV [list \ + "gen"\ + "feb"\ + "mar"\ + "apr"\ + "mag"\ + "giu"\ + "lug"\ + "ago"\ + "set"\ + "ott"\ + "nov"\ + "dic"\ + ""] + ::msgcat::mcset it MONTHS_FULL [list \ + "gennaio"\ + "febbraio"\ + "marzo"\ + "aprile"\ + "maggio"\ + "giugno"\ + "luglio"\ + "agosto"\ + "settembre"\ + "ottobre"\ + "novembre"\ + "dicembre"\ + ""] + ::msgcat::mcset it BCE "aC" + ::msgcat::mcset it CE "dC" + ::msgcat::mcset it AM "m." + ::msgcat::mcset it PM "p." + ::msgcat::mcset it DATE_FORMAT "%d %B %Y" + ::msgcat::mcset it TIME_FORMAT "%H:%M:%S" + ::msgcat::mcset it DATE_TIME_FORMAT "%d %B %Y %H:%M:%S %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/it_ch.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/it_ch.msg new file mode 100644 index 00000000..b36ed368 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/it_ch.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset it_CH DATE_FORMAT "%e. %B %Y" + ::msgcat::mcset it_CH TIME_FORMAT "%H:%M:%S" + ::msgcat::mcset it_CH DATE_TIME_FORMAT "%e. %B %Y %H:%M:%S %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/ja.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/ja.msg new file mode 100644 index 00000000..27676655 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/ja.msg @@ -0,0 +1,44 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset ja DAYS_OF_WEEK_ABBREV [list \ + "\u65e5"\ + "\u6708"\ + "\u706b"\ + "\u6c34"\ + "\u6728"\ + "\u91d1"\ + "\u571f"] + ::msgcat::mcset ja DAYS_OF_WEEK_FULL [list \ + "\u65e5\u66dc\u65e5"\ + "\u6708\u66dc\u65e5"\ + "\u706b\u66dc\u65e5"\ + "\u6c34\u66dc\u65e5"\ + "\u6728\u66dc\u65e5"\ + "\u91d1\u66dc\u65e5"\ + "\u571f\u66dc\u65e5"] + ::msgcat::mcset ja MONTHS_FULL [list \ + "1\u6708"\ + "2\u6708"\ + "3\u6708"\ + "4\u6708"\ + "5\u6708"\ + "6\u6708"\ + "7\u6708"\ + "8\u6708"\ + "9\u6708"\ + "10\u6708"\ + "11\u6708"\ + "12\u6708"] + ::msgcat::mcset ja BCE "\u7d00\u5143\u524d" + ::msgcat::mcset ja CE "\u897f\u66a6" + ::msgcat::mcset ja AM "\u5348\u524d" + ::msgcat::mcset ja PM "\u5348\u5f8c" + ::msgcat::mcset ja DATE_FORMAT "%Y/%m/%d" + ::msgcat::mcset ja TIME_FORMAT "%k:%M:%S" + ::msgcat::mcset ja TIME_FORMAT_12 "%P %I:%M:%S" + ::msgcat::mcset ja DATE_TIME_FORMAT "%Y/%m/%d %k:%M:%S %z" + ::msgcat::mcset ja LOCALE_DATE_FORMAT "%EY\u5e74%m\u6708%d\u65e5" + ::msgcat::mcset ja LOCALE_TIME_FORMAT "%H\u6642%M\u5206%S\u79d2" + ::msgcat::mcset ja LOCALE_DATE_TIME_FORMAT "%EY\u5e74%m\u6708%d\u65e5 (%a) %H\u6642%M\u5206%S\u79d2 %z" + ::msgcat::mcset ja LOCALE_ERAS "\u007b-9223372036854775808 \u897f\u66a6 0\u007d \u007b-3061011600 \u660e\u6cbb 1867\u007d \u007b-1812186000 \u5927\u6b63 1911\u007d \u007b-1357635600 \u662d\u548c 1925\u007d \u007b600220800 \u5e73\u6210 1988\u007d" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/kl.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/kl.msg new file mode 100644 index 00000000..d877bfe6 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/kl.msg @@ -0,0 +1,47 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset kl DAYS_OF_WEEK_ABBREV [list \ + "sab"\ + "ata"\ + "mar"\ + "pin"\ + "sis"\ + "tal"\ + "arf"] + ::msgcat::mcset kl DAYS_OF_WEEK_FULL [list \ + "sabaat"\ + "ataasinngorneq"\ + "marlunngorneq"\ + "pingasunngorneq"\ + "sisamanngorneq"\ + "tallimanngorneq"\ + "arfininngorneq"] + ::msgcat::mcset kl MONTHS_ABBREV [list \ + "jan"\ + "feb"\ + "mar"\ + "apr"\ + "maj"\ + "jun"\ + "jul"\ + "aug"\ + "sep"\ + "okt"\ + "nov"\ + "dec"\ + ""] + ::msgcat::mcset kl MONTHS_FULL [list \ + "januari"\ + "februari"\ + "martsi"\ + "aprili"\ + "maji"\ + "juni"\ + "juli"\ + "augustusi"\ + "septemberi"\ + "oktoberi"\ + "novemberi"\ + "decemberi"\ + ""] +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/kl_gl.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/kl_gl.msg new file mode 100644 index 00000000..403aa10f --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/kl_gl.msg @@ -0,0 +1,7 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset kl_GL DATE_FORMAT "%d %b %Y" + ::msgcat::mcset kl_GL TIME_FORMAT "%T" + ::msgcat::mcset kl_GL TIME_FORMAT_12 "%T" + ::msgcat::mcset kl_GL DATE_TIME_FORMAT "%a %d %b %Y %T %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/ko.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/ko.msg new file mode 100644 index 00000000..0cd17a19 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/ko.msg @@ -0,0 +1,55 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset ko DAYS_OF_WEEK_ABBREV [list \ + "\uc77c"\ + "\uc6d4"\ + "\ud654"\ + "\uc218"\ + "\ubaa9"\ + "\uae08"\ + "\ud1a0"] + ::msgcat::mcset ko DAYS_OF_WEEK_FULL [list \ + "\uc77c\uc694\uc77c"\ + "\uc6d4\uc694\uc77c"\ + "\ud654\uc694\uc77c"\ + "\uc218\uc694\uc77c"\ + "\ubaa9\uc694\uc77c"\ + "\uae08\uc694\uc77c"\ + "\ud1a0\uc694\uc77c"] + ::msgcat::mcset ko MONTHS_ABBREV [list \ + "1\uc6d4"\ + "2\uc6d4"\ + "3\uc6d4"\ + "4\uc6d4"\ + "5\uc6d4"\ + "6\uc6d4"\ + "7\uc6d4"\ + "8\uc6d4"\ + "9\uc6d4"\ + "10\uc6d4"\ + "11\uc6d4"\ + "12\uc6d4"\ + ""] + ::msgcat::mcset ko MONTHS_FULL [list \ + "1\uc6d4"\ + "2\uc6d4"\ + "3\uc6d4"\ + "4\uc6d4"\ + "5\uc6d4"\ + "6\uc6d4"\ + "7\uc6d4"\ + "8\uc6d4"\ + "9\uc6d4"\ + "10\uc6d4"\ + "11\uc6d4"\ + "12\uc6d4"\ + ""] + ::msgcat::mcset ko AM "\uc624\uc804" + ::msgcat::mcset ko PM "\uc624\ud6c4" + ::msgcat::mcset ko DATE_FORMAT "%Y-%m-%d" + ::msgcat::mcset ko TIME_FORMAT_12 "%P %l:%M:%S" + ::msgcat::mcset ko DATE_TIME_FORMAT "%Y-%m-%d %P %l:%M:%S %z" + ::msgcat::mcset ko LOCALE_DATE_FORMAT "%Y\ub144%B%Od\uc77c" + ::msgcat::mcset ko LOCALE_TIME_FORMAT "%H\uc2dc%M\ubd84%S\ucd08" + ::msgcat::mcset ko LOCALE_DATE_TIME_FORMAT "%A %Y\ub144%B%Od\uc77c%H\uc2dc%M\ubd84%S\ucd08 %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/ko_kr.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/ko_kr.msg new file mode 100644 index 00000000..ea5bbd72 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/ko_kr.msg @@ -0,0 +1,8 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset ko_KR BCE "\uae30\uc6d0\uc804" + ::msgcat::mcset ko_KR CE "\uc11c\uae30" + ::msgcat::mcset ko_KR DATE_FORMAT "%Y.%m.%d" + ::msgcat::mcset ko_KR TIME_FORMAT_12 "%P %l:%M:%S" + ::msgcat::mcset ko_KR DATE_TIME_FORMAT "%Y.%m.%d %P %l:%M:%S %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/kok.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/kok.msg new file mode 100644 index 00000000..0869f207 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/kok.msg @@ -0,0 +1,39 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset kok DAYS_OF_WEEK_FULL [list \ + "\u0906\u0926\u093f\u0924\u094d\u092f\u0935\u093e\u0930"\ + "\u0938\u094b\u092e\u0935\u093e\u0930"\ + "\u092e\u0902\u0917\u0933\u093e\u0930"\ + "\u092c\u0941\u0927\u0935\u093e\u0930"\ + "\u0917\u0941\u0930\u0941\u0935\u093e\u0930"\ + "\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930"\ + "\u0936\u0928\u093f\u0935\u093e\u0930"] + ::msgcat::mcset kok MONTHS_ABBREV [list \ + "\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940"\ + "\u092b\u0947\u092c\u0943\u0935\u093e\u0930\u0940"\ + "\u092e\u093e\u0930\u094d\u091a"\ + "\u090f\u092a\u094d\u0930\u093f\u0932"\ + "\u092e\u0947"\ + "\u091c\u0942\u0928"\ + "\u091c\u0941\u0932\u0948"\ + "\u0913\u0917\u0938\u094d\u091f"\ + "\u0938\u0947\u092a\u094d\u091f\u0947\u0902\u092c\u0930"\ + "\u0913\u0915\u094d\u091f\u094b\u092c\u0930"\ + "\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930"\ + "\u0921\u093f\u0938\u0947\u0902\u092c\u0930"] + ::msgcat::mcset kok MONTHS_FULL [list \ + "\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940"\ + "\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940"\ + "\u092e\u093e\u0930\u094d\u091a"\ + "\u090f\u092a\u094d\u0930\u093f\u0932"\ + "\u092e\u0947"\ + "\u091c\u0942\u0928"\ + "\u091c\u0941\u0932\u0948"\ + "\u0913\u0917\u0938\u094d\u091f"\ + "\u0938\u0947\u092a\u094d\u091f\u0947\u0902\u092c\u0930"\ + "\u0913\u0915\u094d\u091f\u094b\u092c\u0930"\ + "\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930"\ + "\u0921\u093f\u0938\u0947\u0902\u092c\u0930"] + ::msgcat::mcset kok AM "\u0915\u094d\u0930\u093f\u0938\u094d\u0924\u092a\u0942\u0930\u094d\u0935" + ::msgcat::mcset kok PM "\u0915\u094d\u0930\u093f\u0938\u094d\u0924\u0936\u0916\u093e" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/kok_in.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/kok_in.msg new file mode 100644 index 00000000..abcb1ff8 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/kok_in.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset kok_IN DATE_FORMAT "%d %M %Y" + ::msgcat::mcset kok_IN TIME_FORMAT_12 "%I:%M:%S %P" + ::msgcat::mcset kok_IN DATE_TIME_FORMAT "%d %M %Y %I:%M:%S %P %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/kw.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/kw.msg new file mode 100644 index 00000000..aaf79b32 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/kw.msg @@ -0,0 +1,47 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset kw DAYS_OF_WEEK_ABBREV [list \ + "Sul"\ + "Lun"\ + "Mth"\ + "Mhr"\ + "Yow"\ + "Gwe"\ + "Sad"] + ::msgcat::mcset kw DAYS_OF_WEEK_FULL [list \ + "De Sul"\ + "De Lun"\ + "De Merth"\ + "De Merher"\ + "De Yow"\ + "De Gwener"\ + "De Sadorn"] + ::msgcat::mcset kw MONTHS_ABBREV [list \ + "Gen"\ + "Whe"\ + "Mer"\ + "Ebr"\ + "Me"\ + "Evn"\ + "Gor"\ + "Est"\ + "Gwn"\ + "Hed"\ + "Du"\ + "Kev"\ + ""] + ::msgcat::mcset kw MONTHS_FULL [list \ + "Mys Genver"\ + "Mys Whevrel"\ + "Mys Merth"\ + "Mys Ebrel"\ + "Mys Me"\ + "Mys Evan"\ + "Mys Gortheren"\ + "Mye Est"\ + "Mys Gwyngala"\ + "Mys Hedra"\ + "Mys Du"\ + "Mys Kevardhu"\ + ""] +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/kw_gb.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/kw_gb.msg new file mode 100644 index 00000000..29676804 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/kw_gb.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset kw_GB DATE_FORMAT "%d %B %Y" + ::msgcat::mcset kw_GB TIME_FORMAT_12 "%l:%M:%S %P" + ::msgcat::mcset kw_GB DATE_TIME_FORMAT "%d %B %Y %l:%M:%S %P %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/lt.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/lt.msg new file mode 100644 index 00000000..27b09850 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/lt.msg @@ -0,0 +1,52 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset lt DAYS_OF_WEEK_ABBREV [list \ + "Sk"\ + "Pr"\ + "An"\ + "Tr"\ + "Kt"\ + "Pn"\ + "\u0160t"] + ::msgcat::mcset lt DAYS_OF_WEEK_FULL [list \ + "Sekmadienis"\ + "Pirmadienis"\ + "Antradienis"\ + "Tre\u010diadienis"\ + "Ketvirtadienis"\ + "Penktadienis"\ + "\u0160e\u0161tadienis"] + ::msgcat::mcset lt MONTHS_ABBREV [list \ + "Sau"\ + "Vas"\ + "Kov"\ + "Bal"\ + "Geg"\ + "Bir"\ + "Lie"\ + "Rgp"\ + "Rgs"\ + "Spa"\ + "Lap"\ + "Grd"\ + ""] + ::msgcat::mcset lt MONTHS_FULL [list \ + "Sausio"\ + "Vasario"\ + "Kovo"\ + "Baland\u017eio"\ + "Gegu\u017e\u0117s"\ + "Bir\u017eelio"\ + "Liepos"\ + "Rugpj\u016b\u010dio"\ + "Rugs\u0117jo"\ + "Spalio"\ + "Lapkri\u010dio"\ + "Gruod\u017eio"\ + ""] + ::msgcat::mcset lt BCE "pr.Kr." + ::msgcat::mcset lt CE "po.Kr." + ::msgcat::mcset lt DATE_FORMAT "%Y.%m.%e" + ::msgcat::mcset lt TIME_FORMAT "%H.%M.%S" + ::msgcat::mcset lt DATE_TIME_FORMAT "%Y.%m.%e %H.%M.%S %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/lv.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/lv.msg new file mode 100644 index 00000000..a037b151 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/lv.msg @@ -0,0 +1,52 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset lv DAYS_OF_WEEK_ABBREV [list \ + "Sv"\ + "P"\ + "O"\ + "T"\ + "C"\ + "Pk"\ + "S"] + ::msgcat::mcset lv DAYS_OF_WEEK_FULL [list \ + "sv\u0113tdiena"\ + "pirmdiena"\ + "otrdiena"\ + "tre\u0161diena"\ + "ceturdien"\ + "piektdiena"\ + "sestdiena"] + ::msgcat::mcset lv MONTHS_ABBREV [list \ + "Jan"\ + "Feb"\ + "Mar"\ + "Apr"\ + "Maijs"\ + "J\u016bn"\ + "J\u016bl"\ + "Aug"\ + "Sep"\ + "Okt"\ + "Nov"\ + "Dec"\ + ""] + ::msgcat::mcset lv MONTHS_FULL [list \ + "janv\u0101ris"\ + "febru\u0101ris"\ + "marts"\ + "apr\u012blis"\ + "maijs"\ + "j\u016bnijs"\ + "j\u016blijs"\ + "augusts"\ + "septembris"\ + "oktobris"\ + "novembris"\ + "decembris"\ + ""] + ::msgcat::mcset lv BCE "pm\u0113" + ::msgcat::mcset lv CE "m\u0113" + ::msgcat::mcset lv DATE_FORMAT "%Y.%e.%m" + ::msgcat::mcset lv TIME_FORMAT "%H:%M:%S" + ::msgcat::mcset lv DATE_TIME_FORMAT "%Y.%e.%m %H:%M:%S %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/mk.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/mk.msg new file mode 100644 index 00000000..41cf60db --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/mk.msg @@ -0,0 +1,52 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset mk DAYS_OF_WEEK_ABBREV [list \ + "\u043d\u0435\u0434."\ + "\u043f\u043e\u043d."\ + "\u0432\u0442."\ + "\u0441\u0440\u0435."\ + "\u0447\u0435\u0442."\ + "\u043f\u0435\u0442."\ + "\u0441\u0430\u0431."] + ::msgcat::mcset mk DAYS_OF_WEEK_FULL [list \ + "\u043d\u0435\u0434\u0435\u043b\u0430"\ + "\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a"\ + "\u0432\u0442\u043e\u0440\u043d\u0438\u043a"\ + "\u0441\u0440\u0435\u0434\u0430"\ + "\u0447\u0435\u0442\u0432\u0440\u0442\u043e\u043a"\ + "\u043f\u0435\u0442\u043e\u043a"\ + "\u0441\u0430\u0431\u043e\u0442\u0430"] + ::msgcat::mcset mk MONTHS_ABBREV [list \ + "\u0458\u0430\u043d."\ + "\u0444\u0435\u0432."\ + "\u043c\u0430\u0440."\ + "\u0430\u043f\u0440."\ + "\u043c\u0430\u0458."\ + "\u0458\u0443\u043d."\ + "\u0458\u0443\u043b."\ + "\u0430\u0432\u0433."\ + "\u0441\u0435\u043f\u0442."\ + "\u043e\u043a\u0442."\ + "\u043d\u043e\u0435\u043c."\ + "\u0434\u0435\u043a\u0435\u043c."\ + ""] + ::msgcat::mcset mk MONTHS_FULL [list \ + "\u0458\u0430\u043d\u0443\u0430\u0440\u0438"\ + "\u0444\u0435\u0432\u0440\u0443\u0430\u0440\u0438"\ + "\u043c\u0430\u0440\u0442"\ + "\u0430\u043f\u0440\u0438\u043b"\ + "\u043c\u0430\u0458"\ + "\u0458\u0443\u043d\u0438"\ + "\u0458\u0443\u043b\u0438"\ + "\u0430\u0432\u0433\u0443\u0441\u0442"\ + "\u0441\u0435\u043f\u0442\u0435\u043c\u0432\u0440\u0438"\ + "\u043e\u043a\u0442\u043e\u043c\u0432\u0440\u0438"\ + "\u043d\u043e\u0435\u043c\u0432\u0440\u0438"\ + "\u0434\u0435\u043a\u0435\u043c\u0432\u0440\u0438"\ + ""] + ::msgcat::mcset mk BCE "\u043f\u0440.\u043d.\u0435." + ::msgcat::mcset mk CE "\u0430\u0435." + ::msgcat::mcset mk DATE_FORMAT "%e.%m.%Y" + ::msgcat::mcset mk TIME_FORMAT "%H:%M:%S %z" + ::msgcat::mcset mk DATE_TIME_FORMAT "%e.%m.%Y %H:%M:%S %z %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/mr.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/mr.msg new file mode 100644 index 00000000..cea427a9 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/mr.msg @@ -0,0 +1,39 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset mr DAYS_OF_WEEK_FULL [list \ + "\u0930\u0935\u093f\u0935\u093e\u0930"\ + "\u0938\u094b\u092e\u0935\u093e\u0930"\ + "\u092e\u0902\u0917\u0933\u0935\u093e\u0930"\ + "\u092e\u0902\u0917\u0933\u0935\u093e\u0930"\ + "\u0917\u0941\u0930\u0941\u0935\u093e\u0930"\ + "\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930"\ + "\u0936\u0928\u093f\u0935\u093e\u0930"] + ::msgcat::mcset mr MONTHS_ABBREV [list \ + "\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940"\ + "\u092b\u0947\u092c\u0943\u0935\u093e\u0930\u0940"\ + "\u092e\u093e\u0930\u094d\u091a"\ + "\u090f\u092a\u094d\u0930\u093f\u0932"\ + "\u092e\u0947"\ + "\u091c\u0942\u0928"\ + "\u091c\u0941\u0932\u0948"\ + "\u0913\u0917\u0938\u094d\u091f"\ + "\u0938\u0947\u092a\u094d\u091f\u0947\u0902\u092c\u0930"\ + "\u0913\u0915\u094d\u091f\u094b\u092c\u0930"\ + "\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930"\ + "\u0921\u093f\u0938\u0947\u0902\u092c\u0930"] + ::msgcat::mcset mr MONTHS_FULL [list \ + "\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940"\ + "\u092b\u0947\u092c\u0943\u0935\u093e\u0930\u0940"\ + "\u092e\u093e\u0930\u094d\u091a"\ + "\u090f\u092a\u094d\u0930\u093f\u0932"\ + "\u092e\u0947"\ + "\u091c\u0942\u0928"\ + "\u091c\u0941\u0932\u0948"\ + "\u0913\u0917\u0938\u094d\u091f"\ + "\u0938\u0947\u092a\u094d\u091f\u0947\u0902\u092c\u0930"\ + "\u0913\u0915\u094d\u091f\u094b\u092c\u0930"\ + "\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930"\ + "\u0921\u093f\u0938\u0947\u0902\u092c\u0930"] + ::msgcat::mcset mr AM "BC" + ::msgcat::mcset mr PM "AD" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/mr_in.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/mr_in.msg new file mode 100644 index 00000000..1889da5c --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/mr_in.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset mr_IN DATE_FORMAT "%d %M %Y" + ::msgcat::mcset mr_IN TIME_FORMAT_12 "%I:%M:%S %P" + ::msgcat::mcset mr_IN DATE_TIME_FORMAT "%d %M %Y %I:%M:%S %P %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/ms.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/ms.msg new file mode 100644 index 00000000..e954431b --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/ms.msg @@ -0,0 +1,47 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset ms DAYS_OF_WEEK_ABBREV [list \ + "Aha"\ + "Isn"\ + "Sei"\ + "Rab"\ + "Kha"\ + "Jum"\ + "Sab"] + ::msgcat::mcset ms DAYS_OF_WEEK_FULL [list \ + "Ahad"\ + "Isnin"\ + "Selasa"\ + "Rahu"\ + "Khamis"\ + "Jumaat"\ + "Sabtu"] + ::msgcat::mcset ms MONTHS_ABBREV [list \ + "Jan"\ + "Feb"\ + "Mac"\ + "Apr"\ + "Mei"\ + "Jun"\ + "Jul"\ + "Ogos"\ + "Sep"\ + "Okt"\ + "Nov"\ + "Dis"\ + ""] + ::msgcat::mcset ms MONTHS_FULL [list \ + "Januari"\ + "Februari"\ + "Mac"\ + "April"\ + "Mei"\ + "Jun"\ + "Julai"\ + "Ogos"\ + "September"\ + "Oktober"\ + "November"\ + "Disember"\ + ""] +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/ms_my.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/ms_my.msg new file mode 100644 index 00000000..c1f93d42 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/ms_my.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset ms_MY DATE_FORMAT "%A %d %b %Y" + ::msgcat::mcset ms_MY TIME_FORMAT_12 "%I:%M:%S %z" + ::msgcat::mcset ms_MY DATE_TIME_FORMAT "%A %d %b %Y %I:%M:%S %z %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/mt.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/mt.msg new file mode 100644 index 00000000..ddd54464 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/mt.msg @@ -0,0 +1,27 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset mt DAYS_OF_WEEK_ABBREV [list \ + "\u0126ad"\ + "Tne"\ + "Tli"\ + "Erb"\ + "\u0126am"\ + "\u0120im"] + ::msgcat::mcset mt MONTHS_ABBREV [list \ + "Jan"\ + "Fra"\ + "Mar"\ + "Apr"\ + "Mej"\ + "\u0120un"\ + "Lul"\ + "Awi"\ + "Set"\ + "Ott"\ + "Nov"] + ::msgcat::mcset mt BCE "QK" + ::msgcat::mcset mt CE "" + ::msgcat::mcset mt DATE_FORMAT "%A, %e ta %B, %Y" + ::msgcat::mcset mt TIME_FORMAT_12 "%l:%M:%S %P" + ::msgcat::mcset mt DATE_TIME_FORMAT "%A, %e ta %B, %Y %l:%M:%S %P %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/nb.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/nb.msg new file mode 100644 index 00000000..90d49a33 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/nb.msg @@ -0,0 +1,52 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset nb DAYS_OF_WEEK_ABBREV [list \ + "s\u00f8"\ + "ma"\ + "ti"\ + "on"\ + "to"\ + "fr"\ + "l\u00f8"] + ::msgcat::mcset nb DAYS_OF_WEEK_FULL [list \ + "s\u00f8ndag"\ + "mandag"\ + "tirsdag"\ + "onsdag"\ + "torsdag"\ + "fredag"\ + "l\u00f8rdag"] + ::msgcat::mcset nb MONTHS_ABBREV [list \ + "jan"\ + "feb"\ + "mar"\ + "apr"\ + "mai"\ + "jun"\ + "jul"\ + "aug"\ + "sep"\ + "okt"\ + "nov"\ + "des"\ + ""] + ::msgcat::mcset nb MONTHS_FULL [list \ + "januar"\ + "februar"\ + "mars"\ + "april"\ + "mai"\ + "juni"\ + "juli"\ + "august"\ + "september"\ + "oktober"\ + "november"\ + "desember"\ + ""] + ::msgcat::mcset nb BCE "f.Kr." + ::msgcat::mcset nb CE "e.Kr." + ::msgcat::mcset nb DATE_FORMAT "%e. %B %Y" + ::msgcat::mcset nb TIME_FORMAT "%H:%M:%S" + ::msgcat::mcset nb DATE_TIME_FORMAT "%e. %B %Y %H:%M:%S %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/nl.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/nl.msg new file mode 100644 index 00000000..4c5c6755 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/nl.msg @@ -0,0 +1,50 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset nl DAYS_OF_WEEK_ABBREV [list \ + "zo"\ + "ma"\ + "di"\ + "wo"\ + "do"\ + "vr"\ + "za"] + ::msgcat::mcset nl DAYS_OF_WEEK_FULL [list \ + "zondag"\ + "maandag"\ + "dinsdag"\ + "woensdag"\ + "donderdag"\ + "vrijdag"\ + "zaterdag"] + ::msgcat::mcset nl MONTHS_ABBREV [list \ + "jan"\ + "feb"\ + "mrt"\ + "apr"\ + "mei"\ + "jun"\ + "jul"\ + "aug"\ + "sep"\ + "okt"\ + "nov"\ + "dec"\ + ""] + ::msgcat::mcset nl MONTHS_FULL [list \ + "januari"\ + "februari"\ + "maart"\ + "april"\ + "mei"\ + "juni"\ + "juli"\ + "augustus"\ + "september"\ + "oktober"\ + "november"\ + "december"\ + ""] + ::msgcat::mcset nl DATE_FORMAT "%e %B %Y" + ::msgcat::mcset nl TIME_FORMAT "%k:%M:%S" + ::msgcat::mcset nl DATE_TIME_FORMAT "%e %B %Y %k:%M:%S %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/nl_be.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/nl_be.msg new file mode 100644 index 00000000..4b19670f --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/nl_be.msg @@ -0,0 +1,7 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset nl_BE DATE_FORMAT "%d-%m-%y" + ::msgcat::mcset nl_BE TIME_FORMAT "%T" + ::msgcat::mcset nl_BE TIME_FORMAT_12 "%T" + ::msgcat::mcset nl_BE DATE_TIME_FORMAT "%a %d %b %Y %T %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/nn.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/nn.msg new file mode 100644 index 00000000..bd61ac94 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/nn.msg @@ -0,0 +1,52 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset nn DAYS_OF_WEEK_ABBREV [list \ + "su"\ + "m\u00e5"\ + "ty"\ + "on"\ + "to"\ + "fr"\ + "lau"] + ::msgcat::mcset nn DAYS_OF_WEEK_FULL [list \ + "sundag"\ + "m\u00e5ndag"\ + "tysdag"\ + "onsdag"\ + "torsdag"\ + "fredag"\ + "laurdag"] + ::msgcat::mcset nn MONTHS_ABBREV [list \ + "jan"\ + "feb"\ + "mar"\ + "apr"\ + "mai"\ + "jun"\ + "jul"\ + "aug"\ + "sep"\ + "okt"\ + "nov"\ + "des"\ + ""] + ::msgcat::mcset nn MONTHS_FULL [list \ + "januar"\ + "februar"\ + "mars"\ + "april"\ + "mai"\ + "juni"\ + "juli"\ + "august"\ + "september"\ + "oktober"\ + "november"\ + "desember"\ + ""] + ::msgcat::mcset nn BCE "f.Kr." + ::msgcat::mcset nn CE "e.Kr." + ::msgcat::mcset nn DATE_FORMAT "%e. %B %Y" + ::msgcat::mcset nn TIME_FORMAT "%H:%M:%S" + ::msgcat::mcset nn DATE_TIME_FORMAT "%e. %B %Y %H:%M:%S %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/pl.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/pl.msg new file mode 100644 index 00000000..d206f4b7 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/pl.msg @@ -0,0 +1,52 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset pl DAYS_OF_WEEK_ABBREV [list \ + "N"\ + "Pn"\ + "Wt"\ + "\u015ar"\ + "Cz"\ + "Pt"\ + "So"] + ::msgcat::mcset pl DAYS_OF_WEEK_FULL [list \ + "niedziela"\ + "poniedzia\u0142ek"\ + "wtorek"\ + "\u015broda"\ + "czwartek"\ + "pi\u0105tek"\ + "sobota"] + ::msgcat::mcset pl MONTHS_ABBREV [list \ + "sty"\ + "lut"\ + "mar"\ + "kwi"\ + "maj"\ + "cze"\ + "lip"\ + "sie"\ + "wrz"\ + "pa\u017a"\ + "lis"\ + "gru"\ + ""] + ::msgcat::mcset pl MONTHS_FULL [list \ + "stycze\u0144"\ + "luty"\ + "marzec"\ + "kwiecie\u0144"\ + "maj"\ + "czerwiec"\ + "lipiec"\ + "sierpie\u0144"\ + "wrzesie\u0144"\ + "pa\u017adziernik"\ + "listopad"\ + "grudzie\u0144"\ + ""] + ::msgcat::mcset pl BCE "p.n.e." + ::msgcat::mcset pl CE "n.e." + ::msgcat::mcset pl DATE_FORMAT "%Y-%m-%d" + ::msgcat::mcset pl TIME_FORMAT "%H:%M:%S" + ::msgcat::mcset pl DATE_TIME_FORMAT "%Y-%m-%d %H:%M:%S %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/pt.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/pt.msg new file mode 100644 index 00000000..96fdb35a --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/pt.msg @@ -0,0 +1,50 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset pt DAYS_OF_WEEK_ABBREV [list \ + "Dom"\ + "Seg"\ + "Ter"\ + "Qua"\ + "Qui"\ + "Sex"\ + "S\u00e1b"] + ::msgcat::mcset pt DAYS_OF_WEEK_FULL [list \ + "Domingo"\ + "Segunda-feira"\ + "Ter\u00e7a-feira"\ + "Quarta-feira"\ + "Quinta-feira"\ + "Sexta-feira"\ + "S\u00e1bado"] + ::msgcat::mcset pt MONTHS_ABBREV [list \ + "Jan"\ + "Fev"\ + "Mar"\ + "Abr"\ + "Mai"\ + "Jun"\ + "Jul"\ + "Ago"\ + "Set"\ + "Out"\ + "Nov"\ + "Dez"\ + ""] + ::msgcat::mcset pt MONTHS_FULL [list \ + "Janeiro"\ + "Fevereiro"\ + "Mar\u00e7o"\ + "Abril"\ + "Maio"\ + "Junho"\ + "Julho"\ + "Agosto"\ + "Setembro"\ + "Outubro"\ + "Novembro"\ + "Dezembro"\ + ""] + ::msgcat::mcset pt DATE_FORMAT "%d-%m-%Y" + ::msgcat::mcset pt TIME_FORMAT "%k:%M:%S" + ::msgcat::mcset pt DATE_TIME_FORMAT "%d-%m-%Y %k:%M:%S %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/pt_br.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/pt_br.msg new file mode 100644 index 00000000..86843279 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/pt_br.msg @@ -0,0 +1,7 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset pt_BR DATE_FORMAT "%d-%m-%Y" + ::msgcat::mcset pt_BR TIME_FORMAT "%T" + ::msgcat::mcset pt_BR TIME_FORMAT_12 "%T" + ::msgcat::mcset pt_BR DATE_TIME_FORMAT "%a %d %b %Y %T %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/ro.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/ro.msg new file mode 100644 index 00000000..bdd7c619 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/ro.msg @@ -0,0 +1,52 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset ro DAYS_OF_WEEK_ABBREV [list \ + "D"\ + "L"\ + "Ma"\ + "Mi"\ + "J"\ + "V"\ + "S"] + ::msgcat::mcset ro DAYS_OF_WEEK_FULL [list \ + "duminic\u0103"\ + "luni"\ + "mar\u0163i"\ + "miercuri"\ + "joi"\ + "vineri"\ + "s\u00eemb\u0103t\u0103"] + ::msgcat::mcset ro MONTHS_ABBREV [list \ + "Ian"\ + "Feb"\ + "Mar"\ + "Apr"\ + "Mai"\ + "Iun"\ + "Iul"\ + "Aug"\ + "Sep"\ + "Oct"\ + "Nov"\ + "Dec"\ + ""] + ::msgcat::mcset ro MONTHS_FULL [list \ + "ianuarie"\ + "februarie"\ + "martie"\ + "aprilie"\ + "mai"\ + "iunie"\ + "iulie"\ + "august"\ + "septembrie"\ + "octombrie"\ + "noiembrie"\ + "decembrie"\ + ""] + ::msgcat::mcset ro BCE "d.C." + ::msgcat::mcset ro CE "\u00ee.d.C." + ::msgcat::mcset ro DATE_FORMAT "%d.%m.%Y" + ::msgcat::mcset ro TIME_FORMAT "%H:%M:%S" + ::msgcat::mcset ro DATE_TIME_FORMAT "%d.%m.%Y %H:%M:%S %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/ru.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/ru.msg new file mode 100644 index 00000000..65b075d6 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/ru.msg @@ -0,0 +1,52 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset ru DAYS_OF_WEEK_ABBREV [list \ + "\u0412\u0441"\ + "\u041f\u043d"\ + "\u0412\u0442"\ + "\u0421\u0440"\ + "\u0427\u0442"\ + "\u041f\u0442"\ + "\u0421\u0431"] + ::msgcat::mcset ru DAYS_OF_WEEK_FULL [list \ + "\u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435"\ + "\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a"\ + "\u0432\u0442\u043e\u0440\u043d\u0438\u043a"\ + "\u0441\u0440\u0435\u0434\u0430"\ + "\u0447\u0435\u0442\u0432\u0435\u0440\u0433"\ + "\u043f\u044f\u0442\u043d\u0438\u0446\u0430"\ + "\u0441\u0443\u0431\u0431\u043e\u0442\u0430"] + ::msgcat::mcset ru MONTHS_ABBREV [list \ + "\u044f\u043d\u0432"\ + "\u0444\u0435\u0432"\ + "\u043c\u0430\u0440"\ + "\u0430\u043f\u0440"\ + "\u043c\u0430\u0439"\ + "\u0438\u044e\u043d"\ + "\u0438\u044e\u043b"\ + "\u0430\u0432\u0433"\ + "\u0441\u0435\u043d"\ + "\u043e\u043a\u0442"\ + "\u043d\u043e\u044f"\ + "\u0434\u0435\u043a"\ + ""] + ::msgcat::mcset ru MONTHS_FULL [list \ + "\u042f\u043d\u0432\u0430\u0440\u044c"\ + "\u0424\u0435\u0432\u0440\u0430\u043b\u044c"\ + "\u041c\u0430\u0440\u0442"\ + "\u0410\u043f\u0440\u0435\u043b\u044c"\ + "\u041c\u0430\u0439"\ + "\u0418\u044e\u043d\u044c"\ + "\u0418\u044e\u043b\u044c"\ + "\u0410\u0432\u0433\u0443\u0441\u0442"\ + "\u0421\u0435\u043d\u0442\u044f\u0431\u0440\u044c"\ + "\u041e\u043a\u0442\u044f\u0431\u0440\u044c"\ + "\u041d\u043e\u044f\u0431\u0440\u044c"\ + "\u0414\u0435\u043a\u0430\u0431\u0440\u044c"\ + ""] + ::msgcat::mcset ru BCE "\u0434\u043e \u043d.\u044d." + ::msgcat::mcset ru CE "\u043d.\u044d." + ::msgcat::mcset ru DATE_FORMAT "%d.%m.%Y" + ::msgcat::mcset ru TIME_FORMAT "%k:%M:%S" + ::msgcat::mcset ru DATE_TIME_FORMAT "%d.%m.%Y %k:%M:%S %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/ru_ua.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/ru_ua.msg new file mode 100644 index 00000000..6e1f8a86 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/ru_ua.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset ru_UA DATE_FORMAT "%d.%m.%Y" + ::msgcat::mcset ru_UA TIME_FORMAT "%k:%M:%S" + ::msgcat::mcset ru_UA DATE_TIME_FORMAT "%d.%m.%Y %k:%M:%S %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/sh.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/sh.msg new file mode 100644 index 00000000..6ee0fc7f --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/sh.msg @@ -0,0 +1,52 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset sh DAYS_OF_WEEK_ABBREV [list \ + "Ned"\ + "Pon"\ + "Uto"\ + "Sre"\ + "\u010cet"\ + "Pet"\ + "Sub"] + ::msgcat::mcset sh DAYS_OF_WEEK_FULL [list \ + "Nedelja"\ + "Ponedeljak"\ + "Utorak"\ + "Sreda"\ + "\u010cetvrtak"\ + "Petak"\ + "Subota"] + ::msgcat::mcset sh MONTHS_ABBREV [list \ + "Jan"\ + "Feb"\ + "Mar"\ + "Apr"\ + "Maj"\ + "Jun"\ + "Jul"\ + "Avg"\ + "Sep"\ + "Okt"\ + "Nov"\ + "Dec"\ + ""] + ::msgcat::mcset sh MONTHS_FULL [list \ + "Januar"\ + "Februar"\ + "Mart"\ + "April"\ + "Maj"\ + "Juni"\ + "Juli"\ + "Avgust"\ + "Septembar"\ + "Oktobar"\ + "Novembar"\ + "Decembar"\ + ""] + ::msgcat::mcset sh BCE "p. n. e." + ::msgcat::mcset sh CE "n. e." + ::msgcat::mcset sh DATE_FORMAT "%d.%m.%Y." + ::msgcat::mcset sh TIME_FORMAT "%k.%M.%S" + ::msgcat::mcset sh DATE_TIME_FORMAT "%d.%m.%Y. %k.%M.%S %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/sk.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/sk.msg new file mode 100644 index 00000000..9b2f0aad --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/sk.msg @@ -0,0 +1,52 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset sk DAYS_OF_WEEK_ABBREV [list \ + "Ne"\ + "Po"\ + "Ut"\ + "St"\ + "\u0160t"\ + "Pa"\ + "So"] + ::msgcat::mcset sk DAYS_OF_WEEK_FULL [list \ + "Nede\u013ee"\ + "Pondelok"\ + "Utorok"\ + "Streda"\ + "\u0160tvrtok"\ + "Piatok"\ + "Sobota"] + ::msgcat::mcset sk MONTHS_ABBREV [list \ + "jan"\ + "feb"\ + "mar"\ + "apr"\ + "m\u00e1j"\ + "j\u00fan"\ + "j\u00fal"\ + "aug"\ + "sep"\ + "okt"\ + "nov"\ + "dec"\ + ""] + ::msgcat::mcset sk MONTHS_FULL [list \ + "janu\u00e1r"\ + "febru\u00e1r"\ + "marec"\ + "apr\u00edl"\ + "m\u00e1j"\ + "j\u00fan"\ + "j\u00fal"\ + "august"\ + "september"\ + "okt\u00f3ber"\ + "november"\ + "december"\ + ""] + ::msgcat::mcset sk BCE "pred n.l." + ::msgcat::mcset sk CE "n.l." + ::msgcat::mcset sk DATE_FORMAT "%e.%m.%Y" + ::msgcat::mcset sk TIME_FORMAT "%k:%M:%S" + ::msgcat::mcset sk DATE_TIME_FORMAT "%e.%m.%Y %k:%M:%S %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/sl.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/sl.msg new file mode 100644 index 00000000..42bc5097 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/sl.msg @@ -0,0 +1,52 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset sl DAYS_OF_WEEK_ABBREV [list \ + "Ned"\ + "Pon"\ + "Tor"\ + "Sre"\ + "\u010cet"\ + "Pet"\ + "Sob"] + ::msgcat::mcset sl DAYS_OF_WEEK_FULL [list \ + "Nedelja"\ + "Ponedeljek"\ + "Torek"\ + "Sreda"\ + "\u010cetrtek"\ + "Petek"\ + "Sobota"] + ::msgcat::mcset sl MONTHS_ABBREV [list \ + "jan"\ + "feb"\ + "mar"\ + "apr"\ + "maj"\ + "jun"\ + "jul"\ + "avg"\ + "sep"\ + "okt"\ + "nov"\ + "dec"\ + ""] + ::msgcat::mcset sl MONTHS_FULL [list \ + "januar"\ + "februar"\ + "marec"\ + "april"\ + "maj"\ + "junij"\ + "julij"\ + "avgust"\ + "september"\ + "oktober"\ + "november"\ + "december"\ + ""] + ::msgcat::mcset sl BCE "pr.n.\u0161." + ::msgcat::mcset sl CE "po Kr." + ::msgcat::mcset sl DATE_FORMAT "%Y.%m.%e" + ::msgcat::mcset sl TIME_FORMAT "%k:%M:%S" + ::msgcat::mcset sl DATE_TIME_FORMAT "%Y.%m.%e %k:%M:%S %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/sq.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/sq.msg new file mode 100644 index 00000000..8fb1fce9 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/sq.msg @@ -0,0 +1,54 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset sq DAYS_OF_WEEK_ABBREV [list \ + "Die"\ + "H\u00ebn"\ + "Mar"\ + "M\u00ebr"\ + "Enj"\ + "Pre"\ + "Sht"] + ::msgcat::mcset sq DAYS_OF_WEEK_FULL [list \ + "e diel"\ + "e h\u00ebn\u00eb"\ + "e mart\u00eb"\ + "e m\u00ebrkur\u00eb"\ + "e enjte"\ + "e premte"\ + "e shtun\u00eb"] + ::msgcat::mcset sq MONTHS_ABBREV [list \ + "Jan"\ + "Shk"\ + "Mar"\ + "Pri"\ + "Maj"\ + "Qer"\ + "Kor"\ + "Gsh"\ + "Sht"\ + "Tet"\ + "N\u00ebn"\ + "Dhj"\ + ""] + ::msgcat::mcset sq MONTHS_FULL [list \ + "janar"\ + "shkurt"\ + "mars"\ + "prill"\ + "maj"\ + "qershor"\ + "korrik"\ + "gusht"\ + "shtator"\ + "tetor"\ + "n\u00ebntor"\ + "dhjetor"\ + ""] + ::msgcat::mcset sq BCE "p.e.r." + ::msgcat::mcset sq CE "n.e.r." + ::msgcat::mcset sq AM "PD" + ::msgcat::mcset sq PM "MD" + ::msgcat::mcset sq DATE_FORMAT "%Y-%m-%d" + ::msgcat::mcset sq TIME_FORMAT_12 "%l:%M:%S.%P" + ::msgcat::mcset sq DATE_TIME_FORMAT "%Y-%m-%d %l:%M:%S.%P %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/sr.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/sr.msg new file mode 100644 index 00000000..75766687 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/sr.msg @@ -0,0 +1,52 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset sr DAYS_OF_WEEK_ABBREV [list \ + "\u041d\u0435\u0434"\ + "\u041f\u043e\u043d"\ + "\u0423\u0442\u043e"\ + "\u0421\u0440\u0435"\ + "\u0427\u0435\u0442"\ + "\u041f\u0435\u0442"\ + "\u0421\u0443\u0431"] + ::msgcat::mcset sr DAYS_OF_WEEK_FULL [list \ + "\u041d\u0435\u0434\u0435\u0459\u0430"\ + "\u041f\u043e\u043d\u0435\u0434\u0435\u0459\u0430\u043a"\ + "\u0423\u0442\u043e\u0440\u0430\u043a"\ + "\u0421\u0440\u0435\u0434\u0430"\ + "\u0427\u0435\u0442\u0432\u0440\u0442\u0430\u043a"\ + "\u041f\u0435\u0442\u0430\u043a"\ + "\u0421\u0443\u0431\u043e\u0442\u0430"] + ::msgcat::mcset sr MONTHS_ABBREV [list \ + "\u0408\u0430\u043d"\ + "\u0424\u0435\u0431"\ + "\u041c\u0430\u0440"\ + "\u0410\u043f\u0440"\ + "\u041c\u0430\u0458"\ + "\u0408\u0443\u043d"\ + "\u0408\u0443\u043b"\ + "\u0410\u0432\u0433"\ + "\u0421\u0435\u043f"\ + "\u041e\u043a\u0442"\ + "\u041d\u043e\u0432"\ + "\u0414\u0435\u0446"\ + ""] + ::msgcat::mcset sr MONTHS_FULL [list \ + "\u0408\u0430\u043d\u0443\u0430\u0440"\ + "\u0424\u0435\u0431\u0440\u0443\u0430\u0440"\ + "\u041c\u0430\u0440\u0442"\ + "\u0410\u043f\u0440\u0438\u043b"\ + "\u041c\u0430\u0458"\ + "\u0408\u0443\u043d\u0438"\ + "\u0408\u0443\u043b\u0438"\ + "\u0410\u0432\u0433\u0443\u0441\u0442"\ + "\u0421\u0435\u043f\u0442\u0435\u043c\u0431\u0430\u0440"\ + "\u041e\u043a\u0442\u043e\u0431\u0430\u0440"\ + "\u041d\u043e\u0432\u0435\u043c\u0431\u0430\u0440"\ + "\u0414\u0435\u0446\u0435\u043c\u0431\u0430\u0440"\ + ""] + ::msgcat::mcset sr BCE "\u043f. \u043d. \u0435." + ::msgcat::mcset sr CE "\u043d. \u0435" + ::msgcat::mcset sr DATE_FORMAT "%Y.%m.%e" + ::msgcat::mcset sr TIME_FORMAT "%k.%M.%S" + ::msgcat::mcset sr DATE_TIME_FORMAT "%Y.%m.%e %k.%M.%S %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/sv.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/sv.msg new file mode 100644 index 00000000..f7a67c6e --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/sv.msg @@ -0,0 +1,52 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset sv DAYS_OF_WEEK_ABBREV [list \ + "s\u00f6"\ + "m\u00e5"\ + "ti"\ + "on"\ + "to"\ + "fr"\ + "l\u00f6"] + ::msgcat::mcset sv DAYS_OF_WEEK_FULL [list \ + "s\u00f6ndag"\ + "m\u00e5ndag"\ + "tisdag"\ + "onsdag"\ + "torsdag"\ + "fredag"\ + "l\u00f6rdag"] + ::msgcat::mcset sv MONTHS_ABBREV [list \ + "jan"\ + "feb"\ + "mar"\ + "apr"\ + "maj"\ + "jun"\ + "jul"\ + "aug"\ + "sep"\ + "okt"\ + "nov"\ + "dec"\ + ""] + ::msgcat::mcset sv MONTHS_FULL [list \ + "januari"\ + "februari"\ + "mars"\ + "april"\ + "maj"\ + "juni"\ + "juli"\ + "augusti"\ + "september"\ + "oktober"\ + "november"\ + "december"\ + ""] + ::msgcat::mcset sv BCE "f.Kr." + ::msgcat::mcset sv CE "e.Kr." + ::msgcat::mcset sv DATE_FORMAT "%Y-%m-%d" + ::msgcat::mcset sv TIME_FORMAT "%H:%M:%S" + ::msgcat::mcset sv DATE_TIME_FORMAT "%Y-%m-%d %H:%M:%S %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/sw.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/sw.msg new file mode 100644 index 00000000..b888b43d --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/sw.msg @@ -0,0 +1,49 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset sw DAYS_OF_WEEK_ABBREV [list \ + "Jpi"\ + "Jtt"\ + "Jnn"\ + "Jtn"\ + "Alh"\ + "Iju"\ + "Jmo"] + ::msgcat::mcset sw DAYS_OF_WEEK_FULL [list \ + "Jumapili"\ + "Jumatatu"\ + "Jumanne"\ + "Jumatano"\ + "Alhamisi"\ + "Ijumaa"\ + "Jumamosi"] + ::msgcat::mcset sw MONTHS_ABBREV [list \ + "Jan"\ + "Feb"\ + "Mar"\ + "Apr"\ + "Mei"\ + "Jun"\ + "Jul"\ + "Ago"\ + "Sep"\ + "Okt"\ + "Nov"\ + "Des"\ + ""] + ::msgcat::mcset sw MONTHS_FULL [list \ + "Januari"\ + "Februari"\ + "Machi"\ + "Aprili"\ + "Mei"\ + "Juni"\ + "Julai"\ + "Agosti"\ + "Septemba"\ + "Oktoba"\ + "Novemba"\ + "Desemba"\ + ""] + ::msgcat::mcset sw BCE "KK" + ::msgcat::mcset sw CE "BK" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/ta.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/ta.msg new file mode 100644 index 00000000..4abb90ca --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/ta.msg @@ -0,0 +1,39 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset ta DAYS_OF_WEEK_FULL [list \ + "\u0b9e\u0bbe\u0baf\u0bbf\u0bb1\u0bc1"\ + "\u0ba4\u0bbf\u0b99\u0bcd\u0b95\u0bb3\u0bcd"\ + "\u0b9a\u0bc6\u0bb5\u0bcd\u0bb5\u0bbe\u0baf\u0bcd"\ + "\u0baa\u0bc1\u0ba4\u0ba9\u0bcd"\ + "\u0bb5\u0bbf\u0baf\u0bbe\u0bb4\u0ba9\u0bcd"\ + "\u0bb5\u0bc6\u0bb3\u0bcd\u0bb3\u0bbf"\ + "\u0b9a\u0ba9\u0bbf"] + ::msgcat::mcset ta MONTHS_ABBREV [list \ + "\u0b9c\u0ba9\u0bb5\u0bb0\u0bbf"\ + "\u0baa\u0bc6\u0baa\u0bcd\u0bb0\u0bb5\u0bb0\u0bbf"\ + "\u0bae\u0bbe\u0bb0\u0bcd\u0b9a\u0bcd"\ + "\u0b8f\u0baa\u0bcd\u0bb0\u0bb2\u0bcd"\ + "\u0bae\u0bc7"\ + "\u0b9c\u0bc2\u0ba9\u0bcd"\ + "\u0b9c\u0bc2\u0bb2\u0bc8"\ + "\u0b86\u0b95\u0bb8\u0bcd\u0b9f\u0bcd"\ + "\u0b9a\u0bc6\u0baa\u0bcd\u0b9f\u0bae\u0bcd\u0baa\u0bb0\u0bcd"\ + "\u0b85\u0b95\u0bcd\u0b9f\u0bcb\u0baa\u0bb0\u0bcd"\ + "\u0ba8\u0bb5\u0bae\u0bcd\u0baa\u0bb0\u0bcd"\ + "\u0b9f\u0bbf\u0b9a\u0bae\u0bcd\u0baa\u0bb0\u0bcdr"] + ::msgcat::mcset ta MONTHS_FULL [list \ + "\u0b9c\u0ba9\u0bb5\u0bb0\u0bbf"\ + "\u0baa\u0bc6\u0baa\u0bcd\u0bb0\u0bb5\u0bb0\u0bbf"\ + "\u0bae\u0bbe\u0bb0\u0bcd\u0b9a\u0bcd"\ + "\u0b8f\u0baa\u0bcd\u0bb0\u0bb2\u0bcd"\ + "\u0bae\u0bc7"\ + "\u0b9c\u0bc2\u0ba9\u0bcd"\ + "\u0b9c\u0bc2\u0bb2\u0bc8"\ + "\u0b86\u0b95\u0bb8\u0bcd\u0b9f\u0bcd"\ + "\u0b9a\u0bc6\u0baa\u0bcd\u0b9f\u0bae\u0bcd\u0baa\u0bb0\u0bcd"\ + "\u0b85\u0b95\u0bcd\u0b9f\u0bcb\u0baa\u0bb0\u0bcd"\ + "\u0ba8\u0bb5\u0bae\u0bcd\u0baa\u0bb0\u0bcd"\ + "\u0b9f\u0bbf\u0b9a\u0bae\u0bcd\u0baa\u0bb0\u0bcdr"] + ::msgcat::mcset ta AM "\u0b95\u0bbf\u0bae\u0bc1" + ::msgcat::mcset ta PM "\u0b95\u0bbf\u0baa\u0bbf" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/ta_in.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/ta_in.msg new file mode 100644 index 00000000..24590ac4 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/ta_in.msg @@ -0,0 +1,6 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset ta_IN DATE_FORMAT "%d %M %Y" + ::msgcat::mcset ta_IN TIME_FORMAT_12 "%I:%M:%S %P" + ::msgcat::mcset ta_IN DATE_TIME_FORMAT "%d %M %Y %I:%M:%S %P %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/te.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/te.msg new file mode 100644 index 00000000..6111473c --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/te.msg @@ -0,0 +1,47 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset te DAYS_OF_WEEK_ABBREV [list \ + "\u0c06\u0c26\u0c3f"\ + "\u0c38\u0c4b\u0c2e"\ + "\u0c2e\u0c02\u0c17\u0c33"\ + "\u0c2c\u0c41\u0c27"\ + "\u0c17\u0c41\u0c30\u0c41"\ + "\u0c36\u0c41\u0c15\u0c4d\u0c30"\ + "\u0c36\u0c28\u0c3f"] + ::msgcat::mcset te DAYS_OF_WEEK_FULL [list \ + "\u0c06\u0c26\u0c3f\u0c35\u0c3e\u0c30\u0c02"\ + "\u0c38\u0c4b\u0c2e\u0c35\u0c3e\u0c30\u0c02"\ + "\u0c2e\u0c02\u0c17\u0c33\u0c35\u0c3e\u0c30\u0c02"\ + "\u0c2c\u0c41\u0c27\u0c35\u0c3e\u0c30\u0c02"\ + "\u0c17\u0c41\u0c30\u0c41\u0c35\u0c3e\u0c30\u0c02"\ + "\u0c36\u0c41\u0c15\u0c4d\u0c30\u0c35\u0c3e\u0c30\u0c02"\ + "\u0c36\u0c28\u0c3f\u0c35\u0c3e\u0c30\u0c02"] + ::msgcat::mcset te MONTHS_ABBREV [list \ + "\u0c1c\u0c28\u0c35\u0c30\u0c3f"\ + "\u0c2b\u0c3f\u0c2c\u0c4d\u0c30\u0c35\u0c30\u0c3f"\ + "\u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c3f"\ + "\u0c0f\u0c2a\u0c4d\u0c30\u0c3f\u0c32\u0c4d"\ + "\u0c2e\u0c47"\ + "\u0c1c\u0c42\u0c28\u0c4d"\ + "\u0c1c\u0c42\u0c32\u0c48"\ + "\u0c06\u0c17\u0c38\u0c4d\u0c1f\u0c41"\ + "\u0c38\u0c46\u0c2a\u0c4d\u0c1f\u0c46\u0c02\u0c2c\u0c30\u0c4d"\ + "\u0c05\u0c15\u0c4d\u0c1f\u0c4b\u0c2c\u0c30\u0c4d"\ + "\u0c28\u0c35\u0c02\u0c2c\u0c30\u0c4d"\ + "\u0c21\u0c3f\u0c38\u0c46\u0c02\u0c2c\u0c30\u0c4d"\ + ""] + ::msgcat::mcset te MONTHS_FULL [list \ + "\u0c1c\u0c28\u0c35\u0c30\u0c3f"\ + "\u0c2b\u0c3f\u0c2c\u0c4d\u0c30\u0c35\u0c30\u0c3f"\ + "\u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c3f"\ + "\u0c0f\u0c2a\u0c4d\u0c30\u0c3f\u0c32\u0c4d"\ + "\u0c2e\u0c47"\ + "\u0c1c\u0c42\u0c28\u0c4d"\ + "\u0c1c\u0c42\u0c32\u0c48"\ + "\u0c06\u0c17\u0c38\u0c4d\u0c1f\u0c41"\ + "\u0c38\u0c46\u0c2a\u0c4d\u0c1f\u0c46\u0c02\u0c2c\u0c30\u0c4d"\ + "\u0c05\u0c15\u0c4d\u0c1f\u0c4b\u0c2c\u0c30\u0c4d"\ + "\u0c28\u0c35\u0c02\u0c2c\u0c30\u0c4d"\ + "\u0c21\u0c3f\u0c38\u0c46\u0c02\u0c2c\u0c30\u0c4d"\ + ""] +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/te_in.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/te_in.msg new file mode 100644 index 00000000..61638b5a --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/te_in.msg @@ -0,0 +1,8 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset te_IN AM "\u0c2a\u0c42\u0c30\u0c4d\u0c35\u0c3e\u0c39\u0c4d\u0c28" + ::msgcat::mcset te_IN PM "\u0c05\u0c2a\u0c30\u0c3e\u0c39\u0c4d\u0c28" + ::msgcat::mcset te_IN DATE_FORMAT "%d/%m/%Y" + ::msgcat::mcset te_IN TIME_FORMAT_12 "%I:%M:%S %P" + ::msgcat::mcset te_IN DATE_TIME_FORMAT "%d/%m/%Y %I:%M:%S %P %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/th.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/th.msg new file mode 100644 index 00000000..7486c35a --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/th.msg @@ -0,0 +1,54 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset th DAYS_OF_WEEK_ABBREV [list \ + "\u0e2d\u0e32."\ + "\u0e08."\ + "\u0e2d."\ + "\u0e1e."\ + "\u0e1e\u0e24."\ + "\u0e28."\ + "\u0e2a."] + ::msgcat::mcset th DAYS_OF_WEEK_FULL [list \ + "\u0e27\u0e31\u0e19\u0e2d\u0e32\u0e17\u0e34\u0e15\u0e22\u0e4c"\ + "\u0e27\u0e31\u0e19\u0e08\u0e31\u0e19\u0e17\u0e23\u0e4c"\ + "\u0e27\u0e31\u0e19\u0e2d\u0e31\u0e07\u0e04\u0e32\u0e23"\ + "\u0e27\u0e31\u0e19\u0e1e\u0e38\u0e18"\ + "\u0e27\u0e31\u0e19\u0e1e\u0e24\u0e2b\u0e31\u0e2a\u0e1a\u0e14\u0e35"\ + "\u0e27\u0e31\u0e19\u0e28\u0e38\u0e01\u0e23\u0e4c"\ + "\u0e27\u0e31\u0e19\u0e40\u0e2a\u0e32\u0e23\u0e4c"] + ::msgcat::mcset th MONTHS_ABBREV [list \ + "\u0e21.\u0e04."\ + "\u0e01.\u0e1e."\ + "\u0e21\u0e35.\u0e04."\ + "\u0e40\u0e21.\u0e22."\ + "\u0e1e.\u0e04."\ + "\u0e21\u0e34.\u0e22."\ + "\u0e01.\u0e04."\ + "\u0e2a.\u0e04."\ + "\u0e01.\u0e22."\ + "\u0e15.\u0e04."\ + "\u0e1e.\u0e22."\ + "\u0e18.\u0e04."\ + ""] + ::msgcat::mcset th MONTHS_FULL [list \ + "\u0e21\u0e01\u0e23\u0e32\u0e04\u0e21"\ + "\u0e01\u0e38\u0e21\u0e20\u0e32\u0e1e\u0e31\u0e19\u0e18\u0e4c"\ + "\u0e21\u0e35\u0e19\u0e32\u0e04\u0e21"\ + "\u0e40\u0e21\u0e29\u0e32\u0e22\u0e19"\ + "\u0e1e\u0e24\u0e29\u0e20\u0e32\u0e04\u0e21"\ + "\u0e21\u0e34\u0e16\u0e38\u0e19\u0e32\u0e22\u0e19"\ + "\u0e01\u0e23\u0e01\u0e0e\u0e32\u0e04\u0e21"\ + "\u0e2a\u0e34\u0e07\u0e2b\u0e32\u0e04\u0e21"\ + "\u0e01\u0e31\u0e19\u0e22\u0e32\u0e22\u0e19"\ + "\u0e15\u0e38\u0e25\u0e32\u0e04\u0e21"\ + "\u0e1e\u0e24\u0e28\u0e08\u0e34\u0e01\u0e32\u0e22\u0e19"\ + "\u0e18\u0e31\u0e19\u0e27\u0e32\u0e04\u0e21"\ + ""] + ::msgcat::mcset th BCE "\u0e25\u0e17\u0e35\u0e48" + ::msgcat::mcset th CE "\u0e04.\u0e28." + ::msgcat::mcset th AM "\u0e01\u0e48\u0e2d\u0e19\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07" + ::msgcat::mcset th PM "\u0e2b\u0e25\u0e31\u0e07\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07" + ::msgcat::mcset th DATE_FORMAT "%e/%m/%Y" + ::msgcat::mcset th TIME_FORMAT "%k:%M:%S" + ::msgcat::mcset th DATE_TIME_FORMAT "%e/%m/%Y %k:%M:%S %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/tr.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/tr.msg new file mode 100644 index 00000000..7b2ecf97 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/tr.msg @@ -0,0 +1,50 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset tr DAYS_OF_WEEK_ABBREV [list \ + "Paz"\ + "Pzt"\ + "Sal"\ + "\u00c7ar"\ + "Per"\ + "Cum"\ + "Cmt"] + ::msgcat::mcset tr DAYS_OF_WEEK_FULL [list \ + "Pazar"\ + "Pazartesi"\ + "Sal\u0131"\ + "\u00c7ar\u015famba"\ + "Per\u015fembe"\ + "Cuma"\ + "Cumartesi"] + ::msgcat::mcset tr MONTHS_ABBREV [list \ + "Oca"\ + "\u015eub"\ + "Mar"\ + "Nis"\ + "May"\ + "Haz"\ + "Tem"\ + "A\u011fu"\ + "Eyl"\ + "Eki"\ + "Kas"\ + "Ara"\ + ""] + ::msgcat::mcset tr MONTHS_FULL [list \ + "Ocak"\ + "\u015eubat"\ + "Mart"\ + "Nisan"\ + "May\u0131s"\ + "Haziran"\ + "Temmuz"\ + "A\u011fustos"\ + "Eyl\u00fcl"\ + "Ekim"\ + "Kas\u0131m"\ + "Aral\u0131k"\ + ""] + ::msgcat::mcset tr DATE_FORMAT "%d.%m.%Y" + ::msgcat::mcset tr TIME_FORMAT "%H:%M:%S" + ::msgcat::mcset tr DATE_TIME_FORMAT "%d.%m.%Y %H:%M:%S %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/uk.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/uk.msg new file mode 100644 index 00000000..7d4c64a0 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/uk.msg @@ -0,0 +1,52 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset uk DAYS_OF_WEEK_ABBREV [list \ + "\u043d\u0434"\ + "\u043f\u043d"\ + "\u0432\u0442"\ + "\u0441\u0440"\ + "\u0447\u0442"\ + "\u043f\u0442"\ + "\u0441\u0431"] + ::msgcat::mcset uk DAYS_OF_WEEK_FULL [list \ + "\u043d\u0435\u0434\u0456\u043b\u044f"\ + "\u043f\u043e\u043d\u0435\u0434\u0456\u043b\u043e\u043a"\ + "\u0432\u0456\u0432\u0442\u043e\u0440\u043e\u043a"\ + "\u0441\u0435\u0440\u0435\u0434\u0430"\ + "\u0447\u0435\u0442\u0432\u0435\u0440"\ + "\u043f'\u044f\u0442\u043d\u0438\u0446\u044f"\ + "\u0441\u0443\u0431\u043e\u0442\u0430"] + ::msgcat::mcset uk MONTHS_ABBREV [list \ + "\u0441\u0456\u0447"\ + "\u043b\u044e\u0442"\ + "\u0431\u0435\u0440"\ + "\u043a\u0432\u0456\u0442"\ + "\u0442\u0440\u0430\u0432"\ + "\u0447\u0435\u0440\u0432"\ + "\u043b\u0438\u043f"\ + "\u0441\u0435\u0440\u043f"\ + "\u0432\u0435\u0440"\ + "\u0436\u043e\u0432\u0442"\ + "\u043b\u0438\u0441\u0442"\ + "\u0433\u0440\u0443\u0434"\ + ""] + ::msgcat::mcset uk MONTHS_FULL [list \ + "\u0441\u0456\u0447\u043d\u044f"\ + "\u043b\u044e\u0442\u043e\u0433\u043e"\ + "\u0431\u0435\u0440\u0435\u0437\u043d\u044f"\ + "\u043a\u0432\u0456\u0442\u043d\u044f"\ + "\u0442\u0440\u0430\u0432\u043d\u044f"\ + "\u0447\u0435\u0440\u0432\u043d\u044f"\ + "\u043b\u0438\u043f\u043d\u044f"\ + "\u0441\u0435\u0440\u043f\u043d\u044f"\ + "\u0432\u0435\u0440\u0435\u0441\u043d\u044f"\ + "\u0436\u043e\u0432\u0442\u043d\u044f"\ + "\u043b\u0438\u0441\u0442\u043e\u043f\u0430\u0434\u0430"\ + "\u0433\u0440\u0443\u0434\u043d\u044f"\ + ""] + ::msgcat::mcset uk BCE "\u0434\u043e \u043d.\u0435." + ::msgcat::mcset uk CE "\u043f\u0456\u0441\u043b\u044f \u043d.\u0435." + ::msgcat::mcset uk DATE_FORMAT "%e/%m/%Y" + ::msgcat::mcset uk TIME_FORMAT "%k:%M:%S" + ::msgcat::mcset uk DATE_TIME_FORMAT "%e/%m/%Y %k:%M:%S %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/vi.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/vi.msg new file mode 100644 index 00000000..c98b2a6a --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/vi.msg @@ -0,0 +1,50 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset vi DAYS_OF_WEEK_ABBREV [list \ + "Th 2"\ + "Th 3"\ + "Th 4"\ + "Th 5"\ + "Th 6"\ + "Th 7"\ + "CN"] + ::msgcat::mcset vi DAYS_OF_WEEK_FULL [list \ + "Th\u01b0\u0301 hai"\ + "Th\u01b0\u0301 ba"\ + "Th\u01b0\u0301 t\u01b0"\ + "Th\u01b0\u0301 n\u0103m"\ + "Th\u01b0\u0301 s\u00e1u"\ + "Th\u01b0\u0301 ba\u0309y"\ + "Chu\u0309 nh\u00e2\u0323t"] + ::msgcat::mcset vi MONTHS_ABBREV [list \ + "Thg 1"\ + "Thg 2"\ + "Thg 3"\ + "Thg 4"\ + "Thg 5"\ + "Thg 6"\ + "Thg 7"\ + "Thg 8"\ + "Thg 9"\ + "Thg 10"\ + "Thg 11"\ + "Thg 12"\ + ""] + ::msgcat::mcset vi MONTHS_FULL [list \ + "Th\u00e1ng m\u00f4\u0323t"\ + "Th\u00e1ng hai"\ + "Th\u00e1ng ba"\ + "Th\u00e1ng t\u01b0"\ + "Th\u00e1ng n\u0103m"\ + "Th\u00e1ng s\u00e1u"\ + "Th\u00e1ng ba\u0309y"\ + "Th\u00e1ng t\u00e1m"\ + "Th\u00e1ng ch\u00edn"\ + "Th\u00e1ng m\u01b0\u01a1\u0300i"\ + "Th\u00e1ng m\u01b0\u01a1\u0300i m\u00f4\u0323t"\ + "Th\u00e1ng m\u01b0\u01a1\u0300i hai"\ + ""] + ::msgcat::mcset vi DATE_FORMAT "%d %b %Y" + ::msgcat::mcset vi TIME_FORMAT "%H:%M:%S" + ::msgcat::mcset vi DATE_TIME_FORMAT "%d %b %Y %H:%M:%S %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/zh.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/zh.msg new file mode 100644 index 00000000..b799a326 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/zh.msg @@ -0,0 +1,55 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset zh DAYS_OF_WEEK_ABBREV [list \ + "\u661f\u671f\u65e5"\ + "\u661f\u671f\u4e00"\ + "\u661f\u671f\u4e8c"\ + "\u661f\u671f\u4e09"\ + "\u661f\u671f\u56db"\ + "\u661f\u671f\u4e94"\ + "\u661f\u671f\u516d"] + ::msgcat::mcset zh DAYS_OF_WEEK_FULL [list \ + "\u661f\u671f\u65e5"\ + "\u661f\u671f\u4e00"\ + "\u661f\u671f\u4e8c"\ + "\u661f\u671f\u4e09"\ + "\u661f\u671f\u56db"\ + "\u661f\u671f\u4e94"\ + "\u661f\u671f\u516d"] + ::msgcat::mcset zh MONTHS_ABBREV [list \ + "\u4e00\u6708"\ + "\u4e8c\u6708"\ + "\u4e09\u6708"\ + "\u56db\u6708"\ + "\u4e94\u6708"\ + "\u516d\u6708"\ + "\u4e03\u6708"\ + "\u516b\u6708"\ + "\u4e5d\u6708"\ + "\u5341\u6708"\ + "\u5341\u4e00\u6708"\ + "\u5341\u4e8c\u6708"\ + ""] + ::msgcat::mcset zh MONTHS_FULL [list \ + "\u4e00\u6708"\ + "\u4e8c\u6708"\ + "\u4e09\u6708"\ + "\u56db\u6708"\ + "\u4e94\u6708"\ + "\u516d\u6708"\ + "\u4e03\u6708"\ + "\u516b\u6708"\ + "\u4e5d\u6708"\ + "\u5341\u6708"\ + "\u5341\u4e00\u6708"\ + "\u5341\u4e8c\u6708"\ + ""] + ::msgcat::mcset zh BCE "\u516c\u5143\u524d" + ::msgcat::mcset zh CE "\u516c\u5143" + ::msgcat::mcset zh AM "\u4e0a\u5348" + ::msgcat::mcset zh PM "\u4e0b\u5348" + ::msgcat::mcset zh LOCALE_NUMERALS "\u3007 \u4e00 \u4e8c \u4e09 \u56db \u4e94 \u516d \u4e03 \u516b \u4e5d \u5341 \u5341\u4e00 \u5341\u4e8c \u5341\u4e09 \u5341\u56db \u5341\u4e94 \u5341\u516d \u5341\u4e03 \u5341\u516b \u5341\u4e5d \u4e8c\u5341 \u5eff\u4e00 \u5eff\u4e8c \u5eff\u4e09 \u5eff\u56db \u5eff\u4e94 \u5eff\u516d \u5eff\u4e03 \u5eff\u516b \u5eff\u4e5d \u4e09\u5341 \u5345\u4e00 \u5345\u4e8c \u5345\u4e09 \u5345\u56db \u5345\u4e94 \u5345\u516d \u5345\u4e03 \u5345\u516b \u5345\u4e5d \u56db\u5341 \u56db\u5341\u4e00 \u56db\u5341\u4e8c \u56db\u5341\u4e09 \u56db\u5341\u56db \u56db\u5341\u4e94 \u56db\u5341\u516d \u56db\u5341\u4e03 \u56db\u5341\u516b \u56db\u5341\u4e5d \u4e94\u5341 \u4e94\u5341\u4e00 \u4e94\u5341\u4e8c \u4e94\u5341\u4e09 \u4e94\u5341\u56db \u4e94\u5341\u4e94 \u4e94\u5341\u516d \u4e94\u5341\u4e03 \u4e94\u5341\u516b \u4e94\u5341\u4e5d \u516d\u5341 \u516d\u5341\u4e00 \u516d\u5341\u4e8c \u516d\u5341\u4e09 \u516d\u5341\u56db \u516d\u5341\u4e94 \u516d\u5341\u516d \u516d\u5341\u4e03 \u516d\u5341\u516b \u516d\u5341\u4e5d \u4e03\u5341 \u4e03\u5341\u4e00 \u4e03\u5341\u4e8c \u4e03\u5341\u4e09 \u4e03\u5341\u56db \u4e03\u5341\u4e94 \u4e03\u5341\u516d \u4e03\u5341\u4e03 \u4e03\u5341\u516b \u4e03\u5341\u4e5d \u516b\u5341 \u516b\u5341\u4e00 \u516b\u5341\u4e8c \u516b\u5341\u4e09 \u516b\u5341\u56db \u516b\u5341\u4e94 \u516b\u5341\u516d \u516b\u5341\u4e03 \u516b\u5341\u516b \u516b\u5341\u4e5d \u4e5d\u5341 \u4e5d\u5341\u4e00 \u4e5d\u5341\u4e8c \u4e5d\u5341\u4e09 \u4e5d\u5341\u56db \u4e5d\u5341\u4e94 \u4e5d\u5341\u516d \u4e5d\u5341\u4e03 \u4e5d\u5341\u516b \u4e5d\u5341\u4e5d" + ::msgcat::mcset zh LOCALE_DATE_FORMAT "\u516c\u5143%Y\u5e74%B%Od\u65e5" + ::msgcat::mcset zh LOCALE_TIME_FORMAT "%OH\u65f6%OM\u5206%OS\u79d2" + ::msgcat::mcset zh LOCALE_DATE_TIME_FORMAT "%A %Y\u5e74%B%Od\u65e5%OH\u65f6%OM\u5206%OS\u79d2 %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/zh_cn.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/zh_cn.msg new file mode 100644 index 00000000..d62ce775 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/zh_cn.msg @@ -0,0 +1,7 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset zh_CN DATE_FORMAT "%Y-%m-%e" + ::msgcat::mcset zh_CN TIME_FORMAT "%k:%M:%S" + ::msgcat::mcset zh_CN TIME_FORMAT_12 "%P%I\u65f6%M\u5206%S\u79d2" + ::msgcat::mcset zh_CN DATE_TIME_FORMAT "%Y-%m-%e %k:%M:%S %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/zh_hk.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/zh_hk.msg new file mode 100644 index 00000000..badb1dd3 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/zh_hk.msg @@ -0,0 +1,28 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset zh_HK DAYS_OF_WEEK_ABBREV [list \ + "\u65e5"\ + "\u4e00"\ + "\u4e8c"\ + "\u4e09"\ + "\u56db"\ + "\u4e94"\ + "\u516d"] + ::msgcat::mcset zh_HK MONTHS_ABBREV [list \ + "1\u6708"\ + "2\u6708"\ + "3\u6708"\ + "4\u6708"\ + "5\u6708"\ + "6\u6708"\ + "7\u6708"\ + "8\u6708"\ + "9\u6708"\ + "10\u6708"\ + "11\u6708"\ + "12\u6708"\ + ""] + ::msgcat::mcset zh_HK DATE_FORMAT "%Y\u5e74%m\u6708%e\u65e5" + ::msgcat::mcset zh_HK TIME_FORMAT_12 "%P%I:%M:%S" + ::msgcat::mcset zh_HK DATE_TIME_FORMAT "%Y\u5e74%m\u6708%e\u65e5 %P%I:%M:%S %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/zh_sg.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/zh_sg.msg new file mode 100644 index 00000000..a2f3e39d --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/zh_sg.msg @@ -0,0 +1,8 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset zh_SG AM "\u4e0a\u5348" + ::msgcat::mcset zh_SG PM "\u4e2d\u5348" + ::msgcat::mcset zh_SG DATE_FORMAT "%d %B %Y" + ::msgcat::mcset zh_SG TIME_FORMAT_12 "%P %I:%M:%S" + ::msgcat::mcset zh_SG DATE_TIME_FORMAT "%d %B %Y %P %I:%M:%S %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/zh_tw.msg b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/zh_tw.msg new file mode 100644 index 00000000..e0796b11 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/msgs/zh_tw.msg @@ -0,0 +1,8 @@ +# created by tools/loadICU.tcl -- do not edit +namespace eval ::tcl::clock { + ::msgcat::mcset zh_TW BCE "\u6c11\u570b\u524d" + ::msgcat::mcset zh_TW CE "\u6c11\u570b" + ::msgcat::mcset zh_TW DATE_FORMAT "%Y/%m/%e" + ::msgcat::mcset zh_TW TIME_FORMAT_12 "%P %I:%M:%S" + ::msgcat::mcset zh_TW DATE_TIME_FORMAT "%Y/%m/%e %P %I:%M:%S %z" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/opt0.4/optparse.tcl b/extensions/fablabchemnitz/inkstitch/bin/tcl/opt0.4/optparse.tcl new file mode 100644 index 00000000..c9438a05 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/opt0.4/optparse.tcl @@ -0,0 +1,1072 @@ +# optparse.tcl -- +# +# (private) Option parsing package +# Primarily used internally by the safe:: code. +# +# WARNING: This code will go away in a future release +# of Tcl. It is NOT supported and you should not rely +# on it. If your code does rely on this package you +# may directly incorporate this code into your application. + +package require Tcl 8.2 +# When this version number changes, update the pkgIndex.tcl file +# and the install directory in the Makefiles. +package provide opt 0.4.5 + +namespace eval ::tcl { + + # Exported APIs + namespace export OptKeyRegister OptKeyDelete OptKeyError OptKeyParse \ + OptProc OptProcArgGiven OptParse \ + Lempty Lget \ + Lassign Lvarpop Lvarpop1 Lvarset Lvarincr \ + SetMax SetMin + + +################# Example of use / 'user documentation' ################### + + proc OptCreateTestProc {} { + + # Defines ::tcl::OptParseTest as a test proc with parsed arguments + # (can't be defined before the code below is loaded (before "OptProc")) + + # Every OptProc give usage information on "procname -help". + # Try "tcl::OptParseTest -help" and "tcl::OptParseTest -a" and + # then other arguments. + # + # example of 'valid' call: + # ::tcl::OptParseTest save -4 -pr 23 -libsok SybTcl\ + # -nostatics false ch1 + OptProc OptParseTest { + {subcommand -choice {save print} "sub command"} + {arg1 3 "some number"} + {-aflag} + {-intflag 7} + {-weirdflag "help string"} + {-noStatics "Not ok to load static packages"} + {-nestedloading1 true "OK to load into nested slaves"} + {-nestedloading2 -boolean true "OK to load into nested slaves"} + {-libsOK -choice {Tk SybTcl} + "List of packages that can be loaded"} + {-precision -int 12 "Number of digits of precision"} + {-intval 7 "An integer"} + {-scale -float 1.0 "Scale factor"} + {-zoom 1.0 "Zoom factor"} + {-arbitrary foobar "Arbitrary string"} + {-random -string 12 "Random string"} + {-listval -list {} "List value"} + {-blahflag -blah abc "Funny type"} + {arg2 -boolean "a boolean"} + {arg3 -choice "ch1 ch2"} + {?optarg? -list {} "optional argument"} + } { + foreach v [info locals] { + puts stderr [format "%14s : %s" $v [set $v]] + } + } + } + +################### No User serviceable part below ! ############### + + # Array storing the parsed descriptions + variable OptDesc; + array set OptDesc {}; + # Next potentially free key id (numeric) + variable OptDescN 0; + +# Inside algorithm/mechanism description: +# (not for the faint hearted ;-) +# +# The argument description is parsed into a "program tree" +# It is called a "program" because it is the program used by +# the state machine interpreter that use that program to +# actually parse the arguments at run time. +# +# The general structure of a "program" is +# notation (pseudo bnf like) +# name :== definition defines "name" as being "definition" +# { x y z } means list of x, y, and z +# x* means x repeated 0 or more time +# x+ means "x x*" +# x? means optionally x +# x | y means x or y +# "cccc" means the literal string +# +# program :== { programCounter programStep* } +# +# programStep :== program | singleStep +# +# programCounter :== {"P" integer+ } +# +# singleStep :== { instruction parameters* } +# +# instruction :== single element list +# +# (the difference between singleStep and program is that \ +# llength [lindex $program 0] >= 2 +# while +# llength [lindex $singleStep 0] == 1 +# ) +# +# And for this application: +# +# singleStep :== { instruction varname {hasBeenSet currentValue} type +# typeArgs help } +# instruction :== "flags" | "value" +# type :== knowType | anyword +# knowType :== "string" | "int" | "boolean" | "boolflag" | "float" +# | "choice" +# +# for type "choice" typeArgs is a list of possible choices, the first one +# is the default value. for all other types the typeArgs is the default value +# +# a "boolflag" is the type for a flag whose presence or absence, without +# additional arguments means respectively true or false (default flag type). +# +# programCounter is the index in the list of the currently processed +# programStep (thus starting at 1 (0 is {"P" prgCounterValue}). +# If it is a list it points toward each currently selected programStep. +# (like for "flags", as they are optional, form a set and programStep). + +# Performance/Implementation issues +# --------------------------------- +# We use tcl lists instead of arrays because with tcl8.0 +# they should start to be much faster. +# But this code use a lot of helper procs (like Lvarset) +# which are quite slow and would be helpfully optimized +# for instance by being written in C. Also our struture +# is complex and there is maybe some places where the +# string rep might be calculated at great exense. to be checked. + +# +# Parse a given description and saves it here under the given key +# generate a unused keyid if not given +# +proc ::tcl::OptKeyRegister {desc {key ""}} { + variable OptDesc; + variable OptDescN; + if {[string equal $key ""]} { + # in case a key given to us as a parameter was a number + while {[info exists OptDesc($OptDescN)]} {incr OptDescN} + set key $OptDescN; + incr OptDescN; + } + # program counter + set program [list [list "P" 1]]; + + # are we processing flags (which makes a single program step) + set inflags 0; + + set state {}; + + # flag used to detect that we just have a single (flags set) subprogram. + set empty 1; + + foreach item $desc { + if {$state == "args"} { + # more items after 'args'... + return -code error "'args' special argument must be the last one"; + } + set res [OptNormalizeOne $item]; + set state [lindex $res 0]; + if {$inflags} { + if {$state == "flags"} { + # add to 'subprogram' + lappend flagsprg $res; + } else { + # put in the flags + # structure for flag programs items is a list of + # {subprgcounter {prg flag 1} {prg flag 2} {...}} + lappend program $flagsprg; + # put the other regular stuff + lappend program $res; + set inflags 0; + set empty 0; + } + } else { + if {$state == "flags"} { + set inflags 1; + # sub program counter + first sub program + set flagsprg [list [list "P" 1] $res]; + } else { + lappend program $res; + set empty 0; + } + } + } + if {$inflags} { + if {$empty} { + # We just have the subprogram, optimize and remove + # unneeded level: + set program $flagsprg; + } else { + lappend program $flagsprg; + } + } + + set OptDesc($key) $program; + + return $key; +} + +# +# Free the storage for that given key +# +proc ::tcl::OptKeyDelete {key} { + variable OptDesc; + unset OptDesc($key); +} + + # Get the parsed description stored under the given key. + proc OptKeyGetDesc {descKey} { + variable OptDesc; + if {![info exists OptDesc($descKey)]} { + return -code error "Unknown option description key \"$descKey\""; + } + set OptDesc($descKey); + } + +# Parse entry point for ppl who don't want to register with a key, +# for instance because the description changes dynamically. +# (otherwise one should really use OptKeyRegister once + OptKeyParse +# as it is way faster or simply OptProc which does it all) +# Assign a temporary key, call OptKeyParse and then free the storage +proc ::tcl::OptParse {desc arglist} { + set tempkey [OptKeyRegister $desc]; + set ret [catch {uplevel 1 [list ::tcl::OptKeyParse $tempkey $arglist]} res]; + OptKeyDelete $tempkey; + return -code $ret $res; +} + +# Helper function, replacement for proc that both +# register the description under a key which is the name of the proc +# (and thus unique to that code) +# and add a first line to the code to call the OptKeyParse proc +# Stores the list of variables that have been actually given by the user +# (the other will be sets to their default value) +# into local variable named "Args". +proc ::tcl::OptProc {name desc body} { + set namespace [uplevel 1 [list ::namespace current]]; + if {[string match "::*" $name] || [string equal $namespace "::"]} { + # absolute name or global namespace, name is the key + set key $name; + } else { + # we are relative to some non top level namespace: + set key "${namespace}::${name}"; + } + OptKeyRegister $desc $key; + uplevel 1 [list ::proc $name args "set Args \[::tcl::OptKeyParse $key \$args\]\n$body"]; + return $key; +} +# Check that a argument has been given +# assumes that "OptProc" has been used as it will check in "Args" list +proc ::tcl::OptProcArgGiven {argname} { + upvar Args alist; + expr {[lsearch $alist $argname] >=0} +} + + ####### + # Programs/Descriptions manipulation + + # Return the instruction word/list of a given step/(sub)program + proc OptInstr {lst} { + lindex $lst 0; + } + # Is a (sub) program or a plain instruction ? + proc OptIsPrg {lst} { + expr {[llength [OptInstr $lst]]>=2} + } + # Is this instruction a program counter or a real instr + proc OptIsCounter {item} { + expr {[lindex $item 0]=="P"} + } + # Current program counter (2nd word of first word) + proc OptGetPrgCounter {lst} { + Lget $lst {0 1} + } + # Current program counter (2nd word of first word) + proc OptSetPrgCounter {lstName newValue} { + upvar $lstName lst; + set lst [lreplace $lst 0 0 [concat "P" $newValue]]; + } + # returns a list of currently selected items. + proc OptSelection {lst} { + set res {}; + foreach idx [lrange [lindex $lst 0] 1 end] { + lappend res [Lget $lst $idx]; + } + return $res; + } + + # Advance to next description + proc OptNextDesc {descName} { + uplevel 1 [list Lvarincr $descName {0 1}]; + } + + # Get the current description, eventually descend + proc OptCurDesc {descriptions} { + lindex $descriptions [OptGetPrgCounter $descriptions]; + } + # get the current description, eventually descend + # through sub programs as needed. + proc OptCurDescFinal {descriptions} { + set item [OptCurDesc $descriptions]; + # Descend untill we get the actual item and not a sub program + while {[OptIsPrg $item]} { + set item [OptCurDesc $item]; + } + return $item; + } + # Current final instruction adress + proc OptCurAddr {descriptions {start {}}} { + set adress [OptGetPrgCounter $descriptions]; + lappend start $adress; + set item [lindex $descriptions $adress]; + if {[OptIsPrg $item]} { + return [OptCurAddr $item $start]; + } else { + return $start; + } + } + # Set the value field of the current instruction + proc OptCurSetValue {descriptionsName value} { + upvar $descriptionsName descriptions + # get the current item full adress + set adress [OptCurAddr $descriptions]; + # use the 3th field of the item (see OptValue / OptNewInst) + lappend adress 2 + Lvarset descriptions $adress [list 1 $value]; + # ^hasBeenSet flag + } + + # empty state means done/paste the end of the program + proc OptState {item} { + lindex $item 0 + } + + # current state + proc OptCurState {descriptions} { + OptState [OptCurDesc $descriptions]; + } + + ####### + # Arguments manipulation + + # Returns the argument that has to be processed now + proc OptCurrentArg {lst} { + lindex $lst 0; + } + # Advance to next argument + proc OptNextArg {argsName} { + uplevel 1 [list Lvarpop1 $argsName]; + } + ####### + + + + + + # Loop over all descriptions, calling OptDoOne which will + # eventually eat all the arguments. + proc OptDoAll {descriptionsName argumentsName} { + upvar $descriptionsName descriptions + upvar $argumentsName arguments; +# puts "entered DoAll"; + # Nb: the places where "state" can be set are tricky to figure + # because DoOne sets the state to flagsValue and return -continue + # when needed... + set state [OptCurState $descriptions]; + # We'll exit the loop in "OptDoOne" or when state is empty. + while 1 { + set curitem [OptCurDesc $descriptions]; + # Do subprograms if needed, call ourselves on the sub branch + while {[OptIsPrg $curitem]} { + OptDoAll curitem arguments +# puts "done DoAll sub"; + # Insert back the results in current tree; + Lvarset1nc descriptions [OptGetPrgCounter $descriptions]\ + $curitem; + OptNextDesc descriptions; + set curitem [OptCurDesc $descriptions]; + set state [OptCurState $descriptions]; + } +# puts "state = \"$state\" - arguments=($arguments)"; + if {[Lempty $state]} { + # Nothing left to do, we are done in this branch: + break; + } + # The following statement can make us terminate/continue + # as it use return -code {break, continue, return and error} + # codes + OptDoOne descriptions state arguments; + # If we are here, no special return code where issued, + # we'll step to next instruction : +# puts "new state = \"$state\""; + OptNextDesc descriptions; + set state [OptCurState $descriptions]; + } + } + + # Process one step for the state machine, + # eventually consuming the current argument. + proc OptDoOne {descriptionsName stateName argumentsName} { + upvar $argumentsName arguments; + upvar $descriptionsName descriptions; + upvar $stateName state; + + # the special state/instruction "args" eats all + # the remaining args (if any) + if {($state == "args")} { + if {![Lempty $arguments]} { + # If there is no additional arguments, leave the default value + # in. + OptCurSetValue descriptions $arguments; + set arguments {}; + } +# puts "breaking out ('args' state: consuming every reminding args)" + return -code break; + } + + if {[Lempty $arguments]} { + if {$state == "flags"} { + # no argument and no flags : we're done +# puts "returning to previous (sub)prg (no more args)"; + return -code return; + } elseif {$state == "optValue"} { + set state next; # not used, for debug only + # go to next state + return ; + } else { + return -code error [OptMissingValue $descriptions]; + } + } else { + set arg [OptCurrentArg $arguments]; + } + + switch $state { + flags { + # A non-dash argument terminates the options, as does -- + + # Still a flag ? + if {![OptIsFlag $arg]} { + # don't consume the argument, return to previous prg + return -code return; + } + # consume the flag + OptNextArg arguments; + if {[string equal "--" $arg]} { + # return from 'flags' state + return -code return; + } + + set hits [OptHits descriptions $arg]; + if {$hits > 1} { + return -code error [OptAmbigous $descriptions $arg] + } elseif {$hits == 0} { + return -code error [OptFlagUsage $descriptions $arg] + } + set item [OptCurDesc $descriptions]; + if {[OptNeedValue $item]} { + # we need a value, next state is + set state flagValue; + } else { + OptCurSetValue descriptions 1; + } + # continue + return -code continue; + } + flagValue - + value { + set item [OptCurDesc $descriptions]; + # Test the values against their required type + if {[catch {OptCheckType $arg\ + [OptType $item] [OptTypeArgs $item]} val]} { + return -code error [OptBadValue $item $arg $val] + } + # consume the value + OptNextArg arguments; + # set the value + OptCurSetValue descriptions $val; + # go to next state + if {$state == "flagValue"} { + set state flags + return -code continue; + } else { + set state next; # not used, for debug only + return ; # will go on next step + } + } + optValue { + set item [OptCurDesc $descriptions]; + # Test the values against their required type + if {![catch {OptCheckType $arg\ + [OptType $item] [OptTypeArgs $item]} val]} { + # right type, so : + # consume the value + OptNextArg arguments; + # set the value + OptCurSetValue descriptions $val; + } + # go to next state + set state next; # not used, for debug only + return ; # will go on next step + } + } + # If we reach this point: an unknown + # state as been entered ! + return -code error "Bug! unknown state in DoOne \"$state\"\ + (prg counter [OptGetPrgCounter $descriptions]:\ + [OptCurDesc $descriptions])"; + } + +# Parse the options given the key to previously registered description +# and arguments list +proc ::tcl::OptKeyParse {descKey arglist} { + + set desc [OptKeyGetDesc $descKey]; + + # make sure -help always give usage + if {[string equal -nocase "-help" $arglist]} { + return -code error [OptError "Usage information:" $desc 1]; + } + + OptDoAll desc arglist; + + if {![Lempty $arglist]} { + return -code error [OptTooManyArgs $desc $arglist]; + } + + # Analyse the result + # Walk through the tree: + OptTreeVars $desc "#[expr {[info level]-1}]" ; +} + + # determine string length for nice tabulated output + proc OptTreeVars {desc level {vnamesLst {}}} { + foreach item $desc { + if {[OptIsCounter $item]} continue; + if {[OptIsPrg $item]} { + set vnamesLst [OptTreeVars $item $level $vnamesLst]; + } else { + set vname [OptVarName $item]; + upvar $level $vname var + if {[OptHasBeenSet $item]} { +# puts "adding $vname" + # lets use the input name for the returned list + # it is more usefull, for instance you can check that + # no flags at all was given with expr + # {![string match "*-*" $Args]} + lappend vnamesLst [OptName $item]; + set var [OptValue $item]; + } else { + set var [OptDefaultValue $item]; + } + } + } + return $vnamesLst + } + + +# Check the type of a value +# and emit an error if arg is not of the correct type +# otherwise returns the canonical value of that arg (ie 0/1 for booleans) +proc ::tcl::OptCheckType {arg type {typeArgs ""}} { +# puts "checking '$arg' against '$type' ($typeArgs)"; + + # only types "any", "choice", and numbers can have leading "-" + + switch -exact -- $type { + int { + if {![string is integer -strict $arg]} { + error "not an integer" + } + return $arg; + } + float { + return [expr {double($arg)}] + } + script - + list { + # if llength fail : malformed list + if {[llength $arg]==0 && [OptIsFlag $arg]} { + error "no values with leading -" + } + return $arg; + } + boolean { + if {![string is boolean -strict $arg]} { + error "non canonic boolean" + } + # convert true/false because expr/if is broken with "!,... + return [expr {$arg ? 1 : 0}] + } + choice { + if {[lsearch -exact $typeArgs $arg] < 0} { + error "invalid choice" + } + return $arg; + } + any { + return $arg; + } + string - + default { + if {[OptIsFlag $arg]} { + error "no values with leading -" + } + return $arg + } + } + return neverReached; +} + + # internal utilities + + # returns the number of flags matching the given arg + # sets the (local) prg counter to the list of matches + proc OptHits {descName arg} { + upvar $descName desc; + set hits 0 + set hitems {} + set i 1; + + set larg [string tolower $arg]; + set len [string length $larg]; + set last [expr {$len-1}]; + + foreach item [lrange $desc 1 end] { + set flag [OptName $item] + # lets try to match case insensitively + # (string length ought to be cheap) + set lflag [string tolower $flag]; + if {$len == [string length $lflag]} { + if {[string equal $larg $lflag]} { + # Exact match case + OptSetPrgCounter desc $i; + return 1; + } + } elseif {[string equal $larg [string range $lflag 0 $last]]} { + lappend hitems $i; + incr hits; + } + incr i; + } + if {$hits} { + OptSetPrgCounter desc $hitems; + } + return $hits + } + + # Extract fields from the list structure: + + proc OptName {item} { + lindex $item 1; + } + proc OptHasBeenSet {item} { + Lget $item {2 0}; + } + proc OptValue {item} { + Lget $item {2 1}; + } + + proc OptIsFlag {name} { + string match "-*" $name; + } + proc OptIsOpt {name} { + string match {\?*} $name; + } + proc OptVarName {item} { + set name [OptName $item]; + if {[OptIsFlag $name]} { + return [string range $name 1 end]; + } elseif {[OptIsOpt $name]} { + return [string trim $name "?"]; + } else { + return $name; + } + } + proc OptType {item} { + lindex $item 3 + } + proc OptTypeArgs {item} { + lindex $item 4 + } + proc OptHelp {item} { + lindex $item 5 + } + proc OptNeedValue {item} { + expr {![string equal [OptType $item] boolflag]} + } + proc OptDefaultValue {item} { + set val [OptTypeArgs $item] + switch -exact -- [OptType $item] { + choice {return [lindex $val 0]} + boolean - + boolflag { + # convert back false/true to 0/1 because expr !$bool + # is broken.. + if {$val} { + return 1 + } else { + return 0 + } + } + } + return $val + } + + # Description format error helper + proc OptOptUsage {item {what ""}} { + return -code error "invalid description format$what: $item\n\ + should be a list of {varname|-flagname ?-type? ?defaultvalue?\ + ?helpstring?}"; + } + + + # Generate a canonical form single instruction + proc OptNewInst {state varname type typeArgs help} { + list $state $varname [list 0 {}] $type $typeArgs $help; + # ^ ^ + # | | + # hasBeenSet=+ +=currentValue + } + + # Translate one item to canonical form + proc OptNormalizeOne {item} { + set lg [Lassign $item varname arg1 arg2 arg3]; +# puts "called optnormalizeone '$item' v=($varname), lg=$lg"; + set isflag [OptIsFlag $varname]; + set isopt [OptIsOpt $varname]; + if {$isflag} { + set state "flags"; + } elseif {$isopt} { + set state "optValue"; + } elseif {![string equal $varname "args"]} { + set state "value"; + } else { + set state "args"; + } + + # apply 'smart' 'fuzzy' logic to try to make + # description writer's life easy, and our's difficult : + # let's guess the missing arguments :-) + + switch $lg { + 1 { + if {$isflag} { + return [OptNewInst $state $varname boolflag false ""]; + } else { + return [OptNewInst $state $varname any "" ""]; + } + } + 2 { + # varname default + # varname help + set type [OptGuessType $arg1] + if {[string equal $type "string"]} { + if {$isflag} { + set type boolflag + set def false + } else { + set type any + set def "" + } + set help $arg1 + } else { + set help "" + set def $arg1 + } + return [OptNewInst $state $varname $type $def $help]; + } + 3 { + # varname type value + # varname value comment + + if {[regexp {^-(.+)$} $arg1 x type]} { + # flags/optValue as they are optional, need a "value", + # on the contrary, for a variable (non optional), + # default value is pointless, 'cept for choices : + if {$isflag || $isopt || ($type == "choice")} { + return [OptNewInst $state $varname $type $arg2 ""]; + } else { + return [OptNewInst $state $varname $type "" $arg2]; + } + } else { + return [OptNewInst $state $varname\ + [OptGuessType $arg1] $arg1 $arg2] + } + } + 4 { + if {[regexp {^-(.+)$} $arg1 x type]} { + return [OptNewInst $state $varname $type $arg2 $arg3]; + } else { + return -code error [OptOptUsage $item]; + } + } + default { + return -code error [OptOptUsage $item]; + } + } + } + + # Auto magic lazy type determination + proc OptGuessType {arg} { + if { $arg == "true" || $arg == "false" } { + return boolean + } + if {[string is integer -strict $arg]} { + return int + } + if {[string is double -strict $arg]} { + return float + } + return string + } + + # Error messages front ends + + proc OptAmbigous {desc arg} { + OptError "ambigous option \"$arg\", choose from:" [OptSelection $desc] + } + proc OptFlagUsage {desc arg} { + OptError "bad flag \"$arg\", must be one of" $desc; + } + proc OptTooManyArgs {desc arguments} { + OptError "too many arguments (unexpected argument(s): $arguments),\ + usage:"\ + $desc 1 + } + proc OptParamType {item} { + if {[OptIsFlag $item]} { + return "flag"; + } else { + return "parameter"; + } + } + proc OptBadValue {item arg {err {}}} { +# puts "bad val err = \"$err\""; + OptError "bad value \"$arg\" for [OptParamType $item]"\ + [list $item] + } + proc OptMissingValue {descriptions} { +# set item [OptCurDescFinal $descriptions]; + set item [OptCurDesc $descriptions]; + OptError "no value given for [OptParamType $item] \"[OptName $item]\"\ + (use -help for full usage) :"\ + [list $item] + } + +proc ::tcl::OptKeyError {prefix descKey {header 0}} { + OptError $prefix [OptKeyGetDesc $descKey] $header; +} + + # determine string length for nice tabulated output + proc OptLengths {desc nlName tlName dlName} { + upvar $nlName nl; + upvar $tlName tl; + upvar $dlName dl; + foreach item $desc { + if {[OptIsCounter $item]} continue; + if {[OptIsPrg $item]} { + OptLengths $item nl tl dl + } else { + SetMax nl [string length [OptName $item]] + SetMax tl [string length [OptType $item]] + set dv [OptTypeArgs $item]; + if {[OptState $item] != "header"} { + set dv "($dv)"; + } + set l [string length $dv]; + # limit the space allocated to potentially big "choices" + if {([OptType $item] != "choice") || ($l<=12)} { + SetMax dl $l + } else { + if {![info exists dl]} { + set dl 0 + } + } + } + } + } + # output the tree + proc OptTree {desc nl tl dl} { + set res ""; + foreach item $desc { + if {[OptIsCounter $item]} continue; + if {[OptIsPrg $item]} { + append res [OptTree $item $nl $tl $dl]; + } else { + set dv [OptTypeArgs $item]; + if {[OptState $item] != "header"} { + set dv "($dv)"; + } + append res [format "\n %-*s %-*s %-*s %s" \ + $nl [OptName $item] $tl [OptType $item] \ + $dl $dv [OptHelp $item]] + } + } + return $res; + } + +# Give nice usage string +proc ::tcl::OptError {prefix desc {header 0}} { + # determine length + if {$header} { + # add faked instruction + set h [list [OptNewInst header Var/FlagName Type Value Help]]; + lappend h [OptNewInst header ------------ ---- ----- ----]; + lappend h [OptNewInst header {( -help} "" "" {gives this help )}] + set desc [concat $h $desc] + } + OptLengths $desc nl tl dl + # actually output + return "$prefix[OptTree $desc $nl $tl $dl]" +} + + +################ General Utility functions ####################### + +# +# List utility functions +# Naming convention: +# "Lvarxxx" take the list VARiable name as argument +# "Lxxxx" take the list value as argument +# (which is not costly with Tcl8 objects system +# as it's still a reference and not a copy of the values) +# + +# Is that list empty ? +proc ::tcl::Lempty {list} { + expr {[llength $list]==0} +} + +# Gets the value of one leaf of a lists tree +proc ::tcl::Lget {list indexLst} { + if {[llength $indexLst] <= 1} { + return [lindex $list $indexLst]; + } + Lget [lindex $list [lindex $indexLst 0]] [lrange $indexLst 1 end]; +} +# Sets the value of one leaf of a lists tree +# (we use the version that does not create the elements because +# it would be even slower... needs to be written in C !) +# (nb: there is a non trivial recursive problem with indexes 0, +# which appear because there is no difference between a list +# of 1 element and 1 element alone : [list "a"] == "a" while +# it should be {a} and [listp a] should be 0 while [listp {a b}] would be 1 +# and [listp "a b"] maybe 0. listp does not exist either...) +proc ::tcl::Lvarset {listName indexLst newValue} { + upvar $listName list; + if {[llength $indexLst] <= 1} { + Lvarset1nc list $indexLst $newValue; + } else { + set idx [lindex $indexLst 0]; + set targetList [lindex $list $idx]; + # reduce refcount on targetList (not really usefull now, + # could be with optimizing compiler) +# Lvarset1 list $idx {}; + # recursively replace in targetList + Lvarset targetList [lrange $indexLst 1 end] $newValue; + # put updated sub list back in the tree + Lvarset1nc list $idx $targetList; + } +} +# Set one cell to a value, eventually create all the needed elements +# (on level-1 of lists) +variable emptyList {} +proc ::tcl::Lvarset1 {listName index newValue} { + upvar $listName list; + if {$index < 0} {return -code error "invalid negative index"} + set lg [llength $list]; + if {$index >= $lg} { + variable emptyList; + for {set i $lg} {$i<$index} {incr i} { + lappend list $emptyList; + } + lappend list $newValue; + } else { + set list [lreplace $list $index $index $newValue]; + } +} +# same as Lvarset1 but no bound checking / creation +proc ::tcl::Lvarset1nc {listName index newValue} { + upvar $listName list; + set list [lreplace $list $index $index $newValue]; +} +# Increments the value of one leaf of a lists tree +# (which must exists) +proc ::tcl::Lvarincr {listName indexLst {howMuch 1}} { + upvar $listName list; + if {[llength $indexLst] <= 1} { + Lvarincr1 list $indexLst $howMuch; + } else { + set idx [lindex $indexLst 0]; + set targetList [lindex $list $idx]; + # reduce refcount on targetList + Lvarset1nc list $idx {}; + # recursively replace in targetList + Lvarincr targetList [lrange $indexLst 1 end] $howMuch; + # put updated sub list back in the tree + Lvarset1nc list $idx $targetList; + } +} +# Increments the value of one cell of a list +proc ::tcl::Lvarincr1 {listName index {howMuch 1}} { + upvar $listName list; + set newValue [expr {[lindex $list $index]+$howMuch}]; + set list [lreplace $list $index $index $newValue]; + return $newValue; +} +# Removes the first element of a list +# and returns the new list value +proc ::tcl::Lvarpop1 {listName} { + upvar $listName list; + set list [lrange $list 1 end]; +} +# Same but returns the removed element +# (Like the tclX version) +proc ::tcl::Lvarpop {listName} { + upvar $listName list; + set el [lindex $list 0]; + set list [lrange $list 1 end]; + return $el; +} +# Assign list elements to variables and return the length of the list +proc ::tcl::Lassign {list args} { + # faster than direct blown foreach (which does not byte compile) + set i 0; + set lg [llength $list]; + foreach vname $args { + if {$i>=$lg} break + uplevel 1 [list ::set $vname [lindex $list $i]]; + incr i; + } + return $lg; +} + +# Misc utilities + +# Set the varname to value if value is greater than varname's current value +# or if varname is undefined +proc ::tcl::SetMax {varname value} { + upvar 1 $varname var + if {![info exists var] || $value > $var} { + set var $value + } +} + +# Set the varname to value if value is smaller than varname's current value +# or if varname is undefined +proc ::tcl::SetMin {varname value} { + upvar 1 $varname var + if {![info exists var] || $value < $var} { + set var $value + } +} + + + # everything loaded fine, lets create the test proc: + # OptCreateTestProc + # Don't need the create temp proc anymore: + # rename OptCreateTestProc {} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/opt0.4/pkgIndex.tcl b/extensions/fablabchemnitz/inkstitch/bin/tcl/opt0.4/pkgIndex.tcl new file mode 100644 index 00000000..c5d36354 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/opt0.4/pkgIndex.tcl @@ -0,0 +1,12 @@ +# Tcl package index file, version 1.1 +# This file is generated by the "pkg_mkIndex -direct" command +# and sourced either when an application starts up or +# by a "package unknown" script. It invokes the +# "package ifneeded" command to set up package-related +# information so that packages will be loaded automatically +# in response to "package require" commands. When this +# script is sourced, the variable $dir must contain the +# full path name of this file's directory. + +if {![package vsatisfies [package provide Tcl] 8.2]} {return} +package ifneeded opt 0.4.5 [list source [file join $dir optparse.tcl]] diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/package.tcl b/extensions/fablabchemnitz/inkstitch/bin/tcl/package.tcl new file mode 100644 index 00000000..3783722c --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/package.tcl @@ -0,0 +1,751 @@ +# package.tcl -- +# +# utility procs formerly in init.tcl which can be loaded on demand +# for package management. +# +# Copyright (c) 1991-1993 The Regents of the University of California. +# Copyright (c) 1994-1998 Sun Microsystems, Inc. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. +# + +namespace eval tcl::Pkg {} + +# ::tcl::Pkg::CompareExtension -- +# +# Used internally by pkg_mkIndex to compare the extension of a file to +# a given extension. On Windows, it uses a case-insensitive comparison +# because the file system can be file insensitive. +# +# Arguments: +# fileName name of a file whose extension is compared +# ext (optional) The extension to compare against; you must +# provide the starting dot. +# Defaults to [info sharedlibextension] +# +# Results: +# Returns 1 if the extension matches, 0 otherwise + +proc tcl::Pkg::CompareExtension { fileName {ext {}} } { + global tcl_platform + if {$ext eq ""} {set ext [info sharedlibextension]} + if {$tcl_platform(platform) eq "windows"} { + return [string equal -nocase [file extension $fileName] $ext] + } else { + # Some unices add trailing numbers after the .so, so + # we could have something like '.so.1.2'. + set root $fileName + while {1} { + set currExt [file extension $root] + if {$currExt eq $ext} { + return 1 + } + + # The current extension does not match; if it is not a numeric + # value, quit, as we are only looking to ignore version number + # extensions. Otherwise we might return 1 in this case: + # tcl::Pkg::CompareExtension foo.so.bar .so + # which should not match. + + if { ![string is integer -strict [string range $currExt 1 end]] } { + return 0 + } + set root [file rootname $root] + } + } +} + +# pkg_mkIndex -- +# This procedure creates a package index in a given directory. The +# package index consists of a "pkgIndex.tcl" file whose contents are +# a Tcl script that sets up package information with "package require" +# commands. The commands describe all of the packages defined by the +# files given as arguments. +# +# Arguments: +# -direct (optional) If this flag is present, the generated +# code in pkgMkIndex.tcl will cause the package to be +# loaded when "package require" is executed, rather +# than lazily when the first reference to an exported +# procedure in the package is made. +# -verbose (optional) Verbose output; the name of each file that +# was successfully rocessed is printed out. Additionally, +# if processing of a file failed a message is printed. +# -load pat (optional) Preload any packages whose names match +# the pattern. Used to handle DLLs that depend on +# other packages during their Init procedure. +# dir - Name of the directory in which to create the index. +# args - Any number of additional arguments, each giving +# a glob pattern that matches the names of one or +# more shared libraries or Tcl script files in +# dir. + +proc pkg_mkIndex {args} { + set usage {"pkg_mkIndex ?-direct? ?-lazy? ?-load pattern? ?-verbose? ?--? dir ?pattern ...?"}; + + set argCount [llength $args] + if {$argCount < 1} { + return -code error "wrong # args: should be\n$usage" + } + + set more "" + set direct 1 + set doVerbose 0 + set loadPat "" + for {set idx 0} {$idx < $argCount} {incr idx} { + set flag [lindex $args $idx] + switch -glob -- $flag { + -- { + # done with the flags + incr idx + break + } + -verbose { + set doVerbose 1 + } + -lazy { + set direct 0 + append more " -lazy" + } + -direct { + append more " -direct" + } + -load { + incr idx + set loadPat [lindex $args $idx] + append more " -load $loadPat" + } + -* { + return -code error "unknown flag $flag: should be\n$usage" + } + default { + # done with the flags + break + } + } + } + + set dir [lindex $args $idx] + set patternList [lrange $args [expr {$idx + 1}] end] + if {[llength $patternList] == 0} { + set patternList [list "*.tcl" "*[info sharedlibextension]"] + } + + if {[catch { + glob -directory $dir -tails -types {r f} -- {*}$patternList + } fileList o]} { + return -options $o $fileList + } + foreach file $fileList { + # For each file, figure out what commands and packages it provides. + # To do this, create a child interpreter, load the file into the + # interpreter, and get a list of the new commands and packages + # that are defined. + + if {$file eq "pkgIndex.tcl"} { + continue + } + + set c [interp create] + + # Load into the child any packages currently loaded in the parent + # interpreter that match the -load pattern. + + if {$loadPat ne ""} { + if {$doVerbose} { + tclLog "currently loaded packages: '[info loaded]'" + tclLog "trying to load all packages matching $loadPat" + } + if {![llength [info loaded]]} { + tclLog "warning: no packages are currently loaded, nothing" + tclLog "can possibly match '$loadPat'" + } + } + foreach pkg [info loaded] { + if {! [string match -nocase $loadPat [lindex $pkg 1]]} { + continue + } + if {$doVerbose} { + tclLog "package [lindex $pkg 1] matches '$loadPat'" + } + if {[catch { + load [lindex $pkg 0] [lindex $pkg 1] $c + } err]} { + if {$doVerbose} { + tclLog "warning: load [lindex $pkg 0] [lindex $pkg 1]\nfailed with: $err" + } + } elseif {$doVerbose} { + tclLog "loaded [lindex $pkg 0] [lindex $pkg 1]" + } + if {[lindex $pkg 1] eq "Tk"} { + # Withdraw . if Tk was loaded, to avoid showing a window. + $c eval [list wm withdraw .] + } + } + + $c eval { + # Stub out the package command so packages can + # require other packages. + + rename package __package_orig + proc package {what args} { + switch -- $what { + require { return ; # ignore transitive requires } + default { __package_orig $what {*}$args } + } + } + proc tclPkgUnknown args {} + package unknown tclPkgUnknown + + # Stub out the unknown command so package can call + # into each other during their initialilzation. + + proc unknown {args} {} + + # Stub out the auto_import mechanism + + proc auto_import {args} {} + + # reserve the ::tcl namespace for support procs + # and temporary variables. This might make it awkward + # to generate a pkgIndex.tcl file for the ::tcl namespace. + + namespace eval ::tcl { + variable dir ;# Current directory being processed + variable file ;# Current file being processed + variable direct ;# -direct flag value + variable x ;# Loop variable + variable debug ;# For debugging + variable type ;# "load" or "source", for -direct + variable namespaces ;# Existing namespaces (e.g., ::tcl) + variable packages ;# Existing packages (e.g., Tcl) + variable origCmds ;# Existing commands + variable newCmds ;# Newly created commands + variable newPkgs {} ;# Newly created packages + } + } + + $c eval [list set ::tcl::dir $dir] + $c eval [list set ::tcl::file $file] + $c eval [list set ::tcl::direct $direct] + + # Download needed procedures into the slave because we've + # just deleted the unknown procedure. This doesn't handle + # procedures with default arguments. + + foreach p {::tcl::Pkg::CompareExtension} { + $c eval [list namespace eval [namespace qualifiers $p] {}] + $c eval [list proc $p [info args $p] [info body $p]] + } + + if {[catch { + $c eval { + set ::tcl::debug "loading or sourcing" + + # we need to track command defined by each package even in + # the -direct case, because they are needed internally by + # the "partial pkgIndex.tcl" step above. + + proc ::tcl::GetAllNamespaces {{root ::}} { + set list $root + foreach ns [namespace children $root] { + lappend list {*}[::tcl::GetAllNamespaces $ns] + } + return $list + } + + # init the list of existing namespaces, packages, commands + + foreach ::tcl::x [::tcl::GetAllNamespaces] { + set ::tcl::namespaces($::tcl::x) 1 + } + foreach ::tcl::x [package names] { + if {[package provide $::tcl::x] ne ""} { + set ::tcl::packages($::tcl::x) 1 + } + } + set ::tcl::origCmds [info commands] + + # Try to load the file if it has the shared library + # extension, otherwise source it. It's important not to + # try to load files that aren't shared libraries, because + # on some systems (like SunOS) the loader will abort the + # whole application when it gets an error. + + if {[::tcl::Pkg::CompareExtension $::tcl::file [info sharedlibextension]]} { + # The "file join ." command below is necessary. + # Without it, if the file name has no \'s and we're + # on UNIX, the load command will invoke the + # LD_LIBRARY_PATH search mechanism, which could cause + # the wrong file to be used. + + set ::tcl::debug loading + load [file join $::tcl::dir $::tcl::file] + set ::tcl::type load + } else { + set ::tcl::debug sourcing + source [file join $::tcl::dir $::tcl::file] + set ::tcl::type source + } + + # As a performance optimization, if we are creating + # direct load packages, don't bother figuring out the + # set of commands created by the new packages. We + # only need that list for setting up the autoloading + # used in the non-direct case. + if { !$::tcl::direct } { + # See what new namespaces appeared, and import commands + # from them. Only exported commands go into the index. + + foreach ::tcl::x [::tcl::GetAllNamespaces] { + if {! [info exists ::tcl::namespaces($::tcl::x)]} { + namespace import -force ${::tcl::x}::* + } + + # Figure out what commands appeared + + foreach ::tcl::x [info commands] { + set ::tcl::newCmds($::tcl::x) 1 + } + foreach ::tcl::x $::tcl::origCmds { + unset -nocomplain ::tcl::newCmds($::tcl::x) + } + foreach ::tcl::x [array names ::tcl::newCmds] { + # determine which namespace a command comes from + + set ::tcl::abs [namespace origin $::tcl::x] + + # special case so that global names have no leading + # ::, this is required by the unknown command + + set ::tcl::abs \ + [lindex [auto_qualify $::tcl::abs ::] 0] + + if {$::tcl::x ne $::tcl::abs} { + # Name changed during qualification + + set ::tcl::newCmds($::tcl::abs) 1 + unset ::tcl::newCmds($::tcl::x) + } + } + } + } + + # Look through the packages that appeared, and if there is + # a version provided, then record it + + foreach ::tcl::x [package names] { + if {[package provide $::tcl::x] ne "" + && ![info exists ::tcl::packages($::tcl::x)]} { + lappend ::tcl::newPkgs \ + [list $::tcl::x [package provide $::tcl::x]] + } + } + } + } msg] == 1} { + set what [$c eval set ::tcl::debug] + if {$doVerbose} { + tclLog "warning: error while $what $file: $msg" + } + } else { + set what [$c eval set ::tcl::debug] + if {$doVerbose} { + tclLog "successful $what of $file" + } + set type [$c eval set ::tcl::type] + set cmds [lsort [$c eval array names ::tcl::newCmds]] + set pkgs [$c eval set ::tcl::newPkgs] + if {$doVerbose} { + if { !$direct } { + tclLog "commands provided were $cmds" + } + tclLog "packages provided were $pkgs" + } + if {[llength $pkgs] > 1} { + tclLog "warning: \"$file\" provides more than one package ($pkgs)" + } + foreach pkg $pkgs { + # cmds is empty/not used in the direct case + lappend files($pkg) [list $file $type $cmds] + } + + if {$doVerbose} { + tclLog "processed $file" + } + } + interp delete $c + } + + append index "# Tcl package index file, version 1.1\n" + append index "# This file is generated by the \"pkg_mkIndex$more\" command\n" + append index "# and sourced either when an application starts up or\n" + append index "# by a \"package unknown\" script. It invokes the\n" + append index "# \"package ifneeded\" command to set up package-related\n" + append index "# information so that packages will be loaded automatically\n" + append index "# in response to \"package require\" commands. When this\n" + append index "# script is sourced, the variable \$dir must contain the\n" + append index "# full path name of this file's directory.\n" + + foreach pkg [lsort [array names files]] { + set cmd {} + lassign $pkg name version + lappend cmd ::tcl::Pkg::Create -name $name -version $version + foreach spec [lsort -index 0 $files($pkg)] { + foreach {file type procs} $spec { + if { $direct } { + set procs {} + } + lappend cmd "-$type" [list $file $procs] + } + } + append index "\n[eval $cmd]" + } + + set f [open [file join $dir pkgIndex.tcl] w] + puts $f $index + close $f +} + +# tclPkgSetup -- +# This is a utility procedure use by pkgIndex.tcl files. It is invoked +# as part of a "package ifneeded" script. It calls "package provide" +# to indicate that a package is available, then sets entries in the +# auto_index array so that the package's files will be auto-loaded when +# the commands are used. +# +# Arguments: +# dir - Directory containing all the files for this package. +# pkg - Name of the package (no version number). +# version - Version number for the package, such as 2.1.3. +# files - List of files that constitute the package. Each +# element is a sub-list with three elements. The first +# is the name of a file relative to $dir, the second is +# "load" or "source", indicating whether the file is a +# loadable binary or a script to source, and the third +# is a list of commands defined by this file. + +proc tclPkgSetup {dir pkg version files} { + global auto_index + + package provide $pkg $version + foreach fileInfo $files { + set f [lindex $fileInfo 0] + set type [lindex $fileInfo 1] + foreach cmd [lindex $fileInfo 2] { + if {$type eq "load"} { + set auto_index($cmd) [list load [file join $dir $f] $pkg] + } else { + set auto_index($cmd) [list source [file join $dir $f]] + } + } + } +} + +# tclPkgUnknown -- +# This procedure provides the default for the "package unknown" function. +# It is invoked when a package that's needed can't be found. It scans +# the auto_path directories and their immediate children looking for +# pkgIndex.tcl files and sources any such files that are found to setup +# the package database. As it searches, it will recognize changes +# to the auto_path and scan any new directories. +# +# Arguments: +# name - Name of desired package. Not used. +# version - Version of desired package. Not used. +# exact - Either "-exact" or omitted. Not used. + +proc tclPkgUnknown {name args} { + global auto_path env + + if {![info exists auto_path]} { + return + } + # Cache the auto_path, because it may change while we run through + # the first set of pkgIndex.tcl files + set old_path [set use_path $auto_path] + while {[llength $use_path]} { + set dir [lindex $use_path end] + + # Make sure we only scan each directory one time. + if {[info exists tclSeenPath($dir)]} { + set use_path [lrange $use_path 0 end-1] + continue + } + set tclSeenPath($dir) 1 + + # we can't use glob in safe interps, so enclose the following + # in a catch statement, where we get the pkgIndex files out + # of the subdirectories + catch { + foreach file [glob -directory $dir -join -nocomplain \ + * pkgIndex.tcl] { + set dir [file dirname $file] + if {![info exists procdDirs($dir)]} { + set code [catch {source $file} msg opt] + if {$code == 1 && + [lindex [dict get $opt -errorcode] 0] eq "POSIX" && + [lindex [dict get $opt -errorcode] 1] eq "EACCES"} { + # $file was not readable; silently ignore + continue + } + if {$code} { + tclLog "error reading package index file $file: $msg" + } else { + set procdDirs($dir) 1 + } + } + } + } + set dir [lindex $use_path end] + if {![info exists procdDirs($dir)]} { + set file [file join $dir pkgIndex.tcl] + # safe interps usually don't have "file exists", + if {([interp issafe] || [file exists $file])} { + set code [catch {source $file} msg opt] + if {$code == 1 && + [lindex [dict get $opt -errorcode] 0] eq "POSIX" && + [lindex [dict get $opt -errorcode] 1] eq "EACCES"} { + # $file was not readable; silently ignore + continue + } + if {$code} { + tclLog "error reading package index file $file: $msg" + } else { + set procdDirs($dir) 1 + } + } + } + + set use_path [lrange $use_path 0 end-1] + + # Check whether any of the index scripts we [source]d above + # set a new value for $::auto_path. If so, then find any + # new directories on the $::auto_path, and lappend them to + # the $use_path we are working from. This gives index scripts + # the (arguably unwise) power to expand the index script search + # path while the search is in progress. + set index 0 + if {[llength $old_path] == [llength $auto_path]} { + foreach dir $auto_path old $old_path { + if {$dir ne $old} { + # This entry in $::auto_path has changed. + break + } + incr index + } + } + + # $index now points to the first element of $auto_path that + # has changed, or the beginning if $auto_path has changed length + # Scan the new elements of $auto_path for directories to add to + # $use_path. Don't add directories we've already seen, or ones + # already on the $use_path. + foreach dir [lrange $auto_path $index end] { + if {![info exists tclSeenPath($dir)] && ($dir ni $use_path)} { + lappend use_path $dir + } + } + set old_path $auto_path + } +} + +# tcl::MacOSXPkgUnknown -- +# This procedure extends the "package unknown" function for MacOSX. +# It scans the Resources/Scripts directories of the immediate children +# of the auto_path directories for pkgIndex files. +# +# Arguments: +# original - original [package unknown] procedure +# name - Name of desired package. Not used. +# version - Version of desired package. Not used. +# exact - Either "-exact" or omitted. Not used. + +proc tcl::MacOSXPkgUnknown {original name args} { + + # First do the cross-platform default search + uplevel 1 $original [linsert $args 0 $name] + + # Now do MacOSX specific searching + global auto_path + + if {![info exists auto_path]} { + return + } + # Cache the auto_path, because it may change while we run through + # the first set of pkgIndex.tcl files + set old_path [set use_path $auto_path] + while {[llength $use_path]} { + set dir [lindex $use_path end] + + # Make sure we only scan each directory one time. + if {[info exists tclSeenPath($dir)]} { + set use_path [lrange $use_path 0 end-1] + continue + } + set tclSeenPath($dir) 1 + + # get the pkgIndex files out of the subdirectories + foreach file [glob -directory $dir -join -nocomplain \ + * Resources Scripts pkgIndex.tcl] { + set dir [file dirname $file] + if {![info exists procdDirs($dir)]} { + set code [catch {source $file} msg opt] + if {$code == 1 && + [lindex [dict get $opt -errorcode] 0] eq "POSIX" && + [lindex [dict get $opt -errorcode] 1] eq "EACCES"} { + # $file was not readable; silently ignore + continue + } + if {$code} { + tclLog "error reading package index file $file: $msg" + } else { + set procdDirs($dir) 1 + } + } + } + set use_path [lrange $use_path 0 end-1] + + # Check whether any of the index scripts we [source]d above + # set a new value for $::auto_path. If so, then find any + # new directories on the $::auto_path, and lappend them to + # the $use_path we are working from. This gives index scripts + # the (arguably unwise) power to expand the index script search + # path while the search is in progress. + set index 0 + if {[llength $old_path] == [llength $auto_path]} { + foreach dir $auto_path old $old_path { + if {$dir ne $old} { + # This entry in $::auto_path has changed. + break + } + incr index + } + } + + # $index now points to the first element of $auto_path that + # has changed, or the beginning if $auto_path has changed length + # Scan the new elements of $auto_path for directories to add to + # $use_path. Don't add directories we've already seen, or ones + # already on the $use_path. + foreach dir [lrange $auto_path $index end] { + if {![info exists tclSeenPath($dir)] && ($dir ni $use_path)} { + lappend use_path $dir + } + } + set old_path $auto_path + } +} + +# ::tcl::Pkg::Create -- +# +# Given a package specification generate a "package ifneeded" statement +# for the package, suitable for inclusion in a pkgIndex.tcl file. +# +# Arguments: +# args arguments used by the Create function: +# -name packageName +# -version packageVersion +# -load {filename ?{procs}?} +# ... +# -source {filename ?{procs}?} +# ... +# +# Any number of -load and -source parameters may be +# specified, so long as there is at least one -load or +# -source parameter. If the procs component of a +# module specifier is left off, that module will be +# set up for direct loading; otherwise, it will be +# set up for lazy loading. If both -source and -load +# are specified, the -load'ed files will be loaded +# first, followed by the -source'd files. +# +# Results: +# An appropriate "package ifneeded" statement for the package. + +proc ::tcl::Pkg::Create {args} { + append err(usage) "[lindex [info level 0] 0] " + append err(usage) "-name packageName -version packageVersion" + append err(usage) "?-load {filename ?{procs}?}? ... " + append err(usage) "?-source {filename ?{procs}?}? ..." + + set err(wrongNumArgs) "wrong # args: should be \"$err(usage)\"" + set err(valueMissing) "value for \"%s\" missing: should be \"$err(usage)\"" + set err(unknownOpt) "unknown option \"%s\": should be \"$err(usage)\"" + set err(noLoadOrSource) "at least one of -load and -source must be given" + + # process arguments + set len [llength $args] + if { $len < 6 } { + error $err(wrongNumArgs) + } + + # Initialize parameters + array set opts {-name {} -version {} -source {} -load {}} + + # process parameters + for {set i 0} {$i < $len} {incr i} { + set flag [lindex $args $i] + incr i + switch -glob -- $flag { + "-name" - + "-version" { + if { $i >= $len } { + error [format $err(valueMissing) $flag] + } + set opts($flag) [lindex $args $i] + } + "-source" - + "-load" { + if { $i >= $len } { + error [format $err(valueMissing) $flag] + } + lappend opts($flag) [lindex $args $i] + } + default { + error [format $err(unknownOpt) [lindex $args $i]] + } + } + } + + # Validate the parameters + if { [llength $opts(-name)] == 0 } { + error [format $err(valueMissing) "-name"] + } + if { [llength $opts(-version)] == 0 } { + error [format $err(valueMissing) "-version"] + } + + if { [llength $opts(-source)] == 0 && [llength $opts(-load)] == 0 } { + error $err(noLoadOrSource) + } + + # OK, now everything is good. Generate the package ifneeded statment. + set cmdline "package ifneeded $opts(-name) $opts(-version) " + + set cmdList {} + set lazyFileList {} + + # Handle -load and -source specs + foreach key {load source} { + foreach filespec $opts(-$key) { + lassign $filespec filename proclist + + if { [llength $proclist] == 0 } { + set cmd "\[list $key \[file join \$dir [list $filename]\]\]" + lappend cmdList $cmd + } else { + lappend lazyFileList [list $filename $key $proclist] + } + } + } + + if { [llength $lazyFileList] > 0 } { + lappend cmdList "\[list tclPkgSetup \$dir $opts(-name)\ + $opts(-version) [list $lazyFileList]\]" + } + append cmdline [join $cmdList "\\n"] + return $cmdline +} + +interp alias {} ::pkg::create {} ::tcl::Pkg::Create diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/parray.tcl b/extensions/fablabchemnitz/inkstitch/bin/tcl/parray.tcl new file mode 100644 index 00000000..a9c2cb15 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/parray.tcl @@ -0,0 +1,28 @@ +# parray: +# Print the contents of a global array on stdout. +# +# Copyright (c) 1991-1993 The Regents of the University of California. +# Copyright (c) 1994 Sun Microsystems, Inc. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. +# + +proc parray {a {pattern *}} { + upvar 1 $a array + if {![array exists array]} { + return -code error "\"$a\" isn't an array" + } + set maxl 0 + set names [lsort [array names array $pattern]] + foreach name $names { + if {[string length $name] > $maxl} { + set maxl [string length $name] + } + } + set maxl [expr {$maxl + [string length $a] + 2}] + foreach name $names { + set nameString [format %s(%s) $a $name] + puts stdout [format "%-*s = %s" $maxl $nameString $array($name)] + } +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/safe.tcl b/extensions/fablabchemnitz/inkstitch/bin/tcl/safe.tcl new file mode 100644 index 00000000..2dd4aedc --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/safe.tcl @@ -0,0 +1,1127 @@ +# safe.tcl -- +# +# This file provide a safe loading/sourcing mechanism for safe interpreters. +# It implements a virtual path mecanism to hide the real pathnames from the +# slave. It runs in a master interpreter and sets up data structure and +# aliases that will be invoked when used from a slave interpreter. +# +# See the safe.n man page for details. +# +# Copyright (c) 1996-1997 Sun Microsystems, Inc. +# +# See the file "license.terms" for information on usage and redistribution of +# this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# +# The implementation is based on namespaces. These naming conventions are +# followed: +# Private procs starts with uppercase. +# Public procs are exported and starts with lowercase +# + +# Needed utilities package +package require opt 0.4.1 + +# Create the safe namespace +namespace eval ::safe { + # Exported API: + namespace export interpCreate interpInit interpConfigure interpDelete \ + interpAddToAccessPath interpFindInAccessPath setLogCmd +} + +# Helper function to resolve the dual way of specifying staticsok (either +# by -noStatics or -statics 0) +proc ::safe::InterpStatics {} { + foreach v {Args statics noStatics} { + upvar $v $v + } + set flag [::tcl::OptProcArgGiven -noStatics] + if {$flag && (!$noStatics == !$statics) + && ([::tcl::OptProcArgGiven -statics])} { + return -code error\ + "conflicting values given for -statics and -noStatics" + } + if {$flag} { + return [expr {!$noStatics}] + } else { + return $statics + } +} + +# Helper function to resolve the dual way of specifying nested loading +# (either by -nestedLoadOk or -nested 1) +proc ::safe::InterpNested {} { + foreach v {Args nested nestedLoadOk} { + upvar $v $v + } + set flag [::tcl::OptProcArgGiven -nestedLoadOk] + # note that the test here is the opposite of the "InterpStatics" one + # (it is not -noNested... because of the wanted default value) + if {$flag && (!$nestedLoadOk != !$nested) + && ([::tcl::OptProcArgGiven -nested])} { + return -code error\ + "conflicting values given for -nested and -nestedLoadOk" + } + if {$flag} { + # another difference with "InterpStatics" + return $nestedLoadOk + } else { + return $nested + } +} + +#### +# +# API entry points that needs argument parsing : +# +#### + +# Interface/entry point function and front end for "Create" +proc ::safe::interpCreate {args} { + set Args [::tcl::OptKeyParse ::safe::interpCreate $args] + InterpCreate $slave $accessPath \ + [InterpStatics] [InterpNested] $deleteHook +} + +proc ::safe::interpInit {args} { + set Args [::tcl::OptKeyParse ::safe::interpIC $args] + if {![::interp exists $slave]} { + return -code error "\"$slave\" is not an interpreter" + } + InterpInit $slave $accessPath \ + [InterpStatics] [InterpNested] $deleteHook +} + +# Check that the given slave is "one of us" +proc ::safe::CheckInterp {slave} { + namespace upvar ::safe S$slave state + if {![info exists state] || ![::interp exists $slave]} { + return -code error \ + "\"$slave\" is not an interpreter managed by ::safe::" + } +} + +# Interface/entry point function and front end for "Configure". This code +# is awfully pedestrian because it would need more coupling and support +# between the way we store the configuration values in safe::interp's and +# the Opt package. Obviously we would like an OptConfigure to avoid +# duplicating all this code everywhere. +# -> TODO (the app should share or access easily the program/value stored +# by opt) + +# This is even more complicated by the boolean flags with no values that +# we had the bad idea to support for the sake of user simplicity in +# create/init but which makes life hard in configure... +# So this will be hopefully written and some integrated with opt1.0 +# (hopefully for tcl8.1 ?) +proc ::safe::interpConfigure {args} { + switch [llength $args] { + 1 { + # If we have exactly 1 argument the semantic is to return all + # the current configuration. We still call OptKeyParse though + # we know that "slave" is our given argument because it also + # checks for the "-help" option. + set Args [::tcl::OptKeyParse ::safe::interpIC $args] + CheckInterp $slave + namespace upvar ::safe S$slave state + + return [join [list \ + [list -accessPath $state(access_path)] \ + [list -statics $state(staticsok)] \ + [list -nested $state(nestedok)] \ + [list -deleteHook $state(cleanupHook)]]] + } + 2 { + # If we have exactly 2 arguments the semantic is a "configure + # get" + lassign $args slave arg + + # get the flag sub program (we 'know' about Opt's internal + # representation of data) + set desc [lindex [::tcl::OptKeyGetDesc ::safe::interpIC] 2] + set hits [::tcl::OptHits desc $arg] + if {$hits > 1} { + return -code error [::tcl::OptAmbigous $desc $arg] + } elseif {$hits == 0} { + return -code error [::tcl::OptFlagUsage $desc $arg] + } + CheckInterp $slave + namespace upvar ::safe S$slave state + + set item [::tcl::OptCurDesc $desc] + set name [::tcl::OptName $item] + switch -exact -- $name { + -accessPath {return [list -accessPath $state(access_path)]} + -statics {return [list -statics $state(staticsok)]} + -nested {return [list -nested $state(nestedok)]} + -deleteHook {return [list -deleteHook $state(cleanupHook)]} + -noStatics { + # it is most probably a set in fact but we would need + # then to jump to the set part and it is not *sure* + # that it is a set action that the user want, so force + # it to use the unambigous -statics ?value? instead: + return -code error\ + "ambigous query (get or set -noStatics ?)\ + use -statics instead" + } + -nestedLoadOk { + return -code error\ + "ambigous query (get or set -nestedLoadOk ?)\ + use -nested instead" + } + default { + return -code error "unknown flag $name (bug)" + } + } + } + default { + # Otherwise we want to parse the arguments like init and + # create did + set Args [::tcl::OptKeyParse ::safe::interpIC $args] + CheckInterp $slave + namespace upvar ::safe S$slave state + + # Get the current (and not the default) values of whatever has + # not been given: + if {![::tcl::OptProcArgGiven -accessPath]} { + set doreset 1 + set accessPath $state(access_path) + } else { + set doreset 0 + } + if { + ![::tcl::OptProcArgGiven -statics] + && ![::tcl::OptProcArgGiven -noStatics] + } { + set statics $state(staticsok) + } else { + set statics [InterpStatics] + } + if { + [::tcl::OptProcArgGiven -nested] || + [::tcl::OptProcArgGiven -nestedLoadOk] + } { + set nested [InterpNested] + } else { + set nested $state(nestedok) + } + if {![::tcl::OptProcArgGiven -deleteHook]} { + set deleteHook $state(cleanupHook) + } + # we can now reconfigure : + InterpSetConfig $slave $accessPath $statics $nested $deleteHook + # auto_reset the slave (to completly synch the new access_path) + if {$doreset} { + if {[catch {::interp eval $slave {auto_reset}} msg]} { + Log $slave "auto_reset failed: $msg" + } else { + Log $slave "successful auto_reset" NOTICE + } + } + } + } +} + +#### +# +# Functions that actually implements the exported APIs +# +#### + +# +# safe::InterpCreate : doing the real job +# +# This procedure creates a safe slave and initializes it with the safe +# base aliases. +# NB: slave name must be simple alphanumeric string, no spaces, no (), no +# {},... {because the state array is stored as part of the name} +# +# Returns the slave name. +# +# Optional Arguments : +# + slave name : if empty, generated name will be used +# + access_path: path list controlling where load/source can occur, +# if empty: the master auto_path will be used. +# + staticsok : flag, if 0 :no static package can be loaded (load {} Xxx) +# if 1 :static packages are ok. +# + nestedok: flag, if 0 :no loading to sub-sub interps (load xx xx sub) +# if 1 : multiple levels are ok. + +# use the full name and no indent so auto_mkIndex can find us +proc ::safe::InterpCreate { + slave + access_path + staticsok + nestedok + deletehook + } { + # Create the slave. + if {$slave ne ""} { + ::interp create -safe $slave + } else { + # empty argument: generate slave name + set slave [::interp create -safe] + } + Log $slave "Created" NOTICE + + # Initialize it. (returns slave name) + InterpInit $slave $access_path $staticsok $nestedok $deletehook +} + +# +# InterpSetConfig (was setAccessPath) : +# Sets up slave virtual auto_path and corresponding structure within +# the master. Also sets the tcl_library in the slave to be the first +# directory in the path. +# NB: If you change the path after the slave has been initialized you +# probably need to call "auto_reset" in the slave in order that it gets +# the right auto_index() array values. + +proc ::safe::InterpSetConfig {slave access_path staticsok nestedok deletehook} { + global auto_path + + # determine and store the access path if empty + if {$access_path eq ""} { + set access_path $auto_path + + # Make sure that tcl_library is in auto_path and at the first + # position (needed by setAccessPath) + set where [lsearch -exact $access_path [info library]] + if {$where == -1} { + # not found, add it. + set access_path [linsert $access_path 0 [info library]] + Log $slave "tcl_library was not in auto_path,\ + added it to slave's access_path" NOTICE + } elseif {$where != 0} { + # not first, move it first + set access_path [linsert \ + [lreplace $access_path $where $where] \ + 0 [info library]] + Log $slave "tcl_libray was not in first in auto_path,\ + moved it to front of slave's access_path" NOTICE + } + + # Add 1st level sub dirs (will searched by auto loading from tcl + # code in the slave using glob and thus fail, so we add them here + # so by default it works the same). + set access_path [AddSubDirs $access_path] + } + + Log $slave "Setting accessPath=($access_path) staticsok=$staticsok\ + nestedok=$nestedok deletehook=($deletehook)" NOTICE + + namespace upvar ::safe S$slave state + + # clear old autopath if it existed + # build new one + # Extend the access list with the paths used to look for Tcl Modules. + # We save the virtual form separately as well, as syncing it with the + # slave has to be defered until the necessary commands are present for + # setup. + + set norm_access_path {} + set slave_access_path {} + set map_access_path {} + set remap_access_path {} + set slave_tm_path {} + + set i 0 + foreach dir $access_path { + set token [PathToken $i] + lappend slave_access_path $token + lappend map_access_path $token $dir + lappend remap_access_path $dir $token + lappend norm_access_path [file normalize $dir] + incr i + } + + set morepaths [::tcl::tm::list] + while {[llength $morepaths]} { + set addpaths $morepaths + set morepaths {} + + foreach dir $addpaths { + # Prevent the addition of dirs on the tm list to the + # result if they are already known. + if {[dict exists $remap_access_path $dir]} { + continue + } + + set token [PathToken $i] + lappend access_path $dir + lappend slave_access_path $token + lappend map_access_path $token $dir + lappend remap_access_path $dir $token + lappend norm_access_path [file normalize $dir] + lappend slave_tm_path $token + incr i + + # [Bug 2854929] + # Recursively find deeper paths which may contain + # modules. Required to handle modules with names like + # 'platform::shell', which translate into + # 'platform/shell-X.tm', i.e arbitrarily deep + # subdirectories. + lappend morepaths {*}[glob -nocomplain -directory $dir -type d *] + } + } + + set state(access_path) $access_path + set state(access_path,map) $map_access_path + set state(access_path,remap) $remap_access_path + set state(access_path,norm) $norm_access_path + set state(access_path,slave) $slave_access_path + set state(tm_path_slave) $slave_tm_path + set state(staticsok) $staticsok + set state(nestedok) $nestedok + set state(cleanupHook) $deletehook + + SyncAccessPath $slave +} + +# +# +# FindInAccessPath: +# Search for a real directory and returns its virtual Id (including the +# "$") +proc ::safe::interpFindInAccessPath {slave path} { + namespace upvar ::safe S$slave state + + if {![dict exists $state(access_path,remap) $path]} { + return -code error "$path not found in access path $access_path" + } + + return [dict get $state(access_path,remap) $path] +} + +# +# addToAccessPath: +# add (if needed) a real directory to access path and return its +# virtual token (including the "$"). +proc ::safe::interpAddToAccessPath {slave path} { + # first check if the directory is already in there + # (inlined interpFindInAccessPath). + namespace upvar ::safe S$slave state + + if {[dict exists $state(access_path,remap) $path]} { + return [dict get $state(access_path,remap) $path] + } + + # new one, add it: + set token [PathToken [llength $state(access_path)]] + + lappend state(access_path) $path + lappend state(access_path,slave) $token + lappend state(access_path,map) $token $path + lappend state(access_path,remap) $path $token + lappend state(access_path,norm) [file normalize $path] + + SyncAccessPath $slave + return $token +} + +# This procedure applies the initializations to an already existing +# interpreter. It is useful when you want to install the safe base aliases +# into a preexisting safe interpreter. +proc ::safe::InterpInit { + slave + access_path + staticsok + nestedok + deletehook + } { + # Configure will generate an access_path when access_path is empty. + InterpSetConfig $slave $access_path $staticsok $nestedok $deletehook + + # NB we need to add [namespace current], aliases are always absolute + # paths. + + # These aliases let the slave load files to define new commands + # This alias lets the slave use the encoding names, convertfrom, + # convertto, and system, but not "encoding system " to set the + # system encoding. + # Handling Tcl Modules, we need a restricted form of Glob. + # This alias interposes on the 'exit' command and cleanly terminates + # the slave. + + foreach {command alias} { + source AliasSource + load AliasLoad + encoding AliasEncoding + exit interpDelete + glob AliasGlob + } { + ::interp alias $slave $command {} [namespace current]::$alias $slave + } + + # This alias lets the slave have access to a subset of the 'file' + # command functionality. + + AliasSubset $slave file \ + file dir.* join root.* ext.* tail path.* split + + # Subcommands of info + foreach {subcommand alias} { + nameofexecutable AliasExeName + } { + ::interp alias $slave ::tcl::info::$subcommand \ + {} [namespace current]::$alias $slave + } + + # The allowed slave variables already have been set by Tcl_MakeSafe(3) + + # Source init.tcl and tm.tcl into the slave, to get auto_load and + # other procedures defined: + + if {[catch {::interp eval $slave { + source [file join $tcl_library init.tcl] + }} msg]} { + Log $slave "can't source init.tcl ($msg)" + return -code error "can't source init.tcl into slave $slave ($msg)" + } + + if {[catch {::interp eval $slave { + source [file join $tcl_library tm.tcl] + }} msg]} { + Log $slave "can't source tm.tcl ($msg)" + return -code error "can't source tm.tcl into slave $slave ($msg)" + } + + # Sync the paths used to search for Tcl modules. This can be done only + # now, after tm.tcl was loaded. + namespace upvar ::safe S$slave state + if {[llength $state(tm_path_slave)] > 0} { + ::interp eval $slave [list \ + ::tcl::tm::add {*}[lreverse $state(tm_path_slave)]] + } + return $slave +} + +# Add (only if needed, avoid duplicates) 1 level of sub directories to an +# existing path list. Also removes non directories from the returned +# list. +proc ::safe::AddSubDirs {pathList} { + set res {} + foreach dir $pathList { + if {[file isdirectory $dir]} { + # check that we don't have it yet as a children of a previous + # dir + if {$dir ni $res} { + lappend res $dir + } + foreach sub [glob -directory $dir -nocomplain *] { + if {[file isdirectory $sub] && ($sub ni $res)} { + # new sub dir, add it ! + lappend res $sub + } + } + } + } + return $res +} + +# This procedure deletes a safe slave managed by Safe Tcl and cleans up +# associated state: + +proc ::safe::interpDelete {slave} { + Log $slave "About to delete" NOTICE + + namespace upvar ::safe S$slave state + + # If the slave has a cleanup hook registered, call it. Check the + # existance because we might be called to delete an interp which has + # not been registered with us at all + + if {[info exists state(cleanupHook)]} { + set hook $state(cleanupHook) + if {[llength $hook]} { + # remove the hook now, otherwise if the hook calls us somehow, + # we'll loop + unset state(cleanupHook) + if {[catch { + {*}$hook $slave + } err]} { + Log $slave "Delete hook error ($err)" + } + } + } + + # Discard the global array of state associated with the slave, and + # delete the interpreter. + + if {[info exists state]} { + unset state + } + + # if we have been called twice, the interp might have been deleted + # already + if {[::interp exists $slave]} { + ::interp delete $slave + Log $slave "Deleted" NOTICE + } + + return +} + +# Set (or get) the logging mecanism + +proc ::safe::setLogCmd {args} { + variable Log + set la [llength $args] + if {$la == 0} { + return $Log + } elseif {$la == 1} { + set Log [lindex $args 0] + } else { + set Log $args + } + + if {$Log eq ""} { + # Disable logging completely. Calls to it will be compiled out + # of all users. + proc ::safe::Log {args} {} + } else { + # Activate logging, define proper command. + + proc ::safe::Log {slave msg {type ERROR}} { + variable Log + {*}$Log "$type for slave $slave : $msg" + return + } + } +} + +# ------------------- END OF PUBLIC METHODS ------------ + +# +# Sets the slave auto_path to the master recorded value. Also sets +# tcl_library to the first token of the virtual path. +# +proc ::safe::SyncAccessPath {slave} { + namespace upvar ::safe S$slave state + + set slave_access_path $state(access_path,slave) + ::interp eval $slave [list set auto_path $slave_access_path] + + Log $slave "auto_path in $slave has been set to $slave_access_path"\ + NOTICE + + # This code assumes that info library is the first element in the + # list of auto_path's. See -> InterpSetConfig for the code which + # ensures this condition. + + ::interp eval $slave [list \ + set tcl_library [lindex $slave_access_path 0]] +} + +# Returns the virtual token for directory number N. +proc ::safe::PathToken {n} { + # We need to have a ":" in the token string so [file join] on the + # mac won't turn it into a relative path. + return "\$p(:$n:)" ;# Form tested by case 7.2 +} + +# +# translate virtual path into real path +# +proc ::safe::TranslatePath {slave path} { + namespace upvar ::safe S$slave state + + # somehow strip the namespaces 'functionality' out (the danger is that + # we would strip valid macintosh "../" queries... : + if {[string match "*::*" $path] || [string match "*..*" $path]} { + return -code error "invalid characters in path $path" + } + + # Use a cached map instead of computed local vars and subst. + + return [string map $state(access_path,map) $path] +} + +# file name control (limit access to files/resources that should be a +# valid tcl source file) +proc ::safe::CheckFileName {slave file} { + # This used to limit what can be sourced to ".tcl" and forbid files + # with more than 1 dot and longer than 14 chars, but I changed that + # for 8.4 as a safe interp has enough internal protection already to + # allow sourcing anything. - hobbs + + if {![file exists $file]} { + # don't tell the file path + return -code error "no such file or directory" + } + + if {![file readable $file]} { + # don't tell the file path + return -code error "not readable" + } +} + +# AliasGlob is the target of the "glob" alias in safe interpreters. +proc ::safe::AliasGlob {slave args} { + Log $slave "GLOB ! $args" NOTICE + set cmd {} + set at 0 + array set got { + -directory 0 + -nocomplain 0 + -join 0 + -tails 0 + -- 0 + } + + if {$::tcl_platform(platform) eq "windows"} { + set dirPartRE {^(.*)[\\/]([^\\/]*)$} + } else { + set dirPartRE {^(.*)/([^/]*)$} + } + + set dir {} + set virtualdir {} + + while {$at < [llength $args]} { + switch -glob -- [set opt [lindex $args $at]] { + -nocomplain - -- - -join - -tails { + lappend cmd $opt + set got($opt) 1 + incr at + } + -types - -type { + lappend cmd -types [lindex $args [incr at]] + incr at + } + -directory { + if {$got($opt)} { + return -code error \ + {"-directory" cannot be used with "-path"} + } + set got($opt) 1 + set virtualdir [lindex $args [incr at]] + incr at + } + pkgIndex.tcl { + # Oops, this is globbing a subdirectory in regular package + # search. That is not wanted. Abort, handler does catch + # already (because glob was not defined before). See + # package.tcl, lines 484ff in tclPkgUnknown. + return -code error "unknown command glob" + } + -* { + Log $slave "Safe base rejecting glob option '$opt'" + return -code error "Safe base rejecting glob option '$opt'" + } + default { + break + } + } + if {$got(--)} break + } + + # Get the real path from the virtual one and check that the path is in the + # access path of that slave. Done after basic argument processing so that + # we know if -nocomplain is set. + if {$got(-directory)} { + if {[catch { + set dir [TranslatePath $slave $virtualdir] + DirInAccessPath $slave $dir + } msg]} { + Log $slave $msg + if {$got(-nocomplain)} { + return + } + return -code error "permission denied" + } + lappend cmd -directory $dir + } + + # Apply the -join semantics ourselves + if {$got(-join)} { + set args [lreplace $args $at end [join [lrange $args $at end] "/"]] + } + + # Process remaining pattern arguments + set firstPattern [llength $cmd] + foreach opt [lrange $args $at end] { + if {![regexp $dirPartRE $opt -> thedir thefile]} { + set thedir . + } + if {$thedir eq "*"} { + set mapped 0 + foreach d [glob -directory [TranslatePath $slave $virtualdir] \ + -types d -tails *] { + catch { + DirInAccessPath $slave \ + [TranslatePath $slave [file join $virtualdir $d]] + if {$thefile eq "pkgIndex.tcl" || $thefile eq "*.tm"} { + lappend cmd [file join $d $thefile] + set mapped 1 + } + } + } + if {$mapped} continue + } + if {[catch { + set thedir [file join $virtualdir $thedir] + DirInAccessPath $slave [TranslatePath $slave $thedir] + } msg]} { + Log $slave $msg + if {$got(-nocomplain)} continue + return -code error "permission denied" + } + lappend cmd $opt + } + + Log $slave "GLOB = $cmd" NOTICE + + if {$got(-nocomplain) && [llength $cmd] eq $firstPattern} { + return + } + if {[catch { + ::interp invokehidden $slave glob {*}$cmd + } msg]} { + Log $slave $msg + return -code error "script error" + } + + Log $slave "GLOB < $msg" NOTICE + + # Translate path back to what the slave should see. + set res {} + set l [string length $dir] + foreach p $msg { + if {[string equal -length $l $dir $p]} { + set p [string replace $p 0 [expr {$l-1}] $virtualdir] + } + lappend res $p + } + + Log $slave "GLOB > $res" NOTICE + return $res +} + +# AliasSource is the target of the "source" alias in safe interpreters. + +proc ::safe::AliasSource {slave args} { + set argc [llength $args] + # Extended for handling of Tcl Modules to allow not only "source + # filename", but "source -encoding E filename" as well. + if {[lindex $args 0] eq "-encoding"} { + incr argc -2 + set encoding [lindex $args 1] + set at 2 + if {$encoding eq "identity"} { + Log $slave "attempt to use the identity encoding" + return -code error "permission denied" + } + } else { + set at 0 + set encoding {} + } + if {$argc != 1} { + set msg "wrong # args: should be \"source ?-encoding E? fileName\"" + Log $slave "$msg ($args)" + return -code error $msg + } + set file [lindex $args $at] + + # get the real path from the virtual one. + if {[catch { + set realfile [TranslatePath $slave $file] + } msg]} { + Log $slave $msg + return -code error "permission denied" + } + + # check that the path is in the access path of that slave + if {[catch { + FileInAccessPath $slave $realfile + } msg]} { + Log $slave $msg + return -code error "permission denied" + } + + # do the checks on the filename : + if {[catch { + CheckFileName $slave $realfile + } msg]} { + Log $slave "$realfile:$msg" + return -code error $msg + } + + # Passed all the tests, lets source it. Note that we do this all manually + # because we want to control [info script] in the slave so information + # doesn't leak so much. [Bug 2913625] + set old [::interp eval $slave {info script}] + set code [catch { + set f [open $realfile] + fconfigure $f -eofchar \032 + if {$encoding ne ""} { + fconfigure $f -encoding $encoding + } + set contents [read $f] + close $f + ::interp eval $slave [list info script $file] + ::interp eval $slave $contents + } msg opt] + catch {interp eval $slave [list info script $old]} + # Note that all non-errors are fine result codes from [source], so we must + # take a little care to do it properly. [Bug 2923613] + if {$code == 1} { + Log $slave $msg + return -code error "script error" + } + return -code $code -options $opt $msg +} + +# AliasLoad is the target of the "load" alias in safe interpreters. + +proc ::safe::AliasLoad {slave file args} { + set argc [llength $args] + if {$argc > 2} { + set msg "load error: too many arguments" + Log $slave "$msg ($argc) {$file $args}" + return -code error $msg + } + + # package name (can be empty if file is not). + set package [lindex $args 0] + + namespace upvar ::safe S$slave state + + # Determine where to load. load use a relative interp path and {} + # means self, so we can directly and safely use passed arg. + set target [lindex $args 1] + if {$target ne ""} { + # we will try to load into a sub sub interp; check that we want to + # authorize that. + if {!$state(nestedok)} { + Log $slave "loading to a sub interp (nestedok)\ + disabled (trying to load $package to $target)" + return -code error "permission denied (nested load)" + } + } + + # Determine what kind of load is requested + if {$file eq ""} { + # static package loading + if {$package eq ""} { + set msg "load error: empty filename and no package name" + Log $slave $msg + return -code error $msg + } + if {!$state(staticsok)} { + Log $slave "static packages loading disabled\ + (trying to load $package to $target)" + return -code error "permission denied (static package)" + } + } else { + # file loading + + # get the real path from the virtual one. + if {[catch { + set file [TranslatePath $slave $file] + } msg]} { + Log $slave $msg + return -code error "permission denied" + } + + # check the translated path + if {[catch { + FileInAccessPath $slave $file + } msg]} { + Log $slave $msg + return -code error "permission denied (path)" + } + } + + if {[catch { + ::interp invokehidden $slave load $file $package $target + } msg]} { + Log $slave $msg + return -code error $msg + } + + return $msg +} + +# FileInAccessPath raises an error if the file is not found in the list of +# directories contained in the (master side recorded) slave's access path. + +# the security here relies on "file dirname" answering the proper +# result... needs checking ? +proc ::safe::FileInAccessPath {slave file} { + namespace upvar ::safe S$slave state + set access_path $state(access_path) + + if {[file isdirectory $file]} { + return -code error "\"$file\": is a directory" + } + set parent [file dirname $file] + + # Normalize paths for comparison since lsearch knows nothing of + # potential pathname anomalies. + set norm_parent [file normalize $parent] + + namespace upvar ::safe S$slave state + if {$norm_parent ni $state(access_path,norm)} { + return -code error "\"$file\": not in access_path" + } +} + +proc ::safe::DirInAccessPath {slave dir} { + namespace upvar ::safe S$slave state + set access_path $state(access_path) + + if {[file isfile $dir]} { + return -code error "\"$dir\": is a file" + } + + # Normalize paths for comparison since lsearch knows nothing of + # potential pathname anomalies. + set norm_dir [file normalize $dir] + + namespace upvar ::safe S$slave state + if {$norm_dir ni $state(access_path,norm)} { + return -code error "\"$dir\": not in access_path" + } +} + +# This procedure enables access from a safe interpreter to only a subset +# of the subcommands of a command: + +proc ::safe::Subset {slave command okpat args} { + set subcommand [lindex $args 0] + if {[regexp $okpat $subcommand]} { + return [$command {*}$args] + } + set msg "not allowed to invoke subcommand $subcommand of $command" + Log $slave $msg + return -code error $msg +} + +# This procedure installs an alias in a slave that invokes "safesubset" in +# the master to execute allowed subcommands. It precomputes the pattern of +# allowed subcommands; you can use wildcards in the pattern if you wish to +# allow subcommand abbreviation. +# +# Syntax is: AliasSubset slave alias target subcommand1 subcommand2... + +proc ::safe::AliasSubset {slave alias target args} { + set pat "^([join $args |])\$" + ::interp alias $slave $alias {}\ + [namespace current]::Subset $slave $target $pat +} + +# AliasEncoding is the target of the "encoding" alias in safe interpreters. + +proc ::safe::AliasEncoding {slave option args} { + # Careful; do not want empty option to get through to the [string equal] + if {[regexp {^(name.*|convert.*|)$} $option]} { + return [::interp invokehidden $slave encoding $option {*}$args] + } + + if {[string equal -length [string length $option] $option "system"]} { + if {[llength $args] == 0} { + # passed all the tests , lets source it: + if {[catch { + set sysenc [::interp invokehidden $slave encoding system] + } msg]} { + Log $slave $msg + return -code error "script error" + } + return $sysenc + } + set msg "wrong # args: should be \"encoding system\"" + set code {TCL WRONGARGS} + } else { + set msg "bad option \"$option\": must be convertfrom, convertto, names, or system" + set code [list TCL LOOKUP INDEX option $option] + } + Log $slave $msg + return -code error -errorcode $code $msg +} + +# Various minor hiding of platform features. [Bug 2913625] + +proc ::safe::AliasExeName {slave} { + return "" +} + +proc ::safe::Setup {} { + #### + # + # Setup the arguments parsing + # + #### + + # Share the descriptions + set temp [::tcl::OptKeyRegister { + {-accessPath -list {} "access path for the slave"} + {-noStatics "prevent loading of statically linked pkgs"} + {-statics true "loading of statically linked pkgs"} + {-nestedLoadOk "allow nested loading"} + {-nested false "nested loading"} + {-deleteHook -script {} "delete hook"} + }] + + # create case (slave is optional) + ::tcl::OptKeyRegister { + {?slave? -name {} "name of the slave (optional)"} + } ::safe::interpCreate + + # adding the flags sub programs to the command program (relying on Opt's + # internal implementation details) + lappend ::tcl::OptDesc(::safe::interpCreate) $::tcl::OptDesc($temp) + + # init and configure (slave is needed) + ::tcl::OptKeyRegister { + {slave -name {} "name of the slave"} + } ::safe::interpIC + + # adding the flags sub programs to the command program (relying on Opt's + # internal implementation details) + lappend ::tcl::OptDesc(::safe::interpIC) $::tcl::OptDesc($temp) + + # temp not needed anymore + ::tcl::OptKeyDelete $temp + + #### + # + # Default: No logging. + # + #### + + setLogCmd {} + + # Log eventually. + # To enable error logging, set Log to {puts stderr} for instance, + # via setLogCmd. + return +} + +namespace eval ::safe { + # internal variables + + # Log command, set via 'setLogCmd'. Logging is disabled when empty. + variable Log {} + + # The package maintains a state array per slave interp under its + # control. The name of this array is S. This array is + # brought into scope where needed, using 'namespace upvar'. The S + # prefix is used to avoid that a slave interp called "Log" smashes + # the "Log" variable. + # + # The array's elements are: + # + # access_path : List of paths accessible to the slave. + # access_path,norm : Ditto, in normalized form. + # access_path,slave : Ditto, as the path tokens as seen by the slave. + # access_path,map : dict ( token -> path ) + # access_path,remap : dict ( path -> token ) + # tm_path_slave : List of TM root directories, as tokens seen by the slave. + # staticsok : Value of option -statics + # nestedok : Value of option -nested + # cleanupHook : Value of option -deleteHook +} + +::safe::Setup diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tclIndex b/extensions/fablabchemnitz/inkstitch/bin/tcl/tclIndex new file mode 100644 index 00000000..010616fe --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tclIndex @@ -0,0 +1,87 @@ +# Tcl autoload index file, version 2.0 +# This file is generated by the "auto_mkindex" command +# and sourced to set up indexing information for one or +# more commands. Typically each line is a command that +# sets an element in the auto_index array, where the +# element name is the name of a command and the value is +# a script that loads the command. + +set auto_index(auto_reset) [list source [file join $dir auto.tcl]] +set auto_index(tcl_findLibrary) [list source [file join $dir auto.tcl]] +set auto_index(auto_mkindex) [list source [file join $dir auto.tcl]] +set auto_index(auto_mkindex_old) [list source [file join $dir auto.tcl]] +set auto_index(::auto_mkindex_parser::init) [list source [file join $dir auto.tcl]] +set auto_index(::auto_mkindex_parser::cleanup) [list source [file join $dir auto.tcl]] +set auto_index(::auto_mkindex_parser::mkindex) [list source [file join $dir auto.tcl]] +set auto_index(::auto_mkindex_parser::hook) [list source [file join $dir auto.tcl]] +set auto_index(::auto_mkindex_parser::slavehook) [list source [file join $dir auto.tcl]] +set auto_index(::auto_mkindex_parser::command) [list source [file join $dir auto.tcl]] +set auto_index(::auto_mkindex_parser::commandInit) [list source [file join $dir auto.tcl]] +set auto_index(::auto_mkindex_parser::fullname) [list source [file join $dir auto.tcl]] +set auto_index(history) [list source [file join $dir history.tcl]] +set auto_index(::tcl::HistAdd) [list source [file join $dir history.tcl]] +set auto_index(::tcl::HistKeep) [list source [file join $dir history.tcl]] +set auto_index(::tcl::HistClear) [list source [file join $dir history.tcl]] +set auto_index(::tcl::HistInfo) [list source [file join $dir history.tcl]] +set auto_index(::tcl::HistRedo) [list source [file join $dir history.tcl]] +set auto_index(::tcl::HistIndex) [list source [file join $dir history.tcl]] +set auto_index(::tcl::HistEvent) [list source [file join $dir history.tcl]] +set auto_index(::tcl::HistChange) [list source [file join $dir history.tcl]] +set auto_index(pkg_mkIndex) [list source [file join $dir package.tcl]] +set auto_index(tclPkgSetup) [list source [file join $dir package.tcl]] +set auto_index(tclPkgUnknown) [list source [file join $dir package.tcl]] +set auto_index(::tcl::MacOSXPkgUnknown) [list source [file join $dir package.tcl]] +set auto_index(::pkg::create) [list source [file join $dir package.tcl]] +set auto_index(parray) [list source [file join $dir parray.tcl]] +set auto_index(::safe::InterpStatics) [list source [file join $dir safe.tcl]] +set auto_index(::safe::InterpNested) [list source [file join $dir safe.tcl]] +set auto_index(::safe::interpCreate) [list source [file join $dir safe.tcl]] +set auto_index(::safe::interpInit) [list source [file join $dir safe.tcl]] +set auto_index(::safe::CheckInterp) [list source [file join $dir safe.tcl]] +set auto_index(::safe::interpConfigure) [list source [file join $dir safe.tcl]] +set auto_index(::safe::InterpCreate) [list source [file join $dir safe.tcl]] +set auto_index(::safe::InterpSetConfig) [list source [file join $dir safe.tcl]] +set auto_index(::safe::interpFindInAccessPath) [list source [file join $dir safe.tcl]] +set auto_index(::safe::interpAddToAccessPath) [list source [file join $dir safe.tcl]] +set auto_index(::safe::InterpInit) [list source [file join $dir safe.tcl]] +set auto_index(::safe::AddSubDirs) [list source [file join $dir safe.tcl]] +set auto_index(::safe::interpDelete) [list source [file join $dir safe.tcl]] +set auto_index(::safe::setLogCmd) [list source [file join $dir safe.tcl]] +set auto_index(::safe::SyncAccessPath) [list source [file join $dir safe.tcl]] +set auto_index(::safe::InterpStateName) [list source [file join $dir safe.tcl]] +set auto_index(::safe::IsInterp) [list source [file join $dir safe.tcl]] +set auto_index(::safe::PathToken) [list source [file join $dir safe.tcl]] +set auto_index(::safe::PathListName) [list source [file join $dir safe.tcl]] +set auto_index(::safe::VirtualPathListName) [list source [file join $dir safe.tcl]] +set auto_index(::safe::PathNumberName) [list source [file join $dir safe.tcl]] +set auto_index(::safe::StaticsOkName) [list source [file join $dir safe.tcl]] +set auto_index(::safe::NestedOkName) [list source [file join $dir safe.tcl]] +set auto_index(::safe::Toplevel) [list source [file join $dir safe.tcl]] +set auto_index(::safe::Set) [list source [file join $dir safe.tcl]] +set auto_index(::safe::Lappend) [list source [file join $dir safe.tcl]] +set auto_index(::safe::Unset) [list source [file join $dir safe.tcl]] +set auto_index(::safe::Exists) [list source [file join $dir safe.tcl]] +set auto_index(::safe::GetAccessPath) [list source [file join $dir safe.tcl]] +set auto_index(::safe::StaticsOk) [list source [file join $dir safe.tcl]] +set auto_index(::safe::NestedOk) [list source [file join $dir safe.tcl]] +set auto_index(::safe::DeleteHookName) [list source [file join $dir safe.tcl]] +set auto_index(::safe::TranslatePath) [list source [file join $dir safe.tcl]] +set auto_index(::safe::Log) [list source [file join $dir safe.tcl]] +set auto_index(::safe::CheckFileName) [list source [file join $dir safe.tcl]] +set auto_index(::safe::AliasSource) [list source [file join $dir safe.tcl]] +set auto_index(::safe::AliasLoad) [list source [file join $dir safe.tcl]] +set auto_index(::safe::FileInAccessPath) [list source [file join $dir safe.tcl]] +set auto_index(::safe::Subset) [list source [file join $dir safe.tcl]] +set auto_index(::safe::AliasSubset) [list source [file join $dir safe.tcl]] +set auto_index(::safe::AliasEncoding) [list source [file join $dir safe.tcl]] +set auto_index(tcl_wordBreakAfter) [list source [file join $dir word.tcl]] +set auto_index(tcl_wordBreakBefore) [list source [file join $dir word.tcl]] +set auto_index(tcl_endOfWord) [list source [file join $dir word.tcl]] +set auto_index(tcl_startOfNextWord) [list source [file join $dir word.tcl]] +set auto_index(tcl_startOfPreviousWord) [list source [file join $dir word.tcl]] +set auto_index(::tcl::tm::add) [list source [file join $dir tm.tcl]] +set auto_index(::tcl::tm::remove) [list source [file join $dir tm.tcl]] +set auto_index(::tcl::tm::list) [list source [file join $dir tm.tcl]] +set auto_index(::tcl::tm::UnknownHandler) [list source [file join $dir tm.tcl]] +set auto_index(::tcl::tm::roots) [list source [file join $dir tm.tcl]] +set auto_index(::tcl::tm::path) [list source [file join $dir tm.tcl]] diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tm.tcl b/extensions/fablabchemnitz/inkstitch/bin/tcl/tm.tcl new file mode 100644 index 00000000..87db0dff --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tm.tcl @@ -0,0 +1,387 @@ +# -*- tcl -*- +# +# Searching for Tcl Modules. Defines a procedure, declares it as the +# primary command for finding packages, however also uses the former +# 'package unknown' command as a fallback. +# +# Locates all possible packages in a directory via a less restricted +# glob. The targeted directory is derived from the name of the +# requested package. I.e. the TM scan will look only at directories +# which can contain the requested package. It will register all +# packages it found in the directory so that future requests have a +# higher chance of being fulfilled by the ifneeded database without +# having to come to us again. +# +# We do not remember where we have been and simply rescan targeted +# directories when invoked again. The reasoning is this: +# +# - The only way we get back to the same directory is if someone is +# trying to [package require] something that wasn't there on the +# first scan. +# +# Either +# 1) It is there now: If we rescan, you get it; if not you don't. +# +# This covers the possibility that the application asked for a +# package late, and the package was actually added to the +# installation after the application was started. It shoukld +# still be able to find it. +# +# 2) It still is not there: Either way, you don't get it, but the +# rescan takes time. This is however an error case and we dont't +# care that much about it +# +# 3) It was there the first time; but for some reason a "package +# forget" has been run, and "package" doesn't know about it +# anymore. +# +# This can be an indication that the application wishes to reload +# some functionality. And should work as well. +# +# Note that this also strikes a balance between doing a glob targeting +# a single package, and thus most likely requiring multiple globs of +# the same directory when the application is asking for many packages, +# and trying to glob for _everything_ in all subdirectories when +# looking for a package, which comes with a heavy startup cost. +# +# We scan for regular packages only if no satisfying module was found. + +namespace eval ::tcl::tm { + # Default paths. None yet. + + variable paths {} + + # The regex pattern a file name has to match to make it a Tcl Module. + + set pkgpattern {^([_[:alpha:]][:_[:alnum:]]*)-([[:digit:]].*)[.]tm$} + + # Export the public API + + namespace export path + namespace ensemble create -command path -subcommands {add remove list} +} + +# ::tcl::tm::path implementations -- +# +# Public API to the module path. See specification. +# +# Arguments +# cmd - The subcommand to execute +# args - The paths to add/remove. Must not appear querying the +# path with 'list'. +# +# Results +# No result for subcommands 'add' and 'remove'. A list of paths +# for 'list'. +# +# Sideeffects +# The subcommands 'add' and 'remove' manipulate the list of +# paths to search for Tcl Modules. The subcommand 'list' has no +# sideeffects. + +proc ::tcl::tm::add {path args} { + # PART OF THE ::tcl::tm::path ENSEMBLE + # + # The path is added at the head to the list of module paths. + # + # The command enforces the restriction that no path may be an + # ancestor directory of any other path on the list. If the new + # path violates this restriction an error wil be raised. + # + # If the path is already present as is no error will be raised and + # no action will be taken. + + variable paths + + # We use a copy of the path as source during validation, and + # extend it as well. Because we not only have to detect if the new + # paths are bogus with respect to the existing paths, but also + # between themselves. Otherwise we can still add bogus paths, by + # specifying them in a single call. This makes the use of the new + # paths simpler as well, a trivial assignment of the collected + # paths to the official state var. + + set newpaths $paths + foreach p [linsert $args 0 $path] { + if {$p in $newpaths} { + # Ignore a path already on the list. + continue + } + + # Search for paths which are subdirectories of the new one. If + # there are any then the new path violates the restriction + # about ancestors. + + set pos [lsearch -glob $newpaths ${p}/*] + # Cannot use "in", we need the position for the message. + if {$pos >= 0} { + return -code error \ + "$p is ancestor of existing module path [lindex $newpaths $pos]." + } + + # Now look for existing paths which are ancestors of the new + # one. This reverse question forces us to loop over the + # existing paths, as each element is the pattern, not the new + # path :( + + foreach ep $newpaths { + if {[string match ${ep}/* $p]} { + return -code error \ + "$p is subdirectory of existing module path $ep." + } + } + + set newpaths [linsert $newpaths 0 $p] + } + + # The validation of the input is complete and successful, and + # everything in newpaths is either an old path, or added. We can + # now extend the official list of paths, a simple assignment is + # sufficient. + + set paths $newpaths + return +} + +proc ::tcl::tm::remove {path args} { + # PART OF THE ::tcl::tm::path ENSEMBLE + # + # Removes the path from the list of module paths. The command is + # silently ignored if the path is not on the list. + + variable paths + + foreach p [linsert $args 0 $path] { + set pos [lsearch -exact $paths $p] + if {$pos >= 0} { + set paths [lreplace $paths $pos $pos] + } + } +} + +proc ::tcl::tm::list {} { + # PART OF THE ::tcl::tm::path ENSEMBLE + + variable paths + return $paths +} + +# ::tcl::tm::UnknownHandler -- +# +# Unknown handler for Tcl Modules, i.e. packages in module form. +# +# Arguments +# original - Original [package unknown] procedure. +# name - Name of desired package. +# version - Version of desired package. Can be the +# empty string. +# exact - Either -exact or ommitted. +# +# Name, version, and exact are used to determine +# satisfaction. The original is called iff no satisfaction was +# achieved. The name is also used to compute the directory to +# target in the search. +# +# Results +# None. +# +# Sideeffects +# May populate the package ifneeded database with additional +# provide scripts. + +proc ::tcl::tm::UnknownHandler {original name args} { + # Import the list of paths to search for packages in module form. + # Import the pattern used to check package names in detail. + + variable paths + variable pkgpattern + + # Without paths to search we can do nothing. (Except falling back + # to the regular search). + + if {[llength $paths]} { + set pkgpath [string map {:: /} $name] + set pkgroot [file dirname $pkgpath] + if {$pkgroot eq "."} { + set pkgroot "" + } + + # We don't remember a copy of the paths while looping. Tcl + # Modules are unable to change the list while we are searching + # for them. This also simplifies the loop, as we cannot get + # additional directories while iterating over the list. A + # simple foreach is sufficient. + + set satisfied 0 + foreach path $paths { + if {![interp issafe] && ![file exists $path]} { + continue + } + set currentsearchpath [file join $path $pkgroot] + if {![interp issafe] && ![file exists $currentsearchpath]} { + continue + } + set strip [llength [file split $path]] + + # We can't use glob in safe interps, so enclose the following + # in a catch statement, where we get the module files out + # of the subdirectories. In other words, Tcl Modules are + # not-functional in such an interpreter. This is the same + # as for the command "tclPkgUnknown", i.e. the search for + # regular packages. + + catch { + # We always look for _all_ possible modules in the current + # path, to get the max result out of the glob. + + foreach file [glob -nocomplain -directory $currentsearchpath *.tm] { + set pkgfilename [join [lrange [file split $file] $strip end] ::] + + if {![regexp -- $pkgpattern $pkgfilename --> pkgname pkgversion]} { + # Ignore everything not matching our pattern + # for package names. + continue + } + if {[catch {package vcompare $pkgversion 0}]} { + # Ignore everything where the version part is + # not acceptable to "package vcompare". + continue + } + + if {[package ifneeded $pkgname $pkgversion] ne {}} { + # There's already a provide script registered for + # this version of this package. Since all units of + # code claiming to be the same version of the same + # package ought to be identical, just stick with + # the one we already have. + continue + } + + # We have found a candidate, generate a "provide + # script" for it, and remember it. Note that we + # are using ::list to do this; locally [list] + # means something else without the namespace + # specifier. + + # NOTE. When making changes to the format of the + # provide command generated below CHECK that the + # 'LOCATE' procedure in core file + # 'platform/shell.tcl' still understands it, or, + # if not, update its implementation appropriately. + # + # Right now LOCATE's implementation assumes that + # the path of the package file is the last element + # in the list. + + package ifneeded $pkgname $pkgversion \ + "[::list package provide $pkgname $pkgversion];[::list source -encoding utf-8 $file]" + + # We abort in this unknown handler only if we got + # a satisfying candidate for the requested + # package. Otherwise we still have to fallback to + # the regular package search to complete the + # processing. + + if {($pkgname eq $name) + && [package vsatisfies $pkgversion {*}$args]} { + set satisfied 1 + # We do not abort the loop, and keep adding + # provide scripts for every candidate in the + # directory, just remember to not fall back to + # the regular search anymore. + } + } + } + } + + if {$satisfied} { + return + } + } + + # Fallback to previous command, if existing. See comment above + # about ::list... + + if {[llength $original]} { + uplevel 1 $original [::linsert $args 0 $name] + } +} + +# ::tcl::tm::Defaults -- +# +# Determines the default search paths. +# +# Arguments +# None +# +# Results +# None. +# +# Sideeffects +# May add paths to the list of defaults. + +proc ::tcl::tm::Defaults {} { + global env tcl_platform + + lassign [split [info tclversion] .] major minor + set exe [file normalize [info nameofexecutable]] + + # Note that we're using [::list], not [list] because [list] means + # something other than [::list] in this namespace. + roots [::list \ + [file dirname [info library]] \ + [file join [file dirname [file dirname $exe]] lib] \ + ] + + if {$tcl_platform(platform) eq "windows"} { + set sep ";" + } else { + set sep ":" + } + for {set n $minor} {$n >= 0} {incr n -1} { + foreach ev [::list \ + TCL${major}.${n}_TM_PATH \ + TCL${major}_${n}_TM_PATH \ + ] { + if {![info exists env($ev)]} continue + foreach p [split $env($ev) $sep] { + path add $p + } + } + } + return +} + +# ::tcl::tm::roots -- +# +# Public API to the module path. See specification. +# +# Arguments +# paths - List of 'root' paths to derive search paths from. +# +# Results +# No result. +# +# Sideeffects +# Calls 'path add' to paths to the list of module search paths. + +proc ::tcl::tm::roots {paths} { + lassign [split [package present Tcl] .] major minor + foreach pa $paths { + set p [file join $pa tcl$major] + for {set n $minor} {$n >= 0} {incr n -1} { + set px [file join $p ${major}.${n}] + if {![interp issafe]} { set px [file normalize $px] } + path add $px + } + set px [file join $p site-tcl] + if {![interp issafe]} { set px [file normalize $px] } + path add $px + } + return +} + +# Initialization. Set up the default paths, then insert the new +# handler into the chain. + +if {![interp issafe]} { ::tcl::tm::Defaults } diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Abidjan b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Abidjan new file mode 100644 index 00000000..4b4f5b22 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Abidjan @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Africa/Abidjan) { + {-9223372036854775808 -968 0 LMT} + {-1830383032 0 0 GMT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Accra b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Accra new file mode 100644 index 00000000..39db9760 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Accra @@ -0,0 +1,52 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Africa/Accra) { + {-9223372036854775808 -52 0 LMT} + {-1640995148 0 0 GMT} + {-1556841600 1200 1 GHST} + {-1546388400 0 0 GMT} + {-1525305600 1200 1 GHST} + {-1514852400 0 0 GMT} + {-1493769600 1200 1 GHST} + {-1483316400 0 0 GMT} + {-1462233600 1200 1 GHST} + {-1451780400 0 0 GMT} + {-1430611200 1200 1 GHST} + {-1420158000 0 0 GMT} + {-1399075200 1200 1 GHST} + {-1388622000 0 0 GMT} + {-1367539200 1200 1 GHST} + {-1357086000 0 0 GMT} + {-1336003200 1200 1 GHST} + {-1325550000 0 0 GMT} + {-1304380800 1200 1 GHST} + {-1293927600 0 0 GMT} + {-1272844800 1200 1 GHST} + {-1262391600 0 0 GMT} + {-1241308800 1200 1 GHST} + {-1230855600 0 0 GMT} + {-1209772800 1200 1 GHST} + {-1199319600 0 0 GMT} + {-1178150400 1200 1 GHST} + {-1167697200 0 0 GMT} + {-1146614400 1200 1 GHST} + {-1136161200 0 0 GMT} + {-1115078400 1200 1 GHST} + {-1104625200 0 0 GMT} + {-1083542400 1200 1 GHST} + {-1073089200 0 0 GMT} + {-1051920000 1200 1 GHST} + {-1041466800 0 0 GMT} + {-1020384000 1200 1 GHST} + {-1009930800 0 0 GMT} + {-988848000 1200 1 GHST} + {-978394800 0 0 GMT} + {-957312000 1200 1 GHST} + {-946858800 0 0 GMT} + {-925689600 1200 1 GHST} + {-915236400 0 0 GMT} + {-894153600 1200 1 GHST} + {-883700400 0 0 GMT} + {-862617600 1200 1 GHST} + {-852164400 0 0 GMT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Addis_Ababa b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Addis_Ababa new file mode 100644 index 00000000..7aa5653e --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Addis_Ababa @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Africa/Nairobi)]} { + LoadTimeZoneFile Africa/Nairobi +} +set TZData(:Africa/Addis_Ababa) $TZData(:Africa/Nairobi) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Algiers b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Algiers new file mode 100644 index 00000000..fe4de22b --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Algiers @@ -0,0 +1,39 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Africa/Algiers) { + {-9223372036854775808 732 0 LMT} + {-2486679072 561 0 PMT} + {-1855958961 0 0 WET} + {-1689814800 3600 1 WEST} + {-1680397200 0 0 WET} + {-1665363600 3600 1 WEST} + {-1648342800 0 0 WET} + {-1635123600 3600 1 WEST} + {-1616893200 0 0 WET} + {-1604278800 3600 1 WEST} + {-1585443600 0 0 WET} + {-1574038800 3600 1 WEST} + {-1552266000 0 0 WET} + {-1539997200 3600 1 WEST} + {-1531443600 0 0 WET} + {-956365200 3600 1 WEST} + {-950486400 0 0 WET} + {-942012000 3600 0 CET} + {-812502000 7200 1 CEST} + {-796262400 3600 0 CET} + {-781052400 7200 1 CEST} + {-766630800 3600 0 CET} + {-733280400 0 0 WET} + {-439430400 3600 0 CET} + {-212029200 0 0 WET} + {41468400 3600 1 WEST} + {54774000 0 0 WET} + {231724800 3600 1 WEST} + {246240000 3600 0 CET} + {259545600 7200 1 CEST} + {275274000 3600 0 CET} + {309740400 0 0 WET} + {325468800 3600 1 WEST} + {341802000 0 0 WET} + {357523200 3600 0 CET} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Asmara b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Asmara new file mode 100644 index 00000000..3d33c944 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Asmara @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Africa/Nairobi)]} { + LoadTimeZoneFile Africa/Nairobi +} +set TZData(:Africa/Asmara) $TZData(:Africa/Nairobi) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Asmera b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Asmera new file mode 100644 index 00000000..ca8d1230 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Asmera @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Africa/Nairobi)]} { + LoadTimeZoneFile Africa/Nairobi +} +set TZData(:Africa/Asmera) $TZData(:Africa/Nairobi) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Bamako b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Bamako new file mode 100644 index 00000000..08183783 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Bamako @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Africa/Abidjan)]} { + LoadTimeZoneFile Africa/Abidjan +} +set TZData(:Africa/Bamako) $TZData(:Africa/Abidjan) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Bangui b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Bangui new file mode 100644 index 00000000..0326a6ce --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Bangui @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Africa/Lagos)]} { + LoadTimeZoneFile Africa/Lagos +} +set TZData(:Africa/Bangui) $TZData(:Africa/Lagos) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Banjul b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Banjul new file mode 100644 index 00000000..ded0e577 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Banjul @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Africa/Abidjan)]} { + LoadTimeZoneFile Africa/Abidjan +} +set TZData(:Africa/Banjul) $TZData(:Africa/Abidjan) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Bissau b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Bissau new file mode 100644 index 00000000..56932285 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Bissau @@ -0,0 +1,7 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Africa/Bissau) { + {-9223372036854775808 -3740 0 LMT} + {-1830380260 -3600 0 WAT} + {157770000 0 0 GMT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Blantyre b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Blantyre new file mode 100644 index 00000000..9a404c51 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Blantyre @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Africa/Maputo)]} { + LoadTimeZoneFile Africa/Maputo +} +set TZData(:Africa/Blantyre) $TZData(:Africa/Maputo) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Brazzaville b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Brazzaville new file mode 100644 index 00000000..111eff46 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Brazzaville @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Africa/Lagos)]} { + LoadTimeZoneFile Africa/Lagos +} +set TZData(:Africa/Brazzaville) $TZData(:Africa/Lagos) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Bujumbura b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Bujumbura new file mode 100644 index 00000000..1e463d8a --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Bujumbura @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Africa/Maputo)]} { + LoadTimeZoneFile Africa/Maputo +} +set TZData(:Africa/Bujumbura) $TZData(:Africa/Maputo) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Cairo b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Cairo new file mode 100644 index 00000000..aaeec54e --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Cairo @@ -0,0 +1,132 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Africa/Cairo) { + {-9223372036854775808 7509 0 LMT} + {-2185409109 7200 0 EET} + {-929844000 10800 1 EEST} + {-923108400 7200 0 EET} + {-906170400 10800 1 EEST} + {-892868400 7200 0 EET} + {-875844000 10800 1 EEST} + {-857790000 7200 0 EET} + {-844308000 10800 1 EEST} + {-825822000 7200 0 EET} + {-812685600 10800 1 EEST} + {-794199600 7200 0 EET} + {-779853600 10800 1 EEST} + {-762663600 7200 0 EET} + {-399088800 10800 1 EEST} + {-386650800 7200 0 EET} + {-368330400 10800 1 EEST} + {-355114800 7200 0 EET} + {-336790800 10800 1 EEST} + {-323654400 7200 0 EET} + {-305168400 10800 1 EEST} + {-292032000 7200 0 EET} + {-273632400 10800 1 EEST} + {-260496000 7200 0 EET} + {-242096400 10800 1 EEST} + {-228960000 7200 0 EET} + {-210560400 10800 1 EEST} + {-197424000 7200 0 EET} + {-178938000 10800 1 EEST} + {-165801600 7200 0 EET} + {-147402000 10800 1 EEST} + {-134265600 7200 0 EET} + {-115866000 10800 1 EEST} + {-102643200 7200 0 EET} + {-84330000 10800 1 EEST} + {-71107200 7200 0 EET} + {-52707600 10800 1 EEST} + {-39484800 7200 0 EET} + {-21171600 10800 1 EEST} + {-7948800 7200 0 EET} + {10364400 10800 1 EEST} + {23587200 7200 0 EET} + {41900400 10800 1 EEST} + {55123200 7200 0 EET} + {73522800 10800 1 EEST} + {86745600 7200 0 EET} + {105058800 10800 1 EEST} + {118281600 7200 0 EET} + {136594800 10800 1 EEST} + {149817600 7200 0 EET} + {168130800 10800 1 EEST} + {181353600 7200 0 EET} + {199753200 10800 1 EEST} + {212976000 7200 0 EET} + {231289200 10800 1 EEST} + {244512000 7200 0 EET} + {262825200 10800 1 EEST} + {276048000 7200 0 EET} + {294361200 10800 1 EEST} + {307584000 7200 0 EET} + {325983600 10800 1 EEST} + {339206400 7200 0 EET} + {357519600 10800 1 EEST} + {370742400 7200 0 EET} + {396399600 10800 1 EEST} + {402278400 7200 0 EET} + {426812400 10800 1 EEST} + {433814400 7200 0 EET} + {452214000 10800 1 EEST} + {465436800 7200 0 EET} + {483750000 10800 1 EEST} + {496972800 7200 0 EET} + {515286000 10800 1 EEST} + {528508800 7200 0 EET} + {546822000 10800 1 EEST} + {560044800 7200 0 EET} + {578444400 10800 1 EEST} + {591667200 7200 0 EET} + {610412400 10800 1 EEST} + {623203200 7200 0 EET} + {641516400 10800 1 EEST} + {654739200 7200 0 EET} + {673052400 10800 1 EEST} + {686275200 7200 0 EET} + {704674800 10800 1 EEST} + {717897600 7200 0 EET} + {736210800 10800 1 EEST} + {749433600 7200 0 EET} + {767746800 10800 1 EEST} + {780969600 7200 0 EET} + {799020000 10800 1 EEST} + {812322000 7200 0 EET} + {830469600 10800 1 EEST} + {843771600 7200 0 EET} + {861919200 10800 1 EEST} + {875221200 7200 0 EET} + {893368800 10800 1 EEST} + {906670800 7200 0 EET} + {925423200 10800 1 EEST} + {938725200 7200 0 EET} + {956872800 10800 1 EEST} + {970174800 7200 0 EET} + {988322400 10800 1 EEST} + {1001624400 7200 0 EET} + {1019772000 10800 1 EEST} + {1033074000 7200 0 EET} + {1051221600 10800 1 EEST} + {1064523600 7200 0 EET} + {1083276000 10800 1 EEST} + {1096578000 7200 0 EET} + {1114725600 10800 1 EEST} + {1128027600 7200 0 EET} + {1146175200 10800 1 EEST} + {1158872400 7200 0 EET} + {1177624800 10800 1 EEST} + {1189112400 7200 0 EET} + {1209074400 10800 1 EEST} + {1219957200 7200 0 EET} + {1240524000 10800 1 EEST} + {1250802000 7200 0 EET} + {1272578400 10800 1 EEST} + {1281474000 7200 0 EET} + {1284069600 10800 1 EEST} + {1285880400 7200 0 EET} + {1400191200 10800 1 EEST} + {1403816400 7200 0 EET} + {1406844000 10800 1 EEST} + {1411678800 7200 0 EET} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Casablanca b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Casablanca new file mode 100644 index 00000000..33ad99b8 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Casablanca @@ -0,0 +1,230 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Africa/Casablanca) { + {-9223372036854775808 -1820 0 LMT} + {-1773012580 0 0 WET} + {-956361600 3600 1 WEST} + {-950490000 0 0 WET} + {-942019200 3600 1 WEST} + {-761187600 0 0 WET} + {-617241600 3600 1 WEST} + {-605149200 0 0 WET} + {-81432000 3600 1 WEST} + {-71110800 0 0 WET} + {141264000 3600 1 WEST} + {147222000 0 0 WET} + {199756800 3600 1 WEST} + {207702000 0 0 WET} + {231292800 3600 1 WEST} + {244249200 0 0 WET} + {265507200 3600 1 WEST} + {271033200 0 0 WET} + {448243200 3600 0 CET} + {504918000 0 0 WET} + {1212278400 3600 1 WEST} + {1220223600 0 0 WET} + {1243814400 3600 1 WEST} + {1250809200 0 0 WET} + {1272758400 3600 1 WEST} + {1281222000 0 0 WET} + {1301788800 3600 1 WEST} + {1312066800 0 0 WET} + {1335664800 3600 1 WEST} + {1342749600 0 0 WET} + {1345428000 3600 1 WEST} + {1348970400 0 0 WET} + {1367114400 3600 1 WEST} + {1373162400 0 0 WET} + {1376100000 3600 1 WEST} + {1382839200 0 0 WET} + {1396144800 3600 1 WEST} + {1403920800 0 0 WET} + {1406944800 3600 1 WEST} + {1414288800 0 0 WET} + {1427594400 3600 1 WEST} + {1434247200 0 0 WET} + {1437271200 3600 1 WEST} + {1445738400 0 0 WET} + {1459044000 3600 1 WEST} + {1465092000 0 0 WET} + {1468116000 3600 1 WEST} + {1477792800 0 0 WET} + {1490493600 3600 1 WEST} + {1495332000 0 0 WET} + {1498960800 3600 1 WEST} + {1509242400 0 0 WET} + {1521943200 3600 1 WEST} + {1526176800 0 0 WET} + {1529200800 3600 1 WEST} + {1540692000 0 0 WET} + {1553997600 3600 1 WEST} + {1557021600 0 0 WET} + {1560045600 3600 1 WEST} + {1572141600 0 0 WET} + {1585447200 3600 1 WEST} + {1587261600 0 0 WET} + {1590285600 3600 1 WEST} + {1603591200 0 0 WET} + {1616896800 3600 1 WEST} + {1618106400 0 0 WET} + {1621130400 3600 1 WEST} + {1635645600 0 0 WET} + {1651975200 3600 1 WEST} + {1667095200 0 0 WET} + {1682215200 3600 1 WEST} + {1698544800 0 0 WET} + {1713060000 3600 1 WEST} + {1729994400 0 0 WET} + {1743904800 3600 1 WEST} + {1761444000 0 0 WET} + {1774749600 3600 1 WEST} + {1792893600 0 0 WET} + {1806199200 3600 1 WEST} + {1824948000 0 0 WET} + {1837648800 3600 1 WEST} + {1856397600 0 0 WET} + {1869098400 3600 1 WEST} + {1887847200 0 0 WET} + {1901152800 3600 1 WEST} + {1919296800 0 0 WET} + {1932602400 3600 1 WEST} + {1950746400 0 0 WET} + {1964052000 3600 1 WEST} + {1982800800 0 0 WET} + {1995501600 3600 1 WEST} + {2014250400 0 0 WET} + {2026951200 3600 1 WEST} + {2045700000 0 0 WET} + {2058400800 3600 1 WEST} + {2077149600 0 0 WET} + {2090455200 3600 1 WEST} + {2107994400 0 0 WET} + {2108602800 0 0 WET} + {2121904800 3600 1 WEST} + {2138234400 0 0 WET} + {2140052400 0 0 WET} + {2153354400 3600 1 WEST} + {2172103200 0 0 WET} + {2184804000 3600 1 WEST} + {2203552800 0 0 WET} + {2216253600 3600 1 WEST} + {2235002400 0 0 WET} + {2248308000 3600 1 WEST} + {2266452000 0 0 WET} + {2279757600 3600 1 WEST} + {2297901600 0 0 WET} + {2311207200 3600 1 WEST} + {2329351200 0 0 WET} + {2342656800 3600 1 WEST} + {2361405600 0 0 WET} + {2374106400 3600 1 WEST} + {2392855200 0 0 WET} + {2405556000 3600 1 WEST} + {2424304800 0 0 WET} + {2437610400 3600 1 WEST} + {2455754400 0 0 WET} + {2469060000 3600 1 WEST} + {2487204000 0 0 WET} + {2500509600 3600 1 WEST} + {2519258400 0 0 WET} + {2531959200 3600 1 WEST} + {2550708000 0 0 WET} + {2563408800 3600 1 WEST} + {2582157600 0 0 WET} + {2595463200 3600 1 WEST} + {2613607200 0 0 WET} + {2626912800 3600 1 WEST} + {2645056800 0 0 WET} + {2658362400 3600 1 WEST} + {2676506400 0 0 WET} + {2689812000 3600 1 WEST} + {2708560800 0 0 WET} + {2721261600 3600 1 WEST} + {2740010400 0 0 WET} + {2752711200 3600 1 WEST} + {2771460000 0 0 WET} + {2784765600 3600 1 WEST} + {2802909600 0 0 WET} + {2816215200 3600 1 WEST} + {2834359200 0 0 WET} + {2847664800 3600 1 WEST} + {2866413600 0 0 WET} + {2879114400 3600 1 WEST} + {2897863200 0 0 WET} + {2910564000 3600 1 WEST} + {2929312800 0 0 WET} + {2942013600 3600 1 WEST} + {2960762400 0 0 WET} + {2974068000 3600 1 WEST} + {2992212000 0 0 WET} + {3005517600 3600 1 WEST} + {3023661600 0 0 WET} + {3036967200 3600 1 WEST} + {3055716000 0 0 WET} + {3068416800 3600 1 WEST} + {3087165600 0 0 WET} + {3099866400 3600 1 WEST} + {3118615200 0 0 WET} + {3131920800 3600 1 WEST} + {3150064800 0 0 WET} + {3163370400 3600 1 WEST} + {3181514400 0 0 WET} + {3194820000 3600 1 WEST} + {3212964000 0 0 WET} + {3226269600 3600 1 WEST} + {3245018400 0 0 WET} + {3257719200 3600 1 WEST} + {3276468000 0 0 WET} + {3289168800 3600 1 WEST} + {3307917600 0 0 WET} + {3321223200 3600 1 WEST} + {3339367200 0 0 WET} + {3352672800 3600 1 WEST} + {3370816800 0 0 WET} + {3384122400 3600 1 WEST} + {3402871200 0 0 WET} + {3415572000 3600 1 WEST} + {3434320800 0 0 WET} + {3447021600 3600 1 WEST} + {3465770400 0 0 WET} + {3479076000 3600 1 WEST} + {3497220000 0 0 WET} + {3510525600 3600 1 WEST} + {3528669600 0 0 WET} + {3541975200 3600 1 WEST} + {3560119200 0 0 WET} + {3573424800 3600 1 WEST} + {3592173600 0 0 WET} + {3604874400 3600 1 WEST} + {3623623200 0 0 WET} + {3636324000 3600 1 WEST} + {3655072800 0 0 WET} + {3668378400 3600 1 WEST} + {3686522400 0 0 WET} + {3699828000 3600 1 WEST} + {3717972000 0 0 WET} + {3731277600 3600 1 WEST} + {3750026400 0 0 WET} + {3762727200 3600 1 WEST} + {3781476000 0 0 WET} + {3794176800 3600 1 WEST} + {3812925600 0 0 WET} + {3825626400 3600 1 WEST} + {3844375200 0 0 WET} + {3857680800 3600 1 WEST} + {3875824800 0 0 WET} + {3889130400 3600 1 WEST} + {3907274400 0 0 WET} + {3920580000 3600 1 WEST} + {3939328800 0 0 WET} + {3952029600 3600 1 WEST} + {3970778400 0 0 WET} + {3983479200 3600 1 WEST} + {4002228000 0 0 WET} + {4015533600 3600 1 WEST} + {4033677600 0 0 WET} + {4046983200 3600 1 WEST} + {4065127200 0 0 WET} + {4078432800 3600 1 WEST} + {4096576800 0 0 WET} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Ceuta b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Ceuta new file mode 100644 index 00000000..882c13d1 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Ceuta @@ -0,0 +1,258 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Africa/Ceuta) { + {-9223372036854775808 -1276 0 LMT} + {-2177451524 0 0 WET} + {-1630112400 3600 1 WEST} + {-1616810400 0 0 WET} + {-1451692800 0 0 WET} + {-1442451600 3600 1 WEST} + {-1427677200 0 0 WET} + {-1379293200 3600 1 WEST} + {-1364778000 0 0 WET} + {-1348448400 3600 1 WEST} + {-1333328400 0 0 WET} + {-1316394000 3600 1 WEST} + {-1301274000 0 0 WET} + {-1293840000 0 0 WET} + {-81432000 3600 1 WEST} + {-71110800 0 0 WET} + {141264000 3600 1 WEST} + {147222000 0 0 WET} + {199756800 3600 1 WEST} + {207702000 0 0 WET} + {231292800 3600 1 WEST} + {244249200 0 0 WET} + {265507200 3600 1 WEST} + {271033200 0 0 WET} + {448243200 3600 0 CET} + {504918000 3600 0 CET} + {512528400 7200 1 CEST} + {528253200 3600 0 CET} + {543978000 7200 1 CEST} + {559702800 3600 0 CET} + {575427600 7200 1 CEST} + {591152400 3600 0 CET} + {606877200 7200 1 CEST} + {622602000 3600 0 CET} + {638326800 7200 1 CEST} + {654656400 3600 0 CET} + {670381200 7200 1 CEST} + {686106000 3600 0 CET} + {701830800 7200 1 CEST} + {717555600 3600 0 CET} + {733280400 7200 1 CEST} + {749005200 3600 0 CET} + {764730000 7200 1 CEST} + {780454800 3600 0 CET} + {796179600 7200 1 CEST} + {811904400 3600 0 CET} + {828234000 7200 1 CEST} + {846378000 3600 0 CET} + {859683600 7200 1 CEST} + {877827600 3600 0 CET} + {891133200 7200 1 CEST} + {909277200 3600 0 CET} + {922582800 7200 1 CEST} + {941331600 3600 0 CET} + {954032400 7200 1 CEST} + {972781200 3600 0 CET} + {985482000 7200 1 CEST} + {1004230800 3600 0 CET} + {1017536400 7200 1 CEST} + {1035680400 3600 0 CET} + {1048986000 7200 1 CEST} + {1067130000 3600 0 CET} + {1080435600 7200 1 CEST} + {1099184400 3600 0 CET} + {1111885200 7200 1 CEST} + {1130634000 3600 0 CET} + {1143334800 7200 1 CEST} + {1162083600 3600 0 CET} + {1174784400 7200 1 CEST} + {1193533200 3600 0 CET} + {1206838800 7200 1 CEST} + {1224982800 3600 0 CET} + {1238288400 7200 1 CEST} + {1256432400 3600 0 CET} + {1269738000 7200 1 CEST} + {1288486800 3600 0 CET} + {1301187600 7200 1 CEST} + {1319936400 3600 0 CET} + {1332637200 7200 1 CEST} + {1351386000 3600 0 CET} + {1364691600 7200 1 CEST} + {1382835600 3600 0 CET} + {1396141200 7200 1 CEST} + {1414285200 3600 0 CET} + {1427590800 7200 1 CEST} + {1445734800 3600 0 CET} + {1459040400 7200 1 CEST} + {1477789200 3600 0 CET} + {1490490000 7200 1 CEST} + {1509238800 3600 0 CET} + {1521939600 7200 1 CEST} + {1540688400 3600 0 CET} + {1553994000 7200 1 CEST} + {1572138000 3600 0 CET} + {1585443600 7200 1 CEST} + {1603587600 3600 0 CET} + {1616893200 7200 1 CEST} + {1635642000 3600 0 CET} + {1648342800 7200 1 CEST} + {1667091600 3600 0 CET} + {1679792400 7200 1 CEST} + {1698541200 3600 0 CET} + {1711846800 7200 1 CEST} + {1729990800 3600 0 CET} + {1743296400 7200 1 CEST} + {1761440400 3600 0 CET} + {1774746000 7200 1 CEST} + {1792890000 3600 0 CET} + {1806195600 7200 1 CEST} + {1824944400 3600 0 CET} + {1837645200 7200 1 CEST} + {1856394000 3600 0 CET} + {1869094800 7200 1 CEST} + {1887843600 3600 0 CET} + {1901149200 7200 1 CEST} + {1919293200 3600 0 CET} + {1932598800 7200 1 CEST} + {1950742800 3600 0 CET} + {1964048400 7200 1 CEST} + {1982797200 3600 0 CET} + {1995498000 7200 1 CEST} + {2014246800 3600 0 CET} + {2026947600 7200 1 CEST} + {2045696400 3600 0 CET} + {2058397200 7200 1 CEST} + {2077146000 3600 0 CET} + {2090451600 7200 1 CEST} + {2108595600 3600 0 CET} + {2121901200 7200 1 CEST} + {2140045200 3600 0 CET} + {2153350800 7200 1 CEST} + {2172099600 3600 0 CET} + {2184800400 7200 1 CEST} + {2203549200 3600 0 CET} + {2216250000 7200 1 CEST} + {2234998800 3600 0 CET} + {2248304400 7200 1 CEST} + {2266448400 3600 0 CET} + {2279754000 7200 1 CEST} + {2297898000 3600 0 CET} + {2311203600 7200 1 CEST} + {2329347600 3600 0 CET} + {2342653200 7200 1 CEST} + {2361402000 3600 0 CET} + {2374102800 7200 1 CEST} + {2392851600 3600 0 CET} + {2405552400 7200 1 CEST} + {2424301200 3600 0 CET} + {2437606800 7200 1 CEST} + {2455750800 3600 0 CET} + {2469056400 7200 1 CEST} + {2487200400 3600 0 CET} + {2500506000 7200 1 CEST} + {2519254800 3600 0 CET} + {2531955600 7200 1 CEST} + {2550704400 3600 0 CET} + {2563405200 7200 1 CEST} + {2582154000 3600 0 CET} + {2595459600 7200 1 CEST} + {2613603600 3600 0 CET} + {2626909200 7200 1 CEST} + {2645053200 3600 0 CET} + {2658358800 7200 1 CEST} + {2676502800 3600 0 CET} + {2689808400 7200 1 CEST} + {2708557200 3600 0 CET} + {2721258000 7200 1 CEST} + {2740006800 3600 0 CET} + {2752707600 7200 1 CEST} + {2771456400 3600 0 CET} + {2784762000 7200 1 CEST} + {2802906000 3600 0 CET} + {2816211600 7200 1 CEST} + {2834355600 3600 0 CET} + {2847661200 7200 1 CEST} + {2866410000 3600 0 CET} + {2879110800 7200 1 CEST} + {2897859600 3600 0 CET} + {2910560400 7200 1 CEST} + {2929309200 3600 0 CET} + {2942010000 7200 1 CEST} + {2960758800 3600 0 CET} + {2974064400 7200 1 CEST} + {2992208400 3600 0 CET} + {3005514000 7200 1 CEST} + {3023658000 3600 0 CET} + {3036963600 7200 1 CEST} + {3055712400 3600 0 CET} + {3068413200 7200 1 CEST} + {3087162000 3600 0 CET} + {3099862800 7200 1 CEST} + {3118611600 3600 0 CET} + {3131917200 7200 1 CEST} + {3150061200 3600 0 CET} + {3163366800 7200 1 CEST} + {3181510800 3600 0 CET} + {3194816400 7200 1 CEST} + {3212960400 3600 0 CET} + {3226266000 7200 1 CEST} + {3245014800 3600 0 CET} + {3257715600 7200 1 CEST} + {3276464400 3600 0 CET} + {3289165200 7200 1 CEST} + {3307914000 3600 0 CET} + {3321219600 7200 1 CEST} + {3339363600 3600 0 CET} + {3352669200 7200 1 CEST} + {3370813200 3600 0 CET} + {3384118800 7200 1 CEST} + {3402867600 3600 0 CET} + {3415568400 7200 1 CEST} + {3434317200 3600 0 CET} + {3447018000 7200 1 CEST} + {3465766800 3600 0 CET} + {3479072400 7200 1 CEST} + {3497216400 3600 0 CET} + {3510522000 7200 1 CEST} + {3528666000 3600 0 CET} + {3541971600 7200 1 CEST} + {3560115600 3600 0 CET} + {3573421200 7200 1 CEST} + {3592170000 3600 0 CET} + {3604870800 7200 1 CEST} + {3623619600 3600 0 CET} + {3636320400 7200 1 CEST} + {3655069200 3600 0 CET} + {3668374800 7200 1 CEST} + {3686518800 3600 0 CET} + {3699824400 7200 1 CEST} + {3717968400 3600 0 CET} + {3731274000 7200 1 CEST} + {3750022800 3600 0 CET} + {3762723600 7200 1 CEST} + {3781472400 3600 0 CET} + {3794173200 7200 1 CEST} + {3812922000 3600 0 CET} + {3825622800 7200 1 CEST} + {3844371600 3600 0 CET} + {3857677200 7200 1 CEST} + {3875821200 3600 0 CET} + {3889126800 7200 1 CEST} + {3907270800 3600 0 CET} + {3920576400 7200 1 CEST} + {3939325200 3600 0 CET} + {3952026000 7200 1 CEST} + {3970774800 3600 0 CET} + {3983475600 7200 1 CEST} + {4002224400 3600 0 CET} + {4015530000 7200 1 CEST} + {4033674000 3600 0 CET} + {4046979600 7200 1 CEST} + {4065123600 3600 0 CET} + {4078429200 7200 1 CEST} + {4096573200 3600 0 CET} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Conakry b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Conakry new file mode 100644 index 00000000..43737204 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Conakry @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Africa/Abidjan)]} { + LoadTimeZoneFile Africa/Abidjan +} +set TZData(:Africa/Conakry) $TZData(:Africa/Abidjan) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Dakar b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Dakar new file mode 100644 index 00000000..78e800c4 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Dakar @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Africa/Abidjan)]} { + LoadTimeZoneFile Africa/Abidjan +} +set TZData(:Africa/Dakar) $TZData(:Africa/Abidjan) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Dar_es_Salaam b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Dar_es_Salaam new file mode 100644 index 00000000..00e8d4e3 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Dar_es_Salaam @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Africa/Nairobi)]} { + LoadTimeZoneFile Africa/Nairobi +} +set TZData(:Africa/Dar_es_Salaam) $TZData(:Africa/Nairobi) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Djibouti b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Djibouti new file mode 100644 index 00000000..859ea328 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Djibouti @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Africa/Nairobi)]} { + LoadTimeZoneFile Africa/Nairobi +} +set TZData(:Africa/Djibouti) $TZData(:Africa/Nairobi) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Douala b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Douala new file mode 100644 index 00000000..892b16a8 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Douala @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Africa/Lagos)]} { + LoadTimeZoneFile Africa/Lagos +} +set TZData(:Africa/Douala) $TZData(:Africa/Lagos) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/El_Aaiun b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/El_Aaiun new file mode 100644 index 00000000..77e149e5 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/El_Aaiun @@ -0,0 +1,219 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Africa/El_Aaiun) { + {-9223372036854775808 -3168 0 LMT} + {-1136070432 -3600 0 WAT} + {198291600 0 0 WET} + {199756800 3600 1 WEST} + {207702000 0 0 WET} + {231292800 3600 1 WEST} + {244249200 0 0 WET} + {265507200 3600 1 WEST} + {271033200 0 0 WET} + {1212278400 3600 1 WEST} + {1220223600 0 0 WET} + {1243814400 3600 1 WEST} + {1250809200 0 0 WET} + {1272758400 3600 1 WEST} + {1281222000 0 0 WET} + {1301788800 3600 1 WEST} + {1312066800 0 0 WET} + {1335664800 3600 1 WEST} + {1342749600 0 0 WET} + {1345428000 3600 1 WEST} + {1348970400 0 0 WET} + {1367114400 3600 1 WEST} + {1373162400 0 0 WET} + {1376100000 3600 1 WEST} + {1382839200 0 0 WET} + {1396144800 3600 1 WEST} + {1403920800 0 0 WET} + {1406944800 3600 1 WEST} + {1414288800 0 0 WET} + {1427594400 3600 1 WEST} + {1434247200 0 0 WET} + {1437271200 3600 1 WEST} + {1445738400 0 0 WET} + {1459044000 3600 1 WEST} + {1465092000 0 0 WET} + {1468116000 3600 1 WEST} + {1477792800 0 0 WET} + {1490493600 3600 1 WEST} + {1495332000 0 0 WET} + {1498960800 3600 1 WEST} + {1509242400 0 0 WET} + {1521943200 3600 1 WEST} + {1526176800 0 0 WET} + {1529200800 3600 1 WEST} + {1540692000 0 0 WET} + {1553997600 3600 1 WEST} + {1557021600 0 0 WET} + {1560045600 3600 1 WEST} + {1572141600 0 0 WET} + {1585447200 3600 1 WEST} + {1587261600 0 0 WET} + {1590285600 3600 1 WEST} + {1603591200 0 0 WET} + {1616896800 3600 1 WEST} + {1618106400 0 0 WET} + {1621130400 3600 1 WEST} + {1635645600 0 0 WET} + {1651975200 3600 1 WEST} + {1667095200 0 0 WET} + {1682215200 3600 1 WEST} + {1698544800 0 0 WET} + {1713060000 3600 1 WEST} + {1729994400 0 0 WET} + {1743904800 3600 1 WEST} + {1761444000 0 0 WET} + {1774749600 3600 1 WEST} + {1792893600 0 0 WET} + {1806199200 3600 1 WEST} + {1824948000 0 0 WET} + {1837648800 3600 1 WEST} + {1856397600 0 0 WET} + {1869098400 3600 1 WEST} + {1887847200 0 0 WET} + {1901152800 3600 1 WEST} + {1919296800 0 0 WET} + {1932602400 3600 1 WEST} + {1950746400 0 0 WET} + {1964052000 3600 1 WEST} + {1982800800 0 0 WET} + {1995501600 3600 1 WEST} + {2014250400 0 0 WET} + {2026951200 3600 1 WEST} + {2045700000 0 0 WET} + {2058400800 3600 1 WEST} + {2077149600 0 0 WET} + {2090455200 3600 1 WEST} + {2107994400 0 0 WET} + {2108602800 0 0 WET} + {2121904800 3600 1 WEST} + {2138234400 0 0 WET} + {2140052400 0 0 WET} + {2153354400 3600 1 WEST} + {2172103200 0 0 WET} + {2184804000 3600 1 WEST} + {2203552800 0 0 WET} + {2216253600 3600 1 WEST} + {2235002400 0 0 WET} + {2248308000 3600 1 WEST} + {2266452000 0 0 WET} + {2279757600 3600 1 WEST} + {2297901600 0 0 WET} + {2311207200 3600 1 WEST} + {2329351200 0 0 WET} + {2342656800 3600 1 WEST} + {2361405600 0 0 WET} + {2374106400 3600 1 WEST} + {2392855200 0 0 WET} + {2405556000 3600 1 WEST} + {2424304800 0 0 WET} + {2437610400 3600 1 WEST} + {2455754400 0 0 WET} + {2469060000 3600 1 WEST} + {2487204000 0 0 WET} + {2500509600 3600 1 WEST} + {2519258400 0 0 WET} + {2531959200 3600 1 WEST} + {2550708000 0 0 WET} + {2563408800 3600 1 WEST} + {2582157600 0 0 WET} + {2595463200 3600 1 WEST} + {2613607200 0 0 WET} + {2626912800 3600 1 WEST} + {2645056800 0 0 WET} + {2658362400 3600 1 WEST} + {2676506400 0 0 WET} + {2689812000 3600 1 WEST} + {2708560800 0 0 WET} + {2721261600 3600 1 WEST} + {2740010400 0 0 WET} + {2752711200 3600 1 WEST} + {2771460000 0 0 WET} + {2784765600 3600 1 WEST} + {2802909600 0 0 WET} + {2816215200 3600 1 WEST} + {2834359200 0 0 WET} + {2847664800 3600 1 WEST} + {2866413600 0 0 WET} + {2879114400 3600 1 WEST} + {2897863200 0 0 WET} + {2910564000 3600 1 WEST} + {2929312800 0 0 WET} + {2942013600 3600 1 WEST} + {2960762400 0 0 WET} + {2974068000 3600 1 WEST} + {2992212000 0 0 WET} + {3005517600 3600 1 WEST} + {3023661600 0 0 WET} + {3036967200 3600 1 WEST} + {3055716000 0 0 WET} + {3068416800 3600 1 WEST} + {3087165600 0 0 WET} + {3099866400 3600 1 WEST} + {3118615200 0 0 WET} + {3131920800 3600 1 WEST} + {3150064800 0 0 WET} + {3163370400 3600 1 WEST} + {3181514400 0 0 WET} + {3194820000 3600 1 WEST} + {3212964000 0 0 WET} + {3226269600 3600 1 WEST} + {3245018400 0 0 WET} + {3257719200 3600 1 WEST} + {3276468000 0 0 WET} + {3289168800 3600 1 WEST} + {3307917600 0 0 WET} + {3321223200 3600 1 WEST} + {3339367200 0 0 WET} + {3352672800 3600 1 WEST} + {3370816800 0 0 WET} + {3384122400 3600 1 WEST} + {3402871200 0 0 WET} + {3415572000 3600 1 WEST} + {3434320800 0 0 WET} + {3447021600 3600 1 WEST} + {3465770400 0 0 WET} + {3479076000 3600 1 WEST} + {3497220000 0 0 WET} + {3510525600 3600 1 WEST} + {3528669600 0 0 WET} + {3541975200 3600 1 WEST} + {3560119200 0 0 WET} + {3573424800 3600 1 WEST} + {3592173600 0 0 WET} + {3604874400 3600 1 WEST} + {3623623200 0 0 WET} + {3636324000 3600 1 WEST} + {3655072800 0 0 WET} + {3668378400 3600 1 WEST} + {3686522400 0 0 WET} + {3699828000 3600 1 WEST} + {3717972000 0 0 WET} + {3731277600 3600 1 WEST} + {3750026400 0 0 WET} + {3762727200 3600 1 WEST} + {3781476000 0 0 WET} + {3794176800 3600 1 WEST} + {3812925600 0 0 WET} + {3825626400 3600 1 WEST} + {3844375200 0 0 WET} + {3857680800 3600 1 WEST} + {3875824800 0 0 WET} + {3889130400 3600 1 WEST} + {3907274400 0 0 WET} + {3920580000 3600 1 WEST} + {3939328800 0 0 WET} + {3952029600 3600 1 WEST} + {3970778400 0 0 WET} + {3983479200 3600 1 WEST} + {4002228000 0 0 WET} + {4015533600 3600 1 WEST} + {4033677600 0 0 WET} + {4046983200 3600 1 WEST} + {4065127200 0 0 WET} + {4078432800 3600 1 WEST} + {4096576800 0 0 WET} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Freetown b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Freetown new file mode 100644 index 00000000..4a8e2e12 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Freetown @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Africa/Abidjan)]} { + LoadTimeZoneFile Africa/Abidjan +} +set TZData(:Africa/Freetown) $TZData(:Africa/Abidjan) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Gaborone b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Gaborone new file mode 100644 index 00000000..56c0772e --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Gaborone @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Africa/Maputo)]} { + LoadTimeZoneFile Africa/Maputo +} +set TZData(:Africa/Gaborone) $TZData(:Africa/Maputo) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Harare b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Harare new file mode 100644 index 00000000..644be265 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Harare @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Africa/Maputo)]} { + LoadTimeZoneFile Africa/Maputo +} +set TZData(:Africa/Harare) $TZData(:Africa/Maputo) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Johannesburg b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Johannesburg new file mode 100644 index 00000000..b9a8348b --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Johannesburg @@ -0,0 +1,11 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Africa/Johannesburg) { + {-9223372036854775808 6720 0 LMT} + {-2458173120 5400 0 SAST} + {-2109288600 7200 0 SAST} + {-860976000 10800 1 SAST} + {-845254800 7200 0 SAST} + {-829526400 10800 1 SAST} + {-813805200 7200 0 SAST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Juba b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Juba new file mode 100644 index 00000000..40551f29 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Juba @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Africa/Khartoum)]} { + LoadTimeZoneFile Africa/Khartoum +} +set TZData(:Africa/Juba) $TZData(:Africa/Khartoum) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Kampala b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Kampala new file mode 100644 index 00000000..1fbaffc6 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Kampala @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Africa/Nairobi)]} { + LoadTimeZoneFile Africa/Nairobi +} +set TZData(:Africa/Kampala) $TZData(:Africa/Nairobi) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Khartoum b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Khartoum new file mode 100644 index 00000000..dfcac823 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Khartoum @@ -0,0 +1,39 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Africa/Khartoum) { + {-9223372036854775808 7808 0 LMT} + {-1230775808 7200 0 CAT} + {10360800 10800 1 CAST} + {24786000 7200 0 CAT} + {41810400 10800 1 CAST} + {56322000 7200 0 CAT} + {73432800 10800 1 CAST} + {87944400 7200 0 CAT} + {104882400 10800 1 CAST} + {119480400 7200 0 CAT} + {136332000 10800 1 CAST} + {151016400 7200 0 CAT} + {167781600 10800 1 CAST} + {182552400 7200 0 CAT} + {199231200 10800 1 CAST} + {214174800 7200 0 CAT} + {230680800 10800 1 CAST} + {245710800 7200 0 CAT} + {262735200 10800 1 CAST} + {277246800 7200 0 CAT} + {294184800 10800 1 CAST} + {308782800 7200 0 CAT} + {325634400 10800 1 CAST} + {340405200 7200 0 CAT} + {357084000 10800 1 CAST} + {371941200 7200 0 CAT} + {388533600 10800 1 CAST} + {403477200 7200 0 CAT} + {419983200 10800 1 CAST} + {435013200 7200 0 CAT} + {452037600 10800 1 CAST} + {466635600 7200 0 CAT} + {483487200 10800 1 CAST} + {498171600 7200 0 CAT} + {947930400 10800 0 EAT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Kigali b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Kigali new file mode 100644 index 00000000..192e0e8f --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Kigali @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Africa/Maputo)]} { + LoadTimeZoneFile Africa/Maputo +} +set TZData(:Africa/Kigali) $TZData(:Africa/Maputo) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Kinshasa b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Kinshasa new file mode 100644 index 00000000..04dc62ed --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Kinshasa @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Africa/Lagos)]} { + LoadTimeZoneFile Africa/Lagos +} +set TZData(:Africa/Kinshasa) $TZData(:Africa/Lagos) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Lagos b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Lagos new file mode 100644 index 00000000..079572f4 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Lagos @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Africa/Lagos) { + {-9223372036854775808 816 0 LMT} + {-1588464816 3600 0 WAT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Libreville b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Libreville new file mode 100644 index 00000000..ba1f686d --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Libreville @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Africa/Lagos)]} { + LoadTimeZoneFile Africa/Lagos +} +set TZData(:Africa/Libreville) $TZData(:Africa/Lagos) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Lome b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Lome new file mode 100644 index 00000000..9adecc7c --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Lome @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Africa/Abidjan)]} { + LoadTimeZoneFile Africa/Abidjan +} +set TZData(:Africa/Lome) $TZData(:Africa/Abidjan) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Luanda b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Luanda new file mode 100644 index 00000000..8dcd1072 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Luanda @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Africa/Lagos)]} { + LoadTimeZoneFile Africa/Lagos +} +set TZData(:Africa/Luanda) $TZData(:Africa/Lagos) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Lubumbashi b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Lubumbashi new file mode 100644 index 00000000..7da101a6 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Lubumbashi @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Africa/Maputo)]} { + LoadTimeZoneFile Africa/Maputo +} +set TZData(:Africa/Lubumbashi) $TZData(:Africa/Maputo) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Lusaka b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Lusaka new file mode 100644 index 00000000..bcf519d6 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Lusaka @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Africa/Maputo)]} { + LoadTimeZoneFile Africa/Maputo +} +set TZData(:Africa/Lusaka) $TZData(:Africa/Maputo) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Malabo b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Malabo new file mode 100644 index 00000000..7dcee399 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Malabo @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Africa/Lagos)]} { + LoadTimeZoneFile Africa/Lagos +} +set TZData(:Africa/Malabo) $TZData(:Africa/Lagos) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Maputo b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Maputo new file mode 100644 index 00000000..6ee208c1 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Maputo @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Africa/Maputo) { + {-9223372036854775808 7820 0 LMT} + {-2109291020 7200 0 CAT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Maseru b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Maseru new file mode 100644 index 00000000..665f15d5 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Maseru @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Africa/Johannesburg)]} { + LoadTimeZoneFile Africa/Johannesburg +} +set TZData(:Africa/Maseru) $TZData(:Africa/Johannesburg) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Mbabane b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Mbabane new file mode 100644 index 00000000..0edb5906 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Mbabane @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Africa/Johannesburg)]} { + LoadTimeZoneFile Africa/Johannesburg +} +set TZData(:Africa/Mbabane) $TZData(:Africa/Johannesburg) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Mogadishu b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Mogadishu new file mode 100644 index 00000000..42206551 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Mogadishu @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Africa/Nairobi)]} { + LoadTimeZoneFile Africa/Nairobi +} +set TZData(:Africa/Mogadishu) $TZData(:Africa/Nairobi) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Monrovia b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Monrovia new file mode 100644 index 00000000..1cfff58b --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Monrovia @@ -0,0 +1,8 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Africa/Monrovia) { + {-9223372036854775808 -2588 0 LMT} + {-2776979812 -2588 0 MMT} + {-1604359012 -2670 0 LRT} + {73529070 0 0 GMT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Nairobi b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Nairobi new file mode 100644 index 00000000..68460698 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Nairobi @@ -0,0 +1,9 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Africa/Nairobi) { + {-9223372036854775808 8836 0 LMT} + {-1309746436 10800 0 EAT} + {-1262314800 9000 0 BEAT} + {-946780200 9900 0 BEAUT} + {-315629100 10800 0 EAT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Ndjamena b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Ndjamena new file mode 100644 index 00000000..af4daaa0 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Ndjamena @@ -0,0 +1,8 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Africa/Ndjamena) { + {-9223372036854775808 3612 0 LMT} + {-1830387612 3600 0 WAT} + {308703600 7200 1 WAST} + {321314400 3600 0 WAT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Niamey b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Niamey new file mode 100644 index 00000000..278571d9 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Niamey @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Africa/Lagos)]} { + LoadTimeZoneFile Africa/Lagos +} +set TZData(:Africa/Niamey) $TZData(:Africa/Lagos) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Nouakchott b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Nouakchott new file mode 100644 index 00000000..d33b6bc0 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Nouakchott @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Africa/Abidjan)]} { + LoadTimeZoneFile Africa/Abidjan +} +set TZData(:Africa/Nouakchott) $TZData(:Africa/Abidjan) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Ouagadougou b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Ouagadougou new file mode 100644 index 00000000..8178c82d --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Ouagadougou @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Africa/Abidjan)]} { + LoadTimeZoneFile Africa/Abidjan +} +set TZData(:Africa/Ouagadougou) $TZData(:Africa/Abidjan) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Porto-Novo b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Porto-Novo new file mode 100644 index 00000000..3fa2b51a --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Porto-Novo @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Africa/Lagos)]} { + LoadTimeZoneFile Africa/Lagos +} +set TZData(:Africa/Porto-Novo) $TZData(:Africa/Lagos) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Sao_Tome b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Sao_Tome new file mode 100644 index 00000000..078591d7 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Sao_Tome @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Africa/Abidjan)]} { + LoadTimeZoneFile Africa/Abidjan +} +set TZData(:Africa/Sao_Tome) $TZData(:Africa/Abidjan) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Timbuktu b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Timbuktu new file mode 100644 index 00000000..9852d7ab --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Timbuktu @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Africa/Abidjan)]} { + LoadTimeZoneFile Africa/Abidjan +} +set TZData(:Africa/Timbuktu) $TZData(:Africa/Abidjan) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Tripoli b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Tripoli new file mode 100644 index 00000000..0e72df4f --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Tripoli @@ -0,0 +1,34 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Africa/Tripoli) { + {-9223372036854775808 3164 0 LMT} + {-1577926364 3600 0 CET} + {-574902000 7200 1 CEST} + {-512175600 7200 1 CEST} + {-449888400 7200 1 CEST} + {-347158800 7200 0 EET} + {378684000 3600 0 CET} + {386463600 7200 1 CEST} + {402271200 3600 0 CET} + {417999600 7200 1 CEST} + {433807200 3600 0 CET} + {449622000 7200 1 CEST} + {465429600 3600 0 CET} + {481590000 7200 1 CEST} + {496965600 3600 0 CET} + {512953200 7200 1 CEST} + {528674400 3600 0 CET} + {544230000 7200 1 CEST} + {560037600 3600 0 CET} + {575852400 7200 1 CEST} + {591660000 3600 0 CET} + {607388400 7200 1 CEST} + {623196000 3600 0 CET} + {641775600 7200 0 EET} + {844034400 3600 0 CET} + {860108400 7200 1 CEST} + {875919600 7200 0 EET} + {1352505600 3600 0 CET} + {1364515200 7200 1 CEST} + {1382662800 7200 0 EET} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Tunis b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Tunis new file mode 100644 index 00000000..0c1db4d0 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Tunis @@ -0,0 +1,39 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Africa/Tunis) { + {-9223372036854775808 2444 0 LMT} + {-2797202444 561 0 PMT} + {-1855958961 3600 0 CET} + {-969242400 7200 1 CEST} + {-950493600 3600 0 CET} + {-941940000 7200 1 CEST} + {-891136800 3600 0 CET} + {-877827600 7200 1 CEST} + {-857257200 3600 0 CET} + {-844556400 7200 1 CEST} + {-842918400 3600 0 CET} + {-842223600 7200 1 CEST} + {-828230400 3600 0 CET} + {-812502000 7200 1 CEST} + {-796269600 3600 0 CET} + {-781052400 7200 1 CEST} + {-766634400 3600 0 CET} + {231202800 7200 1 CEST} + {243903600 3600 0 CET} + {262825200 7200 1 CEST} + {276044400 3600 0 CET} + {581122800 7200 1 CEST} + {591145200 3600 0 CET} + {606870000 7200 1 CEST} + {622594800 3600 0 CET} + {641516400 7200 1 CEST} + {654649200 3600 0 CET} + {1114902000 7200 1 CEST} + {1128038400 3600 0 CET} + {1143334800 7200 1 CEST} + {1162083600 3600 0 CET} + {1174784400 7200 1 CEST} + {1193533200 3600 0 CET} + {1206838800 7200 1 CEST} + {1224982800 3600 0 CET} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Windhoek b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Windhoek new file mode 100644 index 00000000..a655f2e4 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Africa/Windhoek @@ -0,0 +1,222 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Africa/Windhoek) { + {-9223372036854775808 4104 0 LMT} + {-2458170504 5400 0 SWAT} + {-2109288600 7200 0 SAST} + {-860976000 10800 1 SAST} + {-845254800 7200 0 SAST} + {637970400 7200 0 CAT} + {765324000 3600 0 WAT} + {778640400 7200 1 WAST} + {796780800 3600 0 WAT} + {810090000 7200 1 WAST} + {828835200 3600 0 WAT} + {841539600 7200 1 WAST} + {860284800 3600 0 WAT} + {873594000 7200 1 WAST} + {891734400 3600 0 WAT} + {905043600 7200 1 WAST} + {923184000 3600 0 WAT} + {936493200 7200 1 WAST} + {954633600 3600 0 WAT} + {967942800 7200 1 WAST} + {986083200 3600 0 WAT} + {999392400 7200 1 WAST} + {1018137600 3600 0 WAT} + {1030842000 7200 1 WAST} + {1049587200 3600 0 WAT} + {1062896400 7200 1 WAST} + {1081036800 3600 0 WAT} + {1094346000 7200 1 WAST} + {1112486400 3600 0 WAT} + {1125795600 7200 1 WAST} + {1143936000 3600 0 WAT} + {1157245200 7200 1 WAST} + {1175385600 3600 0 WAT} + {1188694800 7200 1 WAST} + {1207440000 3600 0 WAT} + {1220749200 7200 1 WAST} + {1238889600 3600 0 WAT} + {1252198800 7200 1 WAST} + {1270339200 3600 0 WAT} + {1283648400 7200 1 WAST} + {1301788800 3600 0 WAT} + {1315098000 7200 1 WAST} + {1333238400 3600 0 WAT} + {1346547600 7200 1 WAST} + {1365292800 3600 0 WAT} + {1377997200 7200 1 WAST} + {1396742400 3600 0 WAT} + {1410051600 7200 1 WAST} + {1428192000 3600 0 WAT} + {1441501200 7200 1 WAST} + {1459641600 3600 0 WAT} + {1472950800 7200 1 WAST} + {1491091200 3600 0 WAT} + {1504400400 7200 1 WAST} + {1522540800 3600 0 WAT} + {1535850000 7200 1 WAST} + {1554595200 3600 0 WAT} + {1567299600 7200 1 WAST} + {1586044800 3600 0 WAT} + {1599354000 7200 1 WAST} + {1617494400 3600 0 WAT} + {1630803600 7200 1 WAST} + {1648944000 3600 0 WAT} + {1662253200 7200 1 WAST} + {1680393600 3600 0 WAT} + {1693702800 7200 1 WAST} + {1712448000 3600 0 WAT} + {1725152400 7200 1 WAST} + {1743897600 3600 0 WAT} + {1757206800 7200 1 WAST} + {1775347200 3600 0 WAT} + {1788656400 7200 1 WAST} + {1806796800 3600 0 WAT} + {1820106000 7200 1 WAST} + {1838246400 3600 0 WAT} + {1851555600 7200 1 WAST} + {1869696000 3600 0 WAT} + {1883005200 7200 1 WAST} + {1901750400 3600 0 WAT} + {1914454800 7200 1 WAST} + {1933200000 3600 0 WAT} + {1946509200 7200 1 WAST} + {1964649600 3600 0 WAT} + {1977958800 7200 1 WAST} + {1996099200 3600 0 WAT} + {2009408400 7200 1 WAST} + {2027548800 3600 0 WAT} + {2040858000 7200 1 WAST} + {2058998400 3600 0 WAT} + {2072307600 7200 1 WAST} + {2091052800 3600 0 WAT} + {2104362000 7200 1 WAST} + {2122502400 3600 0 WAT} + {2135811600 7200 1 WAST} + {2153952000 3600 0 WAT} + {2167261200 7200 1 WAST} + {2185401600 3600 0 WAT} + {2198710800 7200 1 WAST} + {2216851200 3600 0 WAT} + {2230160400 7200 1 WAST} + {2248905600 3600 0 WAT} + {2261610000 7200 1 WAST} + {2280355200 3600 0 WAT} + {2293664400 7200 1 WAST} + {2311804800 3600 0 WAT} + {2325114000 7200 1 WAST} + {2343254400 3600 0 WAT} + {2356563600 7200 1 WAST} + {2374704000 3600 0 WAT} + {2388013200 7200 1 WAST} + {2406153600 3600 0 WAT} + {2419462800 7200 1 WAST} + {2438208000 3600 0 WAT} + {2450912400 7200 1 WAST} + {2469657600 3600 0 WAT} + {2482966800 7200 1 WAST} + {2501107200 3600 0 WAT} + {2514416400 7200 1 WAST} + {2532556800 3600 0 WAT} + {2545866000 7200 1 WAST} + {2564006400 3600 0 WAT} + {2577315600 7200 1 WAST} + {2596060800 3600 0 WAT} + {2608765200 7200 1 WAST} + {2627510400 3600 0 WAT} + {2640819600 7200 1 WAST} + {2658960000 3600 0 WAT} + {2672269200 7200 1 WAST} + {2690409600 3600 0 WAT} + {2703718800 7200 1 WAST} + {2721859200 3600 0 WAT} + {2735168400 7200 1 WAST} + {2753308800 3600 0 WAT} + {2766618000 7200 1 WAST} + {2785363200 3600 0 WAT} + {2798067600 7200 1 WAST} + {2816812800 3600 0 WAT} + {2830122000 7200 1 WAST} + {2848262400 3600 0 WAT} + {2861571600 7200 1 WAST} + {2879712000 3600 0 WAT} + {2893021200 7200 1 WAST} + {2911161600 3600 0 WAT} + {2924470800 7200 1 WAST} + {2942611200 3600 0 WAT} + {2955920400 7200 1 WAST} + {2974665600 3600 0 WAT} + {2987974800 7200 1 WAST} + {3006115200 3600 0 WAT} + {3019424400 7200 1 WAST} + {3037564800 3600 0 WAT} + {3050874000 7200 1 WAST} + {3069014400 3600 0 WAT} + {3082323600 7200 1 WAST} + {3100464000 3600 0 WAT} + {3113773200 7200 1 WAST} + {3132518400 3600 0 WAT} + {3145222800 7200 1 WAST} + {3163968000 3600 0 WAT} + {3177277200 7200 1 WAST} + {3195417600 3600 0 WAT} + {3208726800 7200 1 WAST} + {3226867200 3600 0 WAT} + {3240176400 7200 1 WAST} + {3258316800 3600 0 WAT} + {3271626000 7200 1 WAST} + {3289766400 3600 0 WAT} + {3303075600 7200 1 WAST} + {3321820800 3600 0 WAT} + {3334525200 7200 1 WAST} + {3353270400 3600 0 WAT} + {3366579600 7200 1 WAST} + {3384720000 3600 0 WAT} + {3398029200 7200 1 WAST} + {3416169600 3600 0 WAT} + {3429478800 7200 1 WAST} + {3447619200 3600 0 WAT} + {3460928400 7200 1 WAST} + {3479673600 3600 0 WAT} + {3492378000 7200 1 WAST} + {3511123200 3600 0 WAT} + {3524432400 7200 1 WAST} + {3542572800 3600 0 WAT} + {3555882000 7200 1 WAST} + {3574022400 3600 0 WAT} + {3587331600 7200 1 WAST} + {3605472000 3600 0 WAT} + {3618781200 7200 1 WAST} + {3636921600 3600 0 WAT} + {3650230800 7200 1 WAST} + {3668976000 3600 0 WAT} + {3681680400 7200 1 WAST} + {3700425600 3600 0 WAT} + {3713734800 7200 1 WAST} + {3731875200 3600 0 WAT} + {3745184400 7200 1 WAST} + {3763324800 3600 0 WAT} + {3776634000 7200 1 WAST} + {3794774400 3600 0 WAT} + {3808083600 7200 1 WAST} + {3826224000 3600 0 WAT} + {3839533200 7200 1 WAST} + {3858278400 3600 0 WAT} + {3871587600 7200 1 WAST} + {3889728000 3600 0 WAT} + {3903037200 7200 1 WAST} + {3921177600 3600 0 WAT} + {3934486800 7200 1 WAST} + {3952627200 3600 0 WAT} + {3965936400 7200 1 WAST} + {3984076800 3600 0 WAT} + {3997386000 7200 1 WAST} + {4016131200 3600 0 WAT} + {4028835600 7200 1 WAST} + {4047580800 3600 0 WAT} + {4060890000 7200 1 WAST} + {4079030400 3600 0 WAT} + {4092339600 7200 1 WAST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Adak b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Adak new file mode 100644 index 00000000..bd5d5ab4 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Adak @@ -0,0 +1,276 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Adak) { + {-9223372036854775808 44001 0 LMT} + {-3225356001 -42398 0 LMT} + {-2188944802 -39600 0 NST} + {-883573200 -39600 0 NST} + {-880196400 -36000 1 NWT} + {-769395600 -36000 1 NPT} + {-765374400 -39600 0 NST} + {-757342800 -39600 0 NST} + {-86878800 -39600 0 BST} + {-31496400 -39600 0 BST} + {-21466800 -36000 1 BDT} + {-5745600 -39600 0 BST} + {9982800 -36000 1 BDT} + {25704000 -39600 0 BST} + {41432400 -36000 1 BDT} + {57758400 -39600 0 BST} + {73486800 -36000 1 BDT} + {89208000 -39600 0 BST} + {104936400 -36000 1 BDT} + {120657600 -39600 0 BST} + {126709200 -36000 1 BDT} + {152107200 -39600 0 BST} + {162392400 -36000 1 BDT} + {183556800 -39600 0 BST} + {199285200 -36000 1 BDT} + {215611200 -39600 0 BST} + {230734800 -36000 1 BDT} + {247060800 -39600 0 BST} + {262789200 -36000 1 BDT} + {278510400 -39600 0 BST} + {294238800 -36000 1 BDT} + {309960000 -39600 0 BST} + {325688400 -36000 1 BDT} + {341409600 -39600 0 BST} + {357138000 -36000 1 BDT} + {372859200 -39600 0 BST} + {388587600 -36000 1 BDT} + {404913600 -39600 0 BST} + {420037200 -36000 1 BDT} + {439034400 -36000 0 HST} + {452088000 -32400 1 HDT} + {467809200 -36000 0 HST} + {483537600 -32400 1 HDT} + {499258800 -36000 0 HST} + {514987200 -32400 1 HDT} + {530708400 -36000 0 HST} + {544622400 -32400 1 HDT} + {562158000 -36000 0 HST} + {576072000 -32400 1 HDT} + {594212400 -36000 0 HST} + {607521600 -32400 1 HDT} + {625662000 -36000 0 HST} + {638971200 -32400 1 HDT} + {657111600 -36000 0 HST} + {671025600 -32400 1 HDT} + {688561200 -36000 0 HST} + {702475200 -32400 1 HDT} + {720010800 -36000 0 HST} + {733924800 -32400 1 HDT} + {752065200 -36000 0 HST} + {765374400 -32400 1 HDT} + {783514800 -36000 0 HST} + {796824000 -32400 1 HDT} + {814964400 -36000 0 HST} + {828878400 -32400 1 HDT} + {846414000 -36000 0 HST} + {860328000 -32400 1 HDT} + {877863600 -36000 0 HST} + {891777600 -32400 1 HDT} + {909313200 -36000 0 HST} + {923227200 -32400 1 HDT} + {941367600 -36000 0 HST} + {954676800 -32400 1 HDT} + {972817200 -36000 0 HST} + {986126400 -32400 1 HDT} + {1004266800 -36000 0 HST} + {1018180800 -32400 1 HDT} + {1035716400 -36000 0 HST} + {1049630400 -32400 1 HDT} + {1067166000 -36000 0 HST} + {1081080000 -32400 1 HDT} + {1099220400 -36000 0 HST} + {1112529600 -32400 1 HDT} + {1130670000 -36000 0 HST} + {1143979200 -32400 1 HDT} + {1162119600 -36000 0 HST} + {1173614400 -32400 1 HDT} + {1194174000 -36000 0 HST} + {1205064000 -32400 1 HDT} + {1225623600 -36000 0 HST} + {1236513600 -32400 1 HDT} + {1257073200 -36000 0 HST} + {1268568000 -32400 1 HDT} + {1289127600 -36000 0 HST} + {1300017600 -32400 1 HDT} + {1320577200 -36000 0 HST} + {1331467200 -32400 1 HDT} + {1352026800 -36000 0 HST} + {1362916800 -32400 1 HDT} + {1383476400 -36000 0 HST} + {1394366400 -32400 1 HDT} + {1414926000 -36000 0 HST} + {1425816000 -32400 1 HDT} + {1446375600 -36000 0 HST} + {1457870400 -32400 1 HDT} + {1478430000 -36000 0 HST} + {1489320000 -32400 1 HDT} + {1509879600 -36000 0 HST} + {1520769600 -32400 1 HDT} + {1541329200 -36000 0 HST} + {1552219200 -32400 1 HDT} + {1572778800 -36000 0 HST} + {1583668800 -32400 1 HDT} + {1604228400 -36000 0 HST} + {1615723200 -32400 1 HDT} + {1636282800 -36000 0 HST} + {1647172800 -32400 1 HDT} + {1667732400 -36000 0 HST} + {1678622400 -32400 1 HDT} + {1699182000 -36000 0 HST} + {1710072000 -32400 1 HDT} + {1730631600 -36000 0 HST} + {1741521600 -32400 1 HDT} + {1762081200 -36000 0 HST} + {1772971200 -32400 1 HDT} + {1793530800 -36000 0 HST} + {1805025600 -32400 1 HDT} + {1825585200 -36000 0 HST} + {1836475200 -32400 1 HDT} + {1857034800 -36000 0 HST} + {1867924800 -32400 1 HDT} + {1888484400 -36000 0 HST} + {1899374400 -32400 1 HDT} + {1919934000 -36000 0 HST} + {1930824000 -32400 1 HDT} + {1951383600 -36000 0 HST} + {1962878400 -32400 1 HDT} + {1983438000 -36000 0 HST} + {1994328000 -32400 1 HDT} + {2014887600 -36000 0 HST} + {2025777600 -32400 1 HDT} + {2046337200 -36000 0 HST} + {2057227200 -32400 1 HDT} + {2077786800 -36000 0 HST} + {2088676800 -32400 1 HDT} + {2109236400 -36000 0 HST} + {2120126400 -32400 1 HDT} + {2140686000 -36000 0 HST} + {2152180800 -32400 1 HDT} + {2172740400 -36000 0 HST} + {2183630400 -32400 1 HDT} + {2204190000 -36000 0 HST} + {2215080000 -32400 1 HDT} + {2235639600 -36000 0 HST} + {2246529600 -32400 1 HDT} + {2267089200 -36000 0 HST} + {2277979200 -32400 1 HDT} + {2298538800 -36000 0 HST} + {2309428800 -32400 1 HDT} + {2329988400 -36000 0 HST} + {2341483200 -32400 1 HDT} + {2362042800 -36000 0 HST} + {2372932800 -32400 1 HDT} + {2393492400 -36000 0 HST} + {2404382400 -32400 1 HDT} + {2424942000 -36000 0 HST} + {2435832000 -32400 1 HDT} + {2456391600 -36000 0 HST} + {2467281600 -32400 1 HDT} + {2487841200 -36000 0 HST} + {2499336000 -32400 1 HDT} + {2519895600 -36000 0 HST} + {2530785600 -32400 1 HDT} + {2551345200 -36000 0 HST} + {2562235200 -32400 1 HDT} + {2582794800 -36000 0 HST} + {2593684800 -32400 1 HDT} + {2614244400 -36000 0 HST} + {2625134400 -32400 1 HDT} + {2645694000 -36000 0 HST} + {2656584000 -32400 1 HDT} + {2677143600 -36000 0 HST} + {2688638400 -32400 1 HDT} + {2709198000 -36000 0 HST} + {2720088000 -32400 1 HDT} + {2740647600 -36000 0 HST} + {2751537600 -32400 1 HDT} + {2772097200 -36000 0 HST} + {2782987200 -32400 1 HDT} + {2803546800 -36000 0 HST} + {2814436800 -32400 1 HDT} + {2834996400 -36000 0 HST} + {2846491200 -32400 1 HDT} + {2867050800 -36000 0 HST} + {2877940800 -32400 1 HDT} + {2898500400 -36000 0 HST} + {2909390400 -32400 1 HDT} + {2929950000 -36000 0 HST} + {2940840000 -32400 1 HDT} + {2961399600 -36000 0 HST} + {2972289600 -32400 1 HDT} + {2992849200 -36000 0 HST} + {3003739200 -32400 1 HDT} + {3024298800 -36000 0 HST} + {3035793600 -32400 1 HDT} + {3056353200 -36000 0 HST} + {3067243200 -32400 1 HDT} + {3087802800 -36000 0 HST} + {3098692800 -32400 1 HDT} + {3119252400 -36000 0 HST} + {3130142400 -32400 1 HDT} + {3150702000 -36000 0 HST} + {3161592000 -32400 1 HDT} + {3182151600 -36000 0 HST} + {3193041600 -32400 1 HDT} + {3213601200 -36000 0 HST} + {3225096000 -32400 1 HDT} + {3245655600 -36000 0 HST} + {3256545600 -32400 1 HDT} + {3277105200 -36000 0 HST} + {3287995200 -32400 1 HDT} + {3308554800 -36000 0 HST} + {3319444800 -32400 1 HDT} + {3340004400 -36000 0 HST} + {3350894400 -32400 1 HDT} + {3371454000 -36000 0 HST} + {3382948800 -32400 1 HDT} + {3403508400 -36000 0 HST} + {3414398400 -32400 1 HDT} + {3434958000 -36000 0 HST} + {3445848000 -32400 1 HDT} + {3466407600 -36000 0 HST} + {3477297600 -32400 1 HDT} + {3497857200 -36000 0 HST} + {3508747200 -32400 1 HDT} + {3529306800 -36000 0 HST} + {3540196800 -32400 1 HDT} + {3560756400 -36000 0 HST} + {3572251200 -32400 1 HDT} + {3592810800 -36000 0 HST} + {3603700800 -32400 1 HDT} + {3624260400 -36000 0 HST} + {3635150400 -32400 1 HDT} + {3655710000 -36000 0 HST} + {3666600000 -32400 1 HDT} + {3687159600 -36000 0 HST} + {3698049600 -32400 1 HDT} + {3718609200 -36000 0 HST} + {3730104000 -32400 1 HDT} + {3750663600 -36000 0 HST} + {3761553600 -32400 1 HDT} + {3782113200 -36000 0 HST} + {3793003200 -32400 1 HDT} + {3813562800 -36000 0 HST} + {3824452800 -32400 1 HDT} + {3845012400 -36000 0 HST} + {3855902400 -32400 1 HDT} + {3876462000 -36000 0 HST} + {3887352000 -32400 1 HDT} + {3907911600 -36000 0 HST} + {3919406400 -32400 1 HDT} + {3939966000 -36000 0 HST} + {3950856000 -32400 1 HDT} + {3971415600 -36000 0 HST} + {3982305600 -32400 1 HDT} + {4002865200 -36000 0 HST} + {4013755200 -32400 1 HDT} + {4034314800 -36000 0 HST} + {4045204800 -32400 1 HDT} + {4065764400 -36000 0 HST} + {4076654400 -32400 1 HDT} + {4097214000 -36000 0 HST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Anchorage b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Anchorage new file mode 100644 index 00000000..e02dd016 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Anchorage @@ -0,0 +1,276 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Anchorage) { + {-9223372036854775808 50424 0 LMT} + {-3225362424 -35976 0 LMT} + {-2188951224 -36000 0 CAT} + {-883576800 -36000 0 CAWT} + {-880200000 -32400 1 CAWT} + {-769395600 -32400 0 CAPT} + {-765378000 -36000 0 CAPT} + {-757346400 -36000 0 CAT} + {-86882400 -36000 0 AHST} + {-31500000 -36000 0 AHST} + {-21470400 -32400 1 AHDT} + {-5749200 -36000 0 AHST} + {9979200 -32400 1 AHDT} + {25700400 -36000 0 AHST} + {41428800 -32400 1 AHDT} + {57754800 -36000 0 AHST} + {73483200 -32400 1 AHDT} + {89204400 -36000 0 AHST} + {104932800 -32400 1 AHDT} + {120654000 -36000 0 AHST} + {126705600 -32400 1 AHDT} + {152103600 -36000 0 AHST} + {162388800 -32400 1 AHDT} + {183553200 -36000 0 AHST} + {199281600 -32400 1 AHDT} + {215607600 -36000 0 AHST} + {230731200 -32400 1 AHDT} + {247057200 -36000 0 AHST} + {262785600 -32400 1 AHDT} + {278506800 -36000 0 AHST} + {294235200 -32400 1 AHDT} + {309956400 -36000 0 AHST} + {325684800 -32400 1 AHDT} + {341406000 -36000 0 AHST} + {357134400 -32400 1 AHDT} + {372855600 -36000 0 AHST} + {388584000 -32400 1 AHDT} + {404910000 -36000 0 AHST} + {420033600 -32400 1 AHDT} + {439030800 -32400 0 AKST} + {452084400 -28800 1 AKDT} + {467805600 -32400 0 AKST} + {483534000 -28800 1 AKDT} + {499255200 -32400 0 AKST} + {514983600 -28800 1 AKDT} + {530704800 -32400 0 AKST} + {544618800 -28800 1 AKDT} + {562154400 -32400 0 AKST} + {576068400 -28800 1 AKDT} + {594208800 -32400 0 AKST} + {607518000 -28800 1 AKDT} + {625658400 -32400 0 AKST} + {638967600 -28800 1 AKDT} + {657108000 -32400 0 AKST} + {671022000 -28800 1 AKDT} + {688557600 -32400 0 AKST} + {702471600 -28800 1 AKDT} + {720007200 -32400 0 AKST} + {733921200 -28800 1 AKDT} + {752061600 -32400 0 AKST} + {765370800 -28800 1 AKDT} + {783511200 -32400 0 AKST} + {796820400 -28800 1 AKDT} + {814960800 -32400 0 AKST} + {828874800 -28800 1 AKDT} + {846410400 -32400 0 AKST} + {860324400 -28800 1 AKDT} + {877860000 -32400 0 AKST} + {891774000 -28800 1 AKDT} + {909309600 -32400 0 AKST} + {923223600 -28800 1 AKDT} + {941364000 -32400 0 AKST} + {954673200 -28800 1 AKDT} + {972813600 -32400 0 AKST} + {986122800 -28800 1 AKDT} + {1004263200 -32400 0 AKST} + {1018177200 -28800 1 AKDT} + {1035712800 -32400 0 AKST} + {1049626800 -28800 1 AKDT} + {1067162400 -32400 0 AKST} + {1081076400 -28800 1 AKDT} + {1099216800 -32400 0 AKST} + {1112526000 -28800 1 AKDT} + {1130666400 -32400 0 AKST} + {1143975600 -28800 1 AKDT} + {1162116000 -32400 0 AKST} + {1173610800 -28800 1 AKDT} + {1194170400 -32400 0 AKST} + {1205060400 -28800 1 AKDT} + {1225620000 -32400 0 AKST} + {1236510000 -28800 1 AKDT} + {1257069600 -32400 0 AKST} + {1268564400 -28800 1 AKDT} + {1289124000 -32400 0 AKST} + {1300014000 -28800 1 AKDT} + {1320573600 -32400 0 AKST} + {1331463600 -28800 1 AKDT} + {1352023200 -32400 0 AKST} + {1362913200 -28800 1 AKDT} + {1383472800 -32400 0 AKST} + {1394362800 -28800 1 AKDT} + {1414922400 -32400 0 AKST} + {1425812400 -28800 1 AKDT} + {1446372000 -32400 0 AKST} + {1457866800 -28800 1 AKDT} + {1478426400 -32400 0 AKST} + {1489316400 -28800 1 AKDT} + {1509876000 -32400 0 AKST} + {1520766000 -28800 1 AKDT} + {1541325600 -32400 0 AKST} + {1552215600 -28800 1 AKDT} + {1572775200 -32400 0 AKST} + {1583665200 -28800 1 AKDT} + {1604224800 -32400 0 AKST} + {1615719600 -28800 1 AKDT} + {1636279200 -32400 0 AKST} + {1647169200 -28800 1 AKDT} + {1667728800 -32400 0 AKST} + {1678618800 -28800 1 AKDT} + {1699178400 -32400 0 AKST} + {1710068400 -28800 1 AKDT} + {1730628000 -32400 0 AKST} + {1741518000 -28800 1 AKDT} + {1762077600 -32400 0 AKST} + {1772967600 -28800 1 AKDT} + {1793527200 -32400 0 AKST} + {1805022000 -28800 1 AKDT} + {1825581600 -32400 0 AKST} + {1836471600 -28800 1 AKDT} + {1857031200 -32400 0 AKST} + {1867921200 -28800 1 AKDT} + {1888480800 -32400 0 AKST} + {1899370800 -28800 1 AKDT} + {1919930400 -32400 0 AKST} + {1930820400 -28800 1 AKDT} + {1951380000 -32400 0 AKST} + {1962874800 -28800 1 AKDT} + {1983434400 -32400 0 AKST} + {1994324400 -28800 1 AKDT} + {2014884000 -32400 0 AKST} + {2025774000 -28800 1 AKDT} + {2046333600 -32400 0 AKST} + {2057223600 -28800 1 AKDT} + {2077783200 -32400 0 AKST} + {2088673200 -28800 1 AKDT} + {2109232800 -32400 0 AKST} + {2120122800 -28800 1 AKDT} + {2140682400 -32400 0 AKST} + {2152177200 -28800 1 AKDT} + {2172736800 -32400 0 AKST} + {2183626800 -28800 1 AKDT} + {2204186400 -32400 0 AKST} + {2215076400 -28800 1 AKDT} + {2235636000 -32400 0 AKST} + {2246526000 -28800 1 AKDT} + {2267085600 -32400 0 AKST} + {2277975600 -28800 1 AKDT} + {2298535200 -32400 0 AKST} + {2309425200 -28800 1 AKDT} + {2329984800 -32400 0 AKST} + {2341479600 -28800 1 AKDT} + {2362039200 -32400 0 AKST} + {2372929200 -28800 1 AKDT} + {2393488800 -32400 0 AKST} + {2404378800 -28800 1 AKDT} + {2424938400 -32400 0 AKST} + {2435828400 -28800 1 AKDT} + {2456388000 -32400 0 AKST} + {2467278000 -28800 1 AKDT} + {2487837600 -32400 0 AKST} + {2499332400 -28800 1 AKDT} + {2519892000 -32400 0 AKST} + {2530782000 -28800 1 AKDT} + {2551341600 -32400 0 AKST} + {2562231600 -28800 1 AKDT} + {2582791200 -32400 0 AKST} + {2593681200 -28800 1 AKDT} + {2614240800 -32400 0 AKST} + {2625130800 -28800 1 AKDT} + {2645690400 -32400 0 AKST} + {2656580400 -28800 1 AKDT} + {2677140000 -32400 0 AKST} + {2688634800 -28800 1 AKDT} + {2709194400 -32400 0 AKST} + {2720084400 -28800 1 AKDT} + {2740644000 -32400 0 AKST} + {2751534000 -28800 1 AKDT} + {2772093600 -32400 0 AKST} + {2782983600 -28800 1 AKDT} + {2803543200 -32400 0 AKST} + {2814433200 -28800 1 AKDT} + {2834992800 -32400 0 AKST} + {2846487600 -28800 1 AKDT} + {2867047200 -32400 0 AKST} + {2877937200 -28800 1 AKDT} + {2898496800 -32400 0 AKST} + {2909386800 -28800 1 AKDT} + {2929946400 -32400 0 AKST} + {2940836400 -28800 1 AKDT} + {2961396000 -32400 0 AKST} + {2972286000 -28800 1 AKDT} + {2992845600 -32400 0 AKST} + {3003735600 -28800 1 AKDT} + {3024295200 -32400 0 AKST} + {3035790000 -28800 1 AKDT} + {3056349600 -32400 0 AKST} + {3067239600 -28800 1 AKDT} + {3087799200 -32400 0 AKST} + {3098689200 -28800 1 AKDT} + {3119248800 -32400 0 AKST} + {3130138800 -28800 1 AKDT} + {3150698400 -32400 0 AKST} + {3161588400 -28800 1 AKDT} + {3182148000 -32400 0 AKST} + {3193038000 -28800 1 AKDT} + {3213597600 -32400 0 AKST} + {3225092400 -28800 1 AKDT} + {3245652000 -32400 0 AKST} + {3256542000 -28800 1 AKDT} + {3277101600 -32400 0 AKST} + {3287991600 -28800 1 AKDT} + {3308551200 -32400 0 AKST} + {3319441200 -28800 1 AKDT} + {3340000800 -32400 0 AKST} + {3350890800 -28800 1 AKDT} + {3371450400 -32400 0 AKST} + {3382945200 -28800 1 AKDT} + {3403504800 -32400 0 AKST} + {3414394800 -28800 1 AKDT} + {3434954400 -32400 0 AKST} + {3445844400 -28800 1 AKDT} + {3466404000 -32400 0 AKST} + {3477294000 -28800 1 AKDT} + {3497853600 -32400 0 AKST} + {3508743600 -28800 1 AKDT} + {3529303200 -32400 0 AKST} + {3540193200 -28800 1 AKDT} + {3560752800 -32400 0 AKST} + {3572247600 -28800 1 AKDT} + {3592807200 -32400 0 AKST} + {3603697200 -28800 1 AKDT} + {3624256800 -32400 0 AKST} + {3635146800 -28800 1 AKDT} + {3655706400 -32400 0 AKST} + {3666596400 -28800 1 AKDT} + {3687156000 -32400 0 AKST} + {3698046000 -28800 1 AKDT} + {3718605600 -32400 0 AKST} + {3730100400 -28800 1 AKDT} + {3750660000 -32400 0 AKST} + {3761550000 -28800 1 AKDT} + {3782109600 -32400 0 AKST} + {3792999600 -28800 1 AKDT} + {3813559200 -32400 0 AKST} + {3824449200 -28800 1 AKDT} + {3845008800 -32400 0 AKST} + {3855898800 -28800 1 AKDT} + {3876458400 -32400 0 AKST} + {3887348400 -28800 1 AKDT} + {3907908000 -32400 0 AKST} + {3919402800 -28800 1 AKDT} + {3939962400 -32400 0 AKST} + {3950852400 -28800 1 AKDT} + {3971412000 -32400 0 AKST} + {3982302000 -28800 1 AKDT} + {4002861600 -32400 0 AKST} + {4013751600 -28800 1 AKDT} + {4034311200 -32400 0 AKST} + {4045201200 -28800 1 AKDT} + {4065760800 -32400 0 AKST} + {4076650800 -28800 1 AKDT} + {4097210400 -32400 0 AKST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Anguilla b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Anguilla new file mode 100644 index 00000000..39a0d18d --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Anguilla @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Port_of_Spain)]} { + LoadTimeZoneFile America/Port_of_Spain +} +set TZData(:America/Anguilla) $TZData(:America/Port_of_Spain) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Antigua b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Antigua new file mode 100644 index 00000000..be0c88e5 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Antigua @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Port_of_Spain)]} { + LoadTimeZoneFile America/Port_of_Spain +} +set TZData(:America/Antigua) $TZData(:America/Port_of_Spain) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Araguaina b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Araguaina new file mode 100644 index 00000000..e4a0d52b --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Araguaina @@ -0,0 +1,60 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Araguaina) { + {-9223372036854775808 -11568 0 LMT} + {-1767214032 -10800 0 BRT} + {-1206957600 -7200 1 BRST} + {-1191362400 -10800 0 BRT} + {-1175374800 -7200 1 BRST} + {-1159826400 -10800 0 BRT} + {-633819600 -7200 1 BRST} + {-622069200 -10800 0 BRT} + {-602283600 -7200 1 BRST} + {-591832800 -10800 0 BRT} + {-570747600 -7200 1 BRST} + {-560210400 -10800 0 BRT} + {-539125200 -7200 1 BRST} + {-531352800 -10800 0 BRT} + {-191365200 -7200 1 BRST} + {-184197600 -10800 0 BRT} + {-155163600 -7200 1 BRST} + {-150069600 -10800 0 BRT} + {-128898000 -7200 1 BRST} + {-121125600 -10800 0 BRT} + {-99954000 -7200 1 BRST} + {-89589600 -10800 0 BRT} + {-68418000 -7200 1 BRST} + {-57967200 -10800 0 BRT} + {499748400 -7200 1 BRST} + {511236000 -10800 0 BRT} + {530593200 -7200 1 BRST} + {540266400 -10800 0 BRT} + {562129200 -7200 1 BRST} + {571197600 -10800 0 BRT} + {592974000 -7200 1 BRST} + {602042400 -10800 0 BRT} + {624423600 -7200 1 BRST} + {634701600 -10800 0 BRT} + {653536800 -10800 0 BRT} + {811047600 -10800 0 BRT} + {813726000 -7200 1 BRST} + {824004000 -10800 0 BRT} + {844570800 -7200 1 BRST} + {856058400 -10800 0 BRT} + {876106800 -7200 1 BRST} + {888717600 -10800 0 BRT} + {908074800 -7200 1 BRST} + {919562400 -10800 0 BRT} + {938919600 -7200 1 BRST} + {951616800 -10800 0 BRT} + {970974000 -7200 1 BRST} + {982461600 -10800 0 BRT} + {1003028400 -7200 1 BRST} + {1013911200 -10800 0 BRT} + {1036292400 -7200 1 BRST} + {1045360800 -10800 0 BRT} + {1064368800 -10800 0 BRT} + {1350788400 -7200 0 BRST} + {1361066400 -10800 0 BRT} + {1378000800 -10800 0 BRT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Argentina/Buenos_Aires b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Argentina/Buenos_Aires new file mode 100644 index 00000000..73cc8e9b --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Argentina/Buenos_Aires @@ -0,0 +1,67 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Argentina/Buenos_Aires) { + {-9223372036854775808 -14028 0 LMT} + {-2372097972 -15408 0 CMT} + {-1567453392 -14400 0 ART} + {-1233432000 -10800 0 ARST} + {-1222981200 -14400 0 ART} + {-1205956800 -10800 1 ARST} + {-1194037200 -14400 0 ART} + {-1172865600 -10800 1 ARST} + {-1162501200 -14400 0 ART} + {-1141329600 -10800 1 ARST} + {-1130965200 -14400 0 ART} + {-1109793600 -10800 1 ARST} + {-1099429200 -14400 0 ART} + {-1078257600 -10800 1 ARST} + {-1067806800 -14400 0 ART} + {-1046635200 -10800 1 ARST} + {-1036270800 -14400 0 ART} + {-1015099200 -10800 1 ARST} + {-1004734800 -14400 0 ART} + {-983563200 -10800 1 ARST} + {-973198800 -14400 0 ART} + {-952027200 -10800 1 ARST} + {-941576400 -14400 0 ART} + {-931032000 -10800 1 ARST} + {-900882000 -14400 0 ART} + {-890337600 -10800 1 ARST} + {-833749200 -14400 0 ART} + {-827265600 -10800 1 ARST} + {-752274000 -14400 0 ART} + {-733780800 -10800 1 ARST} + {-197326800 -14400 0 ART} + {-190843200 -10800 1 ARST} + {-184194000 -14400 0 ART} + {-164491200 -10800 1 ARST} + {-152658000 -14400 0 ART} + {-132955200 -10800 1 ARST} + {-121122000 -14400 0 ART} + {-101419200 -10800 1 ARST} + {-86821200 -14400 0 ART} + {-71092800 -10800 1 ARST} + {-54766800 -14400 0 ART} + {-39038400 -10800 1 ARST} + {-23317200 -14400 0 ART} + {-7588800 -10800 0 ART} + {128142000 -7200 1 ARST} + {136605600 -10800 0 ART} + {596948400 -7200 1 ARST} + {605066400 -10800 0 ART} + {624423600 -7200 1 ARST} + {636516000 -10800 0 ART} + {656478000 -7200 1 ARST} + {667965600 -10800 0 ART} + {687927600 -7200 1 ARST} + {699415200 -10800 0 ART} + {719377200 -7200 1 ARST} + {731469600 -10800 0 ART} + {938916000 -10800 0 ART} + {938919600 -10800 1 ARST} + {952056000 -10800 0 ART} + {1198983600 -7200 1 ARST} + {1205632800 -10800 0 ART} + {1224385200 -7200 1 ARST} + {1237082400 -10800 0 ART} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Argentina/Catamarca b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Argentina/Catamarca new file mode 100644 index 00000000..7739203b --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Argentina/Catamarca @@ -0,0 +1,68 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Argentina/Catamarca) { + {-9223372036854775808 -15788 0 LMT} + {-2372096212 -15408 0 CMT} + {-1567453392 -14400 0 ART} + {-1233432000 -10800 0 ARST} + {-1222981200 -14400 0 ART} + {-1205956800 -10800 1 ARST} + {-1194037200 -14400 0 ART} + {-1172865600 -10800 1 ARST} + {-1162501200 -14400 0 ART} + {-1141329600 -10800 1 ARST} + {-1130965200 -14400 0 ART} + {-1109793600 -10800 1 ARST} + {-1099429200 -14400 0 ART} + {-1078257600 -10800 1 ARST} + {-1067806800 -14400 0 ART} + {-1046635200 -10800 1 ARST} + {-1036270800 -14400 0 ART} + {-1015099200 -10800 1 ARST} + {-1004734800 -14400 0 ART} + {-983563200 -10800 1 ARST} + {-973198800 -14400 0 ART} + {-952027200 -10800 1 ARST} + {-941576400 -14400 0 ART} + {-931032000 -10800 1 ARST} + {-900882000 -14400 0 ART} + {-890337600 -10800 1 ARST} + {-833749200 -14400 0 ART} + {-827265600 -10800 1 ARST} + {-752274000 -14400 0 ART} + {-733780800 -10800 1 ARST} + {-197326800 -14400 0 ART} + {-190843200 -10800 1 ARST} + {-184194000 -14400 0 ART} + {-164491200 -10800 1 ARST} + {-152658000 -14400 0 ART} + {-132955200 -10800 1 ARST} + {-121122000 -14400 0 ART} + {-101419200 -10800 1 ARST} + {-86821200 -14400 0 ART} + {-71092800 -10800 1 ARST} + {-54766800 -14400 0 ART} + {-39038400 -10800 1 ARST} + {-23317200 -14400 0 ART} + {-7588800 -10800 0 ART} + {128142000 -7200 1 ARST} + {136605600 -10800 0 ART} + {596948400 -7200 1 ARST} + {605066400 -10800 0 ART} + {624423600 -7200 1 ARST} + {636516000 -10800 0 ART} + {656478000 -7200 1 ARST} + {667965600 -14400 0 WART} + {687931200 -7200 0 ARST} + {699415200 -10800 0 ART} + {719377200 -7200 1 ARST} + {731469600 -10800 0 ART} + {938916000 -10800 0 ART} + {938919600 -10800 1 ARST} + {952056000 -10800 0 ART} + {1086058800 -14400 0 WART} + {1087704000 -10800 0 ART} + {1198983600 -7200 1 ARST} + {1205632800 -10800 0 ART} + {1224295200 -10800 0 ART} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Argentina/ComodRivadavia b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Argentina/ComodRivadavia new file mode 100644 index 00000000..2611a3d5 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Argentina/ComodRivadavia @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Argentina/Catamarca)]} { + LoadTimeZoneFile America/Argentina/Catamarca +} +set TZData(:America/Argentina/ComodRivadavia) $TZData(:America/Argentina/Catamarca) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Argentina/Cordoba b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Argentina/Cordoba new file mode 100644 index 00000000..b08539eb --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Argentina/Cordoba @@ -0,0 +1,67 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Argentina/Cordoba) { + {-9223372036854775808 -15408 0 LMT} + {-2372096592 -15408 0 CMT} + {-1567453392 -14400 0 ART} + {-1233432000 -10800 0 ARST} + {-1222981200 -14400 0 ART} + {-1205956800 -10800 1 ARST} + {-1194037200 -14400 0 ART} + {-1172865600 -10800 1 ARST} + {-1162501200 -14400 0 ART} + {-1141329600 -10800 1 ARST} + {-1130965200 -14400 0 ART} + {-1109793600 -10800 1 ARST} + {-1099429200 -14400 0 ART} + {-1078257600 -10800 1 ARST} + {-1067806800 -14400 0 ART} + {-1046635200 -10800 1 ARST} + {-1036270800 -14400 0 ART} + {-1015099200 -10800 1 ARST} + {-1004734800 -14400 0 ART} + {-983563200 -10800 1 ARST} + {-973198800 -14400 0 ART} + {-952027200 -10800 1 ARST} + {-941576400 -14400 0 ART} + {-931032000 -10800 1 ARST} + {-900882000 -14400 0 ART} + {-890337600 -10800 1 ARST} + {-833749200 -14400 0 ART} + {-827265600 -10800 1 ARST} + {-752274000 -14400 0 ART} + {-733780800 -10800 1 ARST} + {-197326800 -14400 0 ART} + {-190843200 -10800 1 ARST} + {-184194000 -14400 0 ART} + {-164491200 -10800 1 ARST} + {-152658000 -14400 0 ART} + {-132955200 -10800 1 ARST} + {-121122000 -14400 0 ART} + {-101419200 -10800 1 ARST} + {-86821200 -14400 0 ART} + {-71092800 -10800 1 ARST} + {-54766800 -14400 0 ART} + {-39038400 -10800 1 ARST} + {-23317200 -14400 0 ART} + {-7588800 -10800 0 ART} + {128142000 -7200 1 ARST} + {136605600 -10800 0 ART} + {596948400 -7200 1 ARST} + {605066400 -10800 0 ART} + {624423600 -7200 1 ARST} + {636516000 -10800 0 ART} + {656478000 -7200 1 ARST} + {667965600 -14400 0 WART} + {687931200 -7200 0 ARST} + {699415200 -10800 0 ART} + {719377200 -7200 1 ARST} + {731469600 -10800 0 ART} + {938916000 -10800 0 ART} + {938919600 -10800 1 ARST} + {952056000 -10800 0 ART} + {1198983600 -7200 1 ARST} + {1205632800 -10800 0 ART} + {1224385200 -7200 1 ARST} + {1237082400 -10800 0 ART} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Argentina/Jujuy b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Argentina/Jujuy new file mode 100644 index 00000000..4f95f8a5 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Argentina/Jujuy @@ -0,0 +1,67 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Argentina/Jujuy) { + {-9223372036854775808 -15672 0 LMT} + {-2372096328 -15408 0 CMT} + {-1567453392 -14400 0 ART} + {-1233432000 -10800 0 ARST} + {-1222981200 -14400 0 ART} + {-1205956800 -10800 1 ARST} + {-1194037200 -14400 0 ART} + {-1172865600 -10800 1 ARST} + {-1162501200 -14400 0 ART} + {-1141329600 -10800 1 ARST} + {-1130965200 -14400 0 ART} + {-1109793600 -10800 1 ARST} + {-1099429200 -14400 0 ART} + {-1078257600 -10800 1 ARST} + {-1067806800 -14400 0 ART} + {-1046635200 -10800 1 ARST} + {-1036270800 -14400 0 ART} + {-1015099200 -10800 1 ARST} + {-1004734800 -14400 0 ART} + {-983563200 -10800 1 ARST} + {-973198800 -14400 0 ART} + {-952027200 -10800 1 ARST} + {-941576400 -14400 0 ART} + {-931032000 -10800 1 ARST} + {-900882000 -14400 0 ART} + {-890337600 -10800 1 ARST} + {-833749200 -14400 0 ART} + {-827265600 -10800 1 ARST} + {-752274000 -14400 0 ART} + {-733780800 -10800 1 ARST} + {-197326800 -14400 0 ART} + {-190843200 -10800 1 ARST} + {-184194000 -14400 0 ART} + {-164491200 -10800 1 ARST} + {-152658000 -14400 0 ART} + {-132955200 -10800 1 ARST} + {-121122000 -14400 0 ART} + {-101419200 -10800 1 ARST} + {-86821200 -14400 0 ART} + {-71092800 -10800 1 ARST} + {-54766800 -14400 0 ART} + {-39038400 -10800 1 ARST} + {-23317200 -14400 0 ART} + {-7588800 -10800 0 ART} + {128142000 -7200 1 ARST} + {136605600 -10800 0 ART} + {596948400 -7200 1 ARST} + {605066400 -10800 0 ART} + {624423600 -7200 1 ARST} + {636516000 -14400 0 WART} + {657086400 -10800 1 WARST} + {669178800 -14400 0 WART} + {686721600 -7200 1 ARST} + {694231200 -7200 0 ART} + {699415200 -10800 0 ART} + {719377200 -7200 1 ARST} + {731469600 -10800 0 ART} + {938916000 -10800 0 ART} + {938919600 -10800 1 ARST} + {952056000 -10800 0 ART} + {1198983600 -7200 1 ARST} + {1205632800 -10800 0 ART} + {1224295200 -10800 0 ART} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Argentina/La_Rioja b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Argentina/La_Rioja new file mode 100644 index 00000000..835e29da --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Argentina/La_Rioja @@ -0,0 +1,69 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Argentina/La_Rioja) { + {-9223372036854775808 -16044 0 LMT} + {-2372095956 -15408 0 CMT} + {-1567453392 -14400 0 ART} + {-1233432000 -10800 0 ARST} + {-1222981200 -14400 0 ART} + {-1205956800 -10800 1 ARST} + {-1194037200 -14400 0 ART} + {-1172865600 -10800 1 ARST} + {-1162501200 -14400 0 ART} + {-1141329600 -10800 1 ARST} + {-1130965200 -14400 0 ART} + {-1109793600 -10800 1 ARST} + {-1099429200 -14400 0 ART} + {-1078257600 -10800 1 ARST} + {-1067806800 -14400 0 ART} + {-1046635200 -10800 1 ARST} + {-1036270800 -14400 0 ART} + {-1015099200 -10800 1 ARST} + {-1004734800 -14400 0 ART} + {-983563200 -10800 1 ARST} + {-973198800 -14400 0 ART} + {-952027200 -10800 1 ARST} + {-941576400 -14400 0 ART} + {-931032000 -10800 1 ARST} + {-900882000 -14400 0 ART} + {-890337600 -10800 1 ARST} + {-833749200 -14400 0 ART} + {-827265600 -10800 1 ARST} + {-752274000 -14400 0 ART} + {-733780800 -10800 1 ARST} + {-197326800 -14400 0 ART} + {-190843200 -10800 1 ARST} + {-184194000 -14400 0 ART} + {-164491200 -10800 1 ARST} + {-152658000 -14400 0 ART} + {-132955200 -10800 1 ARST} + {-121122000 -14400 0 ART} + {-101419200 -10800 1 ARST} + {-86821200 -14400 0 ART} + {-71092800 -10800 1 ARST} + {-54766800 -14400 0 ART} + {-39038400 -10800 1 ARST} + {-23317200 -14400 0 ART} + {-7588800 -10800 0 ART} + {128142000 -7200 1 ARST} + {136605600 -10800 0 ART} + {596948400 -7200 1 ARST} + {605066400 -10800 0 ART} + {624423600 -7200 1 ARST} + {636516000 -10800 0 ART} + {656478000 -7200 1 ARST} + {667792800 -14400 0 WART} + {673588800 -10800 0 ART} + {687927600 -7200 1 ARST} + {699415200 -10800 0 ART} + {719377200 -7200 1 ARST} + {731469600 -10800 0 ART} + {938916000 -10800 0 ART} + {938919600 -10800 1 ARST} + {952056000 -10800 0 ART} + {1086058800 -14400 0 WART} + {1087704000 -10800 0 ART} + {1198983600 -7200 1 ARST} + {1205632800 -10800 0 ART} + {1224295200 -10800 0 ART} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Argentina/Mendoza b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Argentina/Mendoza new file mode 100644 index 00000000..2c6fb584 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Argentina/Mendoza @@ -0,0 +1,68 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Argentina/Mendoza) { + {-9223372036854775808 -16516 0 LMT} + {-2372095484 -15408 0 CMT} + {-1567453392 -14400 0 ART} + {-1233432000 -10800 0 ARST} + {-1222981200 -14400 0 ART} + {-1205956800 -10800 1 ARST} + {-1194037200 -14400 0 ART} + {-1172865600 -10800 1 ARST} + {-1162501200 -14400 0 ART} + {-1141329600 -10800 1 ARST} + {-1130965200 -14400 0 ART} + {-1109793600 -10800 1 ARST} + {-1099429200 -14400 0 ART} + {-1078257600 -10800 1 ARST} + {-1067806800 -14400 0 ART} + {-1046635200 -10800 1 ARST} + {-1036270800 -14400 0 ART} + {-1015099200 -10800 1 ARST} + {-1004734800 -14400 0 ART} + {-983563200 -10800 1 ARST} + {-973198800 -14400 0 ART} + {-952027200 -10800 1 ARST} + {-941576400 -14400 0 ART} + {-931032000 -10800 1 ARST} + {-900882000 -14400 0 ART} + {-890337600 -10800 1 ARST} + {-833749200 -14400 0 ART} + {-827265600 -10800 1 ARST} + {-752274000 -14400 0 ART} + {-733780800 -10800 1 ARST} + {-197326800 -14400 0 ART} + {-190843200 -10800 1 ARST} + {-184194000 -14400 0 ART} + {-164491200 -10800 1 ARST} + {-152658000 -14400 0 ART} + {-132955200 -10800 1 ARST} + {-121122000 -14400 0 ART} + {-101419200 -10800 1 ARST} + {-86821200 -14400 0 ART} + {-71092800 -10800 1 ARST} + {-54766800 -14400 0 ART} + {-39038400 -10800 1 ARST} + {-23317200 -14400 0 ART} + {-7588800 -10800 0 ART} + {128142000 -7200 1 ARST} + {136605600 -10800 0 ART} + {596948400 -7200 1 ARST} + {605066400 -10800 0 ART} + {624423600 -7200 1 ARST} + {636516000 -14400 0 WART} + {655963200 -10800 1 WARST} + {667796400 -14400 0 WART} + {687499200 -10800 1 WARST} + {699418800 -14400 0 WART} + {719380800 -7200 0 ARST} + {731469600 -10800 0 ART} + {938916000 -10800 0 ART} + {938919600 -10800 1 ARST} + {952056000 -10800 0 ART} + {1085281200 -14400 0 WART} + {1096171200 -10800 0 ART} + {1198983600 -7200 1 ARST} + {1205632800 -10800 0 ART} + {1224295200 -10800 0 ART} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Argentina/Rio_Gallegos b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Argentina/Rio_Gallegos new file mode 100644 index 00000000..91d37dd8 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Argentina/Rio_Gallegos @@ -0,0 +1,68 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Argentina/Rio_Gallegos) { + {-9223372036854775808 -16612 0 LMT} + {-2372095388 -15408 0 CMT} + {-1567453392 -14400 0 ART} + {-1233432000 -10800 0 ARST} + {-1222981200 -14400 0 ART} + {-1205956800 -10800 1 ARST} + {-1194037200 -14400 0 ART} + {-1172865600 -10800 1 ARST} + {-1162501200 -14400 0 ART} + {-1141329600 -10800 1 ARST} + {-1130965200 -14400 0 ART} + {-1109793600 -10800 1 ARST} + {-1099429200 -14400 0 ART} + {-1078257600 -10800 1 ARST} + {-1067806800 -14400 0 ART} + {-1046635200 -10800 1 ARST} + {-1036270800 -14400 0 ART} + {-1015099200 -10800 1 ARST} + {-1004734800 -14400 0 ART} + {-983563200 -10800 1 ARST} + {-973198800 -14400 0 ART} + {-952027200 -10800 1 ARST} + {-941576400 -14400 0 ART} + {-931032000 -10800 1 ARST} + {-900882000 -14400 0 ART} + {-890337600 -10800 1 ARST} + {-833749200 -14400 0 ART} + {-827265600 -10800 1 ARST} + {-752274000 -14400 0 ART} + {-733780800 -10800 1 ARST} + {-197326800 -14400 0 ART} + {-190843200 -10800 1 ARST} + {-184194000 -14400 0 ART} + {-164491200 -10800 1 ARST} + {-152658000 -14400 0 ART} + {-132955200 -10800 1 ARST} + {-121122000 -14400 0 ART} + {-101419200 -10800 1 ARST} + {-86821200 -14400 0 ART} + {-71092800 -10800 1 ARST} + {-54766800 -14400 0 ART} + {-39038400 -10800 1 ARST} + {-23317200 -14400 0 ART} + {-7588800 -10800 0 ART} + {128142000 -7200 1 ARST} + {136605600 -10800 0 ART} + {596948400 -7200 1 ARST} + {605066400 -10800 0 ART} + {624423600 -7200 1 ARST} + {636516000 -10800 0 ART} + {656478000 -7200 1 ARST} + {667965600 -10800 0 ART} + {687927600 -7200 1 ARST} + {699415200 -10800 0 ART} + {719377200 -7200 1 ARST} + {731469600 -10800 0 ART} + {938916000 -10800 0 ART} + {938919600 -10800 1 ARST} + {952056000 -10800 0 ART} + {1086058800 -14400 0 WART} + {1087704000 -10800 0 ART} + {1198983600 -7200 1 ARST} + {1205632800 -10800 0 ART} + {1224295200 -10800 0 ART} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Argentina/Salta b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Argentina/Salta new file mode 100644 index 00000000..a5a70104 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Argentina/Salta @@ -0,0 +1,66 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Argentina/Salta) { + {-9223372036854775808 -15700 0 LMT} + {-2372096300 -15408 0 CMT} + {-1567453392 -14400 0 ART} + {-1233432000 -10800 0 ARST} + {-1222981200 -14400 0 ART} + {-1205956800 -10800 1 ARST} + {-1194037200 -14400 0 ART} + {-1172865600 -10800 1 ARST} + {-1162501200 -14400 0 ART} + {-1141329600 -10800 1 ARST} + {-1130965200 -14400 0 ART} + {-1109793600 -10800 1 ARST} + {-1099429200 -14400 0 ART} + {-1078257600 -10800 1 ARST} + {-1067806800 -14400 0 ART} + {-1046635200 -10800 1 ARST} + {-1036270800 -14400 0 ART} + {-1015099200 -10800 1 ARST} + {-1004734800 -14400 0 ART} + {-983563200 -10800 1 ARST} + {-973198800 -14400 0 ART} + {-952027200 -10800 1 ARST} + {-941576400 -14400 0 ART} + {-931032000 -10800 1 ARST} + {-900882000 -14400 0 ART} + {-890337600 -10800 1 ARST} + {-833749200 -14400 0 ART} + {-827265600 -10800 1 ARST} + {-752274000 -14400 0 ART} + {-733780800 -10800 1 ARST} + {-197326800 -14400 0 ART} + {-190843200 -10800 1 ARST} + {-184194000 -14400 0 ART} + {-164491200 -10800 1 ARST} + {-152658000 -14400 0 ART} + {-132955200 -10800 1 ARST} + {-121122000 -14400 0 ART} + {-101419200 -10800 1 ARST} + {-86821200 -14400 0 ART} + {-71092800 -10800 1 ARST} + {-54766800 -14400 0 ART} + {-39038400 -10800 1 ARST} + {-23317200 -14400 0 ART} + {-7588800 -10800 0 ART} + {128142000 -7200 1 ARST} + {136605600 -10800 0 ART} + {596948400 -7200 1 ARST} + {605066400 -10800 0 ART} + {624423600 -7200 1 ARST} + {636516000 -10800 0 ART} + {656478000 -7200 1 ARST} + {667965600 -14400 0 WART} + {687931200 -7200 0 ARST} + {699415200 -10800 0 ART} + {719377200 -7200 1 ARST} + {731469600 -10800 0 ART} + {938916000 -10800 0 ART} + {938919600 -10800 1 ARST} + {952056000 -10800 0 ART} + {1198983600 -7200 1 ARST} + {1205632800 -10800 0 ART} + {1224295200 -10800 0 ART} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Argentina/San_Juan b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Argentina/San_Juan new file mode 100644 index 00000000..417e2344 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Argentina/San_Juan @@ -0,0 +1,69 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Argentina/San_Juan) { + {-9223372036854775808 -16444 0 LMT} + {-2372095556 -15408 0 CMT} + {-1567453392 -14400 0 ART} + {-1233432000 -10800 0 ARST} + {-1222981200 -14400 0 ART} + {-1205956800 -10800 1 ARST} + {-1194037200 -14400 0 ART} + {-1172865600 -10800 1 ARST} + {-1162501200 -14400 0 ART} + {-1141329600 -10800 1 ARST} + {-1130965200 -14400 0 ART} + {-1109793600 -10800 1 ARST} + {-1099429200 -14400 0 ART} + {-1078257600 -10800 1 ARST} + {-1067806800 -14400 0 ART} + {-1046635200 -10800 1 ARST} + {-1036270800 -14400 0 ART} + {-1015099200 -10800 1 ARST} + {-1004734800 -14400 0 ART} + {-983563200 -10800 1 ARST} + {-973198800 -14400 0 ART} + {-952027200 -10800 1 ARST} + {-941576400 -14400 0 ART} + {-931032000 -10800 1 ARST} + {-900882000 -14400 0 ART} + {-890337600 -10800 1 ARST} + {-833749200 -14400 0 ART} + {-827265600 -10800 1 ARST} + {-752274000 -14400 0 ART} + {-733780800 -10800 1 ARST} + {-197326800 -14400 0 ART} + {-190843200 -10800 1 ARST} + {-184194000 -14400 0 ART} + {-164491200 -10800 1 ARST} + {-152658000 -14400 0 ART} + {-132955200 -10800 1 ARST} + {-121122000 -14400 0 ART} + {-101419200 -10800 1 ARST} + {-86821200 -14400 0 ART} + {-71092800 -10800 1 ARST} + {-54766800 -14400 0 ART} + {-39038400 -10800 1 ARST} + {-23317200 -14400 0 ART} + {-7588800 -10800 0 ART} + {128142000 -7200 1 ARST} + {136605600 -10800 0 ART} + {596948400 -7200 1 ARST} + {605066400 -10800 0 ART} + {624423600 -7200 1 ARST} + {636516000 -10800 0 ART} + {656478000 -7200 1 ARST} + {667792800 -14400 0 WART} + {673588800 -10800 0 ART} + {687927600 -7200 1 ARST} + {699415200 -10800 0 ART} + {719377200 -7200 1 ARST} + {731469600 -10800 0 ART} + {938916000 -10800 0 ART} + {938919600 -10800 1 ARST} + {952056000 -10800 0 ART} + {1085972400 -14400 0 WART} + {1090728000 -10800 0 ART} + {1198983600 -7200 1 ARST} + {1205632800 -10800 0 ART} + {1224295200 -10800 0 ART} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Argentina/San_Luis b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Argentina/San_Luis new file mode 100644 index 00000000..8ca55d79 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Argentina/San_Luis @@ -0,0 +1,68 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Argentina/San_Luis) { + {-9223372036854775808 -15924 0 LMT} + {-2372096076 -15408 0 CMT} + {-1567453392 -14400 0 ART} + {-1233432000 -10800 0 ARST} + {-1222981200 -14400 0 ART} + {-1205956800 -10800 1 ARST} + {-1194037200 -14400 0 ART} + {-1172865600 -10800 1 ARST} + {-1162501200 -14400 0 ART} + {-1141329600 -10800 1 ARST} + {-1130965200 -14400 0 ART} + {-1109793600 -10800 1 ARST} + {-1099429200 -14400 0 ART} + {-1078257600 -10800 1 ARST} + {-1067806800 -14400 0 ART} + {-1046635200 -10800 1 ARST} + {-1036270800 -14400 0 ART} + {-1015099200 -10800 1 ARST} + {-1004734800 -14400 0 ART} + {-983563200 -10800 1 ARST} + {-973198800 -14400 0 ART} + {-952027200 -10800 1 ARST} + {-941576400 -14400 0 ART} + {-931032000 -10800 1 ARST} + {-900882000 -14400 0 ART} + {-890337600 -10800 1 ARST} + {-833749200 -14400 0 ART} + {-827265600 -10800 1 ARST} + {-752274000 -14400 0 ART} + {-733780800 -10800 1 ARST} + {-197326800 -14400 0 ART} + {-190843200 -10800 1 ARST} + {-184194000 -14400 0 ART} + {-164491200 -10800 1 ARST} + {-152658000 -14400 0 ART} + {-132955200 -10800 1 ARST} + {-121122000 -14400 0 ART} + {-101419200 -10800 1 ARST} + {-86821200 -14400 0 ART} + {-71092800 -10800 1 ARST} + {-54766800 -14400 0 ART} + {-39038400 -10800 1 ARST} + {-23317200 -14400 0 ART} + {-7588800 -10800 0 ART} + {128142000 -7200 1 ARST} + {136605600 -10800 0 ART} + {596948400 -7200 1 ARST} + {605066400 -10800 0 ART} + {624423600 -7200 1 ARST} + {631159200 -7200 1 ARST} + {637380000 -14400 0 WART} + {655963200 -10800 1 WARST} + {667796400 -14400 0 WART} + {675748800 -10800 0 ART} + {938919600 -10800 1 WARST} + {952052400 -10800 0 ART} + {1085972400 -14400 0 WART} + {1090728000 -10800 0 ART} + {1198983600 -7200 1 ARST} + {1200880800 -10800 0 WART} + {1205031600 -14400 0 WART} + {1223784000 -10800 1 WARST} + {1236481200 -14400 0 WART} + {1255233600 -10800 0 ART} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Argentina/Tucuman b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Argentina/Tucuman new file mode 100644 index 00000000..35009862 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Argentina/Tucuman @@ -0,0 +1,69 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Argentina/Tucuman) { + {-9223372036854775808 -15652 0 LMT} + {-2372096348 -15408 0 CMT} + {-1567453392 -14400 0 ART} + {-1233432000 -10800 0 ARST} + {-1222981200 -14400 0 ART} + {-1205956800 -10800 1 ARST} + {-1194037200 -14400 0 ART} + {-1172865600 -10800 1 ARST} + {-1162501200 -14400 0 ART} + {-1141329600 -10800 1 ARST} + {-1130965200 -14400 0 ART} + {-1109793600 -10800 1 ARST} + {-1099429200 -14400 0 ART} + {-1078257600 -10800 1 ARST} + {-1067806800 -14400 0 ART} + {-1046635200 -10800 1 ARST} + {-1036270800 -14400 0 ART} + {-1015099200 -10800 1 ARST} + {-1004734800 -14400 0 ART} + {-983563200 -10800 1 ARST} + {-973198800 -14400 0 ART} + {-952027200 -10800 1 ARST} + {-941576400 -14400 0 ART} + {-931032000 -10800 1 ARST} + {-900882000 -14400 0 ART} + {-890337600 -10800 1 ARST} + {-833749200 -14400 0 ART} + {-827265600 -10800 1 ARST} + {-752274000 -14400 0 ART} + {-733780800 -10800 1 ARST} + {-197326800 -14400 0 ART} + {-190843200 -10800 1 ARST} + {-184194000 -14400 0 ART} + {-164491200 -10800 1 ARST} + {-152658000 -14400 0 ART} + {-132955200 -10800 1 ARST} + {-121122000 -14400 0 ART} + {-101419200 -10800 1 ARST} + {-86821200 -14400 0 ART} + {-71092800 -10800 1 ARST} + {-54766800 -14400 0 ART} + {-39038400 -10800 1 ARST} + {-23317200 -14400 0 ART} + {-7588800 -10800 0 ART} + {128142000 -7200 1 ARST} + {136605600 -10800 0 ART} + {596948400 -7200 1 ARST} + {605066400 -10800 0 ART} + {624423600 -7200 1 ARST} + {636516000 -10800 0 ART} + {656478000 -7200 1 ARST} + {667965600 -14400 0 WART} + {687931200 -7200 0 ARST} + {699415200 -10800 0 ART} + {719377200 -7200 1 ARST} + {731469600 -10800 0 ART} + {938916000 -10800 0 ART} + {938919600 -10800 1 ARST} + {952056000 -10800 0 ART} + {1086058800 -14400 0 WART} + {1087099200 -10800 0 ART} + {1198983600 -7200 1 ARST} + {1205632800 -10800 0 ART} + {1224385200 -7200 1 ARST} + {1237082400 -10800 0 ART} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Argentina/Ushuaia b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Argentina/Ushuaia new file mode 100644 index 00000000..4fcf92db --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Argentina/Ushuaia @@ -0,0 +1,68 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Argentina/Ushuaia) { + {-9223372036854775808 -16392 0 LMT} + {-2372095608 -15408 0 CMT} + {-1567453392 -14400 0 ART} + {-1233432000 -10800 0 ARST} + {-1222981200 -14400 0 ART} + {-1205956800 -10800 1 ARST} + {-1194037200 -14400 0 ART} + {-1172865600 -10800 1 ARST} + {-1162501200 -14400 0 ART} + {-1141329600 -10800 1 ARST} + {-1130965200 -14400 0 ART} + {-1109793600 -10800 1 ARST} + {-1099429200 -14400 0 ART} + {-1078257600 -10800 1 ARST} + {-1067806800 -14400 0 ART} + {-1046635200 -10800 1 ARST} + {-1036270800 -14400 0 ART} + {-1015099200 -10800 1 ARST} + {-1004734800 -14400 0 ART} + {-983563200 -10800 1 ARST} + {-973198800 -14400 0 ART} + {-952027200 -10800 1 ARST} + {-941576400 -14400 0 ART} + {-931032000 -10800 1 ARST} + {-900882000 -14400 0 ART} + {-890337600 -10800 1 ARST} + {-833749200 -14400 0 ART} + {-827265600 -10800 1 ARST} + {-752274000 -14400 0 ART} + {-733780800 -10800 1 ARST} + {-197326800 -14400 0 ART} + {-190843200 -10800 1 ARST} + {-184194000 -14400 0 ART} + {-164491200 -10800 1 ARST} + {-152658000 -14400 0 ART} + {-132955200 -10800 1 ARST} + {-121122000 -14400 0 ART} + {-101419200 -10800 1 ARST} + {-86821200 -14400 0 ART} + {-71092800 -10800 1 ARST} + {-54766800 -14400 0 ART} + {-39038400 -10800 1 ARST} + {-23317200 -14400 0 ART} + {-7588800 -10800 0 ART} + {128142000 -7200 1 ARST} + {136605600 -10800 0 ART} + {596948400 -7200 1 ARST} + {605066400 -10800 0 ART} + {624423600 -7200 1 ARST} + {636516000 -10800 0 ART} + {656478000 -7200 1 ARST} + {667965600 -10800 0 ART} + {687927600 -7200 1 ARST} + {699415200 -10800 0 ART} + {719377200 -7200 1 ARST} + {731469600 -10800 0 ART} + {938916000 -10800 0 ART} + {938919600 -10800 1 ARST} + {952056000 -10800 0 ART} + {1085886000 -14400 0 WART} + {1087704000 -10800 0 ART} + {1198983600 -7200 1 ARST} + {1205632800 -10800 0 ART} + {1224295200 -10800 0 ART} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Aruba b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Aruba new file mode 100644 index 00000000..e02d5fc9 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Aruba @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Curacao)]} { + LoadTimeZoneFile America/Curacao +} +set TZData(:America/Aruba) $TZData(:America/Curacao) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Asuncion b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Asuncion new file mode 100644 index 00000000..9ea30daf --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Asuncion @@ -0,0 +1,259 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Asuncion) { + {-9223372036854775808 -13840 0 LMT} + {-2524507760 -13840 0 AMT} + {-1206389360 -14400 0 PYT} + {86760000 -10800 0 PYT} + {134017200 -14400 0 PYT} + {162878400 -14400 0 PYT} + {181368000 -10800 1 PYST} + {194497200 -14400 0 PYT} + {212990400 -10800 1 PYST} + {226033200 -14400 0 PYT} + {244526400 -10800 1 PYST} + {257569200 -14400 0 PYT} + {276062400 -10800 1 PYST} + {291783600 -14400 0 PYT} + {307598400 -10800 1 PYST} + {323406000 -14400 0 PYT} + {339220800 -10800 1 PYST} + {354942000 -14400 0 PYT} + {370756800 -10800 1 PYST} + {386478000 -14400 0 PYT} + {402292800 -10800 1 PYST} + {418014000 -14400 0 PYT} + {433828800 -10800 1 PYST} + {449636400 -14400 0 PYT} + {465451200 -10800 1 PYST} + {481172400 -14400 0 PYT} + {496987200 -10800 1 PYST} + {512708400 -14400 0 PYT} + {528523200 -10800 1 PYST} + {544244400 -14400 0 PYT} + {560059200 -10800 1 PYST} + {575866800 -14400 0 PYT} + {591681600 -10800 1 PYST} + {607402800 -14400 0 PYT} + {625032000 -10800 1 PYST} + {638938800 -14400 0 PYT} + {654753600 -10800 1 PYST} + {670474800 -14400 0 PYT} + {686721600 -10800 1 PYST} + {699418800 -14400 0 PYT} + {718257600 -10800 1 PYST} + {733546800 -14400 0 PYT} + {749448000 -10800 1 PYST} + {762318000 -14400 0 PYT} + {780984000 -10800 1 PYST} + {793767600 -14400 0 PYT} + {812520000 -10800 1 PYST} + {825649200 -14400 0 PYT} + {844574400 -10800 1 PYST} + {856666800 -14400 0 PYT} + {876024000 -10800 1 PYST} + {888721200 -14400 0 PYT} + {907473600 -10800 1 PYST} + {920775600 -14400 0 PYT} + {938923200 -10800 1 PYST} + {952225200 -14400 0 PYT} + {970372800 -10800 1 PYST} + {983674800 -14400 0 PYT} + {1002427200 -10800 1 PYST} + {1018148400 -14400 0 PYT} + {1030852800 -10800 1 PYST} + {1049598000 -14400 0 PYT} + {1062907200 -10800 1 PYST} + {1081047600 -14400 0 PYT} + {1097985600 -10800 1 PYST} + {1110682800 -14400 0 PYT} + {1129435200 -10800 1 PYST} + {1142132400 -14400 0 PYT} + {1160884800 -10800 1 PYST} + {1173582000 -14400 0 PYT} + {1192939200 -10800 1 PYST} + {1205031600 -14400 0 PYT} + {1224388800 -10800 1 PYST} + {1236481200 -14400 0 PYT} + {1255838400 -10800 1 PYST} + {1270954800 -14400 0 PYT} + {1286078400 -10800 1 PYST} + {1302404400 -14400 0 PYT} + {1317528000 -10800 1 PYST} + {1333854000 -14400 0 PYT} + {1349582400 -10800 1 PYST} + {1364094000 -14400 0 PYT} + {1381032000 -10800 1 PYST} + {1395543600 -14400 0 PYT} + {1412481600 -10800 1 PYST} + {1426993200 -14400 0 PYT} + {1443931200 -10800 1 PYST} + {1459047600 -14400 0 PYT} + {1475380800 -10800 1 PYST} + {1490497200 -14400 0 PYT} + {1506830400 -10800 1 PYST} + {1521946800 -14400 0 PYT} + {1538884800 -10800 1 PYST} + {1553396400 -14400 0 PYT} + {1570334400 -10800 1 PYST} + {1584846000 -14400 0 PYT} + {1601784000 -10800 1 PYST} + {1616900400 -14400 0 PYT} + {1633233600 -10800 1 PYST} + {1648350000 -14400 0 PYT} + {1664683200 -10800 1 PYST} + {1679799600 -14400 0 PYT} + {1696132800 -10800 1 PYST} + {1711249200 -14400 0 PYT} + {1728187200 -10800 1 PYST} + {1742698800 -14400 0 PYT} + {1759636800 -10800 1 PYST} + {1774148400 -14400 0 PYT} + {1791086400 -10800 1 PYST} + {1806202800 -14400 0 PYT} + {1822536000 -10800 1 PYST} + {1837652400 -14400 0 PYT} + {1853985600 -10800 1 PYST} + {1869102000 -14400 0 PYT} + {1886040000 -10800 1 PYST} + {1900551600 -14400 0 PYT} + {1917489600 -10800 1 PYST} + {1932001200 -14400 0 PYT} + {1948939200 -10800 1 PYST} + {1964055600 -14400 0 PYT} + {1980388800 -10800 1 PYST} + {1995505200 -14400 0 PYT} + {2011838400 -10800 1 PYST} + {2026954800 -14400 0 PYT} + {2043288000 -10800 1 PYST} + {2058404400 -14400 0 PYT} + {2075342400 -10800 1 PYST} + {2089854000 -14400 0 PYT} + {2106792000 -10800 1 PYST} + {2121303600 -14400 0 PYT} + {2138241600 -10800 1 PYST} + {2153358000 -14400 0 PYT} + {2169691200 -10800 1 PYST} + {2184807600 -14400 0 PYT} + {2201140800 -10800 1 PYST} + {2216257200 -14400 0 PYT} + {2233195200 -10800 1 PYST} + {2247706800 -14400 0 PYT} + {2264644800 -10800 1 PYST} + {2279156400 -14400 0 PYT} + {2296094400 -10800 1 PYST} + {2310606000 -14400 0 PYT} + {2327544000 -10800 1 PYST} + {2342660400 -14400 0 PYT} + {2358993600 -10800 1 PYST} + {2374110000 -14400 0 PYT} + {2390443200 -10800 1 PYST} + {2405559600 -14400 0 PYT} + {2422497600 -10800 1 PYST} + {2437009200 -14400 0 PYT} + {2453947200 -10800 1 PYST} + {2468458800 -14400 0 PYT} + {2485396800 -10800 1 PYST} + {2500513200 -14400 0 PYT} + {2516846400 -10800 1 PYST} + {2531962800 -14400 0 PYT} + {2548296000 -10800 1 PYST} + {2563412400 -14400 0 PYT} + {2579745600 -10800 1 PYST} + {2594862000 -14400 0 PYT} + {2611800000 -10800 1 PYST} + {2626311600 -14400 0 PYT} + {2643249600 -10800 1 PYST} + {2657761200 -14400 0 PYT} + {2674699200 -10800 1 PYST} + {2689815600 -14400 0 PYT} + {2706148800 -10800 1 PYST} + {2721265200 -14400 0 PYT} + {2737598400 -10800 1 PYST} + {2752714800 -14400 0 PYT} + {2769652800 -10800 1 PYST} + {2784164400 -14400 0 PYT} + {2801102400 -10800 1 PYST} + {2815614000 -14400 0 PYT} + {2832552000 -10800 1 PYST} + {2847668400 -14400 0 PYT} + {2864001600 -10800 1 PYST} + {2879118000 -14400 0 PYT} + {2895451200 -10800 1 PYST} + {2910567600 -14400 0 PYT} + {2926900800 -10800 1 PYST} + {2942017200 -14400 0 PYT} + {2958955200 -10800 1 PYST} + {2973466800 -14400 0 PYT} + {2990404800 -10800 1 PYST} + {3004916400 -14400 0 PYT} + {3021854400 -10800 1 PYST} + {3036970800 -14400 0 PYT} + {3053304000 -10800 1 PYST} + {3068420400 -14400 0 PYT} + {3084753600 -10800 1 PYST} + {3099870000 -14400 0 PYT} + {3116808000 -10800 1 PYST} + {3131319600 -14400 0 PYT} + {3148257600 -10800 1 PYST} + {3162769200 -14400 0 PYT} + {3179707200 -10800 1 PYST} + {3194218800 -14400 0 PYT} + {3211156800 -10800 1 PYST} + {3226273200 -14400 0 PYT} + {3242606400 -10800 1 PYST} + {3257722800 -14400 0 PYT} + {3274056000 -10800 1 PYST} + {3289172400 -14400 0 PYT} + {3306110400 -10800 1 PYST} + {3320622000 -14400 0 PYT} + {3337560000 -10800 1 PYST} + {3352071600 -14400 0 PYT} + {3369009600 -10800 1 PYST} + {3384126000 -14400 0 PYT} + {3400459200 -10800 1 PYST} + {3415575600 -14400 0 PYT} + {3431908800 -10800 1 PYST} + {3447025200 -14400 0 PYT} + {3463358400 -10800 1 PYST} + {3478474800 -14400 0 PYT} + {3495412800 -10800 1 PYST} + {3509924400 -14400 0 PYT} + {3526862400 -10800 1 PYST} + {3541374000 -14400 0 PYT} + {3558312000 -10800 1 PYST} + {3573428400 -14400 0 PYT} + {3589761600 -10800 1 PYST} + {3604878000 -14400 0 PYT} + {3621211200 -10800 1 PYST} + {3636327600 -14400 0 PYT} + {3653265600 -10800 1 PYST} + {3667777200 -14400 0 PYT} + {3684715200 -10800 1 PYST} + {3699226800 -14400 0 PYT} + {3716164800 -10800 1 PYST} + {3731281200 -14400 0 PYT} + {3747614400 -10800 1 PYST} + {3762730800 -14400 0 PYT} + {3779064000 -10800 1 PYST} + {3794180400 -14400 0 PYT} + {3810513600 -10800 1 PYST} + {3825630000 -14400 0 PYT} + {3842568000 -10800 1 PYST} + {3857079600 -14400 0 PYT} + {3874017600 -10800 1 PYST} + {3888529200 -14400 0 PYT} + {3905467200 -10800 1 PYST} + {3920583600 -14400 0 PYT} + {3936916800 -10800 1 PYST} + {3952033200 -14400 0 PYT} + {3968366400 -10800 1 PYST} + {3983482800 -14400 0 PYT} + {4000420800 -10800 1 PYST} + {4014932400 -14400 0 PYT} + {4031870400 -10800 1 PYST} + {4046382000 -14400 0 PYT} + {4063320000 -10800 1 PYST} + {4077831600 -14400 0 PYT} + {4094769600 -10800 1 PYST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Atikokan b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Atikokan new file mode 100644 index 00000000..e72b04f2 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Atikokan @@ -0,0 +1,12 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Atikokan) { + {-9223372036854775808 -21988 0 LMT} + {-2366733212 -21600 0 CST} + {-1632067200 -18000 1 CDT} + {-1615136400 -21600 0 CST} + {-923248800 -18000 1 CDT} + {-880214400 -18000 0 CWT} + {-769395600 -18000 1 CPT} + {-765388800 -18000 0 EST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Atka b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Atka new file mode 100644 index 00000000..8da33027 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Atka @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Adak)]} { + LoadTimeZoneFile America/Adak +} +set TZData(:America/Atka) $TZData(:America/Adak) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Bahia b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Bahia new file mode 100644 index 00000000..ac67b718 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Bahia @@ -0,0 +1,68 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Bahia) { + {-9223372036854775808 -9244 0 LMT} + {-1767216356 -10800 0 BRT} + {-1206957600 -7200 1 BRST} + {-1191362400 -10800 0 BRT} + {-1175374800 -7200 1 BRST} + {-1159826400 -10800 0 BRT} + {-633819600 -7200 1 BRST} + {-622069200 -10800 0 BRT} + {-602283600 -7200 1 BRST} + {-591832800 -10800 0 BRT} + {-570747600 -7200 1 BRST} + {-560210400 -10800 0 BRT} + {-539125200 -7200 1 BRST} + {-531352800 -10800 0 BRT} + {-191365200 -7200 1 BRST} + {-184197600 -10800 0 BRT} + {-155163600 -7200 1 BRST} + {-150069600 -10800 0 BRT} + {-128898000 -7200 1 BRST} + {-121125600 -10800 0 BRT} + {-99954000 -7200 1 BRST} + {-89589600 -10800 0 BRT} + {-68418000 -7200 1 BRST} + {-57967200 -10800 0 BRT} + {499748400 -7200 1 BRST} + {511236000 -10800 0 BRT} + {530593200 -7200 1 BRST} + {540266400 -10800 0 BRT} + {562129200 -7200 1 BRST} + {571197600 -10800 0 BRT} + {592974000 -7200 1 BRST} + {602042400 -10800 0 BRT} + {624423600 -7200 1 BRST} + {634701600 -10800 0 BRT} + {656478000 -7200 1 BRST} + {666756000 -10800 0 BRT} + {687927600 -7200 1 BRST} + {697600800 -10800 0 BRT} + {719982000 -7200 1 BRST} + {728445600 -10800 0 BRT} + {750826800 -7200 1 BRST} + {761709600 -10800 0 BRT} + {782276400 -7200 1 BRST} + {793159200 -10800 0 BRT} + {813726000 -7200 1 BRST} + {824004000 -10800 0 BRT} + {844570800 -7200 1 BRST} + {856058400 -10800 0 BRT} + {876106800 -7200 1 BRST} + {888717600 -10800 0 BRT} + {908074800 -7200 1 BRST} + {919562400 -10800 0 BRT} + {938919600 -7200 1 BRST} + {951616800 -10800 0 BRT} + {970974000 -7200 1 BRST} + {982461600 -10800 0 BRT} + {1003028400 -7200 1 BRST} + {1013911200 -10800 0 BRT} + {1036292400 -7200 1 BRST} + {1045360800 -10800 0 BRT} + {1064368800 -10800 0 BRT} + {1318734000 -7200 0 BRST} + {1330221600 -10800 0 BRT} + {1350784800 -10800 0 BRT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Bahia_Banderas b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Bahia_Banderas new file mode 100644 index 00000000..8c40a0ed --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Bahia_Banderas @@ -0,0 +1,222 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Bahia_Banderas) { + {-9223372036854775808 -25260 0 LMT} + {-1514739600 -25200 0 MST} + {-1343066400 -21600 0 CST} + {-1234807200 -25200 0 MST} + {-1220292000 -21600 0 CST} + {-1207159200 -25200 0 MST} + {-1191344400 -21600 0 CST} + {-873828000 -25200 0 MST} + {-661539600 -28800 0 PST} + {28800 -25200 0 MST} + {828867600 -21600 1 MDT} + {846403200 -25200 0 MST} + {860317200 -21600 1 MDT} + {877852800 -25200 0 MST} + {891766800 -21600 1 MDT} + {909302400 -25200 0 MST} + {923216400 -21600 1 MDT} + {941356800 -25200 0 MST} + {954666000 -21600 1 MDT} + {972806400 -25200 0 MST} + {989139600 -21600 1 MDT} + {1001836800 -25200 0 MST} + {1018170000 -21600 1 MDT} + {1035705600 -25200 0 MST} + {1049619600 -21600 1 MDT} + {1067155200 -25200 0 MST} + {1081069200 -21600 1 MDT} + {1099209600 -25200 0 MST} + {1112518800 -21600 1 MDT} + {1130659200 -25200 0 MST} + {1143968400 -21600 1 MDT} + {1162108800 -25200 0 MST} + {1175418000 -21600 1 MDT} + {1193558400 -25200 0 MST} + {1207472400 -21600 1 MDT} + {1225008000 -25200 0 MST} + {1238922000 -21600 1 MDT} + {1256457600 -25200 0 MST} + {1270371600 -18000 0 CDT} + {1288508400 -21600 0 CST} + {1301817600 -18000 1 CDT} + {1319958000 -21600 0 CST} + {1333267200 -18000 1 CDT} + {1351407600 -21600 0 CST} + {1365321600 -18000 1 CDT} + {1382857200 -21600 0 CST} + {1396771200 -18000 1 CDT} + {1414306800 -21600 0 CST} + {1428220800 -18000 1 CDT} + {1445756400 -21600 0 CST} + {1459670400 -18000 1 CDT} + {1477810800 -21600 0 CST} + {1491120000 -18000 1 CDT} + {1509260400 -21600 0 CST} + {1522569600 -18000 1 CDT} + {1540710000 -21600 0 CST} + {1554624000 -18000 1 CDT} + {1572159600 -21600 0 CST} + {1586073600 -18000 1 CDT} + {1603609200 -21600 0 CST} + {1617523200 -18000 1 CDT} + {1635663600 -21600 0 CST} + {1648972800 -18000 1 CDT} + {1667113200 -21600 0 CST} + {1680422400 -18000 1 CDT} + {1698562800 -21600 0 CST} + {1712476800 -18000 1 CDT} + {1730012400 -21600 0 CST} + {1743926400 -18000 1 CDT} + {1761462000 -21600 0 CST} + {1775376000 -18000 1 CDT} + {1792911600 -21600 0 CST} + {1806825600 -18000 1 CDT} + {1824966000 -21600 0 CST} + {1838275200 -18000 1 CDT} + {1856415600 -21600 0 CST} + {1869724800 -18000 1 CDT} + {1887865200 -21600 0 CST} + {1901779200 -18000 1 CDT} + {1919314800 -21600 0 CST} + {1933228800 -18000 1 CDT} + {1950764400 -21600 0 CST} + {1964678400 -18000 1 CDT} + {1982818800 -21600 0 CST} + {1996128000 -18000 1 CDT} + {2014268400 -21600 0 CST} + {2027577600 -18000 1 CDT} + {2045718000 -21600 0 CST} + {2059027200 -18000 1 CDT} + {2077167600 -21600 0 CST} + {2091081600 -18000 1 CDT} + {2108617200 -21600 0 CST} + {2122531200 -18000 1 CDT} + {2140066800 -21600 0 CST} + {2153980800 -18000 1 CDT} + {2172121200 -21600 0 CST} + {2185430400 -18000 1 CDT} + {2203570800 -21600 0 CST} + {2216880000 -18000 1 CDT} + {2235020400 -21600 0 CST} + {2248934400 -18000 1 CDT} + {2266470000 -21600 0 CST} + {2280384000 -18000 1 CDT} + {2297919600 -21600 0 CST} + {2311833600 -18000 1 CDT} + {2329369200 -21600 0 CST} + {2343283200 -18000 1 CDT} + {2361423600 -21600 0 CST} + {2374732800 -18000 1 CDT} + {2392873200 -21600 0 CST} + {2406182400 -18000 1 CDT} + {2424322800 -21600 0 CST} + {2438236800 -18000 1 CDT} + {2455772400 -21600 0 CST} + {2469686400 -18000 1 CDT} + {2487222000 -21600 0 CST} + {2501136000 -18000 1 CDT} + {2519276400 -21600 0 CST} + {2532585600 -18000 1 CDT} + {2550726000 -21600 0 CST} + {2564035200 -18000 1 CDT} + {2582175600 -21600 0 CST} + {2596089600 -18000 1 CDT} + {2613625200 -21600 0 CST} + {2627539200 -18000 1 CDT} + {2645074800 -21600 0 CST} + {2658988800 -18000 1 CDT} + {2676524400 -21600 0 CST} + {2690438400 -18000 1 CDT} + {2708578800 -21600 0 CST} + {2721888000 -18000 1 CDT} + {2740028400 -21600 0 CST} + {2753337600 -18000 1 CDT} + {2771478000 -21600 0 CST} + {2785392000 -18000 1 CDT} + {2802927600 -21600 0 CST} + {2816841600 -18000 1 CDT} + {2834377200 -21600 0 CST} + {2848291200 -18000 1 CDT} + {2866431600 -21600 0 CST} + {2879740800 -18000 1 CDT} + {2897881200 -21600 0 CST} + {2911190400 -18000 1 CDT} + {2929330800 -21600 0 CST} + {2942640000 -18000 1 CDT} + {2960780400 -21600 0 CST} + {2974694400 -18000 1 CDT} + {2992230000 -21600 0 CST} + {3006144000 -18000 1 CDT} + {3023679600 -21600 0 CST} + {3037593600 -18000 1 CDT} + {3055734000 -21600 0 CST} + {3069043200 -18000 1 CDT} + {3087183600 -21600 0 CST} + {3100492800 -18000 1 CDT} + {3118633200 -21600 0 CST} + {3132547200 -18000 1 CDT} + {3150082800 -21600 0 CST} + {3163996800 -18000 1 CDT} + {3181532400 -21600 0 CST} + {3195446400 -18000 1 CDT} + {3212982000 -21600 0 CST} + {3226896000 -18000 1 CDT} + {3245036400 -21600 0 CST} + {3258345600 -18000 1 CDT} + {3276486000 -21600 0 CST} + {3289795200 -18000 1 CDT} + {3307935600 -21600 0 CST} + {3321849600 -18000 1 CDT} + {3339385200 -21600 0 CST} + {3353299200 -18000 1 CDT} + {3370834800 -21600 0 CST} + {3384748800 -18000 1 CDT} + {3402889200 -21600 0 CST} + {3416198400 -18000 1 CDT} + {3434338800 -21600 0 CST} + {3447648000 -18000 1 CDT} + {3465788400 -21600 0 CST} + {3479702400 -18000 1 CDT} + {3497238000 -21600 0 CST} + {3511152000 -18000 1 CDT} + {3528687600 -21600 0 CST} + {3542601600 -18000 1 CDT} + {3560137200 -21600 0 CST} + {3574051200 -18000 1 CDT} + {3592191600 -21600 0 CST} + {3605500800 -18000 1 CDT} + {3623641200 -21600 0 CST} + {3636950400 -18000 1 CDT} + {3655090800 -21600 0 CST} + {3669004800 -18000 1 CDT} + {3686540400 -21600 0 CST} + {3700454400 -18000 1 CDT} + {3717990000 -21600 0 CST} + {3731904000 -18000 1 CDT} + {3750044400 -21600 0 CST} + {3763353600 -18000 1 CDT} + {3781494000 -21600 0 CST} + {3794803200 -18000 1 CDT} + {3812943600 -21600 0 CST} + {3826252800 -18000 1 CDT} + {3844393200 -21600 0 CST} + {3858307200 -18000 1 CDT} + {3875842800 -21600 0 CST} + {3889756800 -18000 1 CDT} + {3907292400 -21600 0 CST} + {3921206400 -18000 1 CDT} + {3939346800 -21600 0 CST} + {3952656000 -18000 1 CDT} + {3970796400 -21600 0 CST} + {3984105600 -18000 1 CDT} + {4002246000 -21600 0 CST} + {4016160000 -18000 1 CDT} + {4033695600 -21600 0 CST} + {4047609600 -18000 1 CDT} + {4065145200 -21600 0 CST} + {4079059200 -18000 1 CDT} + {4096594800 -21600 0 CST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Barbados b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Barbados new file mode 100644 index 00000000..ea17073e --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Barbados @@ -0,0 +1,15 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Barbados) { + {-9223372036854775808 -14309 0 LMT} + {-1451678491 -14309 0 BMT} + {-1199217691 -14400 0 AST} + {234943200 -10800 1 ADT} + {244616400 -14400 0 AST} + {261554400 -10800 1 ADT} + {276066000 -14400 0 AST} + {293004000 -10800 1 ADT} + {307515600 -14400 0 AST} + {325058400 -10800 1 ADT} + {338706000 -14400 0 AST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Belem b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Belem new file mode 100644 index 00000000..ed92fd14 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Belem @@ -0,0 +1,35 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Belem) { + {-9223372036854775808 -11636 0 LMT} + {-1767213964 -10800 0 BRT} + {-1206957600 -7200 1 BRST} + {-1191362400 -10800 0 BRT} + {-1175374800 -7200 1 BRST} + {-1159826400 -10800 0 BRT} + {-633819600 -7200 1 BRST} + {-622069200 -10800 0 BRT} + {-602283600 -7200 1 BRST} + {-591832800 -10800 0 BRT} + {-570747600 -7200 1 BRST} + {-560210400 -10800 0 BRT} + {-539125200 -7200 1 BRST} + {-531352800 -10800 0 BRT} + {-191365200 -7200 1 BRST} + {-184197600 -10800 0 BRT} + {-155163600 -7200 1 BRST} + {-150069600 -10800 0 BRT} + {-128898000 -7200 1 BRST} + {-121125600 -10800 0 BRT} + {-99954000 -7200 1 BRST} + {-89589600 -10800 0 BRT} + {-68418000 -7200 1 BRST} + {-57967200 -10800 0 BRT} + {499748400 -7200 1 BRST} + {511236000 -10800 0 BRT} + {530593200 -7200 1 BRST} + {540266400 -10800 0 BRT} + {562129200 -7200 1 BRST} + {571197600 -10800 0 BRT} + {590032800 -10800 0 BRT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Belize b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Belize new file mode 100644 index 00000000..547fd72e --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Belize @@ -0,0 +1,60 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Belize) { + {-9223372036854775808 -21168 0 LMT} + {-1822500432 -21600 0 CST} + {-1616954400 -19800 1 CHDT} + {-1606069800 -21600 0 CST} + {-1585504800 -19800 1 CHDT} + {-1574015400 -21600 0 CST} + {-1554055200 -19800 1 CHDT} + {-1542565800 -21600 0 CST} + {-1522605600 -19800 1 CHDT} + {-1511116200 -21600 0 CST} + {-1490551200 -19800 1 CHDT} + {-1479666600 -21600 0 CST} + {-1459101600 -19800 1 CHDT} + {-1448217000 -21600 0 CST} + {-1427652000 -19800 1 CHDT} + {-1416162600 -21600 0 CST} + {-1396202400 -19800 1 CHDT} + {-1384713000 -21600 0 CST} + {-1364752800 -19800 1 CHDT} + {-1353263400 -21600 0 CST} + {-1333303200 -19800 1 CHDT} + {-1321813800 -21600 0 CST} + {-1301248800 -19800 1 CHDT} + {-1290364200 -21600 0 CST} + {-1269799200 -19800 1 CHDT} + {-1258914600 -21600 0 CST} + {-1238349600 -19800 1 CHDT} + {-1226860200 -21600 0 CST} + {-1206900000 -19800 1 CHDT} + {-1195410600 -21600 0 CST} + {-1175450400 -19800 1 CHDT} + {-1163961000 -21600 0 CST} + {-1143396000 -19800 1 CHDT} + {-1132511400 -21600 0 CST} + {-1111946400 -19800 1 CHDT} + {-1101061800 -21600 0 CST} + {-1080496800 -19800 1 CHDT} + {-1069612200 -21600 0 CST} + {-1049047200 -19800 1 CHDT} + {-1037557800 -21600 0 CST} + {-1017597600 -19800 1 CHDT} + {-1006108200 -21600 0 CST} + {-986148000 -19800 1 CHDT} + {-974658600 -21600 0 CST} + {-954093600 -19800 1 CHDT} + {-943209000 -21600 0 CST} + {-922644000 -19800 1 CHDT} + {-911759400 -21600 0 CST} + {-891194400 -19800 1 CHDT} + {-879705000 -21600 0 CST} + {-859744800 -19800 1 CHDT} + {-848255400 -21600 0 CST} + {123919200 -18000 1 CDT} + {129618000 -21600 0 CST} + {409039200 -18000 1 CDT} + {413874000 -21600 0 CST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Blanc-Sablon b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Blanc-Sablon new file mode 100644 index 00000000..d5485e89 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Blanc-Sablon @@ -0,0 +1,12 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Blanc-Sablon) { + {-9223372036854775808 -13708 0 LMT} + {-2713896692 -14400 0 AST} + {-1632074400 -10800 1 ADT} + {-1615143600 -14400 0 AST} + {-880221600 -10800 1 AWT} + {-769395600 -10800 1 APT} + {-765399600 -14400 0 AST} + {14400 -14400 0 AST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Boa_Vista b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Boa_Vista new file mode 100644 index 00000000..c85bc272 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Boa_Vista @@ -0,0 +1,40 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Boa_Vista) { + {-9223372036854775808 -14560 0 LMT} + {-1767211040 -14400 0 AMT} + {-1206954000 -10800 1 AMST} + {-1191358800 -14400 0 AMT} + {-1175371200 -10800 1 AMST} + {-1159822800 -14400 0 AMT} + {-633816000 -10800 1 AMST} + {-622065600 -14400 0 AMT} + {-602280000 -10800 1 AMST} + {-591829200 -14400 0 AMT} + {-570744000 -10800 1 AMST} + {-560206800 -14400 0 AMT} + {-539121600 -10800 1 AMST} + {-531349200 -14400 0 AMT} + {-191361600 -10800 1 AMST} + {-184194000 -14400 0 AMT} + {-155160000 -10800 1 AMST} + {-150066000 -14400 0 AMT} + {-128894400 -10800 1 AMST} + {-121122000 -14400 0 AMT} + {-99950400 -10800 1 AMST} + {-89586000 -14400 0 AMT} + {-68414400 -10800 1 AMST} + {-57963600 -14400 0 AMT} + {499752000 -10800 1 AMST} + {511239600 -14400 0 AMT} + {530596800 -10800 1 AMST} + {540270000 -14400 0 AMT} + {562132800 -10800 1 AMST} + {571201200 -14400 0 AMT} + {590036400 -14400 0 AMT} + {938664000 -14400 0 AMT} + {938923200 -10800 1 AMST} + {951620400 -14400 0 AMT} + {970977600 -10800 1 AMST} + {971578800 -14400 0 AMT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Bogota b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Bogota new file mode 100644 index 00000000..b28abc15 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Bogota @@ -0,0 +1,9 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Bogota) { + {-9223372036854775808 -17776 0 LMT} + {-2707671824 -17776 0 BMT} + {-1739041424 -18000 0 COT} + {704869200 -14400 1 COST} + {733896000 -18000 0 COT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Boise b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Boise new file mode 100644 index 00000000..62b22a01 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Boise @@ -0,0 +1,281 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Boise) { + {-9223372036854775808 -27889 0 LMT} + {-2717640000 -28800 0 PST} + {-1633269600 -25200 1 PDT} + {-1615129200 -28800 0 PST} + {-1601820000 -25200 1 PDT} + {-1583679600 -28800 0 PST} + {-1471788000 -25200 0 MST} + {-880210800 -21600 1 MWT} + {-769395600 -21600 1 MPT} + {-765388800 -25200 0 MST} + {-84380400 -21600 1 MDT} + {-68659200 -25200 0 MST} + {-52930800 -21600 1 MDT} + {-37209600 -25200 0 MST} + {-21481200 -21600 1 MDT} + {-5760000 -25200 0 MST} + {9968400 -21600 1 MDT} + {25689600 -25200 0 MST} + {41418000 -21600 1 MDT} + {57744000 -25200 0 MST} + {73472400 -21600 1 MDT} + {89193600 -25200 0 MST} + {104922000 -21600 1 MDT} + {120643200 -25200 0 MST} + {126255600 -25200 0 MST} + {129114000 -21600 0 MDT} + {152092800 -25200 0 MST} + {162378000 -21600 1 MDT} + {183542400 -25200 0 MST} + {199270800 -21600 1 MDT} + {215596800 -25200 0 MST} + {230720400 -21600 1 MDT} + {247046400 -25200 0 MST} + {262774800 -21600 1 MDT} + {278496000 -25200 0 MST} + {294224400 -21600 1 MDT} + {309945600 -25200 0 MST} + {325674000 -21600 1 MDT} + {341395200 -25200 0 MST} + {357123600 -21600 1 MDT} + {372844800 -25200 0 MST} + {388573200 -21600 1 MDT} + {404899200 -25200 0 MST} + {420022800 -21600 1 MDT} + {436348800 -25200 0 MST} + {452077200 -21600 1 MDT} + {467798400 -25200 0 MST} + {483526800 -21600 1 MDT} + {499248000 -25200 0 MST} + {514976400 -21600 1 MDT} + {530697600 -25200 0 MST} + {544611600 -21600 1 MDT} + {562147200 -25200 0 MST} + {576061200 -21600 1 MDT} + {594201600 -25200 0 MST} + {607510800 -21600 1 MDT} + {625651200 -25200 0 MST} + {638960400 -21600 1 MDT} + {657100800 -25200 0 MST} + {671014800 -21600 1 MDT} + {688550400 -25200 0 MST} + {702464400 -21600 1 MDT} + {720000000 -25200 0 MST} + {733914000 -21600 1 MDT} + {752054400 -25200 0 MST} + {765363600 -21600 1 MDT} + {783504000 -25200 0 MST} + {796813200 -21600 1 MDT} + {814953600 -25200 0 MST} + {828867600 -21600 1 MDT} + {846403200 -25200 0 MST} + {860317200 -21600 1 MDT} + {877852800 -25200 0 MST} + {891766800 -21600 1 MDT} + {909302400 -25200 0 MST} + {923216400 -21600 1 MDT} + {941356800 -25200 0 MST} + {954666000 -21600 1 MDT} + {972806400 -25200 0 MST} + {986115600 -21600 1 MDT} + {1004256000 -25200 0 MST} + {1018170000 -21600 1 MDT} + {1035705600 -25200 0 MST} + {1049619600 -21600 1 MDT} + {1067155200 -25200 0 MST} + {1081069200 -21600 1 MDT} + {1099209600 -25200 0 MST} + {1112518800 -21600 1 MDT} + {1130659200 -25200 0 MST} + {1143968400 -21600 1 MDT} + {1162108800 -25200 0 MST} + {1173603600 -21600 1 MDT} + {1194163200 -25200 0 MST} + {1205053200 -21600 1 MDT} + {1225612800 -25200 0 MST} + {1236502800 -21600 1 MDT} + {1257062400 -25200 0 MST} + {1268557200 -21600 1 MDT} + {1289116800 -25200 0 MST} + {1300006800 -21600 1 MDT} + {1320566400 -25200 0 MST} + {1331456400 -21600 1 MDT} + {1352016000 -25200 0 MST} + {1362906000 -21600 1 MDT} + {1383465600 -25200 0 MST} + {1394355600 -21600 1 MDT} + {1414915200 -25200 0 MST} + {1425805200 -21600 1 MDT} + {1446364800 -25200 0 MST} + {1457859600 -21600 1 MDT} + {1478419200 -25200 0 MST} + {1489309200 -21600 1 MDT} + {1509868800 -25200 0 MST} + {1520758800 -21600 1 MDT} + {1541318400 -25200 0 MST} + {1552208400 -21600 1 MDT} + {1572768000 -25200 0 MST} + {1583658000 -21600 1 MDT} + {1604217600 -25200 0 MST} + {1615712400 -21600 1 MDT} + {1636272000 -25200 0 MST} + {1647162000 -21600 1 MDT} + {1667721600 -25200 0 MST} + {1678611600 -21600 1 MDT} + {1699171200 -25200 0 MST} + {1710061200 -21600 1 MDT} + {1730620800 -25200 0 MST} + {1741510800 -21600 1 MDT} + {1762070400 -25200 0 MST} + {1772960400 -21600 1 MDT} + {1793520000 -25200 0 MST} + {1805014800 -21600 1 MDT} + {1825574400 -25200 0 MST} + {1836464400 -21600 1 MDT} + {1857024000 -25200 0 MST} + {1867914000 -21600 1 MDT} + {1888473600 -25200 0 MST} + {1899363600 -21600 1 MDT} + {1919923200 -25200 0 MST} + {1930813200 -21600 1 MDT} + {1951372800 -25200 0 MST} + {1962867600 -21600 1 MDT} + {1983427200 -25200 0 MST} + {1994317200 -21600 1 MDT} + {2014876800 -25200 0 MST} + {2025766800 -21600 1 MDT} + {2046326400 -25200 0 MST} + {2057216400 -21600 1 MDT} + {2077776000 -25200 0 MST} + {2088666000 -21600 1 MDT} + {2109225600 -25200 0 MST} + {2120115600 -21600 1 MDT} + {2140675200 -25200 0 MST} + {2152170000 -21600 1 MDT} + {2172729600 -25200 0 MST} + {2183619600 -21600 1 MDT} + {2204179200 -25200 0 MST} + {2215069200 -21600 1 MDT} + {2235628800 -25200 0 MST} + {2246518800 -21600 1 MDT} + {2267078400 -25200 0 MST} + {2277968400 -21600 1 MDT} + {2298528000 -25200 0 MST} + {2309418000 -21600 1 MDT} + {2329977600 -25200 0 MST} + {2341472400 -21600 1 MDT} + {2362032000 -25200 0 MST} + {2372922000 -21600 1 MDT} + {2393481600 -25200 0 MST} + {2404371600 -21600 1 MDT} + {2424931200 -25200 0 MST} + {2435821200 -21600 1 MDT} + {2456380800 -25200 0 MST} + {2467270800 -21600 1 MDT} + {2487830400 -25200 0 MST} + {2499325200 -21600 1 MDT} + {2519884800 -25200 0 MST} + {2530774800 -21600 1 MDT} + {2551334400 -25200 0 MST} + {2562224400 -21600 1 MDT} + {2582784000 -25200 0 MST} + {2593674000 -21600 1 MDT} + {2614233600 -25200 0 MST} + {2625123600 -21600 1 MDT} + {2645683200 -25200 0 MST} + {2656573200 -21600 1 MDT} + {2677132800 -25200 0 MST} + {2688627600 -21600 1 MDT} + {2709187200 -25200 0 MST} + {2720077200 -21600 1 MDT} + {2740636800 -25200 0 MST} + {2751526800 -21600 1 MDT} + {2772086400 -25200 0 MST} + {2782976400 -21600 1 MDT} + {2803536000 -25200 0 MST} + {2814426000 -21600 1 MDT} + {2834985600 -25200 0 MST} + {2846480400 -21600 1 MDT} + {2867040000 -25200 0 MST} + {2877930000 -21600 1 MDT} + {2898489600 -25200 0 MST} + {2909379600 -21600 1 MDT} + {2929939200 -25200 0 MST} + {2940829200 -21600 1 MDT} + {2961388800 -25200 0 MST} + {2972278800 -21600 1 MDT} + {2992838400 -25200 0 MST} + {3003728400 -21600 1 MDT} + {3024288000 -25200 0 MST} + {3035782800 -21600 1 MDT} + {3056342400 -25200 0 MST} + {3067232400 -21600 1 MDT} + {3087792000 -25200 0 MST} + {3098682000 -21600 1 MDT} + {3119241600 -25200 0 MST} + {3130131600 -21600 1 MDT} + {3150691200 -25200 0 MST} + {3161581200 -21600 1 MDT} + {3182140800 -25200 0 MST} + {3193030800 -21600 1 MDT} + {3213590400 -25200 0 MST} + {3225085200 -21600 1 MDT} + {3245644800 -25200 0 MST} + {3256534800 -21600 1 MDT} + {3277094400 -25200 0 MST} + {3287984400 -21600 1 MDT} + {3308544000 -25200 0 MST} + {3319434000 -21600 1 MDT} + {3339993600 -25200 0 MST} + {3350883600 -21600 1 MDT} + {3371443200 -25200 0 MST} + {3382938000 -21600 1 MDT} + {3403497600 -25200 0 MST} + {3414387600 -21600 1 MDT} + {3434947200 -25200 0 MST} + {3445837200 -21600 1 MDT} + {3466396800 -25200 0 MST} + {3477286800 -21600 1 MDT} + {3497846400 -25200 0 MST} + {3508736400 -21600 1 MDT} + {3529296000 -25200 0 MST} + {3540186000 -21600 1 MDT} + {3560745600 -25200 0 MST} + {3572240400 -21600 1 MDT} + {3592800000 -25200 0 MST} + {3603690000 -21600 1 MDT} + {3624249600 -25200 0 MST} + {3635139600 -21600 1 MDT} + {3655699200 -25200 0 MST} + {3666589200 -21600 1 MDT} + {3687148800 -25200 0 MST} + {3698038800 -21600 1 MDT} + {3718598400 -25200 0 MST} + {3730093200 -21600 1 MDT} + {3750652800 -25200 0 MST} + {3761542800 -21600 1 MDT} + {3782102400 -25200 0 MST} + {3792992400 -21600 1 MDT} + {3813552000 -25200 0 MST} + {3824442000 -21600 1 MDT} + {3845001600 -25200 0 MST} + {3855891600 -21600 1 MDT} + {3876451200 -25200 0 MST} + {3887341200 -21600 1 MDT} + {3907900800 -25200 0 MST} + {3919395600 -21600 1 MDT} + {3939955200 -25200 0 MST} + {3950845200 -21600 1 MDT} + {3971404800 -25200 0 MST} + {3982294800 -21600 1 MDT} + {4002854400 -25200 0 MST} + {4013744400 -21600 1 MDT} + {4034304000 -25200 0 MST} + {4045194000 -21600 1 MDT} + {4065753600 -25200 0 MST} + {4076643600 -21600 1 MDT} + {4097203200 -25200 0 MST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Buenos_Aires b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Buenos_Aires new file mode 100644 index 00000000..13891954 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Buenos_Aires @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Argentina/Buenos_Aires)]} { + LoadTimeZoneFile America/Argentina/Buenos_Aires +} +set TZData(:America/Buenos_Aires) $TZData(:America/Argentina/Buenos_Aires) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Cambridge_Bay b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Cambridge_Bay new file mode 100644 index 00000000..23004bb5 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Cambridge_Bay @@ -0,0 +1,252 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Cambridge_Bay) { + {-9223372036854775808 0 0 zzz} + {-1577923200 -25200 0 MST} + {-880210800 -21600 1 MWT} + {-769395600 -21600 1 MPT} + {-765388800 -25200 0 MST} + {-147891600 -18000 1 MDDT} + {-131562000 -25200 0 MST} + {325674000 -21600 1 MDT} + {341395200 -25200 0 MST} + {357123600 -21600 1 MDT} + {372844800 -25200 0 MST} + {388573200 -21600 1 MDT} + {404899200 -25200 0 MST} + {420022800 -21600 1 MDT} + {436348800 -25200 0 MST} + {452077200 -21600 1 MDT} + {467798400 -25200 0 MST} + {483526800 -21600 1 MDT} + {499248000 -25200 0 MST} + {514976400 -21600 1 MDT} + {530697600 -25200 0 MST} + {544611600 -21600 1 MDT} + {562147200 -25200 0 MST} + {576061200 -21600 1 MDT} + {594201600 -25200 0 MST} + {607510800 -21600 1 MDT} + {625651200 -25200 0 MST} + {638960400 -21600 1 MDT} + {657100800 -25200 0 MST} + {671014800 -21600 1 MDT} + {688550400 -25200 0 MST} + {702464400 -21600 1 MDT} + {720000000 -25200 0 MST} + {733914000 -21600 1 MDT} + {752054400 -25200 0 MST} + {765363600 -21600 1 MDT} + {783504000 -25200 0 MST} + {796813200 -21600 1 MDT} + {814953600 -25200 0 MST} + {828867600 -21600 1 MDT} + {846403200 -25200 0 MST} + {860317200 -21600 1 MDT} + {877852800 -25200 0 MST} + {891766800 -21600 1 MDT} + {909302400 -25200 0 MST} + {923216400 -21600 1 MDT} + {941360400 -21600 0 CST} + {954662400 -18000 1 CDT} + {972806400 -18000 0 EST} + {973400400 -21600 0 CST} + {986115600 -21600 0 MDT} + {1004256000 -25200 0 MST} + {1018170000 -21600 1 MDT} + {1035705600 -25200 0 MST} + {1049619600 -21600 1 MDT} + {1067155200 -25200 0 MST} + {1081069200 -21600 1 MDT} + {1099209600 -25200 0 MST} + {1112518800 -21600 1 MDT} + {1130659200 -25200 0 MST} + {1143968400 -21600 1 MDT} + {1162108800 -25200 0 MST} + {1173603600 -21600 1 MDT} + {1194163200 -25200 0 MST} + {1205053200 -21600 1 MDT} + {1225612800 -25200 0 MST} + {1236502800 -21600 1 MDT} + {1257062400 -25200 0 MST} + {1268557200 -21600 1 MDT} + {1289116800 -25200 0 MST} + {1300006800 -21600 1 MDT} + {1320566400 -25200 0 MST} + {1331456400 -21600 1 MDT} + {1352016000 -25200 0 MST} + {1362906000 -21600 1 MDT} + {1383465600 -25200 0 MST} + {1394355600 -21600 1 MDT} + {1414915200 -25200 0 MST} + {1425805200 -21600 1 MDT} + {1446364800 -25200 0 MST} + {1457859600 -21600 1 MDT} + {1478419200 -25200 0 MST} + {1489309200 -21600 1 MDT} + {1509868800 -25200 0 MST} + {1520758800 -21600 1 MDT} + {1541318400 -25200 0 MST} + {1552208400 -21600 1 MDT} + {1572768000 -25200 0 MST} + {1583658000 -21600 1 MDT} + {1604217600 -25200 0 MST} + {1615712400 -21600 1 MDT} + {1636272000 -25200 0 MST} + {1647162000 -21600 1 MDT} + {1667721600 -25200 0 MST} + {1678611600 -21600 1 MDT} + {1699171200 -25200 0 MST} + {1710061200 -21600 1 MDT} + {1730620800 -25200 0 MST} + {1741510800 -21600 1 MDT} + {1762070400 -25200 0 MST} + {1772960400 -21600 1 MDT} + {1793520000 -25200 0 MST} + {1805014800 -21600 1 MDT} + {1825574400 -25200 0 MST} + {1836464400 -21600 1 MDT} + {1857024000 -25200 0 MST} + {1867914000 -21600 1 MDT} + {1888473600 -25200 0 MST} + {1899363600 -21600 1 MDT} + {1919923200 -25200 0 MST} + {1930813200 -21600 1 MDT} + {1951372800 -25200 0 MST} + {1962867600 -21600 1 MDT} + {1983427200 -25200 0 MST} + {1994317200 -21600 1 MDT} + {2014876800 -25200 0 MST} + {2025766800 -21600 1 MDT} + {2046326400 -25200 0 MST} + {2057216400 -21600 1 MDT} + {2077776000 -25200 0 MST} + {2088666000 -21600 1 MDT} + {2109225600 -25200 0 MST} + {2120115600 -21600 1 MDT} + {2140675200 -25200 0 MST} + {2152170000 -21600 1 MDT} + {2172729600 -25200 0 MST} + {2183619600 -21600 1 MDT} + {2204179200 -25200 0 MST} + {2215069200 -21600 1 MDT} + {2235628800 -25200 0 MST} + {2246518800 -21600 1 MDT} + {2267078400 -25200 0 MST} + {2277968400 -21600 1 MDT} + {2298528000 -25200 0 MST} + {2309418000 -21600 1 MDT} + {2329977600 -25200 0 MST} + {2341472400 -21600 1 MDT} + {2362032000 -25200 0 MST} + {2372922000 -21600 1 MDT} + {2393481600 -25200 0 MST} + {2404371600 -21600 1 MDT} + {2424931200 -25200 0 MST} + {2435821200 -21600 1 MDT} + {2456380800 -25200 0 MST} + {2467270800 -21600 1 MDT} + {2487830400 -25200 0 MST} + {2499325200 -21600 1 MDT} + {2519884800 -25200 0 MST} + {2530774800 -21600 1 MDT} + {2551334400 -25200 0 MST} + {2562224400 -21600 1 MDT} + {2582784000 -25200 0 MST} + {2593674000 -21600 1 MDT} + {2614233600 -25200 0 MST} + {2625123600 -21600 1 MDT} + {2645683200 -25200 0 MST} + {2656573200 -21600 1 MDT} + {2677132800 -25200 0 MST} + {2688627600 -21600 1 MDT} + {2709187200 -25200 0 MST} + {2720077200 -21600 1 MDT} + {2740636800 -25200 0 MST} + {2751526800 -21600 1 MDT} + {2772086400 -25200 0 MST} + {2782976400 -21600 1 MDT} + {2803536000 -25200 0 MST} + {2814426000 -21600 1 MDT} + {2834985600 -25200 0 MST} + {2846480400 -21600 1 MDT} + {2867040000 -25200 0 MST} + {2877930000 -21600 1 MDT} + {2898489600 -25200 0 MST} + {2909379600 -21600 1 MDT} + {2929939200 -25200 0 MST} + {2940829200 -21600 1 MDT} + {2961388800 -25200 0 MST} + {2972278800 -21600 1 MDT} + {2992838400 -25200 0 MST} + {3003728400 -21600 1 MDT} + {3024288000 -25200 0 MST} + {3035782800 -21600 1 MDT} + {3056342400 -25200 0 MST} + {3067232400 -21600 1 MDT} + {3087792000 -25200 0 MST} + {3098682000 -21600 1 MDT} + {3119241600 -25200 0 MST} + {3130131600 -21600 1 MDT} + {3150691200 -25200 0 MST} + {3161581200 -21600 1 MDT} + {3182140800 -25200 0 MST} + {3193030800 -21600 1 MDT} + {3213590400 -25200 0 MST} + {3225085200 -21600 1 MDT} + {3245644800 -25200 0 MST} + {3256534800 -21600 1 MDT} + {3277094400 -25200 0 MST} + {3287984400 -21600 1 MDT} + {3308544000 -25200 0 MST} + {3319434000 -21600 1 MDT} + {3339993600 -25200 0 MST} + {3350883600 -21600 1 MDT} + {3371443200 -25200 0 MST} + {3382938000 -21600 1 MDT} + {3403497600 -25200 0 MST} + {3414387600 -21600 1 MDT} + {3434947200 -25200 0 MST} + {3445837200 -21600 1 MDT} + {3466396800 -25200 0 MST} + {3477286800 -21600 1 MDT} + {3497846400 -25200 0 MST} + {3508736400 -21600 1 MDT} + {3529296000 -25200 0 MST} + {3540186000 -21600 1 MDT} + {3560745600 -25200 0 MST} + {3572240400 -21600 1 MDT} + {3592800000 -25200 0 MST} + {3603690000 -21600 1 MDT} + {3624249600 -25200 0 MST} + {3635139600 -21600 1 MDT} + {3655699200 -25200 0 MST} + {3666589200 -21600 1 MDT} + {3687148800 -25200 0 MST} + {3698038800 -21600 1 MDT} + {3718598400 -25200 0 MST} + {3730093200 -21600 1 MDT} + {3750652800 -25200 0 MST} + {3761542800 -21600 1 MDT} + {3782102400 -25200 0 MST} + {3792992400 -21600 1 MDT} + {3813552000 -25200 0 MST} + {3824442000 -21600 1 MDT} + {3845001600 -25200 0 MST} + {3855891600 -21600 1 MDT} + {3876451200 -25200 0 MST} + {3887341200 -21600 1 MDT} + {3907900800 -25200 0 MST} + {3919395600 -21600 1 MDT} + {3939955200 -25200 0 MST} + {3950845200 -21600 1 MDT} + {3971404800 -25200 0 MST} + {3982294800 -21600 1 MDT} + {4002854400 -25200 0 MST} + {4013744400 -21600 1 MDT} + {4034304000 -25200 0 MST} + {4045194000 -21600 1 MDT} + {4065753600 -25200 0 MST} + {4076643600 -21600 1 MDT} + {4097203200 -25200 0 MST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Campo_Grande b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Campo_Grande new file mode 100644 index 00000000..2cafe14b --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Campo_Grande @@ -0,0 +1,257 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Campo_Grande) { + {-9223372036854775808 -13108 0 LMT} + {-1767212492 -14400 0 AMT} + {-1206954000 -10800 1 AMST} + {-1191358800 -14400 0 AMT} + {-1175371200 -10800 1 AMST} + {-1159822800 -14400 0 AMT} + {-633816000 -10800 1 AMST} + {-622065600 -14400 0 AMT} + {-602280000 -10800 1 AMST} + {-591829200 -14400 0 AMT} + {-570744000 -10800 1 AMST} + {-560206800 -14400 0 AMT} + {-539121600 -10800 1 AMST} + {-531349200 -14400 0 AMT} + {-191361600 -10800 1 AMST} + {-184194000 -14400 0 AMT} + {-155160000 -10800 1 AMST} + {-150066000 -14400 0 AMT} + {-128894400 -10800 1 AMST} + {-121122000 -14400 0 AMT} + {-99950400 -10800 1 AMST} + {-89586000 -14400 0 AMT} + {-68414400 -10800 1 AMST} + {-57963600 -14400 0 AMT} + {499752000 -10800 1 AMST} + {511239600 -14400 0 AMT} + {530596800 -10800 1 AMST} + {540270000 -14400 0 AMT} + {562132800 -10800 1 AMST} + {571201200 -14400 0 AMT} + {592977600 -10800 1 AMST} + {602046000 -14400 0 AMT} + {624427200 -10800 1 AMST} + {634705200 -14400 0 AMT} + {656481600 -10800 1 AMST} + {666759600 -14400 0 AMT} + {687931200 -10800 1 AMST} + {697604400 -14400 0 AMT} + {719985600 -10800 1 AMST} + {728449200 -14400 0 AMT} + {750830400 -10800 1 AMST} + {761713200 -14400 0 AMT} + {782280000 -10800 1 AMST} + {793162800 -14400 0 AMT} + {813729600 -10800 1 AMST} + {824007600 -14400 0 AMT} + {844574400 -10800 1 AMST} + {856062000 -14400 0 AMT} + {876110400 -10800 1 AMST} + {888721200 -14400 0 AMT} + {908078400 -10800 1 AMST} + {919566000 -14400 0 AMT} + {938923200 -10800 1 AMST} + {951620400 -14400 0 AMT} + {970977600 -10800 1 AMST} + {982465200 -14400 0 AMT} + {1003032000 -10800 1 AMST} + {1013914800 -14400 0 AMT} + {1036296000 -10800 1 AMST} + {1045364400 -14400 0 AMT} + {1066536000 -10800 1 AMST} + {1076814000 -14400 0 AMT} + {1099368000 -10800 1 AMST} + {1108868400 -14400 0 AMT} + {1129435200 -10800 1 AMST} + {1140318000 -14400 0 AMT} + {1162699200 -10800 1 AMST} + {1172372400 -14400 0 AMT} + {1192334400 -10800 1 AMST} + {1203217200 -14400 0 AMT} + {1224388800 -10800 1 AMST} + {1234666800 -14400 0 AMT} + {1255838400 -10800 1 AMST} + {1266721200 -14400 0 AMT} + {1287288000 -10800 1 AMST} + {1298170800 -14400 0 AMT} + {1318737600 -10800 1 AMST} + {1330225200 -14400 0 AMT} + {1350792000 -10800 1 AMST} + {1361070000 -14400 0 AMT} + {1382241600 -10800 1 AMST} + {1392519600 -14400 0 AMT} + {1413691200 -10800 1 AMST} + {1424574000 -14400 0 AMT} + {1445140800 -10800 1 AMST} + {1456023600 -14400 0 AMT} + {1476590400 -10800 1 AMST} + {1487473200 -14400 0 AMT} + {1508040000 -10800 1 AMST} + {1518922800 -14400 0 AMT} + {1540094400 -10800 1 AMST} + {1550372400 -14400 0 AMT} + {1571544000 -10800 1 AMST} + {1581822000 -14400 0 AMT} + {1602993600 -10800 1 AMST} + {1613876400 -14400 0 AMT} + {1634443200 -10800 1 AMST} + {1645326000 -14400 0 AMT} + {1665892800 -10800 1 AMST} + {1677380400 -14400 0 AMT} + {1697342400 -10800 1 AMST} + {1708225200 -14400 0 AMT} + {1729396800 -10800 1 AMST} + {1739674800 -14400 0 AMT} + {1760846400 -10800 1 AMST} + {1771729200 -14400 0 AMT} + {1792296000 -10800 1 AMST} + {1803178800 -14400 0 AMT} + {1823745600 -10800 1 AMST} + {1834628400 -14400 0 AMT} + {1855195200 -10800 1 AMST} + {1866078000 -14400 0 AMT} + {1887249600 -10800 1 AMST} + {1897527600 -14400 0 AMT} + {1918699200 -10800 1 AMST} + {1928977200 -14400 0 AMT} + {1950148800 -10800 1 AMST} + {1960426800 -14400 0 AMT} + {1981598400 -10800 1 AMST} + {1992481200 -14400 0 AMT} + {2013048000 -10800 1 AMST} + {2024535600 -14400 0 AMT} + {2044497600 -10800 1 AMST} + {2055380400 -14400 0 AMT} + {2076552000 -10800 1 AMST} + {2086830000 -14400 0 AMT} + {2108001600 -10800 1 AMST} + {2118884400 -14400 0 AMT} + {2139451200 -10800 1 AMST} + {2150334000 -14400 0 AMT} + {2170900800 -10800 1 AMST} + {2181783600 -14400 0 AMT} + {2202350400 -10800 1 AMST} + {2213233200 -14400 0 AMT} + {2234404800 -10800 1 AMST} + {2244682800 -14400 0 AMT} + {2265854400 -10800 1 AMST} + {2276132400 -14400 0 AMT} + {2297304000 -10800 1 AMST} + {2307582000 -14400 0 AMT} + {2328753600 -10800 1 AMST} + {2339636400 -14400 0 AMT} + {2360203200 -10800 1 AMST} + {2371086000 -14400 0 AMT} + {2391652800 -10800 1 AMST} + {2402535600 -14400 0 AMT} + {2423707200 -10800 1 AMST} + {2433985200 -14400 0 AMT} + {2455156800 -10800 1 AMST} + {2465434800 -14400 0 AMT} + {2486606400 -10800 1 AMST} + {2497489200 -14400 0 AMT} + {2518056000 -10800 1 AMST} + {2528938800 -14400 0 AMT} + {2549505600 -10800 1 AMST} + {2560388400 -14400 0 AMT} + {2580955200 -10800 1 AMST} + {2591838000 -14400 0 AMT} + {2613009600 -10800 1 AMST} + {2623287600 -14400 0 AMT} + {2644459200 -10800 1 AMST} + {2654737200 -14400 0 AMT} + {2675908800 -10800 1 AMST} + {2686791600 -14400 0 AMT} + {2707358400 -10800 1 AMST} + {2718241200 -14400 0 AMT} + {2738808000 -10800 1 AMST} + {2749690800 -14400 0 AMT} + {2770862400 -10800 1 AMST} + {2781140400 -14400 0 AMT} + {2802312000 -10800 1 AMST} + {2812590000 -14400 0 AMT} + {2833761600 -10800 1 AMST} + {2844039600 -14400 0 AMT} + {2865211200 -10800 1 AMST} + {2876094000 -14400 0 AMT} + {2896660800 -10800 1 AMST} + {2907543600 -14400 0 AMT} + {2928110400 -10800 1 AMST} + {2938993200 -14400 0 AMT} + {2960164800 -10800 1 AMST} + {2970442800 -14400 0 AMT} + {2991614400 -10800 1 AMST} + {3001892400 -14400 0 AMT} + {3023064000 -10800 1 AMST} + {3033946800 -14400 0 AMT} + {3054513600 -10800 1 AMST} + {3065396400 -14400 0 AMT} + {3085963200 -10800 1 AMST} + {3096846000 -14400 0 AMT} + {3118017600 -10800 1 AMST} + {3128295600 -14400 0 AMT} + {3149467200 -10800 1 AMST} + {3159745200 -14400 0 AMT} + {3180916800 -10800 1 AMST} + {3191194800 -14400 0 AMT} + {3212366400 -10800 1 AMST} + {3223249200 -14400 0 AMT} + {3243816000 -10800 1 AMST} + {3254698800 -14400 0 AMT} + {3275265600 -10800 1 AMST} + {3286148400 -14400 0 AMT} + {3307320000 -10800 1 AMST} + {3317598000 -14400 0 AMT} + {3338769600 -10800 1 AMST} + {3349047600 -14400 0 AMT} + {3370219200 -10800 1 AMST} + {3381102000 -14400 0 AMT} + {3401668800 -10800 1 AMST} + {3412551600 -14400 0 AMT} + {3433118400 -10800 1 AMST} + {3444001200 -14400 0 AMT} + {3464568000 -10800 1 AMST} + {3475450800 -14400 0 AMT} + {3496622400 -10800 1 AMST} + {3506900400 -14400 0 AMT} + {3528072000 -10800 1 AMST} + {3538350000 -14400 0 AMT} + {3559521600 -10800 1 AMST} + {3570404400 -14400 0 AMT} + {3590971200 -10800 1 AMST} + {3601854000 -14400 0 AMT} + {3622420800 -10800 1 AMST} + {3633303600 -14400 0 AMT} + {3654475200 -10800 1 AMST} + {3664753200 -14400 0 AMT} + {3685924800 -10800 1 AMST} + {3696202800 -14400 0 AMT} + {3717374400 -10800 1 AMST} + {3727652400 -14400 0 AMT} + {3748824000 -10800 1 AMST} + {3759706800 -14400 0 AMT} + {3780273600 -10800 1 AMST} + {3791156400 -14400 0 AMT} + {3811723200 -10800 1 AMST} + {3822606000 -14400 0 AMT} + {3843777600 -10800 1 AMST} + {3854055600 -14400 0 AMT} + {3875227200 -10800 1 AMST} + {3885505200 -14400 0 AMT} + {3906676800 -10800 1 AMST} + {3917559600 -14400 0 AMT} + {3938126400 -10800 1 AMST} + {3949009200 -14400 0 AMT} + {3969576000 -10800 1 AMST} + {3980458800 -14400 0 AMT} + {4001630400 -10800 1 AMST} + {4011908400 -14400 0 AMT} + {4033080000 -10800 1 AMST} + {4043358000 -14400 0 AMT} + {4064529600 -10800 1 AMST} + {4074807600 -14400 0 AMT} + {4095979200 -10800 1 AMST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Cancun b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Cancun new file mode 100644 index 00000000..fe5a0609 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Cancun @@ -0,0 +1,47 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Cancun) { + {-9223372036854775808 -20824 0 LMT} + {-1514743200 -21600 0 CST} + {377935200 -18000 0 EST} + {828860400 -14400 1 EDT} + {846396000 -18000 0 EST} + {860310000 -14400 1 EDT} + {877845600 -18000 0 EST} + {891759600 -14400 1 EDT} + {902041200 -18000 0 CDT} + {909298800 -21600 0 CST} + {923212800 -18000 1 CDT} + {941353200 -21600 0 CST} + {954662400 -18000 1 CDT} + {972802800 -21600 0 CST} + {989136000 -18000 1 CDT} + {1001833200 -21600 0 CST} + {1018166400 -18000 1 CDT} + {1035702000 -21600 0 CST} + {1049616000 -18000 1 CDT} + {1067151600 -21600 0 CST} + {1081065600 -18000 1 CDT} + {1099206000 -21600 0 CST} + {1112515200 -18000 1 CDT} + {1130655600 -21600 0 CST} + {1143964800 -18000 1 CDT} + {1162105200 -21600 0 CST} + {1175414400 -18000 1 CDT} + {1193554800 -21600 0 CST} + {1207468800 -18000 1 CDT} + {1225004400 -21600 0 CST} + {1238918400 -18000 1 CDT} + {1256454000 -21600 0 CST} + {1270368000 -18000 1 CDT} + {1288508400 -21600 0 CST} + {1301817600 -18000 1 CDT} + {1319958000 -21600 0 CST} + {1333267200 -18000 1 CDT} + {1351407600 -21600 0 CST} + {1365321600 -18000 1 CDT} + {1382857200 -21600 0 CST} + {1396771200 -18000 1 CDT} + {1414306800 -21600 0 CST} + {1422777600 -18000 0 EST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Caracas b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Caracas new file mode 100644 index 00000000..2ba87ae8 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Caracas @@ -0,0 +1,9 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Caracas) { + {-9223372036854775808 -16064 0 LMT} + {-2524505536 -16060 0 CMT} + {-1826739140 -16200 0 VET} + {-157750200 -14400 0 VET} + {1197183600 -16200 0 VET} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Catamarca b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Catamarca new file mode 100644 index 00000000..01c8ab6d --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Catamarca @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Argentina/Catamarca)]} { + LoadTimeZoneFile America/Argentina/Catamarca +} +set TZData(:America/Catamarca) $TZData(:America/Argentina/Catamarca) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Cayenne b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Cayenne new file mode 100644 index 00000000..de3d65be --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Cayenne @@ -0,0 +1,7 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Cayenne) { + {-9223372036854775808 -12560 0 LMT} + {-1846269040 -14400 0 GFT} + {-71092800 -10800 0 GFT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Cayman b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Cayman new file mode 100644 index 00000000..5231ca98 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Cayman @@ -0,0 +1,176 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Cayman) { + {-9223372036854775808 -19532 0 LMT} + {-2524502068 -18431 0 KMT} + {-1827687169 -18000 0 EST} + {1451624400 -18000 0 EST} + {1457852400 -14400 1 EDT} + {1478412000 -18000 0 EST} + {1489302000 -14400 1 EDT} + {1509861600 -18000 0 EST} + {1520751600 -14400 1 EDT} + {1541311200 -18000 0 EST} + {1552201200 -14400 1 EDT} + {1572760800 -18000 0 EST} + {1583650800 -14400 1 EDT} + {1604210400 -18000 0 EST} + {1615705200 -14400 1 EDT} + {1636264800 -18000 0 EST} + {1647154800 -14400 1 EDT} + {1667714400 -18000 0 EST} + {1678604400 -14400 1 EDT} + {1699164000 -18000 0 EST} + {1710054000 -14400 1 EDT} + {1730613600 -18000 0 EST} + {1741503600 -14400 1 EDT} + {1762063200 -18000 0 EST} + {1772953200 -14400 1 EDT} + {1793512800 -18000 0 EST} + {1805007600 -14400 1 EDT} + {1825567200 -18000 0 EST} + {1836457200 -14400 1 EDT} + {1857016800 -18000 0 EST} + {1867906800 -14400 1 EDT} + {1888466400 -18000 0 EST} + {1899356400 -14400 1 EDT} + {1919916000 -18000 0 EST} + {1930806000 -14400 1 EDT} + {1951365600 -18000 0 EST} + {1962860400 -14400 1 EDT} + {1983420000 -18000 0 EST} + {1994310000 -14400 1 EDT} + {2014869600 -18000 0 EST} + {2025759600 -14400 1 EDT} + {2046319200 -18000 0 EST} + {2057209200 -14400 1 EDT} + {2077768800 -18000 0 EST} + {2088658800 -14400 1 EDT} + {2109218400 -18000 0 EST} + {2120108400 -14400 1 EDT} + {2140668000 -18000 0 EST} + {2152162800 -14400 1 EDT} + {2172722400 -18000 0 EST} + {2183612400 -14400 1 EDT} + {2204172000 -18000 0 EST} + {2215062000 -14400 1 EDT} + {2235621600 -18000 0 EST} + {2246511600 -14400 1 EDT} + {2267071200 -18000 0 EST} + {2277961200 -14400 1 EDT} + {2298520800 -18000 0 EST} + {2309410800 -14400 1 EDT} + {2329970400 -18000 0 EST} + {2341465200 -14400 1 EDT} + {2362024800 -18000 0 EST} + {2372914800 -14400 1 EDT} + {2393474400 -18000 0 EST} + {2404364400 -14400 1 EDT} + {2424924000 -18000 0 EST} + {2435814000 -14400 1 EDT} + {2456373600 -18000 0 EST} + {2467263600 -14400 1 EDT} + {2487823200 -18000 0 EST} + {2499318000 -14400 1 EDT} + {2519877600 -18000 0 EST} + {2530767600 -14400 1 EDT} + {2551327200 -18000 0 EST} + {2562217200 -14400 1 EDT} + {2582776800 -18000 0 EST} + {2593666800 -14400 1 EDT} + {2614226400 -18000 0 EST} + {2625116400 -14400 1 EDT} + {2645676000 -18000 0 EST} + {2656566000 -14400 1 EDT} + {2677125600 -18000 0 EST} + {2688620400 -14400 1 EDT} + {2709180000 -18000 0 EST} + {2720070000 -14400 1 EDT} + {2740629600 -18000 0 EST} + {2751519600 -14400 1 EDT} + {2772079200 -18000 0 EST} + {2782969200 -14400 1 EDT} + {2803528800 -18000 0 EST} + {2814418800 -14400 1 EDT} + {2834978400 -18000 0 EST} + {2846473200 -14400 1 EDT} + {2867032800 -18000 0 EST} + {2877922800 -14400 1 EDT} + {2898482400 -18000 0 EST} + {2909372400 -14400 1 EDT} + {2929932000 -18000 0 EST} + {2940822000 -14400 1 EDT} + {2961381600 -18000 0 EST} + {2972271600 -14400 1 EDT} + {2992831200 -18000 0 EST} + {3003721200 -14400 1 EDT} + {3024280800 -18000 0 EST} + {3035775600 -14400 1 EDT} + {3056335200 -18000 0 EST} + {3067225200 -14400 1 EDT} + {3087784800 -18000 0 EST} + {3098674800 -14400 1 EDT} + {3119234400 -18000 0 EST} + {3130124400 -14400 1 EDT} + {3150684000 -18000 0 EST} + {3161574000 -14400 1 EDT} + {3182133600 -18000 0 EST} + {3193023600 -14400 1 EDT} + {3213583200 -18000 0 EST} + {3225078000 -14400 1 EDT} + {3245637600 -18000 0 EST} + {3256527600 -14400 1 EDT} + {3277087200 -18000 0 EST} + {3287977200 -14400 1 EDT} + {3308536800 -18000 0 EST} + {3319426800 -14400 1 EDT} + {3339986400 -18000 0 EST} + {3350876400 -14400 1 EDT} + {3371436000 -18000 0 EST} + {3382930800 -14400 1 EDT} + {3403490400 -18000 0 EST} + {3414380400 -14400 1 EDT} + {3434940000 -18000 0 EST} + {3445830000 -14400 1 EDT} + {3466389600 -18000 0 EST} + {3477279600 -14400 1 EDT} + {3497839200 -18000 0 EST} + {3508729200 -14400 1 EDT} + {3529288800 -18000 0 EST} + {3540178800 -14400 1 EDT} + {3560738400 -18000 0 EST} + {3572233200 -14400 1 EDT} + {3592792800 -18000 0 EST} + {3603682800 -14400 1 EDT} + {3624242400 -18000 0 EST} + {3635132400 -14400 1 EDT} + {3655692000 -18000 0 EST} + {3666582000 -14400 1 EDT} + {3687141600 -18000 0 EST} + {3698031600 -14400 1 EDT} + {3718591200 -18000 0 EST} + {3730086000 -14400 1 EDT} + {3750645600 -18000 0 EST} + {3761535600 -14400 1 EDT} + {3782095200 -18000 0 EST} + {3792985200 -14400 1 EDT} + {3813544800 -18000 0 EST} + {3824434800 -14400 1 EDT} + {3844994400 -18000 0 EST} + {3855884400 -14400 1 EDT} + {3876444000 -18000 0 EST} + {3887334000 -14400 1 EDT} + {3907893600 -18000 0 EST} + {3919388400 -14400 1 EDT} + {3939948000 -18000 0 EST} + {3950838000 -14400 1 EDT} + {3971397600 -18000 0 EST} + {3982287600 -14400 1 EDT} + {4002847200 -18000 0 EST} + {4013737200 -14400 1 EDT} + {4034296800 -18000 0 EST} + {4045186800 -14400 1 EDT} + {4065746400 -18000 0 EST} + {4076636400 -14400 1 EDT} + {4097196000 -18000 0 EST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Chicago b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Chicago new file mode 100644 index 00000000..545aedb4 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Chicago @@ -0,0 +1,369 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Chicago) { + {-9223372036854775808 -21036 0 LMT} + {-2717647200 -21600 0 CST} + {-1633276800 -18000 1 CDT} + {-1615136400 -21600 0 CST} + {-1601827200 -18000 1 CDT} + {-1583686800 -21600 0 CST} + {-1577901600 -21600 0 CST} + {-1563724800 -18000 1 CDT} + {-1551632400 -21600 0 CST} + {-1538928000 -18000 1 CDT} + {-1520182800 -21600 0 CST} + {-1504454400 -18000 1 CDT} + {-1491757200 -21600 0 CST} + {-1473004800 -18000 1 CDT} + {-1459702800 -21600 0 CST} + {-1441555200 -18000 1 CDT} + {-1428253200 -21600 0 CST} + {-1410105600 -18000 1 CDT} + {-1396803600 -21600 0 CST} + {-1378656000 -18000 1 CDT} + {-1365354000 -21600 0 CST} + {-1347206400 -18000 1 CDT} + {-1333904400 -21600 0 CST} + {-1315152000 -18000 1 CDT} + {-1301850000 -21600 0 CST} + {-1283702400 -18000 1 CDT} + {-1270400400 -21600 0 CST} + {-1252252800 -18000 1 CDT} + {-1238950800 -21600 0 CST} + {-1220803200 -18000 1 CDT} + {-1207501200 -21600 0 CST} + {-1189353600 -18000 1 CDT} + {-1176051600 -21600 0 CST} + {-1157299200 -18000 1 CDT} + {-1144602000 -21600 0 CST} + {-1125849600 -18000 1 CDT} + {-1112547600 -21600 0 CST} + {-1094400000 -18000 1 CDT} + {-1081098000 -21600 0 CST} + {-1067788800 -18000 0 EST} + {-1045414800 -21600 0 CST} + {-1031500800 -18000 1 CDT} + {-1018198800 -21600 0 CST} + {-1000051200 -18000 1 CDT} + {-986749200 -21600 0 CST} + {-967996800 -18000 1 CDT} + {-955299600 -21600 0 CST} + {-936547200 -18000 1 CDT} + {-923245200 -21600 0 CST} + {-905097600 -18000 1 CDT} + {-891795600 -21600 0 CST} + {-883591200 -21600 0 CST} + {-880214400 -18000 1 CWT} + {-769395600 -18000 1 CPT} + {-765392400 -21600 0 CST} + {-757360800 -21600 0 CST} + {-747244800 -18000 1 CDT} + {-733942800 -21600 0 CST} + {-715795200 -18000 1 CDT} + {-702493200 -21600 0 CST} + {-684345600 -18000 1 CDT} + {-671043600 -21600 0 CST} + {-652896000 -18000 1 CDT} + {-639594000 -21600 0 CST} + {-620841600 -18000 1 CDT} + {-608144400 -21600 0 CST} + {-589392000 -18000 1 CDT} + {-576090000 -21600 0 CST} + {-557942400 -18000 1 CDT} + {-544640400 -21600 0 CST} + {-526492800 -18000 1 CDT} + {-513190800 -21600 0 CST} + {-495043200 -18000 1 CDT} + {-481741200 -21600 0 CST} + {-463593600 -18000 1 CDT} + {-447267600 -21600 0 CST} + {-431539200 -18000 1 CDT} + {-415818000 -21600 0 CST} + {-400089600 -18000 1 CDT} + {-384368400 -21600 0 CST} + {-368640000 -18000 1 CDT} + {-352918800 -21600 0 CST} + {-337190400 -18000 1 CDT} + {-321469200 -21600 0 CST} + {-305740800 -18000 1 CDT} + {-289414800 -21600 0 CST} + {-273686400 -18000 1 CDT} + {-257965200 -21600 0 CST} + {-242236800 -18000 1 CDT} + {-226515600 -21600 0 CST} + {-210787200 -18000 1 CDT} + {-195066000 -21600 0 CST} + {-179337600 -18000 1 CDT} + {-163616400 -21600 0 CST} + {-147888000 -18000 1 CDT} + {-131562000 -21600 0 CST} + {-116438400 -18000 1 CDT} + {-100112400 -21600 0 CST} + {-94672800 -21600 0 CST} + {-84384000 -18000 1 CDT} + {-68662800 -21600 0 CST} + {-52934400 -18000 1 CDT} + {-37213200 -21600 0 CST} + {-21484800 -18000 1 CDT} + {-5763600 -21600 0 CST} + {9964800 -18000 1 CDT} + {25686000 -21600 0 CST} + {41414400 -18000 1 CDT} + {57740400 -21600 0 CST} + {73468800 -18000 1 CDT} + {89190000 -21600 0 CST} + {104918400 -18000 1 CDT} + {120639600 -21600 0 CST} + {126691200 -18000 1 CDT} + {152089200 -21600 0 CST} + {162374400 -18000 1 CDT} + {183538800 -21600 0 CST} + {199267200 -18000 1 CDT} + {215593200 -21600 0 CST} + {230716800 -18000 1 CDT} + {247042800 -21600 0 CST} + {262771200 -18000 1 CDT} + {278492400 -21600 0 CST} + {294220800 -18000 1 CDT} + {309942000 -21600 0 CST} + {325670400 -18000 1 CDT} + {341391600 -21600 0 CST} + {357120000 -18000 1 CDT} + {372841200 -21600 0 CST} + {388569600 -18000 1 CDT} + {404895600 -21600 0 CST} + {420019200 -18000 1 CDT} + {436345200 -21600 0 CST} + {452073600 -18000 1 CDT} + {467794800 -21600 0 CST} + {483523200 -18000 1 CDT} + {499244400 -21600 0 CST} + {514972800 -18000 1 CDT} + {530694000 -21600 0 CST} + {544608000 -18000 1 CDT} + {562143600 -21600 0 CST} + {576057600 -18000 1 CDT} + {594198000 -21600 0 CST} + {607507200 -18000 1 CDT} + {625647600 -21600 0 CST} + {638956800 -18000 1 CDT} + {657097200 -21600 0 CST} + {671011200 -18000 1 CDT} + {688546800 -21600 0 CST} + {702460800 -18000 1 CDT} + {719996400 -21600 0 CST} + {733910400 -18000 1 CDT} + {752050800 -21600 0 CST} + {765360000 -18000 1 CDT} + {783500400 -21600 0 CST} + {796809600 -18000 1 CDT} + {814950000 -21600 0 CST} + {828864000 -18000 1 CDT} + {846399600 -21600 0 CST} + {860313600 -18000 1 CDT} + {877849200 -21600 0 CST} + {891763200 -18000 1 CDT} + {909298800 -21600 0 CST} + {923212800 -18000 1 CDT} + {941353200 -21600 0 CST} + {954662400 -18000 1 CDT} + {972802800 -21600 0 CST} + {986112000 -18000 1 CDT} + {1004252400 -21600 0 CST} + {1018166400 -18000 1 CDT} + {1035702000 -21600 0 CST} + {1049616000 -18000 1 CDT} + {1067151600 -21600 0 CST} + {1081065600 -18000 1 CDT} + {1099206000 -21600 0 CST} + {1112515200 -18000 1 CDT} + {1130655600 -21600 0 CST} + {1143964800 -18000 1 CDT} + {1162105200 -21600 0 CST} + {1173600000 -18000 1 CDT} + {1194159600 -21600 0 CST} + {1205049600 -18000 1 CDT} + {1225609200 -21600 0 CST} + {1236499200 -18000 1 CDT} + {1257058800 -21600 0 CST} + {1268553600 -18000 1 CDT} + {1289113200 -21600 0 CST} + {1300003200 -18000 1 CDT} + {1320562800 -21600 0 CST} + {1331452800 -18000 1 CDT} + {1352012400 -21600 0 CST} + {1362902400 -18000 1 CDT} + {1383462000 -21600 0 CST} + {1394352000 -18000 1 CDT} + {1414911600 -21600 0 CST} + {1425801600 -18000 1 CDT} + {1446361200 -21600 0 CST} + {1457856000 -18000 1 CDT} + {1478415600 -21600 0 CST} + {1489305600 -18000 1 CDT} + {1509865200 -21600 0 CST} + {1520755200 -18000 1 CDT} + {1541314800 -21600 0 CST} + {1552204800 -18000 1 CDT} + {1572764400 -21600 0 CST} + {1583654400 -18000 1 CDT} + {1604214000 -21600 0 CST} + {1615708800 -18000 1 CDT} + {1636268400 -21600 0 CST} + {1647158400 -18000 1 CDT} + {1667718000 -21600 0 CST} + {1678608000 -18000 1 CDT} + {1699167600 -21600 0 CST} + {1710057600 -18000 1 CDT} + {1730617200 -21600 0 CST} + {1741507200 -18000 1 CDT} + {1762066800 -21600 0 CST} + {1772956800 -18000 1 CDT} + {1793516400 -21600 0 CST} + {1805011200 -18000 1 CDT} + {1825570800 -21600 0 CST} + {1836460800 -18000 1 CDT} + {1857020400 -21600 0 CST} + {1867910400 -18000 1 CDT} + {1888470000 -21600 0 CST} + {1899360000 -18000 1 CDT} + {1919919600 -21600 0 CST} + {1930809600 -18000 1 CDT} + {1951369200 -21600 0 CST} + {1962864000 -18000 1 CDT} + {1983423600 -21600 0 CST} + {1994313600 -18000 1 CDT} + {2014873200 -21600 0 CST} + {2025763200 -18000 1 CDT} + {2046322800 -21600 0 CST} + {2057212800 -18000 1 CDT} + {2077772400 -21600 0 CST} + {2088662400 -18000 1 CDT} + {2109222000 -21600 0 CST} + {2120112000 -18000 1 CDT} + {2140671600 -21600 0 CST} + {2152166400 -18000 1 CDT} + {2172726000 -21600 0 CST} + {2183616000 -18000 1 CDT} + {2204175600 -21600 0 CST} + {2215065600 -18000 1 CDT} + {2235625200 -21600 0 CST} + {2246515200 -18000 1 CDT} + {2267074800 -21600 0 CST} + {2277964800 -18000 1 CDT} + {2298524400 -21600 0 CST} + {2309414400 -18000 1 CDT} + {2329974000 -21600 0 CST} + {2341468800 -18000 1 CDT} + {2362028400 -21600 0 CST} + {2372918400 -18000 1 CDT} + {2393478000 -21600 0 CST} + {2404368000 -18000 1 CDT} + {2424927600 -21600 0 CST} + {2435817600 -18000 1 CDT} + {2456377200 -21600 0 CST} + {2467267200 -18000 1 CDT} + {2487826800 -21600 0 CST} + {2499321600 -18000 1 CDT} + {2519881200 -21600 0 CST} + {2530771200 -18000 1 CDT} + {2551330800 -21600 0 CST} + {2562220800 -18000 1 CDT} + {2582780400 -21600 0 CST} + {2593670400 -18000 1 CDT} + {2614230000 -21600 0 CST} + {2625120000 -18000 1 CDT} + {2645679600 -21600 0 CST} + {2656569600 -18000 1 CDT} + {2677129200 -21600 0 CST} + {2688624000 -18000 1 CDT} + {2709183600 -21600 0 CST} + {2720073600 -18000 1 CDT} + {2740633200 -21600 0 CST} + {2751523200 -18000 1 CDT} + {2772082800 -21600 0 CST} + {2782972800 -18000 1 CDT} + {2803532400 -21600 0 CST} + {2814422400 -18000 1 CDT} + {2834982000 -21600 0 CST} + {2846476800 -18000 1 CDT} + {2867036400 -21600 0 CST} + {2877926400 -18000 1 CDT} + {2898486000 -21600 0 CST} + {2909376000 -18000 1 CDT} + {2929935600 -21600 0 CST} + {2940825600 -18000 1 CDT} + {2961385200 -21600 0 CST} + {2972275200 -18000 1 CDT} + {2992834800 -21600 0 CST} + {3003724800 -18000 1 CDT} + {3024284400 -21600 0 CST} + {3035779200 -18000 1 CDT} + {3056338800 -21600 0 CST} + {3067228800 -18000 1 CDT} + {3087788400 -21600 0 CST} + {3098678400 -18000 1 CDT} + {3119238000 -21600 0 CST} + {3130128000 -18000 1 CDT} + {3150687600 -21600 0 CST} + {3161577600 -18000 1 CDT} + {3182137200 -21600 0 CST} + {3193027200 -18000 1 CDT} + {3213586800 -21600 0 CST} + {3225081600 -18000 1 CDT} + {3245641200 -21600 0 CST} + {3256531200 -18000 1 CDT} + {3277090800 -21600 0 CST} + {3287980800 -18000 1 CDT} + {3308540400 -21600 0 CST} + {3319430400 -18000 1 CDT} + {3339990000 -21600 0 CST} + {3350880000 -18000 1 CDT} + {3371439600 -21600 0 CST} + {3382934400 -18000 1 CDT} + {3403494000 -21600 0 CST} + {3414384000 -18000 1 CDT} + {3434943600 -21600 0 CST} + {3445833600 -18000 1 CDT} + {3466393200 -21600 0 CST} + {3477283200 -18000 1 CDT} + {3497842800 -21600 0 CST} + {3508732800 -18000 1 CDT} + {3529292400 -21600 0 CST} + {3540182400 -18000 1 CDT} + {3560742000 -21600 0 CST} + {3572236800 -18000 1 CDT} + {3592796400 -21600 0 CST} + {3603686400 -18000 1 CDT} + {3624246000 -21600 0 CST} + {3635136000 -18000 1 CDT} + {3655695600 -21600 0 CST} + {3666585600 -18000 1 CDT} + {3687145200 -21600 0 CST} + {3698035200 -18000 1 CDT} + {3718594800 -21600 0 CST} + {3730089600 -18000 1 CDT} + {3750649200 -21600 0 CST} + {3761539200 -18000 1 CDT} + {3782098800 -21600 0 CST} + {3792988800 -18000 1 CDT} + {3813548400 -21600 0 CST} + {3824438400 -18000 1 CDT} + {3844998000 -21600 0 CST} + {3855888000 -18000 1 CDT} + {3876447600 -21600 0 CST} + {3887337600 -18000 1 CDT} + {3907897200 -21600 0 CST} + {3919392000 -18000 1 CDT} + {3939951600 -21600 0 CST} + {3950841600 -18000 1 CDT} + {3971401200 -21600 0 CST} + {3982291200 -18000 1 CDT} + {4002850800 -21600 0 CST} + {4013740800 -18000 1 CDT} + {4034300400 -21600 0 CST} + {4045190400 -18000 1 CDT} + {4065750000 -21600 0 CST} + {4076640000 -18000 1 CDT} + {4097199600 -21600 0 CST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Chihuahua b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Chihuahua new file mode 100644 index 00000000..54449303 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Chihuahua @@ -0,0 +1,221 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Chihuahua) { + {-9223372036854775808 -25460 0 LMT} + {-1514739600 -25200 0 MST} + {-1343066400 -21600 0 CST} + {-1234807200 -25200 0 MST} + {-1220292000 -21600 0 CST} + {-1207159200 -25200 0 MST} + {-1191344400 -21600 0 CST} + {820476000 -21600 0 CST} + {828864000 -18000 1 CDT} + {846399600 -21600 0 CST} + {860313600 -18000 1 CDT} + {877849200 -21600 0 CST} + {883634400 -21600 0 CST} + {891766800 -21600 0 MDT} + {909302400 -25200 0 MST} + {923216400 -21600 1 MDT} + {941356800 -25200 0 MST} + {954666000 -21600 1 MDT} + {972806400 -25200 0 MST} + {989139600 -21600 1 MDT} + {1001836800 -25200 0 MST} + {1018170000 -21600 1 MDT} + {1035705600 -25200 0 MST} + {1049619600 -21600 1 MDT} + {1067155200 -25200 0 MST} + {1081069200 -21600 1 MDT} + {1099209600 -25200 0 MST} + {1112518800 -21600 1 MDT} + {1130659200 -25200 0 MST} + {1143968400 -21600 1 MDT} + {1162108800 -25200 0 MST} + {1175418000 -21600 1 MDT} + {1193558400 -25200 0 MST} + {1207472400 -21600 1 MDT} + {1225008000 -25200 0 MST} + {1238922000 -21600 1 MDT} + {1256457600 -25200 0 MST} + {1270371600 -21600 1 MDT} + {1288512000 -25200 0 MST} + {1301821200 -21600 1 MDT} + {1319961600 -25200 0 MST} + {1333270800 -21600 1 MDT} + {1351411200 -25200 0 MST} + {1365325200 -21600 1 MDT} + {1382860800 -25200 0 MST} + {1396774800 -21600 1 MDT} + {1414310400 -25200 0 MST} + {1428224400 -21600 1 MDT} + {1445760000 -25200 0 MST} + {1459674000 -21600 1 MDT} + {1477814400 -25200 0 MST} + {1491123600 -21600 1 MDT} + {1509264000 -25200 0 MST} + {1522573200 -21600 1 MDT} + {1540713600 -25200 0 MST} + {1554627600 -21600 1 MDT} + {1572163200 -25200 0 MST} + {1586077200 -21600 1 MDT} + {1603612800 -25200 0 MST} + {1617526800 -21600 1 MDT} + {1635667200 -25200 0 MST} + {1648976400 -21600 1 MDT} + {1667116800 -25200 0 MST} + {1680426000 -21600 1 MDT} + {1698566400 -25200 0 MST} + {1712480400 -21600 1 MDT} + {1730016000 -25200 0 MST} + {1743930000 -21600 1 MDT} + {1761465600 -25200 0 MST} + {1775379600 -21600 1 MDT} + {1792915200 -25200 0 MST} + {1806829200 -21600 1 MDT} + {1824969600 -25200 0 MST} + {1838278800 -21600 1 MDT} + {1856419200 -25200 0 MST} + {1869728400 -21600 1 MDT} + {1887868800 -25200 0 MST} + {1901782800 -21600 1 MDT} + {1919318400 -25200 0 MST} + {1933232400 -21600 1 MDT} + {1950768000 -25200 0 MST} + {1964682000 -21600 1 MDT} + {1982822400 -25200 0 MST} + {1996131600 -21600 1 MDT} + {2014272000 -25200 0 MST} + {2027581200 -21600 1 MDT} + {2045721600 -25200 0 MST} + {2059030800 -21600 1 MDT} + {2077171200 -25200 0 MST} + {2091085200 -21600 1 MDT} + {2108620800 -25200 0 MST} + {2122534800 -21600 1 MDT} + {2140070400 -25200 0 MST} + {2153984400 -21600 1 MDT} + {2172124800 -25200 0 MST} + {2185434000 -21600 1 MDT} + {2203574400 -25200 0 MST} + {2216883600 -21600 1 MDT} + {2235024000 -25200 0 MST} + {2248938000 -21600 1 MDT} + {2266473600 -25200 0 MST} + {2280387600 -21600 1 MDT} + {2297923200 -25200 0 MST} + {2311837200 -21600 1 MDT} + {2329372800 -25200 0 MST} + {2343286800 -21600 1 MDT} + {2361427200 -25200 0 MST} + {2374736400 -21600 1 MDT} + {2392876800 -25200 0 MST} + {2406186000 -21600 1 MDT} + {2424326400 -25200 0 MST} + {2438240400 -21600 1 MDT} + {2455776000 -25200 0 MST} + {2469690000 -21600 1 MDT} + {2487225600 -25200 0 MST} + {2501139600 -21600 1 MDT} + {2519280000 -25200 0 MST} + {2532589200 -21600 1 MDT} + {2550729600 -25200 0 MST} + {2564038800 -21600 1 MDT} + {2582179200 -25200 0 MST} + {2596093200 -21600 1 MDT} + {2613628800 -25200 0 MST} + {2627542800 -21600 1 MDT} + {2645078400 -25200 0 MST} + {2658992400 -21600 1 MDT} + {2676528000 -25200 0 MST} + {2690442000 -21600 1 MDT} + {2708582400 -25200 0 MST} + {2721891600 -21600 1 MDT} + {2740032000 -25200 0 MST} + {2753341200 -21600 1 MDT} + {2771481600 -25200 0 MST} + {2785395600 -21600 1 MDT} + {2802931200 -25200 0 MST} + {2816845200 -21600 1 MDT} + {2834380800 -25200 0 MST} + {2848294800 -21600 1 MDT} + {2866435200 -25200 0 MST} + {2879744400 -21600 1 MDT} + {2897884800 -25200 0 MST} + {2911194000 -21600 1 MDT} + {2929334400 -25200 0 MST} + {2942643600 -21600 1 MDT} + {2960784000 -25200 0 MST} + {2974698000 -21600 1 MDT} + {2992233600 -25200 0 MST} + {3006147600 -21600 1 MDT} + {3023683200 -25200 0 MST} + {3037597200 -21600 1 MDT} + {3055737600 -25200 0 MST} + {3069046800 -21600 1 MDT} + {3087187200 -25200 0 MST} + {3100496400 -21600 1 MDT} + {3118636800 -25200 0 MST} + {3132550800 -21600 1 MDT} + {3150086400 -25200 0 MST} + {3164000400 -21600 1 MDT} + {3181536000 -25200 0 MST} + {3195450000 -21600 1 MDT} + {3212985600 -25200 0 MST} + {3226899600 -21600 1 MDT} + {3245040000 -25200 0 MST} + {3258349200 -21600 1 MDT} + {3276489600 -25200 0 MST} + {3289798800 -21600 1 MDT} + {3307939200 -25200 0 MST} + {3321853200 -21600 1 MDT} + {3339388800 -25200 0 MST} + {3353302800 -21600 1 MDT} + {3370838400 -25200 0 MST} + {3384752400 -21600 1 MDT} + {3402892800 -25200 0 MST} + {3416202000 -21600 1 MDT} + {3434342400 -25200 0 MST} + {3447651600 -21600 1 MDT} + {3465792000 -25200 0 MST} + {3479706000 -21600 1 MDT} + {3497241600 -25200 0 MST} + {3511155600 -21600 1 MDT} + {3528691200 -25200 0 MST} + {3542605200 -21600 1 MDT} + {3560140800 -25200 0 MST} + {3574054800 -21600 1 MDT} + {3592195200 -25200 0 MST} + {3605504400 -21600 1 MDT} + {3623644800 -25200 0 MST} + {3636954000 -21600 1 MDT} + {3655094400 -25200 0 MST} + {3669008400 -21600 1 MDT} + {3686544000 -25200 0 MST} + {3700458000 -21600 1 MDT} + {3717993600 -25200 0 MST} + {3731907600 -21600 1 MDT} + {3750048000 -25200 0 MST} + {3763357200 -21600 1 MDT} + {3781497600 -25200 0 MST} + {3794806800 -21600 1 MDT} + {3812947200 -25200 0 MST} + {3826256400 -21600 1 MDT} + {3844396800 -25200 0 MST} + {3858310800 -21600 1 MDT} + {3875846400 -25200 0 MST} + {3889760400 -21600 1 MDT} + {3907296000 -25200 0 MST} + {3921210000 -21600 1 MDT} + {3939350400 -25200 0 MST} + {3952659600 -21600 1 MDT} + {3970800000 -25200 0 MST} + {3984109200 -21600 1 MDT} + {4002249600 -25200 0 MST} + {4016163600 -21600 1 MDT} + {4033699200 -25200 0 MST} + {4047613200 -21600 1 MDT} + {4065148800 -25200 0 MST} + {4079062800 -21600 1 MDT} + {4096598400 -25200 0 MST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Coral_Harbour b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Coral_Harbour new file mode 100644 index 00000000..a27dc034 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Coral_Harbour @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Atikokan)]} { + LoadTimeZoneFile America/Atikokan +} +set TZData(:America/Coral_Harbour) $TZData(:America/Atikokan) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Cordoba b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Cordoba new file mode 100644 index 00000000..c8815583 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Cordoba @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Argentina/Cordoba)]} { + LoadTimeZoneFile America/Argentina/Cordoba +} +set TZData(:America/Cordoba) $TZData(:America/Argentina/Cordoba) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Costa_Rica b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Costa_Rica new file mode 100644 index 00000000..8fc93439 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Costa_Rica @@ -0,0 +1,15 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Costa_Rica) { + {-9223372036854775808 -20173 0 LMT} + {-2524501427 -20173 0 SJMT} + {-1545071027 -21600 0 CST} + {288770400 -18000 1 CDT} + {297234000 -21600 0 CST} + {320220000 -18000 1 CDT} + {328683600 -21600 0 CST} + {664264800 -18000 1 CDT} + {678344400 -21600 0 CST} + {695714400 -18000 1 CDT} + {700635600 -21600 0 CST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Creston b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Creston new file mode 100644 index 00000000..30369a9a --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Creston @@ -0,0 +1,8 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Creston) { + {-9223372036854775808 -27964 0 LMT} + {-2713882436 -25200 0 MST} + {-1680454800 -28800 0 PST} + {-1627833600 -25200 0 MST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Cuiaba b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Cuiaba new file mode 100644 index 00000000..0301862f --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Cuiaba @@ -0,0 +1,257 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Cuiaba) { + {-9223372036854775808 -13460 0 LMT} + {-1767212140 -14400 0 AMT} + {-1206954000 -10800 1 AMST} + {-1191358800 -14400 0 AMT} + {-1175371200 -10800 1 AMST} + {-1159822800 -14400 0 AMT} + {-633816000 -10800 1 AMST} + {-622065600 -14400 0 AMT} + {-602280000 -10800 1 AMST} + {-591829200 -14400 0 AMT} + {-570744000 -10800 1 AMST} + {-560206800 -14400 0 AMT} + {-539121600 -10800 1 AMST} + {-531349200 -14400 0 AMT} + {-191361600 -10800 1 AMST} + {-184194000 -14400 0 AMT} + {-155160000 -10800 1 AMST} + {-150066000 -14400 0 AMT} + {-128894400 -10800 1 AMST} + {-121122000 -14400 0 AMT} + {-99950400 -10800 1 AMST} + {-89586000 -14400 0 AMT} + {-68414400 -10800 1 AMST} + {-57963600 -14400 0 AMT} + {499752000 -10800 1 AMST} + {511239600 -14400 0 AMT} + {530596800 -10800 1 AMST} + {540270000 -14400 0 AMT} + {562132800 -10800 1 AMST} + {571201200 -14400 0 AMT} + {592977600 -10800 1 AMST} + {602046000 -14400 0 AMT} + {624427200 -10800 1 AMST} + {634705200 -14400 0 AMT} + {656481600 -10800 1 AMST} + {666759600 -14400 0 AMT} + {687931200 -10800 1 AMST} + {697604400 -14400 0 AMT} + {719985600 -10800 1 AMST} + {728449200 -14400 0 AMT} + {750830400 -10800 1 AMST} + {761713200 -14400 0 AMT} + {782280000 -10800 1 AMST} + {793162800 -14400 0 AMT} + {813729600 -10800 1 AMST} + {824007600 -14400 0 AMT} + {844574400 -10800 1 AMST} + {856062000 -14400 0 AMT} + {876110400 -10800 1 AMST} + {888721200 -14400 0 AMT} + {908078400 -10800 1 AMST} + {919566000 -14400 0 AMT} + {938923200 -10800 1 AMST} + {951620400 -14400 0 AMT} + {970977600 -10800 1 AMST} + {982465200 -14400 0 AMT} + {1003032000 -10800 1 AMST} + {1013914800 -14400 0 AMT} + {1036296000 -10800 1 AMST} + {1045364400 -14400 0 AMT} + {1064372400 -14400 0 AMT} + {1096603200 -14400 0 AMT} + {1099368000 -10800 1 AMST} + {1108868400 -14400 0 AMT} + {1129435200 -10800 1 AMST} + {1140318000 -14400 0 AMT} + {1162699200 -10800 1 AMST} + {1172372400 -14400 0 AMT} + {1192334400 -10800 1 AMST} + {1203217200 -14400 0 AMT} + {1224388800 -10800 1 AMST} + {1234666800 -14400 0 AMT} + {1255838400 -10800 1 AMST} + {1266721200 -14400 0 AMT} + {1287288000 -10800 1 AMST} + {1298170800 -14400 0 AMT} + {1318737600 -10800 1 AMST} + {1330225200 -14400 0 AMT} + {1350792000 -10800 1 AMST} + {1361070000 -14400 0 AMT} + {1382241600 -10800 1 AMST} + {1392519600 -14400 0 AMT} + {1413691200 -10800 1 AMST} + {1424574000 -14400 0 AMT} + {1445140800 -10800 1 AMST} + {1456023600 -14400 0 AMT} + {1476590400 -10800 1 AMST} + {1487473200 -14400 0 AMT} + {1508040000 -10800 1 AMST} + {1518922800 -14400 0 AMT} + {1540094400 -10800 1 AMST} + {1550372400 -14400 0 AMT} + {1571544000 -10800 1 AMST} + {1581822000 -14400 0 AMT} + {1602993600 -10800 1 AMST} + {1613876400 -14400 0 AMT} + {1634443200 -10800 1 AMST} + {1645326000 -14400 0 AMT} + {1665892800 -10800 1 AMST} + {1677380400 -14400 0 AMT} + {1697342400 -10800 1 AMST} + {1708225200 -14400 0 AMT} + {1729396800 -10800 1 AMST} + {1739674800 -14400 0 AMT} + {1760846400 -10800 1 AMST} + {1771729200 -14400 0 AMT} + {1792296000 -10800 1 AMST} + {1803178800 -14400 0 AMT} + {1823745600 -10800 1 AMST} + {1834628400 -14400 0 AMT} + {1855195200 -10800 1 AMST} + {1866078000 -14400 0 AMT} + {1887249600 -10800 1 AMST} + {1897527600 -14400 0 AMT} + {1918699200 -10800 1 AMST} + {1928977200 -14400 0 AMT} + {1950148800 -10800 1 AMST} + {1960426800 -14400 0 AMT} + {1981598400 -10800 1 AMST} + {1992481200 -14400 0 AMT} + {2013048000 -10800 1 AMST} + {2024535600 -14400 0 AMT} + {2044497600 -10800 1 AMST} + {2055380400 -14400 0 AMT} + {2076552000 -10800 1 AMST} + {2086830000 -14400 0 AMT} + {2108001600 -10800 1 AMST} + {2118884400 -14400 0 AMT} + {2139451200 -10800 1 AMST} + {2150334000 -14400 0 AMT} + {2170900800 -10800 1 AMST} + {2181783600 -14400 0 AMT} + {2202350400 -10800 1 AMST} + {2213233200 -14400 0 AMT} + {2234404800 -10800 1 AMST} + {2244682800 -14400 0 AMT} + {2265854400 -10800 1 AMST} + {2276132400 -14400 0 AMT} + {2297304000 -10800 1 AMST} + {2307582000 -14400 0 AMT} + {2328753600 -10800 1 AMST} + {2339636400 -14400 0 AMT} + {2360203200 -10800 1 AMST} + {2371086000 -14400 0 AMT} + {2391652800 -10800 1 AMST} + {2402535600 -14400 0 AMT} + {2423707200 -10800 1 AMST} + {2433985200 -14400 0 AMT} + {2455156800 -10800 1 AMST} + {2465434800 -14400 0 AMT} + {2486606400 -10800 1 AMST} + {2497489200 -14400 0 AMT} + {2518056000 -10800 1 AMST} + {2528938800 -14400 0 AMT} + {2549505600 -10800 1 AMST} + {2560388400 -14400 0 AMT} + {2580955200 -10800 1 AMST} + {2591838000 -14400 0 AMT} + {2613009600 -10800 1 AMST} + {2623287600 -14400 0 AMT} + {2644459200 -10800 1 AMST} + {2654737200 -14400 0 AMT} + {2675908800 -10800 1 AMST} + {2686791600 -14400 0 AMT} + {2707358400 -10800 1 AMST} + {2718241200 -14400 0 AMT} + {2738808000 -10800 1 AMST} + {2749690800 -14400 0 AMT} + {2770862400 -10800 1 AMST} + {2781140400 -14400 0 AMT} + {2802312000 -10800 1 AMST} + {2812590000 -14400 0 AMT} + {2833761600 -10800 1 AMST} + {2844039600 -14400 0 AMT} + {2865211200 -10800 1 AMST} + {2876094000 -14400 0 AMT} + {2896660800 -10800 1 AMST} + {2907543600 -14400 0 AMT} + {2928110400 -10800 1 AMST} + {2938993200 -14400 0 AMT} + {2960164800 -10800 1 AMST} + {2970442800 -14400 0 AMT} + {2991614400 -10800 1 AMST} + {3001892400 -14400 0 AMT} + {3023064000 -10800 1 AMST} + {3033946800 -14400 0 AMT} + {3054513600 -10800 1 AMST} + {3065396400 -14400 0 AMT} + {3085963200 -10800 1 AMST} + {3096846000 -14400 0 AMT} + {3118017600 -10800 1 AMST} + {3128295600 -14400 0 AMT} + {3149467200 -10800 1 AMST} + {3159745200 -14400 0 AMT} + {3180916800 -10800 1 AMST} + {3191194800 -14400 0 AMT} + {3212366400 -10800 1 AMST} + {3223249200 -14400 0 AMT} + {3243816000 -10800 1 AMST} + {3254698800 -14400 0 AMT} + {3275265600 -10800 1 AMST} + {3286148400 -14400 0 AMT} + {3307320000 -10800 1 AMST} + {3317598000 -14400 0 AMT} + {3338769600 -10800 1 AMST} + {3349047600 -14400 0 AMT} + {3370219200 -10800 1 AMST} + {3381102000 -14400 0 AMT} + {3401668800 -10800 1 AMST} + {3412551600 -14400 0 AMT} + {3433118400 -10800 1 AMST} + {3444001200 -14400 0 AMT} + {3464568000 -10800 1 AMST} + {3475450800 -14400 0 AMT} + {3496622400 -10800 1 AMST} + {3506900400 -14400 0 AMT} + {3528072000 -10800 1 AMST} + {3538350000 -14400 0 AMT} + {3559521600 -10800 1 AMST} + {3570404400 -14400 0 AMT} + {3590971200 -10800 1 AMST} + {3601854000 -14400 0 AMT} + {3622420800 -10800 1 AMST} + {3633303600 -14400 0 AMT} + {3654475200 -10800 1 AMST} + {3664753200 -14400 0 AMT} + {3685924800 -10800 1 AMST} + {3696202800 -14400 0 AMT} + {3717374400 -10800 1 AMST} + {3727652400 -14400 0 AMT} + {3748824000 -10800 1 AMST} + {3759706800 -14400 0 AMT} + {3780273600 -10800 1 AMST} + {3791156400 -14400 0 AMT} + {3811723200 -10800 1 AMST} + {3822606000 -14400 0 AMT} + {3843777600 -10800 1 AMST} + {3854055600 -14400 0 AMT} + {3875227200 -10800 1 AMST} + {3885505200 -14400 0 AMT} + {3906676800 -10800 1 AMST} + {3917559600 -14400 0 AMT} + {3938126400 -10800 1 AMST} + {3949009200 -14400 0 AMT} + {3969576000 -10800 1 AMST} + {3980458800 -14400 0 AMT} + {4001630400 -10800 1 AMST} + {4011908400 -14400 0 AMT} + {4033080000 -10800 1 AMST} + {4043358000 -14400 0 AMT} + {4064529600 -10800 1 AMST} + {4074807600 -14400 0 AMT} + {4095979200 -10800 1 AMST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Curacao b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Curacao new file mode 100644 index 00000000..5189e9c9 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Curacao @@ -0,0 +1,7 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Curacao) { + {-9223372036854775808 -16547 0 LMT} + {-1826738653 -16200 0 ANT} + {-157750200 -14400 0 AST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Danmarkshavn b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Danmarkshavn new file mode 100644 index 00000000..8d66d3a5 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Danmarkshavn @@ -0,0 +1,39 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Danmarkshavn) { + {-9223372036854775808 -4480 0 LMT} + {-1686091520 -10800 0 WGT} + {323845200 -7200 0 WGST} + {338950800 -10800 0 WGT} + {354675600 -7200 1 WGST} + {370400400 -10800 0 WGT} + {386125200 -7200 1 WGST} + {401850000 -10800 0 WGT} + {417574800 -7200 1 WGST} + {433299600 -10800 0 WGT} + {449024400 -7200 1 WGST} + {465354000 -10800 0 WGT} + {481078800 -7200 1 WGST} + {496803600 -10800 0 WGT} + {512528400 -7200 1 WGST} + {528253200 -10800 0 WGT} + {543978000 -7200 1 WGST} + {559702800 -10800 0 WGT} + {575427600 -7200 1 WGST} + {591152400 -10800 0 WGT} + {606877200 -7200 1 WGST} + {622602000 -10800 0 WGT} + {638326800 -7200 1 WGST} + {654656400 -10800 0 WGT} + {670381200 -7200 1 WGST} + {686106000 -10800 0 WGT} + {701830800 -7200 1 WGST} + {717555600 -10800 0 WGT} + {733280400 -7200 1 WGST} + {749005200 -10800 0 WGT} + {764730000 -7200 1 WGST} + {780454800 -10800 0 WGT} + {796179600 -7200 1 WGST} + {811904400 -10800 0 WGT} + {820465200 0 0 GMT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Dawson b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Dawson new file mode 100644 index 00000000..8d2b6419 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Dawson @@ -0,0 +1,256 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Dawson) { + {-9223372036854775808 -33460 0 LMT} + {-2188996940 -32400 0 YST} + {-1632056400 -28800 1 YDT} + {-1615125600 -32400 0 YST} + {-1596978000 -28800 1 YDT} + {-1583164800 -32400 0 YST} + {-880203600 -28800 1 YWT} + {-769395600 -28800 1 YPT} + {-765381600 -32400 0 YST} + {-147884400 -25200 1 YDDT} + {-131554800 -32400 0 YST} + {315561600 -28800 0 PST} + {325677600 -25200 1 PDT} + {341398800 -28800 0 PST} + {357127200 -25200 1 PDT} + {372848400 -28800 0 PST} + {388576800 -25200 1 PDT} + {404902800 -28800 0 PST} + {420026400 -25200 1 PDT} + {436352400 -28800 0 PST} + {452080800 -25200 1 PDT} + {467802000 -28800 0 PST} + {483530400 -25200 1 PDT} + {499251600 -28800 0 PST} + {514980000 -25200 1 PDT} + {530701200 -28800 0 PST} + {544615200 -25200 1 PDT} + {562150800 -28800 0 PST} + {576064800 -25200 1 PDT} + {594205200 -28800 0 PST} + {607514400 -25200 1 PDT} + {625654800 -28800 0 PST} + {638964000 -25200 1 PDT} + {657104400 -28800 0 PST} + {671018400 -25200 1 PDT} + {688554000 -28800 0 PST} + {702468000 -25200 1 PDT} + {720003600 -28800 0 PST} + {733917600 -25200 1 PDT} + {752058000 -28800 0 PST} + {765367200 -25200 1 PDT} + {783507600 -28800 0 PST} + {796816800 -25200 1 PDT} + {814957200 -28800 0 PST} + {828871200 -25200 1 PDT} + {846406800 -28800 0 PST} + {860320800 -25200 1 PDT} + {877856400 -28800 0 PST} + {891770400 -25200 1 PDT} + {909306000 -28800 0 PST} + {923220000 -25200 1 PDT} + {941360400 -28800 0 PST} + {954669600 -25200 1 PDT} + {972810000 -28800 0 PST} + {986119200 -25200 1 PDT} + {1004259600 -28800 0 PST} + {1018173600 -25200 1 PDT} + {1035709200 -28800 0 PST} + {1049623200 -25200 1 PDT} + {1067158800 -28800 0 PST} + {1081072800 -25200 1 PDT} + {1099213200 -28800 0 PST} + {1112522400 -25200 1 PDT} + {1130662800 -28800 0 PST} + {1143972000 -25200 1 PDT} + {1162112400 -28800 0 PST} + {1173607200 -25200 1 PDT} + {1194166800 -28800 0 PST} + {1205056800 -25200 1 PDT} + {1225616400 -28800 0 PST} + {1236506400 -25200 1 PDT} + {1257066000 -28800 0 PST} + {1268560800 -25200 1 PDT} + {1289120400 -28800 0 PST} + {1300010400 -25200 1 PDT} + {1320570000 -28800 0 PST} + {1331460000 -25200 1 PDT} + {1352019600 -28800 0 PST} + {1362909600 -25200 1 PDT} + {1383469200 -28800 0 PST} + {1394359200 -25200 1 PDT} + {1414918800 -28800 0 PST} + {1425808800 -25200 1 PDT} + {1446368400 -28800 0 PST} + {1457863200 -25200 1 PDT} + {1478422800 -28800 0 PST} + {1489312800 -25200 1 PDT} + {1509872400 -28800 0 PST} + {1520762400 -25200 1 PDT} + {1541322000 -28800 0 PST} + {1552212000 -25200 1 PDT} + {1572771600 -28800 0 PST} + {1583661600 -25200 1 PDT} + {1604221200 -28800 0 PST} + {1615716000 -25200 1 PDT} + {1636275600 -28800 0 PST} + {1647165600 -25200 1 PDT} + {1667725200 -28800 0 PST} + {1678615200 -25200 1 PDT} + {1699174800 -28800 0 PST} + {1710064800 -25200 1 PDT} + {1730624400 -28800 0 PST} + {1741514400 -25200 1 PDT} + {1762074000 -28800 0 PST} + {1772964000 -25200 1 PDT} + {1793523600 -28800 0 PST} + {1805018400 -25200 1 PDT} + {1825578000 -28800 0 PST} + {1836468000 -25200 1 PDT} + {1857027600 -28800 0 PST} + {1867917600 -25200 1 PDT} + {1888477200 -28800 0 PST} + {1899367200 -25200 1 PDT} + {1919926800 -28800 0 PST} + {1930816800 -25200 1 PDT} + {1951376400 -28800 0 PST} + {1962871200 -25200 1 PDT} + {1983430800 -28800 0 PST} + {1994320800 -25200 1 PDT} + {2014880400 -28800 0 PST} + {2025770400 -25200 1 PDT} + {2046330000 -28800 0 PST} + {2057220000 -25200 1 PDT} + {2077779600 -28800 0 PST} + {2088669600 -25200 1 PDT} + {2109229200 -28800 0 PST} + {2120119200 -25200 1 PDT} + {2140678800 -28800 0 PST} + {2152173600 -25200 1 PDT} + {2172733200 -28800 0 PST} + {2183623200 -25200 1 PDT} + {2204182800 -28800 0 PST} + {2215072800 -25200 1 PDT} + {2235632400 -28800 0 PST} + {2246522400 -25200 1 PDT} + {2267082000 -28800 0 PST} + {2277972000 -25200 1 PDT} + {2298531600 -28800 0 PST} + {2309421600 -25200 1 PDT} + {2329981200 -28800 0 PST} + {2341476000 -25200 1 PDT} + {2362035600 -28800 0 PST} + {2372925600 -25200 1 PDT} + {2393485200 -28800 0 PST} + {2404375200 -25200 1 PDT} + {2424934800 -28800 0 PST} + {2435824800 -25200 1 PDT} + {2456384400 -28800 0 PST} + {2467274400 -25200 1 PDT} + {2487834000 -28800 0 PST} + {2499328800 -25200 1 PDT} + {2519888400 -28800 0 PST} + {2530778400 -25200 1 PDT} + {2551338000 -28800 0 PST} + {2562228000 -25200 1 PDT} + {2582787600 -28800 0 PST} + {2593677600 -25200 1 PDT} + {2614237200 -28800 0 PST} + {2625127200 -25200 1 PDT} + {2645686800 -28800 0 PST} + {2656576800 -25200 1 PDT} + {2677136400 -28800 0 PST} + {2688631200 -25200 1 PDT} + {2709190800 -28800 0 PST} + {2720080800 -25200 1 PDT} + {2740640400 -28800 0 PST} + {2751530400 -25200 1 PDT} + {2772090000 -28800 0 PST} + {2782980000 -25200 1 PDT} + {2803539600 -28800 0 PST} + {2814429600 -25200 1 PDT} + {2834989200 -28800 0 PST} + {2846484000 -25200 1 PDT} + {2867043600 -28800 0 PST} + {2877933600 -25200 1 PDT} + {2898493200 -28800 0 PST} + {2909383200 -25200 1 PDT} + {2929942800 -28800 0 PST} + {2940832800 -25200 1 PDT} + {2961392400 -28800 0 PST} + {2972282400 -25200 1 PDT} + {2992842000 -28800 0 PST} + {3003732000 -25200 1 PDT} + {3024291600 -28800 0 PST} + {3035786400 -25200 1 PDT} + {3056346000 -28800 0 PST} + {3067236000 -25200 1 PDT} + {3087795600 -28800 0 PST} + {3098685600 -25200 1 PDT} + {3119245200 -28800 0 PST} + {3130135200 -25200 1 PDT} + {3150694800 -28800 0 PST} + {3161584800 -25200 1 PDT} + {3182144400 -28800 0 PST} + {3193034400 -25200 1 PDT} + {3213594000 -28800 0 PST} + {3225088800 -25200 1 PDT} + {3245648400 -28800 0 PST} + {3256538400 -25200 1 PDT} + {3277098000 -28800 0 PST} + {3287988000 -25200 1 PDT} + {3308547600 -28800 0 PST} + {3319437600 -25200 1 PDT} + {3339997200 -28800 0 PST} + {3350887200 -25200 1 PDT} + {3371446800 -28800 0 PST} + {3382941600 -25200 1 PDT} + {3403501200 -28800 0 PST} + {3414391200 -25200 1 PDT} + {3434950800 -28800 0 PST} + {3445840800 -25200 1 PDT} + {3466400400 -28800 0 PST} + {3477290400 -25200 1 PDT} + {3497850000 -28800 0 PST} + {3508740000 -25200 1 PDT} + {3529299600 -28800 0 PST} + {3540189600 -25200 1 PDT} + {3560749200 -28800 0 PST} + {3572244000 -25200 1 PDT} + {3592803600 -28800 0 PST} + {3603693600 -25200 1 PDT} + {3624253200 -28800 0 PST} + {3635143200 -25200 1 PDT} + {3655702800 -28800 0 PST} + {3666592800 -25200 1 PDT} + {3687152400 -28800 0 PST} + {3698042400 -25200 1 PDT} + {3718602000 -28800 0 PST} + {3730096800 -25200 1 PDT} + {3750656400 -28800 0 PST} + {3761546400 -25200 1 PDT} + {3782106000 -28800 0 PST} + {3792996000 -25200 1 PDT} + {3813555600 -28800 0 PST} + {3824445600 -25200 1 PDT} + {3845005200 -28800 0 PST} + {3855895200 -25200 1 PDT} + {3876454800 -28800 0 PST} + {3887344800 -25200 1 PDT} + {3907904400 -28800 0 PST} + {3919399200 -25200 1 PDT} + {3939958800 -28800 0 PST} + {3950848800 -25200 1 PDT} + {3971408400 -28800 0 PST} + {3982298400 -25200 1 PDT} + {4002858000 -28800 0 PST} + {4013748000 -25200 1 PDT} + {4034307600 -28800 0 PST} + {4045197600 -25200 1 PDT} + {4065757200 -28800 0 PST} + {4076647200 -25200 1 PDT} + {4097206800 -28800 0 PST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Dawson_Creek b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Dawson_Creek new file mode 100644 index 00000000..a0b5c443 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Dawson_Creek @@ -0,0 +1,64 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Dawson_Creek) { + {-9223372036854775808 -28856 0 LMT} + {-2713881544 -28800 0 PST} + {-1632060000 -25200 1 PDT} + {-1615129200 -28800 0 PST} + {-880207200 -25200 1 PWT} + {-769395600 -25200 1 PPT} + {-765385200 -28800 0 PST} + {-725817600 -28800 0 PST} + {-715788000 -25200 1 PDT} + {-702486000 -28800 0 PST} + {-684338400 -25200 1 PDT} + {-671036400 -28800 0 PST} + {-652888800 -25200 1 PDT} + {-639586800 -28800 0 PST} + {-620834400 -25200 1 PDT} + {-608137200 -28800 0 PST} + {-589384800 -25200 1 PDT} + {-576082800 -28800 0 PST} + {-557935200 -25200 1 PDT} + {-544633200 -28800 0 PST} + {-526485600 -25200 1 PDT} + {-513183600 -28800 0 PST} + {-495036000 -25200 1 PDT} + {-481734000 -28800 0 PST} + {-463586400 -25200 1 PDT} + {-450284400 -28800 0 PST} + {-431532000 -25200 1 PDT} + {-418230000 -28800 0 PST} + {-400082400 -25200 1 PDT} + {-386780400 -28800 0 PST} + {-368632800 -25200 1 PDT} + {-355330800 -28800 0 PST} + {-337183200 -25200 1 PDT} + {-323881200 -28800 0 PST} + {-305733600 -25200 1 PDT} + {-292431600 -28800 0 PST} + {-273679200 -25200 1 PDT} + {-260982000 -28800 0 PST} + {-242229600 -25200 1 PDT} + {-226508400 -28800 0 PST} + {-210780000 -25200 1 PDT} + {-195058800 -28800 0 PST} + {-179330400 -25200 1 PDT} + {-163609200 -28800 0 PST} + {-147880800 -25200 1 PDT} + {-131554800 -28800 0 PST} + {-116431200 -25200 1 PDT} + {-100105200 -28800 0 PST} + {-84376800 -25200 1 PDT} + {-68655600 -28800 0 PST} + {-52927200 -25200 1 PDT} + {-37206000 -28800 0 PST} + {-21477600 -25200 1 PDT} + {-5756400 -28800 0 PST} + {9972000 -25200 1 PDT} + {25693200 -28800 0 PST} + {41421600 -25200 1 PDT} + {57747600 -28800 0 PST} + {73476000 -25200 1 PDT} + {84016800 -25200 0 MST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Denver b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Denver new file mode 100644 index 00000000..06bc80d6 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Denver @@ -0,0 +1,291 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Denver) { + {-9223372036854775808 -25196 0 LMT} + {-2717643600 -25200 0 MST} + {-1633273200 -21600 1 MDT} + {-1615132800 -25200 0 MST} + {-1601823600 -21600 1 MDT} + {-1583683200 -25200 0 MST} + {-1577898000 -25200 0 MST} + {-1570374000 -21600 1 MDT} + {-1551628800 -25200 0 MST} + {-1538924400 -21600 1 MDT} + {-1534089600 -25200 0 MST} + {-883587600 -25200 0 MST} + {-880210800 -21600 1 MWT} + {-769395600 -21600 1 MPT} + {-765388800 -25200 0 MST} + {-757357200 -25200 0 MST} + {-147884400 -21600 1 MDT} + {-131558400 -25200 0 MST} + {-116434800 -21600 1 MDT} + {-100108800 -25200 0 MST} + {-94669200 -25200 0 MST} + {-84380400 -21600 1 MDT} + {-68659200 -25200 0 MST} + {-52930800 -21600 1 MDT} + {-37209600 -25200 0 MST} + {-21481200 -21600 1 MDT} + {-5760000 -25200 0 MST} + {9968400 -21600 1 MDT} + {25689600 -25200 0 MST} + {41418000 -21600 1 MDT} + {57744000 -25200 0 MST} + {73472400 -21600 1 MDT} + {89193600 -25200 0 MST} + {104922000 -21600 1 MDT} + {120643200 -25200 0 MST} + {126694800 -21600 1 MDT} + {152092800 -25200 0 MST} + {162378000 -21600 1 MDT} + {183542400 -25200 0 MST} + {199270800 -21600 1 MDT} + {215596800 -25200 0 MST} + {230720400 -21600 1 MDT} + {247046400 -25200 0 MST} + {262774800 -21600 1 MDT} + {278496000 -25200 0 MST} + {294224400 -21600 1 MDT} + {309945600 -25200 0 MST} + {325674000 -21600 1 MDT} + {341395200 -25200 0 MST} + {357123600 -21600 1 MDT} + {372844800 -25200 0 MST} + {388573200 -21600 1 MDT} + {404899200 -25200 0 MST} + {420022800 -21600 1 MDT} + {436348800 -25200 0 MST} + {452077200 -21600 1 MDT} + {467798400 -25200 0 MST} + {483526800 -21600 1 MDT} + {499248000 -25200 0 MST} + {514976400 -21600 1 MDT} + {530697600 -25200 0 MST} + {544611600 -21600 1 MDT} + {562147200 -25200 0 MST} + {576061200 -21600 1 MDT} + {594201600 -25200 0 MST} + {607510800 -21600 1 MDT} + {625651200 -25200 0 MST} + {638960400 -21600 1 MDT} + {657100800 -25200 0 MST} + {671014800 -21600 1 MDT} + {688550400 -25200 0 MST} + {702464400 -21600 1 MDT} + {720000000 -25200 0 MST} + {733914000 -21600 1 MDT} + {752054400 -25200 0 MST} + {765363600 -21600 1 MDT} + {783504000 -25200 0 MST} + {796813200 -21600 1 MDT} + {814953600 -25200 0 MST} + {828867600 -21600 1 MDT} + {846403200 -25200 0 MST} + {860317200 -21600 1 MDT} + {877852800 -25200 0 MST} + {891766800 -21600 1 MDT} + {909302400 -25200 0 MST} + {923216400 -21600 1 MDT} + {941356800 -25200 0 MST} + {954666000 -21600 1 MDT} + {972806400 -25200 0 MST} + {986115600 -21600 1 MDT} + {1004256000 -25200 0 MST} + {1018170000 -21600 1 MDT} + {1035705600 -25200 0 MST} + {1049619600 -21600 1 MDT} + {1067155200 -25200 0 MST} + {1081069200 -21600 1 MDT} + {1099209600 -25200 0 MST} + {1112518800 -21600 1 MDT} + {1130659200 -25200 0 MST} + {1143968400 -21600 1 MDT} + {1162108800 -25200 0 MST} + {1173603600 -21600 1 MDT} + {1194163200 -25200 0 MST} + {1205053200 -21600 1 MDT} + {1225612800 -25200 0 MST} + {1236502800 -21600 1 MDT} + {1257062400 -25200 0 MST} + {1268557200 -21600 1 MDT} + {1289116800 -25200 0 MST} + {1300006800 -21600 1 MDT} + {1320566400 -25200 0 MST} + {1331456400 -21600 1 MDT} + {1352016000 -25200 0 MST} + {1362906000 -21600 1 MDT} + {1383465600 -25200 0 MST} + {1394355600 -21600 1 MDT} + {1414915200 -25200 0 MST} + {1425805200 -21600 1 MDT} + {1446364800 -25200 0 MST} + {1457859600 -21600 1 MDT} + {1478419200 -25200 0 MST} + {1489309200 -21600 1 MDT} + {1509868800 -25200 0 MST} + {1520758800 -21600 1 MDT} + {1541318400 -25200 0 MST} + {1552208400 -21600 1 MDT} + {1572768000 -25200 0 MST} + {1583658000 -21600 1 MDT} + {1604217600 -25200 0 MST} + {1615712400 -21600 1 MDT} + {1636272000 -25200 0 MST} + {1647162000 -21600 1 MDT} + {1667721600 -25200 0 MST} + {1678611600 -21600 1 MDT} + {1699171200 -25200 0 MST} + {1710061200 -21600 1 MDT} + {1730620800 -25200 0 MST} + {1741510800 -21600 1 MDT} + {1762070400 -25200 0 MST} + {1772960400 -21600 1 MDT} + {1793520000 -25200 0 MST} + {1805014800 -21600 1 MDT} + {1825574400 -25200 0 MST} + {1836464400 -21600 1 MDT} + {1857024000 -25200 0 MST} + {1867914000 -21600 1 MDT} + {1888473600 -25200 0 MST} + {1899363600 -21600 1 MDT} + {1919923200 -25200 0 MST} + {1930813200 -21600 1 MDT} + {1951372800 -25200 0 MST} + {1962867600 -21600 1 MDT} + {1983427200 -25200 0 MST} + {1994317200 -21600 1 MDT} + {2014876800 -25200 0 MST} + {2025766800 -21600 1 MDT} + {2046326400 -25200 0 MST} + {2057216400 -21600 1 MDT} + {2077776000 -25200 0 MST} + {2088666000 -21600 1 MDT} + {2109225600 -25200 0 MST} + {2120115600 -21600 1 MDT} + {2140675200 -25200 0 MST} + {2152170000 -21600 1 MDT} + {2172729600 -25200 0 MST} + {2183619600 -21600 1 MDT} + {2204179200 -25200 0 MST} + {2215069200 -21600 1 MDT} + {2235628800 -25200 0 MST} + {2246518800 -21600 1 MDT} + {2267078400 -25200 0 MST} + {2277968400 -21600 1 MDT} + {2298528000 -25200 0 MST} + {2309418000 -21600 1 MDT} + {2329977600 -25200 0 MST} + {2341472400 -21600 1 MDT} + {2362032000 -25200 0 MST} + {2372922000 -21600 1 MDT} + {2393481600 -25200 0 MST} + {2404371600 -21600 1 MDT} + {2424931200 -25200 0 MST} + {2435821200 -21600 1 MDT} + {2456380800 -25200 0 MST} + {2467270800 -21600 1 MDT} + {2487830400 -25200 0 MST} + {2499325200 -21600 1 MDT} + {2519884800 -25200 0 MST} + {2530774800 -21600 1 MDT} + {2551334400 -25200 0 MST} + {2562224400 -21600 1 MDT} + {2582784000 -25200 0 MST} + {2593674000 -21600 1 MDT} + {2614233600 -25200 0 MST} + {2625123600 -21600 1 MDT} + {2645683200 -25200 0 MST} + {2656573200 -21600 1 MDT} + {2677132800 -25200 0 MST} + {2688627600 -21600 1 MDT} + {2709187200 -25200 0 MST} + {2720077200 -21600 1 MDT} + {2740636800 -25200 0 MST} + {2751526800 -21600 1 MDT} + {2772086400 -25200 0 MST} + {2782976400 -21600 1 MDT} + {2803536000 -25200 0 MST} + {2814426000 -21600 1 MDT} + {2834985600 -25200 0 MST} + {2846480400 -21600 1 MDT} + {2867040000 -25200 0 MST} + {2877930000 -21600 1 MDT} + {2898489600 -25200 0 MST} + {2909379600 -21600 1 MDT} + {2929939200 -25200 0 MST} + {2940829200 -21600 1 MDT} + {2961388800 -25200 0 MST} + {2972278800 -21600 1 MDT} + {2992838400 -25200 0 MST} + {3003728400 -21600 1 MDT} + {3024288000 -25200 0 MST} + {3035782800 -21600 1 MDT} + {3056342400 -25200 0 MST} + {3067232400 -21600 1 MDT} + {3087792000 -25200 0 MST} + {3098682000 -21600 1 MDT} + {3119241600 -25200 0 MST} + {3130131600 -21600 1 MDT} + {3150691200 -25200 0 MST} + {3161581200 -21600 1 MDT} + {3182140800 -25200 0 MST} + {3193030800 -21600 1 MDT} + {3213590400 -25200 0 MST} + {3225085200 -21600 1 MDT} + {3245644800 -25200 0 MST} + {3256534800 -21600 1 MDT} + {3277094400 -25200 0 MST} + {3287984400 -21600 1 MDT} + {3308544000 -25200 0 MST} + {3319434000 -21600 1 MDT} + {3339993600 -25200 0 MST} + {3350883600 -21600 1 MDT} + {3371443200 -25200 0 MST} + {3382938000 -21600 1 MDT} + {3403497600 -25200 0 MST} + {3414387600 -21600 1 MDT} + {3434947200 -25200 0 MST} + {3445837200 -21600 1 MDT} + {3466396800 -25200 0 MST} + {3477286800 -21600 1 MDT} + {3497846400 -25200 0 MST} + {3508736400 -21600 1 MDT} + {3529296000 -25200 0 MST} + {3540186000 -21600 1 MDT} + {3560745600 -25200 0 MST} + {3572240400 -21600 1 MDT} + {3592800000 -25200 0 MST} + {3603690000 -21600 1 MDT} + {3624249600 -25200 0 MST} + {3635139600 -21600 1 MDT} + {3655699200 -25200 0 MST} + {3666589200 -21600 1 MDT} + {3687148800 -25200 0 MST} + {3698038800 -21600 1 MDT} + {3718598400 -25200 0 MST} + {3730093200 -21600 1 MDT} + {3750652800 -25200 0 MST} + {3761542800 -21600 1 MDT} + {3782102400 -25200 0 MST} + {3792992400 -21600 1 MDT} + {3813552000 -25200 0 MST} + {3824442000 -21600 1 MDT} + {3845001600 -25200 0 MST} + {3855891600 -21600 1 MDT} + {3876451200 -25200 0 MST} + {3887341200 -21600 1 MDT} + {3907900800 -25200 0 MST} + {3919395600 -21600 1 MDT} + {3939955200 -25200 0 MST} + {3950845200 -21600 1 MDT} + {3971404800 -25200 0 MST} + {3982294800 -21600 1 MDT} + {4002854400 -25200 0 MST} + {4013744400 -21600 1 MDT} + {4034304000 -25200 0 MST} + {4045194000 -21600 1 MDT} + {4065753600 -25200 0 MST} + {4076643600 -21600 1 MDT} + {4097203200 -25200 0 MST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Detroit b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Detroit new file mode 100644 index 00000000..696a663a --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Detroit @@ -0,0 +1,272 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Detroit) { + {-9223372036854775808 -19931 0 LMT} + {-2051202469 -21600 0 CST} + {-1724083200 -18000 0 EST} + {-883594800 -18000 0 EST} + {-880218000 -14400 1 EWT} + {-769395600 -14400 1 EPT} + {-765396000 -18000 0 EST} + {-757364400 -18000 0 EST} + {-684349200 -14400 1 EDT} + {-671047200 -18000 0 EST} + {-80499600 -14400 1 EDT} + {-68666400 -18000 0 EST} + {94712400 -18000 0 EST} + {104914800 -14400 1 EDT} + {120636000 -18000 0 EST} + {126687600 -14400 1 EDT} + {152085600 -18000 0 EST} + {157784400 -18000 0 EST} + {167814000 -14400 0 EDT} + {183535200 -18000 0 EST} + {199263600 -14400 1 EDT} + {215589600 -18000 0 EST} + {230713200 -14400 1 EDT} + {247039200 -18000 0 EST} + {262767600 -14400 1 EDT} + {278488800 -18000 0 EST} + {294217200 -14400 1 EDT} + {309938400 -18000 0 EST} + {325666800 -14400 1 EDT} + {341388000 -18000 0 EST} + {357116400 -14400 1 EDT} + {372837600 -18000 0 EST} + {388566000 -14400 1 EDT} + {404892000 -18000 0 EST} + {420015600 -14400 1 EDT} + {436341600 -18000 0 EST} + {452070000 -14400 1 EDT} + {467791200 -18000 0 EST} + {483519600 -14400 1 EDT} + {499240800 -18000 0 EST} + {514969200 -14400 1 EDT} + {530690400 -18000 0 EST} + {544604400 -14400 1 EDT} + {562140000 -18000 0 EST} + {576054000 -14400 1 EDT} + {594194400 -18000 0 EST} + {607503600 -14400 1 EDT} + {625644000 -18000 0 EST} + {638953200 -14400 1 EDT} + {657093600 -18000 0 EST} + {671007600 -14400 1 EDT} + {688543200 -18000 0 EST} + {702457200 -14400 1 EDT} + {719992800 -18000 0 EST} + {733906800 -14400 1 EDT} + {752047200 -18000 0 EST} + {765356400 -14400 1 EDT} + {783496800 -18000 0 EST} + {796806000 -14400 1 EDT} + {814946400 -18000 0 EST} + {828860400 -14400 1 EDT} + {846396000 -18000 0 EST} + {860310000 -14400 1 EDT} + {877845600 -18000 0 EST} + {891759600 -14400 1 EDT} + {909295200 -18000 0 EST} + {923209200 -14400 1 EDT} + {941349600 -18000 0 EST} + {954658800 -14400 1 EDT} + {972799200 -18000 0 EST} + {986108400 -14400 1 EDT} + {1004248800 -18000 0 EST} + {1018162800 -14400 1 EDT} + {1035698400 -18000 0 EST} + {1049612400 -14400 1 EDT} + {1067148000 -18000 0 EST} + {1081062000 -14400 1 EDT} + {1099202400 -18000 0 EST} + {1112511600 -14400 1 EDT} + {1130652000 -18000 0 EST} + {1143961200 -14400 1 EDT} + {1162101600 -18000 0 EST} + {1173596400 -14400 1 EDT} + {1194156000 -18000 0 EST} + {1205046000 -14400 1 EDT} + {1225605600 -18000 0 EST} + {1236495600 -14400 1 EDT} + {1257055200 -18000 0 EST} + {1268550000 -14400 1 EDT} + {1289109600 -18000 0 EST} + {1299999600 -14400 1 EDT} + {1320559200 -18000 0 EST} + {1331449200 -14400 1 EDT} + {1352008800 -18000 0 EST} + {1362898800 -14400 1 EDT} + {1383458400 -18000 0 EST} + {1394348400 -14400 1 EDT} + {1414908000 -18000 0 EST} + {1425798000 -14400 1 EDT} + {1446357600 -18000 0 EST} + {1457852400 -14400 1 EDT} + {1478412000 -18000 0 EST} + {1489302000 -14400 1 EDT} + {1509861600 -18000 0 EST} + {1520751600 -14400 1 EDT} + {1541311200 -18000 0 EST} + {1552201200 -14400 1 EDT} + {1572760800 -18000 0 EST} + {1583650800 -14400 1 EDT} + {1604210400 -18000 0 EST} + {1615705200 -14400 1 EDT} + {1636264800 -18000 0 EST} + {1647154800 -14400 1 EDT} + {1667714400 -18000 0 EST} + {1678604400 -14400 1 EDT} + {1699164000 -18000 0 EST} + {1710054000 -14400 1 EDT} + {1730613600 -18000 0 EST} + {1741503600 -14400 1 EDT} + {1762063200 -18000 0 EST} + {1772953200 -14400 1 EDT} + {1793512800 -18000 0 EST} + {1805007600 -14400 1 EDT} + {1825567200 -18000 0 EST} + {1836457200 -14400 1 EDT} + {1857016800 -18000 0 EST} + {1867906800 -14400 1 EDT} + {1888466400 -18000 0 EST} + {1899356400 -14400 1 EDT} + {1919916000 -18000 0 EST} + {1930806000 -14400 1 EDT} + {1951365600 -18000 0 EST} + {1962860400 -14400 1 EDT} + {1983420000 -18000 0 EST} + {1994310000 -14400 1 EDT} + {2014869600 -18000 0 EST} + {2025759600 -14400 1 EDT} + {2046319200 -18000 0 EST} + {2057209200 -14400 1 EDT} + {2077768800 -18000 0 EST} + {2088658800 -14400 1 EDT} + {2109218400 -18000 0 EST} + {2120108400 -14400 1 EDT} + {2140668000 -18000 0 EST} + {2152162800 -14400 1 EDT} + {2172722400 -18000 0 EST} + {2183612400 -14400 1 EDT} + {2204172000 -18000 0 EST} + {2215062000 -14400 1 EDT} + {2235621600 -18000 0 EST} + {2246511600 -14400 1 EDT} + {2267071200 -18000 0 EST} + {2277961200 -14400 1 EDT} + {2298520800 -18000 0 EST} + {2309410800 -14400 1 EDT} + {2329970400 -18000 0 EST} + {2341465200 -14400 1 EDT} + {2362024800 -18000 0 EST} + {2372914800 -14400 1 EDT} + {2393474400 -18000 0 EST} + {2404364400 -14400 1 EDT} + {2424924000 -18000 0 EST} + {2435814000 -14400 1 EDT} + {2456373600 -18000 0 EST} + {2467263600 -14400 1 EDT} + {2487823200 -18000 0 EST} + {2499318000 -14400 1 EDT} + {2519877600 -18000 0 EST} + {2530767600 -14400 1 EDT} + {2551327200 -18000 0 EST} + {2562217200 -14400 1 EDT} + {2582776800 -18000 0 EST} + {2593666800 -14400 1 EDT} + {2614226400 -18000 0 EST} + {2625116400 -14400 1 EDT} + {2645676000 -18000 0 EST} + {2656566000 -14400 1 EDT} + {2677125600 -18000 0 EST} + {2688620400 -14400 1 EDT} + {2709180000 -18000 0 EST} + {2720070000 -14400 1 EDT} + {2740629600 -18000 0 EST} + {2751519600 -14400 1 EDT} + {2772079200 -18000 0 EST} + {2782969200 -14400 1 EDT} + {2803528800 -18000 0 EST} + {2814418800 -14400 1 EDT} + {2834978400 -18000 0 EST} + {2846473200 -14400 1 EDT} + {2867032800 -18000 0 EST} + {2877922800 -14400 1 EDT} + {2898482400 -18000 0 EST} + {2909372400 -14400 1 EDT} + {2929932000 -18000 0 EST} + {2940822000 -14400 1 EDT} + {2961381600 -18000 0 EST} + {2972271600 -14400 1 EDT} + {2992831200 -18000 0 EST} + {3003721200 -14400 1 EDT} + {3024280800 -18000 0 EST} + {3035775600 -14400 1 EDT} + {3056335200 -18000 0 EST} + {3067225200 -14400 1 EDT} + {3087784800 -18000 0 EST} + {3098674800 -14400 1 EDT} + {3119234400 -18000 0 EST} + {3130124400 -14400 1 EDT} + {3150684000 -18000 0 EST} + {3161574000 -14400 1 EDT} + {3182133600 -18000 0 EST} + {3193023600 -14400 1 EDT} + {3213583200 -18000 0 EST} + {3225078000 -14400 1 EDT} + {3245637600 -18000 0 EST} + {3256527600 -14400 1 EDT} + {3277087200 -18000 0 EST} + {3287977200 -14400 1 EDT} + {3308536800 -18000 0 EST} + {3319426800 -14400 1 EDT} + {3339986400 -18000 0 EST} + {3350876400 -14400 1 EDT} + {3371436000 -18000 0 EST} + {3382930800 -14400 1 EDT} + {3403490400 -18000 0 EST} + {3414380400 -14400 1 EDT} + {3434940000 -18000 0 EST} + {3445830000 -14400 1 EDT} + {3466389600 -18000 0 EST} + {3477279600 -14400 1 EDT} + {3497839200 -18000 0 EST} + {3508729200 -14400 1 EDT} + {3529288800 -18000 0 EST} + {3540178800 -14400 1 EDT} + {3560738400 -18000 0 EST} + {3572233200 -14400 1 EDT} + {3592792800 -18000 0 EST} + {3603682800 -14400 1 EDT} + {3624242400 -18000 0 EST} + {3635132400 -14400 1 EDT} + {3655692000 -18000 0 EST} + {3666582000 -14400 1 EDT} + {3687141600 -18000 0 EST} + {3698031600 -14400 1 EDT} + {3718591200 -18000 0 EST} + {3730086000 -14400 1 EDT} + {3750645600 -18000 0 EST} + {3761535600 -14400 1 EDT} + {3782095200 -18000 0 EST} + {3792985200 -14400 1 EDT} + {3813544800 -18000 0 EST} + {3824434800 -14400 1 EDT} + {3844994400 -18000 0 EST} + {3855884400 -14400 1 EDT} + {3876444000 -18000 0 EST} + {3887334000 -14400 1 EDT} + {3907893600 -18000 0 EST} + {3919388400 -14400 1 EDT} + {3939948000 -18000 0 EST} + {3950838000 -14400 1 EDT} + {3971397600 -18000 0 EST} + {3982287600 -14400 1 EDT} + {4002847200 -18000 0 EST} + {4013737200 -14400 1 EDT} + {4034296800 -18000 0 EST} + {4045186800 -14400 1 EDT} + {4065746400 -18000 0 EST} + {4076636400 -14400 1 EDT} + {4097196000 -18000 0 EST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Dominica b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Dominica new file mode 100644 index 00000000..b97cb0ef --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Dominica @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Port_of_Spain)]} { + LoadTimeZoneFile America/Port_of_Spain +} +set TZData(:America/Dominica) $TZData(:America/Port_of_Spain) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Edmonton b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Edmonton new file mode 100644 index 00000000..1ed38be6 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Edmonton @@ -0,0 +1,284 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Edmonton) { + {-9223372036854775808 -27232 0 LMT} + {-1998663968 -25200 0 MST} + {-1632063600 -21600 1 MDT} + {-1615132800 -25200 0 MST} + {-1600614000 -21600 1 MDT} + {-1596816000 -25200 0 MST} + {-1567954800 -21600 1 MDT} + {-1551628800 -25200 0 MST} + {-1536505200 -21600 1 MDT} + {-1523203200 -25200 0 MST} + {-1504450800 -21600 1 MDT} + {-1491753600 -25200 0 MST} + {-1473001200 -21600 1 MDT} + {-1459699200 -25200 0 MST} + {-880210800 -21600 1 MWT} + {-769395600 -21600 1 MPT} + {-765388800 -25200 0 MST} + {-715791600 -21600 1 MDT} + {-702489600 -25200 0 MST} + {-84380400 -21600 1 MDT} + {-68659200 -25200 0 MST} + {-21481200 -21600 1 MDT} + {-5760000 -25200 0 MST} + {73472400 -21600 1 MDT} + {89193600 -25200 0 MST} + {104922000 -21600 1 MDT} + {120643200 -25200 0 MST} + {136371600 -21600 1 MDT} + {152092800 -25200 0 MST} + {167821200 -21600 1 MDT} + {183542400 -25200 0 MST} + {199270800 -21600 1 MDT} + {215596800 -25200 0 MST} + {230720400 -21600 1 MDT} + {247046400 -25200 0 MST} + {262774800 -21600 1 MDT} + {278496000 -25200 0 MST} + {294224400 -21600 1 MDT} + {309945600 -25200 0 MST} + {325674000 -21600 1 MDT} + {341395200 -25200 0 MST} + {357123600 -21600 1 MDT} + {372844800 -25200 0 MST} + {388573200 -21600 1 MDT} + {404899200 -25200 0 MST} + {420022800 -21600 1 MDT} + {436348800 -25200 0 MST} + {452077200 -21600 1 MDT} + {467798400 -25200 0 MST} + {483526800 -21600 1 MDT} + {499248000 -25200 0 MST} + {514976400 -21600 1 MDT} + {530697600 -25200 0 MST} + {536482800 -25200 0 MST} + {544611600 -21600 1 MDT} + {562147200 -25200 0 MST} + {576061200 -21600 1 MDT} + {594201600 -25200 0 MST} + {607510800 -21600 1 MDT} + {625651200 -25200 0 MST} + {638960400 -21600 1 MDT} + {657100800 -25200 0 MST} + {671014800 -21600 1 MDT} + {688550400 -25200 0 MST} + {702464400 -21600 1 MDT} + {720000000 -25200 0 MST} + {733914000 -21600 1 MDT} + {752054400 -25200 0 MST} + {765363600 -21600 1 MDT} + {783504000 -25200 0 MST} + {796813200 -21600 1 MDT} + {814953600 -25200 0 MST} + {828867600 -21600 1 MDT} + {846403200 -25200 0 MST} + {860317200 -21600 1 MDT} + {877852800 -25200 0 MST} + {891766800 -21600 1 MDT} + {909302400 -25200 0 MST} + {923216400 -21600 1 MDT} + {941356800 -25200 0 MST} + {954666000 -21600 1 MDT} + {972806400 -25200 0 MST} + {986115600 -21600 1 MDT} + {1004256000 -25200 0 MST} + {1018170000 -21600 1 MDT} + {1035705600 -25200 0 MST} + {1049619600 -21600 1 MDT} + {1067155200 -25200 0 MST} + {1081069200 -21600 1 MDT} + {1099209600 -25200 0 MST} + {1112518800 -21600 1 MDT} + {1130659200 -25200 0 MST} + {1143968400 -21600 1 MDT} + {1162108800 -25200 0 MST} + {1173603600 -21600 1 MDT} + {1194163200 -25200 0 MST} + {1205053200 -21600 1 MDT} + {1225612800 -25200 0 MST} + {1236502800 -21600 1 MDT} + {1257062400 -25200 0 MST} + {1268557200 -21600 1 MDT} + {1289116800 -25200 0 MST} + {1300006800 -21600 1 MDT} + {1320566400 -25200 0 MST} + {1331456400 -21600 1 MDT} + {1352016000 -25200 0 MST} + {1362906000 -21600 1 MDT} + {1383465600 -25200 0 MST} + {1394355600 -21600 1 MDT} + {1414915200 -25200 0 MST} + {1425805200 -21600 1 MDT} + {1446364800 -25200 0 MST} + {1457859600 -21600 1 MDT} + {1478419200 -25200 0 MST} + {1489309200 -21600 1 MDT} + {1509868800 -25200 0 MST} + {1520758800 -21600 1 MDT} + {1541318400 -25200 0 MST} + {1552208400 -21600 1 MDT} + {1572768000 -25200 0 MST} + {1583658000 -21600 1 MDT} + {1604217600 -25200 0 MST} + {1615712400 -21600 1 MDT} + {1636272000 -25200 0 MST} + {1647162000 -21600 1 MDT} + {1667721600 -25200 0 MST} + {1678611600 -21600 1 MDT} + {1699171200 -25200 0 MST} + {1710061200 -21600 1 MDT} + {1730620800 -25200 0 MST} + {1741510800 -21600 1 MDT} + {1762070400 -25200 0 MST} + {1772960400 -21600 1 MDT} + {1793520000 -25200 0 MST} + {1805014800 -21600 1 MDT} + {1825574400 -25200 0 MST} + {1836464400 -21600 1 MDT} + {1857024000 -25200 0 MST} + {1867914000 -21600 1 MDT} + {1888473600 -25200 0 MST} + {1899363600 -21600 1 MDT} + {1919923200 -25200 0 MST} + {1930813200 -21600 1 MDT} + {1951372800 -25200 0 MST} + {1962867600 -21600 1 MDT} + {1983427200 -25200 0 MST} + {1994317200 -21600 1 MDT} + {2014876800 -25200 0 MST} + {2025766800 -21600 1 MDT} + {2046326400 -25200 0 MST} + {2057216400 -21600 1 MDT} + {2077776000 -25200 0 MST} + {2088666000 -21600 1 MDT} + {2109225600 -25200 0 MST} + {2120115600 -21600 1 MDT} + {2140675200 -25200 0 MST} + {2152170000 -21600 1 MDT} + {2172729600 -25200 0 MST} + {2183619600 -21600 1 MDT} + {2204179200 -25200 0 MST} + {2215069200 -21600 1 MDT} + {2235628800 -25200 0 MST} + {2246518800 -21600 1 MDT} + {2267078400 -25200 0 MST} + {2277968400 -21600 1 MDT} + {2298528000 -25200 0 MST} + {2309418000 -21600 1 MDT} + {2329977600 -25200 0 MST} + {2341472400 -21600 1 MDT} + {2362032000 -25200 0 MST} + {2372922000 -21600 1 MDT} + {2393481600 -25200 0 MST} + {2404371600 -21600 1 MDT} + {2424931200 -25200 0 MST} + {2435821200 -21600 1 MDT} + {2456380800 -25200 0 MST} + {2467270800 -21600 1 MDT} + {2487830400 -25200 0 MST} + {2499325200 -21600 1 MDT} + {2519884800 -25200 0 MST} + {2530774800 -21600 1 MDT} + {2551334400 -25200 0 MST} + {2562224400 -21600 1 MDT} + {2582784000 -25200 0 MST} + {2593674000 -21600 1 MDT} + {2614233600 -25200 0 MST} + {2625123600 -21600 1 MDT} + {2645683200 -25200 0 MST} + {2656573200 -21600 1 MDT} + {2677132800 -25200 0 MST} + {2688627600 -21600 1 MDT} + {2709187200 -25200 0 MST} + {2720077200 -21600 1 MDT} + {2740636800 -25200 0 MST} + {2751526800 -21600 1 MDT} + {2772086400 -25200 0 MST} + {2782976400 -21600 1 MDT} + {2803536000 -25200 0 MST} + {2814426000 -21600 1 MDT} + {2834985600 -25200 0 MST} + {2846480400 -21600 1 MDT} + {2867040000 -25200 0 MST} + {2877930000 -21600 1 MDT} + {2898489600 -25200 0 MST} + {2909379600 -21600 1 MDT} + {2929939200 -25200 0 MST} + {2940829200 -21600 1 MDT} + {2961388800 -25200 0 MST} + {2972278800 -21600 1 MDT} + {2992838400 -25200 0 MST} + {3003728400 -21600 1 MDT} + {3024288000 -25200 0 MST} + {3035782800 -21600 1 MDT} + {3056342400 -25200 0 MST} + {3067232400 -21600 1 MDT} + {3087792000 -25200 0 MST} + {3098682000 -21600 1 MDT} + {3119241600 -25200 0 MST} + {3130131600 -21600 1 MDT} + {3150691200 -25200 0 MST} + {3161581200 -21600 1 MDT} + {3182140800 -25200 0 MST} + {3193030800 -21600 1 MDT} + {3213590400 -25200 0 MST} + {3225085200 -21600 1 MDT} + {3245644800 -25200 0 MST} + {3256534800 -21600 1 MDT} + {3277094400 -25200 0 MST} + {3287984400 -21600 1 MDT} + {3308544000 -25200 0 MST} + {3319434000 -21600 1 MDT} + {3339993600 -25200 0 MST} + {3350883600 -21600 1 MDT} + {3371443200 -25200 0 MST} + {3382938000 -21600 1 MDT} + {3403497600 -25200 0 MST} + {3414387600 -21600 1 MDT} + {3434947200 -25200 0 MST} + {3445837200 -21600 1 MDT} + {3466396800 -25200 0 MST} + {3477286800 -21600 1 MDT} + {3497846400 -25200 0 MST} + {3508736400 -21600 1 MDT} + {3529296000 -25200 0 MST} + {3540186000 -21600 1 MDT} + {3560745600 -25200 0 MST} + {3572240400 -21600 1 MDT} + {3592800000 -25200 0 MST} + {3603690000 -21600 1 MDT} + {3624249600 -25200 0 MST} + {3635139600 -21600 1 MDT} + {3655699200 -25200 0 MST} + {3666589200 -21600 1 MDT} + {3687148800 -25200 0 MST} + {3698038800 -21600 1 MDT} + {3718598400 -25200 0 MST} + {3730093200 -21600 1 MDT} + {3750652800 -25200 0 MST} + {3761542800 -21600 1 MDT} + {3782102400 -25200 0 MST} + {3792992400 -21600 1 MDT} + {3813552000 -25200 0 MST} + {3824442000 -21600 1 MDT} + {3845001600 -25200 0 MST} + {3855891600 -21600 1 MDT} + {3876451200 -25200 0 MST} + {3887341200 -21600 1 MDT} + {3907900800 -25200 0 MST} + {3919395600 -21600 1 MDT} + {3939955200 -25200 0 MST} + {3950845200 -21600 1 MDT} + {3971404800 -25200 0 MST} + {3982294800 -21600 1 MDT} + {4002854400 -25200 0 MST} + {4013744400 -21600 1 MDT} + {4034304000 -25200 0 MST} + {4045194000 -21600 1 MDT} + {4065753600 -25200 0 MST} + {4076643600 -21600 1 MDT} + {4097203200 -25200 0 MST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Eirunepe b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Eirunepe new file mode 100644 index 00000000..a05631f6 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Eirunepe @@ -0,0 +1,41 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Eirunepe) { + {-9223372036854775808 -16768 0 LMT} + {-1767208832 -18000 0 ACT} + {-1206950400 -14400 1 ACST} + {-1191355200 -18000 0 ACT} + {-1175367600 -14400 1 ACST} + {-1159819200 -18000 0 ACT} + {-633812400 -14400 1 ACST} + {-622062000 -18000 0 ACT} + {-602276400 -14400 1 ACST} + {-591825600 -18000 0 ACT} + {-570740400 -14400 1 ACST} + {-560203200 -18000 0 ACT} + {-539118000 -14400 1 ACST} + {-531345600 -18000 0 ACT} + {-191358000 -14400 1 ACST} + {-184190400 -18000 0 ACT} + {-155156400 -14400 1 ACST} + {-150062400 -18000 0 ACT} + {-128890800 -14400 1 ACST} + {-121118400 -18000 0 ACT} + {-99946800 -14400 1 ACST} + {-89582400 -18000 0 ACT} + {-68410800 -14400 1 ACST} + {-57960000 -18000 0 ACT} + {499755600 -14400 1 ACST} + {511243200 -18000 0 ACT} + {530600400 -14400 1 ACST} + {540273600 -18000 0 ACT} + {562136400 -14400 1 ACST} + {571204800 -18000 0 ACT} + {590040000 -18000 0 ACT} + {749192400 -18000 0 ACT} + {750834000 -14400 1 ACST} + {761716800 -18000 0 ACT} + {780206400 -18000 0 ACT} + {1214283600 -14400 0 AMT} + {1384056000 -18000 0 ACT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/El_Salvador b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/El_Salvador new file mode 100644 index 00000000..75d8129a --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/El_Salvador @@ -0,0 +1,10 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/El_Salvador) { + {-9223372036854775808 -21408 0 LMT} + {-1546279392 -21600 0 CST} + {547020000 -18000 1 CDT} + {559717200 -21600 0 CST} + {578469600 -18000 1 CDT} + {591166800 -21600 0 CST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Ensenada b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Ensenada new file mode 100644 index 00000000..f600305d --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Ensenada @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Tijuana)]} { + LoadTimeZoneFile America/Tijuana +} +set TZData(:America/Ensenada) $TZData(:America/Tijuana) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Fort_Nelson b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Fort_Nelson new file mode 100644 index 00000000..d8193688 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Fort_Nelson @@ -0,0 +1,151 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Fort_Nelson) { + {-9223372036854775808 -29447 0 LMT} + {-2713880953 -28800 0 PST} + {-1632060000 -25200 1 PDT} + {-1615129200 -28800 0 PST} + {-880207200 -25200 1 PWT} + {-769395600 -25200 1 PPT} + {-765385200 -28800 0 PST} + {-757353600 -28800 0 PST} + {-725817600 -28800 0 PST} + {-715788000 -25200 1 PDT} + {-702486000 -28800 0 PST} + {-684338400 -25200 1 PDT} + {-671036400 -28800 0 PST} + {-652888800 -25200 1 PDT} + {-639586800 -28800 0 PST} + {-620834400 -25200 1 PDT} + {-608137200 -28800 0 PST} + {-589384800 -25200 1 PDT} + {-576082800 -28800 0 PST} + {-557935200 -25200 1 PDT} + {-544633200 -28800 0 PST} + {-526485600 -25200 1 PDT} + {-513183600 -28800 0 PST} + {-495036000 -25200 1 PDT} + {-481734000 -28800 0 PST} + {-463586400 -25200 1 PDT} + {-450284400 -28800 0 PST} + {-431532000 -25200 1 PDT} + {-418230000 -28800 0 PST} + {-400082400 -25200 1 PDT} + {-386780400 -28800 0 PST} + {-368632800 -25200 1 PDT} + {-355330800 -28800 0 PST} + {-337183200 -25200 1 PDT} + {-323881200 -28800 0 PST} + {-305733600 -25200 1 PDT} + {-292431600 -28800 0 PST} + {-273679200 -25200 1 PDT} + {-260982000 -28800 0 PST} + {-242229600 -25200 1 PDT} + {-226508400 -28800 0 PST} + {-210780000 -25200 1 PDT} + {-195058800 -28800 0 PST} + {-179330400 -25200 1 PDT} + {-163609200 -28800 0 PST} + {-147880800 -25200 1 PDT} + {-131554800 -28800 0 PST} + {-116431200 -25200 1 PDT} + {-100105200 -28800 0 PST} + {-84376800 -25200 1 PDT} + {-68655600 -28800 0 PST} + {-52927200 -25200 1 PDT} + {-37206000 -28800 0 PST} + {-21477600 -25200 1 PDT} + {-5756400 -28800 0 PST} + {9972000 -25200 1 PDT} + {25693200 -28800 0 PST} + {41421600 -25200 1 PDT} + {57747600 -28800 0 PST} + {73476000 -25200 1 PDT} + {89197200 -28800 0 PST} + {104925600 -25200 1 PDT} + {120646800 -28800 0 PST} + {136375200 -25200 1 PDT} + {152096400 -28800 0 PST} + {167824800 -25200 1 PDT} + {183546000 -28800 0 PST} + {199274400 -25200 1 PDT} + {215600400 -28800 0 PST} + {230724000 -25200 1 PDT} + {247050000 -28800 0 PST} + {262778400 -25200 1 PDT} + {278499600 -28800 0 PST} + {294228000 -25200 1 PDT} + {309949200 -28800 0 PST} + {325677600 -25200 1 PDT} + {341398800 -28800 0 PST} + {357127200 -25200 1 PDT} + {372848400 -28800 0 PST} + {388576800 -25200 1 PDT} + {404902800 -28800 0 PST} + {420026400 -25200 1 PDT} + {436352400 -28800 0 PST} + {452080800 -25200 1 PDT} + {467802000 -28800 0 PST} + {483530400 -25200 1 PDT} + {499251600 -28800 0 PST} + {514980000 -25200 1 PDT} + {530701200 -28800 0 PST} + {536486400 -28800 0 PST} + {544615200 -25200 1 PDT} + {562150800 -28800 0 PST} + {576064800 -25200 1 PDT} + {594205200 -28800 0 PST} + {607514400 -25200 1 PDT} + {625654800 -28800 0 PST} + {638964000 -25200 1 PDT} + {657104400 -28800 0 PST} + {671018400 -25200 1 PDT} + {688554000 -28800 0 PST} + {702468000 -25200 1 PDT} + {720003600 -28800 0 PST} + {733917600 -25200 1 PDT} + {752058000 -28800 0 PST} + {765367200 -25200 1 PDT} + {783507600 -28800 0 PST} + {796816800 -25200 1 PDT} + {814957200 -28800 0 PST} + {828871200 -25200 1 PDT} + {846406800 -28800 0 PST} + {860320800 -25200 1 PDT} + {877856400 -28800 0 PST} + {891770400 -25200 1 PDT} + {909306000 -28800 0 PST} + {923220000 -25200 1 PDT} + {941360400 -28800 0 PST} + {954669600 -25200 1 PDT} + {972810000 -28800 0 PST} + {986119200 -25200 1 PDT} + {1004259600 -28800 0 PST} + {1018173600 -25200 1 PDT} + {1035709200 -28800 0 PST} + {1049623200 -25200 1 PDT} + {1067158800 -28800 0 PST} + {1081072800 -25200 1 PDT} + {1099213200 -28800 0 PST} + {1112522400 -25200 1 PDT} + {1130662800 -28800 0 PST} + {1143972000 -25200 1 PDT} + {1162112400 -28800 0 PST} + {1173607200 -25200 1 PDT} + {1194166800 -28800 0 PST} + {1205056800 -25200 1 PDT} + {1225616400 -28800 0 PST} + {1236506400 -25200 1 PDT} + {1257066000 -28800 0 PST} + {1268560800 -25200 1 PDT} + {1289120400 -28800 0 PST} + {1300010400 -25200 1 PDT} + {1320570000 -28800 0 PST} + {1331460000 -25200 1 PDT} + {1352019600 -28800 0 PST} + {1362909600 -25200 1 PDT} + {1383469200 -28800 0 PST} + {1394359200 -25200 1 PDT} + {1414918800 -28800 0 PST} + {1425808800 -25200 0 MST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Fort_Wayne b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Fort_Wayne new file mode 100644 index 00000000..9514d57f --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Fort_Wayne @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Indiana/Indianapolis)]} { + LoadTimeZoneFile America/Indiana/Indianapolis +} +set TZData(:America/Fort_Wayne) $TZData(:America/Indiana/Indianapolis) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Fortaleza b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Fortaleza new file mode 100644 index 00000000..581faa5b --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Fortaleza @@ -0,0 +1,48 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Fortaleza) { + {-9223372036854775808 -9240 0 LMT} + {-1767216360 -10800 0 BRT} + {-1206957600 -7200 1 BRST} + {-1191362400 -10800 0 BRT} + {-1175374800 -7200 1 BRST} + {-1159826400 -10800 0 BRT} + {-633819600 -7200 1 BRST} + {-622069200 -10800 0 BRT} + {-602283600 -7200 1 BRST} + {-591832800 -10800 0 BRT} + {-570747600 -7200 1 BRST} + {-560210400 -10800 0 BRT} + {-539125200 -7200 1 BRST} + {-531352800 -10800 0 BRT} + {-191365200 -7200 1 BRST} + {-184197600 -10800 0 BRT} + {-155163600 -7200 1 BRST} + {-150069600 -10800 0 BRT} + {-128898000 -7200 1 BRST} + {-121125600 -10800 0 BRT} + {-99954000 -7200 1 BRST} + {-89589600 -10800 0 BRT} + {-68418000 -7200 1 BRST} + {-57967200 -10800 0 BRT} + {499748400 -7200 1 BRST} + {511236000 -10800 0 BRT} + {530593200 -7200 1 BRST} + {540266400 -10800 0 BRT} + {562129200 -7200 1 BRST} + {571197600 -10800 0 BRT} + {592974000 -7200 1 BRST} + {602042400 -10800 0 BRT} + {624423600 -7200 1 BRST} + {634701600 -10800 0 BRT} + {653536800 -10800 0 BRT} + {938660400 -10800 0 BRT} + {938919600 -7200 1 BRST} + {951616800 -10800 0 BRT} + {970974000 -7200 1 BRST} + {972180000 -10800 0 BRT} + {1000350000 -10800 0 BRT} + {1003028400 -7200 1 BRST} + {1013911200 -10800 0 BRT} + {1033437600 -10800 0 BRT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Glace_Bay b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Glace_Bay new file mode 100644 index 00000000..8ee9eecc --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Glace_Bay @@ -0,0 +1,273 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Glace_Bay) { + {-9223372036854775808 -14388 0 LMT} + {-2131646412 -14400 0 AST} + {-1632074400 -10800 1 ADT} + {-1615143600 -14400 0 AST} + {-880221600 -10800 1 AWT} + {-769395600 -10800 1 APT} + {-765399600 -14400 0 AST} + {-536443200 -14400 0 AST} + {-526500000 -10800 1 ADT} + {-513198000 -14400 0 AST} + {-504907200 -14400 0 AST} + {63086400 -14400 0 AST} + {73461600 -10800 1 ADT} + {89182800 -14400 0 AST} + {104911200 -10800 1 ADT} + {120632400 -14400 0 AST} + {126244800 -14400 0 AST} + {136360800 -10800 1 ADT} + {152082000 -14400 0 AST} + {167810400 -10800 1 ADT} + {183531600 -14400 0 AST} + {199260000 -10800 1 ADT} + {215586000 -14400 0 AST} + {230709600 -10800 1 ADT} + {247035600 -14400 0 AST} + {262764000 -10800 1 ADT} + {278485200 -14400 0 AST} + {294213600 -10800 1 ADT} + {309934800 -14400 0 AST} + {325663200 -10800 1 ADT} + {341384400 -14400 0 AST} + {357112800 -10800 1 ADT} + {372834000 -14400 0 AST} + {388562400 -10800 1 ADT} + {404888400 -14400 0 AST} + {420012000 -10800 1 ADT} + {436338000 -14400 0 AST} + {452066400 -10800 1 ADT} + {467787600 -14400 0 AST} + {483516000 -10800 1 ADT} + {499237200 -14400 0 AST} + {514965600 -10800 1 ADT} + {530686800 -14400 0 AST} + {544600800 -10800 1 ADT} + {562136400 -14400 0 AST} + {576050400 -10800 1 ADT} + {594190800 -14400 0 AST} + {607500000 -10800 1 ADT} + {625640400 -14400 0 AST} + {638949600 -10800 1 ADT} + {657090000 -14400 0 AST} + {671004000 -10800 1 ADT} + {688539600 -14400 0 AST} + {702453600 -10800 1 ADT} + {719989200 -14400 0 AST} + {733903200 -10800 1 ADT} + {752043600 -14400 0 AST} + {765352800 -10800 1 ADT} + {783493200 -14400 0 AST} + {796802400 -10800 1 ADT} + {814942800 -14400 0 AST} + {828856800 -10800 1 ADT} + {846392400 -14400 0 AST} + {860306400 -10800 1 ADT} + {877842000 -14400 0 AST} + {891756000 -10800 1 ADT} + {909291600 -14400 0 AST} + {923205600 -10800 1 ADT} + {941346000 -14400 0 AST} + {954655200 -10800 1 ADT} + {972795600 -14400 0 AST} + {986104800 -10800 1 ADT} + {1004245200 -14400 0 AST} + {1018159200 -10800 1 ADT} + {1035694800 -14400 0 AST} + {1049608800 -10800 1 ADT} + {1067144400 -14400 0 AST} + {1081058400 -10800 1 ADT} + {1099198800 -14400 0 AST} + {1112508000 -10800 1 ADT} + {1130648400 -14400 0 AST} + {1143957600 -10800 1 ADT} + {1162098000 -14400 0 AST} + {1173592800 -10800 1 ADT} + {1194152400 -14400 0 AST} + {1205042400 -10800 1 ADT} + {1225602000 -14400 0 AST} + {1236492000 -10800 1 ADT} + {1257051600 -14400 0 AST} + {1268546400 -10800 1 ADT} + {1289106000 -14400 0 AST} + {1299996000 -10800 1 ADT} + {1320555600 -14400 0 AST} + {1331445600 -10800 1 ADT} + {1352005200 -14400 0 AST} + {1362895200 -10800 1 ADT} + {1383454800 -14400 0 AST} + {1394344800 -10800 1 ADT} + {1414904400 -14400 0 AST} + {1425794400 -10800 1 ADT} + {1446354000 -14400 0 AST} + {1457848800 -10800 1 ADT} + {1478408400 -14400 0 AST} + {1489298400 -10800 1 ADT} + {1509858000 -14400 0 AST} + {1520748000 -10800 1 ADT} + {1541307600 -14400 0 AST} + {1552197600 -10800 1 ADT} + {1572757200 -14400 0 AST} + {1583647200 -10800 1 ADT} + {1604206800 -14400 0 AST} + {1615701600 -10800 1 ADT} + {1636261200 -14400 0 AST} + {1647151200 -10800 1 ADT} + {1667710800 -14400 0 AST} + {1678600800 -10800 1 ADT} + {1699160400 -14400 0 AST} + {1710050400 -10800 1 ADT} + {1730610000 -14400 0 AST} + {1741500000 -10800 1 ADT} + {1762059600 -14400 0 AST} + {1772949600 -10800 1 ADT} + {1793509200 -14400 0 AST} + {1805004000 -10800 1 ADT} + {1825563600 -14400 0 AST} + {1836453600 -10800 1 ADT} + {1857013200 -14400 0 AST} + {1867903200 -10800 1 ADT} + {1888462800 -14400 0 AST} + {1899352800 -10800 1 ADT} + {1919912400 -14400 0 AST} + {1930802400 -10800 1 ADT} + {1951362000 -14400 0 AST} + {1962856800 -10800 1 ADT} + {1983416400 -14400 0 AST} + {1994306400 -10800 1 ADT} + {2014866000 -14400 0 AST} + {2025756000 -10800 1 ADT} + {2046315600 -14400 0 AST} + {2057205600 -10800 1 ADT} + {2077765200 -14400 0 AST} + {2088655200 -10800 1 ADT} + {2109214800 -14400 0 AST} + {2120104800 -10800 1 ADT} + {2140664400 -14400 0 AST} + {2152159200 -10800 1 ADT} + {2172718800 -14400 0 AST} + {2183608800 -10800 1 ADT} + {2204168400 -14400 0 AST} + {2215058400 -10800 1 ADT} + {2235618000 -14400 0 AST} + {2246508000 -10800 1 ADT} + {2267067600 -14400 0 AST} + {2277957600 -10800 1 ADT} + {2298517200 -14400 0 AST} + {2309407200 -10800 1 ADT} + {2329966800 -14400 0 AST} + {2341461600 -10800 1 ADT} + {2362021200 -14400 0 AST} + {2372911200 -10800 1 ADT} + {2393470800 -14400 0 AST} + {2404360800 -10800 1 ADT} + {2424920400 -14400 0 AST} + {2435810400 -10800 1 ADT} + {2456370000 -14400 0 AST} + {2467260000 -10800 1 ADT} + {2487819600 -14400 0 AST} + {2499314400 -10800 1 ADT} + {2519874000 -14400 0 AST} + {2530764000 -10800 1 ADT} + {2551323600 -14400 0 AST} + {2562213600 -10800 1 ADT} + {2582773200 -14400 0 AST} + {2593663200 -10800 1 ADT} + {2614222800 -14400 0 AST} + {2625112800 -10800 1 ADT} + {2645672400 -14400 0 AST} + {2656562400 -10800 1 ADT} + {2677122000 -14400 0 AST} + {2688616800 -10800 1 ADT} + {2709176400 -14400 0 AST} + {2720066400 -10800 1 ADT} + {2740626000 -14400 0 AST} + {2751516000 -10800 1 ADT} + {2772075600 -14400 0 AST} + {2782965600 -10800 1 ADT} + {2803525200 -14400 0 AST} + {2814415200 -10800 1 ADT} + {2834974800 -14400 0 AST} + {2846469600 -10800 1 ADT} + {2867029200 -14400 0 AST} + {2877919200 -10800 1 ADT} + {2898478800 -14400 0 AST} + {2909368800 -10800 1 ADT} + {2929928400 -14400 0 AST} + {2940818400 -10800 1 ADT} + {2961378000 -14400 0 AST} + {2972268000 -10800 1 ADT} + {2992827600 -14400 0 AST} + {3003717600 -10800 1 ADT} + {3024277200 -14400 0 AST} + {3035772000 -10800 1 ADT} + {3056331600 -14400 0 AST} + {3067221600 -10800 1 ADT} + {3087781200 -14400 0 AST} + {3098671200 -10800 1 ADT} + {3119230800 -14400 0 AST} + {3130120800 -10800 1 ADT} + {3150680400 -14400 0 AST} + {3161570400 -10800 1 ADT} + {3182130000 -14400 0 AST} + {3193020000 -10800 1 ADT} + {3213579600 -14400 0 AST} + {3225074400 -10800 1 ADT} + {3245634000 -14400 0 AST} + {3256524000 -10800 1 ADT} + {3277083600 -14400 0 AST} + {3287973600 -10800 1 ADT} + {3308533200 -14400 0 AST} + {3319423200 -10800 1 ADT} + {3339982800 -14400 0 AST} + {3350872800 -10800 1 ADT} + {3371432400 -14400 0 AST} + {3382927200 -10800 1 ADT} + {3403486800 -14400 0 AST} + {3414376800 -10800 1 ADT} + {3434936400 -14400 0 AST} + {3445826400 -10800 1 ADT} + {3466386000 -14400 0 AST} + {3477276000 -10800 1 ADT} + {3497835600 -14400 0 AST} + {3508725600 -10800 1 ADT} + {3529285200 -14400 0 AST} + {3540175200 -10800 1 ADT} + {3560734800 -14400 0 AST} + {3572229600 -10800 1 ADT} + {3592789200 -14400 0 AST} + {3603679200 -10800 1 ADT} + {3624238800 -14400 0 AST} + {3635128800 -10800 1 ADT} + {3655688400 -14400 0 AST} + {3666578400 -10800 1 ADT} + {3687138000 -14400 0 AST} + {3698028000 -10800 1 ADT} + {3718587600 -14400 0 AST} + {3730082400 -10800 1 ADT} + {3750642000 -14400 0 AST} + {3761532000 -10800 1 ADT} + {3782091600 -14400 0 AST} + {3792981600 -10800 1 ADT} + {3813541200 -14400 0 AST} + {3824431200 -10800 1 ADT} + {3844990800 -14400 0 AST} + {3855880800 -10800 1 ADT} + {3876440400 -14400 0 AST} + {3887330400 -10800 1 ADT} + {3907890000 -14400 0 AST} + {3919384800 -10800 1 ADT} + {3939944400 -14400 0 AST} + {3950834400 -10800 1 ADT} + {3971394000 -14400 0 AST} + {3982284000 -10800 1 ADT} + {4002843600 -14400 0 AST} + {4013733600 -10800 1 ADT} + {4034293200 -14400 0 AST} + {4045183200 -10800 1 ADT} + {4065742800 -14400 0 AST} + {4076632800 -10800 1 ADT} + {4097192400 -14400 0 AST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Godthab b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Godthab new file mode 100644 index 00000000..3c003ccf --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Godthab @@ -0,0 +1,246 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Godthab) { + {-9223372036854775808 -12416 0 LMT} + {-1686083584 -10800 0 WGT} + {323845200 -7200 0 WGST} + {338950800 -10800 0 WGT} + {354675600 -7200 1 WGST} + {370400400 -10800 0 WGT} + {386125200 -7200 1 WGST} + {401850000 -10800 0 WGT} + {417574800 -7200 1 WGST} + {433299600 -10800 0 WGT} + {449024400 -7200 1 WGST} + {465354000 -10800 0 WGT} + {481078800 -7200 1 WGST} + {496803600 -10800 0 WGT} + {512528400 -7200 1 WGST} + {528253200 -10800 0 WGT} + {543978000 -7200 1 WGST} + {559702800 -10800 0 WGT} + {575427600 -7200 1 WGST} + {591152400 -10800 0 WGT} + {606877200 -7200 1 WGST} + {622602000 -10800 0 WGT} + {638326800 -7200 1 WGST} + {654656400 -10800 0 WGT} + {670381200 -7200 1 WGST} + {686106000 -10800 0 WGT} + {701830800 -7200 1 WGST} + {717555600 -10800 0 WGT} + {733280400 -7200 1 WGST} + {749005200 -10800 0 WGT} + {764730000 -7200 1 WGST} + {780454800 -10800 0 WGT} + {796179600 -7200 1 WGST} + {811904400 -10800 0 WGT} + {828234000 -7200 1 WGST} + {846378000 -10800 0 WGT} + {859683600 -7200 1 WGST} + {877827600 -10800 0 WGT} + {891133200 -7200 1 WGST} + {909277200 -10800 0 WGT} + {922582800 -7200 1 WGST} + {941331600 -10800 0 WGT} + {954032400 -7200 1 WGST} + {972781200 -10800 0 WGT} + {985482000 -7200 1 WGST} + {1004230800 -10800 0 WGT} + {1017536400 -7200 1 WGST} + {1035680400 -10800 0 WGT} + {1048986000 -7200 1 WGST} + {1067130000 -10800 0 WGT} + {1080435600 -7200 1 WGST} + {1099184400 -10800 0 WGT} + {1111885200 -7200 1 WGST} + {1130634000 -10800 0 WGT} + {1143334800 -7200 1 WGST} + {1162083600 -10800 0 WGT} + {1174784400 -7200 1 WGST} + {1193533200 -10800 0 WGT} + {1206838800 -7200 1 WGST} + {1224982800 -10800 0 WGT} + {1238288400 -7200 1 WGST} + {1256432400 -10800 0 WGT} + {1269738000 -7200 1 WGST} + {1288486800 -10800 0 WGT} + {1301187600 -7200 1 WGST} + {1319936400 -10800 0 WGT} + {1332637200 -7200 1 WGST} + {1351386000 -10800 0 WGT} + {1364691600 -7200 1 WGST} + {1382835600 -10800 0 WGT} + {1396141200 -7200 1 WGST} + {1414285200 -10800 0 WGT} + {1427590800 -7200 1 WGST} + {1445734800 -10800 0 WGT} + {1459040400 -7200 1 WGST} + {1477789200 -10800 0 WGT} + {1490490000 -7200 1 WGST} + {1509238800 -10800 0 WGT} + {1521939600 -7200 1 WGST} + {1540688400 -10800 0 WGT} + {1553994000 -7200 1 WGST} + {1572138000 -10800 0 WGT} + {1585443600 -7200 1 WGST} + {1603587600 -10800 0 WGT} + {1616893200 -7200 1 WGST} + {1635642000 -10800 0 WGT} + {1648342800 -7200 1 WGST} + {1667091600 -10800 0 WGT} + {1679792400 -7200 1 WGST} + {1698541200 -10800 0 WGT} + {1711846800 -7200 1 WGST} + {1729990800 -10800 0 WGT} + {1743296400 -7200 1 WGST} + {1761440400 -10800 0 WGT} + {1774746000 -7200 1 WGST} + {1792890000 -10800 0 WGT} + {1806195600 -7200 1 WGST} + {1824944400 -10800 0 WGT} + {1837645200 -7200 1 WGST} + {1856394000 -10800 0 WGT} + {1869094800 -7200 1 WGST} + {1887843600 -10800 0 WGT} + {1901149200 -7200 1 WGST} + {1919293200 -10800 0 WGT} + {1932598800 -7200 1 WGST} + {1950742800 -10800 0 WGT} + {1964048400 -7200 1 WGST} + {1982797200 -10800 0 WGT} + {1995498000 -7200 1 WGST} + {2014246800 -10800 0 WGT} + {2026947600 -7200 1 WGST} + {2045696400 -10800 0 WGT} + {2058397200 -7200 1 WGST} + {2077146000 -10800 0 WGT} + {2090451600 -7200 1 WGST} + {2108595600 -10800 0 WGT} + {2121901200 -7200 1 WGST} + {2140045200 -10800 0 WGT} + {2153350800 -7200 1 WGST} + {2172099600 -10800 0 WGT} + {2184800400 -7200 1 WGST} + {2203549200 -10800 0 WGT} + {2216250000 -7200 1 WGST} + {2234998800 -10800 0 WGT} + {2248304400 -7200 1 WGST} + {2266448400 -10800 0 WGT} + {2279754000 -7200 1 WGST} + {2297898000 -10800 0 WGT} + {2311203600 -7200 1 WGST} + {2329347600 -10800 0 WGT} + {2342653200 -7200 1 WGST} + {2361402000 -10800 0 WGT} + {2374102800 -7200 1 WGST} + {2392851600 -10800 0 WGT} + {2405552400 -7200 1 WGST} + {2424301200 -10800 0 WGT} + {2437606800 -7200 1 WGST} + {2455750800 -10800 0 WGT} + {2469056400 -7200 1 WGST} + {2487200400 -10800 0 WGT} + {2500506000 -7200 1 WGST} + {2519254800 -10800 0 WGT} + {2531955600 -7200 1 WGST} + {2550704400 -10800 0 WGT} + {2563405200 -7200 1 WGST} + {2582154000 -10800 0 WGT} + {2595459600 -7200 1 WGST} + {2613603600 -10800 0 WGT} + {2626909200 -7200 1 WGST} + {2645053200 -10800 0 WGT} + {2658358800 -7200 1 WGST} + {2676502800 -10800 0 WGT} + {2689808400 -7200 1 WGST} + {2708557200 -10800 0 WGT} + {2721258000 -7200 1 WGST} + {2740006800 -10800 0 WGT} + {2752707600 -7200 1 WGST} + {2771456400 -10800 0 WGT} + {2784762000 -7200 1 WGST} + {2802906000 -10800 0 WGT} + {2816211600 -7200 1 WGST} + {2834355600 -10800 0 WGT} + {2847661200 -7200 1 WGST} + {2866410000 -10800 0 WGT} + {2879110800 -7200 1 WGST} + {2897859600 -10800 0 WGT} + {2910560400 -7200 1 WGST} + {2929309200 -10800 0 WGT} + {2942010000 -7200 1 WGST} + {2960758800 -10800 0 WGT} + {2974064400 -7200 1 WGST} + {2992208400 -10800 0 WGT} + {3005514000 -7200 1 WGST} + {3023658000 -10800 0 WGT} + {3036963600 -7200 1 WGST} + {3055712400 -10800 0 WGT} + {3068413200 -7200 1 WGST} + {3087162000 -10800 0 WGT} + {3099862800 -7200 1 WGST} + {3118611600 -10800 0 WGT} + {3131917200 -7200 1 WGST} + {3150061200 -10800 0 WGT} + {3163366800 -7200 1 WGST} + {3181510800 -10800 0 WGT} + {3194816400 -7200 1 WGST} + {3212960400 -10800 0 WGT} + {3226266000 -7200 1 WGST} + {3245014800 -10800 0 WGT} + {3257715600 -7200 1 WGST} + {3276464400 -10800 0 WGT} + {3289165200 -7200 1 WGST} + {3307914000 -10800 0 WGT} + {3321219600 -7200 1 WGST} + {3339363600 -10800 0 WGT} + {3352669200 -7200 1 WGST} + {3370813200 -10800 0 WGT} + {3384118800 -7200 1 WGST} + {3402867600 -10800 0 WGT} + {3415568400 -7200 1 WGST} + {3434317200 -10800 0 WGT} + {3447018000 -7200 1 WGST} + {3465766800 -10800 0 WGT} + {3479072400 -7200 1 WGST} + {3497216400 -10800 0 WGT} + {3510522000 -7200 1 WGST} + {3528666000 -10800 0 WGT} + {3541971600 -7200 1 WGST} + {3560115600 -10800 0 WGT} + {3573421200 -7200 1 WGST} + {3592170000 -10800 0 WGT} + {3604870800 -7200 1 WGST} + {3623619600 -10800 0 WGT} + {3636320400 -7200 1 WGST} + {3655069200 -10800 0 WGT} + {3668374800 -7200 1 WGST} + {3686518800 -10800 0 WGT} + {3699824400 -7200 1 WGST} + {3717968400 -10800 0 WGT} + {3731274000 -7200 1 WGST} + {3750022800 -10800 0 WGT} + {3762723600 -7200 1 WGST} + {3781472400 -10800 0 WGT} + {3794173200 -7200 1 WGST} + {3812922000 -10800 0 WGT} + {3825622800 -7200 1 WGST} + {3844371600 -10800 0 WGT} + {3857677200 -7200 1 WGST} + {3875821200 -10800 0 WGT} + {3889126800 -7200 1 WGST} + {3907270800 -10800 0 WGT} + {3920576400 -7200 1 WGST} + {3939325200 -10800 0 WGT} + {3952026000 -7200 1 WGST} + {3970774800 -10800 0 WGT} + {3983475600 -7200 1 WGST} + {4002224400 -10800 0 WGT} + {4015530000 -7200 1 WGST} + {4033674000 -10800 0 WGT} + {4046979600 -7200 1 WGST} + {4065123600 -10800 0 WGT} + {4078429200 -7200 1 WGST} + {4096573200 -10800 0 WGT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Goose_Bay b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Goose_Bay new file mode 100644 index 00000000..7b7b3d84 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Goose_Bay @@ -0,0 +1,338 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Goose_Bay) { + {-9223372036854775808 -14500 0 LMT} + {-2713895900 -12652 0 NST} + {-1640982548 -12652 0 NST} + {-1632076148 -9052 1 NDT} + {-1615145348 -12652 0 NST} + {-1609446548 -12652 0 NST} + {-1096921748 -12600 0 NST} + {-1072989000 -12600 0 NST} + {-1061670600 -9000 1 NDT} + {-1048973400 -12600 0 NST} + {-1030221000 -9000 1 NDT} + {-1017523800 -12600 0 NST} + {-998771400 -9000 1 NDT} + {-986074200 -12600 0 NST} + {-966717000 -9000 1 NDT} + {-954624600 -12600 0 NST} + {-935267400 -9000 1 NDT} + {-922570200 -12600 0 NST} + {-903817800 -9000 1 NDT} + {-891120600 -12600 0 NST} + {-872368200 -9000 0 NWT} + {-769395600 -9000 1 NPT} + {-765401400 -12600 0 NST} + {-757369800 -12600 0 NST} + {-746044200 -9000 1 NDT} + {-733347000 -12600 0 NST} + {-714594600 -9000 1 NDT} + {-701897400 -12600 0 NST} + {-683145000 -9000 1 NDT} + {-670447800 -12600 0 NST} + {-651695400 -9000 1 NDT} + {-638998200 -12600 0 NST} + {-619641000 -9000 1 NDT} + {-606943800 -12600 0 NST} + {-589401000 -9000 1 NDT} + {-576099000 -12600 0 NST} + {-557951400 -9000 1 NDT} + {-544649400 -12600 0 NST} + {-526501800 -9000 1 NDT} + {-513199800 -12600 0 NST} + {-495052200 -9000 1 NDT} + {-481750200 -12600 0 NST} + {-463602600 -9000 1 NDT} + {-450300600 -12600 0 NST} + {-431548200 -9000 1 NDT} + {-418246200 -12600 0 NST} + {-400098600 -9000 1 NDT} + {-386796600 -12600 0 NST} + {-368649000 -9000 1 NDT} + {-355347000 -12600 0 NST} + {-337199400 -9000 1 NDT} + {-323897400 -12600 0 NST} + {-305749800 -9000 1 NDT} + {-289423800 -12600 0 NST} + {-273695400 -9000 1 NDT} + {-257974200 -12600 0 NST} + {-242245800 -9000 1 NDT} + {-226524600 -12600 0 NST} + {-210796200 -9000 1 NDT} + {-195075000 -12600 0 NST} + {-179346600 -9000 1 NDT} + {-163625400 -12600 0 NST} + {-147897000 -9000 1 NDT} + {-131571000 -12600 0 NST} + {-119903400 -14400 0 AST} + {-116445600 -10800 1 ADT} + {-100119600 -14400 0 AST} + {-84391200 -10800 1 ADT} + {-68670000 -14400 0 AST} + {-52941600 -10800 1 ADT} + {-37220400 -14400 0 AST} + {-21492000 -10800 1 ADT} + {-5770800 -14400 0 AST} + {9957600 -10800 1 ADT} + {25678800 -14400 0 AST} + {41407200 -10800 1 ADT} + {57733200 -14400 0 AST} + {73461600 -10800 1 ADT} + {89182800 -14400 0 AST} + {104911200 -10800 1 ADT} + {120632400 -14400 0 AST} + {136360800 -10800 1 ADT} + {152082000 -14400 0 AST} + {167810400 -10800 1 ADT} + {183531600 -14400 0 AST} + {199260000 -10800 1 ADT} + {215586000 -14400 0 AST} + {230709600 -10800 1 ADT} + {247035600 -14400 0 AST} + {262764000 -10800 1 ADT} + {278485200 -14400 0 AST} + {294213600 -10800 1 ADT} + {309934800 -14400 0 AST} + {325663200 -10800 1 ADT} + {341384400 -14400 0 AST} + {357112800 -10800 1 ADT} + {372834000 -14400 0 AST} + {388562400 -10800 1 ADT} + {404888400 -14400 0 AST} + {420012000 -10800 1 ADT} + {436338000 -14400 0 AST} + {452066400 -10800 1 ADT} + {467787600 -14400 0 AST} + {483516000 -10800 1 ADT} + {499237200 -14400 0 AST} + {514965600 -10800 1 ADT} + {530686800 -14400 0 AST} + {544593660 -10800 1 ADT} + {562129260 -14400 0 AST} + {576043260 -7200 1 ADDT} + {594180060 -14400 0 AST} + {607492860 -10800 1 ADT} + {625633260 -14400 0 AST} + {638942460 -10800 1 ADT} + {657082860 -14400 0 AST} + {670996860 -10800 1 ADT} + {688532460 -14400 0 AST} + {702446460 -10800 1 ADT} + {719982060 -14400 0 AST} + {733896060 -10800 1 ADT} + {752036460 -14400 0 AST} + {765345660 -10800 1 ADT} + {783486060 -14400 0 AST} + {796795260 -10800 1 ADT} + {814935660 -14400 0 AST} + {828849660 -10800 1 ADT} + {846385260 -14400 0 AST} + {860299260 -10800 1 ADT} + {877834860 -14400 0 AST} + {891748860 -10800 1 ADT} + {909284460 -14400 0 AST} + {923198460 -10800 1 ADT} + {941338860 -14400 0 AST} + {954648060 -10800 1 ADT} + {972788460 -14400 0 AST} + {986097660 -10800 1 ADT} + {1004238060 -14400 0 AST} + {1018152060 -10800 1 ADT} + {1035687660 -14400 0 AST} + {1049601660 -10800 1 ADT} + {1067137260 -14400 0 AST} + {1081051260 -10800 1 ADT} + {1099191660 -14400 0 AST} + {1112500860 -10800 1 ADT} + {1130641260 -14400 0 AST} + {1143950460 -10800 1 ADT} + {1162090860 -14400 0 AST} + {1173585660 -10800 1 ADT} + {1194145260 -14400 0 AST} + {1205035260 -10800 1 ADT} + {1225594860 -14400 0 AST} + {1236484860 -10800 1 ADT} + {1257044460 -14400 0 AST} + {1268539260 -10800 1 ADT} + {1289098860 -14400 0 AST} + {1299988860 -10800 1 ADT} + {1320116400 -10800 0 ADT} + {1320555600 -14400 0 AST} + {1331445600 -10800 1 ADT} + {1352005200 -14400 0 AST} + {1362895200 -10800 1 ADT} + {1383454800 -14400 0 AST} + {1394344800 -10800 1 ADT} + {1414904400 -14400 0 AST} + {1425794400 -10800 1 ADT} + {1446354000 -14400 0 AST} + {1457848800 -10800 1 ADT} + {1478408400 -14400 0 AST} + {1489298400 -10800 1 ADT} + {1509858000 -14400 0 AST} + {1520748000 -10800 1 ADT} + {1541307600 -14400 0 AST} + {1552197600 -10800 1 ADT} + {1572757200 -14400 0 AST} + {1583647200 -10800 1 ADT} + {1604206800 -14400 0 AST} + {1615701600 -10800 1 ADT} + {1636261200 -14400 0 AST} + {1647151200 -10800 1 ADT} + {1667710800 -14400 0 AST} + {1678600800 -10800 1 ADT} + {1699160400 -14400 0 AST} + {1710050400 -10800 1 ADT} + {1730610000 -14400 0 AST} + {1741500000 -10800 1 ADT} + {1762059600 -14400 0 AST} + {1772949600 -10800 1 ADT} + {1793509200 -14400 0 AST} + {1805004000 -10800 1 ADT} + {1825563600 -14400 0 AST} + {1836453600 -10800 1 ADT} + {1857013200 -14400 0 AST} + {1867903200 -10800 1 ADT} + {1888462800 -14400 0 AST} + {1899352800 -10800 1 ADT} + {1919912400 -14400 0 AST} + {1930802400 -10800 1 ADT} + {1951362000 -14400 0 AST} + {1962856800 -10800 1 ADT} + {1983416400 -14400 0 AST} + {1994306400 -10800 1 ADT} + {2014866000 -14400 0 AST} + {2025756000 -10800 1 ADT} + {2046315600 -14400 0 AST} + {2057205600 -10800 1 ADT} + {2077765200 -14400 0 AST} + {2088655200 -10800 1 ADT} + {2109214800 -14400 0 AST} + {2120104800 -10800 1 ADT} + {2140664400 -14400 0 AST} + {2152159200 -10800 1 ADT} + {2172718800 -14400 0 AST} + {2183608800 -10800 1 ADT} + {2204168400 -14400 0 AST} + {2215058400 -10800 1 ADT} + {2235618000 -14400 0 AST} + {2246508000 -10800 1 ADT} + {2267067600 -14400 0 AST} + {2277957600 -10800 1 ADT} + {2298517200 -14400 0 AST} + {2309407200 -10800 1 ADT} + {2329966800 -14400 0 AST} + {2341461600 -10800 1 ADT} + {2362021200 -14400 0 AST} + {2372911200 -10800 1 ADT} + {2393470800 -14400 0 AST} + {2404360800 -10800 1 ADT} + {2424920400 -14400 0 AST} + {2435810400 -10800 1 ADT} + {2456370000 -14400 0 AST} + {2467260000 -10800 1 ADT} + {2487819600 -14400 0 AST} + {2499314400 -10800 1 ADT} + {2519874000 -14400 0 AST} + {2530764000 -10800 1 ADT} + {2551323600 -14400 0 AST} + {2562213600 -10800 1 ADT} + {2582773200 -14400 0 AST} + {2593663200 -10800 1 ADT} + {2614222800 -14400 0 AST} + {2625112800 -10800 1 ADT} + {2645672400 -14400 0 AST} + {2656562400 -10800 1 ADT} + {2677122000 -14400 0 AST} + {2688616800 -10800 1 ADT} + {2709176400 -14400 0 AST} + {2720066400 -10800 1 ADT} + {2740626000 -14400 0 AST} + {2751516000 -10800 1 ADT} + {2772075600 -14400 0 AST} + {2782965600 -10800 1 ADT} + {2803525200 -14400 0 AST} + {2814415200 -10800 1 ADT} + {2834974800 -14400 0 AST} + {2846469600 -10800 1 ADT} + {2867029200 -14400 0 AST} + {2877919200 -10800 1 ADT} + {2898478800 -14400 0 AST} + {2909368800 -10800 1 ADT} + {2929928400 -14400 0 AST} + {2940818400 -10800 1 ADT} + {2961378000 -14400 0 AST} + {2972268000 -10800 1 ADT} + {2992827600 -14400 0 AST} + {3003717600 -10800 1 ADT} + {3024277200 -14400 0 AST} + {3035772000 -10800 1 ADT} + {3056331600 -14400 0 AST} + {3067221600 -10800 1 ADT} + {3087781200 -14400 0 AST} + {3098671200 -10800 1 ADT} + {3119230800 -14400 0 AST} + {3130120800 -10800 1 ADT} + {3150680400 -14400 0 AST} + {3161570400 -10800 1 ADT} + {3182130000 -14400 0 AST} + {3193020000 -10800 1 ADT} + {3213579600 -14400 0 AST} + {3225074400 -10800 1 ADT} + {3245634000 -14400 0 AST} + {3256524000 -10800 1 ADT} + {3277083600 -14400 0 AST} + {3287973600 -10800 1 ADT} + {3308533200 -14400 0 AST} + {3319423200 -10800 1 ADT} + {3339982800 -14400 0 AST} + {3350872800 -10800 1 ADT} + {3371432400 -14400 0 AST} + {3382927200 -10800 1 ADT} + {3403486800 -14400 0 AST} + {3414376800 -10800 1 ADT} + {3434936400 -14400 0 AST} + {3445826400 -10800 1 ADT} + {3466386000 -14400 0 AST} + {3477276000 -10800 1 ADT} + {3497835600 -14400 0 AST} + {3508725600 -10800 1 ADT} + {3529285200 -14400 0 AST} + {3540175200 -10800 1 ADT} + {3560734800 -14400 0 AST} + {3572229600 -10800 1 ADT} + {3592789200 -14400 0 AST} + {3603679200 -10800 1 ADT} + {3624238800 -14400 0 AST} + {3635128800 -10800 1 ADT} + {3655688400 -14400 0 AST} + {3666578400 -10800 1 ADT} + {3687138000 -14400 0 AST} + {3698028000 -10800 1 ADT} + {3718587600 -14400 0 AST} + {3730082400 -10800 1 ADT} + {3750642000 -14400 0 AST} + {3761532000 -10800 1 ADT} + {3782091600 -14400 0 AST} + {3792981600 -10800 1 ADT} + {3813541200 -14400 0 AST} + {3824431200 -10800 1 ADT} + {3844990800 -14400 0 AST} + {3855880800 -10800 1 ADT} + {3876440400 -14400 0 AST} + {3887330400 -10800 1 ADT} + {3907890000 -14400 0 AST} + {3919384800 -10800 1 ADT} + {3939944400 -14400 0 AST} + {3950834400 -10800 1 ADT} + {3971394000 -14400 0 AST} + {3982284000 -10800 1 ADT} + {4002843600 -14400 0 AST} + {4013733600 -10800 1 ADT} + {4034293200 -14400 0 AST} + {4045183200 -10800 1 ADT} + {4065742800 -14400 0 AST} + {4076632800 -10800 1 ADT} + {4097192400 -14400 0 AST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Grand_Turk b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Grand_Turk new file mode 100644 index 00000000..0edcf0b8 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Grand_Turk @@ -0,0 +1,82 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Grand_Turk) { + {-9223372036854775808 -17072 0 LMT} + {-2524504528 -18431 0 KMT} + {-1827687169 -18000 0 EST} + {284014800 -18000 0 EST} + {294217200 -14400 1 EDT} + {309938400 -18000 0 EST} + {325666800 -14400 1 EDT} + {341388000 -18000 0 EST} + {357116400 -14400 1 EDT} + {372837600 -18000 0 EST} + {388566000 -14400 1 EDT} + {404892000 -18000 0 EST} + {420015600 -14400 1 EDT} + {436341600 -18000 0 EST} + {452070000 -14400 1 EDT} + {467791200 -18000 0 EST} + {483519600 -14400 1 EDT} + {499240800 -18000 0 EST} + {514969200 -14400 1 EDT} + {530690400 -18000 0 EST} + {544604400 -14400 1 EDT} + {562140000 -18000 0 EST} + {576054000 -14400 1 EDT} + {594194400 -18000 0 EST} + {607503600 -14400 1 EDT} + {625644000 -18000 0 EST} + {638953200 -14400 1 EDT} + {657093600 -18000 0 EST} + {671007600 -14400 1 EDT} + {688543200 -18000 0 EST} + {702457200 -14400 1 EDT} + {719992800 -18000 0 EST} + {733906800 -14400 1 EDT} + {752047200 -18000 0 EST} + {765356400 -14400 1 EDT} + {783496800 -18000 0 EST} + {796806000 -14400 1 EDT} + {814946400 -18000 0 EST} + {828860400 -14400 1 EDT} + {846396000 -18000 0 EST} + {860310000 -14400 1 EDT} + {877845600 -18000 0 EST} + {891759600 -14400 1 EDT} + {909295200 -18000 0 EST} + {923209200 -14400 1 EDT} + {941349600 -18000 0 EST} + {954658800 -14400 1 EDT} + {972799200 -18000 0 EST} + {986108400 -14400 1 EDT} + {1004248800 -18000 0 EST} + {1018162800 -14400 1 EDT} + {1035698400 -18000 0 EST} + {1049612400 -14400 1 EDT} + {1067148000 -18000 0 EST} + {1081062000 -14400 1 EDT} + {1099202400 -18000 0 EST} + {1112511600 -14400 1 EDT} + {1130652000 -18000 0 EST} + {1143961200 -14400 1 EDT} + {1162101600 -18000 0 EST} + {1173596400 -14400 1 EDT} + {1194156000 -18000 0 EST} + {1205046000 -14400 1 EDT} + {1225605600 -18000 0 EST} + {1236495600 -14400 1 EDT} + {1257055200 -18000 0 EST} + {1268550000 -14400 1 EDT} + {1289109600 -18000 0 EST} + {1299999600 -14400 1 EDT} + {1320559200 -18000 0 EST} + {1331449200 -14400 1 EDT} + {1352008800 -18000 0 EST} + {1362898800 -14400 1 EDT} + {1383458400 -18000 0 EST} + {1394348400 -14400 1 EDT} + {1414908000 -18000 0 EST} + {1425798000 -14400 1 EDT} + {1446361200 -14400 0 AST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Grenada b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Grenada new file mode 100644 index 00000000..92300c39 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Grenada @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Port_of_Spain)]} { + LoadTimeZoneFile America/Port_of_Spain +} +set TZData(:America/Grenada) $TZData(:America/Port_of_Spain) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Guadeloupe b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Guadeloupe new file mode 100644 index 00000000..aba6bd71 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Guadeloupe @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Port_of_Spain)]} { + LoadTimeZoneFile America/Port_of_Spain +} +set TZData(:America/Guadeloupe) $TZData(:America/Port_of_Spain) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Guatemala b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Guatemala new file mode 100644 index 00000000..e4db5ac3 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Guatemala @@ -0,0 +1,14 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Guatemala) { + {-9223372036854775808 -21724 0 LMT} + {-1617040676 -21600 0 CST} + {123055200 -18000 1 CDT} + {130914000 -21600 0 CST} + {422344800 -18000 1 CDT} + {433054800 -21600 0 CST} + {669708000 -18000 1 CDT} + {684219600 -21600 0 CST} + {1146376800 -18000 1 CDT} + {1159678800 -21600 0 CST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Guayaquil b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Guayaquil new file mode 100644 index 00000000..e940a5bf --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Guayaquil @@ -0,0 +1,7 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Guayaquil) { + {-9223372036854775808 -19160 0 LMT} + {-2524502440 -18840 0 QMT} + {-1230749160 -18000 0 ECT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Guyana b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Guyana new file mode 100644 index 00000000..c58a9891 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Guyana @@ -0,0 +1,9 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Guyana) { + {-9223372036854775808 -13960 0 LMT} + {-1730578040 -13500 0 GBGT} + {-113688900 -13500 0 GYT} + {176010300 -10800 0 GYT} + {662698800 -14400 0 GYT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Halifax b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Halifax new file mode 100644 index 00000000..08e37543 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Halifax @@ -0,0 +1,361 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Halifax) { + {-9223372036854775808 -15264 0 LMT} + {-2131645536 -14400 0 AST} + {-1696276800 -10800 1 ADT} + {-1680469200 -14400 0 AST} + {-1640980800 -14400 0 AST} + {-1632074400 -10800 1 ADT} + {-1615143600 -14400 0 AST} + {-1609444800 -14400 0 AST} + {-1566763200 -10800 1 ADT} + {-1557090000 -14400 0 AST} + {-1535486400 -10800 1 ADT} + {-1524949200 -14400 0 AST} + {-1504468800 -10800 1 ADT} + {-1493413200 -14400 0 AST} + {-1472414400 -10800 1 ADT} + {-1461963600 -14400 0 AST} + {-1440964800 -10800 1 ADT} + {-1429390800 -14400 0 AST} + {-1409515200 -10800 1 ADT} + {-1396731600 -14400 0 AST} + {-1376856000 -10800 1 ADT} + {-1366491600 -14400 0 AST} + {-1346616000 -10800 1 ADT} + {-1333832400 -14400 0 AST} + {-1313956800 -10800 1 ADT} + {-1303678800 -14400 0 AST} + {-1282507200 -10800 1 ADT} + {-1272661200 -14400 0 AST} + {-1251057600 -10800 1 ADT} + {-1240088400 -14400 0 AST} + {-1219608000 -10800 1 ADT} + {-1207429200 -14400 0 AST} + {-1188763200 -10800 1 ADT} + {-1175979600 -14400 0 AST} + {-1157313600 -10800 1 ADT} + {-1143925200 -14400 0 AST} + {-1124049600 -10800 1 ADT} + {-1113771600 -14400 0 AST} + {-1091390400 -10800 1 ADT} + {-1081026000 -14400 0 AST} + {-1059854400 -10800 1 ADT} + {-1050786000 -14400 0 AST} + {-1030910400 -10800 1 ADT} + {-1018126800 -14400 0 AST} + {-999460800 -10800 1 ADT} + {-986677200 -14400 0 AST} + {-965592000 -10800 1 ADT} + {-955227600 -14400 0 AST} + {-935956800 -10800 1 ADT} + {-923173200 -14400 0 AST} + {-904507200 -10800 1 ADT} + {-891723600 -14400 0 AST} + {-880221600 -10800 0 AWT} + {-769395600 -10800 1 APT} + {-765399600 -14400 0 AST} + {-757368000 -14400 0 AST} + {-747252000 -10800 1 ADT} + {-733950000 -14400 0 AST} + {-715802400 -10800 1 ADT} + {-702500400 -14400 0 AST} + {-684352800 -10800 1 ADT} + {-671050800 -14400 0 AST} + {-652903200 -10800 1 ADT} + {-639601200 -14400 0 AST} + {-589399200 -10800 1 ADT} + {-576097200 -14400 0 AST} + {-557949600 -10800 1 ADT} + {-544647600 -14400 0 AST} + {-526500000 -10800 1 ADT} + {-513198000 -14400 0 AST} + {-495050400 -10800 1 ADT} + {-481748400 -14400 0 AST} + {-431546400 -10800 1 ADT} + {-418244400 -14400 0 AST} + {-400096800 -10800 1 ADT} + {-386794800 -14400 0 AST} + {-368647200 -10800 1 ADT} + {-355345200 -14400 0 AST} + {-337197600 -10800 1 ADT} + {-323895600 -14400 0 AST} + {-242244000 -10800 1 ADT} + {-226522800 -14400 0 AST} + {-210794400 -10800 1 ADT} + {-195073200 -14400 0 AST} + {-179344800 -10800 1 ADT} + {-163623600 -14400 0 AST} + {-147895200 -10800 1 ADT} + {-131569200 -14400 0 AST} + {-116445600 -10800 1 ADT} + {-100119600 -14400 0 AST} + {-84391200 -10800 1 ADT} + {-68670000 -14400 0 AST} + {-52941600 -10800 1 ADT} + {-37220400 -14400 0 AST} + {-21492000 -10800 1 ADT} + {-5770800 -14400 0 AST} + {9957600 -10800 1 ADT} + {25678800 -14400 0 AST} + {41407200 -10800 1 ADT} + {57733200 -14400 0 AST} + {73461600 -10800 1 ADT} + {89182800 -14400 0 AST} + {104911200 -10800 1 ADT} + {120632400 -14400 0 AST} + {126244800 -14400 0 AST} + {136360800 -10800 1 ADT} + {152082000 -14400 0 AST} + {167810400 -10800 1 ADT} + {183531600 -14400 0 AST} + {199260000 -10800 1 ADT} + {215586000 -14400 0 AST} + {230709600 -10800 1 ADT} + {247035600 -14400 0 AST} + {262764000 -10800 1 ADT} + {278485200 -14400 0 AST} + {294213600 -10800 1 ADT} + {309934800 -14400 0 AST} + {325663200 -10800 1 ADT} + {341384400 -14400 0 AST} + {357112800 -10800 1 ADT} + {372834000 -14400 0 AST} + {388562400 -10800 1 ADT} + {404888400 -14400 0 AST} + {420012000 -10800 1 ADT} + {436338000 -14400 0 AST} + {452066400 -10800 1 ADT} + {467787600 -14400 0 AST} + {483516000 -10800 1 ADT} + {499237200 -14400 0 AST} + {514965600 -10800 1 ADT} + {530686800 -14400 0 AST} + {544600800 -10800 1 ADT} + {562136400 -14400 0 AST} + {576050400 -10800 1 ADT} + {594190800 -14400 0 AST} + {607500000 -10800 1 ADT} + {625640400 -14400 0 AST} + {638949600 -10800 1 ADT} + {657090000 -14400 0 AST} + {671004000 -10800 1 ADT} + {688539600 -14400 0 AST} + {702453600 -10800 1 ADT} + {719989200 -14400 0 AST} + {733903200 -10800 1 ADT} + {752043600 -14400 0 AST} + {765352800 -10800 1 ADT} + {783493200 -14400 0 AST} + {796802400 -10800 1 ADT} + {814942800 -14400 0 AST} + {828856800 -10800 1 ADT} + {846392400 -14400 0 AST} + {860306400 -10800 1 ADT} + {877842000 -14400 0 AST} + {891756000 -10800 1 ADT} + {909291600 -14400 0 AST} + {923205600 -10800 1 ADT} + {941346000 -14400 0 AST} + {954655200 -10800 1 ADT} + {972795600 -14400 0 AST} + {986104800 -10800 1 ADT} + {1004245200 -14400 0 AST} + {1018159200 -10800 1 ADT} + {1035694800 -14400 0 AST} + {1049608800 -10800 1 ADT} + {1067144400 -14400 0 AST} + {1081058400 -10800 1 ADT} + {1099198800 -14400 0 AST} + {1112508000 -10800 1 ADT} + {1130648400 -14400 0 AST} + {1143957600 -10800 1 ADT} + {1162098000 -14400 0 AST} + {1173592800 -10800 1 ADT} + {1194152400 -14400 0 AST} + {1205042400 -10800 1 ADT} + {1225602000 -14400 0 AST} + {1236492000 -10800 1 ADT} + {1257051600 -14400 0 AST} + {1268546400 -10800 1 ADT} + {1289106000 -14400 0 AST} + {1299996000 -10800 1 ADT} + {1320555600 -14400 0 AST} + {1331445600 -10800 1 ADT} + {1352005200 -14400 0 AST} + {1362895200 -10800 1 ADT} + {1383454800 -14400 0 AST} + {1394344800 -10800 1 ADT} + {1414904400 -14400 0 AST} + {1425794400 -10800 1 ADT} + {1446354000 -14400 0 AST} + {1457848800 -10800 1 ADT} + {1478408400 -14400 0 AST} + {1489298400 -10800 1 ADT} + {1509858000 -14400 0 AST} + {1520748000 -10800 1 ADT} + {1541307600 -14400 0 AST} + {1552197600 -10800 1 ADT} + {1572757200 -14400 0 AST} + {1583647200 -10800 1 ADT} + {1604206800 -14400 0 AST} + {1615701600 -10800 1 ADT} + {1636261200 -14400 0 AST} + {1647151200 -10800 1 ADT} + {1667710800 -14400 0 AST} + {1678600800 -10800 1 ADT} + {1699160400 -14400 0 AST} + {1710050400 -10800 1 ADT} + {1730610000 -14400 0 AST} + {1741500000 -10800 1 ADT} + {1762059600 -14400 0 AST} + {1772949600 -10800 1 ADT} + {1793509200 -14400 0 AST} + {1805004000 -10800 1 ADT} + {1825563600 -14400 0 AST} + {1836453600 -10800 1 ADT} + {1857013200 -14400 0 AST} + {1867903200 -10800 1 ADT} + {1888462800 -14400 0 AST} + {1899352800 -10800 1 ADT} + {1919912400 -14400 0 AST} + {1930802400 -10800 1 ADT} + {1951362000 -14400 0 AST} + {1962856800 -10800 1 ADT} + {1983416400 -14400 0 AST} + {1994306400 -10800 1 ADT} + {2014866000 -14400 0 AST} + {2025756000 -10800 1 ADT} + {2046315600 -14400 0 AST} + {2057205600 -10800 1 ADT} + {2077765200 -14400 0 AST} + {2088655200 -10800 1 ADT} + {2109214800 -14400 0 AST} + {2120104800 -10800 1 ADT} + {2140664400 -14400 0 AST} + {2152159200 -10800 1 ADT} + {2172718800 -14400 0 AST} + {2183608800 -10800 1 ADT} + {2204168400 -14400 0 AST} + {2215058400 -10800 1 ADT} + {2235618000 -14400 0 AST} + {2246508000 -10800 1 ADT} + {2267067600 -14400 0 AST} + {2277957600 -10800 1 ADT} + {2298517200 -14400 0 AST} + {2309407200 -10800 1 ADT} + {2329966800 -14400 0 AST} + {2341461600 -10800 1 ADT} + {2362021200 -14400 0 AST} + {2372911200 -10800 1 ADT} + {2393470800 -14400 0 AST} + {2404360800 -10800 1 ADT} + {2424920400 -14400 0 AST} + {2435810400 -10800 1 ADT} + {2456370000 -14400 0 AST} + {2467260000 -10800 1 ADT} + {2487819600 -14400 0 AST} + {2499314400 -10800 1 ADT} + {2519874000 -14400 0 AST} + {2530764000 -10800 1 ADT} + {2551323600 -14400 0 AST} + {2562213600 -10800 1 ADT} + {2582773200 -14400 0 AST} + {2593663200 -10800 1 ADT} + {2614222800 -14400 0 AST} + {2625112800 -10800 1 ADT} + {2645672400 -14400 0 AST} + {2656562400 -10800 1 ADT} + {2677122000 -14400 0 AST} + {2688616800 -10800 1 ADT} + {2709176400 -14400 0 AST} + {2720066400 -10800 1 ADT} + {2740626000 -14400 0 AST} + {2751516000 -10800 1 ADT} + {2772075600 -14400 0 AST} + {2782965600 -10800 1 ADT} + {2803525200 -14400 0 AST} + {2814415200 -10800 1 ADT} + {2834974800 -14400 0 AST} + {2846469600 -10800 1 ADT} + {2867029200 -14400 0 AST} + {2877919200 -10800 1 ADT} + {2898478800 -14400 0 AST} + {2909368800 -10800 1 ADT} + {2929928400 -14400 0 AST} + {2940818400 -10800 1 ADT} + {2961378000 -14400 0 AST} + {2972268000 -10800 1 ADT} + {2992827600 -14400 0 AST} + {3003717600 -10800 1 ADT} + {3024277200 -14400 0 AST} + {3035772000 -10800 1 ADT} + {3056331600 -14400 0 AST} + {3067221600 -10800 1 ADT} + {3087781200 -14400 0 AST} + {3098671200 -10800 1 ADT} + {3119230800 -14400 0 AST} + {3130120800 -10800 1 ADT} + {3150680400 -14400 0 AST} + {3161570400 -10800 1 ADT} + {3182130000 -14400 0 AST} + {3193020000 -10800 1 ADT} + {3213579600 -14400 0 AST} + {3225074400 -10800 1 ADT} + {3245634000 -14400 0 AST} + {3256524000 -10800 1 ADT} + {3277083600 -14400 0 AST} + {3287973600 -10800 1 ADT} + {3308533200 -14400 0 AST} + {3319423200 -10800 1 ADT} + {3339982800 -14400 0 AST} + {3350872800 -10800 1 ADT} + {3371432400 -14400 0 AST} + {3382927200 -10800 1 ADT} + {3403486800 -14400 0 AST} + {3414376800 -10800 1 ADT} + {3434936400 -14400 0 AST} + {3445826400 -10800 1 ADT} + {3466386000 -14400 0 AST} + {3477276000 -10800 1 ADT} + {3497835600 -14400 0 AST} + {3508725600 -10800 1 ADT} + {3529285200 -14400 0 AST} + {3540175200 -10800 1 ADT} + {3560734800 -14400 0 AST} + {3572229600 -10800 1 ADT} + {3592789200 -14400 0 AST} + {3603679200 -10800 1 ADT} + {3624238800 -14400 0 AST} + {3635128800 -10800 1 ADT} + {3655688400 -14400 0 AST} + {3666578400 -10800 1 ADT} + {3687138000 -14400 0 AST} + {3698028000 -10800 1 ADT} + {3718587600 -14400 0 AST} + {3730082400 -10800 1 ADT} + {3750642000 -14400 0 AST} + {3761532000 -10800 1 ADT} + {3782091600 -14400 0 AST} + {3792981600 -10800 1 ADT} + {3813541200 -14400 0 AST} + {3824431200 -10800 1 ADT} + {3844990800 -14400 0 AST} + {3855880800 -10800 1 ADT} + {3876440400 -14400 0 AST} + {3887330400 -10800 1 ADT} + {3907890000 -14400 0 AST} + {3919384800 -10800 1 ADT} + {3939944400 -14400 0 AST} + {3950834400 -10800 1 ADT} + {3971394000 -14400 0 AST} + {3982284000 -10800 1 ADT} + {4002843600 -14400 0 AST} + {4013733600 -10800 1 ADT} + {4034293200 -14400 0 AST} + {4045183200 -10800 1 ADT} + {4065742800 -14400 0 AST} + {4076632800 -10800 1 ADT} + {4097192400 -14400 0 AST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Havana b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Havana new file mode 100644 index 00000000..5901daec --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Havana @@ -0,0 +1,285 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Havana) { + {-9223372036854775808 -19768 0 LMT} + {-2524501832 -19776 0 HMT} + {-1402813824 -18000 0 CST} + {-1311534000 -14400 1 CDT} + {-1300996800 -18000 0 CST} + {-933534000 -14400 1 CDT} + {-925675200 -18000 0 CST} + {-902084400 -14400 1 CDT} + {-893620800 -18000 0 CST} + {-870030000 -14400 1 CDT} + {-862171200 -18000 0 CST} + {-775681200 -14400 1 CDT} + {-767822400 -18000 0 CST} + {-744231600 -14400 1 CDT} + {-736372800 -18000 0 CST} + {-144702000 -14400 1 CDT} + {-134251200 -18000 0 CST} + {-113425200 -14400 1 CDT} + {-102542400 -18000 0 CST} + {-86295600 -14400 1 CDT} + {-72907200 -18000 0 CST} + {-54154800 -14400 1 CDT} + {-41457600 -18000 0 CST} + {-21495600 -14400 1 CDT} + {-5774400 -18000 0 CST} + {9954000 -14400 1 CDT} + {25675200 -18000 0 CST} + {41403600 -14400 1 CDT} + {57729600 -18000 0 CST} + {73458000 -14400 1 CDT} + {87364800 -18000 0 CST} + {104907600 -14400 1 CDT} + {118900800 -18000 0 CST} + {136357200 -14400 1 CDT} + {150436800 -18000 0 CST} + {167806800 -14400 1 CDT} + {183528000 -18000 0 CST} + {199256400 -14400 1 CDT} + {215582400 -18000 0 CST} + {230706000 -14400 1 CDT} + {247032000 -18000 0 CST} + {263365200 -14400 1 CDT} + {276667200 -18000 0 CST} + {290581200 -14400 1 CDT} + {308721600 -18000 0 CST} + {322030800 -14400 1 CDT} + {340171200 -18000 0 CST} + {358318800 -14400 1 CDT} + {371620800 -18000 0 CST} + {389768400 -14400 1 CDT} + {403070400 -18000 0 CST} + {421218000 -14400 1 CDT} + {434520000 -18000 0 CST} + {452667600 -14400 1 CDT} + {466574400 -18000 0 CST} + {484117200 -14400 1 CDT} + {498024000 -18000 0 CST} + {511333200 -14400 1 CDT} + {529473600 -18000 0 CST} + {542782800 -14400 1 CDT} + {560923200 -18000 0 CST} + {574837200 -14400 1 CDT} + {592372800 -18000 0 CST} + {606286800 -14400 1 CDT} + {623822400 -18000 0 CST} + {638946000 -14400 1 CDT} + {655876800 -18000 0 CST} + {671000400 -14400 1 CDT} + {687330000 -18000 0 CST} + {702450000 -14400 1 CDT} + {718779600 -18000 0 CST} + {733899600 -14400 1 CDT} + {750229200 -18000 0 CST} + {765349200 -14400 1 CDT} + {781678800 -18000 0 CST} + {796798800 -14400 1 CDT} + {813128400 -18000 0 CST} + {828853200 -14400 1 CDT} + {844578000 -18000 0 CST} + {860302800 -14400 1 CDT} + {876632400 -18000 0 CST} + {891147600 -14400 1 CDT} + {909291600 -18000 0 CST} + {922597200 -14400 1 CDT} + {941346000 -18000 0 CST} + {954651600 -14400 1 CDT} + {972795600 -18000 0 CST} + {986101200 -14400 1 CDT} + {1004245200 -18000 0 CST} + {1018155600 -14400 1 CDT} + {1035694800 -18000 0 CST} + {1049605200 -14400 1 CDT} + {1067144400 -18000 0 CST} + {1080450000 -14400 1 CDT} + {1162098000 -18000 0 CST} + {1173589200 -14400 1 CDT} + {1193547600 -18000 0 CST} + {1205643600 -14400 1 CDT} + {1224997200 -18000 0 CST} + {1236488400 -14400 1 CDT} + {1256446800 -18000 0 CST} + {1268542800 -14400 1 CDT} + {1288501200 -18000 0 CST} + {1300597200 -14400 1 CDT} + {1321160400 -18000 0 CST} + {1333256400 -14400 1 CDT} + {1352005200 -18000 0 CST} + {1362891600 -14400 1 CDT} + {1383454800 -18000 0 CST} + {1394341200 -14400 1 CDT} + {1414904400 -18000 0 CST} + {1425790800 -14400 1 CDT} + {1446354000 -18000 0 CST} + {1457845200 -14400 1 CDT} + {1478408400 -18000 0 CST} + {1489294800 -14400 1 CDT} + {1509858000 -18000 0 CST} + {1520744400 -14400 1 CDT} + {1541307600 -18000 0 CST} + {1552194000 -14400 1 CDT} + {1572757200 -18000 0 CST} + {1583643600 -14400 1 CDT} + {1604206800 -18000 0 CST} + {1615698000 -14400 1 CDT} + {1636261200 -18000 0 CST} + {1647147600 -14400 1 CDT} + {1667710800 -18000 0 CST} + {1678597200 -14400 1 CDT} + {1699160400 -18000 0 CST} + {1710046800 -14400 1 CDT} + {1730610000 -18000 0 CST} + {1741496400 -14400 1 CDT} + {1762059600 -18000 0 CST} + {1772946000 -14400 1 CDT} + {1793509200 -18000 0 CST} + {1805000400 -14400 1 CDT} + {1825563600 -18000 0 CST} + {1836450000 -14400 1 CDT} + {1857013200 -18000 0 CST} + {1867899600 -14400 1 CDT} + {1888462800 -18000 0 CST} + {1899349200 -14400 1 CDT} + {1919912400 -18000 0 CST} + {1930798800 -14400 1 CDT} + {1951362000 -18000 0 CST} + {1962853200 -14400 1 CDT} + {1983416400 -18000 0 CST} + {1994302800 -14400 1 CDT} + {2014866000 -18000 0 CST} + {2025752400 -14400 1 CDT} + {2046315600 -18000 0 CST} + {2057202000 -14400 1 CDT} + {2077765200 -18000 0 CST} + {2088651600 -14400 1 CDT} + {2109214800 -18000 0 CST} + {2120101200 -14400 1 CDT} + {2140664400 -18000 0 CST} + {2152155600 -14400 1 CDT} + {2172718800 -18000 0 CST} + {2183605200 -14400 1 CDT} + {2204168400 -18000 0 CST} + {2215054800 -14400 1 CDT} + {2235618000 -18000 0 CST} + {2246504400 -14400 1 CDT} + {2267067600 -18000 0 CST} + {2277954000 -14400 1 CDT} + {2298517200 -18000 0 CST} + {2309403600 -14400 1 CDT} + {2329966800 -18000 0 CST} + {2341458000 -14400 1 CDT} + {2362021200 -18000 0 CST} + {2372907600 -14400 1 CDT} + {2393470800 -18000 0 CST} + {2404357200 -14400 1 CDT} + {2424920400 -18000 0 CST} + {2435806800 -14400 1 CDT} + {2456370000 -18000 0 CST} + {2467256400 -14400 1 CDT} + {2487819600 -18000 0 CST} + {2499310800 -14400 1 CDT} + {2519874000 -18000 0 CST} + {2530760400 -14400 1 CDT} + {2551323600 -18000 0 CST} + {2562210000 -14400 1 CDT} + {2582773200 -18000 0 CST} + {2593659600 -14400 1 CDT} + {2614222800 -18000 0 CST} + {2625109200 -14400 1 CDT} + {2645672400 -18000 0 CST} + {2656558800 -14400 1 CDT} + {2677122000 -18000 0 CST} + {2688613200 -14400 1 CDT} + {2709176400 -18000 0 CST} + {2720062800 -14400 1 CDT} + {2740626000 -18000 0 CST} + {2751512400 -14400 1 CDT} + {2772075600 -18000 0 CST} + {2782962000 -14400 1 CDT} + {2803525200 -18000 0 CST} + {2814411600 -14400 1 CDT} + {2834974800 -18000 0 CST} + {2846466000 -14400 1 CDT} + {2867029200 -18000 0 CST} + {2877915600 -14400 1 CDT} + {2898478800 -18000 0 CST} + {2909365200 -14400 1 CDT} + {2929928400 -18000 0 CST} + {2940814800 -14400 1 CDT} + {2961378000 -18000 0 CST} + {2972264400 -14400 1 CDT} + {2992827600 -18000 0 CST} + {3003714000 -14400 1 CDT} + {3024277200 -18000 0 CST} + {3035768400 -14400 1 CDT} + {3056331600 -18000 0 CST} + {3067218000 -14400 1 CDT} + {3087781200 -18000 0 CST} + {3098667600 -14400 1 CDT} + {3119230800 -18000 0 CST} + {3130117200 -14400 1 CDT} + {3150680400 -18000 0 CST} + {3161566800 -14400 1 CDT} + {3182130000 -18000 0 CST} + {3193016400 -14400 1 CDT} + {3213579600 -18000 0 CST} + {3225070800 -14400 1 CDT} + {3245634000 -18000 0 CST} + {3256520400 -14400 1 CDT} + {3277083600 -18000 0 CST} + {3287970000 -14400 1 CDT} + {3308533200 -18000 0 CST} + {3319419600 -14400 1 CDT} + {3339982800 -18000 0 CST} + {3350869200 -14400 1 CDT} + {3371432400 -18000 0 CST} + {3382923600 -14400 1 CDT} + {3403486800 -18000 0 CST} + {3414373200 -14400 1 CDT} + {3434936400 -18000 0 CST} + {3445822800 -14400 1 CDT} + {3466386000 -18000 0 CST} + {3477272400 -14400 1 CDT} + {3497835600 -18000 0 CST} + {3508722000 -14400 1 CDT} + {3529285200 -18000 0 CST} + {3540171600 -14400 1 CDT} + {3560734800 -18000 0 CST} + {3572226000 -14400 1 CDT} + {3592789200 -18000 0 CST} + {3603675600 -14400 1 CDT} + {3624238800 -18000 0 CST} + {3635125200 -14400 1 CDT} + {3655688400 -18000 0 CST} + {3666574800 -14400 1 CDT} + {3687138000 -18000 0 CST} + {3698024400 -14400 1 CDT} + {3718587600 -18000 0 CST} + {3730078800 -14400 1 CDT} + {3750642000 -18000 0 CST} + {3761528400 -14400 1 CDT} + {3782091600 -18000 0 CST} + {3792978000 -14400 1 CDT} + {3813541200 -18000 0 CST} + {3824427600 -14400 1 CDT} + {3844990800 -18000 0 CST} + {3855877200 -14400 1 CDT} + {3876440400 -18000 0 CST} + {3887326800 -14400 1 CDT} + {3907890000 -18000 0 CST} + {3919381200 -14400 1 CDT} + {3939944400 -18000 0 CST} + {3950830800 -14400 1 CDT} + {3971394000 -18000 0 CST} + {3982280400 -14400 1 CDT} + {4002843600 -18000 0 CST} + {4013730000 -14400 1 CDT} + {4034293200 -18000 0 CST} + {4045179600 -14400 1 CDT} + {4065742800 -18000 0 CST} + {4076629200 -14400 1 CDT} + {4097192400 -18000 0 CST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Hermosillo b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Hermosillo new file mode 100644 index 00000000..779020e6 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Hermosillo @@ -0,0 +1,21 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Hermosillo) { + {-9223372036854775808 -26632 0 LMT} + {-1514739600 -25200 0 MST} + {-1343066400 -21600 0 CST} + {-1234807200 -25200 0 MST} + {-1220292000 -21600 0 CST} + {-1207159200 -25200 0 MST} + {-1191344400 -21600 0 CST} + {-873828000 -25200 0 MST} + {-661539600 -28800 0 PST} + {28800 -25200 0 MST} + {828867600 -21600 1 MDT} + {846403200 -25200 0 MST} + {860317200 -21600 1 MDT} + {877852800 -25200 0 MST} + {891766800 -21600 1 MDT} + {909302400 -25200 0 MST} + {915174000 -25200 0 MST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Indiana/Indianapolis b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Indiana/Indianapolis new file mode 100644 index 00000000..63c410ca --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Indiana/Indianapolis @@ -0,0 +1,234 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Indiana/Indianapolis) { + {-9223372036854775808 -20678 0 LMT} + {-2717647200 -21600 0 CST} + {-1633276800 -18000 1 CDT} + {-1615136400 -21600 0 CST} + {-1601827200 -18000 1 CDT} + {-1583686800 -21600 0 CST} + {-1577901600 -21600 0 CST} + {-900259200 -18000 1 CDT} + {-891795600 -21600 0 CST} + {-883591200 -21600 0 CST} + {-880214400 -18000 1 CWT} + {-769395600 -18000 1 CPT} + {-765392400 -21600 0 CST} + {-757360800 -21600 0 CST} + {-747244800 -18000 1 CDT} + {-733942800 -21600 0 CST} + {-715795200 -18000 1 CDT} + {-702493200 -21600 0 CST} + {-684345600 -18000 1 CDT} + {-671043600 -21600 0 CST} + {-652896000 -18000 1 CDT} + {-639594000 -21600 0 CST} + {-620841600 -18000 1 CDT} + {-608144400 -21600 0 CST} + {-589392000 -18000 1 CDT} + {-576090000 -21600 0 CST} + {-557942400 -18000 1 CDT} + {-544640400 -21600 0 CST} + {-526492800 -18000 1 CDT} + {-513190800 -21600 0 CST} + {-495043200 -18000 1 CDT} + {-481741200 -21600 0 CST} + {-463593600 -18000 0 EST} + {-386787600 -21600 0 CST} + {-368640000 -18000 0 EST} + {-31518000 -18000 0 EST} + {-21488400 -14400 1 EDT} + {-5767200 -18000 0 EST} + {9961200 -14400 1 EDT} + {25682400 -18000 0 EST} + {31554000 -18000 0 EST} + {1136091600 -18000 0 EST} + {1143961200 -14400 1 EDT} + {1162101600 -18000 0 EST} + {1173596400 -14400 1 EDT} + {1194156000 -18000 0 EST} + {1205046000 -14400 1 EDT} + {1225605600 -18000 0 EST} + {1236495600 -14400 1 EDT} + {1257055200 -18000 0 EST} + {1268550000 -14400 1 EDT} + {1289109600 -18000 0 EST} + {1299999600 -14400 1 EDT} + {1320559200 -18000 0 EST} + {1331449200 -14400 1 EDT} + {1352008800 -18000 0 EST} + {1362898800 -14400 1 EDT} + {1383458400 -18000 0 EST} + {1394348400 -14400 1 EDT} + {1414908000 -18000 0 EST} + {1425798000 -14400 1 EDT} + {1446357600 -18000 0 EST} + {1457852400 -14400 1 EDT} + {1478412000 -18000 0 EST} + {1489302000 -14400 1 EDT} + {1509861600 -18000 0 EST} + {1520751600 -14400 1 EDT} + {1541311200 -18000 0 EST} + {1552201200 -14400 1 EDT} + {1572760800 -18000 0 EST} + {1583650800 -14400 1 EDT} + {1604210400 -18000 0 EST} + {1615705200 -14400 1 EDT} + {1636264800 -18000 0 EST} + {1647154800 -14400 1 EDT} + {1667714400 -18000 0 EST} + {1678604400 -14400 1 EDT} + {1699164000 -18000 0 EST} + {1710054000 -14400 1 EDT} + {1730613600 -18000 0 EST} + {1741503600 -14400 1 EDT} + {1762063200 -18000 0 EST} + {1772953200 -14400 1 EDT} + {1793512800 -18000 0 EST} + {1805007600 -14400 1 EDT} + {1825567200 -18000 0 EST} + {1836457200 -14400 1 EDT} + {1857016800 -18000 0 EST} + {1867906800 -14400 1 EDT} + {1888466400 -18000 0 EST} + {1899356400 -14400 1 EDT} + {1919916000 -18000 0 EST} + {1930806000 -14400 1 EDT} + {1951365600 -18000 0 EST} + {1962860400 -14400 1 EDT} + {1983420000 -18000 0 EST} + {1994310000 -14400 1 EDT} + {2014869600 -18000 0 EST} + {2025759600 -14400 1 EDT} + {2046319200 -18000 0 EST} + {2057209200 -14400 1 EDT} + {2077768800 -18000 0 EST} + {2088658800 -14400 1 EDT} + {2109218400 -18000 0 EST} + {2120108400 -14400 1 EDT} + {2140668000 -18000 0 EST} + {2152162800 -14400 1 EDT} + {2172722400 -18000 0 EST} + {2183612400 -14400 1 EDT} + {2204172000 -18000 0 EST} + {2215062000 -14400 1 EDT} + {2235621600 -18000 0 EST} + {2246511600 -14400 1 EDT} + {2267071200 -18000 0 EST} + {2277961200 -14400 1 EDT} + {2298520800 -18000 0 EST} + {2309410800 -14400 1 EDT} + {2329970400 -18000 0 EST} + {2341465200 -14400 1 EDT} + {2362024800 -18000 0 EST} + {2372914800 -14400 1 EDT} + {2393474400 -18000 0 EST} + {2404364400 -14400 1 EDT} + {2424924000 -18000 0 EST} + {2435814000 -14400 1 EDT} + {2456373600 -18000 0 EST} + {2467263600 -14400 1 EDT} + {2487823200 -18000 0 EST} + {2499318000 -14400 1 EDT} + {2519877600 -18000 0 EST} + {2530767600 -14400 1 EDT} + {2551327200 -18000 0 EST} + {2562217200 -14400 1 EDT} + {2582776800 -18000 0 EST} + {2593666800 -14400 1 EDT} + {2614226400 -18000 0 EST} + {2625116400 -14400 1 EDT} + {2645676000 -18000 0 EST} + {2656566000 -14400 1 EDT} + {2677125600 -18000 0 EST} + {2688620400 -14400 1 EDT} + {2709180000 -18000 0 EST} + {2720070000 -14400 1 EDT} + {2740629600 -18000 0 EST} + {2751519600 -14400 1 EDT} + {2772079200 -18000 0 EST} + {2782969200 -14400 1 EDT} + {2803528800 -18000 0 EST} + {2814418800 -14400 1 EDT} + {2834978400 -18000 0 EST} + {2846473200 -14400 1 EDT} + {2867032800 -18000 0 EST} + {2877922800 -14400 1 EDT} + {2898482400 -18000 0 EST} + {2909372400 -14400 1 EDT} + {2929932000 -18000 0 EST} + {2940822000 -14400 1 EDT} + {2961381600 -18000 0 EST} + {2972271600 -14400 1 EDT} + {2992831200 -18000 0 EST} + {3003721200 -14400 1 EDT} + {3024280800 -18000 0 EST} + {3035775600 -14400 1 EDT} + {3056335200 -18000 0 EST} + {3067225200 -14400 1 EDT} + {3087784800 -18000 0 EST} + {3098674800 -14400 1 EDT} + {3119234400 -18000 0 EST} + {3130124400 -14400 1 EDT} + {3150684000 -18000 0 EST} + {3161574000 -14400 1 EDT} + {3182133600 -18000 0 EST} + {3193023600 -14400 1 EDT} + {3213583200 -18000 0 EST} + {3225078000 -14400 1 EDT} + {3245637600 -18000 0 EST} + {3256527600 -14400 1 EDT} + {3277087200 -18000 0 EST} + {3287977200 -14400 1 EDT} + {3308536800 -18000 0 EST} + {3319426800 -14400 1 EDT} + {3339986400 -18000 0 EST} + {3350876400 -14400 1 EDT} + {3371436000 -18000 0 EST} + {3382930800 -14400 1 EDT} + {3403490400 -18000 0 EST} + {3414380400 -14400 1 EDT} + {3434940000 -18000 0 EST} + {3445830000 -14400 1 EDT} + {3466389600 -18000 0 EST} + {3477279600 -14400 1 EDT} + {3497839200 -18000 0 EST} + {3508729200 -14400 1 EDT} + {3529288800 -18000 0 EST} + {3540178800 -14400 1 EDT} + {3560738400 -18000 0 EST} + {3572233200 -14400 1 EDT} + {3592792800 -18000 0 EST} + {3603682800 -14400 1 EDT} + {3624242400 -18000 0 EST} + {3635132400 -14400 1 EDT} + {3655692000 -18000 0 EST} + {3666582000 -14400 1 EDT} + {3687141600 -18000 0 EST} + {3698031600 -14400 1 EDT} + {3718591200 -18000 0 EST} + {3730086000 -14400 1 EDT} + {3750645600 -18000 0 EST} + {3761535600 -14400 1 EDT} + {3782095200 -18000 0 EST} + {3792985200 -14400 1 EDT} + {3813544800 -18000 0 EST} + {3824434800 -14400 1 EDT} + {3844994400 -18000 0 EST} + {3855884400 -14400 1 EDT} + {3876444000 -18000 0 EST} + {3887334000 -14400 1 EDT} + {3907893600 -18000 0 EST} + {3919388400 -14400 1 EDT} + {3939948000 -18000 0 EST} + {3950838000 -14400 1 EDT} + {3971397600 -18000 0 EST} + {3982287600 -14400 1 EDT} + {4002847200 -18000 0 EST} + {4013737200 -14400 1 EDT} + {4034296800 -18000 0 EST} + {4045186800 -14400 1 EDT} + {4065746400 -18000 0 EST} + {4076636400 -14400 1 EDT} + {4097196000 -18000 0 EST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Indiana/Knox b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Indiana/Knox new file mode 100644 index 00000000..eee3ff4e --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Indiana/Knox @@ -0,0 +1,285 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Indiana/Knox) { + {-9223372036854775808 -20790 0 LMT} + {-2717647200 -21600 0 CST} + {-1633276800 -18000 1 CDT} + {-1615136400 -21600 0 CST} + {-1601827200 -18000 1 CDT} + {-1583686800 -21600 0 CST} + {-880214400 -18000 1 CWT} + {-769395600 -18000 1 CPT} + {-765392400 -21600 0 CST} + {-725824800 -21600 0 CST} + {-715795200 -18000 1 CDT} + {-702493200 -21600 0 CST} + {-684345600 -18000 1 CDT} + {-671043600 -21600 0 CST} + {-652896000 -18000 1 CDT} + {-639594000 -21600 0 CST} + {-620841600 -18000 1 CDT} + {-608144400 -21600 0 CST} + {-589392000 -18000 1 CDT} + {-576090000 -21600 0 CST} + {-557942400 -18000 1 CDT} + {-544640400 -21600 0 CST} + {-526492800 -18000 1 CDT} + {-513190800 -21600 0 CST} + {-495043200 -18000 1 CDT} + {-481741200 -21600 0 CST} + {-463593600 -18000 1 CDT} + {-447267600 -21600 0 CST} + {-431539200 -18000 1 CDT} + {-415818000 -21600 0 CST} + {-400089600 -18000 1 CDT} + {-386787600 -21600 0 CST} + {-368640000 -18000 1 CDT} + {-355338000 -21600 0 CST} + {-337190400 -18000 1 CDT} + {-321469200 -21600 0 CST} + {-305740800 -18000 1 CDT} + {-289414800 -21600 0 CST} + {-273686400 -18000 1 CDT} + {-257965200 -21600 0 CST} + {-242236800 -18000 0 EST} + {-195066000 -21600 0 CST} + {-84384000 -18000 1 CDT} + {-68662800 -21600 0 CST} + {-52934400 -18000 1 CDT} + {-37213200 -21600 0 CST} + {-21484800 -18000 1 CDT} + {-5763600 -21600 0 CST} + {9964800 -18000 1 CDT} + {25686000 -21600 0 CST} + {41414400 -18000 1 CDT} + {57740400 -21600 0 CST} + {73468800 -18000 1 CDT} + {89190000 -21600 0 CST} + {104918400 -18000 1 CDT} + {120639600 -21600 0 CST} + {126691200 -18000 1 CDT} + {152089200 -21600 0 CST} + {162374400 -18000 1 CDT} + {183538800 -21600 0 CST} + {199267200 -18000 1 CDT} + {215593200 -21600 0 CST} + {230716800 -18000 1 CDT} + {247042800 -21600 0 CST} + {262771200 -18000 1 CDT} + {278492400 -21600 0 CST} + {294220800 -18000 1 CDT} + {309942000 -21600 0 CST} + {325670400 -18000 1 CDT} + {341391600 -21600 0 CST} + {357120000 -18000 1 CDT} + {372841200 -21600 0 CST} + {388569600 -18000 1 CDT} + {404895600 -21600 0 CST} + {420019200 -18000 1 CDT} + {436345200 -21600 0 CST} + {452073600 -18000 1 CDT} + {467794800 -21600 0 CST} + {483523200 -18000 1 CDT} + {499244400 -21600 0 CST} + {514972800 -18000 1 CDT} + {530694000 -21600 0 CST} + {544608000 -18000 1 CDT} + {562143600 -21600 0 CST} + {576057600 -18000 1 CDT} + {594198000 -21600 0 CST} + {607507200 -18000 1 CDT} + {625647600 -21600 0 CST} + {638956800 -18000 1 CDT} + {657097200 -21600 0 CST} + {671011200 -18000 1 CDT} + {688550400 -18000 0 EST} + {1143961200 -21600 0 CST} + {1143964800 -18000 1 CDT} + {1162105200 -21600 0 CST} + {1173600000 -18000 1 CDT} + {1194159600 -21600 0 CST} + {1205049600 -18000 1 CDT} + {1225609200 -21600 0 CST} + {1236499200 -18000 1 CDT} + {1257058800 -21600 0 CST} + {1268553600 -18000 1 CDT} + {1289113200 -21600 0 CST} + {1300003200 -18000 1 CDT} + {1320562800 -21600 0 CST} + {1331452800 -18000 1 CDT} + {1352012400 -21600 0 CST} + {1362902400 -18000 1 CDT} + {1383462000 -21600 0 CST} + {1394352000 -18000 1 CDT} + {1414911600 -21600 0 CST} + {1425801600 -18000 1 CDT} + {1446361200 -21600 0 CST} + {1457856000 -18000 1 CDT} + {1478415600 -21600 0 CST} + {1489305600 -18000 1 CDT} + {1509865200 -21600 0 CST} + {1520755200 -18000 1 CDT} + {1541314800 -21600 0 CST} + {1552204800 -18000 1 CDT} + {1572764400 -21600 0 CST} + {1583654400 -18000 1 CDT} + {1604214000 -21600 0 CST} + {1615708800 -18000 1 CDT} + {1636268400 -21600 0 CST} + {1647158400 -18000 1 CDT} + {1667718000 -21600 0 CST} + {1678608000 -18000 1 CDT} + {1699167600 -21600 0 CST} + {1710057600 -18000 1 CDT} + {1730617200 -21600 0 CST} + {1741507200 -18000 1 CDT} + {1762066800 -21600 0 CST} + {1772956800 -18000 1 CDT} + {1793516400 -21600 0 CST} + {1805011200 -18000 1 CDT} + {1825570800 -21600 0 CST} + {1836460800 -18000 1 CDT} + {1857020400 -21600 0 CST} + {1867910400 -18000 1 CDT} + {1888470000 -21600 0 CST} + {1899360000 -18000 1 CDT} + {1919919600 -21600 0 CST} + {1930809600 -18000 1 CDT} + {1951369200 -21600 0 CST} + {1962864000 -18000 1 CDT} + {1983423600 -21600 0 CST} + {1994313600 -18000 1 CDT} + {2014873200 -21600 0 CST} + {2025763200 -18000 1 CDT} + {2046322800 -21600 0 CST} + {2057212800 -18000 1 CDT} + {2077772400 -21600 0 CST} + {2088662400 -18000 1 CDT} + {2109222000 -21600 0 CST} + {2120112000 -18000 1 CDT} + {2140671600 -21600 0 CST} + {2152166400 -18000 1 CDT} + {2172726000 -21600 0 CST} + {2183616000 -18000 1 CDT} + {2204175600 -21600 0 CST} + {2215065600 -18000 1 CDT} + {2235625200 -21600 0 CST} + {2246515200 -18000 1 CDT} + {2267074800 -21600 0 CST} + {2277964800 -18000 1 CDT} + {2298524400 -21600 0 CST} + {2309414400 -18000 1 CDT} + {2329974000 -21600 0 CST} + {2341468800 -18000 1 CDT} + {2362028400 -21600 0 CST} + {2372918400 -18000 1 CDT} + {2393478000 -21600 0 CST} + {2404368000 -18000 1 CDT} + {2424927600 -21600 0 CST} + {2435817600 -18000 1 CDT} + {2456377200 -21600 0 CST} + {2467267200 -18000 1 CDT} + {2487826800 -21600 0 CST} + {2499321600 -18000 1 CDT} + {2519881200 -21600 0 CST} + {2530771200 -18000 1 CDT} + {2551330800 -21600 0 CST} + {2562220800 -18000 1 CDT} + {2582780400 -21600 0 CST} + {2593670400 -18000 1 CDT} + {2614230000 -21600 0 CST} + {2625120000 -18000 1 CDT} + {2645679600 -21600 0 CST} + {2656569600 -18000 1 CDT} + {2677129200 -21600 0 CST} + {2688624000 -18000 1 CDT} + {2709183600 -21600 0 CST} + {2720073600 -18000 1 CDT} + {2740633200 -21600 0 CST} + {2751523200 -18000 1 CDT} + {2772082800 -21600 0 CST} + {2782972800 -18000 1 CDT} + {2803532400 -21600 0 CST} + {2814422400 -18000 1 CDT} + {2834982000 -21600 0 CST} + {2846476800 -18000 1 CDT} + {2867036400 -21600 0 CST} + {2877926400 -18000 1 CDT} + {2898486000 -21600 0 CST} + {2909376000 -18000 1 CDT} + {2929935600 -21600 0 CST} + {2940825600 -18000 1 CDT} + {2961385200 -21600 0 CST} + {2972275200 -18000 1 CDT} + {2992834800 -21600 0 CST} + {3003724800 -18000 1 CDT} + {3024284400 -21600 0 CST} + {3035779200 -18000 1 CDT} + {3056338800 -21600 0 CST} + {3067228800 -18000 1 CDT} + {3087788400 -21600 0 CST} + {3098678400 -18000 1 CDT} + {3119238000 -21600 0 CST} + {3130128000 -18000 1 CDT} + {3150687600 -21600 0 CST} + {3161577600 -18000 1 CDT} + {3182137200 -21600 0 CST} + {3193027200 -18000 1 CDT} + {3213586800 -21600 0 CST} + {3225081600 -18000 1 CDT} + {3245641200 -21600 0 CST} + {3256531200 -18000 1 CDT} + {3277090800 -21600 0 CST} + {3287980800 -18000 1 CDT} + {3308540400 -21600 0 CST} + {3319430400 -18000 1 CDT} + {3339990000 -21600 0 CST} + {3350880000 -18000 1 CDT} + {3371439600 -21600 0 CST} + {3382934400 -18000 1 CDT} + {3403494000 -21600 0 CST} + {3414384000 -18000 1 CDT} + {3434943600 -21600 0 CST} + {3445833600 -18000 1 CDT} + {3466393200 -21600 0 CST} + {3477283200 -18000 1 CDT} + {3497842800 -21600 0 CST} + {3508732800 -18000 1 CDT} + {3529292400 -21600 0 CST} + {3540182400 -18000 1 CDT} + {3560742000 -21600 0 CST} + {3572236800 -18000 1 CDT} + {3592796400 -21600 0 CST} + {3603686400 -18000 1 CDT} + {3624246000 -21600 0 CST} + {3635136000 -18000 1 CDT} + {3655695600 -21600 0 CST} + {3666585600 -18000 1 CDT} + {3687145200 -21600 0 CST} + {3698035200 -18000 1 CDT} + {3718594800 -21600 0 CST} + {3730089600 -18000 1 CDT} + {3750649200 -21600 0 CST} + {3761539200 -18000 1 CDT} + {3782098800 -21600 0 CST} + {3792988800 -18000 1 CDT} + {3813548400 -21600 0 CST} + {3824438400 -18000 1 CDT} + {3844998000 -21600 0 CST} + {3855888000 -18000 1 CDT} + {3876447600 -21600 0 CST} + {3887337600 -18000 1 CDT} + {3907897200 -21600 0 CST} + {3919392000 -18000 1 CDT} + {3939951600 -21600 0 CST} + {3950841600 -18000 1 CDT} + {3971401200 -21600 0 CST} + {3982291200 -18000 1 CDT} + {4002850800 -21600 0 CST} + {4013740800 -18000 1 CDT} + {4034300400 -21600 0 CST} + {4045190400 -18000 1 CDT} + {4065750000 -21600 0 CST} + {4076640000 -18000 1 CDT} + {4097199600 -21600 0 CST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Indiana/Marengo b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Indiana/Marengo new file mode 100644 index 00000000..3f1d578b --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Indiana/Marengo @@ -0,0 +1,236 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Indiana/Marengo) { + {-9223372036854775808 -20723 0 LMT} + {-2717647200 -21600 0 CST} + {-1633276800 -18000 1 CDT} + {-1615136400 -21600 0 CST} + {-1601827200 -18000 1 CDT} + {-1583686800 -21600 0 CST} + {-880214400 -18000 1 CWT} + {-769395600 -18000 1 CPT} + {-765392400 -21600 0 CST} + {-599594400 -21600 0 CST} + {-589392000 -18000 1 CDT} + {-576090000 -21600 0 CST} + {-495043200 -18000 1 CDT} + {-481741200 -21600 0 CST} + {-463593600 -18000 1 CDT} + {-450291600 -21600 0 CST} + {-431539200 -18000 1 CDT} + {-418237200 -21600 0 CST} + {-400089600 -18000 1 CDT} + {-386787600 -21600 0 CST} + {-368640000 -18000 1 CDT} + {-355338000 -21600 0 CST} + {-337190400 -18000 1 CDT} + {-323888400 -21600 0 CST} + {-305740800 -18000 1 CDT} + {-292438800 -21600 0 CST} + {-273686400 -18000 0 EST} + {-31518000 -18000 0 EST} + {-21488400 -14400 1 EDT} + {-5767200 -18000 0 EST} + {9961200 -14400 1 EDT} + {25682400 -18000 0 EST} + {41410800 -14400 1 EDT} + {57736800 -18000 0 EST} + {73465200 -14400 1 EDT} + {89186400 -18000 0 EST} + {104914800 -14400 1 EDT} + {120636000 -18000 0 EST} + {126687600 -18000 1 CDT} + {152089200 -18000 0 EST} + {162370800 -14400 1 EDT} + {183535200 -18000 0 EST} + {189320400 -18000 0 EST} + {1136091600 -18000 0 EST} + {1143961200 -14400 1 EDT} + {1162101600 -18000 0 EST} + {1173596400 -14400 1 EDT} + {1194156000 -18000 0 EST} + {1205046000 -14400 1 EDT} + {1225605600 -18000 0 EST} + {1236495600 -14400 1 EDT} + {1257055200 -18000 0 EST} + {1268550000 -14400 1 EDT} + {1289109600 -18000 0 EST} + {1299999600 -14400 1 EDT} + {1320559200 -18000 0 EST} + {1331449200 -14400 1 EDT} + {1352008800 -18000 0 EST} + {1362898800 -14400 1 EDT} + {1383458400 -18000 0 EST} + {1394348400 -14400 1 EDT} + {1414908000 -18000 0 EST} + {1425798000 -14400 1 EDT} + {1446357600 -18000 0 EST} + {1457852400 -14400 1 EDT} + {1478412000 -18000 0 EST} + {1489302000 -14400 1 EDT} + {1509861600 -18000 0 EST} + {1520751600 -14400 1 EDT} + {1541311200 -18000 0 EST} + {1552201200 -14400 1 EDT} + {1572760800 -18000 0 EST} + {1583650800 -14400 1 EDT} + {1604210400 -18000 0 EST} + {1615705200 -14400 1 EDT} + {1636264800 -18000 0 EST} + {1647154800 -14400 1 EDT} + {1667714400 -18000 0 EST} + {1678604400 -14400 1 EDT} + {1699164000 -18000 0 EST} + {1710054000 -14400 1 EDT} + {1730613600 -18000 0 EST} + {1741503600 -14400 1 EDT} + {1762063200 -18000 0 EST} + {1772953200 -14400 1 EDT} + {1793512800 -18000 0 EST} + {1805007600 -14400 1 EDT} + {1825567200 -18000 0 EST} + {1836457200 -14400 1 EDT} + {1857016800 -18000 0 EST} + {1867906800 -14400 1 EDT} + {1888466400 -18000 0 EST} + {1899356400 -14400 1 EDT} + {1919916000 -18000 0 EST} + {1930806000 -14400 1 EDT} + {1951365600 -18000 0 EST} + {1962860400 -14400 1 EDT} + {1983420000 -18000 0 EST} + {1994310000 -14400 1 EDT} + {2014869600 -18000 0 EST} + {2025759600 -14400 1 EDT} + {2046319200 -18000 0 EST} + {2057209200 -14400 1 EDT} + {2077768800 -18000 0 EST} + {2088658800 -14400 1 EDT} + {2109218400 -18000 0 EST} + {2120108400 -14400 1 EDT} + {2140668000 -18000 0 EST} + {2152162800 -14400 1 EDT} + {2172722400 -18000 0 EST} + {2183612400 -14400 1 EDT} + {2204172000 -18000 0 EST} + {2215062000 -14400 1 EDT} + {2235621600 -18000 0 EST} + {2246511600 -14400 1 EDT} + {2267071200 -18000 0 EST} + {2277961200 -14400 1 EDT} + {2298520800 -18000 0 EST} + {2309410800 -14400 1 EDT} + {2329970400 -18000 0 EST} + {2341465200 -14400 1 EDT} + {2362024800 -18000 0 EST} + {2372914800 -14400 1 EDT} + {2393474400 -18000 0 EST} + {2404364400 -14400 1 EDT} + {2424924000 -18000 0 EST} + {2435814000 -14400 1 EDT} + {2456373600 -18000 0 EST} + {2467263600 -14400 1 EDT} + {2487823200 -18000 0 EST} + {2499318000 -14400 1 EDT} + {2519877600 -18000 0 EST} + {2530767600 -14400 1 EDT} + {2551327200 -18000 0 EST} + {2562217200 -14400 1 EDT} + {2582776800 -18000 0 EST} + {2593666800 -14400 1 EDT} + {2614226400 -18000 0 EST} + {2625116400 -14400 1 EDT} + {2645676000 -18000 0 EST} + {2656566000 -14400 1 EDT} + {2677125600 -18000 0 EST} + {2688620400 -14400 1 EDT} + {2709180000 -18000 0 EST} + {2720070000 -14400 1 EDT} + {2740629600 -18000 0 EST} + {2751519600 -14400 1 EDT} + {2772079200 -18000 0 EST} + {2782969200 -14400 1 EDT} + {2803528800 -18000 0 EST} + {2814418800 -14400 1 EDT} + {2834978400 -18000 0 EST} + {2846473200 -14400 1 EDT} + {2867032800 -18000 0 EST} + {2877922800 -14400 1 EDT} + {2898482400 -18000 0 EST} + {2909372400 -14400 1 EDT} + {2929932000 -18000 0 EST} + {2940822000 -14400 1 EDT} + {2961381600 -18000 0 EST} + {2972271600 -14400 1 EDT} + {2992831200 -18000 0 EST} + {3003721200 -14400 1 EDT} + {3024280800 -18000 0 EST} + {3035775600 -14400 1 EDT} + {3056335200 -18000 0 EST} + {3067225200 -14400 1 EDT} + {3087784800 -18000 0 EST} + {3098674800 -14400 1 EDT} + {3119234400 -18000 0 EST} + {3130124400 -14400 1 EDT} + {3150684000 -18000 0 EST} + {3161574000 -14400 1 EDT} + {3182133600 -18000 0 EST} + {3193023600 -14400 1 EDT} + {3213583200 -18000 0 EST} + {3225078000 -14400 1 EDT} + {3245637600 -18000 0 EST} + {3256527600 -14400 1 EDT} + {3277087200 -18000 0 EST} + {3287977200 -14400 1 EDT} + {3308536800 -18000 0 EST} + {3319426800 -14400 1 EDT} + {3339986400 -18000 0 EST} + {3350876400 -14400 1 EDT} + {3371436000 -18000 0 EST} + {3382930800 -14400 1 EDT} + {3403490400 -18000 0 EST} + {3414380400 -14400 1 EDT} + {3434940000 -18000 0 EST} + {3445830000 -14400 1 EDT} + {3466389600 -18000 0 EST} + {3477279600 -14400 1 EDT} + {3497839200 -18000 0 EST} + {3508729200 -14400 1 EDT} + {3529288800 -18000 0 EST} + {3540178800 -14400 1 EDT} + {3560738400 -18000 0 EST} + {3572233200 -14400 1 EDT} + {3592792800 -18000 0 EST} + {3603682800 -14400 1 EDT} + {3624242400 -18000 0 EST} + {3635132400 -14400 1 EDT} + {3655692000 -18000 0 EST} + {3666582000 -14400 1 EDT} + {3687141600 -18000 0 EST} + {3698031600 -14400 1 EDT} + {3718591200 -18000 0 EST} + {3730086000 -14400 1 EDT} + {3750645600 -18000 0 EST} + {3761535600 -14400 1 EDT} + {3782095200 -18000 0 EST} + {3792985200 -14400 1 EDT} + {3813544800 -18000 0 EST} + {3824434800 -14400 1 EDT} + {3844994400 -18000 0 EST} + {3855884400 -14400 1 EDT} + {3876444000 -18000 0 EST} + {3887334000 -14400 1 EDT} + {3907893600 -18000 0 EST} + {3919388400 -14400 1 EDT} + {3939948000 -18000 0 EST} + {3950838000 -14400 1 EDT} + {3971397600 -18000 0 EST} + {3982287600 -14400 1 EDT} + {4002847200 -18000 0 EST} + {4013737200 -14400 1 EDT} + {4034296800 -18000 0 EST} + {4045186800 -14400 1 EDT} + {4065746400 -18000 0 EST} + {4076636400 -14400 1 EDT} + {4097196000 -18000 0 EST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Indiana/Petersburg b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Indiana/Petersburg new file mode 100644 index 00000000..6992bfc4 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Indiana/Petersburg @@ -0,0 +1,247 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Indiana/Petersburg) { + {-9223372036854775808 -20947 0 LMT} + {-2717647200 -21600 0 CST} + {-1633276800 -18000 1 CDT} + {-1615136400 -21600 0 CST} + {-1601827200 -18000 1 CDT} + {-1583686800 -21600 0 CST} + {-880214400 -18000 1 CWT} + {-769395600 -18000 1 CPT} + {-765392400 -21600 0 CST} + {-473364000 -21600 0 CST} + {-462996000 -18000 1 CDT} + {-450291600 -21600 0 CST} + {-431539200 -18000 1 CDT} + {-418237200 -21600 0 CST} + {-400089600 -18000 1 CDT} + {-386787600 -21600 0 CST} + {-368640000 -18000 1 CDT} + {-355338000 -21600 0 CST} + {-337190400 -18000 1 CDT} + {-323888400 -21600 0 CST} + {-305740800 -18000 1 CDT} + {-292438800 -21600 0 CST} + {-273686400 -18000 1 CDT} + {-257965200 -21600 0 CST} + {-242236800 -18000 1 CDT} + {-226515600 -21600 0 CST} + {-210787200 -18000 1 CDT} + {-195066000 -21600 0 CST} + {-179337600 -18000 1 CDT} + {-163616400 -21600 0 CST} + {-147888000 -18000 0 EST} + {-100112400 -21600 0 CST} + {-84384000 -18000 1 CDT} + {-68662800 -21600 0 CST} + {-52934400 -18000 1 CDT} + {-37213200 -21600 0 CST} + {-21484800 -18000 1 CDT} + {-5763600 -21600 0 CST} + {9964800 -18000 1 CDT} + {25686000 -21600 0 CST} + {41414400 -18000 1 CDT} + {57740400 -21600 0 CST} + {73468800 -18000 1 CDT} + {89190000 -21600 0 CST} + {104918400 -18000 1 CDT} + {120639600 -21600 0 CST} + {126691200 -18000 1 CDT} + {152089200 -21600 0 CST} + {162374400 -18000 1 CDT} + {183538800 -21600 0 CST} + {199267200 -18000 1 CDT} + {215593200 -21600 0 CST} + {230716800 -18000 1 CDT} + {247046400 -18000 0 EST} + {1143961200 -21600 0 CST} + {1143964800 -18000 1 CDT} + {1162105200 -21600 0 CST} + {1173600000 -18000 1 CDT} + {1194163200 -18000 0 EST} + {1205046000 -14400 1 EDT} + {1225605600 -18000 0 EST} + {1236495600 -14400 1 EDT} + {1257055200 -18000 0 EST} + {1268550000 -14400 1 EDT} + {1289109600 -18000 0 EST} + {1299999600 -14400 1 EDT} + {1320559200 -18000 0 EST} + {1331449200 -14400 1 EDT} + {1352008800 -18000 0 EST} + {1362898800 -14400 1 EDT} + {1383458400 -18000 0 EST} + {1394348400 -14400 1 EDT} + {1414908000 -18000 0 EST} + {1425798000 -14400 1 EDT} + {1446357600 -18000 0 EST} + {1457852400 -14400 1 EDT} + {1478412000 -18000 0 EST} + {1489302000 -14400 1 EDT} + {1509861600 -18000 0 EST} + {1520751600 -14400 1 EDT} + {1541311200 -18000 0 EST} + {1552201200 -14400 1 EDT} + {1572760800 -18000 0 EST} + {1583650800 -14400 1 EDT} + {1604210400 -18000 0 EST} + {1615705200 -14400 1 EDT} + {1636264800 -18000 0 EST} + {1647154800 -14400 1 EDT} + {1667714400 -18000 0 EST} + {1678604400 -14400 1 EDT} + {1699164000 -18000 0 EST} + {1710054000 -14400 1 EDT} + {1730613600 -18000 0 EST} + {1741503600 -14400 1 EDT} + {1762063200 -18000 0 EST} + {1772953200 -14400 1 EDT} + {1793512800 -18000 0 EST} + {1805007600 -14400 1 EDT} + {1825567200 -18000 0 EST} + {1836457200 -14400 1 EDT} + {1857016800 -18000 0 EST} + {1867906800 -14400 1 EDT} + {1888466400 -18000 0 EST} + {1899356400 -14400 1 EDT} + {1919916000 -18000 0 EST} + {1930806000 -14400 1 EDT} + {1951365600 -18000 0 EST} + {1962860400 -14400 1 EDT} + {1983420000 -18000 0 EST} + {1994310000 -14400 1 EDT} + {2014869600 -18000 0 EST} + {2025759600 -14400 1 EDT} + {2046319200 -18000 0 EST} + {2057209200 -14400 1 EDT} + {2077768800 -18000 0 EST} + {2088658800 -14400 1 EDT} + {2109218400 -18000 0 EST} + {2120108400 -14400 1 EDT} + {2140668000 -18000 0 EST} + {2152162800 -14400 1 EDT} + {2172722400 -18000 0 EST} + {2183612400 -14400 1 EDT} + {2204172000 -18000 0 EST} + {2215062000 -14400 1 EDT} + {2235621600 -18000 0 EST} + {2246511600 -14400 1 EDT} + {2267071200 -18000 0 EST} + {2277961200 -14400 1 EDT} + {2298520800 -18000 0 EST} + {2309410800 -14400 1 EDT} + {2329970400 -18000 0 EST} + {2341465200 -14400 1 EDT} + {2362024800 -18000 0 EST} + {2372914800 -14400 1 EDT} + {2393474400 -18000 0 EST} + {2404364400 -14400 1 EDT} + {2424924000 -18000 0 EST} + {2435814000 -14400 1 EDT} + {2456373600 -18000 0 EST} + {2467263600 -14400 1 EDT} + {2487823200 -18000 0 EST} + {2499318000 -14400 1 EDT} + {2519877600 -18000 0 EST} + {2530767600 -14400 1 EDT} + {2551327200 -18000 0 EST} + {2562217200 -14400 1 EDT} + {2582776800 -18000 0 EST} + {2593666800 -14400 1 EDT} + {2614226400 -18000 0 EST} + {2625116400 -14400 1 EDT} + {2645676000 -18000 0 EST} + {2656566000 -14400 1 EDT} + {2677125600 -18000 0 EST} + {2688620400 -14400 1 EDT} + {2709180000 -18000 0 EST} + {2720070000 -14400 1 EDT} + {2740629600 -18000 0 EST} + {2751519600 -14400 1 EDT} + {2772079200 -18000 0 EST} + {2782969200 -14400 1 EDT} + {2803528800 -18000 0 EST} + {2814418800 -14400 1 EDT} + {2834978400 -18000 0 EST} + {2846473200 -14400 1 EDT} + {2867032800 -18000 0 EST} + {2877922800 -14400 1 EDT} + {2898482400 -18000 0 EST} + {2909372400 -14400 1 EDT} + {2929932000 -18000 0 EST} + {2940822000 -14400 1 EDT} + {2961381600 -18000 0 EST} + {2972271600 -14400 1 EDT} + {2992831200 -18000 0 EST} + {3003721200 -14400 1 EDT} + {3024280800 -18000 0 EST} + {3035775600 -14400 1 EDT} + {3056335200 -18000 0 EST} + {3067225200 -14400 1 EDT} + {3087784800 -18000 0 EST} + {3098674800 -14400 1 EDT} + {3119234400 -18000 0 EST} + {3130124400 -14400 1 EDT} + {3150684000 -18000 0 EST} + {3161574000 -14400 1 EDT} + {3182133600 -18000 0 EST} + {3193023600 -14400 1 EDT} + {3213583200 -18000 0 EST} + {3225078000 -14400 1 EDT} + {3245637600 -18000 0 EST} + {3256527600 -14400 1 EDT} + {3277087200 -18000 0 EST} + {3287977200 -14400 1 EDT} + {3308536800 -18000 0 EST} + {3319426800 -14400 1 EDT} + {3339986400 -18000 0 EST} + {3350876400 -14400 1 EDT} + {3371436000 -18000 0 EST} + {3382930800 -14400 1 EDT} + {3403490400 -18000 0 EST} + {3414380400 -14400 1 EDT} + {3434940000 -18000 0 EST} + {3445830000 -14400 1 EDT} + {3466389600 -18000 0 EST} + {3477279600 -14400 1 EDT} + {3497839200 -18000 0 EST} + {3508729200 -14400 1 EDT} + {3529288800 -18000 0 EST} + {3540178800 -14400 1 EDT} + {3560738400 -18000 0 EST} + {3572233200 -14400 1 EDT} + {3592792800 -18000 0 EST} + {3603682800 -14400 1 EDT} + {3624242400 -18000 0 EST} + {3635132400 -14400 1 EDT} + {3655692000 -18000 0 EST} + {3666582000 -14400 1 EDT} + {3687141600 -18000 0 EST} + {3698031600 -14400 1 EDT} + {3718591200 -18000 0 EST} + {3730086000 -14400 1 EDT} + {3750645600 -18000 0 EST} + {3761535600 -14400 1 EDT} + {3782095200 -18000 0 EST} + {3792985200 -14400 1 EDT} + {3813544800 -18000 0 EST} + {3824434800 -14400 1 EDT} + {3844994400 -18000 0 EST} + {3855884400 -14400 1 EDT} + {3876444000 -18000 0 EST} + {3887334000 -14400 1 EDT} + {3907893600 -18000 0 EST} + {3919388400 -14400 1 EDT} + {3939948000 -18000 0 EST} + {3950838000 -14400 1 EDT} + {3971397600 -18000 0 EST} + {3982287600 -14400 1 EDT} + {4002847200 -18000 0 EST} + {4013737200 -14400 1 EDT} + {4034296800 -18000 0 EST} + {4045186800 -14400 1 EDT} + {4065746400 -18000 0 EST} + {4076636400 -14400 1 EDT} + {4097196000 -18000 0 EST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Indiana/Tell_City b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Indiana/Tell_City new file mode 100644 index 00000000..9eebcf76 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Indiana/Tell_City @@ -0,0 +1,234 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Indiana/Tell_City) { + {-9223372036854775808 -20823 0 LMT} + {-2717647200 -21600 0 CST} + {-1633276800 -18000 1 CDT} + {-1615136400 -21600 0 CST} + {-1601827200 -18000 1 CDT} + {-1583686800 -21600 0 CST} + {-880214400 -18000 1 CWT} + {-769395600 -18000 1 CPT} + {-765392400 -21600 0 CST} + {-757360800 -21600 0 CST} + {-747244800 -18000 1 CDT} + {-733942800 -21600 0 CST} + {-526492800 -18000 1 CDT} + {-513190800 -21600 0 CST} + {-495043200 -18000 1 CDT} + {-481741200 -21600 0 CST} + {-462996000 -18000 1 CDT} + {-450291600 -21600 0 CST} + {-431539200 -18000 1 CDT} + {-418237200 -21600 0 CST} + {-400089600 -18000 1 CDT} + {-386787600 -21600 0 CST} + {-368640000 -18000 1 CDT} + {-355338000 -21600 0 CST} + {-337190400 -18000 1 CDT} + {-323888400 -21600 0 CST} + {-305740800 -18000 1 CDT} + {-289414800 -21600 0 CST} + {-273686400 -18000 1 CDT} + {-260989200 -21600 0 CST} + {-242236800 -18000 1 CDT} + {-226515600 -21600 0 CST} + {-210787200 -18000 1 CDT} + {-195066000 -21600 0 CST} + {-179337600 -18000 0 EST} + {-31518000 -18000 0 EST} + {-21488400 -14400 1 EDT} + {-5767200 -18000 0 EST} + {9961200 -14400 1 EDT} + {25682400 -18000 0 EST} + {31554000 -18000 0 EST} + {1143961200 -21600 0 CST} + {1143964800 -18000 1 CDT} + {1162105200 -21600 0 CST} + {1173600000 -18000 1 CDT} + {1194159600 -21600 0 CST} + {1205049600 -18000 1 CDT} + {1225609200 -21600 0 CST} + {1236499200 -18000 1 CDT} + {1257058800 -21600 0 CST} + {1268553600 -18000 1 CDT} + {1289113200 -21600 0 CST} + {1300003200 -18000 1 CDT} + {1320562800 -21600 0 CST} + {1331452800 -18000 1 CDT} + {1352012400 -21600 0 CST} + {1362902400 -18000 1 CDT} + {1383462000 -21600 0 CST} + {1394352000 -18000 1 CDT} + {1414911600 -21600 0 CST} + {1425801600 -18000 1 CDT} + {1446361200 -21600 0 CST} + {1457856000 -18000 1 CDT} + {1478415600 -21600 0 CST} + {1489305600 -18000 1 CDT} + {1509865200 -21600 0 CST} + {1520755200 -18000 1 CDT} + {1541314800 -21600 0 CST} + {1552204800 -18000 1 CDT} + {1572764400 -21600 0 CST} + {1583654400 -18000 1 CDT} + {1604214000 -21600 0 CST} + {1615708800 -18000 1 CDT} + {1636268400 -21600 0 CST} + {1647158400 -18000 1 CDT} + {1667718000 -21600 0 CST} + {1678608000 -18000 1 CDT} + {1699167600 -21600 0 CST} + {1710057600 -18000 1 CDT} + {1730617200 -21600 0 CST} + {1741507200 -18000 1 CDT} + {1762066800 -21600 0 CST} + {1772956800 -18000 1 CDT} + {1793516400 -21600 0 CST} + {1805011200 -18000 1 CDT} + {1825570800 -21600 0 CST} + {1836460800 -18000 1 CDT} + {1857020400 -21600 0 CST} + {1867910400 -18000 1 CDT} + {1888470000 -21600 0 CST} + {1899360000 -18000 1 CDT} + {1919919600 -21600 0 CST} + {1930809600 -18000 1 CDT} + {1951369200 -21600 0 CST} + {1962864000 -18000 1 CDT} + {1983423600 -21600 0 CST} + {1994313600 -18000 1 CDT} + {2014873200 -21600 0 CST} + {2025763200 -18000 1 CDT} + {2046322800 -21600 0 CST} + {2057212800 -18000 1 CDT} + {2077772400 -21600 0 CST} + {2088662400 -18000 1 CDT} + {2109222000 -21600 0 CST} + {2120112000 -18000 1 CDT} + {2140671600 -21600 0 CST} + {2152166400 -18000 1 CDT} + {2172726000 -21600 0 CST} + {2183616000 -18000 1 CDT} + {2204175600 -21600 0 CST} + {2215065600 -18000 1 CDT} + {2235625200 -21600 0 CST} + {2246515200 -18000 1 CDT} + {2267074800 -21600 0 CST} + {2277964800 -18000 1 CDT} + {2298524400 -21600 0 CST} + {2309414400 -18000 1 CDT} + {2329974000 -21600 0 CST} + {2341468800 -18000 1 CDT} + {2362028400 -21600 0 CST} + {2372918400 -18000 1 CDT} + {2393478000 -21600 0 CST} + {2404368000 -18000 1 CDT} + {2424927600 -21600 0 CST} + {2435817600 -18000 1 CDT} + {2456377200 -21600 0 CST} + {2467267200 -18000 1 CDT} + {2487826800 -21600 0 CST} + {2499321600 -18000 1 CDT} + {2519881200 -21600 0 CST} + {2530771200 -18000 1 CDT} + {2551330800 -21600 0 CST} + {2562220800 -18000 1 CDT} + {2582780400 -21600 0 CST} + {2593670400 -18000 1 CDT} + {2614230000 -21600 0 CST} + {2625120000 -18000 1 CDT} + {2645679600 -21600 0 CST} + {2656569600 -18000 1 CDT} + {2677129200 -21600 0 CST} + {2688624000 -18000 1 CDT} + {2709183600 -21600 0 CST} + {2720073600 -18000 1 CDT} + {2740633200 -21600 0 CST} + {2751523200 -18000 1 CDT} + {2772082800 -21600 0 CST} + {2782972800 -18000 1 CDT} + {2803532400 -21600 0 CST} + {2814422400 -18000 1 CDT} + {2834982000 -21600 0 CST} + {2846476800 -18000 1 CDT} + {2867036400 -21600 0 CST} + {2877926400 -18000 1 CDT} + {2898486000 -21600 0 CST} + {2909376000 -18000 1 CDT} + {2929935600 -21600 0 CST} + {2940825600 -18000 1 CDT} + {2961385200 -21600 0 CST} + {2972275200 -18000 1 CDT} + {2992834800 -21600 0 CST} + {3003724800 -18000 1 CDT} + {3024284400 -21600 0 CST} + {3035779200 -18000 1 CDT} + {3056338800 -21600 0 CST} + {3067228800 -18000 1 CDT} + {3087788400 -21600 0 CST} + {3098678400 -18000 1 CDT} + {3119238000 -21600 0 CST} + {3130128000 -18000 1 CDT} + {3150687600 -21600 0 CST} + {3161577600 -18000 1 CDT} + {3182137200 -21600 0 CST} + {3193027200 -18000 1 CDT} + {3213586800 -21600 0 CST} + {3225081600 -18000 1 CDT} + {3245641200 -21600 0 CST} + {3256531200 -18000 1 CDT} + {3277090800 -21600 0 CST} + {3287980800 -18000 1 CDT} + {3308540400 -21600 0 CST} + {3319430400 -18000 1 CDT} + {3339990000 -21600 0 CST} + {3350880000 -18000 1 CDT} + {3371439600 -21600 0 CST} + {3382934400 -18000 1 CDT} + {3403494000 -21600 0 CST} + {3414384000 -18000 1 CDT} + {3434943600 -21600 0 CST} + {3445833600 -18000 1 CDT} + {3466393200 -21600 0 CST} + {3477283200 -18000 1 CDT} + {3497842800 -21600 0 CST} + {3508732800 -18000 1 CDT} + {3529292400 -21600 0 CST} + {3540182400 -18000 1 CDT} + {3560742000 -21600 0 CST} + {3572236800 -18000 1 CDT} + {3592796400 -21600 0 CST} + {3603686400 -18000 1 CDT} + {3624246000 -21600 0 CST} + {3635136000 -18000 1 CDT} + {3655695600 -21600 0 CST} + {3666585600 -18000 1 CDT} + {3687145200 -21600 0 CST} + {3698035200 -18000 1 CDT} + {3718594800 -21600 0 CST} + {3730089600 -18000 1 CDT} + {3750649200 -21600 0 CST} + {3761539200 -18000 1 CDT} + {3782098800 -21600 0 CST} + {3792988800 -18000 1 CDT} + {3813548400 -21600 0 CST} + {3824438400 -18000 1 CDT} + {3844998000 -21600 0 CST} + {3855888000 -18000 1 CDT} + {3876447600 -21600 0 CST} + {3887337600 -18000 1 CDT} + {3907897200 -21600 0 CST} + {3919392000 -18000 1 CDT} + {3939951600 -21600 0 CST} + {3950841600 -18000 1 CDT} + {3971401200 -21600 0 CST} + {3982291200 -18000 1 CDT} + {4002850800 -21600 0 CST} + {4013740800 -18000 1 CDT} + {4034300400 -21600 0 CST} + {4045190400 -18000 1 CDT} + {4065750000 -21600 0 CST} + {4076640000 -18000 1 CDT} + {4097199600 -21600 0 CST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Indiana/Vevay b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Indiana/Vevay new file mode 100644 index 00000000..8d4157fb --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Indiana/Vevay @@ -0,0 +1,213 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Indiana/Vevay) { + {-9223372036854775808 -20416 0 LMT} + {-2717647200 -21600 0 CST} + {-1633276800 -18000 1 CDT} + {-1615136400 -21600 0 CST} + {-1601827200 -18000 1 CDT} + {-1583686800 -21600 0 CST} + {-880214400 -18000 1 CWT} + {-769395600 -18000 1 CPT} + {-765392400 -21600 0 CST} + {-495043200 -18000 0 EST} + {-31518000 -18000 0 EST} + {-21488400 -14400 1 EDT} + {-5767200 -18000 0 EST} + {9961200 -14400 1 EDT} + {25682400 -18000 0 EST} + {41410800 -14400 1 EDT} + {57736800 -18000 0 EST} + {73465200 -14400 1 EDT} + {89186400 -18000 0 EST} + {94712400 -18000 0 EST} + {1136091600 -18000 0 EST} + {1143961200 -14400 1 EDT} + {1162101600 -18000 0 EST} + {1173596400 -14400 1 EDT} + {1194156000 -18000 0 EST} + {1205046000 -14400 1 EDT} + {1225605600 -18000 0 EST} + {1236495600 -14400 1 EDT} + {1257055200 -18000 0 EST} + {1268550000 -14400 1 EDT} + {1289109600 -18000 0 EST} + {1299999600 -14400 1 EDT} + {1320559200 -18000 0 EST} + {1331449200 -14400 1 EDT} + {1352008800 -18000 0 EST} + {1362898800 -14400 1 EDT} + {1383458400 -18000 0 EST} + {1394348400 -14400 1 EDT} + {1414908000 -18000 0 EST} + {1425798000 -14400 1 EDT} + {1446357600 -18000 0 EST} + {1457852400 -14400 1 EDT} + {1478412000 -18000 0 EST} + {1489302000 -14400 1 EDT} + {1509861600 -18000 0 EST} + {1520751600 -14400 1 EDT} + {1541311200 -18000 0 EST} + {1552201200 -14400 1 EDT} + {1572760800 -18000 0 EST} + {1583650800 -14400 1 EDT} + {1604210400 -18000 0 EST} + {1615705200 -14400 1 EDT} + {1636264800 -18000 0 EST} + {1647154800 -14400 1 EDT} + {1667714400 -18000 0 EST} + {1678604400 -14400 1 EDT} + {1699164000 -18000 0 EST} + {1710054000 -14400 1 EDT} + {1730613600 -18000 0 EST} + {1741503600 -14400 1 EDT} + {1762063200 -18000 0 EST} + {1772953200 -14400 1 EDT} + {1793512800 -18000 0 EST} + {1805007600 -14400 1 EDT} + {1825567200 -18000 0 EST} + {1836457200 -14400 1 EDT} + {1857016800 -18000 0 EST} + {1867906800 -14400 1 EDT} + {1888466400 -18000 0 EST} + {1899356400 -14400 1 EDT} + {1919916000 -18000 0 EST} + {1930806000 -14400 1 EDT} + {1951365600 -18000 0 EST} + {1962860400 -14400 1 EDT} + {1983420000 -18000 0 EST} + {1994310000 -14400 1 EDT} + {2014869600 -18000 0 EST} + {2025759600 -14400 1 EDT} + {2046319200 -18000 0 EST} + {2057209200 -14400 1 EDT} + {2077768800 -18000 0 EST} + {2088658800 -14400 1 EDT} + {2109218400 -18000 0 EST} + {2120108400 -14400 1 EDT} + {2140668000 -18000 0 EST} + {2152162800 -14400 1 EDT} + {2172722400 -18000 0 EST} + {2183612400 -14400 1 EDT} + {2204172000 -18000 0 EST} + {2215062000 -14400 1 EDT} + {2235621600 -18000 0 EST} + {2246511600 -14400 1 EDT} + {2267071200 -18000 0 EST} + {2277961200 -14400 1 EDT} + {2298520800 -18000 0 EST} + {2309410800 -14400 1 EDT} + {2329970400 -18000 0 EST} + {2341465200 -14400 1 EDT} + {2362024800 -18000 0 EST} + {2372914800 -14400 1 EDT} + {2393474400 -18000 0 EST} + {2404364400 -14400 1 EDT} + {2424924000 -18000 0 EST} + {2435814000 -14400 1 EDT} + {2456373600 -18000 0 EST} + {2467263600 -14400 1 EDT} + {2487823200 -18000 0 EST} + {2499318000 -14400 1 EDT} + {2519877600 -18000 0 EST} + {2530767600 -14400 1 EDT} + {2551327200 -18000 0 EST} + {2562217200 -14400 1 EDT} + {2582776800 -18000 0 EST} + {2593666800 -14400 1 EDT} + {2614226400 -18000 0 EST} + {2625116400 -14400 1 EDT} + {2645676000 -18000 0 EST} + {2656566000 -14400 1 EDT} + {2677125600 -18000 0 EST} + {2688620400 -14400 1 EDT} + {2709180000 -18000 0 EST} + {2720070000 -14400 1 EDT} + {2740629600 -18000 0 EST} + {2751519600 -14400 1 EDT} + {2772079200 -18000 0 EST} + {2782969200 -14400 1 EDT} + {2803528800 -18000 0 EST} + {2814418800 -14400 1 EDT} + {2834978400 -18000 0 EST} + {2846473200 -14400 1 EDT} + {2867032800 -18000 0 EST} + {2877922800 -14400 1 EDT} + {2898482400 -18000 0 EST} + {2909372400 -14400 1 EDT} + {2929932000 -18000 0 EST} + {2940822000 -14400 1 EDT} + {2961381600 -18000 0 EST} + {2972271600 -14400 1 EDT} + {2992831200 -18000 0 EST} + {3003721200 -14400 1 EDT} + {3024280800 -18000 0 EST} + {3035775600 -14400 1 EDT} + {3056335200 -18000 0 EST} + {3067225200 -14400 1 EDT} + {3087784800 -18000 0 EST} + {3098674800 -14400 1 EDT} + {3119234400 -18000 0 EST} + {3130124400 -14400 1 EDT} + {3150684000 -18000 0 EST} + {3161574000 -14400 1 EDT} + {3182133600 -18000 0 EST} + {3193023600 -14400 1 EDT} + {3213583200 -18000 0 EST} + {3225078000 -14400 1 EDT} + {3245637600 -18000 0 EST} + {3256527600 -14400 1 EDT} + {3277087200 -18000 0 EST} + {3287977200 -14400 1 EDT} + {3308536800 -18000 0 EST} + {3319426800 -14400 1 EDT} + {3339986400 -18000 0 EST} + {3350876400 -14400 1 EDT} + {3371436000 -18000 0 EST} + {3382930800 -14400 1 EDT} + {3403490400 -18000 0 EST} + {3414380400 -14400 1 EDT} + {3434940000 -18000 0 EST} + {3445830000 -14400 1 EDT} + {3466389600 -18000 0 EST} + {3477279600 -14400 1 EDT} + {3497839200 -18000 0 EST} + {3508729200 -14400 1 EDT} + {3529288800 -18000 0 EST} + {3540178800 -14400 1 EDT} + {3560738400 -18000 0 EST} + {3572233200 -14400 1 EDT} + {3592792800 -18000 0 EST} + {3603682800 -14400 1 EDT} + {3624242400 -18000 0 EST} + {3635132400 -14400 1 EDT} + {3655692000 -18000 0 EST} + {3666582000 -14400 1 EDT} + {3687141600 -18000 0 EST} + {3698031600 -14400 1 EDT} + {3718591200 -18000 0 EST} + {3730086000 -14400 1 EDT} + {3750645600 -18000 0 EST} + {3761535600 -14400 1 EDT} + {3782095200 -18000 0 EST} + {3792985200 -14400 1 EDT} + {3813544800 -18000 0 EST} + {3824434800 -14400 1 EDT} + {3844994400 -18000 0 EST} + {3855884400 -14400 1 EDT} + {3876444000 -18000 0 EST} + {3887334000 -14400 1 EDT} + {3907893600 -18000 0 EST} + {3919388400 -14400 1 EDT} + {3939948000 -18000 0 EST} + {3950838000 -14400 1 EDT} + {3971397600 -18000 0 EST} + {3982287600 -14400 1 EDT} + {4002847200 -18000 0 EST} + {4013737200 -14400 1 EDT} + {4034296800 -18000 0 EST} + {4045186800 -14400 1 EDT} + {4065746400 -18000 0 EST} + {4076636400 -14400 1 EDT} + {4097196000 -18000 0 EST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Indiana/Vincennes b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Indiana/Vincennes new file mode 100644 index 00000000..1af7fc92 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Indiana/Vincennes @@ -0,0 +1,234 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Indiana/Vincennes) { + {-9223372036854775808 -21007 0 LMT} + {-2717647200 -21600 0 CST} + {-1633276800 -18000 1 CDT} + {-1615136400 -21600 0 CST} + {-1601827200 -18000 1 CDT} + {-1583686800 -21600 0 CST} + {-880214400 -18000 1 CWT} + {-769395600 -18000 1 CPT} + {-765392400 -21600 0 CST} + {-757360800 -21600 0 CST} + {-747244800 -18000 1 CDT} + {-733942800 -21600 0 CST} + {-526492800 -18000 1 CDT} + {-513190800 -21600 0 CST} + {-495043200 -18000 1 CDT} + {-481741200 -21600 0 CST} + {-462996000 -18000 1 CDT} + {-450291600 -21600 0 CST} + {-431539200 -18000 1 CDT} + {-418237200 -21600 0 CST} + {-400089600 -18000 1 CDT} + {-386787600 -21600 0 CST} + {-368640000 -18000 1 CDT} + {-355338000 -21600 0 CST} + {-337190400 -18000 1 CDT} + {-323888400 -21600 0 CST} + {-305740800 -18000 1 CDT} + {-289414800 -21600 0 CST} + {-273686400 -18000 1 CDT} + {-260989200 -21600 0 CST} + {-242236800 -18000 1 CDT} + {-226515600 -21600 0 CST} + {-210787200 -18000 1 CDT} + {-195066000 -21600 0 CST} + {-179337600 -18000 0 EST} + {-31518000 -18000 0 EST} + {-21488400 -14400 1 EDT} + {-5767200 -18000 0 EST} + {9961200 -14400 1 EDT} + {25682400 -18000 0 EST} + {31554000 -18000 0 EST} + {1143961200 -21600 0 CST} + {1143964800 -18000 1 CDT} + {1162105200 -21600 0 CST} + {1173600000 -18000 1 CDT} + {1194163200 -18000 0 EST} + {1205046000 -14400 1 EDT} + {1225605600 -18000 0 EST} + {1236495600 -14400 1 EDT} + {1257055200 -18000 0 EST} + {1268550000 -14400 1 EDT} + {1289109600 -18000 0 EST} + {1299999600 -14400 1 EDT} + {1320559200 -18000 0 EST} + {1331449200 -14400 1 EDT} + {1352008800 -18000 0 EST} + {1362898800 -14400 1 EDT} + {1383458400 -18000 0 EST} + {1394348400 -14400 1 EDT} + {1414908000 -18000 0 EST} + {1425798000 -14400 1 EDT} + {1446357600 -18000 0 EST} + {1457852400 -14400 1 EDT} + {1478412000 -18000 0 EST} + {1489302000 -14400 1 EDT} + {1509861600 -18000 0 EST} + {1520751600 -14400 1 EDT} + {1541311200 -18000 0 EST} + {1552201200 -14400 1 EDT} + {1572760800 -18000 0 EST} + {1583650800 -14400 1 EDT} + {1604210400 -18000 0 EST} + {1615705200 -14400 1 EDT} + {1636264800 -18000 0 EST} + {1647154800 -14400 1 EDT} + {1667714400 -18000 0 EST} + {1678604400 -14400 1 EDT} + {1699164000 -18000 0 EST} + {1710054000 -14400 1 EDT} + {1730613600 -18000 0 EST} + {1741503600 -14400 1 EDT} + {1762063200 -18000 0 EST} + {1772953200 -14400 1 EDT} + {1793512800 -18000 0 EST} + {1805007600 -14400 1 EDT} + {1825567200 -18000 0 EST} + {1836457200 -14400 1 EDT} + {1857016800 -18000 0 EST} + {1867906800 -14400 1 EDT} + {1888466400 -18000 0 EST} + {1899356400 -14400 1 EDT} + {1919916000 -18000 0 EST} + {1930806000 -14400 1 EDT} + {1951365600 -18000 0 EST} + {1962860400 -14400 1 EDT} + {1983420000 -18000 0 EST} + {1994310000 -14400 1 EDT} + {2014869600 -18000 0 EST} + {2025759600 -14400 1 EDT} + {2046319200 -18000 0 EST} + {2057209200 -14400 1 EDT} + {2077768800 -18000 0 EST} + {2088658800 -14400 1 EDT} + {2109218400 -18000 0 EST} + {2120108400 -14400 1 EDT} + {2140668000 -18000 0 EST} + {2152162800 -14400 1 EDT} + {2172722400 -18000 0 EST} + {2183612400 -14400 1 EDT} + {2204172000 -18000 0 EST} + {2215062000 -14400 1 EDT} + {2235621600 -18000 0 EST} + {2246511600 -14400 1 EDT} + {2267071200 -18000 0 EST} + {2277961200 -14400 1 EDT} + {2298520800 -18000 0 EST} + {2309410800 -14400 1 EDT} + {2329970400 -18000 0 EST} + {2341465200 -14400 1 EDT} + {2362024800 -18000 0 EST} + {2372914800 -14400 1 EDT} + {2393474400 -18000 0 EST} + {2404364400 -14400 1 EDT} + {2424924000 -18000 0 EST} + {2435814000 -14400 1 EDT} + {2456373600 -18000 0 EST} + {2467263600 -14400 1 EDT} + {2487823200 -18000 0 EST} + {2499318000 -14400 1 EDT} + {2519877600 -18000 0 EST} + {2530767600 -14400 1 EDT} + {2551327200 -18000 0 EST} + {2562217200 -14400 1 EDT} + {2582776800 -18000 0 EST} + {2593666800 -14400 1 EDT} + {2614226400 -18000 0 EST} + {2625116400 -14400 1 EDT} + {2645676000 -18000 0 EST} + {2656566000 -14400 1 EDT} + {2677125600 -18000 0 EST} + {2688620400 -14400 1 EDT} + {2709180000 -18000 0 EST} + {2720070000 -14400 1 EDT} + {2740629600 -18000 0 EST} + {2751519600 -14400 1 EDT} + {2772079200 -18000 0 EST} + {2782969200 -14400 1 EDT} + {2803528800 -18000 0 EST} + {2814418800 -14400 1 EDT} + {2834978400 -18000 0 EST} + {2846473200 -14400 1 EDT} + {2867032800 -18000 0 EST} + {2877922800 -14400 1 EDT} + {2898482400 -18000 0 EST} + {2909372400 -14400 1 EDT} + {2929932000 -18000 0 EST} + {2940822000 -14400 1 EDT} + {2961381600 -18000 0 EST} + {2972271600 -14400 1 EDT} + {2992831200 -18000 0 EST} + {3003721200 -14400 1 EDT} + {3024280800 -18000 0 EST} + {3035775600 -14400 1 EDT} + {3056335200 -18000 0 EST} + {3067225200 -14400 1 EDT} + {3087784800 -18000 0 EST} + {3098674800 -14400 1 EDT} + {3119234400 -18000 0 EST} + {3130124400 -14400 1 EDT} + {3150684000 -18000 0 EST} + {3161574000 -14400 1 EDT} + {3182133600 -18000 0 EST} + {3193023600 -14400 1 EDT} + {3213583200 -18000 0 EST} + {3225078000 -14400 1 EDT} + {3245637600 -18000 0 EST} + {3256527600 -14400 1 EDT} + {3277087200 -18000 0 EST} + {3287977200 -14400 1 EDT} + {3308536800 -18000 0 EST} + {3319426800 -14400 1 EDT} + {3339986400 -18000 0 EST} + {3350876400 -14400 1 EDT} + {3371436000 -18000 0 EST} + {3382930800 -14400 1 EDT} + {3403490400 -18000 0 EST} + {3414380400 -14400 1 EDT} + {3434940000 -18000 0 EST} + {3445830000 -14400 1 EDT} + {3466389600 -18000 0 EST} + {3477279600 -14400 1 EDT} + {3497839200 -18000 0 EST} + {3508729200 -14400 1 EDT} + {3529288800 -18000 0 EST} + {3540178800 -14400 1 EDT} + {3560738400 -18000 0 EST} + {3572233200 -14400 1 EDT} + {3592792800 -18000 0 EST} + {3603682800 -14400 1 EDT} + {3624242400 -18000 0 EST} + {3635132400 -14400 1 EDT} + {3655692000 -18000 0 EST} + {3666582000 -14400 1 EDT} + {3687141600 -18000 0 EST} + {3698031600 -14400 1 EDT} + {3718591200 -18000 0 EST} + {3730086000 -14400 1 EDT} + {3750645600 -18000 0 EST} + {3761535600 -14400 1 EDT} + {3782095200 -18000 0 EST} + {3792985200 -14400 1 EDT} + {3813544800 -18000 0 EST} + {3824434800 -14400 1 EDT} + {3844994400 -18000 0 EST} + {3855884400 -14400 1 EDT} + {3876444000 -18000 0 EST} + {3887334000 -14400 1 EDT} + {3907893600 -18000 0 EST} + {3919388400 -14400 1 EDT} + {3939948000 -18000 0 EST} + {3950838000 -14400 1 EDT} + {3971397600 -18000 0 EST} + {3982287600 -14400 1 EDT} + {4002847200 -18000 0 EST} + {4013737200 -14400 1 EDT} + {4034296800 -18000 0 EST} + {4045186800 -14400 1 EDT} + {4065746400 -18000 0 EST} + {4076636400 -14400 1 EDT} + {4097196000 -18000 0 EST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Indiana/Winamac b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Indiana/Winamac new file mode 100644 index 00000000..fb6cd37a --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Indiana/Winamac @@ -0,0 +1,240 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Indiana/Winamac) { + {-9223372036854775808 -20785 0 LMT} + {-2717647200 -21600 0 CST} + {-1633276800 -18000 1 CDT} + {-1615136400 -21600 0 CST} + {-1601827200 -18000 1 CDT} + {-1583686800 -21600 0 CST} + {-880214400 -18000 1 CWT} + {-769395600 -18000 1 CPT} + {-765392400 -21600 0 CST} + {-757360800 -21600 0 CST} + {-747244800 -18000 1 CDT} + {-733942800 -21600 0 CST} + {-715795200 -18000 1 CDT} + {-702493200 -21600 0 CST} + {-684345600 -18000 1 CDT} + {-671043600 -21600 0 CST} + {-652896000 -18000 1 CDT} + {-639594000 -21600 0 CST} + {-620841600 -18000 1 CDT} + {-608144400 -21600 0 CST} + {-589392000 -18000 1 CDT} + {-576090000 -21600 0 CST} + {-557942400 -18000 1 CDT} + {-544640400 -21600 0 CST} + {-526492800 -18000 1 CDT} + {-513190800 -21600 0 CST} + {-495043200 -18000 1 CDT} + {-481741200 -21600 0 CST} + {-463593600 -18000 1 CDT} + {-447267600 -21600 0 CST} + {-431539200 -18000 1 CDT} + {-415818000 -21600 0 CST} + {-400089600 -18000 1 CDT} + {-386787600 -21600 0 CST} + {-368640000 -18000 1 CDT} + {-355338000 -21600 0 CST} + {-337190400 -18000 1 CDT} + {-323888400 -21600 0 CST} + {-305740800 -18000 1 CDT} + {-292438800 -21600 0 CST} + {-273686400 -18000 0 EST} + {-31518000 -18000 0 EST} + {-21488400 -14400 1 EDT} + {-5767200 -18000 0 EST} + {9961200 -14400 1 EDT} + {25682400 -18000 0 EST} + {31554000 -18000 0 EST} + {1143961200 -21600 0 CST} + {1143964800 -18000 1 CDT} + {1162105200 -21600 0 CST} + {1173600000 -14400 0 EDT} + {1194156000 -18000 0 EST} + {1205046000 -14400 1 EDT} + {1225605600 -18000 0 EST} + {1236495600 -14400 1 EDT} + {1257055200 -18000 0 EST} + {1268550000 -14400 1 EDT} + {1289109600 -18000 0 EST} + {1299999600 -14400 1 EDT} + {1320559200 -18000 0 EST} + {1331449200 -14400 1 EDT} + {1352008800 -18000 0 EST} + {1362898800 -14400 1 EDT} + {1383458400 -18000 0 EST} + {1394348400 -14400 1 EDT} + {1414908000 -18000 0 EST} + {1425798000 -14400 1 EDT} + {1446357600 -18000 0 EST} + {1457852400 -14400 1 EDT} + {1478412000 -18000 0 EST} + {1489302000 -14400 1 EDT} + {1509861600 -18000 0 EST} + {1520751600 -14400 1 EDT} + {1541311200 -18000 0 EST} + {1552201200 -14400 1 EDT} + {1572760800 -18000 0 EST} + {1583650800 -14400 1 EDT} + {1604210400 -18000 0 EST} + {1615705200 -14400 1 EDT} + {1636264800 -18000 0 EST} + {1647154800 -14400 1 EDT} + {1667714400 -18000 0 EST} + {1678604400 -14400 1 EDT} + {1699164000 -18000 0 EST} + {1710054000 -14400 1 EDT} + {1730613600 -18000 0 EST} + {1741503600 -14400 1 EDT} + {1762063200 -18000 0 EST} + {1772953200 -14400 1 EDT} + {1793512800 -18000 0 EST} + {1805007600 -14400 1 EDT} + {1825567200 -18000 0 EST} + {1836457200 -14400 1 EDT} + {1857016800 -18000 0 EST} + {1867906800 -14400 1 EDT} + {1888466400 -18000 0 EST} + {1899356400 -14400 1 EDT} + {1919916000 -18000 0 EST} + {1930806000 -14400 1 EDT} + {1951365600 -18000 0 EST} + {1962860400 -14400 1 EDT} + {1983420000 -18000 0 EST} + {1994310000 -14400 1 EDT} + {2014869600 -18000 0 EST} + {2025759600 -14400 1 EDT} + {2046319200 -18000 0 EST} + {2057209200 -14400 1 EDT} + {2077768800 -18000 0 EST} + {2088658800 -14400 1 EDT} + {2109218400 -18000 0 EST} + {2120108400 -14400 1 EDT} + {2140668000 -18000 0 EST} + {2152162800 -14400 1 EDT} + {2172722400 -18000 0 EST} + {2183612400 -14400 1 EDT} + {2204172000 -18000 0 EST} + {2215062000 -14400 1 EDT} + {2235621600 -18000 0 EST} + {2246511600 -14400 1 EDT} + {2267071200 -18000 0 EST} + {2277961200 -14400 1 EDT} + {2298520800 -18000 0 EST} + {2309410800 -14400 1 EDT} + {2329970400 -18000 0 EST} + {2341465200 -14400 1 EDT} + {2362024800 -18000 0 EST} + {2372914800 -14400 1 EDT} + {2393474400 -18000 0 EST} + {2404364400 -14400 1 EDT} + {2424924000 -18000 0 EST} + {2435814000 -14400 1 EDT} + {2456373600 -18000 0 EST} + {2467263600 -14400 1 EDT} + {2487823200 -18000 0 EST} + {2499318000 -14400 1 EDT} + {2519877600 -18000 0 EST} + {2530767600 -14400 1 EDT} + {2551327200 -18000 0 EST} + {2562217200 -14400 1 EDT} + {2582776800 -18000 0 EST} + {2593666800 -14400 1 EDT} + {2614226400 -18000 0 EST} + {2625116400 -14400 1 EDT} + {2645676000 -18000 0 EST} + {2656566000 -14400 1 EDT} + {2677125600 -18000 0 EST} + {2688620400 -14400 1 EDT} + {2709180000 -18000 0 EST} + {2720070000 -14400 1 EDT} + {2740629600 -18000 0 EST} + {2751519600 -14400 1 EDT} + {2772079200 -18000 0 EST} + {2782969200 -14400 1 EDT} + {2803528800 -18000 0 EST} + {2814418800 -14400 1 EDT} + {2834978400 -18000 0 EST} + {2846473200 -14400 1 EDT} + {2867032800 -18000 0 EST} + {2877922800 -14400 1 EDT} + {2898482400 -18000 0 EST} + {2909372400 -14400 1 EDT} + {2929932000 -18000 0 EST} + {2940822000 -14400 1 EDT} + {2961381600 -18000 0 EST} + {2972271600 -14400 1 EDT} + {2992831200 -18000 0 EST} + {3003721200 -14400 1 EDT} + {3024280800 -18000 0 EST} + {3035775600 -14400 1 EDT} + {3056335200 -18000 0 EST} + {3067225200 -14400 1 EDT} + {3087784800 -18000 0 EST} + {3098674800 -14400 1 EDT} + {3119234400 -18000 0 EST} + {3130124400 -14400 1 EDT} + {3150684000 -18000 0 EST} + {3161574000 -14400 1 EDT} + {3182133600 -18000 0 EST} + {3193023600 -14400 1 EDT} + {3213583200 -18000 0 EST} + {3225078000 -14400 1 EDT} + {3245637600 -18000 0 EST} + {3256527600 -14400 1 EDT} + {3277087200 -18000 0 EST} + {3287977200 -14400 1 EDT} + {3308536800 -18000 0 EST} + {3319426800 -14400 1 EDT} + {3339986400 -18000 0 EST} + {3350876400 -14400 1 EDT} + {3371436000 -18000 0 EST} + {3382930800 -14400 1 EDT} + {3403490400 -18000 0 EST} + {3414380400 -14400 1 EDT} + {3434940000 -18000 0 EST} + {3445830000 -14400 1 EDT} + {3466389600 -18000 0 EST} + {3477279600 -14400 1 EDT} + {3497839200 -18000 0 EST} + {3508729200 -14400 1 EDT} + {3529288800 -18000 0 EST} + {3540178800 -14400 1 EDT} + {3560738400 -18000 0 EST} + {3572233200 -14400 1 EDT} + {3592792800 -18000 0 EST} + {3603682800 -14400 1 EDT} + {3624242400 -18000 0 EST} + {3635132400 -14400 1 EDT} + {3655692000 -18000 0 EST} + {3666582000 -14400 1 EDT} + {3687141600 -18000 0 EST} + {3698031600 -14400 1 EDT} + {3718591200 -18000 0 EST} + {3730086000 -14400 1 EDT} + {3750645600 -18000 0 EST} + {3761535600 -14400 1 EDT} + {3782095200 -18000 0 EST} + {3792985200 -14400 1 EDT} + {3813544800 -18000 0 EST} + {3824434800 -14400 1 EDT} + {3844994400 -18000 0 EST} + {3855884400 -14400 1 EDT} + {3876444000 -18000 0 EST} + {3887334000 -14400 1 EDT} + {3907893600 -18000 0 EST} + {3919388400 -14400 1 EDT} + {3939948000 -18000 0 EST} + {3950838000 -14400 1 EDT} + {3971397600 -18000 0 EST} + {3982287600 -14400 1 EDT} + {4002847200 -18000 0 EST} + {4013737200 -14400 1 EDT} + {4034296800 -18000 0 EST} + {4045186800 -14400 1 EDT} + {4065746400 -18000 0 EST} + {4076636400 -14400 1 EDT} + {4097196000 -18000 0 EST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Indianapolis b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Indianapolis new file mode 100644 index 00000000..73985454 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Indianapolis @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Indiana/Indianapolis)]} { + LoadTimeZoneFile America/Indiana/Indianapolis +} +set TZData(:America/Indianapolis) $TZData(:America/Indiana/Indianapolis) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Inuvik b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Inuvik new file mode 100644 index 00000000..dd0d151b --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Inuvik @@ -0,0 +1,249 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Inuvik) { + {-9223372036854775808 0 0 zzz} + {-536457600 -28800 0 PST} + {-147888000 -21600 1 PDDT} + {-131558400 -28800 0 PST} + {315558000 -25200 0 MST} + {325674000 -21600 1 MDT} + {341395200 -25200 0 MST} + {357123600 -21600 1 MDT} + {372844800 -25200 0 MST} + {388573200 -21600 1 MDT} + {404899200 -25200 0 MST} + {420022800 -21600 1 MDT} + {436348800 -25200 0 MST} + {452077200 -21600 1 MDT} + {467798400 -25200 0 MST} + {483526800 -21600 1 MDT} + {499248000 -25200 0 MST} + {514976400 -21600 1 MDT} + {530697600 -25200 0 MST} + {544611600 -21600 1 MDT} + {562147200 -25200 0 MST} + {576061200 -21600 1 MDT} + {594201600 -25200 0 MST} + {607510800 -21600 1 MDT} + {625651200 -25200 0 MST} + {638960400 -21600 1 MDT} + {657100800 -25200 0 MST} + {671014800 -21600 1 MDT} + {688550400 -25200 0 MST} + {702464400 -21600 1 MDT} + {720000000 -25200 0 MST} + {733914000 -21600 1 MDT} + {752054400 -25200 0 MST} + {765363600 -21600 1 MDT} + {783504000 -25200 0 MST} + {796813200 -21600 1 MDT} + {814953600 -25200 0 MST} + {828867600 -21600 1 MDT} + {846403200 -25200 0 MST} + {860317200 -21600 1 MDT} + {877852800 -25200 0 MST} + {891766800 -21600 1 MDT} + {909302400 -25200 0 MST} + {923216400 -21600 1 MDT} + {941356800 -25200 0 MST} + {954666000 -21600 1 MDT} + {972806400 -25200 0 MST} + {986115600 -21600 1 MDT} + {1004256000 -25200 0 MST} + {1018170000 -21600 1 MDT} + {1035705600 -25200 0 MST} + {1049619600 -21600 1 MDT} + {1067155200 -25200 0 MST} + {1081069200 -21600 1 MDT} + {1099209600 -25200 0 MST} + {1112518800 -21600 1 MDT} + {1130659200 -25200 0 MST} + {1143968400 -21600 1 MDT} + {1162108800 -25200 0 MST} + {1173603600 -21600 1 MDT} + {1194163200 -25200 0 MST} + {1205053200 -21600 1 MDT} + {1225612800 -25200 0 MST} + {1236502800 -21600 1 MDT} + {1257062400 -25200 0 MST} + {1268557200 -21600 1 MDT} + {1289116800 -25200 0 MST} + {1300006800 -21600 1 MDT} + {1320566400 -25200 0 MST} + {1331456400 -21600 1 MDT} + {1352016000 -25200 0 MST} + {1362906000 -21600 1 MDT} + {1383465600 -25200 0 MST} + {1394355600 -21600 1 MDT} + {1414915200 -25200 0 MST} + {1425805200 -21600 1 MDT} + {1446364800 -25200 0 MST} + {1457859600 -21600 1 MDT} + {1478419200 -25200 0 MST} + {1489309200 -21600 1 MDT} + {1509868800 -25200 0 MST} + {1520758800 -21600 1 MDT} + {1541318400 -25200 0 MST} + {1552208400 -21600 1 MDT} + {1572768000 -25200 0 MST} + {1583658000 -21600 1 MDT} + {1604217600 -25200 0 MST} + {1615712400 -21600 1 MDT} + {1636272000 -25200 0 MST} + {1647162000 -21600 1 MDT} + {1667721600 -25200 0 MST} + {1678611600 -21600 1 MDT} + {1699171200 -25200 0 MST} + {1710061200 -21600 1 MDT} + {1730620800 -25200 0 MST} + {1741510800 -21600 1 MDT} + {1762070400 -25200 0 MST} + {1772960400 -21600 1 MDT} + {1793520000 -25200 0 MST} + {1805014800 -21600 1 MDT} + {1825574400 -25200 0 MST} + {1836464400 -21600 1 MDT} + {1857024000 -25200 0 MST} + {1867914000 -21600 1 MDT} + {1888473600 -25200 0 MST} + {1899363600 -21600 1 MDT} + {1919923200 -25200 0 MST} + {1930813200 -21600 1 MDT} + {1951372800 -25200 0 MST} + {1962867600 -21600 1 MDT} + {1983427200 -25200 0 MST} + {1994317200 -21600 1 MDT} + {2014876800 -25200 0 MST} + {2025766800 -21600 1 MDT} + {2046326400 -25200 0 MST} + {2057216400 -21600 1 MDT} + {2077776000 -25200 0 MST} + {2088666000 -21600 1 MDT} + {2109225600 -25200 0 MST} + {2120115600 -21600 1 MDT} + {2140675200 -25200 0 MST} + {2152170000 -21600 1 MDT} + {2172729600 -25200 0 MST} + {2183619600 -21600 1 MDT} + {2204179200 -25200 0 MST} + {2215069200 -21600 1 MDT} + {2235628800 -25200 0 MST} + {2246518800 -21600 1 MDT} + {2267078400 -25200 0 MST} + {2277968400 -21600 1 MDT} + {2298528000 -25200 0 MST} + {2309418000 -21600 1 MDT} + {2329977600 -25200 0 MST} + {2341472400 -21600 1 MDT} + {2362032000 -25200 0 MST} + {2372922000 -21600 1 MDT} + {2393481600 -25200 0 MST} + {2404371600 -21600 1 MDT} + {2424931200 -25200 0 MST} + {2435821200 -21600 1 MDT} + {2456380800 -25200 0 MST} + {2467270800 -21600 1 MDT} + {2487830400 -25200 0 MST} + {2499325200 -21600 1 MDT} + {2519884800 -25200 0 MST} + {2530774800 -21600 1 MDT} + {2551334400 -25200 0 MST} + {2562224400 -21600 1 MDT} + {2582784000 -25200 0 MST} + {2593674000 -21600 1 MDT} + {2614233600 -25200 0 MST} + {2625123600 -21600 1 MDT} + {2645683200 -25200 0 MST} + {2656573200 -21600 1 MDT} + {2677132800 -25200 0 MST} + {2688627600 -21600 1 MDT} + {2709187200 -25200 0 MST} + {2720077200 -21600 1 MDT} + {2740636800 -25200 0 MST} + {2751526800 -21600 1 MDT} + {2772086400 -25200 0 MST} + {2782976400 -21600 1 MDT} + {2803536000 -25200 0 MST} + {2814426000 -21600 1 MDT} + {2834985600 -25200 0 MST} + {2846480400 -21600 1 MDT} + {2867040000 -25200 0 MST} + {2877930000 -21600 1 MDT} + {2898489600 -25200 0 MST} + {2909379600 -21600 1 MDT} + {2929939200 -25200 0 MST} + {2940829200 -21600 1 MDT} + {2961388800 -25200 0 MST} + {2972278800 -21600 1 MDT} + {2992838400 -25200 0 MST} + {3003728400 -21600 1 MDT} + {3024288000 -25200 0 MST} + {3035782800 -21600 1 MDT} + {3056342400 -25200 0 MST} + {3067232400 -21600 1 MDT} + {3087792000 -25200 0 MST} + {3098682000 -21600 1 MDT} + {3119241600 -25200 0 MST} + {3130131600 -21600 1 MDT} + {3150691200 -25200 0 MST} + {3161581200 -21600 1 MDT} + {3182140800 -25200 0 MST} + {3193030800 -21600 1 MDT} + {3213590400 -25200 0 MST} + {3225085200 -21600 1 MDT} + {3245644800 -25200 0 MST} + {3256534800 -21600 1 MDT} + {3277094400 -25200 0 MST} + {3287984400 -21600 1 MDT} + {3308544000 -25200 0 MST} + {3319434000 -21600 1 MDT} + {3339993600 -25200 0 MST} + {3350883600 -21600 1 MDT} + {3371443200 -25200 0 MST} + {3382938000 -21600 1 MDT} + {3403497600 -25200 0 MST} + {3414387600 -21600 1 MDT} + {3434947200 -25200 0 MST} + {3445837200 -21600 1 MDT} + {3466396800 -25200 0 MST} + {3477286800 -21600 1 MDT} + {3497846400 -25200 0 MST} + {3508736400 -21600 1 MDT} + {3529296000 -25200 0 MST} + {3540186000 -21600 1 MDT} + {3560745600 -25200 0 MST} + {3572240400 -21600 1 MDT} + {3592800000 -25200 0 MST} + {3603690000 -21600 1 MDT} + {3624249600 -25200 0 MST} + {3635139600 -21600 1 MDT} + {3655699200 -25200 0 MST} + {3666589200 -21600 1 MDT} + {3687148800 -25200 0 MST} + {3698038800 -21600 1 MDT} + {3718598400 -25200 0 MST} + {3730093200 -21600 1 MDT} + {3750652800 -25200 0 MST} + {3761542800 -21600 1 MDT} + {3782102400 -25200 0 MST} + {3792992400 -21600 1 MDT} + {3813552000 -25200 0 MST} + {3824442000 -21600 1 MDT} + {3845001600 -25200 0 MST} + {3855891600 -21600 1 MDT} + {3876451200 -25200 0 MST} + {3887341200 -21600 1 MDT} + {3907900800 -25200 0 MST} + {3919395600 -21600 1 MDT} + {3939955200 -25200 0 MST} + {3950845200 -21600 1 MDT} + {3971404800 -25200 0 MST} + {3982294800 -21600 1 MDT} + {4002854400 -25200 0 MST} + {4013744400 -21600 1 MDT} + {4034304000 -25200 0 MST} + {4045194000 -21600 1 MDT} + {4065753600 -25200 0 MST} + {4076643600 -21600 1 MDT} + {4097203200 -25200 0 MST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Iqaluit b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Iqaluit new file mode 100644 index 00000000..2a2e9fee --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Iqaluit @@ -0,0 +1,250 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Iqaluit) { + {-9223372036854775808 0 0 zzz} + {-865296000 -14400 0 EWT} + {-769395600 -14400 1 EPT} + {-765396000 -18000 0 EST} + {-147898800 -10800 1 EDDT} + {-131569200 -18000 0 EST} + {325666800 -14400 1 EDT} + {341388000 -18000 0 EST} + {357116400 -14400 1 EDT} + {372837600 -18000 0 EST} + {388566000 -14400 1 EDT} + {404892000 -18000 0 EST} + {420015600 -14400 1 EDT} + {436341600 -18000 0 EST} + {452070000 -14400 1 EDT} + {467791200 -18000 0 EST} + {483519600 -14400 1 EDT} + {499240800 -18000 0 EST} + {514969200 -14400 1 EDT} + {530690400 -18000 0 EST} + {544604400 -14400 1 EDT} + {562140000 -18000 0 EST} + {576054000 -14400 1 EDT} + {594194400 -18000 0 EST} + {607503600 -14400 1 EDT} + {625644000 -18000 0 EST} + {638953200 -14400 1 EDT} + {657093600 -18000 0 EST} + {671007600 -14400 1 EDT} + {688543200 -18000 0 EST} + {702457200 -14400 1 EDT} + {719992800 -18000 0 EST} + {733906800 -14400 1 EDT} + {752047200 -18000 0 EST} + {765356400 -14400 1 EDT} + {783496800 -18000 0 EST} + {796806000 -14400 1 EDT} + {814946400 -18000 0 EST} + {828860400 -14400 1 EDT} + {846396000 -18000 0 EST} + {860310000 -14400 1 EDT} + {877845600 -18000 0 EST} + {891759600 -14400 1 EDT} + {909295200 -18000 0 EST} + {923209200 -14400 1 EDT} + {941353200 -21600 0 CST} + {954662400 -18000 1 CDT} + {972806400 -18000 0 EST} + {986108400 -14400 1 EDT} + {1004248800 -18000 0 EST} + {1018162800 -14400 1 EDT} + {1035698400 -18000 0 EST} + {1049612400 -14400 1 EDT} + {1067148000 -18000 0 EST} + {1081062000 -14400 1 EDT} + {1099202400 -18000 0 EST} + {1112511600 -14400 1 EDT} + {1130652000 -18000 0 EST} + {1143961200 -14400 1 EDT} + {1162101600 -18000 0 EST} + {1173596400 -14400 1 EDT} + {1194156000 -18000 0 EST} + {1205046000 -14400 1 EDT} + {1225605600 -18000 0 EST} + {1236495600 -14400 1 EDT} + {1257055200 -18000 0 EST} + {1268550000 -14400 1 EDT} + {1289109600 -18000 0 EST} + {1299999600 -14400 1 EDT} + {1320559200 -18000 0 EST} + {1331449200 -14400 1 EDT} + {1352008800 -18000 0 EST} + {1362898800 -14400 1 EDT} + {1383458400 -18000 0 EST} + {1394348400 -14400 1 EDT} + {1414908000 -18000 0 EST} + {1425798000 -14400 1 EDT} + {1446357600 -18000 0 EST} + {1457852400 -14400 1 EDT} + {1478412000 -18000 0 EST} + {1489302000 -14400 1 EDT} + {1509861600 -18000 0 EST} + {1520751600 -14400 1 EDT} + {1541311200 -18000 0 EST} + {1552201200 -14400 1 EDT} + {1572760800 -18000 0 EST} + {1583650800 -14400 1 EDT} + {1604210400 -18000 0 EST} + {1615705200 -14400 1 EDT} + {1636264800 -18000 0 EST} + {1647154800 -14400 1 EDT} + {1667714400 -18000 0 EST} + {1678604400 -14400 1 EDT} + {1699164000 -18000 0 EST} + {1710054000 -14400 1 EDT} + {1730613600 -18000 0 EST} + {1741503600 -14400 1 EDT} + {1762063200 -18000 0 EST} + {1772953200 -14400 1 EDT} + {1793512800 -18000 0 EST} + {1805007600 -14400 1 EDT} + {1825567200 -18000 0 EST} + {1836457200 -14400 1 EDT} + {1857016800 -18000 0 EST} + {1867906800 -14400 1 EDT} + {1888466400 -18000 0 EST} + {1899356400 -14400 1 EDT} + {1919916000 -18000 0 EST} + {1930806000 -14400 1 EDT} + {1951365600 -18000 0 EST} + {1962860400 -14400 1 EDT} + {1983420000 -18000 0 EST} + {1994310000 -14400 1 EDT} + {2014869600 -18000 0 EST} + {2025759600 -14400 1 EDT} + {2046319200 -18000 0 EST} + {2057209200 -14400 1 EDT} + {2077768800 -18000 0 EST} + {2088658800 -14400 1 EDT} + {2109218400 -18000 0 EST} + {2120108400 -14400 1 EDT} + {2140668000 -18000 0 EST} + {2152162800 -14400 1 EDT} + {2172722400 -18000 0 EST} + {2183612400 -14400 1 EDT} + {2204172000 -18000 0 EST} + {2215062000 -14400 1 EDT} + {2235621600 -18000 0 EST} + {2246511600 -14400 1 EDT} + {2267071200 -18000 0 EST} + {2277961200 -14400 1 EDT} + {2298520800 -18000 0 EST} + {2309410800 -14400 1 EDT} + {2329970400 -18000 0 EST} + {2341465200 -14400 1 EDT} + {2362024800 -18000 0 EST} + {2372914800 -14400 1 EDT} + {2393474400 -18000 0 EST} + {2404364400 -14400 1 EDT} + {2424924000 -18000 0 EST} + {2435814000 -14400 1 EDT} + {2456373600 -18000 0 EST} + {2467263600 -14400 1 EDT} + {2487823200 -18000 0 EST} + {2499318000 -14400 1 EDT} + {2519877600 -18000 0 EST} + {2530767600 -14400 1 EDT} + {2551327200 -18000 0 EST} + {2562217200 -14400 1 EDT} + {2582776800 -18000 0 EST} + {2593666800 -14400 1 EDT} + {2614226400 -18000 0 EST} + {2625116400 -14400 1 EDT} + {2645676000 -18000 0 EST} + {2656566000 -14400 1 EDT} + {2677125600 -18000 0 EST} + {2688620400 -14400 1 EDT} + {2709180000 -18000 0 EST} + {2720070000 -14400 1 EDT} + {2740629600 -18000 0 EST} + {2751519600 -14400 1 EDT} + {2772079200 -18000 0 EST} + {2782969200 -14400 1 EDT} + {2803528800 -18000 0 EST} + {2814418800 -14400 1 EDT} + {2834978400 -18000 0 EST} + {2846473200 -14400 1 EDT} + {2867032800 -18000 0 EST} + {2877922800 -14400 1 EDT} + {2898482400 -18000 0 EST} + {2909372400 -14400 1 EDT} + {2929932000 -18000 0 EST} + {2940822000 -14400 1 EDT} + {2961381600 -18000 0 EST} + {2972271600 -14400 1 EDT} + {2992831200 -18000 0 EST} + {3003721200 -14400 1 EDT} + {3024280800 -18000 0 EST} + {3035775600 -14400 1 EDT} + {3056335200 -18000 0 EST} + {3067225200 -14400 1 EDT} + {3087784800 -18000 0 EST} + {3098674800 -14400 1 EDT} + {3119234400 -18000 0 EST} + {3130124400 -14400 1 EDT} + {3150684000 -18000 0 EST} + {3161574000 -14400 1 EDT} + {3182133600 -18000 0 EST} + {3193023600 -14400 1 EDT} + {3213583200 -18000 0 EST} + {3225078000 -14400 1 EDT} + {3245637600 -18000 0 EST} + {3256527600 -14400 1 EDT} + {3277087200 -18000 0 EST} + {3287977200 -14400 1 EDT} + {3308536800 -18000 0 EST} + {3319426800 -14400 1 EDT} + {3339986400 -18000 0 EST} + {3350876400 -14400 1 EDT} + {3371436000 -18000 0 EST} + {3382930800 -14400 1 EDT} + {3403490400 -18000 0 EST} + {3414380400 -14400 1 EDT} + {3434940000 -18000 0 EST} + {3445830000 -14400 1 EDT} + {3466389600 -18000 0 EST} + {3477279600 -14400 1 EDT} + {3497839200 -18000 0 EST} + {3508729200 -14400 1 EDT} + {3529288800 -18000 0 EST} + {3540178800 -14400 1 EDT} + {3560738400 -18000 0 EST} + {3572233200 -14400 1 EDT} + {3592792800 -18000 0 EST} + {3603682800 -14400 1 EDT} + {3624242400 -18000 0 EST} + {3635132400 -14400 1 EDT} + {3655692000 -18000 0 EST} + {3666582000 -14400 1 EDT} + {3687141600 -18000 0 EST} + {3698031600 -14400 1 EDT} + {3718591200 -18000 0 EST} + {3730086000 -14400 1 EDT} + {3750645600 -18000 0 EST} + {3761535600 -14400 1 EDT} + {3782095200 -18000 0 EST} + {3792985200 -14400 1 EDT} + {3813544800 -18000 0 EST} + {3824434800 -14400 1 EDT} + {3844994400 -18000 0 EST} + {3855884400 -14400 1 EDT} + {3876444000 -18000 0 EST} + {3887334000 -14400 1 EDT} + {3907893600 -18000 0 EST} + {3919388400 -14400 1 EDT} + {3939948000 -18000 0 EST} + {3950838000 -14400 1 EDT} + {3971397600 -18000 0 EST} + {3982287600 -14400 1 EDT} + {4002847200 -18000 0 EST} + {4013737200 -14400 1 EDT} + {4034296800 -18000 0 EST} + {4045186800 -14400 1 EDT} + {4065746400 -18000 0 EST} + {4076636400 -14400 1 EDT} + {4097196000 -18000 0 EST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Jamaica b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Jamaica new file mode 100644 index 00000000..f7528424 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Jamaica @@ -0,0 +1,29 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Jamaica) { + {-9223372036854775808 -18431 0 LMT} + {-2524503169 -18431 0 KMT} + {-1827687169 -18000 0 EST} + {126248400 -18000 0 EST} + {126687600 -14400 1 EDT} + {152085600 -18000 0 EST} + {162370800 -14400 1 EDT} + {183535200 -18000 0 EST} + {199263600 -14400 1 EDT} + {215589600 -18000 0 EST} + {230713200 -14400 1 EDT} + {247039200 -18000 0 EST} + {262767600 -14400 1 EDT} + {278488800 -18000 0 EST} + {294217200 -14400 1 EDT} + {309938400 -18000 0 EST} + {325666800 -14400 1 EDT} + {341388000 -18000 0 EST} + {357116400 -14400 1 EDT} + {372837600 -18000 0 EST} + {388566000 -14400 1 EDT} + {404892000 -18000 0 EST} + {420015600 -14400 1 EDT} + {436341600 -18000 0 EST} + {441781200 -18000 0 EST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Jujuy b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Jujuy new file mode 100644 index 00000000..b4c5da3d --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Jujuy @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Argentina/Jujuy)]} { + LoadTimeZoneFile America/Argentina/Jujuy +} +set TZData(:America/Jujuy) $TZData(:America/Argentina/Jujuy) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Juneau b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Juneau new file mode 100644 index 00000000..fead8105 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Juneau @@ -0,0 +1,276 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Juneau) { + {-9223372036854775808 54139 0 LMT} + {-3225366139 -32261 0 LMT} + {-2188954939 -28800 0 PST} + {-883584000 -28800 0 PST} + {-880207200 -25200 1 PWT} + {-769395600 -25200 1 PPT} + {-765385200 -28800 0 PST} + {-757353600 -28800 0 PST} + {-31507200 -28800 0 PST} + {-21477600 -25200 1 PDT} + {-5756400 -28800 0 PST} + {9972000 -25200 1 PDT} + {25693200 -28800 0 PST} + {41421600 -25200 1 PDT} + {57747600 -28800 0 PST} + {73476000 -25200 1 PDT} + {89197200 -28800 0 PST} + {104925600 -25200 1 PDT} + {120646800 -28800 0 PST} + {126698400 -25200 1 PDT} + {152096400 -28800 0 PST} + {162381600 -25200 1 PDT} + {183546000 -28800 0 PST} + {199274400 -25200 1 PDT} + {215600400 -28800 0 PST} + {230724000 -25200 1 PDT} + {247050000 -28800 0 PST} + {262778400 -25200 1 PDT} + {278499600 -28800 0 PST} + {294228000 -25200 1 PDT} + {309949200 -28800 0 PST} + {325677600 -32400 0 YST} + {325681200 -28800 1 YDT} + {341406000 -28800 0 PST} + {357127200 -25200 1 PDT} + {372848400 -28800 0 PST} + {388576800 -25200 1 PDT} + {404902800 -28800 0 PST} + {420026400 -25200 1 PDT} + {439030800 -32400 0 AKST} + {452084400 -28800 1 AKDT} + {467805600 -32400 0 AKST} + {483534000 -28800 1 AKDT} + {499255200 -32400 0 AKST} + {514983600 -28800 1 AKDT} + {530704800 -32400 0 AKST} + {544618800 -28800 1 AKDT} + {562154400 -32400 0 AKST} + {576068400 -28800 1 AKDT} + {594208800 -32400 0 AKST} + {607518000 -28800 1 AKDT} + {625658400 -32400 0 AKST} + {638967600 -28800 1 AKDT} + {657108000 -32400 0 AKST} + {671022000 -28800 1 AKDT} + {688557600 -32400 0 AKST} + {702471600 -28800 1 AKDT} + {720007200 -32400 0 AKST} + {733921200 -28800 1 AKDT} + {752061600 -32400 0 AKST} + {765370800 -28800 1 AKDT} + {783511200 -32400 0 AKST} + {796820400 -28800 1 AKDT} + {814960800 -32400 0 AKST} + {828874800 -28800 1 AKDT} + {846410400 -32400 0 AKST} + {860324400 -28800 1 AKDT} + {877860000 -32400 0 AKST} + {891774000 -28800 1 AKDT} + {909309600 -32400 0 AKST} + {923223600 -28800 1 AKDT} + {941364000 -32400 0 AKST} + {954673200 -28800 1 AKDT} + {972813600 -32400 0 AKST} + {986122800 -28800 1 AKDT} + {1004263200 -32400 0 AKST} + {1018177200 -28800 1 AKDT} + {1035712800 -32400 0 AKST} + {1049626800 -28800 1 AKDT} + {1067162400 -32400 0 AKST} + {1081076400 -28800 1 AKDT} + {1099216800 -32400 0 AKST} + {1112526000 -28800 1 AKDT} + {1130666400 -32400 0 AKST} + {1143975600 -28800 1 AKDT} + {1162116000 -32400 0 AKST} + {1173610800 -28800 1 AKDT} + {1194170400 -32400 0 AKST} + {1205060400 -28800 1 AKDT} + {1225620000 -32400 0 AKST} + {1236510000 -28800 1 AKDT} + {1257069600 -32400 0 AKST} + {1268564400 -28800 1 AKDT} + {1289124000 -32400 0 AKST} + {1300014000 -28800 1 AKDT} + {1320573600 -32400 0 AKST} + {1331463600 -28800 1 AKDT} + {1352023200 -32400 0 AKST} + {1362913200 -28800 1 AKDT} + {1383472800 -32400 0 AKST} + {1394362800 -28800 1 AKDT} + {1414922400 -32400 0 AKST} + {1425812400 -28800 1 AKDT} + {1446372000 -32400 0 AKST} + {1457866800 -28800 1 AKDT} + {1478426400 -32400 0 AKST} + {1489316400 -28800 1 AKDT} + {1509876000 -32400 0 AKST} + {1520766000 -28800 1 AKDT} + {1541325600 -32400 0 AKST} + {1552215600 -28800 1 AKDT} + {1572775200 -32400 0 AKST} + {1583665200 -28800 1 AKDT} + {1604224800 -32400 0 AKST} + {1615719600 -28800 1 AKDT} + {1636279200 -32400 0 AKST} + {1647169200 -28800 1 AKDT} + {1667728800 -32400 0 AKST} + {1678618800 -28800 1 AKDT} + {1699178400 -32400 0 AKST} + {1710068400 -28800 1 AKDT} + {1730628000 -32400 0 AKST} + {1741518000 -28800 1 AKDT} + {1762077600 -32400 0 AKST} + {1772967600 -28800 1 AKDT} + {1793527200 -32400 0 AKST} + {1805022000 -28800 1 AKDT} + {1825581600 -32400 0 AKST} + {1836471600 -28800 1 AKDT} + {1857031200 -32400 0 AKST} + {1867921200 -28800 1 AKDT} + {1888480800 -32400 0 AKST} + {1899370800 -28800 1 AKDT} + {1919930400 -32400 0 AKST} + {1930820400 -28800 1 AKDT} + {1951380000 -32400 0 AKST} + {1962874800 -28800 1 AKDT} + {1983434400 -32400 0 AKST} + {1994324400 -28800 1 AKDT} + {2014884000 -32400 0 AKST} + {2025774000 -28800 1 AKDT} + {2046333600 -32400 0 AKST} + {2057223600 -28800 1 AKDT} + {2077783200 -32400 0 AKST} + {2088673200 -28800 1 AKDT} + {2109232800 -32400 0 AKST} + {2120122800 -28800 1 AKDT} + {2140682400 -32400 0 AKST} + {2152177200 -28800 1 AKDT} + {2172736800 -32400 0 AKST} + {2183626800 -28800 1 AKDT} + {2204186400 -32400 0 AKST} + {2215076400 -28800 1 AKDT} + {2235636000 -32400 0 AKST} + {2246526000 -28800 1 AKDT} + {2267085600 -32400 0 AKST} + {2277975600 -28800 1 AKDT} + {2298535200 -32400 0 AKST} + {2309425200 -28800 1 AKDT} + {2329984800 -32400 0 AKST} + {2341479600 -28800 1 AKDT} + {2362039200 -32400 0 AKST} + {2372929200 -28800 1 AKDT} + {2393488800 -32400 0 AKST} + {2404378800 -28800 1 AKDT} + {2424938400 -32400 0 AKST} + {2435828400 -28800 1 AKDT} + {2456388000 -32400 0 AKST} + {2467278000 -28800 1 AKDT} + {2487837600 -32400 0 AKST} + {2499332400 -28800 1 AKDT} + {2519892000 -32400 0 AKST} + {2530782000 -28800 1 AKDT} + {2551341600 -32400 0 AKST} + {2562231600 -28800 1 AKDT} + {2582791200 -32400 0 AKST} + {2593681200 -28800 1 AKDT} + {2614240800 -32400 0 AKST} + {2625130800 -28800 1 AKDT} + {2645690400 -32400 0 AKST} + {2656580400 -28800 1 AKDT} + {2677140000 -32400 0 AKST} + {2688634800 -28800 1 AKDT} + {2709194400 -32400 0 AKST} + {2720084400 -28800 1 AKDT} + {2740644000 -32400 0 AKST} + {2751534000 -28800 1 AKDT} + {2772093600 -32400 0 AKST} + {2782983600 -28800 1 AKDT} + {2803543200 -32400 0 AKST} + {2814433200 -28800 1 AKDT} + {2834992800 -32400 0 AKST} + {2846487600 -28800 1 AKDT} + {2867047200 -32400 0 AKST} + {2877937200 -28800 1 AKDT} + {2898496800 -32400 0 AKST} + {2909386800 -28800 1 AKDT} + {2929946400 -32400 0 AKST} + {2940836400 -28800 1 AKDT} + {2961396000 -32400 0 AKST} + {2972286000 -28800 1 AKDT} + {2992845600 -32400 0 AKST} + {3003735600 -28800 1 AKDT} + {3024295200 -32400 0 AKST} + {3035790000 -28800 1 AKDT} + {3056349600 -32400 0 AKST} + {3067239600 -28800 1 AKDT} + {3087799200 -32400 0 AKST} + {3098689200 -28800 1 AKDT} + {3119248800 -32400 0 AKST} + {3130138800 -28800 1 AKDT} + {3150698400 -32400 0 AKST} + {3161588400 -28800 1 AKDT} + {3182148000 -32400 0 AKST} + {3193038000 -28800 1 AKDT} + {3213597600 -32400 0 AKST} + {3225092400 -28800 1 AKDT} + {3245652000 -32400 0 AKST} + {3256542000 -28800 1 AKDT} + {3277101600 -32400 0 AKST} + {3287991600 -28800 1 AKDT} + {3308551200 -32400 0 AKST} + {3319441200 -28800 1 AKDT} + {3340000800 -32400 0 AKST} + {3350890800 -28800 1 AKDT} + {3371450400 -32400 0 AKST} + {3382945200 -28800 1 AKDT} + {3403504800 -32400 0 AKST} + {3414394800 -28800 1 AKDT} + {3434954400 -32400 0 AKST} + {3445844400 -28800 1 AKDT} + {3466404000 -32400 0 AKST} + {3477294000 -28800 1 AKDT} + {3497853600 -32400 0 AKST} + {3508743600 -28800 1 AKDT} + {3529303200 -32400 0 AKST} + {3540193200 -28800 1 AKDT} + {3560752800 -32400 0 AKST} + {3572247600 -28800 1 AKDT} + {3592807200 -32400 0 AKST} + {3603697200 -28800 1 AKDT} + {3624256800 -32400 0 AKST} + {3635146800 -28800 1 AKDT} + {3655706400 -32400 0 AKST} + {3666596400 -28800 1 AKDT} + {3687156000 -32400 0 AKST} + {3698046000 -28800 1 AKDT} + {3718605600 -32400 0 AKST} + {3730100400 -28800 1 AKDT} + {3750660000 -32400 0 AKST} + {3761550000 -28800 1 AKDT} + {3782109600 -32400 0 AKST} + {3792999600 -28800 1 AKDT} + {3813559200 -32400 0 AKST} + {3824449200 -28800 1 AKDT} + {3845008800 -32400 0 AKST} + {3855898800 -28800 1 AKDT} + {3876458400 -32400 0 AKST} + {3887348400 -28800 1 AKDT} + {3907908000 -32400 0 AKST} + {3919402800 -28800 1 AKDT} + {3939962400 -32400 0 AKST} + {3950852400 -28800 1 AKDT} + {3971412000 -32400 0 AKST} + {3982302000 -28800 1 AKDT} + {4002861600 -32400 0 AKST} + {4013751600 -28800 1 AKDT} + {4034311200 -32400 0 AKST} + {4045201200 -28800 1 AKDT} + {4065760800 -32400 0 AKST} + {4076650800 -28800 1 AKDT} + {4097210400 -32400 0 AKST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Kentucky/Louisville b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Kentucky/Louisville new file mode 100644 index 00000000..c2aa10c4 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Kentucky/Louisville @@ -0,0 +1,314 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Kentucky/Louisville) { + {-9223372036854775808 -20582 0 LMT} + {-2717647200 -21600 0 CST} + {-1633276800 -18000 1 CDT} + {-1615136400 -21600 0 CST} + {-1601827200 -18000 1 CDT} + {-1583686800 -21600 0 CST} + {-1546279200 -21600 0 CST} + {-1535904000 -18000 1 CDT} + {-1525280400 -21600 0 CST} + {-905097600 -18000 1 CDT} + {-891795600 -21600 0 CST} + {-883591200 -21600 0 CST} + {-880214400 -18000 1 CWT} + {-769395600 -18000 1 CPT} + {-765392400 -21600 0 CST} + {-757360800 -21600 0 CST} + {-747244800 -18000 1 CDT} + {-744224400 -21600 0 CST} + {-715795200 -18000 1 CDT} + {-684349200 -18000 1 CDT} + {-652899600 -18000 1 CDT} + {-620845200 -18000 1 CDT} + {-608144400 -21600 0 CST} + {-589392000 -18000 1 CDT} + {-576090000 -21600 0 CST} + {-557942400 -18000 1 CDT} + {-544640400 -21600 0 CST} + {-526492800 -18000 1 CDT} + {-513190800 -21600 0 CST} + {-495043200 -18000 1 CDT} + {-481741200 -21600 0 CST} + {-463593600 -18000 1 CDT} + {-450291600 -21600 0 CST} + {-431539200 -18000 1 CDT} + {-415818000 -21600 0 CST} + {-400089600 -18000 1 CDT} + {-384368400 -21600 0 CST} + {-368640000 -18000 1 CDT} + {-352918800 -21600 0 CST} + {-337190400 -18000 1 CDT} + {-321469200 -21600 0 CST} + {-305740800 -18000 1 CDT} + {-289414800 -21600 0 CST} + {-273686400 -18000 1 CDT} + {-266432400 -18000 0 EST} + {-63140400 -18000 0 EST} + {-52938000 -14400 1 EDT} + {-37216800 -18000 0 EST} + {-21488400 -14400 1 EDT} + {-5767200 -18000 0 EST} + {9961200 -14400 1 EDT} + {25682400 -18000 0 EST} + {41410800 -14400 1 EDT} + {57736800 -18000 0 EST} + {73465200 -14400 1 EDT} + {89186400 -18000 0 EST} + {104914800 -14400 1 EDT} + {120636000 -18000 0 EST} + {126687600 -18000 1 CDT} + {152089200 -18000 0 EST} + {162370800 -14400 1 EDT} + {183535200 -18000 0 EST} + {199263600 -14400 1 EDT} + {215589600 -18000 0 EST} + {230713200 -14400 1 EDT} + {247039200 -18000 0 EST} + {262767600 -14400 1 EDT} + {278488800 -18000 0 EST} + {294217200 -14400 1 EDT} + {309938400 -18000 0 EST} + {325666800 -14400 1 EDT} + {341388000 -18000 0 EST} + {357116400 -14400 1 EDT} + {372837600 -18000 0 EST} + {388566000 -14400 1 EDT} + {404892000 -18000 0 EST} + {420015600 -14400 1 EDT} + {436341600 -18000 0 EST} + {452070000 -14400 1 EDT} + {467791200 -18000 0 EST} + {483519600 -14400 1 EDT} + {499240800 -18000 0 EST} + {514969200 -14400 1 EDT} + {530690400 -18000 0 EST} + {544604400 -14400 1 EDT} + {562140000 -18000 0 EST} + {576054000 -14400 1 EDT} + {594194400 -18000 0 EST} + {607503600 -14400 1 EDT} + {625644000 -18000 0 EST} + {638953200 -14400 1 EDT} + {657093600 -18000 0 EST} + {671007600 -14400 1 EDT} + {688543200 -18000 0 EST} + {702457200 -14400 1 EDT} + {719992800 -18000 0 EST} + {733906800 -14400 1 EDT} + {752047200 -18000 0 EST} + {765356400 -14400 1 EDT} + {783496800 -18000 0 EST} + {796806000 -14400 1 EDT} + {814946400 -18000 0 EST} + {828860400 -14400 1 EDT} + {846396000 -18000 0 EST} + {860310000 -14400 1 EDT} + {877845600 -18000 0 EST} + {891759600 -14400 1 EDT} + {909295200 -18000 0 EST} + {923209200 -14400 1 EDT} + {941349600 -18000 0 EST} + {954658800 -14400 1 EDT} + {972799200 -18000 0 EST} + {986108400 -14400 1 EDT} + {1004248800 -18000 0 EST} + {1018162800 -14400 1 EDT} + {1035698400 -18000 0 EST} + {1049612400 -14400 1 EDT} + {1067148000 -18000 0 EST} + {1081062000 -14400 1 EDT} + {1099202400 -18000 0 EST} + {1112511600 -14400 1 EDT} + {1130652000 -18000 0 EST} + {1143961200 -14400 1 EDT} + {1162101600 -18000 0 EST} + {1173596400 -14400 1 EDT} + {1194156000 -18000 0 EST} + {1205046000 -14400 1 EDT} + {1225605600 -18000 0 EST} + {1236495600 -14400 1 EDT} + {1257055200 -18000 0 EST} + {1268550000 -14400 1 EDT} + {1289109600 -18000 0 EST} + {1299999600 -14400 1 EDT} + {1320559200 -18000 0 EST} + {1331449200 -14400 1 EDT} + {1352008800 -18000 0 EST} + {1362898800 -14400 1 EDT} + {1383458400 -18000 0 EST} + {1394348400 -14400 1 EDT} + {1414908000 -18000 0 EST} + {1425798000 -14400 1 EDT} + {1446357600 -18000 0 EST} + {1457852400 -14400 1 EDT} + {1478412000 -18000 0 EST} + {1489302000 -14400 1 EDT} + {1509861600 -18000 0 EST} + {1520751600 -14400 1 EDT} + {1541311200 -18000 0 EST} + {1552201200 -14400 1 EDT} + {1572760800 -18000 0 EST} + {1583650800 -14400 1 EDT} + {1604210400 -18000 0 EST} + {1615705200 -14400 1 EDT} + {1636264800 -18000 0 EST} + {1647154800 -14400 1 EDT} + {1667714400 -18000 0 EST} + {1678604400 -14400 1 EDT} + {1699164000 -18000 0 EST} + {1710054000 -14400 1 EDT} + {1730613600 -18000 0 EST} + {1741503600 -14400 1 EDT} + {1762063200 -18000 0 EST} + {1772953200 -14400 1 EDT} + {1793512800 -18000 0 EST} + {1805007600 -14400 1 EDT} + {1825567200 -18000 0 EST} + {1836457200 -14400 1 EDT} + {1857016800 -18000 0 EST} + {1867906800 -14400 1 EDT} + {1888466400 -18000 0 EST} + {1899356400 -14400 1 EDT} + {1919916000 -18000 0 EST} + {1930806000 -14400 1 EDT} + {1951365600 -18000 0 EST} + {1962860400 -14400 1 EDT} + {1983420000 -18000 0 EST} + {1994310000 -14400 1 EDT} + {2014869600 -18000 0 EST} + {2025759600 -14400 1 EDT} + {2046319200 -18000 0 EST} + {2057209200 -14400 1 EDT} + {2077768800 -18000 0 EST} + {2088658800 -14400 1 EDT} + {2109218400 -18000 0 EST} + {2120108400 -14400 1 EDT} + {2140668000 -18000 0 EST} + {2152162800 -14400 1 EDT} + {2172722400 -18000 0 EST} + {2183612400 -14400 1 EDT} + {2204172000 -18000 0 EST} + {2215062000 -14400 1 EDT} + {2235621600 -18000 0 EST} + {2246511600 -14400 1 EDT} + {2267071200 -18000 0 EST} + {2277961200 -14400 1 EDT} + {2298520800 -18000 0 EST} + {2309410800 -14400 1 EDT} + {2329970400 -18000 0 EST} + {2341465200 -14400 1 EDT} + {2362024800 -18000 0 EST} + {2372914800 -14400 1 EDT} + {2393474400 -18000 0 EST} + {2404364400 -14400 1 EDT} + {2424924000 -18000 0 EST} + {2435814000 -14400 1 EDT} + {2456373600 -18000 0 EST} + {2467263600 -14400 1 EDT} + {2487823200 -18000 0 EST} + {2499318000 -14400 1 EDT} + {2519877600 -18000 0 EST} + {2530767600 -14400 1 EDT} + {2551327200 -18000 0 EST} + {2562217200 -14400 1 EDT} + {2582776800 -18000 0 EST} + {2593666800 -14400 1 EDT} + {2614226400 -18000 0 EST} + {2625116400 -14400 1 EDT} + {2645676000 -18000 0 EST} + {2656566000 -14400 1 EDT} + {2677125600 -18000 0 EST} + {2688620400 -14400 1 EDT} + {2709180000 -18000 0 EST} + {2720070000 -14400 1 EDT} + {2740629600 -18000 0 EST} + {2751519600 -14400 1 EDT} + {2772079200 -18000 0 EST} + {2782969200 -14400 1 EDT} + {2803528800 -18000 0 EST} + {2814418800 -14400 1 EDT} + {2834978400 -18000 0 EST} + {2846473200 -14400 1 EDT} + {2867032800 -18000 0 EST} + {2877922800 -14400 1 EDT} + {2898482400 -18000 0 EST} + {2909372400 -14400 1 EDT} + {2929932000 -18000 0 EST} + {2940822000 -14400 1 EDT} + {2961381600 -18000 0 EST} + {2972271600 -14400 1 EDT} + {2992831200 -18000 0 EST} + {3003721200 -14400 1 EDT} + {3024280800 -18000 0 EST} + {3035775600 -14400 1 EDT} + {3056335200 -18000 0 EST} + {3067225200 -14400 1 EDT} + {3087784800 -18000 0 EST} + {3098674800 -14400 1 EDT} + {3119234400 -18000 0 EST} + {3130124400 -14400 1 EDT} + {3150684000 -18000 0 EST} + {3161574000 -14400 1 EDT} + {3182133600 -18000 0 EST} + {3193023600 -14400 1 EDT} + {3213583200 -18000 0 EST} + {3225078000 -14400 1 EDT} + {3245637600 -18000 0 EST} + {3256527600 -14400 1 EDT} + {3277087200 -18000 0 EST} + {3287977200 -14400 1 EDT} + {3308536800 -18000 0 EST} + {3319426800 -14400 1 EDT} + {3339986400 -18000 0 EST} + {3350876400 -14400 1 EDT} + {3371436000 -18000 0 EST} + {3382930800 -14400 1 EDT} + {3403490400 -18000 0 EST} + {3414380400 -14400 1 EDT} + {3434940000 -18000 0 EST} + {3445830000 -14400 1 EDT} + {3466389600 -18000 0 EST} + {3477279600 -14400 1 EDT} + {3497839200 -18000 0 EST} + {3508729200 -14400 1 EDT} + {3529288800 -18000 0 EST} + {3540178800 -14400 1 EDT} + {3560738400 -18000 0 EST} + {3572233200 -14400 1 EDT} + {3592792800 -18000 0 EST} + {3603682800 -14400 1 EDT} + {3624242400 -18000 0 EST} + {3635132400 -14400 1 EDT} + {3655692000 -18000 0 EST} + {3666582000 -14400 1 EDT} + {3687141600 -18000 0 EST} + {3698031600 -14400 1 EDT} + {3718591200 -18000 0 EST} + {3730086000 -14400 1 EDT} + {3750645600 -18000 0 EST} + {3761535600 -14400 1 EDT} + {3782095200 -18000 0 EST} + {3792985200 -14400 1 EDT} + {3813544800 -18000 0 EST} + {3824434800 -14400 1 EDT} + {3844994400 -18000 0 EST} + {3855884400 -14400 1 EDT} + {3876444000 -18000 0 EST} + {3887334000 -14400 1 EDT} + {3907893600 -18000 0 EST} + {3919388400 -14400 1 EDT} + {3939948000 -18000 0 EST} + {3950838000 -14400 1 EDT} + {3971397600 -18000 0 EST} + {3982287600 -14400 1 EDT} + {4002847200 -18000 0 EST} + {4013737200 -14400 1 EDT} + {4034296800 -18000 0 EST} + {4045186800 -14400 1 EDT} + {4065746400 -18000 0 EST} + {4076636400 -14400 1 EDT} + {4097196000 -18000 0 EST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Kentucky/Monticello b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Kentucky/Monticello new file mode 100644 index 00000000..e523ecbb --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Kentucky/Monticello @@ -0,0 +1,279 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Kentucky/Monticello) { + {-9223372036854775808 -20364 0 LMT} + {-2717647200 -21600 0 CST} + {-1633276800 -18000 1 CDT} + {-1615136400 -21600 0 CST} + {-1601827200 -18000 1 CDT} + {-1583686800 -21600 0 CST} + {-880214400 -18000 1 CWT} + {-769395600 -18000 1 CPT} + {-765392400 -21600 0 CST} + {-757360800 -21600 0 CST} + {-63136800 -21600 0 CST} + {-52934400 -18000 1 CDT} + {-37213200 -21600 0 CST} + {-21484800 -18000 1 CDT} + {-5763600 -21600 0 CST} + {9964800 -18000 1 CDT} + {25686000 -21600 0 CST} + {41414400 -18000 1 CDT} + {57740400 -21600 0 CST} + {73468800 -18000 1 CDT} + {89190000 -21600 0 CST} + {104918400 -18000 1 CDT} + {120639600 -21600 0 CST} + {126691200 -18000 1 CDT} + {152089200 -21600 0 CST} + {162374400 -18000 1 CDT} + {183538800 -21600 0 CST} + {199267200 -18000 1 CDT} + {215593200 -21600 0 CST} + {230716800 -18000 1 CDT} + {247042800 -21600 0 CST} + {262771200 -18000 1 CDT} + {278492400 -21600 0 CST} + {294220800 -18000 1 CDT} + {309942000 -21600 0 CST} + {325670400 -18000 1 CDT} + {341391600 -21600 0 CST} + {357120000 -18000 1 CDT} + {372841200 -21600 0 CST} + {388569600 -18000 1 CDT} + {404895600 -21600 0 CST} + {420019200 -18000 1 CDT} + {436345200 -21600 0 CST} + {452073600 -18000 1 CDT} + {467794800 -21600 0 CST} + {483523200 -18000 1 CDT} + {499244400 -21600 0 CST} + {514972800 -18000 1 CDT} + {530694000 -21600 0 CST} + {544608000 -18000 1 CDT} + {562143600 -21600 0 CST} + {576057600 -18000 1 CDT} + {594198000 -21600 0 CST} + {607507200 -18000 1 CDT} + {625647600 -21600 0 CST} + {638956800 -18000 1 CDT} + {657097200 -21600 0 CST} + {671011200 -18000 1 CDT} + {688546800 -21600 0 CST} + {702460800 -18000 1 CDT} + {719996400 -21600 0 CST} + {733910400 -18000 1 CDT} + {752050800 -21600 0 CST} + {765360000 -18000 1 CDT} + {783500400 -21600 0 CST} + {796809600 -18000 1 CDT} + {814950000 -21600 0 CST} + {828864000 -18000 1 CDT} + {846399600 -21600 0 CST} + {860313600 -18000 1 CDT} + {877849200 -21600 0 CST} + {891763200 -18000 1 CDT} + {909298800 -21600 0 CST} + {923212800 -18000 1 CDT} + {941353200 -21600 0 CST} + {954662400 -18000 1 CDT} + {972806400 -18000 0 EST} + {986108400 -14400 1 EDT} + {1004248800 -18000 0 EST} + {1018162800 -14400 1 EDT} + {1035698400 -18000 0 EST} + {1049612400 -14400 1 EDT} + {1067148000 -18000 0 EST} + {1081062000 -14400 1 EDT} + {1099202400 -18000 0 EST} + {1112511600 -14400 1 EDT} + {1130652000 -18000 0 EST} + {1143961200 -14400 1 EDT} + {1162101600 -18000 0 EST} + {1173596400 -14400 1 EDT} + {1194156000 -18000 0 EST} + {1205046000 -14400 1 EDT} + {1225605600 -18000 0 EST} + {1236495600 -14400 1 EDT} + {1257055200 -18000 0 EST} + {1268550000 -14400 1 EDT} + {1289109600 -18000 0 EST} + {1299999600 -14400 1 EDT} + {1320559200 -18000 0 EST} + {1331449200 -14400 1 EDT} + {1352008800 -18000 0 EST} + {1362898800 -14400 1 EDT} + {1383458400 -18000 0 EST} + {1394348400 -14400 1 EDT} + {1414908000 -18000 0 EST} + {1425798000 -14400 1 EDT} + {1446357600 -18000 0 EST} + {1457852400 -14400 1 EDT} + {1478412000 -18000 0 EST} + {1489302000 -14400 1 EDT} + {1509861600 -18000 0 EST} + {1520751600 -14400 1 EDT} + {1541311200 -18000 0 EST} + {1552201200 -14400 1 EDT} + {1572760800 -18000 0 EST} + {1583650800 -14400 1 EDT} + {1604210400 -18000 0 EST} + {1615705200 -14400 1 EDT} + {1636264800 -18000 0 EST} + {1647154800 -14400 1 EDT} + {1667714400 -18000 0 EST} + {1678604400 -14400 1 EDT} + {1699164000 -18000 0 EST} + {1710054000 -14400 1 EDT} + {1730613600 -18000 0 EST} + {1741503600 -14400 1 EDT} + {1762063200 -18000 0 EST} + {1772953200 -14400 1 EDT} + {1793512800 -18000 0 EST} + {1805007600 -14400 1 EDT} + {1825567200 -18000 0 EST} + {1836457200 -14400 1 EDT} + {1857016800 -18000 0 EST} + {1867906800 -14400 1 EDT} + {1888466400 -18000 0 EST} + {1899356400 -14400 1 EDT} + {1919916000 -18000 0 EST} + {1930806000 -14400 1 EDT} + {1951365600 -18000 0 EST} + {1962860400 -14400 1 EDT} + {1983420000 -18000 0 EST} + {1994310000 -14400 1 EDT} + {2014869600 -18000 0 EST} + {2025759600 -14400 1 EDT} + {2046319200 -18000 0 EST} + {2057209200 -14400 1 EDT} + {2077768800 -18000 0 EST} + {2088658800 -14400 1 EDT} + {2109218400 -18000 0 EST} + {2120108400 -14400 1 EDT} + {2140668000 -18000 0 EST} + {2152162800 -14400 1 EDT} + {2172722400 -18000 0 EST} + {2183612400 -14400 1 EDT} + {2204172000 -18000 0 EST} + {2215062000 -14400 1 EDT} + {2235621600 -18000 0 EST} + {2246511600 -14400 1 EDT} + {2267071200 -18000 0 EST} + {2277961200 -14400 1 EDT} + {2298520800 -18000 0 EST} + {2309410800 -14400 1 EDT} + {2329970400 -18000 0 EST} + {2341465200 -14400 1 EDT} + {2362024800 -18000 0 EST} + {2372914800 -14400 1 EDT} + {2393474400 -18000 0 EST} + {2404364400 -14400 1 EDT} + {2424924000 -18000 0 EST} + {2435814000 -14400 1 EDT} + {2456373600 -18000 0 EST} + {2467263600 -14400 1 EDT} + {2487823200 -18000 0 EST} + {2499318000 -14400 1 EDT} + {2519877600 -18000 0 EST} + {2530767600 -14400 1 EDT} + {2551327200 -18000 0 EST} + {2562217200 -14400 1 EDT} + {2582776800 -18000 0 EST} + {2593666800 -14400 1 EDT} + {2614226400 -18000 0 EST} + {2625116400 -14400 1 EDT} + {2645676000 -18000 0 EST} + {2656566000 -14400 1 EDT} + {2677125600 -18000 0 EST} + {2688620400 -14400 1 EDT} + {2709180000 -18000 0 EST} + {2720070000 -14400 1 EDT} + {2740629600 -18000 0 EST} + {2751519600 -14400 1 EDT} + {2772079200 -18000 0 EST} + {2782969200 -14400 1 EDT} + {2803528800 -18000 0 EST} + {2814418800 -14400 1 EDT} + {2834978400 -18000 0 EST} + {2846473200 -14400 1 EDT} + {2867032800 -18000 0 EST} + {2877922800 -14400 1 EDT} + {2898482400 -18000 0 EST} + {2909372400 -14400 1 EDT} + {2929932000 -18000 0 EST} + {2940822000 -14400 1 EDT} + {2961381600 -18000 0 EST} + {2972271600 -14400 1 EDT} + {2992831200 -18000 0 EST} + {3003721200 -14400 1 EDT} + {3024280800 -18000 0 EST} + {3035775600 -14400 1 EDT} + {3056335200 -18000 0 EST} + {3067225200 -14400 1 EDT} + {3087784800 -18000 0 EST} + {3098674800 -14400 1 EDT} + {3119234400 -18000 0 EST} + {3130124400 -14400 1 EDT} + {3150684000 -18000 0 EST} + {3161574000 -14400 1 EDT} + {3182133600 -18000 0 EST} + {3193023600 -14400 1 EDT} + {3213583200 -18000 0 EST} + {3225078000 -14400 1 EDT} + {3245637600 -18000 0 EST} + {3256527600 -14400 1 EDT} + {3277087200 -18000 0 EST} + {3287977200 -14400 1 EDT} + {3308536800 -18000 0 EST} + {3319426800 -14400 1 EDT} + {3339986400 -18000 0 EST} + {3350876400 -14400 1 EDT} + {3371436000 -18000 0 EST} + {3382930800 -14400 1 EDT} + {3403490400 -18000 0 EST} + {3414380400 -14400 1 EDT} + {3434940000 -18000 0 EST} + {3445830000 -14400 1 EDT} + {3466389600 -18000 0 EST} + {3477279600 -14400 1 EDT} + {3497839200 -18000 0 EST} + {3508729200 -14400 1 EDT} + {3529288800 -18000 0 EST} + {3540178800 -14400 1 EDT} + {3560738400 -18000 0 EST} + {3572233200 -14400 1 EDT} + {3592792800 -18000 0 EST} + {3603682800 -14400 1 EDT} + {3624242400 -18000 0 EST} + {3635132400 -14400 1 EDT} + {3655692000 -18000 0 EST} + {3666582000 -14400 1 EDT} + {3687141600 -18000 0 EST} + {3698031600 -14400 1 EDT} + {3718591200 -18000 0 EST} + {3730086000 -14400 1 EDT} + {3750645600 -18000 0 EST} + {3761535600 -14400 1 EDT} + {3782095200 -18000 0 EST} + {3792985200 -14400 1 EDT} + {3813544800 -18000 0 EST} + {3824434800 -14400 1 EDT} + {3844994400 -18000 0 EST} + {3855884400 -14400 1 EDT} + {3876444000 -18000 0 EST} + {3887334000 -14400 1 EDT} + {3907893600 -18000 0 EST} + {3919388400 -14400 1 EDT} + {3939948000 -18000 0 EST} + {3950838000 -14400 1 EDT} + {3971397600 -18000 0 EST} + {3982287600 -14400 1 EDT} + {4002847200 -18000 0 EST} + {4013737200 -14400 1 EDT} + {4034296800 -18000 0 EST} + {4045186800 -14400 1 EDT} + {4065746400 -18000 0 EST} + {4076636400 -14400 1 EDT} + {4097196000 -18000 0 EST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Knox_IN b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Knox_IN new file mode 100644 index 00000000..00d21c08 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Knox_IN @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Indiana/Knox)]} { + LoadTimeZoneFile America/Indiana/Knox +} +set TZData(:America/Knox_IN) $TZData(:America/Indiana/Knox) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Kralendijk b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Kralendijk new file mode 100644 index 00000000..8b6db862 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Kralendijk @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Curacao)]} { + LoadTimeZoneFile America/Curacao +} +set TZData(:America/Kralendijk) $TZData(:America/Curacao) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/La_Paz b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/La_Paz new file mode 100644 index 00000000..38ffbb0c --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/La_Paz @@ -0,0 +1,8 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/La_Paz) { + {-9223372036854775808 -16356 0 LMT} + {-2524505244 -16356 0 CMT} + {-1205954844 -12756 1 BOST} + {-1192307244 -14400 0 BOT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Lima b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Lima new file mode 100644 index 00000000..c6e6ac15 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Lima @@ -0,0 +1,16 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Lima) { + {-9223372036854775808 -18492 0 LMT} + {-2524503108 -18516 0 LMT} + {-1938538284 -14400 0 PEST} + {-1002052800 -18000 0 PET} + {-986756400 -14400 1 PEST} + {-971035200 -18000 0 PET} + {-955306800 -14400 1 PEST} + {-939585600 -18000 0 PET} + {512712000 -18000 0 PET} + {544248000 -18000 0 PET} + {638942400 -18000 0 PET} + {765172800 -18000 0 PET} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Los_Angeles b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Los_Angeles new file mode 100644 index 00000000..da6ca996 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Los_Angeles @@ -0,0 +1,317 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Los_Angeles) { + {-9223372036854775808 -28378 0 LMT} + {-2717640000 -28800 0 PST} + {-1633269600 -25200 1 PDT} + {-1615129200 -28800 0 PST} + {-1601820000 -25200 1 PDT} + {-1583679600 -28800 0 PST} + {-880207200 -25200 1 PWT} + {-769395600 -25200 1 PPT} + {-765385200 -28800 0 PST} + {-757353600 -28800 0 PST} + {-687967200 -25200 1 PDT} + {-662655600 -28800 0 PST} + {-620834400 -25200 1 PDT} + {-608137200 -28800 0 PST} + {-589384800 -25200 1 PDT} + {-576082800 -28800 0 PST} + {-557935200 -25200 1 PDT} + {-544633200 -28800 0 PST} + {-526485600 -25200 1 PDT} + {-513183600 -28800 0 PST} + {-495036000 -25200 1 PDT} + {-481734000 -28800 0 PST} + {-463586400 -25200 1 PDT} + {-450284400 -28800 0 PST} + {-431532000 -25200 1 PDT} + {-418230000 -28800 0 PST} + {-400082400 -25200 1 PDT} + {-386780400 -28800 0 PST} + {-368632800 -25200 1 PDT} + {-355330800 -28800 0 PST} + {-337183200 -25200 1 PDT} + {-323881200 -28800 0 PST} + {-305733600 -25200 1 PDT} + {-292431600 -28800 0 PST} + {-273679200 -25200 1 PDT} + {-260982000 -28800 0 PST} + {-242229600 -25200 1 PDT} + {-226508400 -28800 0 PST} + {-210780000 -25200 1 PDT} + {-195058800 -28800 0 PST} + {-179330400 -25200 1 PDT} + {-163609200 -28800 0 PST} + {-147880800 -25200 1 PDT} + {-131554800 -28800 0 PST} + {-116431200 -25200 1 PDT} + {-100105200 -28800 0 PST} + {-94665600 -28800 0 PST} + {-84376800 -25200 1 PDT} + {-68655600 -28800 0 PST} + {-52927200 -25200 1 PDT} + {-37206000 -28800 0 PST} + {-21477600 -25200 1 PDT} + {-5756400 -28800 0 PST} + {9972000 -25200 1 PDT} + {25693200 -28800 0 PST} + {41421600 -25200 1 PDT} + {57747600 -28800 0 PST} + {73476000 -25200 1 PDT} + {89197200 -28800 0 PST} + {104925600 -25200 1 PDT} + {120646800 -28800 0 PST} + {126698400 -25200 1 PDT} + {152096400 -28800 0 PST} + {162381600 -25200 1 PDT} + {183546000 -28800 0 PST} + {199274400 -25200 1 PDT} + {215600400 -28800 0 PST} + {230724000 -25200 1 PDT} + {247050000 -28800 0 PST} + {262778400 -25200 1 PDT} + {278499600 -28800 0 PST} + {294228000 -25200 1 PDT} + {309949200 -28800 0 PST} + {325677600 -25200 1 PDT} + {341398800 -28800 0 PST} + {357127200 -25200 1 PDT} + {372848400 -28800 0 PST} + {388576800 -25200 1 PDT} + {404902800 -28800 0 PST} + {420026400 -25200 1 PDT} + {436352400 -28800 0 PST} + {452080800 -25200 1 PDT} + {467802000 -28800 0 PST} + {483530400 -25200 1 PDT} + {499251600 -28800 0 PST} + {514980000 -25200 1 PDT} + {530701200 -28800 0 PST} + {544615200 -25200 1 PDT} + {562150800 -28800 0 PST} + {576064800 -25200 1 PDT} + {594205200 -28800 0 PST} + {607514400 -25200 1 PDT} + {625654800 -28800 0 PST} + {638964000 -25200 1 PDT} + {657104400 -28800 0 PST} + {671018400 -25200 1 PDT} + {688554000 -28800 0 PST} + {702468000 -25200 1 PDT} + {720003600 -28800 0 PST} + {733917600 -25200 1 PDT} + {752058000 -28800 0 PST} + {765367200 -25200 1 PDT} + {783507600 -28800 0 PST} + {796816800 -25200 1 PDT} + {814957200 -28800 0 PST} + {828871200 -25200 1 PDT} + {846406800 -28800 0 PST} + {860320800 -25200 1 PDT} + {877856400 -28800 0 PST} + {891770400 -25200 1 PDT} + {909306000 -28800 0 PST} + {923220000 -25200 1 PDT} + {941360400 -28800 0 PST} + {954669600 -25200 1 PDT} + {972810000 -28800 0 PST} + {986119200 -25200 1 PDT} + {1004259600 -28800 0 PST} + {1018173600 -25200 1 PDT} + {1035709200 -28800 0 PST} + {1049623200 -25200 1 PDT} + {1067158800 -28800 0 PST} + {1081072800 -25200 1 PDT} + {1099213200 -28800 0 PST} + {1112522400 -25200 1 PDT} + {1130662800 -28800 0 PST} + {1143972000 -25200 1 PDT} + {1162112400 -28800 0 PST} + {1173607200 -25200 1 PDT} + {1194166800 -28800 0 PST} + {1205056800 -25200 1 PDT} + {1225616400 -28800 0 PST} + {1236506400 -25200 1 PDT} + {1257066000 -28800 0 PST} + {1268560800 -25200 1 PDT} + {1289120400 -28800 0 PST} + {1300010400 -25200 1 PDT} + {1320570000 -28800 0 PST} + {1331460000 -25200 1 PDT} + {1352019600 -28800 0 PST} + {1362909600 -25200 1 PDT} + {1383469200 -28800 0 PST} + {1394359200 -25200 1 PDT} + {1414918800 -28800 0 PST} + {1425808800 -25200 1 PDT} + {1446368400 -28800 0 PST} + {1457863200 -25200 1 PDT} + {1478422800 -28800 0 PST} + {1489312800 -25200 1 PDT} + {1509872400 -28800 0 PST} + {1520762400 -25200 1 PDT} + {1541322000 -28800 0 PST} + {1552212000 -25200 1 PDT} + {1572771600 -28800 0 PST} + {1583661600 -25200 1 PDT} + {1604221200 -28800 0 PST} + {1615716000 -25200 1 PDT} + {1636275600 -28800 0 PST} + {1647165600 -25200 1 PDT} + {1667725200 -28800 0 PST} + {1678615200 -25200 1 PDT} + {1699174800 -28800 0 PST} + {1710064800 -25200 1 PDT} + {1730624400 -28800 0 PST} + {1741514400 -25200 1 PDT} + {1762074000 -28800 0 PST} + {1772964000 -25200 1 PDT} + {1793523600 -28800 0 PST} + {1805018400 -25200 1 PDT} + {1825578000 -28800 0 PST} + {1836468000 -25200 1 PDT} + {1857027600 -28800 0 PST} + {1867917600 -25200 1 PDT} + {1888477200 -28800 0 PST} + {1899367200 -25200 1 PDT} + {1919926800 -28800 0 PST} + {1930816800 -25200 1 PDT} + {1951376400 -28800 0 PST} + {1962871200 -25200 1 PDT} + {1983430800 -28800 0 PST} + {1994320800 -25200 1 PDT} + {2014880400 -28800 0 PST} + {2025770400 -25200 1 PDT} + {2046330000 -28800 0 PST} + {2057220000 -25200 1 PDT} + {2077779600 -28800 0 PST} + {2088669600 -25200 1 PDT} + {2109229200 -28800 0 PST} + {2120119200 -25200 1 PDT} + {2140678800 -28800 0 PST} + {2152173600 -25200 1 PDT} + {2172733200 -28800 0 PST} + {2183623200 -25200 1 PDT} + {2204182800 -28800 0 PST} + {2215072800 -25200 1 PDT} + {2235632400 -28800 0 PST} + {2246522400 -25200 1 PDT} + {2267082000 -28800 0 PST} + {2277972000 -25200 1 PDT} + {2298531600 -28800 0 PST} + {2309421600 -25200 1 PDT} + {2329981200 -28800 0 PST} + {2341476000 -25200 1 PDT} + {2362035600 -28800 0 PST} + {2372925600 -25200 1 PDT} + {2393485200 -28800 0 PST} + {2404375200 -25200 1 PDT} + {2424934800 -28800 0 PST} + {2435824800 -25200 1 PDT} + {2456384400 -28800 0 PST} + {2467274400 -25200 1 PDT} + {2487834000 -28800 0 PST} + {2499328800 -25200 1 PDT} + {2519888400 -28800 0 PST} + {2530778400 -25200 1 PDT} + {2551338000 -28800 0 PST} + {2562228000 -25200 1 PDT} + {2582787600 -28800 0 PST} + {2593677600 -25200 1 PDT} + {2614237200 -28800 0 PST} + {2625127200 -25200 1 PDT} + {2645686800 -28800 0 PST} + {2656576800 -25200 1 PDT} + {2677136400 -28800 0 PST} + {2688631200 -25200 1 PDT} + {2709190800 -28800 0 PST} + {2720080800 -25200 1 PDT} + {2740640400 -28800 0 PST} + {2751530400 -25200 1 PDT} + {2772090000 -28800 0 PST} + {2782980000 -25200 1 PDT} + {2803539600 -28800 0 PST} + {2814429600 -25200 1 PDT} + {2834989200 -28800 0 PST} + {2846484000 -25200 1 PDT} + {2867043600 -28800 0 PST} + {2877933600 -25200 1 PDT} + {2898493200 -28800 0 PST} + {2909383200 -25200 1 PDT} + {2929942800 -28800 0 PST} + {2940832800 -25200 1 PDT} + {2961392400 -28800 0 PST} + {2972282400 -25200 1 PDT} + {2992842000 -28800 0 PST} + {3003732000 -25200 1 PDT} + {3024291600 -28800 0 PST} + {3035786400 -25200 1 PDT} + {3056346000 -28800 0 PST} + {3067236000 -25200 1 PDT} + {3087795600 -28800 0 PST} + {3098685600 -25200 1 PDT} + {3119245200 -28800 0 PST} + {3130135200 -25200 1 PDT} + {3150694800 -28800 0 PST} + {3161584800 -25200 1 PDT} + {3182144400 -28800 0 PST} + {3193034400 -25200 1 PDT} + {3213594000 -28800 0 PST} + {3225088800 -25200 1 PDT} + {3245648400 -28800 0 PST} + {3256538400 -25200 1 PDT} + {3277098000 -28800 0 PST} + {3287988000 -25200 1 PDT} + {3308547600 -28800 0 PST} + {3319437600 -25200 1 PDT} + {3339997200 -28800 0 PST} + {3350887200 -25200 1 PDT} + {3371446800 -28800 0 PST} + {3382941600 -25200 1 PDT} + {3403501200 -28800 0 PST} + {3414391200 -25200 1 PDT} + {3434950800 -28800 0 PST} + {3445840800 -25200 1 PDT} + {3466400400 -28800 0 PST} + {3477290400 -25200 1 PDT} + {3497850000 -28800 0 PST} + {3508740000 -25200 1 PDT} + {3529299600 -28800 0 PST} + {3540189600 -25200 1 PDT} + {3560749200 -28800 0 PST} + {3572244000 -25200 1 PDT} + {3592803600 -28800 0 PST} + {3603693600 -25200 1 PDT} + {3624253200 -28800 0 PST} + {3635143200 -25200 1 PDT} + {3655702800 -28800 0 PST} + {3666592800 -25200 1 PDT} + {3687152400 -28800 0 PST} + {3698042400 -25200 1 PDT} + {3718602000 -28800 0 PST} + {3730096800 -25200 1 PDT} + {3750656400 -28800 0 PST} + {3761546400 -25200 1 PDT} + {3782106000 -28800 0 PST} + {3792996000 -25200 1 PDT} + {3813555600 -28800 0 PST} + {3824445600 -25200 1 PDT} + {3845005200 -28800 0 PST} + {3855895200 -25200 1 PDT} + {3876454800 -28800 0 PST} + {3887344800 -25200 1 PDT} + {3907904400 -28800 0 PST} + {3919399200 -25200 1 PDT} + {3939958800 -28800 0 PST} + {3950848800 -25200 1 PDT} + {3971408400 -28800 0 PST} + {3982298400 -25200 1 PDT} + {4002858000 -28800 0 PST} + {4013748000 -25200 1 PDT} + {4034307600 -28800 0 PST} + {4045197600 -25200 1 PDT} + {4065757200 -28800 0 PST} + {4076647200 -25200 1 PDT} + {4097206800 -28800 0 PST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Louisville b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Louisville new file mode 100644 index 00000000..c5a3e1c8 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Louisville @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Kentucky/Louisville)]} { + LoadTimeZoneFile America/Kentucky/Louisville +} +set TZData(:America/Louisville) $TZData(:America/Kentucky/Louisville) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Lower_Princes b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Lower_Princes new file mode 100644 index 00000000..94c9197f --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Lower_Princes @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Curacao)]} { + LoadTimeZoneFile America/Curacao +} +set TZData(:America/Lower_Princes) $TZData(:America/Curacao) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Maceio b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Maceio new file mode 100644 index 00000000..333b878a --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Maceio @@ -0,0 +1,52 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Maceio) { + {-9223372036854775808 -8572 0 LMT} + {-1767217028 -10800 0 BRT} + {-1206957600 -7200 1 BRST} + {-1191362400 -10800 0 BRT} + {-1175374800 -7200 1 BRST} + {-1159826400 -10800 0 BRT} + {-633819600 -7200 1 BRST} + {-622069200 -10800 0 BRT} + {-602283600 -7200 1 BRST} + {-591832800 -10800 0 BRT} + {-570747600 -7200 1 BRST} + {-560210400 -10800 0 BRT} + {-539125200 -7200 1 BRST} + {-531352800 -10800 0 BRT} + {-191365200 -7200 1 BRST} + {-184197600 -10800 0 BRT} + {-155163600 -7200 1 BRST} + {-150069600 -10800 0 BRT} + {-128898000 -7200 1 BRST} + {-121125600 -10800 0 BRT} + {-99954000 -7200 1 BRST} + {-89589600 -10800 0 BRT} + {-68418000 -7200 1 BRST} + {-57967200 -10800 0 BRT} + {499748400 -7200 1 BRST} + {511236000 -10800 0 BRT} + {530593200 -7200 1 BRST} + {540266400 -10800 0 BRT} + {562129200 -7200 1 BRST} + {571197600 -10800 0 BRT} + {592974000 -7200 1 BRST} + {602042400 -10800 0 BRT} + {624423600 -7200 1 BRST} + {634701600 -10800 0 BRT} + {653536800 -10800 0 BRT} + {813553200 -10800 0 BRT} + {813726000 -7200 1 BRST} + {824004000 -10800 0 BRT} + {841802400 -10800 0 BRT} + {938660400 -10800 0 BRT} + {938919600 -7200 1 BRST} + {951616800 -10800 0 BRT} + {970974000 -7200 1 BRST} + {972180000 -10800 0 BRT} + {1000350000 -10800 0 BRT} + {1003028400 -7200 1 BRST} + {1013911200 -10800 0 BRT} + {1033437600 -10800 0 BRT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Managua b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Managua new file mode 100644 index 00000000..f729b8ac --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Managua @@ -0,0 +1,21 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Managua) { + {-9223372036854775808 -20708 0 LMT} + {-2524500892 -20712 0 MMT} + {-1121105688 -21600 0 CST} + {105084000 -18000 0 EST} + {161758800 -21600 0 CST} + {290584800 -18000 1 CDT} + {299134800 -21600 0 CST} + {322034400 -18000 1 CDT} + {330584400 -21600 0 CST} + {694260000 -18000 0 EST} + {717310800 -21600 0 CST} + {725868000 -18000 0 EST} + {852094800 -21600 0 CST} + {1113112800 -18000 1 CDT} + {1128229200 -21600 0 CST} + {1146384000 -18000 1 CDT} + {1159682400 -21600 0 CST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Manaus b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Manaus new file mode 100644 index 00000000..058e0f7f --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Manaus @@ -0,0 +1,39 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Manaus) { + {-9223372036854775808 -14404 0 LMT} + {-1767211196 -14400 0 AMT} + {-1206954000 -10800 1 AMST} + {-1191358800 -14400 0 AMT} + {-1175371200 -10800 1 AMST} + {-1159822800 -14400 0 AMT} + {-633816000 -10800 1 AMST} + {-622065600 -14400 0 AMT} + {-602280000 -10800 1 AMST} + {-591829200 -14400 0 AMT} + {-570744000 -10800 1 AMST} + {-560206800 -14400 0 AMT} + {-539121600 -10800 1 AMST} + {-531349200 -14400 0 AMT} + {-191361600 -10800 1 AMST} + {-184194000 -14400 0 AMT} + {-155160000 -10800 1 AMST} + {-150066000 -14400 0 AMT} + {-128894400 -10800 1 AMST} + {-121122000 -14400 0 AMT} + {-99950400 -10800 1 AMST} + {-89586000 -14400 0 AMT} + {-68414400 -10800 1 AMST} + {-57963600 -14400 0 AMT} + {499752000 -10800 1 AMST} + {511239600 -14400 0 AMT} + {530596800 -10800 1 AMST} + {540270000 -14400 0 AMT} + {562132800 -10800 1 AMST} + {571201200 -14400 0 AMT} + {590036400 -14400 0 AMT} + {749188800 -14400 0 AMT} + {750830400 -10800 1 AMST} + {761713200 -14400 0 AMT} + {780202800 -14400 0 AMT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Marigot b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Marigot new file mode 100644 index 00000000..c2b38730 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Marigot @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Port_of_Spain)]} { + LoadTimeZoneFile America/Port_of_Spain +} +set TZData(:America/Marigot) $TZData(:America/Port_of_Spain) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Martinique b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Martinique new file mode 100644 index 00000000..1f1b491b --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Martinique @@ -0,0 +1,9 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Martinique) { + {-9223372036854775808 -14660 0 LMT} + {-2524506940 -14660 0 FFMT} + {-1851537340 -14400 0 AST} + {323841600 -10800 1 ADT} + {338958000 -14400 0 AST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Matamoros b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Matamoros new file mode 100644 index 00000000..2b98652b --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Matamoros @@ -0,0 +1,219 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Matamoros) { + {-9223372036854775808 -24000 0 LMT} + {-1514743200 -21600 0 CST} + {568015200 -21600 0 CST} + {576057600 -18000 1 CDT} + {594198000 -21600 0 CST} + {599637600 -21600 0 CST} + {828864000 -18000 1 CDT} + {846399600 -21600 0 CST} + {860313600 -18000 1 CDT} + {877849200 -21600 0 CST} + {891763200 -18000 1 CDT} + {909298800 -21600 0 CST} + {923212800 -18000 1 CDT} + {941353200 -21600 0 CST} + {954662400 -18000 1 CDT} + {972802800 -21600 0 CST} + {989136000 -18000 1 CDT} + {1001833200 -21600 0 CST} + {1018166400 -18000 1 CDT} + {1035702000 -21600 0 CST} + {1049616000 -18000 1 CDT} + {1067151600 -21600 0 CST} + {1081065600 -18000 1 CDT} + {1099206000 -21600 0 CST} + {1112515200 -18000 1 CDT} + {1130655600 -21600 0 CST} + {1143964800 -18000 1 CDT} + {1162105200 -21600 0 CST} + {1175414400 -18000 1 CDT} + {1193554800 -21600 0 CST} + {1207468800 -18000 1 CDT} + {1225004400 -21600 0 CST} + {1238918400 -18000 1 CDT} + {1256454000 -21600 0 CST} + {1262325600 -21600 0 CST} + {1268553600 -18000 1 CDT} + {1289113200 -21600 0 CST} + {1300003200 -18000 1 CDT} + {1320562800 -21600 0 CST} + {1331452800 -18000 1 CDT} + {1352012400 -21600 0 CST} + {1362902400 -18000 1 CDT} + {1383462000 -21600 0 CST} + {1394352000 -18000 1 CDT} + {1414911600 -21600 0 CST} + {1425801600 -18000 1 CDT} + {1446361200 -21600 0 CST} + {1457856000 -18000 1 CDT} + {1478415600 -21600 0 CST} + {1489305600 -18000 1 CDT} + {1509865200 -21600 0 CST} + {1520755200 -18000 1 CDT} + {1541314800 -21600 0 CST} + {1552204800 -18000 1 CDT} + {1572764400 -21600 0 CST} + {1583654400 -18000 1 CDT} + {1604214000 -21600 0 CST} + {1615708800 -18000 1 CDT} + {1636268400 -21600 0 CST} + {1647158400 -18000 1 CDT} + {1667718000 -21600 0 CST} + {1678608000 -18000 1 CDT} + {1699167600 -21600 0 CST} + {1710057600 -18000 1 CDT} + {1730617200 -21600 0 CST} + {1741507200 -18000 1 CDT} + {1762066800 -21600 0 CST} + {1772956800 -18000 1 CDT} + {1793516400 -21600 0 CST} + {1805011200 -18000 1 CDT} + {1825570800 -21600 0 CST} + {1836460800 -18000 1 CDT} + {1857020400 -21600 0 CST} + {1867910400 -18000 1 CDT} + {1888470000 -21600 0 CST} + {1899360000 -18000 1 CDT} + {1919919600 -21600 0 CST} + {1930809600 -18000 1 CDT} + {1951369200 -21600 0 CST} + {1962864000 -18000 1 CDT} + {1983423600 -21600 0 CST} + {1994313600 -18000 1 CDT} + {2014873200 -21600 0 CST} + {2025763200 -18000 1 CDT} + {2046322800 -21600 0 CST} + {2057212800 -18000 1 CDT} + {2077772400 -21600 0 CST} + {2088662400 -18000 1 CDT} + {2109222000 -21600 0 CST} + {2120112000 -18000 1 CDT} + {2140671600 -21600 0 CST} + {2152166400 -18000 1 CDT} + {2172726000 -21600 0 CST} + {2183616000 -18000 1 CDT} + {2204175600 -21600 0 CST} + {2215065600 -18000 1 CDT} + {2235625200 -21600 0 CST} + {2246515200 -18000 1 CDT} + {2267074800 -21600 0 CST} + {2277964800 -18000 1 CDT} + {2298524400 -21600 0 CST} + {2309414400 -18000 1 CDT} + {2329974000 -21600 0 CST} + {2341468800 -18000 1 CDT} + {2362028400 -21600 0 CST} + {2372918400 -18000 1 CDT} + {2393478000 -21600 0 CST} + {2404368000 -18000 1 CDT} + {2424927600 -21600 0 CST} + {2435817600 -18000 1 CDT} + {2456377200 -21600 0 CST} + {2467267200 -18000 1 CDT} + {2487826800 -21600 0 CST} + {2499321600 -18000 1 CDT} + {2519881200 -21600 0 CST} + {2530771200 -18000 1 CDT} + {2551330800 -21600 0 CST} + {2562220800 -18000 1 CDT} + {2582780400 -21600 0 CST} + {2593670400 -18000 1 CDT} + {2614230000 -21600 0 CST} + {2625120000 -18000 1 CDT} + {2645679600 -21600 0 CST} + {2656569600 -18000 1 CDT} + {2677129200 -21600 0 CST} + {2688624000 -18000 1 CDT} + {2709183600 -21600 0 CST} + {2720073600 -18000 1 CDT} + {2740633200 -21600 0 CST} + {2751523200 -18000 1 CDT} + {2772082800 -21600 0 CST} + {2782972800 -18000 1 CDT} + {2803532400 -21600 0 CST} + {2814422400 -18000 1 CDT} + {2834982000 -21600 0 CST} + {2846476800 -18000 1 CDT} + {2867036400 -21600 0 CST} + {2877926400 -18000 1 CDT} + {2898486000 -21600 0 CST} + {2909376000 -18000 1 CDT} + {2929935600 -21600 0 CST} + {2940825600 -18000 1 CDT} + {2961385200 -21600 0 CST} + {2972275200 -18000 1 CDT} + {2992834800 -21600 0 CST} + {3003724800 -18000 1 CDT} + {3024284400 -21600 0 CST} + {3035779200 -18000 1 CDT} + {3056338800 -21600 0 CST} + {3067228800 -18000 1 CDT} + {3087788400 -21600 0 CST} + {3098678400 -18000 1 CDT} + {3119238000 -21600 0 CST} + {3130128000 -18000 1 CDT} + {3150687600 -21600 0 CST} + {3161577600 -18000 1 CDT} + {3182137200 -21600 0 CST} + {3193027200 -18000 1 CDT} + {3213586800 -21600 0 CST} + {3225081600 -18000 1 CDT} + {3245641200 -21600 0 CST} + {3256531200 -18000 1 CDT} + {3277090800 -21600 0 CST} + {3287980800 -18000 1 CDT} + {3308540400 -21600 0 CST} + {3319430400 -18000 1 CDT} + {3339990000 -21600 0 CST} + {3350880000 -18000 1 CDT} + {3371439600 -21600 0 CST} + {3382934400 -18000 1 CDT} + {3403494000 -21600 0 CST} + {3414384000 -18000 1 CDT} + {3434943600 -21600 0 CST} + {3445833600 -18000 1 CDT} + {3466393200 -21600 0 CST} + {3477283200 -18000 1 CDT} + {3497842800 -21600 0 CST} + {3508732800 -18000 1 CDT} + {3529292400 -21600 0 CST} + {3540182400 -18000 1 CDT} + {3560742000 -21600 0 CST} + {3572236800 -18000 1 CDT} + {3592796400 -21600 0 CST} + {3603686400 -18000 1 CDT} + {3624246000 -21600 0 CST} + {3635136000 -18000 1 CDT} + {3655695600 -21600 0 CST} + {3666585600 -18000 1 CDT} + {3687145200 -21600 0 CST} + {3698035200 -18000 1 CDT} + {3718594800 -21600 0 CST} + {3730089600 -18000 1 CDT} + {3750649200 -21600 0 CST} + {3761539200 -18000 1 CDT} + {3782098800 -21600 0 CST} + {3792988800 -18000 1 CDT} + {3813548400 -21600 0 CST} + {3824438400 -18000 1 CDT} + {3844998000 -21600 0 CST} + {3855888000 -18000 1 CDT} + {3876447600 -21600 0 CST} + {3887337600 -18000 1 CDT} + {3907897200 -21600 0 CST} + {3919392000 -18000 1 CDT} + {3939951600 -21600 0 CST} + {3950841600 -18000 1 CDT} + {3971401200 -21600 0 CST} + {3982291200 -18000 1 CDT} + {4002850800 -21600 0 CST} + {4013740800 -18000 1 CDT} + {4034300400 -21600 0 CST} + {4045190400 -18000 1 CDT} + {4065750000 -21600 0 CST} + {4076640000 -18000 1 CDT} + {4097199600 -21600 0 CST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Mazatlan b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Mazatlan new file mode 100644 index 00000000..e56d7d0d --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Mazatlan @@ -0,0 +1,222 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Mazatlan) { + {-9223372036854775808 -25540 0 LMT} + {-1514739600 -25200 0 MST} + {-1343066400 -21600 0 CST} + {-1234807200 -25200 0 MST} + {-1220292000 -21600 0 CST} + {-1207159200 -25200 0 MST} + {-1191344400 -21600 0 CST} + {-873828000 -25200 0 MST} + {-661539600 -28800 0 PST} + {28800 -25200 0 MST} + {828867600 -21600 1 MDT} + {846403200 -25200 0 MST} + {860317200 -21600 1 MDT} + {877852800 -25200 0 MST} + {891766800 -21600 1 MDT} + {909302400 -25200 0 MST} + {923216400 -21600 1 MDT} + {941356800 -25200 0 MST} + {954666000 -21600 1 MDT} + {972806400 -25200 0 MST} + {989139600 -21600 1 MDT} + {1001836800 -25200 0 MST} + {1018170000 -21600 1 MDT} + {1035705600 -25200 0 MST} + {1049619600 -21600 1 MDT} + {1067155200 -25200 0 MST} + {1081069200 -21600 1 MDT} + {1099209600 -25200 0 MST} + {1112518800 -21600 1 MDT} + {1130659200 -25200 0 MST} + {1143968400 -21600 1 MDT} + {1162108800 -25200 0 MST} + {1175418000 -21600 1 MDT} + {1193558400 -25200 0 MST} + {1207472400 -21600 1 MDT} + {1225008000 -25200 0 MST} + {1238922000 -21600 1 MDT} + {1256457600 -25200 0 MST} + {1270371600 -21600 1 MDT} + {1288512000 -25200 0 MST} + {1301821200 -21600 1 MDT} + {1319961600 -25200 0 MST} + {1333270800 -21600 1 MDT} + {1351411200 -25200 0 MST} + {1365325200 -21600 1 MDT} + {1382860800 -25200 0 MST} + {1396774800 -21600 1 MDT} + {1414310400 -25200 0 MST} + {1428224400 -21600 1 MDT} + {1445760000 -25200 0 MST} + {1459674000 -21600 1 MDT} + {1477814400 -25200 0 MST} + {1491123600 -21600 1 MDT} + {1509264000 -25200 0 MST} + {1522573200 -21600 1 MDT} + {1540713600 -25200 0 MST} + {1554627600 -21600 1 MDT} + {1572163200 -25200 0 MST} + {1586077200 -21600 1 MDT} + {1603612800 -25200 0 MST} + {1617526800 -21600 1 MDT} + {1635667200 -25200 0 MST} + {1648976400 -21600 1 MDT} + {1667116800 -25200 0 MST} + {1680426000 -21600 1 MDT} + {1698566400 -25200 0 MST} + {1712480400 -21600 1 MDT} + {1730016000 -25200 0 MST} + {1743930000 -21600 1 MDT} + {1761465600 -25200 0 MST} + {1775379600 -21600 1 MDT} + {1792915200 -25200 0 MST} + {1806829200 -21600 1 MDT} + {1824969600 -25200 0 MST} + {1838278800 -21600 1 MDT} + {1856419200 -25200 0 MST} + {1869728400 -21600 1 MDT} + {1887868800 -25200 0 MST} + {1901782800 -21600 1 MDT} + {1919318400 -25200 0 MST} + {1933232400 -21600 1 MDT} + {1950768000 -25200 0 MST} + {1964682000 -21600 1 MDT} + {1982822400 -25200 0 MST} + {1996131600 -21600 1 MDT} + {2014272000 -25200 0 MST} + {2027581200 -21600 1 MDT} + {2045721600 -25200 0 MST} + {2059030800 -21600 1 MDT} + {2077171200 -25200 0 MST} + {2091085200 -21600 1 MDT} + {2108620800 -25200 0 MST} + {2122534800 -21600 1 MDT} + {2140070400 -25200 0 MST} + {2153984400 -21600 1 MDT} + {2172124800 -25200 0 MST} + {2185434000 -21600 1 MDT} + {2203574400 -25200 0 MST} + {2216883600 -21600 1 MDT} + {2235024000 -25200 0 MST} + {2248938000 -21600 1 MDT} + {2266473600 -25200 0 MST} + {2280387600 -21600 1 MDT} + {2297923200 -25200 0 MST} + {2311837200 -21600 1 MDT} + {2329372800 -25200 0 MST} + {2343286800 -21600 1 MDT} + {2361427200 -25200 0 MST} + {2374736400 -21600 1 MDT} + {2392876800 -25200 0 MST} + {2406186000 -21600 1 MDT} + {2424326400 -25200 0 MST} + {2438240400 -21600 1 MDT} + {2455776000 -25200 0 MST} + {2469690000 -21600 1 MDT} + {2487225600 -25200 0 MST} + {2501139600 -21600 1 MDT} + {2519280000 -25200 0 MST} + {2532589200 -21600 1 MDT} + {2550729600 -25200 0 MST} + {2564038800 -21600 1 MDT} + {2582179200 -25200 0 MST} + {2596093200 -21600 1 MDT} + {2613628800 -25200 0 MST} + {2627542800 -21600 1 MDT} + {2645078400 -25200 0 MST} + {2658992400 -21600 1 MDT} + {2676528000 -25200 0 MST} + {2690442000 -21600 1 MDT} + {2708582400 -25200 0 MST} + {2721891600 -21600 1 MDT} + {2740032000 -25200 0 MST} + {2753341200 -21600 1 MDT} + {2771481600 -25200 0 MST} + {2785395600 -21600 1 MDT} + {2802931200 -25200 0 MST} + {2816845200 -21600 1 MDT} + {2834380800 -25200 0 MST} + {2848294800 -21600 1 MDT} + {2866435200 -25200 0 MST} + {2879744400 -21600 1 MDT} + {2897884800 -25200 0 MST} + {2911194000 -21600 1 MDT} + {2929334400 -25200 0 MST} + {2942643600 -21600 1 MDT} + {2960784000 -25200 0 MST} + {2974698000 -21600 1 MDT} + {2992233600 -25200 0 MST} + {3006147600 -21600 1 MDT} + {3023683200 -25200 0 MST} + {3037597200 -21600 1 MDT} + {3055737600 -25200 0 MST} + {3069046800 -21600 1 MDT} + {3087187200 -25200 0 MST} + {3100496400 -21600 1 MDT} + {3118636800 -25200 0 MST} + {3132550800 -21600 1 MDT} + {3150086400 -25200 0 MST} + {3164000400 -21600 1 MDT} + {3181536000 -25200 0 MST} + {3195450000 -21600 1 MDT} + {3212985600 -25200 0 MST} + {3226899600 -21600 1 MDT} + {3245040000 -25200 0 MST} + {3258349200 -21600 1 MDT} + {3276489600 -25200 0 MST} + {3289798800 -21600 1 MDT} + {3307939200 -25200 0 MST} + {3321853200 -21600 1 MDT} + {3339388800 -25200 0 MST} + {3353302800 -21600 1 MDT} + {3370838400 -25200 0 MST} + {3384752400 -21600 1 MDT} + {3402892800 -25200 0 MST} + {3416202000 -21600 1 MDT} + {3434342400 -25200 0 MST} + {3447651600 -21600 1 MDT} + {3465792000 -25200 0 MST} + {3479706000 -21600 1 MDT} + {3497241600 -25200 0 MST} + {3511155600 -21600 1 MDT} + {3528691200 -25200 0 MST} + {3542605200 -21600 1 MDT} + {3560140800 -25200 0 MST} + {3574054800 -21600 1 MDT} + {3592195200 -25200 0 MST} + {3605504400 -21600 1 MDT} + {3623644800 -25200 0 MST} + {3636954000 -21600 1 MDT} + {3655094400 -25200 0 MST} + {3669008400 -21600 1 MDT} + {3686544000 -25200 0 MST} + {3700458000 -21600 1 MDT} + {3717993600 -25200 0 MST} + {3731907600 -21600 1 MDT} + {3750048000 -25200 0 MST} + {3763357200 -21600 1 MDT} + {3781497600 -25200 0 MST} + {3794806800 -21600 1 MDT} + {3812947200 -25200 0 MST} + {3826256400 -21600 1 MDT} + {3844396800 -25200 0 MST} + {3858310800 -21600 1 MDT} + {3875846400 -25200 0 MST} + {3889760400 -21600 1 MDT} + {3907296000 -25200 0 MST} + {3921210000 -21600 1 MDT} + {3939350400 -25200 0 MST} + {3952659600 -21600 1 MDT} + {3970800000 -25200 0 MST} + {3984109200 -21600 1 MDT} + {4002249600 -25200 0 MST} + {4016163600 -21600 1 MDT} + {4033699200 -25200 0 MST} + {4047613200 -21600 1 MDT} + {4065148800 -25200 0 MST} + {4079062800 -21600 1 MDT} + {4096598400 -25200 0 MST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Mendoza b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Mendoza new file mode 100644 index 00000000..511d83ec --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Mendoza @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Argentina/Mendoza)]} { + LoadTimeZoneFile America/Argentina/Mendoza +} +set TZData(:America/Mendoza) $TZData(:America/Argentina/Mendoza) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Menominee b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Menominee new file mode 100644 index 00000000..382aeda2 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Menominee @@ -0,0 +1,274 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Menominee) { + {-9223372036854775808 -21027 0 LMT} + {-2659759773 -21600 0 CST} + {-1633276800 -18000 1 CDT} + {-1615136400 -21600 0 CST} + {-1601827200 -18000 1 CDT} + {-1583686800 -21600 0 CST} + {-880214400 -18000 1 CWT} + {-769395600 -18000 1 CPT} + {-765392400 -21600 0 CST} + {-757360800 -21600 0 CST} + {-747244800 -18000 1 CDT} + {-733942800 -21600 0 CST} + {-116438400 -18000 1 CDT} + {-100112400 -21600 0 CST} + {-21484800 -18000 0 EST} + {104914800 -21600 0 CST} + {104918400 -18000 1 CDT} + {120639600 -21600 0 CST} + {126691200 -18000 1 CDT} + {152089200 -21600 0 CST} + {162374400 -18000 1 CDT} + {183538800 -21600 0 CST} + {199267200 -18000 1 CDT} + {215593200 -21600 0 CST} + {230716800 -18000 1 CDT} + {247042800 -21600 0 CST} + {262771200 -18000 1 CDT} + {278492400 -21600 0 CST} + {294220800 -18000 1 CDT} + {309942000 -21600 0 CST} + {325670400 -18000 1 CDT} + {341391600 -21600 0 CST} + {357120000 -18000 1 CDT} + {372841200 -21600 0 CST} + {388569600 -18000 1 CDT} + {404895600 -21600 0 CST} + {420019200 -18000 1 CDT} + {436345200 -21600 0 CST} + {452073600 -18000 1 CDT} + {467794800 -21600 0 CST} + {483523200 -18000 1 CDT} + {499244400 -21600 0 CST} + {514972800 -18000 1 CDT} + {530694000 -21600 0 CST} + {544608000 -18000 1 CDT} + {562143600 -21600 0 CST} + {576057600 -18000 1 CDT} + {594198000 -21600 0 CST} + {607507200 -18000 1 CDT} + {625647600 -21600 0 CST} + {638956800 -18000 1 CDT} + {657097200 -21600 0 CST} + {671011200 -18000 1 CDT} + {688546800 -21600 0 CST} + {702460800 -18000 1 CDT} + {719996400 -21600 0 CST} + {733910400 -18000 1 CDT} + {752050800 -21600 0 CST} + {765360000 -18000 1 CDT} + {783500400 -21600 0 CST} + {796809600 -18000 1 CDT} + {814950000 -21600 0 CST} + {828864000 -18000 1 CDT} + {846399600 -21600 0 CST} + {860313600 -18000 1 CDT} + {877849200 -21600 0 CST} + {891763200 -18000 1 CDT} + {909298800 -21600 0 CST} + {923212800 -18000 1 CDT} + {941353200 -21600 0 CST} + {954662400 -18000 1 CDT} + {972802800 -21600 0 CST} + {986112000 -18000 1 CDT} + {1004252400 -21600 0 CST} + {1018166400 -18000 1 CDT} + {1035702000 -21600 0 CST} + {1049616000 -18000 1 CDT} + {1067151600 -21600 0 CST} + {1081065600 -18000 1 CDT} + {1099206000 -21600 0 CST} + {1112515200 -18000 1 CDT} + {1130655600 -21600 0 CST} + {1143964800 -18000 1 CDT} + {1162105200 -21600 0 CST} + {1173600000 -18000 1 CDT} + {1194159600 -21600 0 CST} + {1205049600 -18000 1 CDT} + {1225609200 -21600 0 CST} + {1236499200 -18000 1 CDT} + {1257058800 -21600 0 CST} + {1268553600 -18000 1 CDT} + {1289113200 -21600 0 CST} + {1300003200 -18000 1 CDT} + {1320562800 -21600 0 CST} + {1331452800 -18000 1 CDT} + {1352012400 -21600 0 CST} + {1362902400 -18000 1 CDT} + {1383462000 -21600 0 CST} + {1394352000 -18000 1 CDT} + {1414911600 -21600 0 CST} + {1425801600 -18000 1 CDT} + {1446361200 -21600 0 CST} + {1457856000 -18000 1 CDT} + {1478415600 -21600 0 CST} + {1489305600 -18000 1 CDT} + {1509865200 -21600 0 CST} + {1520755200 -18000 1 CDT} + {1541314800 -21600 0 CST} + {1552204800 -18000 1 CDT} + {1572764400 -21600 0 CST} + {1583654400 -18000 1 CDT} + {1604214000 -21600 0 CST} + {1615708800 -18000 1 CDT} + {1636268400 -21600 0 CST} + {1647158400 -18000 1 CDT} + {1667718000 -21600 0 CST} + {1678608000 -18000 1 CDT} + {1699167600 -21600 0 CST} + {1710057600 -18000 1 CDT} + {1730617200 -21600 0 CST} + {1741507200 -18000 1 CDT} + {1762066800 -21600 0 CST} + {1772956800 -18000 1 CDT} + {1793516400 -21600 0 CST} + {1805011200 -18000 1 CDT} + {1825570800 -21600 0 CST} + {1836460800 -18000 1 CDT} + {1857020400 -21600 0 CST} + {1867910400 -18000 1 CDT} + {1888470000 -21600 0 CST} + {1899360000 -18000 1 CDT} + {1919919600 -21600 0 CST} + {1930809600 -18000 1 CDT} + {1951369200 -21600 0 CST} + {1962864000 -18000 1 CDT} + {1983423600 -21600 0 CST} + {1994313600 -18000 1 CDT} + {2014873200 -21600 0 CST} + {2025763200 -18000 1 CDT} + {2046322800 -21600 0 CST} + {2057212800 -18000 1 CDT} + {2077772400 -21600 0 CST} + {2088662400 -18000 1 CDT} + {2109222000 -21600 0 CST} + {2120112000 -18000 1 CDT} + {2140671600 -21600 0 CST} + {2152166400 -18000 1 CDT} + {2172726000 -21600 0 CST} + {2183616000 -18000 1 CDT} + {2204175600 -21600 0 CST} + {2215065600 -18000 1 CDT} + {2235625200 -21600 0 CST} + {2246515200 -18000 1 CDT} + {2267074800 -21600 0 CST} + {2277964800 -18000 1 CDT} + {2298524400 -21600 0 CST} + {2309414400 -18000 1 CDT} + {2329974000 -21600 0 CST} + {2341468800 -18000 1 CDT} + {2362028400 -21600 0 CST} + {2372918400 -18000 1 CDT} + {2393478000 -21600 0 CST} + {2404368000 -18000 1 CDT} + {2424927600 -21600 0 CST} + {2435817600 -18000 1 CDT} + {2456377200 -21600 0 CST} + {2467267200 -18000 1 CDT} + {2487826800 -21600 0 CST} + {2499321600 -18000 1 CDT} + {2519881200 -21600 0 CST} + {2530771200 -18000 1 CDT} + {2551330800 -21600 0 CST} + {2562220800 -18000 1 CDT} + {2582780400 -21600 0 CST} + {2593670400 -18000 1 CDT} + {2614230000 -21600 0 CST} + {2625120000 -18000 1 CDT} + {2645679600 -21600 0 CST} + {2656569600 -18000 1 CDT} + {2677129200 -21600 0 CST} + {2688624000 -18000 1 CDT} + {2709183600 -21600 0 CST} + {2720073600 -18000 1 CDT} + {2740633200 -21600 0 CST} + {2751523200 -18000 1 CDT} + {2772082800 -21600 0 CST} + {2782972800 -18000 1 CDT} + {2803532400 -21600 0 CST} + {2814422400 -18000 1 CDT} + {2834982000 -21600 0 CST} + {2846476800 -18000 1 CDT} + {2867036400 -21600 0 CST} + {2877926400 -18000 1 CDT} + {2898486000 -21600 0 CST} + {2909376000 -18000 1 CDT} + {2929935600 -21600 0 CST} + {2940825600 -18000 1 CDT} + {2961385200 -21600 0 CST} + {2972275200 -18000 1 CDT} + {2992834800 -21600 0 CST} + {3003724800 -18000 1 CDT} + {3024284400 -21600 0 CST} + {3035779200 -18000 1 CDT} + {3056338800 -21600 0 CST} + {3067228800 -18000 1 CDT} + {3087788400 -21600 0 CST} + {3098678400 -18000 1 CDT} + {3119238000 -21600 0 CST} + {3130128000 -18000 1 CDT} + {3150687600 -21600 0 CST} + {3161577600 -18000 1 CDT} + {3182137200 -21600 0 CST} + {3193027200 -18000 1 CDT} + {3213586800 -21600 0 CST} + {3225081600 -18000 1 CDT} + {3245641200 -21600 0 CST} + {3256531200 -18000 1 CDT} + {3277090800 -21600 0 CST} + {3287980800 -18000 1 CDT} + {3308540400 -21600 0 CST} + {3319430400 -18000 1 CDT} + {3339990000 -21600 0 CST} + {3350880000 -18000 1 CDT} + {3371439600 -21600 0 CST} + {3382934400 -18000 1 CDT} + {3403494000 -21600 0 CST} + {3414384000 -18000 1 CDT} + {3434943600 -21600 0 CST} + {3445833600 -18000 1 CDT} + {3466393200 -21600 0 CST} + {3477283200 -18000 1 CDT} + {3497842800 -21600 0 CST} + {3508732800 -18000 1 CDT} + {3529292400 -21600 0 CST} + {3540182400 -18000 1 CDT} + {3560742000 -21600 0 CST} + {3572236800 -18000 1 CDT} + {3592796400 -21600 0 CST} + {3603686400 -18000 1 CDT} + {3624246000 -21600 0 CST} + {3635136000 -18000 1 CDT} + {3655695600 -21600 0 CST} + {3666585600 -18000 1 CDT} + {3687145200 -21600 0 CST} + {3698035200 -18000 1 CDT} + {3718594800 -21600 0 CST} + {3730089600 -18000 1 CDT} + {3750649200 -21600 0 CST} + {3761539200 -18000 1 CDT} + {3782098800 -21600 0 CST} + {3792988800 -18000 1 CDT} + {3813548400 -21600 0 CST} + {3824438400 -18000 1 CDT} + {3844998000 -21600 0 CST} + {3855888000 -18000 1 CDT} + {3876447600 -21600 0 CST} + {3887337600 -18000 1 CDT} + {3907897200 -21600 0 CST} + {3919392000 -18000 1 CDT} + {3939951600 -21600 0 CST} + {3950841600 -18000 1 CDT} + {3971401200 -21600 0 CST} + {3982291200 -18000 1 CDT} + {4002850800 -21600 0 CST} + {4013740800 -18000 1 CDT} + {4034300400 -21600 0 CST} + {4045190400 -18000 1 CDT} + {4065750000 -21600 0 CST} + {4076640000 -18000 1 CDT} + {4097199600 -21600 0 CST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Merida b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Merida new file mode 100644 index 00000000..ebf59277 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Merida @@ -0,0 +1,216 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Merida) { + {-9223372036854775808 -21508 0 LMT} + {-1514743200 -21600 0 CST} + {377935200 -18000 0 EST} + {407653200 -21600 0 CST} + {828864000 -18000 1 CDT} + {846399600 -21600 0 CST} + {860313600 -18000 1 CDT} + {877849200 -21600 0 CST} + {891763200 -18000 1 CDT} + {909298800 -21600 0 CST} + {923212800 -18000 1 CDT} + {941353200 -21600 0 CST} + {954662400 -18000 1 CDT} + {972802800 -21600 0 CST} + {989136000 -18000 1 CDT} + {1001833200 -21600 0 CST} + {1018166400 -18000 1 CDT} + {1035702000 -21600 0 CST} + {1049616000 -18000 1 CDT} + {1067151600 -21600 0 CST} + {1081065600 -18000 1 CDT} + {1099206000 -21600 0 CST} + {1112515200 -18000 1 CDT} + {1130655600 -21600 0 CST} + {1143964800 -18000 1 CDT} + {1162105200 -21600 0 CST} + {1175414400 -18000 1 CDT} + {1193554800 -21600 0 CST} + {1207468800 -18000 1 CDT} + {1225004400 -21600 0 CST} + {1238918400 -18000 1 CDT} + {1256454000 -21600 0 CST} + {1270368000 -18000 1 CDT} + {1288508400 -21600 0 CST} + {1301817600 -18000 1 CDT} + {1319958000 -21600 0 CST} + {1333267200 -18000 1 CDT} + {1351407600 -21600 0 CST} + {1365321600 -18000 1 CDT} + {1382857200 -21600 0 CST} + {1396771200 -18000 1 CDT} + {1414306800 -21600 0 CST} + {1428220800 -18000 1 CDT} + {1445756400 -21600 0 CST} + {1459670400 -18000 1 CDT} + {1477810800 -21600 0 CST} + {1491120000 -18000 1 CDT} + {1509260400 -21600 0 CST} + {1522569600 -18000 1 CDT} + {1540710000 -21600 0 CST} + {1554624000 -18000 1 CDT} + {1572159600 -21600 0 CST} + {1586073600 -18000 1 CDT} + {1603609200 -21600 0 CST} + {1617523200 -18000 1 CDT} + {1635663600 -21600 0 CST} + {1648972800 -18000 1 CDT} + {1667113200 -21600 0 CST} + {1680422400 -18000 1 CDT} + {1698562800 -21600 0 CST} + {1712476800 -18000 1 CDT} + {1730012400 -21600 0 CST} + {1743926400 -18000 1 CDT} + {1761462000 -21600 0 CST} + {1775376000 -18000 1 CDT} + {1792911600 -21600 0 CST} + {1806825600 -18000 1 CDT} + {1824966000 -21600 0 CST} + {1838275200 -18000 1 CDT} + {1856415600 -21600 0 CST} + {1869724800 -18000 1 CDT} + {1887865200 -21600 0 CST} + {1901779200 -18000 1 CDT} + {1919314800 -21600 0 CST} + {1933228800 -18000 1 CDT} + {1950764400 -21600 0 CST} + {1964678400 -18000 1 CDT} + {1982818800 -21600 0 CST} + {1996128000 -18000 1 CDT} + {2014268400 -21600 0 CST} + {2027577600 -18000 1 CDT} + {2045718000 -21600 0 CST} + {2059027200 -18000 1 CDT} + {2077167600 -21600 0 CST} + {2091081600 -18000 1 CDT} + {2108617200 -21600 0 CST} + {2122531200 -18000 1 CDT} + {2140066800 -21600 0 CST} + {2153980800 -18000 1 CDT} + {2172121200 -21600 0 CST} + {2185430400 -18000 1 CDT} + {2203570800 -21600 0 CST} + {2216880000 -18000 1 CDT} + {2235020400 -21600 0 CST} + {2248934400 -18000 1 CDT} + {2266470000 -21600 0 CST} + {2280384000 -18000 1 CDT} + {2297919600 -21600 0 CST} + {2311833600 -18000 1 CDT} + {2329369200 -21600 0 CST} + {2343283200 -18000 1 CDT} + {2361423600 -21600 0 CST} + {2374732800 -18000 1 CDT} + {2392873200 -21600 0 CST} + {2406182400 -18000 1 CDT} + {2424322800 -21600 0 CST} + {2438236800 -18000 1 CDT} + {2455772400 -21600 0 CST} + {2469686400 -18000 1 CDT} + {2487222000 -21600 0 CST} + {2501136000 -18000 1 CDT} + {2519276400 -21600 0 CST} + {2532585600 -18000 1 CDT} + {2550726000 -21600 0 CST} + {2564035200 -18000 1 CDT} + {2582175600 -21600 0 CST} + {2596089600 -18000 1 CDT} + {2613625200 -21600 0 CST} + {2627539200 -18000 1 CDT} + {2645074800 -21600 0 CST} + {2658988800 -18000 1 CDT} + {2676524400 -21600 0 CST} + {2690438400 -18000 1 CDT} + {2708578800 -21600 0 CST} + {2721888000 -18000 1 CDT} + {2740028400 -21600 0 CST} + {2753337600 -18000 1 CDT} + {2771478000 -21600 0 CST} + {2785392000 -18000 1 CDT} + {2802927600 -21600 0 CST} + {2816841600 -18000 1 CDT} + {2834377200 -21600 0 CST} + {2848291200 -18000 1 CDT} + {2866431600 -21600 0 CST} + {2879740800 -18000 1 CDT} + {2897881200 -21600 0 CST} + {2911190400 -18000 1 CDT} + {2929330800 -21600 0 CST} + {2942640000 -18000 1 CDT} + {2960780400 -21600 0 CST} + {2974694400 -18000 1 CDT} + {2992230000 -21600 0 CST} + {3006144000 -18000 1 CDT} + {3023679600 -21600 0 CST} + {3037593600 -18000 1 CDT} + {3055734000 -21600 0 CST} + {3069043200 -18000 1 CDT} + {3087183600 -21600 0 CST} + {3100492800 -18000 1 CDT} + {3118633200 -21600 0 CST} + {3132547200 -18000 1 CDT} + {3150082800 -21600 0 CST} + {3163996800 -18000 1 CDT} + {3181532400 -21600 0 CST} + {3195446400 -18000 1 CDT} + {3212982000 -21600 0 CST} + {3226896000 -18000 1 CDT} + {3245036400 -21600 0 CST} + {3258345600 -18000 1 CDT} + {3276486000 -21600 0 CST} + {3289795200 -18000 1 CDT} + {3307935600 -21600 0 CST} + {3321849600 -18000 1 CDT} + {3339385200 -21600 0 CST} + {3353299200 -18000 1 CDT} + {3370834800 -21600 0 CST} + {3384748800 -18000 1 CDT} + {3402889200 -21600 0 CST} + {3416198400 -18000 1 CDT} + {3434338800 -21600 0 CST} + {3447648000 -18000 1 CDT} + {3465788400 -21600 0 CST} + {3479702400 -18000 1 CDT} + {3497238000 -21600 0 CST} + {3511152000 -18000 1 CDT} + {3528687600 -21600 0 CST} + {3542601600 -18000 1 CDT} + {3560137200 -21600 0 CST} + {3574051200 -18000 1 CDT} + {3592191600 -21600 0 CST} + {3605500800 -18000 1 CDT} + {3623641200 -21600 0 CST} + {3636950400 -18000 1 CDT} + {3655090800 -21600 0 CST} + {3669004800 -18000 1 CDT} + {3686540400 -21600 0 CST} + {3700454400 -18000 1 CDT} + {3717990000 -21600 0 CST} + {3731904000 -18000 1 CDT} + {3750044400 -21600 0 CST} + {3763353600 -18000 1 CDT} + {3781494000 -21600 0 CST} + {3794803200 -18000 1 CDT} + {3812943600 -21600 0 CST} + {3826252800 -18000 1 CDT} + {3844393200 -21600 0 CST} + {3858307200 -18000 1 CDT} + {3875842800 -21600 0 CST} + {3889756800 -18000 1 CDT} + {3907292400 -21600 0 CST} + {3921206400 -18000 1 CDT} + {3939346800 -21600 0 CST} + {3952656000 -18000 1 CDT} + {3970796400 -21600 0 CST} + {3984105600 -18000 1 CDT} + {4002246000 -21600 0 CST} + {4016160000 -18000 1 CDT} + {4033695600 -21600 0 CST} + {4047609600 -18000 1 CDT} + {4065145200 -21600 0 CST} + {4079059200 -18000 1 CDT} + {4096594800 -21600 0 CST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Metlakatla b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Metlakatla new file mode 100644 index 00000000..8ea80fae --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Metlakatla @@ -0,0 +1,43 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Metlakatla) { + {-9223372036854775808 54822 0 LMT} + {-3225366822 -31578 0 LMT} + {-2188955622 -28800 0 PST} + {-883584000 -28800 0 PST} + {-880207200 -25200 1 PWT} + {-769395600 -25200 1 PPT} + {-765385200 -28800 0 PST} + {-757353600 -28800 0 PST} + {-31507200 -28800 0 PST} + {-21477600 -25200 1 PDT} + {-5756400 -28800 0 PST} + {9972000 -25200 1 PDT} + {25693200 -28800 0 PST} + {41421600 -25200 1 PDT} + {57747600 -28800 0 PST} + {73476000 -25200 1 PDT} + {89197200 -28800 0 PST} + {104925600 -25200 1 PDT} + {120646800 -28800 0 PST} + {126698400 -25200 1 PDT} + {152096400 -28800 0 PST} + {162381600 -25200 1 PDT} + {183546000 -28800 0 PST} + {199274400 -25200 1 PDT} + {215600400 -28800 0 PST} + {230724000 -25200 1 PDT} + {247050000 -28800 0 PST} + {262778400 -25200 1 PDT} + {278499600 -28800 0 PST} + {294228000 -25200 1 PDT} + {309949200 -28800 0 PST} + {325677600 -25200 1 PDT} + {341398800 -28800 0 PST} + {357127200 -25200 1 PDT} + {372848400 -28800 0 PST} + {388576800 -25200 1 PDT} + {404902800 -28800 0 PST} + {420026400 -25200 1 PDT} + {436356000 -28800 0 PST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Mexico_City b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Mexico_City new file mode 100644 index 00000000..48462e49 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Mexico_City @@ -0,0 +1,228 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Mexico_City) { + {-9223372036854775808 -23796 0 LMT} + {-1514739600 -25200 0 MST} + {-1343066400 -21600 0 CST} + {-1234807200 -25200 0 MST} + {-1220292000 -21600 0 CST} + {-1207159200 -25200 0 MST} + {-1191344400 -21600 0 CST} + {-975261600 -18000 1 CDT} + {-963169200 -21600 0 CST} + {-917114400 -18000 1 CDT} + {-907354800 -21600 0 CST} + {-821901600 -18000 1 CWT} + {-810068400 -21600 0 CST} + {-627501600 -18000 1 CDT} + {-612990000 -21600 0 CST} + {828864000 -18000 1 CDT} + {846399600 -21600 0 CST} + {860313600 -18000 1 CDT} + {877849200 -21600 0 CST} + {891763200 -18000 1 CDT} + {909298800 -21600 0 CST} + {923212800 -18000 1 CDT} + {941353200 -21600 0 CST} + {954662400 -18000 1 CDT} + {972802800 -21600 0 CST} + {989136000 -18000 1 CDT} + {1001836800 -21600 0 CST} + {1014184800 -21600 0 CST} + {1018166400 -18000 1 CDT} + {1035702000 -21600 0 CST} + {1049616000 -18000 1 CDT} + {1067151600 -21600 0 CST} + {1081065600 -18000 1 CDT} + {1099206000 -21600 0 CST} + {1112515200 -18000 1 CDT} + {1130655600 -21600 0 CST} + {1143964800 -18000 1 CDT} + {1162105200 -21600 0 CST} + {1175414400 -18000 1 CDT} + {1193554800 -21600 0 CST} + {1207468800 -18000 1 CDT} + {1225004400 -21600 0 CST} + {1238918400 -18000 1 CDT} + {1256454000 -21600 0 CST} + {1270368000 -18000 1 CDT} + {1288508400 -21600 0 CST} + {1301817600 -18000 1 CDT} + {1319958000 -21600 0 CST} + {1333267200 -18000 1 CDT} + {1351407600 -21600 0 CST} + {1365321600 -18000 1 CDT} + {1382857200 -21600 0 CST} + {1396771200 -18000 1 CDT} + {1414306800 -21600 0 CST} + {1428220800 -18000 1 CDT} + {1445756400 -21600 0 CST} + {1459670400 -18000 1 CDT} + {1477810800 -21600 0 CST} + {1491120000 -18000 1 CDT} + {1509260400 -21600 0 CST} + {1522569600 -18000 1 CDT} + {1540710000 -21600 0 CST} + {1554624000 -18000 1 CDT} + {1572159600 -21600 0 CST} + {1586073600 -18000 1 CDT} + {1603609200 -21600 0 CST} + {1617523200 -18000 1 CDT} + {1635663600 -21600 0 CST} + {1648972800 -18000 1 CDT} + {1667113200 -21600 0 CST} + {1680422400 -18000 1 CDT} + {1698562800 -21600 0 CST} + {1712476800 -18000 1 CDT} + {1730012400 -21600 0 CST} + {1743926400 -18000 1 CDT} + {1761462000 -21600 0 CST} + {1775376000 -18000 1 CDT} + {1792911600 -21600 0 CST} + {1806825600 -18000 1 CDT} + {1824966000 -21600 0 CST} + {1838275200 -18000 1 CDT} + {1856415600 -21600 0 CST} + {1869724800 -18000 1 CDT} + {1887865200 -21600 0 CST} + {1901779200 -18000 1 CDT} + {1919314800 -21600 0 CST} + {1933228800 -18000 1 CDT} + {1950764400 -21600 0 CST} + {1964678400 -18000 1 CDT} + {1982818800 -21600 0 CST} + {1996128000 -18000 1 CDT} + {2014268400 -21600 0 CST} + {2027577600 -18000 1 CDT} + {2045718000 -21600 0 CST} + {2059027200 -18000 1 CDT} + {2077167600 -21600 0 CST} + {2091081600 -18000 1 CDT} + {2108617200 -21600 0 CST} + {2122531200 -18000 1 CDT} + {2140066800 -21600 0 CST} + {2153980800 -18000 1 CDT} + {2172121200 -21600 0 CST} + {2185430400 -18000 1 CDT} + {2203570800 -21600 0 CST} + {2216880000 -18000 1 CDT} + {2235020400 -21600 0 CST} + {2248934400 -18000 1 CDT} + {2266470000 -21600 0 CST} + {2280384000 -18000 1 CDT} + {2297919600 -21600 0 CST} + {2311833600 -18000 1 CDT} + {2329369200 -21600 0 CST} + {2343283200 -18000 1 CDT} + {2361423600 -21600 0 CST} + {2374732800 -18000 1 CDT} + {2392873200 -21600 0 CST} + {2406182400 -18000 1 CDT} + {2424322800 -21600 0 CST} + {2438236800 -18000 1 CDT} + {2455772400 -21600 0 CST} + {2469686400 -18000 1 CDT} + {2487222000 -21600 0 CST} + {2501136000 -18000 1 CDT} + {2519276400 -21600 0 CST} + {2532585600 -18000 1 CDT} + {2550726000 -21600 0 CST} + {2564035200 -18000 1 CDT} + {2582175600 -21600 0 CST} + {2596089600 -18000 1 CDT} + {2613625200 -21600 0 CST} + {2627539200 -18000 1 CDT} + {2645074800 -21600 0 CST} + {2658988800 -18000 1 CDT} + {2676524400 -21600 0 CST} + {2690438400 -18000 1 CDT} + {2708578800 -21600 0 CST} + {2721888000 -18000 1 CDT} + {2740028400 -21600 0 CST} + {2753337600 -18000 1 CDT} + {2771478000 -21600 0 CST} + {2785392000 -18000 1 CDT} + {2802927600 -21600 0 CST} + {2816841600 -18000 1 CDT} + {2834377200 -21600 0 CST} + {2848291200 -18000 1 CDT} + {2866431600 -21600 0 CST} + {2879740800 -18000 1 CDT} + {2897881200 -21600 0 CST} + {2911190400 -18000 1 CDT} + {2929330800 -21600 0 CST} + {2942640000 -18000 1 CDT} + {2960780400 -21600 0 CST} + {2974694400 -18000 1 CDT} + {2992230000 -21600 0 CST} + {3006144000 -18000 1 CDT} + {3023679600 -21600 0 CST} + {3037593600 -18000 1 CDT} + {3055734000 -21600 0 CST} + {3069043200 -18000 1 CDT} + {3087183600 -21600 0 CST} + {3100492800 -18000 1 CDT} + {3118633200 -21600 0 CST} + {3132547200 -18000 1 CDT} + {3150082800 -21600 0 CST} + {3163996800 -18000 1 CDT} + {3181532400 -21600 0 CST} + {3195446400 -18000 1 CDT} + {3212982000 -21600 0 CST} + {3226896000 -18000 1 CDT} + {3245036400 -21600 0 CST} + {3258345600 -18000 1 CDT} + {3276486000 -21600 0 CST} + {3289795200 -18000 1 CDT} + {3307935600 -21600 0 CST} + {3321849600 -18000 1 CDT} + {3339385200 -21600 0 CST} + {3353299200 -18000 1 CDT} + {3370834800 -21600 0 CST} + {3384748800 -18000 1 CDT} + {3402889200 -21600 0 CST} + {3416198400 -18000 1 CDT} + {3434338800 -21600 0 CST} + {3447648000 -18000 1 CDT} + {3465788400 -21600 0 CST} + {3479702400 -18000 1 CDT} + {3497238000 -21600 0 CST} + {3511152000 -18000 1 CDT} + {3528687600 -21600 0 CST} + {3542601600 -18000 1 CDT} + {3560137200 -21600 0 CST} + {3574051200 -18000 1 CDT} + {3592191600 -21600 0 CST} + {3605500800 -18000 1 CDT} + {3623641200 -21600 0 CST} + {3636950400 -18000 1 CDT} + {3655090800 -21600 0 CST} + {3669004800 -18000 1 CDT} + {3686540400 -21600 0 CST} + {3700454400 -18000 1 CDT} + {3717990000 -21600 0 CST} + {3731904000 -18000 1 CDT} + {3750044400 -21600 0 CST} + {3763353600 -18000 1 CDT} + {3781494000 -21600 0 CST} + {3794803200 -18000 1 CDT} + {3812943600 -21600 0 CST} + {3826252800 -18000 1 CDT} + {3844393200 -21600 0 CST} + {3858307200 -18000 1 CDT} + {3875842800 -21600 0 CST} + {3889756800 -18000 1 CDT} + {3907292400 -21600 0 CST} + {3921206400 -18000 1 CDT} + {3939346800 -21600 0 CST} + {3952656000 -18000 1 CDT} + {3970796400 -21600 0 CST} + {3984105600 -18000 1 CDT} + {4002246000 -21600 0 CST} + {4016160000 -18000 1 CDT} + {4033695600 -21600 0 CST} + {4047609600 -18000 1 CDT} + {4065145200 -21600 0 CST} + {4079059200 -18000 1 CDT} + {4096594800 -21600 0 CST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Miquelon b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Miquelon new file mode 100644 index 00000000..a7410f12 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Miquelon @@ -0,0 +1,234 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Miquelon) { + {-9223372036854775808 -13480 0 LMT} + {-1850328920 -14400 0 AST} + {326001600 -10800 0 PMST} + {536468400 -10800 0 PMST} + {544597200 -7200 1 PMDT} + {562132800 -10800 0 PMST} + {576046800 -7200 1 PMDT} + {594187200 -10800 0 PMST} + {607496400 -7200 1 PMDT} + {625636800 -10800 0 PMST} + {638946000 -7200 1 PMDT} + {657086400 -10800 0 PMST} + {671000400 -7200 1 PMDT} + {688536000 -10800 0 PMST} + {702450000 -7200 1 PMDT} + {719985600 -10800 0 PMST} + {733899600 -7200 1 PMDT} + {752040000 -10800 0 PMST} + {765349200 -7200 1 PMDT} + {783489600 -10800 0 PMST} + {796798800 -7200 1 PMDT} + {814939200 -10800 0 PMST} + {828853200 -7200 1 PMDT} + {846388800 -10800 0 PMST} + {860302800 -7200 1 PMDT} + {877838400 -10800 0 PMST} + {891752400 -7200 1 PMDT} + {909288000 -10800 0 PMST} + {923202000 -7200 1 PMDT} + {941342400 -10800 0 PMST} + {954651600 -7200 1 PMDT} + {972792000 -10800 0 PMST} + {986101200 -7200 1 PMDT} + {1004241600 -10800 0 PMST} + {1018155600 -7200 1 PMDT} + {1035691200 -10800 0 PMST} + {1049605200 -7200 1 PMDT} + {1067140800 -10800 0 PMST} + {1081054800 -7200 1 PMDT} + {1099195200 -10800 0 PMST} + {1112504400 -7200 1 PMDT} + {1130644800 -10800 0 PMST} + {1143954000 -7200 1 PMDT} + {1162094400 -10800 0 PMST} + {1173589200 -7200 1 PMDT} + {1194148800 -10800 0 PMST} + {1205038800 -7200 1 PMDT} + {1225598400 -10800 0 PMST} + {1236488400 -7200 1 PMDT} + {1257048000 -10800 0 PMST} + {1268542800 -7200 1 PMDT} + {1289102400 -10800 0 PMST} + {1299992400 -7200 1 PMDT} + {1320552000 -10800 0 PMST} + {1331442000 -7200 1 PMDT} + {1352001600 -10800 0 PMST} + {1362891600 -7200 1 PMDT} + {1383451200 -10800 0 PMST} + {1394341200 -7200 1 PMDT} + {1414900800 -10800 0 PMST} + {1425790800 -7200 1 PMDT} + {1446350400 -10800 0 PMST} + {1457845200 -7200 1 PMDT} + {1478404800 -10800 0 PMST} + {1489294800 -7200 1 PMDT} + {1509854400 -10800 0 PMST} + {1520744400 -7200 1 PMDT} + {1541304000 -10800 0 PMST} + {1552194000 -7200 1 PMDT} + {1572753600 -10800 0 PMST} + {1583643600 -7200 1 PMDT} + {1604203200 -10800 0 PMST} + {1615698000 -7200 1 PMDT} + {1636257600 -10800 0 PMST} + {1647147600 -7200 1 PMDT} + {1667707200 -10800 0 PMST} + {1678597200 -7200 1 PMDT} + {1699156800 -10800 0 PMST} + {1710046800 -7200 1 PMDT} + {1730606400 -10800 0 PMST} + {1741496400 -7200 1 PMDT} + {1762056000 -10800 0 PMST} + {1772946000 -7200 1 PMDT} + {1793505600 -10800 0 PMST} + {1805000400 -7200 1 PMDT} + {1825560000 -10800 0 PMST} + {1836450000 -7200 1 PMDT} + {1857009600 -10800 0 PMST} + {1867899600 -7200 1 PMDT} + {1888459200 -10800 0 PMST} + {1899349200 -7200 1 PMDT} + {1919908800 -10800 0 PMST} + {1930798800 -7200 1 PMDT} + {1951358400 -10800 0 PMST} + {1962853200 -7200 1 PMDT} + {1983412800 -10800 0 PMST} + {1994302800 -7200 1 PMDT} + {2014862400 -10800 0 PMST} + {2025752400 -7200 1 PMDT} + {2046312000 -10800 0 PMST} + {2057202000 -7200 1 PMDT} + {2077761600 -10800 0 PMST} + {2088651600 -7200 1 PMDT} + {2109211200 -10800 0 PMST} + {2120101200 -7200 1 PMDT} + {2140660800 -10800 0 PMST} + {2152155600 -7200 1 PMDT} + {2172715200 -10800 0 PMST} + {2183605200 -7200 1 PMDT} + {2204164800 -10800 0 PMST} + {2215054800 -7200 1 PMDT} + {2235614400 -10800 0 PMST} + {2246504400 -7200 1 PMDT} + {2267064000 -10800 0 PMST} + {2277954000 -7200 1 PMDT} + {2298513600 -10800 0 PMST} + {2309403600 -7200 1 PMDT} + {2329963200 -10800 0 PMST} + {2341458000 -7200 1 PMDT} + {2362017600 -10800 0 PMST} + {2372907600 -7200 1 PMDT} + {2393467200 -10800 0 PMST} + {2404357200 -7200 1 PMDT} + {2424916800 -10800 0 PMST} + {2435806800 -7200 1 PMDT} + {2456366400 -10800 0 PMST} + {2467256400 -7200 1 PMDT} + {2487816000 -10800 0 PMST} + {2499310800 -7200 1 PMDT} + {2519870400 -10800 0 PMST} + {2530760400 -7200 1 PMDT} + {2551320000 -10800 0 PMST} + {2562210000 -7200 1 PMDT} + {2582769600 -10800 0 PMST} + {2593659600 -7200 1 PMDT} + {2614219200 -10800 0 PMST} + {2625109200 -7200 1 PMDT} + {2645668800 -10800 0 PMST} + {2656558800 -7200 1 PMDT} + {2677118400 -10800 0 PMST} + {2688613200 -7200 1 PMDT} + {2709172800 -10800 0 PMST} + {2720062800 -7200 1 PMDT} + {2740622400 -10800 0 PMST} + {2751512400 -7200 1 PMDT} + {2772072000 -10800 0 PMST} + {2782962000 -7200 1 PMDT} + {2803521600 -10800 0 PMST} + {2814411600 -7200 1 PMDT} + {2834971200 -10800 0 PMST} + {2846466000 -7200 1 PMDT} + {2867025600 -10800 0 PMST} + {2877915600 -7200 1 PMDT} + {2898475200 -10800 0 PMST} + {2909365200 -7200 1 PMDT} + {2929924800 -10800 0 PMST} + {2940814800 -7200 1 PMDT} + {2961374400 -10800 0 PMST} + {2972264400 -7200 1 PMDT} + {2992824000 -10800 0 PMST} + {3003714000 -7200 1 PMDT} + {3024273600 -10800 0 PMST} + {3035768400 -7200 1 PMDT} + {3056328000 -10800 0 PMST} + {3067218000 -7200 1 PMDT} + {3087777600 -10800 0 PMST} + {3098667600 -7200 1 PMDT} + {3119227200 -10800 0 PMST} + {3130117200 -7200 1 PMDT} + {3150676800 -10800 0 PMST} + {3161566800 -7200 1 PMDT} + {3182126400 -10800 0 PMST} + {3193016400 -7200 1 PMDT} + {3213576000 -10800 0 PMST} + {3225070800 -7200 1 PMDT} + {3245630400 -10800 0 PMST} + {3256520400 -7200 1 PMDT} + {3277080000 -10800 0 PMST} + {3287970000 -7200 1 PMDT} + {3308529600 -10800 0 PMST} + {3319419600 -7200 1 PMDT} + {3339979200 -10800 0 PMST} + {3350869200 -7200 1 PMDT} + {3371428800 -10800 0 PMST} + {3382923600 -7200 1 PMDT} + {3403483200 -10800 0 PMST} + {3414373200 -7200 1 PMDT} + {3434932800 -10800 0 PMST} + {3445822800 -7200 1 PMDT} + {3466382400 -10800 0 PMST} + {3477272400 -7200 1 PMDT} + {3497832000 -10800 0 PMST} + {3508722000 -7200 1 PMDT} + {3529281600 -10800 0 PMST} + {3540171600 -7200 1 PMDT} + {3560731200 -10800 0 PMST} + {3572226000 -7200 1 PMDT} + {3592785600 -10800 0 PMST} + {3603675600 -7200 1 PMDT} + {3624235200 -10800 0 PMST} + {3635125200 -7200 1 PMDT} + {3655684800 -10800 0 PMST} + {3666574800 -7200 1 PMDT} + {3687134400 -10800 0 PMST} + {3698024400 -7200 1 PMDT} + {3718584000 -10800 0 PMST} + {3730078800 -7200 1 PMDT} + {3750638400 -10800 0 PMST} + {3761528400 -7200 1 PMDT} + {3782088000 -10800 0 PMST} + {3792978000 -7200 1 PMDT} + {3813537600 -10800 0 PMST} + {3824427600 -7200 1 PMDT} + {3844987200 -10800 0 PMST} + {3855877200 -7200 1 PMDT} + {3876436800 -10800 0 PMST} + {3887326800 -7200 1 PMDT} + {3907886400 -10800 0 PMST} + {3919381200 -7200 1 PMDT} + {3939940800 -10800 0 PMST} + {3950830800 -7200 1 PMDT} + {3971390400 -10800 0 PMST} + {3982280400 -7200 1 PMDT} + {4002840000 -10800 0 PMST} + {4013730000 -7200 1 PMDT} + {4034289600 -10800 0 PMST} + {4045179600 -7200 1 PMDT} + {4065739200 -10800 0 PMST} + {4076629200 -7200 1 PMDT} + {4097188800 -10800 0 PMST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Moncton b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Moncton new file mode 100644 index 00000000..d286c880 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Moncton @@ -0,0 +1,342 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Moncton) { + {-9223372036854775808 -15548 0 LMT} + {-2715882052 -18000 0 EST} + {-2131642800 -14400 0 AST} + {-1632074400 -10800 1 ADT} + {-1615143600 -14400 0 AST} + {-1167595200 -14400 0 AST} + {-1153681200 -10800 1 ADT} + {-1145822400 -14400 0 AST} + {-1122231600 -10800 1 ADT} + {-1114372800 -14400 0 AST} + {-1090782000 -10800 1 ADT} + {-1082923200 -14400 0 AST} + {-1059332400 -10800 1 ADT} + {-1051473600 -14400 0 AST} + {-1027882800 -10800 1 ADT} + {-1020024000 -14400 0 AST} + {-996433200 -10800 1 ADT} + {-988574400 -14400 0 AST} + {-965674800 -10800 1 ADT} + {-955396800 -14400 0 AST} + {-934743600 -10800 1 ADT} + {-923947200 -14400 0 AST} + {-904503600 -10800 1 ADT} + {-891892800 -14400 0 AST} + {-883598400 -14400 0 AST} + {-880221600 -10800 1 AWT} + {-769395600 -10800 1 APT} + {-765399600 -14400 0 AST} + {-757368000 -14400 0 AST} + {-747252000 -10800 1 ADT} + {-733950000 -14400 0 AST} + {-715802400 -10800 1 ADT} + {-702500400 -14400 0 AST} + {-684352800 -10800 1 ADT} + {-671050800 -14400 0 AST} + {-652903200 -10800 1 ADT} + {-639601200 -14400 0 AST} + {-620848800 -10800 1 ADT} + {-608151600 -14400 0 AST} + {-589399200 -10800 1 ADT} + {-576097200 -14400 0 AST} + {-557949600 -10800 1 ADT} + {-544647600 -14400 0 AST} + {-526500000 -10800 1 ADT} + {-513198000 -14400 0 AST} + {-495050400 -10800 1 ADT} + {-481748400 -14400 0 AST} + {-463600800 -10800 1 ADT} + {-450298800 -14400 0 AST} + {-431546400 -10800 1 ADT} + {-418244400 -14400 0 AST} + {-400096800 -10800 1 ADT} + {-384375600 -14400 0 AST} + {-368647200 -10800 1 ADT} + {-352926000 -14400 0 AST} + {-337197600 -10800 1 ADT} + {-321476400 -14400 0 AST} + {-305748000 -10800 1 ADT} + {-289422000 -14400 0 AST} + {-273693600 -10800 1 ADT} + {-257972400 -14400 0 AST} + {-242244000 -10800 1 ADT} + {-226522800 -14400 0 AST} + {-210794400 -10800 1 ADT} + {-195073200 -14400 0 AST} + {-179344800 -10800 1 ADT} + {-163623600 -14400 0 AST} + {-147895200 -10800 1 ADT} + {-131569200 -14400 0 AST} + {-116445600 -10800 1 ADT} + {-100119600 -14400 0 AST} + {-84391200 -10800 1 ADT} + {-68670000 -14400 0 AST} + {-52941600 -10800 1 ADT} + {-37220400 -14400 0 AST} + {-21492000 -10800 1 ADT} + {-5770800 -14400 0 AST} + {9957600 -10800 1 ADT} + {25678800 -14400 0 AST} + {41407200 -10800 1 ADT} + {57733200 -14400 0 AST} + {73461600 -10800 1 ADT} + {89182800 -14400 0 AST} + {94708800 -14400 0 AST} + {136360800 -10800 1 ADT} + {152082000 -14400 0 AST} + {167810400 -10800 1 ADT} + {183531600 -14400 0 AST} + {199260000 -10800 1 ADT} + {215586000 -14400 0 AST} + {230709600 -10800 1 ADT} + {247035600 -14400 0 AST} + {262764000 -10800 1 ADT} + {278485200 -14400 0 AST} + {294213600 -10800 1 ADT} + {309934800 -14400 0 AST} + {325663200 -10800 1 ADT} + {341384400 -14400 0 AST} + {357112800 -10800 1 ADT} + {372834000 -14400 0 AST} + {388562400 -10800 1 ADT} + {404888400 -14400 0 AST} + {420012000 -10800 1 ADT} + {436338000 -14400 0 AST} + {452066400 -10800 1 ADT} + {467787600 -14400 0 AST} + {483516000 -10800 1 ADT} + {499237200 -14400 0 AST} + {514965600 -10800 1 ADT} + {530686800 -14400 0 AST} + {544600800 -10800 1 ADT} + {562136400 -14400 0 AST} + {576050400 -10800 1 ADT} + {594190800 -14400 0 AST} + {607500000 -10800 1 ADT} + {625640400 -14400 0 AST} + {638949600 -10800 1 ADT} + {657090000 -14400 0 AST} + {671004000 -10800 1 ADT} + {688539600 -14400 0 AST} + {702453600 -10800 1 ADT} + {719989200 -14400 0 AST} + {725860800 -14400 0 AST} + {733896060 -10800 1 ADT} + {752036460 -14400 0 AST} + {765345660 -10800 1 ADT} + {783486060 -14400 0 AST} + {796795260 -10800 1 ADT} + {814935660 -14400 0 AST} + {828849660 -10800 1 ADT} + {846385260 -14400 0 AST} + {860299260 -10800 1 ADT} + {877834860 -14400 0 AST} + {891748860 -10800 1 ADT} + {909284460 -14400 0 AST} + {923198460 -10800 1 ADT} + {941338860 -14400 0 AST} + {954648060 -10800 1 ADT} + {972788460 -14400 0 AST} + {986097660 -10800 1 ADT} + {1004238060 -14400 0 AST} + {1018152060 -10800 1 ADT} + {1035687660 -14400 0 AST} + {1049601660 -10800 1 ADT} + {1067137260 -14400 0 AST} + {1081051260 -10800 1 ADT} + {1099191660 -14400 0 AST} + {1112500860 -10800 1 ADT} + {1130641260 -14400 0 AST} + {1143950460 -10800 1 ADT} + {1162090860 -14400 0 AST} + {1167624000 -14400 0 AST} + {1173592800 -10800 1 ADT} + {1194152400 -14400 0 AST} + {1205042400 -10800 1 ADT} + {1225602000 -14400 0 AST} + {1236492000 -10800 1 ADT} + {1257051600 -14400 0 AST} + {1268546400 -10800 1 ADT} + {1289106000 -14400 0 AST} + {1299996000 -10800 1 ADT} + {1320555600 -14400 0 AST} + {1331445600 -10800 1 ADT} + {1352005200 -14400 0 AST} + {1362895200 -10800 1 ADT} + {1383454800 -14400 0 AST} + {1394344800 -10800 1 ADT} + {1414904400 -14400 0 AST} + {1425794400 -10800 1 ADT} + {1446354000 -14400 0 AST} + {1457848800 -10800 1 ADT} + {1478408400 -14400 0 AST} + {1489298400 -10800 1 ADT} + {1509858000 -14400 0 AST} + {1520748000 -10800 1 ADT} + {1541307600 -14400 0 AST} + {1552197600 -10800 1 ADT} + {1572757200 -14400 0 AST} + {1583647200 -10800 1 ADT} + {1604206800 -14400 0 AST} + {1615701600 -10800 1 ADT} + {1636261200 -14400 0 AST} + {1647151200 -10800 1 ADT} + {1667710800 -14400 0 AST} + {1678600800 -10800 1 ADT} + {1699160400 -14400 0 AST} + {1710050400 -10800 1 ADT} + {1730610000 -14400 0 AST} + {1741500000 -10800 1 ADT} + {1762059600 -14400 0 AST} + {1772949600 -10800 1 ADT} + {1793509200 -14400 0 AST} + {1805004000 -10800 1 ADT} + {1825563600 -14400 0 AST} + {1836453600 -10800 1 ADT} + {1857013200 -14400 0 AST} + {1867903200 -10800 1 ADT} + {1888462800 -14400 0 AST} + {1899352800 -10800 1 ADT} + {1919912400 -14400 0 AST} + {1930802400 -10800 1 ADT} + {1951362000 -14400 0 AST} + {1962856800 -10800 1 ADT} + {1983416400 -14400 0 AST} + {1994306400 -10800 1 ADT} + {2014866000 -14400 0 AST} + {2025756000 -10800 1 ADT} + {2046315600 -14400 0 AST} + {2057205600 -10800 1 ADT} + {2077765200 -14400 0 AST} + {2088655200 -10800 1 ADT} + {2109214800 -14400 0 AST} + {2120104800 -10800 1 ADT} + {2140664400 -14400 0 AST} + {2152159200 -10800 1 ADT} + {2172718800 -14400 0 AST} + {2183608800 -10800 1 ADT} + {2204168400 -14400 0 AST} + {2215058400 -10800 1 ADT} + {2235618000 -14400 0 AST} + {2246508000 -10800 1 ADT} + {2267067600 -14400 0 AST} + {2277957600 -10800 1 ADT} + {2298517200 -14400 0 AST} + {2309407200 -10800 1 ADT} + {2329966800 -14400 0 AST} + {2341461600 -10800 1 ADT} + {2362021200 -14400 0 AST} + {2372911200 -10800 1 ADT} + {2393470800 -14400 0 AST} + {2404360800 -10800 1 ADT} + {2424920400 -14400 0 AST} + {2435810400 -10800 1 ADT} + {2456370000 -14400 0 AST} + {2467260000 -10800 1 ADT} + {2487819600 -14400 0 AST} + {2499314400 -10800 1 ADT} + {2519874000 -14400 0 AST} + {2530764000 -10800 1 ADT} + {2551323600 -14400 0 AST} + {2562213600 -10800 1 ADT} + {2582773200 -14400 0 AST} + {2593663200 -10800 1 ADT} + {2614222800 -14400 0 AST} + {2625112800 -10800 1 ADT} + {2645672400 -14400 0 AST} + {2656562400 -10800 1 ADT} + {2677122000 -14400 0 AST} + {2688616800 -10800 1 ADT} + {2709176400 -14400 0 AST} + {2720066400 -10800 1 ADT} + {2740626000 -14400 0 AST} + {2751516000 -10800 1 ADT} + {2772075600 -14400 0 AST} + {2782965600 -10800 1 ADT} + {2803525200 -14400 0 AST} + {2814415200 -10800 1 ADT} + {2834974800 -14400 0 AST} + {2846469600 -10800 1 ADT} + {2867029200 -14400 0 AST} + {2877919200 -10800 1 ADT} + {2898478800 -14400 0 AST} + {2909368800 -10800 1 ADT} + {2929928400 -14400 0 AST} + {2940818400 -10800 1 ADT} + {2961378000 -14400 0 AST} + {2972268000 -10800 1 ADT} + {2992827600 -14400 0 AST} + {3003717600 -10800 1 ADT} + {3024277200 -14400 0 AST} + {3035772000 -10800 1 ADT} + {3056331600 -14400 0 AST} + {3067221600 -10800 1 ADT} + {3087781200 -14400 0 AST} + {3098671200 -10800 1 ADT} + {3119230800 -14400 0 AST} + {3130120800 -10800 1 ADT} + {3150680400 -14400 0 AST} + {3161570400 -10800 1 ADT} + {3182130000 -14400 0 AST} + {3193020000 -10800 1 ADT} + {3213579600 -14400 0 AST} + {3225074400 -10800 1 ADT} + {3245634000 -14400 0 AST} + {3256524000 -10800 1 ADT} + {3277083600 -14400 0 AST} + {3287973600 -10800 1 ADT} + {3308533200 -14400 0 AST} + {3319423200 -10800 1 ADT} + {3339982800 -14400 0 AST} + {3350872800 -10800 1 ADT} + {3371432400 -14400 0 AST} + {3382927200 -10800 1 ADT} + {3403486800 -14400 0 AST} + {3414376800 -10800 1 ADT} + {3434936400 -14400 0 AST} + {3445826400 -10800 1 ADT} + {3466386000 -14400 0 AST} + {3477276000 -10800 1 ADT} + {3497835600 -14400 0 AST} + {3508725600 -10800 1 ADT} + {3529285200 -14400 0 AST} + {3540175200 -10800 1 ADT} + {3560734800 -14400 0 AST} + {3572229600 -10800 1 ADT} + {3592789200 -14400 0 AST} + {3603679200 -10800 1 ADT} + {3624238800 -14400 0 AST} + {3635128800 -10800 1 ADT} + {3655688400 -14400 0 AST} + {3666578400 -10800 1 ADT} + {3687138000 -14400 0 AST} + {3698028000 -10800 1 ADT} + {3718587600 -14400 0 AST} + {3730082400 -10800 1 ADT} + {3750642000 -14400 0 AST} + {3761532000 -10800 1 ADT} + {3782091600 -14400 0 AST} + {3792981600 -10800 1 ADT} + {3813541200 -14400 0 AST} + {3824431200 -10800 1 ADT} + {3844990800 -14400 0 AST} + {3855880800 -10800 1 ADT} + {3876440400 -14400 0 AST} + {3887330400 -10800 1 ADT} + {3907890000 -14400 0 AST} + {3919384800 -10800 1 ADT} + {3939944400 -14400 0 AST} + {3950834400 -10800 1 ADT} + {3971394000 -14400 0 AST} + {3982284000 -10800 1 ADT} + {4002843600 -14400 0 AST} + {4013733600 -10800 1 ADT} + {4034293200 -14400 0 AST} + {4045183200 -10800 1 ADT} + {4065742800 -14400 0 AST} + {4076632800 -10800 1 ADT} + {4097192400 -14400 0 AST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Monterrey b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Monterrey new file mode 100644 index 00000000..41358848 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Monterrey @@ -0,0 +1,218 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Monterrey) { + {-9223372036854775808 -24076 0 LMT} + {-1514743200 -21600 0 CST} + {568015200 -21600 0 CST} + {576057600 -18000 1 CDT} + {594198000 -21600 0 CST} + {599637600 -21600 0 CST} + {828864000 -18000 1 CDT} + {846399600 -21600 0 CST} + {860313600 -18000 1 CDT} + {877849200 -21600 0 CST} + {891763200 -18000 1 CDT} + {909298800 -21600 0 CST} + {923212800 -18000 1 CDT} + {941353200 -21600 0 CST} + {954662400 -18000 1 CDT} + {972802800 -21600 0 CST} + {989136000 -18000 1 CDT} + {1001833200 -21600 0 CST} + {1018166400 -18000 1 CDT} + {1035702000 -21600 0 CST} + {1049616000 -18000 1 CDT} + {1067151600 -21600 0 CST} + {1081065600 -18000 1 CDT} + {1099206000 -21600 0 CST} + {1112515200 -18000 1 CDT} + {1130655600 -21600 0 CST} + {1143964800 -18000 1 CDT} + {1162105200 -21600 0 CST} + {1175414400 -18000 1 CDT} + {1193554800 -21600 0 CST} + {1207468800 -18000 1 CDT} + {1225004400 -21600 0 CST} + {1238918400 -18000 1 CDT} + {1256454000 -21600 0 CST} + {1270368000 -18000 1 CDT} + {1288508400 -21600 0 CST} + {1301817600 -18000 1 CDT} + {1319958000 -21600 0 CST} + {1333267200 -18000 1 CDT} + {1351407600 -21600 0 CST} + {1365321600 -18000 1 CDT} + {1382857200 -21600 0 CST} + {1396771200 -18000 1 CDT} + {1414306800 -21600 0 CST} + {1428220800 -18000 1 CDT} + {1445756400 -21600 0 CST} + {1459670400 -18000 1 CDT} + {1477810800 -21600 0 CST} + {1491120000 -18000 1 CDT} + {1509260400 -21600 0 CST} + {1522569600 -18000 1 CDT} + {1540710000 -21600 0 CST} + {1554624000 -18000 1 CDT} + {1572159600 -21600 0 CST} + {1586073600 -18000 1 CDT} + {1603609200 -21600 0 CST} + {1617523200 -18000 1 CDT} + {1635663600 -21600 0 CST} + {1648972800 -18000 1 CDT} + {1667113200 -21600 0 CST} + {1680422400 -18000 1 CDT} + {1698562800 -21600 0 CST} + {1712476800 -18000 1 CDT} + {1730012400 -21600 0 CST} + {1743926400 -18000 1 CDT} + {1761462000 -21600 0 CST} + {1775376000 -18000 1 CDT} + {1792911600 -21600 0 CST} + {1806825600 -18000 1 CDT} + {1824966000 -21600 0 CST} + {1838275200 -18000 1 CDT} + {1856415600 -21600 0 CST} + {1869724800 -18000 1 CDT} + {1887865200 -21600 0 CST} + {1901779200 -18000 1 CDT} + {1919314800 -21600 0 CST} + {1933228800 -18000 1 CDT} + {1950764400 -21600 0 CST} + {1964678400 -18000 1 CDT} + {1982818800 -21600 0 CST} + {1996128000 -18000 1 CDT} + {2014268400 -21600 0 CST} + {2027577600 -18000 1 CDT} + {2045718000 -21600 0 CST} + {2059027200 -18000 1 CDT} + {2077167600 -21600 0 CST} + {2091081600 -18000 1 CDT} + {2108617200 -21600 0 CST} + {2122531200 -18000 1 CDT} + {2140066800 -21600 0 CST} + {2153980800 -18000 1 CDT} + {2172121200 -21600 0 CST} + {2185430400 -18000 1 CDT} + {2203570800 -21600 0 CST} + {2216880000 -18000 1 CDT} + {2235020400 -21600 0 CST} + {2248934400 -18000 1 CDT} + {2266470000 -21600 0 CST} + {2280384000 -18000 1 CDT} + {2297919600 -21600 0 CST} + {2311833600 -18000 1 CDT} + {2329369200 -21600 0 CST} + {2343283200 -18000 1 CDT} + {2361423600 -21600 0 CST} + {2374732800 -18000 1 CDT} + {2392873200 -21600 0 CST} + {2406182400 -18000 1 CDT} + {2424322800 -21600 0 CST} + {2438236800 -18000 1 CDT} + {2455772400 -21600 0 CST} + {2469686400 -18000 1 CDT} + {2487222000 -21600 0 CST} + {2501136000 -18000 1 CDT} + {2519276400 -21600 0 CST} + {2532585600 -18000 1 CDT} + {2550726000 -21600 0 CST} + {2564035200 -18000 1 CDT} + {2582175600 -21600 0 CST} + {2596089600 -18000 1 CDT} + {2613625200 -21600 0 CST} + {2627539200 -18000 1 CDT} + {2645074800 -21600 0 CST} + {2658988800 -18000 1 CDT} + {2676524400 -21600 0 CST} + {2690438400 -18000 1 CDT} + {2708578800 -21600 0 CST} + {2721888000 -18000 1 CDT} + {2740028400 -21600 0 CST} + {2753337600 -18000 1 CDT} + {2771478000 -21600 0 CST} + {2785392000 -18000 1 CDT} + {2802927600 -21600 0 CST} + {2816841600 -18000 1 CDT} + {2834377200 -21600 0 CST} + {2848291200 -18000 1 CDT} + {2866431600 -21600 0 CST} + {2879740800 -18000 1 CDT} + {2897881200 -21600 0 CST} + {2911190400 -18000 1 CDT} + {2929330800 -21600 0 CST} + {2942640000 -18000 1 CDT} + {2960780400 -21600 0 CST} + {2974694400 -18000 1 CDT} + {2992230000 -21600 0 CST} + {3006144000 -18000 1 CDT} + {3023679600 -21600 0 CST} + {3037593600 -18000 1 CDT} + {3055734000 -21600 0 CST} + {3069043200 -18000 1 CDT} + {3087183600 -21600 0 CST} + {3100492800 -18000 1 CDT} + {3118633200 -21600 0 CST} + {3132547200 -18000 1 CDT} + {3150082800 -21600 0 CST} + {3163996800 -18000 1 CDT} + {3181532400 -21600 0 CST} + {3195446400 -18000 1 CDT} + {3212982000 -21600 0 CST} + {3226896000 -18000 1 CDT} + {3245036400 -21600 0 CST} + {3258345600 -18000 1 CDT} + {3276486000 -21600 0 CST} + {3289795200 -18000 1 CDT} + {3307935600 -21600 0 CST} + {3321849600 -18000 1 CDT} + {3339385200 -21600 0 CST} + {3353299200 -18000 1 CDT} + {3370834800 -21600 0 CST} + {3384748800 -18000 1 CDT} + {3402889200 -21600 0 CST} + {3416198400 -18000 1 CDT} + {3434338800 -21600 0 CST} + {3447648000 -18000 1 CDT} + {3465788400 -21600 0 CST} + {3479702400 -18000 1 CDT} + {3497238000 -21600 0 CST} + {3511152000 -18000 1 CDT} + {3528687600 -21600 0 CST} + {3542601600 -18000 1 CDT} + {3560137200 -21600 0 CST} + {3574051200 -18000 1 CDT} + {3592191600 -21600 0 CST} + {3605500800 -18000 1 CDT} + {3623641200 -21600 0 CST} + {3636950400 -18000 1 CDT} + {3655090800 -21600 0 CST} + {3669004800 -18000 1 CDT} + {3686540400 -21600 0 CST} + {3700454400 -18000 1 CDT} + {3717990000 -21600 0 CST} + {3731904000 -18000 1 CDT} + {3750044400 -21600 0 CST} + {3763353600 -18000 1 CDT} + {3781494000 -21600 0 CST} + {3794803200 -18000 1 CDT} + {3812943600 -21600 0 CST} + {3826252800 -18000 1 CDT} + {3844393200 -21600 0 CST} + {3858307200 -18000 1 CDT} + {3875842800 -21600 0 CST} + {3889756800 -18000 1 CDT} + {3907292400 -21600 0 CST} + {3921206400 -18000 1 CDT} + {3939346800 -21600 0 CST} + {3952656000 -18000 1 CDT} + {3970796400 -21600 0 CST} + {3984105600 -18000 1 CDT} + {4002246000 -21600 0 CST} + {4016160000 -18000 1 CDT} + {4033695600 -21600 0 CST} + {4047609600 -18000 1 CDT} + {4065145200 -21600 0 CST} + {4079059200 -18000 1 CDT} + {4096594800 -21600 0 CST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Montevideo b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Montevideo new file mode 100644 index 00000000..91a51179 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Montevideo @@ -0,0 +1,92 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Montevideo) { + {-9223372036854775808 -13484 0 LMT} + {-2256668116 -13484 0 MMT} + {-1567455316 -12600 0 UYT} + {-1459542600 -10800 1 UYHST} + {-1443819600 -12600 0 UYT} + {-1428006600 -10800 1 UYHST} + {-1412283600 -12600 0 UYT} + {-1396470600 -10800 1 UYHST} + {-1380747600 -12600 0 UYT} + {-1141590600 -10800 1 UYHST} + {-1128286800 -12600 0 UYT} + {-1110141000 -10800 1 UYHST} + {-1096837200 -12600 0 UYT} + {-1078691400 -10800 1 UYHST} + {-1065387600 -12600 0 UYT} + {-1046637000 -10800 1 UYHST} + {-1033938000 -12600 0 UYT} + {-1015187400 -10800 1 UYHST} + {-1002488400 -12600 0 UYT} + {-983737800 -10800 1 UYHST} + {-971038800 -12600 0 UYT} + {-952288200 -10800 1 UYHST} + {-938984400 -12600 0 UYT} + {-920838600 -10800 1 UYHST} + {-907534800 -12600 0 UYT} + {-896819400 -10800 1 UYHST} + {-853623000 -10800 0 UYT} + {-853621200 -7200 1 UYST} + {-845848800 -10800 0 UYT} + {-334789200 -7200 1 UYST} + {-319672800 -10800 0 UYT} + {-314226000 -7200 1 UYST} + {-309996000 -10800 0 UYT} + {-149720400 -7200 1 UYST} + {-134604000 -10800 0 UYT} + {-118270800 -7200 1 UYST} + {-100044000 -10800 0 UYT} + {-86821200 -7200 1 UYST} + {-68508000 -10800 0 UYT} + {-50446800 -9000 1 UYHST} + {-34119000 -10800 0 UYT} + {-18910800 -9000 1 UYHST} + {-2583000 -10800 0 UYT} + {12625200 -9000 1 UYHST} + {28953000 -10800 0 UYT} + {72932400 -7200 1 UYST} + {82692000 -10800 0 UYT} + {132116400 -9000 1 UYHST} + {156911400 -7200 1 UYST} + {212983200 -10800 0 UYT} + {250052400 -7200 1 UYST} + {260244000 -10800 0 UYT} + {307594800 -7200 1 UYST} + {325994400 -10800 0 UYT} + {566449200 -7200 1 UYST} + {574308000 -10800 0 UYT} + {597812400 -7200 1 UYST} + {605671200 -10800 0 UYT} + {625633200 -7200 1 UYST} + {636516000 -10800 0 UYT} + {656478000 -7200 1 UYST} + {667965600 -10800 0 UYT} + {688532400 -7200 1 UYST} + {699415200 -10800 0 UYT} + {719377200 -7200 1 UYST} + {730864800 -10800 0 UYT} + {1095562800 -7200 1 UYST} + {1111896000 -10800 0 UYT} + {1128834000 -7200 1 UYST} + {1142136000 -10800 0 UYT} + {1159678800 -7200 1 UYST} + {1173585600 -10800 0 UYT} + {1191733200 -7200 1 UYST} + {1205035200 -10800 0 UYT} + {1223182800 -7200 1 UYST} + {1236484800 -10800 0 UYT} + {1254632400 -7200 1 UYST} + {1268539200 -10800 0 UYT} + {1286082000 -7200 1 UYST} + {1299988800 -10800 0 UYT} + {1317531600 -7200 1 UYST} + {1331438400 -10800 0 UYT} + {1349586000 -7200 1 UYST} + {1362888000 -10800 0 UYT} + {1381035600 -7200 1 UYST} + {1394337600 -10800 0 UYT} + {1412485200 -7200 1 UYST} + {1425787200 -10800 0 UYT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Montreal b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Montreal new file mode 100644 index 00000000..0ead8eec --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Montreal @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Toronto)]} { + LoadTimeZoneFile America/Toronto +} +set TZData(:America/Montreal) $TZData(:America/Toronto) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Montserrat b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Montserrat new file mode 100644 index 00000000..0a656d33 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Montserrat @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Port_of_Spain)]} { + LoadTimeZoneFile America/Port_of_Spain +} +set TZData(:America/Montserrat) $TZData(:America/Port_of_Spain) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Nassau b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Nassau new file mode 100644 index 00000000..1c35e93e --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Nassau @@ -0,0 +1,279 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Nassau) { + {-9223372036854775808 -18570 0 LMT} + {-1825095030 -18000 0 EST} + {-179341200 -14400 1 EDT} + {-163620000 -18000 0 EST} + {-147891600 -14400 1 EDT} + {-131565600 -18000 0 EST} + {-116442000 -14400 1 EDT} + {-100116000 -18000 0 EST} + {-84387600 -14400 1 EDT} + {-68666400 -18000 0 EST} + {-52938000 -14400 1 EDT} + {-37216800 -18000 0 EST} + {-21488400 -14400 1 EDT} + {-5767200 -18000 0 EST} + {9961200 -14400 1 EDT} + {25682400 -18000 0 EST} + {41410800 -14400 1 EDT} + {57736800 -18000 0 EST} + {73465200 -14400 1 EDT} + {89186400 -18000 0 EST} + {104914800 -14400 1 EDT} + {120636000 -18000 0 EST} + {136364400 -14400 1 EDT} + {152085600 -18000 0 EST} + {167814000 -14400 1 EDT} + {183535200 -18000 0 EST} + {189320400 -18000 0 EST} + {199263600 -14400 1 EDT} + {215589600 -18000 0 EST} + {230713200 -14400 1 EDT} + {247039200 -18000 0 EST} + {262767600 -14400 1 EDT} + {278488800 -18000 0 EST} + {294217200 -14400 1 EDT} + {309938400 -18000 0 EST} + {325666800 -14400 1 EDT} + {341388000 -18000 0 EST} + {357116400 -14400 1 EDT} + {372837600 -18000 0 EST} + {388566000 -14400 1 EDT} + {404892000 -18000 0 EST} + {420015600 -14400 1 EDT} + {436341600 -18000 0 EST} + {452070000 -14400 1 EDT} + {467791200 -18000 0 EST} + {483519600 -14400 1 EDT} + {499240800 -18000 0 EST} + {514969200 -14400 1 EDT} + {530690400 -18000 0 EST} + {544604400 -14400 1 EDT} + {562140000 -18000 0 EST} + {576054000 -14400 1 EDT} + {594194400 -18000 0 EST} + {607503600 -14400 1 EDT} + {625644000 -18000 0 EST} + {638953200 -14400 1 EDT} + {657093600 -18000 0 EST} + {671007600 -14400 1 EDT} + {688543200 -18000 0 EST} + {702457200 -14400 1 EDT} + {719992800 -18000 0 EST} + {733906800 -14400 1 EDT} + {752047200 -18000 0 EST} + {765356400 -14400 1 EDT} + {783496800 -18000 0 EST} + {796806000 -14400 1 EDT} + {814946400 -18000 0 EST} + {828860400 -14400 1 EDT} + {846396000 -18000 0 EST} + {860310000 -14400 1 EDT} + {877845600 -18000 0 EST} + {891759600 -14400 1 EDT} + {909295200 -18000 0 EST} + {923209200 -14400 1 EDT} + {941349600 -18000 0 EST} + {954658800 -14400 1 EDT} + {972799200 -18000 0 EST} + {986108400 -14400 1 EDT} + {1004248800 -18000 0 EST} + {1018162800 -14400 1 EDT} + {1035698400 -18000 0 EST} + {1049612400 -14400 1 EDT} + {1067148000 -18000 0 EST} + {1081062000 -14400 1 EDT} + {1099202400 -18000 0 EST} + {1112511600 -14400 1 EDT} + {1130652000 -18000 0 EST} + {1143961200 -14400 1 EDT} + {1162101600 -18000 0 EST} + {1173596400 -14400 1 EDT} + {1194156000 -18000 0 EST} + {1205046000 -14400 1 EDT} + {1225605600 -18000 0 EST} + {1236495600 -14400 1 EDT} + {1257055200 -18000 0 EST} + {1268550000 -14400 1 EDT} + {1289109600 -18000 0 EST} + {1299999600 -14400 1 EDT} + {1320559200 -18000 0 EST} + {1331449200 -14400 1 EDT} + {1352008800 -18000 0 EST} + {1362898800 -14400 1 EDT} + {1383458400 -18000 0 EST} + {1394348400 -14400 1 EDT} + {1414908000 -18000 0 EST} + {1425798000 -14400 1 EDT} + {1446357600 -18000 0 EST} + {1457852400 -14400 1 EDT} + {1478412000 -18000 0 EST} + {1489302000 -14400 1 EDT} + {1509861600 -18000 0 EST} + {1520751600 -14400 1 EDT} + {1541311200 -18000 0 EST} + {1552201200 -14400 1 EDT} + {1572760800 -18000 0 EST} + {1583650800 -14400 1 EDT} + {1604210400 -18000 0 EST} + {1615705200 -14400 1 EDT} + {1636264800 -18000 0 EST} + {1647154800 -14400 1 EDT} + {1667714400 -18000 0 EST} + {1678604400 -14400 1 EDT} + {1699164000 -18000 0 EST} + {1710054000 -14400 1 EDT} + {1730613600 -18000 0 EST} + {1741503600 -14400 1 EDT} + {1762063200 -18000 0 EST} + {1772953200 -14400 1 EDT} + {1793512800 -18000 0 EST} + {1805007600 -14400 1 EDT} + {1825567200 -18000 0 EST} + {1836457200 -14400 1 EDT} + {1857016800 -18000 0 EST} + {1867906800 -14400 1 EDT} + {1888466400 -18000 0 EST} + {1899356400 -14400 1 EDT} + {1919916000 -18000 0 EST} + {1930806000 -14400 1 EDT} + {1951365600 -18000 0 EST} + {1962860400 -14400 1 EDT} + {1983420000 -18000 0 EST} + {1994310000 -14400 1 EDT} + {2014869600 -18000 0 EST} + {2025759600 -14400 1 EDT} + {2046319200 -18000 0 EST} + {2057209200 -14400 1 EDT} + {2077768800 -18000 0 EST} + {2088658800 -14400 1 EDT} + {2109218400 -18000 0 EST} + {2120108400 -14400 1 EDT} + {2140668000 -18000 0 EST} + {2152162800 -14400 1 EDT} + {2172722400 -18000 0 EST} + {2183612400 -14400 1 EDT} + {2204172000 -18000 0 EST} + {2215062000 -14400 1 EDT} + {2235621600 -18000 0 EST} + {2246511600 -14400 1 EDT} + {2267071200 -18000 0 EST} + {2277961200 -14400 1 EDT} + {2298520800 -18000 0 EST} + {2309410800 -14400 1 EDT} + {2329970400 -18000 0 EST} + {2341465200 -14400 1 EDT} + {2362024800 -18000 0 EST} + {2372914800 -14400 1 EDT} + {2393474400 -18000 0 EST} + {2404364400 -14400 1 EDT} + {2424924000 -18000 0 EST} + {2435814000 -14400 1 EDT} + {2456373600 -18000 0 EST} + {2467263600 -14400 1 EDT} + {2487823200 -18000 0 EST} + {2499318000 -14400 1 EDT} + {2519877600 -18000 0 EST} + {2530767600 -14400 1 EDT} + {2551327200 -18000 0 EST} + {2562217200 -14400 1 EDT} + {2582776800 -18000 0 EST} + {2593666800 -14400 1 EDT} + {2614226400 -18000 0 EST} + {2625116400 -14400 1 EDT} + {2645676000 -18000 0 EST} + {2656566000 -14400 1 EDT} + {2677125600 -18000 0 EST} + {2688620400 -14400 1 EDT} + {2709180000 -18000 0 EST} + {2720070000 -14400 1 EDT} + {2740629600 -18000 0 EST} + {2751519600 -14400 1 EDT} + {2772079200 -18000 0 EST} + {2782969200 -14400 1 EDT} + {2803528800 -18000 0 EST} + {2814418800 -14400 1 EDT} + {2834978400 -18000 0 EST} + {2846473200 -14400 1 EDT} + {2867032800 -18000 0 EST} + {2877922800 -14400 1 EDT} + {2898482400 -18000 0 EST} + {2909372400 -14400 1 EDT} + {2929932000 -18000 0 EST} + {2940822000 -14400 1 EDT} + {2961381600 -18000 0 EST} + {2972271600 -14400 1 EDT} + {2992831200 -18000 0 EST} + {3003721200 -14400 1 EDT} + {3024280800 -18000 0 EST} + {3035775600 -14400 1 EDT} + {3056335200 -18000 0 EST} + {3067225200 -14400 1 EDT} + {3087784800 -18000 0 EST} + {3098674800 -14400 1 EDT} + {3119234400 -18000 0 EST} + {3130124400 -14400 1 EDT} + {3150684000 -18000 0 EST} + {3161574000 -14400 1 EDT} + {3182133600 -18000 0 EST} + {3193023600 -14400 1 EDT} + {3213583200 -18000 0 EST} + {3225078000 -14400 1 EDT} + {3245637600 -18000 0 EST} + {3256527600 -14400 1 EDT} + {3277087200 -18000 0 EST} + {3287977200 -14400 1 EDT} + {3308536800 -18000 0 EST} + {3319426800 -14400 1 EDT} + {3339986400 -18000 0 EST} + {3350876400 -14400 1 EDT} + {3371436000 -18000 0 EST} + {3382930800 -14400 1 EDT} + {3403490400 -18000 0 EST} + {3414380400 -14400 1 EDT} + {3434940000 -18000 0 EST} + {3445830000 -14400 1 EDT} + {3466389600 -18000 0 EST} + {3477279600 -14400 1 EDT} + {3497839200 -18000 0 EST} + {3508729200 -14400 1 EDT} + {3529288800 -18000 0 EST} + {3540178800 -14400 1 EDT} + {3560738400 -18000 0 EST} + {3572233200 -14400 1 EDT} + {3592792800 -18000 0 EST} + {3603682800 -14400 1 EDT} + {3624242400 -18000 0 EST} + {3635132400 -14400 1 EDT} + {3655692000 -18000 0 EST} + {3666582000 -14400 1 EDT} + {3687141600 -18000 0 EST} + {3698031600 -14400 1 EDT} + {3718591200 -18000 0 EST} + {3730086000 -14400 1 EDT} + {3750645600 -18000 0 EST} + {3761535600 -14400 1 EDT} + {3782095200 -18000 0 EST} + {3792985200 -14400 1 EDT} + {3813544800 -18000 0 EST} + {3824434800 -14400 1 EDT} + {3844994400 -18000 0 EST} + {3855884400 -14400 1 EDT} + {3876444000 -18000 0 EST} + {3887334000 -14400 1 EDT} + {3907893600 -18000 0 EST} + {3919388400 -14400 1 EDT} + {3939948000 -18000 0 EST} + {3950838000 -14400 1 EDT} + {3971397600 -18000 0 EST} + {3982287600 -14400 1 EDT} + {4002847200 -18000 0 EST} + {4013737200 -14400 1 EDT} + {4034296800 -18000 0 EST} + {4045186800 -14400 1 EDT} + {4065746400 -18000 0 EST} + {4076636400 -14400 1 EDT} + {4097196000 -18000 0 EST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/New_York b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/New_York new file mode 100644 index 00000000..72f2c961 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/New_York @@ -0,0 +1,369 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/New_York) { + {-9223372036854775808 -17762 0 LMT} + {-2717650800 -18000 0 EST} + {-1633280400 -14400 1 EDT} + {-1615140000 -18000 0 EST} + {-1601830800 -14400 1 EDT} + {-1583690400 -18000 0 EST} + {-1577905200 -18000 0 EST} + {-1570381200 -14400 1 EDT} + {-1551636000 -18000 0 EST} + {-1536512400 -14400 1 EDT} + {-1523210400 -18000 0 EST} + {-1504458000 -14400 1 EDT} + {-1491760800 -18000 0 EST} + {-1473008400 -14400 1 EDT} + {-1459706400 -18000 0 EST} + {-1441558800 -14400 1 EDT} + {-1428256800 -18000 0 EST} + {-1410109200 -14400 1 EDT} + {-1396807200 -18000 0 EST} + {-1378659600 -14400 1 EDT} + {-1365357600 -18000 0 EST} + {-1347210000 -14400 1 EDT} + {-1333908000 -18000 0 EST} + {-1315155600 -14400 1 EDT} + {-1301853600 -18000 0 EST} + {-1283706000 -14400 1 EDT} + {-1270404000 -18000 0 EST} + {-1252256400 -14400 1 EDT} + {-1238954400 -18000 0 EST} + {-1220806800 -14400 1 EDT} + {-1207504800 -18000 0 EST} + {-1189357200 -14400 1 EDT} + {-1176055200 -18000 0 EST} + {-1157302800 -14400 1 EDT} + {-1144605600 -18000 0 EST} + {-1125853200 -14400 1 EDT} + {-1112551200 -18000 0 EST} + {-1094403600 -14400 1 EDT} + {-1081101600 -18000 0 EST} + {-1062954000 -14400 1 EDT} + {-1049652000 -18000 0 EST} + {-1031504400 -14400 1 EDT} + {-1018202400 -18000 0 EST} + {-1000054800 -14400 1 EDT} + {-986752800 -18000 0 EST} + {-968000400 -14400 1 EDT} + {-955303200 -18000 0 EST} + {-936550800 -14400 1 EDT} + {-923248800 -18000 0 EST} + {-905101200 -14400 1 EDT} + {-891799200 -18000 0 EST} + {-883594800 -18000 0 EST} + {-880218000 -14400 1 EWT} + {-769395600 -14400 1 EPT} + {-765396000 -18000 0 EST} + {-757364400 -18000 0 EST} + {-747248400 -14400 1 EDT} + {-733946400 -18000 0 EST} + {-715798800 -14400 1 EDT} + {-702496800 -18000 0 EST} + {-684349200 -14400 1 EDT} + {-671047200 -18000 0 EST} + {-652899600 -14400 1 EDT} + {-639597600 -18000 0 EST} + {-620845200 -14400 1 EDT} + {-608148000 -18000 0 EST} + {-589395600 -14400 1 EDT} + {-576093600 -18000 0 EST} + {-557946000 -14400 1 EDT} + {-544644000 -18000 0 EST} + {-526496400 -14400 1 EDT} + {-513194400 -18000 0 EST} + {-495046800 -14400 1 EDT} + {-481744800 -18000 0 EST} + {-463597200 -14400 1 EDT} + {-447271200 -18000 0 EST} + {-431542800 -14400 1 EDT} + {-415821600 -18000 0 EST} + {-400093200 -14400 1 EDT} + {-384372000 -18000 0 EST} + {-368643600 -14400 1 EDT} + {-352922400 -18000 0 EST} + {-337194000 -14400 1 EDT} + {-321472800 -18000 0 EST} + {-305744400 -14400 1 EDT} + {-289418400 -18000 0 EST} + {-273690000 -14400 1 EDT} + {-257968800 -18000 0 EST} + {-242240400 -14400 1 EDT} + {-226519200 -18000 0 EST} + {-210790800 -14400 1 EDT} + {-195069600 -18000 0 EST} + {-179341200 -14400 1 EDT} + {-163620000 -18000 0 EST} + {-147891600 -14400 1 EDT} + {-131565600 -18000 0 EST} + {-116442000 -14400 1 EDT} + {-100116000 -18000 0 EST} + {-94676400 -18000 0 EST} + {-84387600 -14400 1 EDT} + {-68666400 -18000 0 EST} + {-52938000 -14400 1 EDT} + {-37216800 -18000 0 EST} + {-21488400 -14400 1 EDT} + {-5767200 -18000 0 EST} + {9961200 -14400 1 EDT} + {25682400 -18000 0 EST} + {41410800 -14400 1 EDT} + {57736800 -18000 0 EST} + {73465200 -14400 1 EDT} + {89186400 -18000 0 EST} + {104914800 -14400 1 EDT} + {120636000 -18000 0 EST} + {126687600 -14400 1 EDT} + {152085600 -18000 0 EST} + {162370800 -14400 1 EDT} + {183535200 -18000 0 EST} + {199263600 -14400 1 EDT} + {215589600 -18000 0 EST} + {230713200 -14400 1 EDT} + {247039200 -18000 0 EST} + {262767600 -14400 1 EDT} + {278488800 -18000 0 EST} + {294217200 -14400 1 EDT} + {309938400 -18000 0 EST} + {325666800 -14400 1 EDT} + {341388000 -18000 0 EST} + {357116400 -14400 1 EDT} + {372837600 -18000 0 EST} + {388566000 -14400 1 EDT} + {404892000 -18000 0 EST} + {420015600 -14400 1 EDT} + {436341600 -18000 0 EST} + {452070000 -14400 1 EDT} + {467791200 -18000 0 EST} + {483519600 -14400 1 EDT} + {499240800 -18000 0 EST} + {514969200 -14400 1 EDT} + {530690400 -18000 0 EST} + {544604400 -14400 1 EDT} + {562140000 -18000 0 EST} + {576054000 -14400 1 EDT} + {594194400 -18000 0 EST} + {607503600 -14400 1 EDT} + {625644000 -18000 0 EST} + {638953200 -14400 1 EDT} + {657093600 -18000 0 EST} + {671007600 -14400 1 EDT} + {688543200 -18000 0 EST} + {702457200 -14400 1 EDT} + {719992800 -18000 0 EST} + {733906800 -14400 1 EDT} + {752047200 -18000 0 EST} + {765356400 -14400 1 EDT} + {783496800 -18000 0 EST} + {796806000 -14400 1 EDT} + {814946400 -18000 0 EST} + {828860400 -14400 1 EDT} + {846396000 -18000 0 EST} + {860310000 -14400 1 EDT} + {877845600 -18000 0 EST} + {891759600 -14400 1 EDT} + {909295200 -18000 0 EST} + {923209200 -14400 1 EDT} + {941349600 -18000 0 EST} + {954658800 -14400 1 EDT} + {972799200 -18000 0 EST} + {986108400 -14400 1 EDT} + {1004248800 -18000 0 EST} + {1018162800 -14400 1 EDT} + {1035698400 -18000 0 EST} + {1049612400 -14400 1 EDT} + {1067148000 -18000 0 EST} + {1081062000 -14400 1 EDT} + {1099202400 -18000 0 EST} + {1112511600 -14400 1 EDT} + {1130652000 -18000 0 EST} + {1143961200 -14400 1 EDT} + {1162101600 -18000 0 EST} + {1173596400 -14400 1 EDT} + {1194156000 -18000 0 EST} + {1205046000 -14400 1 EDT} + {1225605600 -18000 0 EST} + {1236495600 -14400 1 EDT} + {1257055200 -18000 0 EST} + {1268550000 -14400 1 EDT} + {1289109600 -18000 0 EST} + {1299999600 -14400 1 EDT} + {1320559200 -18000 0 EST} + {1331449200 -14400 1 EDT} + {1352008800 -18000 0 EST} + {1362898800 -14400 1 EDT} + {1383458400 -18000 0 EST} + {1394348400 -14400 1 EDT} + {1414908000 -18000 0 EST} + {1425798000 -14400 1 EDT} + {1446357600 -18000 0 EST} + {1457852400 -14400 1 EDT} + {1478412000 -18000 0 EST} + {1489302000 -14400 1 EDT} + {1509861600 -18000 0 EST} + {1520751600 -14400 1 EDT} + {1541311200 -18000 0 EST} + {1552201200 -14400 1 EDT} + {1572760800 -18000 0 EST} + {1583650800 -14400 1 EDT} + {1604210400 -18000 0 EST} + {1615705200 -14400 1 EDT} + {1636264800 -18000 0 EST} + {1647154800 -14400 1 EDT} + {1667714400 -18000 0 EST} + {1678604400 -14400 1 EDT} + {1699164000 -18000 0 EST} + {1710054000 -14400 1 EDT} + {1730613600 -18000 0 EST} + {1741503600 -14400 1 EDT} + {1762063200 -18000 0 EST} + {1772953200 -14400 1 EDT} + {1793512800 -18000 0 EST} + {1805007600 -14400 1 EDT} + {1825567200 -18000 0 EST} + {1836457200 -14400 1 EDT} + {1857016800 -18000 0 EST} + {1867906800 -14400 1 EDT} + {1888466400 -18000 0 EST} + {1899356400 -14400 1 EDT} + {1919916000 -18000 0 EST} + {1930806000 -14400 1 EDT} + {1951365600 -18000 0 EST} + {1962860400 -14400 1 EDT} + {1983420000 -18000 0 EST} + {1994310000 -14400 1 EDT} + {2014869600 -18000 0 EST} + {2025759600 -14400 1 EDT} + {2046319200 -18000 0 EST} + {2057209200 -14400 1 EDT} + {2077768800 -18000 0 EST} + {2088658800 -14400 1 EDT} + {2109218400 -18000 0 EST} + {2120108400 -14400 1 EDT} + {2140668000 -18000 0 EST} + {2152162800 -14400 1 EDT} + {2172722400 -18000 0 EST} + {2183612400 -14400 1 EDT} + {2204172000 -18000 0 EST} + {2215062000 -14400 1 EDT} + {2235621600 -18000 0 EST} + {2246511600 -14400 1 EDT} + {2267071200 -18000 0 EST} + {2277961200 -14400 1 EDT} + {2298520800 -18000 0 EST} + {2309410800 -14400 1 EDT} + {2329970400 -18000 0 EST} + {2341465200 -14400 1 EDT} + {2362024800 -18000 0 EST} + {2372914800 -14400 1 EDT} + {2393474400 -18000 0 EST} + {2404364400 -14400 1 EDT} + {2424924000 -18000 0 EST} + {2435814000 -14400 1 EDT} + {2456373600 -18000 0 EST} + {2467263600 -14400 1 EDT} + {2487823200 -18000 0 EST} + {2499318000 -14400 1 EDT} + {2519877600 -18000 0 EST} + {2530767600 -14400 1 EDT} + {2551327200 -18000 0 EST} + {2562217200 -14400 1 EDT} + {2582776800 -18000 0 EST} + {2593666800 -14400 1 EDT} + {2614226400 -18000 0 EST} + {2625116400 -14400 1 EDT} + {2645676000 -18000 0 EST} + {2656566000 -14400 1 EDT} + {2677125600 -18000 0 EST} + {2688620400 -14400 1 EDT} + {2709180000 -18000 0 EST} + {2720070000 -14400 1 EDT} + {2740629600 -18000 0 EST} + {2751519600 -14400 1 EDT} + {2772079200 -18000 0 EST} + {2782969200 -14400 1 EDT} + {2803528800 -18000 0 EST} + {2814418800 -14400 1 EDT} + {2834978400 -18000 0 EST} + {2846473200 -14400 1 EDT} + {2867032800 -18000 0 EST} + {2877922800 -14400 1 EDT} + {2898482400 -18000 0 EST} + {2909372400 -14400 1 EDT} + {2929932000 -18000 0 EST} + {2940822000 -14400 1 EDT} + {2961381600 -18000 0 EST} + {2972271600 -14400 1 EDT} + {2992831200 -18000 0 EST} + {3003721200 -14400 1 EDT} + {3024280800 -18000 0 EST} + {3035775600 -14400 1 EDT} + {3056335200 -18000 0 EST} + {3067225200 -14400 1 EDT} + {3087784800 -18000 0 EST} + {3098674800 -14400 1 EDT} + {3119234400 -18000 0 EST} + {3130124400 -14400 1 EDT} + {3150684000 -18000 0 EST} + {3161574000 -14400 1 EDT} + {3182133600 -18000 0 EST} + {3193023600 -14400 1 EDT} + {3213583200 -18000 0 EST} + {3225078000 -14400 1 EDT} + {3245637600 -18000 0 EST} + {3256527600 -14400 1 EDT} + {3277087200 -18000 0 EST} + {3287977200 -14400 1 EDT} + {3308536800 -18000 0 EST} + {3319426800 -14400 1 EDT} + {3339986400 -18000 0 EST} + {3350876400 -14400 1 EDT} + {3371436000 -18000 0 EST} + {3382930800 -14400 1 EDT} + {3403490400 -18000 0 EST} + {3414380400 -14400 1 EDT} + {3434940000 -18000 0 EST} + {3445830000 -14400 1 EDT} + {3466389600 -18000 0 EST} + {3477279600 -14400 1 EDT} + {3497839200 -18000 0 EST} + {3508729200 -14400 1 EDT} + {3529288800 -18000 0 EST} + {3540178800 -14400 1 EDT} + {3560738400 -18000 0 EST} + {3572233200 -14400 1 EDT} + {3592792800 -18000 0 EST} + {3603682800 -14400 1 EDT} + {3624242400 -18000 0 EST} + {3635132400 -14400 1 EDT} + {3655692000 -18000 0 EST} + {3666582000 -14400 1 EDT} + {3687141600 -18000 0 EST} + {3698031600 -14400 1 EDT} + {3718591200 -18000 0 EST} + {3730086000 -14400 1 EDT} + {3750645600 -18000 0 EST} + {3761535600 -14400 1 EDT} + {3782095200 -18000 0 EST} + {3792985200 -14400 1 EDT} + {3813544800 -18000 0 EST} + {3824434800 -14400 1 EDT} + {3844994400 -18000 0 EST} + {3855884400 -14400 1 EDT} + {3876444000 -18000 0 EST} + {3887334000 -14400 1 EDT} + {3907893600 -18000 0 EST} + {3919388400 -14400 1 EDT} + {3939948000 -18000 0 EST} + {3950838000 -14400 1 EDT} + {3971397600 -18000 0 EST} + {3982287600 -14400 1 EDT} + {4002847200 -18000 0 EST} + {4013737200 -14400 1 EDT} + {4034296800 -18000 0 EST} + {4045186800 -14400 1 EDT} + {4065746400 -18000 0 EST} + {4076636400 -14400 1 EDT} + {4097196000 -18000 0 EST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Nipigon b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Nipigon new file mode 100644 index 00000000..30690aac --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Nipigon @@ -0,0 +1,264 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Nipigon) { + {-9223372036854775808 -21184 0 LMT} + {-2366734016 -18000 0 EST} + {-1632070800 -14400 1 EDT} + {-1615140000 -18000 0 EST} + {-923252400 -14400 1 EDT} + {-880218000 -14400 0 EWT} + {-769395600 -14400 1 EPT} + {-765396000 -18000 0 EST} + {136364400 -14400 1 EDT} + {152085600 -18000 0 EST} + {167814000 -14400 1 EDT} + {183535200 -18000 0 EST} + {199263600 -14400 1 EDT} + {215589600 -18000 0 EST} + {230713200 -14400 1 EDT} + {247039200 -18000 0 EST} + {262767600 -14400 1 EDT} + {278488800 -18000 0 EST} + {294217200 -14400 1 EDT} + {309938400 -18000 0 EST} + {325666800 -14400 1 EDT} + {341388000 -18000 0 EST} + {357116400 -14400 1 EDT} + {372837600 -18000 0 EST} + {388566000 -14400 1 EDT} + {404892000 -18000 0 EST} + {420015600 -14400 1 EDT} + {436341600 -18000 0 EST} + {452070000 -14400 1 EDT} + {467791200 -18000 0 EST} + {483519600 -14400 1 EDT} + {499240800 -18000 0 EST} + {514969200 -14400 1 EDT} + {530690400 -18000 0 EST} + {544604400 -14400 1 EDT} + {562140000 -18000 0 EST} + {576054000 -14400 1 EDT} + {594194400 -18000 0 EST} + {607503600 -14400 1 EDT} + {625644000 -18000 0 EST} + {638953200 -14400 1 EDT} + {657093600 -18000 0 EST} + {671007600 -14400 1 EDT} + {688543200 -18000 0 EST} + {702457200 -14400 1 EDT} + {719992800 -18000 0 EST} + {733906800 -14400 1 EDT} + {752047200 -18000 0 EST} + {765356400 -14400 1 EDT} + {783496800 -18000 0 EST} + {796806000 -14400 1 EDT} + {814946400 -18000 0 EST} + {828860400 -14400 1 EDT} + {846396000 -18000 0 EST} + {860310000 -14400 1 EDT} + {877845600 -18000 0 EST} + {891759600 -14400 1 EDT} + {909295200 -18000 0 EST} + {923209200 -14400 1 EDT} + {941349600 -18000 0 EST} + {954658800 -14400 1 EDT} + {972799200 -18000 0 EST} + {986108400 -14400 1 EDT} + {1004248800 -18000 0 EST} + {1018162800 -14400 1 EDT} + {1035698400 -18000 0 EST} + {1049612400 -14400 1 EDT} + {1067148000 -18000 0 EST} + {1081062000 -14400 1 EDT} + {1099202400 -18000 0 EST} + {1112511600 -14400 1 EDT} + {1130652000 -18000 0 EST} + {1143961200 -14400 1 EDT} + {1162101600 -18000 0 EST} + {1173596400 -14400 1 EDT} + {1194156000 -18000 0 EST} + {1205046000 -14400 1 EDT} + {1225605600 -18000 0 EST} + {1236495600 -14400 1 EDT} + {1257055200 -18000 0 EST} + {1268550000 -14400 1 EDT} + {1289109600 -18000 0 EST} + {1299999600 -14400 1 EDT} + {1320559200 -18000 0 EST} + {1331449200 -14400 1 EDT} + {1352008800 -18000 0 EST} + {1362898800 -14400 1 EDT} + {1383458400 -18000 0 EST} + {1394348400 -14400 1 EDT} + {1414908000 -18000 0 EST} + {1425798000 -14400 1 EDT} + {1446357600 -18000 0 EST} + {1457852400 -14400 1 EDT} + {1478412000 -18000 0 EST} + {1489302000 -14400 1 EDT} + {1509861600 -18000 0 EST} + {1520751600 -14400 1 EDT} + {1541311200 -18000 0 EST} + {1552201200 -14400 1 EDT} + {1572760800 -18000 0 EST} + {1583650800 -14400 1 EDT} + {1604210400 -18000 0 EST} + {1615705200 -14400 1 EDT} + {1636264800 -18000 0 EST} + {1647154800 -14400 1 EDT} + {1667714400 -18000 0 EST} + {1678604400 -14400 1 EDT} + {1699164000 -18000 0 EST} + {1710054000 -14400 1 EDT} + {1730613600 -18000 0 EST} + {1741503600 -14400 1 EDT} + {1762063200 -18000 0 EST} + {1772953200 -14400 1 EDT} + {1793512800 -18000 0 EST} + {1805007600 -14400 1 EDT} + {1825567200 -18000 0 EST} + {1836457200 -14400 1 EDT} + {1857016800 -18000 0 EST} + {1867906800 -14400 1 EDT} + {1888466400 -18000 0 EST} + {1899356400 -14400 1 EDT} + {1919916000 -18000 0 EST} + {1930806000 -14400 1 EDT} + {1951365600 -18000 0 EST} + {1962860400 -14400 1 EDT} + {1983420000 -18000 0 EST} + {1994310000 -14400 1 EDT} + {2014869600 -18000 0 EST} + {2025759600 -14400 1 EDT} + {2046319200 -18000 0 EST} + {2057209200 -14400 1 EDT} + {2077768800 -18000 0 EST} + {2088658800 -14400 1 EDT} + {2109218400 -18000 0 EST} + {2120108400 -14400 1 EDT} + {2140668000 -18000 0 EST} + {2152162800 -14400 1 EDT} + {2172722400 -18000 0 EST} + {2183612400 -14400 1 EDT} + {2204172000 -18000 0 EST} + {2215062000 -14400 1 EDT} + {2235621600 -18000 0 EST} + {2246511600 -14400 1 EDT} + {2267071200 -18000 0 EST} + {2277961200 -14400 1 EDT} + {2298520800 -18000 0 EST} + {2309410800 -14400 1 EDT} + {2329970400 -18000 0 EST} + {2341465200 -14400 1 EDT} + {2362024800 -18000 0 EST} + {2372914800 -14400 1 EDT} + {2393474400 -18000 0 EST} + {2404364400 -14400 1 EDT} + {2424924000 -18000 0 EST} + {2435814000 -14400 1 EDT} + {2456373600 -18000 0 EST} + {2467263600 -14400 1 EDT} + {2487823200 -18000 0 EST} + {2499318000 -14400 1 EDT} + {2519877600 -18000 0 EST} + {2530767600 -14400 1 EDT} + {2551327200 -18000 0 EST} + {2562217200 -14400 1 EDT} + {2582776800 -18000 0 EST} + {2593666800 -14400 1 EDT} + {2614226400 -18000 0 EST} + {2625116400 -14400 1 EDT} + {2645676000 -18000 0 EST} + {2656566000 -14400 1 EDT} + {2677125600 -18000 0 EST} + {2688620400 -14400 1 EDT} + {2709180000 -18000 0 EST} + {2720070000 -14400 1 EDT} + {2740629600 -18000 0 EST} + {2751519600 -14400 1 EDT} + {2772079200 -18000 0 EST} + {2782969200 -14400 1 EDT} + {2803528800 -18000 0 EST} + {2814418800 -14400 1 EDT} + {2834978400 -18000 0 EST} + {2846473200 -14400 1 EDT} + {2867032800 -18000 0 EST} + {2877922800 -14400 1 EDT} + {2898482400 -18000 0 EST} + {2909372400 -14400 1 EDT} + {2929932000 -18000 0 EST} + {2940822000 -14400 1 EDT} + {2961381600 -18000 0 EST} + {2972271600 -14400 1 EDT} + {2992831200 -18000 0 EST} + {3003721200 -14400 1 EDT} + {3024280800 -18000 0 EST} + {3035775600 -14400 1 EDT} + {3056335200 -18000 0 EST} + {3067225200 -14400 1 EDT} + {3087784800 -18000 0 EST} + {3098674800 -14400 1 EDT} + {3119234400 -18000 0 EST} + {3130124400 -14400 1 EDT} + {3150684000 -18000 0 EST} + {3161574000 -14400 1 EDT} + {3182133600 -18000 0 EST} + {3193023600 -14400 1 EDT} + {3213583200 -18000 0 EST} + {3225078000 -14400 1 EDT} + {3245637600 -18000 0 EST} + {3256527600 -14400 1 EDT} + {3277087200 -18000 0 EST} + {3287977200 -14400 1 EDT} + {3308536800 -18000 0 EST} + {3319426800 -14400 1 EDT} + {3339986400 -18000 0 EST} + {3350876400 -14400 1 EDT} + {3371436000 -18000 0 EST} + {3382930800 -14400 1 EDT} + {3403490400 -18000 0 EST} + {3414380400 -14400 1 EDT} + {3434940000 -18000 0 EST} + {3445830000 -14400 1 EDT} + {3466389600 -18000 0 EST} + {3477279600 -14400 1 EDT} + {3497839200 -18000 0 EST} + {3508729200 -14400 1 EDT} + {3529288800 -18000 0 EST} + {3540178800 -14400 1 EDT} + {3560738400 -18000 0 EST} + {3572233200 -14400 1 EDT} + {3592792800 -18000 0 EST} + {3603682800 -14400 1 EDT} + {3624242400 -18000 0 EST} + {3635132400 -14400 1 EDT} + {3655692000 -18000 0 EST} + {3666582000 -14400 1 EDT} + {3687141600 -18000 0 EST} + {3698031600 -14400 1 EDT} + {3718591200 -18000 0 EST} + {3730086000 -14400 1 EDT} + {3750645600 -18000 0 EST} + {3761535600 -14400 1 EDT} + {3782095200 -18000 0 EST} + {3792985200 -14400 1 EDT} + {3813544800 -18000 0 EST} + {3824434800 -14400 1 EDT} + {3844994400 -18000 0 EST} + {3855884400 -14400 1 EDT} + {3876444000 -18000 0 EST} + {3887334000 -14400 1 EDT} + {3907893600 -18000 0 EST} + {3919388400 -14400 1 EDT} + {3939948000 -18000 0 EST} + {3950838000 -14400 1 EDT} + {3971397600 -18000 0 EST} + {3982287600 -14400 1 EDT} + {4002847200 -18000 0 EST} + {4013737200 -14400 1 EDT} + {4034296800 -18000 0 EST} + {4045186800 -14400 1 EDT} + {4065746400 -18000 0 EST} + {4076636400 -14400 1 EDT} + {4097196000 -18000 0 EST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Nome b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Nome new file mode 100644 index 00000000..c095b79b --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Nome @@ -0,0 +1,276 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Nome) { + {-9223372036854775808 46701 0 LMT} + {-3225358701 -39698 0 LMT} + {-2188947502 -39600 0 NST} + {-883573200 -39600 0 NST} + {-880196400 -36000 1 NWT} + {-769395600 -36000 1 NPT} + {-765374400 -39600 0 NST} + {-757342800 -39600 0 NST} + {-86878800 -39600 0 BST} + {-31496400 -39600 0 BST} + {-21466800 -36000 1 BDT} + {-5745600 -39600 0 BST} + {9982800 -36000 1 BDT} + {25704000 -39600 0 BST} + {41432400 -36000 1 BDT} + {57758400 -39600 0 BST} + {73486800 -36000 1 BDT} + {89208000 -39600 0 BST} + {104936400 -36000 1 BDT} + {120657600 -39600 0 BST} + {126709200 -36000 1 BDT} + {152107200 -39600 0 BST} + {162392400 -36000 1 BDT} + {183556800 -39600 0 BST} + {199285200 -36000 1 BDT} + {215611200 -39600 0 BST} + {230734800 -36000 1 BDT} + {247060800 -39600 0 BST} + {262789200 -36000 1 BDT} + {278510400 -39600 0 BST} + {294238800 -36000 1 BDT} + {309960000 -39600 0 BST} + {325688400 -36000 1 BDT} + {341409600 -39600 0 BST} + {357138000 -36000 1 BDT} + {372859200 -39600 0 BST} + {388587600 -36000 1 BDT} + {404913600 -39600 0 BST} + {420037200 -36000 1 BDT} + {439030800 -32400 0 AKST} + {452084400 -28800 1 AKDT} + {467805600 -32400 0 AKST} + {483534000 -28800 1 AKDT} + {499255200 -32400 0 AKST} + {514983600 -28800 1 AKDT} + {530704800 -32400 0 AKST} + {544618800 -28800 1 AKDT} + {562154400 -32400 0 AKST} + {576068400 -28800 1 AKDT} + {594208800 -32400 0 AKST} + {607518000 -28800 1 AKDT} + {625658400 -32400 0 AKST} + {638967600 -28800 1 AKDT} + {657108000 -32400 0 AKST} + {671022000 -28800 1 AKDT} + {688557600 -32400 0 AKST} + {702471600 -28800 1 AKDT} + {720007200 -32400 0 AKST} + {733921200 -28800 1 AKDT} + {752061600 -32400 0 AKST} + {765370800 -28800 1 AKDT} + {783511200 -32400 0 AKST} + {796820400 -28800 1 AKDT} + {814960800 -32400 0 AKST} + {828874800 -28800 1 AKDT} + {846410400 -32400 0 AKST} + {860324400 -28800 1 AKDT} + {877860000 -32400 0 AKST} + {891774000 -28800 1 AKDT} + {909309600 -32400 0 AKST} + {923223600 -28800 1 AKDT} + {941364000 -32400 0 AKST} + {954673200 -28800 1 AKDT} + {972813600 -32400 0 AKST} + {986122800 -28800 1 AKDT} + {1004263200 -32400 0 AKST} + {1018177200 -28800 1 AKDT} + {1035712800 -32400 0 AKST} + {1049626800 -28800 1 AKDT} + {1067162400 -32400 0 AKST} + {1081076400 -28800 1 AKDT} + {1099216800 -32400 0 AKST} + {1112526000 -28800 1 AKDT} + {1130666400 -32400 0 AKST} + {1143975600 -28800 1 AKDT} + {1162116000 -32400 0 AKST} + {1173610800 -28800 1 AKDT} + {1194170400 -32400 0 AKST} + {1205060400 -28800 1 AKDT} + {1225620000 -32400 0 AKST} + {1236510000 -28800 1 AKDT} + {1257069600 -32400 0 AKST} + {1268564400 -28800 1 AKDT} + {1289124000 -32400 0 AKST} + {1300014000 -28800 1 AKDT} + {1320573600 -32400 0 AKST} + {1331463600 -28800 1 AKDT} + {1352023200 -32400 0 AKST} + {1362913200 -28800 1 AKDT} + {1383472800 -32400 0 AKST} + {1394362800 -28800 1 AKDT} + {1414922400 -32400 0 AKST} + {1425812400 -28800 1 AKDT} + {1446372000 -32400 0 AKST} + {1457866800 -28800 1 AKDT} + {1478426400 -32400 0 AKST} + {1489316400 -28800 1 AKDT} + {1509876000 -32400 0 AKST} + {1520766000 -28800 1 AKDT} + {1541325600 -32400 0 AKST} + {1552215600 -28800 1 AKDT} + {1572775200 -32400 0 AKST} + {1583665200 -28800 1 AKDT} + {1604224800 -32400 0 AKST} + {1615719600 -28800 1 AKDT} + {1636279200 -32400 0 AKST} + {1647169200 -28800 1 AKDT} + {1667728800 -32400 0 AKST} + {1678618800 -28800 1 AKDT} + {1699178400 -32400 0 AKST} + {1710068400 -28800 1 AKDT} + {1730628000 -32400 0 AKST} + {1741518000 -28800 1 AKDT} + {1762077600 -32400 0 AKST} + {1772967600 -28800 1 AKDT} + {1793527200 -32400 0 AKST} + {1805022000 -28800 1 AKDT} + {1825581600 -32400 0 AKST} + {1836471600 -28800 1 AKDT} + {1857031200 -32400 0 AKST} + {1867921200 -28800 1 AKDT} + {1888480800 -32400 0 AKST} + {1899370800 -28800 1 AKDT} + {1919930400 -32400 0 AKST} + {1930820400 -28800 1 AKDT} + {1951380000 -32400 0 AKST} + {1962874800 -28800 1 AKDT} + {1983434400 -32400 0 AKST} + {1994324400 -28800 1 AKDT} + {2014884000 -32400 0 AKST} + {2025774000 -28800 1 AKDT} + {2046333600 -32400 0 AKST} + {2057223600 -28800 1 AKDT} + {2077783200 -32400 0 AKST} + {2088673200 -28800 1 AKDT} + {2109232800 -32400 0 AKST} + {2120122800 -28800 1 AKDT} + {2140682400 -32400 0 AKST} + {2152177200 -28800 1 AKDT} + {2172736800 -32400 0 AKST} + {2183626800 -28800 1 AKDT} + {2204186400 -32400 0 AKST} + {2215076400 -28800 1 AKDT} + {2235636000 -32400 0 AKST} + {2246526000 -28800 1 AKDT} + {2267085600 -32400 0 AKST} + {2277975600 -28800 1 AKDT} + {2298535200 -32400 0 AKST} + {2309425200 -28800 1 AKDT} + {2329984800 -32400 0 AKST} + {2341479600 -28800 1 AKDT} + {2362039200 -32400 0 AKST} + {2372929200 -28800 1 AKDT} + {2393488800 -32400 0 AKST} + {2404378800 -28800 1 AKDT} + {2424938400 -32400 0 AKST} + {2435828400 -28800 1 AKDT} + {2456388000 -32400 0 AKST} + {2467278000 -28800 1 AKDT} + {2487837600 -32400 0 AKST} + {2499332400 -28800 1 AKDT} + {2519892000 -32400 0 AKST} + {2530782000 -28800 1 AKDT} + {2551341600 -32400 0 AKST} + {2562231600 -28800 1 AKDT} + {2582791200 -32400 0 AKST} + {2593681200 -28800 1 AKDT} + {2614240800 -32400 0 AKST} + {2625130800 -28800 1 AKDT} + {2645690400 -32400 0 AKST} + {2656580400 -28800 1 AKDT} + {2677140000 -32400 0 AKST} + {2688634800 -28800 1 AKDT} + {2709194400 -32400 0 AKST} + {2720084400 -28800 1 AKDT} + {2740644000 -32400 0 AKST} + {2751534000 -28800 1 AKDT} + {2772093600 -32400 0 AKST} + {2782983600 -28800 1 AKDT} + {2803543200 -32400 0 AKST} + {2814433200 -28800 1 AKDT} + {2834992800 -32400 0 AKST} + {2846487600 -28800 1 AKDT} + {2867047200 -32400 0 AKST} + {2877937200 -28800 1 AKDT} + {2898496800 -32400 0 AKST} + {2909386800 -28800 1 AKDT} + {2929946400 -32400 0 AKST} + {2940836400 -28800 1 AKDT} + {2961396000 -32400 0 AKST} + {2972286000 -28800 1 AKDT} + {2992845600 -32400 0 AKST} + {3003735600 -28800 1 AKDT} + {3024295200 -32400 0 AKST} + {3035790000 -28800 1 AKDT} + {3056349600 -32400 0 AKST} + {3067239600 -28800 1 AKDT} + {3087799200 -32400 0 AKST} + {3098689200 -28800 1 AKDT} + {3119248800 -32400 0 AKST} + {3130138800 -28800 1 AKDT} + {3150698400 -32400 0 AKST} + {3161588400 -28800 1 AKDT} + {3182148000 -32400 0 AKST} + {3193038000 -28800 1 AKDT} + {3213597600 -32400 0 AKST} + {3225092400 -28800 1 AKDT} + {3245652000 -32400 0 AKST} + {3256542000 -28800 1 AKDT} + {3277101600 -32400 0 AKST} + {3287991600 -28800 1 AKDT} + {3308551200 -32400 0 AKST} + {3319441200 -28800 1 AKDT} + {3340000800 -32400 0 AKST} + {3350890800 -28800 1 AKDT} + {3371450400 -32400 0 AKST} + {3382945200 -28800 1 AKDT} + {3403504800 -32400 0 AKST} + {3414394800 -28800 1 AKDT} + {3434954400 -32400 0 AKST} + {3445844400 -28800 1 AKDT} + {3466404000 -32400 0 AKST} + {3477294000 -28800 1 AKDT} + {3497853600 -32400 0 AKST} + {3508743600 -28800 1 AKDT} + {3529303200 -32400 0 AKST} + {3540193200 -28800 1 AKDT} + {3560752800 -32400 0 AKST} + {3572247600 -28800 1 AKDT} + {3592807200 -32400 0 AKST} + {3603697200 -28800 1 AKDT} + {3624256800 -32400 0 AKST} + {3635146800 -28800 1 AKDT} + {3655706400 -32400 0 AKST} + {3666596400 -28800 1 AKDT} + {3687156000 -32400 0 AKST} + {3698046000 -28800 1 AKDT} + {3718605600 -32400 0 AKST} + {3730100400 -28800 1 AKDT} + {3750660000 -32400 0 AKST} + {3761550000 -28800 1 AKDT} + {3782109600 -32400 0 AKST} + {3792999600 -28800 1 AKDT} + {3813559200 -32400 0 AKST} + {3824449200 -28800 1 AKDT} + {3845008800 -32400 0 AKST} + {3855898800 -28800 1 AKDT} + {3876458400 -32400 0 AKST} + {3887348400 -28800 1 AKDT} + {3907908000 -32400 0 AKST} + {3919402800 -28800 1 AKDT} + {3939962400 -32400 0 AKST} + {3950852400 -28800 1 AKDT} + {3971412000 -32400 0 AKST} + {3982302000 -28800 1 AKDT} + {4002861600 -32400 0 AKST} + {4013751600 -28800 1 AKDT} + {4034311200 -32400 0 AKST} + {4045201200 -28800 1 AKDT} + {4065760800 -32400 0 AKST} + {4076650800 -28800 1 AKDT} + {4097210400 -32400 0 AKST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Noronha b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Noronha new file mode 100644 index 00000000..94d6f422 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Noronha @@ -0,0 +1,48 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Noronha) { + {-9223372036854775808 -7780 0 LMT} + {-1767217820 -7200 0 FNT} + {-1206961200 -3600 1 FNST} + {-1191366000 -7200 0 FNT} + {-1175378400 -3600 1 FNST} + {-1159830000 -7200 0 FNT} + {-633823200 -3600 1 FNST} + {-622072800 -7200 0 FNT} + {-602287200 -3600 1 FNST} + {-591836400 -7200 0 FNT} + {-570751200 -3600 1 FNST} + {-560214000 -7200 0 FNT} + {-539128800 -3600 1 FNST} + {-531356400 -7200 0 FNT} + {-191368800 -3600 1 FNST} + {-184201200 -7200 0 FNT} + {-155167200 -3600 1 FNST} + {-150073200 -7200 0 FNT} + {-128901600 -3600 1 FNST} + {-121129200 -7200 0 FNT} + {-99957600 -3600 1 FNST} + {-89593200 -7200 0 FNT} + {-68421600 -3600 1 FNST} + {-57970800 -7200 0 FNT} + {499744800 -3600 1 FNST} + {511232400 -7200 0 FNT} + {530589600 -3600 1 FNST} + {540262800 -7200 0 FNT} + {562125600 -3600 1 FNST} + {571194000 -7200 0 FNT} + {592970400 -3600 1 FNST} + {602038800 -7200 0 FNT} + {624420000 -3600 1 FNST} + {634698000 -7200 0 FNT} + {653533200 -7200 0 FNT} + {938656800 -7200 0 FNT} + {938916000 -3600 1 FNST} + {951613200 -7200 0 FNT} + {970970400 -3600 1 FNST} + {971571600 -7200 0 FNT} + {1000346400 -7200 0 FNT} + {1003024800 -3600 1 FNST} + {1013907600 -7200 0 FNT} + {1033434000 -7200 0 FNT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/North_Dakota/Beulah b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/North_Dakota/Beulah new file mode 100644 index 00000000..95407c61 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/North_Dakota/Beulah @@ -0,0 +1,279 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/North_Dakota/Beulah) { + {-9223372036854775808 -24427 0 LMT} + {-2717643600 -25200 0 MST} + {-1633273200 -21600 1 MDT} + {-1615132800 -25200 0 MST} + {-1601823600 -21600 1 MDT} + {-1583683200 -25200 0 MST} + {-880210800 -21600 1 MWT} + {-769395600 -21600 1 MPT} + {-765388800 -25200 0 MST} + {-84380400 -21600 1 MDT} + {-68659200 -25200 0 MST} + {-52930800 -21600 1 MDT} + {-37209600 -25200 0 MST} + {-21481200 -21600 1 MDT} + {-5760000 -25200 0 MST} + {9968400 -21600 1 MDT} + {25689600 -25200 0 MST} + {41418000 -21600 1 MDT} + {57744000 -25200 0 MST} + {73472400 -21600 1 MDT} + {89193600 -25200 0 MST} + {104922000 -21600 1 MDT} + {120643200 -25200 0 MST} + {126694800 -21600 1 MDT} + {152092800 -25200 0 MST} + {162378000 -21600 1 MDT} + {183542400 -25200 0 MST} + {199270800 -21600 1 MDT} + {215596800 -25200 0 MST} + {230720400 -21600 1 MDT} + {247046400 -25200 0 MST} + {262774800 -21600 1 MDT} + {278496000 -25200 0 MST} + {294224400 -21600 1 MDT} + {309945600 -25200 0 MST} + {325674000 -21600 1 MDT} + {341395200 -25200 0 MST} + {357123600 -21600 1 MDT} + {372844800 -25200 0 MST} + {388573200 -21600 1 MDT} + {404899200 -25200 0 MST} + {420022800 -21600 1 MDT} + {436348800 -25200 0 MST} + {452077200 -21600 1 MDT} + {467798400 -25200 0 MST} + {483526800 -21600 1 MDT} + {499248000 -25200 0 MST} + {514976400 -21600 1 MDT} + {530697600 -25200 0 MST} + {544611600 -21600 1 MDT} + {562147200 -25200 0 MST} + {576061200 -21600 1 MDT} + {594201600 -25200 0 MST} + {607510800 -21600 1 MDT} + {625651200 -25200 0 MST} + {638960400 -21600 1 MDT} + {657100800 -25200 0 MST} + {671014800 -21600 1 MDT} + {688550400 -25200 0 MST} + {702464400 -21600 1 MDT} + {720000000 -25200 0 MST} + {733914000 -21600 1 MDT} + {752054400 -25200 0 MST} + {765363600 -21600 1 MDT} + {783504000 -25200 0 MST} + {796813200 -21600 1 MDT} + {814953600 -25200 0 MST} + {828867600 -21600 1 MDT} + {846403200 -25200 0 MST} + {860317200 -21600 1 MDT} + {877852800 -25200 0 MST} + {891766800 -21600 1 MDT} + {909302400 -25200 0 MST} + {923216400 -21600 1 MDT} + {941356800 -25200 0 MST} + {954666000 -21600 1 MDT} + {972806400 -25200 0 MST} + {986115600 -21600 1 MDT} + {1004256000 -25200 0 MST} + {1018170000 -21600 1 MDT} + {1035705600 -25200 0 MST} + {1049619600 -21600 1 MDT} + {1067155200 -25200 0 MST} + {1081069200 -21600 1 MDT} + {1099209600 -25200 0 MST} + {1112518800 -21600 1 MDT} + {1130659200 -25200 0 MST} + {1143968400 -21600 1 MDT} + {1162108800 -25200 0 MST} + {1173603600 -21600 1 MDT} + {1194163200 -25200 0 MST} + {1205053200 -21600 1 MDT} + {1225612800 -25200 0 MST} + {1236502800 -21600 1 MDT} + {1257062400 -25200 0 MST} + {1268557200 -21600 1 MDT} + {1289120400 -21600 0 CST} + {1300003200 -18000 1 CDT} + {1320562800 -21600 0 CST} + {1331452800 -18000 1 CDT} + {1352012400 -21600 0 CST} + {1362902400 -18000 1 CDT} + {1383462000 -21600 0 CST} + {1394352000 -18000 1 CDT} + {1414911600 -21600 0 CST} + {1425801600 -18000 1 CDT} + {1446361200 -21600 0 CST} + {1457856000 -18000 1 CDT} + {1478415600 -21600 0 CST} + {1489305600 -18000 1 CDT} + {1509865200 -21600 0 CST} + {1520755200 -18000 1 CDT} + {1541314800 -21600 0 CST} + {1552204800 -18000 1 CDT} + {1572764400 -21600 0 CST} + {1583654400 -18000 1 CDT} + {1604214000 -21600 0 CST} + {1615708800 -18000 1 CDT} + {1636268400 -21600 0 CST} + {1647158400 -18000 1 CDT} + {1667718000 -21600 0 CST} + {1678608000 -18000 1 CDT} + {1699167600 -21600 0 CST} + {1710057600 -18000 1 CDT} + {1730617200 -21600 0 CST} + {1741507200 -18000 1 CDT} + {1762066800 -21600 0 CST} + {1772956800 -18000 1 CDT} + {1793516400 -21600 0 CST} + {1805011200 -18000 1 CDT} + {1825570800 -21600 0 CST} + {1836460800 -18000 1 CDT} + {1857020400 -21600 0 CST} + {1867910400 -18000 1 CDT} + {1888470000 -21600 0 CST} + {1899360000 -18000 1 CDT} + {1919919600 -21600 0 CST} + {1930809600 -18000 1 CDT} + {1951369200 -21600 0 CST} + {1962864000 -18000 1 CDT} + {1983423600 -21600 0 CST} + {1994313600 -18000 1 CDT} + {2014873200 -21600 0 CST} + {2025763200 -18000 1 CDT} + {2046322800 -21600 0 CST} + {2057212800 -18000 1 CDT} + {2077772400 -21600 0 CST} + {2088662400 -18000 1 CDT} + {2109222000 -21600 0 CST} + {2120112000 -18000 1 CDT} + {2140671600 -21600 0 CST} + {2152166400 -18000 1 CDT} + {2172726000 -21600 0 CST} + {2183616000 -18000 1 CDT} + {2204175600 -21600 0 CST} + {2215065600 -18000 1 CDT} + {2235625200 -21600 0 CST} + {2246515200 -18000 1 CDT} + {2267074800 -21600 0 CST} + {2277964800 -18000 1 CDT} + {2298524400 -21600 0 CST} + {2309414400 -18000 1 CDT} + {2329974000 -21600 0 CST} + {2341468800 -18000 1 CDT} + {2362028400 -21600 0 CST} + {2372918400 -18000 1 CDT} + {2393478000 -21600 0 CST} + {2404368000 -18000 1 CDT} + {2424927600 -21600 0 CST} + {2435817600 -18000 1 CDT} + {2456377200 -21600 0 CST} + {2467267200 -18000 1 CDT} + {2487826800 -21600 0 CST} + {2499321600 -18000 1 CDT} + {2519881200 -21600 0 CST} + {2530771200 -18000 1 CDT} + {2551330800 -21600 0 CST} + {2562220800 -18000 1 CDT} + {2582780400 -21600 0 CST} + {2593670400 -18000 1 CDT} + {2614230000 -21600 0 CST} + {2625120000 -18000 1 CDT} + {2645679600 -21600 0 CST} + {2656569600 -18000 1 CDT} + {2677129200 -21600 0 CST} + {2688624000 -18000 1 CDT} + {2709183600 -21600 0 CST} + {2720073600 -18000 1 CDT} + {2740633200 -21600 0 CST} + {2751523200 -18000 1 CDT} + {2772082800 -21600 0 CST} + {2782972800 -18000 1 CDT} + {2803532400 -21600 0 CST} + {2814422400 -18000 1 CDT} + {2834982000 -21600 0 CST} + {2846476800 -18000 1 CDT} + {2867036400 -21600 0 CST} + {2877926400 -18000 1 CDT} + {2898486000 -21600 0 CST} + {2909376000 -18000 1 CDT} + {2929935600 -21600 0 CST} + {2940825600 -18000 1 CDT} + {2961385200 -21600 0 CST} + {2972275200 -18000 1 CDT} + {2992834800 -21600 0 CST} + {3003724800 -18000 1 CDT} + {3024284400 -21600 0 CST} + {3035779200 -18000 1 CDT} + {3056338800 -21600 0 CST} + {3067228800 -18000 1 CDT} + {3087788400 -21600 0 CST} + {3098678400 -18000 1 CDT} + {3119238000 -21600 0 CST} + {3130128000 -18000 1 CDT} + {3150687600 -21600 0 CST} + {3161577600 -18000 1 CDT} + {3182137200 -21600 0 CST} + {3193027200 -18000 1 CDT} + {3213586800 -21600 0 CST} + {3225081600 -18000 1 CDT} + {3245641200 -21600 0 CST} + {3256531200 -18000 1 CDT} + {3277090800 -21600 0 CST} + {3287980800 -18000 1 CDT} + {3308540400 -21600 0 CST} + {3319430400 -18000 1 CDT} + {3339990000 -21600 0 CST} + {3350880000 -18000 1 CDT} + {3371439600 -21600 0 CST} + {3382934400 -18000 1 CDT} + {3403494000 -21600 0 CST} + {3414384000 -18000 1 CDT} + {3434943600 -21600 0 CST} + {3445833600 -18000 1 CDT} + {3466393200 -21600 0 CST} + {3477283200 -18000 1 CDT} + {3497842800 -21600 0 CST} + {3508732800 -18000 1 CDT} + {3529292400 -21600 0 CST} + {3540182400 -18000 1 CDT} + {3560742000 -21600 0 CST} + {3572236800 -18000 1 CDT} + {3592796400 -21600 0 CST} + {3603686400 -18000 1 CDT} + {3624246000 -21600 0 CST} + {3635136000 -18000 1 CDT} + {3655695600 -21600 0 CST} + {3666585600 -18000 1 CDT} + {3687145200 -21600 0 CST} + {3698035200 -18000 1 CDT} + {3718594800 -21600 0 CST} + {3730089600 -18000 1 CDT} + {3750649200 -21600 0 CST} + {3761539200 -18000 1 CDT} + {3782098800 -21600 0 CST} + {3792988800 -18000 1 CDT} + {3813548400 -21600 0 CST} + {3824438400 -18000 1 CDT} + {3844998000 -21600 0 CST} + {3855888000 -18000 1 CDT} + {3876447600 -21600 0 CST} + {3887337600 -18000 1 CDT} + {3907897200 -21600 0 CST} + {3919392000 -18000 1 CDT} + {3939951600 -21600 0 CST} + {3950841600 -18000 1 CDT} + {3971401200 -21600 0 CST} + {3982291200 -18000 1 CDT} + {4002850800 -21600 0 CST} + {4013740800 -18000 1 CDT} + {4034300400 -21600 0 CST} + {4045190400 -18000 1 CDT} + {4065750000 -21600 0 CST} + {4076640000 -18000 1 CDT} + {4097199600 -21600 0 CST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/North_Dakota/Center b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/North_Dakota/Center new file mode 100644 index 00000000..30782f7a --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/North_Dakota/Center @@ -0,0 +1,279 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/North_Dakota/Center) { + {-9223372036854775808 -24312 0 LMT} + {-2717643600 -25200 0 MST} + {-1633273200 -21600 1 MDT} + {-1615132800 -25200 0 MST} + {-1601823600 -21600 1 MDT} + {-1583683200 -25200 0 MST} + {-880210800 -21600 1 MWT} + {-769395600 -21600 1 MPT} + {-765388800 -25200 0 MST} + {-84380400 -21600 1 MDT} + {-68659200 -25200 0 MST} + {-52930800 -21600 1 MDT} + {-37209600 -25200 0 MST} + {-21481200 -21600 1 MDT} + {-5760000 -25200 0 MST} + {9968400 -21600 1 MDT} + {25689600 -25200 0 MST} + {41418000 -21600 1 MDT} + {57744000 -25200 0 MST} + {73472400 -21600 1 MDT} + {89193600 -25200 0 MST} + {104922000 -21600 1 MDT} + {120643200 -25200 0 MST} + {126694800 -21600 1 MDT} + {152092800 -25200 0 MST} + {162378000 -21600 1 MDT} + {183542400 -25200 0 MST} + {199270800 -21600 1 MDT} + {215596800 -25200 0 MST} + {230720400 -21600 1 MDT} + {247046400 -25200 0 MST} + {262774800 -21600 1 MDT} + {278496000 -25200 0 MST} + {294224400 -21600 1 MDT} + {309945600 -25200 0 MST} + {325674000 -21600 1 MDT} + {341395200 -25200 0 MST} + {357123600 -21600 1 MDT} + {372844800 -25200 0 MST} + {388573200 -21600 1 MDT} + {404899200 -25200 0 MST} + {420022800 -21600 1 MDT} + {436348800 -25200 0 MST} + {452077200 -21600 1 MDT} + {467798400 -25200 0 MST} + {483526800 -21600 1 MDT} + {499248000 -25200 0 MST} + {514976400 -21600 1 MDT} + {530697600 -25200 0 MST} + {544611600 -21600 1 MDT} + {562147200 -25200 0 MST} + {576061200 -21600 1 MDT} + {594201600 -25200 0 MST} + {607510800 -21600 1 MDT} + {625651200 -25200 0 MST} + {638960400 -21600 1 MDT} + {657100800 -25200 0 MST} + {671014800 -21600 1 MDT} + {688550400 -25200 0 MST} + {702464400 -21600 1 MDT} + {720003600 -21600 0 CST} + {733910400 -18000 1 CDT} + {752050800 -21600 0 CST} + {765360000 -18000 1 CDT} + {783500400 -21600 0 CST} + {796809600 -18000 1 CDT} + {814950000 -21600 0 CST} + {828864000 -18000 1 CDT} + {846399600 -21600 0 CST} + {860313600 -18000 1 CDT} + {877849200 -21600 0 CST} + {891763200 -18000 1 CDT} + {909298800 -21600 0 CST} + {923212800 -18000 1 CDT} + {941353200 -21600 0 CST} + {954662400 -18000 1 CDT} + {972802800 -21600 0 CST} + {986112000 -18000 1 CDT} + {1004252400 -21600 0 CST} + {1018166400 -18000 1 CDT} + {1035702000 -21600 0 CST} + {1049616000 -18000 1 CDT} + {1067151600 -21600 0 CST} + {1081065600 -18000 1 CDT} + {1099206000 -21600 0 CST} + {1112515200 -18000 1 CDT} + {1130655600 -21600 0 CST} + {1143964800 -18000 1 CDT} + {1162105200 -21600 0 CST} + {1173600000 -18000 1 CDT} + {1194159600 -21600 0 CST} + {1205049600 -18000 1 CDT} + {1225609200 -21600 0 CST} + {1236499200 -18000 1 CDT} + {1257058800 -21600 0 CST} + {1268553600 -18000 1 CDT} + {1289113200 -21600 0 CST} + {1300003200 -18000 1 CDT} + {1320562800 -21600 0 CST} + {1331452800 -18000 1 CDT} + {1352012400 -21600 0 CST} + {1362902400 -18000 1 CDT} + {1383462000 -21600 0 CST} + {1394352000 -18000 1 CDT} + {1414911600 -21600 0 CST} + {1425801600 -18000 1 CDT} + {1446361200 -21600 0 CST} + {1457856000 -18000 1 CDT} + {1478415600 -21600 0 CST} + {1489305600 -18000 1 CDT} + {1509865200 -21600 0 CST} + {1520755200 -18000 1 CDT} + {1541314800 -21600 0 CST} + {1552204800 -18000 1 CDT} + {1572764400 -21600 0 CST} + {1583654400 -18000 1 CDT} + {1604214000 -21600 0 CST} + {1615708800 -18000 1 CDT} + {1636268400 -21600 0 CST} + {1647158400 -18000 1 CDT} + {1667718000 -21600 0 CST} + {1678608000 -18000 1 CDT} + {1699167600 -21600 0 CST} + {1710057600 -18000 1 CDT} + {1730617200 -21600 0 CST} + {1741507200 -18000 1 CDT} + {1762066800 -21600 0 CST} + {1772956800 -18000 1 CDT} + {1793516400 -21600 0 CST} + {1805011200 -18000 1 CDT} + {1825570800 -21600 0 CST} + {1836460800 -18000 1 CDT} + {1857020400 -21600 0 CST} + {1867910400 -18000 1 CDT} + {1888470000 -21600 0 CST} + {1899360000 -18000 1 CDT} + {1919919600 -21600 0 CST} + {1930809600 -18000 1 CDT} + {1951369200 -21600 0 CST} + {1962864000 -18000 1 CDT} + {1983423600 -21600 0 CST} + {1994313600 -18000 1 CDT} + {2014873200 -21600 0 CST} + {2025763200 -18000 1 CDT} + {2046322800 -21600 0 CST} + {2057212800 -18000 1 CDT} + {2077772400 -21600 0 CST} + {2088662400 -18000 1 CDT} + {2109222000 -21600 0 CST} + {2120112000 -18000 1 CDT} + {2140671600 -21600 0 CST} + {2152166400 -18000 1 CDT} + {2172726000 -21600 0 CST} + {2183616000 -18000 1 CDT} + {2204175600 -21600 0 CST} + {2215065600 -18000 1 CDT} + {2235625200 -21600 0 CST} + {2246515200 -18000 1 CDT} + {2267074800 -21600 0 CST} + {2277964800 -18000 1 CDT} + {2298524400 -21600 0 CST} + {2309414400 -18000 1 CDT} + {2329974000 -21600 0 CST} + {2341468800 -18000 1 CDT} + {2362028400 -21600 0 CST} + {2372918400 -18000 1 CDT} + {2393478000 -21600 0 CST} + {2404368000 -18000 1 CDT} + {2424927600 -21600 0 CST} + {2435817600 -18000 1 CDT} + {2456377200 -21600 0 CST} + {2467267200 -18000 1 CDT} + {2487826800 -21600 0 CST} + {2499321600 -18000 1 CDT} + {2519881200 -21600 0 CST} + {2530771200 -18000 1 CDT} + {2551330800 -21600 0 CST} + {2562220800 -18000 1 CDT} + {2582780400 -21600 0 CST} + {2593670400 -18000 1 CDT} + {2614230000 -21600 0 CST} + {2625120000 -18000 1 CDT} + {2645679600 -21600 0 CST} + {2656569600 -18000 1 CDT} + {2677129200 -21600 0 CST} + {2688624000 -18000 1 CDT} + {2709183600 -21600 0 CST} + {2720073600 -18000 1 CDT} + {2740633200 -21600 0 CST} + {2751523200 -18000 1 CDT} + {2772082800 -21600 0 CST} + {2782972800 -18000 1 CDT} + {2803532400 -21600 0 CST} + {2814422400 -18000 1 CDT} + {2834982000 -21600 0 CST} + {2846476800 -18000 1 CDT} + {2867036400 -21600 0 CST} + {2877926400 -18000 1 CDT} + {2898486000 -21600 0 CST} + {2909376000 -18000 1 CDT} + {2929935600 -21600 0 CST} + {2940825600 -18000 1 CDT} + {2961385200 -21600 0 CST} + {2972275200 -18000 1 CDT} + {2992834800 -21600 0 CST} + {3003724800 -18000 1 CDT} + {3024284400 -21600 0 CST} + {3035779200 -18000 1 CDT} + {3056338800 -21600 0 CST} + {3067228800 -18000 1 CDT} + {3087788400 -21600 0 CST} + {3098678400 -18000 1 CDT} + {3119238000 -21600 0 CST} + {3130128000 -18000 1 CDT} + {3150687600 -21600 0 CST} + {3161577600 -18000 1 CDT} + {3182137200 -21600 0 CST} + {3193027200 -18000 1 CDT} + {3213586800 -21600 0 CST} + {3225081600 -18000 1 CDT} + {3245641200 -21600 0 CST} + {3256531200 -18000 1 CDT} + {3277090800 -21600 0 CST} + {3287980800 -18000 1 CDT} + {3308540400 -21600 0 CST} + {3319430400 -18000 1 CDT} + {3339990000 -21600 0 CST} + {3350880000 -18000 1 CDT} + {3371439600 -21600 0 CST} + {3382934400 -18000 1 CDT} + {3403494000 -21600 0 CST} + {3414384000 -18000 1 CDT} + {3434943600 -21600 0 CST} + {3445833600 -18000 1 CDT} + {3466393200 -21600 0 CST} + {3477283200 -18000 1 CDT} + {3497842800 -21600 0 CST} + {3508732800 -18000 1 CDT} + {3529292400 -21600 0 CST} + {3540182400 -18000 1 CDT} + {3560742000 -21600 0 CST} + {3572236800 -18000 1 CDT} + {3592796400 -21600 0 CST} + {3603686400 -18000 1 CDT} + {3624246000 -21600 0 CST} + {3635136000 -18000 1 CDT} + {3655695600 -21600 0 CST} + {3666585600 -18000 1 CDT} + {3687145200 -21600 0 CST} + {3698035200 -18000 1 CDT} + {3718594800 -21600 0 CST} + {3730089600 -18000 1 CDT} + {3750649200 -21600 0 CST} + {3761539200 -18000 1 CDT} + {3782098800 -21600 0 CST} + {3792988800 -18000 1 CDT} + {3813548400 -21600 0 CST} + {3824438400 -18000 1 CDT} + {3844998000 -21600 0 CST} + {3855888000 -18000 1 CDT} + {3876447600 -21600 0 CST} + {3887337600 -18000 1 CDT} + {3907897200 -21600 0 CST} + {3919392000 -18000 1 CDT} + {3939951600 -21600 0 CST} + {3950841600 -18000 1 CDT} + {3971401200 -21600 0 CST} + {3982291200 -18000 1 CDT} + {4002850800 -21600 0 CST} + {4013740800 -18000 1 CDT} + {4034300400 -21600 0 CST} + {4045190400 -18000 1 CDT} + {4065750000 -21600 0 CST} + {4076640000 -18000 1 CDT} + {4097199600 -21600 0 CST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/North_Dakota/New_Salem b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/North_Dakota/New_Salem new file mode 100644 index 00000000..5a9d2298 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/North_Dakota/New_Salem @@ -0,0 +1,279 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/North_Dakota/New_Salem) { + {-9223372036854775808 -24339 0 LMT} + {-2717643600 -25200 0 MST} + {-1633273200 -21600 1 MDT} + {-1615132800 -25200 0 MST} + {-1601823600 -21600 1 MDT} + {-1583683200 -25200 0 MST} + {-880210800 -21600 1 MWT} + {-769395600 -21600 1 MPT} + {-765388800 -25200 0 MST} + {-84380400 -21600 1 MDT} + {-68659200 -25200 0 MST} + {-52930800 -21600 1 MDT} + {-37209600 -25200 0 MST} + {-21481200 -21600 1 MDT} + {-5760000 -25200 0 MST} + {9968400 -21600 1 MDT} + {25689600 -25200 0 MST} + {41418000 -21600 1 MDT} + {57744000 -25200 0 MST} + {73472400 -21600 1 MDT} + {89193600 -25200 0 MST} + {104922000 -21600 1 MDT} + {120643200 -25200 0 MST} + {126694800 -21600 1 MDT} + {152092800 -25200 0 MST} + {162378000 -21600 1 MDT} + {183542400 -25200 0 MST} + {199270800 -21600 1 MDT} + {215596800 -25200 0 MST} + {230720400 -21600 1 MDT} + {247046400 -25200 0 MST} + {262774800 -21600 1 MDT} + {278496000 -25200 0 MST} + {294224400 -21600 1 MDT} + {309945600 -25200 0 MST} + {325674000 -21600 1 MDT} + {341395200 -25200 0 MST} + {357123600 -21600 1 MDT} + {372844800 -25200 0 MST} + {388573200 -21600 1 MDT} + {404899200 -25200 0 MST} + {420022800 -21600 1 MDT} + {436348800 -25200 0 MST} + {452077200 -21600 1 MDT} + {467798400 -25200 0 MST} + {483526800 -21600 1 MDT} + {499248000 -25200 0 MST} + {514976400 -21600 1 MDT} + {530697600 -25200 0 MST} + {544611600 -21600 1 MDT} + {562147200 -25200 0 MST} + {576061200 -21600 1 MDT} + {594201600 -25200 0 MST} + {607510800 -21600 1 MDT} + {625651200 -25200 0 MST} + {638960400 -21600 1 MDT} + {657100800 -25200 0 MST} + {671014800 -21600 1 MDT} + {688550400 -25200 0 MST} + {702464400 -21600 1 MDT} + {720000000 -25200 0 MST} + {733914000 -21600 1 MDT} + {752054400 -25200 0 MST} + {765363600 -21600 1 MDT} + {783504000 -25200 0 MST} + {796813200 -21600 1 MDT} + {814953600 -25200 0 MST} + {828867600 -21600 1 MDT} + {846403200 -25200 0 MST} + {860317200 -21600 1 MDT} + {877852800 -25200 0 MST} + {891766800 -21600 1 MDT} + {909302400 -25200 0 MST} + {923216400 -21600 1 MDT} + {941356800 -25200 0 MST} + {954666000 -21600 1 MDT} + {972806400 -25200 0 MST} + {986115600 -21600 1 MDT} + {1004256000 -25200 0 MST} + {1018170000 -21600 1 MDT} + {1035705600 -25200 0 MST} + {1049619600 -21600 1 MDT} + {1067158800 -21600 0 CST} + {1081065600 -18000 1 CDT} + {1099206000 -21600 0 CST} + {1112515200 -18000 1 CDT} + {1130655600 -21600 0 CST} + {1143964800 -18000 1 CDT} + {1162105200 -21600 0 CST} + {1173600000 -18000 1 CDT} + {1194159600 -21600 0 CST} + {1205049600 -18000 1 CDT} + {1225609200 -21600 0 CST} + {1236499200 -18000 1 CDT} + {1257058800 -21600 0 CST} + {1268553600 -18000 1 CDT} + {1289113200 -21600 0 CST} + {1300003200 -18000 1 CDT} + {1320562800 -21600 0 CST} + {1331452800 -18000 1 CDT} + {1352012400 -21600 0 CST} + {1362902400 -18000 1 CDT} + {1383462000 -21600 0 CST} + {1394352000 -18000 1 CDT} + {1414911600 -21600 0 CST} + {1425801600 -18000 1 CDT} + {1446361200 -21600 0 CST} + {1457856000 -18000 1 CDT} + {1478415600 -21600 0 CST} + {1489305600 -18000 1 CDT} + {1509865200 -21600 0 CST} + {1520755200 -18000 1 CDT} + {1541314800 -21600 0 CST} + {1552204800 -18000 1 CDT} + {1572764400 -21600 0 CST} + {1583654400 -18000 1 CDT} + {1604214000 -21600 0 CST} + {1615708800 -18000 1 CDT} + {1636268400 -21600 0 CST} + {1647158400 -18000 1 CDT} + {1667718000 -21600 0 CST} + {1678608000 -18000 1 CDT} + {1699167600 -21600 0 CST} + {1710057600 -18000 1 CDT} + {1730617200 -21600 0 CST} + {1741507200 -18000 1 CDT} + {1762066800 -21600 0 CST} + {1772956800 -18000 1 CDT} + {1793516400 -21600 0 CST} + {1805011200 -18000 1 CDT} + {1825570800 -21600 0 CST} + {1836460800 -18000 1 CDT} + {1857020400 -21600 0 CST} + {1867910400 -18000 1 CDT} + {1888470000 -21600 0 CST} + {1899360000 -18000 1 CDT} + {1919919600 -21600 0 CST} + {1930809600 -18000 1 CDT} + {1951369200 -21600 0 CST} + {1962864000 -18000 1 CDT} + {1983423600 -21600 0 CST} + {1994313600 -18000 1 CDT} + {2014873200 -21600 0 CST} + {2025763200 -18000 1 CDT} + {2046322800 -21600 0 CST} + {2057212800 -18000 1 CDT} + {2077772400 -21600 0 CST} + {2088662400 -18000 1 CDT} + {2109222000 -21600 0 CST} + {2120112000 -18000 1 CDT} + {2140671600 -21600 0 CST} + {2152166400 -18000 1 CDT} + {2172726000 -21600 0 CST} + {2183616000 -18000 1 CDT} + {2204175600 -21600 0 CST} + {2215065600 -18000 1 CDT} + {2235625200 -21600 0 CST} + {2246515200 -18000 1 CDT} + {2267074800 -21600 0 CST} + {2277964800 -18000 1 CDT} + {2298524400 -21600 0 CST} + {2309414400 -18000 1 CDT} + {2329974000 -21600 0 CST} + {2341468800 -18000 1 CDT} + {2362028400 -21600 0 CST} + {2372918400 -18000 1 CDT} + {2393478000 -21600 0 CST} + {2404368000 -18000 1 CDT} + {2424927600 -21600 0 CST} + {2435817600 -18000 1 CDT} + {2456377200 -21600 0 CST} + {2467267200 -18000 1 CDT} + {2487826800 -21600 0 CST} + {2499321600 -18000 1 CDT} + {2519881200 -21600 0 CST} + {2530771200 -18000 1 CDT} + {2551330800 -21600 0 CST} + {2562220800 -18000 1 CDT} + {2582780400 -21600 0 CST} + {2593670400 -18000 1 CDT} + {2614230000 -21600 0 CST} + {2625120000 -18000 1 CDT} + {2645679600 -21600 0 CST} + {2656569600 -18000 1 CDT} + {2677129200 -21600 0 CST} + {2688624000 -18000 1 CDT} + {2709183600 -21600 0 CST} + {2720073600 -18000 1 CDT} + {2740633200 -21600 0 CST} + {2751523200 -18000 1 CDT} + {2772082800 -21600 0 CST} + {2782972800 -18000 1 CDT} + {2803532400 -21600 0 CST} + {2814422400 -18000 1 CDT} + {2834982000 -21600 0 CST} + {2846476800 -18000 1 CDT} + {2867036400 -21600 0 CST} + {2877926400 -18000 1 CDT} + {2898486000 -21600 0 CST} + {2909376000 -18000 1 CDT} + {2929935600 -21600 0 CST} + {2940825600 -18000 1 CDT} + {2961385200 -21600 0 CST} + {2972275200 -18000 1 CDT} + {2992834800 -21600 0 CST} + {3003724800 -18000 1 CDT} + {3024284400 -21600 0 CST} + {3035779200 -18000 1 CDT} + {3056338800 -21600 0 CST} + {3067228800 -18000 1 CDT} + {3087788400 -21600 0 CST} + {3098678400 -18000 1 CDT} + {3119238000 -21600 0 CST} + {3130128000 -18000 1 CDT} + {3150687600 -21600 0 CST} + {3161577600 -18000 1 CDT} + {3182137200 -21600 0 CST} + {3193027200 -18000 1 CDT} + {3213586800 -21600 0 CST} + {3225081600 -18000 1 CDT} + {3245641200 -21600 0 CST} + {3256531200 -18000 1 CDT} + {3277090800 -21600 0 CST} + {3287980800 -18000 1 CDT} + {3308540400 -21600 0 CST} + {3319430400 -18000 1 CDT} + {3339990000 -21600 0 CST} + {3350880000 -18000 1 CDT} + {3371439600 -21600 0 CST} + {3382934400 -18000 1 CDT} + {3403494000 -21600 0 CST} + {3414384000 -18000 1 CDT} + {3434943600 -21600 0 CST} + {3445833600 -18000 1 CDT} + {3466393200 -21600 0 CST} + {3477283200 -18000 1 CDT} + {3497842800 -21600 0 CST} + {3508732800 -18000 1 CDT} + {3529292400 -21600 0 CST} + {3540182400 -18000 1 CDT} + {3560742000 -21600 0 CST} + {3572236800 -18000 1 CDT} + {3592796400 -21600 0 CST} + {3603686400 -18000 1 CDT} + {3624246000 -21600 0 CST} + {3635136000 -18000 1 CDT} + {3655695600 -21600 0 CST} + {3666585600 -18000 1 CDT} + {3687145200 -21600 0 CST} + {3698035200 -18000 1 CDT} + {3718594800 -21600 0 CST} + {3730089600 -18000 1 CDT} + {3750649200 -21600 0 CST} + {3761539200 -18000 1 CDT} + {3782098800 -21600 0 CST} + {3792988800 -18000 1 CDT} + {3813548400 -21600 0 CST} + {3824438400 -18000 1 CDT} + {3844998000 -21600 0 CST} + {3855888000 -18000 1 CDT} + {3876447600 -21600 0 CST} + {3887337600 -18000 1 CDT} + {3907897200 -21600 0 CST} + {3919392000 -18000 1 CDT} + {3939951600 -21600 0 CST} + {3950841600 -18000 1 CDT} + {3971401200 -21600 0 CST} + {3982291200 -18000 1 CDT} + {4002850800 -21600 0 CST} + {4013740800 -18000 1 CDT} + {4034300400 -21600 0 CST} + {4045190400 -18000 1 CDT} + {4065750000 -21600 0 CST} + {4076640000 -18000 1 CDT} + {4097199600 -21600 0 CST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Ojinaga b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Ojinaga new file mode 100644 index 00000000..11727089 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Ojinaga @@ -0,0 +1,222 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Ojinaga) { + {-9223372036854775808 -25060 0 LMT} + {-1514739600 -25200 0 MST} + {-1343066400 -21600 0 CST} + {-1234807200 -25200 0 MST} + {-1220292000 -21600 0 CST} + {-1207159200 -25200 0 MST} + {-1191344400 -21600 0 CST} + {820476000 -21600 0 CST} + {828864000 -18000 1 CDT} + {846399600 -21600 0 CST} + {860313600 -18000 1 CDT} + {877849200 -21600 0 CST} + {883634400 -21600 0 CST} + {891766800 -21600 0 MDT} + {909302400 -25200 0 MST} + {923216400 -21600 1 MDT} + {941356800 -25200 0 MST} + {954666000 -21600 1 MDT} + {972806400 -25200 0 MST} + {989139600 -21600 1 MDT} + {1001836800 -25200 0 MST} + {1018170000 -21600 1 MDT} + {1035705600 -25200 0 MST} + {1049619600 -21600 1 MDT} + {1067155200 -25200 0 MST} + {1081069200 -21600 1 MDT} + {1099209600 -25200 0 MST} + {1112518800 -21600 1 MDT} + {1130659200 -25200 0 MST} + {1143968400 -21600 1 MDT} + {1162108800 -25200 0 MST} + {1175418000 -21600 1 MDT} + {1193558400 -25200 0 MST} + {1207472400 -21600 1 MDT} + {1225008000 -25200 0 MST} + {1238922000 -21600 1 MDT} + {1256457600 -25200 0 MST} + {1262329200 -25200 0 MST} + {1268557200 -21600 1 MDT} + {1289116800 -25200 0 MST} + {1300006800 -21600 1 MDT} + {1320566400 -25200 0 MST} + {1331456400 -21600 1 MDT} + {1352016000 -25200 0 MST} + {1362906000 -21600 1 MDT} + {1383465600 -25200 0 MST} + {1394355600 -21600 1 MDT} + {1414915200 -25200 0 MST} + {1425805200 -21600 1 MDT} + {1446364800 -25200 0 MST} + {1457859600 -21600 1 MDT} + {1478419200 -25200 0 MST} + {1489309200 -21600 1 MDT} + {1509868800 -25200 0 MST} + {1520758800 -21600 1 MDT} + {1541318400 -25200 0 MST} + {1552208400 -21600 1 MDT} + {1572768000 -25200 0 MST} + {1583658000 -21600 1 MDT} + {1604217600 -25200 0 MST} + {1615712400 -21600 1 MDT} + {1636272000 -25200 0 MST} + {1647162000 -21600 1 MDT} + {1667721600 -25200 0 MST} + {1678611600 -21600 1 MDT} + {1699171200 -25200 0 MST} + {1710061200 -21600 1 MDT} + {1730620800 -25200 0 MST} + {1741510800 -21600 1 MDT} + {1762070400 -25200 0 MST} + {1772960400 -21600 1 MDT} + {1793520000 -25200 0 MST} + {1805014800 -21600 1 MDT} + {1825574400 -25200 0 MST} + {1836464400 -21600 1 MDT} + {1857024000 -25200 0 MST} + {1867914000 -21600 1 MDT} + {1888473600 -25200 0 MST} + {1899363600 -21600 1 MDT} + {1919923200 -25200 0 MST} + {1930813200 -21600 1 MDT} + {1951372800 -25200 0 MST} + {1962867600 -21600 1 MDT} + {1983427200 -25200 0 MST} + {1994317200 -21600 1 MDT} + {2014876800 -25200 0 MST} + {2025766800 -21600 1 MDT} + {2046326400 -25200 0 MST} + {2057216400 -21600 1 MDT} + {2077776000 -25200 0 MST} + {2088666000 -21600 1 MDT} + {2109225600 -25200 0 MST} + {2120115600 -21600 1 MDT} + {2140675200 -25200 0 MST} + {2152170000 -21600 1 MDT} + {2172729600 -25200 0 MST} + {2183619600 -21600 1 MDT} + {2204179200 -25200 0 MST} + {2215069200 -21600 1 MDT} + {2235628800 -25200 0 MST} + {2246518800 -21600 1 MDT} + {2267078400 -25200 0 MST} + {2277968400 -21600 1 MDT} + {2298528000 -25200 0 MST} + {2309418000 -21600 1 MDT} + {2329977600 -25200 0 MST} + {2341472400 -21600 1 MDT} + {2362032000 -25200 0 MST} + {2372922000 -21600 1 MDT} + {2393481600 -25200 0 MST} + {2404371600 -21600 1 MDT} + {2424931200 -25200 0 MST} + {2435821200 -21600 1 MDT} + {2456380800 -25200 0 MST} + {2467270800 -21600 1 MDT} + {2487830400 -25200 0 MST} + {2499325200 -21600 1 MDT} + {2519884800 -25200 0 MST} + {2530774800 -21600 1 MDT} + {2551334400 -25200 0 MST} + {2562224400 -21600 1 MDT} + {2582784000 -25200 0 MST} + {2593674000 -21600 1 MDT} + {2614233600 -25200 0 MST} + {2625123600 -21600 1 MDT} + {2645683200 -25200 0 MST} + {2656573200 -21600 1 MDT} + {2677132800 -25200 0 MST} + {2688627600 -21600 1 MDT} + {2709187200 -25200 0 MST} + {2720077200 -21600 1 MDT} + {2740636800 -25200 0 MST} + {2751526800 -21600 1 MDT} + {2772086400 -25200 0 MST} + {2782976400 -21600 1 MDT} + {2803536000 -25200 0 MST} + {2814426000 -21600 1 MDT} + {2834985600 -25200 0 MST} + {2846480400 -21600 1 MDT} + {2867040000 -25200 0 MST} + {2877930000 -21600 1 MDT} + {2898489600 -25200 0 MST} + {2909379600 -21600 1 MDT} + {2929939200 -25200 0 MST} + {2940829200 -21600 1 MDT} + {2961388800 -25200 0 MST} + {2972278800 -21600 1 MDT} + {2992838400 -25200 0 MST} + {3003728400 -21600 1 MDT} + {3024288000 -25200 0 MST} + {3035782800 -21600 1 MDT} + {3056342400 -25200 0 MST} + {3067232400 -21600 1 MDT} + {3087792000 -25200 0 MST} + {3098682000 -21600 1 MDT} + {3119241600 -25200 0 MST} + {3130131600 -21600 1 MDT} + {3150691200 -25200 0 MST} + {3161581200 -21600 1 MDT} + {3182140800 -25200 0 MST} + {3193030800 -21600 1 MDT} + {3213590400 -25200 0 MST} + {3225085200 -21600 1 MDT} + {3245644800 -25200 0 MST} + {3256534800 -21600 1 MDT} + {3277094400 -25200 0 MST} + {3287984400 -21600 1 MDT} + {3308544000 -25200 0 MST} + {3319434000 -21600 1 MDT} + {3339993600 -25200 0 MST} + {3350883600 -21600 1 MDT} + {3371443200 -25200 0 MST} + {3382938000 -21600 1 MDT} + {3403497600 -25200 0 MST} + {3414387600 -21600 1 MDT} + {3434947200 -25200 0 MST} + {3445837200 -21600 1 MDT} + {3466396800 -25200 0 MST} + {3477286800 -21600 1 MDT} + {3497846400 -25200 0 MST} + {3508736400 -21600 1 MDT} + {3529296000 -25200 0 MST} + {3540186000 -21600 1 MDT} + {3560745600 -25200 0 MST} + {3572240400 -21600 1 MDT} + {3592800000 -25200 0 MST} + {3603690000 -21600 1 MDT} + {3624249600 -25200 0 MST} + {3635139600 -21600 1 MDT} + {3655699200 -25200 0 MST} + {3666589200 -21600 1 MDT} + {3687148800 -25200 0 MST} + {3698038800 -21600 1 MDT} + {3718598400 -25200 0 MST} + {3730093200 -21600 1 MDT} + {3750652800 -25200 0 MST} + {3761542800 -21600 1 MDT} + {3782102400 -25200 0 MST} + {3792992400 -21600 1 MDT} + {3813552000 -25200 0 MST} + {3824442000 -21600 1 MDT} + {3845001600 -25200 0 MST} + {3855891600 -21600 1 MDT} + {3876451200 -25200 0 MST} + {3887341200 -21600 1 MDT} + {3907900800 -25200 0 MST} + {3919395600 -21600 1 MDT} + {3939955200 -25200 0 MST} + {3950845200 -21600 1 MDT} + {3971404800 -25200 0 MST} + {3982294800 -21600 1 MDT} + {4002854400 -25200 0 MST} + {4013744400 -21600 1 MDT} + {4034304000 -25200 0 MST} + {4045194000 -21600 1 MDT} + {4065753600 -25200 0 MST} + {4076643600 -21600 1 MDT} + {4097203200 -25200 0 MST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Panama b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Panama new file mode 100644 index 00000000..3006785b --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Panama @@ -0,0 +1,7 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Panama) { + {-9223372036854775808 -19088 0 LMT} + {-2524502512 -19176 0 CMT} + {-1946918424 -18000 0 EST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Pangnirtung b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Pangnirtung new file mode 100644 index 00000000..640808e2 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Pangnirtung @@ -0,0 +1,252 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Pangnirtung) { + {-9223372036854775808 0 0 zzz} + {-1546300800 -14400 0 AST} + {-880221600 -10800 1 AWT} + {-769395600 -10800 1 APT} + {-765399600 -14400 0 AST} + {-147902400 -7200 1 ADDT} + {-131572800 -14400 0 AST} + {325663200 -10800 1 ADT} + {341384400 -14400 0 AST} + {357112800 -10800 1 ADT} + {372834000 -14400 0 AST} + {388562400 -10800 1 ADT} + {404888400 -14400 0 AST} + {420012000 -10800 1 ADT} + {436338000 -14400 0 AST} + {452066400 -10800 1 ADT} + {467787600 -14400 0 AST} + {483516000 -10800 1 ADT} + {499237200 -14400 0 AST} + {514965600 -10800 1 ADT} + {530686800 -14400 0 AST} + {544600800 -10800 1 ADT} + {562136400 -14400 0 AST} + {576050400 -10800 1 ADT} + {594190800 -14400 0 AST} + {607500000 -10800 1 ADT} + {625640400 -14400 0 AST} + {638949600 -10800 1 ADT} + {657090000 -14400 0 AST} + {671004000 -10800 1 ADT} + {688539600 -14400 0 AST} + {702453600 -10800 1 ADT} + {719989200 -14400 0 AST} + {733903200 -10800 1 ADT} + {752043600 -14400 0 AST} + {765352800 -10800 1 ADT} + {783493200 -14400 0 AST} + {796802400 -18000 0 EST} + {796806000 -14400 1 EDT} + {814946400 -18000 0 EST} + {828860400 -14400 1 EDT} + {846396000 -18000 0 EST} + {860310000 -14400 1 EDT} + {877845600 -18000 0 EST} + {891759600 -14400 1 EDT} + {909295200 -18000 0 EST} + {923209200 -14400 1 EDT} + {941353200 -21600 0 CST} + {954662400 -18000 1 CDT} + {972806400 -18000 0 EST} + {986108400 -14400 1 EDT} + {1004248800 -18000 0 EST} + {1018162800 -14400 1 EDT} + {1035698400 -18000 0 EST} + {1049612400 -14400 1 EDT} + {1067148000 -18000 0 EST} + {1081062000 -14400 1 EDT} + {1099202400 -18000 0 EST} + {1112511600 -14400 1 EDT} + {1130652000 -18000 0 EST} + {1143961200 -14400 1 EDT} + {1162101600 -18000 0 EST} + {1173596400 -14400 1 EDT} + {1194156000 -18000 0 EST} + {1205046000 -14400 1 EDT} + {1225605600 -18000 0 EST} + {1236495600 -14400 1 EDT} + {1257055200 -18000 0 EST} + {1268550000 -14400 1 EDT} + {1289109600 -18000 0 EST} + {1299999600 -14400 1 EDT} + {1320559200 -18000 0 EST} + {1331449200 -14400 1 EDT} + {1352008800 -18000 0 EST} + {1362898800 -14400 1 EDT} + {1383458400 -18000 0 EST} + {1394348400 -14400 1 EDT} + {1414908000 -18000 0 EST} + {1425798000 -14400 1 EDT} + {1446357600 -18000 0 EST} + {1457852400 -14400 1 EDT} + {1478412000 -18000 0 EST} + {1489302000 -14400 1 EDT} + {1509861600 -18000 0 EST} + {1520751600 -14400 1 EDT} + {1541311200 -18000 0 EST} + {1552201200 -14400 1 EDT} + {1572760800 -18000 0 EST} + {1583650800 -14400 1 EDT} + {1604210400 -18000 0 EST} + {1615705200 -14400 1 EDT} + {1636264800 -18000 0 EST} + {1647154800 -14400 1 EDT} + {1667714400 -18000 0 EST} + {1678604400 -14400 1 EDT} + {1699164000 -18000 0 EST} + {1710054000 -14400 1 EDT} + {1730613600 -18000 0 EST} + {1741503600 -14400 1 EDT} + {1762063200 -18000 0 EST} + {1772953200 -14400 1 EDT} + {1793512800 -18000 0 EST} + {1805007600 -14400 1 EDT} + {1825567200 -18000 0 EST} + {1836457200 -14400 1 EDT} + {1857016800 -18000 0 EST} + {1867906800 -14400 1 EDT} + {1888466400 -18000 0 EST} + {1899356400 -14400 1 EDT} + {1919916000 -18000 0 EST} + {1930806000 -14400 1 EDT} + {1951365600 -18000 0 EST} + {1962860400 -14400 1 EDT} + {1983420000 -18000 0 EST} + {1994310000 -14400 1 EDT} + {2014869600 -18000 0 EST} + {2025759600 -14400 1 EDT} + {2046319200 -18000 0 EST} + {2057209200 -14400 1 EDT} + {2077768800 -18000 0 EST} + {2088658800 -14400 1 EDT} + {2109218400 -18000 0 EST} + {2120108400 -14400 1 EDT} + {2140668000 -18000 0 EST} + {2152162800 -14400 1 EDT} + {2172722400 -18000 0 EST} + {2183612400 -14400 1 EDT} + {2204172000 -18000 0 EST} + {2215062000 -14400 1 EDT} + {2235621600 -18000 0 EST} + {2246511600 -14400 1 EDT} + {2267071200 -18000 0 EST} + {2277961200 -14400 1 EDT} + {2298520800 -18000 0 EST} + {2309410800 -14400 1 EDT} + {2329970400 -18000 0 EST} + {2341465200 -14400 1 EDT} + {2362024800 -18000 0 EST} + {2372914800 -14400 1 EDT} + {2393474400 -18000 0 EST} + {2404364400 -14400 1 EDT} + {2424924000 -18000 0 EST} + {2435814000 -14400 1 EDT} + {2456373600 -18000 0 EST} + {2467263600 -14400 1 EDT} + {2487823200 -18000 0 EST} + {2499318000 -14400 1 EDT} + {2519877600 -18000 0 EST} + {2530767600 -14400 1 EDT} + {2551327200 -18000 0 EST} + {2562217200 -14400 1 EDT} + {2582776800 -18000 0 EST} + {2593666800 -14400 1 EDT} + {2614226400 -18000 0 EST} + {2625116400 -14400 1 EDT} + {2645676000 -18000 0 EST} + {2656566000 -14400 1 EDT} + {2677125600 -18000 0 EST} + {2688620400 -14400 1 EDT} + {2709180000 -18000 0 EST} + {2720070000 -14400 1 EDT} + {2740629600 -18000 0 EST} + {2751519600 -14400 1 EDT} + {2772079200 -18000 0 EST} + {2782969200 -14400 1 EDT} + {2803528800 -18000 0 EST} + {2814418800 -14400 1 EDT} + {2834978400 -18000 0 EST} + {2846473200 -14400 1 EDT} + {2867032800 -18000 0 EST} + {2877922800 -14400 1 EDT} + {2898482400 -18000 0 EST} + {2909372400 -14400 1 EDT} + {2929932000 -18000 0 EST} + {2940822000 -14400 1 EDT} + {2961381600 -18000 0 EST} + {2972271600 -14400 1 EDT} + {2992831200 -18000 0 EST} + {3003721200 -14400 1 EDT} + {3024280800 -18000 0 EST} + {3035775600 -14400 1 EDT} + {3056335200 -18000 0 EST} + {3067225200 -14400 1 EDT} + {3087784800 -18000 0 EST} + {3098674800 -14400 1 EDT} + {3119234400 -18000 0 EST} + {3130124400 -14400 1 EDT} + {3150684000 -18000 0 EST} + {3161574000 -14400 1 EDT} + {3182133600 -18000 0 EST} + {3193023600 -14400 1 EDT} + {3213583200 -18000 0 EST} + {3225078000 -14400 1 EDT} + {3245637600 -18000 0 EST} + {3256527600 -14400 1 EDT} + {3277087200 -18000 0 EST} + {3287977200 -14400 1 EDT} + {3308536800 -18000 0 EST} + {3319426800 -14400 1 EDT} + {3339986400 -18000 0 EST} + {3350876400 -14400 1 EDT} + {3371436000 -18000 0 EST} + {3382930800 -14400 1 EDT} + {3403490400 -18000 0 EST} + {3414380400 -14400 1 EDT} + {3434940000 -18000 0 EST} + {3445830000 -14400 1 EDT} + {3466389600 -18000 0 EST} + {3477279600 -14400 1 EDT} + {3497839200 -18000 0 EST} + {3508729200 -14400 1 EDT} + {3529288800 -18000 0 EST} + {3540178800 -14400 1 EDT} + {3560738400 -18000 0 EST} + {3572233200 -14400 1 EDT} + {3592792800 -18000 0 EST} + {3603682800 -14400 1 EDT} + {3624242400 -18000 0 EST} + {3635132400 -14400 1 EDT} + {3655692000 -18000 0 EST} + {3666582000 -14400 1 EDT} + {3687141600 -18000 0 EST} + {3698031600 -14400 1 EDT} + {3718591200 -18000 0 EST} + {3730086000 -14400 1 EDT} + {3750645600 -18000 0 EST} + {3761535600 -14400 1 EDT} + {3782095200 -18000 0 EST} + {3792985200 -14400 1 EDT} + {3813544800 -18000 0 EST} + {3824434800 -14400 1 EDT} + {3844994400 -18000 0 EST} + {3855884400 -14400 1 EDT} + {3876444000 -18000 0 EST} + {3887334000 -14400 1 EDT} + {3907893600 -18000 0 EST} + {3919388400 -14400 1 EDT} + {3939948000 -18000 0 EST} + {3950838000 -14400 1 EDT} + {3971397600 -18000 0 EST} + {3982287600 -14400 1 EDT} + {4002847200 -18000 0 EST} + {4013737200 -14400 1 EDT} + {4034296800 -18000 0 EST} + {4045186800 -14400 1 EDT} + {4065746400 -18000 0 EST} + {4076636400 -14400 1 EDT} + {4097196000 -18000 0 EST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Paramaribo b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Paramaribo new file mode 100644 index 00000000..d15f5c7e --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Paramaribo @@ -0,0 +1,10 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Paramaribo) { + {-9223372036854775808 -13240 0 LMT} + {-1861906760 -13252 0 PMT} + {-1104524348 -13236 0 PMT} + {-765317964 -12600 0 NEGT} + {185686200 -12600 0 SRT} + {465449400 -10800 0 SRT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Phoenix b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Phoenix new file mode 100644 index 00000000..3d37bb4e --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Phoenix @@ -0,0 +1,17 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Phoenix) { + {-9223372036854775808 -26898 0 LMT} + {-2717643600 -25200 0 MST} + {-1633273200 -21600 1 MDT} + {-1615132800 -25200 0 MST} + {-1601823600 -21600 1 MDT} + {-1583683200 -25200 0 MST} + {-880210800 -21600 1 MWT} + {-820519140 -25200 0 MST} + {-796841940 -25200 0 MST} + {-94669200 -25200 0 MST} + {-84380400 -21600 1 MDT} + {-68659200 -25200 0 MST} + {-56221200 -25200 0 MST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Port-au-Prince b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Port-au-Prince new file mode 100644 index 00000000..f1d7fc49 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Port-au-Prince @@ -0,0 +1,217 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Port-au-Prince) { + {-9223372036854775808 -17360 0 LMT} + {-2524504240 -17340 0 PPMT} + {-1670483460 -18000 0 EST} + {421218000 -14400 1 EDT} + {436334400 -18000 0 EST} + {452062800 -14400 1 EDT} + {467784000 -18000 0 EST} + {483512400 -14400 1 EDT} + {499233600 -18000 0 EST} + {514962000 -14400 1 EDT} + {530683200 -18000 0 EST} + {546411600 -14400 1 EDT} + {562132800 -18000 0 EST} + {576050400 -14400 1 EDT} + {594194400 -18000 0 EST} + {607500000 -14400 1 EDT} + {625644000 -18000 0 EST} + {638949600 -14400 1 EDT} + {657093600 -18000 0 EST} + {671004000 -14400 1 EDT} + {688543200 -18000 0 EST} + {702453600 -14400 1 EDT} + {719992800 -18000 0 EST} + {733903200 -14400 1 EDT} + {752047200 -18000 0 EST} + {765352800 -14400 1 EDT} + {783496800 -18000 0 EST} + {796802400 -14400 1 EDT} + {814946400 -18000 0 EST} + {828856800 -14400 1 EDT} + {846396000 -18000 0 EST} + {860306400 -14400 1 EDT} + {877845600 -18000 0 EST} + {1112504400 -14400 1 EDT} + {1130644800 -18000 0 EST} + {1143954000 -14400 1 EDT} + {1162094400 -18000 0 EST} + {1331449200 -14400 1 EDT} + {1352008800 -18000 0 EST} + {1362898800 -14400 1 EDT} + {1383458400 -18000 0 EST} + {1394348400 -14400 1 EDT} + {1414908000 -18000 0 EST} + {1425798000 -14400 1 EDT} + {1446357600 -18000 0 EST} + {1457852400 -14400 1 EDT} + {1478412000 -18000 0 EST} + {1489302000 -14400 1 EDT} + {1509861600 -18000 0 EST} + {1520751600 -14400 1 EDT} + {1541311200 -18000 0 EST} + {1552201200 -14400 1 EDT} + {1572760800 -18000 0 EST} + {1583650800 -14400 1 EDT} + {1604210400 -18000 0 EST} + {1615705200 -14400 1 EDT} + {1636264800 -18000 0 EST} + {1647154800 -14400 1 EDT} + {1667714400 -18000 0 EST} + {1678604400 -14400 1 EDT} + {1699164000 -18000 0 EST} + {1710054000 -14400 1 EDT} + {1730613600 -18000 0 EST} + {1741503600 -14400 1 EDT} + {1762063200 -18000 0 EST} + {1772953200 -14400 1 EDT} + {1793512800 -18000 0 EST} + {1805007600 -14400 1 EDT} + {1825567200 -18000 0 EST} + {1836457200 -14400 1 EDT} + {1857016800 -18000 0 EST} + {1867906800 -14400 1 EDT} + {1888466400 -18000 0 EST} + {1899356400 -14400 1 EDT} + {1919916000 -18000 0 EST} + {1930806000 -14400 1 EDT} + {1951365600 -18000 0 EST} + {1962860400 -14400 1 EDT} + {1983420000 -18000 0 EST} + {1994310000 -14400 1 EDT} + {2014869600 -18000 0 EST} + {2025759600 -14400 1 EDT} + {2046319200 -18000 0 EST} + {2057209200 -14400 1 EDT} + {2077768800 -18000 0 EST} + {2088658800 -14400 1 EDT} + {2109218400 -18000 0 EST} + {2120108400 -14400 1 EDT} + {2140668000 -18000 0 EST} + {2152162800 -14400 1 EDT} + {2172722400 -18000 0 EST} + {2183612400 -14400 1 EDT} + {2204172000 -18000 0 EST} + {2215062000 -14400 1 EDT} + {2235621600 -18000 0 EST} + {2246511600 -14400 1 EDT} + {2267071200 -18000 0 EST} + {2277961200 -14400 1 EDT} + {2298520800 -18000 0 EST} + {2309410800 -14400 1 EDT} + {2329970400 -18000 0 EST} + {2341465200 -14400 1 EDT} + {2362024800 -18000 0 EST} + {2372914800 -14400 1 EDT} + {2393474400 -18000 0 EST} + {2404364400 -14400 1 EDT} + {2424924000 -18000 0 EST} + {2435814000 -14400 1 EDT} + {2456373600 -18000 0 EST} + {2467263600 -14400 1 EDT} + {2487823200 -18000 0 EST} + {2499318000 -14400 1 EDT} + {2519877600 -18000 0 EST} + {2530767600 -14400 1 EDT} + {2551327200 -18000 0 EST} + {2562217200 -14400 1 EDT} + {2582776800 -18000 0 EST} + {2593666800 -14400 1 EDT} + {2614226400 -18000 0 EST} + {2625116400 -14400 1 EDT} + {2645676000 -18000 0 EST} + {2656566000 -14400 1 EDT} + {2677125600 -18000 0 EST} + {2688620400 -14400 1 EDT} + {2709180000 -18000 0 EST} + {2720070000 -14400 1 EDT} + {2740629600 -18000 0 EST} + {2751519600 -14400 1 EDT} + {2772079200 -18000 0 EST} + {2782969200 -14400 1 EDT} + {2803528800 -18000 0 EST} + {2814418800 -14400 1 EDT} + {2834978400 -18000 0 EST} + {2846473200 -14400 1 EDT} + {2867032800 -18000 0 EST} + {2877922800 -14400 1 EDT} + {2898482400 -18000 0 EST} + {2909372400 -14400 1 EDT} + {2929932000 -18000 0 EST} + {2940822000 -14400 1 EDT} + {2961381600 -18000 0 EST} + {2972271600 -14400 1 EDT} + {2992831200 -18000 0 EST} + {3003721200 -14400 1 EDT} + {3024280800 -18000 0 EST} + {3035775600 -14400 1 EDT} + {3056335200 -18000 0 EST} + {3067225200 -14400 1 EDT} + {3087784800 -18000 0 EST} + {3098674800 -14400 1 EDT} + {3119234400 -18000 0 EST} + {3130124400 -14400 1 EDT} + {3150684000 -18000 0 EST} + {3161574000 -14400 1 EDT} + {3182133600 -18000 0 EST} + {3193023600 -14400 1 EDT} + {3213583200 -18000 0 EST} + {3225078000 -14400 1 EDT} + {3245637600 -18000 0 EST} + {3256527600 -14400 1 EDT} + {3277087200 -18000 0 EST} + {3287977200 -14400 1 EDT} + {3308536800 -18000 0 EST} + {3319426800 -14400 1 EDT} + {3339986400 -18000 0 EST} + {3350876400 -14400 1 EDT} + {3371436000 -18000 0 EST} + {3382930800 -14400 1 EDT} + {3403490400 -18000 0 EST} + {3414380400 -14400 1 EDT} + {3434940000 -18000 0 EST} + {3445830000 -14400 1 EDT} + {3466389600 -18000 0 EST} + {3477279600 -14400 1 EDT} + {3497839200 -18000 0 EST} + {3508729200 -14400 1 EDT} + {3529288800 -18000 0 EST} + {3540178800 -14400 1 EDT} + {3560738400 -18000 0 EST} + {3572233200 -14400 1 EDT} + {3592792800 -18000 0 EST} + {3603682800 -14400 1 EDT} + {3624242400 -18000 0 EST} + {3635132400 -14400 1 EDT} + {3655692000 -18000 0 EST} + {3666582000 -14400 1 EDT} + {3687141600 -18000 0 EST} + {3698031600 -14400 1 EDT} + {3718591200 -18000 0 EST} + {3730086000 -14400 1 EDT} + {3750645600 -18000 0 EST} + {3761535600 -14400 1 EDT} + {3782095200 -18000 0 EST} + {3792985200 -14400 1 EDT} + {3813544800 -18000 0 EST} + {3824434800 -14400 1 EDT} + {3844994400 -18000 0 EST} + {3855884400 -14400 1 EDT} + {3876444000 -18000 0 EST} + {3887334000 -14400 1 EDT} + {3907893600 -18000 0 EST} + {3919388400 -14400 1 EDT} + {3939948000 -18000 0 EST} + {3950838000 -14400 1 EDT} + {3971397600 -18000 0 EST} + {3982287600 -14400 1 EDT} + {4002847200 -18000 0 EST} + {4013737200 -14400 1 EDT} + {4034296800 -18000 0 EST} + {4045186800 -14400 1 EDT} + {4065746400 -18000 0 EST} + {4076636400 -14400 1 EDT} + {4097196000 -18000 0 EST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Port_of_Spain b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Port_of_Spain new file mode 100644 index 00000000..c360c87a --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Port_of_Spain @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Port_of_Spain) { + {-9223372036854775808 -14764 0 LMT} + {-1825098836 -14400 0 AST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Porto_Acre b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Porto_Acre new file mode 100644 index 00000000..0626001b --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Porto_Acre @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Rio_Branco)]} { + LoadTimeZoneFile America/Rio_Branco +} +set TZData(:America/Porto_Acre) $TZData(:America/Rio_Branco) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Porto_Velho b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Porto_Velho new file mode 100644 index 00000000..ce611d23 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Porto_Velho @@ -0,0 +1,35 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Porto_Velho) { + {-9223372036854775808 -15336 0 LMT} + {-1767210264 -14400 0 AMT} + {-1206954000 -10800 1 AMST} + {-1191358800 -14400 0 AMT} + {-1175371200 -10800 1 AMST} + {-1159822800 -14400 0 AMT} + {-633816000 -10800 1 AMST} + {-622065600 -14400 0 AMT} + {-602280000 -10800 1 AMST} + {-591829200 -14400 0 AMT} + {-570744000 -10800 1 AMST} + {-560206800 -14400 0 AMT} + {-539121600 -10800 1 AMST} + {-531349200 -14400 0 AMT} + {-191361600 -10800 1 AMST} + {-184194000 -14400 0 AMT} + {-155160000 -10800 1 AMST} + {-150066000 -14400 0 AMT} + {-128894400 -10800 1 AMST} + {-121122000 -14400 0 AMT} + {-99950400 -10800 1 AMST} + {-89586000 -14400 0 AMT} + {-68414400 -10800 1 AMST} + {-57963600 -14400 0 AMT} + {499752000 -10800 1 AMST} + {511239600 -14400 0 AMT} + {530596800 -10800 1 AMST} + {540270000 -14400 0 AMT} + {562132800 -10800 1 AMST} + {571201200 -14400 0 AMT} + {590036400 -14400 0 AMT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Puerto_Rico b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Puerto_Rico new file mode 100644 index 00000000..0d5c9b4b --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Puerto_Rico @@ -0,0 +1,10 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Puerto_Rico) { + {-9223372036854775808 -15865 0 LMT} + {-2233035335 -14400 0 AST} + {-873057600 -10800 0 AWT} + {-769395600 -10800 1 APT} + {-765399600 -14400 0 AST} + {-757368000 -14400 0 AST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Rainy_River b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Rainy_River new file mode 100644 index 00000000..a2b11aa3 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Rainy_River @@ -0,0 +1,264 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Rainy_River) { + {-9223372036854775808 -22696 0 LMT} + {-2366732504 -21600 0 CST} + {-1632067200 -18000 1 CDT} + {-1615136400 -21600 0 CST} + {-923248800 -18000 1 CDT} + {-880214400 -18000 0 CWT} + {-769395600 -18000 1 CPT} + {-765392400 -21600 0 CST} + {136368000 -18000 1 CDT} + {152089200 -21600 0 CST} + {167817600 -18000 1 CDT} + {183538800 -21600 0 CST} + {199267200 -18000 1 CDT} + {215593200 -21600 0 CST} + {230716800 -18000 1 CDT} + {247042800 -21600 0 CST} + {262771200 -18000 1 CDT} + {278492400 -21600 0 CST} + {294220800 -18000 1 CDT} + {309942000 -21600 0 CST} + {325670400 -18000 1 CDT} + {341391600 -21600 0 CST} + {357120000 -18000 1 CDT} + {372841200 -21600 0 CST} + {388569600 -18000 1 CDT} + {404895600 -21600 0 CST} + {420019200 -18000 1 CDT} + {436345200 -21600 0 CST} + {452073600 -18000 1 CDT} + {467794800 -21600 0 CST} + {483523200 -18000 1 CDT} + {499244400 -21600 0 CST} + {514972800 -18000 1 CDT} + {530694000 -21600 0 CST} + {544608000 -18000 1 CDT} + {562143600 -21600 0 CST} + {576057600 -18000 1 CDT} + {594198000 -21600 0 CST} + {607507200 -18000 1 CDT} + {625647600 -21600 0 CST} + {638956800 -18000 1 CDT} + {657097200 -21600 0 CST} + {671011200 -18000 1 CDT} + {688546800 -21600 0 CST} + {702460800 -18000 1 CDT} + {719996400 -21600 0 CST} + {733910400 -18000 1 CDT} + {752050800 -21600 0 CST} + {765360000 -18000 1 CDT} + {783500400 -21600 0 CST} + {796809600 -18000 1 CDT} + {814950000 -21600 0 CST} + {828864000 -18000 1 CDT} + {846399600 -21600 0 CST} + {860313600 -18000 1 CDT} + {877849200 -21600 0 CST} + {891763200 -18000 1 CDT} + {909298800 -21600 0 CST} + {923212800 -18000 1 CDT} + {941353200 -21600 0 CST} + {954662400 -18000 1 CDT} + {972802800 -21600 0 CST} + {986112000 -18000 1 CDT} + {1004252400 -21600 0 CST} + {1018166400 -18000 1 CDT} + {1035702000 -21600 0 CST} + {1049616000 -18000 1 CDT} + {1067151600 -21600 0 CST} + {1081065600 -18000 1 CDT} + {1099206000 -21600 0 CST} + {1112515200 -18000 1 CDT} + {1130655600 -21600 0 CST} + {1143964800 -18000 1 CDT} + {1162105200 -21600 0 CST} + {1173600000 -18000 1 CDT} + {1194159600 -21600 0 CST} + {1205049600 -18000 1 CDT} + {1225609200 -21600 0 CST} + {1236499200 -18000 1 CDT} + {1257058800 -21600 0 CST} + {1268553600 -18000 1 CDT} + {1289113200 -21600 0 CST} + {1300003200 -18000 1 CDT} + {1320562800 -21600 0 CST} + {1331452800 -18000 1 CDT} + {1352012400 -21600 0 CST} + {1362902400 -18000 1 CDT} + {1383462000 -21600 0 CST} + {1394352000 -18000 1 CDT} + {1414911600 -21600 0 CST} + {1425801600 -18000 1 CDT} + {1446361200 -21600 0 CST} + {1457856000 -18000 1 CDT} + {1478415600 -21600 0 CST} + {1489305600 -18000 1 CDT} + {1509865200 -21600 0 CST} + {1520755200 -18000 1 CDT} + {1541314800 -21600 0 CST} + {1552204800 -18000 1 CDT} + {1572764400 -21600 0 CST} + {1583654400 -18000 1 CDT} + {1604214000 -21600 0 CST} + {1615708800 -18000 1 CDT} + {1636268400 -21600 0 CST} + {1647158400 -18000 1 CDT} + {1667718000 -21600 0 CST} + {1678608000 -18000 1 CDT} + {1699167600 -21600 0 CST} + {1710057600 -18000 1 CDT} + {1730617200 -21600 0 CST} + {1741507200 -18000 1 CDT} + {1762066800 -21600 0 CST} + {1772956800 -18000 1 CDT} + {1793516400 -21600 0 CST} + {1805011200 -18000 1 CDT} + {1825570800 -21600 0 CST} + {1836460800 -18000 1 CDT} + {1857020400 -21600 0 CST} + {1867910400 -18000 1 CDT} + {1888470000 -21600 0 CST} + {1899360000 -18000 1 CDT} + {1919919600 -21600 0 CST} + {1930809600 -18000 1 CDT} + {1951369200 -21600 0 CST} + {1962864000 -18000 1 CDT} + {1983423600 -21600 0 CST} + {1994313600 -18000 1 CDT} + {2014873200 -21600 0 CST} + {2025763200 -18000 1 CDT} + {2046322800 -21600 0 CST} + {2057212800 -18000 1 CDT} + {2077772400 -21600 0 CST} + {2088662400 -18000 1 CDT} + {2109222000 -21600 0 CST} + {2120112000 -18000 1 CDT} + {2140671600 -21600 0 CST} + {2152166400 -18000 1 CDT} + {2172726000 -21600 0 CST} + {2183616000 -18000 1 CDT} + {2204175600 -21600 0 CST} + {2215065600 -18000 1 CDT} + {2235625200 -21600 0 CST} + {2246515200 -18000 1 CDT} + {2267074800 -21600 0 CST} + {2277964800 -18000 1 CDT} + {2298524400 -21600 0 CST} + {2309414400 -18000 1 CDT} + {2329974000 -21600 0 CST} + {2341468800 -18000 1 CDT} + {2362028400 -21600 0 CST} + {2372918400 -18000 1 CDT} + {2393478000 -21600 0 CST} + {2404368000 -18000 1 CDT} + {2424927600 -21600 0 CST} + {2435817600 -18000 1 CDT} + {2456377200 -21600 0 CST} + {2467267200 -18000 1 CDT} + {2487826800 -21600 0 CST} + {2499321600 -18000 1 CDT} + {2519881200 -21600 0 CST} + {2530771200 -18000 1 CDT} + {2551330800 -21600 0 CST} + {2562220800 -18000 1 CDT} + {2582780400 -21600 0 CST} + {2593670400 -18000 1 CDT} + {2614230000 -21600 0 CST} + {2625120000 -18000 1 CDT} + {2645679600 -21600 0 CST} + {2656569600 -18000 1 CDT} + {2677129200 -21600 0 CST} + {2688624000 -18000 1 CDT} + {2709183600 -21600 0 CST} + {2720073600 -18000 1 CDT} + {2740633200 -21600 0 CST} + {2751523200 -18000 1 CDT} + {2772082800 -21600 0 CST} + {2782972800 -18000 1 CDT} + {2803532400 -21600 0 CST} + {2814422400 -18000 1 CDT} + {2834982000 -21600 0 CST} + {2846476800 -18000 1 CDT} + {2867036400 -21600 0 CST} + {2877926400 -18000 1 CDT} + {2898486000 -21600 0 CST} + {2909376000 -18000 1 CDT} + {2929935600 -21600 0 CST} + {2940825600 -18000 1 CDT} + {2961385200 -21600 0 CST} + {2972275200 -18000 1 CDT} + {2992834800 -21600 0 CST} + {3003724800 -18000 1 CDT} + {3024284400 -21600 0 CST} + {3035779200 -18000 1 CDT} + {3056338800 -21600 0 CST} + {3067228800 -18000 1 CDT} + {3087788400 -21600 0 CST} + {3098678400 -18000 1 CDT} + {3119238000 -21600 0 CST} + {3130128000 -18000 1 CDT} + {3150687600 -21600 0 CST} + {3161577600 -18000 1 CDT} + {3182137200 -21600 0 CST} + {3193027200 -18000 1 CDT} + {3213586800 -21600 0 CST} + {3225081600 -18000 1 CDT} + {3245641200 -21600 0 CST} + {3256531200 -18000 1 CDT} + {3277090800 -21600 0 CST} + {3287980800 -18000 1 CDT} + {3308540400 -21600 0 CST} + {3319430400 -18000 1 CDT} + {3339990000 -21600 0 CST} + {3350880000 -18000 1 CDT} + {3371439600 -21600 0 CST} + {3382934400 -18000 1 CDT} + {3403494000 -21600 0 CST} + {3414384000 -18000 1 CDT} + {3434943600 -21600 0 CST} + {3445833600 -18000 1 CDT} + {3466393200 -21600 0 CST} + {3477283200 -18000 1 CDT} + {3497842800 -21600 0 CST} + {3508732800 -18000 1 CDT} + {3529292400 -21600 0 CST} + {3540182400 -18000 1 CDT} + {3560742000 -21600 0 CST} + {3572236800 -18000 1 CDT} + {3592796400 -21600 0 CST} + {3603686400 -18000 1 CDT} + {3624246000 -21600 0 CST} + {3635136000 -18000 1 CDT} + {3655695600 -21600 0 CST} + {3666585600 -18000 1 CDT} + {3687145200 -21600 0 CST} + {3698035200 -18000 1 CDT} + {3718594800 -21600 0 CST} + {3730089600 -18000 1 CDT} + {3750649200 -21600 0 CST} + {3761539200 -18000 1 CDT} + {3782098800 -21600 0 CST} + {3792988800 -18000 1 CDT} + {3813548400 -21600 0 CST} + {3824438400 -18000 1 CDT} + {3844998000 -21600 0 CST} + {3855888000 -18000 1 CDT} + {3876447600 -21600 0 CST} + {3887337600 -18000 1 CDT} + {3907897200 -21600 0 CST} + {3919392000 -18000 1 CDT} + {3939951600 -21600 0 CST} + {3950841600 -18000 1 CDT} + {3971401200 -21600 0 CST} + {3982291200 -18000 1 CDT} + {4002850800 -21600 0 CST} + {4013740800 -18000 1 CDT} + {4034300400 -21600 0 CST} + {4045190400 -18000 1 CDT} + {4065750000 -21600 0 CST} + {4076640000 -18000 1 CDT} + {4097199600 -21600 0 CST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Rankin_Inlet b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Rankin_Inlet new file mode 100644 index 00000000..770ec5d2 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Rankin_Inlet @@ -0,0 +1,248 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Rankin_Inlet) { + {-9223372036854775808 0 0 zzz} + {-410227200 -21600 0 CST} + {-147895200 -14400 1 CDDT} + {-131565600 -21600 0 CST} + {325670400 -18000 1 CDT} + {341391600 -21600 0 CST} + {357120000 -18000 1 CDT} + {372841200 -21600 0 CST} + {388569600 -18000 1 CDT} + {404895600 -21600 0 CST} + {420019200 -18000 1 CDT} + {436345200 -21600 0 CST} + {452073600 -18000 1 CDT} + {467794800 -21600 0 CST} + {483523200 -18000 1 CDT} + {499244400 -21600 0 CST} + {514972800 -18000 1 CDT} + {530694000 -21600 0 CST} + {544608000 -18000 1 CDT} + {562143600 -21600 0 CST} + {576057600 -18000 1 CDT} + {594198000 -21600 0 CST} + {607507200 -18000 1 CDT} + {625647600 -21600 0 CST} + {638956800 -18000 1 CDT} + {657097200 -21600 0 CST} + {671011200 -18000 1 CDT} + {688546800 -21600 0 CST} + {702460800 -18000 1 CDT} + {719996400 -21600 0 CST} + {733910400 -18000 1 CDT} + {752050800 -21600 0 CST} + {765360000 -18000 1 CDT} + {783500400 -21600 0 CST} + {796809600 -18000 1 CDT} + {814950000 -21600 0 CST} + {828864000 -18000 1 CDT} + {846399600 -21600 0 CST} + {860313600 -18000 1 CDT} + {877849200 -21600 0 CST} + {891763200 -18000 1 CDT} + {909298800 -21600 0 CST} + {923212800 -18000 1 CDT} + {941353200 -21600 0 CST} + {954662400 -18000 1 CDT} + {972806400 -18000 0 EST} + {986112000 -18000 0 CDT} + {1004252400 -21600 0 CST} + {1018166400 -18000 1 CDT} + {1035702000 -21600 0 CST} + {1049616000 -18000 1 CDT} + {1067151600 -21600 0 CST} + {1081065600 -18000 1 CDT} + {1099206000 -21600 0 CST} + {1112515200 -18000 1 CDT} + {1130655600 -21600 0 CST} + {1143964800 -18000 1 CDT} + {1162105200 -21600 0 CST} + {1173600000 -18000 1 CDT} + {1194159600 -21600 0 CST} + {1205049600 -18000 1 CDT} + {1225609200 -21600 0 CST} + {1236499200 -18000 1 CDT} + {1257058800 -21600 0 CST} + {1268553600 -18000 1 CDT} + {1289113200 -21600 0 CST} + {1300003200 -18000 1 CDT} + {1320562800 -21600 0 CST} + {1331452800 -18000 1 CDT} + {1352012400 -21600 0 CST} + {1362902400 -18000 1 CDT} + {1383462000 -21600 0 CST} + {1394352000 -18000 1 CDT} + {1414911600 -21600 0 CST} + {1425801600 -18000 1 CDT} + {1446361200 -21600 0 CST} + {1457856000 -18000 1 CDT} + {1478415600 -21600 0 CST} + {1489305600 -18000 1 CDT} + {1509865200 -21600 0 CST} + {1520755200 -18000 1 CDT} + {1541314800 -21600 0 CST} + {1552204800 -18000 1 CDT} + {1572764400 -21600 0 CST} + {1583654400 -18000 1 CDT} + {1604214000 -21600 0 CST} + {1615708800 -18000 1 CDT} + {1636268400 -21600 0 CST} + {1647158400 -18000 1 CDT} + {1667718000 -21600 0 CST} + {1678608000 -18000 1 CDT} + {1699167600 -21600 0 CST} + {1710057600 -18000 1 CDT} + {1730617200 -21600 0 CST} + {1741507200 -18000 1 CDT} + {1762066800 -21600 0 CST} + {1772956800 -18000 1 CDT} + {1793516400 -21600 0 CST} + {1805011200 -18000 1 CDT} + {1825570800 -21600 0 CST} + {1836460800 -18000 1 CDT} + {1857020400 -21600 0 CST} + {1867910400 -18000 1 CDT} + {1888470000 -21600 0 CST} + {1899360000 -18000 1 CDT} + {1919919600 -21600 0 CST} + {1930809600 -18000 1 CDT} + {1951369200 -21600 0 CST} + {1962864000 -18000 1 CDT} + {1983423600 -21600 0 CST} + {1994313600 -18000 1 CDT} + {2014873200 -21600 0 CST} + {2025763200 -18000 1 CDT} + {2046322800 -21600 0 CST} + {2057212800 -18000 1 CDT} + {2077772400 -21600 0 CST} + {2088662400 -18000 1 CDT} + {2109222000 -21600 0 CST} + {2120112000 -18000 1 CDT} + {2140671600 -21600 0 CST} + {2152166400 -18000 1 CDT} + {2172726000 -21600 0 CST} + {2183616000 -18000 1 CDT} + {2204175600 -21600 0 CST} + {2215065600 -18000 1 CDT} + {2235625200 -21600 0 CST} + {2246515200 -18000 1 CDT} + {2267074800 -21600 0 CST} + {2277964800 -18000 1 CDT} + {2298524400 -21600 0 CST} + {2309414400 -18000 1 CDT} + {2329974000 -21600 0 CST} + {2341468800 -18000 1 CDT} + {2362028400 -21600 0 CST} + {2372918400 -18000 1 CDT} + {2393478000 -21600 0 CST} + {2404368000 -18000 1 CDT} + {2424927600 -21600 0 CST} + {2435817600 -18000 1 CDT} + {2456377200 -21600 0 CST} + {2467267200 -18000 1 CDT} + {2487826800 -21600 0 CST} + {2499321600 -18000 1 CDT} + {2519881200 -21600 0 CST} + {2530771200 -18000 1 CDT} + {2551330800 -21600 0 CST} + {2562220800 -18000 1 CDT} + {2582780400 -21600 0 CST} + {2593670400 -18000 1 CDT} + {2614230000 -21600 0 CST} + {2625120000 -18000 1 CDT} + {2645679600 -21600 0 CST} + {2656569600 -18000 1 CDT} + {2677129200 -21600 0 CST} + {2688624000 -18000 1 CDT} + {2709183600 -21600 0 CST} + {2720073600 -18000 1 CDT} + {2740633200 -21600 0 CST} + {2751523200 -18000 1 CDT} + {2772082800 -21600 0 CST} + {2782972800 -18000 1 CDT} + {2803532400 -21600 0 CST} + {2814422400 -18000 1 CDT} + {2834982000 -21600 0 CST} + {2846476800 -18000 1 CDT} + {2867036400 -21600 0 CST} + {2877926400 -18000 1 CDT} + {2898486000 -21600 0 CST} + {2909376000 -18000 1 CDT} + {2929935600 -21600 0 CST} + {2940825600 -18000 1 CDT} + {2961385200 -21600 0 CST} + {2972275200 -18000 1 CDT} + {2992834800 -21600 0 CST} + {3003724800 -18000 1 CDT} + {3024284400 -21600 0 CST} + {3035779200 -18000 1 CDT} + {3056338800 -21600 0 CST} + {3067228800 -18000 1 CDT} + {3087788400 -21600 0 CST} + {3098678400 -18000 1 CDT} + {3119238000 -21600 0 CST} + {3130128000 -18000 1 CDT} + {3150687600 -21600 0 CST} + {3161577600 -18000 1 CDT} + {3182137200 -21600 0 CST} + {3193027200 -18000 1 CDT} + {3213586800 -21600 0 CST} + {3225081600 -18000 1 CDT} + {3245641200 -21600 0 CST} + {3256531200 -18000 1 CDT} + {3277090800 -21600 0 CST} + {3287980800 -18000 1 CDT} + {3308540400 -21600 0 CST} + {3319430400 -18000 1 CDT} + {3339990000 -21600 0 CST} + {3350880000 -18000 1 CDT} + {3371439600 -21600 0 CST} + {3382934400 -18000 1 CDT} + {3403494000 -21600 0 CST} + {3414384000 -18000 1 CDT} + {3434943600 -21600 0 CST} + {3445833600 -18000 1 CDT} + {3466393200 -21600 0 CST} + {3477283200 -18000 1 CDT} + {3497842800 -21600 0 CST} + {3508732800 -18000 1 CDT} + {3529292400 -21600 0 CST} + {3540182400 -18000 1 CDT} + {3560742000 -21600 0 CST} + {3572236800 -18000 1 CDT} + {3592796400 -21600 0 CST} + {3603686400 -18000 1 CDT} + {3624246000 -21600 0 CST} + {3635136000 -18000 1 CDT} + {3655695600 -21600 0 CST} + {3666585600 -18000 1 CDT} + {3687145200 -21600 0 CST} + {3698035200 -18000 1 CDT} + {3718594800 -21600 0 CST} + {3730089600 -18000 1 CDT} + {3750649200 -21600 0 CST} + {3761539200 -18000 1 CDT} + {3782098800 -21600 0 CST} + {3792988800 -18000 1 CDT} + {3813548400 -21600 0 CST} + {3824438400 -18000 1 CDT} + {3844998000 -21600 0 CST} + {3855888000 -18000 1 CDT} + {3876447600 -21600 0 CST} + {3887337600 -18000 1 CDT} + {3907897200 -21600 0 CST} + {3919392000 -18000 1 CDT} + {3939951600 -21600 0 CST} + {3950841600 -18000 1 CDT} + {3971401200 -21600 0 CST} + {3982291200 -18000 1 CDT} + {4002850800 -21600 0 CST} + {4013740800 -18000 1 CDT} + {4034300400 -21600 0 CST} + {4045190400 -18000 1 CDT} + {4065750000 -21600 0 CST} + {4076640000 -18000 1 CDT} + {4097199600 -21600 0 CST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Recife b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Recife new file mode 100644 index 00000000..f6ae00e2 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Recife @@ -0,0 +1,48 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Recife) { + {-9223372036854775808 -8376 0 LMT} + {-1767217224 -10800 0 BRT} + {-1206957600 -7200 1 BRST} + {-1191362400 -10800 0 BRT} + {-1175374800 -7200 1 BRST} + {-1159826400 -10800 0 BRT} + {-633819600 -7200 1 BRST} + {-622069200 -10800 0 BRT} + {-602283600 -7200 1 BRST} + {-591832800 -10800 0 BRT} + {-570747600 -7200 1 BRST} + {-560210400 -10800 0 BRT} + {-539125200 -7200 1 BRST} + {-531352800 -10800 0 BRT} + {-191365200 -7200 1 BRST} + {-184197600 -10800 0 BRT} + {-155163600 -7200 1 BRST} + {-150069600 -10800 0 BRT} + {-128898000 -7200 1 BRST} + {-121125600 -10800 0 BRT} + {-99954000 -7200 1 BRST} + {-89589600 -10800 0 BRT} + {-68418000 -7200 1 BRST} + {-57967200 -10800 0 BRT} + {499748400 -7200 1 BRST} + {511236000 -10800 0 BRT} + {530593200 -7200 1 BRST} + {540266400 -10800 0 BRT} + {562129200 -7200 1 BRST} + {571197600 -10800 0 BRT} + {592974000 -7200 1 BRST} + {602042400 -10800 0 BRT} + {624423600 -7200 1 BRST} + {634701600 -10800 0 BRT} + {653536800 -10800 0 BRT} + {938660400 -10800 0 BRT} + {938919600 -7200 1 BRST} + {951616800 -10800 0 BRT} + {970974000 -7200 1 BRST} + {971575200 -10800 0 BRT} + {1000350000 -10800 0 BRT} + {1003028400 -7200 1 BRST} + {1013911200 -10800 0 BRT} + {1033437600 -10800 0 BRT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Regina b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Regina new file mode 100644 index 00000000..e42b5bee --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Regina @@ -0,0 +1,58 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Regina) { + {-9223372036854775808 -25116 0 LMT} + {-2030202084 -25200 0 MST} + {-1632063600 -21600 1 MDT} + {-1615132800 -25200 0 MST} + {-1251651600 -21600 1 MDT} + {-1238349600 -25200 0 MST} + {-1220202000 -21600 1 MDT} + {-1206900000 -25200 0 MST} + {-1188752400 -21600 1 MDT} + {-1175450400 -25200 0 MST} + {-1156698000 -21600 1 MDT} + {-1144000800 -25200 0 MST} + {-1125248400 -21600 1 MDT} + {-1111946400 -25200 0 MST} + {-1032714000 -21600 1 MDT} + {-1016992800 -25200 0 MST} + {-1001264400 -21600 1 MDT} + {-986148000 -25200 0 MST} + {-969814800 -21600 1 MDT} + {-954093600 -25200 0 MST} + {-937760400 -21600 1 MDT} + {-922039200 -25200 0 MST} + {-906310800 -21600 1 MDT} + {-890589600 -25200 0 MST} + {-880210800 -21600 1 MWT} + {-769395600 -21600 1 MPT} + {-765388800 -25200 0 MST} + {-748450800 -21600 1 MDT} + {-732729600 -25200 0 MST} + {-715791600 -21600 1 MDT} + {-702489600 -25200 0 MST} + {-684342000 -21600 1 MDT} + {-671040000 -25200 0 MST} + {-652892400 -21600 1 MDT} + {-639590400 -25200 0 MST} + {-620838000 -21600 1 MDT} + {-608140800 -25200 0 MST} + {-589388400 -21600 1 MDT} + {-576086400 -25200 0 MST} + {-557938800 -21600 1 MDT} + {-544636800 -25200 0 MST} + {-526489200 -21600 1 MDT} + {-513187200 -25200 0 MST} + {-495039600 -21600 1 MDT} + {-481737600 -25200 0 MST} + {-463590000 -21600 1 MDT} + {-450288000 -25200 0 MST} + {-431535600 -21600 1 MDT} + {-418233600 -25200 0 MST} + {-400086000 -21600 1 MDT} + {-386784000 -25200 0 MST} + {-337186800 -21600 1 MDT} + {-321465600 -25200 0 MST} + {-305737200 -21600 0 CST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Resolute b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Resolute new file mode 100644 index 00000000..b4c0babc --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Resolute @@ -0,0 +1,248 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Resolute) { + {-9223372036854775808 0 0 zzz} + {-704937600 -21600 0 CST} + {-147895200 -14400 1 CDDT} + {-131565600 -21600 0 CST} + {325670400 -18000 1 CDT} + {341391600 -21600 0 CST} + {357120000 -18000 1 CDT} + {372841200 -21600 0 CST} + {388569600 -18000 1 CDT} + {404895600 -21600 0 CST} + {420019200 -18000 1 CDT} + {436345200 -21600 0 CST} + {452073600 -18000 1 CDT} + {467794800 -21600 0 CST} + {483523200 -18000 1 CDT} + {499244400 -21600 0 CST} + {514972800 -18000 1 CDT} + {530694000 -21600 0 CST} + {544608000 -18000 1 CDT} + {562143600 -21600 0 CST} + {576057600 -18000 1 CDT} + {594198000 -21600 0 CST} + {607507200 -18000 1 CDT} + {625647600 -21600 0 CST} + {638956800 -18000 1 CDT} + {657097200 -21600 0 CST} + {671011200 -18000 1 CDT} + {688546800 -21600 0 CST} + {702460800 -18000 1 CDT} + {719996400 -21600 0 CST} + {733910400 -18000 1 CDT} + {752050800 -21600 0 CST} + {765360000 -18000 1 CDT} + {783500400 -21600 0 CST} + {796809600 -18000 1 CDT} + {814950000 -21600 0 CST} + {828864000 -18000 1 CDT} + {846399600 -21600 0 CST} + {860313600 -18000 1 CDT} + {877849200 -21600 0 CST} + {891763200 -18000 1 CDT} + {909298800 -21600 0 CST} + {923212800 -18000 1 CDT} + {941353200 -21600 0 CST} + {954662400 -18000 1 CDT} + {972806400 -18000 0 EST} + {986112000 -18000 0 CDT} + {1004252400 -21600 0 CST} + {1018166400 -18000 1 CDT} + {1035702000 -21600 0 CST} + {1049616000 -18000 1 CDT} + {1067151600 -21600 0 CST} + {1081065600 -18000 1 CDT} + {1099206000 -21600 0 CST} + {1112515200 -18000 1 CDT} + {1130655600 -21600 0 CST} + {1143964800 -18000 1 CDT} + {1162108800 -18000 0 EST} + {1173600000 -18000 0 CDT} + {1194159600 -21600 0 CST} + {1205049600 -18000 1 CDT} + {1225609200 -21600 0 CST} + {1236499200 -18000 1 CDT} + {1257058800 -21600 0 CST} + {1268553600 -18000 1 CDT} + {1289113200 -21600 0 CST} + {1300003200 -18000 1 CDT} + {1320562800 -21600 0 CST} + {1331452800 -18000 1 CDT} + {1352012400 -21600 0 CST} + {1362902400 -18000 1 CDT} + {1383462000 -21600 0 CST} + {1394352000 -18000 1 CDT} + {1414911600 -21600 0 CST} + {1425801600 -18000 1 CDT} + {1446361200 -21600 0 CST} + {1457856000 -18000 1 CDT} + {1478415600 -21600 0 CST} + {1489305600 -18000 1 CDT} + {1509865200 -21600 0 CST} + {1520755200 -18000 1 CDT} + {1541314800 -21600 0 CST} + {1552204800 -18000 1 CDT} + {1572764400 -21600 0 CST} + {1583654400 -18000 1 CDT} + {1604214000 -21600 0 CST} + {1615708800 -18000 1 CDT} + {1636268400 -21600 0 CST} + {1647158400 -18000 1 CDT} + {1667718000 -21600 0 CST} + {1678608000 -18000 1 CDT} + {1699167600 -21600 0 CST} + {1710057600 -18000 1 CDT} + {1730617200 -21600 0 CST} + {1741507200 -18000 1 CDT} + {1762066800 -21600 0 CST} + {1772956800 -18000 1 CDT} + {1793516400 -21600 0 CST} + {1805011200 -18000 1 CDT} + {1825570800 -21600 0 CST} + {1836460800 -18000 1 CDT} + {1857020400 -21600 0 CST} + {1867910400 -18000 1 CDT} + {1888470000 -21600 0 CST} + {1899360000 -18000 1 CDT} + {1919919600 -21600 0 CST} + {1930809600 -18000 1 CDT} + {1951369200 -21600 0 CST} + {1962864000 -18000 1 CDT} + {1983423600 -21600 0 CST} + {1994313600 -18000 1 CDT} + {2014873200 -21600 0 CST} + {2025763200 -18000 1 CDT} + {2046322800 -21600 0 CST} + {2057212800 -18000 1 CDT} + {2077772400 -21600 0 CST} + {2088662400 -18000 1 CDT} + {2109222000 -21600 0 CST} + {2120112000 -18000 1 CDT} + {2140671600 -21600 0 CST} + {2152166400 -18000 1 CDT} + {2172726000 -21600 0 CST} + {2183616000 -18000 1 CDT} + {2204175600 -21600 0 CST} + {2215065600 -18000 1 CDT} + {2235625200 -21600 0 CST} + {2246515200 -18000 1 CDT} + {2267074800 -21600 0 CST} + {2277964800 -18000 1 CDT} + {2298524400 -21600 0 CST} + {2309414400 -18000 1 CDT} + {2329974000 -21600 0 CST} + {2341468800 -18000 1 CDT} + {2362028400 -21600 0 CST} + {2372918400 -18000 1 CDT} + {2393478000 -21600 0 CST} + {2404368000 -18000 1 CDT} + {2424927600 -21600 0 CST} + {2435817600 -18000 1 CDT} + {2456377200 -21600 0 CST} + {2467267200 -18000 1 CDT} + {2487826800 -21600 0 CST} + {2499321600 -18000 1 CDT} + {2519881200 -21600 0 CST} + {2530771200 -18000 1 CDT} + {2551330800 -21600 0 CST} + {2562220800 -18000 1 CDT} + {2582780400 -21600 0 CST} + {2593670400 -18000 1 CDT} + {2614230000 -21600 0 CST} + {2625120000 -18000 1 CDT} + {2645679600 -21600 0 CST} + {2656569600 -18000 1 CDT} + {2677129200 -21600 0 CST} + {2688624000 -18000 1 CDT} + {2709183600 -21600 0 CST} + {2720073600 -18000 1 CDT} + {2740633200 -21600 0 CST} + {2751523200 -18000 1 CDT} + {2772082800 -21600 0 CST} + {2782972800 -18000 1 CDT} + {2803532400 -21600 0 CST} + {2814422400 -18000 1 CDT} + {2834982000 -21600 0 CST} + {2846476800 -18000 1 CDT} + {2867036400 -21600 0 CST} + {2877926400 -18000 1 CDT} + {2898486000 -21600 0 CST} + {2909376000 -18000 1 CDT} + {2929935600 -21600 0 CST} + {2940825600 -18000 1 CDT} + {2961385200 -21600 0 CST} + {2972275200 -18000 1 CDT} + {2992834800 -21600 0 CST} + {3003724800 -18000 1 CDT} + {3024284400 -21600 0 CST} + {3035779200 -18000 1 CDT} + {3056338800 -21600 0 CST} + {3067228800 -18000 1 CDT} + {3087788400 -21600 0 CST} + {3098678400 -18000 1 CDT} + {3119238000 -21600 0 CST} + {3130128000 -18000 1 CDT} + {3150687600 -21600 0 CST} + {3161577600 -18000 1 CDT} + {3182137200 -21600 0 CST} + {3193027200 -18000 1 CDT} + {3213586800 -21600 0 CST} + {3225081600 -18000 1 CDT} + {3245641200 -21600 0 CST} + {3256531200 -18000 1 CDT} + {3277090800 -21600 0 CST} + {3287980800 -18000 1 CDT} + {3308540400 -21600 0 CST} + {3319430400 -18000 1 CDT} + {3339990000 -21600 0 CST} + {3350880000 -18000 1 CDT} + {3371439600 -21600 0 CST} + {3382934400 -18000 1 CDT} + {3403494000 -21600 0 CST} + {3414384000 -18000 1 CDT} + {3434943600 -21600 0 CST} + {3445833600 -18000 1 CDT} + {3466393200 -21600 0 CST} + {3477283200 -18000 1 CDT} + {3497842800 -21600 0 CST} + {3508732800 -18000 1 CDT} + {3529292400 -21600 0 CST} + {3540182400 -18000 1 CDT} + {3560742000 -21600 0 CST} + {3572236800 -18000 1 CDT} + {3592796400 -21600 0 CST} + {3603686400 -18000 1 CDT} + {3624246000 -21600 0 CST} + {3635136000 -18000 1 CDT} + {3655695600 -21600 0 CST} + {3666585600 -18000 1 CDT} + {3687145200 -21600 0 CST} + {3698035200 -18000 1 CDT} + {3718594800 -21600 0 CST} + {3730089600 -18000 1 CDT} + {3750649200 -21600 0 CST} + {3761539200 -18000 1 CDT} + {3782098800 -21600 0 CST} + {3792988800 -18000 1 CDT} + {3813548400 -21600 0 CST} + {3824438400 -18000 1 CDT} + {3844998000 -21600 0 CST} + {3855888000 -18000 1 CDT} + {3876447600 -21600 0 CST} + {3887337600 -18000 1 CDT} + {3907897200 -21600 0 CST} + {3919392000 -18000 1 CDT} + {3939951600 -21600 0 CST} + {3950841600 -18000 1 CDT} + {3971401200 -21600 0 CST} + {3982291200 -18000 1 CDT} + {4002850800 -21600 0 CST} + {4013740800 -18000 1 CDT} + {4034300400 -21600 0 CST} + {4045190400 -18000 1 CDT} + {4065750000 -21600 0 CST} + {4076640000 -18000 1 CDT} + {4097199600 -21600 0 CST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Rio_Branco b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Rio_Branco new file mode 100644 index 00000000..f0ff7fa4 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Rio_Branco @@ -0,0 +1,37 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Rio_Branco) { + {-9223372036854775808 -16272 0 LMT} + {-1767209328 -18000 0 ACT} + {-1206950400 -14400 1 ACST} + {-1191355200 -18000 0 ACT} + {-1175367600 -14400 1 ACST} + {-1159819200 -18000 0 ACT} + {-633812400 -14400 1 ACST} + {-622062000 -18000 0 ACT} + {-602276400 -14400 1 ACST} + {-591825600 -18000 0 ACT} + {-570740400 -14400 1 ACST} + {-560203200 -18000 0 ACT} + {-539118000 -14400 1 ACST} + {-531345600 -18000 0 ACT} + {-191358000 -14400 1 ACST} + {-184190400 -18000 0 ACT} + {-155156400 -14400 1 ACST} + {-150062400 -18000 0 ACT} + {-128890800 -14400 1 ACST} + {-121118400 -18000 0 ACT} + {-99946800 -14400 1 ACST} + {-89582400 -18000 0 ACT} + {-68410800 -14400 1 ACST} + {-57960000 -18000 0 ACT} + {499755600 -14400 1 ACST} + {511243200 -18000 0 ACT} + {530600400 -14400 1 ACST} + {540273600 -18000 0 ACT} + {562136400 -14400 1 ACST} + {571204800 -18000 0 ACT} + {590040000 -18000 0 ACT} + {1214283600 -14400 0 AMT} + {1384056000 -18000 0 ACT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Rosario b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Rosario new file mode 100644 index 00000000..6687f880 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Rosario @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Argentina/Cordoba)]} { + LoadTimeZoneFile America/Argentina/Cordoba +} +set TZData(:America/Rosario) $TZData(:America/Argentina/Cordoba) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Santa_Isabel b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Santa_Isabel new file mode 100644 index 00000000..87cb5a82 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Santa_Isabel @@ -0,0 +1,284 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Santa_Isabel) { + {-9223372036854775808 -27568 0 LMT} + {-1514736000 -25200 0 MST} + {-1451667600 -28800 0 PST} + {-1343062800 -25200 0 MST} + {-1234803600 -28800 0 PST} + {-1222963200 -25200 1 PDT} + {-1207242000 -28800 0 PST} + {-873820800 -25200 1 PWT} + {-769395600 -25200 1 PPT} + {-761677200 -28800 0 PST} + {-686073600 -25200 1 PDT} + {-661539600 -28800 0 PST} + {-504892800 -28800 0 PST} + {-495036000 -25200 1 PDT} + {-481734000 -28800 0 PST} + {-463586400 -25200 1 PDT} + {-450284400 -28800 0 PST} + {-431532000 -25200 1 PDT} + {-418230000 -28800 0 PST} + {-400082400 -25200 1 PDT} + {-386780400 -28800 0 PST} + {-368632800 -25200 1 PDT} + {-355330800 -28800 0 PST} + {-337183200 -25200 1 PDT} + {-323881200 -28800 0 PST} + {-305733600 -25200 1 PDT} + {-292431600 -28800 0 PST} + {-283968000 -28800 0 PST} + {189331200 -28800 0 PST} + {199274400 -25200 1 PDT} + {215600400 -28800 0 PST} + {230724000 -25200 1 PDT} + {247050000 -28800 0 PST} + {262778400 -25200 1 PDT} + {278499600 -28800 0 PST} + {294228000 -25200 1 PDT} + {309949200 -28800 0 PST} + {325677600 -25200 1 PDT} + {341398800 -28800 0 PST} + {357127200 -25200 1 PDT} + {372848400 -28800 0 PST} + {388576800 -25200 1 PDT} + {404902800 -28800 0 PST} + {420026400 -25200 1 PDT} + {436352400 -28800 0 PST} + {452080800 -25200 1 PDT} + {467802000 -28800 0 PST} + {483530400 -25200 1 PDT} + {499251600 -28800 0 PST} + {514980000 -25200 1 PDT} + {530701200 -28800 0 PST} + {544615200 -25200 1 PDT} + {562150800 -28800 0 PST} + {576064800 -25200 1 PDT} + {594205200 -28800 0 PST} + {607514400 -25200 1 PDT} + {625654800 -28800 0 PST} + {638964000 -25200 1 PDT} + {657104400 -28800 0 PST} + {671018400 -25200 1 PDT} + {688554000 -28800 0 PST} + {702468000 -25200 1 PDT} + {720003600 -28800 0 PST} + {733917600 -25200 1 PDT} + {752058000 -28800 0 PST} + {765367200 -25200 1 PDT} + {783507600 -28800 0 PST} + {796816800 -25200 1 PDT} + {814957200 -28800 0 PST} + {820483200 -28800 0 PST} + {828871200 -25200 1 PDT} + {846406800 -28800 0 PST} + {860320800 -25200 1 PDT} + {877856400 -28800 0 PST} + {891770400 -25200 1 PDT} + {909306000 -28800 0 PST} + {923220000 -25200 1 PDT} + {941360400 -28800 0 PST} + {954669600 -25200 1 PDT} + {972810000 -28800 0 PST} + {978336000 -28800 0 PST} + {986119200 -25200 1 PDT} + {1004259600 -28800 0 PST} + {1014192000 -28800 0 PST} + {1018173600 -25200 1 PDT} + {1035709200 -28800 0 PST} + {1049623200 -25200 1 PDT} + {1067158800 -28800 0 PST} + {1081072800 -25200 1 PDT} + {1099213200 -28800 0 PST} + {1112522400 -25200 1 PDT} + {1130662800 -28800 0 PST} + {1143972000 -25200 1 PDT} + {1162112400 -28800 0 PST} + {1175421600 -25200 1 PDT} + {1193562000 -28800 0 PST} + {1207476000 -25200 1 PDT} + {1225011600 -28800 0 PST} + {1238925600 -25200 1 PDT} + {1256461200 -28800 0 PST} + {1270375200 -25200 1 PDT} + {1288515600 -28800 0 PST} + {1301824800 -25200 1 PDT} + {1319965200 -28800 0 PST} + {1333274400 -25200 1 PDT} + {1351414800 -28800 0 PST} + {1365328800 -25200 1 PDT} + {1382864400 -28800 0 PST} + {1396778400 -25200 1 PDT} + {1414314000 -28800 0 PST} + {1428228000 -25200 1 PDT} + {1445763600 -28800 0 PST} + {1459677600 -25200 1 PDT} + {1477818000 -28800 0 PST} + {1491127200 -25200 1 PDT} + {1509267600 -28800 0 PST} + {1522576800 -25200 1 PDT} + {1540717200 -28800 0 PST} + {1554631200 -25200 1 PDT} + {1572166800 -28800 0 PST} + {1586080800 -25200 1 PDT} + {1603616400 -28800 0 PST} + {1617530400 -25200 1 PDT} + {1635670800 -28800 0 PST} + {1648980000 -25200 1 PDT} + {1667120400 -28800 0 PST} + {1680429600 -25200 1 PDT} + {1698570000 -28800 0 PST} + {1712484000 -25200 1 PDT} + {1730019600 -28800 0 PST} + {1743933600 -25200 1 PDT} + {1761469200 -28800 0 PST} + {1775383200 -25200 1 PDT} + {1792918800 -28800 0 PST} + {1806832800 -25200 1 PDT} + {1824973200 -28800 0 PST} + {1838282400 -25200 1 PDT} + {1856422800 -28800 0 PST} + {1869732000 -25200 1 PDT} + {1887872400 -28800 0 PST} + {1901786400 -25200 1 PDT} + {1919322000 -28800 0 PST} + {1933236000 -25200 1 PDT} + {1950771600 -28800 0 PST} + {1964685600 -25200 1 PDT} + {1982826000 -28800 0 PST} + {1996135200 -25200 1 PDT} + {2014275600 -28800 0 PST} + {2027584800 -25200 1 PDT} + {2045725200 -28800 0 PST} + {2059034400 -25200 1 PDT} + {2077174800 -28800 0 PST} + {2091088800 -25200 1 PDT} + {2108624400 -28800 0 PST} + {2122538400 -25200 1 PDT} + {2140074000 -28800 0 PST} + {2153988000 -25200 1 PDT} + {2172128400 -28800 0 PST} + {2185437600 -25200 1 PDT} + {2203578000 -28800 0 PST} + {2216887200 -25200 1 PDT} + {2235027600 -28800 0 PST} + {2248941600 -25200 1 PDT} + {2266477200 -28800 0 PST} + {2280391200 -25200 1 PDT} + {2297926800 -28800 0 PST} + {2311840800 -25200 1 PDT} + {2329376400 -28800 0 PST} + {2343290400 -25200 1 PDT} + {2361430800 -28800 0 PST} + {2374740000 -25200 1 PDT} + {2392880400 -28800 0 PST} + {2406189600 -25200 1 PDT} + {2424330000 -28800 0 PST} + {2438244000 -25200 1 PDT} + {2455779600 -28800 0 PST} + {2469693600 -25200 1 PDT} + {2487229200 -28800 0 PST} + {2501143200 -25200 1 PDT} + {2519283600 -28800 0 PST} + {2532592800 -25200 1 PDT} + {2550733200 -28800 0 PST} + {2564042400 -25200 1 PDT} + {2582182800 -28800 0 PST} + {2596096800 -25200 1 PDT} + {2613632400 -28800 0 PST} + {2627546400 -25200 1 PDT} + {2645082000 -28800 0 PST} + {2658996000 -25200 1 PDT} + {2676531600 -28800 0 PST} + {2690445600 -25200 1 PDT} + {2708586000 -28800 0 PST} + {2721895200 -25200 1 PDT} + {2740035600 -28800 0 PST} + {2753344800 -25200 1 PDT} + {2771485200 -28800 0 PST} + {2785399200 -25200 1 PDT} + {2802934800 -28800 0 PST} + {2816848800 -25200 1 PDT} + {2834384400 -28800 0 PST} + {2848298400 -25200 1 PDT} + {2866438800 -28800 0 PST} + {2879748000 -25200 1 PDT} + {2897888400 -28800 0 PST} + {2911197600 -25200 1 PDT} + {2929338000 -28800 0 PST} + {2942647200 -25200 1 PDT} + {2960787600 -28800 0 PST} + {2974701600 -25200 1 PDT} + {2992237200 -28800 0 PST} + {3006151200 -25200 1 PDT} + {3023686800 -28800 0 PST} + {3037600800 -25200 1 PDT} + {3055741200 -28800 0 PST} + {3069050400 -25200 1 PDT} + {3087190800 -28800 0 PST} + {3100500000 -25200 1 PDT} + {3118640400 -28800 0 PST} + {3132554400 -25200 1 PDT} + {3150090000 -28800 0 PST} + {3164004000 -25200 1 PDT} + {3181539600 -28800 0 PST} + {3195453600 -25200 1 PDT} + {3212989200 -28800 0 PST} + {3226903200 -25200 1 PDT} + {3245043600 -28800 0 PST} + {3258352800 -25200 1 PDT} + {3276493200 -28800 0 PST} + {3289802400 -25200 1 PDT} + {3307942800 -28800 0 PST} + {3321856800 -25200 1 PDT} + {3339392400 -28800 0 PST} + {3353306400 -25200 1 PDT} + {3370842000 -28800 0 PST} + {3384756000 -25200 1 PDT} + {3402896400 -28800 0 PST} + {3416205600 -25200 1 PDT} + {3434346000 -28800 0 PST} + {3447655200 -25200 1 PDT} + {3465795600 -28800 0 PST} + {3479709600 -25200 1 PDT} + {3497245200 -28800 0 PST} + {3511159200 -25200 1 PDT} + {3528694800 -28800 0 PST} + {3542608800 -25200 1 PDT} + {3560144400 -28800 0 PST} + {3574058400 -25200 1 PDT} + {3592198800 -28800 0 PST} + {3605508000 -25200 1 PDT} + {3623648400 -28800 0 PST} + {3636957600 -25200 1 PDT} + {3655098000 -28800 0 PST} + {3669012000 -25200 1 PDT} + {3686547600 -28800 0 PST} + {3700461600 -25200 1 PDT} + {3717997200 -28800 0 PST} + {3731911200 -25200 1 PDT} + {3750051600 -28800 0 PST} + {3763360800 -25200 1 PDT} + {3781501200 -28800 0 PST} + {3794810400 -25200 1 PDT} + {3812950800 -28800 0 PST} + {3826260000 -25200 1 PDT} + {3844400400 -28800 0 PST} + {3858314400 -25200 1 PDT} + {3875850000 -28800 0 PST} + {3889764000 -25200 1 PDT} + {3907299600 -28800 0 PST} + {3921213600 -25200 1 PDT} + {3939354000 -28800 0 PST} + {3952663200 -25200 1 PDT} + {3970803600 -28800 0 PST} + {3984112800 -25200 1 PDT} + {4002253200 -28800 0 PST} + {4016167200 -25200 1 PDT} + {4033702800 -28800 0 PST} + {4047616800 -25200 1 PDT} + {4065152400 -28800 0 PST} + {4079066400 -25200 1 PDT} + {4096602000 -28800 0 PST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Santarem b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Santarem new file mode 100644 index 00000000..b6e92647 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Santarem @@ -0,0 +1,36 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Santarem) { + {-9223372036854775808 -13128 0 LMT} + {-1767212472 -14400 0 AMT} + {-1206954000 -10800 1 AMST} + {-1191358800 -14400 0 AMT} + {-1175371200 -10800 1 AMST} + {-1159822800 -14400 0 AMT} + {-633816000 -10800 1 AMST} + {-622065600 -14400 0 AMT} + {-602280000 -10800 1 AMST} + {-591829200 -14400 0 AMT} + {-570744000 -10800 1 AMST} + {-560206800 -14400 0 AMT} + {-539121600 -10800 1 AMST} + {-531349200 -14400 0 AMT} + {-191361600 -10800 1 AMST} + {-184194000 -14400 0 AMT} + {-155160000 -10800 1 AMST} + {-150066000 -14400 0 AMT} + {-128894400 -10800 1 AMST} + {-121122000 -14400 0 AMT} + {-99950400 -10800 1 AMST} + {-89586000 -14400 0 AMT} + {-68414400 -10800 1 AMST} + {-57963600 -14400 0 AMT} + {499752000 -10800 1 AMST} + {511239600 -14400 0 AMT} + {530596800 -10800 1 AMST} + {540270000 -14400 0 AMT} + {562132800 -10800 1 AMST} + {571201200 -14400 0 AMT} + {590036400 -14400 0 AMT} + {1214280000 -10800 0 BRT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Santiago b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Santiago new file mode 100644 index 00000000..b6d9b381 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Santiago @@ -0,0 +1,122 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Santiago) { + {-9223372036854775808 -16966 0 LMT} + {-2524504634 -16966 0 SMT} + {-1892661434 -18000 0 CLT} + {-1688410800 -16966 0 SMT} + {-1619205434 -14400 0 CLT} + {-1593806400 -16966 0 SMT} + {-1335986234 -18000 0 CLT} + {-1335985200 -14400 1 CLST} + {-1317585600 -18000 0 CLT} + {-1304362800 -14400 1 CLST} + {-1286049600 -18000 0 CLT} + {-1272826800 -14400 1 CLST} + {-1254513600 -18000 0 CLT} + {-1241290800 -14400 1 CLST} + {-1222977600 -18000 0 CLT} + {-1209754800 -14400 1 CLST} + {-1191355200 -18000 0 CLT} + {-1178132400 -14400 0 CLT} + {-870552000 -18000 0 CLT} + {-865278000 -14400 0 CLT} + {-740520000 -10800 1 CLST} + {-736376400 -14400 0 CLT} + {-718056000 -18000 0 CLT} + {-713649600 -14400 0 CLT} + {-36619200 -10800 1 CLST} + {-23922000 -14400 0 CLT} + {-3355200 -10800 1 CLST} + {7527600 -14400 0 CLT} + {24465600 -10800 1 CLST} + {37767600 -14400 0 CLT} + {55915200 -10800 1 CLST} + {69217200 -14400 0 CLT} + {87969600 -10800 1 CLST} + {100666800 -14400 0 CLT} + {118209600 -10800 1 CLST} + {132116400 -14400 0 CLT} + {150868800 -10800 1 CLST} + {163566000 -14400 0 CLT} + {182318400 -10800 1 CLST} + {195620400 -14400 0 CLT} + {213768000 -10800 1 CLST} + {227070000 -14400 0 CLT} + {245217600 -10800 1 CLST} + {258519600 -14400 0 CLT} + {277272000 -10800 1 CLST} + {289969200 -14400 0 CLT} + {308721600 -10800 1 CLST} + {321418800 -14400 0 CLT} + {340171200 -10800 1 CLST} + {353473200 -14400 0 CLT} + {371620800 -10800 1 CLST} + {384922800 -14400 0 CLT} + {403070400 -10800 1 CLST} + {416372400 -14400 0 CLT} + {434520000 -10800 1 CLST} + {447822000 -14400 0 CLT} + {466574400 -10800 1 CLST} + {479271600 -14400 0 CLT} + {498024000 -10800 1 CLST} + {510721200 -14400 0 CLT} + {529473600 -10800 1 CLST} + {545194800 -14400 0 CLT} + {560923200 -10800 1 CLST} + {574225200 -14400 0 CLT} + {592372800 -10800 1 CLST} + {605674800 -14400 0 CLT} + {624427200 -10800 1 CLST} + {637124400 -14400 0 CLT} + {653457600 -10800 1 CLST} + {668574000 -14400 0 CLT} + {687326400 -10800 1 CLST} + {700628400 -14400 0 CLT} + {718776000 -10800 1 CLST} + {732078000 -14400 0 CLT} + {750225600 -10800 1 CLST} + {763527600 -14400 0 CLT} + {781675200 -10800 1 CLST} + {794977200 -14400 0 CLT} + {813729600 -10800 1 CLST} + {826426800 -14400 0 CLT} + {845179200 -10800 1 CLST} + {859690800 -14400 0 CLT} + {876628800 -10800 1 CLST} + {889930800 -14400 0 CLT} + {906868800 -10800 1 CLST} + {923194800 -14400 0 CLT} + {939528000 -10800 1 CLST} + {952830000 -14400 0 CLT} + {971582400 -10800 1 CLST} + {984279600 -14400 0 CLT} + {1003032000 -10800 1 CLST} + {1015729200 -14400 0 CLT} + {1034481600 -10800 1 CLST} + {1047178800 -14400 0 CLT} + {1065931200 -10800 1 CLST} + {1079233200 -14400 0 CLT} + {1097380800 -10800 1 CLST} + {1110682800 -14400 0 CLT} + {1128830400 -10800 1 CLST} + {1142132400 -14400 0 CLT} + {1160884800 -10800 1 CLST} + {1173582000 -14400 0 CLT} + {1192334400 -10800 1 CLST} + {1206846000 -14400 0 CLT} + {1223784000 -10800 1 CLST} + {1237086000 -14400 0 CLT} + {1255233600 -10800 1 CLST} + {1270350000 -14400 0 CLT} + {1286683200 -10800 1 CLST} + {1304823600 -14400 0 CLT} + {1313899200 -10800 1 CLST} + {1335668400 -14400 0 CLT} + {1346558400 -10800 1 CLST} + {1367118000 -14400 0 CLT} + {1378612800 -10800 1 CLST} + {1398567600 -14400 0 CLT} + {1410062400 -10800 1 CLST} + {1430017200 -10800 0 CLT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Santo_Domingo b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Santo_Domingo new file mode 100644 index 00000000..7706918d --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Santo_Domingo @@ -0,0 +1,21 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Santo_Domingo) { + {-9223372036854775808 -16776 0 LMT} + {-2524504824 -16800 0 SDMT} + {-1159773600 -18000 0 EST} + {-100119600 -14400 1 EDT} + {-89668800 -18000 0 EST} + {-5770800 -16200 1 EHDT} + {4422600 -18000 0 EST} + {25678800 -16200 1 EHDT} + {33193800 -18000 0 EST} + {57733200 -16200 1 EHDT} + {64816200 -18000 0 EST} + {89182800 -16200 1 EHDT} + {96438600 -18000 0 EST} + {120632400 -16200 1 EHDT} + {127974600 -18000 0 EST} + {152082000 -14400 0 AST} + {975823200 -14400 0 AST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Sao_Paulo b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Sao_Paulo new file mode 100644 index 00000000..8d700634 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Sao_Paulo @@ -0,0 +1,258 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Sao_Paulo) { + {-9223372036854775808 -11188 0 LMT} + {-1767214412 -10800 0 BRT} + {-1206957600 -7200 1 BRST} + {-1191362400 -10800 0 BRT} + {-1175374800 -7200 1 BRST} + {-1159826400 -10800 0 BRT} + {-633819600 -7200 1 BRST} + {-622069200 -10800 0 BRT} + {-602283600 -7200 1 BRST} + {-591832800 -10800 0 BRT} + {-570747600 -7200 1 BRST} + {-560210400 -10800 0 BRT} + {-539125200 -7200 1 BRST} + {-531352800 -10800 0 BRT} + {-195429600 -7200 1 BRST} + {-189381600 -7200 0 BRT} + {-184197600 -10800 0 BRT} + {-155163600 -7200 1 BRST} + {-150069600 -10800 0 BRT} + {-128898000 -7200 1 BRST} + {-121125600 -10800 0 BRT} + {-99954000 -7200 1 BRST} + {-89589600 -10800 0 BRT} + {-68418000 -7200 1 BRST} + {-57967200 -10800 0 BRT} + {499748400 -7200 1 BRST} + {511236000 -10800 0 BRT} + {530593200 -7200 1 BRST} + {540266400 -10800 0 BRT} + {562129200 -7200 1 BRST} + {571197600 -10800 0 BRT} + {592974000 -7200 1 BRST} + {602042400 -10800 0 BRT} + {624423600 -7200 1 BRST} + {634701600 -10800 0 BRT} + {656478000 -7200 1 BRST} + {666756000 -10800 0 BRT} + {687927600 -7200 1 BRST} + {697600800 -10800 0 BRT} + {719982000 -7200 1 BRST} + {728445600 -10800 0 BRT} + {750826800 -7200 1 BRST} + {761709600 -10800 0 BRT} + {782276400 -7200 1 BRST} + {793159200 -10800 0 BRT} + {813726000 -7200 1 BRST} + {824004000 -10800 0 BRT} + {844570800 -7200 1 BRST} + {856058400 -10800 0 BRT} + {876106800 -7200 1 BRST} + {888717600 -10800 0 BRT} + {908074800 -7200 1 BRST} + {919562400 -10800 0 BRT} + {938919600 -7200 1 BRST} + {951616800 -10800 0 BRT} + {970974000 -7200 1 BRST} + {982461600 -10800 0 BRT} + {1003028400 -7200 1 BRST} + {1013911200 -10800 0 BRT} + {1036292400 -7200 1 BRST} + {1045360800 -10800 0 BRT} + {1066532400 -7200 1 BRST} + {1076810400 -10800 0 BRT} + {1099364400 -7200 1 BRST} + {1108864800 -10800 0 BRT} + {1129431600 -7200 1 BRST} + {1140314400 -10800 0 BRT} + {1162695600 -7200 1 BRST} + {1172368800 -10800 0 BRT} + {1192330800 -7200 1 BRST} + {1203213600 -10800 0 BRT} + {1224385200 -7200 1 BRST} + {1234663200 -10800 0 BRT} + {1255834800 -7200 1 BRST} + {1266717600 -10800 0 BRT} + {1287284400 -7200 1 BRST} + {1298167200 -10800 0 BRT} + {1318734000 -7200 1 BRST} + {1330221600 -10800 0 BRT} + {1350788400 -7200 1 BRST} + {1361066400 -10800 0 BRT} + {1382238000 -7200 1 BRST} + {1392516000 -10800 0 BRT} + {1413687600 -7200 1 BRST} + {1424570400 -10800 0 BRT} + {1445137200 -7200 1 BRST} + {1456020000 -10800 0 BRT} + {1476586800 -7200 1 BRST} + {1487469600 -10800 0 BRT} + {1508036400 -7200 1 BRST} + {1518919200 -10800 0 BRT} + {1540090800 -7200 1 BRST} + {1550368800 -10800 0 BRT} + {1571540400 -7200 1 BRST} + {1581818400 -10800 0 BRT} + {1602990000 -7200 1 BRST} + {1613872800 -10800 0 BRT} + {1634439600 -7200 1 BRST} + {1645322400 -10800 0 BRT} + {1665889200 -7200 1 BRST} + {1677376800 -10800 0 BRT} + {1697338800 -7200 1 BRST} + {1708221600 -10800 0 BRT} + {1729393200 -7200 1 BRST} + {1739671200 -10800 0 BRT} + {1760842800 -7200 1 BRST} + {1771725600 -10800 0 BRT} + {1792292400 -7200 1 BRST} + {1803175200 -10800 0 BRT} + {1823742000 -7200 1 BRST} + {1834624800 -10800 0 BRT} + {1855191600 -7200 1 BRST} + {1866074400 -10800 0 BRT} + {1887246000 -7200 1 BRST} + {1897524000 -10800 0 BRT} + {1918695600 -7200 1 BRST} + {1928973600 -10800 0 BRT} + {1950145200 -7200 1 BRST} + {1960423200 -10800 0 BRT} + {1981594800 -7200 1 BRST} + {1992477600 -10800 0 BRT} + {2013044400 -7200 1 BRST} + {2024532000 -10800 0 BRT} + {2044494000 -7200 1 BRST} + {2055376800 -10800 0 BRT} + {2076548400 -7200 1 BRST} + {2086826400 -10800 0 BRT} + {2107998000 -7200 1 BRST} + {2118880800 -10800 0 BRT} + {2139447600 -7200 1 BRST} + {2150330400 -10800 0 BRT} + {2170897200 -7200 1 BRST} + {2181780000 -10800 0 BRT} + {2202346800 -7200 1 BRST} + {2213229600 -10800 0 BRT} + {2234401200 -7200 1 BRST} + {2244679200 -10800 0 BRT} + {2265850800 -7200 1 BRST} + {2276128800 -10800 0 BRT} + {2297300400 -7200 1 BRST} + {2307578400 -10800 0 BRT} + {2328750000 -7200 1 BRST} + {2339632800 -10800 0 BRT} + {2360199600 -7200 1 BRST} + {2371082400 -10800 0 BRT} + {2391649200 -7200 1 BRST} + {2402532000 -10800 0 BRT} + {2423703600 -7200 1 BRST} + {2433981600 -10800 0 BRT} + {2455153200 -7200 1 BRST} + {2465431200 -10800 0 BRT} + {2486602800 -7200 1 BRST} + {2497485600 -10800 0 BRT} + {2518052400 -7200 1 BRST} + {2528935200 -10800 0 BRT} + {2549502000 -7200 1 BRST} + {2560384800 -10800 0 BRT} + {2580951600 -7200 1 BRST} + {2591834400 -10800 0 BRT} + {2613006000 -7200 1 BRST} + {2623284000 -10800 0 BRT} + {2644455600 -7200 1 BRST} + {2654733600 -10800 0 BRT} + {2675905200 -7200 1 BRST} + {2686788000 -10800 0 BRT} + {2707354800 -7200 1 BRST} + {2718237600 -10800 0 BRT} + {2738804400 -7200 1 BRST} + {2749687200 -10800 0 BRT} + {2770858800 -7200 1 BRST} + {2781136800 -10800 0 BRT} + {2802308400 -7200 1 BRST} + {2812586400 -10800 0 BRT} + {2833758000 -7200 1 BRST} + {2844036000 -10800 0 BRT} + {2865207600 -7200 1 BRST} + {2876090400 -10800 0 BRT} + {2896657200 -7200 1 BRST} + {2907540000 -10800 0 BRT} + {2928106800 -7200 1 BRST} + {2938989600 -10800 0 BRT} + {2960161200 -7200 1 BRST} + {2970439200 -10800 0 BRT} + {2991610800 -7200 1 BRST} + {3001888800 -10800 0 BRT} + {3023060400 -7200 1 BRST} + {3033943200 -10800 0 BRT} + {3054510000 -7200 1 BRST} + {3065392800 -10800 0 BRT} + {3085959600 -7200 1 BRST} + {3096842400 -10800 0 BRT} + {3118014000 -7200 1 BRST} + {3128292000 -10800 0 BRT} + {3149463600 -7200 1 BRST} + {3159741600 -10800 0 BRT} + {3180913200 -7200 1 BRST} + {3191191200 -10800 0 BRT} + {3212362800 -7200 1 BRST} + {3223245600 -10800 0 BRT} + {3243812400 -7200 1 BRST} + {3254695200 -10800 0 BRT} + {3275262000 -7200 1 BRST} + {3286144800 -10800 0 BRT} + {3307316400 -7200 1 BRST} + {3317594400 -10800 0 BRT} + {3338766000 -7200 1 BRST} + {3349044000 -10800 0 BRT} + {3370215600 -7200 1 BRST} + {3381098400 -10800 0 BRT} + {3401665200 -7200 1 BRST} + {3412548000 -10800 0 BRT} + {3433114800 -7200 1 BRST} + {3443997600 -10800 0 BRT} + {3464564400 -7200 1 BRST} + {3475447200 -10800 0 BRT} + {3496618800 -7200 1 BRST} + {3506896800 -10800 0 BRT} + {3528068400 -7200 1 BRST} + {3538346400 -10800 0 BRT} + {3559518000 -7200 1 BRST} + {3570400800 -10800 0 BRT} + {3590967600 -7200 1 BRST} + {3601850400 -10800 0 BRT} + {3622417200 -7200 1 BRST} + {3633300000 -10800 0 BRT} + {3654471600 -7200 1 BRST} + {3664749600 -10800 0 BRT} + {3685921200 -7200 1 BRST} + {3696199200 -10800 0 BRT} + {3717370800 -7200 1 BRST} + {3727648800 -10800 0 BRT} + {3748820400 -7200 1 BRST} + {3759703200 -10800 0 BRT} + {3780270000 -7200 1 BRST} + {3791152800 -10800 0 BRT} + {3811719600 -7200 1 BRST} + {3822602400 -10800 0 BRT} + {3843774000 -7200 1 BRST} + {3854052000 -10800 0 BRT} + {3875223600 -7200 1 BRST} + {3885501600 -10800 0 BRT} + {3906673200 -7200 1 BRST} + {3917556000 -10800 0 BRT} + {3938122800 -7200 1 BRST} + {3949005600 -10800 0 BRT} + {3969572400 -7200 1 BRST} + {3980455200 -10800 0 BRT} + {4001626800 -7200 1 BRST} + {4011904800 -10800 0 BRT} + {4033076400 -7200 1 BRST} + {4043354400 -10800 0 BRT} + {4064526000 -7200 1 BRST} + {4074804000 -10800 0 BRT} + {4095975600 -7200 1 BRST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Scoresbysund b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Scoresbysund new file mode 100644 index 00000000..74a332cc --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Scoresbysund @@ -0,0 +1,246 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Scoresbysund) { + {-9223372036854775808 -5272 0 LMT} + {-1686090728 -7200 0 CGT} + {323841600 -3600 0 CGST} + {338961600 -7200 0 CGT} + {354679200 0 0 EGST} + {370400400 -3600 0 EGT} + {386125200 0 1 EGST} + {401850000 -3600 0 EGT} + {417574800 0 1 EGST} + {433299600 -3600 0 EGT} + {449024400 0 1 EGST} + {465354000 -3600 0 EGT} + {481078800 0 1 EGST} + {496803600 -3600 0 EGT} + {512528400 0 1 EGST} + {528253200 -3600 0 EGT} + {543978000 0 1 EGST} + {559702800 -3600 0 EGT} + {575427600 0 1 EGST} + {591152400 -3600 0 EGT} + {606877200 0 1 EGST} + {622602000 -3600 0 EGT} + {638326800 0 1 EGST} + {654656400 -3600 0 EGT} + {670381200 0 1 EGST} + {686106000 -3600 0 EGT} + {701830800 0 1 EGST} + {717555600 -3600 0 EGT} + {733280400 0 1 EGST} + {749005200 -3600 0 EGT} + {764730000 0 1 EGST} + {780454800 -3600 0 EGT} + {796179600 0 1 EGST} + {811904400 -3600 0 EGT} + {828234000 0 1 EGST} + {846378000 -3600 0 EGT} + {859683600 0 1 EGST} + {877827600 -3600 0 EGT} + {891133200 0 1 EGST} + {909277200 -3600 0 EGT} + {922582800 0 1 EGST} + {941331600 -3600 0 EGT} + {954032400 0 1 EGST} + {972781200 -3600 0 EGT} + {985482000 0 1 EGST} + {1004230800 -3600 0 EGT} + {1017536400 0 1 EGST} + {1035680400 -3600 0 EGT} + {1048986000 0 1 EGST} + {1067130000 -3600 0 EGT} + {1080435600 0 1 EGST} + {1099184400 -3600 0 EGT} + {1111885200 0 1 EGST} + {1130634000 -3600 0 EGT} + {1143334800 0 1 EGST} + {1162083600 -3600 0 EGT} + {1174784400 0 1 EGST} + {1193533200 -3600 0 EGT} + {1206838800 0 1 EGST} + {1224982800 -3600 0 EGT} + {1238288400 0 1 EGST} + {1256432400 -3600 0 EGT} + {1269738000 0 1 EGST} + {1288486800 -3600 0 EGT} + {1301187600 0 1 EGST} + {1319936400 -3600 0 EGT} + {1332637200 0 1 EGST} + {1351386000 -3600 0 EGT} + {1364691600 0 1 EGST} + {1382835600 -3600 0 EGT} + {1396141200 0 1 EGST} + {1414285200 -3600 0 EGT} + {1427590800 0 1 EGST} + {1445734800 -3600 0 EGT} + {1459040400 0 1 EGST} + {1477789200 -3600 0 EGT} + {1490490000 0 1 EGST} + {1509238800 -3600 0 EGT} + {1521939600 0 1 EGST} + {1540688400 -3600 0 EGT} + {1553994000 0 1 EGST} + {1572138000 -3600 0 EGT} + {1585443600 0 1 EGST} + {1603587600 -3600 0 EGT} + {1616893200 0 1 EGST} + {1635642000 -3600 0 EGT} + {1648342800 0 1 EGST} + {1667091600 -3600 0 EGT} + {1679792400 0 1 EGST} + {1698541200 -3600 0 EGT} + {1711846800 0 1 EGST} + {1729990800 -3600 0 EGT} + {1743296400 0 1 EGST} + {1761440400 -3600 0 EGT} + {1774746000 0 1 EGST} + {1792890000 -3600 0 EGT} + {1806195600 0 1 EGST} + {1824944400 -3600 0 EGT} + {1837645200 0 1 EGST} + {1856394000 -3600 0 EGT} + {1869094800 0 1 EGST} + {1887843600 -3600 0 EGT} + {1901149200 0 1 EGST} + {1919293200 -3600 0 EGT} + {1932598800 0 1 EGST} + {1950742800 -3600 0 EGT} + {1964048400 0 1 EGST} + {1982797200 -3600 0 EGT} + {1995498000 0 1 EGST} + {2014246800 -3600 0 EGT} + {2026947600 0 1 EGST} + {2045696400 -3600 0 EGT} + {2058397200 0 1 EGST} + {2077146000 -3600 0 EGT} + {2090451600 0 1 EGST} + {2108595600 -3600 0 EGT} + {2121901200 0 1 EGST} + {2140045200 -3600 0 EGT} + {2153350800 0 1 EGST} + {2172099600 -3600 0 EGT} + {2184800400 0 1 EGST} + {2203549200 -3600 0 EGT} + {2216250000 0 1 EGST} + {2234998800 -3600 0 EGT} + {2248304400 0 1 EGST} + {2266448400 -3600 0 EGT} + {2279754000 0 1 EGST} + {2297898000 -3600 0 EGT} + {2311203600 0 1 EGST} + {2329347600 -3600 0 EGT} + {2342653200 0 1 EGST} + {2361402000 -3600 0 EGT} + {2374102800 0 1 EGST} + {2392851600 -3600 0 EGT} + {2405552400 0 1 EGST} + {2424301200 -3600 0 EGT} + {2437606800 0 1 EGST} + {2455750800 -3600 0 EGT} + {2469056400 0 1 EGST} + {2487200400 -3600 0 EGT} + {2500506000 0 1 EGST} + {2519254800 -3600 0 EGT} + {2531955600 0 1 EGST} + {2550704400 -3600 0 EGT} + {2563405200 0 1 EGST} + {2582154000 -3600 0 EGT} + {2595459600 0 1 EGST} + {2613603600 -3600 0 EGT} + {2626909200 0 1 EGST} + {2645053200 -3600 0 EGT} + {2658358800 0 1 EGST} + {2676502800 -3600 0 EGT} + {2689808400 0 1 EGST} + {2708557200 -3600 0 EGT} + {2721258000 0 1 EGST} + {2740006800 -3600 0 EGT} + {2752707600 0 1 EGST} + {2771456400 -3600 0 EGT} + {2784762000 0 1 EGST} + {2802906000 -3600 0 EGT} + {2816211600 0 1 EGST} + {2834355600 -3600 0 EGT} + {2847661200 0 1 EGST} + {2866410000 -3600 0 EGT} + {2879110800 0 1 EGST} + {2897859600 -3600 0 EGT} + {2910560400 0 1 EGST} + {2929309200 -3600 0 EGT} + {2942010000 0 1 EGST} + {2960758800 -3600 0 EGT} + {2974064400 0 1 EGST} + {2992208400 -3600 0 EGT} + {3005514000 0 1 EGST} + {3023658000 -3600 0 EGT} + {3036963600 0 1 EGST} + {3055712400 -3600 0 EGT} + {3068413200 0 1 EGST} + {3087162000 -3600 0 EGT} + {3099862800 0 1 EGST} + {3118611600 -3600 0 EGT} + {3131917200 0 1 EGST} + {3150061200 -3600 0 EGT} + {3163366800 0 1 EGST} + {3181510800 -3600 0 EGT} + {3194816400 0 1 EGST} + {3212960400 -3600 0 EGT} + {3226266000 0 1 EGST} + {3245014800 -3600 0 EGT} + {3257715600 0 1 EGST} + {3276464400 -3600 0 EGT} + {3289165200 0 1 EGST} + {3307914000 -3600 0 EGT} + {3321219600 0 1 EGST} + {3339363600 -3600 0 EGT} + {3352669200 0 1 EGST} + {3370813200 -3600 0 EGT} + {3384118800 0 1 EGST} + {3402867600 -3600 0 EGT} + {3415568400 0 1 EGST} + {3434317200 -3600 0 EGT} + {3447018000 0 1 EGST} + {3465766800 -3600 0 EGT} + {3479072400 0 1 EGST} + {3497216400 -3600 0 EGT} + {3510522000 0 1 EGST} + {3528666000 -3600 0 EGT} + {3541971600 0 1 EGST} + {3560115600 -3600 0 EGT} + {3573421200 0 1 EGST} + {3592170000 -3600 0 EGT} + {3604870800 0 1 EGST} + {3623619600 -3600 0 EGT} + {3636320400 0 1 EGST} + {3655069200 -3600 0 EGT} + {3668374800 0 1 EGST} + {3686518800 -3600 0 EGT} + {3699824400 0 1 EGST} + {3717968400 -3600 0 EGT} + {3731274000 0 1 EGST} + {3750022800 -3600 0 EGT} + {3762723600 0 1 EGST} + {3781472400 -3600 0 EGT} + {3794173200 0 1 EGST} + {3812922000 -3600 0 EGT} + {3825622800 0 1 EGST} + {3844371600 -3600 0 EGT} + {3857677200 0 1 EGST} + {3875821200 -3600 0 EGT} + {3889126800 0 1 EGST} + {3907270800 -3600 0 EGT} + {3920576400 0 1 EGST} + {3939325200 -3600 0 EGT} + {3952026000 0 1 EGST} + {3970774800 -3600 0 EGT} + {3983475600 0 1 EGST} + {4002224400 -3600 0 EGT} + {4015530000 0 1 EGST} + {4033674000 -3600 0 EGT} + {4046979600 0 1 EGST} + {4065123600 -3600 0 EGT} + {4078429200 0 1 EGST} + {4096573200 -3600 0 EGT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Shiprock b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Shiprock new file mode 100644 index 00000000..995d25d3 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Shiprock @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Denver)]} { + LoadTimeZoneFile America/Denver +} +set TZData(:America/Shiprock) $TZData(:America/Denver) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Sitka b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Sitka new file mode 100644 index 00000000..8c53d930 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Sitka @@ -0,0 +1,275 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Sitka) { + {-9223372036854775808 53927 0 LMT} + {-3225365927 -32473 0 LMT} + {-2188954727 -28800 0 PST} + {-883584000 -28800 0 PST} + {-880207200 -25200 1 PWT} + {-769395600 -25200 1 PPT} + {-765385200 -28800 0 PST} + {-757353600 -28800 0 PST} + {-31507200 -28800 0 PST} + {-21477600 -25200 1 PDT} + {-5756400 -28800 0 PST} + {9972000 -25200 1 PDT} + {25693200 -28800 0 PST} + {41421600 -25200 1 PDT} + {57747600 -28800 0 PST} + {73476000 -25200 1 PDT} + {89197200 -28800 0 PST} + {104925600 -25200 1 PDT} + {120646800 -28800 0 PST} + {126698400 -25200 1 PDT} + {152096400 -28800 0 PST} + {162381600 -25200 1 PDT} + {183546000 -28800 0 PST} + {199274400 -25200 1 PDT} + {215600400 -28800 0 PST} + {230724000 -25200 1 PDT} + {247050000 -28800 0 PST} + {262778400 -25200 1 PDT} + {278499600 -28800 0 PST} + {294228000 -25200 1 PDT} + {309949200 -28800 0 PST} + {325677600 -25200 1 PDT} + {341398800 -28800 0 PST} + {357127200 -25200 1 PDT} + {372848400 -28800 0 PST} + {388576800 -25200 1 PDT} + {404902800 -28800 0 PST} + {420026400 -25200 1 PDT} + {439030800 -32400 0 AKST} + {452084400 -28800 1 AKDT} + {467805600 -32400 0 AKST} + {483534000 -28800 1 AKDT} + {499255200 -32400 0 AKST} + {514983600 -28800 1 AKDT} + {530704800 -32400 0 AKST} + {544618800 -28800 1 AKDT} + {562154400 -32400 0 AKST} + {576068400 -28800 1 AKDT} + {594208800 -32400 0 AKST} + {607518000 -28800 1 AKDT} + {625658400 -32400 0 AKST} + {638967600 -28800 1 AKDT} + {657108000 -32400 0 AKST} + {671022000 -28800 1 AKDT} + {688557600 -32400 0 AKST} + {702471600 -28800 1 AKDT} + {720007200 -32400 0 AKST} + {733921200 -28800 1 AKDT} + {752061600 -32400 0 AKST} + {765370800 -28800 1 AKDT} + {783511200 -32400 0 AKST} + {796820400 -28800 1 AKDT} + {814960800 -32400 0 AKST} + {828874800 -28800 1 AKDT} + {846410400 -32400 0 AKST} + {860324400 -28800 1 AKDT} + {877860000 -32400 0 AKST} + {891774000 -28800 1 AKDT} + {909309600 -32400 0 AKST} + {923223600 -28800 1 AKDT} + {941364000 -32400 0 AKST} + {954673200 -28800 1 AKDT} + {972813600 -32400 0 AKST} + {986122800 -28800 1 AKDT} + {1004263200 -32400 0 AKST} + {1018177200 -28800 1 AKDT} + {1035712800 -32400 0 AKST} + {1049626800 -28800 1 AKDT} + {1067162400 -32400 0 AKST} + {1081076400 -28800 1 AKDT} + {1099216800 -32400 0 AKST} + {1112526000 -28800 1 AKDT} + {1130666400 -32400 0 AKST} + {1143975600 -28800 1 AKDT} + {1162116000 -32400 0 AKST} + {1173610800 -28800 1 AKDT} + {1194170400 -32400 0 AKST} + {1205060400 -28800 1 AKDT} + {1225620000 -32400 0 AKST} + {1236510000 -28800 1 AKDT} + {1257069600 -32400 0 AKST} + {1268564400 -28800 1 AKDT} + {1289124000 -32400 0 AKST} + {1300014000 -28800 1 AKDT} + {1320573600 -32400 0 AKST} + {1331463600 -28800 1 AKDT} + {1352023200 -32400 0 AKST} + {1362913200 -28800 1 AKDT} + {1383472800 -32400 0 AKST} + {1394362800 -28800 1 AKDT} + {1414922400 -32400 0 AKST} + {1425812400 -28800 1 AKDT} + {1446372000 -32400 0 AKST} + {1457866800 -28800 1 AKDT} + {1478426400 -32400 0 AKST} + {1489316400 -28800 1 AKDT} + {1509876000 -32400 0 AKST} + {1520766000 -28800 1 AKDT} + {1541325600 -32400 0 AKST} + {1552215600 -28800 1 AKDT} + {1572775200 -32400 0 AKST} + {1583665200 -28800 1 AKDT} + {1604224800 -32400 0 AKST} + {1615719600 -28800 1 AKDT} + {1636279200 -32400 0 AKST} + {1647169200 -28800 1 AKDT} + {1667728800 -32400 0 AKST} + {1678618800 -28800 1 AKDT} + {1699178400 -32400 0 AKST} + {1710068400 -28800 1 AKDT} + {1730628000 -32400 0 AKST} + {1741518000 -28800 1 AKDT} + {1762077600 -32400 0 AKST} + {1772967600 -28800 1 AKDT} + {1793527200 -32400 0 AKST} + {1805022000 -28800 1 AKDT} + {1825581600 -32400 0 AKST} + {1836471600 -28800 1 AKDT} + {1857031200 -32400 0 AKST} + {1867921200 -28800 1 AKDT} + {1888480800 -32400 0 AKST} + {1899370800 -28800 1 AKDT} + {1919930400 -32400 0 AKST} + {1930820400 -28800 1 AKDT} + {1951380000 -32400 0 AKST} + {1962874800 -28800 1 AKDT} + {1983434400 -32400 0 AKST} + {1994324400 -28800 1 AKDT} + {2014884000 -32400 0 AKST} + {2025774000 -28800 1 AKDT} + {2046333600 -32400 0 AKST} + {2057223600 -28800 1 AKDT} + {2077783200 -32400 0 AKST} + {2088673200 -28800 1 AKDT} + {2109232800 -32400 0 AKST} + {2120122800 -28800 1 AKDT} + {2140682400 -32400 0 AKST} + {2152177200 -28800 1 AKDT} + {2172736800 -32400 0 AKST} + {2183626800 -28800 1 AKDT} + {2204186400 -32400 0 AKST} + {2215076400 -28800 1 AKDT} + {2235636000 -32400 0 AKST} + {2246526000 -28800 1 AKDT} + {2267085600 -32400 0 AKST} + {2277975600 -28800 1 AKDT} + {2298535200 -32400 0 AKST} + {2309425200 -28800 1 AKDT} + {2329984800 -32400 0 AKST} + {2341479600 -28800 1 AKDT} + {2362039200 -32400 0 AKST} + {2372929200 -28800 1 AKDT} + {2393488800 -32400 0 AKST} + {2404378800 -28800 1 AKDT} + {2424938400 -32400 0 AKST} + {2435828400 -28800 1 AKDT} + {2456388000 -32400 0 AKST} + {2467278000 -28800 1 AKDT} + {2487837600 -32400 0 AKST} + {2499332400 -28800 1 AKDT} + {2519892000 -32400 0 AKST} + {2530782000 -28800 1 AKDT} + {2551341600 -32400 0 AKST} + {2562231600 -28800 1 AKDT} + {2582791200 -32400 0 AKST} + {2593681200 -28800 1 AKDT} + {2614240800 -32400 0 AKST} + {2625130800 -28800 1 AKDT} + {2645690400 -32400 0 AKST} + {2656580400 -28800 1 AKDT} + {2677140000 -32400 0 AKST} + {2688634800 -28800 1 AKDT} + {2709194400 -32400 0 AKST} + {2720084400 -28800 1 AKDT} + {2740644000 -32400 0 AKST} + {2751534000 -28800 1 AKDT} + {2772093600 -32400 0 AKST} + {2782983600 -28800 1 AKDT} + {2803543200 -32400 0 AKST} + {2814433200 -28800 1 AKDT} + {2834992800 -32400 0 AKST} + {2846487600 -28800 1 AKDT} + {2867047200 -32400 0 AKST} + {2877937200 -28800 1 AKDT} + {2898496800 -32400 0 AKST} + {2909386800 -28800 1 AKDT} + {2929946400 -32400 0 AKST} + {2940836400 -28800 1 AKDT} + {2961396000 -32400 0 AKST} + {2972286000 -28800 1 AKDT} + {2992845600 -32400 0 AKST} + {3003735600 -28800 1 AKDT} + {3024295200 -32400 0 AKST} + {3035790000 -28800 1 AKDT} + {3056349600 -32400 0 AKST} + {3067239600 -28800 1 AKDT} + {3087799200 -32400 0 AKST} + {3098689200 -28800 1 AKDT} + {3119248800 -32400 0 AKST} + {3130138800 -28800 1 AKDT} + {3150698400 -32400 0 AKST} + {3161588400 -28800 1 AKDT} + {3182148000 -32400 0 AKST} + {3193038000 -28800 1 AKDT} + {3213597600 -32400 0 AKST} + {3225092400 -28800 1 AKDT} + {3245652000 -32400 0 AKST} + {3256542000 -28800 1 AKDT} + {3277101600 -32400 0 AKST} + {3287991600 -28800 1 AKDT} + {3308551200 -32400 0 AKST} + {3319441200 -28800 1 AKDT} + {3340000800 -32400 0 AKST} + {3350890800 -28800 1 AKDT} + {3371450400 -32400 0 AKST} + {3382945200 -28800 1 AKDT} + {3403504800 -32400 0 AKST} + {3414394800 -28800 1 AKDT} + {3434954400 -32400 0 AKST} + {3445844400 -28800 1 AKDT} + {3466404000 -32400 0 AKST} + {3477294000 -28800 1 AKDT} + {3497853600 -32400 0 AKST} + {3508743600 -28800 1 AKDT} + {3529303200 -32400 0 AKST} + {3540193200 -28800 1 AKDT} + {3560752800 -32400 0 AKST} + {3572247600 -28800 1 AKDT} + {3592807200 -32400 0 AKST} + {3603697200 -28800 1 AKDT} + {3624256800 -32400 0 AKST} + {3635146800 -28800 1 AKDT} + {3655706400 -32400 0 AKST} + {3666596400 -28800 1 AKDT} + {3687156000 -32400 0 AKST} + {3698046000 -28800 1 AKDT} + {3718605600 -32400 0 AKST} + {3730100400 -28800 1 AKDT} + {3750660000 -32400 0 AKST} + {3761550000 -28800 1 AKDT} + {3782109600 -32400 0 AKST} + {3792999600 -28800 1 AKDT} + {3813559200 -32400 0 AKST} + {3824449200 -28800 1 AKDT} + {3845008800 -32400 0 AKST} + {3855898800 -28800 1 AKDT} + {3876458400 -32400 0 AKST} + {3887348400 -28800 1 AKDT} + {3907908000 -32400 0 AKST} + {3919402800 -28800 1 AKDT} + {3939962400 -32400 0 AKST} + {3950852400 -28800 1 AKDT} + {3971412000 -32400 0 AKST} + {3982302000 -28800 1 AKDT} + {4002861600 -32400 0 AKST} + {4013751600 -28800 1 AKDT} + {4034311200 -32400 0 AKST} + {4045201200 -28800 1 AKDT} + {4065760800 -32400 0 AKST} + {4076650800 -28800 1 AKDT} + {4097210400 -32400 0 AKST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/St_Barthelemy b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/St_Barthelemy new file mode 100644 index 00000000..46bc287b --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/St_Barthelemy @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Port_of_Spain)]} { + LoadTimeZoneFile America/Port_of_Spain +} +set TZData(:America/St_Barthelemy) $TZData(:America/Port_of_Spain) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/St_Johns b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/St_Johns new file mode 100644 index 00000000..1492961d --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/St_Johns @@ -0,0 +1,372 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/St_Johns) { + {-9223372036854775808 -12652 0 LMT} + {-2713897748 -12652 0 NST} + {-1664130548 -9052 1 NDT} + {-1650137348 -12652 0 NST} + {-1640982548 -12652 0 NST} + {-1632076148 -9052 1 NDT} + {-1615145348 -12652 0 NST} + {-1609446548 -12652 0 NST} + {-1598650148 -9052 1 NDT} + {-1590100148 -12652 0 NST} + {-1567286948 -9052 1 NDT} + {-1551565748 -12652 0 NST} + {-1535837348 -9052 1 NDT} + {-1520116148 -12652 0 NST} + {-1503782948 -9052 1 NDT} + {-1488666548 -12652 0 NST} + {-1472333348 -9052 1 NDT} + {-1457216948 -12652 0 NST} + {-1440883748 -9052 1 NDT} + {-1425767348 -12652 0 NST} + {-1409434148 -9052 1 NDT} + {-1394317748 -12652 0 NST} + {-1377984548 -9052 1 NDT} + {-1362263348 -12652 0 NST} + {-1346534948 -9052 1 NDT} + {-1330813748 -12652 0 NST} + {-1314480548 -9052 1 NDT} + {-1299364148 -12652 0 NST} + {-1283030948 -9052 1 NDT} + {-1267914548 -12652 0 NST} + {-1251581348 -9052 1 NDT} + {-1236464948 -12652 0 NST} + {-1220131748 -9052 1 NDT} + {-1205015348 -12652 0 NST} + {-1188682148 -9052 1 NDT} + {-1172960948 -12652 0 NST} + {-1156627748 -9052 1 NDT} + {-1141511348 -12652 0 NST} + {-1125178148 -9052 1 NDT} + {-1110061748 -12652 0 NST} + {-1096921748 -12600 0 NST} + {-1093728600 -9000 1 NDT} + {-1078612200 -12600 0 NST} + {-1061670600 -9000 1 NDT} + {-1048973400 -12600 0 NST} + {-1030221000 -9000 1 NDT} + {-1017523800 -12600 0 NST} + {-998771400 -9000 1 NDT} + {-986074200 -12600 0 NST} + {-966717000 -9000 1 NDT} + {-954624600 -12600 0 NST} + {-935267400 -9000 1 NDT} + {-922570200 -12600 0 NST} + {-903817800 -9000 1 NDT} + {-891120600 -12600 0 NST} + {-872368200 -9000 0 NWT} + {-769395600 -9000 1 NPT} + {-765401400 -12600 0 NST} + {-757369800 -12600 0 NST} + {-746044200 -9000 1 NDT} + {-733347000 -12600 0 NST} + {-714594600 -9000 1 NDT} + {-701897400 -12600 0 NST} + {-683145000 -9000 1 NDT} + {-670447800 -12600 0 NST} + {-651695400 -9000 1 NDT} + {-638998200 -12600 0 NST} + {-619641000 -9000 1 NDT} + {-606943800 -12600 0 NST} + {-589401000 -9000 1 NDT} + {-576099000 -12600 0 NST} + {-557951400 -9000 1 NDT} + {-544649400 -12600 0 NST} + {-526501800 -9000 1 NDT} + {-513199800 -12600 0 NST} + {-495052200 -9000 1 NDT} + {-481750200 -12600 0 NST} + {-463602600 -9000 1 NDT} + {-450300600 -12600 0 NST} + {-431548200 -9000 1 NDT} + {-418246200 -12600 0 NST} + {-400098600 -9000 1 NDT} + {-386796600 -12600 0 NST} + {-368649000 -9000 1 NDT} + {-355347000 -12600 0 NST} + {-337199400 -9000 1 NDT} + {-323897400 -12600 0 NST} + {-305749800 -9000 1 NDT} + {-289423800 -12600 0 NST} + {-273695400 -9000 1 NDT} + {-257974200 -12600 0 NST} + {-242245800 -9000 1 NDT} + {-226524600 -12600 0 NST} + {-210796200 -9000 1 NDT} + {-195075000 -12600 0 NST} + {-179346600 -9000 1 NDT} + {-163625400 -12600 0 NST} + {-147897000 -9000 1 NDT} + {-131571000 -12600 0 NST} + {-116447400 -9000 1 NDT} + {-100121400 -12600 0 NST} + {-84393000 -9000 1 NDT} + {-68671800 -12600 0 NST} + {-52943400 -9000 1 NDT} + {-37222200 -12600 0 NST} + {-21493800 -9000 1 NDT} + {-5772600 -12600 0 NST} + {9955800 -9000 1 NDT} + {25677000 -12600 0 NST} + {41405400 -9000 1 NDT} + {57731400 -12600 0 NST} + {73459800 -9000 1 NDT} + {89181000 -12600 0 NST} + {104909400 -9000 1 NDT} + {120630600 -12600 0 NST} + {136359000 -9000 1 NDT} + {152080200 -12600 0 NST} + {167808600 -9000 1 NDT} + {183529800 -12600 0 NST} + {199258200 -9000 1 NDT} + {215584200 -12600 0 NST} + {230707800 -9000 1 NDT} + {247033800 -12600 0 NST} + {262762200 -9000 1 NDT} + {278483400 -12600 0 NST} + {294211800 -9000 1 NDT} + {309933000 -12600 0 NST} + {325661400 -9000 1 NDT} + {341382600 -12600 0 NST} + {357111000 -9000 1 NDT} + {372832200 -12600 0 NST} + {388560600 -9000 1 NDT} + {404886600 -12600 0 NST} + {420010200 -9000 1 NDT} + {436336200 -12600 0 NST} + {452064600 -9000 1 NDT} + {467785800 -12600 0 NST} + {483514200 -9000 1 NDT} + {499235400 -12600 0 NST} + {514963800 -9000 1 NDT} + {530685000 -12600 0 NST} + {544591860 -9000 1 NDT} + {562127460 -12600 0 NST} + {576041460 -5400 1 NDDT} + {594178260 -12600 0 NST} + {607491060 -9000 1 NDT} + {625631460 -12600 0 NST} + {638940660 -9000 1 NDT} + {657081060 -12600 0 NST} + {670995060 -9000 1 NDT} + {688530660 -12600 0 NST} + {702444660 -9000 1 NDT} + {719980260 -12600 0 NST} + {733894260 -9000 1 NDT} + {752034660 -12600 0 NST} + {765343860 -9000 1 NDT} + {783484260 -12600 0 NST} + {796793460 -9000 1 NDT} + {814933860 -12600 0 NST} + {828847860 -9000 1 NDT} + {846383460 -12600 0 NST} + {860297460 -9000 1 NDT} + {877833060 -12600 0 NST} + {891747060 -9000 1 NDT} + {909282660 -12600 0 NST} + {923196660 -9000 1 NDT} + {941337060 -12600 0 NST} + {954646260 -9000 1 NDT} + {972786660 -12600 0 NST} + {986095860 -9000 1 NDT} + {1004236260 -12600 0 NST} + {1018150260 -9000 1 NDT} + {1035685860 -12600 0 NST} + {1049599860 -9000 1 NDT} + {1067135460 -12600 0 NST} + {1081049460 -9000 1 NDT} + {1099189860 -12600 0 NST} + {1112499060 -9000 1 NDT} + {1130639460 -12600 0 NST} + {1143948660 -9000 1 NDT} + {1162089060 -12600 0 NST} + {1173583860 -9000 1 NDT} + {1194143460 -12600 0 NST} + {1205033460 -9000 1 NDT} + {1225593060 -12600 0 NST} + {1236483060 -9000 1 NDT} + {1257042660 -12600 0 NST} + {1268537460 -9000 1 NDT} + {1289097060 -12600 0 NST} + {1299987060 -9000 1 NDT} + {1320114600 -9000 0 NDT} + {1320553800 -12600 0 NST} + {1331443800 -9000 1 NDT} + {1352003400 -12600 0 NST} + {1362893400 -9000 1 NDT} + {1383453000 -12600 0 NST} + {1394343000 -9000 1 NDT} + {1414902600 -12600 0 NST} + {1425792600 -9000 1 NDT} + {1446352200 -12600 0 NST} + {1457847000 -9000 1 NDT} + {1478406600 -12600 0 NST} + {1489296600 -9000 1 NDT} + {1509856200 -12600 0 NST} + {1520746200 -9000 1 NDT} + {1541305800 -12600 0 NST} + {1552195800 -9000 1 NDT} + {1572755400 -12600 0 NST} + {1583645400 -9000 1 NDT} + {1604205000 -12600 0 NST} + {1615699800 -9000 1 NDT} + {1636259400 -12600 0 NST} + {1647149400 -9000 1 NDT} + {1667709000 -12600 0 NST} + {1678599000 -9000 1 NDT} + {1699158600 -12600 0 NST} + {1710048600 -9000 1 NDT} + {1730608200 -12600 0 NST} + {1741498200 -9000 1 NDT} + {1762057800 -12600 0 NST} + {1772947800 -9000 1 NDT} + {1793507400 -12600 0 NST} + {1805002200 -9000 1 NDT} + {1825561800 -12600 0 NST} + {1836451800 -9000 1 NDT} + {1857011400 -12600 0 NST} + {1867901400 -9000 1 NDT} + {1888461000 -12600 0 NST} + {1899351000 -9000 1 NDT} + {1919910600 -12600 0 NST} + {1930800600 -9000 1 NDT} + {1951360200 -12600 0 NST} + {1962855000 -9000 1 NDT} + {1983414600 -12600 0 NST} + {1994304600 -9000 1 NDT} + {2014864200 -12600 0 NST} + {2025754200 -9000 1 NDT} + {2046313800 -12600 0 NST} + {2057203800 -9000 1 NDT} + {2077763400 -12600 0 NST} + {2088653400 -9000 1 NDT} + {2109213000 -12600 0 NST} + {2120103000 -9000 1 NDT} + {2140662600 -12600 0 NST} + {2152157400 -9000 1 NDT} + {2172717000 -12600 0 NST} + {2183607000 -9000 1 NDT} + {2204166600 -12600 0 NST} + {2215056600 -9000 1 NDT} + {2235616200 -12600 0 NST} + {2246506200 -9000 1 NDT} + {2267065800 -12600 0 NST} + {2277955800 -9000 1 NDT} + {2298515400 -12600 0 NST} + {2309405400 -9000 1 NDT} + {2329965000 -12600 0 NST} + {2341459800 -9000 1 NDT} + {2362019400 -12600 0 NST} + {2372909400 -9000 1 NDT} + {2393469000 -12600 0 NST} + {2404359000 -9000 1 NDT} + {2424918600 -12600 0 NST} + {2435808600 -9000 1 NDT} + {2456368200 -12600 0 NST} + {2467258200 -9000 1 NDT} + {2487817800 -12600 0 NST} + {2499312600 -9000 1 NDT} + {2519872200 -12600 0 NST} + {2530762200 -9000 1 NDT} + {2551321800 -12600 0 NST} + {2562211800 -9000 1 NDT} + {2582771400 -12600 0 NST} + {2593661400 -9000 1 NDT} + {2614221000 -12600 0 NST} + {2625111000 -9000 1 NDT} + {2645670600 -12600 0 NST} + {2656560600 -9000 1 NDT} + {2677120200 -12600 0 NST} + {2688615000 -9000 1 NDT} + {2709174600 -12600 0 NST} + {2720064600 -9000 1 NDT} + {2740624200 -12600 0 NST} + {2751514200 -9000 1 NDT} + {2772073800 -12600 0 NST} + {2782963800 -9000 1 NDT} + {2803523400 -12600 0 NST} + {2814413400 -9000 1 NDT} + {2834973000 -12600 0 NST} + {2846467800 -9000 1 NDT} + {2867027400 -12600 0 NST} + {2877917400 -9000 1 NDT} + {2898477000 -12600 0 NST} + {2909367000 -9000 1 NDT} + {2929926600 -12600 0 NST} + {2940816600 -9000 1 NDT} + {2961376200 -12600 0 NST} + {2972266200 -9000 1 NDT} + {2992825800 -12600 0 NST} + {3003715800 -9000 1 NDT} + {3024275400 -12600 0 NST} + {3035770200 -9000 1 NDT} + {3056329800 -12600 0 NST} + {3067219800 -9000 1 NDT} + {3087779400 -12600 0 NST} + {3098669400 -9000 1 NDT} + {3119229000 -12600 0 NST} + {3130119000 -9000 1 NDT} + {3150678600 -12600 0 NST} + {3161568600 -9000 1 NDT} + {3182128200 -12600 0 NST} + {3193018200 -9000 1 NDT} + {3213577800 -12600 0 NST} + {3225072600 -9000 1 NDT} + {3245632200 -12600 0 NST} + {3256522200 -9000 1 NDT} + {3277081800 -12600 0 NST} + {3287971800 -9000 1 NDT} + {3308531400 -12600 0 NST} + {3319421400 -9000 1 NDT} + {3339981000 -12600 0 NST} + {3350871000 -9000 1 NDT} + {3371430600 -12600 0 NST} + {3382925400 -9000 1 NDT} + {3403485000 -12600 0 NST} + {3414375000 -9000 1 NDT} + {3434934600 -12600 0 NST} + {3445824600 -9000 1 NDT} + {3466384200 -12600 0 NST} + {3477274200 -9000 1 NDT} + {3497833800 -12600 0 NST} + {3508723800 -9000 1 NDT} + {3529283400 -12600 0 NST} + {3540173400 -9000 1 NDT} + {3560733000 -12600 0 NST} + {3572227800 -9000 1 NDT} + {3592787400 -12600 0 NST} + {3603677400 -9000 1 NDT} + {3624237000 -12600 0 NST} + {3635127000 -9000 1 NDT} + {3655686600 -12600 0 NST} + {3666576600 -9000 1 NDT} + {3687136200 -12600 0 NST} + {3698026200 -9000 1 NDT} + {3718585800 -12600 0 NST} + {3730080600 -9000 1 NDT} + {3750640200 -12600 0 NST} + {3761530200 -9000 1 NDT} + {3782089800 -12600 0 NST} + {3792979800 -9000 1 NDT} + {3813539400 -12600 0 NST} + {3824429400 -9000 1 NDT} + {3844989000 -12600 0 NST} + {3855879000 -9000 1 NDT} + {3876438600 -12600 0 NST} + {3887328600 -9000 1 NDT} + {3907888200 -12600 0 NST} + {3919383000 -9000 1 NDT} + {3939942600 -12600 0 NST} + {3950832600 -9000 1 NDT} + {3971392200 -12600 0 NST} + {3982282200 -9000 1 NDT} + {4002841800 -12600 0 NST} + {4013731800 -9000 1 NDT} + {4034291400 -12600 0 NST} + {4045181400 -9000 1 NDT} + {4065741000 -12600 0 NST} + {4076631000 -9000 1 NDT} + {4097190600 -12600 0 NST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/St_Kitts b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/St_Kitts new file mode 100644 index 00000000..6ad7f041 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/St_Kitts @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Port_of_Spain)]} { + LoadTimeZoneFile America/Port_of_Spain +} +set TZData(:America/St_Kitts) $TZData(:America/Port_of_Spain) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/St_Lucia b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/St_Lucia new file mode 100644 index 00000000..e479b313 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/St_Lucia @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Port_of_Spain)]} { + LoadTimeZoneFile America/Port_of_Spain +} +set TZData(:America/St_Lucia) $TZData(:America/Port_of_Spain) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/St_Thomas b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/St_Thomas new file mode 100644 index 00000000..24698b89 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/St_Thomas @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Port_of_Spain)]} { + LoadTimeZoneFile America/Port_of_Spain +} +set TZData(:America/St_Thomas) $TZData(:America/Port_of_Spain) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/St_Vincent b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/St_Vincent new file mode 100644 index 00000000..e3b32fbd --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/St_Vincent @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Port_of_Spain)]} { + LoadTimeZoneFile America/Port_of_Spain +} +set TZData(:America/St_Vincent) $TZData(:America/Port_of_Spain) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Swift_Current b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Swift_Current new file mode 100644 index 00000000..ad077623 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Swift_Current @@ -0,0 +1,29 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Swift_Current) { + {-9223372036854775808 -25880 0 LMT} + {-2030201320 -25200 0 MST} + {-1632063600 -21600 1 MDT} + {-1615132800 -25200 0 MST} + {-880210800 -21600 1 MWT} + {-769395600 -21600 1 MPT} + {-765388800 -25200 0 MST} + {-747241200 -21600 0 MDT} + {-732729600 -25200 0 MST} + {-715791600 -21600 1 MDT} + {-702489600 -25200 0 MST} + {-684342000 -21600 1 MDT} + {-671040000 -25200 0 MST} + {-652892400 -21600 1 MDT} + {-639590400 -25200 0 MST} + {-631126800 -25200 0 MST} + {-400086000 -21600 1 MDT} + {-384364800 -25200 0 MST} + {-337186800 -21600 1 MDT} + {-321465600 -25200 0 MST} + {-305737200 -21600 1 MDT} + {-292435200 -25200 0 MST} + {-273682800 -21600 1 MDT} + {-260985600 -25200 0 MST} + {73472400 -21600 0 CST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Tegucigalpa b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Tegucigalpa new file mode 100644 index 00000000..050661e4 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Tegucigalpa @@ -0,0 +1,12 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Tegucigalpa) { + {-9223372036854775808 -20932 0 LMT} + {-1538503868 -21600 0 CST} + {547020000 -18000 1 CDT} + {559717200 -21600 0 CST} + {578469600 -18000 1 CDT} + {591166800 -21600 0 CST} + {1146981600 -18000 1 CDT} + {1154926800 -21600 0 CST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Thule b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Thule new file mode 100644 index 00000000..0aaf9a10 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Thule @@ -0,0 +1,224 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Thule) { + {-9223372036854775808 -16508 0 LMT} + {-1686079492 -14400 0 AST} + {670399200 -10800 1 ADT} + {686120400 -14400 0 AST} + {701848800 -10800 1 ADT} + {717570000 -14400 0 AST} + {733903200 -10800 1 ADT} + {752043600 -14400 0 AST} + {765352800 -10800 1 ADT} + {783493200 -14400 0 AST} + {796802400 -10800 1 ADT} + {814942800 -14400 0 AST} + {828856800 -10800 1 ADT} + {846392400 -14400 0 AST} + {860306400 -10800 1 ADT} + {877842000 -14400 0 AST} + {891756000 -10800 1 ADT} + {909291600 -14400 0 AST} + {923205600 -10800 1 ADT} + {941346000 -14400 0 AST} + {954655200 -10800 1 ADT} + {972795600 -14400 0 AST} + {986104800 -10800 1 ADT} + {1004245200 -14400 0 AST} + {1018159200 -10800 1 ADT} + {1035694800 -14400 0 AST} + {1049608800 -10800 1 ADT} + {1067144400 -14400 0 AST} + {1081058400 -10800 1 ADT} + {1099198800 -14400 0 AST} + {1112508000 -10800 1 ADT} + {1130648400 -14400 0 AST} + {1143957600 -10800 1 ADT} + {1162098000 -14400 0 AST} + {1173592800 -10800 1 ADT} + {1194152400 -14400 0 AST} + {1205042400 -10800 1 ADT} + {1225602000 -14400 0 AST} + {1236492000 -10800 1 ADT} + {1257051600 -14400 0 AST} + {1268546400 -10800 1 ADT} + {1289106000 -14400 0 AST} + {1299996000 -10800 1 ADT} + {1320555600 -14400 0 AST} + {1331445600 -10800 1 ADT} + {1352005200 -14400 0 AST} + {1362895200 -10800 1 ADT} + {1383454800 -14400 0 AST} + {1394344800 -10800 1 ADT} + {1414904400 -14400 0 AST} + {1425794400 -10800 1 ADT} + {1446354000 -14400 0 AST} + {1457848800 -10800 1 ADT} + {1478408400 -14400 0 AST} + {1489298400 -10800 1 ADT} + {1509858000 -14400 0 AST} + {1520748000 -10800 1 ADT} + {1541307600 -14400 0 AST} + {1552197600 -10800 1 ADT} + {1572757200 -14400 0 AST} + {1583647200 -10800 1 ADT} + {1604206800 -14400 0 AST} + {1615701600 -10800 1 ADT} + {1636261200 -14400 0 AST} + {1647151200 -10800 1 ADT} + {1667710800 -14400 0 AST} + {1678600800 -10800 1 ADT} + {1699160400 -14400 0 AST} + {1710050400 -10800 1 ADT} + {1730610000 -14400 0 AST} + {1741500000 -10800 1 ADT} + {1762059600 -14400 0 AST} + {1772949600 -10800 1 ADT} + {1793509200 -14400 0 AST} + {1805004000 -10800 1 ADT} + {1825563600 -14400 0 AST} + {1836453600 -10800 1 ADT} + {1857013200 -14400 0 AST} + {1867903200 -10800 1 ADT} + {1888462800 -14400 0 AST} + {1899352800 -10800 1 ADT} + {1919912400 -14400 0 AST} + {1930802400 -10800 1 ADT} + {1951362000 -14400 0 AST} + {1962856800 -10800 1 ADT} + {1983416400 -14400 0 AST} + {1994306400 -10800 1 ADT} + {2014866000 -14400 0 AST} + {2025756000 -10800 1 ADT} + {2046315600 -14400 0 AST} + {2057205600 -10800 1 ADT} + {2077765200 -14400 0 AST} + {2088655200 -10800 1 ADT} + {2109214800 -14400 0 AST} + {2120104800 -10800 1 ADT} + {2140664400 -14400 0 AST} + {2152159200 -10800 1 ADT} + {2172718800 -14400 0 AST} + {2183608800 -10800 1 ADT} + {2204168400 -14400 0 AST} + {2215058400 -10800 1 ADT} + {2235618000 -14400 0 AST} + {2246508000 -10800 1 ADT} + {2267067600 -14400 0 AST} + {2277957600 -10800 1 ADT} + {2298517200 -14400 0 AST} + {2309407200 -10800 1 ADT} + {2329966800 -14400 0 AST} + {2341461600 -10800 1 ADT} + {2362021200 -14400 0 AST} + {2372911200 -10800 1 ADT} + {2393470800 -14400 0 AST} + {2404360800 -10800 1 ADT} + {2424920400 -14400 0 AST} + {2435810400 -10800 1 ADT} + {2456370000 -14400 0 AST} + {2467260000 -10800 1 ADT} + {2487819600 -14400 0 AST} + {2499314400 -10800 1 ADT} + {2519874000 -14400 0 AST} + {2530764000 -10800 1 ADT} + {2551323600 -14400 0 AST} + {2562213600 -10800 1 ADT} + {2582773200 -14400 0 AST} + {2593663200 -10800 1 ADT} + {2614222800 -14400 0 AST} + {2625112800 -10800 1 ADT} + {2645672400 -14400 0 AST} + {2656562400 -10800 1 ADT} + {2677122000 -14400 0 AST} + {2688616800 -10800 1 ADT} + {2709176400 -14400 0 AST} + {2720066400 -10800 1 ADT} + {2740626000 -14400 0 AST} + {2751516000 -10800 1 ADT} + {2772075600 -14400 0 AST} + {2782965600 -10800 1 ADT} + {2803525200 -14400 0 AST} + {2814415200 -10800 1 ADT} + {2834974800 -14400 0 AST} + {2846469600 -10800 1 ADT} + {2867029200 -14400 0 AST} + {2877919200 -10800 1 ADT} + {2898478800 -14400 0 AST} + {2909368800 -10800 1 ADT} + {2929928400 -14400 0 AST} + {2940818400 -10800 1 ADT} + {2961378000 -14400 0 AST} + {2972268000 -10800 1 ADT} + {2992827600 -14400 0 AST} + {3003717600 -10800 1 ADT} + {3024277200 -14400 0 AST} + {3035772000 -10800 1 ADT} + {3056331600 -14400 0 AST} + {3067221600 -10800 1 ADT} + {3087781200 -14400 0 AST} + {3098671200 -10800 1 ADT} + {3119230800 -14400 0 AST} + {3130120800 -10800 1 ADT} + {3150680400 -14400 0 AST} + {3161570400 -10800 1 ADT} + {3182130000 -14400 0 AST} + {3193020000 -10800 1 ADT} + {3213579600 -14400 0 AST} + {3225074400 -10800 1 ADT} + {3245634000 -14400 0 AST} + {3256524000 -10800 1 ADT} + {3277083600 -14400 0 AST} + {3287973600 -10800 1 ADT} + {3308533200 -14400 0 AST} + {3319423200 -10800 1 ADT} + {3339982800 -14400 0 AST} + {3350872800 -10800 1 ADT} + {3371432400 -14400 0 AST} + {3382927200 -10800 1 ADT} + {3403486800 -14400 0 AST} + {3414376800 -10800 1 ADT} + {3434936400 -14400 0 AST} + {3445826400 -10800 1 ADT} + {3466386000 -14400 0 AST} + {3477276000 -10800 1 ADT} + {3497835600 -14400 0 AST} + {3508725600 -10800 1 ADT} + {3529285200 -14400 0 AST} + {3540175200 -10800 1 ADT} + {3560734800 -14400 0 AST} + {3572229600 -10800 1 ADT} + {3592789200 -14400 0 AST} + {3603679200 -10800 1 ADT} + {3624238800 -14400 0 AST} + {3635128800 -10800 1 ADT} + {3655688400 -14400 0 AST} + {3666578400 -10800 1 ADT} + {3687138000 -14400 0 AST} + {3698028000 -10800 1 ADT} + {3718587600 -14400 0 AST} + {3730082400 -10800 1 ADT} + {3750642000 -14400 0 AST} + {3761532000 -10800 1 ADT} + {3782091600 -14400 0 AST} + {3792981600 -10800 1 ADT} + {3813541200 -14400 0 AST} + {3824431200 -10800 1 ADT} + {3844990800 -14400 0 AST} + {3855880800 -10800 1 ADT} + {3876440400 -14400 0 AST} + {3887330400 -10800 1 ADT} + {3907890000 -14400 0 AST} + {3919384800 -10800 1 ADT} + {3939944400 -14400 0 AST} + {3950834400 -10800 1 ADT} + {3971394000 -14400 0 AST} + {3982284000 -10800 1 ADT} + {4002843600 -14400 0 AST} + {4013733600 -10800 1 ADT} + {4034293200 -14400 0 AST} + {4045183200 -10800 1 ADT} + {4065742800 -14400 0 AST} + {4076632800 -10800 1 ADT} + {4097192400 -14400 0 AST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Thunder_Bay b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Thunder_Bay new file mode 100644 index 00000000..8a454be1 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Thunder_Bay @@ -0,0 +1,272 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Thunder_Bay) { + {-9223372036854775808 -21420 0 LMT} + {-2366733780 -21600 0 CST} + {-1893434400 -18000 0 EST} + {-883594800 -18000 0 EST} + {-880218000 -14400 1 EWT} + {-769395600 -14400 1 EPT} + {-765396000 -18000 0 EST} + {18000 -18000 0 EST} + {9961200 -14400 1 EDT} + {25682400 -18000 0 EST} + {41410800 -14400 1 EDT} + {57736800 -18000 0 EST} + {73465200 -14400 1 EDT} + {89186400 -18000 0 EST} + {94712400 -18000 0 EST} + {126248400 -18000 0 EST} + {136364400 -14400 1 EDT} + {152085600 -18000 0 EST} + {167814000 -14400 1 EDT} + {183535200 -18000 0 EST} + {199263600 -14400 1 EDT} + {215589600 -18000 0 EST} + {230713200 -14400 1 EDT} + {247039200 -18000 0 EST} + {262767600 -14400 1 EDT} + {278488800 -18000 0 EST} + {294217200 -14400 1 EDT} + {309938400 -18000 0 EST} + {325666800 -14400 1 EDT} + {341388000 -18000 0 EST} + {357116400 -14400 1 EDT} + {372837600 -18000 0 EST} + {388566000 -14400 1 EDT} + {404892000 -18000 0 EST} + {420015600 -14400 1 EDT} + {436341600 -18000 0 EST} + {452070000 -14400 1 EDT} + {467791200 -18000 0 EST} + {483519600 -14400 1 EDT} + {499240800 -18000 0 EST} + {514969200 -14400 1 EDT} + {530690400 -18000 0 EST} + {544604400 -14400 1 EDT} + {562140000 -18000 0 EST} + {576054000 -14400 1 EDT} + {594194400 -18000 0 EST} + {607503600 -14400 1 EDT} + {625644000 -18000 0 EST} + {638953200 -14400 1 EDT} + {657093600 -18000 0 EST} + {671007600 -14400 1 EDT} + {688543200 -18000 0 EST} + {702457200 -14400 1 EDT} + {719992800 -18000 0 EST} + {733906800 -14400 1 EDT} + {752047200 -18000 0 EST} + {765356400 -14400 1 EDT} + {783496800 -18000 0 EST} + {796806000 -14400 1 EDT} + {814946400 -18000 0 EST} + {828860400 -14400 1 EDT} + {846396000 -18000 0 EST} + {860310000 -14400 1 EDT} + {877845600 -18000 0 EST} + {891759600 -14400 1 EDT} + {909295200 -18000 0 EST} + {923209200 -14400 1 EDT} + {941349600 -18000 0 EST} + {954658800 -14400 1 EDT} + {972799200 -18000 0 EST} + {986108400 -14400 1 EDT} + {1004248800 -18000 0 EST} + {1018162800 -14400 1 EDT} + {1035698400 -18000 0 EST} + {1049612400 -14400 1 EDT} + {1067148000 -18000 0 EST} + {1081062000 -14400 1 EDT} + {1099202400 -18000 0 EST} + {1112511600 -14400 1 EDT} + {1130652000 -18000 0 EST} + {1143961200 -14400 1 EDT} + {1162101600 -18000 0 EST} + {1173596400 -14400 1 EDT} + {1194156000 -18000 0 EST} + {1205046000 -14400 1 EDT} + {1225605600 -18000 0 EST} + {1236495600 -14400 1 EDT} + {1257055200 -18000 0 EST} + {1268550000 -14400 1 EDT} + {1289109600 -18000 0 EST} + {1299999600 -14400 1 EDT} + {1320559200 -18000 0 EST} + {1331449200 -14400 1 EDT} + {1352008800 -18000 0 EST} + {1362898800 -14400 1 EDT} + {1383458400 -18000 0 EST} + {1394348400 -14400 1 EDT} + {1414908000 -18000 0 EST} + {1425798000 -14400 1 EDT} + {1446357600 -18000 0 EST} + {1457852400 -14400 1 EDT} + {1478412000 -18000 0 EST} + {1489302000 -14400 1 EDT} + {1509861600 -18000 0 EST} + {1520751600 -14400 1 EDT} + {1541311200 -18000 0 EST} + {1552201200 -14400 1 EDT} + {1572760800 -18000 0 EST} + {1583650800 -14400 1 EDT} + {1604210400 -18000 0 EST} + {1615705200 -14400 1 EDT} + {1636264800 -18000 0 EST} + {1647154800 -14400 1 EDT} + {1667714400 -18000 0 EST} + {1678604400 -14400 1 EDT} + {1699164000 -18000 0 EST} + {1710054000 -14400 1 EDT} + {1730613600 -18000 0 EST} + {1741503600 -14400 1 EDT} + {1762063200 -18000 0 EST} + {1772953200 -14400 1 EDT} + {1793512800 -18000 0 EST} + {1805007600 -14400 1 EDT} + {1825567200 -18000 0 EST} + {1836457200 -14400 1 EDT} + {1857016800 -18000 0 EST} + {1867906800 -14400 1 EDT} + {1888466400 -18000 0 EST} + {1899356400 -14400 1 EDT} + {1919916000 -18000 0 EST} + {1930806000 -14400 1 EDT} + {1951365600 -18000 0 EST} + {1962860400 -14400 1 EDT} + {1983420000 -18000 0 EST} + {1994310000 -14400 1 EDT} + {2014869600 -18000 0 EST} + {2025759600 -14400 1 EDT} + {2046319200 -18000 0 EST} + {2057209200 -14400 1 EDT} + {2077768800 -18000 0 EST} + {2088658800 -14400 1 EDT} + {2109218400 -18000 0 EST} + {2120108400 -14400 1 EDT} + {2140668000 -18000 0 EST} + {2152162800 -14400 1 EDT} + {2172722400 -18000 0 EST} + {2183612400 -14400 1 EDT} + {2204172000 -18000 0 EST} + {2215062000 -14400 1 EDT} + {2235621600 -18000 0 EST} + {2246511600 -14400 1 EDT} + {2267071200 -18000 0 EST} + {2277961200 -14400 1 EDT} + {2298520800 -18000 0 EST} + {2309410800 -14400 1 EDT} + {2329970400 -18000 0 EST} + {2341465200 -14400 1 EDT} + {2362024800 -18000 0 EST} + {2372914800 -14400 1 EDT} + {2393474400 -18000 0 EST} + {2404364400 -14400 1 EDT} + {2424924000 -18000 0 EST} + {2435814000 -14400 1 EDT} + {2456373600 -18000 0 EST} + {2467263600 -14400 1 EDT} + {2487823200 -18000 0 EST} + {2499318000 -14400 1 EDT} + {2519877600 -18000 0 EST} + {2530767600 -14400 1 EDT} + {2551327200 -18000 0 EST} + {2562217200 -14400 1 EDT} + {2582776800 -18000 0 EST} + {2593666800 -14400 1 EDT} + {2614226400 -18000 0 EST} + {2625116400 -14400 1 EDT} + {2645676000 -18000 0 EST} + {2656566000 -14400 1 EDT} + {2677125600 -18000 0 EST} + {2688620400 -14400 1 EDT} + {2709180000 -18000 0 EST} + {2720070000 -14400 1 EDT} + {2740629600 -18000 0 EST} + {2751519600 -14400 1 EDT} + {2772079200 -18000 0 EST} + {2782969200 -14400 1 EDT} + {2803528800 -18000 0 EST} + {2814418800 -14400 1 EDT} + {2834978400 -18000 0 EST} + {2846473200 -14400 1 EDT} + {2867032800 -18000 0 EST} + {2877922800 -14400 1 EDT} + {2898482400 -18000 0 EST} + {2909372400 -14400 1 EDT} + {2929932000 -18000 0 EST} + {2940822000 -14400 1 EDT} + {2961381600 -18000 0 EST} + {2972271600 -14400 1 EDT} + {2992831200 -18000 0 EST} + {3003721200 -14400 1 EDT} + {3024280800 -18000 0 EST} + {3035775600 -14400 1 EDT} + {3056335200 -18000 0 EST} + {3067225200 -14400 1 EDT} + {3087784800 -18000 0 EST} + {3098674800 -14400 1 EDT} + {3119234400 -18000 0 EST} + {3130124400 -14400 1 EDT} + {3150684000 -18000 0 EST} + {3161574000 -14400 1 EDT} + {3182133600 -18000 0 EST} + {3193023600 -14400 1 EDT} + {3213583200 -18000 0 EST} + {3225078000 -14400 1 EDT} + {3245637600 -18000 0 EST} + {3256527600 -14400 1 EDT} + {3277087200 -18000 0 EST} + {3287977200 -14400 1 EDT} + {3308536800 -18000 0 EST} + {3319426800 -14400 1 EDT} + {3339986400 -18000 0 EST} + {3350876400 -14400 1 EDT} + {3371436000 -18000 0 EST} + {3382930800 -14400 1 EDT} + {3403490400 -18000 0 EST} + {3414380400 -14400 1 EDT} + {3434940000 -18000 0 EST} + {3445830000 -14400 1 EDT} + {3466389600 -18000 0 EST} + {3477279600 -14400 1 EDT} + {3497839200 -18000 0 EST} + {3508729200 -14400 1 EDT} + {3529288800 -18000 0 EST} + {3540178800 -14400 1 EDT} + {3560738400 -18000 0 EST} + {3572233200 -14400 1 EDT} + {3592792800 -18000 0 EST} + {3603682800 -14400 1 EDT} + {3624242400 -18000 0 EST} + {3635132400 -14400 1 EDT} + {3655692000 -18000 0 EST} + {3666582000 -14400 1 EDT} + {3687141600 -18000 0 EST} + {3698031600 -14400 1 EDT} + {3718591200 -18000 0 EST} + {3730086000 -14400 1 EDT} + {3750645600 -18000 0 EST} + {3761535600 -14400 1 EDT} + {3782095200 -18000 0 EST} + {3792985200 -14400 1 EDT} + {3813544800 -18000 0 EST} + {3824434800 -14400 1 EDT} + {3844994400 -18000 0 EST} + {3855884400 -14400 1 EDT} + {3876444000 -18000 0 EST} + {3887334000 -14400 1 EDT} + {3907893600 -18000 0 EST} + {3919388400 -14400 1 EDT} + {3939948000 -18000 0 EST} + {3950838000 -14400 1 EDT} + {3971397600 -18000 0 EST} + {3982287600 -14400 1 EDT} + {4002847200 -18000 0 EST} + {4013737200 -14400 1 EDT} + {4034296800 -18000 0 EST} + {4045186800 -14400 1 EDT} + {4065746400 -18000 0 EST} + {4076636400 -14400 1 EDT} + {4097196000 -18000 0 EST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Tijuana b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Tijuana new file mode 100644 index 00000000..6118cdeb --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Tijuana @@ -0,0 +1,285 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Tijuana) { + {-9223372036854775808 -28084 0 LMT} + {-1514736000 -25200 0 MST} + {-1451667600 -28800 0 PST} + {-1343062800 -25200 0 MST} + {-1234803600 -28800 0 PST} + {-1222963200 -25200 1 PDT} + {-1207242000 -28800 0 PST} + {-873820800 -25200 1 PWT} + {-769395600 -25200 1 PPT} + {-761677200 -28800 0 PST} + {-686073600 -25200 1 PDT} + {-661539600 -28800 0 PST} + {-504892800 -28800 0 PST} + {-495036000 -25200 1 PDT} + {-481734000 -28800 0 PST} + {-463586400 -25200 1 PDT} + {-450284400 -28800 0 PST} + {-431532000 -25200 1 PDT} + {-418230000 -28800 0 PST} + {-400082400 -25200 1 PDT} + {-386780400 -28800 0 PST} + {-368632800 -25200 1 PDT} + {-355330800 -28800 0 PST} + {-337183200 -25200 1 PDT} + {-323881200 -28800 0 PST} + {-305733600 -25200 1 PDT} + {-292431600 -28800 0 PST} + {-283968000 -28800 0 PST} + {189331200 -28800 0 PST} + {199274400 -25200 1 PDT} + {215600400 -28800 0 PST} + {230724000 -25200 1 PDT} + {247050000 -28800 0 PST} + {262778400 -25200 1 PDT} + {278499600 -28800 0 PST} + {294228000 -25200 1 PDT} + {309949200 -28800 0 PST} + {325677600 -25200 1 PDT} + {341398800 -28800 0 PST} + {357127200 -25200 1 PDT} + {372848400 -28800 0 PST} + {388576800 -25200 1 PDT} + {404902800 -28800 0 PST} + {420026400 -25200 1 PDT} + {436352400 -28800 0 PST} + {452080800 -25200 1 PDT} + {467802000 -28800 0 PST} + {483530400 -25200 1 PDT} + {499251600 -28800 0 PST} + {514980000 -25200 1 PDT} + {530701200 -28800 0 PST} + {544615200 -25200 1 PDT} + {562150800 -28800 0 PST} + {576064800 -25200 1 PDT} + {594205200 -28800 0 PST} + {607514400 -25200 1 PDT} + {625654800 -28800 0 PST} + {638964000 -25200 1 PDT} + {657104400 -28800 0 PST} + {671018400 -25200 1 PDT} + {688554000 -28800 0 PST} + {702468000 -25200 1 PDT} + {720003600 -28800 0 PST} + {733917600 -25200 1 PDT} + {752058000 -28800 0 PST} + {765367200 -25200 1 PDT} + {783507600 -28800 0 PST} + {796816800 -25200 1 PDT} + {814957200 -28800 0 PST} + {820483200 -28800 0 PST} + {828871200 -25200 1 PDT} + {846406800 -28800 0 PST} + {860320800 -25200 1 PDT} + {877856400 -28800 0 PST} + {891770400 -25200 1 PDT} + {909306000 -28800 0 PST} + {923220000 -25200 1 PDT} + {941360400 -28800 0 PST} + {954669600 -25200 1 PDT} + {972810000 -28800 0 PST} + {978336000 -28800 0 PST} + {986119200 -25200 1 PDT} + {1004259600 -28800 0 PST} + {1014192000 -28800 0 PST} + {1018173600 -25200 1 PDT} + {1035709200 -28800 0 PST} + {1049623200 -25200 1 PDT} + {1067158800 -28800 0 PST} + {1081072800 -25200 1 PDT} + {1099213200 -28800 0 PST} + {1112522400 -25200 1 PDT} + {1130662800 -28800 0 PST} + {1143972000 -25200 1 PDT} + {1162112400 -28800 0 PST} + {1175421600 -25200 1 PDT} + {1193562000 -28800 0 PST} + {1207476000 -25200 1 PDT} + {1225011600 -28800 0 PST} + {1238925600 -25200 1 PDT} + {1256461200 -28800 0 PST} + {1262332800 -28800 0 PST} + {1268560800 -25200 1 PDT} + {1289120400 -28800 0 PST} + {1300010400 -25200 1 PDT} + {1320570000 -28800 0 PST} + {1331460000 -25200 1 PDT} + {1352019600 -28800 0 PST} + {1362909600 -25200 1 PDT} + {1383469200 -28800 0 PST} + {1394359200 -25200 1 PDT} + {1414918800 -28800 0 PST} + {1425808800 -25200 1 PDT} + {1446368400 -28800 0 PST} + {1457863200 -25200 1 PDT} + {1478422800 -28800 0 PST} + {1489312800 -25200 1 PDT} + {1509872400 -28800 0 PST} + {1520762400 -25200 1 PDT} + {1541322000 -28800 0 PST} + {1552212000 -25200 1 PDT} + {1572771600 -28800 0 PST} + {1583661600 -25200 1 PDT} + {1604221200 -28800 0 PST} + {1615716000 -25200 1 PDT} + {1636275600 -28800 0 PST} + {1647165600 -25200 1 PDT} + {1667725200 -28800 0 PST} + {1678615200 -25200 1 PDT} + {1699174800 -28800 0 PST} + {1710064800 -25200 1 PDT} + {1730624400 -28800 0 PST} + {1741514400 -25200 1 PDT} + {1762074000 -28800 0 PST} + {1772964000 -25200 1 PDT} + {1793523600 -28800 0 PST} + {1805018400 -25200 1 PDT} + {1825578000 -28800 0 PST} + {1836468000 -25200 1 PDT} + {1857027600 -28800 0 PST} + {1867917600 -25200 1 PDT} + {1888477200 -28800 0 PST} + {1899367200 -25200 1 PDT} + {1919926800 -28800 0 PST} + {1930816800 -25200 1 PDT} + {1951376400 -28800 0 PST} + {1962871200 -25200 1 PDT} + {1983430800 -28800 0 PST} + {1994320800 -25200 1 PDT} + {2014880400 -28800 0 PST} + {2025770400 -25200 1 PDT} + {2046330000 -28800 0 PST} + {2057220000 -25200 1 PDT} + {2077779600 -28800 0 PST} + {2088669600 -25200 1 PDT} + {2109229200 -28800 0 PST} + {2120119200 -25200 1 PDT} + {2140678800 -28800 0 PST} + {2152173600 -25200 1 PDT} + {2172733200 -28800 0 PST} + {2183623200 -25200 1 PDT} + {2204182800 -28800 0 PST} + {2215072800 -25200 1 PDT} + {2235632400 -28800 0 PST} + {2246522400 -25200 1 PDT} + {2267082000 -28800 0 PST} + {2277972000 -25200 1 PDT} + {2298531600 -28800 0 PST} + {2309421600 -25200 1 PDT} + {2329981200 -28800 0 PST} + {2341476000 -25200 1 PDT} + {2362035600 -28800 0 PST} + {2372925600 -25200 1 PDT} + {2393485200 -28800 0 PST} + {2404375200 -25200 1 PDT} + {2424934800 -28800 0 PST} + {2435824800 -25200 1 PDT} + {2456384400 -28800 0 PST} + {2467274400 -25200 1 PDT} + {2487834000 -28800 0 PST} + {2499328800 -25200 1 PDT} + {2519888400 -28800 0 PST} + {2530778400 -25200 1 PDT} + {2551338000 -28800 0 PST} + {2562228000 -25200 1 PDT} + {2582787600 -28800 0 PST} + {2593677600 -25200 1 PDT} + {2614237200 -28800 0 PST} + {2625127200 -25200 1 PDT} + {2645686800 -28800 0 PST} + {2656576800 -25200 1 PDT} + {2677136400 -28800 0 PST} + {2688631200 -25200 1 PDT} + {2709190800 -28800 0 PST} + {2720080800 -25200 1 PDT} + {2740640400 -28800 0 PST} + {2751530400 -25200 1 PDT} + {2772090000 -28800 0 PST} + {2782980000 -25200 1 PDT} + {2803539600 -28800 0 PST} + {2814429600 -25200 1 PDT} + {2834989200 -28800 0 PST} + {2846484000 -25200 1 PDT} + {2867043600 -28800 0 PST} + {2877933600 -25200 1 PDT} + {2898493200 -28800 0 PST} + {2909383200 -25200 1 PDT} + {2929942800 -28800 0 PST} + {2940832800 -25200 1 PDT} + {2961392400 -28800 0 PST} + {2972282400 -25200 1 PDT} + {2992842000 -28800 0 PST} + {3003732000 -25200 1 PDT} + {3024291600 -28800 0 PST} + {3035786400 -25200 1 PDT} + {3056346000 -28800 0 PST} + {3067236000 -25200 1 PDT} + {3087795600 -28800 0 PST} + {3098685600 -25200 1 PDT} + {3119245200 -28800 0 PST} + {3130135200 -25200 1 PDT} + {3150694800 -28800 0 PST} + {3161584800 -25200 1 PDT} + {3182144400 -28800 0 PST} + {3193034400 -25200 1 PDT} + {3213594000 -28800 0 PST} + {3225088800 -25200 1 PDT} + {3245648400 -28800 0 PST} + {3256538400 -25200 1 PDT} + {3277098000 -28800 0 PST} + {3287988000 -25200 1 PDT} + {3308547600 -28800 0 PST} + {3319437600 -25200 1 PDT} + {3339997200 -28800 0 PST} + {3350887200 -25200 1 PDT} + {3371446800 -28800 0 PST} + {3382941600 -25200 1 PDT} + {3403501200 -28800 0 PST} + {3414391200 -25200 1 PDT} + {3434950800 -28800 0 PST} + {3445840800 -25200 1 PDT} + {3466400400 -28800 0 PST} + {3477290400 -25200 1 PDT} + {3497850000 -28800 0 PST} + {3508740000 -25200 1 PDT} + {3529299600 -28800 0 PST} + {3540189600 -25200 1 PDT} + {3560749200 -28800 0 PST} + {3572244000 -25200 1 PDT} + {3592803600 -28800 0 PST} + {3603693600 -25200 1 PDT} + {3624253200 -28800 0 PST} + {3635143200 -25200 1 PDT} + {3655702800 -28800 0 PST} + {3666592800 -25200 1 PDT} + {3687152400 -28800 0 PST} + {3698042400 -25200 1 PDT} + {3718602000 -28800 0 PST} + {3730096800 -25200 1 PDT} + {3750656400 -28800 0 PST} + {3761546400 -25200 1 PDT} + {3782106000 -28800 0 PST} + {3792996000 -25200 1 PDT} + {3813555600 -28800 0 PST} + {3824445600 -25200 1 PDT} + {3845005200 -28800 0 PST} + {3855895200 -25200 1 PDT} + {3876454800 -28800 0 PST} + {3887344800 -25200 1 PDT} + {3907904400 -28800 0 PST} + {3919399200 -25200 1 PDT} + {3939958800 -28800 0 PST} + {3950848800 -25200 1 PDT} + {3971408400 -28800 0 PST} + {3982298400 -25200 1 PDT} + {4002858000 -28800 0 PST} + {4013748000 -25200 1 PDT} + {4034307600 -28800 0 PST} + {4045197600 -25200 1 PDT} + {4065757200 -28800 0 PST} + {4076647200 -25200 1 PDT} + {4097206800 -28800 0 PST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Toronto b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Toronto new file mode 100644 index 00000000..09bf7866 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Toronto @@ -0,0 +1,365 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Toronto) { + {-9223372036854775808 -19052 0 LMT} + {-2366736148 -18000 0 EST} + {-1632070800 -14400 1 EDT} + {-1615140000 -18000 0 EST} + {-1609441200 -18000 0 EST} + {-1601753400 -14400 1 EDT} + {-1583697600 -18000 0 EST} + {-1567357200 -14400 1 EDT} + {-1554667200 -18000 0 EST} + {-1534698000 -14400 1 EDT} + {-1524074400 -18000 0 EST} + {-1503248400 -14400 1 EDT} + {-1492365600 -18000 0 EST} + {-1471798800 -14400 1 EDT} + {-1460916000 -18000 0 EST} + {-1440954000 -14400 1 EDT} + {-1428861600 -18000 0 EST} + {-1409504400 -14400 1 EDT} + {-1397412000 -18000 0 EST} + {-1378054800 -14400 1 EDT} + {-1365962400 -18000 0 EST} + {-1346605200 -14400 1 EDT} + {-1333908000 -18000 0 EST} + {-1315155600 -14400 1 EDT} + {-1301853600 -18000 0 EST} + {-1283706000 -14400 1 EDT} + {-1270404000 -18000 0 EST} + {-1252256400 -14400 1 EDT} + {-1238954400 -18000 0 EST} + {-1220806800 -14400 1 EDT} + {-1207504800 -18000 0 EST} + {-1188752400 -14400 1 EDT} + {-1176055200 -18000 0 EST} + {-1157302800 -14400 1 EDT} + {-1144000800 -18000 0 EST} + {-1125853200 -14400 1 EDT} + {-1112551200 -18000 0 EST} + {-1094403600 -14400 1 EDT} + {-1081101600 -18000 0 EST} + {-1062954000 -14400 1 EDT} + {-1049652000 -18000 0 EST} + {-1031504400 -14400 1 EDT} + {-1018202400 -18000 0 EST} + {-1000054800 -14400 1 EDT} + {-986752800 -18000 0 EST} + {-968000400 -14400 1 EDT} + {-955303200 -18000 0 EST} + {-936550800 -14400 1 EDT} + {-880218000 -14400 0 EWT} + {-769395600 -14400 1 EPT} + {-765396000 -18000 0 EST} + {-757364400 -18000 0 EST} + {-747248400 -14400 1 EDT} + {-733946400 -18000 0 EST} + {-715806000 -14400 1 EDT} + {-702504000 -18000 0 EST} + {-684356400 -14400 1 EDT} + {-671054400 -18000 0 EST} + {-652906800 -14400 1 EDT} + {-634161600 -18000 0 EST} + {-620845200 -14400 1 EDT} + {-602704800 -18000 0 EST} + {-589395600 -14400 1 EDT} + {-576093600 -18000 0 EST} + {-557946000 -14400 1 EDT} + {-544644000 -18000 0 EST} + {-526496400 -14400 1 EDT} + {-513194400 -18000 0 EST} + {-495046800 -14400 1 EDT} + {-481744800 -18000 0 EST} + {-463597200 -14400 1 EDT} + {-450295200 -18000 0 EST} + {-431542800 -14400 1 EDT} + {-418240800 -18000 0 EST} + {-400093200 -14400 1 EDT} + {-384372000 -18000 0 EST} + {-368643600 -14400 1 EDT} + {-352922400 -18000 0 EST} + {-337194000 -14400 1 EDT} + {-321472800 -18000 0 EST} + {-305744400 -14400 1 EDT} + {-289418400 -18000 0 EST} + {-273690000 -14400 1 EDT} + {-257968800 -18000 0 EST} + {-242240400 -14400 1 EDT} + {-226519200 -18000 0 EST} + {-210790800 -14400 1 EDT} + {-195069600 -18000 0 EST} + {-179341200 -14400 1 EDT} + {-163620000 -18000 0 EST} + {-147891600 -14400 1 EDT} + {-131565600 -18000 0 EST} + {-116442000 -14400 1 EDT} + {-100116000 -18000 0 EST} + {-84387600 -14400 1 EDT} + {-68666400 -18000 0 EST} + {-52938000 -14400 1 EDT} + {-37216800 -18000 0 EST} + {-21488400 -14400 1 EDT} + {-5767200 -18000 0 EST} + {9961200 -14400 1 EDT} + {25682400 -18000 0 EST} + {41410800 -14400 1 EDT} + {57736800 -18000 0 EST} + {73465200 -14400 1 EDT} + {89186400 -18000 0 EST} + {104914800 -14400 1 EDT} + {120636000 -18000 0 EST} + {126248400 -18000 0 EST} + {136364400 -14400 1 EDT} + {152085600 -18000 0 EST} + {167814000 -14400 1 EDT} + {183535200 -18000 0 EST} + {199263600 -14400 1 EDT} + {215589600 -18000 0 EST} + {230713200 -14400 1 EDT} + {247039200 -18000 0 EST} + {262767600 -14400 1 EDT} + {278488800 -18000 0 EST} + {294217200 -14400 1 EDT} + {309938400 -18000 0 EST} + {325666800 -14400 1 EDT} + {341388000 -18000 0 EST} + {357116400 -14400 1 EDT} + {372837600 -18000 0 EST} + {388566000 -14400 1 EDT} + {404892000 -18000 0 EST} + {420015600 -14400 1 EDT} + {436341600 -18000 0 EST} + {452070000 -14400 1 EDT} + {467791200 -18000 0 EST} + {483519600 -14400 1 EDT} + {499240800 -18000 0 EST} + {514969200 -14400 1 EDT} + {530690400 -18000 0 EST} + {544604400 -14400 1 EDT} + {562140000 -18000 0 EST} + {576054000 -14400 1 EDT} + {594194400 -18000 0 EST} + {607503600 -14400 1 EDT} + {625644000 -18000 0 EST} + {638953200 -14400 1 EDT} + {657093600 -18000 0 EST} + {671007600 -14400 1 EDT} + {688543200 -18000 0 EST} + {702457200 -14400 1 EDT} + {719992800 -18000 0 EST} + {733906800 -14400 1 EDT} + {752047200 -18000 0 EST} + {765356400 -14400 1 EDT} + {783496800 -18000 0 EST} + {796806000 -14400 1 EDT} + {814946400 -18000 0 EST} + {828860400 -14400 1 EDT} + {846396000 -18000 0 EST} + {860310000 -14400 1 EDT} + {877845600 -18000 0 EST} + {891759600 -14400 1 EDT} + {909295200 -18000 0 EST} + {923209200 -14400 1 EDT} + {941349600 -18000 0 EST} + {954658800 -14400 1 EDT} + {972799200 -18000 0 EST} + {986108400 -14400 1 EDT} + {1004248800 -18000 0 EST} + {1018162800 -14400 1 EDT} + {1035698400 -18000 0 EST} + {1049612400 -14400 1 EDT} + {1067148000 -18000 0 EST} + {1081062000 -14400 1 EDT} + {1099202400 -18000 0 EST} + {1112511600 -14400 1 EDT} + {1130652000 -18000 0 EST} + {1143961200 -14400 1 EDT} + {1162101600 -18000 0 EST} + {1173596400 -14400 1 EDT} + {1194156000 -18000 0 EST} + {1205046000 -14400 1 EDT} + {1225605600 -18000 0 EST} + {1236495600 -14400 1 EDT} + {1257055200 -18000 0 EST} + {1268550000 -14400 1 EDT} + {1289109600 -18000 0 EST} + {1299999600 -14400 1 EDT} + {1320559200 -18000 0 EST} + {1331449200 -14400 1 EDT} + {1352008800 -18000 0 EST} + {1362898800 -14400 1 EDT} + {1383458400 -18000 0 EST} + {1394348400 -14400 1 EDT} + {1414908000 -18000 0 EST} + {1425798000 -14400 1 EDT} + {1446357600 -18000 0 EST} + {1457852400 -14400 1 EDT} + {1478412000 -18000 0 EST} + {1489302000 -14400 1 EDT} + {1509861600 -18000 0 EST} + {1520751600 -14400 1 EDT} + {1541311200 -18000 0 EST} + {1552201200 -14400 1 EDT} + {1572760800 -18000 0 EST} + {1583650800 -14400 1 EDT} + {1604210400 -18000 0 EST} + {1615705200 -14400 1 EDT} + {1636264800 -18000 0 EST} + {1647154800 -14400 1 EDT} + {1667714400 -18000 0 EST} + {1678604400 -14400 1 EDT} + {1699164000 -18000 0 EST} + {1710054000 -14400 1 EDT} + {1730613600 -18000 0 EST} + {1741503600 -14400 1 EDT} + {1762063200 -18000 0 EST} + {1772953200 -14400 1 EDT} + {1793512800 -18000 0 EST} + {1805007600 -14400 1 EDT} + {1825567200 -18000 0 EST} + {1836457200 -14400 1 EDT} + {1857016800 -18000 0 EST} + {1867906800 -14400 1 EDT} + {1888466400 -18000 0 EST} + {1899356400 -14400 1 EDT} + {1919916000 -18000 0 EST} + {1930806000 -14400 1 EDT} + {1951365600 -18000 0 EST} + {1962860400 -14400 1 EDT} + {1983420000 -18000 0 EST} + {1994310000 -14400 1 EDT} + {2014869600 -18000 0 EST} + {2025759600 -14400 1 EDT} + {2046319200 -18000 0 EST} + {2057209200 -14400 1 EDT} + {2077768800 -18000 0 EST} + {2088658800 -14400 1 EDT} + {2109218400 -18000 0 EST} + {2120108400 -14400 1 EDT} + {2140668000 -18000 0 EST} + {2152162800 -14400 1 EDT} + {2172722400 -18000 0 EST} + {2183612400 -14400 1 EDT} + {2204172000 -18000 0 EST} + {2215062000 -14400 1 EDT} + {2235621600 -18000 0 EST} + {2246511600 -14400 1 EDT} + {2267071200 -18000 0 EST} + {2277961200 -14400 1 EDT} + {2298520800 -18000 0 EST} + {2309410800 -14400 1 EDT} + {2329970400 -18000 0 EST} + {2341465200 -14400 1 EDT} + {2362024800 -18000 0 EST} + {2372914800 -14400 1 EDT} + {2393474400 -18000 0 EST} + {2404364400 -14400 1 EDT} + {2424924000 -18000 0 EST} + {2435814000 -14400 1 EDT} + {2456373600 -18000 0 EST} + {2467263600 -14400 1 EDT} + {2487823200 -18000 0 EST} + {2499318000 -14400 1 EDT} + {2519877600 -18000 0 EST} + {2530767600 -14400 1 EDT} + {2551327200 -18000 0 EST} + {2562217200 -14400 1 EDT} + {2582776800 -18000 0 EST} + {2593666800 -14400 1 EDT} + {2614226400 -18000 0 EST} + {2625116400 -14400 1 EDT} + {2645676000 -18000 0 EST} + {2656566000 -14400 1 EDT} + {2677125600 -18000 0 EST} + {2688620400 -14400 1 EDT} + {2709180000 -18000 0 EST} + {2720070000 -14400 1 EDT} + {2740629600 -18000 0 EST} + {2751519600 -14400 1 EDT} + {2772079200 -18000 0 EST} + {2782969200 -14400 1 EDT} + {2803528800 -18000 0 EST} + {2814418800 -14400 1 EDT} + {2834978400 -18000 0 EST} + {2846473200 -14400 1 EDT} + {2867032800 -18000 0 EST} + {2877922800 -14400 1 EDT} + {2898482400 -18000 0 EST} + {2909372400 -14400 1 EDT} + {2929932000 -18000 0 EST} + {2940822000 -14400 1 EDT} + {2961381600 -18000 0 EST} + {2972271600 -14400 1 EDT} + {2992831200 -18000 0 EST} + {3003721200 -14400 1 EDT} + {3024280800 -18000 0 EST} + {3035775600 -14400 1 EDT} + {3056335200 -18000 0 EST} + {3067225200 -14400 1 EDT} + {3087784800 -18000 0 EST} + {3098674800 -14400 1 EDT} + {3119234400 -18000 0 EST} + {3130124400 -14400 1 EDT} + {3150684000 -18000 0 EST} + {3161574000 -14400 1 EDT} + {3182133600 -18000 0 EST} + {3193023600 -14400 1 EDT} + {3213583200 -18000 0 EST} + {3225078000 -14400 1 EDT} + {3245637600 -18000 0 EST} + {3256527600 -14400 1 EDT} + {3277087200 -18000 0 EST} + {3287977200 -14400 1 EDT} + {3308536800 -18000 0 EST} + {3319426800 -14400 1 EDT} + {3339986400 -18000 0 EST} + {3350876400 -14400 1 EDT} + {3371436000 -18000 0 EST} + {3382930800 -14400 1 EDT} + {3403490400 -18000 0 EST} + {3414380400 -14400 1 EDT} + {3434940000 -18000 0 EST} + {3445830000 -14400 1 EDT} + {3466389600 -18000 0 EST} + {3477279600 -14400 1 EDT} + {3497839200 -18000 0 EST} + {3508729200 -14400 1 EDT} + {3529288800 -18000 0 EST} + {3540178800 -14400 1 EDT} + {3560738400 -18000 0 EST} + {3572233200 -14400 1 EDT} + {3592792800 -18000 0 EST} + {3603682800 -14400 1 EDT} + {3624242400 -18000 0 EST} + {3635132400 -14400 1 EDT} + {3655692000 -18000 0 EST} + {3666582000 -14400 1 EDT} + {3687141600 -18000 0 EST} + {3698031600 -14400 1 EDT} + {3718591200 -18000 0 EST} + {3730086000 -14400 1 EDT} + {3750645600 -18000 0 EST} + {3761535600 -14400 1 EDT} + {3782095200 -18000 0 EST} + {3792985200 -14400 1 EDT} + {3813544800 -18000 0 EST} + {3824434800 -14400 1 EDT} + {3844994400 -18000 0 EST} + {3855884400 -14400 1 EDT} + {3876444000 -18000 0 EST} + {3887334000 -14400 1 EDT} + {3907893600 -18000 0 EST} + {3919388400 -14400 1 EDT} + {3939948000 -18000 0 EST} + {3950838000 -14400 1 EDT} + {3971397600 -18000 0 EST} + {3982287600 -14400 1 EDT} + {4002847200 -18000 0 EST} + {4013737200 -14400 1 EDT} + {4034296800 -18000 0 EST} + {4045186800 -14400 1 EDT} + {4065746400 -18000 0 EST} + {4076636400 -14400 1 EDT} + {4097196000 -18000 0 EST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Tortola b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Tortola new file mode 100644 index 00000000..aa6f6558 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Tortola @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Port_of_Spain)]} { + LoadTimeZoneFile America/Port_of_Spain +} +set TZData(:America/Tortola) $TZData(:America/Port_of_Spain) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Vancouver b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Vancouver new file mode 100644 index 00000000..aef639ae --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Vancouver @@ -0,0 +1,320 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Vancouver) { + {-9223372036854775808 -29548 0 LMT} + {-2713880852 -28800 0 PST} + {-1632060000 -25200 1 PDT} + {-1615129200 -28800 0 PST} + {-880207200 -25200 1 PWT} + {-769395600 -25200 1 PPT} + {-765385200 -28800 0 PST} + {-747237600 -25200 1 PDT} + {-732726000 -28800 0 PST} + {-715788000 -25200 1 PDT} + {-702486000 -28800 0 PST} + {-684338400 -25200 1 PDT} + {-671036400 -28800 0 PST} + {-652888800 -25200 1 PDT} + {-639586800 -28800 0 PST} + {-620834400 -25200 1 PDT} + {-608137200 -28800 0 PST} + {-589384800 -25200 1 PDT} + {-576082800 -28800 0 PST} + {-557935200 -25200 1 PDT} + {-544633200 -28800 0 PST} + {-526485600 -25200 1 PDT} + {-513183600 -28800 0 PST} + {-495036000 -25200 1 PDT} + {-481734000 -28800 0 PST} + {-463586400 -25200 1 PDT} + {-450284400 -28800 0 PST} + {-431532000 -25200 1 PDT} + {-418230000 -28800 0 PST} + {-400082400 -25200 1 PDT} + {-386780400 -28800 0 PST} + {-368632800 -25200 1 PDT} + {-355330800 -28800 0 PST} + {-337183200 -25200 1 PDT} + {-323881200 -28800 0 PST} + {-305733600 -25200 1 PDT} + {-292431600 -28800 0 PST} + {-273679200 -25200 1 PDT} + {-260982000 -28800 0 PST} + {-242229600 -25200 1 PDT} + {-226508400 -28800 0 PST} + {-210780000 -25200 1 PDT} + {-195058800 -28800 0 PST} + {-179330400 -25200 1 PDT} + {-163609200 -28800 0 PST} + {-147880800 -25200 1 PDT} + {-131554800 -28800 0 PST} + {-116431200 -25200 1 PDT} + {-100105200 -28800 0 PST} + {-84376800 -25200 1 PDT} + {-68655600 -28800 0 PST} + {-52927200 -25200 1 PDT} + {-37206000 -28800 0 PST} + {-21477600 -25200 1 PDT} + {-5756400 -28800 0 PST} + {9972000 -25200 1 PDT} + {25693200 -28800 0 PST} + {41421600 -25200 1 PDT} + {57747600 -28800 0 PST} + {73476000 -25200 1 PDT} + {89197200 -28800 0 PST} + {104925600 -25200 1 PDT} + {120646800 -28800 0 PST} + {136375200 -25200 1 PDT} + {152096400 -28800 0 PST} + {167824800 -25200 1 PDT} + {183546000 -28800 0 PST} + {199274400 -25200 1 PDT} + {215600400 -28800 0 PST} + {230724000 -25200 1 PDT} + {247050000 -28800 0 PST} + {262778400 -25200 1 PDT} + {278499600 -28800 0 PST} + {294228000 -25200 1 PDT} + {309949200 -28800 0 PST} + {325677600 -25200 1 PDT} + {341398800 -28800 0 PST} + {357127200 -25200 1 PDT} + {372848400 -28800 0 PST} + {388576800 -25200 1 PDT} + {404902800 -28800 0 PST} + {420026400 -25200 1 PDT} + {436352400 -28800 0 PST} + {452080800 -25200 1 PDT} + {467802000 -28800 0 PST} + {483530400 -25200 1 PDT} + {499251600 -28800 0 PST} + {514980000 -25200 1 PDT} + {530701200 -28800 0 PST} + {536486400 -28800 0 PST} + {544615200 -25200 1 PDT} + {562150800 -28800 0 PST} + {576064800 -25200 1 PDT} + {594205200 -28800 0 PST} + {607514400 -25200 1 PDT} + {625654800 -28800 0 PST} + {638964000 -25200 1 PDT} + {657104400 -28800 0 PST} + {671018400 -25200 1 PDT} + {688554000 -28800 0 PST} + {702468000 -25200 1 PDT} + {720003600 -28800 0 PST} + {733917600 -25200 1 PDT} + {752058000 -28800 0 PST} + {765367200 -25200 1 PDT} + {783507600 -28800 0 PST} + {796816800 -25200 1 PDT} + {814957200 -28800 0 PST} + {828871200 -25200 1 PDT} + {846406800 -28800 0 PST} + {860320800 -25200 1 PDT} + {877856400 -28800 0 PST} + {891770400 -25200 1 PDT} + {909306000 -28800 0 PST} + {923220000 -25200 1 PDT} + {941360400 -28800 0 PST} + {954669600 -25200 1 PDT} + {972810000 -28800 0 PST} + {986119200 -25200 1 PDT} + {1004259600 -28800 0 PST} + {1018173600 -25200 1 PDT} + {1035709200 -28800 0 PST} + {1049623200 -25200 1 PDT} + {1067158800 -28800 0 PST} + {1081072800 -25200 1 PDT} + {1099213200 -28800 0 PST} + {1112522400 -25200 1 PDT} + {1130662800 -28800 0 PST} + {1143972000 -25200 1 PDT} + {1162112400 -28800 0 PST} + {1173607200 -25200 1 PDT} + {1194166800 -28800 0 PST} + {1205056800 -25200 1 PDT} + {1225616400 -28800 0 PST} + {1236506400 -25200 1 PDT} + {1257066000 -28800 0 PST} + {1268560800 -25200 1 PDT} + {1289120400 -28800 0 PST} + {1300010400 -25200 1 PDT} + {1320570000 -28800 0 PST} + {1331460000 -25200 1 PDT} + {1352019600 -28800 0 PST} + {1362909600 -25200 1 PDT} + {1383469200 -28800 0 PST} + {1394359200 -25200 1 PDT} + {1414918800 -28800 0 PST} + {1425808800 -25200 1 PDT} + {1446368400 -28800 0 PST} + {1457863200 -25200 1 PDT} + {1478422800 -28800 0 PST} + {1489312800 -25200 1 PDT} + {1509872400 -28800 0 PST} + {1520762400 -25200 1 PDT} + {1541322000 -28800 0 PST} + {1552212000 -25200 1 PDT} + {1572771600 -28800 0 PST} + {1583661600 -25200 1 PDT} + {1604221200 -28800 0 PST} + {1615716000 -25200 1 PDT} + {1636275600 -28800 0 PST} + {1647165600 -25200 1 PDT} + {1667725200 -28800 0 PST} + {1678615200 -25200 1 PDT} + {1699174800 -28800 0 PST} + {1710064800 -25200 1 PDT} + {1730624400 -28800 0 PST} + {1741514400 -25200 1 PDT} + {1762074000 -28800 0 PST} + {1772964000 -25200 1 PDT} + {1793523600 -28800 0 PST} + {1805018400 -25200 1 PDT} + {1825578000 -28800 0 PST} + {1836468000 -25200 1 PDT} + {1857027600 -28800 0 PST} + {1867917600 -25200 1 PDT} + {1888477200 -28800 0 PST} + {1899367200 -25200 1 PDT} + {1919926800 -28800 0 PST} + {1930816800 -25200 1 PDT} + {1951376400 -28800 0 PST} + {1962871200 -25200 1 PDT} + {1983430800 -28800 0 PST} + {1994320800 -25200 1 PDT} + {2014880400 -28800 0 PST} + {2025770400 -25200 1 PDT} + {2046330000 -28800 0 PST} + {2057220000 -25200 1 PDT} + {2077779600 -28800 0 PST} + {2088669600 -25200 1 PDT} + {2109229200 -28800 0 PST} + {2120119200 -25200 1 PDT} + {2140678800 -28800 0 PST} + {2152173600 -25200 1 PDT} + {2172733200 -28800 0 PST} + {2183623200 -25200 1 PDT} + {2204182800 -28800 0 PST} + {2215072800 -25200 1 PDT} + {2235632400 -28800 0 PST} + {2246522400 -25200 1 PDT} + {2267082000 -28800 0 PST} + {2277972000 -25200 1 PDT} + {2298531600 -28800 0 PST} + {2309421600 -25200 1 PDT} + {2329981200 -28800 0 PST} + {2341476000 -25200 1 PDT} + {2362035600 -28800 0 PST} + {2372925600 -25200 1 PDT} + {2393485200 -28800 0 PST} + {2404375200 -25200 1 PDT} + {2424934800 -28800 0 PST} + {2435824800 -25200 1 PDT} + {2456384400 -28800 0 PST} + {2467274400 -25200 1 PDT} + {2487834000 -28800 0 PST} + {2499328800 -25200 1 PDT} + {2519888400 -28800 0 PST} + {2530778400 -25200 1 PDT} + {2551338000 -28800 0 PST} + {2562228000 -25200 1 PDT} + {2582787600 -28800 0 PST} + {2593677600 -25200 1 PDT} + {2614237200 -28800 0 PST} + {2625127200 -25200 1 PDT} + {2645686800 -28800 0 PST} + {2656576800 -25200 1 PDT} + {2677136400 -28800 0 PST} + {2688631200 -25200 1 PDT} + {2709190800 -28800 0 PST} + {2720080800 -25200 1 PDT} + {2740640400 -28800 0 PST} + {2751530400 -25200 1 PDT} + {2772090000 -28800 0 PST} + {2782980000 -25200 1 PDT} + {2803539600 -28800 0 PST} + {2814429600 -25200 1 PDT} + {2834989200 -28800 0 PST} + {2846484000 -25200 1 PDT} + {2867043600 -28800 0 PST} + {2877933600 -25200 1 PDT} + {2898493200 -28800 0 PST} + {2909383200 -25200 1 PDT} + {2929942800 -28800 0 PST} + {2940832800 -25200 1 PDT} + {2961392400 -28800 0 PST} + {2972282400 -25200 1 PDT} + {2992842000 -28800 0 PST} + {3003732000 -25200 1 PDT} + {3024291600 -28800 0 PST} + {3035786400 -25200 1 PDT} + {3056346000 -28800 0 PST} + {3067236000 -25200 1 PDT} + {3087795600 -28800 0 PST} + {3098685600 -25200 1 PDT} + {3119245200 -28800 0 PST} + {3130135200 -25200 1 PDT} + {3150694800 -28800 0 PST} + {3161584800 -25200 1 PDT} + {3182144400 -28800 0 PST} + {3193034400 -25200 1 PDT} + {3213594000 -28800 0 PST} + {3225088800 -25200 1 PDT} + {3245648400 -28800 0 PST} + {3256538400 -25200 1 PDT} + {3277098000 -28800 0 PST} + {3287988000 -25200 1 PDT} + {3308547600 -28800 0 PST} + {3319437600 -25200 1 PDT} + {3339997200 -28800 0 PST} + {3350887200 -25200 1 PDT} + {3371446800 -28800 0 PST} + {3382941600 -25200 1 PDT} + {3403501200 -28800 0 PST} + {3414391200 -25200 1 PDT} + {3434950800 -28800 0 PST} + {3445840800 -25200 1 PDT} + {3466400400 -28800 0 PST} + {3477290400 -25200 1 PDT} + {3497850000 -28800 0 PST} + {3508740000 -25200 1 PDT} + {3529299600 -28800 0 PST} + {3540189600 -25200 1 PDT} + {3560749200 -28800 0 PST} + {3572244000 -25200 1 PDT} + {3592803600 -28800 0 PST} + {3603693600 -25200 1 PDT} + {3624253200 -28800 0 PST} + {3635143200 -25200 1 PDT} + {3655702800 -28800 0 PST} + {3666592800 -25200 1 PDT} + {3687152400 -28800 0 PST} + {3698042400 -25200 1 PDT} + {3718602000 -28800 0 PST} + {3730096800 -25200 1 PDT} + {3750656400 -28800 0 PST} + {3761546400 -25200 1 PDT} + {3782106000 -28800 0 PST} + {3792996000 -25200 1 PDT} + {3813555600 -28800 0 PST} + {3824445600 -25200 1 PDT} + {3845005200 -28800 0 PST} + {3855895200 -25200 1 PDT} + {3876454800 -28800 0 PST} + {3887344800 -25200 1 PDT} + {3907904400 -28800 0 PST} + {3919399200 -25200 1 PDT} + {3939958800 -28800 0 PST} + {3950848800 -25200 1 PDT} + {3971408400 -28800 0 PST} + {3982298400 -25200 1 PDT} + {4002858000 -28800 0 PST} + {4013748000 -25200 1 PDT} + {4034307600 -28800 0 PST} + {4045197600 -25200 1 PDT} + {4065757200 -28800 0 PST} + {4076647200 -25200 1 PDT} + {4097206800 -28800 0 PST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Virgin b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Virgin new file mode 100644 index 00000000..c267e5ba --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Virgin @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Port_of_Spain)]} { + LoadTimeZoneFile America/Port_of_Spain +} +set TZData(:America/Virgin) $TZData(:America/Port_of_Spain) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Whitehorse b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Whitehorse new file mode 100644 index 00000000..1d61093e --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Whitehorse @@ -0,0 +1,256 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Whitehorse) { + {-9223372036854775808 -32412 0 LMT} + {-2188997988 -32400 0 YST} + {-1632056400 -28800 1 YDT} + {-1615125600 -32400 0 YST} + {-1596978000 -28800 1 YDT} + {-1583164800 -32400 0 YST} + {-880203600 -28800 1 YWT} + {-769395600 -28800 1 YPT} + {-765381600 -32400 0 YST} + {-147884400 -25200 1 YDDT} + {-131554800 -32400 0 YST} + {315561600 -28800 0 PST} + {325677600 -25200 1 PDT} + {341398800 -28800 0 PST} + {357127200 -25200 1 PDT} + {372848400 -28800 0 PST} + {388576800 -25200 1 PDT} + {404902800 -28800 0 PST} + {420026400 -25200 1 PDT} + {436352400 -28800 0 PST} + {452080800 -25200 1 PDT} + {467802000 -28800 0 PST} + {483530400 -25200 1 PDT} + {499251600 -28800 0 PST} + {514980000 -25200 1 PDT} + {530701200 -28800 0 PST} + {544615200 -25200 1 PDT} + {562150800 -28800 0 PST} + {576064800 -25200 1 PDT} + {594205200 -28800 0 PST} + {607514400 -25200 1 PDT} + {625654800 -28800 0 PST} + {638964000 -25200 1 PDT} + {657104400 -28800 0 PST} + {671018400 -25200 1 PDT} + {688554000 -28800 0 PST} + {702468000 -25200 1 PDT} + {720003600 -28800 0 PST} + {733917600 -25200 1 PDT} + {752058000 -28800 0 PST} + {765367200 -25200 1 PDT} + {783507600 -28800 0 PST} + {796816800 -25200 1 PDT} + {814957200 -28800 0 PST} + {828871200 -25200 1 PDT} + {846406800 -28800 0 PST} + {860320800 -25200 1 PDT} + {877856400 -28800 0 PST} + {891770400 -25200 1 PDT} + {909306000 -28800 0 PST} + {923220000 -25200 1 PDT} + {941360400 -28800 0 PST} + {954669600 -25200 1 PDT} + {972810000 -28800 0 PST} + {986119200 -25200 1 PDT} + {1004259600 -28800 0 PST} + {1018173600 -25200 1 PDT} + {1035709200 -28800 0 PST} + {1049623200 -25200 1 PDT} + {1067158800 -28800 0 PST} + {1081072800 -25200 1 PDT} + {1099213200 -28800 0 PST} + {1112522400 -25200 1 PDT} + {1130662800 -28800 0 PST} + {1143972000 -25200 1 PDT} + {1162112400 -28800 0 PST} + {1173607200 -25200 1 PDT} + {1194166800 -28800 0 PST} + {1205056800 -25200 1 PDT} + {1225616400 -28800 0 PST} + {1236506400 -25200 1 PDT} + {1257066000 -28800 0 PST} + {1268560800 -25200 1 PDT} + {1289120400 -28800 0 PST} + {1300010400 -25200 1 PDT} + {1320570000 -28800 0 PST} + {1331460000 -25200 1 PDT} + {1352019600 -28800 0 PST} + {1362909600 -25200 1 PDT} + {1383469200 -28800 0 PST} + {1394359200 -25200 1 PDT} + {1414918800 -28800 0 PST} + {1425808800 -25200 1 PDT} + {1446368400 -28800 0 PST} + {1457863200 -25200 1 PDT} + {1478422800 -28800 0 PST} + {1489312800 -25200 1 PDT} + {1509872400 -28800 0 PST} + {1520762400 -25200 1 PDT} + {1541322000 -28800 0 PST} + {1552212000 -25200 1 PDT} + {1572771600 -28800 0 PST} + {1583661600 -25200 1 PDT} + {1604221200 -28800 0 PST} + {1615716000 -25200 1 PDT} + {1636275600 -28800 0 PST} + {1647165600 -25200 1 PDT} + {1667725200 -28800 0 PST} + {1678615200 -25200 1 PDT} + {1699174800 -28800 0 PST} + {1710064800 -25200 1 PDT} + {1730624400 -28800 0 PST} + {1741514400 -25200 1 PDT} + {1762074000 -28800 0 PST} + {1772964000 -25200 1 PDT} + {1793523600 -28800 0 PST} + {1805018400 -25200 1 PDT} + {1825578000 -28800 0 PST} + {1836468000 -25200 1 PDT} + {1857027600 -28800 0 PST} + {1867917600 -25200 1 PDT} + {1888477200 -28800 0 PST} + {1899367200 -25200 1 PDT} + {1919926800 -28800 0 PST} + {1930816800 -25200 1 PDT} + {1951376400 -28800 0 PST} + {1962871200 -25200 1 PDT} + {1983430800 -28800 0 PST} + {1994320800 -25200 1 PDT} + {2014880400 -28800 0 PST} + {2025770400 -25200 1 PDT} + {2046330000 -28800 0 PST} + {2057220000 -25200 1 PDT} + {2077779600 -28800 0 PST} + {2088669600 -25200 1 PDT} + {2109229200 -28800 0 PST} + {2120119200 -25200 1 PDT} + {2140678800 -28800 0 PST} + {2152173600 -25200 1 PDT} + {2172733200 -28800 0 PST} + {2183623200 -25200 1 PDT} + {2204182800 -28800 0 PST} + {2215072800 -25200 1 PDT} + {2235632400 -28800 0 PST} + {2246522400 -25200 1 PDT} + {2267082000 -28800 0 PST} + {2277972000 -25200 1 PDT} + {2298531600 -28800 0 PST} + {2309421600 -25200 1 PDT} + {2329981200 -28800 0 PST} + {2341476000 -25200 1 PDT} + {2362035600 -28800 0 PST} + {2372925600 -25200 1 PDT} + {2393485200 -28800 0 PST} + {2404375200 -25200 1 PDT} + {2424934800 -28800 0 PST} + {2435824800 -25200 1 PDT} + {2456384400 -28800 0 PST} + {2467274400 -25200 1 PDT} + {2487834000 -28800 0 PST} + {2499328800 -25200 1 PDT} + {2519888400 -28800 0 PST} + {2530778400 -25200 1 PDT} + {2551338000 -28800 0 PST} + {2562228000 -25200 1 PDT} + {2582787600 -28800 0 PST} + {2593677600 -25200 1 PDT} + {2614237200 -28800 0 PST} + {2625127200 -25200 1 PDT} + {2645686800 -28800 0 PST} + {2656576800 -25200 1 PDT} + {2677136400 -28800 0 PST} + {2688631200 -25200 1 PDT} + {2709190800 -28800 0 PST} + {2720080800 -25200 1 PDT} + {2740640400 -28800 0 PST} + {2751530400 -25200 1 PDT} + {2772090000 -28800 0 PST} + {2782980000 -25200 1 PDT} + {2803539600 -28800 0 PST} + {2814429600 -25200 1 PDT} + {2834989200 -28800 0 PST} + {2846484000 -25200 1 PDT} + {2867043600 -28800 0 PST} + {2877933600 -25200 1 PDT} + {2898493200 -28800 0 PST} + {2909383200 -25200 1 PDT} + {2929942800 -28800 0 PST} + {2940832800 -25200 1 PDT} + {2961392400 -28800 0 PST} + {2972282400 -25200 1 PDT} + {2992842000 -28800 0 PST} + {3003732000 -25200 1 PDT} + {3024291600 -28800 0 PST} + {3035786400 -25200 1 PDT} + {3056346000 -28800 0 PST} + {3067236000 -25200 1 PDT} + {3087795600 -28800 0 PST} + {3098685600 -25200 1 PDT} + {3119245200 -28800 0 PST} + {3130135200 -25200 1 PDT} + {3150694800 -28800 0 PST} + {3161584800 -25200 1 PDT} + {3182144400 -28800 0 PST} + {3193034400 -25200 1 PDT} + {3213594000 -28800 0 PST} + {3225088800 -25200 1 PDT} + {3245648400 -28800 0 PST} + {3256538400 -25200 1 PDT} + {3277098000 -28800 0 PST} + {3287988000 -25200 1 PDT} + {3308547600 -28800 0 PST} + {3319437600 -25200 1 PDT} + {3339997200 -28800 0 PST} + {3350887200 -25200 1 PDT} + {3371446800 -28800 0 PST} + {3382941600 -25200 1 PDT} + {3403501200 -28800 0 PST} + {3414391200 -25200 1 PDT} + {3434950800 -28800 0 PST} + {3445840800 -25200 1 PDT} + {3466400400 -28800 0 PST} + {3477290400 -25200 1 PDT} + {3497850000 -28800 0 PST} + {3508740000 -25200 1 PDT} + {3529299600 -28800 0 PST} + {3540189600 -25200 1 PDT} + {3560749200 -28800 0 PST} + {3572244000 -25200 1 PDT} + {3592803600 -28800 0 PST} + {3603693600 -25200 1 PDT} + {3624253200 -28800 0 PST} + {3635143200 -25200 1 PDT} + {3655702800 -28800 0 PST} + {3666592800 -25200 1 PDT} + {3687152400 -28800 0 PST} + {3698042400 -25200 1 PDT} + {3718602000 -28800 0 PST} + {3730096800 -25200 1 PDT} + {3750656400 -28800 0 PST} + {3761546400 -25200 1 PDT} + {3782106000 -28800 0 PST} + {3792996000 -25200 1 PDT} + {3813555600 -28800 0 PST} + {3824445600 -25200 1 PDT} + {3845005200 -28800 0 PST} + {3855895200 -25200 1 PDT} + {3876454800 -28800 0 PST} + {3887344800 -25200 1 PDT} + {3907904400 -28800 0 PST} + {3919399200 -25200 1 PDT} + {3939958800 -28800 0 PST} + {3950848800 -25200 1 PDT} + {3971408400 -28800 0 PST} + {3982298400 -25200 1 PDT} + {4002858000 -28800 0 PST} + {4013748000 -25200 1 PDT} + {4034307600 -28800 0 PST} + {4045197600 -25200 1 PDT} + {4065757200 -28800 0 PST} + {4076647200 -25200 1 PDT} + {4097206800 -28800 0 PST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Winnipeg b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Winnipeg new file mode 100644 index 00000000..e6efe47f --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Winnipeg @@ -0,0 +1,316 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Winnipeg) { + {-9223372036854775808 -23316 0 LMT} + {-2602258284 -21600 0 CST} + {-1694368800 -18000 1 CDT} + {-1681671600 -21600 0 CST} + {-1632067200 -18000 1 CDT} + {-1615136400 -21600 0 CST} + {-1029686400 -18000 1 CDT} + {-1018198800 -21600 0 CST} + {-880214400 -18000 1 CWT} + {-769395600 -18000 1 CPT} + {-765392400 -21600 0 CST} + {-746035200 -18000 1 CDT} + {-732733200 -21600 0 CST} + {-715795200 -18000 1 CDT} + {-702493200 -21600 0 CST} + {-684345600 -18000 1 CDT} + {-671043600 -21600 0 CST} + {-652896000 -18000 1 CDT} + {-639594000 -21600 0 CST} + {-620755200 -18000 1 CDT} + {-607626000 -21600 0 CST} + {-589392000 -18000 1 CDT} + {-576090000 -21600 0 CST} + {-557942400 -18000 1 CDT} + {-544640400 -21600 0 CST} + {-526492800 -18000 1 CDT} + {-513190800 -21600 0 CST} + {-495043200 -18000 1 CDT} + {-481741200 -21600 0 CST} + {-463593600 -18000 1 CDT} + {-450291600 -21600 0 CST} + {-431539200 -18000 1 CDT} + {-418237200 -21600 0 CST} + {-400089600 -18000 1 CDT} + {-386787600 -21600 0 CST} + {-368640000 -18000 1 CDT} + {-355338000 -21600 0 CST} + {-337190400 -18000 1 CDT} + {-321469200 -21600 0 CST} + {-305740800 -18000 1 CDT} + {-292438800 -21600 0 CST} + {-210787200 -18000 1 CDT} + {-198090000 -21600 0 CST} + {-116438400 -18000 1 CDT} + {-100108800 -21600 0 CST} + {-84384000 -18000 1 CDT} + {-68659200 -21600 0 CST} + {-52934400 -18000 1 CDT} + {-37209600 -21600 0 CST} + {-21484800 -18000 1 CDT} + {-5760000 -21600 0 CST} + {9964800 -18000 1 CDT} + {25689600 -21600 0 CST} + {41414400 -18000 1 CDT} + {57744000 -21600 0 CST} + {73468800 -18000 1 CDT} + {89193600 -21600 0 CST} + {104918400 -18000 1 CDT} + {120643200 -21600 0 CST} + {136368000 -18000 1 CDT} + {152092800 -21600 0 CST} + {167817600 -18000 1 CDT} + {183542400 -21600 0 CST} + {199267200 -18000 1 CDT} + {215596800 -21600 0 CST} + {230716800 -18000 1 CDT} + {247046400 -21600 0 CST} + {262771200 -18000 1 CDT} + {278496000 -21600 0 CST} + {294220800 -18000 1 CDT} + {309945600 -21600 0 CST} + {325670400 -18000 1 CDT} + {341395200 -21600 0 CST} + {357120000 -18000 1 CDT} + {372844800 -21600 0 CST} + {388569600 -18000 1 CDT} + {404899200 -21600 0 CST} + {420019200 -18000 1 CDT} + {436348800 -21600 0 CST} + {452073600 -18000 1 CDT} + {467798400 -21600 0 CST} + {483523200 -18000 1 CDT} + {499248000 -21600 0 CST} + {514972800 -18000 1 CDT} + {530697600 -21600 0 CST} + {544608000 -18000 1 CDT} + {562147200 -21600 0 CST} + {576057600 -18000 1 CDT} + {594201600 -21600 0 CST} + {607507200 -18000 1 CDT} + {625651200 -21600 0 CST} + {638956800 -18000 1 CDT} + {657100800 -21600 0 CST} + {671011200 -18000 1 CDT} + {688550400 -21600 0 CST} + {702460800 -18000 1 CDT} + {720000000 -21600 0 CST} + {733910400 -18000 1 CDT} + {752054400 -21600 0 CST} + {765360000 -18000 1 CDT} + {783504000 -21600 0 CST} + {796809600 -18000 1 CDT} + {814953600 -21600 0 CST} + {828864000 -18000 1 CDT} + {846403200 -21600 0 CST} + {860313600 -18000 1 CDT} + {877852800 -21600 0 CST} + {891763200 -18000 1 CDT} + {909302400 -21600 0 CST} + {923212800 -18000 1 CDT} + {941356800 -21600 0 CST} + {954662400 -18000 1 CDT} + {972806400 -21600 0 CST} + {986112000 -18000 1 CDT} + {1004256000 -21600 0 CST} + {1018166400 -18000 1 CDT} + {1035705600 -21600 0 CST} + {1049616000 -18000 1 CDT} + {1067155200 -21600 0 CST} + {1081065600 -18000 1 CDT} + {1099209600 -21600 0 CST} + {1112515200 -18000 1 CDT} + {1130659200 -21600 0 CST} + {1136095200 -21600 0 CST} + {1143964800 -18000 1 CDT} + {1162105200 -21600 0 CST} + {1173600000 -18000 1 CDT} + {1194159600 -21600 0 CST} + {1205049600 -18000 1 CDT} + {1225609200 -21600 0 CST} + {1236499200 -18000 1 CDT} + {1257058800 -21600 0 CST} + {1268553600 -18000 1 CDT} + {1289113200 -21600 0 CST} + {1300003200 -18000 1 CDT} + {1320562800 -21600 0 CST} + {1331452800 -18000 1 CDT} + {1352012400 -21600 0 CST} + {1362902400 -18000 1 CDT} + {1383462000 -21600 0 CST} + {1394352000 -18000 1 CDT} + {1414911600 -21600 0 CST} + {1425801600 -18000 1 CDT} + {1446361200 -21600 0 CST} + {1457856000 -18000 1 CDT} + {1478415600 -21600 0 CST} + {1489305600 -18000 1 CDT} + {1509865200 -21600 0 CST} + {1520755200 -18000 1 CDT} + {1541314800 -21600 0 CST} + {1552204800 -18000 1 CDT} + {1572764400 -21600 0 CST} + {1583654400 -18000 1 CDT} + {1604214000 -21600 0 CST} + {1615708800 -18000 1 CDT} + {1636268400 -21600 0 CST} + {1647158400 -18000 1 CDT} + {1667718000 -21600 0 CST} + {1678608000 -18000 1 CDT} + {1699167600 -21600 0 CST} + {1710057600 -18000 1 CDT} + {1730617200 -21600 0 CST} + {1741507200 -18000 1 CDT} + {1762066800 -21600 0 CST} + {1772956800 -18000 1 CDT} + {1793516400 -21600 0 CST} + {1805011200 -18000 1 CDT} + {1825570800 -21600 0 CST} + {1836460800 -18000 1 CDT} + {1857020400 -21600 0 CST} + {1867910400 -18000 1 CDT} + {1888470000 -21600 0 CST} + {1899360000 -18000 1 CDT} + {1919919600 -21600 0 CST} + {1930809600 -18000 1 CDT} + {1951369200 -21600 0 CST} + {1962864000 -18000 1 CDT} + {1983423600 -21600 0 CST} + {1994313600 -18000 1 CDT} + {2014873200 -21600 0 CST} + {2025763200 -18000 1 CDT} + {2046322800 -21600 0 CST} + {2057212800 -18000 1 CDT} + {2077772400 -21600 0 CST} + {2088662400 -18000 1 CDT} + {2109222000 -21600 0 CST} + {2120112000 -18000 1 CDT} + {2140671600 -21600 0 CST} + {2152166400 -18000 1 CDT} + {2172726000 -21600 0 CST} + {2183616000 -18000 1 CDT} + {2204175600 -21600 0 CST} + {2215065600 -18000 1 CDT} + {2235625200 -21600 0 CST} + {2246515200 -18000 1 CDT} + {2267074800 -21600 0 CST} + {2277964800 -18000 1 CDT} + {2298524400 -21600 0 CST} + {2309414400 -18000 1 CDT} + {2329974000 -21600 0 CST} + {2341468800 -18000 1 CDT} + {2362028400 -21600 0 CST} + {2372918400 -18000 1 CDT} + {2393478000 -21600 0 CST} + {2404368000 -18000 1 CDT} + {2424927600 -21600 0 CST} + {2435817600 -18000 1 CDT} + {2456377200 -21600 0 CST} + {2467267200 -18000 1 CDT} + {2487826800 -21600 0 CST} + {2499321600 -18000 1 CDT} + {2519881200 -21600 0 CST} + {2530771200 -18000 1 CDT} + {2551330800 -21600 0 CST} + {2562220800 -18000 1 CDT} + {2582780400 -21600 0 CST} + {2593670400 -18000 1 CDT} + {2614230000 -21600 0 CST} + {2625120000 -18000 1 CDT} + {2645679600 -21600 0 CST} + {2656569600 -18000 1 CDT} + {2677129200 -21600 0 CST} + {2688624000 -18000 1 CDT} + {2709183600 -21600 0 CST} + {2720073600 -18000 1 CDT} + {2740633200 -21600 0 CST} + {2751523200 -18000 1 CDT} + {2772082800 -21600 0 CST} + {2782972800 -18000 1 CDT} + {2803532400 -21600 0 CST} + {2814422400 -18000 1 CDT} + {2834982000 -21600 0 CST} + {2846476800 -18000 1 CDT} + {2867036400 -21600 0 CST} + {2877926400 -18000 1 CDT} + {2898486000 -21600 0 CST} + {2909376000 -18000 1 CDT} + {2929935600 -21600 0 CST} + {2940825600 -18000 1 CDT} + {2961385200 -21600 0 CST} + {2972275200 -18000 1 CDT} + {2992834800 -21600 0 CST} + {3003724800 -18000 1 CDT} + {3024284400 -21600 0 CST} + {3035779200 -18000 1 CDT} + {3056338800 -21600 0 CST} + {3067228800 -18000 1 CDT} + {3087788400 -21600 0 CST} + {3098678400 -18000 1 CDT} + {3119238000 -21600 0 CST} + {3130128000 -18000 1 CDT} + {3150687600 -21600 0 CST} + {3161577600 -18000 1 CDT} + {3182137200 -21600 0 CST} + {3193027200 -18000 1 CDT} + {3213586800 -21600 0 CST} + {3225081600 -18000 1 CDT} + {3245641200 -21600 0 CST} + {3256531200 -18000 1 CDT} + {3277090800 -21600 0 CST} + {3287980800 -18000 1 CDT} + {3308540400 -21600 0 CST} + {3319430400 -18000 1 CDT} + {3339990000 -21600 0 CST} + {3350880000 -18000 1 CDT} + {3371439600 -21600 0 CST} + {3382934400 -18000 1 CDT} + {3403494000 -21600 0 CST} + {3414384000 -18000 1 CDT} + {3434943600 -21600 0 CST} + {3445833600 -18000 1 CDT} + {3466393200 -21600 0 CST} + {3477283200 -18000 1 CDT} + {3497842800 -21600 0 CST} + {3508732800 -18000 1 CDT} + {3529292400 -21600 0 CST} + {3540182400 -18000 1 CDT} + {3560742000 -21600 0 CST} + {3572236800 -18000 1 CDT} + {3592796400 -21600 0 CST} + {3603686400 -18000 1 CDT} + {3624246000 -21600 0 CST} + {3635136000 -18000 1 CDT} + {3655695600 -21600 0 CST} + {3666585600 -18000 1 CDT} + {3687145200 -21600 0 CST} + {3698035200 -18000 1 CDT} + {3718594800 -21600 0 CST} + {3730089600 -18000 1 CDT} + {3750649200 -21600 0 CST} + {3761539200 -18000 1 CDT} + {3782098800 -21600 0 CST} + {3792988800 -18000 1 CDT} + {3813548400 -21600 0 CST} + {3824438400 -18000 1 CDT} + {3844998000 -21600 0 CST} + {3855888000 -18000 1 CDT} + {3876447600 -21600 0 CST} + {3887337600 -18000 1 CDT} + {3907897200 -21600 0 CST} + {3919392000 -18000 1 CDT} + {3939951600 -21600 0 CST} + {3950841600 -18000 1 CDT} + {3971401200 -21600 0 CST} + {3982291200 -18000 1 CDT} + {4002850800 -21600 0 CST} + {4013740800 -18000 1 CDT} + {4034300400 -21600 0 CST} + {4045190400 -18000 1 CDT} + {4065750000 -21600 0 CST} + {4076640000 -18000 1 CDT} + {4097199600 -21600 0 CST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Yakutat b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Yakutat new file mode 100644 index 00000000..a0420c54 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Yakutat @@ -0,0 +1,276 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Yakutat) { + {-9223372036854775808 52865 0 LMT} + {-3225364865 -33535 0 LMT} + {-2188953665 -32400 0 YST} + {-883580400 -32400 0 YST} + {-880203600 -28800 1 YWT} + {-769395600 -28800 1 YPT} + {-765381600 -32400 0 YST} + {-757350000 -32400 0 YST} + {-31503600 -32400 0 YST} + {-21474000 -28800 1 YDT} + {-5752800 -32400 0 YST} + {9975600 -28800 1 YDT} + {25696800 -32400 0 YST} + {41425200 -28800 1 YDT} + {57751200 -32400 0 YST} + {73479600 -28800 1 YDT} + {89200800 -32400 0 YST} + {104929200 -28800 1 YDT} + {120650400 -32400 0 YST} + {126702000 -28800 1 YDT} + {152100000 -32400 0 YST} + {162385200 -28800 1 YDT} + {183549600 -32400 0 YST} + {199278000 -28800 1 YDT} + {215604000 -32400 0 YST} + {230727600 -28800 1 YDT} + {247053600 -32400 0 YST} + {262782000 -28800 1 YDT} + {278503200 -32400 0 YST} + {294231600 -28800 1 YDT} + {309952800 -32400 0 YST} + {325681200 -28800 1 YDT} + {341402400 -32400 0 YST} + {357130800 -28800 1 YDT} + {372852000 -32400 0 YST} + {388580400 -28800 1 YDT} + {404906400 -32400 0 YST} + {420030000 -28800 1 YDT} + {436356000 -32400 0 YST} + {439030800 -32400 0 AKST} + {452084400 -28800 1 AKDT} + {467805600 -32400 0 AKST} + {483534000 -28800 1 AKDT} + {499255200 -32400 0 AKST} + {514983600 -28800 1 AKDT} + {530704800 -32400 0 AKST} + {544618800 -28800 1 AKDT} + {562154400 -32400 0 AKST} + {576068400 -28800 1 AKDT} + {594208800 -32400 0 AKST} + {607518000 -28800 1 AKDT} + {625658400 -32400 0 AKST} + {638967600 -28800 1 AKDT} + {657108000 -32400 0 AKST} + {671022000 -28800 1 AKDT} + {688557600 -32400 0 AKST} + {702471600 -28800 1 AKDT} + {720007200 -32400 0 AKST} + {733921200 -28800 1 AKDT} + {752061600 -32400 0 AKST} + {765370800 -28800 1 AKDT} + {783511200 -32400 0 AKST} + {796820400 -28800 1 AKDT} + {814960800 -32400 0 AKST} + {828874800 -28800 1 AKDT} + {846410400 -32400 0 AKST} + {860324400 -28800 1 AKDT} + {877860000 -32400 0 AKST} + {891774000 -28800 1 AKDT} + {909309600 -32400 0 AKST} + {923223600 -28800 1 AKDT} + {941364000 -32400 0 AKST} + {954673200 -28800 1 AKDT} + {972813600 -32400 0 AKST} + {986122800 -28800 1 AKDT} + {1004263200 -32400 0 AKST} + {1018177200 -28800 1 AKDT} + {1035712800 -32400 0 AKST} + {1049626800 -28800 1 AKDT} + {1067162400 -32400 0 AKST} + {1081076400 -28800 1 AKDT} + {1099216800 -32400 0 AKST} + {1112526000 -28800 1 AKDT} + {1130666400 -32400 0 AKST} + {1143975600 -28800 1 AKDT} + {1162116000 -32400 0 AKST} + {1173610800 -28800 1 AKDT} + {1194170400 -32400 0 AKST} + {1205060400 -28800 1 AKDT} + {1225620000 -32400 0 AKST} + {1236510000 -28800 1 AKDT} + {1257069600 -32400 0 AKST} + {1268564400 -28800 1 AKDT} + {1289124000 -32400 0 AKST} + {1300014000 -28800 1 AKDT} + {1320573600 -32400 0 AKST} + {1331463600 -28800 1 AKDT} + {1352023200 -32400 0 AKST} + {1362913200 -28800 1 AKDT} + {1383472800 -32400 0 AKST} + {1394362800 -28800 1 AKDT} + {1414922400 -32400 0 AKST} + {1425812400 -28800 1 AKDT} + {1446372000 -32400 0 AKST} + {1457866800 -28800 1 AKDT} + {1478426400 -32400 0 AKST} + {1489316400 -28800 1 AKDT} + {1509876000 -32400 0 AKST} + {1520766000 -28800 1 AKDT} + {1541325600 -32400 0 AKST} + {1552215600 -28800 1 AKDT} + {1572775200 -32400 0 AKST} + {1583665200 -28800 1 AKDT} + {1604224800 -32400 0 AKST} + {1615719600 -28800 1 AKDT} + {1636279200 -32400 0 AKST} + {1647169200 -28800 1 AKDT} + {1667728800 -32400 0 AKST} + {1678618800 -28800 1 AKDT} + {1699178400 -32400 0 AKST} + {1710068400 -28800 1 AKDT} + {1730628000 -32400 0 AKST} + {1741518000 -28800 1 AKDT} + {1762077600 -32400 0 AKST} + {1772967600 -28800 1 AKDT} + {1793527200 -32400 0 AKST} + {1805022000 -28800 1 AKDT} + {1825581600 -32400 0 AKST} + {1836471600 -28800 1 AKDT} + {1857031200 -32400 0 AKST} + {1867921200 -28800 1 AKDT} + {1888480800 -32400 0 AKST} + {1899370800 -28800 1 AKDT} + {1919930400 -32400 0 AKST} + {1930820400 -28800 1 AKDT} + {1951380000 -32400 0 AKST} + {1962874800 -28800 1 AKDT} + {1983434400 -32400 0 AKST} + {1994324400 -28800 1 AKDT} + {2014884000 -32400 0 AKST} + {2025774000 -28800 1 AKDT} + {2046333600 -32400 0 AKST} + {2057223600 -28800 1 AKDT} + {2077783200 -32400 0 AKST} + {2088673200 -28800 1 AKDT} + {2109232800 -32400 0 AKST} + {2120122800 -28800 1 AKDT} + {2140682400 -32400 0 AKST} + {2152177200 -28800 1 AKDT} + {2172736800 -32400 0 AKST} + {2183626800 -28800 1 AKDT} + {2204186400 -32400 0 AKST} + {2215076400 -28800 1 AKDT} + {2235636000 -32400 0 AKST} + {2246526000 -28800 1 AKDT} + {2267085600 -32400 0 AKST} + {2277975600 -28800 1 AKDT} + {2298535200 -32400 0 AKST} + {2309425200 -28800 1 AKDT} + {2329984800 -32400 0 AKST} + {2341479600 -28800 1 AKDT} + {2362039200 -32400 0 AKST} + {2372929200 -28800 1 AKDT} + {2393488800 -32400 0 AKST} + {2404378800 -28800 1 AKDT} + {2424938400 -32400 0 AKST} + {2435828400 -28800 1 AKDT} + {2456388000 -32400 0 AKST} + {2467278000 -28800 1 AKDT} + {2487837600 -32400 0 AKST} + {2499332400 -28800 1 AKDT} + {2519892000 -32400 0 AKST} + {2530782000 -28800 1 AKDT} + {2551341600 -32400 0 AKST} + {2562231600 -28800 1 AKDT} + {2582791200 -32400 0 AKST} + {2593681200 -28800 1 AKDT} + {2614240800 -32400 0 AKST} + {2625130800 -28800 1 AKDT} + {2645690400 -32400 0 AKST} + {2656580400 -28800 1 AKDT} + {2677140000 -32400 0 AKST} + {2688634800 -28800 1 AKDT} + {2709194400 -32400 0 AKST} + {2720084400 -28800 1 AKDT} + {2740644000 -32400 0 AKST} + {2751534000 -28800 1 AKDT} + {2772093600 -32400 0 AKST} + {2782983600 -28800 1 AKDT} + {2803543200 -32400 0 AKST} + {2814433200 -28800 1 AKDT} + {2834992800 -32400 0 AKST} + {2846487600 -28800 1 AKDT} + {2867047200 -32400 0 AKST} + {2877937200 -28800 1 AKDT} + {2898496800 -32400 0 AKST} + {2909386800 -28800 1 AKDT} + {2929946400 -32400 0 AKST} + {2940836400 -28800 1 AKDT} + {2961396000 -32400 0 AKST} + {2972286000 -28800 1 AKDT} + {2992845600 -32400 0 AKST} + {3003735600 -28800 1 AKDT} + {3024295200 -32400 0 AKST} + {3035790000 -28800 1 AKDT} + {3056349600 -32400 0 AKST} + {3067239600 -28800 1 AKDT} + {3087799200 -32400 0 AKST} + {3098689200 -28800 1 AKDT} + {3119248800 -32400 0 AKST} + {3130138800 -28800 1 AKDT} + {3150698400 -32400 0 AKST} + {3161588400 -28800 1 AKDT} + {3182148000 -32400 0 AKST} + {3193038000 -28800 1 AKDT} + {3213597600 -32400 0 AKST} + {3225092400 -28800 1 AKDT} + {3245652000 -32400 0 AKST} + {3256542000 -28800 1 AKDT} + {3277101600 -32400 0 AKST} + {3287991600 -28800 1 AKDT} + {3308551200 -32400 0 AKST} + {3319441200 -28800 1 AKDT} + {3340000800 -32400 0 AKST} + {3350890800 -28800 1 AKDT} + {3371450400 -32400 0 AKST} + {3382945200 -28800 1 AKDT} + {3403504800 -32400 0 AKST} + {3414394800 -28800 1 AKDT} + {3434954400 -32400 0 AKST} + {3445844400 -28800 1 AKDT} + {3466404000 -32400 0 AKST} + {3477294000 -28800 1 AKDT} + {3497853600 -32400 0 AKST} + {3508743600 -28800 1 AKDT} + {3529303200 -32400 0 AKST} + {3540193200 -28800 1 AKDT} + {3560752800 -32400 0 AKST} + {3572247600 -28800 1 AKDT} + {3592807200 -32400 0 AKST} + {3603697200 -28800 1 AKDT} + {3624256800 -32400 0 AKST} + {3635146800 -28800 1 AKDT} + {3655706400 -32400 0 AKST} + {3666596400 -28800 1 AKDT} + {3687156000 -32400 0 AKST} + {3698046000 -28800 1 AKDT} + {3718605600 -32400 0 AKST} + {3730100400 -28800 1 AKDT} + {3750660000 -32400 0 AKST} + {3761550000 -28800 1 AKDT} + {3782109600 -32400 0 AKST} + {3792999600 -28800 1 AKDT} + {3813559200 -32400 0 AKST} + {3824449200 -28800 1 AKDT} + {3845008800 -32400 0 AKST} + {3855898800 -28800 1 AKDT} + {3876458400 -32400 0 AKST} + {3887348400 -28800 1 AKDT} + {3907908000 -32400 0 AKST} + {3919402800 -28800 1 AKDT} + {3939962400 -32400 0 AKST} + {3950852400 -28800 1 AKDT} + {3971412000 -32400 0 AKST} + {3982302000 -28800 1 AKDT} + {4002861600 -32400 0 AKST} + {4013751600 -28800 1 AKDT} + {4034311200 -32400 0 AKST} + {4045201200 -28800 1 AKDT} + {4065760800 -32400 0 AKST} + {4076650800 -28800 1 AKDT} + {4097210400 -32400 0 AKST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Yellowknife b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Yellowknife new file mode 100644 index 00000000..44ca658b --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/America/Yellowknife @@ -0,0 +1,252 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:America/Yellowknife) { + {-9223372036854775808 0 0 zzz} + {-1104537600 -25200 0 MST} + {-880210800 -21600 1 MWT} + {-769395600 -21600 1 MPT} + {-765388800 -25200 0 MST} + {-147891600 -18000 1 MDDT} + {-131562000 -25200 0 MST} + {315558000 -25200 0 MST} + {325674000 -21600 1 MDT} + {341395200 -25200 0 MST} + {357123600 -21600 1 MDT} + {372844800 -25200 0 MST} + {388573200 -21600 1 MDT} + {404899200 -25200 0 MST} + {420022800 -21600 1 MDT} + {436348800 -25200 0 MST} + {452077200 -21600 1 MDT} + {467798400 -25200 0 MST} + {483526800 -21600 1 MDT} + {499248000 -25200 0 MST} + {514976400 -21600 1 MDT} + {530697600 -25200 0 MST} + {544611600 -21600 1 MDT} + {562147200 -25200 0 MST} + {576061200 -21600 1 MDT} + {594201600 -25200 0 MST} + {607510800 -21600 1 MDT} + {625651200 -25200 0 MST} + {638960400 -21600 1 MDT} + {657100800 -25200 0 MST} + {671014800 -21600 1 MDT} + {688550400 -25200 0 MST} + {702464400 -21600 1 MDT} + {720000000 -25200 0 MST} + {733914000 -21600 1 MDT} + {752054400 -25200 0 MST} + {765363600 -21600 1 MDT} + {783504000 -25200 0 MST} + {796813200 -21600 1 MDT} + {814953600 -25200 0 MST} + {828867600 -21600 1 MDT} + {846403200 -25200 0 MST} + {860317200 -21600 1 MDT} + {877852800 -25200 0 MST} + {891766800 -21600 1 MDT} + {909302400 -25200 0 MST} + {923216400 -21600 1 MDT} + {941356800 -25200 0 MST} + {954666000 -21600 1 MDT} + {972806400 -25200 0 MST} + {986115600 -21600 1 MDT} + {1004256000 -25200 0 MST} + {1018170000 -21600 1 MDT} + {1035705600 -25200 0 MST} + {1049619600 -21600 1 MDT} + {1067155200 -25200 0 MST} + {1081069200 -21600 1 MDT} + {1099209600 -25200 0 MST} + {1112518800 -21600 1 MDT} + {1130659200 -25200 0 MST} + {1143968400 -21600 1 MDT} + {1162108800 -25200 0 MST} + {1173603600 -21600 1 MDT} + {1194163200 -25200 0 MST} + {1205053200 -21600 1 MDT} + {1225612800 -25200 0 MST} + {1236502800 -21600 1 MDT} + {1257062400 -25200 0 MST} + {1268557200 -21600 1 MDT} + {1289116800 -25200 0 MST} + {1300006800 -21600 1 MDT} + {1320566400 -25200 0 MST} + {1331456400 -21600 1 MDT} + {1352016000 -25200 0 MST} + {1362906000 -21600 1 MDT} + {1383465600 -25200 0 MST} + {1394355600 -21600 1 MDT} + {1414915200 -25200 0 MST} + {1425805200 -21600 1 MDT} + {1446364800 -25200 0 MST} + {1457859600 -21600 1 MDT} + {1478419200 -25200 0 MST} + {1489309200 -21600 1 MDT} + {1509868800 -25200 0 MST} + {1520758800 -21600 1 MDT} + {1541318400 -25200 0 MST} + {1552208400 -21600 1 MDT} + {1572768000 -25200 0 MST} + {1583658000 -21600 1 MDT} + {1604217600 -25200 0 MST} + {1615712400 -21600 1 MDT} + {1636272000 -25200 0 MST} + {1647162000 -21600 1 MDT} + {1667721600 -25200 0 MST} + {1678611600 -21600 1 MDT} + {1699171200 -25200 0 MST} + {1710061200 -21600 1 MDT} + {1730620800 -25200 0 MST} + {1741510800 -21600 1 MDT} + {1762070400 -25200 0 MST} + {1772960400 -21600 1 MDT} + {1793520000 -25200 0 MST} + {1805014800 -21600 1 MDT} + {1825574400 -25200 0 MST} + {1836464400 -21600 1 MDT} + {1857024000 -25200 0 MST} + {1867914000 -21600 1 MDT} + {1888473600 -25200 0 MST} + {1899363600 -21600 1 MDT} + {1919923200 -25200 0 MST} + {1930813200 -21600 1 MDT} + {1951372800 -25200 0 MST} + {1962867600 -21600 1 MDT} + {1983427200 -25200 0 MST} + {1994317200 -21600 1 MDT} + {2014876800 -25200 0 MST} + {2025766800 -21600 1 MDT} + {2046326400 -25200 0 MST} + {2057216400 -21600 1 MDT} + {2077776000 -25200 0 MST} + {2088666000 -21600 1 MDT} + {2109225600 -25200 0 MST} + {2120115600 -21600 1 MDT} + {2140675200 -25200 0 MST} + {2152170000 -21600 1 MDT} + {2172729600 -25200 0 MST} + {2183619600 -21600 1 MDT} + {2204179200 -25200 0 MST} + {2215069200 -21600 1 MDT} + {2235628800 -25200 0 MST} + {2246518800 -21600 1 MDT} + {2267078400 -25200 0 MST} + {2277968400 -21600 1 MDT} + {2298528000 -25200 0 MST} + {2309418000 -21600 1 MDT} + {2329977600 -25200 0 MST} + {2341472400 -21600 1 MDT} + {2362032000 -25200 0 MST} + {2372922000 -21600 1 MDT} + {2393481600 -25200 0 MST} + {2404371600 -21600 1 MDT} + {2424931200 -25200 0 MST} + {2435821200 -21600 1 MDT} + {2456380800 -25200 0 MST} + {2467270800 -21600 1 MDT} + {2487830400 -25200 0 MST} + {2499325200 -21600 1 MDT} + {2519884800 -25200 0 MST} + {2530774800 -21600 1 MDT} + {2551334400 -25200 0 MST} + {2562224400 -21600 1 MDT} + {2582784000 -25200 0 MST} + {2593674000 -21600 1 MDT} + {2614233600 -25200 0 MST} + {2625123600 -21600 1 MDT} + {2645683200 -25200 0 MST} + {2656573200 -21600 1 MDT} + {2677132800 -25200 0 MST} + {2688627600 -21600 1 MDT} + {2709187200 -25200 0 MST} + {2720077200 -21600 1 MDT} + {2740636800 -25200 0 MST} + {2751526800 -21600 1 MDT} + {2772086400 -25200 0 MST} + {2782976400 -21600 1 MDT} + {2803536000 -25200 0 MST} + {2814426000 -21600 1 MDT} + {2834985600 -25200 0 MST} + {2846480400 -21600 1 MDT} + {2867040000 -25200 0 MST} + {2877930000 -21600 1 MDT} + {2898489600 -25200 0 MST} + {2909379600 -21600 1 MDT} + {2929939200 -25200 0 MST} + {2940829200 -21600 1 MDT} + {2961388800 -25200 0 MST} + {2972278800 -21600 1 MDT} + {2992838400 -25200 0 MST} + {3003728400 -21600 1 MDT} + {3024288000 -25200 0 MST} + {3035782800 -21600 1 MDT} + {3056342400 -25200 0 MST} + {3067232400 -21600 1 MDT} + {3087792000 -25200 0 MST} + {3098682000 -21600 1 MDT} + {3119241600 -25200 0 MST} + {3130131600 -21600 1 MDT} + {3150691200 -25200 0 MST} + {3161581200 -21600 1 MDT} + {3182140800 -25200 0 MST} + {3193030800 -21600 1 MDT} + {3213590400 -25200 0 MST} + {3225085200 -21600 1 MDT} + {3245644800 -25200 0 MST} + {3256534800 -21600 1 MDT} + {3277094400 -25200 0 MST} + {3287984400 -21600 1 MDT} + {3308544000 -25200 0 MST} + {3319434000 -21600 1 MDT} + {3339993600 -25200 0 MST} + {3350883600 -21600 1 MDT} + {3371443200 -25200 0 MST} + {3382938000 -21600 1 MDT} + {3403497600 -25200 0 MST} + {3414387600 -21600 1 MDT} + {3434947200 -25200 0 MST} + {3445837200 -21600 1 MDT} + {3466396800 -25200 0 MST} + {3477286800 -21600 1 MDT} + {3497846400 -25200 0 MST} + {3508736400 -21600 1 MDT} + {3529296000 -25200 0 MST} + {3540186000 -21600 1 MDT} + {3560745600 -25200 0 MST} + {3572240400 -21600 1 MDT} + {3592800000 -25200 0 MST} + {3603690000 -21600 1 MDT} + {3624249600 -25200 0 MST} + {3635139600 -21600 1 MDT} + {3655699200 -25200 0 MST} + {3666589200 -21600 1 MDT} + {3687148800 -25200 0 MST} + {3698038800 -21600 1 MDT} + {3718598400 -25200 0 MST} + {3730093200 -21600 1 MDT} + {3750652800 -25200 0 MST} + {3761542800 -21600 1 MDT} + {3782102400 -25200 0 MST} + {3792992400 -21600 1 MDT} + {3813552000 -25200 0 MST} + {3824442000 -21600 1 MDT} + {3845001600 -25200 0 MST} + {3855891600 -21600 1 MDT} + {3876451200 -25200 0 MST} + {3887341200 -21600 1 MDT} + {3907900800 -25200 0 MST} + {3919395600 -21600 1 MDT} + {3939955200 -25200 0 MST} + {3950845200 -21600 1 MDT} + {3971404800 -25200 0 MST} + {3982294800 -21600 1 MDT} + {4002854400 -25200 0 MST} + {4013744400 -21600 1 MDT} + {4034304000 -25200 0 MST} + {4045194000 -21600 1 MDT} + {4065753600 -25200 0 MST} + {4076643600 -21600 1 MDT} + {4097203200 -25200 0 MST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Antarctica/Casey b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Antarctica/Casey new file mode 100644 index 00000000..56d5df7c --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Antarctica/Casey @@ -0,0 +1,10 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Antarctica/Casey) { + {-9223372036854775808 0 0 zzz} + {-31536000 28800 0 AWST} + {1255802400 39600 0 CAST} + {1267714800 28800 0 AWST} + {1319738400 39600 0 CAST} + {1329843600 28800 0 AWST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Antarctica/Davis b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Antarctica/Davis new file mode 100644 index 00000000..2762d2fb --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Antarctica/Davis @@ -0,0 +1,12 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Antarctica/Davis) { + {-9223372036854775808 0 0 zzz} + {-409190400 25200 0 DAVT} + {-163062000 0 0 zzz} + {-28857600 25200 0 DAVT} + {1255806000 18000 0 DAVT} + {1268251200 25200 0 DAVT} + {1319742000 18000 0 DAVT} + {1329854400 25200 0 DAVT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Antarctica/DumontDUrville b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Antarctica/DumontDUrville new file mode 100644 index 00000000..41dc1e3e --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Antarctica/DumontDUrville @@ -0,0 +1,8 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Antarctica/DumontDUrville) { + {-9223372036854775808 0 0 zzz} + {-725846400 36000 0 PMT} + {-566992800 0 0 zzz} + {-415497600 36000 0 DDUT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Antarctica/Macquarie b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Antarctica/Macquarie new file mode 100644 index 00000000..07ddff6a --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Antarctica/Macquarie @@ -0,0 +1,97 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Antarctica/Macquarie) { + {-9223372036854775808 0 0 zzz} + {-2214259200 36000 0 AEST} + {-1680508800 39600 1 AEDT} + {-1669892400 39600 0 AEDT} + {-1665392400 36000 0 AEST} + {-1601719200 0 0 zzz} + {-94730400 36000 0 AEST} + {-71136000 39600 1 AEDT} + {-55411200 36000 0 AEST} + {-37267200 39600 1 AEDT} + {-25776000 36000 0 AEST} + {-5817600 39600 1 AEDT} + {5673600 36000 0 AEST} + {25632000 39600 1 AEDT} + {37728000 36000 0 AEST} + {57686400 39600 1 AEDT} + {67968000 36000 0 AEST} + {89136000 39600 1 AEDT} + {100022400 36000 0 AEST} + {120585600 39600 1 AEDT} + {131472000 36000 0 AEST} + {152035200 39600 1 AEDT} + {162921600 36000 0 AEST} + {183484800 39600 1 AEDT} + {194976000 36000 0 AEST} + {215539200 39600 1 AEDT} + {226425600 36000 0 AEST} + {246988800 39600 1 AEDT} + {257875200 36000 0 AEST} + {278438400 39600 1 AEDT} + {289324800 36000 0 AEST} + {309888000 39600 1 AEDT} + {320774400 36000 0 AEST} + {341337600 39600 1 AEDT} + {352224000 36000 0 AEST} + {372787200 39600 1 AEDT} + {386092800 36000 0 AEST} + {404841600 39600 1 AEDT} + {417542400 36000 0 AEST} + {436291200 39600 1 AEDT} + {447177600 36000 0 AEST} + {467740800 39600 1 AEDT} + {478627200 36000 0 AEST} + {499190400 39600 1 AEDT} + {510076800 36000 0 AEST} + {530035200 39600 1 AEDT} + {542736000 36000 0 AEST} + {562089600 39600 1 AEDT} + {574790400 36000 0 AEST} + {594144000 39600 1 AEDT} + {606240000 36000 0 AEST} + {625593600 39600 1 AEDT} + {637689600 36000 0 AEST} + {657043200 39600 1 AEDT} + {670348800 36000 0 AEST} + {686678400 39600 1 AEDT} + {701798400 36000 0 AEST} + {718128000 39600 1 AEDT} + {733248000 36000 0 AEST} + {749577600 39600 1 AEDT} + {764697600 36000 0 AEST} + {781027200 39600 1 AEDT} + {796147200 36000 0 AEST} + {812476800 39600 1 AEDT} + {828201600 36000 0 AEST} + {844531200 39600 1 AEDT} + {859651200 36000 0 AEST} + {875980800 39600 1 AEDT} + {891100800 36000 0 AEST} + {907430400 39600 1 AEDT} + {922550400 36000 0 AEST} + {938880000 39600 1 AEDT} + {954000000 36000 0 AEST} + {967305600 39600 1 AEDT} + {985449600 36000 0 AEST} + {1002384000 39600 1 AEDT} + {1017504000 36000 0 AEST} + {1033833600 39600 1 AEDT} + {1048953600 36000 0 AEST} + {1065283200 39600 1 AEDT} + {1080403200 36000 0 AEST} + {1096732800 39600 1 AEDT} + {1111852800 36000 0 AEST} + {1128182400 39600 1 AEDT} + {1143907200 36000 0 AEST} + {1159632000 39600 1 AEDT} + {1174752000 36000 0 AEST} + {1191686400 39600 1 AEDT} + {1207411200 36000 0 AEST} + {1223136000 39600 1 AEDT} + {1238860800 36000 0 AEST} + {1254585600 39600 1 AEDT} + {1270310400 39600 0 MIST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Antarctica/Mawson b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Antarctica/Mawson new file mode 100644 index 00000000..ba03ba1c --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Antarctica/Mawson @@ -0,0 +1,7 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Antarctica/Mawson) { + {-9223372036854775808 0 0 zzz} + {-501206400 21600 0 MAWT} + {1255809600 18000 0 MAWT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Antarctica/McMurdo b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Antarctica/McMurdo new file mode 100644 index 00000000..3b29ba1d --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Antarctica/McMurdo @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Pacific/Auckland)]} { + LoadTimeZoneFile Pacific/Auckland +} +set TZData(:Antarctica/McMurdo) $TZData(:Pacific/Auckland) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Antarctica/Palmer b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Antarctica/Palmer new file mode 100644 index 00000000..2c43861c --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Antarctica/Palmer @@ -0,0 +1,85 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Antarctica/Palmer) { + {-9223372036854775808 0 0 zzz} + {-157766400 -14400 0 ART} + {-152654400 -14400 0 ART} + {-132955200 -10800 1 ARST} + {-121122000 -14400 0 ART} + {-101419200 -10800 1 ARST} + {-86821200 -14400 0 ART} + {-71092800 -10800 1 ARST} + {-54766800 -14400 0 ART} + {-39038400 -10800 1 ARST} + {-23317200 -14400 0 ART} + {-7588800 -10800 0 ART} + {128142000 -7200 1 ARST} + {136605600 -10800 0 ART} + {389070000 -14400 0 CLT} + {403070400 -10800 1 CLST} + {416372400 -14400 0 CLT} + {434520000 -10800 1 CLST} + {447822000 -14400 0 CLT} + {466574400 -10800 1 CLST} + {479271600 -14400 0 CLT} + {498024000 -10800 1 CLST} + {510721200 -14400 0 CLT} + {529473600 -10800 1 CLST} + {545194800 -14400 0 CLT} + {560923200 -10800 1 CLST} + {574225200 -14400 0 CLT} + {592372800 -10800 1 CLST} + {605674800 -14400 0 CLT} + {624427200 -10800 1 CLST} + {637124400 -14400 0 CLT} + {653457600 -10800 1 CLST} + {668574000 -14400 0 CLT} + {687326400 -10800 1 CLST} + {700628400 -14400 0 CLT} + {718776000 -10800 1 CLST} + {732078000 -14400 0 CLT} + {750225600 -10800 1 CLST} + {763527600 -14400 0 CLT} + {781675200 -10800 1 CLST} + {794977200 -14400 0 CLT} + {813729600 -10800 1 CLST} + {826426800 -14400 0 CLT} + {845179200 -10800 1 CLST} + {859690800 -14400 0 CLT} + {876628800 -10800 1 CLST} + {889930800 -14400 0 CLT} + {906868800 -10800 1 CLST} + {923194800 -14400 0 CLT} + {939528000 -10800 1 CLST} + {952830000 -14400 0 CLT} + {971582400 -10800 1 CLST} + {984279600 -14400 0 CLT} + {1003032000 -10800 1 CLST} + {1015729200 -14400 0 CLT} + {1034481600 -10800 1 CLST} + {1047178800 -14400 0 CLT} + {1065931200 -10800 1 CLST} + {1079233200 -14400 0 CLT} + {1097380800 -10800 1 CLST} + {1110682800 -14400 0 CLT} + {1128830400 -10800 1 CLST} + {1142132400 -14400 0 CLT} + {1160884800 -10800 1 CLST} + {1173582000 -14400 0 CLT} + {1192334400 -10800 1 CLST} + {1206846000 -14400 0 CLT} + {1223784000 -10800 1 CLST} + {1237086000 -14400 0 CLT} + {1255233600 -10800 1 CLST} + {1270350000 -14400 0 CLT} + {1286683200 -10800 1 CLST} + {1304823600 -14400 0 CLT} + {1313899200 -10800 1 CLST} + {1335668400 -14400 0 CLT} + {1346558400 -10800 1 CLST} + {1367118000 -14400 0 CLT} + {1378612800 -10800 1 CLST} + {1398567600 -14400 0 CLT} + {1410062400 -10800 1 CLST} + {1430017200 -10800 0 CLT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Antarctica/Rothera b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Antarctica/Rothera new file mode 100644 index 00000000..24d7f3e1 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Antarctica/Rothera @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Antarctica/Rothera) { + {-9223372036854775808 0 0 zzz} + {218246400 -10800 0 ROTT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Antarctica/South_Pole b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Antarctica/South_Pole new file mode 100644 index 00000000..544bde47 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Antarctica/South_Pole @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Pacific/Auckland)]} { + LoadTimeZoneFile Pacific/Auckland +} +set TZData(:Antarctica/South_Pole) $TZData(:Pacific/Auckland) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Antarctica/Syowa b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Antarctica/Syowa new file mode 100644 index 00000000..4d046b56 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Antarctica/Syowa @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Antarctica/Syowa) { + {-9223372036854775808 0 0 zzz} + {-407808000 10800 0 SYOT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Antarctica/Troll b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Antarctica/Troll new file mode 100644 index 00000000..7d2b042b --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Antarctica/Troll @@ -0,0 +1,196 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Antarctica/Troll) { + {-9223372036854775808 0 0 zzz} + {1108166400 0 0 UTC} + {1111885200 7200 1 CEST} + {1130634000 0 0 UTC} + {1143334800 7200 1 CEST} + {1162083600 0 0 UTC} + {1174784400 7200 1 CEST} + {1193533200 0 0 UTC} + {1206838800 7200 1 CEST} + {1224982800 0 0 UTC} + {1238288400 7200 1 CEST} + {1256432400 0 0 UTC} + {1269738000 7200 1 CEST} + {1288486800 0 0 UTC} + {1301187600 7200 1 CEST} + {1319936400 0 0 UTC} + {1332637200 7200 1 CEST} + {1351386000 0 0 UTC} + {1364691600 7200 1 CEST} + {1382835600 0 0 UTC} + {1396141200 7200 1 CEST} + {1414285200 0 0 UTC} + {1427590800 7200 1 CEST} + {1445734800 0 0 UTC} + {1459040400 7200 1 CEST} + {1477789200 0 0 UTC} + {1490490000 7200 1 CEST} + {1509238800 0 0 UTC} + {1521939600 7200 1 CEST} + {1540688400 0 0 UTC} + {1553994000 7200 1 CEST} + {1572138000 0 0 UTC} + {1585443600 7200 1 CEST} + {1603587600 0 0 UTC} + {1616893200 7200 1 CEST} + {1635642000 0 0 UTC} + {1648342800 7200 1 CEST} + {1667091600 0 0 UTC} + {1679792400 7200 1 CEST} + {1698541200 0 0 UTC} + {1711846800 7200 1 CEST} + {1729990800 0 0 UTC} + {1743296400 7200 1 CEST} + {1761440400 0 0 UTC} + {1774746000 7200 1 CEST} + {1792890000 0 0 UTC} + {1806195600 7200 1 CEST} + {1824944400 0 0 UTC} + {1837645200 7200 1 CEST} + {1856394000 0 0 UTC} + {1869094800 7200 1 CEST} + {1887843600 0 0 UTC} + {1901149200 7200 1 CEST} + {1919293200 0 0 UTC} + {1932598800 7200 1 CEST} + {1950742800 0 0 UTC} + {1964048400 7200 1 CEST} + {1982797200 0 0 UTC} + {1995498000 7200 1 CEST} + {2014246800 0 0 UTC} + {2026947600 7200 1 CEST} + {2045696400 0 0 UTC} + {2058397200 7200 1 CEST} + {2077146000 0 0 UTC} + {2090451600 7200 1 CEST} + {2108595600 0 0 UTC} + {2121901200 7200 1 CEST} + {2140045200 0 0 UTC} + {2153350800 7200 1 CEST} + {2172099600 0 0 UTC} + {2184800400 7200 1 CEST} + {2203549200 0 0 UTC} + {2216250000 7200 1 CEST} + {2234998800 0 0 UTC} + {2248304400 7200 1 CEST} + {2266448400 0 0 UTC} + {2279754000 7200 1 CEST} + {2297898000 0 0 UTC} + {2311203600 7200 1 CEST} + {2329347600 0 0 UTC} + {2342653200 7200 1 CEST} + {2361402000 0 0 UTC} + {2374102800 7200 1 CEST} + {2392851600 0 0 UTC} + {2405552400 7200 1 CEST} + {2424301200 0 0 UTC} + {2437606800 7200 1 CEST} + {2455750800 0 0 UTC} + {2469056400 7200 1 CEST} + {2487200400 0 0 UTC} + {2500506000 7200 1 CEST} + {2519254800 0 0 UTC} + {2531955600 7200 1 CEST} + {2550704400 0 0 UTC} + {2563405200 7200 1 CEST} + {2582154000 0 0 UTC} + {2595459600 7200 1 CEST} + {2613603600 0 0 UTC} + {2626909200 7200 1 CEST} + {2645053200 0 0 UTC} + {2658358800 7200 1 CEST} + {2676502800 0 0 UTC} + {2689808400 7200 1 CEST} + {2708557200 0 0 UTC} + {2721258000 7200 1 CEST} + {2740006800 0 0 UTC} + {2752707600 7200 1 CEST} + {2771456400 0 0 UTC} + {2784762000 7200 1 CEST} + {2802906000 0 0 UTC} + {2816211600 7200 1 CEST} + {2834355600 0 0 UTC} + {2847661200 7200 1 CEST} + {2866410000 0 0 UTC} + {2879110800 7200 1 CEST} + {2897859600 0 0 UTC} + {2910560400 7200 1 CEST} + {2929309200 0 0 UTC} + {2942010000 7200 1 CEST} + {2960758800 0 0 UTC} + {2974064400 7200 1 CEST} + {2992208400 0 0 UTC} + {3005514000 7200 1 CEST} + {3023658000 0 0 UTC} + {3036963600 7200 1 CEST} + {3055712400 0 0 UTC} + {3068413200 7200 1 CEST} + {3087162000 0 0 UTC} + {3099862800 7200 1 CEST} + {3118611600 0 0 UTC} + {3131917200 7200 1 CEST} + {3150061200 0 0 UTC} + {3163366800 7200 1 CEST} + {3181510800 0 0 UTC} + {3194816400 7200 1 CEST} + {3212960400 0 0 UTC} + {3226266000 7200 1 CEST} + {3245014800 0 0 UTC} + {3257715600 7200 1 CEST} + {3276464400 0 0 UTC} + {3289165200 7200 1 CEST} + {3307914000 0 0 UTC} + {3321219600 7200 1 CEST} + {3339363600 0 0 UTC} + {3352669200 7200 1 CEST} + {3370813200 0 0 UTC} + {3384118800 7200 1 CEST} + {3402867600 0 0 UTC} + {3415568400 7200 1 CEST} + {3434317200 0 0 UTC} + {3447018000 7200 1 CEST} + {3465766800 0 0 UTC} + {3479072400 7200 1 CEST} + {3497216400 0 0 UTC} + {3510522000 7200 1 CEST} + {3528666000 0 0 UTC} + {3541971600 7200 1 CEST} + {3560115600 0 0 UTC} + {3573421200 7200 1 CEST} + {3592170000 0 0 UTC} + {3604870800 7200 1 CEST} + {3623619600 0 0 UTC} + {3636320400 7200 1 CEST} + {3655069200 0 0 UTC} + {3668374800 7200 1 CEST} + {3686518800 0 0 UTC} + {3699824400 7200 1 CEST} + {3717968400 0 0 UTC} + {3731274000 7200 1 CEST} + {3750022800 0 0 UTC} + {3762723600 7200 1 CEST} + {3781472400 0 0 UTC} + {3794173200 7200 1 CEST} + {3812922000 0 0 UTC} + {3825622800 7200 1 CEST} + {3844371600 0 0 UTC} + {3857677200 7200 1 CEST} + {3875821200 0 0 UTC} + {3889126800 7200 1 CEST} + {3907270800 0 0 UTC} + {3920576400 7200 1 CEST} + {3939325200 0 0 UTC} + {3952026000 7200 1 CEST} + {3970774800 0 0 UTC} + {3983475600 7200 1 CEST} + {4002224400 0 0 UTC} + {4015530000 7200 1 CEST} + {4033674000 0 0 UTC} + {4046979600 7200 1 CEST} + {4065123600 0 0 UTC} + {4078429200 7200 1 CEST} + {4096573200 0 0 UTC} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Antarctica/Vostok b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Antarctica/Vostok new file mode 100644 index 00000000..f846f655 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Antarctica/Vostok @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Antarctica/Vostok) { + {-9223372036854775808 0 0 zzz} + {-380073600 21600 0 VOST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Arctic/Longyearbyen b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Arctic/Longyearbyen new file mode 100644 index 00000000..51f83dca --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Arctic/Longyearbyen @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Europe/Oslo)]} { + LoadTimeZoneFile Europe/Oslo +} +set TZData(:Arctic/Longyearbyen) $TZData(:Europe/Oslo) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Aden b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Aden new file mode 100644 index 00000000..5c5515e1 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Aden @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Asia/Riyadh)]} { + LoadTimeZoneFile Asia/Riyadh +} +set TZData(:Asia/Aden) $TZData(:Asia/Riyadh) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Almaty b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Almaty new file mode 100644 index 00000000..68dee299 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Almaty @@ -0,0 +1,56 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Almaty) { + {-9223372036854775808 18468 0 LMT} + {-1441170468 18000 0 ALMT} + {-1247547600 21600 0 ALMT} + {354909600 25200 1 ALMST} + {370717200 21600 0 ALMT} + {386445600 25200 1 ALMST} + {402253200 21600 0 ALMT} + {417981600 25200 1 ALMST} + {433789200 21600 0 ALMT} + {449604000 25200 1 ALMST} + {465336000 21600 0 ALMT} + {481060800 25200 1 ALMST} + {496785600 21600 0 ALMT} + {512510400 25200 1 ALMST} + {528235200 21600 0 ALMT} + {543960000 25200 1 ALMST} + {559684800 21600 0 ALMT} + {575409600 25200 1 ALMST} + {591134400 21600 0 ALMT} + {606859200 25200 1 ALMST} + {622584000 21600 0 ALMT} + {638308800 25200 1 ALMST} + {654638400 21600 0 ALMT} + {662666400 21600 0 ALMT} + {694202400 21600 0 ALMT} + {701802000 25200 1 ALMST} + {717523200 21600 0 ALMT} + {733262400 25200 1 ALMST} + {748987200 21600 0 ALMT} + {764712000 25200 1 ALMST} + {780436800 21600 0 ALMT} + {796161600 25200 1 ALMST} + {811886400 21600 0 ALMT} + {828216000 25200 1 ALMST} + {846360000 21600 0 ALMT} + {859665600 25200 1 ALMST} + {877809600 21600 0 ALMT} + {891115200 25200 1 ALMST} + {909259200 21600 0 ALMT} + {922564800 25200 1 ALMST} + {941313600 21600 0 ALMT} + {954014400 25200 1 ALMST} + {972763200 21600 0 ALMT} + {985464000 25200 1 ALMST} + {1004212800 21600 0 ALMT} + {1017518400 25200 1 ALMST} + {1035662400 21600 0 ALMT} + {1048968000 25200 1 ALMST} + {1067112000 21600 0 ALMT} + {1080417600 25200 1 ALMST} + {1099166400 21600 0 ALMT} + {1110823200 21600 0 ALMT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Amman b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Amman new file mode 100644 index 00000000..c2f69041 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Amman @@ -0,0 +1,246 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Amman) { + {-9223372036854775808 8624 0 LMT} + {-1230776624 7200 0 EET} + {108165600 10800 1 EEST} + {118270800 7200 0 EET} + {136591200 10800 1 EEST} + {149806800 7200 0 EET} + {168127200 10800 1 EEST} + {181342800 7200 0 EET} + {199749600 10800 1 EEST} + {215643600 7200 0 EET} + {231285600 10800 1 EEST} + {244501200 7200 0 EET} + {262735200 10800 1 EEST} + {275950800 7200 0 EET} + {481154400 10800 1 EEST} + {496962000 7200 0 EET} + {512949600 10800 1 EEST} + {528670800 7200 0 EET} + {544399200 10800 1 EEST} + {560120400 7200 0 EET} + {575848800 10800 1 EEST} + {592174800 7200 0 EET} + {610581600 10800 1 EEST} + {623624400 7200 0 EET} + {641167200 10800 1 EEST} + {655074000 7200 0 EET} + {671839200 10800 1 EEST} + {685918800 7200 0 EET} + {702856800 10800 1 EEST} + {717973200 7200 0 EET} + {733701600 10800 1 EEST} + {749422800 7200 0 EET} + {765151200 10800 1 EEST} + {779662800 7200 0 EET} + {797205600 10800 1 EEST} + {811116000 7200 0 EET} + {828655200 10800 1 EEST} + {843170400 7200 0 EET} + {860104800 10800 1 EEST} + {874620000 7200 0 EET} + {891554400 10800 1 EEST} + {906069600 7200 0 EET} + {930780000 10800 1 EEST} + {938124000 7200 0 EET} + {954367200 10800 1 EEST} + {970178400 7200 0 EET} + {985816800 10800 1 EEST} + {1001628000 7200 0 EET} + {1017352800 10800 1 EEST} + {1033077600 7200 0 EET} + {1048802400 10800 1 EEST} + {1066946400 7200 0 EET} + {1080252000 10800 1 EEST} + {1097791200 7200 0 EET} + {1112306400 10800 1 EEST} + {1128031200 7200 0 EET} + {1143756000 10800 1 EEST} + {1161900000 7200 0 EET} + {1175205600 10800 1 EEST} + {1193349600 7200 0 EET} + {1206655200 10800 1 EEST} + {1225404000 7200 0 EET} + {1238104800 10800 1 EEST} + {1256853600 7200 0 EET} + {1269554400 10800 1 EEST} + {1288303200 7200 0 EET} + {1301608800 10800 1 EEST} + {1319752800 7200 0 EET} + {1333058400 10800 1 EEST} + {1387486800 7200 0 EET} + {1395957600 10800 1 EEST} + {1414706400 7200 0 EET} + {1427407200 10800 1 EEST} + {1446156000 7200 0 EET} + {1459461600 10800 1 EEST} + {1477605600 7200 0 EET} + {1490911200 10800 1 EEST} + {1509055200 7200 0 EET} + {1522360800 10800 1 EEST} + {1540504800 7200 0 EET} + {1553810400 10800 1 EEST} + {1571954400 7200 0 EET} + {1585260000 10800 1 EEST} + {1604008800 7200 0 EET} + {1616709600 10800 1 EEST} + {1635458400 7200 0 EET} + {1648764000 10800 1 EEST} + {1666908000 7200 0 EET} + {1680213600 10800 1 EEST} + {1698357600 7200 0 EET} + {1711663200 10800 1 EEST} + {1729807200 7200 0 EET} + {1743112800 10800 1 EEST} + {1761861600 7200 0 EET} + {1774562400 10800 1 EEST} + {1793311200 7200 0 EET} + {1806012000 10800 1 EEST} + {1824760800 7200 0 EET} + {1838066400 10800 1 EEST} + {1856210400 7200 0 EET} + {1869516000 10800 1 EEST} + {1887660000 7200 0 EET} + {1900965600 10800 1 EEST} + {1919109600 7200 0 EET} + {1932415200 10800 1 EEST} + {1951164000 7200 0 EET} + {1963864800 10800 1 EEST} + {1982613600 7200 0 EET} + {1995919200 10800 1 EEST} + {2014063200 7200 0 EET} + {2027368800 10800 1 EEST} + {2045512800 7200 0 EET} + {2058818400 10800 1 EEST} + {2076962400 7200 0 EET} + {2090268000 10800 1 EEST} + {2109016800 7200 0 EET} + {2121717600 10800 1 EEST} + {2140466400 7200 0 EET} + {2153167200 10800 1 EEST} + {2171916000 7200 0 EET} + {2185221600 10800 1 EEST} + {2203365600 7200 0 EET} + {2216671200 10800 1 EEST} + {2234815200 7200 0 EET} + {2248120800 10800 1 EEST} + {2266264800 7200 0 EET} + {2279570400 10800 1 EEST} + {2298319200 7200 0 EET} + {2311020000 10800 1 EEST} + {2329768800 7200 0 EET} + {2343074400 10800 1 EEST} + {2361218400 7200 0 EET} + {2374524000 10800 1 EEST} + {2392668000 7200 0 EET} + {2405973600 10800 1 EEST} + {2424117600 7200 0 EET} + {2437423200 10800 1 EEST} + {2455567200 7200 0 EET} + {2468872800 10800 1 EEST} + {2487621600 7200 0 EET} + {2500322400 10800 1 EEST} + {2519071200 7200 0 EET} + {2532376800 10800 1 EEST} + {2550520800 7200 0 EET} + {2563826400 10800 1 EEST} + {2581970400 7200 0 EET} + {2595276000 10800 1 EEST} + {2613420000 7200 0 EET} + {2626725600 10800 1 EEST} + {2645474400 7200 0 EET} + {2658175200 10800 1 EEST} + {2676924000 7200 0 EET} + {2689624800 10800 1 EEST} + {2708373600 7200 0 EET} + {2721679200 10800 1 EEST} + {2739823200 7200 0 EET} + {2753128800 10800 1 EEST} + {2771272800 7200 0 EET} + {2784578400 10800 1 EEST} + {2802722400 7200 0 EET} + {2816028000 10800 1 EEST} + {2834776800 7200 0 EET} + {2847477600 10800 1 EEST} + {2866226400 7200 0 EET} + {2879532000 10800 1 EEST} + {2897676000 7200 0 EET} + {2910981600 10800 1 EEST} + {2929125600 7200 0 EET} + {2942431200 10800 1 EEST} + {2960575200 7200 0 EET} + {2973880800 10800 1 EEST} + {2992629600 7200 0 EET} + {3005330400 10800 1 EEST} + {3024079200 7200 0 EET} + {3036780000 10800 1 EEST} + {3055528800 7200 0 EET} + {3068834400 10800 1 EEST} + {3086978400 7200 0 EET} + {3100284000 10800 1 EEST} + {3118428000 7200 0 EET} + {3131733600 10800 1 EEST} + {3149877600 7200 0 EET} + {3163183200 10800 1 EEST} + {3181932000 7200 0 EET} + {3194632800 10800 1 EEST} + {3213381600 7200 0 EET} + {3226687200 10800 1 EEST} + {3244831200 7200 0 EET} + {3258136800 10800 1 EEST} + {3276280800 7200 0 EET} + {3289586400 10800 1 EEST} + {3307730400 7200 0 EET} + {3321036000 10800 1 EEST} + {3339180000 7200 0 EET} + {3352485600 10800 1 EEST} + {3371234400 7200 0 EET} + {3383935200 10800 1 EEST} + {3402684000 7200 0 EET} + {3415989600 10800 1 EEST} + {3434133600 7200 0 EET} + {3447439200 10800 1 EEST} + {3465583200 7200 0 EET} + {3478888800 10800 1 EEST} + {3497032800 7200 0 EET} + {3510338400 10800 1 EEST} + {3529087200 7200 0 EET} + {3541788000 10800 1 EEST} + {3560536800 7200 0 EET} + {3573237600 10800 1 EEST} + {3591986400 7200 0 EET} + {3605292000 10800 1 EEST} + {3623436000 7200 0 EET} + {3636741600 10800 1 EEST} + {3654885600 7200 0 EET} + {3668191200 10800 1 EEST} + {3686335200 7200 0 EET} + {3699640800 10800 1 EEST} + {3718389600 7200 0 EET} + {3731090400 10800 1 EEST} + {3749839200 7200 0 EET} + {3763144800 10800 1 EEST} + {3781288800 7200 0 EET} + {3794594400 10800 1 EEST} + {3812738400 7200 0 EET} + {3826044000 10800 1 EEST} + {3844188000 7200 0 EET} + {3857493600 10800 1 EEST} + {3876242400 7200 0 EET} + {3888943200 10800 1 EEST} + {3907692000 7200 0 EET} + {3920392800 10800 1 EEST} + {3939141600 7200 0 EET} + {3952447200 10800 1 EEST} + {3970591200 7200 0 EET} + {3983896800 10800 1 EEST} + {4002040800 7200 0 EET} + {4015346400 10800 1 EEST} + {4033490400 7200 0 EET} + {4046796000 10800 1 EEST} + {4065544800 7200 0 EET} + {4078245600 10800 1 EEST} + {4096994400 7200 0 EET} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Anadyr b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Anadyr new file mode 100644 index 00000000..50ace502 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Anadyr @@ -0,0 +1,72 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Anadyr) { + {-9223372036854775808 42596 0 LMT} + {-1441194596 43200 0 ANAT} + {-1247572800 46800 0 ANAMMTT} + {354884400 50400 1 ANAST} + {370692000 46800 0 ANAT} + {386420400 43200 0 ANAMMTT} + {386424000 46800 1 ANAST} + {402231600 43200 0 ANAT} + {417960000 46800 1 ANAST} + {433767600 43200 0 ANAT} + {449582400 46800 1 ANAST} + {465314400 43200 0 ANAT} + {481039200 46800 1 ANAST} + {496764000 43200 0 ANAT} + {512488800 46800 1 ANAST} + {528213600 43200 0 ANAT} + {543938400 46800 1 ANAST} + {559663200 43200 0 ANAT} + {575388000 46800 1 ANAST} + {591112800 43200 0 ANAT} + {606837600 46800 1 ANAST} + {622562400 43200 0 ANAT} + {638287200 46800 1 ANAST} + {654616800 43200 0 ANAT} + {670341600 39600 0 ANAMMTT} + {670345200 43200 1 ANAST} + {686070000 39600 0 ANAT} + {695746800 43200 0 ANAMMTT} + {701780400 46800 1 ANAST} + {717501600 43200 0 ANAT} + {733240800 46800 1 ANAST} + {748965600 43200 0 ANAT} + {764690400 46800 1 ANAST} + {780415200 43200 0 ANAT} + {796140000 46800 1 ANAST} + {811864800 43200 0 ANAT} + {828194400 46800 1 ANAST} + {846338400 43200 0 ANAT} + {859644000 46800 1 ANAST} + {877788000 43200 0 ANAT} + {891093600 46800 1 ANAST} + {909237600 43200 0 ANAT} + {922543200 46800 1 ANAST} + {941292000 43200 0 ANAT} + {953992800 46800 1 ANAST} + {972741600 43200 0 ANAT} + {985442400 46800 1 ANAST} + {1004191200 43200 0 ANAT} + {1017496800 46800 1 ANAST} + {1035640800 43200 0 ANAT} + {1048946400 46800 1 ANAST} + {1067090400 43200 0 ANAT} + {1080396000 46800 1 ANAST} + {1099144800 43200 0 ANAT} + {1111845600 46800 1 ANAST} + {1130594400 43200 0 ANAT} + {1143295200 46800 1 ANAST} + {1162044000 43200 0 ANAT} + {1174744800 46800 1 ANAST} + {1193493600 43200 0 ANAT} + {1206799200 46800 1 ANAST} + {1224943200 43200 0 ANAT} + {1238248800 46800 1 ANAST} + {1256392800 43200 0 ANAT} + {1269698400 39600 0 ANAMMTT} + {1269702000 43200 1 ANAST} + {1288450800 39600 0 ANAT} + {1301151600 43200 0 ANAT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Aqtau b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Aqtau new file mode 100644 index 00000000..11e89a26 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Aqtau @@ -0,0 +1,58 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Aqtau) { + {-9223372036854775808 12064 0 LMT} + {-1441164064 14400 0 FORT} + {-1247544000 18000 0 FORT} + {-220942800 18000 0 SHET} + {370724400 21600 0 SHET} + {386445600 18000 0 SHET} + {386449200 21600 1 SHEST} + {402256800 18000 0 SHET} + {417985200 21600 1 SHEST} + {433792800 18000 0 SHET} + {449607600 21600 1 SHEST} + {465339600 18000 0 SHET} + {481064400 21600 1 SHEST} + {496789200 18000 0 SHET} + {512514000 21600 1 SHEST} + {528238800 18000 0 SHET} + {543963600 21600 1 SHEST} + {559688400 18000 0 SHET} + {575413200 21600 1 SHEST} + {591138000 18000 0 SHET} + {606862800 21600 1 SHEST} + {622587600 18000 0 SHET} + {638312400 21600 1 SHEST} + {654642000 18000 0 SHET} + {662670000 18000 0 SHET} + {692823600 18000 0 AQTT} + {701805600 21600 1 AQTST} + {717526800 18000 0 AQTT} + {733266000 21600 1 AQTST} + {748990800 18000 0 AQTT} + {764715600 21600 1 AQTST} + {780440400 18000 0 AQTT} + {796165200 14400 0 AQTT} + {796168800 18000 1 AQTST} + {811893600 14400 0 AQTT} + {828223200 18000 1 AQTST} + {846367200 14400 0 AQTT} + {859672800 18000 1 AQTST} + {877816800 14400 0 AQTT} + {891122400 18000 1 AQTST} + {909266400 14400 0 AQTT} + {922572000 18000 1 AQTST} + {941320800 14400 0 AQTT} + {954021600 18000 1 AQTST} + {972770400 14400 0 AQTT} + {985471200 18000 1 AQTST} + {1004220000 14400 0 AQTT} + {1017525600 18000 1 AQTST} + {1035669600 14400 0 AQTT} + {1048975200 18000 1 AQTST} + {1067119200 14400 0 AQTT} + {1080424800 18000 1 AQTST} + {1099173600 14400 0 AQTT} + {1110830400 18000 0 AQTT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Aqtobe b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Aqtobe new file mode 100644 index 00000000..c8574912 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Aqtobe @@ -0,0 +1,57 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Aqtobe) { + {-9223372036854775808 13720 0 LMT} + {-1441165720 14400 0 AKTT} + {-1247544000 18000 0 AKTT} + {354913200 21600 1 AKTST} + {370720800 21600 0 AKTT} + {386445600 18000 0 AKTT} + {386449200 21600 1 AKTST} + {402256800 18000 0 AKTT} + {417985200 21600 1 AKTST} + {433792800 18000 0 AKTT} + {449607600 21600 1 AKTST} + {465339600 18000 0 AKTT} + {481064400 21600 1 AKTST} + {496789200 18000 0 AKTT} + {512514000 21600 1 AKTST} + {528238800 18000 0 AKTT} + {543963600 21600 1 AKTST} + {559688400 18000 0 AKTT} + {575413200 21600 1 AKTST} + {591138000 18000 0 AKTT} + {606862800 21600 1 AKTST} + {622587600 18000 0 AKTT} + {638312400 21600 1 AKTST} + {654642000 18000 0 AKTT} + {662670000 18000 0 AKTT} + {692823600 18000 0 AQTT} + {701805600 21600 1 AQTST} + {717526800 18000 0 AQTT} + {733266000 21600 1 AQTST} + {748990800 18000 0 AQTT} + {764715600 21600 1 AQTST} + {780440400 18000 0 AQTT} + {796165200 21600 1 AQTST} + {811890000 18000 0 AQTT} + {828219600 21600 1 AQTST} + {846363600 18000 0 AQTT} + {859669200 21600 1 AQTST} + {877813200 18000 0 AQTT} + {891118800 21600 1 AQTST} + {909262800 18000 0 AQTT} + {922568400 21600 1 AQTST} + {941317200 18000 0 AQTT} + {954018000 21600 1 AQTST} + {972766800 18000 0 AQTT} + {985467600 21600 1 AQTST} + {1004216400 18000 0 AQTT} + {1017522000 21600 1 AQTST} + {1035666000 18000 0 AQTT} + {1048971600 21600 1 AQTST} + {1067115600 18000 0 AQTT} + {1080421200 21600 1 AQTST} + {1099170000 18000 0 AQTT} + {1110826800 18000 0 AQTT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Ashgabat b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Ashgabat new file mode 100644 index 00000000..64bdb3aa --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Ashgabat @@ -0,0 +1,31 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Ashgabat) { + {-9223372036854775808 14012 0 LMT} + {-1441166012 14400 0 ASHT} + {-1247544000 18000 0 ASHT} + {354913200 21600 1 ASHST} + {370720800 18000 0 ASHT} + {386449200 21600 1 ASHST} + {402256800 18000 0 ASHT} + {417985200 21600 1 ASHST} + {433792800 18000 0 ASHT} + {449607600 21600 1 ASHST} + {465339600 18000 0 ASHT} + {481064400 21600 1 ASHST} + {496789200 18000 0 ASHT} + {512514000 21600 1 ASHST} + {528238800 18000 0 ASHT} + {543963600 21600 1 ASHST} + {559688400 18000 0 ASHT} + {575413200 21600 1 ASHST} + {591138000 18000 0 ASHT} + {606862800 21600 1 ASHST} + {622587600 18000 0 ASHT} + {638312400 21600 1 ASHST} + {654642000 18000 0 ASHT} + {670366800 14400 0 ASHT} + {670370400 18000 1 ASHST} + {686095200 14400 0 ASHT} + {695772000 18000 0 TMT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Ashkhabad b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Ashkhabad new file mode 100644 index 00000000..3000c94c --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Ashkhabad @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Asia/Ashgabat)]} { + LoadTimeZoneFile Asia/Ashgabat +} +set TZData(:Asia/Ashkhabad) $TZData(:Asia/Ashgabat) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Baghdad b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Baghdad new file mode 100644 index 00000000..c1058cb0 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Baghdad @@ -0,0 +1,59 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Baghdad) { + {-9223372036854775808 10660 0 LMT} + {-2524532260 10656 0 BMT} + {-1641005856 10800 0 AST} + {389048400 14400 0 ADT} + {402264000 10800 0 AST} + {417906000 14400 1 ADT} + {433800000 10800 0 AST} + {449614800 14400 1 ADT} + {465422400 10800 0 AST} + {481150800 14400 1 ADT} + {496792800 10800 0 AST} + {512517600 14400 1 ADT} + {528242400 10800 0 AST} + {543967200 14400 1 ADT} + {559692000 10800 0 AST} + {575416800 14400 1 ADT} + {591141600 10800 0 AST} + {606866400 14400 1 ADT} + {622591200 10800 0 AST} + {638316000 14400 1 ADT} + {654645600 10800 0 AST} + {670464000 14400 1 ADT} + {686275200 10800 0 AST} + {702086400 14400 1 ADT} + {717897600 10800 0 AST} + {733622400 14400 1 ADT} + {749433600 10800 0 AST} + {765158400 14400 1 ADT} + {780969600 10800 0 AST} + {796694400 14400 1 ADT} + {812505600 10800 0 AST} + {828316800 14400 1 ADT} + {844128000 10800 0 AST} + {859852800 14400 1 ADT} + {875664000 10800 0 AST} + {891388800 14400 1 ADT} + {907200000 10800 0 AST} + {922924800 14400 1 ADT} + {938736000 10800 0 AST} + {954547200 14400 1 ADT} + {970358400 10800 0 AST} + {986083200 14400 1 ADT} + {1001894400 10800 0 AST} + {1017619200 14400 1 ADT} + {1033430400 10800 0 AST} + {1049155200 14400 1 ADT} + {1064966400 10800 0 AST} + {1080777600 14400 1 ADT} + {1096588800 10800 0 AST} + {1112313600 14400 1 ADT} + {1128124800 10800 0 AST} + {1143849600 14400 1 ADT} + {1159660800 10800 0 AST} + {1175385600 14400 1 ADT} + {1191196800 10800 0 AST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Bahrain b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Bahrain new file mode 100644 index 00000000..aab5b7d9 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Bahrain @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Asia/Qatar)]} { + LoadTimeZoneFile Asia/Qatar +} +set TZData(:Asia/Bahrain) $TZData(:Asia/Qatar) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Baku b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Baku new file mode 100644 index 00000000..e50071bc --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Baku @@ -0,0 +1,242 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Baku) { + {-9223372036854775808 11964 0 LMT} + {-1441163964 10800 0 BAKT} + {-405140400 14400 0 BAKT} + {354916800 18000 1 BAKST} + {370724400 14400 0 BAKT} + {386452800 18000 1 BAKST} + {402260400 14400 0 BAKT} + {417988800 18000 1 BAKST} + {433796400 14400 0 BAKT} + {449611200 18000 1 BAKST} + {465343200 14400 0 BAKT} + {481068000 18000 1 BAKST} + {496792800 14400 0 BAKT} + {512517600 18000 1 BAKST} + {528242400 14400 0 BAKT} + {543967200 18000 1 BAKST} + {559692000 14400 0 BAKT} + {575416800 18000 1 BAKST} + {591141600 14400 0 BAKT} + {606866400 18000 1 BAKST} + {622591200 14400 0 BAKT} + {638316000 18000 1 BAKST} + {654645600 14400 0 BAKT} + {670370400 14400 1 BAKST} + {683496000 14400 0 AZST} + {686098800 10800 0 AZT} + {701812800 14400 1 AZST} + {717537600 14400 0 AZT} + {820440000 14400 0 AZT} + {828234000 18000 1 AZST} + {846378000 14400 0 AZT} + {852062400 14400 0 AZT} + {859680000 18000 1 AZST} + {877824000 14400 0 AZT} + {891129600 18000 1 AZST} + {909273600 14400 0 AZT} + {922579200 18000 1 AZST} + {941328000 14400 0 AZT} + {954028800 18000 1 AZST} + {972777600 14400 0 AZT} + {985478400 18000 1 AZST} + {1004227200 14400 0 AZT} + {1017532800 18000 1 AZST} + {1035676800 14400 0 AZT} + {1048982400 18000 1 AZST} + {1067126400 14400 0 AZT} + {1080432000 18000 1 AZST} + {1099180800 14400 0 AZT} + {1111881600 18000 1 AZST} + {1130630400 14400 0 AZT} + {1143331200 18000 1 AZST} + {1162080000 14400 0 AZT} + {1174780800 18000 1 AZST} + {1193529600 14400 0 AZT} + {1206835200 18000 1 AZST} + {1224979200 14400 0 AZT} + {1238284800 18000 1 AZST} + {1256428800 14400 0 AZT} + {1269734400 18000 1 AZST} + {1288483200 14400 0 AZT} + {1301184000 18000 1 AZST} + {1319932800 14400 0 AZT} + {1332633600 18000 1 AZST} + {1351382400 14400 0 AZT} + {1364688000 18000 1 AZST} + {1382832000 14400 0 AZT} + {1396137600 18000 1 AZST} + {1414281600 14400 0 AZT} + {1427587200 18000 1 AZST} + {1445731200 14400 0 AZT} + {1459036800 18000 1 AZST} + {1477785600 14400 0 AZT} + {1490486400 18000 1 AZST} + {1509235200 14400 0 AZT} + {1521936000 18000 1 AZST} + {1540684800 14400 0 AZT} + {1553990400 18000 1 AZST} + {1572134400 14400 0 AZT} + {1585440000 18000 1 AZST} + {1603584000 14400 0 AZT} + {1616889600 18000 1 AZST} + {1635638400 14400 0 AZT} + {1648339200 18000 1 AZST} + {1667088000 14400 0 AZT} + {1679788800 18000 1 AZST} + {1698537600 14400 0 AZT} + {1711843200 18000 1 AZST} + {1729987200 14400 0 AZT} + {1743292800 18000 1 AZST} + {1761436800 14400 0 AZT} + {1774742400 18000 1 AZST} + {1792886400 14400 0 AZT} + {1806192000 18000 1 AZST} + {1824940800 14400 0 AZT} + {1837641600 18000 1 AZST} + {1856390400 14400 0 AZT} + {1869091200 18000 1 AZST} + {1887840000 14400 0 AZT} + {1901145600 18000 1 AZST} + {1919289600 14400 0 AZT} + {1932595200 18000 1 AZST} + {1950739200 14400 0 AZT} + {1964044800 18000 1 AZST} + {1982793600 14400 0 AZT} + {1995494400 18000 1 AZST} + {2014243200 14400 0 AZT} + {2026944000 18000 1 AZST} + {2045692800 14400 0 AZT} + {2058393600 18000 1 AZST} + {2077142400 14400 0 AZT} + {2090448000 18000 1 AZST} + {2108592000 14400 0 AZT} + {2121897600 18000 1 AZST} + {2140041600 14400 0 AZT} + {2153347200 18000 1 AZST} + {2172096000 14400 0 AZT} + {2184796800 18000 1 AZST} + {2203545600 14400 0 AZT} + {2216246400 18000 1 AZST} + {2234995200 14400 0 AZT} + {2248300800 18000 1 AZST} + {2266444800 14400 0 AZT} + {2279750400 18000 1 AZST} + {2297894400 14400 0 AZT} + {2311200000 18000 1 AZST} + {2329344000 14400 0 AZT} + {2342649600 18000 1 AZST} + {2361398400 14400 0 AZT} + {2374099200 18000 1 AZST} + {2392848000 14400 0 AZT} + {2405548800 18000 1 AZST} + {2424297600 14400 0 AZT} + {2437603200 18000 1 AZST} + {2455747200 14400 0 AZT} + {2469052800 18000 1 AZST} + {2487196800 14400 0 AZT} + {2500502400 18000 1 AZST} + {2519251200 14400 0 AZT} + {2531952000 18000 1 AZST} + {2550700800 14400 0 AZT} + {2563401600 18000 1 AZST} + {2582150400 14400 0 AZT} + {2595456000 18000 1 AZST} + {2613600000 14400 0 AZT} + {2626905600 18000 1 AZST} + {2645049600 14400 0 AZT} + {2658355200 18000 1 AZST} + {2676499200 14400 0 AZT} + {2689804800 18000 1 AZST} + {2708553600 14400 0 AZT} + {2721254400 18000 1 AZST} + {2740003200 14400 0 AZT} + {2752704000 18000 1 AZST} + {2771452800 14400 0 AZT} + {2784758400 18000 1 AZST} + {2802902400 14400 0 AZT} + {2816208000 18000 1 AZST} + {2834352000 14400 0 AZT} + {2847657600 18000 1 AZST} + {2866406400 14400 0 AZT} + {2879107200 18000 1 AZST} + {2897856000 14400 0 AZT} + {2910556800 18000 1 AZST} + {2929305600 14400 0 AZT} + {2942006400 18000 1 AZST} + {2960755200 14400 0 AZT} + {2974060800 18000 1 AZST} + {2992204800 14400 0 AZT} + {3005510400 18000 1 AZST} + {3023654400 14400 0 AZT} + {3036960000 18000 1 AZST} + {3055708800 14400 0 AZT} + {3068409600 18000 1 AZST} + {3087158400 14400 0 AZT} + {3099859200 18000 1 AZST} + {3118608000 14400 0 AZT} + {3131913600 18000 1 AZST} + {3150057600 14400 0 AZT} + {3163363200 18000 1 AZST} + {3181507200 14400 0 AZT} + {3194812800 18000 1 AZST} + {3212956800 14400 0 AZT} + {3226262400 18000 1 AZST} + {3245011200 14400 0 AZT} + {3257712000 18000 1 AZST} + {3276460800 14400 0 AZT} + {3289161600 18000 1 AZST} + {3307910400 14400 0 AZT} + {3321216000 18000 1 AZST} + {3339360000 14400 0 AZT} + {3352665600 18000 1 AZST} + {3370809600 14400 0 AZT} + {3384115200 18000 1 AZST} + {3402864000 14400 0 AZT} + {3415564800 18000 1 AZST} + {3434313600 14400 0 AZT} + {3447014400 18000 1 AZST} + {3465763200 14400 0 AZT} + {3479068800 18000 1 AZST} + {3497212800 14400 0 AZT} + {3510518400 18000 1 AZST} + {3528662400 14400 0 AZT} + {3541968000 18000 1 AZST} + {3560112000 14400 0 AZT} + {3573417600 18000 1 AZST} + {3592166400 14400 0 AZT} + {3604867200 18000 1 AZST} + {3623616000 14400 0 AZT} + {3636316800 18000 1 AZST} + {3655065600 14400 0 AZT} + {3668371200 18000 1 AZST} + {3686515200 14400 0 AZT} + {3699820800 18000 1 AZST} + {3717964800 14400 0 AZT} + {3731270400 18000 1 AZST} + {3750019200 14400 0 AZT} + {3762720000 18000 1 AZST} + {3781468800 14400 0 AZT} + {3794169600 18000 1 AZST} + {3812918400 14400 0 AZT} + {3825619200 18000 1 AZST} + {3844368000 14400 0 AZT} + {3857673600 18000 1 AZST} + {3875817600 14400 0 AZT} + {3889123200 18000 1 AZST} + {3907267200 14400 0 AZT} + {3920572800 18000 1 AZST} + {3939321600 14400 0 AZT} + {3952022400 18000 1 AZST} + {3970771200 14400 0 AZT} + {3983472000 18000 1 AZST} + {4002220800 14400 0 AZT} + {4015526400 18000 1 AZST} + {4033670400 14400 0 AZT} + {4046976000 18000 1 AZST} + {4065120000 14400 0 AZT} + {4078425600 18000 1 AZST} + {4096569600 14400 0 AZT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Bangkok b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Bangkok new file mode 100644 index 00000000..6df76808 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Bangkok @@ -0,0 +1,7 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Bangkok) { + {-9223372036854775808 24124 0 LMT} + {-2840164924 24124 0 BMT} + {-1570084924 25200 0 ICT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Beirut b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Beirut new file mode 100644 index 00000000..ac0a64e7 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Beirut @@ -0,0 +1,270 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Beirut) { + {-9223372036854775808 8520 0 LMT} + {-2840149320 7200 0 EET} + {-1570413600 10800 1 EEST} + {-1552186800 7200 0 EET} + {-1538359200 10800 1 EEST} + {-1522551600 7200 0 EET} + {-1507514400 10800 1 EEST} + {-1490583600 7200 0 EET} + {-1473645600 10800 1 EEST} + {-1460948400 7200 0 EET} + {-399866400 10800 1 EEST} + {-386650800 7200 0 EET} + {-368330400 10800 1 EEST} + {-355114800 7200 0 EET} + {-336794400 10800 1 EEST} + {-323578800 7200 0 EET} + {-305172000 10800 1 EEST} + {-291956400 7200 0 EET} + {-273636000 10800 1 EEST} + {-260420400 7200 0 EET} + {78012000 10800 1 EEST} + {86734800 7200 0 EET} + {105055200 10800 1 EEST} + {118270800 7200 0 EET} + {136591200 10800 1 EEST} + {149806800 7200 0 EET} + {168127200 10800 1 EEST} + {181342800 7200 0 EET} + {199749600 10800 1 EEST} + {212965200 7200 0 EET} + {231285600 10800 1 EEST} + {244501200 7200 0 EET} + {262735200 10800 1 EEST} + {275950800 7200 0 EET} + {452210400 10800 1 EEST} + {466722000 7200 0 EET} + {483746400 10800 1 EEST} + {498258000 7200 0 EET} + {515282400 10800 1 EEST} + {529794000 7200 0 EET} + {546818400 10800 1 EEST} + {561330000 7200 0 EET} + {581119200 10800 1 EEST} + {592952400 7200 0 EET} + {610754400 10800 1 EEST} + {624488400 7200 0 EET} + {641512800 10800 1 EEST} + {656024400 7200 0 EET} + {673048800 10800 1 EEST} + {687560400 7200 0 EET} + {704671200 10800 1 EEST} + {718146000 7200 0 EET} + {733269600 10800 1 EEST} + {748990800 7200 0 EET} + {764719200 10800 1 EEST} + {780440400 7200 0 EET} + {796168800 10800 1 EEST} + {811890000 7200 0 EET} + {828223200 10800 1 EEST} + {843944400 7200 0 EET} + {859672800 10800 1 EEST} + {875394000 7200 0 EET} + {891122400 10800 1 EEST} + {906843600 7200 0 EET} + {922572000 10800 1 EEST} + {941317200 7200 0 EET} + {954021600 10800 1 EEST} + {972766800 7200 0 EET} + {985471200 10800 1 EEST} + {1004216400 7200 0 EET} + {1017525600 10800 1 EEST} + {1035666000 7200 0 EET} + {1048975200 10800 1 EEST} + {1067115600 7200 0 EET} + {1080424800 10800 1 EEST} + {1099170000 7200 0 EET} + {1111874400 10800 1 EEST} + {1130619600 7200 0 EET} + {1143324000 10800 1 EEST} + {1162069200 7200 0 EET} + {1174773600 10800 1 EEST} + {1193518800 7200 0 EET} + {1206828000 10800 1 EEST} + {1224968400 7200 0 EET} + {1238277600 10800 1 EEST} + {1256418000 7200 0 EET} + {1269727200 10800 1 EEST} + {1288472400 7200 0 EET} + {1301176800 10800 1 EEST} + {1319922000 7200 0 EET} + {1332626400 10800 1 EEST} + {1351371600 7200 0 EET} + {1364680800 10800 1 EEST} + {1382821200 7200 0 EET} + {1396130400 10800 1 EEST} + {1414270800 7200 0 EET} + {1427580000 10800 1 EEST} + {1445720400 7200 0 EET} + {1459029600 10800 1 EEST} + {1477774800 7200 0 EET} + {1490479200 10800 1 EEST} + {1509224400 7200 0 EET} + {1521928800 10800 1 EEST} + {1540674000 7200 0 EET} + {1553983200 10800 1 EEST} + {1572123600 7200 0 EET} + {1585432800 10800 1 EEST} + {1603573200 7200 0 EET} + {1616882400 10800 1 EEST} + {1635627600 7200 0 EET} + {1648332000 10800 1 EEST} + {1667077200 7200 0 EET} + {1679781600 10800 1 EEST} + {1698526800 7200 0 EET} + {1711836000 10800 1 EEST} + {1729976400 7200 0 EET} + {1743285600 10800 1 EEST} + {1761426000 7200 0 EET} + {1774735200 10800 1 EEST} + {1792875600 7200 0 EET} + {1806184800 10800 1 EEST} + {1824930000 7200 0 EET} + {1837634400 10800 1 EEST} + {1856379600 7200 0 EET} + {1869084000 10800 1 EEST} + {1887829200 7200 0 EET} + {1901138400 10800 1 EEST} + {1919278800 7200 0 EET} + {1932588000 10800 1 EEST} + {1950728400 7200 0 EET} + {1964037600 10800 1 EEST} + {1982782800 7200 0 EET} + {1995487200 10800 1 EEST} + {2014232400 7200 0 EET} + {2026936800 10800 1 EEST} + {2045682000 7200 0 EET} + {2058386400 10800 1 EEST} + {2077131600 7200 0 EET} + {2090440800 10800 1 EEST} + {2108581200 7200 0 EET} + {2121890400 10800 1 EEST} + {2140030800 7200 0 EET} + {2153340000 10800 1 EEST} + {2172085200 7200 0 EET} + {2184789600 10800 1 EEST} + {2203534800 7200 0 EET} + {2216239200 10800 1 EEST} + {2234984400 7200 0 EET} + {2248293600 10800 1 EEST} + {2266434000 7200 0 EET} + {2279743200 10800 1 EEST} + {2297883600 7200 0 EET} + {2311192800 10800 1 EEST} + {2329333200 7200 0 EET} + {2342642400 10800 1 EEST} + {2361387600 7200 0 EET} + {2374092000 10800 1 EEST} + {2392837200 7200 0 EET} + {2405541600 10800 1 EEST} + {2424286800 7200 0 EET} + {2437596000 10800 1 EEST} + {2455736400 7200 0 EET} + {2469045600 10800 1 EEST} + {2487186000 7200 0 EET} + {2500495200 10800 1 EEST} + {2519240400 7200 0 EET} + {2531944800 10800 1 EEST} + {2550690000 7200 0 EET} + {2563394400 10800 1 EEST} + {2582139600 7200 0 EET} + {2595448800 10800 1 EEST} + {2613589200 7200 0 EET} + {2626898400 10800 1 EEST} + {2645038800 7200 0 EET} + {2658348000 10800 1 EEST} + {2676488400 7200 0 EET} + {2689797600 10800 1 EEST} + {2708542800 7200 0 EET} + {2721247200 10800 1 EEST} + {2739992400 7200 0 EET} + {2752696800 10800 1 EEST} + {2771442000 7200 0 EET} + {2784751200 10800 1 EEST} + {2802891600 7200 0 EET} + {2816200800 10800 1 EEST} + {2834341200 7200 0 EET} + {2847650400 10800 1 EEST} + {2866395600 7200 0 EET} + {2879100000 10800 1 EEST} + {2897845200 7200 0 EET} + {2910549600 10800 1 EEST} + {2929294800 7200 0 EET} + {2941999200 10800 1 EEST} + {2960744400 7200 0 EET} + {2974053600 10800 1 EEST} + {2992194000 7200 0 EET} + {3005503200 10800 1 EEST} + {3023643600 7200 0 EET} + {3036952800 10800 1 EEST} + {3055698000 7200 0 EET} + {3068402400 10800 1 EEST} + {3087147600 7200 0 EET} + {3099852000 10800 1 EEST} + {3118597200 7200 0 EET} + {3131906400 10800 1 EEST} + {3150046800 7200 0 EET} + {3163356000 10800 1 EEST} + {3181496400 7200 0 EET} + {3194805600 10800 1 EEST} + {3212946000 7200 0 EET} + {3226255200 10800 1 EEST} + {3245000400 7200 0 EET} + {3257704800 10800 1 EEST} + {3276450000 7200 0 EET} + {3289154400 10800 1 EEST} + {3307899600 7200 0 EET} + {3321208800 10800 1 EEST} + {3339349200 7200 0 EET} + {3352658400 10800 1 EEST} + {3370798800 7200 0 EET} + {3384108000 10800 1 EEST} + {3402853200 7200 0 EET} + {3415557600 10800 1 EEST} + {3434302800 7200 0 EET} + {3447007200 10800 1 EEST} + {3465752400 7200 0 EET} + {3479061600 10800 1 EEST} + {3497202000 7200 0 EET} + {3510511200 10800 1 EEST} + {3528651600 7200 0 EET} + {3541960800 10800 1 EEST} + {3560101200 7200 0 EET} + {3573410400 10800 1 EEST} + {3592155600 7200 0 EET} + {3604860000 10800 1 EEST} + {3623605200 7200 0 EET} + {3636309600 10800 1 EEST} + {3655054800 7200 0 EET} + {3668364000 10800 1 EEST} + {3686504400 7200 0 EET} + {3699813600 10800 1 EEST} + {3717954000 7200 0 EET} + {3731263200 10800 1 EEST} + {3750008400 7200 0 EET} + {3762712800 10800 1 EEST} + {3781458000 7200 0 EET} + {3794162400 10800 1 EEST} + {3812907600 7200 0 EET} + {3825612000 10800 1 EEST} + {3844357200 7200 0 EET} + {3857666400 10800 1 EEST} + {3875806800 7200 0 EET} + {3889116000 10800 1 EEST} + {3907256400 7200 0 EET} + {3920565600 10800 1 EEST} + {3939310800 7200 0 EET} + {3952015200 10800 1 EEST} + {3970760400 7200 0 EET} + {3983464800 10800 1 EEST} + {4002210000 7200 0 EET} + {4015519200 10800 1 EEST} + {4033659600 7200 0 EET} + {4046968800 10800 1 EEST} + {4065109200 7200 0 EET} + {4078418400 10800 1 EEST} + {4096558800 7200 0 EET} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Bishkek b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Bishkek new file mode 100644 index 00000000..6ba38965 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Bishkek @@ -0,0 +1,57 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Bishkek) { + {-9223372036854775808 17904 0 LMT} + {-1441169904 18000 0 FRUT} + {-1247547600 21600 0 FRUT} + {354909600 25200 1 FRUST} + {370717200 21600 0 FRUT} + {386445600 25200 1 FRUST} + {402253200 21600 0 FRUT} + {417981600 25200 1 FRUST} + {433789200 21600 0 FRUT} + {449604000 25200 1 FRUST} + {465336000 21600 0 FRUT} + {481060800 25200 1 FRUST} + {496785600 21600 0 FRUT} + {512510400 25200 1 FRUST} + {528235200 21600 0 FRUT} + {543960000 25200 1 FRUST} + {559684800 21600 0 FRUT} + {575409600 25200 1 FRUST} + {591134400 21600 0 FRUT} + {606859200 25200 1 FRUST} + {622584000 21600 0 FRUT} + {638308800 25200 1 FRUST} + {654638400 21600 0 FRUT} + {670363200 21600 1 FRUST} + {683582400 21600 0 KGT} + {703018800 21600 1 KGST} + {717530400 18000 0 KGT} + {734468400 21600 1 KGST} + {748980000 18000 0 KGT} + {765918000 21600 1 KGST} + {780429600 18000 0 KGT} + {797367600 21600 1 KGST} + {811879200 18000 0 KGT} + {828817200 21600 1 KGST} + {843933600 18000 0 KGT} + {859671000 21600 1 KGST} + {877811400 18000 0 KGT} + {891120600 21600 1 KGST} + {909261000 18000 0 KGT} + {922570200 21600 1 KGST} + {941315400 18000 0 KGT} + {954019800 21600 1 KGST} + {972765000 18000 0 KGT} + {985469400 21600 1 KGST} + {1004214600 18000 0 KGT} + {1017523800 21600 1 KGST} + {1035664200 18000 0 KGT} + {1048973400 21600 1 KGST} + {1067113800 18000 0 KGT} + {1080423000 21600 1 KGST} + {1099168200 18000 0 KGT} + {1111872600 21600 1 KGST} + {1123783200 21600 0 KGT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Brunei b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Brunei new file mode 100644 index 00000000..63d380bf --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Brunei @@ -0,0 +1,7 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Brunei) { + {-9223372036854775808 27580 0 LMT} + {-1383464380 27000 0 BNT} + {-1167636600 28800 0 BNT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Calcutta b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Calcutta new file mode 100644 index 00000000..7243ef8b --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Calcutta @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Asia/Kolkata)]} { + LoadTimeZoneFile Asia/Kolkata +} +set TZData(:Asia/Calcutta) $TZData(:Asia/Kolkata) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Chita b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Chita new file mode 100644 index 00000000..eabce7fd --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Chita @@ -0,0 +1,71 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Chita) { + {-9223372036854775808 27232 0 LMT} + {-1579419232 28800 0 YAKT} + {-1247558400 32400 0 YAKMMTT} + {354898800 36000 1 YAKST} + {370706400 32400 0 YAKT} + {386434800 36000 1 YAKST} + {402242400 32400 0 YAKT} + {417970800 36000 1 YAKST} + {433778400 32400 0 YAKT} + {449593200 36000 1 YAKST} + {465325200 32400 0 YAKT} + {481050000 36000 1 YAKST} + {496774800 32400 0 YAKT} + {512499600 36000 1 YAKST} + {528224400 32400 0 YAKT} + {543949200 36000 1 YAKST} + {559674000 32400 0 YAKT} + {575398800 36000 1 YAKST} + {591123600 32400 0 YAKT} + {606848400 36000 1 YAKST} + {622573200 32400 0 YAKT} + {638298000 36000 1 YAKST} + {654627600 32400 0 YAKT} + {670352400 28800 0 YAKMMTT} + {670356000 32400 1 YAKST} + {686080800 28800 0 YAKT} + {695757600 32400 0 YAKMMTT} + {701791200 36000 1 YAKST} + {717512400 32400 0 YAKT} + {733251600 36000 1 YAKST} + {748976400 32400 0 YAKT} + {764701200 36000 1 YAKST} + {780426000 32400 0 YAKT} + {796150800 36000 1 YAKST} + {811875600 32400 0 YAKT} + {828205200 36000 1 YAKST} + {846349200 32400 0 YAKT} + {859654800 36000 1 YAKST} + {877798800 32400 0 YAKT} + {891104400 36000 1 YAKST} + {909248400 32400 0 YAKT} + {922554000 36000 1 YAKST} + {941302800 32400 0 YAKT} + {954003600 36000 1 YAKST} + {972752400 32400 0 YAKT} + {985453200 36000 1 YAKST} + {1004202000 32400 0 YAKT} + {1017507600 36000 1 YAKST} + {1035651600 32400 0 YAKT} + {1048957200 36000 1 YAKST} + {1067101200 32400 0 YAKT} + {1080406800 36000 1 YAKST} + {1099155600 32400 0 YAKT} + {1111856400 36000 1 YAKST} + {1130605200 32400 0 YAKT} + {1143306000 36000 1 YAKST} + {1162054800 32400 0 YAKT} + {1174755600 36000 1 YAKST} + {1193504400 32400 0 YAKT} + {1206810000 36000 1 YAKST} + {1224954000 32400 0 YAKT} + {1238259600 36000 1 YAKST} + {1256403600 32400 0 YAKT} + {1269709200 36000 1 YAKST} + {1288458000 32400 0 YAKT} + {1301158800 36000 0 YAKT} + {1414252800 28800 0 IRKT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Choibalsan b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Choibalsan new file mode 100644 index 00000000..2bcf7f74 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Choibalsan @@ -0,0 +1,222 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Choibalsan) { + {-9223372036854775808 27480 0 LMT} + {-2032933080 25200 0 ULAT} + {252435600 28800 0 ULAT} + {417974400 36000 0 CHOST} + {433778400 32400 0 CHOT} + {449593200 36000 1 CHOST} + {465314400 32400 0 CHOT} + {481042800 36000 1 CHOST} + {496764000 32400 0 CHOT} + {512492400 36000 1 CHOST} + {528213600 32400 0 CHOT} + {543942000 36000 1 CHOST} + {559663200 32400 0 CHOT} + {575391600 36000 1 CHOST} + {591112800 32400 0 CHOT} + {606841200 36000 1 CHOST} + {622562400 32400 0 CHOT} + {638290800 36000 1 CHOST} + {654616800 32400 0 CHOT} + {670345200 36000 1 CHOST} + {686066400 32400 0 CHOT} + {701794800 36000 1 CHOST} + {717516000 32400 0 CHOT} + {733244400 36000 1 CHOST} + {748965600 32400 0 CHOT} + {764694000 36000 1 CHOST} + {780415200 32400 0 CHOT} + {796143600 36000 1 CHOST} + {811864800 32400 0 CHOT} + {828198000 36000 1 CHOST} + {843919200 32400 0 CHOT} + {859647600 36000 1 CHOST} + {875368800 32400 0 CHOT} + {891097200 36000 1 CHOST} + {906818400 32400 0 CHOT} + {988390800 36000 1 CHOST} + {1001692800 32400 0 CHOT} + {1017421200 36000 1 CHOST} + {1033142400 32400 0 CHOT} + {1048870800 36000 1 CHOST} + {1064592000 32400 0 CHOT} + {1080320400 36000 1 CHOST} + {1096041600 32400 0 CHOT} + {1111770000 36000 1 CHOST} + {1127491200 32400 0 CHOT} + {1143219600 36000 1 CHOST} + {1159545600 32400 0 CHOT} + {1206889200 28800 0 CHOT} + {1427479200 32400 1 CHOST} + {1443193200 28800 0 CHOT} + {1458928800 32400 1 CHOST} + {1474642800 28800 0 CHOT} + {1490378400 32400 1 CHOST} + {1506697200 28800 0 CHOT} + {1522432800 32400 1 CHOST} + {1538146800 28800 0 CHOT} + {1553882400 32400 1 CHOST} + {1569596400 28800 0 CHOT} + {1585332000 32400 1 CHOST} + {1601046000 28800 0 CHOT} + {1616781600 32400 1 CHOST} + {1632495600 28800 0 CHOT} + {1648231200 32400 1 CHOST} + {1663945200 28800 0 CHOT} + {1679680800 32400 1 CHOST} + {1695999600 28800 0 CHOT} + {1711735200 32400 1 CHOST} + {1727449200 28800 0 CHOT} + {1743184800 32400 1 CHOST} + {1758898800 28800 0 CHOT} + {1774634400 32400 1 CHOST} + {1790348400 28800 0 CHOT} + {1806084000 32400 1 CHOST} + {1821798000 28800 0 CHOT} + {1837533600 32400 1 CHOST} + {1853852400 28800 0 CHOT} + {1869588000 32400 1 CHOST} + {1885302000 28800 0 CHOT} + {1901037600 32400 1 CHOST} + {1916751600 28800 0 CHOT} + {1932487200 32400 1 CHOST} + {1948201200 28800 0 CHOT} + {1963936800 32400 1 CHOST} + {1979650800 28800 0 CHOT} + {1995386400 32400 1 CHOST} + {2011100400 28800 0 CHOT} + {2026836000 32400 1 CHOST} + {2043154800 28800 0 CHOT} + {2058890400 32400 1 CHOST} + {2074604400 28800 0 CHOT} + {2090340000 32400 1 CHOST} + {2106054000 28800 0 CHOT} + {2121789600 32400 1 CHOST} + {2137503600 28800 0 CHOT} + {2153239200 32400 1 CHOST} + {2168953200 28800 0 CHOT} + {2184688800 32400 1 CHOST} + {2200402800 28800 0 CHOT} + {2216743200 32400 1 CHOST} + {2232457200 28800 0 CHOT} + {2248192800 32400 1 CHOST} + {2263906800 28800 0 CHOT} + {2279642400 32400 1 CHOST} + {2295356400 28800 0 CHOT} + {2311092000 32400 1 CHOST} + {2326806000 28800 0 CHOT} + {2342541600 32400 1 CHOST} + {2358255600 28800 0 CHOT} + {2373991200 32400 1 CHOST} + {2390310000 28800 0 CHOT} + {2406045600 32400 1 CHOST} + {2421759600 28800 0 CHOT} + {2437495200 32400 1 CHOST} + {2453209200 28800 0 CHOT} + {2468944800 32400 1 CHOST} + {2484658800 28800 0 CHOT} + {2500394400 32400 1 CHOST} + {2516108400 28800 0 CHOT} + {2531844000 32400 1 CHOST} + {2547558000 28800 0 CHOT} + {2563293600 32400 1 CHOST} + {2579612400 28800 0 CHOT} + {2595348000 32400 1 CHOST} + {2611062000 28800 0 CHOT} + {2626797600 32400 1 CHOST} + {2642511600 28800 0 CHOT} + {2658247200 32400 1 CHOST} + {2673961200 28800 0 CHOT} + {2689696800 32400 1 CHOST} + {2705410800 28800 0 CHOT} + {2721146400 32400 1 CHOST} + {2737465200 28800 0 CHOT} + {2753200800 32400 1 CHOST} + {2768914800 28800 0 CHOT} + {2784650400 32400 1 CHOST} + {2800364400 28800 0 CHOT} + {2816100000 32400 1 CHOST} + {2831814000 28800 0 CHOT} + {2847549600 32400 1 CHOST} + {2863263600 28800 0 CHOT} + {2878999200 32400 1 CHOST} + {2894713200 28800 0 CHOT} + {2910448800 32400 1 CHOST} + {2926767600 28800 0 CHOT} + {2942503200 32400 1 CHOST} + {2958217200 28800 0 CHOT} + {2973952800 32400 1 CHOST} + {2989666800 28800 0 CHOT} + {3005402400 32400 1 CHOST} + {3021116400 28800 0 CHOT} + {3036852000 32400 1 CHOST} + {3052566000 28800 0 CHOT} + {3068301600 32400 1 CHOST} + {3084015600 28800 0 CHOT} + {3100356000 32400 1 CHOST} + {3116070000 28800 0 CHOT} + {3131805600 32400 1 CHOST} + {3147519600 28800 0 CHOT} + {3163255200 32400 1 CHOST} + {3178969200 28800 0 CHOT} + {3194704800 32400 1 CHOST} + {3210418800 28800 0 CHOT} + {3226154400 32400 1 CHOST} + {3241868400 28800 0 CHOT} + {3257604000 32400 1 CHOST} + {3273922800 28800 0 CHOT} + {3289658400 32400 1 CHOST} + {3305372400 28800 0 CHOT} + {3321108000 32400 1 CHOST} + {3336822000 28800 0 CHOT} + {3352557600 32400 1 CHOST} + {3368271600 28800 0 CHOT} + {3384007200 32400 1 CHOST} + {3399721200 28800 0 CHOT} + {3415456800 32400 1 CHOST} + {3431170800 28800 0 CHOT} + {3446906400 32400 1 CHOST} + {3463225200 28800 0 CHOT} + {3478960800 32400 1 CHOST} + {3494674800 28800 0 CHOT} + {3510410400 32400 1 CHOST} + {3526124400 28800 0 CHOT} + {3541860000 32400 1 CHOST} + {3557574000 28800 0 CHOT} + {3573309600 32400 1 CHOST} + {3589023600 28800 0 CHOT} + {3604759200 32400 1 CHOST} + {3621078000 28800 0 CHOT} + {3636813600 32400 1 CHOST} + {3652527600 28800 0 CHOT} + {3668263200 32400 1 CHOST} + {3683977200 28800 0 CHOT} + {3699712800 32400 1 CHOST} + {3715426800 28800 0 CHOT} + {3731162400 32400 1 CHOST} + {3746876400 28800 0 CHOT} + {3762612000 32400 1 CHOST} + {3778326000 28800 0 CHOT} + {3794061600 32400 1 CHOST} + {3810380400 28800 0 CHOT} + {3826116000 32400 1 CHOST} + {3841830000 28800 0 CHOT} + {3857565600 32400 1 CHOST} + {3873279600 28800 0 CHOT} + {3889015200 32400 1 CHOST} + {3904729200 28800 0 CHOT} + {3920464800 32400 1 CHOST} + {3936178800 28800 0 CHOT} + {3951914400 32400 1 CHOST} + {3967628400 28800 0 CHOT} + {3983968800 32400 1 CHOST} + {3999682800 28800 0 CHOT} + {4015418400 32400 1 CHOST} + {4031132400 28800 0 CHOT} + {4046868000 32400 1 CHOST} + {4062582000 28800 0 CHOT} + {4078317600 32400 1 CHOST} + {4094031600 28800 0 CHOT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Chongqing b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Chongqing new file mode 100644 index 00000000..ba515fec --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Chongqing @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Asia/Shanghai)]} { + LoadTimeZoneFile Asia/Shanghai +} +set TZData(:Asia/Chongqing) $TZData(:Asia/Shanghai) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Chungking b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Chungking new file mode 100644 index 00000000..fa857dda --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Chungking @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Asia/Shanghai)]} { + LoadTimeZoneFile Asia/Shanghai +} +set TZData(:Asia/Chungking) $TZData(:Asia/Shanghai) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Colombo b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Colombo new file mode 100644 index 00000000..ca7bffcf --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Colombo @@ -0,0 +1,13 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Colombo) { + {-9223372036854775808 19164 0 LMT} + {-2840159964 19172 0 MMT} + {-2019705572 19800 0 IST} + {-883287000 21600 1 IHST} + {-862639200 23400 1 IST} + {-764051400 19800 0 IST} + {832962600 23400 0 LKT} + {846266400 21600 0 LKT} + {1145039400 19800 0 IST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Dacca b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Dacca new file mode 100644 index 00000000..b91d7faa --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Dacca @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Asia/Dhaka)]} { + LoadTimeZoneFile Asia/Dhaka +} +set TZData(:Asia/Dacca) $TZData(:Asia/Dhaka) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Damascus b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Damascus new file mode 100644 index 00000000..fafef49d --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Damascus @@ -0,0 +1,280 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Damascus) { + {-9223372036854775808 8712 0 LMT} + {-1577931912 7200 0 EET} + {-1568592000 10800 1 EEST} + {-1554080400 7200 0 EET} + {-1537142400 10800 1 EEST} + {-1522630800 7200 0 EET} + {-1505692800 10800 1 EEST} + {-1491181200 7200 0 EET} + {-1474243200 10800 1 EEST} + {-1459126800 7200 0 EET} + {-242265600 10800 1 EEST} + {-228877200 7200 0 EET} + {-210556800 10800 1 EEST} + {-197427600 7200 0 EET} + {-178934400 10800 1 EEST} + {-165718800 7200 0 EET} + {-147398400 10800 1 EEST} + {-134269200 7200 0 EET} + {-116467200 10800 1 EEST} + {-102646800 7200 0 EET} + {-84326400 10800 1 EEST} + {-71110800 7200 0 EET} + {-52704000 10800 1 EEST} + {-39488400 7200 0 EET} + {-21168000 10800 1 EEST} + {-7952400 7200 0 EET} + {10368000 10800 1 EEST} + {23583600 7200 0 EET} + {41904000 10800 1 EEST} + {55119600 7200 0 EET} + {73526400 10800 1 EEST} + {86742000 7200 0 EET} + {105062400 10800 1 EEST} + {118278000 7200 0 EET} + {136598400 10800 1 EEST} + {149814000 7200 0 EET} + {168134400 10800 1 EEST} + {181350000 7200 0 EET} + {199756800 10800 1 EEST} + {212972400 7200 0 EET} + {231292800 10800 1 EEST} + {241916400 7200 0 EET} + {262828800 10800 1 EEST} + {273452400 7200 0 EET} + {418694400 10800 1 EEST} + {433810800 7200 0 EET} + {450316800 10800 1 EEST} + {465433200 7200 0 EET} + {508896000 10800 1 EEST} + {529196400 7200 0 EET} + {541555200 10800 1 EEST} + {562633200 7200 0 EET} + {574387200 10800 1 EEST} + {594255600 7200 0 EET} + {607305600 10800 1 EEST} + {623199600 7200 0 EET} + {638928000 10800 1 EEST} + {654649200 7200 0 EET} + {670456800 10800 1 EEST} + {686264400 7200 0 EET} + {702684000 10800 1 EEST} + {717886800 7200 0 EET} + {733096800 10800 1 EEST} + {748904400 7200 0 EET} + {765151200 10800 1 EEST} + {780958800 7200 0 EET} + {796687200 10800 1 EEST} + {812494800 7200 0 EET} + {828309600 10800 1 EEST} + {844117200 7200 0 EET} + {859759200 10800 1 EEST} + {875653200 7200 0 EET} + {891208800 10800 1 EEST} + {907189200 7200 0 EET} + {922917600 10800 1 EEST} + {938725200 7200 0 EET} + {954540000 10800 1 EEST} + {970347600 7200 0 EET} + {986076000 10800 1 EEST} + {1001883600 7200 0 EET} + {1017612000 10800 1 EEST} + {1033419600 7200 0 EET} + {1049148000 10800 1 EEST} + {1064955600 7200 0 EET} + {1080770400 10800 1 EEST} + {1096578000 7200 0 EET} + {1112306400 10800 1 EEST} + {1128114000 7200 0 EET} + {1143842400 10800 1 EEST} + {1158872400 7200 0 EET} + {1175205600 10800 1 EEST} + {1193950800 7200 0 EET} + {1207260000 10800 1 EEST} + {1225486800 7200 0 EET} + {1238104800 10800 1 EEST} + {1256850000 7200 0 EET} + {1270159200 10800 1 EEST} + {1288299600 7200 0 EET} + {1301608800 10800 1 EEST} + {1319749200 7200 0 EET} + {1333058400 10800 1 EEST} + {1351198800 7200 0 EET} + {1364508000 10800 1 EEST} + {1382648400 7200 0 EET} + {1395957600 10800 1 EEST} + {1414702800 7200 0 EET} + {1427407200 10800 1 EEST} + {1446152400 7200 0 EET} + {1458856800 10800 1 EEST} + {1477602000 7200 0 EET} + {1490911200 10800 1 EEST} + {1509051600 7200 0 EET} + {1522360800 10800 1 EEST} + {1540501200 7200 0 EET} + {1553810400 10800 1 EEST} + {1571950800 7200 0 EET} + {1585260000 10800 1 EEST} + {1604005200 7200 0 EET} + {1616709600 10800 1 EEST} + {1635454800 7200 0 EET} + {1648159200 10800 1 EEST} + {1666904400 7200 0 EET} + {1680213600 10800 1 EEST} + {1698354000 7200 0 EET} + {1711663200 10800 1 EEST} + {1729803600 7200 0 EET} + {1743112800 10800 1 EEST} + {1761858000 7200 0 EET} + {1774562400 10800 1 EEST} + {1793307600 7200 0 EET} + {1806012000 10800 1 EEST} + {1824757200 7200 0 EET} + {1838066400 10800 1 EEST} + {1856206800 7200 0 EET} + {1869516000 10800 1 EEST} + {1887656400 7200 0 EET} + {1900965600 10800 1 EEST} + {1919106000 7200 0 EET} + {1932415200 10800 1 EEST} + {1951160400 7200 0 EET} + {1963864800 10800 1 EEST} + {1982610000 7200 0 EET} + {1995314400 10800 1 EEST} + {2014059600 7200 0 EET} + {2027368800 10800 1 EEST} + {2045509200 7200 0 EET} + {2058818400 10800 1 EEST} + {2076958800 7200 0 EET} + {2090268000 10800 1 EEST} + {2109013200 7200 0 EET} + {2121717600 10800 1 EEST} + {2140462800 7200 0 EET} + {2153167200 10800 1 EEST} + {2171912400 7200 0 EET} + {2184616800 10800 1 EEST} + {2203362000 7200 0 EET} + {2216671200 10800 1 EEST} + {2234811600 7200 0 EET} + {2248120800 10800 1 EEST} + {2266261200 7200 0 EET} + {2279570400 10800 1 EEST} + {2298315600 7200 0 EET} + {2311020000 10800 1 EEST} + {2329765200 7200 0 EET} + {2342469600 10800 1 EEST} + {2361214800 7200 0 EET} + {2374524000 10800 1 EEST} + {2392664400 7200 0 EET} + {2405973600 10800 1 EEST} + {2424114000 7200 0 EET} + {2437423200 10800 1 EEST} + {2455563600 7200 0 EET} + {2468872800 10800 1 EEST} + {2487618000 7200 0 EET} + {2500322400 10800 1 EEST} + {2519067600 7200 0 EET} + {2531772000 10800 1 EEST} + {2550517200 7200 0 EET} + {2563826400 10800 1 EEST} + {2581966800 7200 0 EET} + {2595276000 10800 1 EEST} + {2613416400 7200 0 EET} + {2626725600 10800 1 EEST} + {2645470800 7200 0 EET} + {2658175200 10800 1 EEST} + {2676920400 7200 0 EET} + {2689624800 10800 1 EEST} + {2708370000 7200 0 EET} + {2721679200 10800 1 EEST} + {2739819600 7200 0 EET} + {2753128800 10800 1 EEST} + {2771269200 7200 0 EET} + {2784578400 10800 1 EEST} + {2802718800 7200 0 EET} + {2816028000 10800 1 EEST} + {2834773200 7200 0 EET} + {2847477600 10800 1 EEST} + {2866222800 7200 0 EET} + {2878927200 10800 1 EEST} + {2897672400 7200 0 EET} + {2910981600 10800 1 EEST} + {2929122000 7200 0 EET} + {2942431200 10800 1 EEST} + {2960571600 7200 0 EET} + {2973880800 10800 1 EEST} + {2992626000 7200 0 EET} + {3005330400 10800 1 EEST} + {3024075600 7200 0 EET} + {3036780000 10800 1 EEST} + {3055525200 7200 0 EET} + {3068229600 10800 1 EEST} + {3086974800 7200 0 EET} + {3100284000 10800 1 EEST} + {3118424400 7200 0 EET} + {3131733600 10800 1 EEST} + {3149874000 7200 0 EET} + {3163183200 10800 1 EEST} + {3181928400 7200 0 EET} + {3194632800 10800 1 EEST} + {3213378000 7200 0 EET} + {3226082400 10800 1 EEST} + {3244827600 7200 0 EET} + {3258136800 10800 1 EEST} + {3276277200 7200 0 EET} + {3289586400 10800 1 EEST} + {3307726800 7200 0 EET} + {3321036000 10800 1 EEST} + {3339176400 7200 0 EET} + {3352485600 10800 1 EEST} + {3371230800 7200 0 EET} + {3383935200 10800 1 EEST} + {3402680400 7200 0 EET} + {3415384800 10800 1 EEST} + {3434130000 7200 0 EET} + {3447439200 10800 1 EEST} + {3465579600 7200 0 EET} + {3478888800 10800 1 EEST} + {3497029200 7200 0 EET} + {3510338400 10800 1 EEST} + {3529083600 7200 0 EET} + {3541788000 10800 1 EEST} + {3560533200 7200 0 EET} + {3573237600 10800 1 EEST} + {3591982800 7200 0 EET} + {3605292000 10800 1 EEST} + {3623432400 7200 0 EET} + {3636741600 10800 1 EEST} + {3654882000 7200 0 EET} + {3668191200 10800 1 EEST} + {3686331600 7200 0 EET} + {3699640800 10800 1 EEST} + {3718386000 7200 0 EET} + {3731090400 10800 1 EEST} + {3749835600 7200 0 EET} + {3762540000 10800 1 EEST} + {3781285200 7200 0 EET} + {3794594400 10800 1 EEST} + {3812734800 7200 0 EET} + {3826044000 10800 1 EEST} + {3844184400 7200 0 EET} + {3857493600 10800 1 EEST} + {3876238800 7200 0 EET} + {3888943200 10800 1 EEST} + {3907688400 7200 0 EET} + {3920392800 10800 1 EEST} + {3939138000 7200 0 EET} + {3951842400 10800 1 EEST} + {3970587600 7200 0 EET} + {3983896800 10800 1 EEST} + {4002037200 7200 0 EET} + {4015346400 10800 1 EEST} + {4033486800 7200 0 EET} + {4046796000 10800 1 EEST} + {4065541200 7200 0 EET} + {4078245600 10800 1 EEST} + {4096990800 7200 0 EET} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Dhaka b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Dhaka new file mode 100644 index 00000000..6e8a334b --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Dhaka @@ -0,0 +1,14 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Dhaka) { + {-9223372036854775808 21700 0 LMT} + {-2524543300 21200 0 HMT} + {-891582800 23400 0 BURT} + {-872058600 19800 0 IST} + {-862637400 23400 0 BURT} + {-576138600 21600 0 DACT} + {38772000 21600 0 BDT} + {1230746400 21600 0 BDT} + {1245430800 25200 1 BDST} + {1262278800 21600 0 BDT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Dili b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Dili new file mode 100644 index 00000000..f783557d --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Dili @@ -0,0 +1,10 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Dili) { + {-9223372036854775808 30140 0 LMT} + {-1830414140 28800 0 TLT} + {-879152400 32400 0 JST} + {-766054800 32400 0 TLT} + {199897200 28800 0 WITA} + {969120000 32400 0 TLT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Dubai b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Dubai new file mode 100644 index 00000000..b8730e51 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Dubai @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Dubai) { + {-9223372036854775808 13272 0 LMT} + {-1577936472 14400 0 GST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Dushanbe b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Dushanbe new file mode 100644 index 00000000..59f8cb69 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Dushanbe @@ -0,0 +1,29 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Dushanbe) { + {-9223372036854775808 16512 0 LMT} + {-1441168512 18000 0 DUST} + {-1247547600 21600 0 DUST} + {354909600 25200 1 DUSST} + {370717200 21600 0 DUST} + {386445600 25200 1 DUSST} + {402253200 21600 0 DUST} + {417981600 25200 1 DUSST} + {433789200 21600 0 DUST} + {449604000 25200 1 DUSST} + {465336000 21600 0 DUST} + {481060800 25200 1 DUSST} + {496785600 21600 0 DUST} + {512510400 25200 1 DUSST} + {528235200 21600 0 DUST} + {543960000 25200 1 DUSST} + {559684800 21600 0 DUST} + {575409600 25200 1 DUSST} + {591134400 21600 0 DUST} + {606859200 25200 1 DUSST} + {622584000 21600 0 DUST} + {638308800 25200 1 DUSST} + {654638400 21600 0 DUST} + {670363200 21600 1 DUSST} + {684363600 18000 0 TJT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Gaza b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Gaza new file mode 100644 index 00000000..805b6b7a --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Gaza @@ -0,0 +1,278 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Gaza) { + {-9223372036854775808 8272 0 LMT} + {-2185409872 7200 0 EET} + {-933645600 10800 1 EET} + {-857358000 7200 0 EET} + {-844300800 10800 1 EET} + {-825822000 7200 0 EET} + {-812685600 10800 1 EET} + {-794199600 7200 0 EET} + {-779853600 10800 1 EET} + {-762656400 7200 0 EET} + {-748310400 10800 1 EET} + {-731127600 7200 0 EET} + {-682653600 7200 0 EET} + {-399088800 10800 1 EEST} + {-386650800 7200 0 EET} + {-368330400 10800 1 EEST} + {-355114800 7200 0 EET} + {-336790800 10800 1 EEST} + {-323654400 7200 0 EET} + {-305168400 10800 1 EEST} + {-292032000 7200 0 EET} + {-273632400 10800 1 EEST} + {-260496000 7200 0 EET} + {-242096400 10800 1 EEST} + {-228960000 7200 0 EET} + {-210560400 10800 1 EEST} + {-197424000 7200 0 EET} + {-178938000 10800 1 EEST} + {-165801600 7200 0 EET} + {-147402000 10800 1 EEST} + {-134265600 7200 0 EET} + {-115866000 10800 1 EEST} + {-102643200 7200 0 EET} + {-84330000 10800 1 EEST} + {-81313200 10800 0 IST} + {142376400 10800 1 IDT} + {150843600 7200 0 IST} + {167176800 10800 1 IDT} + {178664400 7200 0 IST} + {482277600 10800 1 IDT} + {495579600 7200 0 IST} + {516751200 10800 1 IDT} + {526424400 7200 0 IST} + {545436000 10800 1 IDT} + {558478800 7200 0 IST} + {576626400 10800 1 IDT} + {589323600 7200 0 IST} + {609890400 10800 1 IDT} + {620773200 7200 0 IST} + {638316000 10800 1 IDT} + {651618000 7200 0 IST} + {669765600 10800 1 IDT} + {683672400 7200 0 IST} + {701820000 10800 1 IDT} + {715726800 7200 0 IST} + {733701600 10800 1 IDT} + {747176400 7200 0 IST} + {765151200 10800 1 IDT} + {778021200 7200 0 IST} + {796600800 10800 1 IDT} + {810075600 7200 0 IST} + {820447200 7200 0 EET} + {828655200 10800 1 EEST} + {843170400 7200 0 EET} + {860104800 10800 1 EEST} + {874620000 7200 0 EET} + {891554400 10800 1 EEST} + {906069600 7200 0 EET} + {915141600 7200 0 EET} + {924213600 10800 1 EEST} + {939934800 7200 0 EET} + {956268000 10800 1 EEST} + {971989200 7200 0 EET} + {987717600 10800 1 EEST} + {1003438800 7200 0 EET} + {1019167200 10800 1 EEST} + {1034888400 7200 0 EET} + {1050616800 10800 1 EEST} + {1066338000 7200 0 EET} + {1082066400 10800 1 EEST} + {1096581600 7200 0 EET} + {1113516000 10800 1 EEST} + {1128380400 7200 0 EET} + {1143842400 10800 1 EEST} + {1158872400 7200 0 EET} + {1175378400 10800 1 EEST} + {1189638000 7200 0 EET} + {1206655200 10800 1 EEST} + {1219960800 7200 0 EET} + {1220220000 7200 0 EET} + {1238104800 10800 1 EEST} + {1252015200 7200 0 EET} + {1262296800 7200 0 EET} + {1269640860 10800 0 EEST} + {1281474000 7200 0 EET} + {1301608860 10800 1 EEST} + {1312149600 7200 0 EET} + {1325368800 7200 0 EET} + {1333058400 10800 1 EEST} + {1348178400 7200 0 EET} + {1364508000 10800 1 EEST} + {1380229200 7200 0 EET} + {1395957600 10800 1 EEST} + {1414098000 7200 0 EET} + {1427493600 10800 1 EEST} + {1445547600 7200 0 EET} + {1458943200 10800 1 EEST} + {1476997200 7200 0 EET} + {1490997600 10800 1 EEST} + {1509051600 7200 0 EET} + {1522447200 10800 1 EEST} + {1540501200 7200 0 EET} + {1553896800 10800 1 EEST} + {1571950800 7200 0 EET} + {1585346400 10800 1 EEST} + {1603400400 7200 0 EET} + {1616796000 10800 1 EEST} + {1634850000 7200 0 EET} + {1648245600 10800 1 EEST} + {1666299600 7200 0 EET} + {1680300000 10800 1 EEST} + {1698354000 7200 0 EET} + {1711749600 10800 1 EEST} + {1729803600 7200 0 EET} + {1743199200 10800 1 EEST} + {1761253200 7200 0 EET} + {1774648800 10800 1 EEST} + {1792702800 7200 0 EET} + {1806098400 10800 1 EEST} + {1824152400 7200 0 EET} + {1838152800 10800 1 EEST} + {1856206800 7200 0 EET} + {1869602400 10800 1 EEST} + {1887656400 7200 0 EET} + {1901052000 10800 1 EEST} + {1919106000 7200 0 EET} + {1932501600 10800 1 EEST} + {1950555600 7200 0 EET} + {1963951200 10800 1 EEST} + {1982005200 7200 0 EET} + {1995400800 10800 1 EEST} + {2013454800 7200 0 EET} + {2027455200 10800 1 EEST} + {2045509200 7200 0 EET} + {2058904800 10800 1 EEST} + {2076958800 7200 0 EET} + {2090354400 10800 1 EEST} + {2108408400 7200 0 EET} + {2121804000 10800 1 EEST} + {2139858000 7200 0 EET} + {2153253600 10800 1 EEST} + {2171307600 7200 0 EET} + {2184703200 10800 1 EEST} + {2202757200 7200 0 EET} + {2216757600 10800 1 EEST} + {2234811600 7200 0 EET} + {2248207200 10800 1 EEST} + {2266261200 7200 0 EET} + {2279656800 10800 1 EEST} + {2297710800 7200 0 EET} + {2311106400 10800 1 EEST} + {2329160400 7200 0 EET} + {2342556000 10800 1 EEST} + {2360610000 7200 0 EET} + {2374610400 10800 1 EEST} + {2392664400 7200 0 EET} + {2406060000 10800 1 EEST} + {2424114000 7200 0 EET} + {2437509600 10800 1 EEST} + {2455563600 7200 0 EET} + {2468959200 10800 1 EEST} + {2487013200 7200 0 EET} + {2500408800 10800 1 EEST} + {2518462800 7200 0 EET} + {2531858400 10800 1 EEST} + {2549912400 7200 0 EET} + {2563912800 10800 1 EEST} + {2581966800 7200 0 EET} + {2595362400 10800 1 EEST} + {2613416400 7200 0 EET} + {2626812000 10800 1 EEST} + {2644866000 7200 0 EET} + {2658261600 10800 1 EEST} + {2676315600 7200 0 EET} + {2689711200 10800 1 EEST} + {2707765200 7200 0 EET} + {2721765600 10800 1 EEST} + {2739819600 7200 0 EET} + {2753215200 10800 1 EEST} + {2771269200 7200 0 EET} + {2784664800 10800 1 EEST} + {2802718800 7200 0 EET} + {2816114400 10800 1 EEST} + {2834168400 7200 0 EET} + {2847564000 10800 1 EEST} + {2865618000 7200 0 EET} + {2879013600 10800 1 EEST} + {2897067600 7200 0 EET} + {2911068000 10800 1 EEST} + {2929122000 7200 0 EET} + {2942517600 10800 1 EEST} + {2960571600 7200 0 EET} + {2973967200 10800 1 EEST} + {2992021200 7200 0 EET} + {3005416800 10800 1 EEST} + {3023470800 7200 0 EET} + {3036866400 10800 1 EEST} + {3054920400 7200 0 EET} + {3068316000 10800 1 EEST} + {3086370000 7200 0 EET} + {3100370400 10800 1 EEST} + {3118424400 7200 0 EET} + {3131820000 10800 1 EEST} + {3149874000 7200 0 EET} + {3163269600 10800 1 EEST} + {3181323600 7200 0 EET} + {3194719200 10800 1 EEST} + {3212773200 7200 0 EET} + {3226168800 10800 1 EEST} + {3244222800 7200 0 EET} + {3258223200 10800 1 EEST} + {3276277200 7200 0 EET} + {3289672800 10800 1 EEST} + {3307726800 7200 0 EET} + {3321122400 10800 1 EEST} + {3339176400 7200 0 EET} + {3352572000 10800 1 EEST} + {3370626000 7200 0 EET} + {3384021600 10800 1 EEST} + {3402075600 7200 0 EET} + {3415471200 10800 1 EEST} + {3433525200 7200 0 EET} + {3447525600 10800 1 EEST} + {3465579600 7200 0 EET} + {3478975200 10800 1 EEST} + {3497029200 7200 0 EET} + {3510424800 10800 1 EEST} + {3528478800 7200 0 EET} + {3541874400 10800 1 EEST} + {3559928400 7200 0 EET} + {3573324000 10800 1 EEST} + {3591378000 7200 0 EET} + {3605378400 10800 1 EEST} + {3623432400 7200 0 EET} + {3636828000 10800 1 EEST} + {3654882000 7200 0 EET} + {3668277600 10800 1 EEST} + {3686331600 7200 0 EET} + {3699727200 10800 1 EEST} + {3717781200 7200 0 EET} + {3731176800 10800 1 EEST} + {3749230800 7200 0 EET} + {3762626400 10800 1 EEST} + {3780680400 7200 0 EET} + {3794680800 10800 1 EEST} + {3812734800 7200 0 EET} + {3826130400 10800 1 EEST} + {3844184400 7200 0 EET} + {3857580000 10800 1 EEST} + {3875634000 7200 0 EET} + {3889029600 10800 1 EEST} + {3907083600 7200 0 EET} + {3920479200 10800 1 EEST} + {3938533200 7200 0 EET} + {3951928800 10800 1 EEST} + {3969982800 7200 0 EET} + {3983983200 10800 1 EEST} + {4002037200 7200 0 EET} + {4015432800 10800 1 EEST} + {4033486800 7200 0 EET} + {4046882400 10800 1 EEST} + {4064936400 7200 0 EET} + {4078332000 10800 1 EEST} + {4096386000 7200 0 EET} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Harbin b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Harbin new file mode 100644 index 00000000..dfcb5498 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Harbin @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Asia/Shanghai)]} { + LoadTimeZoneFile Asia/Shanghai +} +set TZData(:Asia/Harbin) $TZData(:Asia/Shanghai) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Hebron b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Hebron new file mode 100644 index 00000000..9049d932 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Hebron @@ -0,0 +1,277 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Hebron) { + {-9223372036854775808 8423 0 LMT} + {-2185410023 7200 0 EET} + {-933645600 10800 1 EET} + {-857358000 7200 0 EET} + {-844300800 10800 1 EET} + {-825822000 7200 0 EET} + {-812685600 10800 1 EET} + {-794199600 7200 0 EET} + {-779853600 10800 1 EET} + {-762656400 7200 0 EET} + {-748310400 10800 1 EET} + {-731127600 7200 0 EET} + {-682653600 7200 0 EET} + {-399088800 10800 1 EEST} + {-386650800 7200 0 EET} + {-368330400 10800 1 EEST} + {-355114800 7200 0 EET} + {-336790800 10800 1 EEST} + {-323654400 7200 0 EET} + {-305168400 10800 1 EEST} + {-292032000 7200 0 EET} + {-273632400 10800 1 EEST} + {-260496000 7200 0 EET} + {-242096400 10800 1 EEST} + {-228960000 7200 0 EET} + {-210560400 10800 1 EEST} + {-197424000 7200 0 EET} + {-178938000 10800 1 EEST} + {-165801600 7200 0 EET} + {-147402000 10800 1 EEST} + {-134265600 7200 0 EET} + {-115866000 10800 1 EEST} + {-102643200 7200 0 EET} + {-84330000 10800 1 EEST} + {-81313200 10800 0 IST} + {142376400 10800 1 IDT} + {150843600 7200 0 IST} + {167176800 10800 1 IDT} + {178664400 7200 0 IST} + {482277600 10800 1 IDT} + {495579600 7200 0 IST} + {516751200 10800 1 IDT} + {526424400 7200 0 IST} + {545436000 10800 1 IDT} + {558478800 7200 0 IST} + {576626400 10800 1 IDT} + {589323600 7200 0 IST} + {609890400 10800 1 IDT} + {620773200 7200 0 IST} + {638316000 10800 1 IDT} + {651618000 7200 0 IST} + {669765600 10800 1 IDT} + {683672400 7200 0 IST} + {701820000 10800 1 IDT} + {715726800 7200 0 IST} + {733701600 10800 1 IDT} + {747176400 7200 0 IST} + {765151200 10800 1 IDT} + {778021200 7200 0 IST} + {796600800 10800 1 IDT} + {810075600 7200 0 IST} + {820447200 7200 0 EET} + {828655200 10800 1 EEST} + {843170400 7200 0 EET} + {860104800 10800 1 EEST} + {874620000 7200 0 EET} + {891554400 10800 1 EEST} + {906069600 7200 0 EET} + {915141600 7200 0 EET} + {924213600 10800 1 EEST} + {939934800 7200 0 EET} + {956268000 10800 1 EEST} + {971989200 7200 0 EET} + {987717600 10800 1 EEST} + {1003438800 7200 0 EET} + {1019167200 10800 1 EEST} + {1034888400 7200 0 EET} + {1050616800 10800 1 EEST} + {1066338000 7200 0 EET} + {1082066400 10800 1 EEST} + {1096581600 7200 0 EET} + {1113516000 10800 1 EEST} + {1128380400 7200 0 EET} + {1143842400 10800 1 EEST} + {1158872400 7200 0 EET} + {1175378400 10800 1 EEST} + {1189638000 7200 0 EET} + {1206655200 10800 1 EEST} + {1220216400 7200 0 EET} + {1238104800 10800 1 EEST} + {1252015200 7200 0 EET} + {1269554400 10800 1 EEST} + {1281474000 7200 0 EET} + {1301608860 10800 1 EEST} + {1312146000 7200 0 EET} + {1314655200 10800 1 EEST} + {1317330000 7200 0 EET} + {1333058400 10800 1 EEST} + {1348178400 7200 0 EET} + {1364508000 10800 1 EEST} + {1380229200 7200 0 EET} + {1395957600 10800 1 EEST} + {1414098000 7200 0 EET} + {1427493600 10800 1 EEST} + {1445547600 7200 0 EET} + {1458943200 10800 1 EEST} + {1476997200 7200 0 EET} + {1490997600 10800 1 EEST} + {1509051600 7200 0 EET} + {1522447200 10800 1 EEST} + {1540501200 7200 0 EET} + {1553896800 10800 1 EEST} + {1571950800 7200 0 EET} + {1585346400 10800 1 EEST} + {1603400400 7200 0 EET} + {1616796000 10800 1 EEST} + {1634850000 7200 0 EET} + {1648245600 10800 1 EEST} + {1666299600 7200 0 EET} + {1680300000 10800 1 EEST} + {1698354000 7200 0 EET} + {1711749600 10800 1 EEST} + {1729803600 7200 0 EET} + {1743199200 10800 1 EEST} + {1761253200 7200 0 EET} + {1774648800 10800 1 EEST} + {1792702800 7200 0 EET} + {1806098400 10800 1 EEST} + {1824152400 7200 0 EET} + {1838152800 10800 1 EEST} + {1856206800 7200 0 EET} + {1869602400 10800 1 EEST} + {1887656400 7200 0 EET} + {1901052000 10800 1 EEST} + {1919106000 7200 0 EET} + {1932501600 10800 1 EEST} + {1950555600 7200 0 EET} + {1963951200 10800 1 EEST} + {1982005200 7200 0 EET} + {1995400800 10800 1 EEST} + {2013454800 7200 0 EET} + {2027455200 10800 1 EEST} + {2045509200 7200 0 EET} + {2058904800 10800 1 EEST} + {2076958800 7200 0 EET} + {2090354400 10800 1 EEST} + {2108408400 7200 0 EET} + {2121804000 10800 1 EEST} + {2139858000 7200 0 EET} + {2153253600 10800 1 EEST} + {2171307600 7200 0 EET} + {2184703200 10800 1 EEST} + {2202757200 7200 0 EET} + {2216757600 10800 1 EEST} + {2234811600 7200 0 EET} + {2248207200 10800 1 EEST} + {2266261200 7200 0 EET} + {2279656800 10800 1 EEST} + {2297710800 7200 0 EET} + {2311106400 10800 1 EEST} + {2329160400 7200 0 EET} + {2342556000 10800 1 EEST} + {2360610000 7200 0 EET} + {2374610400 10800 1 EEST} + {2392664400 7200 0 EET} + {2406060000 10800 1 EEST} + {2424114000 7200 0 EET} + {2437509600 10800 1 EEST} + {2455563600 7200 0 EET} + {2468959200 10800 1 EEST} + {2487013200 7200 0 EET} + {2500408800 10800 1 EEST} + {2518462800 7200 0 EET} + {2531858400 10800 1 EEST} + {2549912400 7200 0 EET} + {2563912800 10800 1 EEST} + {2581966800 7200 0 EET} + {2595362400 10800 1 EEST} + {2613416400 7200 0 EET} + {2626812000 10800 1 EEST} + {2644866000 7200 0 EET} + {2658261600 10800 1 EEST} + {2676315600 7200 0 EET} + {2689711200 10800 1 EEST} + {2707765200 7200 0 EET} + {2721765600 10800 1 EEST} + {2739819600 7200 0 EET} + {2753215200 10800 1 EEST} + {2771269200 7200 0 EET} + {2784664800 10800 1 EEST} + {2802718800 7200 0 EET} + {2816114400 10800 1 EEST} + {2834168400 7200 0 EET} + {2847564000 10800 1 EEST} + {2865618000 7200 0 EET} + {2879013600 10800 1 EEST} + {2897067600 7200 0 EET} + {2911068000 10800 1 EEST} + {2929122000 7200 0 EET} + {2942517600 10800 1 EEST} + {2960571600 7200 0 EET} + {2973967200 10800 1 EEST} + {2992021200 7200 0 EET} + {3005416800 10800 1 EEST} + {3023470800 7200 0 EET} + {3036866400 10800 1 EEST} + {3054920400 7200 0 EET} + {3068316000 10800 1 EEST} + {3086370000 7200 0 EET} + {3100370400 10800 1 EEST} + {3118424400 7200 0 EET} + {3131820000 10800 1 EEST} + {3149874000 7200 0 EET} + {3163269600 10800 1 EEST} + {3181323600 7200 0 EET} + {3194719200 10800 1 EEST} + {3212773200 7200 0 EET} + {3226168800 10800 1 EEST} + {3244222800 7200 0 EET} + {3258223200 10800 1 EEST} + {3276277200 7200 0 EET} + {3289672800 10800 1 EEST} + {3307726800 7200 0 EET} + {3321122400 10800 1 EEST} + {3339176400 7200 0 EET} + {3352572000 10800 1 EEST} + {3370626000 7200 0 EET} + {3384021600 10800 1 EEST} + {3402075600 7200 0 EET} + {3415471200 10800 1 EEST} + {3433525200 7200 0 EET} + {3447525600 10800 1 EEST} + {3465579600 7200 0 EET} + {3478975200 10800 1 EEST} + {3497029200 7200 0 EET} + {3510424800 10800 1 EEST} + {3528478800 7200 0 EET} + {3541874400 10800 1 EEST} + {3559928400 7200 0 EET} + {3573324000 10800 1 EEST} + {3591378000 7200 0 EET} + {3605378400 10800 1 EEST} + {3623432400 7200 0 EET} + {3636828000 10800 1 EEST} + {3654882000 7200 0 EET} + {3668277600 10800 1 EEST} + {3686331600 7200 0 EET} + {3699727200 10800 1 EEST} + {3717781200 7200 0 EET} + {3731176800 10800 1 EEST} + {3749230800 7200 0 EET} + {3762626400 10800 1 EEST} + {3780680400 7200 0 EET} + {3794680800 10800 1 EEST} + {3812734800 7200 0 EET} + {3826130400 10800 1 EEST} + {3844184400 7200 0 EET} + {3857580000 10800 1 EEST} + {3875634000 7200 0 EET} + {3889029600 10800 1 EEST} + {3907083600 7200 0 EET} + {3920479200 10800 1 EEST} + {3938533200 7200 0 EET} + {3951928800 10800 1 EEST} + {3969982800 7200 0 EET} + {3983983200 10800 1 EEST} + {4002037200 7200 0 EET} + {4015432800 10800 1 EEST} + {4033486800 7200 0 EET} + {4046882400 10800 1 EEST} + {4064936400 7200 0 EET} + {4078332000 10800 1 EEST} + {4096386000 7200 0 EET} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Ho_Chi_Minh b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Ho_Chi_Minh new file mode 100644 index 00000000..9da89f45 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Ho_Chi_Minh @@ -0,0 +1,14 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Ho_Chi_Minh) { + {-9223372036854775808 25600 0 LMT} + {-2004073600 25590 0 PLMT} + {-1851577590 25200 0 ICT} + {-852105600 28800 0 IDT} + {-782643600 32400 0 JST} + {-767869200 25200 0 ICT} + {-718095600 28800 0 IDT} + {-457776000 25200 0 ICT} + {-315648000 28800 0 IDT} + {171820800 25200 0 ICT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Hong_Kong b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Hong_Kong new file mode 100644 index 00000000..fcf98a6a --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Hong_Kong @@ -0,0 +1,75 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Hong_Kong) { + {-9223372036854775808 27402 0 LMT} + {-2056693002 28800 0 HKT} + {-907389000 32400 1 HKST} + {-891667800 28800 0 HKT} + {-884246400 32400 0 JST} + {-766746000 28800 0 HKT} + {-747981000 32400 1 HKST} + {-728544600 28800 0 HKT} + {-717049800 32400 1 HKST} + {-694503000 28800 0 HKT} + {-683785800 32400 1 HKST} + {-668064600 28800 0 HKT} + {-654755400 32400 1 HKST} + {-636615000 28800 0 HKT} + {-623305800 32400 1 HKST} + {-605165400 28800 0 HKT} + {-591856200 32400 1 HKST} + {-573715800 28800 0 HKT} + {-559801800 32400 1 HKST} + {-542352600 28800 0 HKT} + {-528352200 32400 1 HKST} + {-510211800 28800 0 HKT} + {-498112200 32400 1 HKST} + {-478762200 28800 0 HKT} + {-466662600 32400 1 HKST} + {-446707800 28800 0 HKT} + {-435213000 32400 1 HKST} + {-415258200 28800 0 HKT} + {-403158600 32400 1 HKST} + {-383808600 28800 0 HKT} + {-371709000 32400 1 HKST} + {-352359000 28800 0 HKT} + {-340259400 32400 1 HKST} + {-320909400 28800 0 HKT} + {-308809800 32400 1 HKST} + {-288855000 28800 0 HKT} + {-277360200 32400 1 HKST} + {-257405400 28800 0 HKT} + {-245910600 32400 1 HKST} + {-225955800 28800 0 HKT} + {-213856200 32400 1 HKST} + {-194506200 28800 0 HKT} + {-182406600 32400 1 HKST} + {-163056600 28800 0 HKT} + {-148537800 32400 1 HKST} + {-132816600 28800 0 HKT} + {-117088200 32400 1 HKST} + {-101367000 28800 0 HKT} + {-85638600 32400 1 HKST} + {-69312600 28800 0 HKT} + {-53584200 32400 1 HKST} + {-37863000 28800 0 HKT} + {-22134600 32400 1 HKST} + {-6413400 28800 0 HKT} + {9315000 32400 1 HKST} + {25036200 28800 0 HKT} + {40764600 32400 1 HKST} + {56485800 28800 0 HKT} + {72214200 32400 1 HKST} + {88540200 28800 0 HKT} + {104268600 32400 1 HKST} + {119989800 28800 0 HKT} + {126041400 32400 1 HKST} + {135714600 32400 1 HKST} + {151439400 28800 0 HKT} + {167167800 32400 1 HKST} + {182889000 28800 0 HKT} + {198617400 32400 1 HKST} + {214338600 28800 0 HKT} + {295385400 32400 1 HKST} + {309292200 28800 0 HKT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Hovd b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Hovd new file mode 100644 index 00000000..3d200a6a --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Hovd @@ -0,0 +1,221 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Hovd) { + {-9223372036854775808 21996 0 LMT} + {-2032927596 21600 0 HOVT} + {252439200 25200 0 HOVT} + {417978000 28800 1 HOVST} + {433785600 25200 0 HOVT} + {449600400 28800 1 HOVST} + {465321600 25200 0 HOVT} + {481050000 28800 1 HOVST} + {496771200 25200 0 HOVT} + {512499600 28800 1 HOVST} + {528220800 25200 0 HOVT} + {543949200 28800 1 HOVST} + {559670400 25200 0 HOVT} + {575398800 28800 1 HOVST} + {591120000 25200 0 HOVT} + {606848400 28800 1 HOVST} + {622569600 25200 0 HOVT} + {638298000 28800 1 HOVST} + {654624000 25200 0 HOVT} + {670352400 28800 1 HOVST} + {686073600 25200 0 HOVT} + {701802000 28800 1 HOVST} + {717523200 25200 0 HOVT} + {733251600 28800 1 HOVST} + {748972800 25200 0 HOVT} + {764701200 28800 1 HOVST} + {780422400 25200 0 HOVT} + {796150800 28800 1 HOVST} + {811872000 25200 0 HOVT} + {828205200 28800 1 HOVST} + {843926400 25200 0 HOVT} + {859654800 28800 1 HOVST} + {875376000 25200 0 HOVT} + {891104400 28800 1 HOVST} + {906825600 25200 0 HOVT} + {988398000 28800 1 HOVST} + {1001700000 25200 0 HOVT} + {1017428400 28800 1 HOVST} + {1033149600 25200 0 HOVT} + {1048878000 28800 1 HOVST} + {1064599200 25200 0 HOVT} + {1080327600 28800 1 HOVST} + {1096048800 25200 0 HOVT} + {1111777200 28800 1 HOVST} + {1127498400 25200 0 HOVT} + {1143226800 28800 1 HOVST} + {1159552800 25200 0 HOVT} + {1427482800 28800 1 HOVST} + {1443196800 25200 0 HOVT} + {1458932400 28800 1 HOVST} + {1474646400 25200 0 HOVT} + {1490382000 28800 1 HOVST} + {1506700800 25200 0 HOVT} + {1522436400 28800 1 HOVST} + {1538150400 25200 0 HOVT} + {1553886000 28800 1 HOVST} + {1569600000 25200 0 HOVT} + {1585335600 28800 1 HOVST} + {1601049600 25200 0 HOVT} + {1616785200 28800 1 HOVST} + {1632499200 25200 0 HOVT} + {1648234800 28800 1 HOVST} + {1663948800 25200 0 HOVT} + {1679684400 28800 1 HOVST} + {1696003200 25200 0 HOVT} + {1711738800 28800 1 HOVST} + {1727452800 25200 0 HOVT} + {1743188400 28800 1 HOVST} + {1758902400 25200 0 HOVT} + {1774638000 28800 1 HOVST} + {1790352000 25200 0 HOVT} + {1806087600 28800 1 HOVST} + {1821801600 25200 0 HOVT} + {1837537200 28800 1 HOVST} + {1853856000 25200 0 HOVT} + {1869591600 28800 1 HOVST} + {1885305600 25200 0 HOVT} + {1901041200 28800 1 HOVST} + {1916755200 25200 0 HOVT} + {1932490800 28800 1 HOVST} + {1948204800 25200 0 HOVT} + {1963940400 28800 1 HOVST} + {1979654400 25200 0 HOVT} + {1995390000 28800 1 HOVST} + {2011104000 25200 0 HOVT} + {2026839600 28800 1 HOVST} + {2043158400 25200 0 HOVT} + {2058894000 28800 1 HOVST} + {2074608000 25200 0 HOVT} + {2090343600 28800 1 HOVST} + {2106057600 25200 0 HOVT} + {2121793200 28800 1 HOVST} + {2137507200 25200 0 HOVT} + {2153242800 28800 1 HOVST} + {2168956800 25200 0 HOVT} + {2184692400 28800 1 HOVST} + {2200406400 25200 0 HOVT} + {2216746800 28800 1 HOVST} + {2232460800 25200 0 HOVT} + {2248196400 28800 1 HOVST} + {2263910400 25200 0 HOVT} + {2279646000 28800 1 HOVST} + {2295360000 25200 0 HOVT} + {2311095600 28800 1 HOVST} + {2326809600 25200 0 HOVT} + {2342545200 28800 1 HOVST} + {2358259200 25200 0 HOVT} + {2373994800 28800 1 HOVST} + {2390313600 25200 0 HOVT} + {2406049200 28800 1 HOVST} + {2421763200 25200 0 HOVT} + {2437498800 28800 1 HOVST} + {2453212800 25200 0 HOVT} + {2468948400 28800 1 HOVST} + {2484662400 25200 0 HOVT} + {2500398000 28800 1 HOVST} + {2516112000 25200 0 HOVT} + {2531847600 28800 1 HOVST} + {2547561600 25200 0 HOVT} + {2563297200 28800 1 HOVST} + {2579616000 25200 0 HOVT} + {2595351600 28800 1 HOVST} + {2611065600 25200 0 HOVT} + {2626801200 28800 1 HOVST} + {2642515200 25200 0 HOVT} + {2658250800 28800 1 HOVST} + {2673964800 25200 0 HOVT} + {2689700400 28800 1 HOVST} + {2705414400 25200 0 HOVT} + {2721150000 28800 1 HOVST} + {2737468800 25200 0 HOVT} + {2753204400 28800 1 HOVST} + {2768918400 25200 0 HOVT} + {2784654000 28800 1 HOVST} + {2800368000 25200 0 HOVT} + {2816103600 28800 1 HOVST} + {2831817600 25200 0 HOVT} + {2847553200 28800 1 HOVST} + {2863267200 25200 0 HOVT} + {2879002800 28800 1 HOVST} + {2894716800 25200 0 HOVT} + {2910452400 28800 1 HOVST} + {2926771200 25200 0 HOVT} + {2942506800 28800 1 HOVST} + {2958220800 25200 0 HOVT} + {2973956400 28800 1 HOVST} + {2989670400 25200 0 HOVT} + {3005406000 28800 1 HOVST} + {3021120000 25200 0 HOVT} + {3036855600 28800 1 HOVST} + {3052569600 25200 0 HOVT} + {3068305200 28800 1 HOVST} + {3084019200 25200 0 HOVT} + {3100359600 28800 1 HOVST} + {3116073600 25200 0 HOVT} + {3131809200 28800 1 HOVST} + {3147523200 25200 0 HOVT} + {3163258800 28800 1 HOVST} + {3178972800 25200 0 HOVT} + {3194708400 28800 1 HOVST} + {3210422400 25200 0 HOVT} + {3226158000 28800 1 HOVST} + {3241872000 25200 0 HOVT} + {3257607600 28800 1 HOVST} + {3273926400 25200 0 HOVT} + {3289662000 28800 1 HOVST} + {3305376000 25200 0 HOVT} + {3321111600 28800 1 HOVST} + {3336825600 25200 0 HOVT} + {3352561200 28800 1 HOVST} + {3368275200 25200 0 HOVT} + {3384010800 28800 1 HOVST} + {3399724800 25200 0 HOVT} + {3415460400 28800 1 HOVST} + {3431174400 25200 0 HOVT} + {3446910000 28800 1 HOVST} + {3463228800 25200 0 HOVT} + {3478964400 28800 1 HOVST} + {3494678400 25200 0 HOVT} + {3510414000 28800 1 HOVST} + {3526128000 25200 0 HOVT} + {3541863600 28800 1 HOVST} + {3557577600 25200 0 HOVT} + {3573313200 28800 1 HOVST} + {3589027200 25200 0 HOVT} + {3604762800 28800 1 HOVST} + {3621081600 25200 0 HOVT} + {3636817200 28800 1 HOVST} + {3652531200 25200 0 HOVT} + {3668266800 28800 1 HOVST} + {3683980800 25200 0 HOVT} + {3699716400 28800 1 HOVST} + {3715430400 25200 0 HOVT} + {3731166000 28800 1 HOVST} + {3746880000 25200 0 HOVT} + {3762615600 28800 1 HOVST} + {3778329600 25200 0 HOVT} + {3794065200 28800 1 HOVST} + {3810384000 25200 0 HOVT} + {3826119600 28800 1 HOVST} + {3841833600 25200 0 HOVT} + {3857569200 28800 1 HOVST} + {3873283200 25200 0 HOVT} + {3889018800 28800 1 HOVST} + {3904732800 25200 0 HOVT} + {3920468400 28800 1 HOVST} + {3936182400 25200 0 HOVT} + {3951918000 28800 1 HOVST} + {3967632000 25200 0 HOVT} + {3983972400 28800 1 HOVST} + {3999686400 25200 0 HOVT} + {4015422000 28800 1 HOVST} + {4031136000 25200 0 HOVT} + {4046871600 28800 1 HOVST} + {4062585600 25200 0 HOVT} + {4078321200 28800 1 HOVST} + {4094035200 25200 0 HOVT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Irkutsk b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Irkutsk new file mode 100644 index 00000000..08e5798b --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Irkutsk @@ -0,0 +1,72 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Irkutsk) { + {-9223372036854775808 25025 0 LMT} + {-2840165825 25025 0 IMT} + {-1575874625 25200 0 IRKT} + {-1247554800 28800 0 IRKMMTT} + {354902400 32400 1 IRKST} + {370710000 28800 0 IRKT} + {386438400 32400 1 IRKST} + {402246000 28800 0 IRKT} + {417974400 32400 1 IRKST} + {433782000 28800 0 IRKT} + {449596800 32400 1 IRKST} + {465328800 28800 0 IRKT} + {481053600 32400 1 IRKST} + {496778400 28800 0 IRKT} + {512503200 32400 1 IRKST} + {528228000 28800 0 IRKT} + {543952800 32400 1 IRKST} + {559677600 28800 0 IRKT} + {575402400 32400 1 IRKST} + {591127200 28800 0 IRKT} + {606852000 32400 1 IRKST} + {622576800 28800 0 IRKT} + {638301600 32400 1 IRKST} + {654631200 28800 0 IRKT} + {670356000 25200 0 IRKMMTT} + {670359600 28800 1 IRKST} + {686084400 25200 0 IRKT} + {695761200 28800 0 IRKMMTT} + {701794800 32400 1 IRKST} + {717516000 28800 0 IRKT} + {733255200 32400 1 IRKST} + {748980000 28800 0 IRKT} + {764704800 32400 1 IRKST} + {780429600 28800 0 IRKT} + {796154400 32400 1 IRKST} + {811879200 28800 0 IRKT} + {828208800 32400 1 IRKST} + {846352800 28800 0 IRKT} + {859658400 32400 1 IRKST} + {877802400 28800 0 IRKT} + {891108000 32400 1 IRKST} + {909252000 28800 0 IRKT} + {922557600 32400 1 IRKST} + {941306400 28800 0 IRKT} + {954007200 32400 1 IRKST} + {972756000 28800 0 IRKT} + {985456800 32400 1 IRKST} + {1004205600 28800 0 IRKT} + {1017511200 32400 1 IRKST} + {1035655200 28800 0 IRKT} + {1048960800 32400 1 IRKST} + {1067104800 28800 0 IRKT} + {1080410400 32400 1 IRKST} + {1099159200 28800 0 IRKT} + {1111860000 32400 1 IRKST} + {1130608800 28800 0 IRKT} + {1143309600 32400 1 IRKST} + {1162058400 28800 0 IRKT} + {1174759200 32400 1 IRKST} + {1193508000 28800 0 IRKT} + {1206813600 32400 1 IRKST} + {1224957600 28800 0 IRKT} + {1238263200 32400 1 IRKST} + {1256407200 28800 0 IRKT} + {1269712800 32400 1 IRKST} + {1288461600 28800 0 IRKT} + {1301162400 32400 0 IRKT} + {1414256400 28800 0 IRKT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Istanbul b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Istanbul new file mode 100644 index 00000000..85b3fc22 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Istanbul @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Europe/Istanbul)]} { + LoadTimeZoneFile Europe/Istanbul +} +set TZData(:Asia/Istanbul) $TZData(:Europe/Istanbul) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Jakarta b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Jakarta new file mode 100644 index 00000000..75cd659b --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Jakarta @@ -0,0 +1,13 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Jakarta) { + {-9223372036854775808 25632 0 LMT} + {-3231299232 25632 0 BMT} + {-1451719200 26400 0 JAVT} + {-1172906400 27000 0 WIB} + {-876641400 32400 0 JST} + {-766054800 27000 0 WIB} + {-683883000 28800 0 WIB} + {-620812800 27000 0 WIB} + {-189415800 25200 0 WIB} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Jayapura b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Jayapura new file mode 100644 index 00000000..f3a4c446 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Jayapura @@ -0,0 +1,8 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Jayapura) { + {-9223372036854775808 33768 0 LMT} + {-1172913768 32400 0 WIT} + {-799491600 34200 0 ACST} + {-189423000 32400 0 WIT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Jerusalem b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Jerusalem new file mode 100644 index 00000000..27149633 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Jerusalem @@ -0,0 +1,272 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Jerusalem) { + {-9223372036854775808 8454 0 LMT} + {-2840149254 8440 0 JMT} + {-1641003640 7200 0 IST} + {-933645600 10800 1 IDT} + {-857358000 7200 0 IST} + {-844300800 10800 1 IDT} + {-825822000 7200 0 IST} + {-812685600 10800 1 IDT} + {-794199600 7200 0 IST} + {-779853600 10800 1 IDT} + {-762656400 7200 0 IST} + {-748310400 10800 1 IDT} + {-731127600 7200 0 IST} + {-681962400 14400 1 IDDT} + {-673243200 10800 1 IDT} + {-667962000 7200 0 IST} + {-652327200 10800 1 IDT} + {-636426000 7200 0 IST} + {-622087200 10800 1 IDT} + {-608947200 7200 0 IST} + {-591847200 10800 1 IDT} + {-572486400 7200 0 IST} + {-558576000 10800 1 IDT} + {-542851200 7200 0 IST} + {-527731200 10800 1 IDT} + {-514425600 7200 0 IST} + {-490845600 10800 1 IDT} + {-482986800 7200 0 IST} + {-459475200 10800 1 IDT} + {-451537200 7200 0 IST} + {-428551200 10800 1 IDT} + {-418262400 7200 0 IST} + {-400032000 10800 1 IDT} + {-387428400 7200 0 IST} + {142380000 10800 1 IDT} + {150843600 7200 0 IST} + {167176800 10800 1 IDT} + {178664400 7200 0 IST} + {482277600 10800 1 IDT} + {495579600 7200 0 IST} + {516751200 10800 1 IDT} + {526424400 7200 0 IST} + {545436000 10800 1 IDT} + {558478800 7200 0 IST} + {576626400 10800 1 IDT} + {589323600 7200 0 IST} + {609890400 10800 1 IDT} + {620773200 7200 0 IST} + {638316000 10800 1 IDT} + {651618000 7200 0 IST} + {669765600 10800 1 IDT} + {683672400 7200 0 IST} + {701820000 10800 1 IDT} + {715726800 7200 0 IST} + {733701600 10800 1 IDT} + {747176400 7200 0 IST} + {765151200 10800 1 IDT} + {778021200 7200 0 IST} + {796600800 10800 1 IDT} + {810075600 7200 0 IST} + {826840800 10800 1 IDT} + {842821200 7200 0 IST} + {858895200 10800 1 IDT} + {874184400 7200 0 IST} + {890344800 10800 1 IDT} + {905029200 7200 0 IST} + {923011200 10800 1 IDT} + {936313200 7200 0 IST} + {955670400 10800 1 IDT} + {970783200 7200 0 IST} + {986770800 10800 1 IDT} + {1001282400 7200 0 IST} + {1017356400 10800 1 IDT} + {1033941600 7200 0 IST} + {1048806000 10800 1 IDT} + {1065132000 7200 0 IST} + {1081292400 10800 1 IDT} + {1095804000 7200 0 IST} + {1112313600 10800 1 IDT} + {1128812400 7200 0 IST} + {1143763200 10800 1 IDT} + {1159657200 7200 0 IST} + {1175212800 10800 1 IDT} + {1189897200 7200 0 IST} + {1206662400 10800 1 IDT} + {1223161200 7200 0 IST} + {1238112000 10800 1 IDT} + {1254006000 7200 0 IST} + {1269561600 10800 1 IDT} + {1284246000 7200 0 IST} + {1301616000 10800 1 IDT} + {1317510000 7200 0 IST} + {1333065600 10800 1 IDT} + {1348354800 7200 0 IST} + {1364515200 10800 1 IDT} + {1382828400 7200 0 IST} + {1395964800 10800 1 IDT} + {1414278000 7200 0 IST} + {1427414400 10800 1 IDT} + {1445727600 7200 0 IST} + {1458864000 10800 1 IDT} + {1477782000 7200 0 IST} + {1490313600 10800 1 IDT} + {1509231600 7200 0 IST} + {1521763200 10800 1 IDT} + {1540681200 7200 0 IST} + {1553817600 10800 1 IDT} + {1572130800 7200 0 IST} + {1585267200 10800 1 IDT} + {1603580400 7200 0 IST} + {1616716800 10800 1 IDT} + {1635634800 7200 0 IST} + {1648166400 10800 1 IDT} + {1667084400 7200 0 IST} + {1679616000 10800 1 IDT} + {1698534000 7200 0 IST} + {1711670400 10800 1 IDT} + {1729983600 7200 0 IST} + {1743120000 10800 1 IDT} + {1761433200 7200 0 IST} + {1774569600 10800 1 IDT} + {1792882800 7200 0 IST} + {1806019200 10800 1 IDT} + {1824937200 7200 0 IST} + {1837468800 10800 1 IDT} + {1856386800 7200 0 IST} + {1868918400 10800 1 IDT} + {1887836400 7200 0 IST} + {1900972800 10800 1 IDT} + {1919286000 7200 0 IST} + {1932422400 10800 1 IDT} + {1950735600 7200 0 IST} + {1963872000 10800 1 IDT} + {1982790000 7200 0 IST} + {1995321600 10800 1 IDT} + {2014239600 7200 0 IST} + {2026771200 10800 1 IDT} + {2045689200 7200 0 IST} + {2058220800 10800 1 IDT} + {2077138800 7200 0 IST} + {2090275200 10800 1 IDT} + {2108588400 7200 0 IST} + {2121724800 10800 1 IDT} + {2140038000 7200 0 IST} + {2153174400 10800 1 IDT} + {2172092400 7200 0 IST} + {2184624000 10800 1 IDT} + {2203542000 7200 0 IST} + {2216073600 10800 1 IDT} + {2234991600 7200 0 IST} + {2248128000 10800 1 IDT} + {2266441200 7200 0 IST} + {2279577600 10800 1 IDT} + {2297890800 7200 0 IST} + {2311027200 10800 1 IDT} + {2329340400 7200 0 IST} + {2342476800 10800 1 IDT} + {2361394800 7200 0 IST} + {2373926400 10800 1 IDT} + {2392844400 7200 0 IST} + {2405376000 10800 1 IDT} + {2424294000 7200 0 IST} + {2437430400 10800 1 IDT} + {2455743600 7200 0 IST} + {2468880000 10800 1 IDT} + {2487193200 7200 0 IST} + {2500329600 10800 1 IDT} + {2519247600 7200 0 IST} + {2531779200 10800 1 IDT} + {2550697200 7200 0 IST} + {2563228800 10800 1 IDT} + {2582146800 7200 0 IST} + {2595283200 10800 1 IDT} + {2613596400 7200 0 IST} + {2626732800 10800 1 IDT} + {2645046000 7200 0 IST} + {2658182400 10800 1 IDT} + {2676495600 7200 0 IST} + {2689632000 10800 1 IDT} + {2708550000 7200 0 IST} + {2721081600 10800 1 IDT} + {2739999600 7200 0 IST} + {2752531200 10800 1 IDT} + {2771449200 7200 0 IST} + {2784585600 10800 1 IDT} + {2802898800 7200 0 IST} + {2816035200 10800 1 IDT} + {2834348400 7200 0 IST} + {2847484800 10800 1 IDT} + {2866402800 7200 0 IST} + {2878934400 10800 1 IDT} + {2897852400 7200 0 IST} + {2910384000 10800 1 IDT} + {2929302000 7200 0 IST} + {2941833600 10800 1 IDT} + {2960751600 7200 0 IST} + {2973888000 10800 1 IDT} + {2992201200 7200 0 IST} + {3005337600 10800 1 IDT} + {3023650800 7200 0 IST} + {3036787200 10800 1 IDT} + {3055705200 7200 0 IST} + {3068236800 10800 1 IDT} + {3087154800 7200 0 IST} + {3099686400 10800 1 IDT} + {3118604400 7200 0 IST} + {3131740800 10800 1 IDT} + {3150054000 7200 0 IST} + {3163190400 10800 1 IDT} + {3181503600 7200 0 IST} + {3194640000 10800 1 IDT} + {3212953200 7200 0 IST} + {3226089600 10800 1 IDT} + {3245007600 7200 0 IST} + {3257539200 10800 1 IDT} + {3276457200 7200 0 IST} + {3288988800 10800 1 IDT} + {3307906800 7200 0 IST} + {3321043200 10800 1 IDT} + {3339356400 7200 0 IST} + {3352492800 10800 1 IDT} + {3370806000 7200 0 IST} + {3383942400 10800 1 IDT} + {3402860400 7200 0 IST} + {3415392000 10800 1 IDT} + {3434310000 7200 0 IST} + {3446841600 10800 1 IDT} + {3465759600 7200 0 IST} + {3478896000 10800 1 IDT} + {3497209200 7200 0 IST} + {3510345600 10800 1 IDT} + {3528658800 7200 0 IST} + {3541795200 10800 1 IDT} + {3560108400 7200 0 IST} + {3573244800 10800 1 IDT} + {3592162800 7200 0 IST} + {3604694400 10800 1 IDT} + {3623612400 7200 0 IST} + {3636144000 10800 1 IDT} + {3655062000 7200 0 IST} + {3668198400 10800 1 IDT} + {3686511600 7200 0 IST} + {3699648000 10800 1 IDT} + {3717961200 7200 0 IST} + {3731097600 10800 1 IDT} + {3750015600 7200 0 IST} + {3762547200 10800 1 IDT} + {3781465200 7200 0 IST} + {3793996800 10800 1 IDT} + {3812914800 7200 0 IST} + {3825446400 10800 1 IDT} + {3844364400 7200 0 IST} + {3857500800 10800 1 IDT} + {3875814000 7200 0 IST} + {3888950400 10800 1 IDT} + {3907263600 7200 0 IST} + {3920400000 10800 1 IDT} + {3939318000 7200 0 IST} + {3951849600 10800 1 IDT} + {3970767600 7200 0 IST} + {3983299200 10800 1 IDT} + {4002217200 7200 0 IST} + {4015353600 10800 1 IDT} + {4033666800 7200 0 IST} + {4046803200 10800 1 IDT} + {4065116400 7200 0 IST} + {4078252800 10800 1 IDT} + {4096566000 7200 0 IST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Kabul b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Kabul new file mode 100644 index 00000000..33d7282d --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Kabul @@ -0,0 +1,7 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Kabul) { + {-9223372036854775808 16608 0 LMT} + {-2524538208 14400 0 AFT} + {-788932800 16200 0 AFT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Kamchatka b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Kamchatka new file mode 100644 index 00000000..82abcfa0 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Kamchatka @@ -0,0 +1,71 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Kamchatka) { + {-9223372036854775808 38076 0 LMT} + {-1487759676 39600 0 PETT} + {-1247569200 43200 0 PETMMTT} + {354888000 46800 1 PETST} + {370695600 43200 0 PETT} + {386424000 46800 1 PETST} + {402231600 43200 0 PETT} + {417960000 46800 1 PETST} + {433767600 43200 0 PETT} + {449582400 46800 1 PETST} + {465314400 43200 0 PETT} + {481039200 46800 1 PETST} + {496764000 43200 0 PETT} + {512488800 46800 1 PETST} + {528213600 43200 0 PETT} + {543938400 46800 1 PETST} + {559663200 43200 0 PETT} + {575388000 46800 1 PETST} + {591112800 43200 0 PETT} + {606837600 46800 1 PETST} + {622562400 43200 0 PETT} + {638287200 46800 1 PETST} + {654616800 43200 0 PETT} + {670341600 39600 0 PETMMTT} + {670345200 43200 1 PETST} + {686070000 39600 0 PETT} + {695746800 43200 0 PETMMTT} + {701780400 46800 1 PETST} + {717501600 43200 0 PETT} + {733240800 46800 1 PETST} + {748965600 43200 0 PETT} + {764690400 46800 1 PETST} + {780415200 43200 0 PETT} + {796140000 46800 1 PETST} + {811864800 43200 0 PETT} + {828194400 46800 1 PETST} + {846338400 43200 0 PETT} + {859644000 46800 1 PETST} + {877788000 43200 0 PETT} + {891093600 46800 1 PETST} + {909237600 43200 0 PETT} + {922543200 46800 1 PETST} + {941292000 43200 0 PETT} + {953992800 46800 1 PETST} + {972741600 43200 0 PETT} + {985442400 46800 1 PETST} + {1004191200 43200 0 PETT} + {1017496800 46800 1 PETST} + {1035640800 43200 0 PETT} + {1048946400 46800 1 PETST} + {1067090400 43200 0 PETT} + {1080396000 46800 1 PETST} + {1099144800 43200 0 PETT} + {1111845600 46800 1 PETST} + {1130594400 43200 0 PETT} + {1143295200 46800 1 PETST} + {1162044000 43200 0 PETT} + {1174744800 46800 1 PETST} + {1193493600 43200 0 PETT} + {1206799200 46800 1 PETST} + {1224943200 43200 0 PETT} + {1238248800 46800 1 PETST} + {1256392800 43200 0 PETT} + {1269698400 39600 0 PETMMTT} + {1269702000 43200 1 PETST} + {1288450800 39600 0 PETT} + {1301151600 43200 0 PETT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Karachi b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Karachi new file mode 100644 index 00000000..3faa31e3 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Karachi @@ -0,0 +1,16 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Karachi) { + {-9223372036854775808 16092 0 LMT} + {-1988166492 19800 0 IST} + {-862637400 23400 1 IST} + {-764145000 19800 0 IST} + {-576135000 18000 0 KART} + {38775600 18000 0 PKT} + {1018119660 21600 1 PKST} + {1033840860 18000 0 PKT} + {1212260400 21600 1 PKST} + {1225476000 18000 0 PKT} + {1239735600 21600 1 PKST} + {1257012000 18000 0 PKT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Kashgar b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Kashgar new file mode 100644 index 00000000..f67cbf13 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Kashgar @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Asia/Urumqi)]} { + LoadTimeZoneFile Asia/Urumqi +} +set TZData(:Asia/Kashgar) $TZData(:Asia/Urumqi) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Kathmandu b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Kathmandu new file mode 100644 index 00000000..dbec1f07 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Kathmandu @@ -0,0 +1,7 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Kathmandu) { + {-9223372036854775808 20476 0 LMT} + {-1577943676 19800 0 IST} + {504901800 20700 0 NPT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Katmandu b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Katmandu new file mode 100644 index 00000000..2d6d0605 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Katmandu @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Asia/Kathmandu)]} { + LoadTimeZoneFile Asia/Kathmandu +} +set TZData(:Asia/Katmandu) $TZData(:Asia/Kathmandu) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Khandyga b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Khandyga new file mode 100644 index 00000000..b2dc97a5 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Khandyga @@ -0,0 +1,73 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Khandyga) { + {-9223372036854775808 32533 0 LMT} + {-1579424533 28800 0 YAKT} + {-1247558400 32400 0 YAKMMTT} + {354898800 36000 1 YAKST} + {370706400 32400 0 YAKT} + {386434800 36000 1 YAKST} + {402242400 32400 0 YAKT} + {417970800 36000 1 YAKST} + {433778400 32400 0 YAKT} + {449593200 36000 1 YAKST} + {465325200 32400 0 YAKT} + {481050000 36000 1 YAKST} + {496774800 32400 0 YAKT} + {512499600 36000 1 YAKST} + {528224400 32400 0 YAKT} + {543949200 36000 1 YAKST} + {559674000 32400 0 YAKT} + {575398800 36000 1 YAKST} + {591123600 32400 0 YAKT} + {606848400 36000 1 YAKST} + {622573200 32400 0 YAKT} + {638298000 36000 1 YAKST} + {654627600 32400 0 YAKT} + {670352400 28800 0 YAKMMTT} + {670356000 32400 1 YAKST} + {686080800 28800 0 YAKT} + {695757600 32400 0 YAKMMTT} + {701791200 36000 1 YAKST} + {717512400 32400 0 YAKT} + {733251600 36000 1 YAKST} + {748976400 32400 0 YAKT} + {764701200 36000 1 YAKST} + {780426000 32400 0 YAKT} + {796150800 36000 1 YAKST} + {811875600 32400 0 YAKT} + {828205200 36000 1 YAKST} + {846349200 32400 0 YAKT} + {859654800 36000 1 YAKST} + {877798800 32400 0 YAKT} + {891104400 36000 1 YAKST} + {909248400 32400 0 YAKT} + {922554000 36000 1 YAKST} + {941302800 32400 0 YAKT} + {954003600 36000 1 YAKST} + {972752400 32400 0 YAKT} + {985453200 36000 1 YAKST} + {1004202000 32400 0 YAKT} + {1017507600 36000 1 YAKST} + {1035651600 32400 0 YAKT} + {1048957200 36000 1 YAKST} + {1067101200 32400 0 YAKT} + {1072882800 36000 0 VLAMMTT} + {1080403200 39600 1 VLAST} + {1099152000 36000 0 VLAT} + {1111852800 39600 1 VLAST} + {1130601600 36000 0 VLAT} + {1143302400 39600 1 VLAST} + {1162051200 36000 0 VLAT} + {1174752000 39600 1 VLAST} + {1193500800 36000 0 VLAT} + {1206806400 39600 1 VLAST} + {1224950400 36000 0 VLAT} + {1238256000 39600 1 VLAST} + {1256400000 36000 0 VLAT} + {1269705600 39600 1 VLAST} + {1288454400 36000 0 VLAT} + {1301155200 39600 0 VLAT} + {1315832400 36000 0 YAKT} + {1414252800 32400 0 YAKT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Kolkata b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Kolkata new file mode 100644 index 00000000..a87bf316 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Kolkata @@ -0,0 +1,10 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Kolkata) { + {-9223372036854775808 21208 0 LMT} + {-2840162008 21200 0 HMT} + {-891582800 23400 0 BURT} + {-872058600 19800 0 IST} + {-862637400 23400 1 IST} + {-764145000 19800 0 IST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Krasnoyarsk b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Krasnoyarsk new file mode 100644 index 00000000..17ea6c0d --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Krasnoyarsk @@ -0,0 +1,71 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Krasnoyarsk) { + {-9223372036854775808 22286 0 LMT} + {-1577513486 21600 0 KRAT} + {-1247551200 25200 0 KRAMMTT} + {354906000 28800 1 KRAST} + {370713600 25200 0 KRAT} + {386442000 28800 1 KRAST} + {402249600 25200 0 KRAT} + {417978000 28800 1 KRAST} + {433785600 25200 0 KRAT} + {449600400 28800 1 KRAST} + {465332400 25200 0 KRAT} + {481057200 28800 1 KRAST} + {496782000 25200 0 KRAT} + {512506800 28800 1 KRAST} + {528231600 25200 0 KRAT} + {543956400 28800 1 KRAST} + {559681200 25200 0 KRAT} + {575406000 28800 1 KRAST} + {591130800 25200 0 KRAT} + {606855600 28800 1 KRAST} + {622580400 25200 0 KRAT} + {638305200 28800 1 KRAST} + {654634800 25200 0 KRAT} + {670359600 21600 0 KRAMMTT} + {670363200 25200 1 KRAST} + {686088000 21600 0 KRAT} + {695764800 25200 0 KRAMMTT} + {701798400 28800 1 KRAST} + {717519600 25200 0 KRAT} + {733258800 28800 1 KRAST} + {748983600 25200 0 KRAT} + {764708400 28800 1 KRAST} + {780433200 25200 0 KRAT} + {796158000 28800 1 KRAST} + {811882800 25200 0 KRAT} + {828212400 28800 1 KRAST} + {846356400 25200 0 KRAT} + {859662000 28800 1 KRAST} + {877806000 25200 0 KRAT} + {891111600 28800 1 KRAST} + {909255600 25200 0 KRAT} + {922561200 28800 1 KRAST} + {941310000 25200 0 KRAT} + {954010800 28800 1 KRAST} + {972759600 25200 0 KRAT} + {985460400 28800 1 KRAST} + {1004209200 25200 0 KRAT} + {1017514800 28800 1 KRAST} + {1035658800 25200 0 KRAT} + {1048964400 28800 1 KRAST} + {1067108400 25200 0 KRAT} + {1080414000 28800 1 KRAST} + {1099162800 25200 0 KRAT} + {1111863600 28800 1 KRAST} + {1130612400 25200 0 KRAT} + {1143313200 28800 1 KRAST} + {1162062000 25200 0 KRAT} + {1174762800 28800 1 KRAST} + {1193511600 25200 0 KRAT} + {1206817200 28800 1 KRAST} + {1224961200 25200 0 KRAT} + {1238266800 28800 1 KRAST} + {1256410800 25200 0 KRAT} + {1269716400 28800 1 KRAST} + {1288465200 25200 0 KRAT} + {1301166000 28800 0 KRAT} + {1414260000 25200 0 KRAT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Kuala_Lumpur b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Kuala_Lumpur new file mode 100644 index 00000000..7a54bd6e --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Kuala_Lumpur @@ -0,0 +1,13 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Kuala_Lumpur) { + {-9223372036854775808 24406 0 LMT} + {-2177477206 24925 0 SMT} + {-2038200925 25200 0 MALT} + {-1167634800 26400 1 MALST} + {-1073028000 26400 0 MALT} + {-894180000 27000 0 MALT} + {-879665400 32400 0 JST} + {-767005200 27000 0 MALT} + {378664200 28800 0 MYT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Kuching b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Kuching new file mode 100644 index 00000000..0f9110c6 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Kuching @@ -0,0 +1,24 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Kuching) { + {-9223372036854775808 26480 0 LMT} + {-1383463280 27000 0 BORT} + {-1167636600 28800 0 BORT} + {-1082448000 30000 1 BORTST} + {-1074586800 28800 0 BORT} + {-1050825600 30000 1 BORTST} + {-1042964400 28800 0 BORT} + {-1019289600 30000 1 BORTST} + {-1011428400 28800 0 BORT} + {-987753600 30000 1 BORTST} + {-979892400 28800 0 BORT} + {-956217600 30000 1 BORTST} + {-948356400 28800 0 BORT} + {-924595200 30000 1 BORTST} + {-916734000 28800 0 BORT} + {-893059200 30000 1 BORTST} + {-885198000 28800 0 BORT} + {-879667200 32400 0 JST} + {-767005200 28800 0 BORT} + {378662400 28800 0 MYT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Kuwait b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Kuwait new file mode 100644 index 00000000..e618c56c --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Kuwait @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Asia/Riyadh)]} { + LoadTimeZoneFile Asia/Riyadh +} +set TZData(:Asia/Kuwait) $TZData(:Asia/Riyadh) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Macao b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Macao new file mode 100644 index 00000000..6e972ffa --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Macao @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Asia/Macau)]} { + LoadTimeZoneFile Asia/Macau +} +set TZData(:Asia/Macao) $TZData(:Asia/Macau) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Macau b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Macau new file mode 100644 index 00000000..9d4abfea --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Macau @@ -0,0 +1,46 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Macau) { + {-9223372036854775808 27260 0 LMT} + {-1830411260 28800 0 MOT} + {-277360200 32400 1 MOST} + {-257405400 28800 0 MOT} + {-245910600 32400 1 MOST} + {-225955800 28800 0 MOT} + {-214473600 32400 1 MOST} + {-194506200 28800 0 MOT} + {-182406600 32400 1 MOST} + {-163056600 28800 0 MOT} + {-150969600 32400 1 MOST} + {-131619600 28800 0 MOT} + {-117088200 32400 1 MOST} + {-101367000 28800 0 MOT} + {-85638600 32400 1 MOST} + {-69312600 28800 0 MOT} + {-53584200 32400 1 MOST} + {-37863000 28800 0 MOT} + {-22134600 32400 1 MOST} + {-6413400 28800 0 MOT} + {9315000 32400 1 MOST} + {25036200 28800 0 MOT} + {40764600 32400 1 MOST} + {56485800 28800 0 MOT} + {72201600 32400 1 MOST} + {87922800 28800 0 MOT} + {103651200 32400 1 MOST} + {119977200 28800 0 MOT} + {135705600 32400 1 MOST} + {151439400 28800 0 MOT} + {167167800 32400 1 MOST} + {182889000 28800 0 MOT} + {198617400 32400 1 MOST} + {214338600 28800 0 MOT} + {230067000 32400 1 MOST} + {245788200 28800 0 MOT} + {261504000 32400 1 MOST} + {277225200 28800 0 MOT} + {292953600 32400 1 MOST} + {309279600 28800 0 MOT} + {325008000 32400 1 MOST} + {340729200 28800 0 MOT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Magadan b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Magadan new file mode 100644 index 00000000..bf796a73 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Magadan @@ -0,0 +1,71 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Magadan) { + {-9223372036854775808 36192 0 LMT} + {-1441188192 36000 0 MAGT} + {-1247565600 39600 0 MAGMMTT} + {354891600 43200 1 MAGST} + {370699200 39600 0 MAGT} + {386427600 43200 1 MAGST} + {402235200 39600 0 MAGT} + {417963600 43200 1 MAGST} + {433771200 39600 0 MAGT} + {449586000 43200 1 MAGST} + {465318000 39600 0 MAGT} + {481042800 43200 1 MAGST} + {496767600 39600 0 MAGT} + {512492400 43200 1 MAGST} + {528217200 39600 0 MAGT} + {543942000 43200 1 MAGST} + {559666800 39600 0 MAGT} + {575391600 43200 1 MAGST} + {591116400 39600 0 MAGT} + {606841200 43200 1 MAGST} + {622566000 39600 0 MAGT} + {638290800 43200 1 MAGST} + {654620400 39600 0 MAGT} + {670345200 36000 0 MAGMMTT} + {670348800 39600 1 MAGST} + {686073600 36000 0 MAGT} + {695750400 39600 0 MAGMMTT} + {701784000 43200 1 MAGST} + {717505200 39600 0 MAGT} + {733244400 43200 1 MAGST} + {748969200 39600 0 MAGT} + {764694000 43200 1 MAGST} + {780418800 39600 0 MAGT} + {796143600 43200 1 MAGST} + {811868400 39600 0 MAGT} + {828198000 43200 1 MAGST} + {846342000 39600 0 MAGT} + {859647600 43200 1 MAGST} + {877791600 39600 0 MAGT} + {891097200 43200 1 MAGST} + {909241200 39600 0 MAGT} + {922546800 43200 1 MAGST} + {941295600 39600 0 MAGT} + {953996400 43200 1 MAGST} + {972745200 39600 0 MAGT} + {985446000 43200 1 MAGST} + {1004194800 39600 0 MAGT} + {1017500400 43200 1 MAGST} + {1035644400 39600 0 MAGT} + {1048950000 43200 1 MAGST} + {1067094000 39600 0 MAGT} + {1080399600 43200 1 MAGST} + {1099148400 39600 0 MAGT} + {1111849200 43200 1 MAGST} + {1130598000 39600 0 MAGT} + {1143298800 43200 1 MAGST} + {1162047600 39600 0 MAGT} + {1174748400 43200 1 MAGST} + {1193497200 39600 0 MAGT} + {1206802800 43200 1 MAGST} + {1224946800 39600 0 MAGT} + {1238252400 43200 1 MAGST} + {1256396400 39600 0 MAGT} + {1269702000 43200 1 MAGST} + {1288450800 39600 0 MAGT} + {1301151600 43200 0 MAGT} + {1414245600 36000 0 MAGT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Makassar b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Makassar new file mode 100644 index 00000000..be947f31 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Makassar @@ -0,0 +1,9 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Makassar) { + {-9223372036854775808 28656 0 LMT} + {-1577951856 28656 0 MMT} + {-1172908656 28800 0 WITA} + {-880272000 32400 0 JST} + {-766054800 28800 0 WITA} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Manila b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Manila new file mode 100644 index 00000000..9cc25e80 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Manila @@ -0,0 +1,15 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Manila) { + {-9223372036854775808 -57360 0 LMT} + {-3944621040 29040 0 LMT} + {-2229321840 28800 0 PHT} + {-1046678400 32400 1 PHST} + {-1038733200 28800 0 PHT} + {-873273600 32400 0 JST} + {-794221200 28800 0 PHT} + {-496224000 32400 1 PHST} + {-489315600 28800 0 PHT} + {259344000 32400 1 PHST} + {275151600 28800 0 PHT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Muscat b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Muscat new file mode 100644 index 00000000..fdd34c19 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Muscat @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Asia/Dubai)]} { + LoadTimeZoneFile Asia/Dubai +} +set TZData(:Asia/Muscat) $TZData(:Asia/Dubai) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Nicosia b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Nicosia new file mode 100644 index 00000000..73a7b4cb --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Nicosia @@ -0,0 +1,257 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Nicosia) { + {-9223372036854775808 8008 0 LMT} + {-1518920008 7200 0 EET} + {166572000 10800 1 EEST} + {182293200 7200 0 EET} + {200959200 10800 1 EEST} + {213829200 7200 0 EET} + {228866400 10800 1 EEST} + {243982800 7200 0 EET} + {260316000 10800 1 EEST} + {276123600 7200 0 EET} + {291765600 10800 1 EEST} + {307486800 7200 0 EET} + {323820000 10800 1 EEST} + {338936400 7200 0 EET} + {354664800 10800 1 EEST} + {370386000 7200 0 EET} + {386114400 10800 1 EEST} + {401835600 7200 0 EET} + {417564000 10800 1 EEST} + {433285200 7200 0 EET} + {449013600 10800 1 EEST} + {465339600 7200 0 EET} + {481068000 10800 1 EEST} + {496789200 7200 0 EET} + {512517600 10800 1 EEST} + {528238800 7200 0 EET} + {543967200 10800 1 EEST} + {559688400 7200 0 EET} + {575416800 10800 1 EEST} + {591138000 7200 0 EET} + {606866400 10800 1 EEST} + {622587600 7200 0 EET} + {638316000 10800 1 EEST} + {654642000 7200 0 EET} + {670370400 10800 1 EEST} + {686091600 7200 0 EET} + {701820000 10800 1 EEST} + {717541200 7200 0 EET} + {733269600 10800 1 EEST} + {748990800 7200 0 EET} + {764719200 10800 1 EEST} + {780440400 7200 0 EET} + {796168800 10800 1 EEST} + {811890000 7200 0 EET} + {828223200 10800 1 EEST} + {843944400 7200 0 EET} + {859672800 10800 1 EEST} + {875394000 7200 0 EET} + {891122400 10800 1 EEST} + {904597200 10800 0 EEST} + {909277200 7200 0 EET} + {922582800 10800 1 EEST} + {941331600 7200 0 EET} + {954032400 10800 1 EEST} + {972781200 7200 0 EET} + {985482000 10800 1 EEST} + {1004230800 7200 0 EET} + {1017536400 10800 1 EEST} + {1035680400 7200 0 EET} + {1048986000 10800 1 EEST} + {1067130000 7200 0 EET} + {1080435600 10800 1 EEST} + {1099184400 7200 0 EET} + {1111885200 10800 1 EEST} + {1130634000 7200 0 EET} + {1143334800 10800 1 EEST} + {1162083600 7200 0 EET} + {1174784400 10800 1 EEST} + {1193533200 7200 0 EET} + {1206838800 10800 1 EEST} + {1224982800 7200 0 EET} + {1238288400 10800 1 EEST} + {1256432400 7200 0 EET} + {1269738000 10800 1 EEST} + {1288486800 7200 0 EET} + {1301187600 10800 1 EEST} + {1319936400 7200 0 EET} + {1332637200 10800 1 EEST} + {1351386000 7200 0 EET} + {1364691600 10800 1 EEST} + {1382835600 7200 0 EET} + {1396141200 10800 1 EEST} + {1414285200 7200 0 EET} + {1427590800 10800 1 EEST} + {1445734800 7200 0 EET} + {1459040400 10800 1 EEST} + {1477789200 7200 0 EET} + {1490490000 10800 1 EEST} + {1509238800 7200 0 EET} + {1521939600 10800 1 EEST} + {1540688400 7200 0 EET} + {1553994000 10800 1 EEST} + {1572138000 7200 0 EET} + {1585443600 10800 1 EEST} + {1603587600 7200 0 EET} + {1616893200 10800 1 EEST} + {1635642000 7200 0 EET} + {1648342800 10800 1 EEST} + {1667091600 7200 0 EET} + {1679792400 10800 1 EEST} + {1698541200 7200 0 EET} + {1711846800 10800 1 EEST} + {1729990800 7200 0 EET} + {1743296400 10800 1 EEST} + {1761440400 7200 0 EET} + {1774746000 10800 1 EEST} + {1792890000 7200 0 EET} + {1806195600 10800 1 EEST} + {1824944400 7200 0 EET} + {1837645200 10800 1 EEST} + {1856394000 7200 0 EET} + {1869094800 10800 1 EEST} + {1887843600 7200 0 EET} + {1901149200 10800 1 EEST} + {1919293200 7200 0 EET} + {1932598800 10800 1 EEST} + {1950742800 7200 0 EET} + {1964048400 10800 1 EEST} + {1982797200 7200 0 EET} + {1995498000 10800 1 EEST} + {2014246800 7200 0 EET} + {2026947600 10800 1 EEST} + {2045696400 7200 0 EET} + {2058397200 10800 1 EEST} + {2077146000 7200 0 EET} + {2090451600 10800 1 EEST} + {2108595600 7200 0 EET} + {2121901200 10800 1 EEST} + {2140045200 7200 0 EET} + {2153350800 10800 1 EEST} + {2172099600 7200 0 EET} + {2184800400 10800 1 EEST} + {2203549200 7200 0 EET} + {2216250000 10800 1 EEST} + {2234998800 7200 0 EET} + {2248304400 10800 1 EEST} + {2266448400 7200 0 EET} + {2279754000 10800 1 EEST} + {2297898000 7200 0 EET} + {2311203600 10800 1 EEST} + {2329347600 7200 0 EET} + {2342653200 10800 1 EEST} + {2361402000 7200 0 EET} + {2374102800 10800 1 EEST} + {2392851600 7200 0 EET} + {2405552400 10800 1 EEST} + {2424301200 7200 0 EET} + {2437606800 10800 1 EEST} + {2455750800 7200 0 EET} + {2469056400 10800 1 EEST} + {2487200400 7200 0 EET} + {2500506000 10800 1 EEST} + {2519254800 7200 0 EET} + {2531955600 10800 1 EEST} + {2550704400 7200 0 EET} + {2563405200 10800 1 EEST} + {2582154000 7200 0 EET} + {2595459600 10800 1 EEST} + {2613603600 7200 0 EET} + {2626909200 10800 1 EEST} + {2645053200 7200 0 EET} + {2658358800 10800 1 EEST} + {2676502800 7200 0 EET} + {2689808400 10800 1 EEST} + {2708557200 7200 0 EET} + {2721258000 10800 1 EEST} + {2740006800 7200 0 EET} + {2752707600 10800 1 EEST} + {2771456400 7200 0 EET} + {2784762000 10800 1 EEST} + {2802906000 7200 0 EET} + {2816211600 10800 1 EEST} + {2834355600 7200 0 EET} + {2847661200 10800 1 EEST} + {2866410000 7200 0 EET} + {2879110800 10800 1 EEST} + {2897859600 7200 0 EET} + {2910560400 10800 1 EEST} + {2929309200 7200 0 EET} + {2942010000 10800 1 EEST} + {2960758800 7200 0 EET} + {2974064400 10800 1 EEST} + {2992208400 7200 0 EET} + {3005514000 10800 1 EEST} + {3023658000 7200 0 EET} + {3036963600 10800 1 EEST} + {3055712400 7200 0 EET} + {3068413200 10800 1 EEST} + {3087162000 7200 0 EET} + {3099862800 10800 1 EEST} + {3118611600 7200 0 EET} + {3131917200 10800 1 EEST} + {3150061200 7200 0 EET} + {3163366800 10800 1 EEST} + {3181510800 7200 0 EET} + {3194816400 10800 1 EEST} + {3212960400 7200 0 EET} + {3226266000 10800 1 EEST} + {3245014800 7200 0 EET} + {3257715600 10800 1 EEST} + {3276464400 7200 0 EET} + {3289165200 10800 1 EEST} + {3307914000 7200 0 EET} + {3321219600 10800 1 EEST} + {3339363600 7200 0 EET} + {3352669200 10800 1 EEST} + {3370813200 7200 0 EET} + {3384118800 10800 1 EEST} + {3402867600 7200 0 EET} + {3415568400 10800 1 EEST} + {3434317200 7200 0 EET} + {3447018000 10800 1 EEST} + {3465766800 7200 0 EET} + {3479072400 10800 1 EEST} + {3497216400 7200 0 EET} + {3510522000 10800 1 EEST} + {3528666000 7200 0 EET} + {3541971600 10800 1 EEST} + {3560115600 7200 0 EET} + {3573421200 10800 1 EEST} + {3592170000 7200 0 EET} + {3604870800 10800 1 EEST} + {3623619600 7200 0 EET} + {3636320400 10800 1 EEST} + {3655069200 7200 0 EET} + {3668374800 10800 1 EEST} + {3686518800 7200 0 EET} + {3699824400 10800 1 EEST} + {3717968400 7200 0 EET} + {3731274000 10800 1 EEST} + {3750022800 7200 0 EET} + {3762723600 10800 1 EEST} + {3781472400 7200 0 EET} + {3794173200 10800 1 EEST} + {3812922000 7200 0 EET} + {3825622800 10800 1 EEST} + {3844371600 7200 0 EET} + {3857677200 10800 1 EEST} + {3875821200 7200 0 EET} + {3889126800 10800 1 EEST} + {3907270800 7200 0 EET} + {3920576400 10800 1 EEST} + {3939325200 7200 0 EET} + {3952026000 10800 1 EEST} + {3970774800 7200 0 EET} + {3983475600 10800 1 EEST} + {4002224400 7200 0 EET} + {4015530000 10800 1 EEST} + {4033674000 7200 0 EET} + {4046979600 10800 1 EEST} + {4065123600 7200 0 EET} + {4078429200 10800 1 EEST} + {4096573200 7200 0 EET} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Novokuznetsk b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Novokuznetsk new file mode 100644 index 00000000..ab3c2d53 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Novokuznetsk @@ -0,0 +1,72 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Novokuznetsk) { + {-9223372036854775808 20928 0 LMT} + {-1441259328 21600 0 KRAT} + {-1247551200 25200 0 KRAMMTT} + {354906000 28800 1 KRAST} + {370713600 25200 0 KRAT} + {386442000 28800 1 KRAST} + {402249600 25200 0 KRAT} + {417978000 28800 1 KRAST} + {433785600 25200 0 KRAT} + {449600400 28800 1 KRAST} + {465332400 25200 0 KRAT} + {481057200 28800 1 KRAST} + {496782000 25200 0 KRAT} + {512506800 28800 1 KRAST} + {528231600 25200 0 KRAT} + {543956400 28800 1 KRAST} + {559681200 25200 0 KRAT} + {575406000 28800 1 KRAST} + {591130800 25200 0 KRAT} + {606855600 28800 1 KRAST} + {622580400 25200 0 KRAT} + {638305200 28800 1 KRAST} + {654634800 25200 0 KRAT} + {670359600 21600 0 KRAMMTT} + {670363200 25200 1 KRAST} + {686088000 21600 0 KRAT} + {695764800 25200 0 KRAMMTT} + {701798400 28800 1 KRAST} + {717519600 25200 0 KRAT} + {733258800 28800 1 KRAST} + {748983600 25200 0 KRAT} + {764708400 28800 1 KRAST} + {780433200 25200 0 KRAT} + {796158000 28800 1 KRAST} + {811882800 25200 0 KRAT} + {828212400 28800 1 KRAST} + {846356400 25200 0 KRAT} + {859662000 28800 1 KRAST} + {877806000 25200 0 KRAT} + {891111600 28800 1 KRAST} + {909255600 25200 0 KRAT} + {922561200 28800 1 KRAST} + {941310000 25200 0 KRAT} + {954010800 28800 1 KRAST} + {972759600 25200 0 KRAT} + {985460400 28800 1 KRAST} + {1004209200 25200 0 KRAT} + {1017514800 28800 1 KRAST} + {1035658800 25200 0 KRAT} + {1048964400 28800 1 KRAST} + {1067108400 25200 0 KRAT} + {1080414000 28800 1 KRAST} + {1099162800 25200 0 KRAT} + {1111863600 28800 1 KRAST} + {1130612400 25200 0 KRAT} + {1143313200 28800 1 KRAST} + {1162062000 25200 0 KRAT} + {1174762800 28800 1 KRAST} + {1193511600 25200 0 KRAT} + {1206817200 28800 1 KRAST} + {1224961200 25200 0 KRAT} + {1238266800 28800 1 KRAST} + {1256410800 25200 0 KRAT} + {1269716400 21600 0 NOVMMTT} + {1269720000 25200 1 NOVST} + {1288468800 21600 0 NOVT} + {1301169600 25200 0 NOVT} + {1414263600 25200 0 KRAT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Novosibirsk b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Novosibirsk new file mode 100644 index 00000000..72277807 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Novosibirsk @@ -0,0 +1,72 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Novosibirsk) { + {-9223372036854775808 19900 0 LMT} + {-1579476700 21600 0 NOVT} + {-1247551200 25200 0 NOVMMTT} + {354906000 28800 1 NOVST} + {370713600 25200 0 NOVT} + {386442000 28800 1 NOVST} + {402249600 25200 0 NOVT} + {417978000 28800 1 NOVST} + {433785600 25200 0 NOVT} + {449600400 28800 1 NOVST} + {465332400 25200 0 NOVT} + {481057200 28800 1 NOVST} + {496782000 25200 0 NOVT} + {512506800 28800 1 NOVST} + {528231600 25200 0 NOVT} + {543956400 28800 1 NOVST} + {559681200 25200 0 NOVT} + {575406000 28800 1 NOVST} + {591130800 25200 0 NOVT} + {606855600 28800 1 NOVST} + {622580400 25200 0 NOVT} + {638305200 28800 1 NOVST} + {654634800 25200 0 NOVT} + {670359600 21600 0 NOVMMTT} + {670363200 25200 1 NOVST} + {686088000 21600 0 NOVT} + {695764800 25200 0 NOVMMTT} + {701798400 28800 1 NOVST} + {717519600 25200 0 NOVT} + {733258800 28800 1 NOVST} + {738090000 25200 0 NOVST} + {748987200 21600 0 NOVT} + {764712000 25200 1 NOVST} + {780436800 21600 0 NOVT} + {796161600 25200 1 NOVST} + {811886400 21600 0 NOVT} + {828216000 25200 1 NOVST} + {846360000 21600 0 NOVT} + {859665600 25200 1 NOVST} + {877809600 21600 0 NOVT} + {891115200 25200 1 NOVST} + {909259200 21600 0 NOVT} + {922564800 25200 1 NOVST} + {941313600 21600 0 NOVT} + {954014400 25200 1 NOVST} + {972763200 21600 0 NOVT} + {985464000 25200 1 NOVST} + {1004212800 21600 0 NOVT} + {1017518400 25200 1 NOVST} + {1035662400 21600 0 NOVT} + {1048968000 25200 1 NOVST} + {1067112000 21600 0 NOVT} + {1080417600 25200 1 NOVST} + {1099166400 21600 0 NOVT} + {1111867200 25200 1 NOVST} + {1130616000 21600 0 NOVT} + {1143316800 25200 1 NOVST} + {1162065600 21600 0 NOVT} + {1174766400 25200 1 NOVST} + {1193515200 21600 0 NOVT} + {1206820800 25200 1 NOVST} + {1224964800 21600 0 NOVT} + {1238270400 25200 1 NOVST} + {1256414400 21600 0 NOVT} + {1269720000 25200 1 NOVST} + {1288468800 21600 0 NOVT} + {1301169600 25200 0 NOVT} + {1414263600 21600 0 NOVT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Omsk b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Omsk new file mode 100644 index 00000000..f25b8d48 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Omsk @@ -0,0 +1,71 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Omsk) { + {-9223372036854775808 17610 0 LMT} + {-1582088010 18000 0 OMST} + {-1247547600 21600 0 OMSMMTT} + {354909600 25200 1 OMSST} + {370717200 21600 0 OMST} + {386445600 25200 1 OMSST} + {402253200 21600 0 OMST} + {417981600 25200 1 OMSST} + {433789200 21600 0 OMST} + {449604000 25200 1 OMSST} + {465336000 21600 0 OMST} + {481060800 25200 1 OMSST} + {496785600 21600 0 OMST} + {512510400 25200 1 OMSST} + {528235200 21600 0 OMST} + {543960000 25200 1 OMSST} + {559684800 21600 0 OMST} + {575409600 25200 1 OMSST} + {591134400 21600 0 OMST} + {606859200 25200 1 OMSST} + {622584000 21600 0 OMST} + {638308800 25200 1 OMSST} + {654638400 21600 0 OMST} + {670363200 18000 0 OMSMMTT} + {670366800 21600 1 OMSST} + {686091600 18000 0 OMST} + {695768400 21600 0 OMSMMTT} + {701802000 25200 1 OMSST} + {717523200 21600 0 OMST} + {733262400 25200 1 OMSST} + {748987200 21600 0 OMST} + {764712000 25200 1 OMSST} + {780436800 21600 0 OMST} + {796161600 25200 1 OMSST} + {811886400 21600 0 OMST} + {828216000 25200 1 OMSST} + {846360000 21600 0 OMST} + {859665600 25200 1 OMSST} + {877809600 21600 0 OMST} + {891115200 25200 1 OMSST} + {909259200 21600 0 OMST} + {922564800 25200 1 OMSST} + {941313600 21600 0 OMST} + {954014400 25200 1 OMSST} + {972763200 21600 0 OMST} + {985464000 25200 1 OMSST} + {1004212800 21600 0 OMST} + {1017518400 25200 1 OMSST} + {1035662400 21600 0 OMST} + {1048968000 25200 1 OMSST} + {1067112000 21600 0 OMST} + {1080417600 25200 1 OMSST} + {1099166400 21600 0 OMST} + {1111867200 25200 1 OMSST} + {1130616000 21600 0 OMST} + {1143316800 25200 1 OMSST} + {1162065600 21600 0 OMST} + {1174766400 25200 1 OMSST} + {1193515200 21600 0 OMST} + {1206820800 25200 1 OMSST} + {1224964800 21600 0 OMST} + {1238270400 25200 1 OMSST} + {1256414400 21600 0 OMST} + {1269720000 25200 1 OMSST} + {1288468800 21600 0 OMST} + {1301169600 25200 0 OMST} + {1414263600 21600 0 OMST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Oral b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Oral new file mode 100644 index 00000000..88b9a294 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Oral @@ -0,0 +1,58 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Oral) { + {-9223372036854775808 12324 0 LMT} + {-1441164324 14400 0 URAT} + {-1247544000 18000 0 URAT} + {354913200 21600 1 URAST} + {370720800 21600 0 URAT} + {386445600 18000 0 URAT} + {386449200 21600 1 URAST} + {402256800 18000 0 URAT} + {417985200 21600 1 URAST} + {433792800 18000 0 URAT} + {449607600 21600 1 URAST} + {465339600 18000 0 URAT} + {481064400 21600 1 URAST} + {496789200 18000 0 URAT} + {512514000 21600 1 URAST} + {528238800 18000 0 URAT} + {543963600 21600 1 URAST} + {559688400 18000 0 URAT} + {575413200 21600 1 URAST} + {591138000 18000 0 URAT} + {606862800 14400 0 URAT} + {606866400 18000 1 URAST} + {622591200 14400 0 URAT} + {638316000 18000 1 URAST} + {654645600 14400 0 URAT} + {662673600 14400 0 URAT} + {692827200 14400 0 ORAT} + {701809200 18000 1 ORAST} + {717530400 14400 0 ORAT} + {733269600 18000 1 ORAST} + {748994400 14400 0 ORAT} + {764719200 18000 1 ORAST} + {780444000 14400 0 ORAT} + {796168800 18000 1 ORAST} + {811893600 14400 0 ORAT} + {828223200 18000 1 ORAST} + {846367200 14400 0 ORAT} + {859672800 18000 1 ORAST} + {877816800 14400 0 ORAT} + {891122400 18000 1 ORAST} + {909266400 14400 0 ORAT} + {922572000 18000 1 ORAST} + {941320800 14400 0 ORAT} + {954021600 18000 1 ORAST} + {972770400 14400 0 ORAT} + {985471200 18000 1 ORAST} + {1004220000 14400 0 ORAT} + {1017525600 18000 1 ORAST} + {1035669600 14400 0 ORAT} + {1048975200 18000 1 ORAST} + {1067119200 14400 0 ORAT} + {1080424800 18000 1 ORAST} + {1099173600 14400 0 ORAT} + {1110830400 18000 0 ORAT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Phnom_Penh b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Phnom_Penh new file mode 100644 index 00000000..114c7863 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Phnom_Penh @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Asia/Bangkok)]} { + LoadTimeZoneFile Asia/Bangkok +} +set TZData(:Asia/Phnom_Penh) $TZData(:Asia/Bangkok) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Pontianak b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Pontianak new file mode 100644 index 00000000..728b552c --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Pontianak @@ -0,0 +1,13 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Pontianak) { + {-9223372036854775808 26240 0 LMT} + {-1946186240 26240 0 PMT} + {-1172906240 27000 0 WIB} + {-881220600 32400 0 JST} + {-766054800 27000 0 WIB} + {-683883000 28800 0 WIB} + {-620812800 27000 0 WIB} + {-189415800 28800 0 WITA} + {567964800 25200 0 WIB} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Pyongyang b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Pyongyang new file mode 100644 index 00000000..4ade8e65 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Pyongyang @@ -0,0 +1,10 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Pyongyang) { + {-9223372036854775808 30180 0 LMT} + {-1948782180 30600 0 KST} + {-1830414600 32400 0 JCST} + {-1017824400 32400 0 JST} + {-768646800 32400 0 KST} + {1439564400 30600 0 KST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Qatar b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Qatar new file mode 100644 index 00000000..bfb4eb41 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Qatar @@ -0,0 +1,7 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Qatar) { + {-9223372036854775808 12368 0 LMT} + {-1577935568 14400 0 GST} + {76190400 10800 0 AST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Qyzylorda b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Qyzylorda new file mode 100644 index 00000000..16da5748 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Qyzylorda @@ -0,0 +1,58 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Qyzylorda) { + {-9223372036854775808 15712 0 LMT} + {-1441167712 14400 0 KIZT} + {-1247544000 18000 0 KIZT} + {354913200 21600 1 KIZST} + {370720800 21600 0 KIZT} + {386445600 18000 0 KIZT} + {386449200 21600 1 KIZST} + {402256800 18000 0 KIZT} + {417985200 21600 1 KIZST} + {433792800 18000 0 KIZT} + {449607600 21600 1 KIZST} + {465339600 18000 0 KIZT} + {481064400 21600 1 KIZST} + {496789200 18000 0 KIZT} + {512514000 21600 1 KIZST} + {528238800 18000 0 KIZT} + {543963600 21600 1 KIZST} + {559688400 18000 0 KIZT} + {575413200 21600 1 KIZST} + {591138000 18000 0 KIZT} + {606862800 21600 1 KIZST} + {622587600 18000 0 KIZT} + {638312400 21600 1 KIZST} + {654642000 18000 0 KIZT} + {662670000 18000 0 KIZT} + {692823600 18000 0 QYZT} + {695768400 21600 0 QYZT} + {701802000 25200 1 QYZST} + {717523200 21600 0 QYZT} + {733262400 25200 1 QYZST} + {748987200 21600 0 QYZT} + {764712000 25200 1 QYZST} + {780436800 21600 0 QYZT} + {796161600 25200 1 QYZST} + {811886400 21600 0 QYZT} + {828216000 25200 1 QYZST} + {846360000 21600 0 QYZT} + {859665600 25200 1 QYZST} + {877809600 21600 0 QYZT} + {891115200 25200 1 QYZST} + {909259200 21600 0 QYZT} + {922564800 25200 1 QYZST} + {941313600 21600 0 QYZT} + {954014400 25200 1 QYZST} + {972763200 21600 0 QYZT} + {985464000 25200 1 QYZST} + {1004212800 21600 0 QYZT} + {1017518400 25200 1 QYZST} + {1035662400 21600 0 QYZT} + {1048968000 25200 1 QYZST} + {1067112000 21600 0 QYZT} + {1080417600 25200 1 QYZST} + {1099166400 21600 0 QYZT} + {1110823200 21600 0 QYZT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Rangoon b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Rangoon new file mode 100644 index 00000000..4f3ac020 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Rangoon @@ -0,0 +1,9 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Rangoon) { + {-9223372036854775808 23080 0 LMT} + {-2840163880 23080 0 RMT} + {-1577946280 23400 0 BURT} + {-873268200 32400 0 JST} + {-778410000 23400 0 MMT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Riyadh b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Riyadh new file mode 100644 index 00000000..12c9e241 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Riyadh @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Riyadh) { + {-9223372036854775808 11212 0 LMT} + {-719636812 10800 0 AST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Saigon b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Saigon new file mode 100644 index 00000000..1e42eed2 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Saigon @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Asia/Ho_Chi_Minh)]} { + LoadTimeZoneFile Asia/Ho_Chi_Minh +} +set TZData(:Asia/Saigon) $TZData(:Asia/Ho_Chi_Minh) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Sakhalin b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Sakhalin new file mode 100644 index 00000000..eed20ba5 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Sakhalin @@ -0,0 +1,73 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Sakhalin) { + {-9223372036854775808 34248 0 LMT} + {-2031039048 32400 0 JCST} + {-1017824400 32400 0 JST} + {-768560400 39600 0 SAKMMTT} + {354891600 43200 1 SAKST} + {370699200 39600 0 SAKT} + {386427600 43200 1 SAKST} + {402235200 39600 0 SAKT} + {417963600 43200 1 SAKST} + {433771200 39600 0 SAKT} + {449586000 43200 1 SAKST} + {465318000 39600 0 SAKT} + {481042800 43200 1 SAKST} + {496767600 39600 0 SAKT} + {512492400 43200 1 SAKST} + {528217200 39600 0 SAKT} + {543942000 43200 1 SAKST} + {559666800 39600 0 SAKT} + {575391600 43200 1 SAKST} + {591116400 39600 0 SAKT} + {606841200 43200 1 SAKST} + {622566000 39600 0 SAKT} + {638290800 43200 1 SAKST} + {654620400 39600 0 SAKT} + {670345200 36000 0 SAKMMTT} + {670348800 39600 1 SAKST} + {686073600 36000 0 SAKT} + {695750400 39600 0 SAKMMTT} + {701784000 43200 1 SAKST} + {717505200 39600 0 SAKT} + {733244400 43200 1 SAKST} + {748969200 39600 0 SAKT} + {764694000 43200 1 SAKST} + {780418800 39600 0 SAKT} + {796143600 43200 1 SAKST} + {811868400 39600 0 SAKT} + {828198000 43200 1 SAKST} + {846342000 39600 0 SAKT} + {859647600 36000 0 SAKMMTT} + {859651200 39600 1 SAKST} + {877795200 36000 0 SAKT} + {891100800 39600 1 SAKST} + {909244800 36000 0 SAKT} + {922550400 39600 1 SAKST} + {941299200 36000 0 SAKT} + {954000000 39600 1 SAKST} + {972748800 36000 0 SAKT} + {985449600 39600 1 SAKST} + {1004198400 36000 0 SAKT} + {1017504000 39600 1 SAKST} + {1035648000 36000 0 SAKT} + {1048953600 39600 1 SAKST} + {1067097600 36000 0 SAKT} + {1080403200 39600 1 SAKST} + {1099152000 36000 0 SAKT} + {1111852800 39600 1 SAKST} + {1130601600 36000 0 SAKT} + {1143302400 39600 1 SAKST} + {1162051200 36000 0 SAKT} + {1174752000 39600 1 SAKST} + {1193500800 36000 0 SAKT} + {1206806400 39600 1 SAKST} + {1224950400 36000 0 SAKT} + {1238256000 39600 1 SAKST} + {1256400000 36000 0 SAKT} + {1269705600 39600 1 SAKST} + {1288454400 36000 0 SAKT} + {1301155200 39600 0 SAKT} + {1414249200 36000 0 SAKT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Samarkand b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Samarkand new file mode 100644 index 00000000..4b3b49f6 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Samarkand @@ -0,0 +1,32 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Samarkand) { + {-9223372036854775808 16073 0 LMT} + {-1441168073 14400 0 SAMT} + {-1247544000 18000 0 SAMT} + {354913200 21600 1 SAMST} + {370720800 21600 0 TAST} + {386445600 18000 0 SAMT} + {386449200 21600 1 SAMST} + {402256800 18000 0 SAMT} + {417985200 21600 1 SAMST} + {433792800 18000 0 SAMT} + {449607600 21600 1 SAMST} + {465339600 18000 0 SAMT} + {481064400 21600 1 SAMST} + {496789200 18000 0 SAMT} + {512514000 21600 1 SAMST} + {528238800 18000 0 SAMT} + {543963600 21600 1 SAMST} + {559688400 18000 0 SAMT} + {575413200 21600 1 SAMST} + {591138000 18000 0 SAMT} + {606862800 21600 1 SAMST} + {622587600 18000 0 SAMT} + {638312400 21600 1 SAMST} + {654642000 18000 0 SAMT} + {670366800 21600 1 SAMST} + {683665200 21600 0 UZST} + {686091600 18000 0 UZT} + {694206000 18000 0 UZT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Seoul b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Seoul new file mode 100644 index 00000000..c24a1d8b --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Seoul @@ -0,0 +1,27 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Seoul) { + {-9223372036854775808 30472 0 LMT} + {-1948782472 30600 0 KST} + {-1830414600 32400 0 JCST} + {-1017824400 32400 0 JST} + {-767350800 32400 0 KST} + {-498128400 30600 0 KST} + {-462702600 34200 1 KDT} + {-451733400 30600 0 KST} + {-429784200 34200 1 KDT} + {-418296600 30600 0 KST} + {-399544200 34200 1 KDT} + {-387451800 30600 0 KST} + {-368094600 34200 1 KDT} + {-356002200 30600 0 KST} + {-336645000 34200 1 KDT} + {-324552600 30600 0 KST} + {-305195400 34200 1 KDT} + {-293103000 30600 0 KST} + {-264933000 32400 0 KST} + {547578000 36000 1 KDT} + {560883600 32400 0 KST} + {579027600 36000 1 KDT} + {592333200 32400 0 KST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Shanghai b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Shanghai new file mode 100644 index 00000000..ff2d2b51 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Shanghai @@ -0,0 +1,23 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Shanghai) { + {-9223372036854775808 29143 0 LMT} + {-2177481943 28800 0 CST} + {-933494400 32400 1 CDT} + {-923130000 28800 0 CST} + {-908784000 32400 1 CDT} + {-891594000 28800 0 CST} + {-662716800 28800 0 CST} + {515520000 32400 1 CDT} + {527007600 28800 0 CST} + {545155200 32400 1 CDT} + {558457200 28800 0 CST} + {576604800 32400 1 CDT} + {589906800 28800 0 CST} + {608659200 32400 1 CDT} + {621961200 28800 0 CST} + {640108800 32400 1 CDT} + {653410800 28800 0 CST} + {671558400 32400 1 CDT} + {684860400 28800 0 CST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Singapore b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Singapore new file mode 100644 index 00000000..e2f226ee --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Singapore @@ -0,0 +1,14 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Singapore) { + {-9223372036854775808 24925 0 LMT} + {-2177477725 24925 0 SMT} + {-2038200925 25200 0 MALT} + {-1167634800 26400 1 MALST} + {-1073028000 26400 0 MALT} + {-894180000 27000 0 MALT} + {-879665400 32400 0 JST} + {-767005200 27000 0 MALT} + {-138785400 27000 0 SGT} + {378664200 28800 0 SGT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Srednekolymsk b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Srednekolymsk new file mode 100644 index 00000000..d1dd879d --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Srednekolymsk @@ -0,0 +1,71 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Srednekolymsk) { + {-9223372036854775808 36892 0 LMT} + {-1441188892 36000 0 MAGT} + {-1247565600 39600 0 MAGMMTT} + {354891600 43200 1 MAGST} + {370699200 39600 0 MAGT} + {386427600 43200 1 MAGST} + {402235200 39600 0 MAGT} + {417963600 43200 1 MAGST} + {433771200 39600 0 MAGT} + {449586000 43200 1 MAGST} + {465318000 39600 0 MAGT} + {481042800 43200 1 MAGST} + {496767600 39600 0 MAGT} + {512492400 43200 1 MAGST} + {528217200 39600 0 MAGT} + {543942000 43200 1 MAGST} + {559666800 39600 0 MAGT} + {575391600 43200 1 MAGST} + {591116400 39600 0 MAGT} + {606841200 43200 1 MAGST} + {622566000 39600 0 MAGT} + {638290800 43200 1 MAGST} + {654620400 39600 0 MAGT} + {670345200 36000 0 MAGMMTT} + {670348800 39600 1 MAGST} + {686073600 36000 0 MAGT} + {695750400 39600 0 MAGMMTT} + {701784000 43200 1 MAGST} + {717505200 39600 0 MAGT} + {733244400 43200 1 MAGST} + {748969200 39600 0 MAGT} + {764694000 43200 1 MAGST} + {780418800 39600 0 MAGT} + {796143600 43200 1 MAGST} + {811868400 39600 0 MAGT} + {828198000 43200 1 MAGST} + {846342000 39600 0 MAGT} + {859647600 43200 1 MAGST} + {877791600 39600 0 MAGT} + {891097200 43200 1 MAGST} + {909241200 39600 0 MAGT} + {922546800 43200 1 MAGST} + {941295600 39600 0 MAGT} + {953996400 43200 1 MAGST} + {972745200 39600 0 MAGT} + {985446000 43200 1 MAGST} + {1004194800 39600 0 MAGT} + {1017500400 43200 1 MAGST} + {1035644400 39600 0 MAGT} + {1048950000 43200 1 MAGST} + {1067094000 39600 0 MAGT} + {1080399600 43200 1 MAGST} + {1099148400 39600 0 MAGT} + {1111849200 43200 1 MAGST} + {1130598000 39600 0 MAGT} + {1143298800 43200 1 MAGST} + {1162047600 39600 0 MAGT} + {1174748400 43200 1 MAGST} + {1193497200 39600 0 MAGT} + {1206802800 43200 1 MAGST} + {1224946800 39600 0 MAGT} + {1238252400 43200 1 MAGST} + {1256396400 39600 0 MAGT} + {1269702000 43200 1 MAGST} + {1288450800 39600 0 MAGT} + {1301151600 43200 0 MAGT} + {1414245600 39600 0 SRET} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Taipei b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Taipei new file mode 100644 index 00000000..61c77ef0 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Taipei @@ -0,0 +1,46 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Taipei) { + {-9223372036854775808 29160 0 LMT} + {-2335248360 28800 0 JWST} + {-1017820800 32400 0 JST} + {-766224000 28800 0 CST} + {-745833600 32400 1 CDT} + {-733827600 28800 0 CST} + {-716889600 32400 1 CDT} + {-699613200 28800 0 CST} + {-683884800 32400 1 CDT} + {-670669200 28800 0 CST} + {-652348800 32400 1 CDT} + {-639133200 28800 0 CST} + {-620812800 32400 1 CDT} + {-607597200 28800 0 CST} + {-589276800 32400 1 CDT} + {-576061200 28800 0 CST} + {-562924800 32400 1 CDT} + {-541760400 28800 0 CST} + {-528710400 32400 1 CDT} + {-510224400 28800 0 CST} + {-497174400 32400 1 CDT} + {-478688400 28800 0 CST} + {-465638400 32400 1 CDT} + {-449830800 28800 0 CST} + {-434016000 32400 1 CDT} + {-418208400 28800 0 CST} + {-402480000 32400 1 CDT} + {-386672400 28800 0 CST} + {-370944000 32400 1 CDT} + {-355136400 28800 0 CST} + {-339408000 32400 1 CDT} + {-323600400 28800 0 CST} + {-302515200 32400 1 CDT} + {-291978000 28800 0 CST} + {-270979200 32400 1 CDT} + {-260442000 28800 0 CST} + {133977600 32400 1 CDT} + {149785200 28800 0 CST} + {165513600 32400 1 CDT} + {181321200 28800 0 CST} + {299606400 32400 1 CDT} + {307551600 28800 0 CST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Tashkent b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Tashkent new file mode 100644 index 00000000..1477376f --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Tashkent @@ -0,0 +1,32 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Tashkent) { + {-9223372036854775808 16631 0 LMT} + {-1441168631 18000 0 TAST} + {-1247547600 21600 0 TAST} + {354909600 25200 1 TASST} + {370717200 21600 0 TAST} + {386445600 25200 1 TASST} + {402253200 21600 0 TAST} + {417981600 25200 1 TASST} + {433789200 21600 0 TAST} + {449604000 25200 1 TASST} + {465336000 21600 0 TAST} + {481060800 25200 1 TASST} + {496785600 21600 0 TAST} + {512510400 25200 1 TASST} + {528235200 21600 0 TAST} + {543960000 25200 1 TASST} + {559684800 21600 0 TAST} + {575409600 25200 1 TASST} + {591134400 21600 0 TAST} + {606859200 25200 1 TASST} + {622584000 21600 0 TAST} + {638308800 25200 1 TASST} + {654638400 21600 0 TAST} + {670363200 18000 0 TAST} + {670366800 21600 1 TASST} + {683665200 21600 0 UZST} + {686091600 18000 0 UZT} + {694206000 18000 0 UZT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Tbilisi b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Tbilisi new file mode 100644 index 00000000..54b278a4 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Tbilisi @@ -0,0 +1,60 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Tbilisi) { + {-9223372036854775808 10751 0 LMT} + {-2840151551 10751 0 TBMT} + {-1441162751 10800 0 TBIT} + {-405140400 14400 0 TBIT} + {354916800 18000 1 TBIST} + {370724400 14400 0 TBIT} + {386452800 18000 1 TBIST} + {402260400 14400 0 TBIT} + {417988800 18000 1 TBIST} + {433796400 14400 0 TBIT} + {449611200 18000 1 TBIST} + {465343200 14400 0 TBIT} + {481068000 18000 1 TBIST} + {496792800 14400 0 TBIT} + {512517600 18000 1 TBIST} + {528242400 14400 0 TBIT} + {543967200 18000 1 TBIST} + {559692000 14400 0 TBIT} + {575416800 18000 1 TBIST} + {591141600 14400 0 TBIT} + {606866400 18000 1 TBIST} + {622591200 14400 0 TBIT} + {638316000 18000 1 TBIST} + {654645600 14400 0 TBIT} + {670370400 14400 1 TBIST} + {671140800 14400 0 GEST} + {686098800 10800 0 GET} + {694213200 10800 0 GET} + {701816400 14400 1 GEST} + {717537600 10800 0 GET} + {733266000 14400 1 GEST} + {748987200 10800 0 GET} + {764715600 14400 1 GEST} + {780440400 14400 0 GET} + {796161600 18000 1 GEST} + {811882800 14400 0 GET} + {828216000 18000 1 GEST} + {846360000 18000 1 GEST} + {859662000 18000 0 GEST} + {877806000 14400 0 GET} + {891115200 18000 1 GEST} + {909255600 14400 0 GET} + {922564800 18000 1 GEST} + {941310000 14400 0 GET} + {954014400 18000 1 GEST} + {972759600 14400 0 GET} + {985464000 18000 1 GEST} + {1004209200 14400 0 GET} + {1017518400 18000 1 GEST} + {1035658800 14400 0 GET} + {1048968000 18000 1 GEST} + {1067108400 14400 0 GET} + {1080417600 18000 1 GEST} + {1088280000 14400 0 GEST} + {1099177200 10800 0 GET} + {1111878000 14400 0 GET} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Tehran b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Tehran new file mode 100644 index 00000000..7dca0ae9 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Tehran @@ -0,0 +1,105 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Tehran) { + {-9223372036854775808 12344 0 LMT} + {-1704165944 12344 0 TMT} + {-757394744 12600 0 IRST} + {247177800 14400 0 IRST} + {259272000 18000 1 IRDT} + {277758000 14400 0 IRST} + {283982400 12600 0 IRST} + {290809800 16200 1 IRDT} + {306531000 12600 0 IRST} + {322432200 16200 1 IRDT} + {338499000 12600 0 IRST} + {673216200 16200 1 IRDT} + {685481400 12600 0 IRST} + {701209800 16200 1 IRDT} + {717103800 12600 0 IRST} + {732745800 16200 1 IRDT} + {748639800 12600 0 IRST} + {764281800 16200 1 IRDT} + {780175800 12600 0 IRST} + {795817800 16200 1 IRDT} + {811711800 12600 0 IRST} + {827353800 16200 1 IRDT} + {843247800 12600 0 IRST} + {858976200 16200 1 IRDT} + {874870200 12600 0 IRST} + {890512200 16200 1 IRDT} + {906406200 12600 0 IRST} + {922048200 16200 1 IRDT} + {937942200 12600 0 IRST} + {953584200 16200 1 IRDT} + {969478200 12600 0 IRST} + {985206600 16200 1 IRDT} + {1001100600 12600 0 IRST} + {1016742600 16200 1 IRDT} + {1032636600 12600 0 IRST} + {1048278600 16200 1 IRDT} + {1064172600 12600 0 IRST} + {1079814600 16200 1 IRDT} + {1095708600 12600 0 IRST} + {1111437000 16200 1 IRDT} + {1127331000 12600 0 IRST} + {1206045000 16200 1 IRDT} + {1221939000 12600 0 IRST} + {1237667400 16200 1 IRDT} + {1253561400 12600 0 IRST} + {1269203400 16200 1 IRDT} + {1285097400 12600 0 IRST} + {1300739400 16200 1 IRDT} + {1316633400 12600 0 IRST} + {1332275400 16200 1 IRDT} + {1348169400 12600 0 IRST} + {1363897800 16200 1 IRDT} + {1379791800 12600 0 IRST} + {1395433800 16200 1 IRDT} + {1411327800 12600 0 IRST} + {1426969800 16200 1 IRDT} + {1442863800 12600 0 IRST} + {1458505800 16200 1 IRDT} + {1474399800 12600 0 IRST} + {1490128200 16200 1 IRDT} + {1506022200 12600 0 IRST} + {1521664200 16200 1 IRDT} + {1537558200 12600 0 IRST} + {1553200200 16200 1 IRDT} + {1569094200 12600 0 IRST} + {1584736200 16200 1 IRDT} + {1600630200 12600 0 IRST} + {1616358600 16200 1 IRDT} + {1632252600 12600 0 IRST} + {1647894600 16200 1 IRDT} + {1663788600 12600 0 IRST} + {1679430600 16200 1 IRDT} + {1695324600 12600 0 IRST} + {1710966600 16200 1 IRDT} + {1726860600 12600 0 IRST} + {1742589000 16200 1 IRDT} + {1758483000 12600 0 IRST} + {1774125000 16200 1 IRDT} + {1790019000 12600 0 IRST} + {1805661000 16200 1 IRDT} + {1821555000 12600 0 IRST} + {1837197000 16200 1 IRDT} + {1853091000 12600 0 IRST} + {1868733000 16200 1 IRDT} + {1884627000 12600 0 IRST} + {1900355400 16200 1 IRDT} + {1916249400 12600 0 IRST} + {1931891400 16200 1 IRDT} + {1947785400 12600 0 IRST} + {1963427400 16200 1 IRDT} + {1979321400 12600 0 IRST} + {1994963400 16200 1 IRDT} + {2010857400 12600 0 IRST} + {2026585800 16200 1 IRDT} + {2042479800 12600 0 IRST} + {2058121800 16200 1 IRDT} + {2074015800 12600 0 IRST} + {2089657800 16200 1 IRDT} + {2105551800 12600 0 IRST} + {2121193800 16200 1 IRDT} + {2137087800 12600 0 IRST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Tel_Aviv b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Tel_Aviv new file mode 100644 index 00000000..3e7278d0 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Tel_Aviv @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Asia/Jerusalem)]} { + LoadTimeZoneFile Asia/Jerusalem +} +set TZData(:Asia/Tel_Aviv) $TZData(:Asia/Jerusalem) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Thimbu b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Thimbu new file mode 100644 index 00000000..94b0846c --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Thimbu @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Asia/Thimphu)]} { + LoadTimeZoneFile Asia/Thimphu +} +set TZData(:Asia/Thimbu) $TZData(:Asia/Thimphu) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Thimphu b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Thimphu new file mode 100644 index 00000000..8c981de8 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Thimphu @@ -0,0 +1,7 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Thimphu) { + {-9223372036854775808 21516 0 LMT} + {-706341516 19800 0 IST} + {560025000 21600 0 BTT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Tokyo b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Tokyo new file mode 100644 index 00000000..5bfc75c2 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Tokyo @@ -0,0 +1,16 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Tokyo) { + {-9223372036854775808 33539 0 LMT} + {-2587712400 32400 0 JST} + {-2335251600 32400 0 JCST} + {-1017824400 32400 0 JST} + {-683794800 36000 1 JDT} + {-672393600 32400 0 JST} + {-654764400 36000 1 JDT} + {-640944000 32400 0 JST} + {-620290800 36000 1 JDT} + {-609494400 32400 0 JST} + {-588841200 36000 1 JDT} + {-578044800 32400 0 JST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Ujung_Pandang b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Ujung_Pandang new file mode 100644 index 00000000..abe142e7 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Ujung_Pandang @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Asia/Makassar)]} { + LoadTimeZoneFile Asia/Makassar +} +set TZData(:Asia/Ujung_Pandang) $TZData(:Asia/Makassar) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Ulaanbaatar b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Ulaanbaatar new file mode 100644 index 00000000..93e066c6 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Ulaanbaatar @@ -0,0 +1,221 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Ulaanbaatar) { + {-9223372036854775808 25652 0 LMT} + {-2032931252 25200 0 ULAT} + {252435600 28800 0 ULAT} + {417974400 32400 1 ULAST} + {433782000 28800 0 ULAT} + {449596800 32400 1 ULAST} + {465318000 28800 0 ULAT} + {481046400 32400 1 ULAST} + {496767600 28800 0 ULAT} + {512496000 32400 1 ULAST} + {528217200 28800 0 ULAT} + {543945600 32400 1 ULAST} + {559666800 28800 0 ULAT} + {575395200 32400 1 ULAST} + {591116400 28800 0 ULAT} + {606844800 32400 1 ULAST} + {622566000 28800 0 ULAT} + {638294400 32400 1 ULAST} + {654620400 28800 0 ULAT} + {670348800 32400 1 ULAST} + {686070000 28800 0 ULAT} + {701798400 32400 1 ULAST} + {717519600 28800 0 ULAT} + {733248000 32400 1 ULAST} + {748969200 28800 0 ULAT} + {764697600 32400 1 ULAST} + {780418800 28800 0 ULAT} + {796147200 32400 1 ULAST} + {811868400 28800 0 ULAT} + {828201600 32400 1 ULAST} + {843922800 28800 0 ULAT} + {859651200 32400 1 ULAST} + {875372400 28800 0 ULAT} + {891100800 32400 1 ULAST} + {906822000 28800 0 ULAT} + {988394400 32400 1 ULAST} + {1001696400 28800 0 ULAT} + {1017424800 32400 1 ULAST} + {1033146000 28800 0 ULAT} + {1048874400 32400 1 ULAST} + {1064595600 28800 0 ULAT} + {1080324000 32400 1 ULAST} + {1096045200 28800 0 ULAT} + {1111773600 32400 1 ULAST} + {1127494800 28800 0 ULAT} + {1143223200 32400 1 ULAST} + {1159549200 28800 0 ULAT} + {1427479200 32400 1 ULAST} + {1443193200 28800 0 ULAT} + {1458928800 32400 1 ULAST} + {1474642800 28800 0 ULAT} + {1490378400 32400 1 ULAST} + {1506697200 28800 0 ULAT} + {1522432800 32400 1 ULAST} + {1538146800 28800 0 ULAT} + {1553882400 32400 1 ULAST} + {1569596400 28800 0 ULAT} + {1585332000 32400 1 ULAST} + {1601046000 28800 0 ULAT} + {1616781600 32400 1 ULAST} + {1632495600 28800 0 ULAT} + {1648231200 32400 1 ULAST} + {1663945200 28800 0 ULAT} + {1679680800 32400 1 ULAST} + {1695999600 28800 0 ULAT} + {1711735200 32400 1 ULAST} + {1727449200 28800 0 ULAT} + {1743184800 32400 1 ULAST} + {1758898800 28800 0 ULAT} + {1774634400 32400 1 ULAST} + {1790348400 28800 0 ULAT} + {1806084000 32400 1 ULAST} + {1821798000 28800 0 ULAT} + {1837533600 32400 1 ULAST} + {1853852400 28800 0 ULAT} + {1869588000 32400 1 ULAST} + {1885302000 28800 0 ULAT} + {1901037600 32400 1 ULAST} + {1916751600 28800 0 ULAT} + {1932487200 32400 1 ULAST} + {1948201200 28800 0 ULAT} + {1963936800 32400 1 ULAST} + {1979650800 28800 0 ULAT} + {1995386400 32400 1 ULAST} + {2011100400 28800 0 ULAT} + {2026836000 32400 1 ULAST} + {2043154800 28800 0 ULAT} + {2058890400 32400 1 ULAST} + {2074604400 28800 0 ULAT} + {2090340000 32400 1 ULAST} + {2106054000 28800 0 ULAT} + {2121789600 32400 1 ULAST} + {2137503600 28800 0 ULAT} + {2153239200 32400 1 ULAST} + {2168953200 28800 0 ULAT} + {2184688800 32400 1 ULAST} + {2200402800 28800 0 ULAT} + {2216743200 32400 1 ULAST} + {2232457200 28800 0 ULAT} + {2248192800 32400 1 ULAST} + {2263906800 28800 0 ULAT} + {2279642400 32400 1 ULAST} + {2295356400 28800 0 ULAT} + {2311092000 32400 1 ULAST} + {2326806000 28800 0 ULAT} + {2342541600 32400 1 ULAST} + {2358255600 28800 0 ULAT} + {2373991200 32400 1 ULAST} + {2390310000 28800 0 ULAT} + {2406045600 32400 1 ULAST} + {2421759600 28800 0 ULAT} + {2437495200 32400 1 ULAST} + {2453209200 28800 0 ULAT} + {2468944800 32400 1 ULAST} + {2484658800 28800 0 ULAT} + {2500394400 32400 1 ULAST} + {2516108400 28800 0 ULAT} + {2531844000 32400 1 ULAST} + {2547558000 28800 0 ULAT} + {2563293600 32400 1 ULAST} + {2579612400 28800 0 ULAT} + {2595348000 32400 1 ULAST} + {2611062000 28800 0 ULAT} + {2626797600 32400 1 ULAST} + {2642511600 28800 0 ULAT} + {2658247200 32400 1 ULAST} + {2673961200 28800 0 ULAT} + {2689696800 32400 1 ULAST} + {2705410800 28800 0 ULAT} + {2721146400 32400 1 ULAST} + {2737465200 28800 0 ULAT} + {2753200800 32400 1 ULAST} + {2768914800 28800 0 ULAT} + {2784650400 32400 1 ULAST} + {2800364400 28800 0 ULAT} + {2816100000 32400 1 ULAST} + {2831814000 28800 0 ULAT} + {2847549600 32400 1 ULAST} + {2863263600 28800 0 ULAT} + {2878999200 32400 1 ULAST} + {2894713200 28800 0 ULAT} + {2910448800 32400 1 ULAST} + {2926767600 28800 0 ULAT} + {2942503200 32400 1 ULAST} + {2958217200 28800 0 ULAT} + {2973952800 32400 1 ULAST} + {2989666800 28800 0 ULAT} + {3005402400 32400 1 ULAST} + {3021116400 28800 0 ULAT} + {3036852000 32400 1 ULAST} + {3052566000 28800 0 ULAT} + {3068301600 32400 1 ULAST} + {3084015600 28800 0 ULAT} + {3100356000 32400 1 ULAST} + {3116070000 28800 0 ULAT} + {3131805600 32400 1 ULAST} + {3147519600 28800 0 ULAT} + {3163255200 32400 1 ULAST} + {3178969200 28800 0 ULAT} + {3194704800 32400 1 ULAST} + {3210418800 28800 0 ULAT} + {3226154400 32400 1 ULAST} + {3241868400 28800 0 ULAT} + {3257604000 32400 1 ULAST} + {3273922800 28800 0 ULAT} + {3289658400 32400 1 ULAST} + {3305372400 28800 0 ULAT} + {3321108000 32400 1 ULAST} + {3336822000 28800 0 ULAT} + {3352557600 32400 1 ULAST} + {3368271600 28800 0 ULAT} + {3384007200 32400 1 ULAST} + {3399721200 28800 0 ULAT} + {3415456800 32400 1 ULAST} + {3431170800 28800 0 ULAT} + {3446906400 32400 1 ULAST} + {3463225200 28800 0 ULAT} + {3478960800 32400 1 ULAST} + {3494674800 28800 0 ULAT} + {3510410400 32400 1 ULAST} + {3526124400 28800 0 ULAT} + {3541860000 32400 1 ULAST} + {3557574000 28800 0 ULAT} + {3573309600 32400 1 ULAST} + {3589023600 28800 0 ULAT} + {3604759200 32400 1 ULAST} + {3621078000 28800 0 ULAT} + {3636813600 32400 1 ULAST} + {3652527600 28800 0 ULAT} + {3668263200 32400 1 ULAST} + {3683977200 28800 0 ULAT} + {3699712800 32400 1 ULAST} + {3715426800 28800 0 ULAT} + {3731162400 32400 1 ULAST} + {3746876400 28800 0 ULAT} + {3762612000 32400 1 ULAST} + {3778326000 28800 0 ULAT} + {3794061600 32400 1 ULAST} + {3810380400 28800 0 ULAT} + {3826116000 32400 1 ULAST} + {3841830000 28800 0 ULAT} + {3857565600 32400 1 ULAST} + {3873279600 28800 0 ULAT} + {3889015200 32400 1 ULAST} + {3904729200 28800 0 ULAT} + {3920464800 32400 1 ULAST} + {3936178800 28800 0 ULAT} + {3951914400 32400 1 ULAST} + {3967628400 28800 0 ULAT} + {3983968800 32400 1 ULAST} + {3999682800 28800 0 ULAT} + {4015418400 32400 1 ULAST} + {4031132400 28800 0 ULAT} + {4046868000 32400 1 ULAST} + {4062582000 28800 0 ULAT} + {4078317600 32400 1 ULAST} + {4094031600 28800 0 ULAT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Ulan_Bator b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Ulan_Bator new file mode 100644 index 00000000..3215ee79 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Ulan_Bator @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Asia/Ulaanbaatar)]} { + LoadTimeZoneFile Asia/Ulaanbaatar +} +set TZData(:Asia/Ulan_Bator) $TZData(:Asia/Ulaanbaatar) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Urumqi b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Urumqi new file mode 100644 index 00000000..4f3cd671 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Urumqi @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Urumqi) { + {-9223372036854775808 21020 0 LMT} + {-1325483420 21600 0 XJT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Ust-Nera b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Ust-Nera new file mode 100644 index 00000000..90fa7d50 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Ust-Nera @@ -0,0 +1,71 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Ust-Nera) { + {-9223372036854775808 34374 0 LMT} + {-1579426374 28800 0 YAKT} + {354898800 43200 0 MAGST} + {370699200 39600 0 MAGT} + {386427600 43200 1 MAGST} + {402235200 39600 0 MAGT} + {417963600 43200 1 MAGST} + {433771200 39600 0 MAGT} + {449586000 43200 1 MAGST} + {465318000 39600 0 MAGT} + {481042800 43200 1 MAGST} + {496767600 39600 0 MAGT} + {512492400 43200 1 MAGST} + {528217200 39600 0 MAGT} + {543942000 43200 1 MAGST} + {559666800 39600 0 MAGT} + {575391600 43200 1 MAGST} + {591116400 39600 0 MAGT} + {606841200 43200 1 MAGST} + {622566000 39600 0 MAGT} + {638290800 43200 1 MAGST} + {654620400 39600 0 MAGT} + {670345200 36000 0 MAGMMTT} + {670348800 39600 1 MAGST} + {686073600 36000 0 MAGT} + {695750400 39600 0 MAGMMTT} + {701784000 43200 1 MAGST} + {717505200 39600 0 MAGT} + {733244400 43200 1 MAGST} + {748969200 39600 0 MAGT} + {764694000 43200 1 MAGST} + {780418800 39600 0 MAGT} + {796143600 43200 1 MAGST} + {811868400 39600 0 MAGT} + {828198000 43200 1 MAGST} + {846342000 39600 0 MAGT} + {859647600 43200 1 MAGST} + {877791600 39600 0 MAGT} + {891097200 43200 1 MAGST} + {909241200 39600 0 MAGT} + {922546800 43200 1 MAGST} + {941295600 39600 0 MAGT} + {953996400 43200 1 MAGST} + {972745200 39600 0 MAGT} + {985446000 43200 1 MAGST} + {1004194800 39600 0 MAGT} + {1017500400 43200 1 MAGST} + {1035644400 39600 0 MAGT} + {1048950000 43200 1 MAGST} + {1067094000 39600 0 MAGT} + {1080399600 43200 1 MAGST} + {1099148400 39600 0 MAGT} + {1111849200 43200 1 MAGST} + {1130598000 39600 0 MAGT} + {1143298800 43200 1 MAGST} + {1162047600 39600 0 MAGT} + {1174748400 43200 1 MAGST} + {1193497200 39600 0 MAGT} + {1206802800 43200 1 MAGST} + {1224946800 39600 0 MAGT} + {1238252400 43200 1 MAGST} + {1256396400 39600 0 MAGT} + {1269702000 43200 1 MAGST} + {1288450800 39600 0 MAGT} + {1301151600 43200 0 MAGT} + {1315828800 39600 0 VLAT} + {1414249200 36000 0 VLAT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Vientiane b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Vientiane new file mode 100644 index 00000000..27b20ce5 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Vientiane @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Asia/Bangkok)]} { + LoadTimeZoneFile Asia/Bangkok +} +set TZData(:Asia/Vientiane) $TZData(:Asia/Bangkok) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Vladivostok b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Vladivostok new file mode 100644 index 00000000..119ff57d --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Vladivostok @@ -0,0 +1,71 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Vladivostok) { + {-9223372036854775808 31651 0 LMT} + {-1487321251 32400 0 VLAT} + {-1247562000 36000 0 VLAMMTT} + {354895200 39600 1 VLAST} + {370702800 36000 0 VLAT} + {386431200 39600 1 VLAST} + {402238800 36000 0 VLAT} + {417967200 39600 1 VLAST} + {433774800 36000 0 VLAT} + {449589600 39600 1 VLAST} + {465321600 36000 0 VLAT} + {481046400 39600 1 VLAST} + {496771200 36000 0 VLAT} + {512496000 39600 1 VLAST} + {528220800 36000 0 VLAT} + {543945600 39600 1 VLAST} + {559670400 36000 0 VLAT} + {575395200 39600 1 VLAST} + {591120000 36000 0 VLAT} + {606844800 39600 1 VLAST} + {622569600 36000 0 VLAT} + {638294400 39600 1 VLAST} + {654624000 36000 0 VLAT} + {670348800 32400 0 VLAMMTT} + {670352400 36000 1 VLAST} + {686077200 32400 0 VLAT} + {695754000 36000 0 VLAMMTT} + {701787600 39600 1 VLAST} + {717508800 36000 0 VLAT} + {733248000 39600 1 VLAST} + {748972800 36000 0 VLAT} + {764697600 39600 1 VLAST} + {780422400 36000 0 VLAT} + {796147200 39600 1 VLAST} + {811872000 36000 0 VLAT} + {828201600 39600 1 VLAST} + {846345600 36000 0 VLAT} + {859651200 39600 1 VLAST} + {877795200 36000 0 VLAT} + {891100800 39600 1 VLAST} + {909244800 36000 0 VLAT} + {922550400 39600 1 VLAST} + {941299200 36000 0 VLAT} + {954000000 39600 1 VLAST} + {972748800 36000 0 VLAT} + {985449600 39600 1 VLAST} + {1004198400 36000 0 VLAT} + {1017504000 39600 1 VLAST} + {1035648000 36000 0 VLAT} + {1048953600 39600 1 VLAST} + {1067097600 36000 0 VLAT} + {1080403200 39600 1 VLAST} + {1099152000 36000 0 VLAT} + {1111852800 39600 1 VLAST} + {1130601600 36000 0 VLAT} + {1143302400 39600 1 VLAST} + {1162051200 36000 0 VLAT} + {1174752000 39600 1 VLAST} + {1193500800 36000 0 VLAT} + {1206806400 39600 1 VLAST} + {1224950400 36000 0 VLAT} + {1238256000 39600 1 VLAST} + {1256400000 36000 0 VLAT} + {1269705600 39600 1 VLAST} + {1288454400 36000 0 VLAT} + {1301155200 39600 0 VLAT} + {1414249200 36000 0 VLAT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Yakutsk b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Yakutsk new file mode 100644 index 00000000..17493a63 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Yakutsk @@ -0,0 +1,71 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Yakutsk) { + {-9223372036854775808 31138 0 LMT} + {-1579423138 28800 0 YAKT} + {-1247558400 32400 0 YAKMMTT} + {354898800 36000 1 YAKST} + {370706400 32400 0 YAKT} + {386434800 36000 1 YAKST} + {402242400 32400 0 YAKT} + {417970800 36000 1 YAKST} + {433778400 32400 0 YAKT} + {449593200 36000 1 YAKST} + {465325200 32400 0 YAKT} + {481050000 36000 1 YAKST} + {496774800 32400 0 YAKT} + {512499600 36000 1 YAKST} + {528224400 32400 0 YAKT} + {543949200 36000 1 YAKST} + {559674000 32400 0 YAKT} + {575398800 36000 1 YAKST} + {591123600 32400 0 YAKT} + {606848400 36000 1 YAKST} + {622573200 32400 0 YAKT} + {638298000 36000 1 YAKST} + {654627600 32400 0 YAKT} + {670352400 28800 0 YAKMMTT} + {670356000 32400 1 YAKST} + {686080800 28800 0 YAKT} + {695757600 32400 0 YAKMMTT} + {701791200 36000 1 YAKST} + {717512400 32400 0 YAKT} + {733251600 36000 1 YAKST} + {748976400 32400 0 YAKT} + {764701200 36000 1 YAKST} + {780426000 32400 0 YAKT} + {796150800 36000 1 YAKST} + {811875600 32400 0 YAKT} + {828205200 36000 1 YAKST} + {846349200 32400 0 YAKT} + {859654800 36000 1 YAKST} + {877798800 32400 0 YAKT} + {891104400 36000 1 YAKST} + {909248400 32400 0 YAKT} + {922554000 36000 1 YAKST} + {941302800 32400 0 YAKT} + {954003600 36000 1 YAKST} + {972752400 32400 0 YAKT} + {985453200 36000 1 YAKST} + {1004202000 32400 0 YAKT} + {1017507600 36000 1 YAKST} + {1035651600 32400 0 YAKT} + {1048957200 36000 1 YAKST} + {1067101200 32400 0 YAKT} + {1080406800 36000 1 YAKST} + {1099155600 32400 0 YAKT} + {1111856400 36000 1 YAKST} + {1130605200 32400 0 YAKT} + {1143306000 36000 1 YAKST} + {1162054800 32400 0 YAKT} + {1174755600 36000 1 YAKST} + {1193504400 32400 0 YAKT} + {1206810000 36000 1 YAKST} + {1224954000 32400 0 YAKT} + {1238259600 36000 1 YAKST} + {1256403600 32400 0 YAKT} + {1269709200 36000 1 YAKST} + {1288458000 32400 0 YAKT} + {1301158800 36000 0 YAKT} + {1414252800 32400 0 YAKT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Yekaterinburg b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Yekaterinburg new file mode 100644 index 00000000..26789583 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Yekaterinburg @@ -0,0 +1,72 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Yekaterinburg) { + {-9223372036854775808 14553 0 LMT} + {-1688270553 13505 0 PMT} + {-1592610305 14400 0 SVET} + {-1247544000 18000 0 SVEMMTT} + {354913200 21600 1 SVEST} + {370720800 18000 0 SVET} + {386449200 21600 1 SVEST} + {402256800 18000 0 SVET} + {417985200 21600 1 SVEST} + {433792800 18000 0 SVET} + {449607600 21600 1 SVEST} + {465339600 18000 0 SVET} + {481064400 21600 1 SVEST} + {496789200 18000 0 SVET} + {512514000 21600 1 SVEST} + {528238800 18000 0 SVET} + {543963600 21600 1 SVEST} + {559688400 18000 0 SVET} + {575413200 21600 1 SVEST} + {591138000 18000 0 SVET} + {606862800 21600 1 SVEST} + {622587600 18000 0 SVET} + {638312400 21600 1 SVEST} + {654642000 18000 0 SVET} + {670366800 14400 0 SVEMMTT} + {670370400 18000 1 SVEST} + {686095200 14400 0 SVET} + {695772000 18000 0 YEKMMTT} + {701805600 21600 1 YEKST} + {717526800 18000 0 YEKT} + {733266000 21600 1 YEKST} + {748990800 18000 0 YEKT} + {764715600 21600 1 YEKST} + {780440400 18000 0 YEKT} + {796165200 21600 1 YEKST} + {811890000 18000 0 YEKT} + {828219600 21600 1 YEKST} + {846363600 18000 0 YEKT} + {859669200 21600 1 YEKST} + {877813200 18000 0 YEKT} + {891118800 21600 1 YEKST} + {909262800 18000 0 YEKT} + {922568400 21600 1 YEKST} + {941317200 18000 0 YEKT} + {954018000 21600 1 YEKST} + {972766800 18000 0 YEKT} + {985467600 21600 1 YEKST} + {1004216400 18000 0 YEKT} + {1017522000 21600 1 YEKST} + {1035666000 18000 0 YEKT} + {1048971600 21600 1 YEKST} + {1067115600 18000 0 YEKT} + {1080421200 21600 1 YEKST} + {1099170000 18000 0 YEKT} + {1111870800 21600 1 YEKST} + {1130619600 18000 0 YEKT} + {1143320400 21600 1 YEKST} + {1162069200 18000 0 YEKT} + {1174770000 21600 1 YEKST} + {1193518800 18000 0 YEKT} + {1206824400 21600 1 YEKST} + {1224968400 18000 0 YEKT} + {1238274000 21600 1 YEKST} + {1256418000 18000 0 YEKT} + {1269723600 21600 1 YEKST} + {1288472400 18000 0 YEKT} + {1301173200 21600 0 YEKT} + {1414267200 18000 0 YEKT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Yerevan b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Yerevan new file mode 100644 index 00000000..22008ef1 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Asia/Yerevan @@ -0,0 +1,70 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Asia/Yerevan) { + {-9223372036854775808 10680 0 LMT} + {-1441162680 10800 0 YERT} + {-405140400 14400 0 YERT} + {354916800 18000 1 YERST} + {370724400 14400 0 YERT} + {386452800 18000 1 YERST} + {402260400 14400 0 YERT} + {417988800 18000 1 YERST} + {433796400 14400 0 YERT} + {449611200 18000 1 YERST} + {465343200 14400 0 YERT} + {481068000 18000 1 YERST} + {496792800 14400 0 YERT} + {512517600 18000 1 YERST} + {528242400 14400 0 YERT} + {543967200 18000 1 YERST} + {559692000 14400 0 YERT} + {575416800 18000 1 YERST} + {591141600 14400 0 YERT} + {606866400 18000 1 YERST} + {622591200 14400 0 YERT} + {638316000 18000 1 YERST} + {654645600 14400 0 YERT} + {670370400 14400 1 YERST} + {685569600 14400 0 AMST} + {686098800 10800 0 AMT} + {701812800 14400 1 AMST} + {717534000 10800 0 AMT} + {733273200 14400 1 AMST} + {748998000 10800 0 AMT} + {764722800 14400 1 AMST} + {780447600 10800 0 AMT} + {796172400 14400 1 AMST} + {811897200 14400 0 AMT} + {852062400 14400 0 AMT} + {859672800 18000 1 AMST} + {877816800 14400 0 AMT} + {891122400 18000 1 AMST} + {909266400 14400 0 AMT} + {922572000 18000 1 AMST} + {941320800 14400 0 AMT} + {954021600 18000 1 AMST} + {972770400 14400 0 AMT} + {985471200 18000 1 AMST} + {1004220000 14400 0 AMT} + {1017525600 18000 1 AMST} + {1035669600 14400 0 AMT} + {1048975200 18000 1 AMST} + {1067119200 14400 0 AMT} + {1080424800 18000 1 AMST} + {1099173600 14400 0 AMT} + {1111874400 18000 1 AMST} + {1130623200 14400 0 AMT} + {1143324000 18000 1 AMST} + {1162072800 14400 0 AMT} + {1174773600 18000 1 AMST} + {1193522400 14400 0 AMT} + {1206828000 18000 1 AMST} + {1224972000 14400 0 AMT} + {1238277600 18000 1 AMST} + {1256421600 14400 0 AMT} + {1269727200 18000 1 AMST} + {1288476000 14400 0 AMT} + {1301176800 18000 1 AMST} + {1319925600 14400 0 AMT} + {1332626400 14400 0 AMT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Atlantic/Azores b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Atlantic/Azores new file mode 100644 index 00000000..fd47ba52 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Atlantic/Azores @@ -0,0 +1,349 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Atlantic/Azores) { + {-9223372036854775808 -6160 0 LMT} + {-2713904240 -6872 0 HMT} + {-1830377128 -7200 0 AZOT} + {-1689548400 -3600 1 AZOST} + {-1677794400 -7200 0 AZOT} + {-1667430000 -3600 1 AZOST} + {-1647730800 -7200 0 AZOT} + {-1635807600 -3600 1 AZOST} + {-1616194800 -7200 0 AZOT} + {-1604358000 -3600 1 AZOST} + {-1584658800 -7200 0 AZOT} + {-1572735600 -3600 1 AZOST} + {-1553036400 -7200 0 AZOT} + {-1541199600 -3600 1 AZOST} + {-1521500400 -7200 0 AZOT} + {-1442444400 -3600 1 AZOST} + {-1426806000 -7200 0 AZOT} + {-1379286000 -3600 1 AZOST} + {-1364770800 -7200 0 AZOT} + {-1348441200 -3600 1 AZOST} + {-1333321200 -7200 0 AZOT} + {-1316386800 -3600 1 AZOST} + {-1301266800 -7200 0 AZOT} + {-1284332400 -3600 1 AZOST} + {-1269817200 -7200 0 AZOT} + {-1221433200 -3600 1 AZOST} + {-1206918000 -7200 0 AZOT} + {-1191193200 -3600 1 AZOST} + {-1175468400 -7200 0 AZOT} + {-1127689200 -3600 1 AZOST} + {-1111964400 -7200 0 AZOT} + {-1096844400 -3600 1 AZOST} + {-1080514800 -7200 0 AZOT} + {-1063580400 -3600 1 AZOST} + {-1049065200 -7200 0 AZOT} + {-1033340400 -3600 1 AZOST} + {-1017615600 -7200 0 AZOT} + {-1002495600 -3600 1 AZOST} + {-986166000 -7200 0 AZOT} + {-969231600 -3600 1 AZOST} + {-950482800 -7200 0 AZOT} + {-942015600 -3600 1 AZOST} + {-922662000 -7200 0 AZOT} + {-906937200 -3600 1 AZOST} + {-891126000 -7200 0 AZOT} + {-877302000 -3600 1 AZOST} + {-873676800 0 1 AZOMT} + {-864000000 -3600 1 AZOST} + {-857948400 -7200 0 AZOT} + {-845852400 -3600 1 AZOST} + {-842832000 0 1 AZOMT} + {-831340800 -3600 1 AZOST} + {-825894000 -7200 0 AZOT} + {-814402800 -3600 1 AZOST} + {-810777600 0 1 AZOMT} + {-799891200 -3600 1 AZOST} + {-794444400 -7200 0 AZOT} + {-782953200 -3600 1 AZOST} + {-779328000 0 1 AZOMT} + {-768441600 -3600 1 AZOST} + {-762994800 -7200 0 AZOT} + {-749084400 -3600 1 AZOST} + {-733359600 -7200 0 AZOT} + {-717624000 -3600 1 AZOST} + {-701899200 -7200 0 AZOT} + {-686174400 -3600 1 AZOST} + {-670449600 -7200 0 AZOT} + {-654724800 -3600 1 AZOST} + {-639000000 -7200 0 AZOT} + {-591825600 -3600 1 AZOST} + {-575496000 -7200 0 AZOT} + {-559771200 -3600 1 AZOST} + {-544046400 -7200 0 AZOT} + {-528321600 -3600 1 AZOST} + {-512596800 -7200 0 AZOT} + {-496872000 -3600 1 AZOST} + {-481147200 -7200 0 AZOT} + {-465422400 -3600 1 AZOST} + {-449697600 -7200 0 AZOT} + {-433972800 -3600 1 AZOST} + {-417643200 -7200 0 AZOT} + {-401918400 -3600 1 AZOST} + {-386193600 -7200 0 AZOT} + {-370468800 -3600 1 AZOST} + {-354744000 -7200 0 AZOT} + {-339019200 -3600 1 AZOST} + {-323294400 -7200 0 AZOT} + {-307569600 -3600 1 AZOST} + {-291844800 -7200 0 AZOT} + {-276120000 -3600 1 AZOST} + {-260395200 -7200 0 AZOT} + {-244670400 -3600 1 AZOST} + {-228340800 -7200 0 AZOT} + {-212616000 -3600 1 AZOST} + {-196891200 -7200 0 AZOT} + {-181166400 -3600 1 AZOST} + {-165441600 -7200 0 AZOT} + {-149716800 -3600 1 AZOST} + {-133992000 -7200 0 AZOT} + {-118267200 -3600 0 AZOT} + {228272400 0 1 AZOST} + {243997200 -3600 0 AZOT} + {260326800 0 1 AZOST} + {276051600 -3600 0 AZOT} + {291776400 0 1 AZOST} + {307504800 -3600 0 AZOT} + {323226000 0 1 AZOST} + {338954400 -3600 0 AZOT} + {354679200 0 1 AZOST} + {370404000 -3600 0 AZOT} + {386128800 0 1 AZOST} + {401853600 -3600 0 AZOT} + {417582000 0 1 AZOST} + {433303200 -3600 0 AZOT} + {449028000 0 1 AZOST} + {465357600 -3600 0 AZOT} + {481082400 0 1 AZOST} + {496807200 -3600 0 AZOT} + {512532000 0 1 AZOST} + {528256800 -3600 0 AZOT} + {543981600 0 1 AZOST} + {559706400 -3600 0 AZOT} + {575431200 0 1 AZOST} + {591156000 -3600 0 AZOT} + {606880800 0 1 AZOST} + {622605600 -3600 0 AZOT} + {638330400 0 1 AZOST} + {654660000 -3600 0 AZOT} + {670384800 0 1 AZOST} + {686109600 -3600 0 AZOT} + {701834400 0 1 AZOST} + {733280400 0 0 AZOST} + {749005200 -3600 0 AZOT} + {764730000 0 1 AZOST} + {780454800 -3600 0 AZOT} + {796179600 0 1 AZOST} + {811904400 -3600 0 AZOT} + {828234000 0 1 AZOST} + {846378000 -3600 0 AZOT} + {859683600 0 1 AZOST} + {877827600 -3600 0 AZOT} + {891133200 0 1 AZOST} + {909277200 -3600 0 AZOT} + {922582800 0 1 AZOST} + {941331600 -3600 0 AZOT} + {954032400 0 1 AZOST} + {972781200 -3600 0 AZOT} + {985482000 0 1 AZOST} + {1004230800 -3600 0 AZOT} + {1017536400 0 1 AZOST} + {1035680400 -3600 0 AZOT} + {1048986000 0 1 AZOST} + {1067130000 -3600 0 AZOT} + {1080435600 0 1 AZOST} + {1099184400 -3600 0 AZOT} + {1111885200 0 1 AZOST} + {1130634000 -3600 0 AZOT} + {1143334800 0 1 AZOST} + {1162083600 -3600 0 AZOT} + {1174784400 0 1 AZOST} + {1193533200 -3600 0 AZOT} + {1206838800 0 1 AZOST} + {1224982800 -3600 0 AZOT} + {1238288400 0 1 AZOST} + {1256432400 -3600 0 AZOT} + {1269738000 0 1 AZOST} + {1288486800 -3600 0 AZOT} + {1301187600 0 1 AZOST} + {1319936400 -3600 0 AZOT} + {1332637200 0 1 AZOST} + {1351386000 -3600 0 AZOT} + {1364691600 0 1 AZOST} + {1382835600 -3600 0 AZOT} + {1396141200 0 1 AZOST} + {1414285200 -3600 0 AZOT} + {1427590800 0 1 AZOST} + {1445734800 -3600 0 AZOT} + {1459040400 0 1 AZOST} + {1477789200 -3600 0 AZOT} + {1490490000 0 1 AZOST} + {1509238800 -3600 0 AZOT} + {1521939600 0 1 AZOST} + {1540688400 -3600 0 AZOT} + {1553994000 0 1 AZOST} + {1572138000 -3600 0 AZOT} + {1585443600 0 1 AZOST} + {1603587600 -3600 0 AZOT} + {1616893200 0 1 AZOST} + {1635642000 -3600 0 AZOT} + {1648342800 0 1 AZOST} + {1667091600 -3600 0 AZOT} + {1679792400 0 1 AZOST} + {1698541200 -3600 0 AZOT} + {1711846800 0 1 AZOST} + {1729990800 -3600 0 AZOT} + {1743296400 0 1 AZOST} + {1761440400 -3600 0 AZOT} + {1774746000 0 1 AZOST} + {1792890000 -3600 0 AZOT} + {1806195600 0 1 AZOST} + {1824944400 -3600 0 AZOT} + {1837645200 0 1 AZOST} + {1856394000 -3600 0 AZOT} + {1869094800 0 1 AZOST} + {1887843600 -3600 0 AZOT} + {1901149200 0 1 AZOST} + {1919293200 -3600 0 AZOT} + {1932598800 0 1 AZOST} + {1950742800 -3600 0 AZOT} + {1964048400 0 1 AZOST} + {1982797200 -3600 0 AZOT} + {1995498000 0 1 AZOST} + {2014246800 -3600 0 AZOT} + {2026947600 0 1 AZOST} + {2045696400 -3600 0 AZOT} + {2058397200 0 1 AZOST} + {2077146000 -3600 0 AZOT} + {2090451600 0 1 AZOST} + {2108595600 -3600 0 AZOT} + {2121901200 0 1 AZOST} + {2140045200 -3600 0 AZOT} + {2153350800 0 1 AZOST} + {2172099600 -3600 0 AZOT} + {2184800400 0 1 AZOST} + {2203549200 -3600 0 AZOT} + {2216250000 0 1 AZOST} + {2234998800 -3600 0 AZOT} + {2248304400 0 1 AZOST} + {2266448400 -3600 0 AZOT} + {2279754000 0 1 AZOST} + {2297898000 -3600 0 AZOT} + {2311203600 0 1 AZOST} + {2329347600 -3600 0 AZOT} + {2342653200 0 1 AZOST} + {2361402000 -3600 0 AZOT} + {2374102800 0 1 AZOST} + {2392851600 -3600 0 AZOT} + {2405552400 0 1 AZOST} + {2424301200 -3600 0 AZOT} + {2437606800 0 1 AZOST} + {2455750800 -3600 0 AZOT} + {2469056400 0 1 AZOST} + {2487200400 -3600 0 AZOT} + {2500506000 0 1 AZOST} + {2519254800 -3600 0 AZOT} + {2531955600 0 1 AZOST} + {2550704400 -3600 0 AZOT} + {2563405200 0 1 AZOST} + {2582154000 -3600 0 AZOT} + {2595459600 0 1 AZOST} + {2613603600 -3600 0 AZOT} + {2626909200 0 1 AZOST} + {2645053200 -3600 0 AZOT} + {2658358800 0 1 AZOST} + {2676502800 -3600 0 AZOT} + {2689808400 0 1 AZOST} + {2708557200 -3600 0 AZOT} + {2721258000 0 1 AZOST} + {2740006800 -3600 0 AZOT} + {2752707600 0 1 AZOST} + {2771456400 -3600 0 AZOT} + {2784762000 0 1 AZOST} + {2802906000 -3600 0 AZOT} + {2816211600 0 1 AZOST} + {2834355600 -3600 0 AZOT} + {2847661200 0 1 AZOST} + {2866410000 -3600 0 AZOT} + {2879110800 0 1 AZOST} + {2897859600 -3600 0 AZOT} + {2910560400 0 1 AZOST} + {2929309200 -3600 0 AZOT} + {2942010000 0 1 AZOST} + {2960758800 -3600 0 AZOT} + {2974064400 0 1 AZOST} + {2992208400 -3600 0 AZOT} + {3005514000 0 1 AZOST} + {3023658000 -3600 0 AZOT} + {3036963600 0 1 AZOST} + {3055712400 -3600 0 AZOT} + {3068413200 0 1 AZOST} + {3087162000 -3600 0 AZOT} + {3099862800 0 1 AZOST} + {3118611600 -3600 0 AZOT} + {3131917200 0 1 AZOST} + {3150061200 -3600 0 AZOT} + {3163366800 0 1 AZOST} + {3181510800 -3600 0 AZOT} + {3194816400 0 1 AZOST} + {3212960400 -3600 0 AZOT} + {3226266000 0 1 AZOST} + {3245014800 -3600 0 AZOT} + {3257715600 0 1 AZOST} + {3276464400 -3600 0 AZOT} + {3289165200 0 1 AZOST} + {3307914000 -3600 0 AZOT} + {3321219600 0 1 AZOST} + {3339363600 -3600 0 AZOT} + {3352669200 0 1 AZOST} + {3370813200 -3600 0 AZOT} + {3384118800 0 1 AZOST} + {3402867600 -3600 0 AZOT} + {3415568400 0 1 AZOST} + {3434317200 -3600 0 AZOT} + {3447018000 0 1 AZOST} + {3465766800 -3600 0 AZOT} + {3479072400 0 1 AZOST} + {3497216400 -3600 0 AZOT} + {3510522000 0 1 AZOST} + {3528666000 -3600 0 AZOT} + {3541971600 0 1 AZOST} + {3560115600 -3600 0 AZOT} + {3573421200 0 1 AZOST} + {3592170000 -3600 0 AZOT} + {3604870800 0 1 AZOST} + {3623619600 -3600 0 AZOT} + {3636320400 0 1 AZOST} + {3655069200 -3600 0 AZOT} + {3668374800 0 1 AZOST} + {3686518800 -3600 0 AZOT} + {3699824400 0 1 AZOST} + {3717968400 -3600 0 AZOT} + {3731274000 0 1 AZOST} + {3750022800 -3600 0 AZOT} + {3762723600 0 1 AZOST} + {3781472400 -3600 0 AZOT} + {3794173200 0 1 AZOST} + {3812922000 -3600 0 AZOT} + {3825622800 0 1 AZOST} + {3844371600 -3600 0 AZOT} + {3857677200 0 1 AZOST} + {3875821200 -3600 0 AZOT} + {3889126800 0 1 AZOST} + {3907270800 -3600 0 AZOT} + {3920576400 0 1 AZOST} + {3939325200 -3600 0 AZOT} + {3952026000 0 1 AZOST} + {3970774800 -3600 0 AZOT} + {3983475600 0 1 AZOST} + {4002224400 -3600 0 AZOT} + {4015530000 0 1 AZOST} + {4033674000 -3600 0 AZOT} + {4046979600 0 1 AZOST} + {4065123600 -3600 0 AZOT} + {4078429200 0 1 AZOST} + {4096573200 -3600 0 AZOT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Atlantic/Bermuda b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Atlantic/Bermuda new file mode 100644 index 00000000..2d4d9835 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Atlantic/Bermuda @@ -0,0 +1,259 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Atlantic/Bermuda) { + {-9223372036854775808 -15558 0 LMT} + {-1262281242 -14400 0 AST} + {136360800 -10800 0 ADT} + {152082000 -14400 0 AST} + {167810400 -10800 1 ADT} + {183531600 -14400 0 AST} + {189316800 -14400 0 AST} + {199260000 -10800 1 ADT} + {215586000 -14400 0 AST} + {230709600 -10800 1 ADT} + {247035600 -14400 0 AST} + {262764000 -10800 1 ADT} + {278485200 -14400 0 AST} + {294213600 -10800 1 ADT} + {309934800 -14400 0 AST} + {325663200 -10800 1 ADT} + {341384400 -14400 0 AST} + {357112800 -10800 1 ADT} + {372834000 -14400 0 AST} + {388562400 -10800 1 ADT} + {404888400 -14400 0 AST} + {420012000 -10800 1 ADT} + {436338000 -14400 0 AST} + {452066400 -10800 1 ADT} + {467787600 -14400 0 AST} + {483516000 -10800 1 ADT} + {499237200 -14400 0 AST} + {514965600 -10800 1 ADT} + {530686800 -14400 0 AST} + {544600800 -10800 1 ADT} + {562136400 -14400 0 AST} + {576050400 -10800 1 ADT} + {594190800 -14400 0 AST} + {607500000 -10800 1 ADT} + {625640400 -14400 0 AST} + {638949600 -10800 1 ADT} + {657090000 -14400 0 AST} + {671004000 -10800 1 ADT} + {688539600 -14400 0 AST} + {702453600 -10800 1 ADT} + {719989200 -14400 0 AST} + {733903200 -10800 1 ADT} + {752043600 -14400 0 AST} + {765352800 -10800 1 ADT} + {783493200 -14400 0 AST} + {796802400 -10800 1 ADT} + {814942800 -14400 0 AST} + {828856800 -10800 1 ADT} + {846392400 -14400 0 AST} + {860306400 -10800 1 ADT} + {877842000 -14400 0 AST} + {891756000 -10800 1 ADT} + {909291600 -14400 0 AST} + {923205600 -10800 1 ADT} + {941346000 -14400 0 AST} + {954655200 -10800 1 ADT} + {972795600 -14400 0 AST} + {986104800 -10800 1 ADT} + {1004245200 -14400 0 AST} + {1018159200 -10800 1 ADT} + {1035694800 -14400 0 AST} + {1049608800 -10800 1 ADT} + {1067144400 -14400 0 AST} + {1081058400 -10800 1 ADT} + {1099198800 -14400 0 AST} + {1112508000 -10800 1 ADT} + {1130648400 -14400 0 AST} + {1143957600 -10800 1 ADT} + {1162098000 -14400 0 AST} + {1173592800 -10800 1 ADT} + {1194152400 -14400 0 AST} + {1205042400 -10800 1 ADT} + {1225602000 -14400 0 AST} + {1236492000 -10800 1 ADT} + {1257051600 -14400 0 AST} + {1268546400 -10800 1 ADT} + {1289106000 -14400 0 AST} + {1299996000 -10800 1 ADT} + {1320555600 -14400 0 AST} + {1331445600 -10800 1 ADT} + {1352005200 -14400 0 AST} + {1362895200 -10800 1 ADT} + {1383454800 -14400 0 AST} + {1394344800 -10800 1 ADT} + {1414904400 -14400 0 AST} + {1425794400 -10800 1 ADT} + {1446354000 -14400 0 AST} + {1457848800 -10800 1 ADT} + {1478408400 -14400 0 AST} + {1489298400 -10800 1 ADT} + {1509858000 -14400 0 AST} + {1520748000 -10800 1 ADT} + {1541307600 -14400 0 AST} + {1552197600 -10800 1 ADT} + {1572757200 -14400 0 AST} + {1583647200 -10800 1 ADT} + {1604206800 -14400 0 AST} + {1615701600 -10800 1 ADT} + {1636261200 -14400 0 AST} + {1647151200 -10800 1 ADT} + {1667710800 -14400 0 AST} + {1678600800 -10800 1 ADT} + {1699160400 -14400 0 AST} + {1710050400 -10800 1 ADT} + {1730610000 -14400 0 AST} + {1741500000 -10800 1 ADT} + {1762059600 -14400 0 AST} + {1772949600 -10800 1 ADT} + {1793509200 -14400 0 AST} + {1805004000 -10800 1 ADT} + {1825563600 -14400 0 AST} + {1836453600 -10800 1 ADT} + {1857013200 -14400 0 AST} + {1867903200 -10800 1 ADT} + {1888462800 -14400 0 AST} + {1899352800 -10800 1 ADT} + {1919912400 -14400 0 AST} + {1930802400 -10800 1 ADT} + {1951362000 -14400 0 AST} + {1962856800 -10800 1 ADT} + {1983416400 -14400 0 AST} + {1994306400 -10800 1 ADT} + {2014866000 -14400 0 AST} + {2025756000 -10800 1 ADT} + {2046315600 -14400 0 AST} + {2057205600 -10800 1 ADT} + {2077765200 -14400 0 AST} + {2088655200 -10800 1 ADT} + {2109214800 -14400 0 AST} + {2120104800 -10800 1 ADT} + {2140664400 -14400 0 AST} + {2152159200 -10800 1 ADT} + {2172718800 -14400 0 AST} + {2183608800 -10800 1 ADT} + {2204168400 -14400 0 AST} + {2215058400 -10800 1 ADT} + {2235618000 -14400 0 AST} + {2246508000 -10800 1 ADT} + {2267067600 -14400 0 AST} + {2277957600 -10800 1 ADT} + {2298517200 -14400 0 AST} + {2309407200 -10800 1 ADT} + {2329966800 -14400 0 AST} + {2341461600 -10800 1 ADT} + {2362021200 -14400 0 AST} + {2372911200 -10800 1 ADT} + {2393470800 -14400 0 AST} + {2404360800 -10800 1 ADT} + {2424920400 -14400 0 AST} + {2435810400 -10800 1 ADT} + {2456370000 -14400 0 AST} + {2467260000 -10800 1 ADT} + {2487819600 -14400 0 AST} + {2499314400 -10800 1 ADT} + {2519874000 -14400 0 AST} + {2530764000 -10800 1 ADT} + {2551323600 -14400 0 AST} + {2562213600 -10800 1 ADT} + {2582773200 -14400 0 AST} + {2593663200 -10800 1 ADT} + {2614222800 -14400 0 AST} + {2625112800 -10800 1 ADT} + {2645672400 -14400 0 AST} + {2656562400 -10800 1 ADT} + {2677122000 -14400 0 AST} + {2688616800 -10800 1 ADT} + {2709176400 -14400 0 AST} + {2720066400 -10800 1 ADT} + {2740626000 -14400 0 AST} + {2751516000 -10800 1 ADT} + {2772075600 -14400 0 AST} + {2782965600 -10800 1 ADT} + {2803525200 -14400 0 AST} + {2814415200 -10800 1 ADT} + {2834974800 -14400 0 AST} + {2846469600 -10800 1 ADT} + {2867029200 -14400 0 AST} + {2877919200 -10800 1 ADT} + {2898478800 -14400 0 AST} + {2909368800 -10800 1 ADT} + {2929928400 -14400 0 AST} + {2940818400 -10800 1 ADT} + {2961378000 -14400 0 AST} + {2972268000 -10800 1 ADT} + {2992827600 -14400 0 AST} + {3003717600 -10800 1 ADT} + {3024277200 -14400 0 AST} + {3035772000 -10800 1 ADT} + {3056331600 -14400 0 AST} + {3067221600 -10800 1 ADT} + {3087781200 -14400 0 AST} + {3098671200 -10800 1 ADT} + {3119230800 -14400 0 AST} + {3130120800 -10800 1 ADT} + {3150680400 -14400 0 AST} + {3161570400 -10800 1 ADT} + {3182130000 -14400 0 AST} + {3193020000 -10800 1 ADT} + {3213579600 -14400 0 AST} + {3225074400 -10800 1 ADT} + {3245634000 -14400 0 AST} + {3256524000 -10800 1 ADT} + {3277083600 -14400 0 AST} + {3287973600 -10800 1 ADT} + {3308533200 -14400 0 AST} + {3319423200 -10800 1 ADT} + {3339982800 -14400 0 AST} + {3350872800 -10800 1 ADT} + {3371432400 -14400 0 AST} + {3382927200 -10800 1 ADT} + {3403486800 -14400 0 AST} + {3414376800 -10800 1 ADT} + {3434936400 -14400 0 AST} + {3445826400 -10800 1 ADT} + {3466386000 -14400 0 AST} + {3477276000 -10800 1 ADT} + {3497835600 -14400 0 AST} + {3508725600 -10800 1 ADT} + {3529285200 -14400 0 AST} + {3540175200 -10800 1 ADT} + {3560734800 -14400 0 AST} + {3572229600 -10800 1 ADT} + {3592789200 -14400 0 AST} + {3603679200 -10800 1 ADT} + {3624238800 -14400 0 AST} + {3635128800 -10800 1 ADT} + {3655688400 -14400 0 AST} + {3666578400 -10800 1 ADT} + {3687138000 -14400 0 AST} + {3698028000 -10800 1 ADT} + {3718587600 -14400 0 AST} + {3730082400 -10800 1 ADT} + {3750642000 -14400 0 AST} + {3761532000 -10800 1 ADT} + {3782091600 -14400 0 AST} + {3792981600 -10800 1 ADT} + {3813541200 -14400 0 AST} + {3824431200 -10800 1 ADT} + {3844990800 -14400 0 AST} + {3855880800 -10800 1 ADT} + {3876440400 -14400 0 AST} + {3887330400 -10800 1 ADT} + {3907890000 -14400 0 AST} + {3919384800 -10800 1 ADT} + {3939944400 -14400 0 AST} + {3950834400 -10800 1 ADT} + {3971394000 -14400 0 AST} + {3982284000 -10800 1 ADT} + {4002843600 -14400 0 AST} + {4013733600 -10800 1 ADT} + {4034293200 -14400 0 AST} + {4045183200 -10800 1 ADT} + {4065742800 -14400 0 AST} + {4076632800 -10800 1 ADT} + {4097192400 -14400 0 AST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Atlantic/Canary b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Atlantic/Canary new file mode 100644 index 00000000..dcfba830 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Atlantic/Canary @@ -0,0 +1,247 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Atlantic/Canary) { + {-9223372036854775808 -3696 0 LMT} + {-1509663504 -3600 0 CANT} + {-733874400 0 0 WET} + {323827200 3600 1 WEST} + {338950800 0 0 WET} + {354675600 3600 1 WEST} + {370400400 0 0 WET} + {386125200 3600 1 WEST} + {401850000 0 0 WET} + {417574800 3600 1 WEST} + {433299600 0 0 WET} + {449024400 3600 1 WEST} + {465354000 0 0 WET} + {481078800 3600 1 WEST} + {496803600 0 0 WET} + {512528400 3600 1 WEST} + {528253200 0 0 WET} + {543978000 3600 1 WEST} + {559702800 0 0 WET} + {575427600 3600 1 WEST} + {591152400 0 0 WET} + {606877200 3600 1 WEST} + {622602000 0 0 WET} + {638326800 3600 1 WEST} + {654656400 0 0 WET} + {670381200 3600 1 WEST} + {686106000 0 0 WET} + {701830800 3600 1 WEST} + {717555600 0 0 WET} + {733280400 3600 1 WEST} + {749005200 0 0 WET} + {764730000 3600 1 WEST} + {780454800 0 0 WET} + {796179600 3600 1 WEST} + {811904400 0 0 WET} + {828234000 3600 1 WEST} + {846378000 0 0 WET} + {859683600 3600 1 WEST} + {877827600 0 0 WET} + {891133200 3600 1 WEST} + {909277200 0 0 WET} + {922582800 3600 1 WEST} + {941331600 0 0 WET} + {954032400 3600 1 WEST} + {972781200 0 0 WET} + {985482000 3600 1 WEST} + {1004230800 0 0 WET} + {1017536400 3600 1 WEST} + {1035680400 0 0 WET} + {1048986000 3600 1 WEST} + {1067130000 0 0 WET} + {1080435600 3600 1 WEST} + {1099184400 0 0 WET} + {1111885200 3600 1 WEST} + {1130634000 0 0 WET} + {1143334800 3600 1 WEST} + {1162083600 0 0 WET} + {1174784400 3600 1 WEST} + {1193533200 0 0 WET} + {1206838800 3600 1 WEST} + {1224982800 0 0 WET} + {1238288400 3600 1 WEST} + {1256432400 0 0 WET} + {1269738000 3600 1 WEST} + {1288486800 0 0 WET} + {1301187600 3600 1 WEST} + {1319936400 0 0 WET} + {1332637200 3600 1 WEST} + {1351386000 0 0 WET} + {1364691600 3600 1 WEST} + {1382835600 0 0 WET} + {1396141200 3600 1 WEST} + {1414285200 0 0 WET} + {1427590800 3600 1 WEST} + {1445734800 0 0 WET} + {1459040400 3600 1 WEST} + {1477789200 0 0 WET} + {1490490000 3600 1 WEST} + {1509238800 0 0 WET} + {1521939600 3600 1 WEST} + {1540688400 0 0 WET} + {1553994000 3600 1 WEST} + {1572138000 0 0 WET} + {1585443600 3600 1 WEST} + {1603587600 0 0 WET} + {1616893200 3600 1 WEST} + {1635642000 0 0 WET} + {1648342800 3600 1 WEST} + {1667091600 0 0 WET} + {1679792400 3600 1 WEST} + {1698541200 0 0 WET} + {1711846800 3600 1 WEST} + {1729990800 0 0 WET} + {1743296400 3600 1 WEST} + {1761440400 0 0 WET} + {1774746000 3600 1 WEST} + {1792890000 0 0 WET} + {1806195600 3600 1 WEST} + {1824944400 0 0 WET} + {1837645200 3600 1 WEST} + {1856394000 0 0 WET} + {1869094800 3600 1 WEST} + {1887843600 0 0 WET} + {1901149200 3600 1 WEST} + {1919293200 0 0 WET} + {1932598800 3600 1 WEST} + {1950742800 0 0 WET} + {1964048400 3600 1 WEST} + {1982797200 0 0 WET} + {1995498000 3600 1 WEST} + {2014246800 0 0 WET} + {2026947600 3600 1 WEST} + {2045696400 0 0 WET} + {2058397200 3600 1 WEST} + {2077146000 0 0 WET} + {2090451600 3600 1 WEST} + {2108595600 0 0 WET} + {2121901200 3600 1 WEST} + {2140045200 0 0 WET} + {2153350800 3600 1 WEST} + {2172099600 0 0 WET} + {2184800400 3600 1 WEST} + {2203549200 0 0 WET} + {2216250000 3600 1 WEST} + {2234998800 0 0 WET} + {2248304400 3600 1 WEST} + {2266448400 0 0 WET} + {2279754000 3600 1 WEST} + {2297898000 0 0 WET} + {2311203600 3600 1 WEST} + {2329347600 0 0 WET} + {2342653200 3600 1 WEST} + {2361402000 0 0 WET} + {2374102800 3600 1 WEST} + {2392851600 0 0 WET} + {2405552400 3600 1 WEST} + {2424301200 0 0 WET} + {2437606800 3600 1 WEST} + {2455750800 0 0 WET} + {2469056400 3600 1 WEST} + {2487200400 0 0 WET} + {2500506000 3600 1 WEST} + {2519254800 0 0 WET} + {2531955600 3600 1 WEST} + {2550704400 0 0 WET} + {2563405200 3600 1 WEST} + {2582154000 0 0 WET} + {2595459600 3600 1 WEST} + {2613603600 0 0 WET} + {2626909200 3600 1 WEST} + {2645053200 0 0 WET} + {2658358800 3600 1 WEST} + {2676502800 0 0 WET} + {2689808400 3600 1 WEST} + {2708557200 0 0 WET} + {2721258000 3600 1 WEST} + {2740006800 0 0 WET} + {2752707600 3600 1 WEST} + {2771456400 0 0 WET} + {2784762000 3600 1 WEST} + {2802906000 0 0 WET} + {2816211600 3600 1 WEST} + {2834355600 0 0 WET} + {2847661200 3600 1 WEST} + {2866410000 0 0 WET} + {2879110800 3600 1 WEST} + {2897859600 0 0 WET} + {2910560400 3600 1 WEST} + {2929309200 0 0 WET} + {2942010000 3600 1 WEST} + {2960758800 0 0 WET} + {2974064400 3600 1 WEST} + {2992208400 0 0 WET} + {3005514000 3600 1 WEST} + {3023658000 0 0 WET} + {3036963600 3600 1 WEST} + {3055712400 0 0 WET} + {3068413200 3600 1 WEST} + {3087162000 0 0 WET} + {3099862800 3600 1 WEST} + {3118611600 0 0 WET} + {3131917200 3600 1 WEST} + {3150061200 0 0 WET} + {3163366800 3600 1 WEST} + {3181510800 0 0 WET} + {3194816400 3600 1 WEST} + {3212960400 0 0 WET} + {3226266000 3600 1 WEST} + {3245014800 0 0 WET} + {3257715600 3600 1 WEST} + {3276464400 0 0 WET} + {3289165200 3600 1 WEST} + {3307914000 0 0 WET} + {3321219600 3600 1 WEST} + {3339363600 0 0 WET} + {3352669200 3600 1 WEST} + {3370813200 0 0 WET} + {3384118800 3600 1 WEST} + {3402867600 0 0 WET} + {3415568400 3600 1 WEST} + {3434317200 0 0 WET} + {3447018000 3600 1 WEST} + {3465766800 0 0 WET} + {3479072400 3600 1 WEST} + {3497216400 0 0 WET} + {3510522000 3600 1 WEST} + {3528666000 0 0 WET} + {3541971600 3600 1 WEST} + {3560115600 0 0 WET} + {3573421200 3600 1 WEST} + {3592170000 0 0 WET} + {3604870800 3600 1 WEST} + {3623619600 0 0 WET} + {3636320400 3600 1 WEST} + {3655069200 0 0 WET} + {3668374800 3600 1 WEST} + {3686518800 0 0 WET} + {3699824400 3600 1 WEST} + {3717968400 0 0 WET} + {3731274000 3600 1 WEST} + {3750022800 0 0 WET} + {3762723600 3600 1 WEST} + {3781472400 0 0 WET} + {3794173200 3600 1 WEST} + {3812922000 0 0 WET} + {3825622800 3600 1 WEST} + {3844371600 0 0 WET} + {3857677200 3600 1 WEST} + {3875821200 0 0 WET} + {3889126800 3600 1 WEST} + {3907270800 0 0 WET} + {3920576400 3600 1 WEST} + {3939325200 0 0 WET} + {3952026000 3600 1 WEST} + {3970774800 0 0 WET} + {3983475600 3600 1 WEST} + {4002224400 0 0 WET} + {4015530000 3600 1 WEST} + {4033674000 0 0 WET} + {4046979600 3600 1 WEST} + {4065123600 0 0 WET} + {4078429200 3600 1 WEST} + {4096573200 0 0 WET} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Atlantic/Cape_Verde b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Atlantic/Cape_Verde new file mode 100644 index 00000000..f0bb79f7 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Atlantic/Cape_Verde @@ -0,0 +1,9 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Atlantic/Cape_Verde) { + {-9223372036854775808 -5644 0 LMT} + {-1988144756 -7200 0 CVT} + {-862610400 -3600 1 CVST} + {-764118000 -7200 0 CVT} + {186120000 -3600 0 CVT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Atlantic/Faeroe b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Atlantic/Faeroe new file mode 100644 index 00000000..4cafc340 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Atlantic/Faeroe @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Atlantic/Faroe)]} { + LoadTimeZoneFile Atlantic/Faroe +} +set TZData(:Atlantic/Faeroe) $TZData(:Atlantic/Faroe) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Atlantic/Faroe b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Atlantic/Faroe new file mode 100644 index 00000000..d2c314a3 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Atlantic/Faroe @@ -0,0 +1,245 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Atlantic/Faroe) { + {-9223372036854775808 -1624 0 LMT} + {-1955748776 0 0 WET} + {347155200 0 0 WET} + {354675600 3600 1 WEST} + {370400400 0 0 WET} + {386125200 3600 1 WEST} + {401850000 0 0 WET} + {417574800 3600 1 WEST} + {433299600 0 0 WET} + {449024400 3600 1 WEST} + {465354000 0 0 WET} + {481078800 3600 1 WEST} + {496803600 0 0 WET} + {512528400 3600 1 WEST} + {528253200 0 0 WET} + {543978000 3600 1 WEST} + {559702800 0 0 WET} + {575427600 3600 1 WEST} + {591152400 0 0 WET} + {606877200 3600 1 WEST} + {622602000 0 0 WET} + {638326800 3600 1 WEST} + {654656400 0 0 WET} + {670381200 3600 1 WEST} + {686106000 0 0 WET} + {701830800 3600 1 WEST} + {717555600 0 0 WET} + {733280400 3600 1 WEST} + {749005200 0 0 WET} + {764730000 3600 1 WEST} + {780454800 0 0 WET} + {796179600 3600 1 WEST} + {811904400 0 0 WET} + {828234000 3600 1 WEST} + {846378000 0 0 WET} + {859683600 3600 1 WEST} + {877827600 0 0 WET} + {891133200 3600 1 WEST} + {909277200 0 0 WET} + {922582800 3600 1 WEST} + {941331600 0 0 WET} + {954032400 3600 1 WEST} + {972781200 0 0 WET} + {985482000 3600 1 WEST} + {1004230800 0 0 WET} + {1017536400 3600 1 WEST} + {1035680400 0 0 WET} + {1048986000 3600 1 WEST} + {1067130000 0 0 WET} + {1080435600 3600 1 WEST} + {1099184400 0 0 WET} + {1111885200 3600 1 WEST} + {1130634000 0 0 WET} + {1143334800 3600 1 WEST} + {1162083600 0 0 WET} + {1174784400 3600 1 WEST} + {1193533200 0 0 WET} + {1206838800 3600 1 WEST} + {1224982800 0 0 WET} + {1238288400 3600 1 WEST} + {1256432400 0 0 WET} + {1269738000 3600 1 WEST} + {1288486800 0 0 WET} + {1301187600 3600 1 WEST} + {1319936400 0 0 WET} + {1332637200 3600 1 WEST} + {1351386000 0 0 WET} + {1364691600 3600 1 WEST} + {1382835600 0 0 WET} + {1396141200 3600 1 WEST} + {1414285200 0 0 WET} + {1427590800 3600 1 WEST} + {1445734800 0 0 WET} + {1459040400 3600 1 WEST} + {1477789200 0 0 WET} + {1490490000 3600 1 WEST} + {1509238800 0 0 WET} + {1521939600 3600 1 WEST} + {1540688400 0 0 WET} + {1553994000 3600 1 WEST} + {1572138000 0 0 WET} + {1585443600 3600 1 WEST} + {1603587600 0 0 WET} + {1616893200 3600 1 WEST} + {1635642000 0 0 WET} + {1648342800 3600 1 WEST} + {1667091600 0 0 WET} + {1679792400 3600 1 WEST} + {1698541200 0 0 WET} + {1711846800 3600 1 WEST} + {1729990800 0 0 WET} + {1743296400 3600 1 WEST} + {1761440400 0 0 WET} + {1774746000 3600 1 WEST} + {1792890000 0 0 WET} + {1806195600 3600 1 WEST} + {1824944400 0 0 WET} + {1837645200 3600 1 WEST} + {1856394000 0 0 WET} + {1869094800 3600 1 WEST} + {1887843600 0 0 WET} + {1901149200 3600 1 WEST} + {1919293200 0 0 WET} + {1932598800 3600 1 WEST} + {1950742800 0 0 WET} + {1964048400 3600 1 WEST} + {1982797200 0 0 WET} + {1995498000 3600 1 WEST} + {2014246800 0 0 WET} + {2026947600 3600 1 WEST} + {2045696400 0 0 WET} + {2058397200 3600 1 WEST} + {2077146000 0 0 WET} + {2090451600 3600 1 WEST} + {2108595600 0 0 WET} + {2121901200 3600 1 WEST} + {2140045200 0 0 WET} + {2153350800 3600 1 WEST} + {2172099600 0 0 WET} + {2184800400 3600 1 WEST} + {2203549200 0 0 WET} + {2216250000 3600 1 WEST} + {2234998800 0 0 WET} + {2248304400 3600 1 WEST} + {2266448400 0 0 WET} + {2279754000 3600 1 WEST} + {2297898000 0 0 WET} + {2311203600 3600 1 WEST} + {2329347600 0 0 WET} + {2342653200 3600 1 WEST} + {2361402000 0 0 WET} + {2374102800 3600 1 WEST} + {2392851600 0 0 WET} + {2405552400 3600 1 WEST} + {2424301200 0 0 WET} + {2437606800 3600 1 WEST} + {2455750800 0 0 WET} + {2469056400 3600 1 WEST} + {2487200400 0 0 WET} + {2500506000 3600 1 WEST} + {2519254800 0 0 WET} + {2531955600 3600 1 WEST} + {2550704400 0 0 WET} + {2563405200 3600 1 WEST} + {2582154000 0 0 WET} + {2595459600 3600 1 WEST} + {2613603600 0 0 WET} + {2626909200 3600 1 WEST} + {2645053200 0 0 WET} + {2658358800 3600 1 WEST} + {2676502800 0 0 WET} + {2689808400 3600 1 WEST} + {2708557200 0 0 WET} + {2721258000 3600 1 WEST} + {2740006800 0 0 WET} + {2752707600 3600 1 WEST} + {2771456400 0 0 WET} + {2784762000 3600 1 WEST} + {2802906000 0 0 WET} + {2816211600 3600 1 WEST} + {2834355600 0 0 WET} + {2847661200 3600 1 WEST} + {2866410000 0 0 WET} + {2879110800 3600 1 WEST} + {2897859600 0 0 WET} + {2910560400 3600 1 WEST} + {2929309200 0 0 WET} + {2942010000 3600 1 WEST} + {2960758800 0 0 WET} + {2974064400 3600 1 WEST} + {2992208400 0 0 WET} + {3005514000 3600 1 WEST} + {3023658000 0 0 WET} + {3036963600 3600 1 WEST} + {3055712400 0 0 WET} + {3068413200 3600 1 WEST} + {3087162000 0 0 WET} + {3099862800 3600 1 WEST} + {3118611600 0 0 WET} + {3131917200 3600 1 WEST} + {3150061200 0 0 WET} + {3163366800 3600 1 WEST} + {3181510800 0 0 WET} + {3194816400 3600 1 WEST} + {3212960400 0 0 WET} + {3226266000 3600 1 WEST} + {3245014800 0 0 WET} + {3257715600 3600 1 WEST} + {3276464400 0 0 WET} + {3289165200 3600 1 WEST} + {3307914000 0 0 WET} + {3321219600 3600 1 WEST} + {3339363600 0 0 WET} + {3352669200 3600 1 WEST} + {3370813200 0 0 WET} + {3384118800 3600 1 WEST} + {3402867600 0 0 WET} + {3415568400 3600 1 WEST} + {3434317200 0 0 WET} + {3447018000 3600 1 WEST} + {3465766800 0 0 WET} + {3479072400 3600 1 WEST} + {3497216400 0 0 WET} + {3510522000 3600 1 WEST} + {3528666000 0 0 WET} + {3541971600 3600 1 WEST} + {3560115600 0 0 WET} + {3573421200 3600 1 WEST} + {3592170000 0 0 WET} + {3604870800 3600 1 WEST} + {3623619600 0 0 WET} + {3636320400 3600 1 WEST} + {3655069200 0 0 WET} + {3668374800 3600 1 WEST} + {3686518800 0 0 WET} + {3699824400 3600 1 WEST} + {3717968400 0 0 WET} + {3731274000 3600 1 WEST} + {3750022800 0 0 WET} + {3762723600 3600 1 WEST} + {3781472400 0 0 WET} + {3794173200 3600 1 WEST} + {3812922000 0 0 WET} + {3825622800 3600 1 WEST} + {3844371600 0 0 WET} + {3857677200 3600 1 WEST} + {3875821200 0 0 WET} + {3889126800 3600 1 WEST} + {3907270800 0 0 WET} + {3920576400 3600 1 WEST} + {3939325200 0 0 WET} + {3952026000 3600 1 WEST} + {3970774800 0 0 WET} + {3983475600 3600 1 WEST} + {4002224400 0 0 WET} + {4015530000 3600 1 WEST} + {4033674000 0 0 WET} + {4046979600 3600 1 WEST} + {4065123600 0 0 WET} + {4078429200 3600 1 WEST} + {4096573200 0 0 WET} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Atlantic/Jan_Mayen b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Atlantic/Jan_Mayen new file mode 100644 index 00000000..e5921878 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Atlantic/Jan_Mayen @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Europe/Oslo)]} { + LoadTimeZoneFile Europe/Oslo +} +set TZData(:Atlantic/Jan_Mayen) $TZData(:Europe/Oslo) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Atlantic/Madeira b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Atlantic/Madeira new file mode 100644 index 00000000..fac7f928 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Atlantic/Madeira @@ -0,0 +1,350 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Atlantic/Madeira) { + {-9223372036854775808 -4056 0 LMT} + {-2713906344 -4056 0 FMT} + {-1830379944 -3600 0 MADT} + {-1689552000 0 1 MADST} + {-1677798000 -3600 0 MADT} + {-1667433600 0 1 MADST} + {-1647734400 -3600 0 MADT} + {-1635811200 0 1 MADST} + {-1616198400 -3600 0 MADT} + {-1604361600 0 1 MADST} + {-1584662400 -3600 0 MADT} + {-1572739200 0 1 MADST} + {-1553040000 -3600 0 MADT} + {-1541203200 0 1 MADST} + {-1521504000 -3600 0 MADT} + {-1442448000 0 1 MADST} + {-1426809600 -3600 0 MADT} + {-1379289600 0 1 MADST} + {-1364774400 -3600 0 MADT} + {-1348444800 0 1 MADST} + {-1333324800 -3600 0 MADT} + {-1316390400 0 1 MADST} + {-1301270400 -3600 0 MADT} + {-1284336000 0 1 MADST} + {-1269820800 -3600 0 MADT} + {-1221436800 0 1 MADST} + {-1206921600 -3600 0 MADT} + {-1191196800 0 1 MADST} + {-1175472000 -3600 0 MADT} + {-1127692800 0 1 MADST} + {-1111968000 -3600 0 MADT} + {-1096848000 0 1 MADST} + {-1080518400 -3600 0 MADT} + {-1063584000 0 1 MADST} + {-1049068800 -3600 0 MADT} + {-1033344000 0 1 MADST} + {-1017619200 -3600 0 MADT} + {-1002499200 0 1 MADST} + {-986169600 -3600 0 MADT} + {-969235200 0 1 MADST} + {-950486400 -3600 0 MADT} + {-942019200 0 1 MADST} + {-922665600 -3600 0 MADT} + {-906940800 0 1 MADST} + {-891129600 -3600 0 MADT} + {-877305600 0 1 MADST} + {-873680400 3600 1 MADMT} + {-864003600 0 1 MADST} + {-857952000 -3600 0 MADT} + {-845856000 0 1 MADST} + {-842835600 3600 1 MADMT} + {-831344400 0 1 MADST} + {-825897600 -3600 0 MADT} + {-814406400 0 1 MADST} + {-810781200 3600 1 MADMT} + {-799894800 0 1 MADST} + {-794448000 -3600 0 MADT} + {-782956800 0 1 MADST} + {-779331600 3600 1 MADMT} + {-768445200 0 1 MADST} + {-762998400 -3600 0 MADT} + {-749088000 0 1 MADST} + {-733363200 -3600 0 MADT} + {-717627600 0 1 MADST} + {-701902800 -3600 0 MADT} + {-686178000 0 1 MADST} + {-670453200 -3600 0 MADT} + {-654728400 0 1 MADST} + {-639003600 -3600 0 MADT} + {-591829200 0 1 MADST} + {-575499600 -3600 0 MADT} + {-559774800 0 1 MADST} + {-544050000 -3600 0 MADT} + {-528325200 0 1 MADST} + {-512600400 -3600 0 MADT} + {-496875600 0 1 MADST} + {-481150800 -3600 0 MADT} + {-465426000 0 1 MADST} + {-449701200 -3600 0 MADT} + {-433976400 0 1 MADST} + {-417646800 -3600 0 MADT} + {-401922000 0 1 MADST} + {-386197200 -3600 0 MADT} + {-370472400 0 1 MADST} + {-354747600 -3600 0 MADT} + {-339022800 0 1 MADST} + {-323298000 -3600 0 MADT} + {-307573200 0 1 MADST} + {-291848400 -3600 0 MADT} + {-276123600 0 1 MADST} + {-260398800 -3600 0 MADT} + {-244674000 0 1 MADST} + {-228344400 -3600 0 MADT} + {-212619600 0 1 MADST} + {-196894800 -3600 0 MADT} + {-181170000 0 1 MADST} + {-165445200 -3600 0 MADT} + {-149720400 0 1 MADST} + {-133995600 -3600 0 MADT} + {-118270800 0 0 WET} + {228268800 3600 1 WEST} + {243993600 0 0 WET} + {260323200 3600 1 WEST} + {276048000 0 0 WET} + {291772800 3600 1 WEST} + {307501200 0 0 WET} + {323222400 3600 1 WEST} + {338950800 0 0 WET} + {354675600 3600 1 WEST} + {370400400 0 0 WET} + {386125200 3600 1 WEST} + {401850000 0 0 WET} + {417578400 3600 1 WEST} + {433299600 0 0 WET} + {449024400 3600 1 WEST} + {465354000 0 0 WET} + {481078800 3600 1 WEST} + {496803600 0 0 WET} + {512528400 3600 1 WEST} + {528253200 0 0 WET} + {543978000 3600 1 WEST} + {559702800 0 0 WET} + {575427600 3600 1 WEST} + {591152400 0 0 WET} + {606877200 3600 1 WEST} + {622602000 0 0 WET} + {638326800 3600 1 WEST} + {654656400 0 0 WET} + {670381200 3600 1 WEST} + {686106000 0 0 WET} + {701830800 3600 1 WEST} + {717555600 0 0 WET} + {733280400 3600 1 WEST} + {749005200 0 0 WET} + {764730000 3600 1 WEST} + {780454800 0 0 WET} + {796179600 3600 1 WEST} + {811904400 0 0 WET} + {828234000 3600 1 WEST} + {846378000 0 0 WET} + {859683600 3600 1 WEST} + {877827600 0 0 WET} + {891133200 3600 1 WEST} + {909277200 0 0 WET} + {922582800 3600 1 WEST} + {941331600 0 0 WET} + {954032400 3600 1 WEST} + {972781200 0 0 WET} + {985482000 3600 1 WEST} + {1004230800 0 0 WET} + {1017536400 3600 1 WEST} + {1035680400 0 0 WET} + {1048986000 3600 1 WEST} + {1067130000 0 0 WET} + {1080435600 3600 1 WEST} + {1099184400 0 0 WET} + {1111885200 3600 1 WEST} + {1130634000 0 0 WET} + {1143334800 3600 1 WEST} + {1162083600 0 0 WET} + {1174784400 3600 1 WEST} + {1193533200 0 0 WET} + {1206838800 3600 1 WEST} + {1224982800 0 0 WET} + {1238288400 3600 1 WEST} + {1256432400 0 0 WET} + {1269738000 3600 1 WEST} + {1288486800 0 0 WET} + {1301187600 3600 1 WEST} + {1319936400 0 0 WET} + {1332637200 3600 1 WEST} + {1351386000 0 0 WET} + {1364691600 3600 1 WEST} + {1382835600 0 0 WET} + {1396141200 3600 1 WEST} + {1414285200 0 0 WET} + {1427590800 3600 1 WEST} + {1445734800 0 0 WET} + {1459040400 3600 1 WEST} + {1477789200 0 0 WET} + {1490490000 3600 1 WEST} + {1509238800 0 0 WET} + {1521939600 3600 1 WEST} + {1540688400 0 0 WET} + {1553994000 3600 1 WEST} + {1572138000 0 0 WET} + {1585443600 3600 1 WEST} + {1603587600 0 0 WET} + {1616893200 3600 1 WEST} + {1635642000 0 0 WET} + {1648342800 3600 1 WEST} + {1667091600 0 0 WET} + {1679792400 3600 1 WEST} + {1698541200 0 0 WET} + {1711846800 3600 1 WEST} + {1729990800 0 0 WET} + {1743296400 3600 1 WEST} + {1761440400 0 0 WET} + {1774746000 3600 1 WEST} + {1792890000 0 0 WET} + {1806195600 3600 1 WEST} + {1824944400 0 0 WET} + {1837645200 3600 1 WEST} + {1856394000 0 0 WET} + {1869094800 3600 1 WEST} + {1887843600 0 0 WET} + {1901149200 3600 1 WEST} + {1919293200 0 0 WET} + {1932598800 3600 1 WEST} + {1950742800 0 0 WET} + {1964048400 3600 1 WEST} + {1982797200 0 0 WET} + {1995498000 3600 1 WEST} + {2014246800 0 0 WET} + {2026947600 3600 1 WEST} + {2045696400 0 0 WET} + {2058397200 3600 1 WEST} + {2077146000 0 0 WET} + {2090451600 3600 1 WEST} + {2108595600 0 0 WET} + {2121901200 3600 1 WEST} + {2140045200 0 0 WET} + {2153350800 3600 1 WEST} + {2172099600 0 0 WET} + {2184800400 3600 1 WEST} + {2203549200 0 0 WET} + {2216250000 3600 1 WEST} + {2234998800 0 0 WET} + {2248304400 3600 1 WEST} + {2266448400 0 0 WET} + {2279754000 3600 1 WEST} + {2297898000 0 0 WET} + {2311203600 3600 1 WEST} + {2329347600 0 0 WET} + {2342653200 3600 1 WEST} + {2361402000 0 0 WET} + {2374102800 3600 1 WEST} + {2392851600 0 0 WET} + {2405552400 3600 1 WEST} + {2424301200 0 0 WET} + {2437606800 3600 1 WEST} + {2455750800 0 0 WET} + {2469056400 3600 1 WEST} + {2487200400 0 0 WET} + {2500506000 3600 1 WEST} + {2519254800 0 0 WET} + {2531955600 3600 1 WEST} + {2550704400 0 0 WET} + {2563405200 3600 1 WEST} + {2582154000 0 0 WET} + {2595459600 3600 1 WEST} + {2613603600 0 0 WET} + {2626909200 3600 1 WEST} + {2645053200 0 0 WET} + {2658358800 3600 1 WEST} + {2676502800 0 0 WET} + {2689808400 3600 1 WEST} + {2708557200 0 0 WET} + {2721258000 3600 1 WEST} + {2740006800 0 0 WET} + {2752707600 3600 1 WEST} + {2771456400 0 0 WET} + {2784762000 3600 1 WEST} + {2802906000 0 0 WET} + {2816211600 3600 1 WEST} + {2834355600 0 0 WET} + {2847661200 3600 1 WEST} + {2866410000 0 0 WET} + {2879110800 3600 1 WEST} + {2897859600 0 0 WET} + {2910560400 3600 1 WEST} + {2929309200 0 0 WET} + {2942010000 3600 1 WEST} + {2960758800 0 0 WET} + {2974064400 3600 1 WEST} + {2992208400 0 0 WET} + {3005514000 3600 1 WEST} + {3023658000 0 0 WET} + {3036963600 3600 1 WEST} + {3055712400 0 0 WET} + {3068413200 3600 1 WEST} + {3087162000 0 0 WET} + {3099862800 3600 1 WEST} + {3118611600 0 0 WET} + {3131917200 3600 1 WEST} + {3150061200 0 0 WET} + {3163366800 3600 1 WEST} + {3181510800 0 0 WET} + {3194816400 3600 1 WEST} + {3212960400 0 0 WET} + {3226266000 3600 1 WEST} + {3245014800 0 0 WET} + {3257715600 3600 1 WEST} + {3276464400 0 0 WET} + {3289165200 3600 1 WEST} + {3307914000 0 0 WET} + {3321219600 3600 1 WEST} + {3339363600 0 0 WET} + {3352669200 3600 1 WEST} + {3370813200 0 0 WET} + {3384118800 3600 1 WEST} + {3402867600 0 0 WET} + {3415568400 3600 1 WEST} + {3434317200 0 0 WET} + {3447018000 3600 1 WEST} + {3465766800 0 0 WET} + {3479072400 3600 1 WEST} + {3497216400 0 0 WET} + {3510522000 3600 1 WEST} + {3528666000 0 0 WET} + {3541971600 3600 1 WEST} + {3560115600 0 0 WET} + {3573421200 3600 1 WEST} + {3592170000 0 0 WET} + {3604870800 3600 1 WEST} + {3623619600 0 0 WET} + {3636320400 3600 1 WEST} + {3655069200 0 0 WET} + {3668374800 3600 1 WEST} + {3686518800 0 0 WET} + {3699824400 3600 1 WEST} + {3717968400 0 0 WET} + {3731274000 3600 1 WEST} + {3750022800 0 0 WET} + {3762723600 3600 1 WEST} + {3781472400 0 0 WET} + {3794173200 3600 1 WEST} + {3812922000 0 0 WET} + {3825622800 3600 1 WEST} + {3844371600 0 0 WET} + {3857677200 3600 1 WEST} + {3875821200 0 0 WET} + {3889126800 3600 1 WEST} + {3907270800 0 0 WET} + {3920576400 3600 1 WEST} + {3939325200 0 0 WET} + {3952026000 3600 1 WEST} + {3970774800 0 0 WET} + {3983475600 3600 1 WEST} + {4002224400 0 0 WET} + {4015530000 3600 1 WEST} + {4033674000 0 0 WET} + {4046979600 3600 1 WEST} + {4065123600 0 0 WET} + {4078429200 3600 1 WEST} + {4096573200 0 0 WET} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Atlantic/Reykjavik b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Atlantic/Reykjavik new file mode 100644 index 00000000..ad7f0db9 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Atlantic/Reykjavik @@ -0,0 +1,73 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Atlantic/Reykjavik) { + {-9223372036854775808 -5280 0 LMT} + {-1956609120 -3600 0 IST} + {-1668211200 0 1 ISST} + {-1647212400 -3600 0 IST} + {-1636675200 0 1 ISST} + {-1613430000 -3600 0 IST} + {-1605139200 0 1 ISST} + {-1581894000 -3600 0 IST} + {-1539561600 0 1 ISST} + {-1531350000 -3600 0 IST} + {-968025600 0 1 ISST} + {-952293600 -3600 0 IST} + {-942008400 0 1 ISST} + {-920239200 -3600 0 IST} + {-909957600 0 1 ISST} + {-888789600 -3600 0 IST} + {-877903200 0 1 ISST} + {-857944800 -3600 0 IST} + {-846453600 0 1 ISST} + {-826495200 -3600 0 IST} + {-815004000 0 1 ISST} + {-795045600 -3600 0 IST} + {-783554400 0 1 ISST} + {-762991200 -3600 0 IST} + {-752104800 0 1 ISST} + {-731541600 -3600 0 IST} + {-717631200 0 1 ISST} + {-700092000 -3600 0 IST} + {-686181600 0 1 ISST} + {-668642400 -3600 0 IST} + {-654732000 0 1 ISST} + {-636588000 -3600 0 IST} + {-623282400 0 1 ISST} + {-605743200 -3600 0 IST} + {-591832800 0 1 ISST} + {-573688800 -3600 0 IST} + {-559778400 0 1 ISST} + {-542239200 -3600 0 IST} + {-528328800 0 1 ISST} + {-510789600 -3600 0 IST} + {-496879200 0 1 ISST} + {-479340000 -3600 0 IST} + {-465429600 0 1 ISST} + {-447890400 -3600 0 IST} + {-433980000 0 1 ISST} + {-415836000 -3600 0 IST} + {-401925600 0 1 ISST} + {-384386400 -3600 0 IST} + {-370476000 0 1 ISST} + {-352936800 -3600 0 IST} + {-339026400 0 1 ISST} + {-321487200 -3600 0 IST} + {-307576800 0 1 ISST} + {-290037600 -3600 0 IST} + {-276127200 0 1 ISST} + {-258588000 -3600 0 IST} + {-244677600 0 1 ISST} + {-226533600 -3600 0 IST} + {-212623200 0 1 ISST} + {-195084000 -3600 0 IST} + {-181173600 0 1 ISST} + {-163634400 -3600 0 IST} + {-149724000 0 1 ISST} + {-132184800 -3600 0 IST} + {-118274400 0 1 ISST} + {-100735200 -3600 0 IST} + {-86824800 0 1 ISST} + {-68680800 -3600 0 IST} + {-54770400 0 0 GMT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Atlantic/South_Georgia b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Atlantic/South_Georgia new file mode 100644 index 00000000..cbfc8265 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Atlantic/South_Georgia @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Atlantic/South_Georgia) { + {-9223372036854775808 -8768 0 LMT} + {-2524512832 -7200 0 GST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Atlantic/St_Helena b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Atlantic/St_Helena new file mode 100644 index 00000000..bf36c6a0 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Atlantic/St_Helena @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Africa/Abidjan)]} { + LoadTimeZoneFile Africa/Abidjan +} +set TZData(:Atlantic/St_Helena) $TZData(:Africa/Abidjan) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Atlantic/Stanley b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Atlantic/Stanley new file mode 100644 index 00000000..c287238d --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Atlantic/Stanley @@ -0,0 +1,75 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Atlantic/Stanley) { + {-9223372036854775808 -13884 0 LMT} + {-2524507716 -13884 0 SMT} + {-1824235716 -14400 0 FKT} + {-1018209600 -10800 1 FKST} + {-1003093200 -14400 0 FKT} + {-986760000 -10800 1 FKST} + {-971643600 -14400 0 FKT} + {-954705600 -10800 1 FKST} + {-939589200 -14400 0 FKT} + {-923256000 -10800 1 FKST} + {-908139600 -14400 0 FKT} + {-891806400 -10800 1 FKST} + {-876690000 -14400 0 FKT} + {-860356800 -10800 1 FKST} + {420606000 -7200 0 FKT} + {433303200 -7200 1 FKST} + {452052000 -10800 0 FKT} + {464151600 -7200 1 FKST} + {483501600 -10800 0 FKT} + {495597600 -14400 0 FKT} + {495604800 -10800 1 FKST} + {514350000 -14400 0 FKT} + {527054400 -10800 1 FKST} + {545799600 -14400 0 FKT} + {558504000 -10800 1 FKST} + {577249200 -14400 0 FKT} + {589953600 -10800 1 FKST} + {608698800 -14400 0 FKT} + {621403200 -10800 1 FKST} + {640753200 -14400 0 FKT} + {652852800 -10800 1 FKST} + {672202800 -14400 0 FKT} + {684907200 -10800 1 FKST} + {703652400 -14400 0 FKT} + {716356800 -10800 1 FKST} + {735102000 -14400 0 FKT} + {747806400 -10800 1 FKST} + {766551600 -14400 0 FKT} + {779256000 -10800 1 FKST} + {798001200 -14400 0 FKT} + {810705600 -10800 1 FKST} + {830055600 -14400 0 FKT} + {842760000 -10800 1 FKST} + {861505200 -14400 0 FKT} + {874209600 -10800 1 FKST} + {892954800 -14400 0 FKT} + {905659200 -10800 1 FKST} + {924404400 -14400 0 FKT} + {937108800 -10800 1 FKST} + {955854000 -14400 0 FKT} + {968558400 -10800 1 FKST} + {987310800 -14400 0 FKT} + {999410400 -10800 1 FKST} + {1019365200 -14400 0 FKT} + {1030860000 -10800 1 FKST} + {1050814800 -14400 0 FKT} + {1062914400 -10800 1 FKST} + {1082264400 -14400 0 FKT} + {1094364000 -10800 1 FKST} + {1113714000 -14400 0 FKT} + {1125813600 -10800 1 FKST} + {1145163600 -14400 0 FKT} + {1157263200 -10800 1 FKST} + {1176613200 -14400 0 FKT} + {1188712800 -10800 1 FKST} + {1208667600 -14400 0 FKT} + {1220767200 -10800 1 FKST} + {1240117200 -14400 0 FKT} + {1252216800 -10800 1 FKST} + {1271566800 -14400 0 FKT} + {1283662800 -10800 0 FKST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Australia/ACT b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Australia/ACT new file mode 100644 index 00000000..f7da2815 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Australia/ACT @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Australia/Sydney)]} { + LoadTimeZoneFile Australia/Sydney +} +set TZData(:Australia/ACT) $TZData(:Australia/Sydney) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Australia/Adelaide b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Australia/Adelaide new file mode 100644 index 00000000..7e1b04ea --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Australia/Adelaide @@ -0,0 +1,273 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Australia/Adelaide) { + {-9223372036854775808 33260 0 LMT} + {-2364110060 32400 0 ACST} + {-2230189200 34200 0 ACST} + {-1672565340 37800 1 ACDT} + {-1665390600 34200 0 ACST} + {-883639800 37800 1 ACDT} + {-876126600 34200 0 ACST} + {-860398200 37800 1 ACDT} + {-844677000 34200 0 ACST} + {-828343800 37800 1 ACDT} + {-813227400 34200 0 ACST} + {31501800 34200 0 ACST} + {57688200 37800 1 ACDT} + {67969800 34200 0 ACST} + {89137800 37800 1 ACDT} + {100024200 34200 0 ACST} + {120587400 37800 1 ACDT} + {131473800 34200 0 ACST} + {152037000 37800 1 ACDT} + {162923400 34200 0 ACST} + {183486600 37800 1 ACDT} + {194977800 34200 0 ACST} + {215541000 37800 1 ACDT} + {226427400 34200 0 ACST} + {246990600 37800 1 ACDT} + {257877000 34200 0 ACST} + {278440200 37800 1 ACDT} + {289326600 34200 0 ACST} + {309889800 37800 1 ACDT} + {320776200 34200 0 ACST} + {341339400 37800 1 ACDT} + {352225800 34200 0 ACST} + {372789000 37800 1 ACDT} + {384280200 34200 0 ACST} + {404843400 37800 1 ACDT} + {415729800 34200 0 ACST} + {436293000 37800 1 ACDT} + {447179400 34200 0 ACST} + {467742600 37800 1 ACDT} + {478629000 34200 0 ACST} + {499192200 37800 1 ACDT} + {511288200 34200 0 ACST} + {530037000 37800 1 ACDT} + {542737800 34200 0 ACST} + {562091400 37800 1 ACDT} + {574792200 34200 0 ACST} + {594145800 37800 1 ACDT} + {606241800 34200 0 ACST} + {625595400 37800 1 ACDT} + {637691400 34200 0 ACST} + {657045000 37800 1 ACDT} + {667931400 34200 0 ACST} + {688494600 37800 1 ACDT} + {701195400 34200 0 ACST} + {719944200 37800 1 ACDT} + {731435400 34200 0 ACST} + {751998600 37800 1 ACDT} + {764094600 34200 0 ACST} + {783448200 37800 1 ACDT} + {796149000 34200 0 ACST} + {814897800 37800 1 ACDT} + {828203400 34200 0 ACST} + {846347400 37800 1 ACDT} + {859653000 34200 0 ACST} + {877797000 37800 1 ACDT} + {891102600 34200 0 ACST} + {909246600 37800 1 ACDT} + {922552200 34200 0 ACST} + {941301000 37800 1 ACDT} + {954001800 34200 0 ACST} + {972750600 37800 1 ACDT} + {985451400 34200 0 ACST} + {1004200200 37800 1 ACDT} + {1017505800 34200 0 ACST} + {1035649800 37800 1 ACDT} + {1048955400 34200 0 ACST} + {1067099400 37800 1 ACDT} + {1080405000 34200 0 ACST} + {1099153800 37800 1 ACDT} + {1111854600 34200 0 ACST} + {1130603400 37800 1 ACDT} + {1143909000 34200 0 ACST} + {1162053000 37800 1 ACDT} + {1174753800 34200 0 ACST} + {1193502600 37800 1 ACDT} + {1207413000 34200 0 ACST} + {1223137800 37800 1 ACDT} + {1238862600 34200 0 ACST} + {1254587400 37800 1 ACDT} + {1270312200 34200 0 ACST} + {1286037000 37800 1 ACDT} + {1301761800 34200 0 ACST} + {1317486600 37800 1 ACDT} + {1333211400 34200 0 ACST} + {1349541000 37800 1 ACDT} + {1365265800 34200 0 ACST} + {1380990600 37800 1 ACDT} + {1396715400 34200 0 ACST} + {1412440200 37800 1 ACDT} + {1428165000 34200 0 ACST} + {1443889800 37800 1 ACDT} + {1459614600 34200 0 ACST} + {1475339400 37800 1 ACDT} + {1491064200 34200 0 ACST} + {1506789000 37800 1 ACDT} + {1522513800 34200 0 ACST} + {1538843400 37800 1 ACDT} + {1554568200 34200 0 ACST} + {1570293000 37800 1 ACDT} + {1586017800 34200 0 ACST} + {1601742600 37800 1 ACDT} + {1617467400 34200 0 ACST} + {1633192200 37800 1 ACDT} + {1648917000 34200 0 ACST} + {1664641800 37800 1 ACDT} + {1680366600 34200 0 ACST} + {1696091400 37800 1 ACDT} + {1712421000 34200 0 ACST} + {1728145800 37800 1 ACDT} + {1743870600 34200 0 ACST} + {1759595400 37800 1 ACDT} + {1775320200 34200 0 ACST} + {1791045000 37800 1 ACDT} + {1806769800 34200 0 ACST} + {1822494600 37800 1 ACDT} + {1838219400 34200 0 ACST} + {1853944200 37800 1 ACDT} + {1869669000 34200 0 ACST} + {1885998600 37800 1 ACDT} + {1901723400 34200 0 ACST} + {1917448200 37800 1 ACDT} + {1933173000 34200 0 ACST} + {1948897800 37800 1 ACDT} + {1964622600 34200 0 ACST} + {1980347400 37800 1 ACDT} + {1996072200 34200 0 ACST} + {2011797000 37800 1 ACDT} + {2027521800 34200 0 ACST} + {2043246600 37800 1 ACDT} + {2058971400 34200 0 ACST} + {2075301000 37800 1 ACDT} + {2091025800 34200 0 ACST} + {2106750600 37800 1 ACDT} + {2122475400 34200 0 ACST} + {2138200200 37800 1 ACDT} + {2153925000 34200 0 ACST} + {2169649800 37800 1 ACDT} + {2185374600 34200 0 ACST} + {2201099400 37800 1 ACDT} + {2216824200 34200 0 ACST} + {2233153800 37800 1 ACDT} + {2248878600 34200 0 ACST} + {2264603400 37800 1 ACDT} + {2280328200 34200 0 ACST} + {2296053000 37800 1 ACDT} + {2311777800 34200 0 ACST} + {2327502600 37800 1 ACDT} + {2343227400 34200 0 ACST} + {2358952200 37800 1 ACDT} + {2374677000 34200 0 ACST} + {2390401800 37800 1 ACDT} + {2406126600 34200 0 ACST} + {2422456200 37800 1 ACDT} + {2438181000 34200 0 ACST} + {2453905800 37800 1 ACDT} + {2469630600 34200 0 ACST} + {2485355400 37800 1 ACDT} + {2501080200 34200 0 ACST} + {2516805000 37800 1 ACDT} + {2532529800 34200 0 ACST} + {2548254600 37800 1 ACDT} + {2563979400 34200 0 ACST} + {2579704200 37800 1 ACDT} + {2596033800 34200 0 ACST} + {2611758600 37800 1 ACDT} + {2627483400 34200 0 ACST} + {2643208200 37800 1 ACDT} + {2658933000 34200 0 ACST} + {2674657800 37800 1 ACDT} + {2690382600 34200 0 ACST} + {2706107400 37800 1 ACDT} + {2721832200 34200 0 ACST} + {2737557000 37800 1 ACDT} + {2753281800 34200 0 ACST} + {2769611400 37800 1 ACDT} + {2785336200 34200 0 ACST} + {2801061000 37800 1 ACDT} + {2816785800 34200 0 ACST} + {2832510600 37800 1 ACDT} + {2848235400 34200 0 ACST} + {2863960200 37800 1 ACDT} + {2879685000 34200 0 ACST} + {2895409800 37800 1 ACDT} + {2911134600 34200 0 ACST} + {2926859400 37800 1 ACDT} + {2942584200 34200 0 ACST} + {2958913800 37800 1 ACDT} + {2974638600 34200 0 ACST} + {2990363400 37800 1 ACDT} + {3006088200 34200 0 ACST} + {3021813000 37800 1 ACDT} + {3037537800 34200 0 ACST} + {3053262600 37800 1 ACDT} + {3068987400 34200 0 ACST} + {3084712200 37800 1 ACDT} + {3100437000 34200 0 ACST} + {3116766600 37800 1 ACDT} + {3132491400 34200 0 ACST} + {3148216200 37800 1 ACDT} + {3163941000 34200 0 ACST} + {3179665800 37800 1 ACDT} + {3195390600 34200 0 ACST} + {3211115400 37800 1 ACDT} + {3226840200 34200 0 ACST} + {3242565000 37800 1 ACDT} + {3258289800 34200 0 ACST} + {3274014600 37800 1 ACDT} + {3289739400 34200 0 ACST} + {3306069000 37800 1 ACDT} + {3321793800 34200 0 ACST} + {3337518600 37800 1 ACDT} + {3353243400 34200 0 ACST} + {3368968200 37800 1 ACDT} + {3384693000 34200 0 ACST} + {3400417800 37800 1 ACDT} + {3416142600 34200 0 ACST} + {3431867400 37800 1 ACDT} + {3447592200 34200 0 ACST} + {3463317000 37800 1 ACDT} + {3479646600 34200 0 ACST} + {3495371400 37800 1 ACDT} + {3511096200 34200 0 ACST} + {3526821000 37800 1 ACDT} + {3542545800 34200 0 ACST} + {3558270600 37800 1 ACDT} + {3573995400 34200 0 ACST} + {3589720200 37800 1 ACDT} + {3605445000 34200 0 ACST} + {3621169800 37800 1 ACDT} + {3636894600 34200 0 ACST} + {3653224200 37800 1 ACDT} + {3668949000 34200 0 ACST} + {3684673800 37800 1 ACDT} + {3700398600 34200 0 ACST} + {3716123400 37800 1 ACDT} + {3731848200 34200 0 ACST} + {3747573000 37800 1 ACDT} + {3763297800 34200 0 ACST} + {3779022600 37800 1 ACDT} + {3794747400 34200 0 ACST} + {3810472200 37800 1 ACDT} + {3826197000 34200 0 ACST} + {3842526600 37800 1 ACDT} + {3858251400 34200 0 ACST} + {3873976200 37800 1 ACDT} + {3889701000 34200 0 ACST} + {3905425800 37800 1 ACDT} + {3921150600 34200 0 ACST} + {3936875400 37800 1 ACDT} + {3952600200 34200 0 ACST} + {3968325000 37800 1 ACDT} + {3984049800 34200 0 ACST} + {4000379400 37800 1 ACDT} + {4016104200 34200 0 ACST} + {4031829000 37800 1 ACDT} + {4047553800 34200 0 ACST} + {4063278600 37800 1 ACDT} + {4079003400 34200 0 ACST} + {4094728200 37800 1 ACDT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Australia/Brisbane b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Australia/Brisbane new file mode 100644 index 00000000..8422ae6a --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Australia/Brisbane @@ -0,0 +1,23 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Australia/Brisbane) { + {-9223372036854775808 36728 0 LMT} + {-2366791928 36000 0 AEST} + {-1672567140 39600 1 AEDT} + {-1665392400 36000 0 AEST} + {-883641600 39600 1 AEDT} + {-876128400 36000 0 AEST} + {-860400000 39600 1 AEDT} + {-844678800 36000 0 AEST} + {-828345600 39600 1 AEDT} + {-813229200 36000 0 AEST} + {31500000 36000 0 AEST} + {57686400 39600 1 AEDT} + {67968000 36000 0 AEST} + {625593600 39600 1 AEDT} + {636480000 36000 0 AEST} + {657043200 39600 1 AEDT} + {667929600 36000 0 AEST} + {688492800 39600 1 AEDT} + {699379200 36000 0 AEST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Australia/Broken_Hill b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Australia/Broken_Hill new file mode 100644 index 00000000..c4280613 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Australia/Broken_Hill @@ -0,0 +1,275 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Australia/Broken_Hill) { + {-9223372036854775808 33948 0 LMT} + {-2364110748 36000 0 AEST} + {-2314951200 32400 0 ACST} + {-2230189200 34200 0 ACST} + {-1672565340 37800 1 ACDT} + {-1665390600 34200 0 ACST} + {-883639800 37800 1 ACDT} + {-876126600 34200 0 ACST} + {-860398200 37800 1 ACDT} + {-844677000 34200 0 ACST} + {-828343800 37800 1 ACDT} + {-813227400 34200 0 ACST} + {31501800 34200 0 ACST} + {57688200 37800 1 ACDT} + {67969800 34200 0 ACST} + {89137800 37800 1 ACDT} + {100024200 34200 0 ACST} + {120587400 37800 1 ACDT} + {131473800 34200 0 ACST} + {152037000 37800 1 ACDT} + {162923400 34200 0 ACST} + {183486600 37800 1 ACDT} + {194977800 34200 0 ACST} + {215541000 37800 1 ACDT} + {226427400 34200 0 ACST} + {246990600 37800 1 ACDT} + {257877000 34200 0 ACST} + {278440200 37800 1 ACDT} + {289326600 34200 0 ACST} + {309889800 37800 1 ACDT} + {320776200 34200 0 ACST} + {341339400 37800 1 ACDT} + {352225800 34200 0 ACST} + {372789000 37800 1 ACDT} + {386699400 34200 0 ACST} + {404843400 37800 1 ACDT} + {415729800 34200 0 ACST} + {436293000 37800 1 ACDT} + {447179400 34200 0 ACST} + {467742600 37800 1 ACDT} + {478629000 34200 0 ACST} + {499192200 37800 1 ACDT} + {511288200 34200 0 ACST} + {530037000 37800 1 ACDT} + {542737800 34200 0 ACST} + {562091400 37800 1 ACDT} + {574792200 34200 0 ACST} + {594145800 37800 1 ACDT} + {606241800 34200 0 ACST} + {625595400 37800 1 ACDT} + {636481800 34200 0 ACST} + {657045000 37800 1 ACDT} + {667931400 34200 0 ACST} + {688494600 37800 1 ACDT} + {699381000 34200 0 ACST} + {719944200 37800 1 ACDT} + {731435400 34200 0 ACST} + {751998600 37800 1 ACDT} + {762885000 34200 0 ACST} + {783448200 37800 1 ACDT} + {794334600 34200 0 ACST} + {814897800 37800 1 ACDT} + {828203400 34200 0 ACST} + {846347400 37800 1 ACDT} + {859653000 34200 0 ACST} + {877797000 37800 1 ACDT} + {891102600 34200 0 ACST} + {909246600 37800 1 ACDT} + {922552200 34200 0 ACST} + {941301000 37800 1 ACDT} + {946647000 37800 0 ACST} + {954001800 34200 0 ACST} + {972750600 37800 1 ACDT} + {985451400 34200 0 ACST} + {1004200200 37800 1 ACDT} + {1017505800 34200 0 ACST} + {1035649800 37800 1 ACDT} + {1048955400 34200 0 ACST} + {1067099400 37800 1 ACDT} + {1080405000 34200 0 ACST} + {1099153800 37800 1 ACDT} + {1111854600 34200 0 ACST} + {1130603400 37800 1 ACDT} + {1143909000 34200 0 ACST} + {1162053000 37800 1 ACDT} + {1174753800 34200 0 ACST} + {1193502600 37800 1 ACDT} + {1207413000 34200 0 ACST} + {1223137800 37800 1 ACDT} + {1238862600 34200 0 ACST} + {1254587400 37800 1 ACDT} + {1270312200 34200 0 ACST} + {1286037000 37800 1 ACDT} + {1301761800 34200 0 ACST} + {1317486600 37800 1 ACDT} + {1333211400 34200 0 ACST} + {1349541000 37800 1 ACDT} + {1365265800 34200 0 ACST} + {1380990600 37800 1 ACDT} + {1396715400 34200 0 ACST} + {1412440200 37800 1 ACDT} + {1428165000 34200 0 ACST} + {1443889800 37800 1 ACDT} + {1459614600 34200 0 ACST} + {1475339400 37800 1 ACDT} + {1491064200 34200 0 ACST} + {1506789000 37800 1 ACDT} + {1522513800 34200 0 ACST} + {1538843400 37800 1 ACDT} + {1554568200 34200 0 ACST} + {1570293000 37800 1 ACDT} + {1586017800 34200 0 ACST} + {1601742600 37800 1 ACDT} + {1617467400 34200 0 ACST} + {1633192200 37800 1 ACDT} + {1648917000 34200 0 ACST} + {1664641800 37800 1 ACDT} + {1680366600 34200 0 ACST} + {1696091400 37800 1 ACDT} + {1712421000 34200 0 ACST} + {1728145800 37800 1 ACDT} + {1743870600 34200 0 ACST} + {1759595400 37800 1 ACDT} + {1775320200 34200 0 ACST} + {1791045000 37800 1 ACDT} + {1806769800 34200 0 ACST} + {1822494600 37800 1 ACDT} + {1838219400 34200 0 ACST} + {1853944200 37800 1 ACDT} + {1869669000 34200 0 ACST} + {1885998600 37800 1 ACDT} + {1901723400 34200 0 ACST} + {1917448200 37800 1 ACDT} + {1933173000 34200 0 ACST} + {1948897800 37800 1 ACDT} + {1964622600 34200 0 ACST} + {1980347400 37800 1 ACDT} + {1996072200 34200 0 ACST} + {2011797000 37800 1 ACDT} + {2027521800 34200 0 ACST} + {2043246600 37800 1 ACDT} + {2058971400 34200 0 ACST} + {2075301000 37800 1 ACDT} + {2091025800 34200 0 ACST} + {2106750600 37800 1 ACDT} + {2122475400 34200 0 ACST} + {2138200200 37800 1 ACDT} + {2153925000 34200 0 ACST} + {2169649800 37800 1 ACDT} + {2185374600 34200 0 ACST} + {2201099400 37800 1 ACDT} + {2216824200 34200 0 ACST} + {2233153800 37800 1 ACDT} + {2248878600 34200 0 ACST} + {2264603400 37800 1 ACDT} + {2280328200 34200 0 ACST} + {2296053000 37800 1 ACDT} + {2311777800 34200 0 ACST} + {2327502600 37800 1 ACDT} + {2343227400 34200 0 ACST} + {2358952200 37800 1 ACDT} + {2374677000 34200 0 ACST} + {2390401800 37800 1 ACDT} + {2406126600 34200 0 ACST} + {2422456200 37800 1 ACDT} + {2438181000 34200 0 ACST} + {2453905800 37800 1 ACDT} + {2469630600 34200 0 ACST} + {2485355400 37800 1 ACDT} + {2501080200 34200 0 ACST} + {2516805000 37800 1 ACDT} + {2532529800 34200 0 ACST} + {2548254600 37800 1 ACDT} + {2563979400 34200 0 ACST} + {2579704200 37800 1 ACDT} + {2596033800 34200 0 ACST} + {2611758600 37800 1 ACDT} + {2627483400 34200 0 ACST} + {2643208200 37800 1 ACDT} + {2658933000 34200 0 ACST} + {2674657800 37800 1 ACDT} + {2690382600 34200 0 ACST} + {2706107400 37800 1 ACDT} + {2721832200 34200 0 ACST} + {2737557000 37800 1 ACDT} + {2753281800 34200 0 ACST} + {2769611400 37800 1 ACDT} + {2785336200 34200 0 ACST} + {2801061000 37800 1 ACDT} + {2816785800 34200 0 ACST} + {2832510600 37800 1 ACDT} + {2848235400 34200 0 ACST} + {2863960200 37800 1 ACDT} + {2879685000 34200 0 ACST} + {2895409800 37800 1 ACDT} + {2911134600 34200 0 ACST} + {2926859400 37800 1 ACDT} + {2942584200 34200 0 ACST} + {2958913800 37800 1 ACDT} + {2974638600 34200 0 ACST} + {2990363400 37800 1 ACDT} + {3006088200 34200 0 ACST} + {3021813000 37800 1 ACDT} + {3037537800 34200 0 ACST} + {3053262600 37800 1 ACDT} + {3068987400 34200 0 ACST} + {3084712200 37800 1 ACDT} + {3100437000 34200 0 ACST} + {3116766600 37800 1 ACDT} + {3132491400 34200 0 ACST} + {3148216200 37800 1 ACDT} + {3163941000 34200 0 ACST} + {3179665800 37800 1 ACDT} + {3195390600 34200 0 ACST} + {3211115400 37800 1 ACDT} + {3226840200 34200 0 ACST} + {3242565000 37800 1 ACDT} + {3258289800 34200 0 ACST} + {3274014600 37800 1 ACDT} + {3289739400 34200 0 ACST} + {3306069000 37800 1 ACDT} + {3321793800 34200 0 ACST} + {3337518600 37800 1 ACDT} + {3353243400 34200 0 ACST} + {3368968200 37800 1 ACDT} + {3384693000 34200 0 ACST} + {3400417800 37800 1 ACDT} + {3416142600 34200 0 ACST} + {3431867400 37800 1 ACDT} + {3447592200 34200 0 ACST} + {3463317000 37800 1 ACDT} + {3479646600 34200 0 ACST} + {3495371400 37800 1 ACDT} + {3511096200 34200 0 ACST} + {3526821000 37800 1 ACDT} + {3542545800 34200 0 ACST} + {3558270600 37800 1 ACDT} + {3573995400 34200 0 ACST} + {3589720200 37800 1 ACDT} + {3605445000 34200 0 ACST} + {3621169800 37800 1 ACDT} + {3636894600 34200 0 ACST} + {3653224200 37800 1 ACDT} + {3668949000 34200 0 ACST} + {3684673800 37800 1 ACDT} + {3700398600 34200 0 ACST} + {3716123400 37800 1 ACDT} + {3731848200 34200 0 ACST} + {3747573000 37800 1 ACDT} + {3763297800 34200 0 ACST} + {3779022600 37800 1 ACDT} + {3794747400 34200 0 ACST} + {3810472200 37800 1 ACDT} + {3826197000 34200 0 ACST} + {3842526600 37800 1 ACDT} + {3858251400 34200 0 ACST} + {3873976200 37800 1 ACDT} + {3889701000 34200 0 ACST} + {3905425800 37800 1 ACDT} + {3921150600 34200 0 ACST} + {3936875400 37800 1 ACDT} + {3952600200 34200 0 ACST} + {3968325000 37800 1 ACDT} + {3984049800 34200 0 ACST} + {4000379400 37800 1 ACDT} + {4016104200 34200 0 ACST} + {4031829000 37800 1 ACDT} + {4047553800 34200 0 ACST} + {4063278600 37800 1 ACDT} + {4079003400 34200 0 ACST} + {4094728200 37800 1 ACDT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Australia/Canberra b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Australia/Canberra new file mode 100644 index 00000000..0b7b9ca7 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Australia/Canberra @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Australia/Sydney)]} { + LoadTimeZoneFile Australia/Sydney +} +set TZData(:Australia/Canberra) $TZData(:Australia/Sydney) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Australia/Currie b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Australia/Currie new file mode 100644 index 00000000..936327b2 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Australia/Currie @@ -0,0 +1,273 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Australia/Currie) { + {-9223372036854775808 34528 0 LMT} + {-2345794528 36000 0 AEST} + {-1680508800 39600 1 AEDT} + {-1669892400 39600 0 AEDT} + {-1665392400 36000 0 AEST} + {-883641600 39600 1 AEDT} + {-876128400 36000 0 AEST} + {-860400000 39600 1 AEDT} + {-844678800 36000 0 AEST} + {-828345600 39600 1 AEDT} + {-813229200 36000 0 AEST} + {47138400 36000 0 AEST} + {57686400 39600 1 AEDT} + {67968000 36000 0 AEST} + {89136000 39600 1 AEDT} + {100022400 36000 0 AEST} + {120585600 39600 1 AEDT} + {131472000 36000 0 AEST} + {152035200 39600 1 AEDT} + {162921600 36000 0 AEST} + {183484800 39600 1 AEDT} + {194976000 36000 0 AEST} + {215539200 39600 1 AEDT} + {226425600 36000 0 AEST} + {246988800 39600 1 AEDT} + {257875200 36000 0 AEST} + {278438400 39600 1 AEDT} + {289324800 36000 0 AEST} + {309888000 39600 1 AEDT} + {320774400 36000 0 AEST} + {341337600 39600 1 AEDT} + {352224000 36000 0 AEST} + {372787200 39600 1 AEDT} + {386092800 36000 0 AEST} + {404841600 39600 1 AEDT} + {417542400 36000 0 AEST} + {436291200 39600 1 AEDT} + {447177600 36000 0 AEST} + {467740800 39600 1 AEDT} + {478627200 36000 0 AEST} + {499190400 39600 1 AEDT} + {510076800 36000 0 AEST} + {530035200 39600 1 AEDT} + {542736000 36000 0 AEST} + {562089600 39600 1 AEDT} + {574790400 36000 0 AEST} + {594144000 39600 1 AEDT} + {606240000 36000 0 AEST} + {625593600 39600 1 AEDT} + {637689600 36000 0 AEST} + {657043200 39600 1 AEDT} + {670348800 36000 0 AEST} + {686678400 39600 1 AEDT} + {701798400 36000 0 AEST} + {718128000 39600 1 AEDT} + {733248000 36000 0 AEST} + {749577600 39600 1 AEDT} + {764697600 36000 0 AEST} + {781027200 39600 1 AEDT} + {796147200 36000 0 AEST} + {812476800 39600 1 AEDT} + {828201600 36000 0 AEST} + {844531200 39600 1 AEDT} + {859651200 36000 0 AEST} + {875980800 39600 1 AEDT} + {891100800 36000 0 AEST} + {907430400 39600 1 AEDT} + {922550400 36000 0 AEST} + {938880000 39600 1 AEDT} + {954000000 36000 0 AEST} + {967305600 39600 1 AEDT} + {985449600 36000 0 AEST} + {1002384000 39600 1 AEDT} + {1017504000 36000 0 AEST} + {1033833600 39600 1 AEDT} + {1048953600 36000 0 AEST} + {1065283200 39600 1 AEDT} + {1080403200 36000 0 AEST} + {1096732800 39600 1 AEDT} + {1111852800 36000 0 AEST} + {1128182400 39600 1 AEDT} + {1143907200 36000 0 AEST} + {1159632000 39600 1 AEDT} + {1174752000 36000 0 AEST} + {1191686400 39600 1 AEDT} + {1207411200 36000 0 AEST} + {1223136000 39600 1 AEDT} + {1238860800 36000 0 AEST} + {1254585600 39600 1 AEDT} + {1270310400 36000 0 AEST} + {1286035200 39600 1 AEDT} + {1301760000 36000 0 AEST} + {1317484800 39600 1 AEDT} + {1333209600 36000 0 AEST} + {1349539200 39600 1 AEDT} + {1365264000 36000 0 AEST} + {1380988800 39600 1 AEDT} + {1396713600 36000 0 AEST} + {1412438400 39600 1 AEDT} + {1428163200 36000 0 AEST} + {1443888000 39600 1 AEDT} + {1459612800 36000 0 AEST} + {1475337600 39600 1 AEDT} + {1491062400 36000 0 AEST} + {1506787200 39600 1 AEDT} + {1522512000 36000 0 AEST} + {1538841600 39600 1 AEDT} + {1554566400 36000 0 AEST} + {1570291200 39600 1 AEDT} + {1586016000 36000 0 AEST} + {1601740800 39600 1 AEDT} + {1617465600 36000 0 AEST} + {1633190400 39600 1 AEDT} + {1648915200 36000 0 AEST} + {1664640000 39600 1 AEDT} + {1680364800 36000 0 AEST} + {1696089600 39600 1 AEDT} + {1712419200 36000 0 AEST} + {1728144000 39600 1 AEDT} + {1743868800 36000 0 AEST} + {1759593600 39600 1 AEDT} + {1775318400 36000 0 AEST} + {1791043200 39600 1 AEDT} + {1806768000 36000 0 AEST} + {1822492800 39600 1 AEDT} + {1838217600 36000 0 AEST} + {1853942400 39600 1 AEDT} + {1869667200 36000 0 AEST} + {1885996800 39600 1 AEDT} + {1901721600 36000 0 AEST} + {1917446400 39600 1 AEDT} + {1933171200 36000 0 AEST} + {1948896000 39600 1 AEDT} + {1964620800 36000 0 AEST} + {1980345600 39600 1 AEDT} + {1996070400 36000 0 AEST} + {2011795200 39600 1 AEDT} + {2027520000 36000 0 AEST} + {2043244800 39600 1 AEDT} + {2058969600 36000 0 AEST} + {2075299200 39600 1 AEDT} + {2091024000 36000 0 AEST} + {2106748800 39600 1 AEDT} + {2122473600 36000 0 AEST} + {2138198400 39600 1 AEDT} + {2153923200 36000 0 AEST} + {2169648000 39600 1 AEDT} + {2185372800 36000 0 AEST} + {2201097600 39600 1 AEDT} + {2216822400 36000 0 AEST} + {2233152000 39600 1 AEDT} + {2248876800 36000 0 AEST} + {2264601600 39600 1 AEDT} + {2280326400 36000 0 AEST} + {2296051200 39600 1 AEDT} + {2311776000 36000 0 AEST} + {2327500800 39600 1 AEDT} + {2343225600 36000 0 AEST} + {2358950400 39600 1 AEDT} + {2374675200 36000 0 AEST} + {2390400000 39600 1 AEDT} + {2406124800 36000 0 AEST} + {2422454400 39600 1 AEDT} + {2438179200 36000 0 AEST} + {2453904000 39600 1 AEDT} + {2469628800 36000 0 AEST} + {2485353600 39600 1 AEDT} + {2501078400 36000 0 AEST} + {2516803200 39600 1 AEDT} + {2532528000 36000 0 AEST} + {2548252800 39600 1 AEDT} + {2563977600 36000 0 AEST} + {2579702400 39600 1 AEDT} + {2596032000 36000 0 AEST} + {2611756800 39600 1 AEDT} + {2627481600 36000 0 AEST} + {2643206400 39600 1 AEDT} + {2658931200 36000 0 AEST} + {2674656000 39600 1 AEDT} + {2690380800 36000 0 AEST} + {2706105600 39600 1 AEDT} + {2721830400 36000 0 AEST} + {2737555200 39600 1 AEDT} + {2753280000 36000 0 AEST} + {2769609600 39600 1 AEDT} + {2785334400 36000 0 AEST} + {2801059200 39600 1 AEDT} + {2816784000 36000 0 AEST} + {2832508800 39600 1 AEDT} + {2848233600 36000 0 AEST} + {2863958400 39600 1 AEDT} + {2879683200 36000 0 AEST} + {2895408000 39600 1 AEDT} + {2911132800 36000 0 AEST} + {2926857600 39600 1 AEDT} + {2942582400 36000 0 AEST} + {2958912000 39600 1 AEDT} + {2974636800 36000 0 AEST} + {2990361600 39600 1 AEDT} + {3006086400 36000 0 AEST} + {3021811200 39600 1 AEDT} + {3037536000 36000 0 AEST} + {3053260800 39600 1 AEDT} + {3068985600 36000 0 AEST} + {3084710400 39600 1 AEDT} + {3100435200 36000 0 AEST} + {3116764800 39600 1 AEDT} + {3132489600 36000 0 AEST} + {3148214400 39600 1 AEDT} + {3163939200 36000 0 AEST} + {3179664000 39600 1 AEDT} + {3195388800 36000 0 AEST} + {3211113600 39600 1 AEDT} + {3226838400 36000 0 AEST} + {3242563200 39600 1 AEDT} + {3258288000 36000 0 AEST} + {3274012800 39600 1 AEDT} + {3289737600 36000 0 AEST} + {3306067200 39600 1 AEDT} + {3321792000 36000 0 AEST} + {3337516800 39600 1 AEDT} + {3353241600 36000 0 AEST} + {3368966400 39600 1 AEDT} + {3384691200 36000 0 AEST} + {3400416000 39600 1 AEDT} + {3416140800 36000 0 AEST} + {3431865600 39600 1 AEDT} + {3447590400 36000 0 AEST} + {3463315200 39600 1 AEDT} + {3479644800 36000 0 AEST} + {3495369600 39600 1 AEDT} + {3511094400 36000 0 AEST} + {3526819200 39600 1 AEDT} + {3542544000 36000 0 AEST} + {3558268800 39600 1 AEDT} + {3573993600 36000 0 AEST} + {3589718400 39600 1 AEDT} + {3605443200 36000 0 AEST} + {3621168000 39600 1 AEDT} + {3636892800 36000 0 AEST} + {3653222400 39600 1 AEDT} + {3668947200 36000 0 AEST} + {3684672000 39600 1 AEDT} + {3700396800 36000 0 AEST} + {3716121600 39600 1 AEDT} + {3731846400 36000 0 AEST} + {3747571200 39600 1 AEDT} + {3763296000 36000 0 AEST} + {3779020800 39600 1 AEDT} + {3794745600 36000 0 AEST} + {3810470400 39600 1 AEDT} + {3826195200 36000 0 AEST} + {3842524800 39600 1 AEDT} + {3858249600 36000 0 AEST} + {3873974400 39600 1 AEDT} + {3889699200 36000 0 AEST} + {3905424000 39600 1 AEDT} + {3921148800 36000 0 AEST} + {3936873600 39600 1 AEDT} + {3952598400 36000 0 AEST} + {3968323200 39600 1 AEDT} + {3984048000 36000 0 AEST} + {4000377600 39600 1 AEDT} + {4016102400 36000 0 AEST} + {4031827200 39600 1 AEDT} + {4047552000 36000 0 AEST} + {4063276800 39600 1 AEDT} + {4079001600 36000 0 AEST} + {4094726400 39600 1 AEDT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Australia/Darwin b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Australia/Darwin new file mode 100644 index 00000000..e77605d1 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Australia/Darwin @@ -0,0 +1,15 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Australia/Darwin) { + {-9223372036854775808 31400 0 LMT} + {-2364108200 32400 0 ACST} + {-2230189200 34200 0 ACST} + {-1672565340 37800 1 ACDT} + {-1665390600 34200 0 ACST} + {-883639800 37800 1 ACDT} + {-876126600 34200 0 ACST} + {-860398200 37800 1 ACDT} + {-844677000 34200 0 ACST} + {-828343800 37800 1 ACDT} + {-813227400 34200 0 ACST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Australia/Eucla b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Australia/Eucla new file mode 100644 index 00000000..08a19489 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Australia/Eucla @@ -0,0 +1,25 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Australia/Eucla) { + {-9223372036854775808 30928 0 LMT} + {-2337928528 31500 0 ACWST} + {-1672562640 35100 1 ACWDT} + {-1665387900 31500 0 ACWST} + {-883637100 35100 1 ACWDT} + {-876123900 31500 0 ACWST} + {-860395500 35100 1 ACWDT} + {-844674300 31500 0 ACWST} + {-836473500 35100 0 ACWST} + {152039700 35100 1 ACWDT} + {162926100 31500 0 ACWST} + {436295700 35100 1 ACWDT} + {447182100 31500 0 ACWST} + {690311700 35100 1 ACWDT} + {699383700 31500 0 ACWST} + {1165079700 35100 1 ACWDT} + {1174756500 31500 0 ACWST} + {1193505300 35100 1 ACWDT} + {1206810900 31500 0 ACWST} + {1224954900 35100 1 ACWDT} + {1238260500 31500 0 ACWST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Australia/Hobart b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Australia/Hobart new file mode 100644 index 00000000..bf5adf0b --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Australia/Hobart @@ -0,0 +1,281 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Australia/Hobart) { + {-9223372036854775808 35356 0 LMT} + {-2345795356 36000 0 AEST} + {-1680508800 39600 1 AEDT} + {-1669892400 39600 0 AEDT} + {-1665392400 36000 0 AEST} + {-883641600 39600 1 AEDT} + {-876128400 36000 0 AEST} + {-860400000 39600 1 AEDT} + {-844678800 36000 0 AEST} + {-828345600 39600 1 AEDT} + {-813229200 36000 0 AEST} + {-94730400 36000 0 AEST} + {-71136000 39600 1 AEDT} + {-55411200 36000 0 AEST} + {-37267200 39600 1 AEDT} + {-25776000 36000 0 AEST} + {-5817600 39600 1 AEDT} + {5673600 36000 0 AEST} + {25632000 39600 1 AEDT} + {37728000 36000 0 AEST} + {57686400 39600 1 AEDT} + {67968000 36000 0 AEST} + {89136000 39600 1 AEDT} + {100022400 36000 0 AEST} + {120585600 39600 1 AEDT} + {131472000 36000 0 AEST} + {152035200 39600 1 AEDT} + {162921600 36000 0 AEST} + {183484800 39600 1 AEDT} + {194976000 36000 0 AEST} + {215539200 39600 1 AEDT} + {226425600 36000 0 AEST} + {246988800 39600 1 AEDT} + {257875200 36000 0 AEST} + {278438400 39600 1 AEDT} + {289324800 36000 0 AEST} + {309888000 39600 1 AEDT} + {320774400 36000 0 AEST} + {341337600 39600 1 AEDT} + {352224000 36000 0 AEST} + {372787200 39600 1 AEDT} + {386092800 36000 0 AEST} + {404841600 39600 1 AEDT} + {417542400 36000 0 AEST} + {436291200 39600 1 AEDT} + {447177600 36000 0 AEST} + {467740800 39600 1 AEDT} + {478627200 36000 0 AEST} + {499190400 39600 1 AEDT} + {510076800 36000 0 AEST} + {530035200 39600 1 AEDT} + {542736000 36000 0 AEST} + {562089600 39600 1 AEDT} + {574790400 36000 0 AEST} + {594144000 39600 1 AEDT} + {606240000 36000 0 AEST} + {625593600 39600 1 AEDT} + {637689600 36000 0 AEST} + {657043200 39600 1 AEDT} + {670348800 36000 0 AEST} + {686678400 39600 1 AEDT} + {701798400 36000 0 AEST} + {718128000 39600 1 AEDT} + {733248000 36000 0 AEST} + {749577600 39600 1 AEDT} + {764697600 36000 0 AEST} + {781027200 39600 1 AEDT} + {796147200 36000 0 AEST} + {812476800 39600 1 AEDT} + {828201600 36000 0 AEST} + {844531200 39600 1 AEDT} + {859651200 36000 0 AEST} + {875980800 39600 1 AEDT} + {891100800 36000 0 AEST} + {907430400 39600 1 AEDT} + {922550400 36000 0 AEST} + {938880000 39600 1 AEDT} + {954000000 36000 0 AEST} + {967305600 39600 1 AEDT} + {985449600 36000 0 AEST} + {1002384000 39600 1 AEDT} + {1017504000 36000 0 AEST} + {1033833600 39600 1 AEDT} + {1048953600 36000 0 AEST} + {1065283200 39600 1 AEDT} + {1080403200 36000 0 AEST} + {1096732800 39600 1 AEDT} + {1111852800 36000 0 AEST} + {1128182400 39600 1 AEDT} + {1143907200 36000 0 AEST} + {1159632000 39600 1 AEDT} + {1174752000 36000 0 AEST} + {1191686400 39600 1 AEDT} + {1207411200 36000 0 AEST} + {1223136000 39600 1 AEDT} + {1238860800 36000 0 AEST} + {1254585600 39600 1 AEDT} + {1270310400 36000 0 AEST} + {1286035200 39600 1 AEDT} + {1301760000 36000 0 AEST} + {1317484800 39600 1 AEDT} + {1333209600 36000 0 AEST} + {1349539200 39600 1 AEDT} + {1365264000 36000 0 AEST} + {1380988800 39600 1 AEDT} + {1396713600 36000 0 AEST} + {1412438400 39600 1 AEDT} + {1428163200 36000 0 AEST} + {1443888000 39600 1 AEDT} + {1459612800 36000 0 AEST} + {1475337600 39600 1 AEDT} + {1491062400 36000 0 AEST} + {1506787200 39600 1 AEDT} + {1522512000 36000 0 AEST} + {1538841600 39600 1 AEDT} + {1554566400 36000 0 AEST} + {1570291200 39600 1 AEDT} + {1586016000 36000 0 AEST} + {1601740800 39600 1 AEDT} + {1617465600 36000 0 AEST} + {1633190400 39600 1 AEDT} + {1648915200 36000 0 AEST} + {1664640000 39600 1 AEDT} + {1680364800 36000 0 AEST} + {1696089600 39600 1 AEDT} + {1712419200 36000 0 AEST} + {1728144000 39600 1 AEDT} + {1743868800 36000 0 AEST} + {1759593600 39600 1 AEDT} + {1775318400 36000 0 AEST} + {1791043200 39600 1 AEDT} + {1806768000 36000 0 AEST} + {1822492800 39600 1 AEDT} + {1838217600 36000 0 AEST} + {1853942400 39600 1 AEDT} + {1869667200 36000 0 AEST} + {1885996800 39600 1 AEDT} + {1901721600 36000 0 AEST} + {1917446400 39600 1 AEDT} + {1933171200 36000 0 AEST} + {1948896000 39600 1 AEDT} + {1964620800 36000 0 AEST} + {1980345600 39600 1 AEDT} + {1996070400 36000 0 AEST} + {2011795200 39600 1 AEDT} + {2027520000 36000 0 AEST} + {2043244800 39600 1 AEDT} + {2058969600 36000 0 AEST} + {2075299200 39600 1 AEDT} + {2091024000 36000 0 AEST} + {2106748800 39600 1 AEDT} + {2122473600 36000 0 AEST} + {2138198400 39600 1 AEDT} + {2153923200 36000 0 AEST} + {2169648000 39600 1 AEDT} + {2185372800 36000 0 AEST} + {2201097600 39600 1 AEDT} + {2216822400 36000 0 AEST} + {2233152000 39600 1 AEDT} + {2248876800 36000 0 AEST} + {2264601600 39600 1 AEDT} + {2280326400 36000 0 AEST} + {2296051200 39600 1 AEDT} + {2311776000 36000 0 AEST} + {2327500800 39600 1 AEDT} + {2343225600 36000 0 AEST} + {2358950400 39600 1 AEDT} + {2374675200 36000 0 AEST} + {2390400000 39600 1 AEDT} + {2406124800 36000 0 AEST} + {2422454400 39600 1 AEDT} + {2438179200 36000 0 AEST} + {2453904000 39600 1 AEDT} + {2469628800 36000 0 AEST} + {2485353600 39600 1 AEDT} + {2501078400 36000 0 AEST} + {2516803200 39600 1 AEDT} + {2532528000 36000 0 AEST} + {2548252800 39600 1 AEDT} + {2563977600 36000 0 AEST} + {2579702400 39600 1 AEDT} + {2596032000 36000 0 AEST} + {2611756800 39600 1 AEDT} + {2627481600 36000 0 AEST} + {2643206400 39600 1 AEDT} + {2658931200 36000 0 AEST} + {2674656000 39600 1 AEDT} + {2690380800 36000 0 AEST} + {2706105600 39600 1 AEDT} + {2721830400 36000 0 AEST} + {2737555200 39600 1 AEDT} + {2753280000 36000 0 AEST} + {2769609600 39600 1 AEDT} + {2785334400 36000 0 AEST} + {2801059200 39600 1 AEDT} + {2816784000 36000 0 AEST} + {2832508800 39600 1 AEDT} + {2848233600 36000 0 AEST} + {2863958400 39600 1 AEDT} + {2879683200 36000 0 AEST} + {2895408000 39600 1 AEDT} + {2911132800 36000 0 AEST} + {2926857600 39600 1 AEDT} + {2942582400 36000 0 AEST} + {2958912000 39600 1 AEDT} + {2974636800 36000 0 AEST} + {2990361600 39600 1 AEDT} + {3006086400 36000 0 AEST} + {3021811200 39600 1 AEDT} + {3037536000 36000 0 AEST} + {3053260800 39600 1 AEDT} + {3068985600 36000 0 AEST} + {3084710400 39600 1 AEDT} + {3100435200 36000 0 AEST} + {3116764800 39600 1 AEDT} + {3132489600 36000 0 AEST} + {3148214400 39600 1 AEDT} + {3163939200 36000 0 AEST} + {3179664000 39600 1 AEDT} + {3195388800 36000 0 AEST} + {3211113600 39600 1 AEDT} + {3226838400 36000 0 AEST} + {3242563200 39600 1 AEDT} + {3258288000 36000 0 AEST} + {3274012800 39600 1 AEDT} + {3289737600 36000 0 AEST} + {3306067200 39600 1 AEDT} + {3321792000 36000 0 AEST} + {3337516800 39600 1 AEDT} + {3353241600 36000 0 AEST} + {3368966400 39600 1 AEDT} + {3384691200 36000 0 AEST} + {3400416000 39600 1 AEDT} + {3416140800 36000 0 AEST} + {3431865600 39600 1 AEDT} + {3447590400 36000 0 AEST} + {3463315200 39600 1 AEDT} + {3479644800 36000 0 AEST} + {3495369600 39600 1 AEDT} + {3511094400 36000 0 AEST} + {3526819200 39600 1 AEDT} + {3542544000 36000 0 AEST} + {3558268800 39600 1 AEDT} + {3573993600 36000 0 AEST} + {3589718400 39600 1 AEDT} + {3605443200 36000 0 AEST} + {3621168000 39600 1 AEDT} + {3636892800 36000 0 AEST} + {3653222400 39600 1 AEDT} + {3668947200 36000 0 AEST} + {3684672000 39600 1 AEDT} + {3700396800 36000 0 AEST} + {3716121600 39600 1 AEDT} + {3731846400 36000 0 AEST} + {3747571200 39600 1 AEDT} + {3763296000 36000 0 AEST} + {3779020800 39600 1 AEDT} + {3794745600 36000 0 AEST} + {3810470400 39600 1 AEDT} + {3826195200 36000 0 AEST} + {3842524800 39600 1 AEDT} + {3858249600 36000 0 AEST} + {3873974400 39600 1 AEDT} + {3889699200 36000 0 AEST} + {3905424000 39600 1 AEDT} + {3921148800 36000 0 AEST} + {3936873600 39600 1 AEDT} + {3952598400 36000 0 AEST} + {3968323200 39600 1 AEDT} + {3984048000 36000 0 AEST} + {4000377600 39600 1 AEDT} + {4016102400 36000 0 AEST} + {4031827200 39600 1 AEDT} + {4047552000 36000 0 AEST} + {4063276800 39600 1 AEDT} + {4079001600 36000 0 AEST} + {4094726400 39600 1 AEDT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Australia/LHI b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Australia/LHI new file mode 100644 index 00000000..ddc79ce3 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Australia/LHI @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Australia/Lord_Howe)]} { + LoadTimeZoneFile Australia/Lord_Howe +} +set TZData(:Australia/LHI) $TZData(:Australia/Lord_Howe) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Australia/Lindeman b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Australia/Lindeman new file mode 100644 index 00000000..91ad0a6b --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Australia/Lindeman @@ -0,0 +1,28 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Australia/Lindeman) { + {-9223372036854775808 35756 0 LMT} + {-2366790956 36000 0 AEST} + {-1672567140 39600 1 AEDT} + {-1665392400 36000 0 AEST} + {-883641600 39600 1 AEDT} + {-876128400 36000 0 AEST} + {-860400000 39600 1 AEDT} + {-844678800 36000 0 AEST} + {-828345600 39600 1 AEDT} + {-813229200 36000 0 AEST} + {31500000 36000 0 AEST} + {57686400 39600 1 AEDT} + {67968000 36000 0 AEST} + {625593600 39600 1 AEDT} + {636480000 36000 0 AEST} + {657043200 39600 1 AEDT} + {667929600 36000 0 AEST} + {688492800 39600 1 AEDT} + {699379200 36000 0 AEST} + {709912800 36000 0 AEST} + {719942400 39600 1 AEDT} + {731433600 36000 0 AEST} + {751996800 39600 1 AEDT} + {762883200 36000 0 AEST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Australia/Lord_Howe b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Australia/Lord_Howe new file mode 100644 index 00000000..a8ff80e2 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Australia/Lord_Howe @@ -0,0 +1,244 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Australia/Lord_Howe) { + {-9223372036854775808 38180 0 LMT} + {-2364114980 36000 0 AEST} + {352216800 37800 0 LHST} + {372785400 41400 1 LHDT} + {384273000 37800 0 LHST} + {404839800 41400 1 LHDT} + {415722600 37800 0 LHST} + {436289400 41400 1 LHDT} + {447172200 37800 0 LHST} + {467739000 41400 1 LHDT} + {478621800 37800 0 LHST} + {499188600 39600 1 LHDT} + {511282800 37800 0 LHST} + {530033400 39600 1 LHDT} + {542732400 37800 0 LHST} + {562087800 39600 1 LHDT} + {574786800 37800 0 LHST} + {594142200 39600 1 LHDT} + {606236400 37800 0 LHST} + {625591800 39600 1 LHDT} + {636476400 37800 0 LHST} + {657041400 39600 1 LHDT} + {667926000 37800 0 LHST} + {688491000 39600 1 LHDT} + {699375600 37800 0 LHST} + {719940600 39600 1 LHDT} + {731430000 37800 0 LHST} + {751995000 39600 1 LHDT} + {762879600 37800 0 LHST} + {783444600 39600 1 LHDT} + {794329200 37800 0 LHST} + {814894200 39600 1 LHDT} + {828198000 37800 0 LHST} + {846343800 39600 1 LHDT} + {859647600 37800 0 LHST} + {877793400 39600 1 LHDT} + {891097200 37800 0 LHST} + {909243000 39600 1 LHDT} + {922546800 37800 0 LHST} + {941297400 39600 1 LHDT} + {953996400 37800 0 LHST} + {967303800 39600 1 LHDT} + {985446000 37800 0 LHST} + {1004196600 39600 1 LHDT} + {1017500400 37800 0 LHST} + {1035646200 39600 1 LHDT} + {1048950000 37800 0 LHST} + {1067095800 39600 1 LHDT} + {1080399600 37800 0 LHST} + {1099150200 39600 1 LHDT} + {1111849200 37800 0 LHST} + {1130599800 39600 1 LHDT} + {1143903600 37800 0 LHST} + {1162049400 39600 1 LHDT} + {1174748400 37800 0 LHST} + {1193499000 39600 1 LHDT} + {1207407600 37800 0 LHST} + {1223134200 39600 1 LHDT} + {1238857200 37800 0 LHST} + {1254583800 39600 1 LHDT} + {1270306800 37800 0 LHST} + {1286033400 39600 1 LHDT} + {1301756400 37800 0 LHST} + {1317483000 39600 1 LHDT} + {1333206000 37800 0 LHST} + {1349537400 39600 1 LHDT} + {1365260400 37800 0 LHST} + {1380987000 39600 1 LHDT} + {1396710000 37800 0 LHST} + {1412436600 39600 1 LHDT} + {1428159600 37800 0 LHST} + {1443886200 39600 1 LHDT} + {1459609200 37800 0 LHST} + {1475335800 39600 1 LHDT} + {1491058800 37800 0 LHST} + {1506785400 39600 1 LHDT} + {1522508400 37800 0 LHST} + {1538839800 39600 1 LHDT} + {1554562800 37800 0 LHST} + {1570289400 39600 1 LHDT} + {1586012400 37800 0 LHST} + {1601739000 39600 1 LHDT} + {1617462000 37800 0 LHST} + {1633188600 39600 1 LHDT} + {1648911600 37800 0 LHST} + {1664638200 39600 1 LHDT} + {1680361200 37800 0 LHST} + {1696087800 39600 1 LHDT} + {1712415600 37800 0 LHST} + {1728142200 39600 1 LHDT} + {1743865200 37800 0 LHST} + {1759591800 39600 1 LHDT} + {1775314800 37800 0 LHST} + {1791041400 39600 1 LHDT} + {1806764400 37800 0 LHST} + {1822491000 39600 1 LHDT} + {1838214000 37800 0 LHST} + {1853940600 39600 1 LHDT} + {1869663600 37800 0 LHST} + {1885995000 39600 1 LHDT} + {1901718000 37800 0 LHST} + {1917444600 39600 1 LHDT} + {1933167600 37800 0 LHST} + {1948894200 39600 1 LHDT} + {1964617200 37800 0 LHST} + {1980343800 39600 1 LHDT} + {1996066800 37800 0 LHST} + {2011793400 39600 1 LHDT} + {2027516400 37800 0 LHST} + {2043243000 39600 1 LHDT} + {2058966000 37800 0 LHST} + {2075297400 39600 1 LHDT} + {2091020400 37800 0 LHST} + {2106747000 39600 1 LHDT} + {2122470000 37800 0 LHST} + {2138196600 39600 1 LHDT} + {2153919600 37800 0 LHST} + {2169646200 39600 1 LHDT} + {2185369200 37800 0 LHST} + {2201095800 39600 1 LHDT} + {2216818800 37800 0 LHST} + {2233150200 39600 1 LHDT} + {2248873200 37800 0 LHST} + {2264599800 39600 1 LHDT} + {2280322800 37800 0 LHST} + {2296049400 39600 1 LHDT} + {2311772400 37800 0 LHST} + {2327499000 39600 1 LHDT} + {2343222000 37800 0 LHST} + {2358948600 39600 1 LHDT} + {2374671600 37800 0 LHST} + {2390398200 39600 1 LHDT} + {2406121200 37800 0 LHST} + {2422452600 39600 1 LHDT} + {2438175600 37800 0 LHST} + {2453902200 39600 1 LHDT} + {2469625200 37800 0 LHST} + {2485351800 39600 1 LHDT} + {2501074800 37800 0 LHST} + {2516801400 39600 1 LHDT} + {2532524400 37800 0 LHST} + {2548251000 39600 1 LHDT} + {2563974000 37800 0 LHST} + {2579700600 39600 1 LHDT} + {2596028400 37800 0 LHST} + {2611755000 39600 1 LHDT} + {2627478000 37800 0 LHST} + {2643204600 39600 1 LHDT} + {2658927600 37800 0 LHST} + {2674654200 39600 1 LHDT} + {2690377200 37800 0 LHST} + {2706103800 39600 1 LHDT} + {2721826800 37800 0 LHST} + {2737553400 39600 1 LHDT} + {2753276400 37800 0 LHST} + {2769607800 39600 1 LHDT} + {2785330800 37800 0 LHST} + {2801057400 39600 1 LHDT} + {2816780400 37800 0 LHST} + {2832507000 39600 1 LHDT} + {2848230000 37800 0 LHST} + {2863956600 39600 1 LHDT} + {2879679600 37800 0 LHST} + {2895406200 39600 1 LHDT} + {2911129200 37800 0 LHST} + {2926855800 39600 1 LHDT} + {2942578800 37800 0 LHST} + {2958910200 39600 1 LHDT} + {2974633200 37800 0 LHST} + {2990359800 39600 1 LHDT} + {3006082800 37800 0 LHST} + {3021809400 39600 1 LHDT} + {3037532400 37800 0 LHST} + {3053259000 39600 1 LHDT} + {3068982000 37800 0 LHST} + {3084708600 39600 1 LHDT} + {3100431600 37800 0 LHST} + {3116763000 39600 1 LHDT} + {3132486000 37800 0 LHST} + {3148212600 39600 1 LHDT} + {3163935600 37800 0 LHST} + {3179662200 39600 1 LHDT} + {3195385200 37800 0 LHST} + {3211111800 39600 1 LHDT} + {3226834800 37800 0 LHST} + {3242561400 39600 1 LHDT} + {3258284400 37800 0 LHST} + {3274011000 39600 1 LHDT} + {3289734000 37800 0 LHST} + {3306065400 39600 1 LHDT} + {3321788400 37800 0 LHST} + {3337515000 39600 1 LHDT} + {3353238000 37800 0 LHST} + {3368964600 39600 1 LHDT} + {3384687600 37800 0 LHST} + {3400414200 39600 1 LHDT} + {3416137200 37800 0 LHST} + {3431863800 39600 1 LHDT} + {3447586800 37800 0 LHST} + {3463313400 39600 1 LHDT} + {3479641200 37800 0 LHST} + {3495367800 39600 1 LHDT} + {3511090800 37800 0 LHST} + {3526817400 39600 1 LHDT} + {3542540400 37800 0 LHST} + {3558267000 39600 1 LHDT} + {3573990000 37800 0 LHST} + {3589716600 39600 1 LHDT} + {3605439600 37800 0 LHST} + {3621166200 39600 1 LHDT} + {3636889200 37800 0 LHST} + {3653220600 39600 1 LHDT} + {3668943600 37800 0 LHST} + {3684670200 39600 1 LHDT} + {3700393200 37800 0 LHST} + {3716119800 39600 1 LHDT} + {3731842800 37800 0 LHST} + {3747569400 39600 1 LHDT} + {3763292400 37800 0 LHST} + {3779019000 39600 1 LHDT} + {3794742000 37800 0 LHST} + {3810468600 39600 1 LHDT} + {3826191600 37800 0 LHST} + {3842523000 39600 1 LHDT} + {3858246000 37800 0 LHST} + {3873972600 39600 1 LHDT} + {3889695600 37800 0 LHST} + {3905422200 39600 1 LHDT} + {3921145200 37800 0 LHST} + {3936871800 39600 1 LHDT} + {3952594800 37800 0 LHST} + {3968321400 39600 1 LHDT} + {3984044400 37800 0 LHST} + {4000375800 39600 1 LHDT} + {4016098800 37800 0 LHST} + {4031825400 39600 1 LHDT} + {4047548400 37800 0 LHST} + {4063275000 39600 1 LHDT} + {4078998000 37800 0 LHST} + {4094724600 39600 1 LHDT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Australia/Melbourne b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Australia/Melbourne new file mode 100644 index 00000000..81777dfe --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Australia/Melbourne @@ -0,0 +1,272 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Australia/Melbourne) { + {-9223372036854775808 34792 0 LMT} + {-2364111592 36000 0 AEST} + {-1672567140 39600 1 AEDT} + {-1665392400 36000 0 AEST} + {-883641600 39600 1 AEDT} + {-876128400 36000 0 AEST} + {-860400000 39600 1 AEDT} + {-844678800 36000 0 AEST} + {-828345600 39600 1 AEDT} + {-813229200 36000 0 AEST} + {31500000 36000 0 AEST} + {57686400 39600 1 AEDT} + {67968000 36000 0 AEST} + {89136000 39600 1 AEDT} + {100022400 36000 0 AEST} + {120585600 39600 1 AEDT} + {131472000 36000 0 AEST} + {152035200 39600 1 AEDT} + {162921600 36000 0 AEST} + {183484800 39600 1 AEDT} + {194976000 36000 0 AEST} + {215539200 39600 1 AEDT} + {226425600 36000 0 AEST} + {246988800 39600 1 AEDT} + {257875200 36000 0 AEST} + {278438400 39600 1 AEDT} + {289324800 36000 0 AEST} + {309888000 39600 1 AEDT} + {320774400 36000 0 AEST} + {341337600 39600 1 AEDT} + {352224000 36000 0 AEST} + {372787200 39600 1 AEDT} + {384278400 36000 0 AEST} + {404841600 39600 1 AEDT} + {415728000 36000 0 AEST} + {436291200 39600 1 AEDT} + {447177600 36000 0 AEST} + {467740800 39600 1 AEDT} + {478627200 36000 0 AEST} + {499190400 39600 1 AEDT} + {511286400 36000 0 AEST} + {530035200 39600 1 AEDT} + {542736000 36000 0 AEST} + {561484800 39600 1 AEDT} + {574790400 36000 0 AEST} + {594144000 39600 1 AEDT} + {606240000 36000 0 AEST} + {625593600 39600 1 AEDT} + {637689600 36000 0 AEST} + {657043200 39600 1 AEDT} + {667929600 36000 0 AEST} + {688492800 39600 1 AEDT} + {699379200 36000 0 AEST} + {719942400 39600 1 AEDT} + {731433600 36000 0 AEST} + {751996800 39600 1 AEDT} + {762883200 36000 0 AEST} + {783446400 39600 1 AEDT} + {796147200 36000 0 AEST} + {814896000 39600 1 AEDT} + {828201600 36000 0 AEST} + {846345600 39600 1 AEDT} + {859651200 36000 0 AEST} + {877795200 39600 1 AEDT} + {891100800 36000 0 AEST} + {909244800 39600 1 AEDT} + {922550400 36000 0 AEST} + {941299200 39600 1 AEDT} + {954000000 36000 0 AEST} + {967305600 39600 1 AEDT} + {985449600 36000 0 AEST} + {1004198400 39600 1 AEDT} + {1017504000 36000 0 AEST} + {1035648000 39600 1 AEDT} + {1048953600 36000 0 AEST} + {1067097600 39600 1 AEDT} + {1080403200 36000 0 AEST} + {1099152000 39600 1 AEDT} + {1111852800 36000 0 AEST} + {1130601600 39600 1 AEDT} + {1143907200 36000 0 AEST} + {1162051200 39600 1 AEDT} + {1174752000 36000 0 AEST} + {1193500800 39600 1 AEDT} + {1207411200 36000 0 AEST} + {1223136000 39600 1 AEDT} + {1238860800 36000 0 AEST} + {1254585600 39600 1 AEDT} + {1270310400 36000 0 AEST} + {1286035200 39600 1 AEDT} + {1301760000 36000 0 AEST} + {1317484800 39600 1 AEDT} + {1333209600 36000 0 AEST} + {1349539200 39600 1 AEDT} + {1365264000 36000 0 AEST} + {1380988800 39600 1 AEDT} + {1396713600 36000 0 AEST} + {1412438400 39600 1 AEDT} + {1428163200 36000 0 AEST} + {1443888000 39600 1 AEDT} + {1459612800 36000 0 AEST} + {1475337600 39600 1 AEDT} + {1491062400 36000 0 AEST} + {1506787200 39600 1 AEDT} + {1522512000 36000 0 AEST} + {1538841600 39600 1 AEDT} + {1554566400 36000 0 AEST} + {1570291200 39600 1 AEDT} + {1586016000 36000 0 AEST} + {1601740800 39600 1 AEDT} + {1617465600 36000 0 AEST} + {1633190400 39600 1 AEDT} + {1648915200 36000 0 AEST} + {1664640000 39600 1 AEDT} + {1680364800 36000 0 AEST} + {1696089600 39600 1 AEDT} + {1712419200 36000 0 AEST} + {1728144000 39600 1 AEDT} + {1743868800 36000 0 AEST} + {1759593600 39600 1 AEDT} + {1775318400 36000 0 AEST} + {1791043200 39600 1 AEDT} + {1806768000 36000 0 AEST} + {1822492800 39600 1 AEDT} + {1838217600 36000 0 AEST} + {1853942400 39600 1 AEDT} + {1869667200 36000 0 AEST} + {1885996800 39600 1 AEDT} + {1901721600 36000 0 AEST} + {1917446400 39600 1 AEDT} + {1933171200 36000 0 AEST} + {1948896000 39600 1 AEDT} + {1964620800 36000 0 AEST} + {1980345600 39600 1 AEDT} + {1996070400 36000 0 AEST} + {2011795200 39600 1 AEDT} + {2027520000 36000 0 AEST} + {2043244800 39600 1 AEDT} + {2058969600 36000 0 AEST} + {2075299200 39600 1 AEDT} + {2091024000 36000 0 AEST} + {2106748800 39600 1 AEDT} + {2122473600 36000 0 AEST} + {2138198400 39600 1 AEDT} + {2153923200 36000 0 AEST} + {2169648000 39600 1 AEDT} + {2185372800 36000 0 AEST} + {2201097600 39600 1 AEDT} + {2216822400 36000 0 AEST} + {2233152000 39600 1 AEDT} + {2248876800 36000 0 AEST} + {2264601600 39600 1 AEDT} + {2280326400 36000 0 AEST} + {2296051200 39600 1 AEDT} + {2311776000 36000 0 AEST} + {2327500800 39600 1 AEDT} + {2343225600 36000 0 AEST} + {2358950400 39600 1 AEDT} + {2374675200 36000 0 AEST} + {2390400000 39600 1 AEDT} + {2406124800 36000 0 AEST} + {2422454400 39600 1 AEDT} + {2438179200 36000 0 AEST} + {2453904000 39600 1 AEDT} + {2469628800 36000 0 AEST} + {2485353600 39600 1 AEDT} + {2501078400 36000 0 AEST} + {2516803200 39600 1 AEDT} + {2532528000 36000 0 AEST} + {2548252800 39600 1 AEDT} + {2563977600 36000 0 AEST} + {2579702400 39600 1 AEDT} + {2596032000 36000 0 AEST} + {2611756800 39600 1 AEDT} + {2627481600 36000 0 AEST} + {2643206400 39600 1 AEDT} + {2658931200 36000 0 AEST} + {2674656000 39600 1 AEDT} + {2690380800 36000 0 AEST} + {2706105600 39600 1 AEDT} + {2721830400 36000 0 AEST} + {2737555200 39600 1 AEDT} + {2753280000 36000 0 AEST} + {2769609600 39600 1 AEDT} + {2785334400 36000 0 AEST} + {2801059200 39600 1 AEDT} + {2816784000 36000 0 AEST} + {2832508800 39600 1 AEDT} + {2848233600 36000 0 AEST} + {2863958400 39600 1 AEDT} + {2879683200 36000 0 AEST} + {2895408000 39600 1 AEDT} + {2911132800 36000 0 AEST} + {2926857600 39600 1 AEDT} + {2942582400 36000 0 AEST} + {2958912000 39600 1 AEDT} + {2974636800 36000 0 AEST} + {2990361600 39600 1 AEDT} + {3006086400 36000 0 AEST} + {3021811200 39600 1 AEDT} + {3037536000 36000 0 AEST} + {3053260800 39600 1 AEDT} + {3068985600 36000 0 AEST} + {3084710400 39600 1 AEDT} + {3100435200 36000 0 AEST} + {3116764800 39600 1 AEDT} + {3132489600 36000 0 AEST} + {3148214400 39600 1 AEDT} + {3163939200 36000 0 AEST} + {3179664000 39600 1 AEDT} + {3195388800 36000 0 AEST} + {3211113600 39600 1 AEDT} + {3226838400 36000 0 AEST} + {3242563200 39600 1 AEDT} + {3258288000 36000 0 AEST} + {3274012800 39600 1 AEDT} + {3289737600 36000 0 AEST} + {3306067200 39600 1 AEDT} + {3321792000 36000 0 AEST} + {3337516800 39600 1 AEDT} + {3353241600 36000 0 AEST} + {3368966400 39600 1 AEDT} + {3384691200 36000 0 AEST} + {3400416000 39600 1 AEDT} + {3416140800 36000 0 AEST} + {3431865600 39600 1 AEDT} + {3447590400 36000 0 AEST} + {3463315200 39600 1 AEDT} + {3479644800 36000 0 AEST} + {3495369600 39600 1 AEDT} + {3511094400 36000 0 AEST} + {3526819200 39600 1 AEDT} + {3542544000 36000 0 AEST} + {3558268800 39600 1 AEDT} + {3573993600 36000 0 AEST} + {3589718400 39600 1 AEDT} + {3605443200 36000 0 AEST} + {3621168000 39600 1 AEDT} + {3636892800 36000 0 AEST} + {3653222400 39600 1 AEDT} + {3668947200 36000 0 AEST} + {3684672000 39600 1 AEDT} + {3700396800 36000 0 AEST} + {3716121600 39600 1 AEDT} + {3731846400 36000 0 AEST} + {3747571200 39600 1 AEDT} + {3763296000 36000 0 AEST} + {3779020800 39600 1 AEDT} + {3794745600 36000 0 AEST} + {3810470400 39600 1 AEDT} + {3826195200 36000 0 AEST} + {3842524800 39600 1 AEDT} + {3858249600 36000 0 AEST} + {3873974400 39600 1 AEDT} + {3889699200 36000 0 AEST} + {3905424000 39600 1 AEDT} + {3921148800 36000 0 AEST} + {3936873600 39600 1 AEDT} + {3952598400 36000 0 AEST} + {3968323200 39600 1 AEDT} + {3984048000 36000 0 AEST} + {4000377600 39600 1 AEDT} + {4016102400 36000 0 AEST} + {4031827200 39600 1 AEDT} + {4047552000 36000 0 AEST} + {4063276800 39600 1 AEDT} + {4079001600 36000 0 AEST} + {4094726400 39600 1 AEDT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Australia/NSW b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Australia/NSW new file mode 100644 index 00000000..905bdfea --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Australia/NSW @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Australia/Sydney)]} { + LoadTimeZoneFile Australia/Sydney +} +set TZData(:Australia/NSW) $TZData(:Australia/Sydney) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Australia/North b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Australia/North new file mode 100644 index 00000000..950c88c2 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Australia/North @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Australia/Darwin)]} { + LoadTimeZoneFile Australia/Darwin +} +set TZData(:Australia/North) $TZData(:Australia/Darwin) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Australia/Perth b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Australia/Perth new file mode 100644 index 00000000..6ccbca82 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Australia/Perth @@ -0,0 +1,25 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Australia/Perth) { + {-9223372036854775808 27804 0 LMT} + {-2337925404 28800 0 AWST} + {-1672559940 32400 1 AWDT} + {-1665385200 28800 0 AWST} + {-883634400 32400 1 AWDT} + {-876121200 28800 0 AWST} + {-860392800 32400 1 AWDT} + {-844671600 28800 0 AWST} + {-836470800 32400 0 AWST} + {152042400 32400 1 AWDT} + {162928800 28800 0 AWST} + {436298400 32400 1 AWDT} + {447184800 28800 0 AWST} + {690314400 32400 1 AWDT} + {699386400 28800 0 AWST} + {1165082400 32400 1 AWDT} + {1174759200 28800 0 AWST} + {1193508000 32400 1 AWDT} + {1206813600 28800 0 AWST} + {1224957600 32400 1 AWDT} + {1238263200 28800 0 AWST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Australia/Queensland b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Australia/Queensland new file mode 100644 index 00000000..6246e920 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Australia/Queensland @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Australia/Brisbane)]} { + LoadTimeZoneFile Australia/Brisbane +} +set TZData(:Australia/Queensland) $TZData(:Australia/Brisbane) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Australia/South b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Australia/South new file mode 100644 index 00000000..9c7dd956 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Australia/South @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Australia/Adelaide)]} { + LoadTimeZoneFile Australia/Adelaide +} +set TZData(:Australia/South) $TZData(:Australia/Adelaide) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Australia/Sydney b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Australia/Sydney new file mode 100644 index 00000000..b1c44117 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Australia/Sydney @@ -0,0 +1,272 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Australia/Sydney) { + {-9223372036854775808 36292 0 LMT} + {-2364113092 36000 0 AEST} + {-1672567140 39600 1 AEDT} + {-1665392400 36000 0 AEST} + {-883641600 39600 1 AEDT} + {-876128400 36000 0 AEST} + {-860400000 39600 1 AEDT} + {-844678800 36000 0 AEST} + {-828345600 39600 1 AEDT} + {-813229200 36000 0 AEST} + {31500000 36000 0 AEST} + {57686400 39600 1 AEDT} + {67968000 36000 0 AEST} + {89136000 39600 1 AEDT} + {100022400 36000 0 AEST} + {120585600 39600 1 AEDT} + {131472000 36000 0 AEST} + {152035200 39600 1 AEDT} + {162921600 36000 0 AEST} + {183484800 39600 1 AEDT} + {194976000 36000 0 AEST} + {215539200 39600 1 AEDT} + {226425600 36000 0 AEST} + {246988800 39600 1 AEDT} + {257875200 36000 0 AEST} + {278438400 39600 1 AEDT} + {289324800 36000 0 AEST} + {309888000 39600 1 AEDT} + {320774400 36000 0 AEST} + {341337600 39600 1 AEDT} + {352224000 36000 0 AEST} + {372787200 39600 1 AEDT} + {386697600 36000 0 AEST} + {404841600 39600 1 AEDT} + {415728000 36000 0 AEST} + {436291200 39600 1 AEDT} + {447177600 36000 0 AEST} + {467740800 39600 1 AEDT} + {478627200 36000 0 AEST} + {499190400 39600 1 AEDT} + {511286400 36000 0 AEST} + {530035200 39600 1 AEDT} + {542736000 36000 0 AEST} + {562089600 39600 1 AEDT} + {574790400 36000 0 AEST} + {594144000 39600 1 AEDT} + {606240000 36000 0 AEST} + {625593600 39600 1 AEDT} + {636480000 36000 0 AEST} + {657043200 39600 1 AEDT} + {667929600 36000 0 AEST} + {688492800 39600 1 AEDT} + {699379200 36000 0 AEST} + {719942400 39600 1 AEDT} + {731433600 36000 0 AEST} + {751996800 39600 1 AEDT} + {762883200 36000 0 AEST} + {783446400 39600 1 AEDT} + {794332800 36000 0 AEST} + {814896000 39600 1 AEDT} + {828201600 36000 0 AEST} + {846345600 39600 1 AEDT} + {859651200 36000 0 AEST} + {877795200 39600 1 AEDT} + {891100800 36000 0 AEST} + {909244800 39600 1 AEDT} + {922550400 36000 0 AEST} + {941299200 39600 1 AEDT} + {954000000 36000 0 AEST} + {967305600 39600 1 AEDT} + {985449600 36000 0 AEST} + {1004198400 39600 1 AEDT} + {1017504000 36000 0 AEST} + {1035648000 39600 1 AEDT} + {1048953600 36000 0 AEST} + {1067097600 39600 1 AEDT} + {1080403200 36000 0 AEST} + {1099152000 39600 1 AEDT} + {1111852800 36000 0 AEST} + {1130601600 39600 1 AEDT} + {1143907200 36000 0 AEST} + {1162051200 39600 1 AEDT} + {1174752000 36000 0 AEST} + {1193500800 39600 1 AEDT} + {1207411200 36000 0 AEST} + {1223136000 39600 1 AEDT} + {1238860800 36000 0 AEST} + {1254585600 39600 1 AEDT} + {1270310400 36000 0 AEST} + {1286035200 39600 1 AEDT} + {1301760000 36000 0 AEST} + {1317484800 39600 1 AEDT} + {1333209600 36000 0 AEST} + {1349539200 39600 1 AEDT} + {1365264000 36000 0 AEST} + {1380988800 39600 1 AEDT} + {1396713600 36000 0 AEST} + {1412438400 39600 1 AEDT} + {1428163200 36000 0 AEST} + {1443888000 39600 1 AEDT} + {1459612800 36000 0 AEST} + {1475337600 39600 1 AEDT} + {1491062400 36000 0 AEST} + {1506787200 39600 1 AEDT} + {1522512000 36000 0 AEST} + {1538841600 39600 1 AEDT} + {1554566400 36000 0 AEST} + {1570291200 39600 1 AEDT} + {1586016000 36000 0 AEST} + {1601740800 39600 1 AEDT} + {1617465600 36000 0 AEST} + {1633190400 39600 1 AEDT} + {1648915200 36000 0 AEST} + {1664640000 39600 1 AEDT} + {1680364800 36000 0 AEST} + {1696089600 39600 1 AEDT} + {1712419200 36000 0 AEST} + {1728144000 39600 1 AEDT} + {1743868800 36000 0 AEST} + {1759593600 39600 1 AEDT} + {1775318400 36000 0 AEST} + {1791043200 39600 1 AEDT} + {1806768000 36000 0 AEST} + {1822492800 39600 1 AEDT} + {1838217600 36000 0 AEST} + {1853942400 39600 1 AEDT} + {1869667200 36000 0 AEST} + {1885996800 39600 1 AEDT} + {1901721600 36000 0 AEST} + {1917446400 39600 1 AEDT} + {1933171200 36000 0 AEST} + {1948896000 39600 1 AEDT} + {1964620800 36000 0 AEST} + {1980345600 39600 1 AEDT} + {1996070400 36000 0 AEST} + {2011795200 39600 1 AEDT} + {2027520000 36000 0 AEST} + {2043244800 39600 1 AEDT} + {2058969600 36000 0 AEST} + {2075299200 39600 1 AEDT} + {2091024000 36000 0 AEST} + {2106748800 39600 1 AEDT} + {2122473600 36000 0 AEST} + {2138198400 39600 1 AEDT} + {2153923200 36000 0 AEST} + {2169648000 39600 1 AEDT} + {2185372800 36000 0 AEST} + {2201097600 39600 1 AEDT} + {2216822400 36000 0 AEST} + {2233152000 39600 1 AEDT} + {2248876800 36000 0 AEST} + {2264601600 39600 1 AEDT} + {2280326400 36000 0 AEST} + {2296051200 39600 1 AEDT} + {2311776000 36000 0 AEST} + {2327500800 39600 1 AEDT} + {2343225600 36000 0 AEST} + {2358950400 39600 1 AEDT} + {2374675200 36000 0 AEST} + {2390400000 39600 1 AEDT} + {2406124800 36000 0 AEST} + {2422454400 39600 1 AEDT} + {2438179200 36000 0 AEST} + {2453904000 39600 1 AEDT} + {2469628800 36000 0 AEST} + {2485353600 39600 1 AEDT} + {2501078400 36000 0 AEST} + {2516803200 39600 1 AEDT} + {2532528000 36000 0 AEST} + {2548252800 39600 1 AEDT} + {2563977600 36000 0 AEST} + {2579702400 39600 1 AEDT} + {2596032000 36000 0 AEST} + {2611756800 39600 1 AEDT} + {2627481600 36000 0 AEST} + {2643206400 39600 1 AEDT} + {2658931200 36000 0 AEST} + {2674656000 39600 1 AEDT} + {2690380800 36000 0 AEST} + {2706105600 39600 1 AEDT} + {2721830400 36000 0 AEST} + {2737555200 39600 1 AEDT} + {2753280000 36000 0 AEST} + {2769609600 39600 1 AEDT} + {2785334400 36000 0 AEST} + {2801059200 39600 1 AEDT} + {2816784000 36000 0 AEST} + {2832508800 39600 1 AEDT} + {2848233600 36000 0 AEST} + {2863958400 39600 1 AEDT} + {2879683200 36000 0 AEST} + {2895408000 39600 1 AEDT} + {2911132800 36000 0 AEST} + {2926857600 39600 1 AEDT} + {2942582400 36000 0 AEST} + {2958912000 39600 1 AEDT} + {2974636800 36000 0 AEST} + {2990361600 39600 1 AEDT} + {3006086400 36000 0 AEST} + {3021811200 39600 1 AEDT} + {3037536000 36000 0 AEST} + {3053260800 39600 1 AEDT} + {3068985600 36000 0 AEST} + {3084710400 39600 1 AEDT} + {3100435200 36000 0 AEST} + {3116764800 39600 1 AEDT} + {3132489600 36000 0 AEST} + {3148214400 39600 1 AEDT} + {3163939200 36000 0 AEST} + {3179664000 39600 1 AEDT} + {3195388800 36000 0 AEST} + {3211113600 39600 1 AEDT} + {3226838400 36000 0 AEST} + {3242563200 39600 1 AEDT} + {3258288000 36000 0 AEST} + {3274012800 39600 1 AEDT} + {3289737600 36000 0 AEST} + {3306067200 39600 1 AEDT} + {3321792000 36000 0 AEST} + {3337516800 39600 1 AEDT} + {3353241600 36000 0 AEST} + {3368966400 39600 1 AEDT} + {3384691200 36000 0 AEST} + {3400416000 39600 1 AEDT} + {3416140800 36000 0 AEST} + {3431865600 39600 1 AEDT} + {3447590400 36000 0 AEST} + {3463315200 39600 1 AEDT} + {3479644800 36000 0 AEST} + {3495369600 39600 1 AEDT} + {3511094400 36000 0 AEST} + {3526819200 39600 1 AEDT} + {3542544000 36000 0 AEST} + {3558268800 39600 1 AEDT} + {3573993600 36000 0 AEST} + {3589718400 39600 1 AEDT} + {3605443200 36000 0 AEST} + {3621168000 39600 1 AEDT} + {3636892800 36000 0 AEST} + {3653222400 39600 1 AEDT} + {3668947200 36000 0 AEST} + {3684672000 39600 1 AEDT} + {3700396800 36000 0 AEST} + {3716121600 39600 1 AEDT} + {3731846400 36000 0 AEST} + {3747571200 39600 1 AEDT} + {3763296000 36000 0 AEST} + {3779020800 39600 1 AEDT} + {3794745600 36000 0 AEST} + {3810470400 39600 1 AEDT} + {3826195200 36000 0 AEST} + {3842524800 39600 1 AEDT} + {3858249600 36000 0 AEST} + {3873974400 39600 1 AEDT} + {3889699200 36000 0 AEST} + {3905424000 39600 1 AEDT} + {3921148800 36000 0 AEST} + {3936873600 39600 1 AEDT} + {3952598400 36000 0 AEST} + {3968323200 39600 1 AEDT} + {3984048000 36000 0 AEST} + {4000377600 39600 1 AEDT} + {4016102400 36000 0 AEST} + {4031827200 39600 1 AEDT} + {4047552000 36000 0 AEST} + {4063276800 39600 1 AEDT} + {4079001600 36000 0 AEST} + {4094726400 39600 1 AEDT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Australia/Tasmania b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Australia/Tasmania new file mode 100644 index 00000000..1849bdee --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Australia/Tasmania @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Australia/Hobart)]} { + LoadTimeZoneFile Australia/Hobart +} +set TZData(:Australia/Tasmania) $TZData(:Australia/Hobart) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Australia/Victoria b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Australia/Victoria new file mode 100644 index 00000000..037bfeb5 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Australia/Victoria @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Australia/Melbourne)]} { + LoadTimeZoneFile Australia/Melbourne +} +set TZData(:Australia/Victoria) $TZData(:Australia/Melbourne) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Australia/West b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Australia/West new file mode 100644 index 00000000..4689f7ea --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Australia/West @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Australia/Perth)]} { + LoadTimeZoneFile Australia/Perth +} +set TZData(:Australia/West) $TZData(:Australia/Perth) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Australia/Yancowinna b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Australia/Yancowinna new file mode 100644 index 00000000..b7d668d6 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Australia/Yancowinna @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Australia/Broken_Hill)]} { + LoadTimeZoneFile Australia/Broken_Hill +} +set TZData(:Australia/Yancowinna) $TZData(:Australia/Broken_Hill) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Brazil/Acre b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Brazil/Acre new file mode 100644 index 00000000..abb0b98e --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Brazil/Acre @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Rio_Branco)]} { + LoadTimeZoneFile America/Rio_Branco +} +set TZData(:Brazil/Acre) $TZData(:America/Rio_Branco) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Brazil/DeNoronha b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Brazil/DeNoronha new file mode 100644 index 00000000..53accb43 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Brazil/DeNoronha @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Noronha)]} { + LoadTimeZoneFile America/Noronha +} +set TZData(:Brazil/DeNoronha) $TZData(:America/Noronha) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Brazil/East b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Brazil/East new file mode 100644 index 00000000..f684633c --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Brazil/East @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Sao_Paulo)]} { + LoadTimeZoneFile America/Sao_Paulo +} +set TZData(:Brazil/East) $TZData(:America/Sao_Paulo) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Brazil/West b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Brazil/West new file mode 100644 index 00000000..67676d90 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Brazil/West @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Manaus)]} { + LoadTimeZoneFile America/Manaus +} +set TZData(:Brazil/West) $TZData(:America/Manaus) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/CET b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/CET new file mode 100644 index 00000000..b08750ae --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/CET @@ -0,0 +1,265 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:CET) { + {-9223372036854775808 3600 0 CET} + {-1693706400 7200 1 CEST} + {-1680483600 3600 0 CET} + {-1663455600 7200 1 CEST} + {-1650150000 3600 0 CET} + {-1632006000 7200 1 CEST} + {-1618700400 3600 0 CET} + {-938905200 7200 1 CEST} + {-857257200 3600 0 CET} + {-844556400 7200 1 CEST} + {-828226800 3600 0 CET} + {-812502000 7200 1 CEST} + {-796777200 3600 0 CET} + {-781052400 7200 1 CEST} + {-766623600 3600 0 CET} + {228877200 7200 1 CEST} + {243997200 3600 0 CET} + {260326800 7200 1 CEST} + {276051600 3600 0 CET} + {291776400 7200 1 CEST} + {307501200 3600 0 CET} + {323830800 7200 1 CEST} + {338950800 3600 0 CET} + {354675600 7200 1 CEST} + {370400400 3600 0 CET} + {386125200 7200 1 CEST} + {401850000 3600 0 CET} + {417574800 7200 1 CEST} + {433299600 3600 0 CET} + {449024400 7200 1 CEST} + {465354000 3600 0 CET} + {481078800 7200 1 CEST} + {496803600 3600 0 CET} + {512528400 7200 1 CEST} + {528253200 3600 0 CET} + {543978000 7200 1 CEST} + {559702800 3600 0 CET} + {575427600 7200 1 CEST} + {591152400 3600 0 CET} + {606877200 7200 1 CEST} + {622602000 3600 0 CET} + {638326800 7200 1 CEST} + {654656400 3600 0 CET} + {670381200 7200 1 CEST} + {686106000 3600 0 CET} + {701830800 7200 1 CEST} + {717555600 3600 0 CET} + {733280400 7200 1 CEST} + {749005200 3600 0 CET} + {764730000 7200 1 CEST} + {780454800 3600 0 CET} + {796179600 7200 1 CEST} + {811904400 3600 0 CET} + {828234000 7200 1 CEST} + {846378000 3600 0 CET} + {859683600 7200 1 CEST} + {877827600 3600 0 CET} + {891133200 7200 1 CEST} + {909277200 3600 0 CET} + {922582800 7200 1 CEST} + {941331600 3600 0 CET} + {954032400 7200 1 CEST} + {972781200 3600 0 CET} + {985482000 7200 1 CEST} + {1004230800 3600 0 CET} + {1017536400 7200 1 CEST} + {1035680400 3600 0 CET} + {1048986000 7200 1 CEST} + {1067130000 3600 0 CET} + {1080435600 7200 1 CEST} + {1099184400 3600 0 CET} + {1111885200 7200 1 CEST} + {1130634000 3600 0 CET} + {1143334800 7200 1 CEST} + {1162083600 3600 0 CET} + {1174784400 7200 1 CEST} + {1193533200 3600 0 CET} + {1206838800 7200 1 CEST} + {1224982800 3600 0 CET} + {1238288400 7200 1 CEST} + {1256432400 3600 0 CET} + {1269738000 7200 1 CEST} + {1288486800 3600 0 CET} + {1301187600 7200 1 CEST} + {1319936400 3600 0 CET} + {1332637200 7200 1 CEST} + {1351386000 3600 0 CET} + {1364691600 7200 1 CEST} + {1382835600 3600 0 CET} + {1396141200 7200 1 CEST} + {1414285200 3600 0 CET} + {1427590800 7200 1 CEST} + {1445734800 3600 0 CET} + {1459040400 7200 1 CEST} + {1477789200 3600 0 CET} + {1490490000 7200 1 CEST} + {1509238800 3600 0 CET} + {1521939600 7200 1 CEST} + {1540688400 3600 0 CET} + {1553994000 7200 1 CEST} + {1572138000 3600 0 CET} + {1585443600 7200 1 CEST} + {1603587600 3600 0 CET} + {1616893200 7200 1 CEST} + {1635642000 3600 0 CET} + {1648342800 7200 1 CEST} + {1667091600 3600 0 CET} + {1679792400 7200 1 CEST} + {1698541200 3600 0 CET} + {1711846800 7200 1 CEST} + {1729990800 3600 0 CET} + {1743296400 7200 1 CEST} + {1761440400 3600 0 CET} + {1774746000 7200 1 CEST} + {1792890000 3600 0 CET} + {1806195600 7200 1 CEST} + {1824944400 3600 0 CET} + {1837645200 7200 1 CEST} + {1856394000 3600 0 CET} + {1869094800 7200 1 CEST} + {1887843600 3600 0 CET} + {1901149200 7200 1 CEST} + {1919293200 3600 0 CET} + {1932598800 7200 1 CEST} + {1950742800 3600 0 CET} + {1964048400 7200 1 CEST} + {1982797200 3600 0 CET} + {1995498000 7200 1 CEST} + {2014246800 3600 0 CET} + {2026947600 7200 1 CEST} + {2045696400 3600 0 CET} + {2058397200 7200 1 CEST} + {2077146000 3600 0 CET} + {2090451600 7200 1 CEST} + {2108595600 3600 0 CET} + {2121901200 7200 1 CEST} + {2140045200 3600 0 CET} + {2153350800 7200 1 CEST} + {2172099600 3600 0 CET} + {2184800400 7200 1 CEST} + {2203549200 3600 0 CET} + {2216250000 7200 1 CEST} + {2234998800 3600 0 CET} + {2248304400 7200 1 CEST} + {2266448400 3600 0 CET} + {2279754000 7200 1 CEST} + {2297898000 3600 0 CET} + {2311203600 7200 1 CEST} + {2329347600 3600 0 CET} + {2342653200 7200 1 CEST} + {2361402000 3600 0 CET} + {2374102800 7200 1 CEST} + {2392851600 3600 0 CET} + {2405552400 7200 1 CEST} + {2424301200 3600 0 CET} + {2437606800 7200 1 CEST} + {2455750800 3600 0 CET} + {2469056400 7200 1 CEST} + {2487200400 3600 0 CET} + {2500506000 7200 1 CEST} + {2519254800 3600 0 CET} + {2531955600 7200 1 CEST} + {2550704400 3600 0 CET} + {2563405200 7200 1 CEST} + {2582154000 3600 0 CET} + {2595459600 7200 1 CEST} + {2613603600 3600 0 CET} + {2626909200 7200 1 CEST} + {2645053200 3600 0 CET} + {2658358800 7200 1 CEST} + {2676502800 3600 0 CET} + {2689808400 7200 1 CEST} + {2708557200 3600 0 CET} + {2721258000 7200 1 CEST} + {2740006800 3600 0 CET} + {2752707600 7200 1 CEST} + {2771456400 3600 0 CET} + {2784762000 7200 1 CEST} + {2802906000 3600 0 CET} + {2816211600 7200 1 CEST} + {2834355600 3600 0 CET} + {2847661200 7200 1 CEST} + {2866410000 3600 0 CET} + {2879110800 7200 1 CEST} + {2897859600 3600 0 CET} + {2910560400 7200 1 CEST} + {2929309200 3600 0 CET} + {2942010000 7200 1 CEST} + {2960758800 3600 0 CET} + {2974064400 7200 1 CEST} + {2992208400 3600 0 CET} + {3005514000 7200 1 CEST} + {3023658000 3600 0 CET} + {3036963600 7200 1 CEST} + {3055712400 3600 0 CET} + {3068413200 7200 1 CEST} + {3087162000 3600 0 CET} + {3099862800 7200 1 CEST} + {3118611600 3600 0 CET} + {3131917200 7200 1 CEST} + {3150061200 3600 0 CET} + {3163366800 7200 1 CEST} + {3181510800 3600 0 CET} + {3194816400 7200 1 CEST} + {3212960400 3600 0 CET} + {3226266000 7200 1 CEST} + {3245014800 3600 0 CET} + {3257715600 7200 1 CEST} + {3276464400 3600 0 CET} + {3289165200 7200 1 CEST} + {3307914000 3600 0 CET} + {3321219600 7200 1 CEST} + {3339363600 3600 0 CET} + {3352669200 7200 1 CEST} + {3370813200 3600 0 CET} + {3384118800 7200 1 CEST} + {3402867600 3600 0 CET} + {3415568400 7200 1 CEST} + {3434317200 3600 0 CET} + {3447018000 7200 1 CEST} + {3465766800 3600 0 CET} + {3479072400 7200 1 CEST} + {3497216400 3600 0 CET} + {3510522000 7200 1 CEST} + {3528666000 3600 0 CET} + {3541971600 7200 1 CEST} + {3560115600 3600 0 CET} + {3573421200 7200 1 CEST} + {3592170000 3600 0 CET} + {3604870800 7200 1 CEST} + {3623619600 3600 0 CET} + {3636320400 7200 1 CEST} + {3655069200 3600 0 CET} + {3668374800 7200 1 CEST} + {3686518800 3600 0 CET} + {3699824400 7200 1 CEST} + {3717968400 3600 0 CET} + {3731274000 7200 1 CEST} + {3750022800 3600 0 CET} + {3762723600 7200 1 CEST} + {3781472400 3600 0 CET} + {3794173200 7200 1 CEST} + {3812922000 3600 0 CET} + {3825622800 7200 1 CEST} + {3844371600 3600 0 CET} + {3857677200 7200 1 CEST} + {3875821200 3600 0 CET} + {3889126800 7200 1 CEST} + {3907270800 3600 0 CET} + {3920576400 7200 1 CEST} + {3939325200 3600 0 CET} + {3952026000 7200 1 CEST} + {3970774800 3600 0 CET} + {3983475600 7200 1 CEST} + {4002224400 3600 0 CET} + {4015530000 7200 1 CEST} + {4033674000 3600 0 CET} + {4046979600 7200 1 CEST} + {4065123600 3600 0 CET} + {4078429200 7200 1 CEST} + {4096573200 3600 0 CET} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/CST6CDT b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/CST6CDT new file mode 100644 index 00000000..11e45f0c --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/CST6CDT @@ -0,0 +1,278 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:CST6CDT) { + {-9223372036854775808 -21600 0 CST} + {-1633276800 -18000 1 CDT} + {-1615136400 -21600 0 CST} + {-1601827200 -18000 1 CDT} + {-1583686800 -21600 0 CST} + {-880214400 -18000 1 CWT} + {-769395600 -18000 1 CPT} + {-765392400 -21600 0 CST} + {-84384000 -18000 1 CDT} + {-68662800 -21600 0 CST} + {-52934400 -18000 1 CDT} + {-37213200 -21600 0 CST} + {-21484800 -18000 1 CDT} + {-5763600 -21600 0 CST} + {9964800 -18000 1 CDT} + {25686000 -21600 0 CST} + {41414400 -18000 1 CDT} + {57740400 -21600 0 CST} + {73468800 -18000 1 CDT} + {89190000 -21600 0 CST} + {104918400 -18000 1 CDT} + {120639600 -21600 0 CST} + {126691200 -18000 1 CDT} + {152089200 -21600 0 CST} + {162374400 -18000 1 CDT} + {183538800 -21600 0 CST} + {199267200 -18000 1 CDT} + {215593200 -21600 0 CST} + {230716800 -18000 1 CDT} + {247042800 -21600 0 CST} + {262771200 -18000 1 CDT} + {278492400 -21600 0 CST} + {294220800 -18000 1 CDT} + {309942000 -21600 0 CST} + {325670400 -18000 1 CDT} + {341391600 -21600 0 CST} + {357120000 -18000 1 CDT} + {372841200 -21600 0 CST} + {388569600 -18000 1 CDT} + {404895600 -21600 0 CST} + {420019200 -18000 1 CDT} + {436345200 -21600 0 CST} + {452073600 -18000 1 CDT} + {467794800 -21600 0 CST} + {483523200 -18000 1 CDT} + {499244400 -21600 0 CST} + {514972800 -18000 1 CDT} + {530694000 -21600 0 CST} + {544608000 -18000 1 CDT} + {562143600 -21600 0 CST} + {576057600 -18000 1 CDT} + {594198000 -21600 0 CST} + {607507200 -18000 1 CDT} + {625647600 -21600 0 CST} + {638956800 -18000 1 CDT} + {657097200 -21600 0 CST} + {671011200 -18000 1 CDT} + {688546800 -21600 0 CST} + {702460800 -18000 1 CDT} + {719996400 -21600 0 CST} + {733910400 -18000 1 CDT} + {752050800 -21600 0 CST} + {765360000 -18000 1 CDT} + {783500400 -21600 0 CST} + {796809600 -18000 1 CDT} + {814950000 -21600 0 CST} + {828864000 -18000 1 CDT} + {846399600 -21600 0 CST} + {860313600 -18000 1 CDT} + {877849200 -21600 0 CST} + {891763200 -18000 1 CDT} + {909298800 -21600 0 CST} + {923212800 -18000 1 CDT} + {941353200 -21600 0 CST} + {954662400 -18000 1 CDT} + {972802800 -21600 0 CST} + {986112000 -18000 1 CDT} + {1004252400 -21600 0 CST} + {1018166400 -18000 1 CDT} + {1035702000 -21600 0 CST} + {1049616000 -18000 1 CDT} + {1067151600 -21600 0 CST} + {1081065600 -18000 1 CDT} + {1099206000 -21600 0 CST} + {1112515200 -18000 1 CDT} + {1130655600 -21600 0 CST} + {1143964800 -18000 1 CDT} + {1162105200 -21600 0 CST} + {1173600000 -18000 1 CDT} + {1194159600 -21600 0 CST} + {1205049600 -18000 1 CDT} + {1225609200 -21600 0 CST} + {1236499200 -18000 1 CDT} + {1257058800 -21600 0 CST} + {1268553600 -18000 1 CDT} + {1289113200 -21600 0 CST} + {1300003200 -18000 1 CDT} + {1320562800 -21600 0 CST} + {1331452800 -18000 1 CDT} + {1352012400 -21600 0 CST} + {1362902400 -18000 1 CDT} + {1383462000 -21600 0 CST} + {1394352000 -18000 1 CDT} + {1414911600 -21600 0 CST} + {1425801600 -18000 1 CDT} + {1446361200 -21600 0 CST} + {1457856000 -18000 1 CDT} + {1478415600 -21600 0 CST} + {1489305600 -18000 1 CDT} + {1509865200 -21600 0 CST} + {1520755200 -18000 1 CDT} + {1541314800 -21600 0 CST} + {1552204800 -18000 1 CDT} + {1572764400 -21600 0 CST} + {1583654400 -18000 1 CDT} + {1604214000 -21600 0 CST} + {1615708800 -18000 1 CDT} + {1636268400 -21600 0 CST} + {1647158400 -18000 1 CDT} + {1667718000 -21600 0 CST} + {1678608000 -18000 1 CDT} + {1699167600 -21600 0 CST} + {1710057600 -18000 1 CDT} + {1730617200 -21600 0 CST} + {1741507200 -18000 1 CDT} + {1762066800 -21600 0 CST} + {1772956800 -18000 1 CDT} + {1793516400 -21600 0 CST} + {1805011200 -18000 1 CDT} + {1825570800 -21600 0 CST} + {1836460800 -18000 1 CDT} + {1857020400 -21600 0 CST} + {1867910400 -18000 1 CDT} + {1888470000 -21600 0 CST} + {1899360000 -18000 1 CDT} + {1919919600 -21600 0 CST} + {1930809600 -18000 1 CDT} + {1951369200 -21600 0 CST} + {1962864000 -18000 1 CDT} + {1983423600 -21600 0 CST} + {1994313600 -18000 1 CDT} + {2014873200 -21600 0 CST} + {2025763200 -18000 1 CDT} + {2046322800 -21600 0 CST} + {2057212800 -18000 1 CDT} + {2077772400 -21600 0 CST} + {2088662400 -18000 1 CDT} + {2109222000 -21600 0 CST} + {2120112000 -18000 1 CDT} + {2140671600 -21600 0 CST} + {2152166400 -18000 1 CDT} + {2172726000 -21600 0 CST} + {2183616000 -18000 1 CDT} + {2204175600 -21600 0 CST} + {2215065600 -18000 1 CDT} + {2235625200 -21600 0 CST} + {2246515200 -18000 1 CDT} + {2267074800 -21600 0 CST} + {2277964800 -18000 1 CDT} + {2298524400 -21600 0 CST} + {2309414400 -18000 1 CDT} + {2329974000 -21600 0 CST} + {2341468800 -18000 1 CDT} + {2362028400 -21600 0 CST} + {2372918400 -18000 1 CDT} + {2393478000 -21600 0 CST} + {2404368000 -18000 1 CDT} + {2424927600 -21600 0 CST} + {2435817600 -18000 1 CDT} + {2456377200 -21600 0 CST} + {2467267200 -18000 1 CDT} + {2487826800 -21600 0 CST} + {2499321600 -18000 1 CDT} + {2519881200 -21600 0 CST} + {2530771200 -18000 1 CDT} + {2551330800 -21600 0 CST} + {2562220800 -18000 1 CDT} + {2582780400 -21600 0 CST} + {2593670400 -18000 1 CDT} + {2614230000 -21600 0 CST} + {2625120000 -18000 1 CDT} + {2645679600 -21600 0 CST} + {2656569600 -18000 1 CDT} + {2677129200 -21600 0 CST} + {2688624000 -18000 1 CDT} + {2709183600 -21600 0 CST} + {2720073600 -18000 1 CDT} + {2740633200 -21600 0 CST} + {2751523200 -18000 1 CDT} + {2772082800 -21600 0 CST} + {2782972800 -18000 1 CDT} + {2803532400 -21600 0 CST} + {2814422400 -18000 1 CDT} + {2834982000 -21600 0 CST} + {2846476800 -18000 1 CDT} + {2867036400 -21600 0 CST} + {2877926400 -18000 1 CDT} + {2898486000 -21600 0 CST} + {2909376000 -18000 1 CDT} + {2929935600 -21600 0 CST} + {2940825600 -18000 1 CDT} + {2961385200 -21600 0 CST} + {2972275200 -18000 1 CDT} + {2992834800 -21600 0 CST} + {3003724800 -18000 1 CDT} + {3024284400 -21600 0 CST} + {3035779200 -18000 1 CDT} + {3056338800 -21600 0 CST} + {3067228800 -18000 1 CDT} + {3087788400 -21600 0 CST} + {3098678400 -18000 1 CDT} + {3119238000 -21600 0 CST} + {3130128000 -18000 1 CDT} + {3150687600 -21600 0 CST} + {3161577600 -18000 1 CDT} + {3182137200 -21600 0 CST} + {3193027200 -18000 1 CDT} + {3213586800 -21600 0 CST} + {3225081600 -18000 1 CDT} + {3245641200 -21600 0 CST} + {3256531200 -18000 1 CDT} + {3277090800 -21600 0 CST} + {3287980800 -18000 1 CDT} + {3308540400 -21600 0 CST} + {3319430400 -18000 1 CDT} + {3339990000 -21600 0 CST} + {3350880000 -18000 1 CDT} + {3371439600 -21600 0 CST} + {3382934400 -18000 1 CDT} + {3403494000 -21600 0 CST} + {3414384000 -18000 1 CDT} + {3434943600 -21600 0 CST} + {3445833600 -18000 1 CDT} + {3466393200 -21600 0 CST} + {3477283200 -18000 1 CDT} + {3497842800 -21600 0 CST} + {3508732800 -18000 1 CDT} + {3529292400 -21600 0 CST} + {3540182400 -18000 1 CDT} + {3560742000 -21600 0 CST} + {3572236800 -18000 1 CDT} + {3592796400 -21600 0 CST} + {3603686400 -18000 1 CDT} + {3624246000 -21600 0 CST} + {3635136000 -18000 1 CDT} + {3655695600 -21600 0 CST} + {3666585600 -18000 1 CDT} + {3687145200 -21600 0 CST} + {3698035200 -18000 1 CDT} + {3718594800 -21600 0 CST} + {3730089600 -18000 1 CDT} + {3750649200 -21600 0 CST} + {3761539200 -18000 1 CDT} + {3782098800 -21600 0 CST} + {3792988800 -18000 1 CDT} + {3813548400 -21600 0 CST} + {3824438400 -18000 1 CDT} + {3844998000 -21600 0 CST} + {3855888000 -18000 1 CDT} + {3876447600 -21600 0 CST} + {3887337600 -18000 1 CDT} + {3907897200 -21600 0 CST} + {3919392000 -18000 1 CDT} + {3939951600 -21600 0 CST} + {3950841600 -18000 1 CDT} + {3971401200 -21600 0 CST} + {3982291200 -18000 1 CDT} + {4002850800 -21600 0 CST} + {4013740800 -18000 1 CDT} + {4034300400 -21600 0 CST} + {4045190400 -18000 1 CDT} + {4065750000 -21600 0 CST} + {4076640000 -18000 1 CDT} + {4097199600 -21600 0 CST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Canada/Atlantic b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Canada/Atlantic new file mode 100644 index 00000000..d1478d97 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Canada/Atlantic @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Halifax)]} { + LoadTimeZoneFile America/Halifax +} +set TZData(:Canada/Atlantic) $TZData(:America/Halifax) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Canada/Central b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Canada/Central new file mode 100644 index 00000000..b04bef93 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Canada/Central @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Winnipeg)]} { + LoadTimeZoneFile America/Winnipeg +} +set TZData(:Canada/Central) $TZData(:America/Winnipeg) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Canada/East-Saskatchewan b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Canada/East-Saskatchewan new file mode 100644 index 00000000..f7e500c3 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Canada/East-Saskatchewan @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Regina)]} { + LoadTimeZoneFile America/Regina +} +set TZData(:Canada/East-Saskatchewan) $TZData(:America/Regina) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Canada/Eastern b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Canada/Eastern new file mode 100644 index 00000000..74528eb2 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Canada/Eastern @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Toronto)]} { + LoadTimeZoneFile America/Toronto +} +set TZData(:Canada/Eastern) $TZData(:America/Toronto) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Canada/Mountain b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Canada/Mountain new file mode 100644 index 00000000..8c6458de --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Canada/Mountain @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Edmonton)]} { + LoadTimeZoneFile America/Edmonton +} +set TZData(:Canada/Mountain) $TZData(:America/Edmonton) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Canada/Newfoundland b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Canada/Newfoundland new file mode 100644 index 00000000..6904cde8 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Canada/Newfoundland @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/St_Johns)]} { + LoadTimeZoneFile America/St_Johns +} +set TZData(:Canada/Newfoundland) $TZData(:America/St_Johns) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Canada/Pacific b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Canada/Pacific new file mode 100644 index 00000000..4d70342d --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Canada/Pacific @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Vancouver)]} { + LoadTimeZoneFile America/Vancouver +} +set TZData(:Canada/Pacific) $TZData(:America/Vancouver) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Canada/Saskatchewan b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Canada/Saskatchewan new file mode 100644 index 00000000..cd56446e --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Canada/Saskatchewan @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Regina)]} { + LoadTimeZoneFile America/Regina +} +set TZData(:Canada/Saskatchewan) $TZData(:America/Regina) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Canada/Yukon b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Canada/Yukon new file mode 100644 index 00000000..04b83685 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Canada/Yukon @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Whitehorse)]} { + LoadTimeZoneFile America/Whitehorse +} +set TZData(:Canada/Yukon) $TZData(:America/Whitehorse) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Chile/Continental b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Chile/Continental new file mode 100644 index 00000000..0f858a3d --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Chile/Continental @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Santiago)]} { + LoadTimeZoneFile America/Santiago +} +set TZData(:Chile/Continental) $TZData(:America/Santiago) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Chile/EasterIsland b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Chile/EasterIsland new file mode 100644 index 00000000..4edc034d --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Chile/EasterIsland @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Pacific/Easter)]} { + LoadTimeZoneFile Pacific/Easter +} +set TZData(:Chile/EasterIsland) $TZData(:Pacific/Easter) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Cuba b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Cuba new file mode 100644 index 00000000..17f7b453 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Cuba @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Havana)]} { + LoadTimeZoneFile America/Havana +} +set TZData(:Cuba) $TZData(:America/Havana) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/EET b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/EET new file mode 100644 index 00000000..e7c102a9 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/EET @@ -0,0 +1,251 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:EET) { + {-9223372036854775808 7200 0 EET} + {228877200 10800 1 EEST} + {243997200 7200 0 EET} + {260326800 10800 1 EEST} + {276051600 7200 0 EET} + {291776400 10800 1 EEST} + {307501200 7200 0 EET} + {323830800 10800 1 EEST} + {338950800 7200 0 EET} + {354675600 10800 1 EEST} + {370400400 7200 0 EET} + {386125200 10800 1 EEST} + {401850000 7200 0 EET} + {417574800 10800 1 EEST} + {433299600 7200 0 EET} + {449024400 10800 1 EEST} + {465354000 7200 0 EET} + {481078800 10800 1 EEST} + {496803600 7200 0 EET} + {512528400 10800 1 EEST} + {528253200 7200 0 EET} + {543978000 10800 1 EEST} + {559702800 7200 0 EET} + {575427600 10800 1 EEST} + {591152400 7200 0 EET} + {606877200 10800 1 EEST} + {622602000 7200 0 EET} + {638326800 10800 1 EEST} + {654656400 7200 0 EET} + {670381200 10800 1 EEST} + {686106000 7200 0 EET} + {701830800 10800 1 EEST} + {717555600 7200 0 EET} + {733280400 10800 1 EEST} + {749005200 7200 0 EET} + {764730000 10800 1 EEST} + {780454800 7200 0 EET} + {796179600 10800 1 EEST} + {811904400 7200 0 EET} + {828234000 10800 1 EEST} + {846378000 7200 0 EET} + {859683600 10800 1 EEST} + {877827600 7200 0 EET} + {891133200 10800 1 EEST} + {909277200 7200 0 EET} + {922582800 10800 1 EEST} + {941331600 7200 0 EET} + {954032400 10800 1 EEST} + {972781200 7200 0 EET} + {985482000 10800 1 EEST} + {1004230800 7200 0 EET} + {1017536400 10800 1 EEST} + {1035680400 7200 0 EET} + {1048986000 10800 1 EEST} + {1067130000 7200 0 EET} + {1080435600 10800 1 EEST} + {1099184400 7200 0 EET} + {1111885200 10800 1 EEST} + {1130634000 7200 0 EET} + {1143334800 10800 1 EEST} + {1162083600 7200 0 EET} + {1174784400 10800 1 EEST} + {1193533200 7200 0 EET} + {1206838800 10800 1 EEST} + {1224982800 7200 0 EET} + {1238288400 10800 1 EEST} + {1256432400 7200 0 EET} + {1269738000 10800 1 EEST} + {1288486800 7200 0 EET} + {1301187600 10800 1 EEST} + {1319936400 7200 0 EET} + {1332637200 10800 1 EEST} + {1351386000 7200 0 EET} + {1364691600 10800 1 EEST} + {1382835600 7200 0 EET} + {1396141200 10800 1 EEST} + {1414285200 7200 0 EET} + {1427590800 10800 1 EEST} + {1445734800 7200 0 EET} + {1459040400 10800 1 EEST} + {1477789200 7200 0 EET} + {1490490000 10800 1 EEST} + {1509238800 7200 0 EET} + {1521939600 10800 1 EEST} + {1540688400 7200 0 EET} + {1553994000 10800 1 EEST} + {1572138000 7200 0 EET} + {1585443600 10800 1 EEST} + {1603587600 7200 0 EET} + {1616893200 10800 1 EEST} + {1635642000 7200 0 EET} + {1648342800 10800 1 EEST} + {1667091600 7200 0 EET} + {1679792400 10800 1 EEST} + {1698541200 7200 0 EET} + {1711846800 10800 1 EEST} + {1729990800 7200 0 EET} + {1743296400 10800 1 EEST} + {1761440400 7200 0 EET} + {1774746000 10800 1 EEST} + {1792890000 7200 0 EET} + {1806195600 10800 1 EEST} + {1824944400 7200 0 EET} + {1837645200 10800 1 EEST} + {1856394000 7200 0 EET} + {1869094800 10800 1 EEST} + {1887843600 7200 0 EET} + {1901149200 10800 1 EEST} + {1919293200 7200 0 EET} + {1932598800 10800 1 EEST} + {1950742800 7200 0 EET} + {1964048400 10800 1 EEST} + {1982797200 7200 0 EET} + {1995498000 10800 1 EEST} + {2014246800 7200 0 EET} + {2026947600 10800 1 EEST} + {2045696400 7200 0 EET} + {2058397200 10800 1 EEST} + {2077146000 7200 0 EET} + {2090451600 10800 1 EEST} + {2108595600 7200 0 EET} + {2121901200 10800 1 EEST} + {2140045200 7200 0 EET} + {2153350800 10800 1 EEST} + {2172099600 7200 0 EET} + {2184800400 10800 1 EEST} + {2203549200 7200 0 EET} + {2216250000 10800 1 EEST} + {2234998800 7200 0 EET} + {2248304400 10800 1 EEST} + {2266448400 7200 0 EET} + {2279754000 10800 1 EEST} + {2297898000 7200 0 EET} + {2311203600 10800 1 EEST} + {2329347600 7200 0 EET} + {2342653200 10800 1 EEST} + {2361402000 7200 0 EET} + {2374102800 10800 1 EEST} + {2392851600 7200 0 EET} + {2405552400 10800 1 EEST} + {2424301200 7200 0 EET} + {2437606800 10800 1 EEST} + {2455750800 7200 0 EET} + {2469056400 10800 1 EEST} + {2487200400 7200 0 EET} + {2500506000 10800 1 EEST} + {2519254800 7200 0 EET} + {2531955600 10800 1 EEST} + {2550704400 7200 0 EET} + {2563405200 10800 1 EEST} + {2582154000 7200 0 EET} + {2595459600 10800 1 EEST} + {2613603600 7200 0 EET} + {2626909200 10800 1 EEST} + {2645053200 7200 0 EET} + {2658358800 10800 1 EEST} + {2676502800 7200 0 EET} + {2689808400 10800 1 EEST} + {2708557200 7200 0 EET} + {2721258000 10800 1 EEST} + {2740006800 7200 0 EET} + {2752707600 10800 1 EEST} + {2771456400 7200 0 EET} + {2784762000 10800 1 EEST} + {2802906000 7200 0 EET} + {2816211600 10800 1 EEST} + {2834355600 7200 0 EET} + {2847661200 10800 1 EEST} + {2866410000 7200 0 EET} + {2879110800 10800 1 EEST} + {2897859600 7200 0 EET} + {2910560400 10800 1 EEST} + {2929309200 7200 0 EET} + {2942010000 10800 1 EEST} + {2960758800 7200 0 EET} + {2974064400 10800 1 EEST} + {2992208400 7200 0 EET} + {3005514000 10800 1 EEST} + {3023658000 7200 0 EET} + {3036963600 10800 1 EEST} + {3055712400 7200 0 EET} + {3068413200 10800 1 EEST} + {3087162000 7200 0 EET} + {3099862800 10800 1 EEST} + {3118611600 7200 0 EET} + {3131917200 10800 1 EEST} + {3150061200 7200 0 EET} + {3163366800 10800 1 EEST} + {3181510800 7200 0 EET} + {3194816400 10800 1 EEST} + {3212960400 7200 0 EET} + {3226266000 10800 1 EEST} + {3245014800 7200 0 EET} + {3257715600 10800 1 EEST} + {3276464400 7200 0 EET} + {3289165200 10800 1 EEST} + {3307914000 7200 0 EET} + {3321219600 10800 1 EEST} + {3339363600 7200 0 EET} + {3352669200 10800 1 EEST} + {3370813200 7200 0 EET} + {3384118800 10800 1 EEST} + {3402867600 7200 0 EET} + {3415568400 10800 1 EEST} + {3434317200 7200 0 EET} + {3447018000 10800 1 EEST} + {3465766800 7200 0 EET} + {3479072400 10800 1 EEST} + {3497216400 7200 0 EET} + {3510522000 10800 1 EEST} + {3528666000 7200 0 EET} + {3541971600 10800 1 EEST} + {3560115600 7200 0 EET} + {3573421200 10800 1 EEST} + {3592170000 7200 0 EET} + {3604870800 10800 1 EEST} + {3623619600 7200 0 EET} + {3636320400 10800 1 EEST} + {3655069200 7200 0 EET} + {3668374800 10800 1 EEST} + {3686518800 7200 0 EET} + {3699824400 10800 1 EEST} + {3717968400 7200 0 EET} + {3731274000 10800 1 EEST} + {3750022800 7200 0 EET} + {3762723600 10800 1 EEST} + {3781472400 7200 0 EET} + {3794173200 10800 1 EEST} + {3812922000 7200 0 EET} + {3825622800 10800 1 EEST} + {3844371600 7200 0 EET} + {3857677200 10800 1 EEST} + {3875821200 7200 0 EET} + {3889126800 10800 1 EEST} + {3907270800 7200 0 EET} + {3920576400 10800 1 EEST} + {3939325200 7200 0 EET} + {3952026000 10800 1 EEST} + {3970774800 7200 0 EET} + {3983475600 10800 1 EEST} + {4002224400 7200 0 EET} + {4015530000 10800 1 EEST} + {4033674000 7200 0 EET} + {4046979600 10800 1 EEST} + {4065123600 7200 0 EET} + {4078429200 10800 1 EEST} + {4096573200 7200 0 EET} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/EST b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/EST new file mode 100644 index 00000000..72c5b17d --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/EST @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:EST) { + {-9223372036854775808 -18000 0 EST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/EST5EDT b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/EST5EDT new file mode 100644 index 00000000..968833ef --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/EST5EDT @@ -0,0 +1,278 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:EST5EDT) { + {-9223372036854775808 -18000 0 EST} + {-1633280400 -14400 1 EDT} + {-1615140000 -18000 0 EST} + {-1601830800 -14400 1 EDT} + {-1583690400 -18000 0 EST} + {-880218000 -14400 1 EWT} + {-769395600 -14400 1 EPT} + {-765396000 -18000 0 EST} + {-84387600 -14400 1 EDT} + {-68666400 -18000 0 EST} + {-52938000 -14400 1 EDT} + {-37216800 -18000 0 EST} + {-21488400 -14400 1 EDT} + {-5767200 -18000 0 EST} + {9961200 -14400 1 EDT} + {25682400 -18000 0 EST} + {41410800 -14400 1 EDT} + {57736800 -18000 0 EST} + {73465200 -14400 1 EDT} + {89186400 -18000 0 EST} + {104914800 -14400 1 EDT} + {120636000 -18000 0 EST} + {126687600 -14400 1 EDT} + {152085600 -18000 0 EST} + {162370800 -14400 1 EDT} + {183535200 -18000 0 EST} + {199263600 -14400 1 EDT} + {215589600 -18000 0 EST} + {230713200 -14400 1 EDT} + {247039200 -18000 0 EST} + {262767600 -14400 1 EDT} + {278488800 -18000 0 EST} + {294217200 -14400 1 EDT} + {309938400 -18000 0 EST} + {325666800 -14400 1 EDT} + {341388000 -18000 0 EST} + {357116400 -14400 1 EDT} + {372837600 -18000 0 EST} + {388566000 -14400 1 EDT} + {404892000 -18000 0 EST} + {420015600 -14400 1 EDT} + {436341600 -18000 0 EST} + {452070000 -14400 1 EDT} + {467791200 -18000 0 EST} + {483519600 -14400 1 EDT} + {499240800 -18000 0 EST} + {514969200 -14400 1 EDT} + {530690400 -18000 0 EST} + {544604400 -14400 1 EDT} + {562140000 -18000 0 EST} + {576054000 -14400 1 EDT} + {594194400 -18000 0 EST} + {607503600 -14400 1 EDT} + {625644000 -18000 0 EST} + {638953200 -14400 1 EDT} + {657093600 -18000 0 EST} + {671007600 -14400 1 EDT} + {688543200 -18000 0 EST} + {702457200 -14400 1 EDT} + {719992800 -18000 0 EST} + {733906800 -14400 1 EDT} + {752047200 -18000 0 EST} + {765356400 -14400 1 EDT} + {783496800 -18000 0 EST} + {796806000 -14400 1 EDT} + {814946400 -18000 0 EST} + {828860400 -14400 1 EDT} + {846396000 -18000 0 EST} + {860310000 -14400 1 EDT} + {877845600 -18000 0 EST} + {891759600 -14400 1 EDT} + {909295200 -18000 0 EST} + {923209200 -14400 1 EDT} + {941349600 -18000 0 EST} + {954658800 -14400 1 EDT} + {972799200 -18000 0 EST} + {986108400 -14400 1 EDT} + {1004248800 -18000 0 EST} + {1018162800 -14400 1 EDT} + {1035698400 -18000 0 EST} + {1049612400 -14400 1 EDT} + {1067148000 -18000 0 EST} + {1081062000 -14400 1 EDT} + {1099202400 -18000 0 EST} + {1112511600 -14400 1 EDT} + {1130652000 -18000 0 EST} + {1143961200 -14400 1 EDT} + {1162101600 -18000 0 EST} + {1173596400 -14400 1 EDT} + {1194156000 -18000 0 EST} + {1205046000 -14400 1 EDT} + {1225605600 -18000 0 EST} + {1236495600 -14400 1 EDT} + {1257055200 -18000 0 EST} + {1268550000 -14400 1 EDT} + {1289109600 -18000 0 EST} + {1299999600 -14400 1 EDT} + {1320559200 -18000 0 EST} + {1331449200 -14400 1 EDT} + {1352008800 -18000 0 EST} + {1362898800 -14400 1 EDT} + {1383458400 -18000 0 EST} + {1394348400 -14400 1 EDT} + {1414908000 -18000 0 EST} + {1425798000 -14400 1 EDT} + {1446357600 -18000 0 EST} + {1457852400 -14400 1 EDT} + {1478412000 -18000 0 EST} + {1489302000 -14400 1 EDT} + {1509861600 -18000 0 EST} + {1520751600 -14400 1 EDT} + {1541311200 -18000 0 EST} + {1552201200 -14400 1 EDT} + {1572760800 -18000 0 EST} + {1583650800 -14400 1 EDT} + {1604210400 -18000 0 EST} + {1615705200 -14400 1 EDT} + {1636264800 -18000 0 EST} + {1647154800 -14400 1 EDT} + {1667714400 -18000 0 EST} + {1678604400 -14400 1 EDT} + {1699164000 -18000 0 EST} + {1710054000 -14400 1 EDT} + {1730613600 -18000 0 EST} + {1741503600 -14400 1 EDT} + {1762063200 -18000 0 EST} + {1772953200 -14400 1 EDT} + {1793512800 -18000 0 EST} + {1805007600 -14400 1 EDT} + {1825567200 -18000 0 EST} + {1836457200 -14400 1 EDT} + {1857016800 -18000 0 EST} + {1867906800 -14400 1 EDT} + {1888466400 -18000 0 EST} + {1899356400 -14400 1 EDT} + {1919916000 -18000 0 EST} + {1930806000 -14400 1 EDT} + {1951365600 -18000 0 EST} + {1962860400 -14400 1 EDT} + {1983420000 -18000 0 EST} + {1994310000 -14400 1 EDT} + {2014869600 -18000 0 EST} + {2025759600 -14400 1 EDT} + {2046319200 -18000 0 EST} + {2057209200 -14400 1 EDT} + {2077768800 -18000 0 EST} + {2088658800 -14400 1 EDT} + {2109218400 -18000 0 EST} + {2120108400 -14400 1 EDT} + {2140668000 -18000 0 EST} + {2152162800 -14400 1 EDT} + {2172722400 -18000 0 EST} + {2183612400 -14400 1 EDT} + {2204172000 -18000 0 EST} + {2215062000 -14400 1 EDT} + {2235621600 -18000 0 EST} + {2246511600 -14400 1 EDT} + {2267071200 -18000 0 EST} + {2277961200 -14400 1 EDT} + {2298520800 -18000 0 EST} + {2309410800 -14400 1 EDT} + {2329970400 -18000 0 EST} + {2341465200 -14400 1 EDT} + {2362024800 -18000 0 EST} + {2372914800 -14400 1 EDT} + {2393474400 -18000 0 EST} + {2404364400 -14400 1 EDT} + {2424924000 -18000 0 EST} + {2435814000 -14400 1 EDT} + {2456373600 -18000 0 EST} + {2467263600 -14400 1 EDT} + {2487823200 -18000 0 EST} + {2499318000 -14400 1 EDT} + {2519877600 -18000 0 EST} + {2530767600 -14400 1 EDT} + {2551327200 -18000 0 EST} + {2562217200 -14400 1 EDT} + {2582776800 -18000 0 EST} + {2593666800 -14400 1 EDT} + {2614226400 -18000 0 EST} + {2625116400 -14400 1 EDT} + {2645676000 -18000 0 EST} + {2656566000 -14400 1 EDT} + {2677125600 -18000 0 EST} + {2688620400 -14400 1 EDT} + {2709180000 -18000 0 EST} + {2720070000 -14400 1 EDT} + {2740629600 -18000 0 EST} + {2751519600 -14400 1 EDT} + {2772079200 -18000 0 EST} + {2782969200 -14400 1 EDT} + {2803528800 -18000 0 EST} + {2814418800 -14400 1 EDT} + {2834978400 -18000 0 EST} + {2846473200 -14400 1 EDT} + {2867032800 -18000 0 EST} + {2877922800 -14400 1 EDT} + {2898482400 -18000 0 EST} + {2909372400 -14400 1 EDT} + {2929932000 -18000 0 EST} + {2940822000 -14400 1 EDT} + {2961381600 -18000 0 EST} + {2972271600 -14400 1 EDT} + {2992831200 -18000 0 EST} + {3003721200 -14400 1 EDT} + {3024280800 -18000 0 EST} + {3035775600 -14400 1 EDT} + {3056335200 -18000 0 EST} + {3067225200 -14400 1 EDT} + {3087784800 -18000 0 EST} + {3098674800 -14400 1 EDT} + {3119234400 -18000 0 EST} + {3130124400 -14400 1 EDT} + {3150684000 -18000 0 EST} + {3161574000 -14400 1 EDT} + {3182133600 -18000 0 EST} + {3193023600 -14400 1 EDT} + {3213583200 -18000 0 EST} + {3225078000 -14400 1 EDT} + {3245637600 -18000 0 EST} + {3256527600 -14400 1 EDT} + {3277087200 -18000 0 EST} + {3287977200 -14400 1 EDT} + {3308536800 -18000 0 EST} + {3319426800 -14400 1 EDT} + {3339986400 -18000 0 EST} + {3350876400 -14400 1 EDT} + {3371436000 -18000 0 EST} + {3382930800 -14400 1 EDT} + {3403490400 -18000 0 EST} + {3414380400 -14400 1 EDT} + {3434940000 -18000 0 EST} + {3445830000 -14400 1 EDT} + {3466389600 -18000 0 EST} + {3477279600 -14400 1 EDT} + {3497839200 -18000 0 EST} + {3508729200 -14400 1 EDT} + {3529288800 -18000 0 EST} + {3540178800 -14400 1 EDT} + {3560738400 -18000 0 EST} + {3572233200 -14400 1 EDT} + {3592792800 -18000 0 EST} + {3603682800 -14400 1 EDT} + {3624242400 -18000 0 EST} + {3635132400 -14400 1 EDT} + {3655692000 -18000 0 EST} + {3666582000 -14400 1 EDT} + {3687141600 -18000 0 EST} + {3698031600 -14400 1 EDT} + {3718591200 -18000 0 EST} + {3730086000 -14400 1 EDT} + {3750645600 -18000 0 EST} + {3761535600 -14400 1 EDT} + {3782095200 -18000 0 EST} + {3792985200 -14400 1 EDT} + {3813544800 -18000 0 EST} + {3824434800 -14400 1 EDT} + {3844994400 -18000 0 EST} + {3855884400 -14400 1 EDT} + {3876444000 -18000 0 EST} + {3887334000 -14400 1 EDT} + {3907893600 -18000 0 EST} + {3919388400 -14400 1 EDT} + {3939948000 -18000 0 EST} + {3950838000 -14400 1 EDT} + {3971397600 -18000 0 EST} + {3982287600 -14400 1 EDT} + {4002847200 -18000 0 EST} + {4013737200 -14400 1 EDT} + {4034296800 -18000 0 EST} + {4045186800 -14400 1 EDT} + {4065746400 -18000 0 EST} + {4076636400 -14400 1 EDT} + {4097196000 -18000 0 EST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Egypt b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Egypt new file mode 100644 index 00000000..63341bcc --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Egypt @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Africa/Cairo)]} { + LoadTimeZoneFile Africa/Cairo +} +set TZData(:Egypt) $TZData(:Africa/Cairo) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Eire b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Eire new file mode 100644 index 00000000..c86c91c6 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Eire @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Europe/Dublin)]} { + LoadTimeZoneFile Europe/Dublin +} +set TZData(:Eire) $TZData(:Europe/Dublin) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT new file mode 100644 index 00000000..7454fd57 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Etc/GMT) { + {-9223372036854775808 0 0 GMT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT+0 b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT+0 new file mode 100644 index 00000000..017dee1f --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT+0 @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Etc/GMT)]} { + LoadTimeZoneFile Etc/GMT +} +set TZData(:Etc/GMT+0) $TZData(:Etc/GMT) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT+1 b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT+1 new file mode 100644 index 00000000..12f97ba6 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT+1 @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Etc/GMT+1) { + {-9223372036854775808 -3600 0 GMT+1} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT+10 b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT+10 new file mode 100644 index 00000000..6ea50bb1 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT+10 @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Etc/GMT+10) { + {-9223372036854775808 -36000 0 GMT+10} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT+11 b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT+11 new file mode 100644 index 00000000..c91b1692 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT+11 @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Etc/GMT+11) { + {-9223372036854775808 -39600 0 GMT+11} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT+12 b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT+12 new file mode 100644 index 00000000..29a4ceef --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT+12 @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Etc/GMT+12) { + {-9223372036854775808 -43200 0 GMT+12} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT+2 b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT+2 new file mode 100644 index 00000000..8c6b526b --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT+2 @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Etc/GMT+2) { + {-9223372036854775808 -7200 0 GMT+2} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT+3 b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT+3 new file mode 100644 index 00000000..862571df --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT+3 @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Etc/GMT+3) { + {-9223372036854775808 -10800 0 GMT+3} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT+4 b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT+4 new file mode 100644 index 00000000..a933bbc3 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT+4 @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Etc/GMT+4) { + {-9223372036854775808 -14400 0 GMT+4} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT+5 b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT+5 new file mode 100644 index 00000000..80cc25cb --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT+5 @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Etc/GMT+5) { + {-9223372036854775808 -18000 0 GMT+5} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT+6 b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT+6 new file mode 100644 index 00000000..bc57bd63 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT+6 @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Etc/GMT+6) { + {-9223372036854775808 -21600 0 GMT+6} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT+7 b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT+7 new file mode 100644 index 00000000..d419eb9e --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT+7 @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Etc/GMT+7) { + {-9223372036854775808 -25200 0 GMT+7} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT+8 b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT+8 new file mode 100644 index 00000000..705ad407 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT+8 @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Etc/GMT+8) { + {-9223372036854775808 -28800 0 GMT+8} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT+9 b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT+9 new file mode 100644 index 00000000..4086639c --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT+9 @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Etc/GMT+9) { + {-9223372036854775808 -32400 0 GMT+9} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT-0 b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT-0 new file mode 100644 index 00000000..d8913d50 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT-0 @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Etc/GMT)]} { + LoadTimeZoneFile Etc/GMT +} +set TZData(:Etc/GMT-0) $TZData(:Etc/GMT) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT-1 b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT-1 new file mode 100644 index 00000000..a44dd1fc --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT-1 @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Etc/GMT-1) { + {-9223372036854775808 3600 0 GMT-1} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT-10 b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT-10 new file mode 100644 index 00000000..1c50d01d --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT-10 @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Etc/GMT-10) { + {-9223372036854775808 36000 0 GMT-10} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT-11 b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT-11 new file mode 100644 index 00000000..d07710f1 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT-11 @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Etc/GMT-11) { + {-9223372036854775808 39600 0 GMT-11} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT-12 b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT-12 new file mode 100644 index 00000000..a23b98d4 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT-12 @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Etc/GMT-12) { + {-9223372036854775808 43200 0 GMT-12} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT-13 b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT-13 new file mode 100644 index 00000000..1a6700a1 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT-13 @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Etc/GMT-13) { + {-9223372036854775808 46800 0 GMT-13} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT-14 b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT-14 new file mode 100644 index 00000000..3707e219 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT-14 @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Etc/GMT-14) { + {-9223372036854775808 50400 0 GMT-14} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT-2 b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT-2 new file mode 100644 index 00000000..f9dea165 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT-2 @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Etc/GMT-2) { + {-9223372036854775808 7200 0 GMT-2} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT-3 b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT-3 new file mode 100644 index 00000000..99145b81 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT-3 @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Etc/GMT-3) { + {-9223372036854775808 10800 0 GMT-3} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT-4 b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT-4 new file mode 100644 index 00000000..27b4fec0 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT-4 @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Etc/GMT-4) { + {-9223372036854775808 14400 0 GMT-4} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT-5 b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT-5 new file mode 100644 index 00000000..dbe3df72 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT-5 @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Etc/GMT-5) { + {-9223372036854775808 18000 0 GMT-5} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT-6 b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT-6 new file mode 100644 index 00000000..414dbfaf --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT-6 @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Etc/GMT-6) { + {-9223372036854775808 21600 0 GMT-6} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT-7 b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT-7 new file mode 100644 index 00000000..2bd59db3 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT-7 @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Etc/GMT-7) { + {-9223372036854775808 25200 0 GMT-7} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT-8 b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT-8 new file mode 100644 index 00000000..7303721e --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT-8 @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Etc/GMT-8) { + {-9223372036854775808 28800 0 GMT-8} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT-9 b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT-9 new file mode 100644 index 00000000..46e6878e --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT-9 @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Etc/GMT-9) { + {-9223372036854775808 32400 0 GMT-9} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT0 b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT0 new file mode 100644 index 00000000..dba1fe9f --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/GMT0 @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Etc/GMT)]} { + LoadTimeZoneFile Etc/GMT +} +set TZData(:Etc/GMT0) $TZData(:Etc/GMT) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/Greenwich b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/Greenwich new file mode 100644 index 00000000..53acea06 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/Greenwich @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Etc/GMT)]} { + LoadTimeZoneFile Etc/GMT +} +set TZData(:Etc/Greenwich) $TZData(:Etc/GMT) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/UCT b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/UCT new file mode 100644 index 00000000..f7d795e0 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/UCT @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Etc/UCT) { + {-9223372036854775808 0 0 UCT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/UTC b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/UTC new file mode 100644 index 00000000..db5954bd --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/UTC @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Etc/UTC) { + {-9223372036854775808 0 0 UTC} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/Universal b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/Universal new file mode 100644 index 00000000..a3b75478 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/Universal @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Etc/UTC)]} { + LoadTimeZoneFile Etc/UTC +} +set TZData(:Etc/Universal) $TZData(:Etc/UTC) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/Zulu b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/Zulu new file mode 100644 index 00000000..f643db98 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Etc/Zulu @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Etc/UTC)]} { + LoadTimeZoneFile Etc/UTC +} +set TZData(:Etc/Zulu) $TZData(:Etc/UTC) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Amsterdam b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Amsterdam new file mode 100644 index 00000000..bd89127a --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Amsterdam @@ -0,0 +1,310 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Amsterdam) { + {-9223372036854775808 1172 0 LMT} + {-4260212372 1172 0 AMT} + {-1693700372 4772 1 NST} + {-1680484772 1172 0 AMT} + {-1663453172 4772 1 NST} + {-1650147572 1172 0 AMT} + {-1633213172 4772 1 NST} + {-1617488372 1172 0 AMT} + {-1601158772 4772 1 NST} + {-1586038772 1172 0 AMT} + {-1569709172 4772 1 NST} + {-1554589172 1172 0 AMT} + {-1538259572 4772 1 NST} + {-1523139572 1172 0 AMT} + {-1507501172 4772 1 NST} + {-1490566772 1172 0 AMT} + {-1470176372 4772 1 NST} + {-1459117172 1172 0 AMT} + {-1443997172 4772 1 NST} + {-1427667572 1172 0 AMT} + {-1406672372 4772 1 NST} + {-1396217972 1172 0 AMT} + {-1376950772 4772 1 NST} + {-1364768372 1172 0 AMT} + {-1345414772 4772 1 NST} + {-1333318772 1172 0 AMT} + {-1313792372 4772 1 NST} + {-1301264372 1172 0 AMT} + {-1282256372 4772 1 NST} + {-1269814772 1172 0 AMT} + {-1250720372 4772 1 NST} + {-1238365172 1172 0 AMT} + {-1219184372 4772 1 NST} + {-1206915572 1172 0 AMT} + {-1186957172 4772 1 NST} + {-1175465972 1172 0 AMT} + {-1156025972 4772 1 NST} + {-1143411572 1172 0 AMT} + {-1124489972 4772 1 NST} + {-1111961972 1172 0 AMT} + {-1092953972 4772 1 NST} + {-1080512372 1172 0 AMT} + {-1061331572 4772 1 NST} + {-1049062772 1172 0 AMT} + {-1029190772 4772 1 NST} + {-1025741972 4800 0 NEST} + {-1017613200 1200 0 NET} + {-998259600 4800 1 NEST} + {-986163600 1200 0 NET} + {-966723600 4800 1 NEST} + {-954109200 1200 0 NET} + {-935022000 7200 0 CEST} + {-857257200 3600 0 CET} + {-844556400 7200 1 CEST} + {-828226800 3600 0 CET} + {-812502000 7200 1 CEST} + {-796777200 3600 0 CET} + {-781052400 7200 0 CEST} + {-766623600 3600 0 CET} + {220921200 3600 0 CET} + {228877200 7200 1 CEST} + {243997200 3600 0 CET} + {260326800 7200 1 CEST} + {276051600 3600 0 CET} + {291776400 7200 1 CEST} + {307501200 3600 0 CET} + {323830800 7200 1 CEST} + {338950800 3600 0 CET} + {354675600 7200 1 CEST} + {370400400 3600 0 CET} + {386125200 7200 1 CEST} + {401850000 3600 0 CET} + {417574800 7200 1 CEST} + {433299600 3600 0 CET} + {449024400 7200 1 CEST} + {465354000 3600 0 CET} + {481078800 7200 1 CEST} + {496803600 3600 0 CET} + {512528400 7200 1 CEST} + {528253200 3600 0 CET} + {543978000 7200 1 CEST} + {559702800 3600 0 CET} + {575427600 7200 1 CEST} + {591152400 3600 0 CET} + {606877200 7200 1 CEST} + {622602000 3600 0 CET} + {638326800 7200 1 CEST} + {654656400 3600 0 CET} + {670381200 7200 1 CEST} + {686106000 3600 0 CET} + {701830800 7200 1 CEST} + {717555600 3600 0 CET} + {733280400 7200 1 CEST} + {749005200 3600 0 CET} + {764730000 7200 1 CEST} + {780454800 3600 0 CET} + {796179600 7200 1 CEST} + {811904400 3600 0 CET} + {828234000 7200 1 CEST} + {846378000 3600 0 CET} + {859683600 7200 1 CEST} + {877827600 3600 0 CET} + {891133200 7200 1 CEST} + {909277200 3600 0 CET} + {922582800 7200 1 CEST} + {941331600 3600 0 CET} + {954032400 7200 1 CEST} + {972781200 3600 0 CET} + {985482000 7200 1 CEST} + {1004230800 3600 0 CET} + {1017536400 7200 1 CEST} + {1035680400 3600 0 CET} + {1048986000 7200 1 CEST} + {1067130000 3600 0 CET} + {1080435600 7200 1 CEST} + {1099184400 3600 0 CET} + {1111885200 7200 1 CEST} + {1130634000 3600 0 CET} + {1143334800 7200 1 CEST} + {1162083600 3600 0 CET} + {1174784400 7200 1 CEST} + {1193533200 3600 0 CET} + {1206838800 7200 1 CEST} + {1224982800 3600 0 CET} + {1238288400 7200 1 CEST} + {1256432400 3600 0 CET} + {1269738000 7200 1 CEST} + {1288486800 3600 0 CET} + {1301187600 7200 1 CEST} + {1319936400 3600 0 CET} + {1332637200 7200 1 CEST} + {1351386000 3600 0 CET} + {1364691600 7200 1 CEST} + {1382835600 3600 0 CET} + {1396141200 7200 1 CEST} + {1414285200 3600 0 CET} + {1427590800 7200 1 CEST} + {1445734800 3600 0 CET} + {1459040400 7200 1 CEST} + {1477789200 3600 0 CET} + {1490490000 7200 1 CEST} + {1509238800 3600 0 CET} + {1521939600 7200 1 CEST} + {1540688400 3600 0 CET} + {1553994000 7200 1 CEST} + {1572138000 3600 0 CET} + {1585443600 7200 1 CEST} + {1603587600 3600 0 CET} + {1616893200 7200 1 CEST} + {1635642000 3600 0 CET} + {1648342800 7200 1 CEST} + {1667091600 3600 0 CET} + {1679792400 7200 1 CEST} + {1698541200 3600 0 CET} + {1711846800 7200 1 CEST} + {1729990800 3600 0 CET} + {1743296400 7200 1 CEST} + {1761440400 3600 0 CET} + {1774746000 7200 1 CEST} + {1792890000 3600 0 CET} + {1806195600 7200 1 CEST} + {1824944400 3600 0 CET} + {1837645200 7200 1 CEST} + {1856394000 3600 0 CET} + {1869094800 7200 1 CEST} + {1887843600 3600 0 CET} + {1901149200 7200 1 CEST} + {1919293200 3600 0 CET} + {1932598800 7200 1 CEST} + {1950742800 3600 0 CET} + {1964048400 7200 1 CEST} + {1982797200 3600 0 CET} + {1995498000 7200 1 CEST} + {2014246800 3600 0 CET} + {2026947600 7200 1 CEST} + {2045696400 3600 0 CET} + {2058397200 7200 1 CEST} + {2077146000 3600 0 CET} + {2090451600 7200 1 CEST} + {2108595600 3600 0 CET} + {2121901200 7200 1 CEST} + {2140045200 3600 0 CET} + {2153350800 7200 1 CEST} + {2172099600 3600 0 CET} + {2184800400 7200 1 CEST} + {2203549200 3600 0 CET} + {2216250000 7200 1 CEST} + {2234998800 3600 0 CET} + {2248304400 7200 1 CEST} + {2266448400 3600 0 CET} + {2279754000 7200 1 CEST} + {2297898000 3600 0 CET} + {2311203600 7200 1 CEST} + {2329347600 3600 0 CET} + {2342653200 7200 1 CEST} + {2361402000 3600 0 CET} + {2374102800 7200 1 CEST} + {2392851600 3600 0 CET} + {2405552400 7200 1 CEST} + {2424301200 3600 0 CET} + {2437606800 7200 1 CEST} + {2455750800 3600 0 CET} + {2469056400 7200 1 CEST} + {2487200400 3600 0 CET} + {2500506000 7200 1 CEST} + {2519254800 3600 0 CET} + {2531955600 7200 1 CEST} + {2550704400 3600 0 CET} + {2563405200 7200 1 CEST} + {2582154000 3600 0 CET} + {2595459600 7200 1 CEST} + {2613603600 3600 0 CET} + {2626909200 7200 1 CEST} + {2645053200 3600 0 CET} + {2658358800 7200 1 CEST} + {2676502800 3600 0 CET} + {2689808400 7200 1 CEST} + {2708557200 3600 0 CET} + {2721258000 7200 1 CEST} + {2740006800 3600 0 CET} + {2752707600 7200 1 CEST} + {2771456400 3600 0 CET} + {2784762000 7200 1 CEST} + {2802906000 3600 0 CET} + {2816211600 7200 1 CEST} + {2834355600 3600 0 CET} + {2847661200 7200 1 CEST} + {2866410000 3600 0 CET} + {2879110800 7200 1 CEST} + {2897859600 3600 0 CET} + {2910560400 7200 1 CEST} + {2929309200 3600 0 CET} + {2942010000 7200 1 CEST} + {2960758800 3600 0 CET} + {2974064400 7200 1 CEST} + {2992208400 3600 0 CET} + {3005514000 7200 1 CEST} + {3023658000 3600 0 CET} + {3036963600 7200 1 CEST} + {3055712400 3600 0 CET} + {3068413200 7200 1 CEST} + {3087162000 3600 0 CET} + {3099862800 7200 1 CEST} + {3118611600 3600 0 CET} + {3131917200 7200 1 CEST} + {3150061200 3600 0 CET} + {3163366800 7200 1 CEST} + {3181510800 3600 0 CET} + {3194816400 7200 1 CEST} + {3212960400 3600 0 CET} + {3226266000 7200 1 CEST} + {3245014800 3600 0 CET} + {3257715600 7200 1 CEST} + {3276464400 3600 0 CET} + {3289165200 7200 1 CEST} + {3307914000 3600 0 CET} + {3321219600 7200 1 CEST} + {3339363600 3600 0 CET} + {3352669200 7200 1 CEST} + {3370813200 3600 0 CET} + {3384118800 7200 1 CEST} + {3402867600 3600 0 CET} + {3415568400 7200 1 CEST} + {3434317200 3600 0 CET} + {3447018000 7200 1 CEST} + {3465766800 3600 0 CET} + {3479072400 7200 1 CEST} + {3497216400 3600 0 CET} + {3510522000 7200 1 CEST} + {3528666000 3600 0 CET} + {3541971600 7200 1 CEST} + {3560115600 3600 0 CET} + {3573421200 7200 1 CEST} + {3592170000 3600 0 CET} + {3604870800 7200 1 CEST} + {3623619600 3600 0 CET} + {3636320400 7200 1 CEST} + {3655069200 3600 0 CET} + {3668374800 7200 1 CEST} + {3686518800 3600 0 CET} + {3699824400 7200 1 CEST} + {3717968400 3600 0 CET} + {3731274000 7200 1 CEST} + {3750022800 3600 0 CET} + {3762723600 7200 1 CEST} + {3781472400 3600 0 CET} + {3794173200 7200 1 CEST} + {3812922000 3600 0 CET} + {3825622800 7200 1 CEST} + {3844371600 3600 0 CET} + {3857677200 7200 1 CEST} + {3875821200 3600 0 CET} + {3889126800 7200 1 CEST} + {3907270800 3600 0 CET} + {3920576400 7200 1 CEST} + {3939325200 3600 0 CET} + {3952026000 7200 1 CEST} + {3970774800 3600 0 CET} + {3983475600 7200 1 CEST} + {4002224400 3600 0 CET} + {4015530000 7200 1 CEST} + {4033674000 3600 0 CET} + {4046979600 7200 1 CEST} + {4065123600 3600 0 CET} + {4078429200 7200 1 CEST} + {4096573200 3600 0 CET} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Andorra b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Andorra new file mode 100644 index 00000000..89233fe0 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Andorra @@ -0,0 +1,237 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Andorra) { + {-9223372036854775808 364 0 LMT} + {-2177453164 0 0 WET} + {-733881600 3600 0 CET} + {481078800 7200 0 CEST} + {496803600 3600 0 CET} + {512528400 7200 1 CEST} + {528253200 3600 0 CET} + {543978000 7200 1 CEST} + {559702800 3600 0 CET} + {575427600 7200 1 CEST} + {591152400 3600 0 CET} + {606877200 7200 1 CEST} + {622602000 3600 0 CET} + {638326800 7200 1 CEST} + {654656400 3600 0 CET} + {670381200 7200 1 CEST} + {686106000 3600 0 CET} + {701830800 7200 1 CEST} + {717555600 3600 0 CET} + {733280400 7200 1 CEST} + {749005200 3600 0 CET} + {764730000 7200 1 CEST} + {780454800 3600 0 CET} + {796179600 7200 1 CEST} + {811904400 3600 0 CET} + {828234000 7200 1 CEST} + {846378000 3600 0 CET} + {859683600 7200 1 CEST} + {877827600 3600 0 CET} + {891133200 7200 1 CEST} + {909277200 3600 0 CET} + {922582800 7200 1 CEST} + {941331600 3600 0 CET} + {954032400 7200 1 CEST} + {972781200 3600 0 CET} + {985482000 7200 1 CEST} + {1004230800 3600 0 CET} + {1017536400 7200 1 CEST} + {1035680400 3600 0 CET} + {1048986000 7200 1 CEST} + {1067130000 3600 0 CET} + {1080435600 7200 1 CEST} + {1099184400 3600 0 CET} + {1111885200 7200 1 CEST} + {1130634000 3600 0 CET} + {1143334800 7200 1 CEST} + {1162083600 3600 0 CET} + {1174784400 7200 1 CEST} + {1193533200 3600 0 CET} + {1206838800 7200 1 CEST} + {1224982800 3600 0 CET} + {1238288400 7200 1 CEST} + {1256432400 3600 0 CET} + {1269738000 7200 1 CEST} + {1288486800 3600 0 CET} + {1301187600 7200 1 CEST} + {1319936400 3600 0 CET} + {1332637200 7200 1 CEST} + {1351386000 3600 0 CET} + {1364691600 7200 1 CEST} + {1382835600 3600 0 CET} + {1396141200 7200 1 CEST} + {1414285200 3600 0 CET} + {1427590800 7200 1 CEST} + {1445734800 3600 0 CET} + {1459040400 7200 1 CEST} + {1477789200 3600 0 CET} + {1490490000 7200 1 CEST} + {1509238800 3600 0 CET} + {1521939600 7200 1 CEST} + {1540688400 3600 0 CET} + {1553994000 7200 1 CEST} + {1572138000 3600 0 CET} + {1585443600 7200 1 CEST} + {1603587600 3600 0 CET} + {1616893200 7200 1 CEST} + {1635642000 3600 0 CET} + {1648342800 7200 1 CEST} + {1667091600 3600 0 CET} + {1679792400 7200 1 CEST} + {1698541200 3600 0 CET} + {1711846800 7200 1 CEST} + {1729990800 3600 0 CET} + {1743296400 7200 1 CEST} + {1761440400 3600 0 CET} + {1774746000 7200 1 CEST} + {1792890000 3600 0 CET} + {1806195600 7200 1 CEST} + {1824944400 3600 0 CET} + {1837645200 7200 1 CEST} + {1856394000 3600 0 CET} + {1869094800 7200 1 CEST} + {1887843600 3600 0 CET} + {1901149200 7200 1 CEST} + {1919293200 3600 0 CET} + {1932598800 7200 1 CEST} + {1950742800 3600 0 CET} + {1964048400 7200 1 CEST} + {1982797200 3600 0 CET} + {1995498000 7200 1 CEST} + {2014246800 3600 0 CET} + {2026947600 7200 1 CEST} + {2045696400 3600 0 CET} + {2058397200 7200 1 CEST} + {2077146000 3600 0 CET} + {2090451600 7200 1 CEST} + {2108595600 3600 0 CET} + {2121901200 7200 1 CEST} + {2140045200 3600 0 CET} + {2153350800 7200 1 CEST} + {2172099600 3600 0 CET} + {2184800400 7200 1 CEST} + {2203549200 3600 0 CET} + {2216250000 7200 1 CEST} + {2234998800 3600 0 CET} + {2248304400 7200 1 CEST} + {2266448400 3600 0 CET} + {2279754000 7200 1 CEST} + {2297898000 3600 0 CET} + {2311203600 7200 1 CEST} + {2329347600 3600 0 CET} + {2342653200 7200 1 CEST} + {2361402000 3600 0 CET} + {2374102800 7200 1 CEST} + {2392851600 3600 0 CET} + {2405552400 7200 1 CEST} + {2424301200 3600 0 CET} + {2437606800 7200 1 CEST} + {2455750800 3600 0 CET} + {2469056400 7200 1 CEST} + {2487200400 3600 0 CET} + {2500506000 7200 1 CEST} + {2519254800 3600 0 CET} + {2531955600 7200 1 CEST} + {2550704400 3600 0 CET} + {2563405200 7200 1 CEST} + {2582154000 3600 0 CET} + {2595459600 7200 1 CEST} + {2613603600 3600 0 CET} + {2626909200 7200 1 CEST} + {2645053200 3600 0 CET} + {2658358800 7200 1 CEST} + {2676502800 3600 0 CET} + {2689808400 7200 1 CEST} + {2708557200 3600 0 CET} + {2721258000 7200 1 CEST} + {2740006800 3600 0 CET} + {2752707600 7200 1 CEST} + {2771456400 3600 0 CET} + {2784762000 7200 1 CEST} + {2802906000 3600 0 CET} + {2816211600 7200 1 CEST} + {2834355600 3600 0 CET} + {2847661200 7200 1 CEST} + {2866410000 3600 0 CET} + {2879110800 7200 1 CEST} + {2897859600 3600 0 CET} + {2910560400 7200 1 CEST} + {2929309200 3600 0 CET} + {2942010000 7200 1 CEST} + {2960758800 3600 0 CET} + {2974064400 7200 1 CEST} + {2992208400 3600 0 CET} + {3005514000 7200 1 CEST} + {3023658000 3600 0 CET} + {3036963600 7200 1 CEST} + {3055712400 3600 0 CET} + {3068413200 7200 1 CEST} + {3087162000 3600 0 CET} + {3099862800 7200 1 CEST} + {3118611600 3600 0 CET} + {3131917200 7200 1 CEST} + {3150061200 3600 0 CET} + {3163366800 7200 1 CEST} + {3181510800 3600 0 CET} + {3194816400 7200 1 CEST} + {3212960400 3600 0 CET} + {3226266000 7200 1 CEST} + {3245014800 3600 0 CET} + {3257715600 7200 1 CEST} + {3276464400 3600 0 CET} + {3289165200 7200 1 CEST} + {3307914000 3600 0 CET} + {3321219600 7200 1 CEST} + {3339363600 3600 0 CET} + {3352669200 7200 1 CEST} + {3370813200 3600 0 CET} + {3384118800 7200 1 CEST} + {3402867600 3600 0 CET} + {3415568400 7200 1 CEST} + {3434317200 3600 0 CET} + {3447018000 7200 1 CEST} + {3465766800 3600 0 CET} + {3479072400 7200 1 CEST} + {3497216400 3600 0 CET} + {3510522000 7200 1 CEST} + {3528666000 3600 0 CET} + {3541971600 7200 1 CEST} + {3560115600 3600 0 CET} + {3573421200 7200 1 CEST} + {3592170000 3600 0 CET} + {3604870800 7200 1 CEST} + {3623619600 3600 0 CET} + {3636320400 7200 1 CEST} + {3655069200 3600 0 CET} + {3668374800 7200 1 CEST} + {3686518800 3600 0 CET} + {3699824400 7200 1 CEST} + {3717968400 3600 0 CET} + {3731274000 7200 1 CEST} + {3750022800 3600 0 CET} + {3762723600 7200 1 CEST} + {3781472400 3600 0 CET} + {3794173200 7200 1 CEST} + {3812922000 3600 0 CET} + {3825622800 7200 1 CEST} + {3844371600 3600 0 CET} + {3857677200 7200 1 CEST} + {3875821200 3600 0 CET} + {3889126800 7200 1 CEST} + {3907270800 3600 0 CET} + {3920576400 7200 1 CEST} + {3939325200 3600 0 CET} + {3952026000 7200 1 CEST} + {3970774800 3600 0 CET} + {3983475600 7200 1 CEST} + {4002224400 3600 0 CET} + {4015530000 7200 1 CEST} + {4033674000 3600 0 CET} + {4046979600 7200 1 CEST} + {4065123600 3600 0 CET} + {4078429200 7200 1 CEST} + {4096573200 3600 0 CET} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Athens b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Athens new file mode 100644 index 00000000..f8df408d --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Athens @@ -0,0 +1,268 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Athens) { + {-9223372036854775808 5692 0 LMT} + {-2344642492 5692 0 AMT} + {-1686101632 7200 0 EET} + {-1182996000 10800 1 EEST} + {-1178161200 7200 0 EET} + {-906861600 10800 1 EEST} + {-904878000 7200 0 CEST} + {-857257200 3600 0 CET} + {-844477200 7200 1 CEST} + {-828237600 3600 0 CET} + {-812422800 7200 0 EET} + {-552362400 10800 1 EEST} + {-541652400 7200 0 EET} + {166485600 10800 1 EEST} + {186184800 7200 0 EET} + {198028800 10800 1 EEST} + {213753600 7200 0 EET} + {228873600 10800 1 EEST} + {244080000 7200 0 EET} + {260323200 10800 1 EEST} + {275446800 7200 0 EET} + {291798000 10800 1 EEST} + {307407600 7200 0 EET} + {323388000 10800 1 EEST} + {338936400 7200 0 EET} + {347148000 7200 0 EET} + {354675600 10800 1 EEST} + {370400400 7200 0 EET} + {386125200 10800 1 EEST} + {401850000 7200 0 EET} + {417574800 10800 1 EEST} + {433299600 7200 0 EET} + {449024400 10800 1 EEST} + {465354000 7200 0 EET} + {481078800 10800 1 EEST} + {496803600 7200 0 EET} + {512528400 10800 1 EEST} + {528253200 7200 0 EET} + {543978000 10800 1 EEST} + {559702800 7200 0 EET} + {575427600 10800 1 EEST} + {591152400 7200 0 EET} + {606877200 10800 1 EEST} + {622602000 7200 0 EET} + {638326800 10800 1 EEST} + {654656400 7200 0 EET} + {670381200 10800 1 EEST} + {686106000 7200 0 EET} + {701830800 10800 1 EEST} + {717555600 7200 0 EET} + {733280400 10800 1 EEST} + {749005200 7200 0 EET} + {764730000 10800 1 EEST} + {780454800 7200 0 EET} + {796179600 10800 1 EEST} + {811904400 7200 0 EET} + {828234000 10800 1 EEST} + {846378000 7200 0 EET} + {859683600 10800 1 EEST} + {877827600 7200 0 EET} + {891133200 10800 1 EEST} + {909277200 7200 0 EET} + {922582800 10800 1 EEST} + {941331600 7200 0 EET} + {954032400 10800 1 EEST} + {972781200 7200 0 EET} + {985482000 10800 1 EEST} + {1004230800 7200 0 EET} + {1017536400 10800 1 EEST} + {1035680400 7200 0 EET} + {1048986000 10800 1 EEST} + {1067130000 7200 0 EET} + {1080435600 10800 1 EEST} + {1099184400 7200 0 EET} + {1111885200 10800 1 EEST} + {1130634000 7200 0 EET} + {1143334800 10800 1 EEST} + {1162083600 7200 0 EET} + {1174784400 10800 1 EEST} + {1193533200 7200 0 EET} + {1206838800 10800 1 EEST} + {1224982800 7200 0 EET} + {1238288400 10800 1 EEST} + {1256432400 7200 0 EET} + {1269738000 10800 1 EEST} + {1288486800 7200 0 EET} + {1301187600 10800 1 EEST} + {1319936400 7200 0 EET} + {1332637200 10800 1 EEST} + {1351386000 7200 0 EET} + {1364691600 10800 1 EEST} + {1382835600 7200 0 EET} + {1396141200 10800 1 EEST} + {1414285200 7200 0 EET} + {1427590800 10800 1 EEST} + {1445734800 7200 0 EET} + {1459040400 10800 1 EEST} + {1477789200 7200 0 EET} + {1490490000 10800 1 EEST} + {1509238800 7200 0 EET} + {1521939600 10800 1 EEST} + {1540688400 7200 0 EET} + {1553994000 10800 1 EEST} + {1572138000 7200 0 EET} + {1585443600 10800 1 EEST} + {1603587600 7200 0 EET} + {1616893200 10800 1 EEST} + {1635642000 7200 0 EET} + {1648342800 10800 1 EEST} + {1667091600 7200 0 EET} + {1679792400 10800 1 EEST} + {1698541200 7200 0 EET} + {1711846800 10800 1 EEST} + {1729990800 7200 0 EET} + {1743296400 10800 1 EEST} + {1761440400 7200 0 EET} + {1774746000 10800 1 EEST} + {1792890000 7200 0 EET} + {1806195600 10800 1 EEST} + {1824944400 7200 0 EET} + {1837645200 10800 1 EEST} + {1856394000 7200 0 EET} + {1869094800 10800 1 EEST} + {1887843600 7200 0 EET} + {1901149200 10800 1 EEST} + {1919293200 7200 0 EET} + {1932598800 10800 1 EEST} + {1950742800 7200 0 EET} + {1964048400 10800 1 EEST} + {1982797200 7200 0 EET} + {1995498000 10800 1 EEST} + {2014246800 7200 0 EET} + {2026947600 10800 1 EEST} + {2045696400 7200 0 EET} + {2058397200 10800 1 EEST} + {2077146000 7200 0 EET} + {2090451600 10800 1 EEST} + {2108595600 7200 0 EET} + {2121901200 10800 1 EEST} + {2140045200 7200 0 EET} + {2153350800 10800 1 EEST} + {2172099600 7200 0 EET} + {2184800400 10800 1 EEST} + {2203549200 7200 0 EET} + {2216250000 10800 1 EEST} + {2234998800 7200 0 EET} + {2248304400 10800 1 EEST} + {2266448400 7200 0 EET} + {2279754000 10800 1 EEST} + {2297898000 7200 0 EET} + {2311203600 10800 1 EEST} + {2329347600 7200 0 EET} + {2342653200 10800 1 EEST} + {2361402000 7200 0 EET} + {2374102800 10800 1 EEST} + {2392851600 7200 0 EET} + {2405552400 10800 1 EEST} + {2424301200 7200 0 EET} + {2437606800 10800 1 EEST} + {2455750800 7200 0 EET} + {2469056400 10800 1 EEST} + {2487200400 7200 0 EET} + {2500506000 10800 1 EEST} + {2519254800 7200 0 EET} + {2531955600 10800 1 EEST} + {2550704400 7200 0 EET} + {2563405200 10800 1 EEST} + {2582154000 7200 0 EET} + {2595459600 10800 1 EEST} + {2613603600 7200 0 EET} + {2626909200 10800 1 EEST} + {2645053200 7200 0 EET} + {2658358800 10800 1 EEST} + {2676502800 7200 0 EET} + {2689808400 10800 1 EEST} + {2708557200 7200 0 EET} + {2721258000 10800 1 EEST} + {2740006800 7200 0 EET} + {2752707600 10800 1 EEST} + {2771456400 7200 0 EET} + {2784762000 10800 1 EEST} + {2802906000 7200 0 EET} + {2816211600 10800 1 EEST} + {2834355600 7200 0 EET} + {2847661200 10800 1 EEST} + {2866410000 7200 0 EET} + {2879110800 10800 1 EEST} + {2897859600 7200 0 EET} + {2910560400 10800 1 EEST} + {2929309200 7200 0 EET} + {2942010000 10800 1 EEST} + {2960758800 7200 0 EET} + {2974064400 10800 1 EEST} + {2992208400 7200 0 EET} + {3005514000 10800 1 EEST} + {3023658000 7200 0 EET} + {3036963600 10800 1 EEST} + {3055712400 7200 0 EET} + {3068413200 10800 1 EEST} + {3087162000 7200 0 EET} + {3099862800 10800 1 EEST} + {3118611600 7200 0 EET} + {3131917200 10800 1 EEST} + {3150061200 7200 0 EET} + {3163366800 10800 1 EEST} + {3181510800 7200 0 EET} + {3194816400 10800 1 EEST} + {3212960400 7200 0 EET} + {3226266000 10800 1 EEST} + {3245014800 7200 0 EET} + {3257715600 10800 1 EEST} + {3276464400 7200 0 EET} + {3289165200 10800 1 EEST} + {3307914000 7200 0 EET} + {3321219600 10800 1 EEST} + {3339363600 7200 0 EET} + {3352669200 10800 1 EEST} + {3370813200 7200 0 EET} + {3384118800 10800 1 EEST} + {3402867600 7200 0 EET} + {3415568400 10800 1 EEST} + {3434317200 7200 0 EET} + {3447018000 10800 1 EEST} + {3465766800 7200 0 EET} + {3479072400 10800 1 EEST} + {3497216400 7200 0 EET} + {3510522000 10800 1 EEST} + {3528666000 7200 0 EET} + {3541971600 10800 1 EEST} + {3560115600 7200 0 EET} + {3573421200 10800 1 EEST} + {3592170000 7200 0 EET} + {3604870800 10800 1 EEST} + {3623619600 7200 0 EET} + {3636320400 10800 1 EEST} + {3655069200 7200 0 EET} + {3668374800 10800 1 EEST} + {3686518800 7200 0 EET} + {3699824400 10800 1 EEST} + {3717968400 7200 0 EET} + {3731274000 10800 1 EEST} + {3750022800 7200 0 EET} + {3762723600 10800 1 EEST} + {3781472400 7200 0 EET} + {3794173200 10800 1 EEST} + {3812922000 7200 0 EET} + {3825622800 10800 1 EEST} + {3844371600 7200 0 EET} + {3857677200 10800 1 EEST} + {3875821200 7200 0 EET} + {3889126800 10800 1 EEST} + {3907270800 7200 0 EET} + {3920576400 10800 1 EEST} + {3939325200 7200 0 EET} + {3952026000 10800 1 EEST} + {3970774800 7200 0 EET} + {3983475600 10800 1 EEST} + {4002224400 7200 0 EET} + {4015530000 10800 1 EEST} + {4033674000 7200 0 EET} + {4046979600 10800 1 EEST} + {4065123600 7200 0 EET} + {4078429200 10800 1 EEST} + {4096573200 7200 0 EET} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Belfast b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Belfast new file mode 100644 index 00000000..51cd3ce4 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Belfast @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Europe/London)]} { + LoadTimeZoneFile Europe/London +} +set TZData(:Europe/Belfast) $TZData(:Europe/London) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Belgrade b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Belgrade new file mode 100644 index 00000000..b11f7b33 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Belgrade @@ -0,0 +1,250 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Belgrade) { + {-9223372036854775808 4920 0 LMT} + {-2713915320 3600 0 CET} + {-905824800 3600 0 CET} + {-857257200 3600 0 CET} + {-844556400 7200 1 CEST} + {-828226800 3600 0 CET} + {-812502000 7200 1 CEST} + {-796777200 3600 0 CET} + {-788922000 3600 0 CET} + {-777942000 7200 1 CEST} + {-766623600 3600 0 CET} + {407199600 3600 0 CET} + {417574800 7200 1 CEST} + {433299600 3600 0 CET} + {449024400 7200 1 CEST} + {465354000 3600 0 CET} + {481078800 7200 1 CEST} + {496803600 3600 0 CET} + {512528400 7200 1 CEST} + {528253200 3600 0 CET} + {543978000 7200 1 CEST} + {559702800 3600 0 CET} + {575427600 7200 1 CEST} + {591152400 3600 0 CET} + {606877200 7200 1 CEST} + {622602000 3600 0 CET} + {638326800 7200 1 CEST} + {654656400 3600 0 CET} + {670381200 7200 1 CEST} + {686106000 3600 0 CET} + {701830800 7200 1 CEST} + {717555600 3600 0 CET} + {733280400 7200 1 CEST} + {749005200 3600 0 CET} + {764730000 7200 1 CEST} + {780454800 3600 0 CET} + {796179600 7200 1 CEST} + {811904400 3600 0 CET} + {828234000 7200 1 CEST} + {846378000 3600 0 CET} + {859683600 7200 1 CEST} + {877827600 3600 0 CET} + {891133200 7200 1 CEST} + {909277200 3600 0 CET} + {922582800 7200 1 CEST} + {941331600 3600 0 CET} + {954032400 7200 1 CEST} + {972781200 3600 0 CET} + {985482000 7200 1 CEST} + {1004230800 3600 0 CET} + {1017536400 7200 1 CEST} + {1035680400 3600 0 CET} + {1048986000 7200 1 CEST} + {1067130000 3600 0 CET} + {1080435600 7200 1 CEST} + {1099184400 3600 0 CET} + {1111885200 7200 1 CEST} + {1130634000 3600 0 CET} + {1143334800 7200 1 CEST} + {1162083600 3600 0 CET} + {1174784400 7200 1 CEST} + {1193533200 3600 0 CET} + {1206838800 7200 1 CEST} + {1224982800 3600 0 CET} + {1238288400 7200 1 CEST} + {1256432400 3600 0 CET} + {1269738000 7200 1 CEST} + {1288486800 3600 0 CET} + {1301187600 7200 1 CEST} + {1319936400 3600 0 CET} + {1332637200 7200 1 CEST} + {1351386000 3600 0 CET} + {1364691600 7200 1 CEST} + {1382835600 3600 0 CET} + {1396141200 7200 1 CEST} + {1414285200 3600 0 CET} + {1427590800 7200 1 CEST} + {1445734800 3600 0 CET} + {1459040400 7200 1 CEST} + {1477789200 3600 0 CET} + {1490490000 7200 1 CEST} + {1509238800 3600 0 CET} + {1521939600 7200 1 CEST} + {1540688400 3600 0 CET} + {1553994000 7200 1 CEST} + {1572138000 3600 0 CET} + {1585443600 7200 1 CEST} + {1603587600 3600 0 CET} + {1616893200 7200 1 CEST} + {1635642000 3600 0 CET} + {1648342800 7200 1 CEST} + {1667091600 3600 0 CET} + {1679792400 7200 1 CEST} + {1698541200 3600 0 CET} + {1711846800 7200 1 CEST} + {1729990800 3600 0 CET} + {1743296400 7200 1 CEST} + {1761440400 3600 0 CET} + {1774746000 7200 1 CEST} + {1792890000 3600 0 CET} + {1806195600 7200 1 CEST} + {1824944400 3600 0 CET} + {1837645200 7200 1 CEST} + {1856394000 3600 0 CET} + {1869094800 7200 1 CEST} + {1887843600 3600 0 CET} + {1901149200 7200 1 CEST} + {1919293200 3600 0 CET} + {1932598800 7200 1 CEST} + {1950742800 3600 0 CET} + {1964048400 7200 1 CEST} + {1982797200 3600 0 CET} + {1995498000 7200 1 CEST} + {2014246800 3600 0 CET} + {2026947600 7200 1 CEST} + {2045696400 3600 0 CET} + {2058397200 7200 1 CEST} + {2077146000 3600 0 CET} + {2090451600 7200 1 CEST} + {2108595600 3600 0 CET} + {2121901200 7200 1 CEST} + {2140045200 3600 0 CET} + {2153350800 7200 1 CEST} + {2172099600 3600 0 CET} + {2184800400 7200 1 CEST} + {2203549200 3600 0 CET} + {2216250000 7200 1 CEST} + {2234998800 3600 0 CET} + {2248304400 7200 1 CEST} + {2266448400 3600 0 CET} + {2279754000 7200 1 CEST} + {2297898000 3600 0 CET} + {2311203600 7200 1 CEST} + {2329347600 3600 0 CET} + {2342653200 7200 1 CEST} + {2361402000 3600 0 CET} + {2374102800 7200 1 CEST} + {2392851600 3600 0 CET} + {2405552400 7200 1 CEST} + {2424301200 3600 0 CET} + {2437606800 7200 1 CEST} + {2455750800 3600 0 CET} + {2469056400 7200 1 CEST} + {2487200400 3600 0 CET} + {2500506000 7200 1 CEST} + {2519254800 3600 0 CET} + {2531955600 7200 1 CEST} + {2550704400 3600 0 CET} + {2563405200 7200 1 CEST} + {2582154000 3600 0 CET} + {2595459600 7200 1 CEST} + {2613603600 3600 0 CET} + {2626909200 7200 1 CEST} + {2645053200 3600 0 CET} + {2658358800 7200 1 CEST} + {2676502800 3600 0 CET} + {2689808400 7200 1 CEST} + {2708557200 3600 0 CET} + {2721258000 7200 1 CEST} + {2740006800 3600 0 CET} + {2752707600 7200 1 CEST} + {2771456400 3600 0 CET} + {2784762000 7200 1 CEST} + {2802906000 3600 0 CET} + {2816211600 7200 1 CEST} + {2834355600 3600 0 CET} + {2847661200 7200 1 CEST} + {2866410000 3600 0 CET} + {2879110800 7200 1 CEST} + {2897859600 3600 0 CET} + {2910560400 7200 1 CEST} + {2929309200 3600 0 CET} + {2942010000 7200 1 CEST} + {2960758800 3600 0 CET} + {2974064400 7200 1 CEST} + {2992208400 3600 0 CET} + {3005514000 7200 1 CEST} + {3023658000 3600 0 CET} + {3036963600 7200 1 CEST} + {3055712400 3600 0 CET} + {3068413200 7200 1 CEST} + {3087162000 3600 0 CET} + {3099862800 7200 1 CEST} + {3118611600 3600 0 CET} + {3131917200 7200 1 CEST} + {3150061200 3600 0 CET} + {3163366800 7200 1 CEST} + {3181510800 3600 0 CET} + {3194816400 7200 1 CEST} + {3212960400 3600 0 CET} + {3226266000 7200 1 CEST} + {3245014800 3600 0 CET} + {3257715600 7200 1 CEST} + {3276464400 3600 0 CET} + {3289165200 7200 1 CEST} + {3307914000 3600 0 CET} + {3321219600 7200 1 CEST} + {3339363600 3600 0 CET} + {3352669200 7200 1 CEST} + {3370813200 3600 0 CET} + {3384118800 7200 1 CEST} + {3402867600 3600 0 CET} + {3415568400 7200 1 CEST} + {3434317200 3600 0 CET} + {3447018000 7200 1 CEST} + {3465766800 3600 0 CET} + {3479072400 7200 1 CEST} + {3497216400 3600 0 CET} + {3510522000 7200 1 CEST} + {3528666000 3600 0 CET} + {3541971600 7200 1 CEST} + {3560115600 3600 0 CET} + {3573421200 7200 1 CEST} + {3592170000 3600 0 CET} + {3604870800 7200 1 CEST} + {3623619600 3600 0 CET} + {3636320400 7200 1 CEST} + {3655069200 3600 0 CET} + {3668374800 7200 1 CEST} + {3686518800 3600 0 CET} + {3699824400 7200 1 CEST} + {3717968400 3600 0 CET} + {3731274000 7200 1 CEST} + {3750022800 3600 0 CET} + {3762723600 7200 1 CEST} + {3781472400 3600 0 CET} + {3794173200 7200 1 CEST} + {3812922000 3600 0 CET} + {3825622800 7200 1 CEST} + {3844371600 3600 0 CET} + {3857677200 7200 1 CEST} + {3875821200 3600 0 CET} + {3889126800 7200 1 CEST} + {3907270800 3600 0 CET} + {3920576400 7200 1 CEST} + {3939325200 3600 0 CET} + {3952026000 7200 1 CEST} + {3970774800 3600 0 CET} + {3983475600 7200 1 CEST} + {4002224400 3600 0 CET} + {4015530000 7200 1 CEST} + {4033674000 3600 0 CET} + {4046979600 7200 1 CEST} + {4065123600 3600 0 CET} + {4078429200 7200 1 CEST} + {4096573200 3600 0 CET} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Berlin b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Berlin new file mode 100644 index 00000000..5469cf62 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Berlin @@ -0,0 +1,274 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Berlin) { + {-9223372036854775808 3208 0 LMT} + {-2422054408 3600 0 CET} + {-1693706400 7200 1 CEST} + {-1680483600 3600 0 CET} + {-1663455600 7200 1 CEST} + {-1650150000 3600 0 CET} + {-1632006000 7200 1 CEST} + {-1618700400 3600 0 CET} + {-938905200 7200 1 CEST} + {-857257200 3600 0 CET} + {-844556400 7200 1 CEST} + {-828226800 3600 0 CET} + {-812502000 7200 1 CEST} + {-796777200 3600 0 CET} + {-781052400 7200 1 CEST} + {-776559600 10800 0 CEMT} + {-765936000 7200 1 CEST} + {-761180400 3600 0 CET} + {-757386000 3600 0 CET} + {-748479600 7200 1 CEST} + {-733273200 3600 0 CET} + {-717631200 7200 1 CEST} + {-714610800 10800 1 CEMT} + {-710380800 7200 1 CEST} + {-701910000 3600 0 CET} + {-684975600 7200 1 CEST} + {-670460400 3600 0 CET} + {-654130800 7200 1 CEST} + {-639010800 3600 0 CET} + {315529200 3600 0 CET} + {323830800 7200 1 CEST} + {338950800 3600 0 CET} + {354675600 7200 1 CEST} + {370400400 3600 0 CET} + {386125200 7200 1 CEST} + {401850000 3600 0 CET} + {417574800 7200 1 CEST} + {433299600 3600 0 CET} + {449024400 7200 1 CEST} + {465354000 3600 0 CET} + {481078800 7200 1 CEST} + {496803600 3600 0 CET} + {512528400 7200 1 CEST} + {528253200 3600 0 CET} + {543978000 7200 1 CEST} + {559702800 3600 0 CET} + {575427600 7200 1 CEST} + {591152400 3600 0 CET} + {606877200 7200 1 CEST} + {622602000 3600 0 CET} + {638326800 7200 1 CEST} + {654656400 3600 0 CET} + {670381200 7200 1 CEST} + {686106000 3600 0 CET} + {701830800 7200 1 CEST} + {717555600 3600 0 CET} + {733280400 7200 1 CEST} + {749005200 3600 0 CET} + {764730000 7200 1 CEST} + {780454800 3600 0 CET} + {796179600 7200 1 CEST} + {811904400 3600 0 CET} + {828234000 7200 1 CEST} + {846378000 3600 0 CET} + {859683600 7200 1 CEST} + {877827600 3600 0 CET} + {891133200 7200 1 CEST} + {909277200 3600 0 CET} + {922582800 7200 1 CEST} + {941331600 3600 0 CET} + {954032400 7200 1 CEST} + {972781200 3600 0 CET} + {985482000 7200 1 CEST} + {1004230800 3600 0 CET} + {1017536400 7200 1 CEST} + {1035680400 3600 0 CET} + {1048986000 7200 1 CEST} + {1067130000 3600 0 CET} + {1080435600 7200 1 CEST} + {1099184400 3600 0 CET} + {1111885200 7200 1 CEST} + {1130634000 3600 0 CET} + {1143334800 7200 1 CEST} + {1162083600 3600 0 CET} + {1174784400 7200 1 CEST} + {1193533200 3600 0 CET} + {1206838800 7200 1 CEST} + {1224982800 3600 0 CET} + {1238288400 7200 1 CEST} + {1256432400 3600 0 CET} + {1269738000 7200 1 CEST} + {1288486800 3600 0 CET} + {1301187600 7200 1 CEST} + {1319936400 3600 0 CET} + {1332637200 7200 1 CEST} + {1351386000 3600 0 CET} + {1364691600 7200 1 CEST} + {1382835600 3600 0 CET} + {1396141200 7200 1 CEST} + {1414285200 3600 0 CET} + {1427590800 7200 1 CEST} + {1445734800 3600 0 CET} + {1459040400 7200 1 CEST} + {1477789200 3600 0 CET} + {1490490000 7200 1 CEST} + {1509238800 3600 0 CET} + {1521939600 7200 1 CEST} + {1540688400 3600 0 CET} + {1553994000 7200 1 CEST} + {1572138000 3600 0 CET} + {1585443600 7200 1 CEST} + {1603587600 3600 0 CET} + {1616893200 7200 1 CEST} + {1635642000 3600 0 CET} + {1648342800 7200 1 CEST} + {1667091600 3600 0 CET} + {1679792400 7200 1 CEST} + {1698541200 3600 0 CET} + {1711846800 7200 1 CEST} + {1729990800 3600 0 CET} + {1743296400 7200 1 CEST} + {1761440400 3600 0 CET} + {1774746000 7200 1 CEST} + {1792890000 3600 0 CET} + {1806195600 7200 1 CEST} + {1824944400 3600 0 CET} + {1837645200 7200 1 CEST} + {1856394000 3600 0 CET} + {1869094800 7200 1 CEST} + {1887843600 3600 0 CET} + {1901149200 7200 1 CEST} + {1919293200 3600 0 CET} + {1932598800 7200 1 CEST} + {1950742800 3600 0 CET} + {1964048400 7200 1 CEST} + {1982797200 3600 0 CET} + {1995498000 7200 1 CEST} + {2014246800 3600 0 CET} + {2026947600 7200 1 CEST} + {2045696400 3600 0 CET} + {2058397200 7200 1 CEST} + {2077146000 3600 0 CET} + {2090451600 7200 1 CEST} + {2108595600 3600 0 CET} + {2121901200 7200 1 CEST} + {2140045200 3600 0 CET} + {2153350800 7200 1 CEST} + {2172099600 3600 0 CET} + {2184800400 7200 1 CEST} + {2203549200 3600 0 CET} + {2216250000 7200 1 CEST} + {2234998800 3600 0 CET} + {2248304400 7200 1 CEST} + {2266448400 3600 0 CET} + {2279754000 7200 1 CEST} + {2297898000 3600 0 CET} + {2311203600 7200 1 CEST} + {2329347600 3600 0 CET} + {2342653200 7200 1 CEST} + {2361402000 3600 0 CET} + {2374102800 7200 1 CEST} + {2392851600 3600 0 CET} + {2405552400 7200 1 CEST} + {2424301200 3600 0 CET} + {2437606800 7200 1 CEST} + {2455750800 3600 0 CET} + {2469056400 7200 1 CEST} + {2487200400 3600 0 CET} + {2500506000 7200 1 CEST} + {2519254800 3600 0 CET} + {2531955600 7200 1 CEST} + {2550704400 3600 0 CET} + {2563405200 7200 1 CEST} + {2582154000 3600 0 CET} + {2595459600 7200 1 CEST} + {2613603600 3600 0 CET} + {2626909200 7200 1 CEST} + {2645053200 3600 0 CET} + {2658358800 7200 1 CEST} + {2676502800 3600 0 CET} + {2689808400 7200 1 CEST} + {2708557200 3600 0 CET} + {2721258000 7200 1 CEST} + {2740006800 3600 0 CET} + {2752707600 7200 1 CEST} + {2771456400 3600 0 CET} + {2784762000 7200 1 CEST} + {2802906000 3600 0 CET} + {2816211600 7200 1 CEST} + {2834355600 3600 0 CET} + {2847661200 7200 1 CEST} + {2866410000 3600 0 CET} + {2879110800 7200 1 CEST} + {2897859600 3600 0 CET} + {2910560400 7200 1 CEST} + {2929309200 3600 0 CET} + {2942010000 7200 1 CEST} + {2960758800 3600 0 CET} + {2974064400 7200 1 CEST} + {2992208400 3600 0 CET} + {3005514000 7200 1 CEST} + {3023658000 3600 0 CET} + {3036963600 7200 1 CEST} + {3055712400 3600 0 CET} + {3068413200 7200 1 CEST} + {3087162000 3600 0 CET} + {3099862800 7200 1 CEST} + {3118611600 3600 0 CET} + {3131917200 7200 1 CEST} + {3150061200 3600 0 CET} + {3163366800 7200 1 CEST} + {3181510800 3600 0 CET} + {3194816400 7200 1 CEST} + {3212960400 3600 0 CET} + {3226266000 7200 1 CEST} + {3245014800 3600 0 CET} + {3257715600 7200 1 CEST} + {3276464400 3600 0 CET} + {3289165200 7200 1 CEST} + {3307914000 3600 0 CET} + {3321219600 7200 1 CEST} + {3339363600 3600 0 CET} + {3352669200 7200 1 CEST} + {3370813200 3600 0 CET} + {3384118800 7200 1 CEST} + {3402867600 3600 0 CET} + {3415568400 7200 1 CEST} + {3434317200 3600 0 CET} + {3447018000 7200 1 CEST} + {3465766800 3600 0 CET} + {3479072400 7200 1 CEST} + {3497216400 3600 0 CET} + {3510522000 7200 1 CEST} + {3528666000 3600 0 CET} + {3541971600 7200 1 CEST} + {3560115600 3600 0 CET} + {3573421200 7200 1 CEST} + {3592170000 3600 0 CET} + {3604870800 7200 1 CEST} + {3623619600 3600 0 CET} + {3636320400 7200 1 CEST} + {3655069200 3600 0 CET} + {3668374800 7200 1 CEST} + {3686518800 3600 0 CET} + {3699824400 7200 1 CEST} + {3717968400 3600 0 CET} + {3731274000 7200 1 CEST} + {3750022800 3600 0 CET} + {3762723600 7200 1 CEST} + {3781472400 3600 0 CET} + {3794173200 7200 1 CEST} + {3812922000 3600 0 CET} + {3825622800 7200 1 CEST} + {3844371600 3600 0 CET} + {3857677200 7200 1 CEST} + {3875821200 3600 0 CET} + {3889126800 7200 1 CEST} + {3907270800 3600 0 CET} + {3920576400 7200 1 CEST} + {3939325200 3600 0 CET} + {3952026000 7200 1 CEST} + {3970774800 3600 0 CET} + {3983475600 7200 1 CEST} + {4002224400 3600 0 CET} + {4015530000 7200 1 CEST} + {4033674000 3600 0 CET} + {4046979600 7200 1 CEST} + {4065123600 3600 0 CET} + {4078429200 7200 1 CEST} + {4096573200 3600 0 CET} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Bratislava b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Bratislava new file mode 100644 index 00000000..d65ea5a6 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Bratislava @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Europe/Prague)]} { + LoadTimeZoneFile Europe/Prague +} +set TZData(:Europe/Bratislava) $TZData(:Europe/Prague) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Brussels b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Brussels new file mode 100644 index 00000000..3cb9b14c --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Brussels @@ -0,0 +1,316 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Brussels) { + {-9223372036854775808 1050 0 LMT} + {-2840141850 1050 0 BMT} + {-2450953050 0 0 WET} + {-1740355200 3600 0 CET} + {-1693702800 7200 0 CEST} + {-1680483600 3600 0 CET} + {-1663455600 7200 1 CEST} + {-1650150000 3600 0 CET} + {-1632006000 7200 1 CEST} + {-1618700400 3600 0 CET} + {-1613826000 0 0 WET} + {-1604278800 3600 1 WEST} + {-1585530000 0 0 WET} + {-1574038800 3600 1 WEST} + {-1552266000 0 0 WET} + {-1539997200 3600 1 WEST} + {-1520557200 0 0 WET} + {-1507510800 3600 1 WEST} + {-1490576400 0 0 WET} + {-1473642000 3600 1 WEST} + {-1459126800 0 0 WET} + {-1444006800 3600 1 WEST} + {-1427677200 0 0 WET} + {-1411952400 3600 1 WEST} + {-1396227600 0 0 WET} + {-1379293200 3600 1 WEST} + {-1364778000 0 0 WET} + {-1348448400 3600 1 WEST} + {-1333328400 0 0 WET} + {-1316394000 3600 1 WEST} + {-1301263200 0 0 WET} + {-1284328800 3600 1 WEST} + {-1269813600 0 0 WET} + {-1253484000 3600 1 WEST} + {-1238364000 0 0 WET} + {-1221429600 3600 1 WEST} + {-1206914400 0 0 WET} + {-1191189600 3600 1 WEST} + {-1175464800 0 0 WET} + {-1160344800 3600 1 WEST} + {-1143410400 0 0 WET} + {-1127685600 3600 1 WEST} + {-1111960800 0 0 WET} + {-1096840800 3600 1 WEST} + {-1080511200 0 0 WET} + {-1063576800 3600 1 WEST} + {-1049061600 0 0 WET} + {-1033336800 3600 1 WEST} + {-1017612000 0 0 WET} + {-1002492000 3600 1 WEST} + {-986162400 0 0 WET} + {-969228000 3600 1 WEST} + {-950479200 0 0 WET} + {-942012000 3600 1 WEST} + {-934668000 7200 0 CEST} + {-857257200 3600 0 CET} + {-844556400 7200 1 CEST} + {-828226800 3600 0 CET} + {-812502000 7200 1 CEST} + {-799290000 3600 0 CET} + {-798073200 3600 0 CET} + {-781052400 7200 1 CEST} + {-766623600 3600 0 CET} + {-745455600 7200 1 CEST} + {-733273200 3600 0 CET} + {220921200 3600 0 CET} + {228877200 7200 1 CEST} + {243997200 3600 0 CET} + {260326800 7200 1 CEST} + {276051600 3600 0 CET} + {291776400 7200 1 CEST} + {307501200 3600 0 CET} + {323830800 7200 1 CEST} + {338950800 3600 0 CET} + {354675600 7200 1 CEST} + {370400400 3600 0 CET} + {386125200 7200 1 CEST} + {401850000 3600 0 CET} + {417574800 7200 1 CEST} + {433299600 3600 0 CET} + {449024400 7200 1 CEST} + {465354000 3600 0 CET} + {481078800 7200 1 CEST} + {496803600 3600 0 CET} + {512528400 7200 1 CEST} + {528253200 3600 0 CET} + {543978000 7200 1 CEST} + {559702800 3600 0 CET} + {575427600 7200 1 CEST} + {591152400 3600 0 CET} + {606877200 7200 1 CEST} + {622602000 3600 0 CET} + {638326800 7200 1 CEST} + {654656400 3600 0 CET} + {670381200 7200 1 CEST} + {686106000 3600 0 CET} + {701830800 7200 1 CEST} + {717555600 3600 0 CET} + {733280400 7200 1 CEST} + {749005200 3600 0 CET} + {764730000 7200 1 CEST} + {780454800 3600 0 CET} + {796179600 7200 1 CEST} + {811904400 3600 0 CET} + {828234000 7200 1 CEST} + {846378000 3600 0 CET} + {859683600 7200 1 CEST} + {877827600 3600 0 CET} + {891133200 7200 1 CEST} + {909277200 3600 0 CET} + {922582800 7200 1 CEST} + {941331600 3600 0 CET} + {954032400 7200 1 CEST} + {972781200 3600 0 CET} + {985482000 7200 1 CEST} + {1004230800 3600 0 CET} + {1017536400 7200 1 CEST} + {1035680400 3600 0 CET} + {1048986000 7200 1 CEST} + {1067130000 3600 0 CET} + {1080435600 7200 1 CEST} + {1099184400 3600 0 CET} + {1111885200 7200 1 CEST} + {1130634000 3600 0 CET} + {1143334800 7200 1 CEST} + {1162083600 3600 0 CET} + {1174784400 7200 1 CEST} + {1193533200 3600 0 CET} + {1206838800 7200 1 CEST} + {1224982800 3600 0 CET} + {1238288400 7200 1 CEST} + {1256432400 3600 0 CET} + {1269738000 7200 1 CEST} + {1288486800 3600 0 CET} + {1301187600 7200 1 CEST} + {1319936400 3600 0 CET} + {1332637200 7200 1 CEST} + {1351386000 3600 0 CET} + {1364691600 7200 1 CEST} + {1382835600 3600 0 CET} + {1396141200 7200 1 CEST} + {1414285200 3600 0 CET} + {1427590800 7200 1 CEST} + {1445734800 3600 0 CET} + {1459040400 7200 1 CEST} + {1477789200 3600 0 CET} + {1490490000 7200 1 CEST} + {1509238800 3600 0 CET} + {1521939600 7200 1 CEST} + {1540688400 3600 0 CET} + {1553994000 7200 1 CEST} + {1572138000 3600 0 CET} + {1585443600 7200 1 CEST} + {1603587600 3600 0 CET} + {1616893200 7200 1 CEST} + {1635642000 3600 0 CET} + {1648342800 7200 1 CEST} + {1667091600 3600 0 CET} + {1679792400 7200 1 CEST} + {1698541200 3600 0 CET} + {1711846800 7200 1 CEST} + {1729990800 3600 0 CET} + {1743296400 7200 1 CEST} + {1761440400 3600 0 CET} + {1774746000 7200 1 CEST} + {1792890000 3600 0 CET} + {1806195600 7200 1 CEST} + {1824944400 3600 0 CET} + {1837645200 7200 1 CEST} + {1856394000 3600 0 CET} + {1869094800 7200 1 CEST} + {1887843600 3600 0 CET} + {1901149200 7200 1 CEST} + {1919293200 3600 0 CET} + {1932598800 7200 1 CEST} + {1950742800 3600 0 CET} + {1964048400 7200 1 CEST} + {1982797200 3600 0 CET} + {1995498000 7200 1 CEST} + {2014246800 3600 0 CET} + {2026947600 7200 1 CEST} + {2045696400 3600 0 CET} + {2058397200 7200 1 CEST} + {2077146000 3600 0 CET} + {2090451600 7200 1 CEST} + {2108595600 3600 0 CET} + {2121901200 7200 1 CEST} + {2140045200 3600 0 CET} + {2153350800 7200 1 CEST} + {2172099600 3600 0 CET} + {2184800400 7200 1 CEST} + {2203549200 3600 0 CET} + {2216250000 7200 1 CEST} + {2234998800 3600 0 CET} + {2248304400 7200 1 CEST} + {2266448400 3600 0 CET} + {2279754000 7200 1 CEST} + {2297898000 3600 0 CET} + {2311203600 7200 1 CEST} + {2329347600 3600 0 CET} + {2342653200 7200 1 CEST} + {2361402000 3600 0 CET} + {2374102800 7200 1 CEST} + {2392851600 3600 0 CET} + {2405552400 7200 1 CEST} + {2424301200 3600 0 CET} + {2437606800 7200 1 CEST} + {2455750800 3600 0 CET} + {2469056400 7200 1 CEST} + {2487200400 3600 0 CET} + {2500506000 7200 1 CEST} + {2519254800 3600 0 CET} + {2531955600 7200 1 CEST} + {2550704400 3600 0 CET} + {2563405200 7200 1 CEST} + {2582154000 3600 0 CET} + {2595459600 7200 1 CEST} + {2613603600 3600 0 CET} + {2626909200 7200 1 CEST} + {2645053200 3600 0 CET} + {2658358800 7200 1 CEST} + {2676502800 3600 0 CET} + {2689808400 7200 1 CEST} + {2708557200 3600 0 CET} + {2721258000 7200 1 CEST} + {2740006800 3600 0 CET} + {2752707600 7200 1 CEST} + {2771456400 3600 0 CET} + {2784762000 7200 1 CEST} + {2802906000 3600 0 CET} + {2816211600 7200 1 CEST} + {2834355600 3600 0 CET} + {2847661200 7200 1 CEST} + {2866410000 3600 0 CET} + {2879110800 7200 1 CEST} + {2897859600 3600 0 CET} + {2910560400 7200 1 CEST} + {2929309200 3600 0 CET} + {2942010000 7200 1 CEST} + {2960758800 3600 0 CET} + {2974064400 7200 1 CEST} + {2992208400 3600 0 CET} + {3005514000 7200 1 CEST} + {3023658000 3600 0 CET} + {3036963600 7200 1 CEST} + {3055712400 3600 0 CET} + {3068413200 7200 1 CEST} + {3087162000 3600 0 CET} + {3099862800 7200 1 CEST} + {3118611600 3600 0 CET} + {3131917200 7200 1 CEST} + {3150061200 3600 0 CET} + {3163366800 7200 1 CEST} + {3181510800 3600 0 CET} + {3194816400 7200 1 CEST} + {3212960400 3600 0 CET} + {3226266000 7200 1 CEST} + {3245014800 3600 0 CET} + {3257715600 7200 1 CEST} + {3276464400 3600 0 CET} + {3289165200 7200 1 CEST} + {3307914000 3600 0 CET} + {3321219600 7200 1 CEST} + {3339363600 3600 0 CET} + {3352669200 7200 1 CEST} + {3370813200 3600 0 CET} + {3384118800 7200 1 CEST} + {3402867600 3600 0 CET} + {3415568400 7200 1 CEST} + {3434317200 3600 0 CET} + {3447018000 7200 1 CEST} + {3465766800 3600 0 CET} + {3479072400 7200 1 CEST} + {3497216400 3600 0 CET} + {3510522000 7200 1 CEST} + {3528666000 3600 0 CET} + {3541971600 7200 1 CEST} + {3560115600 3600 0 CET} + {3573421200 7200 1 CEST} + {3592170000 3600 0 CET} + {3604870800 7200 1 CEST} + {3623619600 3600 0 CET} + {3636320400 7200 1 CEST} + {3655069200 3600 0 CET} + {3668374800 7200 1 CEST} + {3686518800 3600 0 CET} + {3699824400 7200 1 CEST} + {3717968400 3600 0 CET} + {3731274000 7200 1 CEST} + {3750022800 3600 0 CET} + {3762723600 7200 1 CEST} + {3781472400 3600 0 CET} + {3794173200 7200 1 CEST} + {3812922000 3600 0 CET} + {3825622800 7200 1 CEST} + {3844371600 3600 0 CET} + {3857677200 7200 1 CEST} + {3875821200 3600 0 CET} + {3889126800 7200 1 CEST} + {3907270800 3600 0 CET} + {3920576400 7200 1 CEST} + {3939325200 3600 0 CET} + {3952026000 7200 1 CEST} + {3970774800 3600 0 CET} + {3983475600 7200 1 CEST} + {4002224400 3600 0 CET} + {4015530000 7200 1 CEST} + {4033674000 3600 0 CET} + {4046979600 7200 1 CEST} + {4065123600 3600 0 CET} + {4078429200 7200 1 CEST} + {4096573200 3600 0 CET} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Bucharest b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Bucharest new file mode 100644 index 00000000..7b3bed44 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Bucharest @@ -0,0 +1,268 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Bucharest) { + {-9223372036854775808 6264 0 LMT} + {-2469404664 6264 0 BMT} + {-1213148664 7200 0 EET} + {-1187056800 10800 1 EEST} + {-1175479200 7200 0 EET} + {-1159754400 10800 1 EEST} + {-1144029600 7200 0 EET} + {-1127700000 10800 1 EEST} + {-1111975200 7200 0 EET} + {-1096250400 10800 1 EEST} + {-1080525600 7200 0 EET} + {-1064800800 10800 1 EEST} + {-1049076000 7200 0 EET} + {-1033351200 10800 1 EEST} + {-1017626400 7200 0 EET} + {-1001901600 10800 1 EEST} + {-986176800 7200 0 EET} + {-970452000 10800 1 EEST} + {-954727200 7200 0 EET} + {296604000 10800 1 EEST} + {307486800 7200 0 EET} + {323816400 10800 1 EEST} + {338940000 7200 0 EET} + {354672000 10800 0 EEST} + {370396800 7200 0 EET} + {386121600 10800 1 EEST} + {401846400 7200 0 EET} + {417571200 10800 1 EEST} + {433296000 7200 0 EET} + {449020800 10800 1 EEST} + {465350400 7200 0 EET} + {481075200 10800 1 EEST} + {496800000 7200 0 EET} + {512524800 10800 1 EEST} + {528249600 7200 0 EET} + {543974400 10800 1 EEST} + {559699200 7200 0 EET} + {575424000 10800 1 EEST} + {591148800 7200 0 EET} + {606873600 10800 1 EEST} + {622598400 7200 0 EET} + {638323200 10800 1 EEST} + {654652800 7200 0 EET} + {662680800 7200 0 EET} + {670370400 10800 1 EEST} + {686095200 7200 0 EET} + {701820000 10800 1 EEST} + {717544800 7200 0 EET} + {733269600 10800 1 EEST} + {748994400 7200 0 EET} + {757375200 7200 0 EET} + {764719200 10800 1 EEST} + {780440400 7200 0 EET} + {796168800 10800 1 EEST} + {811890000 7200 0 EET} + {828223200 10800 1 EEST} + {846363600 7200 0 EET} + {852069600 7200 0 EET} + {859683600 10800 1 EEST} + {877827600 7200 0 EET} + {891133200 10800 1 EEST} + {909277200 7200 0 EET} + {922582800 10800 1 EEST} + {941331600 7200 0 EET} + {954032400 10800 1 EEST} + {972781200 7200 0 EET} + {985482000 10800 1 EEST} + {1004230800 7200 0 EET} + {1017536400 10800 1 EEST} + {1035680400 7200 0 EET} + {1048986000 10800 1 EEST} + {1067130000 7200 0 EET} + {1080435600 10800 1 EEST} + {1099184400 7200 0 EET} + {1111885200 10800 1 EEST} + {1130634000 7200 0 EET} + {1143334800 10800 1 EEST} + {1162083600 7200 0 EET} + {1174784400 10800 1 EEST} + {1193533200 7200 0 EET} + {1206838800 10800 1 EEST} + {1224982800 7200 0 EET} + {1238288400 10800 1 EEST} + {1256432400 7200 0 EET} + {1269738000 10800 1 EEST} + {1288486800 7200 0 EET} + {1301187600 10800 1 EEST} + {1319936400 7200 0 EET} + {1332637200 10800 1 EEST} + {1351386000 7200 0 EET} + {1364691600 10800 1 EEST} + {1382835600 7200 0 EET} + {1396141200 10800 1 EEST} + {1414285200 7200 0 EET} + {1427590800 10800 1 EEST} + {1445734800 7200 0 EET} + {1459040400 10800 1 EEST} + {1477789200 7200 0 EET} + {1490490000 10800 1 EEST} + {1509238800 7200 0 EET} + {1521939600 10800 1 EEST} + {1540688400 7200 0 EET} + {1553994000 10800 1 EEST} + {1572138000 7200 0 EET} + {1585443600 10800 1 EEST} + {1603587600 7200 0 EET} + {1616893200 10800 1 EEST} + {1635642000 7200 0 EET} + {1648342800 10800 1 EEST} + {1667091600 7200 0 EET} + {1679792400 10800 1 EEST} + {1698541200 7200 0 EET} + {1711846800 10800 1 EEST} + {1729990800 7200 0 EET} + {1743296400 10800 1 EEST} + {1761440400 7200 0 EET} + {1774746000 10800 1 EEST} + {1792890000 7200 0 EET} + {1806195600 10800 1 EEST} + {1824944400 7200 0 EET} + {1837645200 10800 1 EEST} + {1856394000 7200 0 EET} + {1869094800 10800 1 EEST} + {1887843600 7200 0 EET} + {1901149200 10800 1 EEST} + {1919293200 7200 0 EET} + {1932598800 10800 1 EEST} + {1950742800 7200 0 EET} + {1964048400 10800 1 EEST} + {1982797200 7200 0 EET} + {1995498000 10800 1 EEST} + {2014246800 7200 0 EET} + {2026947600 10800 1 EEST} + {2045696400 7200 0 EET} + {2058397200 10800 1 EEST} + {2077146000 7200 0 EET} + {2090451600 10800 1 EEST} + {2108595600 7200 0 EET} + {2121901200 10800 1 EEST} + {2140045200 7200 0 EET} + {2153350800 10800 1 EEST} + {2172099600 7200 0 EET} + {2184800400 10800 1 EEST} + {2203549200 7200 0 EET} + {2216250000 10800 1 EEST} + {2234998800 7200 0 EET} + {2248304400 10800 1 EEST} + {2266448400 7200 0 EET} + {2279754000 10800 1 EEST} + {2297898000 7200 0 EET} + {2311203600 10800 1 EEST} + {2329347600 7200 0 EET} + {2342653200 10800 1 EEST} + {2361402000 7200 0 EET} + {2374102800 10800 1 EEST} + {2392851600 7200 0 EET} + {2405552400 10800 1 EEST} + {2424301200 7200 0 EET} + {2437606800 10800 1 EEST} + {2455750800 7200 0 EET} + {2469056400 10800 1 EEST} + {2487200400 7200 0 EET} + {2500506000 10800 1 EEST} + {2519254800 7200 0 EET} + {2531955600 10800 1 EEST} + {2550704400 7200 0 EET} + {2563405200 10800 1 EEST} + {2582154000 7200 0 EET} + {2595459600 10800 1 EEST} + {2613603600 7200 0 EET} + {2626909200 10800 1 EEST} + {2645053200 7200 0 EET} + {2658358800 10800 1 EEST} + {2676502800 7200 0 EET} + {2689808400 10800 1 EEST} + {2708557200 7200 0 EET} + {2721258000 10800 1 EEST} + {2740006800 7200 0 EET} + {2752707600 10800 1 EEST} + {2771456400 7200 0 EET} + {2784762000 10800 1 EEST} + {2802906000 7200 0 EET} + {2816211600 10800 1 EEST} + {2834355600 7200 0 EET} + {2847661200 10800 1 EEST} + {2866410000 7200 0 EET} + {2879110800 10800 1 EEST} + {2897859600 7200 0 EET} + {2910560400 10800 1 EEST} + {2929309200 7200 0 EET} + {2942010000 10800 1 EEST} + {2960758800 7200 0 EET} + {2974064400 10800 1 EEST} + {2992208400 7200 0 EET} + {3005514000 10800 1 EEST} + {3023658000 7200 0 EET} + {3036963600 10800 1 EEST} + {3055712400 7200 0 EET} + {3068413200 10800 1 EEST} + {3087162000 7200 0 EET} + {3099862800 10800 1 EEST} + {3118611600 7200 0 EET} + {3131917200 10800 1 EEST} + {3150061200 7200 0 EET} + {3163366800 10800 1 EEST} + {3181510800 7200 0 EET} + {3194816400 10800 1 EEST} + {3212960400 7200 0 EET} + {3226266000 10800 1 EEST} + {3245014800 7200 0 EET} + {3257715600 10800 1 EEST} + {3276464400 7200 0 EET} + {3289165200 10800 1 EEST} + {3307914000 7200 0 EET} + {3321219600 10800 1 EEST} + {3339363600 7200 0 EET} + {3352669200 10800 1 EEST} + {3370813200 7200 0 EET} + {3384118800 10800 1 EEST} + {3402867600 7200 0 EET} + {3415568400 10800 1 EEST} + {3434317200 7200 0 EET} + {3447018000 10800 1 EEST} + {3465766800 7200 0 EET} + {3479072400 10800 1 EEST} + {3497216400 7200 0 EET} + {3510522000 10800 1 EEST} + {3528666000 7200 0 EET} + {3541971600 10800 1 EEST} + {3560115600 7200 0 EET} + {3573421200 10800 1 EEST} + {3592170000 7200 0 EET} + {3604870800 10800 1 EEST} + {3623619600 7200 0 EET} + {3636320400 10800 1 EEST} + {3655069200 7200 0 EET} + {3668374800 10800 1 EEST} + {3686518800 7200 0 EET} + {3699824400 10800 1 EEST} + {3717968400 7200 0 EET} + {3731274000 10800 1 EEST} + {3750022800 7200 0 EET} + {3762723600 10800 1 EEST} + {3781472400 7200 0 EET} + {3794173200 10800 1 EEST} + {3812922000 7200 0 EET} + {3825622800 10800 1 EEST} + {3844371600 7200 0 EET} + {3857677200 10800 1 EEST} + {3875821200 7200 0 EET} + {3889126800 10800 1 EEST} + {3907270800 7200 0 EET} + {3920576400 10800 1 EEST} + {3939325200 7200 0 EET} + {3952026000 10800 1 EEST} + {3970774800 7200 0 EET} + {3983475600 10800 1 EEST} + {4002224400 7200 0 EET} + {4015530000 10800 1 EEST} + {4033674000 7200 0 EET} + {4046979600 10800 1 EEST} + {4065123600 7200 0 EET} + {4078429200 10800 1 EEST} + {4096573200 7200 0 EET} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Budapest b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Budapest new file mode 100644 index 00000000..e660ad1d --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Budapest @@ -0,0 +1,282 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Budapest) { + {-9223372036854775808 4580 0 LMT} + {-2500938980 3600 0 CET} + {-1693706400 7200 1 CEST} + {-1680483600 3600 0 CET} + {-1663455600 7200 1 CEST} + {-1650150000 3600 0 CET} + {-1640998800 3600 0 CET} + {-1633212000 7200 1 CEST} + {-1618700400 3600 0 CET} + {-1600466400 7200 1 CEST} + {-1581202800 3600 0 CET} + {-906771600 3600 0 CET} + {-857257200 3600 0 CET} + {-844556400 7200 1 CEST} + {-828226800 3600 0 CET} + {-812502000 7200 1 CEST} + {-796777200 3600 0 CET} + {-788922000 3600 0 CET} + {-778471200 7200 1 CEST} + {-762660000 3600 0 CET} + {-749689200 7200 1 CEST} + {-733359600 3600 0 CET} + {-717634800 7200 1 CEST} + {-701910000 3600 0 CET} + {-686185200 7200 1 CEST} + {-670460400 3600 0 CET} + {-654130800 7200 1 CEST} + {-639010800 3600 0 CET} + {-621990000 7200 1 CEST} + {-605660400 3600 0 CET} + {-492656400 7200 1 CEST} + {-481168800 3600 0 CET} + {-461120400 7200 1 CEST} + {-449632800 3600 0 CET} + {-428547600 7200 1 CEST} + {-418269600 3600 0 CET} + {-397094400 7200 1 CEST} + {-386809200 3600 0 CET} + {323827200 7200 1 CEST} + {338950800 3600 0 CET} + {354675600 7200 1 CEST} + {370400400 3600 0 CET} + {386125200 7200 1 CEST} + {401850000 3600 0 CET} + {417574800 7200 1 CEST} + {433299600 3600 0 CET} + {449024400 7200 1 CEST} + {465354000 3600 0 CET} + {481078800 7200 1 CEST} + {496803600 3600 0 CET} + {512528400 7200 1 CEST} + {528253200 3600 0 CET} + {543978000 7200 1 CEST} + {559702800 3600 0 CET} + {575427600 7200 1 CEST} + {591152400 3600 0 CET} + {606877200 7200 1 CEST} + {622602000 3600 0 CET} + {638326800 7200 1 CEST} + {654656400 3600 0 CET} + {670381200 7200 1 CEST} + {686106000 3600 0 CET} + {701830800 7200 1 CEST} + {717555600 3600 0 CET} + {733280400 7200 1 CEST} + {749005200 3600 0 CET} + {764730000 7200 1 CEST} + {780454800 3600 0 CET} + {796179600 7200 1 CEST} + {811904400 3600 0 CET} + {828234000 7200 1 CEST} + {846378000 3600 0 CET} + {859683600 7200 1 CEST} + {877827600 3600 0 CET} + {891133200 7200 1 CEST} + {909277200 3600 0 CET} + {922582800 7200 1 CEST} + {941331600 3600 0 CET} + {954032400 7200 1 CEST} + {972781200 3600 0 CET} + {985482000 7200 1 CEST} + {1004230800 3600 0 CET} + {1017536400 7200 1 CEST} + {1035680400 3600 0 CET} + {1048986000 7200 1 CEST} + {1067130000 3600 0 CET} + {1080435600 7200 1 CEST} + {1099184400 3600 0 CET} + {1111885200 7200 1 CEST} + {1130634000 3600 0 CET} + {1143334800 7200 1 CEST} + {1162083600 3600 0 CET} + {1174784400 7200 1 CEST} + {1193533200 3600 0 CET} + {1206838800 7200 1 CEST} + {1224982800 3600 0 CET} + {1238288400 7200 1 CEST} + {1256432400 3600 0 CET} + {1269738000 7200 1 CEST} + {1288486800 3600 0 CET} + {1301187600 7200 1 CEST} + {1319936400 3600 0 CET} + {1332637200 7200 1 CEST} + {1351386000 3600 0 CET} + {1364691600 7200 1 CEST} + {1382835600 3600 0 CET} + {1396141200 7200 1 CEST} + {1414285200 3600 0 CET} + {1427590800 7200 1 CEST} + {1445734800 3600 0 CET} + {1459040400 7200 1 CEST} + {1477789200 3600 0 CET} + {1490490000 7200 1 CEST} + {1509238800 3600 0 CET} + {1521939600 7200 1 CEST} + {1540688400 3600 0 CET} + {1553994000 7200 1 CEST} + {1572138000 3600 0 CET} + {1585443600 7200 1 CEST} + {1603587600 3600 0 CET} + {1616893200 7200 1 CEST} + {1635642000 3600 0 CET} + {1648342800 7200 1 CEST} + {1667091600 3600 0 CET} + {1679792400 7200 1 CEST} + {1698541200 3600 0 CET} + {1711846800 7200 1 CEST} + {1729990800 3600 0 CET} + {1743296400 7200 1 CEST} + {1761440400 3600 0 CET} + {1774746000 7200 1 CEST} + {1792890000 3600 0 CET} + {1806195600 7200 1 CEST} + {1824944400 3600 0 CET} + {1837645200 7200 1 CEST} + {1856394000 3600 0 CET} + {1869094800 7200 1 CEST} + {1887843600 3600 0 CET} + {1901149200 7200 1 CEST} + {1919293200 3600 0 CET} + {1932598800 7200 1 CEST} + {1950742800 3600 0 CET} + {1964048400 7200 1 CEST} + {1982797200 3600 0 CET} + {1995498000 7200 1 CEST} + {2014246800 3600 0 CET} + {2026947600 7200 1 CEST} + {2045696400 3600 0 CET} + {2058397200 7200 1 CEST} + {2077146000 3600 0 CET} + {2090451600 7200 1 CEST} + {2108595600 3600 0 CET} + {2121901200 7200 1 CEST} + {2140045200 3600 0 CET} + {2153350800 7200 1 CEST} + {2172099600 3600 0 CET} + {2184800400 7200 1 CEST} + {2203549200 3600 0 CET} + {2216250000 7200 1 CEST} + {2234998800 3600 0 CET} + {2248304400 7200 1 CEST} + {2266448400 3600 0 CET} + {2279754000 7200 1 CEST} + {2297898000 3600 0 CET} + {2311203600 7200 1 CEST} + {2329347600 3600 0 CET} + {2342653200 7200 1 CEST} + {2361402000 3600 0 CET} + {2374102800 7200 1 CEST} + {2392851600 3600 0 CET} + {2405552400 7200 1 CEST} + {2424301200 3600 0 CET} + {2437606800 7200 1 CEST} + {2455750800 3600 0 CET} + {2469056400 7200 1 CEST} + {2487200400 3600 0 CET} + {2500506000 7200 1 CEST} + {2519254800 3600 0 CET} + {2531955600 7200 1 CEST} + {2550704400 3600 0 CET} + {2563405200 7200 1 CEST} + {2582154000 3600 0 CET} + {2595459600 7200 1 CEST} + {2613603600 3600 0 CET} + {2626909200 7200 1 CEST} + {2645053200 3600 0 CET} + {2658358800 7200 1 CEST} + {2676502800 3600 0 CET} + {2689808400 7200 1 CEST} + {2708557200 3600 0 CET} + {2721258000 7200 1 CEST} + {2740006800 3600 0 CET} + {2752707600 7200 1 CEST} + {2771456400 3600 0 CET} + {2784762000 7200 1 CEST} + {2802906000 3600 0 CET} + {2816211600 7200 1 CEST} + {2834355600 3600 0 CET} + {2847661200 7200 1 CEST} + {2866410000 3600 0 CET} + {2879110800 7200 1 CEST} + {2897859600 3600 0 CET} + {2910560400 7200 1 CEST} + {2929309200 3600 0 CET} + {2942010000 7200 1 CEST} + {2960758800 3600 0 CET} + {2974064400 7200 1 CEST} + {2992208400 3600 0 CET} + {3005514000 7200 1 CEST} + {3023658000 3600 0 CET} + {3036963600 7200 1 CEST} + {3055712400 3600 0 CET} + {3068413200 7200 1 CEST} + {3087162000 3600 0 CET} + {3099862800 7200 1 CEST} + {3118611600 3600 0 CET} + {3131917200 7200 1 CEST} + {3150061200 3600 0 CET} + {3163366800 7200 1 CEST} + {3181510800 3600 0 CET} + {3194816400 7200 1 CEST} + {3212960400 3600 0 CET} + {3226266000 7200 1 CEST} + {3245014800 3600 0 CET} + {3257715600 7200 1 CEST} + {3276464400 3600 0 CET} + {3289165200 7200 1 CEST} + {3307914000 3600 0 CET} + {3321219600 7200 1 CEST} + {3339363600 3600 0 CET} + {3352669200 7200 1 CEST} + {3370813200 3600 0 CET} + {3384118800 7200 1 CEST} + {3402867600 3600 0 CET} + {3415568400 7200 1 CEST} + {3434317200 3600 0 CET} + {3447018000 7200 1 CEST} + {3465766800 3600 0 CET} + {3479072400 7200 1 CEST} + {3497216400 3600 0 CET} + {3510522000 7200 1 CEST} + {3528666000 3600 0 CET} + {3541971600 7200 1 CEST} + {3560115600 3600 0 CET} + {3573421200 7200 1 CEST} + {3592170000 3600 0 CET} + {3604870800 7200 1 CEST} + {3623619600 3600 0 CET} + {3636320400 7200 1 CEST} + {3655069200 3600 0 CET} + {3668374800 7200 1 CEST} + {3686518800 3600 0 CET} + {3699824400 7200 1 CEST} + {3717968400 3600 0 CET} + {3731274000 7200 1 CEST} + {3750022800 3600 0 CET} + {3762723600 7200 1 CEST} + {3781472400 3600 0 CET} + {3794173200 7200 1 CEST} + {3812922000 3600 0 CET} + {3825622800 7200 1 CEST} + {3844371600 3600 0 CET} + {3857677200 7200 1 CEST} + {3875821200 3600 0 CET} + {3889126800 7200 1 CEST} + {3907270800 3600 0 CET} + {3920576400 7200 1 CEST} + {3939325200 3600 0 CET} + {3952026000 7200 1 CEST} + {3970774800 3600 0 CET} + {3983475600 7200 1 CEST} + {4002224400 3600 0 CET} + {4015530000 7200 1 CEST} + {4033674000 3600 0 CET} + {4046979600 7200 1 CEST} + {4065123600 3600 0 CET} + {4078429200 7200 1 CEST} + {4096573200 3600 0 CET} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Busingen b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Busingen new file mode 100644 index 00000000..62abc29b --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Busingen @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Europe/Zurich)]} { + LoadTimeZoneFile Europe/Zurich +} +set TZData(:Europe/Busingen) $TZData(:Europe/Zurich) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Chisinau b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Chisinau new file mode 100644 index 00000000..5c240e73 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Chisinau @@ -0,0 +1,272 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Chisinau) { + {-9223372036854775808 6920 0 LMT} + {-2840147720 6900 0 CMT} + {-1637114100 6264 0 BMT} + {-1213148664 7200 0 EET} + {-1187056800 10800 1 EEST} + {-1175479200 7200 0 EET} + {-1159754400 10800 1 EEST} + {-1144029600 7200 0 EET} + {-1127700000 10800 1 EEST} + {-1111975200 7200 0 EET} + {-1096250400 10800 1 EEST} + {-1080525600 7200 0 EET} + {-1064800800 10800 1 EEST} + {-1049076000 7200 0 EET} + {-1033351200 10800 1 EEST} + {-1017626400 7200 0 EET} + {-1001901600 10800 1 EEST} + {-986176800 7200 0 EET} + {-970452000 10800 1 EEST} + {-954727200 7200 0 EET} + {-927165600 10800 1 EEST} + {-898138800 7200 0 CET} + {-857257200 3600 0 CET} + {-844556400 7200 1 CEST} + {-828226800 3600 0 CET} + {-812502000 7200 1 CEST} + {-800154000 10800 0 MSD} + {354920400 14400 1 MSD} + {370728000 10800 0 MSK} + {386456400 14400 1 MSD} + {402264000 10800 0 MSK} + {417992400 14400 1 MSD} + {433800000 10800 0 MSK} + {449614800 14400 1 MSD} + {465346800 10800 0 MSK} + {481071600 14400 1 MSD} + {496796400 10800 0 MSK} + {512521200 14400 1 MSD} + {528246000 10800 0 MSK} + {543970800 14400 1 MSD} + {559695600 10800 0 MSK} + {575420400 14400 1 MSD} + {591145200 10800 0 MSK} + {606870000 14400 1 MSD} + {622594800 10800 0 MSK} + {631141200 10800 0 MSK} + {641941200 7200 0 EET} + {662680800 7200 0 EEMMTT} + {670377600 10800 1 EEST} + {686102400 7200 0 EET} + {694216800 7200 0 EET} + {701820000 10800 1 EEST} + {717541200 7200 0 EET} + {733269600 10800 1 EEST} + {748990800 7200 0 EET} + {764719200 10800 1 EEST} + {780440400 7200 0 EET} + {796168800 10800 1 EEST} + {811890000 7200 0 EET} + {828223200 10800 1 EEST} + {846363600 7200 0 EET} + {852069600 7200 0 EET} + {859680000 10800 1 EEST} + {877824000 7200 0 EET} + {891129600 10800 1 EEST} + {909273600 7200 0 EET} + {922579200 10800 1 EEST} + {941328000 7200 0 EET} + {954028800 10800 1 EEST} + {972777600 7200 0 EET} + {985478400 10800 1 EEST} + {1004227200 7200 0 EET} + {1017532800 10800 1 EEST} + {1035676800 7200 0 EET} + {1048982400 10800 1 EEST} + {1067126400 7200 0 EET} + {1080432000 10800 1 EEST} + {1099180800 7200 0 EET} + {1111881600 10800 1 EEST} + {1130630400 7200 0 EET} + {1143331200 10800 1 EEST} + {1162080000 7200 0 EET} + {1174780800 10800 1 EEST} + {1193529600 7200 0 EET} + {1206835200 10800 1 EEST} + {1224979200 7200 0 EET} + {1238284800 10800 1 EEST} + {1256428800 7200 0 EET} + {1269734400 10800 1 EEST} + {1288483200 7200 0 EET} + {1301184000 10800 1 EEST} + {1319932800 7200 0 EET} + {1332633600 10800 1 EEST} + {1351382400 7200 0 EET} + {1364688000 10800 1 EEST} + {1382832000 7200 0 EET} + {1396137600 10800 1 EEST} + {1414281600 7200 0 EET} + {1427587200 10800 1 EEST} + {1445731200 7200 0 EET} + {1459036800 10800 1 EEST} + {1477785600 7200 0 EET} + {1490486400 10800 1 EEST} + {1509235200 7200 0 EET} + {1521936000 10800 1 EEST} + {1540684800 7200 0 EET} + {1553990400 10800 1 EEST} + {1572134400 7200 0 EET} + {1585440000 10800 1 EEST} + {1603584000 7200 0 EET} + {1616889600 10800 1 EEST} + {1635638400 7200 0 EET} + {1648339200 10800 1 EEST} + {1667088000 7200 0 EET} + {1679788800 10800 1 EEST} + {1698537600 7200 0 EET} + {1711843200 10800 1 EEST} + {1729987200 7200 0 EET} + {1743292800 10800 1 EEST} + {1761436800 7200 0 EET} + {1774742400 10800 1 EEST} + {1792886400 7200 0 EET} + {1806192000 10800 1 EEST} + {1824940800 7200 0 EET} + {1837641600 10800 1 EEST} + {1856390400 7200 0 EET} + {1869091200 10800 1 EEST} + {1887840000 7200 0 EET} + {1901145600 10800 1 EEST} + {1919289600 7200 0 EET} + {1932595200 10800 1 EEST} + {1950739200 7200 0 EET} + {1964044800 10800 1 EEST} + {1982793600 7200 0 EET} + {1995494400 10800 1 EEST} + {2014243200 7200 0 EET} + {2026944000 10800 1 EEST} + {2045692800 7200 0 EET} + {2058393600 10800 1 EEST} + {2077142400 7200 0 EET} + {2090448000 10800 1 EEST} + {2108592000 7200 0 EET} + {2121897600 10800 1 EEST} + {2140041600 7200 0 EET} + {2153347200 10800 1 EEST} + {2172096000 7200 0 EET} + {2184796800 10800 1 EEST} + {2203545600 7200 0 EET} + {2216246400 10800 1 EEST} + {2234995200 7200 0 EET} + {2248300800 10800 1 EEST} + {2266444800 7200 0 EET} + {2279750400 10800 1 EEST} + {2297894400 7200 0 EET} + {2311200000 10800 1 EEST} + {2329344000 7200 0 EET} + {2342649600 10800 1 EEST} + {2361398400 7200 0 EET} + {2374099200 10800 1 EEST} + {2392848000 7200 0 EET} + {2405548800 10800 1 EEST} + {2424297600 7200 0 EET} + {2437603200 10800 1 EEST} + {2455747200 7200 0 EET} + {2469052800 10800 1 EEST} + {2487196800 7200 0 EET} + {2500502400 10800 1 EEST} + {2519251200 7200 0 EET} + {2531952000 10800 1 EEST} + {2550700800 7200 0 EET} + {2563401600 10800 1 EEST} + {2582150400 7200 0 EET} + {2595456000 10800 1 EEST} + {2613600000 7200 0 EET} + {2626905600 10800 1 EEST} + {2645049600 7200 0 EET} + {2658355200 10800 1 EEST} + {2676499200 7200 0 EET} + {2689804800 10800 1 EEST} + {2708553600 7200 0 EET} + {2721254400 10800 1 EEST} + {2740003200 7200 0 EET} + {2752704000 10800 1 EEST} + {2771452800 7200 0 EET} + {2784758400 10800 1 EEST} + {2802902400 7200 0 EET} + {2816208000 10800 1 EEST} + {2834352000 7200 0 EET} + {2847657600 10800 1 EEST} + {2866406400 7200 0 EET} + {2879107200 10800 1 EEST} + {2897856000 7200 0 EET} + {2910556800 10800 1 EEST} + {2929305600 7200 0 EET} + {2942006400 10800 1 EEST} + {2960755200 7200 0 EET} + {2974060800 10800 1 EEST} + {2992204800 7200 0 EET} + {3005510400 10800 1 EEST} + {3023654400 7200 0 EET} + {3036960000 10800 1 EEST} + {3055708800 7200 0 EET} + {3068409600 10800 1 EEST} + {3087158400 7200 0 EET} + {3099859200 10800 1 EEST} + {3118608000 7200 0 EET} + {3131913600 10800 1 EEST} + {3150057600 7200 0 EET} + {3163363200 10800 1 EEST} + {3181507200 7200 0 EET} + {3194812800 10800 1 EEST} + {3212956800 7200 0 EET} + {3226262400 10800 1 EEST} + {3245011200 7200 0 EET} + {3257712000 10800 1 EEST} + {3276460800 7200 0 EET} + {3289161600 10800 1 EEST} + {3307910400 7200 0 EET} + {3321216000 10800 1 EEST} + {3339360000 7200 0 EET} + {3352665600 10800 1 EEST} + {3370809600 7200 0 EET} + {3384115200 10800 1 EEST} + {3402864000 7200 0 EET} + {3415564800 10800 1 EEST} + {3434313600 7200 0 EET} + {3447014400 10800 1 EEST} + {3465763200 7200 0 EET} + {3479068800 10800 1 EEST} + {3497212800 7200 0 EET} + {3510518400 10800 1 EEST} + {3528662400 7200 0 EET} + {3541968000 10800 1 EEST} + {3560112000 7200 0 EET} + {3573417600 10800 1 EEST} + {3592166400 7200 0 EET} + {3604867200 10800 1 EEST} + {3623616000 7200 0 EET} + {3636316800 10800 1 EEST} + {3655065600 7200 0 EET} + {3668371200 10800 1 EEST} + {3686515200 7200 0 EET} + {3699820800 10800 1 EEST} + {3717964800 7200 0 EET} + {3731270400 10800 1 EEST} + {3750019200 7200 0 EET} + {3762720000 10800 1 EEST} + {3781468800 7200 0 EET} + {3794169600 10800 1 EEST} + {3812918400 7200 0 EET} + {3825619200 10800 1 EEST} + {3844368000 7200 0 EET} + {3857673600 10800 1 EEST} + {3875817600 7200 0 EET} + {3889123200 10800 1 EEST} + {3907267200 7200 0 EET} + {3920572800 10800 1 EEST} + {3939321600 7200 0 EET} + {3952022400 10800 1 EEST} + {3970771200 7200 0 EET} + {3983472000 10800 1 EEST} + {4002220800 7200 0 EET} + {4015526400 10800 1 EEST} + {4033670400 7200 0 EET} + {4046976000 10800 1 EEST} + {4065120000 7200 0 EET} + {4078425600 10800 1 EEST} + {4096569600 7200 0 EET} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Copenhagen b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Copenhagen new file mode 100644 index 00000000..c747e58a --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Copenhagen @@ -0,0 +1,264 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Copenhagen) { + {-9223372036854775808 3020 0 LMT} + {-2524524620 3020 0 CMT} + {-2398294220 3600 0 CET} + {-1692496800 7200 1 CEST} + {-1680490800 3600 0 CET} + {-935110800 7200 1 CEST} + {-857257200 3600 0 CET} + {-844556400 7200 1 CEST} + {-828226800 3600 0 CET} + {-812502000 7200 1 CEST} + {-796777200 3600 0 CET} + {-781052400 7200 0 CEST} + {-769388400 3600 0 CET} + {-747010800 7200 1 CEST} + {-736383600 3600 0 CET} + {-715215600 7200 1 CEST} + {-706748400 3600 0 CET} + {-683161200 7200 1 CEST} + {-675298800 3600 0 CET} + {315529200 3600 0 CET} + {323830800 7200 1 CEST} + {338950800 3600 0 CET} + {354675600 7200 1 CEST} + {370400400 3600 0 CET} + {386125200 7200 1 CEST} + {401850000 3600 0 CET} + {417574800 7200 1 CEST} + {433299600 3600 0 CET} + {449024400 7200 1 CEST} + {465354000 3600 0 CET} + {481078800 7200 1 CEST} + {496803600 3600 0 CET} + {512528400 7200 1 CEST} + {528253200 3600 0 CET} + {543978000 7200 1 CEST} + {559702800 3600 0 CET} + {575427600 7200 1 CEST} + {591152400 3600 0 CET} + {606877200 7200 1 CEST} + {622602000 3600 0 CET} + {638326800 7200 1 CEST} + {654656400 3600 0 CET} + {670381200 7200 1 CEST} + {686106000 3600 0 CET} + {701830800 7200 1 CEST} + {717555600 3600 0 CET} + {733280400 7200 1 CEST} + {749005200 3600 0 CET} + {764730000 7200 1 CEST} + {780454800 3600 0 CET} + {796179600 7200 1 CEST} + {811904400 3600 0 CET} + {828234000 7200 1 CEST} + {846378000 3600 0 CET} + {859683600 7200 1 CEST} + {877827600 3600 0 CET} + {891133200 7200 1 CEST} + {909277200 3600 0 CET} + {922582800 7200 1 CEST} + {941331600 3600 0 CET} + {954032400 7200 1 CEST} + {972781200 3600 0 CET} + {985482000 7200 1 CEST} + {1004230800 3600 0 CET} + {1017536400 7200 1 CEST} + {1035680400 3600 0 CET} + {1048986000 7200 1 CEST} + {1067130000 3600 0 CET} + {1080435600 7200 1 CEST} + {1099184400 3600 0 CET} + {1111885200 7200 1 CEST} + {1130634000 3600 0 CET} + {1143334800 7200 1 CEST} + {1162083600 3600 0 CET} + {1174784400 7200 1 CEST} + {1193533200 3600 0 CET} + {1206838800 7200 1 CEST} + {1224982800 3600 0 CET} + {1238288400 7200 1 CEST} + {1256432400 3600 0 CET} + {1269738000 7200 1 CEST} + {1288486800 3600 0 CET} + {1301187600 7200 1 CEST} + {1319936400 3600 0 CET} + {1332637200 7200 1 CEST} + {1351386000 3600 0 CET} + {1364691600 7200 1 CEST} + {1382835600 3600 0 CET} + {1396141200 7200 1 CEST} + {1414285200 3600 0 CET} + {1427590800 7200 1 CEST} + {1445734800 3600 0 CET} + {1459040400 7200 1 CEST} + {1477789200 3600 0 CET} + {1490490000 7200 1 CEST} + {1509238800 3600 0 CET} + {1521939600 7200 1 CEST} + {1540688400 3600 0 CET} + {1553994000 7200 1 CEST} + {1572138000 3600 0 CET} + {1585443600 7200 1 CEST} + {1603587600 3600 0 CET} + {1616893200 7200 1 CEST} + {1635642000 3600 0 CET} + {1648342800 7200 1 CEST} + {1667091600 3600 0 CET} + {1679792400 7200 1 CEST} + {1698541200 3600 0 CET} + {1711846800 7200 1 CEST} + {1729990800 3600 0 CET} + {1743296400 7200 1 CEST} + {1761440400 3600 0 CET} + {1774746000 7200 1 CEST} + {1792890000 3600 0 CET} + {1806195600 7200 1 CEST} + {1824944400 3600 0 CET} + {1837645200 7200 1 CEST} + {1856394000 3600 0 CET} + {1869094800 7200 1 CEST} + {1887843600 3600 0 CET} + {1901149200 7200 1 CEST} + {1919293200 3600 0 CET} + {1932598800 7200 1 CEST} + {1950742800 3600 0 CET} + {1964048400 7200 1 CEST} + {1982797200 3600 0 CET} + {1995498000 7200 1 CEST} + {2014246800 3600 0 CET} + {2026947600 7200 1 CEST} + {2045696400 3600 0 CET} + {2058397200 7200 1 CEST} + {2077146000 3600 0 CET} + {2090451600 7200 1 CEST} + {2108595600 3600 0 CET} + {2121901200 7200 1 CEST} + {2140045200 3600 0 CET} + {2153350800 7200 1 CEST} + {2172099600 3600 0 CET} + {2184800400 7200 1 CEST} + {2203549200 3600 0 CET} + {2216250000 7200 1 CEST} + {2234998800 3600 0 CET} + {2248304400 7200 1 CEST} + {2266448400 3600 0 CET} + {2279754000 7200 1 CEST} + {2297898000 3600 0 CET} + {2311203600 7200 1 CEST} + {2329347600 3600 0 CET} + {2342653200 7200 1 CEST} + {2361402000 3600 0 CET} + {2374102800 7200 1 CEST} + {2392851600 3600 0 CET} + {2405552400 7200 1 CEST} + {2424301200 3600 0 CET} + {2437606800 7200 1 CEST} + {2455750800 3600 0 CET} + {2469056400 7200 1 CEST} + {2487200400 3600 0 CET} + {2500506000 7200 1 CEST} + {2519254800 3600 0 CET} + {2531955600 7200 1 CEST} + {2550704400 3600 0 CET} + {2563405200 7200 1 CEST} + {2582154000 3600 0 CET} + {2595459600 7200 1 CEST} + {2613603600 3600 0 CET} + {2626909200 7200 1 CEST} + {2645053200 3600 0 CET} + {2658358800 7200 1 CEST} + {2676502800 3600 0 CET} + {2689808400 7200 1 CEST} + {2708557200 3600 0 CET} + {2721258000 7200 1 CEST} + {2740006800 3600 0 CET} + {2752707600 7200 1 CEST} + {2771456400 3600 0 CET} + {2784762000 7200 1 CEST} + {2802906000 3600 0 CET} + {2816211600 7200 1 CEST} + {2834355600 3600 0 CET} + {2847661200 7200 1 CEST} + {2866410000 3600 0 CET} + {2879110800 7200 1 CEST} + {2897859600 3600 0 CET} + {2910560400 7200 1 CEST} + {2929309200 3600 0 CET} + {2942010000 7200 1 CEST} + {2960758800 3600 0 CET} + {2974064400 7200 1 CEST} + {2992208400 3600 0 CET} + {3005514000 7200 1 CEST} + {3023658000 3600 0 CET} + {3036963600 7200 1 CEST} + {3055712400 3600 0 CET} + {3068413200 7200 1 CEST} + {3087162000 3600 0 CET} + {3099862800 7200 1 CEST} + {3118611600 3600 0 CET} + {3131917200 7200 1 CEST} + {3150061200 3600 0 CET} + {3163366800 7200 1 CEST} + {3181510800 3600 0 CET} + {3194816400 7200 1 CEST} + {3212960400 3600 0 CET} + {3226266000 7200 1 CEST} + {3245014800 3600 0 CET} + {3257715600 7200 1 CEST} + {3276464400 3600 0 CET} + {3289165200 7200 1 CEST} + {3307914000 3600 0 CET} + {3321219600 7200 1 CEST} + {3339363600 3600 0 CET} + {3352669200 7200 1 CEST} + {3370813200 3600 0 CET} + {3384118800 7200 1 CEST} + {3402867600 3600 0 CET} + {3415568400 7200 1 CEST} + {3434317200 3600 0 CET} + {3447018000 7200 1 CEST} + {3465766800 3600 0 CET} + {3479072400 7200 1 CEST} + {3497216400 3600 0 CET} + {3510522000 7200 1 CEST} + {3528666000 3600 0 CET} + {3541971600 7200 1 CEST} + {3560115600 3600 0 CET} + {3573421200 7200 1 CEST} + {3592170000 3600 0 CET} + {3604870800 7200 1 CEST} + {3623619600 3600 0 CET} + {3636320400 7200 1 CEST} + {3655069200 3600 0 CET} + {3668374800 7200 1 CEST} + {3686518800 3600 0 CET} + {3699824400 7200 1 CEST} + {3717968400 3600 0 CET} + {3731274000 7200 1 CEST} + {3750022800 3600 0 CET} + {3762723600 7200 1 CEST} + {3781472400 3600 0 CET} + {3794173200 7200 1 CEST} + {3812922000 3600 0 CET} + {3825622800 7200 1 CEST} + {3844371600 3600 0 CET} + {3857677200 7200 1 CEST} + {3875821200 3600 0 CET} + {3889126800 7200 1 CEST} + {3907270800 3600 0 CET} + {3920576400 7200 1 CEST} + {3939325200 3600 0 CET} + {3952026000 7200 1 CEST} + {3970774800 3600 0 CET} + {3983475600 7200 1 CEST} + {4002224400 3600 0 CET} + {4015530000 7200 1 CEST} + {4033674000 3600 0 CET} + {4046979600 7200 1 CEST} + {4065123600 3600 0 CET} + {4078429200 7200 1 CEST} + {4096573200 3600 0 CET} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Dublin b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Dublin new file mode 100644 index 00000000..4b43bc07 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Dublin @@ -0,0 +1,359 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Dublin) { + {-9223372036854775808 -1500 0 LMT} + {-2821649700 -1521 0 DMT} + {-1691962479 2079 1 IST} + {-1680471279 0 0 GMT} + {-1664143200 3600 1 BST} + {-1650146400 0 0 GMT} + {-1633903200 3600 1 BST} + {-1617487200 0 0 GMT} + {-1601848800 3600 1 BST} + {-1586037600 0 0 GMT} + {-1570399200 3600 1 BST} + {-1552168800 0 0 GMT} + {-1538344800 3600 1 BST} + {-1522533600 0 0 GMT} + {-1517011200 0 0 IST} + {-1507500000 3600 1 IST} + {-1490565600 0 0 IST} + {-1473631200 3600 1 IST} + {-1460930400 0 0 IST} + {-1442786400 3600 1 IST} + {-1428876000 0 0 IST} + {-1410732000 3600 1 IST} + {-1396216800 0 0 IST} + {-1379282400 3600 1 IST} + {-1364767200 0 0 IST} + {-1348437600 3600 1 IST} + {-1333317600 0 0 IST} + {-1315778400 3600 1 IST} + {-1301263200 0 0 IST} + {-1284328800 3600 1 IST} + {-1269813600 0 0 IST} + {-1253484000 3600 1 IST} + {-1238364000 0 0 IST} + {-1221429600 3600 1 IST} + {-1206914400 0 0 IST} + {-1189980000 3600 1 IST} + {-1175464800 0 0 IST} + {-1159135200 3600 1 IST} + {-1143410400 0 0 IST} + {-1126476000 3600 1 IST} + {-1111960800 0 0 IST} + {-1095631200 3600 1 IST} + {-1080511200 0 0 IST} + {-1063576800 3600 1 IST} + {-1049061600 0 0 IST} + {-1032127200 3600 1 IST} + {-1017612000 0 0 IST} + {-1001282400 3600 1 IST} + {-986162400 0 0 IST} + {-969228000 3600 1 IST} + {-950479200 0 0 IST} + {-942015600 3600 1 IST} + {-733359600 0 0 GMT} + {-719445600 3600 1 IST} + {-699490800 0 0 GMT} + {-684972000 3600 0 IST} + {-668037600 0 0 IST} + {-654732000 3600 1 IST} + {-636588000 0 0 IST} + {-622072800 3600 1 IST} + {-605743200 0 0 IST} + {-590623200 3600 1 IST} + {-574293600 0 0 IST} + {-558568800 3600 1 IST} + {-542239200 0 0 IST} + {-527119200 3600 1 IST} + {-512604000 0 0 IST} + {-496274400 3600 1 IST} + {-481154400 0 0 IST} + {-464220000 3600 1 IST} + {-449704800 0 0 IST} + {-432165600 3600 1 IST} + {-417650400 0 0 IST} + {-401320800 3600 1 IST} + {-386200800 0 0 IST} + {-369266400 3600 1 IST} + {-354751200 0 0 IST} + {-337816800 3600 1 IST} + {-323301600 0 0 IST} + {-306972000 3600 1 IST} + {-291852000 0 0 IST} + {-276732000 3600 1 IST} + {-257983200 0 0 IST} + {-245282400 3600 1 IST} + {-226533600 0 0 IST} + {-213228000 3600 1 IST} + {-195084000 0 0 IST} + {-182383200 3600 1 IST} + {-163634400 0 0 IST} + {-150933600 3600 1 IST} + {-132184800 0 0 IST} + {-119484000 3600 1 IST} + {-100735200 0 0 IST} + {-88034400 3600 1 IST} + {-68680800 0 0 IST} + {-59004000 3600 1 IST} + {-37238400 3600 0 IST} + {57722400 0 0 IST} + {69818400 3600 1 IST} + {89172000 0 0 IST} + {101268000 3600 1 IST} + {120621600 0 0 IST} + {132717600 3600 1 IST} + {152071200 0 0 IST} + {164167200 3600 1 IST} + {183520800 0 0 IST} + {196221600 3600 1 IST} + {214970400 0 0 IST} + {227671200 3600 1 IST} + {246420000 0 0 IST} + {259120800 3600 1 IST} + {278474400 0 0 IST} + {290570400 3600 1 IST} + {309924000 0 0 IST} + {322020000 3600 1 IST} + {341373600 0 0 IST} + {354675600 3600 1 IST} + {372819600 0 0 IST} + {386125200 3600 1 IST} + {404269200 0 0 IST} + {417574800 3600 1 IST} + {435718800 0 0 IST} + {449024400 3600 1 IST} + {467773200 0 0 IST} + {481078800 3600 1 IST} + {499222800 0 0 IST} + {512528400 3600 1 IST} + {530672400 0 0 IST} + {543978000 3600 1 IST} + {562122000 0 0 IST} + {575427600 3600 1 IST} + {593571600 0 0 IST} + {606877200 3600 1 IST} + {625626000 0 0 IST} + {638326800 3600 1 IST} + {657075600 0 0 IST} + {670381200 3600 1 IST} + {688525200 0 0 IST} + {701830800 3600 1 IST} + {719974800 0 0 IST} + {733280400 3600 1 IST} + {751424400 0 0 IST} + {764730000 3600 1 IST} + {782874000 0 0 IST} + {796179600 3600 1 IST} + {814323600 0 0 IST} + {820454400 0 0 GMT} + {828234000 3600 1 IST} + {846378000 0 0 GMT} + {859683600 3600 1 IST} + {877827600 0 0 GMT} + {891133200 3600 1 IST} + {909277200 0 0 GMT} + {922582800 3600 1 IST} + {941331600 0 0 GMT} + {954032400 3600 1 IST} + {972781200 0 0 GMT} + {985482000 3600 1 IST} + {1004230800 0 0 GMT} + {1017536400 3600 1 IST} + {1035680400 0 0 GMT} + {1048986000 3600 1 IST} + {1067130000 0 0 GMT} + {1080435600 3600 1 IST} + {1099184400 0 0 GMT} + {1111885200 3600 1 IST} + {1130634000 0 0 GMT} + {1143334800 3600 1 IST} + {1162083600 0 0 GMT} + {1174784400 3600 1 IST} + {1193533200 0 0 GMT} + {1206838800 3600 1 IST} + {1224982800 0 0 GMT} + {1238288400 3600 1 IST} + {1256432400 0 0 GMT} + {1269738000 3600 1 IST} + {1288486800 0 0 GMT} + {1301187600 3600 1 IST} + {1319936400 0 0 GMT} + {1332637200 3600 1 IST} + {1351386000 0 0 GMT} + {1364691600 3600 1 IST} + {1382835600 0 0 GMT} + {1396141200 3600 1 IST} + {1414285200 0 0 GMT} + {1427590800 3600 1 IST} + {1445734800 0 0 GMT} + {1459040400 3600 1 IST} + {1477789200 0 0 GMT} + {1490490000 3600 1 IST} + {1509238800 0 0 GMT} + {1521939600 3600 1 IST} + {1540688400 0 0 GMT} + {1553994000 3600 1 IST} + {1572138000 0 0 GMT} + {1585443600 3600 1 IST} + {1603587600 0 0 GMT} + {1616893200 3600 1 IST} + {1635642000 0 0 GMT} + {1648342800 3600 1 IST} + {1667091600 0 0 GMT} + {1679792400 3600 1 IST} + {1698541200 0 0 GMT} + {1711846800 3600 1 IST} + {1729990800 0 0 GMT} + {1743296400 3600 1 IST} + {1761440400 0 0 GMT} + {1774746000 3600 1 IST} + {1792890000 0 0 GMT} + {1806195600 3600 1 IST} + {1824944400 0 0 GMT} + {1837645200 3600 1 IST} + {1856394000 0 0 GMT} + {1869094800 3600 1 IST} + {1887843600 0 0 GMT} + {1901149200 3600 1 IST} + {1919293200 0 0 GMT} + {1932598800 3600 1 IST} + {1950742800 0 0 GMT} + {1964048400 3600 1 IST} + {1982797200 0 0 GMT} + {1995498000 3600 1 IST} + {2014246800 0 0 GMT} + {2026947600 3600 1 IST} + {2045696400 0 0 GMT} + {2058397200 3600 1 IST} + {2077146000 0 0 GMT} + {2090451600 3600 1 IST} + {2108595600 0 0 GMT} + {2121901200 3600 1 IST} + {2140045200 0 0 GMT} + {2153350800 3600 1 IST} + {2172099600 0 0 GMT} + {2184800400 3600 1 IST} + {2203549200 0 0 GMT} + {2216250000 3600 1 IST} + {2234998800 0 0 GMT} + {2248304400 3600 1 IST} + {2266448400 0 0 GMT} + {2279754000 3600 1 IST} + {2297898000 0 0 GMT} + {2311203600 3600 1 IST} + {2329347600 0 0 GMT} + {2342653200 3600 1 IST} + {2361402000 0 0 GMT} + {2374102800 3600 1 IST} + {2392851600 0 0 GMT} + {2405552400 3600 1 IST} + {2424301200 0 0 GMT} + {2437606800 3600 1 IST} + {2455750800 0 0 GMT} + {2469056400 3600 1 IST} + {2487200400 0 0 GMT} + {2500506000 3600 1 IST} + {2519254800 0 0 GMT} + {2531955600 3600 1 IST} + {2550704400 0 0 GMT} + {2563405200 3600 1 IST} + {2582154000 0 0 GMT} + {2595459600 3600 1 IST} + {2613603600 0 0 GMT} + {2626909200 3600 1 IST} + {2645053200 0 0 GMT} + {2658358800 3600 1 IST} + {2676502800 0 0 GMT} + {2689808400 3600 1 IST} + {2708557200 0 0 GMT} + {2721258000 3600 1 IST} + {2740006800 0 0 GMT} + {2752707600 3600 1 IST} + {2771456400 0 0 GMT} + {2784762000 3600 1 IST} + {2802906000 0 0 GMT} + {2816211600 3600 1 IST} + {2834355600 0 0 GMT} + {2847661200 3600 1 IST} + {2866410000 0 0 GMT} + {2879110800 3600 1 IST} + {2897859600 0 0 GMT} + {2910560400 3600 1 IST} + {2929309200 0 0 GMT} + {2942010000 3600 1 IST} + {2960758800 0 0 GMT} + {2974064400 3600 1 IST} + {2992208400 0 0 GMT} + {3005514000 3600 1 IST} + {3023658000 0 0 GMT} + {3036963600 3600 1 IST} + {3055712400 0 0 GMT} + {3068413200 3600 1 IST} + {3087162000 0 0 GMT} + {3099862800 3600 1 IST} + {3118611600 0 0 GMT} + {3131917200 3600 1 IST} + {3150061200 0 0 GMT} + {3163366800 3600 1 IST} + {3181510800 0 0 GMT} + {3194816400 3600 1 IST} + {3212960400 0 0 GMT} + {3226266000 3600 1 IST} + {3245014800 0 0 GMT} + {3257715600 3600 1 IST} + {3276464400 0 0 GMT} + {3289165200 3600 1 IST} + {3307914000 0 0 GMT} + {3321219600 3600 1 IST} + {3339363600 0 0 GMT} + {3352669200 3600 1 IST} + {3370813200 0 0 GMT} + {3384118800 3600 1 IST} + {3402867600 0 0 GMT} + {3415568400 3600 1 IST} + {3434317200 0 0 GMT} + {3447018000 3600 1 IST} + {3465766800 0 0 GMT} + {3479072400 3600 1 IST} + {3497216400 0 0 GMT} + {3510522000 3600 1 IST} + {3528666000 0 0 GMT} + {3541971600 3600 1 IST} + {3560115600 0 0 GMT} + {3573421200 3600 1 IST} + {3592170000 0 0 GMT} + {3604870800 3600 1 IST} + {3623619600 0 0 GMT} + {3636320400 3600 1 IST} + {3655069200 0 0 GMT} + {3668374800 3600 1 IST} + {3686518800 0 0 GMT} + {3699824400 3600 1 IST} + {3717968400 0 0 GMT} + {3731274000 3600 1 IST} + {3750022800 0 0 GMT} + {3762723600 3600 1 IST} + {3781472400 0 0 GMT} + {3794173200 3600 1 IST} + {3812922000 0 0 GMT} + {3825622800 3600 1 IST} + {3844371600 0 0 GMT} + {3857677200 3600 1 IST} + {3875821200 0 0 GMT} + {3889126800 3600 1 IST} + {3907270800 0 0 GMT} + {3920576400 3600 1 IST} + {3939325200 0 0 GMT} + {3952026000 3600 1 IST} + {3970774800 0 0 GMT} + {3983475600 3600 1 IST} + {4002224400 0 0 GMT} + {4015530000 3600 1 IST} + {4033674000 0 0 GMT} + {4046979600 3600 1 IST} + {4065123600 0 0 GMT} + {4078429200 3600 1 IST} + {4096573200 0 0 GMT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Gibraltar b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Gibraltar new file mode 100644 index 00000000..de29c03a --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Gibraltar @@ -0,0 +1,328 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Gibraltar) { + {-9223372036854775808 -1284 0 LMT} + {-2821649916 0 0 GMT} + {-1691964000 3600 1 BST} + {-1680472800 0 0 GMT} + {-1664143200 3600 1 BST} + {-1650146400 0 0 GMT} + {-1633903200 3600 1 BST} + {-1617487200 0 0 GMT} + {-1601848800 3600 1 BST} + {-1586037600 0 0 GMT} + {-1570399200 3600 1 BST} + {-1552168800 0 0 GMT} + {-1538344800 3600 1 BST} + {-1522533600 0 0 GMT} + {-1507500000 3600 1 BST} + {-1490565600 0 0 GMT} + {-1473631200 3600 1 BST} + {-1460930400 0 0 GMT} + {-1442786400 3600 1 BST} + {-1428876000 0 0 GMT} + {-1410732000 3600 1 BST} + {-1396216800 0 0 GMT} + {-1379282400 3600 1 BST} + {-1364767200 0 0 GMT} + {-1348437600 3600 1 BST} + {-1333317600 0 0 GMT} + {-1315778400 3600 1 BST} + {-1301263200 0 0 GMT} + {-1284328800 3600 1 BST} + {-1269813600 0 0 GMT} + {-1253484000 3600 1 BST} + {-1238364000 0 0 GMT} + {-1221429600 3600 1 BST} + {-1206914400 0 0 GMT} + {-1189980000 3600 1 BST} + {-1175464800 0 0 GMT} + {-1159135200 3600 1 BST} + {-1143410400 0 0 GMT} + {-1126476000 3600 1 BST} + {-1111960800 0 0 GMT} + {-1095631200 3600 1 BST} + {-1080511200 0 0 GMT} + {-1063576800 3600 1 BST} + {-1049061600 0 0 GMT} + {-1032127200 3600 1 BST} + {-1017612000 0 0 GMT} + {-1001282400 3600 1 BST} + {-986162400 0 0 GMT} + {-969228000 3600 1 BST} + {-950479200 0 0 GMT} + {-942012000 3600 1 BST} + {-904518000 7200 1 BDST} + {-896050800 3600 1 BST} + {-875487600 7200 1 BDST} + {-864601200 3600 1 BST} + {-844038000 7200 1 BDST} + {-832546800 3600 1 BST} + {-812588400 7200 1 BDST} + {-798073200 3600 1 BST} + {-781052400 7200 1 BDST} + {-772066800 3600 1 BST} + {-764805600 0 0 GMT} + {-748476000 3600 1 BST} + {-733356000 0 0 GMT} + {-719445600 3600 1 BST} + {-717030000 7200 1 BDST} + {-706748400 3600 1 BST} + {-699487200 0 0 GMT} + {-687996000 3600 1 BST} + {-668037600 0 0 GMT} + {-654732000 3600 1 BST} + {-636588000 0 0 GMT} + {-622072800 3600 1 BST} + {-605743200 0 0 GMT} + {-590623200 3600 1 BST} + {-574293600 0 0 GMT} + {-558568800 3600 1 BST} + {-542239200 0 0 GMT} + {-527119200 3600 1 BST} + {-512604000 0 0 GMT} + {-496274400 3600 1 BST} + {-481154400 0 0 GMT} + {-464220000 3600 1 BST} + {-449704800 0 0 GMT} + {-432165600 3600 1 BST} + {-417650400 0 0 GMT} + {-401320800 3600 0 CET} + {378687600 3600 0 CET} + {386125200 7200 1 CEST} + {401850000 3600 0 CET} + {417574800 7200 1 CEST} + {433299600 3600 0 CET} + {449024400 7200 1 CEST} + {465354000 3600 0 CET} + {481078800 7200 1 CEST} + {496803600 3600 0 CET} + {512528400 7200 1 CEST} + {528253200 3600 0 CET} + {543978000 7200 1 CEST} + {559702800 3600 0 CET} + {575427600 7200 1 CEST} + {591152400 3600 0 CET} + {606877200 7200 1 CEST} + {622602000 3600 0 CET} + {638326800 7200 1 CEST} + {654656400 3600 0 CET} + {670381200 7200 1 CEST} + {686106000 3600 0 CET} + {701830800 7200 1 CEST} + {717555600 3600 0 CET} + {733280400 7200 1 CEST} + {749005200 3600 0 CET} + {764730000 7200 1 CEST} + {780454800 3600 0 CET} + {796179600 7200 1 CEST} + {811904400 3600 0 CET} + {828234000 7200 1 CEST} + {846378000 3600 0 CET} + {859683600 7200 1 CEST} + {877827600 3600 0 CET} + {891133200 7200 1 CEST} + {909277200 3600 0 CET} + {922582800 7200 1 CEST} + {941331600 3600 0 CET} + {954032400 7200 1 CEST} + {972781200 3600 0 CET} + {985482000 7200 1 CEST} + {1004230800 3600 0 CET} + {1017536400 7200 1 CEST} + {1035680400 3600 0 CET} + {1048986000 7200 1 CEST} + {1067130000 3600 0 CET} + {1080435600 7200 1 CEST} + {1099184400 3600 0 CET} + {1111885200 7200 1 CEST} + {1130634000 3600 0 CET} + {1143334800 7200 1 CEST} + {1162083600 3600 0 CET} + {1174784400 7200 1 CEST} + {1193533200 3600 0 CET} + {1206838800 7200 1 CEST} + {1224982800 3600 0 CET} + {1238288400 7200 1 CEST} + {1256432400 3600 0 CET} + {1269738000 7200 1 CEST} + {1288486800 3600 0 CET} + {1301187600 7200 1 CEST} + {1319936400 3600 0 CET} + {1332637200 7200 1 CEST} + {1351386000 3600 0 CET} + {1364691600 7200 1 CEST} + {1382835600 3600 0 CET} + {1396141200 7200 1 CEST} + {1414285200 3600 0 CET} + {1427590800 7200 1 CEST} + {1445734800 3600 0 CET} + {1459040400 7200 1 CEST} + {1477789200 3600 0 CET} + {1490490000 7200 1 CEST} + {1509238800 3600 0 CET} + {1521939600 7200 1 CEST} + {1540688400 3600 0 CET} + {1553994000 7200 1 CEST} + {1572138000 3600 0 CET} + {1585443600 7200 1 CEST} + {1603587600 3600 0 CET} + {1616893200 7200 1 CEST} + {1635642000 3600 0 CET} + {1648342800 7200 1 CEST} + {1667091600 3600 0 CET} + {1679792400 7200 1 CEST} + {1698541200 3600 0 CET} + {1711846800 7200 1 CEST} + {1729990800 3600 0 CET} + {1743296400 7200 1 CEST} + {1761440400 3600 0 CET} + {1774746000 7200 1 CEST} + {1792890000 3600 0 CET} + {1806195600 7200 1 CEST} + {1824944400 3600 0 CET} + {1837645200 7200 1 CEST} + {1856394000 3600 0 CET} + {1869094800 7200 1 CEST} + {1887843600 3600 0 CET} + {1901149200 7200 1 CEST} + {1919293200 3600 0 CET} + {1932598800 7200 1 CEST} + {1950742800 3600 0 CET} + {1964048400 7200 1 CEST} + {1982797200 3600 0 CET} + {1995498000 7200 1 CEST} + {2014246800 3600 0 CET} + {2026947600 7200 1 CEST} + {2045696400 3600 0 CET} + {2058397200 7200 1 CEST} + {2077146000 3600 0 CET} + {2090451600 7200 1 CEST} + {2108595600 3600 0 CET} + {2121901200 7200 1 CEST} + {2140045200 3600 0 CET} + {2153350800 7200 1 CEST} + {2172099600 3600 0 CET} + {2184800400 7200 1 CEST} + {2203549200 3600 0 CET} + {2216250000 7200 1 CEST} + {2234998800 3600 0 CET} + {2248304400 7200 1 CEST} + {2266448400 3600 0 CET} + {2279754000 7200 1 CEST} + {2297898000 3600 0 CET} + {2311203600 7200 1 CEST} + {2329347600 3600 0 CET} + {2342653200 7200 1 CEST} + {2361402000 3600 0 CET} + {2374102800 7200 1 CEST} + {2392851600 3600 0 CET} + {2405552400 7200 1 CEST} + {2424301200 3600 0 CET} + {2437606800 7200 1 CEST} + {2455750800 3600 0 CET} + {2469056400 7200 1 CEST} + {2487200400 3600 0 CET} + {2500506000 7200 1 CEST} + {2519254800 3600 0 CET} + {2531955600 7200 1 CEST} + {2550704400 3600 0 CET} + {2563405200 7200 1 CEST} + {2582154000 3600 0 CET} + {2595459600 7200 1 CEST} + {2613603600 3600 0 CET} + {2626909200 7200 1 CEST} + {2645053200 3600 0 CET} + {2658358800 7200 1 CEST} + {2676502800 3600 0 CET} + {2689808400 7200 1 CEST} + {2708557200 3600 0 CET} + {2721258000 7200 1 CEST} + {2740006800 3600 0 CET} + {2752707600 7200 1 CEST} + {2771456400 3600 0 CET} + {2784762000 7200 1 CEST} + {2802906000 3600 0 CET} + {2816211600 7200 1 CEST} + {2834355600 3600 0 CET} + {2847661200 7200 1 CEST} + {2866410000 3600 0 CET} + {2879110800 7200 1 CEST} + {2897859600 3600 0 CET} + {2910560400 7200 1 CEST} + {2929309200 3600 0 CET} + {2942010000 7200 1 CEST} + {2960758800 3600 0 CET} + {2974064400 7200 1 CEST} + {2992208400 3600 0 CET} + {3005514000 7200 1 CEST} + {3023658000 3600 0 CET} + {3036963600 7200 1 CEST} + {3055712400 3600 0 CET} + {3068413200 7200 1 CEST} + {3087162000 3600 0 CET} + {3099862800 7200 1 CEST} + {3118611600 3600 0 CET} + {3131917200 7200 1 CEST} + {3150061200 3600 0 CET} + {3163366800 7200 1 CEST} + {3181510800 3600 0 CET} + {3194816400 7200 1 CEST} + {3212960400 3600 0 CET} + {3226266000 7200 1 CEST} + {3245014800 3600 0 CET} + {3257715600 7200 1 CEST} + {3276464400 3600 0 CET} + {3289165200 7200 1 CEST} + {3307914000 3600 0 CET} + {3321219600 7200 1 CEST} + {3339363600 3600 0 CET} + {3352669200 7200 1 CEST} + {3370813200 3600 0 CET} + {3384118800 7200 1 CEST} + {3402867600 3600 0 CET} + {3415568400 7200 1 CEST} + {3434317200 3600 0 CET} + {3447018000 7200 1 CEST} + {3465766800 3600 0 CET} + {3479072400 7200 1 CEST} + {3497216400 3600 0 CET} + {3510522000 7200 1 CEST} + {3528666000 3600 0 CET} + {3541971600 7200 1 CEST} + {3560115600 3600 0 CET} + {3573421200 7200 1 CEST} + {3592170000 3600 0 CET} + {3604870800 7200 1 CEST} + {3623619600 3600 0 CET} + {3636320400 7200 1 CEST} + {3655069200 3600 0 CET} + {3668374800 7200 1 CEST} + {3686518800 3600 0 CET} + {3699824400 7200 1 CEST} + {3717968400 3600 0 CET} + {3731274000 7200 1 CEST} + {3750022800 3600 0 CET} + {3762723600 7200 1 CEST} + {3781472400 3600 0 CET} + {3794173200 7200 1 CEST} + {3812922000 3600 0 CET} + {3825622800 7200 1 CEST} + {3844371600 3600 0 CET} + {3857677200 7200 1 CEST} + {3875821200 3600 0 CET} + {3889126800 7200 1 CEST} + {3907270800 3600 0 CET} + {3920576400 7200 1 CEST} + {3939325200 3600 0 CET} + {3952026000 7200 1 CEST} + {3970774800 3600 0 CET} + {3983475600 7200 1 CEST} + {4002224400 3600 0 CET} + {4015530000 7200 1 CEST} + {4033674000 3600 0 CET} + {4046979600 7200 1 CEST} + {4065123600 3600 0 CET} + {4078429200 7200 1 CEST} + {4096573200 3600 0 CET} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Guernsey b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Guernsey new file mode 100644 index 00000000..4372c640 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Guernsey @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Europe/London)]} { + LoadTimeZoneFile Europe/London +} +set TZData(:Europe/Guernsey) $TZData(:Europe/London) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Helsinki b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Helsinki new file mode 100644 index 00000000..39c5e781 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Helsinki @@ -0,0 +1,248 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Helsinki) { + {-9223372036854775808 5989 0 LMT} + {-2890258789 5989 0 HMT} + {-1535938789 7200 0 EET} + {-875671200 10800 1 EEST} + {-859773600 7200 0 EET} + {354672000 10800 1 EEST} + {370396800 7200 0 EET} + {386121600 10800 1 EEST} + {401846400 7200 0 EET} + {410220000 7200 0 EET} + {417574800 10800 1 EEST} + {433299600 7200 0 EET} + {449024400 10800 1 EEST} + {465354000 7200 0 EET} + {481078800 10800 1 EEST} + {496803600 7200 0 EET} + {512528400 10800 1 EEST} + {528253200 7200 0 EET} + {543978000 10800 1 EEST} + {559702800 7200 0 EET} + {575427600 10800 1 EEST} + {591152400 7200 0 EET} + {606877200 10800 1 EEST} + {622602000 7200 0 EET} + {638326800 10800 1 EEST} + {654656400 7200 0 EET} + {670381200 10800 1 EEST} + {686106000 7200 0 EET} + {701830800 10800 1 EEST} + {717555600 7200 0 EET} + {733280400 10800 1 EEST} + {749005200 7200 0 EET} + {764730000 10800 1 EEST} + {780454800 7200 0 EET} + {796179600 10800 1 EEST} + {811904400 7200 0 EET} + {828234000 10800 1 EEST} + {846378000 7200 0 EET} + {859683600 10800 1 EEST} + {877827600 7200 0 EET} + {891133200 10800 1 EEST} + {909277200 7200 0 EET} + {922582800 10800 1 EEST} + {941331600 7200 0 EET} + {954032400 10800 1 EEST} + {972781200 7200 0 EET} + {985482000 10800 1 EEST} + {1004230800 7200 0 EET} + {1017536400 10800 1 EEST} + {1035680400 7200 0 EET} + {1048986000 10800 1 EEST} + {1067130000 7200 0 EET} + {1080435600 10800 1 EEST} + {1099184400 7200 0 EET} + {1111885200 10800 1 EEST} + {1130634000 7200 0 EET} + {1143334800 10800 1 EEST} + {1162083600 7200 0 EET} + {1174784400 10800 1 EEST} + {1193533200 7200 0 EET} + {1206838800 10800 1 EEST} + {1224982800 7200 0 EET} + {1238288400 10800 1 EEST} + {1256432400 7200 0 EET} + {1269738000 10800 1 EEST} + {1288486800 7200 0 EET} + {1301187600 10800 1 EEST} + {1319936400 7200 0 EET} + {1332637200 10800 1 EEST} + {1351386000 7200 0 EET} + {1364691600 10800 1 EEST} + {1382835600 7200 0 EET} + {1396141200 10800 1 EEST} + {1414285200 7200 0 EET} + {1427590800 10800 1 EEST} + {1445734800 7200 0 EET} + {1459040400 10800 1 EEST} + {1477789200 7200 0 EET} + {1490490000 10800 1 EEST} + {1509238800 7200 0 EET} + {1521939600 10800 1 EEST} + {1540688400 7200 0 EET} + {1553994000 10800 1 EEST} + {1572138000 7200 0 EET} + {1585443600 10800 1 EEST} + {1603587600 7200 0 EET} + {1616893200 10800 1 EEST} + {1635642000 7200 0 EET} + {1648342800 10800 1 EEST} + {1667091600 7200 0 EET} + {1679792400 10800 1 EEST} + {1698541200 7200 0 EET} + {1711846800 10800 1 EEST} + {1729990800 7200 0 EET} + {1743296400 10800 1 EEST} + {1761440400 7200 0 EET} + {1774746000 10800 1 EEST} + {1792890000 7200 0 EET} + {1806195600 10800 1 EEST} + {1824944400 7200 0 EET} + {1837645200 10800 1 EEST} + {1856394000 7200 0 EET} + {1869094800 10800 1 EEST} + {1887843600 7200 0 EET} + {1901149200 10800 1 EEST} + {1919293200 7200 0 EET} + {1932598800 10800 1 EEST} + {1950742800 7200 0 EET} + {1964048400 10800 1 EEST} + {1982797200 7200 0 EET} + {1995498000 10800 1 EEST} + {2014246800 7200 0 EET} + {2026947600 10800 1 EEST} + {2045696400 7200 0 EET} + {2058397200 10800 1 EEST} + {2077146000 7200 0 EET} + {2090451600 10800 1 EEST} + {2108595600 7200 0 EET} + {2121901200 10800 1 EEST} + {2140045200 7200 0 EET} + {2153350800 10800 1 EEST} + {2172099600 7200 0 EET} + {2184800400 10800 1 EEST} + {2203549200 7200 0 EET} + {2216250000 10800 1 EEST} + {2234998800 7200 0 EET} + {2248304400 10800 1 EEST} + {2266448400 7200 0 EET} + {2279754000 10800 1 EEST} + {2297898000 7200 0 EET} + {2311203600 10800 1 EEST} + {2329347600 7200 0 EET} + {2342653200 10800 1 EEST} + {2361402000 7200 0 EET} + {2374102800 10800 1 EEST} + {2392851600 7200 0 EET} + {2405552400 10800 1 EEST} + {2424301200 7200 0 EET} + {2437606800 10800 1 EEST} + {2455750800 7200 0 EET} + {2469056400 10800 1 EEST} + {2487200400 7200 0 EET} + {2500506000 10800 1 EEST} + {2519254800 7200 0 EET} + {2531955600 10800 1 EEST} + {2550704400 7200 0 EET} + {2563405200 10800 1 EEST} + {2582154000 7200 0 EET} + {2595459600 10800 1 EEST} + {2613603600 7200 0 EET} + {2626909200 10800 1 EEST} + {2645053200 7200 0 EET} + {2658358800 10800 1 EEST} + {2676502800 7200 0 EET} + {2689808400 10800 1 EEST} + {2708557200 7200 0 EET} + {2721258000 10800 1 EEST} + {2740006800 7200 0 EET} + {2752707600 10800 1 EEST} + {2771456400 7200 0 EET} + {2784762000 10800 1 EEST} + {2802906000 7200 0 EET} + {2816211600 10800 1 EEST} + {2834355600 7200 0 EET} + {2847661200 10800 1 EEST} + {2866410000 7200 0 EET} + {2879110800 10800 1 EEST} + {2897859600 7200 0 EET} + {2910560400 10800 1 EEST} + {2929309200 7200 0 EET} + {2942010000 10800 1 EEST} + {2960758800 7200 0 EET} + {2974064400 10800 1 EEST} + {2992208400 7200 0 EET} + {3005514000 10800 1 EEST} + {3023658000 7200 0 EET} + {3036963600 10800 1 EEST} + {3055712400 7200 0 EET} + {3068413200 10800 1 EEST} + {3087162000 7200 0 EET} + {3099862800 10800 1 EEST} + {3118611600 7200 0 EET} + {3131917200 10800 1 EEST} + {3150061200 7200 0 EET} + {3163366800 10800 1 EEST} + {3181510800 7200 0 EET} + {3194816400 10800 1 EEST} + {3212960400 7200 0 EET} + {3226266000 10800 1 EEST} + {3245014800 7200 0 EET} + {3257715600 10800 1 EEST} + {3276464400 7200 0 EET} + {3289165200 10800 1 EEST} + {3307914000 7200 0 EET} + {3321219600 10800 1 EEST} + {3339363600 7200 0 EET} + {3352669200 10800 1 EEST} + {3370813200 7200 0 EET} + {3384118800 10800 1 EEST} + {3402867600 7200 0 EET} + {3415568400 10800 1 EEST} + {3434317200 7200 0 EET} + {3447018000 10800 1 EEST} + {3465766800 7200 0 EET} + {3479072400 10800 1 EEST} + {3497216400 7200 0 EET} + {3510522000 10800 1 EEST} + {3528666000 7200 0 EET} + {3541971600 10800 1 EEST} + {3560115600 7200 0 EET} + {3573421200 10800 1 EEST} + {3592170000 7200 0 EET} + {3604870800 10800 1 EEST} + {3623619600 7200 0 EET} + {3636320400 10800 1 EEST} + {3655069200 7200 0 EET} + {3668374800 10800 1 EEST} + {3686518800 7200 0 EET} + {3699824400 10800 1 EEST} + {3717968400 7200 0 EET} + {3731274000 10800 1 EEST} + {3750022800 7200 0 EET} + {3762723600 10800 1 EEST} + {3781472400 7200 0 EET} + {3794173200 10800 1 EEST} + {3812922000 7200 0 EET} + {3825622800 10800 1 EEST} + {3844371600 7200 0 EET} + {3857677200 10800 1 EEST} + {3875821200 7200 0 EET} + {3889126800 10800 1 EEST} + {3907270800 7200 0 EET} + {3920576400 10800 1 EEST} + {3939325200 7200 0 EET} + {3952026000 10800 1 EEST} + {3970774800 7200 0 EET} + {3983475600 10800 1 EEST} + {4002224400 7200 0 EET} + {4015530000 10800 1 EEST} + {4033674000 7200 0 EET} + {4046979600 10800 1 EEST} + {4065123600 7200 0 EET} + {4078429200 10800 1 EEST} + {4096573200 7200 0 EET} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Isle_of_Man b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Isle_of_Man new file mode 100644 index 00000000..870ac45c --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Isle_of_Man @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Europe/London)]} { + LoadTimeZoneFile Europe/London +} +set TZData(:Europe/Isle_of_Man) $TZData(:Europe/London) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Istanbul b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Istanbul new file mode 100644 index 00000000..8eadbc37 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Istanbul @@ -0,0 +1,306 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Istanbul) { + {-9223372036854775808 6952 0 LMT} + {-2840147752 7016 0 IMT} + {-1869875816 7200 0 EET} + {-1693706400 10800 1 EEST} + {-1680490800 7200 0 EET} + {-1570413600 10800 1 EEST} + {-1552186800 7200 0 EET} + {-1538359200 10800 1 EEST} + {-1522551600 7200 0 EET} + {-1507514400 10800 1 EEST} + {-1490583600 7200 0 EET} + {-1440208800 10800 1 EEST} + {-1428030000 7200 0 EET} + {-1409709600 10800 1 EEST} + {-1396494000 7200 0 EET} + {-931140000 10800 1 EEST} + {-922762800 7200 0 EET} + {-917834400 10800 1 EEST} + {-892436400 7200 0 EET} + {-875844000 10800 1 EEST} + {-857358000 7200 0 EET} + {-781063200 10800 1 EEST} + {-764737200 7200 0 EET} + {-744343200 10800 1 EEST} + {-733806000 7200 0 EET} + {-716436000 10800 1 EEST} + {-701924400 7200 0 EET} + {-684986400 10800 1 EEST} + {-670474800 7200 0 EET} + {-654141600 10800 1 EEST} + {-639025200 7200 0 EET} + {-621828000 10800 1 EEST} + {-606970800 7200 0 EET} + {-590032800 10800 1 EEST} + {-575434800 7200 0 EET} + {-235620000 10800 1 EEST} + {-228279600 7200 0 EET} + {-177732000 10800 1 EEST} + {-165726000 7200 0 EET} + {10533600 10800 1 EEST} + {23835600 7200 0 EET} + {41983200 10800 1 EEST} + {55285200 7200 0 EET} + {74037600 10800 1 EEST} + {87339600 7200 0 EET} + {107910000 10800 1 EEST} + {121219200 7200 0 EET} + {133920000 10800 1 EEST} + {152676000 7200 0 EET} + {165362400 10800 1 EEST} + {183502800 7200 0 EET} + {202428000 10800 1 EEST} + {215557200 7200 0 EET} + {228866400 10800 1 EEST} + {245797200 7200 0 EET} + {260316000 10800 1 EEST} + {277246800 14400 0 TRST} + {291769200 14400 1 TRST} + {308779200 10800 0 TRT} + {323827200 14400 1 TRST} + {340228800 10800 0 TRT} + {354672000 14400 1 TRST} + {371678400 10800 0 TRT} + {386121600 14400 1 TRST} + {403128000 10800 0 TRT} + {428446800 14400 1 TRST} + {433886400 10800 0 TRT} + {482792400 7200 0 EET} + {482796000 10800 1 EEST} + {496702800 7200 0 EET} + {512524800 10800 1 EEST} + {528249600 7200 0 EET} + {543974400 10800 1 EEST} + {559699200 7200 0 EET} + {575424000 10800 1 EEST} + {591148800 7200 0 EET} + {606873600 10800 1 EEST} + {622598400 7200 0 EET} + {638323200 10800 1 EEST} + {654652800 7200 0 EET} + {670374000 10800 1 EEST} + {686098800 7200 0 EET} + {701823600 10800 1 EEST} + {717548400 7200 0 EET} + {733273200 10800 1 EEST} + {748998000 7200 0 EET} + {764722800 10800 1 EEST} + {780447600 7200 0 EET} + {796172400 10800 1 EEST} + {811897200 7200 0 EET} + {828226800 10800 1 EEST} + {846370800 7200 0 EET} + {859676400 10800 1 EEST} + {877820400 7200 0 EET} + {891126000 10800 1 EEST} + {909270000 7200 0 EET} + {922575600 10800 1 EEST} + {941324400 7200 0 EET} + {954025200 10800 1 EEST} + {972774000 7200 0 EET} + {985474800 10800 1 EEST} + {1004223600 7200 0 EET} + {1017529200 10800 1 EEST} + {1035673200 7200 0 EET} + {1048978800 10800 1 EEST} + {1067122800 7200 0 EET} + {1080428400 10800 1 EEST} + {1099177200 7200 0 EET} + {1111878000 10800 1 EEST} + {1130626800 7200 0 EET} + {1143327600 10800 1 EEST} + {1162076400 7200 0 EET} + {1167602400 7200 0 EET} + {1174784400 10800 1 EEST} + {1193533200 7200 0 EET} + {1206838800 10800 1 EEST} + {1224982800 7200 0 EET} + {1238288400 10800 1 EEST} + {1256432400 7200 0 EET} + {1269738000 10800 1 EEST} + {1288486800 7200 0 EET} + {1301187600 7200 0 EET} + {1301274000 10800 0 EEST} + {1319936400 7200 0 EET} + {1332637200 10800 1 EEST} + {1351386000 7200 0 EET} + {1364691600 10800 1 EEST} + {1382835600 7200 0 EET} + {1396141200 7200 0 EET} + {1396227600 10800 0 EEST} + {1414285200 7200 0 EET} + {1427590800 10800 1 EEST} + {1445734800 10800 1 EEST} + {1446944400 7200 0 EET} + {1459040400 10800 1 EEST} + {1477789200 7200 0 EET} + {1490490000 10800 1 EEST} + {1509238800 7200 0 EET} + {1521939600 10800 1 EEST} + {1540688400 7200 0 EET} + {1553994000 10800 1 EEST} + {1572138000 7200 0 EET} + {1585443600 10800 1 EEST} + {1603587600 7200 0 EET} + {1616893200 10800 1 EEST} + {1635642000 7200 0 EET} + {1648342800 10800 1 EEST} + {1667091600 7200 0 EET} + {1679792400 10800 1 EEST} + {1698541200 7200 0 EET} + {1711846800 10800 1 EEST} + {1729990800 7200 0 EET} + {1743296400 10800 1 EEST} + {1761440400 7200 0 EET} + {1774746000 10800 1 EEST} + {1792890000 7200 0 EET} + {1806195600 10800 1 EEST} + {1824944400 7200 0 EET} + {1837645200 10800 1 EEST} + {1856394000 7200 0 EET} + {1869094800 10800 1 EEST} + {1887843600 7200 0 EET} + {1901149200 10800 1 EEST} + {1919293200 7200 0 EET} + {1932598800 10800 1 EEST} + {1950742800 7200 0 EET} + {1964048400 10800 1 EEST} + {1982797200 7200 0 EET} + {1995498000 10800 1 EEST} + {2014246800 7200 0 EET} + {2026947600 10800 1 EEST} + {2045696400 7200 0 EET} + {2058397200 10800 1 EEST} + {2077146000 7200 0 EET} + {2090451600 10800 1 EEST} + {2108595600 7200 0 EET} + {2121901200 10800 1 EEST} + {2140045200 7200 0 EET} + {2153350800 10800 1 EEST} + {2172099600 7200 0 EET} + {2184800400 10800 1 EEST} + {2203549200 7200 0 EET} + {2216250000 10800 1 EEST} + {2234998800 7200 0 EET} + {2248304400 10800 1 EEST} + {2266448400 7200 0 EET} + {2279754000 10800 1 EEST} + {2297898000 7200 0 EET} + {2311203600 10800 1 EEST} + {2329347600 7200 0 EET} + {2342653200 10800 1 EEST} + {2361402000 7200 0 EET} + {2374102800 10800 1 EEST} + {2392851600 7200 0 EET} + {2405552400 10800 1 EEST} + {2424301200 7200 0 EET} + {2437606800 10800 1 EEST} + {2455750800 7200 0 EET} + {2469056400 10800 1 EEST} + {2487200400 7200 0 EET} + {2500506000 10800 1 EEST} + {2519254800 7200 0 EET} + {2531955600 10800 1 EEST} + {2550704400 7200 0 EET} + {2563405200 10800 1 EEST} + {2582154000 7200 0 EET} + {2595459600 10800 1 EEST} + {2613603600 7200 0 EET} + {2626909200 10800 1 EEST} + {2645053200 7200 0 EET} + {2658358800 10800 1 EEST} + {2676502800 7200 0 EET} + {2689808400 10800 1 EEST} + {2708557200 7200 0 EET} + {2721258000 10800 1 EEST} + {2740006800 7200 0 EET} + {2752707600 10800 1 EEST} + {2771456400 7200 0 EET} + {2784762000 10800 1 EEST} + {2802906000 7200 0 EET} + {2816211600 10800 1 EEST} + {2834355600 7200 0 EET} + {2847661200 10800 1 EEST} + {2866410000 7200 0 EET} + {2879110800 10800 1 EEST} + {2897859600 7200 0 EET} + {2910560400 10800 1 EEST} + {2929309200 7200 0 EET} + {2942010000 10800 1 EEST} + {2960758800 7200 0 EET} + {2974064400 10800 1 EEST} + {2992208400 7200 0 EET} + {3005514000 10800 1 EEST} + {3023658000 7200 0 EET} + {3036963600 10800 1 EEST} + {3055712400 7200 0 EET} + {3068413200 10800 1 EEST} + {3087162000 7200 0 EET} + {3099862800 10800 1 EEST} + {3118611600 7200 0 EET} + {3131917200 10800 1 EEST} + {3150061200 7200 0 EET} + {3163366800 10800 1 EEST} + {3181510800 7200 0 EET} + {3194816400 10800 1 EEST} + {3212960400 7200 0 EET} + {3226266000 10800 1 EEST} + {3245014800 7200 0 EET} + {3257715600 10800 1 EEST} + {3276464400 7200 0 EET} + {3289165200 10800 1 EEST} + {3307914000 7200 0 EET} + {3321219600 10800 1 EEST} + {3339363600 7200 0 EET} + {3352669200 10800 1 EEST} + {3370813200 7200 0 EET} + {3384118800 10800 1 EEST} + {3402867600 7200 0 EET} + {3415568400 10800 1 EEST} + {3434317200 7200 0 EET} + {3447018000 10800 1 EEST} + {3465766800 7200 0 EET} + {3479072400 10800 1 EEST} + {3497216400 7200 0 EET} + {3510522000 10800 1 EEST} + {3528666000 7200 0 EET} + {3541971600 10800 1 EEST} + {3560115600 7200 0 EET} + {3573421200 10800 1 EEST} + {3592170000 7200 0 EET} + {3604870800 10800 1 EEST} + {3623619600 7200 0 EET} + {3636320400 10800 1 EEST} + {3655069200 7200 0 EET} + {3668374800 10800 1 EEST} + {3686518800 7200 0 EET} + {3699824400 10800 1 EEST} + {3717968400 7200 0 EET} + {3731274000 10800 1 EEST} + {3750022800 7200 0 EET} + {3762723600 10800 1 EEST} + {3781472400 7200 0 EET} + {3794173200 10800 1 EEST} + {3812922000 7200 0 EET} + {3825622800 10800 1 EEST} + {3844371600 7200 0 EET} + {3857677200 10800 1 EEST} + {3875821200 7200 0 EET} + {3889126800 10800 1 EEST} + {3907270800 7200 0 EET} + {3920576400 10800 1 EEST} + {3939325200 7200 0 EET} + {3952026000 10800 1 EEST} + {3970774800 7200 0 EET} + {3983475600 10800 1 EEST} + {4002224400 7200 0 EET} + {4015530000 10800 1 EEST} + {4033674000 7200 0 EET} + {4046979600 10800 1 EEST} + {4065123600 7200 0 EET} + {4078429200 10800 1 EEST} + {4096573200 7200 0 EET} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Jersey b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Jersey new file mode 100644 index 00000000..e4da5125 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Jersey @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Europe/London)]} { + LoadTimeZoneFile Europe/London +} +set TZData(:Europe/Jersey) $TZData(:Europe/London) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Kaliningrad b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Kaliningrad new file mode 100644 index 00000000..d03f7d07 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Kaliningrad @@ -0,0 +1,85 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Kaliningrad) { + {-9223372036854775808 4920 0 LMT} + {-2422056120 3600 0 CET} + {-1693706400 7200 1 CEST} + {-1680483600 3600 0 CET} + {-1663455600 7200 1 CEST} + {-1650150000 3600 0 CET} + {-1632006000 7200 1 CEST} + {-1618700400 3600 0 CET} + {-938905200 7200 1 CEST} + {-857257200 3600 0 CET} + {-844556400 7200 1 CEST} + {-828226800 3600 0 CET} + {-812502000 7200 1 CEST} + {-796777200 3600 0 CET} + {-788922000 7200 0 CET} + {-778730400 10800 1 CEST} + {-762663600 7200 0 CET} + {-757389600 10800 0 MSD} + {354920400 14400 1 MSD} + {370728000 10800 0 MSK} + {386456400 14400 1 MSD} + {402264000 10800 0 MSK} + {417992400 14400 1 MSD} + {433800000 10800 0 MSK} + {449614800 14400 1 MSD} + {465346800 10800 0 MSK} + {481071600 14400 1 MSD} + {496796400 10800 0 MSK} + {512521200 14400 1 MSD} + {528246000 10800 0 MSK} + {543970800 14400 1 MSD} + {559695600 10800 0 MSK} + {575420400 14400 1 MSD} + {591145200 10800 0 MSK} + {606870000 14400 1 MSD} + {622594800 10800 0 MSK} + {638319600 14400 1 MSD} + {654649200 10800 0 MSK} + {670374000 7200 0 EEMMTT} + {670377600 10800 1 EEST} + {686102400 7200 0 EET} + {701816400 10800 1 EEST} + {717537600 7200 0 EET} + {733276800 10800 1 EEST} + {749001600 7200 0 EET} + {764726400 10800 1 EEST} + {780451200 7200 0 EET} + {796176000 10800 1 EEST} + {811900800 7200 0 EET} + {828230400 10800 1 EEST} + {846374400 7200 0 EET} + {859680000 10800 1 EEST} + {877824000 7200 0 EET} + {891129600 10800 1 EEST} + {909273600 7200 0 EET} + {922579200 10800 1 EEST} + {941328000 7200 0 EET} + {954028800 10800 1 EEST} + {972777600 7200 0 EET} + {985478400 10800 1 EEST} + {1004227200 7200 0 EET} + {1017532800 10800 1 EEST} + {1035676800 7200 0 EET} + {1048982400 10800 1 EEST} + {1067126400 7200 0 EET} + {1080432000 10800 1 EEST} + {1099180800 7200 0 EET} + {1111881600 10800 1 EEST} + {1130630400 7200 0 EET} + {1143331200 10800 1 EEST} + {1162080000 7200 0 EET} + {1174780800 10800 1 EEST} + {1193529600 7200 0 EET} + {1206835200 10800 1 EEST} + {1224979200 7200 0 EET} + {1238284800 10800 1 EEST} + {1256428800 7200 0 EET} + {1269734400 10800 1 EEST} + {1288483200 7200 0 EET} + {1301184000 10800 0 FET} + {1414278000 7200 0 EET} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Kiev b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Kiev new file mode 100644 index 00000000..55015fac --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Kiev @@ -0,0 +1,251 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Kiev) { + {-9223372036854775808 7324 0 LMT} + {-2840148124 7324 0 KMT} + {-1441159324 7200 0 EET} + {-1247536800 10800 0 MSK} + {-892522800 3600 0 CET} + {-857257200 3600 0 CET} + {-844556400 7200 1 CEST} + {-828226800 3600 0 CET} + {-825382800 10800 0 MSD} + {354920400 14400 1 MSD} + {370728000 10800 0 MSK} + {386456400 14400 1 MSD} + {402264000 10800 0 MSK} + {417992400 14400 1 MSD} + {433800000 10800 0 MSK} + {449614800 14400 1 MSD} + {465346800 10800 0 MSK} + {481071600 14400 1 MSD} + {496796400 10800 0 MSK} + {512521200 14400 1 MSD} + {528246000 10800 0 MSK} + {543970800 14400 1 MSD} + {559695600 10800 0 MSK} + {575420400 14400 1 MSD} + {591145200 10800 0 MSK} + {606870000 14400 1 MSD} + {622594800 10800 0 MSK} + {638319600 14400 1 MSD} + {646786800 10800 1 EEST} + {686102400 7200 0 EET} + {701820000 10800 1 EEST} + {717541200 7200 0 EET} + {733269600 10800 1 EEST} + {748990800 7200 0 EET} + {764719200 10800 1 EEST} + {780440400 7200 0 EET} + {788911200 7200 0 EET} + {796179600 10800 1 EEST} + {811904400 7200 0 EET} + {828234000 10800 1 EEST} + {846378000 7200 0 EET} + {859683600 10800 1 EEST} + {877827600 7200 0 EET} + {891133200 10800 1 EEST} + {909277200 7200 0 EET} + {922582800 10800 1 EEST} + {941331600 7200 0 EET} + {954032400 10800 1 EEST} + {972781200 7200 0 EET} + {985482000 10800 1 EEST} + {1004230800 7200 0 EET} + {1017536400 10800 1 EEST} + {1035680400 7200 0 EET} + {1048986000 10800 1 EEST} + {1067130000 7200 0 EET} + {1080435600 10800 1 EEST} + {1099184400 7200 0 EET} + {1111885200 10800 1 EEST} + {1130634000 7200 0 EET} + {1143334800 10800 1 EEST} + {1162083600 7200 0 EET} + {1174784400 10800 1 EEST} + {1193533200 7200 0 EET} + {1206838800 10800 1 EEST} + {1224982800 7200 0 EET} + {1238288400 10800 1 EEST} + {1256432400 7200 0 EET} + {1269738000 10800 1 EEST} + {1288486800 7200 0 EET} + {1301187600 10800 1 EEST} + {1319936400 7200 0 EET} + {1332637200 10800 1 EEST} + {1351386000 7200 0 EET} + {1364691600 10800 1 EEST} + {1382835600 7200 0 EET} + {1396141200 10800 1 EEST} + {1414285200 7200 0 EET} + {1427590800 10800 1 EEST} + {1445734800 7200 0 EET} + {1459040400 10800 1 EEST} + {1477789200 7200 0 EET} + {1490490000 10800 1 EEST} + {1509238800 7200 0 EET} + {1521939600 10800 1 EEST} + {1540688400 7200 0 EET} + {1553994000 10800 1 EEST} + {1572138000 7200 0 EET} + {1585443600 10800 1 EEST} + {1603587600 7200 0 EET} + {1616893200 10800 1 EEST} + {1635642000 7200 0 EET} + {1648342800 10800 1 EEST} + {1667091600 7200 0 EET} + {1679792400 10800 1 EEST} + {1698541200 7200 0 EET} + {1711846800 10800 1 EEST} + {1729990800 7200 0 EET} + {1743296400 10800 1 EEST} + {1761440400 7200 0 EET} + {1774746000 10800 1 EEST} + {1792890000 7200 0 EET} + {1806195600 10800 1 EEST} + {1824944400 7200 0 EET} + {1837645200 10800 1 EEST} + {1856394000 7200 0 EET} + {1869094800 10800 1 EEST} + {1887843600 7200 0 EET} + {1901149200 10800 1 EEST} + {1919293200 7200 0 EET} + {1932598800 10800 1 EEST} + {1950742800 7200 0 EET} + {1964048400 10800 1 EEST} + {1982797200 7200 0 EET} + {1995498000 10800 1 EEST} + {2014246800 7200 0 EET} + {2026947600 10800 1 EEST} + {2045696400 7200 0 EET} + {2058397200 10800 1 EEST} + {2077146000 7200 0 EET} + {2090451600 10800 1 EEST} + {2108595600 7200 0 EET} + {2121901200 10800 1 EEST} + {2140045200 7200 0 EET} + {2153350800 10800 1 EEST} + {2172099600 7200 0 EET} + {2184800400 10800 1 EEST} + {2203549200 7200 0 EET} + {2216250000 10800 1 EEST} + {2234998800 7200 0 EET} + {2248304400 10800 1 EEST} + {2266448400 7200 0 EET} + {2279754000 10800 1 EEST} + {2297898000 7200 0 EET} + {2311203600 10800 1 EEST} + {2329347600 7200 0 EET} + {2342653200 10800 1 EEST} + {2361402000 7200 0 EET} + {2374102800 10800 1 EEST} + {2392851600 7200 0 EET} + {2405552400 10800 1 EEST} + {2424301200 7200 0 EET} + {2437606800 10800 1 EEST} + {2455750800 7200 0 EET} + {2469056400 10800 1 EEST} + {2487200400 7200 0 EET} + {2500506000 10800 1 EEST} + {2519254800 7200 0 EET} + {2531955600 10800 1 EEST} + {2550704400 7200 0 EET} + {2563405200 10800 1 EEST} + {2582154000 7200 0 EET} + {2595459600 10800 1 EEST} + {2613603600 7200 0 EET} + {2626909200 10800 1 EEST} + {2645053200 7200 0 EET} + {2658358800 10800 1 EEST} + {2676502800 7200 0 EET} + {2689808400 10800 1 EEST} + {2708557200 7200 0 EET} + {2721258000 10800 1 EEST} + {2740006800 7200 0 EET} + {2752707600 10800 1 EEST} + {2771456400 7200 0 EET} + {2784762000 10800 1 EEST} + {2802906000 7200 0 EET} + {2816211600 10800 1 EEST} + {2834355600 7200 0 EET} + {2847661200 10800 1 EEST} + {2866410000 7200 0 EET} + {2879110800 10800 1 EEST} + {2897859600 7200 0 EET} + {2910560400 10800 1 EEST} + {2929309200 7200 0 EET} + {2942010000 10800 1 EEST} + {2960758800 7200 0 EET} + {2974064400 10800 1 EEST} + {2992208400 7200 0 EET} + {3005514000 10800 1 EEST} + {3023658000 7200 0 EET} + {3036963600 10800 1 EEST} + {3055712400 7200 0 EET} + {3068413200 10800 1 EEST} + {3087162000 7200 0 EET} + {3099862800 10800 1 EEST} + {3118611600 7200 0 EET} + {3131917200 10800 1 EEST} + {3150061200 7200 0 EET} + {3163366800 10800 1 EEST} + {3181510800 7200 0 EET} + {3194816400 10800 1 EEST} + {3212960400 7200 0 EET} + {3226266000 10800 1 EEST} + {3245014800 7200 0 EET} + {3257715600 10800 1 EEST} + {3276464400 7200 0 EET} + {3289165200 10800 1 EEST} + {3307914000 7200 0 EET} + {3321219600 10800 1 EEST} + {3339363600 7200 0 EET} + {3352669200 10800 1 EEST} + {3370813200 7200 0 EET} + {3384118800 10800 1 EEST} + {3402867600 7200 0 EET} + {3415568400 10800 1 EEST} + {3434317200 7200 0 EET} + {3447018000 10800 1 EEST} + {3465766800 7200 0 EET} + {3479072400 10800 1 EEST} + {3497216400 7200 0 EET} + {3510522000 10800 1 EEST} + {3528666000 7200 0 EET} + {3541971600 10800 1 EEST} + {3560115600 7200 0 EET} + {3573421200 10800 1 EEST} + {3592170000 7200 0 EET} + {3604870800 10800 1 EEST} + {3623619600 7200 0 EET} + {3636320400 10800 1 EEST} + {3655069200 7200 0 EET} + {3668374800 10800 1 EEST} + {3686518800 7200 0 EET} + {3699824400 10800 1 EEST} + {3717968400 7200 0 EET} + {3731274000 10800 1 EEST} + {3750022800 7200 0 EET} + {3762723600 10800 1 EEST} + {3781472400 7200 0 EET} + {3794173200 10800 1 EEST} + {3812922000 7200 0 EET} + {3825622800 10800 1 EEST} + {3844371600 7200 0 EET} + {3857677200 10800 1 EEST} + {3875821200 7200 0 EET} + {3889126800 10800 1 EEST} + {3907270800 7200 0 EET} + {3920576400 10800 1 EEST} + {3939325200 7200 0 EET} + {3952026000 10800 1 EEST} + {3970774800 7200 0 EET} + {3983475600 10800 1 EEST} + {4002224400 7200 0 EET} + {4015530000 10800 1 EEST} + {4033674000 7200 0 EET} + {4046979600 10800 1 EEST} + {4065123600 7200 0 EET} + {4078429200 10800 1 EEST} + {4096573200 7200 0 EET} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Lisbon b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Lisbon new file mode 100644 index 00000000..7168f96c --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Lisbon @@ -0,0 +1,351 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Lisbon) { + {-9223372036854775808 -2205 0 LMT} + {-2713908195 -2205 0 LMT} + {-1830381795 0 0 WET} + {-1689555600 3600 1 WEST} + {-1677801600 0 0 WET} + {-1667437200 3600 1 WEST} + {-1647738000 0 0 WET} + {-1635814800 3600 1 WEST} + {-1616202000 0 0 WET} + {-1604365200 3600 1 WEST} + {-1584666000 0 0 WET} + {-1572742800 3600 1 WEST} + {-1553043600 0 0 WET} + {-1541206800 3600 1 WEST} + {-1521507600 0 0 WET} + {-1442451600 3600 1 WEST} + {-1426813200 0 0 WET} + {-1379293200 3600 1 WEST} + {-1364778000 0 0 WET} + {-1348448400 3600 1 WEST} + {-1333328400 0 0 WET} + {-1316394000 3600 1 WEST} + {-1301274000 0 0 WET} + {-1284339600 3600 1 WEST} + {-1269824400 0 0 WET} + {-1221440400 3600 1 WEST} + {-1206925200 0 0 WET} + {-1191200400 3600 1 WEST} + {-1175475600 0 0 WET} + {-1127696400 3600 1 WEST} + {-1111971600 0 0 WET} + {-1096851600 3600 1 WEST} + {-1080522000 0 0 WET} + {-1063587600 3600 1 WEST} + {-1049072400 0 0 WET} + {-1033347600 3600 1 WEST} + {-1017622800 0 0 WET} + {-1002502800 3600 1 WEST} + {-986173200 0 0 WET} + {-969238800 3600 1 WEST} + {-950490000 0 0 WET} + {-942022800 3600 1 WEST} + {-922669200 0 0 WET} + {-906944400 3600 1 WEST} + {-891133200 0 0 WET} + {-877309200 3600 1 WEST} + {-873684000 7200 1 WEMT} + {-864007200 3600 1 WEST} + {-857955600 0 0 WET} + {-845859600 3600 1 WEST} + {-842839200 7200 1 WEMT} + {-831348000 3600 1 WEST} + {-825901200 0 0 WET} + {-814410000 3600 1 WEST} + {-810784800 7200 1 WEMT} + {-799898400 3600 1 WEST} + {-794451600 0 0 WET} + {-782960400 3600 1 WEST} + {-779335200 7200 1 WEMT} + {-768448800 3600 1 WEST} + {-763002000 0 0 WET} + {-749091600 3600 1 WEST} + {-733366800 0 0 WET} + {-717631200 3600 1 WEST} + {-701906400 0 0 WET} + {-686181600 3600 1 WEST} + {-670456800 0 0 WET} + {-654732000 3600 1 WEST} + {-639007200 0 0 WET} + {-591832800 3600 1 WEST} + {-575503200 0 0 WET} + {-559778400 3600 1 WEST} + {-544053600 0 0 WET} + {-528328800 3600 1 WEST} + {-512604000 0 0 WET} + {-496879200 3600 1 WEST} + {-481154400 0 0 WET} + {-465429600 3600 1 WEST} + {-449704800 0 0 WET} + {-433980000 3600 1 WEST} + {-417650400 0 0 WET} + {-401925600 3600 1 WEST} + {-386200800 0 0 WET} + {-370476000 3600 1 WEST} + {-354751200 0 0 WET} + {-339026400 3600 1 WEST} + {-323301600 0 0 WET} + {-307576800 3600 1 WEST} + {-291852000 0 0 WET} + {-276127200 3600 1 WEST} + {-260402400 0 0 WET} + {-244677600 3600 1 WEST} + {-228348000 0 0 WET} + {-212623200 3600 1 WEST} + {-196898400 0 0 WET} + {-181173600 3600 1 WEST} + {-165448800 0 0 WET} + {-149724000 3600 1 WEST} + {-133999200 0 0 WET} + {-118274400 3600 0 CET} + {212544000 0 0 WET} + {228268800 3600 1 WEST} + {243993600 0 0 WET} + {260323200 3600 1 WEST} + {276048000 0 0 WET} + {291772800 3600 1 WEST} + {307501200 0 0 WET} + {323222400 3600 1 WEST} + {338950800 0 0 WET} + {354675600 3600 1 WEST} + {370400400 0 0 WET} + {386125200 3600 1 WEST} + {401850000 0 0 WET} + {417578400 3600 1 WEST} + {433299600 0 0 WET} + {449024400 3600 1 WEST} + {465354000 0 0 WET} + {481078800 3600 1 WEST} + {496803600 0 0 WET} + {512528400 3600 1 WEST} + {528253200 0 0 WET} + {543978000 3600 1 WEST} + {559702800 0 0 WET} + {575427600 3600 1 WEST} + {591152400 0 0 WET} + {606877200 3600 1 WEST} + {622602000 0 0 WET} + {638326800 3600 1 WEST} + {654656400 0 0 WET} + {670381200 3600 1 WEST} + {686106000 0 0 WET} + {701830800 3600 1 WEST} + {717555600 3600 0 CET} + {733280400 7200 1 CEST} + {749005200 3600 0 CET} + {764730000 7200 1 CEST} + {780454800 3600 0 CET} + {796179600 7200 1 CEST} + {811904400 3600 0 CET} + {828234000 3600 0 WEST} + {846378000 0 0 WET} + {859683600 3600 1 WEST} + {877827600 0 0 WET} + {891133200 3600 1 WEST} + {909277200 0 0 WET} + {922582800 3600 1 WEST} + {941331600 0 0 WET} + {954032400 3600 1 WEST} + {972781200 0 0 WET} + {985482000 3600 1 WEST} + {1004230800 0 0 WET} + {1017536400 3600 1 WEST} + {1035680400 0 0 WET} + {1048986000 3600 1 WEST} + {1067130000 0 0 WET} + {1080435600 3600 1 WEST} + {1099184400 0 0 WET} + {1111885200 3600 1 WEST} + {1130634000 0 0 WET} + {1143334800 3600 1 WEST} + {1162083600 0 0 WET} + {1174784400 3600 1 WEST} + {1193533200 0 0 WET} + {1206838800 3600 1 WEST} + {1224982800 0 0 WET} + {1238288400 3600 1 WEST} + {1256432400 0 0 WET} + {1269738000 3600 1 WEST} + {1288486800 0 0 WET} + {1301187600 3600 1 WEST} + {1319936400 0 0 WET} + {1332637200 3600 1 WEST} + {1351386000 0 0 WET} + {1364691600 3600 1 WEST} + {1382835600 0 0 WET} + {1396141200 3600 1 WEST} + {1414285200 0 0 WET} + {1427590800 3600 1 WEST} + {1445734800 0 0 WET} + {1459040400 3600 1 WEST} + {1477789200 0 0 WET} + {1490490000 3600 1 WEST} + {1509238800 0 0 WET} + {1521939600 3600 1 WEST} + {1540688400 0 0 WET} + {1553994000 3600 1 WEST} + {1572138000 0 0 WET} + {1585443600 3600 1 WEST} + {1603587600 0 0 WET} + {1616893200 3600 1 WEST} + {1635642000 0 0 WET} + {1648342800 3600 1 WEST} + {1667091600 0 0 WET} + {1679792400 3600 1 WEST} + {1698541200 0 0 WET} + {1711846800 3600 1 WEST} + {1729990800 0 0 WET} + {1743296400 3600 1 WEST} + {1761440400 0 0 WET} + {1774746000 3600 1 WEST} + {1792890000 0 0 WET} + {1806195600 3600 1 WEST} + {1824944400 0 0 WET} + {1837645200 3600 1 WEST} + {1856394000 0 0 WET} + {1869094800 3600 1 WEST} + {1887843600 0 0 WET} + {1901149200 3600 1 WEST} + {1919293200 0 0 WET} + {1932598800 3600 1 WEST} + {1950742800 0 0 WET} + {1964048400 3600 1 WEST} + {1982797200 0 0 WET} + {1995498000 3600 1 WEST} + {2014246800 0 0 WET} + {2026947600 3600 1 WEST} + {2045696400 0 0 WET} + {2058397200 3600 1 WEST} + {2077146000 0 0 WET} + {2090451600 3600 1 WEST} + {2108595600 0 0 WET} + {2121901200 3600 1 WEST} + {2140045200 0 0 WET} + {2153350800 3600 1 WEST} + {2172099600 0 0 WET} + {2184800400 3600 1 WEST} + {2203549200 0 0 WET} + {2216250000 3600 1 WEST} + {2234998800 0 0 WET} + {2248304400 3600 1 WEST} + {2266448400 0 0 WET} + {2279754000 3600 1 WEST} + {2297898000 0 0 WET} + {2311203600 3600 1 WEST} + {2329347600 0 0 WET} + {2342653200 3600 1 WEST} + {2361402000 0 0 WET} + {2374102800 3600 1 WEST} + {2392851600 0 0 WET} + {2405552400 3600 1 WEST} + {2424301200 0 0 WET} + {2437606800 3600 1 WEST} + {2455750800 0 0 WET} + {2469056400 3600 1 WEST} + {2487200400 0 0 WET} + {2500506000 3600 1 WEST} + {2519254800 0 0 WET} + {2531955600 3600 1 WEST} + {2550704400 0 0 WET} + {2563405200 3600 1 WEST} + {2582154000 0 0 WET} + {2595459600 3600 1 WEST} + {2613603600 0 0 WET} + {2626909200 3600 1 WEST} + {2645053200 0 0 WET} + {2658358800 3600 1 WEST} + {2676502800 0 0 WET} + {2689808400 3600 1 WEST} + {2708557200 0 0 WET} + {2721258000 3600 1 WEST} + {2740006800 0 0 WET} + {2752707600 3600 1 WEST} + {2771456400 0 0 WET} + {2784762000 3600 1 WEST} + {2802906000 0 0 WET} + {2816211600 3600 1 WEST} + {2834355600 0 0 WET} + {2847661200 3600 1 WEST} + {2866410000 0 0 WET} + {2879110800 3600 1 WEST} + {2897859600 0 0 WET} + {2910560400 3600 1 WEST} + {2929309200 0 0 WET} + {2942010000 3600 1 WEST} + {2960758800 0 0 WET} + {2974064400 3600 1 WEST} + {2992208400 0 0 WET} + {3005514000 3600 1 WEST} + {3023658000 0 0 WET} + {3036963600 3600 1 WEST} + {3055712400 0 0 WET} + {3068413200 3600 1 WEST} + {3087162000 0 0 WET} + {3099862800 3600 1 WEST} + {3118611600 0 0 WET} + {3131917200 3600 1 WEST} + {3150061200 0 0 WET} + {3163366800 3600 1 WEST} + {3181510800 0 0 WET} + {3194816400 3600 1 WEST} + {3212960400 0 0 WET} + {3226266000 3600 1 WEST} + {3245014800 0 0 WET} + {3257715600 3600 1 WEST} + {3276464400 0 0 WET} + {3289165200 3600 1 WEST} + {3307914000 0 0 WET} + {3321219600 3600 1 WEST} + {3339363600 0 0 WET} + {3352669200 3600 1 WEST} + {3370813200 0 0 WET} + {3384118800 3600 1 WEST} + {3402867600 0 0 WET} + {3415568400 3600 1 WEST} + {3434317200 0 0 WET} + {3447018000 3600 1 WEST} + {3465766800 0 0 WET} + {3479072400 3600 1 WEST} + {3497216400 0 0 WET} + {3510522000 3600 1 WEST} + {3528666000 0 0 WET} + {3541971600 3600 1 WEST} + {3560115600 0 0 WET} + {3573421200 3600 1 WEST} + {3592170000 0 0 WET} + {3604870800 3600 1 WEST} + {3623619600 0 0 WET} + {3636320400 3600 1 WEST} + {3655069200 0 0 WET} + {3668374800 3600 1 WEST} + {3686518800 0 0 WET} + {3699824400 3600 1 WEST} + {3717968400 0 0 WET} + {3731274000 3600 1 WEST} + {3750022800 0 0 WET} + {3762723600 3600 1 WEST} + {3781472400 0 0 WET} + {3794173200 3600 1 WEST} + {3812922000 0 0 WET} + {3825622800 3600 1 WEST} + {3844371600 0 0 WET} + {3857677200 3600 1 WEST} + {3875821200 0 0 WET} + {3889126800 3600 1 WEST} + {3907270800 0 0 WET} + {3920576400 3600 1 WEST} + {3939325200 0 0 WET} + {3952026000 3600 1 WEST} + {3970774800 0 0 WET} + {3983475600 3600 1 WEST} + {4002224400 0 0 WET} + {4015530000 3600 1 WEST} + {4033674000 0 0 WET} + {4046979600 3600 1 WEST} + {4065123600 0 0 WET} + {4078429200 3600 1 WEST} + {4096573200 0 0 WET} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Ljubljana b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Ljubljana new file mode 100644 index 00000000..42c7df43 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Ljubljana @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Europe/Belgrade)]} { + LoadTimeZoneFile Europe/Belgrade +} +set TZData(:Europe/Ljubljana) $TZData(:Europe/Belgrade) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/London b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/London new file mode 100644 index 00000000..2014e00e --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/London @@ -0,0 +1,372 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/London) { + {-9223372036854775808 -75 0 LMT} + {-3852662325 0 0 GMT} + {-1691964000 3600 1 BST} + {-1680472800 0 0 GMT} + {-1664143200 3600 1 BST} + {-1650146400 0 0 GMT} + {-1633903200 3600 1 BST} + {-1617487200 0 0 GMT} + {-1601848800 3600 1 BST} + {-1586037600 0 0 GMT} + {-1570399200 3600 1 BST} + {-1552168800 0 0 GMT} + {-1538344800 3600 1 BST} + {-1522533600 0 0 GMT} + {-1507500000 3600 1 BST} + {-1490565600 0 0 GMT} + {-1473631200 3600 1 BST} + {-1460930400 0 0 GMT} + {-1442786400 3600 1 BST} + {-1428876000 0 0 GMT} + {-1410732000 3600 1 BST} + {-1396216800 0 0 GMT} + {-1379282400 3600 1 BST} + {-1364767200 0 0 GMT} + {-1348437600 3600 1 BST} + {-1333317600 0 0 GMT} + {-1315778400 3600 1 BST} + {-1301263200 0 0 GMT} + {-1284328800 3600 1 BST} + {-1269813600 0 0 GMT} + {-1253484000 3600 1 BST} + {-1238364000 0 0 GMT} + {-1221429600 3600 1 BST} + {-1206914400 0 0 GMT} + {-1189980000 3600 1 BST} + {-1175464800 0 0 GMT} + {-1159135200 3600 1 BST} + {-1143410400 0 0 GMT} + {-1126476000 3600 1 BST} + {-1111960800 0 0 GMT} + {-1095631200 3600 1 BST} + {-1080511200 0 0 GMT} + {-1063576800 3600 1 BST} + {-1049061600 0 0 GMT} + {-1032127200 3600 1 BST} + {-1017612000 0 0 GMT} + {-1001282400 3600 1 BST} + {-986162400 0 0 GMT} + {-969228000 3600 1 BST} + {-950479200 0 0 GMT} + {-942012000 3600 1 BST} + {-904518000 7200 1 BDST} + {-896050800 3600 1 BST} + {-875487600 7200 1 BDST} + {-864601200 3600 1 BST} + {-844038000 7200 1 BDST} + {-832546800 3600 1 BST} + {-812588400 7200 1 BDST} + {-798073200 3600 1 BST} + {-781052400 7200 1 BDST} + {-772066800 3600 1 BST} + {-764805600 0 0 GMT} + {-748476000 3600 1 BST} + {-733356000 0 0 GMT} + {-719445600 3600 1 BST} + {-717030000 7200 1 BDST} + {-706748400 3600 1 BST} + {-699487200 0 0 GMT} + {-687996000 3600 1 BST} + {-668037600 0 0 GMT} + {-654732000 3600 1 BST} + {-636588000 0 0 GMT} + {-622072800 3600 1 BST} + {-605743200 0 0 GMT} + {-590623200 3600 1 BST} + {-574293600 0 0 GMT} + {-558568800 3600 1 BST} + {-542239200 0 0 GMT} + {-527119200 3600 1 BST} + {-512604000 0 0 GMT} + {-496274400 3600 1 BST} + {-481154400 0 0 GMT} + {-464220000 3600 1 BST} + {-449704800 0 0 GMT} + {-432165600 3600 1 BST} + {-417650400 0 0 GMT} + {-401320800 3600 1 BST} + {-386200800 0 0 GMT} + {-369266400 3600 1 BST} + {-354751200 0 0 GMT} + {-337816800 3600 1 BST} + {-323301600 0 0 GMT} + {-306972000 3600 1 BST} + {-291852000 0 0 GMT} + {-276732000 3600 1 BST} + {-257983200 0 0 GMT} + {-245282400 3600 1 BST} + {-226533600 0 0 GMT} + {-213228000 3600 1 BST} + {-195084000 0 0 GMT} + {-182383200 3600 1 BST} + {-163634400 0 0 GMT} + {-150933600 3600 1 BST} + {-132184800 0 0 GMT} + {-119484000 3600 1 BST} + {-100735200 0 0 GMT} + {-88034400 3600 1 BST} + {-68680800 0 0 GMT} + {-59004000 3600 1 BST} + {-37238400 3600 0 BST} + {57722400 0 0 GMT} + {69818400 3600 1 BST} + {89172000 0 0 GMT} + {101268000 3600 1 BST} + {120621600 0 0 GMT} + {132717600 3600 1 BST} + {152071200 0 0 GMT} + {164167200 3600 1 BST} + {183520800 0 0 GMT} + {196221600 3600 1 BST} + {214970400 0 0 GMT} + {227671200 3600 1 BST} + {246420000 0 0 GMT} + {259120800 3600 1 BST} + {278474400 0 0 GMT} + {290570400 3600 1 BST} + {309924000 0 0 GMT} + {322020000 3600 1 BST} + {341373600 0 0 GMT} + {354675600 3600 1 BST} + {372819600 0 0 GMT} + {386125200 3600 1 BST} + {404269200 0 0 GMT} + {417574800 3600 1 BST} + {435718800 0 0 GMT} + {449024400 3600 1 BST} + {467773200 0 0 GMT} + {481078800 3600 1 BST} + {499222800 0 0 GMT} + {512528400 3600 1 BST} + {530672400 0 0 GMT} + {543978000 3600 1 BST} + {562122000 0 0 GMT} + {575427600 3600 1 BST} + {593571600 0 0 GMT} + {606877200 3600 1 BST} + {625626000 0 0 GMT} + {638326800 3600 1 BST} + {657075600 0 0 GMT} + {670381200 3600 1 BST} + {688525200 0 0 GMT} + {701830800 3600 1 BST} + {719974800 0 0 GMT} + {733280400 3600 1 BST} + {751424400 0 0 GMT} + {764730000 3600 1 BST} + {782874000 0 0 GMT} + {796179600 3600 1 BST} + {814323600 0 0 GMT} + {820454400 0 0 GMT} + {828234000 3600 1 BST} + {846378000 0 0 GMT} + {859683600 3600 1 BST} + {877827600 0 0 GMT} + {891133200 3600 1 BST} + {909277200 0 0 GMT} + {922582800 3600 1 BST} + {941331600 0 0 GMT} + {954032400 3600 1 BST} + {972781200 0 0 GMT} + {985482000 3600 1 BST} + {1004230800 0 0 GMT} + {1017536400 3600 1 BST} + {1035680400 0 0 GMT} + {1048986000 3600 1 BST} + {1067130000 0 0 GMT} + {1080435600 3600 1 BST} + {1099184400 0 0 GMT} + {1111885200 3600 1 BST} + {1130634000 0 0 GMT} + {1143334800 3600 1 BST} + {1162083600 0 0 GMT} + {1174784400 3600 1 BST} + {1193533200 0 0 GMT} + {1206838800 3600 1 BST} + {1224982800 0 0 GMT} + {1238288400 3600 1 BST} + {1256432400 0 0 GMT} + {1269738000 3600 1 BST} + {1288486800 0 0 GMT} + {1301187600 3600 1 BST} + {1319936400 0 0 GMT} + {1332637200 3600 1 BST} + {1351386000 0 0 GMT} + {1364691600 3600 1 BST} + {1382835600 0 0 GMT} + {1396141200 3600 1 BST} + {1414285200 0 0 GMT} + {1427590800 3600 1 BST} + {1445734800 0 0 GMT} + {1459040400 3600 1 BST} + {1477789200 0 0 GMT} + {1490490000 3600 1 BST} + {1509238800 0 0 GMT} + {1521939600 3600 1 BST} + {1540688400 0 0 GMT} + {1553994000 3600 1 BST} + {1572138000 0 0 GMT} + {1585443600 3600 1 BST} + {1603587600 0 0 GMT} + {1616893200 3600 1 BST} + {1635642000 0 0 GMT} + {1648342800 3600 1 BST} + {1667091600 0 0 GMT} + {1679792400 3600 1 BST} + {1698541200 0 0 GMT} + {1711846800 3600 1 BST} + {1729990800 0 0 GMT} + {1743296400 3600 1 BST} + {1761440400 0 0 GMT} + {1774746000 3600 1 BST} + {1792890000 0 0 GMT} + {1806195600 3600 1 BST} + {1824944400 0 0 GMT} + {1837645200 3600 1 BST} + {1856394000 0 0 GMT} + {1869094800 3600 1 BST} + {1887843600 0 0 GMT} + {1901149200 3600 1 BST} + {1919293200 0 0 GMT} + {1932598800 3600 1 BST} + {1950742800 0 0 GMT} + {1964048400 3600 1 BST} + {1982797200 0 0 GMT} + {1995498000 3600 1 BST} + {2014246800 0 0 GMT} + {2026947600 3600 1 BST} + {2045696400 0 0 GMT} + {2058397200 3600 1 BST} + {2077146000 0 0 GMT} + {2090451600 3600 1 BST} + {2108595600 0 0 GMT} + {2121901200 3600 1 BST} + {2140045200 0 0 GMT} + {2153350800 3600 1 BST} + {2172099600 0 0 GMT} + {2184800400 3600 1 BST} + {2203549200 0 0 GMT} + {2216250000 3600 1 BST} + {2234998800 0 0 GMT} + {2248304400 3600 1 BST} + {2266448400 0 0 GMT} + {2279754000 3600 1 BST} + {2297898000 0 0 GMT} + {2311203600 3600 1 BST} + {2329347600 0 0 GMT} + {2342653200 3600 1 BST} + {2361402000 0 0 GMT} + {2374102800 3600 1 BST} + {2392851600 0 0 GMT} + {2405552400 3600 1 BST} + {2424301200 0 0 GMT} + {2437606800 3600 1 BST} + {2455750800 0 0 GMT} + {2469056400 3600 1 BST} + {2487200400 0 0 GMT} + {2500506000 3600 1 BST} + {2519254800 0 0 GMT} + {2531955600 3600 1 BST} + {2550704400 0 0 GMT} + {2563405200 3600 1 BST} + {2582154000 0 0 GMT} + {2595459600 3600 1 BST} + {2613603600 0 0 GMT} + {2626909200 3600 1 BST} + {2645053200 0 0 GMT} + {2658358800 3600 1 BST} + {2676502800 0 0 GMT} + {2689808400 3600 1 BST} + {2708557200 0 0 GMT} + {2721258000 3600 1 BST} + {2740006800 0 0 GMT} + {2752707600 3600 1 BST} + {2771456400 0 0 GMT} + {2784762000 3600 1 BST} + {2802906000 0 0 GMT} + {2816211600 3600 1 BST} + {2834355600 0 0 GMT} + {2847661200 3600 1 BST} + {2866410000 0 0 GMT} + {2879110800 3600 1 BST} + {2897859600 0 0 GMT} + {2910560400 3600 1 BST} + {2929309200 0 0 GMT} + {2942010000 3600 1 BST} + {2960758800 0 0 GMT} + {2974064400 3600 1 BST} + {2992208400 0 0 GMT} + {3005514000 3600 1 BST} + {3023658000 0 0 GMT} + {3036963600 3600 1 BST} + {3055712400 0 0 GMT} + {3068413200 3600 1 BST} + {3087162000 0 0 GMT} + {3099862800 3600 1 BST} + {3118611600 0 0 GMT} + {3131917200 3600 1 BST} + {3150061200 0 0 GMT} + {3163366800 3600 1 BST} + {3181510800 0 0 GMT} + {3194816400 3600 1 BST} + {3212960400 0 0 GMT} + {3226266000 3600 1 BST} + {3245014800 0 0 GMT} + {3257715600 3600 1 BST} + {3276464400 0 0 GMT} + {3289165200 3600 1 BST} + {3307914000 0 0 GMT} + {3321219600 3600 1 BST} + {3339363600 0 0 GMT} + {3352669200 3600 1 BST} + {3370813200 0 0 GMT} + {3384118800 3600 1 BST} + {3402867600 0 0 GMT} + {3415568400 3600 1 BST} + {3434317200 0 0 GMT} + {3447018000 3600 1 BST} + {3465766800 0 0 GMT} + {3479072400 3600 1 BST} + {3497216400 0 0 GMT} + {3510522000 3600 1 BST} + {3528666000 0 0 GMT} + {3541971600 3600 1 BST} + {3560115600 0 0 GMT} + {3573421200 3600 1 BST} + {3592170000 0 0 GMT} + {3604870800 3600 1 BST} + {3623619600 0 0 GMT} + {3636320400 3600 1 BST} + {3655069200 0 0 GMT} + {3668374800 3600 1 BST} + {3686518800 0 0 GMT} + {3699824400 3600 1 BST} + {3717968400 0 0 GMT} + {3731274000 3600 1 BST} + {3750022800 0 0 GMT} + {3762723600 3600 1 BST} + {3781472400 0 0 GMT} + {3794173200 3600 1 BST} + {3812922000 0 0 GMT} + {3825622800 3600 1 BST} + {3844371600 0 0 GMT} + {3857677200 3600 1 BST} + {3875821200 0 0 GMT} + {3889126800 3600 1 BST} + {3907270800 0 0 GMT} + {3920576400 3600 1 BST} + {3939325200 0 0 GMT} + {3952026000 3600 1 BST} + {3970774800 0 0 GMT} + {3983475600 3600 1 BST} + {4002224400 0 0 GMT} + {4015530000 3600 1 BST} + {4033674000 0 0 GMT} + {4046979600 3600 1 BST} + {4065123600 0 0 GMT} + {4078429200 3600 1 BST} + {4096573200 0 0 GMT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Luxembourg b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Luxembourg new file mode 100644 index 00000000..2a88c4b0 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Luxembourg @@ -0,0 +1,313 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Luxembourg) { + {-9223372036854775808 1476 0 LMT} + {-2069713476 3600 0 CET} + {-1692496800 7200 1 CEST} + {-1680483600 3600 0 CET} + {-1662343200 7200 1 CEST} + {-1650157200 3600 0 CET} + {-1632006000 7200 1 CEST} + {-1618700400 3600 0 CET} + {-1612659600 0 0 WET} + {-1604278800 3600 1 WEST} + {-1585519200 0 0 WET} + {-1574038800 3600 1 WEST} + {-1552258800 0 0 WET} + {-1539997200 3600 1 WEST} + {-1520550000 0 0 WET} + {-1507510800 3600 1 WEST} + {-1490572800 0 0 WET} + {-1473642000 3600 1 WEST} + {-1459119600 0 0 WET} + {-1444006800 3600 1 WEST} + {-1427673600 0 0 WET} + {-1411866000 3600 1 WEST} + {-1396224000 0 0 WET} + {-1379293200 3600 1 WEST} + {-1364774400 0 0 WET} + {-1348448400 3600 1 WEST} + {-1333324800 0 0 WET} + {-1316394000 3600 1 WEST} + {-1301270400 0 0 WET} + {-1284339600 3600 1 WEST} + {-1269813600 0 0 WET} + {-1253484000 3600 1 WEST} + {-1238364000 0 0 WET} + {-1221429600 3600 1 WEST} + {-1206914400 0 0 WET} + {-1191189600 3600 1 WEST} + {-1175464800 0 0 WET} + {-1160344800 3600 1 WEST} + {-1143410400 0 0 WET} + {-1127685600 3600 1 WEST} + {-1111960800 0 0 WET} + {-1096840800 3600 1 WEST} + {-1080511200 0 0 WET} + {-1063576800 3600 1 WEST} + {-1049061600 0 0 WET} + {-1033336800 3600 1 WEST} + {-1017612000 0 0 WET} + {-1002492000 3600 1 WEST} + {-986162400 0 0 WET} + {-969228000 3600 1 WEST} + {-950479200 0 0 WET} + {-942012000 3600 1 WEST} + {-935186400 7200 0 WEST} + {-857257200 3600 0 WET} + {-844556400 7200 1 WEST} + {-828226800 3600 0 WET} + {-812502000 7200 1 WEST} + {-797983200 3600 0 CET} + {-781052400 7200 1 CEST} + {-766623600 3600 0 CET} + {-745455600 7200 1 CEST} + {-733273200 3600 0 CET} + {220921200 3600 0 CET} + {228877200 7200 1 CEST} + {243997200 3600 0 CET} + {260326800 7200 1 CEST} + {276051600 3600 0 CET} + {291776400 7200 1 CEST} + {307501200 3600 0 CET} + {323830800 7200 1 CEST} + {338950800 3600 0 CET} + {354675600 7200 1 CEST} + {370400400 3600 0 CET} + {386125200 7200 1 CEST} + {401850000 3600 0 CET} + {417574800 7200 1 CEST} + {433299600 3600 0 CET} + {449024400 7200 1 CEST} + {465354000 3600 0 CET} + {481078800 7200 1 CEST} + {496803600 3600 0 CET} + {512528400 7200 1 CEST} + {528253200 3600 0 CET} + {543978000 7200 1 CEST} + {559702800 3600 0 CET} + {575427600 7200 1 CEST} + {591152400 3600 0 CET} + {606877200 7200 1 CEST} + {622602000 3600 0 CET} + {638326800 7200 1 CEST} + {654656400 3600 0 CET} + {670381200 7200 1 CEST} + {686106000 3600 0 CET} + {701830800 7200 1 CEST} + {717555600 3600 0 CET} + {733280400 7200 1 CEST} + {749005200 3600 0 CET} + {764730000 7200 1 CEST} + {780454800 3600 0 CET} + {796179600 7200 1 CEST} + {811904400 3600 0 CET} + {828234000 7200 1 CEST} + {846378000 3600 0 CET} + {859683600 7200 1 CEST} + {877827600 3600 0 CET} + {891133200 7200 1 CEST} + {909277200 3600 0 CET} + {922582800 7200 1 CEST} + {941331600 3600 0 CET} + {954032400 7200 1 CEST} + {972781200 3600 0 CET} + {985482000 7200 1 CEST} + {1004230800 3600 0 CET} + {1017536400 7200 1 CEST} + {1035680400 3600 0 CET} + {1048986000 7200 1 CEST} + {1067130000 3600 0 CET} + {1080435600 7200 1 CEST} + {1099184400 3600 0 CET} + {1111885200 7200 1 CEST} + {1130634000 3600 0 CET} + {1143334800 7200 1 CEST} + {1162083600 3600 0 CET} + {1174784400 7200 1 CEST} + {1193533200 3600 0 CET} + {1206838800 7200 1 CEST} + {1224982800 3600 0 CET} + {1238288400 7200 1 CEST} + {1256432400 3600 0 CET} + {1269738000 7200 1 CEST} + {1288486800 3600 0 CET} + {1301187600 7200 1 CEST} + {1319936400 3600 0 CET} + {1332637200 7200 1 CEST} + {1351386000 3600 0 CET} + {1364691600 7200 1 CEST} + {1382835600 3600 0 CET} + {1396141200 7200 1 CEST} + {1414285200 3600 0 CET} + {1427590800 7200 1 CEST} + {1445734800 3600 0 CET} + {1459040400 7200 1 CEST} + {1477789200 3600 0 CET} + {1490490000 7200 1 CEST} + {1509238800 3600 0 CET} + {1521939600 7200 1 CEST} + {1540688400 3600 0 CET} + {1553994000 7200 1 CEST} + {1572138000 3600 0 CET} + {1585443600 7200 1 CEST} + {1603587600 3600 0 CET} + {1616893200 7200 1 CEST} + {1635642000 3600 0 CET} + {1648342800 7200 1 CEST} + {1667091600 3600 0 CET} + {1679792400 7200 1 CEST} + {1698541200 3600 0 CET} + {1711846800 7200 1 CEST} + {1729990800 3600 0 CET} + {1743296400 7200 1 CEST} + {1761440400 3600 0 CET} + {1774746000 7200 1 CEST} + {1792890000 3600 0 CET} + {1806195600 7200 1 CEST} + {1824944400 3600 0 CET} + {1837645200 7200 1 CEST} + {1856394000 3600 0 CET} + {1869094800 7200 1 CEST} + {1887843600 3600 0 CET} + {1901149200 7200 1 CEST} + {1919293200 3600 0 CET} + {1932598800 7200 1 CEST} + {1950742800 3600 0 CET} + {1964048400 7200 1 CEST} + {1982797200 3600 0 CET} + {1995498000 7200 1 CEST} + {2014246800 3600 0 CET} + {2026947600 7200 1 CEST} + {2045696400 3600 0 CET} + {2058397200 7200 1 CEST} + {2077146000 3600 0 CET} + {2090451600 7200 1 CEST} + {2108595600 3600 0 CET} + {2121901200 7200 1 CEST} + {2140045200 3600 0 CET} + {2153350800 7200 1 CEST} + {2172099600 3600 0 CET} + {2184800400 7200 1 CEST} + {2203549200 3600 0 CET} + {2216250000 7200 1 CEST} + {2234998800 3600 0 CET} + {2248304400 7200 1 CEST} + {2266448400 3600 0 CET} + {2279754000 7200 1 CEST} + {2297898000 3600 0 CET} + {2311203600 7200 1 CEST} + {2329347600 3600 0 CET} + {2342653200 7200 1 CEST} + {2361402000 3600 0 CET} + {2374102800 7200 1 CEST} + {2392851600 3600 0 CET} + {2405552400 7200 1 CEST} + {2424301200 3600 0 CET} + {2437606800 7200 1 CEST} + {2455750800 3600 0 CET} + {2469056400 7200 1 CEST} + {2487200400 3600 0 CET} + {2500506000 7200 1 CEST} + {2519254800 3600 0 CET} + {2531955600 7200 1 CEST} + {2550704400 3600 0 CET} + {2563405200 7200 1 CEST} + {2582154000 3600 0 CET} + {2595459600 7200 1 CEST} + {2613603600 3600 0 CET} + {2626909200 7200 1 CEST} + {2645053200 3600 0 CET} + {2658358800 7200 1 CEST} + {2676502800 3600 0 CET} + {2689808400 7200 1 CEST} + {2708557200 3600 0 CET} + {2721258000 7200 1 CEST} + {2740006800 3600 0 CET} + {2752707600 7200 1 CEST} + {2771456400 3600 0 CET} + {2784762000 7200 1 CEST} + {2802906000 3600 0 CET} + {2816211600 7200 1 CEST} + {2834355600 3600 0 CET} + {2847661200 7200 1 CEST} + {2866410000 3600 0 CET} + {2879110800 7200 1 CEST} + {2897859600 3600 0 CET} + {2910560400 7200 1 CEST} + {2929309200 3600 0 CET} + {2942010000 7200 1 CEST} + {2960758800 3600 0 CET} + {2974064400 7200 1 CEST} + {2992208400 3600 0 CET} + {3005514000 7200 1 CEST} + {3023658000 3600 0 CET} + {3036963600 7200 1 CEST} + {3055712400 3600 0 CET} + {3068413200 7200 1 CEST} + {3087162000 3600 0 CET} + {3099862800 7200 1 CEST} + {3118611600 3600 0 CET} + {3131917200 7200 1 CEST} + {3150061200 3600 0 CET} + {3163366800 7200 1 CEST} + {3181510800 3600 0 CET} + {3194816400 7200 1 CEST} + {3212960400 3600 0 CET} + {3226266000 7200 1 CEST} + {3245014800 3600 0 CET} + {3257715600 7200 1 CEST} + {3276464400 3600 0 CET} + {3289165200 7200 1 CEST} + {3307914000 3600 0 CET} + {3321219600 7200 1 CEST} + {3339363600 3600 0 CET} + {3352669200 7200 1 CEST} + {3370813200 3600 0 CET} + {3384118800 7200 1 CEST} + {3402867600 3600 0 CET} + {3415568400 7200 1 CEST} + {3434317200 3600 0 CET} + {3447018000 7200 1 CEST} + {3465766800 3600 0 CET} + {3479072400 7200 1 CEST} + {3497216400 3600 0 CET} + {3510522000 7200 1 CEST} + {3528666000 3600 0 CET} + {3541971600 7200 1 CEST} + {3560115600 3600 0 CET} + {3573421200 7200 1 CEST} + {3592170000 3600 0 CET} + {3604870800 7200 1 CEST} + {3623619600 3600 0 CET} + {3636320400 7200 1 CEST} + {3655069200 3600 0 CET} + {3668374800 7200 1 CEST} + {3686518800 3600 0 CET} + {3699824400 7200 1 CEST} + {3717968400 3600 0 CET} + {3731274000 7200 1 CEST} + {3750022800 3600 0 CET} + {3762723600 7200 1 CEST} + {3781472400 3600 0 CET} + {3794173200 7200 1 CEST} + {3812922000 3600 0 CET} + {3825622800 7200 1 CEST} + {3844371600 3600 0 CET} + {3857677200 7200 1 CEST} + {3875821200 3600 0 CET} + {3889126800 7200 1 CEST} + {3907270800 3600 0 CET} + {3920576400 7200 1 CEST} + {3939325200 3600 0 CET} + {3952026000 7200 1 CEST} + {3970774800 3600 0 CET} + {3983475600 7200 1 CEST} + {4002224400 3600 0 CET} + {4015530000 7200 1 CEST} + {4033674000 3600 0 CET} + {4046979600 7200 1 CEST} + {4065123600 3600 0 CET} + {4078429200 7200 1 CEST} + {4096573200 3600 0 CET} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Madrid b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Madrid new file mode 100644 index 00000000..50de14f0 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Madrid @@ -0,0 +1,294 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Madrid) { + {-9223372036854775808 -884 0 LMT} + {-2177451916 0 0 WET} + {-1661734800 3600 1 WEST} + {-1648429200 0 0 WET} + {-1631926800 3600 1 WEST} + {-1616893200 0 0 WET} + {-1601254800 3600 1 WEST} + {-1585357200 0 0 WET} + {-1442451600 3600 1 WEST} + {-1427677200 0 0 WET} + {-1379293200 3600 1 WEST} + {-1364778000 0 0 WET} + {-1348448400 3600 1 WEST} + {-1333328400 0 0 WET} + {-1316394000 3600 1 WEST} + {-1301274000 0 0 WET} + {-1284339600 3600 1 WEST} + {-1269824400 0 0 WET} + {-1029114000 3600 1 WEST} + {-1017622800 0 0 WET} + {-1002848400 3600 1 WEST} + {-986173200 0 0 WET} + {-969238800 3600 1 WEST} + {-954118800 0 0 WET} + {-940208400 3600 1 WEST} + {-873079200 7200 1 WEMT} + {-862538400 3600 1 WEST} + {-842839200 7200 1 WEMT} + {-828237600 3600 1 WEST} + {-811389600 7200 1 WEMT} + {-796010400 3600 1 WEST} + {-779940000 7200 1 WEMT} + {-765421200 3600 1 WEST} + {-748490400 7200 1 WEMT} + {-733881600 3600 0 CET} + {-652327200 7200 1 CEST} + {-639190800 3600 0 CET} + {135122400 7200 1 CEST} + {150246000 3600 0 CET} + {167176800 7200 1 CEST} + {181695600 3600 0 CET} + {196812000 7200 1 CEST} + {212540400 3600 0 CET} + {228866400 7200 1 CEST} + {243990000 3600 0 CET} + {260402400 7200 1 CEST} + {276044400 3600 0 CET} + {283993200 3600 0 CET} + {291776400 7200 1 CEST} + {307501200 3600 0 CET} + {323830800 7200 1 CEST} + {338950800 3600 0 CET} + {354675600 7200 1 CEST} + {370400400 3600 0 CET} + {386125200 7200 1 CEST} + {401850000 3600 0 CET} + {417574800 7200 1 CEST} + {433299600 3600 0 CET} + {449024400 7200 1 CEST} + {465354000 3600 0 CET} + {481078800 7200 1 CEST} + {496803600 3600 0 CET} + {512528400 7200 1 CEST} + {528253200 3600 0 CET} + {543978000 7200 1 CEST} + {559702800 3600 0 CET} + {575427600 7200 1 CEST} + {591152400 3600 0 CET} + {606877200 7200 1 CEST} + {622602000 3600 0 CET} + {638326800 7200 1 CEST} + {654656400 3600 0 CET} + {670381200 7200 1 CEST} + {686106000 3600 0 CET} + {701830800 7200 1 CEST} + {717555600 3600 0 CET} + {733280400 7200 1 CEST} + {749005200 3600 0 CET} + {764730000 7200 1 CEST} + {780454800 3600 0 CET} + {796179600 7200 1 CEST} + {811904400 3600 0 CET} + {828234000 7200 1 CEST} + {846378000 3600 0 CET} + {859683600 7200 1 CEST} + {877827600 3600 0 CET} + {891133200 7200 1 CEST} + {909277200 3600 0 CET} + {922582800 7200 1 CEST} + {941331600 3600 0 CET} + {954032400 7200 1 CEST} + {972781200 3600 0 CET} + {985482000 7200 1 CEST} + {1004230800 3600 0 CET} + {1017536400 7200 1 CEST} + {1035680400 3600 0 CET} + {1048986000 7200 1 CEST} + {1067130000 3600 0 CET} + {1080435600 7200 1 CEST} + {1099184400 3600 0 CET} + {1111885200 7200 1 CEST} + {1130634000 3600 0 CET} + {1143334800 7200 1 CEST} + {1162083600 3600 0 CET} + {1174784400 7200 1 CEST} + {1193533200 3600 0 CET} + {1206838800 7200 1 CEST} + {1224982800 3600 0 CET} + {1238288400 7200 1 CEST} + {1256432400 3600 0 CET} + {1269738000 7200 1 CEST} + {1288486800 3600 0 CET} + {1301187600 7200 1 CEST} + {1319936400 3600 0 CET} + {1332637200 7200 1 CEST} + {1351386000 3600 0 CET} + {1364691600 7200 1 CEST} + {1382835600 3600 0 CET} + {1396141200 7200 1 CEST} + {1414285200 3600 0 CET} + {1427590800 7200 1 CEST} + {1445734800 3600 0 CET} + {1459040400 7200 1 CEST} + {1477789200 3600 0 CET} + {1490490000 7200 1 CEST} + {1509238800 3600 0 CET} + {1521939600 7200 1 CEST} + {1540688400 3600 0 CET} + {1553994000 7200 1 CEST} + {1572138000 3600 0 CET} + {1585443600 7200 1 CEST} + {1603587600 3600 0 CET} + {1616893200 7200 1 CEST} + {1635642000 3600 0 CET} + {1648342800 7200 1 CEST} + {1667091600 3600 0 CET} + {1679792400 7200 1 CEST} + {1698541200 3600 0 CET} + {1711846800 7200 1 CEST} + {1729990800 3600 0 CET} + {1743296400 7200 1 CEST} + {1761440400 3600 0 CET} + {1774746000 7200 1 CEST} + {1792890000 3600 0 CET} + {1806195600 7200 1 CEST} + {1824944400 3600 0 CET} + {1837645200 7200 1 CEST} + {1856394000 3600 0 CET} + {1869094800 7200 1 CEST} + {1887843600 3600 0 CET} + {1901149200 7200 1 CEST} + {1919293200 3600 0 CET} + {1932598800 7200 1 CEST} + {1950742800 3600 0 CET} + {1964048400 7200 1 CEST} + {1982797200 3600 0 CET} + {1995498000 7200 1 CEST} + {2014246800 3600 0 CET} + {2026947600 7200 1 CEST} + {2045696400 3600 0 CET} + {2058397200 7200 1 CEST} + {2077146000 3600 0 CET} + {2090451600 7200 1 CEST} + {2108595600 3600 0 CET} + {2121901200 7200 1 CEST} + {2140045200 3600 0 CET} + {2153350800 7200 1 CEST} + {2172099600 3600 0 CET} + {2184800400 7200 1 CEST} + {2203549200 3600 0 CET} + {2216250000 7200 1 CEST} + {2234998800 3600 0 CET} + {2248304400 7200 1 CEST} + {2266448400 3600 0 CET} + {2279754000 7200 1 CEST} + {2297898000 3600 0 CET} + {2311203600 7200 1 CEST} + {2329347600 3600 0 CET} + {2342653200 7200 1 CEST} + {2361402000 3600 0 CET} + {2374102800 7200 1 CEST} + {2392851600 3600 0 CET} + {2405552400 7200 1 CEST} + {2424301200 3600 0 CET} + {2437606800 7200 1 CEST} + {2455750800 3600 0 CET} + {2469056400 7200 1 CEST} + {2487200400 3600 0 CET} + {2500506000 7200 1 CEST} + {2519254800 3600 0 CET} + {2531955600 7200 1 CEST} + {2550704400 3600 0 CET} + {2563405200 7200 1 CEST} + {2582154000 3600 0 CET} + {2595459600 7200 1 CEST} + {2613603600 3600 0 CET} + {2626909200 7200 1 CEST} + {2645053200 3600 0 CET} + {2658358800 7200 1 CEST} + {2676502800 3600 0 CET} + {2689808400 7200 1 CEST} + {2708557200 3600 0 CET} + {2721258000 7200 1 CEST} + {2740006800 3600 0 CET} + {2752707600 7200 1 CEST} + {2771456400 3600 0 CET} + {2784762000 7200 1 CEST} + {2802906000 3600 0 CET} + {2816211600 7200 1 CEST} + {2834355600 3600 0 CET} + {2847661200 7200 1 CEST} + {2866410000 3600 0 CET} + {2879110800 7200 1 CEST} + {2897859600 3600 0 CET} + {2910560400 7200 1 CEST} + {2929309200 3600 0 CET} + {2942010000 7200 1 CEST} + {2960758800 3600 0 CET} + {2974064400 7200 1 CEST} + {2992208400 3600 0 CET} + {3005514000 7200 1 CEST} + {3023658000 3600 0 CET} + {3036963600 7200 1 CEST} + {3055712400 3600 0 CET} + {3068413200 7200 1 CEST} + {3087162000 3600 0 CET} + {3099862800 7200 1 CEST} + {3118611600 3600 0 CET} + {3131917200 7200 1 CEST} + {3150061200 3600 0 CET} + {3163366800 7200 1 CEST} + {3181510800 3600 0 CET} + {3194816400 7200 1 CEST} + {3212960400 3600 0 CET} + {3226266000 7200 1 CEST} + {3245014800 3600 0 CET} + {3257715600 7200 1 CEST} + {3276464400 3600 0 CET} + {3289165200 7200 1 CEST} + {3307914000 3600 0 CET} + {3321219600 7200 1 CEST} + {3339363600 3600 0 CET} + {3352669200 7200 1 CEST} + {3370813200 3600 0 CET} + {3384118800 7200 1 CEST} + {3402867600 3600 0 CET} + {3415568400 7200 1 CEST} + {3434317200 3600 0 CET} + {3447018000 7200 1 CEST} + {3465766800 3600 0 CET} + {3479072400 7200 1 CEST} + {3497216400 3600 0 CET} + {3510522000 7200 1 CEST} + {3528666000 3600 0 CET} + {3541971600 7200 1 CEST} + {3560115600 3600 0 CET} + {3573421200 7200 1 CEST} + {3592170000 3600 0 CET} + {3604870800 7200 1 CEST} + {3623619600 3600 0 CET} + {3636320400 7200 1 CEST} + {3655069200 3600 0 CET} + {3668374800 7200 1 CEST} + {3686518800 3600 0 CET} + {3699824400 7200 1 CEST} + {3717968400 3600 0 CET} + {3731274000 7200 1 CEST} + {3750022800 3600 0 CET} + {3762723600 7200 1 CEST} + {3781472400 3600 0 CET} + {3794173200 7200 1 CEST} + {3812922000 3600 0 CET} + {3825622800 7200 1 CEST} + {3844371600 3600 0 CET} + {3857677200 7200 1 CEST} + {3875821200 3600 0 CET} + {3889126800 7200 1 CEST} + {3907270800 3600 0 CET} + {3920576400 7200 1 CEST} + {3939325200 3600 0 CET} + {3952026000 7200 1 CEST} + {3970774800 3600 0 CET} + {3983475600 7200 1 CEST} + {4002224400 3600 0 CET} + {4015530000 7200 1 CEST} + {4033674000 3600 0 CET} + {4046979600 7200 1 CEST} + {4065123600 3600 0 CET} + {4078429200 7200 1 CEST} + {4096573200 3600 0 CET} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Malta b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Malta new file mode 100644 index 00000000..b84f68e5 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Malta @@ -0,0 +1,299 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Malta) { + {-9223372036854775808 3484 0 LMT} + {-2403478684 3600 0 CET} + {-1690851600 7200 1 CEST} + {-1680483600 3600 0 CET} + {-1664758800 7200 1 CEST} + {-1649034000 3600 0 CET} + {-1635123600 7200 1 CEST} + {-1616979600 3600 0 CET} + {-1604278800 7200 1 CEST} + {-1585530000 3600 0 CET} + {-1571014800 7200 1 CEST} + {-1555290000 3600 0 CET} + {-932432400 7200 1 CEST} + {-857257200 3600 0 CET} + {-844556400 7200 1 CEST} + {-828226800 3600 0 CET} + {-812502000 7200 1 CEST} + {-796777200 3600 0 CET} + {-781052400 7200 0 CEST} + {-766717200 3600 0 CET} + {-750898800 7200 1 CEST} + {-733359600 3600 0 CET} + {-719456400 7200 1 CEST} + {-701917200 3600 0 CET} + {-689209200 7200 1 CEST} + {-670460400 3600 0 CET} + {-114051600 7200 1 CEST} + {-103168800 3600 0 CET} + {-81997200 7200 1 CEST} + {-71719200 3600 0 CET} + {-50547600 7200 1 CEST} + {-40269600 3600 0 CET} + {-18493200 7200 1 CEST} + {-8215200 3600 0 CET} + {12956400 7200 1 CEST} + {23234400 3600 0 CET} + {43801200 7200 1 CEST} + {54687600 3600 0 CET} + {75855600 7200 1 CEST} + {86738400 3600 0 CET} + {102380400 7200 0 CEST} + {118105200 3600 0 CET} + {135730800 7200 1 CEST} + {148518000 3600 0 CET} + {167187600 7200 1 CEST} + {180489600 3600 0 CET} + {198637200 7200 1 CEST} + {211939200 3600 0 CET} + {230086800 7200 1 CEST} + {243388800 3600 0 CET} + {261536400 7200 1 CEST} + {274838400 3600 0 CET} + {292986000 7200 1 CEST} + {306288000 3600 0 CET} + {323312400 7200 1 CEST} + {338342400 3600 0 CET} + {347151600 3600 0 CET} + {354675600 7200 1 CEST} + {370400400 3600 0 CET} + {386125200 7200 1 CEST} + {401850000 3600 0 CET} + {417574800 7200 1 CEST} + {433299600 3600 0 CET} + {449024400 7200 1 CEST} + {465354000 3600 0 CET} + {481078800 7200 1 CEST} + {496803600 3600 0 CET} + {512528400 7200 1 CEST} + {528253200 3600 0 CET} + {543978000 7200 1 CEST} + {559702800 3600 0 CET} + {575427600 7200 1 CEST} + {591152400 3600 0 CET} + {606877200 7200 1 CEST} + {622602000 3600 0 CET} + {638326800 7200 1 CEST} + {654656400 3600 0 CET} + {670381200 7200 1 CEST} + {686106000 3600 0 CET} + {701830800 7200 1 CEST} + {717555600 3600 0 CET} + {733280400 7200 1 CEST} + {749005200 3600 0 CET} + {764730000 7200 1 CEST} + {780454800 3600 0 CET} + {796179600 7200 1 CEST} + {811904400 3600 0 CET} + {828234000 7200 1 CEST} + {846378000 3600 0 CET} + {859683600 7200 1 CEST} + {877827600 3600 0 CET} + {891133200 7200 1 CEST} + {909277200 3600 0 CET} + {922582800 7200 1 CEST} + {941331600 3600 0 CET} + {954032400 7200 1 CEST} + {972781200 3600 0 CET} + {985482000 7200 1 CEST} + {1004230800 3600 0 CET} + {1017536400 7200 1 CEST} + {1035680400 3600 0 CET} + {1048986000 7200 1 CEST} + {1067130000 3600 0 CET} + {1080435600 7200 1 CEST} + {1099184400 3600 0 CET} + {1111885200 7200 1 CEST} + {1130634000 3600 0 CET} + {1143334800 7200 1 CEST} + {1162083600 3600 0 CET} + {1174784400 7200 1 CEST} + {1193533200 3600 0 CET} + {1206838800 7200 1 CEST} + {1224982800 3600 0 CET} + {1238288400 7200 1 CEST} + {1256432400 3600 0 CET} + {1269738000 7200 1 CEST} + {1288486800 3600 0 CET} + {1301187600 7200 1 CEST} + {1319936400 3600 0 CET} + {1332637200 7200 1 CEST} + {1351386000 3600 0 CET} + {1364691600 7200 1 CEST} + {1382835600 3600 0 CET} + {1396141200 7200 1 CEST} + {1414285200 3600 0 CET} + {1427590800 7200 1 CEST} + {1445734800 3600 0 CET} + {1459040400 7200 1 CEST} + {1477789200 3600 0 CET} + {1490490000 7200 1 CEST} + {1509238800 3600 0 CET} + {1521939600 7200 1 CEST} + {1540688400 3600 0 CET} + {1553994000 7200 1 CEST} + {1572138000 3600 0 CET} + {1585443600 7200 1 CEST} + {1603587600 3600 0 CET} + {1616893200 7200 1 CEST} + {1635642000 3600 0 CET} + {1648342800 7200 1 CEST} + {1667091600 3600 0 CET} + {1679792400 7200 1 CEST} + {1698541200 3600 0 CET} + {1711846800 7200 1 CEST} + {1729990800 3600 0 CET} + {1743296400 7200 1 CEST} + {1761440400 3600 0 CET} + {1774746000 7200 1 CEST} + {1792890000 3600 0 CET} + {1806195600 7200 1 CEST} + {1824944400 3600 0 CET} + {1837645200 7200 1 CEST} + {1856394000 3600 0 CET} + {1869094800 7200 1 CEST} + {1887843600 3600 0 CET} + {1901149200 7200 1 CEST} + {1919293200 3600 0 CET} + {1932598800 7200 1 CEST} + {1950742800 3600 0 CET} + {1964048400 7200 1 CEST} + {1982797200 3600 0 CET} + {1995498000 7200 1 CEST} + {2014246800 3600 0 CET} + {2026947600 7200 1 CEST} + {2045696400 3600 0 CET} + {2058397200 7200 1 CEST} + {2077146000 3600 0 CET} + {2090451600 7200 1 CEST} + {2108595600 3600 0 CET} + {2121901200 7200 1 CEST} + {2140045200 3600 0 CET} + {2153350800 7200 1 CEST} + {2172099600 3600 0 CET} + {2184800400 7200 1 CEST} + {2203549200 3600 0 CET} + {2216250000 7200 1 CEST} + {2234998800 3600 0 CET} + {2248304400 7200 1 CEST} + {2266448400 3600 0 CET} + {2279754000 7200 1 CEST} + {2297898000 3600 0 CET} + {2311203600 7200 1 CEST} + {2329347600 3600 0 CET} + {2342653200 7200 1 CEST} + {2361402000 3600 0 CET} + {2374102800 7200 1 CEST} + {2392851600 3600 0 CET} + {2405552400 7200 1 CEST} + {2424301200 3600 0 CET} + {2437606800 7200 1 CEST} + {2455750800 3600 0 CET} + {2469056400 7200 1 CEST} + {2487200400 3600 0 CET} + {2500506000 7200 1 CEST} + {2519254800 3600 0 CET} + {2531955600 7200 1 CEST} + {2550704400 3600 0 CET} + {2563405200 7200 1 CEST} + {2582154000 3600 0 CET} + {2595459600 7200 1 CEST} + {2613603600 3600 0 CET} + {2626909200 7200 1 CEST} + {2645053200 3600 0 CET} + {2658358800 7200 1 CEST} + {2676502800 3600 0 CET} + {2689808400 7200 1 CEST} + {2708557200 3600 0 CET} + {2721258000 7200 1 CEST} + {2740006800 3600 0 CET} + {2752707600 7200 1 CEST} + {2771456400 3600 0 CET} + {2784762000 7200 1 CEST} + {2802906000 3600 0 CET} + {2816211600 7200 1 CEST} + {2834355600 3600 0 CET} + {2847661200 7200 1 CEST} + {2866410000 3600 0 CET} + {2879110800 7200 1 CEST} + {2897859600 3600 0 CET} + {2910560400 7200 1 CEST} + {2929309200 3600 0 CET} + {2942010000 7200 1 CEST} + {2960758800 3600 0 CET} + {2974064400 7200 1 CEST} + {2992208400 3600 0 CET} + {3005514000 7200 1 CEST} + {3023658000 3600 0 CET} + {3036963600 7200 1 CEST} + {3055712400 3600 0 CET} + {3068413200 7200 1 CEST} + {3087162000 3600 0 CET} + {3099862800 7200 1 CEST} + {3118611600 3600 0 CET} + {3131917200 7200 1 CEST} + {3150061200 3600 0 CET} + {3163366800 7200 1 CEST} + {3181510800 3600 0 CET} + {3194816400 7200 1 CEST} + {3212960400 3600 0 CET} + {3226266000 7200 1 CEST} + {3245014800 3600 0 CET} + {3257715600 7200 1 CEST} + {3276464400 3600 0 CET} + {3289165200 7200 1 CEST} + {3307914000 3600 0 CET} + {3321219600 7200 1 CEST} + {3339363600 3600 0 CET} + {3352669200 7200 1 CEST} + {3370813200 3600 0 CET} + {3384118800 7200 1 CEST} + {3402867600 3600 0 CET} + {3415568400 7200 1 CEST} + {3434317200 3600 0 CET} + {3447018000 7200 1 CEST} + {3465766800 3600 0 CET} + {3479072400 7200 1 CEST} + {3497216400 3600 0 CET} + {3510522000 7200 1 CEST} + {3528666000 3600 0 CET} + {3541971600 7200 1 CEST} + {3560115600 3600 0 CET} + {3573421200 7200 1 CEST} + {3592170000 3600 0 CET} + {3604870800 7200 1 CEST} + {3623619600 3600 0 CET} + {3636320400 7200 1 CEST} + {3655069200 3600 0 CET} + {3668374800 7200 1 CEST} + {3686518800 3600 0 CET} + {3699824400 7200 1 CEST} + {3717968400 3600 0 CET} + {3731274000 7200 1 CEST} + {3750022800 3600 0 CET} + {3762723600 7200 1 CEST} + {3781472400 3600 0 CET} + {3794173200 7200 1 CEST} + {3812922000 3600 0 CET} + {3825622800 7200 1 CEST} + {3844371600 3600 0 CET} + {3857677200 7200 1 CEST} + {3875821200 3600 0 CET} + {3889126800 7200 1 CEST} + {3907270800 3600 0 CET} + {3920576400 7200 1 CEST} + {3939325200 3600 0 CET} + {3952026000 7200 1 CEST} + {3970774800 3600 0 CET} + {3983475600 7200 1 CEST} + {4002224400 3600 0 CET} + {4015530000 7200 1 CEST} + {4033674000 3600 0 CET} + {4046979600 7200 1 CEST} + {4065123600 3600 0 CET} + {4078429200 7200 1 CEST} + {4096573200 3600 0 CET} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Mariehamn b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Mariehamn new file mode 100644 index 00000000..26d9177b --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Mariehamn @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Europe/Helsinki)]} { + LoadTimeZoneFile Europe/Helsinki +} +set TZData(:Europe/Mariehamn) $TZData(:Europe/Helsinki) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Minsk b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Minsk new file mode 100644 index 00000000..0acb4aa9 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Minsk @@ -0,0 +1,75 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Minsk) { + {-9223372036854775808 6616 0 LMT} + {-2840147416 6600 0 MMT} + {-1441158600 7200 0 EET} + {-1247536800 10800 0 MSK} + {-899780400 3600 0 CET} + {-857257200 3600 0 CET} + {-844556400 7200 1 CEST} + {-828226800 3600 0 CET} + {-812502000 7200 1 CEST} + {-804646800 10800 0 MSD} + {354920400 14400 1 MSD} + {370728000 10800 0 MSK} + {386456400 14400 1 MSD} + {402264000 10800 0 MSK} + {417992400 14400 1 MSD} + {433800000 10800 0 MSK} + {449614800 14400 1 MSD} + {465346800 10800 0 MSK} + {481071600 14400 1 MSD} + {496796400 10800 0 MSK} + {512521200 14400 1 MSD} + {528246000 10800 0 MSK} + {543970800 14400 1 MSD} + {559695600 10800 0 MSK} + {575420400 14400 1 MSD} + {591145200 10800 0 MSK} + {606870000 14400 1 MSD} + {622594800 10800 0 MSK} + {631141200 10800 0 MSK} + {670374000 10800 1 EEST} + {686102400 7200 0 EET} + {701820000 10800 1 EEST} + {717544800 7200 0 EET} + {733276800 10800 1 EEST} + {749001600 7200 0 EET} + {764726400 10800 1 EEST} + {780451200 7200 0 EET} + {796176000 10800 1 EEST} + {811900800 7200 0 EET} + {828230400 10800 1 EEST} + {846374400 7200 0 EET} + {859680000 10800 1 EEST} + {877824000 7200 0 EET} + {891129600 10800 1 EEST} + {909273600 7200 0 EET} + {922579200 10800 1 EEST} + {941328000 7200 0 EET} + {954028800 10800 1 EEST} + {972777600 7200 0 EET} + {985478400 10800 1 EEST} + {1004227200 7200 0 EET} + {1017532800 10800 1 EEST} + {1035676800 7200 0 EET} + {1048982400 10800 1 EEST} + {1067126400 7200 0 EET} + {1080432000 10800 1 EEST} + {1099180800 7200 0 EET} + {1111881600 10800 1 EEST} + {1130630400 7200 0 EET} + {1143331200 10800 1 EEST} + {1162080000 7200 0 EET} + {1174780800 10800 1 EEST} + {1193529600 7200 0 EET} + {1206835200 10800 1 EEST} + {1224979200 7200 0 EET} + {1238284800 10800 1 EEST} + {1256428800 7200 0 EET} + {1269734400 10800 1 EEST} + {1288483200 7200 0 EET} + {1301184000 10800 0 FET} + {1414274400 10800 0 MSK} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Monaco b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Monaco new file mode 100644 index 00000000..f887b0b6 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Monaco @@ -0,0 +1,315 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Monaco) { + {-9223372036854775808 1772 0 LMT} + {-2486680172 561 0 PMT} + {-1855958961 0 0 WET} + {-1689814800 3600 1 WEST} + {-1680397200 0 0 WET} + {-1665363600 3600 1 WEST} + {-1648342800 0 0 WET} + {-1635123600 3600 1 WEST} + {-1616893200 0 0 WET} + {-1604278800 3600 1 WEST} + {-1585443600 0 0 WET} + {-1574038800 3600 1 WEST} + {-1552266000 0 0 WET} + {-1539997200 3600 1 WEST} + {-1520557200 0 0 WET} + {-1507510800 3600 1 WEST} + {-1490576400 0 0 WET} + {-1470618000 3600 1 WEST} + {-1459126800 0 0 WET} + {-1444006800 3600 1 WEST} + {-1427677200 0 0 WET} + {-1411952400 3600 1 WEST} + {-1396227600 0 0 WET} + {-1379293200 3600 1 WEST} + {-1364778000 0 0 WET} + {-1348448400 3600 1 WEST} + {-1333328400 0 0 WET} + {-1316394000 3600 1 WEST} + {-1301274000 0 0 WET} + {-1284339600 3600 1 WEST} + {-1269824400 0 0 WET} + {-1253494800 3600 1 WEST} + {-1238374800 0 0 WET} + {-1221440400 3600 1 WEST} + {-1206925200 0 0 WET} + {-1191200400 3600 1 WEST} + {-1175475600 0 0 WET} + {-1160355600 3600 1 WEST} + {-1143421200 0 0 WET} + {-1127696400 3600 1 WEST} + {-1111971600 0 0 WET} + {-1096851600 3600 1 WEST} + {-1080522000 0 0 WET} + {-1063587600 3600 1 WEST} + {-1049072400 0 0 WET} + {-1033347600 3600 1 WEST} + {-1017622800 0 0 WET} + {-1002502800 3600 1 WEST} + {-986173200 0 0 WET} + {-969238800 3600 1 WEST} + {-950490000 0 0 WET} + {-942012000 3600 1 WEST} + {-904438800 7200 1 WEMT} + {-891136800 3600 1 WEST} + {-877827600 7200 1 WEMT} + {-857257200 3600 1 WEST} + {-844556400 7200 1 WEMT} + {-828226800 3600 1 WEST} + {-812502000 7200 1 WEMT} + {-796266000 3600 1 WEST} + {-781052400 7200 1 WEMT} + {-766616400 3600 0 CET} + {196819200 7200 1 CEST} + {212540400 3600 0 CET} + {220921200 3600 0 CET} + {228877200 7200 1 CEST} + {243997200 3600 0 CET} + {260326800 7200 1 CEST} + {276051600 3600 0 CET} + {291776400 7200 1 CEST} + {307501200 3600 0 CET} + {323830800 7200 1 CEST} + {338950800 3600 0 CET} + {354675600 7200 1 CEST} + {370400400 3600 0 CET} + {386125200 7200 1 CEST} + {401850000 3600 0 CET} + {417574800 7200 1 CEST} + {433299600 3600 0 CET} + {449024400 7200 1 CEST} + {465354000 3600 0 CET} + {481078800 7200 1 CEST} + {496803600 3600 0 CET} + {512528400 7200 1 CEST} + {528253200 3600 0 CET} + {543978000 7200 1 CEST} + {559702800 3600 0 CET} + {575427600 7200 1 CEST} + {591152400 3600 0 CET} + {606877200 7200 1 CEST} + {622602000 3600 0 CET} + {638326800 7200 1 CEST} + {654656400 3600 0 CET} + {670381200 7200 1 CEST} + {686106000 3600 0 CET} + {701830800 7200 1 CEST} + {717555600 3600 0 CET} + {733280400 7200 1 CEST} + {749005200 3600 0 CET} + {764730000 7200 1 CEST} + {780454800 3600 0 CET} + {796179600 7200 1 CEST} + {811904400 3600 0 CET} + {828234000 7200 1 CEST} + {846378000 3600 0 CET} + {859683600 7200 1 CEST} + {877827600 3600 0 CET} + {891133200 7200 1 CEST} + {909277200 3600 0 CET} + {922582800 7200 1 CEST} + {941331600 3600 0 CET} + {954032400 7200 1 CEST} + {972781200 3600 0 CET} + {985482000 7200 1 CEST} + {1004230800 3600 0 CET} + {1017536400 7200 1 CEST} + {1035680400 3600 0 CET} + {1048986000 7200 1 CEST} + {1067130000 3600 0 CET} + {1080435600 7200 1 CEST} + {1099184400 3600 0 CET} + {1111885200 7200 1 CEST} + {1130634000 3600 0 CET} + {1143334800 7200 1 CEST} + {1162083600 3600 0 CET} + {1174784400 7200 1 CEST} + {1193533200 3600 0 CET} + {1206838800 7200 1 CEST} + {1224982800 3600 0 CET} + {1238288400 7200 1 CEST} + {1256432400 3600 0 CET} + {1269738000 7200 1 CEST} + {1288486800 3600 0 CET} + {1301187600 7200 1 CEST} + {1319936400 3600 0 CET} + {1332637200 7200 1 CEST} + {1351386000 3600 0 CET} + {1364691600 7200 1 CEST} + {1382835600 3600 0 CET} + {1396141200 7200 1 CEST} + {1414285200 3600 0 CET} + {1427590800 7200 1 CEST} + {1445734800 3600 0 CET} + {1459040400 7200 1 CEST} + {1477789200 3600 0 CET} + {1490490000 7200 1 CEST} + {1509238800 3600 0 CET} + {1521939600 7200 1 CEST} + {1540688400 3600 0 CET} + {1553994000 7200 1 CEST} + {1572138000 3600 0 CET} + {1585443600 7200 1 CEST} + {1603587600 3600 0 CET} + {1616893200 7200 1 CEST} + {1635642000 3600 0 CET} + {1648342800 7200 1 CEST} + {1667091600 3600 0 CET} + {1679792400 7200 1 CEST} + {1698541200 3600 0 CET} + {1711846800 7200 1 CEST} + {1729990800 3600 0 CET} + {1743296400 7200 1 CEST} + {1761440400 3600 0 CET} + {1774746000 7200 1 CEST} + {1792890000 3600 0 CET} + {1806195600 7200 1 CEST} + {1824944400 3600 0 CET} + {1837645200 7200 1 CEST} + {1856394000 3600 0 CET} + {1869094800 7200 1 CEST} + {1887843600 3600 0 CET} + {1901149200 7200 1 CEST} + {1919293200 3600 0 CET} + {1932598800 7200 1 CEST} + {1950742800 3600 0 CET} + {1964048400 7200 1 CEST} + {1982797200 3600 0 CET} + {1995498000 7200 1 CEST} + {2014246800 3600 0 CET} + {2026947600 7200 1 CEST} + {2045696400 3600 0 CET} + {2058397200 7200 1 CEST} + {2077146000 3600 0 CET} + {2090451600 7200 1 CEST} + {2108595600 3600 0 CET} + {2121901200 7200 1 CEST} + {2140045200 3600 0 CET} + {2153350800 7200 1 CEST} + {2172099600 3600 0 CET} + {2184800400 7200 1 CEST} + {2203549200 3600 0 CET} + {2216250000 7200 1 CEST} + {2234998800 3600 0 CET} + {2248304400 7200 1 CEST} + {2266448400 3600 0 CET} + {2279754000 7200 1 CEST} + {2297898000 3600 0 CET} + {2311203600 7200 1 CEST} + {2329347600 3600 0 CET} + {2342653200 7200 1 CEST} + {2361402000 3600 0 CET} + {2374102800 7200 1 CEST} + {2392851600 3600 0 CET} + {2405552400 7200 1 CEST} + {2424301200 3600 0 CET} + {2437606800 7200 1 CEST} + {2455750800 3600 0 CET} + {2469056400 7200 1 CEST} + {2487200400 3600 0 CET} + {2500506000 7200 1 CEST} + {2519254800 3600 0 CET} + {2531955600 7200 1 CEST} + {2550704400 3600 0 CET} + {2563405200 7200 1 CEST} + {2582154000 3600 0 CET} + {2595459600 7200 1 CEST} + {2613603600 3600 0 CET} + {2626909200 7200 1 CEST} + {2645053200 3600 0 CET} + {2658358800 7200 1 CEST} + {2676502800 3600 0 CET} + {2689808400 7200 1 CEST} + {2708557200 3600 0 CET} + {2721258000 7200 1 CEST} + {2740006800 3600 0 CET} + {2752707600 7200 1 CEST} + {2771456400 3600 0 CET} + {2784762000 7200 1 CEST} + {2802906000 3600 0 CET} + {2816211600 7200 1 CEST} + {2834355600 3600 0 CET} + {2847661200 7200 1 CEST} + {2866410000 3600 0 CET} + {2879110800 7200 1 CEST} + {2897859600 3600 0 CET} + {2910560400 7200 1 CEST} + {2929309200 3600 0 CET} + {2942010000 7200 1 CEST} + {2960758800 3600 0 CET} + {2974064400 7200 1 CEST} + {2992208400 3600 0 CET} + {3005514000 7200 1 CEST} + {3023658000 3600 0 CET} + {3036963600 7200 1 CEST} + {3055712400 3600 0 CET} + {3068413200 7200 1 CEST} + {3087162000 3600 0 CET} + {3099862800 7200 1 CEST} + {3118611600 3600 0 CET} + {3131917200 7200 1 CEST} + {3150061200 3600 0 CET} + {3163366800 7200 1 CEST} + {3181510800 3600 0 CET} + {3194816400 7200 1 CEST} + {3212960400 3600 0 CET} + {3226266000 7200 1 CEST} + {3245014800 3600 0 CET} + {3257715600 7200 1 CEST} + {3276464400 3600 0 CET} + {3289165200 7200 1 CEST} + {3307914000 3600 0 CET} + {3321219600 7200 1 CEST} + {3339363600 3600 0 CET} + {3352669200 7200 1 CEST} + {3370813200 3600 0 CET} + {3384118800 7200 1 CEST} + {3402867600 3600 0 CET} + {3415568400 7200 1 CEST} + {3434317200 3600 0 CET} + {3447018000 7200 1 CEST} + {3465766800 3600 0 CET} + {3479072400 7200 1 CEST} + {3497216400 3600 0 CET} + {3510522000 7200 1 CEST} + {3528666000 3600 0 CET} + {3541971600 7200 1 CEST} + {3560115600 3600 0 CET} + {3573421200 7200 1 CEST} + {3592170000 3600 0 CET} + {3604870800 7200 1 CEST} + {3623619600 3600 0 CET} + {3636320400 7200 1 CEST} + {3655069200 3600 0 CET} + {3668374800 7200 1 CEST} + {3686518800 3600 0 CET} + {3699824400 7200 1 CEST} + {3717968400 3600 0 CET} + {3731274000 7200 1 CEST} + {3750022800 3600 0 CET} + {3762723600 7200 1 CEST} + {3781472400 3600 0 CET} + {3794173200 7200 1 CEST} + {3812922000 3600 0 CET} + {3825622800 7200 1 CEST} + {3844371600 3600 0 CET} + {3857677200 7200 1 CEST} + {3875821200 3600 0 CET} + {3889126800 7200 1 CEST} + {3907270800 3600 0 CET} + {3920576400 7200 1 CEST} + {3939325200 3600 0 CET} + {3952026000 7200 1 CEST} + {3970774800 3600 0 CET} + {3983475600 7200 1 CEST} + {4002224400 3600 0 CET} + {4015530000 7200 1 CEST} + {4033674000 3600 0 CET} + {4046979600 7200 1 CEST} + {4065123600 3600 0 CET} + {4078429200 7200 1 CEST} + {4096573200 3600 0 CET} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Moscow b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Moscow new file mode 100644 index 00000000..686b3d01 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Moscow @@ -0,0 +1,83 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Moscow) { + {-9223372036854775808 9017 0 LMT} + {-2840149817 9017 0 MMT} + {-1688265017 9079 0 MMT} + {-1656819079 12679 1 MST} + {-1641353479 9079 0 MMT} + {-1627965079 16279 1 MDST} + {-1618716679 12679 1 MST} + {-1596429079 16279 1 MDST} + {-1593822679 14400 0 MSD} + {-1589860800 10800 0 MSK} + {-1542427200 14400 1 MSD} + {-1539493200 18000 1 MSM} + {-1525323600 14400 1 MSD} + {-1491188400 7200 0 EET} + {-1247536800 10800 0 MSD} + {354920400 14400 1 MSD} + {370728000 10800 0 MSK} + {386456400 14400 1 MSD} + {402264000 10800 0 MSK} + {417992400 14400 1 MSD} + {433800000 10800 0 MSK} + {449614800 14400 1 MSD} + {465346800 10800 0 MSK} + {481071600 14400 1 MSD} + {496796400 10800 0 MSK} + {512521200 14400 1 MSD} + {528246000 10800 0 MSK} + {543970800 14400 1 MSD} + {559695600 10800 0 MSK} + {575420400 14400 1 MSD} + {591145200 10800 0 MSK} + {606870000 14400 1 MSD} + {622594800 10800 0 MSK} + {638319600 14400 1 MSD} + {654649200 10800 0 MSK} + {670374000 7200 0 EEMMTT} + {670377600 10800 1 EEST} + {686102400 7200 0 EET} + {695779200 10800 0 MSD} + {701812800 14400 1 MSD} + {717534000 10800 0 MSK} + {733273200 14400 1 MSD} + {748998000 10800 0 MSK} + {764722800 14400 1 MSD} + {780447600 10800 0 MSK} + {796172400 14400 1 MSD} + {811897200 10800 0 MSK} + {828226800 14400 1 MSD} + {846370800 10800 0 MSK} + {859676400 14400 1 MSD} + {877820400 10800 0 MSK} + {891126000 14400 1 MSD} + {909270000 10800 0 MSK} + {922575600 14400 1 MSD} + {941324400 10800 0 MSK} + {954025200 14400 1 MSD} + {972774000 10800 0 MSK} + {985474800 14400 1 MSD} + {1004223600 10800 0 MSK} + {1017529200 14400 1 MSD} + {1035673200 10800 0 MSK} + {1048978800 14400 1 MSD} + {1067122800 10800 0 MSK} + {1080428400 14400 1 MSD} + {1099177200 10800 0 MSK} + {1111878000 14400 1 MSD} + {1130626800 10800 0 MSK} + {1143327600 14400 1 MSD} + {1162076400 10800 0 MSK} + {1174777200 14400 1 MSD} + {1193526000 10800 0 MSK} + {1206831600 14400 1 MSD} + {1224975600 10800 0 MSK} + {1238281200 14400 1 MSD} + {1256425200 10800 0 MSK} + {1269730800 14400 1 MSD} + {1288479600 10800 0 MSK} + {1301180400 14400 0 MSK} + {1414274400 10800 0 MSK} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Nicosia b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Nicosia new file mode 100644 index 00000000..2d58355a --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Nicosia @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Asia/Nicosia)]} { + LoadTimeZoneFile Asia/Nicosia +} +set TZData(:Europe/Nicosia) $TZData(:Asia/Nicosia) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Oslo b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Oslo new file mode 100644 index 00000000..6787c1eb --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Oslo @@ -0,0 +1,271 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Oslo) { + {-9223372036854775808 2580 0 LMT} + {-2366757780 3600 0 CET} + {-1691884800 7200 1 CEST} + {-1680573600 3600 0 CET} + {-927511200 7200 0 CEST} + {-857257200 3600 0 CET} + {-844556400 7200 1 CEST} + {-828226800 3600 0 CET} + {-812502000 7200 1 CEST} + {-796777200 3600 0 CET} + {-781052400 7200 0 CEST} + {-765327600 3600 0 CET} + {-340844400 7200 1 CEST} + {-324514800 3600 0 CET} + {-308790000 7200 1 CEST} + {-293065200 3600 0 CET} + {-277340400 7200 1 CEST} + {-261615600 3600 0 CET} + {-245890800 7200 1 CEST} + {-230166000 3600 0 CET} + {-214441200 7200 1 CEST} + {-198716400 3600 0 CET} + {-182991600 7200 1 CEST} + {-166662000 3600 0 CET} + {-147913200 7200 1 CEST} + {-135212400 3600 0 CET} + {315529200 3600 0 CET} + {323830800 7200 1 CEST} + {338950800 3600 0 CET} + {354675600 7200 1 CEST} + {370400400 3600 0 CET} + {386125200 7200 1 CEST} + {401850000 3600 0 CET} + {417574800 7200 1 CEST} + {433299600 3600 0 CET} + {449024400 7200 1 CEST} + {465354000 3600 0 CET} + {481078800 7200 1 CEST} + {496803600 3600 0 CET} + {512528400 7200 1 CEST} + {528253200 3600 0 CET} + {543978000 7200 1 CEST} + {559702800 3600 0 CET} + {575427600 7200 1 CEST} + {591152400 3600 0 CET} + {606877200 7200 1 CEST} + {622602000 3600 0 CET} + {638326800 7200 1 CEST} + {654656400 3600 0 CET} + {670381200 7200 1 CEST} + {686106000 3600 0 CET} + {701830800 7200 1 CEST} + {717555600 3600 0 CET} + {733280400 7200 1 CEST} + {749005200 3600 0 CET} + {764730000 7200 1 CEST} + {780454800 3600 0 CET} + {796179600 7200 1 CEST} + {811904400 3600 0 CET} + {828234000 7200 1 CEST} + {846378000 3600 0 CET} + {859683600 7200 1 CEST} + {877827600 3600 0 CET} + {891133200 7200 1 CEST} + {909277200 3600 0 CET} + {922582800 7200 1 CEST} + {941331600 3600 0 CET} + {954032400 7200 1 CEST} + {972781200 3600 0 CET} + {985482000 7200 1 CEST} + {1004230800 3600 0 CET} + {1017536400 7200 1 CEST} + {1035680400 3600 0 CET} + {1048986000 7200 1 CEST} + {1067130000 3600 0 CET} + {1080435600 7200 1 CEST} + {1099184400 3600 0 CET} + {1111885200 7200 1 CEST} + {1130634000 3600 0 CET} + {1143334800 7200 1 CEST} + {1162083600 3600 0 CET} + {1174784400 7200 1 CEST} + {1193533200 3600 0 CET} + {1206838800 7200 1 CEST} + {1224982800 3600 0 CET} + {1238288400 7200 1 CEST} + {1256432400 3600 0 CET} + {1269738000 7200 1 CEST} + {1288486800 3600 0 CET} + {1301187600 7200 1 CEST} + {1319936400 3600 0 CET} + {1332637200 7200 1 CEST} + {1351386000 3600 0 CET} + {1364691600 7200 1 CEST} + {1382835600 3600 0 CET} + {1396141200 7200 1 CEST} + {1414285200 3600 0 CET} + {1427590800 7200 1 CEST} + {1445734800 3600 0 CET} + {1459040400 7200 1 CEST} + {1477789200 3600 0 CET} + {1490490000 7200 1 CEST} + {1509238800 3600 0 CET} + {1521939600 7200 1 CEST} + {1540688400 3600 0 CET} + {1553994000 7200 1 CEST} + {1572138000 3600 0 CET} + {1585443600 7200 1 CEST} + {1603587600 3600 0 CET} + {1616893200 7200 1 CEST} + {1635642000 3600 0 CET} + {1648342800 7200 1 CEST} + {1667091600 3600 0 CET} + {1679792400 7200 1 CEST} + {1698541200 3600 0 CET} + {1711846800 7200 1 CEST} + {1729990800 3600 0 CET} + {1743296400 7200 1 CEST} + {1761440400 3600 0 CET} + {1774746000 7200 1 CEST} + {1792890000 3600 0 CET} + {1806195600 7200 1 CEST} + {1824944400 3600 0 CET} + {1837645200 7200 1 CEST} + {1856394000 3600 0 CET} + {1869094800 7200 1 CEST} + {1887843600 3600 0 CET} + {1901149200 7200 1 CEST} + {1919293200 3600 0 CET} + {1932598800 7200 1 CEST} + {1950742800 3600 0 CET} + {1964048400 7200 1 CEST} + {1982797200 3600 0 CET} + {1995498000 7200 1 CEST} + {2014246800 3600 0 CET} + {2026947600 7200 1 CEST} + {2045696400 3600 0 CET} + {2058397200 7200 1 CEST} + {2077146000 3600 0 CET} + {2090451600 7200 1 CEST} + {2108595600 3600 0 CET} + {2121901200 7200 1 CEST} + {2140045200 3600 0 CET} + {2153350800 7200 1 CEST} + {2172099600 3600 0 CET} + {2184800400 7200 1 CEST} + {2203549200 3600 0 CET} + {2216250000 7200 1 CEST} + {2234998800 3600 0 CET} + {2248304400 7200 1 CEST} + {2266448400 3600 0 CET} + {2279754000 7200 1 CEST} + {2297898000 3600 0 CET} + {2311203600 7200 1 CEST} + {2329347600 3600 0 CET} + {2342653200 7200 1 CEST} + {2361402000 3600 0 CET} + {2374102800 7200 1 CEST} + {2392851600 3600 0 CET} + {2405552400 7200 1 CEST} + {2424301200 3600 0 CET} + {2437606800 7200 1 CEST} + {2455750800 3600 0 CET} + {2469056400 7200 1 CEST} + {2487200400 3600 0 CET} + {2500506000 7200 1 CEST} + {2519254800 3600 0 CET} + {2531955600 7200 1 CEST} + {2550704400 3600 0 CET} + {2563405200 7200 1 CEST} + {2582154000 3600 0 CET} + {2595459600 7200 1 CEST} + {2613603600 3600 0 CET} + {2626909200 7200 1 CEST} + {2645053200 3600 0 CET} + {2658358800 7200 1 CEST} + {2676502800 3600 0 CET} + {2689808400 7200 1 CEST} + {2708557200 3600 0 CET} + {2721258000 7200 1 CEST} + {2740006800 3600 0 CET} + {2752707600 7200 1 CEST} + {2771456400 3600 0 CET} + {2784762000 7200 1 CEST} + {2802906000 3600 0 CET} + {2816211600 7200 1 CEST} + {2834355600 3600 0 CET} + {2847661200 7200 1 CEST} + {2866410000 3600 0 CET} + {2879110800 7200 1 CEST} + {2897859600 3600 0 CET} + {2910560400 7200 1 CEST} + {2929309200 3600 0 CET} + {2942010000 7200 1 CEST} + {2960758800 3600 0 CET} + {2974064400 7200 1 CEST} + {2992208400 3600 0 CET} + {3005514000 7200 1 CEST} + {3023658000 3600 0 CET} + {3036963600 7200 1 CEST} + {3055712400 3600 0 CET} + {3068413200 7200 1 CEST} + {3087162000 3600 0 CET} + {3099862800 7200 1 CEST} + {3118611600 3600 0 CET} + {3131917200 7200 1 CEST} + {3150061200 3600 0 CET} + {3163366800 7200 1 CEST} + {3181510800 3600 0 CET} + {3194816400 7200 1 CEST} + {3212960400 3600 0 CET} + {3226266000 7200 1 CEST} + {3245014800 3600 0 CET} + {3257715600 7200 1 CEST} + {3276464400 3600 0 CET} + {3289165200 7200 1 CEST} + {3307914000 3600 0 CET} + {3321219600 7200 1 CEST} + {3339363600 3600 0 CET} + {3352669200 7200 1 CEST} + {3370813200 3600 0 CET} + {3384118800 7200 1 CEST} + {3402867600 3600 0 CET} + {3415568400 7200 1 CEST} + {3434317200 3600 0 CET} + {3447018000 7200 1 CEST} + {3465766800 3600 0 CET} + {3479072400 7200 1 CEST} + {3497216400 3600 0 CET} + {3510522000 7200 1 CEST} + {3528666000 3600 0 CET} + {3541971600 7200 1 CEST} + {3560115600 3600 0 CET} + {3573421200 7200 1 CEST} + {3592170000 3600 0 CET} + {3604870800 7200 1 CEST} + {3623619600 3600 0 CET} + {3636320400 7200 1 CEST} + {3655069200 3600 0 CET} + {3668374800 7200 1 CEST} + {3686518800 3600 0 CET} + {3699824400 7200 1 CEST} + {3717968400 3600 0 CET} + {3731274000 7200 1 CEST} + {3750022800 3600 0 CET} + {3762723600 7200 1 CEST} + {3781472400 3600 0 CET} + {3794173200 7200 1 CEST} + {3812922000 3600 0 CET} + {3825622800 7200 1 CEST} + {3844371600 3600 0 CET} + {3857677200 7200 1 CEST} + {3875821200 3600 0 CET} + {3889126800 7200 1 CEST} + {3907270800 3600 0 CET} + {3920576400 7200 1 CEST} + {3939325200 3600 0 CET} + {3952026000 7200 1 CEST} + {3970774800 3600 0 CET} + {3983475600 7200 1 CEST} + {4002224400 3600 0 CET} + {4015530000 7200 1 CEST} + {4033674000 3600 0 CET} + {4046979600 7200 1 CEST} + {4065123600 3600 0 CET} + {4078429200 7200 1 CEST} + {4096573200 3600 0 CET} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Paris b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Paris new file mode 100644 index 00000000..4b22a090 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Paris @@ -0,0 +1,314 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Paris) { + {-9223372036854775808 561 0 LMT} + {-2486678901 561 0 PMT} + {-1855958901 0 0 WET} + {-1689814800 3600 1 WEST} + {-1680397200 0 0 WET} + {-1665363600 3600 1 WEST} + {-1648342800 0 0 WET} + {-1635123600 3600 1 WEST} + {-1616893200 0 0 WET} + {-1604278800 3600 1 WEST} + {-1585443600 0 0 WET} + {-1574038800 3600 1 WEST} + {-1552266000 0 0 WET} + {-1539997200 3600 1 WEST} + {-1520557200 0 0 WET} + {-1507510800 3600 1 WEST} + {-1490576400 0 0 WET} + {-1470618000 3600 1 WEST} + {-1459126800 0 0 WET} + {-1444006800 3600 1 WEST} + {-1427677200 0 0 WET} + {-1411952400 3600 1 WEST} + {-1396227600 0 0 WET} + {-1379293200 3600 1 WEST} + {-1364778000 0 0 WET} + {-1348448400 3600 1 WEST} + {-1333328400 0 0 WET} + {-1316394000 3600 1 WEST} + {-1301274000 0 0 WET} + {-1284339600 3600 1 WEST} + {-1269824400 0 0 WET} + {-1253494800 3600 1 WEST} + {-1238374800 0 0 WET} + {-1221440400 3600 1 WEST} + {-1206925200 0 0 WET} + {-1191200400 3600 1 WEST} + {-1175475600 0 0 WET} + {-1160355600 3600 1 WEST} + {-1143421200 0 0 WET} + {-1127696400 3600 1 WEST} + {-1111971600 0 0 WET} + {-1096851600 3600 1 WEST} + {-1080522000 0 0 WET} + {-1063587600 3600 1 WEST} + {-1049072400 0 0 WET} + {-1033347600 3600 1 WEST} + {-1017622800 0 0 WET} + {-1002502800 3600 1 WEST} + {-986173200 0 0 WET} + {-969238800 3600 1 WEST} + {-950490000 0 0 WET} + {-942012000 3600 1 WEST} + {-932436000 7200 0 CEST} + {-857257200 3600 0 CET} + {-844556400 7200 1 CEST} + {-828226800 3600 0 CET} + {-812502000 7200 1 CEST} + {-800067600 7200 0 WEMT} + {-796266000 3600 1 WEST} + {-781052400 7200 1 WEMT} + {-766616400 3600 0 CET} + {196819200 7200 1 CEST} + {212540400 3600 0 CET} + {220921200 3600 0 CET} + {228877200 7200 1 CEST} + {243997200 3600 0 CET} + {260326800 7200 1 CEST} + {276051600 3600 0 CET} + {291776400 7200 1 CEST} + {307501200 3600 0 CET} + {323830800 7200 1 CEST} + {338950800 3600 0 CET} + {354675600 7200 1 CEST} + {370400400 3600 0 CET} + {386125200 7200 1 CEST} + {401850000 3600 0 CET} + {417574800 7200 1 CEST} + {433299600 3600 0 CET} + {449024400 7200 1 CEST} + {465354000 3600 0 CET} + {481078800 7200 1 CEST} + {496803600 3600 0 CET} + {512528400 7200 1 CEST} + {528253200 3600 0 CET} + {543978000 7200 1 CEST} + {559702800 3600 0 CET} + {575427600 7200 1 CEST} + {591152400 3600 0 CET} + {606877200 7200 1 CEST} + {622602000 3600 0 CET} + {638326800 7200 1 CEST} + {654656400 3600 0 CET} + {670381200 7200 1 CEST} + {686106000 3600 0 CET} + {701830800 7200 1 CEST} + {717555600 3600 0 CET} + {733280400 7200 1 CEST} + {749005200 3600 0 CET} + {764730000 7200 1 CEST} + {780454800 3600 0 CET} + {796179600 7200 1 CEST} + {811904400 3600 0 CET} + {828234000 7200 1 CEST} + {846378000 3600 0 CET} + {859683600 7200 1 CEST} + {877827600 3600 0 CET} + {891133200 7200 1 CEST} + {909277200 3600 0 CET} + {922582800 7200 1 CEST} + {941331600 3600 0 CET} + {954032400 7200 1 CEST} + {972781200 3600 0 CET} + {985482000 7200 1 CEST} + {1004230800 3600 0 CET} + {1017536400 7200 1 CEST} + {1035680400 3600 0 CET} + {1048986000 7200 1 CEST} + {1067130000 3600 0 CET} + {1080435600 7200 1 CEST} + {1099184400 3600 0 CET} + {1111885200 7200 1 CEST} + {1130634000 3600 0 CET} + {1143334800 7200 1 CEST} + {1162083600 3600 0 CET} + {1174784400 7200 1 CEST} + {1193533200 3600 0 CET} + {1206838800 7200 1 CEST} + {1224982800 3600 0 CET} + {1238288400 7200 1 CEST} + {1256432400 3600 0 CET} + {1269738000 7200 1 CEST} + {1288486800 3600 0 CET} + {1301187600 7200 1 CEST} + {1319936400 3600 0 CET} + {1332637200 7200 1 CEST} + {1351386000 3600 0 CET} + {1364691600 7200 1 CEST} + {1382835600 3600 0 CET} + {1396141200 7200 1 CEST} + {1414285200 3600 0 CET} + {1427590800 7200 1 CEST} + {1445734800 3600 0 CET} + {1459040400 7200 1 CEST} + {1477789200 3600 0 CET} + {1490490000 7200 1 CEST} + {1509238800 3600 0 CET} + {1521939600 7200 1 CEST} + {1540688400 3600 0 CET} + {1553994000 7200 1 CEST} + {1572138000 3600 0 CET} + {1585443600 7200 1 CEST} + {1603587600 3600 0 CET} + {1616893200 7200 1 CEST} + {1635642000 3600 0 CET} + {1648342800 7200 1 CEST} + {1667091600 3600 0 CET} + {1679792400 7200 1 CEST} + {1698541200 3600 0 CET} + {1711846800 7200 1 CEST} + {1729990800 3600 0 CET} + {1743296400 7200 1 CEST} + {1761440400 3600 0 CET} + {1774746000 7200 1 CEST} + {1792890000 3600 0 CET} + {1806195600 7200 1 CEST} + {1824944400 3600 0 CET} + {1837645200 7200 1 CEST} + {1856394000 3600 0 CET} + {1869094800 7200 1 CEST} + {1887843600 3600 0 CET} + {1901149200 7200 1 CEST} + {1919293200 3600 0 CET} + {1932598800 7200 1 CEST} + {1950742800 3600 0 CET} + {1964048400 7200 1 CEST} + {1982797200 3600 0 CET} + {1995498000 7200 1 CEST} + {2014246800 3600 0 CET} + {2026947600 7200 1 CEST} + {2045696400 3600 0 CET} + {2058397200 7200 1 CEST} + {2077146000 3600 0 CET} + {2090451600 7200 1 CEST} + {2108595600 3600 0 CET} + {2121901200 7200 1 CEST} + {2140045200 3600 0 CET} + {2153350800 7200 1 CEST} + {2172099600 3600 0 CET} + {2184800400 7200 1 CEST} + {2203549200 3600 0 CET} + {2216250000 7200 1 CEST} + {2234998800 3600 0 CET} + {2248304400 7200 1 CEST} + {2266448400 3600 0 CET} + {2279754000 7200 1 CEST} + {2297898000 3600 0 CET} + {2311203600 7200 1 CEST} + {2329347600 3600 0 CET} + {2342653200 7200 1 CEST} + {2361402000 3600 0 CET} + {2374102800 7200 1 CEST} + {2392851600 3600 0 CET} + {2405552400 7200 1 CEST} + {2424301200 3600 0 CET} + {2437606800 7200 1 CEST} + {2455750800 3600 0 CET} + {2469056400 7200 1 CEST} + {2487200400 3600 0 CET} + {2500506000 7200 1 CEST} + {2519254800 3600 0 CET} + {2531955600 7200 1 CEST} + {2550704400 3600 0 CET} + {2563405200 7200 1 CEST} + {2582154000 3600 0 CET} + {2595459600 7200 1 CEST} + {2613603600 3600 0 CET} + {2626909200 7200 1 CEST} + {2645053200 3600 0 CET} + {2658358800 7200 1 CEST} + {2676502800 3600 0 CET} + {2689808400 7200 1 CEST} + {2708557200 3600 0 CET} + {2721258000 7200 1 CEST} + {2740006800 3600 0 CET} + {2752707600 7200 1 CEST} + {2771456400 3600 0 CET} + {2784762000 7200 1 CEST} + {2802906000 3600 0 CET} + {2816211600 7200 1 CEST} + {2834355600 3600 0 CET} + {2847661200 7200 1 CEST} + {2866410000 3600 0 CET} + {2879110800 7200 1 CEST} + {2897859600 3600 0 CET} + {2910560400 7200 1 CEST} + {2929309200 3600 0 CET} + {2942010000 7200 1 CEST} + {2960758800 3600 0 CET} + {2974064400 7200 1 CEST} + {2992208400 3600 0 CET} + {3005514000 7200 1 CEST} + {3023658000 3600 0 CET} + {3036963600 7200 1 CEST} + {3055712400 3600 0 CET} + {3068413200 7200 1 CEST} + {3087162000 3600 0 CET} + {3099862800 7200 1 CEST} + {3118611600 3600 0 CET} + {3131917200 7200 1 CEST} + {3150061200 3600 0 CET} + {3163366800 7200 1 CEST} + {3181510800 3600 0 CET} + {3194816400 7200 1 CEST} + {3212960400 3600 0 CET} + {3226266000 7200 1 CEST} + {3245014800 3600 0 CET} + {3257715600 7200 1 CEST} + {3276464400 3600 0 CET} + {3289165200 7200 1 CEST} + {3307914000 3600 0 CET} + {3321219600 7200 1 CEST} + {3339363600 3600 0 CET} + {3352669200 7200 1 CEST} + {3370813200 3600 0 CET} + {3384118800 7200 1 CEST} + {3402867600 3600 0 CET} + {3415568400 7200 1 CEST} + {3434317200 3600 0 CET} + {3447018000 7200 1 CEST} + {3465766800 3600 0 CET} + {3479072400 7200 1 CEST} + {3497216400 3600 0 CET} + {3510522000 7200 1 CEST} + {3528666000 3600 0 CET} + {3541971600 7200 1 CEST} + {3560115600 3600 0 CET} + {3573421200 7200 1 CEST} + {3592170000 3600 0 CET} + {3604870800 7200 1 CEST} + {3623619600 3600 0 CET} + {3636320400 7200 1 CEST} + {3655069200 3600 0 CET} + {3668374800 7200 1 CEST} + {3686518800 3600 0 CET} + {3699824400 7200 1 CEST} + {3717968400 3600 0 CET} + {3731274000 7200 1 CEST} + {3750022800 3600 0 CET} + {3762723600 7200 1 CEST} + {3781472400 3600 0 CET} + {3794173200 7200 1 CEST} + {3812922000 3600 0 CET} + {3825622800 7200 1 CEST} + {3844371600 3600 0 CET} + {3857677200 7200 1 CEST} + {3875821200 3600 0 CET} + {3889126800 7200 1 CEST} + {3907270800 3600 0 CET} + {3920576400 7200 1 CEST} + {3939325200 3600 0 CET} + {3952026000 7200 1 CEST} + {3970774800 3600 0 CET} + {3983475600 7200 1 CEST} + {4002224400 3600 0 CET} + {4015530000 7200 1 CEST} + {4033674000 3600 0 CET} + {4046979600 7200 1 CEST} + {4065123600 3600 0 CET} + {4078429200 7200 1 CEST} + {4096573200 3600 0 CET} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Podgorica b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Podgorica new file mode 100644 index 00000000..f4f90669 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Podgorica @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Europe/Belgrade)]} { + LoadTimeZoneFile Europe/Belgrade +} +set TZData(:Europe/Podgorica) $TZData(:Europe/Belgrade) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Prague b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Prague new file mode 100644 index 00000000..222b1aed --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Prague @@ -0,0 +1,272 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Prague) { + {-9223372036854775808 3464 0 LMT} + {-3786829064 3464 0 PMT} + {-2469401864 3600 0 CET} + {-1693706400 7200 1 CEST} + {-1680483600 3600 0 CET} + {-1663455600 7200 1 CEST} + {-1650150000 3600 0 CET} + {-1632006000 7200 1 CEST} + {-1618700400 3600 0 CET} + {-938905200 7200 1 CEST} + {-857257200 3600 0 CET} + {-844556400 7200 1 CEST} + {-828226800 3600 0 CET} + {-812502000 7200 1 CEST} + {-798073200 3600 0 CET} + {-780534000 7200 1 CEST} + {-761180400 3600 0 CET} + {-746578800 7200 1 CEST} + {-733359600 3600 0 CET} + {-716425200 7200 1 CEST} + {-701910000 3600 0 CET} + {-684975600 7200 1 CEST} + {-670460400 3600 0 CET} + {-654217200 7200 1 CEST} + {-639010800 3600 0 CET} + {283993200 3600 0 CET} + {291776400 7200 1 CEST} + {307501200 3600 0 CET} + {323830800 7200 1 CEST} + {338950800 3600 0 CET} + {354675600 7200 1 CEST} + {370400400 3600 0 CET} + {386125200 7200 1 CEST} + {401850000 3600 0 CET} + {417574800 7200 1 CEST} + {433299600 3600 0 CET} + {449024400 7200 1 CEST} + {465354000 3600 0 CET} + {481078800 7200 1 CEST} + {496803600 3600 0 CET} + {512528400 7200 1 CEST} + {528253200 3600 0 CET} + {543978000 7200 1 CEST} + {559702800 3600 0 CET} + {575427600 7200 1 CEST} + {591152400 3600 0 CET} + {606877200 7200 1 CEST} + {622602000 3600 0 CET} + {638326800 7200 1 CEST} + {654656400 3600 0 CET} + {670381200 7200 1 CEST} + {686106000 3600 0 CET} + {701830800 7200 1 CEST} + {717555600 3600 0 CET} + {733280400 7200 1 CEST} + {749005200 3600 0 CET} + {764730000 7200 1 CEST} + {780454800 3600 0 CET} + {796179600 7200 1 CEST} + {811904400 3600 0 CET} + {828234000 7200 1 CEST} + {846378000 3600 0 CET} + {859683600 7200 1 CEST} + {877827600 3600 0 CET} + {891133200 7200 1 CEST} + {909277200 3600 0 CET} + {922582800 7200 1 CEST} + {941331600 3600 0 CET} + {954032400 7200 1 CEST} + {972781200 3600 0 CET} + {985482000 7200 1 CEST} + {1004230800 3600 0 CET} + {1017536400 7200 1 CEST} + {1035680400 3600 0 CET} + {1048986000 7200 1 CEST} + {1067130000 3600 0 CET} + {1080435600 7200 1 CEST} + {1099184400 3600 0 CET} + {1111885200 7200 1 CEST} + {1130634000 3600 0 CET} + {1143334800 7200 1 CEST} + {1162083600 3600 0 CET} + {1174784400 7200 1 CEST} + {1193533200 3600 0 CET} + {1206838800 7200 1 CEST} + {1224982800 3600 0 CET} + {1238288400 7200 1 CEST} + {1256432400 3600 0 CET} + {1269738000 7200 1 CEST} + {1288486800 3600 0 CET} + {1301187600 7200 1 CEST} + {1319936400 3600 0 CET} + {1332637200 7200 1 CEST} + {1351386000 3600 0 CET} + {1364691600 7200 1 CEST} + {1382835600 3600 0 CET} + {1396141200 7200 1 CEST} + {1414285200 3600 0 CET} + {1427590800 7200 1 CEST} + {1445734800 3600 0 CET} + {1459040400 7200 1 CEST} + {1477789200 3600 0 CET} + {1490490000 7200 1 CEST} + {1509238800 3600 0 CET} + {1521939600 7200 1 CEST} + {1540688400 3600 0 CET} + {1553994000 7200 1 CEST} + {1572138000 3600 0 CET} + {1585443600 7200 1 CEST} + {1603587600 3600 0 CET} + {1616893200 7200 1 CEST} + {1635642000 3600 0 CET} + {1648342800 7200 1 CEST} + {1667091600 3600 0 CET} + {1679792400 7200 1 CEST} + {1698541200 3600 0 CET} + {1711846800 7200 1 CEST} + {1729990800 3600 0 CET} + {1743296400 7200 1 CEST} + {1761440400 3600 0 CET} + {1774746000 7200 1 CEST} + {1792890000 3600 0 CET} + {1806195600 7200 1 CEST} + {1824944400 3600 0 CET} + {1837645200 7200 1 CEST} + {1856394000 3600 0 CET} + {1869094800 7200 1 CEST} + {1887843600 3600 0 CET} + {1901149200 7200 1 CEST} + {1919293200 3600 0 CET} + {1932598800 7200 1 CEST} + {1950742800 3600 0 CET} + {1964048400 7200 1 CEST} + {1982797200 3600 0 CET} + {1995498000 7200 1 CEST} + {2014246800 3600 0 CET} + {2026947600 7200 1 CEST} + {2045696400 3600 0 CET} + {2058397200 7200 1 CEST} + {2077146000 3600 0 CET} + {2090451600 7200 1 CEST} + {2108595600 3600 0 CET} + {2121901200 7200 1 CEST} + {2140045200 3600 0 CET} + {2153350800 7200 1 CEST} + {2172099600 3600 0 CET} + {2184800400 7200 1 CEST} + {2203549200 3600 0 CET} + {2216250000 7200 1 CEST} + {2234998800 3600 0 CET} + {2248304400 7200 1 CEST} + {2266448400 3600 0 CET} + {2279754000 7200 1 CEST} + {2297898000 3600 0 CET} + {2311203600 7200 1 CEST} + {2329347600 3600 0 CET} + {2342653200 7200 1 CEST} + {2361402000 3600 0 CET} + {2374102800 7200 1 CEST} + {2392851600 3600 0 CET} + {2405552400 7200 1 CEST} + {2424301200 3600 0 CET} + {2437606800 7200 1 CEST} + {2455750800 3600 0 CET} + {2469056400 7200 1 CEST} + {2487200400 3600 0 CET} + {2500506000 7200 1 CEST} + {2519254800 3600 0 CET} + {2531955600 7200 1 CEST} + {2550704400 3600 0 CET} + {2563405200 7200 1 CEST} + {2582154000 3600 0 CET} + {2595459600 7200 1 CEST} + {2613603600 3600 0 CET} + {2626909200 7200 1 CEST} + {2645053200 3600 0 CET} + {2658358800 7200 1 CEST} + {2676502800 3600 0 CET} + {2689808400 7200 1 CEST} + {2708557200 3600 0 CET} + {2721258000 7200 1 CEST} + {2740006800 3600 0 CET} + {2752707600 7200 1 CEST} + {2771456400 3600 0 CET} + {2784762000 7200 1 CEST} + {2802906000 3600 0 CET} + {2816211600 7200 1 CEST} + {2834355600 3600 0 CET} + {2847661200 7200 1 CEST} + {2866410000 3600 0 CET} + {2879110800 7200 1 CEST} + {2897859600 3600 0 CET} + {2910560400 7200 1 CEST} + {2929309200 3600 0 CET} + {2942010000 7200 1 CEST} + {2960758800 3600 0 CET} + {2974064400 7200 1 CEST} + {2992208400 3600 0 CET} + {3005514000 7200 1 CEST} + {3023658000 3600 0 CET} + {3036963600 7200 1 CEST} + {3055712400 3600 0 CET} + {3068413200 7200 1 CEST} + {3087162000 3600 0 CET} + {3099862800 7200 1 CEST} + {3118611600 3600 0 CET} + {3131917200 7200 1 CEST} + {3150061200 3600 0 CET} + {3163366800 7200 1 CEST} + {3181510800 3600 0 CET} + {3194816400 7200 1 CEST} + {3212960400 3600 0 CET} + {3226266000 7200 1 CEST} + {3245014800 3600 0 CET} + {3257715600 7200 1 CEST} + {3276464400 3600 0 CET} + {3289165200 7200 1 CEST} + {3307914000 3600 0 CET} + {3321219600 7200 1 CEST} + {3339363600 3600 0 CET} + {3352669200 7200 1 CEST} + {3370813200 3600 0 CET} + {3384118800 7200 1 CEST} + {3402867600 3600 0 CET} + {3415568400 7200 1 CEST} + {3434317200 3600 0 CET} + {3447018000 7200 1 CEST} + {3465766800 3600 0 CET} + {3479072400 7200 1 CEST} + {3497216400 3600 0 CET} + {3510522000 7200 1 CEST} + {3528666000 3600 0 CET} + {3541971600 7200 1 CEST} + {3560115600 3600 0 CET} + {3573421200 7200 1 CEST} + {3592170000 3600 0 CET} + {3604870800 7200 1 CEST} + {3623619600 3600 0 CET} + {3636320400 7200 1 CEST} + {3655069200 3600 0 CET} + {3668374800 7200 1 CEST} + {3686518800 3600 0 CET} + {3699824400 7200 1 CEST} + {3717968400 3600 0 CET} + {3731274000 7200 1 CEST} + {3750022800 3600 0 CET} + {3762723600 7200 1 CEST} + {3781472400 3600 0 CET} + {3794173200 7200 1 CEST} + {3812922000 3600 0 CET} + {3825622800 7200 1 CEST} + {3844371600 3600 0 CET} + {3857677200 7200 1 CEST} + {3875821200 3600 0 CET} + {3889126800 7200 1 CEST} + {3907270800 3600 0 CET} + {3920576400 7200 1 CEST} + {3939325200 3600 0 CET} + {3952026000 7200 1 CEST} + {3970774800 3600 0 CET} + {3983475600 7200 1 CEST} + {4002224400 3600 0 CET} + {4015530000 7200 1 CEST} + {4033674000 3600 0 CET} + {4046979600 7200 1 CEST} + {4065123600 3600 0 CET} + {4078429200 7200 1 CEST} + {4096573200 3600 0 CET} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Riga b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Riga new file mode 100644 index 00000000..c829ffb4 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Riga @@ -0,0 +1,258 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Riga) { + {-9223372036854775808 5794 0 LMT} + {-2840146594 5794 0 RMT} + {-1632008194 9394 1 LST} + {-1618702594 5794 0 RMT} + {-1601681794 9394 1 LST} + {-1597275394 5794 0 RMT} + {-1377308194 7200 0 EET} + {-928029600 10800 0 MSK} + {-899521200 3600 0 CET} + {-857257200 3600 0 CET} + {-844556400 7200 1 CEST} + {-828226800 3600 0 CET} + {-812502000 7200 1 CEST} + {-796777200 3600 0 CET} + {-795834000 10800 0 MSD} + {354920400 14400 1 MSD} + {370728000 10800 0 MSK} + {386456400 14400 1 MSD} + {402264000 10800 0 MSK} + {417992400 14400 1 MSD} + {433800000 10800 0 MSK} + {449614800 14400 1 MSD} + {465346800 10800 0 MSK} + {481071600 14400 1 MSD} + {496796400 10800 0 MSK} + {512521200 14400 1 MSD} + {528246000 10800 0 MSK} + {543970800 14400 1 MSD} + {559695600 10800 0 MSK} + {575420400 14400 1 MSD} + {591145200 10800 0 MSK} + {606870000 10800 1 EEST} + {622598400 7200 0 EET} + {638323200 10800 1 EEST} + {654652800 7200 0 EET} + {670377600 10800 1 EEST} + {686102400 7200 0 EET} + {701827200 10800 1 EEST} + {717552000 7200 0 EET} + {733276800 10800 1 EEST} + {749001600 7200 0 EET} + {764726400 10800 1 EEST} + {780451200 7200 0 EET} + {796176000 10800 1 EEST} + {811900800 7200 0 EET} + {828230400 10800 1 EEST} + {843955200 7200 0 EET} + {853797600 7200 0 EET} + {859683600 10800 1 EEST} + {877827600 7200 0 EET} + {891133200 10800 1 EEST} + {909277200 7200 0 EET} + {922582800 10800 1 EEST} + {941331600 7200 0 EET} + {951775200 7200 0 EET} + {978386400 7200 0 EET} + {985482000 10800 1 EEST} + {1004230800 7200 0 EET} + {1017536400 10800 1 EEST} + {1035680400 7200 0 EET} + {1048986000 10800 1 EEST} + {1067130000 7200 0 EET} + {1080435600 10800 1 EEST} + {1099184400 7200 0 EET} + {1111885200 10800 1 EEST} + {1130634000 7200 0 EET} + {1143334800 10800 1 EEST} + {1162083600 7200 0 EET} + {1174784400 10800 1 EEST} + {1193533200 7200 0 EET} + {1206838800 10800 1 EEST} + {1224982800 7200 0 EET} + {1238288400 10800 1 EEST} + {1256432400 7200 0 EET} + {1269738000 10800 1 EEST} + {1288486800 7200 0 EET} + {1301187600 10800 1 EEST} + {1319936400 7200 0 EET} + {1332637200 10800 1 EEST} + {1351386000 7200 0 EET} + {1364691600 10800 1 EEST} + {1382835600 7200 0 EET} + {1396141200 10800 1 EEST} + {1414285200 7200 0 EET} + {1427590800 10800 1 EEST} + {1445734800 7200 0 EET} + {1459040400 10800 1 EEST} + {1477789200 7200 0 EET} + {1490490000 10800 1 EEST} + {1509238800 7200 0 EET} + {1521939600 10800 1 EEST} + {1540688400 7200 0 EET} + {1553994000 10800 1 EEST} + {1572138000 7200 0 EET} + {1585443600 10800 1 EEST} + {1603587600 7200 0 EET} + {1616893200 10800 1 EEST} + {1635642000 7200 0 EET} + {1648342800 10800 1 EEST} + {1667091600 7200 0 EET} + {1679792400 10800 1 EEST} + {1698541200 7200 0 EET} + {1711846800 10800 1 EEST} + {1729990800 7200 0 EET} + {1743296400 10800 1 EEST} + {1761440400 7200 0 EET} + {1774746000 10800 1 EEST} + {1792890000 7200 0 EET} + {1806195600 10800 1 EEST} + {1824944400 7200 0 EET} + {1837645200 10800 1 EEST} + {1856394000 7200 0 EET} + {1869094800 10800 1 EEST} + {1887843600 7200 0 EET} + {1901149200 10800 1 EEST} + {1919293200 7200 0 EET} + {1932598800 10800 1 EEST} + {1950742800 7200 0 EET} + {1964048400 10800 1 EEST} + {1982797200 7200 0 EET} + {1995498000 10800 1 EEST} + {2014246800 7200 0 EET} + {2026947600 10800 1 EEST} + {2045696400 7200 0 EET} + {2058397200 10800 1 EEST} + {2077146000 7200 0 EET} + {2090451600 10800 1 EEST} + {2108595600 7200 0 EET} + {2121901200 10800 1 EEST} + {2140045200 7200 0 EET} + {2153350800 10800 1 EEST} + {2172099600 7200 0 EET} + {2184800400 10800 1 EEST} + {2203549200 7200 0 EET} + {2216250000 10800 1 EEST} + {2234998800 7200 0 EET} + {2248304400 10800 1 EEST} + {2266448400 7200 0 EET} + {2279754000 10800 1 EEST} + {2297898000 7200 0 EET} + {2311203600 10800 1 EEST} + {2329347600 7200 0 EET} + {2342653200 10800 1 EEST} + {2361402000 7200 0 EET} + {2374102800 10800 1 EEST} + {2392851600 7200 0 EET} + {2405552400 10800 1 EEST} + {2424301200 7200 0 EET} + {2437606800 10800 1 EEST} + {2455750800 7200 0 EET} + {2469056400 10800 1 EEST} + {2487200400 7200 0 EET} + {2500506000 10800 1 EEST} + {2519254800 7200 0 EET} + {2531955600 10800 1 EEST} + {2550704400 7200 0 EET} + {2563405200 10800 1 EEST} + {2582154000 7200 0 EET} + {2595459600 10800 1 EEST} + {2613603600 7200 0 EET} + {2626909200 10800 1 EEST} + {2645053200 7200 0 EET} + {2658358800 10800 1 EEST} + {2676502800 7200 0 EET} + {2689808400 10800 1 EEST} + {2708557200 7200 0 EET} + {2721258000 10800 1 EEST} + {2740006800 7200 0 EET} + {2752707600 10800 1 EEST} + {2771456400 7200 0 EET} + {2784762000 10800 1 EEST} + {2802906000 7200 0 EET} + {2816211600 10800 1 EEST} + {2834355600 7200 0 EET} + {2847661200 10800 1 EEST} + {2866410000 7200 0 EET} + {2879110800 10800 1 EEST} + {2897859600 7200 0 EET} + {2910560400 10800 1 EEST} + {2929309200 7200 0 EET} + {2942010000 10800 1 EEST} + {2960758800 7200 0 EET} + {2974064400 10800 1 EEST} + {2992208400 7200 0 EET} + {3005514000 10800 1 EEST} + {3023658000 7200 0 EET} + {3036963600 10800 1 EEST} + {3055712400 7200 0 EET} + {3068413200 10800 1 EEST} + {3087162000 7200 0 EET} + {3099862800 10800 1 EEST} + {3118611600 7200 0 EET} + {3131917200 10800 1 EEST} + {3150061200 7200 0 EET} + {3163366800 10800 1 EEST} + {3181510800 7200 0 EET} + {3194816400 10800 1 EEST} + {3212960400 7200 0 EET} + {3226266000 10800 1 EEST} + {3245014800 7200 0 EET} + {3257715600 10800 1 EEST} + {3276464400 7200 0 EET} + {3289165200 10800 1 EEST} + {3307914000 7200 0 EET} + {3321219600 10800 1 EEST} + {3339363600 7200 0 EET} + {3352669200 10800 1 EEST} + {3370813200 7200 0 EET} + {3384118800 10800 1 EEST} + {3402867600 7200 0 EET} + {3415568400 10800 1 EEST} + {3434317200 7200 0 EET} + {3447018000 10800 1 EEST} + {3465766800 7200 0 EET} + {3479072400 10800 1 EEST} + {3497216400 7200 0 EET} + {3510522000 10800 1 EEST} + {3528666000 7200 0 EET} + {3541971600 10800 1 EEST} + {3560115600 7200 0 EET} + {3573421200 10800 1 EEST} + {3592170000 7200 0 EET} + {3604870800 10800 1 EEST} + {3623619600 7200 0 EET} + {3636320400 10800 1 EEST} + {3655069200 7200 0 EET} + {3668374800 10800 1 EEST} + {3686518800 7200 0 EET} + {3699824400 10800 1 EEST} + {3717968400 7200 0 EET} + {3731274000 10800 1 EEST} + {3750022800 7200 0 EET} + {3762723600 10800 1 EEST} + {3781472400 7200 0 EET} + {3794173200 10800 1 EEST} + {3812922000 7200 0 EET} + {3825622800 10800 1 EEST} + {3844371600 7200 0 EET} + {3857677200 10800 1 EEST} + {3875821200 7200 0 EET} + {3889126800 10800 1 EEST} + {3907270800 7200 0 EET} + {3920576400 10800 1 EEST} + {3939325200 7200 0 EET} + {3952026000 10800 1 EEST} + {3970774800 7200 0 EET} + {3983475600 10800 1 EEST} + {4002224400 7200 0 EET} + {4015530000 10800 1 EEST} + {4033674000 7200 0 EET} + {4046979600 10800 1 EEST} + {4065123600 7200 0 EET} + {4078429200 10800 1 EEST} + {4096573200 7200 0 EET} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Rome b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Rome new file mode 100644 index 00000000..64948b80 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Rome @@ -0,0 +1,301 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Rome) { + {-9223372036854775808 2996 0 LMT} + {-3259097396 2996 0 RMT} + {-2403564596 3600 0 CET} + {-1690851600 7200 1 CEST} + {-1680483600 3600 0 CET} + {-1664758800 7200 1 CEST} + {-1649034000 3600 0 CET} + {-1635123600 7200 1 CEST} + {-1616979600 3600 0 CET} + {-1604278800 7200 1 CEST} + {-1585530000 3600 0 CET} + {-1571014800 7200 1 CEST} + {-1555290000 3600 0 CET} + {-932432400 7200 1 CEST} + {-857257200 3600 0 CET} + {-844556400 7200 1 CEST} + {-828226800 3600 0 CET} + {-812502000 7200 1 CEST} + {-804819600 3600 0 CET} + {-798080400 3600 0 CET} + {-781052400 7200 1 CEST} + {-766717200 3600 0 CET} + {-750898800 7200 1 CEST} + {-733359600 3600 0 CET} + {-719456400 7200 1 CEST} + {-701917200 3600 0 CET} + {-689209200 7200 1 CEST} + {-670460400 3600 0 CET} + {-114051600 7200 1 CEST} + {-103168800 3600 0 CET} + {-81997200 7200 1 CEST} + {-71719200 3600 0 CET} + {-50547600 7200 1 CEST} + {-40269600 3600 0 CET} + {-18493200 7200 1 CEST} + {-8215200 3600 0 CET} + {12956400 7200 1 CEST} + {23234400 3600 0 CET} + {43801200 7200 1 CEST} + {54687600 3600 0 CET} + {75855600 7200 1 CEST} + {86738400 3600 0 CET} + {107910000 7200 1 CEST} + {118188000 3600 0 CET} + {138754800 7200 1 CEST} + {149637600 3600 0 CET} + {170809200 7200 1 CEST} + {181090800 3600 0 CET} + {202258800 7200 1 CEST} + {212540400 3600 0 CET} + {233103600 7200 1 CEST} + {243990000 3600 0 CET} + {265158000 7200 1 CEST} + {276044400 3600 0 CET} + {296607600 7200 1 CEST} + {307494000 3600 0 CET} + {315529200 3600 0 CET} + {323830800 7200 1 CEST} + {338950800 3600 0 CET} + {354675600 7200 1 CEST} + {370400400 3600 0 CET} + {386125200 7200 1 CEST} + {401850000 3600 0 CET} + {417574800 7200 1 CEST} + {433299600 3600 0 CET} + {449024400 7200 1 CEST} + {465354000 3600 0 CET} + {481078800 7200 1 CEST} + {496803600 3600 0 CET} + {512528400 7200 1 CEST} + {528253200 3600 0 CET} + {543978000 7200 1 CEST} + {559702800 3600 0 CET} + {575427600 7200 1 CEST} + {591152400 3600 0 CET} + {606877200 7200 1 CEST} + {622602000 3600 0 CET} + {638326800 7200 1 CEST} + {654656400 3600 0 CET} + {670381200 7200 1 CEST} + {686106000 3600 0 CET} + {701830800 7200 1 CEST} + {717555600 3600 0 CET} + {733280400 7200 1 CEST} + {749005200 3600 0 CET} + {764730000 7200 1 CEST} + {780454800 3600 0 CET} + {796179600 7200 1 CEST} + {811904400 3600 0 CET} + {828234000 7200 1 CEST} + {846378000 3600 0 CET} + {859683600 7200 1 CEST} + {877827600 3600 0 CET} + {891133200 7200 1 CEST} + {909277200 3600 0 CET} + {922582800 7200 1 CEST} + {941331600 3600 0 CET} + {954032400 7200 1 CEST} + {972781200 3600 0 CET} + {985482000 7200 1 CEST} + {1004230800 3600 0 CET} + {1017536400 7200 1 CEST} + {1035680400 3600 0 CET} + {1048986000 7200 1 CEST} + {1067130000 3600 0 CET} + {1080435600 7200 1 CEST} + {1099184400 3600 0 CET} + {1111885200 7200 1 CEST} + {1130634000 3600 0 CET} + {1143334800 7200 1 CEST} + {1162083600 3600 0 CET} + {1174784400 7200 1 CEST} + {1193533200 3600 0 CET} + {1206838800 7200 1 CEST} + {1224982800 3600 0 CET} + {1238288400 7200 1 CEST} + {1256432400 3600 0 CET} + {1269738000 7200 1 CEST} + {1288486800 3600 0 CET} + {1301187600 7200 1 CEST} + {1319936400 3600 0 CET} + {1332637200 7200 1 CEST} + {1351386000 3600 0 CET} + {1364691600 7200 1 CEST} + {1382835600 3600 0 CET} + {1396141200 7200 1 CEST} + {1414285200 3600 0 CET} + {1427590800 7200 1 CEST} + {1445734800 3600 0 CET} + {1459040400 7200 1 CEST} + {1477789200 3600 0 CET} + {1490490000 7200 1 CEST} + {1509238800 3600 0 CET} + {1521939600 7200 1 CEST} + {1540688400 3600 0 CET} + {1553994000 7200 1 CEST} + {1572138000 3600 0 CET} + {1585443600 7200 1 CEST} + {1603587600 3600 0 CET} + {1616893200 7200 1 CEST} + {1635642000 3600 0 CET} + {1648342800 7200 1 CEST} + {1667091600 3600 0 CET} + {1679792400 7200 1 CEST} + {1698541200 3600 0 CET} + {1711846800 7200 1 CEST} + {1729990800 3600 0 CET} + {1743296400 7200 1 CEST} + {1761440400 3600 0 CET} + {1774746000 7200 1 CEST} + {1792890000 3600 0 CET} + {1806195600 7200 1 CEST} + {1824944400 3600 0 CET} + {1837645200 7200 1 CEST} + {1856394000 3600 0 CET} + {1869094800 7200 1 CEST} + {1887843600 3600 0 CET} + {1901149200 7200 1 CEST} + {1919293200 3600 0 CET} + {1932598800 7200 1 CEST} + {1950742800 3600 0 CET} + {1964048400 7200 1 CEST} + {1982797200 3600 0 CET} + {1995498000 7200 1 CEST} + {2014246800 3600 0 CET} + {2026947600 7200 1 CEST} + {2045696400 3600 0 CET} + {2058397200 7200 1 CEST} + {2077146000 3600 0 CET} + {2090451600 7200 1 CEST} + {2108595600 3600 0 CET} + {2121901200 7200 1 CEST} + {2140045200 3600 0 CET} + {2153350800 7200 1 CEST} + {2172099600 3600 0 CET} + {2184800400 7200 1 CEST} + {2203549200 3600 0 CET} + {2216250000 7200 1 CEST} + {2234998800 3600 0 CET} + {2248304400 7200 1 CEST} + {2266448400 3600 0 CET} + {2279754000 7200 1 CEST} + {2297898000 3600 0 CET} + {2311203600 7200 1 CEST} + {2329347600 3600 0 CET} + {2342653200 7200 1 CEST} + {2361402000 3600 0 CET} + {2374102800 7200 1 CEST} + {2392851600 3600 0 CET} + {2405552400 7200 1 CEST} + {2424301200 3600 0 CET} + {2437606800 7200 1 CEST} + {2455750800 3600 0 CET} + {2469056400 7200 1 CEST} + {2487200400 3600 0 CET} + {2500506000 7200 1 CEST} + {2519254800 3600 0 CET} + {2531955600 7200 1 CEST} + {2550704400 3600 0 CET} + {2563405200 7200 1 CEST} + {2582154000 3600 0 CET} + {2595459600 7200 1 CEST} + {2613603600 3600 0 CET} + {2626909200 7200 1 CEST} + {2645053200 3600 0 CET} + {2658358800 7200 1 CEST} + {2676502800 3600 0 CET} + {2689808400 7200 1 CEST} + {2708557200 3600 0 CET} + {2721258000 7200 1 CEST} + {2740006800 3600 0 CET} + {2752707600 7200 1 CEST} + {2771456400 3600 0 CET} + {2784762000 7200 1 CEST} + {2802906000 3600 0 CET} + {2816211600 7200 1 CEST} + {2834355600 3600 0 CET} + {2847661200 7200 1 CEST} + {2866410000 3600 0 CET} + {2879110800 7200 1 CEST} + {2897859600 3600 0 CET} + {2910560400 7200 1 CEST} + {2929309200 3600 0 CET} + {2942010000 7200 1 CEST} + {2960758800 3600 0 CET} + {2974064400 7200 1 CEST} + {2992208400 3600 0 CET} + {3005514000 7200 1 CEST} + {3023658000 3600 0 CET} + {3036963600 7200 1 CEST} + {3055712400 3600 0 CET} + {3068413200 7200 1 CEST} + {3087162000 3600 0 CET} + {3099862800 7200 1 CEST} + {3118611600 3600 0 CET} + {3131917200 7200 1 CEST} + {3150061200 3600 0 CET} + {3163366800 7200 1 CEST} + {3181510800 3600 0 CET} + {3194816400 7200 1 CEST} + {3212960400 3600 0 CET} + {3226266000 7200 1 CEST} + {3245014800 3600 0 CET} + {3257715600 7200 1 CEST} + {3276464400 3600 0 CET} + {3289165200 7200 1 CEST} + {3307914000 3600 0 CET} + {3321219600 7200 1 CEST} + {3339363600 3600 0 CET} + {3352669200 7200 1 CEST} + {3370813200 3600 0 CET} + {3384118800 7200 1 CEST} + {3402867600 3600 0 CET} + {3415568400 7200 1 CEST} + {3434317200 3600 0 CET} + {3447018000 7200 1 CEST} + {3465766800 3600 0 CET} + {3479072400 7200 1 CEST} + {3497216400 3600 0 CET} + {3510522000 7200 1 CEST} + {3528666000 3600 0 CET} + {3541971600 7200 1 CEST} + {3560115600 3600 0 CET} + {3573421200 7200 1 CEST} + {3592170000 3600 0 CET} + {3604870800 7200 1 CEST} + {3623619600 3600 0 CET} + {3636320400 7200 1 CEST} + {3655069200 3600 0 CET} + {3668374800 7200 1 CEST} + {3686518800 3600 0 CET} + {3699824400 7200 1 CEST} + {3717968400 3600 0 CET} + {3731274000 7200 1 CEST} + {3750022800 3600 0 CET} + {3762723600 7200 1 CEST} + {3781472400 3600 0 CET} + {3794173200 7200 1 CEST} + {3812922000 3600 0 CET} + {3825622800 7200 1 CEST} + {3844371600 3600 0 CET} + {3857677200 7200 1 CEST} + {3875821200 3600 0 CET} + {3889126800 7200 1 CEST} + {3907270800 3600 0 CET} + {3920576400 7200 1 CEST} + {3939325200 3600 0 CET} + {3952026000 7200 1 CEST} + {3970774800 3600 0 CET} + {3983475600 7200 1 CEST} + {4002224400 3600 0 CET} + {4015530000 7200 1 CEST} + {4033674000 3600 0 CET} + {4046979600 7200 1 CEST} + {4065123600 3600 0 CET} + {4078429200 7200 1 CEST} + {4096573200 3600 0 CET} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Samara b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Samara new file mode 100644 index 00000000..ee9d9892 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Samara @@ -0,0 +1,73 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Samara) { + {-9223372036854775808 12020 0 LMT} + {-1593825620 10800 0 SAMT} + {-1247540400 14400 0 SAMT} + {-1102305600 14400 0 KUYMMTT} + {354916800 18000 1 KUYST} + {370724400 14400 0 KUYT} + {386452800 18000 1 KUYST} + {402260400 14400 0 KUYT} + {417988800 18000 1 KUYST} + {433796400 14400 0 KUYT} + {449611200 18000 1 KUYST} + {465343200 14400 0 KUYT} + {481068000 18000 1 KUYST} + {496792800 14400 0 KUYT} + {512517600 18000 1 KUYST} + {528242400 14400 0 KUYT} + {543967200 18000 1 KUYST} + {559692000 14400 0 KUYT} + {575416800 18000 1 KUYST} + {591141600 14400 0 KUYT} + {606866400 10800 0 MSD} + {606870000 14400 1 MSD} + {622594800 10800 0 MSK} + {638319600 14400 1 MSD} + {654649200 10800 0 MSK} + {670374000 7200 0 EEMMTT} + {670377600 10800 1 EEST} + {686102400 10800 0 KUYT} + {687916800 14400 0 SAMT} + {701809200 18000 1 SAMST} + {717530400 14400 0 SAMT} + {733269600 18000 1 SAMST} + {748994400 14400 0 SAMT} + {764719200 18000 1 SAMST} + {780444000 14400 0 SAMT} + {796168800 18000 1 SAMST} + {811893600 14400 0 SAMT} + {828223200 18000 1 SAMST} + {846367200 14400 0 SAMT} + {859672800 18000 1 SAMST} + {877816800 14400 0 SAMT} + {891122400 18000 1 SAMST} + {909266400 14400 0 SAMT} + {922572000 18000 1 SAMST} + {941320800 14400 0 SAMT} + {954021600 18000 1 SAMST} + {972770400 14400 0 SAMT} + {985471200 18000 1 SAMST} + {1004220000 14400 0 SAMT} + {1017525600 18000 1 SAMST} + {1035669600 14400 0 SAMT} + {1048975200 18000 1 SAMST} + {1067119200 14400 0 SAMT} + {1080424800 18000 1 SAMST} + {1099173600 14400 0 SAMT} + {1111874400 18000 1 SAMST} + {1130623200 14400 0 SAMT} + {1143324000 18000 1 SAMST} + {1162072800 14400 0 SAMT} + {1174773600 18000 1 SAMST} + {1193522400 14400 0 SAMT} + {1206828000 18000 1 SAMST} + {1224972000 14400 0 SAMT} + {1238277600 18000 1 SAMST} + {1256421600 14400 0 SAMT} + {1269727200 10800 0 SAMMMTT} + {1269730800 14400 1 SAMST} + {1288479600 10800 0 SAMT} + {1301180400 14400 0 SAMT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/San_Marino b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/San_Marino new file mode 100644 index 00000000..927ad290 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/San_Marino @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Europe/Rome)]} { + LoadTimeZoneFile Europe/Rome +} +set TZData(:Europe/San_Marino) $TZData(:Europe/Rome) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Sarajevo b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Sarajevo new file mode 100644 index 00000000..1b14286a --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Sarajevo @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Europe/Belgrade)]} { + LoadTimeZoneFile Europe/Belgrade +} +set TZData(:Europe/Sarajevo) $TZData(:Europe/Belgrade) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Simferopol b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Simferopol new file mode 100644 index 00000000..3e4b60aa --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Simferopol @@ -0,0 +1,82 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Simferopol) { + {-9223372036854775808 8184 0 LMT} + {-2840148984 8160 0 SMT} + {-1441160160 7200 0 EET} + {-1247536800 10800 0 MSK} + {-888894000 3600 0 CET} + {-857257200 3600 0 CET} + {-844556400 7200 1 CEST} + {-828226800 3600 0 CET} + {-812502000 7200 1 CEST} + {-811645200 10800 0 MSD} + {354920400 14400 1 MSD} + {370728000 10800 0 MSK} + {386456400 14400 1 MSD} + {402264000 10800 0 MSK} + {417992400 14400 1 MSD} + {433800000 10800 0 MSK} + {449614800 14400 1 MSD} + {465346800 10800 0 MSK} + {481071600 14400 1 MSD} + {496796400 10800 0 MSK} + {512521200 14400 1 MSD} + {528246000 10800 0 MSK} + {543970800 14400 1 MSD} + {559695600 10800 0 MSK} + {575420400 14400 1 MSD} + {591145200 10800 0 MSK} + {606870000 14400 1 MSD} + {622594800 10800 0 MSK} + {631141200 10800 0 MSK} + {646786800 7200 0 EET} + {694216800 7200 0 EET} + {701820000 10800 1 EEST} + {717541200 7200 0 EET} + {733269600 10800 1 EEST} + {748990800 7200 0 EET} + {764719200 10800 1 EEST} + {767743200 14400 0 MSD} + {780436800 10800 0 MSK} + {796165200 14400 1 MSD} + {811886400 10800 0 MSK} + {828219600 14400 1 MSD} + {852066000 10800 0 MSK} + {859683600 10800 0 EEST} + {877827600 7200 0 EET} + {891133200 10800 1 EEST} + {909277200 7200 0 EET} + {922582800 10800 1 EEST} + {941331600 7200 0 EET} + {954032400 10800 1 EEST} + {972781200 7200 0 EET} + {985482000 10800 1 EEST} + {1004230800 7200 0 EET} + {1017536400 10800 1 EEST} + {1035680400 7200 0 EET} + {1048986000 10800 1 EEST} + {1067130000 7200 0 EET} + {1080435600 10800 1 EEST} + {1099184400 7200 0 EET} + {1111885200 10800 1 EEST} + {1130634000 7200 0 EET} + {1143334800 10800 1 EEST} + {1162083600 7200 0 EET} + {1174784400 10800 1 EEST} + {1193533200 7200 0 EET} + {1206838800 10800 1 EEST} + {1224982800 7200 0 EET} + {1238288400 10800 1 EEST} + {1256432400 7200 0 EET} + {1269738000 10800 1 EEST} + {1288486800 7200 0 EET} + {1301187600 10800 1 EEST} + {1319936400 7200 0 EET} + {1332637200 10800 1 EEST} + {1351386000 7200 0 EET} + {1364691600 10800 1 EEST} + {1382835600 7200 0 EET} + {1396137600 14400 0 MSK} + {1414274400 10800 0 MSK} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Skopje b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Skopje new file mode 100644 index 00000000..07eedbe9 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Skopje @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Europe/Belgrade)]} { + LoadTimeZoneFile Europe/Belgrade +} +set TZData(:Europe/Skopje) $TZData(:Europe/Belgrade) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Sofia b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Sofia new file mode 100644 index 00000000..a07f3bc1 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Sofia @@ -0,0 +1,258 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Sofia) { + {-9223372036854775808 5596 0 LMT} + {-2840146396 7016 0 IMT} + {-2369527016 7200 0 EET} + {-857257200 3600 0 CET} + {-844556400 7200 1 CEST} + {-828226800 3600 0 CET} + {-812502000 7200 1 CEST} + {-796777200 3600 0 CET} + {-788922000 3600 0 CET} + {-781048800 7200 0 EET} + {291762000 10800 0 EEST} + {307576800 7200 0 EET} + {323816400 10800 1 EEST} + {339026400 7200 0 EET} + {355266000 10800 1 EEST} + {370393200 7200 0 EET} + {386715600 10800 1 EEST} + {401846400 7200 0 EET} + {417571200 10800 1 EEST} + {433296000 7200 0 EET} + {449020800 10800 1 EEST} + {465350400 7200 0 EET} + {481075200 10800 1 EEST} + {496800000 7200 0 EET} + {512524800 10800 1 EEST} + {528249600 7200 0 EET} + {543974400 10800 1 EEST} + {559699200 7200 0 EET} + {575424000 10800 1 EEST} + {591148800 7200 0 EET} + {606873600 10800 1 EEST} + {622598400 7200 0 EET} + {638323200 10800 1 EEST} + {654652800 7200 0 EET} + {662680800 7200 0 EET} + {670370400 10800 1 EEST} + {686091600 7200 0 EET} + {701820000 10800 1 EEST} + {717541200 7200 0 EET} + {733269600 10800 1 EEST} + {748990800 7200 0 EET} + {764719200 10800 1 EEST} + {780440400 7200 0 EET} + {796168800 10800 1 EEST} + {811890000 7200 0 EET} + {828223200 10800 1 EEST} + {846363600 7200 0 EET} + {852069600 7200 0 EET} + {859683600 10800 1 EEST} + {877827600 7200 0 EET} + {891133200 10800 1 EEST} + {909277200 7200 0 EET} + {922582800 10800 1 EEST} + {941331600 7200 0 EET} + {954032400 10800 1 EEST} + {972781200 7200 0 EET} + {985482000 10800 1 EEST} + {1004230800 7200 0 EET} + {1017536400 10800 1 EEST} + {1035680400 7200 0 EET} + {1048986000 10800 1 EEST} + {1067130000 7200 0 EET} + {1080435600 10800 1 EEST} + {1099184400 7200 0 EET} + {1111885200 10800 1 EEST} + {1130634000 7200 0 EET} + {1143334800 10800 1 EEST} + {1162083600 7200 0 EET} + {1174784400 10800 1 EEST} + {1193533200 7200 0 EET} + {1206838800 10800 1 EEST} + {1224982800 7200 0 EET} + {1238288400 10800 1 EEST} + {1256432400 7200 0 EET} + {1269738000 10800 1 EEST} + {1288486800 7200 0 EET} + {1301187600 10800 1 EEST} + {1319936400 7200 0 EET} + {1332637200 10800 1 EEST} + {1351386000 7200 0 EET} + {1364691600 10800 1 EEST} + {1382835600 7200 0 EET} + {1396141200 10800 1 EEST} + {1414285200 7200 0 EET} + {1427590800 10800 1 EEST} + {1445734800 7200 0 EET} + {1459040400 10800 1 EEST} + {1477789200 7200 0 EET} + {1490490000 10800 1 EEST} + {1509238800 7200 0 EET} + {1521939600 10800 1 EEST} + {1540688400 7200 0 EET} + {1553994000 10800 1 EEST} + {1572138000 7200 0 EET} + {1585443600 10800 1 EEST} + {1603587600 7200 0 EET} + {1616893200 10800 1 EEST} + {1635642000 7200 0 EET} + {1648342800 10800 1 EEST} + {1667091600 7200 0 EET} + {1679792400 10800 1 EEST} + {1698541200 7200 0 EET} + {1711846800 10800 1 EEST} + {1729990800 7200 0 EET} + {1743296400 10800 1 EEST} + {1761440400 7200 0 EET} + {1774746000 10800 1 EEST} + {1792890000 7200 0 EET} + {1806195600 10800 1 EEST} + {1824944400 7200 0 EET} + {1837645200 10800 1 EEST} + {1856394000 7200 0 EET} + {1869094800 10800 1 EEST} + {1887843600 7200 0 EET} + {1901149200 10800 1 EEST} + {1919293200 7200 0 EET} + {1932598800 10800 1 EEST} + {1950742800 7200 0 EET} + {1964048400 10800 1 EEST} + {1982797200 7200 0 EET} + {1995498000 10800 1 EEST} + {2014246800 7200 0 EET} + {2026947600 10800 1 EEST} + {2045696400 7200 0 EET} + {2058397200 10800 1 EEST} + {2077146000 7200 0 EET} + {2090451600 10800 1 EEST} + {2108595600 7200 0 EET} + {2121901200 10800 1 EEST} + {2140045200 7200 0 EET} + {2153350800 10800 1 EEST} + {2172099600 7200 0 EET} + {2184800400 10800 1 EEST} + {2203549200 7200 0 EET} + {2216250000 10800 1 EEST} + {2234998800 7200 0 EET} + {2248304400 10800 1 EEST} + {2266448400 7200 0 EET} + {2279754000 10800 1 EEST} + {2297898000 7200 0 EET} + {2311203600 10800 1 EEST} + {2329347600 7200 0 EET} + {2342653200 10800 1 EEST} + {2361402000 7200 0 EET} + {2374102800 10800 1 EEST} + {2392851600 7200 0 EET} + {2405552400 10800 1 EEST} + {2424301200 7200 0 EET} + {2437606800 10800 1 EEST} + {2455750800 7200 0 EET} + {2469056400 10800 1 EEST} + {2487200400 7200 0 EET} + {2500506000 10800 1 EEST} + {2519254800 7200 0 EET} + {2531955600 10800 1 EEST} + {2550704400 7200 0 EET} + {2563405200 10800 1 EEST} + {2582154000 7200 0 EET} + {2595459600 10800 1 EEST} + {2613603600 7200 0 EET} + {2626909200 10800 1 EEST} + {2645053200 7200 0 EET} + {2658358800 10800 1 EEST} + {2676502800 7200 0 EET} + {2689808400 10800 1 EEST} + {2708557200 7200 0 EET} + {2721258000 10800 1 EEST} + {2740006800 7200 0 EET} + {2752707600 10800 1 EEST} + {2771456400 7200 0 EET} + {2784762000 10800 1 EEST} + {2802906000 7200 0 EET} + {2816211600 10800 1 EEST} + {2834355600 7200 0 EET} + {2847661200 10800 1 EEST} + {2866410000 7200 0 EET} + {2879110800 10800 1 EEST} + {2897859600 7200 0 EET} + {2910560400 10800 1 EEST} + {2929309200 7200 0 EET} + {2942010000 10800 1 EEST} + {2960758800 7200 0 EET} + {2974064400 10800 1 EEST} + {2992208400 7200 0 EET} + {3005514000 10800 1 EEST} + {3023658000 7200 0 EET} + {3036963600 10800 1 EEST} + {3055712400 7200 0 EET} + {3068413200 10800 1 EEST} + {3087162000 7200 0 EET} + {3099862800 10800 1 EEST} + {3118611600 7200 0 EET} + {3131917200 10800 1 EEST} + {3150061200 7200 0 EET} + {3163366800 10800 1 EEST} + {3181510800 7200 0 EET} + {3194816400 10800 1 EEST} + {3212960400 7200 0 EET} + {3226266000 10800 1 EEST} + {3245014800 7200 0 EET} + {3257715600 10800 1 EEST} + {3276464400 7200 0 EET} + {3289165200 10800 1 EEST} + {3307914000 7200 0 EET} + {3321219600 10800 1 EEST} + {3339363600 7200 0 EET} + {3352669200 10800 1 EEST} + {3370813200 7200 0 EET} + {3384118800 10800 1 EEST} + {3402867600 7200 0 EET} + {3415568400 10800 1 EEST} + {3434317200 7200 0 EET} + {3447018000 10800 1 EEST} + {3465766800 7200 0 EET} + {3479072400 10800 1 EEST} + {3497216400 7200 0 EET} + {3510522000 10800 1 EEST} + {3528666000 7200 0 EET} + {3541971600 10800 1 EEST} + {3560115600 7200 0 EET} + {3573421200 10800 1 EEST} + {3592170000 7200 0 EET} + {3604870800 10800 1 EEST} + {3623619600 7200 0 EET} + {3636320400 10800 1 EEST} + {3655069200 7200 0 EET} + {3668374800 10800 1 EEST} + {3686518800 7200 0 EET} + {3699824400 10800 1 EEST} + {3717968400 7200 0 EET} + {3731274000 10800 1 EEST} + {3750022800 7200 0 EET} + {3762723600 10800 1 EEST} + {3781472400 7200 0 EET} + {3794173200 10800 1 EEST} + {3812922000 7200 0 EET} + {3825622800 10800 1 EEST} + {3844371600 7200 0 EET} + {3857677200 10800 1 EEST} + {3875821200 7200 0 EET} + {3889126800 10800 1 EEST} + {3907270800 7200 0 EET} + {3920576400 10800 1 EEST} + {3939325200 7200 0 EET} + {3952026000 10800 1 EEST} + {3970774800 7200 0 EET} + {3983475600 10800 1 EEST} + {4002224400 7200 0 EET} + {4015530000 10800 1 EEST} + {4033674000 7200 0 EET} + {4046979600 10800 1 EEST} + {4065123600 7200 0 EET} + {4078429200 10800 1 EEST} + {4096573200 7200 0 EET} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Stockholm b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Stockholm new file mode 100644 index 00000000..b74d3275 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Stockholm @@ -0,0 +1,250 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Stockholm) { + {-9223372036854775808 4332 0 LMT} + {-2871681132 3614 0 SET} + {-2208992414 3600 0 CET} + {-1692496800 7200 1 CEST} + {-1680483600 3600 0 CET} + {315529200 3600 0 CET} + {323830800 7200 1 CEST} + {338950800 3600 0 CET} + {354675600 7200 1 CEST} + {370400400 3600 0 CET} + {386125200 7200 1 CEST} + {401850000 3600 0 CET} + {417574800 7200 1 CEST} + {433299600 3600 0 CET} + {449024400 7200 1 CEST} + {465354000 3600 0 CET} + {481078800 7200 1 CEST} + {496803600 3600 0 CET} + {512528400 7200 1 CEST} + {528253200 3600 0 CET} + {543978000 7200 1 CEST} + {559702800 3600 0 CET} + {575427600 7200 1 CEST} + {591152400 3600 0 CET} + {606877200 7200 1 CEST} + {622602000 3600 0 CET} + {638326800 7200 1 CEST} + {654656400 3600 0 CET} + {670381200 7200 1 CEST} + {686106000 3600 0 CET} + {701830800 7200 1 CEST} + {717555600 3600 0 CET} + {733280400 7200 1 CEST} + {749005200 3600 0 CET} + {764730000 7200 1 CEST} + {780454800 3600 0 CET} + {796179600 7200 1 CEST} + {811904400 3600 0 CET} + {828234000 7200 1 CEST} + {846378000 3600 0 CET} + {859683600 7200 1 CEST} + {877827600 3600 0 CET} + {891133200 7200 1 CEST} + {909277200 3600 0 CET} + {922582800 7200 1 CEST} + {941331600 3600 0 CET} + {954032400 7200 1 CEST} + {972781200 3600 0 CET} + {985482000 7200 1 CEST} + {1004230800 3600 0 CET} + {1017536400 7200 1 CEST} + {1035680400 3600 0 CET} + {1048986000 7200 1 CEST} + {1067130000 3600 0 CET} + {1080435600 7200 1 CEST} + {1099184400 3600 0 CET} + {1111885200 7200 1 CEST} + {1130634000 3600 0 CET} + {1143334800 7200 1 CEST} + {1162083600 3600 0 CET} + {1174784400 7200 1 CEST} + {1193533200 3600 0 CET} + {1206838800 7200 1 CEST} + {1224982800 3600 0 CET} + {1238288400 7200 1 CEST} + {1256432400 3600 0 CET} + {1269738000 7200 1 CEST} + {1288486800 3600 0 CET} + {1301187600 7200 1 CEST} + {1319936400 3600 0 CET} + {1332637200 7200 1 CEST} + {1351386000 3600 0 CET} + {1364691600 7200 1 CEST} + {1382835600 3600 0 CET} + {1396141200 7200 1 CEST} + {1414285200 3600 0 CET} + {1427590800 7200 1 CEST} + {1445734800 3600 0 CET} + {1459040400 7200 1 CEST} + {1477789200 3600 0 CET} + {1490490000 7200 1 CEST} + {1509238800 3600 0 CET} + {1521939600 7200 1 CEST} + {1540688400 3600 0 CET} + {1553994000 7200 1 CEST} + {1572138000 3600 0 CET} + {1585443600 7200 1 CEST} + {1603587600 3600 0 CET} + {1616893200 7200 1 CEST} + {1635642000 3600 0 CET} + {1648342800 7200 1 CEST} + {1667091600 3600 0 CET} + {1679792400 7200 1 CEST} + {1698541200 3600 0 CET} + {1711846800 7200 1 CEST} + {1729990800 3600 0 CET} + {1743296400 7200 1 CEST} + {1761440400 3600 0 CET} + {1774746000 7200 1 CEST} + {1792890000 3600 0 CET} + {1806195600 7200 1 CEST} + {1824944400 3600 0 CET} + {1837645200 7200 1 CEST} + {1856394000 3600 0 CET} + {1869094800 7200 1 CEST} + {1887843600 3600 0 CET} + {1901149200 7200 1 CEST} + {1919293200 3600 0 CET} + {1932598800 7200 1 CEST} + {1950742800 3600 0 CET} + {1964048400 7200 1 CEST} + {1982797200 3600 0 CET} + {1995498000 7200 1 CEST} + {2014246800 3600 0 CET} + {2026947600 7200 1 CEST} + {2045696400 3600 0 CET} + {2058397200 7200 1 CEST} + {2077146000 3600 0 CET} + {2090451600 7200 1 CEST} + {2108595600 3600 0 CET} + {2121901200 7200 1 CEST} + {2140045200 3600 0 CET} + {2153350800 7200 1 CEST} + {2172099600 3600 0 CET} + {2184800400 7200 1 CEST} + {2203549200 3600 0 CET} + {2216250000 7200 1 CEST} + {2234998800 3600 0 CET} + {2248304400 7200 1 CEST} + {2266448400 3600 0 CET} + {2279754000 7200 1 CEST} + {2297898000 3600 0 CET} + {2311203600 7200 1 CEST} + {2329347600 3600 0 CET} + {2342653200 7200 1 CEST} + {2361402000 3600 0 CET} + {2374102800 7200 1 CEST} + {2392851600 3600 0 CET} + {2405552400 7200 1 CEST} + {2424301200 3600 0 CET} + {2437606800 7200 1 CEST} + {2455750800 3600 0 CET} + {2469056400 7200 1 CEST} + {2487200400 3600 0 CET} + {2500506000 7200 1 CEST} + {2519254800 3600 0 CET} + {2531955600 7200 1 CEST} + {2550704400 3600 0 CET} + {2563405200 7200 1 CEST} + {2582154000 3600 0 CET} + {2595459600 7200 1 CEST} + {2613603600 3600 0 CET} + {2626909200 7200 1 CEST} + {2645053200 3600 0 CET} + {2658358800 7200 1 CEST} + {2676502800 3600 0 CET} + {2689808400 7200 1 CEST} + {2708557200 3600 0 CET} + {2721258000 7200 1 CEST} + {2740006800 3600 0 CET} + {2752707600 7200 1 CEST} + {2771456400 3600 0 CET} + {2784762000 7200 1 CEST} + {2802906000 3600 0 CET} + {2816211600 7200 1 CEST} + {2834355600 3600 0 CET} + {2847661200 7200 1 CEST} + {2866410000 3600 0 CET} + {2879110800 7200 1 CEST} + {2897859600 3600 0 CET} + {2910560400 7200 1 CEST} + {2929309200 3600 0 CET} + {2942010000 7200 1 CEST} + {2960758800 3600 0 CET} + {2974064400 7200 1 CEST} + {2992208400 3600 0 CET} + {3005514000 7200 1 CEST} + {3023658000 3600 0 CET} + {3036963600 7200 1 CEST} + {3055712400 3600 0 CET} + {3068413200 7200 1 CEST} + {3087162000 3600 0 CET} + {3099862800 7200 1 CEST} + {3118611600 3600 0 CET} + {3131917200 7200 1 CEST} + {3150061200 3600 0 CET} + {3163366800 7200 1 CEST} + {3181510800 3600 0 CET} + {3194816400 7200 1 CEST} + {3212960400 3600 0 CET} + {3226266000 7200 1 CEST} + {3245014800 3600 0 CET} + {3257715600 7200 1 CEST} + {3276464400 3600 0 CET} + {3289165200 7200 1 CEST} + {3307914000 3600 0 CET} + {3321219600 7200 1 CEST} + {3339363600 3600 0 CET} + {3352669200 7200 1 CEST} + {3370813200 3600 0 CET} + {3384118800 7200 1 CEST} + {3402867600 3600 0 CET} + {3415568400 7200 1 CEST} + {3434317200 3600 0 CET} + {3447018000 7200 1 CEST} + {3465766800 3600 0 CET} + {3479072400 7200 1 CEST} + {3497216400 3600 0 CET} + {3510522000 7200 1 CEST} + {3528666000 3600 0 CET} + {3541971600 7200 1 CEST} + {3560115600 3600 0 CET} + {3573421200 7200 1 CEST} + {3592170000 3600 0 CET} + {3604870800 7200 1 CEST} + {3623619600 3600 0 CET} + {3636320400 7200 1 CEST} + {3655069200 3600 0 CET} + {3668374800 7200 1 CEST} + {3686518800 3600 0 CET} + {3699824400 7200 1 CEST} + {3717968400 3600 0 CET} + {3731274000 7200 1 CEST} + {3750022800 3600 0 CET} + {3762723600 7200 1 CEST} + {3781472400 3600 0 CET} + {3794173200 7200 1 CEST} + {3812922000 3600 0 CET} + {3825622800 7200 1 CEST} + {3844371600 3600 0 CET} + {3857677200 7200 1 CEST} + {3875821200 3600 0 CET} + {3889126800 7200 1 CEST} + {3907270800 3600 0 CET} + {3920576400 7200 1 CEST} + {3939325200 3600 0 CET} + {3952026000 7200 1 CEST} + {3970774800 3600 0 CET} + {3983475600 7200 1 CEST} + {4002224400 3600 0 CET} + {4015530000 7200 1 CEST} + {4033674000 3600 0 CET} + {4046979600 7200 1 CEST} + {4065123600 3600 0 CET} + {4078429200 7200 1 CEST} + {4096573200 3600 0 CET} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Tallinn b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Tallinn new file mode 100644 index 00000000..e0f22a56 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Tallinn @@ -0,0 +1,254 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Tallinn) { + {-9223372036854775808 5940 0 LMT} + {-2840146740 5940 0 TMT} + {-1638322740 3600 0 CET} + {-1632006000 7200 1 CEST} + {-1618700400 3600 0 CET} + {-1593824400 5940 0 TMT} + {-1535938740 7200 0 EET} + {-927943200 10800 0 MSK} + {-892954800 3600 0 CET} + {-857257200 3600 0 CET} + {-844556400 7200 1 CEST} + {-828226800 3600 0 CET} + {-812502000 7200 1 CEST} + {-797648400 10800 0 MSD} + {354920400 14400 1 MSD} + {370728000 10800 0 MSK} + {386456400 14400 1 MSD} + {402264000 10800 0 MSK} + {417992400 14400 1 MSD} + {433800000 10800 0 MSK} + {449614800 14400 1 MSD} + {465346800 10800 0 MSK} + {481071600 14400 1 MSD} + {496796400 10800 0 MSK} + {512521200 14400 1 MSD} + {528246000 10800 0 MSK} + {543970800 14400 1 MSD} + {559695600 10800 0 MSK} + {575420400 14400 1 MSD} + {591145200 10800 0 MSK} + {606870000 10800 1 EEST} + {622598400 7200 0 EET} + {638323200 10800 1 EEST} + {654652800 7200 0 EET} + {670377600 10800 1 EEST} + {686102400 7200 0 EET} + {701827200 10800 1 EEST} + {717552000 7200 0 EET} + {733276800 10800 1 EEST} + {749001600 7200 0 EET} + {764726400 10800 1 EEST} + {780451200 7200 0 EET} + {796176000 10800 1 EEST} + {811900800 7200 0 EET} + {828230400 10800 1 EEST} + {846374400 7200 0 EET} + {859680000 10800 1 EEST} + {877824000 7200 0 EET} + {891129600 10800 1 EEST} + {906415200 10800 0 EEST} + {909277200 7200 0 EET} + {922582800 10800 1 EEST} + {941335200 7200 0 EET} + {1014242400 7200 0 EET} + {1017536400 10800 1 EEST} + {1035680400 7200 0 EET} + {1048986000 10800 1 EEST} + {1067130000 7200 0 EET} + {1080435600 10800 1 EEST} + {1099184400 7200 0 EET} + {1111885200 10800 1 EEST} + {1130634000 7200 0 EET} + {1143334800 10800 1 EEST} + {1162083600 7200 0 EET} + {1174784400 10800 1 EEST} + {1193533200 7200 0 EET} + {1206838800 10800 1 EEST} + {1224982800 7200 0 EET} + {1238288400 10800 1 EEST} + {1256432400 7200 0 EET} + {1269738000 10800 1 EEST} + {1288486800 7200 0 EET} + {1301187600 10800 1 EEST} + {1319936400 7200 0 EET} + {1332637200 10800 1 EEST} + {1351386000 7200 0 EET} + {1364691600 10800 1 EEST} + {1382835600 7200 0 EET} + {1396141200 10800 1 EEST} + {1414285200 7200 0 EET} + {1427590800 10800 1 EEST} + {1445734800 7200 0 EET} + {1459040400 10800 1 EEST} + {1477789200 7200 0 EET} + {1490490000 10800 1 EEST} + {1509238800 7200 0 EET} + {1521939600 10800 1 EEST} + {1540688400 7200 0 EET} + {1553994000 10800 1 EEST} + {1572138000 7200 0 EET} + {1585443600 10800 1 EEST} + {1603587600 7200 0 EET} + {1616893200 10800 1 EEST} + {1635642000 7200 0 EET} + {1648342800 10800 1 EEST} + {1667091600 7200 0 EET} + {1679792400 10800 1 EEST} + {1698541200 7200 0 EET} + {1711846800 10800 1 EEST} + {1729990800 7200 0 EET} + {1743296400 10800 1 EEST} + {1761440400 7200 0 EET} + {1774746000 10800 1 EEST} + {1792890000 7200 0 EET} + {1806195600 10800 1 EEST} + {1824944400 7200 0 EET} + {1837645200 10800 1 EEST} + {1856394000 7200 0 EET} + {1869094800 10800 1 EEST} + {1887843600 7200 0 EET} + {1901149200 10800 1 EEST} + {1919293200 7200 0 EET} + {1932598800 10800 1 EEST} + {1950742800 7200 0 EET} + {1964048400 10800 1 EEST} + {1982797200 7200 0 EET} + {1995498000 10800 1 EEST} + {2014246800 7200 0 EET} + {2026947600 10800 1 EEST} + {2045696400 7200 0 EET} + {2058397200 10800 1 EEST} + {2077146000 7200 0 EET} + {2090451600 10800 1 EEST} + {2108595600 7200 0 EET} + {2121901200 10800 1 EEST} + {2140045200 7200 0 EET} + {2153350800 10800 1 EEST} + {2172099600 7200 0 EET} + {2184800400 10800 1 EEST} + {2203549200 7200 0 EET} + {2216250000 10800 1 EEST} + {2234998800 7200 0 EET} + {2248304400 10800 1 EEST} + {2266448400 7200 0 EET} + {2279754000 10800 1 EEST} + {2297898000 7200 0 EET} + {2311203600 10800 1 EEST} + {2329347600 7200 0 EET} + {2342653200 10800 1 EEST} + {2361402000 7200 0 EET} + {2374102800 10800 1 EEST} + {2392851600 7200 0 EET} + {2405552400 10800 1 EEST} + {2424301200 7200 0 EET} + {2437606800 10800 1 EEST} + {2455750800 7200 0 EET} + {2469056400 10800 1 EEST} + {2487200400 7200 0 EET} + {2500506000 10800 1 EEST} + {2519254800 7200 0 EET} + {2531955600 10800 1 EEST} + {2550704400 7200 0 EET} + {2563405200 10800 1 EEST} + {2582154000 7200 0 EET} + {2595459600 10800 1 EEST} + {2613603600 7200 0 EET} + {2626909200 10800 1 EEST} + {2645053200 7200 0 EET} + {2658358800 10800 1 EEST} + {2676502800 7200 0 EET} + {2689808400 10800 1 EEST} + {2708557200 7200 0 EET} + {2721258000 10800 1 EEST} + {2740006800 7200 0 EET} + {2752707600 10800 1 EEST} + {2771456400 7200 0 EET} + {2784762000 10800 1 EEST} + {2802906000 7200 0 EET} + {2816211600 10800 1 EEST} + {2834355600 7200 0 EET} + {2847661200 10800 1 EEST} + {2866410000 7200 0 EET} + {2879110800 10800 1 EEST} + {2897859600 7200 0 EET} + {2910560400 10800 1 EEST} + {2929309200 7200 0 EET} + {2942010000 10800 1 EEST} + {2960758800 7200 0 EET} + {2974064400 10800 1 EEST} + {2992208400 7200 0 EET} + {3005514000 10800 1 EEST} + {3023658000 7200 0 EET} + {3036963600 10800 1 EEST} + {3055712400 7200 0 EET} + {3068413200 10800 1 EEST} + {3087162000 7200 0 EET} + {3099862800 10800 1 EEST} + {3118611600 7200 0 EET} + {3131917200 10800 1 EEST} + {3150061200 7200 0 EET} + {3163366800 10800 1 EEST} + {3181510800 7200 0 EET} + {3194816400 10800 1 EEST} + {3212960400 7200 0 EET} + {3226266000 10800 1 EEST} + {3245014800 7200 0 EET} + {3257715600 10800 1 EEST} + {3276464400 7200 0 EET} + {3289165200 10800 1 EEST} + {3307914000 7200 0 EET} + {3321219600 10800 1 EEST} + {3339363600 7200 0 EET} + {3352669200 10800 1 EEST} + {3370813200 7200 0 EET} + {3384118800 10800 1 EEST} + {3402867600 7200 0 EET} + {3415568400 10800 1 EEST} + {3434317200 7200 0 EET} + {3447018000 10800 1 EEST} + {3465766800 7200 0 EET} + {3479072400 10800 1 EEST} + {3497216400 7200 0 EET} + {3510522000 10800 1 EEST} + {3528666000 7200 0 EET} + {3541971600 10800 1 EEST} + {3560115600 7200 0 EET} + {3573421200 10800 1 EEST} + {3592170000 7200 0 EET} + {3604870800 10800 1 EEST} + {3623619600 7200 0 EET} + {3636320400 10800 1 EEST} + {3655069200 7200 0 EET} + {3668374800 10800 1 EEST} + {3686518800 7200 0 EET} + {3699824400 10800 1 EEST} + {3717968400 7200 0 EET} + {3731274000 10800 1 EEST} + {3750022800 7200 0 EET} + {3762723600 10800 1 EEST} + {3781472400 7200 0 EET} + {3794173200 10800 1 EEST} + {3812922000 7200 0 EET} + {3825622800 10800 1 EEST} + {3844371600 7200 0 EET} + {3857677200 10800 1 EEST} + {3875821200 7200 0 EET} + {3889126800 10800 1 EEST} + {3907270800 7200 0 EET} + {3920576400 10800 1 EEST} + {3939325200 7200 0 EET} + {3952026000 10800 1 EEST} + {3970774800 7200 0 EET} + {3983475600 10800 1 EEST} + {4002224400 7200 0 EET} + {4015530000 10800 1 EEST} + {4033674000 7200 0 EET} + {4046979600 10800 1 EEST} + {4065123600 7200 0 EET} + {4078429200 10800 1 EEST} + {4096573200 7200 0 EET} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Tirane b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Tirane new file mode 100644 index 00000000..14ace2e5 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Tirane @@ -0,0 +1,263 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Tirane) { + {-9223372036854775808 4760 0 LMT} + {-1767230360 3600 0 CET} + {-932346000 7200 0 CEST} + {-857257200 3600 0 CET} + {-844556400 7200 1 CEST} + {-843519600 3600 0 CET} + {136854000 7200 1 CEST} + {149896800 3600 0 CET} + {168130800 7200 1 CEST} + {181432800 3600 0 CET} + {199839600 7200 1 CEST} + {213141600 3600 0 CET} + {231894000 7200 1 CEST} + {244591200 3600 0 CET} + {263257200 7200 1 CEST} + {276040800 3600 0 CET} + {294706800 7200 1 CEST} + {307490400 3600 0 CET} + {326156400 7200 1 CEST} + {339458400 3600 0 CET} + {357087600 7200 1 CEST} + {370389600 3600 0 CET} + {389142000 7200 1 CEST} + {402444000 3600 0 CET} + {419468400 7200 1 CEST} + {433807200 3600 0 CET} + {449622000 7200 1 CEST} + {457480800 7200 0 CEST} + {465354000 3600 0 CET} + {481078800 7200 1 CEST} + {496803600 3600 0 CET} + {512528400 7200 1 CEST} + {528253200 3600 0 CET} + {543978000 7200 1 CEST} + {559702800 3600 0 CET} + {575427600 7200 1 CEST} + {591152400 3600 0 CET} + {606877200 7200 1 CEST} + {622602000 3600 0 CET} + {638326800 7200 1 CEST} + {654656400 3600 0 CET} + {670381200 7200 1 CEST} + {686106000 3600 0 CET} + {701830800 7200 1 CEST} + {717555600 3600 0 CET} + {733280400 7200 1 CEST} + {749005200 3600 0 CET} + {764730000 7200 1 CEST} + {780454800 3600 0 CET} + {796179600 7200 1 CEST} + {811904400 3600 0 CET} + {828234000 7200 1 CEST} + {846378000 3600 0 CET} + {859683600 7200 1 CEST} + {877827600 3600 0 CET} + {891133200 7200 1 CEST} + {909277200 3600 0 CET} + {922582800 7200 1 CEST} + {941331600 3600 0 CET} + {954032400 7200 1 CEST} + {972781200 3600 0 CET} + {985482000 7200 1 CEST} + {1004230800 3600 0 CET} + {1017536400 7200 1 CEST} + {1035680400 3600 0 CET} + {1048986000 7200 1 CEST} + {1067130000 3600 0 CET} + {1080435600 7200 1 CEST} + {1099184400 3600 0 CET} + {1111885200 7200 1 CEST} + {1130634000 3600 0 CET} + {1143334800 7200 1 CEST} + {1162083600 3600 0 CET} + {1174784400 7200 1 CEST} + {1193533200 3600 0 CET} + {1206838800 7200 1 CEST} + {1224982800 3600 0 CET} + {1238288400 7200 1 CEST} + {1256432400 3600 0 CET} + {1269738000 7200 1 CEST} + {1288486800 3600 0 CET} + {1301187600 7200 1 CEST} + {1319936400 3600 0 CET} + {1332637200 7200 1 CEST} + {1351386000 3600 0 CET} + {1364691600 7200 1 CEST} + {1382835600 3600 0 CET} + {1396141200 7200 1 CEST} + {1414285200 3600 0 CET} + {1427590800 7200 1 CEST} + {1445734800 3600 0 CET} + {1459040400 7200 1 CEST} + {1477789200 3600 0 CET} + {1490490000 7200 1 CEST} + {1509238800 3600 0 CET} + {1521939600 7200 1 CEST} + {1540688400 3600 0 CET} + {1553994000 7200 1 CEST} + {1572138000 3600 0 CET} + {1585443600 7200 1 CEST} + {1603587600 3600 0 CET} + {1616893200 7200 1 CEST} + {1635642000 3600 0 CET} + {1648342800 7200 1 CEST} + {1667091600 3600 0 CET} + {1679792400 7200 1 CEST} + {1698541200 3600 0 CET} + {1711846800 7200 1 CEST} + {1729990800 3600 0 CET} + {1743296400 7200 1 CEST} + {1761440400 3600 0 CET} + {1774746000 7200 1 CEST} + {1792890000 3600 0 CET} + {1806195600 7200 1 CEST} + {1824944400 3600 0 CET} + {1837645200 7200 1 CEST} + {1856394000 3600 0 CET} + {1869094800 7200 1 CEST} + {1887843600 3600 0 CET} + {1901149200 7200 1 CEST} + {1919293200 3600 0 CET} + {1932598800 7200 1 CEST} + {1950742800 3600 0 CET} + {1964048400 7200 1 CEST} + {1982797200 3600 0 CET} + {1995498000 7200 1 CEST} + {2014246800 3600 0 CET} + {2026947600 7200 1 CEST} + {2045696400 3600 0 CET} + {2058397200 7200 1 CEST} + {2077146000 3600 0 CET} + {2090451600 7200 1 CEST} + {2108595600 3600 0 CET} + {2121901200 7200 1 CEST} + {2140045200 3600 0 CET} + {2153350800 7200 1 CEST} + {2172099600 3600 0 CET} + {2184800400 7200 1 CEST} + {2203549200 3600 0 CET} + {2216250000 7200 1 CEST} + {2234998800 3600 0 CET} + {2248304400 7200 1 CEST} + {2266448400 3600 0 CET} + {2279754000 7200 1 CEST} + {2297898000 3600 0 CET} + {2311203600 7200 1 CEST} + {2329347600 3600 0 CET} + {2342653200 7200 1 CEST} + {2361402000 3600 0 CET} + {2374102800 7200 1 CEST} + {2392851600 3600 0 CET} + {2405552400 7200 1 CEST} + {2424301200 3600 0 CET} + {2437606800 7200 1 CEST} + {2455750800 3600 0 CET} + {2469056400 7200 1 CEST} + {2487200400 3600 0 CET} + {2500506000 7200 1 CEST} + {2519254800 3600 0 CET} + {2531955600 7200 1 CEST} + {2550704400 3600 0 CET} + {2563405200 7200 1 CEST} + {2582154000 3600 0 CET} + {2595459600 7200 1 CEST} + {2613603600 3600 0 CET} + {2626909200 7200 1 CEST} + {2645053200 3600 0 CET} + {2658358800 7200 1 CEST} + {2676502800 3600 0 CET} + {2689808400 7200 1 CEST} + {2708557200 3600 0 CET} + {2721258000 7200 1 CEST} + {2740006800 3600 0 CET} + {2752707600 7200 1 CEST} + {2771456400 3600 0 CET} + {2784762000 7200 1 CEST} + {2802906000 3600 0 CET} + {2816211600 7200 1 CEST} + {2834355600 3600 0 CET} + {2847661200 7200 1 CEST} + {2866410000 3600 0 CET} + {2879110800 7200 1 CEST} + {2897859600 3600 0 CET} + {2910560400 7200 1 CEST} + {2929309200 3600 0 CET} + {2942010000 7200 1 CEST} + {2960758800 3600 0 CET} + {2974064400 7200 1 CEST} + {2992208400 3600 0 CET} + {3005514000 7200 1 CEST} + {3023658000 3600 0 CET} + {3036963600 7200 1 CEST} + {3055712400 3600 0 CET} + {3068413200 7200 1 CEST} + {3087162000 3600 0 CET} + {3099862800 7200 1 CEST} + {3118611600 3600 0 CET} + {3131917200 7200 1 CEST} + {3150061200 3600 0 CET} + {3163366800 7200 1 CEST} + {3181510800 3600 0 CET} + {3194816400 7200 1 CEST} + {3212960400 3600 0 CET} + {3226266000 7200 1 CEST} + {3245014800 3600 0 CET} + {3257715600 7200 1 CEST} + {3276464400 3600 0 CET} + {3289165200 7200 1 CEST} + {3307914000 3600 0 CET} + {3321219600 7200 1 CEST} + {3339363600 3600 0 CET} + {3352669200 7200 1 CEST} + {3370813200 3600 0 CET} + {3384118800 7200 1 CEST} + {3402867600 3600 0 CET} + {3415568400 7200 1 CEST} + {3434317200 3600 0 CET} + {3447018000 7200 1 CEST} + {3465766800 3600 0 CET} + {3479072400 7200 1 CEST} + {3497216400 3600 0 CET} + {3510522000 7200 1 CEST} + {3528666000 3600 0 CET} + {3541971600 7200 1 CEST} + {3560115600 3600 0 CET} + {3573421200 7200 1 CEST} + {3592170000 3600 0 CET} + {3604870800 7200 1 CEST} + {3623619600 3600 0 CET} + {3636320400 7200 1 CEST} + {3655069200 3600 0 CET} + {3668374800 7200 1 CEST} + {3686518800 3600 0 CET} + {3699824400 7200 1 CEST} + {3717968400 3600 0 CET} + {3731274000 7200 1 CEST} + {3750022800 3600 0 CET} + {3762723600 7200 1 CEST} + {3781472400 3600 0 CET} + {3794173200 7200 1 CEST} + {3812922000 3600 0 CET} + {3825622800 7200 1 CEST} + {3844371600 3600 0 CET} + {3857677200 7200 1 CEST} + {3875821200 3600 0 CET} + {3889126800 7200 1 CEST} + {3907270800 3600 0 CET} + {3920576400 7200 1 CEST} + {3939325200 3600 0 CET} + {3952026000 7200 1 CEST} + {3970774800 3600 0 CET} + {3983475600 7200 1 CEST} + {4002224400 3600 0 CET} + {4015530000 7200 1 CEST} + {4033674000 3600 0 CET} + {4046979600 7200 1 CEST} + {4065123600 3600 0 CET} + {4078429200 7200 1 CEST} + {4096573200 3600 0 CET} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Tiraspol b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Tiraspol new file mode 100644 index 00000000..ea8f6710 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Tiraspol @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Europe/Chisinau)]} { + LoadTimeZoneFile Europe/Chisinau +} +set TZData(:Europe/Tiraspol) $TZData(:Europe/Chisinau) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Uzhgorod b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Uzhgorod new file mode 100644 index 00000000..f6e580b0 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Uzhgorod @@ -0,0 +1,254 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Uzhgorod) { + {-9223372036854775808 5352 0 LMT} + {-2500939752 3600 0 CET} + {-946774800 3600 0 CET} + {-938905200 7200 1 CEST} + {-857257200 3600 0 CET} + {-844556400 7200 1 CEST} + {-828226800 3600 0 CET} + {-812502000 7200 1 CEST} + {-796870800 7200 1 CEST} + {-794714400 3600 0 CET} + {-773456400 10800 0 MSD} + {354920400 14400 1 MSD} + {370728000 10800 0 MSK} + {386456400 14400 1 MSD} + {402264000 10800 0 MSK} + {417992400 14400 1 MSD} + {433800000 10800 0 MSK} + {449614800 14400 1 MSD} + {465346800 10800 0 MSK} + {481071600 14400 1 MSD} + {496796400 10800 0 MSK} + {512521200 14400 1 MSD} + {528246000 10800 0 MSK} + {543970800 14400 1 MSD} + {559695600 10800 0 MSK} + {575420400 14400 1 MSD} + {591145200 10800 0 MSK} + {606870000 14400 1 MSD} + {622594800 10800 0 MSK} + {631141200 10800 0 MSK} + {646786800 3600 0 CET} + {670384800 7200 0 EET} + {694216800 7200 0 EET} + {701820000 10800 1 EEST} + {717541200 7200 0 EET} + {733269600 10800 1 EEST} + {748990800 7200 0 EET} + {764719200 10800 1 EEST} + {780440400 7200 0 EET} + {788911200 7200 0 EET} + {796179600 10800 1 EEST} + {811904400 7200 0 EET} + {828234000 10800 1 EEST} + {846378000 7200 0 EET} + {859683600 10800 1 EEST} + {877827600 7200 0 EET} + {891133200 10800 1 EEST} + {909277200 7200 0 EET} + {922582800 10800 1 EEST} + {941331600 7200 0 EET} + {954032400 10800 1 EEST} + {972781200 7200 0 EET} + {985482000 10800 1 EEST} + {1004230800 7200 0 EET} + {1017536400 10800 1 EEST} + {1035680400 7200 0 EET} + {1048986000 10800 1 EEST} + {1067130000 7200 0 EET} + {1080435600 10800 1 EEST} + {1099184400 7200 0 EET} + {1111885200 10800 1 EEST} + {1130634000 7200 0 EET} + {1143334800 10800 1 EEST} + {1162083600 7200 0 EET} + {1174784400 10800 1 EEST} + {1193533200 7200 0 EET} + {1206838800 10800 1 EEST} + {1224982800 7200 0 EET} + {1238288400 10800 1 EEST} + {1256432400 7200 0 EET} + {1269738000 10800 1 EEST} + {1288486800 7200 0 EET} + {1301187600 10800 1 EEST} + {1319936400 7200 0 EET} + {1332637200 10800 1 EEST} + {1351386000 7200 0 EET} + {1364691600 10800 1 EEST} + {1382835600 7200 0 EET} + {1396141200 10800 1 EEST} + {1414285200 7200 0 EET} + {1427590800 10800 1 EEST} + {1445734800 7200 0 EET} + {1459040400 10800 1 EEST} + {1477789200 7200 0 EET} + {1490490000 10800 1 EEST} + {1509238800 7200 0 EET} + {1521939600 10800 1 EEST} + {1540688400 7200 0 EET} + {1553994000 10800 1 EEST} + {1572138000 7200 0 EET} + {1585443600 10800 1 EEST} + {1603587600 7200 0 EET} + {1616893200 10800 1 EEST} + {1635642000 7200 0 EET} + {1648342800 10800 1 EEST} + {1667091600 7200 0 EET} + {1679792400 10800 1 EEST} + {1698541200 7200 0 EET} + {1711846800 10800 1 EEST} + {1729990800 7200 0 EET} + {1743296400 10800 1 EEST} + {1761440400 7200 0 EET} + {1774746000 10800 1 EEST} + {1792890000 7200 0 EET} + {1806195600 10800 1 EEST} + {1824944400 7200 0 EET} + {1837645200 10800 1 EEST} + {1856394000 7200 0 EET} + {1869094800 10800 1 EEST} + {1887843600 7200 0 EET} + {1901149200 10800 1 EEST} + {1919293200 7200 0 EET} + {1932598800 10800 1 EEST} + {1950742800 7200 0 EET} + {1964048400 10800 1 EEST} + {1982797200 7200 0 EET} + {1995498000 10800 1 EEST} + {2014246800 7200 0 EET} + {2026947600 10800 1 EEST} + {2045696400 7200 0 EET} + {2058397200 10800 1 EEST} + {2077146000 7200 0 EET} + {2090451600 10800 1 EEST} + {2108595600 7200 0 EET} + {2121901200 10800 1 EEST} + {2140045200 7200 0 EET} + {2153350800 10800 1 EEST} + {2172099600 7200 0 EET} + {2184800400 10800 1 EEST} + {2203549200 7200 0 EET} + {2216250000 10800 1 EEST} + {2234998800 7200 0 EET} + {2248304400 10800 1 EEST} + {2266448400 7200 0 EET} + {2279754000 10800 1 EEST} + {2297898000 7200 0 EET} + {2311203600 10800 1 EEST} + {2329347600 7200 0 EET} + {2342653200 10800 1 EEST} + {2361402000 7200 0 EET} + {2374102800 10800 1 EEST} + {2392851600 7200 0 EET} + {2405552400 10800 1 EEST} + {2424301200 7200 0 EET} + {2437606800 10800 1 EEST} + {2455750800 7200 0 EET} + {2469056400 10800 1 EEST} + {2487200400 7200 0 EET} + {2500506000 10800 1 EEST} + {2519254800 7200 0 EET} + {2531955600 10800 1 EEST} + {2550704400 7200 0 EET} + {2563405200 10800 1 EEST} + {2582154000 7200 0 EET} + {2595459600 10800 1 EEST} + {2613603600 7200 0 EET} + {2626909200 10800 1 EEST} + {2645053200 7200 0 EET} + {2658358800 10800 1 EEST} + {2676502800 7200 0 EET} + {2689808400 10800 1 EEST} + {2708557200 7200 0 EET} + {2721258000 10800 1 EEST} + {2740006800 7200 0 EET} + {2752707600 10800 1 EEST} + {2771456400 7200 0 EET} + {2784762000 10800 1 EEST} + {2802906000 7200 0 EET} + {2816211600 10800 1 EEST} + {2834355600 7200 0 EET} + {2847661200 10800 1 EEST} + {2866410000 7200 0 EET} + {2879110800 10800 1 EEST} + {2897859600 7200 0 EET} + {2910560400 10800 1 EEST} + {2929309200 7200 0 EET} + {2942010000 10800 1 EEST} + {2960758800 7200 0 EET} + {2974064400 10800 1 EEST} + {2992208400 7200 0 EET} + {3005514000 10800 1 EEST} + {3023658000 7200 0 EET} + {3036963600 10800 1 EEST} + {3055712400 7200 0 EET} + {3068413200 10800 1 EEST} + {3087162000 7200 0 EET} + {3099862800 10800 1 EEST} + {3118611600 7200 0 EET} + {3131917200 10800 1 EEST} + {3150061200 7200 0 EET} + {3163366800 10800 1 EEST} + {3181510800 7200 0 EET} + {3194816400 10800 1 EEST} + {3212960400 7200 0 EET} + {3226266000 10800 1 EEST} + {3245014800 7200 0 EET} + {3257715600 10800 1 EEST} + {3276464400 7200 0 EET} + {3289165200 10800 1 EEST} + {3307914000 7200 0 EET} + {3321219600 10800 1 EEST} + {3339363600 7200 0 EET} + {3352669200 10800 1 EEST} + {3370813200 7200 0 EET} + {3384118800 10800 1 EEST} + {3402867600 7200 0 EET} + {3415568400 10800 1 EEST} + {3434317200 7200 0 EET} + {3447018000 10800 1 EEST} + {3465766800 7200 0 EET} + {3479072400 10800 1 EEST} + {3497216400 7200 0 EET} + {3510522000 10800 1 EEST} + {3528666000 7200 0 EET} + {3541971600 10800 1 EEST} + {3560115600 7200 0 EET} + {3573421200 10800 1 EEST} + {3592170000 7200 0 EET} + {3604870800 10800 1 EEST} + {3623619600 7200 0 EET} + {3636320400 10800 1 EEST} + {3655069200 7200 0 EET} + {3668374800 10800 1 EEST} + {3686518800 7200 0 EET} + {3699824400 10800 1 EEST} + {3717968400 7200 0 EET} + {3731274000 10800 1 EEST} + {3750022800 7200 0 EET} + {3762723600 10800 1 EEST} + {3781472400 7200 0 EET} + {3794173200 10800 1 EEST} + {3812922000 7200 0 EET} + {3825622800 10800 1 EEST} + {3844371600 7200 0 EET} + {3857677200 10800 1 EEST} + {3875821200 7200 0 EET} + {3889126800 10800 1 EEST} + {3907270800 7200 0 EET} + {3920576400 10800 1 EEST} + {3939325200 7200 0 EET} + {3952026000 10800 1 EEST} + {3970774800 7200 0 EET} + {3983475600 10800 1 EEST} + {4002224400 7200 0 EET} + {4015530000 10800 1 EEST} + {4033674000 7200 0 EET} + {4046979600 10800 1 EEST} + {4065123600 7200 0 EET} + {4078429200 10800 1 EEST} + {4096573200 7200 0 EET} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Vaduz b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Vaduz new file mode 100644 index 00000000..095e018b --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Vaduz @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Europe/Zurich)]} { + LoadTimeZoneFile Europe/Zurich +} +set TZData(:Europe/Vaduz) $TZData(:Europe/Zurich) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Vatican b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Vatican new file mode 100644 index 00000000..fe507658 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Vatican @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Europe/Rome)]} { + LoadTimeZoneFile Europe/Rome +} +set TZData(:Europe/Vatican) $TZData(:Europe/Rome) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Vienna b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Vienna new file mode 100644 index 00000000..95283eb8 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Vienna @@ -0,0 +1,271 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Vienna) { + {-9223372036854775808 3921 0 LMT} + {-2422055121 3600 0 CET} + {-1693706400 7200 1 CEST} + {-1680483600 3600 0 CET} + {-1663455600 7200 1 CEST} + {-1650150000 3600 0 CET} + {-1632006000 7200 1 CEST} + {-1618700400 3600 0 CET} + {-1577926800 3600 0 CET} + {-1569711600 7200 1 CEST} + {-1555801200 3600 0 CET} + {-938905200 7200 0 CEST} + {-857257200 3600 0 CET} + {-844556400 7200 1 CEST} + {-828226800 3600 0 CET} + {-812502000 7200 1 CEST} + {-796777200 3600 0 CET} + {-781052400 7200 1 CEST} + {-780188400 3600 0 CET} + {-757386000 3600 0 CET} + {-748479600 7200 1 CEST} + {-733359600 3600 0 CET} + {-717634800 7200 1 CEST} + {-701910000 3600 0 CET} + {-684975600 7200 1 CEST} + {-670460400 3600 0 CET} + {323823600 7200 1 CEST} + {338940000 3600 0 CET} + {347151600 3600 0 CET} + {354675600 7200 1 CEST} + {370400400 3600 0 CET} + {386125200 7200 1 CEST} + {401850000 3600 0 CET} + {417574800 7200 1 CEST} + {433299600 3600 0 CET} + {449024400 7200 1 CEST} + {465354000 3600 0 CET} + {481078800 7200 1 CEST} + {496803600 3600 0 CET} + {512528400 7200 1 CEST} + {528253200 3600 0 CET} + {543978000 7200 1 CEST} + {559702800 3600 0 CET} + {575427600 7200 1 CEST} + {591152400 3600 0 CET} + {606877200 7200 1 CEST} + {622602000 3600 0 CET} + {638326800 7200 1 CEST} + {654656400 3600 0 CET} + {670381200 7200 1 CEST} + {686106000 3600 0 CET} + {701830800 7200 1 CEST} + {717555600 3600 0 CET} + {733280400 7200 1 CEST} + {749005200 3600 0 CET} + {764730000 7200 1 CEST} + {780454800 3600 0 CET} + {796179600 7200 1 CEST} + {811904400 3600 0 CET} + {828234000 7200 1 CEST} + {846378000 3600 0 CET} + {859683600 7200 1 CEST} + {877827600 3600 0 CET} + {891133200 7200 1 CEST} + {909277200 3600 0 CET} + {922582800 7200 1 CEST} + {941331600 3600 0 CET} + {954032400 7200 1 CEST} + {972781200 3600 0 CET} + {985482000 7200 1 CEST} + {1004230800 3600 0 CET} + {1017536400 7200 1 CEST} + {1035680400 3600 0 CET} + {1048986000 7200 1 CEST} + {1067130000 3600 0 CET} + {1080435600 7200 1 CEST} + {1099184400 3600 0 CET} + {1111885200 7200 1 CEST} + {1130634000 3600 0 CET} + {1143334800 7200 1 CEST} + {1162083600 3600 0 CET} + {1174784400 7200 1 CEST} + {1193533200 3600 0 CET} + {1206838800 7200 1 CEST} + {1224982800 3600 0 CET} + {1238288400 7200 1 CEST} + {1256432400 3600 0 CET} + {1269738000 7200 1 CEST} + {1288486800 3600 0 CET} + {1301187600 7200 1 CEST} + {1319936400 3600 0 CET} + {1332637200 7200 1 CEST} + {1351386000 3600 0 CET} + {1364691600 7200 1 CEST} + {1382835600 3600 0 CET} + {1396141200 7200 1 CEST} + {1414285200 3600 0 CET} + {1427590800 7200 1 CEST} + {1445734800 3600 0 CET} + {1459040400 7200 1 CEST} + {1477789200 3600 0 CET} + {1490490000 7200 1 CEST} + {1509238800 3600 0 CET} + {1521939600 7200 1 CEST} + {1540688400 3600 0 CET} + {1553994000 7200 1 CEST} + {1572138000 3600 0 CET} + {1585443600 7200 1 CEST} + {1603587600 3600 0 CET} + {1616893200 7200 1 CEST} + {1635642000 3600 0 CET} + {1648342800 7200 1 CEST} + {1667091600 3600 0 CET} + {1679792400 7200 1 CEST} + {1698541200 3600 0 CET} + {1711846800 7200 1 CEST} + {1729990800 3600 0 CET} + {1743296400 7200 1 CEST} + {1761440400 3600 0 CET} + {1774746000 7200 1 CEST} + {1792890000 3600 0 CET} + {1806195600 7200 1 CEST} + {1824944400 3600 0 CET} + {1837645200 7200 1 CEST} + {1856394000 3600 0 CET} + {1869094800 7200 1 CEST} + {1887843600 3600 0 CET} + {1901149200 7200 1 CEST} + {1919293200 3600 0 CET} + {1932598800 7200 1 CEST} + {1950742800 3600 0 CET} + {1964048400 7200 1 CEST} + {1982797200 3600 0 CET} + {1995498000 7200 1 CEST} + {2014246800 3600 0 CET} + {2026947600 7200 1 CEST} + {2045696400 3600 0 CET} + {2058397200 7200 1 CEST} + {2077146000 3600 0 CET} + {2090451600 7200 1 CEST} + {2108595600 3600 0 CET} + {2121901200 7200 1 CEST} + {2140045200 3600 0 CET} + {2153350800 7200 1 CEST} + {2172099600 3600 0 CET} + {2184800400 7200 1 CEST} + {2203549200 3600 0 CET} + {2216250000 7200 1 CEST} + {2234998800 3600 0 CET} + {2248304400 7200 1 CEST} + {2266448400 3600 0 CET} + {2279754000 7200 1 CEST} + {2297898000 3600 0 CET} + {2311203600 7200 1 CEST} + {2329347600 3600 0 CET} + {2342653200 7200 1 CEST} + {2361402000 3600 0 CET} + {2374102800 7200 1 CEST} + {2392851600 3600 0 CET} + {2405552400 7200 1 CEST} + {2424301200 3600 0 CET} + {2437606800 7200 1 CEST} + {2455750800 3600 0 CET} + {2469056400 7200 1 CEST} + {2487200400 3600 0 CET} + {2500506000 7200 1 CEST} + {2519254800 3600 0 CET} + {2531955600 7200 1 CEST} + {2550704400 3600 0 CET} + {2563405200 7200 1 CEST} + {2582154000 3600 0 CET} + {2595459600 7200 1 CEST} + {2613603600 3600 0 CET} + {2626909200 7200 1 CEST} + {2645053200 3600 0 CET} + {2658358800 7200 1 CEST} + {2676502800 3600 0 CET} + {2689808400 7200 1 CEST} + {2708557200 3600 0 CET} + {2721258000 7200 1 CEST} + {2740006800 3600 0 CET} + {2752707600 7200 1 CEST} + {2771456400 3600 0 CET} + {2784762000 7200 1 CEST} + {2802906000 3600 0 CET} + {2816211600 7200 1 CEST} + {2834355600 3600 0 CET} + {2847661200 7200 1 CEST} + {2866410000 3600 0 CET} + {2879110800 7200 1 CEST} + {2897859600 3600 0 CET} + {2910560400 7200 1 CEST} + {2929309200 3600 0 CET} + {2942010000 7200 1 CEST} + {2960758800 3600 0 CET} + {2974064400 7200 1 CEST} + {2992208400 3600 0 CET} + {3005514000 7200 1 CEST} + {3023658000 3600 0 CET} + {3036963600 7200 1 CEST} + {3055712400 3600 0 CET} + {3068413200 7200 1 CEST} + {3087162000 3600 0 CET} + {3099862800 7200 1 CEST} + {3118611600 3600 0 CET} + {3131917200 7200 1 CEST} + {3150061200 3600 0 CET} + {3163366800 7200 1 CEST} + {3181510800 3600 0 CET} + {3194816400 7200 1 CEST} + {3212960400 3600 0 CET} + {3226266000 7200 1 CEST} + {3245014800 3600 0 CET} + {3257715600 7200 1 CEST} + {3276464400 3600 0 CET} + {3289165200 7200 1 CEST} + {3307914000 3600 0 CET} + {3321219600 7200 1 CEST} + {3339363600 3600 0 CET} + {3352669200 7200 1 CEST} + {3370813200 3600 0 CET} + {3384118800 7200 1 CEST} + {3402867600 3600 0 CET} + {3415568400 7200 1 CEST} + {3434317200 3600 0 CET} + {3447018000 7200 1 CEST} + {3465766800 3600 0 CET} + {3479072400 7200 1 CEST} + {3497216400 3600 0 CET} + {3510522000 7200 1 CEST} + {3528666000 3600 0 CET} + {3541971600 7200 1 CEST} + {3560115600 3600 0 CET} + {3573421200 7200 1 CEST} + {3592170000 3600 0 CET} + {3604870800 7200 1 CEST} + {3623619600 3600 0 CET} + {3636320400 7200 1 CEST} + {3655069200 3600 0 CET} + {3668374800 7200 1 CEST} + {3686518800 3600 0 CET} + {3699824400 7200 1 CEST} + {3717968400 3600 0 CET} + {3731274000 7200 1 CEST} + {3750022800 3600 0 CET} + {3762723600 7200 1 CEST} + {3781472400 3600 0 CET} + {3794173200 7200 1 CEST} + {3812922000 3600 0 CET} + {3825622800 7200 1 CEST} + {3844371600 3600 0 CET} + {3857677200 7200 1 CEST} + {3875821200 3600 0 CET} + {3889126800 7200 1 CEST} + {3907270800 3600 0 CET} + {3920576400 7200 1 CEST} + {3939325200 3600 0 CET} + {3952026000 7200 1 CEST} + {3970774800 3600 0 CET} + {3983475600 7200 1 CEST} + {4002224400 3600 0 CET} + {4015530000 7200 1 CEST} + {4033674000 3600 0 CET} + {4046979600 7200 1 CEST} + {4065123600 3600 0 CET} + {4078429200 7200 1 CEST} + {4096573200 3600 0 CET} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Vilnius b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Vilnius new file mode 100644 index 00000000..62d5d874 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Vilnius @@ -0,0 +1,251 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Vilnius) { + {-9223372036854775808 6076 0 LMT} + {-2840146876 5040 0 WMT} + {-1672536240 5736 0 KMT} + {-1585100136 3600 0 CET} + {-1561251600 7200 0 EET} + {-1553565600 3600 0 CET} + {-928198800 10800 0 MSK} + {-900126000 3600 0 CET} + {-857257200 3600 0 CET} + {-844556400 7200 1 CEST} + {-828226800 3600 0 CET} + {-812502000 7200 1 CEST} + {-802141200 10800 0 MSD} + {354920400 14400 1 MSD} + {370728000 10800 0 MSK} + {386456400 14400 1 MSD} + {402264000 10800 0 MSK} + {417992400 14400 1 MSD} + {433800000 10800 0 MSK} + {449614800 14400 1 MSD} + {465346800 10800 0 MSK} + {481071600 14400 1 MSD} + {496796400 10800 0 MSK} + {512521200 14400 1 MSD} + {528246000 10800 0 MSK} + {543970800 14400 1 MSD} + {559695600 10800 0 MSK} + {575420400 14400 1 MSD} + {591145200 10800 0 MSK} + {606870000 14400 1 MSD} + {622594800 10800 0 MSK} + {638319600 14400 1 MSD} + {654649200 10800 0 MSK} + {670374000 10800 1 EEST} + {686102400 7200 0 EET} + {701827200 10800 1 EEST} + {717552000 7200 0 EET} + {733276800 10800 1 EEST} + {749001600 7200 0 EET} + {764726400 10800 1 EEST} + {780451200 7200 0 EET} + {796176000 10800 1 EEST} + {811900800 7200 0 EET} + {828230400 10800 1 EEST} + {846374400 7200 0 EET} + {859680000 10800 1 EEST} + {877824000 7200 0 EET} + {883605600 7200 0 EET} + {891133200 7200 0 CEST} + {909277200 3600 0 CET} + {922582800 7200 1 CEST} + {941331600 7200 0 EET} + {1041372000 7200 0 EET} + {1048986000 10800 1 EEST} + {1067130000 7200 0 EET} + {1080435600 10800 1 EEST} + {1099184400 7200 0 EET} + {1111885200 10800 1 EEST} + {1130634000 7200 0 EET} + {1143334800 10800 1 EEST} + {1162083600 7200 0 EET} + {1174784400 10800 1 EEST} + {1193533200 7200 0 EET} + {1206838800 10800 1 EEST} + {1224982800 7200 0 EET} + {1238288400 10800 1 EEST} + {1256432400 7200 0 EET} + {1269738000 10800 1 EEST} + {1288486800 7200 0 EET} + {1301187600 10800 1 EEST} + {1319936400 7200 0 EET} + {1332637200 10800 1 EEST} + {1351386000 7200 0 EET} + {1364691600 10800 1 EEST} + {1382835600 7200 0 EET} + {1396141200 10800 1 EEST} + {1414285200 7200 0 EET} + {1427590800 10800 1 EEST} + {1445734800 7200 0 EET} + {1459040400 10800 1 EEST} + {1477789200 7200 0 EET} + {1490490000 10800 1 EEST} + {1509238800 7200 0 EET} + {1521939600 10800 1 EEST} + {1540688400 7200 0 EET} + {1553994000 10800 1 EEST} + {1572138000 7200 0 EET} + {1585443600 10800 1 EEST} + {1603587600 7200 0 EET} + {1616893200 10800 1 EEST} + {1635642000 7200 0 EET} + {1648342800 10800 1 EEST} + {1667091600 7200 0 EET} + {1679792400 10800 1 EEST} + {1698541200 7200 0 EET} + {1711846800 10800 1 EEST} + {1729990800 7200 0 EET} + {1743296400 10800 1 EEST} + {1761440400 7200 0 EET} + {1774746000 10800 1 EEST} + {1792890000 7200 0 EET} + {1806195600 10800 1 EEST} + {1824944400 7200 0 EET} + {1837645200 10800 1 EEST} + {1856394000 7200 0 EET} + {1869094800 10800 1 EEST} + {1887843600 7200 0 EET} + {1901149200 10800 1 EEST} + {1919293200 7200 0 EET} + {1932598800 10800 1 EEST} + {1950742800 7200 0 EET} + {1964048400 10800 1 EEST} + {1982797200 7200 0 EET} + {1995498000 10800 1 EEST} + {2014246800 7200 0 EET} + {2026947600 10800 1 EEST} + {2045696400 7200 0 EET} + {2058397200 10800 1 EEST} + {2077146000 7200 0 EET} + {2090451600 10800 1 EEST} + {2108595600 7200 0 EET} + {2121901200 10800 1 EEST} + {2140045200 7200 0 EET} + {2153350800 10800 1 EEST} + {2172099600 7200 0 EET} + {2184800400 10800 1 EEST} + {2203549200 7200 0 EET} + {2216250000 10800 1 EEST} + {2234998800 7200 0 EET} + {2248304400 10800 1 EEST} + {2266448400 7200 0 EET} + {2279754000 10800 1 EEST} + {2297898000 7200 0 EET} + {2311203600 10800 1 EEST} + {2329347600 7200 0 EET} + {2342653200 10800 1 EEST} + {2361402000 7200 0 EET} + {2374102800 10800 1 EEST} + {2392851600 7200 0 EET} + {2405552400 10800 1 EEST} + {2424301200 7200 0 EET} + {2437606800 10800 1 EEST} + {2455750800 7200 0 EET} + {2469056400 10800 1 EEST} + {2487200400 7200 0 EET} + {2500506000 10800 1 EEST} + {2519254800 7200 0 EET} + {2531955600 10800 1 EEST} + {2550704400 7200 0 EET} + {2563405200 10800 1 EEST} + {2582154000 7200 0 EET} + {2595459600 10800 1 EEST} + {2613603600 7200 0 EET} + {2626909200 10800 1 EEST} + {2645053200 7200 0 EET} + {2658358800 10800 1 EEST} + {2676502800 7200 0 EET} + {2689808400 10800 1 EEST} + {2708557200 7200 0 EET} + {2721258000 10800 1 EEST} + {2740006800 7200 0 EET} + {2752707600 10800 1 EEST} + {2771456400 7200 0 EET} + {2784762000 10800 1 EEST} + {2802906000 7200 0 EET} + {2816211600 10800 1 EEST} + {2834355600 7200 0 EET} + {2847661200 10800 1 EEST} + {2866410000 7200 0 EET} + {2879110800 10800 1 EEST} + {2897859600 7200 0 EET} + {2910560400 10800 1 EEST} + {2929309200 7200 0 EET} + {2942010000 10800 1 EEST} + {2960758800 7200 0 EET} + {2974064400 10800 1 EEST} + {2992208400 7200 0 EET} + {3005514000 10800 1 EEST} + {3023658000 7200 0 EET} + {3036963600 10800 1 EEST} + {3055712400 7200 0 EET} + {3068413200 10800 1 EEST} + {3087162000 7200 0 EET} + {3099862800 10800 1 EEST} + {3118611600 7200 0 EET} + {3131917200 10800 1 EEST} + {3150061200 7200 0 EET} + {3163366800 10800 1 EEST} + {3181510800 7200 0 EET} + {3194816400 10800 1 EEST} + {3212960400 7200 0 EET} + {3226266000 10800 1 EEST} + {3245014800 7200 0 EET} + {3257715600 10800 1 EEST} + {3276464400 7200 0 EET} + {3289165200 10800 1 EEST} + {3307914000 7200 0 EET} + {3321219600 10800 1 EEST} + {3339363600 7200 0 EET} + {3352669200 10800 1 EEST} + {3370813200 7200 0 EET} + {3384118800 10800 1 EEST} + {3402867600 7200 0 EET} + {3415568400 10800 1 EEST} + {3434317200 7200 0 EET} + {3447018000 10800 1 EEST} + {3465766800 7200 0 EET} + {3479072400 10800 1 EEST} + {3497216400 7200 0 EET} + {3510522000 10800 1 EEST} + {3528666000 7200 0 EET} + {3541971600 10800 1 EEST} + {3560115600 7200 0 EET} + {3573421200 10800 1 EEST} + {3592170000 7200 0 EET} + {3604870800 10800 1 EEST} + {3623619600 7200 0 EET} + {3636320400 10800 1 EEST} + {3655069200 7200 0 EET} + {3668374800 10800 1 EEST} + {3686518800 7200 0 EET} + {3699824400 10800 1 EEST} + {3717968400 7200 0 EET} + {3731274000 10800 1 EEST} + {3750022800 7200 0 EET} + {3762723600 10800 1 EEST} + {3781472400 7200 0 EET} + {3794173200 10800 1 EEST} + {3812922000 7200 0 EET} + {3825622800 10800 1 EEST} + {3844371600 7200 0 EET} + {3857677200 10800 1 EEST} + {3875821200 7200 0 EET} + {3889126800 10800 1 EEST} + {3907270800 7200 0 EET} + {3920576400 10800 1 EEST} + {3939325200 7200 0 EET} + {3952026000 10800 1 EEST} + {3970774800 7200 0 EET} + {3983475600 10800 1 EEST} + {4002224400 7200 0 EET} + {4015530000 10800 1 EEST} + {4033674000 7200 0 EET} + {4046979600 10800 1 EEST} + {4065123600 7200 0 EET} + {4078429200 10800 1 EEST} + {4096573200 7200 0 EET} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Volgograd b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Volgograd new file mode 100644 index 00000000..d71fb0b5 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Volgograd @@ -0,0 +1,71 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Volgograd) { + {-9223372036854775808 10660 0 LMT} + {-1577761060 10800 0 TSAT} + {-1411873200 10800 0 STAT} + {-1247540400 14400 0 STAT} + {-256881600 14400 0 VOLMMTT} + {354916800 18000 1 VOLST} + {370724400 14400 0 VOLT} + {386452800 18000 1 VOLST} + {402260400 14400 0 VOLT} + {417988800 18000 1 VOLST} + {433796400 14400 0 VOLT} + {449611200 18000 1 VOLST} + {465343200 14400 0 VOLT} + {481068000 18000 1 VOLST} + {496792800 14400 0 VOLT} + {512517600 18000 1 VOLST} + {528242400 14400 0 VOLT} + {543967200 18000 1 VOLST} + {559692000 14400 0 VOLT} + {575416800 18000 1 VOLST} + {591141600 14400 0 VOLT} + {606866400 10800 0 VOLMMTT} + {606870000 14400 1 VOLST} + {622594800 10800 0 VOLT} + {638319600 14400 1 VOLST} + {654649200 10800 0 VOLT} + {670374000 14400 0 VOLT} + {701820000 14400 0 MSD} + {717534000 10800 0 MSK} + {733273200 14400 1 MSD} + {748998000 10800 0 MSK} + {764722800 14400 1 MSD} + {780447600 10800 0 MSK} + {796172400 14400 1 MSD} + {811897200 10800 0 MSK} + {828226800 14400 1 MSD} + {846370800 10800 0 MSK} + {859676400 14400 1 MSD} + {877820400 10800 0 MSK} + {891126000 14400 1 MSD} + {909270000 10800 0 MSK} + {922575600 14400 1 MSD} + {941324400 10800 0 MSK} + {954025200 14400 1 MSD} + {972774000 10800 0 MSK} + {985474800 14400 1 MSD} + {1004223600 10800 0 MSK} + {1017529200 14400 1 MSD} + {1035673200 10800 0 MSK} + {1048978800 14400 1 MSD} + {1067122800 10800 0 MSK} + {1080428400 14400 1 MSD} + {1099177200 10800 0 MSK} + {1111878000 14400 1 MSD} + {1130626800 10800 0 MSK} + {1143327600 14400 1 MSD} + {1162076400 10800 0 MSK} + {1174777200 14400 1 MSD} + {1193526000 10800 0 MSK} + {1206831600 14400 1 MSD} + {1224975600 10800 0 MSK} + {1238281200 14400 1 MSD} + {1256425200 10800 0 MSK} + {1269730800 14400 1 MSD} + {1288479600 10800 0 MSK} + {1301180400 14400 0 MSK} + {1414274400 10800 0 MSK} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Warsaw b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Warsaw new file mode 100644 index 00000000..6288a8ab --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Warsaw @@ -0,0 +1,296 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Warsaw) { + {-9223372036854775808 5040 0 LMT} + {-2840145840 5040 0 WMT} + {-1717032240 3600 0 CET} + {-1693706400 7200 1 CEST} + {-1680483600 3600 0 CET} + {-1663455600 7200 1 CEST} + {-1650150000 3600 0 CET} + {-1632006000 7200 1 CEST} + {-1618696800 7200 0 EET} + {-1600473600 10800 1 EEST} + {-1587168000 7200 0 EET} + {-931734000 7200 0 CEST} + {-857257200 3600 0 CET} + {-844556400 7200 1 CEST} + {-828226800 3600 0 CET} + {-812502000 7200 1 CEST} + {-796870800 7200 0 CEST} + {-796608000 3600 0 CET} + {-778726800 7200 1 CEST} + {-762660000 3600 0 CET} + {-748486800 7200 1 CEST} + {-733273200 3600 0 CET} + {-715215600 7200 1 CEST} + {-701910000 3600 0 CET} + {-684975600 7200 1 CEST} + {-670460400 3600 0 CET} + {-654130800 7200 1 CEST} + {-639010800 3600 0 CET} + {-397094400 7200 1 CEST} + {-386812800 3600 0 CET} + {-371088000 7200 1 CEST} + {-355363200 3600 0 CET} + {-334195200 7200 1 CEST} + {-323308800 3600 0 CET} + {-307584000 7200 1 CEST} + {-291859200 3600 0 CET} + {-271296000 7200 1 CEST} + {-260409600 3600 0 CET} + {-239846400 7200 1 CEST} + {-228960000 3600 0 CET} + {-208396800 7200 1 CEST} + {-197510400 3600 0 CET} + {-176342400 7200 1 CEST} + {-166060800 3600 0 CET} + {220921200 3600 0 CET} + {228873600 7200 1 CEST} + {243993600 3600 0 CET} + {260323200 7200 1 CEST} + {276048000 3600 0 CET} + {291772800 7200 1 CEST} + {307497600 3600 0 CET} + {323827200 7200 1 CEST} + {338947200 3600 0 CET} + {354672000 7200 1 CEST} + {370396800 3600 0 CET} + {386121600 7200 1 CEST} + {401846400 3600 0 CET} + {417571200 7200 1 CEST} + {433296000 3600 0 CET} + {449020800 7200 1 CEST} + {465350400 3600 0 CET} + {481075200 7200 1 CEST} + {496800000 3600 0 CET} + {512524800 7200 1 CEST} + {528249600 3600 0 CET} + {543974400 7200 1 CEST} + {559699200 3600 0 CET} + {567990000 3600 0 CET} + {575427600 7200 1 CEST} + {591152400 3600 0 CET} + {606877200 7200 1 CEST} + {622602000 3600 0 CET} + {638326800 7200 1 CEST} + {654656400 3600 0 CET} + {670381200 7200 1 CEST} + {686106000 3600 0 CET} + {701830800 7200 1 CEST} + {717555600 3600 0 CET} + {733280400 7200 1 CEST} + {749005200 3600 0 CET} + {764730000 7200 1 CEST} + {780454800 3600 0 CET} + {796179600 7200 1 CEST} + {811904400 3600 0 CET} + {828234000 7200 1 CEST} + {846378000 3600 0 CET} + {859683600 7200 1 CEST} + {877827600 3600 0 CET} + {891133200 7200 1 CEST} + {909277200 3600 0 CET} + {922582800 7200 1 CEST} + {941331600 3600 0 CET} + {954032400 7200 1 CEST} + {972781200 3600 0 CET} + {985482000 7200 1 CEST} + {1004230800 3600 0 CET} + {1017536400 7200 1 CEST} + {1035680400 3600 0 CET} + {1048986000 7200 1 CEST} + {1067130000 3600 0 CET} + {1080435600 7200 1 CEST} + {1099184400 3600 0 CET} + {1111885200 7200 1 CEST} + {1130634000 3600 0 CET} + {1143334800 7200 1 CEST} + {1162083600 3600 0 CET} + {1174784400 7200 1 CEST} + {1193533200 3600 0 CET} + {1206838800 7200 1 CEST} + {1224982800 3600 0 CET} + {1238288400 7200 1 CEST} + {1256432400 3600 0 CET} + {1269738000 7200 1 CEST} + {1288486800 3600 0 CET} + {1301187600 7200 1 CEST} + {1319936400 3600 0 CET} + {1332637200 7200 1 CEST} + {1351386000 3600 0 CET} + {1364691600 7200 1 CEST} + {1382835600 3600 0 CET} + {1396141200 7200 1 CEST} + {1414285200 3600 0 CET} + {1427590800 7200 1 CEST} + {1445734800 3600 0 CET} + {1459040400 7200 1 CEST} + {1477789200 3600 0 CET} + {1490490000 7200 1 CEST} + {1509238800 3600 0 CET} + {1521939600 7200 1 CEST} + {1540688400 3600 0 CET} + {1553994000 7200 1 CEST} + {1572138000 3600 0 CET} + {1585443600 7200 1 CEST} + {1603587600 3600 0 CET} + {1616893200 7200 1 CEST} + {1635642000 3600 0 CET} + {1648342800 7200 1 CEST} + {1667091600 3600 0 CET} + {1679792400 7200 1 CEST} + {1698541200 3600 0 CET} + {1711846800 7200 1 CEST} + {1729990800 3600 0 CET} + {1743296400 7200 1 CEST} + {1761440400 3600 0 CET} + {1774746000 7200 1 CEST} + {1792890000 3600 0 CET} + {1806195600 7200 1 CEST} + {1824944400 3600 0 CET} + {1837645200 7200 1 CEST} + {1856394000 3600 0 CET} + {1869094800 7200 1 CEST} + {1887843600 3600 0 CET} + {1901149200 7200 1 CEST} + {1919293200 3600 0 CET} + {1932598800 7200 1 CEST} + {1950742800 3600 0 CET} + {1964048400 7200 1 CEST} + {1982797200 3600 0 CET} + {1995498000 7200 1 CEST} + {2014246800 3600 0 CET} + {2026947600 7200 1 CEST} + {2045696400 3600 0 CET} + {2058397200 7200 1 CEST} + {2077146000 3600 0 CET} + {2090451600 7200 1 CEST} + {2108595600 3600 0 CET} + {2121901200 7200 1 CEST} + {2140045200 3600 0 CET} + {2153350800 7200 1 CEST} + {2172099600 3600 0 CET} + {2184800400 7200 1 CEST} + {2203549200 3600 0 CET} + {2216250000 7200 1 CEST} + {2234998800 3600 0 CET} + {2248304400 7200 1 CEST} + {2266448400 3600 0 CET} + {2279754000 7200 1 CEST} + {2297898000 3600 0 CET} + {2311203600 7200 1 CEST} + {2329347600 3600 0 CET} + {2342653200 7200 1 CEST} + {2361402000 3600 0 CET} + {2374102800 7200 1 CEST} + {2392851600 3600 0 CET} + {2405552400 7200 1 CEST} + {2424301200 3600 0 CET} + {2437606800 7200 1 CEST} + {2455750800 3600 0 CET} + {2469056400 7200 1 CEST} + {2487200400 3600 0 CET} + {2500506000 7200 1 CEST} + {2519254800 3600 0 CET} + {2531955600 7200 1 CEST} + {2550704400 3600 0 CET} + {2563405200 7200 1 CEST} + {2582154000 3600 0 CET} + {2595459600 7200 1 CEST} + {2613603600 3600 0 CET} + {2626909200 7200 1 CEST} + {2645053200 3600 0 CET} + {2658358800 7200 1 CEST} + {2676502800 3600 0 CET} + {2689808400 7200 1 CEST} + {2708557200 3600 0 CET} + {2721258000 7200 1 CEST} + {2740006800 3600 0 CET} + {2752707600 7200 1 CEST} + {2771456400 3600 0 CET} + {2784762000 7200 1 CEST} + {2802906000 3600 0 CET} + {2816211600 7200 1 CEST} + {2834355600 3600 0 CET} + {2847661200 7200 1 CEST} + {2866410000 3600 0 CET} + {2879110800 7200 1 CEST} + {2897859600 3600 0 CET} + {2910560400 7200 1 CEST} + {2929309200 3600 0 CET} + {2942010000 7200 1 CEST} + {2960758800 3600 0 CET} + {2974064400 7200 1 CEST} + {2992208400 3600 0 CET} + {3005514000 7200 1 CEST} + {3023658000 3600 0 CET} + {3036963600 7200 1 CEST} + {3055712400 3600 0 CET} + {3068413200 7200 1 CEST} + {3087162000 3600 0 CET} + {3099862800 7200 1 CEST} + {3118611600 3600 0 CET} + {3131917200 7200 1 CEST} + {3150061200 3600 0 CET} + {3163366800 7200 1 CEST} + {3181510800 3600 0 CET} + {3194816400 7200 1 CEST} + {3212960400 3600 0 CET} + {3226266000 7200 1 CEST} + {3245014800 3600 0 CET} + {3257715600 7200 1 CEST} + {3276464400 3600 0 CET} + {3289165200 7200 1 CEST} + {3307914000 3600 0 CET} + {3321219600 7200 1 CEST} + {3339363600 3600 0 CET} + {3352669200 7200 1 CEST} + {3370813200 3600 0 CET} + {3384118800 7200 1 CEST} + {3402867600 3600 0 CET} + {3415568400 7200 1 CEST} + {3434317200 3600 0 CET} + {3447018000 7200 1 CEST} + {3465766800 3600 0 CET} + {3479072400 7200 1 CEST} + {3497216400 3600 0 CET} + {3510522000 7200 1 CEST} + {3528666000 3600 0 CET} + {3541971600 7200 1 CEST} + {3560115600 3600 0 CET} + {3573421200 7200 1 CEST} + {3592170000 3600 0 CET} + {3604870800 7200 1 CEST} + {3623619600 3600 0 CET} + {3636320400 7200 1 CEST} + {3655069200 3600 0 CET} + {3668374800 7200 1 CEST} + {3686518800 3600 0 CET} + {3699824400 7200 1 CEST} + {3717968400 3600 0 CET} + {3731274000 7200 1 CEST} + {3750022800 3600 0 CET} + {3762723600 7200 1 CEST} + {3781472400 3600 0 CET} + {3794173200 7200 1 CEST} + {3812922000 3600 0 CET} + {3825622800 7200 1 CEST} + {3844371600 3600 0 CET} + {3857677200 7200 1 CEST} + {3875821200 3600 0 CET} + {3889126800 7200 1 CEST} + {3907270800 3600 0 CET} + {3920576400 7200 1 CEST} + {3939325200 3600 0 CET} + {3952026000 7200 1 CEST} + {3970774800 3600 0 CET} + {3983475600 7200 1 CEST} + {4002224400 3600 0 CET} + {4015530000 7200 1 CEST} + {4033674000 3600 0 CET} + {4046979600 7200 1 CEST} + {4065123600 3600 0 CET} + {4078429200 7200 1 CEST} + {4096573200 3600 0 CET} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Zagreb b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Zagreb new file mode 100644 index 00000000..46319a41 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Zagreb @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Europe/Belgrade)]} { + LoadTimeZoneFile Europe/Belgrade +} +set TZData(:Europe/Zagreb) $TZData(:Europe/Belgrade) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Zaporozhye b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Zaporozhye new file mode 100644 index 00000000..01418cdd --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Zaporozhye @@ -0,0 +1,252 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Zaporozhye) { + {-9223372036854775808 8440 0 LMT} + {-2840149240 8400 0 CUT} + {-1441160400 7200 0 EET} + {-1247536800 10800 0 MSK} + {-894769200 3600 0 CET} + {-857257200 3600 0 CET} + {-844556400 7200 1 CEST} + {-828226800 3600 0 CET} + {-826419600 10800 0 MSD} + {354920400 14400 1 MSD} + {370728000 10800 0 MSK} + {386456400 14400 1 MSD} + {402264000 10800 0 MSK} + {417992400 14400 1 MSD} + {433800000 10800 0 MSK} + {449614800 14400 1 MSD} + {465346800 10800 0 MSK} + {481071600 14400 1 MSD} + {496796400 10800 0 MSK} + {512521200 14400 1 MSD} + {528246000 10800 0 MSK} + {543970800 14400 1 MSD} + {559695600 10800 0 MSK} + {575420400 14400 1 MSD} + {591145200 10800 0 MSK} + {606870000 14400 1 MSD} + {622594800 10800 0 MSK} + {638319600 14400 1 MSD} + {654649200 10800 0 MSK} + {670374000 10800 0 EEST} + {686091600 7200 0 EET} + {701820000 10800 1 EEST} + {717541200 7200 0 EET} + {733269600 10800 1 EEST} + {748990800 7200 0 EET} + {764719200 10800 1 EEST} + {780440400 7200 0 EET} + {788911200 7200 0 EET} + {796179600 10800 1 EEST} + {811904400 7200 0 EET} + {828234000 10800 1 EEST} + {846378000 7200 0 EET} + {859683600 10800 1 EEST} + {877827600 7200 0 EET} + {891133200 10800 1 EEST} + {909277200 7200 0 EET} + {922582800 10800 1 EEST} + {941331600 7200 0 EET} + {954032400 10800 1 EEST} + {972781200 7200 0 EET} + {985482000 10800 1 EEST} + {1004230800 7200 0 EET} + {1017536400 10800 1 EEST} + {1035680400 7200 0 EET} + {1048986000 10800 1 EEST} + {1067130000 7200 0 EET} + {1080435600 10800 1 EEST} + {1099184400 7200 0 EET} + {1111885200 10800 1 EEST} + {1130634000 7200 0 EET} + {1143334800 10800 1 EEST} + {1162083600 7200 0 EET} + {1174784400 10800 1 EEST} + {1193533200 7200 0 EET} + {1206838800 10800 1 EEST} + {1224982800 7200 0 EET} + {1238288400 10800 1 EEST} + {1256432400 7200 0 EET} + {1269738000 10800 1 EEST} + {1288486800 7200 0 EET} + {1301187600 10800 1 EEST} + {1319936400 7200 0 EET} + {1332637200 10800 1 EEST} + {1351386000 7200 0 EET} + {1364691600 10800 1 EEST} + {1382835600 7200 0 EET} + {1396141200 10800 1 EEST} + {1414285200 7200 0 EET} + {1427590800 10800 1 EEST} + {1445734800 7200 0 EET} + {1459040400 10800 1 EEST} + {1477789200 7200 0 EET} + {1490490000 10800 1 EEST} + {1509238800 7200 0 EET} + {1521939600 10800 1 EEST} + {1540688400 7200 0 EET} + {1553994000 10800 1 EEST} + {1572138000 7200 0 EET} + {1585443600 10800 1 EEST} + {1603587600 7200 0 EET} + {1616893200 10800 1 EEST} + {1635642000 7200 0 EET} + {1648342800 10800 1 EEST} + {1667091600 7200 0 EET} + {1679792400 10800 1 EEST} + {1698541200 7200 0 EET} + {1711846800 10800 1 EEST} + {1729990800 7200 0 EET} + {1743296400 10800 1 EEST} + {1761440400 7200 0 EET} + {1774746000 10800 1 EEST} + {1792890000 7200 0 EET} + {1806195600 10800 1 EEST} + {1824944400 7200 0 EET} + {1837645200 10800 1 EEST} + {1856394000 7200 0 EET} + {1869094800 10800 1 EEST} + {1887843600 7200 0 EET} + {1901149200 10800 1 EEST} + {1919293200 7200 0 EET} + {1932598800 10800 1 EEST} + {1950742800 7200 0 EET} + {1964048400 10800 1 EEST} + {1982797200 7200 0 EET} + {1995498000 10800 1 EEST} + {2014246800 7200 0 EET} + {2026947600 10800 1 EEST} + {2045696400 7200 0 EET} + {2058397200 10800 1 EEST} + {2077146000 7200 0 EET} + {2090451600 10800 1 EEST} + {2108595600 7200 0 EET} + {2121901200 10800 1 EEST} + {2140045200 7200 0 EET} + {2153350800 10800 1 EEST} + {2172099600 7200 0 EET} + {2184800400 10800 1 EEST} + {2203549200 7200 0 EET} + {2216250000 10800 1 EEST} + {2234998800 7200 0 EET} + {2248304400 10800 1 EEST} + {2266448400 7200 0 EET} + {2279754000 10800 1 EEST} + {2297898000 7200 0 EET} + {2311203600 10800 1 EEST} + {2329347600 7200 0 EET} + {2342653200 10800 1 EEST} + {2361402000 7200 0 EET} + {2374102800 10800 1 EEST} + {2392851600 7200 0 EET} + {2405552400 10800 1 EEST} + {2424301200 7200 0 EET} + {2437606800 10800 1 EEST} + {2455750800 7200 0 EET} + {2469056400 10800 1 EEST} + {2487200400 7200 0 EET} + {2500506000 10800 1 EEST} + {2519254800 7200 0 EET} + {2531955600 10800 1 EEST} + {2550704400 7200 0 EET} + {2563405200 10800 1 EEST} + {2582154000 7200 0 EET} + {2595459600 10800 1 EEST} + {2613603600 7200 0 EET} + {2626909200 10800 1 EEST} + {2645053200 7200 0 EET} + {2658358800 10800 1 EEST} + {2676502800 7200 0 EET} + {2689808400 10800 1 EEST} + {2708557200 7200 0 EET} + {2721258000 10800 1 EEST} + {2740006800 7200 0 EET} + {2752707600 10800 1 EEST} + {2771456400 7200 0 EET} + {2784762000 10800 1 EEST} + {2802906000 7200 0 EET} + {2816211600 10800 1 EEST} + {2834355600 7200 0 EET} + {2847661200 10800 1 EEST} + {2866410000 7200 0 EET} + {2879110800 10800 1 EEST} + {2897859600 7200 0 EET} + {2910560400 10800 1 EEST} + {2929309200 7200 0 EET} + {2942010000 10800 1 EEST} + {2960758800 7200 0 EET} + {2974064400 10800 1 EEST} + {2992208400 7200 0 EET} + {3005514000 10800 1 EEST} + {3023658000 7200 0 EET} + {3036963600 10800 1 EEST} + {3055712400 7200 0 EET} + {3068413200 10800 1 EEST} + {3087162000 7200 0 EET} + {3099862800 10800 1 EEST} + {3118611600 7200 0 EET} + {3131917200 10800 1 EEST} + {3150061200 7200 0 EET} + {3163366800 10800 1 EEST} + {3181510800 7200 0 EET} + {3194816400 10800 1 EEST} + {3212960400 7200 0 EET} + {3226266000 10800 1 EEST} + {3245014800 7200 0 EET} + {3257715600 10800 1 EEST} + {3276464400 7200 0 EET} + {3289165200 10800 1 EEST} + {3307914000 7200 0 EET} + {3321219600 10800 1 EEST} + {3339363600 7200 0 EET} + {3352669200 10800 1 EEST} + {3370813200 7200 0 EET} + {3384118800 10800 1 EEST} + {3402867600 7200 0 EET} + {3415568400 10800 1 EEST} + {3434317200 7200 0 EET} + {3447018000 10800 1 EEST} + {3465766800 7200 0 EET} + {3479072400 10800 1 EEST} + {3497216400 7200 0 EET} + {3510522000 10800 1 EEST} + {3528666000 7200 0 EET} + {3541971600 10800 1 EEST} + {3560115600 7200 0 EET} + {3573421200 10800 1 EEST} + {3592170000 7200 0 EET} + {3604870800 10800 1 EEST} + {3623619600 7200 0 EET} + {3636320400 10800 1 EEST} + {3655069200 7200 0 EET} + {3668374800 10800 1 EEST} + {3686518800 7200 0 EET} + {3699824400 10800 1 EEST} + {3717968400 7200 0 EET} + {3731274000 10800 1 EEST} + {3750022800 7200 0 EET} + {3762723600 10800 1 EEST} + {3781472400 7200 0 EET} + {3794173200 10800 1 EEST} + {3812922000 7200 0 EET} + {3825622800 10800 1 EEST} + {3844371600 7200 0 EET} + {3857677200 10800 1 EEST} + {3875821200 7200 0 EET} + {3889126800 10800 1 EEST} + {3907270800 7200 0 EET} + {3920576400 10800 1 EEST} + {3939325200 7200 0 EET} + {3952026000 10800 1 EEST} + {3970774800 7200 0 EET} + {3983475600 10800 1 EEST} + {4002224400 7200 0 EET} + {4015530000 10800 1 EEST} + {4033674000 7200 0 EET} + {4046979600 10800 1 EEST} + {4065123600 7200 0 EET} + {4078429200 10800 1 EEST} + {4096573200 7200 0 EET} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Zurich b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Zurich new file mode 100644 index 00000000..87a20dbf --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Europe/Zurich @@ -0,0 +1,250 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Europe/Zurich) { + {-9223372036854775808 2048 0 LMT} + {-3675198848 1786 0 BMT} + {-2385246586 3600 0 CET} + {-904435200 7200 1 CEST} + {-891129600 3600 0 CET} + {-872985600 7200 1 CEST} + {-859680000 3600 0 CET} + {347151600 3600 0 CET} + {354675600 7200 1 CEST} + {370400400 3600 0 CET} + {386125200 7200 1 CEST} + {401850000 3600 0 CET} + {417574800 7200 1 CEST} + {433299600 3600 0 CET} + {449024400 7200 1 CEST} + {465354000 3600 0 CET} + {481078800 7200 1 CEST} + {496803600 3600 0 CET} + {512528400 7200 1 CEST} + {528253200 3600 0 CET} + {543978000 7200 1 CEST} + {559702800 3600 0 CET} + {575427600 7200 1 CEST} + {591152400 3600 0 CET} + {606877200 7200 1 CEST} + {622602000 3600 0 CET} + {638326800 7200 1 CEST} + {654656400 3600 0 CET} + {670381200 7200 1 CEST} + {686106000 3600 0 CET} + {701830800 7200 1 CEST} + {717555600 3600 0 CET} + {733280400 7200 1 CEST} + {749005200 3600 0 CET} + {764730000 7200 1 CEST} + {780454800 3600 0 CET} + {796179600 7200 1 CEST} + {811904400 3600 0 CET} + {828234000 7200 1 CEST} + {846378000 3600 0 CET} + {859683600 7200 1 CEST} + {877827600 3600 0 CET} + {891133200 7200 1 CEST} + {909277200 3600 0 CET} + {922582800 7200 1 CEST} + {941331600 3600 0 CET} + {954032400 7200 1 CEST} + {972781200 3600 0 CET} + {985482000 7200 1 CEST} + {1004230800 3600 0 CET} + {1017536400 7200 1 CEST} + {1035680400 3600 0 CET} + {1048986000 7200 1 CEST} + {1067130000 3600 0 CET} + {1080435600 7200 1 CEST} + {1099184400 3600 0 CET} + {1111885200 7200 1 CEST} + {1130634000 3600 0 CET} + {1143334800 7200 1 CEST} + {1162083600 3600 0 CET} + {1174784400 7200 1 CEST} + {1193533200 3600 0 CET} + {1206838800 7200 1 CEST} + {1224982800 3600 0 CET} + {1238288400 7200 1 CEST} + {1256432400 3600 0 CET} + {1269738000 7200 1 CEST} + {1288486800 3600 0 CET} + {1301187600 7200 1 CEST} + {1319936400 3600 0 CET} + {1332637200 7200 1 CEST} + {1351386000 3600 0 CET} + {1364691600 7200 1 CEST} + {1382835600 3600 0 CET} + {1396141200 7200 1 CEST} + {1414285200 3600 0 CET} + {1427590800 7200 1 CEST} + {1445734800 3600 0 CET} + {1459040400 7200 1 CEST} + {1477789200 3600 0 CET} + {1490490000 7200 1 CEST} + {1509238800 3600 0 CET} + {1521939600 7200 1 CEST} + {1540688400 3600 0 CET} + {1553994000 7200 1 CEST} + {1572138000 3600 0 CET} + {1585443600 7200 1 CEST} + {1603587600 3600 0 CET} + {1616893200 7200 1 CEST} + {1635642000 3600 0 CET} + {1648342800 7200 1 CEST} + {1667091600 3600 0 CET} + {1679792400 7200 1 CEST} + {1698541200 3600 0 CET} + {1711846800 7200 1 CEST} + {1729990800 3600 0 CET} + {1743296400 7200 1 CEST} + {1761440400 3600 0 CET} + {1774746000 7200 1 CEST} + {1792890000 3600 0 CET} + {1806195600 7200 1 CEST} + {1824944400 3600 0 CET} + {1837645200 7200 1 CEST} + {1856394000 3600 0 CET} + {1869094800 7200 1 CEST} + {1887843600 3600 0 CET} + {1901149200 7200 1 CEST} + {1919293200 3600 0 CET} + {1932598800 7200 1 CEST} + {1950742800 3600 0 CET} + {1964048400 7200 1 CEST} + {1982797200 3600 0 CET} + {1995498000 7200 1 CEST} + {2014246800 3600 0 CET} + {2026947600 7200 1 CEST} + {2045696400 3600 0 CET} + {2058397200 7200 1 CEST} + {2077146000 3600 0 CET} + {2090451600 7200 1 CEST} + {2108595600 3600 0 CET} + {2121901200 7200 1 CEST} + {2140045200 3600 0 CET} + {2153350800 7200 1 CEST} + {2172099600 3600 0 CET} + {2184800400 7200 1 CEST} + {2203549200 3600 0 CET} + {2216250000 7200 1 CEST} + {2234998800 3600 0 CET} + {2248304400 7200 1 CEST} + {2266448400 3600 0 CET} + {2279754000 7200 1 CEST} + {2297898000 3600 0 CET} + {2311203600 7200 1 CEST} + {2329347600 3600 0 CET} + {2342653200 7200 1 CEST} + {2361402000 3600 0 CET} + {2374102800 7200 1 CEST} + {2392851600 3600 0 CET} + {2405552400 7200 1 CEST} + {2424301200 3600 0 CET} + {2437606800 7200 1 CEST} + {2455750800 3600 0 CET} + {2469056400 7200 1 CEST} + {2487200400 3600 0 CET} + {2500506000 7200 1 CEST} + {2519254800 3600 0 CET} + {2531955600 7200 1 CEST} + {2550704400 3600 0 CET} + {2563405200 7200 1 CEST} + {2582154000 3600 0 CET} + {2595459600 7200 1 CEST} + {2613603600 3600 0 CET} + {2626909200 7200 1 CEST} + {2645053200 3600 0 CET} + {2658358800 7200 1 CEST} + {2676502800 3600 0 CET} + {2689808400 7200 1 CEST} + {2708557200 3600 0 CET} + {2721258000 7200 1 CEST} + {2740006800 3600 0 CET} + {2752707600 7200 1 CEST} + {2771456400 3600 0 CET} + {2784762000 7200 1 CEST} + {2802906000 3600 0 CET} + {2816211600 7200 1 CEST} + {2834355600 3600 0 CET} + {2847661200 7200 1 CEST} + {2866410000 3600 0 CET} + {2879110800 7200 1 CEST} + {2897859600 3600 0 CET} + {2910560400 7200 1 CEST} + {2929309200 3600 0 CET} + {2942010000 7200 1 CEST} + {2960758800 3600 0 CET} + {2974064400 7200 1 CEST} + {2992208400 3600 0 CET} + {3005514000 7200 1 CEST} + {3023658000 3600 0 CET} + {3036963600 7200 1 CEST} + {3055712400 3600 0 CET} + {3068413200 7200 1 CEST} + {3087162000 3600 0 CET} + {3099862800 7200 1 CEST} + {3118611600 3600 0 CET} + {3131917200 7200 1 CEST} + {3150061200 3600 0 CET} + {3163366800 7200 1 CEST} + {3181510800 3600 0 CET} + {3194816400 7200 1 CEST} + {3212960400 3600 0 CET} + {3226266000 7200 1 CEST} + {3245014800 3600 0 CET} + {3257715600 7200 1 CEST} + {3276464400 3600 0 CET} + {3289165200 7200 1 CEST} + {3307914000 3600 0 CET} + {3321219600 7200 1 CEST} + {3339363600 3600 0 CET} + {3352669200 7200 1 CEST} + {3370813200 3600 0 CET} + {3384118800 7200 1 CEST} + {3402867600 3600 0 CET} + {3415568400 7200 1 CEST} + {3434317200 3600 0 CET} + {3447018000 7200 1 CEST} + {3465766800 3600 0 CET} + {3479072400 7200 1 CEST} + {3497216400 3600 0 CET} + {3510522000 7200 1 CEST} + {3528666000 3600 0 CET} + {3541971600 7200 1 CEST} + {3560115600 3600 0 CET} + {3573421200 7200 1 CEST} + {3592170000 3600 0 CET} + {3604870800 7200 1 CEST} + {3623619600 3600 0 CET} + {3636320400 7200 1 CEST} + {3655069200 3600 0 CET} + {3668374800 7200 1 CEST} + {3686518800 3600 0 CET} + {3699824400 7200 1 CEST} + {3717968400 3600 0 CET} + {3731274000 7200 1 CEST} + {3750022800 3600 0 CET} + {3762723600 7200 1 CEST} + {3781472400 3600 0 CET} + {3794173200 7200 1 CEST} + {3812922000 3600 0 CET} + {3825622800 7200 1 CEST} + {3844371600 3600 0 CET} + {3857677200 7200 1 CEST} + {3875821200 3600 0 CET} + {3889126800 7200 1 CEST} + {3907270800 3600 0 CET} + {3920576400 7200 1 CEST} + {3939325200 3600 0 CET} + {3952026000 7200 1 CEST} + {3970774800 3600 0 CET} + {3983475600 7200 1 CEST} + {4002224400 3600 0 CET} + {4015530000 7200 1 CEST} + {4033674000 3600 0 CET} + {4046979600 7200 1 CEST} + {4065123600 3600 0 CET} + {4078429200 7200 1 CEST} + {4096573200 3600 0 CET} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/GB b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/GB new file mode 100644 index 00000000..72d77eea --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/GB @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Europe/London)]} { + LoadTimeZoneFile Europe/London +} +set TZData(:GB) $TZData(:Europe/London) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/GB-Eire b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/GB-Eire new file mode 100644 index 00000000..16224173 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/GB-Eire @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Europe/London)]} { + LoadTimeZoneFile Europe/London +} +set TZData(:GB-Eire) $TZData(:Europe/London) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/GMT b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/GMT new file mode 100644 index 00000000..4258564e --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/GMT @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Etc/GMT)]} { + LoadTimeZoneFile Etc/GMT +} +set TZData(:GMT) $TZData(:Etc/GMT) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/GMT+0 b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/GMT+0 new file mode 100644 index 00000000..a1e81267 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/GMT+0 @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Etc/GMT)]} { + LoadTimeZoneFile Etc/GMT +} +set TZData(:GMT+0) $TZData(:Etc/GMT) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/GMT-0 b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/GMT-0 new file mode 100644 index 00000000..04ccafe2 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/GMT-0 @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Etc/GMT)]} { + LoadTimeZoneFile Etc/GMT +} +set TZData(:GMT-0) $TZData(:Etc/GMT) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/GMT0 b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/GMT0 new file mode 100644 index 00000000..92e95a34 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/GMT0 @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Etc/GMT)]} { + LoadTimeZoneFile Etc/GMT +} +set TZData(:GMT0) $TZData(:Etc/GMT) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Greenwich b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Greenwich new file mode 100644 index 00000000..61152331 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Greenwich @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Etc/GMT)]} { + LoadTimeZoneFile Etc/GMT +} +set TZData(:Greenwich) $TZData(:Etc/GMT) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/HST b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/HST new file mode 100644 index 00000000..fea7f143 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/HST @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:HST) { + {-9223372036854775808 -36000 0 HST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Hongkong b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Hongkong new file mode 100644 index 00000000..f9d4dac7 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Hongkong @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Asia/Hong_Kong)]} { + LoadTimeZoneFile Asia/Hong_Kong +} +set TZData(:Hongkong) $TZData(:Asia/Hong_Kong) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Iceland b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Iceland new file mode 100644 index 00000000..eb3f3eb2 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Iceland @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Atlantic/Reykjavik)]} { + LoadTimeZoneFile Atlantic/Reykjavik +} +set TZData(:Iceland) $TZData(:Atlantic/Reykjavik) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Indian/Antananarivo b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Indian/Antananarivo new file mode 100644 index 00000000..c56a893f --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Indian/Antananarivo @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Africa/Nairobi)]} { + LoadTimeZoneFile Africa/Nairobi +} +set TZData(:Indian/Antananarivo) $TZData(:Africa/Nairobi) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Indian/Chagos b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Indian/Chagos new file mode 100644 index 00000000..a5cec611 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Indian/Chagos @@ -0,0 +1,7 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Indian/Chagos) { + {-9223372036854775808 17380 0 LMT} + {-1988167780 18000 0 IOT} + {820436400 21600 0 IOT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Indian/Christmas b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Indian/Christmas new file mode 100644 index 00000000..c36e973c --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Indian/Christmas @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Indian/Christmas) { + {-9223372036854775808 25372 0 LMT} + {-2364102172 25200 0 CXT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Indian/Cocos b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Indian/Cocos new file mode 100644 index 00000000..a63ae680 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Indian/Cocos @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Indian/Cocos) { + {-9223372036854775808 23260 0 LMT} + {-2209012060 23400 0 CCT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Indian/Comoro b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Indian/Comoro new file mode 100644 index 00000000..06071de0 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Indian/Comoro @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Africa/Nairobi)]} { + LoadTimeZoneFile Africa/Nairobi +} +set TZData(:Indian/Comoro) $TZData(:Africa/Nairobi) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Indian/Kerguelen b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Indian/Kerguelen new file mode 100644 index 00000000..b41b85a0 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Indian/Kerguelen @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Indian/Kerguelen) { + {-9223372036854775808 0 0 zzz} + {-631152000 18000 0 TFT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Indian/Mahe b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Indian/Mahe new file mode 100644 index 00000000..c88a24b3 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Indian/Mahe @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Indian/Mahe) { + {-9223372036854775808 13308 0 LMT} + {-2006653308 14400 0 SCT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Indian/Maldives b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Indian/Maldives new file mode 100644 index 00000000..2c2c7391 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Indian/Maldives @@ -0,0 +1,7 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Indian/Maldives) { + {-9223372036854775808 17640 0 LMT} + {-2840158440 17640 0 MMT} + {-315636840 18000 0 MVT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Indian/Mauritius b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Indian/Mauritius new file mode 100644 index 00000000..a9c07ebe --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Indian/Mauritius @@ -0,0 +1,10 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Indian/Mauritius) { + {-9223372036854775808 13800 0 LMT} + {-1988164200 14400 0 MUT} + {403041600 18000 1 MUST} + {417034800 14400 0 MUT} + {1224972000 18000 1 MUST} + {1238274000 14400 0 MUT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Indian/Mayotte b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Indian/Mayotte new file mode 100644 index 00000000..da55521b --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Indian/Mayotte @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Africa/Nairobi)]} { + LoadTimeZoneFile Africa/Nairobi +} +set TZData(:Indian/Mayotte) $TZData(:Africa/Nairobi) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Indian/Reunion b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Indian/Reunion new file mode 100644 index 00000000..de2dd607 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Indian/Reunion @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Indian/Reunion) { + {-9223372036854775808 13312 0 LMT} + {-1848886912 14400 0 RET} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Iran b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Iran new file mode 100644 index 00000000..e200b4df --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Iran @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Asia/Tehran)]} { + LoadTimeZoneFile Asia/Tehran +} +set TZData(:Iran) $TZData(:Asia/Tehran) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Israel b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Israel new file mode 100644 index 00000000..af521f5c --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Israel @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Asia/Jerusalem)]} { + LoadTimeZoneFile Asia/Jerusalem +} +set TZData(:Israel) $TZData(:Asia/Jerusalem) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Jamaica b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Jamaica new file mode 100644 index 00000000..ddb5d458 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Jamaica @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Jamaica)]} { + LoadTimeZoneFile America/Jamaica +} +set TZData(:Jamaica) $TZData(:America/Jamaica) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Japan b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Japan new file mode 100644 index 00000000..428a79f1 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Japan @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Asia/Tokyo)]} { + LoadTimeZoneFile Asia/Tokyo +} +set TZData(:Japan) $TZData(:Asia/Tokyo) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Kwajalein b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Kwajalein new file mode 100644 index 00000000..586db6db --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Kwajalein @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Pacific/Kwajalein)]} { + LoadTimeZoneFile Pacific/Kwajalein +} +set TZData(:Kwajalein) $TZData(:Pacific/Kwajalein) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Libya b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Libya new file mode 100644 index 00000000..6cd77e14 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Libya @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Africa/Tripoli)]} { + LoadTimeZoneFile Africa/Tripoli +} +set TZData(:Libya) $TZData(:Africa/Tripoli) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/MET b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/MET new file mode 100644 index 00000000..8789c976 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/MET @@ -0,0 +1,265 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:MET) { + {-9223372036854775808 3600 0 MET} + {-1693706400 7200 1 MEST} + {-1680483600 3600 0 MET} + {-1663455600 7200 1 MEST} + {-1650150000 3600 0 MET} + {-1632006000 7200 1 MEST} + {-1618700400 3600 0 MET} + {-938905200 7200 1 MEST} + {-857257200 3600 0 MET} + {-844556400 7200 1 MEST} + {-828226800 3600 0 MET} + {-812502000 7200 1 MEST} + {-796777200 3600 0 MET} + {-781052400 7200 1 MEST} + {-766623600 3600 0 MET} + {228877200 7200 1 MEST} + {243997200 3600 0 MET} + {260326800 7200 1 MEST} + {276051600 3600 0 MET} + {291776400 7200 1 MEST} + {307501200 3600 0 MET} + {323830800 7200 1 MEST} + {338950800 3600 0 MET} + {354675600 7200 1 MEST} + {370400400 3600 0 MET} + {386125200 7200 1 MEST} + {401850000 3600 0 MET} + {417574800 7200 1 MEST} + {433299600 3600 0 MET} + {449024400 7200 1 MEST} + {465354000 3600 0 MET} + {481078800 7200 1 MEST} + {496803600 3600 0 MET} + {512528400 7200 1 MEST} + {528253200 3600 0 MET} + {543978000 7200 1 MEST} + {559702800 3600 0 MET} + {575427600 7200 1 MEST} + {591152400 3600 0 MET} + {606877200 7200 1 MEST} + {622602000 3600 0 MET} + {638326800 7200 1 MEST} + {654656400 3600 0 MET} + {670381200 7200 1 MEST} + {686106000 3600 0 MET} + {701830800 7200 1 MEST} + {717555600 3600 0 MET} + {733280400 7200 1 MEST} + {749005200 3600 0 MET} + {764730000 7200 1 MEST} + {780454800 3600 0 MET} + {796179600 7200 1 MEST} + {811904400 3600 0 MET} + {828234000 7200 1 MEST} + {846378000 3600 0 MET} + {859683600 7200 1 MEST} + {877827600 3600 0 MET} + {891133200 7200 1 MEST} + {909277200 3600 0 MET} + {922582800 7200 1 MEST} + {941331600 3600 0 MET} + {954032400 7200 1 MEST} + {972781200 3600 0 MET} + {985482000 7200 1 MEST} + {1004230800 3600 0 MET} + {1017536400 7200 1 MEST} + {1035680400 3600 0 MET} + {1048986000 7200 1 MEST} + {1067130000 3600 0 MET} + {1080435600 7200 1 MEST} + {1099184400 3600 0 MET} + {1111885200 7200 1 MEST} + {1130634000 3600 0 MET} + {1143334800 7200 1 MEST} + {1162083600 3600 0 MET} + {1174784400 7200 1 MEST} + {1193533200 3600 0 MET} + {1206838800 7200 1 MEST} + {1224982800 3600 0 MET} + {1238288400 7200 1 MEST} + {1256432400 3600 0 MET} + {1269738000 7200 1 MEST} + {1288486800 3600 0 MET} + {1301187600 7200 1 MEST} + {1319936400 3600 0 MET} + {1332637200 7200 1 MEST} + {1351386000 3600 0 MET} + {1364691600 7200 1 MEST} + {1382835600 3600 0 MET} + {1396141200 7200 1 MEST} + {1414285200 3600 0 MET} + {1427590800 7200 1 MEST} + {1445734800 3600 0 MET} + {1459040400 7200 1 MEST} + {1477789200 3600 0 MET} + {1490490000 7200 1 MEST} + {1509238800 3600 0 MET} + {1521939600 7200 1 MEST} + {1540688400 3600 0 MET} + {1553994000 7200 1 MEST} + {1572138000 3600 0 MET} + {1585443600 7200 1 MEST} + {1603587600 3600 0 MET} + {1616893200 7200 1 MEST} + {1635642000 3600 0 MET} + {1648342800 7200 1 MEST} + {1667091600 3600 0 MET} + {1679792400 7200 1 MEST} + {1698541200 3600 0 MET} + {1711846800 7200 1 MEST} + {1729990800 3600 0 MET} + {1743296400 7200 1 MEST} + {1761440400 3600 0 MET} + {1774746000 7200 1 MEST} + {1792890000 3600 0 MET} + {1806195600 7200 1 MEST} + {1824944400 3600 0 MET} + {1837645200 7200 1 MEST} + {1856394000 3600 0 MET} + {1869094800 7200 1 MEST} + {1887843600 3600 0 MET} + {1901149200 7200 1 MEST} + {1919293200 3600 0 MET} + {1932598800 7200 1 MEST} + {1950742800 3600 0 MET} + {1964048400 7200 1 MEST} + {1982797200 3600 0 MET} + {1995498000 7200 1 MEST} + {2014246800 3600 0 MET} + {2026947600 7200 1 MEST} + {2045696400 3600 0 MET} + {2058397200 7200 1 MEST} + {2077146000 3600 0 MET} + {2090451600 7200 1 MEST} + {2108595600 3600 0 MET} + {2121901200 7200 1 MEST} + {2140045200 3600 0 MET} + {2153350800 7200 1 MEST} + {2172099600 3600 0 MET} + {2184800400 7200 1 MEST} + {2203549200 3600 0 MET} + {2216250000 7200 1 MEST} + {2234998800 3600 0 MET} + {2248304400 7200 1 MEST} + {2266448400 3600 0 MET} + {2279754000 7200 1 MEST} + {2297898000 3600 0 MET} + {2311203600 7200 1 MEST} + {2329347600 3600 0 MET} + {2342653200 7200 1 MEST} + {2361402000 3600 0 MET} + {2374102800 7200 1 MEST} + {2392851600 3600 0 MET} + {2405552400 7200 1 MEST} + {2424301200 3600 0 MET} + {2437606800 7200 1 MEST} + {2455750800 3600 0 MET} + {2469056400 7200 1 MEST} + {2487200400 3600 0 MET} + {2500506000 7200 1 MEST} + {2519254800 3600 0 MET} + {2531955600 7200 1 MEST} + {2550704400 3600 0 MET} + {2563405200 7200 1 MEST} + {2582154000 3600 0 MET} + {2595459600 7200 1 MEST} + {2613603600 3600 0 MET} + {2626909200 7200 1 MEST} + {2645053200 3600 0 MET} + {2658358800 7200 1 MEST} + {2676502800 3600 0 MET} + {2689808400 7200 1 MEST} + {2708557200 3600 0 MET} + {2721258000 7200 1 MEST} + {2740006800 3600 0 MET} + {2752707600 7200 1 MEST} + {2771456400 3600 0 MET} + {2784762000 7200 1 MEST} + {2802906000 3600 0 MET} + {2816211600 7200 1 MEST} + {2834355600 3600 0 MET} + {2847661200 7200 1 MEST} + {2866410000 3600 0 MET} + {2879110800 7200 1 MEST} + {2897859600 3600 0 MET} + {2910560400 7200 1 MEST} + {2929309200 3600 0 MET} + {2942010000 7200 1 MEST} + {2960758800 3600 0 MET} + {2974064400 7200 1 MEST} + {2992208400 3600 0 MET} + {3005514000 7200 1 MEST} + {3023658000 3600 0 MET} + {3036963600 7200 1 MEST} + {3055712400 3600 0 MET} + {3068413200 7200 1 MEST} + {3087162000 3600 0 MET} + {3099862800 7200 1 MEST} + {3118611600 3600 0 MET} + {3131917200 7200 1 MEST} + {3150061200 3600 0 MET} + {3163366800 7200 1 MEST} + {3181510800 3600 0 MET} + {3194816400 7200 1 MEST} + {3212960400 3600 0 MET} + {3226266000 7200 1 MEST} + {3245014800 3600 0 MET} + {3257715600 7200 1 MEST} + {3276464400 3600 0 MET} + {3289165200 7200 1 MEST} + {3307914000 3600 0 MET} + {3321219600 7200 1 MEST} + {3339363600 3600 0 MET} + {3352669200 7200 1 MEST} + {3370813200 3600 0 MET} + {3384118800 7200 1 MEST} + {3402867600 3600 0 MET} + {3415568400 7200 1 MEST} + {3434317200 3600 0 MET} + {3447018000 7200 1 MEST} + {3465766800 3600 0 MET} + {3479072400 7200 1 MEST} + {3497216400 3600 0 MET} + {3510522000 7200 1 MEST} + {3528666000 3600 0 MET} + {3541971600 7200 1 MEST} + {3560115600 3600 0 MET} + {3573421200 7200 1 MEST} + {3592170000 3600 0 MET} + {3604870800 7200 1 MEST} + {3623619600 3600 0 MET} + {3636320400 7200 1 MEST} + {3655069200 3600 0 MET} + {3668374800 7200 1 MEST} + {3686518800 3600 0 MET} + {3699824400 7200 1 MEST} + {3717968400 3600 0 MET} + {3731274000 7200 1 MEST} + {3750022800 3600 0 MET} + {3762723600 7200 1 MEST} + {3781472400 3600 0 MET} + {3794173200 7200 1 MEST} + {3812922000 3600 0 MET} + {3825622800 7200 1 MEST} + {3844371600 3600 0 MET} + {3857677200 7200 1 MEST} + {3875821200 3600 0 MET} + {3889126800 7200 1 MEST} + {3907270800 3600 0 MET} + {3920576400 7200 1 MEST} + {3939325200 3600 0 MET} + {3952026000 7200 1 MEST} + {3970774800 3600 0 MET} + {3983475600 7200 1 MEST} + {4002224400 3600 0 MET} + {4015530000 7200 1 MEST} + {4033674000 3600 0 MET} + {4046979600 7200 1 MEST} + {4065123600 3600 0 MET} + {4078429200 7200 1 MEST} + {4096573200 3600 0 MET} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/MST b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/MST new file mode 100644 index 00000000..8c967abe --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/MST @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:MST) { + {-9223372036854775808 -25200 0 MST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/MST7MDT b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/MST7MDT new file mode 100644 index 00000000..ff520486 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/MST7MDT @@ -0,0 +1,278 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:MST7MDT) { + {-9223372036854775808 -25200 0 MST} + {-1633273200 -21600 1 MDT} + {-1615132800 -25200 0 MST} + {-1601823600 -21600 1 MDT} + {-1583683200 -25200 0 MST} + {-880210800 -21600 1 MWT} + {-769395600 -21600 1 MPT} + {-765388800 -25200 0 MST} + {-84380400 -21600 1 MDT} + {-68659200 -25200 0 MST} + {-52930800 -21600 1 MDT} + {-37209600 -25200 0 MST} + {-21481200 -21600 1 MDT} + {-5760000 -25200 0 MST} + {9968400 -21600 1 MDT} + {25689600 -25200 0 MST} + {41418000 -21600 1 MDT} + {57744000 -25200 0 MST} + {73472400 -21600 1 MDT} + {89193600 -25200 0 MST} + {104922000 -21600 1 MDT} + {120643200 -25200 0 MST} + {126694800 -21600 1 MDT} + {152092800 -25200 0 MST} + {162378000 -21600 1 MDT} + {183542400 -25200 0 MST} + {199270800 -21600 1 MDT} + {215596800 -25200 0 MST} + {230720400 -21600 1 MDT} + {247046400 -25200 0 MST} + {262774800 -21600 1 MDT} + {278496000 -25200 0 MST} + {294224400 -21600 1 MDT} + {309945600 -25200 0 MST} + {325674000 -21600 1 MDT} + {341395200 -25200 0 MST} + {357123600 -21600 1 MDT} + {372844800 -25200 0 MST} + {388573200 -21600 1 MDT} + {404899200 -25200 0 MST} + {420022800 -21600 1 MDT} + {436348800 -25200 0 MST} + {452077200 -21600 1 MDT} + {467798400 -25200 0 MST} + {483526800 -21600 1 MDT} + {499248000 -25200 0 MST} + {514976400 -21600 1 MDT} + {530697600 -25200 0 MST} + {544611600 -21600 1 MDT} + {562147200 -25200 0 MST} + {576061200 -21600 1 MDT} + {594201600 -25200 0 MST} + {607510800 -21600 1 MDT} + {625651200 -25200 0 MST} + {638960400 -21600 1 MDT} + {657100800 -25200 0 MST} + {671014800 -21600 1 MDT} + {688550400 -25200 0 MST} + {702464400 -21600 1 MDT} + {720000000 -25200 0 MST} + {733914000 -21600 1 MDT} + {752054400 -25200 0 MST} + {765363600 -21600 1 MDT} + {783504000 -25200 0 MST} + {796813200 -21600 1 MDT} + {814953600 -25200 0 MST} + {828867600 -21600 1 MDT} + {846403200 -25200 0 MST} + {860317200 -21600 1 MDT} + {877852800 -25200 0 MST} + {891766800 -21600 1 MDT} + {909302400 -25200 0 MST} + {923216400 -21600 1 MDT} + {941356800 -25200 0 MST} + {954666000 -21600 1 MDT} + {972806400 -25200 0 MST} + {986115600 -21600 1 MDT} + {1004256000 -25200 0 MST} + {1018170000 -21600 1 MDT} + {1035705600 -25200 0 MST} + {1049619600 -21600 1 MDT} + {1067155200 -25200 0 MST} + {1081069200 -21600 1 MDT} + {1099209600 -25200 0 MST} + {1112518800 -21600 1 MDT} + {1130659200 -25200 0 MST} + {1143968400 -21600 1 MDT} + {1162108800 -25200 0 MST} + {1173603600 -21600 1 MDT} + {1194163200 -25200 0 MST} + {1205053200 -21600 1 MDT} + {1225612800 -25200 0 MST} + {1236502800 -21600 1 MDT} + {1257062400 -25200 0 MST} + {1268557200 -21600 1 MDT} + {1289116800 -25200 0 MST} + {1300006800 -21600 1 MDT} + {1320566400 -25200 0 MST} + {1331456400 -21600 1 MDT} + {1352016000 -25200 0 MST} + {1362906000 -21600 1 MDT} + {1383465600 -25200 0 MST} + {1394355600 -21600 1 MDT} + {1414915200 -25200 0 MST} + {1425805200 -21600 1 MDT} + {1446364800 -25200 0 MST} + {1457859600 -21600 1 MDT} + {1478419200 -25200 0 MST} + {1489309200 -21600 1 MDT} + {1509868800 -25200 0 MST} + {1520758800 -21600 1 MDT} + {1541318400 -25200 0 MST} + {1552208400 -21600 1 MDT} + {1572768000 -25200 0 MST} + {1583658000 -21600 1 MDT} + {1604217600 -25200 0 MST} + {1615712400 -21600 1 MDT} + {1636272000 -25200 0 MST} + {1647162000 -21600 1 MDT} + {1667721600 -25200 0 MST} + {1678611600 -21600 1 MDT} + {1699171200 -25200 0 MST} + {1710061200 -21600 1 MDT} + {1730620800 -25200 0 MST} + {1741510800 -21600 1 MDT} + {1762070400 -25200 0 MST} + {1772960400 -21600 1 MDT} + {1793520000 -25200 0 MST} + {1805014800 -21600 1 MDT} + {1825574400 -25200 0 MST} + {1836464400 -21600 1 MDT} + {1857024000 -25200 0 MST} + {1867914000 -21600 1 MDT} + {1888473600 -25200 0 MST} + {1899363600 -21600 1 MDT} + {1919923200 -25200 0 MST} + {1930813200 -21600 1 MDT} + {1951372800 -25200 0 MST} + {1962867600 -21600 1 MDT} + {1983427200 -25200 0 MST} + {1994317200 -21600 1 MDT} + {2014876800 -25200 0 MST} + {2025766800 -21600 1 MDT} + {2046326400 -25200 0 MST} + {2057216400 -21600 1 MDT} + {2077776000 -25200 0 MST} + {2088666000 -21600 1 MDT} + {2109225600 -25200 0 MST} + {2120115600 -21600 1 MDT} + {2140675200 -25200 0 MST} + {2152170000 -21600 1 MDT} + {2172729600 -25200 0 MST} + {2183619600 -21600 1 MDT} + {2204179200 -25200 0 MST} + {2215069200 -21600 1 MDT} + {2235628800 -25200 0 MST} + {2246518800 -21600 1 MDT} + {2267078400 -25200 0 MST} + {2277968400 -21600 1 MDT} + {2298528000 -25200 0 MST} + {2309418000 -21600 1 MDT} + {2329977600 -25200 0 MST} + {2341472400 -21600 1 MDT} + {2362032000 -25200 0 MST} + {2372922000 -21600 1 MDT} + {2393481600 -25200 0 MST} + {2404371600 -21600 1 MDT} + {2424931200 -25200 0 MST} + {2435821200 -21600 1 MDT} + {2456380800 -25200 0 MST} + {2467270800 -21600 1 MDT} + {2487830400 -25200 0 MST} + {2499325200 -21600 1 MDT} + {2519884800 -25200 0 MST} + {2530774800 -21600 1 MDT} + {2551334400 -25200 0 MST} + {2562224400 -21600 1 MDT} + {2582784000 -25200 0 MST} + {2593674000 -21600 1 MDT} + {2614233600 -25200 0 MST} + {2625123600 -21600 1 MDT} + {2645683200 -25200 0 MST} + {2656573200 -21600 1 MDT} + {2677132800 -25200 0 MST} + {2688627600 -21600 1 MDT} + {2709187200 -25200 0 MST} + {2720077200 -21600 1 MDT} + {2740636800 -25200 0 MST} + {2751526800 -21600 1 MDT} + {2772086400 -25200 0 MST} + {2782976400 -21600 1 MDT} + {2803536000 -25200 0 MST} + {2814426000 -21600 1 MDT} + {2834985600 -25200 0 MST} + {2846480400 -21600 1 MDT} + {2867040000 -25200 0 MST} + {2877930000 -21600 1 MDT} + {2898489600 -25200 0 MST} + {2909379600 -21600 1 MDT} + {2929939200 -25200 0 MST} + {2940829200 -21600 1 MDT} + {2961388800 -25200 0 MST} + {2972278800 -21600 1 MDT} + {2992838400 -25200 0 MST} + {3003728400 -21600 1 MDT} + {3024288000 -25200 0 MST} + {3035782800 -21600 1 MDT} + {3056342400 -25200 0 MST} + {3067232400 -21600 1 MDT} + {3087792000 -25200 0 MST} + {3098682000 -21600 1 MDT} + {3119241600 -25200 0 MST} + {3130131600 -21600 1 MDT} + {3150691200 -25200 0 MST} + {3161581200 -21600 1 MDT} + {3182140800 -25200 0 MST} + {3193030800 -21600 1 MDT} + {3213590400 -25200 0 MST} + {3225085200 -21600 1 MDT} + {3245644800 -25200 0 MST} + {3256534800 -21600 1 MDT} + {3277094400 -25200 0 MST} + {3287984400 -21600 1 MDT} + {3308544000 -25200 0 MST} + {3319434000 -21600 1 MDT} + {3339993600 -25200 0 MST} + {3350883600 -21600 1 MDT} + {3371443200 -25200 0 MST} + {3382938000 -21600 1 MDT} + {3403497600 -25200 0 MST} + {3414387600 -21600 1 MDT} + {3434947200 -25200 0 MST} + {3445837200 -21600 1 MDT} + {3466396800 -25200 0 MST} + {3477286800 -21600 1 MDT} + {3497846400 -25200 0 MST} + {3508736400 -21600 1 MDT} + {3529296000 -25200 0 MST} + {3540186000 -21600 1 MDT} + {3560745600 -25200 0 MST} + {3572240400 -21600 1 MDT} + {3592800000 -25200 0 MST} + {3603690000 -21600 1 MDT} + {3624249600 -25200 0 MST} + {3635139600 -21600 1 MDT} + {3655699200 -25200 0 MST} + {3666589200 -21600 1 MDT} + {3687148800 -25200 0 MST} + {3698038800 -21600 1 MDT} + {3718598400 -25200 0 MST} + {3730093200 -21600 1 MDT} + {3750652800 -25200 0 MST} + {3761542800 -21600 1 MDT} + {3782102400 -25200 0 MST} + {3792992400 -21600 1 MDT} + {3813552000 -25200 0 MST} + {3824442000 -21600 1 MDT} + {3845001600 -25200 0 MST} + {3855891600 -21600 1 MDT} + {3876451200 -25200 0 MST} + {3887341200 -21600 1 MDT} + {3907900800 -25200 0 MST} + {3919395600 -21600 1 MDT} + {3939955200 -25200 0 MST} + {3950845200 -21600 1 MDT} + {3971404800 -25200 0 MST} + {3982294800 -21600 1 MDT} + {4002854400 -25200 0 MST} + {4013744400 -21600 1 MDT} + {4034304000 -25200 0 MST} + {4045194000 -21600 1 MDT} + {4065753600 -25200 0 MST} + {4076643600 -21600 1 MDT} + {4097203200 -25200 0 MST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Mexico/BajaNorte b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Mexico/BajaNorte new file mode 100644 index 00000000..8f6f459e --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Mexico/BajaNorte @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Tijuana)]} { + LoadTimeZoneFile America/Tijuana +} +set TZData(:Mexico/BajaNorte) $TZData(:America/Tijuana) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Mexico/BajaSur b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Mexico/BajaSur new file mode 100644 index 00000000..6d335a12 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Mexico/BajaSur @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Mazatlan)]} { + LoadTimeZoneFile America/Mazatlan +} +set TZData(:Mexico/BajaSur) $TZData(:America/Mazatlan) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Mexico/General b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Mexico/General new file mode 100644 index 00000000..0cac92f8 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Mexico/General @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Mexico_City)]} { + LoadTimeZoneFile America/Mexico_City +} +set TZData(:Mexico/General) $TZData(:America/Mexico_City) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/NZ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/NZ new file mode 100644 index 00000000..36d22a7b --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/NZ @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Pacific/Auckland)]} { + LoadTimeZoneFile Pacific/Auckland +} +set TZData(:NZ) $TZData(:Pacific/Auckland) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/NZ-CHAT b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/NZ-CHAT new file mode 100644 index 00000000..7f7c9180 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/NZ-CHAT @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Pacific/Chatham)]} { + LoadTimeZoneFile Pacific/Chatham +} +set TZData(:NZ-CHAT) $TZData(:Pacific/Chatham) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Navajo b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Navajo new file mode 100644 index 00000000..78cc2e24 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Navajo @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Denver)]} { + LoadTimeZoneFile America/Denver +} +set TZData(:Navajo) $TZData(:America/Denver) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/PRC b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/PRC new file mode 100644 index 00000000..1d8bb7cc --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/PRC @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Asia/Shanghai)]} { + LoadTimeZoneFile Asia/Shanghai +} +set TZData(:PRC) $TZData(:Asia/Shanghai) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/PST8PDT b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/PST8PDT new file mode 100644 index 00000000..87a94daa --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/PST8PDT @@ -0,0 +1,278 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:PST8PDT) { + {-9223372036854775808 -28800 0 PST} + {-1633269600 -25200 1 PDT} + {-1615129200 -28800 0 PST} + {-1601820000 -25200 1 PDT} + {-1583679600 -28800 0 PST} + {-880207200 -25200 1 PWT} + {-769395600 -25200 1 PPT} + {-765385200 -28800 0 PST} + {-84376800 -25200 1 PDT} + {-68655600 -28800 0 PST} + {-52927200 -25200 1 PDT} + {-37206000 -28800 0 PST} + {-21477600 -25200 1 PDT} + {-5756400 -28800 0 PST} + {9972000 -25200 1 PDT} + {25693200 -28800 0 PST} + {41421600 -25200 1 PDT} + {57747600 -28800 0 PST} + {73476000 -25200 1 PDT} + {89197200 -28800 0 PST} + {104925600 -25200 1 PDT} + {120646800 -28800 0 PST} + {126698400 -25200 1 PDT} + {152096400 -28800 0 PST} + {162381600 -25200 1 PDT} + {183546000 -28800 0 PST} + {199274400 -25200 1 PDT} + {215600400 -28800 0 PST} + {230724000 -25200 1 PDT} + {247050000 -28800 0 PST} + {262778400 -25200 1 PDT} + {278499600 -28800 0 PST} + {294228000 -25200 1 PDT} + {309949200 -28800 0 PST} + {325677600 -25200 1 PDT} + {341398800 -28800 0 PST} + {357127200 -25200 1 PDT} + {372848400 -28800 0 PST} + {388576800 -25200 1 PDT} + {404902800 -28800 0 PST} + {420026400 -25200 1 PDT} + {436352400 -28800 0 PST} + {452080800 -25200 1 PDT} + {467802000 -28800 0 PST} + {483530400 -25200 1 PDT} + {499251600 -28800 0 PST} + {514980000 -25200 1 PDT} + {530701200 -28800 0 PST} + {544615200 -25200 1 PDT} + {562150800 -28800 0 PST} + {576064800 -25200 1 PDT} + {594205200 -28800 0 PST} + {607514400 -25200 1 PDT} + {625654800 -28800 0 PST} + {638964000 -25200 1 PDT} + {657104400 -28800 0 PST} + {671018400 -25200 1 PDT} + {688554000 -28800 0 PST} + {702468000 -25200 1 PDT} + {720003600 -28800 0 PST} + {733917600 -25200 1 PDT} + {752058000 -28800 0 PST} + {765367200 -25200 1 PDT} + {783507600 -28800 0 PST} + {796816800 -25200 1 PDT} + {814957200 -28800 0 PST} + {828871200 -25200 1 PDT} + {846406800 -28800 0 PST} + {860320800 -25200 1 PDT} + {877856400 -28800 0 PST} + {891770400 -25200 1 PDT} + {909306000 -28800 0 PST} + {923220000 -25200 1 PDT} + {941360400 -28800 0 PST} + {954669600 -25200 1 PDT} + {972810000 -28800 0 PST} + {986119200 -25200 1 PDT} + {1004259600 -28800 0 PST} + {1018173600 -25200 1 PDT} + {1035709200 -28800 0 PST} + {1049623200 -25200 1 PDT} + {1067158800 -28800 0 PST} + {1081072800 -25200 1 PDT} + {1099213200 -28800 0 PST} + {1112522400 -25200 1 PDT} + {1130662800 -28800 0 PST} + {1143972000 -25200 1 PDT} + {1162112400 -28800 0 PST} + {1173607200 -25200 1 PDT} + {1194166800 -28800 0 PST} + {1205056800 -25200 1 PDT} + {1225616400 -28800 0 PST} + {1236506400 -25200 1 PDT} + {1257066000 -28800 0 PST} + {1268560800 -25200 1 PDT} + {1289120400 -28800 0 PST} + {1300010400 -25200 1 PDT} + {1320570000 -28800 0 PST} + {1331460000 -25200 1 PDT} + {1352019600 -28800 0 PST} + {1362909600 -25200 1 PDT} + {1383469200 -28800 0 PST} + {1394359200 -25200 1 PDT} + {1414918800 -28800 0 PST} + {1425808800 -25200 1 PDT} + {1446368400 -28800 0 PST} + {1457863200 -25200 1 PDT} + {1478422800 -28800 0 PST} + {1489312800 -25200 1 PDT} + {1509872400 -28800 0 PST} + {1520762400 -25200 1 PDT} + {1541322000 -28800 0 PST} + {1552212000 -25200 1 PDT} + {1572771600 -28800 0 PST} + {1583661600 -25200 1 PDT} + {1604221200 -28800 0 PST} + {1615716000 -25200 1 PDT} + {1636275600 -28800 0 PST} + {1647165600 -25200 1 PDT} + {1667725200 -28800 0 PST} + {1678615200 -25200 1 PDT} + {1699174800 -28800 0 PST} + {1710064800 -25200 1 PDT} + {1730624400 -28800 0 PST} + {1741514400 -25200 1 PDT} + {1762074000 -28800 0 PST} + {1772964000 -25200 1 PDT} + {1793523600 -28800 0 PST} + {1805018400 -25200 1 PDT} + {1825578000 -28800 0 PST} + {1836468000 -25200 1 PDT} + {1857027600 -28800 0 PST} + {1867917600 -25200 1 PDT} + {1888477200 -28800 0 PST} + {1899367200 -25200 1 PDT} + {1919926800 -28800 0 PST} + {1930816800 -25200 1 PDT} + {1951376400 -28800 0 PST} + {1962871200 -25200 1 PDT} + {1983430800 -28800 0 PST} + {1994320800 -25200 1 PDT} + {2014880400 -28800 0 PST} + {2025770400 -25200 1 PDT} + {2046330000 -28800 0 PST} + {2057220000 -25200 1 PDT} + {2077779600 -28800 0 PST} + {2088669600 -25200 1 PDT} + {2109229200 -28800 0 PST} + {2120119200 -25200 1 PDT} + {2140678800 -28800 0 PST} + {2152173600 -25200 1 PDT} + {2172733200 -28800 0 PST} + {2183623200 -25200 1 PDT} + {2204182800 -28800 0 PST} + {2215072800 -25200 1 PDT} + {2235632400 -28800 0 PST} + {2246522400 -25200 1 PDT} + {2267082000 -28800 0 PST} + {2277972000 -25200 1 PDT} + {2298531600 -28800 0 PST} + {2309421600 -25200 1 PDT} + {2329981200 -28800 0 PST} + {2341476000 -25200 1 PDT} + {2362035600 -28800 0 PST} + {2372925600 -25200 1 PDT} + {2393485200 -28800 0 PST} + {2404375200 -25200 1 PDT} + {2424934800 -28800 0 PST} + {2435824800 -25200 1 PDT} + {2456384400 -28800 0 PST} + {2467274400 -25200 1 PDT} + {2487834000 -28800 0 PST} + {2499328800 -25200 1 PDT} + {2519888400 -28800 0 PST} + {2530778400 -25200 1 PDT} + {2551338000 -28800 0 PST} + {2562228000 -25200 1 PDT} + {2582787600 -28800 0 PST} + {2593677600 -25200 1 PDT} + {2614237200 -28800 0 PST} + {2625127200 -25200 1 PDT} + {2645686800 -28800 0 PST} + {2656576800 -25200 1 PDT} + {2677136400 -28800 0 PST} + {2688631200 -25200 1 PDT} + {2709190800 -28800 0 PST} + {2720080800 -25200 1 PDT} + {2740640400 -28800 0 PST} + {2751530400 -25200 1 PDT} + {2772090000 -28800 0 PST} + {2782980000 -25200 1 PDT} + {2803539600 -28800 0 PST} + {2814429600 -25200 1 PDT} + {2834989200 -28800 0 PST} + {2846484000 -25200 1 PDT} + {2867043600 -28800 0 PST} + {2877933600 -25200 1 PDT} + {2898493200 -28800 0 PST} + {2909383200 -25200 1 PDT} + {2929942800 -28800 0 PST} + {2940832800 -25200 1 PDT} + {2961392400 -28800 0 PST} + {2972282400 -25200 1 PDT} + {2992842000 -28800 0 PST} + {3003732000 -25200 1 PDT} + {3024291600 -28800 0 PST} + {3035786400 -25200 1 PDT} + {3056346000 -28800 0 PST} + {3067236000 -25200 1 PDT} + {3087795600 -28800 0 PST} + {3098685600 -25200 1 PDT} + {3119245200 -28800 0 PST} + {3130135200 -25200 1 PDT} + {3150694800 -28800 0 PST} + {3161584800 -25200 1 PDT} + {3182144400 -28800 0 PST} + {3193034400 -25200 1 PDT} + {3213594000 -28800 0 PST} + {3225088800 -25200 1 PDT} + {3245648400 -28800 0 PST} + {3256538400 -25200 1 PDT} + {3277098000 -28800 0 PST} + {3287988000 -25200 1 PDT} + {3308547600 -28800 0 PST} + {3319437600 -25200 1 PDT} + {3339997200 -28800 0 PST} + {3350887200 -25200 1 PDT} + {3371446800 -28800 0 PST} + {3382941600 -25200 1 PDT} + {3403501200 -28800 0 PST} + {3414391200 -25200 1 PDT} + {3434950800 -28800 0 PST} + {3445840800 -25200 1 PDT} + {3466400400 -28800 0 PST} + {3477290400 -25200 1 PDT} + {3497850000 -28800 0 PST} + {3508740000 -25200 1 PDT} + {3529299600 -28800 0 PST} + {3540189600 -25200 1 PDT} + {3560749200 -28800 0 PST} + {3572244000 -25200 1 PDT} + {3592803600 -28800 0 PST} + {3603693600 -25200 1 PDT} + {3624253200 -28800 0 PST} + {3635143200 -25200 1 PDT} + {3655702800 -28800 0 PST} + {3666592800 -25200 1 PDT} + {3687152400 -28800 0 PST} + {3698042400 -25200 1 PDT} + {3718602000 -28800 0 PST} + {3730096800 -25200 1 PDT} + {3750656400 -28800 0 PST} + {3761546400 -25200 1 PDT} + {3782106000 -28800 0 PST} + {3792996000 -25200 1 PDT} + {3813555600 -28800 0 PST} + {3824445600 -25200 1 PDT} + {3845005200 -28800 0 PST} + {3855895200 -25200 1 PDT} + {3876454800 -28800 0 PST} + {3887344800 -25200 1 PDT} + {3907904400 -28800 0 PST} + {3919399200 -25200 1 PDT} + {3939958800 -28800 0 PST} + {3950848800 -25200 1 PDT} + {3971408400 -28800 0 PST} + {3982298400 -25200 1 PDT} + {4002858000 -28800 0 PST} + {4013748000 -25200 1 PDT} + {4034307600 -28800 0 PST} + {4045197600 -25200 1 PDT} + {4065757200 -28800 0 PST} + {4076647200 -25200 1 PDT} + {4097206800 -28800 0 PST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Apia b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Apia new file mode 100644 index 00000000..21d6669a --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Apia @@ -0,0 +1,188 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Apia) { + {-9223372036854775808 45184 0 LMT} + {-2855737984 -41216 0 LMT} + {-1861878784 -41400 0 WSST} + {-631110600 -39600 0 SST} + {1285498800 -36000 1 SDT} + {1301752800 -39600 0 SST} + {1316872800 -36000 1 SDT} + {1325239200 50400 0 WSDT} + {1333202400 46800 0 WSST} + {1348927200 50400 1 WSDT} + {1365256800 46800 0 WSST} + {1380376800 50400 1 WSDT} + {1396706400 46800 0 WSST} + {1411826400 50400 1 WSDT} + {1428156000 46800 0 WSST} + {1443276000 50400 1 WSDT} + {1459605600 46800 0 WSST} + {1474725600 50400 1 WSDT} + {1491055200 46800 0 WSST} + {1506175200 50400 1 WSDT} + {1522504800 46800 0 WSST} + {1538229600 50400 1 WSDT} + {1554559200 46800 0 WSST} + {1569679200 50400 1 WSDT} + {1586008800 46800 0 WSST} + {1601128800 50400 1 WSDT} + {1617458400 46800 0 WSST} + {1632578400 50400 1 WSDT} + {1648908000 46800 0 WSST} + {1664028000 50400 1 WSDT} + {1680357600 46800 0 WSST} + {1695477600 50400 1 WSDT} + {1712412000 46800 0 WSST} + {1727532000 50400 1 WSDT} + {1743861600 46800 0 WSST} + {1758981600 50400 1 WSDT} + {1775311200 46800 0 WSST} + {1790431200 50400 1 WSDT} + {1806760800 46800 0 WSST} + {1821880800 50400 1 WSDT} + {1838210400 46800 0 WSST} + {1853330400 50400 1 WSDT} + {1869660000 46800 0 WSST} + {1885384800 50400 1 WSDT} + {1901714400 46800 0 WSST} + {1916834400 50400 1 WSDT} + {1933164000 46800 0 WSST} + {1948284000 50400 1 WSDT} + {1964613600 46800 0 WSST} + {1979733600 50400 1 WSDT} + {1996063200 46800 0 WSST} + {2011183200 50400 1 WSDT} + {2027512800 46800 0 WSST} + {2042632800 50400 1 WSDT} + {2058962400 46800 0 WSST} + {2074687200 50400 1 WSDT} + {2091016800 46800 0 WSST} + {2106136800 50400 1 WSDT} + {2122466400 46800 0 WSST} + {2137586400 50400 1 WSDT} + {2153916000 46800 0 WSST} + {2169036000 50400 1 WSDT} + {2185365600 46800 0 WSST} + {2200485600 50400 1 WSDT} + {2216815200 46800 0 WSST} + {2232540000 50400 1 WSDT} + {2248869600 46800 0 WSST} + {2263989600 50400 1 WSDT} + {2280319200 46800 0 WSST} + {2295439200 50400 1 WSDT} + {2311768800 46800 0 WSST} + {2326888800 50400 1 WSDT} + {2343218400 46800 0 WSST} + {2358338400 50400 1 WSDT} + {2374668000 46800 0 WSST} + {2389788000 50400 1 WSDT} + {2406117600 46800 0 WSST} + {2421842400 50400 1 WSDT} + {2438172000 46800 0 WSST} + {2453292000 50400 1 WSDT} + {2469621600 46800 0 WSST} + {2484741600 50400 1 WSDT} + {2501071200 46800 0 WSST} + {2516191200 50400 1 WSDT} + {2532520800 46800 0 WSST} + {2547640800 50400 1 WSDT} + {2563970400 46800 0 WSST} + {2579090400 50400 1 WSDT} + {2596024800 46800 0 WSST} + {2611144800 50400 1 WSDT} + {2627474400 46800 0 WSST} + {2642594400 50400 1 WSDT} + {2658924000 46800 0 WSST} + {2674044000 50400 1 WSDT} + {2690373600 46800 0 WSST} + {2705493600 50400 1 WSDT} + {2721823200 46800 0 WSST} + {2736943200 50400 1 WSDT} + {2753272800 46800 0 WSST} + {2768997600 50400 1 WSDT} + {2785327200 46800 0 WSST} + {2800447200 50400 1 WSDT} + {2816776800 46800 0 WSST} + {2831896800 50400 1 WSDT} + {2848226400 46800 0 WSST} + {2863346400 50400 1 WSDT} + {2879676000 46800 0 WSST} + {2894796000 50400 1 WSDT} + {2911125600 46800 0 WSST} + {2926245600 50400 1 WSDT} + {2942575200 46800 0 WSST} + {2958300000 50400 1 WSDT} + {2974629600 46800 0 WSST} + {2989749600 50400 1 WSDT} + {3006079200 46800 0 WSST} + {3021199200 50400 1 WSDT} + {3037528800 46800 0 WSST} + {3052648800 50400 1 WSDT} + {3068978400 46800 0 WSST} + {3084098400 50400 1 WSDT} + {3100428000 46800 0 WSST} + {3116152800 50400 1 WSDT} + {3132482400 46800 0 WSST} + {3147602400 50400 1 WSDT} + {3163932000 46800 0 WSST} + {3179052000 50400 1 WSDT} + {3195381600 46800 0 WSST} + {3210501600 50400 1 WSDT} + {3226831200 46800 0 WSST} + {3241951200 50400 1 WSDT} + {3258280800 46800 0 WSST} + {3273400800 50400 1 WSDT} + {3289730400 46800 0 WSST} + {3305455200 50400 1 WSDT} + {3321784800 46800 0 WSST} + {3336904800 50400 1 WSDT} + {3353234400 46800 0 WSST} + {3368354400 50400 1 WSDT} + {3384684000 46800 0 WSST} + {3399804000 50400 1 WSDT} + {3416133600 46800 0 WSST} + {3431253600 50400 1 WSDT} + {3447583200 46800 0 WSST} + {3462703200 50400 1 WSDT} + {3479637600 46800 0 WSST} + {3494757600 50400 1 WSDT} + {3511087200 46800 0 WSST} + {3526207200 50400 1 WSDT} + {3542536800 46800 0 WSST} + {3557656800 50400 1 WSDT} + {3573986400 46800 0 WSST} + {3589106400 50400 1 WSDT} + {3605436000 46800 0 WSST} + {3620556000 50400 1 WSDT} + {3636885600 46800 0 WSST} + {3652610400 50400 1 WSDT} + {3668940000 46800 0 WSST} + {3684060000 50400 1 WSDT} + {3700389600 46800 0 WSST} + {3715509600 50400 1 WSDT} + {3731839200 46800 0 WSST} + {3746959200 50400 1 WSDT} + {3763288800 46800 0 WSST} + {3778408800 50400 1 WSDT} + {3794738400 46800 0 WSST} + {3809858400 50400 1 WSDT} + {3826188000 46800 0 WSST} + {3841912800 50400 1 WSDT} + {3858242400 46800 0 WSST} + {3873362400 50400 1 WSDT} + {3889692000 46800 0 WSST} + {3904812000 50400 1 WSDT} + {3921141600 46800 0 WSST} + {3936261600 50400 1 WSDT} + {3952591200 46800 0 WSST} + {3967711200 50400 1 WSDT} + {3984040800 46800 0 WSST} + {3999765600 50400 1 WSDT} + {4016095200 46800 0 WSST} + {4031215200 50400 1 WSDT} + {4047544800 46800 0 WSST} + {4062664800 50400 1 WSDT} + {4078994400 46800 0 WSST} + {4094114400 50400 1 WSDT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Auckland b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Auckland new file mode 100644 index 00000000..5f7e2385 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Auckland @@ -0,0 +1,285 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Auckland) { + {-9223372036854775808 41944 0 LMT} + {-3192435544 41400 0 NZMT} + {-1330335000 45000 1 NZST} + {-1320057000 41400 0 NZMT} + {-1300699800 43200 1 NZST} + {-1287396000 41400 0 NZMT} + {-1269250200 43200 1 NZST} + {-1255946400 41400 0 NZMT} + {-1237800600 43200 1 NZST} + {-1224496800 41400 0 NZMT} + {-1206351000 43200 1 NZST} + {-1192442400 41400 0 NZMT} + {-1174901400 43200 1 NZST} + {-1160992800 41400 0 NZMT} + {-1143451800 43200 1 NZST} + {-1125914400 41400 0 NZMT} + {-1112607000 43200 1 NZST} + {-1094464800 41400 0 NZMT} + {-1081157400 43200 1 NZST} + {-1063015200 41400 0 NZMT} + {-1049707800 43200 1 NZST} + {-1031565600 41400 0 NZMT} + {-1018258200 43200 1 NZST} + {-1000116000 41400 0 NZMT} + {-986808600 43200 1 NZST} + {-968061600 41400 0 NZMT} + {-955359000 43200 1 NZST} + {-936612000 41400 0 NZMT} + {-923304600 43200 1 NZST} + {-757425600 43200 0 NZST} + {152632800 46800 1 NZDT} + {162309600 43200 0 NZST} + {183477600 46800 1 NZDT} + {194968800 43200 0 NZST} + {215532000 46800 1 NZDT} + {226418400 43200 0 NZST} + {246981600 46800 1 NZDT} + {257868000 43200 0 NZST} + {278431200 46800 1 NZDT} + {289317600 43200 0 NZST} + {309880800 46800 1 NZDT} + {320767200 43200 0 NZST} + {341330400 46800 1 NZDT} + {352216800 43200 0 NZST} + {372780000 46800 1 NZDT} + {384271200 43200 0 NZST} + {404834400 46800 1 NZDT} + {415720800 43200 0 NZST} + {436284000 46800 1 NZDT} + {447170400 43200 0 NZST} + {467733600 46800 1 NZDT} + {478620000 43200 0 NZST} + {499183200 46800 1 NZDT} + {510069600 43200 0 NZST} + {530632800 46800 1 NZDT} + {541519200 43200 0 NZST} + {562082400 46800 1 NZDT} + {573573600 43200 0 NZST} + {594136800 46800 1 NZDT} + {605023200 43200 0 NZST} + {623772000 46800 1 NZDT} + {637682400 43200 0 NZST} + {655221600 46800 1 NZDT} + {669132000 43200 0 NZST} + {686671200 46800 1 NZDT} + {700581600 43200 0 NZST} + {718120800 46800 1 NZDT} + {732636000 43200 0 NZST} + {749570400 46800 1 NZDT} + {764085600 43200 0 NZST} + {781020000 46800 1 NZDT} + {795535200 43200 0 NZST} + {812469600 46800 1 NZDT} + {826984800 43200 0 NZST} + {844524000 46800 1 NZDT} + {858434400 43200 0 NZST} + {875973600 46800 1 NZDT} + {889884000 43200 0 NZST} + {907423200 46800 1 NZDT} + {921938400 43200 0 NZST} + {938872800 46800 1 NZDT} + {953388000 43200 0 NZST} + {970322400 46800 1 NZDT} + {984837600 43200 0 NZST} + {1002376800 46800 1 NZDT} + {1016287200 43200 0 NZST} + {1033826400 46800 1 NZDT} + {1047736800 43200 0 NZST} + {1065276000 46800 1 NZDT} + {1079791200 43200 0 NZST} + {1096725600 46800 1 NZDT} + {1111240800 43200 0 NZST} + {1128175200 46800 1 NZDT} + {1142690400 43200 0 NZST} + {1159624800 46800 1 NZDT} + {1174140000 43200 0 NZST} + {1191074400 46800 1 NZDT} + {1207404000 43200 0 NZST} + {1222524000 46800 1 NZDT} + {1238853600 43200 0 NZST} + {1253973600 46800 1 NZDT} + {1270303200 43200 0 NZST} + {1285423200 46800 1 NZDT} + {1301752800 43200 0 NZST} + {1316872800 46800 1 NZDT} + {1333202400 43200 0 NZST} + {1348927200 46800 1 NZDT} + {1365256800 43200 0 NZST} + {1380376800 46800 1 NZDT} + {1396706400 43200 0 NZST} + {1411826400 46800 1 NZDT} + {1428156000 43200 0 NZST} + {1443276000 46800 1 NZDT} + {1459605600 43200 0 NZST} + {1474725600 46800 1 NZDT} + {1491055200 43200 0 NZST} + {1506175200 46800 1 NZDT} + {1522504800 43200 0 NZST} + {1538229600 46800 1 NZDT} + {1554559200 43200 0 NZST} + {1569679200 46800 1 NZDT} + {1586008800 43200 0 NZST} + {1601128800 46800 1 NZDT} + {1617458400 43200 0 NZST} + {1632578400 46800 1 NZDT} + {1648908000 43200 0 NZST} + {1664028000 46800 1 NZDT} + {1680357600 43200 0 NZST} + {1695477600 46800 1 NZDT} + {1712412000 43200 0 NZST} + {1727532000 46800 1 NZDT} + {1743861600 43200 0 NZST} + {1758981600 46800 1 NZDT} + {1775311200 43200 0 NZST} + {1790431200 46800 1 NZDT} + {1806760800 43200 0 NZST} + {1821880800 46800 1 NZDT} + {1838210400 43200 0 NZST} + {1853330400 46800 1 NZDT} + {1869660000 43200 0 NZST} + {1885384800 46800 1 NZDT} + {1901714400 43200 0 NZST} + {1916834400 46800 1 NZDT} + {1933164000 43200 0 NZST} + {1948284000 46800 1 NZDT} + {1964613600 43200 0 NZST} + {1979733600 46800 1 NZDT} + {1996063200 43200 0 NZST} + {2011183200 46800 1 NZDT} + {2027512800 43200 0 NZST} + {2042632800 46800 1 NZDT} + {2058962400 43200 0 NZST} + {2074687200 46800 1 NZDT} + {2091016800 43200 0 NZST} + {2106136800 46800 1 NZDT} + {2122466400 43200 0 NZST} + {2137586400 46800 1 NZDT} + {2153916000 43200 0 NZST} + {2169036000 46800 1 NZDT} + {2185365600 43200 0 NZST} + {2200485600 46800 1 NZDT} + {2216815200 43200 0 NZST} + {2232540000 46800 1 NZDT} + {2248869600 43200 0 NZST} + {2263989600 46800 1 NZDT} + {2280319200 43200 0 NZST} + {2295439200 46800 1 NZDT} + {2311768800 43200 0 NZST} + {2326888800 46800 1 NZDT} + {2343218400 43200 0 NZST} + {2358338400 46800 1 NZDT} + {2374668000 43200 0 NZST} + {2389788000 46800 1 NZDT} + {2406117600 43200 0 NZST} + {2421842400 46800 1 NZDT} + {2438172000 43200 0 NZST} + {2453292000 46800 1 NZDT} + {2469621600 43200 0 NZST} + {2484741600 46800 1 NZDT} + {2501071200 43200 0 NZST} + {2516191200 46800 1 NZDT} + {2532520800 43200 0 NZST} + {2547640800 46800 1 NZDT} + {2563970400 43200 0 NZST} + {2579090400 46800 1 NZDT} + {2596024800 43200 0 NZST} + {2611144800 46800 1 NZDT} + {2627474400 43200 0 NZST} + {2642594400 46800 1 NZDT} + {2658924000 43200 0 NZST} + {2674044000 46800 1 NZDT} + {2690373600 43200 0 NZST} + {2705493600 46800 1 NZDT} + {2721823200 43200 0 NZST} + {2736943200 46800 1 NZDT} + {2753272800 43200 0 NZST} + {2768997600 46800 1 NZDT} + {2785327200 43200 0 NZST} + {2800447200 46800 1 NZDT} + {2816776800 43200 0 NZST} + {2831896800 46800 1 NZDT} + {2848226400 43200 0 NZST} + {2863346400 46800 1 NZDT} + {2879676000 43200 0 NZST} + {2894796000 46800 1 NZDT} + {2911125600 43200 0 NZST} + {2926245600 46800 1 NZDT} + {2942575200 43200 0 NZST} + {2958300000 46800 1 NZDT} + {2974629600 43200 0 NZST} + {2989749600 46800 1 NZDT} + {3006079200 43200 0 NZST} + {3021199200 46800 1 NZDT} + {3037528800 43200 0 NZST} + {3052648800 46800 1 NZDT} + {3068978400 43200 0 NZST} + {3084098400 46800 1 NZDT} + {3100428000 43200 0 NZST} + {3116152800 46800 1 NZDT} + {3132482400 43200 0 NZST} + {3147602400 46800 1 NZDT} + {3163932000 43200 0 NZST} + {3179052000 46800 1 NZDT} + {3195381600 43200 0 NZST} + {3210501600 46800 1 NZDT} + {3226831200 43200 0 NZST} + {3241951200 46800 1 NZDT} + {3258280800 43200 0 NZST} + {3273400800 46800 1 NZDT} + {3289730400 43200 0 NZST} + {3305455200 46800 1 NZDT} + {3321784800 43200 0 NZST} + {3336904800 46800 1 NZDT} + {3353234400 43200 0 NZST} + {3368354400 46800 1 NZDT} + {3384684000 43200 0 NZST} + {3399804000 46800 1 NZDT} + {3416133600 43200 0 NZST} + {3431253600 46800 1 NZDT} + {3447583200 43200 0 NZST} + {3462703200 46800 1 NZDT} + {3479637600 43200 0 NZST} + {3494757600 46800 1 NZDT} + {3511087200 43200 0 NZST} + {3526207200 46800 1 NZDT} + {3542536800 43200 0 NZST} + {3557656800 46800 1 NZDT} + {3573986400 43200 0 NZST} + {3589106400 46800 1 NZDT} + {3605436000 43200 0 NZST} + {3620556000 46800 1 NZDT} + {3636885600 43200 0 NZST} + {3652610400 46800 1 NZDT} + {3668940000 43200 0 NZST} + {3684060000 46800 1 NZDT} + {3700389600 43200 0 NZST} + {3715509600 46800 1 NZDT} + {3731839200 43200 0 NZST} + {3746959200 46800 1 NZDT} + {3763288800 43200 0 NZST} + {3778408800 46800 1 NZDT} + {3794738400 43200 0 NZST} + {3809858400 46800 1 NZDT} + {3826188000 43200 0 NZST} + {3841912800 46800 1 NZDT} + {3858242400 43200 0 NZST} + {3873362400 46800 1 NZDT} + {3889692000 43200 0 NZST} + {3904812000 46800 1 NZDT} + {3921141600 43200 0 NZST} + {3936261600 46800 1 NZDT} + {3952591200 43200 0 NZST} + {3967711200 46800 1 NZDT} + {3984040800 43200 0 NZST} + {3999765600 46800 1 NZDT} + {4016095200 43200 0 NZST} + {4031215200 46800 1 NZDT} + {4047544800 43200 0 NZST} + {4062664800 46800 1 NZDT} + {4078994400 43200 0 NZST} + {4094114400 46800 1 NZDT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Bougainville b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Bougainville new file mode 100644 index 00000000..06996f9c --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Bougainville @@ -0,0 +1,10 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Bougainville) { + {-9223372036854775808 37336 0 LMT} + {-2840178136 35312 0 PMMT} + {-2366790512 36000 0 PGT} + {-868010400 32400 0 JST} + {-768906000 36000 0 PGT} + {1419696000 39600 0 BST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Chatham b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Chatham new file mode 100644 index 00000000..94a55129 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Chatham @@ -0,0 +1,258 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Chatham) { + {-9223372036854775808 44028 0 LMT} + {-3192437628 44100 0 CHAST} + {-757426500 45900 0 CHAST} + {152632800 49500 1 CHADT} + {162309600 45900 0 CHAST} + {183477600 49500 1 CHADT} + {194968800 45900 0 CHAST} + {215532000 49500 1 CHADT} + {226418400 45900 0 CHAST} + {246981600 49500 1 CHADT} + {257868000 45900 0 CHAST} + {278431200 49500 1 CHADT} + {289317600 45900 0 CHAST} + {309880800 49500 1 CHADT} + {320767200 45900 0 CHAST} + {341330400 49500 1 CHADT} + {352216800 45900 0 CHAST} + {372780000 49500 1 CHADT} + {384271200 45900 0 CHAST} + {404834400 49500 1 CHADT} + {415720800 45900 0 CHAST} + {436284000 49500 1 CHADT} + {447170400 45900 0 CHAST} + {467733600 49500 1 CHADT} + {478620000 45900 0 CHAST} + {499183200 49500 1 CHADT} + {510069600 45900 0 CHAST} + {530632800 49500 1 CHADT} + {541519200 45900 0 CHAST} + {562082400 49500 1 CHADT} + {573573600 45900 0 CHAST} + {594136800 49500 1 CHADT} + {605023200 45900 0 CHAST} + {623772000 49500 1 CHADT} + {637682400 45900 0 CHAST} + {655221600 49500 1 CHADT} + {669132000 45900 0 CHAST} + {686671200 49500 1 CHADT} + {700581600 45900 0 CHAST} + {718120800 49500 1 CHADT} + {732636000 45900 0 CHAST} + {749570400 49500 1 CHADT} + {764085600 45900 0 CHAST} + {781020000 49500 1 CHADT} + {795535200 45900 0 CHAST} + {812469600 49500 1 CHADT} + {826984800 45900 0 CHAST} + {844524000 49500 1 CHADT} + {858434400 45900 0 CHAST} + {875973600 49500 1 CHADT} + {889884000 45900 0 CHAST} + {907423200 49500 1 CHADT} + {921938400 45900 0 CHAST} + {938872800 49500 1 CHADT} + {953388000 45900 0 CHAST} + {970322400 49500 1 CHADT} + {984837600 45900 0 CHAST} + {1002376800 49500 1 CHADT} + {1016287200 45900 0 CHAST} + {1033826400 49500 1 CHADT} + {1047736800 45900 0 CHAST} + {1065276000 49500 1 CHADT} + {1079791200 45900 0 CHAST} + {1096725600 49500 1 CHADT} + {1111240800 45900 0 CHAST} + {1128175200 49500 1 CHADT} + {1142690400 45900 0 CHAST} + {1159624800 49500 1 CHADT} + {1174140000 45900 0 CHAST} + {1191074400 49500 1 CHADT} + {1207404000 45900 0 CHAST} + {1222524000 49500 1 CHADT} + {1238853600 45900 0 CHAST} + {1253973600 49500 1 CHADT} + {1270303200 45900 0 CHAST} + {1285423200 49500 1 CHADT} + {1301752800 45900 0 CHAST} + {1316872800 49500 1 CHADT} + {1333202400 45900 0 CHAST} + {1348927200 49500 1 CHADT} + {1365256800 45900 0 CHAST} + {1380376800 49500 1 CHADT} + {1396706400 45900 0 CHAST} + {1411826400 49500 1 CHADT} + {1428156000 45900 0 CHAST} + {1443276000 49500 1 CHADT} + {1459605600 45900 0 CHAST} + {1474725600 49500 1 CHADT} + {1491055200 45900 0 CHAST} + {1506175200 49500 1 CHADT} + {1522504800 45900 0 CHAST} + {1538229600 49500 1 CHADT} + {1554559200 45900 0 CHAST} + {1569679200 49500 1 CHADT} + {1586008800 45900 0 CHAST} + {1601128800 49500 1 CHADT} + {1617458400 45900 0 CHAST} + {1632578400 49500 1 CHADT} + {1648908000 45900 0 CHAST} + {1664028000 49500 1 CHADT} + {1680357600 45900 0 CHAST} + {1695477600 49500 1 CHADT} + {1712412000 45900 0 CHAST} + {1727532000 49500 1 CHADT} + {1743861600 45900 0 CHAST} + {1758981600 49500 1 CHADT} + {1775311200 45900 0 CHAST} + {1790431200 49500 1 CHADT} + {1806760800 45900 0 CHAST} + {1821880800 49500 1 CHADT} + {1838210400 45900 0 CHAST} + {1853330400 49500 1 CHADT} + {1869660000 45900 0 CHAST} + {1885384800 49500 1 CHADT} + {1901714400 45900 0 CHAST} + {1916834400 49500 1 CHADT} + {1933164000 45900 0 CHAST} + {1948284000 49500 1 CHADT} + {1964613600 45900 0 CHAST} + {1979733600 49500 1 CHADT} + {1996063200 45900 0 CHAST} + {2011183200 49500 1 CHADT} + {2027512800 45900 0 CHAST} + {2042632800 49500 1 CHADT} + {2058962400 45900 0 CHAST} + {2074687200 49500 1 CHADT} + {2091016800 45900 0 CHAST} + {2106136800 49500 1 CHADT} + {2122466400 45900 0 CHAST} + {2137586400 49500 1 CHADT} + {2153916000 45900 0 CHAST} + {2169036000 49500 1 CHADT} + {2185365600 45900 0 CHAST} + {2200485600 49500 1 CHADT} + {2216815200 45900 0 CHAST} + {2232540000 49500 1 CHADT} + {2248869600 45900 0 CHAST} + {2263989600 49500 1 CHADT} + {2280319200 45900 0 CHAST} + {2295439200 49500 1 CHADT} + {2311768800 45900 0 CHAST} + {2326888800 49500 1 CHADT} + {2343218400 45900 0 CHAST} + {2358338400 49500 1 CHADT} + {2374668000 45900 0 CHAST} + {2389788000 49500 1 CHADT} + {2406117600 45900 0 CHAST} + {2421842400 49500 1 CHADT} + {2438172000 45900 0 CHAST} + {2453292000 49500 1 CHADT} + {2469621600 45900 0 CHAST} + {2484741600 49500 1 CHADT} + {2501071200 45900 0 CHAST} + {2516191200 49500 1 CHADT} + {2532520800 45900 0 CHAST} + {2547640800 49500 1 CHADT} + {2563970400 45900 0 CHAST} + {2579090400 49500 1 CHADT} + {2596024800 45900 0 CHAST} + {2611144800 49500 1 CHADT} + {2627474400 45900 0 CHAST} + {2642594400 49500 1 CHADT} + {2658924000 45900 0 CHAST} + {2674044000 49500 1 CHADT} + {2690373600 45900 0 CHAST} + {2705493600 49500 1 CHADT} + {2721823200 45900 0 CHAST} + {2736943200 49500 1 CHADT} + {2753272800 45900 0 CHAST} + {2768997600 49500 1 CHADT} + {2785327200 45900 0 CHAST} + {2800447200 49500 1 CHADT} + {2816776800 45900 0 CHAST} + {2831896800 49500 1 CHADT} + {2848226400 45900 0 CHAST} + {2863346400 49500 1 CHADT} + {2879676000 45900 0 CHAST} + {2894796000 49500 1 CHADT} + {2911125600 45900 0 CHAST} + {2926245600 49500 1 CHADT} + {2942575200 45900 0 CHAST} + {2958300000 49500 1 CHADT} + {2974629600 45900 0 CHAST} + {2989749600 49500 1 CHADT} + {3006079200 45900 0 CHAST} + {3021199200 49500 1 CHADT} + {3037528800 45900 0 CHAST} + {3052648800 49500 1 CHADT} + {3068978400 45900 0 CHAST} + {3084098400 49500 1 CHADT} + {3100428000 45900 0 CHAST} + {3116152800 49500 1 CHADT} + {3132482400 45900 0 CHAST} + {3147602400 49500 1 CHADT} + {3163932000 45900 0 CHAST} + {3179052000 49500 1 CHADT} + {3195381600 45900 0 CHAST} + {3210501600 49500 1 CHADT} + {3226831200 45900 0 CHAST} + {3241951200 49500 1 CHADT} + {3258280800 45900 0 CHAST} + {3273400800 49500 1 CHADT} + {3289730400 45900 0 CHAST} + {3305455200 49500 1 CHADT} + {3321784800 45900 0 CHAST} + {3336904800 49500 1 CHADT} + {3353234400 45900 0 CHAST} + {3368354400 49500 1 CHADT} + {3384684000 45900 0 CHAST} + {3399804000 49500 1 CHADT} + {3416133600 45900 0 CHAST} + {3431253600 49500 1 CHADT} + {3447583200 45900 0 CHAST} + {3462703200 49500 1 CHADT} + {3479637600 45900 0 CHAST} + {3494757600 49500 1 CHADT} + {3511087200 45900 0 CHAST} + {3526207200 49500 1 CHADT} + {3542536800 45900 0 CHAST} + {3557656800 49500 1 CHADT} + {3573986400 45900 0 CHAST} + {3589106400 49500 1 CHADT} + {3605436000 45900 0 CHAST} + {3620556000 49500 1 CHADT} + {3636885600 45900 0 CHAST} + {3652610400 49500 1 CHADT} + {3668940000 45900 0 CHAST} + {3684060000 49500 1 CHADT} + {3700389600 45900 0 CHAST} + {3715509600 49500 1 CHADT} + {3731839200 45900 0 CHAST} + {3746959200 49500 1 CHADT} + {3763288800 45900 0 CHAST} + {3778408800 49500 1 CHADT} + {3794738400 45900 0 CHAST} + {3809858400 49500 1 CHADT} + {3826188000 45900 0 CHAST} + {3841912800 49500 1 CHADT} + {3858242400 45900 0 CHAST} + {3873362400 49500 1 CHADT} + {3889692000 45900 0 CHAST} + {3904812000 49500 1 CHADT} + {3921141600 45900 0 CHAST} + {3936261600 49500 1 CHADT} + {3952591200 45900 0 CHAST} + {3967711200 49500 1 CHADT} + {3984040800 45900 0 CHAST} + {3999765600 49500 1 CHADT} + {4016095200 45900 0 CHAST} + {4031215200 49500 1 CHADT} + {4047544800 45900 0 CHAST} + {4062664800 49500 1 CHADT} + {4078994400 45900 0 CHAST} + {4094114400 49500 1 CHADT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Chuuk b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Chuuk new file mode 100644 index 00000000..70b14b2c --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Chuuk @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Chuuk) { + {-9223372036854775808 36428 0 LMT} + {-2177489228 36000 0 CHUT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Easter b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Easter new file mode 100644 index 00000000..4b45ba2f --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Easter @@ -0,0 +1,101 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Easter) { + {-9223372036854775808 -26248 0 LMT} + {-2524495352 -26248 0 EMT} + {-1178124152 -25200 0 EAST} + {-36619200 -21600 1 EASST} + {-23922000 -25200 0 EAST} + {-3355200 -21600 1 EASST} + {7527600 -25200 0 EAST} + {24465600 -21600 1 EASST} + {37767600 -25200 0 EAST} + {55915200 -21600 1 EASST} + {69217200 -25200 0 EAST} + {87969600 -21600 1 EASST} + {100666800 -25200 0 EAST} + {118209600 -21600 1 EASST} + {132116400 -25200 0 EAST} + {150868800 -21600 1 EASST} + {163566000 -25200 0 EAST} + {182318400 -21600 1 EASST} + {195620400 -25200 0 EAST} + {213768000 -21600 1 EASST} + {227070000 -25200 0 EAST} + {245217600 -21600 1 EASST} + {258519600 -25200 0 EAST} + {277272000 -21600 1 EASST} + {289969200 -25200 0 EAST} + {308721600 -21600 1 EASST} + {321418800 -25200 0 EAST} + {340171200 -21600 1 EASST} + {353473200 -25200 0 EAST} + {371620800 -21600 1 EASST} + {384922800 -21600 0 EAST} + {403070400 -18000 1 EASST} + {416372400 -21600 0 EAST} + {434520000 -18000 1 EASST} + {447822000 -21600 0 EAST} + {466574400 -18000 1 EASST} + {479271600 -21600 0 EAST} + {498024000 -18000 1 EASST} + {510721200 -21600 0 EAST} + {529473600 -18000 1 EASST} + {545194800 -21600 0 EAST} + {560923200 -18000 1 EASST} + {574225200 -21600 0 EAST} + {592372800 -18000 1 EASST} + {605674800 -21600 0 EAST} + {624427200 -18000 1 EASST} + {637124400 -21600 0 EAST} + {653457600 -18000 1 EASST} + {668574000 -21600 0 EAST} + {687326400 -18000 1 EASST} + {700628400 -21600 0 EAST} + {718776000 -18000 1 EASST} + {732078000 -21600 0 EAST} + {750225600 -18000 1 EASST} + {763527600 -21600 0 EAST} + {781675200 -18000 1 EASST} + {794977200 -21600 0 EAST} + {813729600 -18000 1 EASST} + {826426800 -21600 0 EAST} + {845179200 -18000 1 EASST} + {859690800 -21600 0 EAST} + {876628800 -18000 1 EASST} + {889930800 -21600 0 EAST} + {906868800 -18000 1 EASST} + {923194800 -21600 0 EAST} + {939528000 -18000 1 EASST} + {952830000 -21600 0 EAST} + {971582400 -18000 1 EASST} + {984279600 -21600 0 EAST} + {1003032000 -18000 1 EASST} + {1015729200 -21600 0 EAST} + {1034481600 -18000 1 EASST} + {1047178800 -21600 0 EAST} + {1065931200 -18000 1 EASST} + {1079233200 -21600 0 EAST} + {1097380800 -18000 1 EASST} + {1110682800 -21600 0 EAST} + {1128830400 -18000 1 EASST} + {1142132400 -21600 0 EAST} + {1160884800 -18000 1 EASST} + {1173582000 -21600 0 EAST} + {1192334400 -18000 1 EASST} + {1206846000 -21600 0 EAST} + {1223784000 -18000 1 EASST} + {1237086000 -21600 0 EAST} + {1255233600 -18000 1 EASST} + {1270350000 -21600 0 EAST} + {1286683200 -18000 1 EASST} + {1304823600 -21600 0 EAST} + {1313899200 -18000 1 EASST} + {1335668400 -21600 0 EAST} + {1346558400 -18000 1 EASST} + {1367118000 -21600 0 EAST} + {1378612800 -18000 1 EASST} + {1398567600 -21600 0 EAST} + {1410062400 -18000 1 EASST} + {1430017200 -18000 0 EAST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Efate b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Efate new file mode 100644 index 00000000..18db6de2 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Efate @@ -0,0 +1,26 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Efate) { + {-9223372036854775808 40396 0 LMT} + {-1829387596 39600 0 VUT} + {433256400 43200 1 VUST} + {448977600 39600 0 VUT} + {467298000 43200 1 VUST} + {480427200 39600 0 VUT} + {496760400 43200 1 VUST} + {511876800 39600 0 VUT} + {528210000 43200 1 VUST} + {543931200 39600 0 VUT} + {559659600 43200 1 VUST} + {575380800 39600 0 VUT} + {591109200 43200 1 VUST} + {606830400 39600 0 VUT} + {622558800 43200 1 VUST} + {638280000 39600 0 VUT} + {654008400 43200 1 VUST} + {669729600 39600 0 VUT} + {686062800 43200 1 VUST} + {696340800 39600 0 VUT} + {719931600 43200 1 VUST} + {727790400 39600 0 VUT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Enderbury b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Enderbury new file mode 100644 index 00000000..55784c45 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Enderbury @@ -0,0 +1,8 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Enderbury) { + {-9223372036854775808 -41060 0 LMT} + {-2177411740 -43200 0 PHOT} + {307627200 -39600 0 PHOT} + {788958000 46800 0 PHOT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Fakaofo b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Fakaofo new file mode 100644 index 00000000..6ec98eb5 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Fakaofo @@ -0,0 +1,7 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Fakaofo) { + {-9223372036854775808 -41096 0 LMT} + {-2177411704 -39600 0 TKT} + {1325242800 46800 0 TKT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Fiji b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Fiji new file mode 100644 index 00000000..8f8b12fc --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Fiji @@ -0,0 +1,191 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Fiji) { + {-9223372036854775808 42944 0 LMT} + {-1709985344 43200 0 FJT} + {909842400 46800 1 FJST} + {920124000 43200 0 FJT} + {941896800 46800 1 FJST} + {951573600 43200 0 FJT} + {1259416800 46800 1 FJST} + {1269698400 43200 0 FJT} + {1287842400 46800 1 FJST} + {1299333600 43200 0 FJT} + {1319292000 46800 1 FJST} + {1327154400 43200 0 FJT} + {1350741600 46800 1 FJST} + {1358604000 43200 0 FJT} + {1382796000 46800 1 FJST} + {1390050000 43200 0 FJT} + {1414850400 46800 1 FJST} + {1421503200 43200 0 FJT} + {1446300000 46800 1 FJST} + {1452952800 43200 0 FJT} + {1478354400 46800 1 FJST} + {1484402400 43200 0 FJT} + {1509804000 46800 1 FJST} + {1516456800 43200 0 FJT} + {1541253600 46800 1 FJST} + {1547906400 43200 0 FJT} + {1572703200 46800 1 FJST} + {1579356000 43200 0 FJT} + {1604152800 46800 1 FJST} + {1610805600 43200 0 FJT} + {1636207200 46800 1 FJST} + {1642255200 43200 0 FJT} + {1667656800 46800 1 FJST} + {1673704800 43200 0 FJT} + {1699106400 46800 1 FJST} + {1705759200 43200 0 FJT} + {1730556000 46800 1 FJST} + {1737208800 43200 0 FJT} + {1762005600 46800 1 FJST} + {1768658400 43200 0 FJT} + {1793455200 46800 1 FJST} + {1800108000 43200 0 FJT} + {1825509600 46800 1 FJST} + {1831557600 43200 0 FJT} + {1856959200 46800 1 FJST} + {1863612000 43200 0 FJT} + {1888408800 46800 1 FJST} + {1895061600 43200 0 FJT} + {1919858400 46800 1 FJST} + {1926511200 43200 0 FJT} + {1951308000 46800 1 FJST} + {1957960800 43200 0 FJT} + {1983362400 46800 1 FJST} + {1989410400 43200 0 FJT} + {2014812000 46800 1 FJST} + {2020860000 43200 0 FJT} + {2046261600 46800 1 FJST} + {2052914400 43200 0 FJT} + {2077711200 46800 1 FJST} + {2084364000 43200 0 FJT} + {2109160800 46800 1 FJST} + {2115813600 43200 0 FJT} + {2140610400 46800 1 FJST} + {2147263200 43200 0 FJT} + {2172664800 46800 1 FJST} + {2178712800 43200 0 FJT} + {2204114400 46800 1 FJST} + {2210162400 43200 0 FJT} + {2235564000 46800 1 FJST} + {2242216800 43200 0 FJT} + {2267013600 46800 1 FJST} + {2273666400 43200 0 FJT} + {2298463200 46800 1 FJST} + {2305116000 43200 0 FJT} + {2329912800 46800 1 FJST} + {2336565600 43200 0 FJT} + {2361967200 46800 1 FJST} + {2368015200 43200 0 FJT} + {2393416800 46800 1 FJST} + {2400069600 43200 0 FJT} + {2424866400 46800 1 FJST} + {2431519200 43200 0 FJT} + {2456316000 46800 1 FJST} + {2462968800 43200 0 FJT} + {2487765600 46800 1 FJST} + {2494418400 43200 0 FJT} + {2519820000 46800 1 FJST} + {2525868000 43200 0 FJT} + {2551269600 46800 1 FJST} + {2557317600 43200 0 FJT} + {2582719200 46800 1 FJST} + {2589372000 43200 0 FJT} + {2614168800 46800 1 FJST} + {2620821600 43200 0 FJT} + {2645618400 46800 1 FJST} + {2652271200 43200 0 FJT} + {2677068000 46800 1 FJST} + {2683720800 43200 0 FJT} + {2709122400 46800 1 FJST} + {2715170400 43200 0 FJT} + {2740572000 46800 1 FJST} + {2747224800 43200 0 FJT} + {2772021600 46800 1 FJST} + {2778674400 43200 0 FJT} + {2803471200 46800 1 FJST} + {2810124000 43200 0 FJT} + {2834920800 46800 1 FJST} + {2841573600 43200 0 FJT} + {2866975200 46800 1 FJST} + {2873023200 43200 0 FJT} + {2898424800 46800 1 FJST} + {2904472800 43200 0 FJT} + {2929874400 46800 1 FJST} + {2936527200 43200 0 FJT} + {2961324000 46800 1 FJST} + {2967976800 43200 0 FJT} + {2992773600 46800 1 FJST} + {2999426400 43200 0 FJT} + {3024223200 46800 1 FJST} + {3030876000 43200 0 FJT} + {3056277600 46800 1 FJST} + {3062325600 43200 0 FJT} + {3087727200 46800 1 FJST} + {3093775200 43200 0 FJT} + {3119176800 46800 1 FJST} + {3125829600 43200 0 FJT} + {3150626400 46800 1 FJST} + {3157279200 43200 0 FJT} + {3182076000 46800 1 FJST} + {3188728800 43200 0 FJT} + {3213525600 46800 1 FJST} + {3220178400 43200 0 FJT} + {3245580000 46800 1 FJST} + {3251628000 43200 0 FJT} + {3277029600 46800 1 FJST} + {3283682400 43200 0 FJT} + {3308479200 46800 1 FJST} + {3315132000 43200 0 FJT} + {3339928800 46800 1 FJST} + {3346581600 43200 0 FJT} + {3371378400 46800 1 FJST} + {3378031200 43200 0 FJT} + {3403432800 46800 1 FJST} + {3409480800 43200 0 FJT} + {3434882400 46800 1 FJST} + {3440930400 43200 0 FJT} + {3466332000 46800 1 FJST} + {3472984800 43200 0 FJT} + {3497781600 46800 1 FJST} + {3504434400 43200 0 FJT} + {3529231200 46800 1 FJST} + {3535884000 43200 0 FJT} + {3560680800 46800 1 FJST} + {3567333600 43200 0 FJT} + {3592735200 46800 1 FJST} + {3598783200 43200 0 FJT} + {3624184800 46800 1 FJST} + {3630837600 43200 0 FJT} + {3655634400 46800 1 FJST} + {3662287200 43200 0 FJT} + {3687084000 46800 1 FJST} + {3693736800 43200 0 FJT} + {3718533600 46800 1 FJST} + {3725186400 43200 0 FJT} + {3750588000 46800 1 FJST} + {3756636000 43200 0 FJT} + {3782037600 46800 1 FJST} + {3788085600 43200 0 FJT} + {3813487200 46800 1 FJST} + {3820140000 43200 0 FJT} + {3844936800 46800 1 FJST} + {3851589600 43200 0 FJT} + {3876386400 46800 1 FJST} + {3883039200 43200 0 FJT} + {3907836000 46800 1 FJST} + {3914488800 43200 0 FJT} + {3939890400 46800 1 FJST} + {3945938400 43200 0 FJT} + {3971340000 46800 1 FJST} + {3977388000 43200 0 FJT} + {4002789600 46800 1 FJST} + {4009442400 43200 0 FJT} + {4034239200 46800 1 FJST} + {4040892000 43200 0 FJT} + {4065688800 46800 1 FJST} + {4072341600 43200 0 FJT} + {4097138400 46800 1 FJST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Funafuti b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Funafuti new file mode 100644 index 00000000..b94e4fb2 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Funafuti @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Funafuti) { + {-9223372036854775808 43012 0 LMT} + {-2177495812 43200 0 TVT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Galapagos b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Galapagos new file mode 100644 index 00000000..d8c80e8d --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Galapagos @@ -0,0 +1,7 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Galapagos) { + {-9223372036854775808 -21504 0 LMT} + {-1230746496 -18000 0 ECT} + {504939600 -21600 0 GALT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Gambier b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Gambier new file mode 100644 index 00000000..d69f99a5 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Gambier @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Gambier) { + {-9223372036854775808 -32388 0 LMT} + {-1806678012 -32400 0 GAMT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Guadalcanal b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Guadalcanal new file mode 100644 index 00000000..09a67dd0 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Guadalcanal @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Guadalcanal) { + {-9223372036854775808 38388 0 LMT} + {-1806748788 39600 0 SBT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Guam b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Guam new file mode 100644 index 00000000..79cca80e --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Guam @@ -0,0 +1,8 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Guam) { + {-9223372036854775808 -51660 0 LMT} + {-3944626740 34740 0 LMT} + {-2177487540 36000 0 GST} + {977493600 36000 0 ChST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Honolulu b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Honolulu new file mode 100644 index 00000000..5e70598d --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Honolulu @@ -0,0 +1,11 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Honolulu) { + {-9223372036854775808 -37886 0 LMT} + {-2334101314 -37800 0 HST} + {-1157283000 -34200 1 HDT} + {-1155436200 -37800 0 HST} + {-880198200 -34200 1 HDT} + {-765376200 -37800 0 HST} + {-712150200 -36000 0 HST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Johnston b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Johnston new file mode 100644 index 00000000..21ab39a5 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Johnston @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Pacific/Honolulu)]} { + LoadTimeZoneFile Pacific/Honolulu +} +set TZData(:Pacific/Johnston) $TZData(:Pacific/Honolulu) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Kiritimati b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Kiritimati new file mode 100644 index 00000000..06b695b9 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Kiritimati @@ -0,0 +1,8 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Kiritimati) { + {-9223372036854775808 -37760 0 LMT} + {-2177415040 -38400 0 LINT} + {307622400 -36000 0 LINT} + {788954400 50400 0 LINT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Kosrae b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Kosrae new file mode 100644 index 00000000..a16b19d9 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Kosrae @@ -0,0 +1,8 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Kosrae) { + {-9223372036854775808 39116 0 LMT} + {-2177491916 39600 0 KOST} + {-7988400 43200 0 KOST} + {915105600 39600 0 KOST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Kwajalein b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Kwajalein new file mode 100644 index 00000000..8600b3bb --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Kwajalein @@ -0,0 +1,8 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Kwajalein) { + {-9223372036854775808 40160 0 LMT} + {-2177492960 39600 0 MHT} + {-7988400 -43200 0 KWAT} + {745848000 43200 0 MHT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Majuro b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Majuro new file mode 100644 index 00000000..468baab4 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Majuro @@ -0,0 +1,7 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Majuro) { + {-9223372036854775808 41088 0 LMT} + {-2177493888 39600 0 MHT} + {-7988400 43200 0 MHT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Marquesas b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Marquesas new file mode 100644 index 00000000..9bb508f5 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Marquesas @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Marquesas) { + {-9223372036854775808 -33480 0 LMT} + {-1806676920 -34200 0 MART} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Midway b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Midway new file mode 100644 index 00000000..d044569d --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Midway @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Pacific/Pago_Pago)]} { + LoadTimeZoneFile Pacific/Pago_Pago +} +set TZData(:Pacific/Midway) $TZData(:Pacific/Pago_Pago) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Nauru b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Nauru new file mode 100644 index 00000000..2da1e25e --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Nauru @@ -0,0 +1,9 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Nauru) { + {-9223372036854775808 40060 0 LMT} + {-1545131260 41400 0 NRT} + {-877347000 32400 0 JST} + {-800960400 41400 0 NRT} + {294323400 43200 0 NRT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Niue b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Niue new file mode 100644 index 00000000..cf149fca --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Niue @@ -0,0 +1,8 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Niue) { + {-9223372036854775808 -40780 0 LMT} + {-2177412020 -40800 0 NUT} + {-599575200 -41400 0 NUT} + {276089400 -39600 0 NUT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Norfolk b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Norfolk new file mode 100644 index 00000000..b12ab8cd --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Norfolk @@ -0,0 +1,10 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Norfolk) { + {-9223372036854775808 40312 0 LMT} + {-2177493112 40320 0 NMT} + {-599656320 41400 0 NFT} + {152029800 45000 1 NFST} + {162912600 41400 0 NFT} + {1443882600 39600 0 NFT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Noumea b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Noumea new file mode 100644 index 00000000..db1eeae2 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Noumea @@ -0,0 +1,12 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Noumea) { + {-9223372036854775808 39948 0 LMT} + {-1829387148 39600 0 NCT} + {250002000 43200 1 NCST} + {257342400 39600 0 NCT} + {281451600 43200 1 NCST} + {288878400 39600 0 NCT} + {849366000 43200 1 NCST} + {857228400 39600 0 NCT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Pago_Pago b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Pago_Pago new file mode 100644 index 00000000..ca261d02 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Pago_Pago @@ -0,0 +1,9 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Pago_Pago) { + {-9223372036854775808 45432 0 LMT} + {-2855738232 -40968 0 LMT} + {-1861879032 -39600 0 NST} + {-86878800 -39600 0 BST} + {439038000 -39600 0 SST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Palau b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Palau new file mode 100644 index 00000000..ee0606d4 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Palau @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Palau) { + {-9223372036854775808 32276 0 LMT} + {-2177485076 32400 0 PWT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Pitcairn b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Pitcairn new file mode 100644 index 00000000..d62644e8 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Pitcairn @@ -0,0 +1,7 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Pitcairn) { + {-9223372036854775808 -31220 0 LMT} + {-2177421580 -30600 0 PNT} + {893665800 -28800 0 PST} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Pohnpei b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Pohnpei new file mode 100644 index 00000000..58978da9 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Pohnpei @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Pohnpei) { + {-9223372036854775808 37972 0 LMT} + {-2177490772 39600 0 PONT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Ponape b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Ponape new file mode 100644 index 00000000..89644f7f --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Ponape @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Pacific/Pohnpei)]} { + LoadTimeZoneFile Pacific/Pohnpei +} +set TZData(:Pacific/Ponape) $TZData(:Pacific/Pohnpei) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Port_Moresby b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Port_Moresby new file mode 100644 index 00000000..65eb533a --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Port_Moresby @@ -0,0 +1,7 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Port_Moresby) { + {-9223372036854775808 35320 0 LMT} + {-2840176120 35312 0 PMMT} + {-2366790512 36000 0 PGT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Rarotonga b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Rarotonga new file mode 100644 index 00000000..a4ecf8d3 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Rarotonga @@ -0,0 +1,32 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Rarotonga) { + {-9223372036854775808 -38344 0 LMT} + {-2177414456 -37800 0 CKT} + {279714600 -34200 0 CKHST} + {289387800 -36000 0 CKT} + {309952800 -34200 1 CKHST} + {320837400 -36000 0 CKT} + {341402400 -34200 1 CKHST} + {352287000 -36000 0 CKT} + {372852000 -34200 1 CKHST} + {384341400 -36000 0 CKT} + {404906400 -34200 1 CKHST} + {415791000 -36000 0 CKT} + {436356000 -34200 1 CKHST} + {447240600 -36000 0 CKT} + {467805600 -34200 1 CKHST} + {478690200 -36000 0 CKT} + {499255200 -34200 1 CKHST} + {510139800 -36000 0 CKT} + {530704800 -34200 1 CKHST} + {541589400 -36000 0 CKT} + {562154400 -34200 1 CKHST} + {573643800 -36000 0 CKT} + {594208800 -34200 1 CKHST} + {605093400 -36000 0 CKT} + {625658400 -34200 1 CKHST} + {636543000 -36000 0 CKT} + {657108000 -34200 1 CKHST} + {667992600 -36000 0 CKT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Saipan b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Saipan new file mode 100644 index 00000000..4e769cd5 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Saipan @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Pacific/Guam)]} { + LoadTimeZoneFile Pacific/Guam +} +set TZData(:Pacific/Saipan) $TZData(:Pacific/Guam) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Samoa b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Samoa new file mode 100644 index 00000000..686eb34d --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Samoa @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Pacific/Pago_Pago)]} { + LoadTimeZoneFile Pacific/Pago_Pago +} +set TZData(:Pacific/Samoa) $TZData(:Pacific/Pago_Pago) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Tahiti b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Tahiti new file mode 100644 index 00000000..f7392231 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Tahiti @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Tahiti) { + {-9223372036854775808 -35896 0 LMT} + {-1806674504 -36000 0 TAHT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Tarawa b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Tarawa new file mode 100644 index 00000000..2dab5a27 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Tarawa @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Tarawa) { + {-9223372036854775808 41524 0 LMT} + {-2177494324 43200 0 GILT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Tongatapu b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Tongatapu new file mode 100644 index 00000000..da9f8577 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Tongatapu @@ -0,0 +1,14 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Tongatapu) { + {-9223372036854775808 44360 0 LMT} + {-2177497160 44400 0 TOT} + {-915193200 46800 0 TOT} + {915102000 46800 0 TOT} + {939214800 50400 1 TOST} + {953384400 46800 0 TOT} + {973342800 50400 1 TOST} + {980596800 46800 0 TOT} + {1004792400 50400 1 TOST} + {1012046400 46800 0 TOT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Truk b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Truk new file mode 100644 index 00000000..c9b18949 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Truk @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Pacific/Chuuk)]} { + LoadTimeZoneFile Pacific/Chuuk +} +set TZData(:Pacific/Truk) $TZData(:Pacific/Chuuk) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Wake b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Wake new file mode 100644 index 00000000..5afedf51 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Wake @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Wake) { + {-9223372036854775808 39988 0 LMT} + {-2177492788 43200 0 WAKT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Wallis b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Wallis new file mode 100644 index 00000000..7bdd964e --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Wallis @@ -0,0 +1,6 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:Pacific/Wallis) { + {-9223372036854775808 44120 0 LMT} + {-2177496920 43200 0 WFT} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Yap b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Yap new file mode 100644 index 00000000..49310306 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Pacific/Yap @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Pacific/Chuuk)]} { + LoadTimeZoneFile Pacific/Chuuk +} +set TZData(:Pacific/Yap) $TZData(:Pacific/Chuuk) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Poland b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Poland new file mode 100644 index 00000000..bd240284 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Poland @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Europe/Warsaw)]} { + LoadTimeZoneFile Europe/Warsaw +} +set TZData(:Poland) $TZData(:Europe/Warsaw) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Portugal b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Portugal new file mode 100644 index 00000000..d1ffd9f2 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Portugal @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Europe/Lisbon)]} { + LoadTimeZoneFile Europe/Lisbon +} +set TZData(:Portugal) $TZData(:Europe/Lisbon) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/ROC b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/ROC new file mode 100644 index 00000000..5dd196d0 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/ROC @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Asia/Taipei)]} { + LoadTimeZoneFile Asia/Taipei +} +set TZData(:ROC) $TZData(:Asia/Taipei) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/ROK b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/ROK new file mode 100644 index 00000000..1162ce40 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/ROK @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Asia/Seoul)]} { + LoadTimeZoneFile Asia/Seoul +} +set TZData(:ROK) $TZData(:Asia/Seoul) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Singapore b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Singapore new file mode 100644 index 00000000..1584b35b --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Singapore @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Asia/Singapore)]} { + LoadTimeZoneFile Asia/Singapore +} +set TZData(:Singapore) $TZData(:Asia/Singapore) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/SystemV/AST4 b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/SystemV/AST4 new file mode 100644 index 00000000..eced0d2d --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/SystemV/AST4 @@ -0,0 +1,5 @@ +# created by ../tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Puerto_Rico)]} { + LoadTimeZoneFile America/Puerto_Rico +} +set TZData(:SystemV/AST4) $TZData(:America/Puerto_Rico) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/SystemV/AST4ADT b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/SystemV/AST4ADT new file mode 100644 index 00000000..c24308f6 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/SystemV/AST4ADT @@ -0,0 +1,5 @@ +# created by ../tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Halifax)]} { + LoadTimeZoneFile America/Halifax +} +set TZData(:SystemV/AST4ADT) $TZData(:America/Halifax) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/SystemV/CST6 b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/SystemV/CST6 new file mode 100644 index 00000000..d46c015b --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/SystemV/CST6 @@ -0,0 +1,5 @@ +# created by ../tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Regina)]} { + LoadTimeZoneFile America/Regina +} +set TZData(:SystemV/CST6) $TZData(:America/Regina) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/SystemV/CST6CDT b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/SystemV/CST6CDT new file mode 100644 index 00000000..234af894 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/SystemV/CST6CDT @@ -0,0 +1,5 @@ +# created by ../tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Chicago)]} { + LoadTimeZoneFile America/Chicago +} +set TZData(:SystemV/CST6CDT) $TZData(:America/Chicago) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/SystemV/EST5 b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/SystemV/EST5 new file mode 100644 index 00000000..52818c1e --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/SystemV/EST5 @@ -0,0 +1,5 @@ +# created by ../tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Indianapolis)]} { + LoadTimeZoneFile America/Indianapolis +} +set TZData(:SystemV/EST5) $TZData(:America/Indianapolis) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/SystemV/EST5EDT b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/SystemV/EST5EDT new file mode 100644 index 00000000..6cf27433 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/SystemV/EST5EDT @@ -0,0 +1,5 @@ +# created by ../tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/New_York)]} { + LoadTimeZoneFile America/New_York +} +set TZData(:SystemV/EST5EDT) $TZData(:America/New_York) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/SystemV/HST10 b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/SystemV/HST10 new file mode 100644 index 00000000..a4316afb --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/SystemV/HST10 @@ -0,0 +1,5 @@ +# created by ../tools/tclZIC.tcl - do not edit +if {![info exists TZData(Pacific/Honolulu)]} { + LoadTimeZoneFile Pacific/Honolulu +} +set TZData(:SystemV/HST10) $TZData(:Pacific/Honolulu) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/SystemV/MST7 b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/SystemV/MST7 new file mode 100644 index 00000000..e67a781c --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/SystemV/MST7 @@ -0,0 +1,5 @@ +# created by ../tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Phoenix)]} { + LoadTimeZoneFile America/Phoenix +} +set TZData(:SystemV/MST7) $TZData(:America/Phoenix) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/SystemV/MST7MDT b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/SystemV/MST7MDT new file mode 100644 index 00000000..fda5bf1d --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/SystemV/MST7MDT @@ -0,0 +1,5 @@ +# created by ../tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Denver)]} { + LoadTimeZoneFile America/Denver +} +set TZData(:SystemV/MST7MDT) $TZData(:America/Denver) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/SystemV/PST8 b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/SystemV/PST8 new file mode 100644 index 00000000..8e30bb84 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/SystemV/PST8 @@ -0,0 +1,5 @@ +# created by ../tools/tclZIC.tcl - do not edit +if {![info exists TZData(Pacific/Pitcairn)]} { + LoadTimeZoneFile Pacific/Pitcairn +} +set TZData(:SystemV/PST8) $TZData(:Pacific/Pitcairn) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/SystemV/PST8PDT b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/SystemV/PST8PDT new file mode 100644 index 00000000..8281a9af --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/SystemV/PST8PDT @@ -0,0 +1,5 @@ +# created by ../tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Los_Angeles)]} { + LoadTimeZoneFile America/Los_Angeles +} +set TZData(:SystemV/PST8PDT) $TZData(:America/Los_Angeles) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/SystemV/YST9 b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/SystemV/YST9 new file mode 100644 index 00000000..32d37173 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/SystemV/YST9 @@ -0,0 +1,5 @@ +# created by ../tools/tclZIC.tcl - do not edit +if {![info exists TZData(Pacific/Gambier)]} { + LoadTimeZoneFile Pacific/Gambier +} +set TZData(:SystemV/YST9) $TZData(:Pacific/Gambier) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/SystemV/YST9YDT b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/SystemV/YST9YDT new file mode 100644 index 00000000..fba405f0 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/SystemV/YST9YDT @@ -0,0 +1,5 @@ +# created by ../tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Anchorage)]} { + LoadTimeZoneFile America/Anchorage +} +set TZData(:SystemV/YST9YDT) $TZData(:America/Anchorage) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Turkey b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Turkey new file mode 100644 index 00000000..e20a7a5e --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Turkey @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Europe/Istanbul)]} { + LoadTimeZoneFile Europe/Istanbul +} +set TZData(:Turkey) $TZData(:Europe/Istanbul) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/UCT b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/UCT new file mode 100644 index 00000000..84493281 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/UCT @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Etc/UCT)]} { + LoadTimeZoneFile Etc/UCT +} +set TZData(:UCT) $TZData(:Etc/UCT) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/US/Alaska b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/US/Alaska new file mode 100644 index 00000000..69a38997 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/US/Alaska @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Anchorage)]} { + LoadTimeZoneFile America/Anchorage +} +set TZData(:US/Alaska) $TZData(:America/Anchorage) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/US/Aleutian b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/US/Aleutian new file mode 100644 index 00000000..024e70bd --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/US/Aleutian @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Adak)]} { + LoadTimeZoneFile America/Adak +} +set TZData(:US/Aleutian) $TZData(:America/Adak) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/US/Arizona b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/US/Arizona new file mode 100644 index 00000000..8eaa9619 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/US/Arizona @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Phoenix)]} { + LoadTimeZoneFile America/Phoenix +} +set TZData(:US/Arizona) $TZData(:America/Phoenix) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/US/Central b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/US/Central new file mode 100644 index 00000000..2aab66e0 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/US/Central @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Chicago)]} { + LoadTimeZoneFile America/Chicago +} +set TZData(:US/Central) $TZData(:America/Chicago) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/US/East-Indiana b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/US/East-Indiana new file mode 100644 index 00000000..2035a060 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/US/East-Indiana @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Indiana/Indianapolis)]} { + LoadTimeZoneFile America/Indiana/Indianapolis +} +set TZData(:US/East-Indiana) $TZData(:America/Indiana/Indianapolis) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/US/Eastern b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/US/Eastern new file mode 100644 index 00000000..3cf2651f --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/US/Eastern @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/New_York)]} { + LoadTimeZoneFile America/New_York +} +set TZData(:US/Eastern) $TZData(:America/New_York) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/US/Hawaii b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/US/Hawaii new file mode 100644 index 00000000..6d1af655 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/US/Hawaii @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Pacific/Honolulu)]} { + LoadTimeZoneFile Pacific/Honolulu +} +set TZData(:US/Hawaii) $TZData(:Pacific/Honolulu) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/US/Indiana-Starke b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/US/Indiana-Starke new file mode 100644 index 00000000..6ffe0e2f --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/US/Indiana-Starke @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Indiana/Knox)]} { + LoadTimeZoneFile America/Indiana/Knox +} +set TZData(:US/Indiana-Starke) $TZData(:America/Indiana/Knox) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/US/Michigan b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/US/Michigan new file mode 100644 index 00000000..b15035c7 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/US/Michigan @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Detroit)]} { + LoadTimeZoneFile America/Detroit +} +set TZData(:US/Michigan) $TZData(:America/Detroit) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/US/Mountain b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/US/Mountain new file mode 100644 index 00000000..b54235fa --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/US/Mountain @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Denver)]} { + LoadTimeZoneFile America/Denver +} +set TZData(:US/Mountain) $TZData(:America/Denver) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/US/Pacific b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/US/Pacific new file mode 100644 index 00000000..72322159 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/US/Pacific @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Los_Angeles)]} { + LoadTimeZoneFile America/Los_Angeles +} +set TZData(:US/Pacific) $TZData(:America/Los_Angeles) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/US/Pacific-New b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/US/Pacific-New new file mode 100644 index 00000000..2eb30f85 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/US/Pacific-New @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(America/Los_Angeles)]} { + LoadTimeZoneFile America/Los_Angeles +} +set TZData(:US/Pacific-New) $TZData(:America/Los_Angeles) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/US/Samoa b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/US/Samoa new file mode 100644 index 00000000..ad86b4fc --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/US/Samoa @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Pacific/Pago_Pago)]} { + LoadTimeZoneFile Pacific/Pago_Pago +} +set TZData(:US/Samoa) $TZData(:Pacific/Pago_Pago) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/UTC b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/UTC new file mode 100644 index 00000000..6d04d96e --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/UTC @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Etc/UTC)]} { + LoadTimeZoneFile Etc/UTC +} +set TZData(:UTC) $TZData(:Etc/UTC) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Universal b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Universal new file mode 100644 index 00000000..4a9ed5eb --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Universal @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Etc/UTC)]} { + LoadTimeZoneFile Etc/UTC +} +set TZData(:Universal) $TZData(:Etc/UTC) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/W-SU b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/W-SU new file mode 100644 index 00000000..7e1f613a --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/W-SU @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Europe/Moscow)]} { + LoadTimeZoneFile Europe/Moscow +} +set TZData(:W-SU) $TZData(:Europe/Moscow) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/WET b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/WET new file mode 100644 index 00000000..60366a3c --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/WET @@ -0,0 +1,251 @@ +# created by tools/tclZIC.tcl - do not edit + +set TZData(:WET) { + {-9223372036854775808 0 0 WET} + {228877200 3600 1 WEST} + {243997200 0 0 WET} + {260326800 3600 1 WEST} + {276051600 0 0 WET} + {291776400 3600 1 WEST} + {307501200 0 0 WET} + {323830800 3600 1 WEST} + {338950800 0 0 WET} + {354675600 3600 1 WEST} + {370400400 0 0 WET} + {386125200 3600 1 WEST} + {401850000 0 0 WET} + {417574800 3600 1 WEST} + {433299600 0 0 WET} + {449024400 3600 1 WEST} + {465354000 0 0 WET} + {481078800 3600 1 WEST} + {496803600 0 0 WET} + {512528400 3600 1 WEST} + {528253200 0 0 WET} + {543978000 3600 1 WEST} + {559702800 0 0 WET} + {575427600 3600 1 WEST} + {591152400 0 0 WET} + {606877200 3600 1 WEST} + {622602000 0 0 WET} + {638326800 3600 1 WEST} + {654656400 0 0 WET} + {670381200 3600 1 WEST} + {686106000 0 0 WET} + {701830800 3600 1 WEST} + {717555600 0 0 WET} + {733280400 3600 1 WEST} + {749005200 0 0 WET} + {764730000 3600 1 WEST} + {780454800 0 0 WET} + {796179600 3600 1 WEST} + {811904400 0 0 WET} + {828234000 3600 1 WEST} + {846378000 0 0 WET} + {859683600 3600 1 WEST} + {877827600 0 0 WET} + {891133200 3600 1 WEST} + {909277200 0 0 WET} + {922582800 3600 1 WEST} + {941331600 0 0 WET} + {954032400 3600 1 WEST} + {972781200 0 0 WET} + {985482000 3600 1 WEST} + {1004230800 0 0 WET} + {1017536400 3600 1 WEST} + {1035680400 0 0 WET} + {1048986000 3600 1 WEST} + {1067130000 0 0 WET} + {1080435600 3600 1 WEST} + {1099184400 0 0 WET} + {1111885200 3600 1 WEST} + {1130634000 0 0 WET} + {1143334800 3600 1 WEST} + {1162083600 0 0 WET} + {1174784400 3600 1 WEST} + {1193533200 0 0 WET} + {1206838800 3600 1 WEST} + {1224982800 0 0 WET} + {1238288400 3600 1 WEST} + {1256432400 0 0 WET} + {1269738000 3600 1 WEST} + {1288486800 0 0 WET} + {1301187600 3600 1 WEST} + {1319936400 0 0 WET} + {1332637200 3600 1 WEST} + {1351386000 0 0 WET} + {1364691600 3600 1 WEST} + {1382835600 0 0 WET} + {1396141200 3600 1 WEST} + {1414285200 0 0 WET} + {1427590800 3600 1 WEST} + {1445734800 0 0 WET} + {1459040400 3600 1 WEST} + {1477789200 0 0 WET} + {1490490000 3600 1 WEST} + {1509238800 0 0 WET} + {1521939600 3600 1 WEST} + {1540688400 0 0 WET} + {1553994000 3600 1 WEST} + {1572138000 0 0 WET} + {1585443600 3600 1 WEST} + {1603587600 0 0 WET} + {1616893200 3600 1 WEST} + {1635642000 0 0 WET} + {1648342800 3600 1 WEST} + {1667091600 0 0 WET} + {1679792400 3600 1 WEST} + {1698541200 0 0 WET} + {1711846800 3600 1 WEST} + {1729990800 0 0 WET} + {1743296400 3600 1 WEST} + {1761440400 0 0 WET} + {1774746000 3600 1 WEST} + {1792890000 0 0 WET} + {1806195600 3600 1 WEST} + {1824944400 0 0 WET} + {1837645200 3600 1 WEST} + {1856394000 0 0 WET} + {1869094800 3600 1 WEST} + {1887843600 0 0 WET} + {1901149200 3600 1 WEST} + {1919293200 0 0 WET} + {1932598800 3600 1 WEST} + {1950742800 0 0 WET} + {1964048400 3600 1 WEST} + {1982797200 0 0 WET} + {1995498000 3600 1 WEST} + {2014246800 0 0 WET} + {2026947600 3600 1 WEST} + {2045696400 0 0 WET} + {2058397200 3600 1 WEST} + {2077146000 0 0 WET} + {2090451600 3600 1 WEST} + {2108595600 0 0 WET} + {2121901200 3600 1 WEST} + {2140045200 0 0 WET} + {2153350800 3600 1 WEST} + {2172099600 0 0 WET} + {2184800400 3600 1 WEST} + {2203549200 0 0 WET} + {2216250000 3600 1 WEST} + {2234998800 0 0 WET} + {2248304400 3600 1 WEST} + {2266448400 0 0 WET} + {2279754000 3600 1 WEST} + {2297898000 0 0 WET} + {2311203600 3600 1 WEST} + {2329347600 0 0 WET} + {2342653200 3600 1 WEST} + {2361402000 0 0 WET} + {2374102800 3600 1 WEST} + {2392851600 0 0 WET} + {2405552400 3600 1 WEST} + {2424301200 0 0 WET} + {2437606800 3600 1 WEST} + {2455750800 0 0 WET} + {2469056400 3600 1 WEST} + {2487200400 0 0 WET} + {2500506000 3600 1 WEST} + {2519254800 0 0 WET} + {2531955600 3600 1 WEST} + {2550704400 0 0 WET} + {2563405200 3600 1 WEST} + {2582154000 0 0 WET} + {2595459600 3600 1 WEST} + {2613603600 0 0 WET} + {2626909200 3600 1 WEST} + {2645053200 0 0 WET} + {2658358800 3600 1 WEST} + {2676502800 0 0 WET} + {2689808400 3600 1 WEST} + {2708557200 0 0 WET} + {2721258000 3600 1 WEST} + {2740006800 0 0 WET} + {2752707600 3600 1 WEST} + {2771456400 0 0 WET} + {2784762000 3600 1 WEST} + {2802906000 0 0 WET} + {2816211600 3600 1 WEST} + {2834355600 0 0 WET} + {2847661200 3600 1 WEST} + {2866410000 0 0 WET} + {2879110800 3600 1 WEST} + {2897859600 0 0 WET} + {2910560400 3600 1 WEST} + {2929309200 0 0 WET} + {2942010000 3600 1 WEST} + {2960758800 0 0 WET} + {2974064400 3600 1 WEST} + {2992208400 0 0 WET} + {3005514000 3600 1 WEST} + {3023658000 0 0 WET} + {3036963600 3600 1 WEST} + {3055712400 0 0 WET} + {3068413200 3600 1 WEST} + {3087162000 0 0 WET} + {3099862800 3600 1 WEST} + {3118611600 0 0 WET} + {3131917200 3600 1 WEST} + {3150061200 0 0 WET} + {3163366800 3600 1 WEST} + {3181510800 0 0 WET} + {3194816400 3600 1 WEST} + {3212960400 0 0 WET} + {3226266000 3600 1 WEST} + {3245014800 0 0 WET} + {3257715600 3600 1 WEST} + {3276464400 0 0 WET} + {3289165200 3600 1 WEST} + {3307914000 0 0 WET} + {3321219600 3600 1 WEST} + {3339363600 0 0 WET} + {3352669200 3600 1 WEST} + {3370813200 0 0 WET} + {3384118800 3600 1 WEST} + {3402867600 0 0 WET} + {3415568400 3600 1 WEST} + {3434317200 0 0 WET} + {3447018000 3600 1 WEST} + {3465766800 0 0 WET} + {3479072400 3600 1 WEST} + {3497216400 0 0 WET} + {3510522000 3600 1 WEST} + {3528666000 0 0 WET} + {3541971600 3600 1 WEST} + {3560115600 0 0 WET} + {3573421200 3600 1 WEST} + {3592170000 0 0 WET} + {3604870800 3600 1 WEST} + {3623619600 0 0 WET} + {3636320400 3600 1 WEST} + {3655069200 0 0 WET} + {3668374800 3600 1 WEST} + {3686518800 0 0 WET} + {3699824400 3600 1 WEST} + {3717968400 0 0 WET} + {3731274000 3600 1 WEST} + {3750022800 0 0 WET} + {3762723600 3600 1 WEST} + {3781472400 0 0 WET} + {3794173200 3600 1 WEST} + {3812922000 0 0 WET} + {3825622800 3600 1 WEST} + {3844371600 0 0 WET} + {3857677200 3600 1 WEST} + {3875821200 0 0 WET} + {3889126800 3600 1 WEST} + {3907270800 0 0 WET} + {3920576400 3600 1 WEST} + {3939325200 0 0 WET} + {3952026000 3600 1 WEST} + {3970774800 0 0 WET} + {3983475600 3600 1 WEST} + {4002224400 0 0 WET} + {4015530000 3600 1 WEST} + {4033674000 0 0 WET} + {4046979600 3600 1 WEST} + {4065123600 0 0 WET} + {4078429200 3600 1 WEST} + {4096573200 0 0 WET} +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Zulu b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Zulu new file mode 100644 index 00000000..e9748e49 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/tzdata/Zulu @@ -0,0 +1,5 @@ +# created by tools/tclZIC.tcl - do not edit +if {![info exists TZData(Etc/UTC)]} { + LoadTimeZoneFile Etc/UTC +} +set TZData(:Zulu) $TZData(:Etc/UTC) diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl/word.tcl b/extensions/fablabchemnitz/inkstitch/bin/tcl/word.tcl new file mode 100644 index 00000000..b8f34a5e --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tcl/word.tcl @@ -0,0 +1,144 @@ +# word.tcl -- +# +# This file defines various procedures for computing word boundaries in +# strings. This file is primarily needed so Tk text and entry widgets behave +# properly for different platforms. +# +# Copyright (c) 1996 by Sun Microsystems, Inc. +# Copyright (c) 1998 by Scritpics Corporation. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# The following variables are used to determine which characters are +# interpreted as white space. + +if {$::tcl_platform(platform) eq "windows"} { + # Windows style - any but a unicode space char + set ::tcl_wordchars {\S} + set ::tcl_nonwordchars {\s} +} else { + # Motif style - any unicode word char (number, letter, or underscore) + set ::tcl_wordchars {\w} + set ::tcl_nonwordchars {\W} +} + +# Arrange for caches of the real matcher REs to be kept, which enables the REs +# themselves to be cached for greater performance (and somewhat greater +# clarity too). + +namespace eval ::tcl { + variable WordBreakRE + array set WordBreakRE {} + + proc UpdateWordBreakREs args { + # Ignores the arguments + global tcl_wordchars tcl_nonwordchars + variable WordBreakRE + + # To keep the RE strings short... + set letter $tcl_wordchars + set space $tcl_nonwordchars + + set WordBreakRE(after) "$letter$space|$space$letter" + set WordBreakRE(before) "^.*($letter$space|$space$letter)" + set WordBreakRE(end) "$space*$letter+$space" + set WordBreakRE(next) "$letter*$space+$letter" + set WordBreakRE(previous) "$space*($letter+)$space*\$" + } + + # Initialize the cache + UpdateWordBreakREs + trace add variable ::tcl_wordchars write ::tcl::UpdateWordBreakREs + trace add variable ::tcl_nonwordchars write ::tcl::UpdateWordBreakREs +} + +# tcl_wordBreakAfter -- +# +# This procedure returns the index of the first word boundary after the +# starting point in the given string, or -1 if there are no more boundaries in +# the given string. The index returned refers to the first character of the +# pair that comprises a boundary. +# +# Arguments: +# str - String to search. +# start - Index into string specifying starting point. + +proc tcl_wordBreakAfter {str start} { + variable ::tcl::WordBreakRE + set result {-1 -1} + regexp -indices -start $start -- $WordBreakRE(after) $str result + return [lindex $result 1] +} + +# tcl_wordBreakBefore -- +# +# This procedure returns the index of the first word boundary before the +# starting point in the given string, or -1 if there are no more boundaries in +# the given string. The index returned refers to the second character of the +# pair that comprises a boundary. +# +# Arguments: +# str - String to search. +# start - Index into string specifying starting point. + +proc tcl_wordBreakBefore {str start} { + variable ::tcl::WordBreakRE + set result {-1 -1} + regexp -indices -- $WordBreakRE(before) [string range $str 0 $start] result + return [lindex $result 1] +} + +# tcl_endOfWord -- +# +# This procedure returns the index of the first end-of-word location after a +# starting index in the given string. An end-of-word location is defined to be +# the first whitespace character following the first non-whitespace character +# after the starting point. Returns -1 if there are no more words after the +# starting point. +# +# Arguments: +# str - String to search. +# start - Index into string specifying starting point. + +proc tcl_endOfWord {str start} { + variable ::tcl::WordBreakRE + set result {-1 -1} + regexp -indices -start $start -- $WordBreakRE(end) $str result + return [lindex $result 1] +} + +# tcl_startOfNextWord -- +# +# This procedure returns the index of the first start-of-word location after a +# starting index in the given string. A start-of-word location is defined to +# be a non-whitespace character following a whitespace character. Returns -1 +# if there are no more start-of-word locations after the starting point. +# +# Arguments: +# str - String to search. +# start - Index into string specifying starting point. + +proc tcl_startOfNextWord {str start} { + variable ::tcl::WordBreakRE + set result {-1 -1} + regexp -indices -start $start -- $WordBreakRE(next) $str result + return [lindex $result 1] +} + +# tcl_startOfPreviousWord -- +# +# This procedure returns the index of the first start-of-word location before +# a starting index in the given string. +# +# Arguments: +# str - String to search. +# start - Index into string specifying starting point. + +proc tcl_startOfPreviousWord {str start} { + variable ::tcl::WordBreakRE + set word {-1 -1} + regexp -indices -- $WordBreakRE(previous) [string range $str 0 $start-1] \ + result word + return [lindex $word 0] +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tcl85.dll b/extensions/fablabchemnitz/inkstitch/bin/tcl85.dll new file mode 100644 index 00000000..da2bc357 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/tcl85.dll differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/tk/bgerror.tcl b/extensions/fablabchemnitz/inkstitch/bin/tk/bgerror.tcl new file mode 100644 index 00000000..f46ab4c6 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tk/bgerror.tcl @@ -0,0 +1,259 @@ +# bgerror.tcl -- +# +# Implementation of the bgerror procedure. It posts a dialog box with +# the error message and gives the user a chance to see a more detailed +# stack trace, and possible do something more interesting with that +# trace (like save it to a log). This is adapted from work done by +# Donal K. Fellows. +# +# Copyright (c) 1998-2000 by Ajuba Solutions. +# Copyright (c) 2007 by ActiveState Software Inc. +# Copyright (c) 2007 Daniel A. Steffen + +namespace eval ::tk::dialog::error { + namespace import -force ::tk::msgcat::* + namespace export bgerror + option add *ErrorDialog.function.text [mc "Save To Log"] \ + widgetDefault + option add *ErrorDialog.function.command [namespace code SaveToLog] + option add *ErrorDialog*Label.font TkCaptionFont widgetDefault + if {[tk windowingsystem] eq "aqua"} { + option add *ErrorDialog*background systemAlertBackgroundActive \ + widgetDefault + option add *ErrorDialog*info.text.background white widgetDefault + option add *ErrorDialog*Button.highlightBackground \ + systemAlertBackgroundActive widgetDefault + } +} + +proc ::tk::dialog::error::Return {} { + variable button + + .bgerrorDialog.ok configure -state active -relief sunken + update idletasks + after 100 + set button 0 +} + +proc ::tk::dialog::error::Details {} { + set w .bgerrorDialog + set caption [option get $w.function text {}] + set command [option get $w.function command {}] + if { ($caption eq "") || ($command eq "") } { + grid forget $w.function + } + lappend command [$w.top.info.text get 1.0 end-1c] + $w.function configure -text $caption -command $command + grid $w.top.info - -sticky nsew -padx 3m -pady 3m +} + +proc ::tk::dialog::error::SaveToLog {text} { + if { $::tcl_platform(platform) eq "windows" } { + set allFiles *.* + } else { + set allFiles * + } + set types [list \ + [list [mc "Log Files"] .log] \ + [list [mc "Text Files"] .txt] \ + [list [mc "All Files"] $allFiles] \ + ] + set filename [tk_getSaveFile -title [mc "Select Log File"] \ + -filetypes $types -defaultextension .log -parent .bgerrorDialog] + if {![string length $filename]} { + return + } + set f [open $filename w] + puts -nonewline $f $text + close $f +} + +proc ::tk::dialog::error::Destroy {w} { + if {$w eq ".bgerrorDialog"} { + variable button + set button -1 + } +} + +# ::tk::dialog::error::bgerror -- +# This is the default version of bgerror. +# It tries to execute tkerror, if that fails it posts a dialog box containing +# the error message and gives the user a chance to ask to see a stack +# trace. +# Arguments: +# err - The error message. + +proc ::tk::dialog::error::bgerror err { + global errorInfo tcl_platform + variable button + + set info $errorInfo + + set ret [catch {::tkerror $err} msg]; + if {$ret != 1} {return -code $ret $msg} + + # Ok the application's tkerror either failed or was not found + # we use the default dialog then : + set windowingsystem [tk windowingsystem] + if {$windowingsystem eq "aqua"} { + set ok [mc Ok] + } else { + set ok [mc OK] + } + + # Truncate the message if it is too wide (>maxLine characters) or + # too tall (>4 lines). Truncation occurs at the first point at + # which one of those conditions is met. + set displayedErr "" + set lines 0 + set maxLine 45 + foreach line [split $err \n] { + if { [string length $line] > $maxLine } { + append displayedErr "[string range $line 0 [expr {$maxLine-3}]]..." + break + } + if { $lines > 4 } { + append displayedErr "..." + break + } else { + append displayedErr "${line}\n" + } + incr lines + } + + set title [mc "Application Error"] + set text [mc "Error: %1\$s" $displayedErr] + set buttons [list ok $ok dismiss [mc "Skip Messages"] \ + function [mc "Details >>"]] + + # 1. Create the top-level window and divide it into top + # and bottom parts. + + set dlg .bgerrorDialog + destroy $dlg + toplevel $dlg -class ErrorDialog + wm withdraw $dlg + wm title $dlg $title + wm iconname $dlg ErrorDialog + wm protocol $dlg WM_DELETE_WINDOW { } + + if {$windowingsystem eq "aqua"} { + ::tk::unsupported::MacWindowStyle style $dlg moveableAlert {} + } elseif {$windowingsystem eq "x11"} { + wm attributes $dlg -type dialog + } + + frame $dlg.bot + frame $dlg.top + if {$windowingsystem eq "x11"} { + $dlg.bot configure -relief raised -bd 1 + $dlg.top configure -relief raised -bd 1 + } + pack $dlg.bot -side bottom -fill both + pack $dlg.top -side top -fill both -expand 1 + + set W [frame $dlg.top.info] + text $W.text -setgrid true -height 10 -wrap char \ + -yscrollcommand [list $W.scroll set] + if {$windowingsystem ne "aqua"} { + $W.text configure -width 40 + } + + scrollbar $W.scroll -command [list $W.text yview] + pack $W.scroll -side right -fill y + pack $W.text -side left -expand yes -fill both + $W.text insert 0.0 "$err\n$info" + $W.text mark set insert 0.0 + bind $W.text { focus %W } + $W.text configure -state disabled + + # 2. Fill the top part with bitmap and message + + # Max-width of message is the width of the screen... + set wrapwidth [winfo screenwidth $dlg] + # ...minus the width of the icon, padding and a fudge factor for + # the window manager decorations and aesthetics. + set wrapwidth [expr {$wrapwidth-60-[winfo pixels $dlg 9m]}] + label $dlg.msg -justify left -text $text -wraplength $wrapwidth + if {$windowingsystem eq "aqua"} { + # On the Macintosh, use the stop bitmap + label $dlg.bitmap -bitmap stop + } else { + # On other platforms, make the error icon + canvas $dlg.bitmap -width 32 -height 32 -highlightthickness 0 + $dlg.bitmap create oval 0 0 31 31 -fill red -outline black + $dlg.bitmap create line 9 9 23 23 -fill white -width 4 + $dlg.bitmap create line 9 23 23 9 -fill white -width 4 + } + grid $dlg.bitmap $dlg.msg -in $dlg.top -row 0 -padx 3m -pady 3m + grid configure $dlg.msg -sticky nsw -padx {0 3m} + grid rowconfigure $dlg.top 1 -weight 1 + grid columnconfigure $dlg.top 1 -weight 1 + + # 3. Create a row of buttons at the bottom of the dialog. + + set i 0 + foreach {name caption} $buttons { + button $dlg.$name -text $caption -default normal \ + -command [namespace code [list set button $i]] + grid $dlg.$name -in $dlg.bot -column $i -row 0 -sticky ew -padx 10 + grid columnconfigure $dlg.bot $i -weight 1 + # We boost the size of some Mac buttons for l&f + if {$windowingsystem eq "aqua"} { + if {($name eq "ok") || ($name eq "dismiss")} { + grid columnconfigure $dlg.bot $i -minsize 90 + } + grid configure $dlg.$name -pady 7 + } + incr i + } + # The "OK" button is the default for this dialog. + $dlg.ok configure -default active + + bind $dlg [namespace code Return] + bind $dlg [namespace code [list Destroy %W]] + $dlg.function configure -command [namespace code Details] + + # 6. Withdraw the window, then update all the geometry information + # so we know how big it wants to be, then center the window in the + # display (Motif style) and de-iconify it. + + ::tk::PlaceWindow $dlg + + # 7. Ensure that we are topmost. + + raise $dlg + if {[tk windowingsystem] eq "win32"} { + # Place it topmost if we aren't at the top of the stacking + # order to ensure that it's seen + if {[lindex [wm stackorder .] end] ne "$dlg"} { + wm attributes $dlg -topmost 1 + } + } + + # 8. Set a grab and claim the focus too. + + ::tk::SetFocusGrab $dlg $dlg.ok + + # 9. Wait for the user to respond, then restore the focus and + # return the index of the selected button. Restore the focus + # before deleting the window, since otherwise the window manager + # may take the focus away so we can't redirect it. Finally, + # restore any grab that was in effect. + + vwait [namespace which -variable button] + set copy $button; # Save a copy... + + ::tk::RestoreFocusGrab $dlg $dlg.ok destroy + + if {$copy == 1} { + return -code break + } +} + +namespace eval :: { + # Fool the indexer + proc bgerror err {} + rename bgerror {} + namespace import ::tk::dialog::error::bgerror +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tk/button.tcl b/extensions/fablabchemnitz/inkstitch/bin/tk/button.tcl new file mode 100644 index 00000000..75378cc2 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tk/button.tcl @@ -0,0 +1,757 @@ +# button.tcl -- +# +# This file defines the default bindings for Tk label, button, +# checkbutton, and radiobutton widgets and provides procedures +# that help in implementing those bindings. +# +# Copyright (c) 1992-1994 The Regents of the University of California. +# Copyright (c) 1994-1996 Sun Microsystems, Inc. +# Copyright (c) 2002 ActiveState Corporation. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. +# + +#------------------------------------------------------------------------- +# The code below creates the default class bindings for buttons. +#------------------------------------------------------------------------- + +if {[tk windowingsystem] eq "aqua"} { + bind Radiobutton { + tk::ButtonEnter %W + } + bind Radiobutton <1> { + tk::ButtonDown %W + } + bind Radiobutton { + tk::ButtonUp %W + } + bind Checkbutton { + tk::ButtonEnter %W + } + bind Checkbutton <1> { + tk::ButtonDown %W + } + bind Checkbutton { + tk::ButtonUp %W + } + bind Checkbutton { + tk::ButtonLeave %W + } +} +if {"win32" eq [tk windowingsystem]} { + bind Checkbutton { + tk::CheckRadioInvoke %W select + } + bind Checkbutton { + tk::CheckRadioInvoke %W select + } + bind Checkbutton { + tk::CheckRadioInvoke %W deselect + } + bind Checkbutton <1> { + tk::CheckRadioDown %W + } + bind Checkbutton { + tk::ButtonUp %W + } + bind Checkbutton { + tk::CheckRadioEnter %W + } + bind Checkbutton { + tk::ButtonLeave %W + } + + bind Radiobutton <1> { + tk::CheckRadioDown %W + } + bind Radiobutton { + tk::ButtonUp %W + } + bind Radiobutton { + tk::CheckRadioEnter %W + } +} +if {"x11" eq [tk windowingsystem]} { + bind Checkbutton { + if {!$tk_strictMotif} { + tk::CheckInvoke %W + } + } + bind Radiobutton { + if {!$tk_strictMotif} { + tk::CheckRadioInvoke %W + } + } + bind Checkbutton <1> { + tk::CheckInvoke %W + } + bind Radiobutton <1> { + tk::CheckRadioInvoke %W + } + bind Checkbutton { + tk::CheckEnter %W + } + bind Radiobutton { + tk::ButtonEnter %W + } + bind Checkbutton { + tk::CheckLeave %W + } +} + +bind Button { + tk::ButtonInvoke %W +} +bind Checkbutton { + tk::CheckRadioInvoke %W +} +bind Radiobutton { + tk::CheckRadioInvoke %W +} +bind Button <> { + tk::ButtonInvoke %W +} +bind Checkbutton <> { + tk::CheckRadioInvoke %W +} +bind Radiobutton <> { + tk::CheckRadioInvoke %W +} + +bind Button {} +bind Button { + tk::ButtonEnter %W +} +bind Button { + tk::ButtonLeave %W +} +bind Button <1> { + tk::ButtonDown %W +} +bind Button { + tk::ButtonUp %W +} + +bind Checkbutton {} + +bind Radiobutton {} +bind Radiobutton { + tk::ButtonLeave %W +} + +if {"win32" eq [tk windowingsystem]} { + +######################### +# Windows implementation +######################### + +# ::tk::ButtonEnter -- +# The procedure below is invoked when the mouse pointer enters a +# button widget. It records the button we're in and changes the +# state of the button to active unless the button is disabled. +# +# Arguments: +# w - The name of the widget. + +proc ::tk::ButtonEnter w { + variable ::tk::Priv + if {[$w cget -state] ne "disabled"} { + + # If the mouse button is down, set the relief to sunken on entry. + # Overwise, if there's an -overrelief value, set the relief to that. + + set Priv($w,relief) [$w cget -relief] + if {$Priv(buttonWindow) eq $w} { + $w configure -relief sunken -state active + set Priv($w,prelief) sunken + } elseif {[set over [$w cget -overrelief]] ne ""} { + $w configure -relief $over + set Priv($w,prelief) $over + } + } + set Priv(window) $w +} + +# ::tk::ButtonLeave -- +# The procedure below is invoked when the mouse pointer leaves a +# button widget. It changes the state of the button back to inactive. +# Restore any modified relief too. +# +# Arguments: +# w - The name of the widget. + +proc ::tk::ButtonLeave w { + variable ::tk::Priv + if {[$w cget -state] ne "disabled"} { + $w configure -state normal + } + + # Restore the original button relief if it was changed by Tk. + # That is signaled by the existence of Priv($w,prelief). + + if {[info exists Priv($w,relief)]} { + if {[info exists Priv($w,prelief)] && \ + $Priv($w,prelief) eq [$w cget -relief]} { + $w configure -relief $Priv($w,relief) + } + unset -nocomplain Priv($w,relief) Priv($w,prelief) + } + + set Priv(window) "" +} + +# ::tk::ButtonDown -- +# The procedure below is invoked when the mouse button is pressed in +# a button widget. It records the fact that the mouse is in the button, +# saves the button's relief so it can be restored later, and changes +# the relief to sunken. +# +# Arguments: +# w - The name of the widget. + +proc ::tk::ButtonDown w { + variable ::tk::Priv + + # Only save the button's relief if it does not yet exist. If there + # is an overrelief setting, Priv($w,relief) will already have been set, + # and the current value of the -relief option will be incorrect. + + if {![info exists Priv($w,relief)]} { + set Priv($w,relief) [$w cget -relief] + } + + if {[$w cget -state] ne "disabled"} { + set Priv(buttonWindow) $w + $w configure -relief sunken -state active + set Priv($w,prelief) sunken + + # If this button has a repeatdelay set up, get it going with an after + after cancel $Priv(afterId) + set delay [$w cget -repeatdelay] + set Priv(repeated) 0 + if {$delay > 0} { + set Priv(afterId) [after $delay [list tk::ButtonAutoInvoke $w]] + } + } +} + +# ::tk::ButtonUp -- +# The procedure below is invoked when the mouse button is released +# in a button widget. It restores the button's relief and invokes +# the command as long as the mouse hasn't left the button. +# +# Arguments: +# w - The name of the widget. + +proc ::tk::ButtonUp w { + variable ::tk::Priv + if {$Priv(buttonWindow) eq $w} { + set Priv(buttonWindow) "" + + # Restore the button's relief if it was cached. + + if {[info exists Priv($w,relief)]} { + if {[info exists Priv($w,prelief)] && \ + $Priv($w,prelief) eq [$w cget -relief]} { + $w configure -relief $Priv($w,relief) + } + unset -nocomplain Priv($w,relief) Priv($w,prelief) + } + + # Clean up the after event from the auto-repeater + after cancel $Priv(afterId) + + if {$Priv(window) eq $w && [$w cget -state] ne "disabled"} { + $w configure -state normal + + # Only invoke the command if it wasn't already invoked by the + # auto-repeater functionality + if { $Priv(repeated) == 0 } { + uplevel #0 [list $w invoke] + } + } + } +} + +# ::tk::CheckRadioEnter -- +# The procedure below is invoked when the mouse pointer enters a +# checkbutton or radiobutton widget. It records the button we're in +# and changes the state of the button to active unless the button is +# disabled. +# +# Arguments: +# w - The name of the widget. + +proc ::tk::CheckRadioEnter w { + variable ::tk::Priv + if {[$w cget -state] ne "disabled"} { + if {$Priv(buttonWindow) eq $w} { + $w configure -state active + } + if {[set over [$w cget -overrelief]] ne ""} { + set Priv($w,relief) [$w cget -relief] + set Priv($w,prelief) $over + $w configure -relief $over + } + } + set Priv(window) $w +} + +# ::tk::CheckRadioDown -- +# The procedure below is invoked when the mouse button is pressed in +# a button widget. It records the fact that the mouse is in the button, +# saves the button's relief so it can be restored later, and changes +# the relief to sunken. +# +# Arguments: +# w - The name of the widget. + +proc ::tk::CheckRadioDown w { + variable ::tk::Priv + if {![info exists Priv($w,relief)]} { + set Priv($w,relief) [$w cget -relief] + } + if {[$w cget -state] ne "disabled"} { + set Priv(buttonWindow) $w + set Priv(repeated) 0 + $w configure -state active + } +} + +} + +if {"x11" eq [tk windowingsystem]} { + +##################### +# Unix implementation +##################### + +# ::tk::ButtonEnter -- +# The procedure below is invoked when the mouse pointer enters a +# button widget. It records the button we're in and changes the +# state of the button to active unless the button is disabled. +# +# Arguments: +# w - The name of the widget. + +proc ::tk::ButtonEnter {w} { + variable ::tk::Priv + if {[$w cget -state] ne "disabled"} { + # On unix the state is active just with mouse-over + $w configure -state active + + # If the mouse button is down, set the relief to sunken on entry. + # Overwise, if there's an -overrelief value, set the relief to that. + + set Priv($w,relief) [$w cget -relief] + if {$Priv(buttonWindow) eq $w} { + $w configure -relief sunken + set Priv($w,prelief) sunken + } elseif {[set over [$w cget -overrelief]] ne ""} { + $w configure -relief $over + set Priv($w,prelief) $over + } + } + set Priv(window) $w +} + +# ::tk::ButtonLeave -- +# The procedure below is invoked when the mouse pointer leaves a +# button widget. It changes the state of the button back to inactive. +# Restore any modified relief too. +# +# Arguments: +# w - The name of the widget. + +proc ::tk::ButtonLeave w { + variable ::tk::Priv + if {[$w cget -state] ne "disabled"} { + $w configure -state normal + } + + # Restore the original button relief if it was changed by Tk. + # That is signaled by the existence of Priv($w,prelief). + + if {[info exists Priv($w,relief)]} { + if {[info exists Priv($w,prelief)] && \ + $Priv($w,prelief) eq [$w cget -relief]} { + $w configure -relief $Priv($w,relief) + } + unset -nocomplain Priv($w,relief) Priv($w,prelief) + } + + set Priv(window) "" +} + +# ::tk::ButtonDown -- +# The procedure below is invoked when the mouse button is pressed in +# a button widget. It records the fact that the mouse is in the button, +# saves the button's relief so it can be restored later, and changes +# the relief to sunken. +# +# Arguments: +# w - The name of the widget. + +proc ::tk::ButtonDown w { + variable ::tk::Priv + + # Only save the button's relief if it does not yet exist. If there + # is an overrelief setting, Priv($w,relief) will already have been set, + # and the current value of the -relief option will be incorrect. + + if {![info exists Priv($w,relief)]} { + set Priv($w,relief) [$w cget -relief] + } + + if {[$w cget -state] ne "disabled"} { + set Priv(buttonWindow) $w + $w configure -relief sunken + set Priv($w,prelief) sunken + + # If this button has a repeatdelay set up, get it going with an after + after cancel $Priv(afterId) + set delay [$w cget -repeatdelay] + set Priv(repeated) 0 + if {$delay > 0} { + set Priv(afterId) [after $delay [list tk::ButtonAutoInvoke $w]] + } + } +} + +# ::tk::ButtonUp -- +# The procedure below is invoked when the mouse button is released +# in a button widget. It restores the button's relief and invokes +# the command as long as the mouse hasn't left the button. +# +# Arguments: +# w - The name of the widget. + +proc ::tk::ButtonUp w { + variable ::tk::Priv + if {$w eq $Priv(buttonWindow)} { + set Priv(buttonWindow) "" + + # Restore the button's relief if it was cached. + + if {[info exists Priv($w,relief)]} { + if {[info exists Priv($w,prelief)] && \ + $Priv($w,prelief) eq [$w cget -relief]} { + $w configure -relief $Priv($w,relief) + } + unset -nocomplain Priv($w,relief) Priv($w,prelief) + } + + # Clean up the after event from the auto-repeater + after cancel $Priv(afterId) + + if {$Priv(window) eq $w && [$w cget -state] ne "disabled"} { + # Only invoke the command if it wasn't already invoked by the + # auto-repeater functionality + if { $Priv(repeated) == 0 } { + uplevel #0 [list $w invoke] + } + } + } +} + +} + +if {[tk windowingsystem] eq "aqua"} { + +#################### +# Mac implementation +#################### + +# ::tk::ButtonEnter -- +# The procedure below is invoked when the mouse pointer enters a +# button widget. It records the button we're in and changes the +# state of the button to active unless the button is disabled. +# +# Arguments: +# w - The name of the widget. + +proc ::tk::ButtonEnter {w} { + variable ::tk::Priv + if {[$w cget -state] ne "disabled"} { + + # If there's an -overrelief value, set the relief to that. + + if {$Priv(buttonWindow) eq $w} { + $w configure -state active + } elseif {[set over [$w cget -overrelief]] ne ""} { + set Priv($w,relief) [$w cget -relief] + set Priv($w,prelief) $over + $w configure -relief $over + } + } + set Priv(window) $w +} + +# ::tk::ButtonLeave -- +# The procedure below is invoked when the mouse pointer leaves a +# button widget. It changes the state of the button back to +# inactive. If we're leaving the button window with a mouse button +# pressed (Priv(buttonWindow) == $w), restore the relief of the +# button too. +# +# Arguments: +# w - The name of the widget. + +proc ::tk::ButtonLeave w { + variable ::tk::Priv + if {$w eq $Priv(buttonWindow)} { + $w configure -state normal + } + + # Restore the original button relief if it was changed by Tk. + # That is signaled by the existence of Priv($w,prelief). + + if {[info exists Priv($w,relief)]} { + if {[info exists Priv($w,prelief)] && \ + $Priv($w,prelief) eq [$w cget -relief]} { + $w configure -relief $Priv($w,relief) + } + unset -nocomplain Priv($w,relief) Priv($w,prelief) + } + + set Priv(window) "" +} + +# ::tk::ButtonDown -- +# The procedure below is invoked when the mouse button is pressed in +# a button widget. It records the fact that the mouse is in the button, +# saves the button's relief so it can be restored later, and changes +# the relief to sunken. +# +# Arguments: +# w - The name of the widget. + +proc ::tk::ButtonDown w { + variable ::tk::Priv + + if {[$w cget -state] ne "disabled"} { + set Priv(buttonWindow) $w + $w configure -state active + + # If this button has a repeatdelay set up, get it going with an after + after cancel $Priv(afterId) + set Priv(repeated) 0 + if { ![catch {$w cget -repeatdelay} delay] } { + if {$delay > 0} { + set Priv(afterId) [after $delay [list tk::ButtonAutoInvoke $w]] + } + } + } +} + +# ::tk::ButtonUp -- +# The procedure below is invoked when the mouse button is released +# in a button widget. It restores the button's relief and invokes +# the command as long as the mouse hasn't left the button. +# +# Arguments: +# w - The name of the widget. + +proc ::tk::ButtonUp w { + variable ::tk::Priv + if {$Priv(buttonWindow) eq $w} { + set Priv(buttonWindow) "" + $w configure -state normal + + # Restore the button's relief if it was cached. + + if {[info exists Priv($w,relief)]} { + if {[info exists Priv($w,prelief)] && \ + $Priv($w,prelief) eq [$w cget -relief]} { + $w configure -relief $Priv($w,relief) + } + unset -nocomplain Priv($w,relief) Priv($w,prelief) + } + + # Clean up the after event from the auto-repeater + after cancel $Priv(afterId) + + if {$Priv(window) eq $w && [$w cget -state] ne "disabled"} { + # Only invoke the command if it wasn't already invoked by the + # auto-repeater functionality + if { $Priv(repeated) == 0 } { + uplevel #0 [list $w invoke] + } + } + } +} + +} + +################## +# Shared routines +################## + +# ::tk::ButtonInvoke -- +# The procedure below is called when a button is invoked through +# the keyboard. It simulate a press of the button via the mouse. +# +# Arguments: +# w - The name of the widget. + +proc ::tk::ButtonInvoke w { + if {[$w cget -state] ne "disabled"} { + set oldRelief [$w cget -relief] + set oldState [$w cget -state] + $w configure -state active -relief sunken + update idletasks + after 100 + $w configure -state $oldState -relief $oldRelief + uplevel #0 [list $w invoke] + } +} + +# ::tk::ButtonAutoInvoke -- +# +# Invoke an auto-repeating button, and set it up to continue to repeat. +# +# Arguments: +# w button to invoke. +# +# Results: +# None. +# +# Side effects: +# May create an after event to call ::tk::ButtonAutoInvoke. + +proc ::tk::ButtonAutoInvoke {w} { + variable ::tk::Priv + after cancel $Priv(afterId) + set delay [$w cget -repeatinterval] + if {$Priv(window) eq $w} { + incr Priv(repeated) + uplevel #0 [list $w invoke] + } + if {$delay > 0} { + set Priv(afterId) [after $delay [list tk::ButtonAutoInvoke $w]] + } +} + +# ::tk::CheckRadioInvoke -- +# The procedure below is invoked when the mouse button is pressed in +# a checkbutton or radiobutton widget, or when the widget is invoked +# through the keyboard. It invokes the widget if it +# isn't disabled. +# +# Arguments: +# w - The name of the widget. +# cmd - The subcommand to invoke (one of invoke, select, or deselect). + +proc ::tk::CheckRadioInvoke {w {cmd invoke}} { + if {[$w cget -state] ne "disabled"} { + uplevel #0 [list $w $cmd] + } +} + +# Special versions of the handlers for checkbuttons on Unix that do the magic +# to make things work right when the checkbutton indicator is hidden; +# radiobuttons don't need this complexity. + +# ::tk::CheckInvoke -- +# The procedure below invokes the checkbutton, like ButtonInvoke, but handles +# what to do when the checkbutton indicator is missing. Only used on Unix. +# +# Arguments: +# w - The name of the widget. + +proc ::tk::CheckInvoke {w} { + variable ::tk::Priv + if {[$w cget -state] ne "disabled"} { + # Additional logic to switch the "selected" colors around if necessary + # (when we're indicator-less). + + if {![$w cget -indicatoron] && [info exist Priv($w,selectcolor)]} { + if {[$w cget -selectcolor] eq $Priv($w,aselectcolor)} { + $w configure -selectcolor $Priv($w,selectcolor) + } else { + $w configure -selectcolor $Priv($w,aselectcolor) + } + } + uplevel #0 [list $w invoke] + } +} + +# ::tk::CheckEnter -- +# The procedure below enters the checkbutton, like ButtonEnter, but handles +# what to do when the checkbutton indicator is missing. Only used on Unix. +# +# Arguments: +# w - The name of the widget. + +proc ::tk::CheckEnter {w} { + variable ::tk::Priv + if {[$w cget -state] ne "disabled"} { + # On unix the state is active just with mouse-over + $w configure -state active + + # If the mouse button is down, set the relief to sunken on entry. + # Overwise, if there's an -overrelief value, set the relief to that. + + set Priv($w,relief) [$w cget -relief] + if {$Priv(buttonWindow) eq $w} { + $w configure -relief sunken + set Priv($w,prelief) sunken + } elseif {[set over [$w cget -overrelief]] ne ""} { + $w configure -relief $over + set Priv($w,prelief) $over + } + + # Compute what the "selected and active" color should be. + + if {![$w cget -indicatoron] && [$w cget -selectcolor] ne ""} { + set Priv($w,selectcolor) [$w cget -selectcolor] + lassign [winfo rgb $w [$w cget -selectcolor]] r1 g1 b1 + lassign [winfo rgb $w [$w cget -activebackground]] r2 g2 b2 + set Priv($w,aselectcolor) \ + [format "#%04x%04x%04x" [expr {($r1+$r2)/2}] \ + [expr {($g1+$g2)/2}] [expr {($b1+$b2)/2}]] + # use uplevel to work with other var resolvers + if {[uplevel #0 [list set [$w cget -variable]]] + eq [$w cget -onvalue]} { + $w configure -selectcolor $Priv($w,aselectcolor) + } + } + } + set Priv(window) $w +} + +# ::tk::CheckLeave -- +# The procedure below leaves the checkbutton, like ButtonLeave, but handles +# what to do when the checkbutton indicator is missing. Only used on Unix. +# +# Arguments: +# w - The name of the widget. + +proc ::tk::CheckLeave {w} { + variable ::tk::Priv + if {[$w cget -state] ne "disabled"} { + $w configure -state normal + } + + # Restore the original button "selected" color; assume that the user + # wasn't monkeying around with things too much. + + if {![$w cget -indicatoron] && [info exist Priv($w,selectcolor)]} { + $w configure -selectcolor $Priv($w,selectcolor) + } + unset -nocomplain Priv($w,selectcolor) Priv($w,aselectcolor) + + # Restore the original button relief if it was changed by Tk. That is + # signaled by the existence of Priv($w,prelief). + + if {[info exists Priv($w,relief)]} { + if {[info exists Priv($w,prelief)] && \ + $Priv($w,prelief) eq [$w cget -relief]} { + $w configure -relief $Priv($w,relief) + } + unset -nocomplain Priv($w,relief) Priv($w,prelief) + } + + set Priv(window) "" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tk/choosedir.tcl b/extensions/fablabchemnitz/inkstitch/bin/tk/choosedir.tcl new file mode 100644 index 00000000..00dca9d8 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tk/choosedir.tcl @@ -0,0 +1,308 @@ +# choosedir.tcl -- +# +# Choose directory dialog implementation for Unix/Mac. +# +# Copyright (c) 1998-2000 by Scriptics Corporation. +# All rights reserved. + +# Make sure the tk::dialog namespace, in which all dialogs should live, exists +namespace eval ::tk::dialog {} +namespace eval ::tk::dialog::file {} + +# Make the chooseDir namespace inside the dialog namespace +namespace eval ::tk::dialog::file::chooseDir { + namespace import -force ::tk::msgcat::* +} + +# ::tk::dialog::file::chooseDir:: -- +# +# Implements the TK directory selection dialog. +# +# Arguments: +# args Options parsed by the procedure. +# +proc ::tk::dialog::file::chooseDir:: {args} { + variable ::tk::Priv + set dataName __tk_choosedir + upvar ::tk::dialog::file::$dataName data + Config $dataName $args + + if {$data(-parent) eq "."} { + set w .$dataName + } else { + set w $data(-parent).$dataName + } + + # (re)create the dialog box if necessary + # + if {![winfo exists $w]} { + ::tk::dialog::file::Create $w TkChooseDir + } elseif {[winfo class $w] ne "TkChooseDir"} { + destroy $w + ::tk::dialog::file::Create $w TkChooseDir + } else { + set data(dirMenuBtn) $w.contents.f1.menu + set data(dirMenu) $w.contents.f1.menu.menu + set data(upBtn) $w.contents.f1.up + set data(icons) $w.contents.icons + set data(ent) $w.contents.f2.ent + set data(okBtn) $w.contents.f2.ok + set data(cancelBtn) $w.contents.f2.cancel + set data(hiddenBtn) $w.contents.f2.hidden + } + if {$::tk::dialog::file::showHiddenBtn} { + $data(hiddenBtn) configure -state normal + grid $data(hiddenBtn) + } else { + $data(hiddenBtn) configure -state disabled + grid remove $data(hiddenBtn) + } + + # When using -mustexist, manage the OK button state for validity + $data(okBtn) configure -state normal + if {$data(-mustexist)} { + $data(ent) configure -validate key \ + -validatecommand [list ::tk::dialog::file::chooseDir::IsOK? $w %P] + } else { + $data(ent) configure -validate none + } + + # Dialog boxes should be transient with respect to their parent, + # so that they will always stay on top of their parent window. However, + # some window managers will create the window as withdrawn if the parent + # window is withdrawn or iconified. Combined with the grab we put on the + # window, this can hang the entire application. Therefore we only make + # the dialog transient if the parent is viewable. + + if {[winfo viewable [winfo toplevel $data(-parent)]] } { + wm transient $w $data(-parent) + } + + trace add variable data(selectPath) write \ + [list ::tk::dialog::file::SetPath $w] + $data(dirMenuBtn) configure \ + -textvariable ::tk::dialog::file::${dataName}(selectPath) + + set data(filter) "*" + set data(previousEntryText) "" + ::tk::dialog::file::UpdateWhenIdle $w + + # Withdraw the window, then update all the geometry information + # so we know how big it wants to be, then center the window in the + # display (Motif style) and de-iconify it. + + ::tk::PlaceWindow $w widget $data(-parent) + wm title $w $data(-title) + + # Set a grab and claim the focus too. + + ::tk::SetFocusGrab $w $data(ent) + $data(ent) delete 0 end + $data(ent) insert 0 $data(selectPath) + $data(ent) selection range 0 end + $data(ent) icursor end + + # Wait for the user to respond, then restore the focus and + # return the index of the selected button. Restore the focus + # before deleting the window, since otherwise the window manager + # may take the focus away so we can't redirect it. Finally, + # restore any grab that was in effect. + + vwait ::tk::Priv(selectFilePath) + + ::tk::RestoreFocusGrab $w $data(ent) withdraw + + # Cleanup traces on selectPath variable + # + + foreach trace [trace info variable data(selectPath)] { + trace remove variable data(selectPath) [lindex $trace 0] [lindex $trace 1] + } + $data(dirMenuBtn) configure -textvariable {} + + # Return value to user + # + + return $Priv(selectFilePath) +} + +# ::tk::dialog::file::chooseDir::Config -- +# +# Configures the Tk choosedir dialog according to the argument list +# +proc ::tk::dialog::file::chooseDir::Config {dataName argList} { + upvar ::tk::dialog::file::$dataName data + + # 0: Delete all variable that were set on data(selectPath) the + # last time the file dialog is used. The traces may cause troubles + # if the dialog is now used with a different -parent option. + # + foreach trace [trace info variable data(selectPath)] { + trace remove variable data(selectPath) [lindex $trace 0] [lindex $trace 1] + } + + # 1: the configuration specs + # + set specs { + {-mustexist "" "" 0} + {-initialdir "" "" ""} + {-parent "" "" "."} + {-title "" "" ""} + } + + # 2: default values depending on the type of the dialog + # + if {![info exists data(selectPath)]} { + # first time the dialog has been popped up + set data(selectPath) [pwd] + } + + # 3: parse the arguments + # + tclParseConfigSpec ::tk::dialog::file::$dataName $specs "" $argList + + if {$data(-title) eq ""} { + set data(-title) "[mc "Choose Directory"]" + } + + # Stub out the -multiple value for the dialog; it doesn't make sense for + # choose directory dialogs, but we have to have something there because we + # share so much code with the file dialogs. + set data(-multiple) 0 + + # 4: set the default directory and selection according to the -initial + # settings + # + if {$data(-initialdir) ne ""} { + # Ensure that initialdir is an absolute path name. + if {[file isdirectory $data(-initialdir)]} { + set old [pwd] + cd $data(-initialdir) + set data(selectPath) [pwd] + cd $old + } else { + set data(selectPath) [pwd] + } + } + + if {![winfo exists $data(-parent)]} { + error "bad window path name \"$data(-parent)\"" + } +} + +# Gets called when user presses Return in the "Selection" entry or presses OK. +# +proc ::tk::dialog::file::chooseDir::OkCmd {w} { + upvar ::tk::dialog::file::[winfo name $w] data + + # This is the brains behind selecting non-existant directories. Here's + # the flowchart: + # 1. If the icon list has a selection, join it with the current dir, + # and return that value. + # 1a. If the icon list does not have a selection ... + # 2. If the entry is empty, do nothing. + # 3. If the entry contains an invalid directory, then... + # 3a. If the value is the same as last time through here, end dialog. + # 3b. If the value is different than last time, save it and return. + # 4. If entry contains a valid directory, then... + # 4a. If the value is the same as the current directory, end dialog. + # 4b. If the value is different from the current directory, change to + # that directory. + + set selection [tk::IconList_CurSelection $data(icons)] + if {[llength $selection] != 0} { + set iconText [tk::IconList_Get $data(icons) [lindex $selection 0]] + set iconText [file join $data(selectPath) $iconText] + Done $w $iconText + } else { + set text [$data(ent) get] + if {$text eq ""} { + return + } + set text [file join {*}[file split [string trim $text]]] + if {![file exists $text] || ![file isdirectory $text]} { + # Entry contains an invalid directory. If it's the same as the + # last time they came through here, reset the saved value and end + # the dialog. Otherwise, save the value (so we can do this test + # next time). + if {$text eq $data(previousEntryText)} { + set data(previousEntryText) "" + Done $w $text + } else { + set data(previousEntryText) $text + } + } else { + # Entry contains a valid directory. If it is the same as the + # current directory, end the dialog. Otherwise, change to that + # directory. + if {$text eq $data(selectPath)} { + Done $w $text + } else { + set data(selectPath) $text + } + } + } + return +} + +# Change state of OK button to match -mustexist correctness of entry +# +proc ::tk::dialog::file::chooseDir::IsOK? {w text} { + upvar ::tk::dialog::file::[winfo name $w] data + + set ok [file isdirectory $text] + $data(okBtn) configure -state [expr {$ok ? "normal" : "disabled"}] + + # always return 1 + return 1 +} + +proc ::tk::dialog::file::chooseDir::DblClick {w} { + upvar ::tk::dialog::file::[winfo name $w] data + set selection [tk::IconList_CurSelection $data(icons)] + if {[llength $selection] != 0} { + set filenameFragment \ + [tk::IconList_Get $data(icons) [lindex $selection 0]] + set file $data(selectPath) + if {[file isdirectory $file]} { + ::tk::dialog::file::ListInvoke $w [list $filenameFragment] + return + } + } +} + +# Gets called when user browses the IconList widget (dragging mouse, arrow +# keys, etc) +# +proc ::tk::dialog::file::chooseDir::ListBrowse {w text} { + upvar ::tk::dialog::file::[winfo name $w] data + + if {$text eq ""} { + return + } + + set file [::tk::dialog::file::JoinFile $data(selectPath) $text] + $data(ent) delete 0 end + $data(ent) insert 0 $file +} + +# ::tk::dialog::file::chooseDir::Done -- +# +# Gets called when user has input a valid filename. Pops up a +# dialog box to confirm selection when necessary. Sets the +# Priv(selectFilePath) variable, which will break the "vwait" +# loop in tk_chooseDirectory and return the selected filename to the +# script that calls tk_getOpenFile or tk_getSaveFile +# +proc ::tk::dialog::file::chooseDir::Done {w {selectFilePath ""}} { + upvar ::tk::dialog::file::[winfo name $w] data + variable ::tk::Priv + + if {$selectFilePath eq ""} { + set selectFilePath $data(selectPath) + } + if {$data(-mustexist) && ![file isdirectory $selectFilePath]} { + return + } + set Priv(selectFilePath) $selectFilePath +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tk/clrpick.tcl b/extensions/fablabchemnitz/inkstitch/bin/tk/clrpick.tcl new file mode 100644 index 00000000..092915c6 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tk/clrpick.tcl @@ -0,0 +1,693 @@ +# clrpick.tcl -- +# +# Color selection dialog for platforms that do not support a +# standard color selection dialog. +# +# Copyright (c) 1996 Sun Microsystems, Inc. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. +# +# ToDo: +# +# (1): Find out how many free colors are left in the colormap and +# don't allocate too many colors. +# (2): Implement HSV color selection. +# + +# Make sure namespaces exist +namespace eval ::tk {} +namespace eval ::tk::dialog {} +namespace eval ::tk::dialog::color { + namespace import ::tk::msgcat::* +} + +# ::tk::dialog::color:: -- +# +# Create a color dialog and let the user choose a color. This function +# should not be called directly. It is called by the tk_chooseColor +# function when a native color selector widget does not exist +# +proc ::tk::dialog::color:: {args} { + variable ::tk::Priv + set dataName __tk__color + upvar ::tk::dialog::color::$dataName data + set w .$dataName + + # The lines variables track the start and end indices of the line + # elements in the colorbar canvases. + set data(lines,red,start) 0 + set data(lines,red,last) -1 + set data(lines,green,start) 0 + set data(lines,green,last) -1 + set data(lines,blue,start) 0 + set data(lines,blue,last) -1 + + # This is the actual number of lines that are drawn in each color strip. + # Note that the bars may be of any width. + # However, NUM_COLORBARS must be a number that evenly divides 256. + # Such as 256, 128, 64, etc. + set data(NUM_COLORBARS) 16 + + # BARS_WIDTH is the number of pixels wide the color bar portion of the + # canvas is. This number must be a multiple of NUM_COLORBARS + set data(BARS_WIDTH) 160 + + # PLGN_WIDTH is the number of pixels wide of the triangular selection + # polygon. This also results in the definition of the padding on the + # left and right sides which is half of PLGN_WIDTH. Make this number even. + set data(PLGN_HEIGHT) 10 + + # PLGN_HEIGHT is the height of the selection polygon and the height of the + # selection rectangle at the bottom of the color bar. No restrictions. + set data(PLGN_WIDTH) 10 + + Config $dataName $args + InitValues $dataName + + set sc [winfo screen $data(-parent)] + set winExists [winfo exists $w] + if {!$winExists || $sc ne [winfo screen $w]} { + if {$winExists} { + destroy $w + } + toplevel $w -class TkColorDialog -screen $sc + if {[tk windowingsystem] eq "x11"} {wm attributes $w -type dialog} + BuildDialog $w + } + + # Dialog boxes should be transient with respect to their parent, + # so that they will always stay on top of their parent window. However, + # some window managers will create the window as withdrawn if the parent + # window is withdrawn or iconified. Combined with the grab we put on the + # window, this can hang the entire application. Therefore we only make + # the dialog transient if the parent is viewable. + + if {[winfo viewable [winfo toplevel $data(-parent)]] } { + wm transient $w $data(-parent) + } + + # 5. Withdraw the window, then update all the geometry information + # so we know how big it wants to be, then center the window in the + # display (Motif style) and de-iconify it. + + ::tk::PlaceWindow $w widget $data(-parent) + wm title $w $data(-title) + + # 6. Set a grab and claim the focus too. + + ::tk::SetFocusGrab $w $data(okBtn) + + # 7. Wait for the user to respond, then restore the focus and + # return the index of the selected button. Restore the focus + # before deleting the window, since otherwise the window manager + # may take the focus away so we can't redirect it. Finally, + # restore any grab that was in effect. + + vwait ::tk::Priv(selectColor) + set result $Priv(selectColor) + ::tk::RestoreFocusGrab $w $data(okBtn) + unset data + + return $result +} + +# ::tk::dialog::color::InitValues -- +# +# Get called during initialization or when user resets NUM_COLORBARS +# +proc ::tk::dialog::color::InitValues {dataName} { + upvar ::tk::dialog::color::$dataName data + + # IntensityIncr is the difference in color intensity between a colorbar + # and its neighbors. + set data(intensityIncr) [expr {256 / $data(NUM_COLORBARS)}] + + # ColorbarWidth is the width of each colorbar + set data(colorbarWidth) [expr {$data(BARS_WIDTH) / $data(NUM_COLORBARS)}] + + # Indent is the width of the space at the left and right side of the + # colorbar. It is always half the selector polygon width, because the + # polygon extends into the space. + set data(indent) [expr {$data(PLGN_WIDTH) / 2}] + + set data(colorPad) 2 + set data(selPad) [expr {$data(PLGN_WIDTH) / 2}] + + # + # minX is the x coordinate of the first colorbar + # + set data(minX) $data(indent) + + # + # maxX is the x coordinate of the last colorbar + # + set data(maxX) [expr {$data(BARS_WIDTH) + $data(indent)-1}] + + # + # canvasWidth is the width of the entire canvas, including the indents + # + set data(canvasWidth) [expr {$data(BARS_WIDTH) + $data(PLGN_WIDTH)}] + + # Set the initial color, specified by -initialcolor, or the + # color chosen by the user the last time. + set data(selection) $data(-initialcolor) + set data(finalColor) $data(-initialcolor) + set rgb [winfo rgb . $data(selection)] + + set data(red,intensity) [expr {[lindex $rgb 0]/0x100}] + set data(green,intensity) [expr {[lindex $rgb 1]/0x100}] + set data(blue,intensity) [expr {[lindex $rgb 2]/0x100}] +} + +# ::tk::dialog::color::Config -- +# +# Parses the command line arguments to tk_chooseColor +# +proc ::tk::dialog::color::Config {dataName argList} { + variable ::tk::Priv + upvar ::tk::dialog::color::$dataName data + + # 1: the configuration specs + # + if {[info exists Priv(selectColor)] && $Priv(selectColor) ne ""} { + set defaultColor $Priv(selectColor) + } else { + set defaultColor [. cget -background] + } + + set specs [list \ + [list -initialcolor "" "" $defaultColor] \ + [list -parent "" "" "."] \ + [list -title "" "" [mc "Color"]] \ + ] + + # 2: parse the arguments + # + tclParseConfigSpec ::tk::dialog::color::$dataName $specs "" $argList + + if {$data(-title) eq ""} { + set data(-title) " " + } + if {[catch {winfo rgb . $data(-initialcolor)} err]} { + error $err + } + + if {![winfo exists $data(-parent)]} { + error "bad window path name \"$data(-parent)\"" + } +} + +# ::tk::dialog::color::BuildDialog -- +# +# Build the dialog. +# +proc ::tk::dialog::color::BuildDialog {w} { + upvar ::tk::dialog::color::[winfo name $w] data + + # TopFrame contains the color strips and the color selection + # + set topFrame [frame $w.top -relief raised -bd 1] + + # StripsFrame contains the colorstrips and the individual RGB entries + set stripsFrame [frame $topFrame.colorStrip] + + set maxWidth [::tk::mcmaxamp &Red &Green &Blue] + set maxWidth [expr {$maxWidth<6 ? 6 : $maxWidth}] + set colorList { + red "&Red" + green "&Green" + blue "&Blue" + } + foreach {color l} $colorList { + # each f frame contains an [R|G|B] entry and the equiv. color strip. + set f [frame $stripsFrame.$color] + + # The box frame contains the label and entry widget for an [R|G|B] + set box [frame $f.box] + + ::tk::AmpWidget label $box.label -text "[mc $l]:" \ + -width $maxWidth -anchor ne + bind $box.label <> [list focus $box.entry] + + entry $box.entry -textvariable \ + ::tk::dialog::color::[winfo name $w]($color,intensity) \ + -width 4 + pack $box.label -side left -fill y -padx 2 -pady 3 + pack $box.entry -side left -anchor n -pady 0 + pack $box -side left -fill both + + set height [expr { + [winfo reqheight $box.entry] - + 2*([$box.entry cget -highlightthickness] + [$box.entry cget -bd]) + }] + + canvas $f.color -height $height \ + -width $data(BARS_WIDTH) -relief sunken -bd 2 + canvas $f.sel -height $data(PLGN_HEIGHT) \ + -width $data(canvasWidth) -highlightthickness 0 + pack $f.color -expand yes -fill both + pack $f.sel -expand yes -fill both + + pack $f -side top -fill x -padx 0 -pady 2 + + set data($color,entry) $box.entry + set data($color,col) $f.color + set data($color,sel) $f.sel + + bind $data($color,col) \ + [list tk::dialog::color::DrawColorScale $w $color 1] + bind $data($color,col) \ + [list tk::dialog::color::EnterColorBar $w $color] + bind $data($color,col) \ + [list tk::dialog::color::LeaveColorBar $w $color] + + bind $data($color,sel) \ + [list tk::dialog::color::EnterColorBar $w $color] + bind $data($color,sel) \ + [list tk::dialog::color::LeaveColorBar $w $color] + + bind $box.entry [list tk::dialog::color::HandleRGBEntry $w] + } + + pack $stripsFrame -side left -fill both -padx 4 -pady 10 + + # The selFrame contains a frame that demonstrates the currently + # selected color + # + set selFrame [frame $topFrame.sel] + set lab [::tk::AmpWidget label $selFrame.lab \ + -text [mc "&Selection:"] -anchor sw] + set ent [entry $selFrame.ent \ + -textvariable ::tk::dialog::color::[winfo name $w](selection) \ + -width 16] + set f1 [frame $selFrame.f1 -relief sunken -bd 2] + set data(finalCanvas) [frame $f1.demo -bd 0 -width 100 -height 70] + + pack $lab $ent -side top -fill x -padx 4 -pady 2 + pack $f1 -expand yes -anchor nw -fill both -padx 6 -pady 10 + pack $data(finalCanvas) -expand yes -fill both + + bind $ent [list tk::dialog::color::HandleSelEntry $w] + + pack $selFrame -side left -fill none -anchor nw + pack $topFrame -side top -expand yes -fill both -anchor nw + + # the botFrame frame contains the buttons + # + set botFrame [frame $w.bot -relief raised -bd 1] + + ::tk::AmpWidget button $botFrame.ok -text [mc "&OK"] \ + -command [list tk::dialog::color::OkCmd $w] + ::tk::AmpWidget button $botFrame.cancel -text [mc "&Cancel"] \ + -command [list tk::dialog::color::CancelCmd $w] + + set data(okBtn) $botFrame.ok + set data(cancelBtn) $botFrame.cancel + + grid x $botFrame.ok x $botFrame.cancel x -sticky ew + grid configure $botFrame.ok $botFrame.cancel -padx 10 -pady 10 + grid columnconfigure $botFrame {0 4} -weight 1 -uniform space + grid columnconfigure $botFrame {1 3} -weight 1 -uniform button + grid columnconfigure $botFrame 2 -weight 2 -uniform space + pack $botFrame -side bottom -fill x + + # Accelerator bindings + bind $lab <> [list focus $ent] + bind $w [list tk::ButtonInvoke $data(cancelBtn)] + bind $w [list tk::AltKeyInDialog $w %A] + + wm protocol $w WM_DELETE_WINDOW [list tk::dialog::color::CancelCmd $w] + bind $lab [list tk::dialog::color::CancelCmd $w] +} + +# ::tk::dialog::color::SetRGBValue -- +# +# Sets the current selection of the dialog box +# +proc ::tk::dialog::color::SetRGBValue {w color} { + upvar ::tk::dialog::color::[winfo name $w] data + + set data(red,intensity) [lindex $color 0] + set data(green,intensity) [lindex $color 1] + set data(blue,intensity) [lindex $color 2] + + RedrawColorBars $w all + + # Now compute the new x value of each colorbars pointer polygon + foreach color {red green blue} { + set x [RgbToX $w $data($color,intensity)] + MoveSelector $w $data($color,sel) $color $x 0 + } +} + +# ::tk::dialog::color::XToRgb -- +# +# Converts a screen coordinate to intensity +# +proc ::tk::dialog::color::XToRgb {w x} { + upvar ::tk::dialog::color::[winfo name $w] data + + set x [expr {($x * $data(intensityIncr))/ $data(colorbarWidth)}] + if {$x > 255} { + set x 255 + } + return $x +} + +# ::tk::dialog::color::RgbToX +# +# Converts an intensity to screen coordinate. +# +proc ::tk::dialog::color::RgbToX {w color} { + upvar ::tk::dialog::color::[winfo name $w] data + + return [expr {($color * $data(colorbarWidth)/ $data(intensityIncr))}] +} + +# ::tk::dialog::color::DrawColorScale -- +# +# Draw color scale is called whenever the size of one of the color +# scale canvases is changed. +# +proc ::tk::dialog::color::DrawColorScale {w c {create 0}} { + upvar ::tk::dialog::color::[winfo name $w] data + + # col: color bar canvas + # sel: selector canvas + set col $data($c,col) + set sel $data($c,sel) + + # First handle the case that we are creating everything for the first time. + if {$create} { + # First remove all the lines that already exist. + if { $data(lines,$c,last) > $data(lines,$c,start)} { + for {set i $data(lines,$c,start)} \ + {$i <= $data(lines,$c,last)} {incr i} { + $sel delete $i + } + } + # Delete the selector if it exists + if {[info exists data($c,index)]} { + $sel delete $data($c,index) + } + + # Draw the selection polygons + CreateSelector $w $sel $c + $sel bind $data($c,index) \ + [list tk::dialog::color::StartMove $w $sel $c %x $data(selPad) 1] + $sel bind $data($c,index) \ + [list tk::dialog::color::MoveSelector $w $sel $c %x $data(selPad)] + $sel bind $data($c,index) \ + [list tk::dialog::color::ReleaseMouse $w $sel $c %x $data(selPad)] + + set height [winfo height $col] + # Create an invisible region under the colorstrip to catch mouse clicks + # that aren't on the selector. + set data($c,clickRegion) [$sel create rectangle 0 0 \ + $data(canvasWidth) $height -fill {} -outline {}] + + bind $col \ + [list tk::dialog::color::StartMove $w $sel $c %x $data(colorPad)] + bind $col \ + [list tk::dialog::color::MoveSelector $w $sel $c %x $data(colorPad)] + bind $col \ + [list tk::dialog::color::ReleaseMouse $w $sel $c %x $data(colorPad)] + + $sel bind $data($c,clickRegion) \ + [list tk::dialog::color::StartMove $w $sel $c %x $data(selPad)] + $sel bind $data($c,clickRegion) \ + [list tk::dialog::color::MoveSelector $w $sel $c %x $data(selPad)] + $sel bind $data($c,clickRegion) \ + [list tk::dialog::color::ReleaseMouse $w $sel $c %x $data(selPad)] + } else { + # l is the canvas index of the first colorbar. + set l $data(lines,$c,start) + } + + # Draw the color bars. + set highlightW [expr {[$col cget -highlightthickness] + [$col cget -bd]}] + for {set i 0} { $i < $data(NUM_COLORBARS)} { incr i} { + set intensity [expr {$i * $data(intensityIncr)}] + set startx [expr {$i * $data(colorbarWidth) + $highlightW}] + if {$c eq "red"} { + set color [format "#%02x%02x%02x" \ + $intensity $data(green,intensity) $data(blue,intensity)] + } elseif {$c eq "green"} { + set color [format "#%02x%02x%02x" \ + $data(red,intensity) $intensity $data(blue,intensity)] + } else { + set color [format "#%02x%02x%02x" \ + $data(red,intensity) $data(green,intensity) $intensity] + } + + if {$create} { + set index [$col create rect $startx $highlightW \ + [expr {$startx +$data(colorbarWidth)}] \ + [expr {[winfo height $col] + $highlightW}] \ + -fill $color -outline $color] + } else { + $col itemconfigure $l -fill $color -outline $color + incr l + } + } + $sel raise $data($c,index) + + if {$create} { + set data(lines,$c,last) $index + set data(lines,$c,start) [expr {$index - $data(NUM_COLORBARS) + 1}] + } + + RedrawFinalColor $w +} + +# ::tk::dialog::color::CreateSelector -- +# +# Creates and draws the selector polygon at the position +# $data($c,intensity). +# +proc ::tk::dialog::color::CreateSelector {w sel c } { + upvar ::tk::dialog::color::[winfo name $w] data + set data($c,index) [$sel create polygon \ + 0 $data(PLGN_HEIGHT) \ + $data(PLGN_WIDTH) $data(PLGN_HEIGHT) \ + $data(indent) 0] + set data($c,x) [RgbToX $w $data($c,intensity)] + $sel move $data($c,index) $data($c,x) 0 +} + +# ::tk::dialog::color::RedrawFinalColor +# +# Combines the intensities of the three colors into the final color +# +proc ::tk::dialog::color::RedrawFinalColor {w} { + upvar ::tk::dialog::color::[winfo name $w] data + + set color [format "#%02x%02x%02x" $data(red,intensity) \ + $data(green,intensity) $data(blue,intensity)] + + $data(finalCanvas) configure -bg $color + set data(finalColor) $color + set data(selection) $color + set data(finalRGB) [list \ + $data(red,intensity) \ + $data(green,intensity) \ + $data(blue,intensity)] +} + +# ::tk::dialog::color::RedrawColorBars -- +# +# Only redraws the colors on the color strips that were not manipulated. +# Params: color of colorstrip that changed. If color is not [red|green|blue] +# Then all colorstrips will be updated +# +proc ::tk::dialog::color::RedrawColorBars {w colorChanged} { + upvar ::tk::dialog::color::[winfo name $w] data + + switch $colorChanged { + red { + DrawColorScale $w green + DrawColorScale $w blue + } + green { + DrawColorScale $w red + DrawColorScale $w blue + } + blue { + DrawColorScale $w red + DrawColorScale $w green + } + default { + DrawColorScale $w red + DrawColorScale $w green + DrawColorScale $w blue + } + } + RedrawFinalColor $w +} + +#---------------------------------------------------------------------- +# Event handlers +#---------------------------------------------------------------------- + +# ::tk::dialog::color::StartMove -- +# +# Handles a mousedown button event over the selector polygon. +# Adds the bindings for moving the mouse while the button is +# pressed. Sets the binding for the button-release event. +# +# Params: sel is the selector canvas window, color is the color of the strip. +# +proc ::tk::dialog::color::StartMove {w sel color x delta {dontMove 0}} { + upvar ::tk::dialog::color::[winfo name $w] data + + if {!$dontMove} { + MoveSelector $w $sel $color $x $delta + } +} + +# ::tk::dialog::color::MoveSelector -- +# +# Moves the polygon selector so that its middle point has the same +# x value as the specified x. If x is outside the bounds [0,255], +# the selector is set to the closest endpoint. +# +# Params: sel is the selector canvas, c is [red|green|blue] +# x is a x-coordinate. +# +proc ::tk::dialog::color::MoveSelector {w sel color x delta} { + upvar ::tk::dialog::color::[winfo name $w] data + + incr x -$delta + + if { $x < 0 } { + set x 0 + } elseif { $x > $data(BARS_WIDTH)} { + set x $data(BARS_WIDTH) + } + set diff [expr {$x - $data($color,x)}] + $sel move $data($color,index) $diff 0 + set data($color,x) [expr {$data($color,x) + $diff}] + + # Return the x value that it was actually set at + return $x +} + +# ::tk::dialog::color::ReleaseMouse +# +# Removes mouse tracking bindings, updates the colorbars. +# +# Params: sel is the selector canvas, color is the color of the strip, +# x is the x-coord of the mouse. +# +proc ::tk::dialog::color::ReleaseMouse {w sel color x delta} { + upvar ::tk::dialog::color::[winfo name $w] data + + set x [MoveSelector $w $sel $color $x $delta] + + # Determine exactly what color we are looking at. + set data($color,intensity) [XToRgb $w $x] + + RedrawColorBars $w $color +} + +# ::tk::dialog::color::ResizeColorbars -- +# +# Completely redraws the colorbars, including resizing the +# colorstrips +# +proc ::tk::dialog::color::ResizeColorBars {w} { + upvar ::tk::dialog::color::[winfo name $w] data + + if { + ($data(BARS_WIDTH) < $data(NUM_COLORBARS)) || + (($data(BARS_WIDTH) % $data(NUM_COLORBARS)) != 0) + } then { + set data(BARS_WIDTH) $data(NUM_COLORBARS) + } + InitValues [winfo name $w] + foreach color {red green blue} { + $data($color,col) configure -width $data(canvasWidth) + DrawColorScale $w $color 1 + } +} + +# ::tk::dialog::color::HandleSelEntry -- +# +# Handles the return keypress event in the "Selection:" entry +# +proc ::tk::dialog::color::HandleSelEntry {w} { + upvar ::tk::dialog::color::[winfo name $w] data + + set text [string trim $data(selection)] + # Check to make sure that the color is valid + if {[catch {set color [winfo rgb . $text]} ]} { + set data(selection) $data(finalColor) + return + } + + set R [expr {[lindex $color 0]/0x100}] + set G [expr {[lindex $color 1]/0x100}] + set B [expr {[lindex $color 2]/0x100}] + + SetRGBValue $w "$R $G $B" + set data(selection) $text +} + +# ::tk::dialog::color::HandleRGBEntry -- +# +# Handles the return keypress event in the R, G or B entry +# +proc ::tk::dialog::color::HandleRGBEntry {w} { + upvar ::tk::dialog::color::[winfo name $w] data + + foreach c {red green blue} { + if {[catch { + set data($c,intensity) [expr {int($data($c,intensity))}] + }]} { + set data($c,intensity) 0 + } + + if {$data($c,intensity) < 0} { + set data($c,intensity) 0 + } + if {$data($c,intensity) > 255} { + set data($c,intensity) 255 + } + } + + SetRGBValue $w "$data(red,intensity) \ + $data(green,intensity) $data(blue,intensity)" +} + +# mouse cursor enters a color bar +# +proc ::tk::dialog::color::EnterColorBar {w color} { + upvar ::tk::dialog::color::[winfo name $w] data + + $data($color,sel) itemconfigure $data($color,index) -fill red +} + +# mouse leaves enters a color bar +# +proc ::tk::dialog::color::LeaveColorBar {w color} { + upvar ::tk::dialog::color::[winfo name $w] data + + $data($color,sel) itemconfigure $data($color,index) -fill black +} + +# user hits OK button +# +proc ::tk::dialog::color::OkCmd {w} { + variable ::tk::Priv + upvar ::tk::dialog::color::[winfo name $w] data + + set Priv(selectColor) $data(finalColor) +} + +# user hits Cancel button or destroys window +# +proc ::tk::dialog::color::CancelCmd {w} { + variable ::tk::Priv + set Priv(selectColor) "" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tk/comdlg.tcl b/extensions/fablabchemnitz/inkstitch/bin/tk/comdlg.tcl new file mode 100644 index 00000000..39d27d3c --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tk/comdlg.tcl @@ -0,0 +1,310 @@ +# comdlg.tcl -- +# +# Some functions needed for the common dialog boxes. Probably need to go +# in a different file. +# +# Copyright (c) 1996 Sun Microsystems, Inc. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. +# + +# tclParseConfigSpec -- +# +# Parses a list of "-option value" pairs. If all options and +# values are legal, the values are stored in +# $data($option). Otherwise an error message is returned. When +# an error happens, the data() array may have been partially +# modified, but all the modified members of the data(0 array are +# guaranteed to have valid values. This is different than +# Tk_ConfigureWidget() which does not modify the value of a +# widget record if any error occurs. +# +# Arguments: +# +# w = widget record to modify. Must be the pathname of a widget. +# +# specs = { +# {-commandlineswitch resourceName ResourceClass defaultValue verifier} +# {....} +# } +# +# flags = currently unused. +# +# argList = The list of "-option value" pairs. +# +proc tclParseConfigSpec {w specs flags argList} { + upvar #0 $w data + + # 1: Put the specs in associative arrays for faster access + # + foreach spec $specs { + if {[llength $spec] < 4} { + error "\"spec\" should contain 5 or 4 elements" + } + set cmdsw [lindex $spec 0] + set cmd($cmdsw) "" + set rname($cmdsw) [lindex $spec 1] + set rclass($cmdsw) [lindex $spec 2] + set def($cmdsw) [lindex $spec 3] + set verproc($cmdsw) [lindex $spec 4] + } + + if {[llength $argList] & 1} { + set cmdsw [lindex $argList end] + if {![info exists cmd($cmdsw)]} { + error "bad option \"$cmdsw\": must be [tclListValidFlags cmd]" + } + error "value for \"$cmdsw\" missing" + } + + # 2: set the default values + # + foreach cmdsw [array names cmd] { + set data($cmdsw) $def($cmdsw) + } + + # 3: parse the argument list + # + foreach {cmdsw value} $argList { + if {![info exists cmd($cmdsw)]} { + error "bad option \"$cmdsw\": must be [tclListValidFlags cmd]" + } + set data($cmdsw) $value + } + + # Done! +} + +proc tclListValidFlags {v} { + upvar $v cmd + + set len [llength [array names cmd]] + set i 1 + set separator "" + set errormsg "" + foreach cmdsw [lsort [array names cmd]] { + append errormsg "$separator$cmdsw" + incr i + if {$i == $len} { + set separator ", or " + } else { + set separator ", " + } + } + return $errormsg +} + +#---------------------------------------------------------------------- +# +# Focus Group +# +# Focus groups are used to handle the user's focusing actions inside a +# toplevel. +# +# One example of using focus groups is: when the user focuses on an +# entry, the text in the entry is highlighted and the cursor is put to +# the end of the text. When the user changes focus to another widget, +# the text in the previously focused entry is validated. +# +#---------------------------------------------------------------------- + + +# ::tk::FocusGroup_Create -- +# +# Create a focus group. All the widgets in a focus group must be +# within the same focus toplevel. Each toplevel can have only +# one focus group, which is identified by the name of the +# toplevel widget. +# +proc ::tk::FocusGroup_Create {t} { + variable ::tk::Priv + if {[winfo toplevel $t] ne $t} { + error "$t is not a toplevel window" + } + if {![info exists Priv(fg,$t)]} { + set Priv(fg,$t) 1 + set Priv(focus,$t) "" + bind $t [list tk::FocusGroup_In $t %W %d] + bind $t [list tk::FocusGroup_Out $t %W %d] + bind $t [list tk::FocusGroup_Destroy $t %W] + } +} + +# ::tk::FocusGroup_BindIn -- +# +# Add a widget into the "FocusIn" list of the focus group. The $cmd will be +# called when the widget is focused on by the user. +# +proc ::tk::FocusGroup_BindIn {t w cmd} { + variable FocusIn + variable ::tk::Priv + if {![info exists Priv(fg,$t)]} { + error "focus group \"$t\" doesn't exist" + } + set FocusIn($t,$w) $cmd +} + + +# ::tk::FocusGroup_BindOut -- +# +# Add a widget into the "FocusOut" list of the focus group. The +# $cmd will be called when the widget loses the focus (User +# types Tab or click on another widget). +# +proc ::tk::FocusGroup_BindOut {t w cmd} { + variable FocusOut + variable ::tk::Priv + if {![info exists Priv(fg,$t)]} { + error "focus group \"$t\" doesn't exist" + } + set FocusOut($t,$w) $cmd +} + +# ::tk::FocusGroup_Destroy -- +# +# Cleans up when members of the focus group is deleted, or when the +# toplevel itself gets deleted. +# +proc ::tk::FocusGroup_Destroy {t w} { + variable FocusIn + variable FocusOut + variable ::tk::Priv + + if {$t eq $w} { + unset Priv(fg,$t) + unset Priv(focus,$t) + + foreach name [array names FocusIn $t,*] { + unset FocusIn($name) + } + foreach name [array names FocusOut $t,*] { + unset FocusOut($name) + } + } else { + if {[info exists Priv(focus,$t)] && ($Priv(focus,$t) eq $w)} { + set Priv(focus,$t) "" + } + unset -nocomplain FocusIn($t,$w) FocusOut($t,$w) + } +} + +# ::tk::FocusGroup_In -- +# +# Handles the event. Calls the FocusIn command for the newly +# focused widget in the focus group. +# +proc ::tk::FocusGroup_In {t w detail} { + variable FocusIn + variable ::tk::Priv + + if {$detail ne "NotifyNonlinear" && $detail ne "NotifyNonlinearVirtual"} { + # This is caused by mouse moving out&in of the window *or* + # ordinary keypresses some window managers (ie: CDE [Bug: 2960]). + return + } + if {![info exists FocusIn($t,$w)]} { + set FocusIn($t,$w) "" + return + } + if {![info exists Priv(focus,$t)]} { + return + } + if {$Priv(focus,$t) eq $w} { + # This is already in focus + # + return + } else { + set Priv(focus,$t) $w + eval $FocusIn($t,$w) + } +} + +# ::tk::FocusGroup_Out -- +# +# Handles the event. Checks if this is really a lose +# focus event, not one generated by the mouse moving out of the +# toplevel window. Calls the FocusOut command for the widget +# who loses its focus. +# +proc ::tk::FocusGroup_Out {t w detail} { + variable FocusOut + variable ::tk::Priv + + if {$detail ne "NotifyNonlinear" && $detail ne "NotifyNonlinearVirtual"} { + # This is caused by mouse moving out of the window + return + } + if {![info exists Priv(focus,$t)]} { + return + } + if {![info exists FocusOut($t,$w)]} { + return + } else { + eval $FocusOut($t,$w) + set Priv(focus,$t) "" + } +} + +# ::tk::FDGetFileTypes -- +# +# Process the string given by the -filetypes option of the file +# dialogs. Similar to the C function TkGetFileFilters() on the Mac +# and Windows platform. +# +proc ::tk::FDGetFileTypes {string} { + foreach t $string { + if {[llength $t] < 2 || [llength $t] > 3} { + error "bad file type \"$t\", should be \"typeName {extension ?extensions ...?} ?{macType ?macTypes ...?}?\"" + } + lappend fileTypes([lindex $t 0]) {*}[lindex $t 1] + } + + set types {} + foreach t $string { + set label [lindex $t 0] + set exts {} + + if {[info exists hasDoneType($label)]} { + continue + } + + # Validate each macType. This is to agree with the + # behaviour of TkGetFileFilters(). This list may be + # empty. + foreach macType [lindex $t 2] { + if {[string length $macType] != 4} { + error "bad Macintosh file type \"$macType\"" + } + } + + set name "$label \(" + set sep "" + set doAppend 1 + foreach ext $fileTypes($label) { + if {$ext eq ""} { + continue + } + regsub {^[.]} $ext "*." ext + if {![info exists hasGotExt($label,$ext)]} { + if {$doAppend} { + if {[string length $sep] && [string length $name]>40} { + set doAppend 0 + append name $sep... + } else { + append name $sep$ext + } + } + lappend exts $ext + set hasGotExt($label,$ext) 1 + } + set sep "," + } + append name "\)" + lappend types [list $name $exts] + + set hasDoneType($label) 1 + } + + return $types +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tk/console.tcl b/extensions/fablabchemnitz/inkstitch/bin/tk/console.tcl new file mode 100644 index 00000000..e44324fb --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tk/console.tcl @@ -0,0 +1,1065 @@ +# console.tcl -- +# +# This code constructs the console window for an application. It +# can be used by non-unix systems that do not have built-in support +# for shells. +# +# Copyright (c) 1995-1997 Sun Microsystems, Inc. +# Copyright (c) 1998-2000 Ajuba Solutions. +# Copyright (c) 2007 Daniel A. Steffen +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. +# + +# TODO: history - remember partially written command + +namespace eval ::tk::console { + variable blinkTime 500 ; # msecs to blink braced range for + variable blinkRange 1 ; # enable blinking of the entire braced range + variable magicKeys 1 ; # enable brace matching and proc/var recognition + variable maxLines 600 ; # maximum # of lines buffered in console + variable showMatches 1 ; # show multiple expand matches + + variable inPlugin [info exists embed_args] + variable defaultPrompt ; # default prompt if tcl_prompt1 isn't used + + + if {$inPlugin} { + set defaultPrompt {subst {[history nextid] % }} + } else { + set defaultPrompt {subst {([file tail [pwd]]) [history nextid] % }} + } +} + +# simple compat function for tkcon code added for this console +interp alias {} EvalAttached {} consoleinterp eval + +# ::tk::ConsoleInit -- +# This procedure constructs and configures the console windows. +# +# Arguments: +# None. + +proc ::tk::ConsoleInit {} { + global tcl_platform + + if {![consoleinterp eval {set tcl_interactive}]} { + wm withdraw . + } + + if {[tk windowingsystem] eq "aqua"} { + set mod "Cmd" + } else { + set mod "Ctrl" + } + + if {[catch {menu .menubar} err]} { + bgerror "INIT: $err" + } + AmpMenuArgs .menubar add cascade -label [mc &File] -menu .menubar.file + AmpMenuArgs .menubar add cascade -label [mc &Edit] -menu .menubar.edit + + menu .menubar.file -tearoff 0 + AmpMenuArgs .menubar.file add command -label [mc "&Source..."] \ + -command {tk::ConsoleSource} + AmpMenuArgs .menubar.file add command -label [mc "&Hide Console"] \ + -command {wm withdraw .} + AmpMenuArgs .menubar.file add command -label [mc "&Clear Console"] \ + -command {.console delete 1.0 "promptEnd linestart"} + if {[tk windowingsystem] ne "aqua"} { + AmpMenuArgs .menubar.file add command -label [mc E&xit] -command {exit} + } + + menu .menubar.edit -tearoff 0 + AmpMenuArgs .menubar.edit add command -label [mc Cu&t] -accel "$mod+X"\ + -command {event generate .console <>} + AmpMenuArgs .menubar.edit add command -label [mc &Copy] -accel "$mod+C"\ + -command {event generate .console <>} + AmpMenuArgs .menubar.edit add command -label [mc P&aste] -accel "$mod+V"\ + -command {event generate .console <>} + + if {$tcl_platform(platform) ne "windows"} { + AmpMenuArgs .menubar.edit add command -label [mc Cl&ear] \ + -command {event generate .console <>} + } else { + AmpMenuArgs .menubar.edit add command -label [mc &Delete] \ + -command {event generate .console <>} -accel "Del" + + AmpMenuArgs .menubar add cascade -label [mc &Help] -menu .menubar.help + menu .menubar.help -tearoff 0 + AmpMenuArgs .menubar.help add command -label [mc &About...] \ + -command tk::ConsoleAbout + } + + AmpMenuArgs .menubar.edit add separator + AmpMenuArgs .menubar.edit add command -label [mc "&Increase Font Size"] \ + -accel "$mod++" -command {event generate .console <>} + AmpMenuArgs .menubar.edit add command -label [mc "&Decrease Font Size"] \ + -accel "$mod+-" -command {event generate .console <>} + + . configure -menu .menubar + + # See if we can find a better font than the TkFixedFont + catch {font create TkConsoleFont {*}[font configure TkFixedFont]} + set families [font families] + switch -exact -- [tk windowingsystem] { + aqua { set preferred {Monaco 10} } + win32 { set preferred {ProFontWindows 8 Consolas 8} } + default { set preferred {} } + } + foreach {family size} $preferred { + if {[lsearch -exact $families $family] != -1} { + font configure TkConsoleFont -family $family -size $size + break + } + } + + # Provide the right border for the text widget (platform dependent). + ::ttk::style layout ConsoleFrame { + Entry.field -sticky news -border 1 -children { + ConsoleFrame.padding -sticky news + } + } + ::ttk::frame .consoleframe -style ConsoleFrame + + set con [text .console -yscrollcommand [list .sb set] -setgrid true \ + -borderwidth 0 -highlightthickness 0 -font TkConsoleFont] + if {[tk windowingsystem] eq "aqua"} { + scrollbar .sb -command [list $con yview] + } else { + ::ttk::scrollbar .sb -command [list $con yview] + } + pack .sb -in .consoleframe -fill both -side right -padx 1 -pady 1 + pack $con -in .consoleframe -fill both -expand 1 -side left -padx 1 -pady 1 + pack .consoleframe -fill both -expand 1 -side left + + ConsoleBind $con + + $con tag configure stderr -foreground red + $con tag configure stdin -foreground blue + $con tag configure prompt -foreground \#8F4433 + $con tag configure proc -foreground \#008800 + $con tag configure var -background \#FFC0D0 + $con tag raise sel + $con tag configure blink -background \#FFFF00 + $con tag configure find -background \#FFFF00 + + focus $con + + # Avoid listing this console in [winfo interps] + if {[info command ::send] eq "::send"} {rename ::send {}} + + wm protocol . WM_DELETE_WINDOW { wm withdraw . } + wm title . [mc "Console"] + flush stdout + $con mark set output [$con index "end - 1 char"] + tk::TextSetCursor $con end + $con mark set promptEnd insert + $con mark gravity promptEnd left + + # A variant of ConsolePrompt to avoid a 'puts' call + set w $con + set temp [$w index "end - 1 char"] + $w mark set output end + if {![consoleinterp eval "info exists tcl_prompt1"]} { + set string [EvalAttached $::tk::console::defaultPrompt] + $w insert output $string stdout + } + $w mark set output $temp + ::tk::TextSetCursor $w end + $w mark set promptEnd insert + $w mark gravity promptEnd left + + if {$tcl_platform(platform) eq "windows"} { + # Subtle work-around to erase the '% ' that tclMain.c prints out + after idle [subst -nocommand { + if {[$con get 1.0 output] eq "% "} { $con delete 1.0 output } + }] + } +} + +# ::tk::ConsoleSource -- +# +# Prompts the user for a file to source in the main interpreter. +# +# Arguments: +# None. + +proc ::tk::ConsoleSource {} { + set filename [tk_getOpenFile -defaultextension .tcl -parent . \ + -title [mc "Select a file to source"] \ + -filetypes [list \ + [list [mc "Tcl Scripts"] .tcl] \ + [list [mc "All Files"] *]]] + if {$filename ne ""} { + set cmd [list source $filename] + if {[catch {consoleinterp eval $cmd} result]} { + ConsoleOutput stderr "$result\n" + } + } +} + +# ::tk::ConsoleInvoke -- +# Processes the command line input. If the command is complete it +# is evaled in the main interpreter. Otherwise, the continuation +# prompt is added and more input may be added. +# +# Arguments: +# None. + +proc ::tk::ConsoleInvoke {args} { + set ranges [.console tag ranges input] + set cmd "" + if {[llength $ranges]} { + set pos 0 + while {[lindex $ranges $pos] ne ""} { + set start [lindex $ranges $pos] + set end [lindex $ranges [incr pos]] + append cmd [.console get $start $end] + incr pos + } + } + if {$cmd eq ""} { + ConsolePrompt + } elseif {[info complete $cmd]} { + .console mark set output end + .console tag delete input + set result [consoleinterp record $cmd] + if {$result ne ""} { + puts $result + } + ConsoleHistory reset + ConsolePrompt + } else { + ConsolePrompt partial + } + .console yview -pickplace insert +} + +# ::tk::ConsoleHistory -- +# This procedure implements command line history for the +# console. In general is evals the history command in the +# main interpreter to obtain the history. The variable +# ::tk::HistNum is used to store the current location in the history. +# +# Arguments: +# cmd - Which action to take: prev, next, reset. + +set ::tk::HistNum 1 +proc ::tk::ConsoleHistory {cmd} { + variable HistNum + + switch $cmd { + prev { + incr HistNum -1 + if {$HistNum == 0} { + set cmd {history event [expr {[history nextid] -1}]} + } else { + set cmd "history event $HistNum" + } + if {[catch {consoleinterp eval $cmd} cmd]} { + incr HistNum + return + } + .console delete promptEnd end + .console insert promptEnd $cmd {input stdin} + } + next { + incr HistNum + if {$HistNum == 0} { + set cmd {history event [expr {[history nextid] -1}]} + } elseif {$HistNum > 0} { + set cmd "" + set HistNum 1 + } else { + set cmd "history event $HistNum" + } + if {$cmd ne ""} { + catch {consoleinterp eval $cmd} cmd + } + .console delete promptEnd end + .console insert promptEnd $cmd {input stdin} + } + reset { + set HistNum 1 + } + } +} + +# ::tk::ConsolePrompt -- +# This procedure draws the prompt. If tcl_prompt1 or tcl_prompt2 +# exists in the main interpreter it will be called to generate the +# prompt. Otherwise, a hard coded default prompt is printed. +# +# Arguments: +# partial - Flag to specify which prompt to print. + +proc ::tk::ConsolePrompt {{partial normal}} { + set w .console + if {$partial eq "normal"} { + set temp [$w index "end - 1 char"] + $w mark set output end + if {[consoleinterp eval "info exists tcl_prompt1"]} { + consoleinterp eval "eval \[set tcl_prompt1\]" + } else { + puts -nonewline [EvalAttached $::tk::console::defaultPrompt] + } + } else { + set temp [$w index output] + $w mark set output end + if {[consoleinterp eval "info exists tcl_prompt2"]} { + consoleinterp eval "eval \[set tcl_prompt2\]" + } else { + puts -nonewline "> " + } + } + flush stdout + $w mark set output $temp + ::tk::TextSetCursor $w end + $w mark set promptEnd insert + $w mark gravity promptEnd left + ::tk::console::ConstrainBuffer $w $::tk::console::maxLines + $w see end +} + +# Copy selected text from the console +proc ::tk::console::Copy {w} { + if {![catch {set data [$w get sel.first sel.last]}]} { + clipboard clear -displayof $w + clipboard append -displayof $w $data + } +} +# Copies selected text. If the selection is within the current active edit +# region then it will be cut, if not it is only copied. +proc ::tk::console::Cut {w} { + if {![catch {set data [$w get sel.first sel.last]}]} { + clipboard clear -displayof $w + clipboard append -displayof $w $data + if {[$w compare sel.first >= output]} { + $w delete sel.first sel.last + } + } +} +# Paste text from the clipboard +proc ::tk::console::Paste {w} { + catch { + set clip [::tk::GetSelection $w CLIPBOARD] + set list [split $clip \n\r] + tk::ConsoleInsert $w [lindex $list 0] + foreach x [lrange $list 1 end] { + $w mark set insert {end - 1c} + tk::ConsoleInsert $w "\n" + tk::ConsoleInvoke + tk::ConsoleInsert $w $x + } + } +} + +# ::tk::ConsoleBind -- +# This procedure first ensures that the default bindings for the Text +# class have been defined. Then certain bindings are overridden for +# the class. +# +# Arguments: +# None. + +proc ::tk::ConsoleBind {w} { + bindtags $w [list $w Console PostConsole [winfo toplevel $w] all] + + ## Get all Text bindings into Console + foreach ev [bind Text] { + bind Console $ev [bind Text $ev] + } + ## We really didn't want the newline insertion... + bind Console {} + ## ...or any Control-v binding (would block <>) + bind Console {} + + # For the moment, transpose isn't enabled until the console + # gets and overhaul of how it handles input -- hobbs + bind Console {} + + # Ignore all Alt, Meta, and Control keypresses unless explicitly bound. + # Otherwise, if a widget binding for one of these is defined, the + # class binding will also fire and insert the character + # which is wrong. + + bind Console {# nothing } + bind Console {# nothing} + bind Console {# nothing} + + foreach {ev key} { + <> + <> + <> + <> + <> + <> + + <> + <> + <> + <> + <> + <> + <> + <> + <> + + <> + <> + <> + <> + <> + <> + <> + } { + event add $ev $key + bind Console $key {} + } + if {[tk windowingsystem] eq "aqua"} { + foreach {ev key} { + <> + <> + } { + event add $ev $key + bind Console $key {} + } + } + bind Console <> { + if {[%W compare insert > promptEnd]} { + ::tk::console::Expand %W + } + } + bind Console <> { + if {[%W compare insert > promptEnd]} { + ::tk::console::Expand %W path + } + } + bind Console <> { + if {[%W compare insert > promptEnd]} { + ::tk::console::Expand %W proc + } + } + bind Console <> { + if {[%W compare insert > promptEnd]} { + ::tk::console::Expand %W var + } + } + bind Console <> { + %W mark set insert {end - 1c} + tk::ConsoleInsert %W "\n" + tk::ConsoleInvoke + break + } + bind Console { + if {{} ne [%W tag nextrange sel 1.0 end] \ + && [%W compare sel.first >= promptEnd]} { + %W delete sel.first sel.last + } elseif {[%W compare insert >= promptEnd]} { + %W delete insert + %W see insert + } + } + bind Console { + if {{} ne [%W tag nextrange sel 1.0 end] \ + && [%W compare sel.first >= promptEnd]} { + %W delete sel.first sel.last + } elseif {[%W compare insert != 1.0] && \ + [%W compare insert > promptEnd]} { + %W delete insert-1c + %W see insert + } + } + bind Console [bind Console ] + + bind Console { + if {[%W compare insert < promptEnd]} { + tk::TextSetCursor %W {insert linestart} + } else { + tk::TextSetCursor %W promptEnd + } + } + bind Console [bind Console ] + bind Console { + tk::TextSetCursor %W {insert lineend} + } + bind Console [bind Console ] + bind Console { + if {[%W compare insert < promptEnd]} { + break + } + %W delete insert + } + bind Console <> { + if {[%W compare insert < promptEnd]} { + break + } + if {[%W compare insert == {insert lineend}]} { + %W delete insert + } else { + %W delete insert {insert lineend} + } + } + bind Console <> { + ## Clear console display + %W delete 1.0 "promptEnd linestart" + } + bind Console <> { + ## Clear command line (Unix shell staple) + %W delete promptEnd end + } + bind Console { + if {[%W compare insert >= promptEnd]} { + %W delete insert {insert wordend} + } + } + bind Console { + if {[%W compare {insert -1c wordstart} >= promptEnd]} { + %W delete {insert -1c wordstart} insert + } + } + bind Console { + if {[%W compare insert >= promptEnd]} { + %W delete insert {insert wordend} + } + } + bind Console { + if {[%W compare {insert -1c wordstart} >= promptEnd]} { + %W delete {insert -1c wordstart} insert + } + } + bind Console { + if {[%W compare insert >= promptEnd]} { + %W delete insert {insert wordend} + } + } + bind Console <> { + tk::ConsoleHistory prev + } + bind Console <> { + tk::ConsoleHistory next + } + bind Console { + catch {tk::ConsoleInsert %W [::tk::GetSelection %W PRIMARY]} + } + bind Console { + tk::ConsoleInsert %W %A + } + bind Console { + eval destroy [winfo child .] + source [file join $tk_library console.tcl] + } + if {[tk windowingsystem] eq "aqua"} { + bind Console { + exit + } + } + bind Console <> { ::tk::console::Cut %W } + bind Console <> { ::tk::console::Copy %W } + bind Console <> { ::tk::console::Paste %W } + + bind Console <> { + set size [font configure TkConsoleFont -size] + font configure TkConsoleFont -size [incr size] + } + bind Console <> { + set size [font configure TkConsoleFont -size] + font configure TkConsoleFont -size [incr size -1] + } + + ## + ## Bindings for doing special things based on certain keys + ## + bind PostConsole { + if {"\\" ne [%W get insert-2c]} { + ::tk::console::MatchPair %W \( \) promptEnd + } + } + bind PostConsole { + if {"\\" ne [%W get insert-2c]} { + ::tk::console::MatchPair %W \[ \] promptEnd + } + } + bind PostConsole { + if {"\\" ne [%W get insert-2c]} { + ::tk::console::MatchPair %W \{ \} promptEnd + } + } + bind PostConsole { + if {"\\" ne [%W get insert-2c]} { + ::tk::console::MatchQuote %W promptEnd + } + } + + bind PostConsole { + if {"%A" ne ""} { + ::tk::console::TagProc %W + } + } +} + +# ::tk::ConsoleInsert -- +# Insert a string into a text at the point of the insertion cursor. +# If there is a selection in the text, and it covers the point of the +# insertion cursor, then delete the selection before inserting. Insertion +# is restricted to the prompt area. +# +# Arguments: +# w - The text window in which to insert the string +# s - The string to insert (usually just a single character) + +proc ::tk::ConsoleInsert {w s} { + if {$s eq ""} { + return + } + catch { + if {[$w compare sel.first <= insert] \ + && [$w compare sel.last >= insert]} { + $w tag remove sel sel.first promptEnd + $w delete sel.first sel.last + } + } + if {[$w compare insert < promptEnd]} { + $w mark set insert end + } + $w insert insert $s {input stdin} + $w see insert +} + +# ::tk::ConsoleOutput -- +# +# This routine is called directly by ConsolePutsCmd to cause a string +# to be displayed in the console. +# +# Arguments: +# dest - The output tag to be used: either "stderr" or "stdout". +# string - The string to be displayed. + +proc ::tk::ConsoleOutput {dest string} { + set w .console + $w insert output $string $dest + ::tk::console::ConstrainBuffer $w $::tk::console::maxLines + $w see insert +} + +# ::tk::ConsoleExit -- +# +# This routine is called by ConsoleEventProc when the main window of +# the application is destroyed. Don't call exit - that probably already +# happened. Just delete our window. +# +# Arguments: +# None. + +proc ::tk::ConsoleExit {} { + destroy . +} + +# ::tk::ConsoleAbout -- +# +# This routine displays an About box to show Tcl/Tk version info. +# +# Arguments: +# None. + +proc ::tk::ConsoleAbout {} { + tk_messageBox -type ok -message "[mc {Tcl for Windows}] + +Tcl $::tcl_patchLevel +Tk $::tk_patchLevel" +} + +# ::tk::console::TagProc -- +# +# Tags a procedure in the console if it's recognized +# This procedure is not perfect. However, making it perfect wastes +# too much CPU time... +# +# Arguments: +# w - console text widget + +proc ::tk::console::TagProc w { + if {!$::tk::console::magicKeys} { + return + } + set exp "\[^\\\\\]\[\[ \t\n\r\;{}\"\$\]" + set i [$w search -backwards -regexp $exp insert-1c promptEnd-1c] + if {$i eq ""} { + set i promptEnd + } else { + append i +2c + } + regsub -all "\[\[\\\\\\?\\*\]" [$w get $i "insert-1c wordend"] {\\\0} c + if {[llength [EvalAttached [list info commands $c]]]} { + $w tag add proc $i "insert-1c wordend" + } else { + $w tag remove proc $i "insert-1c wordend" + } + if {[llength [EvalAttached [list info vars $c]]]} { + $w tag add var $i "insert-1c wordend" + } else { + $w tag remove var $i "insert-1c wordend" + } +} + +# ::tk::console::MatchPair -- +# +# Blinks a matching pair of characters +# c2 is assumed to be at the text index 'insert'. +# This proc is really loopy and took me an hour to figure out given +# all possible combinations with escaping except for escaped \'s. +# It doesn't take into account possible commenting... Oh well. If +# anyone has something better, I'd like to see/use it. This is really +# only efficient for small contexts. +# +# Arguments: +# w - console text widget +# c1 - first char of pair +# c2 - second char of pair +# +# Calls: ::tk::console::Blink + +proc ::tk::console::MatchPair {w c1 c2 {lim 1.0}} { + if {!$::tk::console::magicKeys} { + return + } + if {{} ne [set ix [$w search -back $c1 insert $lim]]} { + while { + [string match {\\} [$w get $ix-1c]] && + [set ix [$w search -back $c1 $ix-1c $lim]] ne {} + } {} + set i1 insert-1c + while {$ix ne {}} { + set i0 $ix + set j 0 + while {[set i0 [$w search $c2 $i0 $i1]] ne {}} { + append i0 +1c + if {[string match {\\} [$w get $i0-2c]]} { + continue + } + incr j + } + if {!$j} { + break + } + set i1 $ix + while {$j && [set ix [$w search -back $c1 $ix $lim]] ne {}} { + if {[string match {\\} [$w get $ix-1c]]} { + continue + } + incr j -1 + } + } + if {[string match {} $ix]} { + set ix [$w index $lim] + } + } else { + set ix [$w index $lim] + } + if {$::tk::console::blinkRange} { + Blink $w $ix [$w index insert] + } else { + Blink $w $ix $ix+1c [$w index insert-1c] [$w index insert] + } +} + +# ::tk::console::MatchQuote -- +# +# Blinks between matching quotes. +# Blinks just the quote if it's unmatched, otherwise blinks quoted string +# The quote to match is assumed to be at the text index 'insert'. +# +# Arguments: +# w - console text widget +# +# Calls: ::tk::console::Blink + +proc ::tk::console::MatchQuote {w {lim 1.0}} { + if {!$::tk::console::magicKeys} { + return + } + set i insert-1c + set j 0 + while {[set i [$w search -back \" $i $lim]] ne {}} { + if {[string match {\\} [$w get $i-1c]]} { + continue + } + if {!$j} { + set i0 $i + } + incr j + } + if {$j&1} { + if {$::tk::console::blinkRange} { + Blink $w $i0 [$w index insert] + } else { + Blink $w $i0 $i0+1c [$w index insert-1c] [$w index insert] + } + } else { + Blink $w [$w index insert-1c] [$w index insert] + } +} + +# ::tk::console::Blink -- +# +# Blinks between n index pairs for a specified duration. +# +# Arguments: +# w - console text widget +# i1 - start index to blink region +# i2 - end index of blink region +# dur - duration in usecs to blink for +# +# Outputs: +# blinks selected characters in $w + +proc ::tk::console::Blink {w args} { + eval [list $w tag add blink] $args + after $::tk::console::blinkTime [list $w] tag remove blink $args +} + +# ::tk::console::ConstrainBuffer -- +# +# This limits the amount of data in the text widget +# Called by Prompt and ConsoleOutput +# +# Arguments: +# w - console text widget +# size - # of lines to constrain to +# +# Outputs: +# may delete data in console widget + +proc ::tk::console::ConstrainBuffer {w size} { + if {[$w index end] > $size} { + $w delete 1.0 [expr {int([$w index end])-$size}].0 + } +} + +# ::tk::console::Expand -- +# +# Arguments: +# ARGS: w - text widget in which to expand str +# type - type of expansion (path / proc / variable) +# +# Calls: ::tk::console::Expand(Pathname|Procname|Variable) +# +# Outputs: The string to match is expanded to the longest possible match. +# If ::tk::console::showMatches is non-zero and the longest match +# equaled the string to expand, then all possible matches are +# output to stdout. Triggers bell if no matches are found. +# +# Returns: number of matches found + +proc ::tk::console::Expand {w {type ""}} { + set exp "\[^\\\\\]\[\[ \t\n\r\\\{\"\\\\\$\]" + set tmp [$w search -backwards -regexp $exp insert-1c promptEnd-1c] + if {$tmp eq ""} { + set tmp promptEnd + } else { + append tmp +2c + } + if {[$w compare $tmp >= insert]} { + return + } + set str [$w get $tmp insert] + switch -glob $type { + path* { + set res [ExpandPathname $str] + } + proc* { + set res [ExpandProcname $str] + } + var* { + set res [ExpandVariable $str] + } + default { + set res {} + foreach t {Pathname Procname Variable} { + if {![catch {Expand$t $str} res] && ($res ne "")} { + break + } + } + } + } + set len [llength $res] + if {$len} { + set repl [lindex $res 0] + $w delete $tmp insert + $w insert $tmp $repl {input stdin} + if {($len > 1) && ($::tk::console::showMatches) && ($repl eq $str)} { + puts stdout [lsort [lreplace $res 0 0]] + } + } else { + bell + } + return [incr len -1] +} + +# ::tk::console::ExpandPathname -- +# +# Expand a file pathname based on $str +# This is based on UNIX file name conventions +# +# Arguments: +# str - partial file pathname to expand +# +# Calls: ::tk::console::ExpandBestMatch +# +# Returns: list containing longest unique match followed by all the +# possible further matches + +proc ::tk::console::ExpandPathname str { + set pwd [EvalAttached pwd] + if {[catch {EvalAttached [list cd [file dirname $str]]} err]} { + return -code error $err + } + set dir [file tail $str] + ## Check to see if it was known to be a directory and keep the trailing + ## slash if so (file tail cuts it off) + if {[string match */ $str]} { + append dir / + } + if {[catch {lsort [EvalAttached [list glob $dir*]]} m]} { + set match {} + } else { + if {[llength $m] > 1} { + global tcl_platform + if {[string match windows $tcl_platform(platform)]} { + ## Windows is screwy because it's case insensitive + set tmp [ExpandBestMatch [string tolower $m] \ + [string tolower $dir]] + ## Don't change case if we haven't changed the word + if {[string length $dir]==[string length $tmp]} { + set tmp $dir + } + } else { + set tmp [ExpandBestMatch $m $dir] + } + if {[string match ?*/* $str]} { + set tmp [file dirname $str]/$tmp + } elseif {[string match /* $str]} { + set tmp /$tmp + } + regsub -all { } $tmp {\\ } tmp + set match [linsert $m 0 $tmp] + } else { + ## This may look goofy, but it handles spaces in path names + eval append match $m + if {[file isdir $match]} { + append match / + } + if {[string match ?*/* $str]} { + set match [file dirname $str]/$match + } elseif {[string match /* $str]} { + set match /$match + } + regsub -all { } $match {\\ } match + ## Why is this one needed and the ones below aren't!! + set match [list $match] + } + } + EvalAttached [list cd $pwd] + return $match +} + +# ::tk::console::ExpandProcname -- +# +# Expand a tcl proc name based on $str +# +# Arguments: +# str - partial proc name to expand +# +# Calls: ::tk::console::ExpandBestMatch +# +# Returns: list containing longest unique match followed by all the +# possible further matches + +proc ::tk::console::ExpandProcname str { + set match [EvalAttached [list info commands $str*]] + if {[llength $match] == 0} { + set ns [EvalAttached \ + "namespace children \[namespace current\] [list $str*]"] + if {[llength $ns]==1} { + set match [EvalAttached [list info commands ${ns}::*]] + } else { + set match $ns + } + } + if {[llength $match] > 1} { + regsub -all { } [ExpandBestMatch $match $str] {\\ } str + set match [linsert $match 0 $str] + } else { + regsub -all { } $match {\\ } match + } + return $match +} + +# ::tk::console::ExpandVariable -- +# +# Expand a tcl variable name based on $str +# +# Arguments: +# str - partial tcl var name to expand +# +# Calls: ::tk::console::ExpandBestMatch +# +# Returns: list containing longest unique match followed by all the +# possible further matches + +proc ::tk::console::ExpandVariable str { + if {[regexp {([^\(]*)\((.*)} $str -> ary str]} { + ## Looks like they're trying to expand an array. + set match [EvalAttached [list array names $ary $str*]] + if {[llength $match] > 1} { + set vars $ary\([ExpandBestMatch $match $str] + foreach var $match { + lappend vars $ary\($var\) + } + return $vars + } elseif {[llength $match] == 1} { + set match $ary\($match\) + } + ## Space transformation avoided for array names. + } else { + set match [EvalAttached [list info vars $str*]] + if {[llength $match] > 1} { + regsub -all { } [ExpandBestMatch $match $str] {\\ } str + set match [linsert $match 0 $str] + } else { + regsub -all { } $match {\\ } match + } + } + return $match +} + +# ::tk::console::ExpandBestMatch -- +# +# Finds the best unique match in a list of names. +# The extra $e in this argument allows us to limit the innermost loop a little +# further. This improves speed as $l becomes large or $e becomes long. +# +# Arguments: +# l - list to find best unique match in +# e - currently best known unique match +# +# Returns: longest unique match in the list + +proc ::tk::console::ExpandBestMatch {l {e {}}} { + set ec [lindex $l 0] + if {[llength $l]>1} { + set e [expr {[string length $e] - 1}] + set ei [expr {[string length $ec] - 1}] + foreach l $l { + while {$ei>=$e && [string first $ec $l]} { + set ec [string range $ec 0 [incr ei -1]] + } + } + } + return $ec +} + +# now initialize the console +::tk::ConsoleInit diff --git a/extensions/fablabchemnitz/inkstitch/bin/tk/dialog.tcl b/extensions/fablabchemnitz/inkstitch/bin/tk/dialog.tcl new file mode 100644 index 00000000..26ec7e0a --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tk/dialog.tcl @@ -0,0 +1,180 @@ +# dialog.tcl -- +# +# This file defines the procedure tk_dialog, which creates a dialog +# box containing a bitmap, a message, and one or more buttons. +# +# Copyright (c) 1992-1993 The Regents of the University of California. +# Copyright (c) 1994-1997 Sun Microsystems, Inc. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. +# + +# +# ::tk_dialog: +# +# This procedure displays a dialog box, waits for a button in the dialog +# to be invoked, then returns the index of the selected button. If the +# dialog somehow gets destroyed, -1 is returned. +# +# Arguments: +# w - Window to use for dialog top-level. +# title - Title to display in dialog's decorative frame. +# text - Message to display in dialog. +# bitmap - Bitmap to display in dialog (empty string means none). +# default - Index of button that is to display the default ring +# (-1 means none). +# args - One or more strings to display in buttons across the +# bottom of the dialog box. + +proc ::tk_dialog {w title text bitmap default args} { + global tcl_platform + variable ::tk::Priv + + # Check that $default was properly given + if {[string is integer -strict $default]} { + if {$default >= [llength $args]} { + return -code error "default button index greater than number of\ + buttons specified for tk_dialog" + } + } elseif {"" eq $default} { + set default -1 + } else { + set default [lsearch -exact $args $default] + } + + set windowingsystem [tk windowingsystem] + if {$windowingsystem eq "aqua"} { + option add *Dialog*background systemDialogBackgroundActive widgetDefault + option add *Dialog*Button.highlightBackground \ + systemDialogBackgroundActive widgetDefault + } + + # 1. Create the top-level window and divide it into top + # and bottom parts. + + destroy $w + toplevel $w -class Dialog + wm title $w $title + wm iconname $w Dialog + wm protocol $w WM_DELETE_WINDOW { } + + # Dialog boxes should be transient with respect to their parent, + # so that they will always stay on top of their parent window. However, + # some window managers will create the window as withdrawn if the parent + # window is withdrawn or iconified. Combined with the grab we put on the + # window, this can hang the entire application. Therefore we only make + # the dialog transient if the parent is viewable. + # + if {[winfo viewable [winfo toplevel [winfo parent $w]]] } { + wm transient $w [winfo toplevel [winfo parent $w]] + } + + if {$windowingsystem eq "aqua"} { + ::tk::unsupported::MacWindowStyle style $w moveableModal {} + } elseif {$windowingsystem eq "x11"} { + wm attributes $w -type dialog + } + + frame $w.bot + frame $w.top + if {$windowingsystem eq "x11"} { + $w.bot configure -relief raised -bd 1 + $w.top configure -relief raised -bd 1 + } + pack $w.bot -side bottom -fill both + pack $w.top -side top -fill both -expand 1 + grid anchor $w.bot center + + # 2. Fill the top part with bitmap and message (use the option + # database for -wraplength and -font so that they can be + # overridden by the caller). + + option add *Dialog.msg.wrapLength 3i widgetDefault + option add *Dialog.msg.font TkCaptionFont widgetDefault + + label $w.msg -justify left -text $text + pack $w.msg -in $w.top -side right -expand 1 -fill both -padx 3m -pady 3m + if {$bitmap ne ""} { + if {$windowingsystem eq "aqua" && $bitmap eq "error"} { + set bitmap "stop" + } + label $w.bitmap -bitmap $bitmap + pack $w.bitmap -in $w.top -side left -padx 3m -pady 3m + } + + # 3. Create a row of buttons at the bottom of the dialog. + + set i 0 + foreach but $args { + button $w.button$i -text $but -command [list set ::tk::Priv(button) $i] + if {$i == $default} { + $w.button$i configure -default active + } else { + $w.button$i configure -default normal + } + grid $w.button$i -in $w.bot -column $i -row 0 -sticky ew \ + -padx 10 -pady 4 + grid columnconfigure $w.bot $i + # We boost the size of some Mac buttons for l&f + if {$windowingsystem eq "aqua"} { + set tmp [string tolower $but] + if {$tmp eq "ok" || $tmp eq "cancel"} { + grid columnconfigure $w.bot $i -minsize 90 + } + grid configure $w.button$i -pady 7 + } + incr i + } + + # 4. Create a binding for on the dialog if there is a + # default button. + # Convention also dictates that if the keyboard focus moves among the + # the buttons that the binding affects the button with the focus. + + if {$default >= 0} { + bind $w [list $w.button$default invoke] + } + bind $w <> [list bind $w {[tk_focusPrev %W] invoke}] + bind $w [list bind $w {[tk_focusNext %W] invoke}] + + # 5. Create a binding for the window that sets the + # button variable to -1; this is needed in case something happens + # that destroys the window, such as its parent window being destroyed. + + bind $w {set ::tk::Priv(button) -1} + + # 6. Withdraw the window, then update all the geometry information + # so we know how big it wants to be, then center the window in the + # display (Motif style) and de-iconify it. + + ::tk::PlaceWindow $w + tkwait visibility $w + + # 7. Set a grab and claim the focus too. + + if {$default >= 0} { + set focus $w.button$default + } else { + set focus $w + } + tk::SetFocusGrab $w $focus + + # 8. Wait for the user to respond, then restore the focus and + # return the index of the selected button. Restore the focus + # before deleting the window, since otherwise the window manager + # may take the focus away so we can't redirect it. Finally, + # restore any grab that was in effect. + + vwait ::tk::Priv(button) + + catch { + # It's possible that the window has already been destroyed, + # hence this "catch". Delete the Destroy handler so that + # Priv(button) doesn't get reset by it. + + bind $w {} + } + tk::RestoreFocusGrab $w $focus + return $Priv(button) +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tk/entry.tcl b/extensions/fablabchemnitz/inkstitch/bin/tk/entry.tcl new file mode 100644 index 00000000..c3e573db --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tk/entry.tcl @@ -0,0 +1,670 @@ +# entry.tcl -- +# +# This file defines the default bindings for Tk entry widgets and provides +# procedures that help in implementing those bindings. +# +# Copyright (c) 1992-1994 The Regents of the University of California. +# Copyright (c) 1994-1997 Sun Microsystems, Inc. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. +# + +#------------------------------------------------------------------------- +# Elements of tk::Priv that are used in this file: +# +# afterId - If non-null, it means that auto-scanning is underway +# and it gives the "after" id for the next auto-scan +# command to be executed. +# mouseMoved - Non-zero means the mouse has moved a significant +# amount since the button went down (so, for example, +# start dragging out a selection). +# pressX - X-coordinate at which the mouse button was pressed. +# selectMode - The style of selection currently underway: +# char, word, or line. +# x, y - Last known mouse coordinates for scanning +# and auto-scanning. +# data - Used for Cut and Copy +#------------------------------------------------------------------------- + +#------------------------------------------------------------------------- +# The code below creates the default class bindings for entries. +#------------------------------------------------------------------------- +bind Entry <> { + if {![catch {tk::EntryGetSelection %W} tk::Priv(data)]} { + clipboard clear -displayof %W + clipboard append -displayof %W $tk::Priv(data) + %W delete sel.first sel.last + unset tk::Priv(data) + } +} +bind Entry <> { + if {![catch {tk::EntryGetSelection %W} tk::Priv(data)]} { + clipboard clear -displayof %W + clipboard append -displayof %W $tk::Priv(data) + unset tk::Priv(data) + } +} +bind Entry <> { + global tcl_platform + catch { + if {[tk windowingsystem] ne "x11"} { + catch { + %W delete sel.first sel.last + } + } + %W insert insert [::tk::GetSelection %W CLIPBOARD] + tk::EntrySeeInsert %W + } +} +bind Entry <> { + # ignore if there is no selection + catch { %W delete sel.first sel.last } +} +bind Entry <> { + if {$tk_strictMotif || ![info exists tk::Priv(mouseMoved)] + || !$tk::Priv(mouseMoved)} { + tk::EntryPaste %W %x + } +} + +bind Entry <> { + %W selection range 0 end + %W icursor end +} + +# Standard Motif bindings: + +bind Entry <1> { + tk::EntryButton1 %W %x + %W selection clear +} +bind Entry { + set tk::Priv(x) %x + tk::EntryMouseSelect %W %x +} +bind Entry { + set tk::Priv(selectMode) word + tk::EntryMouseSelect %W %x + catch {%W icursor sel.last} +} +bind Entry { + set tk::Priv(selectMode) line + tk::EntryMouseSelect %W %x + catch {%W icursor sel.last} +} +bind Entry { + set tk::Priv(selectMode) char + %W selection adjust @%x +} +bind Entry { + set tk::Priv(selectMode) word + tk::EntryMouseSelect %W %x +} +bind Entry { + set tk::Priv(selectMode) line + tk::EntryMouseSelect %W %x +} +bind Entry { + set tk::Priv(x) %x + tk::EntryAutoScan %W +} +bind Entry { + tk::CancelRepeat +} +bind Entry { + tk::CancelRepeat +} +bind Entry { + %W icursor @%x +} + +bind Entry { + tk::EntrySetCursor %W [expr {[%W index insert] - 1}] +} +bind Entry { + tk::EntrySetCursor %W [expr {[%W index insert] + 1}] +} +bind Entry { + tk::EntryKeySelect %W [expr {[%W index insert] - 1}] + tk::EntrySeeInsert %W +} +bind Entry { + tk::EntryKeySelect %W [expr {[%W index insert] + 1}] + tk::EntrySeeInsert %W +} +bind Entry { + tk::EntrySetCursor %W [tk::EntryPreviousWord %W insert] +} +bind Entry { + tk::EntrySetCursor %W [tk::EntryNextWord %W insert] +} +bind Entry { + tk::EntryKeySelect %W [tk::EntryPreviousWord %W insert] + tk::EntrySeeInsert %W +} +bind Entry { + tk::EntryKeySelect %W [tk::EntryNextWord %W insert] + tk::EntrySeeInsert %W +} +bind Entry { + tk::EntrySetCursor %W 0 +} +bind Entry { + tk::EntryKeySelect %W 0 + tk::EntrySeeInsert %W +} +bind Entry { + tk::EntrySetCursor %W end +} +bind Entry { + tk::EntryKeySelect %W end + tk::EntrySeeInsert %W +} + +bind Entry { + if {[%W selection present]} { + %W delete sel.first sel.last + } else { + %W delete insert + } +} +bind Entry { + tk::EntryBackspace %W +} + +bind Entry { + %W selection from insert +} +bind Entry { + tk::ListboxBeginSelect %W [%W index active] +} +bind Listbox { + tk::ListboxBeginExtend %W [%W index active] +} +bind Listbox { + tk::ListboxBeginExtend %W [%W index active] +} +bind Listbox { + tk::ListboxCancel %W +} +bind Listbox { + tk::ListboxSelectAll %W +} +bind Listbox { + if {[%W cget -selectmode] ne "browse"} { + %W selection clear 0 end + tk::FireListboxSelectEvent %W + } +} + +# Additional Tk bindings that aren't part of the Motif look and feel: + +bind Listbox <2> { + %W scan mark %x %y +} +bind Listbox { + %W scan dragto %x %y +} + +# The MouseWheel will typically only fire on Windows and Mac OS X. +# However, someone could use the "event generate" command to produce +# one on other platforms. + +if {[tk windowingsystem] eq "aqua"} { + bind Listbox { + %W yview scroll [expr {- (%D)}] units + } + bind Listbox { + %W yview scroll [expr {-10 * (%D)}] units + } + bind Listbox { + %W xview scroll [expr {- (%D)}] units + } + bind Listbox { + %W xview scroll [expr {-10 * (%D)}] units + } +} else { + bind Listbox { + %W yview scroll [expr {- (%D / 120) * 4}] units + } +} + +if {"x11" eq [tk windowingsystem]} { + # Support for mousewheels on Linux/Unix commonly comes through mapping + # the wheel to the extended buttons. If you have a mousewheel, find + # Linux configuration info at: + # http://www.inria.fr/koala/colas/mouse-wheel-scroll/ + bind Listbox <4> { + if {!$tk_strictMotif} { + %W yview scroll -5 units + } + } + bind Listbox <5> { + if {!$tk_strictMotif} { + %W yview scroll 5 units + } + } +} + +# ::tk::ListboxBeginSelect -- +# +# This procedure is typically invoked on button-1 presses. It begins +# the process of making a selection in the listbox. Its exact behavior +# depends on the selection mode currently in effect for the listbox; +# see the Motif documentation for details. +# +# Arguments: +# w - The listbox widget. +# el - The element for the selection operation (typically the +# one under the pointer). Must be in numerical form. + +proc ::tk::ListboxBeginSelect {w el {focus 1}} { + variable ::tk::Priv + if {[$w cget -selectmode] eq "multiple"} { + if {[$w selection includes $el]} { + $w selection clear $el + } else { + $w selection set $el + } + } else { + $w selection clear 0 end + $w selection set $el + $w selection anchor $el + set Priv(listboxSelection) {} + set Priv(listboxPrev) $el + } + tk::FireListboxSelectEvent $w + # check existence as ListboxSelect may destroy us + if {$focus && [winfo exists $w] && [$w cget -state] eq "normal"} { + focus $w + } +} + +# ::tk::ListboxMotion -- +# +# This procedure is called to process mouse motion events while +# button 1 is down. It may move or extend the selection, depending +# on the listbox's selection mode. +# +# Arguments: +# w - The listbox widget. +# el - The element under the pointer (must be a number). + +proc ::tk::ListboxMotion {w el} { + variable ::tk::Priv + if {$el == $Priv(listboxPrev)} { + return + } + set anchor [$w index anchor] + switch [$w cget -selectmode] { + browse { + $w selection clear 0 end + $w selection set $el + set Priv(listboxPrev) $el + tk::FireListboxSelectEvent $w + } + extended { + set i $Priv(listboxPrev) + if {$i eq ""} { + set i $el + $w selection set $el + } + if {[$w selection includes anchor]} { + $w selection clear $i $el + $w selection set anchor $el + } else { + $w selection clear $i $el + $w selection clear anchor $el + } + if {![info exists Priv(listboxSelection)]} { + set Priv(listboxSelection) [$w curselection] + } + while {($i < $el) && ($i < $anchor)} { + if {[lsearch $Priv(listboxSelection) $i] >= 0} { + $w selection set $i + } + incr i + } + while {($i > $el) && ($i > $anchor)} { + if {[lsearch $Priv(listboxSelection) $i] >= 0} { + $w selection set $i + } + incr i -1 + } + set Priv(listboxPrev) $el + tk::FireListboxSelectEvent $w + } + } +} + +# ::tk::ListboxBeginExtend -- +# +# This procedure is typically invoked on shift-button-1 presses. It +# begins the process of extending a selection in the listbox. Its +# exact behavior depends on the selection mode currently in effect +# for the listbox; see the Motif documentation for details. +# +# Arguments: +# w - The listbox widget. +# el - The element for the selection operation (typically the +# one under the pointer). Must be in numerical form. + +proc ::tk::ListboxBeginExtend {w el} { + if {[$w cget -selectmode] eq "extended"} { + if {[$w selection includes anchor]} { + ListboxMotion $w $el + } else { + # No selection yet; simulate the begin-select operation. + ListboxBeginSelect $w $el + } + } +} + +# ::tk::ListboxBeginToggle -- +# +# This procedure is typically invoked on control-button-1 presses. It +# begins the process of toggling a selection in the listbox. Its +# exact behavior depends on the selection mode currently in effect +# for the listbox; see the Motif documentation for details. +# +# Arguments: +# w - The listbox widget. +# el - The element for the selection operation (typically the +# one under the pointer). Must be in numerical form. + +proc ::tk::ListboxBeginToggle {w el} { + variable ::tk::Priv + if {[$w cget -selectmode] eq "extended"} { + set Priv(listboxSelection) [$w curselection] + set Priv(listboxPrev) $el + $w selection anchor $el + if {[$w selection includes $el]} { + $w selection clear $el + } else { + $w selection set $el + } + tk::FireListboxSelectEvent $w + } +} + +# ::tk::ListboxAutoScan -- +# This procedure is invoked when the mouse leaves an entry window +# with button 1 down. It scrolls the window up, down, left, or +# right, depending on where the mouse left the window, and reschedules +# itself as an "after" command so that the window continues to scroll until +# the mouse moves back into the window or the mouse button is released. +# +# Arguments: +# w - The entry window. + +proc ::tk::ListboxAutoScan {w} { + variable ::tk::Priv + if {![winfo exists $w]} return + set x $Priv(x) + set y $Priv(y) + if {$y >= [winfo height $w]} { + $w yview scroll 1 units + } elseif {$y < 0} { + $w yview scroll -1 units + } elseif {$x >= [winfo width $w]} { + $w xview scroll 2 units + } elseif {$x < 0} { + $w xview scroll -2 units + } else { + return + } + ListboxMotion $w [$w index @$x,$y] + set Priv(afterId) [after 50 [list tk::ListboxAutoScan $w]] +} + +# ::tk::ListboxUpDown -- +# +# Moves the location cursor (active element) up or down by one element, +# and changes the selection if we're in browse or extended selection +# mode. +# +# Arguments: +# w - The listbox widget. +# amount - +1 to move down one item, -1 to move back one item. + +proc ::tk::ListboxUpDown {w amount} { + variable ::tk::Priv + $w activate [expr {[$w index active] + $amount}] + $w see active + switch [$w cget -selectmode] { + browse { + $w selection clear 0 end + $w selection set active + tk::FireListboxSelectEvent $w + } + extended { + $w selection clear 0 end + $w selection set active + $w selection anchor active + set Priv(listboxPrev) [$w index active] + set Priv(listboxSelection) {} + tk::FireListboxSelectEvent $w + } + } +} + +# ::tk::ListboxExtendUpDown -- +# +# Does nothing unless we're in extended selection mode; in this +# case it moves the location cursor (active element) up or down by +# one element, and extends the selection to that point. +# +# Arguments: +# w - The listbox widget. +# amount - +1 to move down one item, -1 to move back one item. + +proc ::tk::ListboxExtendUpDown {w amount} { + variable ::tk::Priv + if {[$w cget -selectmode] ne "extended"} { + return + } + set active [$w index active] + if {![info exists Priv(listboxSelection)]} { + $w selection set $active + set Priv(listboxSelection) [$w curselection] + } + $w activate [expr {$active + $amount}] + $w see active + ListboxMotion $w [$w index active] +} + +# ::tk::ListboxDataExtend +# +# This procedure is called for key-presses such as Shift-KEndData. +# If the selection mode isn't multiple or extend then it does nothing. +# Otherwise it moves the active element to el and, if we're in +# extended mode, extends the selection to that point. +# +# Arguments: +# w - The listbox widget. +# el - An integer element number. + +proc ::tk::ListboxDataExtend {w el} { + set mode [$w cget -selectmode] + if {$mode eq "extended"} { + $w activate $el + $w see $el + if {[$w selection includes anchor]} { + ListboxMotion $w $el + } + } elseif {$mode eq "multiple"} { + $w activate $el + $w see $el + } +} + +# ::tk::ListboxCancel +# +# This procedure is invoked to cancel an extended selection in +# progress. If there is an extended selection in progress, it +# restores all of the items between the active one and the anchor +# to their previous selection state. +# +# Arguments: +# w - The listbox widget. + +proc ::tk::ListboxCancel w { + variable ::tk::Priv + if {[$w cget -selectmode] ne "extended"} { + return + } + set first [$w index anchor] + set last $Priv(listboxPrev) + if {$last eq ""} { + # Not actually doing any selection right now + return + } + if {$first > $last} { + set tmp $first + set first $last + set last $tmp + } + $w selection clear $first $last + while {$first <= $last} { + if {[lsearch $Priv(listboxSelection) $first] >= 0} { + $w selection set $first + } + incr first + } + tk::FireListboxSelectEvent $w +} + +# ::tk::ListboxSelectAll +# +# This procedure is invoked to handle the "select all" operation. +# For single and browse mode, it just selects the active element. +# Otherwise it selects everything in the widget. +# +# Arguments: +# w - The listbox widget. + +proc ::tk::ListboxSelectAll w { + set mode [$w cget -selectmode] + if {$mode eq "single" || $mode eq "browse"} { + $w selection clear 0 end + $w selection set active + } else { + $w selection set 0 end + } + tk::FireListboxSelectEvent $w +} + +# ::tk::FireListboxSelectEvent +# +# Fire the <> event if the listbox is not in disabled +# state. +# +# Arguments: +# w - The listbox widget. + +proc ::tk::FireListboxSelectEvent w { + if {[$w cget -state] eq "normal"} { + event generate $w <> + } +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tk/menu.tcl b/extensions/fablabchemnitz/inkstitch/bin/tk/menu.tcl new file mode 100644 index 00000000..48754773 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tk/menu.tcl @@ -0,0 +1,1357 @@ +# menu.tcl -- +# +# This file defines the default bindings for Tk menus and menubuttons. +# It also implements keyboard traversal of menus and implements a few +# other utility procedures related to menus. +# +# Copyright (c) 1992-1994 The Regents of the University of California. +# Copyright (c) 1994-1997 Sun Microsystems, Inc. +# Copyright (c) 1998-1999 by Scriptics Corporation. +# Copyright (c) 2007 Daniel A. Steffen +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. +# + +#------------------------------------------------------------------------- +# Elements of tk::Priv that are used in this file: +# +# cursor - Saves the -cursor option for the posted menubutton. +# focus - Saves the focus during a menu selection operation. +# Focus gets restored here when the menu is unposted. +# grabGlobal - Used in conjunction with tk::Priv(oldGrab): if +# tk::Priv(oldGrab) is non-empty, then tk::Priv(grabGlobal) +# contains either an empty string or "-global" to +# indicate whether the old grab was a local one or +# a global one. +# inMenubutton - The name of the menubutton widget containing +# the mouse, or an empty string if the mouse is +# not over any menubutton. +# menuBar - The name of the menubar that is the root +# of the cascade hierarchy which is currently +# posted. This is null when there is no menu currently +# being pulled down from a menu bar. +# oldGrab - Window that had the grab before a menu was posted. +# Used to restore the grab state after the menu +# is unposted. Empty string means there was no +# grab previously set. +# popup - If a menu has been popped up via tk_popup, this +# gives the name of the menu. Otherwise this +# value is empty. +# postedMb - Name of the menubutton whose menu is currently +# posted, or an empty string if nothing is posted +# A grab is set on this widget. +# relief - Used to save the original relief of the current +# menubutton. +# window - When the mouse is over a menu, this holds the +# name of the menu; it's cleared when the mouse +# leaves the menu. +# tearoff - Whether the last menu posted was a tearoff or not. +# This is true always for unix, for tearoffs for Mac +# and Windows. +# activeMenu - This is the last active menu for use +# with the <> virtual event. +# activeItem - This is the last active menu item for +# use with the <> virtual event. +#------------------------------------------------------------------------- + +#------------------------------------------------------------------------- +# Overall note: +# This file is tricky because there are five different ways that menus +# can be used: +# +# 1. As a pulldown from a menubutton. In this style, the variable +# tk::Priv(postedMb) identifies the posted menubutton. +# 2. As a torn-off menu copied from some other menu. In this style +# tk::Priv(postedMb) is empty, and menu's type is "tearoff". +# 3. As an option menu, triggered from an option menubutton. In this +# style tk::Priv(postedMb) identifies the posted menubutton. +# 4. As a popup menu. In this style tk::Priv(postedMb) is empty and +# the top-level menu's type is "normal". +# 5. As a pulldown from a menubar. The variable tk::Priv(menubar) has +# the owning menubar, and the menu itself is of type "normal". +# +# The various binding procedures use the state described above to +# distinguish the various cases and take different actions in each +# case. +#------------------------------------------------------------------------- + +#------------------------------------------------------------------------- +# The code below creates the default class bindings for menus +# and menubuttons. +#------------------------------------------------------------------------- + +bind Menubutton {} +bind Menubutton { + tk::MbEnter %W +} +bind Menubutton { + tk::MbLeave %W +} +bind Menubutton <1> { + if {$tk::Priv(inMenubutton) ne ""} { + tk::MbPost $tk::Priv(inMenubutton) %X %Y + } +} +bind Menubutton { + tk::MbMotion %W up %X %Y +} +bind Menubutton { + tk::MbMotion %W down %X %Y +} +bind Menubutton { + tk::MbButtonUp %W +} +bind Menubutton { + tk::MbPost %W + tk::MenuFirstEntry [%W cget -menu] +} +bind Menubutton <> { + tk::MbPost %W + tk::MenuFirstEntry [%W cget -menu] +} + +# Must set focus when mouse enters a menu, in order to allow +# mixed-mode processing using both the mouse and the keyboard. +# Don't set the focus if the event comes from a grab release, +# though: such an event can happen after as part of unposting +# a cascaded chain of menus, after the focus has already been +# restored to wherever it was before menu selection started. + +bind Menu {} + +bind Menu { + set tk::Priv(window) %W + if {[%W cget -type] eq "tearoff"} { + if {"%m" ne "NotifyUngrab"} { + if {[tk windowingsystem] eq "x11"} { + tk_menuSetFocus %W + } + } + } + tk::MenuMotion %W %x %y %s +} + +bind Menu { + tk::MenuLeave %W %X %Y %s +} +bind Menu { + tk::MenuMotion %W %x %y %s +} +bind Menu { + tk::MenuButtonDown %W +} +bind Menu { + tk::MenuInvoke %W 1 +} +bind Menu { + tk::MenuInvoke %W 0 +} +bind Menu <> { + tk::MenuInvoke %W 0 +} +bind Menu { + tk::MenuInvoke %W 0 +} +bind Menu { + tk::MenuEscape %W +} +bind Menu { + tk::MenuLeftArrow %W +} +bind Menu { + tk::MenuRightArrow %W +} +bind Menu { + tk::MenuUpArrow %W +} +bind Menu { + tk::MenuDownArrow %W +} +bind Menu { + tk::TraverseWithinMenu %W %A +} + +# The following bindings apply to all windows, and are used to +# implement keyboard menu traversal. + +if {[tk windowingsystem] eq "x11"} { + bind all { + tk::TraverseToMenu %W %A + } + + bind all { + tk::FirstMenu %W + } +} else { + bind Menubutton { + tk::TraverseToMenu %W %A + } + + bind Menubutton { + tk::FirstMenu %W + } +} + +# ::tk::MbEnter -- +# This procedure is invoked when the mouse enters a menubutton +# widget. It activates the widget unless it is disabled. Note: +# this procedure is only invoked when mouse button 1 is *not* down. +# The procedure ::tk::MbB1Enter is invoked if the button is down. +# +# Arguments: +# w - The name of the widget. + +proc ::tk::MbEnter w { + variable ::tk::Priv + + if {$Priv(inMenubutton) ne ""} { + MbLeave $Priv(inMenubutton) + } + set Priv(inMenubutton) $w + if {[$w cget -state] ne "disabled" && [tk windowingsystem] ne "aqua"} { + $w configure -state active + } +} + +# ::tk::MbLeave -- +# This procedure is invoked when the mouse leaves a menubutton widget. +# It de-activates the widget, if the widget still exists. +# +# Arguments: +# w - The name of the widget. + +proc ::tk::MbLeave w { + variable ::tk::Priv + + set Priv(inMenubutton) {} + if {![winfo exists $w]} { + return + } + if {[$w cget -state] eq "active" && [tk windowingsystem] ne "aqua"} { + $w configure -state normal + } +} + +# ::tk::MbPost -- +# Given a menubutton, this procedure does all the work of posting +# its associated menu and unposting any other menu that is currently +# posted. +# +# Arguments: +# w - The name of the menubutton widget whose menu +# is to be posted. +# x, y - Root coordinates of cursor, used for positioning +# option menus. If not specified, then the center +# of the menubutton is used for an option menu. + +proc ::tk::MbPost {w {x {}} {y {}}} { + global errorInfo + variable ::tk::Priv + global tcl_platform + + if {[$w cget -state] eq "disabled" || $w eq $Priv(postedMb)} { + return + } + set menu [$w cget -menu] + if {$menu eq ""} { + return + } + set tearoff [expr {[tk windowingsystem] eq "x11" \ + || [$menu cget -type] eq "tearoff"}] + if {[string first $w $menu] != 0} { + error "can't post $menu: it isn't a descendant of $w (this is a new requirement in Tk versions 3.0 and later)" + } + set cur $Priv(postedMb) + if {$cur ne ""} { + MenuUnpost {} + } + if {$::tk_strictMotif} { + set Priv(cursor) [$w cget -cursor] + $w configure -cursor arrow + } + if {[tk windowingsystem] ne "aqua"} { + set Priv(relief) [$w cget -relief] + $w configure -relief raised + } else { + $w configure -state active + } + + set Priv(postedMb) $w + set Priv(focus) [focus] + $menu activate none + GenerateMenuSelect $menu + + # If this looks like an option menubutton then post the menu so + # that the current entry is on top of the mouse. Otherwise post + # the menu just below the menubutton, as for a pull-down. + + update idletasks + if {[catch { + switch [$w cget -direction] { + above { + set x [winfo rootx $w] + set y [expr {[winfo rooty $w] - [winfo reqheight $menu]}] + # if we go offscreen to the top, show as 'below' + if {$y < [winfo vrooty $w]} { + set y [expr {[winfo vrooty $w] + [winfo rooty $w] + [winfo reqheight $w]}] + } + PostOverPoint $menu $x $y + } + below { + set x [winfo rootx $w] + set y [expr {[winfo rooty $w] + [winfo height $w]}] + # if we go offscreen to the bottom, show as 'above' + set mh [winfo reqheight $menu] + if {($y + $mh) > ([winfo vrooty $w] + [winfo vrootheight $w])} { + set y [expr {[winfo vrooty $w] + [winfo vrootheight $w] + [winfo rooty $w] - $mh}] + } + PostOverPoint $menu $x $y + } + left { + set x [expr {[winfo rootx $w] - [winfo reqwidth $menu]}] + set y [expr {(2 * [winfo rooty $w] + [winfo height $w]) / 2}] + set entry [MenuFindName $menu [$w cget -text]] + if {$entry eq ""} { + set entry 0 + } + if {[$w cget -indicatoron]} { + if {$entry == [$menu index last]} { + incr y [expr {-([$menu yposition $entry] \ + + [winfo reqheight $menu])/2}] + } else { + incr y [expr {-([$menu yposition $entry] \ + + [$menu yposition [expr {$entry+1}]])/2}] + } + } + PostOverPoint $menu $x $y + if {$entry ne "" \ + && [$menu entrycget $entry -state] ne "disabled"} { + $menu activate $entry + GenerateMenuSelect $menu + } + } + right { + set x [expr {[winfo rootx $w] + [winfo width $w]}] + set y [expr {(2 * [winfo rooty $w] + [winfo height $w]) / 2}] + set entry [MenuFindName $menu [$w cget -text]] + if {$entry eq ""} { + set entry 0 + } + if {[$w cget -indicatoron]} { + if {$entry == [$menu index last]} { + incr y [expr {-([$menu yposition $entry] \ + + [winfo reqheight $menu])/2}] + } else { + incr y [expr {-([$menu yposition $entry] \ + + [$menu yposition [expr {$entry+1}]])/2}] + } + } + PostOverPoint $menu $x $y + if {$entry ne "" \ + && [$menu entrycget $entry -state] ne "disabled"} { + $menu activate $entry + GenerateMenuSelect $menu + } + } + default { + if {[$w cget -indicatoron]} { + if {$y eq ""} { + set x [expr {[winfo rootx $w] + [winfo width $w]/2}] + set y [expr {[winfo rooty $w] + [winfo height $w]/2}] + } + PostOverPoint $menu $x $y [MenuFindName $menu [$w cget -text]] + } else { + PostOverPoint $menu [winfo rootx $w] [expr {[winfo rooty $w]+[winfo height $w]}] + } + } + } + } msg]} { + # Error posting menu (e.g. bogus -postcommand). Unpost it and + # reflect the error. + + set savedInfo $errorInfo + MenuUnpost {} + error $msg $savedInfo + + } + + set Priv(tearoff) $tearoff + if {$tearoff != 0} { + focus $menu + if {[winfo viewable $w]} { + SaveGrabInfo $w + grab -global $w + } + } +} + +# ::tk::MenuUnpost -- +# This procedure unposts a given menu, plus all of its ancestors up +# to (and including) a menubutton, if any. It also restores various +# values to what they were before the menu was posted, and releases +# a grab if there's a menubutton involved. Special notes: +# 1. It's important to unpost all menus before releasing the grab, so +# that any Enter-Leave events (e.g. from menu back to main +# application) have mode NotifyGrab. +# 2. Be sure to enclose various groups of commands in "catch" so that +# the procedure will complete even if the menubutton or the menu +# or the grab window has been deleted. +# +# Arguments: +# menu - Name of a menu to unpost. Ignored if there +# is a posted menubutton. + +proc ::tk::MenuUnpost menu { + global tcl_platform + variable ::tk::Priv + set mb $Priv(postedMb) + + # Restore focus right away (otherwise X will take focus away when + # the menu is unmapped and under some window managers (e.g. olvwm) + # we'll lose the focus completely). + + catch {focus $Priv(focus)} + set Priv(focus) "" + + # Unpost menu(s) and restore some stuff that's dependent on + # what was posted. + + after cancel [array get Priv menuActivatedTimer] + unset -nocomplain Priv(menuActivated) + after cancel [array get Priv menuDeactivatedTimer] + unset -nocomplain Priv(menuDeactivated) + + catch { + if {$mb ne ""} { + set menu [$mb cget -menu] + $menu unpost + set Priv(postedMb) {} + if {$::tk_strictMotif} { + $mb configure -cursor $Priv(cursor) + } + if {[tk windowingsystem] ne "aqua"} { + $mb configure -relief $Priv(relief) + } else { + $mb configure -state normal + } + } elseif {$Priv(popup) ne ""} { + $Priv(popup) unpost + set Priv(popup) {} + } elseif {[$menu cget -type] ne "menubar" && [$menu cget -type] ne "tearoff"} { + # We're in a cascaded sub-menu from a torn-off menu or popup. + # Unpost all the menus up to the toplevel one (but not + # including the top-level torn-off one) and deactivate the + # top-level torn off menu if there is one. + + while {1} { + set parent [winfo parent $menu] + if {[winfo class $parent] ne "Menu" || ![winfo ismapped $parent]} { + break + } + $parent activate none + $parent postcascade none + GenerateMenuSelect $parent + set type [$parent cget -type] + if {$type eq "menubar" || $type eq "tearoff"} { + break + } + set menu $parent + } + if {[$menu cget -type] ne "menubar"} { + $menu unpost + } + } + } + + if {($Priv(tearoff) != 0) || $Priv(menuBar) ne ""} { + # Release grab, if any, and restore the previous grab, if there + # was one. + if {$menu ne ""} { + set grab [grab current $menu] + if {$grab ne ""} { + grab release $grab + } + } + RestoreOldGrab + if {$Priv(menuBar) ne ""} { + if {$::tk_strictMotif} { + $Priv(menuBar) configure -cursor $Priv(cursor) + } + set Priv(menuBar) {} + } + if {[tk windowingsystem] ne "x11"} { + set Priv(tearoff) 0 + } + } +} + +# ::tk::MbMotion -- +# This procedure handles mouse motion events inside menubuttons, and +# also outside menubuttons when a menubutton has a grab (e.g. when a +# menu selection operation is in progress). +# +# Arguments: +# w - The name of the menubutton widget. +# upDown - "down" means button 1 is pressed, "up" means +# it isn't. +# rootx, rooty - Coordinates of mouse, in (virtual?) root window. + +proc ::tk::MbMotion {w upDown rootx rooty} { + variable ::tk::Priv + + if {$Priv(inMenubutton) eq $w} { + return + } + set new [winfo containing $rootx $rooty] + if {$new ne $Priv(inMenubutton) \ + && ($new eq "" || [winfo toplevel $new] eq [winfo toplevel $w])} { + if {$Priv(inMenubutton) ne ""} { + MbLeave $Priv(inMenubutton) + } + if {$new ne "" \ + && [winfo class $new] eq "Menubutton" \ + && ([$new cget -indicatoron] == 0) \ + && ([$w cget -indicatoron] == 0)} { + if {$upDown eq "down"} { + MbPost $new $rootx $rooty + } else { + MbEnter $new + } + } + } +} + +# ::tk::MbButtonUp -- +# This procedure is invoked to handle button 1 releases for menubuttons. +# If the release happens inside the menubutton then leave its menu +# posted with element 0 activated. Otherwise, unpost the menu. +# +# Arguments: +# w - The name of the menubutton widget. + +proc ::tk::MbButtonUp w { + variable ::tk::Priv + global tcl_platform + + set menu [$w cget -menu] + set tearoff [expr {[tk windowingsystem] eq "x11" || \ + ($menu ne "" && [$menu cget -type] eq "tearoff")}] + if {($tearoff != 0) && $Priv(postedMb) eq $w \ + && $Priv(inMenubutton) eq $w} { + MenuFirstEntry [$Priv(postedMb) cget -menu] + } else { + MenuUnpost {} + } +} + +# ::tk::MenuMotion -- +# This procedure is called to handle mouse motion events for menus. +# It does two things. First, it resets the active element in the +# menu, if the mouse is over the menu. Second, if a mouse button +# is down, it posts and unposts cascade entries to match the mouse +# position. +# +# Arguments: +# menu - The menu window. +# x - The x position of the mouse. +# y - The y position of the mouse. +# state - Modifier state (tells whether buttons are down). + +proc ::tk::MenuMotion {menu x y state} { + variable ::tk::Priv + if {$menu eq $Priv(window)} { + set activeindex [$menu index active] + if {[$menu cget -type] eq "menubar"} { + if {[info exists Priv(focus)] && $menu ne $Priv(focus)} { + $menu activate @$x,$y + GenerateMenuSelect $menu + } + } else { + $menu activate @$x,$y + GenerateMenuSelect $menu + } + set index [$menu index @$x,$y] + if {[info exists Priv(menuActivated)] \ + && $index ne "none" \ + && $index ne $activeindex} { + set mode [option get $menu clickToFocus ClickToFocus] + if {[string is false $mode]} { + set delay [expr {[$menu cget -type] eq "menubar" ? 0 : 50}] + if {[$menu type $index] eq "cascade"} { + set Priv(menuActivatedTimer) \ + [after $delay [list $menu postcascade active]] + } else { + set Priv(menuDeactivatedTimer) \ + [after $delay [list $menu postcascade none]] + } + } + } + } +} + +# ::tk::MenuButtonDown -- +# Handles button presses in menus. There are a couple of tricky things +# here: +# 1. Change the posted cascade entry (if any) to match the mouse position. +# 2. If there is a posted menubutton, must grab to the menubutton; this +# overrrides the implicit grab on button press, so that the menu +# button can track mouse motions over other menubuttons and change +# the posted menu. +# 3. If there's no posted menubutton (e.g. because we're a torn-off menu +# or one of its descendants) must grab to the top-level menu so that +# we can track mouse motions across the entire menu hierarchy. +# +# Arguments: +# menu - The menu window. + +proc ::tk::MenuButtonDown menu { + variable ::tk::Priv + global tcl_platform + + if {![winfo viewable $menu]} { + return + } + $menu postcascade active + if {$Priv(postedMb) ne "" && [winfo viewable $Priv(postedMb)]} { + grab -global $Priv(postedMb) + } else { + while {[$menu cget -type] eq "normal" \ + && [winfo class [winfo parent $menu]] eq "Menu" \ + && [winfo ismapped [winfo parent $menu]]} { + set menu [winfo parent $menu] + } + + if {$Priv(menuBar) eq {}} { + set Priv(menuBar) $menu + if {$::tk_strictMotif} { + set Priv(cursor) [$menu cget -cursor] + $menu configure -cursor arrow + } + if {[$menu type active] eq "cascade"} { + set Priv(menuActivated) 1 + } + } + + # Don't update grab information if the grab window isn't changing. + # Otherwise, we'll get an error when we unpost the menus and + # restore the grab, since the old grab window will not be viewable + # anymore. + + if {$menu ne [grab current $menu]} { + SaveGrabInfo $menu + } + + # Must re-grab even if the grab window hasn't changed, in order + # to release the implicit grab from the button press. + + if {[tk windowingsystem] eq "x11"} { + grab -global $menu + } + } +} + +# ::tk::MenuLeave -- +# This procedure is invoked to handle Leave events for a menu. It +# deactivates everything unless the active element is a cascade element +# and the mouse is now over the submenu. +# +# Arguments: +# menu - The menu window. +# rootx, rooty - Root coordinates of mouse. +# state - Modifier state. + +proc ::tk::MenuLeave {menu rootx rooty state} { + variable ::tk::Priv + set Priv(window) {} + if {[$menu index active] eq "none"} { + return + } + if {[$menu type active] eq "cascade" \ + && [winfo containing $rootx $rooty] eq \ + [$menu entrycget active -menu]} { + return + } + $menu activate none + GenerateMenuSelect $menu +} + +# ::tk::MenuInvoke -- +# This procedure is invoked when button 1 is released over a menu. +# It invokes the appropriate menu action and unposts the menu if +# it came from a menubutton. +# +# Arguments: +# w - Name of the menu widget. +# buttonRelease - 1 means this procedure is called because of +# a button release; 0 means because of keystroke. + +proc ::tk::MenuInvoke {w buttonRelease} { + variable ::tk::Priv + + if {$buttonRelease && $Priv(window) eq ""} { + # Mouse was pressed over a menu without a menu button, then + # dragged off the menu (possibly with a cascade posted) and + # released. Unpost everything and quit. + + $w postcascade none + $w activate none + event generate $w <> + MenuUnpost $w + return + } + if {[$w type active] eq "cascade"} { + $w postcascade active + set menu [$w entrycget active -menu] + MenuFirstEntry $menu + } elseif {[$w type active] eq "tearoff"} { + ::tk::TearOffMenu $w + MenuUnpost $w + } elseif {[$w cget -type] eq "menubar"} { + $w postcascade none + set active [$w index active] + set isCascade [string equal [$w type $active] "cascade"] + + # Only de-activate the active item if it's a cascade; this prevents + # the annoying "activation flicker" you otherwise get with + # checkbuttons/commands/etc. on menubars + + if { $isCascade } { + $w activate none + event generate $w <> + } + + MenuUnpost $w + + # If the active item is not a cascade, invoke it. This enables + # the use of checkbuttons/commands/etc. on menubars (which is legal, + # but not recommended) + + if { !$isCascade } { + uplevel #0 [list $w invoke $active] + } + } else { + set active [$w index active] + if {$Priv(popup) eq "" || $active ne "none"} { + MenuUnpost $w + } + uplevel #0 [list $w invoke active] + } +} + +# ::tk::MenuEscape -- +# This procedure is invoked for the Cancel (or Escape) key. It unposts +# the given menu and, if it is the top-level menu for a menu button, +# unposts the menu button as well. +# +# Arguments: +# menu - Name of the menu window. + +proc ::tk::MenuEscape menu { + set parent [winfo parent $menu] + if {[winfo class $parent] ne "Menu"} { + MenuUnpost $menu + } elseif {[$parent cget -type] eq "menubar"} { + MenuUnpost $menu + RestoreOldGrab + } else { + MenuNextMenu $menu left + } +} + +# The following routines handle arrow keys. Arrow keys behave +# differently depending on whether the menu is a menu bar or not. + +proc ::tk::MenuUpArrow {menu} { + if {[$menu cget -type] eq "menubar"} { + MenuNextMenu $menu left + } else { + MenuNextEntry $menu -1 + } +} + +proc ::tk::MenuDownArrow {menu} { + if {[$menu cget -type] eq "menubar"} { + MenuNextMenu $menu right + } else { + MenuNextEntry $menu 1 + } +} + +proc ::tk::MenuLeftArrow {menu} { + if {[$menu cget -type] eq "menubar"} { + MenuNextEntry $menu -1 + } else { + MenuNextMenu $menu left + } +} + +proc ::tk::MenuRightArrow {menu} { + if {[$menu cget -type] eq "menubar"} { + MenuNextEntry $menu 1 + } else { + MenuNextMenu $menu right + } +} + +# ::tk::MenuNextMenu -- +# This procedure is invoked to handle "left" and "right" traversal +# motions in menus. It traverses to the next menu in a menu bar, +# or into or out of a cascaded menu. +# +# Arguments: +# menu - The menu that received the keyboard +# event. +# direction - Direction in which to move: "left" or "right" + +proc ::tk::MenuNextMenu {menu direction} { + variable ::tk::Priv + + # First handle traversals into and out of cascaded menus. + + if {$direction eq "right"} { + set count 1 + set parent [winfo parent $menu] + set class [winfo class $parent] + if {[$menu type active] eq "cascade"} { + $menu postcascade active + set m2 [$menu entrycget active -menu] + if {$m2 ne ""} { + MenuFirstEntry $m2 + } + return + } else { + set parent [winfo parent $menu] + while {$parent ne "."} { + if {[winfo class $parent] eq "Menu" \ + && [$parent cget -type] eq "menubar"} { + tk_menuSetFocus $parent + MenuNextEntry $parent 1 + return + } + set parent [winfo parent $parent] + } + } + } else { + set count -1 + set m2 [winfo parent $menu] + if {[winfo class $m2] eq "Menu"} { + $menu activate none + GenerateMenuSelect $menu + tk_menuSetFocus $m2 + + $m2 postcascade none + + if {[$m2 cget -type] ne "menubar"} { + return + } + } + } + + # Can't traverse into or out of a cascaded menu. Go to the next + # or previous menubutton, if that makes sense. + + set m2 [winfo parent $menu] + if {[winfo class $m2] eq "Menu" && [$m2 cget -type] eq "menubar"} { + tk_menuSetFocus $m2 + MenuNextEntry $m2 -1 + return + } + + set w $Priv(postedMb) + if {$w eq ""} { + return + } + set buttons [winfo children [winfo parent $w]] + set length [llength $buttons] + set i [expr {[lsearch -exact $buttons $w] + $count}] + while {1} { + while {$i < 0} { + incr i $length + } + while {$i >= $length} { + incr i -$length + } + set mb [lindex $buttons $i] + if {[winfo class $mb] eq "Menubutton" \ + && [$mb cget -state] ne "disabled" \ + && [$mb cget -menu] ne "" \ + && [[$mb cget -menu] index last] ne "none"} { + break + } + if {$mb eq $w} { + return + } + incr i $count + } + MbPost $mb + MenuFirstEntry [$mb cget -menu] +} + +# ::tk::MenuNextEntry -- +# Activate the next higher or lower entry in the posted menu, +# wrapping around at the ends. Disabled entries are skipped. +# +# Arguments: +# menu - Menu window that received the keystroke. +# count - 1 means go to the next lower entry, +# -1 means go to the next higher entry. + +proc ::tk::MenuNextEntry {menu count} { + if {[$menu index last] eq "none"} { + return + } + set length [expr {[$menu index last]+1}] + set quitAfter $length + set active [$menu index active] + if {$active eq "none"} { + set i 0 + } else { + set i [expr {$active + $count}] + } + while {1} { + if {$quitAfter <= 0} { + # We've tried every entry in the menu. Either there are + # none, or they're all disabled. Just give up. + + return + } + while {$i < 0} { + incr i $length + } + while {$i >= $length} { + incr i -$length + } + if {[catch {$menu entrycget $i -state} state] == 0} { + if {$state ne "disabled" && \ + ($i!=0 || [$menu cget -type] ne "tearoff" \ + || [$menu type 0] ne "tearoff")} { + break + } + } + if {$i == $active} { + return + } + incr i $count + incr quitAfter -1 + } + $menu activate $i + GenerateMenuSelect $menu + + if {[$menu type $i] eq "cascade" && [$menu cget -type] eq "menubar"} { + set cascade [$menu entrycget $i -menu] + if {$cascade ne ""} { + # Here we auto-post a cascade. This is necessary when + # we traverse left/right in the menubar, but undesirable when + # we traverse up/down in a menu. + $menu postcascade $i + MenuFirstEntry $cascade + } + } +} + +# ::tk::MenuFind -- +# This procedure searches the entire window hierarchy under w for +# a menubutton that isn't disabled and whose underlined character +# is "char" or an entry in a menubar that isn't disabled and whose +# underlined character is "char". +# It returns the name of that window, if found, or an +# empty string if no matching window was found. If "char" is an +# empty string then the procedure returns the name of the first +# menubutton found that isn't disabled. +# +# Arguments: +# w - Name of window where key was typed. +# char - Underlined character to search for; +# may be either upper or lower case, and +# will match either upper or lower case. + +proc ::tk::MenuFind {w char} { + set char [string tolower $char] + set windowlist [winfo child $w] + + foreach child $windowlist { + # Don't descend into other toplevels. + if {[winfo toplevel $w] ne [winfo toplevel $child]} { + continue + } + if {[winfo class $child] eq "Menu" && \ + [$child cget -type] eq "menubar"} { + if {$char eq ""} { + return $child + } + set last [$child index last] + for {set i [$child cget -tearoff]} {$i <= $last} {incr i} { + if {[$child type $i] eq "separator"} { + continue + } + set char2 [string index [$child entrycget $i -label] \ + [$child entrycget $i -underline]] + if {$char eq [string tolower $char2] || $char eq ""} { + if {[$child entrycget $i -state] ne "disabled"} { + return $child + } + } + } + } + } + + foreach child $windowlist { + # Don't descend into other toplevels. + if {[winfo toplevel $w] ne [winfo toplevel $child]} { + continue + } + switch -- [winfo class $child] { + Menubutton { + set char2 [string index [$child cget -text] \ + [$child cget -underline]] + if {$char eq [string tolower $char2] || $char eq ""} { + if {[$child cget -state] ne "disabled"} { + return $child + } + } + } + + default { + set match [MenuFind $child $char] + if {$match ne ""} { + return $match + } + } + } + } + return {} +} + +# ::tk::TraverseToMenu -- +# This procedure implements keyboard traversal of menus. Given an +# ASCII character "char", it looks for a menubutton with that character +# underlined. If one is found, it posts the menubutton's menu +# +# Arguments: +# w - Window in which the key was typed (selects +# a toplevel window). +# char - Character that selects a menu. The case +# is ignored. If an empty string, nothing +# happens. + +proc ::tk::TraverseToMenu {w char} { + variable ::tk::Priv + if {![winfo exists $w] || $char eq ""} { + return + } + while {[winfo class $w] eq "Menu"} { + if {[$w cget -type] eq "menubar"} { + break + } elseif {$Priv(postedMb) eq ""} { + return + } + set w [winfo parent $w] + } + set w [MenuFind [winfo toplevel $w] $char] + if {$w ne ""} { + if {[winfo class $w] eq "Menu"} { + tk_menuSetFocus $w + set Priv(window) $w + SaveGrabInfo $w + grab -global $w + TraverseWithinMenu $w $char + } else { + MbPost $w + MenuFirstEntry [$w cget -menu] + } + } +} + +# ::tk::FirstMenu -- +# This procedure traverses to the first menubutton in the toplevel +# for a given window, and posts that menubutton's menu. +# +# Arguments: +# w - Name of a window. Selects which toplevel +# to search for menubuttons. + +proc ::tk::FirstMenu w { + variable ::tk::Priv + set w [MenuFind [winfo toplevel $w] ""] + if {$w ne ""} { + if {[winfo class $w] eq "Menu"} { + tk_menuSetFocus $w + set Priv(window) $w + SaveGrabInfo $w + grab -global $w + MenuFirstEntry $w + } else { + MbPost $w + MenuFirstEntry [$w cget -menu] + } + } +} + +# ::tk::TraverseWithinMenu +# This procedure implements keyboard traversal within a menu. It +# searches for an entry in the menu that has "char" underlined. If +# such an entry is found, it is invoked and the menu is unposted. +# +# Arguments: +# w - The name of the menu widget. +# char - The character to look for; case is +# ignored. If the string is empty then +# nothing happens. + +proc ::tk::TraverseWithinMenu {w char} { + if {$char eq ""} { + return + } + set char [string tolower $char] + set last [$w index last] + if {$last eq "none"} { + return + } + for {set i 0} {$i <= $last} {incr i} { + if {[catch {set char2 [string index \ + [$w entrycget $i -label] [$w entrycget $i -underline]]}]} { + continue + } + if {$char eq [string tolower $char2]} { + if {[$w type $i] eq "cascade"} { + $w activate $i + $w postcascade active + event generate $w <> + set m2 [$w entrycget $i -menu] + if {$m2 ne ""} { + MenuFirstEntry $m2 + } + } else { + MenuUnpost $w + uplevel #0 [list $w invoke $i] + } + return + } + } +} + +# ::tk::MenuFirstEntry -- +# Given a menu, this procedure finds the first entry that isn't +# disabled or a tear-off or separator, and activates that entry. +# However, if there is already an active entry in the menu (e.g., +# because of a previous call to tk::PostOverPoint) then the active +# entry isn't changed. This procedure also sets the input focus +# to the menu. +# +# Arguments: +# menu - Name of the menu window (possibly empty). + +proc ::tk::MenuFirstEntry menu { + if {$menu eq ""} { + return + } + tk_menuSetFocus $menu + if {[$menu index active] ne "none"} { + return + } + set last [$menu index last] + if {$last eq "none"} { + return + } + for {set i 0} {$i <= $last} {incr i} { + if {([catch {set state [$menu entrycget $i -state]}] == 0) \ + && $state ne "disabled" && [$menu type $i] ne "tearoff"} { + $menu activate $i + GenerateMenuSelect $menu + # Only post the cascade if the current menu is a menubar; + # otherwise, if the first entry of the cascade is a cascade, + # we can get an annoying cascading effect resulting in a bunch of + # menus getting posted (bug 676) + if {[$menu type $i] eq "cascade" && [$menu cget -type] eq "menubar"} { + set cascade [$menu entrycget $i -menu] + if {$cascade ne ""} { + $menu postcascade $i + MenuFirstEntry $cascade + } + } + return + } + } +} + +# ::tk::MenuFindName -- +# Given a menu and a text string, return the index of the menu entry +# that displays the string as its label. If there is no such entry, +# return an empty string. This procedure is tricky because some names +# like "active" have a special meaning in menu commands, so we can't +# always use the "index" widget command. +# +# Arguments: +# menu - Name of the menu widget. +# s - String to look for. + +proc ::tk::MenuFindName {menu s} { + set i "" + if {![regexp {^active$|^last$|^none$|^[0-9]|^@} $s]} { + catch {set i [$menu index $s]} + return $i + } + set last [$menu index last] + if {$last eq "none"} { + return + } + for {set i 0} {$i <= $last} {incr i} { + if {![catch {$menu entrycget $i -label} label]} { + if {$label eq $s} { + return $i + } + } + } + return "" +} + +# ::tk::PostOverPoint -- +# This procedure posts a given menu such that a given entry in the +# menu is centered over a given point in the root window. It also +# activates the given entry. +# +# Arguments: +# menu - Menu to post. +# x, y - Root coordinates of point. +# entry - Index of entry within menu to center over (x,y). +# If omitted or specified as {}, then the menu's +# upper-left corner goes at (x,y). + +proc ::tk::PostOverPoint {menu x y {entry {}}} { + global tcl_platform + + if {$entry ne ""} { + if {$entry == [$menu index last]} { + incr y [expr {-([$menu yposition $entry] \ + + [winfo reqheight $menu])/2}] + } else { + incr y [expr {-([$menu yposition $entry] \ + + [$menu yposition [expr {$entry+1}]])/2}] + } + incr x [expr {-[winfo reqwidth $menu]/2}] + } + + if {[tk windowingsystem] eq "win32"} { + # osVersion is not available in safe interps + set ver 5 + if {[info exists tcl_platform(osVersion)]} { + scan $tcl_platform(osVersion) %d ver + } + + # We need to fix some problems with menu posting on Windows, + # where, if the menu would overlap top or bottom of screen, + # Windows puts it in the wrong place for us. We must also + # subtract an extra amount for half the height of the current + # entry. To be safe we subtract an extra 10. + # NOTE: this issue appears to have been resolved in the Window + # manager provided with Vista and Windows 7. + if {$ver < 6} { + set yoffset [expr {[winfo screenheight $menu] \ + - $y - [winfo reqheight $menu] - 10}] + if {$yoffset < [winfo vrooty $menu]} { + # The bottom of the menu is offscreen, so adjust upwards + incr y [expr {$yoffset - [winfo vrooty $menu]}] + } + # If we're off the top of the screen (either because we were + # originally or because we just adjusted too far upwards), + # then make the menu popup on the top edge. + if {$y < [winfo vrooty $menu]} { + set y [winfo vrooty $menu] + } + } + } + $menu post $x $y + if {$entry ne "" && [$menu entrycget $entry -state] ne "disabled"} { + $menu activate $entry + GenerateMenuSelect $menu + } +} + +# ::tk::SaveGrabInfo -- +# Sets the variables tk::Priv(oldGrab) and tk::Priv(grabStatus) to record +# the state of any existing grab on the w's display. +# +# Arguments: +# w - Name of a window; used to select the display +# whose grab information is to be recorded. + +proc tk::SaveGrabInfo w { + variable ::tk::Priv + set Priv(oldGrab) [grab current $w] + if {$Priv(oldGrab) ne ""} { + set Priv(grabStatus) [grab status $Priv(oldGrab)] + } +} + +# ::tk::RestoreOldGrab -- +# Restores the grab to what it was before TkSaveGrabInfo was called. +# + +proc ::tk::RestoreOldGrab {} { + variable ::tk::Priv + + if {$Priv(oldGrab) ne ""} { + # Be careful restoring the old grab, since it's window may not + # be visible anymore. + + catch { + if {$Priv(grabStatus) eq "global"} { + grab set -global $Priv(oldGrab) + } else { + grab set $Priv(oldGrab) + } + } + set Priv(oldGrab) "" + } +} + +proc ::tk_menuSetFocus {menu} { + variable ::tk::Priv + if {![info exists Priv(focus)] || $Priv(focus) eq ""} { + set Priv(focus) [focus] + } + focus $menu +} + +proc ::tk::GenerateMenuSelect {menu} { + variable ::tk::Priv + + if {$Priv(activeMenu) eq $menu \ + && $Priv(activeItem) eq [$menu index active]} { + return + } + + set Priv(activeMenu) $menu + set Priv(activeItem) [$menu index active] + event generate $menu <> +} + +# ::tk_popup -- +# This procedure pops up a menu and sets things up for traversing +# the menu and its submenus. +# +# Arguments: +# menu - Name of the menu to be popped up. +# x, y - Root coordinates at which to pop up the +# menu. +# entry - Index of a menu entry to center over (x,y). +# If omitted or specified as {}, then menu's +# upper-left corner goes at (x,y). + +proc ::tk_popup {menu x y {entry {}}} { + variable ::tk::Priv + global tcl_platform + if {$Priv(popup) ne "" || $Priv(postedMb) ne ""} { + tk::MenuUnpost {} + } + tk::PostOverPoint $menu $x $y $entry + if {[tk windowingsystem] eq "x11" && [winfo viewable $menu]} { + tk::SaveGrabInfo $menu + grab -global $menu + set Priv(popup) $menu + set Priv(window) $menu + set Priv(menuActivated) 1 + tk_menuSetFocus $menu + } +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tk/mkpsenc.tcl b/extensions/fablabchemnitz/inkstitch/bin/tk/mkpsenc.tcl new file mode 100644 index 00000000..9efb6de6 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tk/mkpsenc.tcl @@ -0,0 +1,1366 @@ +# mkpsenc.tcl -- +# +# Creates Postscript encoding vector for given encoding +# + +proc ::tk::CreatePostscriptEncoding {encoding} { + # now check for known. Even if it is known, it can be other + # than we need. GhostScript seems to be happy with such approach + set result "/CurrentEncoding \[\n" + for {set i 0} {$i<256} {incr i 8} { + for {set j 0} {$j<8} {incr j} { + set enc [encoding convertfrom $encoding [format %c [expr {$i+$j}]]] + if {[catch {format %04X [scan $enc %c]} hexcode]} {set hexcode {}} + if [info exists ::tk::psglyphs($hexcode)] { + append result "/$::tk::psglyphs($hexcode)" + } else { + append result "/space" + } + } + append result "\n" + } + append result "\] def\n" + return $result +} + +# List of adobe glyph names. Converted from glyphlist.txt, downloaded +# from Adobe + +namespace eval ::tk { +array set psglyphs { + 0020 space + 0021 exclam + 0022 quotedbl + 0023 numbersign + 0024 dollar + 0025 percent + 0026 ampersand + 0027 quotesingle + 0028 parenleft + 0029 parenright + 002A asterisk + 002B plus + 002C comma + 002D hyphen + 002E period + 002F slash + 0030 zero + 0031 one + 0032 two + 0033 three + 0034 four + 0035 five + 0036 six + 0037 seven + 0038 eight + 0039 nine + 003A colon + 003B semicolon + 003C less + 003D equal + 003E greater + 003F question + 0040 at + 0041 A + 0042 B + 0043 C + 0044 D + 0045 E + 0046 F + 0047 G + 0048 H + 0049 I + 004A J + 004B K + 004C L + 004D M + 004E N + 004F O + 0050 P + 0051 Q + 0052 R + 0053 S + 0054 T + 0055 U + 0056 V + 0057 W + 0058 X + 0059 Y + 005A Z + 005B bracketleft + 005C backslash + 005D bracketright + 005E asciicircum + 005F underscore + 0060 grave + 0061 a + 0062 b + 0063 c + 0064 d + 0065 e + 0066 f + 0067 g + 0068 h + 0069 i + 006A j + 006B k + 006C l + 006D m + 006E n + 006F o + 0070 p + 0071 q + 0072 r + 0073 s + 0074 t + 0075 u + 0076 v + 0077 w + 0078 x + 0079 y + 007A z + 007B braceleft + 007C bar + 007D braceright + 007E asciitilde + 00A0 space + 00A1 exclamdown + 00A2 cent + 00A3 sterling + 00A4 currency + 00A5 yen + 00A6 brokenbar + 00A7 section + 00A8 dieresis + 00A9 copyright + 00AA ordfeminine + 00AB guillemotleft + 00AC logicalnot + 00AD hyphen + 00AE registered + 00AF macron + 00B0 degree + 00B1 plusminus + 00B2 twosuperior + 00B3 threesuperior + 00B4 acute + 00B5 mu + 00B6 paragraph + 00B7 periodcentered + 00B8 cedilla + 00B9 onesuperior + 00BA ordmasculine + 00BB guillemotright + 00BC onequarter + 00BD onehalf + 00BE threequarters + 00BF questiondown + 00C0 Agrave + 00C1 Aacute + 00C2 Acircumflex + 00C3 Atilde + 00C4 Adieresis + 00C5 Aring + 00C6 AE + 00C7 Ccedilla + 00C8 Egrave + 00C9 Eacute + 00CA Ecircumflex + 00CB Edieresis + 00CC Igrave + 00CD Iacute + 00CE Icircumflex + 00CF Idieresis + 00D0 Eth + 00D1 Ntilde + 00D2 Ograve + 00D3 Oacute + 00D4 Ocircumflex + 00D5 Otilde + 00D6 Odieresis + 00D7 multiply + 00D8 Oslash + 00D9 Ugrave + 00DA Uacute + 00DB Ucircumflex + 00DC Udieresis + 00DD Yacute + 00DE Thorn + 00DF germandbls + 00E0 agrave + 00E1 aacute + 00E2 acircumflex + 00E3 atilde + 00E4 adieresis + 00E5 aring + 00E6 ae + 00E7 ccedilla + 00E8 egrave + 00E9 eacute + 00EA ecircumflex + 00EB edieresis + 00EC igrave + 00ED iacute + 00EE icircumflex + 00EF idieresis + 00F0 eth + 00F1 ntilde + 00F2 ograve + 00F3 oacute + 00F4 ocircumflex + 00F5 otilde + 00F6 odieresis + 00F7 divide + 00F8 oslash + 00F9 ugrave + 00FA uacute + 00FB ucircumflex + 00FC udieresis + 00FD yacute + 00FE thorn + 00FF ydieresis + 0100 Amacron + 0101 amacron + 0102 Abreve + 0103 abreve + 0104 Aogonek + 0105 aogonek + 0106 Cacute + 0107 cacute + 0108 Ccircumflex + 0109 ccircumflex + 010A Cdotaccent + 010B cdotaccent + 010C Ccaron + 010D ccaron + 010E Dcaron + 010F dcaron + 0110 Dcroat + 0111 dcroat + 0112 Emacron + 0113 emacron + 0114 Ebreve + 0115 ebreve + 0116 Edotaccent + 0117 edotaccent + 0118 Eogonek + 0119 eogonek + 011A Ecaron + 011B ecaron + 011C Gcircumflex + 011D gcircumflex + 011E Gbreve + 011F gbreve + 0120 Gdotaccent + 0121 gdotaccent + 0122 Gcommaaccent + 0123 gcommaaccent + 0124 Hcircumflex + 0125 hcircumflex + 0126 Hbar + 0127 hbar + 0128 Itilde + 0129 itilde + 012A Imacron + 012B imacron + 012C Ibreve + 012D ibreve + 012E Iogonek + 012F iogonek + 0130 Idotaccent + 0131 dotlessi + 0132 IJ + 0133 ij + 0134 Jcircumflex + 0135 jcircumflex + 0136 Kcommaaccent + 0137 kcommaaccent + 0138 kgreenlandic + 0139 Lacute + 013A lacute + 013B Lcommaaccent + 013C lcommaaccent + 013D Lcaron + 013E lcaron + 013F Ldot + 0140 ldot + 0141 Lslash + 0142 lslash + 0143 Nacute + 0144 nacute + 0145 Ncommaaccent + 0146 ncommaaccent + 0147 Ncaron + 0148 ncaron + 0149 napostrophe + 014A Eng + 014B eng + 014C Omacron + 014D omacron + 014E Obreve + 014F obreve + 0150 Ohungarumlaut + 0151 ohungarumlaut + 0152 OE + 0153 oe + 0154 Racute + 0155 racute + 0156 Rcommaaccent + 0157 rcommaaccent + 0158 Rcaron + 0159 rcaron + 015A Sacute + 015B sacute + 015C Scircumflex + 015D scircumflex + 015E Scedilla + 015F scedilla + 0160 Scaron + 0161 scaron + 0162 Tcommaaccent + 0163 tcommaaccent + 0164 Tcaron + 0165 tcaron + 0166 Tbar + 0167 tbar + 0168 Utilde + 0169 utilde + 016A Umacron + 016B umacron + 016C Ubreve + 016D ubreve + 016E Uring + 016F uring + 0170 Uhungarumlaut + 0171 uhungarumlaut + 0172 Uogonek + 0173 uogonek + 0174 Wcircumflex + 0175 wcircumflex + 0176 Ycircumflex + 0177 ycircumflex + 0178 Ydieresis + 0179 Zacute + 017A zacute + 017B Zdotaccent + 017C zdotaccent + 017D Zcaron + 017E zcaron + 017F longs + 0192 florin + 01A0 Ohorn + 01A1 ohorn + 01AF Uhorn + 01B0 uhorn + 01E6 Gcaron + 01E7 gcaron + 01FA Aringacute + 01FB aringacute + 01FC AEacute + 01FD aeacute + 01FE Oslashacute + 01FF oslashacute + 0218 Scommaaccent + 0219 scommaaccent + 021A Tcommaaccent + 021B tcommaaccent + 02BC afii57929 + 02BD afii64937 + 02C6 circumflex + 02C7 caron + 02C9 macron + 02D8 breve + 02D9 dotaccent + 02DA ring + 02DB ogonek + 02DC tilde + 02DD hungarumlaut + 0300 gravecomb + 0301 acutecomb + 0303 tildecomb + 0309 hookabovecomb + 0323 dotbelowcomb + 0384 tonos + 0385 dieresistonos + 0386 Alphatonos + 0387 anoteleia + 0388 Epsilontonos + 0389 Etatonos + 038A Iotatonos + 038C Omicrontonos + 038E Upsilontonos + 038F Omegatonos + 0390 iotadieresistonos + 0391 Alpha + 0392 Beta + 0393 Gamma + 0394 Delta + 0395 Epsilon + 0396 Zeta + 0397 Eta + 0398 Theta + 0399 Iota + 039A Kappa + 039B Lambda + 039C Mu + 039D Nu + 039E Xi + 039F Omicron + 03A0 Pi + 03A1 Rho + 03A3 Sigma + 03A4 Tau + 03A5 Upsilon + 03A6 Phi + 03A7 Chi + 03A8 Psi + 03A9 Omega + 03AA Iotadieresis + 03AB Upsilondieresis + 03AC alphatonos + 03AD epsilontonos + 03AE etatonos + 03AF iotatonos + 03B0 upsilondieresistonos + 03B1 alpha + 03B2 beta + 03B3 gamma + 03B4 delta + 03B5 epsilon + 03B6 zeta + 03B7 eta + 03B8 theta + 03B9 iota + 03BA kappa + 03BB lambda + 03BC mu + 03BD nu + 03BE xi + 03BF omicron + 03C0 pi + 03C1 rho + 03C2 sigma1 + 03C3 sigma + 03C4 tau + 03C5 upsilon + 03C6 phi + 03C7 chi + 03C8 psi + 03C9 omega + 03CA iotadieresis + 03CB upsilondieresis + 03CC omicrontonos + 03CD upsilontonos + 03CE omegatonos + 03D1 theta1 + 03D2 Upsilon1 + 03D5 phi1 + 03D6 omega1 + 0401 afii10023 + 0402 afii10051 + 0403 afii10052 + 0404 afii10053 + 0405 afii10054 + 0406 afii10055 + 0407 afii10056 + 0408 afii10057 + 0409 afii10058 + 040A afii10059 + 040B afii10060 + 040C afii10061 + 040E afii10062 + 040F afii10145 + 0410 afii10017 + 0411 afii10018 + 0412 afii10019 + 0413 afii10020 + 0414 afii10021 + 0415 afii10022 + 0416 afii10024 + 0417 afii10025 + 0418 afii10026 + 0419 afii10027 + 041A afii10028 + 041B afii10029 + 041C afii10030 + 041D afii10031 + 041E afii10032 + 041F afii10033 + 0420 afii10034 + 0421 afii10035 + 0422 afii10036 + 0423 afii10037 + 0424 afii10038 + 0425 afii10039 + 0426 afii10040 + 0427 afii10041 + 0428 afii10042 + 0429 afii10043 + 042A afii10044 + 042B afii10045 + 042C afii10046 + 042D afii10047 + 042E afii10048 + 042F afii10049 + 0430 afii10065 + 0431 afii10066 + 0432 afii10067 + 0433 afii10068 + 0434 afii10069 + 0435 afii10070 + 0436 afii10072 + 0437 afii10073 + 0438 afii10074 + 0439 afii10075 + 043A afii10076 + 043B afii10077 + 043C afii10078 + 043D afii10079 + 043E afii10080 + 043F afii10081 + 0440 afii10082 + 0441 afii10083 + 0442 afii10084 + 0443 afii10085 + 0444 afii10086 + 0445 afii10087 + 0446 afii10088 + 0447 afii10089 + 0448 afii10090 + 0449 afii10091 + 044A afii10092 + 044B afii10093 + 044C afii10094 + 044D afii10095 + 044E afii10096 + 044F afii10097 + 0451 afii10071 + 0452 afii10099 + 0453 afii10100 + 0454 afii10101 + 0455 afii10102 + 0456 afii10103 + 0457 afii10104 + 0458 afii10105 + 0459 afii10106 + 045A afii10107 + 045B afii10108 + 045C afii10109 + 045E afii10110 + 045F afii10193 + 0462 afii10146 + 0463 afii10194 + 0472 afii10147 + 0473 afii10195 + 0474 afii10148 + 0475 afii10196 + 0490 afii10050 + 0491 afii10098 + 04D9 afii10846 + 05B0 afii57799 + 05B1 afii57801 + 05B2 afii57800 + 05B3 afii57802 + 05B4 afii57793 + 05B5 afii57794 + 05B6 afii57795 + 05B7 afii57798 + 05B8 afii57797 + 05B9 afii57806 + 05BB afii57796 + 05BC afii57807 + 05BD afii57839 + 05BE afii57645 + 05BF afii57841 + 05C0 afii57842 + 05C1 afii57804 + 05C2 afii57803 + 05C3 afii57658 + 05D0 afii57664 + 05D1 afii57665 + 05D2 afii57666 + 05D3 afii57667 + 05D4 afii57668 + 05D5 afii57669 + 05D6 afii57670 + 05D7 afii57671 + 05D8 afii57672 + 05D9 afii57673 + 05DA afii57674 + 05DB afii57675 + 05DC afii57676 + 05DD afii57677 + 05DE afii57678 + 05DF afii57679 + 05E0 afii57680 + 05E1 afii57681 + 05E2 afii57682 + 05E3 afii57683 + 05E4 afii57684 + 05E5 afii57685 + 05E6 afii57686 + 05E7 afii57687 + 05E8 afii57688 + 05E9 afii57689 + 05EA afii57690 + 05F0 afii57716 + 05F1 afii57717 + 05F2 afii57718 + 060C afii57388 + 061B afii57403 + 061F afii57407 + 0621 afii57409 + 0622 afii57410 + 0623 afii57411 + 0624 afii57412 + 0625 afii57413 + 0626 afii57414 + 0627 afii57415 + 0628 afii57416 + 0629 afii57417 + 062A afii57418 + 062B afii57419 + 062C afii57420 + 062D afii57421 + 062E afii57422 + 062F afii57423 + 0630 afii57424 + 0631 afii57425 + 0632 afii57426 + 0633 afii57427 + 0634 afii57428 + 0635 afii57429 + 0636 afii57430 + 0637 afii57431 + 0638 afii57432 + 0639 afii57433 + 063A afii57434 + 0640 afii57440 + 0641 afii57441 + 0642 afii57442 + 0643 afii57443 + 0644 afii57444 + 0645 afii57445 + 0646 afii57446 + 0647 afii57470 + 0648 afii57448 + 0649 afii57449 + 064A afii57450 + 064B afii57451 + 064C afii57452 + 064D afii57453 + 064E afii57454 + 064F afii57455 + 0650 afii57456 + 0651 afii57457 + 0652 afii57458 + 0660 afii57392 + 0661 afii57393 + 0662 afii57394 + 0663 afii57395 + 0664 afii57396 + 0665 afii57397 + 0666 afii57398 + 0667 afii57399 + 0668 afii57400 + 0669 afii57401 + 066A afii57381 + 066D afii63167 + 0679 afii57511 + 067E afii57506 + 0686 afii57507 + 0688 afii57512 + 0691 afii57513 + 0698 afii57508 + 06A4 afii57505 + 06AF afii57509 + 06BA afii57514 + 06D2 afii57519 + 06D5 afii57534 + 1E80 Wgrave + 1E81 wgrave + 1E82 Wacute + 1E83 wacute + 1E84 Wdieresis + 1E85 wdieresis + 1EF2 Ygrave + 1EF3 ygrave + 200C afii61664 + 200D afii301 + 200E afii299 + 200F afii300 + 2012 figuredash + 2013 endash + 2014 emdash + 2015 afii00208 + 2017 underscoredbl + 2018 quoteleft + 2019 quoteright + 201A quotesinglbase + 201B quotereversed + 201C quotedblleft + 201D quotedblright + 201E quotedblbase + 2020 dagger + 2021 daggerdbl + 2022 bullet + 2024 onedotenleader + 2025 twodotenleader + 2026 ellipsis + 202C afii61573 + 202D afii61574 + 202E afii61575 + 2030 perthousand + 2032 minute + 2033 second + 2039 guilsinglleft + 203A guilsinglright + 203C exclamdbl + 2044 fraction + 2070 zerosuperior + 2074 foursuperior + 2075 fivesuperior + 2076 sixsuperior + 2077 sevensuperior + 2078 eightsuperior + 2079 ninesuperior + 207D parenleftsuperior + 207E parenrightsuperior + 207F nsuperior + 2080 zeroinferior + 2081 oneinferior + 2082 twoinferior + 2083 threeinferior + 2084 fourinferior + 2085 fiveinferior + 2086 sixinferior + 2087 seveninferior + 2088 eightinferior + 2089 nineinferior + 208D parenleftinferior + 208E parenrightinferior + 20A1 colonmonetary + 20A3 franc + 20A4 lira + 20A7 peseta + 20AA afii57636 + 20AB dong + 20AC Euro + 2105 afii61248 + 2111 Ifraktur + 2113 afii61289 + 2116 afii61352 + 2118 weierstrass + 211C Rfraktur + 211E prescription + 2122 trademark + 2126 Omega + 212E estimated + 2135 aleph + 2153 onethird + 2154 twothirds + 215B oneeighth + 215C threeeighths + 215D fiveeighths + 215E seveneighths + 2190 arrowleft + 2191 arrowup + 2192 arrowright + 2193 arrowdown + 2194 arrowboth + 2195 arrowupdn + 21A8 arrowupdnbse + 21B5 carriagereturn + 21D0 arrowdblleft + 21D1 arrowdblup + 21D2 arrowdblright + 21D3 arrowdbldown + 21D4 arrowdblboth + 2200 universal + 2202 partialdiff + 2203 existential + 2205 emptyset + 2206 Delta + 2207 gradient + 2208 element + 2209 notelement + 220B suchthat + 220F product + 2211 summation + 2212 minus + 2215 fraction + 2217 asteriskmath + 2219 periodcentered + 221A radical + 221D proportional + 221E infinity + 221F orthogonal + 2220 angle + 2227 logicaland + 2228 logicalor + 2229 intersection + 222A union + 222B integral + 2234 therefore + 223C similar + 2245 congruent + 2248 approxequal + 2260 notequal + 2261 equivalence + 2264 lessequal + 2265 greaterequal + 2282 propersubset + 2283 propersuperset + 2284 notsubset + 2286 reflexsubset + 2287 reflexsuperset + 2295 circleplus + 2297 circlemultiply + 22A5 perpendicular + 22C5 dotmath + 2302 house + 2310 revlogicalnot + 2320 integraltp + 2321 integralbt + 2329 angleleft + 232A angleright + 2500 SF100000 + 2502 SF110000 + 250C SF010000 + 2510 SF030000 + 2514 SF020000 + 2518 SF040000 + 251C SF080000 + 2524 SF090000 + 252C SF060000 + 2534 SF070000 + 253C SF050000 + 2550 SF430000 + 2551 SF240000 + 2552 SF510000 + 2553 SF520000 + 2554 SF390000 + 2555 SF220000 + 2556 SF210000 + 2557 SF250000 + 2558 SF500000 + 2559 SF490000 + 255A SF380000 + 255B SF280000 + 255C SF270000 + 255D SF260000 + 255E SF360000 + 255F SF370000 + 2560 SF420000 + 2561 SF190000 + 2562 SF200000 + 2563 SF230000 + 2564 SF470000 + 2565 SF480000 + 2566 SF410000 + 2567 SF450000 + 2568 SF460000 + 2569 SF400000 + 256A SF540000 + 256B SF530000 + 256C SF440000 + 2580 upblock + 2584 dnblock + 2588 block + 258C lfblock + 2590 rtblock + 2591 ltshade + 2592 shade + 2593 dkshade + 25A0 filledbox + 25A1 H22073 + 25AA H18543 + 25AB H18551 + 25AC filledrect + 25B2 triagup + 25BA triagrt + 25BC triagdn + 25C4 triaglf + 25CA lozenge + 25CB circle + 25CF H18533 + 25D8 invbullet + 25D9 invcircle + 25E6 openbullet + 263A smileface + 263B invsmileface + 263C sun + 2640 female + 2642 male + 2660 spade + 2663 club + 2665 heart + 2666 diamond + 266A musicalnote + 266B musicalnotedbl + F6BE dotlessj + F6BF LL + F6C0 ll + F6C1 Scedilla + F6C2 scedilla + F6C3 commaaccent + F6C4 afii10063 + F6C5 afii10064 + F6C6 afii10192 + F6C7 afii10831 + F6C8 afii10832 + F6C9 Acute + F6CA Caron + F6CB Dieresis + F6CC DieresisAcute + F6CD DieresisGrave + F6CE Grave + F6CF Hungarumlaut + F6D0 Macron + F6D1 cyrBreve + F6D2 cyrFlex + F6D3 dblGrave + F6D4 cyrbreve + F6D5 cyrflex + F6D6 dblgrave + F6D7 dieresisacute + F6D8 dieresisgrave + F6D9 copyrightserif + F6DA registerserif + F6DB trademarkserif + F6DC onefitted + F6DD rupiah + F6DE threequartersemdash + F6DF centinferior + F6E0 centsuperior + F6E1 commainferior + F6E2 commasuperior + F6E3 dollarinferior + F6E4 dollarsuperior + F6E5 hypheninferior + F6E6 hyphensuperior + F6E7 periodinferior + F6E8 periodsuperior + F6E9 asuperior + F6EA bsuperior + F6EB dsuperior + F6EC esuperior + F6ED isuperior + F6EE lsuperior + F6EF msuperior + F6F0 osuperior + F6F1 rsuperior + F6F2 ssuperior + F6F3 tsuperior + F6F4 Brevesmall + F6F5 Caronsmall + F6F6 Circumflexsmall + F6F7 Dotaccentsmall + F6F8 Hungarumlautsmall + F6F9 Lslashsmall + F6FA OEsmall + F6FB Ogoneksmall + F6FC Ringsmall + F6FD Scaronsmall + F6FE Tildesmall + F6FF Zcaronsmall + F721 exclamsmall + F724 dollaroldstyle + F726 ampersandsmall + F730 zerooldstyle + F731 oneoldstyle + F732 twooldstyle + F733 threeoldstyle + F734 fouroldstyle + F735 fiveoldstyle + F736 sixoldstyle + F737 sevenoldstyle + F738 eightoldstyle + F739 nineoldstyle + F73F questionsmall + F760 Gravesmall + F761 Asmall + F762 Bsmall + F763 Csmall + F764 Dsmall + F765 Esmall + F766 Fsmall + F767 Gsmall + F768 Hsmall + F769 Ismall + F76A Jsmall + F76B Ksmall + F76C Lsmall + F76D Msmall + F76E Nsmall + F76F Osmall + F770 Psmall + F771 Qsmall + F772 Rsmall + F773 Ssmall + F774 Tsmall + F775 Usmall + F776 Vsmall + F777 Wsmall + F778 Xsmall + F779 Ysmall + F77A Zsmall + F7A1 exclamdownsmall + F7A2 centoldstyle + F7A8 Dieresissmall + F7AF Macronsmall + F7B4 Acutesmall + F7B8 Cedillasmall + F7BF questiondownsmall + F7E0 Agravesmall + F7E1 Aacutesmall + F7E2 Acircumflexsmall + F7E3 Atildesmall + F7E4 Adieresissmall + F7E5 Aringsmall + F7E6 AEsmall + F7E7 Ccedillasmall + F7E8 Egravesmall + F7E9 Eacutesmall + F7EA Ecircumflexsmall + F7EB Edieresissmall + F7EC Igravesmall + F7ED Iacutesmall + F7EE Icircumflexsmall + F7EF Idieresissmall + F7F0 Ethsmall + F7F1 Ntildesmall + F7F2 Ogravesmall + F7F3 Oacutesmall + F7F4 Ocircumflexsmall + F7F5 Otildesmall + F7F6 Odieresissmall + F7F8 Oslashsmall + F7F9 Ugravesmall + F7FA Uacutesmall + F7FB Ucircumflexsmall + F7FC Udieresissmall + F7FD Yacutesmall + F7FE Thornsmall + F7FF Ydieresissmall + F8E5 radicalex + F8E6 arrowvertex + F8E7 arrowhorizex + F8E8 registersans + F8E9 copyrightsans + F8EA trademarksans + F8EB parenlefttp + F8EC parenleftex + F8ED parenleftbt + F8EE bracketlefttp + F8EF bracketleftex + F8F0 bracketleftbt + F8F1 bracelefttp + F8F2 braceleftmid + F8F3 braceleftbt + F8F4 braceex + F8F5 integralex + F8F6 parenrighttp + F8F7 parenrightex + F8F8 parenrightbt + F8F9 bracketrighttp + F8FA bracketrightex + F8FB bracketrightbt + F8FC bracerighttp + F8FD bracerightmid + F8FE bracerightbt + FB00 ff + FB01 fi + FB02 fl + FB03 ffi + FB04 ffl + FB1F afii57705 + FB2A afii57694 + FB2B afii57695 + FB35 afii57723 + FB4B afii57700 +} + +# precalculate entire prolog when this file is loaded +# (to speed things up) +set ps_preamable "%%BeginProlog\n" +append ps_preamable [CreatePostscriptEncoding [encoding system]] +append ps_preamable { +50 dict begin +% This is a standard prolog for Postscript generated by Tk's canvas +% widget. + +% The definitions below just define all of the variables used in +% any of the procedures here. This is needed for obscure reasons +% explained on p. 716 of the Postscript manual (Section H.2.7, +% "Initializing Variables," in the section on Encapsulated Postscript). + +/baseline 0 def +/stipimage 0 def +/height 0 def +/justify 0 def +/lineLength 0 def +/spacing 0 def +/stipple 0 def +/strings 0 def +/xoffset 0 def +/yoffset 0 def +/tmpstip null def + + +/cstringshow { + { + dup type /stringtype eq + { show } { glyphshow } + ifelse + } + forall +} bind def + + + +/cstringwidth { + 0 exch 0 exch + { + dup type /stringtype eq + { stringwidth } { + currentfont /Encoding get exch 1 exch put (\001) stringwidth + } + ifelse + exch 3 1 roll add 3 1 roll add exch + } + forall +} bind def + +% font ISOEncode font +% This procedure changes the encoding of a font from the default +% Postscript encoding to current system encoding. It's typically invoked just +% before invoking "setfont". The body of this procedure comes from +% Section 5.6.1 of the Postscript book. + +/ISOEncode { + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding CurrentEncoding def + currentdict + end + + % I'm not sure why it's necessary to use "definefont" on this new + % font, but it seems to be important; just use the name "Temporary" + % for the font. + + /Temporary exch definefont +} bind def + +% StrokeClip +% +% This procedure converts the current path into a clip area under +% the assumption of stroking. It's a bit tricky because some Postscript +% interpreters get errors during strokepath for dashed lines. If +% this happens then turn off dashes and try again. + +/StrokeClip { + {strokepath} stopped { + (This Postscript printer gets limitcheck overflows when) = + (stippling dashed lines; lines will be printed solid instead.) = + [] 0 setdash strokepath} if + clip +} bind def + +% desiredSize EvenPixels closestSize +% +% The procedure below is used for stippling. Given the optimal size +% of a dot in a stipple pattern in the current user coordinate system, +% compute the closest size that is an exact multiple of the device's +% pixel size. This allows stipple patterns to be displayed without +% aliasing effects. + +/EvenPixels { + % Compute exact number of device pixels per stipple dot. + dup 0 matrix currentmatrix dtransform + dup mul exch dup mul add sqrt + + % Round to an integer, make sure the number is at least 1, and compute + % user coord distance corresponding to this. + dup round dup 1 lt {pop 1} if + exch div mul +} bind def + +% width height string StippleFill -- +% +% Given a path already set up and a clipping region generated from +% it, this procedure will fill the clipping region with a stipple +% pattern. "String" contains a proper image description of the +% stipple pattern and "width" and "height" give its dimensions. Each +% stipple dot is assumed to be about one unit across in the current +% user coordinate system. This procedure trashes the graphics state. + +/StippleFill { + % The following code is needed to work around a NeWSprint bug. + + /tmpstip 1 index def + + % Change the scaling so that one user unit in user coordinates + % corresponds to the size of one stipple dot. + 1 EvenPixels dup scale + + % Compute the bounding box occupied by the path (which is now + % the clipping region), and round the lower coordinates down + % to the nearest starting point for the stipple pattern. Be + % careful about negative numbers, since the rounding works + % differently on them. + + pathbbox + 4 2 roll + 5 index div dup 0 lt {1 sub} if cvi 5 index mul 4 1 roll + 6 index div dup 0 lt {1 sub} if cvi 6 index mul 3 2 roll + + % Stack now: width height string y1 y2 x1 x2 + % Below is a doubly-nested for loop to iterate across this area + % in units of the stipple pattern size, going up columns then + % across rows, blasting out a stipple-pattern-sized rectangle at + % each position + + 6 index exch { + 2 index 5 index 3 index { + % Stack now: width height string y1 y2 x y + + gsave + 1 index exch translate + 5 index 5 index true matrix tmpstip imagemask + grestore + } for + pop + } for + pop pop pop pop pop +} bind def + +% -- AdjustColor -- +% Given a color value already set for output by the caller, adjusts +% that value to a grayscale or mono value if requested by the CL +% variable. + +/AdjustColor { + CL 2 lt { + currentgray + CL 0 eq { + .5 lt {0} {1} ifelse + } if + setgray + } if +} bind def + +% x y strings spacing xoffset yoffset justify stipple DrawText -- +% This procedure does all of the real work of drawing text. The +% color and font must already have been set by the caller, and the +% following arguments must be on the stack: +% +% x, y - Coordinates at which to draw text. +% strings - An array of strings, one for each line of the text item, +% in order from top to bottom. +% spacing - Spacing between lines. +% xoffset - Horizontal offset for text bbox relative to x and y: 0 for +% nw/w/sw anchor, -0.5 for n/center/s, and -1.0 for ne/e/se. +% yoffset - Vertical offset for text bbox relative to x and y: 0 for +% nw/n/ne anchor, +0.5 for w/center/e, and +1.0 for sw/s/se. +% justify - 0 for left justification, 0.5 for center, 1 for right justify. +% stipple - Boolean value indicating whether or not text is to be +% drawn in stippled fashion. If text is stippled, +% procedure StippleText must have been defined to call +% StippleFill in the right way. +% +% Also, when this procedure is invoked, the color and font must already +% have been set for the text. + +/DrawText { + /stipple exch def + /justify exch def + /yoffset exch def + /xoffset exch def + /spacing exch def + /strings exch def + + % First scan through all of the text to find the widest line. + + /lineLength 0 def + strings { + cstringwidth pop + dup lineLength gt {/lineLength exch def} {pop} ifelse + newpath + } forall + + % Compute the baseline offset and the actual font height. + + 0 0 moveto (TXygqPZ) false charpath + pathbbox dup /baseline exch def + exch pop exch sub /height exch def pop + newpath + + % Translate coordinates first so that the origin is at the upper-left + % corner of the text's bounding box. Remember that x and y for + % positioning are still on the stack. + + translate + lineLength xoffset mul + strings length 1 sub spacing mul height add yoffset mul translate + + % Now use the baseline and justification information to translate so + % that the origin is at the baseline and positioning point for the + % first line of text. + + justify lineLength mul baseline neg translate + + % Iterate over each of the lines to output it. For each line, + % compute its width again so it can be properly justified, then + % display it. + + strings { + dup cstringwidth pop + justify neg mul 0 moveto + stipple { + + + % The text is stippled, so turn it into a path and print + % by calling StippledText, which in turn calls StippleFill. + % Unfortunately, many Postscript interpreters will get + % overflow errors if we try to do the whole string at + % once, so do it a character at a time. + + gsave + /char (X) def + { + dup type /stringtype eq { + % This segment is a string. + { + char 0 3 -1 roll put + currentpoint + gsave + char true charpath clip StippleText + grestore + char stringwidth translate + moveto + } forall + } { + % This segment is glyph name + % Temporary override + currentfont /Encoding get exch 1 exch put + currentpoint + gsave (\001) true charpath clip StippleText + grestore + (\001) stringwidth translate + moveto + } ifelse + } forall + grestore + } {cstringshow} ifelse + 0 spacing neg translate + } forall +} bind def + +%%EndProlog +} + +} + +proc tk::ensure_psenc_is_loaded {} { +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tk/msgbox.tcl b/extensions/fablabchemnitz/inkstitch/bin/tk/msgbox.tcl new file mode 100644 index 00000000..572510ad --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tk/msgbox.tcl @@ -0,0 +1,451 @@ +# msgbox.tcl -- +# +# Implements messageboxes for platforms that do not have native +# messagebox support. +# +# Copyright (c) 1994-1997 Sun Microsystems, Inc. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. +# + +# Ensure existence of ::tk::dialog namespace +# +namespace eval ::tk::dialog {} + +image create bitmap ::tk::dialog::b1 -foreground black \ +-data "#define b1_width 32\n#define b1_height 32 +static unsigned char q1_bits[] = { + 0x00, 0xf8, 0x1f, 0x00, 0x00, 0x07, 0xe0, 0x00, 0xc0, 0x00, 0x00, 0x03, + 0x20, 0x00, 0x00, 0x04, 0x10, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x10, + 0x04, 0x00, 0x00, 0x20, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, + 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x80, + 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x80, + 0x01, 0x00, 0x00, 0x80, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, + 0x04, 0x00, 0x00, 0x20, 0x08, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x08, + 0x60, 0x00, 0x00, 0x04, 0x80, 0x03, 0x80, 0x03, 0x00, 0x0c, 0x78, 0x00, + 0x00, 0x30, 0x04, 0x00, 0x00, 0x40, 0x04, 0x00, 0x00, 0x40, 0x04, 0x00, + 0x00, 0x80, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};" +image create bitmap ::tk::dialog::b2 -foreground white \ +-data "#define b2_width 32\n#define b2_height 32 +static unsigned char b2_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x1f, 0x00, 0x00, 0xff, 0xff, 0x00, + 0xc0, 0xff, 0xff, 0x03, 0xe0, 0xff, 0xff, 0x07, 0xf0, 0xff, 0xff, 0x0f, + 0xf8, 0xff, 0xff, 0x1f, 0xfc, 0xff, 0xff, 0x3f, 0xfc, 0xff, 0xff, 0x3f, + 0xfe, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0x7f, + 0xfe, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0x7f, + 0xfe, 0xff, 0xff, 0x7f, 0xfc, 0xff, 0xff, 0x3f, 0xfc, 0xff, 0xff, 0x3f, + 0xf8, 0xff, 0xff, 0x1f, 0xf0, 0xff, 0xff, 0x0f, 0xe0, 0xff, 0xff, 0x07, + 0x80, 0xff, 0xff, 0x03, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0xf0, 0x07, 0x00, + 0x00, 0xc0, 0x03, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x80, 0x03, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};" +image create bitmap ::tk::dialog::q -foreground blue \ +-data "#define q_width 32\n#define q_height 32 +static unsigned char q_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x07, 0x00, + 0x00, 0x10, 0x0f, 0x00, 0x00, 0x18, 0x1e, 0x00, 0x00, 0x38, 0x1e, 0x00, + 0x00, 0x38, 0x1e, 0x00, 0x00, 0x10, 0x0f, 0x00, 0x00, 0x80, 0x07, 0x00, + 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0xe0, 0x01, 0x00, + 0x00, 0xe0, 0x01, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};" +image create bitmap ::tk::dialog::i -foreground blue \ +-data "#define i_width 32\n#define i_height 32 +static unsigned char i_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xe0, 0x01, 0x00, 0x00, 0xf0, 0x03, 0x00, 0x00, 0xf0, 0x03, 0x00, + 0x00, 0xe0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xf8, 0x03, 0x00, 0x00, 0xf0, 0x03, 0x00, 0x00, 0xe0, 0x03, 0x00, + 0x00, 0xe0, 0x03, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0xe0, 0x03, 0x00, + 0x00, 0xe0, 0x03, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0xf0, 0x07, 0x00, + 0x00, 0xf8, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};" +image create bitmap ::tk::dialog::w1 -foreground black \ +-data "#define w1_width 32\n#define w1_height 32 +static unsigned char w1_bits[] = { + 0x00, 0x80, 0x01, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x20, 0x04, 0x00, + 0x00, 0x10, 0x04, 0x00, 0x00, 0x10, 0x08, 0x00, 0x00, 0x08, 0x08, 0x00, + 0x00, 0x08, 0x10, 0x00, 0x00, 0x04, 0x10, 0x00, 0x00, 0x04, 0x20, 0x00, + 0x00, 0x02, 0x20, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x01, 0x40, 0x00, + 0x00, 0x01, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x00, 0x01, + 0x40, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x02, + 0x20, 0x00, 0x00, 0x04, 0x10, 0x00, 0x00, 0x04, 0x10, 0x00, 0x00, 0x08, + 0x08, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x10, 0x04, 0x00, 0x00, 0x10, + 0x04, 0x00, 0x00, 0x20, 0x02, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x40, + 0x01, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x20, + 0xfc, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00};" +image create bitmap ::tk::dialog::w2 -foreground yellow \ +-data "#define w2_width 32\n#define w2_height 32 +static unsigned char w2_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0xc0, 0x03, 0x00, + 0x00, 0xe0, 0x03, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xf0, 0x07, 0x00, + 0x00, 0xf0, 0x0f, 0x00, 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xf8, 0x1f, 0x00, + 0x00, 0xfc, 0x1f, 0x00, 0x00, 0xfc, 0x3f, 0x00, 0x00, 0xfe, 0x3f, 0x00, + 0x00, 0xfe, 0x7f, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0xff, 0xff, 0x00, + 0x80, 0xff, 0xff, 0x00, 0x80, 0xff, 0xff, 0x01, 0xc0, 0xff, 0xff, 0x01, + 0xc0, 0xff, 0xff, 0x03, 0xe0, 0xff, 0xff, 0x03, 0xe0, 0xff, 0xff, 0x07, + 0xf0, 0xff, 0xff, 0x07, 0xf0, 0xff, 0xff, 0x0f, 0xf8, 0xff, 0xff, 0x0f, + 0xf8, 0xff, 0xff, 0x1f, 0xfc, 0xff, 0xff, 0x1f, 0xfe, 0xff, 0xff, 0x3f, + 0xfe, 0xff, 0xff, 0x3f, 0xfe, 0xff, 0xff, 0x3f, 0xfc, 0xff, 0xff, 0x1f, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};" +image create bitmap ::tk::dialog::w3 -foreground black \ +-data "#define w3_width 32\n#define w3_height 32 +static unsigned char w3_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xc0, 0x03, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, + 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, + 0x00, 0xc0, 0x03, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0xc0, 0x03, 0x00, + 0x00, 0x80, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0xc0, 0x03, 0x00, + 0x00, 0xc0, 0x03, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};" + +# ::tk::MessageBox -- +# +# Pops up a messagebox with an application-supplied message with +# an icon and a list of buttons. This procedure will be called +# by tk_messageBox if the platform does not have native +# messagebox support, or if the particular type of messagebox is +# not supported natively. +# +# Color icons are used on Unix displays that have a color +# depth of 4 or more and $tk_strictMotif is not on. +# +# This procedure is a private procedure shouldn't be called +# directly. Call tk_messageBox instead. +# +# See the user documentation for details on what tk_messageBox does. +# +proc ::tk::MessageBox {args} { + global tcl_platform tk_strictMotif + variable ::tk::Priv + + set w ::tk::PrivMsgBox + upvar $w data + + # + # The default value of the title is space (" ") not the empty string + # because for some window managers, a + # wm title .foo "" + # causes the window title to be "foo" instead of the empty string. + # + set specs { + {-default "" "" ""} + {-detail "" "" ""} + {-icon "" "" "info"} + {-message "" "" ""} + {-parent "" "" .} + {-title "" "" " "} + {-type "" "" "ok"} + } + + tclParseConfigSpec $w $specs "" $args + + if {[lsearch -exact {info warning error question} $data(-icon)] == -1} { + error "bad -icon value \"$data(-icon)\": must be error, info, question, or warning" + } + set windowingsystem [tk windowingsystem] + if {$windowingsystem eq "aqua"} { + switch -- $data(-icon) { + "error" {set data(-icon) "stop"} + "warning" {set data(-icon) "caution"} + "info" {set data(-icon) "note"} + } + option add *Dialog*background systemDialogBackgroundActive widgetDefault + option add *Dialog*Button.highlightBackground \ + systemDialogBackgroundActive widgetDefault + } + + if {![winfo exists $data(-parent)]} { + error "bad window path name \"$data(-parent)\"" + } + + switch -- $data(-type) { + abortretryignore { + set names [list abort retry ignore] + set labels [list &Abort &Retry &Ignore] + set cancel abort + } + ok { + set names [list ok] + set labels {&OK} + set cancel ok + } + okcancel { + set names [list ok cancel] + set labels [list &OK &Cancel] + set cancel cancel + } + retrycancel { + set names [list retry cancel] + set labels [list &Retry &Cancel] + set cancel cancel + } + yesno { + set names [list yes no] + set labels [list &Yes &No] + set cancel no + } + yesnocancel { + set names [list yes no cancel] + set labels [list &Yes &No &Cancel] + set cancel cancel + } + default { + error "bad -type value \"$data(-type)\": must be\ + abortretryignore, ok, okcancel, retrycancel,\ + yesno, or yesnocancel" + } + } + + set buttons {} + foreach name $names lab $labels { + lappend buttons [list $name -text [mc $lab]] + } + + # If no default button was specified, the default default is the + # first button (Bug: 2218). + + if {$data(-default) eq ""} { + set data(-default) [lindex [lindex $buttons 0] 0] + } + + set valid 0 + foreach btn $buttons { + if {[lindex $btn 0] eq $data(-default)} { + set valid 1 + break + } + } + if {!$valid} { + error "invalid default button \"$data(-default)\"" + } + + # 2. Set the dialog to be a child window of $parent + # + # + if {$data(-parent) ne "."} { + set w $data(-parent).__tk__messagebox + } else { + set w .__tk__messagebox + } + + # There is only one background colour for the whole dialog + set bg [ttk::style lookup . -background] + + # 3. Create the top-level window and divide it into top + # and bottom parts. + + catch {destroy $w} + toplevel $w -class Dialog -bg $bg + wm title $w $data(-title) + wm iconname $w Dialog + wm protocol $w WM_DELETE_WINDOW [list $w.$cancel invoke] + + # Message boxes should be transient with respect to their parent so that + # they always stay on top of the parent window. But some window managers + # will simply create the child window as withdrawn if the parent is not + # viewable (because it is withdrawn or iconified). This is not good for + # "grab"bed windows. So only make the message box transient if the parent + # is viewable. + # + if {[winfo viewable [winfo toplevel $data(-parent)]] } { + wm transient $w $data(-parent) + } + + if {$windowingsystem eq "aqua"} { + ::tk::unsupported::MacWindowStyle style $w moveableModal {} + } elseif {$windowingsystem eq "x11"} { + wm attributes $w -type dialog + } + + ttk::frame $w.bot;# -background $bg + grid anchor $w.bot center + pack $w.bot -side bottom -fill both + ttk::frame $w.top;# -background $bg + pack $w.top -side top -fill both -expand 1 + if {$windowingsystem ne "aqua"} { + #$w.bot configure -relief raised -bd 1 + #$w.top configure -relief raised -bd 1 + } + + # 4. Fill the top part with bitmap, message and detail (use the + # option database for -wraplength and -font so that they can be + # overridden by the caller). + + option add *Dialog.msg.wrapLength 3i widgetDefault + option add *Dialog.dtl.wrapLength 3i widgetDefault + option add *Dialog.msg.font TkCaptionFont widgetDefault + option add *Dialog.dtl.font TkDefaultFont widgetDefault + + ttk::label $w.msg -anchor nw -justify left -text $data(-message) + #-background $bg + if {$data(-detail) ne ""} { + ttk::label $w.dtl -anchor nw -justify left -text $data(-detail) + #-background $bg + } + if {$data(-icon) ne ""} { + if {$windowingsystem eq "aqua" + || ([winfo depth $w] < 4) || $tk_strictMotif} { + # ttk::label has no -bitmap option + label $w.bitmap -bitmap $data(-icon);# -background $bg + } else { + canvas $w.bitmap -width 32 -height 32 -highlightthickness 0 \ + -background $bg + switch $data(-icon) { + error { + $w.bitmap create oval 0 0 31 31 -fill red -outline black + $w.bitmap create line 9 9 23 23 -fill white -width 4 + $w.bitmap create line 9 23 23 9 -fill white -width 4 + } + info { + $w.bitmap create image 0 0 -anchor nw \ + -image ::tk::dialog::b1 + $w.bitmap create image 0 0 -anchor nw \ + -image ::tk::dialog::b2 + $w.bitmap create image 0 0 -anchor nw \ + -image ::tk::dialog::i + } + question { + $w.bitmap create image 0 0 -anchor nw \ + -image ::tk::dialog::b1 + $w.bitmap create image 0 0 -anchor nw \ + -image ::tk::dialog::b2 + $w.bitmap create image 0 0 -anchor nw \ + -image ::tk::dialog::q + } + default { + $w.bitmap create image 0 0 -anchor nw \ + -image ::tk::dialog::w1 + $w.bitmap create image 0 0 -anchor nw \ + -image ::tk::dialog::w2 + $w.bitmap create image 0 0 -anchor nw \ + -image ::tk::dialog::w3 + } + } + } + } + grid $w.bitmap $w.msg -in $w.top -sticky news -padx 2m -pady 2m + grid columnconfigure $w.top 1 -weight 1 + if {$data(-detail) ne ""} { + grid ^ $w.dtl -in $w.top -sticky news -padx 2m -pady {0 2m} + grid rowconfigure $w.top 1 -weight 1 + } else { + grid rowconfigure $w.top 0 -weight 1 + } + + # 5. Create a row of buttons at the bottom of the dialog. + + set i 0 + foreach but $buttons { + set name [lindex $but 0] + set opts [lrange $but 1 end] + if {![llength $opts]} { + # Capitalize the first letter of $name + set capName [string toupper $name 0] + set opts [list -text $capName] + } + + eval [list tk::AmpWidget ttk::button $w.$name] $opts \ + [list -command [list set tk::Priv(button) $name]] + # -padx 3m + + if {$name eq $data(-default)} { + $w.$name configure -default active + } else { + $w.$name configure -default normal + } + grid $w.$name -in $w.bot -row 0 -column $i -padx 3m -pady 2m -sticky ew + grid columnconfigure $w.bot $i -uniform buttons + # We boost the size of some Mac buttons for l&f + if {$windowingsystem eq "aqua"} { + set tmp [string tolower $name] + if {$tmp eq "ok" || $tmp eq "cancel" || $tmp eq "yes" || + $tmp eq "no" || $tmp eq "abort" || $tmp eq "retry" || + $tmp eq "ignore"} { + grid columnconfigure $w.bot $i -minsize 90 + } + grid configure $w.$name -pady 7 + } + incr i + + # create the binding for the key accelerator, based on the underline + # + # set underIdx [$w.$name cget -under] + # if {$underIdx >= 0} { + # set key [string index [$w.$name cget -text] $underIdx] + # bind $w [list $w.$name invoke] + # bind $w [list $w.$name invoke] + # } + } + bind $w [list ::tk::AltKeyInDialog $w %A] + + if {$data(-default) ne ""} { + bind $w { + if {[winfo class %W] in "Button TButton"} { + %W configure -default active + } + } + bind $w { + if {[winfo class %W] in "Button TButton"} { + %W configure -default normal + } + } + } + + # 6. Create bindings for , and on the dialog + + bind $w { + if {[winfo class %W] in "Button TButton"} { + %W invoke + } + } + + # Invoke the designated cancelling operation + bind $w [list $w.$cancel invoke] + + # At the buttons have vanished, so must do this directly. + bind $w.msg [list set tk::Priv(button) $cancel] + + # 7. Withdraw the window, then update all the geometry information + # so we know how big it wants to be, then center the window in the + # display (Motif style) and de-iconify it. + + ::tk::PlaceWindow $w widget $data(-parent) + + # 8. Set a grab and claim the focus too. + + if {$data(-default) ne ""} { + set focus $w.$data(-default) + } else { + set focus $w + } + ::tk::SetFocusGrab $w $focus + + # 9. Wait for the user to respond, then restore the focus and + # return the index of the selected button. Restore the focus + # before deleting the window, since otherwise the window manager + # may take the focus away so we can't redirect it. Finally, + # restore any grab that was in effect. + + vwait ::tk::Priv(button) + # Copy the result now so any that happens won't cause + # trouble + set result $Priv(button) + + ::tk::RestoreFocusGrab $w $focus + + return $result +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tk/msgs/cs.msg b/extensions/fablabchemnitz/inkstitch/bin/tk/msgs/cs.msg new file mode 100644 index 00000000..cd86ca95 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tk/msgs/cs.msg @@ -0,0 +1,84 @@ +namespace eval ::tk { + ::msgcat::mcset cs "&Abort" "&P\u0159eru\u0161it" + ::msgcat::mcset cs "&About..." "&O programu..." + ::msgcat::mcset cs "&Blue" "&Modr\341" + ::msgcat::mcset cs "&Cancel" "&Zru\u0161it" + ::msgcat::mcset cs "&Clear Console" "&Smazat konzolu" + ::msgcat::mcset cs "&Copy" "&Kop\355rovat" + ::msgcat::mcset cs "&Delete" "&Smazat" + ::msgcat::mcset cs "&Directory:" "&Adres\341\u0159:" + ::msgcat::mcset cs "&Edit" "&\332pravy" + ::msgcat::mcset cs "&File" "&Soubor" + ::msgcat::mcset cs "&Filter" "&Filtr" + ::msgcat::mcset cs "&Green" "Ze&len\341" + ::msgcat::mcset cs "&Help" "&N\341pov\u011bda" + ::msgcat::mcset cs "&Hide Console" "&Schovat Konzolu" + ::msgcat::mcset cs "&Ignore" "&Ignorovat" + ::msgcat::mcset cs "&No" "&Ne" + ::msgcat::mcset cs "&OK" + ::msgcat::mcset cs "&Open" "&Otev\u0159\355t" + ::msgcat::mcset cs "&Quit" "&Ukon\u010dit" + ::msgcat::mcset cs "&Red" "\u010ce&rven\341" + ::msgcat::mcset cs "&Retry" "Z&novu" + ::msgcat::mcset cs "&Save" "&Ulo\u017eit" + ::msgcat::mcset cs "&Selection:" "&V\375b\u011br:" + ::msgcat::mcset cs "&Source..." "&Zdroj..." + ::msgcat::mcset cs "&Yes" "&Ano" + ::msgcat::mcset cs "About..." "O programu..." + ::msgcat::mcset cs "All Files" "V\u0161echny soubory" + ::msgcat::mcset cs "Application Error" "Chyba programu" + ::msgcat::mcset cs "Cannot change to the directory \"%1\$s\".\nPermission denied." "Nemohu zm\u011bnit atku\341ln\355 adres\341\u0159 na \"%1\$s\".\nP\u0159\355stup odm\355tnut." + ::msgcat::mcset cs "Choose Directory" "V\375b\u011br adres\341\u0159e" + ::msgcat::mcset cs "Cl&ear" "Sma&zat" + ::msgcat::mcset cs "Clear" "Smazat" + ::msgcat::mcset cs "Color" "Barva" + ::msgcat::mcset cs "Console" "Konzole" + ::msgcat::mcset cs "Copy" "Kop\355rovat" + ::msgcat::mcset cs "Cu&t" "V&y\u0159\355znout" + ::msgcat::mcset cs "Cut" "Vy\u0159\355znout" + ::msgcat::mcset cs "Delete" "Smazat" + ::msgcat::mcset cs "Details >>" "Detaily >>" + ::msgcat::mcset cs "Directory \"%1\$s\" does not exist." "Adres\341\u0159 \"%1\$s\" neexistuje." + ::msgcat::mcset cs "E&xit" "&Konec" + ::msgcat::mcset cs "Error: %1\$s" "Chyba: %1\$s" + ::msgcat::mcset cs "Exit" "Konec" + ::msgcat::mcset cs "Fi&les:" "Sou&bory:" + ::msgcat::mcset cs "Fil&ter:" "Fil&tr:" + ::msgcat::mcset cs "File \"%1\$s\" already exists.\n\n" "Soubor \"%1\$s\" ji\u017e existuje.\n\n" + ::msgcat::mcset cs "File \"%1\$s\" already exists.\nDo you want to overwrite it?" "Soubor \"%1\$s\" ji\u017e existuje.\nChcete jej p\u0159epsat?" + ::msgcat::mcset cs "File \"%1\$s\" does not exist." "Soubor \"%1\$s\" neexistuje." + ::msgcat::mcset cs "File &name:" "&Jm\351no souboru:" + ::msgcat::mcset cs "File &names:" "&Jm\351na soubor\u016f:" + ::msgcat::mcset cs "Files of &type:" "&Typy soubor\u016f:" + ::msgcat::mcset cs "Hi" "Ahoj" + ::msgcat::mcset cs "Hide Console" "Skr\375t konsolu" + ::msgcat::mcset cs "Invalid file name \"%1\$s\"." "\u0160patn\351 jm\351no souboru \"%1\$s\"." + ::msgcat::mcset cs "Log Files" "Log soubory" + ::msgcat::mcset cs "Ok" + ::msgcat::mcset cs "Open" "Otev\u0159\355t" + ::msgcat::mcset cs "Open Multiple Files" "Otev\u0159\355t v\355ce soubor\u016f" + ::msgcat::mcset cs "P&aste" "&Vlo\u017eit" + ::msgcat::mcset cs "Paste" "Vlo\u017eit" + ::msgcat::mcset cs "Quit" "Skon\u010dit" + ::msgcat::mcset cs "Replace existing file?" "Nahradit st\341vaj\355c\355 soubor?" + ::msgcat::mcset cs "Save As" "Ulo\u017eit jako" + ::msgcat::mcset cs "Save To Log" "Ulo\u017eit do logu" + ::msgcat::mcset cs "Select Log File" "Vybrat log soubor" + ::msgcat::mcset cs "Select a file to source" "Vybrat soubor k nahr\341n\355" + ::msgcat::mcset cs "Skip Messages" "P\u0159esko\u010dit zpr\341vy" + ::msgcat::mcset cs "Source..." "Nahr\341t..." + ::msgcat::mcset cs "Tcl Scripts" "Tcl skripty" + ::msgcat::mcset cs "Tcl for Windows" "Tcl pro Windows" + ::msgcat::mcset cs "Text Files" "Textov\351 soubory" + ::msgcat::mcset cs "abort" "p\u0159eru\u0161it" + ::msgcat::mcset cs "blue" "modr\341" + ::msgcat::mcset cs "cancel" "zru\u0161it" + ::msgcat::mcset cs "extension" "p\u0159\355pona" + ::msgcat::mcset cs "extensions" "p\u0159\355pony" + ::msgcat::mcset cs "green" "zelen\341" + ::msgcat::mcset cs "ignore" "ignorovat" + ::msgcat::mcset cs "ok" + ::msgcat::mcset cs "red" "\u010derven\341" + ::msgcat::mcset cs "retry" "znovu" + ::msgcat::mcset cs "yes" "ano" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tk/msgs/da.msg b/extensions/fablabchemnitz/inkstitch/bin/tk/msgs/da.msg new file mode 100644 index 00000000..c7496087 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tk/msgs/da.msg @@ -0,0 +1,77 @@ +namespace eval ::tk { + ::msgcat::mcset da "&Abort" "&Afbryd" + ::msgcat::mcset da "&About..." "&Om..." + ::msgcat::mcset da "All Files" "Alle filer" + ::msgcat::mcset da "Application Error" "Programfejl" + ::msgcat::mcset da "&Blue" "&Bl\u00E5" + ::msgcat::mcset da "&Cancel" "&Annuller" + ::msgcat::mcset da "Cannot change to the directory \"%1\$s\".\nPermission denied." "Kan ikke skifte til katalog \"%1\$s\".\nIngen rettigheder." + ::msgcat::mcset da "Choose Directory" "V\u00E6lg katalog" + ::msgcat::mcset da "&Clear" "&Ryd" + ::msgcat::mcset da "&Clear Console" "&Ryd konsolen" + ::msgcat::mcset da "Color" "Farve" + ::msgcat::mcset da "Console" "Konsol" + ::msgcat::mcset da "&Copy" "&Kopier" + ::msgcat::mcset da "Cu&t" "Kli&p" + ::msgcat::mcset da "&Delete" "&Slet" + ::msgcat::mcset da "Details >>" "Detailer" + ::msgcat::mcset da "Directory \"%1\$s\" does not exist." "Katalog \"%1\$s\" findes ikke." + ::msgcat::mcset da "&Directory:" "&Katalog:" + ::msgcat::mcset da "&Edit" "&Rediger" + ::msgcat::mcset da "Error: %1\$s" "Fejl: %1\$s" + ::msgcat::mcset da "E&xit" "&Afslut" + ::msgcat::mcset da "&File" "&Fil" + ::msgcat::mcset da "File \"%1\$s\" already exists.\nDo you want to overwrite it?" "Filen \"%1\$s\" findes allerede.\nSkal den overskrives?" + ::msgcat::mcset da "File \"%1\$s\" already exists.\n\n" "Filen \"%1\$s\" findes allerede.\n\n" + ::msgcat::mcset da "File \"%1\$s\" does not exist." "Filen \"%1\$s\" findes ikke." + ::msgcat::mcset da "File &name:" "Fil&navn:" + ::msgcat::mcset da "File &names:" "Fil&navne:" + ::msgcat::mcset da "Files of &type:" "Fil&typer:" + ::msgcat::mcset da "Fi&les:" "Fi&ler:" + ::msgcat::mcset da "&Filter" + ::msgcat::mcset da "Fil&ter:" + ::msgcat::mcset da "&Green" "&Gr\u00F8n" + ::msgcat::mcset da "&Help" "&Hj\u00E6lp" + ::msgcat::mcset da "Hi" "Hej" + ::msgcat::mcset da "&Hide Console" "Skjul &konsol" + ::msgcat::mcset da "&Ignore" "&Ignorer" + ::msgcat::mcset da "Invalid file name \"%1\$s\"." "Ugyldig fil navn \"%1\$s\"." + ::msgcat::mcset da "Log Files" "Logfiler" + ::msgcat::mcset da "&No" "&Nej" + ::msgcat::mcset da "OK" "O.K." + ::msgcat::mcset da "&OK" "&O.K." + ::msgcat::mcset da "Ok" + ::msgcat::mcset da "Open" "\u00C5bn" + ::msgcat::mcset da "&Open" "&\u00C5bn" + ::msgcat::mcset da "Open Multiple Files" "\u00C5bn flere filer" + ::msgcat::mcset da "P&aste" "&Inds\u00E6t" + ::msgcat::mcset da "&Quit" "&Afslut" + ::msgcat::mcset da "&Red" "&R\u00F8d" + ::msgcat::mcset da "Replace existing file?" "Erstat eksisterende fil?" + ::msgcat::mcset da "&Retry" "&Gentag" + ::msgcat::mcset da "&Save" "&Gem" + ::msgcat::mcset da "Save As" "Gem som" + ::msgcat::mcset da "Save To Log" "Gem i log" + ::msgcat::mcset da "Select Log File" "V\u00E6lg logfil" + ::msgcat::mcset da "Select a file to source" "V\u00E6lg k\u00F8rbar fil" + ::msgcat::mcset da "&Selection:" "&Udvalg:" + ::msgcat::mcset da "Show &Hidden Directories" "Vis &skjulte kataloger" + ::msgcat::mcset da "Show &Hidden Files and Directories" "Vis &skjulte filer og kataloger" + ::msgcat::mcset da "Skip Messages" "Overspring beskeder" + ::msgcat::mcset da "&Source..." "&K\u00F8r..." + ::msgcat::mcset da "Tcl Scripts" "Tcl-Skripter" + ::msgcat::mcset da "Tcl for Windows" "Tcl for Windows" + ::msgcat::mcset da "Text Files" "Tekstfiler" + ::msgcat::mcset da "&Yes" "&Ja" + ::msgcat::mcset da "abort" "afbryd" + ::msgcat::mcset da "blue" "bl\u00E5" + ::msgcat::mcset da "cancel" "afbryd" + ::msgcat::mcset da "extension" + ::msgcat::mcset da "extensions" + ::msgcat::mcset da "green" "gr\u00F8n" + ::msgcat::mcset da "ignore" "ignorer" + ::msgcat::mcset da "ok" + ::msgcat::mcset da "red" "r\u00F8d" + ::msgcat::mcset da "retry" "gentag" + ::msgcat::mcset da "yes" "ja" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tk/msgs/de.msg b/extensions/fablabchemnitz/inkstitch/bin/tk/msgs/de.msg new file mode 100644 index 00000000..77503133 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tk/msgs/de.msg @@ -0,0 +1,76 @@ +namespace eval ::tk { + ::msgcat::mcset de "&Abort" "&Abbruch" + ::msgcat::mcset de "&About..." "&\u00dcber..." + ::msgcat::mcset de "All Files" "Alle Dateien" + ::msgcat::mcset de "Application Error" "Applikationsfehler" + ::msgcat::mcset de "&Blue" "&Blau" + ::msgcat::mcset de "&Cancel" "&Abbruch" + ::msgcat::mcset de "Cannot change to the directory \"%1\$s\".\nPermission denied." "Kann nicht in das Verzeichnis \"%1\$s\" wechseln.\nKeine Rechte vorhanden." + ::msgcat::mcset de "Choose Directory" "W\u00e4hle Verzeichnis" + ::msgcat::mcset de "Cl&ear" "&R\u00fccksetzen" + ::msgcat::mcset de "&Clear Console" "&Konsole l\u00f6schen" + ::msgcat::mcset de "Color" "Farbe" + ::msgcat::mcset de "Console" "Konsole" + ::msgcat::mcset de "&Copy" "&Kopieren" + ::msgcat::mcset de "Cu&t" "Aus&schneiden" + ::msgcat::mcset de "&Delete" "&L\u00f6schen" + ::msgcat::mcset de "Details >>" + ::msgcat::mcset de "Directory \"%1\$s\" does not exist." "Das Verzeichnis \"%1\$s\" existiert nicht." + ::msgcat::mcset de "&Directory:" "&Verzeichnis:" + ::msgcat::mcset de "&Edit" "&Bearbeiten" + ::msgcat::mcset de "Error: %1\$s" "Fehler: %1\$s" + ::msgcat::mcset de "E&xit" "&Ende" + ::msgcat::mcset de "&File" "&Datei" + ::msgcat::mcset de "File \"%1\$s\" already exists.\nDo you want to overwrite it?" "Die Datei \"%1\$s\" ist bereits vorhanden.\nWollen sie diese Datei \u00fcberschreiben ?" + ::msgcat::mcset de "File \"%1\$s\" already exists.\n\n" "Die Datei \"%1\$s\" ist bereits vorhanden.\n\n" + ::msgcat::mcset de "File \"%1\$s\" does not exist." "Die Datei \"%1\$s\" existiert nicht." + ::msgcat::mcset de "File &name:" "Datei&name:" + ::msgcat::mcset de "File &names:" "Datei&namen:" + ::msgcat::mcset de "Files of &type:" "Dateien des &Typs:" + ::msgcat::mcset de "Fi&les:" "Dat&eien:" + ::msgcat::mcset de "&Filter" + ::msgcat::mcset de "Fil&ter:" + ::msgcat::mcset de "&Green" "&Gr\u00fcn" + ::msgcat::mcset de "&Help" "&Hilfe" + ::msgcat::mcset de "Hi" "Hallo" + ::msgcat::mcset de "&Hide Console" "&Konsole unsichtbar machen" + ::msgcat::mcset de "&Ignore" "&Ignorieren" + ::msgcat::mcset de "Invalid file name \"%1\$s\"." "Ung\u00fcltiger Dateiname \"%1\$s\"." + ::msgcat::mcset de "Log Files" "Protokolldatei" + ::msgcat::mcset de "&No" "&Nein" + ::msgcat::mcset de "&OK" + ::msgcat::mcset de "Ok" + ::msgcat::mcset de "Open" "\u00d6ffnen" + ::msgcat::mcset de "&Open" "\u00d6&ffnen" + ::msgcat::mcset de "Open Multiple Files" "Mehrere Dateien \u00F6ffnen" + ::msgcat::mcset de "P&aste" "E&inf\u00fcgen" + ::msgcat::mcset de "&Quit" "&Beenden" + ::msgcat::mcset de "&Red" "&Rot" + ::msgcat::mcset de "Replace existing file?" "Existierende Datei ersetzen?" + ::msgcat::mcset de "&Retry" "&Wiederholen" + ::msgcat::mcset de "&Save" "&Speichern" + ::msgcat::mcset de "Save As" "Speichern unter" + ::msgcat::mcset de "Save To Log" "In Protokoll speichern" + ::msgcat::mcset de "Select Log File" "Protokolldatei ausw\u00e4hlen" + ::msgcat::mcset de "Select a file to source" "Auszuf\u00fchrende Datei ausw\u00e4hlen" + ::msgcat::mcset de "&Selection:" "Auswah&l:" + ::msgcat::mcset de "Show &Hidden Directories" "Zeige versteckte Dateien" + ::msgcat::mcset de "Show &Hidden Files and Directories" "Zeige versteckte Dateien und Verzeichnisse" + ::msgcat::mcset de "Skip Messages" "Weitere Nachrichten \u00fcberspringen" + ::msgcat::mcset de "&Source..." "&Ausf\u00fchren..." + ::msgcat::mcset de "Tcl Scripts" "Tcl-Skripte" + ::msgcat::mcset de "Tcl for Windows" "Tcl f\u00fcr Windows" + ::msgcat::mcset de "Text Files" "Textdateien" + ::msgcat::mcset de "&Yes" "&Ja" + ::msgcat::mcset de "abort" "abbrechen" + ::msgcat::mcset de "blue" "blau" + ::msgcat::mcset de "cancel" "abbrechen" + ::msgcat::mcset de "extension" "Erweiterung" + ::msgcat::mcset de "extensions" "Erweiterungen" + ::msgcat::mcset de "green" "gr\u00fcn" + ::msgcat::mcset de "ignore" "ignorieren" + ::msgcat::mcset de "ok" + ::msgcat::mcset de "red" "rot" + ::msgcat::mcset de "retry" "wiederholen" + ::msgcat::mcset de "yes" "ja" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tk/msgs/el.msg b/extensions/fablabchemnitz/inkstitch/bin/tk/msgs/el.msg new file mode 100644 index 00000000..1dcc4513 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tk/msgs/el.msg @@ -0,0 +1,86 @@ +## Messages for the Greek (Hellenic - "el") language. +## Please report any changes/suggestions to: +## petasis@iit.demokritos.gr + +namespace eval ::tk { + ::msgcat::mcset el "&Abort" "\u03a4\u03b5\u03c1\u03bc\u03b1\u03c4\u03b9\u03c3\u03bc\u03cc\u03c2" + ::msgcat::mcset el "About..." "\u03a3\u03c7\u03b5\u03c4\u03b9\u03ba\u03ac..." + ::msgcat::mcset el "All Files" "\u038c\u03bb\u03b1 \u03c4\u03b1 \u0391\u03c1\u03c7\u03b5\u03af\u03b1" + ::msgcat::mcset el "Application Error" "\u039b\u03ac\u03b8\u03bf\u03c2 \u0395\u03c6\u03b1\u03c1\u03bc\u03bf\u03b3\u03ae\u03c2" + ::msgcat::mcset el "&Blue" "\u039c\u03c0\u03bb\u03b5" + ::msgcat::mcset el "&Cancel" "\u0391\u03ba\u03cd\u03c1\u03c9\u03c3\u03b7" + ::msgcat::mcset el \ +"Cannot change to the directory \"%1\$s\".\nPermission denied." \ +"\u0394\u03b5\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03b4\u03c5\u03bd\u03b1\u03c4\u03ae \u03b7 \u03b1\u03bb\u03bb\u03b1\u03b3\u03ae \u03ba\u03b1\u03c4\u03b1\u03bb\u03cc\u03b3\u03bf\u03c5 \u03c3\u03b5 \"%1\$s\".\n\u0397 \u03c0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7 \u03b4\u03b5\u03bd \u03b5\u03c0\u03b9\u03c4\u03c1\u03ad\u03c0\u03b5\u03c4\u03b1\u03b9." + ::msgcat::mcset el "Choose Directory" "\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u039a\u03b1\u03c4\u03b1\u03bb\u03cc\u03b3\u03bf\u03c5" + ::msgcat::mcset el "Clear" "\u039a\u03b1\u03b8\u03b1\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2" + ::msgcat::mcset el "Color" "\u03a7\u03c1\u03ce\u03bc\u03b1" + ::msgcat::mcset el "Console" "\u039a\u03bf\u03bd\u03c3\u03cc\u03bb\u03b1" + ::msgcat::mcset el "Copy" "\u0391\u03bd\u03c4\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae" + ::msgcat::mcset el "Cut" "\u0391\u03c0\u03bf\u03ba\u03bf\u03c0\u03ae" + ::msgcat::mcset el "Delete" "\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae" + ::msgcat::mcset el "Details >>" "\u039b\u03b5\u03c0\u03c4\u03bf\u03bc\u03ad\u03c1\u03b5\u03b9\u03b5\u03c2 >>" + ::msgcat::mcset el "Directory \"%1\$s\" does not exist." \ + "\u039f \u03ba\u03b1\u03c4\u03ac\u03bb\u03bf\u03b3\u03bf\u03c2 \"%1\$s\" \u03b4\u03b5\u03bd \u03c5\u03c0\u03ac\u03c1\u03c7\u03b5\u03b9." + ::msgcat::mcset el "&Directory:" "&\u039a\u03b1\u03c4\u03ac\u03bb\u03bf\u03b3\u03bf\u03c2:" + ::msgcat::mcset el "Error: %1\$s" "\u039b\u03ac\u03b8\u03bf\u03c2: %1\$s" + ::msgcat::mcset el "Exit" "\u0388\u03be\u03bf\u03b4\u03bf\u03c2" + ::msgcat::mcset el \ + "File \"%1\$s\" already exists.\nDo you want to overwrite it?" \ + "\u03a4\u03bf \u03b1\u03c1\u03c7\u03b5\u03af\u03bf \"%1\$s\" \u03ae\u03b4\u03b7 \u03c5\u03c0\u03ac\u03c1\u03c7\u03b5\u03b9.\n\u0398\u03ad\u03bb\u03b5\u03c4\u03b5 \u03bd\u03b1 \u03b5\u03c0\u03b9\u03ba\u03b1\u03bb\u03c5\u03c6\u03b8\u03b5\u03af;" + ::msgcat::mcset el "File \"%1\$s\" already exists.\n\n" \ + "\u03a4\u03bf \u03b1\u03c1\u03c7\u03b5\u03af\u03bf \"%1\$s\" \u03ae\u03b4\u03b7 \u03c5\u03c0\u03ac\u03c1\u03c7\u03b5\u03b9.\n\n" + ::msgcat::mcset el "File \"%1\$s\" does not exist." \ + "\u03a4\u03bf \u03b1\u03c1\u03c7\u03b5\u03af\u03bf \"%1\$s\" \u03b4\u03b5\u03bd \u03c5\u03c0\u03ac\u03c1\u03c7\u03b5\u03b9." + ::msgcat::mcset el "File &name:" "\u038c&\u03bd\u03bf\u03bc\u03b1 \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5:" + ::msgcat::mcset el "File &names:" "\u038c&\u03bd\u03bf\u03bc\u03b1 \u03b1\u03c1\u03c7\u03b5\u03af\u03c9\u03bd:" + ::msgcat::mcset el "Files of &type:" "\u0391\u03c1\u03c7\u03b5\u03af\u03b1 \u03c4\u03bf\u03c5 &\u03c4\u03cd\u03c0\u03bf\u03c5:" + ::msgcat::mcset el "Fi&les:" "\u0391\u03c1\u03c7\u03b5\u03af\u03b1:" + ::msgcat::mcset el "&Filter" "\u03a6\u03af\u03bb\u03c4\u03c1\u03bf" + ::msgcat::mcset el "Fil&ter:" "\u03a6\u03af\u03bb\u03c4\u03c1\u03bf:" + ::msgcat::mcset el "&Green" "\u03a0\u03c1\u03ac\u03c3\u03b9\u03bd\u03bf" + ::msgcat::mcset el "Hi" "\u0393\u03b5\u03b9\u03b1" + ::msgcat::mcset el "Hide Console" "\u0391\u03c0\u03cc\u03ba\u03c1\u03c5\u03c8\u03b7 \u03ba\u03bf\u03bd\u03c3\u03cc\u03bb\u03b1\u03c2" + ::msgcat::mcset el "&Ignore" "\u0391\u03b3\u03bd\u03cc\u03b7\u03c3\u03b7" + ::msgcat::mcset el "Invalid file name \"%1\$s\"." \ + "\u0386\u03ba\u03c5\u03c1\u03bf \u03cc\u03bd\u03bf\u03bc\u03b1 \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5 \"%1\$s\"." + ::msgcat::mcset el "Log Files" "\u0391\u03c1\u03c7\u03b5\u03af\u03b1 \u039a\u03b1\u03c4\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae\u03c2" + ::msgcat::mcset el "&No" "\u038c\u03c7\u03b9" + ::msgcat::mcset el "&OK" "\u0395\u03bd\u03c4\u03ac\u03be\u03b5\u03b9" + ::msgcat::mcset el "&Ok" "\u0395\u03bd\u03c4\u03ac\u03be\u03b5\u03b9" + ::msgcat::mcset el "Open" "\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1" + ::msgcat::mcset el "&Open" "\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1" + ::msgcat::mcset el "Open Multiple Files" \ + "\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1 \u03c0\u03bf\u03bb\u03bb\u03b1\u03c0\u03bb\u03ce\u03bd \u03b1\u03c1\u03c7\u03b5\u03af\u03c9\u03bd" + ::msgcat::mcset el "Paste" "\u0395\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7" + ::msgcat::mcset el "Quit" "\u0388\u03be\u03bf\u03b4\u03bf\u03c2" + ::msgcat::mcset el "&Red" "\u039a\u03cc\u03ba\u03ba\u03b9\u03bd\u03bf" + ::msgcat::mcset el "Replace existing file?" \ + "\u0395\u03c0\u03b9\u03ba\u03ac\u03bb\u03c5\u03c8\u03b7 \u03c5\u03c0\u03ac\u03c1\u03c7\u03bf\u03bd\u03c4\u03bf\u03c2 \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5;" + ::msgcat::mcset el "&Retry" "\u03a0\u03c1\u03bf\u03c3\u03c0\u03ac\u03b8\u03b7\u03c3\u03b5 \u03be\u03b1\u03bd\u03ac" + ::msgcat::mcset el "&Save" "\u0391\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7" + ::msgcat::mcset el "Save As" "\u0391\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7 \u03c3\u03b1\u03bd" + ::msgcat::mcset el "Save To Log" "\u0391\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7 \u03c3\u03c4\u03bf \u03b1\u03c1\u03c7\u03b5\u03af\u03bf \u03ba\u03b1\u03c4\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae\u03c2" + ::msgcat::mcset el "Select Log File" "\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5 \u03ba\u03b1\u03c4\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae\u03c2" + ::msgcat::mcset el "Select a file to source" \ + "\u0395\u03c0\u03b9\u03bb\u03ad\u03be\u03c4\u03b5 \u03b1\u03c1\u03c7\u03b5\u03af\u03bf \u03b3\u03b9\u03b1 \u03b5\u03ba\u03c4\u03ad\u03bb\u03b5\u03c3\u03b7" + ::msgcat::mcset el "&Selection:" "\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae:" + ::msgcat::mcset el "Skip Messages" "\u0391\u03c0\u03bf\u03c6\u03c5\u03b3\u03ae\u03bc\u03b7\u03bd\u03c5\u03bc\u03ac\u03c4\u03c9\u03bd" + ::msgcat::mcset el "Source..." "\u0395\u03ba\u03c4\u03ad\u03bb\u03b5\u03c3\u03b7..." + ::msgcat::mcset el "Tcl Scripts" "Tcl Scripts" + ::msgcat::mcset el "Tcl for Windows" "Tcl \u03b3\u03b9\u03b1 Windows" + ::msgcat::mcset el "Text Files" "\u0391\u03c1\u03c7\u03b5\u03af\u03b1 \u039a\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5" + ::msgcat::mcset el "&Yes" "\u039d\u03b1\u03b9" + ::msgcat::mcset el "abort" "\u03c4\u03b5\u03c1\u03bc\u03b1\u03c4\u03b9\u03c3\u03bc\u03cc\u03c2" + ::msgcat::mcset el "blue" "\u03bc\u03c0\u03bb\u03b5" + ::msgcat::mcset el "cancel" "\u03b1\u03ba\u03cd\u03c1\u03c9\u03c3\u03b7" + ::msgcat::mcset el "extension" "\u03b5\u03c0\u03ad\u03ba\u03c4\u03b1\u03c3\u03b7" + ::msgcat::mcset el "extensions" "\u03b5\u03c0\u03b5\u03ba\u03c4\u03ac\u03c3\u03b5\u03b9\u03c2" + ::msgcat::mcset el "green" "\u03c0\u03c1\u03ac\u03c3\u03b9\u03bd\u03bf" + ::msgcat::mcset el "ignore" "\u03b1\u03b3\u03bd\u03cc\u03b7\u03c3\u03b7" + ::msgcat::mcset el "ok" "\u03b5\u03bd\u03c4\u03ac\u03be\u03b5\u03b9" + ::msgcat::mcset el "red" "\u03ba\u03cc\u03ba\u03ba\u03b9\u03bd\u03bf" + ::msgcat::mcset el "retry" "\u03c0\u03c1\u03bf\u03c3\u03c0\u03ac\u03b8\u03b7\u03c3\u03b5 \u03be\u03b1\u03bd\u03ac" + ::msgcat::mcset el "yes" "\u03bd\u03b1\u03b9" +} + diff --git a/extensions/fablabchemnitz/inkstitch/bin/tk/msgs/en.msg b/extensions/fablabchemnitz/inkstitch/bin/tk/msgs/en.msg new file mode 100644 index 00000000..b4e51bfe --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tk/msgs/en.msg @@ -0,0 +1,76 @@ +namespace eval ::tk { + ::msgcat::mcset en "&Abort" + ::msgcat::mcset en "&About..." + ::msgcat::mcset en "All Files" + ::msgcat::mcset en "Application Error" + ::msgcat::mcset en "&Blue" + ::msgcat::mcset en "&Cancel" + ::msgcat::mcset en "Cannot change to the directory \"%1\$s\".\nPermission denied." + ::msgcat::mcset en "Choose Directory" + ::msgcat::mcset en "Cl&ear" + ::msgcat::mcset en "&Clear Console" + ::msgcat::mcset en "Color" + ::msgcat::mcset en "Console" + ::msgcat::mcset en "&Copy" + ::msgcat::mcset en "Cu&t" + ::msgcat::mcset en "&Delete" + ::msgcat::mcset en "Details >>" + ::msgcat::mcset en "Directory \"%1\$s\" does not exist." + ::msgcat::mcset en "&Directory:" + ::msgcat::mcset en "&Edit" + ::msgcat::mcset en "Error: %1\$s" + ::msgcat::mcset en "E&xit" + ::msgcat::mcset en "&File" + ::msgcat::mcset en "File \"%1\$s\" already exists.\nDo you want to overwrite it?" + ::msgcat::mcset en "File \"%1\$s\" already exists.\n\n" + ::msgcat::mcset en "File \"%1\$s\" does not exist." + ::msgcat::mcset en "File &name:" + ::msgcat::mcset en "File &names:" + ::msgcat::mcset en "Files of &type:" + ::msgcat::mcset en "Fi&les:" + ::msgcat::mcset en "&Filter" + ::msgcat::mcset en "Fil&ter:" + ::msgcat::mcset en "&Green" + ::msgcat::mcset en "&Help" + ::msgcat::mcset en "Hi" + ::msgcat::mcset en "&Hide Console" + ::msgcat::mcset en "&Ignore" + ::msgcat::mcset en "Invalid file name \"%1\$s\"." + ::msgcat::mcset en "Log Files" + ::msgcat::mcset en "&No" + ::msgcat::mcset en "&OK" + ::msgcat::mcset en "Ok" + ::msgcat::mcset en "Open" + ::msgcat::mcset en "&Open" + ::msgcat::mcset en "Open Multiple Files" + ::msgcat::mcset en "P&aste" + ::msgcat::mcset en "&Quit" + ::msgcat::mcset en "&Red" + ::msgcat::mcset en "Replace existing file?" + ::msgcat::mcset en "&Retry" + ::msgcat::mcset en "&Save" + ::msgcat::mcset en "Save As" + ::msgcat::mcset en "Save To Log" + ::msgcat::mcset en "Select Log File" + ::msgcat::mcset en "Select a file to source" + ::msgcat::mcset en "&Selection:" + ::msgcat::mcset en "Show &Hidden Directories" + ::msgcat::mcset en "Show &Hidden Files and Directories" + ::msgcat::mcset en "Skip Messages" + ::msgcat::mcset en "&Source..." + ::msgcat::mcset en "Tcl Scripts" + ::msgcat::mcset en "Tcl for Windows" + ::msgcat::mcset en "Text Files" + ::msgcat::mcset en "&Yes" + ::msgcat::mcset en "abort" + ::msgcat::mcset en "blue" + ::msgcat::mcset en "cancel" + ::msgcat::mcset en "extension" + ::msgcat::mcset en "extensions" + ::msgcat::mcset en "green" + ::msgcat::mcset en "ignore" + ::msgcat::mcset en "ok" + ::msgcat::mcset en "red" + ::msgcat::mcset en "retry" + ::msgcat::mcset en "yes" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tk/msgs/en_gb.msg b/extensions/fablabchemnitz/inkstitch/bin/tk/msgs/en_gb.msg new file mode 100644 index 00000000..efafa38c --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tk/msgs/en_gb.msg @@ -0,0 +1,3 @@ +namespace eval ::tk { + ::msgcat::mcset en_gb Color Colour +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tk/msgs/eo.msg b/extensions/fablabchemnitz/inkstitch/bin/tk/msgs/eo.msg new file mode 100644 index 00000000..85436c31 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tk/msgs/eo.msg @@ -0,0 +1,73 @@ +namespace eval ::tk { + ::msgcat::mcset eo "&Abort" "&\u0108esigo" + ::msgcat::mcset eo "&About..." "Pri..." + ::msgcat::mcset eo "All Files" "\u0108ioj dosieroj" + ::msgcat::mcset eo "Application Error" "Aplikoerraro" + ::msgcat::mcset eo "&Blue" "&Blua" + ::msgcat::mcset eo "&Cancel" "&Rezignu" + ::msgcat::mcset eo "Cannot change to the directory \"%1\$s\".\nPermission denied." "Neeble \u0109angi al dosierulon \"%1\$s\".\nVi ne rajtas tion." + ::msgcat::mcset eo "Choose Directory" "Elektu Dosierujo" + ::msgcat::mcset eo "&Clear" "&Klaru" + ::msgcat::mcset eo "&Clear Console" "&Klaru konzolon" + ::msgcat::mcset eo "Color" "Farbo" + ::msgcat::mcset eo "Console" "Konzolo" + ::msgcat::mcset eo "&Copy" "&Kopiu" + ::msgcat::mcset eo "Cu&t" "&Enpo\u015digu" + ::msgcat::mcset eo "&Delete" "&Forprenu" + ::msgcat::mcset eo "Details >>" "Detaloj >>" + ::msgcat::mcset eo "Directory \"%1\$s\" does not exist." "La dosierujo \"%1\$s\" ne ekzistas." + ::msgcat::mcset eo "&Directory:" "&Dosierujo:" + ::msgcat::mcset eo "&Edit" "&Redaktu" + ::msgcat::mcset eo "Error: %1\$s" "Eraro: %1\$s" + ::msgcat::mcset eo "E&xit" "&Eliru" + ::msgcat::mcset eo "&File" "&Dosiero" + ::msgcat::mcset eo "File \"%1\$s\" already exists.\nDo you want to overwrite it?" "La dosiero \"%1\$s\" jam ekzistas.\n\u0108u vi volas anstata\u00fbigi la dosieron?" + ::msgcat::mcset eo "File \"%1\$s\" already exists.\n\n" "La dosiero \"%1\$s\" jam egzistas. \n\n" + ::msgcat::mcset eo "File \"%1\$s\" does not exist." "La dosierp \"%1\$s\" ne estas." + ::msgcat::mcset eo "File &name:" "Dosiero&nomo:" + ::msgcat::mcset eo "File &names:" "Dosiero&nomoj:" + ::msgcat::mcset eo "Files of &type:" "Dosieroj de &Typo:" + ::msgcat::mcset eo "Fi&les:" "Do&sieroj:" + ::msgcat::mcset eo "&Filter" "&Filtrilo" + ::msgcat::mcset eo "Fil&ter:" "&Filtrilo:" + ::msgcat::mcset eo "&Green" "&Verda" + ::msgcat::mcset eo "&Help" "&Helpu" + ::msgcat::mcset eo "Hi" "Saluton" + ::msgcat::mcset eo "&Hide Console" "&Ka\u015du konzolon" + ::msgcat::mcset eo "&Ignore" "&Ignoru" + ::msgcat::mcset eo "Invalid file name \"%1\$s\"." "Malvalida dosieronomo \"%1\$s\"." + ::msgcat::mcset eo "Log Files" "Protokolo" + ::msgcat::mcset eo "&No" "&Ne" + ::msgcat::mcset eo "OK" + ::msgcat::mcset eo "Ok" + ::msgcat::mcset eo "Open" "Malfermu" + ::msgcat::mcset eo "&Open" "&Malfermu" + ::msgcat::mcset eo "Open Multiple Files" "Melfermu multan dosierojn" + ::msgcat::mcset eo "P&aste" "&Elpo\u015digi" + ::msgcat::mcset eo "&Quit" "&Finigu" + ::msgcat::mcset eo "&Red" "&Rosa" + ::msgcat::mcset eo "Replace existing file?" "\u0108u anstata\u00fbu ekzistantan dosieron?" + ::msgcat::mcset eo "&Retry" "&Ripetu" + ::msgcat::mcset eo "&Save" "&Savu" + ::msgcat::mcset eo "Save As" "Savu kiel" + ::msgcat::mcset eo "Save To Log" "Savu en protokolon" + ::msgcat::mcset eo "Select Log File" "Elektu prokolodosieron" + ::msgcat::mcset eo "Select a file to source" "Elektu dosieron por interpreti" + ::msgcat::mcset eo "&Selection:" "&Elekto:" + ::msgcat::mcset eo "Skip Messages" "transsaltu pluajn mesa\u011dojn" + ::msgcat::mcset eo "&Source..." "&Fontoprogramo..." + ::msgcat::mcset eo "Tcl Scripts" "Tcl-skriptoj" + ::msgcat::mcset eo "Tcl for Windows" "Tcl por vindoso" + ::msgcat::mcset eo "Text Files" "Tekstodosierojn" + ::msgcat::mcset eo "&Yes" "&Jes" + ::msgcat::mcset eo "abort" "\u0109esigo" + ::msgcat::mcset eo "blue" "blua" + ::msgcat::mcset eo "cancel" "rezignu" + ::msgcat::mcset eo "extension" "ekspansio" + ::msgcat::mcset eo "extensions" "ekspansioj" + ::msgcat::mcset eo "green" "verda" + ::msgcat::mcset eo "ignore" "ignorieren" + ::msgcat::mcset eo "red" "ru\u011da" + ::msgcat::mcset eo "retry" "ripetu" + ::msgcat::mcset eo "yes" "jes" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tk/msgs/es.msg b/extensions/fablabchemnitz/inkstitch/bin/tk/msgs/es.msg new file mode 100644 index 00000000..ceb12d6c --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tk/msgs/es.msg @@ -0,0 +1,74 @@ +namespace eval ::tk { + ::msgcat::mcset es "&Abort" "&Abortar" + ::msgcat::mcset es "&About..." "&Acerca de ..." + ::msgcat::mcset es "All Files" "Todos los archivos" + ::msgcat::mcset es "Application Error" "Error de la aplicaci\u00f3n" + ::msgcat::mcset es "&Blue" "&Azul" + ::msgcat::mcset es "&Cancel" "&Cancelar" + ::msgcat::mcset es "Cannot change to the directory \"%1\$s\".\nPermission denied." "No es posible acceder al directorio \"%1\$s\".\nPermiso denegado." + ::msgcat::mcset es "Choose Directory" "Elegir directorio" + ::msgcat::mcset es "Cl&ear" "&Borrar" + ::msgcat::mcset es "&Clear Console" "&Borrar consola" + ::msgcat::mcset es "Color" "Color" + ::msgcat::mcset es "Console" "Consola" + ::msgcat::mcset es "&Copy" "&Copiar" + ::msgcat::mcset es "Cu&t" "Cor&tar" + ::msgcat::mcset es "&Delete" "&Borrar" + ::msgcat::mcset es "Details >>" "Detalles >>" + ::msgcat::mcset es "Directory \"%1\$s\" does not exist." "El directorio \"%1\$s\" no existe." + ::msgcat::mcset es "&Directory:" "&Directorio:" + ::msgcat::mcset es "&Edit" "&Editar" + ::msgcat::mcset es "Error: %1\$s" "Error: %1\$s" + ::msgcat::mcset es "E&xit" "Salir" + ::msgcat::mcset es "&File" "&Archivo" + ::msgcat::mcset es "File \"%1\$s\" already exists.\nDo you want to overwrite it?" "El archivo \"%1\$s\" ya existe.\n\u00bfDesea sobreescribirlo?" + ::msgcat::mcset es "File \"%1\$s\" already exists.\n\n" "El archivo \"%1\$s\" ya existe.\n\n" + ::msgcat::mcset es "File \"%1\$s\" does not exist." "El archivo \"%1\$s\" no existe." + ::msgcat::mcset es "File &name:" "&Nombre de archivo:" + ::msgcat::mcset es "File &names:" "&Nombres de archivo:" + ::msgcat::mcset es "Files of &type:" "Archivos de &tipo:" + ::msgcat::mcset es "Fi&les:" "&Archivos:" + ::msgcat::mcset es "&Filter" "&Filtro" + ::msgcat::mcset es "Fil&ter:" "Fil&tro:" + ::msgcat::mcset es "&Green" "&Verde" + ::msgcat::mcset es "&Help" "&Ayuda" + ::msgcat::mcset es "Hi" "Hola" + ::msgcat::mcset es "&Hide Console" "&Esconder la consola" + ::msgcat::mcset es "&Ignore" "&Ignorar" + ::msgcat::mcset es "Invalid file name \"%1\$s\"." "Nombre de archivo inv\u00e1lido \"%1\$s\"." + ::msgcat::mcset es "Log Files" "Ficheros de traza" + ::msgcat::mcset es "&No" "&No" + ::msgcat::mcset es "&OK" "&OK" + ::msgcat::mcset es "Ok" "Ok" + ::msgcat::mcset es "Open" "Abrir" + ::msgcat::mcset es "&Open" "&Abrir" + ::msgcat::mcset es "Open Multiple Files" "Abrir m\u00faltiples archivos" + ::msgcat::mcset es "P&aste" "Peg&ar" + ::msgcat::mcset es "&Quit" "&Abandonar" + ::msgcat::mcset es "&Red" "&Rojo" + ::msgcat::mcset es "Replace existing file?" "\u00bfReemplazar el archivo existente?" + ::msgcat::mcset es "&Retry" "&Reintentar" + ::msgcat::mcset es "&Save" "&Guardar" + ::msgcat::mcset es "Save As" "Guardar como" + ::msgcat::mcset es "Save To Log" "Guardar al archivo de traza" + ::msgcat::mcset es "Select Log File" "Elegir un archivo de traza" + ::msgcat::mcset es "Select a file to source" "Seleccionar un archivo a evaluar" + ::msgcat::mcset es "&Selection:" "&Selecci\u00f3n:" + ::msgcat::mcset es "Skip Messages" "Omitir los mensajes" + ::msgcat::mcset es "&Source..." "E&valuar..." + ::msgcat::mcset es "Tcl Scripts" "Scripts Tcl" + ::msgcat::mcset es "Tcl for Windows" "Tcl para Windows" + ::msgcat::mcset es "Text Files" "Archivos de texto" + ::msgcat::mcset es "&Yes" "&S\u00ed" + ::msgcat::mcset es "abort" "abortar" + ::msgcat::mcset es "blue" "azul" + ::msgcat::mcset es "cancel" "cancelar" + ::msgcat::mcset es "extension" "extensi\u00f3n" + ::msgcat::mcset es "extensions" "extensiones" + ::msgcat::mcset es "green" "verde" + ::msgcat::mcset es "ignore" "ignorar" + ::msgcat::mcset es "ok" "ok" + ::msgcat::mcset es "red" "rojo" + ::msgcat::mcset es "retry" "reintentar" + ::msgcat::mcset es "yes" "s\u00ed" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tk/msgs/fr.msg b/extensions/fablabchemnitz/inkstitch/bin/tk/msgs/fr.msg new file mode 100644 index 00000000..b1eb7e31 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tk/msgs/fr.msg @@ -0,0 +1,70 @@ +namespace eval ::tk { + ::msgcat::mcset fr "&Abort" "&Annuler" + ::msgcat::mcset fr "About..." "\u00c0 propos..." + ::msgcat::mcset fr "All Files" "Tous les fichiers" + ::msgcat::mcset fr "Application Error" "Erreur d'application" + ::msgcat::mcset fr "&Blue" "&Bleu" + ::msgcat::mcset fr "&Cancel" "&Annuler" + ::msgcat::mcset fr "Cannot change to the directory \"%1\$s\".\nPermission denied." "Impossible d'acc\u00e9der au r\u00e9pertoire \"%1\$s\".\nPermission refus\u00e9e." + ::msgcat::mcset fr "Choose Directory" "Choisir r\u00e9pertoire" + ::msgcat::mcset fr "Clear" "Effacer" + ::msgcat::mcset fr "Color" "Couleur" + ::msgcat::mcset fr "Console" + ::msgcat::mcset fr "Copy" "Copier" + ::msgcat::mcset fr "Cut" "Couper" + ::msgcat::mcset fr "Delete" "Effacer" + ::msgcat::mcset fr "Details >>" "D\u00e9tails >>" + ::msgcat::mcset fr "Directory \"%1\$s\" does not exist." "Le r\u00e9pertoire \"%1\$s\" n'existe pas." + ::msgcat::mcset fr "&Directory:" "&R\u00e9pertoire:" + ::msgcat::mcset fr "Error: %1\$s" "Erreur: %1\$s" + ::msgcat::mcset fr "Exit" "Quitter" + ::msgcat::mcset fr "File \"%1\$s\" already exists.\nDo you want to overwrite it?" "Le fichier \"%1\$s\" existe d\u00e9j\u00e0.\nVoulez-vous l'\u00e9craser?" + ::msgcat::mcset fr "File \"%1\$s\" already exists.\n\n" "Le fichier \"%1\$s\" existe d\u00e9j\u00e0.\n\n" + ::msgcat::mcset fr "File \"%1\$s\" does not exist." "Le fichier \"%1\$s\" n'existe pas." + ::msgcat::mcset fr "File &name:" "&Nom de fichier:" + ::msgcat::mcset fr "File &names:" "&Noms de fichiers:" + ::msgcat::mcset fr "Files of &type:" "&Type de fichiers:" + ::msgcat::mcset fr "Fi&les:" "Fich&iers:" + ::msgcat::mcset fr "&Filter" "&Filtre" + ::msgcat::mcset fr "Fil&ter:" "Fil&tre:" + ::msgcat::mcset fr "&Green" "&Vert" + ::msgcat::mcset fr "Hi" "Salut" + ::msgcat::mcset fr "Hide Console" "Cacher la Console" + ::msgcat::mcset fr "&Ignore" "&Ignorer" + ::msgcat::mcset fr "Invalid file name \"%1\$s\"." "Nom de fichier invalide \"%1\$s\"." + ::msgcat::mcset fr "Log Files" "Fichiers de trace" + ::msgcat::mcset fr "&No" "&Non" + ::msgcat::mcset fr "&OK" + ::msgcat::mcset fr "Ok" + ::msgcat::mcset fr "Open" "Ouvrir" + ::msgcat::mcset fr "&Open" "&Ouvrir" + ::msgcat::mcset fr "Open Multiple Files" "Ouvrir plusieurs fichiers" + ::msgcat::mcset fr "Paste" "Coller" + ::msgcat::mcset fr "Quit" "Quitter" + ::msgcat::mcset fr "&Red" "&Rouge" + ::msgcat::mcset fr "Replace existing file?" "Remplacer le fichier existant?" + ::msgcat::mcset fr "&Retry" "&R\u00e9-essayer" + ::msgcat::mcset fr "&Save" "&Sauvegarder" + ::msgcat::mcset fr "Save As" "Sauvegarder sous" + ::msgcat::mcset fr "Save To Log" "Sauvegarde au fichier de trace" + ::msgcat::mcset fr "Select Log File" "Choisir un fichier de trace" + ::msgcat::mcset fr "Select a file to source" "Choisir un fichier \u00e0 \u00e9valuer" + ::msgcat::mcset fr "&Selection:" "&S\u00e9lection:" + ::msgcat::mcset fr "Skip Messages" "Omettre les messages" + ::msgcat::mcset fr "Source..." "\u00c9valuer..." + ::msgcat::mcset fr "Tcl Scripts" "Scripts Tcl" + ::msgcat::mcset fr "Tcl for Windows" "Tcl pour Windows" + ::msgcat::mcset fr "Text Files" "Fichiers texte" + ::msgcat::mcset fr "&Yes" "&Oui" + ::msgcat::mcset fr "abort" "abandonner" + ::msgcat::mcset fr "blue" "bleu" + ::msgcat::mcset fr "cancel" "annuler" + ::msgcat::mcset fr "extension" + ::msgcat::mcset fr "extensions" + ::msgcat::mcset fr "green" "vert" + ::msgcat::mcset fr "ignore" "ignorer" + ::msgcat::mcset fr "ok" + ::msgcat::mcset fr "red" "rouge" + ::msgcat::mcset fr "retry" "r\u00e9essayer" + ::msgcat::mcset fr "yes" "oui" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tk/msgs/hu.msg b/extensions/fablabchemnitz/inkstitch/bin/tk/msgs/hu.msg new file mode 100644 index 00000000..fc4700f9 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tk/msgs/hu.msg @@ -0,0 +1,77 @@ +namespace eval ::tk { + ::msgcat::mcset hu "&Abort" "&Megszak\u00edt\u00e1s" + ::msgcat::mcset hu "About..." "N\u00e9vjegy..." + ::msgcat::mcset hu "All Files" "Minden f\u00e1jl" + ::msgcat::mcset hu "All Files (*) " "Minden f\u00e1jl (*) " + ::msgcat::mcset hu "Application Error" "Alkalmaz\u00e1s hiba" + ::msgcat::mcset hu "&Blue" "&K\u00e9k" + ::msgcat::mcset hu "&Cancel" "M\u00e9g&sem" + ::msgcat::mcset hu "Cannot change to the directory \"%1\$s\".\nPermission denied." "A k\u00f6nyvt\u00e1rv\u00e1lt\u00e1s nem siker\u00fclt: \"%1\$s\".\nHozz\u00e1f\u00e9r\u00e9s megtagadva." + ::msgcat::mcset hu "Choose Directory" "K\u00f6nyvt\u00e1r kiv\u00e1laszt\u00e1sa" + ::msgcat::mcset hu "Clear" "T\u00f6rl\u00e9s" + ::msgcat::mcset hu "&Clear Console" "&T\u00f6rl\u00e9s Konzol" + ::msgcat::mcset hu "Color" "Sz\u00edn" + ::msgcat::mcset hu "Console" "Konzol" + ::msgcat::mcset hu "&Copy" "&M\u00e1sol\u00e1s" + ::msgcat::mcset hu "Cu&t" "&Kiv\u00e1g\u00e1s" + ::msgcat::mcset hu "&Delete" "&T\u00f6rl\u00e9s" + ::msgcat::mcset hu "Details >>" "R\u00e9szletek >>" + ::msgcat::mcset hu "Directory \"%1\$s\" does not exist." "\"%1\$s\" k\u00f6nyvt\u00e1r nem l\u00e9tezik." + ::msgcat::mcset hu "&Directory:" "&K\u00f6nyvt\u00e1r:" + #::msgcat::mcset hu "&Edit" + ::msgcat::mcset hu "Error: %1\$s" "Hiba: %1\$s" + ::msgcat::mcset hu "E&xit" "Kil\u00e9p\u00e9s" + ::msgcat::mcset hu "&File" "&F\u00e1jl" + ::msgcat::mcset hu "File \"%1\$s\" already exists.\nDo you want to overwrite it?" "\"%1\$s\" f\u00e1jl m\u00e1r l\u00e9tezik.\nFel\u00fcl\u00edrjam?" + ::msgcat::mcset hu "File \"%1\$s\" already exists.\n\n" "\"%1\$s\" f\u00e1jl m\u00e1r l\u00e9tezik.\n\n" + ::msgcat::mcset hu "File \"%1\$s\" does not exist." "\"%1\$s\" f\u00e1jl nem l\u00e9tezik." + ::msgcat::mcset hu "File &name:" "F\u00e1jl &neve:" + ::msgcat::mcset hu "File &names:" "F\u00e1jlok &nevei:" + ::msgcat::mcset hu "Files of &type:" "F\u00e1jlok &t\u00edpusa:" + ::msgcat::mcset hu "Fi&les:" "F\u00e1j&lok:" + ::msgcat::mcset hu "&Filter" "&Sz\u0171r\u0151" + ::msgcat::mcset hu "Fil&ter:" "S&z\u0171r\u0151:" + ::msgcat::mcset hu "&Green" "&Z\u00f6ld" + #::msgcat::mcset hu "&Help" + ::msgcat::mcset hu "Hi" "\u00dcdv" + ::msgcat::mcset hu "&Hide Console" "Konzol &elrejt\u00e9se" + ::msgcat::mcset hu "&Ignore" "K&ihagy\u00e1s" + ::msgcat::mcset hu "Invalid file name \"%1\$s\"." "\u00c9rv\u00e9nytelen f\u00e1jln\u00e9v: \"%1\$s\"." + ::msgcat::mcset hu "Log Files" "Log f\u00e1jlok" + ::msgcat::mcset hu "&No" "&Nem" + ::msgcat::mcset hu "&OK" + ::msgcat::mcset hu "OK" + ::msgcat::mcset hu "Open" "Megnyit\u00e1s" + ::msgcat::mcset hu "&Open" "&Megnyit\u00e1s" + ::msgcat::mcset hu "Open Multiple Files" "T\u00f6bb f\u00e1jl megnyit\u00e1sa" + ::msgcat::mcset hu "P&aste" "&Beilleszt\u00e9s" + ::msgcat::mcset hu "&Quit" "&Kil\u00e9p\u00e9s" + ::msgcat::mcset hu "&Red" "&V\u00f6r\u00f6s" + ::msgcat::mcset hu "Replace existing file?" "Megl\u00e9v\u0151 f\u00e1jl cser\u00e9je?" + ::msgcat::mcset hu "&Retry" "\u00daj&ra" + ::msgcat::mcset hu "&Save" "&Ment\u00e9s" + ::msgcat::mcset hu "Save As" "Ment\u00e9s m\u00e1sk\u00e9nt" + ::msgcat::mcset hu "Save To Log" "Ment\u00e9s log f\u00e1jlba" + ::msgcat::mcset hu "Select Log File" "Log f\u00e1jl kiv\u00e1laszt\u00e1sa" + ::msgcat::mcset hu "Select a file to source" "Forr\u00e1sf\u00e1jl kiv\u00e1laszt\u00e1sa" + ::msgcat::mcset hu "&Selection:" "&Kijel\u00f6l\u00e9s:" + ::msgcat::mcset hu "Show &Hidden Directories" "&Rejtett k\u00f6nyvt\u00e1rak megjelen\u00edt\u00e9se" + ::msgcat::mcset hu "Show &Hidden Files and Directories" "&Rejtett f\u00e1jlok \u00e9s k\u00f6nyvt\u00e1rak megjelen\u00edt\u00e9se" + ::msgcat::mcset hu "Skip Messages" "\u00dczenetek kihagy\u00e1sa" + ::msgcat::mcset hu "&Source..." "&Forr\u00e1s..." + ::msgcat::mcset hu "Tcl Scripts" "Tcl scriptek" + ::msgcat::mcset hu "Tcl for Windows" "Tcl Windows-hoz" + ::msgcat::mcset hu "Text Files" "Sz\u00f6vegf\u00e1jlok" + ::msgcat::mcset hu "&Yes" "&Igen" + ::msgcat::mcset hu "abort" "megszak\u00edt\u00e1s" + ::msgcat::mcset hu "blue" "k\u00e9k" + ::msgcat::mcset hu "cancel" "m\u00e9gsem" + ::msgcat::mcset hu "extension" "kiterjeszt\u00e9s" + ::msgcat::mcset hu "extensions" "kiterjeszt\u00e9sek" + ::msgcat::mcset hu "green" "z\u00f6ld" + ::msgcat::mcset hu "ignore" "ignorer" + ::msgcat::mcset hu "ok" + ::msgcat::mcset hu "red" "v\u00f6r\u00f6s" + ::msgcat::mcset hu "retry" "\u00fajra" + ::msgcat::mcset hu "yes" "igen" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tk/msgs/it.msg b/extensions/fablabchemnitz/inkstitch/bin/tk/msgs/it.msg new file mode 100644 index 00000000..52394cde --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tk/msgs/it.msg @@ -0,0 +1,70 @@ +namespace eval ::tk { + ::msgcat::mcset it "&Abort" "&Interrompi" + ::msgcat::mcset it "About..." "Informazioni..." + ::msgcat::mcset it "All Files" "Tutti i file" + ::msgcat::mcset it "Application Error" "Errore dell' applicazione" + ::msgcat::mcset it "&Blue" "&Blu" + ::msgcat::mcset it "&Cancel" "&Annulla" + ::msgcat::mcset it "Cannot change to the directory \"%1\$s\".\nPermission denied." "Impossibile accedere alla directory \"%1\$s\".\nPermesso negato." + ::msgcat::mcset it "Choose Directory" "Scegli una directory" + ::msgcat::mcset it "Clear" "Azzera" + ::msgcat::mcset it "Color" "Colore" + ::msgcat::mcset it "Console" + ::msgcat::mcset it "Copy" "Copia" + ::msgcat::mcset it "Cut" "Taglia" + ::msgcat::mcset it "Delete" "Cancella" + ::msgcat::mcset it "Details >>" "Dettagli >>" + ::msgcat::mcset it "Directory \"%1\$s\" does not exist." "La directory \"%1\$s\" non esiste." + ::msgcat::mcset it "&Directory:" + ::msgcat::mcset it "Error: %1\$s" "Errore: %1\$s" + ::msgcat::mcset it "Exit" "Esci" + ::msgcat::mcset it "File \"%1\$s\" already exists.\nDo you want to overwrite it?" "Il file \"%1\$s\" esiste gi\u00e0.\nVuoi sovrascriverlo?" + ::msgcat::mcset it "File \"%1\$s\" already exists.\n\n" "Il file \"%1\$s\" esiste gi\u00e0.\n\n" + ::msgcat::mcset it "File \"%1\$s\" does not exist." "Il file \"%1\$s\" non esiste." + ::msgcat::mcset it "File &name:" "&Nome del file:" + ::msgcat::mcset it "File &names:" "&Nomi dei file:" + ::msgcat::mcset it "Files of &type:" "File di &tipo:" + ::msgcat::mcset it "Fi&les:" "Fi&le:" + ::msgcat::mcset it "&Filter" "&Filtro" + ::msgcat::mcset it "Fil&ter:" "Fil&tro:" + ::msgcat::mcset it "&Green" "&Verde" + ::msgcat::mcset it "Hi" "Salve" + ::msgcat::mcset it "Hide Console" "Nascondi la console" + ::msgcat::mcset it "&Ignore" "&Ignora" + ::msgcat::mcset it "Invalid file name \"%1\$s\"." "Nome di file non valido \"%1\$s\"." + ::msgcat::mcset it "Log Files" "File di log" + ::msgcat::mcset it "&No" + ::msgcat::mcset it "&OK" + ::msgcat::mcset it "Ok" + ::msgcat::mcset it "&Open" "A&pri" + ::msgcat::mcset it "Open" "Apri" + ::msgcat::mcset it "Open Multiple Files" "Apri file multipli" + ::msgcat::mcset it "Paste" "Incolla" + ::msgcat::mcset it "Quit" "Esci" + ::msgcat::mcset it "&Red" "&Rosso" + ::msgcat::mcset it "Replace existing file?" "Sostituisci il file esistente?" + ::msgcat::mcset it "&Retry" "&Riprova" + ::msgcat::mcset it "&Save" "&Salva" + ::msgcat::mcset it "Save As" "Salva come" + ::msgcat::mcset it "Save To Log" "Salva il log" + ::msgcat::mcset it "Select Log File" "Scegli un file di log" + ::msgcat::mcset it "Select a file to source" "Scegli un file da eseguire" + ::msgcat::mcset it "&Selection:" "&Selezione:" + ::msgcat::mcset it "Skip Messages" "Salta i messaggi" + ::msgcat::mcset it "Source..." "Esegui..." + ::msgcat::mcset it "Tcl Scripts" "Script Tcl" + ::msgcat::mcset it "Tcl for Windows" "Tcl per Windows" + ::msgcat::mcset it "Text Files" "File di testo" + ::msgcat::mcset it "&Yes" "&S\u00ec" + ::msgcat::mcset it "abort" "interrompi" + ::msgcat::mcset it "blue" "blu" + ::msgcat::mcset it "cancel" "annulla" + ::msgcat::mcset it "extension" "estensione" + ::msgcat::mcset it "extensions" "estensioni" + ::msgcat::mcset it "green" "verde" + ::msgcat::mcset it "ignore" "ignora" + ::msgcat::mcset it "ok" + ::msgcat::mcset it "red" "rosso" + ::msgcat::mcset it "retry" "riprova" + ::msgcat::mcset it "yes" "s\u00ec" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tk/msgs/nl.msg b/extensions/fablabchemnitz/inkstitch/bin/tk/msgs/nl.msg new file mode 100644 index 00000000..90446c8e --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tk/msgs/nl.msg @@ -0,0 +1,109 @@ +namespace eval ::tk { + ::msgcat::mcset nl "\"%1\$s\" must be an absolute pathname" "\"%1\$s\" moet een absolute pad-naam zijn" + ::msgcat::mcset nl "%1\$s is not a toplevel window" "%1\$s is geen toplevel window" + ::msgcat::mcset nl ", or" ", of" + ::msgcat::mcset nl "-default, -icon, -message, -parent, -title, or -type" "-default, -icon, -message, -parent, -title, of -type" + ::msgcat::mcset nl "-initialdir, -mustexist, -parent, or -title" "-initialdir, -mustexist, -parent, of -title" + ::msgcat::mcset nl "&Abort" "&Afbreken" + ::msgcat::mcset nl "About..." "Over..." + ::msgcat::mcset nl "All Files" "Alle Bestanden" + ::msgcat::mcset nl "Application Error" "Toepassingsfout" + ::msgcat::mcset nl "&Blue" "&Blauw" + ::msgcat::mcset nl "&Cancel" "&Annuleren" + ::msgcat::mcset nl "Cannot change to the directory \"%1\$s\".\nPermission denied." "Kan niet naar map \"%1\$s\" gaan.\nU heeft hiervoor geen toestemming." + ::msgcat::mcset nl "Choose Directory" "Kies map" + ::msgcat::mcset nl "Clear" "Wissen" + ::msgcat::mcset nl "Clear entry, Press OK; Enter %1\$s, press OK" "Wis veld, Druk op OK; typ %1\$s in, druk op OK" + ::msgcat::mcset nl "&Clear Console" "&Wis Console" + ::msgcat::mcset nl "Color" "Kleur" + ::msgcat::mcset nl "Console" + ::msgcat::mcset nl "Copy" "Kopi\u00ebren" + ::msgcat::mcset nl "Cut" "Knippen" + ::msgcat::mcset nl "Delete" "Wissen" + ::msgcat::mcset nl "Details" + ::msgcat::mcset nl "Details >>" + ::msgcat::mcset nl "Directory \"%1\$s\" does not exist." "Map \"%1\$s\" bestaat niet." + ::msgcat::mcset nl "&Directory:" "&Map:" + ::msgcat::mcset nl "Edit" "Bewerken" + ::msgcat::mcset nl "Enter \"%1\$s\", press OK" "Typ \"%1\$s\", druk op OK" + ::msgcat::mcset nl "Enter \"%1\$s\", press OK, enter \"%2\$s\", press OK" "Typ \"%1\$s\", druk op OK, typ \"%2\$s\", druk op OK" + ::msgcat::mcset nl "Error: %1\$s" "Fout: %1\$s" + ::msgcat::mcset nl "Exit" "Be\u00ebindigen" + ::msgcat::mcset nl "File" "Bestand" + ::msgcat::mcset nl "File \"%1\$s\" already exists.\n\n" "Bestand \"%1\$s\" bestaat al.\n\n" + ::msgcat::mcset nl "File \"%1\$s\" already exists.\nDo you want to overwrite it?" "Bestand \"%1\$s\" bestaat al.\nWilt u het overschrijven?" + ::msgcat::mcset nl "File \"%1\$s\" does not exist." "Bestand \"%1\$s\" bestaat niet." + ::msgcat::mcset nl "File &name:" "Bestands&naam:" + ::msgcat::mcset nl "File &names:" "Bestands&namen:" + ::msgcat::mcset nl "Files of &type:" "Bestanden van het &type:" + ::msgcat::mcset nl "Fi&les:" "&Bestanden:" + ::msgcat::mcset nl "&Filter" + ::msgcat::mcset nl "Fil&ter:" + ::msgcat::mcset nl "&Green" "&Groen" + ::msgcat::mcset nl "Hi" "H\u00e9" + ::msgcat::mcset nl "Hide Console" "Verberg Console" + ::msgcat::mcset nl "&Ignore" "&Negeren" + ::msgcat::mcset nl "Invalid file name \"%1\$s\"." "Ongeldige bestandsnaam \"%1\$s\"." + ::msgcat::mcset nl "Log Files" "Log Bestanden" + ::msgcat::mcset nl "&No" "&Nee" + ::msgcat::mcset nl "&OK" + ::msgcat::mcset nl "Ok" + ::msgcat::mcset nl "&Open" "&Openen" + ::msgcat::mcset nl "Open" "Openen" + ::msgcat::mcset nl "Open Multiple Files" "Open meerdere bestanden" + ::msgcat::mcset nl "Paste" "Plakken" + ::msgcat::mcset nl "Please press %1\$s" "Druk op %1\$s, A.U.B." + ::msgcat::mcset nl "Please press ok" "Druk op ok, A.U.B." + ::msgcat::mcset nl "Press Cancel" "Druk op Annuleren" + ::msgcat::mcset nl "Press Ok" "Druk op Ok" + ::msgcat::mcset nl "Quit" "Stoppen" + ::msgcat::mcset nl "&Red" "&Rood" + ::msgcat::mcset nl "Replace existing file?" "Vervang bestaand bestand?" + ::msgcat::mcset nl "&Retry" "&Herhalen" + ::msgcat::mcset nl "&Save" "Op&slaan" + ::msgcat::mcset nl "Save As" "Opslaan als" + ::msgcat::mcset nl "Save To Log" "Opslaan naar Log" + ::msgcat::mcset nl "Select Log File" "Selecteer Log bestand" + ::msgcat::mcset nl "Select a file to source" "Selecteer bronbestand" + ::msgcat::mcset nl "&Selection:" "&Selectie:" + ::msgcat::mcset nl "Skip Messages" "Berichten overslaan" + ::msgcat::mcset nl "Source..." "Bron..." + ::msgcat::mcset nl "Tcl Scripts" + ::msgcat::mcset nl "Tcl for Windows" "Tcl voor Windows" + ::msgcat::mcset nl "Text Files" "Tekstbestanden" + ::msgcat::mcset nl "&Yes" "&Ja" + ::msgcat::mcset nl "abort" "afbreken" + ::msgcat::mcset nl "abort, retry, ignore, ok, cancel, no, or yes" "afbreken, opnieuw, negeren, ok, annuleren, nee, of ja" + ::msgcat::mcset nl "abortretryignore, ok, okcancel, retrycancel, yesno, or yesnocancel" "abortretryignore, ok, okcancel, retrycancel, yesno, of yesnocancel" + ::msgcat::mcset nl "bad %1\$s value \"%2\$s\": must be %3\$s" "verkeerde %1\$s waarde \"%2\$s\": moet zijn %3\$s" + ::msgcat::mcset nl "bad file type \"%1\$s\", should be" "verkeerd bestandstype \"%1\$s\", moet zijn" + ::msgcat::mcset nl "bad option \"%1\$s\": should be %2\$s" "verkeerde optie \"%1\$s\": moet zijn %2\$s" + ::msgcat::mcset nl "bad window path name \"%1\$s\"" "verkeerde window-padnaam \"%1\$s\"" + ::msgcat::mcset nl "blue" "blauw" + ::msgcat::mcset nl "can't post %1\$s: it isn't a descendant of %2\$s (this is a new requirement in Tk versions 3.0 and later)" "kan %1\$s niet verzenden: het is geen afstammeling van %2\$s (dit is een nieuwe eis in Tk versies 3.0 en later)" + ::msgcat::mcset nl "cancel" "annuleren" + ::msgcat::mcset nl "default button index greater than number of buttons specified for tk_dialog" "default knop index is groter dan het aantal knoppen beschikbaar voor tk_dialog" + ::msgcat::mcset nl "display name to use (current one otherwise)" "te gebruiken schermnaam (anders huidige scherm)" + ::msgcat::mcset nl "error, info, question, or warning" "error, info, question, of warning" + ::msgcat::mcset nl "extension" + ::msgcat::mcset nl "extensions" + ::msgcat::mcset nl "focus group \"%1\$s\" doesn't exist" "focusgroep \"%1\$s\" bestaat niet" + ::msgcat::mcset nl "green" "groen" + ::msgcat::mcset nl "history event %1\$s" + ::msgcat::mcset nl "ignore" "negeren" + ::msgcat::mcset nl "invalid default button \"%1\$s\"" "ongeldige default knop \"%1\$s\"" + ::msgcat::mcset nl "macType" + ::msgcat::mcset nl "macTypes" + ::msgcat::mcset nl "must specify a background color" "een achtergrondkleur is verplicht" + ::msgcat::mcset nl "name of the slave interpreter" "naam van de slaaf-interpreter" + ::msgcat::mcset nl "no winfo screen . nor env(DISPLAY)" "geen winfo scherm . noch env(DISPLAY)" + ::msgcat::mcset nl "ok" + ::msgcat::mcset nl "red" "rood" + ::msgcat::mcset nl "retry" "opnieuw" + ::msgcat::mcset nl "should contain 5 or 4 elements" "moet 4 of 5 elementen bevatten" + ::msgcat::mcset nl "spec" + ::msgcat::mcset nl "tk_chooseDirectory command" "tk_chooseDirectory opdracht" + ::msgcat::mcset nl "tk_chooseDirectory command, cancel gives null" "tk_chooseDirectory opdracht, annuleren geeft lege waarde" + ::msgcat::mcset nl "tk_chooseDirectory command, initialdir" "tk_chooseDirectory opdracht, initi\u00eble map" + ::msgcat::mcset nl "yes" "ja" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tk/msgs/pl.msg b/extensions/fablabchemnitz/inkstitch/bin/tk/msgs/pl.msg new file mode 100644 index 00000000..debebcb8 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tk/msgs/pl.msg @@ -0,0 +1,73 @@ +namespace eval ::tk { + ::msgcat::mcset pl "&Abort" "&Przerwij" + ::msgcat::mcset pl "&About..." "O programie..." + ::msgcat::mcset pl "All Files" "Wszystkie pliki" + ::msgcat::mcset pl "Application Error" "B\u0142\u0105d w programie" + ::msgcat::mcset pl "&Blue" "&Niebieski" + ::msgcat::mcset pl "&Cancel" "&Anuluj" + ::msgcat::mcset pl "Cannot change to the directory \"%1\$s\".\nPermission denied." "Nie mo\u017cna otworzy\u0107 katalogu \"%1\$s\".\nOdmowa dost\u0119pu." + ::msgcat::mcset pl "Choose Directory" "Wybierz katalog" + ::msgcat::mcset pl "Cl&ear" "&Wyczy\u015b\u0107" + ::msgcat::mcset pl "&Clear Console" "&Wyczy\u015b\u0107 konsol\u0119" + ::msgcat::mcset pl "Color" "Kolor" + ::msgcat::mcset pl "Console" "Konsola" + ::msgcat::mcset pl "&Copy" "&Kopiuj" + ::msgcat::mcset pl "Cu&t" "&Wytnij" + ::msgcat::mcset pl "&Delete" "&Usu\u0144" + ::msgcat::mcset pl "Details >>" "Szczeg\u00f3\u0142y >>" + ::msgcat::mcset pl "Directory \"%1\$s\" does not exist." "Katalog \"%1\$s\" nie istnieje." + ::msgcat::mcset pl "&Directory:" "&Katalog:" + ::msgcat::mcset pl "&Edit" "&Edytuj" + ::msgcat::mcset pl "Error: %1\$s" "B\u0142\u0105d: %1\$s" + ::msgcat::mcset pl "E&xit" "&Wyjd\u017a" + ::msgcat::mcset pl "&File" "&Plik" + ::msgcat::mcset pl "File \"%1\$s\" already exists.\nDo you want to overwrite it?" "Plik \"%1\$s\" ju\u017c istnieje.\nCzy chcesz go nadpisa\u0107?" + ::msgcat::mcset pl "File \"%1\$s\" already exists.\n\n" "Plik \"%1\$s\" ju\u017c istnieje.\n\n" + ::msgcat::mcset pl "File \"%1\$s\" does not exist." "Plik \"%1\$s\" nie istnieje." + ::msgcat::mcset pl "File &name:" "Nazwa &pliku:" + ::msgcat::mcset pl "File &names:" "Nazwy &plik\u00f3w:" + ::msgcat::mcset pl "Files of &type:" "Pliki &typu:" + ::msgcat::mcset pl "Fi&les:" "Pli&ki:" + ::msgcat::mcset pl "&Filter" "&Filtr" + ::msgcat::mcset pl "Fil&ter:" "&Filtr:" + ::msgcat::mcset pl "&Green" "&Zielony" + ::msgcat::mcset pl "&Help" "&Pomoc" + ::msgcat::mcset pl "Hi" "Witaj" + ::msgcat::mcset pl "&Hide Console" "&Ukryj konsol\u0119" + ::msgcat::mcset pl "&Ignore" "&Ignoruj" + ::msgcat::mcset pl "Invalid file name \"%1\$s\"." "Niew\u0142a\u015bciwa nazwa pliku \"%1\$s\"." + ::msgcat::mcset pl "Log Files" "Pliki dziennika" + ::msgcat::mcset pl "&No" "&Nie" + ::msgcat::mcset pl "OK" "OK" + ::msgcat::mcset pl "Ok" "Ok" + ::msgcat::mcset pl "Open" "Otw\u00f3rz" + ::msgcat::mcset pl "&Open" "&Otw\u00f3rz" + ::msgcat::mcset pl "Open Multiple Files" "Otw\u00f3rz wiele plik\u00f3w" + ::msgcat::mcset pl "P&aste" "&Wklej" + ::msgcat::mcset pl "&Quit" "&Zako\u0144cz" + ::msgcat::mcset pl "&Red" "&Czerwony" + ::msgcat::mcset pl "Replace existing file?" "Czy zast\u0105pi\u0107 istniej\u0105cy plik?" + ::msgcat::mcset pl "&Retry" "&Pon\u00f3w" + ::msgcat::mcset pl "&Save" "&Zapisz" + ::msgcat::mcset pl "Save As" "Zapisz jako" + ::msgcat::mcset pl "Save To Log" "Wpisz do dziennika" + ::msgcat::mcset pl "Select Log File" "Wybierz plik dziennika" + ::msgcat::mcset pl "Select a file to source" "Wybierz plik do wykonania" + ::msgcat::mcset pl "&Selection:" "&Wyb\u00f3r:" + ::msgcat::mcset pl "Skip Messages" "Pomi\u0144 pozosta\u0142e komunikaty" + ::msgcat::mcset pl "&Source..." "&Kod \u017ar\u00f3d\u0142owy..." + ::msgcat::mcset pl "Tcl Scripts" "Skrypty Tcl" + ::msgcat::mcset pl "Tcl for Windows" "Tcl dla Windows" + ::msgcat::mcset pl "Text Files" "Pliki tekstowe" + ::msgcat::mcset pl "&Yes" "&Tak" + ::msgcat::mcset pl "abort" "przerwij" + ::msgcat::mcset pl "blue" "niebieski" + ::msgcat::mcset pl "cancel" "anuluj" + ::msgcat::mcset pl "extension" "rozszerzenie" + ::msgcat::mcset pl "extensions" "rozszerzenia" + ::msgcat::mcset pl "green" "zielony" + ::msgcat::mcset pl "ignore" "ignoruj" + ::msgcat::mcset pl "red" "czerwony" + ::msgcat::mcset pl "retry" "pon\u00f3w" + ::msgcat::mcset pl "yes" "tak" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tk/msgs/pt.msg b/extensions/fablabchemnitz/inkstitch/bin/tk/msgs/pt.msg new file mode 100644 index 00000000..259f82e2 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tk/msgs/pt.msg @@ -0,0 +1,70 @@ +namespace eval ::tk { + ::msgcat::mcset pt_br "&Abort" "&Abortar" + ::msgcat::mcset pt_br "About..." "Sobre ..." + ::msgcat::mcset pt_br "All Files" "Todos os arquivos" + ::msgcat::mcset pt_br "Application Error" "Erro de aplica\u00e7\u00e3o" + ::msgcat::mcset pt_br "&Blue" "&Azul" + ::msgcat::mcset pt_br "&Cancel" "&Cancelar" + ::msgcat::mcset pt_br "Cannot change to the directory \"%1\$s\".\nPermission denied." "N\u00e3o foi poss\u00edvel mudar para o diret\u00f3rio \"%1\$s\".\nPermiss\u00e3o negada." + ::msgcat::mcset pt_br "Choose Directory" "Escolha um diret\u00f3rio" + ::msgcat::mcset pt_br "Clear" "Apagar" + ::msgcat::mcset pt_br "Color" "Cor" + ::msgcat::mcset pt_br "Console" "Console" + ::msgcat::mcset pt_br "Copy" "Copiar" + ::msgcat::mcset pt_br "Cut" "Recortar" + ::msgcat::mcset pt_br "Delete" "Excluir" + ::msgcat::mcset pt_br "Details >>" "Detalhes >>" + ::msgcat::mcset pt_br "Directory \"%1\$s\" does not exist." "O diret\u00f3rio \"%1\$s\" n\u00e3o existe." + ::msgcat::mcset pt_br "&Directory:" "&Diret\u00f3rio:" + ::msgcat::mcset pt_br "Error: %1\$s" "Erro: %1\$s" + ::msgcat::mcset pt_br "Exit" "Sair" + ::msgcat::mcset pt_br "File \"%1\$s\" already exists.\nDo you want to overwrite it?" "O arquivo \"%1\$s\" j\u00e1 existe.\nDeseja sobrescreve-lo?" + ::msgcat::mcset pt_br "File \"%1\$s\" already exists.\n\n" "O arquivo \"%1\$s\" j\u00e1 existe.\n\n" + ::msgcat::mcset pt_br "File \"%1\$s\" does not exist." "Arquivo \"%1\$s\" n\u00e3o existe." + ::msgcat::mcset pt_br "File &name:" "&Nome do arquivo:" + ::msgcat::mcset pt_br "File &names:" "&Nomes dos arquivos:" + ::msgcat::mcset pt_br "Files of &type:" "Arquivos do &tipo:" + ::msgcat::mcset pt_br "Fi&les:" "&Arquivos:" + ::msgcat::mcset pt_br "&Filter" "&Filtro" + ::msgcat::mcset pt_br "Fil&ter:" "Fil&tro:" + ::msgcat::mcset pt_br "&Green" "&Verde" + ::msgcat::mcset pt_br "Hi" "Oi" + ::msgcat::mcset pt_br "Hide Console" "Ocultar console" + ::msgcat::mcset pt_br "&Ignore" "&Ignorar" + ::msgcat::mcset pt_br "Invalid file name \"%1\$s\"." "O nome do arquivo \u00e9 inv\u00e1lido \"%1\$s\"." + ::msgcat::mcset pt_br "Log Files" "Arquivos de log" + ::msgcat::mcset pt_br "&No" "&N\u00e3o" + ::msgcat::mcset pt_br "&OK" "&OK" + ::msgcat::mcset pt_br "Ok" "Ok" + ::msgcat::mcset pt_br "Open" "Abrir" + ::msgcat::mcset pt_br "&Open" "&Abrir" + ::msgcat::mcset pt_br "Open Multiple Files" "Abrir m\u00faltiplos arquivos" + ::msgcat::mcset pt_br "Paste" "Colar" + ::msgcat::mcset pt_br "Quit" "Encerrar" + ::msgcat::mcset pt_br "&Red" "&Vermelho" + ::msgcat::mcset pt_br "Replace existing file?" "Substituir arquivo existente?" + ::msgcat::mcset pt_br "&Retry" "Tenta&r novamente" + ::msgcat::mcset pt_br "&Save" "&Salvar" + ::msgcat::mcset pt_br "Save As" "Salvar como" + ::msgcat::mcset pt_br "Save To Log" "Salvar arquivo de log" + ::msgcat::mcset pt_br "Select Log File" "Selecionar arquivo de log" + ::msgcat::mcset pt_br "Select a file to source" "Selecione um arquivo como fonte(source)" + ::msgcat::mcset pt_br "&Selection:" "&Sele\u00e7\u00e3o:" + ::msgcat::mcset pt_br "Skip Messages" "Omitir as mensagens" + ::msgcat::mcset pt_br "Source..." "Source..." + ::msgcat::mcset pt_br "Tcl Scripts" "Scripts Tcl" + ::msgcat::mcset pt_br "Tcl for Windows" "Tcl para Windows" + ::msgcat::mcset pt_br "Text Files" "Arquivos de texto" + ::msgcat::mcset pt_br "&Yes" "&Sim" + ::msgcat::mcset pt_br "abort" "abortar" + ::msgcat::mcset pt_br "blue" "azul" + ::msgcat::mcset pt_br "cancel" "cancelar" + ::msgcat::mcset pt_br "extension" "extens\u00e3o" + ::msgcat::mcset pt_br "extensions" "extens\u00f5es" + ::msgcat::mcset pt_br "green" "verde" + ::msgcat::mcset pt_br "ignore" "ignorar" + ::msgcat::mcset pt_br "ok" "ok" + ::msgcat::mcset pt_br "red" "vermelho" + ::msgcat::mcset pt_br "retry" "tentar novamente" + ::msgcat::mcset pt_br "yes" "sim" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tk/msgs/ru.msg b/extensions/fablabchemnitz/inkstitch/bin/tk/msgs/ru.msg new file mode 100644 index 00000000..9f6aa807 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tk/msgs/ru.msg @@ -0,0 +1,73 @@ +namespace eval ::tk { + ::msgcat::mcset ru "&Abort" "&\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c" + ::msgcat::mcset ru "About..." "\u041f\u0440\u043e..." + ::msgcat::mcset ru "All Files" "\u0412\u0441\u0435 \u0444\u0430\u0439\u043b\u044b" + ::msgcat::mcset ru "Application Error" "\u041e\u0448\u0438\u0431\u043a\u0430 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435" + ::msgcat::mcset ru "&Blue" " &\u0413\u043e\u043b\u0443\u0431\u043e\u0439" + ::msgcat::mcset ru "&Cancel" "\u041e\u0442&\u043c\u0435\u043d\u0430" + ::msgcat::mcset ru "Cannot change to the directory \"%1\$s\".\nPermission denied." \ + "\u041d\u0435 \u043c\u043e\u0433\u0443 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \"%1\$s\".\n\u041d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u0430\u0432 \u0434\u043e\u0441\u0442\u0443\u043f\u0430" + ::msgcat::mcset ru "Choose Directory" "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043a\u0430\u0442\u0430\u043b\u043e\u0433" + ::msgcat::mcset ru "Clear" "\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c" + ::msgcat::mcset ru "Color" "\u0426\u0432\u0435\u0442" + ::msgcat::mcset ru "Console" "\u041a\u043e\u043d\u0441\u043e\u043b\u044c" + ::msgcat::mcset ru "Copy" "\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c" + ::msgcat::mcset ru "Cut" "\u0412\u044b\u0440\u0435\u0437\u0430\u0442\u044c" + ::msgcat::mcset ru "Delete" "\u0423\u0434\u0430\u043b\u0438\u0442\u044c" + ::msgcat::mcset ru "Details >>" "\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 >>" + ::msgcat::mcset ru "Directory \"%1\$s\" does not exist." "\u041a\u0430\u0442\u0430\u043b\u043e\u0433\u0430 \"%1\$s\" \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442." + ::msgcat::mcset ru "&Directory:" "&\u041a\u0430\u0442\u0430\u043b\u043e\u0433:" + ::msgcat::mcset ru "Error: %1\$s" "\u041e\u0448\u0438\u0431\u043a\u0430: %1\$s" + ::msgcat::mcset ru "Exit" "\u0412\u044b\u0445\u043e\u0434" + ::msgcat::mcset ru "File \"%1\$s\" already exists.\nDo you want to overwrite it?" \ + "\u0424\u0430\u0439\u043b \"%1\$s\" \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442.\n\u0417\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0435\u0433\u043e?" + ::msgcat::mcset ru "File \"%1\$s\" already exists.\n\n" "\u0424\u0430\u0439\u043b \"%1\$s\" \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442.\n\n" + ::msgcat::mcset ru "File \"%1\$s\" does not exist." "\u0424\u0430\u0439\u043b \"%1\$s\" \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d." + ::msgcat::mcset ru "File &name:" "&\u0418\u043c\u044f \u0444\u0430\u0439\u043b\u0430:" + ::msgcat::mcset ru "File &names:" "&\u0418\u043c\u0435\u043d\u0430 \u0444\u0430\u0439\u043b\u043e\u0432:" + ::msgcat::mcset ru "Files of &type:" "&\u0422\u0438\u043f \u0444\u0430\u0439\u043b\u043e\u0432:" + ::msgcat::mcset ru "Fi&les:" "\u0424\u0430\u0439&\u043b\u044b:" + ::msgcat::mcset ru "&Filter" "&\u0424\u0438\u043b\u044c\u0442\u0440" + ::msgcat::mcset ru "Fil&ter:" "\u0424\u0438\u043b\u044c&\u0442\u0440:" + ::msgcat::mcset ru "&Green" " &\u0417\u0435\u043b\u0435\u043d\u044b\u0439" + ::msgcat::mcset ru "Hi" "\u041f\u0440\u0438\u0432\u0435\u0442" + ::msgcat::mcset ru "Hide Console" "\u0421\u043f\u0440\u044f\u0442\u0430\u0442\u044c \u043a\u043e\u043d\u0441\u043e\u043b\u044c" + ::msgcat::mcset ru "&Ignore" "&\u0418\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c" + ::msgcat::mcset ru "Invalid file name \"%1\$s\"." "\u041d\u0435\u0432\u0435\u0440\u043d\u043e\u0435 \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430 \"%1\$s\"." + ::msgcat::mcset ru "Log Files" "\u0424\u0430\u0439\u043b\u044b \u0436\u0443\u0440\u043d\u0430\u043b\u0430" + ::msgcat::mcset ru "&No" "&\u041d\u0435\u0442" + ::msgcat::mcset ru "&OK" "&\u041e\u041a" + ::msgcat::mcset ru "Ok" "\u0414\u0430" + ::msgcat::mcset ru "Open" "\u041e\u0442\u043a\u0440\u044b\u0442\u044c" + ::msgcat::mcset ru "&Open" "&\u041e\u0442\u043a\u0440\u044b\u0442\u044c" + ::msgcat::mcset ru "Open Multiple Files" "\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0444\u0430\u0439\u043b\u043e\u0432" + ::msgcat::mcset ru "Paste" "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c" + ::msgcat::mcset ru "Quit" "\u0412\u044b\u0445\u043e\u0434" + ::msgcat::mcset ru "&Red" " &\u041a\u0440\u0430\u0441\u043d\u044b\u0439" + ::msgcat::mcset ru "Replace existing file?" "\u0417\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0444\u0430\u0439\u043b?" + ::msgcat::mcset ru "&Retry" "&\u041f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c" + ::msgcat::mcset ru "&Save" "&\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c" + ::msgcat::mcset ru "Save As" "\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043a\u0430\u043a" + ::msgcat::mcset ru "Save To Log" "\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432 \u0436\u0443\u0440\u043d\u0430\u043b" + ::msgcat::mcset ru "Select Log File" "\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0436\u0443\u0440\u043d\u0430\u043b" + ::msgcat::mcset ru "Select a file to source" "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0444\u0430\u0439\u043b \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0446\u0438\u0438" + ::msgcat::mcset ru "&Selection:" "&Selection:" + ::msgcat::mcset ru "Skip Messages" "\u041f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f" + ::msgcat::mcset ru "Source..." "\u0418\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b..." + ::msgcat::mcset ru "Tcl Scripts" "\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 TCL" + ::msgcat::mcset ru "Tcl for Windows" "TCL \u0434\u043b\u044f Windows" + ::msgcat::mcset ru "Text Files" "\u0422\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0435 \u0444\u0430\u0439\u043b\u044b" + ::msgcat::mcset ru "&Yes" "&\u0414\u0430" + ::msgcat::mcset ru "abort" "\u043e\u0442\u043c\u0435\u043d\u0430" + ::msgcat::mcset ru "blue" " \u0433\u043e\u043b\u0443\u0431\u043e\u0439" + ::msgcat::mcset ru "cancel" "\u043e\u0442\u043c\u0435\u043d\u0430" + ::msgcat::mcset ru "extension" "\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435" + ::msgcat::mcset ru "extensions" "\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f" + ::msgcat::mcset ru "green" " \u0437\u0435\u043b\u0435\u043d\u044b\u0439" + ::msgcat::mcset ru "ignore" "\u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c" + ::msgcat::mcset ru "ok" "\u043e\u043a" + ::msgcat::mcset ru "red" " \u043a\u0440\u0430\u0441\u043d\u044b\u0439" + ::msgcat::mcset ru "retry" "\u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c" + ::msgcat::mcset ru "yes" "\u0434\u0430" +} + diff --git a/extensions/fablabchemnitz/inkstitch/bin/tk/msgs/sv.msg b/extensions/fablabchemnitz/inkstitch/bin/tk/msgs/sv.msg new file mode 100644 index 00000000..14ce14da --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tk/msgs/sv.msg @@ -0,0 +1,74 @@ +namespace eval ::tk { + ::msgcat::mcset sv "&Abort" "&Avsluta" + ::msgcat::mcset sv "&About..." "&Om..." + ::msgcat::mcset sv "All Files" "Samtliga filer" + ::msgcat::mcset sv "Application Error" "Programfel" + ::msgcat::mcset sv "&Blue" "&Bl\u00e5" + ::msgcat::mcset sv "&Cancel" "&Avbryt" + ::msgcat::mcset sv "Cannot change to the directory \"%1\$s\".\nPermission denied." "Kan ej n\u00e5 mappen \"%1\$s\".\nSaknar r\u00e4ttigheter." + ::msgcat::mcset sv "Choose Directory" "V\u00e4lj mapp" + ::msgcat::mcset sv "&Clear" "&Radera" + ::msgcat::mcset sv "&Clear Console" "&Radera konsollen" + ::msgcat::mcset sv "Color" "F\u00e4rg" + ::msgcat::mcset sv "Console" "Konsoll" + ::msgcat::mcset sv "&Copy" "&Kopiera" + ::msgcat::mcset sv "Cu&t" "Klipp u&t" + ::msgcat::mcset sv "&Delete" "&Radera" + ::msgcat::mcset sv "Details >>" "Detaljer >>" + ::msgcat::mcset sv "Directory \"%1\$s\" does not exist." "Mappen \"%1\$s\" finns ej." + ::msgcat::mcset sv "&Directory:" "&Mapp:" + ::msgcat::mcset sv "&Edit" "R&edigera" + ::msgcat::mcset sv "Error: %1\$s" "Fel: %1\$s" + ::msgcat::mcset sv "E&xit" "&Avsluta" + ::msgcat::mcset sv "&File" "&Fil" + ::msgcat::mcset sv "File \"%1\$s\" already exists.\nDo you want to overwrite it?" "Filen \"%1\$s\" finns redan.\nVill du skriva \u00f6ver den?" + ::msgcat::mcset sv "File \"%1\$s\" already exists.\n\n" "Filen \"%1\$s\" finns redan.\n\n" + ::msgcat::mcset sv "File \"%1\$s\" does not exist." "Filen \"%1\$s\" finns ej." + ::msgcat::mcset sv "File &name:" "Fil&namn:" + ::msgcat::mcset sv "File &names:" "Fil&namn:" + ::msgcat::mcset sv "Files of &type:" "Filer av &typ:" + ::msgcat::mcset sv "Fi&les:" "Fi&ler:" + ::msgcat::mcset sv "&Filter" + ::msgcat::mcset sv "Fil&ter:" + ::msgcat::mcset sv "&Green" "&Gr\u00f6n" + ::msgcat::mcset sv "&Help" "&Hj\u00e4lp" + ::msgcat::mcset sv "Hi" "Hej" + ::msgcat::mcset sv "&Hide Console" "&G\u00f6m konsollen" + ::msgcat::mcset sv "&Ignore" "&Ignorera" + ::msgcat::mcset sv "Invalid file name \"%1\$s\"." "Ogiltigt filnamn \"%1\$s\"." + ::msgcat::mcset sv "Log Files" "Loggfiler" + ::msgcat::mcset sv "&No" "&Nej" + ::msgcat::mcset sv "OK" + ::msgcat::mcset sv "Ok" + ::msgcat::mcset sv "Open" "\u00d6ppna" + ::msgcat::mcset sv "&Open" "&\u00d6ppna" + ::msgcat::mcset sv "Open Multiple Files" "\u00d6ppna flera filer" + ::msgcat::mcset sv "P&aste" "&Klistra in" + ::msgcat::mcset sv "&Quit" "&Avsluta" + ::msgcat::mcset sv "&Red" "&R\u00f6d" + ::msgcat::mcset sv "Replace existing file?" "Ers\u00e4tt existerande fil?" + ::msgcat::mcset sv "&Retry" "&F\u00f6rs\u00f6k igen" + ::msgcat::mcset sv "&Save" "&Spara" + ::msgcat::mcset sv "Save As" "Spara som" + ::msgcat::mcset sv "Save To Log" "Spara till logg" + ::msgcat::mcset sv "Select Log File" "V\u00e4lj loggfil" + ::msgcat::mcset sv "Select a file to source" "V\u00e4lj k\u00e4llfil" + ::msgcat::mcset sv "&Selection:" "&Val:" + ::msgcat::mcset sv "Skip Messages" "Hoppa \u00f6ver meddelanden" + ::msgcat::mcset sv "&Source..." "&K\u00e4lla..." + ::msgcat::mcset sv "Tcl Scripts" "Tcl skript" + ::msgcat::mcset sv "Tcl for Windows" "Tcl f\u00f6r Windows" + ::msgcat::mcset sv "Text Files" "Textfiler" + ::msgcat::mcset sv "&Yes" "&Ja" + ::msgcat::mcset sv "abort" "avbryt" + ::msgcat::mcset sv "blue" "bl\u00e5" + ::msgcat::mcset sv "cancel" "avbryt" + ::msgcat::mcset sv "extension" "utvidgning" + ::msgcat::mcset sv "extensions" "utvidgningar" + ::msgcat::mcset sv "green" "gr\u00f6n" + ::msgcat::mcset sv "ignore" "ignorera" + ::msgcat::mcset sv "ok" + ::msgcat::mcset sv "red" "r\u00f6d" + ::msgcat::mcset sv "retry" "f\u00f6rs\u00f6k igen" + ::msgcat::mcset sv "yes" "ja" +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tk/obsolete.tcl b/extensions/fablabchemnitz/inkstitch/bin/tk/obsolete.tcl new file mode 100644 index 00000000..3ee7f286 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tk/obsolete.tcl @@ -0,0 +1,178 @@ +# obsolete.tcl -- +# +# This file contains obsolete procedures that people really shouldn't +# be using anymore, but which are kept around for backward compatibility. +# +# Copyright (c) 1994 The Regents of the University of California. +# Copyright (c) 1994 Sun Microsystems, Inc. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. +# + +# The procedures below are here strictly for backward compatibility with +# Tk version 3.6 and earlier. The procedures are no longer needed, so +# they are no-ops. You should not use these procedures anymore, since +# they may be removed in some future release. + +proc tk_menuBar args {} +proc tk_bindForTraversal args {} + +# ::tk::classic::restore -- +# +# Restore the pre-8.5 (Tk classic) look as the widget defaults for classic +# Tk widgets. +# +# The value following an 'option add' call is the new 8.5 value. +# +namespace eval ::tk::classic { + # This may need to be adjusted for some window managers that are + # more aggressive with their own Xdefaults (like KDE and CDE) + variable prio "widgetDefault" +} + +proc ::tk::classic::restore {args} { + # Restore classic (8.4) look to classic Tk widgets + variable prio + + if {[llength $args]} { + foreach what $args { + ::tk::classic::restore_$what + } + } else { + foreach cmd [info procs restore_*] { + $cmd + } + } +} + +proc ::tk::classic::restore_font {args} { + # Many widgets were adjusted from hard-coded defaults to using the + # TIP#145 fonts defined in fonts.tcl (eg TkDefaultFont, TkFixedFont, ...) + # For restoring compatibility, we only correct size and weighting changes, + # as the fonts themselves remained mostly the same. + if {[tk windowingsystem] eq "x11"} { + font configure TkDefaultFont -weight bold ; # normal + font configure TkFixedFont -size -12 ; # -10 + } + # Add these with prio 21 to override value in dialog/msgbox.tcl + if {[tk windowingsystem] eq "aqua"} { + option add *Dialog.msg.font system 21; # TkCaptionFont + option add *Dialog.dtl.font system 21; # TkCaptionFont + option add *ErrorDialog*Label.font system 21; # TkCaptionFont + } else { + option add *Dialog.msg.font {Times 12} 21; # TkCaptionFont + option add *Dialog.dtl.font {Times 10} 21; # TkCaptionFont + option add *ErrorDialog*Label.font {Times -18} 21; # TkCaptionFont + } +} + +proc ::tk::classic::restore_button {args} { + variable prio + if {[tk windowingsystem] eq "x11"} { + foreach cls {Button Radiobutton Checkbutton} { + option add *$cls.borderWidth 2 $prio; # 1 + } + } +} + +proc ::tk::classic::restore_entry {args} { + variable prio + # Entry and Spinbox share core defaults + foreach cls {Entry Spinbox} { + if {[tk windowingsystem] ne "aqua"} { + option add *$cls.borderWidth 2 $prio; # 1 + } + if {[tk windowingsystem] eq "x11"} { + option add *$cls.background "#d9d9d9" $prio; # "white" + option add *$cls.selectBorderWidth 1 $prio; # 0 + } + } +} + +proc ::tk::classic::restore_listbox {args} { + variable prio + if {[tk windowingsystem] ne "win32"} { + option add *Listbox.background "#d9d9d9" $prio; # "white" + option add *Listbox.activeStyle "underline" $prio; # "dotbox" + } + if {[tk windowingsystem] ne "aqua"} { + option add *Listbox.borderWidth 2 $prio; # 1 + } + if {[tk windowingsystem] eq "x11"} { + option add *Listbox.selectBorderWidth 1 $prio; # 0 + } + # Remove focus into Listbox added for 8.5 + bind Listbox <1> { + if {[winfo exists %W]} { + tk::ListboxBeginSelect %W [%W index @%x,%y] + } + } +} + +proc ::tk::classic::restore_menu {args} { + variable prio + if {[tk windowingsystem] eq "x11"} { + option add *Menu.activeBorderWidth 2 $prio; # 1 + option add *Menu.borderWidth 2 $prio; # 1 + option add *Menu.clickToFocus true $prio + option add *Menu.useMotifHelp true $prio + } + if {[tk windowingsystem] ne "aqua"} { + option add *Menu.font "TkDefaultFont" $prio; # "TkMenuFont" + } +} + +proc ::tk::classic::restore_menubutton {args} { + variable prio + option add *Menubutton.borderWidth 2 $prio; # 1 +} + +proc ::tk::classic::restore_message {args} { + variable prio + option add *Message.borderWidth 2 $prio; # 1 +} + +proc ::tk::classic::restore_panedwindow {args} { + variable prio + option add *Panedwindow.borderWidth 2 $prio; # 1 + option add *Panedwindow.sashWidth 2 $prio; # 3 + option add *Panedwindow.sashPad 2 $prio; # 0 + option add *Panedwindow.sashRelief raised $prio; # flat + option add *Panedwindow.opaqueResize 0 $prio; # 1 + if {[tk windowingsystem] ne "win32"} { + option add *Panedwindow.showHandle 1 $prio; # 0 + } +} + +proc ::tk::classic::restore_scale {args} { + variable prio + option add *Scale.borderWidth 2 $prio; # 1 + if {[tk windowingsystem] eq "x11"} { + option add *Scale.troughColor "#c3c3c3" $prio; # "#b3b3b3" + } +} + +proc ::tk::classic::restore_scrollbar {args} { + variable prio + if {[tk windowingsystem] eq "x11"} { + option add *Scrollbar.borderWidth 2 $prio; # 1 + option add *Scrollbar.highlightThickness 1 $prio; # 0 + option add *Scrollbar.width 15 $prio; # 11 + option add *Scrollbar.troughColor "#c3c3c3" $prio; # "#b3b3b3" + } +} + +proc ::tk::classic::restore_text {args} { + variable prio + if {[tk windowingsystem] ne "aqua"} { + option add *Text.borderWidth 2 $prio; # 1 + } + if {[tk windowingsystem] eq "win32"} { + option add *Text.font "TkDefaultFont" $prio; # "TkFixedFont" + } + if {[tk windowingsystem] eq "x11"} { + option add *Text.background "#d9d9d9" $prio; # white + option add *Text.selectBorderWidth 1 $prio; # 0 + } +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tk/optMenu.tcl b/extensions/fablabchemnitz/inkstitch/bin/tk/optMenu.tcl new file mode 100644 index 00000000..7cfdaa02 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tk/optMenu.tcl @@ -0,0 +1,43 @@ +# optMenu.tcl -- +# +# This file defines the procedure tk_optionMenu, which creates +# an option button and its associated menu. +# +# Copyright (c) 1994 The Regents of the University of California. +# Copyright (c) 1994 Sun Microsystems, Inc. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. +# + +# ::tk_optionMenu -- +# This procedure creates an option button named $w and an associated +# menu. Together they provide the functionality of Motif option menus: +# they can be used to select one of many values, and the current value +# appears in the global variable varName, as well as in the text of +# the option menubutton. The name of the menu is returned as the +# procedure's result, so that the caller can use it to change configuration +# options on the menu or otherwise manipulate it. +# +# Arguments: +# w - The name to use for the menubutton. +# varName - Global variable to hold the currently selected value. +# firstValue - First of legal values for option (must be >= 1). +# args - Any number of additional values. + +proc ::tk_optionMenu {w varName firstValue args} { + upvar #0 $varName var + + if {![info exists var]} { + set var $firstValue + } + menubutton $w -textvariable $varName -indicatoron 1 -menu $w.menu \ + -relief raised -highlightthickness 1 -anchor c \ + -direction flush + menu $w.menu -tearoff 0 + $w.menu add radiobutton -label $firstValue -variable $varName + foreach i $args { + $w.menu add radiobutton -label $i -variable $varName + } + return $w.menu +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tk/palette.tcl b/extensions/fablabchemnitz/inkstitch/bin/tk/palette.tcl new file mode 100644 index 00000000..21be8dcb --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tk/palette.tcl @@ -0,0 +1,243 @@ +# palette.tcl -- +# +# This file contains procedures that change the color palette used +# by Tk. +# +# Copyright (c) 1995-1997 Sun Microsystems, Inc. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. +# + +# ::tk_setPalette -- +# Changes the default color scheme for a Tk application by setting +# default colors in the option database and by modifying all of the +# color options for existing widgets that have the default value. +# +# Arguments: +# The arguments consist of either a single color name, which +# will be used as the new background color (all other colors will +# be computed from this) or an even number of values consisting of +# option names and values. The name for an option is the one used +# for the option database, such as activeForeground, not -activeforeground. + +proc ::tk_setPalette {args} { + if {[winfo depth .] == 1} { + # Just return on monochrome displays, otherwise errors will occur + return + } + + # Create an array that has the complete new palette. If some colors + # aren't specified, compute them from other colors that are specified. + + if {[llength $args] == 1} { + set new(background) [lindex $args 0] + } else { + array set new $args + } + if {![info exists new(background)]} { + error "must specify a background color" + } + set bg [winfo rgb . $new(background)] + if {![info exists new(foreground)]} { + # Note that the range of each value in the triple returned by + # [winfo rgb] is 0-65535, and your eyes are more sensitive to + # green than to red, and more to red than to blue. + foreach {r g b} $bg {break} + if {$r+1.5*$g+0.5*$b > 100000} { + set new(foreground) black + } else { + set new(foreground) white + } + } + lassign [winfo rgb . $new(foreground)] fg_r fg_g fg_b + lassign $bg bg_r bg_g bg_b + set darkerBg [format #%02x%02x%02x [expr {(9*$bg_r)/2560}] \ + [expr {(9*$bg_g)/2560}] [expr {(9*$bg_b)/2560}]] + + foreach i {activeForeground insertBackground selectForeground \ + highlightColor} { + if {![info exists new($i)]} { + set new($i) $new(foreground) + } + } + if {![info exists new(disabledForeground)]} { + set new(disabledForeground) [format #%02x%02x%02x \ + [expr {(3*$bg_r + $fg_r)/1024}] \ + [expr {(3*$bg_g + $fg_g)/1024}] \ + [expr {(3*$bg_b + $fg_b)/1024}]] + } + if {![info exists new(highlightBackground)]} { + set new(highlightBackground) $new(background) + } + if {![info exists new(activeBackground)]} { + # Pick a default active background that islighter than the + # normal background. To do this, round each color component + # up by 15% or 1/3 of the way to full white, whichever is + # greater. + + foreach i {0 1 2} color $bg { + set light($i) [expr {$color/256}] + set inc1 [expr {($light($i)*15)/100}] + set inc2 [expr {(255-$light($i))/3}] + if {$inc1 > $inc2} { + incr light($i) $inc1 + } else { + incr light($i) $inc2 + } + if {$light($i) > 255} { + set light($i) 255 + } + } + set new(activeBackground) [format #%02x%02x%02x $light(0) \ + $light(1) $light(2)] + } + if {![info exists new(selectBackground)]} { + set new(selectBackground) $darkerBg + } + if {![info exists new(troughColor)]} { + set new(troughColor) $darkerBg + } + + # let's make one of each of the widgets so we know what the + # defaults are currently for this platform. + toplevel .___tk_set_palette + wm withdraw .___tk_set_palette + foreach q { + button canvas checkbutton entry frame label labelframe + listbox menubutton menu message radiobutton scale scrollbar + spinbox text + } { + $q .___tk_set_palette.$q + } + + # Walk the widget hierarchy, recoloring all existing windows. + # The option database must be set according to what we do here, + # but it breaks things if we set things in the database while + # we are changing colors...so, ::tk::RecolorTree now returns the + # option database changes that need to be made, and they + # need to be evalled here to take effect. + # We have to walk the whole widget tree instead of just + # relying on the widgets we've created above to do the work + # because different extensions may provide other kinds + # of widgets that we don't currently know about, so we'll + # walk the whole hierarchy just in case. + + eval [tk::RecolorTree . new] + + destroy .___tk_set_palette + + # Change the option database so that future windows will get the + # same colors. + + foreach option [array names new] { + option add *$option $new($option) widgetDefault + } + + # Save the options in the variable ::tk::Palette, for use the + # next time we change the options. + + array set ::tk::Palette [array get new] +} + +# ::tk::RecolorTree -- +# This procedure changes the colors in a window and all of its +# descendants, according to information provided by the colors +# argument. This looks at the defaults provided by the option +# database, if it exists, and if not, then it looks at the default +# value of the widget itself. +# +# Arguments: +# w - The name of a window. This window and all its +# descendants are recolored. +# colors - The name of an array variable in the caller, +# which contains color information. Each element +# is named after a widget configuration option, and +# each value is the value for that option. + +proc ::tk::RecolorTree {w colors} { + upvar $colors c + set result {} + set prototype .___tk_set_palette.[string tolower [winfo class $w]] + if {![winfo exists $prototype]} { + unset prototype + } + foreach dbOption [array names c] { + set option -[string tolower $dbOption] + set class [string replace $dbOption 0 0 [string toupper \ + [string index $dbOption 0]]] + if {![catch {$w configure $option} value]} { + # if the option database has a preference for this + # dbOption, then use it, otherwise use the defaults + # for the widget. + set defaultcolor [option get $w $dbOption $class] + if {$defaultcolor eq "" || \ + ([info exists prototype] && \ + [$prototype cget $option] ne "$defaultcolor")} { + set defaultcolor [lindex $value 3] + } + if {$defaultcolor ne ""} { + set defaultcolor [winfo rgb . $defaultcolor] + } + set chosencolor [lindex $value 4] + if {$chosencolor ne ""} { + set chosencolor [winfo rgb . $chosencolor] + } + if {[string match $defaultcolor $chosencolor]} { + # Change the option database so that future windows will get + # the same colors. + append result ";\noption add [list \ + *[winfo class $w].$dbOption $c($dbOption) 60]" + $w configure $option $c($dbOption) + } + } + } + foreach child [winfo children $w] { + append result ";\n[::tk::RecolorTree $child c]" + } + return $result +} + +# ::tk::Darken -- +# Given a color name, computes a new color value that darkens (or +# brightens) the given color by a given percent. +# +# Arguments: +# color - Name of starting color. +# perecent - Integer telling how much to brighten or darken as a +# percent: 50 means darken by 50%, 110 means brighten +# by 10%. + +proc ::tk::Darken {color percent} { + foreach {red green blue} [winfo rgb . $color] { + set red [expr {($red/256)*$percent/100}] + set green [expr {($green/256)*$percent/100}] + set blue [expr {($blue/256)*$percent/100}] + break + } + if {$red > 255} { + set red 255 + } + if {$green > 255} { + set green 255 + } + if {$blue > 255} { + set blue 255 + } + return [format "#%02x%02x%02x" $red $green $blue] +} + +# ::tk_bisque -- +# Reset the Tk color palette to the old "bisque" colors. +# +# Arguments: +# None. + +proc ::tk_bisque {} { + tk_setPalette activeBackground #e6ceb1 activeForeground black \ + background #ffe4c4 disabledForeground #b0b0b0 foreground black \ + highlightBackground #ffe4c4 highlightColor black \ + insertBackground black \ + selectBackground #e6ceb1 selectForeground black \ + troughColor #cdb79e +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tk/panedwindow.tcl b/extensions/fablabchemnitz/inkstitch/bin/tk/panedwindow.tcl new file mode 100644 index 00000000..d3dfabc6 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tk/panedwindow.tcl @@ -0,0 +1,194 @@ +# panedwindow.tcl -- +# +# This file defines the default bindings for Tk panedwindow widgets and +# provides procedures that help in implementing those bindings. + +bind Panedwindow { ::tk::panedwindow::MarkSash %W %x %y 1 } +bind Panedwindow { ::tk::panedwindow::MarkSash %W %x %y 0 } + +bind Panedwindow { ::tk::panedwindow::DragSash %W %x %y 1 } +bind Panedwindow { ::tk::panedwindow::DragSash %W %x %y 0 } + +bind Panedwindow {::tk::panedwindow::ReleaseSash %W 1} +bind Panedwindow {::tk::panedwindow::ReleaseSash %W 0} + +bind Panedwindow { ::tk::panedwindow::Motion %W %x %y } + +bind Panedwindow { ::tk::panedwindow::Leave %W } + +# Initialize namespace +namespace eval ::tk::panedwindow {} + +# ::tk::panedwindow::MarkSash -- +# +# Handle marking the correct sash for possible dragging +# +# Arguments: +# w the widget +# x widget local x coord +# y widget local y coord +# proxy whether this should be a proxy sash +# Results: +# None +# +proc ::tk::panedwindow::MarkSash {w x y proxy} { + variable ::tk::Priv + if {[$w cget -opaqueresize]} { + set proxy 0 + } + set what [$w identify $x $y] + if { [llength $what] == 2 } { + lassign $what index which + if {!$::tk_strictMotif || $which eq "handle"} { + if {!$proxy} { + $w sash mark $index $x $y + } + set Priv(sash) $index + lassign [$w sash coord $index] sx sy + set Priv(dx) [expr {$sx-$x}] + set Priv(dy) [expr {$sy-$y}] + # Do this to init the proxy location + DragSash $w $x $y $proxy + } + } +} + +# ::tk::panedwindow::DragSash -- +# +# Handle dragging of the correct sash +# +# Arguments: +# w the widget +# x widget local x coord +# y widget local y coord +# proxy whether this should be a proxy sash +# Results: +# Moves sash +# +proc ::tk::panedwindow::DragSash {w x y proxy} { + variable ::tk::Priv + if {[$w cget -opaqueresize]} { + set proxy 0 + } + if {[info exists Priv(sash)]} { + if {$proxy} { + $w proxy place [expr {$x+$Priv(dx)}] [expr {$y+$Priv(dy)}] + } else { + $w sash place $Priv(sash) \ + [expr {$x+$Priv(dx)}] [expr {$y+$Priv(dy)}] + } + } +} + +# ::tk::panedwindow::ReleaseSash -- +# +# Handle releasing of the sash +# +# Arguments: +# w the widget +# proxy whether this should be a proxy sash +# Results: +# Returns ... +# +proc ::tk::panedwindow::ReleaseSash {w proxy} { + variable ::tk::Priv + if {[$w cget -opaqueresize]} { + set proxy 0 + } + if {[info exists Priv(sash)]} { + if {$proxy} { + lassign [$w proxy coord] x y + $w sash place $Priv(sash) $x $y + $w proxy forget + } + unset Priv(sash) Priv(dx) Priv(dy) + } +} + +# ::tk::panedwindow::Motion -- +# +# Handle motion on the widget. This is used to change the cursor +# when the user moves over the sash area. +# +# Arguments: +# w the widget +# x widget local x coord +# y widget local y coord +# Results: +# May change the cursor. Sets up a timer to verify that we are still +# over the widget. +# +proc ::tk::panedwindow::Motion {w x y} { + variable ::tk::Priv + set id [$w identify $x $y] + if {([llength $id] == 2) && \ + (!$::tk_strictMotif || [lindex $id 1] eq "handle")} { + if {![info exists Priv($w,panecursor)]} { + set Priv($w,panecursor) [$w cget -cursor] + if {[$w cget -sashcursor] ne ""} { + $w configure -cursor [$w cget -sashcursor] + } elseif {[$w cget -orient] eq "horizontal"} { + $w configure -cursor sb_h_double_arrow + } else { + $w configure -cursor sb_v_double_arrow + } + if {[info exists Priv($w,pwAfterId)]} { + after cancel $Priv($w,pwAfterId) + } + set Priv($w,pwAfterId) [after 150 \ + [list ::tk::panedwindow::Cursor $w]] + } + return + } + if {[info exists Priv($w,panecursor)]} { + $w configure -cursor $Priv($w,panecursor) + unset Priv($w,panecursor) + } +} + +# ::tk::panedwindow::Cursor -- +# +# Handles returning the normal cursor when we are no longer over the +# sash area. This needs to be done this way, because the panedwindow +# won't see Leave events when the mouse moves from the sash to a +# paned child, although the child does receive an Enter event. +# +# Arguments: +# w the widget +# Results: +# May restore the default cursor, or schedule a timer to do it. +# +proc ::tk::panedwindow::Cursor {w} { + variable ::tk::Priv + # Make sure to check window existence in case it is destroyed. + if {[info exists Priv($w,panecursor)] && [winfo exists $w]} { + if {[winfo containing [winfo pointerx $w] [winfo pointery $w]] eq $w} { + set Priv($w,pwAfterId) [after 150 \ + [list ::tk::panedwindow::Cursor $w]] + } else { + $w configure -cursor $Priv($w,panecursor) + unset Priv($w,panecursor) + if {[info exists Priv($w,pwAfterId)]} { + after cancel $Priv($w,pwAfterId) + unset Priv($w,pwAfterId) + } + } + } +} + +# ::tk::panedwindow::Leave -- +# +# Return to default cursor when leaving the pw widget. +# +# Arguments: +# w the widget +# Results: +# Restores the default cursor +# +proc ::tk::panedwindow::Leave {w} { + variable ::tk::Priv + if {[info exists Priv($w,panecursor)]} { + $w configure -cursor $Priv($w,panecursor) + unset Priv($w,panecursor) + } +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tk/pkgIndex.tcl b/extensions/fablabchemnitz/inkstitch/bin/tk/pkgIndex.tcl new file mode 100644 index 00000000..d74fc11f --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tk/pkgIndex.tcl @@ -0,0 +1,7 @@ +if {[catch {package present Tcl 8.5.0}]} { return } +if {($::tcl_platform(platform) eq "unix") && ([info exists ::env(DISPLAY)] + || ([info exists ::argv] && ("-display" in $::argv)))} { + package ifneeded Tk 8.5.19 [list load [file join $dir .. .. bin libtk8.5.dll] Tk] +} else { + package ifneeded Tk 8.5.19 [list load [file join $dir .. .. bin tk85.dll] Tk] +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tk/safetk.tcl b/extensions/fablabchemnitz/inkstitch/bin/tk/safetk.tcl new file mode 100644 index 00000000..c975fd6c --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tk/safetk.tcl @@ -0,0 +1,264 @@ +# safetk.tcl -- +# +# Support procs to use Tk in safe interpreters. +# +# Copyright (c) 1997 Sun Microsystems, Inc. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# see safetk.n for documentation + +# +# +# Note: It is now ok to let untrusted code being executed +# between the creation of the interp and the actual loading +# of Tk in that interp because the C side Tk_Init will +# now look up the master interp and ask its safe::TkInit +# for the actual parameters to use for it's initialization (if allowed), +# not relying on the slave state. +# + +# We use opt (optional arguments parsing) +package require opt 0.4.1; + +namespace eval ::safe { + + # counter for safe toplevels + variable tkSafeId 0 +} + +# +# tkInterpInit : prepare the slave interpreter for tk loading +# most of the real job is done by loadTk +# returns the slave name (tkInterpInit does) +# +proc ::safe::tkInterpInit {slave argv} { + global env tk_library + + # We have to make sure that the tk_library variable is normalized. + set tk_library [file normalize $tk_library] + + # Clear Tk's access for that interp (path). + allowTk $slave $argv + + # Ensure tk_library and subdirs (eg, ttk) are on the access path + ::interp eval $slave [list set tk_library [::safe::interpAddToAccessPath $slave $tk_library]] + foreach subdir [::safe::AddSubDirs [list $tk_library]] { + ::safe::interpAddToAccessPath $slave $subdir + } + return $slave +} + + +# tkInterpLoadTk: +# Do additional configuration as needed (calling tkInterpInit) +# and actually load Tk into the slave. +# +# Either contained in the specified windowId (-use) or +# creating a decorated toplevel for it. + +# empty definition for auto_mkIndex +proc ::safe::loadTk {} {} + +::tcl::OptProc ::safe::loadTk { + {slave -interp "name of the slave interpreter"} + {-use -windowId {} "window Id to use (new toplevel otherwise)"} + {-display -displayName {} "display name to use (current one otherwise)"} +} { + set displayGiven [::tcl::OptProcArgGiven "-display"] + if {!$displayGiven} { + # Try to get the current display from "." + # (which might not exist if the master is tk-less) + if {[catch {set display [winfo screen .]}]} { + if {[info exists ::env(DISPLAY)]} { + set display $::env(DISPLAY) + } else { + Log $slave "no winfo screen . nor env(DISPLAY)" WARNING + set display ":0.0" + } + } + } + + # Get state for access to the cleanupHook. + namespace upvar ::safe S$slave state + + if {![::tcl::OptProcArgGiven "-use"]} { + # create a decorated toplevel + ::tcl::Lassign [tkTopLevel $slave $display] w use + + # set our delete hook (slave arg is added by interpDelete) + # to clean up both window related code and tkInit(slave) + set state(cleanupHook) [list tkDelete {} $w] + + } else { + + # set our delete hook (slave arg is added by interpDelete) + # to clean up tkInit(slave) + set state(cleanupHook) [list disallowTk] + + # Let's be nice and also accept tk window names instead of ids + if {[string match ".*" $use]} { + set windowName $use + set use [winfo id $windowName] + set nDisplay [winfo screen $windowName] + } else { + # Check for a better -display value + # (works only for multi screens on single host, but not + # cross hosts, for that a tk window name would be better + # but embeding is also usefull for non tk names) + if {![catch {winfo pathname $use} name]} { + set nDisplay [winfo screen $name] + } else { + # Can't have a better one + set nDisplay $display + } + } + if {$nDisplay ne $display} { + if {$displayGiven} { + error "conflicting -display $display and -use\ + $use -> $nDisplay" + } else { + set display $nDisplay + } + } + } + + # Prepares the slave for tk with those parameters + tkInterpInit $slave [list "-use" $use "-display" $display] + + load {} Tk $slave + + return $slave +} + +proc ::safe::TkInit {interpPath} { + variable tkInit + if {[info exists tkInit($interpPath)]} { + set value $tkInit($interpPath) + Log $interpPath "TkInit called, returning \"$value\"" NOTICE + return $value + } else { + Log $interpPath "TkInit called for interp with clearance:\ + preventing Tk init" ERROR + error "not allowed" + } +} + +# safe::allowTk -- +# +# Set tkInit(interpPath) to allow Tk to be initialized in +# safe::TkInit. +# +# Arguments: +# interpPath slave interpreter handle +# argv arguments passed to safe::TkInterpInit +# +# Results: +# none. + +proc ::safe::allowTk {interpPath argv} { + variable tkInit + set tkInit($interpPath) $argv + return +} + + +# safe::disallowTk -- +# +# Unset tkInit(interpPath) to disallow Tk from getting initialized +# in safe::TkInit. +# +# Arguments: +# interpPath slave interpreter handle +# +# Results: +# none. + +proc ::safe::disallowTk {interpPath} { + variable tkInit + # This can already be deleted by the DeleteHook of the interp + if {[info exists tkInit($interpPath)]} { + unset tkInit($interpPath) + } + return +} + + +# safe::tkDelete -- +# +# Clean up the window associated with the interp being deleted. +# +# Arguments: +# interpPath slave interpreter handle +# +# Results: +# none. + +proc ::safe::tkDelete {W window slave} { + + # we are going to be called for each widget... skip untill it's + # top level + + Log $slave "Called tkDelete $W $window" NOTICE + if {[::interp exists $slave]} { + if {[catch {::safe::interpDelete $slave} msg]} { + Log $slave "Deletion error : $msg" + } + } + if {[winfo exists $window]} { + Log $slave "Destroy toplevel $window" NOTICE + destroy $window + } + + # clean up tkInit(slave) + disallowTk $slave + return +} + +proc ::safe::tkTopLevel {slave display} { + variable tkSafeId + incr tkSafeId + set w ".safe$tkSafeId" + if {[catch {toplevel $w -screen $display -class SafeTk} msg]} { + return -code error "Unable to create toplevel for\ + safe slave \"$slave\" ($msg)" + } + Log $slave "New toplevel $w" NOTICE + + set msg "Untrusted Tcl applet ($slave)" + wm title $w $msg + + # Control frame (we must create a style for it) + ttk::style layout TWarningFrame {WarningFrame.border -sticky nswe} + ttk::style configure TWarningFrame -background red + + set wc $w.fc + ttk::frame $wc -relief ridge -borderwidth 4 -style TWarningFrame + + # We will destroy the interp when the window is destroyed + bindtags $wc [concat Safe$wc [bindtags $wc]] + bind Safe$wc [list ::safe::tkDelete %W $w $slave] + + ttk::label $wc.l -text $msg -anchor w + + # We want the button to be the last visible item + # (so be packed first) and at the right and not resizing horizontally + + # frame the button so it does not expand horizontally + # but still have the default background instead of red one from the parent + ttk::frame $wc.fb -borderwidth 0 + ttk::button $wc.fb.b -text "Delete" \ + -command [list ::safe::tkDelete $w $w $slave] + pack $wc.fb.b -side right -fill both + pack $wc.fb -side right -fill both -expand 1 + pack $wc.l -side left -fill both -expand 1 -ipady 2 + pack $wc -side bottom -fill x + + # Container frame + frame $w.c -container 1 + pack $w.c -fill both -expand 1 + + # return both the toplevel window name and the id to use for embedding + list $w [winfo id $w.c] +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tk/scale.tcl b/extensions/fablabchemnitz/inkstitch/bin/tk/scale.tcl new file mode 100644 index 00000000..771c7a41 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tk/scale.tcl @@ -0,0 +1,290 @@ +# scale.tcl -- +# +# This file defines the default bindings for Tk scale widgets and provides +# procedures that help in implementing the bindings. +# +# Copyright (c) 1994 The Regents of the University of California. +# Copyright (c) 1994-1995 Sun Microsystems, Inc. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. +# + +#------------------------------------------------------------------------- +# The code below creates the default class bindings for entries. +#------------------------------------------------------------------------- + +# Standard Motif bindings: + +bind Scale { + if {$tk_strictMotif} { + set tk::Priv(activeBg) [%W cget -activebackground] + %W configure -activebackground [%W cget -background] + } + tk::ScaleActivate %W %x %y +} +bind Scale { + tk::ScaleActivate %W %x %y +} +bind Scale { + if {$tk_strictMotif} { + %W configure -activebackground $tk::Priv(activeBg) + } + if {[%W cget -state] eq "active"} { + %W configure -state normal + } +} +bind Scale <1> { + tk::ScaleButtonDown %W %x %y +} +bind Scale { + tk::ScaleDrag %W %x %y +} +bind Scale { } +bind Scale { } +bind Scale { + tk::CancelRepeat + tk::ScaleEndDrag %W + tk::ScaleActivate %W %x %y +} +bind Scale <2> { + tk::ScaleButton2Down %W %x %y +} +bind Scale { + tk::ScaleDrag %W %x %y +} +bind Scale { } +bind Scale { } +bind Scale { + tk::CancelRepeat + tk::ScaleEndDrag %W + tk::ScaleActivate %W %x %y +} +if {[tk windowingsystem] eq "win32"} { + # On Windows do the same with button 3, as that is the right mouse button + bind Scale <3> [bind Scale <2>] + bind Scale [bind Scale ] + bind Scale [bind Scale ] + bind Scale [bind Scale ] + bind Scale [bind Scale ] +} +bind Scale { + tk::ScaleControlPress %W %x %y +} +bind Scale { + tk::ScaleIncrement %W up little noRepeat +} +bind Scale { + tk::ScaleIncrement %W down little noRepeat +} +bind Scale { + tk::ScaleIncrement %W up little noRepeat +} +bind Scale { + tk::ScaleIncrement %W down little noRepeat +} +bind Scale { + tk::ScaleIncrement %W up big noRepeat +} +bind Scale { + tk::ScaleIncrement %W down big noRepeat +} +bind Scale { + tk::ScaleIncrement %W up big noRepeat +} +bind Scale { + tk::ScaleIncrement %W down big noRepeat +} +bind Scale { + %W set [%W cget -from] +} +bind Scale { + %W set [%W cget -to] +} + +# ::tk::ScaleActivate -- +# This procedure is invoked to check a given x-y position in the +# scale and activate the slider if the x-y position falls within +# the slider. +# +# Arguments: +# w - The scale widget. +# x, y - Mouse coordinates. + +proc ::tk::ScaleActivate {w x y} { + if {[$w cget -state] eq "disabled"} { + return + } + if {[$w identify $x $y] eq "slider"} { + set state active + } else { + set state normal + } + if {[$w cget -state] ne $state} { + $w configure -state $state + } +} + +# ::tk::ScaleButtonDown -- +# This procedure is invoked when a button is pressed in a scale. It +# takes different actions depending on where the button was pressed. +# +# Arguments: +# w - The scale widget. +# x, y - Mouse coordinates of button press. + +proc ::tk::ScaleButtonDown {w x y} { + variable ::tk::Priv + set Priv(dragging) 0 + set el [$w identify $x $y] + + # save the relief + set Priv($w,relief) [$w cget -sliderrelief] + + if {$el eq "trough1"} { + ScaleIncrement $w up little initial + } elseif {$el eq "trough2"} { + ScaleIncrement $w down little initial + } elseif {$el eq "slider"} { + set Priv(dragging) 1 + set Priv(initValue) [$w get] + set coords [$w coords] + set Priv(deltaX) [expr {$x - [lindex $coords 0]}] + set Priv(deltaY) [expr {$y - [lindex $coords 1]}] + switch -exact -- $Priv($w,relief) { + "raised" { $w configure -sliderrelief sunken } + "ridge" { $w configure -sliderrelief groove } + } + } +} + +# ::tk::ScaleDrag -- +# This procedure is called when the mouse is dragged with +# mouse button 1 down. If the drag started inside the slider +# (i.e. the scale is active) then the scale's value is adjusted +# to reflect the mouse's position. +# +# Arguments: +# w - The scale widget. +# x, y - Mouse coordinates. + +proc ::tk::ScaleDrag {w x y} { + variable ::tk::Priv + if {!$Priv(dragging)} { + return + } + $w set [$w get [expr {$x-$Priv(deltaX)}] [expr {$y-$Priv(deltaY)}]] +} + +# ::tk::ScaleEndDrag -- +# This procedure is called to end an interactive drag of the +# slider. It just marks the drag as over. +# +# Arguments: +# w - The scale widget. + +proc ::tk::ScaleEndDrag {w} { + variable ::tk::Priv + set Priv(dragging) 0 + if {[info exists Priv($w,relief)]} { + $w configure -sliderrelief $Priv($w,relief) + unset Priv($w,relief) + } +} + +# ::tk::ScaleIncrement -- +# This procedure is invoked to increment the value of a scale and +# to set up auto-repeating of the action if that is desired. The +# way the value is incremented depends on the "dir" and "big" +# arguments. +# +# Arguments: +# w - The scale widget. +# dir - "up" means move value towards -from, "down" means +# move towards -to. +# big - Size of increments: "big" or "little". +# repeat - Whether and how to auto-repeat the action: "noRepeat" +# means don't auto-repeat, "initial" means this is the +# first action in an auto-repeat sequence, and "again" +# means this is the second repetition or later. + +proc ::tk::ScaleIncrement {w dir big repeat} { + variable ::tk::Priv + if {![winfo exists $w]} return + if {$big eq "big"} { + set inc [$w cget -bigincrement] + if {$inc == 0} { + set inc [expr {abs([$w cget -to] - [$w cget -from])/10.0}] + } + if {$inc < [$w cget -resolution]} { + set inc [$w cget -resolution] + } + } else { + set inc [$w cget -resolution] + } + if {([$w cget -from] > [$w cget -to]) ^ ($dir eq "up")} { + if {$inc > 0} { + set inc [expr {-$inc}] + } + } else { + if {$inc < 0} { + set inc [expr {-$inc}] + } + } + $w set [expr {[$w get] + $inc}] + + if {$repeat eq "again"} { + set Priv(afterId) [after [$w cget -repeatinterval] \ + [list tk::ScaleIncrement $w $dir $big again]] + } elseif {$repeat eq "initial"} { + set delay [$w cget -repeatdelay] + if {$delay > 0} { + set Priv(afterId) [after $delay \ + [list tk::ScaleIncrement $w $dir $big again]] + } + } +} + +# ::tk::ScaleControlPress -- +# This procedure handles button presses that are made with the Control +# key down. Depending on the mouse position, it adjusts the scale +# value to one end of the range or the other. +# +# Arguments: +# w - The scale widget. +# x, y - Mouse coordinates where the button was pressed. + +proc ::tk::ScaleControlPress {w x y} { + set el [$w identify $x $y] + if {$el eq "trough1"} { + $w set [$w cget -from] + } elseif {$el eq "trough2"} { + $w set [$w cget -to] + } +} + +# ::tk::ScaleButton2Down +# This procedure is invoked when button 2 is pressed over a scale. +# It sets the value to correspond to the mouse position and starts +# a slider drag. +# +# Arguments: +# w - The scrollbar widget. +# x, y - Mouse coordinates within the widget. + +proc ::tk::ScaleButton2Down {w x y} { + variable ::tk::Priv + + if {[$w cget -state] eq "disabled"} { + return + } + + $w configure -state active + $w set [$w get $x $y] + set Priv(dragging) 1 + set Priv(initValue) [$w get] + set Priv($w,relief) [$w cget -sliderrelief] + set coords "$x $y" + set Priv(deltaX) 0 + set Priv(deltaY) 0 +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tk/scrlbar.tcl b/extensions/fablabchemnitz/inkstitch/bin/tk/scrlbar.tcl new file mode 100644 index 00000000..43ce4aeb --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tk/scrlbar.tcl @@ -0,0 +1,434 @@ +# scrlbar.tcl -- +# +# This file defines the default bindings for Tk scrollbar widgets. +# It also provides procedures that help in implementing the bindings. +# +# Copyright (c) 1994 The Regents of the University of California. +# Copyright (c) 1994-1996 Sun Microsystems, Inc. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. +# + +#------------------------------------------------------------------------- +# The code below creates the default class bindings for scrollbars. +#------------------------------------------------------------------------- + +# Standard Motif bindings: +if {[tk windowingsystem] eq "x11" || [tk windowingsystem] eq "aqua"} { + +bind Scrollbar { + if {$tk_strictMotif} { + set tk::Priv(activeBg) [%W cget -activebackground] + %W configure -activebackground [%W cget -background] + } + %W activate [%W identify %x %y] +} +bind Scrollbar { + %W activate [%W identify %x %y] +} + +# The "info exists" command in the following binding handles the +# situation where a Leave event occurs for a scrollbar without the Enter +# event. This seems to happen on some systems (such as Solaris 2.4) for +# unknown reasons. + +bind Scrollbar { + if {$tk_strictMotif && [info exists tk::Priv(activeBg)]} { + %W configure -activebackground $tk::Priv(activeBg) + } + %W activate {} +} +bind Scrollbar <1> { + tk::ScrollButtonDown %W %x %y +} +bind Scrollbar { + tk::ScrollDrag %W %x %y +} +bind Scrollbar { + tk::ScrollDrag %W %x %y +} +bind Scrollbar { + tk::ScrollButtonUp %W %x %y +} +bind Scrollbar { + # Prevents binding from being invoked. +} +bind Scrollbar { + # Prevents binding from being invoked. +} +bind Scrollbar <2> { + tk::ScrollButton2Down %W %x %y +} +bind Scrollbar { + # Do nothing, since button 1 is already down. +} +bind Scrollbar { + # Do nothing, since button 2 is already down. +} +bind Scrollbar { + tk::ScrollDrag %W %x %y +} +bind Scrollbar { + tk::ScrollButtonUp %W %x %y +} +bind Scrollbar { + # Do nothing: B1 release will handle it. +} +bind Scrollbar { + # Do nothing: B2 release will handle it. +} +bind Scrollbar { + # Prevents binding from being invoked. +} +bind Scrollbar { + # Prevents binding from being invoked. +} +bind Scrollbar { + tk::ScrollTopBottom %W %x %y +} +bind Scrollbar { + tk::ScrollTopBottom %W %x %y +} + +bind Scrollbar { + tk::ScrollByUnits %W v -1 +} +bind Scrollbar { + tk::ScrollByUnits %W v 1 +} +bind Scrollbar { + tk::ScrollByPages %W v -1 +} +bind Scrollbar { + tk::ScrollByPages %W v 1 +} +bind Scrollbar { + tk::ScrollByUnits %W h -1 +} +bind Scrollbar { + tk::ScrollByUnits %W h 1 +} +bind Scrollbar { + tk::ScrollByPages %W h -1 +} +bind Scrollbar { + tk::ScrollByPages %W h 1 +} +bind Scrollbar { + tk::ScrollByPages %W hv -1 +} +bind Scrollbar { + tk::ScrollByPages %W hv 1 +} +bind Scrollbar { + tk::ScrollToPos %W 0 +} +bind Scrollbar { + tk::ScrollToPos %W 1 +} +} +if {[tk windowingsystem] eq "aqua"} { + bind Scrollbar { + tk::ScrollByUnits %W v [expr {- (%D)}] + } + bind Scrollbar { + tk::ScrollByUnits %W v [expr {-10 * (%D)}] + } + bind Scrollbar { + tk::ScrollByUnits %W h [expr {- (%D)}] + } + bind Scrollbar { + tk::ScrollByUnits %W h [expr {-10 * (%D)}] + } +} else { + bind Scrollbar { + tk::ScrollByUnits %W v [expr {- (%D /120 ) * 4}] + } + bind Scrollbar { + tk::ScrollByUnits %W h [expr {- (%D /120 ) * 4}] + } +} +# tk::ScrollButtonDown -- +# This procedure is invoked when a button is pressed in a scrollbar. +# It changes the way the scrollbar is displayed and takes actions +# depending on where the mouse is. +# +# Arguments: +# w - The scrollbar widget. +# x, y - Mouse coordinates. + +proc tk::ScrollButtonDown {w x y} { + variable ::tk::Priv + set Priv(relief) [$w cget -activerelief] + $w configure -activerelief sunken + set element [$w identify $x $y] + if {$element eq "slider"} { + ScrollStartDrag $w $x $y + } else { + ScrollSelect $w $element initial + } +} + +# ::tk::ScrollButtonUp -- +# This procedure is invoked when a button is released in a scrollbar. +# It cancels scans and auto-repeats that were in progress, and restores +# the way the active element is displayed. +# +# Arguments: +# w - The scrollbar widget. +# x, y - Mouse coordinates. + +proc ::tk::ScrollButtonUp {w x y} { + variable ::tk::Priv + tk::CancelRepeat + if {[info exists Priv(relief)]} { + # Avoid error due to spurious release events + $w configure -activerelief $Priv(relief) + ScrollEndDrag $w $x $y + $w activate [$w identify $x $y] + } +} + +# ::tk::ScrollSelect -- +# This procedure is invoked when a button is pressed over the scrollbar. +# It invokes one of several scrolling actions depending on where in +# the scrollbar the button was pressed. +# +# Arguments: +# w - The scrollbar widget. +# element - The element of the scrollbar that was selected, such +# as "arrow1" or "trough2". Shouldn't be "slider". +# repeat - Whether and how to auto-repeat the action: "noRepeat" +# means don't auto-repeat, "initial" means this is the +# first action in an auto-repeat sequence, and "again" +# means this is the second repetition or later. + +proc ::tk::ScrollSelect {w element repeat} { + variable ::tk::Priv + if {![winfo exists $w]} return + switch -- $element { + "arrow1" {ScrollByUnits $w hv -1} + "trough1" {ScrollByPages $w hv -1} + "trough2" {ScrollByPages $w hv 1} + "arrow2" {ScrollByUnits $w hv 1} + default {return} + } + if {$repeat eq "again"} { + set Priv(afterId) [after [$w cget -repeatinterval] \ + [list tk::ScrollSelect $w $element again]] + } elseif {$repeat eq "initial"} { + set delay [$w cget -repeatdelay] + if {$delay > 0} { + set Priv(afterId) [after $delay \ + [list tk::ScrollSelect $w $element again]] + } + } +} + +# ::tk::ScrollStartDrag -- +# This procedure is called to initiate a drag of the slider. It just +# remembers the starting position of the mouse and slider. +# +# Arguments: +# w - The scrollbar widget. +# x, y - The mouse position at the start of the drag operation. + +proc ::tk::ScrollStartDrag {w x y} { + variable ::tk::Priv + + if {[$w cget -command] eq ""} { + return + } + set Priv(pressX) $x + set Priv(pressY) $y + set Priv(initValues) [$w get] + set iv0 [lindex $Priv(initValues) 0] + if {[llength $Priv(initValues)] == 2} { + set Priv(initPos) $iv0 + } elseif {$iv0 == 0} { + set Priv(initPos) 0.0 + } else { + set Priv(initPos) [expr {(double([lindex $Priv(initValues) 2])) \ + / [lindex $Priv(initValues) 0]}] + } +} + +# ::tk::ScrollDrag -- +# This procedure is called for each mouse motion even when the slider +# is being dragged. It notifies the associated widget if we're not +# jump scrolling, and it just updates the scrollbar if we are jump +# scrolling. +# +# Arguments: +# w - The scrollbar widget. +# x, y - The current mouse position. + +proc ::tk::ScrollDrag {w x y} { + variable ::tk::Priv + + if {$Priv(initPos) eq ""} { + return + } + set delta [$w delta [expr {$x - $Priv(pressX)}] [expr {$y - $Priv(pressY)}]] + if {[$w cget -jump]} { + if {[llength $Priv(initValues)] == 2} { + $w set [expr {[lindex $Priv(initValues) 0] + $delta}] \ + [expr {[lindex $Priv(initValues) 1] + $delta}] + } else { + set delta [expr {round($delta * [lindex $Priv(initValues) 0])}] + eval [list $w] set [lreplace $Priv(initValues) 2 3 \ + [expr {[lindex $Priv(initValues) 2] + $delta}] \ + [expr {[lindex $Priv(initValues) 3] + $delta}]] + } + } else { + ScrollToPos $w [expr {$Priv(initPos) + $delta}] + } +} + +# ::tk::ScrollEndDrag -- +# This procedure is called to end an interactive drag of the slider. +# It scrolls the window if we're in jump mode, otherwise it does nothing. +# +# Arguments: +# w - The scrollbar widget. +# x, y - The mouse position at the end of the drag operation. + +proc ::tk::ScrollEndDrag {w x y} { + variable ::tk::Priv + + if {$Priv(initPos) eq ""} { + return + } + if {[$w cget -jump]} { + set delta [$w delta [expr {$x - $Priv(pressX)}] \ + [expr {$y - $Priv(pressY)}]] + ScrollToPos $w [expr {$Priv(initPos) + $delta}] + } + set Priv(initPos) "" +} + +# ::tk::ScrollByUnits -- +# This procedure tells the scrollbar's associated widget to scroll up +# or down by a given number of units. It notifies the associated widget +# in different ways for old and new command syntaxes. +# +# Arguments: +# w - The scrollbar widget. +# orient - Which kinds of scrollbars this applies to: "h" for +# horizontal, "v" for vertical, "hv" for both. +# amount - How many units to scroll: typically 1 or -1. + +proc ::tk::ScrollByUnits {w orient amount} { + set cmd [$w cget -command] + if {$cmd eq "" || ([string first \ + [string index [$w cget -orient] 0] $orient] < 0)} { + return + } + set info [$w get] + if {[llength $info] == 2} { + uplevel #0 $cmd scroll $amount units + } else { + uplevel #0 $cmd [expr {[lindex $info 2] + $amount}] + } +} + +# ::tk::ScrollByPages -- +# This procedure tells the scrollbar's associated widget to scroll up +# or down by a given number of screenfuls. It notifies the associated +# widget in different ways for old and new command syntaxes. +# +# Arguments: +# w - The scrollbar widget. +# orient - Which kinds of scrollbars this applies to: "h" for +# horizontal, "v" for vertical, "hv" for both. +# amount - How many screens to scroll: typically 1 or -1. + +proc ::tk::ScrollByPages {w orient amount} { + set cmd [$w cget -command] + if {$cmd eq "" || ([string first \ + [string index [$w cget -orient] 0] $orient] < 0)} { + return + } + set info [$w get] + if {[llength $info] == 2} { + uplevel #0 $cmd scroll $amount pages + } else { + uplevel #0 $cmd [expr {[lindex $info 2] + $amount*([lindex $info 1] - 1)}] + } +} + +# ::tk::ScrollToPos -- +# This procedure tells the scrollbar's associated widget to scroll to +# a particular location, given by a fraction between 0 and 1. It notifies +# the associated widget in different ways for old and new command syntaxes. +# +# Arguments: +# w - The scrollbar widget. +# pos - A fraction between 0 and 1 indicating a desired position +# in the document. + +proc ::tk::ScrollToPos {w pos} { + set cmd [$w cget -command] + if {$cmd eq ""} { + return + } + set info [$w get] + if {[llength $info] == 2} { + uplevel #0 $cmd moveto $pos + } else { + uplevel #0 $cmd [expr {round([lindex $info 0]*$pos)}] + } +} + +# ::tk::ScrollTopBottom +# Scroll to the top or bottom of the document, depending on the mouse +# position. +# +# Arguments: +# w - The scrollbar widget. +# x, y - Mouse coordinates within the widget. + +proc ::tk::ScrollTopBottom {w x y} { + variable ::tk::Priv + set element [$w identify $x $y] + if {[string match *1 $element]} { + ScrollToPos $w 0 + } elseif {[string match *2 $element]} { + ScrollToPos $w 1 + } + + # Set Priv(relief), since it's needed by tk::ScrollButtonUp. + + set Priv(relief) [$w cget -activerelief] +} + +# ::tk::ScrollButton2Down +# This procedure is invoked when button 2 is pressed over a scrollbar. +# If the button is over the trough or slider, it sets the scrollbar to +# the mouse position and starts a slider drag. Otherwise it just +# behaves the same as button 1. +# +# Arguments: +# w - The scrollbar widget. +# x, y - Mouse coordinates within the widget. + +proc ::tk::ScrollButton2Down {w x y} { + variable ::tk::Priv + set element [$w identify $x $y] + if {[string match {arrow[12]} $element]} { + ScrollButtonDown $w $x $y + return + } + ScrollToPos $w [$w fraction $x $y] + set Priv(relief) [$w cget -activerelief] + + # Need the "update idletasks" below so that the widget calls us + # back to reset the actual scrollbar position before we start the + # slider drag. + + update idletasks + $w configure -activerelief sunken + $w activate slider + ScrollStartDrag $w $x $y +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tk/spinbox.tcl b/extensions/fablabchemnitz/inkstitch/bin/tk/spinbox.tcl new file mode 100644 index 00000000..cb501eee --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tk/spinbox.tcl @@ -0,0 +1,572 @@ +# spinbox.tcl -- +# +# This file defines the default bindings for Tk spinbox widgets and provides +# procedures that help in implementing those bindings. The spinbox builds +# off the entry widget, so it can reuse Entry bindings and procedures. +# +# Copyright (c) 1992-1994 The Regents of the University of California. +# Copyright (c) 1994-1997 Sun Microsystems, Inc. +# Copyright (c) 1999-2000 Jeffrey Hobbs +# Copyright (c) 2000 Ajuba Solutions +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. +# + +#------------------------------------------------------------------------- +# Elements of tk::Priv that are used in this file: +# +# afterId - If non-null, it means that auto-scanning is underway +# and it gives the "after" id for the next auto-scan +# command to be executed. +# mouseMoved - Non-zero means the mouse has moved a significant +# amount since the button went down (so, for example, +# start dragging out a selection). +# pressX - X-coordinate at which the mouse button was pressed. +# selectMode - The style of selection currently underway: +# char, word, or line. +# x, y - Last known mouse coordinates for scanning +# and auto-scanning. +# data - Used for Cut and Copy +#------------------------------------------------------------------------- + +# Initialize namespace +namespace eval ::tk::spinbox {} + +#------------------------------------------------------------------------- +# The code below creates the default class bindings for entries. +#------------------------------------------------------------------------- +bind Spinbox <> { + if {![catch {::tk::spinbox::GetSelection %W} tk::Priv(data)]} { + clipboard clear -displayof %W + clipboard append -displayof %W $tk::Priv(data) + %W delete sel.first sel.last + unset tk::Priv(data) + } +} +bind Spinbox <> { + if {![catch {::tk::spinbox::GetSelection %W} tk::Priv(data)]} { + clipboard clear -displayof %W + clipboard append -displayof %W $tk::Priv(data) + unset tk::Priv(data) + } +} +bind Spinbox <> { + global tcl_platform + catch { + if {[tk windowingsystem] ne "x11"} { + catch { + %W delete sel.first sel.last + } + } + %W insert insert [::tk::GetSelection %W CLIPBOARD] + ::tk::EntrySeeInsert %W + } +} +bind Spinbox <> { + %W delete sel.first sel.last +} +bind Spinbox <> { + if {$tk_strictMotif || ![info exists tk::Priv(mouseMoved)] + || !$tk::Priv(mouseMoved)} { + ::tk::spinbox::Paste %W %x + } +} + +bind Spinbox <> { + %W selection range 0 end + %W icursor end +} + +# Standard Motif bindings: + +bind Spinbox <1> { + ::tk::spinbox::ButtonDown %W %x %y +} +bind Spinbox { + ::tk::spinbox::Motion %W %x %y +} +bind Spinbox { + set tk::Priv(selectMode) word + ::tk::spinbox::MouseSelect %W %x sel.first +} +bind Spinbox { + set tk::Priv(selectMode) line + ::tk::spinbox::MouseSelect %W %x 0 +} +bind Spinbox { + set tk::Priv(selectMode) char + %W selection adjust @%x +} +bind Spinbox { + set tk::Priv(selectMode) word + ::tk::spinbox::MouseSelect %W %x +} +bind Spinbox { + set tk::Priv(selectMode) line + ::tk::spinbox::MouseSelect %W %x +} +bind Spinbox { + set tk::Priv(x) %x + ::tk::spinbox::AutoScan %W +} +bind Spinbox { + tk::CancelRepeat +} +bind Spinbox { + ::tk::spinbox::ButtonUp %W %x %y +} +bind Spinbox { + %W icursor @%x +} + +bind Spinbox { + %W invoke buttonup +} +bind Spinbox { + %W invoke buttondown +} + +bind Spinbox { + ::tk::EntrySetCursor %W [expr {[%W index insert] - 1}] +} +bind Spinbox { + ::tk::EntrySetCursor %W [expr {[%W index insert] + 1}] +} +bind Spinbox { + ::tk::EntryKeySelect %W [expr {[%W index insert] - 1}] + ::tk::EntrySeeInsert %W +} +bind Spinbox { + ::tk::EntryKeySelect %W [expr {[%W index insert] + 1}] + ::tk::EntrySeeInsert %W +} +bind Spinbox { + ::tk::EntrySetCursor %W [::tk::EntryPreviousWord %W insert] +} +bind Spinbox { + ::tk::EntrySetCursor %W [::tk::EntryNextWord %W insert] +} +bind Spinbox { + ::tk::EntryKeySelect %W [::tk::EntryPreviousWord %W insert] + ::tk::EntrySeeInsert %W +} +bind Spinbox { + ::tk::EntryKeySelect %W [::tk::EntryNextWord %W insert] + ::tk::EntrySeeInsert %W +} +bind Spinbox { + ::tk::EntrySetCursor %W 0 +} +bind Spinbox { + ::tk::EntryKeySelect %W 0 + ::tk::EntrySeeInsert %W +} +bind Spinbox { + ::tk::EntrySetCursor %W end +} +bind Spinbox { + ::tk::EntryKeySelect %W end + ::tk::EntrySeeInsert %W +} + +bind Spinbox { + if {[%W selection present]} { + %W delete sel.first sel.last + } else { + %W delete insert + } +} +bind Spinbox { + ::tk::EntryBackspace %W +} + +bind Spinbox { + %W selection from insert +} +bind Spinbox { + %W mark set [tk::TextAnchor %W] insert +} +bind Text { + set tk::Priv(selectMode) char + tk::TextKeyExtend %W insert +} +bind Text { + set tk::Priv(selectMode) char + tk::TextKeyExtend %W insert +} +bind Text { + %W tag add sel 1.0 end +} +bind Text { + %W tag remove sel 1.0 end + # An operation that clears the selection must insert an autoseparator, + # because the selection operation may have moved the insert mark + if {[%W cget -autoseparators]} { + %W edit separator + } +} +bind Text <> { + tk_textCut %W +} +bind Text <> { + tk_textCopy %W +} +bind Text <> { + tk_textPaste %W +} +bind Text <> { + # Make <> an atomic operation on the Undo stack, + # i.e. separate it from other delete operations on either side + if {[%W cget -autoseparators]} { + %W edit separator + } + catch {%W delete sel.first sel.last} + if {[%W cget -autoseparators]} { + %W edit separator + } +} +bind Text <> { + if {$tk_strictMotif || ![info exists tk::Priv(mouseMoved)] + || !$tk::Priv(mouseMoved)} { + tk::TextPasteSelection %W %x %y + } +} +bind Text { + catch {tk::TextInsert %W [::tk::GetSelection %W PRIMARY]} +} +bind Text { + tk::TextInsert %W %A +} + +# Ignore all Alt, Meta, and Control keypresses unless explicitly bound. +# Otherwise, if a widget binding for one of these is defined, the +# class binding will also fire and insert the character, +# which is wrong. Ditto for . + +bind Text {# nothing } +bind Text {# nothing} +bind Text {# nothing} +bind Text {# nothing} +bind Text {# nothing} +if {[tk windowingsystem] eq "aqua"} { + bind Text {# nothing} +} + +# Additional emacs-like bindings: + +bind Text { + if {!$tk_strictMotif} { + tk::TextSetCursor %W {insert display linestart} + } +} +bind Text { + if {!$tk_strictMotif} { + tk::TextSetCursor %W insert-1displayindices + } +} +bind Text { + if {!$tk_strictMotif && [%W compare end != insert+1c]} { + %W delete insert + } +} +bind Text { + if {!$tk_strictMotif} { + tk::TextSetCursor %W {insert display lineend} + } +} +bind Text { + if {!$tk_strictMotif} { + tk::TextSetCursor %W insert+1displayindices + } +} +bind Text { + if {!$tk_strictMotif && [%W compare end != insert+1c]} { + if {[%W compare insert == {insert lineend}]} { + %W delete insert + } else { + %W delete insert {insert lineend} + } + } +} +bind Text { + if {!$tk_strictMotif} { + tk::TextSetCursor %W [tk::TextUpDownLine %W 1] + } +} +bind Text { + if {!$tk_strictMotif} { + %W insert insert \n + %W mark set insert insert-1c + } +} +bind Text { + if {!$tk_strictMotif} { + tk::TextSetCursor %W [tk::TextUpDownLine %W -1] + } +} +bind Text { + if {!$tk_strictMotif} { + tk::TextTranspose %W + } +} + +bind Text <> { + # An Undo operation may remove the separator at the top of the Undo stack. + # Then the item at the top of the stack gets merged with the subsequent changes. + # Place separators before and after Undo to prevent this. + if {[%W cget -autoseparators]} { + %W edit separator + } + catch { %W edit undo } + if {[%W cget -autoseparators]} { + %W edit separator + } +} + +bind Text <> { + catch { %W edit redo } +} + +bind Text { + if {!$tk_strictMotif} { + tk::TextSetCursor %W [tk::TextPrevPos %W insert tcl_startOfPreviousWord] + } +} +bind Text { + if {!$tk_strictMotif && [%W compare end != insert+1c]} { + %W delete insert [tk::TextNextWord %W insert] + } +} +bind Text { + if {!$tk_strictMotif} { + tk::TextSetCursor %W [tk::TextNextWord %W insert] + } +} +bind Text { + if {!$tk_strictMotif} { + tk::TextSetCursor %W 1.0 + } +} +bind Text { + if {!$tk_strictMotif} { + tk::TextSetCursor %W end-1c + } +} +bind Text { + if {!$tk_strictMotif} { + %W delete [tk::TextPrevPos %W insert tcl_startOfPreviousWord] insert + } +} +bind Text { + if {!$tk_strictMotif} { + %W delete [tk::TextPrevPos %W insert tcl_startOfPreviousWord] insert + } +} + +# Macintosh only bindings: + +if {[tk windowingsystem] eq "aqua"} { +bind Text { + tk::TextSetCursor %W [tk::TextPrevPos %W insert tcl_startOfPreviousWord] +} +bind Text { + tk::TextSetCursor %W [tk::TextNextWord %W insert] +} +bind Text { + tk::TextSetCursor %W [tk::TextPrevPara %W insert] +} +bind Text { + tk::TextSetCursor %W [tk::TextNextPara %W insert] +} +bind Text { + tk::TextKeySelect %W [tk::TextPrevPos %W insert tcl_startOfPreviousWord] +} +bind Text { + tk::TextKeySelect %W [tk::TextNextWord %W insert] +} +bind Text { + tk::TextKeySelect %W [tk::TextPrevPara %W insert] +} +bind Text { + tk::TextKeySelect %W [tk::TextNextPara %W insert] +} +bind Text { + tk::TextScrollPages %W 1 +} + +# End of Mac only bindings +} + +# A few additional bindings of my own. + +bind Text { + if {!$tk_strictMotif && [%W compare insert != 1.0]} { + %W delete insert-1c + %W see insert + } +} +bind Text <2> { + if {!$tk_strictMotif} { + tk::TextScanMark %W %x %y + } +} +bind Text { + if {!$tk_strictMotif} { + tk::TextScanDrag %W %x %y + } +} +set ::tk::Priv(prevPos) {} + +# The MouseWheel will typically only fire on Windows and MacOS X. +# However, someone could use the "event generate" command to produce one +# on other platforms. We must be careful not to round -ve values of %D +# down to zero. + +if {[tk windowingsystem] eq "aqua"} { + bind Text { + %W yview scroll [expr {-15 * (%D)}] pixels + } + bind Text { + %W yview scroll [expr {-150 * (%D)}] pixels + } + bind Text { + %W xview scroll [expr {-15 * (%D)}] pixels + } + bind Text { + %W xview scroll [expr {-150 * (%D)}] pixels + } +} else { + # We must make sure that positive and negative movements are rounded + # equally to integers, avoiding the problem that + # (int)1/3 = 0, + # but + # (int)-1/3 = -1 + # The following code ensure equal +/- behaviour. + bind Text { + if {%D >= 0} { + %W yview scroll [expr {-%D/3}] pixels + } else { + %W yview scroll [expr {(2-%D)/3}] pixels + } + } +} + +if {"x11" eq [tk windowingsystem]} { + # Support for mousewheels on Linux/Unix commonly comes through mapping + # the wheel to the extended buttons. If you have a mousewheel, find + # Linux configuration info at: + # http://www.inria.fr/koala/colas/mouse-wheel-scroll/ + bind Text <4> { + if {!$tk_strictMotif} { + %W yview scroll -50 pixels + } + } + bind Text <5> { + if {!$tk_strictMotif} { + %W yview scroll 50 pixels + } + } +} + +# ::tk::TextClosestGap -- +# Given x and y coordinates, this procedure finds the closest boundary +# between characters to the given coordinates and returns the index +# of the character just after the boundary. +# +# Arguments: +# w - The text window. +# x - X-coordinate within the window. +# y - Y-coordinate within the window. + +proc ::tk::TextClosestGap {w x y} { + set pos [$w index @$x,$y] + set bbox [$w bbox $pos] + if {$bbox eq ""} { + return $pos + } + if {($x - [lindex $bbox 0]) < ([lindex $bbox 2]/2)} { + return $pos + } + $w index "$pos + 1 char" +} + +# ::tk::TextButton1 -- +# This procedure is invoked to handle button-1 presses in text +# widgets. It moves the insertion cursor, sets the selection anchor, +# and claims the input focus. +# +# Arguments: +# w - The text window in which the button was pressed. +# x - The x-coordinate of the button press. +# y - The x-coordinate of the button press. + +proc ::tk::TextButton1 {w x y} { + variable ::tk::Priv + + set Priv(selectMode) char + set Priv(mouseMoved) 0 + set Priv(pressX) $x + set anchorname [tk::TextAnchor $w] + $w mark set insert [TextClosestGap $w $x $y] + $w mark set $anchorname insert + # Set the anchor mark's gravity depending on the click position + # relative to the gap + set bbox [$w bbox [$w index $anchorname]] + if {$x > [lindex $bbox 0]} { + $w mark gravity $anchorname right + } else { + $w mark gravity $anchorname left + } + # Allow focus in any case on Windows, because that will let the + # selection be displayed even for state disabled text widgets. + if {[tk windowingsystem] eq "win32" \ + || [$w cget -state] eq "normal"} { + focus $w + } + if {[$w cget -autoseparators]} { + $w edit separator + } +} + +# ::tk::TextSelectTo -- +# This procedure is invoked to extend the selection, typically when +# dragging it with the mouse. Depending on the selection mode (character, +# word, line) it selects in different-sized units. This procedure +# ignores mouse motions initially until the mouse has moved from +# one character to another or until there have been multiple clicks. +# +# Note that the 'anchor' is implemented programmatically using +# a text widget mark, and uses a name that will be unique for each +# text widget (even when there are multiple peers). Currently the +# anchor is considered private to Tk, hence the name 'tk::anchor$w'. +# +# Arguments: +# w - The text window in which the button was pressed. +# x - Mouse x position. +# y - Mouse y position. + +set ::tk::Priv(textanchoruid) 0 + +proc ::tk::TextAnchor {w} { + variable Priv + if {![info exists Priv(textanchor,$w)]} { + set Priv(textanchor,$w) tk::anchor[incr Priv(textanchoruid)] + } + return $Priv(textanchor,$w) +} + +proc ::tk::TextSelectTo {w x y {extend 0}} { + global tcl_platform + variable ::tk::Priv + + set anchorname [tk::TextAnchor $w] + set cur [TextClosestGap $w $x $y] + if {[catch {$w index $anchorname}]} { + $w mark set $anchorname $cur + } + set anchor [$w index $anchorname] + if {[$w compare $cur != $anchor] || (abs($Priv(pressX) - $x) >= 3)} { + set Priv(mouseMoved) 1 + } + switch -- $Priv(selectMode) { + char { + if {[$w compare $cur < $anchorname]} { + set first $cur + set last $anchorname + } else { + set first $anchorname + set last $cur + } + } + word { + # Set initial range based only on the anchor (1 char min width) + if {[$w mark gravity $anchorname] eq "right"} { + set first $anchorname + set last "$anchorname + 1c" + } else { + set first "$anchorname - 1c" + set last $anchorname + } + # Extend range (if necessary) based on the current point + if {[$w compare $cur < $first]} { + set first $cur + } elseif {[$w compare $cur > $last]} { + set last $cur + } + + # Now find word boundaries + set first [TextPrevPos $w "$first + 1c" tcl_wordBreakBefore] + set last [TextNextPos $w "$last - 1c" tcl_wordBreakAfter] + } + line { + # Set initial range based only on the anchor + set first "$anchorname linestart" + set last "$anchorname lineend" + + # Extend range (if necessary) based on the current point + if {[$w compare $cur < $first]} { + set first "$cur linestart" + } elseif {[$w compare $cur > $last]} { + set last "$cur lineend" + } + set first [$w index $first] + set last [$w index "$last + 1c"] + } + } + if {$Priv(mouseMoved) || ($Priv(selectMode) ne "char")} { + $w tag remove sel 0.0 end + $w mark set insert $cur + $w tag add sel $first $last + $w tag remove sel $last end + update idletasks + } +} + +# ::tk::TextKeyExtend -- +# This procedure handles extending the selection from the keyboard, +# where the point to extend to is really the boundary between two +# characters rather than a particular character. +# +# Arguments: +# w - The text window. +# index - The point to which the selection is to be extended. + +proc ::tk::TextKeyExtend {w index} { + + set anchorname [tk::TextAnchor $w] + set cur [$w index $index] + if {[catch {$w index $anchorname}]} { + $w mark set $anchorname $cur + } + set anchor [$w index $anchorname] + if {[$w compare $cur < $anchorname]} { + set first $cur + set last $anchorname + } else { + set first $anchorname + set last $cur + } + $w tag remove sel 0.0 $first + $w tag add sel $first $last + $w tag remove sel $last end +} + +# ::tk::TextPasteSelection -- +# This procedure sets the insertion cursor to the mouse position, +# inserts the selection, and sets the focus to the window. +# +# Arguments: +# w - The text window. +# x, y - Position of the mouse. + +proc ::tk::TextPasteSelection {w x y} { + $w mark set insert [TextClosestGap $w $x $y] + if {![catch {::tk::GetSelection $w PRIMARY} sel]} { + set oldSeparator [$w cget -autoseparators] + if {$oldSeparator} { + $w configure -autoseparators 0 + $w edit separator + } + $w insert insert $sel + if {$oldSeparator} { + $w edit separator + $w configure -autoseparators 1 + } + } + if {[$w cget -state] eq "normal"} { + focus $w + } +} + +# ::tk::TextAutoScan -- +# This procedure is invoked when the mouse leaves a text window +# with button 1 down. It scrolls the window up, down, left, or right, +# depending on where the mouse is (this information was saved in +# ::tk::Priv(x) and ::tk::Priv(y)), and reschedules itself as an "after" +# command so that the window continues to scroll until the mouse +# moves back into the window or the mouse button is released. +# +# Arguments: +# w - The text window. + +proc ::tk::TextAutoScan {w} { + variable ::tk::Priv + if {![winfo exists $w]} { + return + } + if {$Priv(y) >= [winfo height $w]} { + $w yview scroll [expr {1 + $Priv(y) - [winfo height $w]}] pixels + } elseif {$Priv(y) < 0} { + $w yview scroll [expr {-1 + $Priv(y)}] pixels + } elseif {$Priv(x) >= [winfo width $w]} { + $w xview scroll 2 units + } elseif {$Priv(x) < 0} { + $w xview scroll -2 units + } else { + return + } + TextSelectTo $w $Priv(x) $Priv(y) + set Priv(afterId) [after 50 [list tk::TextAutoScan $w]] +} + +# ::tk::TextSetCursor +# Move the insertion cursor to a given position in a text. Also +# clears the selection, if there is one in the text, and makes sure +# that the insertion cursor is visible. Also, don't let the insertion +# cursor appear on the dummy last line of the text. +# +# Arguments: +# w - The text window. +# pos - The desired new position for the cursor in the window. + +proc ::tk::TextSetCursor {w pos} { + if {[$w compare $pos == end]} { + set pos {end - 1 chars} + } + $w mark set insert $pos + $w tag remove sel 1.0 end + $w see insert + if {[$w cget -autoseparators]} { + $w edit separator + } +} + +# ::tk::TextKeySelect +# This procedure is invoked when stroking out selections using the +# keyboard. It moves the cursor to a new position, then extends +# the selection to that position. +# +# Arguments: +# w - The text window. +# new - A new position for the insertion cursor (the cursor hasn't +# actually been moved to this position yet). + +proc ::tk::TextKeySelect {w new} { + set anchorname [tk::TextAnchor $w] + if {[$w tag nextrange sel 1.0 end] eq ""} { + if {[$w compare $new < insert]} { + $w tag add sel $new insert + } else { + $w tag add sel insert $new + } + $w mark set $anchorname insert + } else { + if {[$w compare $new < $anchorname]} { + set first $new + set last $anchorname + } else { + set first $anchorname + set last $new + } + $w tag remove sel 1.0 $first + $w tag add sel $first $last + $w tag remove sel $last end + } + $w mark set insert $new + $w see insert + update idletasks +} + +# ::tk::TextResetAnchor -- +# Set the selection anchor to whichever end is farthest from the +# index argument. One special trick: if the selection has two or +# fewer characters, just leave the anchor where it is. In this +# case it doesn't matter which point gets chosen for the anchor, +# and for the things like Shift-Left and Shift-Right this produces +# better behavior when the cursor moves back and forth across the +# anchor. +# +# Arguments: +# w - The text widget. +# index - Position at which mouse button was pressed, which determines +# which end of selection should be used as anchor point. + +proc ::tk::TextResetAnchor {w index} { + if {[$w tag ranges sel] eq ""} { + # Don't move the anchor if there is no selection now; this + # makes the widget behave "correctly" when the user clicks + # once, then shift-clicks somewhere -- ie, the area between + # the two clicks will be selected. [Bug: 5929]. + return + } + set anchorname [tk::TextAnchor $w] + set a [$w index $index] + set b [$w index sel.first] + set c [$w index sel.last] + if {[$w compare $a < $b]} { + $w mark set $anchorname sel.last + return + } + if {[$w compare $a > $c]} { + $w mark set $anchorname sel.first + return + } + scan $a "%d.%d" lineA chA + scan $b "%d.%d" lineB chB + scan $c "%d.%d" lineC chC + if {$lineB < $lineC+2} { + set total [string length [$w get $b $c]] + if {$total <= 2} { + return + } + if {[string length [$w get $b $a]] < ($total/2)} { + $w mark set $anchorname sel.last + } else { + $w mark set $anchorname sel.first + } + return + } + if {($lineA-$lineB) < ($lineC-$lineA)} { + $w mark set $anchorname sel.last + } else { + $w mark set $anchorname sel.first + } +} + +# ::tk::TextCursorInSelection -- +# Check whether the selection exists and contains the insertion cursor. Note +# that it assumes that the selection is contiguous. +# +# Arguments: +# w - The text widget whose selection is to be checked + +proc ::tk::TextCursorInSelection {w} { + expr { + [llength [$w tag ranges sel]] + && [$w compare sel.first <= insert] + && [$w compare sel.last >= insert] + } +} + +# ::tk::TextInsert -- +# Insert a string into a text at the point of the insertion cursor. +# If there is a selection in the text, and it covers the point of the +# insertion cursor, then delete the selection before inserting. +# +# Arguments: +# w - The text window in which to insert the string +# s - The string to insert (usually just a single character) + +proc ::tk::TextInsert {w s} { + if {$s eq "" || [$w cget -state] eq "disabled"} { + return + } + set compound 0 + if {[TextCursorInSelection $w]} { + set compound [$w cget -autoseparators] + if {$compound} { + $w configure -autoseparators 0 + $w edit separator + } + $w delete sel.first sel.last + } + $w insert insert $s + $w see insert + if {$compound} { + $w edit separator + $w configure -autoseparators 1 + } +} + +# ::tk::TextUpDownLine -- +# Returns the index of the character one display line above or below the +# insertion cursor. There are two tricky things here. First, we want to +# maintain the original x position across repeated operations, even though +# some lines that will get passed through don't have enough characters to +# cover the original column. Second, don't try to scroll past the +# beginning or end of the text. +# +# Arguments: +# w - The text window in which the cursor is to move. +# n - The number of display lines to move: -1 for up one line, +# +1 for down one line. + +proc ::tk::TextUpDownLine {w n} { + variable ::tk::Priv + + set i [$w index insert] + if {$Priv(prevPos) ne $i} { + set Priv(textPosOrig) $i + } + set lines [$w count -displaylines $Priv(textPosOrig) $i] + set new [$w index \ + "$Priv(textPosOrig) + [expr {$lines + $n}] displaylines"] + if {[$w compare $new == end] \ + || [$w compare $new == "insert display linestart"]} { + set new $i + } + set Priv(prevPos) $new + return $new +} + +# ::tk::TextPrevPara -- +# Returns the index of the beginning of the paragraph just before a given +# position in the text (the beginning of a paragraph is the first non-blank +# character after a blank line). +# +# Arguments: +# w - The text window in which the cursor is to move. +# pos - Position at which to start search. + +proc ::tk::TextPrevPara {w pos} { + set pos [$w index "$pos linestart"] + while {1} { + if {([$w get "$pos - 1 line"] eq "\n" && ([$w get $pos] ne "\n")) \ + || $pos eq "1.0"} { + if {[regexp -indices -- {^[ \t]+(.)} \ + [$w get $pos "$pos lineend"] -> index]} { + set pos [$w index "$pos + [lindex $index 0] chars"] + } + if {[$w compare $pos != insert] || [lindex [split $pos .] 0]==1} { + return $pos + } + } + set pos [$w index "$pos - 1 line"] + } +} + +# ::tk::TextNextPara -- +# Returns the index of the beginning of the paragraph just after a given +# position in the text (the beginning of a paragraph is the first non-blank +# character after a blank line). +# +# Arguments: +# w - The text window in which the cursor is to move. +# start - Position at which to start search. + +proc ::tk::TextNextPara {w start} { + set pos [$w index "$start linestart + 1 line"] + while {[$w get $pos] ne "\n"} { + if {[$w compare $pos == end]} { + return [$w index "end - 1c"] + } + set pos [$w index "$pos + 1 line"] + } + while {[$w get $pos] eq "\n"} { + set pos [$w index "$pos + 1 line"] + if {[$w compare $pos == end]} { + return [$w index "end - 1c"] + } + } + if {[regexp -indices -- {^[ \t]+(.)} \ + [$w get $pos "$pos lineend"] -> index]} { + return [$w index "$pos + [lindex $index 0] chars"] + } + return $pos +} + +# ::tk::TextScrollPages -- +# This is a utility procedure used in bindings for moving up and down +# pages and possibly extending the selection along the way. It scrolls +# the view in the widget by the number of pages, and it returns the +# index of the character that is at the same position in the new view +# as the insertion cursor used to be in the old view. +# +# Arguments: +# w - The text window in which the cursor is to move. +# count - Number of pages forward to scroll; may be negative +# to scroll backwards. + +proc ::tk::TextScrollPages {w count} { + set bbox [$w bbox insert] + $w yview scroll $count pages + if {$bbox eq ""} { + return [$w index @[expr {[winfo height $w]/2}],0] + } + return [$w index @[lindex $bbox 0],[lindex $bbox 1]] +} + +# ::tk::TextTranspose -- +# This procedure implements the "transpose" function for text widgets. +# It tranposes the characters on either side of the insertion cursor, +# unless the cursor is at the end of the line. In this case it +# transposes the two characters to the left of the cursor. In either +# case, the cursor ends up to the right of the transposed characters. +# +# Arguments: +# w - Text window in which to transpose. + +proc ::tk::TextTranspose w { + set pos insert + if {[$w compare $pos != "$pos lineend"]} { + set pos [$w index "$pos + 1 char"] + } + set new [$w get "$pos - 1 char"][$w get "$pos - 2 char"] + if {[$w compare "$pos - 1 char" == 1.0]} { + return + } + # ensure this is seen as an atomic op to undo + set autosep [$w cget -autoseparators] + if {$autosep} { + $w configure -autoseparators 0 + $w edit separator + } + $w delete "$pos - 2 char" $pos + $w insert insert $new + $w see insert + if {$autosep} { + $w edit separator + $w configure -autoseparators $autosep + } +} + +# ::tk_textCopy -- +# This procedure copies the selection from a text widget into the +# clipboard. +# +# Arguments: +# w - Name of a text widget. + +proc ::tk_textCopy w { + if {![catch {set data [$w get sel.first sel.last]}]} { + clipboard clear -displayof $w + clipboard append -displayof $w $data + } +} + +# ::tk_textCut -- +# This procedure copies the selection from a text widget into the +# clipboard, then deletes the selection (if it exists in the given +# widget). +# +# Arguments: +# w - Name of a text widget. + +proc ::tk_textCut w { + if {![catch {set data [$w get sel.first sel.last]}]} { + # make <> an atomic operation on the Undo stack, + # i.e. separate it from other delete operations on either side + set oldSeparator [$w cget -autoseparators] + if {$oldSeparator} { + $w edit separator + } + clipboard clear -displayof $w + clipboard append -displayof $w $data + $w delete sel.first sel.last + if {$oldSeparator} { + $w edit separator + } + } +} + +# ::tk_textPaste -- +# This procedure pastes the contents of the clipboard to the insertion +# point in a text widget. +# +# Arguments: +# w - Name of a text widget. + +proc ::tk_textPaste w { + global tcl_platform + if {![catch {::tk::GetSelection $w CLIPBOARD} sel]} { + set oldSeparator [$w cget -autoseparators] + if {$oldSeparator} { + $w configure -autoseparators 0 + $w edit separator + } + if {[tk windowingsystem] ne "x11"} { + catch { $w delete sel.first sel.last } + } + $w insert insert $sel + if {$oldSeparator} { + $w edit separator + $w configure -autoseparators 1 + } + } +} + +# ::tk::TextNextWord -- +# Returns the index of the next word position after a given position in the +# text. The next word is platform dependent and may be either the next +# end-of-word position or the next start-of-word position after the next +# end-of-word position. +# +# Arguments: +# w - The text window in which the cursor is to move. +# start - Position at which to start search. + +if {[tk windowingsystem] eq "win32"} { + proc ::tk::TextNextWord {w start} { + TextNextPos $w [TextNextPos $w $start tcl_endOfWord] \ + tcl_startOfNextWord + } +} else { + proc ::tk::TextNextWord {w start} { + TextNextPos $w $start tcl_endOfWord + } +} + +# ::tk::TextNextPos -- +# Returns the index of the next position after the given starting +# position in the text as computed by a specified function. +# +# Arguments: +# w - The text window in which the cursor is to move. +# start - Position at which to start search. +# op - Function to use to find next position. + +proc ::tk::TextNextPos {w start op} { + set text "" + set cur $start + while {[$w compare $cur < end]} { + set text $text[$w get -displaychars $cur "$cur lineend + 1c"] + set pos [$op $text 0] + if {$pos >= 0} { + return [$w index "$start + $pos display chars"] + } + set cur [$w index "$cur lineend +1c"] + } + return end +} + +# ::tk::TextPrevPos -- +# Returns the index of the previous position before the given starting +# position in the text as computed by a specified function. +# +# Arguments: +# w - The text window in which the cursor is to move. +# start - Position at which to start search. +# op - Function to use to find next position. + +proc ::tk::TextPrevPos {w start op} { + set text "" + set cur $start + while {[$w compare $cur > 0.0]} { + set text [$w get -displaychars "$cur linestart - 1c" $cur]$text + set pos [$op $text end] + if {$pos >= 0} { + return [$w index "$cur linestart - 1c + $pos display chars"] + } + set cur [$w index "$cur linestart - 1c"] + } + return 0.0 +} + +# ::tk::TextScanMark -- +# +# Marks the start of a possible scan drag operation +# +# Arguments: +# w - The text window from which the text to get +# x - x location on screen +# y - y location on screen + +proc ::tk::TextScanMark {w x y} { + variable ::tk::Priv + $w scan mark $x $y + set Priv(x) $x + set Priv(y) $y + set Priv(mouseMoved) 0 +} + +# ::tk::TextScanDrag -- +# +# Marks the start of a possible scan drag operation +# +# Arguments: +# w - The text window from which the text to get +# x - x location on screen +# y - y location on screen + +proc ::tk::TextScanDrag {w x y} { + variable ::tk::Priv + # Make sure these exist, as some weird situations can trigger the + # motion binding without the initial press. [Bug #220269] + if {![info exists Priv(x)]} { + set Priv(x) $x + } + if {![info exists Priv(y)]} { + set Priv(y) $y + } + if {($x != $Priv(x)) || ($y != $Priv(y))} { + set Priv(mouseMoved) 1 + } + if {[info exists Priv(mouseMoved)] && $Priv(mouseMoved)} { + $w scan dragto $x $y + } +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tk/tk.tcl b/extensions/fablabchemnitz/inkstitch/bin/tk/tk.tcl new file mode 100644 index 00000000..b9713293 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tk/tk.tcl @@ -0,0 +1,591 @@ +# tk.tcl -- +# +# Initialization script normally executed in the interpreter for each Tk-based +# application. Arranges class bindings for widgets. +# +# Copyright (c) 1992-1994 The Regents of the University of California. +# Copyright (c) 1994-1996 Sun Microsystems, Inc. +# Copyright (c) 1998-2000 Ajuba Solutions. +# +# See the file "license.terms" for information on usage and redistribution of +# this file, and for a DISCLAIMER OF ALL WARRANTIES. + +package require Tcl 8.5 ;# Guard against [source] in an 8.4- interp before + ;# using 8.5 [package] features. +# Insist on running with compatible version of Tcl +package require Tcl 8.5.0 +# Verify that we have Tk binary and script components from the same release +package require -exact Tk 8.5.19 + +# Create a ::tk namespace +namespace eval ::tk { + # Set up the msgcat commands + namespace eval msgcat { + namespace export mc mcmax + if {[interp issafe] || [catch {package require msgcat}]} { + # The msgcat package is not available. Supply our own minimal + # replacement. + proc mc {src args} { + return [format $src {*}$args] + } + proc mcmax {args} { + set max 0 + foreach string $args { + set len [string length $string] + if {$len>$max} { + set max $len + } + } + return $max + } + } else { + # Get the commands from the msgcat package that Tk uses. + namespace import ::msgcat::mc + namespace import ::msgcat::mcmax + ::msgcat::mcload [file join $::tk_library msgs] + } + } + namespace import ::tk::msgcat::* +} +# and a ::ttk namespace +namespace eval ::ttk { + if {$::tk_library ne ""} { + # avoid file join to work in safe interps, but this is also x-plat ok + variable library $::tk_library/ttk + } +} + +# Add Ttk & Tk's directory to the end of the auto-load search path, if it +# isn't already on the path: + +if {[info exists ::auto_path] && ($::tk_library ne "") + && ($::tk_library ni $::auto_path)} { + lappend ::auto_path $::tk_library $::ttk::library +} + +# Turn off strict Motif look and feel as a default. + +set ::tk_strictMotif 0 + +# Turn on useinputmethods (X Input Methods) by default. We catch this because +# safe interpreters may not allow the call. + +catch {tk useinputmethods 1} + +# ::tk::PlaceWindow -- +# Place a toplevel at a particular position +# Arguments: +# toplevel name of toplevel window +# ?placement? pointer ?center? ; places $w centered on the pointer +# widget widgetPath ; centers $w over widget_name +# defaults to placing toplevel in the middle of the screen +# ?anchor? center or widgetPath +# Results: +# Returns nothing +# +proc ::tk::PlaceWindow {w {place ""} {anchor ""}} { + wm withdraw $w + update idletasks + set checkBounds 1 + if {$place eq ""} { + set x [expr {([winfo screenwidth $w]-[winfo reqwidth $w])/2}] + set y [expr {([winfo screenheight $w]-[winfo reqheight $w])/2}] + set checkBounds 0 + } elseif {[string equal -length [string length $place] $place "pointer"]} { + ## place at POINTER (centered if $anchor == center) + if {[string equal -length [string length $anchor] $anchor "center"]} { + set x [expr {[winfo pointerx $w]-[winfo reqwidth $w]/2}] + set y [expr {[winfo pointery $w]-[winfo reqheight $w]/2}] + } else { + set x [winfo pointerx $w] + set y [winfo pointery $w] + } + } elseif {[string equal -length [string length $place] $place "widget"] && \ + [winfo exists $anchor] && [winfo ismapped $anchor]} { + ## center about WIDGET $anchor, widget must be mapped + set x [expr {[winfo rootx $anchor] + \ + ([winfo width $anchor]-[winfo reqwidth $w])/2}] + set y [expr {[winfo rooty $anchor] + \ + ([winfo height $anchor]-[winfo reqheight $w])/2}] + } else { + set x [expr {([winfo screenwidth $w]-[winfo reqwidth $w])/2}] + set y [expr {([winfo screenheight $w]-[winfo reqheight $w])/2}] + set checkBounds 0 + } + if {$checkBounds} { + if {$x < [winfo vrootx $w]} { + set x [winfo vrootx $w] + } elseif {$x > ([winfo vrootx $w]+[winfo vrootwidth $w]-[winfo reqwidth $w])} { + set x [expr {[winfo vrootx $w]+[winfo vrootwidth $w]-[winfo reqwidth $w]}] + } + if {$y < [winfo vrooty $w]} { + set y [winfo vrooty $w] + } elseif {$y > ([winfo vrooty $w]+[winfo vrootheight $w]-[winfo reqheight $w])} { + set y [expr {[winfo vrooty $w]+[winfo vrootheight $w]-[winfo reqheight $w]}] + } + if {[tk windowingsystem] eq "aqua"} { + # Avoid the native menu bar which sits on top of everything. + if {$y < 22} { set y 22 } + } + } + wm maxsize $w [winfo vrootwidth $w] [winfo vrootheight $w] + wm geometry $w +$x+$y + wm deiconify $w +} + +# ::tk::SetFocusGrab -- +# Swap out current focus and grab temporarily (for dialogs) +# Arguments: +# grab new window to grab +# focus window to give focus to +# Results: +# Returns nothing +# +proc ::tk::SetFocusGrab {grab {focus {}}} { + set index "$grab,$focus" + upvar ::tk::FocusGrab($index) data + + lappend data [focus] + set oldGrab [grab current $grab] + lappend data $oldGrab + if {[winfo exists $oldGrab]} { + lappend data [grab status $oldGrab] + } + # The "grab" command will fail if another application already holds the + # grab. So catch it. + catch {grab $grab} + if {[winfo exists $focus]} { + focus $focus + } +} + +# ::tk::RestoreFocusGrab -- +# Restore old focus and grab (for dialogs) +# Arguments: +# grab window that had taken grab +# focus window that had taken focus +# destroy destroy|withdraw - how to handle the old grabbed window +# Results: +# Returns nothing +# +proc ::tk::RestoreFocusGrab {grab focus {destroy destroy}} { + set index "$grab,$focus" + if {[info exists ::tk::FocusGrab($index)]} { + foreach {oldFocus oldGrab oldStatus} $::tk::FocusGrab($index) { break } + unset ::tk::FocusGrab($index) + } else { + set oldGrab "" + } + + catch {focus $oldFocus} + grab release $grab + if {$destroy eq "withdraw"} { + wm withdraw $grab + } else { + destroy $grab + } + if {[winfo exists $oldGrab] && [winfo ismapped $oldGrab]} { + if {$oldStatus eq "global"} { + grab -global $oldGrab + } else { + grab $oldGrab + } + } +} + +# ::tk::GetSelection -- +# This tries to obtain the default selection. On Unix, we first try and get +# a UTF8_STRING, a type supported by modern Unix apps for passing Unicode +# data safely. We fall back on the default STRING type otherwise. On +# Windows, only the STRING type is necessary. +# Arguments: +# w The widget for which the selection will be retrieved. +# Important for the -displayof property. +# sel The source of the selection (PRIMARY or CLIPBOARD) +# Results: +# Returns the selection, or an error if none could be found +# +if {[tk windowingsystem] ne "win32"} { + proc ::tk::GetSelection {w {sel PRIMARY}} { + if {[catch {selection get -displayof $w -selection $sel \ + -type UTF8_STRING} txt] \ + && [catch {selection get -displayof $w -selection $sel} txt]} { + return -code error "could not find default selection" + } else { + return $txt + } + } +} else { + proc ::tk::GetSelection {w {sel PRIMARY}} { + if {[catch {selection get -displayof $w -selection $sel} txt]} { + return -code error "could not find default selection" + } else { + return $txt + } + } +} + +# ::tk::ScreenChanged -- +# This procedure is invoked by the binding mechanism whenever the "current" +# screen is changing. The procedure does two things. First, it uses "upvar" +# to make variable "::tk::Priv" point at an array variable that holds state +# for the current display. Second, it initializes the array if it didn't +# already exist. +# +# Arguments: +# screen - The name of the new screen. + +proc ::tk::ScreenChanged {screen} { + set x [string last . $screen] + if {$x > 0} { + set disp [string range $screen 0 [expr {$x - 1}]] + } else { + set disp $screen + } + + # Ensure that namespace separators never occur in the display name (as + # they cause problems in variable names). Double-colons exist in some VNC + # display names. [Bug 2912473] + set disp [string map {:: _doublecolon_} $disp] + + uplevel #0 [list upvar #0 ::tk::Priv.$disp ::tk::Priv] + variable ::tk::Priv + global tcl_platform + + if {[info exists Priv]} { + set Priv(screen) $screen + return + } + array set Priv { + activeMenu {} + activeItem {} + afterId {} + buttons 0 + buttonWindow {} + dragging 0 + focus {} + grab {} + initPos {} + inMenubutton {} + listboxPrev {} + menuBar {} + mouseMoved 0 + oldGrab {} + popup {} + postedMb {} + pressX 0 + pressY 0 + prevPos 0 + selectMode char + } + set Priv(screen) $screen + set Priv(tearoff) [string equal [tk windowingsystem] "x11"] + set Priv(window) {} +} + +# Do initial setup for Priv, so that it is always bound to something +# (otherwise, if someone references it, it may get set to a non-upvar-ed +# value, which will cause trouble later). + +tk::ScreenChanged [winfo screen .] + +# ::tk::EventMotifBindings -- +# This procedure is invoked as a trace whenever ::tk_strictMotif is changed. +# It is used to turn on or turn off the motif virtual bindings. +# +# Arguments: +# n1 - the name of the variable being changed ("::tk_strictMotif"). + +proc ::tk::EventMotifBindings {n1 dummy dummy} { + upvar $n1 name + + if {$name} { + set op delete + } else { + set op add + } + + event $op <> + event $op <> + event $op <> +} + +#---------------------------------------------------------------------- +# Define common dialogs on platforms where they are not implemented using +# compiled code. +#---------------------------------------------------------------------- + +if {![llength [info commands tk_chooseColor]]} { + proc ::tk_chooseColor {args} { + return [tk::dialog::color:: {*}$args] + } +} +if {![llength [info commands tk_getOpenFile]]} { + proc ::tk_getOpenFile {args} { + if {$::tk_strictMotif} { + return [tk::MotifFDialog open {*}$args] + } else { + return [::tk::dialog::file:: open {*}$args] + } + } +} +if {![llength [info commands tk_getSaveFile]]} { + proc ::tk_getSaveFile {args} { + if {$::tk_strictMotif} { + return [tk::MotifFDialog save {*}$args] + } else { + return [::tk::dialog::file:: save {*}$args] + } + } +} +if {![llength [info commands tk_messageBox]]} { + proc ::tk_messageBox {args} { + return [tk::MessageBox {*}$args] + } +} +if {![llength [info command tk_chooseDirectory]]} { + proc ::tk_chooseDirectory {args} { + return [::tk::dialog::file::chooseDir:: {*}$args] + } +} + +#---------------------------------------------------------------------- +# Define the set of common virtual events. +#---------------------------------------------------------------------- + +switch -exact -- [tk windowingsystem] { + "x11" { + event add <> + event add <> + event add <> + event add <> + event add <> + event add <> + # Some OS's define a goofy (as in, not ) keysym that is + # returned when the user presses . In order for tab + # traversal to work, we have to add these keysyms to the PrevWindow + # event. We use catch just in case the keysym isn't recognized. This + # is needed for XFree86 systems + catch { event add <> } + # This seems to be correct on *some* HP systems. + catch { event add <> } + + trace add variable ::tk_strictMotif write ::tk::EventMotifBindings + set ::tk_strictMotif $::tk_strictMotif + # On unix, we want to always display entry/text selection, regardless + # of which window has focus + set ::tk::AlwaysShowSelection 1 + } + "win32" { + event add <> \ + + event add <> \ + + event add <> \ + + event add <> + event add <> + event add <> + } + "aqua" { + event add <> + event add <> + event add <> + event add <> + event add <> + event add <> + event add <> + } +} + +# ---------------------------------------------------------------------- +# Read in files that define all of the class bindings. +# ---------------------------------------------------------------------- + +if {$::tk_library ne ""} { + proc ::tk::SourceLibFile {file} { + namespace eval :: [list source [file join $::tk_library $file.tcl]] + } + namespace eval ::tk { + SourceLibFile button + SourceLibFile entry + SourceLibFile listbox + SourceLibFile menu + SourceLibFile panedwindow + SourceLibFile scale + SourceLibFile scrlbar + SourceLibFile spinbox + SourceLibFile text + } +} + +# ---------------------------------------------------------------------- +# Default bindings for keyboard traversal. +# ---------------------------------------------------------------------- + +event add <> +bind all {tk::TabToWindow [tk_focusNext %W]} +bind all <> {tk::TabToWindow [tk_focusPrev %W]} + +# ::tk::CancelRepeat -- +# This procedure is invoked to cancel an auto-repeat action described by +# ::tk::Priv(afterId). It's used by several widgets to auto-scroll the widget +# when the mouse is dragged out of the widget with a button pressed. +# +# Arguments: +# None. + +proc ::tk::CancelRepeat {} { + variable ::tk::Priv + after cancel $Priv(afterId) + set Priv(afterId) {} +} + +# ::tk::TabToWindow -- +# This procedure moves the focus to the given widget. +# It sends a <> virtual event to the previous focus window, if +# any, before changing the focus, and a <> event to the new focus +# window afterwards. +# +# Arguments: +# w - Window to which focus should be set. + +proc ::tk::TabToWindow {w} { + set focus [focus] + if {$focus ne ""} { + event generate $focus <> + } + focus $w + event generate $w <> +} + +# ::tk::UnderlineAmpersand -- +# This procedure takes some text with ampersand and returns text w/o ampersand +# and position of the ampersand. Double ampersands are converted to single +# ones. Position returned is -1 when there is no ampersand. +# +proc ::tk::UnderlineAmpersand {text} { + set s [string map {&& & & \ufeff} $text] + set idx [string first \ufeff $s] + return [list [string map {\ufeff {}} $s] $idx] +} + +# ::tk::SetAmpText -- +# Given widget path and text with "magic ampersands", sets -text and +# -underline options for the widget +# +proc ::tk::SetAmpText {widget text} { + lassign [UnderlineAmpersand $text] newtext under + $widget configure -text $newtext -underline $under +} + +# ::tk::AmpWidget -- +# Creates new widget, turning -text option into -text and -underline options, +# returned by ::tk::UnderlineAmpersand. +# +proc ::tk::AmpWidget {class path args} { + set options {} + foreach {opt val} $args { + if {$opt eq "-text"} { + lassign [UnderlineAmpersand $val] newtext under + lappend options -text $newtext -underline $under + } else { + lappend options $opt $val + } + } + set result [$class $path {*}$options] + if {[string match "*button" $class]} { + bind $path <> [list $path invoke] + } + return $result +} + +# ::tk::AmpMenuArgs -- +# Processes arguments for a menu entry, turning -label option into -label and +# -underline options, returned by ::tk::UnderlineAmpersand. +# +proc ::tk::AmpMenuArgs {widget add type args} { + set options {} + foreach {opt val} $args { + if {$opt eq "-label"} { + lassign [UnderlineAmpersand $val] newlabel under + lappend options -label $newlabel -underline $under + } else { + lappend options $opt $val + } + } + $widget add $type {*}$options +} + +# ::tk::FindAltKeyTarget -- +# Search recursively through the hierarchy of visible widgets to find button +# or label which has $char as underlined character +# +proc ::tk::FindAltKeyTarget {path char} { + switch -- [winfo class $path] { + Button - Label - + TButton - TLabel - TCheckbutton { + if {[string equal -nocase $char \ + [string index [$path cget -text] [$path cget -underline]]]} { + return $path + } else { + return {} + } + } + default { + foreach child [concat [grid slaves $path] \ + [pack slaves $path] [place slaves $path]] { + set target [FindAltKeyTarget $child $char] + if {$target ne ""} { + return $target + } + } + } + } + return {} +} + +# ::tk::AltKeyInDialog -- +# event handler for standard dialogs. Sends <> to +# button or label which has appropriate underlined character +# +proc ::tk::AltKeyInDialog {path key} { + set target [FindAltKeyTarget $path $key] + if { $target eq ""} return + event generate $target <> +} + +# ::tk::mcmaxamp -- +# Replacement for mcmax, used for texts with "magic ampersand" in it. +# + +proc ::tk::mcmaxamp {args} { + set maxlen 0 + foreach arg $args { + # Should we run [mc] in caller's namespace? + lassign [UnderlineAmpersand [mc $arg]] msg + set length [string length $msg] + if {$length > $maxlen} { + set maxlen $length + } + } + return $maxlen +} + +# For now, turn off the custom mdef proc for the mac: + +if {[tk windowingsystem] eq "aqua"} { + namespace eval ::tk::mac { + variable useCustomMDEF 0 + } +} + +# Run the Ttk themed widget set initialization +if {$::ttk::library ne ""} { + uplevel \#0 [list source [file join $::ttk::library ttk.tcl]] +} + +# Local Variables: +# mode: tcl +# fill-column: 78 +# End: diff --git a/extensions/fablabchemnitz/inkstitch/bin/tk/tkfbox.tcl b/extensions/fablabchemnitz/inkstitch/bin/tk/tkfbox.tcl new file mode 100644 index 00000000..fd0f6d7f --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tk/tkfbox.tcl @@ -0,0 +1,1964 @@ +# tkfbox.tcl -- +# +# Implements the "TK" standard file selection dialog box. This +# dialog box is used on the Unix platforms whenever the tk_strictMotif +# flag is not set. +# +# The "TK" standard file selection dialog box is similar to the +# file selection dialog box on Win95(TM). The user can navigate +# the directories by clicking on the folder icons or by +# selecting the "Directory" option menu. The user can select +# files by clicking on the file icons or by entering a filename +# in the "Filename:" entry. +# +# Copyright (c) 1994-1998 Sun Microsystems, Inc. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. +# + +package require Ttk + +#---------------------------------------------------------------------- +# +# I C O N L I S T +# +# This is a pseudo-widget that implements the icon list inside the +# ::tk::dialog::file:: dialog box. +# +#---------------------------------------------------------------------- + +# ::tk::IconList -- +# +# Creates an IconList widget. +# +proc ::tk::IconList {w args} { + IconList_Config $w $args + IconList_Create $w +} + +proc ::tk::IconList_Index {w i} { + upvar #0 ::tk::$w data ::tk::$w:itemList itemList + if {![info exists data(list)]} { + set data(list) {} + } + switch -regexp -- $i { + "^-?[0-9]+$" { + if {$i < 0} { + set i 0 + } + if {$i >= [llength $data(list)]} { + set i [expr {[llength $data(list)] - 1}] + } + return $i + } + "^active$" { + return $data(index,active) + } + "^anchor$" { + return $data(index,anchor) + } + "^end$" { + return [llength $data(list)] + } + "@-?[0-9]+,-?[0-9]+" { + foreach {x y} [scan $i "@%d,%d"] { + break + } + set item [$data(canvas) find closest \ + [$data(canvas) canvasx $x] [$data(canvas) canvasy $y]] + return [lindex [$data(canvas) itemcget $item -tags] 1] + } + } +} + +proc ::tk::IconList_Selection {w op args} { + upvar ::tk::$w data + switch -exact -- $op { + "anchor" { + if {[llength $args] == 1} { + set data(index,anchor) [tk::IconList_Index $w [lindex $args 0]] + } else { + return $data(index,anchor) + } + } + "clear" { + if {[llength $args] == 2} { + foreach {first last} $args { + break + } + } elseif {[llength $args] == 1} { + set first [set last [lindex $args 0]] + } else { + error "wrong # args: should be [lindex [info level 0] 0] path\ + clear first ?last?" + } + set first [IconList_Index $w $first] + set last [IconList_Index $w $last] + if {$first > $last} { + set tmp $first + set first $last + set last $tmp + } + set ind 0 + foreach item $data(selection) { + if { $item >= $first } { + set first $ind + break + } + incr ind + } + set ind [expr {[llength $data(selection)] - 1}] + for {} {$ind >= 0} {incr ind -1} { + set item [lindex $data(selection) $ind] + if { $item <= $last } { + set last $ind + break + } + } + + if { $first > $last } { + return + } + set data(selection) [lreplace $data(selection) $first $last] + event generate $w <> + IconList_DrawSelection $w + } + "includes" { + set index [lsearch -exact $data(selection) [lindex $args 0]] + return [expr {$index != -1}] + } + "set" { + if { [llength $args] == 2 } { + foreach {first last} $args { + break + } + } elseif { [llength $args] == 1 } { + set last [set first [lindex $args 0]] + } else { + error "wrong # args: should be [lindex [info level 0] 0] path\ + set first ?last?" + } + + set first [IconList_Index $w $first] + set last [IconList_Index $w $last] + if { $first > $last } { + set tmp $first + set first $last + set last $tmp + } + for {set i $first} {$i <= $last} {incr i} { + lappend data(selection) $i + } + set data(selection) [lsort -integer -unique $data(selection)] + event generate $w <> + IconList_DrawSelection $w + } + } +} + +proc ::tk::IconList_CurSelection {w} { + upvar ::tk::$w data + return $data(selection) +} + +proc ::tk::IconList_DrawSelection {w} { + upvar ::tk::$w data + upvar ::tk::$w:itemList itemList + + $data(canvas) delete selection + $data(canvas) itemconfigure selectionText -fill black + $data(canvas) dtag selectionText + set cbg [ttk::style lookup TEntry -selectbackground focus] + set cfg [ttk::style lookup TEntry -selectforeground focus] + foreach item $data(selection) { + set rTag [lindex [lindex $data(list) $item] 2] + foreach {iTag tTag text serial} $itemList($rTag) { + break + } + + set bbox [$data(canvas) bbox $tTag] + $data(canvas) create rect $bbox -fill $cbg -outline $cbg \ + -tags selection + $data(canvas) itemconfigure $tTag -fill $cfg -tags selectionText + } + $data(canvas) lower selection + return +} + +proc ::tk::IconList_Get {w item} { + upvar ::tk::$w data + upvar ::tk::$w:itemList itemList + set rTag [lindex [lindex $data(list) $item] 2] + foreach {iTag tTag text serial} $itemList($rTag) { + break + } + return $text +} + +# ::tk::IconList_Config -- +# +# Configure the widget variables of IconList, according to the command +# line arguments. +# +proc ::tk::IconList_Config {w argList} { + + # 1: the configuration specs + # + set specs { + {-command "" "" ""} + {-multiple "" "" "0"} + } + + # 2: parse the arguments + # + tclParseConfigSpec ::tk::$w $specs "" $argList +} + +# ::tk::IconList_Create -- +# +# Creates an IconList widget by assembling a canvas widget and a +# scrollbar widget. Sets all the bindings necessary for the IconList's +# operations. +# +proc ::tk::IconList_Create {w} { + upvar ::tk::$w data + + ttk::frame $w + ttk::entry $w.cHull -takefocus 0 -cursor {} + set data(sbar) [ttk::scrollbar $w.cHull.sbar -orient horizontal -takefocus 0] + catch {$data(sbar) configure -highlightthickness 0} + set data(canvas) [canvas $w.cHull.canvas -highlightthick 0 \ + -width 400 -height 120 -takefocus 1 -background white] + pack $data(sbar) -side bottom -fill x -padx 2 -in $w.cHull -pady {0 2} + pack $data(canvas) -expand yes -fill both -padx 2 -pady {2 0} + pack $w.cHull -expand yes -fill both -ipadx 2 -ipady 2 + + $data(sbar) configure -command [list $data(canvas) xview] + $data(canvas) configure -xscrollcommand [list $data(sbar) set] + + # Initializes the max icon/text width and height and other variables + # + set data(maxIW) 1 + set data(maxIH) 1 + set data(maxTW) 1 + set data(maxTH) 1 + set data(numItems) 0 + set data(noScroll) 1 + set data(selection) {} + set data(index,anchor) "" + set fg [option get $data(canvas) foreground Foreground] + if {$fg eq ""} { + set data(fill) black + } else { + set data(fill) $fg + } + + # Creates the event bindings. + # + bind $data(canvas) [list tk::IconList_Arrange $w] + + bind $data(canvas) <1> [list tk::IconList_Btn1 $w %x %y] + bind $data(canvas) [list tk::IconList_Motion1 $w %x %y] + bind $data(canvas) [list tk::IconList_Leave1 $w %x %y] + bind $data(canvas) [list tk::IconList_CtrlBtn1 $w %x %y] + bind $data(canvas) [list tk::IconList_ShiftBtn1 $w %x %y] + bind $data(canvas) [list tk::CancelRepeat] + bind $data(canvas) [list tk::CancelRepeat] + bind $data(canvas) \ + [list tk::IconList_Double1 $w %x %y] + + bind $data(canvas) {;} + bind $data(canvas) \ + [list tk::IconList_ShiftMotion1 $w %x %y] + + bind $data(canvas) [list tk::IconList_UpDown $w -1] + bind $data(canvas) [list tk::IconList_UpDown $w 1] + bind $data(canvas) [list tk::IconList_LeftRight $w -1] + bind $data(canvas) [list tk::IconList_LeftRight $w 1] + bind $data(canvas) [list tk::IconList_ReturnKey $w] + bind $data(canvas) [list tk::IconList_KeyPress $w %A] + bind $data(canvas) ";" + bind $data(canvas) ";" + + bind $data(canvas) [list tk::IconList_FocusIn $w] + bind $data(canvas) [list tk::IconList_FocusOut $w] + + return $w +} + +# ::tk::IconList_AutoScan -- +# +# This procedure is invoked when the mouse leaves an entry window +# with button 1 down. It scrolls the window up, down, left, or +# right, depending on where the mouse left the window, and reschedules +# itself as an "after" command so that the window continues to scroll until +# the mouse moves back into the window or the mouse button is released. +# +# Arguments: +# w - The IconList window. +# +proc ::tk::IconList_AutoScan {w} { + upvar ::tk::$w data + variable ::tk::Priv + + if {![winfo exists $w]} return + set x $Priv(x) + set y $Priv(y) + + if {$data(noScroll)} { + return + } + if {$x >= [winfo width $data(canvas)]} { + $data(canvas) xview scroll 1 units + } elseif {$x < 0} { + $data(canvas) xview scroll -1 units + } elseif {$y >= [winfo height $data(canvas)]} { + # do nothing + } elseif {$y < 0} { + # do nothing + } else { + return + } + + IconList_Motion1 $w $x $y + set Priv(afterId) [after 50 [list tk::IconList_AutoScan $w]] +} + +# Deletes all the items inside the canvas subwidget and reset the IconList's +# state. +# +proc ::tk::IconList_DeleteAll {w} { + upvar ::tk::$w data + upvar ::tk::$w:itemList itemList + + $data(canvas) delete all + unset -nocomplain data(selected) data(rect) data(list) itemList + set data(maxIW) 1 + set data(maxIH) 1 + set data(maxTW) 1 + set data(maxTH) 1 + set data(numItems) 0 + set data(noScroll) 1 + set data(selection) {} + set data(index,anchor) "" + $data(sbar) set 0.0 1.0 + $data(canvas) xview moveto 0 +} + +# Adds an icon into the IconList with the designated image and text +# +proc ::tk::IconList_Add {w image items} { + upvar ::tk::$w data + upvar ::tk::$w:itemList itemList + upvar ::tk::$w:textList textList + + foreach text $items { + set iTag [$data(canvas) create image 0 0 -image $image -anchor nw \ + -tags [list icon $data(numItems) item$data(numItems)]] + set tTag [$data(canvas) create text 0 0 -text $text -anchor nw \ + -font $data(font) -fill $data(fill) \ + -tags [list text $data(numItems) item$data(numItems)]] + set rTag [$data(canvas) create rect 0 0 0 0 -fill "" -outline "" \ + -tags [list rect $data(numItems) item$data(numItems)]] + + foreach {x1 y1 x2 y2} [$data(canvas) bbox $iTag] { + break + } + set iW [expr {$x2 - $x1}] + set iH [expr {$y2 - $y1}] + if {$data(maxIW) < $iW} { + set data(maxIW) $iW + } + if {$data(maxIH) < $iH} { + set data(maxIH) $iH + } + + foreach {x1 y1 x2 y2} [$data(canvas) bbox $tTag] { + break + } + set tW [expr {$x2 - $x1}] + set tH [expr {$y2 - $y1}] + if {$data(maxTW) < $tW} { + set data(maxTW) $tW + } + if {$data(maxTH) < $tH} { + set data(maxTH) $tH + } + + lappend data(list) [list $iTag $tTag $rTag $iW $iH $tW \ + $tH $data(numItems)] + set itemList($rTag) [list $iTag $tTag $text $data(numItems)] + set textList($data(numItems)) [string tolower $text] + incr data(numItems) + } +} + +# Places the icons in a column-major arrangement. +# +proc ::tk::IconList_Arrange {w} { + upvar ::tk::$w data + + if {![info exists data(list)]} { + if {[info exists data(canvas)] && [winfo exists $data(canvas)]} { + set data(noScroll) 1 + $data(sbar) configure -command "" + } + return + } + + set W [winfo width $data(canvas)] + set H [winfo height $data(canvas)] + set pad [expr {[$data(canvas) cget -highlightthickness] + \ + [$data(canvas) cget -bd]}] + if {$pad < 2} { + set pad 2 + } + + incr W -[expr {$pad*2}] + incr H -[expr {$pad*2}] + + set dx [expr {$data(maxIW) + $data(maxTW) + 8}] + if {$data(maxTH) > $data(maxIH)} { + set dy $data(maxTH) + } else { + set dy $data(maxIH) + } + incr dy 2 + set shift [expr {$data(maxIW) + 4}] + + set x [expr {$pad * 2}] + set y [expr {$pad * 1}] ; # Why * 1 ? + set usedColumn 0 + foreach sublist $data(list) { + set usedColumn 1 + foreach {iTag tTag rTag iW iH tW tH} $sublist { + break + } + + set i_dy [expr {($dy - $iH)/2}] + set t_dy [expr {($dy - $tH)/2}] + + $data(canvas) coords $iTag $x [expr {$y + $i_dy}] + $data(canvas) coords $tTag [expr {$x + $shift}] [expr {$y + $t_dy}] + $data(canvas) coords $rTag $x $y [expr {$x+$dx}] [expr {$y+$dy}] + + incr y $dy + if {($y + $dy) > $H} { + set y [expr {$pad * 1}] ; # *1 ? + incr x $dx + set usedColumn 0 + } + } + + if {$usedColumn} { + set sW [expr {$x + $dx}] + } else { + set sW $x + } + + if {$sW < $W} { + $data(canvas) configure -scrollregion [list $pad $pad $sW $H] + $data(sbar) configure -command "" + $data(canvas) xview moveto 0 + set data(noScroll) 1 + } else { + $data(canvas) configure -scrollregion [list $pad $pad $sW $H] + $data(sbar) configure -command [list $data(canvas) xview] + set data(noScroll) 0 + } + + set data(itemsPerColumn) [expr {($H-$pad)/$dy}] + if {$data(itemsPerColumn) < 1} { + set data(itemsPerColumn) 1 + } + + IconList_DrawSelection $w +} + +# Gets called when the user invokes the IconList (usually by double-clicking +# or pressing the Return key). +# +proc ::tk::IconList_Invoke {w} { + upvar ::tk::$w data + + if {$data(-command) ne "" && [llength $data(selection)]} { + uplevel #0 $data(-command) + } +} + +# ::tk::IconList_See -- +# +# If the item is not (completely) visible, scroll the canvas so that +# it becomes visible. +proc ::tk::IconList_See {w rTag} { + upvar ::tk::$w data + upvar ::tk::$w:itemList itemList + + if {$data(noScroll)} { + return + } + set sRegion [$data(canvas) cget -scrollregion] + if {$sRegion eq ""} { + return + } + + if { $rTag < 0 || $rTag >= [llength $data(list)] } { + return + } + + set bbox [$data(canvas) bbox item$rTag] + set pad [expr {[$data(canvas) cget -highlightthickness] + \ + [$data(canvas) cget -bd]}] + + set x1 [lindex $bbox 0] + set x2 [lindex $bbox 2] + incr x1 -[expr {$pad * 2}] + incr x2 -[expr {$pad * 1}] ; # *1 ? + + set cW [expr {[winfo width $data(canvas)] - $pad*2}] + + set scrollW [expr {[lindex $sRegion 2]-[lindex $sRegion 0]+1}] + set dispX [expr {int([lindex [$data(canvas) xview] 0]*$scrollW)}] + set oldDispX $dispX + + # check if out of the right edge + # + if {($x2 - $dispX) >= $cW} { + set dispX [expr {$x2 - $cW}] + } + # check if out of the left edge + # + if {($x1 - $dispX) < 0} { + set dispX $x1 + } + + if {$oldDispX ne $dispX} { + set fraction [expr {double($dispX)/double($scrollW)}] + $data(canvas) xview moveto $fraction + } +} + +proc ::tk::IconList_Btn1 {w x y} { + upvar ::tk::$w data + + focus $data(canvas) + set i [IconList_Index $w @$x,$y] + if {$i eq ""} { + return + } + IconList_Selection $w clear 0 end + IconList_Selection $w set $i + IconList_Selection $w anchor $i +} + +proc ::tk::IconList_CtrlBtn1 {w x y} { + upvar ::tk::$w data + + if { $data(-multiple) } { + focus $data(canvas) + set i [IconList_Index $w @$x,$y] + if {$i eq ""} { + return + } + if { [IconList_Selection $w includes $i] } { + IconList_Selection $w clear $i + } else { + IconList_Selection $w set $i + IconList_Selection $w anchor $i + } + } +} + +proc ::tk::IconList_ShiftBtn1 {w x y} { + upvar ::tk::$w data + + if { $data(-multiple) } { + focus $data(canvas) + set i [IconList_Index $w @$x,$y] + if {$i eq ""} { + return + } + if {[IconList_Index $w anchor] eq ""} { + IconList_Selection $w anchor $i + } + IconList_Selection $w clear 0 end + IconList_Selection $w set anchor $i + } +} + +# Gets called on button-1 motions +# +proc ::tk::IconList_Motion1 {w x y} { + variable ::tk::Priv + set Priv(x) $x + set Priv(y) $y + set i [IconList_Index $w @$x,$y] + if {$i eq ""} { + return + } + IconList_Selection $w clear 0 end + IconList_Selection $w set $i +} + +proc ::tk::IconList_ShiftMotion1 {w x y} { + upvar ::tk::$w data + variable ::tk::Priv + set Priv(x) $x + set Priv(y) $y + set i [IconList_Index $w @$x,$y] + if {$i eq ""} { + return + } + IconList_Selection $w clear 0 end + IconList_Selection $w set anchor $i +} + +proc ::tk::IconList_Double1 {w x y} { + upvar ::tk::$w data + + if {[llength $data(selection)]} { + IconList_Invoke $w + } +} + +proc ::tk::IconList_ReturnKey {w} { + IconList_Invoke $w +} + +proc ::tk::IconList_Leave1 {w x y} { + variable ::tk::Priv + + set Priv(x) $x + set Priv(y) $y + IconList_AutoScan $w +} + +proc ::tk::IconList_FocusIn {w} { + upvar ::tk::$w data + + $w.cHull state focus + if {![info exists data(list)]} { + return + } + + if {[llength $data(selection)]} { + IconList_DrawSelection $w + } +} + +proc ::tk::IconList_FocusOut {w} { + $w.cHull state !focus + IconList_Selection $w clear 0 end +} + +# ::tk::IconList_UpDown -- +# +# Moves the active element up or down by one element +# +# Arguments: +# w - The IconList widget. +# amount - +1 to move down one item, -1 to move back one item. +# +proc ::tk::IconList_UpDown {w amount} { + upvar ::tk::$w data + + if {![info exists data(list)]} { + return + } + + set curr [tk::IconList_CurSelection $w] + if { [llength $curr] == 0 } { + set i 0 + } else { + set i [tk::IconList_Index $w anchor] + if {$i eq ""} { + return + } + incr i $amount + } + IconList_Selection $w clear 0 end + IconList_Selection $w set $i + IconList_Selection $w anchor $i + IconList_See $w $i +} + +# ::tk::IconList_LeftRight -- +# +# Moves the active element left or right by one column +# +# Arguments: +# w - The IconList widget. +# amount - +1 to move right one column, -1 to move left one column. +# +proc ::tk::IconList_LeftRight {w amount} { + upvar ::tk::$w data + + if {![info exists data(list)]} { + return + } + + set curr [IconList_CurSelection $w] + if { [llength $curr] == 0 } { + set i 0 + } else { + set i [IconList_Index $w anchor] + if {$i eq ""} { + return + } + incr i [expr {$amount*$data(itemsPerColumn)}] + } + IconList_Selection $w clear 0 end + IconList_Selection $w set $i + IconList_Selection $w anchor $i + IconList_See $w $i +} + +#---------------------------------------------------------------------- +# Accelerator key bindings +#---------------------------------------------------------------------- + +# ::tk::IconList_KeyPress -- +# +# Gets called when user enters an arbitrary key in the listbox. +# +proc ::tk::IconList_KeyPress {w key} { + variable ::tk::Priv + + append Priv(ILAccel,$w) $key + IconList_Goto $w $Priv(ILAccel,$w) + catch { + after cancel $Priv(ILAccel,$w,afterId) + } + set Priv(ILAccel,$w,afterId) [after 500 [list tk::IconList_Reset $w]] +} + +proc ::tk::IconList_Goto {w text} { + upvar ::tk::$w data + upvar ::tk::$w:textList textList + + if {![info exists data(list)]} { + return + } + + if {$text eq "" || $data(numItems) == 0} { + return + } + + if {[llength [IconList_CurSelection $w]]} { + set start [IconList_Index $w anchor] + } else { + set start 0 + } + + set theIndex -1 + set less 0 + set len [string length $text] + set len0 [expr {$len-1}] + set i $start + + # Search forward until we find a filename whose prefix is a + # case-insensitive match with $text + while {1} { + if {[string equal -nocase -length $len0 $textList($i) $text]} { + set theIndex $i + break + } + incr i + if {$i == $data(numItems)} { + set i 0 + } + if {$i == $start} { + break + } + } + + if {$theIndex > -1} { + IconList_Selection $w clear 0 end + IconList_Selection $w set $theIndex + IconList_Selection $w anchor $theIndex + IconList_See $w $theIndex + } +} + +proc ::tk::IconList_Reset {w} { + variable ::tk::Priv + + unset -nocomplain Priv(ILAccel,$w) +} + +#---------------------------------------------------------------------- +# +# F I L E D I A L O G +# +#---------------------------------------------------------------------- + +namespace eval ::tk::dialog {} +namespace eval ::tk::dialog::file { + namespace import -force ::tk::msgcat::* + set ::tk::dialog::file::showHiddenBtn 0 + set ::tk::dialog::file::showHiddenVar 1 +} + +# ::tk::dialog::file:: -- +# +# Implements the TK file selection dialog. This dialog is used when +# the tk_strictMotif flag is set to false. This procedure shouldn't +# be called directly. Call tk_getOpenFile or tk_getSaveFile instead. +# +# Arguments: +# type "open" or "save" +# args Options parsed by the procedure. +# + +proc ::tk::dialog::file:: {type args} { + variable ::tk::Priv + set dataName __tk_filedialog + upvar ::tk::dialog::file::$dataName data + + Config $dataName $type $args + + if {$data(-parent) eq "."} { + set w .$dataName + } else { + set w $data(-parent).$dataName + } + + # (re)create the dialog box if necessary + # + if {![winfo exists $w]} { + Create $w TkFDialog + } elseif {[winfo class $w] ne "TkFDialog"} { + destroy $w + Create $w TkFDialog + } else { + set data(dirMenuBtn) $w.contents.f1.menu + set data(dirMenu) $w.contents.f1.menu.menu + set data(upBtn) $w.contents.f1.up + set data(icons) $w.contents.icons + set data(ent) $w.contents.f2.ent + set data(typeMenuLab) $w.contents.f2.lab2 + set data(typeMenuBtn) $w.contents.f2.menu + set data(typeMenu) $data(typeMenuBtn).m + set data(okBtn) $w.contents.f2.ok + set data(cancelBtn) $w.contents.f2.cancel + set data(hiddenBtn) $w.contents.f2.hidden + SetSelectMode $w $data(-multiple) + } + if {$::tk::dialog::file::showHiddenBtn} { + $data(hiddenBtn) configure -state normal + grid $data(hiddenBtn) + } else { + $data(hiddenBtn) configure -state disabled + grid remove $data(hiddenBtn) + } + + # Make sure subseqent uses of this dialog are independent [Bug 845189] + unset -nocomplain data(extUsed) + + # Dialog boxes should be transient with respect to their parent, + # so that they will always stay on top of their parent window. However, + # some window managers will create the window as withdrawn if the parent + # window is withdrawn or iconified. Combined with the grab we put on the + # window, this can hang the entire application. Therefore we only make + # the dialog transient if the parent is viewable. + + if {[winfo viewable [winfo toplevel $data(-parent)]]} { + wm transient $w $data(-parent) + } + + # Add traces on the selectPath variable + # + + trace add variable data(selectPath) write \ + [list ::tk::dialog::file::SetPath $w] + $data(dirMenuBtn) configure \ + -textvariable ::tk::dialog::file::${dataName}(selectPath) + + # Cleanup previous menu + # + $data(typeMenu) delete 0 end + $data(typeMenuBtn) configure -state normal -text "" + + # Initialize the file types menu + # + if {[llength $data(-filetypes)]} { + # Default type and name to first entry + set initialtype [lindex $data(-filetypes) 0] + set initialTypeName [lindex $initialtype 0] + if {$data(-typevariable) ne ""} { + upvar #0 $data(-typevariable) typeVariable + if {[info exists typeVariable]} { + set initialTypeName $typeVariable + } + } + foreach type $data(-filetypes) { + set title [lindex $type 0] + set filter [lindex $type 1] + $data(typeMenu) add command -label $title \ + -command [list ::tk::dialog::file::SetFilter $w $type] + # string first avoids glob-pattern char issues + if {[string first ${initialTypeName} $title] == 0} { + set initialtype $type + } + } + SetFilter $w $initialtype + $data(typeMenuBtn) configure -state normal + $data(typeMenuLab) configure -state normal + } else { + set data(filter) "*" + $data(typeMenuBtn) configure -state disabled -takefocus 0 + $data(typeMenuLab) configure -state disabled + } + UpdateWhenIdle $w + + # Withdraw the window, then update all the geometry information + # so we know how big it wants to be, then center the window in the + # display (Motif style) and de-iconify it. + + ::tk::PlaceWindow $w widget $data(-parent) + wm title $w $data(-title) + + # Set a grab and claim the focus too. + + ::tk::SetFocusGrab $w $data(ent) + $data(ent) delete 0 end + $data(ent) insert 0 $data(selectFile) + $data(ent) selection range 0 end + $data(ent) icursor end + + # Wait for the user to respond, then restore the focus and + # return the index of the selected button. Restore the focus + # before deleting the window, since otherwise the window manager + # may take the focus away so we can't redirect it. Finally, + # restore any grab that was in effect. + + vwait ::tk::Priv(selectFilePath) + + ::tk::RestoreFocusGrab $w $data(ent) withdraw + + # Cleanup traces on selectPath variable + # + + foreach trace [trace info variable data(selectPath)] { + trace remove variable data(selectPath) [lindex $trace 0] [lindex $trace 1] + } + $data(dirMenuBtn) configure -textvariable {} + + return $Priv(selectFilePath) +} + +# ::tk::dialog::file::Config -- +# +# Configures the TK filedialog according to the argument list +# +proc ::tk::dialog::file::Config {dataName type argList} { + upvar ::tk::dialog::file::$dataName data + + set data(type) $type + + # 0: Delete all variable that were set on data(selectPath) the + # last time the file dialog is used. The traces may cause troubles + # if the dialog is now used with a different -parent option. + + foreach trace [trace info variable data(selectPath)] { + trace remove variable data(selectPath) [lindex $trace 0] [lindex $trace 1] + } + + # 1: the configuration specs + # + set specs { + {-defaultextension "" "" ""} + {-filetypes "" "" ""} + {-initialdir "" "" ""} + {-initialfile "" "" ""} + {-parent "" "" "."} + {-title "" "" ""} + {-typevariable "" "" ""} + } + + # The "-multiple" option is only available for the "open" file dialog. + # + if {$type eq "open"} { + lappend specs {-multiple "" "" "0"} + } + + # The "-confirmoverwrite" option is only for the "save" file dialog. + # + if {$type eq "save"} { + lappend specs {-confirmoverwrite "" "" "1"} + } + + # 2: default values depending on the type of the dialog + # + if {![info exists data(selectPath)]} { + # first time the dialog has been popped up + set data(selectPath) [pwd] + set data(selectFile) "" + } + + # 3: parse the arguments + # + tclParseConfigSpec ::tk::dialog::file::$dataName $specs "" $argList + + if {$data(-title) eq ""} { + if {$type eq "open"} { + set data(-title) [mc "Open"] + } else { + set data(-title) [mc "Save As"] + } + } + + # 4: set the default directory and selection according to the -initial + # settings + # + if {$data(-initialdir) ne ""} { + # Ensure that initialdir is an absolute path name. + if {[file isdirectory $data(-initialdir)]} { + set old [pwd] + cd $data(-initialdir) + set data(selectPath) [pwd] + cd $old + } else { + set data(selectPath) [pwd] + } + } + set data(selectFile) $data(-initialfile) + + # 5. Parse the -filetypes option + # + set data(-filetypes) [::tk::FDGetFileTypes $data(-filetypes)] + + if {![winfo exists $data(-parent)]} { + error "bad window path name \"$data(-parent)\"" + } + + # Set -multiple to a one or zero value (not other boolean types + # like "yes") so we can use it in tests more easily. + if {$type eq "save"} { + set data(-multiple) 0 + } elseif {$data(-multiple)} { + set data(-multiple) 1 + } else { + set data(-multiple) 0 + } +} + +proc ::tk::dialog::file::Create {w class} { + set dataName [lindex [split $w .] end] + upvar ::tk::dialog::file::$dataName data + variable ::tk::Priv + global tk_library + + toplevel $w -class $class + if {[tk windowingsystem] eq "x11"} {wm attributes $w -type dialog} + pack [ttk::frame $w.contents] -expand 1 -fill both + #set w $w.contents + + # f1: the frame with the directory option menu + # + set f1 [ttk::frame $w.contents.f1] + bind [::tk::AmpWidget ttk::label $f1.lab -text [mc "&Directory:"]] \ + <> [list focus $f1.menu] + + set data(dirMenuBtn) $f1.menu + if {![info exists data(selectPath)]} { + set data(selectPath) "" + } + set data(dirMenu) $f1.menu.menu + ttk::menubutton $f1.menu -menu $data(dirMenu) -direction flush \ + -textvariable [format %s(selectPath) ::tk::dialog::file::$dataName] + [menu $data(dirMenu) -tearoff 0] add radiobutton -label "" -variable \ + [format %s(selectPath) ::tk::dialog::file::$dataName] + set data(upBtn) [ttk::button $f1.up] + if {![info exists Priv(updirImage)]} { + set Priv(updirImage) [image create bitmap -data { +#define updir_width 28 +#define updir_height 16 +static char updir_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x80, 0x1f, 0x00, 0x00, 0x40, 0x20, 0x00, 0x00, + 0x20, 0x40, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x01, 0x10, 0x00, 0x00, 0x01, + 0x10, 0x02, 0x00, 0x01, 0x10, 0x07, 0x00, 0x01, 0x90, 0x0f, 0x00, 0x01, + 0x10, 0x02, 0x00, 0x01, 0x10, 0x02, 0x00, 0x01, 0x10, 0x02, 0x00, 0x01, + 0x10, 0xfe, 0x07, 0x01, 0x10, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, 0x01, + 0xf0, 0xff, 0xff, 0x01};}] + } + $data(upBtn) configure -image $Priv(updirImage) + + $f1.menu configure -takefocus 1;# -highlightthickness 2 + + pack $data(upBtn) -side right -padx 4 -fill both + pack $f1.lab -side left -padx 4 -fill both + pack $f1.menu -expand yes -fill both -padx 4 + + # data(icons): the IconList that list the files and directories. + # + if {$class eq "TkFDialog"} { + if { $data(-multiple) } { + set fNameCaption [mc "File &names:"] + } else { + set fNameCaption [mc "File &name:"] + } + set fTypeCaption [mc "Files of &type:"] + set iconListCommand [list ::tk::dialog::file::OkCmd $w] + } else { + set fNameCaption [mc "&Selection:"] + set iconListCommand [list ::tk::dialog::file::chooseDir::DblClick $w] + } + set data(icons) [::tk::IconList $w.contents.icons \ + -command $iconListCommand -multiple $data(-multiple)] + bind $data(icons) <> \ + [list ::tk::dialog::file::ListBrowse $w] + + # f2: the frame with the OK button, cancel button, "file name" field + # and file types field. + # + set f2 [ttk::frame $w.contents.f2] + bind [::tk::AmpWidget ttk::label $f2.lab -text $fNameCaption -anchor e]\ + <> [list focus $f2.ent] + # -pady 0 + set data(ent) [ttk::entry $f2.ent] + + # The font to use for the icons. The default Canvas font on Unix + # is just deviant. + set ::tk::$w.contents.icons(font) [$data(ent) cget -font] + + # Make the file types bits only if this is a File Dialog + if {$class eq "TkFDialog"} { + set data(typeMenuLab) [::tk::AmpWidget ttk::label $f2.lab2 \ + -text $fTypeCaption -anchor e] + # -pady [$f2.lab cget -pady] + set data(typeMenuBtn) [ttk::menubutton $f2.menu \ + -menu $f2.menu.m] + # -indicatoron 1 + set data(typeMenu) [menu $data(typeMenuBtn).m -tearoff 0] + # $data(typeMenuBtn) configure -takefocus 1 -relief raised -anchor w + bind $data(typeMenuLab) <> [list \ + focus $data(typeMenuBtn)] + } + + # The hidden button is displayed when ::tk::dialog::file::showHiddenBtn + # is true. Create it disabled so the binding doesn't trigger if it + # isn't shown. + if {$class eq "TkFDialog"} { + set text [mc "Show &Hidden Files and Directories"] + } else { + set text [mc "Show &Hidden Directories"] + } + set data(hiddenBtn) [::tk::AmpWidget ttk::checkbutton $f2.hidden \ + -text $text -state disabled \ + -variable ::tk::dialog::file::showHiddenVar \ + -command [list ::tk::dialog::file::UpdateWhenIdle $w]] +# -anchor w -padx 3 + + # the okBtn is created after the typeMenu so that the keyboard traversal + # is in the right order, and add binding so that we find out when the + # dialog is destroyed by the user (added here instead of to the overall + # window so no confusion about how much gets called; exactly + # once will do). [Bug 987169] + + set data(okBtn) [::tk::AmpWidget ttk::button $f2.ok \ + -text [mc "&OK"] -default active];# -pady 3] + bind $data(okBtn) [list ::tk::dialog::file::Destroyed $w] + set data(cancelBtn) [::tk::AmpWidget ttk::button $f2.cancel \ + -text [mc "&Cancel"] -default normal];# -pady 3] + + # grid the widgets in f2 + # + grid $f2.lab $f2.ent $data(okBtn) -padx 4 -pady 3 -sticky ew + grid configure $f2.ent -padx 2 + if {$class eq "TkFDialog"} { + grid $data(typeMenuLab) $data(typeMenuBtn) $data(cancelBtn) \ + -padx 4 -sticky ew + grid configure $data(typeMenuBtn) -padx 0 + grid $data(hiddenBtn) -columnspan 2 -padx 4 -sticky ew + } else { + grid $data(hiddenBtn) - $data(cancelBtn) -padx 4 -sticky ew + } + grid columnconfigure $f2 1 -weight 1 + + # Pack all the frames together. We are done with widget construction. + # + pack $f1 -side top -fill x -pady 4 + pack $f2 -side bottom -pady 4 -fill x + pack $data(icons) -expand yes -fill both -padx 4 -pady 1 + + # Set up the event handlers that are common to Directory and File Dialogs + # + + wm protocol $w WM_DELETE_WINDOW [list ::tk::dialog::file::CancelCmd $w] + $data(upBtn) configure -command [list ::tk::dialog::file::UpDirCmd $w] + $data(cancelBtn) configure -command [list ::tk::dialog::file::CancelCmd $w] + bind $w [list $data(cancelBtn) invoke] + bind $w [list tk::AltKeyInDialog $w %A] + + # Set up event handlers specific to File or Directory Dialogs + # + if {$class eq "TkFDialog"} { + bind $data(ent) [list ::tk::dialog::file::ActivateEnt $w] + $data(okBtn) configure -command [list ::tk::dialog::file::OkCmd $w] + bind $w [format { + if {[%s cget -state] eq "normal"} { + focus %s + } + } $data(typeMenuBtn) $data(typeMenuBtn)] + } else { + set okCmd [list ::tk::dialog::file::chooseDir::OkCmd $w] + bind $data(ent) $okCmd + $data(okBtn) configure -command $okCmd + bind $w [list focus $data(ent)] + bind $w [list $data(okBtn) invoke] + } + bind $w [list $data(hiddenBtn) invoke] + bind $data(ent) [list ::tk::dialog::file::CompleteEnt $w] + + # Build the focus group for all the entries + # + ::tk::FocusGroup_Create $w + ::tk::FocusGroup_BindIn $w $data(ent) [list \ + ::tk::dialog::file::EntFocusIn $w] + ::tk::FocusGroup_BindOut $w $data(ent) [list \ + ::tk::dialog::file::EntFocusOut $w] +} + +# ::tk::dialog::file::SetSelectMode -- +# +# Set the select mode of the dialog to single select or multi-select. +# +# Arguments: +# w The dialog path. +# multi 1 if the dialog is multi-select; 0 otherwise. +# +# Results: +# None. + +proc ::tk::dialog::file::SetSelectMode {w multi} { + set dataName __tk_filedialog + upvar ::tk::dialog::file::$dataName data + if { $multi } { + set fNameCaption [mc "File &names:"] + } else { + set fNameCaption [mc "File &name:"] + } + set iconListCommand [list ::tk::dialog::file::OkCmd $w] + ::tk::SetAmpText $w.contents.f2.lab $fNameCaption + ::tk::IconList_Config $data(icons) \ + [list -multiple $multi -command $iconListCommand] + return +} + +# ::tk::dialog::file::UpdateWhenIdle -- +# +# Creates an idle event handler which updates the dialog in idle +# time. This is important because loading the directory may take a long +# time and we don't want to load the same directory for multiple times +# due to multiple concurrent events. +# +proc ::tk::dialog::file::UpdateWhenIdle {w} { + upvar ::tk::dialog::file::[winfo name $w] data + + if {[info exists data(updateId)]} { + return + } else { + set data(updateId) [after idle [list ::tk::dialog::file::Update $w]] + } +} + +# ::tk::dialog::file::Update -- +# +# Loads the files and directories into the IconList widget. Also +# sets up the directory option menu for quick access to parent +# directories. +# +proc ::tk::dialog::file::Update {w} { + + # This proc may be called within an idle handler. Make sure that the + # window has not been destroyed before this proc is called + if {![winfo exists $w]} { + return + } + set class [winfo class $w] + if {($class ne "TkFDialog") && ($class ne "TkChooseDir")} { + return + } + + set dataName [winfo name $w] + upvar ::tk::dialog::file::$dataName data + variable ::tk::Priv + global tk_library + unset -nocomplain data(updateId) + + if {![info exists Priv(folderImage)]} { + set Priv(folderImage) [image create photo -data { +R0lGODlhEAAMAKEAAAD//wAAAPD/gAAAACH5BAEAAAAALAAAAAAQAAwAAAIghINhyycvVFsB +QtmS3rjaH1Hg141WaT5ouprt2HHcUgAAOw==}] + set Priv(fileImage) [image create photo -data { +R0lGODlhDAAMAKEAALLA3AAAAP//8wAAACH5BAEAAAAALAAAAAAMAAwAAAIgRI4Ha+IfWHsO +rSASvJTGhnhcV3EJlo3kh53ltF5nAhQAOw==}] + } + set folder $Priv(folderImage) + set file $Priv(fileImage) + + set appPWD [pwd] + if {[catch { + cd $data(selectPath) + }]} { + # We cannot change directory to $data(selectPath). $data(selectPath) + # should have been checked before ::tk::dialog::file::Update is called, so + # we normally won't come to here. Anyways, give an error and abort + # action. + tk_messageBox -type ok -parent $w -icon warning -message \ + [mc "Cannot change to the directory \"%1\$s\".\nPermission denied." $data(selectPath)] + cd $appPWD + return + } + + # Turn on the busy cursor. BUG?? We haven't disabled X events, though, + # so the user may still click and cause havoc ... + # + set entCursor [$data(ent) cget -cursor] + set dlgCursor [$w cget -cursor] + $data(ent) configure -cursor watch + $w configure -cursor watch + update idletasks + + ::tk::IconList_DeleteAll $data(icons) + + set showHidden $::tk::dialog::file::showHiddenVar + + # Make the dir list. Note that using an explicit [pwd] (instead of '.') is + # better in some VFS cases. + ::tk::IconList_Add $data(icons) $folder [GlobFiltered [pwd] d 1] + + if {$class eq "TkFDialog"} { + # Make the file list if this is a File Dialog, selecting all but + # 'd'irectory type files. + # + ::tk::IconList_Add $data(icons) $file \ + [GlobFiltered [pwd] {f b c l p s}] + } + + ::tk::IconList_Arrange $data(icons) + + # Update the Directory: option menu + # + set list "" + set dir "" + foreach subdir [file split $data(selectPath)] { + set dir [file join $dir $subdir] + lappend list $dir + } + + $data(dirMenu) delete 0 end + set var [format %s(selectPath) ::tk::dialog::file::$dataName] + foreach path $list { + $data(dirMenu) add command -label $path -command [list set $var $path] + } + + # Restore the PWD to the application's PWD + # + cd $appPWD + + if {$class eq "TkFDialog"} { + # Restore the Open/Save Button if this is a File Dialog + # + if {$data(type) eq "open"} { + ::tk::SetAmpText $data(okBtn) [mc "&Open"] + } else { + ::tk::SetAmpText $data(okBtn) [mc "&Save"] + } + } + + # turn off the busy cursor. + # + $data(ent) configure -cursor $entCursor + $w configure -cursor $dlgCursor +} + +# ::tk::dialog::file::SetPathSilently -- +# +# Sets data(selectPath) without invoking the trace procedure +# +proc ::tk::dialog::file::SetPathSilently {w path} { + upvar ::tk::dialog::file::[winfo name $w] data + + trace remove variable data(selectPath) write [list ::tk::dialog::file::SetPath $w] + set data(selectPath) $path + trace add variable data(selectPath) write [list ::tk::dialog::file::SetPath $w] +} + + +# This proc gets called whenever data(selectPath) is set +# +proc ::tk::dialog::file::SetPath {w name1 name2 op} { + if {[winfo exists $w]} { + upvar ::tk::dialog::file::[winfo name $w] data + UpdateWhenIdle $w + # On directory dialogs, we keep the entry in sync with the currentdir. + if {[winfo class $w] eq "TkChooseDir"} { + $data(ent) delete 0 end + $data(ent) insert end $data(selectPath) + } + } +} + +# This proc gets called whenever data(filter) is set +# +proc ::tk::dialog::file::SetFilter {w type} { + upvar ::tk::dialog::file::[winfo name $w] data + upvar ::tk::$data(icons) icons + + set data(filterType) $type + set data(filter) [lindex $type 1] + $data(typeMenuBtn) configure -text [lindex $type 0] ;#-indicatoron 1 + + # If we aren't using a default extension, use the one suppled + # by the filter. + if {![info exists data(extUsed)]} { + if {[string length $data(-defaultextension)]} { + set data(extUsed) 1 + } else { + set data(extUsed) 0 + } + } + + if {!$data(extUsed)} { + # Get the first extension in the list that matches {^\*\.\w+$} + # and remove all * from the filter. + set index [lsearch -regexp $data(filter) {^\*\.\w+$}] + if {$index >= 0} { + set data(-defaultextension) \ + [string trimleft [lindex $data(filter) $index] "*"] + } else { + # Couldn't find anything! Reset to a safe default... + set data(-defaultextension) "" + } + } + + $icons(sbar) set 0.0 0.0 + + UpdateWhenIdle $w +} + +# tk::dialog::file::ResolveFile -- +# +# Interpret the user's text input in a file selection dialog. +# Performs: +# +# (1) ~ substitution +# (2) resolve all instances of . and .. +# (3) check for non-existent files/directories +# (4) check for chdir permissions +# (5) conversion of environment variable references to their +# contents (once only) +# +# Arguments: +# context: the current directory you are in +# text: the text entered by the user +# defaultext: the default extension to add to files with no extension +# expandEnv: whether to expand environment variables (yes by default) +# +# Return vaue: +# [list $flag $directory $file] +# +# flag = OK : valid input +# = PATTERN : valid directory/pattern +# = PATH : the directory does not exist +# = FILE : the directory exists by the file doesn't +# exist +# = CHDIR : Cannot change to the directory +# = ERROR : Invalid entry +# +# directory : valid only if flag = OK or PATTERN or FILE +# file : valid only if flag = OK or PATTERN +# +# directory may not be the same as context, because text may contain +# a subdirectory name +# +proc ::tk::dialog::file::ResolveFile {context text defaultext {expandEnv 1}} { + set appPWD [pwd] + + set path [JoinFile $context $text] + + # If the file has no extension, append the default. Be careful not + # to do this for directories, otherwise typing a dirname in the box + # will give back "dirname.extension" instead of trying to change dir. + if { + ![file isdirectory $path] && ([file ext $path] eq "") && + ![string match {$*} [file tail $path]] + } then { + set path "$path$defaultext" + } + + if {[catch {file exists $path}]} { + # This "if" block can be safely removed if the following code + # stop generating errors. + # + # file exists ~nonsuchuser + # + return [list ERROR $path ""] + } + + if {[file exists $path]} { + if {[file isdirectory $path]} { + if {[catch {cd $path}]} { + return [list CHDIR $path ""] + } + set directory [pwd] + set file "" + set flag OK + cd $appPWD + } else { + if {[catch {cd [file dirname $path]}]} { + return [list CHDIR [file dirname $path] ""] + } + set directory [pwd] + set file [file tail $path] + set flag OK + cd $appPWD + } + } else { + set dirname [file dirname $path] + if {[file exists $dirname]} { + if {[catch {cd $dirname}]} { + return [list CHDIR $dirname ""] + } + set directory [pwd] + cd $appPWD + set file [file tail $path] + # It's nothing else, so check to see if it is an env-reference + if {$expandEnv && [string match {$*} $file]} { + set var [string range $file 1 end] + if {[info exist ::env($var)]} { + return [ResolveFile $context $::env($var) $defaultext 0] + } + } + if {[regexp {[*?]} $file]} { + set flag PATTERN + } else { + set flag FILE + } + } else { + set directory $dirname + set file [file tail $path] + set flag PATH + # It's nothing else, so check to see if it is an env-reference + if {$expandEnv && [string match {$*} $file]} { + set var [string range $file 1 end] + if {[info exist ::env($var)]} { + return [ResolveFile $context $::env($var) $defaultext 0] + } + } + } + } + + return [list $flag $directory $file] +} + + +# Gets called when the entry box gets keyboard focus. We clear the selection +# from the icon list . This way the user can be certain that the input in the +# entry box is the selection. +# +proc ::tk::dialog::file::EntFocusIn {w} { + upvar ::tk::dialog::file::[winfo name $w] data + + if {[$data(ent) get] ne ""} { + $data(ent) selection range 0 end + $data(ent) icursor end + } else { + $data(ent) selection clear + } + + if {[winfo class $w] eq "TkFDialog"} { + # If this is a File Dialog, make sure the buttons are labeled right. + if {$data(type) eq "open"} { + ::tk::SetAmpText $data(okBtn) [mc "&Open"] + } else { + ::tk::SetAmpText $data(okBtn) [mc "&Save"] + } + } +} + +proc ::tk::dialog::file::EntFocusOut {w} { + upvar ::tk::dialog::file::[winfo name $w] data + + $data(ent) selection clear +} + + +# Gets called when user presses Return in the "File name" entry. +# +proc ::tk::dialog::file::ActivateEnt {w} { + upvar ::tk::dialog::file::[winfo name $w] data + + set text [$data(ent) get] + if {$data(-multiple)} { + foreach t $text { + VerifyFileName $w $t + } + } else { + VerifyFileName $w $text + } +} + +# Verification procedure +# +proc ::tk::dialog::file::VerifyFileName {w filename} { + upvar ::tk::dialog::file::[winfo name $w] data + + set list [ResolveFile $data(selectPath) $filename $data(-defaultextension)] + foreach {flag path file} $list { + break + } + + switch -- $flag { + OK { + if {$file eq ""} { + # user has entered an existing (sub)directory + set data(selectPath) $path + $data(ent) delete 0 end + } else { + SetPathSilently $w $path + if {$data(-multiple)} { + lappend data(selectFile) $file + } else { + set data(selectFile) $file + } + Done $w + } + } + PATTERN { + set data(selectPath) $path + set data(filter) $file + } + FILE { + if {$data(type) eq "open"} { + tk_messageBox -icon warning -type ok -parent $w \ + -message [mc "File \"%1\$s\" does not exist." \ + [file join $path $file]] + $data(ent) selection range 0 end + $data(ent) icursor end + } else { + SetPathSilently $w $path + if {$data(-multiple)} { + lappend data(selectFile) $file + } else { + set data(selectFile) $file + } + Done $w + } + } + PATH { + tk_messageBox -icon warning -type ok -parent $w \ + -message [mc "Directory \"%1\$s\" does not exist." $path] + $data(ent) selection range 0 end + $data(ent) icursor end + } + CHDIR { + tk_messageBox -type ok -parent $w -icon warning -message \ + [mc "Cannot change to the directory\ + \"%1\$s\".\nPermission denied." $path] + $data(ent) selection range 0 end + $data(ent) icursor end + } + ERROR { + tk_messageBox -type ok -parent $w -icon warning -message \ + [mc "Invalid file name \"%1\$s\"." $path] + $data(ent) selection range 0 end + $data(ent) icursor end + } + } +} + +# Gets called when user presses the Alt-s or Alt-o keys. +# +proc ::tk::dialog::file::InvokeBtn {w key} { + upvar ::tk::dialog::file::[winfo name $w] data + + if {[$data(okBtn) cget -text] eq $key} { + $data(okBtn) invoke + } +} + +# Gets called when user presses the "parent directory" button +# +proc ::tk::dialog::file::UpDirCmd {w} { + upvar ::tk::dialog::file::[winfo name $w] data + + if {$data(selectPath) ne "/"} { + set data(selectPath) [file dirname $data(selectPath)] + } +} + +# Join a file name to a path name. The "file join" command will break +# if the filename begins with ~ +# +proc ::tk::dialog::file::JoinFile {path file} { + if {[string match {~*} $file] && [file exists $path/$file]} { + return [file join $path ./$file] + } else { + return [file join $path $file] + } +} + +# Gets called when user presses the "OK" button +# +proc ::tk::dialog::file::OkCmd {w} { + upvar ::tk::dialog::file::[winfo name $w] data + + set filenames {} + foreach item [::tk::IconList_CurSelection $data(icons)] { + lappend filenames [::tk::IconList_Get $data(icons) $item] + } + + if {([llength $filenames] && !$data(-multiple)) || \ + ($data(-multiple) && ([llength $filenames] == 1))} { + set filename [lindex $filenames 0] + set file [JoinFile $data(selectPath) $filename] + if {[file isdirectory $file]} { + ListInvoke $w [list $filename] + return + } + } + + ActivateEnt $w +} + +# Gets called when user presses the "Cancel" button +# +proc ::tk::dialog::file::CancelCmd {w} { + upvar ::tk::dialog::file::[winfo name $w] data + variable ::tk::Priv + + bind $data(okBtn) {} + set Priv(selectFilePath) "" +} + +# Gets called when user destroys the dialog directly [Bug 987169] +# +proc ::tk::dialog::file::Destroyed {w} { + upvar ::tk::dialog::file::[winfo name $w] data + variable ::tk::Priv + + set Priv(selectFilePath) "" +} + +# Gets called when user browses the IconList widget (dragging mouse, arrow +# keys, etc) +# +proc ::tk::dialog::file::ListBrowse {w} { + upvar ::tk::dialog::file::[winfo name $w] data + + set text {} + foreach item [::tk::IconList_CurSelection $data(icons)] { + lappend text [::tk::IconList_Get $data(icons) $item] + } + if {[llength $text] == 0} { + return + } + if {$data(-multiple)} { + set newtext {} + foreach file $text { + set fullfile [JoinFile $data(selectPath) $file] + if { ![file isdirectory $fullfile] } { + lappend newtext $file + } + } + set text $newtext + set isDir 0 + } else { + set text [lindex $text 0] + set file [JoinFile $data(selectPath) $text] + set isDir [file isdirectory $file] + } + if {!$isDir} { + $data(ent) delete 0 end + $data(ent) insert 0 $text + + if {[winfo class $w] eq "TkFDialog"} { + if {$data(type) eq "open"} { + ::tk::SetAmpText $data(okBtn) [mc "&Open"] + } else { + ::tk::SetAmpText $data(okBtn) [mc "&Save"] + } + } + } elseif {[winfo class $w] eq "TkFDialog"} { + ::tk::SetAmpText $data(okBtn) [mc "&Open"] + } +} + +# Gets called when user invokes the IconList widget (double-click, +# Return key, etc) +# +proc ::tk::dialog::file::ListInvoke {w filenames} { + upvar ::tk::dialog::file::[winfo name $w] data + + if {[llength $filenames] == 0} { + return + } + + set file [JoinFile $data(selectPath) [lindex $filenames 0]] + + set class [winfo class $w] + if {$class eq "TkChooseDir" || [file isdirectory $file]} { + set appPWD [pwd] + if {[catch {cd $file}]} { + tk_messageBox -type ok -parent $w -icon warning -message \ + [mc "Cannot change to the directory \"%1\$s\".\nPermission denied." $file] + } else { + cd $appPWD + set data(selectPath) $file + } + } else { + if {$data(-multiple)} { + set data(selectFile) $filenames + } else { + set data(selectFile) $file + } + Done $w + } +} + +# ::tk::dialog::file::Done -- +# +# Gets called when user has input a valid filename. Pops up a +# dialog box to confirm selection when necessary. Sets the +# tk::Priv(selectFilePath) variable, which will break the "vwait" +# loop in ::tk::dialog::file:: and return the selected filename to the +# script that calls tk_getOpenFile or tk_getSaveFile +# +proc ::tk::dialog::file::Done {w {selectFilePath ""}} { + upvar ::tk::dialog::file::[winfo name $w] data + variable ::tk::Priv + + if {$selectFilePath eq ""} { + if {$data(-multiple)} { + set selectFilePath {} + foreach f $data(selectFile) { + lappend selectFilePath [JoinFile $data(selectPath) $f] + } + } else { + set selectFilePath [JoinFile $data(selectPath) $data(selectFile)] + } + + set Priv(selectFile) $data(selectFile) + set Priv(selectPath) $data(selectPath) + + if {($data(type) eq "save") && $data(-confirmoverwrite) && [file exists $selectFilePath]} { + set reply [tk_messageBox -icon warning -type yesno -parent $w \ + -message [mc "File \"%1\$s\" already exists.\nDo you want\ + to overwrite it?" $selectFilePath]] + if {$reply eq "no"} { + return + } + } + if {[info exists data(-typevariable)] && $data(-typevariable) ne "" + && [info exists data(-filetypes)] && [llength $data(-filetypes)] + && [info exists data(filterType)] && $data(filterType) ne ""} { + upvar #0 $data(-typevariable) typeVariable + set typeVariable [lindex $data(filterType) 0] + } + } + bind $data(okBtn) {} + set Priv(selectFilePath) $selectFilePath +} + +proc ::tk::dialog::file::GlobFiltered {dir type {overrideFilter 0}} { + # $dir == where to search + # $type == what to look for ('d' or 'f b c l p s') + # $overrideFilter == whether to ignore the filter + + variable showHiddenVar + upvar 1 data(filter) filter + + if {$filter eq "*" || $overrideFilter} { + set patterns [list *] + if {$showHiddenVar} { + lappend patterns .* + } + } elseif {[string is list $filter]} { + set patterns $filter + } else { + # Invalid list; assume we can use non-whitespace sequences as words + set patterns [regexp -inline -all {\S+} $filter] + } + + set opts [list -tails -directory $dir -type $type -nocomplain] + + set result {} + catch { + # We have a catch because we might have a really bad pattern (e.g., + # with an unbalanced brace); even [glob -nocomplain] doesn't like it. + # Using a catch ensures that it just means we match nothing instead of + # throwing a nasty error at the user... + foreach f [glob {*}$opts -- {*}$patterns] { + if {$f eq "." || $f eq ".."} { + continue + } + # See ticket [1641721], $f might be a link pointing to a dir + if {$type != "d" && [file isdir [file join $dir $f]]} { + continue + } + lappend result $f + } + } + return [lsort -dictionary -unique $result] +} + +proc ::tk::dialog::file::CompleteEnt {w} { + upvar ::tk::dialog::file::[winfo name $w] data + set f [$data(ent) get] + if {$data(-multiple)} { + if {![string is list $f] || [llength $f] != 1} { + return -code break + } + set f [lindex $f 0] + } + + # Get list of matching filenames and dirnames + set files [if {[winfo class $w] eq "TkFDialog"} { + GlobFiltered $data(selectPath) {f b c l p s} + }] + set dirs2 {} + foreach d [GlobFiltered $data(selectPath) d] {lappend dirs2 $d/} + + set targets [concat \ + [lsearch -glob -all -inline $files $f*] \ + [lsearch -glob -all -inline $dirs2 $f*]] + + if {[llength $targets] == 1} { + # We have a winner! + set f [lindex $targets 0] + } elseif {$f in $targets || [llength $targets] == 0} { + if {[string length $f] > 0} { + bell + } + return + } elseif {[llength $targets] > 1} { + # Multiple possibles + if {[string length $f] == 0} { + return + } + set t0 [lindex $targets 0] + for {set len [string length $t0]} {$len>0} {} { + set allmatch 1 + foreach s $targets { + if {![string equal -length $len $s $t0]} { + set allmatch 0 + break + } + } + incr len -1 + if {$allmatch} break + } + set f [string range $t0 0 $len] + } + + if {$data(-multiple)} { + set f [list $f] + } + $data(ent) delete 0 end + $data(ent) insert 0 $f + return -code break +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/altTheme.tcl b/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/altTheme.tcl new file mode 100644 index 00000000..d57227ce --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/altTheme.tcl @@ -0,0 +1,101 @@ +# +# Ttk widget set: Alternate theme +# + +namespace eval ttk::theme::alt { + + variable colors + array set colors { + -frame "#d9d9d9" + -window "#ffffff" + -darker "#c3c3c3" + -border "#414141" + -activebg "#ececec" + -disabledfg "#a3a3a3" + -selectbg "#4a6984" + -selectfg "#ffffff" + } + + ttk::style theme settings alt { + + ttk::style configure "." \ + -background $colors(-frame) \ + -foreground black \ + -troughcolor $colors(-darker) \ + -bordercolor $colors(-border) \ + -selectbackground $colors(-selectbg) \ + -selectforeground $colors(-selectfg) \ + -font TkDefaultFont \ + ; + + ttk::style map "." -background \ + [list disabled $colors(-frame) active $colors(-activebg)] ; + ttk::style map "." -foreground [list disabled $colors(-disabledfg)] ; + ttk::style map "." -embossed [list disabled 1] ; + + ttk::style configure TButton \ + -anchor center -width -11 -padding "1 1" \ + -relief raised -shiftrelief 1 \ + -highlightthickness 1 -highlightcolor $colors(-frame) + + ttk::style map TButton -relief { + {pressed !disabled} sunken + {active !disabled} raised + } -highlightcolor {alternate black} + + ttk::style configure TCheckbutton -indicatorcolor "#ffffff" -padding 2 + ttk::style configure TRadiobutton -indicatorcolor "#ffffff" -padding 2 + ttk::style map TCheckbutton -indicatorcolor \ + [list disabled $colors(-frame) pressed $colors(-frame)] + ttk::style map TRadiobutton -indicatorcolor \ + [list disabled $colors(-frame) pressed $colors(-frame)] + + ttk::style configure TMenubutton \ + -width -11 -padding "3 3" -relief raised + + ttk::style configure TEntry -padding 1 + ttk::style map TEntry -fieldbackground \ + [list readonly $colors(-frame) disabled $colors(-frame)] + ttk::style configure TCombobox -padding 1 + ttk::style map TCombobox -fieldbackground \ + [list readonly $colors(-frame) disabled $colors(-frame)] + ttk::style configure ComboboxPopdownFrame \ + -relief solid -borderwidth 1 + + ttk::style configure TSpinbox -arrowsize 10 -padding {2 0 10 0} + ttk::style map TSpinbox -fieldbackground \ + [list readonly $colors(-frame) disabled $colors(-frame)] \ + -arrowcolor [list disabled $colors(-disabledfg)] + + ttk::style configure Toolbutton -relief flat -padding 2 + ttk::style map Toolbutton -relief \ + {disabled flat selected sunken pressed sunken active raised} + ttk::style map Toolbutton -background \ + [list pressed $colors(-darker) active $colors(-activebg)] + + ttk::style configure TScrollbar -relief raised + + ttk::style configure TLabelframe -relief groove -borderwidth 2 + + ttk::style configure TNotebook -tabmargins {2 2 1 0} + ttk::style configure TNotebook.Tab \ + -padding {4 2} -background $colors(-darker) + ttk::style map TNotebook.Tab \ + -background [list selected $colors(-frame)] \ + -expand [list selected {2 2 1 0}] \ + ; + + # Treeview: + ttk::style configure Heading -font TkHeadingFont -relief raised + ttk::style configure Treeview -background $colors(-window) + ttk::style map Treeview \ + -background [list selected $colors(-selectbg)] \ + -foreground [list selected $colors(-selectfg)] ; + + ttk::style configure TScale \ + -groovewidth 4 -troughrelief sunken \ + -sliderwidth raised -borderwidth 2 + ttk::style configure TProgressbar \ + -background $colors(-selectbg) -borderwidth 0 + } +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/aquaTheme.tcl b/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/aquaTheme.tcl new file mode 100644 index 00000000..fa0fa12c --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/aquaTheme.tcl @@ -0,0 +1,59 @@ +# +# Aqua theme (OSX native look and feel) +# + +namespace eval ttk::theme::aqua { + ttk::style theme settings aqua { + + ttk::style configure . \ + -font TkDefaultFont \ + -background systemWindowBody \ + -foreground systemModelessDialogActiveText \ + -selectbackground systemHighlight \ + -selectforeground systemModelessDialogActiveText \ + -selectborderwidth 0 \ + -insertwidth 1 + + ttk::style map . \ + -foreground {disabled systemModelessDialogInactiveText + background systemModelessDialogInactiveText} \ + -selectbackground {background systemHighlightSecondary + !focus systemHighlightSecondary} \ + -selectforeground {background systemModelessDialogInactiveText + !focus systemDialogActiveText} + + # Workaround for #1100117: + # Actually, on Aqua we probably shouldn't stipple images in + # disabled buttons even if it did work... + ttk::style configure . -stipple {} + + ttk::style configure TButton -anchor center -width -6 + ttk::style configure Toolbutton -padding 4 + + ttk::style configure TNotebook -tabmargins {10 0} -tabposition n + ttk::style configure TNotebook -padding {18 8 18 17} + ttk::style configure TNotebook.Tab -padding {12 3 12 2} + + # Combobox: + ttk::style configure TCombobox -postoffset {5 -2 -10 0} + + # Treeview: + ttk::style configure Heading -font TkHeadingFont + ttk::style configure Treeview -rowheight 18 -background White + ttk::style map Treeview \ + -background {{selected background} systemHighlightSecondary + selected systemHighlight} + + # Enable animation for ttk::progressbar widget: + ttk::style configure TProgressbar -period 100 -maxphase 255 + + # For Aqua, labelframe labels should appear outside the border, + # with a 14 pixel inset and 4 pixels spacing between border and label + # (ref: Apple Human Interface Guidelines / Controls / Grouping Controls) + # + ttk::style configure TLabelframe \ + -labeloutside true -labelmargins {14 0 14 4} + + # TODO: panedwindow sashes should be 9 pixels (HIG:Controls:Split Views) + } +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/button.tcl b/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/button.tcl new file mode 100644 index 00000000..9f2cec72 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/button.tcl @@ -0,0 +1,83 @@ +# +# Bindings for Buttons, Checkbuttons, and Radiobuttons. +# +# Notes: , only control the "pressed" +# state; widgets remain "active" if the pointer is dragged out. +# This doesn't seem to be conventional, but it's a nice way +# to provide extra feedback while the grab is active. +# (If the button is released off the widget, the grab deactivates and +# we get a event then, which turns off the "active" state) +# +# Normally, and events are +# delivered to the widget which received the initial +# event. However, Tk [grab]s (#1223103) and menu interactions +# (#1222605) can interfere with this. To guard against spurious +# events, the binding only sets +# the pressed state if the button is currently active. +# + +namespace eval ttk::button {} + +bind TButton { %W instate !disabled {%W state active} } +bind TButton { %W state !active } +bind TButton { ttk::button::activate %W } +bind TButton <> { ttk::button::activate %W } + +bind TButton \ + { %W instate !disabled { ttk::clickToFocus %W; %W state pressed } } +bind TButton \ + { %W instate pressed { %W state !pressed; %W instate !disabled { %W invoke } } } +bind TButton \ + { %W state !pressed } +bind TButton \ + { %W instate {active !disabled} { %W state pressed } } + +# Checkbuttons and Radiobuttons have the same bindings as Buttons: +# +ttk::copyBindings TButton TCheckbutton +ttk::copyBindings TButton TRadiobutton + +# ...plus a few more: + +bind TRadiobutton { ttk::button::RadioTraverse %W -1 } +bind TRadiobutton { ttk::button::RadioTraverse %W +1 } + +# bind TCheckbutton { %W select } +# bind TCheckbutton { %W deselect } + +# activate -- +# Simulate a button press: temporarily set the state to 'pressed', +# then invoke the button. +# +proc ttk::button::activate {w} { + $w instate disabled { return } + set oldState [$w state pressed] + update idletasks; after 100 ;# block event loop to avoid reentrancy + $w state $oldState + $w invoke +} + +# RadioTraverse -- up/down keyboard traversal for radiobutton groups. +# Set focus to previous/next radiobutton in a group. +# A radiobutton group consists of all the radiobuttons with +# the same parent and -variable; this is a pretty good heuristic +# that works most of the time. +# +proc ttk::button::RadioTraverse {w dir} { + set group [list] + foreach sibling [winfo children [winfo parent $w]] { + if { [winfo class $sibling] eq "TRadiobutton" + && [$sibling cget -variable] eq [$w cget -variable] + && ![$sibling instate disabled] + } { + lappend group $sibling + } + } + + if {![llength $group]} { # Shouldn't happen, but can. + return + } + + set pos [expr {([lsearch -exact $group $w] + $dir) % [llength $group]}] + tk::TabToWindow [lindex $group $pos] +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/clamTheme.tcl b/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/clamTheme.tcl new file mode 100644 index 00000000..f184ea07 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/clamTheme.tcl @@ -0,0 +1,137 @@ +# +# "Clam" theme. +# +# Inspired by the XFCE family of Gnome themes. +# + +namespace eval ttk::theme::clam { + variable colors + array set colors { + -disabledfg "#999999" + -frame "#dcdad5" + -window "#ffffff" + -dark "#cfcdc8" + -darker "#bab5ab" + -darkest "#9e9a91" + -lighter "#eeebe7" + -lightest "#ffffff" + -selectbg "#4a6984" + -selectfg "#ffffff" + } + + ttk::style theme settings clam { + + ttk::style configure "." \ + -background $colors(-frame) \ + -foreground black \ + -bordercolor $colors(-darkest) \ + -darkcolor $colors(-dark) \ + -lightcolor $colors(-lighter) \ + -troughcolor $colors(-darker) \ + -selectbackground $colors(-selectbg) \ + -selectforeground $colors(-selectfg) \ + -selectborderwidth 0 \ + -font TkDefaultFont \ + ; + + ttk::style map "." \ + -background [list disabled $colors(-frame) \ + active $colors(-lighter)] \ + -foreground [list disabled $colors(-disabledfg)] \ + -selectbackground [list !focus $colors(-darkest)] \ + -selectforeground [list !focus white] \ + ; + # -selectbackground [list !focus "#847d73"] + + ttk::style configure TButton \ + -anchor center -width -11 -padding 5 -relief raised + ttk::style map TButton \ + -background [list \ + disabled $colors(-frame) \ + pressed $colors(-darker) \ + active $colors(-lighter)] \ + -lightcolor [list pressed $colors(-darker)] \ + -darkcolor [list pressed $colors(-darker)] \ + -bordercolor [list alternate "#000000"] \ + ; + + ttk::style configure Toolbutton \ + -anchor center -padding 2 -relief flat + ttk::style map Toolbutton \ + -relief [list \ + disabled flat \ + selected sunken \ + pressed sunken \ + active raised] \ + -background [list \ + disabled $colors(-frame) \ + pressed $colors(-darker) \ + active $colors(-lighter)] \ + -lightcolor [list pressed $colors(-darker)] \ + -darkcolor [list pressed $colors(-darker)] \ + ; + + ttk::style configure TCheckbutton \ + -indicatorbackground "#ffffff" \ + -indicatormargin {1 1 4 1} \ + -padding 2 ; + ttk::style configure TRadiobutton \ + -indicatorbackground "#ffffff" \ + -indicatormargin {1 1 4 1} \ + -padding 2 ; + ttk::style map TCheckbutton -indicatorbackground \ + [list disabled $colors(-frame) pressed $colors(-frame)] + ttk::style map TRadiobutton -indicatorbackground \ + [list disabled $colors(-frame) pressed $colors(-frame)] + + ttk::style configure TMenubutton \ + -width -11 -padding 5 -relief raised + + ttk::style configure TEntry -padding 1 -insertwidth 1 + ttk::style map TEntry \ + -background [list readonly $colors(-frame)] \ + -bordercolor [list focus $colors(-selectbg)] \ + -lightcolor [list focus "#6f9dc6"] \ + -darkcolor [list focus "#6f9dc6"] \ + ; + + ttk::style configure TCombobox -padding 1 -insertwidth 1 + ttk::style map TCombobox \ + -background [list active $colors(-lighter) \ + pressed $colors(-lighter)] \ + -fieldbackground [list {readonly focus} $colors(-selectbg) \ + readonly $colors(-frame)] \ + -foreground [list {readonly focus} $colors(-selectfg)] \ + ; + ttk::style configure ComboboxPopdownFrame \ + -relief solid -borderwidth 1 + + ttk::style configure TSpinbox -arrowsize 10 -padding {2 0 10 0} + ttk::style map TSpinbox \ + -background [list readonly $colors(-frame)] \ + -arrowcolor [list disabled $colors(-disabledfg)] + + ttk::style configure TNotebook.Tab -padding {6 2 6 2} + ttk::style map TNotebook.Tab \ + -padding [list selected {6 4 6 2}] \ + -background [list selected $colors(-frame) {} $colors(-darker)] \ + -lightcolor [list selected $colors(-lighter) {} $colors(-dark)] \ + ; + + # Treeview: + ttk::style configure Heading \ + -font TkHeadingFont -relief raised -padding {3} + ttk::style configure Treeview -background $colors(-window) + ttk::style map Treeview \ + -background [list selected $colors(-selectbg)] \ + -foreground [list selected $colors(-selectfg)] ; + + ttk::style configure TLabelframe \ + -labeloutside true -labelmargins {0 0 0 4} \ + -borderwidth 2 -relief raised + + ttk::style configure TProgressbar -background $colors(-frame) + + ttk::style configure Sash -sashthickness 6 -gripcount 10 + } +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/classicTheme.tcl b/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/classicTheme.tcl new file mode 100644 index 00000000..7e3eff5d --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/classicTheme.tcl @@ -0,0 +1,108 @@ +# +# "classic" Tk theme. +# +# Implements Tk's traditional Motif-like look and feel. +# + +namespace eval ttk::theme::classic { + + variable colors; array set colors { + -frame "#d9d9d9" + -window "#ffffff" + -activebg "#ececec" + -troughbg "#c3c3c3" + -selectbg "#c3c3c3" + -selectfg "#000000" + -disabledfg "#a3a3a3" + -indicator "#b03060" + } + + ttk::style theme settings classic { + ttk::style configure "." \ + -font TkDefaultFont \ + -background $colors(-frame) \ + -foreground black \ + -selectbackground $colors(-selectbg) \ + -selectforeground $colors(-selectfg) \ + -troughcolor $colors(-troughbg) \ + -indicatorcolor $colors(-frame) \ + -highlightcolor $colors(-frame) \ + -highlightthickness 1 \ + -selectborderwidth 1 \ + -insertwidth 2 \ + ; + + # To match pre-Xft X11 appearance, use: + # ttk::style configure . -font {Helvetica 12 bold} + + ttk::style map "." -background \ + [list disabled $colors(-frame) active $colors(-activebg)] + ttk::style map "." -foreground \ + [list disabled $colors(-disabledfg)] + + ttk::style map "." -highlightcolor [list focus black] + + ttk::style configure TButton \ + -anchor center -padding "3m 1m" -relief raised -shiftrelief 1 + ttk::style map TButton -relief [list {!disabled pressed} sunken] + + ttk::style configure TCheckbutton -indicatorrelief raised + ttk::style map TCheckbutton \ + -indicatorcolor [list \ + pressed $colors(-frame) selected $colors(-indicator)] \ + -indicatorrelief {selected sunken pressed sunken} \ + ; + + ttk::style configure TRadiobutton -indicatorrelief raised + ttk::style map TRadiobutton \ + -indicatorcolor [list \ + pressed $colors(-frame) selected $colors(-indicator)] \ + -indicatorrelief {selected sunken pressed sunken} \ + ; + + ttk::style configure TMenubutton -relief raised -padding "3m 1m" + + ttk::style configure TEntry -relief sunken -padding 1 -font TkTextFont + ttk::style map TEntry -fieldbackground \ + [list readonly $colors(-frame) disabled $colors(-frame)] + ttk::style configure TCombobox -padding 1 + ttk::style map TCombobox -fieldbackground \ + [list readonly $colors(-frame) disabled $colors(-frame)] + ttk::style configure ComboboxPopdownFrame \ + -relief solid -borderwidth 1 + + ttk::style configure TSpinbox -arrowsize 10 -padding {2 0 10 0} + ttk::style map TSpinbox -fieldbackground \ + [list readonly $colors(-frame) disabled $colors(-frame)] + + ttk::style configure TLabelframe -borderwidth 2 -relief groove + + ttk::style configure TScrollbar -relief raised + ttk::style map TScrollbar -relief {{pressed !disabled} sunken} + + ttk::style configure TScale -sliderrelief raised + ttk::style map TScale -sliderrelief {{pressed !disabled} sunken} + + ttk::style configure TProgressbar -background SteelBlue + ttk::style configure TNotebook.Tab \ + -padding {3m 1m} \ + -background $colors(-troughbg) + ttk::style map TNotebook.Tab -background [list selected $colors(-frame)] + + # Treeview: + ttk::style configure Heading -font TkHeadingFont -relief raised + ttk::style configure Treeview -background $colors(-window) + ttk::style map Treeview \ + -background [list selected $colors(-selectbg)] \ + -foreground [list selected $colors(-selectfg)] ; + + # + # Toolbar buttons: + # + ttk::style configure Toolbutton -padding 2 -relief flat -shiftrelief 2 + ttk::style map Toolbutton -relief \ + {disabled flat selected sunken pressed sunken active raised} + ttk::style map Toolbutton -background \ + [list pressed $colors(-troughbg) active $colors(-activebg)] + } +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/combobox.tcl b/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/combobox.tcl new file mode 100644 index 00000000..03821a21 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/combobox.tcl @@ -0,0 +1,456 @@ +# +# Combobox bindings. +# +# <>: +# +# Need to set [wm transient] just before mapping the popdown +# instead of when it's created, in case a containing frame +# has been reparented [#1818441]. +# +# On Windows: setting [wm transient] prevents the parent +# toplevel from becoming inactive when the popdown is posted +# (Tk 8.4.8+) +# +# On X11: WM_TRANSIENT_FOR on override-redirect windows +# may be used by compositing managers and by EWMH-aware +# window managers (even though the older ICCCM spec says +# it's meaningless). +# +# On OSX: [wm transient] does utterly the wrong thing. +# Instead, we use [MacWindowStyle "help" "noActivates hideOnSuspend"]. +# The "noActivates" attribute prevents the parent toplevel +# from deactivating when the popdown is posted, and is also +# necessary for "help" windows to receive mouse events. +# "hideOnSuspend" makes the popdown disappear (resp. reappear) +# when the parent toplevel is deactivated (resp. reactivated). +# (see [#1814778]). Also set [wm resizable 0 0], to prevent +# TkAqua from shrinking the scrollbar to make room for a grow box +# that isn't there. +# +# In order to work around other platform quirks in TkAqua, +# [grab] and [focus] are set in bindings instead of +# immediately after deiconifying the window. +# + +namespace eval ttk::combobox { + variable Values ;# Values($cb) is -listvariable of listbox widget + variable State + set State(entryPress) 0 +} + +### Combobox bindings. +# +# Duplicate the Entry bindings, override if needed: +# + +ttk::copyBindings TEntry TCombobox + +bind TCombobox { ttk::combobox::Post %W } +bind TCombobox { ttk::combobox::Unpost %W } + +bind TCombobox { ttk::combobox::Press "" %W %x %y } +bind TCombobox { ttk::combobox::Press "s" %W %x %y } +bind TCombobox { ttk::combobox::Press "2" %W %x %y } +bind TCombobox { ttk::combobox::Press "3" %W %x %y } +bind TCombobox { ttk::combobox::Drag %W %x } +bind TCombobox { ttk::combobox::Motion %W %x %y } + +ttk::bindMouseWheel TCombobox [list ttk::combobox::Scroll %W] + +bind TCombobox <> { ttk::combobox::TraverseIn %W } + +### Combobox listbox bindings. +# +bind ComboboxListbox { ttk::combobox::LBSelected %W } +bind ComboboxListbox { ttk::combobox::LBSelected %W } +bind ComboboxListbox { ttk::combobox::LBCancel %W } +bind ComboboxListbox { ttk::combobox::LBTab %W next } +bind ComboboxListbox <> { ttk::combobox::LBTab %W prev } +bind ComboboxListbox { ttk::combobox::LBCleanup %W } +bind ComboboxListbox { ttk::combobox::LBHover %W %x %y } +bind ComboboxListbox { focus -force %W } + +switch -- [tk windowingsystem] { + win32 { + # Dismiss listbox when user switches to a different application. + # NB: *only* do this on Windows (see #1814778) + bind ComboboxListbox { ttk::combobox::LBCancel %W } + } +} + +### Combobox popdown window bindings. +# +bind ComboboxPopdown { ttk::combobox::MapPopdown %W } +bind ComboboxPopdown { ttk::combobox::UnmapPopdown %W } +bind ComboboxPopdown \ + { ttk::combobox::Unpost [winfo parent %W] } + +### Option database settings. +# + +option add *TCombobox*Listbox.font TkTextFont +option add *TCombobox*Listbox.relief flat +option add *TCombobox*Listbox.highlightThickness 0 + +## Platform-specific settings. +# +switch -- [tk windowingsystem] { + x11 { + option add *TCombobox*Listbox.background white + } + aqua { + option add *TCombobox*Listbox.borderWidth 0 + } +} + +### Binding procedures. +# + +## Press $mode $x $y -- ButtonPress binding for comboboxes. +# Either post/unpost the listbox, or perform Entry widget binding, +# depending on widget state and location of button press. +# +proc ttk::combobox::Press {mode w x y} { + variable State + + $w instate disabled { return } + + set State(entryPress) [expr { + [$w instate !readonly] + && [string match *textarea [$w identify element $x $y]] + }] + + focus $w + if {$State(entryPress)} { + switch -- $mode { + s { ttk::entry::Shift-Press $w $x ; # Shift } + 2 { ttk::entry::Select $w $x word ; # Double click} + 3 { ttk::entry::Select $w $x line ; # Triple click } + "" - + default { ttk::entry::Press $w $x } + } + } else { + Post $w + } +} + +## Drag -- B1-Motion binding for comboboxes. +# If the initial ButtonPress event was handled by Entry binding, +# perform Entry widget drag binding; otherwise nothing. +# +proc ttk::combobox::Drag {w x} { + variable State + if {$State(entryPress)} { + ttk::entry::Drag $w $x + } +} + +## Motion -- +# Set cursor. +# +proc ttk::combobox::Motion {w x y} { + if { [$w identify $x $y] eq "textarea" + && [$w instate {!readonly !disabled}] + } { + ttk::setCursor $w text + } else { + ttk::setCursor $w "" + } +} + +## TraverseIn -- receive focus due to keyboard navigation +# For editable comboboxes, set the selection and insert cursor. +# +proc ttk::combobox::TraverseIn {w} { + $w instate {!readonly !disabled} { + $w selection range 0 end + $w icursor end + } +} + +## SelectEntry $cb $index -- +# Set the combobox selection in response to a user action. +# +proc ttk::combobox::SelectEntry {cb index} { + $cb current $index + $cb selection range 0 end + $cb icursor end + event generate $cb <> -when mark +} + +## Scroll -- Mousewheel binding +# +proc ttk::combobox::Scroll {cb dir} { + $cb instate disabled { return } + set max [llength [$cb cget -values]] + set current [$cb current] + incr current $dir + if {$max != 0 && $current == $current % $max} { + SelectEntry $cb $current + } +} + +## LBSelected $lb -- Activation binding for listbox +# Set the combobox value to the currently-selected listbox value +# and unpost the listbox. +# +proc ttk::combobox::LBSelected {lb} { + set cb [LBMaster $lb] + LBSelect $lb + Unpost $cb + focus $cb +} + +## LBCancel -- +# Unpost the listbox. +# +proc ttk::combobox::LBCancel {lb} { + Unpost [LBMaster $lb] +} + +## LBTab -- Tab key binding for combobox listbox. +# Set the selection, and navigate to next/prev widget. +# +proc ttk::combobox::LBTab {lb dir} { + set cb [LBMaster $lb] + switch -- $dir { + next { set newFocus [tk_focusNext $cb] } + prev { set newFocus [tk_focusPrev $cb] } + } + + if {$newFocus ne ""} { + LBSelect $lb + Unpost $cb + # The [grab release] call in [Unpost] queues events that later + # re-set the focus (@@@ NOTE: this might not be true anymore). + # Set new focus later: + after 0 [list ttk::traverseTo $newFocus] + } +} + +## LBHover -- binding for combobox listbox. +# Follow selection on mouseover. +# +proc ttk::combobox::LBHover {w x y} { + $w selection clear 0 end + $w activate @$x,$y + $w selection set @$x,$y +} + +## MapPopdown -- binding for ComboboxPopdown +# +proc ttk::combobox::MapPopdown {w} { + [winfo parent $w] state pressed + ttk::globalGrab $w +} + +## UnmapPopdown -- binding for ComboboxPopdown +# +proc ttk::combobox::UnmapPopdown {w} { + [winfo parent $w] state !pressed + ttk::releaseGrab $w +} + +### +# + +namespace eval ::ttk::combobox { + # @@@ Until we have a proper native scrollbar on Aqua, use + # @@@ the regular Tk one. Use ttk::scrollbar on other platforms. + variable scrollbar ttk::scrollbar + if {[tk windowingsystem] eq "aqua"} { + set scrollbar ::scrollbar + } +} + +## PopdownWindow -- +# Returns the popdown widget associated with a combobox, +# creating it if necessary. +# +proc ttk::combobox::PopdownWindow {cb} { + variable scrollbar + + if {![winfo exists $cb.popdown]} { + set poplevel [PopdownToplevel $cb.popdown] + set popdown [ttk::frame $poplevel.f -style ComboboxPopdownFrame] + + $scrollbar $popdown.sb \ + -orient vertical -command [list $popdown.l yview] + listbox $popdown.l \ + -listvariable ttk::combobox::Values($cb) \ + -yscrollcommand [list $popdown.sb set] \ + -exportselection false \ + -selectmode browse \ + -activestyle none \ + ; + + bindtags $popdown.l \ + [list $popdown.l ComboboxListbox Listbox $popdown all] + + grid $popdown.l -row 0 -column 0 -padx {1 0} -pady 1 -sticky nsew + grid $popdown.sb -row 0 -column 1 -padx {0 1} -pady 1 -sticky ns + grid columnconfigure $popdown 0 -weight 1 + grid rowconfigure $popdown 0 -weight 1 + + grid $popdown -sticky news -padx 0 -pady 0 + grid rowconfigure $poplevel 0 -weight 1 + grid columnconfigure $poplevel 0 -weight 1 + } + return $cb.popdown +} + +## PopdownToplevel -- Create toplevel window for the combobox popdown +# +# See also <> +# +proc ttk::combobox::PopdownToplevel {w} { + toplevel $w -class ComboboxPopdown + wm withdraw $w + switch -- [tk windowingsystem] { + default - + x11 { + $w configure -relief flat -borderwidth 0 + wm attributes $w -type combo + wm overrideredirect $w true + } + win32 { + $w configure -relief flat -borderwidth 0 + wm overrideredirect $w true + wm attributes $w -topmost 1 + } + aqua { + $w configure -relief solid -borderwidth 0 + tk::unsupported::MacWindowStyle style $w \ + help {noActivates hideOnSuspend} + wm resizable $w 0 0 + } + } + return $w +} + +## ConfigureListbox -- +# Set listbox values, selection, height, and scrollbar visibility +# from current combobox values. +# +proc ttk::combobox::ConfigureListbox {cb} { + variable Values + + set popdown [PopdownWindow $cb].f + set values [$cb cget -values] + set current [$cb current] + if {$current < 0} { + set current 0 ;# no current entry, highlight first one + } + set Values($cb) $values + $popdown.l selection clear 0 end + $popdown.l selection set $current + $popdown.l activate $current + $popdown.l see $current + set height [llength $values] + if {$height > [$cb cget -height]} { + set height [$cb cget -height] + grid $popdown.sb + grid configure $popdown.l -padx {1 0} + } else { + grid remove $popdown.sb + grid configure $popdown.l -padx 1 + } + $popdown.l configure -height $height +} + +## PlacePopdown -- +# Set popdown window geometry. +# +# @@@TODO: factor with menubutton::PostPosition +# +proc ttk::combobox::PlacePopdown {cb popdown} { + set x [winfo rootx $cb] + set y [winfo rooty $cb] + set w [winfo width $cb] + set h [winfo height $cb] + set postoffset [ttk::style lookup TCombobox -postoffset {} {0 0 0 0}] + foreach var {x y w h} delta $postoffset { + incr $var $delta + } + + set H [winfo reqheight $popdown] + if {$y + $h + $H > [winfo screenheight $popdown]} { + set Y [expr {$y - $H}] + } else { + set Y [expr {$y + $h}] + } + wm geometry $popdown ${w}x${H}+${x}+${Y} +} + +## Post $cb -- +# Pop down the associated listbox. +# +proc ttk::combobox::Post {cb} { + # Don't do anything if disabled: + # + $cb instate disabled { return } + + # ASSERT: ![$cb instate pressed] + + # Run -postcommand callback: + # + uplevel #0 [$cb cget -postcommand] + + set popdown [PopdownWindow $cb] + ConfigureListbox $cb + update idletasks ;# needed for geometry propagation. + PlacePopdown $cb $popdown + # See <> + switch -- [tk windowingsystem] { + x11 - win32 { wm transient $popdown [winfo toplevel $cb] } + } + + # Post the listbox: + # + wm attribute $popdown -topmost 1 + wm deiconify $popdown + raise $popdown +} + +## Unpost $cb -- +# Unpost the listbox. +# +proc ttk::combobox::Unpost {cb} { + if {[winfo exists $cb.popdown]} { + wm withdraw $cb.popdown + } + grab release $cb.popdown ;# in case of stuck or unexpected grab [#1239190] +} + +## LBMaster $lb -- +# Return the combobox main widget that owns the listbox. +# +proc ttk::combobox::LBMaster {lb} { + winfo parent [winfo parent [winfo parent $lb]] +} + +## LBSelect $lb -- +# Transfer listbox selection to combobox value. +# +proc ttk::combobox::LBSelect {lb} { + set cb [LBMaster $lb] + set selection [$lb curselection] + if {[llength $selection] == 1} { + SelectEntry $cb [lindex $selection 0] + } +} + +## LBCleanup $lb -- +# binding for combobox listboxes. +# Cleans up by unsetting the linked textvariable. +# +# Note: we can't just use { unset [%W cget -listvariable] } +# because the widget command is already gone when this binding fires). +# [winfo parent] still works, fortunately. +# +proc ttk::combobox::LBCleanup {lb} { + variable Values + unset Values([LBMaster $lb]) +} + +#*EOF* diff --git a/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/cursors.tcl b/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/cursors.tcl new file mode 100644 index 00000000..75f77915 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/cursors.tcl @@ -0,0 +1,186 @@ +# +# Map symbolic cursor names to platform-appropriate cursors. +# +# The following cursors are defined: +# +# standard -- default cursor for most controls +# "" -- inherit cursor from parent window +# none -- no cursor +# +# text -- editable widgets (entry, text) +# link -- hyperlinks within text +# crosshair -- graphic selection, fine control +# busy -- operation in progress +# forbidden -- action not allowed +# +# hresize -- horizontal resizing +# vresize -- vertical resizing +# +# Also resize cursors for each of the compass points, +# {nw,n,ne,w,e,sw,s,se}resize. +# +# Platform notes: +# +# Windows doesn't distinguish resizing at the 8 compass points, +# only horizontal, vertical, and the two diagonals. +# +# OSX doesn't have resize cursors for nw, ne, sw, or se corners. +# We use the Tk-defined X11 fallbacks for these. +# +# X11 doesn't have a "forbidden" cursor (usually a slashed circle); +# "pirate" seems to be the conventional cursor for this purpose. +# +# Windows has an IDC_HELP cursor, but it's not available from Tk. +# +# Tk does not support "none" on Windows. +# + +namespace eval ttk { + + variable Cursors + + # Use X11 cursor names as defaults, since Tk supplies these + # on all platforms. + # + array set Cursors { + "" "" + none none + + standard left_ptr + text xterm + link hand2 + crosshair crosshair + busy watch + forbidden pirate + + hresize sb_h_double_arrow + vresize sb_v_double_arrow + + nresize top_side + sresize bottom_side + wresize left_side + eresize right_side + nwresize top_left_corner + neresize top_right_corner + swresize bottom_left_corner + seresize bottom_right_corner + move fleur + + } + + # Platform-specific overrides for Windows and OSX. + # + switch [tk windowingsystem] { + "win32" { + array set Cursors { + none {} + + standard arrow + text ibeam + link hand2 + crosshair crosshair + busy wait + forbidden no + + vresize size_ns + nresize size_ns + sresize size_ns + + wresize size_we + eresize size_we + hresize size_we + + nwresize size_nw_se + swresize size_ne_sw + + neresize size_ne_sw + seresize size_nw_se + } + } + + "aqua" { + if {[package vsatisfies [package provide Tk] 8.5]} { + # appeared 2007-04-23, Tk 8.5a6 + array set Cursors { + standard arrow + text ibeam + link pointinghand + crosshair crosshair + busy watch + forbidden notallowed + + hresize resizeleftright + vresize resizeupdown + nresize resizeup + sresize resizedown + wresize resizeleft + eresize resizeright + } + } + } + } +} + +## ttk::cursor $cursor -- +# Return platform-specific cursor for specified symbolic cursor. +# +proc ttk::cursor {name} { + variable Cursors + return $Cursors($name) +} + +## ttk::setCursor $w $cursor -- +# Set the cursor for specified window. +# +# [ttk::setCursor] should be used in bindings +# instead of directly calling [$w configure -cursor ...], +# as the latter always incurs a server round-trip and +# can lead to high CPU load (see [#1184746]) +# + +proc ttk::setCursor {w name} { + variable Cursors + if {[$w cget -cursor] ne $Cursors($name)} { + $w configure -cursor $Cursors($name) + } +} + +## Interactive test harness: +# +proc ttk::CursorSampler {f} { + ttk::frame $f + + set r 0 + foreach row { + {nwresize nresize neresize} + { wresize move eresize} + {swresize sresize seresize} + {text link crosshair} + {hresize vresize ""} + {busy forbidden ""} + {none standard ""} + } { + set c 0 + foreach cursor $row { + set w $f.${r}${c} + ttk::label $w -text $cursor -cursor [ttk::cursor $cursor] \ + -relief solid -borderwidth 1 -padding 3 + grid $w -row $r -column $c -sticky nswe + grid columnconfigure $f $c -uniform cols -weight 1 + incr c + } + grid rowconfigure $f $r -uniform rows -weight 1 + incr r + } + + return $f +} + +if {[info exists argv0] && $argv0 eq [info script]} { + wm title . "[array size ::ttk::Cursors] cursors" + pack [ttk::CursorSampler .f] -expand true -fill both + bind . [list destroy .] + focus .f +} + +#*EOF* diff --git a/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/defaults.tcl b/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/defaults.tcl new file mode 100644 index 00000000..05a46bdc --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/defaults.tcl @@ -0,0 +1,125 @@ +# +# Settings for default theme. +# + +namespace eval ttk::theme::default { + variable colors + array set colors { + -frame "#d9d9d9" + -foreground "#000000" + -window "#ffffff" + -text "#000000" + -activebg "#ececec" + -selectbg "#4a6984" + -selectfg "#ffffff" + -darker "#c3c3c3" + -disabledfg "#a3a3a3" + -indicator "#4a6984" + } + + ttk::style theme settings default { + + ttk::style configure "." \ + -borderwidth 1 \ + -background $colors(-frame) \ + -foreground $colors(-foreground) \ + -troughcolor $colors(-darker) \ + -font TkDefaultFont \ + -selectborderwidth 1 \ + -selectbackground $colors(-selectbg) \ + -selectforeground $colors(-selectfg) \ + -insertwidth 1 \ + -indicatordiameter 10 \ + ; + + ttk::style map "." -background \ + [list disabled $colors(-frame) active $colors(-activebg)] + ttk::style map "." -foreground \ + [list disabled $colors(-disabledfg)] + + ttk::style configure TButton \ + -anchor center -padding "3 3" -width -9 \ + -relief raised -shiftrelief 1 + ttk::style map TButton -relief [list {!disabled pressed} sunken] + + ttk::style configure TCheckbutton \ + -indicatorcolor "#ffffff" -indicatorrelief sunken -padding 1 + ttk::style map TCheckbutton -indicatorcolor \ + [list pressed $colors(-activebg) selected $colors(-indicator)] + + ttk::style configure TRadiobutton \ + -indicatorcolor "#ffffff" -indicatorrelief sunken -padding 1 + ttk::style map TRadiobutton -indicatorcolor \ + [list pressed $colors(-activebg) selected $colors(-indicator)] + + ttk::style configure TMenubutton \ + -relief raised -padding "10 3" + + ttk::style configure TEntry \ + -relief sunken -fieldbackground white -padding 1 + ttk::style map TEntry -fieldbackground \ + [list readonly $colors(-frame) disabled $colors(-frame)] + + ttk::style configure TCombobox -arrowsize 12 -padding 1 + ttk::style map TCombobox -fieldbackground \ + [list readonly $colors(-frame) disabled $colors(-frame)] + + ttk::style configure TSpinbox -arrowsize 10 -padding {2 0 10 0} + ttk::style map TSpinbox -fieldbackground \ + [list readonly $colors(-frame) disabled $colors(-frame)] \ + -arrowcolor [list disabled $colors(-disabledfg)] + + ttk::style configure TLabelframe \ + -relief groove -borderwidth 2 + + ttk::style configure TScrollbar \ + -width 12 -arrowsize 12 + ttk::style map TScrollbar \ + -arrowcolor [list disabled $colors(-disabledfg)] + + ttk::style configure TScale \ + -sliderrelief raised + ttk::style configure TProgressbar \ + -background $colors(-selectbg) + + ttk::style configure TNotebook.Tab \ + -padding {4 2} -background $colors(-darker) + ttk::style map TNotebook.Tab \ + -background [list selected $colors(-frame)] + + # Treeview. + # + ttk::style configure Heading -font TkHeadingFont -relief raised + ttk::style configure Treeview \ + -background $colors(-window) \ + -foreground $colors(-text) ; + ttk::style map Treeview \ + -background [list selected $colors(-selectbg)] \ + -foreground [list selected $colors(-selectfg)] ; + + # Combobox popdown frame + ttk::style layout ComboboxPopdownFrame { + ComboboxPopdownFrame.border -sticky nswe + } + ttk::style configure ComboboxPopdownFrame \ + -borderwidth 1 -relief solid + + # + # Toolbar buttons: + # + ttk::style layout Toolbutton { + Toolbutton.border -children { + Toolbutton.padding -children { + Toolbutton.label + } + } + } + + ttk::style configure Toolbutton \ + -padding 2 -relief flat + ttk::style map Toolbutton -relief \ + [list disabled flat selected sunken pressed sunken active raised] + ttk::style map Toolbutton -background \ + [list pressed $colors(-darker) active $colors(-activebg)] + } +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/entry.tcl b/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/entry.tcl new file mode 100644 index 00000000..f16cf8b9 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/entry.tcl @@ -0,0 +1,611 @@ +# +# DERIVED FROM: tk/library/entry.tcl r1.22 +# +# Copyright (c) 1992-1994 The Regents of the University of California. +# Copyright (c) 1994-1997 Sun Microsystems, Inc. +# Copyright (c) 2004, Joe English +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. +# + +namespace eval ttk { + namespace eval entry { + variable State + + set State(x) 0 + set State(selectMode) none + set State(anchor) 0 + set State(scanX) 0 + set State(scanIndex) 0 + set State(scanMoved) 0 + + # Button-2 scan speed is (scanNum/scanDen) characters + # per pixel of mouse movement. + # The standard Tk entry widget uses the equivalent of + # scanNum = 10, scanDen = average character width. + # I don't know why that was chosen. + # + set State(scanNum) 1 + set State(scanDen) 1 + set State(deadband) 3 ;# #pixels for mouse-moved deadband. + } +} + +### Option database settings. +# +option add *TEntry.cursor [ttk::cursor text] + +### Bindings. +# +# Removed the following standard Tk bindings: +# +# , , +# , : +# ttk::entry widget doesn't use selection anchor. +# : +# Inserts PRIMARY selection (on non-Windows platforms). +# This is inconsistent with typical platform bindings. +# , : +# These don't do the right thing to start with. +# , , , +# , : +# Judgment call. If happens to be assigned to the Alt key, +# these could conflict with application accelerators. +# (Plus, who has a Meta key these days?) +# : +# Another judgment call. If anyone misses this, let me know +# and I'll put it back. +# + +## Clipboard events: +# +bind TEntry <> { ttk::entry::Cut %W } +bind TEntry <> { ttk::entry::Copy %W } +bind TEntry <> { ttk::entry::Paste %W } +bind TEntry <> { ttk::entry::Clear %W } + +## Button1 bindings: +# Used for selection and navigation. +# +bind TEntry { ttk::entry::Press %W %x } +bind TEntry { ttk::entry::Shift-Press %W %x } +bind TEntry { ttk::entry::Select %W %x word } +bind TEntry { ttk::entry::Select %W %x line } +bind TEntry { ttk::entry::Drag %W %x } + +bind TEntry { ttk::entry::DragOut %W %m } +bind TEntry { ttk::entry::DragIn %W } +bind TEntry { ttk::entry::Release %W } + +bind TEntry { + %W instate {!readonly !disabled} { %W icursor @%x ; focus %W } +} + +## Button2 bindings: +# Used for scanning and primary transfer. +# Note: ButtonRelease-2 is mapped to <> in tk.tcl. +# +bind TEntry { ttk::entry::ScanMark %W %x } +bind TEntry { ttk::entry::ScanDrag %W %x } +bind TEntry { ttk::entry::ScanRelease %W %x } +bind TEntry <> { ttk::entry::ScanRelease %W %x } + +## Keyboard navigation bindings: +# +bind TEntry { ttk::entry::Move %W prevchar } +bind TEntry { ttk::entry::Move %W nextchar } +bind TEntry { ttk::entry::Move %W prevword } +bind TEntry { ttk::entry::Move %W nextword } +bind TEntry { ttk::entry::Move %W home } +bind TEntry { ttk::entry::Move %W end } + +bind TEntry { ttk::entry::Extend %W prevchar } +bind TEntry { ttk::entry::Extend %W nextchar } +bind TEntry { ttk::entry::Extend %W prevword } +bind TEntry { ttk::entry::Extend %W nextword } +bind TEntry { ttk::entry::Extend %W home } +bind TEntry { ttk::entry::Extend %W end } + +bind TEntry { %W selection range 0 end } +bind TEntry { %W selection clear } + +bind TEntry <> { %W selection range 0 end; %W icursor end } + +## Edit bindings: +# +bind TEntry { ttk::entry::Insert %W %A } +bind TEntry { ttk::entry::Delete %W } +bind TEntry { ttk::entry::Backspace %W } + +# Ignore all Alt, Meta, and Control keypresses unless explicitly bound. +# Otherwise, the class binding will fire and insert the character. +# Ditto for Escape, Return, and Tab. +# +bind TEntry {# nothing} +bind TEntry {# nothing} +bind TEntry {# nothing} +bind TEntry {# nothing} +bind TEntry {# nothing} +bind TEntry {# nothing} +bind TEntry {# nothing} + +# Argh. Apparently on Windows, the NumLock modifier is interpreted +# as a Command modifier. +if {[tk windowingsystem] eq "aqua"} { + bind TEntry {# nothing} +} +# Tk-on-Cocoa generates characters for these two keys. [Bug 2971663] +bind TEntry {# nothing} +bind TEntry {# nothing} + +## Additional emacs-like bindings: +# +bind TEntry { ttk::entry::Move %W home } +bind TEntry { ttk::entry::Move %W prevchar } +bind TEntry { ttk::entry::Delete %W } +bind TEntry { ttk::entry::Move %W end } +bind TEntry { ttk::entry::Move %W nextchar } +bind TEntry { ttk::entry::Backspace %W } +bind TEntry { %W delete insert end } + +### Clipboard procedures. +# + +## EntrySelection -- Return the selected text of the entry. +# Raises an error if there is no selection. +# +proc ttk::entry::EntrySelection {w} { + set entryString [string range [$w get] [$w index sel.first] \ + [expr {[$w index sel.last] - 1}]] + if {[$w cget -show] ne ""} { + return [string repeat [string index [$w cget -show] 0] \ + [string length $entryString]] + } + return $entryString +} + +## Paste -- Insert clipboard contents at current insert point. +# +proc ttk::entry::Paste {w} { + catch { + set clipboard [::tk::GetSelection $w CLIPBOARD] + PendingDelete $w + $w insert insert $clipboard + See $w insert + } +} + +## Copy -- Copy selection to clipboard. +# +proc ttk::entry::Copy {w} { + if {![catch {EntrySelection $w} selection]} { + clipboard clear -displayof $w + clipboard append -displayof $w $selection + } +} + +## Clear -- Delete the selection. +# +proc ttk::entry::Clear {w} { + catch { $w delete sel.first sel.last } +} + +## Cut -- Copy selection to clipboard then delete it. +# +proc ttk::entry::Cut {w} { + Copy $w; Clear $w +} + +### Navigation procedures. +# + +## ClosestGap -- Find closest boundary between characters. +# Returns the index of the character just after the boundary. +# +proc ttk::entry::ClosestGap {w x} { + set pos [$w index @$x] + set bbox [$w bbox $pos] + if {$x - [lindex $bbox 0] > [lindex $bbox 2]/2} { + incr pos + } + return $pos +} + +## See $index -- Make sure that the character at $index is visible. +# +proc ttk::entry::See {w {index insert}} { + update idletasks ;# ensure scroll data up-to-date + set c [$w index $index] + # @@@ OR: check [$w index left] / [$w index right] + if {$c < [$w index @0] || $c >= [$w index @[winfo width $w]]} { + $w xview $c + } +} + +## NextWord -- Find the next word position. +# Note: The "next word position" follows platform conventions: +# either the next end-of-word position, or the start-of-word +# position following the next end-of-word position. +# +set ::ttk::entry::State(startNext) \ + [string equal [tk windowingsystem] "win32"] + +proc ttk::entry::NextWord {w start} { + variable State + set pos [tcl_endOfWord [$w get] [$w index $start]] + if {$pos >= 0 && $State(startNext)} { + set pos [tcl_startOfNextWord [$w get] $pos] + } + if {$pos < 0} { + return end + } + return $pos +} + +## PrevWord -- Find the previous word position. +# +proc ttk::entry::PrevWord {w start} { + set pos [tcl_startOfPreviousWord [$w get] [$w index $start]] + if {$pos < 0} { + return 0 + } + return $pos +} + +## RelIndex -- Compute character/word/line-relative index. +# +proc ttk::entry::RelIndex {w where {index insert}} { + switch -- $where { + prevchar { expr {[$w index $index] - 1} } + nextchar { expr {[$w index $index] + 1} } + prevword { PrevWord $w $index } + nextword { NextWord $w $index } + home { return 0 } + end { $w index end } + default { error "Bad relative index $index" } + } +} + +## Move -- Move insert cursor to relative location. +# Also clears the selection, if any, and makes sure +# that the insert cursor is visible. +# +proc ttk::entry::Move {w where} { + $w icursor [RelIndex $w $where] + $w selection clear + See $w insert +} + +### Selection procedures. +# + +## ExtendTo -- Extend the selection to the specified index. +# +# The other end of the selection (the anchor) is determined as follows: +# +# (1) if there is no selection, the anchor is the insert cursor; +# (2) if the index is outside the selection, grow the selection; +# (3) if the insert cursor is at one end of the selection, anchor the other end +# (4) otherwise anchor the start of the selection +# +# The insert cursor is placed at the new end of the selection. +# +# Returns: selection anchor. +# +proc ttk::entry::ExtendTo {w index} { + set index [$w index $index] + set insert [$w index insert] + + # Figure out selection anchor: + if {![$w selection present]} { + set anchor $insert + } else { + set selfirst [$w index sel.first] + set sellast [$w index sel.last] + + if { ($index < $selfirst) + || ($insert == $selfirst && $index <= $sellast) + } { + set anchor $sellast + } else { + set anchor $selfirst + } + } + + # Extend selection: + if {$anchor < $index} { + $w selection range $anchor $index + } else { + $w selection range $index $anchor + } + + $w icursor $index + return $anchor +} + +## Extend -- Extend the selection to a relative position, show insert cursor +# +proc ttk::entry::Extend {w where} { + ExtendTo $w [RelIndex $w $where] + See $w +} + +### Button 1 binding procedures. +# +# Double-clicking followed by a drag enters "word-select" mode. +# Triple-clicking enters "line-select" mode. +# + +## Press -- ButtonPress-1 binding. +# Set the insertion cursor, claim the input focus, set up for +# future drag operations. +# +proc ttk::entry::Press {w x} { + variable State + + $w icursor [ClosestGap $w $x] + $w selection clear + $w instate !disabled { focus $w } + + # Set up for future drag, double-click, or triple-click. + set State(x) $x + set State(selectMode) char + set State(anchor) [$w index insert] +} + +## Shift-Press -- Shift-ButtonPress-1 binding. +# Extends the selection, sets anchor for future drag operations. +# +proc ttk::entry::Shift-Press {w x} { + variable State + + focus $w + set anchor [ExtendTo $w @$x] + + set State(x) $x + set State(selectMode) char + set State(anchor) $anchor +} + +## Select $w $x $mode -- Binding for double- and triple- clicks. +# Selects a word or line (according to mode), +# and sets the selection mode for subsequent drag operations. +# +proc ttk::entry::Select {w x mode} { + variable State + set cur [ClosestGap $w $x] + + switch -- $mode { + word { WordSelect $w $cur $cur } + line { LineSelect $w $cur $cur } + char { # no-op } + } + + set State(anchor) $cur + set State(selectMode) $mode +} + +## Drag -- Button1 motion binding. +# +proc ttk::entry::Drag {w x} { + variable State + set State(x) $x + DragTo $w $x +} + +## DragTo $w $x -- Extend selection to $x based on current selection mode. +# +proc ttk::entry::DragTo {w x} { + variable State + + set cur [ClosestGap $w $x] + switch $State(selectMode) { + char { CharSelect $w $State(anchor) $cur } + word { WordSelect $w $State(anchor) $cur } + line { LineSelect $w $State(anchor) $cur } + none { # no-op } + } +} + +## binding: +# Begin autoscroll. +# +proc ttk::entry::DragOut {w mode} { + variable State + if {$State(selectMode) ne "none" && $mode eq "NotifyNormal"} { + ttk::Repeatedly ttk::entry::AutoScroll $w + } +} + +## binding +# Suspend autoscroll. +# +proc ttk::entry::DragIn {w} { + ttk::CancelRepeat +} + +## binding +# +proc ttk::entry::Release {w} { + variable State + set State(selectMode) none + ttk::CancelRepeat ;# suspend autoscroll +} + +## AutoScroll +# Called repeatedly when the mouse is outside an entry window +# with Button 1 down. Scroll the window left or right, +# depending on where the mouse left the window, and extend +# the selection according to the current selection mode. +# +# TODO: AutoScroll should repeat faster (50ms) than normal autorepeat. +# TODO: Need a way for Repeat scripts to cancel themselves. +# +proc ttk::entry::AutoScroll {w} { + variable State + if {![winfo exists $w]} return + set x $State(x) + if {$x > [winfo width $w]} { + $w xview scroll 2 units + DragTo $w $x + } elseif {$x < 0} { + $w xview scroll -2 units + DragTo $w $x + } +} + +## CharSelect -- select characters between index $from and $to +# +proc ttk::entry::CharSelect {w from to} { + if {$to <= $from} { + $w selection range $to $from + } else { + $w selection range $from $to + } + $w icursor $to +} + +## WordSelect -- Select whole words between index $from and $to +# +proc ttk::entry::WordSelect {w from to} { + if {$to < $from} { + set first [WordBack [$w get] $to] + set last [WordForward [$w get] $from] + $w icursor $first + } else { + set first [WordBack [$w get] $from] + set last [WordForward [$w get] $to] + $w icursor $last + } + $w selection range $first $last +} + +## WordBack, WordForward -- helper routines for WordSelect. +# +proc ttk::entry::WordBack {text index} { + if {[set pos [tcl_wordBreakBefore $text $index]] < 0} { return 0 } + return $pos +} +proc ttk::entry::WordForward {text index} { + if {[set pos [tcl_wordBreakAfter $text $index]] < 0} { return end } + return $pos +} + +## LineSelect -- Select the entire line. +# +proc ttk::entry::LineSelect {w _ _} { + variable State + $w selection range 0 end + $w icursor end +} + +### Button 2 binding procedures. +# + +## ScanMark -- ButtonPress-2 binding. +# Marks the start of a scan or primary transfer operation. +# +proc ttk::entry::ScanMark {w x} { + variable State + set State(scanX) $x + set State(scanIndex) [$w index @0] + set State(scanMoved) 0 +} + +## ScanDrag -- Button2 motion binding. +# +proc ttk::entry::ScanDrag {w x} { + variable State + + set dx [expr {$State(scanX) - $x}] + if {abs($dx) > $State(deadband)} { + set State(scanMoved) 1 + } + set left [expr {$State(scanIndex) + ($dx*$State(scanNum))/$State(scanDen)}] + $w xview $left + + if {$left != [set newLeft [$w index @0]]} { + # We've scanned past one end of the entry; + # reset the mark so that the text will start dragging again + # as soon as the mouse reverses direction. + # + set State(scanX) $x + set State(scanIndex) $newLeft + } +} + +## ScanRelease -- Button2 release binding. +# Do a primary transfer if the mouse has not moved since the button press. +# +proc ttk::entry::ScanRelease {w x} { + variable State + if {!$State(scanMoved)} { + $w instate {!disabled !readonly} { + $w icursor [ClosestGap $w $x] + catch {$w insert insert [::tk::GetSelection $w PRIMARY]} + } + } +} + +### Insertion and deletion procedures. +# + +## PendingDelete -- Delete selection prior to insert. +# If the entry currently has a selection, delete it and +# set the insert position to where the selection was. +# Returns: 1 if pending delete occurred, 0 if nothing was selected. +# +proc ttk::entry::PendingDelete {w} { + if {[$w selection present]} { + $w icursor sel.first + $w delete sel.first sel.last + return 1 + } + return 0 +} + +## Insert -- Insert text into the entry widget. +# If a selection is present, the new text replaces it. +# Otherwise, the new text is inserted at the insert cursor. +# +proc ttk::entry::Insert {w s} { + if {$s eq ""} { return } + PendingDelete $w + $w insert insert $s + See $w insert +} + +## Backspace -- Backspace over the character just before the insert cursor. +# If there is a selection, delete that instead. +# If the new insert position is offscreen to the left, +# scroll to place the cursor at about the middle of the window. +# +proc ttk::entry::Backspace {w} { + if {[PendingDelete $w]} { + See $w + return + } + set x [expr {[$w index insert] - 1}] + if {$x < 0} { return } + + $w delete $x + + if {[$w index @0] >= [$w index insert]} { + set range [$w xview] + set left [lindex $range 0] + set right [lindex $range 1] + $w xview moveto [expr {$left - ($right - $left)/2.0}] + } +} + +## Delete -- Delete the character after the insert cursor. +# If there is a selection, delete that instead. +# +proc ttk::entry::Delete {w} { + if {![PendingDelete $w]} { + $w delete insert + } +} + +#*EOF* diff --git a/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/fonts.tcl b/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/fonts.tcl new file mode 100644 index 00000000..a2781c69 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/fonts.tcl @@ -0,0 +1,157 @@ +# +# Font specifications. +# +# This file, [source]d at initialization time, sets up the following +# symbolic fonts based on the current platform: +# +# TkDefaultFont -- default for GUI items not otherwise specified +# TkTextFont -- font for user text (entry, listbox, others) +# TkFixedFont -- standard fixed width font +# TkHeadingFont -- headings (column headings, etc) +# TkCaptionFont -- dialog captions (primary text in alert dialogs, etc.) +# TkTooltipFont -- font to use for tooltip windows +# TkIconFont -- font to use for icon captions +# TkMenuFont -- used to use for menu items +# +# In Tk 8.5, some of these fonts may be provided by the TIP#145 implementation +# (On Windows and Mac OS X as of Oct 2007). +# +# +++ Platform notes: +# +# Windows: +# The default system font changed from "MS Sans Serif" to "Tahoma" +# in Windows XP/Windows 2000. +# +# MS documentation says to use "Tahoma 8" in Windows 2000/XP, +# although many MS programs still use "MS Sans Serif 8" +# +# Should use SystemParametersInfo() instead. +# +# Mac OSX / Aqua: +# Quoth the Apple HIG: +# The _system font_ (Lucida Grande Regular 13 pt) is used for text +# in menus, dialogs, and full-size controls. +# [...] Use the _view font_ (Lucida Grande Regular 12pt) as the default +# font of text in lists and tables. +# [...] Use the _emphasized system font_ (Lucida Grande Bold 13 pt) +# sparingly. It is used for the message text in alerts. +# [...] The _small system font_ (Lucida Grande Regular 11 pt) [...] +# is also the default font for column headings in lists, for help tags, +# and for small controls. +# +# Note that the font for column headings (TkHeadingFont) is +# _smaller_ than the default font. +# +# There does not appear to be any recommendations for fixed-width fonts. +# +# X11: +# Need a way to tell if Xft is enabled or not. +# For now, assume patch #971980 applied. +# +# "Classic" look used Helvetica bold for everything except +# for entry widgets, which use Helvetica medium. +# Most other toolkits use medium weight for all UI elements, +# which is what we do now. +# +# Font size specified in pixels on X11, not points. +# This is Theoretically Wrong, but in practice works better; using +# points leads to huge inconsistencies across different servers. +# + +namespace eval ttk { + +variable tip145 [catch {font create TkDefaultFont}] +catch {font create TkTextFont} +catch {font create TkHeadingFont} +catch {font create TkCaptionFont} +catch {font create TkTooltipFont} +catch {font create TkFixedFont} +catch {font create TkIconFont} +catch {font create TkMenuFont} +catch {font create TkSmallCaptionFont} + +if {!$tip145} { +variable F ;# miscellaneous platform-specific font parameters +switch -- [tk windowingsystem] { + win32 { + # In safe interps there is no osVersion element. + if {[info exists tcl_platform(osVersion)]} { + if {$tcl_platform(osVersion) >= 5.0} { + set F(family) "Tahoma" + } else { + set F(family) "MS Sans Serif" + } + } else { + if {[lsearch -exact [font families] Tahoma] != -1} { + set F(family) "Tahoma" + } else { + set F(family) "MS Sans Serif" + } + } + set F(size) 8 + + font configure TkDefaultFont -family $F(family) -size $F(size) + font configure TkTextFont -family $F(family) -size $F(size) + font configure TkHeadingFont -family $F(family) -size $F(size) + font configure TkCaptionFont -family $F(family) -size $F(size) \ + -weight bold + font configure TkTooltipFont -family $F(family) -size $F(size) + font configure TkFixedFont -family Courier -size 10 + font configure TkIconFont -family $F(family) -size $F(size) + font configure TkMenuFont -family $F(family) -size $F(size) + font configure TkSmallCaptionFont -family $F(family) -size $F(size) + } + aqua { + set F(family) "Lucida Grande" + set F(fixed) "Monaco" + set F(menusize) 14 + set F(size) 13 + set F(viewsize) 12 + set F(smallsize) 11 + set F(labelsize) 10 + set F(fixedsize) 11 + + font configure TkDefaultFont -family $F(family) -size $F(size) + font configure TkTextFont -family $F(family) -size $F(size) + font configure TkHeadingFont -family $F(family) -size $F(smallsize) + font configure TkCaptionFont -family $F(family) -size $F(size) \ + -weight bold + font configure TkTooltipFont -family $F(family) -size $F(smallsize) + font configure TkFixedFont -family $F(fixed) -size $F(fixedsize) + font configure TkIconFont -family $F(family) -size $F(size) + font configure TkMenuFont -family $F(family) -size $F(menusize) + font configure TkSmallCaptionFont -family $F(family) -size $F(labelsize) + } + default - + x11 { + if {![catch {tk::pkgconfig get fontsystem} F(fs)] && $F(fs) eq "xft"} { + set F(family) "sans-serif" + set F(fixed) "monospace" + } else { + set F(family) "Helvetica" + set F(fixed) "courier" + } + set F(size) -12 + set F(ttsize) -10 + set F(capsize) -14 + set F(fixedsize) -12 + + font configure TkDefaultFont -family $F(family) -size $F(size) + font configure TkTextFont -family $F(family) -size $F(size) + font configure TkHeadingFont -family $F(family) -size $F(size) \ + -weight bold + font configure TkCaptionFont -family $F(family) -size $F(capsize) \ + -weight bold + font configure TkTooltipFont -family $F(family) -size $F(ttsize) + font configure TkFixedFont -family $F(fixed) -size $F(fixedsize) + font configure TkIconFont -family $F(family) -size $F(size) + font configure TkMenuFont -family $F(family) -size $F(size) + font configure TkSmallCaptionFont -family $F(family) -size $F(ttsize) + } +} +unset -nocomplain F +} + +} + +#*EOF* diff --git a/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/menubutton.tcl b/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/menubutton.tcl new file mode 100644 index 00000000..093bb027 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/menubutton.tcl @@ -0,0 +1,169 @@ +# +# Bindings for Menubuttons. +# +# Menubuttons have three interaction modes: +# +# Pulldown: Press menubutton, drag over menu, release to activate menu entry +# Popdown: Click menubutton to post menu +# Keyboard: or accelerator key to post menu +# +# (In addition, when menu system is active, "dropdown" -- menu posts +# on mouse-over. Ttk menubuttons don't implement this). +# +# For keyboard and popdown mode, we hand off to tk_popup and let +# the built-in Tk bindings handle the rest of the interaction. +# +# ON X11: +# +# Standard Tk menubuttons use a global grab on the menubutton. +# This won't work for Ttk menubuttons in pulldown mode, +# since we need to process the final event, +# and this might be delivered to the menu. So instead we +# rely on the passive grab that occurs on events, +# and transition to popdown mode when the mouse is released +# or dragged outside the menubutton. +# +# ON WINDOWS: +# +# I'm not sure what the hell is going on here. [$menu post] apparently +# sets up some kind of internal grab for native menus. +# On this platform, just use [tk_popup] for all menu actions. +# +# ON MACOS: +# +# Same probably applies here. +# + +namespace eval ttk { + namespace eval menubutton { + variable State + array set State { + pulldown 0 + oldcursor {} + } + } +} + +bind TMenubutton { %W instate !disabled {%W state active } } +bind TMenubutton { %W state !active } +bind TMenubutton { ttk::menubutton::Popdown %W } +bind TMenubutton <> { ttk::menubutton::Popdown %W } + +if {[tk windowingsystem] eq "x11"} { + bind TMenubutton { ttk::menubutton::Pulldown %W } + bind TMenubutton { ttk::menubutton::TransferGrab %W } + bind TMenubutton { ttk::menubutton::TransferGrab %W } +} else { + bind TMenubutton \ + { %W state pressed ; ttk::menubutton::Popdown %W } + bind TMenubutton \ + { %W state !pressed } +} + +# PostPosition -- +# Returns the x and y coordinates where the menu +# should be posted, based on the menubutton and menu size +# and -direction option. +# +# TODO: adjust menu width to be at least as wide as the button +# for -direction above, below. +# +proc ttk::menubutton::PostPosition {mb menu} { + set x [winfo rootx $mb] + set y [winfo rooty $mb] + set dir [$mb cget -direction] + + set bw [winfo width $mb] + set bh [winfo height $mb] + set mw [winfo reqwidth $menu] + set mh [winfo reqheight $menu] + set sw [expr {[winfo screenwidth $menu] - $bw - $mw}] + set sh [expr {[winfo screenheight $menu] - $bh - $mh}] + + switch -- $dir { + above { if {$y >= $mh} { incr y -$mh } { incr y $bh } } + below { if {$y <= $sh} { incr y $bh } { incr y -$mh } } + left { if {$x >= $mw} { incr x -$mw } { incr x $bw } } + right { if {$x <= $sw} { incr x $bw } { incr x -$mw } } + flush { + # post menu atop menubutton. + # If there's a menu entry whose label matches the + # menubutton -text, assume this is an optionmenu + # and place that entry over the menubutton. + set index [FindMenuEntry $menu [$mb cget -text]] + if {$index ne ""} { + incr y -[$menu yposition $index] + } + } + } + + return [list $x $y] +} + +# Popdown -- +# Post the menu and set a grab on the menu. +# +proc ttk::menubutton::Popdown {mb} { + if {[$mb instate disabled] || [set menu [$mb cget -menu]] eq ""} { + return + } + foreach {x y} [PostPosition $mb $menu] { break } + tk_popup $menu $x $y +} + +# Pulldown (X11 only) -- +# Called when Button1 is pressed on a menubutton. +# Posts the menu; a subsequent ButtonRelease +# or Leave event will set a grab on the menu. +# +proc ttk::menubutton::Pulldown {mb} { + variable State + if {[$mb instate disabled] || [set menu [$mb cget -menu]] eq ""} { + return + } + foreach {x y} [PostPosition $mb $menu] { break } + set State(pulldown) 1 + set State(oldcursor) [$mb cget -cursor] + + $mb state pressed + $mb configure -cursor [$menu cget -cursor] + $menu post $x $y + tk_menuSetFocus $menu +} + +# TransferGrab (X11 only) -- +# Switch from pulldown mode (menubutton has an implicit grab) +# to popdown mode (menu has an explicit grab). +# +proc ttk::menubutton::TransferGrab {mb} { + variable State + if {$State(pulldown)} { + $mb configure -cursor $State(oldcursor) + $mb state {!pressed !active} + set State(pulldown) 0 + + set menu [$mb cget -menu] + tk_popup $menu [winfo rootx $menu] [winfo rooty $menu] + } +} + +# FindMenuEntry -- +# Hack to support tk_optionMenus. +# Returns the index of the menu entry with a matching -label, +# -1 if not found. +# +proc ttk::menubutton::FindMenuEntry {menu s} { + set last [$menu index last] + if {$last eq "none"} { + return "" + } + for {set i 0} {$i <= $last} {incr i} { + if {![catch {$menu entrycget $i -label} label] + && ($label eq $s)} { + return $i + } + } + return "" +} + +#*EOF* diff --git a/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/notebook.tcl b/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/notebook.tcl new file mode 100644 index 00000000..d424b6c7 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/notebook.tcl @@ -0,0 +1,197 @@ +# +# Bindings for TNotebook widget +# + +namespace eval ttk::notebook { + variable TLNotebooks ;# See enableTraversal +} + +bind TNotebook { ttk::notebook::Press %W %x %y } +bind TNotebook { ttk::notebook::CycleTab %W 1; break } +bind TNotebook { ttk::notebook::CycleTab %W -1; break } +bind TNotebook { ttk::notebook::CycleTab %W 1; break } +bind TNotebook { ttk::notebook::CycleTab %W -1; break } +catch { +bind TNotebook { ttk::notebook::CycleTab %W -1; break } +} +bind TNotebook { ttk::notebook::Cleanup %W } + +# ActivateTab $nb $tab -- +# Select the specified tab and set focus. +# +# Desired behavior: +# + take focus when reselecting the currently-selected tab; +# + keep focus if the notebook already has it; +# + otherwise set focus to the first traversable widget +# in the newly-selected tab; +# + do not leave the focus in a deselected tab. +# +proc ttk::notebook::ActivateTab {w tab} { + set oldtab [$w select] + $w select $tab + set newtab [$w select] ;# NOTE: might not be $tab, if $tab is disabled + + if {[focus] eq $w} { return } + if {$newtab eq $oldtab} { focus $w ; return } + + update idletasks ;# needed so focus logic sees correct mapped states + if {[set f [ttk::focusFirst $newtab]] ne ""} { + ttk::traverseTo $f + } else { + focus $w + } +} + +# Press $nb $x $y -- +# ButtonPress-1 binding for notebook widgets. +# Activate the tab under the mouse cursor, if any. +# +proc ttk::notebook::Press {w x y} { + set index [$w index @$x,$y] + if {$index ne ""} { + ActivateTab $w $index + } +} + +# CycleTab -- +# Select the next/previous tab in the list. +# +proc ttk::notebook::CycleTab {w dir} { + if {[$w index end] != 0} { + set current [$w index current] + set select [expr {($current + $dir) % [$w index end]}] + while {[$w tab $select -state] != "normal" && ($select != $current)} { + set select [expr {($select + $dir) % [$w index end]}] + } + if {$select != $current} { + ActivateTab $w $select + } + } +} + +# MnemonicTab $nb $key -- +# Scan all tabs in the specified notebook for one with the +# specified mnemonic. If found, returns path name of tab; +# otherwise returns "" +# +proc ttk::notebook::MnemonicTab {nb key} { + set key [string toupper $key] + foreach tab [$nb tabs] { + set label [$nb tab $tab -text] + set underline [$nb tab $tab -underline] + set mnemonic [string toupper [string index $label $underline]] + if {$mnemonic ne "" && $mnemonic eq $key} { + return $tab + } + } + return "" +} + +# +++ Toplevel keyboard traversal. +# + +# enableTraversal -- +# Enable keyboard traversal for a notebook widget +# by adding bindings to the containing toplevel window. +# +# TLNotebooks($top) keeps track of the list of all traversal-enabled +# notebooks contained in the toplevel +# +proc ttk::notebook::enableTraversal {nb} { + variable TLNotebooks + + set top [winfo toplevel $nb] + + if {![info exists TLNotebooks($top)]} { + # Augment $top bindings: + # + bind $top {+ttk::notebook::TLCycleTab %W 1} + bind $top {+ttk::notebook::TLCycleTab %W -1} + bind $top {+ttk::notebook::TLCycleTab %W 1} + bind $top {+ttk::notebook::TLCycleTab %W -1} + catch { + bind $top {+ttk::notebook::TLCycleTab %W -1} + } + if {[tk windowingsystem] eq "aqua"} { + bind $top \ + +[list ttk::notebook::MnemonicActivation $top %K] + } else { + bind $top \ + +[list ttk::notebook::MnemonicActivation $top %K] + } + bind $top {+ttk::notebook::TLCleanup %W} + } + + lappend TLNotebooks($top) $nb +} + +# TLCleanup -- binding for traversal-enabled toplevels +# +proc ttk::notebook::TLCleanup {w} { + variable TLNotebooks + if {$w eq [winfo toplevel $w]} { + unset -nocomplain -please TLNotebooks($w) + } +} + +# Cleanup -- binding for notebooks +# +proc ttk::notebook::Cleanup {nb} { + variable TLNotebooks + set top [winfo toplevel $nb] + if {[info exists TLNotebooks($top)]} { + set index [lsearch -exact $TLNotebooks($top) $nb] + set TLNotebooks($top) [lreplace $TLNotebooks($top) $index $index] + } +} + +# EnclosingNotebook $w -- +# Return the nearest traversal-enabled notebook widget +# that contains $w. +# +# BUGS: this only works properly for tabs that are direct children +# of the notebook widget. This routine should follow the +# geometry manager hierarchy, not window ancestry, but that +# information is not available in Tk. +# +proc ttk::notebook::EnclosingNotebook {w} { + variable TLNotebooks + + set top [winfo toplevel $w] + if {![info exists TLNotebooks($top)]} { return } + + while {$w ne $top && $w ne ""} { + if {[lsearch -exact $TLNotebooks($top) $w] >= 0} { + return $w + } + set w [winfo parent $w] + } + return "" +} + +# TLCycleTab -- +# toplevel binding procedure for Control-Tab / Shift-Control-Tab +# Select the next/previous tab in the nearest ancestor notebook. +# +proc ttk::notebook::TLCycleTab {w dir} { + set nb [EnclosingNotebook $w] + if {$nb ne ""} { + CycleTab $nb $dir + return -code break + } +} + +# MnemonicActivation $nb $key -- +# Alt-KeyPress binding procedure for mnemonic activation. +# Scan all notebooks in specified toplevel for a tab with the +# the specified mnemonic. If found, activate it and return TCL_BREAK. +# +proc ttk::notebook::MnemonicActivation {top key} { + variable TLNotebooks + foreach nb $TLNotebooks($top) { + if {[set tab [MnemonicTab $nb $key]] ne ""} { + ActivateTab $nb [$nb index $tab] + return -code break + } + } +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/panedwindow.tcl b/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/panedwindow.tcl new file mode 100644 index 00000000..a2e073b4 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/panedwindow.tcl @@ -0,0 +1,82 @@ +# +# Bindings for ttk::panedwindow widget. +# + +namespace eval ttk::panedwindow { + variable State + array set State { + pressed 0 + pressX - + pressY - + sash - + sashPos - + } +} + +## Bindings: +# +bind TPanedwindow { ttk::panedwindow::Press %W %x %y } +bind TPanedwindow { ttk::panedwindow::Drag %W %x %y } +bind TPanedwindow { ttk::panedwindow::Release %W %x %y } + +bind TPanedwindow { ttk::panedwindow::SetCursor %W %x %y } +bind TPanedwindow { ttk::panedwindow::SetCursor %W %x %y } +bind TPanedwindow { ttk::panedwindow::ResetCursor %W } +# See <> +bind TPanedwindow <> { ttk::panedwindow::ResetCursor %W } + +## Sash movement: +# +proc ttk::panedwindow::Press {w x y} { + variable State + + set sash [$w identify $x $y] + if {$sash eq ""} { + set State(pressed) 0 + return + } + set State(pressed) 1 + set State(pressX) $x + set State(pressY) $y + set State(sash) $sash + set State(sashPos) [$w sashpos $sash] +} + +proc ttk::panedwindow::Drag {w x y} { + variable State + if {!$State(pressed)} { return } + switch -- [$w cget -orient] { + horizontal { set delta [expr {$x - $State(pressX)}] } + vertical { set delta [expr {$y - $State(pressY)}] } + } + $w sashpos $State(sash) [expr {$State(sashPos) + $delta}] +} + +proc ttk::panedwindow::Release {w x y} { + variable State + set State(pressed) 0 + SetCursor $w $x $y +} + +## Cursor management: +# +proc ttk::panedwindow::ResetCursor {w} { + variable State + if {!$State(pressed)} { + ttk::setCursor $w {} + } +} + +proc ttk::panedwindow::SetCursor {w x y} { + set cursor "" + if {[llength [$w identify $x $y]]} { + # Assume we're over a sash. + switch -- [$w cget -orient] { + horizontal { set cursor hresize } + vertical { set cursor vresize } + } + } + ttk::setCursor $w $cursor +} + +#*EOF* diff --git a/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/progress.tcl b/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/progress.tcl new file mode 100644 index 00000000..34dce723 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/progress.tcl @@ -0,0 +1,49 @@ +# +# Ttk widget set: progress bar utilities. +# + +namespace eval ttk::progressbar { + variable Timers ;# Map: widget name -> after ID +} + +# Autoincrement -- +# Periodic callback procedure for autoincrement mode +# +proc ttk::progressbar::Autoincrement {pb steptime stepsize} { + variable Timers + + if {![winfo exists $pb]} { + # widget has been destroyed -- cancel timer + unset -nocomplain Timers($pb) + return + } + + set Timers($pb) [after $steptime \ + [list ttk::progressbar::Autoincrement $pb $steptime $stepsize] ] + + $pb step $stepsize +} + +# ttk::progressbar::start -- +# Start autoincrement mode. Invoked by [$pb start] widget code. +# +proc ttk::progressbar::start {pb {steptime 50} {stepsize 1}} { + variable Timers + if {![info exists Timers($pb)]} { + Autoincrement $pb $steptime $stepsize + } +} + +# ttk::progressbar::stop -- +# Cancel autoincrement mode. Invoked by [$pb stop] widget code. +# +proc ttk::progressbar::stop {pb} { + variable Timers + if {[info exists Timers($pb)]} { + after cancel $Timers($pb) + unset Timers($pb) + } + $pb configure -value 0 +} + + diff --git a/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/scale.tcl b/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/scale.tcl new file mode 100644 index 00000000..4a534deb --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/scale.tcl @@ -0,0 +1,91 @@ +# scale.tcl - Copyright (C) 2004 Pat Thoyts +# +# Bindings for the TScale widget + +namespace eval ttk::scale { + variable State + array set State { + dragging 0 + } +} + +bind TScale { ttk::scale::Press %W %x %y } +bind TScale { ttk::scale::Drag %W %x %y } +bind TScale { ttk::scale::Release %W %x %y } + +bind TScale { ttk::scale::Jump %W %x %y } +bind TScale { ttk::scale::Drag %W %x %y } +bind TScale { ttk::scale::Release %W %x %y } + +bind TScale { ttk::scale::Jump %W %x %y } +bind TScale { ttk::scale::Drag %W %x %y } +bind TScale { ttk::scale::Release %W %x %y } + +bind TScale { ttk::scale::Increment %W -1 } +bind TScale { ttk::scale::Increment %W -1 } +bind TScale { ttk::scale::Increment %W 1 } +bind TScale { ttk::scale::Increment %W 1 } +bind TScale { ttk::scale::Increment %W -10 } +bind TScale { ttk::scale::Increment %W -10 } +bind TScale { ttk::scale::Increment %W 10 } +bind TScale { ttk::scale::Increment %W 10 } +bind TScale { %W set [%W cget -from] } +bind TScale { %W set [%W cget -to] } + +proc ttk::scale::Press {w x y} { + variable State + set State(dragging) 0 + + switch -glob -- [$w identify $x $y] { + *track - + *trough { + set inc [expr {([$w get $x $y] <= [$w get]) ^ ([$w cget -from] > [$w cget -to]) ? -1 : 1}] + ttk::Repeatedly Increment $w $inc + } + *slider { + set State(dragging) 1 + set State(initial) [$w get] + } + } +} + +# scale::Jump -- ButtonPress-2/3 binding for scale acts like +# Press except that clicking in the trough jumps to the +# clicked position. +proc ttk::scale::Jump {w x y} { + variable State + set State(dragging) 0 + + switch -glob -- [$w identify $x $y] { + *track - + *trough { + $w set [$w get $x $y] + set State(dragging) 1 + set State(initial) [$w get] + } + *slider { + Press $w $x $y + } + } +} + +proc ttk::scale::Drag {w x y} { + variable State + if {$State(dragging)} { + $w set [$w get $x $y] + } +} + +proc ttk::scale::Release {w x y} { + variable State + set State(dragging) 0 + ttk::CancelRepeat +} + +proc ttk::scale::Increment {w delta} { + if {![winfo exists $w]} return + if {([$w cget -from] > [$w cget -to])} { + set delta [expr {-$delta}] + } + $w set [expr {[$w get] + $delta}] +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/scrollbar.tcl b/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/scrollbar.tcl new file mode 100644 index 00000000..4bd51075 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/scrollbar.tcl @@ -0,0 +1,123 @@ +# +# Bindings for TScrollbar widget +# + +# Still don't have a working ttk::scrollbar under OSX - +# Swap in a [tk::scrollbar] on that platform, +# unless user specifies -class or -style. +# +if {[tk windowingsystem] eq "aqua"} { + rename ::ttk::scrollbar ::ttk::_scrollbar + proc ttk::scrollbar {w args} { + set constructor ::tk::scrollbar + foreach {option _} $args { + if {$option eq "-class" || $option eq "-style"} { + set constructor ::ttk::_scrollbar + break + } + } + return [$constructor $w {*}$args] + } +} + +namespace eval ttk::scrollbar { + variable State + # State(xPress) -- + # State(yPress) -- initial position of mouse at start of drag. + # State(first) -- value of -first at start of drag. +} + +bind TScrollbar { ttk::scrollbar::Press %W %x %y } +bind TScrollbar { ttk::scrollbar::Drag %W %x %y } +bind TScrollbar { ttk::scrollbar::Release %W %x %y } + +bind TScrollbar { ttk::scrollbar::Jump %W %x %y } +bind TScrollbar { ttk::scrollbar::Drag %W %x %y } +bind TScrollbar { ttk::scrollbar::Release %W %x %y } + +proc ttk::scrollbar::Scroll {w n units} { + set cmd [$w cget -command] + if {$cmd ne ""} { + uplevel #0 $cmd scroll $n $units + } +} + +proc ttk::scrollbar::Moveto {w fraction} { + set cmd [$w cget -command] + if {$cmd ne ""} { + uplevel #0 $cmd moveto $fraction + } +} + +proc ttk::scrollbar::Press {w x y} { + variable State + + set State(xPress) $x + set State(yPress) $y + + switch -glob -- [$w identify $x $y] { + *uparrow - + *leftarrow { + ttk::Repeatedly Scroll $w -1 units + } + *downarrow - + *rightarrow { + ttk::Repeatedly Scroll $w 1 units + } + *thumb { + set State(first) [lindex [$w get] 0] + } + *trough { + set f [$w fraction $x $y] + if {$f < [lindex [$w get] 0]} { + # Clicked in upper/left trough + ttk::Repeatedly Scroll $w -1 pages + } elseif {$f > [lindex [$w get] 1]} { + # Clicked in lower/right trough + ttk::Repeatedly Scroll $w 1 pages + } else { + # Clicked on thumb (???) + set State(first) [lindex [$w get] 0] + } + } + } +} + +proc ttk::scrollbar::Drag {w x y} { + variable State + if {![info exists State(first)]} { + # Initial buttonpress was not on the thumb, + # or something screwy has happened. In either case, ignore: + return; + } + set xDelta [expr {$x - $State(xPress)}] + set yDelta [expr {$y - $State(yPress)}] + Moveto $w [expr {$State(first) + [$w delta $xDelta $yDelta]}] +} + +proc ttk::scrollbar::Release {w x y} { + variable State + unset -nocomplain State(xPress) State(yPress) State(first) + ttk::CancelRepeat +} + +# scrollbar::Jump -- ButtonPress-2 binding for scrollbars. +# Behaves exactly like scrollbar::Press, except that +# clicking in the trough jumps to the the selected position. +# +proc ttk::scrollbar::Jump {w x y} { + variable State + + switch -glob -- [$w identify $x $y] { + *thumb - + *trough { + set State(first) [$w fraction $x $y] + Moveto $w $State(first) + set State(xPress) $x + set State(yPress) $y + } + default { + Press $w $x $y + } + } +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/sizegrip.tcl b/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/sizegrip.tcl new file mode 100644 index 00000000..153e3102 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/sizegrip.tcl @@ -0,0 +1,102 @@ +# +# Sizegrip widget bindings. +# +# Dragging a sizegrip widget resizes the containing toplevel. +# +# NOTE: the sizegrip widget must be in the lower right hand corner. +# + +switch -- [tk windowingsystem] { + x11 - + win32 { + option add *TSizegrip.cursor [ttk::cursor seresize] + } + aqua { + # Aqua sizegrips use default Arrow cursor. + } +} + +namespace eval ttk::sizegrip { + variable State + array set State { + pressed 0 + pressX 0 + pressY 0 + width 0 + height 0 + widthInc 1 + heightInc 1 + resizeX 1 + resizeY 1 + toplevel {} + } +} + +bind TSizegrip { ttk::sizegrip::Press %W %X %Y } +bind TSizegrip { ttk::sizegrip::Drag %W %X %Y } +bind TSizegrip { ttk::sizegrip::Release %W %X %Y } + +proc ttk::sizegrip::Press {W X Y} { + variable State + + if {[$W instate disabled]} { return } + + set top [winfo toplevel $W] + + # If the toplevel is not resizable then bail + foreach {State(resizeX) State(resizeY)} [wm resizable $top] break + if {!$State(resizeX) && !$State(resizeY)} { + return + } + + # Sanity-checks: + # If a negative X or Y position was specified for [wm geometry], + # just bail out -- there's no way to handle this cleanly. + # + if {[scan [wm geometry $top] "%dx%d+%d+%d" width height x y] != 4} { + return; + } + + # Account for gridded geometry: + # + set grid [wm grid $top] + if {[llength $grid]} { + set State(widthInc) [lindex $grid 2] + set State(heightInc) [lindex $grid 3] + } else { + set State(widthInc) [set State(heightInc) 1] + } + + set State(toplevel) $top + set State(pressX) $X + set State(pressY) $Y + set State(width) $width + set State(height) $height + set State(x) $x + set State(y) $y + set State(pressed) 1 +} + +proc ttk::sizegrip::Drag {W X Y} { + variable State + if {!$State(pressed)} { return } + set w $State(width) + set h $State(height) + if {$State(resizeX)} { + set w [expr {$w + ($X - $State(pressX))/$State(widthInc)}] + } + if {$State(resizeY)} { + set h [expr {$h + ($Y - $State(pressY))/$State(heightInc)}] + } + if {$w <= 0} { set w 1 } + if {$h <= 0} { set h 1 } + set x $State(x) ; set y $State(y) + wm geometry $State(toplevel) ${w}x${h}+${x}+${y} +} + +proc ttk::sizegrip::Release {W X Y} { + variable State + set State(pressed) 0 +} + +#*EOF* diff --git a/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/spinbox.tcl b/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/spinbox.tcl new file mode 100644 index 00000000..1aa0ccb9 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/spinbox.tcl @@ -0,0 +1,173 @@ +# +# ttk::spinbox bindings +# + +namespace eval ttk::spinbox { } + +### Spinbox bindings. +# +# Duplicate the Entry bindings, override if needed: +# + +ttk::copyBindings TEntry TSpinbox + +bind TSpinbox { ttk::spinbox::Motion %W %x %y } +bind TSpinbox { ttk::spinbox::Press %W %x %y } +bind TSpinbox { ttk::spinbox::Release %W } +bind TSpinbox { ttk::spinbox::DoubleClick %W %x %y } +bind TSpinbox {} ;# disable TEntry triple-click + +bind TSpinbox { event generate %W <> } +bind TSpinbox { event generate %W <> } + +bind TSpinbox <> { ttk::spinbox::Spin %W +1 } +bind TSpinbox <> { ttk::spinbox::Spin %W -1 } + +ttk::bindMouseWheel TSpinbox [list ttk::spinbox::MouseWheel %W] + +## Motion -- +# Sets cursor. +# +proc ttk::spinbox::Motion {w x y} { + if { [$w identify $x $y] eq "textarea" + && [$w instate {!readonly !disabled}] + } { + ttk::setCursor $w text + } else { + ttk::setCursor $w "" + } +} + +## Press -- +# +proc ttk::spinbox::Press {w x y} { + if {[$w instate disabled]} { return } + focus $w + switch -glob -- [$w identify $x $y] { + *textarea { ttk::entry::Press $w $x } + *rightarrow - + *uparrow { ttk::Repeatedly event generate $w <> } + *leftarrow - + *downarrow { ttk::Repeatedly event generate $w <> } + *spinbutton { + if {$y * 2 >= [winfo height $w]} { + set event <> + } else { + set event <> + } + ttk::Repeatedly event generate $w $event + } + } +} + +## DoubleClick -- +# Select all if over the text area; otherwise same as Press. +# +proc ttk::spinbox::DoubleClick {w x y} { + if {[$w instate disabled]} { return } + + switch -glob -- [$w identify $x $y] { + *textarea { SelectAll $w } + * { Press $w $x $y } + } +} + +proc ttk::spinbox::Release {w} { + ttk::CancelRepeat +} + +## MouseWheel -- +# Mousewheel callback. Turn these into <> (-1, up) +# or < (+1, down) events. +# +proc ttk::spinbox::MouseWheel {w dir} { + if {$dir < 0} { + event generate $w <> + } else { + event generate $w <> + } +} + +## SelectAll -- +# Select widget contents. +# +proc ttk::spinbox::SelectAll {w} { + $w selection range 0 end + $w icursor end +} + +## Limit -- +# Limit $v to lie between $min and $max +# +proc ttk::spinbox::Limit {v min max} { + if {$v < $min} { return $min } + if {$v > $max} { return $max } + return $v +} + +## Wrap -- +# Adjust $v to lie between $min and $max, wrapping if out of bounds. +# +proc ttk::spinbox::Wrap {v min max} { + if {$v < $min} { return $max } + if {$v > $max} { return $min } + return $v +} + +## Adjust -- +# Limit or wrap spinbox value depending on -wrap. +# +proc ttk::spinbox::Adjust {w v min max} { + if {[$w cget -wrap]} { + return [Wrap $v $min $max] + } else { + return [Limit $v $min $max] + } +} + +## Spin -- +# Handle <> and <> events. +# If -values is specified, cycle through the list. +# Otherwise cycle through numeric range based on +# -from, -to, and -increment. +# +proc ttk::spinbox::Spin {w dir} { + set nvalues [llength [set values [$w cget -values]]] + set value [$w get] + if {$nvalues} { + set current [lsearch -exact $values $value] + set index [Adjust $w [expr {$current + $dir}] 0 [expr {$nvalues - 1}]] + $w set [lindex $values $index] + } else { + if {[catch { + set v [expr {[scan [$w get] %f] + $dir * [$w cget -increment]}] + }]} { + set v [$w cget -from] + } + $w set [FormatValue $w [Adjust $w $v [$w cget -from] [$w cget -to]]] + } + SelectAll $w + uplevel #0 [$w cget -command] +} + +## FormatValue -- +# Reformat numeric value based on -format. +# +proc ttk::spinbox::FormatValue {w val} { + set fmt [$w cget -format] + if {$fmt eq ""} { + # Try to guess a suitable -format based on -increment. + set delta [expr {abs([$w cget -increment])}] + if {0 < $delta && $delta < 1} { + # NB: This guesses wrong if -increment has more than 1 + # significant digit itself, e.g., -increment 0.25 + set nsd [expr {int(ceil(-log10($delta)))}] + set fmt "%.${nsd}f" + } else { + set fmt "%.0f" + } + } + return [format $fmt $val] +} + +#*EOF* diff --git a/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/treeview.tcl b/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/treeview.tcl new file mode 100644 index 00000000..1160e9bd --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/treeview.tcl @@ -0,0 +1,363 @@ +# +# ttk::treeview widget bindings and utilities. +# + +namespace eval ttk::treeview { + variable State + + # Enter/Leave/Motion + # + set State(activeWidget) {} + set State(activeHeading) {} + + # Press/drag/release: + # + set State(pressMode) none + set State(pressX) 0 + + # For pressMode == "resize" + set State(resizeColumn) #0 + + # For pressmode == "heading" + set State(heading) {} +} + +### Widget bindings. +# + +bind Treeview { ttk::treeview::Motion %W %x %y } +bind Treeview { #nothing } +bind Treeview { ttk::treeview::ActivateHeading {} {}} +bind Treeview { ttk::treeview::Press %W %x %y } +bind Treeview { ttk::treeview::DoubleClick %W %x %y } +bind Treeview { ttk::treeview::Release %W %x %y } +bind Treeview { ttk::treeview::Drag %W %x %y } +bind Treeview { ttk::treeview::Keynav %W up } +bind Treeview { ttk::treeview::Keynav %W down } +bind Treeview { ttk::treeview::Keynav %W right } +bind Treeview { ttk::treeview::Keynav %W left } +bind Treeview { %W yview scroll -1 pages } +bind Treeview { %W yview scroll 1 pages } +bind Treeview { ttk::treeview::ToggleFocus %W } +bind Treeview { ttk::treeview::ToggleFocus %W } + +bind Treeview \ + { ttk::treeview::Select %W %x %y extend } +bind Treeview \ + { ttk::treeview::Select %W %x %y toggle } + +ttk::copyBindings TtkScrollable Treeview + +### Binding procedures. +# + +## Keynav -- Keyboard navigation +# +# @@@ TODO: verify/rewrite up and down code. +# +proc ttk::treeview::Keynav {w dir} { + set focus [$w focus] + if {$focus eq ""} { return } + + switch -- $dir { + up { + if {[set up [$w prev $focus]] eq ""} { + set focus [$w parent $focus] + } else { + while {[$w item $up -open] && [llength [$w children $up]]} { + set up [lindex [$w children $up] end] + } + set focus $up + } + } + down { + if {[$w item $focus -open] && [llength [$w children $focus]]} { + set focus [lindex [$w children $focus] 0] + } else { + set up $focus + while {$up ne "" && [set down [$w next $up]] eq ""} { + set up [$w parent $up] + } + set focus $down + } + } + left { + if {[$w item $focus -open] && [llength [$w children $focus]]} { + CloseItem $w $focus + } else { + set focus [$w parent $focus] + } + } + right { + OpenItem $w $focus + } + } + + if {$focus != {}} { + SelectOp $w $focus choose + } +} + +## Motion -- pointer motion binding. +# Sets cursor, active element ... +# +proc ttk::treeview::Motion {w x y} { + set cursor {} + set activeHeading {} + + switch -- [$w identify region $x $y] { + separator { set cursor hresize } + heading { set activeHeading [$w identify column $x $y] } + } + + ttk::setCursor $w $cursor + ActivateHeading $w $activeHeading +} + +## ActivateHeading -- track active heading element +# +proc ttk::treeview::ActivateHeading {w heading} { + variable State + + if {$w != $State(activeWidget) || $heading != $State(activeHeading)} { + if {$State(activeHeading) != {}} { + $State(activeWidget) heading $State(activeHeading) state !active + } + if {$heading != {}} { + $w heading $heading state active + } + set State(activeHeading) $heading + set State(activeWidget) $w + } +} + +## Select $w $x $y $selectop +# Binding procedure for selection operations. +# See "Selection modes", below. +# +proc ttk::treeview::Select {w x y op} { + if {[set item [$w identify row $x $y]] ne "" } { + SelectOp $w $item $op + } +} + +## DoubleClick -- Double-ButtonPress-1 binding. +# +proc ttk::treeview::DoubleClick {w x y} { + if {[set row [$w identify row $x $y]] ne ""} { + Toggle $w $row + } else { + Press $w $x $y ;# perform single-click action + } +} + +## Press -- ButtonPress binding. +# +proc ttk::treeview::Press {w x y} { + focus $w + switch -- [$w identify region $x $y] { + nothing { } + heading { heading.press $w $x $y } + separator { resize.press $w $x $y } + tree - + cell { + set item [$w identify item $x $y] + SelectOp $w $item choose + switch -glob -- [$w identify element $x $y] { + *indicator - + *disclosure { Toggle $w $item } + } + } + } +} + +## Drag -- B1-Motion binding +# +proc ttk::treeview::Drag {w x y} { + variable State + switch $State(pressMode) { + resize { resize.drag $w $x } + heading { heading.drag $w $x $y } + } +} + +proc ttk::treeview::Release {w x y} { + variable State + switch $State(pressMode) { + resize { resize.release $w $x } + heading { heading.release $w } + } + set State(pressMode) none + Motion $w $x $y +} + +### Interactive column resizing. +# +proc ttk::treeview::resize.press {w x y} { + variable State + set State(pressMode) "resize" + set State(resizeColumn) [$w identify column $x $y] +} + +proc ttk::treeview::resize.drag {w x} { + variable State + $w drag $State(resizeColumn) $x +} + +proc ttk::treeview::resize.release {w x} { + # no-op +} + +### Heading activation. +# + +proc ttk::treeview::heading.press {w x y} { + variable State + set column [$w identify column $x $y] + set State(pressMode) "heading" + set State(heading) $column + $w heading $column state pressed +} + +proc ttk::treeview::heading.drag {w x y} { + variable State + if { [$w identify region $x $y] eq "heading" + && [$w identify column $x $y] eq $State(heading) + } { + $w heading $State(heading) state pressed + } else { + $w heading $State(heading) state !pressed + } +} + +proc ttk::treeview::heading.release {w} { + variable State + if {[lsearch -exact [$w heading $State(heading) state] pressed] >= 0} { + after 0 [$w heading $State(heading) -command] + } + $w heading $State(heading) state !pressed +} + +### Selection modes. +# + +## SelectOp $w $item [ choose | extend | toggle ] -- +# Dispatch to appropriate selection operation +# depending on current value of -selectmode. +# +proc ttk::treeview::SelectOp {w item op} { + select.$op.[$w cget -selectmode] $w $item +} + +## -selectmode none: +# +proc ttk::treeview::select.choose.none {w item} { $w focus $item } +proc ttk::treeview::select.toggle.none {w item} { $w focus $item } +proc ttk::treeview::select.extend.none {w item} { $w focus $item } + +## -selectmode browse: +# +proc ttk::treeview::select.choose.browse {w item} { BrowseTo $w $item } +proc ttk::treeview::select.toggle.browse {w item} { BrowseTo $w $item } +proc ttk::treeview::select.extend.browse {w item} { BrowseTo $w $item } + +## -selectmode multiple: +# +proc ttk::treeview::select.choose.extended {w item} { + BrowseTo $w $item +} +proc ttk::treeview::select.toggle.extended {w item} { + $w selection toggle [list $item] +} +proc ttk::treeview::select.extend.extended {w item} { + if {[set anchor [$w focus]] ne ""} { + $w selection set [between $w $anchor $item] + } else { + BrowseTo $w $item + } +} + +### Tree structure utilities. +# + +## between $tv $item1 $item2 -- +# Returns a list of all items between $item1 and $item2, +# in preorder traversal order. $item1 and $item2 may be +# in either order. +# +# NOTES: +# This routine is O(N) in the size of the tree. +# There's probably a way to do this that's O(N) in the number +# of items returned, but I'm not clever enough to figure it out. +# +proc ttk::treeview::between {tv item1 item2} { + variable between [list] + variable selectingBetween 0 + ScanBetween $tv $item1 $item2 {} + return $between +} + +## ScanBetween -- +# Recursive worker routine for ttk::treeview::between +# +proc ttk::treeview::ScanBetween {tv item1 item2 item} { + variable between + variable selectingBetween + + if {$item eq $item1 || $item eq $item2} { + lappend between $item + set selectingBetween [expr {!$selectingBetween}] + } elseif {$selectingBetween} { + lappend between $item + } + foreach child [$tv children $item] { + ScanBetween $tv $item1 $item2 $child + } +} + +### User interaction utilities. +# + +## OpenItem, CloseItem -- Set the open state of an item, generate event +# + +proc ttk::treeview::OpenItem {w item} { + $w focus $item + event generate $w <> + $w item $item -open true +} + +proc ttk::treeview::CloseItem {w item} { + $w item $item -open false + $w focus $item + event generate $w <> +} + +## Toggle -- toggle opened/closed state of item +# +proc ttk::treeview::Toggle {w item} { + if {[$w item $item -open]} { + CloseItem $w $item + } else { + OpenItem $w $item + } +} + +## ToggleFocus -- toggle opened/closed state of focus item +# +proc ttk::treeview::ToggleFocus {w} { + set item [$w focus] + if {$item ne ""} { + Toggle $w $item + } +} + +## BrowseTo -- navigate to specified item; set focus and selection +# +proc ttk::treeview::BrowseTo {w item} { + $w see $item + $w focus $item + $w selection set [list $item] +} + +#*EOF* diff --git a/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/ttk.tcl b/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/ttk.tcl new file mode 100644 index 00000000..7bae211d --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/ttk.tcl @@ -0,0 +1,176 @@ +# +# Ttk widget set initialization script. +# + +### Source library scripts. +# + +namespace eval ::ttk { + variable library + if {![info exists library]} { + set library [file dirname [info script]] + } +} + +source [file join $::ttk::library fonts.tcl] +source [file join $::ttk::library cursors.tcl] +source [file join $::ttk::library utils.tcl] + +## ttk::deprecated $old $new -- +# Define $old command as a deprecated alias for $new command +# $old and $new must be fully namespace-qualified. +# +proc ttk::deprecated {old new} { + interp alias {} $old {} ttk::do'deprecate $old $new +} +## do'deprecate -- +# Implementation procedure for deprecated commands -- +# issue a warning (once), then re-alias old to new. +# +proc ttk::do'deprecate {old new args} { + deprecated'warning $old $new + interp alias {} $old {} $new + uplevel 1 [linsert $args 0 $new] +} + +## deprecated'warning -- +# Gripe about use of deprecated commands. +# +proc ttk::deprecated'warning {old new} { + puts stderr "$old deprecated -- use $new instead" +} + +### Backward-compatibility. +# +# +# Make [package require tile] an effective no-op; +# see SF#3016598 for discussion. +# +package ifneeded tile 0.8.6 { package provide tile 0.8.6 } + +# ttk::panedwindow used to be named ttk::paned. Keep the alias for now. +# +::ttk::deprecated ::ttk::paned ::ttk::panedwindow + +### ::ttk::ThemeChanged -- +# Called from [::ttk::style theme use]. +# Sends a <> virtual event to all widgets. +# +proc ::ttk::ThemeChanged {} { + set Q . + while {[llength $Q]} { + set QN [list] + foreach w $Q { + event generate $w <> + foreach child [winfo children $w] { + lappend QN $child + } + } + set Q $QN + } +} + +### Public API. +# + +proc ::ttk::themes {{ptn *}} { + set themes [list] + + foreach pkg [lsearch -inline -all -glob [package names] ttk::theme::$ptn] { + lappend themes [namespace tail $pkg] + } + + return $themes +} + +## ttk::setTheme $theme -- +# Set the current theme to $theme, loading it if necessary. +# +proc ::ttk::setTheme {theme} { + variable currentTheme ;# @@@ Temp -- [::ttk::style theme use] doesn't work + if {$theme ni [::ttk::style theme names]} { + package require ttk::theme::$theme + } + ::ttk::style theme use $theme + set currentTheme $theme +} + +### Load widget bindings. +# +source [file join $::ttk::library button.tcl] +source [file join $::ttk::library menubutton.tcl] +source [file join $::ttk::library scrollbar.tcl] +source [file join $::ttk::library scale.tcl] +source [file join $::ttk::library progress.tcl] +source [file join $::ttk::library notebook.tcl] +source [file join $::ttk::library panedwindow.tcl] +source [file join $::ttk::library entry.tcl] +source [file join $::ttk::library combobox.tcl] ;# dependency: entry.tcl +source [file join $::ttk::library spinbox.tcl] ;# dependency: entry.tcl +source [file join $::ttk::library treeview.tcl] +source [file join $::ttk::library sizegrip.tcl] + +## Label and Labelframe bindings: +# (not enough to justify their own file...) +# +bind TLabelframe <> { tk::TabToWindow [tk_focusNext %W] } +bind TLabel <> { tk::TabToWindow [tk_focusNext %W] } + +### Load settings for built-in themes: +# +proc ttk::LoadThemes {} { + variable library + + # "default" always present: + uplevel #0 [list source [file join $library defaults.tcl]] + + set builtinThemes [style theme names] + foreach {theme scripts} { + classic classicTheme.tcl + alt altTheme.tcl + clam clamTheme.tcl + winnative winTheme.tcl + xpnative {xpTheme.tcl vistaTheme.tcl} + aqua aquaTheme.tcl + } { + if {[lsearch -exact $builtinThemes $theme] >= 0} { + foreach script $scripts { + uplevel #0 [list source [file join $library $script]] + } + } + } +} + +ttk::LoadThemes; rename ::ttk::LoadThemes {} + +### Select platform-specific default theme: +# +# Notes: +# + On OSX, aqua theme is the default +# + On Windows, xpnative takes precedence over winnative if available. +# + On X11, users can use the X resource database to +# specify a preferred theme (*TkTheme: themeName); +# otherwise "default" is used. +# + +proc ttk::DefaultTheme {} { + set preferred [list aqua vista xpnative winnative] + + set userTheme [option get . tkTheme TkTheme] + if {$userTheme ne {} && ![catch { + uplevel #0 [list package require ttk::theme::$userTheme] + }]} { + return $userTheme + } + + foreach theme $preferred { + if {[package provide ttk::theme::$theme] ne ""} { + return $theme + } + } + return "default" +} + +ttk::setTheme [ttk::DefaultTheme] ; rename ttk::DefaultTheme {} + +#*EOF* diff --git a/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/utils.tcl b/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/utils.tcl new file mode 100644 index 00000000..7cc1bb72 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/utils.tcl @@ -0,0 +1,350 @@ +# +# Utilities for widget implementations. +# + +### Focus management. +# +# See also: #1516479 +# + +## ttk::takefocus -- +# This is the default value of the "-takefocus" option +# for ttk::* widgets that participate in keyboard navigation. +# +# NOTES: +# tk::FocusOK (called by tk_focusNext) tests [winfo viewable] +# if -takefocus is 1, empty, or missing; but not if it's a +# script prefix, so we have to check that here as well. +# +# +proc ttk::takefocus {w} { + expr {[$w instate !disabled] && [winfo viewable $w]} +} + +## ttk::GuessTakeFocus -- +# This routine is called as a fallback for widgets +# with a missing or empty -takefocus option. +# +# It implements the same heuristics as tk::FocusOK. +# +proc ttk::GuessTakeFocus {w} { + # Don't traverse to widgets with '-state disabled': + # + if {![catch {$w cget -state} state] && $state eq "disabled"} { + return 0 + } + + # Allow traversal to widgets with explicit key or focus bindings: + # + if {[regexp {Key|Focus} [concat [bind $w] [bind [winfo class $w]]]]} { + return 1; + } + + # Default is nontraversable: + # + return 0; +} + +## ttk::traverseTo $w -- +# Set the keyboard focus to the specified window. +# +proc ttk::traverseTo {w} { + set focus [focus] + if {$focus ne ""} { + event generate $focus <> + } + focus $w + event generate $w <> +} + +## ttk::clickToFocus $w -- +# Utility routine, used in bindings -- +# Assign keyboard focus to the specified widget if -takefocus is enabled. +# +proc ttk::clickToFocus {w} { + if {[ttk::takesFocus $w]} { focus $w } +} + +## ttk::takesFocus w -- +# Test if the widget can take keyboard focus. +# +# See the description of the -takefocus option in options(n) +# for details. +# +proc ttk::takesFocus {w} { + if {![winfo viewable $w]} { + return 0 + } elseif {[catch {$w cget -takefocus} takefocus]} { + return [GuessTakeFocus $w] + } else { + switch -- $takefocus { + "" { return [GuessTakeFocus $w] } + 0 { return 0 } + 1 { return 1 } + default { + return [expr {[uplevel #0 $takefocus [list $w]] == 1}] + } + } + } +} + +## ttk::focusFirst $w -- +# Return the first descendant of $w, in preorder traversal order, +# that can take keyboard focus, "" if none do. +# +# See also: tk_focusNext +# + +proc ttk::focusFirst {w} { + if {[ttk::takesFocus $w]} { + return $w + } + foreach child [winfo children $w] { + if {[set c [ttk::focusFirst $child]] ne ""} { + return $c + } + } + return "" +} + +### Grabs. +# +# Rules: +# Each call to [grabWindow $w] or [globalGrab $w] must be +# matched with a call to [releaseGrab $w] in LIFO order. +# +# Do not call [grabWindow $w] for a window that currently +# appears on the grab stack. +# +# See #1239190 and #1411983 for more discussion. +# +namespace eval ttk { + variable Grab ;# map: window name -> grab token + + # grab token details: + # Two-element list containing: + # 1) a script to evaluate to restore the previous grab (if any); + # 2) a script to evaluate to restore the focus (if any) +} + +## SaveGrab -- +# Record current grab and focus windows. +# +proc ttk::SaveGrab {w} { + variable Grab + + if {[info exists Grab($w)]} { + # $w is already on the grab stack. + # This should not happen, but bail out in case it does anyway: + # + return + } + + set restoreGrab [set restoreFocus ""] + + set grabbed [grab current $w] + if {[winfo exists $grabbed]} { + switch [grab status $grabbed] { + global { set restoreGrab [list grab -global $grabbed] } + local { set restoreGrab [list grab $grabbed] } + none { ;# grab window is really in a different interp } + } + } + + set focus [focus] + if {$focus ne ""} { + set restoreFocus [list focus -force $focus] + } + + set Grab($w) [list $restoreGrab $restoreFocus] +} + +## RestoreGrab -- +# Restore previous grab and focus windows. +# If called more than once without an intervening [SaveGrab $w], +# does nothing. +# +proc ttk::RestoreGrab {w} { + variable Grab + + if {![info exists Grab($w)]} { # Ignore + return; + } + + # The previous grab/focus window may have been destroyed, + # unmapped, or some other abnormal condition; ignore any errors. + # + foreach script $Grab($w) { + catch $script + } + + unset Grab($w) +} + +## ttk::grabWindow $w -- +# Records the current focus and grab windows, sets an application-modal +# grab on window $w. +# +proc ttk::grabWindow {w} { + SaveGrab $w + grab $w +} + +## ttk::globalGrab $w -- +# Same as grabWindow, but sets a global grab on $w. +# +proc ttk::globalGrab {w} { + SaveGrab $w + grab -global $w +} + +## ttk::releaseGrab -- +# Release the grab previously set by [ttk::grabWindow] +# or [ttk::globalGrab]. +# +proc ttk::releaseGrab {w} { + grab release $w + RestoreGrab $w +} + +### Auto-repeat. +# +# NOTE: repeating widgets do not have -repeatdelay +# or -repeatinterval resources as in standard Tk; +# instead a single set of settings is applied application-wide. +# (TODO: make this user-configurable) +# +# (@@@ Windows seems to use something like 500/50 milliseconds +# @@@ for -repeatdelay/-repeatinterval) +# + +namespace eval ttk { + variable Repeat + array set Repeat { + delay 300 + interval 100 + timer {} + script {} + } +} + +## ttk::Repeatedly -- +# Begin auto-repeat. +# +proc ttk::Repeatedly {args} { + variable Repeat + after cancel $Repeat(timer) + set script [uplevel 1 [list namespace code $args]] + set Repeat(script) $script + uplevel #0 $script + set Repeat(timer) [after $Repeat(delay) ttk::Repeat] +} + +## Repeat -- +# Continue auto-repeat +# +proc ttk::Repeat {} { + variable Repeat + uplevel #0 $Repeat(script) + set Repeat(timer) [after $Repeat(interval) ttk::Repeat] +} + +## ttk::CancelRepeat -- +# Halt auto-repeat. +# +proc ttk::CancelRepeat {} { + variable Repeat + after cancel $Repeat(timer) +} + +### Bindings. +# + +## ttk::copyBindings $from $to -- +# Utility routine; copies bindings from one bindtag onto another. +# +proc ttk::copyBindings {from to} { + foreach event [bind $from] { + bind $to $event [bind $from $event] + } +} + +### Mousewheel bindings. +# +# Platform inconsistencies: +# +# On X11, the server typically maps the mouse wheel to Button4 and Button5. +# +# On OSX, Tk generates sensible values for the %D field in events. +# +# On Windows, %D must be scaled by a factor of 120. +# In addition, Tk redirects mousewheel events to the window with +# keyboard focus instead of sending them to the window under the pointer. +# We do not attempt to fix that here, see also TIP#171. +# +# OSX conventionally uses Shift+MouseWheel for horizontal scrolling, +# and Option+MouseWheel for accelerated scrolling. +# +# The Shift+MouseWheel behavior is not conventional on Windows or most +# X11 toolkits, but it's useful. +# +# MouseWheel scrolling is accelerated on X11, which is conventional +# for Tk and appears to be conventional for other toolkits (although +# Gtk+ and Qt do not appear to use as large a factor). +# + +## ttk::bindMouseWheel $bindtag $command... +# Adds basic mousewheel support to $bindtag. +# $command will be passed one additional argument +# specifying the mousewheel direction (-1: up, +1: down). +# + +proc ttk::bindMouseWheel {bindtag callback} { + switch -- [tk windowingsystem] { + x11 { + bind $bindtag "$callback -1" + bind $bindtag "$callback +1" + } + win32 { + bind $bindtag [append callback { [expr {-(%D/120)}]}] + } + aqua { + bind $bindtag [append callback { [expr {-(%D)}]} ] + } + } +} + +## Mousewheel bindings for standard scrollable widgets. +# +# Usage: [ttk::copyBindings TtkScrollable $bindtag] +# +# $bindtag should be for a widget that supports the +# standard scrollbar protocol. +# + +switch -- [tk windowingsystem] { + x11 { + bind TtkScrollable { %W yview scroll -5 units } + bind TtkScrollable { %W yview scroll 5 units } + bind TtkScrollable { %W xview scroll -5 units } + bind TtkScrollable { %W xview scroll 5 units } + } + win32 { + bind TtkScrollable \ + { %W yview scroll [expr {-(%D/120)}] units } + bind TtkScrollable \ + { %W xview scroll [expr {-(%D/120)}] units } + } + aqua { + bind TtkScrollable \ + { %W yview scroll [expr {-(%D)}] units } + bind TtkScrollable \ + { %W xview scroll [expr {-(%D)}] units } + bind TtkScrollable \ + { %W yview scroll [expr {-10*(%D)}] units } + bind TtkScrollable \ + { %W xview scroll [expr {-10*(%D)}] units } + } +} + +#*EOF* diff --git a/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/vistaTheme.tcl b/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/vistaTheme.tcl new file mode 100644 index 00000000..99410cb7 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/vistaTheme.tcl @@ -0,0 +1,224 @@ +# +# Settings for Microsoft Windows Vista and Server 2008 +# + +# The Vista theme can only be defined on Windows Vista and above. The theme +# is created in C due to the need to assign a theme-enabled function for +# detecting when themeing is disabled. On systems that cannot support the +# Vista theme, there will be no such theme created and we must not +# evaluate this script. + +if {"vista" ni [ttk::style theme names]} { + return +} + +namespace eval ttk::theme::vista { + + ttk::style theme settings vista { + + ttk::style configure . \ + -background SystemButtonFace \ + -foreground SystemWindowText \ + -selectforeground SystemHighlightText \ + -selectbackground SystemHighlight \ + -font TkDefaultFont \ + ; + + ttk::style map "." \ + -foreground [list disabled SystemGrayText] \ + ; + + ttk::style configure TButton -anchor center -padding {1 1} -width -11 + ttk::style configure TRadiobutton -padding 2 + ttk::style configure TCheckbutton -padding 2 + ttk::style configure TMenubutton -padding {8 4} + + ttk::style element create Menubutton.dropdown vsapi \ + TOOLBAR 4 {{selected active} 6 {selected !active} 5 + disabled 4 pressed 3 active 2 {} 1} \ + -syssize {SM_CXVSCROLL SM_CYVSCROLL} + + ttk::style configure TNotebook -tabmargins {2 2 2 0} + ttk::style map TNotebook.Tab \ + -expand [list selected {2 2 2 2}] + + # Treeview: + ttk::style configure Heading -font TkHeadingFont + ttk::style configure Treeview -background SystemWindow + ttk::style map Treeview \ + -background [list selected SystemHighlight] \ + -foreground [list selected SystemHighlightText] ; + + # Label and Toolbutton + ttk::style configure TLabelframe.Label -foreground "#0046d5" + + ttk::style configure Toolbutton -padding {4 4} + + # Combobox + ttk::style configure TCombobox -padding 2 + ttk::style element create Combobox.field vsapi \ + COMBOBOX 2 {{} 1} + ttk::style element create Combobox.border vsapi \ + COMBOBOX 4 {disabled 4 focus 3 active 2 hover 2 {} 1} + ttk::style element create Combobox.rightdownarrow vsapi \ + COMBOBOX 6 {disabled 4 pressed 3 active 2 {} 1} \ + -syssize {SM_CXVSCROLL SM_CYVSCROLL} + ttk::style layout TCombobox { + Combobox.border -sticky nswe -border 0 -children { + Combobox.rightdownarrow -side right -sticky ns + Combobox.padding -expand 1 -sticky nswe -children { + Combobox.focus -expand 1 -sticky nswe -children { + Combobox.textarea -sticky nswe + } + } + } + } + # Vista.Combobox droplist frame + ttk::style element create ComboboxPopdownFrame.background vsapi\ + LISTBOX 3 {disabled 4 active 3 focus 2 {} 1} + ttk::style layout ComboboxPopdownFrame { + ComboboxPopdownFrame.background -sticky news -border 1 -children { + ComboboxPopdownFrame.padding -sticky news + } + } + ttk::style map TCombobox \ + -selectbackground [list !focus SystemWindow] \ + -selectforeground [list !focus SystemWindowText] \ + -foreground [list \ + disabled SystemGrayText \ + {readonly focus} SystemHighlightText \ + ] \ + -focusfill [list {readonly focus} SystemHighlight] \ + ; + + # Entry + ttk::style configure TEntry -padding {1 1 1 1} ;# Needs lookup + ttk::style element create Entry.field vsapi \ + EDIT 6 {disabled 4 focus 3 hover 2 {} 1} -padding {2 2 2 2} + ttk::style element create Entry.background vsapi \ + EDIT 3 {disabled 3 readonly 3 focus 4 hover 2 {} 1} + ttk::style layout TEntry { + Entry.field -sticky news -border 0 -children { + Entry.background -sticky news -children { + Entry.padding -sticky news -children { + Entry.textarea -sticky news + } + } + } + } + ttk::style map TEntry \ + -selectbackground [list !focus SystemWindow] \ + -selectforeground [list !focus SystemWindowText] \ + ; + + # Spinbox + ttk::style configure TSpinbox -padding 0 + ttk::style element create Spinbox.field vsapi \ + EDIT 9 {disabled 4 focus 3 hover 2 {} 1} -padding {1 1 1 2} + ttk::style element create Spinbox.background vsapi \ + EDIT 3 {disabled 3 readonly 3 focus 4 hover 2 {} 1} + ttk::style element create Spinbox.innerbg vsapi \ + EDIT 3 {disabled 3 readonly 3 focus 4 hover 2 {} 1}\ + -padding {2 0 15 2} + ttk::style element create Spinbox.uparrow vsapi \ + SPIN 1 {disabled 4 pressed 3 active 2 {} 1} \ + -padding 1 -halfheight 1 \ + -syssize { SM_CXVSCROLL SM_CYVSCROLL } + ttk::style element create Spinbox.downarrow vsapi \ + SPIN 2 {disabled 4 pressed 3 active 2 {} 1} \ + -padding 1 -halfheight 1 \ + -syssize { SM_CXVSCROLL SM_CYVSCROLL } + ttk::style layout TSpinbox { + Spinbox.field -sticky nswe -children { + Spinbox.background -sticky news -children { + Spinbox.padding -sticky news -children { + Spinbox.innerbg -sticky news -children { + Spinbox.textarea -expand 1 -sticky {} + } + } + Spinbox.uparrow -side top -sticky ens + Spinbox.downarrow -side bottom -sticky ens + } + } + } + ttk::style map TSpinbox \ + -selectbackground [list !focus SystemWindow] \ + -selectforeground [list !focus SystemWindowText] \ + ; + + + # SCROLLBAR elements (Vista includes a state for 'hover') + ttk::style element create Vertical.Scrollbar.uparrow vsapi \ + SCROLLBAR 1 {disabled 4 pressed 3 active 2 hover 17 {} 1} \ + -syssize {SM_CXVSCROLL SM_CYVSCROLL} + ttk::style element create Vertical.Scrollbar.downarrow vsapi \ + SCROLLBAR 1 {disabled 8 pressed 7 active 6 hover 18 {} 5} \ + -syssize {SM_CXVSCROLL SM_CYVSCROLL} + ttk::style element create Vertical.Scrollbar.trough vsapi \ + SCROLLBAR 7 {disabled 4 pressed 3 active 2 hover 5 {} 1} + ttk::style element create Vertical.Scrollbar.thumb vsapi \ + SCROLLBAR 3 {disabled 4 pressed 3 active 2 hover 5 {} 1} \ + -syssize {SM_CXVSCROLL SM_CYVSCROLL} + ttk::style element create Vertical.Scrollbar.grip vsapi \ + SCROLLBAR 9 {disabled 4 pressed 3 active 2 hover 5 {} 1} \ + -syssize {SM_CXVSCROLL SM_CYVSCROLL} + ttk::style element create Horizontal.Scrollbar.leftarrow vsapi \ + SCROLLBAR 1 {disabled 12 pressed 11 active 10 hover 19 {} 9} \ + -syssize {SM_CXHSCROLL SM_CYHSCROLL} + ttk::style element create Horizontal.Scrollbar.rightarrow vsapi \ + SCROLLBAR 1 {disabled 16 pressed 15 active 14 hover 20 {} 13} \ + -syssize {SM_CXHSCROLL SM_CYHSCROLL} + ttk::style element create Horizontal.Scrollbar.trough vsapi \ + SCROLLBAR 5 {disabled 4 pressed 3 active 2 hover 5 {} 1} + ttk::style element create Horizontal.Scrollbar.thumb vsapi \ + SCROLLBAR 2 {disabled 4 pressed 3 active 2 hover 5 {} 1} \ + -syssize {SM_CXHSCROLL SM_CYHSCROLL} + ttk::style element create Horizontal.Scrollbar.grip vsapi \ + SCROLLBAR 8 {disabled 4 pressed 3 active 2 hover 5 {} 1} + + # Progressbar + ttk::style element create Horizontal.Progressbar.pbar vsapi \ + PROGRESS 3 {{} 1} -padding 8 + ttk::style layout Horizontal.TProgressbar { + Horizontal.Progressbar.trough -sticky nswe -children { + Horizontal.Progressbar.pbar -side left -sticky ns + } + } + ttk::style element create Vertical.Progressbar.pbar vsapi \ + PROGRESS 3 {{} 1} -padding 8 + ttk::style layout Vertical.TProgressbar { + Vertical.Progressbar.trough -sticky nswe -children { + Vertical.Progressbar.pbar -side bottom -sticky we + } + } + + # Scale + ttk::style element create Horizontal.Scale.slider vsapi \ + TRACKBAR 3 {disabled 5 focus 4 pressed 3 active 2 {} 1} \ + -width 6 -height 12 + ttk::style layout Horizontal.TScale { + Scale.focus -expand 1 -sticky nswe -children { + Horizontal.Scale.trough -expand 1 -sticky nswe -children { + Horizontal.Scale.track -sticky we + Horizontal.Scale.slider -side left -sticky {} + } + } + } + ttk::style element create Vertical.Scale.slider vsapi \ + TRACKBAR 6 {disabled 5 focus 4 pressed 3 active 2 {} 1} \ + -width 12 -height 6 + ttk::style layout Vertical.TScale { + Scale.focus -expand 1 -sticky nswe -children { + Vertical.Scale.trough -expand 1 -sticky nswe -children { + Vertical.Scale.track -sticky ns + Vertical.Scale.slider -side top -sticky {} + } + } + } + + # Treeview + ttk::style configure Item -padding {4 0 0 0} + + package provide ttk::theme::vista 1.0 + } +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/winTheme.tcl b/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/winTheme.tcl new file mode 100644 index 00000000..55367bcd --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/winTheme.tcl @@ -0,0 +1,80 @@ +# +# Settings for 'winnative' theme. +# + +namespace eval ttk::theme::winnative { + ttk::style theme settings winnative { + + ttk::style configure "." \ + -background SystemButtonFace \ + -foreground SystemWindowText \ + -selectforeground SystemHighlightText \ + -selectbackground SystemHighlight \ + -troughcolor SystemScrollbar \ + -font TkDefaultFont \ + ; + + ttk::style map "." -foreground [list disabled SystemGrayText] ; + ttk::style map "." -embossed [list disabled 1] ; + + ttk::style configure TButton \ + -anchor center -width -11 -relief raised -shiftrelief 1 + ttk::style configure TCheckbutton -padding "2 4" + ttk::style configure TRadiobutton -padding "2 4" + ttk::style configure TMenubutton \ + -padding "8 4" -arrowsize 3 -relief raised + + ttk::style map TButton -relief {{!disabled pressed} sunken} + + ttk::style configure TEntry \ + -padding 2 -selectborderwidth 0 -insertwidth 1 + ttk::style map TEntry \ + -fieldbackground \ + [list readonly SystemButtonFace disabled SystemButtonFace] \ + -selectbackground [list !focus SystemWindow] \ + -selectforeground [list !focus SystemWindowText] \ + ; + + ttk::style configure TCombobox -padding 2 + ttk::style map TCombobox \ + -selectbackground [list !focus SystemWindow] \ + -selectforeground [list !focus SystemWindowText] \ + -fieldbackground [list \ + readonly SystemButtonFace \ + disabled SystemButtonFace] \ + -foreground [list \ + disabled SystemGrayText \ + {readonly focus} SystemHighlightText \ + ] \ + -focusfill [list {readonly focus} SystemHighlight] \ + ; + + ttk::style element create ComboboxPopdownFrame.border from default + ttk::style configure ComboboxPopdownFrame \ + -borderwidth 1 -relief solid + + ttk::style configure TSpinbox -padding {2 0 16 0} + + ttk::style configure TLabelframe -borderwidth 2 -relief groove + + ttk::style configure Toolbutton -relief flat -padding {8 4} + ttk::style map Toolbutton -relief \ + {disabled flat selected sunken pressed sunken active raised} + + ttk::style configure TScale -groovewidth 4 + + ttk::style configure TNotebook -tabmargins {2 2 2 0} + ttk::style configure TNotebook.Tab -padding {3 1} -borderwidth 1 + ttk::style map TNotebook.Tab -expand [list selected {2 2 2 0}] + + # Treeview: + ttk::style configure Heading -font TkHeadingFont -relief raised + ttk::style configure Treeview -background SystemWindow + ttk::style map Treeview \ + -background [list selected SystemHighlight] \ + -foreground [list selected SystemHighlightText] ; + + ttk::style configure TProgressbar \ + -background SystemHighlight -borderwidth 0 ; + } +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/xpTheme.tcl b/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/xpTheme.tcl new file mode 100644 index 00000000..187ce0bc --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tk/ttk/xpTheme.tcl @@ -0,0 +1,65 @@ +# +# Settings for 'xpnative' theme +# + +namespace eval ttk::theme::xpnative { + + ttk::style theme settings xpnative { + + ttk::style configure . \ + -background SystemButtonFace \ + -foreground SystemWindowText \ + -selectforeground SystemHighlightText \ + -selectbackground SystemHighlight \ + -font TkDefaultFont \ + ; + + ttk::style map "." \ + -foreground [list disabled SystemGrayText] \ + ; + + ttk::style configure TButton -anchor center -padding {1 1} -width -11 + ttk::style configure TRadiobutton -padding 2 + ttk::style configure TCheckbutton -padding 2 + ttk::style configure TMenubutton -padding {8 4} + + ttk::style configure TNotebook -tabmargins {2 2 2 0} + ttk::style map TNotebook.Tab \ + -expand [list selected {2 2 2 2}] + + # Treeview: + ttk::style configure Heading -font TkHeadingFont + ttk::style configure Treeview -background SystemWindow + ttk::style map Treeview \ + -background [list selected SystemHighlight] \ + -foreground [list selected SystemHighlightText] ; + + ttk::style configure TLabelframe.Label -foreground "#0046d5" + + # OR: -padding {3 3 3 6}, which some apps seem to use. + ttk::style configure TEntry -padding {2 2 2 4} + ttk::style map TEntry \ + -selectbackground [list !focus SystemWindow] \ + -selectforeground [list !focus SystemWindowText] \ + ; + ttk::style configure TCombobox -padding 2 + ttk::style map TCombobox \ + -selectbackground [list !focus SystemWindow] \ + -selectforeground [list !focus SystemWindowText] \ + -foreground [list \ + disabled SystemGrayText \ + {readonly focus} SystemHighlightText \ + ] \ + -focusfill [list {readonly focus} SystemHighlight] \ + ; + + ttk::style configure TSpinbox -padding {2 0 14 0} + ttk::style map TSpinbox \ + -selectbackground [list !focus SystemWindow] \ + -selectforeground [list !focus SystemWindowText] \ + ; + + ttk::style configure Toolbutton -padding {4 4} + + } +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tk/unsupported.tcl b/extensions/fablabchemnitz/inkstitch/bin/tk/unsupported.tcl new file mode 100644 index 00000000..aeece38a --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tk/unsupported.tcl @@ -0,0 +1,295 @@ +# unsupported.tcl -- +# +# Commands provided by Tk without official support. Use them at your +# own risk. They may change or go away without notice. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# ---------------------------------------------------------------------- +# Unsupported compatibility interface for folks accessing Tk's private +# commands and variable against recommended usage. +# ---------------------------------------------------------------------- + +namespace eval ::tk::unsupported { + + # Map from the old global names of Tk private commands to their + # new namespace-encapsulated names. + + variable PrivateCommands + array set PrivateCommands { + tkButtonAutoInvoke ::tk::ButtonAutoInvoke + tkButtonDown ::tk::ButtonDown + tkButtonEnter ::tk::ButtonEnter + tkButtonInvoke ::tk::ButtonInvoke + tkButtonLeave ::tk::ButtonLeave + tkButtonUp ::tk::ButtonUp + tkCancelRepeat ::tk::CancelRepeat + tkCheckRadioDown ::tk::CheckRadioDown + tkCheckRadioEnter ::tk::CheckRadioEnter + tkCheckRadioInvoke ::tk::CheckRadioInvoke + tkColorDialog ::tk::dialog::color:: + tkColorDialog_BuildDialog ::tk::dialog::color::BuildDialog + tkColorDialog_CancelCmd ::tk::dialog::color::CancelCmd + tkColorDialog_Config ::tk::dialog::color::Config + tkColorDialog_CreateSelector ::tk::dialog::color::CreateSelector + tkColorDialog_DrawColorScale ::tk::dialog::color::DrawColorScale + tkColorDialog_EnterColorBar ::tk::dialog::color::EnterColorBar + tkColorDialog_InitValues ::tk::dialog::color::InitValues + tkColorDialog_HandleRGBEntry ::tk::dialog::color::HandleRGBEntry + tkColorDialog_HandleSelEntry ::tk::dialog::color::HandleSelEntry + tkColorDialog_LeaveColorBar ::tk::dialog::color::LeaveColorBar + tkColorDialog_MoveSelector ::tk::dialog::color::MoveSelector + tkColorDialog_OkCmd ::tk::dialog::color::OkCmd + tkColorDialog_RedrawColorBars ::tk::dialog::color::RedrawColorBars + tkColorDialog_RedrawFinalColor ::tk::dialog::color::RedrawFinalColor + tkColorDialog_ReleaseMouse ::tk::dialog::color::ReleaseMouse + tkColorDialog_ResizeColorBars ::tk::dialog::color::ResizeColorBars + tkColorDialog_RgbToX ::tk::dialog::color::RgbToX + tkColorDialog_SetRGBValue ::tk::dialog::color::SetRGBValue + tkColorDialog_StartMove ::tk::dialog::color::StartMove + tkColorDialog_XToRgb ::tk::dialog::color::XToRGB + tkConsoleAbout ::tk::ConsoleAbout + tkConsoleBind ::tk::ConsoleBind + tkConsoleExit ::tk::ConsoleExit + tkConsoleHistory ::tk::ConsoleHistory + tkConsoleInit ::tk::ConsoleInit + tkConsoleInsert ::tk::ConsoleInsert + tkConsoleInvoke ::tk::ConsoleInvoke + tkConsoleOutput ::tk::ConsoleOutput + tkConsolePrompt ::tk::ConsolePrompt + tkConsoleSource ::tk::ConsoleSource + tkDarken ::tk::Darken + tkEntryAutoScan ::tk::EntryAutoScan + tkEntryBackspace ::tk::EntryBackspace + tkEntryButton1 ::tk::EntryButton1 + tkEntryClosestGap ::tk::EntryClosestGap + tkEntryGetSelection ::tk::EntryGetSelection + tkEntryInsert ::tk::EntryInsert + tkEntryKeySelect ::tk::EntryKeySelect + tkEntryMouseSelect ::tk::EntryMouseSelect + tkEntryNextWord ::tk::EntryNextWord + tkEntryPaste ::tk::EntryPaste + tkEntryPreviousWord ::tk::EntryPreviousWord + tkEntrySeeInsert ::tk::EntrySeeInsert + tkEntrySetCursor ::tk::EntrySetCursor + tkEntryTranspose ::tk::EntryTranspose + tkEventMotifBindings ::tk::EventMotifBindings + tkFDGetFileTypes ::tk::FDGetFileTypes + tkFirstMenu ::tk::FirstMenu + tkFocusGroup_BindIn ::tk::FocusGroup_BindIn + tkFocusGroup_BindOut ::tk::FocusGroup_BindOut + tkFocusGroup_Create ::tk::FocusGroup_Create + tkFocusGroup_Destroy ::tk::FocusGroup_Destroy + tkFocusGroup_In ::tk::FocusGroup_In + tkFocusGroup_Out ::tk::FocusGroup_Out + tkFocusOK ::tk::FocusOK + tkGenerateMenuSelect ::tk::GenerateMenuSelect + tkIconList ::tk::IconList + tkIconList_Add ::tk::IconList_Add + tkIconList_Arrange ::tk::IconList_Arrange + tkIconList_AutoScan ::tk::IconList_AutoScan + tkIconList_Btn1 ::tk::IconList_Btn1 + tkIconList_Config ::tk::IconList_Config + tkIconList_Create ::tk::IconList_Create + tkIconList_CtrlBtn1 ::tk::IconList_CtrlBtn1 + tkIconList_Curselection ::tk::IconList_CurSelection + tkIconList_DeleteAll ::tk::IconList_DeleteAll + tkIconList_Double1 ::tk::IconList_Double1 + tkIconList_DrawSelection ::tk::IconList_DrawSelection + tkIconList_FocusIn ::tk::IconList_FocusIn + tkIconList_FocusOut ::tk::IconList_FocusOut + tkIconList_Get ::tk::IconList_Get + tkIconList_Goto ::tk::IconList_Goto + tkIconList_Index ::tk::IconList_Index + tkIconList_Invoke ::tk::IconList_Invoke + tkIconList_KeyPress ::tk::IconList_KeyPress + tkIconList_Leave1 ::tk::IconList_Leave1 + tkIconList_LeftRight ::tk::IconList_LeftRight + tkIconList_Motion1 ::tk::IconList_Motion1 + tkIconList_Reset ::tk::IconList_Reset + tkIconList_ReturnKey ::tk::IconList_ReturnKey + tkIconList_See ::tk::IconList_See + tkIconList_Select ::tk::IconList_Select + tkIconList_Selection ::tk::IconList_Selection + tkIconList_ShiftBtn1 ::tk::IconList_ShiftBtn1 + tkIconList_UpDown ::tk::IconList_UpDown + tkListbox ::tk::Listbox + tkListboxAutoScan ::tk::ListboxAutoScan + tkListboxBeginExtend ::tk::ListboxBeginExtend + tkListboxBeginSelect ::tk::ListboxBeginSelect + tkListboxBeginToggle ::tk::ListboxBeginToggle + tkListboxCancel ::tk::ListboxCancel + tkListboxDataExtend ::tk::ListboxDataExtend + tkListboxExtendUpDown ::tk::ListboxExtendUpDown + tkListboxKeyAccel_Goto ::tk::ListboxKeyAccel_Goto + tkListboxKeyAccel_Key ::tk::ListboxKeyAccel_Key + tkListboxKeyAccel_Reset ::tk::ListboxKeyAccel_Reset + tkListboxKeyAccel_Set ::tk::ListboxKeyAccel_Set + tkListboxKeyAccel_Unset ::tk::ListboxKeyAccel_Unxet + tkListboxMotion ::tk::ListboxMotion + tkListboxSelectAll ::tk::ListboxSelectAll + tkListboxUpDown ::tk::ListboxUpDown + tkListboxBeginToggle ::tk::ListboxBeginToggle + tkMbButtonUp ::tk::MbButtonUp + tkMbEnter ::tk::MbEnter + tkMbLeave ::tk::MbLeave + tkMbMotion ::tk::MbMotion + tkMbPost ::tk::MbPost + tkMenuButtonDown ::tk::MenuButtonDown + tkMenuDownArrow ::tk::MenuDownArrow + tkMenuDup ::tk::MenuDup + tkMenuEscape ::tk::MenuEscape + tkMenuFind ::tk::MenuFind + tkMenuFindName ::tk::MenuFindName + tkMenuFirstEntry ::tk::MenuFirstEntry + tkMenuInvoke ::tk::MenuInvoke + tkMenuLeave ::tk::MenuLeave + tkMenuLeftArrow ::tk::MenuLeftArrow + tkMenuMotion ::tk::MenuMotion + tkMenuNextEntry ::tk::MenuNextEntry + tkMenuNextMenu ::tk::MenuNextMenu + tkMenuRightArrow ::tk::MenuRightArrow + tkMenuUnpost ::tk::MenuUnpost + tkMenuUpArrow ::tk::MenuUpArrow + tkMessageBox ::tk::MessageBox + tkMotifFDialog ::tk::MotifFDialog + tkMotifFDialog_ActivateDList ::tk::MotifFDialog_ActivateDList + tkMotifFDialog_ActivateFList ::tk::MotifFDialog_ActivateFList + tkMotifFDialog_ActivateFEnt ::tk::MotifFDialog_ActivateFEnt + tkMotifFDialog_ActivateSEnt ::tk::MotifFDialog_ActivateSEnt + tkMotifFDialog ::tk::MotifFDialog + tkMotifFDialog_BrowseDList ::tk::MotifFDialog_BrowseDList + tkMotifFDialog_BrowseFList ::tk::MotifFDialog_BrowseFList + tkMotifFDialog_BuildUI ::tk::MotifFDialog_BuildUI + tkMotifFDialog_CancelCmd ::tk::MotifFDialog_CancelCmd + tkMotifFDialog_Config ::tk::MotifFDialog_Config + tkMotifFDialog_Create ::tk::MotifFDialog_Create + tkMotifFDialog_FileTypes ::tk::MotifFDialog_FileTypes + tkMotifFDialog_FilterCmd ::tk::MotifFDialog_FilterCmd + tkMotifFDialog_InterpFilter ::tk::MotifFDialog_InterpFilter + tkMotifFDialog_LoadFiles ::tk::MotifFDialog_LoadFiles + tkMotifFDialog_MakeSList ::tk::MotifFDialog_MakeSList + tkMotifFDialog_OkCmd ::tk::MotifFDialog_OkCmd + tkMotifFDialog_SetFilter ::tk::MotifFDialog_SetFilter + tkMotifFDialog_SetListMode ::tk::MotifFDialog_SetListMode + tkMotifFDialog_Update ::tk::MotifFDialog_Update + tkPostOverPoint ::tk::PostOverPoint + tkRecolorTree ::tk::RecolorTree + tkRestoreOldGrab ::tk::RestoreOldGrab + tkSaveGrabInfo ::tk::SaveGrabInfo + tkScaleActivate ::tk::ScaleActivate + tkScaleButtonDown ::tk::ScaleButtonDown + tkScaleButton2Down ::tk::ScaleButton2Down + tkScaleControlPress ::tk::ScaleControlPress + tkScaleDrag ::tk::ScaleDrag + tkScaleEndDrag ::tk::ScaleEndDrag + tkScaleIncrement ::tk::ScaleIncrement + tkScreenChanged ::tk::ScreenChanged + tkScrollButtonDown ::tk::ScrollButtonDown + tkScrollButton2Down ::tk::ScrollButton2Down + tkScrollButtonDrag ::tk::ScrollButtonDrag + tkScrollButtonUp ::tk::ScrollButtonUp + tkScrollByPages ::tk::ScrollByPages + tkScrollByUnits ::tk::ScrollByUnits + tkScrollEndDrag ::tk::ScrollEndDrag + tkScrollSelect ::tk::ScrollSelect + tkScrollStartDrag ::tk::ScrollStartDrag + tkScrollTopBottom ::tk::ScrollTopBottom + tkScrollToPos ::tk::ScrollToPos + tkTabToWindow ::tk::TabToWindow + tkTearOffMenu ::tk::TearOffMenu + tkTextAutoScan ::tk::TextAutoScan + tkTextButton1 ::tk::TextButton1 + tkTextClosestGap ::tk::TextClosestGap + tkTextInsert ::tk::TextInsert + tkTextKeyExtend ::tk::TextKeyExtend + tkTextKeySelect ::tk::TextKeySelect + tkTextNextPara ::tk::TextNextPara + tkTextNextPos ::tk::TextNextPos + tkTextNextWord ::tk::TextNextWord + tkTextPaste ::tk::TextPaste + tkTextPrevPara ::tk::TextPrevPara + tkTextPrevPos ::tk::TextPrevPos + tkTextPrevWord ::tk::TextPrevWord + tkTextResetAnchor ::tk::TextResetAnchor + tkTextScrollPages ::tk::TextScrollPages + tkTextSelectTo ::tk::TextSelectTo + tkTextSetCursor ::tk::TextSetCursor + tkTextTranspose ::tk::TextTranspose + tkTextUpDownLine ::tk::TextUpDownLine + tkTraverseToMenu ::tk::TraverseToMenu + tkTraverseWithinMenu ::tk::TraverseWithinMenu + unsupported1 ::tk::unsupported::MacWindowStyle + } + + # Map from the old global names of Tk private variable to their + # new namespace-encapsulated names. + + variable PrivateVariables + array set PrivateVariables { + droped_to_start ::tk::mac::Droped_to_start + histNum ::tk::HistNum + stub_location ::tk::mac::Stub_location + tkFocusIn ::tk::FocusIn + tkFocusOut ::tk::FocusOut + tkPalette ::tk::Palette + tkPriv ::tk::Priv + tkPrivMsgBox ::tk::PrivMsgBox + } +} + +# ::tk::unsupported::ExposePrivateCommand -- +# +# Expose one of Tk's private commands to be visible under its +# old global name +# +# Arguments: +# cmd Global name by which the command was once known, +# or a glob-style pattern. +# +# Results: +# None. +# +# Side effects: +# The old command name in the global namespace is aliased to the +# new private name. + +proc ::tk::unsupported::ExposePrivateCommand {cmd} { + variable PrivateCommands + set cmds [array get PrivateCommands $cmd] + if {[llength $cmds] == 0} { + return -code error "No compatibility support for \[$cmd]" + } + foreach {old new} $cmds { + namespace eval :: [list interp alias {} $old {}] $new + } +} + +# ::tk::unsupported::ExposePrivateVariable -- +# +# Expose one of Tk's private variables to be visible under its +# old global name +# +# Arguments: +# var Global name by which the variable was once known, +# or a glob-style pattern. +# +# Results: +# None. +# +# Side effects: +# The old variable name in the global namespace is aliased to the +# new private name. + +proc ::tk::unsupported::ExposePrivateVariable {var} { + variable PrivateVariables + set vars [array get PrivateVariables $var] + if {[llength $vars] == 0} { + return -code error "No compatibility support for \$$var" + } + namespace eval ::tk::mac {} + foreach {old new} $vars { + namespace eval :: [list upvar "#0" $new $old] + } +} diff --git a/extensions/fablabchemnitz/inkstitch/bin/tk/xmfbox.tcl b/extensions/fablabchemnitz/inkstitch/bin/tk/xmfbox.tcl new file mode 100644 index 00000000..0cbf2513 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/bin/tk/xmfbox.tcl @@ -0,0 +1,987 @@ +# xmfbox.tcl -- +# +# Implements the "Motif" style file selection dialog for the +# Unix platform. This implementation is used only if the +# "::tk_strictMotif" flag is set. +# +# Copyright (c) 1996 Sun Microsystems, Inc. +# Copyright (c) 1998-2000 Scriptics Corporation +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +namespace eval ::tk::dialog {} +namespace eval ::tk::dialog::file {} + + +# ::tk::MotifFDialog -- +# +# Implements a file dialog similar to the standard Motif file +# selection box. +# +# Arguments: +# type "open" or "save" +# args Options parsed by the procedure. +# +# Results: +# When -multiple is set to 0, this returns the absolute pathname +# of the selected file. (NOTE: This is not the same as a single +# element list.) +# +# When -multiple is set to > 0, this returns a Tcl list of absolute +# pathnames. The argument for -multiple is ignored, but for consistency +# with Windows it defines the maximum amount of memory to allocate for +# the returned filenames. + +proc ::tk::MotifFDialog {type args} { + variable ::tk::Priv + set dataName __tk_filedialog + upvar ::tk::dialog::file::$dataName data + + set w [MotifFDialog_Create $dataName $type $args] + + # Set a grab and claim the focus too. + + ::tk::SetFocusGrab $w $data(sEnt) + $data(sEnt) selection range 0 end + + # Wait for the user to respond, then restore the focus and + # return the index of the selected button. Restore the focus + # before deleting the window, since otherwise the window manager + # may take the focus away so we can't redirect it. Finally, + # restore any grab that was in effect. + + vwait ::tk::Priv(selectFilePath) + set result $Priv(selectFilePath) + ::tk::RestoreFocusGrab $w $data(sEnt) withdraw + + return $result +} + +# ::tk::MotifFDialog_Create -- +# +# Creates the Motif file dialog (if it doesn't exist yet) and +# initialize the internal data structure associated with the +# dialog. +# +# This procedure is used by ::tk::MotifFDialog to create the +# dialog. It's also used by the test suite to test the Motif +# file dialog implementation. User code shouldn't call this +# procedure directly. +# +# Arguments: +# dataName Name of the global "data" array for the file dialog. +# type "Save" or "Open" +# argList Options parsed by the procedure. +# +# Results: +# Pathname of the file dialog. + +proc ::tk::MotifFDialog_Create {dataName type argList} { + upvar ::tk::dialog::file::$dataName data + + MotifFDialog_Config $dataName $type $argList + + if {$data(-parent) eq "."} { + set w .$dataName + } else { + set w $data(-parent).$dataName + } + + # (re)create the dialog box if necessary + # + if {![winfo exists $w]} { + MotifFDialog_BuildUI $w + } elseif {[winfo class $w] ne "TkMotifFDialog"} { + destroy $w + MotifFDialog_BuildUI $w + } else { + set data(fEnt) $w.top.f1.ent + set data(dList) $w.top.f2.a.l + set data(fList) $w.top.f2.b.l + set data(sEnt) $w.top.f3.ent + set data(okBtn) $w.bot.ok + set data(filterBtn) $w.bot.filter + set data(cancelBtn) $w.bot.cancel + } + MotifFDialog_SetListMode $w + + # Dialog boxes should be transient with respect to their parent, + # so that they will always stay on top of their parent window. However, + # some window managers will create the window as withdrawn if the parent + # window is withdrawn or iconified. Combined with the grab we put on the + # window, this can hang the entire application. Therefore we only make + # the dialog transient if the parent is viewable. + + if {[winfo viewable [winfo toplevel $data(-parent)]] } { + wm transient $w $data(-parent) + } + + MotifFDialog_FileTypes $w + MotifFDialog_Update $w + + # Withdraw the window, then update all the geometry information + # so we know how big it wants to be, then center the window in the + # display (Motif style) and de-iconify it. + + ::tk::PlaceWindow $w + wm title $w $data(-title) + + return $w +} + +# ::tk::MotifFDialog_FileTypes -- +# +# Checks the -filetypes option. If present this adds a list of radio- +# buttons to pick the file types from. +# +# Arguments: +# w Pathname of the tk_get*File dialogue. +# +# Results: +# none + +proc ::tk::MotifFDialog_FileTypes {w} { + upvar ::tk::dialog::file::[winfo name $w] data + + set f $w.top.f3.types + destroy $f + + # No file types: use "*" as the filter and display no radio-buttons + if {$data(-filetypes) eq ""} { + set data(filter) * + return + } + + # The filetypes radiobuttons + # set data(fileType) $data(-defaulttype) + # Default type to first entry + set initialTypeName [lindex $data(-filetypes) 0 0] + if {$data(-typevariable) ne ""} { + upvar #0 $data(-typevariable) typeVariable + if {[info exist typeVariable]} { + set initialTypeName $typeVariable + } + } + set ix 0 + set data(fileType) 0 + foreach fltr $data(-filetypes) { + set fname [lindex $fltr 0] + if {[string first $initialTypeName $fname] == 0} { + set data(fileType) $ix + break + } + incr ix + } + + MotifFDialog_SetFilter $w [lindex $data(-filetypes) $data(fileType)] + + #don't produce radiobuttons for only one filetype + if {[llength $data(-filetypes)] == 1} { + return + } + + frame $f + set cnt 0 + if {$data(-filetypes) ne {}} { + foreach type $data(-filetypes) { + set title [lindex [lindex $type 0] 0] + set filter [lindex $type 1] + radiobutton $f.b$cnt \ + -text $title \ + -variable ::tk::dialog::file::[winfo name $w](fileType) \ + -value $cnt \ + -command [list tk::MotifFDialog_SetFilter $w $type] + pack $f.b$cnt -side left + incr cnt + } + } + $f.b$data(fileType) invoke + + pack $f -side bottom -fill both + + return +} + +# This proc gets called whenever data(filter) is set +# +proc ::tk::MotifFDialog_SetFilter {w type} { + upvar ::tk::dialog::file::[winfo name $w] data + variable ::tk::Priv + + set data(filter) [lindex $type 1] + set Priv(selectFileType) [lindex [lindex $type 0] 0] + + MotifFDialog_Update $w +} + +# ::tk::MotifFDialog_Config -- +# +# Iterates over the optional arguments to determine the option +# values for the Motif file dialog; gives default values to +# unspecified options. +# +# Arguments: +# dataName The name of the global variable in which +# data for the file dialog is stored. +# type "Save" or "Open" +# argList Options parsed by the procedure. + +proc ::tk::MotifFDialog_Config {dataName type argList} { + upvar ::tk::dialog::file::$dataName data + + set data(type) $type + + # 1: the configuration specs + # + set specs { + {-defaultextension "" "" ""} + {-filetypes "" "" ""} + {-initialdir "" "" ""} + {-initialfile "" "" ""} + {-parent "" "" "."} + {-title "" "" ""} + {-typevariable "" "" ""} + } + if {$type eq "open"} { + lappend specs {-multiple "" "" "0"} + } + if {$type eq "save"} { + lappend specs {-confirmoverwrite "" "" "1"} + } + + set data(-multiple) 0 + set data(-confirmoverwrite) 1 + # 2: default values depending on the type of the dialog + # + if {![info exists data(selectPath)]} { + # first time the dialog has been popped up + set data(selectPath) [pwd] + set data(selectFile) "" + } + + # 3: parse the arguments + # + tclParseConfigSpec ::tk::dialog::file::$dataName $specs "" $argList + + if {$data(-title) eq ""} { + if {$type eq "open"} { + if {$data(-multiple) != 0} { + set data(-title) "[mc {Open Multiple Files}]" + } else { + set data(-title) [mc "Open"] + } + } else { + set data(-title) [mc "Save As"] + } + } + + # 4: set the default directory and selection according to the -initial + # settings + # + if {$data(-initialdir) ne ""} { + if {[file isdirectory $data(-initialdir)]} { + set data(selectPath) [lindex [glob $data(-initialdir)] 0] + } else { + set data(selectPath) [pwd] + } + + # Convert the initialdir to an absolute path name. + + set old [pwd] + cd $data(selectPath) + set data(selectPath) [pwd] + cd $old + } + set data(selectFile) $data(-initialfile) + + # 5. Parse the -filetypes option. It is not used by the motif + # file dialog, but we check for validity of the value to make sure + # the application code also runs fine with the TK file dialog. + # + set data(-filetypes) [::tk::FDGetFileTypes $data(-filetypes)] + + if {![info exists data(filter)]} { + set data(filter) * + } + if {![winfo exists $data(-parent)]} { + error "bad window path name \"$data(-parent)\"" + } +} + +# ::tk::MotifFDialog_BuildUI -- +# +# Builds the UI components of the Motif file dialog. +# +# Arguments: +# w Pathname of the dialog to build. +# +# Results: +# None. + +proc ::tk::MotifFDialog_BuildUI {w} { + set dataName [lindex [split $w .] end] + upvar ::tk::dialog::file::$dataName data + + # Create the dialog toplevel and internal frames. + # + toplevel $w -class TkMotifFDialog + set top [frame $w.top -relief raised -bd 1] + set bot [frame $w.bot -relief raised -bd 1] + + pack $w.bot -side bottom -fill x + pack $w.top -side top -expand yes -fill both + + set f1 [frame $top.f1] + set f2 [frame $top.f2] + set f3 [frame $top.f3] + + pack $f1 -side top -fill x + pack $f3 -side bottom -fill x + pack $f2 -expand yes -fill both + + set f2a [frame $f2.a] + set f2b [frame $f2.b] + + grid $f2a -row 0 -column 0 -rowspan 1 -columnspan 1 -padx 4 -pady 4 \ + -sticky news + grid $f2b -row 0 -column 1 -rowspan 1 -columnspan 1 -padx 4 -pady 4 \ + -sticky news + grid rowconfigure $f2 0 -minsize 0 -weight 1 + grid columnconfigure $f2 0 -minsize 0 -weight 1 + grid columnconfigure $f2 1 -minsize 150 -weight 2 + + # The Filter box + # + bind [::tk::AmpWidget label $f1.lab -text [mc "Fil&ter:"] -anchor w] \ + <> [list focus $f1.ent] + entry $f1.ent + pack $f1.lab -side top -fill x -padx 6 -pady 4 + pack $f1.ent -side top -fill x -padx 4 -pady 0 + set data(fEnt) $f1.ent + + # The file and directory lists + # + set data(dList) [MotifFDialog_MakeSList $w $f2a \ + [mc "&Directory:"] DList] + set data(fList) [MotifFDialog_MakeSList $w $f2b \ + [mc "Fi&les:"] FList] + + # The Selection box + # + bind [::tk::AmpWidget label $f3.lab -text [mc "&Selection:"] -anchor w] \ + <> [list focus $f3.ent] + entry $f3.ent + pack $f3.lab -side top -fill x -padx 6 -pady 0 + pack $f3.ent -side top -fill x -padx 4 -pady 4 + set data(sEnt) $f3.ent + + # The buttons + # + set maxWidth [::tk::mcmaxamp &OK &Filter &Cancel] + set maxWidth [expr {$maxWidth<6?6:$maxWidth}] + set data(okBtn) [::tk::AmpWidget button $bot.ok -text [mc "&OK"] \ + -width $maxWidth \ + -command [list tk::MotifFDialog_OkCmd $w]] + set data(filterBtn) [::tk::AmpWidget button $bot.filter -text [mc "&Filter"] \ + -width $maxWidth \ + -command [list tk::MotifFDialog_FilterCmd $w]] + set data(cancelBtn) [::tk::AmpWidget button $bot.cancel -text [mc "&Cancel"] \ + -width $maxWidth \ + -command [list tk::MotifFDialog_CancelCmd $w]] + + pack $bot.ok $bot.filter $bot.cancel -padx 10 -pady 10 -expand yes \ + -side left + + # Create the bindings: + # + bind $w [list ::tk::AltKeyInDialog $w %A] + + bind $data(fEnt) [list tk::MotifFDialog_ActivateFEnt $w] + bind $data(sEnt) [list tk::MotifFDialog_ActivateSEnt $w] + bind $w [list tk::MotifFDialog_CancelCmd $w] + bind $w.bot {set ::tk::Priv(selectFilePath) {}} + + wm protocol $w WM_DELETE_WINDOW [list tk::MotifFDialog_CancelCmd $w] +} + +proc ::tk::MotifFDialog_SetListMode {w} { + upvar ::tk::dialog::file::[winfo name $w] data + + if {$data(-multiple) != 0} { + set selectmode extended + } else { + set selectmode browse + } + set f $w.top.f2.b + $f.l configure -selectmode $selectmode +} + +# ::tk::MotifFDialog_MakeSList -- +# +# Create a scrolled-listbox and set the keyboard accelerator +# bindings so that the list selection follows what the user +# types. +# +# Arguments: +# w Pathname of the dialog box. +# f Frame widget inside which to create the scrolled +# listbox. This frame widget already exists. +# label The string to display on top of the listbox. +# under Sets the -under option of the label. +# cmdPrefix Specifies procedures to call when the listbox is +# browsed or activated. + +proc ::tk::MotifFDialog_MakeSList {w f label cmdPrefix} { + bind [::tk::AmpWidget label $f.lab -text $label -anchor w] \ + <> [list focus $f.l] + listbox $f.l -width 12 -height 5 -exportselection 0\ + -xscrollcommand [list $f.h set] -yscrollcommand [list $f.v set] + scrollbar $f.v -orient vertical -takefocus 0 -command [list $f.l yview] + scrollbar $f.h -orient horizontal -takefocus 0 -command [list $f.l xview] + grid $f.lab -row 0 -column 0 -sticky news -rowspan 1 -columnspan 2 \ + -padx 2 -pady 2 + grid $f.l -row 1 -column 0 -rowspan 1 -columnspan 1 -sticky news + grid $f.v -row 1 -column 1 -rowspan 1 -columnspan 1 -sticky news + grid $f.h -row 2 -column 0 -rowspan 1 -columnspan 1 -sticky news + + grid rowconfigure $f 0 -weight 0 -minsize 0 + grid rowconfigure $f 1 -weight 1 -minsize 0 + grid columnconfigure $f 0 -weight 1 -minsize 0 + + # bindings for the listboxes + # + set list $f.l + bind $list <> [list tk::MotifFDialog_Browse$cmdPrefix $w] + bind $list \ + [list tk::MotifFDialog_Activate$cmdPrefix $w] + bind $list "tk::MotifFDialog_Browse$cmdPrefix [list $w]; \ + tk::MotifFDialog_Activate$cmdPrefix [list $w]" + + bindtags $list [list Listbox $list [winfo toplevel $list] all] + ListBoxKeyAccel_Set $list + + return $f.l +} + +# ::tk::MotifFDialog_InterpFilter -- +# +# Interpret the string in the filter entry into two components: +# the directory and the pattern. If the string is a relative +# pathname, give a warning to the user and restore the pattern +# to original. +# +# Arguments: +# w pathname of the dialog box. +# +# Results: +# A list of two elements. The first element is the directory +# specified # by the filter. The second element is the filter +# pattern itself. + +proc ::tk::MotifFDialog_InterpFilter {w} { + upvar ::tk::dialog::file::[winfo name $w] data + + set text [string trim [$data(fEnt) get]] + + # Perform tilde substitution + # + set badTilde 0 + if {[string index $text 0] eq "~"} { + set list [file split $text] + set tilde [lindex $list 0] + if {[catch {set tilde [glob $tilde]}]} { + set badTilde 1 + } else { + set text [eval file join [concat $tilde [lrange $list 1 end]]] + } + } + + # If the string is a relative pathname, combine it + # with the current selectPath. + + set relative 0 + if {[file pathtype $text] eq "relative"} { + set relative 1 + } elseif {$badTilde} { + set relative 1 + } + + if {$relative} { + tk_messageBox -icon warning -type ok \ + -message "\"$text\" must be an absolute pathname" + + $data(fEnt) delete 0 end + $data(fEnt) insert 0 [::tk::dialog::file::JoinFile $data(selectPath) \ + $data(filter)] + + return [list $data(selectPath) $data(filter)] + } + + set resolved [::tk::dialog::file::JoinFile [file dirname $text] [file tail $text]] + + if {[file isdirectory $resolved]} { + set dir $resolved + set fil $data(filter) + } else { + set dir [file dirname $resolved] + set fil [file tail $resolved] + } + + return [list $dir $fil] +} + +# ::tk::MotifFDialog_Update +# +# Load the files and synchronize the "filter" and "selection" fields +# boxes. +# +# Arguments: +# w pathname of the dialog box. +# +# Results: +# None. + +proc ::tk::MotifFDialog_Update {w} { + upvar ::tk::dialog::file::[winfo name $w] data + + $data(fEnt) delete 0 end + $data(fEnt) insert 0 \ + [::tk::dialog::file::JoinFile $data(selectPath) $data(filter)] + $data(sEnt) delete 0 end + $data(sEnt) insert 0 [::tk::dialog::file::JoinFile $data(selectPath) \ + $data(selectFile)] + + MotifFDialog_LoadFiles $w +} + +# ::tk::MotifFDialog_LoadFiles -- +# +# Loads the files and directories into the two listboxes according +# to the filter setting. +# +# Arguments: +# w pathname of the dialog box. +# +# Results: +# None. + +proc ::tk::MotifFDialog_LoadFiles {w} { + upvar ::tk::dialog::file::[winfo name $w] data + + $data(dList) delete 0 end + $data(fList) delete 0 end + + set appPWD [pwd] + if {[catch {cd $data(selectPath)}]} { + cd $appPWD + + $data(dList) insert end ".." + return + } + + # Make the dir and file lists + # + # For speed we only have one glob, which reduces the file system + # calls (good for slow NFS networks). + # + # We also do two smaller sorts (files + dirs) instead of one large sort, + # which gives a small speed increase. + # + set top 0 + set dlist "" + set flist "" + foreach f [glob -nocomplain .* *] { + if {[file isdir ./$f]} { + lappend dlist $f + } else { + foreach pat $data(filter) { + if {[string match $pat $f]} { + if {[string match .* $f]} { + incr top + } + lappend flist $f + break + } + } + } + } + eval [list $data(dList) insert end] [lsort -dictionary $dlist] + eval [list $data(fList) insert end] [lsort -dictionary $flist] + + # The user probably doesn't want to see the . files. We adjust the view + # so that the listbox displays all the non-dot files + $data(fList) yview $top + + cd $appPWD +} + +# ::tk::MotifFDialog_BrowseDList -- +# +# This procedure is called when the directory list is browsed +# (clicked-over) by the user. +# +# Arguments: +# w The pathname of the dialog box. +# +# Results: +# None. + +proc ::tk::MotifFDialog_BrowseDList {w} { + upvar ::tk::dialog::file::[winfo name $w] data + + focus $data(dList) + if {[$data(dList) curselection] eq ""} { + return + } + set subdir [$data(dList) get [$data(dList) curselection]] + if {$subdir eq ""} { + return + } + + $data(fList) selection clear 0 end + + set list [MotifFDialog_InterpFilter $w] + set data(filter) [lindex $list 1] + + switch -- $subdir { + . { + set newSpec [::tk::dialog::file::JoinFile $data(selectPath) $data(filter)] + } + .. { + set newSpec [::tk::dialog::file::JoinFile [file dirname $data(selectPath)] \ + $data(filter)] + } + default { + set newSpec [::tk::dialog::file::JoinFile [::tk::dialog::file::JoinFile \ + $data(selectPath) $subdir] $data(filter)] + } + } + + $data(fEnt) delete 0 end + $data(fEnt) insert 0 $newSpec +} + +# ::tk::MotifFDialog_ActivateDList -- +# +# This procedure is called when the directory list is activated +# (double-clicked) by the user. +# +# Arguments: +# w The pathname of the dialog box. +# +# Results: +# None. + +proc ::tk::MotifFDialog_ActivateDList {w} { + upvar ::tk::dialog::file::[winfo name $w] data + + if {[$data(dList) curselection] eq ""} { + return + } + set subdir [$data(dList) get [$data(dList) curselection]] + if {$subdir eq ""} { + return + } + + $data(fList) selection clear 0 end + + switch -- $subdir { + . { + set newDir $data(selectPath) + } + .. { + set newDir [file dirname $data(selectPath)] + } + default { + set newDir [::tk::dialog::file::JoinFile $data(selectPath) $subdir] + } + } + + set data(selectPath) $newDir + MotifFDialog_Update $w + + if {$subdir ne ".."} { + $data(dList) selection set 0 + $data(dList) activate 0 + } else { + $data(dList) selection set 1 + $data(dList) activate 1 + } +} + +# ::tk::MotifFDialog_BrowseFList -- +# +# This procedure is called when the file list is browsed +# (clicked-over) by the user. +# +# Arguments: +# w The pathname of the dialog box. +# +# Results: +# None. + +proc ::tk::MotifFDialog_BrowseFList {w} { + upvar ::tk::dialog::file::[winfo name $w] data + + focus $data(fList) + set data(selectFile) "" + foreach item [$data(fList) curselection] { + lappend data(selectFile) [$data(fList) get $item] + } + if {[llength $data(selectFile)] == 0} { + return + } + + $data(dList) selection clear 0 end + + $data(fEnt) delete 0 end + $data(fEnt) insert 0 [::tk::dialog::file::JoinFile $data(selectPath) \ + $data(filter)] + $data(fEnt) xview end + + # if it's a multiple selection box, just put in the filenames + # otherwise put in the full path as usual + $data(sEnt) delete 0 end + if {$data(-multiple) != 0} { + $data(sEnt) insert 0 $data(selectFile) + } else { + $data(sEnt) insert 0 [::tk::dialog::file::JoinFile $data(selectPath) \ + [lindex $data(selectFile) 0]] + } + $data(sEnt) xview end +} + +# ::tk::MotifFDialog_ActivateFList -- +# +# This procedure is called when the file list is activated +# (double-clicked) by the user. +# +# Arguments: +# w The pathname of the dialog box. +# +# Results: +# None. + +proc ::tk::MotifFDialog_ActivateFList {w} { + upvar ::tk::dialog::file::[winfo name $w] data + + if {[$data(fList) curselection] eq ""} { + return + } + set data(selectFile) [$data(fList) get [$data(fList) curselection]] + if {$data(selectFile) eq ""} { + return + } else { + MotifFDialog_ActivateSEnt $w + } +} + +# ::tk::MotifFDialog_ActivateFEnt -- +# +# This procedure is called when the user presses Return inside +# the "filter" entry. It updates the dialog according to the +# text inside the filter entry. +# +# Arguments: +# w The pathname of the dialog box. +# +# Results: +# None. + +proc ::tk::MotifFDialog_ActivateFEnt {w} { + upvar ::tk::dialog::file::[winfo name $w] data + + set list [MotifFDialog_InterpFilter $w] + set data(selectPath) [lindex $list 0] + set data(filter) [lindex $list 1] + + MotifFDialog_Update $w +} + +# ::tk::MotifFDialog_ActivateSEnt -- +# +# This procedure is called when the user presses Return inside +# the "selection" entry. It sets the ::tk::Priv(selectFilePath) +# variable so that the vwait loop in tk::MotifFDialog will be +# terminated. +# +# Arguments: +# w The pathname of the dialog box. +# +# Results: +# None. + +proc ::tk::MotifFDialog_ActivateSEnt {w} { + variable ::tk::Priv + upvar ::tk::dialog::file::[winfo name $w] data + + set selectFilePath [string trim [$data(sEnt) get]] + + if {$selectFilePath eq ""} { + MotifFDialog_FilterCmd $w + return + } + + if {$data(-multiple) == 0} { + set selectFilePath [list $selectFilePath] + } + + if {[file isdirectory [lindex $selectFilePath 0]]} { + set data(selectPath) [lindex [glob $selectFilePath] 0] + set data(selectFile) "" + MotifFDialog_Update $w + return + } + + set newFileList "" + foreach item $selectFilePath { + if {[file pathtype $item] ne "absolute"} { + set item [file join $data(selectPath) $item] + } elseif {![file exists [file dirname $item]]} { + tk_messageBox -icon warning -type ok \ + -message [mc {Directory "%1$s" does not exist.} \ + [file dirname $item]] + return + } + + if {![file exists $item]} { + if {$data(type) eq "open"} { + tk_messageBox -icon warning -type ok \ + -message [mc {File "%1$s" does not exist.} $item] + return + } + } elseif {$data(type) eq "save" && $data(-confirmoverwrite)} { + set message [format %s%s \ + [mc "File \"%1\$s\" already exists.\n\n" $selectFilePath] \ + [mc {Replace existing file?}]] + set answer [tk_messageBox -icon warning -type yesno \ + -message $message] + if {$answer eq "no"} { + return + } + } + + lappend newFileList $item + } + + # Return selected filter + if {[info exists data(-typevariable)] && $data(-typevariable) ne "" + && [info exists data(-filetypes)] && $data(-filetypes) ne ""} { + upvar #0 $data(-typevariable) typeVariable + set typeVariable [lindex $data(-filetypes) $data(fileType) 0] + } + + if {$data(-multiple) != 0} { + set Priv(selectFilePath) $newFileList + } else { + set Priv(selectFilePath) [lindex $newFileList 0] + } + + # Set selectFile and selectPath to first item in list + set Priv(selectFile) [file tail [lindex $newFileList 0]] + set Priv(selectPath) [file dirname [lindex $newFileList 0]] +} + + +proc ::tk::MotifFDialog_OkCmd {w} { + upvar ::tk::dialog::file::[winfo name $w] data + + MotifFDialog_ActivateSEnt $w +} + +proc ::tk::MotifFDialog_FilterCmd {w} { + upvar ::tk::dialog::file::[winfo name $w] data + + MotifFDialog_ActivateFEnt $w +} + +proc ::tk::MotifFDialog_CancelCmd {w} { + variable ::tk::Priv + + set Priv(selectFilePath) "" + set Priv(selectFile) "" + set Priv(selectPath) "" +} + +proc ::tk::ListBoxKeyAccel_Set {w} { + bind Listbox "" + bind $w [list tk::ListBoxKeyAccel_Unset $w] + bind $w [list tk::ListBoxKeyAccel_Key $w %A] +} + +proc ::tk::ListBoxKeyAccel_Unset {w} { + variable ::tk::Priv + + catch {after cancel $Priv(lbAccel,$w,afterId)} + unset -nocomplain Priv(lbAccel,$w) Priv(lbAccel,$w,afterId) +} + +# ::tk::ListBoxKeyAccel_Key-- +# +# This procedure maintains a list of recently entered keystrokes +# over a listbox widget. It arranges an idle event to move the +# selection of the listbox to the entry that begins with the +# keystrokes. +# +# Arguments: +# w The pathname of the listbox. +# key The key which the user just pressed. +# +# Results: +# None. + +proc ::tk::ListBoxKeyAccel_Key {w key} { + variable ::tk::Priv + + if { $key eq "" } { + return + } + append Priv(lbAccel,$w) $key + ListBoxKeyAccel_Goto $w $Priv(lbAccel,$w) + catch { + after cancel $Priv(lbAccel,$w,afterId) + } + set Priv(lbAccel,$w,afterId) [after 500 \ + [list tk::ListBoxKeyAccel_Reset $w]] +} + +proc ::tk::ListBoxKeyAccel_Goto {w string} { + variable ::tk::Priv + + set string [string tolower $string] + set end [$w index end] + set theIndex -1 + + for {set i 0} {$i < $end} {incr i} { + set item [string tolower [$w get $i]] + if {[string compare $string $item] >= 0} { + set theIndex $i + } + if {[string compare $string $item] <= 0} { + set theIndex $i + break + } + } + + if {$theIndex >= 0} { + $w selection clear 0 end + $w selection set $theIndex $theIndex + $w activate $theIndex + $w see $theIndex + event generate $w <> + } +} + +proc ::tk::ListBoxKeyAccel_Reset {w} { + variable ::tk::Priv + + unset -nocomplain Priv(lbAccel,$w) +} + +proc ::tk_getFileType {} { + variable ::tk::Priv + + return $Priv(selectFileType) +} + diff --git a/extensions/fablabchemnitz/inkstitch/bin/tk85.dll b/extensions/fablabchemnitz/inkstitch/bin/tk85.dll new file mode 100644 index 00000000..26e5aab8 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/tk85.dll differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/unicodedata.pyd b/extensions/fablabchemnitz/inkstitch/bin/unicodedata.pyd new file mode 100644 index 00000000..da3b161e Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/unicodedata.pyd differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/win32api.pyd b/extensions/fablabchemnitz/inkstitch/bin/win32api.pyd new file mode 100644 index 00000000..79263698 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/win32api.pyd differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/win32com.shell.shell.pyd b/extensions/fablabchemnitz/inkstitch/bin/win32com.shell.shell.pyd new file mode 100644 index 00000000..12c3494c Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/win32com.shell.shell.pyd differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/win32pdh.pyd b/extensions/fablabchemnitz/inkstitch/bin/win32pdh.pyd new file mode 100644 index 00000000..3eb7831c Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/win32pdh.pyd differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/win32pipe.pyd b/extensions/fablabchemnitz/inkstitch/bin/win32pipe.pyd new file mode 100644 index 00000000..6ebcf99e Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/win32pipe.pyd differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/win32trace.pyd b/extensions/fablabchemnitz/inkstitch/bin/win32trace.pyd new file mode 100644 index 00000000..ad706610 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/win32trace.pyd differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/win32ui.pyd b/extensions/fablabchemnitz/inkstitch/bin/win32ui.pyd new file mode 100644 index 00000000..22879aa0 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/win32ui.pyd differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/win32wnet.pyd b/extensions/fablabchemnitz/inkstitch/bin/win32wnet.pyd new file mode 100644 index 00000000..49c44489 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/win32wnet.pyd differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/wx._adv.pyd b/extensions/fablabchemnitz/inkstitch/bin/wx._adv.pyd new file mode 100644 index 00000000..3efe79e0 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/wx._adv.pyd differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/wx._core.pyd b/extensions/fablabchemnitz/inkstitch/bin/wx._core.pyd new file mode 100644 index 00000000..b6365846 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/wx._core.pyd differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/wx.siplib.pyd b/extensions/fablabchemnitz/inkstitch/bin/wx.siplib.pyd new file mode 100644 index 00000000..d7bcb121 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/wx.siplib.pyd differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/wxbase30u_net_vc90.dll b/extensions/fablabchemnitz/inkstitch/bin/wxbase30u_net_vc90.dll new file mode 100644 index 00000000..cc29a86a Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/wxbase30u_net_vc90.dll differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/wxbase30u_vc90.dll b/extensions/fablabchemnitz/inkstitch/bin/wxbase30u_vc90.dll new file mode 100644 index 00000000..e47c8341 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/wxbase30u_vc90.dll differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/wxmsw30u_adv_vc90.dll b/extensions/fablabchemnitz/inkstitch/bin/wxmsw30u_adv_vc90.dll new file mode 100644 index 00000000..8a1e4386 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/wxmsw30u_adv_vc90.dll differ diff --git a/extensions/fablabchemnitz/inkstitch/bin/wxmsw30u_core_vc90.dll b/extensions/fablabchemnitz/inkstitch/bin/wxmsw30u_core_vc90.dll new file mode 100644 index 00000000..75efbdcc Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/bin/wxmsw30u_core_vc90.dll differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/LICENSE.electron.txt b/extensions/fablabchemnitz/inkstitch/electron/LICENSE.electron.txt new file mode 100644 index 00000000..7a40eaca --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/electron/LICENSE.electron.txt @@ -0,0 +1,20 @@ +Copyright (c) 2013-2018 GitHub Inc. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/extensions/fablabchemnitz/inkstitch/electron/LICENSES.chromium.html b/extensions/fablabchemnitz/inkstitch/electron/LICENSES.chromium.html new file mode 100644 index 00000000..99c1769f --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/electron/LICENSES.chromium.html @@ -0,0 +1,38430 @@ + + + + + +Credits + + + + +Credits + +
    +
    +Abseil +homepage + + +
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +   
    +   
    +
    +
    + +
    +Accessibility Audit library, from Accessibility Developer Tools +homepage + + +
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +
    + +
    +Alliance for Open Media Video Codec +homepage + + +
    +
    Copyright (c) 2016, Alliance for Open Media. All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in
    +   the documentation and/or other materials provided with the
    +   distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
    +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
    +COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
    +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
    +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
    +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
    +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
    +POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    +
    + +
    +Almost Native Graphics Layer Engine +homepage + + +
    +
    // Copyright 2018 The ANGLE Project Authors.
    +// All rights reserved.
    +//
    +// Redistribution and use in source and binary forms, with or without
    +// modification, are permitted provided that the following conditions
    +// are met:
    +//
    +//     Redistributions of source code must retain the above copyright
    +//     notice, this list of conditions and the following disclaimer.
    +//
    +//     Redistributions in binary form must reproduce the above
    +//     copyright notice, this list of conditions and the following
    +//     disclaimer in the documentation and/or other materials provided
    +//     with the distribution.
    +//
    +//     Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc.
    +//     Ltd., nor the names of their contributors may be used to endorse
    +//     or promote products derived from this software without specific
    +//     prior written permission.
    +//
    +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
    +// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
    +// COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
    +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
    +// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
    +// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
    +// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
    +// POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +American Fuzzy Lop +homepage + + +
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +
    + +
    +Android +homepage + + +
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +
    + +
    +Android bionic libc +homepage + + +
    +
       Copyright (c) 2014, Linaro Limited
    +   All rights reserved.
    +
    +   Redistribution and use in source and binary forms, with or without
    +   modification, are permitted provided that the following conditions are met:
    +       * Redistributions of source code must retain the above copyright
    +         notice, this list of conditions and the following disclaimer.
    +       * Redistributions in binary form must reproduce the above copyright
    +         notice, this list of conditions and the following disclaimer in the
    +         documentation and/or other materials provided with the distribution.
    +       * Neither the name of the Linaro nor the
    +         names of its contributors may be used to endorse or promote products
    +         derived from this software without specific prior written permission.
    +
    +   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +   HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +   strchr - find a character in a string
    +
    +   Copyright (c) 2014, ARM Limited
    +   All rights Reserved.
    +   Copyright (c) 2014, Linaro Ltd.
    +
    +   Redistribution and use in source and binary forms, with or without
    +   modification, are permitted provided that the following conditions are met:
    +       * Redistributions of source code must retain the above copyright
    +         notice, this list of conditions and the following disclaimer.
    +       * Redistributions in binary form must reproduce the above copyright
    +         notice, this list of conditions and the following disclaimer in the
    +         documentation and/or other materials provided with the distribution.
    +       * Neither the name of the company nor the names of its contributors
    +         may be used to endorse or promote products derived from this
    +         software without specific prior written permission.
    +
    +   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +   HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    + Copyright (c) 1993 John Brezak
    + All rights reserved.
    +
    + Redistribution and use in source and binary forms, with or without
    + modification, are permitted provided that the following conditions
    + are met:
    + 1. Redistributions of source code must retain the above copyright
    +    notice, this list of conditions and the following disclaimer.
    + 2. Redistributions in binary form must reproduce the above copyright
    +    notice, this list of conditions and the following disclaimer in the
    +    documentation and/or other materials provided with the distribution.
    + 3. The name of the author may be used to endorse or promote products
    +    derived from this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE AUTHOR `AS IS'' AND ANY EXPRESS OR
    +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
    +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
    +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
    +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
    +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
    +POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +====================================================
    +Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
    +
    +Developed at SunPro, a Sun Microsystems, Inc. business.
    +Permission to use, copy, modify, and distribute this
    +software is freely granted, provided that this notice
    +is preserved.
    +
    +-------------------------------------------------------------------
    +
    +Based on the UCB version with the ID appearing below.
    +This is ANSIish only when "multibyte character == plain character".
    +
    +Copyright (c) 1989, 1993
    +   The Regents of the University of California.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the project nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (C) 2004, 2005, 2008  Internet Systems Consortium, Inc. ("ISC")
    +Copyright (C) 1995-1999, 2001, 2003  Internet Software Consortium.
    +
    +Permission to use, copy, modify, and/or distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
    +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
    +AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
    +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
    +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
    +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
    +PERFORMANCE OF THIS SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (C) 2004, 2005, 2008  Internet Systems Consortium, Inc. ("ISC")
    +Copyright (C) 1997-2001  Internet Software Consortium.
    +
    +Permission to use, copy, modify, and/or distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
    +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
    +AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
    +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
    +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
    +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
    +PERFORMANCE OF THIS SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (C) 2006 The Android Open Source Project
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +     http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (C) 2006 The Android Open Source Project
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    + * Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    + * Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in
    +   the documentation and/or other materials provided with the
    +   distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
    +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
    +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
    +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
    +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
    +OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
    +AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
    +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
    +OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (C) 2008 The Android Open Source Project
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +     http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (C) 2008 The Android Open Source Project
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    + * Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    + * Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in
    +   the documentation and/or other materials provided with the
    +   distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
    +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
    +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
    +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
    +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
    +OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
    +AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
    +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
    +OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (C) 2008 The Android Open Source Project
    +All rights reserved.
    +Copyright (c) 2013-2014, NVIDIA Corporation.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    + * Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    + * Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in
    +   the documentation and/or other materials provided with the
    +   distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
    +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
    +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
    +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
    +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
    +OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
    +AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
    +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
    +OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (C) 2009 The Android Open Source Project
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    + * Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    + * Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in
    +   the documentation and/or other materials provided with the
    +   distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
    +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
    +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
    +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
    +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
    +OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
    +AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
    +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
    +OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (C) 2010 The Android Open Source Project
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +     http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (C) 2010 The Android Open Source Project
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    + * Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    + * Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in
    +   the documentation and/or other materials provided with the
    +   distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
    +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
    +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
    +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
    +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
    +OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
    +AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
    +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
    +OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (C) 2010 The Android Open Source Project
    +Copyright (c) 2008 ARM Ltd
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. The name of the company may not be used to endorse or promote
    +   products derived from this software without specific prior written
    +   permission.
    +
    +THIS SOFTWARE IS PROVIDED BY ARM LTD ``AS IS'' AND ANY EXPRESS OR IMPLIED
    +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
    +IN NO EVENT SHALL ARM LTD BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
    +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
    +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
    +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
    +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +Android adaptation and tweak by Jim Huang <jserv@0xlab.org>.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (C) 2011 The Android Open Source Project
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    + * Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    + * Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in
    +   the documentation and/or other materials provided with the
    +   distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
    +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
    +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
    +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
    +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
    +OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
    +AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
    +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
    +OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (C) 2012 The Android Open Source Project
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +     http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (C) 2012 The Android Open Source Project
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    + * Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    + * Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in
    +   the documentation and/or other materials provided with the
    +   distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
    +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
    +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
    +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
    +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
    +OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
    +AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
    +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
    +OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (C) 2013 The Android Open Source Project
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +     http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (C) 2013 The Android Open Source Project
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    + * Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    + * Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in
    +   the documentation and/or other materials provided with the
    +   distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
    +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
    +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
    +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
    +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
    +OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
    +AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
    +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
    +OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (C) 2013 The Android Open Source Project
    +All rights reserved.
    +Copyright (c) 2013-2014 NVIDIA Corporation.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    + * Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    + * Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in
    +   the documentation and/or other materials provided with the
    +   distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
    +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
    +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
    +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
    +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
    +OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
    +AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
    +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
    +OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (C) 2013 The Android Open Source Project
    +Copyright (c) 2014, NVIDIA CORPORATION.  All rights reserved.
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    + * Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    + * Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in
    +   the documentation and/or other materials provided with the
    +   distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
    +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
    +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
    +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
    +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
    +OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
    +AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
    +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
    +OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (C) 2014 The Android Open Source Project
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +     http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (C) 2014 The Android Open Source Project
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    + * Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    + * Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in
    +   the documentation and/or other materials provided with the
    +   distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
    +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
    +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
    +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
    +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
    +OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
    +AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
    +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
    +OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (C) 2015 The Android Open Source Project
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +     http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (C) 2015 The Android Open Source Project
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    + * Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    + * Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in
    +   the documentation and/or other materials provided with the
    +   distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
    +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
    +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
    +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
    +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
    +OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
    +AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
    +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
    +OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1980, 1983, 1988, 1993
    +   The Regents of the University of California.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. All advertising materials mentioning features or use of this software
    +   must display the following acknowledgement:
    +   This product includes software developed by the University of
    +   California, Berkeley and its contributors.
    +4. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +
    +Portions Copyright (c) 1993 by Digital Equipment Corporation.
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies, and that
    +the name of Digital Equipment Corporation not be used in advertising or
    +publicity pertaining to distribution of the document or software without
    +specific, written prior permission.
    +
    +THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL
    +WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
    +OF MERCHANTABILITY AND FITNESS.   IN NO EVENT SHALL DIGITAL EQUIPMENT
    +CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
    +DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
    +PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
    +ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
    +SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1982, 1986, 1993
    +   The Regents of the University of California.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1982, 1986, 1993
    +   The Regents of the University of California.  All rights reserved.
    +(c) UNIX System Laboratories, Inc.
    +All or some portions of this file are derived from material licensed
    +to the University of California by American Telephone and Telegraph
    +Co. or Unix System Laboratories, Inc. and are reproduced herein with
    +the permission of UNIX System Laboratories, Inc.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1983, 1987, 1989
    +   The Regents of the University of California.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1983, 1989
    +   The Regents of the University of California.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. All advertising materials mentioning features or use of this software
    +   must display the following acknowledgement:
    +    This product includes software developed by the University of
    +    California, Berkeley and its contributors.
    +4. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1983, 1989, 1993
    +   The Regents of the University of California.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1983, 1990, 1993
    +   The Regents of the University of California.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +Portions Copyright (c) 1993 by Digital Equipment Corporation.
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies, and that
    +the name of Digital Equipment Corporation not be used in advertising or
    +publicity pertaining to distribution of the document or software without
    +specific, written prior permission.
    +
    +THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL
    +WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
    +OF MERCHANTABILITY AND FITNESS.   IN NO EVENT SHALL DIGITAL EQUIPMENT
    +CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
    +DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
    +PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
    +ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
    +SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1983, 1993
    +   The Regents of the University of California.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1983, 1993
    +   The Regents of the University of California.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +4. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1985
    +   The Regents of the University of California.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. All advertising materials mentioning features or use of this software
    +   must display the following acknowledgement:
    +    This product includes software developed by the University of
    +    California, Berkeley and its contributors.
    +4. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1985 Regents of the University of California.
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1985, 1988, 1993
    +   The Regents of the University of California.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +Portions Copyright (c) 1993 by Digital Equipment Corporation.
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies, and that
    +the name of Digital Equipment Corporation not be used in advertising or
    +publicity pertaining to distribution of the document or software without
    +specific, written prior permission.
    +
    +THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL
    +WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
    +OF MERCHANTABILITY AND FITNESS.   IN NO EVENT SHALL DIGITAL EQUIPMENT
    +CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
    +DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
    +PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
    +ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
    +SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1985, 1989, 1993
    +   The Regents of the University of California.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. All advertising materials mentioning features or use of this software
    +   must display the following acknowledgement:
    +    This product includes software developed by the University of
    +    California, Berkeley and its contributors.
    +4. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1985, 1993
    +   The Regents of the University of California.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. All advertising materials mentioning features or use of this software
    +   must display the following acknowledgement:
    +    This product includes software developed by the University of
    +    California, Berkeley and its contributors.
    +4. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1985, 1993
    +   The Regents of the University of California.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1987 Regents of the University of California.
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1987, 1993
    +   The Regents of the University of California.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. All advertising materials mentioning features or use of this software
    +   must display the following acknowledgement:
    +    This product includes software developed by the University of
    +    California, Berkeley and its contributors.
    +4. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1987, 1993
    +   The Regents of the University of California.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1988 Regents of the University of California.
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1988 The Regents of the University of California.
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1988, 1993
    +   The Regents of the University of California.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. All advertising materials mentioning features or use of this software
    +   must display the following acknowledgement:
    +    This product includes software developed by the University of
    +    California, Berkeley and its contributors.
    +4. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1988, 1993
    +   The Regents of the University of California.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1988, 1993
    +   The Regents of the University of California.  All rights reserved.
    +
    +This code is derived from software written by Ken Arnold and
    +published in UNIX Review, Vol. 6, No. 8.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1989 The Regents of the University of California.
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms are permitted
    +provided that the above copyright notice and this paragraph are
    +duplicated in all such forms and that any documentation,
    +advertising materials, and other materials related to such
    +distribution and use acknowledge that the software was developed
    +by the University of California, Berkeley. The name of the
    +University may not be used to endorse or promote products derived
    +from this software without specific prior written permission.
    +THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
    +IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
    +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1989 The Regents of the University of California.
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1989 The Regents of the University of California.
    +All rights reserved.
    +(c) UNIX System Laboratories, Inc.
    +All or some portions of this file are derived from material licensed
    +to the University of California by American Telephone and Telegraph
    +Co. or Unix System Laboratories, Inc. and are reproduced herein with
    +the permission of UNIX System Laboratories, Inc.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1989, 1993
    +   The Regents of the University of California.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1989, 1993
    +   The Regents of the University of California.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +4. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1989, 1993
    +   The Regents of the University of California.  All rights reserved.
    +
    +This code is derived from software contributed to Berkeley by
    +Roger L. Snyder.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1989, 1993
    +   The Regents of the University of California.  All rights reserved.
    +(c) UNIX System Laboratories, Inc.
    +All or some portions of this file are derived from material licensed
    +to the University of California by American Telephone and Telegraph
    +Co. or Unix System Laboratories, Inc. and are reproduced herein with
    +the permission of UNIX System Laboratories, Inc.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1989, 1993, 1994
    +   The Regents of the University of California.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1990 The Regents of the University of California.
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1990 The Regents of the University of California.
    +All rights reserved.
    +
    +This code is derived from locore.s.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1990 The Regents of the University of California.
    +All rights reserved.
    +
    +This code is derived from software contributed to Berkeley by
    +Chris Torek.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1990 The Regents of the University of California.
    +All rights reserved.
    +
    +This code is derived from software contributed to Berkeley by
    +William Jolitz.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1990, 1993
    +   The Regents of the University of California.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1990, 1993
    +   The Regents of the University of California.  All rights reserved.
    +
    +This code is derived from software contributed to Berkeley by
    +Chris Torek.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1990, 1993
    +   The Regents of the University of California.  All rights reserved.
    +
    +This code is derived from software contributed to Berkeley by
    +Donn Seeley at UUNET Technologies, Inc.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1990, 1993
    +   The Regents of the University of California.  All rights reserved.
    +
    +This code is derived from software contributed to Berkeley by
    +Donn Seeley at UUNET Technologies, Inc.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +4. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1990, 1993
    +   The Regents of the University of California.  All rights reserved.
    +(c) UNIX System Laboratories, Inc.
    +All or some portions of this file are derived from material licensed
    +to the University of California by American Telephone and Telegraph
    +Co. or Unix System Laboratories, Inc. and are reproduced herein with
    +the permission of UNIX System Laboratories, Inc.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1990, 1993, 1994
    +   The Regents of the University of California.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1990, 1993, 1994
    +   The Regents of the University of California.  All rights reserved.
    +
    +This code is derived from software contributed to Berkeley by
    +Chris Torek.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1991 The Regents of the University of California.
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1991, 1993
    +   The Regents of the University of California.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1991, 1993
    +   The Regents of the University of California.  All rights reserved.
    +
    +This code is derived from software contributed to Berkeley by
    +Berkeley Software Design, Inc.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1991, 1993
    +   The Regents of the University of California.  All rights reserved.
    +(c) UNIX System Laboratories, Inc.
    +All or some portions of this file are derived from material licensed
    +to the University of California by American Telephone and Telegraph
    +Co. or Unix System Laboratories, Inc. and are reproduced herein with
    +the permission of UNIX System Laboratories, Inc.
    +
    +This code is derived from software contributed to Berkeley by
    +Hugh Smith at The University of Guelph.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1991, 1993, 1995,
    +   The Regents of the University of California.  All rights reserved.
    +
    +This code is derived from software contributed to Berkeley by
    +Havard Eidnes.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1992 Henry Spencer.
    +Copyright (c) 1992, 1993
    +   The Regents of the University of California.  All rights reserved.
    +
    +This code is derived from software contributed to Berkeley by
    +Henry Spencer of the University of Toronto.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1992 The Regents of the University of California.
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1992, 1993
    +   The Regents of the University of California.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1992, 1993
    +   The Regents of the University of California.  All rights reserved.
    +
    +This code is derived from software contributed to Berkeley by
    +Ralph Campbell.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1992, 1993
    +   The Regents of the University of California.  All rights reserved.
    +
    +This code is derived from software contributed to Berkeley by
    +Ralph Campbell. This file is derived from the MIPS RISC
    +Architecture book by Gerry Kane.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1992, 1993
    +   The Regents of the University of California.  All rights reserved.
    +
    +This software was developed by the Computer Systems Engineering group
    +at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and
    +contributed to Berkeley.
    +
    +All advertising materials mentioning features or use of this software
    +must display the following acknowledgement:
    +   This product includes software developed by the University of
    +   California, Lawrence Berkeley Laboratory.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. All advertising materials mentioning features or use of this software
    +   must display the following acknowledgement:
    +   This product includes software developed by the University of
    +   California, Berkeley and its contributors.
    +4. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1992, 1993
    +   The Regents of the University of California.  All rights reserved.
    +(c) UNIX System Laboratories, Inc.
    +All or some portions of this file are derived from material licensed
    +to the University of California by American Telephone and Telegraph
    +Co. or Unix System Laboratories, Inc. and are reproduced herein with
    +the permission of UNIX System Laboratories, Inc.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1992, 1993, 1994
    +   The Regents of the University of California.  All rights reserved.
    +
    +This code is derived from software contributed to Berkeley by
    +Henry Spencer.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1992, 1993, 1994 Henry Spencer.
    +
    +This code is derived from software contributed to Berkeley by
    +Henry Spencer.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. All advertising materials mentioning features or use of this software
    +   must display the following acknowledgement:
    +   This product includes software developed by the University of
    +   California, Berkeley and its contributors.
    +4. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1993
    +   The Regents of the University of California.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1993 Martin Birgmeier
    +All rights reserved.
    +
    +You may redistribute unmodified or modified versions of this source
    +code provided that the above copyright notice and this and the
    +following conditions are retained.
    +
    +This software is provided ``as is'', and comes with no warranties
    +of any kind. I shall in no event be liable for anything that happens
    +to anyone/anything when using this software.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1994 SigmaSoft, Th. Lockert <tholo@sigmasoft.com>
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. The name of the author may not be used to endorse or promote products
    +   derived from this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
    +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
    +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
    +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
    +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
    +OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
    +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
    +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
    +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1996 by Internet Software Consortium.
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
    +ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
    +OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
    +CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
    +DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
    +PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
    +ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
    +SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1996, David Mazieres <dm@uun.org>
    +Copyright (c) 2008, Damien Miller <djm@openbsd.org>
    +Copyright (c) 2013, Markus Friedl <markus@openbsd.org>
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
    +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
    +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
    +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1996-1998, 2008 Theo de Raadt
    +Copyright (c) 1997, 2008-2009 Todd C. Miller
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
    +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
    +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
    +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1997 Mark Brinicombe
    +Copyright (c) 2010 Android Open Source Project.
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. All advertising materials mentioning features or use of this software
    +   must display the following acknowledgement:
    +   This product includes software developed by Mark Brinicombe
    +4. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1997 Niklas Hallqvist.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
    +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
    +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
    +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
    +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
    +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
    +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1997 Todd C. Miller <Todd.Miller@courtesan.com>
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
    +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
    +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
    +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1997 Todd C. Miller <Todd.Miller@courtesan.com>
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. The name of the author may not be used to endorse or promote products
    +   derived from this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
    +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
    +AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL
    +THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
    +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
    +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
    +OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
    +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
    +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
    +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1997, 1998 The NetBSD Foundation, Inc.
    +All rights reserved.
    +
    +This code was contributed to The NetBSD Foundation by Klaus Klein.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. All advertising materials mentioning features or use of this software
    +   must display the following acknowledgement:
    +       This product includes software developed by the NetBSD
    +       Foundation, Inc. and its contributors.
    +4. Neither the name of The NetBSD Foundation nor the names of its
    +   contributors may be used to endorse or promote products derived
    +   from this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
    +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
    +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    +PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
    +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
    +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
    +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
    +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
    +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
    +POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1997, 1998, 1999, 2004 The NetBSD Foundation, Inc.
    +All rights reserved.
    +
    +This code is derived from software contributed to The NetBSD Foundation
    +by Luke Mewburn.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
    +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
    +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    +PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
    +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
    +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
    +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
    +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
    +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
    +POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1997, 1998, 1999, 2004 The NetBSD Foundation, Inc.
    +All rights reserved.
    +
    +This code is derived from software contributed to The NetBSD Foundation
    +by Luke Mewburn; and by Jason R. Thorpe.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. All advertising materials mentioning features or use of this software
    +   must display the following acknowledgement:
    +       This product includes software developed by the NetBSD
    +       Foundation, Inc. and its contributors.
    +4. Neither the name of The NetBSD Foundation nor the names of its
    +   contributors may be used to endorse or promote products derived
    +   from this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
    +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
    +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    +PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
    +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
    +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
    +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
    +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
    +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
    +POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1997, 2005 Todd C. Miller <Todd.Miller@courtesan.com>
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
    +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
    +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
    +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1998 Softweyr LLC.  All rights reserved.
    +
    +strtok_r, from Berkeley strtok
    +Oct 13, 1998 by Wes Peters <wes@softweyr.com>
    +
    +Copyright (c) 1988, 1993
    +   The Regents of the University of California.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notices, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notices, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY SOFTWEYR LLC, THE REGENTS AND CONTRIBUTORS
    +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
    +PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL SOFTWEYR LLC, THE
    +REGENTS, OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
    +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
    +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
    +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
    +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1998 The NetBSD Foundation, Inc.
    +All rights reserved.
    +
    +This code is derived from software contributed to The NetBSD Foundation
    +by Klaus Klein.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. All advertising materials mentioning features or use of this software
    +   must display the following acknowledgement:
    +       This product includes software developed by the NetBSD
    +       Foundation, Inc. and its contributors.
    +4. Neither the name of The NetBSD Foundation nor the names of its
    +   contributors may be used to endorse or promote products derived
    +   from this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
    +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
    +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    +PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
    +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
    +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
    +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
    +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
    +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
    +POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
    +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
    +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
    +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. The name of the author may not be used to endorse or promote products
    +   derived from this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
    +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
    +AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL
    +THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
    +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
    +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
    +OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
    +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
    +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
    +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 1999
    +   David E. O'Brien
    +Copyright (c) 1988, 1993
    +   The Regents of the University of California.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2000 Ben Harris.
    +Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the project nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2000 The NetBSD Foundation, Inc.
    +All rights reserved.
    +
    +This code is derived from software contributed to The NetBSD Foundation
    +by Atsushi Onoe.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. All advertising materials mentioning features or use of this software
    +   must display the following acknowledgement:
    +   This product includes software developed by the NetBSD
    +   Foundation, Inc. and its contributors.
    +4. Neither the name of The NetBSD Foundation nor the names of its
    +   contributors may be used to endorse or promote products derived
    +   from this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
    +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
    +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    +PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
    +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
    +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
    +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
    +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
    +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
    +POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2000 The NetBSD Foundation, Inc.
    +All rights reserved.
    +
    +This code is derived from software contributed to The NetBSD Foundation
    +by Dieter Baron and Thomas Klausner.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
    +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
    +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    +PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
    +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
    +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
    +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
    +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
    +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
    +POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2001 Mike Barcroft <mike@FreeBSD.org>
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2001 Wasabi Systems, Inc.
    +All rights reserved.
    +
    +Written by Frank van der Linden for Wasabi Systems, Inc.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. All advertising materials mentioning features or use of this software
    +   must display the following acknowledgement:
    +     This product includes software developed for the NetBSD Project by
    +     Wasabi Systems, Inc.
    +4. The name of Wasabi Systems, Inc. may not be used to endorse
    +   or promote products derived from this software without specific prior
    +   written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY WASABI SYSTEMS, INC. ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
    +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    +PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL WASABI SYSTEMS, INC
    +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
    +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
    +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
    +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
    +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
    +POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2001-2002 Opsycon AB  (www.opsycon.se / www.opsycon.com)
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
    +OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
    +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2001-2002 Opsycon AB  (www.opsycon.se / www.opsycon.com)
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of Opsycon AB nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
    +OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
    +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2002 Daniel Hartmeier
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +
    +   - Redistributions of source code must retain the above copyright
    +     notice, this list of conditions and the following disclaimer.
    +   - Redistributions in binary form must reproduce the above
    +     copyright notice, this list of conditions and the following
    +     disclaimer in the documentation and/or other materials provided
    +     with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
    +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
    +COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
    +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
    +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
    +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
    +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
    +POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2002 Marc Espie.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE OPENBSD PROJECT AND CONTRIBUTORS
    +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OPENBSD
    +PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2002 The NetBSD Foundation, Inc.
    +All rights reserved.
    +
    +This code is derived from software contributed to The NetBSD Foundation
    +by Christos Zoulas.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
    +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
    +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    +PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
    +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
    +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
    +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
    +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
    +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
    +POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2002 Tim J. Robbins
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2002 Tim J. Robbins.
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2002 Todd C. Miller <Todd.Miller@courtesan.com>
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
    +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
    +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
    +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +Sponsored in part by the Defense Advanced Research Projects
    +Agency (DARPA) and Air Force Research Laboratory, Air Force
    +Materiel Command, USAF, under agreement number F39502-99-1-0512.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2002, 2003 Tim J. Robbins.
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2002-2004 Tim J. Robbins
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2002-2004 Tim J. Robbins.
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2003 Constantin S. Svintsoff <kostik@iclub.nsu.ru>
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. The names of the authors may not be used to endorse or promote
    +   products derived from this software without specific prior written
    +   permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2003 David Schultz <das@FreeBSD.ORG>
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2003 Networks Associates Technology, Inc.
    +All rights reserved.
    +
    +Portions of this software were developed for the FreeBSD Project by
    +Jacques A. Vidrine, Safeport Network Services, and Network
    +Associates Laboratories, the Security Research Division of Network
    +Associates, Inc. under DARPA/SPAWAR contract N66001-01-C-8035
    +("CBOSS"), as part of the DARPA CHATS research program.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2003 Todd C. Miller <Todd.Miller@courtesan.com>
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
    +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
    +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
    +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +Sponsored in part by the Defense Advanced Research Projects
    +Agency (DARPA) and Air Force Research Laboratory, Air Force
    +Materiel Command, USAF, under agreement number F39502-99-1-0512.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2004 The NetBSD Foundation, Inc.
    +All rights reserved.
    +
    +This code is derived from software contributed to The NetBSD Foundation
    +by Christos Zoulas.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. All advertising materials mentioning features or use of this software
    +   must display the following acknowledgement:
    +       This product includes software developed by the NetBSD
    +       Foundation, Inc. and its contributors.
    +4. Neither the name of The NetBSD Foundation nor the names of its
    +   contributors may be used to endorse or promote products derived
    +   from this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
    +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
    +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    +PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
    +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
    +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
    +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
    +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
    +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
    +POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
    +Copyright (c) 1995,1999 by Internet Software Consortium.
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
    +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR
    +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
    +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
    +Copyright (c) 1995-1999 by Internet Software Consortium
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
    +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR
    +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
    +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
    +Copyright (c) 1995-1999 by Internet Software Consortium.
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
    +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR
    +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
    +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
    +Copyright (c) 1996,1999 by Internet Software Consortium.
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
    +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR
    +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
    +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
    +Copyright (c) 1996-1999 by Internet Software Consortium
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
    +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR
    +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
    +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
    +Copyright (c) 1996-1999 by Internet Software Consortium.
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
    +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR
    +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
    +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
    +Copyright (c) 1997,1999 by Internet Software Consortium.
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
    +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR
    +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
    +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
    +Copyright (c) 1999 by Internet Software Consortium.
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
    +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR
    +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
    +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
    +Portions Copyright (c) 1996-1999 by Internet Software Consortium.
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
    +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR
    +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
    +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2004, 2005 David Schultz <das@FreeBSD.ORG>
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2005 Tim J. Robbins.
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2005 by Internet Systems Consortium, Inc. ("ISC")
    +Copyright (c) 1995-1999 by Internet Software Consortium
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
    +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR
    +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
    +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2007 Todd C. Miller <Todd.Miller@courtesan.com>
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
    +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
    +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
    +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2007-2008  Michael G Schwern
    +
    +This software originally derived from Paul Sheer's pivotal_gmtime_r.c.
    +
    +The MIT License:
    +
    +Permission is hereby granted, free of charge, to any person obtaining a copy
    +of this software and associated documentation files (the "Software"), to deal
    +in the Software without restriction, including without limitation the rights
    +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    +copies of the Software, and to permit persons to whom the Software is
    +furnished to do so, subject to the following conditions:
    +
    +The above copyright notice and this permission notice shall be included in
    +all copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    +THE SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2007-2008  Michael G Schwern
    +
    +This software originally derived from Paul Sheer's pivotal_gmtime_r.c.
    +
    +The MIT License:
    +
    +Permission is hereby granted, free of charge, to any person obtaining a copy
    +of this software and associated documentation files (the "Software"), to deal
    +in the Software without restriction, including without limitation the rights
    +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    +copies of the Software, and to permit persons to whom the Software is
    +furnished to do so, subject to the following conditions:
    +
    +The above copyright notice and this permission notice shall be included in
    +all copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    +THE SOFTWARE.
    +
    +Origin: http://code.google.com/p/y2038
    +Modified for Bionic by the Android Open Source Project
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2008  Android Open Source Project (query id randomization)
    +Copyright (c) 1985, 1993
    +   The Regents of the University of California.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. All advertising materials mentioning features or use of this software
    +   must display the following acknowledgement:
    +    This product includes software developed by the University of
    +    California, Berkeley and its contributors.
    +4. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2008 Otto Moerbeek <otto@drijf.net>
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
    +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
    +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
    +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2008 Todd C. Miller <millert@openbsd.org>
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
    +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
    +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
    +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2008, Damien Miller <djm@openbsd.org>
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
    +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
    +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
    +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2009 David Schultz <das@FreeBSD.org>
    +All rights reserved.
    +
    +Copyright (c) 2011 The FreeBSD Foundation
    +All rights reserved.
    +Portions of this software were developed by David Chisnall
    +under sponsorship from the FreeBSD Foundation.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2009 David Schultz <das@FreeBSD.org>
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2009 The NetBSD Foundation, Inc.
    +
    +This code is derived from software contributed to The NetBSD Foundation
    +by Roy Marples.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
    +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
    +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
    +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
    +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
    +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
    +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2010 MIPS Technologies, Inc.
    +
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +
    +     * Redistributions of source code must retain the above copyright
    +       notice, this list of conditions and the following disclaimer.
    +     * Redistributions in binary form must reproduce the above copyright
    +       notice, this list of conditions and the following disclaimer
    +       in the documentation and/or other materials provided with
    +       the distribution.
    +     * Neither the name of MIPS Technologies Inc. nor the names of its
    +       contributors may be used to endorse or promote products derived
    +       from this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2010 Todd C. Miller <Todd.Miller@courtesan.com>
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
    +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
    +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
    +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2010, 2011, 2012, 2013 Intel Corporation
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are met:
    +
    +    * Redistributions of source code must retain the above copyright notice,
    +    * this list of conditions and the following disclaimer.
    +
    +    * Redistributions in binary form must reproduce the above copyright notice,
    +    * this list of conditions and the following disclaimer in the documentation
    +    * and/or other materials provided with the distribution.
    +
    +    * Neither the name of Intel Corporation nor the names of its contributors
    +    * may be used to endorse or promote products derived from this software
    +    * without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
    +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2010, Intel Corporation
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are met:
    +
    +    * Redistributions of source code must retain the above copyright notice,
    +    * this list of conditions and the following disclaimer.
    +
    +    * Redistributions in binary form must reproduce the above copyright notice,
    +    * this list of conditions and the following disclaimer in the documentation
    +    * and/or other materials provided with the distribution.
    +
    +    * Neither the name of Intel Corporation nor the names of its contributors
    +    * may be used to endorse or promote products derived from this software
    +    * without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
    +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2011 David Chisnall
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2011 Ed Schouten <ed@FreeBSD.org>
    +                   David Chisnall <theraven@FreeBSD.org>
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2011 Intel Corporation
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are met:
    +
    +    * Redistributions of source code must retain the above copyright notice,
    +    * this list of conditions and the following disclaimer.
    +
    +    * Redistributions in binary form must reproduce the above copyright notice,
    +    * this list of conditions and the following disclaimer in the documentation
    +    * and/or other materials provided with the distribution.
    +
    +    * Neither the name of Intel Corporation nor the names of its contributors
    +    * may be used to endorse or promote products derived from this software
    +    * without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
    +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2011 Martin Pieuchot <mpi@openbsd.org>
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
    +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
    +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
    +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2011 Martin Pieuchot <mpi@openbsd.org>
    +Copyright (c) 2009 Ted Unangst
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
    +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
    +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
    +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2011 The Android Open Source Project
    +Copyright (c) 2008 ARM Ltd
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. The name of the company may not be used to endorse or promote
    +   products derived from this software without specific prior written
    +   permission.
    +
    +THIS SOFTWARE IS PROVIDED BY ARM LTD ``AS IS'' AND ANY EXPRESS OR IMPLIED
    +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
    +IN NO EVENT SHALL ARM LTD BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
    +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
    +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
    +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
    +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2011, 2012, 2013 Intel Corporation
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are met:
    +
    +    * Redistributions of source code must retain the above copyright notice,
    +    * this list of conditions and the following disclaimer.
    +
    +    * Redistributions in binary form must reproduce the above copyright notice,
    +    * this list of conditions and the following disclaimer in the documentation
    +    * and/or other materials provided with the distribution.
    +
    +    * Neither the name of Intel Corporation nor the names of its contributors
    +    * may be used to endorse or promote products derived from this software
    +    * without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
    +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2011, Intel Corporation
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are met:
    +
    +    * Redistributions of source code must retain the above copyright notice,
    +    * this list of conditions and the following disclaimer.
    +
    +    * Redistributions in binary form must reproduce the above copyright notice,
    +    * this list of conditions and the following disclaimer in the documentation
    +    * and/or other materials provided with the distribution.
    +
    +    * Neither the name of Intel Corporation nor the names of its contributors
    +    * may be used to endorse or promote products derived from this software
    +    * without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
    +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2011, VMware, Inc.
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are met:
    +    * Redistributions of source code must retain the above copyright
    +      notice, this list of conditions and the following disclaimer.
    +    * Redistributions in binary form must reproduce the above copyright
    +      notice, this list of conditions and the following disclaimer in the
    +      documentation and/or other materials provided with the distribution.
    +    * Neither the name of the VMware, Inc. nor the names of its contributors
    +      may be used to endorse or promote products derived from this software
    +      without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
    +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED. IN NO EVENT SHALL VMWARE, INC. OR CONTRIBUTORS BE LIABLE FOR
    +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
    +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2012, Linaro Limited
    +   All rights reserved.
    +
    +   Redistribution and use in source and binary forms, with or without
    +   modification, are permitted provided that the following conditions are met:
    +       * Redistributions of source code must retain the above copyright
    +         notice, this list of conditions and the following disclaimer.
    +       * Redistributions in binary form must reproduce the above copyright
    +         notice, this list of conditions and the following disclaimer in the
    +         documentation and/or other materials provided with the distribution.
    +       * Neither the name of the Linaro nor the
    +         names of its contributors may be used to endorse or promote products
    +         derived from this software without specific prior written permission.
    +
    +   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +   HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2012, Linaro Limited
    +   All rights reserved.
    +   Copyright (c) 2014, NVIDIA Corporation.  All rights reserved.
    +
    +   Redistribution and use in source and binary forms, with or without
    +   modification, are permitted provided that the following conditions are met:
    +       * Redistributions of source code must retain the above copyright
    +         notice, this list of conditions and the following disclaimer.
    +       * Redistributions in binary form must reproduce the above copyright
    +         notice, this list of conditions and the following disclaimer in the
    +         documentation and/or other materials provided with the distribution.
    +       * Neither the name of the Linaro nor the
    +         names of its contributors may be used to endorse or promote products
    +         derived from this software without specific prior written permission.
    +
    +   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +   HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2012-2015
    +     MIPS Technologies, Inc., California.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the MIPS Technologies, Inc., nor the names of its
    +   contributors may be used to endorse or promote products derived from
    +   this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE MIPS TECHNOLOGIES, INC. ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE MIPS TECHNOLOGIES, INC. BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2013
    +     MIPS Technologies, Inc., California.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the MIPS Technologies, Inc., nor the names of its
    +   contributors may be used to endorse or promote products derived from
    +   this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE MIPS TECHNOLOGIES, INC. ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE MIPS TECHNOLOGIES, INC. BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2013 ARM Ltd
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. The name of the company may not be used to endorse or promote
    +   products derived from this software without specific prior written
    +   permission.
    +
    +THIS SOFTWARE IS PROVIDED BY ARM LTD ``AS IS'' AND ANY EXPRESS OR IMPLIED
    +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
    +IN NO EVENT SHALL ARM LTD BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
    +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
    +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
    +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
    +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2013 Antoine Jacoutot <ajacoutot@openbsd.org>
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
    +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
    +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
    +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2013 The NetBSD Foundation, Inc.
    +All rights reserved.
    +
    +This code is derived from software contributed to The NetBSD Foundation
    +by Christos Zoulas.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
    +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
    +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    +PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
    +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
    +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
    +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
    +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
    +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
    +POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2014
    +     Imagination Technologies Limited.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. Neither the name of the MIPS Technologies, Inc., nor the names of its
    +   contributors may be used to endorse or promote products derived from
    +   this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY IMAGINATION TECHNOLOGIES LIMITED ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED. IN NO EVENT SHALL IMAGINATION TECHNOLOGIES LIMITED BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2014 Theo de Raadt <deraadt@openbsd.org>
    +Copyright (c) 2014 Bob Beck <beck@obtuse.com>
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
    +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
    +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
    +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +Emulation of getentropy(2) as documented at:
    +http://www.openbsd.org/cgi-bin/man.cgi/OpenBSD-current/man2/getentropy.2
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2014, Intel Corporation
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are met:
    +
    +    * Redistributions of source code must retain the above copyright notice,
    +    * this list of conditions and the following disclaimer.
    +
    +    * Redistributions in binary form must reproduce the above copyright notice,
    +    * this list of conditions and the following disclaimer in the documentation
    +    * and/or other materials provided with the distribution.
    +
    +    * Neither the name of Intel Corporation nor the names of its contributors
    +    * may be used to endorse or promote products derived from this software
    +    * without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
    +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c) 2014, Linaro Limited
    +   All rights reserved.
    +
    +   Redistribution and use in source and binary forms, with or without
    +   modification, are permitted provided that the following conditions are met:
    +       * Redistributions of source code must retain the above copyright
    +         notice, this list of conditions and the following disclaimer.
    +       * Redistributions in binary form must reproduce the above copyright
    +         notice, this list of conditions and the following disclaimer in the
    +         documentation and/or other materials provided with the distribution.
    +       * Neither the name of the Linaro nor the
    +         names of its contributors may be used to endorse or promote products
    +         derived from this software without specific prior written permission.
    +
    +   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +   HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c)1999 Citrus Project,
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c)1999, 2000, 2001 Citrus Project,
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c)2001 Citrus Project,
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright (c)2003 Citrus Project,
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright 1997 Niels Provos <provos@physnet.uni-hamburg.de>
    +Copyright 2008 Damien Miller <djm@openbsd.org>
    +All rights reserved.
    +
    +Theo de Raadt <deraadt@openbsd.org> came up with the idea of using
    +such a mathematical system to generate more random (yet non-repeating)
    +ids to solve the resolver/named problem.  But Niels designed the
    +actual system based on the constraints.
    +
    +Later modified by Damien Miller to wrap the LCG output in a 15-bit
    +permutation generator based on a Luby-Rackoff block cipher. This
    +ensures the output is non-repeating and preserves the MSB twiddle
    +trick, but makes it more resistant to LCG prediction.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
    +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
    +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
    +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
    +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
    +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
    +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Copyright 2008  Android Open Source Project (source port randomization)
    +Copyright (c) 1985, 1989, 1993
    +   The Regents of the University of California.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. All advertising materials mentioning features or use of this software
    +   must display the following acknowledgement:
    +    This product includes software developed by the University of
    +    California, Berkeley and its contributors.
    +4. Neither the name of the University nor the names of its contributors
    +   may be used to endorse or promote products derived from this software
    +   without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +Portions Copyright (C) 2004, 2005, 2008, 2009  Internet Systems Consortium, Inc. ("ISC")
    +Portions Copyright (C) 1996-2003  Internet Software Consortium.
    +
    +Permission to use, copy, modify, and/or distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
    +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
    +AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
    +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
    +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
    +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
    +PERFORMANCE OF THIS SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +Portions Copyright (c) 1993 by Digital Equipment Corporation.
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies, and that
    +the name of Digital Equipment Corporation not be used in advertising or
    +publicity pertaining to distribution of the document or software without
    +specific, written prior permission.
    +
    +THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL
    +WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
    +OF MERCHANTABILITY AND FITNESS.   IN NO EVENT SHALL DIGITAL EQUIPMENT
    +CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
    +DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
    +PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
    +ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
    +SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +Portions Copyright (c) 1995 by International Business Machines, Inc.
    +
    +International Business Machines, Inc. (hereinafter called IBM) grants
    +permission under its copyrights to use, copy, modify, and distribute this
    +Software with or without fee, provided that the above copyright notice and
    +all paragraphs of this notice appear in all copies, and that the name of IBM
    +not be used in connection with the marketing of any product incorporating
    +the Software or modifications thereof, without specific, written prior
    +permission.
    +
    +To the extent it has a right to do so, IBM grants an immunity from suit
    +under its patents, if any, for the use, sale or manufacture of products to
    +the extent that such products are used for performing Domain Name System
    +dynamic updates in TCP/IP networks by means of the Software.  No immunity is
    +granted for any product per se or for any other function of any product.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", AND IBM DISCLAIMS ALL WARRANTIES,
    +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
    +PARTICULAR PURPOSE.  IN NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL,
    +DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER ARISING
    +OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE, EVEN
    +IF IBM IS APPRISED OF THE POSSIBILITY OF SUCH DAMAGES.
    +
    +-------------------------------------------------------------------
    +
    +Portions Copyright(C) 1995, Jason Downs.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS
    +OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT,
    +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
    +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
    +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +The author of this software is David M. Gay.
    +
    +Copyright (C) 1998 by Lucent Technologies
    +All Rights Reserved
    +
    +Permission to use, copy, modify, and distribute this software and
    +its documentation for any purpose and without fee is hereby
    +granted, provided that the above copyright notice appear in all
    +copies and that both that the copyright notice and this
    +permission notice and warranty disclaimer appear in supporting
    +documentation, and that the name of Lucent or any of its entities
    +not be used in advertising or publicity pertaining to
    +distribution of the software without specific, written prior
    +permission.
    +
    +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
    +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
    +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
    +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
    +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
    +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
    +THIS SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +The author of this software is David M. Gay.
    +
    +Copyright (C) 1998, 1999 by Lucent Technologies
    +All Rights Reserved
    +
    +Permission to use, copy, modify, and distribute this software and
    +its documentation for any purpose and without fee is hereby
    +granted, provided that the above copyright notice appear in all
    +copies and that both that the copyright notice and this
    +permission notice and warranty disclaimer appear in supporting
    +documentation, and that the name of Lucent or any of its entities
    +not be used in advertising or publicity pertaining to
    +distribution of the software without specific, written prior
    +permission.
    +
    +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
    +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
    +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
    +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
    +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
    +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
    +THIS SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +The author of this software is David M. Gay.
    +
    +Copyright (C) 1998, 2000 by Lucent Technologies
    +All Rights Reserved
    +
    +Permission to use, copy, modify, and distribute this software and
    +its documentation for any purpose and without fee is hereby
    +granted, provided that the above copyright notice appear in all
    +copies and that both that the copyright notice and this
    +permission notice and warranty disclaimer appear in supporting
    +documentation, and that the name of Lucent or any of its entities
    +not be used in advertising or publicity pertaining to
    +distribution of the software without specific, written prior
    +permission.
    +
    +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
    +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
    +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
    +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
    +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
    +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
    +THIS SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +The author of this software is David M. Gay.
    +
    +Copyright (C) 1998-2000 by Lucent Technologies
    +All Rights Reserved
    +
    +Permission to use, copy, modify, and distribute this software and
    +its documentation for any purpose and without fee is hereby
    +granted, provided that the above copyright notice appear in all
    +copies and that both that the copyright notice and this
    +permission notice and warranty disclaimer appear in supporting
    +documentation, and that the name of Lucent or any of its entities
    +not be used in advertising or publicity pertaining to
    +distribution of the software without specific, written prior
    +permission.
    +
    +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
    +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
    +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
    +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
    +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
    +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
    +THIS SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +The author of this software is David M. Gay.
    +
    +Copyright (C) 1998-2001 by Lucent Technologies
    +All Rights Reserved
    +
    +Permission to use, copy, modify, and distribute this software and
    +its documentation for any purpose and without fee is hereby
    +granted, provided that the above copyright notice appear in all
    +copies and that both that the copyright notice and this
    +permission notice and warranty disclaimer appear in supporting
    +documentation, and that the name of Lucent or any of its entities
    +not be used in advertising or publicity pertaining to
    +distribution of the software without specific, written prior
    +permission.
    +
    +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
    +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
    +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
    +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
    +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
    +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
    +THIS SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +The author of this software is David M. Gay.
    +
    +Copyright (C) 2000 by Lucent Technologies
    +All Rights Reserved
    +
    +Permission to use, copy, modify, and distribute this software and
    +its documentation for any purpose and without fee is hereby
    +granted, provided that the above copyright notice appear in all
    +copies and that both that the copyright notice and this
    +permission notice and warranty disclaimer appear in supporting
    +documentation, and that the name of Lucent or any of its entities
    +not be used in advertising or publicity pertaining to
    +distribution of the software without specific, written prior
    +permission.
    +
    +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
    +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
    +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
    +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
    +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
    +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
    +THIS SOFTWARE.
    +
    +-------------------------------------------------------------------
    +
    +memchr - find a character in a memory zone
    +
    +Copyright (c) 2014, ARM Limited
    +All rights Reserved.
    +Copyright (c) 2014, Linaro Ltd.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are met:
    +    * Redistributions of source code must retain the above copyright
    +      notice, this list of conditions and the following disclaimer.
    +    * Redistributions in binary form must reproduce the above copyright
    +      notice, this list of conditions and the following disclaimer in the
    +      documentation and/or other materials provided with the distribution.
    +    * Neither the name of the company nor the names of its contributors
    +      may be used to endorse or promote products derived from this
    +      software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------
    +
    +
    +
    +
    + +
    +Android Crazy Linker +homepage + + +
    +
    // Copyright 2014 The Chromium Authors. All rights reserved.
    +//
    +// Redistribution and use in source and binary forms, with or without
    +// modification, are permitted provided that the following conditions are
    +// met:
    +//
    +//    * Redistributions of source code must retain the above copyright
    +// notice, this list of conditions and the following disclaimer.
    +//    * Redistributions in binary form must reproduce the above
    +// copyright notice, this list of conditions and the following disclaimer
    +// in the documentation and/or other materials provided with the
    +// distribution.
    +//    * Neither the name of Google Inc. nor the names of its
    +// contributors may be used to endorse or promote products derived from
    +// this software without specific prior written permission.
    +//
    +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +/*
    + * Copyright (C) 2012 The Android Open Source Project
    + * All rights reserved.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions
    + * are met:
    + *  * Redistributions of source code must retain the above copyright
    + *    notice, this list of conditions and the following disclaimer.
    + *  * Redistributions in binary form must reproduce the above copyright
    + *    notice, this list of conditions and the following disclaimer in
    + *    the documentation and/or other materials provided with the
    + *    distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
    + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
    + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
    + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
    + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
    + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
    + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
    + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
    + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    + * SUCH DAMAGE.
    + */
    +
    +
    +
    + +
    +Android Explicit Synchronization +homepage + + +
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +
    + +
    +Android FloatProperty +homepage + + +
    +
       Copyright (c) 2005-2008, The Android Open Source Project
    +
    +   Licensed under the Apache License, Version 2.0 (the "License"); you may not
    +   use this file except in compliance with the License.
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
    +   WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
    +   License for the specific language governing permissions and limitations under
    +   the License.
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright 2011 Google Inc. All Rights Reserved.
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +
    + +
    +Android Open Source Project - App Compat Library +homepage + + +
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +
    + +
    +Android Open Source Project - Settings App +homepage + + +
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +
    + +
    +Android SDK +homepage + + +
    +
    Notice for all the files in this folder.
    +------------------------------------------------------------
    +
    +
    +   
    +   Copyright (c) 2005-2008, The Android Open Source Project
    +
    +   Licensed under the Apache License, Version 2.0 (the "License"); you may not
    +   use this file except in compliance with the License.
    + 
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
    +   WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
    +   License for the specific language governing permissions and limitations under
    +   the License.
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright 2011 Google Inc. All Rights Reserved.
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +
    + +
    +Apple sample code +homepage + + +
    +
    Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple
    +Inc. ("Apple") in consideration of your agreement to the following
    +terms, and your use, installation, modification or redistribution of
    +this Apple software constitutes acceptance of these terms.  If you do
    +not agree with these terms, please do not use, install, modify or
    +redistribute this Apple software.
    +
    +In consideration of your agreement to abide by the following terms, and
    +subject to these terms, Apple grants you a personal, non-exclusive
    +license, under Apple's copyrights in this original Apple software (the
    +"Apple Software"), to use, reproduce, modify and redistribute the Apple
    +Software, with or without modifications, in source and/or binary forms;
    +provided that if you redistribute the Apple Software in its entirety and
    +without modifications, you must retain this notice and the following
    +text and disclaimers in all such redistributions of the Apple Software.
    +Neither the name, trademarks, service marks or logos of Apple Inc. may
    +be used to endorse or promote products derived from the Apple Software
    +without specific prior written permission from Apple.  Except as
    +expressly stated in this notice, no other rights or licenses, express or
    +implied, are granted by Apple herein, including but not limited to any
    +patent rights that may be infringed by your derivative works or by other
    +works in which the Apple Software may be incorporated.
    +
    +The Apple Software is provided by Apple on an "AS IS" basis.  APPLE
    +MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
    +THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
    +FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
    +OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
    +
    +IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
    +OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
    +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
    +INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
    +MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
    +AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
    +STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
    +POSSIBILITY OF SUCH DAMAGE.
    +
    +Copyright (C) 2009 Apple Inc. All Rights Reserved.
    +
    +
    + +
    +ARCore SDK +homepage + + +
    +
    Copyright (c) 2017, Google Inc.
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +                                Apache License
    +                        Version 2.0, January 2004
    +                    http://www.apache.org/licenses/
    +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +1. Definitions.
    +    "License" shall mean the terms and conditions for use, reproduction,
    +    and distribution as defined by Sections 1 through 9 of this document.
    +    "Licensor" shall mean the copyright owner or entity authorized by
    +    the copyright owner that is granting the License.
    +    "Legal Entity" shall mean the union of the acting entity and all
    +    other entities that control, are controlled by, or are under common
    +    control with that entity. For the purposes of this definition,
    +    "control" means (i) the power, direct or indirect, to cause the
    +    direction or management of such entity, whether by contract or
    +    otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +    outstanding shares, or (iii) beneficial ownership of such entity.
    +    "You" (or "Your") shall mean an individual or Legal Entity
    +    exercising permissions granted by this License.
    +    "Source" form shall mean the preferred form for making modifications,
    +    including but not limited to software source code, documentation
    +    source, and configuration files.
    +    "Object" form shall mean any form resulting from mechanical
    +    transformation or translation of a Source form, including but
    +    not limited to compiled object code, generated documentation,
    +    and conversions to other media types.
    +    "Work" shall mean the work of authorship, whether in Source or
    +    Object form, made available under the License, as indicated by a
    +    copyright notice that is included in or attached to the work
    +    (an example is provided in the Appendix below).
    +    "Derivative Works" shall mean any work, whether in Source or Object
    +    form, that is based on (or derived from) the Work and for which the
    +    editorial revisions, annotations, elaborations, or other modifications
    +    represent, as a whole, an original work of authorship. For the purposes
    +    of this License, Derivative Works shall not include works that remain
    +    separable from, or merely link (or bind by name) to the interfaces of,
    +    the Work and Derivative Works thereof.
    +    "Contribution" shall mean any work of authorship, including
    +    the original version of the Work and any modifications or additions
    +    to that Work or Derivative Works thereof, that is intentionally
    +    submitted to Licensor for inclusion in the Work by the copyright owner
    +    or by an individual or Legal Entity authorized to submit on behalf of
    +    the copyright owner. For the purposes of this definition, "submitted"
    +    means any form of electronic, verbal, or written communication sent
    +    to the Licensor or its representatives, including but not limited to
    +    communication on electronic mailing lists, source code control systems,
    +    and issue tracking systems that are managed by, or on behalf of, the
    +    Licensor for the purpose of discussing and improving the Work, but
    +    excluding communication that is conspicuously marked or otherwise
    +    designated in writing by the copyright owner as "Not a Contribution."
    +    "Contributor" shall mean Licensor and any individual or Legal Entity
    +    on behalf of whom a Contribution has been received by Licensor and
    +    subsequently incorporated within the Work.
    +2. Grant of Copyright License. Subject to the terms and conditions of
    +    this License, each Contributor hereby grants to You a perpetual,
    +    worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +    copyright license to reproduce, prepare Derivative Works of,
    +    publicly display, publicly perform, sublicense, and distribute the
    +    Work and such Derivative Works in Source or Object form.
    +3. Grant of Patent License. Subject to the terms and conditions of
    +    this License, each Contributor hereby grants to You a perpetual,
    +    worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +    (except as stated in this section) patent license to make, have made,
    +    use, offer to sell, sell, import, and otherwise transfer the Work,
    +    where such license applies only to those patent claims licensable
    +    by such Contributor that are necessarily infringed by their
    +    Contribution(s) alone or by combination of their Contribution(s)
    +    with the Work to which such Contribution(s) was submitted. If You
    +    institute patent litigation against any entity (including a
    +    cross-claim or counterclaim in a lawsuit) alleging that the Work
    +    or a Contribution incorporated within the Work constitutes direct
    +    or contributory patent infringement, then any patent licenses
    +    granted to You under this License for that Work shall terminate
    +    as of the date such litigation is filed.
    +4. Redistribution. You may reproduce and distribute copies of the
    +    Work or Derivative Works thereof in any medium, with or without
    +    modifications, and in Source or Object form, provided that You
    +    meet the following conditions:
    +    (a) You must give any other recipients of the Work or
    +        Derivative Works a copy of this License; and
    +    (b) You must cause any modified files to carry prominent notices
    +        stating that You changed the files; and
    +    (c) You must retain, in the Source form of any Derivative Works
    +        that You distribute, all copyright, patent, trademark, and
    +        attribution notices from the Source form of the Work,
    +        excluding those notices that do not pertain to any part of
    +        the Derivative Works; and
    +    (d) If the Work includes a "NOTICE" text file as part of its
    +        distribution, then any Derivative Works that You distribute must
    +        include a readable copy of the attribution notices contained
    +        within such NOTICE file, excluding those notices that do not
    +        pertain to any part of the Derivative Works, in at least one
    +        of the following places: within a NOTICE text file distributed
    +        as part of the Derivative Works; within the Source form or
    +        documentation, if provided along with the Derivative Works; or,
    +        within a display generated by the Derivative Works, if and
    +        wherever such third-party notices normally appear. The contents
    +        of the NOTICE file are for informational purposes only and
    +        do not modify the License. You may add Your own attribution
    +        notices within Derivative Works that You distribute, alongside
    +        or as an addendum to the NOTICE text from the Work, provided
    +        that such additional attribution notices cannot be construed
    +        as modifying the License.
    +    You may add Your own copyright statement to Your modifications and
    +    may provide additional or different license terms and conditions
    +    for use, reproduction, or distribution of Your modifications, or
    +    for any such Derivative Works as a whole, provided Your use,
    +    reproduction, and distribution of the Work otherwise complies with
    +    the conditions stated in this License.
    +5. Submission of Contributions. Unless You explicitly state otherwise,
    +    any Contribution intentionally submitted for inclusion in the Work
    +    by You to the Licensor shall be under the terms and conditions of
    +    this License, without any additional terms or conditions.
    +    Notwithstanding the above, nothing herein shall supersede or modify
    +    the terms of any separate license agreement you may have executed
    +    with Licensor regarding such Contributions.
    +6. Trademarks. This License does not grant permission to use the trade
    +    names, trademarks, service marks, or product names of the Licensor,
    +    except as required for reasonable and customary use in describing the
    +    origin of the Work and reproducing the content of the NOTICE file.
    +7. Disclaimer of Warranty. Unless required by applicable law or
    +    agreed to in writing, Licensor provides the Work (and each
    +    Contributor provides its Contributions) on an "AS IS" BASIS,
    +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +    implied, including, without limitation, any warranties or conditions
    +    of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +    PARTICULAR PURPOSE. You are solely responsible for determining the
    +    appropriateness of using or redistributing the Work and assume any
    +    risks associated with Your exercise of permissions under this License.
    +8. Limitation of Liability. In no event and under no legal theory,
    +    whether in tort (including negligence), contract, or otherwise,
    +    unless required by applicable law (such as deliberate and grossly
    +    negligent acts) or agreed to in writing, shall any Contributor be
    +    liable to You for damages, including any direct, indirect, special,
    +    incidental, or consequential damages of any character arising as a
    +    result of this License or out of the use or inability to use the
    +    Work (including but not limited to damages for loss of goodwill,
    +    work stoppage, computer failure or malfunction, or any and all
    +    other commercial damages or losses), even if such Contributor
    +    has been advised of the possibility of such damages.
    +9. Accepting Warranty or Additional Liability. While redistributing
    +    the Work or Derivative Works thereof, You may choose to offer,
    +    and charge a fee for, acceptance of support, warranty, indemnity,
    +    or other liability obligations and/or rights consistent with this
    +    License. However, in accepting such obligations, You may act only
    +    on Your own behalf and on Your sole responsibility, not on behalf
    +    of any other Contributor, and only if You agree to indemnify,
    +    defend, and hold each Contributor harmless for any liability
    +    incurred by, or claims asserted against, such Contributor by reason
    +    of your accepting any such warranty or additional liability.
    +END OF TERMS AND CONDITIONS
    +
    +
    +
    + +
    +AsyncTask +homepage + + +
    +
    Notice for all the files in this folder.
    +------------------------------------------------------------
    +
    +
    +   
    +   Copyright (c) 2005-2008, The Android Open Source Project
    +
    +   Licensed under the Apache License, Version 2.0 (the "License"); you may not
    +   use this file except in compliance with the License.
    + 
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
    +   WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
    +   License for the specific language governing permissions and limitations under
    +   the License.
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright 2011 Google Inc. All Rights Reserved.
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +
    +
    + +
    +AXE-CORE Accessibility Audit +homepage + + +
    +
    Mozilla Public License, version 2.0
    +
    +1. Definitions
    +
    +1.1. "Contributor"
    +
    +     means each individual or legal entity that creates, contributes to the
    +     creation of, or owns Covered Software.
    +
    +1.2. "Contributor Version"
    +
    +     means the combination of the Contributions of others (if any) used by a
    +     Contributor and that particular Contributor's Contribution.
    +
    +1.3. "Contribution"
    +
    +     means Covered Software of a particular Contributor.
    +
    +1.4. "Covered Software"
    +
    +     means Source Code Form to which the initial Contributor has attached the
    +     notice in Exhibit A, the Executable Form of such Source Code Form, and
    +     Modifications of such Source Code Form, in each case including portions
    +     thereof.
    +
    +1.5. "Incompatible With Secondary Licenses"
    +     means
    +
    +     a. that the initial Contributor has attached the notice described in
    +        Exhibit B to the Covered Software; or
    +
    +     b. that the Covered Software was made available under the terms of
    +        version 1.1 or earlier of the License, but not also under the terms of
    +        a Secondary License.
    +
    +1.6. "Executable Form"
    +
    +     means any form of the work other than Source Code Form.
    +
    +1.7. "Larger Work"
    +
    +     means a work that combines Covered Software with other material, in a
    +     separate file or files, that is not Covered Software.
    +
    +1.8. "License"
    +
    +     means this document.
    +
    +1.9. "Licensable"
    +
    +     means having the right to grant, to the maximum extent possible, whether
    +     at the time of the initial grant or subsequently, any and all of the
    +     rights conveyed by this License.
    +
    +1.10. "Modifications"
    +
    +     means any of the following:
    +
    +     a. any file in Source Code Form that results from an addition to,
    +        deletion from, or modification of the contents of Covered Software; or
    +
    +     b. any new file in Source Code Form that contains any Covered Software.
    +
    +1.11. "Patent Claims" of a Contributor
    +
    +      means any patent claim(s), including without limitation, method,
    +      process, and apparatus claims, in any patent Licensable by such
    +      Contributor that would be infringed, but for the grant of the License,
    +      by the making, using, selling, offering for sale, having made, import,
    +      or transfer of either its Contributions or its Contributor Version.
    +
    +1.12. "Secondary License"
    +
    +      means either the GNU General Public License, Version 2.0, the GNU Lesser
    +      General Public License, Version 2.1, the GNU Affero General Public
    +      License, Version 3.0, or any later versions of those licenses.
    +
    +1.13. "Source Code Form"
    +
    +      means the form of the work preferred for making modifications.
    +
    +1.14. "You" (or "Your")
    +
    +      means an individual or a legal entity exercising rights under this
    +      License. For legal entities, "You" includes any entity that controls, is
    +      controlled by, or is under common control with You. For purposes of this
    +      definition, "control" means (a) the power, direct or indirect, to cause
    +      the direction or management of such entity, whether by contract or
    +      otherwise, or (b) ownership of more than fifty percent (50%) of the
    +      outstanding shares or beneficial ownership of such entity.
    +
    +
    +2. License Grants and Conditions
    +
    +2.1. Grants
    +
    +     Each Contributor hereby grants You a world-wide, royalty-free,
    +     non-exclusive license:
    +
    +     a. under intellectual property rights (other than patent or trademark)
    +        Licensable by such Contributor to use, reproduce, make available,
    +        modify, display, perform, distribute, and otherwise exploit its
    +        Contributions, either on an unmodified basis, with Modifications, or
    +        as part of a Larger Work; and
    +
    +     b. under Patent Claims of such Contributor to make, use, sell, offer for
    +        sale, have made, import, and otherwise transfer either its
    +        Contributions or its Contributor Version.
    +
    +2.2. Effective Date
    +
    +     The licenses granted in Section 2.1 with respect to any Contribution
    +     become effective for each Contribution on the date the Contributor first
    +     distributes such Contribution.
    +
    +2.3. Limitations on Grant Scope
    +
    +     The licenses granted in this Section 2 are the only rights granted under
    +     this License. No additional rights or licenses will be implied from the
    +     distribution or licensing of Covered Software under this License.
    +     Notwithstanding Section 2.1(b) above, no patent license is granted by a
    +     Contributor:
    +
    +     a. for any code that a Contributor has removed from Covered Software; or
    +
    +     b. for infringements caused by: (i) Your and any other third party's
    +        modifications of Covered Software, or (ii) the combination of its
    +        Contributions with other software (except as part of its Contributor
    +        Version); or
    +
    +     c. under Patent Claims infringed by Covered Software in the absence of
    +        its Contributions.
    +
    +     This License does not grant any rights in the trademarks, service marks,
    +     or logos of any Contributor (except as may be necessary to comply with
    +     the notice requirements in Section 3.4).
    +
    +2.4. Subsequent Licenses
    +
    +     No Contributor makes additional grants as a result of Your choice to
    +     distribute the Covered Software under a subsequent version of this
    +     License (see Section 10.2) or under the terms of a Secondary License (if
    +     permitted under the terms of Section 3.3).
    +
    +2.5. Representation
    +
    +     Each Contributor represents that the Contributor believes its
    +     Contributions are its original creation(s) or it has sufficient rights to
    +     grant the rights to its Contributions conveyed by this License.
    +
    +2.6. Fair Use
    +
    +     This License is not intended to limit any rights You have under
    +     applicable copyright doctrines of fair use, fair dealing, or other
    +     equivalents.
    +
    +2.7. Conditions
    +
    +     Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in
    +     Section 2.1.
    +
    +
    +3. Responsibilities
    +
    +3.1. Distribution of Source Form
    +
    +     All distribution of Covered Software in Source Code Form, including any
    +     Modifications that You create or to which You contribute, must be under
    +     the terms of this License. You must inform recipients that the Source
    +     Code Form of the Covered Software is governed by the terms of this
    +     License, and how they can obtain a copy of this License. You may not
    +     attempt to alter or restrict the recipients' rights in the Source Code
    +     Form.
    +
    +3.2. Distribution of Executable Form
    +
    +     If You distribute Covered Software in Executable Form then:
    +
    +     a. such Covered Software must also be made available in Source Code Form,
    +        as described in Section 3.1, and You must inform recipients of the
    +        Executable Form how they can obtain a copy of such Source Code Form by
    +        reasonable means in a timely manner, at a charge no more than the cost
    +        of distribution to the recipient; and
    +
    +     b. You may distribute such Executable Form under the terms of this
    +        License, or sublicense it under different terms, provided that the
    +        license for the Executable Form does not attempt to limit or alter the
    +        recipients' rights in the Source Code Form under this License.
    +
    +3.3. Distribution of a Larger Work
    +
    +     You may create and distribute a Larger Work under terms of Your choice,
    +     provided that You also comply with the requirements of this License for
    +     the Covered Software. If the Larger Work is a combination of Covered
    +     Software with a work governed by one or more Secondary Licenses, and the
    +     Covered Software is not Incompatible With Secondary Licenses, this
    +     License permits You to additionally distribute such Covered Software
    +     under the terms of such Secondary License(s), so that the recipient of
    +     the Larger Work may, at their option, further distribute the Covered
    +     Software under the terms of either this License or such Secondary
    +     License(s).
    +
    +3.4. Notices
    +
    +     You may not remove or alter the substance of any license notices
    +     (including copyright notices, patent notices, disclaimers of warranty, or
    +     limitations of liability) contained within the Source Code Form of the
    +     Covered Software, except that You may alter any license notices to the
    +     extent required to remedy known factual inaccuracies.
    +
    +3.5. Application of Additional Terms
    +
    +     You may choose to offer, and to charge a fee for, warranty, support,
    +     indemnity or liability obligations to one or more recipients of Covered
    +     Software. However, You may do so only on Your own behalf, and not on
    +     behalf of any Contributor. You must make it absolutely clear that any
    +     such warranty, support, indemnity, or liability obligation is offered by
    +     You alone, and You hereby agree to indemnify every Contributor for any
    +     liability incurred by such Contributor as a result of warranty, support,
    +     indemnity or liability terms You offer. You may include additional
    +     disclaimers of warranty and limitations of liability specific to any
    +     jurisdiction.
    +
    +4. Inability to Comply Due to Statute or Regulation
    +
    +   If it is impossible for You to comply with any of the terms of this License
    +   with respect to some or all of the Covered Software due to statute,
    +   judicial order, or regulation then You must: (a) comply with the terms of
    +   this License to the maximum extent possible; and (b) describe the
    +   limitations and the code they affect. Such description must be placed in a
    +   text file included with all distributions of the Covered Software under
    +   this License. Except to the extent prohibited by statute or regulation,
    +   such description must be sufficiently detailed for a recipient of ordinary
    +   skill to be able to understand it.
    +
    +5. Termination
    +
    +5.1. The rights granted under this License will terminate automatically if You
    +     fail to comply with any of its terms. However, if You become compliant,
    +     then the rights granted under this License from a particular Contributor
    +     are reinstated (a) provisionally, unless and until such Contributor
    +     explicitly and finally terminates Your grants, and (b) on an ongoing
    +     basis, if such Contributor fails to notify You of the non-compliance by
    +     some reasonable means prior to 60 days after You have come back into
    +     compliance. Moreover, Your grants from a particular Contributor are
    +     reinstated on an ongoing basis if such Contributor notifies You of the
    +     non-compliance by some reasonable means, this is the first time You have
    +     received notice of non-compliance with this License from such
    +     Contributor, and You become compliant prior to 30 days after Your receipt
    +     of the notice.
    +
    +5.2. If You initiate litigation against any entity by asserting a patent
    +     infringement claim (excluding declaratory judgment actions,
    +     counter-claims, and cross-claims) alleging that a Contributor Version
    +     directly or indirectly infringes any patent, then the rights granted to
    +     You by any and all Contributors for the Covered Software under Section
    +     2.1 of this License shall terminate.
    +
    +5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user
    +     license agreements (excluding distributors and resellers) which have been
    +     validly granted by You or Your distributors under this License prior to
    +     termination shall survive termination.
    +
    +6. Disclaimer of Warranty
    +
    +   Covered Software is provided under this License on an "as is" basis,
    +   without warranty of any kind, either expressed, implied, or statutory,
    +   including, without limitation, warranties that the Covered Software is free
    +   of defects, merchantable, fit for a particular purpose or non-infringing.
    +   The entire risk as to the quality and performance of the Covered Software
    +   is with You. Should any Covered Software prove defective in any respect,
    +   You (not any Contributor) assume the cost of any necessary servicing,
    +   repair, or correction. This disclaimer of warranty constitutes an essential
    +   part of this License. No use of  any Covered Software is authorized under
    +   this License except under this disclaimer.
    +
    +7. Limitation of Liability
    +
    +   Under no circumstances and under no legal theory, whether tort (including
    +   negligence), contract, or otherwise, shall any Contributor, or anyone who
    +   distributes Covered Software as permitted above, be liable to You for any
    +   direct, indirect, special, incidental, or consequential damages of any
    +   character including, without limitation, damages for lost profits, loss of
    +   goodwill, work stoppage, computer failure or malfunction, or any and all
    +   other commercial damages or losses, even if such party shall have been
    +   informed of the possibility of such damages. This limitation of liability
    +   shall not apply to liability for death or personal injury resulting from
    +   such party's negligence to the extent applicable law prohibits such
    +   limitation. Some jurisdictions do not allow the exclusion or limitation of
    +   incidental or consequential damages, so this exclusion and limitation may
    +   not apply to You.
    +
    +8. Litigation
    +
    +   Any litigation relating to this License may be brought only in the courts
    +   of a jurisdiction where the defendant maintains its principal place of
    +   business and such litigation shall be governed by laws of that
    +   jurisdiction, without reference to its conflict-of-law provisions. Nothing
    +   in this Section shall prevent a party's ability to bring cross-claims or
    +   counter-claims.
    +
    +9. Miscellaneous
    +
    +   This License represents the complete agreement concerning the subject
    +   matter hereof. If any provision of this License is held to be
    +   unenforceable, such provision shall be reformed only to the extent
    +   necessary to make it enforceable. Any law or regulation which provides that
    +   the language of a contract shall be construed against the drafter shall not
    +   be used to construe this License against a Contributor.
    +
    +
    +10. Versions of the License
    +
    +10.1. New Versions
    +
    +      Mozilla Foundation is the license steward. Except as provided in Section
    +      10.3, no one other than the license steward has the right to modify or
    +      publish new versions of this License. Each version will be given a
    +      distinguishing version number.
    +
    +10.2. Effect of New Versions
    +
    +      You may distribute the Covered Software under the terms of the version
    +      of the License under which You originally received the Covered Software,
    +      or under the terms of any subsequent version published by the license
    +      steward.
    +
    +10.3. Modified Versions
    +
    +      If you create software not governed by this License, and you want to
    +      create a new license for such software, you may create and use a
    +      modified version of this License if you rename the license and remove
    +      any references to the name of the license steward (except to note that
    +      such modified license differs from this License).
    +
    +10.4. Distributing Source Code Form that is Incompatible With Secondary
    +      Licenses If You choose to distribute Source Code Form that is
    +      Incompatible With Secondary Licenses under the terms of this version of
    +      the License, the notice described in Exhibit B of this License must be
    +      attached.
    +
    +Exhibit A - Source Code Form License Notice
    +
    +      This Source Code Form is subject to the
    +      terms of the Mozilla Public License, v.
    +      2.0. If a copy of the MPL was not
    +      distributed with this file, You can
    +      obtain one at
    +      http://mozilla.org/MPL/2.0/.
    +
    +If it is not possible or desirable to put the notice in a particular file,
    +then You may include the notice in a location (such as a LICENSE file in a
    +relevant directory) where a recipient would be likely to look for such a
    +notice.
    +
    +You may add additional accurate notices of copyright ownership.
    +
    +Exhibit B - "Incompatible With Secondary Licenses" Notice
    +
    +      This Source Code Form is "Incompatible
    +      With Secondary Licenses", as defined by
    +      the Mozilla Public License, v. 2.0.
    +
    +
    +
    + +
    +Blackmagic DeckLink SDK - Mac +homepage + + +
    +
    Extracted from mac/include/DeckLinkAPI.h:
    +
    +** Copyright (c) 2014 Blackmagic Design
    +**
    +** Permission is hereby granted, free of charge, to any person or organization
    +** obtaining a copy of the software and accompanying documentation covered by
    +** this license (the "Software") to use, reproduce, display, distribute,
    +** execute, and transmit the Software, and to prepare derivative works of the
    +** Software, and to permit third-parties to whom the Software is furnished to
    +** do so, all subject to the following:
    +** 
    +** The copyright notices in the Software and this entire statement, including
    +** the above license grant, this restriction and the following disclaimer,
    +** must be included in all copies of the Software, in whole or in part, and
    +** all derivative works of the Software, unless such copies or derivative
    +** works are solely in the form of machine-executable object code generated by
    +** a source language processor.
    +** 
    +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
    +** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
    +** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
    +** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
    +** DEALINGS IN THE SOFTWARE.
    +
    +
    +
    + +
    +blink HTMLTokenizer +homepage + + +
    +
    Copyright (C) 2008 Apple Inc. All Rights Reserved.
    +Copyright (C) 2009 Torch Mobile, Inc. http://www.torchmobile.com/
    +Copyright (C) 2010 Google, Inc. All Rights Reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    + *
    +THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
    +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    +PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
    +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
    +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
    +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
    +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
    +OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +BoringSSL +homepage + + +
    +
    BoringSSL is a fork of OpenSSL. As such, large parts of it fall under OpenSSL
    +licensing. Files that are completely new have a Google copyright and an ISC
    +license. This license is reproduced at the bottom of this file.
    +
    +Contributors to BoringSSL are required to follow the CLA rules for Chromium:
    +https://cla.developers.google.com/clas
    +
    +Files in third_party/ have their own licenses, as described therein. The MIT
    +license, for third_party/fiat, which, unlike other third_party directories, is
    +compiled into non-test libraries, is included below.
    +
    +The OpenSSL toolkit stays under a dual license, i.e. both the conditions of the
    +OpenSSL License and the original SSLeay license apply to the toolkit. See below
    +for the actual license texts. Actually both licenses are BSD-style Open Source
    +licenses. In case of any license issues related to OpenSSL please contact
    +openssl-core@openssl.org.
    +
    +The following are Google-internal bug numbers where explicit permission from
    +some authors is recorded for use of their work. (This is purely for our own
    +record keeping.)
    +  27287199
    +  27287880
    +  27287883
    +
    +  OpenSSL License
    +  ---------------
    +
    +/* ====================================================================
    + * Copyright (c) 1998-2011 The OpenSSL Project.  All rights reserved.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions
    + * are met:
    + *
    + * 1. Redistributions of source code must retain the above copyright
    + *    notice, this list of conditions and the following disclaimer. 
    + *
    + * 2. Redistributions in binary form must reproduce the above copyright
    + *    notice, this list of conditions and the following disclaimer in
    + *    the documentation and/or other materials provided with the
    + *    distribution.
    + *
    + * 3. All advertising materials mentioning features or use of this
    + *    software must display the following acknowledgment:
    + *    "This product includes software developed by the OpenSSL Project
    + *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
    + *
    + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
    + *    endorse or promote products derived from this software without
    + *    prior written permission. For written permission, please contact
    + *    openssl-core@openssl.org.
    + *
    + * 5. Products derived from this software may not be called "OpenSSL"
    + *    nor may "OpenSSL" appear in their names without prior written
    + *    permission of the OpenSSL Project.
    + *
    + * 6. Redistributions of any form whatsoever must retain the following
    + *    acknowledgment:
    + *    "This product includes software developed by the OpenSSL Project
    + *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
    + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    + * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
    + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
    + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
    + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
    + * OF THE POSSIBILITY OF SUCH DAMAGE.
    + * ====================================================================
    + *
    + * This product includes cryptographic software written by Eric Young
    + * (eay@cryptsoft.com).  This product includes software written by Tim
    + * Hudson (tjh@cryptsoft.com).
    + *
    + */
    +
    + Original SSLeay License
    + -----------------------
    +
    +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
    + * All rights reserved.
    + *
    + * This package is an SSL implementation written
    + * by Eric Young (eay@cryptsoft.com).
    + * The implementation was written so as to conform with Netscapes SSL.
    + * 
    + * This library is free for commercial and non-commercial use as long as
    + * the following conditions are aheared to.  The following conditions
    + * apply to all code found in this distribution, be it the RC4, RSA,
    + * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
    + * included with this distribution is covered by the same copyright terms
    + * except that the holder is Tim Hudson (tjh@cryptsoft.com).
    + * 
    + * Copyright remains Eric Young's, and as such any Copyright notices in
    + * the code are not to be removed.
    + * If this package is used in a product, Eric Young should be given attribution
    + * as the author of the parts of the library used.
    + * This can be in the form of a textual message at program startup or
    + * in documentation (online or textual) provided with the package.
    + * 
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions
    + * are met:
    + * 1. Redistributions of source code must retain the copyright
    + *    notice, this list of conditions and the following disclaimer.
    + * 2. Redistributions in binary form must reproduce the above copyright
    + *    notice, this list of conditions and the following disclaimer in the
    + *    documentation and/or other materials provided with the distribution.
    + * 3. All advertising materials mentioning features or use of this software
    + *    must display the following acknowledgement:
    + *    "This product includes cryptographic software written by
    + *     Eric Young (eay@cryptsoft.com)"
    + *    The word 'cryptographic' can be left out if the rouines from the library
    + *    being used are not cryptographic related :-).
    + * 4. If you include any Windows specific code (or a derivative thereof) from 
    + *    the apps directory (application code) you must include an acknowledgement:
    + *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
    + * 
    + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
    + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    + * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    + * SUCH DAMAGE.
    + * 
    + * The licence and distribution terms for any publically available version or
    + * derivative of this code cannot be changed.  i.e. this code cannot simply be
    + * copied and put under another distribution licence
    + * [including the GNU Public Licence.]
    + */
    +
    +
    +ISC license used for completely new code in BoringSSL:
    +
    +/* Copyright (c) 2015, Google Inc.
    + *
    + * Permission to use, copy, modify, and/or distribute this software for any
    + * purpose with or without fee is hereby granted, provided that the above
    + * copyright notice and this permission notice appear in all copies.
    + *
    + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
    + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
    + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
    + * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
    + * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
    + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
    +
    +
    +The code in third_party/fiat carries the MIT license:
    +
    +Copyright (c) 2015-2016 the fiat-crypto authors (see
    +https://github.com/mit-plv/fiat-crypto/blob/master/AUTHORS).
    +
    +Permission is hereby granted, free of charge, to any person obtaining a copy
    +of this software and associated documentation files (the "Software"), to deal
    +in the Software without restriction, including without limitation the rights
    +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    +copies of the Software, and to permit persons to whom the Software is
    +furnished to do so, subject to the following conditions:
    +
    +The above copyright notice and this permission notice shall be included in all
    +copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
    +SOFTWARE.
    +
    +
    +Licenses for support code
    +-------------------------
    +
    +Parts of the TLS test suite are under the Go license. This code is not included
    +in BoringSSL (i.e. libcrypto and libssl) when compiled, however, so
    +distributing code linked against BoringSSL does not trigger this license:
    +
    +Copyright (c) 2009 The Go Authors. All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are
    +met:
    +
    +   * Redistributions of source code must retain the above copyright
    +notice, this list of conditions and the following disclaimer.
    +   * Redistributions in binary form must reproduce the above
    +copyright notice, this list of conditions and the following disclaimer
    +in the documentation and/or other materials provided with the
    +distribution.
    +   * Neither the name of Google Inc. nor the names of its
    +contributors may be used to endorse or promote products derived from
    +this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +BoringSSL uses the Chromium test infrastructure to run a continuous build,
    +trybots etc. The scripts which manage this, and the script for generating build
    +metadata, are under the Chromium license. Distributing code linked against
    +BoringSSL does not trigger this license.
    +
    +Copyright 2015 The Chromium Authors. All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are
    +met:
    +
    +   * Redistributions of source code must retain the above copyright
    +notice, this list of conditions and the following disclaimer.
    +   * Redistributions in binary form must reproduce the above
    +copyright notice, this list of conditions and the following disclaimer
    +in the documentation and/or other materials provided with the
    +distribution.
    +   * Neither the name of Google Inc. nor the names of its
    +contributors may be used to endorse or promote products derived from
    +this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +Braille Translation Library +homepage + + +
    +
    (Copied from src/liblouis/liblouis.h.in)
    +
    +/* liblouis Braille Translation and Back-Translation Library
    +
    +   Based on the Linux screenreader BRLTTY, copyright (C) 1999-2006 by
    +   The BRLTTY Team
    +
    +   Copyright (C) 2004, 2005, 2006, 2009 ViewPlus Technologies, Inc.
    +   www.viewplus.com and JJB Software, Inc. www.jjb-software.com
    +
    +   liblouis is free software: you can redistribute it and/or modify it
    +   under the terms of the GNU Lesser General Public License as
    +   published by the Free Software Foundation, either version 3 of the
    +   License, or (at your option) any later version.
    +
    +   liblouis is distributed in the hope that it will be useful, but
    +   WITHOUT ANY WARRANTY; without even the implied warranty of
    +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
    +   Lesser General Public License for more details.
    +
    +   You should have received a copy of the GNU Lesser General Public
    +   License along with this program. If not, see
    +   <http://www.gnu.org/licenses/>.
    +
    +   Maintained by John J. Boyer john.boyer@abilitiessoft.com
    +   */
    +
    +
    +
    +
    + +
    +Breakpad, An open-source multi-platform crash reporting system +homepage + + +
    +
    Copyright (c) 2006, Google Inc.
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are
    +met:
    +
    +    * Redistributions of source code must retain the above copyright
    +notice, this list of conditions and the following disclaimer.
    +    * Redistributions in binary form must reproduce the above
    +copyright notice, this list of conditions and the following disclaimer
    +in the documentation and/or other materials provided with the
    +distribution.
    +    * Neither the name of Google Inc. nor the names of its
    +contributors may be used to endorse or promote products derived from
    +this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +COPYRIGHT AND PERMISSION NOTICE
    +
    +Copyright (c) 1996 - 2011, Daniel Stenberg, <daniel@haxx.se>.
    +
    +All rights reserved.
    +
    +Permission to use, copy, modify, and distribute this software for any purpose
    +with or without fee is hereby granted, provided that the above copyright
    +notice and this permission notice appear in all copies.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN
    +NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
    +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
    +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
    +OR OTHER DEALINGS IN THE SOFTWARE.
    +
    +Except as contained in this notice, the name of a copyright holder shall not
    +be used in advertising or otherwise to promote the sale, use or other dealings
    +in this Software without prior written authorization of the copyright holder.
    +
    +
    +Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
    +
    +@APPLE_LICENSE_HEADER_START@
    +
    +This file contains Original Code and/or Modifications of Original Code
    +as defined in and that are subject to the Apple Public Source License
    +Version 2.0 (the 'License'). You may not use this file except in
    +compliance with the License. Please obtain a copy of the License at
    +http://www.opensource.apple.com/apsl/ and read it before using this
    +file.
    +
    +The Original Code and all software distributed under the License are
    +distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
    +EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
    +INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
    +FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
    +Please see the License for the specific language governing rights and
    +limitations under the License.
    +
    +@APPLE_LICENSE_HEADER_END@
    +
    +
    +Copyright 2007-2008 Google Inc.
    +
    +Licensed under the Apache License, Version 2.0 (the "License"); you may not
    +use this file except in compliance with the License.  You may obtain a copy
    +of the License at
    +
    +http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
    +WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
    +License for the specific language governing permissions and limitations under
    +the License.
    +
    +
    +
    + +
    +Brotli +homepage + + +
    +
    Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.
    +
    +Permission is hereby granted, free of charge, to any person obtaining a copy
    +of this software and associated documentation files (the "Software"), to deal
    +in the Software without restriction, including without limitation the rights
    +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    +copies of the Software, and to permit persons to whom the Software is
    +furnished to do so, subject to the following conditions:
    +
    +The above copyright notice and this permission notice shall be included in
    +all copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
    +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    +THE SOFTWARE.
    +
    +
    +
    + +
    +BSDiff +homepage + + +
    +
    Copyright 2003-2005 Colin Percival
    +All rights reserved
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted providing that the following conditions 
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
    +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
    +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
    +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
    +IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
    +POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +bsdiff +homepage + + +
    +
    BSD Protection License
    +February 2002
    +
    +Preamble
    +--------
    +
    +The Berkeley Software Distribution ("BSD") license has proven very effective
    +over the years at allowing for a wide spread of work throughout both
    +commercial and non-commercial products.  For programmers whose primary
    +intention is to improve the general quality of available software, it is
    +arguable that there is no better license than the BSD license, as it
    +permits improvements to be used wherever they will help, without idealogical
    +or metallic constraint.
    +
    +This is of particular value to those who produce reference implementations
    +of proposed standards: The case of TCP/IP clearly illustrates that freely
    +and universally available implementations leads the rapid acceptance of
    +standards -- often even being used instead of a de jure standard (eg, OSI
    +network models).
    +
    +With the rapid proliferation of software licensed under the GNU General
    +Public License, however, the continued success of this role is called into
    +question.  Given that the inclusion of a few lines of "GPL-tainted" work
    +into a larger body of work will result in restricted distribution -- and
    +given that further work will likely build upon the "tainted" portions,
    +making them difficult to remove at a future date -- there are inevitable
    +circumstances where authors would, in order to protect their goal of
    +providing for the widespread usage of their work, wish to guard against
    +such "GPL-taint".
    +
    +In addition, one can imagine that companies which operate by producing and
    +selling (possibly closed-source) code would wish to protect themselves
    +against the rise of a GPL-licensed competitor.  While under existing
    +licenses this would mean not releasing their code under any form of open
    +license, if a license existed under which they could incorporate any
    +improvements back into their own (commercial) products then they might be
    +far more willing to provide for non-closed distribution.
    +
    +For the above reasons, we put forth this "BSD Protection License": A
    +license designed to retain the freedom granted by the BSD license to use
    +licensed works in a wide variety of settings, both non-commercial and
    +commercial, while protecting the work from having future contributors
    +restrict that freedom.
    +
    +The precise terms and conditions for copying, distribution, and
    +modification follow.
    +
    +BSD PROTECTION LICENSE
    +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION, AND MODIFICATION
    +----------------------------------------------------------------
    +
    +0. Definitions.
    +   a) "Program", below, refers to any program or work distributed under
    +      the terms of this license.
    +   b) A "work based on the Program", below, refers to either the Program
    +      or any derivative work under copyright law.
    +   c) "Modification", below, refers to the act of creating derivative works.
    +   d) "You", below, refers to each licensee.
    +
    +1. Scope.
    +   This license governs the copying, distribution, and modification of the
    +   Program.  Other activities are outside the scope of this license; The
    +   act of running the Program is not restricted, and the output from the
    +   Program is covered only if its contents constitute a work based on the
    +   Program.
    +
    +2. Verbatim copies.
    +   You may copy and distribute verbatim copies of the Program as you
    +   receive it, in any medium, provided that you conspicuously and
    +   appropriately publish on each copy an appropriate copyright notice; keep
    +   intact all the notices that refer to this License and to the absence of
    +   any warranty; and give any other recipients of the Program a copy of this
    +   License along with the Program.
    +
    +3. Modification and redistribution under closed license.
    +   You may modify your copy or copies of the Program, and distribute
    +   the resulting derivative works, provided that you meet the
    +   following conditions:
    +   a) The copyright notice and disclaimer on the Program must be reproduced
    +      and included in the source code, documentation, and/or other materials
    +      provided in a manner in which such notices are normally distributed.
    +   b) The derivative work must be clearly identified as such, in order that
    +      it may not be confused with the original work.
    +   c) The license under which the derivative work is distributed must
    +      expressly prohibit the distribution of further derivative works.
    +
    +4. Modification and redistribution under open license.
    +   You may modify your copy or copies of the Program, and distribute
    +   the resulting derivative works, provided that you meet the
    +   following conditions:
    +   a) The copyright notice and disclaimer on the Program must be reproduced
    +      and included in the source code, documentation, and/or other materials
    +      provided in a manner in which such notices are normally distributed.
    +   b) You must clearly indicate the nature and date of any changes made
    +      to the Program.  The full details need not necessarily be included in
    +      the individual modified files, provided that each modified file is
    +      clearly marked as such and instructions are included on where the
    +      full details of the modifications may be found.
    +   c) You must cause any work that you distribute or publish, that in whole
    +      or in part contains or is derived from the Program or any part
    +      thereof, to be licensed as a whole at no charge to all third
    +      parties under the terms of this License.
    +
    +5. Implied acceptance.
    +   You may not copy or distribute the Program or any derivative works except
    +   as expressly provided under this license.  Consequently, any such action
    +   will be taken as implied acceptance of the terms of this license.
    +
    +6. NO WARRANTY.
    +   THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
    +   INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
    +   AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL
    +   THE COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
    +   REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE FOR ANY DIRECT,
    +   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +   ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING, BUT
    +   NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
    +   USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +   ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
    +   TORT, EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
    +   POSSIBILITY OF SUCH DAMAGES.
    +
    +
    +
    + +
    +bspatch +homepage + + +
    +
    Copyright 2003,2004 Colin Percival
    +All rights reserved
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted providing that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
    +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
    +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
    +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
    +IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
    +POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +Chrome Custom Tabs - Example and Usage +homepage + + +
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +
    +
    + +
    +ChromeVox +homepage + + +
    +
    // Copyright 2013 Google Inc.
    +//
    +// Licensed under the Apache License, Version 2.0 (the "License");
    +// you may not use this file except in compliance with the License.
    +// You may obtain a copy of the License at
    +//
    +//      http://www.apache.org/licenses/LICENSE-2.0
    +//
    +// Unless required by applicable law or agreed to in writing, software
    +// distributed under the License is distributed on an "AS IS" BASIS,
    +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +// See the License for the specific language governing permissions and
    +// limitations under the License.
    +
    +
    +
    + +
    +Closure compiler +homepage + + +
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +
    + +
    +Cocoa extension code from Camino +homepage + + +
    +
    /* ***** BEGIN LICENSE BLOCK *****
    + * Version: MPL 1.1/GPL 2.0/LGPL 2.1
    + *
    + * The contents of this file are subject to the Mozilla Public License Version
    + * 1.1 (the "License"); you may not use this file except in compliance with
    + * the License. You may obtain a copy of the License at
    + * http://www.mozilla.org/MPL/
    + *
    + * Software distributed under the License is distributed on an "AS IS" basis,
    + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
    + * for the specific language governing rights and limitations under the
    + * License.
    + *
    + * The Original Code is mozilla.org code.
    + *
    + * The Initial Developer of the Original Code is
    + * Netscape Communications Corporation.
    + * Portions created by the Initial Developer are Copyright (C) 2002
    + * the Initial Developer. All Rights Reserved.
    + *
    + * Contributor(s):
    + *
    + * Alternatively, the contents of this file may be used under the terms of
    + * either the GNU General Public License Version 2 or later (the "GPL"), or
    + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
    + * in which case the provisions of the GPL or the LGPL are applicable instead
    + * of those above. If you wish to allow use of your version of this file only
    + * under the terms of either the GPL or the LGPL, and not to allow others to
    + * use your version of this file under the terms of the MPL, indicate your
    + * decision by deleting the provisions above and replace them with the notice
    + * and other provisions required by the GPL or the LGPL. If you do not delete
    + * the provisions above, a recipient may use your version of this file under
    + * the terms of any one of the MPL, the GPL or the LGPL.
    + *
    + * ***** END LICENSE BLOCK ***** */
    +
    +
    +
    + +
    +Compact Encoding Detection +homepage + + +
    +
    // Copyright (c) 2010 The Chromium Authors. All rights reserved.
    +//
    +// Redistribution and use in source and binary forms, with or without
    +// modification, are permitted provided that the following conditions are
    +// met:
    +//
    +//    * Redistributions of source code must retain the above copyright
    +// notice, this list of conditions and the following disclaimer.
    +//    * Redistributions in binary form must reproduce the above
    +// copyright notice, this list of conditions and the following disclaimer
    +// in the documentation and/or other materials provided with the
    +// distribution.
    +//    * Neither the name of Google Inc. nor the names of its
    +// contributors may be used to endorse or promote products derived from
    +// this software without specific prior written permission.
    +//
    +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +Compact Language Detector v3 +homepage + + +
    +
    Copyright 2016 Google Inc.  All rights reserved.
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright 2016, Google Inc.
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +
    + +
    +Crashpad +homepage + + +
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +
    + +
    +CRC32C +homepage + + +
    +
    Copyright 2017, The CRC32C Authors.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are
    +met:
    +
    +   * Redistributions of source code must retain the above copyright
    +notice, this list of conditions and the following disclaimer.
    +   * Redistributions in binary form must reproduce the above
    +copyright notice, this list of conditions and the following disclaimer
    +in the documentation and/or other materials provided with the
    +distribution.
    +
    +   * Neither the name of Google Inc. nor the names of its
    +contributors may be used to endorse or promote products derived from
    +this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +d3 +homepage + + +
    +
    Copyright (c) 2010-2014, Michael Bostock
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are met:
    +
    +* Redistributions of source code must retain the above copyright notice, this
    +  list of conditions and the following disclaimer.
    +
    +* Redistributions in binary form must reproduce the above copyright notice,
    +  this list of conditions and the following disclaimer in the documentation
    +  and/or other materials provided with the distribution.
    +
    +* The name Michael Bostock may not be used to endorse or promote products
    +  derived from this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
    +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +DISCLAIMED. IN NO EVENT SHALL MICHAEL BOSTOCK BE LIABLE FOR ANY DIRECT,
    +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
    +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
    +OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
    +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
    +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +Darwin +homepage + + +
    +
    APPLE PUBLIC SOURCE LICENSE Version 2.0 -  August 6, 2003
    +
    +Please read this License carefully before downloading this software.  By
    +downloading or using this software, you are agreeing to be bound by the terms of
    +this License.  If you do not or cannot agree to the terms of this License,
    +please do not download or use the software.
    +
    +Apple Note:  In January 2007, Apple changed its corporate name from "Apple
    +Computer, Inc." to "Apple Inc."  This change has been reflected below and
    +copyright years updated, but no other changes have been made to the APSL 2.0.
    +
    +1.	General; Definitions.  This License applies to any program or other work
    +which Apple Inc. ("Apple") makes publicly available and which contains a notice
    +placed by Apple identifying such program or work as "Original Code" and stating
    +that it is subject to the terms of this Apple Public Source License version 2.0
    +("License").  As used in this License:
    +
    +1.1	 "Applicable Patent Rights" mean:  (a) in the case where Apple is the
    +grantor of rights, (i) claims of patents that are now or hereafter acquired,
    +owned by or assigned to Apple and (ii) that cover subject matter contained in
    +the Original Code, but only to the extent necessary to use, reproduce and/or
    +distribute the Original Code without infringement; and (b) in the case where You
    +are the grantor of rights, (i) claims of patents that are now or hereafter
    +acquired, owned by or assigned to You and (ii) that cover subject matter in Your
    +Modifications, taken alone or in combination with Original Code.
    +
    +1.2	"Contributor" means any person or entity that creates or contributes to the
    +creation of Modifications.
    +
    +1.3	 "Covered Code" means the Original Code, Modifications, the combination of
    +Original Code and any Modifications, and/or any respective portions thereof.
    +
    +1.4	"Externally Deploy" means: (a) to sublicense, distribute or otherwise make
    +Covered Code available, directly or indirectly, to anyone other than You; and/or
    +(b) to use Covered Code, alone or as part of a Larger Work, in any way to
    +provide a service, including but not limited to delivery of content, through
    +electronic communication with a client other than You.
    +
    +1.5	"Larger Work" means a work which combines Covered Code or portions thereof
    +with code not governed by the terms of this License.
    +
    +1.6	"Modifications" mean any addition to, deletion from, and/or change to, the
    +substance and/or structure of the Original Code, any previous Modifications, the
    +combination of Original Code and any previous Modifications, and/or any
    +respective portions thereof.  When code is released as a series of files, a
    +Modification is:  (a) any addition to or deletion from the contents of a file
    +containing Covered Code; and/or (b) any new file or other representation of
    +computer program statements that contains any part of Covered Code.
    +
    +1.7	"Original Code" means (a) the Source Code of a program or other work as
    +originally made available by Apple under this License, including the Source Code
    +of any updates or upgrades to such programs or works made available by Apple
    +under this License, and that has been expressly identified by Apple as such in
    +the header file(s) of such work; and (b) the object code compiled from such
    +Source Code and originally made available by Apple under this License
    +
    +1.8	"Source Code" means the human readable form of a program or other work that
    +is suitable for making modifications to it, including all modules it contains,
    +plus any associated interface definition files, scripts used to control
    +compilation and installation of an executable (object code).
    +
    +1.9	"You" or "Your" means an individual or a legal entity exercising rights
    +under this License.  For legal entities, "You" or "Your" includes any entity
    +which controls, is controlled by, or is under common control with, You, where
    +"control" means (a) the power, direct or indirect, to cause the direction or
    +management of such entity, whether by contract or otherwise, or (b) ownership of
    +fifty percent (50%) or more of the outstanding shares or beneficial ownership of
    +such entity.
    +
    +2.	Permitted Uses; Conditions & Restrictions.   Subject to the terms and
    +conditions of this License, Apple hereby grants You, effective on the date You
    +accept this License and download the Original Code, a world-wide, royalty-free,
    +non-exclusive license, to the extent of Apple's Applicable Patent Rights and
    +copyrights covering the Original Code, to do the following:
    +
    +2.1	Unmodified Code.  You may use, reproduce, display, perform, internally
    +distribute within Your organization, and Externally Deploy verbatim, unmodified
    +copies of the Original Code, for commercial or non-commercial purposes, provided
    +that in each instance:
    +
    +(a)	You must retain and reproduce in all copies of Original Code the copyright
    +and other proprietary notices and disclaimers of Apple as they appear in the
    +Original Code, and keep intact all notices in the Original Code that refer to
    +this License; and
    +
    +(b) 	You must include a copy of this License with every copy of Source Code of
    +Covered Code and documentation You distribute or Externally Deploy, and You may
    +not offer or impose any terms on such Source Code that alter or restrict this
    +License or the recipients' rights hereunder, except as permitted under Section
    +6.
    +
    +2.2	Modified Code.  You may modify Covered Code and use, reproduce, display,
    +perform, internally distribute within Your organization, and Externally Deploy
    +Your Modifications and Covered Code, for commercial or non-commercial purposes,
    +provided that in each instance You also meet all of these conditions:
    +
    +(a)	You must satisfy all the conditions of Section 2.1 with respect to the
    +Source Code of the Covered Code;
    +
    +(b)	You must duplicate, to the extent it does not already exist, the notice in
    +Exhibit A in each file of the Source Code of all Your Modifications, and cause
    +the modified files to carry prominent notices stating that You changed the files
    +and the date of any change; and
    +
    +(c)	If You Externally Deploy Your Modifications, You must make Source Code of
    +all Your Externally Deployed Modifications either available to those to whom You
    +have Externally Deployed Your Modifications, or publicly available.  Source Code
    +of Your Externally Deployed Modifications must be released under the terms set
    +forth in this License, including the license grants set forth in Section 3
    +below, for as long as you Externally Deploy the Covered Code or twelve (12)
    +months from the date of initial External Deployment, whichever is longer. You
    +should preferably distribute the Source Code of Your Externally Deployed
    +Modifications electronically (e.g. download from a web site).
    +
    +2.3	Distribution of Executable Versions.  In addition, if You Externally Deploy
    +Covered Code (Original Code and/or Modifications) in object code, executable
    +form only, You must include a prominent notice, in the code itself as well as in
    +related documentation, stating that Source Code of the Covered Code is available
    +under the terms of this License with information on how and where to obtain such
    +Source Code.
    +
    +2.4	Third Party Rights.  You expressly acknowledge and agree that although
    +Apple and each Contributor grants the licenses to their respective portions of
    +the Covered Code set forth herein, no assurances are provided by Apple or any
    +Contributor that the Covered Code does not infringe the patent or other
    +intellectual property rights of any other entity. Apple and each Contributor
    +disclaim any liability to You for claims brought by any other entity based on
    +infringement of intellectual property rights or otherwise. As a condition to
    +exercising the rights and licenses granted hereunder, You hereby assume sole
    +responsibility to secure any other intellectual property rights needed, if any.
    +For example, if a third party patent license is required to allow You to
    +distribute the Covered Code, it is Your responsibility to acquire that license
    +before distributing the Covered Code.
    +
    +3.	Your Grants.  In consideration of, and as a condition to, the licenses
    +granted to You under this License, You hereby grant to any person or entity
    +receiving or distributing Covered Code under this License a non-exclusive,
    +royalty-free, perpetual, irrevocable license, under Your Applicable Patent
    +Rights and other intellectual property rights (other than patent) owned or
    +controlled by You, to use, reproduce, display, perform, modify, sublicense,
    +distribute and Externally Deploy Your Modifications of the same scope and extent
    +as Apple's licenses under Sections 2.1 and 2.2 above.
    +
    +4.	Larger Works.  You may create a Larger Work by combining Covered Code with
    +other code not governed by the terms of this License and distribute the Larger
    +Work as a single product.  In each such instance, You must make sure the
    +requirements of this License are fulfilled for the Covered Code or any portion
    +thereof.
    +
    +5.	Limitations on Patent License.   Except as expressly stated in Section 2, no
    +other patent rights, express or implied, are granted by Apple herein. 
    +Modifications and/or Larger Works may require additional patent licenses from
    +Apple which Apple may grant in its sole discretion.
    +
    +6.	Additional Terms.  You may choose to offer, and to charge a fee for,
    +warranty, support, indemnity or liability obligations and/or other rights
    +consistent with the scope of the license granted herein ("Additional Terms") to
    +one or more recipients of Covered Code. However, You may do so only on Your own
    +behalf and as Your sole responsibility, and not on behalf of Apple or any
    +Contributor. You must obtain the recipient's agreement that any such Additional
    +Terms are offered by You alone, and You hereby agree to indemnify, defend and
    +hold Apple and every Contributor harmless for any liability incurred by or
    +claims asserted against Apple or such Contributor by reason of any such
    +Additional Terms.
    +
    +7.	Versions of the License.  Apple may publish revised and/or new versions of
    +this License from time to time.  Each version will be given a distinguishing
    +version number.  Once Original Code has been published under a particular
    +version of this License, You may continue to use it under the terms of that
    +version. You may also choose to use such Original Code under the terms of any
    +subsequent version of this License published by Apple.  No one other than Apple
    +has the right to modify the terms applicable to Covered Code created under this
    +License.
    +
    +8.	NO WARRANTY OR SUPPORT.  The Covered Code may contain in whole or in part
    +pre-release, untested, or not fully tested works.  The Covered Code may contain
    +errors that could cause failures or loss of data, and may be incomplete or
    +contain inaccuracies.  You expressly acknowledge and agree that use of the
    +Covered Code, or any portion thereof, is at Your sole and entire risk.  THE
    +COVERED CODE IS PROVIDED "AS IS" AND WITHOUT WARRANTY, UPGRADES OR SUPPORT OF
    +ANY KIND AND APPLE AND APPLE'S LICENSOR(S) (COLLECTIVELY REFERRED TO AS "APPLE"
    +FOR THE PURPOSES OF SECTIONS 8 AND 9) AND ALL CONTRIBUTORS EXPRESSLY DISCLAIM
    +ALL WARRANTIES AND/OR CONDITIONS, EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED
    +TO, THE IMPLIED WARRANTIES AND/OR CONDITIONS OF MERCHANTABILITY, OF SATISFACTORY
    +QUALITY, OF FITNESS FOR A PARTICULAR PURPOSE, OF ACCURACY, OF QUIET ENJOYMENT,
    +AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.  APPLE AND EACH CONTRIBUTOR DOES NOT
    +WARRANT AGAINST INTERFERENCE WITH YOUR ENJOYMENT OF THE COVERED CODE, THAT THE
    +FUNCTIONS CONTAINED IN THE COVERED CODE WILL MEET YOUR REQUIREMENTS, THAT THE
    +OPERATION OF THE COVERED CODE WILL BE UNINTERRUPTED OR ERROR-FREE, OR THAT
    +DEFECTS IN THE COVERED CODE WILL BE CORRECTED.  NO ORAL OR WRITTEN INFORMATION
    +OR ADVICE GIVEN BY APPLE, AN APPLE AUTHORIZED REPRESENTATIVE OR ANY CONTRIBUTOR
    +SHALL CREATE A WARRANTY.  You acknowledge that the Covered Code is not intended
    +for use in the operation of nuclear facilities, aircraft navigation,
    +communication systems, or air traffic control machines in which case the failure
    +of the Covered Code could lead to death, personal injury, or severe physical or
    +environmental damage.
    +
    +9.	LIMITATION OF LIABILITY. TO THE EXTENT NOT PROHIBITED BY LAW, IN NO EVENT
    +SHALL APPLE OR ANY CONTRIBUTOR BE LIABLE FOR ANY INCIDENTAL, SPECIAL, INDIRECT
    +OR CONSEQUENTIAL DAMAGES ARISING OUT OF OR RELATING TO THIS LICENSE OR YOUR USE
    +OR INABILITY TO USE THE COVERED CODE, OR ANY PORTION THEREOF, WHETHER UNDER A
    +THEORY OF CONTRACT, WARRANTY, TORT (INCLUDING NEGLIGENCE), PRODUCTS LIABILITY OR
    +OTHERWISE, EVEN IF APPLE OR SUCH CONTRIBUTOR HAS BEEN ADVISED OF THE POSSIBILITY
    +OF SUCH DAMAGES AND NOTWITHSTANDING THE FAILURE OF ESSENTIAL PURPOSE OF ANY
    +REMEDY. SOME JURISDICTIONS DO NOT ALLOW THE LIMITATION OF LIABILITY OF
    +INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS LIMITATION MAY NOT APPLY TO YOU. In
    +no event shall Apple's total liability to You for all damages (other than as may
    +be required by applicable law) under this License exceed the amount of fifty
    +dollars ($50.00).
    +
    +10.	Trademarks.  This License does not grant any rights to use the trademarks
    +or trade names  "Apple", "Mac", "Mac OS", "QuickTime", "QuickTime Streaming
    +Server" or any other trademarks, service marks, logos or trade names belonging
    +to Apple (collectively "Apple Marks") or to any trademark, service mark, logo or
    +trade name belonging to any Contributor.  You agree not to use any Apple Marks
    +in or as part of the name of products derived from the Original Code or to
    +endorse or promote products derived from the Original Code other than as
    +expressly permitted by and in strict compliance at all times with Apple's third
    +party trademark usage guidelines which are posted at
    +http://www.apple.com/legal/guidelinesfor3rdparties.html.
    +
    +11.	Ownership. Subject to the licenses granted under this License, each
    +Contributor retains all rights, title and interest in and to any Modifications
    +made by such Contributor.  Apple retains all rights, title and interest in and
    +to the Original Code and any Modifications made by or on behalf of Apple ("Apple
    +Modifications"), and such Apple Modifications will not be automatically subject
    +to this License.  Apple may, at its sole discretion, choose to license such
    +Apple Modifications under this License, or on different terms from those
    +contained in this License or may choose not to license them at all.
    +
    +12.	Termination.
    +
    +12.1	Termination.  This License and the rights granted hereunder will
    +terminate:
    +
    +(a)	automatically without notice from Apple if You fail to comply with any
    +term(s) of this License and fail to cure such breach within 30 days of becoming
    +aware of such breach; (b)	immediately in the event of the circumstances
    +described in Section 13.5(b); or (c)	automatically without notice from Apple if
    +You, at any time during the term of this License, commence an action for patent
    +infringement against Apple; provided that Apple did not first commence an action
    +for patent infringement against You in that instance.
    +
    +12.2	Effect of Termination.  Upon termination, You agree to immediately stop
    +any further use, reproduction, modification, sublicensing and distribution of
    +the Covered Code.  All sublicenses to the Covered Code which have been properly
    +granted prior to termination shall survive any termination of this License. 
    +Provisions which, by their nature, should remain in effect beyond the
    +termination of this License shall survive, including but not limited to Sections
    +3, 5, 8, 9, 10, 11, 12.2 and 13.  No party will be liable to any other for
    +compensation, indemnity or damages of any sort solely as a result of terminating
    +this License in accordance with its terms, and termination of this License will
    +be without prejudice to any other right or remedy of any party.
    +
    +13. 	Miscellaneous.
    +
    +13.1	Government End Users.   The Covered Code is a "commercial item" as defined
    +in FAR 2.101.  Government software and technical data rights in the Covered Code
    +include only those rights customarily provided to the public as defined in this
    +License. This customary commercial license in technical data and software is
    +provided in accordance with FAR 12.211 (Technical Data) and 12.212 (Computer
    +Software) and, for Department of Defense purchases, DFAR 252.227-7015 (Technical
    +Data -- Commercial Items) and 227.7202-3 (Rights in Commercial Computer Software
    +or Computer Software Documentation).  Accordingly, all U.S. Government End Users
    +acquire Covered Code with only those rights set forth herein.
    +
    +13.2	Relationship of Parties.  This License will not be construed as creating
    +an agency, partnership, joint venture or any other form of legal association
    +between or among You, Apple or any Contributor, and You will not represent to
    +the contrary, whether expressly, by implication, appearance or otherwise.
    +
    +13.3	Independent Development.   Nothing in this License will impair Apple's
    +right to acquire, license, develop, have others develop for it, market and/or
    +distribute technology or products that perform the same or similar functions as,
    +or otherwise compete with, Modifications, Larger Works, technology or products
    +that You may develop, produce, market or distribute.
    +
    +13.4	Waiver; Construction.  Failure by Apple or any Contributor to enforce any
    +provision of this License will not be deemed a waiver of future enforcement of
    +that or any other provision.  Any law or regulation which provides that the
    +language of a contract shall be construed against the drafter will not apply to
    +this License.
    +
    +13.5	Severability.  (a) If for any reason a court of competent jurisdiction
    +finds any provision of this License, or portion thereof, to be unenforceable,
    +that provision of the License will be enforced to the maximum extent permissible
    +so as to effect the economic benefits and intent of the parties, and the
    +remainder of this License will continue in full force and effect.  (b)
    +Notwithstanding the foregoing, if applicable law prohibits or restricts You from
    +fully and/or specifically complying with Sections 2 and/or 3 or prevents the
    +enforceability of either of those Sections, this License will immediately
    +terminate and You must immediately discontinue any use of the Covered Code and
    +destroy all copies of it that are in your possession or control.
    +
    +13.6	Dispute Resolution.  Any litigation or other dispute resolution between
    +You and Apple relating to this License shall take place in the Northern District
    +of California, and You and Apple hereby consent to the personal jurisdiction of,
    +and venue in, the state and federal courts within that District with respect to
    +this License. The application of the United Nations Convention on Contracts for
    +the International Sale of Goods is expressly excluded.
    +
    +13.7	Entire Agreement; Governing Law.  This License constitutes the entire
    +agreement between the parties with respect to the subject matter hereof.  This
    +License shall be governed by the laws of the United States and the State of
    +California, except that body of California law concerning conflicts of law.
    +
    +Where You are located in the province of Quebec, Canada, the following clause
    +applies:  The parties hereby confirm that they have requested that this License
    +and all related documents be drafted in English.  Les parties ont exigé que le
    +présent contrat et tous les documents connexes soient rédigés en anglais.
    +
    +EXHIBIT A.
    +
    +"Portions Copyright (c) 1999-2007 Apple Inc.  All Rights Reserved.
    +
    +This file contains Original Code and/or Modifications of Original Code as
    +defined in and that are subject to the Apple Public Source License Version 2.0
    +(the 'License').  You may not use this file except in compliance with the
    +License.  Please obtain a copy of the License at
    +http://www.opensource.apple.com/apsl/ and read it before using this file.
    +
    +The Original Code and all software distributed under the License are distributed
    +on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED,
    +AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION,
    +ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET
    +ENJOYMENT OR NON-INFRINGEMENT.  Please see the License for the specific language
    +governing rights and limitations under the License." 
    +
    +
    +
    + +
    +David M. Gay's floating point routines +homepage + + +
    +
    /****************************************************************
    + *
    + * The author of this software is David M. Gay.
    + *
    + * Copyright (c) 1991, 2000, 2001 by Lucent Technologies.
    + *
    + * Permission to use, copy, modify, and distribute this software for any
    + * purpose without fee is hereby granted, provided that this entire notice
    + * is included in all copies of any software which is or includes a copy
    + * or modification of this software and in all copies of the supporting
    + * documentation for such software.
    + *
    + * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
    + * WARRANTY.  IN PARTICULAR, NEITHER THE AUTHOR NOR LUCENT MAKES ANY
    + * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY
    + * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
    + *
    + ***************************************************************/
    +
    +
    +
    + +
    +divsufsort +homepage + + +
    +
    The MIT License (MIT)
    +
    +Copyright (c) 2003 Yuta Mori All rights reserved.
    +
    +Permission is hereby granted, free of charge, to any person obtaining a copy
    +of this software and associated documentation files (the "Software"), to deal
    +in the Software without restriction, including without limitation the rights
    +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    +copies of the Software, and to permit persons to whom the Software is
    +furnished to do so, subject to the following conditions:
    +
    +The above copyright notice and this permission notice shall be included in all
    +copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
    +SOFTWARE.
    +
    +
    +
    + +
    +dom-distiller-js +homepage + + +
    +
    Copyright 2014 The Chromium Authors. All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are
    +met:
    +
    +   * Redistributions of source code must retain the above copyright
    +notice, this list of conditions and the following disclaimer.
    +   * Redistributions in binary form must reproduce the above
    +copyright notice, this list of conditions and the following disclaimer
    +in the documentation and/or other materials provided with the
    +distribution.
    +   * Neither the name of Google Inc. nor the names of its
    +contributors may be used to endorse or promote products derived from
    +this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    +Parts of the following directories are available under Apache v2.0
    +
    +src/de
    +Copyright (c) 2009-2011 Christian Kohlschütter
    +
    +third_party/gwt_exporter
    +Copyright 2007 Timepedia.org
    +
    +third_party/gwt-2.5.1
    +Copyright 2008 Google
    +
    +java/org/chromium/distiller/dev
    +Copyright 2008 Google
    +
    +Apache License
    +
    +Version 2.0, January 2004
    +
    +http://www.apache.org/licenses/
    +
    +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +1. Definitions.
    +
    +"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
    +
    +"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
    +
    +"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
    +
    +"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
    +
    +"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
    +
    +"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
    +
    +"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
    +
    +"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
    +
    +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
    +
    +2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
    +
    +3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
    +
    +4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
    +
    +You must give any other recipients of the Work or Derivative Works a copy of this License; and
    +You must cause any modified files to carry prominent notices stating that You changed the files; and
    +You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
    +If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. 
    +
    +You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
    +5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
    +
    +6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
    +
    +7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
    +
    +8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
    +
    +9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.
    +
    +END OF TERMS AND CONDITIONS
    +
    +
    +
    + +
    +drawElements Quality Program +homepage + + +
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright 2014 The Android Open Source Project
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +
    + +
    +dynamic annotations +homepage + + +
    +
    /* Copyright (c) 2008-2009, Google Inc.
    + * All rights reserved.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + * notice, this list of conditions and the following disclaimer.
    + *     * Neither the name of Google Inc. nor the names of its
    + * contributors may be used to endorse or promote products derived from
    + * this software without specific prior written permission.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + * ---
    + * Author: Kostya Serebryany
    + */
    +
    +
    +
    + +
    +etc1 +homepage + + +
    +
    /*
    + * Copyright (C) 2009 The Android Open Source Project
    + *
    + * Licensed under the Apache License, Version 2.0 (the "License");
    + * you may not use this file except in compliance with the License.
    + * You may obtain a copy of the License at
    + *
    + *      http://www.apache.org/licenses/LICENSE-2.0
    + *
    + * Unless required by applicable law or agreed to in writing, software
    + * distributed under the License is distributed on an "AS IS" BASIS,
    + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    + * See the License for the specific language governing permissions and
    + * limitations under the License.
    + */
    +
    +
    + +
    +Expat XML Parser +homepage + + +
    +
    Copyright (c) 1998-2000 Thai Open Source Software Center Ltd and Clark Cooper
    +Copyright (c) 2001-2017 Expat maintainers
    +
    +Permission is hereby granted, free of charge, to any person obtaining
    +a copy of this software and associated documentation files (the
    +"Software"), to deal in the Software without restriction, including
    +without limitation the rights to use, copy, modify, merge, publish,
    +distribute, sublicense, and/or sell copies of the Software, and to
    +permit persons to whom the Software is furnished to do so, subject to
    +the following conditions:
    +
    +The above copyright notice and this permission notice shall be included
    +in all copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
    +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
    +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
    +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
    +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +
    +
    +
    + +
    +fdlibm +homepage + + +
    +
    Copyright (C) 1993-2004 by Sun Microsystems, Inc. All rights reserved.
    +
    +Developed at SunSoft, a Sun Microsystems, Inc. business.
    +Permission to use, copy, modify, and distribute this
    +software is freely granted, provided that this notice
    +is preserved.
    +
    +
    +
    + +
    +Feed +homepage + + +
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +
    + +
    +ffmpeg +homepage + + +
    +
    # License
    +
    +Most files in FFmpeg are under the GNU Lesser General Public License version 2.1
    +or later (LGPL v2.1+). Read the file `COPYING.LGPLv2.1` for details. Some other
    +files have MIT/X11/BSD-style licenses. In combination the LGPL v2.1+ applies to
    +FFmpeg.
    +
    +Some optional parts of FFmpeg are licensed under the GNU General Public License
    +version 2 or later (GPL v2+). See the file `COPYING.GPLv2` for details. None of
    +these parts are used by default, you have to explicitly pass `--enable-gpl` to
    +configure to activate them. In this case, FFmpeg's license changes to GPL v2+.
    +
    +Specifically, the GPL parts of FFmpeg are:
    +
    +- libpostproc
    +- optional x86 optimization in the files
    +    - `libavcodec/x86/flac_dsp_gpl.asm`
    +    - `libavcodec/x86/idct_mmx.c`
    +    - `libavfilter/x86/vf_removegrain.asm`
    +- the following building and testing tools
    +    - `compat/solaris/make_sunver.pl`
    +    - `doc/t2h.pm`
    +    - `doc/texi2pod.pl`
    +    - `libswresample/swresample-test.c`
    +    - `tests/checkasm/*`
    +    - `tests/tiny_ssim.c`
    +- the following filters in libavfilter:
    +    - `vf_blackframe.c`
    +    - `vf_boxblur.c`
    +    - `vf_colormatrix.c`
    +    - `vf_cover_rect.c`
    +    - `vf_cropdetect.c`
    +    - `vf_delogo.c`
    +    - `vf_eq.c`
    +    - `vf_find_rect.c`
    +    - `vf_fspp.c`
    +    - `vf_geq.c`
    +    - `vf_histeq.c`
    +    - `vf_hqdn3d.c`
    +    - `vf_interlace.c`
    +    - `vf_kerndeint.c`
    +    - `vf_mcdeint.c`
    +    - `vf_mpdecimate.c`
    +    - `vf_owdenoise.c`
    +    - `vf_perspective.c`
    +    - `vf_phase.c`
    +    - `vf_pp.c`
    +    - `vf_pp7.c`
    +    - `vf_pullup.c`
    +    - `vf_repeatfields.c`
    +    - `vf_sab.c`
    +    - `vf_smartblur.c`
    +    - `vf_spp.c`
    +    - `vf_stereo3d.c`
    +    - `vf_super2xsai.c`
    +    - `vf_tinterlace.c`
    +    - `vf_uspp.c`
    +    - `vsrc_mptestsrc.c`
    +
    +Should you, for whatever reason, prefer to use version 3 of the (L)GPL, then
    +the configure parameter `--enable-version3` will activate this licensing option
    +for you. Read the file `COPYING.LGPLv3` or, if you have enabled GPL parts,
    +`COPYING.GPLv3` to learn the exact legal terms that apply in this case.
    +
    +There are a handful of files under other licensing terms, namely:
    +
    +* The files `libavcodec/jfdctfst.c`, `libavcodec/jfdctint_template.c` and
    +  `libavcodec/jrevdct.c` are taken from libjpeg, see the top of the files for
    +  licensing details. Specifically note that you must credit the IJG in the
    +  documentation accompanying your program if you only distribute executables.
    +  You must also indicate any changes including additions and deletions to
    +  those three files in the documentation.
    +* `tests/reference.pnm` is under the expat license.
    +
    +
    +## External libraries
    +
    +FFmpeg can be combined with a number of external libraries, which sometimes
    +affect the licensing of binaries resulting from the combination.
    +
    +### Compatible libraries
    +
    +The following libraries are under GPL:
    +- frei0r
    +- libcdio
    +- librubberband
    +- libvidstab
    +- libx264
    +- libx265
    +- libxavs
    +- libxvid
    +
    +When combining them with FFmpeg, FFmpeg needs to be licensed as GPL as well by
    +passing `--enable-gpl` to configure.
    +
    +The OpenCORE and VisualOn libraries are under the Apache License 2.0. That
    +license is incompatible with the LGPL v2.1 and the GPL v2, but not with
    +version 3 of those licenses. So to combine these libraries with FFmpeg, the
    +license version needs to be upgraded by passing `--enable-version3` to configure.
    +
    +### Incompatible libraries
    +
    +There are certain libraries you can combine with FFmpeg whose licenses are not
    +compatible with the GPL and/or the LGPL. If you wish to enable these
    +libraries, even in circumstances that their license may be incompatible, pass
    +`--enable-nonfree` to configure. But note that if you enable any of these
    +libraries the resulting binary will be under a complex license mix that is
    +more restrictive than the LGPL and that may result in additional obligations.
    +It is possible that these restrictions cause the resulting binary to be
    +unredistributable.
    +
    +The Fraunhofer FDK AAC and OpenSSL libraries are under licenses which are
    +incompatible with the GPLv2 and v3. To the best of our knowledge, they are
    +compatible with the LGPL.
    +
    +The NVENC library, while its header file is licensed under the compatible MIT
    +license, requires a proprietary binary blob at run time, and is deemed to be
    +incompatible with the GPL. We are not certain if it is compatible with the
    +LGPL, but we require `--enable-nonfree` even with LGPL configurations in case
    +it is not.
    +
    +
    +********************************************************************************
    +
    +libavcodec/arm/vp8dsp_armv6.S
    +
    +VP8 ARMv6 optimisations
    +
    +Copyright (c) 2010 Google Inc.
    +Copyright (c) 2010 Rob Clark <rob@ti.com>
    +Copyright (c) 2011 Mans Rullgard <mans@mansr.com>
    +
    +This file is part of FFmpeg.
    +
    +FFmpeg is free software; you can redistribute it and/or
    +modify it under the terms of the GNU Lesser General Public
    +License as published by the Free Software Foundation; either
    +version 2.1 of the License, or (at your option) any later version.
    +
    +FFmpeg is distributed in the hope that it will be useful,
    +but WITHOUT ANY WARRANTY; without even the implied warranty of
    +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    +Lesser General Public License for more details.
    +
    +You should have received a copy of the GNU Lesser General Public
    +License along with FFmpeg; if not, write to the Free Software
    +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
    +
    +This code was partially ported from libvpx, which uses this license:
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are
    +met:
    +
    +* Redistributions of source code must retain the above copyright
    +notice, this list of conditions and the following disclaimer.
    +
    +* Redistributions in binary form must reproduce the above copyright
    +notice, this list of conditions and the following disclaimer in
    +the documentation and/or other materials provided with the
    +distribution.
    +
    +* Neither the name of Google nor the names of its contributors may
    +be used to endorse or promote products derived from this software
    +without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +********************************************************************************
    +
    +libavcodec/x86/xvididct.asm
    +
    +XVID MPEG-4 VIDEO CODEC
    +
    + Conversion from gcc syntax to x264asm syntax with modifications
    + by Christophe Gisquet <christophe.gisquet@gmail.com>
    +
    + ===========     SSE2 inverse discrete cosine transform     ===========
    +
    + Copyright(C) 2003 Pascal Massimino <skal@planet-d.net>
    +
    + Conversion to gcc syntax with modifications
    + by Alexander Strange <astrange@ithinksw.com>
    +
    + Originally from dct/x86_asm/fdct_sse2_skal.asm in Xvid.
    +
    + Vertical pass is an implementation of the scheme:
    +  Loeffler C., Ligtenberg A., and Moschytz C.S.:
    +  Practical Fast 1D DCT Algorithm with Eleven Multiplications,
    +  Proc. ICASSP 1989, 988-991.
    +
    + Horizontal pass is a double 4x4 vector/matrix multiplication,
    + (see also Intel's Application Note 922:
    +  http://developer.intel.com/vtune/cbts/strmsimd/922down.htm
    +  Copyright (C) 1999 Intel Corporation)
    +
    + More details at http://skal.planet-d.net/coding/dct.html
    +
    + =======     MMX and XMM forward discrete cosine transform     =======
    +
    + Copyright(C) 2001 Peter Ross <pross@xvid.org>
    +
    + Originally provided by Intel at AP-922
    + http://developer.intel.com/vtune/cbts/strmsimd/922down.htm
    + (See more app notes at http://developer.intel.com/vtune/cbts/strmsimd/appnotes.htm)
    + but in a limited edition.
    + New macro implements a column part for precise iDCT
    + The routine precision now satisfies IEEE standard 1180-1990.
    +
    + Copyright(C) 2000-2001 Peter Gubanov <peter@elecard.net.ru>
    + Rounding trick Copyright(C) 2000 Michel Lespinasse <walken@zoy.org>
    +
    + http://www.elecard.com/peter/idct.html
    + http://www.linuxvideo.org/mpeg2dec/
    +
    + These examples contain code fragments for first stage iDCT 8x8
    + (for rows) and first stage DCT 8x8 (for columns)
    +
    + conversion to gcc syntax by Michael Niedermayer
    +
    + ======================================================================
    +
    + This file is part of FFmpeg.
    +
    + FFmpeg is free software; you can redistribute it and/or
    + modify it under the terms of the GNU Lesser General Public
    + License as published by the Free Software Foundation; either
    + version 2.1 of the License, or (at your option) any later version.
    +
    + FFmpeg is distributed in the hope that it will be useful,
    + but WITHOUT ANY WARRANTY; without even the implied warranty of
    + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    + Lesser General Public License for more details.
    +
    + You should have received a copy of the GNU Lesser General Public License
    + along with FFmpeg; if not, write to the Free Software Foundation,
    + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
    +
    +********************************************************************************
    +
    +libavcodec/arm/jrevdct_arm.S
    +
    +C-like prototype :
    +        void j_rev_dct_arm(DCTBLOCK data)
    +
    +   With DCTBLOCK being a pointer to an array of 64 'signed shorts'
    +
    +   Copyright (c) 2001 Lionel Ulmer (lionel.ulmer@free.fr / bbrox@bbrox.org)
    +
    +   Permission is hereby granted, free of charge, to any person obtaining a copy
    +   of this software and associated documentation files (the "Software"), to deal
    +   in the Software without restriction, including without limitation the rights
    +   to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    +   copies of the Software, and to permit persons to whom the Software is
    +   furnished to do so, subject to the following conditions:
    +
    +   The above copyright notice and this permission notice shall be included in
    +   all copies or substantial portions of the Software.
    +
    +   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +   IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
    +   COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
    +   IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
    +   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +
    +********************************************************************************
    +
    +libswresample/version.h
    +
    +Version macros.
    +
    +This file is part of libswresample
    +
    +libswresample is free software; you can redistribute it and/or
    +modify it under the terms of the GNU Lesser General Public
    +License as published by the Free Software Foundation; either
    +version 2.1 of the License, or (at your option) any later version.
    +
    +libswresample is distributed in the hope that it will be useful,
    +but WITHOUT ANY WARRANTY; without even the implied warranty of
    +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    +Lesser General Public License for more details.
    +
    +You should have received a copy of the GNU Lesser General Public
    +License along with libswresample; if not, write to the Free Software
    +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
    +
    +********************************************************************************
    +
    +libavcodec/mips/amrwbdec_mips.c
    +
    +Copyright (c) 2012
    +MIPS Technologies, Inc., California.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +notice, this list of conditions and the following disclaimer in the
    +documentation and/or other materials provided with the distribution.
    +3. Neither the name of the MIPS Technologies, Inc., nor the names of its
    +contributors may be used to endorse or promote products derived from
    +this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE MIPS TECHNOLOGIES, INC. ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE MIPS TECHNOLOGIES, INC. BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +Author:  Nedeljko Babic (nbabic@mips.com)
    +
    +This file is part of FFmpeg.
    +
    +FFmpeg is free software; you can redistribute it and/or
    +modify it under the terms of the GNU Lesser General Public
    +License as published by the Free Software Foundation; either
    +version 2.1 of the License, or (at your option) any later version.
    +
    +FFmpeg is distributed in the hope that it will be useful,
    +but WITHOUT ANY WARRANTY; without even the implied warranty of
    +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    +Lesser General Public License for more details.
    +
    +You should have received a copy of the GNU Lesser General Public
    +License along with FFmpeg; if not, write to the Free Software
    +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
    +
    +********************************************************************************
    +
    +libavcodec/mips/celp_math_mips.c
    +
    +Copyright (c) 2012
    +MIPS Technologies, Inc., California.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +notice, this list of conditions and the following disclaimer in the
    +documentation and/or other materials provided with the distribution.
    +3. Neither the name of the MIPS Technologies, Inc., nor the names of its
    +contributors may be used to endorse or promote products derived from
    +this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE MIPS TECHNOLOGIES, INC. ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE MIPS TECHNOLOGIES, INC. BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +Author:  Nedeljko Babic (nbabic@mips.com)
    +
    +Math operations optimized for MIPS
    +
    +This file is part of FFmpeg.
    +
    +FFmpeg is free software; you can redistribute it and/or
    +modify it under the terms of the GNU Lesser General Public
    +License as published by the Free Software Foundation; either
    +version 2.1 of the License, or (at your option) any later version.
    +
    +FFmpeg is distributed in the hope that it will be useful,
    +but WITHOUT ANY WARRANTY; without even the implied warranty of
    +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    +Lesser General Public License for more details.
    +
    +You should have received a copy of the GNU Lesser General Public
    +License along with FFmpeg; if not, write to the Free Software
    +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
    +
    +********************************************************************************
    +
    +libavformat/oggparsetheora.c
    +
    +Copyright (C) 2005  Matthieu CASTET, Alex Beregszaszi
    +
    +Permission is hereby granted, free of charge, to any person
    +obtaining a copy of this software and associated documentation
    +files (the "Software"), to deal in the Software without
    +restriction, including without limitation the rights to use, copy,
    +modify, merge, publish, distribute, sublicense, and/or sell copies
    +of the Software, and to permit persons to whom the Software is
    +furnished to do so, subject to the following conditions:
    +
    +The above copyright notice and this permission notice shall be
    +included in all copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
    +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
    +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
    +DEALINGS IN THE SOFTWARE.
    +
    +********************************************************************************
    +
    +libavcodec/mips/fft_mips.c
    +
    +Copyright (c) 2012
    +MIPS Technologies, Inc., California.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +notice, this list of conditions and the following disclaimer in the
    +documentation and/or other materials provided with the distribution.
    +3. Neither the name of the MIPS Technologies, Inc., nor the names of its
    +contributors may be used to endorse or promote products derived from
    +this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE MIPS TECHNOLOGIES, INC. ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE MIPS TECHNOLOGIES, INC. BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +Author:  Stanislav Ocovaj (socovaj@mips.com)
    +Author:  Zoran Lukic (zoranl@mips.com)
    +
    +Optimized MDCT/IMDCT and FFT transforms
    +
    +This file is part of FFmpeg.
    +
    +FFmpeg is free software; you can redistribute it and/or
    +modify it under the terms of the GNU Lesser General Public
    +License as published by the Free Software Foundation; either
    +version 2.1 of the License, or (at your option) any later version.
    +
    +FFmpeg is distributed in the hope that it will be useful,
    +but WITHOUT ANY WARRANTY; without even the implied warranty of
    +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    +Lesser General Public License for more details.
    +
    +You should have received a copy of the GNU Lesser General Public
    +License along with FFmpeg; if not, write to the Free Software
    +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
    +
    +********************************************************************************
    +
    +libavcodec/mips/acelp_filters_mips.c
    +
    +Copyright (c) 2012
    +MIPS Technologies, Inc., California.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +notice, this list of conditions and the following disclaimer in the
    +documentation and/or other materials provided with the distribution.
    +3. Neither the name of the MIPS Technologies, Inc., nor the names of its
    +contributors may be used to endorse or promote products derived from
    +this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE MIPS TECHNOLOGIES, INC. ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE MIPS TECHNOLOGIES, INC. BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +Author:  Nedeljko Babic (nbabic@mips.com)
    +
    +various filters for ACELP-based codecs optimized for MIPS
    +
    +This file is part of FFmpeg.
    +
    +FFmpeg is free software; you can redistribute it and/or
    +modify it under the terms of the GNU Lesser General Public
    +License as published by the Free Software Foundation; either
    +version 2.1 of the License, or (at your option) any later version.
    +
    +FFmpeg is distributed in the hope that it will be useful,
    +but WITHOUT ANY WARRANTY; without even the implied warranty of
    +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    +Lesser General Public License for more details.
    +
    +You should have received a copy of the GNU Lesser General Public
    +License along with FFmpeg; if not, write to the Free Software
    +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
    +
    +********************************************************************************
    +
    +libavcodec/mips/mpegaudiodsp_mips_float.c
    +
    +Copyright (c) 2012
    +MIPS Technologies, Inc., California.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +notice, this list of conditions and the following disclaimer in the
    +documentation and/or other materials provided with the distribution.
    +3. Neither the name of the MIPS Technologies, Inc., nor the names of its
    +contributors may be used to endorse or promote products derived from
    +this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE MIPS TECHNOLOGIES, INC. ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE MIPS TECHNOLOGIES, INC. BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +Author:  Bojan Zivkovic (bojan@mips.com)
    +
    +MPEG Audio decoder optimized for MIPS floating-point architecture
    +
    +This file is part of FFmpeg.
    +
    +FFmpeg is free software; you can redistribute it and/or
    +modify it under the terms of the GNU Lesser General Public
    +License as published by the Free Software Foundation; either
    +version 2.1 of the License, or (at your option) any later version.
    +
    +FFmpeg is distributed in the hope that it will be useful,
    +but WITHOUT ANY WARRANTY; without even the implied warranty of
    +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    +Lesser General Public License for more details.
    +
    +You should have received a copy of the GNU Lesser General Public
    +License along with FFmpeg; if not, write to the Free Software
    +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
    +
    +********************************************************************************
    +
    +libavcodec/mips/acelp_vectors_mips.c
    +
    +Copyright (c) 2012
    +MIPS Technologies, Inc., California.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +notice, this list of conditions and the following disclaimer in the
    +documentation and/or other materials provided with the distribution.
    +3. Neither the name of the MIPS Technologies, Inc., nor the names of its
    +contributors may be used to endorse or promote products derived from
    +this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE MIPS TECHNOLOGIES, INC. ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE MIPS TECHNOLOGIES, INC. BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +Author:  Nedeljko Babic (nbabic@mips.com)
    +
    +adaptive and fixed codebook vector operations for ACELP-based codecs
    +optimized for MIPS
    +
    +This file is part of FFmpeg.
    +
    +FFmpeg is free software; you can redistribute it and/or
    +modify it under the terms of the GNU Lesser General Public
    +License as published by the Free Software Foundation; either
    +version 2.1 of the License, or (at your option) any later version.
    +
    +FFmpeg is distributed in the hope that it will be useful,
    +but WITHOUT ANY WARRANTY; without even the implied warranty of
    +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    +Lesser General Public License for more details.
    +
    +You should have received a copy of the GNU Lesser General Public
    +License along with FFmpeg; if not, write to the Free Software
    +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
    +
    +********************************************************************************
    +
    +libavcodec/mips/celp_filters_mips.c
    +
    +Copyright (c) 2012
    +MIPS Technologies, Inc., California.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +notice, this list of conditions and the following disclaimer in the
    +documentation and/or other materials provided with the distribution.
    +3. Neither the name of the MIPS Technologies, Inc., nor the names of its
    +contributors may be used to endorse or promote products derived from
    +this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE MIPS TECHNOLOGIES, INC. ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE MIPS TECHNOLOGIES, INC. BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +Author:  Nedeljko Babic (nbabic@mips.com)
    +
    +various filters for CELP-based codecs optimized for MIPS
    +
    +This file is part of FFmpeg.
    +
    +FFmpeg is free software; you can redistribute it and/or
    +modify it under the terms of the GNU Lesser General Public
    +License as published by the Free Software Foundation; either
    +version 2.1 of the License, or (at your option) any later version.
    +
    +FFmpeg is distributed in the hope that it will be useful,
    +but WITHOUT ANY WARRANTY; without even the implied warranty of
    +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    +Lesser General Public License for more details.
    +
    +You should have received a copy of the GNU Lesser General Public
    +License along with FFmpeg; if not, write to the Free Software
    +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
    +
    +********************************************************************************
    +
    +libswresample/swresample.h
    +
    +Copyright (C) 2011-2013 Michael Niedermayer (michaelni@gmx.at)
    +
    +This file is part of libswresample
    +
    +libswresample is free software; you can redistribute it and/or
    +modify it under the terms of the GNU Lesser General Public
    +License as published by the Free Software Foundation; either
    +version 2.1 of the License, or (at your option) any later version.
    +
    +libswresample is distributed in the hope that it will be useful,
    +but WITHOUT ANY WARRANTY; without even the implied warranty of
    +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    +Lesser General Public License for more details.
    +
    +You should have received a copy of the GNU Lesser General Public
    +License along with libswresample; if not, write to the Free Software
    +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
    +
    +********************************************************************************
    +
    +libavcodec/jfdctfst.c
    +libavcodec/jfdctint_template.c
    +libavcodec/jrevdct.c
    +
    +This file is part of the Independent JPEG Group's software.
    +
    +The authors make NO WARRANTY or representation, either express or implied,
    +with respect to this software, its quality, accuracy, merchantability, or
    +fitness for a particular purpose.  This software is provided "AS IS", and
    +you, its user, assume the entire risk as to its quality and accuracy.
    +
    +This software is copyright (C) 1994-1996, Thomas G. Lane.
    +All Rights Reserved except as specified below.
    +
    +Permission is hereby granted to use, copy, modify, and distribute this
    +software (or portions thereof) for any purpose, without fee, subject to
    +these conditions:
    +(1) If any part of the source code for this software is distributed, then
    +this README file must be included, with this copyright and no-warranty
    +notice unaltered; and any additions, deletions, or changes to the original
    +files must be clearly indicated in accompanying documentation.
    +(2) If only executable code is distributed, then the accompanying
    +documentation must state that "this software is based in part on the work
    +of the Independent JPEG Group".
    +(3) Permission for use of this software is granted only if the user accepts
    +full responsibility for any undesirable consequences; the authors accept
    +NO LIABILITY for damages of any kind.
    +
    +These conditions apply to any software derived from or based on the IJG
    +code, not just to the unmodified library.  If you use our work, you ought
    +to acknowledge us.
    +
    +Permission is NOT granted for the use of any IJG author's name or company
    +name in advertising or publicity relating to this software or products
    +derived from it.  This software may be referred to only as "the Independent
    +JPEG Group's software".
    +
    +We specifically permit and encourage the use of this software as the basis
    +of commercial products, provided that all warranty or liability claims are
    +assumed by the product vendor.
    +
    +********************************************************************************
    +
    +libavcodec/fft_fixed_32.c
    +libavcodec/fft_init_table.c
    +libavcodec/fft_table.h
    +libavcodec/mdct_fixed_32.c
    +libavcodec/mips/aacdec_mips.c
    +libavcodec/mips/aacdec_mips.h
    +libavcodec/mips/aacpsdsp_mips.c
    +libavcodec/mips/aacsbr_mips.c
    +libavcodec/mips/aacsbr_mips.h
    +libavcodec/mips/amrwbdec_mips.h
    +libavcodec/mips/compute_antialias_fixed.h
    +libavcodec/mips/compute_antialias_float.h
    +libavcodec/mips/lsp_mips.h
    +libavcodec/mips/sbrdsp_mips.c
    +libavutil/fixed_dsp.c
    +libavutil/fixed_dsp.h
    +libavutil/mips/float_dsp_mips.c
    +libavutil/mips/libm_mips.h
    +libavutil/softfloat_tables.h
    +
    +Copyright (c) 2012
    +MIPS Technologies, Inc., California.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +notice, this list of conditions and the following disclaimer in the
    +documentation and/or other materials provided with the distribution.
    +3. Neither the name of the MIPS Technologies, Inc., nor the names of its
    +contributors may be used to endorse or promote products derived from
    +this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE MIPS TECHNOLOGIES, INC. ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE MIPS TECHNOLOGIES, INC. BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +Authors:
    +Branimir Vasic   (bvasic@mips.com)
    +Darko Laus       (darko@mips.com)
    +Djordje Pesut    (djordje@mips.com)
    +Goran Cordasic   (goran@mips.com)
    +Nedeljko Babic   (nedeljko.babic imgtec com)
    +Mirjana Vulin    (mvulin@mips.com)
    +Stanislav Ocovaj (socovaj@mips.com)
    +Zoran Lukic      (zoranl@mips.com)
    +
    +********************************************************************************
    +
    +libavformat/oggdec.c
    +libavformat/oggdec.h
    +libavformat/oggparseogm.c
    +libavformat/oggparsevorbis.c
    +
    +Copyright (C) 2005  Michael Ahlberg, Måns Rullgård
    +
    +Permission is hereby granted, free of charge, to any person
    +obtaining a copy of this software and associated documentation
    +files (the "Software"), to deal in the Software without
    +restriction, including without limitation the rights to use, copy,
    +modify, merge, publish, distribute, sublicense, and/or sell copies
    +of the Software, and to permit persons to whom the Software is
    +furnished to do so, subject to the following conditions:
    +
    +The above copyright notice and this permission notice shall be
    +included in all copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
    +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
    +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
    +DEALINGS IN THE SOFTWARE.
    +
    +********************************************************************************
    +
    +                  GNU LESSER GENERAL PUBLIC LICENSE
    +                       Version 2.1, February 1999
    +
    + Copyright (C) 1991, 1999 Free Software Foundation, Inc.
    + 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
    + Everyone is permitted to copy and distribute verbatim copies
    + of this license document, but changing it is not allowed.
    +
    +[This is the first released version of the Lesser GPL.  It also counts
    + as the successor of the GNU Library Public License, version 2, hence
    + the version number 2.1.]
    +
    +                            Preamble
    +
    +  The licenses for most software are designed to take away your
    +freedom to share and change it.  By contrast, the GNU General Public
    +Licenses are intended to guarantee your freedom to share and change
    +free software--to make sure the software is free for all its users.
    +
    +  This license, the Lesser General Public License, applies to some
    +specially designated software packages--typically libraries--of the
    +Free Software Foundation and other authors who decide to use it.  You
    +can use it too, but we suggest you first think carefully about whether
    +this license or the ordinary General Public License is the better
    +strategy to use in any particular case, based on the explanations below.
    +
    +  When we speak of free software, we are referring to freedom of use,
    +not price.  Our General Public Licenses are designed to make sure that
    +you have the freedom to distribute copies of free software (and charge
    +for this service if you wish); that you receive source code or can get
    +it if you want it; that you can change the software and use pieces of
    +it in new free programs; and that you are informed that you can do
    +these things.
    +
    +  To protect your rights, we need to make restrictions that forbid
    +distributors to deny you these rights or to ask you to surrender these
    +rights.  These restrictions translate to certain responsibilities for
    +you if you distribute copies of the library or if you modify it.
    +
    +  For example, if you distribute copies of the library, whether gratis
    +or for a fee, you must give the recipients all the rights that we gave
    +you.  You must make sure that they, too, receive or can get the source
    +code.  If you link other code with the library, you must provide
    +complete object files to the recipients, so that they can relink them
    +with the library after making changes to the library and recompiling
    +it.  And you must show them these terms so they know their rights.
    +
    +  We protect your rights with a two-step method: (1) we copyright the
    +library, and (2) we offer you this license, which gives you legal
    +permission to copy, distribute and/or modify the library.
    +
    +  To protect each distributor, we want to make it very clear that
    +there is no warranty for the free library.  Also, if the library is
    +modified by someone else and passed on, the recipients should know
    +that what they have is not the original version, so that the original
    +author's reputation will not be affected by problems that might be
    +introduced by others.
    +
    +  Finally, software patents pose a constant threat to the existence of
    +any free program.  We wish to make sure that a company cannot
    +effectively restrict the users of a free program by obtaining a
    +restrictive license from a patent holder.  Therefore, we insist that
    +any patent license obtained for a version of the library must be
    +consistent with the full freedom of use specified in this license.
    +
    +  Most GNU software, including some libraries, is covered by the
    +ordinary GNU General Public License.  This license, the GNU Lesser
    +General Public License, applies to certain designated libraries, and
    +is quite different from the ordinary General Public License.  We use
    +this license for certain libraries in order to permit linking those
    +libraries into non-free programs.
    +
    +  When a program is linked with a library, whether statically or using
    +a shared library, the combination of the two is legally speaking a
    +combined work, a derivative of the original library.  The ordinary
    +General Public License therefore permits such linking only if the
    +entire combination fits its criteria of freedom.  The Lesser General
    +Public License permits more lax criteria for linking other code with
    +the library.
    +
    +  We call this license the "Lesser" General Public License because it
    +does Less to protect the user's freedom than the ordinary General
    +Public License.  It also provides other free software developers Less
    +of an advantage over competing non-free programs.  These disadvantages
    +are the reason we use the ordinary General Public License for many
    +libraries.  However, the Lesser license provides advantages in certain
    +special circumstances.
    +
    +  For example, on rare occasions, there may be a special need to
    +encourage the widest possible use of a certain library, so that it becomes
    +a de-facto standard.  To achieve this, non-free programs must be
    +allowed to use the library.  A more frequent case is that a free
    +library does the same job as widely used non-free libraries.  In this
    +case, there is little to gain by limiting the free library to free
    +software only, so we use the Lesser General Public License.
    +
    +  In other cases, permission to use a particular library in non-free
    +programs enables a greater number of people to use a large body of
    +free software.  For example, permission to use the GNU C Library in
    +non-free programs enables many more people to use the whole GNU
    +operating system, as well as its variant, the GNU/Linux operating
    +system.
    +
    +  Although the Lesser General Public License is Less protective of the
    +users' freedom, it does ensure that the user of a program that is
    +linked with the Library has the freedom and the wherewithal to run
    +that program using a modified version of the Library.
    +
    +  The precise terms and conditions for copying, distribution and
    +modification follow.  Pay close attention to the difference between a
    +"work based on the library" and a "work that uses the library".  The
    +former contains code derived from the library, whereas the latter must
    +be combined with the library in order to run.
    +
    +                  GNU LESSER GENERAL PUBLIC LICENSE
    +   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
    +
    +  0. This License Agreement applies to any software library or other
    +program which contains a notice placed by the copyright holder or
    +other authorized party saying it may be distributed under the terms of
    +this Lesser General Public License (also called "this License").
    +Each licensee is addressed as "you".
    +
    +  A "library" means a collection of software functions and/or data
    +prepared so as to be conveniently linked with application programs
    +(which use some of those functions and data) to form executables.
    +
    +  The "Library", below, refers to any such software library or work
    +which has been distributed under these terms.  A "work based on the
    +Library" means either the Library or any derivative work under
    +copyright law: that is to say, a work containing the Library or a
    +portion of it, either verbatim or with modifications and/or translated
    +straightforwardly into another language.  (Hereinafter, translation is
    +included without limitation in the term "modification".)
    +
    +  "Source code" for a work means the preferred form of the work for
    +making modifications to it.  For a library, complete source code means
    +all the source code for all modules it contains, plus any associated
    +interface definition files, plus the scripts used to control compilation
    +and installation of the library.
    +
    +  Activities other than copying, distribution and modification are not
    +covered by this License; they are outside its scope.  The act of
    +running a program using the Library is not restricted, and output from
    +such a program is covered only if its contents constitute a work based
    +on the Library (independent of the use of the Library in a tool for
    +writing it).  Whether that is true depends on what the Library does
    +and what the program that uses the Library does.
    +
    +  1. You may copy and distribute verbatim copies of the Library's
    +complete source code as you receive it, in any medium, provided that
    +you conspicuously and appropriately publish on each copy an
    +appropriate copyright notice and disclaimer of warranty; keep intact
    +all the notices that refer to this License and to the absence of any
    +warranty; and distribute a copy of this License along with the
    +Library.
    +
    +  You may charge a fee for the physical act of transferring a copy,
    +and you may at your option offer warranty protection in exchange for a
    +fee.
    +
    +  2. You may modify your copy or copies of the Library or any portion
    +of it, thus forming a work based on the Library, and copy and
    +distribute such modifications or work under the terms of Section 1
    +above, provided that you also meet all of these conditions:
    +
    +    a) The modified work must itself be a software library.
    +
    +    b) You must cause the files modified to carry prominent notices
    +    stating that you changed the files and the date of any change.
    +
    +    c) You must cause the whole of the work to be licensed at no
    +    charge to all third parties under the terms of this License.
    +
    +    d) If a facility in the modified Library refers to a function or a
    +    table of data to be supplied by an application program that uses
    +    the facility, other than as an argument passed when the facility
    +    is invoked, then you must make a good faith effort to ensure that,
    +    in the event an application does not supply such function or
    +    table, the facility still operates, and performs whatever part of
    +    its purpose remains meaningful.
    +
    +    (For example, a function in a library to compute square roots has
    +    a purpose that is entirely well-defined independent of the
    +    application.  Therefore, Subsection 2d requires that any
    +    application-supplied function or table used by this function must
    +    be optional: if the application does not supply it, the square
    +    root function must still compute square roots.)
    +
    +These requirements apply to the modified work as a whole.  If
    +identifiable sections of that work are not derived from the Library,
    +and can be reasonably considered independent and separate works in
    +themselves, then this License, and its terms, do not apply to those
    +sections when you distribute them as separate works.  But when you
    +distribute the same sections as part of a whole which is a work based
    +on the Library, the distribution of the whole must be on the terms of
    +this License, whose permissions for other licensees extend to the
    +entire whole, and thus to each and every part regardless of who wrote
    +it.
    +
    +Thus, it is not the intent of this section to claim rights or contest
    +your rights to work written entirely by you; rather, the intent is to
    +exercise the right to control the distribution of derivative or
    +collective works based on the Library.
    +
    +In addition, mere aggregation of another work not based on the Library
    +with the Library (or with a work based on the Library) on a volume of
    +a storage or distribution medium does not bring the other work under
    +the scope of this License.
    +
    +  3. You may opt to apply the terms of the ordinary GNU General Public
    +License instead of this License to a given copy of the Library.  To do
    +this, you must alter all the notices that refer to this License, so
    +that they refer to the ordinary GNU General Public License, version 2,
    +instead of to this License.  (If a newer version than version 2 of the
    +ordinary GNU General Public License has appeared, then you can specify
    +that version instead if you wish.)  Do not make any other change in
    +these notices.
    +
    +  Once this change is made in a given copy, it is irreversible for
    +that copy, so the ordinary GNU General Public License applies to all
    +subsequent copies and derivative works made from that copy.
    +
    +  This option is useful when you wish to copy part of the code of
    +the Library into a program that is not a library.
    +
    +  4. You may copy and distribute the Library (or a portion or
    +derivative of it, under Section 2) in object code or executable form
    +under the terms of Sections 1 and 2 above provided that you accompany
    +it with the complete corresponding machine-readable source code, which
    +must be distributed under the terms of Sections 1 and 2 above on a
    +medium customarily used for software interchange.
    +
    +  If distribution of object code is made by offering access to copy
    +from a designated place, then offering equivalent access to copy the
    +source code from the same place satisfies the requirement to
    +distribute the source code, even though third parties are not
    +compelled to copy the source along with the object code.
    +
    +  5. A program that contains no derivative of any portion of the
    +Library, but is designed to work with the Library by being compiled or
    +linked with it, is called a "work that uses the Library".  Such a
    +work, in isolation, is not a derivative work of the Library, and
    +therefore falls outside the scope of this License.
    +
    +  However, linking a "work that uses the Library" with the Library
    +creates an executable that is a derivative of the Library (because it
    +contains portions of the Library), rather than a "work that uses the
    +library".  The executable is therefore covered by this License.
    +Section 6 states terms for distribution of such executables.
    +
    +  When a "work that uses the Library" uses material from a header file
    +that is part of the Library, the object code for the work may be a
    +derivative work of the Library even though the source code is not.
    +Whether this is true is especially significant if the work can be
    +linked without the Library, or if the work is itself a library.  The
    +threshold for this to be true is not precisely defined by law.
    +
    +  If such an object file uses only numerical parameters, data
    +structure layouts and accessors, and small macros and small inline
    +functions (ten lines or less in length), then the use of the object
    +file is unrestricted, regardless of whether it is legally a derivative
    +work.  (Executables containing this object code plus portions of the
    +Library will still fall under Section 6.)
    +
    +  Otherwise, if the work is a derivative of the Library, you may
    +distribute the object code for the work under the terms of Section 6.
    +Any executables containing that work also fall under Section 6,
    +whether or not they are linked directly with the Library itself.
    +
    +  6. As an exception to the Sections above, you may also combine or
    +link a "work that uses the Library" with the Library to produce a
    +work containing portions of the Library, and distribute that work
    +under terms of your choice, provided that the terms permit
    +modification of the work for the customer's own use and reverse
    +engineering for debugging such modifications.
    +
    +  You must give prominent notice with each copy of the work that the
    +Library is used in it and that the Library and its use are covered by
    +this License.  You must supply a copy of this License.  If the work
    +during execution displays copyright notices, you must include the
    +copyright notice for the Library among them, as well as a reference
    +directing the user to the copy of this License.  Also, you must do one
    +of these things:
    +
    +    a) Accompany the work with the complete corresponding
    +    machine-readable source code for the Library including whatever
    +    changes were used in the work (which must be distributed under
    +    Sections 1 and 2 above); and, if the work is an executable linked
    +    with the Library, with the complete machine-readable "work that
    +    uses the Library", as object code and/or source code, so that the
    +    user can modify the Library and then relink to produce a modified
    +    executable containing the modified Library.  (It is understood
    +    that the user who changes the contents of definitions files in the
    +    Library will not necessarily be able to recompile the application
    +    to use the modified definitions.)
    +
    +    b) Use a suitable shared library mechanism for linking with the
    +    Library.  A suitable mechanism is one that (1) uses at run time a
    +    copy of the library already present on the user's computer system,
    +    rather than copying library functions into the executable, and (2)
    +    will operate properly with a modified version of the library, if
    +    the user installs one, as long as the modified version is
    +    interface-compatible with the version that the work was made with.
    +
    +    c) Accompany the work with a written offer, valid for at
    +    least three years, to give the same user the materials
    +    specified in Subsection 6a, above, for a charge no more
    +    than the cost of performing this distribution.
    +
    +    d) If distribution of the work is made by offering access to copy
    +    from a designated place, offer equivalent access to copy the above
    +    specified materials from the same place.
    +
    +    e) Verify that the user has already received a copy of these
    +    materials or that you have already sent this user a copy.
    +
    +  For an executable, the required form of the "work that uses the
    +Library" must include any data and utility programs needed for
    +reproducing the executable from it.  However, as a special exception,
    +the materials to be distributed need not include anything that is
    +normally distributed (in either source or binary form) with the major
    +components (compiler, kernel, and so on) of the operating system on
    +which the executable runs, unless that component itself accompanies
    +the executable.
    +
    +  It may happen that this requirement contradicts the license
    +restrictions of other proprietary libraries that do not normally
    +accompany the operating system.  Such a contradiction means you cannot
    +use both them and the Library together in an executable that you
    +distribute.
    +
    +  7. You may place library facilities that are a work based on the
    +Library side-by-side in a single library together with other library
    +facilities not covered by this License, and distribute such a combined
    +library, provided that the separate distribution of the work based on
    +the Library and of the other library facilities is otherwise
    +permitted, and provided that you do these two things:
    +
    +    a) Accompany the combined library with a copy of the same work
    +    based on the Library, uncombined with any other library
    +    facilities.  This must be distributed under the terms of the
    +    Sections above.
    +
    +    b) Give prominent notice with the combined library of the fact
    +    that part of it is a work based on the Library, and explaining
    +    where to find the accompanying uncombined form of the same work.
    +
    +  8. You may not copy, modify, sublicense, link with, or distribute
    +the Library except as expressly provided under this License.  Any
    +attempt otherwise to copy, modify, sublicense, link with, or
    +distribute the Library is void, and will automatically terminate your
    +rights under this License.  However, parties who have received copies,
    +or rights, from you under this License will not have their licenses
    +terminated so long as such parties remain in full compliance.
    +
    +  9. You are not required to accept this License, since you have not
    +signed it.  However, nothing else grants you permission to modify or
    +distribute the Library or its derivative works.  These actions are
    +prohibited by law if you do not accept this License.  Therefore, by
    +modifying or distributing the Library (or any work based on the
    +Library), you indicate your acceptance of this License to do so, and
    +all its terms and conditions for copying, distributing or modifying
    +the Library or works based on it.
    +
    +  10. Each time you redistribute the Library (or any work based on the
    +Library), the recipient automatically receives a license from the
    +original licensor to copy, distribute, link with or modify the Library
    +subject to these terms and conditions.  You may not impose any further
    +restrictions on the recipients' exercise of the rights granted herein.
    +You are not responsible for enforcing compliance by third parties with
    +this License.
    +
    +  11. If, as a consequence of a court judgment or allegation of patent
    +infringement or for any other reason (not limited to patent issues),
    +conditions are imposed on you (whether by court order, agreement or
    +otherwise) that contradict the conditions of this License, they do not
    +excuse you from the conditions of this License.  If you cannot
    +distribute so as to satisfy simultaneously your obligations under this
    +License and any other pertinent obligations, then as a consequence you
    +may not distribute the Library at all.  For example, if a patent
    +license would not permit royalty-free redistribution of the Library by
    +all those who receive copies directly or indirectly through you, then
    +the only way you could satisfy both it and this License would be to
    +refrain entirely from distribution of the Library.
    +
    +If any portion of this section is held invalid or unenforceable under any
    +particular circumstance, the balance of the section is intended to apply,
    +and the section as a whole is intended to apply in other circumstances.
    +
    +It is not the purpose of this section to induce you to infringe any
    +patents or other property right claims or to contest validity of any
    +such claims; this section has the sole purpose of protecting the
    +integrity of the free software distribution system which is
    +implemented by public license practices.  Many people have made
    +generous contributions to the wide range of software distributed
    +through that system in reliance on consistent application of that
    +system; it is up to the author/donor to decide if he or she is willing
    +to distribute software through any other system and a licensee cannot
    +impose that choice.
    +
    +This section is intended to make thoroughly clear what is believed to
    +be a consequence of the rest of this License.
    +
    +  12. If the distribution and/or use of the Library is restricted in
    +certain countries either by patents or by copyrighted interfaces, the
    +original copyright holder who places the Library under this License may add
    +an explicit geographical distribution limitation excluding those countries,
    +so that distribution is permitted only in or among countries not thus
    +excluded.  In such case, this License incorporates the limitation as if
    +written in the body of this License.
    +
    +  13. The Free Software Foundation may publish revised and/or new
    +versions of the Lesser General Public License from time to time.
    +Such new versions will be similar in spirit to the present version,
    +but may differ in detail to address new problems or concerns.
    +
    +Each version is given a distinguishing version number.  If the Library
    +specifies a version number of this License which applies to it and
    +"any later version", you have the option of following the terms and
    +conditions either of that version or of any later version published by
    +the Free Software Foundation.  If the Library does not specify a
    +license version number, you may choose any version ever published by
    +the Free Software Foundation.
    +
    +  14. If you wish to incorporate parts of the Library into other free
    +programs whose distribution conditions are incompatible with these,
    +write to the author to ask for permission.  For software which is
    +copyrighted by the Free Software Foundation, write to the Free
    +Software Foundation; we sometimes make exceptions for this.  Our
    +decision will be guided by the two goals of preserving the free status
    +of all derivatives of our free software and of promoting the sharing
    +and reuse of software generally.
    +
    +                            NO WARRANTY
    +
    +  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
    +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
    +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
    +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
    +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    +PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
    +LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
    +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
    +
    +  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
    +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
    +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
    +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
    +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
    +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
    +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
    +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
    +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
    +DAMAGES.
    +
    +                     END OF TERMS AND CONDITIONS
    +
    +           How to Apply These Terms to Your New Libraries
    +
    +  If you develop a new library, and you want it to be of the greatest
    +possible use to the public, we recommend making it free software that
    +everyone can redistribute and change.  You can do so by permitting
    +redistribution under these terms (or, alternatively, under the terms of the
    +ordinary General Public License).
    +
    +  To apply these terms, attach the following notices to the library.  It is
    +safest to attach them to the start of each source file to most effectively
    +convey the exclusion of warranty; and each file should have at least the
    +"copyright" line and a pointer to where the full notice is found.
    +
    +    <one line to give the library's name and a brief idea of what it does.>
    +    Copyright (C) <year>  <name of author>
    +
    +    This library is free software; you can redistribute it and/or
    +    modify it under the terms of the GNU Lesser General Public
    +    License as published by the Free Software Foundation; either
    +    version 2.1 of the License, or (at your option) any later version.
    +
    +    This library is distributed in the hope that it will be useful,
    +    but WITHOUT ANY WARRANTY; without even the implied warranty of
    +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    +    Lesser General Public License for more details.
    +
    +    You should have received a copy of the GNU Lesser General Public
    +    License along with this library; if not, write to the Free Software
    +    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
    +
    +Also add information on how to contact you by electronic and paper mail.
    +
    +You should also get your employer (if you work as a programmer) or your
    +school, if any, to sign a "copyright disclaimer" for the library, if
    +necessary.  Here is a sample; alter the names:
    +
    +  Yoyodyne, Inc., hereby disclaims all copyright interest in the
    +  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
    +
    +  <signature of Ty Coon>, 1 April 1990
    +  Ty Coon, President of Vice
    +
    +That's all there is to it!
    +
    +
    + +
    +Fiat-Crypto: Synthesizing Correct-by-Construction Code for Cryptographic Primitives +homepage + + +
    +
    The MIT License (MIT)
    +
    +Copyright (c) 2015-2016 the fiat-crypto authors (see
    +https://github.com/mit-plv/fiat-crypto/blob/master/AUTHORS).
    +
    +Permission is hereby granted, free of charge, to any person obtaining a copy
    +of this software and associated documentation files (the "Software"), to deal
    +in the Software without restriction, including without limitation the rights
    +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    +copies of the Software, and to permit persons to whom the Software is
    +furnished to do so, subject to the following conditions:
    +
    +The above copyright notice and this permission notice shall be included in all
    +copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
    +SOFTWARE.
    +
    +
    +
    + +
    +fips181 +homepage + + +
    +
    Copyright (c) 1999, 2000, 2001, 2002
    +Adel I. Mirzazhanov. All rights reserved
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    + 
    +     1.Redistributions of source code must retain the above copyright notice,
    +       this list of conditions and the following disclaimer. 
    +     2.Redistributions in binary form must reproduce the above copyright
    +       notice, this list of conditions and the following disclaimer in the
    +       documentation and/or other materials provided with the distribution. 
    +     3.The name of the author may not be used to endorse or promote products
    +       derived from this software without specific prior written permission. 
    + 		  
    +THIS SOFTWARE IS PROVIDED BY THE AUTHOR  ``AS IS'' AND ANY EXPRESS
    +OR IMPLIED WARRANTIES, INCLUDING,  BUT NOT LIMITED TO, THE IMPLIED
    +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN  NO  EVENT  SHALL THE AUTHOR BE LIABLE FOR ANY
    +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO,  PROCUREMENT OF SUBSTITUTE
    +GOODS OR SERVICES;  LOSS OF USE,  DATA,  OR  PROFITS;  OR BUSINESS
    +INTERRUPTION)  HOWEVER  CAUSED  AND  ON  ANY  THEORY OF LIABILITY,
    +WHETHER  IN  CONTRACT,   STRICT   LIABILITY,  OR  TORT  (INCLUDING
    +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +		  
    +
    +
    + +
    +flac +homepage + + +
    +
    Copyright (C) 2000-2009  Josh Coalson
    +Copyright (C) 2011-2014  Xiph.Org Foundation
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +
    +- Redistributions of source code must retain the above copyright
    +notice, this list of conditions and the following disclaimer.
    +
    +- Redistributions in binary form must reproduce the above copyright
    +notice, this list of conditions and the following disclaimer in the
    +documentation and/or other materials provided with the distribution.
    +
    +- Neither the name of the Xiph.org Foundation nor the names of its
    +contributors may be used to endorse or promote products derived from
    +this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
    +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
    +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
    +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
    +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
    +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
    +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +FlatBuffers +homepage + + +
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright 2014 Google Inc.
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +
    + +
    +Flot Javascript/JQuery library for creating graphs +homepage + + +
    +
    Copyright (c) 2007-2013 IOLA and Ole Laursen
    +
    +Permission is hereby granted, free of charge, to any person
    +obtaining a copy of this software and associated documentation
    +files (the "Software"), to deal in the Software without
    +restriction, including without limitation the rights to use,
    +copy, modify, merge, publish, distribute, sublicense, and/or sell
    +copies of the Software, and to permit persons to whom the
    +Software is furnished to do so, subject to the following
    +conditions:
    +
    +The above copyright notice and this permission notice shall be
    +included in all copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
    +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
    +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
    +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
    +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
    +OTHER DEALINGS IN THE SOFTWARE.
    +
    +
    +
    + +
    +FreeType +homepage + + +
    +
                        The FreeType Project LICENSE
    +                    ----------------------------
    +
    +                            2006-Jan-27
    +
    +                    Copyright 1996-2002, 2006 by
    +          David Turner, Robert Wilhelm, and Werner Lemberg
    +
    +
    +
    +Introduction
    +============
    +
    +  The FreeType  Project is distributed in  several archive packages;
    +  some of them may contain, in addition to the FreeType font engine,
    +  various tools and  contributions which rely on, or  relate to, the
    +  FreeType Project.
    +
    +  This  license applies  to all  files found  in such  packages, and
    +  which do not  fall under their own explicit  license.  The license
    +  affects  thus  the  FreeType   font  engine,  the  test  programs,
    +  documentation and makefiles, at the very least.
    +
    +  This  license   was  inspired  by  the  BSD,   Artistic,  and  IJG
    +  (Independent JPEG  Group) licenses, which  all encourage inclusion
    +  and  use of  free  software in  commercial  and freeware  products
    +  alike.  As a consequence, its main points are that:
    +
    +    o We don't promise that this software works. However, we will be
    +      interested in any kind of bug reports. (`as is' distribution)
    +
    +    o You can  use this software for whatever you  want, in parts or
    +      full form, without having to pay us. (`royalty-free' usage)
    +
    +    o You may not pretend that  you wrote this software.  If you use
    +      it, or  only parts of it,  in a program,  you must acknowledge
    +      somewhere  in  your  documentation  that  you  have  used  the
    +      FreeType code. (`credits')
    +
    +  We  specifically  permit  and  encourage  the  inclusion  of  this
    +  software, with  or without modifications,  in commercial products.
    +  We  disclaim  all warranties  covering  The  FreeType Project  and
    +  assume no liability related to The FreeType Project.
    +
    +
    +  Finally,  many  people  asked  us  for  a  preferred  form  for  a
    +  credit/disclaimer to use in compliance with this license.  We thus
    +  encourage you to use the following text:
    +
    +   """
    +    Portions of this software are copyright © <year> The FreeType
    +    Project (www.freetype.org).  All rights reserved.
    +   """
    +
    +  Please replace <year> with the value from the FreeType version you
    +  actually use.
    +
    +
    +Legal Terms
    +===========
    +
    +0. Definitions
    +--------------
    +
    +  Throughout this license,  the terms `package', `FreeType Project',
    +  and  `FreeType  archive' refer  to  the  set  of files  originally
    +  distributed  by the  authors  (David Turner,  Robert Wilhelm,  and
    +  Werner Lemberg) as the `FreeType Project', be they named as alpha,
    +  beta or final release.
    +
    +  `You' refers to  the licensee, or person using  the project, where
    +  `using' is a generic term including compiling the project's source
    +  code as  well as linking it  to form a  `program' or `executable'.
    +  This  program is  referred to  as  `a program  using the  FreeType
    +  engine'.
    +
    +  This  license applies  to all  files distributed  in  the original
    +  FreeType  Project,   including  all  source   code,  binaries  and
    +  documentation,  unless  otherwise  stated   in  the  file  in  its
    +  original, unmodified form as  distributed in the original archive.
    +  If you are  unsure whether or not a particular  file is covered by
    +  this license, you must contact us to verify this.
    +
    +  The FreeType  Project is copyright (C) 1996-2000  by David Turner,
    +  Robert Wilhelm, and Werner Lemberg.  All rights reserved except as
    +  specified below.
    +
    +1. No Warranty
    +--------------
    +
    +  THE FREETYPE PROJECT  IS PROVIDED `AS IS' WITHOUT  WARRANTY OF ANY
    +  KIND, EITHER  EXPRESS OR IMPLIED,  INCLUDING, BUT NOT  LIMITED TO,
    +  WARRANTIES  OF  MERCHANTABILITY   AND  FITNESS  FOR  A  PARTICULAR
    +  PURPOSE.  IN NO EVENT WILL ANY OF THE AUTHORS OR COPYRIGHT HOLDERS
    +  BE LIABLE  FOR ANY DAMAGES CAUSED  BY THE USE OR  THE INABILITY TO
    +  USE, OF THE FREETYPE PROJECT.
    +
    +2. Redistribution
    +-----------------
    +
    +  This  license  grants  a  worldwide, royalty-free,  perpetual  and
    +  irrevocable right  and license to use,  execute, perform, compile,
    +  display,  copy,   create  derivative  works   of,  distribute  and
    +  sublicense the  FreeType Project (in  both source and  object code
    +  forms)  and  derivative works  thereof  for  any  purpose; and  to
    +  authorize others  to exercise  some or all  of the  rights granted
    +  herein, subject to the following conditions:
    +
    +    o Redistribution of  source code  must retain this  license file
    +      (`FTL.TXT') unaltered; any  additions, deletions or changes to
    +      the original  files must be clearly  indicated in accompanying
    +      documentation.   The  copyright   notices  of  the  unaltered,
    +      original  files must  be  preserved in  all  copies of  source
    +      files.
    +
    +    o Redistribution in binary form must provide a  disclaimer  that
    +      states  that  the software is based in part of the work of the
    +      FreeType Team,  in  the  distribution  documentation.  We also
    +      encourage you to put an URL to the FreeType web page  in  your
    +      documentation, though this isn't mandatory.
    +
    +  These conditions  apply to any  software derived from or  based on
    +  the FreeType Project,  not just the unmodified files.   If you use
    +  our work, you  must acknowledge us.  However, no  fee need be paid
    +  to us.
    +
    +3. Advertising
    +--------------
    +
    +  Neither the  FreeType authors and  contributors nor you  shall use
    +  the name of the  other for commercial, advertising, or promotional
    +  purposes without specific prior written permission.
    +
    +  We suggest,  but do not require, that  you use one or  more of the
    +  following phrases to refer  to this software in your documentation
    +  or advertising  materials: `FreeType Project',  `FreeType Engine',
    +  `FreeType library', or `FreeType Distribution'.
    +
    +  As  you have  not signed  this license,  you are  not  required to
    +  accept  it.   However,  as  the FreeType  Project  is  copyrighted
    +  material, only  this license, or  another one contracted  with the
    +  authors, grants you  the right to use, distribute,  and modify it.
    +  Therefore,  by  using,  distributing,  or modifying  the  FreeType
    +  Project, you indicate that you understand and accept all the terms
    +  of this license.
    +
    +4. Contacts
    +-----------
    +
    +  There are two mailing lists related to FreeType:
    +
    +    o freetype@nongnu.org
    +
    +      Discusses general use and applications of FreeType, as well as
    +      future and  wanted additions to the  library and distribution.
    +      If  you are looking  for support,  start in  this list  if you
    +      haven't found anything to help you in the documentation.
    +
    +    o freetype-devel@nongnu.org
    +
    +      Discusses bugs,  as well  as engine internals,  design issues,
    +      specific licenses, porting, etc.
    +
    +  Our home page can be found at
    +
    +    https://www.freetype.org
    +
    +
    +--- end of FTL.TXT ---
    +
    +
    +
    + +
    +gestures +homepage + + +
    +
    gestures/LICENSE
    +
    +// Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
    +//
    +// Redistribution and use in source and binary forms, with or without
    +// modification, are permitted provided that the following conditions are
    +// met:
    +//
    +//    * Redistributions of source code must retain the above copyright
    +// notice, this list of conditions and the following disclaimer.
    +//    * Redistributions in binary form must reproduce the above
    +// copyright notice, this list of conditions and the following disclaimer
    +// in the documentation and/or other materials provided with the
    +// distribution.
    +//    * Neither the name of Google Inc. nor the names of its
    +// contributors may be used to endorse or promote products derived from
    +// this software without specific prior written permission.
    +//
    +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +GifPlayer Animated GIF Library +homepage + + +
    +
                                     Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +
    + +
    +Google Cache Invalidation API +homepage + + +
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +
    + +
    +Google fork of Khronos reference front-end for GLSL and ESSL +homepage + + +
    +
    Copyright (c) 2015-2016 The Khronos Group Inc.
    +
    +Permission is hereby granted, free of charge, to any person obtaining a
    +copy of this software and/or associated documentation files (the
    +"Materials"), to deal in the Materials without restriction, including
    +without limitation the rights to use, copy, modify, merge, publish,
    +distribute, sublicense, and/or sell copies of the Materials, and to
    +permit persons to whom the Materials are furnished to do so, subject to
    +the following conditions:
    +
    +The above copyright notice and this permission notice shall be included
    +in all copies or substantial portions of the Materials.
    +
    +MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS
    +KHRONOS STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS
    +SPECIFICATIONS AND HEADER INFORMATION ARE LOCATED AT
    +   https://www.khronos.org/registry/
    +
    +THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
    +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
    +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
    +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
    +MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
    +
    +
    +
    + +
    +Google Input Tools +homepage + + +
    +
                                     Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright 2013 Google Inc.
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    + +
    +Google Toolbox for Mac +homepage + + +
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +
    + +
    +google-glog's symbolization library +homepage + + +
    +
    // Copyright (c) 2006, Google Inc.
    +// All rights reserved.
    +//
    +// Redistribution and use in source and binary forms, with or without
    +// modification, are permitted provided that the following conditions are
    +// met:
    +//
    +//     * Redistributions of source code must retain the above copyright
    +// notice, this list of conditions and the following disclaimer.
    +//     * Redistributions in binary form must reproduce the above
    +// copyright notice, this list of conditions and the following disclaimer
    +// in the documentation and/or other materials provided with the
    +// distribution.
    +//     * Neither the name of Google Inc. nor the names of its
    +// contributors may be used to endorse or promote products derived from
    +// this software without specific prior written permission.
    +//
    +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +google-jstemplate +homepage + + +
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +
    + +
    +GVR Android SDK +homepage + + +
    +
       Copyright (c) 2015, Google Inc.
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +====================
    +Open Source Licenses
    +====================
    +
    +This software may use portions of the following libraries subject to the accompanying licenses:
    +
    +****************************
    +chromium_audio
    +****************************
    +// Copyright 2014 The Chromium Authors. All rights reserved.
    +//
    +// Redistribution and use in source and binary forms, with or without
    +// modification, are permitted provided that the following conditions are
    +// met:
    +//
    +//    * Redistributions of source code must retain the above copyright
    +// notice, this list of conditions and the following disclaimer.
    +//    * Redistributions in binary form must reproduce the above
    +// copyright notice, this list of conditions and the following disclaimer
    +// in the documentation and/or other materials provided with the
    +// distribution.
    +//    * Neither the name of Google Inc. nor the names of its
    +// contributors may be used to endorse or promote products derived from
    +// this software without specific prior written permission.
    +//
    +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +****************************
    +curl
    +****************************
    +COPYRIGHT AND PERMISSION NOTICE
    +
    +Copyright (c) 1996 - 2014, Daniel Stenberg, <daniel@haxx.se>.
    +
    +All rights reserved.
    +
    +Permission to use, copy, modify, and distribute this software for any purpose
    +with or without fee is hereby granted, provided that the above copyright
    +notice and this permission notice appear in all copies.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN
    +NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
    +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
    +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
    +OR OTHER DEALINGS IN THE SOFTWARE.
    +
    +Except as contained in this notice, the name of a copyright holder shall not
    +be used in advertising or otherwise to promote the sale, use or other dealings
    +in this Software without prior written authorization of the copyright holder.
    +
    +
    +****************************
    +dynamic_annotations
    +****************************
    +Copyright (c) 2008-2009, Google Inc.
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are
    +met:
    +
    +    * Redistributions of source code must retain the above copyright
    +notice, this list of conditions and the following disclaimer.
    +    * Redistributions in binary form must reproduce the above
    +copyright notice, this list of conditions and the following disclaimer
    +in the documentation and/or other materials provided with the
    +distribution.
    +    * Neither the name of Google Inc. nor the names of its
    +contributors may be used to endorse or promote products derived from
    +this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +****************************
    +eigen3
    +****************************
    +Eigen is primarily MPL2 licensed. See COPYING.MPL2 and these links:
    +  http://www.mozilla.org/MPL/2.0/
    +  http://www.mozilla.org/MPL/2.0/FAQ.html
    +
    +Some files contain third-party code under BSD or LGPL licenses, whence
    +the other COPYING.* files here.
    +
    +All the LGPL code is either LGPL 2.1-only, or LGPL 2.1-or-later.
    +For this reason, the COPYING.LGPL file contains the LGPL 2.1 text.
    +
    +If you want to guarantee that the Eigen code that you are #including
    +is licensed under the MPL2 and possibly more permissive licenses (like
    +BSD), #define this preprocessor symbol: EIGEN_MPL2_ONLY
    +For example, with most compilers, you could add this to your project
    +      CXXFLAGS: -DEIGEN_MPL2_ONLY
    +This will cause a compilation error to be generated if you #include
    +any code that is LGPL licensed.
    +
    +----------------------------------------------------------------------
    +Following applies to:
    +./test/mapstaticmethods.cpp
    +./test/schur_real.cpp
    +./test/prec_inverse_4x4.cpp
    +./test/smallvectors.cpp
    +./test/redux.cpp
    +./test/special_numbers.cpp
    +./test/adjoint.cpp
    +./test/resize.cpp
    +./test/mixingtypes.cpp
    +./test/product_trmv.cpp
    +./test/sparse_solvers.cpp
    +./test/cholesky.cpp
    +./test/geo_quaternion.cpp
    +./test/miscmatrices.cpp
    +./test/stddeque.cpp
    +./test/integer_types.cpp
    +./test/product_large.cpp
    +./test/eigensolver_generic.cpp
    +./test/householder.cpp
    +./test/geo_orthomethods.cpp
    +./test/array_for_matrix.cpp
    +./test/sparseLM.cpp
    +./test/upperbidiagonalization.cpp
    +./test/nomalloc.cpp
    +./test/packetmath.cpp
    +./test/jacobisvd.cpp
    +./test/geo_transformations.cpp
    +./test/swap.cpp
    +./test/eigensolver_selfadjoint.cpp
    +./test/inverse.cpp
    +./test/product_selfadjoint.cpp
    +./test/product_trsolve.cpp
    +./test/product_extra.cpp
    +./test/sparse_solver.h
    +./test/mapstride.cpp
    +./test/mapped_matrix.cpp
    +./test/geo_eulerangles.cpp
    +./test/eigen2support.cpp
    +./test/denseLM.cpp
    +./test/stdvector.cpp
    +./test/nesting_ops.cpp
    +./test/sparse_permutations.cpp
    +./test/zerosized.cpp
    +./test/exceptions.cpp
    +./test/vectorwiseop.cpp
    +./test/cwiseop.cpp
    +./test/basicstuff.cpp
    +./test/product_trmm.cpp
    +./test/linearstructure.cpp
    +./test/sparse_product.cpp
    +./test/stdvector_overload.cpp
    +./test/stable_norm.cpp
    +./test/umeyama.cpp
    +./test/unalignedcount.cpp
    +./test/triangular.cpp
    +./test/product_mmtr.cpp
    +./test/sparse_basic.cpp
    +./test/sparse_vector.cpp
    +./test/meta.cpp
    +./test/real_qz.cpp
    +./test/ref.cpp
    +./test/eigensolver_complex.cpp
    +./test/cholmod_support.cpp
    +./test/conjugate_gradient.cpp
    +./test/sparse.h
    +./test/simplicial_cholesky.cpp
    +./test/bicgstab.cpp
    +./test/dynalloc.cpp
    +./test/product_notemporary.cpp
    +./test/geo_hyperplane.cpp
    +./test/lu.cpp
    +./test/qr.cpp
    +./test/hessenberg.cpp
    +./test/sizeof.cpp
    +./test/main.h
    +./test/selfadjoint.cpp
    +./test/permutationmatrices.cpp
    +./test/superlu_support.cpp
    +./test/qtvector.cpp
    +./test/geo_homogeneous.cpp
    +./test/determinant.cpp
    +./test/array_reverse.cpp
    +./test/unalignedassert.cpp
    +./test/stdlist.cpp
    +./test/product_symm.cpp
    +./test/corners.cpp
    +./test/dontalign.cpp
    +./test/visitor.cpp
    +./test/geo_alignedbox.cpp
    +./test/diagonalmatrices.cpp
    +./test/product_small.cpp
    +./test/eigensolver_generalized_real.cpp
    +./test/umfpack_support.cpp
    +./test/first_aligned.cpp
    +./test/qr_fullpivoting.cpp
    +./test/array_replicate.cpp
    +./test/geo_parametrizedline.cpp
    +./test/eigen2/eigen2_unalignedassert.cpp
    +./test/eigen2/eigen2_prec_inverse_4x4.cpp
    +./test/eigen2/eigen2_alignedbox.cpp
    +./test/eigen2/eigen2_sparse_product.cpp
    +./test/eigen2/eigen2_meta.cpp
    +./test/eigen2/eigen2_nomalloc.cpp
    +./test/eigen2/eigen2_visitor.cpp
    +./test/eigen2/eigen2_packetmath.cpp
    +./test/eigen2/eigen2_svd.cpp
    +./test/eigen2/eigen2_mixingtypes.cpp
    +./test/eigen2/eigen2_qr.cpp
    +./test/eigen2/eigen2_cwiseop.cpp
    +./test/eigen2/eigen2_geometry_with_eigen2_prefix.cpp
    +./test/eigen2/eigen2_smallvectors.cpp
    +./test/eigen2/eigen2_commainitializer.cpp
    +./test/eigen2/eigen2_sparse_solvers.cpp
    +./test/eigen2/eigen2_hyperplane.cpp
    +./test/eigen2/eigen2_eigensolver.cpp
    +./test/eigen2/eigen2_linearstructure.cpp
    +./test/eigen2/eigen2_sizeof.cpp
    +./test/eigen2/eigen2_parametrizedline.cpp
    +./test/eigen2/eigen2_lu.cpp
    +./test/eigen2/eigen2_adjoint.cpp
    +./test/eigen2/eigen2_geometry.cpp
    +./test/eigen2/eigen2_stdvector.cpp
    +./test/eigen2/eigen2_newstdvector.cpp
    +./test/eigen2/eigen2_submatrices.cpp
    +./test/eigen2/sparse.h
    +./test/eigen2/eigen2_swap.cpp
    +./test/eigen2/eigen2_triangular.cpp
    +./test/eigen2/eigen2_basicstuff.cpp
    +./test/eigen2/gsl_helper.h
    +./test/eigen2/eigen2_dynalloc.cpp
    +./test/eigen2/eigen2_array.cpp
    +./test/eigen2/eigen2_map.cpp
    +./test/eigen2/main.h
    +./test/eigen2/eigen2_miscmatrices.cpp
    +./test/eigen2/eigen2_product_large.cpp
    +./test/eigen2/eigen2_first_aligned.cpp
    +./test/eigen2/eigen2_cholesky.cpp
    +./test/eigen2/eigen2_determinant.cpp
    +./test/eigen2/eigen2_sum.cpp
    +./test/eigen2/eigen2_inverse.cpp
    +./test/eigen2/eigen2_regression.cpp
    +./test/eigen2/eigen2_product_small.cpp
    +./test/eigen2/eigen2_qtvector.cpp
    +./test/eigen2/eigen2_sparse_vector.cpp
    +./test/eigen2/product.h
    +./test/eigen2/eigen2_sparse_basic.cpp
    +./test/eigen2/eigen2_bug_132.cpp
    +./test/array.cpp
    +./test/product_syrk.cpp
    +./test/commainitializer.cpp
    +./test/conservative_resize.cpp
    +./test/qr_colpivoting.cpp
    +./test/nullary.cpp
    +./test/bandmatrix.cpp
    +./test/pastix_support.cpp
    +./test/product.h
    +./test/block.cpp
    +./test/vectorization_logic.cpp
    +./test/jacobi.cpp
    +./test/diagonal.cpp
    +./test/schur_complex.cpp
    +./test/sizeoverflow.cpp
    +./bench/BenchTimer.h
    +./bench/benchFFT.cpp
    +./bench/eig33.cpp
    +./bench/spbench/spbenchsolver.h
    +./bench/spbench/spbenchstyle.h
    +./lapack/complex_double.cpp
    +./lapack/cholesky.cpp
    +./lapack/lapack_common.h
    +./lapack/eigenvalues.cpp
    +./lapack/single.cpp
    +./lapack/lu.cpp
    +./lapack/complex_single.cpp
    +./lapack/double.cpp
    +./demos/mix_eigen_and_c/binary_library.cpp
    +./demos/mix_eigen_and_c/binary_library.h
    +./demos/mix_eigen_and_c/example.c
    +./demos/mandelbrot/mandelbrot.cpp
    +./demos/mandelbrot/mandelbrot.h
    +./demos/opengl/icosphere.cpp
    +./demos/opengl/icosphere.h
    +./demos/opengl/camera.cpp
    +./demos/opengl/quaternion_demo.h
    +./demos/opengl/camera.h
    +./demos/opengl/trackball.h
    +./demos/opengl/gpuhelper.h
    +./demos/opengl/trackball.cpp
    +./demos/opengl/gpuhelper.cpp
    +./demos/opengl/quaternion_demo.cpp
    +./debug/gdb/printers.py
    +./unsupported/test/minres.cpp
    +./unsupported/test/openglsupport.cpp
    +./unsupported/test/jacobisvd.cpp
    +./unsupported/test/dgmres.cpp
    +./unsupported/test/matrix_square_root.cpp
    +./unsupported/test/bdcsvd.cpp
    +./unsupported/test/matrix_exponential.cpp
    +./unsupported/test/forward_adolc.cpp
    +./unsupported/test/polynomialsolver.cpp
    +./unsupported/test/matrix_function.cpp
    +./unsupported/test/sparse_extra.cpp
    +./unsupported/test/matrix_functions.h
    +./unsupported/test/svd_common.h
    +./unsupported/test/FFTW.cpp
    +./unsupported/test/alignedvector3.cpp
    +./unsupported/test/autodiff.cpp
    +./unsupported/test/gmres.cpp
    +./unsupported/test/BVH.cpp
    +./unsupported/test/levenberg_marquardt.cpp
    +./unsupported/test/matrix_power.cpp
    +./unsupported/test/kronecker_product.cpp
    +./unsupported/test/splines.cpp
    +./unsupported/test/polynomialutils.cpp
    +./unsupported/bench/bench_svd.cpp
    +./unsupported/Eigen/IterativeSolvers
    +./unsupported/Eigen/src/IterativeSolvers/DGMRES.h
    +./unsupported/Eigen/src/IterativeSolvers/IncompleteLU.h
    +./unsupported/Eigen/src/IterativeSolvers/GMRES.h
    +./unsupported/Eigen/src/IterativeSolvers/IncompleteCholesky.h
    +./unsupported/Eigen/src/IterativeSolvers/Scaling.h
    +./unsupported/Eigen/src/IterativeSolvers/MINRES.h
    +./unsupported/Eigen/src/SparseExtra/RandomSetter.h
    +./unsupported/Eigen/src/SparseExtra/MatrixMarketIterator.h
    +./unsupported/Eigen/src/SparseExtra/DynamicSparseMatrix.h
    +./unsupported/Eigen/src/SparseExtra/MarketIO.h
    +./unsupported/Eigen/src/SparseExtra/BlockOfDynamicSparseMatrix.h
    +./unsupported/Eigen/src/KroneckerProduct/KroneckerTensorProduct.h
    +./unsupported/Eigen/src/NonLinearOptimization/LevenbergMarquardt.h
    +./unsupported/Eigen/src/NonLinearOptimization/HybridNonLinearSolver.h
    +./unsupported/Eigen/src/BVH/BVAlgorithms.h
    +./unsupported/Eigen/src/BVH/KdBVH.h
    +./unsupported/Eigen/src/AutoDiff/AutoDiffScalar.h
    +./unsupported/Eigen/src/AutoDiff/AutoDiffJacobian.h
    +./unsupported/Eigen/src/AutoDiff/AutoDiffVector.h
    +./unsupported/Eigen/src/Splines/Spline.h
    +./unsupported/Eigen/src/Splines/SplineFitting.h
    +./unsupported/Eigen/src/Splines/SplineFwd.h
    +./unsupported/Eigen/src/SVD/JacobiSVD.h
    +./unsupported/Eigen/src/SVD/BDCSVD.h
    +./unsupported/Eigen/src/SVD/SVDBase.h
    +./unsupported/Eigen/src/MatrixFunctions/MatrixFunction.h
    +./unsupported/Eigen/src/MatrixFunctions/MatrixSquareRoot.h
    +./unsupported/Eigen/src/MatrixFunctions/MatrixLogarithm.h
    +./unsupported/Eigen/src/MatrixFunctions/StemFunction.h
    +./unsupported/Eigen/src/MatrixFunctions/MatrixPower.h
    +./unsupported/Eigen/src/MatrixFunctions/MatrixExponential.h
    +./unsupported/Eigen/src/MatrixFunctions/MatrixFunctionAtomic.h
    +./unsupported/Eigen/src/MoreVectorization/MathFunctions.h
    +./unsupported/Eigen/src/LevenbergMarquardt/LevenbergMarquardt.h
    +./unsupported/Eigen/src/FFT/ei_fftw_impl.h
    +./unsupported/Eigen/src/FFT/ei_kissfft_impl.h
    +./unsupported/Eigen/src/Polynomials/PolynomialSolver.h
    +./unsupported/Eigen/src/Polynomials/Companion.h
    +./unsupported/Eigen/src/Polynomials/PolynomialUtils.h
    +./unsupported/Eigen/src/NumericalDiff/NumericalDiff.h
    +./unsupported/Eigen/src/Skyline/SkylineProduct.h
    +./unsupported/Eigen/src/Skyline/SkylineMatrixBase.h
    +./unsupported/Eigen/src/Skyline/SkylineStorage.h
    +./unsupported/Eigen/src/Skyline/SkylineUtil.h
    +./unsupported/Eigen/src/Skyline/SkylineInplaceLU.h
    +./unsupported/Eigen/src/Skyline/SkylineMatrix.h
    +./unsupported/Eigen/SparseExtra
    +./unsupported/Eigen/AdolcForward
    +./unsupported/Eigen/KroneckerProduct
    +./unsupported/Eigen/NonLinearOptimization
    +./unsupported/Eigen/BVH
    +./unsupported/Eigen/OpenGLSupport
    +./unsupported/Eigen/ArpackSupport
    +./unsupported/Eigen/AutoDiff
    +./unsupported/Eigen/Splines
    +./unsupported/Eigen/MPRealSupport
    +./unsupported/Eigen/MatrixFunctions
    +./unsupported/Eigen/MoreVectorization
    +./unsupported/Eigen/LevenbergMarquardt
    +./unsupported/Eigen/AlignedVector3
    +./unsupported/Eigen/FFT
    +./unsupported/Eigen/Polynomials
    +./unsupported/Eigen/NumericalDiff
    +./unsupported/Eigen/Skyline
    +./COPYING.README
    +./COPYING.README
    +./LICENSE
    +./LICENSE
    +./LICENSE
    +./Eigen/Eigen2Support
    +./Eigen/src/Eigen2Support/VectorBlock.h
    +./Eigen/src/Eigen2Support/Cwise.h
    +./Eigen/src/Eigen2Support/Minor.h
    +./Eigen/src/Eigen2Support/Lazy.h
    +./Eigen/src/Eigen2Support/Memory.h
    +./Eigen/src/Eigen2Support/MathFunctions.h
    +./Eigen/src/Eigen2Support/Geometry/AlignedBox.h
    +./Eigen/src/Eigen2Support/Geometry/Hyperplane.h
    +./Eigen/src/Eigen2Support/Geometry/Quaternion.h
    +./Eigen/src/Eigen2Support/Geometry/Rotation2D.h
    +./Eigen/src/Eigen2Support/Geometry/ParametrizedLine.h
    +./Eigen/src/Eigen2Support/Geometry/RotationBase.h
    +./Eigen/src/Eigen2Support/Geometry/Translation.h
    +./Eigen/src/Eigen2Support/Geometry/Scaling.h
    +./Eigen/src/Eigen2Support/Geometry/AngleAxis.h
    +./Eigen/src/Eigen2Support/Geometry/Transform.h
    +./Eigen/src/Eigen2Support/TriangularSolver.h
    +./Eigen/src/Eigen2Support/LU.h
    +./Eigen/src/Eigen2Support/QR.h
    +./Eigen/src/Eigen2Support/SVD.h
    +./Eigen/src/Eigen2Support/Meta.h
    +./Eigen/src/Eigen2Support/Block.h
    +./Eigen/src/Eigen2Support/Macros.h
    +./Eigen/src/Eigen2Support/LeastSquares.h
    +./Eigen/src/Eigen2Support/CwiseOperators.h
    +./Eigen/src/Jacobi/Jacobi.h
    +./Eigen/src/misc/Kernel.h
    +./Eigen/src/misc/SparseSolve.h
    +./Eigen/src/misc/Solve.h
    +./Eigen/src/misc/Image.h
    +./Eigen/src/SparseCore/SparseColEtree.h
    +./Eigen/src/SparseCore/SparseTranspose.h
    +./Eigen/src/SparseCore/SparseUtil.h
    +./Eigen/src/SparseCore/SparseCwiseBinaryOp.h
    +./Eigen/src/SparseCore/SparseDiagonalProduct.h
    +./Eigen/src/SparseCore/SparseProduct.h
    +./Eigen/src/SparseCore/SparseDot.h
    +./Eigen/src/SparseCore/SparseCwiseUnaryOp.h
    +./Eigen/src/SparseCore/SparseSparseProductWithPruning.h
    +./Eigen/src/SparseCore/SparseBlock.h
    +./Eigen/src/SparseCore/SparseDenseProduct.h
    +./Eigen/src/SparseCore/CompressedStorage.h
    +./Eigen/src/SparseCore/SparseMatrixBase.h
    +./Eigen/src/SparseCore/MappedSparseMatrix.h
    +./Eigen/src/SparseCore/SparseTriangularView.h
    +./Eigen/src/SparseCore/SparseView.h
    +./Eigen/src/SparseCore/SparseFuzzy.h
    +./Eigen/src/SparseCore/TriangularSolver.h
    +./Eigen/src/SparseCore/SparseSelfAdjointView.h
    +./Eigen/src/SparseCore/SparseMatrix.h
    +./Eigen/src/SparseCore/SparseVector.h
    +./Eigen/src/SparseCore/AmbiVector.h
    +./Eigen/src/SparseCore/ConservativeSparseSparseProduct.h
    +./Eigen/src/SparseCore/SparseRedux.h
    +./Eigen/src/SparseCore/SparsePermutation.h
    +./Eigen/src/Eigenvalues/RealSchur.h
    +./Eigen/src/Eigenvalues/ComplexEigenSolver.h
    +./Eigen/src/Eigenvalues/GeneralizedEigenSolver.h
    +./Eigen/src/Eigenvalues/ComplexSchur.h
    +./Eigen/src/Eigenvalues/RealQZ.h
    +./Eigen/src/Eigenvalues/EigenSolver.h
    +./Eigen/src/Eigenvalues/HessenbergDecomposition.h
    +./Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h
    +./Eigen/src/Eigenvalues/Tridiagonalization.h
    +./Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h
    +./Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h
    +./Eigen/src/SuperLUSupport/SuperLUSupport.h
    +./Eigen/src/StlSupport/StdDeque.h
    +./Eigen/src/StlSupport/StdVector.h
    +./Eigen/src/StlSupport/StdList.h
    +./Eigen/src/StlSupport/details.h
    +./Eigen/src/SparseQR/SparseQR.h
    +./Eigen/src/LU/Inverse.h
    +./Eigen/src/LU/arch/Inverse_SSE.h
    +./Eigen/src/LU/Determinant.h
    +./Eigen/src/LU/PartialPivLU.h
    +./Eigen/src/LU/FullPivLU.h
    +./Eigen/src/UmfPackSupport/UmfPackSupport.h
    +./Eigen/src/OrderingMethods/Ordering.h
    +./Eigen/src/OrderingMethods/Eigen_Colamd.h
    +./Eigen/src/QR/HouseholderQR.h
    +./Eigen/src/QR/ColPivHouseholderQR.h
    +./Eigen/src/QR/FullPivHouseholderQR.h
    +./Eigen/src/SVD/JacobiSVD.h
    +./Eigen/src/SVD/UpperBidiagonalization.h
    +./Eigen/src/Geometry/OrthoMethods.h
    +./Eigen/src/Geometry/AlignedBox.h
    +./Eigen/src/Geometry/Hyperplane.h
    +./Eigen/src/Geometry/Quaternion.h
    +./Eigen/src/Geometry/EulerAngles.h
    +./Eigen/src/Geometry/Rotation2D.h
    +./Eigen/src/Geometry/ParametrizedLine.h
    +./Eigen/src/Geometry/RotationBase.h
    +./Eigen/src/Geometry/arch/Geometry_SSE.h
    +./Eigen/src/Geometry/Umeyama.h
    +./Eigen/src/Geometry/Homogeneous.h
    +./Eigen/src/Geometry/Translation.h
    +./Eigen/src/Geometry/Scaling.h
    +./Eigen/src/Geometry/AngleAxis.h
    +./Eigen/src/Geometry/Transform.h
    +./Eigen/src/plugins/BlockMethods.h
    +./Eigen/src/plugins/CommonCwiseUnaryOps.h
    +./Eigen/src/plugins/CommonCwiseBinaryOps.h
    +./Eigen/src/plugins/MatrixCwiseUnaryOps.h
    +./Eigen/src/plugins/MatrixCwiseBinaryOps.h
    +./Eigen/src/Householder/Householder.h
    +./Eigen/src/Householder/HouseholderSequence.h
    +./Eigen/src/Householder/BlockHouseholder.h
    +./Eigen/src/Core/VectorBlock.h
    +./Eigen/src/Core/Matrix.h
    +./Eigen/src/Core/Ref.h
    +./Eigen/src/Core/SelfAdjointView.h
    +./Eigen/src/Core/MathFunctions.h
    +./Eigen/src/Core/GlobalFunctions.h
    +./Eigen/src/Core/MapBase.h
    +./Eigen/src/Core/EigenBase.h
    +./Eigen/src/Core/GenericPacketMath.h
    +./Eigen/src/Core/NestByValue.h
    +./Eigen/src/Core/CwiseUnaryOp.h
    +./Eigen/src/Core/SolveTriangular.h
    +./Eigen/src/Core/Fuzzy.h
    +./Eigen/src/Core/Visitor.h
    +./Eigen/src/Core/Map.h
    +./Eigen/src/Core/NoAlias.h
    +./Eigen/src/Core/Diagonal.h
    +./Eigen/src/Core/StableNorm.h
    +./Eigen/src/Core/CoreIterators.h
    +./Eigen/src/Core/products/Parallelizer.h
    +./Eigen/src/Core/products/SelfadjointMatrixVector.h
    +./Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h
    +./Eigen/src/Core/products/TriangularSolverMatrix.h
    +./Eigen/src/Core/products/GeneralMatrixMatrix.h
    +./Eigen/src/Core/products/SelfadjointProduct.h
    +./Eigen/src/Core/products/CoeffBasedProduct.h
    +./Eigen/src/Core/products/TriangularMatrixVector.h
    +./Eigen/src/Core/products/SelfadjointMatrixMatrix.h
    +./Eigen/src/Core/products/TriangularSolverVector.h
    +./Eigen/src/Core/products/SelfadjointRank2Update.h
    +./Eigen/src/Core/products/GeneralBlockPanelKernel.h
    +./Eigen/src/Core/products/GeneralMatrixVector.h
    +./Eigen/src/Core/products/TriangularMatrixMatrix.h
    +./Eigen/src/Core/Reverse.h
    +./Eigen/src/Core/BooleanRedux.h
    +./Eigen/src/Core/Replicate.h
    +./Eigen/src/Core/arch/AltiVec/PacketMath.h
    +./Eigen/src/Core/arch/AltiVec/Complex.h
    +./Eigen/src/Core/arch/SSE/PacketMath.h
    +./Eigen/src/Core/arch/SSE/Complex.h
    +./Eigen/src/Core/arch/SSE/MathFunctions.h
    +./Eigen/src/Core/arch/NEON/PacketMath.h
    +./Eigen/src/Core/arch/NEON/Complex.h
    +./Eigen/src/Core/arch/Default/Settings.h
    +./Eigen/src/Core/CwiseUnaryView.h
    +./Eigen/src/Core/Array.h
    +./Eigen/src/Core/ArrayWrapper.h
    +./Eigen/src/Core/Swap.h
    +./Eigen/src/Core/Transpositions.h
    +./Eigen/src/Core/Random.h
    +./Eigen/src/Core/IO.h
    +./Eigen/src/Core/SelfCwiseBinaryOp.h
    +./Eigen/src/Core/VectorwiseOp.h
    +./Eigen/src/Core/Select.h
    +./Eigen/src/Core/ArrayBase.h
    +./Eigen/src/Core/DenseCoeffsBase.h
    +./Eigen/src/Core/DiagonalProduct.h
    +./Eigen/src/Core/Assign.h
    +./Eigen/src/Core/Redux.h
    +./Eigen/src/Core/ForceAlignedAccess.h
    +./Eigen/src/Core/BandMatrix.h
    +./Eigen/src/Core/PlainObjectBase.h
    +./Eigen/src/Core/DenseBase.h
    +./Eigen/src/Core/Flagged.h
    +./Eigen/src/Core/CwiseBinaryOp.h
    +./Eigen/src/Core/ProductBase.h
    +./Eigen/src/Core/TriangularMatrix.h
    +./Eigen/src/Core/Transpose.h
    +./Eigen/src/Core/DiagonalMatrix.h
    +./Eigen/src/Core/Dot.h
    +./Eigen/src/Core/Functors.h
    +./Eigen/src/Core/PermutationMatrix.h
    +./Eigen/src/Core/NumTraits.h
    +./Eigen/src/Core/MatrixBase.h
    +./Eigen/src/Core/DenseStorage.h
    +./Eigen/src/Core/util/Memory.h
    +./Eigen/src/Core/util/StaticAssert.h
    +./Eigen/src/Core/util/BlasUtil.h
    +./Eigen/src/Core/util/MatrixMapper.h
    +./Eigen/src/Core/util/XprHelper.h
    +./Eigen/src/Core/util/ForwardDeclarations.h
    +./Eigen/src/Core/util/Meta.h
    +./Eigen/src/Core/util/Macros.h
    +./Eigen/src/Core/util/Constants.h
    +./Eigen/src/Core/CwiseNullaryOp.h
    +./Eigen/src/Core/Block.h
    +./Eigen/src/Core/GeneralProduct.h
    +./Eigen/src/Core/CommaInitializer.h
    +./Eigen/src/Core/ReturnByValue.h
    +./Eigen/src/Core/Stride.h
    +./Eigen/src/SPQRSupport/SuiteSparseQRSupport.h
    +./Eigen/src/SparseLU/SparseLU_column_dfs.h
    +./Eigen/src/SparseLU/SparseLU_panel_dfs.h
    +./Eigen/src/SparseLU/SparseLU_relax_snode.h
    +./Eigen/src/SparseLU/SparseLU_panel_bmod.h
    +./Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h
    +./Eigen/src/SparseLU/SparseLU_Utils.h
    +./Eigen/src/SparseLU/SparseLU_gemm_kernel.h
    +./Eigen/src/SparseLU/SparseLU_kernel_bmod.h
    +./Eigen/src/SparseLU/SparseLU_pivotL.h
    +./Eigen/src/SparseLU/SparseLU_Memory.h
    +./Eigen/src/SparseLU/SparseLU_heap_relax_snode.h
    +./Eigen/src/SparseLU/SparseLUImpl.h
    +./Eigen/src/SparseLU/SparseLU_copy_to_ucol.h
    +./Eigen/src/SparseLU/SparseLU_Structs.h
    +./Eigen/src/SparseLU/SparseLU.h
    +./Eigen/src/SparseLU/SparseLU_column_bmod.h
    +./Eigen/src/SparseLU/SparseLU_pruneL.h
    +./Eigen/src/IterativeLinearSolvers/IncompleteLUT.h
    +./Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h
    +./Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h
    +./Eigen/src/IterativeLinearSolvers/ConjugateGradient.h
    +./Eigen/src/IterativeLinearSolvers/BiCGSTAB.h
    +./Eigen/src/SparseCholesky/SimplicialCholesky.h
    +./Eigen/src/Cholesky/LDLT.h
    +./Eigen/src/Cholesky/LLT.h
    +./Eigen/src/CholmodSupport/CholmodSupport.h
    +./Eigen/src/PaStiXSupport/PaStiXSupport.h
    +./Eigen/src/MetisSupport/MetisSupport.h
    +./Eigen/StdVector
    +./Eigen/Core
    +./Eigen/SparseLU
    +./Eigen/StdList
    +./Eigen/StdDeque
    +./Eigen/SparseCholesky
    +./scripts/relicense.py
    +./scripts/relicense.py
    +./blas/BandTriangularSolver.h
    +./blas/PackedTriangularMatrixVector.h
    +./blas/complex_double.cpp
    +./blas/level2_real_impl.h
    +./blas/level1_cplx_impl.h
    +./blas/level1_impl.h
    +./blas/level1_real_impl.h
    +./blas/level3_impl.h
    +./blas/single.cpp
    +./blas/level2_cplx_impl.h
    +./blas/PackedSelfadjointProduct.h
    +./blas/Rank2Update.h
    +./blas/complex_single.cpp
    +./blas/PackedTriangularSolverVector.h
    +./blas/double.cpp
    +./blas/common.h
    +./blas/level2_impl.h
    +./blas/GeneralRank1Update.h
    +
    +Mozilla Public License Version 2.0
    +==================================
    +
    +1. Definitions
    +--------------
    +
    +1.1. "Contributor"
    +    means each individual or legal entity that creates, contributes to
    +    the creation of, or owns Covered Software.
    +
    +1.2. "Contributor Version"
    +    means the combination of the Contributions of others (if any) used
    +    by a Contributor and that particular Contributor's Contribution.
    +
    +1.3. "Contribution"
    +    means Covered Software of a particular Contributor.
    +
    +1.4. "Covered Software"
    +    means Source Code Form to which the initial Contributor has attached
    +    the notice in Exhibit A, the Executable Form of such Source Code
    +    Form, and Modifications of such Source Code Form, in each case
    +    including portions thereof.
    +
    +1.5. "Incompatible With Secondary Licenses"
    +    means
    +
    +    (a) that the initial Contributor has attached the notice described
    +        in Exhibit B to the Covered Software; or
    +
    +    (b) that the Covered Software was made available under the terms of
    +        version 1.1 or earlier of the License, but not also under the
    +        terms of a Secondary License.
    +
    +1.6. "Executable Form"
    +    means any form of the work other than Source Code Form.
    +
    +1.7. "Larger Work"
    +    means a work that combines Covered Software with other material, in
    +    a separate file or files, that is not Covered Software.
    +
    +1.8. "License"
    +    means this document.
    +
    +1.9. "Licensable"
    +    means having the right to grant, to the maximum extent possible,
    +    whether at the time of the initial grant or subsequently, any and
    +    all of the rights conveyed by this License.
    +
    +1.10. "Modifications"
    +    means any of the following:
    +
    +    (a) any file in Source Code Form that results from an addition to,
    +        deletion from, or modification of the contents of Covered
    +        Software; or
    +
    +    (b) any new file in Source Code Form that contains any Covered
    +        Software.
    +
    +1.11. "Patent Claims" of a Contributor
    +    means any patent claim(s), including without limitation, method,
    +    process, and apparatus claims, in any patent Licensable by such
    +    Contributor that would be infringed, but for the grant of the
    +    License, by the making, using, selling, offering for sale, having
    +    made, import, or transfer of either its Contributions or its
    +    Contributor Version.
    +
    +1.12. "Secondary License"
    +    means either the GNU General Public License, Version 2.0, the GNU
    +    Lesser General Public License, Version 2.1, the GNU Affero General
    +    Public License, Version 3.0, or any later versions of those
    +    licenses.
    +
    +1.13. "Source Code Form"
    +    means the form of the work preferred for making modifications.
    +
    +1.14. "You" (or "Your")
    +    means an individual or a legal entity exercising rights under this
    +    License. For legal entities, "You" includes any entity that
    +    controls, is controlled by, or is under common control with You. For
    +    purposes of this definition, "control" means (a) the power, direct
    +    or indirect, to cause the direction or management of such entity,
    +    whether by contract or otherwise, or (b) ownership of more than
    +    fifty percent (50%) of the outstanding shares or beneficial
    +    ownership of such entity.
    +
    +2. License Grants and Conditions
    +--------------------------------
    +
    +2.1. Grants
    +
    +Each Contributor hereby grants You a world-wide, royalty-free,
    +non-exclusive license:
    +
    +(a) under intellectual property rights (other than patent or trademark)
    +    Licensable by such Contributor to use, reproduce, make available,
    +    modify, display, perform, distribute, and otherwise exploit its
    +    Contributions, either on an unmodified basis, with Modifications, or
    +    as part of a Larger Work; and
    +
    +(b) under Patent Claims of such Contributor to make, use, sell, offer
    +    for sale, have made, import, and otherwise transfer either its
    +    Contributions or its Contributor Version.
    +
    +2.2. Effective Date
    +
    +The licenses granted in Section 2.1 with respect to any Contribution
    +become effective for each Contribution on the date the Contributor first
    +distributes such Contribution.
    +
    +2.3. Limitations on Grant Scope
    +
    +The licenses granted in this Section 2 are the only rights granted under
    +this License. No additional rights or licenses will be implied from the
    +distribution or licensing of Covered Software under this License.
    +Notwithstanding Section 2.1(b) above, no patent license is granted by a
    +Contributor:
    +
    +(a) for any code that a Contributor has removed from Covered Software;
    +    or
    +
    +(b) for infringements caused by: (i) Your and any other third party's
    +    modifications of Covered Software, or (ii) the combination of its
    +    Contributions with other software (except as part of its Contributor
    +    Version); or
    +
    +(c) under Patent Claims infringed by Covered Software in the absence of
    +    its Contributions.
    +
    +This License does not grant any rights in the trademarks, service marks,
    +or logos of any Contributor (except as may be necessary to comply with
    +the notice requirements in Section 3.4).
    +
    +2.4. Subsequent Licenses
    +
    +No Contributor makes additional grants as a result of Your choice to
    +distribute the Covered Software under a subsequent version of this
    +License (see Section 10.2) or under the terms of a Secondary License (if
    +permitted under the terms of Section 3.3).
    +
    +2.5. Representation
    +
    +Each Contributor represents that the Contributor believes its
    +Contributions are its original creation(s) or it has sufficient rights
    +to grant the rights to its Contributions conveyed by this License.
    +
    +2.6. Fair Use
    +
    +This License is not intended to limit any rights You have under
    +applicable copyright doctrines of fair use, fair dealing, or other
    +equivalents.
    +
    +2.7. Conditions
    +
    +Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
    +in Section 2.1.
    +
    +3. Responsibilities
    +-------------------
    +
    +3.1. Distribution of Source Form
    +
    +All distribution of Covered Software in Source Code Form, including any
    +Modifications that You create or to which You contribute, must be under
    +the terms of this License. You must inform recipients that the Source
    +Code Form of the Covered Software is governed by the terms of this
    +License, and how they can obtain a copy of this License. You may not
    +attempt to alter or restrict the recipients' rights in the Source Code
    +Form.
    +
    +3.2. Distribution of Executable Form
    +
    +If You distribute Covered Software in Executable Form then:
    +
    +(a) such Covered Software must also be made available in Source Code
    +    Form, as described in Section 3.1, and You must inform recipients of
    +    the Executable Form how they can obtain a copy of such Source Code
    +    Form by reasonable means in a timely manner, at a charge no more
    +    than the cost of distribution to the recipient; and
    +
    +(b) You may distribute such Executable Form under the terms of this
    +    License, or sublicense it under different terms, provided that the
    +    license for the Executable Form does not attempt to limit or alter
    +    the recipients' rights in the Source Code Form under this License.
    +
    +3.3. Distribution of a Larger Work
    +
    +You may create and distribute a Larger Work under terms of Your choice,
    +provided that You also comply with the requirements of this License for
    +the Covered Software. If the Larger Work is a combination of Covered
    +Software with a work governed by one or more Secondary Licenses, and the
    +Covered Software is not Incompatible With Secondary Licenses, this
    +License permits You to additionally distribute such Covered Software
    +under the terms of such Secondary License(s), so that the recipient of
    +the Larger Work may, at their option, further distribute the Covered
    +Software under the terms of either this License or such Secondary
    +License(s).
    +
    +3.4. Notices
    +
    +You may not remove or alter the substance of any license notices
    +(including copyright notices, patent notices, disclaimers of warranty,
    +or limitations of liability) contained within the Source Code Form of
    +the Covered Software, except that You may alter any license notices to
    +the extent required to remedy known factual inaccuracies.
    +
    +3.5. Application of Additional Terms
    +
    +You may choose to offer, and to charge a fee for, warranty, support,
    +indemnity or liability obligations to one or more recipients of Covered
    +Software. However, You may do so only on Your own behalf, and not on
    +behalf of any Contributor. You must make it absolutely clear that any
    +such warranty, support, indemnity, or liability obligation is offered by
    +You alone, and You hereby agree to indemnify every Contributor for any
    +liability incurred by such Contributor as a result of warranty, support,
    +indemnity or liability terms You offer. You may include additional
    +disclaimers of warranty and limitations of liability specific to any
    +jurisdiction.
    +
    +4. Inability to Comply Due to Statute or Regulation
    +---------------------------------------------------
    +
    +If it is impossible for You to comply with any of the terms of this
    +License with respect to some or all of the Covered Software due to
    +statute, judicial order, or regulation then You must: (a) comply with
    +the terms of this License to the maximum extent possible; and (b)
    +describe the limitations and the code they affect. Such description must
    +be placed in a text file included with all distributions of the Covered
    +Software under this License. Except to the extent prohibited by statute
    +or regulation, such description must be sufficiently detailed for a
    +recipient of ordinary skill to be able to understand it.
    +
    +5. Termination
    +--------------
    +
    +5.1. The rights granted under this License will terminate automatically
    +if You fail to comply with any of its terms. However, if You become
    +compliant, then the rights granted under this License from a particular
    +Contributor are reinstated (a) provisionally, unless and until such
    +Contributor explicitly and finally terminates Your grants, and (b) on an
    +ongoing basis, if such Contributor fails to notify You of the
    +non-compliance by some reasonable means prior to 60 days after You have
    +come back into compliance. Moreover, Your grants from a particular
    +Contributor are reinstated on an ongoing basis if such Contributor
    +notifies You of the non-compliance by some reasonable means, this is the
    +first time You have received notice of non-compliance with this License
    +from such Contributor, and You become compliant prior to 30 days after
    +Your receipt of the notice.
    +
    +5.2. If You initiate litigation against any entity by asserting a patent
    +infringement claim (excluding declaratory judgment actions,
    +counter-claims, and cross-claims) alleging that a Contributor Version
    +directly or indirectly infringes any patent, then the rights granted to
    +You by any and all Contributors for the Covered Software under Section
    +2.1 of this License shall terminate.
    +
    +5.3. In the event of termination under Sections 5.1 or 5.2 above, all
    +end user license agreements (excluding distributors and resellers) which
    +have been validly granted by You or Your distributors under this License
    +prior to termination shall survive termination.
    +
    +************************************************************************
    +*                                                                      *
    +*  6. Disclaimer of Warranty                                           *
    +*  -------------------------                                           *
    +*                                                                      *
    +*  Covered Software is provided under this License on an "as is"       *
    +*  basis, without warranty of any kind, either expressed, implied, or  *
    +*  statutory, including, without limitation, warranties that the       *
    +*  Covered Software is free of defects, merchantable, fit for a        *
    +*  particular purpose or non-infringing. The entire risk as to the     *
    +*  quality and performance of the Covered Software is with You.        *
    +*  Should any Covered Software prove defective in any respect, You     *
    +*  (not any Contributor) assume the cost of any necessary servicing,   *
    +*  repair, or correction. This disclaimer of warranty constitutes an   *
    +*  essential part of this License. No use of any Covered Software is   *
    +*  authorized under this License except under this disclaimer.         *
    +*                                                                      *
    +************************************************************************
    +
    +************************************************************************
    +*                                                                      *
    +*  7. Limitation of Liability                                          *
    +*  --------------------------                                          *
    +*                                                                      *
    +*  Under no circumstances and under no legal theory, whether tort      *
    +*  (including negligence), contract, or otherwise, shall any           *
    +*  Contributor, or anyone who distributes Covered Software as          *
    +*  permitted above, be liable to You for any direct, indirect,         *
    +*  special, incidental, or consequential damages of any character      *
    +*  including, without limitation, damages for lost profits, loss of    *
    +*  goodwill, work stoppage, computer failure or malfunction, or any    *
    +*  and all other commercial damages or losses, even if such party      *
    +*  shall have been informed of the possibility of such damages. This   *
    +*  limitation of liability shall not apply to liability for death or   *
    +*  personal injury resulting from such party's negligence to the       *
    +*  extent applicable law prohibits such limitation. Some               *
    +*  jurisdictions do not allow the exclusion or limitation of           *
    +*  incidental or consequential damages, so this exclusion and          *
    +*  limitation may not apply to You.                                    *
    +*                                                                      *
    +************************************************************************
    +
    +8. Litigation
    +-------------
    +
    +Any litigation relating to this License may be brought only in the
    +courts of a jurisdiction where the defendant maintains its principal
    +place of business and such litigation shall be governed by laws of that
    +jurisdiction, without reference to its conflict-of-law provisions.
    +Nothing in this Section shall prevent a party's ability to bring
    +cross-claims or counter-claims.
    +
    +9. Miscellaneous
    +----------------
    +
    +This License represents the complete agreement concerning the subject
    +matter hereof. If any provision of this License is held to be
    +unenforceable, such provision shall be reformed only to the extent
    +necessary to make it enforceable. Any law or regulation which provides
    +that the language of a contract shall be construed against the drafter
    +shall not be used to construe this License against a Contributor.
    +
    +10. Versions of the License
    +---------------------------
    +
    +10.1. New Versions
    +
    +Mozilla Foundation is the license steward. Except as provided in Section
    +10.3, no one other than the license steward has the right to modify or
    +publish new versions of this License. Each version will be given a
    +distinguishing version number.
    +
    +10.2. Effect of New Versions
    +
    +You may distribute the Covered Software under the terms of the version
    +of the License under which You originally received the Covered Software,
    +or under the terms of any subsequent version published by the license
    +steward.
    +
    +10.3. Modified Versions
    +
    +If you create software not governed by this License, and you want to
    +create a new license for such software, you may create and use a
    +modified version of this License if you rename the license and remove
    +any references to the name of the license steward (except to note that
    +such modified license differs from this License).
    +
    +10.4. Distributing Source Code Form that is Incompatible With Secondary
    +Licenses
    +
    +If You choose to distribute Source Code Form that is Incompatible With
    +Secondary Licenses under the terms of this version of the License, the
    +notice described in Exhibit B of this License must be attached.
    +
    +Exhibit A - Source Code Form License Notice
    +-------------------------------------------
    +
    +  This Source Code Form is subject to the terms of the Mozilla Public
    +  License, v. 2.0. If a copy of the MPL was not distributed with this
    +  file, You can obtain one at http://mozilla.org/MPL/2.0/.
    +
    +If it is not possible or desirable to put the notice in a particular
    +file, then You may include the notice in a location (such as a LICENSE
    +file in a relevant directory) where a recipient would be likely to look
    +for such a notice.
    +
    +You may add additional accurate notices of copyright ownership.
    +
    +Exhibit B - "Incompatible With Secondary Licenses" Notice
    +---------------------------------------------------------
    +
    +  This Source Code Form is "Incompatible With Secondary Licenses", as
    +  defined by the Mozilla Public License, v. 2.0.
    +
    +----------------------------------------------------------------------
    +Following applies to:
    +./doc/UsingIntelMKL.dox
    +./doc/UsingIntelMKL.dox
    +./Eigen/src/Eigenvalues/ComplexSchur_MKL.h
    +./Eigen/src/Eigenvalues/ComplexSchur_MKL.h
    +./Eigen/src/Eigenvalues/SelfAdjointEigenSolver_MKL.h
    +./Eigen/src/Eigenvalues/SelfAdjointEigenSolver_MKL.h
    +./Eigen/src/Eigenvalues/RealSchur_MKL.h
    +./Eigen/src/Eigenvalues/RealSchur_MKL.h
    +./Eigen/src/LU/arch/Inverse_SSE.h
    +./Eigen/src/LU/arch/Inverse_SSE.h
    +./Eigen/src/LU/PartialPivLU_MKL.h
    +./Eigen/src/LU/PartialPivLU_MKL.h
    +./Eigen/src/QR/HouseholderQR_MKL.h
    +./Eigen/src/QR/HouseholderQR_MKL.h
    +./Eigen/src/QR/ColPivHouseholderQR_MKL.h
    +./Eigen/src/QR/ColPivHouseholderQR_MKL.h
    +./Eigen/src/SVD/JacobiSVD_MKL.h
    +./Eigen/src/SVD/JacobiSVD_MKL.h
    +./Eigen/src/PardisoSupport/PardisoSupport.h
    +./Eigen/src/PardisoSupport/PardisoSupport.h
    +./Eigen/src/Core/Assign_MKL.h
    +./Eigen/src/Core/Assign_MKL.h
    +./Eigen/src/Core/products/SelfadjointMatrixVector_MKL.h
    +./Eigen/src/Core/products/SelfadjointMatrixVector_MKL.h
    +./Eigen/src/Core/products/GeneralMatrixVector_MKL.h
    +./Eigen/src/Core/products/GeneralMatrixVector_MKL.h
    +./Eigen/src/Core/products/SelfadjointMatrixMatrix_MKL.h
    +./Eigen/src/Core/products/SelfadjointMatrixMatrix_MKL.h
    +./Eigen/src/Core/products/TriangularMatrixMatrix_MKL.h
    +./Eigen/src/Core/products/TriangularMatrixMatrix_MKL.h
    +./Eigen/src/Core/products/GeneralMatrixMatrix_MKL.h
    +./Eigen/src/Core/products/GeneralMatrixMatrix_MKL.h
    +./Eigen/src/Core/products/TriangularMatrixVector_MKL.h
    +./Eigen/src/Core/products/TriangularMatrixVector_MKL.h
    +./Eigen/src/Core/products/GeneralMatrixMatrixTriangular_MKL.h
    +./Eigen/src/Core/products/GeneralMatrixMatrixTriangular_MKL.h
    +./Eigen/src/Core/products/TriangularSolverMatrix_MKL.h
    +./Eigen/src/Core/products/TriangularSolverMatrix_MKL.h
    +./Eigen/src/Core/util/MKL_support.h
    +./Eigen/src/Core/util/MKL_support.h
    +./Eigen/src/Cholesky/LLT_MKL.h
    +./Eigen/src/Cholesky/LLT_MKL.h
    +
    +/*
    + Copyright (c) 2011, Intel Corporation. All rights reserved.
    +
    + Redistribution and use in source and binary forms, with or without
    + modification, are permitted provided that the following conditions
    + are met:
    +
    + * Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.  *
    +   Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the
    +   distribution.  * Neither the name of Intel Corporation nor the
    +   names of its contributors may be used to endorse or promote
    +   products derived from this software without specific prior written
    +   permission.
    +
    + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + */
    +
    +----------------------------------------------------------------------
    +Following applies to:
    +  everything under ./bench/btl
    +
    +                    GNU GENERAL PUBLIC LICENSE
    +                       Version 3, 29 June 2007
    +
    + Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
    + Everyone is permitted to copy and distribute verbatim copies
    + of this license document, but changing it is not allowed.
    +
    +                            Preamble
    +
    +  The GNU General Public License is a free, copyleft license for
    +software and other kinds of works.
    +
    +  The licenses for most software and other practical works are designed
    +to take away your freedom to share and change the works.  By contrast,
    +the GNU General Public License is intended to guarantee your freedom to
    +share and change all versions of a program--to make sure it remains free
    +software for all its users.  We, the Free Software Foundation, use the
    +GNU General Public License for most of our software; it applies also to
    +any other work released this way by its authors.  You can apply it to
    +your programs, too.
    +
    +  When we speak of free software, we are referring to freedom, not
    +price.  Our General Public Licenses are designed to make sure that you
    +have the freedom to distribute copies of free software (and charge for
    +them if you wish), that you receive source code or can get it if you
    +want it, that you can change the software or use pieces of it in new
    +free programs, and that you know you can do these things.
    +
    +  To protect your rights, we need to prevent others from denying you
    +these rights or asking you to surrender the rights.  Therefore, you have
    +certain responsibilities if you distribute copies of the software, or if
    +you modify it: responsibilities to respect the freedom of others.
    +
    +  For example, if you distribute copies of such a program, whether
    +gratis or for a fee, you must pass on to the recipients the same
    +freedoms that you received.  You must make sure that they, too, receive
    +or can get the source code.  And you must show them these terms so they
    +know their rights.
    +
    +  Developers that use the GNU GPL protect your rights with two steps:
    +(1) assert copyright on the software, and (2) offer you this License
    +giving you legal permission to copy, distribute and/or modify it.
    +
    +  For the developers' and authors' protection, the GPL clearly explains
    +that there is no warranty for this free software.  For both users' and
    +authors' sake, the GPL requires that modified versions be marked as
    +changed, so that their problems will not be attributed erroneously to
    +authors of previous versions.
    +
    +  Some devices are designed to deny users access to install or run
    +modified versions of the software inside them, although the manufacturer
    +can do so.  This is fundamentally incompatible with the aim of
    +protecting users' freedom to change the software.  The systematic
    +pattern of such abuse occurs in the area of products for individuals to
    +use, which is precisely where it is most unacceptable.  Therefore, we
    +have designed this version of the GPL to prohibit the practice for those
    +products.  If such problems arise substantially in other domains, we
    +stand ready to extend this provision to those domains in future versions
    +of the GPL, as needed to protect the freedom of users.
    +
    +  Finally, every program is threatened constantly by software patents.
    +States should not allow patents to restrict development and use of
    +software on general-purpose computers, but in those that do, we wish to
    +avoid the special danger that patents applied to a free program could
    +make it effectively proprietary.  To prevent this, the GPL assures that
    +patents cannot be used to render the program non-free.
    +
    +  The precise terms and conditions for copying, distribution and
    +modification follow.
    +
    +                       TERMS AND CONDITIONS
    +
    +  0. Definitions.
    +
    +  "This License" refers to version 3 of the GNU General Public License.
    +
    +  "Copyright" also means copyright-like laws that apply to other kinds
    +of works, such as semiconductor masks.
    +
    +  "The Program" refers to any copyrightable work licensed under this
    +License.  Each licensee is addressed as "you".  "Licensees" and
    +"recipients" may be individuals or organizations.
    +
    +  To "modify" a work means to copy from or adapt all or part of the work
    +in a fashion requiring copyright permission, other than the making of an
    +exact copy.  The resulting work is called a "modified version" of the
    +earlier work or a work "based on" the earlier work.
    +
    +  A "covered work" means either the unmodified Program or a work based
    +on the Program.
    +
    +  To "propagate" a work means to do anything with it that, without
    +permission, would make you directly or secondarily liable for
    +infringement under applicable copyright law, except executing it on a
    +computer or modifying a private copy.  Propagation includes copying,
    +distribution (with or without modification), making available to the
    +public, and in some countries other activities as well.
    +
    +  To "convey" a work means any kind of propagation that enables other
    +parties to make or receive copies.  Mere interaction with a user through
    +a computer network, with no transfer of a copy, is not conveying.
    +
    +  An interactive user interface displays "Appropriate Legal Notices"
    +to the extent that it includes a convenient and prominently visible
    +feature that (1) displays an appropriate copyright notice, and (2)
    +tells the user that there is no warranty for the work (except to the
    +extent that warranties are provided), that licensees may convey the
    +work under this License, and how to view a copy of this License.  If
    +the interface presents a list of user commands or options, such as a
    +menu, a prominent item in the list meets this criterion.
    +
    +  1. Source Code.
    +
    +  The "source code" for a work means the preferred form of the work
    +for making modifications to it.  "Object code" means any non-source
    +form of a work.
    +
    +  A "Standard Interface" means an interface that either is an official
    +standard defined by a recognized standards body, or, in the case of
    +interfaces specified for a particular programming language, one that
    +is widely used among developers working in that language.
    +
    +  The "System Libraries" of an executable work include anything, other
    +than the work as a whole, that (a) is included in the normal form of
    +packaging a Major Component, but which is not part of that Major
    +Component, and (b) serves only to enable use of the work with that
    +Major Component, or to implement a Standard Interface for which an
    +implementation is available to the public in source code form.  A
    +"Major Component", in this context, means a major essential component
    +(kernel, window system, and so on) of the specific operating system
    +(if any) on which the executable work runs, or a compiler used to
    +produce the work, or an object code interpreter used to run it.
    +
    +  The "Corresponding Source" for a work in object code form means all
    +the source code needed to generate, install, and (for an executable
    +work) run the object code and to modify the work, including scripts to
    +control those activities.  However, it does not include the work's
    +System Libraries, or general-purpose tools or generally available free
    +programs which are used unmodified in performing those activities but
    +which are not part of the work.  For example, Corresponding Source
    +includes interface definition files associated with source files for
    +the work, and the source code for shared libraries and dynamically
    +linked subprograms that the work is specifically designed to require,
    +such as by intimate data communication or control flow between those
    +subprograms and other parts of the work.
    +
    +  The Corresponding Source need not include anything that users
    +can regenerate automatically from other parts of the Corresponding
    +Source.
    +
    +  The Corresponding Source for a work in source code form is that
    +same work.
    +
    +  2. Basic Permissions.
    +
    +  All rights granted under this License are granted for the term of
    +copyright on the Program, and are irrevocable provided the stated
    +conditions are met.  This License explicitly affirms your unlimited
    +permission to run the unmodified Program.  The output from running a
    +covered work is covered by this License only if the output, given its
    +content, constitutes a covered work.  This License acknowledges your
    +rights of fair use or other equivalent, as provided by copyright law.
    +
    +  You may make, run and propagate covered works that you do not
    +convey, without conditions so long as your license otherwise remains
    +in force.  You may convey covered works to others for the sole purpose
    +of having them make modifications exclusively for you, or provide you
    +with facilities for running those works, provided that you comply with
    +the terms of this License in conveying all material for which you do
    +not control copyright.  Those thus making or running the covered works
    +for you must do so exclusively on your behalf, under your direction
    +and control, on terms that prohibit them from making any copies of
    +your copyrighted material outside their relationship with you.
    +
    +  Conveying under any other circumstances is permitted solely under
    +the conditions stated below.  Sublicensing is not allowed; section 10
    +makes it unnecessary.
    +
    +  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
    +
    +  No covered work shall be deemed part of an effective technological
    +measure under any applicable law fulfilling obligations under article
    +11 of the WIPO copyright treaty adopted on 20 December 1996, or
    +similar laws prohibiting or restricting circumvention of such
    +measures.
    +
    +  When you convey a covered work, you waive any legal power to forbid
    +circumvention of technological measures to the extent such circumvention
    +is effected by exercising rights under this License with respect to
    +the covered work, and you disclaim any intention to limit operation or
    +modification of the work as a means of enforcing, against the work's
    +users, your or third parties' legal rights to forbid circumvention of
    +technological measures.
    +
    +  4. Conveying Verbatim Copies.
    +
    +  You may convey verbatim copies of the Program's source code as you
    +receive it, in any medium, provided that you conspicuously and
    +appropriately publish on each copy an appropriate copyright notice;
    +keep intact all notices stating that this License and any
    +non-permissive terms added in accord with section 7 apply to the code;
    +keep intact all notices of the absence of any warranty; and give all
    +recipients a copy of this License along with the Program.
    +
    +  You may charge any price or no price for each copy that you convey,
    +and you may offer support or warranty protection for a fee.
    +
    +  5. Conveying Modified Source Versions.
    +
    +  You may convey a work based on the Program, or the modifications to
    +produce it from the Program, in the form of source code under the
    +terms of section 4, provided that you also meet all of these conditions:
    +
    +    a) The work must carry prominent notices stating that you modified
    +    it, and giving a relevant date.
    +
    +    b) The work must carry prominent notices stating that it is
    +    released under this License and any conditions added under section
    +    7.  This requirement modifies the requirement in section 4 to
    +    "keep intact all notices".
    +
    +    c) You must license the entire work, as a whole, under this
    +    License to anyone who comes into possession of a copy.  This
    +    License will therefore apply, along with any applicable section 7
    +    additional terms, to the whole of the work, and all its parts,
    +    regardless of how they are packaged.  This License gives no
    +    permission to license the work in any other way, but it does not
    +    invalidate such permission if you have separately received it.
    +
    +    d) If the work has interactive user interfaces, each must display
    +    Appropriate Legal Notices; however, if the Program has interactive
    +    interfaces that do not display Appropriate Legal Notices, your
    +    work need not make them do so.
    +
    +  A compilation of a covered work with other separate and independent
    +works, which are not by their nature extensions of the covered work,
    +and which are not combined with it such as to form a larger program,
    +in or on a volume of a storage or distribution medium, is called an
    +"aggregate" if the compilation and its resulting copyright are not
    +used to limit the access or legal rights of the compilation's users
    +beyond what the individual works permit.  Inclusion of a covered work
    +in an aggregate does not cause this License to apply to the other
    +parts of the aggregate.
    +
    +  6. Conveying Non-Source Forms.
    +
    +  You may convey a covered work in object code form under the terms
    +of sections 4 and 5, provided that you also convey the
    +machine-readable Corresponding Source under the terms of this License,
    +in one of these ways:
    +
    +    a) Convey the object code in, or embodied in, a physical product
    +    (including a physical distribution medium), accompanied by the
    +    Corresponding Source fixed on a durable physical medium
    +    customarily used for software interchange.
    +
    +    b) Convey the object code in, or embodied in, a physical product
    +    (including a physical distribution medium), accompanied by a
    +    written offer, valid for at least three years and valid for as
    +    long as you offer spare parts or customer support for that product
    +    model, to give anyone who possesses the object code either (1) a
    +    copy of the Corresponding Source for all the software in the
    +    product that is covered by this License, on a durable physical
    +    medium customarily used for software interchange, for a price no
    +    more than your reasonable cost of physically performing this
    +    conveying of source, or (2) access to copy the
    +    Corresponding Source from a network server at no charge.
    +
    +    c) Convey individual copies of the object code with a copy of the
    +    written offer to provide the Corresponding Source.  This
    +    alternative is allowed only occasionally and noncommercially, and
    +    only if you received the object code with such an offer, in accord
    +    with subsection 6b.
    +
    +    d) Convey the object code by offering access from a designated
    +    place (gratis or for a charge), and offer equivalent access to the
    +    Corresponding Source in the same way through the same place at no
    +    further charge.  You need not require recipients to copy the
    +    Corresponding Source along with the object code.  If the place to
    +    copy the object code is a network server, the Corresponding Source
    +    may be on a different server (operated by you or a third party)
    +    that supports equivalent copying facilities, provided you maintain
    +    clear directions next to the object code saying where to find the
    +    Corresponding Source.  Regardless of what server hosts the
    +    Corresponding Source, you remain obligated to ensure that it is
    +    available for as long as needed to satisfy these requirements.
    +
    +    e) Convey the object code using peer-to-peer transmission, provided
    +    you inform other peers where the object code and Corresponding
    +    Source of the work are being offered to the general public at no
    +    charge under subsection 6d.
    +
    +  A separable portion of the object code, whose source code is excluded
    +from the Corresponding Source as a System Library, need not be
    +included in conveying the object code work.
    +
    +  A "User Product" is either (1) a "consumer product", which means any
    +tangible personal property which is normally used for personal,
    +family, or household purposes, or (2) anything designed or sold for
    +incorporation into a dwelling.  In determining whether a product is a
    +consumer product, doubtful cases shall be resolved in favor of
    +coverage.  For a particular product received by a particular user,
    +"normally used" refers to a typical or common use of that class of
    +product, regardless of the status of the particular user or of the way
    +in which the particular user actually uses, or expects or is expected
    +to use, the product.  A product is a consumer product regardless of
    +whether the product has substantial commercial, industrial or
    +non-consumer uses, unless such uses represent the only significant
    +mode of use of the product.
    +
    +  "Installation Information" for a User Product means any methods,
    +procedures, authorization keys, or other information required to
    +install and execute modified versions of a covered work in that User
    +Product from a modified version of its Corresponding Source.  The
    +information must suffice to ensure that the continued functioning of
    +the modified object code is in no case prevented or interfered with
    +solely because modification has been made.
    +
    +  If you convey an object code work under this section in, or with, or
    +specifically for use in, a User Product, and the conveying occurs as
    +part of a transaction in which the right of possession and use of the
    +User Product is transferred to the recipient in perpetuity or for a
    +fixed term (regardless of how the transaction is characterized), the
    +Corresponding Source conveyed under this section must be accompanied
    +by the Installation Information.  But this requirement does not apply
    +if neither you nor any third party retains the ability to install
    +modified object code on the User Product (for example, the work has
    +been installed in ROM).
    +
    +  The requirement to provide Installation Information does not include
    +a requirement to continue to provide support service, warranty, or
    +updates for a work that has been modified or installed by the
    +recipient, or for the User Product in which it has been modified or
    +installed.  Access to a network may be denied when the modification
    +itself materially and adversely affects the operation of the network
    +or violates the rules and protocols for communication across the
    +network.
    +
    +  Corresponding Source conveyed, and Installation Information provided,
    +in accord with this section must be in a format that is publicly
    +documented (and with an implementation available to the public in
    +source code form), and must require no special password or key for
    +unpacking, reading or copying.
    +
    +  7. Additional Terms.
    +
    +  "Additional permissions" are terms that supplement the terms of this
    +License by making exceptions from one or more of its conditions.
    +Additional permissions that are applicable to the entire Program shall
    +be treated as though they were included in this License, to the extent
    +that they are valid under applicable law.  If additional permissions
    +apply only to part of the Program, that part may be used separately
    +under those permissions, but the entire Program remains governed by
    +this License without regard to the additional permissions.
    +
    +  When you convey a copy of a covered work, you may at your option
    +remove any additional permissions from that copy, or from any part of
    +it.  (Additional permissions may be written to require their own
    +removal in certain cases when you modify the work.)  You may place
    +additional permissions on material, added by you to a covered work,
    +for which you have or can give appropriate copyright permission.
    +
    +  Notwithstanding any other provision of this License, for material
    +you add to a covered work, you may (if authorized by the copyright
    +holders of that material) supplement the terms of this License with
    +terms:
    +
    +    a) Disclaiming warranty or limiting liability differently from the
    +    terms of sections 15 and 16 of this License; or
    +
    +    b) Requiring preservation of specified reasonable legal notices or
    +    author attributions in that material or in the Appropriate Legal
    +    Notices displayed by works containing it; or
    +
    +    c) Prohibiting misrepresentation of the origin of that material, or
    +    requiring that modified versions of such material be marked in
    +    reasonable ways as different from the original version; or
    +
    +    d) Limiting the use for publicity purposes of names of licensors or
    +    authors of the material; or
    +
    +    e) Declining to grant rights under trademark law for use of some
    +    trade names, trademarks, or service marks; or
    +
    +    f) Requiring indemnification of licensors and authors of that
    +    material by anyone who conveys the material (or modified versions
    +    of it) with contractual assumptions of liability to the recipient,
    +    for any liability that these contractual assumptions directly
    +    impose on those licensors and authors.
    +
    +  All other non-permissive additional terms are considered "further
    +restrictions" within the meaning of section 10.  If the Program as you
    +received it, or any part of it, contains a notice stating that it is
    +governed by this License along with a term that is a further
    +restriction, you may remove that term.  If a license document contains
    +a further restriction but permits relicensing or conveying under this
    +License, you may add to a covered work material governed by the terms
    +of that license document, provided that the further restriction does
    +not survive such relicensing or conveying.
    +
    +  If you add terms to a covered work in accord with this section, you
    +must place, in the relevant source files, a statement of the
    +additional terms that apply to those files, or a notice indicating
    +where to find the applicable terms.
    +
    +  Additional terms, permissive or non-permissive, may be stated in the
    +form of a separately written license, or stated as exceptions;
    +the above requirements apply either way.
    +
    +  8. Termination.
    +
    +  You may not propagate or modify a covered work except as expressly
    +provided under this License.  Any attempt otherwise to propagate or
    +modify it is void, and will automatically terminate your rights under
    +this License (including any patent licenses granted under the third
    +paragraph of section 11).
    +
    +  However, if you cease all violation of this License, then your
    +license from a particular copyright holder is reinstated (a)
    +provisionally, unless and until the copyright holder explicitly and
    +finally terminates your license, and (b) permanently, if the copyright
    +holder fails to notify you of the violation by some reasonable means
    +prior to 60 days after the cessation.
    +
    +  Moreover, your license from a particular copyright holder is
    +reinstated permanently if the copyright holder notifies you of the
    +violation by some reasonable means, this is the first time you have
    +received notice of violation of this License (for any work) from that
    +copyright holder, and you cure the violation prior to 30 days after
    +your receipt of the notice.
    +
    +  Termination of your rights under this section does not terminate the
    +licenses of parties who have received copies or rights from you under
    +this License.  If your rights have been terminated and not permanently
    +reinstated, you do not qualify to receive new licenses for the same
    +material under section 10.
    +
    +  9. Acceptance Not Required for Having Copies.
    +
    +  You are not required to accept this License in order to receive or
    +run a copy of the Program.  Ancillary propagation of a covered work
    +occurring solely as a consequence of using peer-to-peer transmission
    +to receive a copy likewise does not require acceptance.  However,
    +nothing other than this License grants you permission to propagate or
    +modify any covered work.  These actions infringe copyright if you do
    +not accept this License.  Therefore, by modifying or propagating a
    +covered work, you indicate your acceptance of this License to do so.
    +
    +  10. Automatic Licensing of Downstream Recipients.
    +
    +  Each time you convey a covered work, the recipient automatically
    +receives a license from the original licensors, to run, modify and
    +propagate that work, subject to this License.  You are not responsible
    +for enforcing compliance by third parties with this License.
    +
    +  An "entity transaction" is a transaction transferring control of an
    +organization, or substantially all assets of one, or subdividing an
    +organization, or merging organizations.  If propagation of a covered
    +work results from an entity transaction, each party to that
    +transaction who receives a copy of the work also receives whatever
    +licenses to the work the party's predecessor in interest had or could
    +give under the previous paragraph, plus a right to possession of the
    +Corresponding Source of the work from the predecessor in interest, if
    +the predecessor has it or can get it with reasonable efforts.
    +
    +  You may not impose any further restrictions on the exercise of the
    +rights granted or affirmed under this License.  For example, you may
    +not impose a license fee, royalty, or other charge for exercise of
    +rights granted under this License, and you may not initiate litigation
    +(including a cross-claim or counterclaim in a lawsuit) alleging that
    +any patent claim is infringed by making, using, selling, offering for
    +sale, or importing the Program or any portion of it.
    +
    +  11. Patents.
    +
    +  A "contributor" is a copyright holder who authorizes use under this
    +License of the Program or a work on which the Program is based.  The
    +work thus licensed is called the contributor's "contributor version".
    +
    +  A contributor's "essential patent claims" are all patent claims
    +owned or controlled by the contributor, whether already acquired or
    +hereafter acquired, that would be infringed by some manner, permitted
    +by this License, of making, using, or selling its contributor version,
    +but do not include claims that would be infringed only as a
    +consequence of further modification of the contributor version.  For
    +purposes of this definition, "control" includes the right to grant
    +patent sublicenses in a manner consistent with the requirements of
    +this License.
    +
    +  Each contributor grants you a non-exclusive, worldwide, royalty-free
    +patent license under the contributor's essential patent claims, to
    +make, use, sell, offer for sale, import and otherwise run, modify and
    +propagate the contents of its contributor version.
    +
    +  In the following three paragraphs, a "patent license" is any express
    +agreement or commitment, however denominated, not to enforce a patent
    +(such as an express permission to practice a patent or covenant not to
    +sue for patent infringement).  To "grant" such a patent license to a
    +party means to make such an agreement or commitment not to enforce a
    +patent against the party.
    +
    +  If you convey a covered work, knowingly relying on a patent license,
    +and the Corresponding Source of the work is not available for anyone
    +to copy, free of charge and under the terms of this License, through a
    +publicly available network server or other readily accessible means,
    +then you must either (1) cause the Corresponding Source to be so
    +available, or (2) arrange to deprive yourself of the benefit of the
    +patent license for this particular work, or (3) arrange, in a manner
    +consistent with the requirements of this License, to extend the patent
    +license to downstream recipients.  "Knowingly relying" means you have
    +actual knowledge that, but for the patent license, your conveying the
    +covered work in a country, or your recipient's use of the covered work
    +in a country, would infringe one or more identifiable patents in that
    +country that you have reason to believe are valid.
    +
    +  If, pursuant to or in connection with a single transaction or
    +arrangement, you convey, or propagate by procuring conveyance of, a
    +covered work, and grant a patent license to some of the parties
    +receiving the covered work authorizing them to use, propagate, modify
    +or convey a specific copy of the covered work, then the patent license
    +you grant is automatically extended to all recipients of the covered
    +work and works based on it.
    +
    +  A patent license is "discriminatory" if it does not include within
    +the scope of its coverage, prohibits the exercise of, or is
    +conditioned on the non-exercise of one or more of the rights that are
    +specifically granted under this License.  You may not convey a covered
    +work if you are a party to an arrangement with a third party that is
    +in the business of distributing software, under which you make payment
    +to the third party based on the extent of your activity of conveying
    +the work, and under which the third party grants, to any of the
    +parties who would receive the covered work from you, a discriminatory
    +patent license (a) in connection with copies of the covered work
    +conveyed by you (or copies made from those copies), or (b) primarily
    +for and in connection with specific products or compilations that
    +contain the covered work, unless you entered into that arrangement,
    +or that patent license was granted, prior to 28 March 2007.
    +
    +  Nothing in this License shall be construed as excluding or limiting
    +any implied license or other defenses to infringement that may
    +otherwise be available to you under applicable patent law.
    +
    +  12. No Surrender of Others' Freedom.
    +
    +  If conditions are imposed on you (whether by court order, agreement
    +or otherwise) that contradict the conditions of this License, they do
    +not excuse you from the conditions of this License.  If you cannot
    +convey a covered work so as to satisfy simultaneously your obligations
    +under this License and any other pertinent obligations, then as a
    +consequence you may not convey it at all.  For example, if you agree
    +to terms that obligate you to collect a royalty for further conveying
    +from those to whom you convey the Program, the only way you could
    +satisfy both those terms and this License would be to refrain entirely
    +from conveying the Program.
    +
    +  13. Use with the GNU Affero General Public License.
    +
    +  Notwithstanding any other provision of this License, you have
    +permission to link or combine any covered work with a work licensed
    +under version 3 of the GNU Affero General Public License into a single
    +combined work, and to convey the resulting work.  The terms of this
    +License will continue to apply to the part which is the covered work,
    +but the special requirements of the GNU Affero General Public License,
    +section 13, concerning interaction through a network will apply to the
    +combination as such.
    +
    +  14. Revised Versions of this License.
    +
    +  The Free Software Foundation may publish revised and/or new versions
    +of the GNU General Public License from time to time.  Such new
    +versions will be similar in spirit to the present version, but may
    +differ in detail to address new problems or concerns.
    +
    +  Each version is given a distinguishing version number.  If the
    +Program specifies that a certain numbered version of the GNU General
    +Public License "or any later version" applies to it, you have the
    +option of following the terms and conditions either of that numbered
    +version or of any later version published by the Free Software
    +Foundation.  If the Program does not specify a version number of the
    +GNU General Public License, you may choose any version ever published
    +by the Free Software Foundation.
    +
    +  If the Program specifies that a proxy can decide which future
    +versions of the GNU General Public License can be used, that proxy's
    +public statement of acceptance of a version permanently authorizes you
    +to choose that version for the Program.
    +
    +  Later license versions may give you additional or different
    +permissions.  However, no additional obligations are imposed on any
    +author or copyright holder as a result of your choosing to follow a
    +later version.
    +
    +  15. Disclaimer of Warranty.
    +
    +  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
    +APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
    +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT
    +WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND
    +PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE PROGRAM PROVE
    +DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR
    +CORRECTION.
    +
    +  16. Limitation of Liability.
    +
    +  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
    +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES
    +AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR
    +DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL
    +DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM
    +(INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED
    +INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF
    +THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER
    +OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
    +
    +  17. Interpretation of Sections 15 and 16.
    +
    +  If the disclaimer of warranty and limitation of liability provided
    +above cannot be given local legal effect according to their terms,
    +reviewing courts shall apply local law that most closely approximates
    +an absolute waiver of all civil liability in connection with the
    +Program, unless a warranty or assumption of liability accompanies a
    +copy of the Program in return for a fee.
    +
    +                     END OF TERMS AND CONDITIONS
    +
    +            How to Apply These Terms to Your New Programs
    +
    +  If you develop a new program, and you want it to be of the greatest
    +possible use to the public, the best way to achieve this is to make it
    +free software which everyone can redistribute and change under these
    +terms.
    +
    +  To do so, attach the following notices to the program.  It is safest
    +to attach them to the start of each source file to most effectively
    +state the exclusion of warranty; and each file should have at least
    +the "copyright" line and a pointer to where the full notice is found.
    +
    +    <one line to give the program's name and a brief idea of what it
    +    does.>
    +    Copyright (C) <year> <name of author>
    +
    +    This program is free software: you can redistribute it and/or
    +    modify it under the terms of the GNU General Public License as
    +    published by the Free Software Foundation, either version 3 of the
    +    License, or (at your option) any later version.
    +
    +    This program is distributed in the hope that it will be useful,
    +    but WITHOUT ANY WARRANTY; without even the implied warranty of
    +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    +    GNU General Public License for more details.
    +
    +    You should have received a copy of the GNU General Public License
    +    along with this program.  If not, see
    +    <http://www.gnu.org/licenses/>.
    +
    +Also add information on how to contact you by electronic and paper mail.
    +
    +  If the program does terminal interaction, make it output a short
    +notice like this when it starts in an interactive mode:
    +
    +    <program> Copyright (C) <year> <name of author> This program comes
    +    with ABSOLUTELY NO WARRANTY; for details type `show w'.  This is
    +    free software, and you are welcome to redistribute it under
    +    certain conditions; type `show c' for details.
    +
    +The hypothetical commands `show w' and `show c' should show the
    +appropriate parts of the General Public License.  Of course, your
    +program's commands might be different; for a GUI interface, you would
    +use an "about box".
    +
    +  You should also get your employer (if you work as a programmer) or
    +school, if any, to sign a "copyright disclaimer" for the program, if
    +necessary.  For more information on this, and how to apply and follow
    +the GNU GPL, see <http://www.gnu.org/licenses/>.
    +
    +  The GNU General Public License does not permit incorporating your
    +program into proprietary programs.  If your program is a subroutine
    +library, you may consider it more useful to permit linking proprietary
    +applications with the library.  If this is what you want to do, use
    +the GNU Lesser General Public License instead of this License.  But
    +first, please read <http://www.gnu.org/philosophy/why-not-lgpl.html>.
    +
    +
    +----------------------------------------------------------------------
    +Following applies to:
    +./test/metis_support.cpp
    +./test/sparselu.cpp
    +./unsupported/test/mpreal/mpreal.h
    +./unsupported/Eigen/src/IterativeSolvers/IterationController.h
    +./unsupported/Eigen/src/IterativeSolvers/ConstrainedConjGrad.h
    +./unsupported/Eigen/src/Eigenvalues/ArpackSelfAdjointEigenSolver.h
    +./Eigen/src/OrderingMethods/Amd.h
    +./Eigen/src/SparseCholesky/SimplicialCholesky_impl.h
    +
    +                  GNU LESSER GENERAL PUBLIC LICENSE
    +                       Version 3, 29 June 2007
    +
    + Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
    + Everyone is permitted to copy and distribute verbatim copies
    + of this license document, but changing it is not allowed.
    +
    +
    +  This version of the GNU Lesser General Public License incorporates
    +the terms and conditions of version 3 of the GNU General Public
    +License, supplemented by the additional permissions listed below.
    +
    +  0. Additional Definitions.
    +
    +  As used herein, "this License" refers to version 3 of the GNU Lesser
    +General Public License, and the "GNU GPL" refers to version 3 of the
    +GNU General Public License.
    +
    +  "The Library" refers to a covered work governed by this License,
    +other than an Application or a Combined Work as defined below.
    +
    +  An "Application" is any work that makes use of an interface provided
    +by the Library, but which is not otherwise based on the Library.
    +Defining a subclass of a class defined by the Library is deemed a mode
    +of using an interface provided by the Library.
    +
    +  A "Combined Work" is a work produced by combining or linking an
    +Application with the Library.  The particular version of the Library
    +with which the Combined Work was made is also called the "Linked
    +Version".
    +
    +  The "Minimal Corresponding Source" for a Combined Work means the
    +Corresponding Source for the Combined Work, excluding any source code
    +for portions of the Combined Work that, considered in isolation, are
    +based on the Application, and not on the Linked Version.
    +
    +  The "Corresponding Application Code" for a Combined Work means the
    +object code and/or source code for the Application, including any data
    +and utility programs needed for reproducing the Combined Work from the
    +Application, but excluding the System Libraries of the Combined Work.
    +
    +  1. Exception to Section 3 of the GNU GPL.
    +
    +  You may convey a covered work under sections 3 and 4 of this License
    +without being bound by section 3 of the GNU GPL.
    +
    +  2. Conveying Modified Versions.
    +
    +  If you modify a copy of the Library, and, in your modifications, a
    +facility refers to a function or data to be supplied by an Application
    +that uses the facility (other than as an argument passed when the
    +facility is invoked), then you may convey a copy of the modified
    +version:
    +
    +   a) under this License, provided that you make a good faith effort to
    +   ensure that, in the event an Application does not supply the
    +   function or data, the facility still operates, and performs
    +   whatever part of its purpose remains meaningful, or
    +
    +   b) under the GNU GPL, with none of the additional permissions of
    +   this License applicable to that copy.
    +
    +  3. Object Code Incorporating Material from Library Header Files.
    +
    +  The object code form of an Application may incorporate material from
    +a header file that is part of the Library.  You may convey such object
    +code under terms of your choice, provided that, if the incorporated
    +material is not limited to numerical parameters, data structure
    +layouts and accessors, or small macros, inline functions and templates
    +(ten or fewer lines in length), you do both of the following:
    +
    +   a) Give prominent notice with each copy of the object code that the
    +   Library is used in it and that the Library and its use are
    +   covered by this License.
    +
    +   b) Accompany the object code with a copy of the GNU GPL and this
    +   license document.
    +
    +  4. Combined Works.
    +
    +  You may convey a Combined Work under terms of your choice that,
    +taken together, effectively do not restrict modification of the
    +portions of the Library contained in the Combined Work and reverse
    +engineering for debugging such modifications, if you also do each of
    +the following:
    +
    +   a) Give prominent notice with each copy of the Combined Work that
    +   the Library is used in it and that the Library and its use are
    +   covered by this License.
    +
    +   b) Accompany the Combined Work with a copy of the GNU GPL and this
    +   license document.
    +
    +   c) For a Combined Work that displays copyright notices during
    +   execution, include the copyright notice for the Library among
    +   these notices, as well as a reference directing the user to the
    +   copies of the GNU GPL and this license document.
    +
    +   d) Do one of the following:
    +
    +       0) Convey the Minimal Corresponding Source under the terms of
    +       this License, and the Corresponding Application Code in a form
    +       suitable for, and under terms that permit, the user to
    +       recombine or relink the Application with a modified version of
    +       the Linked Version to produce a modified Combined Work, in the
    +       manner specified by section 6 of the GNU GPL for conveying
    +       Corresponding Source.
    +
    +       1) Use a suitable shared library mechanism for linking with the
    +       Library.  A suitable mechanism is one that (a) uses at run time
    +       a copy of the Library already present on the user's computer
    +       system, and (b) will operate properly with a modified version
    +       of the Library that is interface-compatible with the Linked
    +       Version.
    +
    +   e) Provide Installation Information, but only if you would otherwise
    +   be required to provide such information under section 6 of the
    +   GNU GPL, and only to the extent that such information is
    +   necessary to install and execute a modified version of the
    +   Combined Work produced by recombining or relinking the
    +   Application with a modified version of the Linked Version. (If
    +   you use option 4d0, the Installation Information must accompany
    +   the Minimal Corresponding Source and Corresponding Application
    +   Code. If you use option 4d1, you must provide the Installation
    +   Information in the manner specified by section 6 of the GNU GPL
    +   for conveying Corresponding Source.)
    +
    +  5. Combined Libraries.
    +
    +  You may place library facilities that are a work based on the
    +Library side by side in a single library together with other library
    +facilities that are not Applications and are not covered by this
    +License, and convey such a combined library under terms of your
    +choice, if you do both of the following:
    +
    +   a) Accompany the combined library with a copy of the same work based
    +   on the Library, uncombined with any other library facilities,
    +   conveyed under the terms of this License.
    +
    +   b) Give prominent notice with the combined library that part of it
    +   is a work based on the Library, and explaining where to find the
    +   accompanying uncombined form of the same work.
    +
    +  6. Revised Versions of the GNU Lesser General Public License.
    +
    +  The Free Software Foundation may publish revised and/or new versions
    +of the GNU Lesser General Public License from time to time. Such new
    +versions will be similar in spirit to the present version, but may
    +differ in detail to address new problems or concerns.
    +
    +  Each version is given a distinguishing version number. If the
    +Library as you received it specifies that a certain numbered version
    +of the GNU Lesser General Public License "or any later version"
    +applies to it, you have the option of following the terms and
    +conditions either of that published version or of any later version
    +published by the Free Software Foundation. If the Library as you
    +received it does not specify a version number of the GNU Lesser
    +General Public License, you may choose any version of the GNU Lesser
    +General Public License ever published by the Free Software Foundation.
    +
    +  If the Library as you received it specifies that a proxy can decide
    +whether future versions of the GNU Lesser General Public License shall
    +apply, that proxy's public statement of acceptance of any version is
    +permanent authorization for you to choose that version for the
    +Library.
    +
    +
    +----------------------------------------------------------------------
    +Following applies to:
    +./unsupported/Eigen/src/LevenbergMarquardt/LevenbergMarquardt.h
    +./unsupported/Eigen/src/LevenbergMarquardt/LMcovar.h
    +./unsupported/Eigen/src/LevenbergMarquardt/LMonestep.h
    +./unsupported/Eigen/src/LevenbergMarquardt/LMpar.h
    +./unsupported/Eigen/src/LevenbergMarquardt/LMqrsolv.h
    +
    +Minpack Copyright Notice (1999) University of Chicago.  All rights
    +reserved
    +
    +Redistribution and use in source and binary forms, with or
    +without modification, are permitted provided that the
    +following conditions are met:
    +
    +1. Redistributions of source code must retain the above
    +copyright notice, this list of conditions and the following
    +disclaimer.
    +
    +2. Redistributions in binary form must reproduce the above
    +copyright notice, this list of conditions and the following
    +disclaimer in the documentation and/or other materials
    +provided with the distribution.
    +
    +3. The end-user documentation included with the
    +redistribution, if any, must include the following
    +acknowledgment:
    +
    +   "This product includes software developed by the
    +   University of Chicago, as Operator of Argonne National
    +   Laboratory.
    +
    +Alternately, this acknowledgment may appear in the software
    +itself, if and wherever such third-party acknowledgments
    +normally appear.
    +
    +4. WARRANTY DISCLAIMER. THE SOFTWARE IS SUPPLIED "AS IS"
    +WITHOUT WARRANTY OF ANY KIND. THE COPYRIGHT HOLDER, THE
    +UNITED STATES, THE UNITED STATES DEPARTMENT OF ENERGY, AND
    +THEIR EMPLOYEES: (1) DISCLAIM ANY WARRANTIES, EXPRESS OR
    +IMPLIED, INCLUDING BUT NOT LIMITED TO ANY IMPLIED WARRANTIES
    +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE
    +OR NON-INFRINGEMENT, (2) DO NOT ASSUME ANY LEGAL LIABILITY
    +OR RESPONSIBILITY FOR THE ACCURACY, COMPLETENESS, OR
    +USEFULNESS OF THE SOFTWARE, (3) DO NOT REPRESENT THAT USE OF
    +THE SOFTWARE WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS, (4)
    +DO NOT WARRANT THAT THE SOFTWARE WILL FUNCTION
    +UNINTERRUPTED, THAT IT IS ERROR-FREE OR THAT ANY ERRORS WILL
    +BE CORRECTED.
    +
    +5. LIMITATION OF LIABILITY. IN NO EVENT WILL THE COPYRIGHT
    +HOLDER, THE UNITED STATES, THE UNITED STATES DEPARTMENT OF
    +ENERGY, OR THEIR EMPLOYEES: BE LIABLE FOR ANY INDIRECT,
    +INCIDENTAL, CONSEQUENTIAL, SPECIAL OR PUNITIVE DAMAGES OF
    +ANY KIND OR NATURE, INCLUDING BUT NOT LIMITED TO LOSS OF
    +PROFITS OR LOSS OF DATA, FOR ANY REASON WHATSOEVER, WHETHER
    +SUCH LIABILITY IS ASSERTED ON THE BASIS OF CONTRACT, TORT
    +(INCLUDING NEGLIGENCE OR STRICT LIABILITY), OR OTHERWISE,
    +EVEN IF ANY OF SAID PARTIES HAS BEEN WARNED OF THE
    +POSSIBILITY OF SUCH LOSS OR DAMAGES.
    +
    +
    +****************************
    +freetype2
    +****************************
    +FreeType
    +
    +Quoth http://freetype.sourceforge.net/license.html:
    +
    +FreeType comes with two licenses from which you can choose the one
    +which fits your needs best.
    +
    +   * The FreeType License is the most commonly used one.
    +    It is a BSD-style license with a credit clause (and thus not
    +    compatible with the GPL).
    +
    +  * The GNU General Public License (GPL).
    +    For all projects which use the GPL also or which need a license
    +    compatible to the GPL.
    +
    +FTL.TXT:
    +---
    +
    +                    The FreeType Project LICENSE
    +                    ----------------------------
    +
    +                            2006-Jan-27
    +
    +                    Copyright 1996-2002, 2006 by
    +          David Turner, Robert Wilhelm, and Werner Lemberg
    +
    +
    +
    +Introduction
    +============
    +
    +  The FreeType  Project is distributed in  several archive packages;
    +  some of them may contain, in addition to the FreeType font engine,
    +  various tools and  contributions which rely on, or  relate to, the
    +  FreeType Project.
    +
    +  This  license applies  to all  files found  in such  packages, and
    +  which do not  fall under their own explicit  license.  The license
    +  affects  thus  the  FreeType   font  engine,  the  test  programs,
    +  documentation and makefiles, at the very least.
    +
    +  This  license   was  inspired  by  the  BSD,   Artistic,  and  IJG
    +  (Independent JPEG  Group) licenses, which  all encourage inclusion
    +  and  use of  free  software in  commercial  and freeware  products
    +  alike.  As a consequence, its main points are that:
    +
    +    o We don't promise that this software works. However, we will be
    +      interested in any kind of bug reports. (`as is' distribution)
    +
    +    o You can  use this software for whatever you  want, in parts or
    +      full form, without having to pay us. (`royalty-free' usage)
    +
    +    o You may not pretend that  you wrote this software.  If you use
    +      it, or  only parts of it,  in a program,  you must acknowledge
    +      somewhere  in  your  documentation  that  you  have  used  the
    +      FreeType code. (`credits')
    +
    +  We  specifically  permit  and  encourage  the  inclusion  of  this
    +  software, with  or without modifications,  in commercial products.
    +  We  disclaim  all warranties  covering  The  FreeType Project  and
    +  assume no liability related to The FreeType Project.
    +
    +
    +  Finally,  many  people  asked  us  for  a  preferred  form  for  a
    +  credit/disclaimer to use in compliance with this license.  We thus
    +  encourage you to use the following text:
    +
    +   """
    +    Portions of this software are copyright (C) <year> The FreeType
    +    Project (www.freetype.org).  All rights reserved.
    +   """
    +
    +  Please replace <year> with the value from the FreeType version you
    +  actually use.
    +
    +
    +Legal Terms
    +===========
    +
    +0. Definitions
    +--------------
    +
    +  Throughout this license,  the terms `package', `FreeType Project',
    +  and  `FreeType  archive' refer  to  the  set  of files  originally
    +  distributed  by the  authors  (David Turner,  Robert Wilhelm,  and
    +  Werner Lemberg) as the `FreeType Project', be they named as alpha,
    +  beta or final release.
    +
    +  `You' refers to  the licensee, or person using  the project, where
    +  `using' is a generic term including compiling the project's source
    +  code as  well as linking it  to form a  `program' or `executable'.
    +  This  program is  referred to  as  `a program  using the  FreeType
    +  engine'.
    +
    +  This  license applies  to all  files distributed  in  the original
    +  FreeType  Project,   including  all  source   code,  binaries  and
    +  documentation,  unless  otherwise  stated   in  the  file  in  its
    +  original, unmodified form as  distributed in the original archive.
    +  If you are  unsure whether or not a particular  file is covered by
    +  this license, you must contact us to verify this.
    +
    +  The FreeType  Project is copyright (C) 1996-2000  by David Turner,
    +  Robert Wilhelm, and Werner Lemberg.  All rights reserved except as
    +  specified below.
    +
    +1. No Warranty
    +--------------
    +
    +  THE FREETYPE PROJECT  IS PROVIDED `AS IS' WITHOUT  WARRANTY OF ANY
    +  KIND, EITHER  EXPRESS OR IMPLIED,  INCLUDING, BUT NOT  LIMITED TO,
    +  WARRANTIES  OF  MERCHANTABILITY   AND  FITNESS  FOR  A  PARTICULAR
    +  PURPOSE.  IN NO EVENT WILL ANY OF THE AUTHORS OR COPYRIGHT HOLDERS
    +  BE LIABLE  FOR ANY DAMAGES CAUSED  BY THE USE OR  THE INABILITY TO
    +  USE, OF THE FREETYPE PROJECT.
    +
    +2. Redistribution
    +-----------------
    +
    +  This  license  grants  a  worldwide, royalty-free,  perpetual  and
    +  irrevocable right  and license to use,  execute, perform, compile,
    +  display,  copy,   create  derivative  works   of,  distribute  and
    +  sublicense the  FreeType Project (in  both source and  object code
    +  forms)  and  derivative works  thereof  for  any  purpose; and  to
    +  authorize others  to exercise  some or all  of the  rights granted
    +  herein, subject to the following conditions:
    +
    +    o Redistribution of  source code  must retain this  license file
    +      (`FTL.TXT') unaltered; any  additions, deletions or changes to
    +      the original  files must be clearly  indicated in accompanying
    +      documentation.   The  copyright   notices  of  the  unaltered,
    +      original  files must  be  preserved in  all  copies of  source
    +      files.
    +
    +    o Redistribution in binary form must provide a  disclaimer  that
    +      states  that  the software is based in part of the work of the
    +      FreeType Team,  in  the  distribution  documentation.  We also
    +      encourage you to put an URL to the FreeType web page  in  your
    +      documentation, though this isn't mandatory.
    +
    +  These conditions  apply to any  software derived from or  based on
    +  the FreeType Project,  not just the unmodified files.   If you use
    +  our work, you  must acknowledge us.  However, no  fee need be paid
    +  to us.
    +
    +3. Advertising
    +--------------
    +
    +  Neither the  FreeType authors and  contributors nor you  shall use
    +  the name of the  other for commercial, advertising, or promotional
    +  purposes without specific prior written permission.
    +
    +  We suggest,  but do not require, that  you use one or  more of the
    +  following phrases to refer  to this software in your documentation
    +  or advertising  materials: `FreeType Project',  `FreeType Engine',
    +  `FreeType library', or `FreeType Distribution'.
    +
    +  As  you have  not signed  this license,  you are  not  required to
    +  accept  it.   However,  as  the FreeType  Project  is  copyrighted
    +  material, only  this license, or  another one contracted  with the
    +  authors, grants you  the right to use, distribute,  and modify it.
    +  Therefore,  by  using,  distributing,  or modifying  the  FreeType
    +  Project, you indicate that you understand and accept all the terms
    +  of this license.
    +
    +4. Contacts
    +-----------
    +
    +  There are two mailing lists related to FreeType:
    +
    +    o freetype@nongnu.org
    +
    +      Discusses general use and applications of FreeType, as well as
    +      future and  wanted additions to the  library and distribution.
    +      If  you are looking  for support,  start in  this list  if you
    +      haven't found anything to help you in the documentation.
    +
    +    o freetype-devel@nongnu.org
    +
    +      Discusses bugs,  as well  as engine internals,  design issues,
    +      specific licenses, porting, etc.
    +
    +  Our home page can be found at
    +
    +    http://www.freetype.org
    +
    +
    +--- end of FTL.TXT ---
    +
    +
    +****************************
    +GL
    +****************************
    +Mesa Component Licenses
    +
    +Component         Location               Primary Author      License
    +----------------------------------------------------------------------------
    +Main Mesa code    src/mesa/              Brian Paul          Mesa (MIT)
    +
    +Device drivers    src/mesa/drivers/*     See drivers         See drivers
    +
    +Ext headers       include/GL/glext.h     SGI                 SGI Free B
    +                  include/GL/glxext.h
    +
    +GLUT              src/glut/              Mark Kilgard        Mark's copyright
    +
    +GLEW              src/glew-1.13.0        Nigel Stewart       Modified BSD
    +
    +Mesa GLU library  src/glu/mesa/          Brian Paul          GNU-LGPL
    +
    +SGI GLU library   src/glu/sgi/           SGI                 SGI Free B
    +
    +demo programs     progs/demos/           various             see source files
    +
    +X demos           progs/xdemos/          Brian Paul          see source files
    +
    +SGI demos         progs/samples/         SGI                 SGI copyright
    +
    +RedBook demos     progs/redbook/         SGI                 SGI copyright
    +
    +---------------------
    +Permission is hereby granted, free of charge, to any person obtaining a
    +copy of this software and associated documentation files (the "Software"),
    +to deal in the Software without restriction, including without limitation
    +the rights to use, copy, modify, merge, publish, distribute, sublicense,
    +and/or sell copies of the Software, and to permit persons to whom the
    +Software is furnished to do so, subject to the following conditions:
    +
    +The above copyright notice and this permission notice shall be included
    +in all copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
    +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
    +BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
    +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
    +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +----------------------------
    +
    +Permission to use, copy, modify, distribute, and sell this software and its
    +documentation for any purpose is hereby granted without fee, provided that
    +the above copyright notice appear in all copies and that both that
    +copyright notice and this permission notice appear in supporting
    +documentation, and that the name of Alan Hourihane not be used in
    +advertising or publicity pertaining to distribution of the software without
    +specific, written prior permission.  Alan Hourihane makes no representations
    +about the suitability of this software for any purpose.  It is provided
    +"as is" without express or implied warranty.
    +
    +ALAN HOURIHANE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
    +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
    +EVENT SHALL ALAN HOURIHANE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
    +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
    +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
    +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
    +PERFORMANCE OF THIS SOFTWARE.
    +
    +
    +----------------------------------------------------------------------
    +
    +
    +      GNU LIBRARY GENERAL PUBLIC LICENSE
    +           Version 2, June 1991
    +
    + Copyright (C) 1991 Free Software Foundation, Inc.
    +                    675 Mass Ave, Cambridge, MA 02139, USA
    + Everyone is permitted to copy and distribute verbatim copies
    + of this license document, but changing it is not allowed.
    +
    +[This is the first released version of the library GPL.  It is
    + numbered 2 because it goes with version 2 of the ordinary GPL.]
    +
    +          Preamble
    +
    +  The licenses for most software are designed to take away your
    +freedom to share and change it.  By contrast, the GNU General Public
    +Licenses are intended to guarantee your freedom to share and change
    +free software--to make sure the software is free for all its users.
    +
    +  This license, the Library General Public License, applies to some
    +specially designated Free Software Foundation software, and to any
    +other libraries whose authors decide to use it.  You can use it for
    +your libraries, too.
    +
    +  When we speak of free software, we are referring to freedom, not
    +price.  Our General Public Licenses are designed to make sure that you
    +have the freedom to distribute copies of free software (and charge for
    +this service if you wish), that you receive source code or can get it
    +if you want it, that you can change the software or use pieces of it
    +in new free programs; and that you know you can do these things.
    +
    +  To protect your rights, we need to make restrictions that forbid
    +anyone to deny you these rights or to ask you to surrender the rights.
    +These restrictions translate to certain responsibilities for you if
    +you distribute copies of the library, or if you modify it.
    +
    +  For example, if you distribute copies of the library, whether gratis
    +or for a fee, you must give the recipients all the rights that we gave
    +you.  You must make sure that they, too, receive or can get the source
    +code.  If you link a program with the library, you must provide
    +complete object files to the recipients so that they can relink them
    +with the library, after making changes to the library and recompiling
    +it.  And you must show them these terms so they know their rights.
    +
    +  Our method of protecting your rights has two steps: (1) copyright
    +the library, and (2) offer you this license which gives you legal
    +permission to copy, distribute and/or modify the library.
    +
    +  Also, for each distributor's protection, we want to make certain
    +that everyone understands that there is no warranty for this free
    +library.  If the library is modified by someone else and passed on, we
    +want its recipients to know that what they have is not the original
    +version, so that any problems introduced by others will not reflect on
    +the original authors' reputations.
    +
    +  Finally, any free program is threatened constantly by software
    +patents.  We wish to avoid the danger that companies distributing free
    +software will individually obtain patent licenses, thus in effect
    +transforming the program into proprietary software.  To prevent this,
    +we have made it clear that any patent must be licensed for everyone's
    +free use or not licensed at all.
    +
    +  Most GNU software, including some libraries, is covered by the ordinary
    +GNU General Public License, which was designed for utility programs.  This
    +license, the GNU Library General Public License, applies to certain
    +designated libraries.  This license is quite different from the ordinary
    +one; be sure to read it in full, and don't assume that anything in it is
    +the same as in the ordinary license.
    +
    +  The reason we have a separate public license for some libraries is that
    +they blur the distinction we usually make between modifying or adding to a
    +program and simply using it.  Linking a program with a library, without
    +changing the library, is in some sense simply using the library, and is
    +analogous to running a utility program or application program.  However, in
    +a textual and legal sense, the linked executable is a combined work, a
    +derivative of the original library, and the ordinary General Public License
    +treats it as such.
    +
    +  Because of this blurred distinction, using the ordinary General
    +Public License for libraries did not effectively promote software
    +sharing, because most developers did not use the libraries.  We
    +concluded that weaker conditions might promote sharing better.
    +
    +  However, unrestricted linking of non-free programs would deprive the
    +users of those programs of all benefit from the free status of the
    +libraries themselves.  This Library General Public License is intended to
    +permit developers of non-free programs to use free libraries, while
    +preserving your freedom as a user of such programs to change the free
    +libraries that are incorporated in them.  (We have not seen how to achieve
    +this as regards changes in header files, but we have achieved it as regards
    +changes in the actual functions of the Library.)  The hope is that this
    +will lead to faster development of free libraries.
    +
    +  The precise terms and conditions for copying, distribution and
    +modification follow.  Pay close attention to the difference between a
    +"work based on the library" and a "work that uses the library".  The
    +former contains code derived from the library, while the latter only
    +works together with the library.
    +
    +  Note that it is possible for a library to be covered by the ordinary
    +General Public License rather than by this special one.
    +
    +      GNU LIBRARY GENERAL PUBLIC LICENSE
    +   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
    +
    +  0. This License Agreement applies to any software library which
    +contains a notice placed by the copyright holder or other authorized
    +party saying it may be distributed under the terms of this Library
    +General Public License (also called "this License").  Each licensee is
    +addressed as "you".
    +
    +  A "library" means a collection of software functions and/or data
    +prepared so as to be conveniently linked with application programs
    +(which use some of those functions and data) to form executables.
    +
    +  The "Library", below, refers to any such software library or work
    +which has been distributed under these terms.  A "work based on the
    +Library" means either the Library or any derivative work under
    +copyright law: that is to say, a work containing the Library or a
    +portion of it, either verbatim or with modifications and/or translated
    +straightforwardly into another language.  (Hereinafter, translation is
    +included without limitation in the term "modification".)
    +
    +  "Source code" for a work means the preferred form of the work for
    +making modifications to it.  For a library, complete source code means
    +all the source code for all modules it contains, plus any associated
    +interface definition files, plus the scripts used to control compilation
    +and installation of the library.
    +
    +  Activities other than copying, distribution and modification are not
    +covered by this License; they are outside its scope.  The act of
    +running a program using the Library is not restricted, and output from
    +such a program is covered only if its contents constitute a work based
    +on the Library (independent of the use of the Library in a tool for
    +writing it).  Whether that is true depends on what the Library does
    +and what the program that uses the Library does.
    +
    +  1. You may copy and distribute verbatim copies of the Library's
    +complete source code as you receive it, in any medium, provided that
    +you conspicuously and appropriately publish on each copy an
    +appropriate copyright notice and disclaimer of warranty; keep intact
    +all the notices that refer to this License and to the absence of any
    +warranty; and distribute a copy of this License along with the
    +Library.
    +
    +  You may charge a fee for the physical act of transferring a copy,
    +and you may at your option offer warranty protection in exchange for a
    +fee.
    +
    +  2. You may modify your copy or copies of the Library or any portion
    +of it, thus forming a work based on the Library, and copy and
    +distribute such modifications or work under the terms of Section 1
    +above, provided that you also meet all of these conditions:
    +
    +    a) The modified work must itself be a software library.
    +
    +    b) You must cause the files modified to carry prominent notices
    +    stating that you changed the files and the date of any change.
    +
    +    c) You must cause the whole of the work to be licensed at no
    +    charge to all third parties under the terms of this License.
    +
    +    d) If a facility in the modified Library refers to a function or a
    +    table of data to be supplied by an application program that uses
    +    the facility, other than as an argument passed when the facility
    +    is invoked, then you must make a good faith effort to ensure that,
    +    in the event an application does not supply such function or
    +    table, the facility still operates, and performs whatever part of
    +    its purpose remains meaningful.
    +
    +    (For example, a function in a library to compute square roots has
    +    a purpose that is entirely well-defined independent of the
    +    application.  Therefore, Subsection 2d requires that any
    +    application-supplied function or table used by this function must
    +    be optional: if the application does not supply it, the square
    +    root function must still compute square roots.)
    +
    +These requirements apply to the modified work as a whole.  If
    +identifiable sections of that work are not derived from the Library,
    +and can be reasonably considered independent and separate works in
    +themselves, then this License, and its terms, do not apply to those
    +sections when you distribute them as separate works.  But when you
    +distribute the same sections as part of a whole which is a work based
    +on the Library, the distribution of the whole must be on the terms of
    +this License, whose permissions for other licensees extend to the
    +entire whole, and thus to each and every part regardless of who wrote
    +it.
    +
    +Thus, it is not the intent of this section to claim rights or contest
    +your rights to work written entirely by you; rather, the intent is to
    +exercise the right to control the distribution of derivative or
    +collective works based on the Library.
    +
    +In addition, mere aggregation of another work not based on the Library
    +with the Library (or with a work based on the Library) on a volume of
    +a storage or distribution medium does not bring the other work under
    +the scope of this License.
    +
    +  3. You may opt to apply the terms of the ordinary GNU General Public
    +License instead of this License to a given copy of the Library.  To do
    +this, you must alter all the notices that refer to this License, so
    +that they refer to the ordinary GNU General Public License, version 2,
    +instead of to this License.  (If a newer version than version 2 of the
    +ordinary GNU General Public License has appeared, then you can specify
    +that version instead if you wish.)  Do not make any other change in
    +these notices.
    +
    +  Once this change is made in a given copy, it is irreversible for
    +that copy, so the ordinary GNU General Public License applies to all
    +subsequent copies and derivative works made from that copy.
    +
    +  This option is useful when you wish to copy part of the code of
    +the Library into a program that is not a library.
    +
    +  4. You may copy and distribute the Library (or a portion or
    +derivative of it, under Section 2) in object code or executable form
    +under the terms of Sections 1 and 2 above provided that you accompany
    +it with the complete corresponding machine-readable source code, which
    +must be distributed under the terms of Sections 1 and 2 above on a
    +medium customarily used for software interchange.
    +
    +  If distribution of object code is made by offering access to copy
    +from a designated place, then offering equivalent access to copy the
    +source code from the same place satisfies the requirement to
    +distribute the source code, even though third parties are not
    +compelled to copy the source along with the object code.
    +
    +  5. A program that contains no derivative of any portion of the
    +Library, but is designed to work with the Library by being compiled or
    +linked with it, is called a "work that uses the Library".  Such a
    +work, in isolation, is not a derivative work of the Library, and
    +therefore falls outside the scope of this License.
    +
    +  However, linking a "work that uses the Library" with the Library
    +creates an executable that is a derivative of the Library (because it
    +contains portions of the Library), rather than a "work that uses the
    +library".  The executable is therefore covered by this License.
    +Section 6 states terms for distribution of such executables.
    +
    +  When a "work that uses the Library" uses material from a header file
    +that is part of the Library, the object code for the work may be a
    +derivative work of the Library even though the source code is not.
    +Whether this is true is especially significant if the work can be
    +linked without the Library, or if the work is itself a library.  The
    +threshold for this to be true is not precisely defined by law.
    +
    +  If such an object file uses only numerical parameters, data
    +structure layouts and accessors, and small macros and small inline
    +functions (ten lines or less in length), then the use of the object
    +file is unrestricted, regardless of whether it is legally a derivative
    +work.  (Executables containing this object code plus portions of the
    +Library will still fall under Section 6.)
    +
    +  Otherwise, if the work is a derivative of the Library, you may
    +distribute the object code for the work under the terms of Section 6.
    +Any executables containing that work also fall under Section 6,
    +whether or not they are linked directly with the Library itself.
    +
    +  6. As an exception to the Sections above, you may also compile or
    +link a "work that uses the Library" with the Library to produce a
    +work containing portions of the Library, and distribute that work
    +under terms of your choice, provided that the terms permit
    +modification of the work for the customer's own use and reverse
    +engineering for debugging such modifications.
    +
    +  You must give prominent notice with each copy of the work that the
    +Library is used in it and that the Library and its use are covered by
    +this License.  You must supply a copy of this License.  If the work
    +during execution displays copyright notices, you must include the
    +copyright notice for the Library among them, as well as a reference
    +directing the user to the copy of this License.  Also, you must do one
    +of these things:
    +
    +    a) Accompany the work with the complete corresponding
    +    machine-readable source code for the Library including whatever
    +    changes were used in the work (which must be distributed under
    +    Sections 1 and 2 above); and, if the work is an executable linked
    +    with the Library, with the complete machine-readable "work that
    +    uses the Library", as object code and/or source code, so that the
    +    user can modify the Library and then relink to produce a modified
    +    executable containing the modified Library.  (It is understood
    +    that the user who changes the contents of definitions files in the
    +    Library will not necessarily be able to recompile the application
    +    to use the modified definitions.)
    +
    +    b) Accompany the work with a written offer, valid for at
    +    least three years, to give the same user the materials
    +    specified in Subsection 6a, above, for a charge no more
    +    than the cost of performing this distribution.
    +
    +    c) If distribution of the work is made by offering access to copy
    +    from a designated place, offer equivalent access to copy the above
    +    specified materials from the same place.
    +
    +    d) Verify that the user has already received a copy of these
    +    materials or that you have already sent this user a copy.
    +
    +  For an executable, the required form of the "work that uses the
    +Library" must include any data and utility programs needed for
    +reproducing the executable from it.  However, as a special exception,
    +the source code distributed need not include anything that is normally
    +distributed (in either source or binary form) with the major
    +components (compiler, kernel, and so on) of the operating system on
    +which the executable runs, unless that component itself accompanies
    +the executable.
    +
    +  It may happen that this requirement contradicts the license
    +restrictions of other proprietary libraries that do not normally
    +accompany the operating system.  Such a contradiction means you cannot
    +use both them and the Library together in an executable that you
    +distribute.
    +
    +  7. You may place library facilities that are a work based on the
    +Library side-by-side in a single library together with other library
    +facilities not covered by this License, and distribute such a combined
    +library, provided that the separate distribution of the work based on
    +the Library and of the other library facilities is otherwise
    +permitted, and provided that you do these two things:
    +
    +    a) Accompany the combined library with a copy of the same work
    +    based on the Library, uncombined with any other library
    +    facilities.  This must be distributed under the terms of the
    +    Sections above.
    +
    +    b) Give prominent notice with the combined library of the fact
    +    that part of it is a work based on the Library, and explaining
    +    where to find the accompanying uncombined form of the same work.
    +
    +  8. You may not copy, modify, sublicense, link with, or distribute
    +the Library except as expressly provided under this License.  Any
    +attempt otherwise to copy, modify, sublicense, link with, or
    +distribute the Library is void, and will automatically terminate your
    +rights under this License.  However, parties who have received copies,
    +or rights, from you under this License will not have their licenses
    +terminated so long as such parties remain in full compliance.
    +
    +  9. You are not required to accept this License, since you have not
    +signed it.  However, nothing else grants you permission to modify or
    +distribute the Library or its derivative works.  These actions are
    +prohibited by law if you do not accept this License.  Therefore, by
    +modifying or distributing the Library (or any work based on the
    +Library), you indicate your acceptance of this License to do so, and
    +all its terms and conditions for copying, distributing or modifying
    +the Library or works based on it.
    +
    +  10. Each time you redistribute the Library (or any work based on the
    +Library), the recipient automatically receives a license from the
    +original licensor to copy, distribute, link with or modify the Library
    +subject to these terms and conditions.  You may not impose any further
    +restrictions on the recipients' exercise of the rights granted herein.
    +You are not responsible for enforcing compliance by third parties to
    +this License.
    +
    +  11. If, as a consequence of a court judgment or allegation of patent
    +infringement or for any other reason (not limited to patent issues),
    +conditions are imposed on you (whether by court order, agreement or
    +otherwise) that contradict the conditions of this License, they do not
    +excuse you from the conditions of this License.  If you cannot
    +distribute so as to satisfy simultaneously your obligations under this
    +License and any other pertinent obligations, then as a consequence you
    +may not distribute the Library at all.  For example, if a patent
    +license would not permit royalty-free redistribution of the Library by
    +all those who receive copies directly or indirectly through you, then
    +the only way you could satisfy both it and this License would be to
    +refrain entirely from distribution of the Library.
    +
    +If any portion of this section is held invalid or unenforceable under any
    +particular circumstance, the balance of the section is intended to apply,
    +and the section as a whole is intended to apply in other circumstances.
    +
    +It is not the purpose of this section to induce you to infringe any
    +patents or other property right claims or to contest validity of any
    +such claims; this section has the sole purpose of protecting the
    +integrity of the free software distribution system which is
    +implemented by public license practices.  Many people have made
    +generous contributions to the wide range of software distributed
    +through that system in reliance on consistent application of that
    +system; it is up to the author/donor to decide if he or she is willing
    +to distribute software through any other system and a licensee cannot
    +impose that choice.
    +
    +This section is intended to make thoroughly clear what is believed to
    +be a consequence of the rest of this License.
    +
    +  12. If the distribution and/or use of the Library is restricted in
    +certain countries either by patents or by copyrighted interfaces, the
    +original copyright holder who places the Library under this License may add
    +an explicit geographical distribution limitation excluding those countries,
    +so that distribution is permitted only in or among countries not thus
    +excluded.  In such case, this License incorporates the limitation as if
    +written in the body of this License.
    +
    +  13. The Free Software Foundation may publish revised and/or new
    +versions of the Library General Public License from time to time.
    +Such new versions will be similar in spirit to the present version,
    +but may differ in detail to address new problems or concerns.
    +
    +Each version is given a distinguishing version number.  If the Library
    +specifies a version number of this License which applies to it and
    +"any later version", you have the option of following the terms and
    +conditions either of that version or of any later version published by
    +the Free Software Foundation.  If the Library does not specify a
    +license version number, you may choose any version ever published by
    +the Free Software Foundation.
    +
    +  14. If you wish to incorporate parts of the Library into other free
    +programs whose distribution conditions are incompatible with these,
    +write to the author to ask for permission.  For software which is
    +copyrighted by the Free Software Foundation, write to the Free
    +Software Foundation; we sometimes make exceptions for this.  Our
    +decision will be guided by the two goals of preserving the free status
    +of all derivatives of our free software and of promoting the sharing
    +and reuse of software generally.
    +
    +          NO WARRANTY
    +
    +  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
    +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
    +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
    +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
    +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    +PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
    +LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
    +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
    +
    +  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
    +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
    +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
    +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
    +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
    +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
    +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
    +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
    +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
    +DAMAGES.
    +
    +         END OF TERMS AND CONDITIONS
    +
    +     Appendix: How to Apply These Terms to Your New Libraries
    +
    +  If you develop a new library, and you want it to be of the greatest
    +possible use to the public, we recommend making it free software that
    +everyone can redistribute and change.  You can do so by permitting
    +redistribution under these terms (or, alternatively, under the terms of the
    +ordinary General Public License).
    +
    +  To apply these terms, attach the following notices to the library.  It is
    +safest to attach them to the start of each source file to most effectively
    +convey the exclusion of warranty; and each file should have at least the
    +"copyright" line and a pointer to where the full notice is found.
    +
    +    <one line to give the library's name and a brief idea of what it does.>
    +    Copyright (C) <year>  <name of author>
    +
    +    This library is free software; you can redistribute it and/or
    +    modify it under the terms of the GNU Library General Public
    +    License as published by the Free Software Foundation; either
    +    version 2 of the License, or (at your option) any later version.
    +
    +    This library is distributed in the hope that it will be useful,
    +    but WITHOUT ANY WARRANTY; without even the implied warranty of
    +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    +    Library General Public License for more details.
    +
    +    You should have received a copy of the GNU Library General Public
    +    License along with this library; if not, write to the Free
    +    Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
    +
    +Also add information on how to contact you by electronic and paper mail.
    +
    +You should also get your employer (if you work as a programmer) or your
    +school, if any, to sign a "copyright disclaimer" for the library, if
    +necessary.  Here is a sample; alter the names:
    +
    +  Yoyodyne, Inc., hereby disclaims all copyright interest in the
    +  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
    +
    +  <signature of Ty Coon>, 1 April 1990
    +  Ty Coon, President of Vice
    +
    +That's all there is to it!
    +
    +---------------------
    +
    +The OpenGL Extension Wrangler Library
    +Copyright (C) 2002-2008, Milan Ikits <milan ikits[]ieee org>
    +Copyright (C) 2002-2008, Marcelo E. Magallon <mmagallo[]debian org>
    +Copyright (C) 2002, Lev Povalahev
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are met:
    +
    +* Redistributions of source code must retain the above copyright notice,
    +  this list of conditions and the following disclaimer.
    +* Redistributions in binary form must reproduce the above copyright notice,
    +  this list of conditions and the following disclaimer in the documentation
    +  and/or other materials provided with the distribution.
    +* The name of the author may be used to endorse or promote products
    +  derived from this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
    +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
    +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
    +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
    +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
    +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
    +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
    +THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +****************************
    +gradle
    +****************************
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +------------------------------------------------------------------------------
    +License for the slf4j package
    +------------------------------------------------------------------------------
    +SLF4J License
    +
    +Copyright (c) 2004-2007 QOS.ch
    +All rights reserved.
    +
    +Permission is hereby granted, free  of charge, to any person obtaining
    +a  copy  of this  software  and  associated  documentation files  (the
    +"Software"), to  deal in  the Software without  restriction, including
    +without limitation  the rights to  use, copy, modify,  merge, publish,
    +distribute,  sublicense, and/or sell  copies of  the Software,  and to
    +permit persons to whom the Software  is furnished to do so, subject to
    +the following conditions:
    +
    +The  above  copyright  notice  and  this permission  notice  shall  be
    +included in all copies or substantial portions of the Software.
    +
    +THE  SOFTWARE IS  PROVIDED  "AS  IS", WITHOUT  WARRANTY  OF ANY  KIND,
    +EXPRESS OR  IMPLIED, INCLUDING  BUT NOT LIMITED  TO THE  WARRANTIES OF
    +MERCHANTABILITY,    FITNESS    FOR    A   PARTICULAR    PURPOSE    AND
    +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +OF CONTRACT, TORT OR OTHERWISE,  ARISING FROM, OUT OF OR IN CONNECTION
    +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +
    +These terms are identical to those of the MIT License, also called the X License or the X11 License,
    +which is a simple, permissive non-copyleft free software license. It is deemed compatible with virtually
    +all types of licenses, commercial or otherwise. In particular, the Free Software Foundation has declared it
    +compatible with GNU GPL. It is also known to be approved by the Apache Software Foundation as compatible
    +with Apache Software License.
    +
    +
    +------------------------------------------------------------------------------
    +License for the JUnit package
    +------------------------------------------------------------------------------
    +THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS COMMON PUBLIC
    +LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM
    +CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
    +
    +1. DEFINITIONS
    +
    +"Contribution" means:
    +
    +a) in the case of the initial Contributor, the initial code and
    +documentation distributed under this Agreement, and
    +
    +b) in the case of each subsequent Contributor:
    +
    +i) changes to the Program, and
    +
    +ii) additions to the Program;
    +
    +where such changes and/or additions to the Program originate from and are
    +distributed by that particular Contributor. A Contribution 'originates' from a
    +Contributor if it was added to the Program by such Contributor itself or anyone
    +acting on such Contributor's behalf. Contributions do not include additions to
    +the Program which: (i) are separate modules of software distributed in
    +conjunction with the Program under their own license agreement, and (ii) are not
    +derivative works of the Program.
    +
    +"Contributor" means any person or entity that distributes the Program.
    +
    +"Licensed Patents " mean patent claims licensable by a Contributor which are
    +necessarily infringed by the use or sale of its Contribution alone or when
    +combined with the Program.
    +
    +"Program" means the Contributions distributed in accordance with this Agreement.
    +
    +"Recipient" means anyone who receives the Program under this Agreement,
    +including all Contributors.
    +
    +2. GRANT OF RIGHTS
    +
    +a) Subject to the terms of this Agreement, each Contributor hereby grants
    +Recipient a non-exclusive, worldwide, royalty-free copyright license to
    +reproduce, prepare derivative works of, publicly display, publicly perform,
    +distribute and sublicense the Contribution of such Contributor, if any, and such
    +derivative works, in source code and object code form.
    +
    +b) Subject to the terms of this Agreement, each Contributor hereby grants
    +Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed
    +Patents to make, use, sell, offer to sell, import and otherwise transfer the
    +Contribution of such Contributor, if any, in source code and object code form.
    +This patent license shall apply to the combination of the Contribution and the
    +Program if, at the time the Contribution is added by the Contributor, such
    +addition of the Contribution causes such combination to be covered by the
    +Licensed Patents. The patent license shall not apply to any other combinations
    +which include the Contribution. No hardware per se is licensed hereunder.
    +
    +c) Recipient understands that although each Contributor grants the licenses
    +to its Contributions set forth herein, no assurances are provided by any
    +Contributor that the Program does not infringe the patent or other intellectual
    +property rights of any other entity. Each Contributor disclaims any liability to
    +Recipient for claims brought by any other entity based on infringement of
    +intellectual property rights or otherwise. As a condition to exercising the
    +rights and licenses granted hereunder, each Recipient hereby assumes sole
    +responsibility to secure any other intellectual property rights needed, if any.
    +For example, if a third party patent license is required to allow Recipient to
    +distribute the Program, it is Recipient's responsibility to acquire that license
    +before distributing the Program.
    +
    +d) Each Contributor represents that to its knowledge it has sufficient
    +copyright rights in its Contribution, if any, to grant the copyright license set
    +forth in this Agreement.
    +
    +3. REQUIREMENTS
    +
    +A Contributor may choose to distribute the Program in object code form under its
    +own license agreement, provided that:
    +
    +a) it complies with the terms and conditions of this Agreement; and
    +
    +b) its license agreement:
    +
    +i) effectively disclaims on behalf of all Contributors all warranties and
    +conditions, express and implied, including warranties or conditions of title and
    +non-infringement, and implied warranties or conditions of merchantability and
    +fitness for a particular purpose;
    +
    +ii) effectively excludes on behalf of all Contributors all liability for
    +damages, including direct, indirect, special, incidental and consequential
    +damages, such as lost profits;
    +
    +iii) states that any provisions which differ from this Agreement are offered
    +by that Contributor alone and not by any other party; and
    +
    +iv) states that source code for the Program is available from such
    +Contributor, and informs licensees how to obtain it in a reasonable manner on or
    +through a medium customarily used for software exchange.
    +
    +When the Program is made available in source code form:
    +
    +a) it must be made available under this Agreement; and
    +
    +b) a copy of this Agreement must be included with each copy of the Program.
    +
    +Contributors may not remove or alter any copyright notices contained within the
    +Program.
    +
    +Each Contributor must identify itself as the originator of its Contribution, if
    +any, in a manner that reasonably allows subsequent Recipients to identify the
    +originator of the Contribution.
    +
    +4. COMMERCIAL DISTRIBUTION
    +
    +Commercial distributors of software may accept certain responsibilities with
    +respect to end users, business partners and the like. While this license is
    +intended to facilitate the commercial use of the Program, the Contributor who
    +includes the Program in a commercial product offering should do so in a manner
    +which does not create potential liability for other Contributors. Therefore, if
    +a Contributor includes the Program in a commercial product offering, such
    +Contributor ("Commercial Contributor") hereby agrees to defend and indemnify
    +every other Contributor ("Indemnified Contributor") against any losses, damages
    +and costs (collectively "Losses") arising from claims, lawsuits and other legal
    +actions brought by a third party against the Indemnified Contributor to the
    +extent caused by the acts or omissions of such Commercial Contributor in
    +connection with its distribution of the Program in a commercial product
    +offering. The obligations in this section do not apply to any claims or Losses
    +relating to any actual or alleged intellectual property infringement. In order
    +to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
    +Contributor in writing of such claim, and b) allow the Commercial Contributor to
    +control, and cooperate with the Commercial Contributor in, the defense and any
    +related settlement negotiations. The Indemnified Contributor may participate in
    +any such claim at its own expense.
    +
    +For example, a Contributor might include the Program in a commercial product
    +offering, Product X. That Contributor is then a Commercial Contributor. If that
    +Commercial Contributor then makes performance claims, or offers warranties
    +related to Product X, those performance claims and warranties are such
    +Commercial Contributor's responsibility alone. Under this section, the
    +Commercial Contributor would have to defend claims against the other
    +Contributors related to those performance claims and warranties, and if a court
    +requires any other Contributor to pay any damages as a result, the Commercial
    +Contributor must pay those damages.
    +
    +5. NO WARRANTY
    +
    +EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN
    +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR
    +IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE,
    +NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each
    +Recipient is solely responsible for determining the appropriateness of using and
    +distributing the Program and assumes all risks associated with its exercise of
    +rights under this Agreement, including but not limited to the risks and costs of
    +program errors, compliance with applicable laws, damage to or loss of data,
    +programs or equipment, and unavailability or interruption of operations.
    +
    +6. DISCLAIMER OF LIABILITY
    +
    +EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY
    +CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST
    +PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
    +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS
    +GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
    +
    +7. GENERAL
    +
    +If any provision of this Agreement is invalid or unenforceable under applicable
    +law, it shall not affect the validity or enforceability of the remainder of the
    +terms of this Agreement, and without further action by the parties hereto, such
    +provision shall be reformed to the minimum extent necessary to make such
    +provision valid and enforceable.
    +
    +If Recipient institutes patent litigation against a Contributor with respect to
    +a patent applicable to software (including a cross-claim or counterclaim in a
    +lawsuit), then any patent licenses granted by that Contributor to such Recipient
    +under this Agreement shall terminate as of the date such litigation is filed. In
    +addition, if Recipient institutes patent litigation against any entity
    +(including a cross-claim or counterclaim in a lawsuit) alleging that the Program
    +itself (excluding combinations of the Program with other software or hardware)
    +infringes such Recipient's patent(s), then such Recipient's rights granted under
    +Section 2(b) shall terminate as of the date such litigation is filed.
    +
    +All Recipient's rights under this Agreement shall terminate if it fails to
    +comply with any of the material terms or conditions of this Agreement and does
    +not cure such failure in a reasonable period of time after becoming aware of
    +such noncompliance. If all Recipient's rights under this Agreement terminate,
    +Recipient agrees to cease use and distribution of the Program as soon as
    +reasonably practicable. However, Recipient's obligations under this Agreement
    +and any licenses granted by Recipient relating to the Program shall continue and
    +survive.
    +
    +Everyone is permitted to copy and distribute copies of this Agreement, but in
    +order to avoid inconsistency the Agreement is copyrighted and may only be
    +modified in the following manner. The Agreement Steward reserves the right to
    +publish new versions (including revisions) of this Agreement from time to time.
    +No one other than the Agreement Steward has the right to modify this Agreement.
    +IBM is the initial Agreement Steward. IBM may assign the responsibility to serve
    +as the Agreement Steward to a suitable separate entity. Each new version of the
    +Agreement will be given a distinguishing version number. The Program (including
    +Contributions) may always be distributed subject to the version of the Agreement
    +under which it was received. In addition, after a new version of the Agreement
    +is published, Contributor may elect to distribute the Program (including its
    +Contributions) under the new version. Except as expressly stated in Sections
    +2(a) and 2(b) above, Recipient receives no rights or licenses to the
    +intellectual property of any Contributor under this Agreement, whether
    +expressly, by implication, estoppel or otherwise. All rights in the Program not
    +expressly granted under this Agreement are reserved.
    +
    +This Agreement is governed by the laws of the State of New York and the
    +intellectual property laws of the United States of America. No party to this
    +Agreement will bring a legal action under this Agreement more than one year
    +after the cause of action arose. Each party waives its rights to a jury trial in
    +any resulting litigation.
    +
    +------------------------------------------------------------------------------
    +License for the JCIFS package
    +------------------------------------------------------------------------------
    +JCIFS License
    +
    +          GNU LESSER GENERAL PUBLIC LICENSE
    +               Version 2.1, February 1999
    +
    + Copyright (C) 1991, 1999 Free Software Foundation, Inc.
    + 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
    + Everyone is permitted to copy and distribute verbatim copies
    + of this license document, but changing it is not allowed.
    +
    +[This is the first released version of the Lesser GPL.  It also counts
    + as the successor of the GNU Library Public License, version 2, hence
    + the version number 2.1.]
    +
    +                Preamble
    +
    +  The licenses for most software are designed to take away your
    +freedom to share and change it.  By contrast, the GNU General Public
    +Licenses are intended to guarantee your freedom to share and change
    +free software--to make sure the software is free for all its users.
    +
    +  This license, the Lesser General Public License, applies to some
    +specially designated software packages--typically libraries--of the
    +Free Software Foundation and other authors who decide to use it.  You
    +can use it too, but we suggest you first think carefully about whether
    +this license or the ordinary General Public License is the better
    +strategy to use in any particular case, based on the explanations below.
    +
    +  When we speak of free software, we are referring to freedom of use,
    +not price.  Our General Public Licenses are designed to make sure that
    +you have the freedom to distribute copies of free software (and charge
    +for this service if you wish); that you receive source code or can get
    +it if you want it; that you can change the software and use pieces of
    +it in new free programs; and that you are informed that you can do
    +these things.
    +
    +  To protect your rights, we need to make restrictions that forbid
    +distributors to deny you these rights or to ask you to surrender these
    +rights.  These restrictions translate to certain responsibilities for
    +you if you distribute copies of the library or if you modify it.
    +
    +  For example, if you distribute copies of the library, whether gratis
    +or for a fee, you must give the recipients all the rights that we gave
    +you.  You must make sure that they, too, receive or can get the source
    +code.  If you link other code with the library, you must provide
    +complete object files to the recipients, so that they can relink them
    +with the library after making changes to the library and recompiling
    +it.  And you must show them these terms so they know their rights.
    +
    +  We protect your rights with a two-step method: (1) we copyright the
    +library, and (2) we offer you this license, which gives you legal
    +permission to copy, distribute and/or modify the library.
    +
    +  To protect each distributor, we want to make it very clear that
    +there is no warranty for the free library.  Also, if the library is
    +modified by someone else and passed on, the recipients should know
    +that what they have is not the original version, so that the original
    +author's reputation will not be affected by problems that might be
    +introduced by others.
    +
    +  Finally, software patents pose a constant threat to the existence of
    +any free program.  We wish to make sure that a company cannot
    +effectively restrict the users of a free program by obtaining a
    +restrictive license from a patent holder.  Therefore, we insist that
    +any patent license obtained for a version of the library must be
    +consistent with the full freedom of use specified in this license.
    +
    +  Most GNU software, including some libraries, is covered by the
    +ordinary GNU General Public License.  This license, the GNU Lesser
    +General Public License, applies to certain designated libraries, and
    +is quite different from the ordinary General Public License.  We use
    +this license for certain libraries in order to permit linking those
    +libraries into non-free programs.
    +
    +  When a program is linked with a library, whether statically or using
    +a shared library, the combination of the two is legally speaking a
    +combined work, a derivative of the original library.  The ordinary
    +General Public License therefore permits such linking only if the
    +entire combination fits its criteria of freedom.  The Lesser General
    +Public License permits more lax criteria for linking other code with
    +the library.
    +
    +  We call this license the "Lesser" General Public License because it
    +does Less to protect the user's freedom than the ordinary General
    +Public License.  It also provides other free software developers Less
    +of an advantage over competing non-free programs.  These disadvantages
    +are the reason we use the ordinary General Public License for many
    +libraries.  However, the Lesser license provides advantages in certain
    +special circumstances.
    +
    +  For example, on rare occasions, there may be a special need to
    +encourage the widest possible use of a certain library, so that it becomes
    +a de-facto standard.  To achieve this, non-free programs must be
    +allowed to use the library.  A more frequent case is that a free
    +library does the same job as widely used non-free libraries.  In this
    +case, there is little to gain by limiting the free library to free
    +software only, so we use the Lesser General Public License.
    +
    +  In other cases, permission to use a particular library in non-free
    +programs enables a greater number of people to use a large body of
    +free software.  For example, permission to use the GNU C Library in
    +non-free programs enables many more people to use the whole GNU
    +operating system, as well as its variant, the GNU/Linux operating
    +system.
    +
    +  Although the Lesser General Public License is Less protective of the
    +users' freedom, it does ensure that the user of a program that is
    +linked with the Library has the freedom and the wherewithal to run
    +that program using a modified version of the Library.
    +
    +  The precise terms and conditions for copying, distribution and
    +modification follow.  Pay close attention to the difference between a
    +"work based on the library" and a "work that uses the library".  The
    +former contains code derived from the library, whereas the latter must
    +be combined with the library in order to run.
    +
    +          GNU LESSER GENERAL PUBLIC LICENSE
    +   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
    +
    +  0. This License Agreement applies to any software library or other
    +program which contains a notice placed by the copyright holder or
    +other authorized party saying it may be distributed under the terms of
    +this Lesser General Public License (also called "this License").
    +Each licensee is addressed as "you".
    +
    +  A "library" means a collection of software functions and/or data
    +prepared so as to be conveniently linked with application programs
    +(which use some of those functions and data) to form executables.
    +
    +  The "Library", below, refers to any such software library or work
    +which has been distributed under these terms.  A "work based on the
    +Library" means either the Library or any derivative work under
    +copyright law: that is to say, a work containing the Library or a
    +portion of it, either verbatim or with modifications and/or translated
    +straightforwardly into another language.  (Hereinafter, translation is
    +included without limitation in the term "modification".)
    +
    +  "Source code" for a work means the preferred form of the work for
    +making modifications to it.  For a library, complete source code means
    +all the source code for all modules it contains, plus any associated
    +interface definition files, plus the scripts used to control compilation
    +and installation of the library.
    +
    +  Activities other than copying, distribution and modification are not
    +covered by this License; they are outside its scope.  The act of
    +running a program using the Library is not restricted, and output from
    +such a program is covered only if its contents constitute a work based
    +on the Library (independent of the use of the Library in a tool for
    +writing it).  Whether that is true depends on what the Library does
    +and what the program that uses the Library does.
    +
    +  1. You may copy and distribute verbatim copies of the Library's
    +complete source code as you receive it, in any medium, provided that
    +you conspicuously and appropriately publish on each copy an
    +appropriate copyright notice and disclaimer of warranty; keep intact
    +all the notices that refer to this License and to the absence of any
    +warranty; and distribute a copy of this License along with the
    +Library.
    +
    +  You may charge a fee for the physical act of transferring a copy,
    +and you may at your option offer warranty protection in exchange for a
    +fee.
    +
    +  2. You may modify your copy or copies of the Library or any portion
    +of it, thus forming a work based on the Library, and copy and
    +distribute such modifications or work under the terms of Section 1
    +above, provided that you also meet all of these conditions:
    +
    +    a) The modified work must itself be a software library.
    +
    +    b) You must cause the files modified to carry prominent notices
    +    stating that you changed the files and the date of any change.
    +
    +    c) You must cause the whole of the work to be licensed at no
    +    charge to all third parties under the terms of this License.
    +
    +    d) If a facility in the modified Library refers to a function or a
    +    table of data to be supplied by an application program that uses
    +    the facility, other than as an argument passed when the facility
    +    is invoked, then you must make a good faith effort to ensure that,
    +    in the event an application does not supply such function or
    +    table, the facility still operates, and performs whatever part of
    +    its purpose remains meaningful.
    +
    +    (For example, a function in a library to compute square roots has
    +    a purpose that is entirely well-defined independent of the
    +    application.  Therefore, Subsection 2d requires that any
    +    application-supplied function or table used by this function must
    +    be optional: if the application does not supply it, the square
    +    root function must still compute square roots.)
    +
    +These requirements apply to the modified work as a whole.  If
    +identifiable sections of that work are not derived from the Library,
    +and can be reasonably considered independent and separate works in
    +themselves, then this License, and its terms, do not apply to those
    +sections when you distribute them as separate works.  But when you
    +distribute the same sections as part of a whole which is a work based
    +on the Library, the distribution of the whole must be on the terms of
    +this License, whose permissions for other licensees extend to the
    +entire whole, and thus to each and every part regardless of who wrote
    +it.
    +
    +Thus, it is not the intent of this section to claim rights or contest
    +your rights to work written entirely by you; rather, the intent is to
    +exercise the right to control the distribution of derivative or
    +collective works based on the Library.
    +
    +In addition, mere aggregation of another work not based on the Library
    +with the Library (or with a work based on the Library) on a volume of
    +a storage or distribution medium does not bring the other work under
    +the scope of this License.
    +
    +  3. You may opt to apply the terms of the ordinary GNU General Public
    +License instead of this License to a given copy of the Library.  To do
    +this, you must alter all the notices that refer to this License, so
    +that they refer to the ordinary GNU General Public License, version 2,
    +instead of to this License.  (If a newer version than version 2 of the
    +ordinary GNU General Public License has appeared, then you can specify
    +that version instead if you wish.)  Do not make any other change in
    +these notices.
    +
    +  Once this change is made in a given copy, it is irreversible for
    +that copy, so the ordinary GNU General Public License applies to all
    +subsequent copies and derivative works made from that copy.
    +
    +  This option is useful when you wish to copy part of the code of
    +the Library into a program that is not a library.
    +
    +  4. You may copy and distribute the Library (or a portion or
    +derivative of it, under Section 2) in object code or executable form
    +under the terms of Sections 1 and 2 above provided that you accompany
    +it with the complete corresponding machine-readable source code, which
    +must be distributed under the terms of Sections 1 and 2 above on a
    +medium customarily used for software interchange.
    +
    +  If distribution of object code is made by offering access to copy
    +from a designated place, then offering equivalent access to copy the
    +source code from the same place satisfies the requirement to
    +distribute the source code, even though third parties are not
    +compelled to copy the source along with the object code.
    +
    +  5. A program that contains no derivative of any portion of the
    +Library, but is designed to work with the Library by being compiled or
    +linked with it, is called a "work that uses the Library".  Such a
    +work, in isolation, is not a derivative work of the Library, and
    +therefore falls outside the scope of this License.
    +
    +  However, linking a "work that uses the Library" with the Library
    +creates an executable that is a derivative of the Library (because it
    +contains portions of the Library), rather than a "work that uses the
    +library".  The executable is therefore covered by this License.
    +Section 6 states terms for distribution of such executables.
    +
    +  When a "work that uses the Library" uses material from a header file
    +that is part of the Library, the object code for the work may be a
    +derivative work of the Library even though the source code is not.
    +Whether this is true is especially significant if the work can be
    +linked without the Library, or if the work is itself a library.  The
    +threshold for this to be true is not precisely defined by law.
    +
    +  If such an object file uses only numerical parameters, data
    +structure layouts and accessors, and small macros and small inline
    +functions (ten lines or less in length), then the use of the object
    +file is unrestricted, regardless of whether it is legally a derivative
    +work.  (Executables containing this object code plus portions of the
    +Library will still fall under Section 6.)
    +
    +  Otherwise, if the work is a derivative of the Library, you may
    +distribute the object code for the work under the terms of Section 6.
    +Any executables containing that work also fall under Section 6,
    +whether or not they are linked directly with the Library itself.
    +
    +  6. As an exception to the Sections above, you may also combine or
    +link a "work that uses the Library" with the Library to produce a
    +work containing portions of the Library, and distribute that work
    +under terms of your choice, provided that the terms permit
    +modification of the work for the customer's own use and reverse
    +engineering for debugging such modifications.
    +
    +  You must give prominent notice with each copy of the work that the
    +Library is used in it and that the Library and its use are covered by
    +this License.  You must supply a copy of this License.  If the work
    +during execution displays copyright notices, you must include the
    +copyright notice for the Library among them, as well as a reference
    +directing the user to the copy of this License.  Also, you must do one
    +of these things:
    +
    +    a) Accompany the work with the complete corresponding
    +    machine-readable source code for the Library including whatever
    +    changes were used in the work (which must be distributed under
    +    Sections 1 and 2 above); and, if the work is an executable linked
    +    with the Library, with the complete machine-readable "work that
    +    uses the Library", as object code and/or source code, so that the
    +    user can modify the Library and then relink to produce a modified
    +    executable containing the modified Library.  (It is understood
    +    that the user who changes the contents of definitions files in the
    +    Library will not necessarily be able to recompile the application
    +    to use the modified definitions.)
    +
    +    b) Use a suitable shared library mechanism for linking with the
    +    Library.  A suitable mechanism is one that (1) uses at run time a
    +    copy of the library already present on the user's computer system,
    +    rather than copying library functions into the executable, and (2)
    +    will operate properly with a modified version of the library, if
    +    the user installs one, as long as the modified version is
    +    interface-compatible with the version that the work was made with.
    +
    +    c) Accompany the work with a written offer, valid for at
    +    least three years, to give the same user the materials
    +    specified in Subsection 6a, above, for a charge no more
    +    than the cost of performing this distribution.
    +
    +    d) If distribution of the work is made by offering access to copy
    +    from a designated place, offer equivalent access to copy the above
    +    specified materials from the same place.
    +
    +    e) Verify that the user has already received a copy of these
    +    materials or that you have already sent this user a copy.
    +
    +  For an executable, the required form of the "work that uses the
    +Library" must include any data and utility programs needed for
    +reproducing the executable from it.  However, as a special exception,
    +the materials to be distributed need not include anything that is
    +normally distributed (in either source or binary form) with the major
    +components (compiler, kernel, and so on) of the operating system on
    +which the executable runs, unless that component itself accompanies
    +the executable.
    +
    +  It may happen that this requirement contradicts the license
    +restrictions of other proprietary libraries that do not normally
    +accompany the operating system.  Such a contradiction means you cannot
    +use both them and the Library together in an executable that you
    +distribute.
    +
    +  7. You may place library facilities that are a work based on the
    +Library side-by-side in a single library together with other library
    +facilities not covered by this License, and distribute such a combined
    +library, provided that the separate distribution of the work based on
    +the Library and of the other library facilities is otherwise
    +permitted, and provided that you do these two things:
    +
    +    a) Accompany the combined library with a copy of the same work
    +    based on the Library, uncombined with any other library
    +    facilities.  This must be distributed under the terms of the
    +    Sections above.
    +
    +    b) Give prominent notice with the combined library of the fact
    +    that part of it is a work based on the Library, and explaining
    +    where to find the accompanying uncombined form of the same work.
    +
    +  8. You may not copy, modify, sublicense, link with, or distribute
    +the Library except as expressly provided under this License.  Any
    +attempt otherwise to copy, modify, sublicense, link with, or
    +distribute the Library is void, and will automatically terminate your
    +rights under this License.  However, parties who have received copies,
    +or rights, from you under this License will not have their licenses
    +terminated so long as such parties remain in full compliance.
    +
    +  9. You are not required to accept this License, since you have not
    +signed it.  However, nothing else grants you permission to modify or
    +distribute the Library or its derivative works.  These actions are
    +prohibited by law if you do not accept this License.  Therefore, by
    +modifying or distributing the Library (or any work based on the
    +Library), you indicate your acceptance of this License to do so, and
    +all its terms and conditions for copying, distributing or modifying
    +the Library or works based on it.
    +
    +  10. Each time you redistribute the Library (or any work based on the
    +Library), the recipient automatically receives a license from the
    +original licensor to copy, distribute, link with or modify the Library
    +subject to these terms and conditions.  You may not impose any further
    +restrictions on the recipients' exercise of the rights granted herein.
    +You are not responsible for enforcing compliance by third parties with
    +this License.
    +
    +  11. If, as a consequence of a court judgment or allegation of patent
    +infringement or for any other reason (not limited to patent issues),
    +conditions are imposed on you (whether by court order, agreement or
    +otherwise) that contradict the conditions of this License, they do not
    +excuse you from the conditions of this License.  If you cannot
    +distribute so as to satisfy simultaneously your obligations under this
    +License and any other pertinent obligations, then as a consequence you
    +may not distribute the Library at all.  For example, if a patent
    +license would not permit royalty-free redistribution of the Library by
    +all those who receive copies directly or indirectly through you, then
    +the only way you could satisfy both it and this License would be to
    +refrain entirely from distribution of the Library.
    +
    +If any portion of this section is held invalid or unenforceable under any
    +particular circumstance, the balance of the section is intended to apply,
    +and the section as a whole is intended to apply in other circumstances.
    +
    +It is not the purpose of this section to induce you to infringe any
    +patents or other property right claims or to contest validity of any
    +such claims; this section has the sole purpose of protecting the
    +integrity of the free software distribution system which is
    +implemented by public license practices.  Many people have made
    +generous contributions to the wide range of software distributed
    +through that system in reliance on consistent application of that
    +system; it is up to the author/donor to decide if he or she is willing
    +to distribute software through any other system and a licensee cannot
    +impose that choice.
    +
    +This section is intended to make thoroughly clear what is believed to
    +be a consequence of the rest of this License.
    +
    +  12. If the distribution and/or use of the Library is restricted in
    +certain countries either by patents or by copyrighted interfaces, the
    +original copyright holder who places the Library under this License may add
    +an explicit geographical distribution limitation excluding those countries,
    +so that distribution is permitted only in or among countries not thus
    +excluded.  In such case, this License incorporates the limitation as if
    +written in the body of this License.
    +
    +  13. The Free Software Foundation may publish revised and/or new
    +versions of the Lesser General Public License from time to time.
    +Such new versions will be similar in spirit to the present version,
    +but may differ in detail to address new problems or concerns.
    +
    +Each version is given a distinguishing version number.  If the Library
    +specifies a version number of this License which applies to it and
    +"any later version", you have the option of following the terms and
    +conditions either of that version or of any later version published by
    +the Free Software Foundation.  If the Library does not specify a
    +license version number, you may choose any version ever published by
    +the Free Software Foundation.
    +
    +  14. If you wish to incorporate parts of the Library into other free
    +programs whose distribution conditions are incompatible with these,
    +write to the author to ask for permission.  For software which is
    +copyrighted by the Free Software Foundation, write to the Free
    +Software Foundation; we sometimes make exceptions for this.  Our
    +decision will be guided by the two goals of preserving the free status
    +of all derivatives of our free software and of promoting the sharing
    +and reuse of software generally.
    +
    +                NO WARRANTY
    +
    +  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
    +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
    +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
    +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
    +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    +PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
    +LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
    +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
    +
    +  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
    +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
    +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
    +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
    +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
    +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
    +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
    +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
    +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
    +DAMAGES.
    +
    +             END OF TERMS AND CONDITIONS
    +
    +           How to Apply These Terms to Your New Libraries
    +
    +  If you develop a new library, and you want it to be of the greatest
    +possible use to the public, we recommend making it free software that
    +everyone can redistribute and change.  You can do so by permitting
    +redistribution under these terms (or, alternatively, under the terms of the
    +ordinary General Public License).
    +
    +  To apply these terms, attach the following notices to the library.  It is
    +safest to attach them to the start of each source file to most effectively
    +convey the exclusion of warranty; and each file should have at least the
    +"copyright" line and a pointer to where the full notice is found.
    +
    +    <one line to give the library's name and a brief idea of what it does.>
    +    Copyright (C) <year>  <name of author>
    +
    +    This library is free software; you can redistribute it and/or
    +    modify it under the terms of the GNU Lesser General Public
    +    License as published by the Free Software Foundation; either
    +    version 2.1 of the License, or (at your option) any later version.
    +
    +    This library is distributed in the hope that it will be useful,
    +    but WITHOUT ANY WARRANTY; without even the implied warranty of
    +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    +    Lesser General Public License for more details.
    +
    +    You should have received a copy of the GNU Lesser General Public
    +    License along with this library; if not, write to the Free Software
    +    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
    +
    +Also add information on how to contact you by electronic and paper mail.
    +
    +You should also get your employer (if you work as a programmer) or your
    +school, if any, to sign a "copyright disclaimer" for the library, if
    +necessary.  Here is a sample; alter the names:
    +
    +  Yoyodyne, Inc., hereby disclaims all copyright interest in the
    +  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
    +
    +  <signature of Ty Coon>, 1 April 1990
    +  Ty Coon, President of Vice
    +
    +That's all there is to it!
    +
    +
    +
    +****************************
    +icu
    +****************************
    +ICU
    +
    +There are two licenses here:
    +- ICU license
    +- Unicode Terms of Use
    +------------------------------------------------------------------------------
    +ICU License - ICU 1.8.1 and later
    +From http://source.icu-project.org/repos/icu/icu/trunk/license.html
    +X License (old version). For license pedigree see the
    +ICU FAQ at http://icu-project.org/userguide/icufaq.html
    +
    +COPYRIGHT AND PERMISSION NOTICE
    +
    +Copyright (c) 1995-2006 International Business Machines Corporation and others
    +
    +All rights reserved.
    +
    +Permission is hereby granted, free of charge, to any person obtaining a copy
    +of this software and associated documentation files (the "Software"), to deal
    +in the Software without restriction, including without limitation the rights
    +to use, copy, modify, merge, publish, distribute, and/or sell copies of the
    +Software, and to permit persons to whom the Software is furnished to do so,
    +provided that the above copyright notice(s) and this permission notice appear
    +in all copies of the Software and that both the above copyright notice(s) and
    +this permission notice appear in supporting documentation.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
    +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE
    +LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY
    +DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
    +CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +Except as contained in this notice, the name of a copyright holder shall not
    +be used in advertising or otherwise to promote the sale, use or other dealings
    +in this Software without prior written authorization of the copyright holder.
    +
    +All trademarks and registered trademarks mentioned herein are the property of their respective owners.
    +
    +------------------------------------------------------------------------------
    +Unicode Terms of Use, from http://www.unicode.org/copyright.html
    +
    +    For the general privacy policy governing access to this site, see the
    +Unicode Privacy Policy. For trademark usage, see the Unicode Consortium
    +Trademarks and Logo Policy.
    +    Notice to End User: Terms of Use
    +    Carefully read the following legal agreement ("Agreement"). Use or copying
    +of the software and/or codes provided with this agreement (The "Software")
    +constitutes your acceptance of these terms
    +
    +       1. Unicode Copyright.
    +             1. Copyright  1991-2007 Unicode, Inc. All rights reserved.
    +             2. Certain documents and files on this website contain a legend
    +indicating that "Modification is permitted." Any person is hereby authorized,
    +without fee, to modify such documents and files to create derivative works
    +conforming to the Unicode Standard, subject to Terms and Conditions herein.
    +             3. Any person is hereby authorized, without fee, to view, use,
    +reproduce, and distribute all documents and files solely for informational
    +purposes in the creation of products supporting the Unicode Standard, subject
    +to the Terms and Conditions herein.
    +             4. Further specifications of rights and restrictions pertaining
    +to the use of the particular set of data files known as the "Unicode Character
    +Database" can be found in Exhibit 1.
    +             5. Each version of the Unicode Standard has further specifications
    +of rights and restrictions of use. For the book editions, these are found on
    +the back of the title page. For the online edition, certain files (such as the
    +PDF files for book chapters and code charts) carry specific restrictions. All
    +other files are covered under these general Terms of Use.  To request a
    +permission to reproduce any part of the Unicode Standard, please contact the
    +Unicode Consortium.
    +             6. No license is granted to "mirror" the Unicode website where a
    +fee is charged for access to the "mirror" site.
    +             7. Modification is not permitted with respect to this document.
    +All copies of this document must be verbatim.
    +       2. Restricted Rights Legend. Any technical data or software which is
    +licensed to the United States of America, its agencies and/or instrumentalities
    +under this Agreement is commercial technical data or commercial computer
    +software developed exclusively at private expense as defined in FAR 2.101, or
    +DFARS 252.227-7014 (June 1995), as applicable. For technical data, use,
    +duplication, or disclosure by the Government is subject to restrictions as set
    +forth in DFARS 202.227-7015 Technical Data, Commercial and Items (Nov 1995)
    +and this Agreement. For Software, in accordance with FAR 12-212 or
    +DFARS 227-7202, as applicable, use, duplication or disclosure by the Government
    +is subject to the restrictions set forth in this Agreement.
    +       3. Warranties and Disclaimers.
    +             1. This publication and/or website may include technical or
    +typographical errors or other inaccuracies . Changes are periodically added to
    +the information herein; these changes will be incorporated in new editions of
    +the publication and/or website. Unicode may make improvements and/or changes
    +in the product(s) and/or program(s) described in this publication and/or
    +website at any time.
    +             2. If this file has been purchased on magnetic or optical media
    +from Unicode, Inc. the sole and exclusive remedy for any claim will be exchange
    +of the defective media within ninety (90) days of original purchase.
    +             3. EXCEPT AS PROVIDED IN SECTION C.2, THIS PUBLICATION AND/OR
    +SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND EITHER EXPRESS,
    +IMPLIED, OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, ANY WARRANTIES OF
    +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT.
    +UNICODE AND ITS LICENSORS ASSUME NO RESPONSIBILITY FOR ERRORS OR OMISSIONS IN
    +THIS PUBLICATION AND/OR SOFTWARE OR OTHER DOCUMENTS WHICH ARE REFERENCED BY OR
    +LINKED TO THIS PUBLICATION OR THE UNICODE WEBSITE.
    +       4. Waiver of Damages. In no event shall Unicode or its licensors be
    +liable for any special, incidental, indirect or consequential damages of any
    +kind, or any damages whatsoever, whether or not Unicode was advised of the
    +possibility of the damage, including, without limitation, those resulting from
    +the following: loss of use, data or profits, in connection with the use,
    +modification or distribution of this information or its derivatives.
    +       5. Trademarks.
    +             1. Unicode and the Unicode logo are registered trademarks of
    +Unicode, Inc.
    +             2. This site contains product names and corporate names of other
    +companies. All product names and company names and logos mentioned herein are
    +the trademarks or registered trademarks of their respective owners. Other
    +products and corporate names mentioned herein which are trademarks of a third
    +party are used only for explanation and for the owners' benefit and with no
    +intent to infringe.
    +             3. Use of third party products or information referred to herein
    +is at the user\x{2019}s risk.
    +       6. Miscellaneous.
    +             1. Jurisdiction and Venue. This server is operated from a location
    +in the State of California, United States of America. Unicode makes no
    +representation that the materials are appropriate for use in other locations.
    +If you access this server from other locations, you are responsible for
    +compliance with local laws. This Agreement, all use of this site and any
    +claims and damages resulting from use of this site are governed solely by the
    +laws of the State of California without regard to any principles which would
    +apply the laws of a different jurisdiction. The user agrees that any disputes
    +regarding this site shall be resolved solely in the courts located in Santa
    +Clara County, California. The user agrees said courts have personal
    +jurisdiction and agree to waive any right to transfer the dispute to any other
    +forum.
    +             2. Modification by Unicode Unicode shall have the right to modify
    +this Agreement at any time by posting it to this site. The user may not assign
    +any part of this Agreement without Unicode\x{2019}s prior written consent.
    +             3. Taxes. The user agrees to pay any taxes arising from access to
    +this website or use of the information herein, except for those based on
    +Unicode\x{2019}s net income.
    +             4. Severability.  If any provision of this Agreement is declared
    +invalid or unenforceable, the remaining provisions of this Agreement shall
    +remain in effect.
    +             5. Entire Agreement. This Agreement constitutes the entire
    +agreement between the parties.
    +
    +EXHIBIT 1
    +UNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE
    +
    +    Unicode Data Files include all data files under the directories
    +http://www.unicode.org/Public/, http://www.unicode.org/reports/, and
    +http://www.unicode.org/cldr/data/ . Unicode Software includes any source code
    +published in the Unicode Standard or under the directories
    +http://www.unicode.org/Public/, http://www.unicode.org/reports/, and
    +http://www.unicode.org/cldr/data/.
    +
    +    NOTICE TO USER: Carefully read the following legal agreement. BY
    +DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING UNICODE INC.'S DATA FILES
    +("DATA FILES"), AND/OR SOFTWARE ("SOFTWARE"), YOU UNEQUIVOCALLY ACCEPT, AND
    +AGREE TO BE BOUND BY, ALL OF THE TERMS AND CONDITIONS OF THIS AGREEMENT. IF
    +YOU DO NOT AGREE, DO NOT DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA
    +FILES OR SOFTWARE.
    +
    +    COPYRIGHT AND PERMISSION NOTICE
    +
    +    Copyright  1991-2007 Unicode, Inc. All rights reserved. Distributed under
    +the Terms of Use in http://www.unicode.org/copyright.html.
    +
    +    Permission is hereby granted, free of charge, to any person obtaining a
    +copy of the Unicode data files and any associated documentation (the "Data
    +Files") or Unicode software and any associated documentation (the "Software")
    +to deal in the Data Files or Software without restriction, including without
    +limitation the rights to use, copy, modify, merge, publish, distribute, and/or
    +sell copies of the Data Files or Software, and to permit persons to whom the
    +Data Files or Software are furnished to do so, provided that (a) the above
    +copyright notice(s) and this permission notice appear with all copies of the
    +Data Files or Software, (b) both the above copyright notice(s) and this
    +permission notice appear in associated documentation, and (c) there is clear
    +notice in each modified Data File or in the Software as well as in the
    +documentation associated with the Data File(s) or Software that the data or
    +software has been modified.
    +
    +    THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
    +KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD
    +PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN
    +THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL
    +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
    +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
    +OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA FILES OR
    +SOFTWARE.
    +
    +    Except as contained in this notice, the name of a copyright holder shall
    +not be used in advertising or otherwise to promote the sale, use or other
    +dealings in these Data Files or Software without prior written authorization
    +of the copyright holder.
    +
    +    Unicode and the Unicode logo are trademarks of Unicode, Inc., and may be
    +registered in some jurisdictions. All other trademarks and registered
    +trademarks mentioned herein are the property of their respective owners.
    +
    +
    +****************************
    +icu
    +****************************
    +ICU
    +
    +There are two licenses here:
    +- ICU license
    +- Unicode Terms of Use
    +------------------------------------------------------------------------------
    +ICU License - ICU 1.8.1 and later
    +From http://source.icu-project.org/repos/icu/icu/trunk/license.html
    +X License (old version). For license pedigree see the
    +ICU FAQ at http://icu-project.org/userguide/icufaq.html
    +
    +COPYRIGHT AND PERMISSION NOTICE
    +
    +Copyright (c) 1995-2006 International Business Machines Corporation and others
    +
    +All rights reserved.
    +
    +Permission is hereby granted, free of charge, to any person obtaining a copy
    +of this software and associated documentation files (the "Software"), to deal
    +in the Software without restriction, including without limitation the rights
    +to use, copy, modify, merge, publish, distribute, and/or sell copies of the
    +Software, and to permit persons to whom the Software is furnished to do so,
    +provided that the above copyright notice(s) and this permission notice appear
    +in all copies of the Software and that both the above copyright notice(s) and
    +this permission notice appear in supporting documentation.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
    +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE
    +LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY
    +DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
    +CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +Except as contained in this notice, the name of a copyright holder shall not
    +be used in advertising or otherwise to promote the sale, use or other dealings
    +in this Software without prior written authorization of the copyright holder.
    +
    +All trademarks and registered trademarks mentioned herein are the property of their respective owners.
    +
    +------------------------------------------------------------------------------
    +Unicode Terms of Use, from http://www.unicode.org/copyright.html
    +
    +    For the general privacy policy governing access to this site, see the
    +Unicode Privacy Policy. For trademark usage, see the Unicode Consortium
    +Trademarks and Logo Policy.
    +    Notice to End User: Terms of Use
    +    Carefully read the following legal agreement ("Agreement"). Use or copying
    +of the software and/or codes provided with this agreement (The "Software")
    +constitutes your acceptance of these terms
    +
    +       1. Unicode Copyright.
    +             1. Copyright  1991-2007 Unicode, Inc. All rights reserved.
    +             2. Certain documents and files on this website contain a legend
    +indicating that "Modification is permitted." Any person is hereby authorized,
    +without fee, to modify such documents and files to create derivative works
    +conforming to the Unicode Standard, subject to Terms and Conditions herein.
    +             3. Any person is hereby authorized, without fee, to view, use,
    +reproduce, and distribute all documents and files solely for informational
    +purposes in the creation of products supporting the Unicode Standard, subject
    +to the Terms and Conditions herein.
    +             4. Further specifications of rights and restrictions pertaining
    +to the use of the particular set of data files known as the "Unicode Character
    +Database" can be found in Exhibit 1.
    +             5. Each version of the Unicode Standard has further specifications
    +of rights and restrictions of use. For the book editions, these are found on
    +the back of the title page. For the online edition, certain files (such as the
    +PDF files for book chapters and code charts) carry specific restrictions. All
    +other files are covered under these general Terms of Use.  To request a
    +permission to reproduce any part of the Unicode Standard, please contact the
    +Unicode Consortium.
    +             6. No license is granted to "mirror" the Unicode website where a
    +fee is charged for access to the "mirror" site.
    +             7. Modification is not permitted with respect to this document.
    +All copies of this document must be verbatim.
    +       2. Restricted Rights Legend. Any technical data or software which is
    +licensed to the United States of America, its agencies and/or instrumentalities
    +under this Agreement is commercial technical data or commercial computer
    +software developed exclusively at private expense as defined in FAR 2.101, or
    +DFARS 252.227-7014 (June 1995), as applicable. For technical data, use,
    +duplication, or disclosure by the Government is subject to restrictions as set
    +forth in DFARS 202.227-7015 Technical Data, Commercial and Items (Nov 1995)
    +and this Agreement. For Software, in accordance with FAR 12-212 or
    +DFARS 227-7202, as applicable, use, duplication or disclosure by the Government
    +is subject to the restrictions set forth in this Agreement.
    +       3. Warranties and Disclaimers.
    +             1. This publication and/or website may include technical or
    +typographical errors or other inaccuracies . Changes are periodically added to
    +the information herein; these changes will be incorporated in new editions of
    +the publication and/or website. Unicode may make improvements and/or changes
    +in the product(s) and/or program(s) described in this publication and/or
    +website at any time.
    +             2. If this file has been purchased on magnetic or optical media
    +from Unicode, Inc. the sole and exclusive remedy for any claim will be exchange
    +of the defective media within ninety (90) days of original purchase.
    +             3. EXCEPT AS PROVIDED IN SECTION C.2, THIS PUBLICATION AND/OR
    +SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND EITHER EXPRESS,
    +IMPLIED, OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, ANY WARRANTIES OF
    +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT.
    +UNICODE AND ITS LICENSORS ASSUME NO RESPONSIBILITY FOR ERRORS OR OMISSIONS IN
    +THIS PUBLICATION AND/OR SOFTWARE OR OTHER DOCUMENTS WHICH ARE REFERENCED BY OR
    +LINKED TO THIS PUBLICATION OR THE UNICODE WEBSITE.
    +       4. Waiver of Damages. In no event shall Unicode or its licensors be
    +liable for any special, incidental, indirect or consequential damages of any
    +kind, or any damages whatsoever, whether or not Unicode was advised of the
    +possibility of the damage, including, without limitation, those resulting from
    +the following: loss of use, data or profits, in connection with the use,
    +modification or distribution of this information or its derivatives.
    +       5. Trademarks.
    +             1. Unicode and the Unicode logo are registered trademarks of
    +Unicode, Inc.
    +             2. This site contains product names and corporate names of other
    +companies. All product names and company names and logos mentioned herein are
    +the trademarks or registered trademarks of their respective owners. Other
    +products and corporate names mentioned herein which are trademarks of a third
    +party are used only for explanation and for the owners' benefit and with no
    +intent to infringe.
    +             3. Use of third party products or information referred to herein
    +is at the user\x{2019}s risk.
    +       6. Miscellaneous.
    +             1. Jurisdiction and Venue. This server is operated from a location
    +in the State of California, United States of America. Unicode makes no
    +representation that the materials are appropriate for use in other locations.
    +If you access this server from other locations, you are responsible for
    +compliance with local laws. This Agreement, all use of this site and any
    +claims and damages resulting from use of this site are governed solely by the
    +laws of the State of California without regard to any principles which would
    +apply the laws of a different jurisdiction. The user agrees that any disputes
    +regarding this site shall be resolved solely in the courts located in Santa
    +Clara County, California. The user agrees said courts have personal
    +jurisdiction and agree to waive any right to transfer the dispute to any other
    +forum.
    +             2. Modification by Unicode Unicode shall have the right to modify
    +this Agreement at any time by posting it to this site. The user may not assign
    +any part of this Agreement without Unicode\x{2019}s prior written consent.
    +             3. Taxes. The user agrees to pay any taxes arising from access to
    +this website or use of the information herein, except for those based on
    +Unicode\x{2019}s net income.
    +             4. Severability.  If any provision of this Agreement is declared
    +invalid or unenforceable, the remaining provisions of this Agreement shall
    +remain in effect.
    +             5. Entire Agreement. This Agreement constitutes the entire
    +agreement between the parties.
    +
    +EXHIBIT 1
    +UNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE
    +
    +    Unicode Data Files include all data files under the directories
    +http://www.unicode.org/Public/, http://www.unicode.org/reports/, and
    +http://www.unicode.org/cldr/data/ . Unicode Software includes any source code
    +published in the Unicode Standard or under the directories
    +http://www.unicode.org/Public/, http://www.unicode.org/reports/, and
    +http://www.unicode.org/cldr/data/.
    +
    +    NOTICE TO USER: Carefully read the following legal agreement. BY
    +DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING UNICODE INC.'S DATA FILES
    +("DATA FILES"), AND/OR SOFTWARE ("SOFTWARE"), YOU UNEQUIVOCALLY ACCEPT, AND
    +AGREE TO BE BOUND BY, ALL OF THE TERMS AND CONDITIONS OF THIS AGREEMENT. IF
    +YOU DO NOT AGREE, DO NOT DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA
    +FILES OR SOFTWARE.
    +
    +    COPYRIGHT AND PERMISSION NOTICE
    +
    +    Copyright  1991-2007 Unicode, Inc. All rights reserved. Distributed under
    +the Terms of Use in http://www.unicode.org/copyright.html.
    +
    +    Permission is hereby granted, free of charge, to any person obtaining a
    +copy of the Unicode data files and any associated documentation (the "Data
    +Files") or Unicode software and any associated documentation (the "Software")
    +to deal in the Data Files or Software without restriction, including without
    +limitation the rights to use, copy, modify, merge, publish, distribute, and/or
    +sell copies of the Data Files or Software, and to permit persons to whom the
    +Data Files or Software are furnished to do so, provided that (a) the above
    +copyright notice(s) and this permission notice appear with all copies of the
    +Data Files or Software, (b) both the above copyright notice(s) and this
    +permission notice appear in associated documentation, and (c) there is clear
    +notice in each modified Data File or in the Software as well as in the
    +documentation associated with the Data File(s) or Software that the data or
    +software has been modified.
    +
    +    THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
    +KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD
    +PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN
    +THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL
    +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
    +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
    +OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA FILES OR
    +SOFTWARE.
    +
    +    Except as contained in this notice, the name of a copyright holder shall
    +not be used in advertising or otherwise to promote the sale, use or other
    +dealings in these Data Files or Software without prior written authorization
    +of the copyright holder.
    +
    +    Unicode and the Unicode logo are trademarks of Unicode, Inc., and may be
    +registered in some jurisdictions. All other trademarks and registered
    +trademarks mentioned herein are the property of their respective owners.
    +
    +
    +****************************
    +java/android_libs/exoplayer
    +****************************
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +****************************
    +java/android_libs/protobuf_nano
    +****************************
    +Copyright 2008, Google Inc.
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are
    +met:
    +
    +    * Redistributions of source code must retain the above copyright
    +notice, this list of conditions and the following disclaimer.
    +    * Redistributions in binary form must reproduce the above
    +copyright notice, this list of conditions and the following disclaimer
    +in the documentation and/or other materials provided with the
    +distribution.
    +    * Neither the name of Google Inc. nor the names of its
    +contributors may be used to endorse or promote products derived from
    +this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +Code generated by the Protocol Buffer compiler is owned by the owner
    +of the input file used when generating it.  This code is not
    +standalone and requires a support library to be linked with it.  This
    +support library is itself covered by the above license.
    +
    +
    +****************************
    +javascript/jquery_ui
    +****************************
    +The MIT License (MIT)
    +
    +Copyright (c) 2015 jQuery Foundation and other contributors
    +
    +Permission is hereby granted, free of charge, to any person obtaining a copy of
    +this software and associated documentation files (the "Software"), to deal in
    +the Software without restriction, including without limitation the rights to
    +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
    +the Software, and to permit persons to whom the Software is furnished to do so,
    +subject to the following conditions:
    +
    +The above copyright notice and this permission notice shall be included in all
    +copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
    +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
    +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
    +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
    +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +
    +
    +****************************
    +javascript/jquery/v2_0_1
    +****************************
    +Copyright 2013 jQuery Foundation and other contributors
    +http://jquery.com/
    +
    +https://github.com/jquery/jquery/blob/master/MIT-LICENSE.txt
    +https://github.com/jquery/sizzle/blob/master/LICENSE
    +
    +jQuery and Sizzle are released under MIT Licence.
    +
    +The text is provided below.
    +
    +MIT License
    +----
    +
    +Copyright 2013 jQuery Foundation and other contributors
    +http://jquery.com/
    +
    +Permission is hereby granted, free of charge, to any person obtaining
    +a copy of this software and associated documentation files (the
    +"Software"), to deal in the Software without restriction, including
    +without limitation the rights to use, copy, modify, merge, publish,
    +distribute, sublicense, and/or sell copies of the Software, and to
    +permit persons to whom the Software is furnished to do so, subject to
    +the following conditions:
    +
    +The above copyright notice and this permission notice shall be
    +included in all copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +
    +
    +****************************
    +javascript/tracing_framework
    +****************************
    +Copyright 2012, Google Inc.
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are
    +met:
    +
    +    * Redistributions of source code must retain the above copyright
    +notice, this list of conditions and the following disclaimer.
    +    * Redistributions in binary form must reproduce the above
    +copyright notice, this list of conditions and the following disclaimer
    +in the documentation and/or other materials provided with the
    +distribution.
    +    * Neither the name of Google Inc. nor the names of its
    +contributors may be used to endorse or promote products derived from
    +this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +****************************
    +java_src/android_libs/exoplayer
    +****************************
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +****************************
    +java_src/android_libs/protobuf_nano/v2
    +****************************
    +Copyright 2008, Google Inc.
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are
    +met:
    +
    +    * Redistributions of source code must retain the above copyright
    +notice, this list of conditions and the following disclaimer.
    +    * Redistributions in binary form must reproduce the above
    +copyright notice, this list of conditions and the following disclaimer
    +in the documentation and/or other materials provided with the
    +distribution.
    +    * Neither the name of Google Inc. nor the names of its
    +contributors may be used to endorse or promote products derived from
    +this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +Code generated by the Protocol Buffer compiler is owned by the owner
    +of the input file used when generating it.  This code is not
    +standalone and requires a support library to be linked with it.  This
    +support library is itself covered by the above license.
    +
    +
    +****************************
    +jpeg
    +****************************
    +(extracted from src/README)
    +
    +LEGAL ISSUES
    +============
    +
    +In plain English:
    +
    +1. We don't promise that this software works.  (But if you find any bugs,
    +   please let us know!)
    +2. You can use this software for whatever you want.  You don't have to pay us.
    +3. You may not pretend that you wrote this software.  If you use it in a
    +   program, you must acknowledge somewhere in your documentation that
    +   you've used the IJG code.
    +
    +In legalese:
    +
    +The authors make NO WARRANTY or representation, either express or implied,
    +with respect to this software, its quality, accuracy, merchantability, or
    +fitness for a particular purpose.  This software is provided "AS IS", and you,
    +its user, assume the entire risk as to its quality and accuracy.
    +
    +This software is copyright (C) 1991-1998, Thomas G. Lane.
    +All Rights Reserved except as specified below.
    +
    +Permission is hereby granted to use, copy, modify, and distribute this
    +software (or portions thereof) for any purpose, without fee, subject to these
    +conditions:
    +(1) If any part of the source code for this software is distributed, then this
    +README file must be included, with this copyright and no-warranty notice
    +unaltered; and any additions, deletions, or changes to the original files
    +must be clearly indicated in accompanying documentation.
    +(2) If only executable code is distributed, then the accompanying
    +documentation must state that "this software is based in part on the work of
    +the Independent JPEG Group".
    +(3) Permission for use of this software is granted only if the user accepts
    +full responsibility for any undesirable consequences; the authors accept
    +NO LIABILITY for damages of any kind.
    +
    +These conditions apply to any software derived from or based on the IJG code,
    +not just to the unmodified library.  If you use our work, you ought to
    +acknowledge us.
    +
    +Permission is NOT granted for the use of any IJG author's name or company name
    +in advertising or publicity relating to this software or products derived from
    +it.  This software may be referred to only as "the Independent JPEG Group's
    +software".
    +
    +We specifically permit and encourage the use of this software as the basis of
    +commercial products, provided that all warranty or liability claims are
    +assumed by the product vendor.
    +
    +
    +ansi2knr.c is included in this distribution by permission of L. Peter Deutsch,
    +sole proprietor of its copyright holder, Aladdin Enterprises of Menlo Park, CA.
    +ansi2knr.c is NOT covered by the above copyright and conditions, but instead
    +by the usual distribution terms of the Free Software Foundation; principally,
    +that you must include source code if you redistribute it.  (See the file
    +ansi2knr.c for full details.)  However, since ansi2knr.c is not needed as part
    +of any program generated from the IJG code, this does not limit you more than
    +the foregoing paragraphs do.
    +
    +The Unix configuration script "configure" was produced with GNU Autoconf.
    +It is copyright by the Free Software Foundation but is freely distributable.
    +The same holds for its supporting scripts (config.guess, config.sub,
    +ltconfig, ltmain.sh).  Another support script, install-sh, is copyright
    +by M.I.T. but is also freely distributable.
    +
    +It appears that the arithmetic coding option of the JPEG spec is covered by
    +patents owned by IBM, AT&T, and Mitsubishi.  Hence arithmetic coding cannot
    +legally be used without obtaining one or more licenses.  For this reason,
    +support for arithmetic coding has been removed from the free JPEG software.
    +(Since arithmetic coding provides only a marginal gain over the unpatented
    +Huffman mode, it is unlikely that very many implementations will support it.)
    +So far as we are aware, there are no patent restrictions on the remaining
    +code.
    +
    +The IJG distribution formerly included code to read and write GIF files.
    +To avoid entanglement with the Unisys LZW patent, GIF reading support has
    +been removed altogether, and the GIF writer has been simplified to produce
    +"uncompressed GIFs".  This technique does not use the LZW algorithm; the
    +resulting GIF files are larger than usual, but are readable by all standard
    +GIF decoders.
    +
    +We are required to state that
    +    "The Graphics Interchange Format(c) is the Copyright property of
    +    CompuServe Incorporated.  GIF(sm) is a Service Mark property of
    +    CompuServe Incorporated."
    +
    +
    +****************************
    +libogg
    +****************************
    +Copyright (c) 2002, Xiph.org Foundation
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +
    +- Redistributions of source code must retain the above copyright
    +notice, this list of conditions and the following disclaimer.
    +
    +- Redistributions in binary form must reproduce the above copyright
    +notice, this list of conditions and the following disclaimer in the
    +documentation and/or other materials provided with the distribution.
    +
    +- Neither the name of the Xiph.org Foundation nor the names of its
    +contributors may be used to endorse or promote products derived from
    +this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION
    +OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +****************************
    +libunwind
    +****************************
    +Copyright (c) 2002 Hewlett-Packard Co.
    +
    +Permission is hereby granted, free of charge, to any person obtaining
    +a copy of this software and associated documentation files (the
    +"Software"), to deal in the Software without restriction, including
    +without limitation the rights to use, copy, modify, merge, publish,
    +distribute, sublicense, and/or sell copies of the Software, and to
    +permit persons to whom the Software is furnished to do so, subject to
    +the following conditions:
    +
    +The above copyright notice and this permission notice shall be
    +included in all copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +
    +
    +****************************
    +libvorbis
    +****************************
    +Copyright (c) 2002-2008 Xiph.org Foundation
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +
    +- Redistributions of source code must retain the above copyright
    +notice, this list of conditions and the following disclaimer.
    +
    +- Redistributions in binary form must reproduce the above copyright
    +notice, this list of conditions and the following disclaimer in the
    +documentation and/or other materials provided with the distribution.
    +
    +- Neither the name of the Xiph.org Foundation nor the names of its
    +contributors may be used to endorse or promote products derived from
    +this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION
    +OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +****************************
    +libxcb
    +****************************
    +Copyright (C) 2001-2006 Bart Massey, Jamey Sharp, and Josh Triplett.
    +All Rights Reserved.
    +
    +Permission is hereby granted, free of charge, to any person
    +obtaining a copy of this software and associated
    +documentation files (the "Software"), to deal in the
    +Software without restriction, including without limitation
    +the rights to use, copy, modify, merge, publish, distribute,
    +sublicense, and/or sell copies of the Software, and to
    +permit persons to whom the Software is furnished to do so,
    +subject to the following conditions:
    +
    +The above copyright notice and this permission notice shall
    +be included in all copies or substantial portions of the
    +Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
    +KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
    +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
    +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS
    +BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
    +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
    +OTHER DEALINGS IN THE SOFTWARE.
    +
    +Except as contained in this notice, the names of the authors
    +or their institutions shall not be used in advertising or
    +otherwise to promote the sale, use or other dealings in this
    +Software without prior written authorization from the
    +authors.
    +
    +
    +****************************
    +libxml
    +****************************
    +Libxml2, an XML C Parser
    +
    +Except where otherwise noted in the source code (e.g. the files hash.c,
    +list.c and the trio files, which are covered by a similar licence but
    +with different Copyright notices) all the files are:
    +
    + Copyright (C) 1998-2012 Daniel Veillard.  All Rights Reserved.
    +
    +Permission is hereby granted, free of charge, to any person obtaining a copy
    +of this software and associated documentation files (the "Software"), to deal
    +in the Software without restriction, including without limitation the rights
    +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    +copies of the Software, and to permit persons to whom the Software is fur-
    +nished to do so, subject to the following conditions:
    +
    +The above copyright notice and this permission notice shall be included in
    +all copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FIT-
    +NESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
    +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    +THE SOFTWARE.
    +
    +--------------------------------------------------------------------
    +
    +Copyright (C) 2000,2012 Bjorn Reese and Daniel Veillard.
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
    +WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
    +MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND
    +CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER.
    +
    +Author: breese@users.sourceforge.net
    +
    +(taken from hash.c)
    +
    +--------------------------------------------------------------------
    +
    + Copyright (C) 2000 Gary Pennington and Daniel Veillard.
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
    +WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
    +MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND
    +CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER.
    +
    +Author: Gary.Pennington@uk.sun.com
    +
    +(taken from list.c)
    +
    +--------------------------------------------------------------------
    +
    +Copyright (C) 1998 Bjorn Reese and Daniel Stenberg.
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
    +WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
    +MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND
    +CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER.
    +
    +(taken from trio.h and trio.c)
    +
    +--------------------------------------------------------------------
    +
    +Copyright (C) 2001 Bjorn Reese <breese@users.sourceforge.net>
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
    +WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
    +MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND
    +CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER.
    +
    +(taken from triodef.h, trionan.h, and trionan.c)
    +
    +--------------------------------------------------------------------
    +
    +Copyright (C) 2000 Bjorn Reese and Daniel Stenberg.
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
    +WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
    +MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND
    +CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER.
    +
    +(taken from triop.h)
    +
    +--------------------------------------------------------------------
    +
    +Copyright (C) 2001 Bjorn Reese and Daniel Stenberg.
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
    +WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
    +MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND
    +CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER.
    +
    +(taken from triostr.h and triostr.c)
    +
    +*************************************************************************
    +
    +http://ctrio.sourceforge.net/
    +
    +*************************************************************************
    +
    +
    +****************************
    +lodepng
    +****************************
    +LodePNG
    +
    +Copyright (c) 2005-2013 Lode Vandevenne
    +
    +This software is provided 'as-is', without any express or implied
    +warranty. In no event will the authors be held liable for any damages
    +arising from the use of this software.
    +
    +Permission is granted to anyone to use this software for any purpose,
    +including commercial applications, and to alter it and redistribute it
    +freely, subject to the following restrictions:
    +
    +    1. The origin of this software must not be misrepresented; you must not
    +    claim that you wrote the original software. If you use this software
    +    in a product, an acknowledgment in the product documentation would be
    +    appreciated but is not required.
    +
    +    2. Altered source versions must be plainly marked as such, and must not be
    +    misrepresented as being the original software.
    +
    +    3. This notice may not be removed or altered from any source
    +    distribution.
    +
    +
    +****************************
    +minizip
    +****************************
    +zlib
    +
    +(extracted from README, except for match.S)
    +
    +Copyright notice:
    +
    + (C) 1995-2004 Jean-loup Gailly and Mark Adler
    +
    +  This software is provided 'as-is', without any express or implied
    +  warranty.  In no event will the authors be held liable for any damages
    +  arising from the use of this software.
    +
    +  Permission is granted to anyone to use this software for any purpose,
    +  including commercial applications, and to alter it and redistribute it
    +  freely, subject to the following restrictions:
    +
    +  1. The origin of this software must not be misrepresented; you must not
    +     claim that you wrote the original software. If you use this software
    +     in a product, an acknowledgment in the product documentation would be
    +     appreciated but is not required.
    +  2. Altered source versions must be plainly marked as such, and must not be
    +     misrepresented as being the original software.
    +  3. This notice may not be removed or altered from any source distribution.
    +
    +  Jean-loup Gailly        Mark Adler
    +  jloup@gzip.org          madler@alumni.caltech.edu
    +
    +
    +(extracted from match.S, for match.S only)
    +
    + Copyright (C) 1998, 2007 Brian Raiter <breadbox@muppetlabs.com>
    +
    + This software is provided 'as-is', without any express or implied
    + warranty.  In no event will the author be held liable for any damages
    + arising from the use of this software.
    +
    + Permission is granted to anyone to use this software for any purpose,
    + including commercial applications, and to alter it and redistribute it
    + freely, subject to the following restrictions:
    +
    + 1. The origin of this software must not be misrepresented; you must not
    +    claim that you wrote the original software. If you use this software
    +    in a product, an acknowledgment in the product documentation would be
    +    appreciated but is not required.
    + 2. Altered source versions must be plainly marked as such, and must not be
    +    misrepresented as being the original software.
    + 3. This notice may not be removed or altered from any source distribution.
    +
    +
    +****************************
    +mongoose
    +****************************
    +Copyright (c) 2004-2013 Sergey Lyubka
    +
    +Permission is hereby granted, free of charge, to any person obtaining a copy
    +of this software and associated documentation files (the "Software"), to deal
    +in the Software without restriction, including without limitation the rights
    +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    +copies of the Software, and to permit persons to whom the Software is
    +furnished to do so, subject to the following conditions:
    +
    +The above copyright notice and this permission notice shall be included in
    +all copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    +THE SOFTWARE.
    +
    +
    +****************************
    +objective_c/gtm_session_fetcher
    +****************************
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +****************************
    +openctm
    +****************************
    +Copyright (c) 2009-2010 Marcus Geelnard
    +
    +This software is provided 'as-is', without any express or implied
    +warranty. In no event will the authors be held liable for any damages
    +arising from the use of this software.
    +
    +Permission is granted to anyone to use this software for any purpose,
    +including commercial applications, and to alter it and redistribute it
    +freely, subject to the following restrictions:
    +
    +    1. The origin of this software must not be misrepresented; you must not
    +    claim that you wrote the original software. If you use this software
    +    in a product, an acknowledgment in the product documentation would be
    +    appreciated but is not required.
    +
    +    2. Altered source versions must be plainly marked as such, and must not
    +    be misrepresented as being the original software.
    +
    +    3. This notice may not be removed or altered from any source
    +    distribution.
    +
    +
    +****************************
    +OpenCV
    +****************************
    +IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
    +
    +By downloading, copying, installing or using the software you agree to this license.
    +If you do not agree to this license, do not download, install,
    +copy or use the software.
    +
    +
    +                       Intel License Agreement
    +               For Open Source Computer Vision Library
    +
    +Copyright (C) 2000, 2001, Intel Corporation, all rights reserved.
    +Copyright (C) 2013, OpenCV Foundation, all rights reserved.
    +Third party copyrights are property of their respective owners.
    +
    +Redistribution and use in source and binary forms, with or without modification,
    +are permitted provided that the following conditions are met:
    +
    +  * Redistribution's of source code must retain the above copyright notice,
    +    this list of conditions and the following disclaimer.
    +
    +  * Redistribution's in binary form must reproduce the above copyright notice,
    +    this list of conditions and the following disclaimer in the documentation
    +    and/or other materials provided with the distribution.
    +
    +  * The name of Intel Corporation may not be used to endorse or promote products
    +    derived from this software without specific prior written permission.
    +
    +This software is provided by the copyright holders and contributors "as is" and
    +any express or implied warranties, including, but not limited to, the implied
    +warranties of merchantability and fitness for a particular purpose are disclaimed.
    +In no event shall the Intel Corporation or contributors be liable for any direct,
    +indirect, incidental, special, exemplary, or consequential damages
    +(including, but not limited to, procurement of substitute goods or services;
    +loss of use, data, or profits; or business interruption) however caused
    +and on any theory of liability, whether in contract, strict liability,
    +or tort (including negligence or otherwise) arising in any way out of
    +the use of this software, even if advised of the possibility of such damage.
    +
    +****************************
    +openssl
    +****************************
    +BoringSSL is a fork of OpenSSL. As such, large parts of it fall under OpenSSL
    +licensing. Files that are completely new have a Google copyright and an ISC
    +license. This license is reproduced at the bottom of this file.
    +
    +Contributors to BoringSSL are required to follow the CLA rules for Chromium:
    +https://cla.developers.google.com/clas
    +
    +Some files from Intel are under yet another license, which is also included
    +underneath.
    +
    +The OpenSSL toolkit stays under a dual license, i.e. both the conditions of the
    +OpenSSL License and the original SSLeay license apply to the toolkit. See below
    +for the actual license texts. Actually both licenses are BSD-style Open Source
    +licenses. In case of any license issues related to OpenSSL please contact
    +openssl-core@openssl.org.
    +
    +  OpenSSL License
    +  ---------------
    +
    +/* ====================================================================
    + * Copyright (c) 1998-2011 The OpenSSL Project.  All rights reserved.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions
    + * are met:
    + *
    + * 1. Redistributions of source code must retain the above copyright
    + *    notice, this list of conditions and the following disclaimer.
    + *
    + * 2. Redistributions in binary form must reproduce the above copyright
    + *    notice, this list of conditions and the following disclaimer in
    + *    the documentation and/or other materials provided with the
    + *    distribution.
    + *
    + * 3. All advertising materials mentioning features or use of this
    + *    software must display the following acknowledgment:
    + *    "This product includes software developed by the OpenSSL Project
    + *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
    + *
    + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
    + *    endorse or promote products derived from this software without
    + *    prior written permission. For written permission, please contact
    + *    openssl-core@openssl.org.
    + *
    + * 5. Products derived from this software may not be called "OpenSSL"
    + *    nor may "OpenSSL" appear in their names without prior written
    + *    permission of the OpenSSL Project.
    + *
    + * 6. Redistributions of any form whatsoever must retain the following
    + *    acknowledgment:
    + *    "This product includes software developed by the OpenSSL Project
    + *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
    + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    + * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
    + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
    + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
    + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
    + * OF THE POSSIBILITY OF SUCH DAMAGE.
    + * ====================================================================
    + *
    + * This product includes cryptographic software written by Eric Young
    + * (eay@cryptsoft.com).  This product includes software written by Tim
    + * Hudson (tjh@cryptsoft.com).
    + *
    + */
    +
    + Original SSLeay License
    + -----------------------
    +
    +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
    + * All rights reserved.
    + *
    + * This package is an SSL implementation written
    + * by Eric Young (eay@cryptsoft.com).
    + * The implementation was written so as to conform with Netscapes SSL.
    + *
    + * This library is free for commercial and non-commercial use as long as
    + * the following conditions are aheared to.  The following conditions
    + * apply to all code found in this distribution, be it the RC4, RSA,
    + * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
    + * included with this distribution is covered by the same copyright terms
    + * except that the holder is Tim Hudson (tjh@cryptsoft.com).
    + *
    + * Copyright remains Eric Young's, and as such any Copyright notices in
    + * the code are not to be removed.
    + * If this package is used in a product, Eric Young should be given attribution
    + * as the author of the parts of the library used.
    + * This can be in the form of a textual message at program startup or
    + * in documentation (online or textual) provided with the package.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions
    + * are met:
    + * 1. Redistributions of source code must retain the copyright
    + *    notice, this list of conditions and the following disclaimer.
    + * 2. Redistributions in binary form must reproduce the above copyright
    + *    notice, this list of conditions and the following disclaimer in the
    + *    documentation and/or other materials provided with the distribution.
    + * 3. All advertising materials mentioning features or use of this software
    + *    must display the following acknowledgement:
    + *    "This product includes cryptographic software written by
    + *     Eric Young (eay@cryptsoft.com)"
    + *    The word 'cryptographic' can be left out if the rouines from the library
    + *    being used are not cryptographic related :-).
    + * 4. If you include any Windows specific code (or a derivative thereof) from
    + *    the apps directory (application code) you must include an acknowledgement:
    + *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
    + *
    + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
    + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    + * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    + * SUCH DAMAGE.
    + *
    + * The licence and distribution terms for any publically available version or
    + * derivative of this code cannot be changed.  i.e. this code cannot simply be
    + * copied and put under another distribution licence
    + * [including the GNU Public Licence.]
    + */
    +
    +
    +ISC license used for completely new code in BoringSSL:
    +
    +/* Copyright (c) 2015, Google Inc.
    + *
    + * Permission to use, copy, modify, and/or distribute this software for any
    + * purpose with or without fee is hereby granted, provided that the above
    + * copyright notice and this permission notice appear in all copies.
    + *
    + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
    + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
    + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
    + * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
    + * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
    + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
    +
    +
    +Some files from Intel carry the following license:
    +
    +# Copyright (c) 2012, Intel Corporation
    +#
    +# All rights reserved.
    +#
    +# Redistribution and use in source and binary forms, with or without
    +# modification, are permitted provided that the following conditions are
    +# met:
    +#
    +# *  Redistributions of source code must retain the above copyright
    +#    notice, this list of conditions and the following disclaimer.
    +#
    +# *  Redistributions in binary form must reproduce the above copyright
    +#    notice, this list of conditions and the following disclaimer in the
    +#    documentation and/or other materials provided with the
    +#    distribution.
    +#
    +# *  Neither the name of the Intel Corporation nor the names of its
    +#    contributors may be used to endorse or promote products derived from
    +#    this software without specific prior written permission.
    +#
    +#
    +# THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION ""AS IS"" AND ANY
    +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION OR
    +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
    +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
    +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
    +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
    +# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
    +# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +****************************
    +openssl/boringssl
    +****************************
    +BoringSSL is a fork of OpenSSL. As such, large parts of it fall under OpenSSL
    +licensing. Files that are completely new have a Google copyright and an ISC
    +license. This license is reproduced at the bottom of this file.
    +
    +Contributors to BoringSSL are required to follow the CLA rules for Chromium:
    +https://cla.developers.google.com/clas
    +
    +Some files from Intel are under yet another license, which is also included
    +underneath.
    +
    +The OpenSSL toolkit stays under a dual license, i.e. both the conditions of the
    +OpenSSL License and the original SSLeay license apply to the toolkit. See below
    +for the actual license texts. Actually both licenses are BSD-style Open Source
    +licenses. In case of any license issues related to OpenSSL please contact
    +openssl-core@openssl.org.
    +
    +  OpenSSL License
    +  ---------------
    +
    +/* ====================================================================
    + * Copyright (c) 1998-2011 The OpenSSL Project.  All rights reserved.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions
    + * are met:
    + *
    + * 1. Redistributions of source code must retain the above copyright
    + *    notice, this list of conditions and the following disclaimer.
    + *
    + * 2. Redistributions in binary form must reproduce the above copyright
    + *    notice, this list of conditions and the following disclaimer in
    + *    the documentation and/or other materials provided with the
    + *    distribution.
    + *
    + * 3. All advertising materials mentioning features or use of this
    + *    software must display the following acknowledgment:
    + *    "This product includes software developed by the OpenSSL Project
    + *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
    + *
    + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
    + *    endorse or promote products derived from this software without
    + *    prior written permission. For written permission, please contact
    + *    openssl-core@openssl.org.
    + *
    + * 5. Products derived from this software may not be called "OpenSSL"
    + *    nor may "OpenSSL" appear in their names without prior written
    + *    permission of the OpenSSL Project.
    + *
    + * 6. Redistributions of any form whatsoever must retain the following
    + *    acknowledgment:
    + *    "This product includes software developed by the OpenSSL Project
    + *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
    + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    + * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
    + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
    + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
    + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
    + * OF THE POSSIBILITY OF SUCH DAMAGE.
    + * ====================================================================
    + *
    + * This product includes cryptographic software written by Eric Young
    + * (eay@cryptsoft.com).  This product includes software written by Tim
    + * Hudson (tjh@cryptsoft.com).
    + *
    + */
    +
    + Original SSLeay License
    + -----------------------
    +
    +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
    + * All rights reserved.
    + *
    + * This package is an SSL implementation written
    + * by Eric Young (eay@cryptsoft.com).
    + * The implementation was written so as to conform with Netscapes SSL.
    + *
    + * This library is free for commercial and non-commercial use as long as
    + * the following conditions are aheared to.  The following conditions
    + * apply to all code found in this distribution, be it the RC4, RSA,
    + * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
    + * included with this distribution is covered by the same copyright terms
    + * except that the holder is Tim Hudson (tjh@cryptsoft.com).
    + *
    + * Copyright remains Eric Young's, and as such any Copyright notices in
    + * the code are not to be removed.
    + * If this package is used in a product, Eric Young should be given attribution
    + * as the author of the parts of the library used.
    + * This can be in the form of a textual message at program startup or
    + * in documentation (online or textual) provided with the package.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions
    + * are met:
    + * 1. Redistributions of source code must retain the copyright
    + *    notice, this list of conditions and the following disclaimer.
    + * 2. Redistributions in binary form must reproduce the above copyright
    + *    notice, this list of conditions and the following disclaimer in the
    + *    documentation and/or other materials provided with the distribution.
    + * 3. All advertising materials mentioning features or use of this software
    + *    must display the following acknowledgement:
    + *    "This product includes cryptographic software written by
    + *     Eric Young (eay@cryptsoft.com)"
    + *    The word 'cryptographic' can be left out if the rouines from the library
    + *    being used are not cryptographic related :-).
    + * 4. If you include any Windows specific code (or a derivative thereof) from
    + *    the apps directory (application code) you must include an acknowledgement:
    + *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
    + *
    + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
    + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    + * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    + * SUCH DAMAGE.
    + *
    + * The licence and distribution terms for any publically available version or
    + * derivative of this code cannot be changed.  i.e. this code cannot simply be
    + * copied and put under another distribution licence
    + * [including the GNU Public Licence.]
    + */
    +
    +
    +ISC license used for completely new code in BoringSSL:
    +
    +/* Copyright (c) 2015, Google Inc.
    + *
    + * Permission to use, copy, modify, and/or distribute this software for any
    + * purpose with or without fee is hereby granted, provided that the above
    + * copyright notice and this permission notice appear in all copies.
    + *
    + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
    + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
    + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
    + * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
    + * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
    + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
    +
    +
    +Some files from Intel carry the following license:
    +
    +# Copyright (c) 2012, Intel Corporation
    +#
    +# All rights reserved.
    +#
    +# Redistribution and use in source and binary forms, with or without
    +# modification, are permitted provided that the following conditions are
    +# met:
    +#
    +# *  Redistributions of source code must retain the above copyright
    +#    notice, this list of conditions and the following disclaimer.
    +#
    +# *  Redistributions in binary form must reproduce the above copyright
    +#    notice, this list of conditions and the following disclaimer in the
    +#    documentation and/or other materials provided with the
    +#    distribution.
    +#
    +# *  Neither the name of the Intel Corporation nor the names of its
    +#    contributors may be used to endorse or promote products derived from
    +#    this software without specific prior written permission.
    +#
    +#
    +# THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION ""AS IS"" AND ANY
    +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION OR
    +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
    +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
    +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
    +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
    +# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
    +# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +****************************
    +pcre
    +****************************
    +PCRE LICENCE
    +------------
    +
    +PCRE is a library of functions to support regular expressions whose syntax
    +and semantics are as close as possible to those of the Perl 5 language.
    +
    +Release 8 of PCRE is distributed under the terms of the "BSD" licence, as
    +specified below. The documentation for PCRE, supplied in the "doc"
    +directory, is distributed under the same terms as the software itself. The data
    +in the testdata directory is not copyrighted and is in the public domain.
    +
    +The basic library functions are written in C and are freestanding. Also
    +included in the distribution is a set of C++ wrapper functions, and a
    +just-in-time compiler that can be used to optimize pattern matching. These
    +are both optional features that can be omitted when the library is built.
    +
    +
    +THE BASIC LIBRARY FUNCTIONS
    +---------------------------
    +
    +Written by:       Philip Hazel
    +Email local part: ph10
    +Email domain:     cam.ac.uk
    +
    +University of Cambridge Computing Service,
    +Cambridge, England.
    +
    +Copyright (c) 1997-2015 University of Cambridge
    +All rights reserved.
    +
    +
    +PCRE JUST-IN-TIME COMPILATION SUPPORT
    +-------------------------------------
    +
    +Written by:       Zoltan Herczeg
    +Email local part: hzmester
    +Emain domain:     freemail.hu
    +
    +Copyright(c) 2010-2015 Zoltan Herczeg
    +All rights reserved.
    +
    +
    +STACK-LESS JUST-IN-TIME COMPILER
    +--------------------------------
    +
    +Written by:       Zoltan Herczeg
    +Email local part: hzmester
    +Emain domain:     freemail.hu
    +
    +Copyright(c) 2009-2015 Zoltan Herczeg
    +All rights reserved.
    +
    +
    +THE C++ WRAPPER FUNCTIONS
    +-------------------------
    +
    +Contributed by:   Google Inc.
    +
    +Copyright (c) 2007-2012, Google Inc.
    +All rights reserved.
    +
    +
    +THE "BSD" LICENCE
    +-----------------
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are met:
    +
    +    * Redistributions of source code must retain the above copyright notice,
    +      this list of conditions and the following disclaimer.
    +
    +    * Redistributions in binary form must reproduce the above copyright
    +      notice, this list of conditions and the following disclaimer in the
    +      documentation and/or other materials provided with the distribution.
    +
    +    * Neither the name of the University of Cambridge nor the name of Google
    +      Inc. nor the names of their contributors may be used to endorse or
    +      promote products derived from this software without specific prior
    +      written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
    +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
    +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
    +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
    +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
    +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
    +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
    +POSSIBILITY OF SUCH DAMAGE.
    +
    +End
    +
    +
    +****************************
    +pffft
    +****************************
    +Copyright (c) 2013  Julien Pommier ( pommier@modartt.com )
    +
    +Based on original fortran 77 code from FFTPACKv4 from NETLIB,
    +authored by Dr Paul Swarztrauber of NCAR, in 1985.
    +
    +As confirmed by the NCAR fftpack software curators, the following
    +FFTPACKv5 license applies to FFTPACKv4 sources. My changes are
    +released under the same terms.
    +
    +FFTPACK license:
    +
    +http://www.cisl.ucar.edu/css/software/fftpack5/ftpk.html
    +
    +Copyright (c) 2004 the University Corporation for Atmospheric
    +Research ("UCAR"). All rights reserved. Developed by NCAR's
    +Computational and Information Systems Laboratory, UCAR,
    +www.cisl.ucar.edu.
    +
    +Redistribution and use of the Software in source and binary forms,
    +with or without modification, is permitted provided that the
    +following conditions are met:
    +
    +- Neither the names of NCAR's Computational and Information Systems
    +Laboratory, the University Corporation for Atmospheric Research,
    +nor the names of its sponsors or contributors may be used to
    +endorse or promote products derived from this Software without
    +specific prior written permission.
    +
    +- Redistributions of source code must retain the above copyright
    +notices, this list of conditions, and the disclaimer below.
    +
    +- Redistributions in binary form must reproduce the above copyright
    +notice, this list of conditions, and the disclaimer below in the
    +documentation and/or other materials provided with the
    +distribution.
    +
    +THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
    +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
    +HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
    +EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
    +ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
    +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
    +SOFTWARE.
    +
    +
    +****************************
    +png
    +****************************
    +libpng
    +
    +This copy of the libpng notices is provided for your convenience.  In case of
    +any discrepancy between this copy and the notices in the file png.h that is
    +included in the libpng distribution, the latter shall prevail.
    +
    +COPYRIGHT NOTICE, DISCLAIMER, and LICENSE:
    +
    +If you modify libpng you may insert additional notices immediately following
    +this sentence.
    +
    +libpng versions 1.2.6, August 15, 2004, through 1.2.27, April 29, 2008, are
    +Copyright (c) 2004, 2006-2008 Glenn Randers-Pehrson, and are
    +distributed according to the same disclaimer and license as libpng-1.2.5
    +with the following individual added to the list of Contributing Authors
    +
    +   Cosmin Truta
    +
    +libpng versions 1.0.7, July 1, 2000, through 1.2.5 - October 3, 2002, are
    +Copyright (c) 2000-2002 Glenn Randers-Pehrson, and are
    +distributed according to the same disclaimer and license as libpng-1.0.6
    +with the following individuals added to the list of Contributing Authors
    +
    +   Simon-Pierre Cadieux
    +   Eric S. Raymond
    +   Gilles Vollant
    +
    +and with the following additions to the disclaimer:
    +
    +   There is no warranty against interference with your enjoyment of the
    +   library or against infringement.  There is no warranty that our
    +   efforts or the library will fulfill any of your particular purposes
    +   or needs.  This library is provided with all faults, and the entire
    +   risk of satisfactory quality, performance, accuracy, and effort is with
    +   the user.
    +
    +libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are
    +Copyright (c) 1998, 1999 Glenn Randers-Pehrson, and are
    +distributed according to the same disclaimer and license as libpng-0.96,
    +with the following individuals added to the list of Contributing Authors:
    +
    +   Tom Lane
    +   Glenn Randers-Pehrson
    +   Willem van Schaik
    +
    +libpng versions 0.89, June 1996, through 0.96, May 1997, are
    +Copyright (c) 1996, 1997 Andreas Dilger
    +Distributed according to the same disclaimer and license as libpng-0.88,
    +with the following individuals added to the list of Contributing Authors:
    +
    +   John Bowler
    +   Kevin Bracey
    +   Sam Bushell
    +   Magnus Holmgren
    +   Greg Roelofs
    +   Tom Tanner
    +
    +libpng versions 0.5, May 1995, through 0.88, January 1996, are
    +Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
    +
    +For the purposes of this copyright and license, "Contributing Authors"
    +is defined as the following set of individuals:
    +
    +   Andreas Dilger
    +   Dave Martindale
    +   Guy Eric Schalnat
    +   Paul Schmidt
    +   Tim Wegner
    +
    +The PNG Reference Library is supplied "AS IS".  The Contributing Authors
    +and Group 42, Inc. disclaim all warranties, expressed or implied,
    +including, without limitation, the warranties of merchantability and of
    +fitness for any purpose.  The Contributing Authors and Group 42, Inc.
    +assume no liability for direct, indirect, incidental, special, exemplary,
    +or consequential damages, which may result from the use of the PNG
    +Reference Library, even if advised of the possibility of such damage.
    +
    +Permission is hereby granted to use, copy, modify, and distribute this
    +source code, or portions hereof, for any purpose, without fee, subject
    +to the following restrictions:
    +
    +1. The origin of this source code must not be misrepresented.
    +
    +2. Altered versions must be plainly marked as such and must not
    +   be misrepresented as being the original source.
    +
    +3. This Copyright notice may not be removed or altered from any
    +   source or altered source distribution.
    +
    +The Contributing Authors and Group 42, Inc. specifically permit, without
    +fee, and encourage the use of this source code as a component to
    +supporting the PNG file format in commercial products.  If you use this
    +source code in a product, acknowledgment is not required but would be
    +appreciated.
    +
    +
    +A "png_get_copyright" function is available, for convenient use in "about"
    +boxes and the like:
    +
    +   printf("%s",png_get_copyright(NULL));
    +
    +Also, the PNG logo (in PNG format, of course) is supplied in the
    +files "pngbar.png" and "pngbar.jpg (88x31) and "pngnow.png" (98x31).
    +
    +Libpng is OSI Certified Open Source Software.  OSI Certified Open Source is a
    +certification mark of the Open Source Initiative.
    +
    +Glenn Randers-Pehrson
    +glennrp at users.sourceforge.net
    +April 29, 2008
    +
    +
    +****************************
    +protobuf
    +****************************
    +Copyright 2008, Google Inc.
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are
    +met:
    +
    +    * Redistributions of source code must retain the above copyright
    +notice, this list of conditions and the following disclaimer.
    +    * Redistributions in binary form must reproduce the above
    +copyright notice, this list of conditions and the following disclaimer
    +in the documentation and/or other materials provided with the
    +distribution.
    +    * Neither the name of Google Inc. nor the names of its
    +contributors may be used to endorse or promote products derived from
    +this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +Code generated by the Protocol Buffer compiler is owned by the owner
    +of the input file used when generating it.  This code is not
    +standalone and requires a support library to be linked with it.  This
    +support library is itself covered by the above license.
    +
    +
    +****************************
    +re2
    +****************************
    +// Copyright (c) 2009 The RE2 Authors. All rights reserved.
    +//
    +// Redistribution and use in source and binary forms, with or without
    +// modification, are permitted provided that the following conditions are
    +// met:
    +//
    +//    * Redistributions of source code must retain the above copyright
    +// notice, this list of conditions and the following disclaimer.
    +//    * Redistributions in binary form must reproduce the above
    +// copyright notice, this list of conditions and the following disclaimer
    +// in the documentation and/or other materials provided with the
    +// distribution.
    +//    * Neither the name of Google Inc. nor the names of its
    +// contributors may be used to endorse or promote products derived from
    +// this software without specific prior written permission.
    +//
    +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +****************************
    +stblib
    +****************************
    +        License for STBLIB - A collection of public-domain single-file C/C++
    +        libraries, primarily aimed at game developers.
    +
    +The compilation and test files are licensed under the MIT license, but the
    +single-file libraries themselves are in the public domain (free for use and
    +modification for any purpose without legal friction).
    +
    +The MIT License (MIT)
    +
    +Permission is hereby granted, free of charge, to any person obtaining a copy
    + of this software and associated documentation files (the "Software"), to deal
    + in the Software without restriction, including without limitation the rights
    + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    + copies of the Software, and to permit persons to whom the Software is
    + furnished to do so, subject to the following conditions:
    +
    +The above copyright notice and this permission notice shall be included in
    + all copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    + THE SOFTWARE.
    +
    +
    +****************************
    +stl
    +****************************
    +SGI STL
    +
    +The STL portion of GNU libstdc++ that is used with gcc3 and gcc4 is licensed
    +under the GPL, with the following exception:
    +
    +# As a special exception, you may use this file as part of a free software
    +# library without restriction.  Specifically, if other files instantiate
    +# templates or use macros or inline functions from this file, or you compile
    +# this file and link it with other files to produce an executable, this
    +# file does not by itself cause the resulting executable to be covered by
    +# the GNU General Public License.  This exception does not however
    +# invalidate any other reasons why the executable file might be covered by
    +# the GNU General Public License.
    +
    +
    +
    +****************************
    +tinyxml
    +****************************
    +TinyXml is released under the zlib license:
    +
    +This software is provided 'as-is', without any express or implied
    +warranty. In no event will the authors be held liable for any
    +damages arising from the use of this software.
    +
    +Permission is granted to anyone to use this software for any
    +purpose, including commercial applications, and to alter it and
    +redistribute it freely, subject to the following restrictions:
    +
    +1. The origin of this software must not be misrepresented; you must
    +not claim that you wrote the original software. If you use this
    +software in a product, an acknowledgment in the product documentation
    +would be appreciated but is not required.
    +
    +2. Altered source versions must be plainly marked as such, and
    +must not be misrepresented as being the original software.
    +
    +3. This notice may not be removed or altered from any source
    +distribution.
    +
    +
    +
    +****************************
    +tz
    +****************************
    +With a few exceptions, all files in the tz code and data (including
    +this one) are in the public domain.  The exceptions are tzcode's
    +date.c, newstrftime.3, and strftime.c, which contain material derived
    +from BSD and which use the BSD 3-clause license.
    +
    +
    +****************************
    +utf
    +****************************
    +UTF-8 Library
    +
    +The authors of this software are Rob Pike and Ken Thompson.
    +             Copyright (c) 1998-2002 by Lucent Technologies.
    +Permission to use, copy, modify, and distribute this software for any
    +purpose without fee is hereby granted, provided that this entire notice
    +is included in all copies of any software which is or includes a copy
    +or modification of this software and in all copies of the supporting
    +documentation for such software.
    +THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
    +WARRANTY.  IN PARTICULAR, NEITHER THE AUTHORS NOR LUCENT TECHNOLOGIES MAKE ANY
    +REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY
    +OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
    +
    +
    +****************************
    +xmpmeta
    +****************************
    +xmpmeta. A fast XMP metadata parsing and writing library.
    +Copyright 2016 Google Inc. All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are met:
    +
    +* Redistributions of source code must retain the above copyright notice,
    +  this list of conditions and the following disclaimer.
    +* Redistributions in binary form must reproduce the above copyright notice,
    +  this list of conditions and the following disclaimer in the documentation
    +  and/or other materials provided with the distribution.
    +* Neither the name of Google Inc. nor the names of its contributors may be
    +  used to endorse or promote products derived from this software without
    +  specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
    +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
    +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
    +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
    +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
    +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
    +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
    +POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +****************************
    +Xorg
    +****************************
    +The following is the 'standard copyright' agreed upon by most contributors,
    +and is currently the canonical license preferred by the X.Org Foundation.
    +This is a slight variant of the common MIT license form published by the
    +Open Source Initiative at http://www.opensource.org/licenses/mit-license.php
    +
    +Copyright holders of new code should use this license statement where
    +possible, and insert their name to this list.  Please sort by surname
    +for people, and by the full name for other entities (e.g.  Juliusz
    +Chroboczek sorts before Intel Corporation sorts before Daniel Stone).
    +
    +See each individual source file or directory for the license that applies
    +to that file.
    +
    +Copyright (C) 2003-2006,2008 Jamey Sharp, Josh Triplett
    +Copyright © 2009 Red Hat, Inc.
    +Copyright 1990-1992,1999,2000,2004,2009,2010 Oracle and/or its affiliates.
    +All rights reserved.
    +
    +Permission is hereby granted, free of charge, to any person obtaining a
    +copy of this software and associated documentation files (the "Software"),
    +to deal in the Software without restriction, including without limitation
    +the rights to use, copy, modify, merge, publish, distribute, sublicense,
    +and/or sell copies of the Software, and to permit persons to whom the
    +Software is furnished to do so, subject to the following conditions:
    +
    +The above copyright notice and this permission notice (including the next
    +paragraph) shall be included in all copies or substantial portions of the
    +Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
    +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
    +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
    +DEALINGS IN THE SOFTWARE.
    +
    + ----------------------------------------------------------------------
    +
    +The following licenses are 'legacy' - usually MIT/X11 licenses with the name
    +of the copyright holder(s) in the license statement:
    +
    +Copyright 1984-1994, 1998 The Open Group
    +
    +Permission to use, copy, modify, distribute, and sell this software and its
    +documentation for any purpose is hereby granted without fee, provided that
    +the above copyright notice appear in all copies and that both that
    +copyright notice and this permission notice appear in supporting
    +documentation.
    +
    +The above copyright notice and this permission notice shall be included in
    +all copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
    +OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
    +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
    +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +
    +Except as contained in this notice, the name of The Open Group shall not be
    +used in advertising or otherwise to promote the sale, use or other dealings
    +in this Software without prior written authorization from The Open Group.
    +
    +X Window System is a trademark of The Open Group.
    +
    +    ----------------------------------------
    +
    +Copyright 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium
    +Copyright 2000 The XFree86 Project, Inc.
    +
    +Permission is hereby granted, free of charge, to any person obtaining
    +a copy of this software and associated documentation files (the
    +"Software"), to deal in the Software without restriction, including
    +without limitation the rights to use, copy, modify, merge, publish,
    +distribute, sublicense, and/or sell copies of the Software, and to
    +permit persons to whom the Software is furnished to do so, subject to
    +the following conditions:
    +
    +The above copyright notice and this permission notice shall be included
    +in all copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
    +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
    +IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR
    +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
    +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
    +OTHER DEALINGS IN THE SOFTWARE.
    +
    +Except as contained in this notice, the name of the X Consortium shall
    +not be used in advertising or otherwise to promote the sale, use or
    +other dealings in this Software without prior written authorization
    +from the X Consortium.
    +
    +Copyright 1985, 1986, 1987, 1988, 1989, 1990, 1991 by
    +Digital Equipment Corporation
    +
    +Portions Copyright 1990, 1991 by Tektronix, Inc.
    +
    +Permission to use, copy, modify and distribute this documentation for
    +any purpose and without fee is hereby granted, provided that the above
    +copyright notice appears in all copies and that both that copyright notice
    +and this permission notice appear in all copies, and that the names of
    +Digital and Tektronix not be used in in advertising or publicity pertaining
    +to this documentation without specific, written prior permission.
    +Digital and Tektronix makes no representations about the suitability
    +of this documentation for any purpose.
    +It is provided ``as is'' without express or implied warranty.
    +
    +    ----------------------------------------
    +
    +Copyright (c) 1999-2000  Free Software Foundation, Inc.
    +
    +Permission is hereby granted, free of charge, to any person obtaining a copy
    +of this software and associated documentation files (the "Software"), to deal
    +in the Software without restriction, including without limitation the rights
    +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    +copies of the Software, and to permit persons to whom the Software is
    +furnished to do so, subject to the following conditions:
    +
    +The above copyright notice and this permission notice shall be included in
    +all copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
    +FREE SOFTWARE FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
    +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
    +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +
    +Except as contained in this notice, the name of the Free Software Foundation
    +shall not be used in advertising or otherwise to promote the sale, use or
    +other dealings in this Software without prior written authorization from the
    +Free Software Foundation.
    +
    +    ----------------------------------------
    +
    +Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc.
    +  All Rights Reserved
    +
    +This file is a component of an X Window System-specific implementation
    +of Xcms based on the TekColor Color Management System.  TekColor is a
    +trademark of Tektronix, Inc.  The term "TekHVC" designates a particular
    +color space that is the subject of U.S. Patent No. 4,985,853 (equivalent
    +foreign patents pending).  Permission is hereby granted to use, copy,
    +modify, sell, and otherwise distribute this software and its
    +documentation for any purpose and without fee, provided that:
    +
    +1. This copyright, permission, and disclaimer notice is reproduced in
    +   all copies of this software and any modification thereof and in
    +   supporting documentation;
    +2. Any color-handling application which displays TekHVC color
    +   cooordinates identifies these as TekHVC color coordinates in any
    +   interface that displays these coordinates and in any associated
    +   documentation;
    +3. The term "TekHVC" is always used, and is only used, in association
    +   with the mathematical derivations of the TekHVC Color Space,
    +   including those provided in this file and any equivalent pathways and
    +   mathematical derivations, regardless of digital (e.g., floating point
    +   or integer) representation.
    +
    +Tektronix makes no representation about the suitability of this software
    +for any purpose.  It is provided "as is" and with all faults.
    +
    +TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE,
    +INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
    +PARTICULAR PURPOSE.  IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY
    +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
    +RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF
    +CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
    +CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE.
    +
    +    ----------------------------------------
    +
    +(c) Copyright 1995 FUJITSU LIMITED
    +This is source code modified by FUJITSU LIMITED under the Joint
    +Development Agreement for the CDE/Motif PST.
    +
    +    ----------------------------------------
    +
    +Copyright 1992 by Oki Technosystems Laboratory, Inc.
    +Copyright 1992 by Fuji Xerox Co., Ltd.
    +
    +Permission to use, copy, modify, distribute, and sell this software
    +and its documentation for any purpose is hereby granted without fee,
    +provided that the above copyright notice appear in all copies and
    +that both that copyright notice and this permission notice appear
    +in supporting documentation, and that the name of Oki Technosystems
    +Laboratory and Fuji Xerox not be used in advertising or publicity
    +pertaining to distribution of the software without specific, written
    +prior permission.
    +Oki Technosystems Laboratory and Fuji Xerox make no representations
    +about the suitability of this software for any purpose.  It is provided
    +"as is" without express or implied warranty.
    +
    +OKI TECHNOSYSTEMS LABORATORY AND FUJI XEROX DISCLAIM ALL WARRANTIES
    +WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL OKI TECHNOSYSTEMS
    +LABORATORY AND FUJI XEROX BE LIABLE FOR ANY SPECIAL, INDIRECT OR
    +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
    +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
    +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE
    +OR PERFORMANCE OF THIS SOFTWARE.
    +
    +    ----------------------------------------
    +
    +Copyright 1990, 1991, 1992, 1993, 1994 by FUJITSU LIMITED
    +
    +Permission to use, copy, modify, distribute, and sell this software
    +and its documentation for any purpose is hereby granted without fee,
    +provided that the above copyright notice appear in all copies and
    +that both that copyright notice and this permission notice appear
    +in supporting documentation, and that the name of FUJITSU LIMITED
    +not be used in advertising or publicity pertaining to distribution
    +of the software without specific, written prior permission.
    +FUJITSU LIMITED makes no representations about the suitability of
    +this software for any purpose.
    +It is provided "as is" without express or implied warranty.
    +
    +FUJITSU LIMITED DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
    +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
    +EVENT SHALL FUJITSU LIMITED BE LIABLE FOR ANY SPECIAL, INDIRECT OR
    +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
    +USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
    +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
    +PERFORMANCE OF THIS SOFTWARE.
    +
    +    ----------------------------------------
    +
    +
    +Copyright (c) 1995 David E. Wexelblat.  All rights reserved
    +
    +Permission is hereby granted, free of charge, to any person obtaining
    +a copy of this software and associated documentation files (the
    +"Software"), to deal in the Software without restriction, including
    +without limitation the rights to use, copy, modify, merge, publish,
    +distribute, sublicense, and/or sell copies of the Software, and to
    +permit persons to whom the Software is furnished to do so, subject to
    +the following conditions:
    +
    +The above copyright notice and this permission notice shall be included
    +in all copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
    +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
    +IN NO EVENT SHALL DAVID E. WEXELBLAT BE LIABLE FOR ANY CLAIM, DAMAGES OR
    +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
    +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
    +OTHER DEALINGS IN THE SOFTWARE.
    +
    +Except as contained in this notice, the name of David E. Wexelblat shall
    +not be used in advertising or otherwise to promote the sale, use or
    +other dealings in this Software without prior written authorization
    +from David E. Wexelblat.
    +
    +    ----------------------------------------
    +
    +Copyright 1990, 1991 by OMRON Corporation
    +
    +Permission to use, copy, modify, distribute, and sell this software and its
    +documentation for any purpose is hereby granted without fee, provided that
    +the above copyright notice appear in all copies and that both that
    +copyright notice and this permission notice appear in supporting
    +documentation, and that the name OMRON not be used in
    +advertising or publicity pertaining to distribution of the software without
    +specific, written prior permission.  OMRON makes no representations
    +about the suitability of this software for any purpose.  It is provided
    +"as is" without express or implied warranty.
    +
    +OMRON DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
    +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
    +EVENT SHALL OMRON BE LIABLE FOR ANY SPECIAL, INDIRECT OR
    +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
    +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
    +TORTUOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
    +PERFORMANCE OF THIS SOFTWARE.
    +
    +    ----------------------------------------
    +
    +Copyright 1985, 1986, 1987, 1988, 1989, 1990, 1991 by
    +Digital Equipment Corporation
    +
    +Portions Copyright 1990, 1991 by Tektronix, Inc
    +
    +Rewritten for X.org by Chris Lee <clee@freedesktop.org>
    +
    +Permission to use, copy, modify, distribute, and sell this documentation
    +for any purpose and without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +Chris Lee makes no representations about the suitability for any purpose
    +of the information in this document.  It is provided \`\`as-is'' without
    +express or implied warranty.
    +
    +    ----------------------------------------
    +
    +Copyright 1993 by Digital Equipment Corporation, Maynard, Massachusetts,
    +Copyright 1994 by FUJITSU LIMITED
    +Copyright 1994 by Sony Corporation
    +
    +                        All Rights Reserved
    +
    +Permission to use, copy, modify, and distribute this software and its
    +documentation for any purpose and without fee is hereby granted,
    +provided that the above copyright notice appear in all copies and that
    +both that copyright notice and this permission notice appear in
    +supporting documentation, and that the names of Digital, FUJITSU
    +LIMITED and Sony Corporation not be used in advertising or publicity
    +pertaining to distribution of the software without specific, written
    +prior permission.
    +
    +DIGITAL, FUJITSU LIMITED AND SONY CORPORATION DISCLAIMS ALL WARRANTIES
    +WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL, FUJITSU LIMITED
    +AND SONY CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT OR
    +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
    +USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
    +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
    +PERFORMANCE OF THIS SOFTWARE.
    +
    +    ----------------------------------------
    +
    +
    +Copyright 1991 by the Open Software Foundation
    +
    +Permission to use, copy, modify, distribute, and sell this software and its
    +documentation for any purpose is hereby granted without fee, provided that
    +the above copyright notice appear in all copies and that both that
    +copyright notice and this permission notice appear in supporting
    +documentation, and that the name of Open Software Foundation
    +not be used in advertising or publicity pertaining to distribution of the
    +software without specific, written prior permission.  Open Software
    +Foundation makes no representations about the suitability of this
    +software for any purpose.  It is provided "as is" without express or
    +implied warranty.
    +
    +OPEN SOFTWARE FOUNDATION DISCLAIMS ALL WARRANTIES WITH REGARD TO
    +THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
    +FITNESS, IN NO EVENT SHALL OPEN SOFTWARE FOUNDATIONN BE
    +LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
    +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +    ----------------------------------------
    +
    +Copyright 1990, 1991, 1992,1993, 1994 by FUJITSU LIMITED
    +Copyright 1993, 1994                  by Sony Corporation
    +
    +Permission to use, copy, modify, distribute, and sell this software and
    +its documentation for any purpose is hereby granted without fee, provided
    +that the above copyright notice appear in all copies and that both that
    +copyright notice and this permission notice appear in supporting
    +documentation, and that the name of FUJITSU LIMITED and Sony Corporation
    +not be used in advertising or publicity pertaining to distribution of the
    +software without specific, written prior permission.  FUJITSU LIMITED and
    +Sony Corporation makes no representations about the suitability of this
    +software for any purpose.  It is provided "as is" without express or
    +implied warranty.
    +
    +FUJITSU LIMITED AND SONY CORPORATION DISCLAIMS ALL WARRANTIES WITH REGARD
    +TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
    +FITNESS, IN NO EVENT SHALL FUJITSU LIMITED OR SONY CORPORATION BE LIABLE
    +FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
    +RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
    +NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
    +USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +    ----------------------------------------
    +
    +Copyright (c) 1993, 1995 by Silicon Graphics Computer Systems, Inc.
    +
    +Permission to use, copy, modify, and distribute this
    +software and its documentation for any purpose and without
    +fee is hereby granted, provided that the above copyright
    +notice appear in all copies and that both that copyright
    +notice and this permission notice appear in supporting
    +documentation, and that the name of Silicon Graphics not be
    +used in advertising or publicity pertaining to distribution
    +of the software without specific prior written permission.
    +Silicon Graphics makes no representation about the suitability
    +of this software for any purpose. It is provided "as is"
    +without any express or implied warranty.
    +
    +SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
    +SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
    +AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON
    +GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
    +DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
    +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
    +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION  WITH
    +THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +    ----------------------------------------
    +
    +Copyright 1991, 1992, 1993, 1994 by FUJITSU LIMITED
    +Copyright 1993 by Digital Equipment Corporation
    +
    +Permission to use, copy, modify, distribute, and sell this software
    +and its documentation for any purpose is hereby granted without fee,
    +provided that the above copyright notice appear in all copies and that
    +both that copyright notice and this permission notice appear in
    +supporting documentation, and that the name of FUJITSU LIMITED and
    +Digital Equipment Corporation not be used in advertising or publicity
    +pertaining to distribution of the software without specific, written
    +prior permission.  FUJITSU LIMITED and Digital Equipment Corporation
    +makes no representations about the suitability of this software for
    +any purpose.  It is provided "as is" without express or implied
    +warranty.
    +
    +FUJITSU LIMITED AND DIGITAL EQUIPMENT CORPORATION DISCLAIM ALL
    +WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED
    +WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
    +FUJITSU LIMITED AND DIGITAL EQUIPMENT CORPORATION BE LIABLE FOR
    +ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
    +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
    +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
    +THIS SOFTWARE.
    +
    +    ----------------------------------------
    +
    +Copyright 1992, 1993 by FUJITSU LIMITED
    +Copyright 1993 by Fujitsu Open Systems Solutions, Inc.
    +Copyright 1994 by Sony Corporation
    +
    +Permission to use, copy, modify, distribute and sell this software
    +and its documentation for any purpose is hereby granted without fee,
    +provided that the above copyright notice appear in all copies and
    +that both that copyright notice and this permission notice appear
    +in supporting documentation, and that the name of FUJITSU LIMITED,
    +Fujitsu Open Systems Solutions, Inc. and Sony Corporation  not be
    +used in advertising or publicity pertaining to distribution of the
    +software without specific, written prior permission.
    +FUJITSU LIMITED, Fujitsu Open Systems Solutions, Inc. and
    +Sony Corporation make no representations about the suitability of
    +this software for any purpose.  It is provided "as is" without
    +express or implied warranty.
    +
    +FUJITSU LIMITED, FUJITSU OPEN SYSTEMS SOLUTIONS, INC. AND SONY
    +CORPORATION DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
    +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
    +IN NO EVENT SHALL FUJITSU OPEN SYSTEMS SOLUTIONS, INC., FUJITSU LIMITED
    +AND SONY CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT OR
    +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
    +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
    +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE
    +OR PERFORMANCE OF THIS SOFTWARE.
    +
    +    ----------------------------------------
    +
    +Copyright 1987, 1988, 1990, 1993 by Digital Equipment Corporation,
    +Maynard, Massachusetts,
    +
    +                        All Rights Reserved
    +
    +Permission to use, copy, modify, and distribute this software and its
    +documentation for any purpose and without fee is hereby granted,
    +provided that the above copyright notice appear in all copies and that
    +both that copyright notice and this permission notice appear in
    +supporting documentation, and that the name of Digital not be
    +used in advertising or publicity pertaining to distribution of the
    +software without specific, written prior permission.
    +
    +DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
    +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
    +DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
    +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
    +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
    +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
    +SOFTWARE.
    +
    +    ----------------------------------------
    +
    +Copyright 1993 by SunSoft, Inc.
    +Copyright 1999-2000 by Bruno Haible
    +
    +Permission to use, copy, modify, distribute, and sell this software
    +and its documentation for any purpose is hereby granted without fee,
    +provided that the above copyright notice appear in all copies and
    +that both that copyright notice and this permission notice appear
    +in supporting documentation, and that the names of SunSoft, Inc. and
    +Bruno Haible not be used in advertising or publicity pertaining to
    +distribution of the software without specific, written prior
    +permission.  SunSoft, Inc. and Bruno Haible make no representations
    +about the suitability of this software for any purpose.  It is
    +provided "as is" without express or implied warranty.
    +
    +SunSoft Inc. AND Bruno Haible DISCLAIM ALL WARRANTIES WITH REGARD
    +TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
    +AND FITNESS, IN NO EVENT SHALL SunSoft, Inc. OR Bruno Haible BE LIABLE
    +FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
    +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +    ----------------------------------------
    +
    +Copyright 1991 by the Open Software Foundation
    +Copyright 1993 by the TOSHIBA Corp.
    +
    +Permission to use, copy, modify, distribute, and sell this software and its
    +documentation for any purpose is hereby granted without fee, provided that
    +the above copyright notice appear in all copies and that both that
    +copyright notice and this permission notice appear in supporting
    +documentation, and that the names of Open Software Foundation and TOSHIBA
    +not be used in advertising or publicity pertaining to distribution of the
    +software without specific, written prior permission.  Open Software
    +Foundation and TOSHIBA make no representations about the suitability of this
    +software for any purpose.  It is provided "as is" without express or
    +implied warranty.
    +
    +OPEN SOFTWARE FOUNDATION AND TOSHIBA DISCLAIM ALL WARRANTIES WITH REGARD TO
    +THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
    +FITNESS, IN NO EVENT SHALL OPEN SOFTWARE FOUNDATIONN OR TOSHIBA BE
    +LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
    +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +    ----------------------------------------
    +
    +Copyright 1988 by Wyse Technology, Inc., San Jose, Ca.,
    +
    +                        All Rights Reserved
    +
    +Permission to use, copy, modify, and distribute this software and its
    +documentation for any purpose and without fee is hereby granted,
    +provided that the above copyright notice appear in all copies and that
    +both that copyright notice and this permission notice appear in
    +supporting documentation, and that the name Wyse not be
    +used in advertising or publicity pertaining to distribution of the
    +software without specific, written prior permission.
    +
    +WYSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
    +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
    +DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
    +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
    +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
    +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
    +SOFTWARE.
    +
    +    ----------------------------------------
    +
    +
    +Copyright 1991 by the Open Software Foundation
    +Copyright 1993, 1994 by the Sony Corporation
    +
    +Permission to use, copy, modify, distribute, and sell this software and its
    +documentation for any purpose is hereby granted without fee, provided that
    +the above copyright notice appear in all copies and that both that
    +copyright notice and this permission notice appear in supporting
    +documentation, and that the names of Open Software Foundation and
    +Sony Corporation not be used in advertising or publicity pertaining to
    +distribution of the software without specific, written prior permission.
    +Open Software Foundation and Sony Corporation make no
    +representations about the suitability of this software for any purpose.
    +It is provided "as is" without express or implied warranty.
    +
    +OPEN SOFTWARE FOUNDATION AND SONY CORPORATION DISCLAIM ALL
    +WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED
    +WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL OPEN
    +SOFTWARE FOUNDATIONN OR SONY CORPORATION BE LIABLE FOR ANY SPECIAL,
    +INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
    +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
    +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
    +PERFORMANCE OF THIS SOFTWARE.
    +
    +    ----------------------------------------
    +
    +Copyright 1992, 1993 by FUJITSU LIMITED
    +Copyright 1993 by Fujitsu Open Systems Solutions, Inc.
    +
    +Permission to use, copy, modify, distribute and sell this software
    +and its documentation for any purpose is hereby granted without fee,
    +provided that the above copyright notice appear in all copies and
    +that both that copyright notice and this permission notice appear
    +in supporting documentation, and that the name of FUJITSU LIMITED and
    +Fujitsu Open Systems Solutions, Inc. not be used in advertising or
    +publicity pertaining to distribution of the software without specific,
    +written prior permission.
    +FUJITSU LIMITED and Fujitsu Open Systems Solutions, Inc. makes no
    +representations about the suitability of this software for any purpose.
    +It is provided "as is" without express or implied warranty.
    +
    +FUJITSU LIMITED AND FUJITSU OPEN SYSTEMS SOLUTIONS, INC. DISCLAIMS ALL
    +WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
    +OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL FUJITSU OPEN SYSTEMS
    +SOLUTIONS, INC. AND FUJITSU LIMITED BE LIABLE FOR ANY SPECIAL, INDIRECT
    +OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
    +USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
    +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
    +OF THIS SOFTWARE.
    +
    +    ----------------------------------------
    +
    +Copyright 1993, 1994 by Sony Corporation
    +
    +Permission to use, copy, modify, distribute, and sell this software
    +and its documentation for any purpose is hereby granted without fee,
    +provided that the above copyright notice appear in all copies and
    +that both that copyright notice and this permission notice appear
    +in supporting documentation, and that the name of Sony Corporation
    +not be used in advertising or publicity pertaining to distribution
    +of the software without specific, written prior permission.
    +Sony Corporation makes no representations about the suitability of
    +this software for any purpose. It is provided "as is" without
    +express or implied warranty.
    +
    +SONY CORPORATION DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
    +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
    +EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT OR
    +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
    +USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
    +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
    +PERFORMANCE OF THIS SOFTWARE.
    +
    +    ----------------------------------------
    +
    +Copyright 1986, 1998  The Open Group
    +Copyright (c) 2000  The XFree86 Project, Inc.
    +
    +Permission to use, copy, modify, distribute, and sell this software and its
    +documentation for any purpose is hereby granted without fee, provided that
    +the above copyright notice appear in all copies and that both that
    +copyright notice and this permission notice appear in supporting
    +documentation.
    +
    +The above copyright notice and this permission notice shall be included in
    +all copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
    +X CONSORTIUM OR THE XFREE86 PROJECT BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
    +SOFTWARE.
    +
    +Except as contained in this notice, the name of the X Consortium or of the
    +XFree86 Project shall not be used in advertising or otherwise to promote the
    +sale, use or other dealings in this Software without prior written
    +authorization from the X Consortium and the XFree86 Project.
    +
    +    ----------------------------------------
    +
    +Copyright 1990, 1991 by OMRON Corporation, NTT Software Corporation,
    +                     and Nippon Telegraph and Telephone Corporation
    +Copyright 1991 by the Open Software Foundation
    +Copyright 1993 by the FUJITSU LIMITED
    +
    +Permission to use, copy, modify, distribute, and sell this software and its
    +documentation for any purpose is hereby granted without fee, provided that
    +the above copyright notice appear in all copies and that both that
    +copyright notice and this permission notice appear in supporting
    +documentation, and that the names of OMRON, NTT Software, NTT, and
    +Open Software Foundation not be used in advertising or publicity
    +pertaining to distribution of the software without specific,
    +written prior permission. OMRON, NTT Software, NTT, and Open Software
    +Foundation make no representations about the suitability of this
    +software for any purpose.  It is provided "as is" without express or
    +implied warranty.
    +
    +OMRON, NTT SOFTWARE, NTT, AND OPEN SOFTWARE FOUNDATION
    +DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
    +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT
    +SHALL OMRON, NTT SOFTWARE, NTT, OR OPEN SOFTWARE FOUNDATION BE
    +LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
    +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +    ----------------------------------------
    +
    +Copyright 1988 by Wyse Technology, Inc., San Jose, Ca,
    +Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts,
    +
    +                        All Rights Reserved
    +
    +Permission to use, copy, modify, and distribute this software and its
    +documentation for any purpose and without fee is hereby granted,
    +provided that the above copyright notice appear in all copies and that
    +both that copyright notice and this permission notice appear in
    +supporting documentation, and that the name Digital not be
    +used in advertising or publicity pertaining to distribution of the
    +software without specific, written prior permission.
    +
    +DIGITAL AND WYSE DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
    +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
    +EVENT SHALL DIGITAL OR WYSE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
    +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
    +USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
    +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
    +PERFORMANCE OF THIS SOFTWARE.
    +
    +    ----------------------------------------
    +
    +
    +Copyright 1991, 1992 by Fuji Xerox Co., Ltd.
    +Copyright 1992, 1993, 1994 by FUJITSU LIMITED
    +
    +Permission to use, copy, modify, distribute, and sell this software
    +and its documentation for any purpose is hereby granted without fee,
    +provided that the above copyright notice appear in all copies and
    +that both that copyright notice and this permission notice appear
    +in supporting documentation, and that the name of Fuji Xerox,
    +FUJITSU LIMITED not be used in advertising or publicity pertaining
    +to distribution of the software without specific, written prior
    +permission. Fuji Xerox, FUJITSU LIMITED make no representations
    +about the suitability of this software for any purpose.
    +It is provided "as is" without express or implied warranty.
    +
    +FUJI XEROX, FUJITSU LIMITED DISCLAIM ALL WARRANTIES WITH
    +REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL FUJI XEROX,
    +FUJITSU LIMITED BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
    +DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA
    +OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
    +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
    +PERFORMANCE OF THIS SOFTWARE.
    +
    +    ----------------------------------------
    +
    +Copyright 2006 Josh Triplett
    +
    +Permission is hereby granted, free of charge, to any person obtaining
    +a copy of this software and associated documentation files (the
    +"Software"), to deal in the Software without restriction, including
    +without limitation the rights to use, copy, modify, merge, publish,
    +distribute, sublicense, and/or sell copies of the Software, and to
    +permit persons to whom the Software is furnished to do so, subject to
    +the following conditions:
    +
    +The above copyright notice and this permission notice shall be included
    +in all copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
    +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
    +IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR
    +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
    +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
    +OTHER DEALINGS IN THE SOFTWARE.
    +
    +    ----------------------------------------
    +
    +(c) Copyright 1996 by Sebastien Marineau and Holger Veit
    +      <marineau@genie.uottawa.ca>
    +                     <Holger.Veit@gmd.de>
    +
    +Permission is hereby granted, free of charge, to any person obtaining a
    +copy of this software and associated documentation files (the "Software"),
    +to deal in the Software without restriction, including without limitation
    +the rights to use, copy, modify, merge, publish, distribute, sublicense,
    +and/or sell copies of the Software, and to permit persons to whom the
    +Software is furnished to do so, subject to the following conditions:
    +
    +The above copyright notice and this permission notice shall be included in
    +all copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
    +HOLGER VEIT  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
    +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
    +OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
    +SOFTWARE.
    +
    +Except as contained in this notice, the name of Sebastien Marineau or Holger Veit
    +shall not be used in advertising or otherwise to promote the sale, use or other
    +dealings in this Software without prior written authorization from Holger Veit or
    +Sebastien Marineau.
    +
    +    ----------------------------------------
    +
    +Copyright 1990, 1991 by OMRON Corporation, NTT Software Corporation,
    +                     and Nippon Telegraph and Telephone Corporation
    +Copyright 1991 by the Open Software Foundation
    +Copyright 1993 by the TOSHIBA Corp.
    +Copyright 1993, 1994 by Sony Corporation
    +Copyright 1993, 1994 by the FUJITSU LIMITED
    +
    +Permission to use, copy, modify, distribute, and sell this software and its
    +documentation for any purpose is hereby granted without fee, provided that
    +the above copyright notice appear in all copies and that both that
    +copyright notice and this permission notice appear in supporting
    +documentation, and that the names of OMRON, NTT Software, NTT, Open
    +Software Foundation, and Sony Corporation not be used in advertising
    +or publicity pertaining to distribution of the software without specific,
    +written prior permission. OMRON, NTT Software, NTT, Open Software
    +Foundation, and Sony Corporation  make no representations about the
    +suitability of this software for any purpose.  It is provided "as is"
    +without express or implied warranty.
    +
    +OMRON, NTT SOFTWARE, NTT, OPEN SOFTWARE FOUNDATION, AND SONY
    +CORPORATION DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
    +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT
    +SHALL OMRON, NTT SOFTWARE, NTT, OPEN SOFTWARE FOUNDATION, OR SONY
    +CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
    +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
    +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
    +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +    ----------------------------------------
    +
    +Copyright 2000 by Bruno Haible
    +
    +Permission to use, copy, modify, distribute, and sell this software
    +and its documentation for any purpose is hereby granted without fee,
    +provided that the above copyright notice appear in all copies and
    +that both that copyright notice and this permission notice appear
    +in supporting documentation, and that the name of Bruno Haible not
    +be used in advertising or publicity pertaining to distribution of the
    +software without specific, written prior permission.  Bruno Haible
    +makes no representations about the suitability of this software for
    +any purpose.  It is provided "as is" without express or implied
    +warranty.
    +
    +Bruno Haible DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
    +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN
    +NO EVENT SHALL Bruno Haible BE LIABLE FOR ANY SPECIAL, INDIRECT OR
    +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
    +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
    +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE
    +OR PERFORMANCE OF THIS SOFTWARE.
    +
    +    ----------------------------------------
    +
    +Copyright © 2003 Keith Packard
    +
    +Permission to use, copy, modify, distribute, and sell this software and its
    +documentation for any purpose is hereby granted without fee, provided that
    +the above copyright notice appear in all copies and that both that
    +copyright notice and this permission notice appear in supporting
    +documentation, and that the name of Keith Packard not be used in
    +advertising or publicity pertaining to distribution of the software without
    +specific, written prior permission.  Keith Packard makes no
    +representations about the suitability of this software for any purpose.  It
    +is provided "as is" without express or implied warranty.
    +
    +KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
    +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
    +EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
    +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
    +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
    +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
    +PERFORMANCE OF THIS SOFTWARE.
    +
    +    ----------------------------------------
    +
    +Copyright (c) 2007-2009, Troy D. Hanson
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are met:
    +
    +Redistributions of source code must retain the above copyright
    +notice, this list of conditions and the following disclaimer.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
    +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
    +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
    +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
    +OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
    +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
    +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
    +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
    +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
    +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +    ----------------------------------------
    +
    +Copyright 1992, 1993 by TOSHIBA Corp.
    +
    +Permission to use, copy, modify, and distribute this software and its
    +documentation for any purpose and without fee is hereby granted, provided
    +that the above copyright notice appear in all copies and that both that
    +copyright notice and this permission notice appear in supporting
    +documentation, and that the name of TOSHIBA not be used in advertising
    +or publicity pertaining to distribution of the software without specific,
    +written prior permission. TOSHIBA make no representations about the
    +suitability of this software for any purpose.  It is provided "as is"
    +without express or implied warranty.
    +
    +TOSHIBA DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
    +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
    +TOSHIBA BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
    +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
    +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
    +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
    +SOFTWARE.
    +
    +
    +    ----------------------------------------
    +
    +Copyright IBM Corporation 1993
    +
    +All Rights Reserved
    +
    +License to use, copy, modify, and distribute this software and its
    +documentation for any purpose and without fee is hereby granted,
    +provided that the above copyright notice appear in all copies and that
    +both that copyright notice and this permission notice appear in
    +supporting documentation, and that the name of IBM not be
    +used in advertising or publicity pertaining to distribution of the
    +software without specific, written prior permission.
    +
    +IBM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
    +ALL IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS, AND
    +NONINFRINGEMENT OF THIRD PARTY RIGHTS, IN NO EVENT SHALL
    +IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
    +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
    +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
    +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
    +SOFTWARE.
    +
    +    ----------------------------------------
    +
    +Copyright 1990, 1991 by OMRON Corporation, NTT Software Corporation,
    +                     and Nippon Telegraph and Telephone Corporation
    +
    +Permission to use, copy, modify, distribute, and sell this software and its
    +documentation for any purpose is hereby granted without fee, provided that
    +the above copyright notice appear in all copies and that both that
    +copyright notice and this permission notice appear in supporting
    +documentation, and that the names of OMRON, NTT Software, and NTT
    +not be used in advertising or publicity pertaining to distribution of the
    +software without specific, written prior permission. OMRON, NTT Software,
    +and NTT make no representations about the suitability of this
    +software for any purpose.  It is provided "as is" without express or
    +implied warranty.
    +
    +OMRON, NTT SOFTWARE, AND NTT, DISCLAIM ALL WARRANTIES WITH REGARD
    +TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
    +AND FITNESS, IN NO EVENT SHALL OMRON, NTT SOFTWARE, OR NTT, BE
    +LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
    +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +
    +****************************
    +zlib
    +****************************
    +(extracted from README, except for match.S)
    +
    +Copyright notice:
    +
    + (C) 1995-2013 Jean-loup Gailly and Mark Adler
    +
    +  This software is provided 'as-is', without any express or implied
    +  warranty.  In no event will the authors be held liable for any damages
    +  arising from the use of this software.
    +
    +  Permission is granted to anyone to use this software for any purpose,
    +  including commercial applications, and to alter it and redistribute it
    +  freely, subject to the following restrictions:
    +
    +  1. The origin of this software must not be misrepresented; you must not
    +     claim that you wrote the original software. If you use this software
    +     in a product, an acknowledgment in the product documentation would be
    +     appreciated but is not required.
    +  2. Altered source versions must be plainly marked as such, and must not be
    +     misrepresented as being the original software.
    +  3. This notice may not be removed or altered from any source distribution.
    +
    +  Jean-loup Gailly        Mark Adler
    +  jloup@gzip.org          madler@alumni.caltech.edu
    +
    +If you use the zlib library in a product, we would appreciate *not* receiving
    +lengthy legal documents to sign.  The sources are provided for free but without
    +warranty of any kind.  The library has been entirely written by Jean-loup
    +Gailly and Mark Adler; it does not include third-party code.
    +
    +If you redistribute modified sources, we would appreciate that you include in
    +the file ChangeLog history information documenting your changes.  Please read
    +the FAQ for more information on the distribution of modified source versions.
    +
    +(extracted from match.S, for match.S only)
    +
    +Copyright (C) 1998, 2007 Brian Raiter <breadbox@muppetlabs.com>
    +
    +This software is provided 'as-is', without any express or implied
    +warranty.  In no event will the author be held liable for any damages
    +arising from the use of this software.
    +
    +Permission is granted to anyone to use this software for any purpose,
    +including commercial applications, and to alter it and redistribute it
    +freely, subject to the following restrictions:
    +
    +1. The origin of this software must not be misrepresented; you must not
    +  claim that you wrote the original software. If you use this software
    +  in a product, an acknowledgment in the product documentation would be
    +  appreciated but is not required.
    +2. Altered source versions must be plainly marked as such, and must not be
    +  misrepresented as being the original software.
    +3. This notice may not be removed or altered from any source distribution.
    +
    +
    +****************************
    +googleurl
    +****************************
    +Copyright 2007, Google Inc.
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are
    +met:
    +
    +    * Redistributions of source code must retain the above copyright
    +notice, this list of conditions and the following disclaimer.
    +    * Redistributions in binary form must reproduce the above
    +copyright notice, this list of conditions and the following disclaimer
    +in the documentation and/or other materials provided with the
    +distribution.
    +    * Neither the name of Google Inc. nor the names of its
    +contributors may be used to endorse or promote products derived from
    +this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------------------
    +
    +The file url_parse.cc is based on nsURLParsers.cc from Mozilla. This file is
    +licensed separately as follows:
    +
    +The contents of this file are subject to the Mozilla Public License Version
    +1.1 (the "License"); you may not use this file except in compliance with
    +the License. You may obtain a copy of the License at
    +http://www.mozilla.org/MPL/
    +
    +Software distributed under the License is distributed on an "AS IS" basis,
    +WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
    +for the specific language governing rights and limitations under the
    +License.
    +
    +The Original Code is mozilla.org code.
    +
    +The Initial Developer of the Original Code is
    +Netscape Communications Corporation.
    +Portions created by the Initial Developer are Copyright (C) 1998
    +the Initial Developer. All Rights Reserved.
    +
    +Contributor(s):
    +  Darin Fisher (original author)
    +
    +Alternatively, the contents of this file may be used under the terms of
    +either the GNU General Public License Version 2 or later (the "GPL"), or
    +the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
    +in which case the provisions of the GPL or the LGPL are applicable instead
    +of those above. If you wish to allow use of your version of this file only
    +under the terms of either the GPL or the LGPL, and not to allow others to
    +use your version of this file under the terms of the MPL, indicate your
    +decision by deleting the provisions above and replace them with the notice
    +and other provisions required by the GPL or the LGPL. If you do not delete
    +the provisions above, a recipient may use your version of this file under
    +the terms of any one of the MPL, the GPL or the LGPL.
    +
    +-------------------------------------------------------------------------------
    +
    +The file icu_utf.cc is from IBM. This file is licensed separately as follows:
    +
    +ICU License - ICU 1.8.1 and later
    +
    +COPYRIGHT AND PERMISSION NOTICE
    +
    +Copyright (c) 1995-2009 International Business Machines Corporation and others
    +
    +All rights reserved.
    +
    +Permission is hereby granted, free of charge, to any person obtaining
    +a copy of this software and associated documentation files (the
    +"Software"), to deal in the Software without restriction, including
    +without limitation the rights to use, copy, modify, merge, publish,
    +distribute, and/or sell copies of the Software, and to permit persons
    +to whom the Software is furnished to do so, provided that the above
    +copyright notice(s) and this permission notice appear in all copies of
    +the Software and that both the above copyright notice(s) and this
    +permission notice appear in supporting documentation.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
    +OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
    +HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY
    +SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER
    +RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
    +CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
    +CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +Except as contained in this notice, the name of a copyright holder
    +shall not be used in advertising or otherwise to promote the sale, use
    +or other dealings in this Software without prior written authorization
    +of the copyright holder.
    +
    +
    +****************************
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +****************************
    +jsoncpp
    +****************************
    +The JsonCpp library's source code, including accompanying documentation,
    +tests and demonstration applications, are licensed under the following
    +conditions...
    +
    +The author (Baptiste Lepilleur) explicitly disclaims copyright in all
    +jurisdictions which recognize such a disclaimer. In such jurisdictions,
    +this software is released into the Public Domain.
    +
    +In jurisdictions which do not recognize Public Domain property (e.g. Germany as of
    +2010), this software is Copyright (c) 2007-2010 by Baptiste Lepilleur, and is
    +released under the terms of the MIT License (see below).
    +
    +In jurisdictions which recognize Public Domain property, the user of this
    +software may choose to accept it either as 1) Public Domain, 2) under the
    +conditions of the MIT License (see below), or 3) under the terms of dual
    +Public Domain/MIT License conditions described here, as they choose.
    +
    +The MIT License is about as close to Public Domain as a license can get, and is
    +described in clear, concise terms at:
    +
    +   http://en.wikipedia.org/wiki/MIT_License
    +
    +The full text of the MIT License follows:
    +
    +========================================================================
    +Copyright (c) 2007-2010 Baptiste Lepilleur
    +
    +Permission is hereby granted, free of charge, to any person
    +obtaining a copy of this software and associated documentation
    +files (the "Software"), to deal in the Software without
    +restriction, including without limitation the rights to use, copy,
    +modify, merge, publish, distribute, sublicense, and/or sell copies
    +of the Software, and to permit persons to whom the Software is
    +furnished to do so, subject to the following conditions:
    +
    +The above copyright notice and this permission notice shall be
    +included in all copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
    +BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
    +ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
    +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
    +SOFTWARE.
    +========================================================================
    +(END LICENSE TEXT)
    +
    +The MIT license is compatible with both the GPL and commercial
    +software, affording one all of the rights of Public Domain with the
    +minor nuisance of being required to keep the above copyright notice
    +and license text in the source code. Note also that by accepting the
    +Public Domain "license" you can re-license your copy using whatever
    +license you like.
    +
    +
    +****************************
    +libwebp
    +****************************
    +Copyright (c) 2010, Google Inc. All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are
    +met:
    +
    +  * Redistributions of source code must retain the above copyright
    +    notice, this list of conditions and the following disclaimer.
    +
    +  * Redistributions in binary form must reproduce the above copyright
    +    notice, this list of conditions and the following disclaimer in
    +    the documentation and/or other materials provided with the
    +    distribution.
    +
    +  * Neither the name of Google nor the names of its contributors may
    +    be used to endorse or promote products derived from this software
    +    without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +GVR Keyboard +homepage + + +
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright 2014 The Android Open Source Project
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +
    + +
    +harfbuzz-ng +homepage + + +
    +
    HarfBuzz is licensed under the so-called "Old MIT" license.  Details follow.
    +For parts of HarfBuzz that are licensed under different licenses see individual
    +files names COPYING in subdirectories where applicable.
    +
    +Copyright © 2010,2011,2012  Google, Inc.
    +Copyright © 2012  Mozilla Foundation
    +Copyright © 2011  Codethink Limited
    +Copyright © 2008,2010  Nokia Corporation and/or its subsidiary(-ies)
    +Copyright © 2009  Keith Stribley
    +Copyright © 2009  Martin Hosken and SIL International
    +Copyright © 2007  Chris Wilson
    +Copyright © 2006  Behdad Esfahbod
    +Copyright © 2005  David Turner
    +Copyright © 2004,2007,2008,2009,2010  Red Hat, Inc.
    +Copyright © 1998-2004  David Turner and Werner Lemberg
    +
    +For full copyright notices consult the individual files in the package.
    +
    +
    +Permission is hereby granted, without written agreement and without
    +license or royalty fees, to use, copy, modify, and distribute this
    +software and its documentation for any purpose, provided that the
    +above copyright notice and the following two paragraphs appear in
    +all copies of this software.
    +
    +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
    +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
    +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
    +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
    +DAMAGE.
    +
    +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
    +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
    +FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
    +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
    +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
    +
    +
    +
    + +
    +Headless Android Heap Analyzer +homepage + + +
    +
    perflib, guava:
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +================================================================================
    +trove4j:
    +
    +This library is free software; you can redistribute it and/or modify it under
    +the terms of the GNU Lesser General Public License as published by the Free
    +Software Foundation; either version 2.1 of the License, or (at your option) any
    +later version. This library is distributed in the hope that it will be useful,
    +but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
    +or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
    +for more details. You should have received a copy of the GNU Lesser General
    +Public License along with this library; if not, write to the Free Software
    +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
    +
    +
    +Two classes (HashFunctions and PrimeFinder) included in Trove are licensed
    +under the following terms:
    +
    +Copyright (c) 1999 CERN - European Organization for Nuclear Research.
    +Permission to use, copy, modify, distribute and sell this software and its
    +documentation for any purpose is hereby granted without fee, provided that the
    +above copyright notice appear in all copies and that both that copyright notice
    +and this permission notice appear in supporting documentation. CERN makes no
    +representations about the suitability of this software for any purpose. It is
    +provided "as is" without expressed or implied warranty.
    +
    +
    +
    +
    + +
    +hunspell +homepage + + +
    +
                              MOZILLA PUBLIC LICENSE
    +                                Version 1.1
    +
    +                              ---------------
    +
    +1. Definitions.
    +
    +     1.0.1. "Commercial Use" means distribution or otherwise making the
    +     Covered Code available to a third party.
    +
    +     1.1. "Contributor" means each entity that creates or contributes to
    +     the creation of Modifications.
    +
    +     1.2. "Contributor Version" means the combination of the Original
    +     Code, prior Modifications used by a Contributor, and the Modifications
    +     made by that particular Contributor.
    +
    +     1.3. "Covered Code" means the Original Code or Modifications or the
    +     combination of the Original Code and Modifications, in each case
    +     including portions thereof.
    +
    +     1.4. "Electronic Distribution Mechanism" means a mechanism generally
    +     accepted in the software development community for the electronic
    +     transfer of data.
    +
    +     1.5. "Executable" means Covered Code in any form other than Source
    +     Code.
    +
    +     1.6. "Initial Developer" means the individual or entity identified
    +     as the Initial Developer in the Source Code notice required by Exhibit
    +     A.
    +
    +     1.7. "Larger Work" means a work which combines Covered Code or
    +     portions thereof with code not governed by the terms of this License.
    +
    +     1.8. "License" means this document.
    +
    +     1.8.1. "Licensable" means having the right to grant, to the maximum
    +     extent possible, whether at the time of the initial grant or
    +     subsequently acquired, any and all of the rights conveyed herein.
    +
    +     1.9. "Modifications" means any addition to or deletion from the
    +     substance or structure of either the Original Code or any previous
    +     Modifications. When Covered Code is released as a series of files, a
    +     Modification is:
    +          A. Any addition to or deletion from the contents of a file
    +          containing Original Code or previous Modifications.
    +
    +          B. Any new file that contains any part of the Original Code or
    +          previous Modifications.
    +
    +     1.10. "Original Code" means Source Code of computer software code
    +     which is described in the Source Code notice required by Exhibit A as
    +     Original Code, and which, at the time of its release under this
    +     License is not already Covered Code governed by this License.
    +
    +     1.10.1. "Patent Claims" means any patent claim(s), now owned or
    +     hereafter acquired, including without limitation,  method, process,
    +     and apparatus claims, in any patent Licensable by grantor.
    +
    +     1.11. "Source Code" means the preferred form of the Covered Code for
    +     making modifications to it, including all modules it contains, plus
    +     any associated interface definition files, scripts used to control
    +     compilation and installation of an Executable, or source code
    +     differential comparisons against either the Original Code or another
    +     well known, available Covered Code of the Contributor's choice. The
    +     Source Code can be in a compressed or archival form, provided the
    +     appropriate decompression or de-archiving software is widely available
    +     for no charge.
    +
    +     1.12. "You" (or "Your")  means an individual or a legal entity
    +     exercising rights under, and complying with all of the terms of, this
    +     License or a future version of this License issued under Section 6.1.
    +     For legal entities, "You" includes any entity which controls, is
    +     controlled by, or is under common control with You. For purposes of
    +     this definition, "control" means (a) the power, direct or indirect,
    +     to cause the direction or management of such entity, whether by
    +     contract or otherwise, or (b) ownership of more than fifty percent
    +     (50%) of the outstanding shares or beneficial ownership of such
    +     entity.
    +
    +2. Source Code License.
    +
    +     2.1. The Initial Developer Grant.
    +     The Initial Developer hereby grants You a world-wide, royalty-free,
    +     non-exclusive license, subject to third party intellectual property
    +     claims:
    +          (a)  under intellectual property rights (other than patent or
    +          trademark) Licensable by Initial Developer to use, reproduce,
    +          modify, display, perform, sublicense and distribute the Original
    +          Code (or portions thereof) with or without Modifications, and/or
    +          as part of a Larger Work; and
    +
    +          (b) under Patents Claims infringed by the making, using or
    +          selling of Original Code, to make, have made, use, practice,
    +          sell, and offer for sale, and/or otherwise dispose of the
    +          Original Code (or portions thereof).
    +
    +          (c) the licenses granted in this Section 2.1(a) and (b) are
    +          effective on the date Initial Developer first distributes
    +          Original Code under the terms of this License.
    +
    +          (d) Notwithstanding Section 2.1(b) above, no patent license is
    +          granted: 1) for code that You delete from the Original Code; 2)
    +          separate from the Original Code;  or 3) for infringements caused
    +          by: i) the modification of the Original Code or ii) the
    +          combination of the Original Code with other software or devices.
    +
    +     2.2. Contributor Grant.
    +     Subject to third party intellectual property claims, each Contributor
    +     hereby grants You a world-wide, royalty-free, non-exclusive license
    +
    +          (a)  under intellectual property rights (other than patent or
    +          trademark) Licensable by Contributor, to use, reproduce, modify,
    +          display, perform, sublicense and distribute the Modifications
    +          created by such Contributor (or portions thereof) either on an
    +          unmodified basis, with other Modifications, as Covered Code
    +          and/or as part of a Larger Work; and
    +
    +          (b) under Patent Claims infringed by the making, using, or
    +          selling of  Modifications made by that Contributor either alone
    +          and/or in combination with its Contributor Version (or portions
    +          of such combination), to make, use, sell, offer for sale, have
    +          made, and/or otherwise dispose of: 1) Modifications made by that
    +          Contributor (or portions thereof); and 2) the combination of
    +          Modifications made by that Contributor with its Contributor
    +          Version (or portions of such combination).
    +
    +          (c) the licenses granted in Sections 2.2(a) and 2.2(b) are
    +          effective on the date Contributor first makes Commercial Use of
    +          the Covered Code.
    +
    +          (d)    Notwithstanding Section 2.2(b) above, no patent license is
    +          granted: 1) for any code that Contributor has deleted from the
    +          Contributor Version; 2)  separate from the Contributor Version;
    +          3)  for infringements caused by: i) third party modifications of
    +          Contributor Version or ii)  the combination of Modifications made
    +          by that Contributor with other software  (except as part of the
    +          Contributor Version) or other devices; or 4) under Patent Claims
    +          infringed by Covered Code in the absence of Modifications made by
    +          that Contributor.
    +
    +3. Distribution Obligations.
    +
    +     3.1. Application of License.
    +     The Modifications which You create or to which You contribute are
    +     governed by the terms of this License, including without limitation
    +     Section 2.2. The Source Code version of Covered Code may be
    +     distributed only under the terms of this License or a future version
    +     of this License released under Section 6.1, and You must include a
    +     copy of this License with every copy of the Source Code You
    +     distribute. You may not offer or impose any terms on any Source Code
    +     version that alters or restricts the applicable version of this
    +     License or the recipients' rights hereunder. However, You may include
    +     an additional document offering the additional rights described in
    +     Section 3.5.
    +
    +     3.2. Availability of Source Code.
    +     Any Modification which You create or to which You contribute must be
    +     made available in Source Code form under the terms of this License
    +     either on the same media as an Executable version or via an accepted
    +     Electronic Distribution Mechanism to anyone to whom you made an
    +     Executable version available; and if made available via Electronic
    +     Distribution Mechanism, must remain available for at least twelve (12)
    +     months after the date it initially became available, or at least six
    +     (6) months after a subsequent version of that particular Modification
    +     has been made available to such recipients. You are responsible for
    +     ensuring that the Source Code version remains available even if the
    +     Electronic Distribution Mechanism is maintained by a third party.
    +
    +     3.3. Description of Modifications.
    +     You must cause all Covered Code to which You contribute to contain a
    +     file documenting the changes You made to create that Covered Code and
    +     the date of any change. You must include a prominent statement that
    +     the Modification is derived, directly or indirectly, from Original
    +     Code provided by the Initial Developer and including the name of the
    +     Initial Developer in (a) the Source Code, and (b) in any notice in an
    +     Executable version or related documentation in which You describe the
    +     origin or ownership of the Covered Code.
    +
    +     3.4. Intellectual Property Matters
    +          (a) Third Party Claims.
    +          If Contributor has knowledge that a license under a third party's
    +          intellectual property rights is required to exercise the rights
    +          granted by such Contributor under Sections 2.1 or 2.2,
    +          Contributor must include a text file with the Source Code
    +          distribution titled "LEGAL" which describes the claim and the
    +          party making the claim in sufficient detail that a recipient will
    +          know whom to contact. If Contributor obtains such knowledge after
    +          the Modification is made available as described in Section 3.2,
    +          Contributor shall promptly modify the LEGAL file in all copies
    +          Contributor makes available thereafter and shall take other steps
    +          (such as notifying appropriate mailing lists or newsgroups)
    +          reasonably calculated to inform those who received the Covered
    +          Code that new knowledge has been obtained.
    +
    +          (b) Contributor APIs.
    +          If Contributor's Modifications include an application programming
    +          interface and Contributor has knowledge of patent licenses which
    +          are reasonably necessary to implement that API, Contributor must
    +          also include this information in the LEGAL file.
    +
    +               (c)    Representations.
    +          Contributor represents that, except as disclosed pursuant to
    +          Section 3.4(a) above, Contributor believes that Contributor's
    +          Modifications are Contributor's original creation(s) and/or
    +          Contributor has sufficient rights to grant the rights conveyed by
    +          this License.
    +
    +     3.5. Required Notices.
    +     You must duplicate the notice in Exhibit A in each file of the Source
    +     Code.  If it is not possible to put such notice in a particular Source
    +     Code file due to its structure, then You must include such notice in a
    +     location (such as a relevant directory) where a user would be likely
    +     to look for such a notice.  If You created one or more Modification(s)
    +     You may add your name as a Contributor to the notice described in
    +     Exhibit A.  You must also duplicate this License in any documentation
    +     for the Source Code where You describe recipients' rights or ownership
    +     rights relating to Covered Code.  You may choose to offer, and to
    +     charge a fee for, warranty, support, indemnity or liability
    +     obligations to one or more recipients of Covered Code. However, You
    +     may do so only on Your own behalf, and not on behalf of the Initial
    +     Developer or any Contributor. You must make it absolutely clear than
    +     any such warranty, support, indemnity or liability obligation is
    +     offered by You alone, and You hereby agree to indemnify the Initial
    +     Developer and every Contributor for any liability incurred by the
    +     Initial Developer or such Contributor as a result of warranty,
    +     support, indemnity or liability terms You offer.
    +
    +     3.6. Distribution of Executable Versions.
    +     You may distribute Covered Code in Executable form only if the
    +     requirements of Section 3.1-3.5 have been met for that Covered Code,
    +     and if You include a notice stating that the Source Code version of
    +     the Covered Code is available under the terms of this License,
    +     including a description of how and where You have fulfilled the
    +     obligations of Section 3.2. The notice must be conspicuously included
    +     in any notice in an Executable version, related documentation or
    +     collateral in which You describe recipients' rights relating to the
    +     Covered Code. You may distribute the Executable version of Covered
    +     Code or ownership rights under a license of Your choice, which may
    +     contain terms different from this License, provided that You are in
    +     compliance with the terms of this License and that the license for the
    +     Executable version does not attempt to limit or alter the recipient's
    +     rights in the Source Code version from the rights set forth in this
    +     License. If You distribute the Executable version under a different
    +     license You must make it absolutely clear that any terms which differ
    +     from this License are offered by You alone, not by the Initial
    +     Developer or any Contributor. You hereby agree to indemnify the
    +     Initial Developer and every Contributor for any liability incurred by
    +     the Initial Developer or such Contributor as a result of any such
    +     terms You offer.
    +
    +     3.7. Larger Works.
    +     You may create a Larger Work by combining Covered Code with other code
    +     not governed by the terms of this License and distribute the Larger
    +     Work as a single product. In such a case, You must make sure the
    +     requirements of this License are fulfilled for the Covered Code.
    +
    +4. Inability to Comply Due to Statute or Regulation.
    +
    +     If it is impossible for You to comply with any of the terms of this
    +     License with respect to some or all of the Covered Code due to
    +     statute, judicial order, or regulation then You must: (a) comply with
    +     the terms of this License to the maximum extent possible; and (b)
    +     describe the limitations and the code they affect. Such description
    +     must be included in the LEGAL file described in Section 3.4 and must
    +     be included with all distributions of the Source Code. Except to the
    +     extent prohibited by statute or regulation, such description must be
    +     sufficiently detailed for a recipient of ordinary skill to be able to
    +     understand it.
    +
    +5. Application of this License.
    +
    +     This License applies to code to which the Initial Developer has
    +     attached the notice in Exhibit A and to related Covered Code.
    +
    +6. Versions of the License.
    +
    +     6.1. New Versions.
    +     Netscape Communications Corporation ("Netscape") may publish revised
    +     and/or new versions of the License from time to time. Each version
    +     will be given a distinguishing version number.
    +
    +     6.2. Effect of New Versions.
    +     Once Covered Code has been published under a particular version of the
    +     License, You may always continue to use it under the terms of that
    +     version. You may also choose to use such Covered Code under the terms
    +     of any subsequent version of the License published by Netscape. No one
    +     other than Netscape has the right to modify the terms applicable to
    +     Covered Code created under this License.
    +
    +     6.3. Derivative Works.
    +     If You create or use a modified version of this License (which you may
    +     only do in order to apply it to code which is not already Covered Code
    +     governed by this License), You must (a) rename Your license so that
    +     the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape",
    +     "MPL", "NPL" or any confusingly similar phrase do not appear in your
    +     license (except to note that your license differs from this License)
    +     and (b) otherwise make it clear that Your version of the license
    +     contains terms which differ from the Mozilla Public License and
    +     Netscape Public License. (Filling in the name of the Initial
    +     Developer, Original Code or Contributor in the notice described in
    +     Exhibit A shall not of themselves be deemed to be modifications of
    +     this License.)
    +
    +7. DISCLAIMER OF WARRANTY.
    +
    +     COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS,
    +     WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
    +     WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF
    +     DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING.
    +     THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE
    +     IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT,
    +     YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE
    +     COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER
    +     OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF
    +     ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
    +
    +8. TERMINATION.
    +
    +     8.1.  This License and the rights granted hereunder will terminate
    +     automatically if You fail to comply with terms herein and fail to cure
    +     such breach within 30 days of becoming aware of the breach. All
    +     sublicenses to the Covered Code which are properly granted shall
    +     survive any termination of this License. Provisions which, by their
    +     nature, must remain in effect beyond the termination of this License
    +     shall survive.
    +
    +     8.2.  If You initiate litigation by asserting a patent infringement
    +     claim (excluding declatory judgment actions) against Initial Developer
    +     or a Contributor (the Initial Developer or Contributor against whom
    +     You file such action is referred to as "Participant")  alleging that:
    +
    +     (a)  such Participant's Contributor Version directly or indirectly
    +     infringes any patent, then any and all rights granted by such
    +     Participant to You under Sections 2.1 and/or 2.2 of this License
    +     shall, upon 60 days notice from Participant terminate prospectively,
    +     unless if within 60 days after receipt of notice You either: (i)
    +     agree in writing to pay Participant a mutually agreeable reasonable
    +     royalty for Your past and future use of Modifications made by such
    +     Participant, or (ii) withdraw Your litigation claim with respect to
    +     the Contributor Version against such Participant.  If within 60 days
    +     of notice, a reasonable royalty and payment arrangement are not
    +     mutually agreed upon in writing by the parties or the litigation claim
    +     is not withdrawn, the rights granted by Participant to You under
    +     Sections 2.1 and/or 2.2 automatically terminate at the expiration of
    +     the 60 day notice period specified above.
    +
    +     (b)  any software, hardware, or device, other than such Participant's
    +     Contributor Version, directly or indirectly infringes any patent, then
    +     any rights granted to You by such Participant under Sections 2.1(b)
    +     and 2.2(b) are revoked effective as of the date You first made, used,
    +     sold, distributed, or had made, Modifications made by that
    +     Participant.
    +
    +     8.3.  If You assert a patent infringement claim against Participant
    +     alleging that such Participant's Contributor Version directly or
    +     indirectly infringes any patent where such claim is resolved (such as
    +     by license or settlement) prior to the initiation of patent
    +     infringement litigation, then the reasonable value of the licenses
    +     granted by such Participant under Sections 2.1 or 2.2 shall be taken
    +     into account in determining the amount or value of any payment or
    +     license.
    +
    +     8.4.  In the event of termination under Sections 8.1 or 8.2 above,
    +     all end user license agreements (excluding distributors and resellers)
    +     which have been validly granted by You or any distributor hereunder
    +     prior to termination shall survive termination.
    +
    +9. LIMITATION OF LIABILITY.
    +
    +     UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
    +     (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL
    +     DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE,
    +     OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR
    +     ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY
    +     CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL,
    +     WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER
    +     COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN
    +     INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF
    +     LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY
    +     RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW
    +     PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE
    +     EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO
    +     THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
    +
    +10. U.S. GOVERNMENT END USERS.
    +
    +     The Covered Code is a "commercial item," as that term is defined in
    +     48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer
    +     software" and "commercial computer software documentation," as such
    +     terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48
    +     C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995),
    +     all U.S. Government End Users acquire Covered Code with only those
    +     rights set forth herein.
    +
    +11. MISCELLANEOUS.
    +
    +     This License represents the complete agreement concerning subject
    +     matter hereof. If any provision of this License is held to be
    +     unenforceable, such provision shall be reformed only to the extent
    +     necessary to make it enforceable. This License shall be governed by
    +     California law provisions (except to the extent applicable law, if
    +     any, provides otherwise), excluding its conflict-of-law provisions.
    +     With respect to disputes in which at least one party is a citizen of,
    +     or an entity chartered or registered to do business in the United
    +     States of America, any litigation relating to this License shall be
    +     subject to the jurisdiction of the Federal Courts of the Northern
    +     District of California, with venue lying in Santa Clara County,
    +     California, with the losing party responsible for costs, including
    +     without limitation, court costs and reasonable attorneys' fees and
    +     expenses. The application of the United Nations Convention on
    +     Contracts for the International Sale of Goods is expressly excluded.
    +     Any law or regulation which provides that the language of a contract
    +     shall be construed against the drafter shall not apply to this
    +     License.
    +
    +12. RESPONSIBILITY FOR CLAIMS.
    +
    +     As between Initial Developer and the Contributors, each party is
    +     responsible for claims and damages arising, directly or indirectly,
    +     out of its utilization of rights under this License and You agree to
    +     work with Initial Developer and Contributors to distribute such
    +     responsibility on an equitable basis. Nothing herein is intended or
    +     shall be deemed to constitute any admission of liability.
    +
    +13. MULTIPLE-LICENSED CODE.
    +
    +     Initial Developer may designate portions of the Covered Code as
    +     "Multiple-Licensed".  "Multiple-Licensed" means that the Initial
    +     Developer permits you to utilize portions of the Covered Code under
    +     Your choice of the NPL or the alternative licenses, if any, specified
    +     by the Initial Developer in the file described in Exhibit A.
    +
    +EXHIBIT A -Mozilla Public License.
    +
    +     ``The contents of this file are subject to the Mozilla Public License
    +     Version 1.1 (the "License"); you may not use this file except in
    +     compliance with the License. You may obtain a copy of the License at
    +     http://www.mozilla.org/MPL/
    +
    +     Software distributed under the License is distributed on an "AS IS"
    +     basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
    +     License for the specific language governing rights and limitations
    +     under the License.
    +
    +     The Original Code is ______________________________________.
    +
    +     The Initial Developer of the Original Code is ________________________.
    +     Portions created by ______________________ are Copyright (C) ______
    +     _______________________. All Rights Reserved.
    +
    +     Contributor(s): ______________________________________.
    +
    +     Alternatively, the contents of this file may be used under the terms
    +     of the _____ license (the  "[___] License"), in which case the
    +     provisions of [______] License are applicable instead of those
    +     above.  If you wish to allow use of your version of this file only
    +     under the terms of the [____] License and not to allow others to use
    +     your version of this file under the MPL, indicate your decision by
    +     deleting  the provisions above and replace  them with the notice and
    +     other provisions required by the [___] License.  If you do not delete
    +     the provisions above, a recipient may use your version of this file
    +     under either the MPL or the [___] License."
    +
    +     [NOTE: The text of this Exhibit A may differ slightly from the text of
    +     the notices in the Source Code files of the Original Code. You should
    +     use the text of this Exhibit A rather than the text found in the
    +     Original Code Source Code for Your Modifications.]
    +
    +
    +
    +
    + +
    +hunspell dictionaries +homepage + + +
    +
    GPL 2.0/LGPL 2.1/MPL 1.1 tri-license
    +
    +The contents of this software may be used under the terms of
    +the GNU General Public License Version 2 or later (the "GPL"), or
    +the GNU Lesser General Public License Version 2.1 or later (the "LGPL",
    +see COPYING.LGPL) or (excepting the LGPLed GNU gettext library in the
    +intl/ directory) the Mozilla Public License Version 1.1 or later
    +(the "MPL", see COPYING.MPL).
    +
    +Software distributed under these licenses is distributed on an "AS IS" basis,
    +WITHOUT WARRANTY OF ANY KIND, either express or implied. See the licences
    +for the specific language governing rights and limitations under the licenses.
    +
    +
    +
    + +
    +IAccessible2 COM interfaces for accessibility +homepage + + +
    +
    /*************************************************************************
    + *
    + *  IAccessible2 IDL Specification 
    + * 
    + *  Copyright (c) 2007, 2010 Linux Foundation 
    + *  Copyright (c) 2006 IBM Corporation 
    + *  Copyright (c) 2000, 2006 Sun Microsystems, Inc. 
    + *  All rights reserved. 
    + *   
    + *   
    + *  Redistribution and use in source and binary forms, with or without 
    + *  modification, are permitted provided that the following conditions 
    + *  are met: 
    + *   
    + *   1. Redistributions of source code must retain the above copyright 
    + *      notice, this list of conditions and the following disclaimer. 
    + *   
    + *   2. Redistributions in binary form must reproduce the above 
    + *      copyright notice, this list of conditions and the following 
    + *      disclaimer in the documentation and/or other materials 
    + *      provided with the distribution. 
    + *
    + *   3. Neither the name of the Linux Foundation nor the names of its 
    + *      contributors may be used to endorse or promote products 
    + *      derived from this software without specific prior written 
    + *      permission. 
    + *   
    + *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
    + *  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 
    + *  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
    + *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
    + *  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 
    + *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
    + *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
    + *  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
    + *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
    + *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
    + *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
    + *  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 
    + *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
    + *   
    + *  This BSD License conforms to the Open Source Initiative "Simplified 
    + *  BSD License" as published at: 
    + *  http://www.opensource.org/licenses/bsd-license.php 
    + *   
    + *  IAccessible2 is a trademark of the Linux Foundation. The IAccessible2 
    + *  mark may be used in accordance with the Linux Foundation Trademark 
    + *  Policy to indicate compliance with the IAccessible2 specification. 
    + * 
    + ************************************************************************/ 
    +
    +
    +
    + +
    +iccjpeg +homepage + + +
    +
    (Copied from the README.)
    +
    +--------------------------------------------------------------------------------
    +
    +LICENSE extracted from IJG's jpeg distribution:
    +-----------------------------------------------
    +
    +In plain English:
    +
    +1. We don't promise that this software works.  (But if you find any bugs,
    +   please let us know!)
    +2. You can use this software for whatever you want.  You don't have to pay us.
    +3. You may not pretend that you wrote this software.  If you use it in a
    +   program, you must acknowledge somewhere in your documentation that
    +   you've used the IJG code.
    +
    +In legalese:
    +
    +The authors make NO WARRANTY or representation, either express or implied,
    +with respect to this software, its quality, accuracy, merchantability, or
    +fitness for a particular purpose.  This software is provided "AS IS", and you,
    +its user, assume the entire risk as to its quality and accuracy.
    +
    +This software is copyright (C) 1991-1998, Thomas G. Lane.
    +All Rights Reserved except as specified below.
    +
    +Permission is hereby granted to use, copy, modify, and distribute this
    +software (or portions thereof) for any purpose, without fee, subject to these
    +conditions:
    +(1) If any part of the source code for this software is distributed, then this
    +README file must be included, with this copyright and no-warranty notice
    +unaltered; and any additions, deletions, or changes to the original files
    +must be clearly indicated in accompanying documentation.
    +(2) If only executable code is distributed, then the accompanying
    +documentation must state that "this software is based in part on the work of
    +the Independent JPEG Group".
    +(3) Permission for use of this software is granted only if the user accepts
    +full responsibility for any undesirable consequences; the authors accept
    +NO LIABILITY for damages of any kind.
    +
    +These conditions apply to any software derived from or based on the IJG code,
    +not just to the unmodified library.  If you use our work, you ought to
    +acknowledge us.
    +
    +Permission is NOT granted for the use of any IJG author's name or company name
    +in advertising or publicity relating to this software or products derived from
    +it.  This software may be referred to only as "the Independent JPEG Group's
    +software".
    +
    +We specifically permit and encourage the use of this software as the basis of
    +commercial products, provided that all warranty or liability claims are
    +assumed by the product vendor.
    +
    +
    +
    +
    + +
    +icu +homepage + + +
    +
    COPYRIGHT AND PERMISSION NOTICE (ICU 58 and later)
    +
    +Copyright © 1991-2018 Unicode, Inc. All rights reserved.
    +Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
    +
    +Permission is hereby granted, free of charge, to any person obtaining
    +a copy of the Unicode data files and any associated documentation
    +(the "Data Files") or Unicode software and any associated documentation
    +(the "Software") to deal in the Data Files or Software
    +without restriction, including without limitation the rights to use,
    +copy, modify, merge, publish, distribute, and/or sell copies of
    +the Data Files or Software, and to permit persons to whom the Data Files
    +or Software are furnished to do so, provided that either
    +(a) this copyright and permission notice appear with all copies
    +of the Data Files or Software, or
    +(b) this copyright and permission notice appear in associated
    +Documentation.
    +
    +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF
    +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
    +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +NONINFRINGEMENT OF THIRD PARTY RIGHTS.
    +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS
    +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL
    +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
    +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
    +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
    +PERFORMANCE OF THE DATA FILES OR SOFTWARE.
    +
    +Except as contained in this notice, the name of a copyright holder
    +shall not be used in advertising or otherwise to promote the sale,
    +use or other dealings in these Data Files or Software without prior
    +written authorization of the copyright holder.
    +
    +---------------------
    +
    +Third-Party Software Licenses
    +
    +This section contains third-party software notices and/or additional
    +terms for licensed third-party software components included within ICU
    +libraries.
    +
    +1. ICU License - ICU 1.8.1 to ICU 57.1
    +
    +COPYRIGHT AND PERMISSION NOTICE
    +
    +Copyright (c) 1995-2016 International Business Machines Corporation and others
    +All rights reserved.
    +
    +Permission is hereby granted, free of charge, to any person obtaining
    +a copy of this software and associated documentation files (the
    +"Software"), to deal in the Software without restriction, including
    +without limitation the rights to use, copy, modify, merge, publish,
    +distribute, and/or sell copies of the Software, and to permit persons
    +to whom the Software is furnished to do so, provided that the above
    +copyright notice(s) and this permission notice appear in all copies of
    +the Software and that both the above copyright notice(s) and this
    +permission notice appear in supporting documentation.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
    +OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
    +HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY
    +SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER
    +RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
    +CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
    +CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +
    +Except as contained in this notice, the name of a copyright holder
    +shall not be used in advertising or otherwise to promote the sale, use
    +or other dealings in this Software without prior written authorization
    +of the copyright holder.
    +
    +All trademarks and registered trademarks mentioned herein are the
    +property of their respective owners.
    +
    +2. Chinese/Japanese Word Break Dictionary Data (cjdict.txt)
    +
    + #     The Google Chrome software developed by Google is licensed under
    + # the BSD license. Other software included in this distribution is
    + # provided under other licenses, as set forth below.
    + #
    + #  The BSD License
    + #  http://opensource.org/licenses/bsd-license.php
    + #  Copyright (C) 2006-2008, Google Inc.
    + #
    + #  All rights reserved.
    + #
    + #  Redistribution and use in source and binary forms, with or without
    + # modification, are permitted provided that the following conditions are met:
    + #
    + #  Redistributions of source code must retain the above copyright notice,
    + # this list of conditions and the following disclaimer.
    + #  Redistributions in binary form must reproduce the above
    + # copyright notice, this list of conditions and the following
    + # disclaimer in the documentation and/or other materials provided with
    + # the distribution.
    + #  Neither the name of  Google Inc. nor the names of its
    + # contributors may be used to endorse or promote products derived from
    + # this software without specific prior written permission.
    + #
    + #
    + #  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
    + # CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
    + # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
    + # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    + # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
    + # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
    + # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
    + # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
    + # BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
    + # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
    + # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    + # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + #
    + #
    + #  The word list in cjdict.txt are generated by combining three word lists
    + # listed below with further processing for compound word breaking. The
    + # frequency is generated with an iterative training against Google web
    + # corpora.
    + #
    + #  * Libtabe (Chinese)
    + #    - https://sourceforge.net/project/?group_id=1519
    + #    - Its license terms and conditions are shown below.
    + #
    + #  * IPADIC (Japanese)
    + #    - http://chasen.aist-nara.ac.jp/chasen/distribution.html
    + #    - Its license terms and conditions are shown below.
    + #
    + #  ---------COPYING.libtabe ---- BEGIN--------------------
    + #
    + #  /*
    + #   * Copyright (c) 1999 TaBE Project.
    + #   * Copyright (c) 1999 Pai-Hsiang Hsiao.
    + #   * All rights reserved.
    + #   *
    + #   * Redistribution and use in source and binary forms, with or without
    + #   * modification, are permitted provided that the following conditions
    + #   * are met:
    + #   *
    + #   * . Redistributions of source code must retain the above copyright
    + #   *   notice, this list of conditions and the following disclaimer.
    + #   * . Redistributions in binary form must reproduce the above copyright
    + #   *   notice, this list of conditions and the following disclaimer in
    + #   *   the documentation and/or other materials provided with the
    + #   *   distribution.
    + #   * . Neither the name of the TaBE Project nor the names of its
    + #   *   contributors may be used to endorse or promote products derived
    + #   *   from this software without specific prior written permission.
    + #   *
    + #   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + #   * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + #   * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
    + #   * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
    + #   * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
    + #   * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    + #   * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
    + #   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    + #   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
    + #   * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    + #   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
    + #   * OF THE POSSIBILITY OF SUCH DAMAGE.
    + #   */
    + #
    + #  /*
    + #   * Copyright (c) 1999 Computer Systems and Communication Lab,
    + #   *                    Institute of Information Science, Academia
    + #       *                    Sinica. All rights reserved.
    + #   *
    + #   * Redistribution and use in source and binary forms, with or without
    + #   * modification, are permitted provided that the following conditions
    + #   * are met:
    + #   *
    + #   * . Redistributions of source code must retain the above copyright
    + #   *   notice, this list of conditions and the following disclaimer.
    + #   * . Redistributions in binary form must reproduce the above copyright
    + #   *   notice, this list of conditions and the following disclaimer in
    + #   *   the documentation and/or other materials provided with the
    + #   *   distribution.
    + #   * . Neither the name of the Computer Systems and Communication Lab
    + #   *   nor the names of its contributors may be used to endorse or
    + #   *   promote products derived from this software without specific
    + #   *   prior written permission.
    + #   *
    + #   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + #   * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + #   * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
    + #   * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
    + #   * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
    + #   * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    + #   * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
    + #   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    + #   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
    + #   * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    + #   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
    + #   * OF THE POSSIBILITY OF SUCH DAMAGE.
    + #   */
    + #
    + #  Copyright 1996 Chih-Hao Tsai @ Beckman Institute,
    + #      University of Illinois
    + #  c-tsai4@uiuc.edu  http://casper.beckman.uiuc.edu/~c-tsai4
    + #
    + #  ---------------COPYING.libtabe-----END--------------------------------
    + #
    + #
    + #  ---------------COPYING.ipadic-----BEGIN-------------------------------
    + #
    + #  Copyright 2000, 2001, 2002, 2003 Nara Institute of Science
    + #  and Technology.  All Rights Reserved.
    + #
    + #  Use, reproduction, and distribution of this software is permitted.
    + #  Any copy of this software, whether in its original form or modified,
    + #  must include both the above copyright notice and the following
    + #  paragraphs.
    + #
    + #  Nara Institute of Science and Technology (NAIST),
    + #  the copyright holders, disclaims all warranties with regard to this
    + #  software, including all implied warranties of merchantability and
    + #  fitness, in no event shall NAIST be liable for
    + #  any special, indirect or consequential damages or any damages
    + #  whatsoever resulting from loss of use, data or profits, whether in an
    + #  action of contract, negligence or other tortuous action, arising out
    + #  of or in connection with the use or performance of this software.
    + #
    + #  A large portion of the dictionary entries
    + #  originate from ICOT Free Software.  The following conditions for ICOT
    + #  Free Software applies to the current dictionary as well.
    + #
    + #  Each User may also freely distribute the Program, whether in its
    + #  original form or modified, to any third party or parties, PROVIDED
    + #  that the provisions of Section 3 ("NO WARRANTY") will ALWAYS appear
    + #  on, or be attached to, the Program, which is distributed substantially
    + #  in the same form as set out herein and that such intended
    + #  distribution, if actually made, will neither violate or otherwise
    + #  contravene any of the laws and regulations of the countries having
    + #  jurisdiction over the User or the intended distribution itself.
    + #
    + #  NO WARRANTY
    + #
    + #  The program was produced on an experimental basis in the course of the
    + #  research and development conducted during the project and is provided
    + #  to users as so produced on an experimental basis.  Accordingly, the
    + #  program is provided without any warranty whatsoever, whether express,
    + #  implied, statutory or otherwise.  The term "warranty" used herein
    + #  includes, but is not limited to, any warranty of the quality,
    + #  performance, merchantability and fitness for a particular purpose of
    + #  the program and the nonexistence of any infringement or violation of
    + #  any right of any third party.
    + #
    + #  Each user of the program will agree and understand, and be deemed to
    + #  have agreed and understood, that there is no warranty whatsoever for
    + #  the program and, accordingly, the entire risk arising from or
    + #  otherwise connected with the program is assumed by the user.
    + #
    + #  Therefore, neither ICOT, the copyright holder, or any other
    + #  organization that participated in or was otherwise related to the
    + #  development of the program and their respective officials, directors,
    + #  officers and other employees shall be held liable for any and all
    + #  damages, including, without limitation, general, special, incidental
    + #  and consequential damages, arising out of or otherwise in connection
    + #  with the use or inability to use the program or any product, material
    + #  or result produced or otherwise obtained by using the program,
    + #  regardless of whether they have been advised of, or otherwise had
    + #  knowledge of, the possibility of such damages at any time during the
    + #  project or thereafter.  Each user will be deemed to have agreed to the
    + #  foregoing by his or her commencement of use of the program.  The term
    + #  "use" as used herein includes, but is not limited to, the use,
    + #  modification, copying and distribution of the program and the
    + #  production of secondary products from the program.
    + #
    + #  In the case where the program, whether in its original form or
    + #  modified, was distributed or delivered to or received by a user from
    + #  any person, organization or entity other than ICOT, unless it makes or
    + #  grants independently of ICOT any specific warranty to the user in
    + #  writing, such person, organization or entity, will also be exempted
    + #  from and not be held liable to the user for any such damages as noted
    + #  above as far as the program is concerned.
    + #
    + #  ---------------COPYING.ipadic-----END----------------------------------
    +
    +3. Lao Word Break Dictionary Data (laodict.txt)
    +
    + #  Copyright (c) 2013 International Business Machines Corporation
    + #  and others. All Rights Reserved.
    + #
    + # Project: http://code.google.com/p/lao-dictionary/
    + # Dictionary: http://lao-dictionary.googlecode.com/git/Lao-Dictionary.txt
    + # License: http://lao-dictionary.googlecode.com/git/Lao-Dictionary-LICENSE.txt
    + #              (copied below)
    + #
    + #  This file is derived from the above dictionary, with slight
    + #  modifications.
    + #  ----------------------------------------------------------------------
    + #  Copyright (C) 2013 Brian Eugene Wilson, Robert Martin Campbell.
    + #  All rights reserved.
    + #
    + #  Redistribution and use in source and binary forms, with or without
    + #  modification,
    + #  are permitted provided that the following conditions are met:
    + #
    + #
    + # Redistributions of source code must retain the above copyright notice, this
    + #  list of conditions and the following disclaimer. Redistributions in
    + #  binary form must reproduce the above copyright notice, this list of
    + #  conditions and the following disclaimer in the documentation and/or
    + #  other materials provided with the distribution.
    + #
    + #
    + # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
    + # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
    + # COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
    + # INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    + # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
    + # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    + # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
    + # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    + # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
    + # OF THE POSSIBILITY OF SUCH DAMAGE.
    + #  --------------------------------------------------------------------------
    +
    +4. Burmese Word Break Dictionary Data (burmesedict.txt)
    +
    + #  Copyright (c) 2014 International Business Machines Corporation
    + #  and others. All Rights Reserved.
    + #
    + #  This list is part of a project hosted at:
    + #    github.com/kanyawtech/myanmar-karen-word-lists
    + #
    + #  --------------------------------------------------------------------------
    + #  Copyright (c) 2013, LeRoy Benjamin Sharon
    + #  All rights reserved.
    + #
    + #  Redistribution and use in source and binary forms, with or without
    + #  modification, are permitted provided that the following conditions
    + #  are met: Redistributions of source code must retain the above
    + #  copyright notice, this list of conditions and the following
    + #  disclaimer.  Redistributions in binary form must reproduce the
    + #  above copyright notice, this list of conditions and the following
    + #  disclaimer in the documentation and/or other materials provided
    + #  with the distribution.
    + #
    + #    Neither the name Myanmar Karen Word Lists, nor the names of its
    + #    contributors may be used to endorse or promote products derived
    + #    from this software without specific prior written permission.
    + #
    + #  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
    + #  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
    + #  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
    + #  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    + #  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS
    + #  BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
    + #  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
    + #  TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + #  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
    + #  ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
    + #  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
    + #  THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    + #  SUCH DAMAGE.
    + #  --------------------------------------------------------------------------
    +
    +5. Time Zone Database
    +
    +  ICU uses the public domain data and code derived from Time Zone
    +Database for its time zone support. The ownership of the TZ database
    +is explained in BCP 175: Procedure for Maintaining the Time Zone
    +Database section 7.
    +
    + # 7.  Database Ownership
    + #
    + #    The TZ database itself is not an IETF Contribution or an IETF
    + #    document.  Rather it is a pre-existing and regularly updated work
    + #    that is in the public domain, and is intended to remain in the
    + #    public domain.  Therefore, BCPs 78 [RFC5378] and 79 [RFC3979] do
    + #    not apply to the TZ Database or contributions that individuals make
    + #    to it.  Should any claims be made and substantiated against the TZ
    + #    Database, the organization that is providing the IANA
    + #    Considerations defined in this RFC, under the memorandum of
    + #    understanding with the IETF, currently ICANN, may act in accordance
    + #    with all competent court orders.  No ownership claims will be made
    + #    by ICANN or the IETF Trust on the database or the code.  Any person
    + #    making a contribution to the database or code waives all rights to
    + #    future claims in that contribution or in the TZ Database.
    +
    +6. Google double-conversion
    +
    +Copyright 2006-2011, the V8 project authors. All rights reserved.
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are
    +met:
    +
    +    * Redistributions of source code must retain the above copyright
    +      notice, this list of conditions and the following disclaimer.
    +    * Redistributions in binary form must reproduce the above
    +      copyright notice, this list of conditions and the following
    +      disclaimer in the documentation and/or other materials provided
    +      with the distribution.
    +    * Neither the name of Google Inc. nor the names of its
    +      contributors may be used to endorse or promote products derived
    +      from this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +inspector protocol +homepage + + +
    +
    // Copyright 2016 The Chromium Authors. All rights reserved.
    +//
    +// Redistribution and use in source and binary forms, with or without
    +// modification, are permitted provided that the following conditions are
    +// met:
    +//
    +//    * Redistributions of source code must retain the above copyright
    +// notice, this list of conditions and the following disclaimer.
    +//    * Redistributions in binary form must reproduce the above
    +// copyright notice, this list of conditions and the following disclaimer
    +// in the documentation and/or other materials provided with the
    +// distribution.
    +//    * Neither the name of Google Inc. nor the names of its
    +// contributors may be used to endorse or promote products derived from
    +// this software without specific prior written permission.
    +//
    +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +International Phone Number Library +homepage + + +
    +
                                     Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +
    +
    + +
    +ISimpleDOM COM interfaces for accessibility +homepage + + +
    +
    /* ***** BEGIN LICENSE BLOCK *****
    + * Version: MPL 1.1/GPL 2.0/LGPL 2.1
    + *
    + * The contents of this file are subject to the Mozilla Public License Version
    + * 1.1 (the "License"); you may not use this file except in compliance with
    + * the License. You may obtain a copy of the License at
    + * http://www.mozilla.org/MPL/
    + *
    + * Software distributed under the License is distributed on an "AS IS" basis,
    + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
    + * for the specific language governing rights and limitations under the
    + * License.
    + *
    + * The Original Code is mozilla.org code.
    + *
    + * The Initial Developer of the Original Code is
    + * Netscape Communications Corporation.
    + * Portions created by the Initial Developer are Copyright (C) 2002
    + * the Initial Developer. All Rights Reserved.
    + *
    + * Contributor(s):
    + *
    + * Alternatively, the contents of this file may be used under the terms of
    + * either the GNU General Public License Version 2 or later (the "GPL"), or
    + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
    + * in which case the provisions of the GPL or the LGPL are applicable instead
    + * of those above. If you wish to allow use of your version of this file only
    + * under the terms of either the GPL or the LGPL, and not to allow others to
    + * use your version of this file under the terms of the MPL, indicate your
    + * decision by deleting the provisions above and replace them with the notice
    + * and other provisions required by the GPL or the LGPL. If you do not delete
    + * the provisions above, a recipient may use your version of this file under
    + * the terms of any one of the MPL, the GPL or the LGPL.
    + *
    + * ***** END LICENSE BLOCK ***** */
    +
    +
    +
    + +
    +Jinja2 Python Template Engine +homepage + + +
    +
    Copyright (c) 2009 by the Jinja Team, see AUTHORS for more details.
    +
    +Some rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are
    +met:
    +
    +    * Redistributions of source code must retain the above copyright
    +      notice, this list of conditions and the following disclaimer.
    +
    +    * Redistributions in binary form must reproduce the above
    +      copyright notice, this list of conditions and the following
    +      disclaimer in the documentation and/or other materials provided
    +      with the distribution.
    +
    +    * The names of the contributors may not be used to endorse or
    +      promote products derived from this software without specific
    +      prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +jsoncpp +homepage + + +
    +
    The JsonCpp library's source code, including accompanying documentation, 
    +tests and demonstration applications, are licensed under the following
    +conditions...
    +
    +The author (Baptiste Lepilleur) explicitly disclaims copyright in all 
    +jurisdictions which recognize such a disclaimer. In such jurisdictions, 
    +this software is released into the Public Domain.
    +
    +In jurisdictions which do not recognize Public Domain property (e.g. Germany as of
    +2010), this software is Copyright (c) 2007-2010 by Baptiste Lepilleur, and is
    +released under the terms of the MIT License (see below).
    +
    +In jurisdictions which recognize Public Domain property, the user of this 
    +software may choose to accept it either as 1) Public Domain, 2) under the 
    +conditions of the MIT License (see below), or 3) under the terms of dual 
    +Public Domain/MIT License conditions described here, as they choose.
    +
    +The MIT License is about as close to Public Domain as a license can get, and is
    +described in clear, concise terms at:
    +
    +   http://en.wikipedia.org/wiki/MIT_License
    +   
    +The full text of the MIT License follows:
    +
    +========================================================================
    +Copyright (c) 2007-2010 Baptiste Lepilleur
    +
    +Permission is hereby granted, free of charge, to any person
    +obtaining a copy of this software and associated documentation
    +files (the "Software"), to deal in the Software without
    +restriction, including without limitation the rights to use, copy,
    +modify, merge, publish, distribute, sublicense, and/or sell copies
    +of the Software, and to permit persons to whom the Software is
    +furnished to do so, subject to the following conditions:
    +
    +The above copyright notice and this permission notice shall be
    +included in all copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
    +BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
    +ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
    +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
    +SOFTWARE.
    +========================================================================
    +(END LICENSE TEXT)
    +
    +The MIT license is compatible with both the GPL and commercial
    +software, affording one all of the rights of Public Domain with the
    +minor nuisance of being required to keep the above copyright notice
    +and license text in the source code. Note also that by accepting the
    +Public Domain "license" you can re-license your copy using whatever
    +license you like.
    +
    +
    +
    + +
    +Khronos header files +homepage + + +
    +
    Copyright (c) 2007-2010 The Khronos Group Inc.
    +
    +Permission is hereby granted, free of charge, to any person obtaining a
    +copy of this software and/or associated documentation files (the
    +"Materials"), to deal in the Materials without restriction, including
    +without limitation the rights to use, copy, modify, merge, publish,
    +distribute, sublicense, and/or sell copies of the Materials, and to
    +permit persons to whom the Materials are furnished to do so, subject to
    +the following conditions:
    +
    +The above copyright notice and this permission notice shall be included
    +in all copies or substantial portions of the Materials.
    +
    +THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
    +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
    +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
    +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
    +MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
    +
    +
    +SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008)
    +
    +Copyright (C) 1992 Silicon Graphics, Inc. All Rights Reserved.
    +
    +Permission is hereby granted, free of charge, to any person obtaining a copy of
    +this software and associated documentation files (the "Software"), to deal in
    +the Software without restriction, including without limitation the rights to
    +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
    +of the Software, and to permit persons to whom the Software is furnished to do
    +so, subject to the following conditions:
    +
    +The above copyright notice including the dates of first publication and either
    +this permission notice or a reference to http://oss.sgi.com/projects/FreeB/
    +shall be included in all copies or substantial portions of the Software. 
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL SILICON
    +GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
    +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +
    +Except as contained in this notice, the name of Silicon Graphics, Inc. shall
    +not be used in advertising or otherwise to promote the sale, use or other
    +dealings in this Software without prior written authorization from Silicon
    +Graphics, Inc.
    +
    +
    +
    + +
    +LCOV - the LTP GCOV extension +homepage + + +
    +
    		    GNU GENERAL PUBLIC LICENSE
    +		       Version 2, June 1991
    +
    + Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
    + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
    + Everyone is permitted to copy and distribute verbatim copies
    + of this license document, but changing it is not allowed.
    +
    +			    Preamble
    +
    +  The licenses for most software are designed to take away your
    +freedom to share and change it.  By contrast, the GNU General Public
    +License is intended to guarantee your freedom to share and change free
    +software--to make sure the software is free for all its users.  This
    +General Public License applies to most of the Free Software
    +Foundation's software and to any other program whose authors commit to
    +using it.  (Some other Free Software Foundation software is covered by
    +the GNU Lesser General Public License instead.)  You can apply it to
    +your programs, too.
    +
    +  When we speak of free software, we are referring to freedom, not
    +price.  Our General Public Licenses are designed to make sure that you
    +have the freedom to distribute copies of free software (and charge for
    +this service if you wish), that you receive source code or can get it
    +if you want it, that you can change the software or use pieces of it
    +in new free programs; and that you know you can do these things.
    +
    +  To protect your rights, we need to make restrictions that forbid
    +anyone to deny you these rights or to ask you to surrender the rights.
    +These restrictions translate to certain responsibilities for you if you
    +distribute copies of the software, or if you modify it.
    +
    +  For example, if you distribute copies of such a program, whether
    +gratis or for a fee, you must give the recipients all the rights that
    +you have.  You must make sure that they, too, receive or can get the
    +source code.  And you must show them these terms so they know their
    +rights.
    +
    +  We protect your rights with two steps: (1) copyright the software, and
    +(2) offer you this license which gives you legal permission to copy,
    +distribute and/or modify the software.
    +
    +  Also, for each author's protection and ours, we want to make certain
    +that everyone understands that there is no warranty for this free
    +software.  If the software is modified by someone else and passed on, we
    +want its recipients to know that what they have is not the original, so
    +that any problems introduced by others will not reflect on the original
    +authors' reputations.
    +
    +  Finally, any free program is threatened constantly by software
    +patents.  We wish to avoid the danger that redistributors of a free
    +program will individually obtain patent licenses, in effect making the
    +program proprietary.  To prevent this, we have made it clear that any
    +patent must be licensed for everyone's free use or not licensed at all.
    +
    +  The precise terms and conditions for copying, distribution and
    +modification follow.
    +
    +		    GNU GENERAL PUBLIC LICENSE
    +   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
    +
    +  0. This License applies to any program or other work which contains
    +a notice placed by the copyright holder saying it may be distributed
    +under the terms of this General Public License.  The "Program", below,
    +refers to any such program or work, and a "work based on the Program"
    +means either the Program or any derivative work under copyright law:
    +that is to say, a work containing the Program or a portion of it,
    +either verbatim or with modifications and/or translated into another
    +language.  (Hereinafter, translation is included without limitation in
    +the term "modification".)  Each licensee is addressed as "you".
    +
    +Activities other than copying, distribution and modification are not
    +covered by this License; they are outside its scope.  The act of
    +running the Program is not restricted, and the output from the Program
    +is covered only if its contents constitute a work based on the
    +Program (independent of having been made by running the Program).
    +Whether that is true depends on what the Program does.
    +
    +  1. You may copy and distribute verbatim copies of the Program's
    +source code as you receive it, in any medium, provided that you
    +conspicuously and appropriately publish on each copy an appropriate
    +copyright notice and disclaimer of warranty; keep intact all the
    +notices that refer to this License and to the absence of any warranty;
    +and give any other recipients of the Program a copy of this License
    +along with the Program.
    +
    +You may charge a fee for the physical act of transferring a copy, and
    +you may at your option offer warranty protection in exchange for a fee.
    +
    +  2. You may modify your copy or copies of the Program or any portion
    +of it, thus forming a work based on the Program, and copy and
    +distribute such modifications or work under the terms of Section 1
    +above, provided that you also meet all of these conditions:
    +
    +    a) You must cause the modified files to carry prominent notices
    +    stating that you changed the files and the date of any change.
    +
    +    b) You must cause any work that you distribute or publish, that in
    +    whole or in part contains or is derived from the Program or any
    +    part thereof, to be licensed as a whole at no charge to all third
    +    parties under the terms of this License.
    +
    +    c) If the modified program normally reads commands interactively
    +    when run, you must cause it, when started running for such
    +    interactive use in the most ordinary way, to print or display an
    +    announcement including an appropriate copyright notice and a
    +    notice that there is no warranty (or else, saying that you provide
    +    a warranty) and that users may redistribute the program under
    +    these conditions, and telling the user how to view a copy of this
    +    License.  (Exception: if the Program itself is interactive but
    +    does not normally print such an announcement, your work based on
    +    the Program is not required to print an announcement.)
    +
    +These requirements apply to the modified work as a whole.  If
    +identifiable sections of that work are not derived from the Program,
    +and can be reasonably considered independent and separate works in
    +themselves, then this License, and its terms, do not apply to those
    +sections when you distribute them as separate works.  But when you
    +distribute the same sections as part of a whole which is a work based
    +on the Program, the distribution of the whole must be on the terms of
    +this License, whose permissions for other licensees extend to the
    +entire whole, and thus to each and every part regardless of who wrote it.
    +
    +Thus, it is not the intent of this section to claim rights or contest
    +your rights to work written entirely by you; rather, the intent is to
    +exercise the right to control the distribution of derivative or
    +collective works based on the Program.
    +
    +In addition, mere aggregation of another work not based on the Program
    +with the Program (or with a work based on the Program) on a volume of
    +a storage or distribution medium does not bring the other work under
    +the scope of this License.
    +
    +  3. You may copy and distribute the Program (or a work based on it,
    +under Section 2) in object code or executable form under the terms of
    +Sections 1 and 2 above provided that you also do one of the following:
    +
    +    a) Accompany it with the complete corresponding machine-readable
    +    source code, which must be distributed under the terms of Sections
    +    1 and 2 above on a medium customarily used for software interchange; or,
    +
    +    b) Accompany it with a written offer, valid for at least three
    +    years, to give any third party, for a charge no more than your
    +    cost of physically performing source distribution, a complete
    +    machine-readable copy of the corresponding source code, to be
    +    distributed under the terms of Sections 1 and 2 above on a medium
    +    customarily used for software interchange; or,
    +
    +    c) Accompany it with the information you received as to the offer
    +    to distribute corresponding source code.  (This alternative is
    +    allowed only for noncommercial distribution and only if you
    +    received the program in object code or executable form with such
    +    an offer, in accord with Subsection b above.)
    +
    +The source code for a work means the preferred form of the work for
    +making modifications to it.  For an executable work, complete source
    +code means all the source code for all modules it contains, plus any
    +associated interface definition files, plus the scripts used to
    +control compilation and installation of the executable.  However, as a
    +special exception, the source code distributed need not include
    +anything that is normally distributed (in either source or binary
    +form) with the major components (compiler, kernel, and so on) of the
    +operating system on which the executable runs, unless that component
    +itself accompanies the executable.
    +
    +If distribution of executable or object code is made by offering
    +access to copy from a designated place, then offering equivalent
    +access to copy the source code from the same place counts as
    +distribution of the source code, even though third parties are not
    +compelled to copy the source along with the object code.
    +
    +  4. You may not copy, modify, sublicense, or distribute the Program
    +except as expressly provided under this License.  Any attempt
    +otherwise to copy, modify, sublicense or distribute the Program is
    +void, and will automatically terminate your rights under this License.
    +However, parties who have received copies, or rights, from you under
    +this License will not have their licenses terminated so long as such
    +parties remain in full compliance.
    +
    +  5. You are not required to accept this License, since you have not
    +signed it.  However, nothing else grants you permission to modify or
    +distribute the Program or its derivative works.  These actions are
    +prohibited by law if you do not accept this License.  Therefore, by
    +modifying or distributing the Program (or any work based on the
    +Program), you indicate your acceptance of this License to do so, and
    +all its terms and conditions for copying, distributing or modifying
    +the Program or works based on it.
    +
    +  6. Each time you redistribute the Program (or any work based on the
    +Program), the recipient automatically receives a license from the
    +original licensor to copy, distribute or modify the Program subject to
    +these terms and conditions.  You may not impose any further
    +restrictions on the recipients' exercise of the rights granted herein.
    +You are not responsible for enforcing compliance by third parties to
    +this License.
    +
    +  7. If, as a consequence of a court judgment or allegation of patent
    +infringement or for any other reason (not limited to patent issues),
    +conditions are imposed on you (whether by court order, agreement or
    +otherwise) that contradict the conditions of this License, they do not
    +excuse you from the conditions of this License.  If you cannot
    +distribute so as to satisfy simultaneously your obligations under this
    +License and any other pertinent obligations, then as a consequence you
    +may not distribute the Program at all.  For example, if a patent
    +license would not permit royalty-free redistribution of the Program by
    +all those who receive copies directly or indirectly through you, then
    +the only way you could satisfy both it and this License would be to
    +refrain entirely from distribution of the Program.
    +
    +If any portion of this section is held invalid or unenforceable under
    +any particular circumstance, the balance of the section is intended to
    +apply and the section as a whole is intended to apply in other
    +circumstances.
    +
    +It is not the purpose of this section to induce you to infringe any
    +patents or other property right claims or to contest validity of any
    +such claims; this section has the sole purpose of protecting the
    +integrity of the free software distribution system, which is
    +implemented by public license practices.  Many people have made
    +generous contributions to the wide range of software distributed
    +through that system in reliance on consistent application of that
    +system; it is up to the author/donor to decide if he or she is willing
    +to distribute software through any other system and a licensee cannot
    +impose that choice.
    +
    +This section is intended to make thoroughly clear what is believed to
    +be a consequence of the rest of this License.
    +
    +  8. If the distribution and/or use of the Program is restricted in
    +certain countries either by patents or by copyrighted interfaces, the
    +original copyright holder who places the Program under this License
    +may add an explicit geographical distribution limitation excluding
    +those countries, so that distribution is permitted only in or among
    +countries not thus excluded.  In such case, this License incorporates
    +the limitation as if written in the body of this License.
    +
    +  9. The Free Software Foundation may publish revised and/or new versions
    +of the General Public License from time to time.  Such new versions will
    +be similar in spirit to the present version, but may differ in detail to
    +address new problems or concerns.
    +
    +Each version is given a distinguishing version number.  If the Program
    +specifies a version number of this License which applies to it and "any
    +later version", you have the option of following the terms and conditions
    +either of that version or of any later version published by the Free
    +Software Foundation.  If the Program does not specify a version number of
    +this License, you may choose any version ever published by the Free Software
    +Foundation.
    +
    +  10. If you wish to incorporate parts of the Program into other free
    +programs whose distribution conditions are different, write to the author
    +to ask for permission.  For software which is copyrighted by the Free
    +Software Foundation, write to the Free Software Foundation; we sometimes
    +make exceptions for this.  Our decision will be guided by the two goals
    +of preserving the free status of all derivatives of our free software and
    +of promoting the sharing and reuse of software generally.
    +
    +			    NO WARRANTY
    +
    +  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
    +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
    +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
    +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
    +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
    +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
    +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
    +REPAIR OR CORRECTION.
    +
    +  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
    +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
    +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
    +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
    +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
    +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
    +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
    +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
    +POSSIBILITY OF SUCH DAMAGES.
    +
    +		     END OF TERMS AND CONDITIONS
    +
    +	    How to Apply These Terms to Your New Programs
    +
    +  If you develop a new program, and you want it to be of the greatest
    +possible use to the public, the best way to achieve this is to make it
    +free software which everyone can redistribute and change under these terms.
    +
    +  To do so, attach the following notices to the program.  It is safest
    +to attach them to the start of each source file to most effectively
    +convey the exclusion of warranty; and each file should have at least
    +the "copyright" line and a pointer to where the full notice is found.
    +
    +    <one line to give the program's name and a brief idea of what it does.>
    +    Copyright (C) <year>  <name of author>
    +
    +    This program is free software; you can redistribute it and/or modify
    +    it under the terms of the GNU General Public License as published by
    +    the Free Software Foundation; either version 2 of the License, or
    +    (at your option) any later version.
    +
    +    This program is distributed in the hope that it will be useful,
    +    but WITHOUT ANY WARRANTY; without even the implied warranty of
    +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    +    GNU General Public License for more details.
    +
    +    You should have received a copy of the GNU General Public License along
    +    with this program; if not, write to the Free Software Foundation, Inc.,
    +    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
    +
    +Also add information on how to contact you by electronic and paper mail.
    +
    +If the program is interactive, make it output a short notice like this
    +when it starts in an interactive mode:
    +
    +    Gnomovision version 69, Copyright (C) year name of author
    +    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
    +    This is free software, and you are welcome to redistribute it
    +    under certain conditions; type `show c' for details.
    +
    +The hypothetical commands `show w' and `show c' should show the appropriate
    +parts of the General Public License.  Of course, the commands you use may
    +be called something other than `show w' and `show c'; they could even be
    +mouse-clicks or menu items--whatever suits your program.
    +
    +You should also get your employer (if you work as a programmer) or your
    +school, if any, to sign a "copyright disclaimer" for the program, if
    +necessary.  Here is a sample; alter the names:
    +
    +  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
    +  `Gnomovision' (which makes passes at compilers) written by James Hacker.
    +
    +  <signature of Ty Coon>, 1 April 1989
    +  Ty Coon, President of Vice
    +
    +This General Public License does not permit incorporating your program into
    +proprietary programs.  If your program is a subroutine library, you may
    +consider it more useful to permit linking proprietary applications with the
    +library.  If this is what you want to do, use the GNU Lesser General
    +Public License instead of this License.
    +
    +
    +
    + +
    +LeakCanary +homepage + + +
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    + +
    +LevelDB: A Fast Persistent Key-Value Store +homepage + + +
    +
    Copyright (c) 2011 The LevelDB Authors. All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are
    +met:
    +
    +   * Redistributions of source code must retain the above copyright
    +notice, this list of conditions and the following disclaimer.
    +   * Redistributions in binary form must reproduce the above
    +copyright notice, this list of conditions and the following disclaimer
    +in the documentation and/or other materials provided with the
    +distribution.
    +   * Neither the name of Google Inc. nor the names of its
    +contributors may be used to endorse or promote products derived from
    +this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +libaddressinput +homepage + + +
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +
    + +
    +libcxx +homepage + + +
    +
    ==============================================================================
    +libc++ License
    +==============================================================================
    +
    +The libc++ library is dual licensed under both the University of Illinois
    +"BSD-Like" license and the MIT license.  As a user of this code you may choose
    +to use it under either license.  As a contributor, you agree to allow your code
    +to be used under both.
    +
    +Full text of the relevant licenses is included below.
    +
    +==============================================================================
    +
    +University of Illinois/NCSA
    +Open Source License
    +
    +Copyright (c) 2009-2017 by the contributors listed in CREDITS.TXT
    +
    +All rights reserved.
    +
    +Developed by:
    +
    +    LLVM Team
    +
    +    University of Illinois at Urbana-Champaign
    +
    +    http://llvm.org
    +
    +Permission is hereby granted, free of charge, to any person obtaining a copy of
    +this software and associated documentation files (the "Software"), to deal with
    +the Software without restriction, including without limitation the rights to
    +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
    +of the Software, and to permit persons to whom the Software is furnished to do
    +so, subject to the following conditions:
    +
    +    * Redistributions of source code must retain the above copyright notice,
    +      this list of conditions and the following disclaimers.
    +
    +    * Redistributions in binary form must reproduce the above copyright notice,
    +      this list of conditions and the following disclaimers in the
    +      documentation and/or other materials provided with the distribution.
    +
    +    * Neither the names of the LLVM Team, University of Illinois at
    +      Urbana-Champaign, nor the names of its contributors may be used to
    +      endorse or promote products derived from this Software without specific
    +      prior written permission.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
    +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
    +CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
    +SOFTWARE.
    +
    +==============================================================================
    +
    +Copyright (c) 2009-2014 by the contributors listed in CREDITS.TXT
    +
    +Permission is hereby granted, free of charge, to any person obtaining a copy
    +of this software and associated documentation files (the "Software"), to deal
    +in the Software without restriction, including without limitation the rights
    +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    +copies of the Software, and to permit persons to whom the Software is
    +furnished to do so, subject to the following conditions:
    +
    +The above copyright notice and this permission notice shall be included in
    +all copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    +THE SOFTWARE.
    +
    +
    +
    + +
    +libcxxabi +homepage + + +
    +
    ==============================================================================
    +libc++abi License
    +==============================================================================
    +
    +The libc++abi library is dual licensed under both the University of Illinois
    +"BSD-Like" license and the MIT license.  As a user of this code you may choose
    +to use it under either license.  As a contributor, you agree to allow your code
    +to be used under both.
    +
    +Full text of the relevant licenses is included below.
    +
    +==============================================================================
    +
    +University of Illinois/NCSA
    +Open Source License
    +
    +Copyright (c) 2009-2017 by the contributors listed in CREDITS.TXT
    +
    +All rights reserved.
    +
    +Developed by:
    +
    +    LLVM Team
    +
    +    University of Illinois at Urbana-Champaign
    +
    +    http://llvm.org
    +
    +Permission is hereby granted, free of charge, to any person obtaining a copy of
    +this software and associated documentation files (the "Software"), to deal with
    +the Software without restriction, including without limitation the rights to
    +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
    +of the Software, and to permit persons to whom the Software is furnished to do
    +so, subject to the following conditions:
    +
    +    * Redistributions of source code must retain the above copyright notice,
    +      this list of conditions and the following disclaimers.
    +
    +    * Redistributions in binary form must reproduce the above copyright notice,
    +      this list of conditions and the following disclaimers in the
    +      documentation and/or other materials provided with the distribution.
    +
    +    * Neither the names of the LLVM Team, University of Illinois at
    +      Urbana-Champaign, nor the names of its contributors may be used to
    +      endorse or promote products derived from this Software without specific
    +      prior written permission.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
    +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
    +CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
    +SOFTWARE.
    +
    +==============================================================================
    +
    +Copyright (c) 2009-2014 by the contributors listed in CREDITS.TXT
    +
    +Permission is hereby granted, free of charge, to any person obtaining a copy
    +of this software and associated documentation files (the "Software"), to deal
    +in the Software without restriction, including without limitation the rights
    +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    +copies of the Software, and to permit persons to whom the Software is
    +furnished to do so, subject to the following conditions:
    +
    +The above copyright notice and this permission notice shall be included in
    +all copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    +THE SOFTWARE.
    +
    +
    +
    + +
    +libevdev +homepage + + +
    +
    Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
    +Use of this source code is governed by a BSD-style license that can be
    +found in the LICENSE file.
    +
    +
    +
    + +
    +libevent +homepage + + +
    +
    Libevent is available for use under the following license, commonly known
    +as the 3-clause (or "modified") BSD license:
    +
    +==============================
    +Copyright (c) 2000-2007 Niels Provos <provos@citi.umich.edu>
    +Copyright (c) 2007-2010 Niels Provos and Nick Mathewson
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +3. The name of the author may not be used to endorse or promote products
    +   derived from this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
    +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
    +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
    +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
    +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
    +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
    +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +==============================
    +
    +Portions of Libevent are based on works by others, also made available by
    +them under the three-clause BSD license above.  The copyright notices are
    +available in the corresponding source files; the license is as above.  Here's
    +a list:
    +
    +log.c:
    +   Copyright (c) 2000 Dug Song <dugsong@monkey.org>
    +   Copyright (c) 1993 The Regents of the University of California.
    +
    +strlcpy.c:
    +   Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>
    +
    +win32.c:
    +   Copyright (c) 2003 Michael A. Davis <mike@datanerds.net>
    +
    +evport.c:
    +   Copyright (c) 2007 Sun Microsystems
    +
    +min_heap.h:
    +   Copyright (c) 2006 Maxim Yegorushkin <maxim.yegorushkin@gmail.com>
    +
    +tree.h:
    +   Copyright 2002 Niels Provos <provos@citi.umich.edu>
    +
    +
    +
    + +
    +libFuzzer +homepage + + +
    +
    ==============================================================================
    +LLVM Release License
    +==============================================================================
    +University of Illinois/NCSA
    +Open Source License
    +
    +Copyright (c) 2003-2015 University of Illinois at Urbana-Champaign.
    +All rights reserved.
    +
    +Developed by:
    +
    +    LLVM Team
    +
    +    University of Illinois at Urbana-Champaign
    +
    +    http://llvm.org
    +
    +Permission is hereby granted, free of charge, to any person obtaining a copy of
    +this software and associated documentation files (the "Software"), to deal with
    +the Software without restriction, including without limitation the rights to
    +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
    +of the Software, and to permit persons to whom the Software is furnished to do
    +so, subject to the following conditions:
    +
    +    * Redistributions of source code must retain the above copyright notice,
    +      this list of conditions and the following disclaimers.
    +
    +    * Redistributions in binary form must reproduce the above copyright notice,
    +      this list of conditions and the following disclaimers in the
    +      documentation and/or other materials provided with the distribution.
    +
    +    * Neither the names of the LLVM Team, University of Illinois at
    +      Urbana-Champaign, nor the names of its contributors may be used to
    +      endorse or promote products derived from this Software without specific
    +      prior written permission.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
    +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
    +CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
    +SOFTWARE.
    +
    +==============================================================================
    +Copyrights and Licenses for Third Party Software Distributed with LLVM:
    +==============================================================================
    +The LLVM software contains code written by third parties.  Such software will
    +have its own individual LICENSE.TXT file in the directory in which it appears.
    +This file will describe the copyrights, license, and restrictions which apply
    +to that code.
    +
    +The disclaimer of warranty in the University of Illinois Open Source License
    +applies to all code in the LLVM Distribution, and nothing in any of the
    +other licenses gives permission to use the names of the LLVM Team or the
    +University of Illinois to endorse or promote products derived from this
    +Software.
    +
    +The following pieces of software have additional or alternate copyrights,
    +licenses, and/or restrictions:
    +
    +Program             Directory
    +-------             ---------
    +Autoconf            llvm/autoconf
    +                    llvm/projects/ModuleMaker/autoconf
    +Google Test         llvm/utils/unittest/googletest
    +OpenBSD regex       llvm/lib/Support/{reg*, COPYRIGHT.regex}
    +pyyaml tests        llvm/test/YAMLParser/{*.data, LICENSE.TXT}
    +ARM contributions   llvm/lib/Target/ARM/LICENSE.TXT
    +md5 contributions   llvm/lib/Support/MD5.cpp llvm/include/llvm/Support/MD5.h
    +
    +
    +
    + +
    +libjingle XMPP and xmllite libraries +homepage + + +
    +
    Copyright (c) 2011, The WebRTC project authors. All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are
    +met:
    +
    +  * Redistributions of source code must retain the above copyright
    +    notice, this list of conditions and the following disclaimer.
    +
    +  * Redistributions in binary form must reproduce the above copyright
    +    notice, this list of conditions and the following disclaimer in
    +    the documentation and/or other materials provided with the
    +    distribution.
    +
    +  * Neither the name of Google nor the names of its contributors may
    +    be used to endorse or promote products derived from this software
    +    without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +libjpeg +homepage + + +
    +
    (Copied from the README.)
    +
    +--------------------------------------------------------------------------------
    +
    +The authors make NO WARRANTY or representation, either express or implied,
    +with respect to this software, its quality, accuracy, merchantability, or
    +fitness for a particular purpose.  This software is provided "AS IS", and you,
    +its user, assume the entire risk as to its quality and accuracy.
    +
    +This software is copyright (C) 1991-1998, Thomas G. Lane.
    +All Rights Reserved except as specified below.
    +
    +Permission is hereby granted to use, copy, modify, and distribute this
    +software (or portions thereof) for any purpose, without fee, subject to these
    +conditions:
    +(1) If any part of the source code for this software is distributed, then this
    +README file must be included, with this copyright and no-warranty notice
    +unaltered; and any additions, deletions, or changes to the original files
    +must be clearly indicated in accompanying documentation.
    +(2) If only executable code is distributed, then the accompanying
    +documentation must state that "this software is based in part on the work of
    +the Independent JPEG Group".
    +(3) Permission for use of this software is granted only if the user accepts
    +full responsibility for any undesirable consequences; the authors accept
    +NO LIABILITY for damages of any kind.
    +
    +These conditions apply to any software derived from or based on the IJG code,
    +not just to the unmodified library.  If you use our work, you ought to
    +acknowledge us.
    +
    +Permission is NOT granted for the use of any IJG author's name or company name
    +in advertising or publicity relating to this software or products derived from
    +it.  This software may be referred to only as "the Independent JPEG Group's
    +software".
    +
    +We specifically permit and encourage the use of this software as the basis of
    +commercial products, provided that all warranty or liability claims are
    +assumed by the product vendor.
    +
    +
    +ansi2knr.c is included in this distribution by permission of L. Peter Deutsch,
    +sole proprietor of its copyright holder, Aladdin Enterprises of Menlo Park, CA.
    +ansi2knr.c is NOT covered by the above copyright and conditions, but instead
    +by the usual distribution terms of the Free Software Foundation; principally,
    +that you must include source code if you redistribute it.  (See the file
    +ansi2knr.c for full details.)  However, since ansi2knr.c is not needed as part
    +of any program generated from the IJG code, this does not limit you more than
    +the foregoing paragraphs do.
    +
    +The Unix configuration script "configure" was produced with GNU Autoconf.
    +It is copyright by the Free Software Foundation but is freely distributable.
    +The same holds for its supporting scripts (config.guess, config.sub,
    +ltconfig, ltmain.sh).  Another support script, install-sh, is copyright
    +by M.I.T. but is also freely distributable.
    +
    +It appears that the arithmetic coding option of the JPEG spec is covered by
    +patents owned by IBM, AT&T, and Mitsubishi.  Hence arithmetic coding cannot
    +legally be used without obtaining one or more licenses.  For this reason,
    +support for arithmetic coding has been removed from the free JPEG software.
    +(Since arithmetic coding provides only a marginal gain over the unpatented
    +Huffman mode, it is unlikely that very many implementations will support it.)
    +So far as we are aware, there are no patent restrictions on the remaining
    +code.
    +
    +The IJG distribution formerly included code to read and write GIF files.
    +To avoid entanglement with the Unisys LZW patent, GIF reading support has
    +been removed altogether, and the GIF writer has been simplified to produce
    +"uncompressed GIFs".  This technique does not use the LZW algorithm; the
    +resulting GIF files are larger than usual, but are readable by all standard
    +GIF decoders.
    +
    +We are required to state that
    +    "The Graphics Interchange Format(c) is the Copyright property of
    +    CompuServe Incorporated.  GIF(sm) is a Service Mark property of
    +    CompuServe Incorporated."
    +
    +--------------------------------------------------------------------------------
    +
    +jconfig.h is distributed under the MPL 1.1/GPL 2.0/LGPL 2.1 tri-license.
    +
    +jmorecfg.h contains modifications, which are distributed under the Netscape
    +Public License.
    +
    +
    +
    + +
    +libjpeg-turbo +homepage + + +
    +
    libjpeg-turbo Licenses
    +======================
    +
    +libjpeg-turbo is covered by three compatible BSD-style open source licenses:
    +
    +- The IJG (Independent JPEG Group) License, which is listed in
    +  [README.ijg](README.ijg)
    +
    +  This license applies to the libjpeg API library and associated programs
    +  (any code inherited from libjpeg, and any modifications to that code.)
    +
    +- The Modified (3-clause) BSD License, which is listed in
    +  [turbojpeg.c](turbojpeg.c)
    +
    +  This license covers the TurboJPEG API library and associated programs.
    +
    +- The zlib License, which is listed in [simd/jsimdext.inc](simd/jsimdext.inc)
    +
    +  This license is a subset of the other two, and it covers the libjpeg-turbo
    +  SIMD extensions.
    +
    +
    +Complying with the libjpeg-turbo Licenses
    +=========================================
    +
    +This section provides a roll-up of the libjpeg-turbo licensing terms, to the
    +best of our understanding.
    +
    +1.  If you are distributing a modified version of the libjpeg-turbo source,
    +    then:
    +
    +    1.  You cannot alter or remove any existing copyright or license notices
    +        from the source.
    +
    +        **Origin**
    +        - Clause 1 of the IJG License
    +        - Clause 1 of the Modified BSD License
    +        - Clauses 1 and 3 of the zlib License
    +
    +    2.  You must add your own copyright notice to the header of each source
    +        file you modified, so others can tell that you modified that file (if
    +        there is not an existing copyright header in that file, then you can
    +        simply add a notice stating that you modified the file.)
    +
    +        **Origin**
    +        - Clause 1 of the IJG License
    +        - Clause 2 of the zlib License
    +
    +    3.  You must include the IJG README file, and you must not alter any of the
    +        copyright or license text in that file.
    +
    +        **Origin**
    +        - Clause 1 of the IJG License
    +
    +2.  If you are distributing only libjpeg-turbo binaries without the source, or
    +    if you are distributing an application that statically links with
    +    libjpeg-turbo, then:
    +
    +    1.  Your product documentation must include a message stating:
    +
    +        This software is based in part on the work of the Independent JPEG
    +        Group.
    +
    +        **Origin**
    +        - Clause 2 of the IJG license
    +
    +    2.  If your binary distribution includes or uses the TurboJPEG API, then
    +        your product documentation must include the text of the Modified BSD
    +        License.
    +
    +        **Origin**
    +        - Clause 2 of the Modified BSD License
    +
    +3.  You cannot use the name of the IJG or The libjpeg-turbo Project or the
    +    contributors thereof in advertising, publicity, etc.
    +
    +    **Origin**
    +    - IJG License
    +    - Clause 3 of the Modified BSD License
    +
    +4.  The IJG and The libjpeg-turbo Project do not warrant libjpeg-turbo to be
    +    free of defects, nor do we accept any liability for undesirable
    +    consequences resulting from your use of the software.
    +
    +    **Origin**
    +    - IJG License
    +    - Modified BSD License
    +    - zlib License
    +
    +
    +
    + +
    +libpng +homepage + + +
    +
    +This copy of the libpng notices is provided for your convenience.  In case of
    +any discrepancy between this copy and the notices in the file png.h that is
    +included in the libpng distribution, the latter shall prevail.
    +
    +COPYRIGHT NOTICE, DISCLAIMER, and LICENSE:
    +
    +If you modify libpng you may insert additional notices immediately following
    +this sentence.
    +
    +Using custom versions of pnglibconf.h and pngprefix.h for Chrome.
    +
    +This code is released under the libpng license.
    +
    +libpng versions 1.0.7, July 1, 2000 through 1.6.34, September 29, 2017 are
    +Copyright (c) 2000-2002, 2004, 2006-2017 Glenn Randers-Pehrson, are
    +derived from libpng-1.0.6, and are distributed according to the same
    +disclaimer and license as libpng-1.0.6 with the following individuals
    +added to the list of Contributing Authors:
    +
    +   Simon-Pierre Cadieux
    +   Eric S. Raymond
    +   Mans Rullgard
    +   Cosmin Truta
    +   Gilles Vollant
    +   James Yu
    +   Mandar Sahastrabuddhe
    +   Google Inc.
    +   Vadim Barkov
    +
    +and with the following additions to the disclaimer:
    +
    +   There is no warranty against interference with your enjoyment of the
    +   library or against infringement.  There is no warranty that our
    +   efforts or the library will fulfill any of your particular purposes
    +   or needs.  This library is provided with all faults, and the entire
    +   risk of satisfactory quality, performance, accuracy, and effort is with
    +   the user.
    +
    +Some files in the "contrib" directory and some configure-generated
    +files that are distributed with libpng have other copyright owners and
    +are released under other open source licenses.
    +
    +libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are
    +Copyright (c) 1998-2000 Glenn Randers-Pehrson, are derived from
    +libpng-0.96, and are distributed according to the same disclaimer and
    +license as libpng-0.96, with the following individuals added to the list
    +of Contributing Authors:
    +
    +   Tom Lane
    +   Glenn Randers-Pehrson
    +   Willem van Schaik
    +
    +libpng versions 0.89, June 1996, through 0.96, May 1997, are
    +Copyright (c) 1996-1997 Andreas Dilger, are derived from libpng-0.88,
    +and are distributed according to the same disclaimer and license as
    +libpng-0.88, with the following individuals added to the list of
    +Contributing Authors:
    +
    +   John Bowler
    +   Kevin Bracey
    +   Sam Bushell
    +   Magnus Holmgren
    +   Greg Roelofs
    +   Tom Tanner
    +
    +Some files in the "scripts" directory have other copyright owners
    +but are released under this license.
    +
    +libpng versions 0.5, May 1995, through 0.88, January 1996, are
    +Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
    +
    +For the purposes of this copyright and license, "Contributing Authors"
    +is defined as the following set of individuals:
    +
    +   Andreas Dilger
    +   Dave Martindale
    +   Guy Eric Schalnat
    +   Paul Schmidt
    +   Tim Wegner
    +
    +The PNG Reference Library is supplied "AS IS".  The Contributing Authors
    +and Group 42, Inc. disclaim all warranties, expressed or implied,
    +including, without limitation, the warranties of merchantability and of
    +fitness for any purpose.  The Contributing Authors and Group 42, Inc.
    +assume no liability for direct, indirect, incidental, special, exemplary,
    +or consequential damages, which may result from the use of the PNG
    +Reference Library, even if advised of the possibility of such damage.
    +
    +Permission is hereby granted to use, copy, modify, and distribute this
    +source code, or portions hereof, for any purpose, without fee, subject
    +to the following restrictions:
    +
    +  1. The origin of this source code must not be misrepresented.
    +
    +  2. Altered versions must be plainly marked as such and must not
    +     be misrepresented as being the original source.
    +
    +  3. This Copyright notice may not be removed or altered from any
    +     source or altered source distribution.
    +
    +The Contributing Authors and Group 42, Inc. specifically permit, without
    +fee, and encourage the use of this source code as a component to
    +supporting the PNG file format in commercial products.  If you use this
    +source code in a product, acknowledgment is not required but would be
    +appreciated.
    +
    +END OF COPYRIGHT NOTICE, DISCLAIMER, and LICENSE.
    +
    +TRADEMARK:
    +
    +The name "libpng" has not been registered by the Copyright owner
    +as a trademark in any jurisdiction.  However, because libpng has
    +been distributed and maintained world-wide, continually since 1995,
    +the Copyright owner claims "common-law trademark protection" in any
    +jurisdiction where common-law trademark is recognized.
    +
    +OSI CERTIFICATION:
    +
    +Libpng is OSI Certified Open Source Software.  OSI Certified Open Source is
    +a certification mark of the Open Source Initiative. OSI has not addressed
    +the additional disclaimers inserted at version 1.0.7.
    +
    +EXPORT CONTROL:
    +
    +The Copyright owner believes that the Export Control Classification
    +Number (ECCN) for libpng is EAR99, which means not subject to export
    +controls or International Traffic in Arms Regulations (ITAR) because
    +it is open source, publicly available software, that does not contain
    +any encryption software.  See the EAR, paragraphs 734.3(b)(3) and
    +734.7(b).
    +
    +Glenn Randers-Pehrson
    +glennrp at users.sourceforge.net
    +September 29, 2017
    +
    +
    +
    + +
    +libprotobuf-mutator +homepage + + +
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +
    + +
    +libsecret +homepage + + +
    +
                      GNU LESSER GENERAL PUBLIC LICENSE
    +                       Version 2.1, February 1999
    +
    + Copyright (C) 1991, 1999 Free Software Foundation, Inc.
    + 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
    + Everyone is permitted to copy and distribute verbatim copies
    + of this license document, but changing it is not allowed.
    +
    +[This is the first released version of the Lesser GPL.  It also counts
    + as the successor of the GNU Library Public License, version 2, hence
    + the version number 2.1.]
    +
    +                            Preamble
    +
    +  The licenses for most software are designed to take away your
    +freedom to share and change it.  By contrast, the GNU General Public
    +Licenses are intended to guarantee your freedom to share and change
    +free software--to make sure the software is free for all its users.
    +
    +  This license, the Lesser General Public License, applies to some
    +specially designated software packages--typically libraries--of the
    +Free Software Foundation and other authors who decide to use it.  You
    +can use it too, but we suggest you first think carefully about whether
    +this license or the ordinary General Public License is the better
    +strategy to use in any particular case, based on the explanations below.
    +
    +  When we speak of free software, we are referring to freedom of use,
    +not price.  Our General Public Licenses are designed to make sure that
    +you have the freedom to distribute copies of free software (and charge
    +for this service if you wish); that you receive source code or can get
    +it if you want it; that you can change the software and use pieces of
    +it in new free programs; and that you are informed that you can do
    +these things.
    +
    +  To protect your rights, we need to make restrictions that forbid
    +distributors to deny you these rights or to ask you to surrender these
    +rights.  These restrictions translate to certain responsibilities for
    +you if you distribute copies of the library or if you modify it.
    +
    +  For example, if you distribute copies of the library, whether gratis
    +or for a fee, you must give the recipients all the rights that we gave
    +you.  You must make sure that they, too, receive or can get the source
    +code.  If you link other code with the library, you must provide
    +complete object files to the recipients, so that they can relink them
    +with the library after making changes to the library and recompiling
    +it.  And you must show them these terms so they know their rights.
    +
    +  We protect your rights with a two-step method: (1) we copyright the
    +library, and (2) we offer you this license, which gives you legal
    +permission to copy, distribute and/or modify the library.
    +
    +  To protect each distributor, we want to make it very clear that
    +there is no warranty for the free library.  Also, if the library is
    +modified by someone else and passed on, the recipients should know
    +that what they have is not the original version, so that the original
    +author's reputation will not be affected by problems that might be
    +introduced by others.
    +
    +  Finally, software patents pose a constant threat to the existence of
    +any free program.  We wish to make sure that a company cannot
    +effectively restrict the users of a free program by obtaining a
    +restrictive license from a patent holder.  Therefore, we insist that
    +any patent license obtained for a version of the library must be
    +consistent with the full freedom of use specified in this license.
    +
    +  Most GNU software, including some libraries, is covered by the
    +ordinary GNU General Public License.  This license, the GNU Lesser
    +General Public License, applies to certain designated libraries, and
    +is quite different from the ordinary General Public License.  We use
    +this license for certain libraries in order to permit linking those
    +libraries into non-free programs.
    +
    +  When a program is linked with a library, whether statically or using
    +a shared library, the combination of the two is legally speaking a
    +combined work, a derivative of the original library.  The ordinary
    +General Public License therefore permits such linking only if the
    +entire combination fits its criteria of freedom.  The Lesser General
    +Public License permits more lax criteria for linking other code with
    +the library.
    +
    +  We call this license the "Lesser" General Public License because it
    +does Less to protect the user's freedom than the ordinary General
    +Public License.  It also provides other free software developers Less
    +of an advantage over competing non-free programs.  These disadvantages
    +are the reason we use the ordinary General Public License for many
    +libraries.  However, the Lesser license provides advantages in certain
    +special circumstances.
    +
    +  For example, on rare occasions, there may be a special need to
    +encourage the widest possible use of a certain library, so that it becomes
    +a de-facto standard.  To achieve this, non-free programs must be
    +allowed to use the library.  A more frequent case is that a free
    +library does the same job as widely used non-free libraries.  In this
    +case, there is little to gain by limiting the free library to free
    +software only, so we use the Lesser General Public License.
    +
    +  In other cases, permission to use a particular library in non-free
    +programs enables a greater number of people to use a large body of
    +free software.  For example, permission to use the GNU C Library in
    +non-free programs enables many more people to use the whole GNU
    +operating system, as well as its variant, the GNU/Linux operating
    +system.
    +
    +  Although the Lesser General Public License is Less protective of the
    +users' freedom, it does ensure that the user of a program that is
    +linked with the Library has the freedom and the wherewithal to run
    +that program using a modified version of the Library.
    +
    +  The precise terms and conditions for copying, distribution and
    +modification follow.  Pay close attention to the difference between a
    +"work based on the library" and a "work that uses the library".  The
    +former contains code derived from the library, whereas the latter must
    +be combined with the library in order to run.
    +
    +                  GNU LESSER GENERAL PUBLIC LICENSE
    +   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
    +
    +  0. This License Agreement applies to any software library or other
    +program which contains a notice placed by the copyright holder or
    +other authorized party saying it may be distributed under the terms of
    +this Lesser General Public License (also called "this License").
    +Each licensee is addressed as "you".
    +
    +  A "library" means a collection of software functions and/or data
    +prepared so as to be conveniently linked with application programs
    +(which use some of those functions and data) to form executables.
    +
    +  The "Library", below, refers to any such software library or work
    +which has been distributed under these terms.  A "work based on the
    +Library" means either the Library or any derivative work under
    +copyright law: that is to say, a work containing the Library or a
    +portion of it, either verbatim or with modifications and/or translated
    +straightforwardly into another language.  (Hereinafter, translation is
    +included without limitation in the term "modification".)
    +
    +  "Source code" for a work means the preferred form of the work for
    +making modifications to it.  For a library, complete source code means
    +all the source code for all modules it contains, plus any associated
    +interface definition files, plus the scripts used to control compilation
    +and installation of the library.
    +
    +  Activities other than copying, distribution and modification are not
    +covered by this License; they are outside its scope.  The act of
    +running a program using the Library is not restricted, and output from
    +such a program is covered only if its contents constitute a work based
    +on the Library (independent of the use of the Library in a tool for
    +writing it).  Whether that is true depends on what the Library does
    +and what the program that uses the Library does.
    +
    +  1. You may copy and distribute verbatim copies of the Library's
    +complete source code as you receive it, in any medium, provided that
    +you conspicuously and appropriately publish on each copy an
    +appropriate copyright notice and disclaimer of warranty; keep intact
    +all the notices that refer to this License and to the absence of any
    +warranty; and distribute a copy of this License along with the
    +Library.
    +
    +  You may charge a fee for the physical act of transferring a copy,
    +and you may at your option offer warranty protection in exchange for a
    +fee.
    +
    +  2. You may modify your copy or copies of the Library or any portion
    +of it, thus forming a work based on the Library, and copy and
    +distribute such modifications or work under the terms of Section 1
    +above, provided that you also meet all of these conditions:
    +
    +    a) The modified work must itself be a software library.
    +
    +    b) You must cause the files modified to carry prominent notices
    +    stating that you changed the files and the date of any change.
    +
    +    c) You must cause the whole of the work to be licensed at no
    +    charge to all third parties under the terms of this License.
    +
    +    d) If a facility in the modified Library refers to a function or a
    +    table of data to be supplied by an application program that uses
    +    the facility, other than as an argument passed when the facility
    +    is invoked, then you must make a good faith effort to ensure that,
    +    in the event an application does not supply such function or
    +    table, the facility still operates, and performs whatever part of
    +    its purpose remains meaningful.
    +
    +    (For example, a function in a library to compute square roots has
    +    a purpose that is entirely well-defined independent of the
    +    application.  Therefore, Subsection 2d requires that any
    +    application-supplied function or table used by this function must
    +    be optional: if the application does not supply it, the square
    +    root function must still compute square roots.)
    +
    +These requirements apply to the modified work as a whole.  If
    +identifiable sections of that work are not derived from the Library,
    +and can be reasonably considered independent and separate works in
    +themselves, then this License, and its terms, do not apply to those
    +sections when you distribute them as separate works.  But when you
    +distribute the same sections as part of a whole which is a work based
    +on the Library, the distribution of the whole must be on the terms of
    +this License, whose permissions for other licensees extend to the
    +entire whole, and thus to each and every part regardless of who wrote
    +it.
    +
    +Thus, it is not the intent of this section to claim rights or contest
    +your rights to work written entirely by you; rather, the intent is to
    +exercise the right to control the distribution of derivative or
    +collective works based on the Library.
    +
    +In addition, mere aggregation of another work not based on the Library
    +with the Library (or with a work based on the Library) on a volume of
    +a storage or distribution medium does not bring the other work under
    +the scope of this License.
    +
    +  3. You may opt to apply the terms of the ordinary GNU General Public
    +License instead of this License to a given copy of the Library.  To do
    +this, you must alter all the notices that refer to this License, so
    +that they refer to the ordinary GNU General Public License, version 2,
    +instead of to this License.  (If a newer version than version 2 of the
    +ordinary GNU General Public License has appeared, then you can specify
    +that version instead if you wish.)  Do not make any other change in
    +these notices.
    +
    +  Once this change is made in a given copy, it is irreversible for
    +that copy, so the ordinary GNU General Public License applies to all
    +subsequent copies and derivative works made from that copy.
    +
    +  This option is useful when you wish to copy part of the code of
    +the Library into a program that is not a library.
    +
    +  4. You may copy and distribute the Library (or a portion or
    +derivative of it, under Section 2) in object code or executable form
    +under the terms of Sections 1 and 2 above provided that you accompany
    +it with the complete corresponding machine-readable source code, which
    +must be distributed under the terms of Sections 1 and 2 above on a
    +medium customarily used for software interchange.
    +
    +  If distribution of object code is made by offering access to copy
    +from a designated place, then offering equivalent access to copy the
    +source code from the same place satisfies the requirement to
    +distribute the source code, even though third parties are not
    +compelled to copy the source along with the object code.
    +
    +  5. A program that contains no derivative of any portion of the
    +Library, but is designed to work with the Library by being compiled or
    +linked with it, is called a "work that uses the Library".  Such a
    +work, in isolation, is not a derivative work of the Library, and
    +therefore falls outside the scope of this License.
    +
    +  However, linking a "work that uses the Library" with the Library
    +creates an executable that is a derivative of the Library (because it
    +contains portions of the Library), rather than a "work that uses the
    +library".  The executable is therefore covered by this License.
    +Section 6 states terms for distribution of such executables.
    +
    +  When a "work that uses the Library" uses material from a header file
    +that is part of the Library, the object code for the work may be a
    +derivative work of the Library even though the source code is not.
    +Whether this is true is especially significant if the work can be
    +linked without the Library, or if the work is itself a library.  The
    +threshold for this to be true is not precisely defined by law.
    +
    +  If such an object file uses only numerical parameters, data
    +structure layouts and accessors, and small macros and small inline
    +functions (ten lines or less in length), then the use of the object
    +file is unrestricted, regardless of whether it is legally a derivative
    +work.  (Executables containing this object code plus portions of the
    +Library will still fall under Section 6.)
    +
    +  Otherwise, if the work is a derivative of the Library, you may
    +distribute the object code for the work under the terms of Section 6.
    +Any executables containing that work also fall under Section 6,
    +whether or not they are linked directly with the Library itself.
    +
    +  6. As an exception to the Sections above, you may also combine or
    +link a "work that uses the Library" with the Library to produce a
    +work containing portions of the Library, and distribute that work
    +under terms of your choice, provided that the terms permit
    +modification of the work for the customer's own use and reverse
    +engineering for debugging such modifications.
    +
    +  You must give prominent notice with each copy of the work that the
    +Library is used in it and that the Library and its use are covered by
    +this License.  You must supply a copy of this License.  If the work
    +during execution displays copyright notices, you must include the
    +copyright notice for the Library among them, as well as a reference
    +directing the user to the copy of this License.  Also, you must do one
    +of these things:
    +
    +    a) Accompany the work with the complete corresponding
    +    machine-readable source code for the Library including whatever
    +    changes were used in the work (which must be distributed under
    +    Sections 1 and 2 above); and, if the work is an executable linked
    +    with the Library, with the complete machine-readable "work that
    +    uses the Library", as object code and/or source code, so that the
    +    user can modify the Library and then relink to produce a modified
    +    executable containing the modified Library.  (It is understood
    +    that the user who changes the contents of definitions files in the
    +    Library will not necessarily be able to recompile the application
    +    to use the modified definitions.)
    +
    +    b) Use a suitable shared library mechanism for linking with the
    +    Library.  A suitable mechanism is one that (1) uses at run time a
    +    copy of the library already present on the user's computer system,
    +    rather than copying library functions into the executable, and (2)
    +    will operate properly with a modified version of the library, if
    +    the user installs one, as long as the modified version is
    +    interface-compatible with the version that the work was made with.
    +
    +    c) Accompany the work with a written offer, valid for at
    +    least three years, to give the same user the materials
    +    specified in Subsection 6a, above, for a charge no more
    +    than the cost of performing this distribution.
    +
    +    d) If distribution of the work is made by offering access to copy
    +    from a designated place, offer equivalent access to copy the above
    +    specified materials from the same place.
    +
    +    e) Verify that the user has already received a copy of these
    +    materials or that you have already sent this user a copy.
    +
    +  For an executable, the required form of the "work that uses the
    +Library" must include any data and utility programs needed for
    +reproducing the executable from it.  However, as a special exception,
    +the materials to be distributed need not include anything that is
    +normally distributed (in either source or binary form) with the major
    +components (compiler, kernel, and so on) of the operating system on
    +which the executable runs, unless that component itself accompanies
    +the executable.
    +
    +  It may happen that this requirement contradicts the license
    +restrictions of other proprietary libraries that do not normally
    +accompany the operating system.  Such a contradiction means you cannot
    +use both them and the Library together in an executable that you
    +distribute.
    +
    +  7. You may place library facilities that are a work based on the
    +Library side-by-side in a single library together with other library
    +facilities not covered by this License, and distribute such a combined
    +library, provided that the separate distribution of the work based on
    +the Library and of the other library facilities is otherwise
    +permitted, and provided that you do these two things:
    +
    +    a) Accompany the combined library with a copy of the same work
    +    based on the Library, uncombined with any other library
    +    facilities.  This must be distributed under the terms of the
    +    Sections above.
    +
    +    b) Give prominent notice with the combined library of the fact
    +    that part of it is a work based on the Library, and explaining
    +    where to find the accompanying uncombined form of the same work.
    +
    +  8. You may not copy, modify, sublicense, link with, or distribute
    +the Library except as expressly provided under this License.  Any
    +attempt otherwise to copy, modify, sublicense, link with, or
    +distribute the Library is void, and will automatically terminate your
    +rights under this License.  However, parties who have received copies,
    +or rights, from you under this License will not have their licenses
    +terminated so long as such parties remain in full compliance.
    +
    +  9. You are not required to accept this License, since you have not
    +signed it.  However, nothing else grants you permission to modify or
    +distribute the Library or its derivative works.  These actions are
    +prohibited by law if you do not accept this License.  Therefore, by
    +modifying or distributing the Library (or any work based on the
    +Library), you indicate your acceptance of this License to do so, and
    +all its terms and conditions for copying, distributing or modifying
    +the Library or works based on it.
    +
    +  10. Each time you redistribute the Library (or any work based on the
    +Library), the recipient automatically receives a license from the
    +original licensor to copy, distribute, link with or modify the Library
    +subject to these terms and conditions.  You may not impose any further
    +restrictions on the recipients' exercise of the rights granted herein.
    +You are not responsible for enforcing compliance by third parties with
    +this License.
    +
    +  11. If, as a consequence of a court judgment or allegation of patent
    +infringement or for any other reason (not limited to patent issues),
    +conditions are imposed on you (whether by court order, agreement or
    +otherwise) that contradict the conditions of this License, they do not
    +excuse you from the conditions of this License.  If you cannot
    +distribute so as to satisfy simultaneously your obligations under this
    +License and any other pertinent obligations, then as a consequence you
    +may not distribute the Library at all.  For example, if a patent
    +license would not permit royalty-free redistribution of the Library by
    +all those who receive copies directly or indirectly through you, then
    +the only way you could satisfy both it and this License would be to
    +refrain entirely from distribution of the Library.
    +
    +If any portion of this section is held invalid or unenforceable under any
    +particular circumstance, the balance of the section is intended to apply,
    +and the section as a whole is intended to apply in other circumstances.
    +
    +It is not the purpose of this section to induce you to infringe any
    +patents or other property right claims or to contest validity of any
    +such claims; this section has the sole purpose of protecting the
    +integrity of the free software distribution system which is
    +implemented by public license practices.  Many people have made
    +generous contributions to the wide range of software distributed
    +through that system in reliance on consistent application of that
    +system; it is up to the author/donor to decide if he or she is willing
    +to distribute software through any other system and a licensee cannot
    +impose that choice.
    +
    +This section is intended to make thoroughly clear what is believed to
    +be a consequence of the rest of this License.
    +
    +  12. If the distribution and/or use of the Library is restricted in
    +certain countries either by patents or by copyrighted interfaces, the
    +original copyright holder who places the Library under this License may add
    +an explicit geographical distribution limitation excluding those countries,
    +so that distribution is permitted only in or among countries not thus
    +excluded.  In such case, this License incorporates the limitation as if
    +written in the body of this License.
    +
    +  13. The Free Software Foundation may publish revised and/or new
    +versions of the Lesser General Public License from time to time.
    +Such new versions will be similar in spirit to the present version,
    +but may differ in detail to address new problems or concerns.
    +
    +Each version is given a distinguishing version number.  If the Library
    +specifies a version number of this License which applies to it and
    +"any later version", you have the option of following the terms and
    +conditions either of that version or of any later version published by
    +the Free Software Foundation.  If the Library does not specify a
    +license version number, you may choose any version ever published by
    +the Free Software Foundation.
    +
    +  14. If you wish to incorporate parts of the Library into other free
    +programs whose distribution conditions are incompatible with these,
    +write to the author to ask for permission.  For software which is
    +copyrighted by the Free Software Foundation, write to the Free
    +Software Foundation; we sometimes make exceptions for this.  Our
    +decision will be guided by the two goals of preserving the free status
    +of all derivatives of our free software and of promoting the sharing
    +and reuse of software generally.
    +
    +                            NO WARRANTY
    +
    +  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
    +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
    +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
    +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
    +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    +PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
    +LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
    +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
    +
    +  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
    +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
    +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
    +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
    +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
    +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
    +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
    +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
    +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
    +DAMAGES.
    +
    +                     END OF TERMS AND CONDITIONS
    +
    +           How to Apply These Terms to Your New Libraries
    +
    +  If you develop a new library, and you want it to be of the greatest
    +possible use to the public, we recommend making it free software that
    +everyone can redistribute and change.  You can do so by permitting
    +redistribution under these terms (or, alternatively, under the terms of the
    +ordinary General Public License).
    +
    +  To apply these terms, attach the following notices to the library.  It is
    +safest to attach them to the start of each source file to most effectively
    +convey the exclusion of warranty; and each file should have at least the
    +"copyright" line and a pointer to where the full notice is found.
    +
    +    <one line to give the library's name and a brief idea of what it does.>
    +    Copyright (C) <year>  <name of author>
    +
    +    This library is free software; you can redistribute it and/or
    +    modify it under the terms of the GNU Lesser General Public
    +    License as published by the Free Software Foundation; either
    +    version 2.1 of the License, or (at your option) any later version.
    +
    +    This library is distributed in the hope that it will be useful,
    +    but WITHOUT ANY WARRANTY; without even the implied warranty of
    +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    +    Lesser General Public License for more details.
    +
    +    You should have received a copy of the GNU Lesser General Public
    +    License along with this library; if not, write to the Free Software
    +    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
    +
    +Also add information on how to contact you by electronic and paper mail.
    +
    +You should also get your employer (if you work as a programmer) or your
    +school, if any, to sign a "copyright disclaimer" for the library, if
    +necessary.  Here is a sample; alter the names:
    +
    +  Yoyodyne, Inc., hereby disclaims all copyright interest in the
    +  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
    +
    +  <signature of Ty Coon>, 1 April 1990
    +  Ty Coon, President of Vice
    +
    +That's all there is to it!
    +
    +
    + +
    +libsrtp +homepage + + +
    +
    /*
    + *	
    + * Copyright (c) 2001-2017 Cisco Systems, Inc.
    + * All rights reserved.
    + * 
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions
    + * are met:
    + * 
    + *   Redistributions of source code must retain the above copyright
    + *   notice, this list of conditions and the following disclaimer.
    + * 
    + *   Redistributions in binary form must reproduce the above
    + *   copyright notice, this list of conditions and the following
    + *   disclaimer in the documentation and/or other materials provided
    + *   with the distribution.
    + * 
    + *   Neither the name of the Cisco Systems, Inc. nor the names of its
    + *   contributors may be used to endorse or promote products derived
    + *   from this software without specific prior written permission.
    + * 
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
    + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
    + * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
    + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
    + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
    + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
    + * OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +
    +
    + +
    +libudev +homepage + + +
    +
                      GNU LESSER GENERAL PUBLIC LICENSE
    +                       Version 2.1, February 1999
    +
    + Copyright (C) 1991, 1999 Free Software Foundation, Inc.
    + 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
    + Everyone is permitted to copy and distribute verbatim copies
    + of this license document, but changing it is not allowed.
    +
    +[This is the first released version of the Lesser GPL.  It also counts
    + as the successor of the GNU Library Public License, version 2, hence
    + the version number 2.1.]
    +
    +                            Preamble
    +
    +  The licenses for most software are designed to take away your
    +freedom to share and change it.  By contrast, the GNU General Public
    +Licenses are intended to guarantee your freedom to share and change
    +free software--to make sure the software is free for all its users.
    +
    +  This license, the Lesser General Public License, applies to some
    +specially designated software packages--typically libraries--of the
    +Free Software Foundation and other authors who decide to use it.  You
    +can use it too, but we suggest you first think carefully about whether
    +this license or the ordinary General Public License is the better
    +strategy to use in any particular case, based on the explanations below.
    +
    +  When we speak of free software, we are referring to freedom of use,
    +not price.  Our General Public Licenses are designed to make sure that
    +you have the freedom to distribute copies of free software (and charge
    +for this service if you wish); that you receive source code or can get
    +it if you want it; that you can change the software and use pieces of
    +it in new free programs; and that you are informed that you can do
    +these things.
    +
    +  To protect your rights, we need to make restrictions that forbid
    +distributors to deny you these rights or to ask you to surrender these
    +rights.  These restrictions translate to certain responsibilities for
    +you if you distribute copies of the library or if you modify it.
    +
    +  For example, if you distribute copies of the library, whether gratis
    +or for a fee, you must give the recipients all the rights that we gave
    +you.  You must make sure that they, too, receive or can get the source
    +code.  If you link other code with the library, you must provide
    +complete object files to the recipients, so that they can relink them
    +with the library after making changes to the library and recompiling
    +it.  And you must show them these terms so they know their rights.
    +
    +  We protect your rights with a two-step method: (1) we copyright the
    +library, and (2) we offer you this license, which gives you legal
    +permission to copy, distribute and/or modify the library.
    +
    +  To protect each distributor, we want to make it very clear that
    +there is no warranty for the free library.  Also, if the library is
    +modified by someone else and passed on, the recipients should know
    +that what they have is not the original version, so that the original
    +author's reputation will not be affected by problems that might be
    +introduced by others.
    +
    +  Finally, software patents pose a constant threat to the existence of
    +any free program.  We wish to make sure that a company cannot
    +effectively restrict the users of a free program by obtaining a
    +restrictive license from a patent holder.  Therefore, we insist that
    +any patent license obtained for a version of the library must be
    +consistent with the full freedom of use specified in this license.
    +
    +  Most GNU software, including some libraries, is covered by the
    +ordinary GNU General Public License.  This license, the GNU Lesser
    +General Public License, applies to certain designated libraries, and
    +is quite different from the ordinary General Public License.  We use
    +this license for certain libraries in order to permit linking those
    +libraries into non-free programs.
    +
    +  When a program is linked with a library, whether statically or using
    +a shared library, the combination of the two is legally speaking a
    +combined work, a derivative of the original library.  The ordinary
    +General Public License therefore permits such linking only if the
    +entire combination fits its criteria of freedom.  The Lesser General
    +Public License permits more lax criteria for linking other code with
    +the library.
    +
    +  We call this license the "Lesser" General Public License because it
    +does Less to protect the user's freedom than the ordinary General
    +Public License.  It also provides other free software developers Less
    +of an advantage over competing non-free programs.  These disadvantages
    +are the reason we use the ordinary General Public License for many
    +libraries.  However, the Lesser license provides advantages in certain
    +special circumstances.
    +
    +  For example, on rare occasions, there may be a special need to
    +encourage the widest possible use of a certain library, so that it becomes
    +a de-facto standard.  To achieve this, non-free programs must be
    +allowed to use the library.  A more frequent case is that a free
    +library does the same job as widely used non-free libraries.  In this
    +case, there is little to gain by limiting the free library to free
    +software only, so we use the Lesser General Public License.
    +
    +  In other cases, permission to use a particular library in non-free
    +programs enables a greater number of people to use a large body of
    +free software.  For example, permission to use the GNU C Library in
    +non-free programs enables many more people to use the whole GNU
    +operating system, as well as its variant, the GNU/Linux operating
    +system.
    +
    +  Although the Lesser General Public License is Less protective of the
    +users' freedom, it does ensure that the user of a program that is
    +linked with the Library has the freedom and the wherewithal to run
    +that program using a modified version of the Library.
    +
    +  The precise terms and conditions for copying, distribution and
    +modification follow.  Pay close attention to the difference between a
    +"work based on the library" and a "work that uses the library".  The
    +former contains code derived from the library, whereas the latter must
    +be combined with the library in order to run.
    +
    +                  GNU LESSER GENERAL PUBLIC LICENSE
    +   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
    +
    +  0. This License Agreement applies to any software library or other
    +program which contains a notice placed by the copyright holder or
    +other authorized party saying it may be distributed under the terms of
    +this Lesser General Public License (also called "this License").
    +Each licensee is addressed as "you".
    +
    +  A "library" means a collection of software functions and/or data
    +prepared so as to be conveniently linked with application programs
    +(which use some of those functions and data) to form executables.
    +
    +  The "Library", below, refers to any such software library or work
    +which has been distributed under these terms.  A "work based on the
    +Library" means either the Library or any derivative work under
    +copyright law: that is to say, a work containing the Library or a
    +portion of it, either verbatim or with modifications and/or translated
    +straightforwardly into another language.  (Hereinafter, translation is
    +included without limitation in the term "modification".)
    +
    +  "Source code" for a work means the preferred form of the work for
    +making modifications to it.  For a library, complete source code means
    +all the source code for all modules it contains, plus any associated
    +interface definition files, plus the scripts used to control compilation
    +and installation of the library.
    +
    +  Activities other than copying, distribution and modification are not
    +covered by this License; they are outside its scope.  The act of
    +running a program using the Library is not restricted, and output from
    +such a program is covered only if its contents constitute a work based
    +on the Library (independent of the use of the Library in a tool for
    +writing it).  Whether that is true depends on what the Library does
    +and what the program that uses the Library does.
    +
    +  1. You may copy and distribute verbatim copies of the Library's
    +complete source code as you receive it, in any medium, provided that
    +you conspicuously and appropriately publish on each copy an
    +appropriate copyright notice and disclaimer of warranty; keep intact
    +all the notices that refer to this License and to the absence of any
    +warranty; and distribute a copy of this License along with the
    +Library.
    +
    +  You may charge a fee for the physical act of transferring a copy,
    +and you may at your option offer warranty protection in exchange for a
    +fee.
    +
    +  2. You may modify your copy or copies of the Library or any portion
    +of it, thus forming a work based on the Library, and copy and
    +distribute such modifications or work under the terms of Section 1
    +above, provided that you also meet all of these conditions:
    +
    +    a) The modified work must itself be a software library.
    +
    +    b) You must cause the files modified to carry prominent notices
    +    stating that you changed the files and the date of any change.
    +
    +    c) You must cause the whole of the work to be licensed at no
    +    charge to all third parties under the terms of this License.
    +
    +    d) If a facility in the modified Library refers to a function or a
    +    table of data to be supplied by an application program that uses
    +    the facility, other than as an argument passed when the facility
    +    is invoked, then you must make a good faith effort to ensure that,
    +    in the event an application does not supply such function or
    +    table, the facility still operates, and performs whatever part of
    +    its purpose remains meaningful.
    +
    +    (For example, a function in a library to compute square roots has
    +    a purpose that is entirely well-defined independent of the
    +    application.  Therefore, Subsection 2d requires that any
    +    application-supplied function or table used by this function must
    +    be optional: if the application does not supply it, the square
    +    root function must still compute square roots.)
    +
    +These requirements apply to the modified work as a whole.  If
    +identifiable sections of that work are not derived from the Library,
    +and can be reasonably considered independent and separate works in
    +themselves, then this License, and its terms, do not apply to those
    +sections when you distribute them as separate works.  But when you
    +distribute the same sections as part of a whole which is a work based
    +on the Library, the distribution of the whole must be on the terms of
    +this License, whose permissions for other licensees extend to the
    +entire whole, and thus to each and every part regardless of who wrote
    +it.
    +
    +Thus, it is not the intent of this section to claim rights or contest
    +your rights to work written entirely by you; rather, the intent is to
    +exercise the right to control the distribution of derivative or
    +collective works based on the Library.
    +
    +In addition, mere aggregation of another work not based on the Library
    +with the Library (or with a work based on the Library) on a volume of
    +a storage or distribution medium does not bring the other work under
    +the scope of this License.
    +
    +  3. You may opt to apply the terms of the ordinary GNU General Public
    +License instead of this License to a given copy of the Library.  To do
    +this, you must alter all the notices that refer to this License, so
    +that they refer to the ordinary GNU General Public License, version 2,
    +instead of to this License.  (If a newer version than version 2 of the
    +ordinary GNU General Public License has appeared, then you can specify
    +that version instead if you wish.)  Do not make any other change in
    +these notices.
    +
    +  Once this change is made in a given copy, it is irreversible for
    +that copy, so the ordinary GNU General Public License applies to all
    +subsequent copies and derivative works made from that copy.
    +
    +  This option is useful when you wish to copy part of the code of
    +the Library into a program that is not a library.
    +
    +  4. You may copy and distribute the Library (or a portion or
    +derivative of it, under Section 2) in object code or executable form
    +under the terms of Sections 1 and 2 above provided that you accompany
    +it with the complete corresponding machine-readable source code, which
    +must be distributed under the terms of Sections 1 and 2 above on a
    +medium customarily used for software interchange.
    +
    +  If distribution of object code is made by offering access to copy
    +from a designated place, then offering equivalent access to copy the
    +source code from the same place satisfies the requirement to
    +distribute the source code, even though third parties are not
    +compelled to copy the source along with the object code.
    +
    +  5. A program that contains no derivative of any portion of the
    +Library, but is designed to work with the Library by being compiled or
    +linked with it, is called a "work that uses the Library".  Such a
    +work, in isolation, is not a derivative work of the Library, and
    +therefore falls outside the scope of this License.
    +
    +  However, linking a "work that uses the Library" with the Library
    +creates an executable that is a derivative of the Library (because it
    +contains portions of the Library), rather than a "work that uses the
    +library".  The executable is therefore covered by this License.
    +Section 6 states terms for distribution of such executables.
    +
    +  When a "work that uses the Library" uses material from a header file
    +that is part of the Library, the object code for the work may be a
    +derivative work of the Library even though the source code is not.
    +Whether this is true is especially significant if the work can be
    +linked without the Library, or if the work is itself a library.  The
    +threshold for this to be true is not precisely defined by law.
    +
    +  If such an object file uses only numerical parameters, data
    +structure layouts and accessors, and small macros and small inline
    +functions (ten lines or less in length), then the use of the object
    +file is unrestricted, regardless of whether it is legally a derivative
    +work.  (Executables containing this object code plus portions of the
    +Library will still fall under Section 6.)
    +
    +  Otherwise, if the work is a derivative of the Library, you may
    +distribute the object code for the work under the terms of Section 6.
    +Any executables containing that work also fall under Section 6,
    +whether or not they are linked directly with the Library itself.
    +
    +  6. As an exception to the Sections above, you may also combine or
    +link a "work that uses the Library" with the Library to produce a
    +work containing portions of the Library, and distribute that work
    +under terms of your choice, provided that the terms permit
    +modification of the work for the customer's own use and reverse
    +engineering for debugging such modifications.
    +
    +  You must give prominent notice with each copy of the work that the
    +Library is used in it and that the Library and its use are covered by
    +this License.  You must supply a copy of this License.  If the work
    +during execution displays copyright notices, you must include the
    +copyright notice for the Library among them, as well as a reference
    +directing the user to the copy of this License.  Also, you must do one
    +of these things:
    +
    +    a) Accompany the work with the complete corresponding
    +    machine-readable source code for the Library including whatever
    +    changes were used in the work (which must be distributed under
    +    Sections 1 and 2 above); and, if the work is an executable linked
    +    with the Library, with the complete machine-readable "work that
    +    uses the Library", as object code and/or source code, so that the
    +    user can modify the Library and then relink to produce a modified
    +    executable containing the modified Library.  (It is understood
    +    that the user who changes the contents of definitions files in the
    +    Library will not necessarily be able to recompile the application
    +    to use the modified definitions.)
    +
    +    b) Use a suitable shared library mechanism for linking with the
    +    Library.  A suitable mechanism is one that (1) uses at run time a
    +    copy of the library already present on the user's computer system,
    +    rather than copying library functions into the executable, and (2)
    +    will operate properly with a modified version of the library, if
    +    the user installs one, as long as the modified version is
    +    interface-compatible with the version that the work was made with.
    +
    +    c) Accompany the work with a written offer, valid for at
    +    least three years, to give the same user the materials
    +    specified in Subsection 6a, above, for a charge no more
    +    than the cost of performing this distribution.
    +
    +    d) If distribution of the work is made by offering access to copy
    +    from a designated place, offer equivalent access to copy the above
    +    specified materials from the same place.
    +
    +    e) Verify that the user has already received a copy of these
    +    materials or that you have already sent this user a copy.
    +
    +  For an executable, the required form of the "work that uses the
    +Library" must include any data and utility programs needed for
    +reproducing the executable from it.  However, as a special exception,
    +the materials to be distributed need not include anything that is
    +normally distributed (in either source or binary form) with the major
    +components (compiler, kernel, and so on) of the operating system on
    +which the executable runs, unless that component itself accompanies
    +the executable.
    +
    +  It may happen that this requirement contradicts the license
    +restrictions of other proprietary libraries that do not normally
    +accompany the operating system.  Such a contradiction means you cannot
    +use both them and the Library together in an executable that you
    +distribute.
    +
    +  7. You may place library facilities that are a work based on the
    +Library side-by-side in a single library together with other library
    +facilities not covered by this License, and distribute such a combined
    +library, provided that the separate distribution of the work based on
    +the Library and of the other library facilities is otherwise
    +permitted, and provided that you do these two things:
    +
    +    a) Accompany the combined library with a copy of the same work
    +    based on the Library, uncombined with any other library
    +    facilities.  This must be distributed under the terms of the
    +    Sections above.
    +
    +    b) Give prominent notice with the combined library of the fact
    +    that part of it is a work based on the Library, and explaining
    +    where to find the accompanying uncombined form of the same work.
    +
    +  8. You may not copy, modify, sublicense, link with, or distribute
    +the Library except as expressly provided under this License.  Any
    +attempt otherwise to copy, modify, sublicense, link with, or
    +distribute the Library is void, and will automatically terminate your
    +rights under this License.  However, parties who have received copies,
    +or rights, from you under this License will not have their licenses
    +terminated so long as such parties remain in full compliance.
    +
    +  9. You are not required to accept this License, since you have not
    +signed it.  However, nothing else grants you permission to modify or
    +distribute the Library or its derivative works.  These actions are
    +prohibited by law if you do not accept this License.  Therefore, by
    +modifying or distributing the Library (or any work based on the
    +Library), you indicate your acceptance of this License to do so, and
    +all its terms and conditions for copying, distributing or modifying
    +the Library or works based on it.
    +
    +  10. Each time you redistribute the Library (or any work based on the
    +Library), the recipient automatically receives a license from the
    +original licensor to copy, distribute, link with or modify the Library
    +subject to these terms and conditions.  You may not impose any further
    +restrictions on the recipients' exercise of the rights granted herein.
    +You are not responsible for enforcing compliance by third parties with
    +this License.
    +
    +  11. If, as a consequence of a court judgment or allegation of patent
    +infringement or for any other reason (not limited to patent issues),
    +conditions are imposed on you (whether by court order, agreement or
    +otherwise) that contradict the conditions of this License, they do not
    +excuse you from the conditions of this License.  If you cannot
    +distribute so as to satisfy simultaneously your obligations under this
    +License and any other pertinent obligations, then as a consequence you
    +may not distribute the Library at all.  For example, if a patent
    +license would not permit royalty-free redistribution of the Library by
    +all those who receive copies directly or indirectly through you, then
    +the only way you could satisfy both it and this License would be to
    +refrain entirely from distribution of the Library.
    +
    +If any portion of this section is held invalid or unenforceable under any
    +particular circumstance, the balance of the section is intended to apply,
    +and the section as a whole is intended to apply in other circumstances.
    +
    +It is not the purpose of this section to induce you to infringe any
    +patents or other property right claims or to contest validity of any
    +such claims; this section has the sole purpose of protecting the
    +integrity of the free software distribution system which is
    +implemented by public license practices.  Many people have made
    +generous contributions to the wide range of software distributed
    +through that system in reliance on consistent application of that
    +system; it is up to the author/donor to decide if he or she is willing
    +to distribute software through any other system and a licensee cannot
    +impose that choice.
    +
    +This section is intended to make thoroughly clear what is believed to
    +be a consequence of the rest of this License.
    +
    +  12. If the distribution and/or use of the Library is restricted in
    +certain countries either by patents or by copyrighted interfaces, the
    +original copyright holder who places the Library under this License may add
    +an explicit geographical distribution limitation excluding those countries,
    +so that distribution is permitted only in or among countries not thus
    +excluded.  In such case, this License incorporates the limitation as if
    +written in the body of this License.
    +
    +  13. The Free Software Foundation may publish revised and/or new
    +versions of the Lesser General Public License from time to time.
    +Such new versions will be similar in spirit to the present version,
    +but may differ in detail to address new problems or concerns.
    +
    +Each version is given a distinguishing version number.  If the Library
    +specifies a version number of this License which applies to it and
    +"any later version", you have the option of following the terms and
    +conditions either of that version or of any later version published by
    +the Free Software Foundation.  If the Library does not specify a
    +license version number, you may choose any version ever published by
    +the Free Software Foundation.
    +
    +  14. If you wish to incorporate parts of the Library into other free
    +programs whose distribution conditions are incompatible with these,
    +write to the author to ask for permission.  For software which is
    +copyrighted by the Free Software Foundation, write to the Free
    +Software Foundation; we sometimes make exceptions for this.  Our
    +decision will be guided by the two goals of preserving the free status
    +of all derivatives of our free software and of promoting the sharing
    +and reuse of software generally.
    +
    +                            NO WARRANTY
    +
    +  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
    +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
    +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
    +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
    +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    +PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
    +LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
    +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
    +
    +  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
    +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
    +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
    +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
    +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
    +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
    +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
    +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
    +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
    +DAMAGES.
    +
    +                     END OF TERMS AND CONDITIONS
    +
    +           How to Apply These Terms to Your New Libraries
    +
    +  If you develop a new library, and you want it to be of the greatest
    +possible use to the public, we recommend making it free software that
    +everyone can redistribute and change.  You can do so by permitting
    +redistribution under these terms (or, alternatively, under the terms of the
    +ordinary General Public License).
    +
    +  To apply these terms, attach the following notices to the library.  It is
    +safest to attach them to the start of each source file to most effectively
    +convey the exclusion of warranty; and each file should have at least the
    +"copyright" line and a pointer to where the full notice is found.
    +
    +    <one line to give the library's name and a brief idea of what it does.>
    +    Copyright (C) <year>  <name of author>
    +
    +    This library is free software; you can redistribute it and/or
    +    modify it under the terms of the GNU Lesser General Public
    +    License as published by the Free Software Foundation; either
    +    version 2.1 of the License, or (at your option) any later version.
    +
    +    This library is distributed in the hope that it will be useful,
    +    but WITHOUT ANY WARRANTY; without even the implied warranty of
    +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    +    Lesser General Public License for more details.
    +
    +    You should have received a copy of the GNU Lesser General Public
    +    License along with this library; if not, write to the Free Software
    +    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
    +
    +Also add information on how to contact you by electronic and paper mail.
    +
    +You should also get your employer (if you work as a programmer) or your
    +school, if any, to sign a "copyright disclaimer" for the library, if
    +necessary.  Here is a sample; alter the names:
    +
    +  Yoyodyne, Inc., hereby disclaims all copyright interest in the
    +  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
    +
    +  <signature of Ty Coon>, 1 April 1990
    +  Ty Coon, President of Vice
    +
    +That's all there is to it!
    +
    +
    +
    + +
    +libunwind +homepage + + +
    +
    ==============================================================================
    +libunwind License
    +==============================================================================
    +
    +The libunwind library is dual licensed under both the University of Illinois
    +"BSD-Like" license and the MIT license.  As a user of this code you may choose
    +to use it under either license.  As a contributor, you agree to allow your code
    +to be used under both.
    +
    +Full text of the relevant licenses is included below.
    +
    +==============================================================================
    +
    +University of Illinois/NCSA
    +Open Source License
    +
    +Copyright (c) 2009-2017 by the contributors listed in CREDITS.TXT
    +
    +All rights reserved.
    +
    +Developed by:
    +
    +    LLVM Team
    +
    +    University of Illinois at Urbana-Champaign
    +
    +    http://llvm.org
    +
    +Permission is hereby granted, free of charge, to any person obtaining a copy of
    +this software and associated documentation files (the "Software"), to deal with
    +the Software without restriction, including without limitation the rights to
    +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
    +of the Software, and to permit persons to whom the Software is furnished to do
    +so, subject to the following conditions:
    +
    +    * Redistributions of source code must retain the above copyright notice,
    +      this list of conditions and the following disclaimers.
    +
    +    * Redistributions in binary form must reproduce the above copyright notice,
    +      this list of conditions and the following disclaimers in the
    +      documentation and/or other materials provided with the distribution.
    +
    +    * Neither the names of the LLVM Team, University of Illinois at
    +      Urbana-Champaign, nor the names of its contributors may be used to
    +      endorse or promote products derived from this Software without specific
    +      prior written permission.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
    +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
    +CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
    +SOFTWARE.
    +
    +==============================================================================
    +
    +Copyright (c) 2009-2014 by the contributors listed in CREDITS.TXT
    +
    +Permission is hereby granted, free of charge, to any person obtaining a copy
    +of this software and associated documentation files (the "Software"), to deal
    +in the Software without restriction, including without limitation the rights
    +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    +copies of the Software, and to permit persons to whom the Software is
    +furnished to do so, subject to the following conditions:
    +
    +The above copyright notice and this permission notice shall be included in
    +all copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    +THE SOFTWARE.
    +
    +
    +
    + +
    +libusbx +homepage + + +
    +
    		  GNU LESSER GENERAL PUBLIC LICENSE
    +		       Version 2.1, February 1999
    +
    + Copyright (C) 1991, 1999 Free Software Foundation, Inc.
    + 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
    + Everyone is permitted to copy and distribute verbatim copies
    + of this license document, but changing it is not allowed.
    +
    +[This is the first released version of the Lesser GPL.  It also counts
    + as the successor of the GNU Library Public License, version 2, hence
    + the version number 2.1.]
    +
    +			    Preamble
    +
    +  The licenses for most software are designed to take away your
    +freedom to share and change it.  By contrast, the GNU General Public
    +Licenses are intended to guarantee your freedom to share and change
    +free software--to make sure the software is free for all its users.
    +
    +  This license, the Lesser General Public License, applies to some
    +specially designated software packages--typically libraries--of the
    +Free Software Foundation and other authors who decide to use it.  You
    +can use it too, but we suggest you first think carefully about whether
    +this license or the ordinary General Public License is the better
    +strategy to use in any particular case, based on the explanations below.
    +
    +  When we speak of free software, we are referring to freedom of use,
    +not price.  Our General Public Licenses are designed to make sure that
    +you have the freedom to distribute copies of free software (and charge
    +for this service if you wish); that you receive source code or can get
    +it if you want it; that you can change the software and use pieces of
    +it in new free programs; and that you are informed that you can do
    +these things.
    +
    +  To protect your rights, we need to make restrictions that forbid
    +distributors to deny you these rights or to ask you to surrender these
    +rights.  These restrictions translate to certain responsibilities for
    +you if you distribute copies of the library or if you modify it.
    +
    +  For example, if you distribute copies of the library, whether gratis
    +or for a fee, you must give the recipients all the rights that we gave
    +you.  You must make sure that they, too, receive or can get the source
    +code.  If you link other code with the library, you must provide
    +complete object files to the recipients, so that they can relink them
    +with the library after making changes to the library and recompiling
    +it.  And you must show them these terms so they know their rights.
    +
    +  We protect your rights with a two-step method: (1) we copyright the
    +library, and (2) we offer you this license, which gives you legal
    +permission to copy, distribute and/or modify the library.
    +
    +  To protect each distributor, we want to make it very clear that
    +there is no warranty for the free library.  Also, if the library is
    +modified by someone else and passed on, the recipients should know
    +that what they have is not the original version, so that the original
    +author's reputation will not be affected by problems that might be
    +introduced by others.
    +
    +  Finally, software patents pose a constant threat to the existence of
    +any free program.  We wish to make sure that a company cannot
    +effectively restrict the users of a free program by obtaining a
    +restrictive license from a patent holder.  Therefore, we insist that
    +any patent license obtained for a version of the library must be
    +consistent with the full freedom of use specified in this license.
    +
    +  Most GNU software, including some libraries, is covered by the
    +ordinary GNU General Public License.  This license, the GNU Lesser
    +General Public License, applies to certain designated libraries, and
    +is quite different from the ordinary General Public License.  We use
    +this license for certain libraries in order to permit linking those
    +libraries into non-free programs.
    +
    +  When a program is linked with a library, whether statically or using
    +a shared library, the combination of the two is legally speaking a
    +combined work, a derivative of the original library.  The ordinary
    +General Public License therefore permits such linking only if the
    +entire combination fits its criteria of freedom.  The Lesser General
    +Public License permits more lax criteria for linking other code with
    +the library.
    +
    +  We call this license the "Lesser" General Public License because it
    +does Less to protect the user's freedom than the ordinary General
    +Public License.  It also provides other free software developers Less
    +of an advantage over competing non-free programs.  These disadvantages
    +are the reason we use the ordinary General Public License for many
    +libraries.  However, the Lesser license provides advantages in certain
    +special circumstances.
    +
    +  For example, on rare occasions, there may be a special need to
    +encourage the widest possible use of a certain library, so that it becomes
    +a de-facto standard.  To achieve this, non-free programs must be
    +allowed to use the library.  A more frequent case is that a free
    +library does the same job as widely used non-free libraries.  In this
    +case, there is little to gain by limiting the free library to free
    +software only, so we use the Lesser General Public License.
    +
    +  In other cases, permission to use a particular library in non-free
    +programs enables a greater number of people to use a large body of
    +free software.  For example, permission to use the GNU C Library in
    +non-free programs enables many more people to use the whole GNU
    +operating system, as well as its variant, the GNU/Linux operating
    +system.
    +
    +  Although the Lesser General Public License is Less protective of the
    +users' freedom, it does ensure that the user of a program that is
    +linked with the Library has the freedom and the wherewithal to run
    +that program using a modified version of the Library.
    +
    +  The precise terms and conditions for copying, distribution and
    +modification follow.  Pay close attention to the difference between a
    +"work based on the library" and a "work that uses the library".  The
    +former contains code derived from the library, whereas the latter must
    +be combined with the library in order to run.
    +
    +		  GNU LESSER GENERAL PUBLIC LICENSE
    +   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
    +
    +  0. This License Agreement applies to any software library or other
    +program which contains a notice placed by the copyright holder or
    +other authorized party saying it may be distributed under the terms of
    +this Lesser General Public License (also called "this License").
    +Each licensee is addressed as "you".
    +
    +  A "library" means a collection of software functions and/or data
    +prepared so as to be conveniently linked with application programs
    +(which use some of those functions and data) to form executables.
    +
    +  The "Library", below, refers to any such software library or work
    +which has been distributed under these terms.  A "work based on the
    +Library" means either the Library or any derivative work under
    +copyright law: that is to say, a work containing the Library or a
    +portion of it, either verbatim or with modifications and/or translated
    +straightforwardly into another language.  (Hereinafter, translation is
    +included without limitation in the term "modification".)
    +
    +  "Source code" for a work means the preferred form of the work for
    +making modifications to it.  For a library, complete source code means
    +all the source code for all modules it contains, plus any associated
    +interface definition files, plus the scripts used to control compilation
    +and installation of the library.
    +
    +  Activities other than copying, distribution and modification are not
    +covered by this License; they are outside its scope.  The act of
    +running a program using the Library is not restricted, and output from
    +such a program is covered only if its contents constitute a work based
    +on the Library (independent of the use of the Library in a tool for
    +writing it).  Whether that is true depends on what the Library does
    +and what the program that uses the Library does.
    +  
    +  1. You may copy and distribute verbatim copies of the Library's
    +complete source code as you receive it, in any medium, provided that
    +you conspicuously and appropriately publish on each copy an
    +appropriate copyright notice and disclaimer of warranty; keep intact
    +all the notices that refer to this License and to the absence of any
    +warranty; and distribute a copy of this License along with the
    +Library.
    +
    +  You may charge a fee for the physical act of transferring a copy,
    +and you may at your option offer warranty protection in exchange for a
    +fee.
    +
    +  2. You may modify your copy or copies of the Library or any portion
    +of it, thus forming a work based on the Library, and copy and
    +distribute such modifications or work under the terms of Section 1
    +above, provided that you also meet all of these conditions:
    +
    +    a) The modified work must itself be a software library.
    +
    +    b) You must cause the files modified to carry prominent notices
    +    stating that you changed the files and the date of any change.
    +
    +    c) You must cause the whole of the work to be licensed at no
    +    charge to all third parties under the terms of this License.
    +
    +    d) If a facility in the modified Library refers to a function or a
    +    table of data to be supplied by an application program that uses
    +    the facility, other than as an argument passed when the facility
    +    is invoked, then you must make a good faith effort to ensure that,
    +    in the event an application does not supply such function or
    +    table, the facility still operates, and performs whatever part of
    +    its purpose remains meaningful.
    +
    +    (For example, a function in a library to compute square roots has
    +    a purpose that is entirely well-defined independent of the
    +    application.  Therefore, Subsection 2d requires that any
    +    application-supplied function or table used by this function must
    +    be optional: if the application does not supply it, the square
    +    root function must still compute square roots.)
    +
    +These requirements apply to the modified work as a whole.  If
    +identifiable sections of that work are not derived from the Library,
    +and can be reasonably considered independent and separate works in
    +themselves, then this License, and its terms, do not apply to those
    +sections when you distribute them as separate works.  But when you
    +distribute the same sections as part of a whole which is a work based
    +on the Library, the distribution of the whole must be on the terms of
    +this License, whose permissions for other licensees extend to the
    +entire whole, and thus to each and every part regardless of who wrote
    +it.
    +
    +Thus, it is not the intent of this section to claim rights or contest
    +your rights to work written entirely by you; rather, the intent is to
    +exercise the right to control the distribution of derivative or
    +collective works based on the Library.
    +
    +In addition, mere aggregation of another work not based on the Library
    +with the Library (or with a work based on the Library) on a volume of
    +a storage or distribution medium does not bring the other work under
    +the scope of this License.
    +
    +  3. You may opt to apply the terms of the ordinary GNU General Public
    +License instead of this License to a given copy of the Library.  To do
    +this, you must alter all the notices that refer to this License, so
    +that they refer to the ordinary GNU General Public License, version 2,
    +instead of to this License.  (If a newer version than version 2 of the
    +ordinary GNU General Public License has appeared, then you can specify
    +that version instead if you wish.)  Do not make any other change in
    +these notices.
    +
    +  Once this change is made in a given copy, it is irreversible for
    +that copy, so the ordinary GNU General Public License applies to all
    +subsequent copies and derivative works made from that copy.
    +
    +  This option is useful when you wish to copy part of the code of
    +the Library into a program that is not a library.
    +
    +  4. You may copy and distribute the Library (or a portion or
    +derivative of it, under Section 2) in object code or executable form
    +under the terms of Sections 1 and 2 above provided that you accompany
    +it with the complete corresponding machine-readable source code, which
    +must be distributed under the terms of Sections 1 and 2 above on a
    +medium customarily used for software interchange.
    +
    +  If distribution of object code is made by offering access to copy
    +from a designated place, then offering equivalent access to copy the
    +source code from the same place satisfies the requirement to
    +distribute the source code, even though third parties are not
    +compelled to copy the source along with the object code.
    +
    +  5. A program that contains no derivative of any portion of the
    +Library, but is designed to work with the Library by being compiled or
    +linked with it, is called a "work that uses the Library".  Such a
    +work, in isolation, is not a derivative work of the Library, and
    +therefore falls outside the scope of this License.
    +
    +  However, linking a "work that uses the Library" with the Library
    +creates an executable that is a derivative of the Library (because it
    +contains portions of the Library), rather than a "work that uses the
    +library".  The executable is therefore covered by this License.
    +Section 6 states terms for distribution of such executables.
    +
    +  When a "work that uses the Library" uses material from a header file
    +that is part of the Library, the object code for the work may be a
    +derivative work of the Library even though the source code is not.
    +Whether this is true is especially significant if the work can be
    +linked without the Library, or if the work is itself a library.  The
    +threshold for this to be true is not precisely defined by law.
    +
    +  If such an object file uses only numerical parameters, data
    +structure layouts and accessors, and small macros and small inline
    +functions (ten lines or less in length), then the use of the object
    +file is unrestricted, regardless of whether it is legally a derivative
    +work.  (Executables containing this object code plus portions of the
    +Library will still fall under Section 6.)
    +
    +  Otherwise, if the work is a derivative of the Library, you may
    +distribute the object code for the work under the terms of Section 6.
    +Any executables containing that work also fall under Section 6,
    +whether or not they are linked directly with the Library itself.
    +
    +  6. As an exception to the Sections above, you may also combine or
    +link a "work that uses the Library" with the Library to produce a
    +work containing portions of the Library, and distribute that work
    +under terms of your choice, provided that the terms permit
    +modification of the work for the customer's own use and reverse
    +engineering for debugging such modifications.
    +
    +  You must give prominent notice with each copy of the work that the
    +Library is used in it and that the Library and its use are covered by
    +this License.  You must supply a copy of this License.  If the work
    +during execution displays copyright notices, you must include the
    +copyright notice for the Library among them, as well as a reference
    +directing the user to the copy of this License.  Also, you must do one
    +of these things:
    +
    +    a) Accompany the work with the complete corresponding
    +    machine-readable source code for the Library including whatever
    +    changes were used in the work (which must be distributed under
    +    Sections 1 and 2 above); and, if the work is an executable linked
    +    with the Library, with the complete machine-readable "work that
    +    uses the Library", as object code and/or source code, so that the
    +    user can modify the Library and then relink to produce a modified
    +    executable containing the modified Library.  (It is understood
    +    that the user who changes the contents of definitions files in the
    +    Library will not necessarily be able to recompile the application
    +    to use the modified definitions.)
    +
    +    b) Use a suitable shared library mechanism for linking with the
    +    Library.  A suitable mechanism is one that (1) uses at run time a
    +    copy of the library already present on the user's computer system,
    +    rather than copying library functions into the executable, and (2)
    +    will operate properly with a modified version of the library, if
    +    the user installs one, as long as the modified version is
    +    interface-compatible with the version that the work was made with.
    +
    +    c) Accompany the work with a written offer, valid for at
    +    least three years, to give the same user the materials
    +    specified in Subsection 6a, above, for a charge no more
    +    than the cost of performing this distribution.
    +
    +    d) If distribution of the work is made by offering access to copy
    +    from a designated place, offer equivalent access to copy the above
    +    specified materials from the same place.
    +
    +    e) Verify that the user has already received a copy of these
    +    materials or that you have already sent this user a copy.
    +
    +  For an executable, the required form of the "work that uses the
    +Library" must include any data and utility programs needed for
    +reproducing the executable from it.  However, as a special exception,
    +the materials to be distributed need not include anything that is
    +normally distributed (in either source or binary form) with the major
    +components (compiler, kernel, and so on) of the operating system on
    +which the executable runs, unless that component itself accompanies
    +the executable.
    +
    +  It may happen that this requirement contradicts the license
    +restrictions of other proprietary libraries that do not normally
    +accompany the operating system.  Such a contradiction means you cannot
    +use both them and the Library together in an executable that you
    +distribute.
    +
    +  7. You may place library facilities that are a work based on the
    +Library side-by-side in a single library together with other library
    +facilities not covered by this License, and distribute such a combined
    +library, provided that the separate distribution of the work based on
    +the Library and of the other library facilities is otherwise
    +permitted, and provided that you do these two things:
    +
    +    a) Accompany the combined library with a copy of the same work
    +    based on the Library, uncombined with any other library
    +    facilities.  This must be distributed under the terms of the
    +    Sections above.
    +
    +    b) Give prominent notice with the combined library of the fact
    +    that part of it is a work based on the Library, and explaining
    +    where to find the accompanying uncombined form of the same work.
    +
    +  8. You may not copy, modify, sublicense, link with, or distribute
    +the Library except as expressly provided under this License.  Any
    +attempt otherwise to copy, modify, sublicense, link with, or
    +distribute the Library is void, and will automatically terminate your
    +rights under this License.  However, parties who have received copies,
    +or rights, from you under this License will not have their licenses
    +terminated so long as such parties remain in full compliance.
    +
    +  9. You are not required to accept this License, since you have not
    +signed it.  However, nothing else grants you permission to modify or
    +distribute the Library or its derivative works.  These actions are
    +prohibited by law if you do not accept this License.  Therefore, by
    +modifying or distributing the Library (or any work based on the
    +Library), you indicate your acceptance of this License to do so, and
    +all its terms and conditions for copying, distributing or modifying
    +the Library or works based on it.
    +
    +  10. Each time you redistribute the Library (or any work based on the
    +Library), the recipient automatically receives a license from the
    +original licensor to copy, distribute, link with or modify the Library
    +subject to these terms and conditions.  You may not impose any further
    +restrictions on the recipients' exercise of the rights granted herein.
    +You are not responsible for enforcing compliance by third parties with
    +this License.
    +
    +  11. If, as a consequence of a court judgment or allegation of patent
    +infringement or for any other reason (not limited to patent issues),
    +conditions are imposed on you (whether by court order, agreement or
    +otherwise) that contradict the conditions of this License, they do not
    +excuse you from the conditions of this License.  If you cannot
    +distribute so as to satisfy simultaneously your obligations under this
    +License and any other pertinent obligations, then as a consequence you
    +may not distribute the Library at all.  For example, if a patent
    +license would not permit royalty-free redistribution of the Library by
    +all those who receive copies directly or indirectly through you, then
    +the only way you could satisfy both it and this License would be to
    +refrain entirely from distribution of the Library.
    +
    +If any portion of this section is held invalid or unenforceable under any
    +particular circumstance, the balance of the section is intended to apply,
    +and the section as a whole is intended to apply in other circumstances.
    +
    +It is not the purpose of this section to induce you to infringe any
    +patents or other property right claims or to contest validity of any
    +such claims; this section has the sole purpose of protecting the
    +integrity of the free software distribution system which is
    +implemented by public license practices.  Many people have made
    +generous contributions to the wide range of software distributed
    +through that system in reliance on consistent application of that
    +system; it is up to the author/donor to decide if he or she is willing
    +to distribute software through any other system and a licensee cannot
    +impose that choice.
    +
    +This section is intended to make thoroughly clear what is believed to
    +be a consequence of the rest of this License.
    +
    +  12. If the distribution and/or use of the Library is restricted in
    +certain countries either by patents or by copyrighted interfaces, the
    +original copyright holder who places the Library under this License may add
    +an explicit geographical distribution limitation excluding those countries,
    +so that distribution is permitted only in or among countries not thus
    +excluded.  In such case, this License incorporates the limitation as if
    +written in the body of this License.
    +
    +  13. The Free Software Foundation may publish revised and/or new
    +versions of the Lesser General Public License from time to time.
    +Such new versions will be similar in spirit to the present version,
    +but may differ in detail to address new problems or concerns.
    +
    +Each version is given a distinguishing version number.  If the Library
    +specifies a version number of this License which applies to it and
    +"any later version", you have the option of following the terms and
    +conditions either of that version or of any later version published by
    +the Free Software Foundation.  If the Library does not specify a
    +license version number, you may choose any version ever published by
    +the Free Software Foundation.
    +
    +  14. If you wish to incorporate parts of the Library into other free
    +programs whose distribution conditions are incompatible with these,
    +write to the author to ask for permission.  For software which is
    +copyrighted by the Free Software Foundation, write to the Free
    +Software Foundation; we sometimes make exceptions for this.  Our
    +decision will be guided by the two goals of preserving the free status
    +of all derivatives of our free software and of promoting the sharing
    +and reuse of software generally.
    +
    +			    NO WARRANTY
    +
    +  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
    +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
    +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
    +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
    +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    +PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
    +LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
    +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
    +
    +  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
    +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
    +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
    +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
    +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
    +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
    +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
    +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
    +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
    +DAMAGES.
    +
    +		     END OF TERMS AND CONDITIONS
    +
    +           How to Apply These Terms to Your New Libraries
    +
    +  If you develop a new library, and you want it to be of the greatest
    +possible use to the public, we recommend making it free software that
    +everyone can redistribute and change.  You can do so by permitting
    +redistribution under these terms (or, alternatively, under the terms of the
    +ordinary General Public License).
    +
    +  To apply these terms, attach the following notices to the library.  It is
    +safest to attach them to the start of each source file to most effectively
    +convey the exclusion of warranty; and each file should have at least the
    +"copyright" line and a pointer to where the full notice is found.
    +
    +    <one line to give the library's name and a brief idea of what it does.>
    +    Copyright (C) <year>  <name of author>
    +
    +    This library is free software; you can redistribute it and/or
    +    modify it under the terms of the GNU Lesser General Public
    +    License as published by the Free Software Foundation; either
    +    version 2.1 of the License, or (at your option) any later version.
    +
    +    This library is distributed in the hope that it will be useful,
    +    but WITHOUT ANY WARRANTY; without even the implied warranty of
    +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    +    Lesser General Public License for more details.
    +
    +    You should have received a copy of the GNU Lesser General Public
    +    License along with this library; if not, write to the Free Software
    +    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
    +
    +Also add information on how to contact you by electronic and paper mail.
    +
    +You should also get your employer (if you work as a programmer) or your
    +school, if any, to sign a "copyright disclaimer" for the library, if
    +necessary.  Here is a sample; alter the names:
    +
    +  Yoyodyne, Inc., hereby disclaims all copyright interest in the
    +  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
    +
    +  <signature of Ty Coon>, 1 April 1990
    +  Ty Coon, President of Vice
    +
    +That's all there is to it!
    +
    +
    +
    +
    +
    + +
    +libvpx +homepage + + +
    +
    Copyright (c) 2010, The WebM Project authors. All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are
    +met:
    +
    +  * Redistributions of source code must retain the above copyright
    +    notice, this list of conditions and the following disclaimer.
    +
    +  * Redistributions in binary form must reproduce the above copyright
    +    notice, this list of conditions and the following disclaimer in
    +    the documentation and/or other materials provided with the
    +    distribution.
    +
    +  * Neither the name of Google, nor the WebM Project, nor the names
    +    of its contributors may be used to endorse or promote products
    +    derived from this software without specific prior written
    +    permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    +
    + +
    +libxml +homepage + + +
    +
    Except where otherwise noted in the source code (e.g. the files hash.c,
    +list.c and the trio files, which are covered by a similar licence but
    +with different Copyright notices) all the files are:
    +
    + Copyright (C) 1998-2012 Daniel Veillard.  All Rights Reserved.
    +
    +Permission is hereby granted, free of charge, to any person obtaining a copy
    +of this software and associated documentation files (the "Software"), to deal
    +in the Software without restriction, including without limitation the rights
    +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    +copies of the Software, and to permit persons to whom the Software is fur-
    +nished to do so, subject to the following conditions:
    +
    +The above copyright notice and this permission notice shall be included in
    +all copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FIT-
    +NESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
    +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    +THE SOFTWARE.
    +
    +
    +
    + +
    +libxslt +homepage + + +
    +
    Licence for libxslt except libexslt
    +----------------------------------------------------------------------
    + Copyright (C) 2001-2002 Daniel Veillard.  All Rights Reserved.
    +
    +Permission is hereby granted, free of charge, to any person obtaining a copy
    +of this software and associated documentation files (the "Software"), to deal
    +in the Software without restriction, including without limitation the rights
    +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    +copies of the Software, and to permit persons to whom the Software is fur-
    +nished to do so, subject to the following conditions:
    +
    +The above copyright notice and this permission notice shall be included in
    +all copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FIT-
    +NESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
    +DANIEL VEILLARD BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
    +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CON-
    +NECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +
    +Except as contained in this notice, the name of Daniel Veillard shall not
    +be used in advertising or otherwise to promote the sale, use or other deal-
    +ings in this Software without prior written authorization from him.
    +
    +----------------------------------------------------------------------
    +
    +Licence for libexslt
    +----------------------------------------------------------------------
    + Copyright (C) 2001-2002 Thomas Broyer, Charlie Bozeman and Daniel Veillard.
    + All Rights Reserved.
    +
    +Permission is hereby granted, free of charge, to any person obtaining a copy
    +of this software and associated documentation files (the "Software"), to deal
    +in the Software without restriction, including without limitation the rights
    +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    +copies of the Software, and to permit persons to whom the Software is fur-
    +nished to do so, subject to the following conditions:
    +
    +The above copyright notice and this permission notice shall be included in
    +all copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FIT-
    +NESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
    +AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
    +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CON-
    +NECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +
    +Except as contained in this notice, the name of the authors shall not
    +be used in advertising or otherwise to promote the sale, use or other deal-
    +ings in this Software without prior written authorization from him.
    +----------------------------------------------------------------------
    +
    +
    +
    + +
    +libyuv +homepage + + +
    +
    Copyright 2011 The LibYuv Project Authors. All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are
    +met:
    +
    +  * Redistributions of source code must retain the above copyright
    +    notice, this list of conditions and the following disclaimer.
    +
    +  * Redistributions in binary form must reproduce the above copyright
    +    notice, this list of conditions and the following disclaimer in
    +    the documentation and/or other materials provided with the
    +    distribution.
    +
    +  * Neither the name of Google nor the names of its contributors may
    +    be used to endorse or promote products derived from this software
    +    without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +logilab +homepage + + +
    +
    		    GNU GENERAL PUBLIC LICENSE
    +		       Version 2, June 1991
    +
    + Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
    + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
    + Everyone is permitted to copy and distribute verbatim copies
    + of this license document, but changing it is not allowed.
    +
    +			    Preamble
    +
    +  The licenses for most software are designed to take away your
    +freedom to share and change it.  By contrast, the GNU General Public
    +License is intended to guarantee your freedom to share and change free
    +software--to make sure the software is free for all its users.  This
    +General Public License applies to most of the Free Software
    +Foundation's software and to any other program whose authors commit to
    +using it.  (Some other Free Software Foundation software is covered by
    +the GNU Lesser General Public License instead.)  You can apply it to
    +your programs, too.
    +
    +  When we speak of free software, we are referring to freedom, not
    +price.  Our General Public Licenses are designed to make sure that you
    +have the freedom to distribute copies of free software (and charge for
    +this service if you wish), that you receive source code or can get it
    +if you want it, that you can change the software or use pieces of it
    +in new free programs; and that you know you can do these things.
    +
    +  To protect your rights, we need to make restrictions that forbid
    +anyone to deny you these rights or to ask you to surrender the rights.
    +These restrictions translate to certain responsibilities for you if you
    +distribute copies of the software, or if you modify it.
    +
    +  For example, if you distribute copies of such a program, whether
    +gratis or for a fee, you must give the recipients all the rights that
    +you have.  You must make sure that they, too, receive or can get the
    +source code.  And you must show them these terms so they know their
    +rights.
    +
    +  We protect your rights with two steps: (1) copyright the software, and
    +(2) offer you this license which gives you legal permission to copy,
    +distribute and/or modify the software.
    +
    +  Also, for each author's protection and ours, we want to make certain
    +that everyone understands that there is no warranty for this free
    +software.  If the software is modified by someone else and passed on, we
    +want its recipients to know that what they have is not the original, so
    +that any problems introduced by others will not reflect on the original
    +authors' reputations.
    +
    +  Finally, any free program is threatened constantly by software
    +patents.  We wish to avoid the danger that redistributors of a free
    +program will individually obtain patent licenses, in effect making the
    +program proprietary.  To prevent this, we have made it clear that any
    +patent must be licensed for everyone's free use or not licensed at all.
    +
    +  The precise terms and conditions for copying, distribution and
    +modification follow.
    +
    +		    GNU GENERAL PUBLIC LICENSE
    +   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
    +
    +  0. This License applies to any program or other work which contains
    +a notice placed by the copyright holder saying it may be distributed
    +under the terms of this General Public License.  The "Program", below,
    +refers to any such program or work, and a "work based on the Program"
    +means either the Program or any derivative work under copyright law:
    +that is to say, a work containing the Program or a portion of it,
    +either verbatim or with modifications and/or translated into another
    +language.  (Hereinafter, translation is included without limitation in
    +the term "modification".)  Each licensee is addressed as "you".
    +
    +Activities other than copying, distribution and modification are not
    +covered by this License; they are outside its scope.  The act of
    +running the Program is not restricted, and the output from the Program
    +is covered only if its contents constitute a work based on the
    +Program (independent of having been made by running the Program).
    +Whether that is true depends on what the Program does.
    +
    +  1. You may copy and distribute verbatim copies of the Program's
    +source code as you receive it, in any medium, provided that you
    +conspicuously and appropriately publish on each copy an appropriate
    +copyright notice and disclaimer of warranty; keep intact all the
    +notices that refer to this License and to the absence of any warranty;
    +and give any other recipients of the Program a copy of this License
    +along with the Program.
    +
    +You may charge a fee for the physical act of transferring a copy, and
    +you may at your option offer warranty protection in exchange for a fee.
    +
    +  2. You may modify your copy or copies of the Program or any portion
    +of it, thus forming a work based on the Program, and copy and
    +distribute such modifications or work under the terms of Section 1
    +above, provided that you also meet all of these conditions:
    +
    +    a) You must cause the modified files to carry prominent notices
    +    stating that you changed the files and the date of any change.
    +
    +    b) You must cause any work that you distribute or publish, that in
    +    whole or in part contains or is derived from the Program or any
    +    part thereof, to be licensed as a whole at no charge to all third
    +    parties under the terms of this License.
    +
    +    c) If the modified program normally reads commands interactively
    +    when run, you must cause it, when started running for such
    +    interactive use in the most ordinary way, to print or display an
    +    announcement including an appropriate copyright notice and a
    +    notice that there is no warranty (or else, saying that you provide
    +    a warranty) and that users may redistribute the program under
    +    these conditions, and telling the user how to view a copy of this
    +    License.  (Exception: if the Program itself is interactive but
    +    does not normally print such an announcement, your work based on
    +    the Program is not required to print an announcement.)
    +
    +These requirements apply to the modified work as a whole.  If
    +identifiable sections of that work are not derived from the Program,
    +and can be reasonably considered independent and separate works in
    +themselves, then this License, and its terms, do not apply to those
    +sections when you distribute them as separate works.  But when you
    +distribute the same sections as part of a whole which is a work based
    +on the Program, the distribution of the whole must be on the terms of
    +this License, whose permissions for other licensees extend to the
    +entire whole, and thus to each and every part regardless of who wrote it.
    +
    +Thus, it is not the intent of this section to claim rights or contest
    +your rights to work written entirely by you; rather, the intent is to
    +exercise the right to control the distribution of derivative or
    +collective works based on the Program.
    +
    +In addition, mere aggregation of another work not based on the Program
    +with the Program (or with a work based on the Program) on a volume of
    +a storage or distribution medium does not bring the other work under
    +the scope of this License.
    +
    +  3. You may copy and distribute the Program (or a work based on it,
    +under Section 2) in object code or executable form under the terms of
    +Sections 1 and 2 above provided that you also do one of the following:
    +
    +    a) Accompany it with the complete corresponding machine-readable
    +    source code, which must be distributed under the terms of Sections
    +    1 and 2 above on a medium customarily used for software interchange; or,
    +
    +    b) Accompany it with a written offer, valid for at least three
    +    years, to give any third party, for a charge no more than your
    +    cost of physically performing source distribution, a complete
    +    machine-readable copy of the corresponding source code, to be
    +    distributed under the terms of Sections 1 and 2 above on a medium
    +    customarily used for software interchange; or,
    +
    +    c) Accompany it with the information you received as to the offer
    +    to distribute corresponding source code.  (This alternative is
    +    allowed only for noncommercial distribution and only if you
    +    received the program in object code or executable form with such
    +    an offer, in accord with Subsection b above.)
    +
    +The source code for a work means the preferred form of the work for
    +making modifications to it.  For an executable work, complete source
    +code means all the source code for all modules it contains, plus any
    +associated interface definition files, plus the scripts used to
    +control compilation and installation of the executable.  However, as a
    +special exception, the source code distributed need not include
    +anything that is normally distributed (in either source or binary
    +form) with the major components (compiler, kernel, and so on) of the
    +operating system on which the executable runs, unless that component
    +itself accompanies the executable.
    +
    +If distribution of executable or object code is made by offering
    +access to copy from a designated place, then offering equivalent
    +access to copy the source code from the same place counts as
    +distribution of the source code, even though third parties are not
    +compelled to copy the source along with the object code.
    +
    +  4. You may not copy, modify, sublicense, or distribute the Program
    +except as expressly provided under this License.  Any attempt
    +otherwise to copy, modify, sublicense or distribute the Program is
    +void, and will automatically terminate your rights under this License.
    +However, parties who have received copies, or rights, from you under
    +this License will not have their licenses terminated so long as such
    +parties remain in full compliance.
    +
    +  5. You are not required to accept this License, since you have not
    +signed it.  However, nothing else grants you permission to modify or
    +distribute the Program or its derivative works.  These actions are
    +prohibited by law if you do not accept this License.  Therefore, by
    +modifying or distributing the Program (or any work based on the
    +Program), you indicate your acceptance of this License to do so, and
    +all its terms and conditions for copying, distributing or modifying
    +the Program or works based on it.
    +
    +  6. Each time you redistribute the Program (or any work based on the
    +Program), the recipient automatically receives a license from the
    +original licensor to copy, distribute or modify the Program subject to
    +these terms and conditions.  You may not impose any further
    +restrictions on the recipients' exercise of the rights granted herein.
    +You are not responsible for enforcing compliance by third parties to
    +this License.
    +
    +  7. If, as a consequence of a court judgment or allegation of patent
    +infringement or for any other reason (not limited to patent issues),
    +conditions are imposed on you (whether by court order, agreement or
    +otherwise) that contradict the conditions of this License, they do not
    +excuse you from the conditions of this License.  If you cannot
    +distribute so as to satisfy simultaneously your obligations under this
    +License and any other pertinent obligations, then as a consequence you
    +may not distribute the Program at all.  For example, if a patent
    +license would not permit royalty-free redistribution of the Program by
    +all those who receive copies directly or indirectly through you, then
    +the only way you could satisfy both it and this License would be to
    +refrain entirely from distribution of the Program.
    +
    +If any portion of this section is held invalid or unenforceable under
    +any particular circumstance, the balance of the section is intended to
    +apply and the section as a whole is intended to apply in other
    +circumstances.
    +
    +It is not the purpose of this section to induce you to infringe any
    +patents or other property right claims or to contest validity of any
    +such claims; this section has the sole purpose of protecting the
    +integrity of the free software distribution system, which is
    +implemented by public license practices.  Many people have made
    +generous contributions to the wide range of software distributed
    +through that system in reliance on consistent application of that
    +system; it is up to the author/donor to decide if he or she is willing
    +to distribute software through any other system and a licensee cannot
    +impose that choice.
    +
    +This section is intended to make thoroughly clear what is believed to
    +be a consequence of the rest of this License.
    +
    +  8. If the distribution and/or use of the Program is restricted in
    +certain countries either by patents or by copyrighted interfaces, the
    +original copyright holder who places the Program under this License
    +may add an explicit geographical distribution limitation excluding
    +those countries, so that distribution is permitted only in or among
    +countries not thus excluded.  In such case, this License incorporates
    +the limitation as if written in the body of this License.
    +
    +  9. The Free Software Foundation may publish revised and/or new versions
    +of the General Public License from time to time.  Such new versions will
    +be similar in spirit to the present version, but may differ in detail to
    +address new problems or concerns.
    +
    +Each version is given a distinguishing version number.  If the Program
    +specifies a version number of this License which applies to it and "any
    +later version", you have the option of following the terms and conditions
    +either of that version or of any later version published by the Free
    +Software Foundation.  If the Program does not specify a version number of
    +this License, you may choose any version ever published by the Free Software
    +Foundation.
    +
    +  10. If you wish to incorporate parts of the Program into other free
    +programs whose distribution conditions are different, write to the author
    +to ask for permission.  For software which is copyrighted by the Free
    +Software Foundation, write to the Free Software Foundation; we sometimes
    +make exceptions for this.  Our decision will be guided by the two goals
    +of preserving the free status of all derivatives of our free software and
    +of promoting the sharing and reuse of software generally.
    +
    +			    NO WARRANTY
    +
    +  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
    +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
    +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
    +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
    +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
    +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
    +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
    +REPAIR OR CORRECTION.
    +
    +  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
    +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
    +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
    +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
    +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
    +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
    +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
    +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
    +POSSIBILITY OF SUCH DAMAGES.
    +
    +		     END OF TERMS AND CONDITIONS
    +
    +	    How to Apply These Terms to Your New Programs
    +
    +  If you develop a new program, and you want it to be of the greatest
    +possible use to the public, the best way to achieve this is to make it
    +free software which everyone can redistribute and change under these terms.
    +
    +  To do so, attach the following notices to the program.  It is safest
    +to attach them to the start of each source file to most effectively
    +convey the exclusion of warranty; and each file should have at least
    +the "copyright" line and a pointer to where the full notice is found.
    +
    +    <one line to give the program's name and a brief idea of what it does.>
    +    Copyright (C) <year>  <name of author>
    +
    +    This program is free software; you can redistribute it and/or modify
    +    it under the terms of the GNU General Public License as published by
    +    the Free Software Foundation; either version 2 of the License, or
    +    (at your option) any later version.
    +
    +    This program is distributed in the hope that it will be useful,
    +    but WITHOUT ANY WARRANTY; without even the implied warranty of
    +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    +    GNU General Public License for more details.
    +
    +    You should have received a copy of the GNU General Public License along
    +    with this program; if not, write to the Free Software Foundation, Inc.,
    +    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
    +
    +Also add information on how to contact you by electronic and paper mail.
    +
    +If the program is interactive, make it output a short notice like this
    +when it starts in an interactive mode:
    +
    +    Gnomovision version 69, Copyright (C) year name of author
    +    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
    +    This is free software, and you are welcome to redistribute it
    +    under certain conditions; type `show c' for details.
    +
    +The hypothetical commands `show w' and `show c' should show the appropriate
    +parts of the General Public License.  Of course, the commands you use may
    +be called something other than `show w' and `show c'; they could even be
    +mouse-clicks or menu items--whatever suits your program.
    +
    +You should also get your employer (if you work as a programmer) or your
    +school, if any, to sign a "copyright disclaimer" for the program, if
    +necessary.  Here is a sample; alter the names:
    +
    +  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
    +  `Gnomovision' (which makes passes at compilers) written by James Hacker.
    +
    +  <signature of Ty Coon>, 1 April 1989
    +  Ty Coon, President of Vice
    +
    +This General Public License does not permit incorporating your program into
    +proprietary programs.  If your program is a subroutine library, you may
    +consider it more useful to permit linking proprietary applications with the
    +library.  If this is what you want to do, use the GNU Lesser General
    +Public License instead of this License.
    +
    +
    +
    + +
    +LZMA SDK +homepage + + +
    +
    LZMA SDK is placed in the public domain.
    +
    +
    +
    + +
    +mach_override +homepage + + +
    +
    Copyright (c) 2003-2012 Jonathan 'Wolf' Rentzsch: http://rentzsch.com
    +Some rights reserved: http://opensource.org/licenses/mit
    +
    +mach_override includes a copy of libudis86, licensed as follows:
    +
    +Copyright (c) 2002-2009 Vivek Thampi
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without modification, 
    +are permitted provided that the following conditions are met:
    +
    +    * Redistributions of source code must retain the above copyright notice, 
    +      this list of conditions and the following disclaimer.
    +    * Redistributions in binary form must reproduce the above copyright notice, 
    +      this list of conditions and the following disclaimer in the documentation 
    +      and/or other materials provided with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
    +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
    +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR 
    +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
    +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
    +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
    +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 
    +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +Material Components for iOS +homepage + + +
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +
    + +
    +Material Design Icons +homepage + + +
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    + +
    +Material Font Disk Loader iOS +homepage + + +
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +
    + +
    +Material Internationalization for iOS +homepage + + +
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +
    + +
    +Material Roboto Font Loader iOS +homepage + + +
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +
    + +
    +Material Sprited Animation View +homepage + + +
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    + +
    +Material Text Accessibility iOS +homepage + + +
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +
    + +
    +MediaController Android sample. +homepage + + +
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +
    + +
    +mesa +homepage + + +
    +
    The default Mesa license is as follows:
    +
    +Copyright (C) 1999-2007  Brian Paul   All Rights Reserved.
    +
    +Permission is hereby granted, free of charge, to any person obtaining a
    +copy of this software and associated documentation files (the "Software"),
    +to deal in the Software without restriction, including without limitation
    +the rights to use, copy, modify, merge, publish, distribute, sublicense,
    +and/or sell copies of the Software, and to permit persons to whom the
    +Software is furnished to do so, subject to the following conditions:
    +
    +The above copyright notice and this permission notice shall be included
    +in all copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
    +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
    +BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
    +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
    +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +
    +
    +
    +Some parts of Mesa are copyrighted under the GNU LGPL.  See the
    +Mesa/docs/COPYRIGHT file for details.
    +
    +The following is the standard GNU copyright file.
    +----------------------------------------------------------------------
    +
    +
    +		  GNU LIBRARY GENERAL PUBLIC LICENSE
    +		       Version 2, June 1991
    +
    + Copyright (C) 1991 Free Software Foundation, Inc.
    +                    675 Mass Ave, Cambridge, MA 02139, USA
    + Everyone is permitted to copy and distribute verbatim copies
    + of this license document, but changing it is not allowed.
    +
    +[This is the first released version of the library GPL.  It is
    + numbered 2 because it goes with version 2 of the ordinary GPL.]
    +
    +			    Preamble
    +
    +  The licenses for most software are designed to take away your
    +freedom to share and change it.  By contrast, the GNU General Public
    +Licenses are intended to guarantee your freedom to share and change
    +free software--to make sure the software is free for all its users.
    +
    +  This license, the Library General Public License, applies to some
    +specially designated Free Software Foundation software, and to any
    +other libraries whose authors decide to use it.  You can use it for
    +your libraries, too.
    +
    +  When we speak of free software, we are referring to freedom, not
    +price.  Our General Public Licenses are designed to make sure that you
    +have the freedom to distribute copies of free software (and charge for
    +this service if you wish), that you receive source code or can get it
    +if you want it, that you can change the software or use pieces of it
    +in new free programs; and that you know you can do these things.
    +
    +  To protect your rights, we need to make restrictions that forbid
    +anyone to deny you these rights or to ask you to surrender the rights.
    +These restrictions translate to certain responsibilities for you if
    +you distribute copies of the library, or if you modify it.
    +
    +  For example, if you distribute copies of the library, whether gratis
    +or for a fee, you must give the recipients all the rights that we gave
    +you.  You must make sure that they, too, receive or can get the source
    +code.  If you link a program with the library, you must provide
    +complete object files to the recipients so that they can relink them
    +with the library, after making changes to the library and recompiling
    +it.  And you must show them these terms so they know their rights.
    +
    +  Our method of protecting your rights has two steps: (1) copyright
    +the library, and (2) offer you this license which gives you legal
    +permission to copy, distribute and/or modify the library.
    +
    +  Also, for each distributor's protection, we want to make certain
    +that everyone understands that there is no warranty for this free
    +library.  If the library is modified by someone else and passed on, we
    +want its recipients to know that what they have is not the original
    +version, so that any problems introduced by others will not reflect on
    +the original authors' reputations.
    +
    +  Finally, any free program is threatened constantly by software
    +patents.  We wish to avoid the danger that companies distributing free
    +software will individually obtain patent licenses, thus in effect
    +transforming the program into proprietary software.  To prevent this,
    +we have made it clear that any patent must be licensed for everyone's
    +free use or not licensed at all.
    +
    +  Most GNU software, including some libraries, is covered by the ordinary
    +GNU General Public License, which was designed for utility programs.  This
    +license, the GNU Library General Public License, applies to certain
    +designated libraries.  This license is quite different from the ordinary
    +one; be sure to read it in full, and don't assume that anything in it is
    +the same as in the ordinary license.
    +
    +  The reason we have a separate public license for some libraries is that
    +they blur the distinction we usually make between modifying or adding to a
    +program and simply using it.  Linking a program with a library, without
    +changing the library, is in some sense simply using the library, and is
    +analogous to running a utility program or application program.  However, in
    +a textual and legal sense, the linked executable is a combined work, a
    +derivative of the original library, and the ordinary General Public License
    +treats it as such.
    +
    +  Because of this blurred distinction, using the ordinary General
    +Public License for libraries did not effectively promote software
    +sharing, because most developers did not use the libraries.  We
    +concluded that weaker conditions might promote sharing better.
    +
    +  However, unrestricted linking of non-free programs would deprive the
    +users of those programs of all benefit from the free status of the
    +libraries themselves.  This Library General Public License is intended to
    +permit developers of non-free programs to use free libraries, while
    +preserving your freedom as a user of such programs to change the free
    +libraries that are incorporated in them.  (We have not seen how to achieve
    +this as regards changes in header files, but we have achieved it as regards
    +changes in the actual functions of the Library.)  The hope is that this
    +will lead to faster development of free libraries.
    +
    +  The precise terms and conditions for copying, distribution and
    +modification follow.  Pay close attention to the difference between a
    +"work based on the library" and a "work that uses the library".  The
    +former contains code derived from the library, while the latter only
    +works together with the library.
    +
    +  Note that it is possible for a library to be covered by the ordinary
    +General Public License rather than by this special one.
    +
    +		  GNU LIBRARY GENERAL PUBLIC LICENSE
    +   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
    +
    +  0. This License Agreement applies to any software library which
    +contains a notice placed by the copyright holder or other authorized
    +party saying it may be distributed under the terms of this Library
    +General Public License (also called "this License").  Each licensee is
    +addressed as "you".
    +
    +  A "library" means a collection of software functions and/or data
    +prepared so as to be conveniently linked with application programs
    +(which use some of those functions and data) to form executables.
    +
    +  The "Library", below, refers to any such software library or work
    +which has been distributed under these terms.  A "work based on the
    +Library" means either the Library or any derivative work under
    +copyright law: that is to say, a work containing the Library or a
    +portion of it, either verbatim or with modifications and/or translated
    +straightforwardly into another language.  (Hereinafter, translation is
    +included without limitation in the term "modification".)
    +
    +  "Source code" for a work means the preferred form of the work for
    +making modifications to it.  For a library, complete source code means
    +all the source code for all modules it contains, plus any associated
    +interface definition files, plus the scripts used to control compilation
    +and installation of the library.
    +
    +  Activities other than copying, distribution and modification are not
    +covered by this License; they are outside its scope.  The act of
    +running a program using the Library is not restricted, and output from
    +such a program is covered only if its contents constitute a work based
    +on the Library (independent of the use of the Library in a tool for
    +writing it).  Whether that is true depends on what the Library does
    +and what the program that uses the Library does.
    +  
    +  1. You may copy and distribute verbatim copies of the Library's
    +complete source code as you receive it, in any medium, provided that
    +you conspicuously and appropriately publish on each copy an
    +appropriate copyright notice and disclaimer of warranty; keep intact
    +all the notices that refer to this License and to the absence of any
    +warranty; and distribute a copy of this License along with the
    +Library.
    +
    +  You may charge a fee for the physical act of transferring a copy,
    +and you may at your option offer warranty protection in exchange for a
    +fee.
    +
    +  2. You may modify your copy or copies of the Library or any portion
    +of it, thus forming a work based on the Library, and copy and
    +distribute such modifications or work under the terms of Section 1
    +above, provided that you also meet all of these conditions:
    +
    +    a) The modified work must itself be a software library.
    +
    +    b) You must cause the files modified to carry prominent notices
    +    stating that you changed the files and the date of any change.
    +
    +    c) You must cause the whole of the work to be licensed at no
    +    charge to all third parties under the terms of this License.
    +
    +    d) If a facility in the modified Library refers to a function or a
    +    table of data to be supplied by an application program that uses
    +    the facility, other than as an argument passed when the facility
    +    is invoked, then you must make a good faith effort to ensure that,
    +    in the event an application does not supply such function or
    +    table, the facility still operates, and performs whatever part of
    +    its purpose remains meaningful.
    +
    +    (For example, a function in a library to compute square roots has
    +    a purpose that is entirely well-defined independent of the
    +    application.  Therefore, Subsection 2d requires that any
    +    application-supplied function or table used by this function must
    +    be optional: if the application does not supply it, the square
    +    root function must still compute square roots.)
    +
    +These requirements apply to the modified work as a whole.  If
    +identifiable sections of that work are not derived from the Library,
    +and can be reasonably considered independent and separate works in
    +themselves, then this License, and its terms, do not apply to those
    +sections when you distribute them as separate works.  But when you
    +distribute the same sections as part of a whole which is a work based
    +on the Library, the distribution of the whole must be on the terms of
    +this License, whose permissions for other licensees extend to the
    +entire whole, and thus to each and every part regardless of who wrote
    +it.
    +
    +Thus, it is not the intent of this section to claim rights or contest
    +your rights to work written entirely by you; rather, the intent is to
    +exercise the right to control the distribution of derivative or
    +collective works based on the Library.
    +
    +In addition, mere aggregation of another work not based on the Library
    +with the Library (or with a work based on the Library) on a volume of
    +a storage or distribution medium does not bring the other work under
    +the scope of this License.
    +
    +  3. You may opt to apply the terms of the ordinary GNU General Public
    +License instead of this License to a given copy of the Library.  To do
    +this, you must alter all the notices that refer to this License, so
    +that they refer to the ordinary GNU General Public License, version 2,
    +instead of to this License.  (If a newer version than version 2 of the
    +ordinary GNU General Public License has appeared, then you can specify
    +that version instead if you wish.)  Do not make any other change in
    +these notices.
    +
    +  Once this change is made in a given copy, it is irreversible for
    +that copy, so the ordinary GNU General Public License applies to all
    +subsequent copies and derivative works made from that copy.
    +
    +  This option is useful when you wish to copy part of the code of
    +the Library into a program that is not a library.
    +
    +  4. You may copy and distribute the Library (or a portion or
    +derivative of it, under Section 2) in object code or executable form
    +under the terms of Sections 1 and 2 above provided that you accompany
    +it with the complete corresponding machine-readable source code, which
    +must be distributed under the terms of Sections 1 and 2 above on a
    +medium customarily used for software interchange.
    +
    +  If distribution of object code is made by offering access to copy
    +from a designated place, then offering equivalent access to copy the
    +source code from the same place satisfies the requirement to
    +distribute the source code, even though third parties are not
    +compelled to copy the source along with the object code.
    +
    +  5. A program that contains no derivative of any portion of the
    +Library, but is designed to work with the Library by being compiled or
    +linked with it, is called a "work that uses the Library".  Such a
    +work, in isolation, is not a derivative work of the Library, and
    +therefore falls outside the scope of this License.
    +
    +  However, linking a "work that uses the Library" with the Library
    +creates an executable that is a derivative of the Library (because it
    +contains portions of the Library), rather than a "work that uses the
    +library".  The executable is therefore covered by this License.
    +Section 6 states terms for distribution of such executables.
    +
    +  When a "work that uses the Library" uses material from a header file
    +that is part of the Library, the object code for the work may be a
    +derivative work of the Library even though the source code is not.
    +Whether this is true is especially significant if the work can be
    +linked without the Library, or if the work is itself a library.  The
    +threshold for this to be true is not precisely defined by law.
    +
    +  If such an object file uses only numerical parameters, data
    +structure layouts and accessors, and small macros and small inline
    +functions (ten lines or less in length), then the use of the object
    +file is unrestricted, regardless of whether it is legally a derivative
    +work.  (Executables containing this object code plus portions of the
    +Library will still fall under Section 6.)
    +
    +  Otherwise, if the work is a derivative of the Library, you may
    +distribute the object code for the work under the terms of Section 6.
    +Any executables containing that work also fall under Section 6,
    +whether or not they are linked directly with the Library itself.
    +
    +  6. As an exception to the Sections above, you may also compile or
    +link a "work that uses the Library" with the Library to produce a
    +work containing portions of the Library, and distribute that work
    +under terms of your choice, provided that the terms permit
    +modification of the work for the customer's own use and reverse
    +engineering for debugging such modifications.
    +
    +  You must give prominent notice with each copy of the work that the
    +Library is used in it and that the Library and its use are covered by
    +this License.  You must supply a copy of this License.  If the work
    +during execution displays copyright notices, you must include the
    +copyright notice for the Library among them, as well as a reference
    +directing the user to the copy of this License.  Also, you must do one
    +of these things:
    +
    +    a) Accompany the work with the complete corresponding
    +    machine-readable source code for the Library including whatever
    +    changes were used in the work (which must be distributed under
    +    Sections 1 and 2 above); and, if the work is an executable linked
    +    with the Library, with the complete machine-readable "work that
    +    uses the Library", as object code and/or source code, so that the
    +    user can modify the Library and then relink to produce a modified
    +    executable containing the modified Library.  (It is understood
    +    that the user who changes the contents of definitions files in the
    +    Library will not necessarily be able to recompile the application
    +    to use the modified definitions.)
    +
    +    b) Accompany the work with a written offer, valid for at
    +    least three years, to give the same user the materials
    +    specified in Subsection 6a, above, for a charge no more
    +    than the cost of performing this distribution.
    +
    +    c) If distribution of the work is made by offering access to copy
    +    from a designated place, offer equivalent access to copy the above
    +    specified materials from the same place.
    +
    +    d) Verify that the user has already received a copy of these
    +    materials or that you have already sent this user a copy.
    +
    +  For an executable, the required form of the "work that uses the
    +Library" must include any data and utility programs needed for
    +reproducing the executable from it.  However, as a special exception,
    +the source code distributed need not include anything that is normally
    +distributed (in either source or binary form) with the major
    +components (compiler, kernel, and so on) of the operating system on
    +which the executable runs, unless that component itself accompanies
    +the executable.
    +
    +  It may happen that this requirement contradicts the license
    +restrictions of other proprietary libraries that do not normally
    +accompany the operating system.  Such a contradiction means you cannot
    +use both them and the Library together in an executable that you
    +distribute.
    +
    +  7. You may place library facilities that are a work based on the
    +Library side-by-side in a single library together with other library
    +facilities not covered by this License, and distribute such a combined
    +library, provided that the separate distribution of the work based on
    +the Library and of the other library facilities is otherwise
    +permitted, and provided that you do these two things:
    +
    +    a) Accompany the combined library with a copy of the same work
    +    based on the Library, uncombined with any other library
    +    facilities.  This must be distributed under the terms of the
    +    Sections above.
    +
    +    b) Give prominent notice with the combined library of the fact
    +    that part of it is a work based on the Library, and explaining
    +    where to find the accompanying uncombined form of the same work.
    +
    +  8. You may not copy, modify, sublicense, link with, or distribute
    +the Library except as expressly provided under this License.  Any
    +attempt otherwise to copy, modify, sublicense, link with, or
    +distribute the Library is void, and will automatically terminate your
    +rights under this License.  However, parties who have received copies,
    +or rights, from you under this License will not have their licenses
    +terminated so long as such parties remain in full compliance.
    +
    +  9. You are not required to accept this License, since you have not
    +signed it.  However, nothing else grants you permission to modify or
    +distribute the Library or its derivative works.  These actions are
    +prohibited by law if you do not accept this License.  Therefore, by
    +modifying or distributing the Library (or any work based on the
    +Library), you indicate your acceptance of this License to do so, and
    +all its terms and conditions for copying, distributing or modifying
    +the Library or works based on it.
    +
    +  10. Each time you redistribute the Library (or any work based on the
    +Library), the recipient automatically receives a license from the
    +original licensor to copy, distribute, link with or modify the Library
    +subject to these terms and conditions.  You may not impose any further
    +restrictions on the recipients' exercise of the rights granted herein.
    +You are not responsible for enforcing compliance by third parties to
    +this License.
    +
    +  11. If, as a consequence of a court judgment or allegation of patent
    +infringement or for any other reason (not limited to patent issues),
    +conditions are imposed on you (whether by court order, agreement or
    +otherwise) that contradict the conditions of this License, they do not
    +excuse you from the conditions of this License.  If you cannot
    +distribute so as to satisfy simultaneously your obligations under this
    +License and any other pertinent obligations, then as a consequence you
    +may not distribute the Library at all.  For example, if a patent
    +license would not permit royalty-free redistribution of the Library by
    +all those who receive copies directly or indirectly through you, then
    +the only way you could satisfy both it and this License would be to
    +refrain entirely from distribution of the Library.
    +
    +If any portion of this section is held invalid or unenforceable under any
    +particular circumstance, the balance of the section is intended to apply,
    +and the section as a whole is intended to apply in other circumstances.
    +
    +It is not the purpose of this section to induce you to infringe any
    +patents or other property right claims or to contest validity of any
    +such claims; this section has the sole purpose of protecting the
    +integrity of the free software distribution system which is
    +implemented by public license practices.  Many people have made
    +generous contributions to the wide range of software distributed
    +through that system in reliance on consistent application of that
    +system; it is up to the author/donor to decide if he or she is willing
    +to distribute software through any other system and a licensee cannot
    +impose that choice.
    +
    +This section is intended to make thoroughly clear what is believed to
    +be a consequence of the rest of this License.
    +
    +  12. If the distribution and/or use of the Library is restricted in
    +certain countries either by patents or by copyrighted interfaces, the
    +original copyright holder who places the Library under this License may add
    +an explicit geographical distribution limitation excluding those countries,
    +so that distribution is permitted only in or among countries not thus
    +excluded.  In such case, this License incorporates the limitation as if
    +written in the body of this License.
    +
    +  13. The Free Software Foundation may publish revised and/or new
    +versions of the Library General Public License from time to time.
    +Such new versions will be similar in spirit to the present version,
    +but may differ in detail to address new problems or concerns.
    +
    +Each version is given a distinguishing version number.  If the Library
    +specifies a version number of this License which applies to it and
    +"any later version", you have the option of following the terms and
    +conditions either of that version or of any later version published by
    +the Free Software Foundation.  If the Library does not specify a
    +license version number, you may choose any version ever published by
    +the Free Software Foundation.
    +
    +  14. If you wish to incorporate parts of the Library into other free
    +programs whose distribution conditions are incompatible with these,
    +write to the author to ask for permission.  For software which is
    +copyrighted by the Free Software Foundation, write to the Free
    +Software Foundation; we sometimes make exceptions for this.  Our
    +decision will be guided by the two goals of preserving the free status
    +of all derivatives of our free software and of promoting the sharing
    +and reuse of software generally.
    +
    +			    NO WARRANTY
    +
    +  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
    +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
    +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
    +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
    +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    +PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
    +LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
    +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
    +
    +  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
    +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
    +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
    +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
    +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
    +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
    +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
    +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
    +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
    +DAMAGES.
    +
    +		     END OF TERMS AND CONDITIONS
    +
    +     Appendix: How to Apply These Terms to Your New Libraries
    +
    +  If you develop a new library, and you want it to be of the greatest
    +possible use to the public, we recommend making it free software that
    +everyone can redistribute and change.  You can do so by permitting
    +redistribution under these terms (or, alternatively, under the terms of the
    +ordinary General Public License).
    +
    +  To apply these terms, attach the following notices to the library.  It is
    +safest to attach them to the start of each source file to most effectively
    +convey the exclusion of warranty; and each file should have at least the
    +"copyright" line and a pointer to where the full notice is found.
    +
    +    <one line to give the library's name and a brief idea of what it does.>
    +    Copyright (C) <year>  <name of author>
    +
    +    This library is free software; you can redistribute it and/or
    +    modify it under the terms of the GNU Library General Public
    +    License as published by the Free Software Foundation; either
    +    version 2 of the License, or (at your option) any later version.
    +
    +    This library is distributed in the hope that it will be useful,
    +    but WITHOUT ANY WARRANTY; without even the implied warranty of
    +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    +    Library General Public License for more details.
    +
    +    You should have received a copy of the GNU Library General Public
    +    License along with this library; if not, write to the Free
    +    Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
    +
    +Also add information on how to contact you by electronic and paper mail.
    +
    +You should also get your employer (if you work as a programmer) or your
    +school, if any, to sign a "copyright disclaimer" for the library, if
    +necessary.  Here is a sample; alter the names:
    +
    +  Yoyodyne, Inc., hereby disclaims all copyright interest in the
    +  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
    +
    +  <signature of Ty Coon>, 1 April 1990
    +  Ty Coon, President of Vice
    +
    +That's all there is to it!
    +
    +
    +
    +
    + +
    +Metrics Protos +homepage + + +
    +
    // Copyright 2015 The Chromium Authors. All rights reserved.
    +//
    +// Redistribution and use in source and binary forms, with or without
    +// modification, are permitted provided that the following conditions are
    +// met:
    +//
    +//    * Redistributions of source code must retain the above copyright
    +// notice, this list of conditions and the following disclaimer.
    +//    * Redistributions in binary form must reproduce the above
    +// copyright notice, this list of conditions and the following disclaimer
    +// in the documentation and/or other materials provided with the
    +// distribution.
    +//    * Neither the name of Google Inc. nor the names of its
    +// contributors may be used to endorse or promote products derived from
    +// this software without specific prior written permission.
    +//
    +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +minigbm +homepage + + +
    +
    // Copyright 2014 The Chromium OS Authors. All rights reserved.
    +//
    +// Redistribution and use in source and binary forms, with or without
    +// modification, are permitted provided that the following conditions are
    +// met:
    +//
    +//    * Redistributions of source code must retain the above copyright
    +// notice, this list of conditions and the following disclaimer.
    +//    * Redistributions in binary form must reproduce the above
    +// copyright notice, this list of conditions and the following disclaimer
    +// in the documentation and/or other materials provided with the
    +// distribution.
    +//    * Neither the name of Google Inc. nor the names of its
    +// contributors may be used to endorse or promote products derived from
    +// this software without specific prior written permission.
    +//
    +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +modp base64 decoder +homepage + + +
    +
     * MODP_B64 - High performance base64 encoder/decoder
    + * Version 1.3 -- 17-Mar-2006
    + * http://modp.com/release/base64
    + *
    + * Copyright (c) 2005, 2006  Nick Galbreath -- nickg [at] modp [dot] com
    + * All rights reserved.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *   Redistributions of source code must retain the above copyright
    + *   notice, this list of conditions and the following disclaimer.
    + *
    + *   Redistributions in binary form must reproduce the above copyright
    + *   notice, this list of conditions and the following disclaimer in the
    + *   documentation and/or other materials provided with the distribution.
    + *
    + *   Neither the name of the modp.com nor the names of its
    + *   contributors may be used to endorse or promote products derived from
    + *   this software without specific prior written permission.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +Motion Animator for Objective-C +homepage + + +
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +
    + +
    +Motion Interchange for Objective-C +homepage + + +
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +
    + +
    +Motion Transitioning for Objective-C +homepage + + +
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +
    + +
    +Mozilla Personal Security Manager +homepage + + +
    +
    /* ***** BEGIN LICENSE BLOCK *****
    + * Version: MPL 1.1/GPL 2.0/LGPL 2.1
    + *
    + * The contents of this file are subject to the Mozilla Public License Version
    + * 1.1 (the "License"); you may not use this file except in compliance with
    + * the License. You may obtain a copy of the License at
    + * http://www.mozilla.org/MPL/
    + *
    + * Software distributed under the License is distributed on an "AS IS" basis,
    + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
    + * for the specific language governing rights and limitations under the
    + * License.
    + *
    + * The Original Code is the Netscape security libraries.
    + *
    + * The Initial Developer of the Original Code is
    + * Netscape Communications Corporation.
    + * Portions created by the Initial Developer are Copyright (C) 2000
    + * the Initial Developer. All Rights Reserved.
    + *
    + * Contributor(s):
    + *
    + * Alternatively, the contents of this file may be used under the terms of
    + * either the GNU General Public License Version 2 or later (the "GPL"), or
    + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
    + * in which case the provisions of the GPL or the LGPL are applicable instead
    + * of those above. If you wish to allow use of your version of this file only
    + * under the terms of either the GPL or the LGPL, and not to allow others to
    + * use your version of this file under the terms of the MPL, indicate your
    + * decision by deleting the provisions above and replace them with the notice
    + * and other provisions required by the GPL or the LGPL. If you do not delete
    + * the provisions above, a recipient may use your version of this file under
    + * the terms of any one of the MPL, the GPL or the LGPL.
    + *
    + * ***** END LICENSE BLOCK ***** */
    +
    +
    +
    + +
    +Netscape Portable Runtime (NSPR) +homepage + + +
    +
    /* ***** BEGIN LICENSE BLOCK *****
    + * Version: MPL 1.1/GPL 2.0/LGPL 2.1
    + *
    + * The contents of this file are subject to the Mozilla Public License Version
    + * 1.1 (the "License"); you may not use this file except in compliance with
    + * the License. You may obtain a copy of the License at
    + * http://www.mozilla.org/MPL/
    + *
    + * Software distributed under the License is distributed on an "AS IS" basis,
    + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
    + * for the specific language governing rights and limitations under the
    + * License.
    + *
    + * The Original Code is the Netscape Portable Runtime (NSPR).
    + *
    + * The Initial Developer of the Original Code is
    + * Netscape Communications Corporation.
    + * Portions created by the Initial Developer are Copyright (C) 1998-2000
    + * the Initial Developer. All Rights Reserved.
    + *
    + * Contributor(s):
    + *
    + * Alternatively, the contents of this file may be used under the terms of
    + * either the GNU General Public License Version 2 or later (the "GPL"), or
    + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
    + * in which case the provisions of the GPL or the LGPL are applicable instead
    + * of those above. If you wish to allow use of your version of this file only
    + * under the terms of either the GPL or the LGPL, and not to allow others to
    + * use your version of this file under the terms of the MPL, indicate your
    + * decision by deleting the provisions above and replace them with the notice
    + * and other provisions required by the GPL or the LGPL. If you do not delete
    + * the provisions above, a recipient may use your version of this file under
    + * the terms of any one of the MPL, the GPL or the LGPL.
    + *
    + * ***** END LICENSE BLOCK ***** */
    +
    +
    +
    + +
    +Network Security Services (NSS) +homepage + + +
    +
    NSS is available under the Mozilla Public License, version 2, a copy of which
    +is below.
    +
    +Note on GPL Compatibility
    +-------------------------
    +
    +The MPL 2, section 3.3, permits you to combine NSS with code under the GNU
    +General Public License (GPL) version 2, or any later version of that
    +license, to make a Larger Work, and distribute the result under the GPL.
    +The only condition is that you must also make NSS, and any changes you
    +have made to it, available to recipients under the terms of the MPL 2 also.
    +
    +Anyone who receives the combined code from you does not have to continue
    +to dual licence in this way, and may, if they wish, distribute under the
    +terms of either of the two licences - either the MPL alone or the GPL
    +alone. However, we discourage people from distributing copies of NSS under
    +the GPL alone, because it means that any improvements they make cannot be
    +reincorporated into the main version of NSS. There is never a need to do
    +this for license compatibility reasons.
    +
    +Note on LGPL Compatibility
    +--------------------------
    +
    +The above also applies to combining MPLed code in a single library with
    +code under the GNU Lesser General Public License (LGPL) version 2.1, or
    +any later version of that license. If the LGPLed code and the MPLed code
    +are not in the same library, then the copyleft coverage of the two
    +licences does not overlap, so no issues arise.
    +
    +
    +Mozilla Public License Version 2.0
    +==================================
    +
    +1. Definitions
    +--------------
    +
    +1.1. "Contributor"
    +    means each individual or legal entity that creates, contributes to
    +    the creation of, or owns Covered Software.
    +
    +1.2. "Contributor Version"
    +    means the combination of the Contributions of others (if any) used
    +    by a Contributor and that particular Contributor's Contribution.
    +
    +1.3. "Contribution"
    +    means Covered Software of a particular Contributor.
    +
    +1.4. "Covered Software"
    +    means Source Code Form to which the initial Contributor has attached
    +    the notice in Exhibit A, the Executable Form of such Source Code
    +    Form, and Modifications of such Source Code Form, in each case
    +    including portions thereof.
    +
    +1.5. "Incompatible With Secondary Licenses"
    +    means
    +
    +    (a) that the initial Contributor has attached the notice described
    +        in Exhibit B to the Covered Software; or
    +
    +    (b) that the Covered Software was made available under the terms of
    +        version 1.1 or earlier of the License, but not also under the
    +        terms of a Secondary License.
    +
    +1.6. "Executable Form"
    +    means any form of the work other than Source Code Form.
    +
    +1.7. "Larger Work"
    +    means a work that combines Covered Software with other material, in 
    +    a separate file or files, that is not Covered Software.
    +
    +1.8. "License"
    +    means this document.
    +
    +1.9. "Licensable"
    +    means having the right to grant, to the maximum extent possible,
    +    whether at the time of the initial grant or subsequently, any and
    +    all of the rights conveyed by this License.
    +
    +1.10. "Modifications"
    +    means any of the following:
    +
    +    (a) any file in Source Code Form that results from an addition to,
    +        deletion from, or modification of the contents of Covered
    +        Software; or
    +
    +    (b) any new file in Source Code Form that contains any Covered
    +        Software.
    +
    +1.11. "Patent Claims" of a Contributor
    +    means any patent claim(s), including without limitation, method,
    +    process, and apparatus claims, in any patent Licensable by such
    +    Contributor that would be infringed, but for the grant of the
    +    License, by the making, using, selling, offering for sale, having
    +    made, import, or transfer of either its Contributions or its
    +    Contributor Version.
    +
    +1.12. "Secondary License"
    +    means either the GNU General Public License, Version 2.0, the GNU
    +    Lesser General Public License, Version 2.1, the GNU Affero General
    +    Public License, Version 3.0, or any later versions of those
    +    licenses.
    +
    +1.13. "Source Code Form"
    +    means the form of the work preferred for making modifications.
    +
    +1.14. "You" (or "Your")
    +    means an individual or a legal entity exercising rights under this
    +    License. For legal entities, "You" includes any entity that
    +    controls, is controlled by, or is under common control with You. For
    +    purposes of this definition, "control" means (a) the power, direct
    +    or indirect, to cause the direction or management of such entity,
    +    whether by contract or otherwise, or (b) ownership of more than
    +    fifty percent (50%) of the outstanding shares or beneficial
    +    ownership of such entity.
    +
    +2. License Grants and Conditions
    +--------------------------------
    +
    +2.1. Grants
    +
    +Each Contributor hereby grants You a world-wide, royalty-free,
    +non-exclusive license:
    +
    +(a) under intellectual property rights (other than patent or trademark)
    +    Licensable by such Contributor to use, reproduce, make available,
    +    modify, display, perform, distribute, and otherwise exploit its
    +    Contributions, either on an unmodified basis, with Modifications, or
    +    as part of a Larger Work; and
    +
    +(b) under Patent Claims of such Contributor to make, use, sell, offer
    +    for sale, have made, import, and otherwise transfer either its
    +    Contributions or its Contributor Version.
    +
    +2.2. Effective Date
    +
    +The licenses granted in Section 2.1 with respect to any Contribution
    +become effective for each Contribution on the date the Contributor first
    +distributes such Contribution.
    +
    +2.3. Limitations on Grant Scope
    +
    +The licenses granted in this Section 2 are the only rights granted under
    +this License. No additional rights or licenses will be implied from the
    +distribution or licensing of Covered Software under this License.
    +Notwithstanding Section 2.1(b) above, no patent license is granted by a
    +Contributor:
    +
    +(a) for any code that a Contributor has removed from Covered Software;
    +    or
    +
    +(b) for infringements caused by: (i) Your and any other third party's
    +    modifications of Covered Software, or (ii) the combination of its
    +    Contributions with other software (except as part of its Contributor
    +    Version); or
    +
    +(c) under Patent Claims infringed by Covered Software in the absence of
    +    its Contributions.
    +
    +This License does not grant any rights in the trademarks, service marks,
    +or logos of any Contributor (except as may be necessary to comply with
    +the notice requirements in Section 3.4).
    +
    +2.4. Subsequent Licenses
    +
    +No Contributor makes additional grants as a result of Your choice to
    +distribute the Covered Software under a subsequent version of this
    +License (see Section 10.2) or under the terms of a Secondary License (if
    +permitted under the terms of Section 3.3).
    +
    +2.5. Representation
    +
    +Each Contributor represents that the Contributor believes its
    +Contributions are its original creation(s) or it has sufficient rights
    +to grant the rights to its Contributions conveyed by this License.
    +
    +2.6. Fair Use
    +
    +This License is not intended to limit any rights You have under
    +applicable copyright doctrines of fair use, fair dealing, or other
    +equivalents.
    +
    +2.7. Conditions
    +
    +Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
    +in Section 2.1.
    +
    +3. Responsibilities
    +-------------------
    +
    +3.1. Distribution of Source Form
    +
    +All distribution of Covered Software in Source Code Form, including any
    +Modifications that You create or to which You contribute, must be under
    +the terms of this License. You must inform recipients that the Source
    +Code Form of the Covered Software is governed by the terms of this
    +License, and how they can obtain a copy of this License. You may not
    +attempt to alter or restrict the recipients' rights in the Source Code
    +Form.
    +
    +3.2. Distribution of Executable Form
    +
    +If You distribute Covered Software in Executable Form then:
    +
    +(a) such Covered Software must also be made available in Source Code
    +    Form, as described in Section 3.1, and You must inform recipients of
    +    the Executable Form how they can obtain a copy of such Source Code
    +    Form by reasonable means in a timely manner, at a charge no more
    +    than the cost of distribution to the recipient; and
    +
    +(b) You may distribute such Executable Form under the terms of this
    +    License, or sublicense it under different terms, provided that the
    +    license for the Executable Form does not attempt to limit or alter
    +    the recipients' rights in the Source Code Form under this License.
    +
    +3.3. Distribution of a Larger Work
    +
    +You may create and distribute a Larger Work under terms of Your choice,
    +provided that You also comply with the requirements of this License for
    +the Covered Software. If the Larger Work is a combination of Covered
    +Software with a work governed by one or more Secondary Licenses, and the
    +Covered Software is not Incompatible With Secondary Licenses, this
    +License permits You to additionally distribute such Covered Software
    +under the terms of such Secondary License(s), so that the recipient of
    +the Larger Work may, at their option, further distribute the Covered
    +Software under the terms of either this License or such Secondary
    +License(s).
    +
    +3.4. Notices
    +
    +You may not remove or alter the substance of any license notices
    +(including copyright notices, patent notices, disclaimers of warranty,
    +or limitations of liability) contained within the Source Code Form of
    +the Covered Software, except that You may alter any license notices to
    +the extent required to remedy known factual inaccuracies.
    +
    +3.5. Application of Additional Terms
    +
    +You may choose to offer, and to charge a fee for, warranty, support,
    +indemnity or liability obligations to one or more recipients of Covered
    +Software. However, You may do so only on Your own behalf, and not on
    +behalf of any Contributor. You must make it absolutely clear that any
    +such warranty, support, indemnity, or liability obligation is offered by
    +You alone, and You hereby agree to indemnify every Contributor for any
    +liability incurred by such Contributor as a result of warranty, support,
    +indemnity or liability terms You offer. You may include additional
    +disclaimers of warranty and limitations of liability specific to any
    +jurisdiction.
    +
    +4. Inability to Comply Due to Statute or Regulation
    +---------------------------------------------------
    +
    +If it is impossible for You to comply with any of the terms of this
    +License with respect to some or all of the Covered Software due to
    +statute, judicial order, or regulation then You must: (a) comply with
    +the terms of this License to the maximum extent possible; and (b)
    +describe the limitations and the code they affect. Such description must
    +be placed in a text file included with all distributions of the Covered
    +Software under this License. Except to the extent prohibited by statute
    +or regulation, such description must be sufficiently detailed for a
    +recipient of ordinary skill to be able to understand it.
    +
    +5. Termination
    +--------------
    +
    +5.1. The rights granted under this License will terminate automatically
    +if You fail to comply with any of its terms. However, if You become
    +compliant, then the rights granted under this License from a particular
    +Contributor are reinstated (a) provisionally, unless and until such
    +Contributor explicitly and finally terminates Your grants, and (b) on an
    +ongoing basis, if such Contributor fails to notify You of the
    +non-compliance by some reasonable means prior to 60 days after You have
    +come back into compliance. Moreover, Your grants from a particular
    +Contributor are reinstated on an ongoing basis if such Contributor
    +notifies You of the non-compliance by some reasonable means, this is the
    +first time You have received notice of non-compliance with this License
    +from such Contributor, and You become compliant prior to 30 days after
    +Your receipt of the notice.
    +
    +5.2. If You initiate litigation against any entity by asserting a patent
    +infringement claim (excluding declaratory judgment actions,
    +counter-claims, and cross-claims) alleging that a Contributor Version
    +directly or indirectly infringes any patent, then the rights granted to
    +You by any and all Contributors for the Covered Software under Section
    +2.1 of this License shall terminate.
    +
    +5.3. In the event of termination under Sections 5.1 or 5.2 above, all
    +end user license agreements (excluding distributors and resellers) which
    +have been validly granted by You or Your distributors under this License
    +prior to termination shall survive termination.
    +
    +************************************************************************
    +*                                                                      *
    +*  6. Disclaimer of Warranty                                           *
    +*  -------------------------                                           *
    +*                                                                      *
    +*  Covered Software is provided under this License on an "as is"       *
    +*  basis, without warranty of any kind, either expressed, implied, or  *
    +*  statutory, including, without limitation, warranties that the       *
    +*  Covered Software is free of defects, merchantable, fit for a        *
    +*  particular purpose or non-infringing. The entire risk as to the     *
    +*  quality and performance of the Covered Software is with You.        *
    +*  Should any Covered Software prove defective in any respect, You     *
    +*  (not any Contributor) assume the cost of any necessary servicing,   *
    +*  repair, or correction. This disclaimer of warranty constitutes an   *
    +*  essential part of this License. No use of any Covered Software is   *
    +*  authorized under this License except under this disclaimer.         *
    +*                                                                      *
    +************************************************************************
    +
    +************************************************************************
    +*                                                                      *
    +*  7. Limitation of Liability                                          *
    +*  --------------------------                                          *
    +*                                                                      *
    +*  Under no circumstances and under no legal theory, whether tort      *
    +*  (including negligence), contract, or otherwise, shall any           *
    +*  Contributor, or anyone who distributes Covered Software as          *
    +*  permitted above, be liable to You for any direct, indirect,         *
    +*  special, incidental, or consequential damages of any character      *
    +*  including, without limitation, damages for lost profits, loss of    *
    +*  goodwill, work stoppage, computer failure or malfunction, or any    *
    +*  and all other commercial damages or losses, even if such party      *
    +*  shall have been informed of the possibility of such damages. This   *
    +*  limitation of liability shall not apply to liability for death or   *
    +*  personal injury resulting from such party's negligence to the       *
    +*  extent applicable law prohibits such limitation. Some               *
    +*  jurisdictions do not allow the exclusion or limitation of           *
    +*  incidental or consequential damages, so this exclusion and          *
    +*  limitation may not apply to You.                                    *
    +*                                                                      *
    +************************************************************************
    +
    +8. Litigation
    +-------------
    +
    +Any litigation relating to this License may be brought only in the
    +courts of a jurisdiction where the defendant maintains its principal
    +place of business and such litigation shall be governed by laws of that
    +jurisdiction, without reference to its conflict-of-law provisions.
    +Nothing in this Section shall prevent a party's ability to bring
    +cross-claims or counter-claims.
    +
    +9. Miscellaneous
    +----------------
    +
    +This License represents the complete agreement concerning the subject
    +matter hereof. If any provision of this License is held to be
    +unenforceable, such provision shall be reformed only to the extent
    +necessary to make it enforceable. Any law or regulation which provides
    +that the language of a contract shall be construed against the drafter
    +shall not be used to construe this License against a Contributor.
    +
    +10. Versions of the License
    +---------------------------
    +
    +10.1. New Versions
    +
    +Mozilla Foundation is the license steward. Except as provided in Section
    +10.3, no one other than the license steward has the right to modify or
    +publish new versions of this License. Each version will be given a
    +distinguishing version number.
    +
    +10.2. Effect of New Versions
    +
    +You may distribute the Covered Software under the terms of the version
    +of the License under which You originally received the Covered Software,
    +or under the terms of any subsequent version published by the license
    +steward.
    +
    +10.3. Modified Versions
    +
    +If you create software not governed by this License, and you want to
    +create a new license for such software, you may create and use a
    +modified version of this License if you rename the license and remove
    +any references to the name of the license steward (except to note that
    +such modified license differs from this License).
    +
    +10.4. Distributing Source Code Form that is Incompatible With Secondary
    +Licenses
    +
    +If You choose to distribute Source Code Form that is Incompatible With
    +Secondary Licenses under the terms of this version of the License, the
    +notice described in Exhibit B of this License must be attached.
    +
    +Exhibit A - Source Code Form License Notice
    +-------------------------------------------
    +
    +  This Source Code Form is subject to the terms of the Mozilla Public
    +  License, v. 2.0. If a copy of the MPL was not distributed with this
    +  file, You can obtain one at http://mozilla.org/MPL/2.0/.
    +
    +If it is not possible or desirable to put the notice in a particular
    +file, then You may include the notice in a location (such as a LICENSE
    +file in a relevant directory) where a recipient would be likely to look
    +for such a notice.
    +
    +You may add additional accurate notices of copyright ownership.
    +
    +Exhibit B - "Incompatible With Secondary Licenses" Notice
    +---------------------------------------------------------
    +
    +  This Source Code Form is "Incompatible With Secondary Licenses", as
    +  defined by the Mozilla Public License, v. 2.0.
    +
    +
    +
    + +
    +newlib-extras +homepage + + +
    +
                            README for newlib-2.0.0 release
    +           (mostly cribbed from the README in the gdb-4.13 release)
    +
    +This is `newlib', a simple ANSI C library, math library, and collection
    +of board support packages.
    +
    +The newlib and libgloss subdirectories are a collection of software from
    +several sources, each wi6h their own copyright and license.  See the file
    +COPYING.NEWLIB for details.  The rest of the release tree is under either
    +the GNU GPL or LGPL licenses.
    +
    +THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
    +IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
    +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
    +
    +
    +Unpacking and Installation -- quick overview
    +==========================
    +
    +When you unpack the newlib-2.0.0.tar.gz file, you'll find a directory
    +called `newlib-2.0.0', which contains:
    +
    +COPYING          config/          install-sh*      mpw-configure
    +COPYING.LIB      config-ml.in     libgloss/        mpw-install
    +COPYING.NEWLIB   config.guess*    mkinstalldirs*   newlib/
    +CYGNUS           config.sub*      move-if-change*  symlink-tree*
    +ChangeLog        configure*       mpw-README       texinfo/
    +Makefile.in      configure.in     mpw-build.in
    +README           etc/             mpw-config.in
    +
    +To build NEWLIB, you must follow the instructions in the section entitled
    +"Compiling NEWLIB".
    +
    +This will configure and build all the libraries and crt0 (if one exists).
    +If `configure' can't determine your host system type, specify one as its
    +argument, e.g., sun4 or sun4sol2.  NEWLIB is most often used in cross
    +environments.
    +
    +NOTE THAT YOU MUST HAVE ALREADY BUILT AND INSTALLED GCC and BINUTILS.
    +
    +
    +More Documentation
    +==================
    +
    +   Newlib documentation is available on the net via:
    +   http://sourceware.org/newlib/docs.html
    +
    +   All the documentation for NEWLIB comes as part of the machine-readable
    +distribution.  The documentation is written in Texinfo format, which is
    +a documentation system that uses a single source file to produce both
    +on-line information and a printed manual.  You can use one of the Info
    +formatting commands to create the on-line version of the documentation
    +and TeX (or `texi2roff') to typeset the printed version.
    +
    +   If you want to format these Info files yourself, you need one of the
    +Info formatting programs, such as `texinfo-format-buffer' or `makeinfo'.
    +
    +   If you want to typeset and print copies of this manual, you need TeX,
    +a program to print its DVI output files, and `texinfo.tex', the Texinfo
    +definitions file.
    +
    +   TeX is a typesetting program; it does not print files directly, but
    +produces output files called DVI files.  To print a typeset document,
    +you need a program to print DVI files.  If your system has TeX
    +installed, chances are it has such a program.  The precise command to
    +use depends on your system; `lpr -d' is common; another (for PostScript
    +devices) is `dvips'.  The DVI print command may require a file name
    +without any extension or a `.dvi' extension.
    +
    +   TeX also requires a macro definitions file called `texinfo.tex'. 
    +This file tells TeX how to typeset a document written in Texinfo
    +format.  On its own, TeX cannot read, much less typeset a Texinfo file.
    +`texinfo.tex' is distributed with NEWLIB and is located in the
    +`newlib-VERSION-NUMBER/texinfo' directory.
    +
    +
    +
    +Compiling NEWLIB
    +================
    +
    +   To compile NEWLIB, you must build it in a directory separate from
    +the source directory.  If you want to run NEWLIB versions for several host 
    +or target machines, you need a different `newlib' compiled for each combination
    +of host and target.  `configure' is designed to make this easy by allowing 
    +you to generate each configuration in a separate subdirectory.
    +If your `make' program handles the `VPATH' feature correctly (like GNU `make')
    +running `make' in each of these directories builds the `newlib' libraries
    +specified there.
    +
    +   To build `newlib' in a specific directory, run `configure' with the
    +`--srcdir' option to specify where to find the source. (You also need
    +to specify a path to find `configure' itself from your working
    +directory.  If the path to `configure' would be the same as the
    +argument to `--srcdir', you can leave out the `--srcdir' option; it
    +will be assumed.)
    +
    +   For example, with version 2.0.0, you can build NEWLIB in a separate
    +directory for a Sun 4 cross m68k-aout environment like this:
    +
    +     cd newlib-2.0.0
    +     mkdir ../newlib-m68k-aout
    +     cd ../newlib-m68k-aout
    +     ../newlib-2.0.0/configure --host=sun4 --target=m68k-aout
    +     make
    +
    +   When `configure' builds a configuration using a remote source
    +directory, it creates a tree for the binaries with the same structure
    +(and using the same names) as the tree under the source directory.  In
    +the example, you'd find the Sun 4 library `libiberty.a' in the
    +directory `newlib-m68k-aout/libiberty', and NEWLIB itself in
    +`newlib-m68k-aout/newlib'.
    +
    +   When you run `make' to build a program or library, you must run it
    +in a configured directory--whatever directory you were in when you
    +called `configure' (or one of its subdirectories).
    +
    +   The `Makefile' that `configure' generates in each source directory
    +also runs recursively.  If you type `make' in a source directory such
    +as `newlib-2.0.0' (or in a separate configured directory configured with
    +`--srcdir=PATH/newlib-2.0.0'), you will build all the required libraries.
    +
    +   When you have multiple hosts or targets configured in separate
    +directories, you can run `make' on them in parallel (for example, if
    +they are NFS-mounted on each of the hosts); they will not interfere
    +with each other.
    +
    +
    +Specifying names for hosts and targets
    +======================================
    +
    +   The specifications used for hosts and targets in the `configure'
    +script are based on a three-part naming scheme, but some short
    +predefined aliases are also supported.  The full naming scheme encodes
    +three pieces of information in the following pattern:
    +
    +     ARCHITECTURE-VENDOR-OS
    +
    +   For example, you can use the alias `sun4' as a HOST argument or in a
    +`--target=TARGET' option.  The equivalent full name is
    +`sparc-sun-sunos4'.
    +
    +   The `configure' script accompanying NEWLIB does not provide any query
    +facility to list all supported host and target names or aliases. 
    +`configure' calls the Bourne shell script `config.sub' to map
    +abbreviations to full names; you can read the script, if you wish, or
    +you can use it to test your guesses on abbreviations--for example:
    +
    +     % sh config.sub sun4
    +     sparc-sun-sunos4.1.1
    +     % sh config.sub sun3
    +     m68k-sun-sunos4.1.1
    +     % sh config.sub decstation
    +     mips-dec-ultrix4.2
    +     % sh config.sub hp300bsd
    +     m68k-hp-bsd
    +     % sh config.sub i386v
    +     i386-pc-sysv
    +     % sh config.sub i786v
    +     Invalid configuration `i786v': machine `i786v' not recognized
    +
    +The Build, Host and Target Concepts in newlib
    +=============================================
    +
    +The build, host and target concepts are defined for gcc as follows:
    +
    +build: the platform on which gcc is built.
    +host: the platform on which gcc is run.
    +target: the platform for which gcc generates code.
    +
    +Since newlib is a library, the target concept does not apply to it, and the
    +build, host, and target options given to the top-level configure script must
    +be changed for newlib's use.
    +
    +The options are shifted according to these correspondences:
    +
    +gcc's build platform has no equivalent in newlib.
    +gcc's host platform is newlib's build platform.
    +gcc's target platform is newlib's host platform.
    +and as mentioned before, newlib has no concept of target.
    +
    +`configure' options
    +===================
    +
    +   Here is a summary of the `configure' options and arguments that are
    +most often useful for building NEWLIB.  `configure' also has several other
    +options not listed here.
    +
    +     configure [--help]
    +               [--prefix=DIR]
    +               [--srcdir=PATH]
    +               [--target=TARGET] HOST
    +
    +You may introduce options with a single `-' rather than `--' if you
    +prefer; but you may abbreviate option names if you use `--'.
    +
    +`--help'
    +     Display a quick summary of how to invoke `configure'.
    +
    +`--prefix=DIR'
    +     Configure the source to install programs and files in directory
    +     `DIR'.
    +
    +`--exec-prefix=DIR'
    +     Configure the source to install host-dependent files in directory
    +     `DIR'.
    +
    +`--srcdir=PATH'
    +     *Warning: using this option requires GNU `make', or another `make'
    +     that compatibly implements the `VPATH' feature.
    +     Use this option to make configurations in directories separate
    +     from the NEWLIB source directories.  Among other things, you can use
    +     this to build (or maintain) several configurations simultaneously,
    +     in separate directories.  `configure' writes configuration
    +     specific files in the current directory, but arranges for them to
    +     use the source in the directory PATH.  `configure' will create
    +     directories under the working directory in parallel to the source
    +     directories below PATH.
    +
    +`--norecursion'
    +     Configure only the directory level where `configure' is executed;
    +     do not propagate configuration to subdirectories.
    +
    +`--target=TARGET'
    +     Configure NEWLIB for running on the specified TARGET.
    +
    +     There is no convenient way to generate a list of all available
    +     targets.
    +
    +`HOST ...'
    +     Configure NEWLIB to be built using a cross compiler running on
    +     the specified HOST.
    +
    +     There is no convenient way to generate a list of all available
    +     hosts.
    +
    +To fit diverse usage models, NEWLIB supports a group of configuration
    +options so that library features can be turned on/off according to
    +target system's requirements.
    +
    +One feature can be enabled by specifying `--enable-FEATURE=yes' or
    +`--enable-FEATURE'.  Or it can be disable by `--enable-FEATURE=no' or
    +`--disable-FEATURE'.
    +
    +`--enable-newlib-io-pos-args'
    +     Enable printf-family positional arg support.
    +     Disabled by default, but some hosts enable it in configure.host.
    +
    +`--enable-newlib-io-c99-formats'
    +     Enable C99 support in IO functions like printf/scanf.
    +     Disabled by default, but some hosts enable it in configure.host.
    +
    +`--enable-newlib-register-fini'
    +     Enable finalization function registration using atexit.
    +     Disabled by default.
    +
    +`--enable-newlib-io-long-long'
    +     Enable long long type support in IO functions like printf/scanf.
    +     Disabled by default, but many hosts enable it in configure.host.
    +
    +`--enable-newlib-io-long-double'
    +     Enable long double type support in IO functions printf/scanf.
    +     Disabled by default, but some hosts enable it in configure.host.
    +
    +`--enable-newlib-mb'
    +     Enable multibyte support.
    +     Disabled by default.
    +
    +`--enable-newlib-iconv-encodings'
    +     Enable specific comma-separated list of bidirectional iconv
    +     encodings to be built-in.
    +     Disabled by default.
    +
    +`--enable-newlib-iconv-from-encodings'
    +     Enable specific comma-separated list of \"from\" iconv encodings
    +     to be built-in.
    +     Disabled by default.
    +
    +`--enable-newlib-iconv-to-encodings'
    +     Enable specific comma-separated list of \"to\" iconv encodings
    +     to be built-in.
    +     Disabled by default.
    +
    +`--enable-newlib-iconv-external-ccs'
    +     Enable capabilities to load external CCS files for iconv.
    +     Disabled by default.
    +
    +`--disable-newlib-atexit-dynamic-alloc'
    +     Disable dynamic allocation of atexit entries.
    +     Most hosts and targets have it enabled in configure.host.
    +
    +`--enable-newlib-reent-small'
    +     Enable small reentrant struct support.
    +     Disabled by default.
    +
    +`--disable-newlib-fvwrite-in-streamio'
    +     NEWLIB implements the vector buffer mechanism to support stream IO
    +     buffering required by C standard.  This feature is possibly
    +     unnecessary for embedded systems which won't change file buffering
    +     with functions like `setbuf' or `setvbuf'.  The buffering mechanism
    +     still acts as default for STDIN/STDOUT/STDERR even if this option
    +     is specified.
    +     Enabled by default.
    +
    +`--disable-newlib-fseek-optimization'
    +     Disable fseek optimization.  It can decrease code size of application
    +     calling `fseek`.
    +     Enabled by default.
    +
    +`--disable-newlib-wide-orient'
    +     C99 states that each stream has an orientation, wide or byte.  This
    +     feature is possibly unnecessary for embedded systems which only do
    +     byte input/output operations on stream.  It can decrease code size
    +     by disable the feature.
    +     Enabled by default.
    +
    +`--enable-newlib-nano-malloc'
    +     NEWLIB has two implementations of malloc family's functions, one in
    +     `mallocr.c' and the other one in `nano-mallocr.c'.  This options
    +     enables the nano-malloc implementation, which is for small systems
    +     with very limited memory.  Note that this implementation does not
    +     support `--enable-malloc-debugging' any more.
    +     Disabled by default.
    +
    +`--disable-newlib-unbuf-stream-opt'
    +     NEWLIB does optimization when `fprintf to write only unbuffered unix
    +     file'.  It creates a temorary buffer to do the optimization that
    +     increases stack consumption by about `BUFSIZ' bytes.  This option
    +     disables the optimization and saves size of text and stack.
    +     Enabled by default.
    +
    +`--enable-multilib'
    +     Build many library versions.
    +     Enabled by default.
    +
    +`--enable-target-optspace'
    +     Optimize for space.
    +     Disabled by default.
    +
    +`--enable-malloc-debugging'
    +     Indicate malloc debugging requested.
    +     Disabled by default.
    +
    +`--enable-newlib-multithread'
    +     Enable support for multiple threads.
    +     Enabled by default.
    +
    +`--enable-newlib-iconv'
    +     Enable iconv library support.
    +     Disabled by default.
    +
    +`--enable-newlib-elix-level'
    +     Supply desired elix library level (1-4).  Please refer to HOWTO for
    +     more information about this option.
    +     Set to level 0 by default.
    +
    +`--disable-newlib-io-float'
    +     Disable printf/scanf family float support.
    +     Enabled by default.
    +
    +`--disable-newlib-supplied-syscalls'
    +     Disable newlib from supplying syscalls.
    +     Enabled by default.
    +
    +`--enable-lite-exit'
    +     Enable lite exit, a size-reduced implementation of exit that doesn't
    +     invoke clean-up functions such as _fini or global destructors.
    +     Disabled by default.
    +
    +Running the Testsuite
    +=====================
    +
    +To run newlib's testsuite, you'll need a site.exp in your home
    +directory which points dejagnu to the proper baseboards directory and
    +the proper exp file for your target.
    +
    +Before running make check-target-newlib, set the DEJAGNU environment
    +variable to point to ~/site.exp.
    +
    +Here is a sample site.exp:
    +
    +# Make sure we look in the right place for the board description files.
    +if ![info exists boards_dir] {
    +    set boards_dir {}
    +}
    +lappend boards_dir "your dejagnu/baseboards here"
    +
    +verbose "Global Config File: target_triplet is $target_triplet" 2
    +
    +global target_list
    +case "$target_triplet" in {
    +
    +    { "mips-*elf*" } {
    +	set target_list "mips-sim"
    +    }
    +
    +    default {
    +	set target_list { "unix" }
    +    }
    +}
    +
    +mips-sim refers to an exp file in the baseboards directory.  You'll
    +need to add the other targets you're testing to the case statement.
    +
    +Now type make check-target-newlib in the top-level build directory to
    +run the testsuite.
    +
    +Shared newlib
    +=============
    +
    +newlib uses libtool when it is being compiled natively (with
    +--target=i[34567]86-pc-linux-gnu) on an i[34567]86-pc-linux-gnu
    +host. This allows newlib to be compiled as a shared library.
    +
    +To configure newlib, do the following from your build directory:
    +
    +$(source_dir)/src/configure --with-newlib --prefix=$(install_dir)
    +
    +configure will recognize that host == target ==
    +i[34567]86-pc-linux-gnu, so it will tell newlib to compile itself using
    +libtool. By default, libtool will build shared and static versions of
    +newlib.
    +
    +To compile a program against shared newlib, do the following (where
    +target_install_dir = $(install_dir)/i[34567]86-pc-linux-gnu):
    +
    +gcc -nostdlib $(target_install_dir)/lib/crt0.o progname.c -I $(target_install_dir)/include -L $(target_install_dir)/lib -lc -lm -lgcc
    +
    +To run the program, make sure that $(target_install_dir)/lib is listed
    +in the LD_LIBRARY_PATH environment variable.
    +
    +To create a static binary linked against newlib, do the following:
    +
    +gcc -nostdlib -static $(target_install_dir)/lib/crt0.o progname.c -I $(target_install_dir)/include -L $(target_install_dir)/lib -lc -lm
    +
    +libtool can be instructed to produce only static libraries. To build
    +newlib as a static library only, do the following from your build
    +directory:
    +
    +$(source_dir)/src/configure --with-newlib --prefix=$(install_dir) --disable-shared
    +
    +Regenerating Configuration Files
    +================================
    +
    +At times you will need to make changes to configure.in and Makefile.am files.
    +This will mean that configure and Makefile.in files will need to be
    +regenerated.
    +
    +At the top level of newlib is the file: acinclude.m4.  This file contains
    +the definition of the NEWLIB_CONFIGURE macro which is used by all configure.in
    +files in newlib.  You will notice that each directory in newlib containing
    +a configure.in file also contains an aclocal.m4 file.  This file is
    +generated by issuing: aclocal -I${relative_path_to_toplevel_newlib_dir}
    +-I${relative_path_to_toplevel_src_dir}
    +The first relative directory is to access acinclude.m4.  The second relative
    +directory is to access libtool information in the top-level src directory.
    +
    +For example, to regenerate aclocal.m4 in newlib/libc/machine/arm:
    +
    +  aclocal -I ../../.. -I ../../../..
    +
    +Note that if the top level acinclude.m4 is altered, every aclocal.m4 file 
    +in newlib should be regenerated.
    +
    +If the aclocal.m4 file is regenerated due to a change in acinclude.m4 or
    +if a configure.in file is modified, the corresponding configure file in the 
    +directory must be regenerated using autoconf.  No parameters are necessary.
    +In the previous example, we would issue:
    +
    +  autoconf
    +
    +from the newlib/libc/machine/arm directory.
    +
    +If you have regenerated a configure file or if you have modified a Makefile.am
    +file, you will need to regenerate the appropriate Makefile.in file(s).
    +For newlib, automake is a bit trickier.  First of all, all Makefile.in
    +files in newlib (and libgloss) are generated using the --cygnus option
    +of automake.  
    +
    +Makefile.in files are generated from the nearest directory up the chain
    +which contains a configure.in file.  In most cases, this is the same
    +directory containing configure.in, but there are exceptions.
    +For example, the newlib/libc directory has a number of
    +subdirectories that do not contain their own configure.in files (e.g. stdio).
    +For these directories, you must issue the automake command from newlib/libc
    +which is the nearest parent directory that contains a configure.in.
    +When you issue the automake command, you specify the subdirectory for
    +the Makefile.in you are regenerating.  For example:
    +
    +   automake --cygnus stdio/Makefile stdlib/Makefile
    +
    +Note how multiple Makefile.in files can be created in the same step.  You
    +would not specify machine/Makefile or sys/Makefile in the previous example
    +because both of these subdirectories contain their own configure.in files.
    +One would change to each of these subdirectories and in turn issue:
    +
    +   automake --cygnus Makefile
    +
    +Let's say you create a new machine directory XXXX off of newlib/libc/machine.
    +After creating a new configure.in and Makefile.am file, you would issue:
    +
    +   aclocal -I ../../..
    +   autoconf
    +   automake --cygnus Makefile
    +
    +from newlib/libc/machine/XXXX
    +
    +It is strongly advised that you use an adequate version of autotools.
    +For this latest release, the following were used: autoconf 2.68, aclocal 1.11.6, and 
    +automake 1.11.6.
    +
    +Reporting Bugs
    +==============
    +
    +The correct address for reporting bugs found in NEWLIB is
    +"newlib@sourceware.org".  Please email all bug reports to that
    +address.  Please include the NEWLIB version number (e.g., newlib-2.0.0),
    +and how you configured it (e.g., "sun4 host and m68k-aout target").
    +Since NEWLIB supports many different configurations, it is important
    +that you be precise about this.
    +
    +Archives of the newlib mailing list are on-line, see
    +	http://sourceware.org/ml/newlib/
    +
    +
    +
    + +
    +NSBezierPath additions from Sean Patrick O'Brien +homepage + + +
    +
    Copyright 2008 MolokoCacao
    +All rights reserved
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted providing that the following conditions 
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
    +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
    +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
    +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
    +IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
    +POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +NVidia Control X Extension Library +homepage + + +
    +
    /*
    + * Copyright (c) 2008 NVIDIA, Corporation
    + *
    + * Permission is hereby granted, free of charge, to any person obtaining a copy
    + * of this software and associated documentation files (the "Software"), to deal
    + * in the Software without restriction, including without limitation the rights
    + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    + * copies of the Software, and to permit persons to whom the Software is
    + * furnished to do so, subject to the following conditions:
    + *
    + * The above copyright notice and this permission notice (including the next
    + * paragraph) shall be included in all copies or substantial portions of the
    + * Software.
    + *
    + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
    + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
    + * SOFTWARE.
    + */
    +
    +
    + +
    +Oculus SDK for Windows +homepage + + +
    +
    Copyright © 2014-2017 Oculus VR, LLC. All rights reserved.
    +
    +
    + +
    +OpenH264 +homepage + + +
    +
    Copyright (c) 2013, Cisco Systems
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without modification,
    +are permitted provided that the following conditions are met:
    +
    +* Redistributions of source code must retain the above copyright notice, this
    +  list of conditions and the following disclaimer.
    +
    +* Redistributions in binary form must reproduce the above copyright notice, this
    +  list of conditions and the following disclaimer in the documentation and/or
    +  other materials provided with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
    +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
    +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    + +
    +OpenMAX DL +homepage + + +
    +
    Use of this source code is governed by a BSD-style license that can be
    +found in the LICENSE file in the root of the source tree. All
    +contributing project authors may be found in the AUTHORS file in the
    +root of the source tree.
    +
    +The files were originally licensed by ARM Limited.
    +
    +The following files:
    +
    +    * dl/api/omxtypes.h
    +    * dl/sp/api/omxSP.h
    +
    +are licensed by Khronos:
    +
    +Copyright © 2005-2008 The Khronos Group Inc. All Rights Reserved. 
    +
    +These materials are protected by copyright laws and contain material 
    +proprietary to the Khronos Group, Inc.  You may use these materials 
    +for implementing Khronos specifications, without altering or removing 
    +any trademark, copyright or other notice from the specification.
    +
    +Khronos Group makes no, and expressly disclaims any, representations 
    +or warranties, express or implied, regarding these materials, including, 
    +without limitation, any implied warranties of merchantability or fitness 
    +for a particular purpose or non-infringement of any intellectual property. 
    +Khronos Group makes no, and expressly disclaims any, warranties, express 
    +or implied, regarding the correctness, accuracy, completeness, timeliness, 
    +and reliability of these materials. 
    +
    +Under no circumstances will the Khronos Group, or any of its Promoters, 
    +Contributors or Members or their respective partners, officers, directors, 
    +employees, agents or representatives be liable for any damages, whether 
    +direct, indirect, special or consequential damages for lost revenues, 
    +lost profits, or otherwise, arising from or in connection with these 
    +materials.
    +
    +Khronos and OpenMAX are trademarks of the Khronos Group Inc. 
    +
    +
    +
    + +
    +OpenVR SDK +homepage + + +
    +
    Copyright (c) 2015, Valve Corporation
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without modification,
    +are permitted provided that the following conditions are met:
    +
    +1. Redistributions of source code must retain the above copyright notice, this
    +list of conditions and the following disclaimer.
    +
    +2. Redistributions in binary form must reproduce the above copyright notice,
    +this list of conditions and the following disclaimer in the documentation and/or
    +other materials provided with the distribution.
    +
    +3. Neither the name of the copyright holder nor the names of its contributors
    +may be used to endorse or promote products derived from this software without
    +specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
    +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
    +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +opus +homepage + + +
    +
    Copyright 2001-2011 Xiph.Org, Skype Limited, Octasic,
    +                    Jean-Marc Valin, Timothy B. Terriberry,
    +                    CSIRO, Gregory Maxwell, Mark Borgerding,
    +                    Erik de Castro Lopo
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +
    +- Redistributions of source code must retain the above copyright
    +notice, this list of conditions and the following disclaimer.
    +
    +- Redistributions in binary form must reproduce the above copyright
    +notice, this list of conditions and the following disclaimer in the
    +documentation and/or other materials provided with the distribution.
    +
    +- Neither the name of Internet Society, IETF or IETF Trust, nor the
    +names of specific contributors, may be used to endorse or promote
    +products derived from this software without specific prior written
    +permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
    +OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
    +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
    +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
    +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
    +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
    +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +Opus is subject to the royalty-free patent licenses which are
    +specified at:
    +
    +Xiph.Org Foundation:
    +https://datatracker.ietf.org/ipr/1524/
    +
    +Microsoft Corporation:
    +https://datatracker.ietf.org/ipr/1914/
    +
    +Broadcom Corporation:
    +https://datatracker.ietf.org/ipr/1526/
    +
    +
    +
    + +
    +OTS (OpenType Sanitizer) +homepage + + +
    +
    Copyright (c) 2009-2017 The OTS Authors. All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are
    +met:
    +
    +   * Redistributions of source code must retain the above copyright
    +notice, this list of conditions and the following disclaimer.
    +   * Redistributions in binary form must reproduce the above
    +copyright notice, this list of conditions and the following disclaimer
    +in the documentation and/or other materials provided with the
    +distribution.
    +   * Neither the name of Google Inc. nor the names of its
    +contributors may be used to endorse or promote products derived from
    +this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +Paul Hsieh's SuperFastHash +homepage + + +
    +
    Paul Hsieh OLD BSD license
    +
    +Copyright (c) 2010, Paul Hsieh
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without modification,
    +are permitted provided that the following conditions are met:
    +
    +* Redistributions of source code must retain the above copyright notice, this
    +  list of conditions and the following disclaimer.
    +* Redistributions in binary form must reproduce the above copyright notice, this
    +  list of conditions and the following disclaimer in the documentation and/or
    +  other materials provided with the distribution.
    +* Neither my name, Paul Hsieh, nor the names of any other contributors to the
    +  code use may not be used to endorse or promote products derived from this
    +  software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
    +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
    +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +PDFium +homepage + + +
    +
    // Copyright 2014 PDFium Authors. All rights reserved.
    +//
    +// Redistribution and use in source and binary forms, with or without
    +// modification, are permitted provided that the following conditions are
    +// met:
    +//
    +//    * Redistributions of source code must retain the above copyright
    +// notice, this list of conditions and the following disclaimer.
    +//    * Redistributions in binary form must reproduce the above
    +// copyright notice, this list of conditions and the following disclaimer
    +// in the documentation and/or other materials provided with the
    +// distribution.
    +//    * Neither the name of Google Inc. nor the names of its
    +// contributors may be used to endorse or promote products derived from
    +// this software without specific prior written permission.
    +//
    +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +Perfetto +homepage + + +
    +
    +
    +
    +
    + +
    +PLY (Python Lex-Yacc) +homepage + + +
    +
    PLY (Python Lex-Yacc)                   Version 3.4
    +
    +Copyright (C) 2001-2011,
    +David M. Beazley (Dabeaz LLC)
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are
    +met:
    +
    +* Redistributions of source code must retain the above copyright notice,
    +  this list of conditions and the following disclaimer.  
    +* Redistributions in binary form must reproduce the above copyright notice, 
    +  this list of conditions and the following disclaimer in the documentation
    +  and/or other materials provided with the distribution.  
    +* Neither the name of the David Beazley or Dabeaz LLC may be used to
    +  endorse or promote products derived from this software without
    +  specific prior written permission. 
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    + +
    +Polymer +homepage + + +
    +
    // Copyright (c) 2012 The Polymer Authors. All rights reserved.
    +//
    +// Redistribution and use in source and binary forms, with or without
    +// modification, are permitted provided that the following conditions are
    +// met:
    +//
    +//    * Redistributions of source code must retain the above copyright
    +// notice, this list of conditions and the following disclaimer.
    +//    * Redistributions in binary form must reproduce the above
    +// copyright notice, this list of conditions and the following disclaimer
    +// in the documentation and/or other materials provided with the
    +// distribution.
    +//    * Neither the name of Google Inc. nor the names of its
    +// contributors may be used to endorse or promote products derived from
    +// this software without specific prior written permission.
    +//
    +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +Protocol Buffers +homepage + + +
    +
    This license applies to all parts of Protocol Buffers except the following:
    +
    +  - Atomicops support for generic gcc, located in
    +    src/google/protobuf/stubs/atomicops_internals_generic_gcc.h.
    +    This file is copyrighted by Red Hat Inc.
    +
    +  - Atomicops support for AIX/POWER, located in
    +    src/google/protobuf/stubs/atomicops_internals_power.h.
    +    This file is copyrighted by Bloomberg Finance LP.
    +
    +Copyright 2014, Google Inc.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are
    +met:
    +
    +    * Redistributions of source code must retain the above copyright
    +notice, this list of conditions and the following disclaimer.
    +    * Redistributions in binary form must reproduce the above
    +copyright notice, this list of conditions and the following disclaimer
    +in the documentation and/or other materials provided with the
    +distribution.
    +    * Neither the name of Google Inc. nor the names of its
    +contributors may be used to endorse or promote products derived from
    +this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +Code generated by the Protocol Buffer compiler is owned by the owner
    +of the input file used when generating it.  This code is not
    +standalone and requires a support library to be linked with it.  This
    +support library is itself covered by the above license.
    +
    +
    +
    + +
    +pyjson5 +homepage + + +
    +
    Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "{}"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright {yyyy} {name of copyright owner}
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +
    +
    + +
    +pylint +homepage + + +
    +
    		    GNU GENERAL PUBLIC LICENSE
    +		       Version 2, June 1991
    +
    + Copyright (C) 1989, 1991 Free Software Foundation, Inc.
    +	51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
    + Everyone is permitted to copy and distribute verbatim copies
    + of this license document, but changing it is not allowed.
    +
    +			    Preamble
    +
    +  The licenses for most software are designed to take away your
    +freedom to share and change it.  By contrast, the GNU General Public
    +License is intended to guarantee your freedom to share and change free
    +software--to make sure the software is free for all its users.  This
    +General Public License applies to most of the Free Software
    +Foundation's software and to any other program whose authors commit to
    +using it.  (Some other Free Software Foundation software is covered by
    +the GNU Library General Public License instead.)  You can apply it to
    +your programs, too.
    +
    +  When we speak of free software, we are referring to freedom, not
    +price.  Our General Public Licenses are designed to make sure that you
    +have the freedom to distribute copies of free software (and charge for
    +this service if you wish), that you receive source code or can get it
    +if you want it, that you can change the software or use pieces of it
    +in new free programs; and that you know you can do these things.
    +
    +  To protect your rights, we need to make restrictions that forbid
    +anyone to deny you these rights or to ask you to surrender the rights.
    +These restrictions translate to certain responsibilities for you if you
    +distribute copies of the software, or if you modify it.
    +
    +  For example, if you distribute copies of such a program, whether
    +gratis or for a fee, you must give the recipients all the rights that
    +you have.  You must make sure that they, too, receive or can get the
    +source code.  And you must show them these terms so they know their
    +rights.
    +
    +  We protect your rights with two steps: (1) copyright the software, and
    +(2) offer you this license which gives you legal permission to copy,
    +distribute and/or modify the software.
    +
    +  Also, for each author's protection and ours, we want to make certain
    +that everyone understands that there is no warranty for this free
    +software.  If the software is modified by someone else and passed on, we
    +want its recipients to know that what they have is not the original, so
    +that any problems introduced by others will not reflect on the original
    +authors' reputations.
    +
    +  Finally, any free program is threatened constantly by software
    +patents.  We wish to avoid the danger that redistributors of a free
    +program will individually obtain patent licenses, in effect making the
    +program proprietary.  To prevent this, we have made it clear that any
    +patent must be licensed for everyone's free use or not licensed at all.
    +
    +  The precise terms and conditions for copying, distribution and
    +modification follow.
    +
    +		    GNU GENERAL PUBLIC LICENSE
    +   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
    +
    +  0. This License applies to any program or other work which contains
    +a notice placed by the copyright holder saying it may be distributed
    +under the terms of this General Public License.  The "Program", below,
    +refers to any such program or work, and a "work based on the Program"
    +means either the Program or any derivative work under copyright law:
    +that is to say, a work containing the Program or a portion of it,
    +either verbatim or with modifications and/or translated into another
    +language.  (Hereinafter, translation is included without limitation in
    +the term "modification".)  Each licensee is addressed as "you".
    +
    +Activities other than copying, distribution and modification are not
    +covered by this License; they are outside its scope.  The act of
    +running the Program is not restricted, and the output from the Program
    +is covered only if its contents constitute a work based on the
    +Program (independent of having been made by running the Program).
    +Whether that is true depends on what the Program does.
    +
    +  1. You may copy and distribute verbatim copies of the Program's
    +source code as you receive it, in any medium, provided that you
    +conspicuously and appropriately publish on each copy an appropriate
    +copyright notice and disclaimer of warranty; keep intact all the
    +notices that refer to this License and to the absence of any warranty;
    +and give any other recipients of the Program a copy of this License
    +along with the Program.
    +
    +You may charge a fee for the physical act of transferring a copy, and
    +you may at your option offer warranty protection in exchange for a fee.
    +
    +  2. You may modify your copy or copies of the Program or any portion
    +of it, thus forming a work based on the Program, and copy and
    +distribute such modifications or work under the terms of Section 1
    +above, provided that you also meet all of these conditions:
    +
    +    a) You must cause the modified files to carry prominent notices
    +    stating that you changed the files and the date of any change.
    +
    +    b) You must cause any work that you distribute or publish, that in
    +    whole or in part contains or is derived from the Program or any
    +    part thereof, to be licensed as a whole at no charge to all third
    +    parties under the terms of this License.
    +
    +    c) If the modified program normally reads commands interactively
    +    when run, you must cause it, when started running for such
    +    interactive use in the most ordinary way, to print or display an
    +    announcement including an appropriate copyright notice and a
    +    notice that there is no warranty (or else, saying that you provide
    +    a warranty) and that users may redistribute the program under
    +    these conditions, and telling the user how to view a copy of this
    +    License.  (Exception: if the Program itself is interactive but
    +    does not normally print such an announcement, your work based on
    +    the Program is not required to print an announcement.)
    +
    +These requirements apply to the modified work as a whole.  If
    +identifiable sections of that work are not derived from the Program,
    +and can be reasonably considered independent and separate works in
    +themselves, then this License, and its terms, do not apply to those
    +sections when you distribute them as separate works.  But when you
    +distribute the same sections as part of a whole which is a work based
    +on the Program, the distribution of the whole must be on the terms of
    +this License, whose permissions for other licensees extend to the
    +entire whole, and thus to each and every part regardless of who wrote it.
    +
    +Thus, it is not the intent of this section to claim rights or contest
    +your rights to work written entirely by you; rather, the intent is to
    +exercise the right to control the distribution of derivative or
    +collective works based on the Program.
    +
    +In addition, mere aggregation of another work not based on the Program
    +with the Program (or with a work based on the Program) on a volume of
    +a storage or distribution medium does not bring the other work under
    +the scope of this License.
    +
    +  3. You may copy and distribute the Program (or a work based on it,
    +under Section 2) in object code or executable form under the terms of
    +Sections 1 and 2 above provided that you also do one of the following:
    +
    +    a) Accompany it with the complete corresponding machine-readable
    +    source code, which must be distributed under the terms of Sections
    +    1 and 2 above on a medium customarily used for software interchange; or,
    +
    +    b) Accompany it with a written offer, valid for at least three
    +    years, to give any third party, for a charge no more than your
    +    cost of physically performing source distribution, a complete
    +    machine-readable copy of the corresponding source code, to be
    +    distributed under the terms of Sections 1 and 2 above on a medium
    +    customarily used for software interchange; or,
    +
    +    c) Accompany it with the information you received as to the offer
    +    to distribute corresponding source code.  (This alternative is
    +    allowed only for noncommercial distribution and only if you
    +    received the program in object code or executable form with such
    +    an offer, in accord with Subsection b above.)
    +
    +The source code for a work means the preferred form of the work for
    +making modifications to it.  For an executable work, complete source
    +code means all the source code for all modules it contains, plus any
    +associated interface definition files, plus the scripts used to
    +control compilation and installation of the executable.  However, as a
    +special exception, the source code distributed need not include
    +anything that is normally distributed (in either source or binary
    +form) with the major components (compiler, kernel, and so on) of the
    +operating system on which the executable runs, unless that component
    +itself accompanies the executable.
    +
    +If distribution of executable or object code is made by offering
    +access to copy from a designated place, then offering equivalent
    +access to copy the source code from the same place counts as
    +distribution of the source code, even though third parties are not
    +compelled to copy the source along with the object code.
    +
    +  4. You may not copy, modify, sublicense, or distribute the Program
    +except as expressly provided under this License.  Any attempt
    +otherwise to copy, modify, sublicense or distribute the Program is
    +void, and will automatically terminate your rights under this License.
    +However, parties who have received copies, or rights, from you under
    +this License will not have their licenses terminated so long as such
    +parties remain in full compliance.
    +
    +  5. You are not required to accept this License, since you have not
    +signed it.  However, nothing else grants you permission to modify or
    +distribute the Program or its derivative works.  These actions are
    +prohibited by law if you do not accept this License.  Therefore, by
    +modifying or distributing the Program (or any work based on the
    +Program), you indicate your acceptance of this License to do so, and
    +all its terms and conditions for copying, distributing or modifying
    +the Program or works based on it.
    +
    +  6. Each time you redistribute the Program (or any work based on the
    +Program), the recipient automatically receives a license from the
    +original licensor to copy, distribute or modify the Program subject to
    +these terms and conditions.  You may not impose any further
    +restrictions on the recipients' exercise of the rights granted herein.
    +You are not responsible for enforcing compliance by third parties to
    +this License.
    +
    +  7. If, as a consequence of a court judgment or allegation of patent
    +infringement or for any other reason (not limited to patent issues),
    +conditions are imposed on you (whether by court order, agreement or
    +otherwise) that contradict the conditions of this License, they do not
    +excuse you from the conditions of this License.  If you cannot
    +distribute so as to satisfy simultaneously your obligations under this
    +License and any other pertinent obligations, then as a consequence you
    +may not distribute the Program at all.  For example, if a patent
    +license would not permit royalty-free redistribution of the Program by
    +all those who receive copies directly or indirectly through you, then
    +the only way you could satisfy both it and this License would be to
    +refrain entirely from distribution of the Program.
    +
    +If any portion of this section is held invalid or unenforceable under
    +any particular circumstance, the balance of the section is intended to
    +apply and the section as a whole is intended to apply in other
    +circumstances.
    +
    +It is not the purpose of this section to induce you to infringe any
    +patents or other property right claims or to contest validity of any
    +such claims; this section has the sole purpose of protecting the
    +integrity of the free software distribution system, which is
    +implemented by public license practices.  Many people have made
    +generous contributions to the wide range of software distributed
    +through that system in reliance on consistent application of that
    +system; it is up to the author/donor to decide if he or she is willing
    +to distribute software through any other system and a licensee cannot
    +impose that choice.
    +
    +This section is intended to make thoroughly clear what is believed to
    +be a consequence of the rest of this License.
    +
    +  8. If the distribution and/or use of the Program is restricted in
    +certain countries either by patents or by copyrighted interfaces, the
    +original copyright holder who places the Program under this License
    +may add an explicit geographical distribution limitation excluding
    +those countries, so that distribution is permitted only in or among
    +countries not thus excluded.  In such case, this License incorporates
    +the limitation as if written in the body of this License.
    +
    +  9. The Free Software Foundation may publish revised and/or new versions
    +of the General Public License from time to time.  Such new versions will
    +be similar in spirit to the present version, but may differ in detail to
    +address new problems or concerns.
    +
    +Each version is given a distinguishing version number.  If the Program
    +specifies a version number of this License which applies to it and "any
    +later version", you have the option of following the terms and conditions
    +either of that version or of any later version published by the Free
    +Software Foundation.  If the Program does not specify a version number of
    +this License, you may choose any version ever published by the Free Software
    +Foundation.
    +
    +  10. If you wish to incorporate parts of the Program into other free
    +programs whose distribution conditions are different, write to the author
    +to ask for permission.  For software which is copyrighted by the Free
    +Software Foundation, write to the Free Software Foundation; we sometimes
    +make exceptions for this.  Our decision will be guided by the two goals
    +of preserving the free status of all derivatives of our free software and
    +of promoting the sharing and reuse of software generally.
    +
    +			    NO WARRANTY
    +
    +  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
    +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
    +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
    +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
    +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
    +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
    +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
    +REPAIR OR CORRECTION.
    +
    +  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
    +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
    +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
    +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
    +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
    +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
    +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
    +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
    +POSSIBILITY OF SUCH DAMAGES.
    +
    +		     END OF TERMS AND CONDITIONS
    +
    +	    How to Apply These Terms to Your New Programs
    +
    +  If you develop a new program, and you want it to be of the greatest
    +possible use to the public, the best way to achieve this is to make it
    +free software which everyone can redistribute and change under these terms.
    +
    +  To do so, attach the following notices to the program.  It is safest
    +to attach them to the start of each source file to most effectively
    +convey the exclusion of warranty; and each file should have at least
    +the "copyright" line and a pointer to where the full notice is found.
    +
    +    <one line to give the program's name and a brief idea of what it does.>
    +    Copyright (C) <year>  <name of author>
    +
    +    This program is free software; you can redistribute it and/or modify
    +    it under the terms of the GNU General Public License as published by
    +    the Free Software Foundation; either version 2 of the License, or
    +    (at your option) any later version.
    +
    +    This program is distributed in the hope that it will be useful,
    +    but WITHOUT ANY WARRANTY; without even the implied warranty of
    +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    +    GNU General Public License for more details.
    +
    +    You should have received a copy of the GNU General Public License
    +    along with this program; if not, write to the Free Software
    +    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
    +
    +
    +Also add information on how to contact you by electronic and paper mail.
    +
    +If the program is interactive, make it output a short notice like this
    +when it starts in an interactive mode:
    +
    +    Gnomovision version 69, Copyright (C) year  name of author
    +    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
    +    This is free software, and you are welcome to redistribute it
    +    under certain conditions; type `show c' for details.
    +
    +The hypothetical commands `show w' and `show c' should show the appropriate
    +parts of the General Public License.  Of course, the commands you use may
    +be called something other than `show w' and `show c'; they could even be
    +mouse-clicks or menu items--whatever suits your program.
    +
    +You should also get your employer (if you work as a programmer) or your
    +school, if any, to sign a "copyright disclaimer" for the program, if
    +necessary.  Here is a sample; alter the names:
    +
    +  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
    +  `Gnomovision' (which makes passes at compilers) written by James Hacker.
    +
    +  <signature of Ty Coon>, 1 April 1989
    +  Ty Coon, President of Vice
    +
    +This General Public License does not permit incorporating your program into
    +proprietary programs.  If your program is a subroutine library, you may
    +consider it more useful to permit linking proprietary applications with the
    +library.  If this is what you want to do, use the GNU Library General
    +Public License instead of this License.
    +
    +
    +
    + +
    +Quick Color Management System +homepage + + +
    +
    qcms
    +Copyright (C) 2009 Mozilla Corporation
    +Copyright (C) 1998-2007 Marti Maria
    +
    +Permission is hereby granted, free of charge, to any person obtaining 
    +a copy of this software and associated documentation files (the "Software"), 
    +to deal in the Software without restriction, including without limitation 
    +the rights to use, copy, modify, merge, publish, distribute, sublicense, 
    +and/or sell copies of the Software, and to permit persons to whom the Software 
    +is furnished to do so, subject to the following conditions:
    +
    +The above copyright notice and this permission notice shall be included in 
    +all copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 
    +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO 
    +THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
    +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 
    +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 
    +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 
    +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +
    +
    +
    + +
    +re2 - an efficient, principled regular expression library +homepage + + +
    +
    // Copyright (c) 2009 The RE2 Authors. All rights reserved.
    +//
    +// Redistribution and use in source and binary forms, with or without
    +// modification, are permitted provided that the following conditions are
    +// met:
    +//
    +//    * Redistributions of source code must retain the above copyright
    +// notice, this list of conditions and the following disclaimer.
    +//    * Redistributions in binary form must reproduce the above
    +// copyright notice, this list of conditions and the following disclaimer
    +// in the documentation and/or other materials provided with the
    +// distribution.
    +//    * Neither the name of Google Inc. nor the names of its
    +// contributors may be used to endorse or promote products derived from
    +// this software without specific prior written permission.
    +//
    +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +Recurrent neural network for audio noise reduction +homepage + + +
    +
    Copyright (c) 2017, Mozilla
    +Copyright (c) 2007-2017, Jean-Marc Valin
    +Copyright (c) 2005-2017, Xiph.Org Foundation
    +Copyright (c) 2003-2004, Mark Borgerding
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +
    +- Redistributions of source code must retain the above copyright
    +notice, this list of conditions and the following disclaimer.
    +
    +- Redistributions in binary form must reproduce the above copyright
    +notice, this list of conditions and the following disclaimer in the
    +documentation and/or other materials provided with the distribution.
    +
    +- Neither the name of the Xiph.Org Foundation nor the names of its
    +contributors may be used to endorse or promote products derived from
    +this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION
    +OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +sfntly +homepage + + +
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright 2011 Google Inc. All Rights Reserved.
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +
    +
    + +
    +simplejson +homepage + + +
    +
    Copyright (c) 2006 Bob Ippolito
    +
    +Permission is hereby granted, free of charge, to any person obtaining a copy of
    +this software and associated documentation files (the "Software"), to deal in
    +the Software without restriction, including without limitation the rights to
    +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
    +of the Software, and to permit persons to whom the Software is furnished to do
    +so, subject to the following conditions:
    +
    +The above copyright notice and this permission notice shall be included in all
    +copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
    +SOFTWARE.
    +
    +
    +
    + +
    +Skia +homepage + + +
    +
    // Copyright (c) 2011 Google Inc. All rights reserved.
    +//
    +// Redistribution and use in source and binary forms, with or without
    +// modification, are permitted provided that the following conditions are
    +// met:
    +//
    +//    * Redistributions of source code must retain the above copyright
    +// notice, this list of conditions and the following disclaimer.
    +//    * Redistributions in binary form must reproduce the above
    +// copyright notice, this list of conditions and the following disclaimer
    +// in the documentation and/or other materials provided with the
    +// distribution.
    +//    * Neither the name of Google Inc. nor the names of its
    +// contributors may be used to endorse or promote products derived from
    +// this software without specific prior written permission.
    +//
    +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +--------------------------------------------------------------------------------
    +
    +
    +
    + +
    +SMHasher +homepage + + +
    +
    All MurmurHash source files are placed in the public domain.
    +
    +The license below applies to all other code in SMHasher:
    +
    +Copyright (c) 2011 Google, Inc.
    +
    +Permission is hereby granted, free of charge, to any person obtaining a copy
    +of this software and associated documentation files (the "Software"), to deal
    +in the Software without restriction, including without limitation the rights
    +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    +copies of the Software, and to permit persons to whom the Software is
    +furnished to do so, subject to the following conditions:
    +
    +The above copyright notice and this permission notice shall be included in
    +all copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    +THE SOFTWARE.
    +
    +
    +
    + +
    +Snappy: A fast compressor/decompressor +homepage + + +
    +
    Copyright 2011, Google Inc.
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are
    +met:
    +
    +    * Redistributions of source code must retain the above copyright
    +notice, this list of conditions and the following disclaimer.
    +    * Redistributions in binary form must reproduce the above
    +copyright notice, this list of conditions and the following disclaimer
    +in the documentation and/or other materials provided with the
    +distribution.
    +    * Neither the name of Google Inc. nor the names of its
    +contributors may be used to endorse or promote products derived from
    +this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +===
    +
    +Some of the benchmark data in testdata/ is licensed differently:
    +
    + - fireworks.jpeg is Copyright 2013 Steinar H. Gunderson, and
    +   is licensed under the Creative Commons Attribution 3.0 license
    +   (CC-BY-3.0). See https://creativecommons.org/licenses/by/3.0/
    +   for more information.
    +
    + - kppkn.gtb is taken from the Gaviota chess tablebase set, and
    +   is licensed under the MIT License. See
    +   https://sites.google.com/site/gaviotachessengine/Home/endgame-tablebases-1
    +   for more information.
    +
    + - paper-100k.pdf is an excerpt (bytes 92160 to 194560) from the paper
    +   “Combinatorial Modeling of Chromatin Features Quantitatively Predicts DNA
    +   Replication Timing in _Drosophila_†by Federico Comoglio and Renato Paro,
    +   which is licensed under the CC-BY license. See
    +   http://www.ploscompbiol.org/static/license for more ifnormation.
    +
    + - alice29.txt, asyoulik.txt, plrabn12.txt and lcet10.txt are from Project
    +   Gutenberg. The first three have expired copyrights and are in the public
    +   domain; the latter does not have expired copyright, but is still in the
    +   public domain according to the license information
    +   (http://www.gutenberg.org/ebooks/53).
    +
    +
    +
    + +
    +Speech Dispatcher +homepage + + +
    +
    		    GNU GENERAL PUBLIC LICENSE
    +		       Version 2, June 1991
    +
    + Copyright (C) 1989, 1991 Free Software Foundation, Inc.
    +                       51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
    + Everyone is permitted to copy and distribute verbatim copies
    + of this license document, but changing it is not allowed.
    +
    +			    Preamble
    +
    +  The licenses for most software are designed to take away your
    +freedom to share and change it.  By contrast, the GNU General Public
    +License is intended to guarantee your freedom to share and change free
    +software--to make sure the software is free for all its users.  This
    +General Public License applies to most of the Free Software
    +Foundation's software and to any other program whose authors commit to
    +using it.  (Some other Free Software Foundation software is covered by
    +the GNU Library General Public License instead.)  You can apply it to
    +your programs, too.
    +
    +  When we speak of free software, we are referring to freedom, not
    +price.  Our General Public Licenses are designed to make sure that you
    +have the freedom to distribute copies of free software (and charge for
    +this service if you wish), that you receive source code or can get it
    +if you want it, that you can change the software or use pieces of it
    +in new free programs; and that you know you can do these things.
    +
    +  To protect your rights, we need to make restrictions that forbid
    +anyone to deny you these rights or to ask you to surrender the rights.
    +These restrictions translate to certain responsibilities for you if you
    +distribute copies of the software, or if you modify it.
    +
    +  For example, if you distribute copies of such a program, whether
    +gratis or for a fee, you must give the recipients all the rights that
    +you have.  You must make sure that they, too, receive or can get the
    +source code.  And you must show them these terms so they know their
    +rights.
    +
    +  We protect your rights with two steps: (1) copyright the software, and
    +(2) offer you this license which gives you legal permission to copy,
    +distribute and/or modify the software.
    +
    +  Also, for each author's protection and ours, we want to make certain
    +that everyone understands that there is no warranty for this free
    +software.  If the software is modified by someone else and passed on, we
    +want its recipients to know that what they have is not the original, so
    +that any problems introduced by others will not reflect on the original
    +authors' reputations.
    +
    +  Finally, any free program is threatened constantly by software
    +patents.  We wish to avoid the danger that redistributors of a free
    +program will individually obtain patent licenses, in effect making the
    +program proprietary.  To prevent this, we have made it clear that any
    +patent must be licensed for everyone's free use or not licensed at all.
    +
    +  The precise terms and conditions for copying, distribution and
    +modification follow.
    +
    +		    GNU GENERAL PUBLIC LICENSE
    +   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
    +
    +  0. This License applies to any program or other work which contains
    +a notice placed by the copyright holder saying it may be distributed
    +under the terms of this General Public License.  The "Program", below,
    +refers to any such program or work, and a "work based on the Program"
    +means either the Program or any derivative work under copyright law:
    +that is to say, a work containing the Program or a portion of it,
    +either verbatim or with modifications and/or translated into another
    +language.  (Hereinafter, translation is included without limitation in
    +the term "modification".)  Each licensee is addressed as "you".
    +
    +Activities other than copying, distribution and modification are not
    +covered by this License; they are outside its scope.  The act of
    +running the Program is not restricted, and the output from the Program
    +is covered only if its contents constitute a work based on the
    +Program (independent of having been made by running the Program).
    +Whether that is true depends on what the Program does.
    +
    +  1. You may copy and distribute verbatim copies of the Program's
    +source code as you receive it, in any medium, provided that you
    +conspicuously and appropriately publish on each copy an appropriate
    +copyright notice and disclaimer of warranty; keep intact all the
    +notices that refer to this License and to the absence of any warranty;
    +and give any other recipients of the Program a copy of this License
    +along with the Program.
    +
    +You may charge a fee for the physical act of transferring a copy, and
    +you may at your option offer warranty protection in exchange for a fee.
    +
    +  2. You may modify your copy or copies of the Program or any portion
    +of it, thus forming a work based on the Program, and copy and
    +distribute such modifications or work under the terms of Section 1
    +above, provided that you also meet all of these conditions:
    +
    +    a) You must cause the modified files to carry prominent notices
    +    stating that you changed the files and the date of any change.
    +
    +    b) You must cause any work that you distribute or publish, that in
    +    whole or in part contains or is derived from the Program or any
    +    part thereof, to be licensed as a whole at no charge to all third
    +    parties under the terms of this License.
    +
    +    c) If the modified program normally reads commands interactively
    +    when run, you must cause it, when started running for such
    +    interactive use in the most ordinary way, to print or display an
    +    announcement including an appropriate copyright notice and a
    +    notice that there is no warranty (or else, saying that you provide
    +    a warranty) and that users may redistribute the program under
    +    these conditions, and telling the user how to view a copy of this
    +    License.  (Exception: if the Program itself is interactive but
    +    does not normally print such an announcement, your work based on
    +    the Program is not required to print an announcement.)
    +
    +These requirements apply to the modified work as a whole.  If
    +identifiable sections of that work are not derived from the Program,
    +and can be reasonably considered independent and separate works in
    +themselves, then this License, and its terms, do not apply to those
    +sections when you distribute them as separate works.  But when you
    +distribute the same sections as part of a whole which is a work based
    +on the Program, the distribution of the whole must be on the terms of
    +this License, whose permissions for other licensees extend to the
    +entire whole, and thus to each and every part regardless of who wrote it.
    +
    +Thus, it is not the intent of this section to claim rights or contest
    +your rights to work written entirely by you; rather, the intent is to
    +exercise the right to control the distribution of derivative or
    +collective works based on the Program.
    +
    +In addition, mere aggregation of another work not based on the Program
    +with the Program (or with a work based on the Program) on a volume of
    +a storage or distribution medium does not bring the other work under
    +the scope of this License.
    +
    +  3. You may copy and distribute the Program (or a work based on it,
    +under Section 2) in object code or executable form under the terms of
    +Sections 1 and 2 above provided that you also do one of the following:
    +
    +    a) Accompany it with the complete corresponding machine-readable
    +    source code, which must be distributed under the terms of Sections
    +    1 and 2 above on a medium customarily used for software interchange; or,
    +
    +    b) Accompany it with a written offer, valid for at least three
    +    years, to give any third party, for a charge no more than your
    +    cost of physically performing source distribution, a complete
    +    machine-readable copy of the corresponding source code, to be
    +    distributed under the terms of Sections 1 and 2 above on a medium
    +    customarily used for software interchange; or,
    +
    +    c) Accompany it with the information you received as to the offer
    +    to distribute corresponding source code.  (This alternative is
    +    allowed only for noncommercial distribution and only if you
    +    received the program in object code or executable form with such
    +    an offer, in accord with Subsection b above.)
    +
    +The source code for a work means the preferred form of the work for
    +making modifications to it.  For an executable work, complete source
    +code means all the source code for all modules it contains, plus any
    +associated interface definition files, plus the scripts used to
    +control compilation and installation of the executable.  However, as a
    +special exception, the source code distributed need not include
    +anything that is normally distributed (in either source or binary
    +form) with the major components (compiler, kernel, and so on) of the
    +operating system on which the executable runs, unless that component
    +itself accompanies the executable.
    +
    +If distribution of executable or object code is made by offering
    +access to copy from a designated place, then offering equivalent
    +access to copy the source code from the same place counts as
    +distribution of the source code, even though third parties are not
    +compelled to copy the source along with the object code.
    +
    +  4. You may not copy, modify, sublicense, or distribute the Program
    +except as expressly provided under this License.  Any attempt
    +otherwise to copy, modify, sublicense or distribute the Program is
    +void, and will automatically terminate your rights under this License.
    +However, parties who have received copies, or rights, from you under
    +this License will not have their licenses terminated so long as such
    +parties remain in full compliance.
    +
    +  5. You are not required to accept this License, since you have not
    +signed it.  However, nothing else grants you permission to modify or
    +distribute the Program or its derivative works.  These actions are
    +prohibited by law if you do not accept this License.  Therefore, by
    +modifying or distributing the Program (or any work based on the
    +Program), you indicate your acceptance of this License to do so, and
    +all its terms and conditions for copying, distributing or modifying
    +the Program or works based on it.
    +
    +  6. Each time you redistribute the Program (or any work based on the
    +Program), the recipient automatically receives a license from the
    +original licensor to copy, distribute or modify the Program subject to
    +these terms and conditions.  You may not impose any further
    +restrictions on the recipients' exercise of the rights granted herein.
    +You are not responsible for enforcing compliance by third parties to
    +this License.
    +
    +  7. If, as a consequence of a court judgment or allegation of patent
    +infringement or for any other reason (not limited to patent issues),
    +conditions are imposed on you (whether by court order, agreement or
    +otherwise) that contradict the conditions of this License, they do not
    +excuse you from the conditions of this License.  If you cannot
    +distribute so as to satisfy simultaneously your obligations under this
    +License and any other pertinent obligations, then as a consequence you
    +may not distribute the Program at all.  For example, if a patent
    +license would not permit royalty-free redistribution of the Program by
    +all those who receive copies directly or indirectly through you, then
    +the only way you could satisfy both it and this License would be to
    +refrain entirely from distribution of the Program.
    +
    +If any portion of this section is held invalid or unenforceable under
    +any particular circumstance, the balance of the section is intended to
    +apply and the section as a whole is intended to apply in other
    +circumstances.
    +
    +It is not the purpose of this section to induce you to infringe any
    +patents or other property right claims or to contest validity of any
    +such claims; this section has the sole purpose of protecting the
    +integrity of the free software distribution system, which is
    +implemented by public license practices.  Many people have made
    +generous contributions to the wide range of software distributed
    +through that system in reliance on consistent application of that
    +system; it is up to the author/donor to decide if he or she is willing
    +to distribute software through any other system and a licensee cannot
    +impose that choice.
    +
    +This section is intended to make thoroughly clear what is believed to
    +be a consequence of the rest of this License.
    +
    +  8. If the distribution and/or use of the Program is restricted in
    +certain countries either by patents or by copyrighted interfaces, the
    +original copyright holder who places the Program under this License
    +may add an explicit geographical distribution limitation excluding
    +those countries, so that distribution is permitted only in or among
    +countries not thus excluded.  In such case, this License incorporates
    +the limitation as if written in the body of this License.
    +
    +  9. The Free Software Foundation may publish revised and/or new versions
    +of the General Public License from time to time.  Such new versions will
    +be similar in spirit to the present version, but may differ in detail to
    +address new problems or concerns.
    +
    +Each version is given a distinguishing version number.  If the Program
    +specifies a version number of this License which applies to it and "any
    +later version", you have the option of following the terms and conditions
    +either of that version or of any later version published by the Free
    +Software Foundation.  If the Program does not specify a version number of
    +this License, you may choose any version ever published by the Free Software
    +Foundation.
    +
    +  10. If you wish to incorporate parts of the Program into other free
    +programs whose distribution conditions are different, write to the author
    +to ask for permission.  For software which is copyrighted by the Free
    +Software Foundation, write to the Free Software Foundation; we sometimes
    +make exceptions for this.  Our decision will be guided by the two goals
    +of preserving the free status of all derivatives of our free software and
    +of promoting the sharing and reuse of software generally.
    +
    +			    NO WARRANTY
    +
    +  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
    +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
    +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
    +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
    +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
    +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
    +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
    +REPAIR OR CORRECTION.
    +
    +  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
    +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
    +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
    +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
    +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
    +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
    +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
    +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
    +POSSIBILITY OF SUCH DAMAGES.
    +
    +		     END OF TERMS AND CONDITIONS
    +
    +	    How to Apply These Terms to Your New Programs
    +
    +  If you develop a new program, and you want it to be of the greatest
    +possible use to the public, the best way to achieve this is to make it
    +free software which everyone can redistribute and change under these terms.
    +
    +  To do so, attach the following notices to the program.  It is safest
    +to attach them to the start of each source file to most effectively
    +convey the exclusion of warranty; and each file should have at least
    +the "copyright" line and a pointer to where the full notice is found.
    +
    +    <one line to give the program's name and a brief idea of what it does.>
    +    Copyright (C) <year>  <name of author>
    +
    +    This program is free software; you can redistribute it and/or modify
    +    it under the terms of the GNU General Public License as published by
    +    the Free Software Foundation; either version 2 of the License, or
    +    (at your option) any later version.
    +
    +    This program is distributed in the hope that it will be useful,
    +    but WITHOUT ANY WARRANTY; without even the implied warranty of
    +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    +    GNU General Public License for more details.
    +
    +    You should have received a copy of the GNU General Public License
    +    along with this program; if not, write to the Free Software
    +    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
    +
    +
    +Also add information on how to contact you by electronic and paper mail.
    +
    +If the program is interactive, make it output a short notice like this
    +when it starts in an interactive mode:
    +
    +    Gnomovision version 69, Copyright (C) year name of author
    +    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
    +    This is free software, and you are welcome to redistribute it
    +    under certain conditions; type `show c' for details.
    +
    +The hypothetical commands `show w' and `show c' should show the appropriate
    +parts of the General Public License.  Of course, the commands you use may
    +be called something other than `show w' and `show c'; they could even be
    +mouse-clicks or menu items--whatever suits your program.
    +
    +You should also get your employer (if you work as a programmer) or your
    +school, if any, to sign a "copyright disclaimer" for the program, if
    +necessary.  Here is a sample; alter the names:
    +
    +  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
    +  `Gnomovision' (which makes passes at compilers) written by James Hacker.
    +
    +  <signature of Ty Coon>, 1 April 1989
    +  Ty Coon, President of Vice
    +
    +This General Public License does not permit incorporating your program into
    +proprietary programs.  If your program is a subroutine library, you may
    +consider it more useful to permit linking proprietary applications with the
    +library.  If this is what you want to do, use the GNU Library General
    +Public License instead of this License.
    +
    +
    +
    +
    +
    +                  GNU LESSER GENERAL PUBLIC LICENSE
    +                       Version 2.1, February 1999
    +
    + Copyright (C) 1991, 1999 Free Software Foundation, Inc.
    +	51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
    + Everyone is permitted to copy and distribute verbatim copies
    + of this license document, but changing it is not allowed.
    +
    +[This is the first released version of the Lesser GPL.  It also counts
    + as the successor of the GNU Library Public License, version 2, hence
    + the version number 2.1.]
    +
    +                            Preamble
    +
    +  The licenses for most software are designed to take away your
    +freedom to share and change it.  By contrast, the GNU General Public
    +Licenses are intended to guarantee your freedom to share and change
    +free software--to make sure the software is free for all its users.
    +
    +  This license, the Lesser General Public License, applies to some
    +specially designated software packages--typically libraries--of the
    +Free Software Foundation and other authors who decide to use it.  You
    +can use it too, but we suggest you first think carefully about whether
    +this license or the ordinary General Public License is the better
    +strategy to use in any particular case, based on the explanations
    +below.
    +
    +  When we speak of free software, we are referring to freedom of use,
    +not price.  Our General Public Licenses are designed to make sure that
    +you have the freedom to distribute copies of free software (and charge
    +for this service if you wish); that you receive source code or can get
    +it if you want it; that you can change the software and use pieces of
    +it in new free programs; and that you are informed that you can do
    +these things.
    +
    +  To protect your rights, we need to make restrictions that forbid
    +distributors to deny you these rights or to ask you to surrender these
    +rights.  These restrictions translate to certain responsibilities for
    +you if you distribute copies of the library or if you modify it.
    +
    +  For example, if you distribute copies of the library, whether gratis
    +or for a fee, you must give the recipients all the rights that we gave
    +you.  You must make sure that they, too, receive or can get the source
    +code.  If you link other code with the library, you must provide
    +complete object files to the recipients, so that they can relink them
    +with the library after making changes to the library and recompiling
    +it.  And you must show them these terms so they know their rights.
    +
    +  We protect your rights with a two-step method: (1) we copyright the
    +library, and (2) we offer you this license, which gives you legal
    +permission to copy, distribute and/or modify the library.
    +
    +  To protect each distributor, we want to make it very clear that
    +there is no warranty for the free library.  Also, if the library is
    +modified by someone else and passed on, the recipients should know
    +that what they have is not the original version, so that the original
    +author's reputation will not be affected by problems that might be
    +introduced by others.
    +
    +  Finally, software patents pose a constant threat to the existence of
    +any free program.  We wish to make sure that a company cannot
    +effectively restrict the users of a free program by obtaining a
    +restrictive license from a patent holder.  Therefore, we insist that
    +any patent license obtained for a version of the library must be
    +consistent with the full freedom of use specified in this license.
    +
    +  Most GNU software, including some libraries, is covered by the
    +ordinary GNU General Public License.  This license, the GNU Lesser
    +General Public License, applies to certain designated libraries, and
    +is quite different from the ordinary General Public License.  We use
    +this license for certain libraries in order to permit linking those
    +libraries into non-free programs.
    +
    +  When a program is linked with a library, whether statically or using
    +a shared library, the combination of the two is legally speaking a
    +combined work, a derivative of the original library.  The ordinary
    +General Public License therefore permits such linking only if the
    +entire combination fits its criteria of freedom.  The Lesser General
    +Public License permits more lax criteria for linking other code with
    +the library.
    +
    +  We call this license the "Lesser" General Public License because it
    +does Less to protect the user's freedom than the ordinary General
    +Public License.  It also provides other free software developers Less
    +of an advantage over competing non-free programs.  These disadvantages
    +are the reason we use the ordinary General Public License for many
    +libraries.  However, the Lesser license provides advantages in certain
    +special circumstances.
    +
    +  For example, on rare occasions, there may be a special need to
    +encourage the widest possible use of a certain library, so that it
    +becomes a de-facto standard.  To achieve this, non-free programs must
    +be allowed to use the library.  A more frequent case is that a free
    +library does the same job as widely used non-free libraries.  In this
    +case, there is little to gain by limiting the free library to free
    +software only, so we use the Lesser General Public License.
    +
    +  In other cases, permission to use a particular library in non-free
    +programs enables a greater number of people to use a large body of
    +free software.  For example, permission to use the GNU C Library in
    +non-free programs enables many more people to use the whole GNU
    +operating system, as well as its variant, the GNU/Linux operating
    +system.
    +
    +  Although the Lesser General Public License is Less protective of the
    +users' freedom, it does ensure that the user of a program that is
    +linked with the Library has the freedom and the wherewithal to run
    +that program using a modified version of the Library.
    +
    +  The precise terms and conditions for copying, distribution and
    +modification follow.  Pay close attention to the difference between a
    +"work based on the library" and a "work that uses the library".  The
    +former contains code derived from the library, whereas the latter must
    +be combined with the library in order to run.
    +
    +                  GNU LESSER GENERAL PUBLIC LICENSE
    +   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
    +
    +  0. This License Agreement applies to any software library or other
    +program which contains a notice placed by the copyright holder or
    +other authorized party saying it may be distributed under the terms of
    +this Lesser General Public License (also called "this License").
    +Each licensee is addressed as "you".
    +
    +  A "library" means a collection of software functions and/or data
    +prepared so as to be conveniently linked with application programs
    +(which use some of those functions and data) to form executables.
    +
    +  The "Library", below, refers to any such software library or work
    +which has been distributed under these terms.  A "work based on the
    +Library" means either the Library or any derivative work under
    +copyright law: that is to say, a work containing the Library or a
    +portion of it, either verbatim or with modifications and/or translated
    +straightforwardly into another language.  (Hereinafter, translation is
    +included without limitation in the term "modification".)
    +
    +  "Source code" for a work means the preferred form of the work for
    +making modifications to it.  For a library, complete source code means
    +all the source code for all modules it contains, plus any associated
    +interface definition files, plus the scripts used to control
    +compilation and installation of the library.
    +
    +  Activities other than copying, distribution and modification are not
    +covered by this License; they are outside its scope.  The act of
    +running a program using the Library is not restricted, and output from
    +such a program is covered only if its contents constitute a work based
    +on the Library (independent of the use of the Library in a tool for
    +writing it).  Whether that is true depends on what the Library does
    +and what the program that uses the Library does.
    +
    +  1. You may copy and distribute verbatim copies of the Library's
    +complete source code as you receive it, in any medium, provided that
    +you conspicuously and appropriately publish on each copy an
    +appropriate copyright notice and disclaimer of warranty; keep intact
    +all the notices that refer to this License and to the absence of any
    +warranty; and distribute a copy of this License along with the
    +Library.
    +
    +  You may charge a fee for the physical act of transferring a copy,
    +and you may at your option offer warranty protection in exchange for a
    +fee.
    +
    +  2. You may modify your copy or copies of the Library or any portion
    +of it, thus forming a work based on the Library, and copy and
    +distribute such modifications or work under the terms of Section 1
    +above, provided that you also meet all of these conditions:
    +
    +    a) The modified work must itself be a software library.
    +
    +    b) You must cause the files modified to carry prominent notices
    +    stating that you changed the files and the date of any change.
    +
    +    c) You must cause the whole of the work to be licensed at no
    +    charge to all third parties under the terms of this License.
    +
    +    d) If a facility in the modified Library refers to a function or a
    +    table of data to be supplied by an application program that uses
    +    the facility, other than as an argument passed when the facility
    +    is invoked, then you must make a good faith effort to ensure that,
    +    in the event an application does not supply such function or
    +    table, the facility still operates, and performs whatever part of
    +    its purpose remains meaningful.
    +
    +    (For example, a function in a library to compute square roots has
    +    a purpose that is entirely well-defined independent of the
    +    application.  Therefore, Subsection 2d requires that any
    +    application-supplied function or table used by this function must
    +    be optional: if the application does not supply it, the square
    +    root function must still compute square roots.)
    +
    +These requirements apply to the modified work as a whole.  If
    +identifiable sections of that work are not derived from the Library,
    +and can be reasonably considered independent and separate works in
    +themselves, then this License, and its terms, do not apply to those
    +sections when you distribute them as separate works.  But when you
    +distribute the same sections as part of a whole which is a work based
    +on the Library, the distribution of the whole must be on the terms of
    +this License, whose permissions for other licensees extend to the
    +entire whole, and thus to each and every part regardless of who wrote
    +it.
    +
    +Thus, it is not the intent of this section to claim rights or contest
    +your rights to work written entirely by you; rather, the intent is to
    +exercise the right to control the distribution of derivative or
    +collective works based on the Library.
    +
    +In addition, mere aggregation of another work not based on the Library
    +with the Library (or with a work based on the Library) on a volume of
    +a storage or distribution medium does not bring the other work under
    +the scope of this License.
    +
    +  3. You may opt to apply the terms of the ordinary GNU General Public
    +License instead of this License to a given copy of the Library.  To do
    +this, you must alter all the notices that refer to this License, so
    +that they refer to the ordinary GNU General Public License, version 2,
    +instead of to this License.  (If a newer version than version 2 of the
    +ordinary GNU General Public License has appeared, then you can specify
    +that version instead if you wish.)  Do not make any other change in
    +these notices.
    +
    +  Once this change is made in a given copy, it is irreversible for
    +that copy, so the ordinary GNU General Public License applies to all
    +subsequent copies and derivative works made from that copy.
    +
    +  This option is useful when you wish to copy part of the code of
    +the Library into a program that is not a library.
    +
    +  4. You may copy and distribute the Library (or a portion or
    +derivative of it, under Section 2) in object code or executable form
    +under the terms of Sections 1 and 2 above provided that you accompany
    +it with the complete corresponding machine-readable source code, which
    +must be distributed under the terms of Sections 1 and 2 above on a
    +medium customarily used for software interchange.
    +
    +  If distribution of object code is made by offering access to copy
    +from a designated place, then offering equivalent access to copy the
    +source code from the same place satisfies the requirement to
    +distribute the source code, even though third parties are not
    +compelled to copy the source along with the object code.
    +
    +  5. A program that contains no derivative of any portion of the
    +Library, but is designed to work with the Library by being compiled or
    +linked with it, is called a "work that uses the Library".  Such a
    +work, in isolation, is not a derivative work of the Library, and
    +therefore falls outside the scope of this License.
    +
    +  However, linking a "work that uses the Library" with the Library
    +creates an executable that is a derivative of the Library (because it
    +contains portions of the Library), rather than a "work that uses the
    +library".  The executable is therefore covered by this License.
    +Section 6 states terms for distribution of such executables.
    +
    +  When a "work that uses the Library" uses material from a header file
    +that is part of the Library, the object code for the work may be a
    +derivative work of the Library even though the source code is not.
    +Whether this is true is especially significant if the work can be
    +linked without the Library, or if the work is itself a library.  The
    +threshold for this to be true is not precisely defined by law.
    +
    +  If such an object file uses only numerical parameters, data
    +structure layouts and accessors, and small macros and small inline
    +functions (ten lines or less in length), then the use of the object
    +file is unrestricted, regardless of whether it is legally a derivative
    +work.  (Executables containing this object code plus portions of the
    +Library will still fall under Section 6.)
    +
    +  Otherwise, if the work is a derivative of the Library, you may
    +distribute the object code for the work under the terms of Section 6.
    +Any executables containing that work also fall under Section 6,
    +whether or not they are linked directly with the Library itself.
    +
    +  6. As an exception to the Sections above, you may also combine or
    +link a "work that uses the Library" with the Library to produce a
    +work containing portions of the Library, and distribute that work
    +under terms of your choice, provided that the terms permit
    +modification of the work for the customer's own use and reverse
    +engineering for debugging such modifications.
    +
    +  You must give prominent notice with each copy of the work that the
    +Library is used in it and that the Library and its use are covered by
    +this License.  You must supply a copy of this License.  If the work
    +during execution displays copyright notices, you must include the
    +copyright notice for the Library among them, as well as a reference
    +directing the user to the copy of this License.  Also, you must do one
    +of these things:
    +
    +    a) Accompany the work with the complete corresponding
    +    machine-readable source code for the Library including whatever
    +    changes were used in the work (which must be distributed under
    +    Sections 1 and 2 above); and, if the work is an executable linked
    +    with the Library, with the complete machine-readable "work that
    +    uses the Library", as object code and/or source code, so that the
    +    user can modify the Library and then relink to produce a modified
    +    executable containing the modified Library.  (It is understood
    +    that the user who changes the contents of definitions files in the
    +    Library will not necessarily be able to recompile the application
    +    to use the modified definitions.)
    +
    +    b) Use a suitable shared library mechanism for linking with the
    +    Library.  A suitable mechanism is one that (1) uses at run time a
    +    copy of the library already present on the user's computer system,
    +    rather than copying library functions into the executable, and (2)
    +    will operate properly with a modified version of the library, if
    +    the user installs one, as long as the modified version is
    +    interface-compatible with the version that the work was made with.
    +
    +    c) Accompany the work with a written offer, valid for at least
    +    three years, to give the same user the materials specified in
    +    Subsection 6a, above, for a charge no more than the cost of
    +    performing this distribution.
    +
    +    d) If distribution of the work is made by offering access to copy
    +    from a designated place, offer equivalent access to copy the above
    +    specified materials from the same place.
    +
    +    e) Verify that the user has already received a copy of these
    +    materials or that you have already sent this user a copy.
    +
    +  For an executable, the required form of the "work that uses the
    +Library" must include any data and utility programs needed for
    +reproducing the executable from it.  However, as a special exception,
    +the materials to be distributed need not include anything that is
    +normally distributed (in either source or binary form) with the major
    +components (compiler, kernel, and so on) of the operating system on
    +which the executable runs, unless that component itself accompanies
    +the executable.
    +
    +  It may happen that this requirement contradicts the license
    +restrictions of other proprietary libraries that do not normally
    +accompany the operating system.  Such a contradiction means you cannot
    +use both them and the Library together in an executable that you
    +distribute.
    +
    +  7. You may place library facilities that are a work based on the
    +Library side-by-side in a single library together with other library
    +facilities not covered by this License, and distribute such a combined
    +library, provided that the separate distribution of the work based on
    +the Library and of the other library facilities is otherwise
    +permitted, and provided that you do these two things:
    +
    +    a) Accompany the combined library with a copy of the same work
    +    based on the Library, uncombined with any other library
    +    facilities.  This must be distributed under the terms of the
    +    Sections above.
    +
    +    b) Give prominent notice with the combined library of the fact
    +    that part of it is a work based on the Library, and explaining
    +    where to find the accompanying uncombined form of the same work.
    +
    +  8. You may not copy, modify, sublicense, link with, or distribute
    +the Library except as expressly provided under this License.  Any
    +attempt otherwise to copy, modify, sublicense, link with, or
    +distribute the Library is void, and will automatically terminate your
    +rights under this License.  However, parties who have received copies,
    +or rights, from you under this License will not have their licenses
    +terminated so long as such parties remain in full compliance.
    +
    +  9. You are not required to accept this License, since you have not
    +signed it.  However, nothing else grants you permission to modify or
    +distribute the Library or its derivative works.  These actions are
    +prohibited by law if you do not accept this License.  Therefore, by
    +modifying or distributing the Library (or any work based on the
    +Library), you indicate your acceptance of this License to do so, and
    +all its terms and conditions for copying, distributing or modifying
    +the Library or works based on it.
    +
    +  10. Each time you redistribute the Library (or any work based on the
    +Library), the recipient automatically receives a license from the
    +original licensor to copy, distribute, link with or modify the Library
    +subject to these terms and conditions.  You may not impose any further
    +restrictions on the recipients' exercise of the rights granted herein.
    +You are not responsible for enforcing compliance by third parties with
    +this License.
    +
    +  11. If, as a consequence of a court judgment or allegation of patent
    +infringement or for any other reason (not limited to patent issues),
    +conditions are imposed on you (whether by court order, agreement or
    +otherwise) that contradict the conditions of this License, they do not
    +excuse you from the conditions of this License.  If you cannot
    +distribute so as to satisfy simultaneously your obligations under this
    +License and any other pertinent obligations, then as a consequence you
    +may not distribute the Library at all.  For example, if a patent
    +license would not permit royalty-free redistribution of the Library by
    +all those who receive copies directly or indirectly through you, then
    +the only way you could satisfy both it and this License would be to
    +refrain entirely from distribution of the Library.
    +
    +If any portion of this section is held invalid or unenforceable under
    +any particular circumstance, the balance of the section is intended to
    +apply, and the section as a whole is intended to apply in other
    +circumstances.
    +
    +It is not the purpose of this section to induce you to infringe any
    +patents or other property right claims or to contest validity of any
    +such claims; this section has the sole purpose of protecting the
    +integrity of the free software distribution system which is
    +implemented by public license practices.  Many people have made
    +generous contributions to the wide range of software distributed
    +through that system in reliance on consistent application of that
    +system; it is up to the author/donor to decide if he or she is willing
    +to distribute software through any other system and a licensee cannot
    +impose that choice.
    +
    +This section is intended to make thoroughly clear what is believed to
    +be a consequence of the rest of this License.
    +
    +  12. If the distribution and/or use of the Library is restricted in
    +certain countries either by patents or by copyrighted interfaces, the
    +original copyright holder who places the Library under this License
    +may add an explicit geographical distribution limitation excluding those
    +countries, so that distribution is permitted only in or among
    +countries not thus excluded.  In such case, this License incorporates
    +the limitation as if written in the body of this License.
    +
    +  13. The Free Software Foundation may publish revised and/or new
    +versions of the Lesser General Public License from time to time.
    +Such new versions will be similar in spirit to the present version,
    +but may differ in detail to address new problems or concerns.
    +
    +Each version is given a distinguishing version number.  If the Library
    +specifies a version number of this License which applies to it and
    +"any later version", you have the option of following the terms and
    +conditions either of that version or of any later version published by
    +the Free Software Foundation.  If the Library does not specify a
    +license version number, you may choose any version ever published by
    +the Free Software Foundation.
    +
    +  14. If you wish to incorporate parts of the Library into other free
    +programs whose distribution conditions are incompatible with these,
    +write to the author to ask for permission.  For software which is
    +copyrighted by the Free Software Foundation, write to the Free
    +Software Foundation; we sometimes make exceptions for this.  Our
    +decision will be guided by the two goals of preserving the free status
    +of all derivatives of our free software and of promoting the sharing
    +and reuse of software generally.
    +
    +                            NO WARRANTY
    +
    +  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
    +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
    +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
    +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
    +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    +PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
    +LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
    +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
    +
    +  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
    +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
    +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
    +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
    +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
    +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
    +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
    +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
    +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
    +DAMAGES.
    +
    +                     END OF TERMS AND CONDITIONS
    +
    +
    +
    +
    +
    +
    + +
    +SPIR-V Tools +homepage + + +
    +
    Copyright (c) 2015-2016 The Khronos Group Inc.
    +
    +Permission is hereby granted, free of charge, to any person obtaining a
    +copy of this software and/or associated documentation files (the
    +"Materials"), to deal in the Materials without restriction, including
    +without limitation the rights to use, copy, modify, merge, publish,
    +distribute, sublicense, and/or sell copies of the Materials, and to
    +permit persons to whom the Materials are furnished to do so, subject to
    +the following conditions:
    +
    +The above copyright notice and this permission notice shall be included
    +in all copies or substantial portions of the Materials.
    +
    +MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS
    +KHRONOS STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS
    +SPECIFICATIONS AND HEADER INFORMATION ARE LOCATED AT
    +   https://www.khronos.org/registry/
    +
    +THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
    +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
    +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
    +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
    +MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
    +
    +
    +
    + +
    +sqlite +homepage + + +
    +
    The author disclaims copyright to this source code.  In place of
    +a legal notice, here is a blessing:
    +
    +   May you do good and not evil.
    +   May you find forgiveness for yourself and forgive others.
    +   May you share freely, never taking more than you give.
    +
    +
    +
    + +
    +Strongtalk +homepage + + +
    +
    Copyright (c) 1994-2006 Sun Microsystems Inc.
    +All Rights Reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are
    +met:
    +
    +- Redistributions of source code must retain the above copyright notice,
    +this list of conditions and the following disclaimer.
    +
    +- Redistribution in binary form must reproduce the above copyright
    +notice, this list of conditions and the following disclaimer in the
    +documentation and/or other materials provided with the distribution.
    +
    +- Neither the name of Sun Microsystems or the names of contributors may
    +be used to endorse or promote products derived from this software without
    +specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
    +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
    +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
    +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
    +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
    +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
    +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
    +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
    +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +Sudden Motion Sensor library +homepage + + +
    +
    SMSLib Sudden Motion Sensor Access Library
    +Copyright (c) 2010 Suitable Systems
    +All rights reserved.
    +
    +Developed by: Daniel Griscom
    +              Suitable Systems
    +              http://www.suitable.com
    +
    +Permission is hereby granted, free of charge, to any person obtaining a
    +copy of this software and associated documentation files (the
    +"Software"), to deal with the Software without restriction, including
    +without limitation the rights to use, copy, modify, merge, publish,
    +distribute, sublicense, and/or sell copies of the Software, and to
    +permit persons to whom the Software is furnished to do so, subject to
    +the following conditions:
    +
    +- Redistributions of source code must retain the above copyright notice,
    +this list of conditions and the following disclaimers.
    +
    +- Redistributions in binary form must reproduce the above copyright
    +notice, this list of conditions and the following disclaimers in the
    +documentation and/or other materials provided with the distribution.
    +
    +- Neither the names of Suitable Systems nor the names of its
    +contributors may be used to endorse or promote products derived from
    +this Software without specific prior written permission.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
    +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
    +IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR
    +ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
    +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
    +SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE SOFTWARE.
    +
    +For more information about SMSLib, see
    +   <http://www.suitable.com/tools/smslib.html>
    +or contact
    +   Daniel Griscom
    +   Suitable Systems
    +   1 Centre Street, Suite 204
    +   Wakefield, MA 01880
    +   (781) 665-0053
    +
    +
    +
    + +
    +SwiftShader +homepage + + +
    +
    
    +                                 Apache License
    
    +                           Version 2.0, January 2004
    
    +                        http://www.apache.org/licenses/
    
    +
    
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    
    +
    
    +   1. Definitions.
    
    +
    
    +      "License" shall mean the terms and conditions for use, reproduction,
    
    +      and distribution as defined by Sections 1 through 9 of this document.
    
    +
    
    +      "Licensor" shall mean the copyright owner or entity authorized by
    
    +      the copyright owner that is granting the License.
    
    +
    
    +      "Legal Entity" shall mean the union of the acting entity and all
    
    +      other entities that control, are controlled by, or are under common
    
    +      control with that entity. For the purposes of this definition,
    
    +      "control" means (i) the power, direct or indirect, to cause the
    
    +      direction or management of such entity, whether by contract or
    
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    
    +
    
    +      "You" (or "Your") shall mean an individual or Legal Entity
    
    +      exercising permissions granted by this License.
    
    +
    
    +      "Source" form shall mean the preferred form for making modifications,
    
    +      including but not limited to software source code, documentation
    
    +      source, and configuration files.
    
    +
    
    +      "Object" form shall mean any form resulting from mechanical
    
    +      transformation or translation of a Source form, including but
    
    +      not limited to compiled object code, generated documentation,
    
    +      and conversions to other media types.
    
    +
    
    +      "Work" shall mean the work of authorship, whether in Source or
    
    +      Object form, made available under the License, as indicated by a
    
    +      copyright notice that is included in or attached to the work
    
    +      (an example is provided in the Appendix below).
    
    +
    
    +      "Derivative Works" shall mean any work, whether in Source or Object
    
    +      form, that is based on (or derived from) the Work and for which the
    
    +      editorial revisions, annotations, elaborations, or other modifications
    
    +      represent, as a whole, an original work of authorship. For the purposes
    
    +      of this License, Derivative Works shall not include works that remain
    
    +      separable from, or merely link (or bind by name) to the interfaces of,
    
    +      the Work and Derivative Works thereof.
    
    +
    
    +      "Contribution" shall mean any work of authorship, including
    
    +      the original version of the Work and any modifications or additions
    
    +      to that Work or Derivative Works thereof, that is intentionally
    
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    
    +      or by an individual or Legal Entity authorized to submit on behalf of
    
    +      the copyright owner. For the purposes of this definition, "submitted"
    
    +      means any form of electronic, verbal, or written communication sent
    
    +      to the Licensor or its representatives, including but not limited to
    
    +      communication on electronic mailing lists, source code control systems,
    
    +      and issue tracking systems that are managed by, or on behalf of, the
    
    +      Licensor for the purpose of discussing and improving the Work, but
    
    +      excluding communication that is conspicuously marked or otherwise
    
    +      designated in writing by the copyright owner as "Not a Contribution."
    
    +
    
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    
    +      on behalf of whom a Contribution has been received by Licensor and
    
    +      subsequently incorporated within the Work.
    
    +
    
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    
    +      this License, each Contributor hereby grants to You a perpetual,
    
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    
    +      copyright license to reproduce, prepare Derivative Works of,
    
    +      publicly display, publicly perform, sublicense, and distribute the
    
    +      Work and such Derivative Works in Source or Object form.
    
    +
    
    +   3. Grant of Patent License. Subject to the terms and conditions of
    
    +      this License, each Contributor hereby grants to You a perpetual,
    
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    
    +      (except as stated in this section) patent license to make, have made,
    
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    
    +      where such license applies only to those patent claims licensable
    
    +      by such Contributor that are necessarily infringed by their
    
    +      Contribution(s) alone or by combination of their Contribution(s)
    
    +      with the Work to which such Contribution(s) was submitted. If You
    
    +      institute patent litigation against any entity (including a
    
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    
    +      or a Contribution incorporated within the Work constitutes direct
    
    +      or contributory patent infringement, then any patent licenses
    
    +      granted to You under this License for that Work shall terminate
    
    +      as of the date such litigation is filed.
    
    +
    
    +   4. Redistribution. You may reproduce and distribute copies of the
    
    +      Work or Derivative Works thereof in any medium, with or without
    
    +      modifications, and in Source or Object form, provided that You
    
    +      meet the following conditions:
    
    +
    
    +      (a) You must give any other recipients of the Work or
    
    +          Derivative Works a copy of this License; and
    
    +
    
    +      (b) You must cause any modified files to carry prominent notices
    
    +          stating that You changed the files; and
    
    +
    
    +      (c) You must retain, in the Source form of any Derivative Works
    
    +          that You distribute, all copyright, patent, trademark, and
    
    +          attribution notices from the Source form of the Work,
    
    +          excluding those notices that do not pertain to any part of
    
    +          the Derivative Works; and
    
    +
    
    +      (d) If the Work includes a "NOTICE" text file as part of its
    
    +          distribution, then any Derivative Works that You distribute must
    
    +          include a readable copy of the attribution notices contained
    
    +          within such NOTICE file, excluding those notices that do not
    
    +          pertain to any part of the Derivative Works, in at least one
    
    +          of the following places: within a NOTICE text file distributed
    
    +          as part of the Derivative Works; within the Source form or
    
    +          documentation, if provided along with the Derivative Works; or,
    
    +          within a display generated by the Derivative Works, if and
    
    +          wherever such third-party notices normally appear. The contents
    
    +          of the NOTICE file are for informational purposes only and
    
    +          do not modify the License. You may add Your own attribution
    
    +          notices within Derivative Works that You distribute, alongside
    
    +          or as an addendum to the NOTICE text from the Work, provided
    
    +          that such additional attribution notices cannot be construed
    
    +          as modifying the License.
    
    +
    
    +      You may add Your own copyright statement to Your modifications and
    
    +      may provide additional or different license terms and conditions
    
    +      for use, reproduction, or distribution of Your modifications, or
    
    +      for any such Derivative Works as a whole, provided Your use,
    
    +      reproduction, and distribution of the Work otherwise complies with
    
    +      the conditions stated in this License.
    
    +
    
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    
    +      any Contribution intentionally submitted for inclusion in the Work
    
    +      by You to the Licensor shall be under the terms and conditions of
    
    +      this License, without any additional terms or conditions.
    
    +      Notwithstanding the above, nothing herein shall supersede or modify
    
    +      the terms of any separate license agreement you may have executed
    
    +      with Licensor regarding such Contributions.
    
    +
    
    +   6. Trademarks. This License does not grant permission to use the trade
    
    +      names, trademarks, service marks, or product names of the Licensor,
    
    +      except as required for reasonable and customary use in describing the
    
    +      origin of the Work and reproducing the content of the NOTICE file.
    
    +
    
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    
    +      agreed to in writing, Licensor provides the Work (and each
    
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    
    +      implied, including, without limitation, any warranties or conditions
    
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    
    +      appropriateness of using or redistributing the Work and assume any
    
    +      risks associated with Your exercise of permissions under this License.
    
    +
    
    +   8. Limitation of Liability. In no event and under no legal theory,
    
    +      whether in tort (including negligence), contract, or otherwise,
    
    +      unless required by applicable law (such as deliberate and grossly
    
    +      negligent acts) or agreed to in writing, shall any Contributor be
    
    +      liable to You for damages, including any direct, indirect, special,
    
    +      incidental, or consequential damages of any character arising as a
    
    +      result of this License or out of the use or inability to use the
    
    +      Work (including but not limited to damages for loss of goodwill,
    
    +      work stoppage, computer failure or malfunction, or any and all
    
    +      other commercial damages or losses), even if such Contributor
    
    +      has been advised of the possibility of such damages.
    
    +
    
    +   9. Accepting Warranty or Additional Liability. While redistributing
    
    +      the Work or Derivative Works thereof, You may choose to offer,
    
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    
    +      or other liability obligations and/or rights consistent with this
    
    +      License. However, in accepting such obligations, You may act only
    
    +      on Your own behalf and on Your sole responsibility, not on behalf
    
    +      of any other Contributor, and only if You agree to indemnify,
    
    +      defend, and hold each Contributor harmless for any liability
    
    +      incurred by, or claims asserted against, such Contributor by reason
    
    +      of your accepting any such warranty or additional liability.
    
    +
    
    +   END OF TERMS AND CONDITIONS
    
    +
    
    +   APPENDIX: How to apply the Apache License to your work.
    
    +
    
    +      To apply the Apache License to your work, attach the following
    
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    
    +      replaced with your own identifying information. (Don't include
    
    +      the brackets!)  The text should be enclosed in the appropriate
    
    +      comment syntax for the file format. We also recommend that a
    
    +      file or class name and description of purpose be included on the
    
    +      same "printed page" as the copyright notice for easier
    
    +      identification within third-party archives.
    
    +
    
    +   Copyright [yyyy] [name of copyright owner]
    
    +
    
    +   Licensed under the Apache License, Version 2.0 (the "License");
    
    +   you may not use this file except in compliance with the License.
    
    +   You may obtain a copy of the License at
    
    +
    
    +       http://www.apache.org/licenses/LICENSE-2.0
    
    +
    
    +   Unless required by applicable law or agreed to in writing, software
    
    +   distributed under the License is distributed on an "AS IS" BASIS,
    
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    
    +   See the License for the specific language governing permissions and
    
    +   limitations under the License.
    
    +
    +
    +
    + +
    +tcmalloc +homepage + + +
    +
    // Copyright (c) 2005, Google Inc.
    +// All rights reserved.
    +//
    +// Redistribution and use in source and binary forms, with or without
    +// modification, are permitted provided that the following conditions are
    +// met:
    +//
    +//     * Redistributions of source code must retain the above copyright
    +// notice, this list of conditions and the following disclaimer.
    +//     * Redistributions in binary form must reproduce the above
    +// copyright notice, this list of conditions and the following disclaimer
    +// in the documentation and/or other materials provided with the
    +// distribution.
    +//     * Neither the name of Google Inc. nor the names of its
    +// contributors may be used to endorse or promote products derived from
    +// this software without specific prior written permission.
    +//
    +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +test_fonts +homepage + + +
    +
    The SIL OPEN FONT LICENSE applies to the following files:
    +Gelasio-Bold.ttf
    +Gelasio-BoldItalic.ttf
    +Gelasio-Italic.ttf
    +Gelasio-Regular.ttf
    +Lohit-Devanagari.ttf
    +Lohit-Gurmukhi.ttf
    +Lohit-Tamil.ttf
    +
    +
    +Copyright 2011-13 Lohit Fonts Project contributors
    +  <http://fedorahosted.org/lohit>
    +
    +This Font Software is licensed under the SIL Open Font License, Version 1.1.
    +This license is copied below, and is also available with a FAQ at:
    +http://scripts.sil.org/OFL
    +
    +
    +-----------------------------------------------------------
    +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
    +-----------------------------------------------------------
    +
    +PREAMBLE
    +The goals of the Open Font License (OFL) are to stimulate worldwide
    +development of collaborative font projects, to support the font creation
    +efforts of academic and linguistic communities, and to provide a free and
    +open framework in which fonts may be shared and improved in partnership
    +with others.
    +
    +The OFL allows the licensed fonts to be used, studied, modified and
    +redistributed freely as long as they are not sold by themselves. The
    +fonts, including any derivative works, can be bundled, embedded,
    +redistributed and/or sold with any software provided that any reserved
    +names are not used by derivative works. The fonts and derivatives,
    +however, cannot be released under any other type of license. The
    +requirement for fonts to remain under this license does not apply
    +to any document created using the fonts or their derivatives.
    +
    +DEFINITIONS
    +"Font Software" refers to the set of files released by the Copyright
    +Holder(s) under this license and clearly marked as such. This may
    +include source files, build scripts and documentation.
    +
    +"Reserved Font Name" refers to any names specified as such after the
    +copyright statement(s).
    +
    +"Original Version" refers to the collection of Font Software components as
    +distributed by the Copyright Holder(s).
    +
    +"Modified Version" refers to any derivative made by adding to, deleting,
    +or substituting -- in part or in whole -- any of the components of the
    +Original Version, by changing formats or by porting the Font Software to a
    +new environment.
    +
    +"Author" refers to any designer, engineer, programmer, technical
    +writer or other person who contributed to the Font Software.
    +
    +PERMISSION & CONDITIONS
    +Permission is hereby granted, free of charge, to any person obtaining
    +a copy of the Font Software, to use, study, copy, merge, embed, modify,
    +redistribute, and sell modified and unmodified copies of the Font
    +Software, subject to the following conditions:
    +
    +1) Neither the Font Software nor any of its individual components,
    +in Original or Modified Versions, may be sold by itself.
    +
    +2) Original or Modified Versions of the Font Software may be bundled,
    +redistributed and/or sold with any software, provided that each copy
    +contains the above copyright notice and this license. These can be
    +included either as stand-alone text files, human-readable headers or
    +in the appropriate machine-readable metadata fields within text or
    +binary files as long as those fields can be easily viewed by the user.
    +
    +3) No Modified Version of the Font Software may use the Reserved Font
    +Name(s) unless explicit written permission is granted by the corresponding
    +Copyright Holder. This restriction only applies to the primary font name as
    +presented to the users.
    +
    +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
    +Software shall not be used to promote, endorse or advertise any
    +Modified Version, except to acknowledge the contribution(s) of the
    +Copyright Holder(s) and the Author(s) or with their explicit written
    +permission.
    +
    +5) The Font Software, modified or unmodified, in part or in whole,
    +must be distributed entirely under this license, and must not be
    +distributed under any other license. The requirement for fonts to
    +remain under this license does not apply to any document created
    +using the Font Software.
    +
    +TERMINATION
    +This license becomes null and void if any of the above conditions are
    +not met.
    +
    +DISCLAIMER
    +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
    +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
    +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
    +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
    +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
    +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
    +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
    +OTHER DEALINGS IN THE FONT SOFTWARE.
    +
    +
    +--------------------------------------------------------------------------------
    +The GPL v2 license applies to the following files
    +Garuda.ttf
    +MuktiNarrow.ttf
    +
    +		    GNU GENERAL PUBLIC LICENSE
    +		       Version 2, June 1991
    +
    + Copyright (C) 1989, 1991 Free Software Foundation, Inc.
    +                       59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
    + Everyone is permitted to copy and distribute verbatim copies
    + of this license document, but changing it is not allowed.
    +
    +			    Preamble
    +
    +  The licenses for most software are designed to take away your
    +freedom to share and change it.  By contrast, the GNU General Public
    +License is intended to guarantee your freedom to share and change free
    +software--to make sure the software is free for all its users.  This
    +General Public License applies to most of the Free Software
    +Foundation's software and to any other program whose authors commit to
    +using it.  (Some other Free Software Foundation software is covered by
    +the GNU Library General Public License instead.)  You can apply it to
    +your programs, too.
    +
    +  When we speak of free software, we are referring to freedom, not
    +price.  Our General Public Licenses are designed to make sure that you
    +have the freedom to distribute copies of free software (and charge for
    +this service if you wish), that you receive source code or can get it
    +if you want it, that you can change the software or use pieces of it
    +in new free programs; and that you know you can do these things.
    +
    +  To protect your rights, we need to make restrictions that forbid
    +anyone to deny you these rights or to ask you to surrender the rights.
    +These restrictions translate to certain responsibilities for you if you
    +distribute copies of the software, or if you modify it.
    +
    +  For example, if you distribute copies of such a program, whether
    +gratis or for a fee, you must give the recipients all the rights that
    +you have.  You must make sure that they, too, receive or can get the
    +source code.  And you must show them these terms so they know their
    +rights.
    +
    +  We protect your rights with two steps: (1) copyright the software, and
    +(2) offer you this license which gives you legal permission to copy,
    +distribute and/or modify the software.
    +
    +  Also, for each author's protection and ours, we want to make certain
    +that everyone understands that there is no warranty for this free
    +software.  If the software is modified by someone else and passed on, we
    +want its recipients to know that what they have is not the original, so
    +that any problems introduced by others will not reflect on the original
    +authors' reputations.
    +
    +  Finally, any free program is threatened constantly by software
    +patents.  We wish to avoid the danger that redistributors of a free
    +program will individually obtain patent licenses, in effect making the
    +program proprietary.  To prevent this, we have made it clear that any
    +patent must be licensed for everyone's free use or not licensed at all.
    +
    +  The precise terms and conditions for copying, distribution and
    +modification follow.
    +
    +		    GNU GENERAL PUBLIC LICENSE
    +   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
    +
    +  0. This License applies to any program or other work which contains
    +a notice placed by the copyright holder saying it may be distributed
    +under the terms of this General Public License.  The "Program", below,
    +refers to any such program or work, and a "work based on the Program"
    +means either the Program or any derivative work under copyright law:
    +that is to say, a work containing the Program or a portion of it,
    +either verbatim or with modifications and/or translated into another
    +language.  (Hereinafter, translation is included without limitation in
    +the term "modification".)  Each licensee is addressed as "you".
    +
    +Activities other than copying, distribution and modification are not
    +covered by this License; they are outside its scope.  The act of
    +running the Program is not restricted, and the output from the Program
    +is covered only if its contents constitute a work based on the
    +Program (independent of having been made by running the Program).
    +Whether that is true depends on what the Program does.
    +
    +  1. You may copy and distribute verbatim copies of the Program's
    +source code as you receive it, in any medium, provided that you
    +conspicuously and appropriately publish on each copy an appropriate
    +copyright notice and disclaimer of warranty; keep intact all the
    +notices that refer to this License and to the absence of any warranty;
    +and give any other recipients of the Program a copy of this License
    +along with the Program.
    +
    +You may charge a fee for the physical act of transferring a copy, and
    +you may at your option offer warranty protection in exchange for a fee.
    +
    +  2. You may modify your copy or copies of the Program or any portion
    +of it, thus forming a work based on the Program, and copy and
    +distribute such modifications or work under the terms of Section 1
    +above, provided that you also meet all of these conditions:
    +
    +    a) You must cause the modified files to carry prominent notices
    +    stating that you changed the files and the date of any change.
    +
    +    b) You must cause any work that you distribute or publish, that in
    +    whole or in part contains or is derived from the Program or any
    +    part thereof, to be licensed as a whole at no charge to all third
    +    parties under the terms of this License.
    +
    +    c) If the modified program normally reads commands interactively
    +    when run, you must cause it, when started running for such
    +    interactive use in the most ordinary way, to print or display an
    +    announcement including an appropriate copyright notice and a
    +    notice that there is no warranty (or else, saying that you provide
    +    a warranty) and that users may redistribute the program under
    +    these conditions, and telling the user how to view a copy of this
    +    License.  (Exception: if the Program itself is interactive but
    +    does not normally print such an announcement, your work based on
    +    the Program is not required to print an announcement.)
    +
    +These requirements apply to the modified work as a whole.  If
    +identifiable sections of that work are not derived from the Program,
    +and can be reasonably considered independent and separate works in
    +themselves, then this License, and its terms, do not apply to those
    +sections when you distribute them as separate works.  But when you
    +distribute the same sections as part of a whole which is a work based
    +on the Program, the distribution of the whole must be on the terms of
    +this License, whose permissions for other licensees extend to the
    +entire whole, and thus to each and every part regardless of who wrote it.
    +
    +Thus, it is not the intent of this section to claim rights or contest
    +your rights to work written entirely by you; rather, the intent is to
    +exercise the right to control the distribution of derivative or
    +collective works based on the Program.
    +
    +In addition, mere aggregation of another work not based on the Program
    +with the Program (or with a work based on the Program) on a volume of
    +a storage or distribution medium does not bring the other work under
    +the scope of this License.
    +
    +  3. You may copy and distribute the Program (or a work based on it,
    +under Section 2) in object code or executable form under the terms of
    +Sections 1 and 2 above provided that you also do one of the following:
    +
    +    a) Accompany it with the complete corresponding machine-readable
    +    source code, which must be distributed under the terms of Sections
    +    1 and 2 above on a medium customarily used for software interchange; or,
    +
    +    b) Accompany it with a written offer, valid for at least three
    +    years, to give any third party, for a charge no more than your
    +    cost of physically performing source distribution, a complete
    +    machine-readable copy of the corresponding source code, to be
    +    distributed under the terms of Sections 1 and 2 above on a medium
    +    customarily used for software interchange; or,
    +
    +    c) Accompany it with the information you received as to the offer
    +    to distribute corresponding source code.  (This alternative is
    +    allowed only for noncommercial distribution and only if you
    +    received the program in object code or executable form with such
    +    an offer, in accord with Subsection b above.)
    +
    +The source code for a work means the preferred form of the work for
    +making modifications to it.  For an executable work, complete source
    +code means all the source code for all modules it contains, plus any
    +associated interface definition files, plus the scripts used to
    +control compilation and installation of the executable.  However, as a
    +special exception, the source code distributed need not include
    +anything that is normally distributed (in either source or binary
    +form) with the major components (compiler, kernel, and so on) of the
    +operating system on which the executable runs, unless that component
    +itself accompanies the executable.
    +
    +If distribution of executable or object code is made by offering
    +access to copy from a designated place, then offering equivalent
    +access to copy the source code from the same place counts as
    +distribution of the source code, even though third parties are not
    +compelled to copy the source along with the object code.
    +
    +  4. You may not copy, modify, sublicense, or distribute the Program
    +except as expressly provided under this License.  Any attempt
    +otherwise to copy, modify, sublicense or distribute the Program is
    +void, and will automatically terminate your rights under this License.
    +However, parties who have received copies, or rights, from you under
    +this License will not have their licenses terminated so long as such
    +parties remain in full compliance.
    +
    +  5. You are not required to accept this License, since you have not
    +signed it.  However, nothing else grants you permission to modify or
    +distribute the Program or its derivative works.  These actions are
    +prohibited by law if you do not accept this License.  Therefore, by
    +modifying or distributing the Program (or any work based on the
    +Program), you indicate your acceptance of this License to do so, and
    +all its terms and conditions for copying, distributing or modifying
    +the Program or works based on it.
    +
    +  6. Each time you redistribute the Program (or any work based on the
    +Program), the recipient automatically receives a license from the
    +original licensor to copy, distribute or modify the Program subject to
    +these terms and conditions.  You may not impose any further
    +restrictions on the recipients' exercise of the rights granted herein.
    +You are not responsible for enforcing compliance by third parties to
    +this License.
    +
    +  7. If, as a consequence of a court judgment or allegation of patent
    +infringement or for any other reason (not limited to patent issues),
    +conditions are imposed on you (whether by court order, agreement or
    +otherwise) that contradict the conditions of this License, they do not
    +excuse you from the conditions of this License.  If you cannot
    +distribute so as to satisfy simultaneously your obligations under this
    +License and any other pertinent obligations, then as a consequence you
    +may not distribute the Program at all.  For example, if a patent
    +license would not permit royalty-free redistribution of the Program by
    +all those who receive copies directly or indirectly through you, then
    +the only way you could satisfy both it and this License would be to
    +refrain entirely from distribution of the Program.
    +
    +If any portion of this section is held invalid or unenforceable under
    +any particular circumstance, the balance of the section is intended to
    +apply and the section as a whole is intended to apply in other
    +circumstances.
    +
    +It is not the purpose of this section to induce you to infringe any
    +patents or other property right claims or to contest validity of any
    +such claims; this section has the sole purpose of protecting the
    +integrity of the free software distribution system, which is
    +implemented by public license practices.  Many people have made
    +generous contributions to the wide range of software distributed
    +through that system in reliance on consistent application of that
    +system; it is up to the author/donor to decide if he or she is willing
    +to distribute software through any other system and a licensee cannot
    +impose that choice.
    +
    +This section is intended to make thoroughly clear what is believed to
    +be a consequence of the rest of this License.
    +
    +  8. If the distribution and/or use of the Program is restricted in
    +certain countries either by patents or by copyrighted interfaces, the
    +original copyright holder who places the Program under this License
    +may add an explicit geographical distribution limitation excluding
    +those countries, so that distribution is permitted only in or among
    +countries not thus excluded.  In such case, this License incorporates
    +the limitation as if written in the body of this License.
    +
    +  9. The Free Software Foundation may publish revised and/or new versions
    +of the General Public License from time to time.  Such new versions will
    +be similar in spirit to the present version, but may differ in detail to
    +address new problems or concerns.
    +
    +Each version is given a distinguishing version number.  If the Program
    +specifies a version number of this License which applies to it and "any
    +later version", you have the option of following the terms and conditions
    +either of that version or of any later version published by the Free
    +Software Foundation.  If the Program does not specify a version number of
    +this License, you may choose any version ever published by the Free Software
    +Foundation.
    +
    +  10. If you wish to incorporate parts of the Program into other free
    +programs whose distribution conditions are different, write to the author
    +to ask for permission.  For software which is copyrighted by the Free
    +Software Foundation, write to the Free Software Foundation; we sometimes
    +make exceptions for this.  Our decision will be guided by the two goals
    +of preserving the free status of all derivatives of our free software and
    +of promoting the sharing and reuse of software generally.
    +
    +			    NO WARRANTY
    +
    +  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
    +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
    +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
    +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
    +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
    +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
    +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
    +REPAIR OR CORRECTION.
    +
    +  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
    +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
    +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
    +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
    +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
    +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
    +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
    +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
    +POSSIBILITY OF SUCH DAMAGES.
    +
    +		     END OF TERMS AND CONDITIONS
    +
    +	    How to Apply These Terms to Your New Programs
    +
    +  If you develop a new program, and you want it to be of the greatest
    +possible use to the public, the best way to achieve this is to make it
    +free software which everyone can redistribute and change under these terms.
    +
    +  To do so, attach the following notices to the program.  It is safest
    +to attach them to the start of each source file to most effectively
    +convey the exclusion of warranty; and each file should have at least
    +the "copyright" line and a pointer to where the full notice is found.
    +
    +    <one line to give the program's name and a brief idea of what it does.>
    +    Copyright (C) 19yy  <name of author>
    +
    +    This program is free software; you can redistribute it and/or modify
    +    it under the terms of the GNU General Public License as published by
    +    the Free Software Foundation; either version 2 of the License, or
    +    (at your option) any later version.
    +
    +    This program is distributed in the hope that it will be useful,
    +    but WITHOUT ANY WARRANTY; without even the implied warranty of
    +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    +    GNU General Public License for more details.
    +
    +    You should have received a copy of the GNU General Public License
    +    along with this program; if not, write to the Free Software
    +    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
    +
    +
    +Also add information on how to contact you by electronic and paper mail.
    +
    +If the program is interactive, make it output a short notice like this
    +when it starts in an interactive mode:
    +
    +    Gnomovision version 69, Copyright (C) 19yy name of author
    +    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
    +    This is free software, and you are welcome to redistribute it
    +    under certain conditions; type `show c' for details.
    +
    +The hypothetical commands `show w' and `show c' should show the appropriate
    +parts of the General Public License.  Of course, the commands you use may
    +be called something other than `show w' and `show c'; they could even be
    +mouse-clicks or menu items--whatever suits your program.
    +
    +You should also get your employer (if you work as a programmer) or your
    +school, if any, to sign a "copyright disclaimer" for the program, if
    +necessary.  Here is a sample; alter the names:
    +
    +  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
    +  `Gnomovision' (which makes passes at compilers) written by James Hacker.
    +
    +  <signature of Ty Coon>, 1 April 1989
    +  Ty Coon, President of Vice
    +
    +This General Public License does not permit incorporating your program into
    +proprietary programs.  If your program is a subroutine library, you may
    +consider it more useful to permit linking proprietary applications with the
    +library.  If this is what you want to do, use the GNU Library General
    +Public License instead of this License.
    +
    +--------------------------------------------------------------------------------
    +The Vera Bitstream License applies to the following files:
    +DejaVuSans-Bold.ttf
    +DejaVuSans.ttf
    +
    +
    +Fonts are (c) Bitstream (see below). DejaVu changes are in public domain.
    +Glyphs imported from Arev fonts are (c) Tavmjong Bah (see below)
    +
    +
    +Bitstream Vera Fonts Copyright
    +------------------------------
    +
    +Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is
    +a trademark of Bitstream, Inc.
    +
    +Permission is hereby granted, free of charge, to any person obtaining a copy
    +of the fonts accompanying this license ("Fonts") and associated
    +documentation files (the "Font Software"), to reproduce and distribute the
    +Font Software, including without limitation the rights to use, copy, merge,
    +publish, distribute, and/or sell copies of the Font Software, and to permit
    +persons to whom the Font Software is furnished to do so, subject to the
    +following conditions:
    +
    +The above copyright and trademark notices and this permission notice shall
    +be included in all copies of one or more of the Font Software typefaces.
    +
    +The Font Software may be modified, altered, or added to, and in particular
    +the designs of glyphs or characters in the Fonts may be modified and
    +additional glyphs or characters may be added to the Fonts, only if the fonts
    +are renamed to names not containing either the words "Bitstream" or the word
    +"Vera".
    +
    +This License becomes null and void to the extent applicable to Fonts or Font
    +Software that has been modified and is distributed under the "Bitstream
    +Vera" names.
    +
    +The Font Software may be sold as part of a larger software package but no
    +copy of one or more of the Font Software typefaces may be sold by itself.
    +
    +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
    +OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY,
    +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT,
    +TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME
    +FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING
    +ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES,
    +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
    +THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE
    +FONT SOFTWARE.
    +
    +Except as contained in this notice, the names of Gnome, the Gnome
    +Foundation, and Bitstream Inc., shall not be used in advertising or
    +otherwise to promote the sale, use or other dealings in this Font Software
    +without prior written authorization from the Gnome Foundation or Bitstream
    +Inc., respectively. For further information, contact: fonts at gnome dot
    +org.
    +
    +Arev Fonts Copyright
    +------------------------------
    +
    +Copyright (c) 2006 by Tavmjong Bah. All Rights Reserved.
    +
    +Permission is hereby granted, free of charge, to any person obtaining
    +a copy of the fonts accompanying this license ("Fonts") and
    +associated documentation files (the "Font Software"), to reproduce
    +and distribute the modifications to the Bitstream Vera Font Software,
    +including without limitation the rights to use, copy, merge, publish,
    +distribute, and/or sell copies of the Font Software, and to permit
    +persons to whom the Font Software is furnished to do so, subject to
    +the following conditions:
    +
    +The above copyright and trademark notices and this permission notice
    +shall be included in all copies of one or more of the Font Software
    +typefaces.
    +
    +The Font Software may be modified, altered, or added to, and in
    +particular the designs of glyphs or characters in the Fonts may be
    +modified and additional glyphs or characters may be added to the
    +Fonts, only if the fonts are renamed to names not containing either
    +the words "Tavmjong Bah" or the word "Arev".
    +
    +This License becomes null and void to the extent applicable to Fonts
    +or Font Software that has been modified and is distributed under the
    +"Tavmjong Bah Arev" names.
    +
    +The Font Software may be sold as part of a larger software package but
    +no copy of one or more of the Font Software typefaces may be sold by
    +itself.
    +
    +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
    +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
    +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL
    +TAVMJONG BAH BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
    +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
    +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
    +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
    +OTHER DEALINGS IN THE FONT SOFTWARE.
    +
    +Except as contained in this notice, the name of Tavmjong Bah shall not
    +be used in advertising or otherwise to promote the sale, use or other
    +dealings in this Font Software without prior written authorization
    +from Tavmjong Bah. For further information, contact: tavmjong @ free
    +. fr.
    +
    +TeX Gyre DJV Math
    +-----------------
    +Fonts are (c) Bitstream (see below). DejaVu changes are in public domain.
    +
    +Math extensions done by B. Jackowski, P. Strzelczyk and P. Pianowski
    +(on behalf of TeX users groups) are in public domain.
    +
    +Letters imported from Euler Fraktur from AMSfonts are (c) American
    +Mathematical Society (see below).
    +Bitstream Vera Fonts Copyright
    +Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera
    +is a trademark of Bitstream, Inc.
    +
    +Permission is hereby granted, free of charge, to any person obtaining a copy
    +of the fonts accompanying this license (“Fontsâ€) and associated
    +documentation
    +files (the “Font Softwareâ€), to reproduce and distribute the Font Software,
    +including without limitation the rights to use, copy, merge, publish,
    +distribute,
    +and/or sell copies of the Font Software, and to permit persons  to whom
    +the Font Software is furnished to do so, subject to the following
    +conditions:
    +
    +The above copyright and trademark notices and this permission notice
    +shall be
    +included in all copies of one or more of the Font Software typefaces.
    +
    +The Font Software may be modified, altered, or added to, and in particular
    +the designs of glyphs or characters in the Fonts may be modified and
    +additional
    +glyphs or characters may be added to the Fonts, only if the fonts are
    +renamed
    +to names not containing either the words “Bitstream†or the word “Veraâ€.
    +
    +This License becomes null and void to the extent applicable to Fonts or
    +Font Software
    +that has been modified and is distributed under the “Bitstream Veraâ€
    +names.
    +
    +The Font Software may be sold as part of a larger software package but
    +no copy
    +of one or more of the Font Software typefaces may be sold by itself.
    +
    +THE FONT SOFTWARE IS PROVIDED “AS ISâ€, WITHOUT WARRANTY OF ANY KIND, EXPRESS
    +OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY,
    +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT,
    +TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME
    +FOUNDATION
    +BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL,
    +SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN
    +ACTION
    +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR
    +INABILITY TO USE
    +THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.
    +Except as contained in this notice, the names of GNOME, the GNOME
    +Foundation,
    +and Bitstream Inc., shall not be used in advertising or otherwise to promote
    +the sale, use or other dealings in this Font Software without prior written
    +authorization from the GNOME Foundation or Bitstream Inc., respectively.
    +For further information, contact: fonts at gnome dot org.
    +
    +AMSFonts (v. 2.2) copyright
    +
    +The PostScript Type 1 implementation of the AMSFonts produced by and
    +previously distributed by Blue Sky Research and Y&Y, Inc. are now freely
    +available for general use. This has been accomplished through the
    +cooperation
    +of a consortium of scientific publishers with Blue Sky Research and Y&Y.
    +Members of this consortium include:
    +
    +Elsevier Science IBM Corporation Society for Industrial and Applied
    +Mathematics (SIAM) Springer-Verlag American Mathematical Society (AMS)
    +
    +In order to assure the authenticity of these fonts, copyright will be
    +held by
    +the American Mathematical Society. This is not meant to restrict in any way
    +the legitimate use of the fonts, such as (but not limited to) electronic
    +distribution of documents containing these fonts, inclusion of these fonts
    +into other public domain or commercial font collections or computer
    +applications, use of the outline data to create derivative fonts and/or
    +faces, etc. However, the AMS does require that the AMS copyright notice be
    +removed from any derivative versions of the fonts which have been altered in
    +any way. In addition, to ensure the fidelity of TeX documents using Computer
    +Modern fonts, Professor Donald Knuth, creator of the Computer Modern faces,
    +has requested that any alterations which yield different font metrics be
    +given a different name.
    +
    +$Id$
    +--------------------------------------------------------------------------------
    +The SIL OPEN FONT LICENSE for Noto applies to the following files:
    +NotoSansKhmer-Regular.ttf
    +
    +This Font Software is licensed under the SIL Open Font License,
    +Version 1.1.
    +
    +This license is copied below, and is also available with a FAQ at:
    +http://scripts.sil.org/OFL
    +
    +-----------------------------------------------------------
    +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
    +-----------------------------------------------------------
    +
    +PREAMBLE
    +The goals of the Open Font License (OFL) are to stimulate worldwide
    +development of collaborative font projects, to support the font
    +creation efforts of academic and linguistic communities, and to
    +provide a free and open framework in which fonts may be shared and
    +improved in partnership with others.
    +
    +The OFL allows the licensed fonts to be used, studied, modified and
    +redistributed freely as long as they are not sold by themselves. The
    +fonts, including any derivative works, can be bundled, embedded,
    +redistributed and/or sold with any software provided that any reserved
    +names are not used by derivative works. The fonts and derivatives,
    +however, cannot be released under any other type of license. The
    +requirement for fonts to remain under this license does not apply to
    +any document created using the fonts or their derivatives.
    +
    +DEFINITIONS
    +"Font Software" refers to the set of files released by the Copyright
    +Holder(s) under this license and clearly marked as such. This may
    +include source files, build scripts and documentation.
    +
    +"Reserved Font Name" refers to any names specified as such after the
    +copyright statement(s).
    +
    +"Original Version" refers to the collection of Font Software
    +components as distributed by the Copyright Holder(s).
    +
    +"Modified Version" refers to any derivative made by adding to,
    +deleting, or substituting -- in part or in whole -- any of the
    +components of the Original Version, by changing formats or by porting
    +the Font Software to a new environment.
    +
    +"Author" refers to any designer, engineer, programmer, technical
    +writer or other person who contributed to the Font Software.
    +
    +PERMISSION & CONDITIONS
    +Permission is hereby granted, free of charge, to any person obtaining
    +a copy of the Font Software, to use, study, copy, merge, embed,
    +modify, redistribute, and sell modified and unmodified copies of the
    +Font Software, subject to the following conditions:
    +
    +1) Neither the Font Software nor any of its individual components, in
    +Original or Modified Versions, may be sold by itself.
    +
    +2) Original or Modified Versions of the Font Software may be bundled,
    +redistributed and/or sold with any software, provided that each copy
    +contains the above copyright notice and this license. These can be
    +included either as stand-alone text files, human-readable headers or
    +in the appropriate machine-readable metadata fields within text or
    +binary files as long as those fields can be easily viewed by the user.
    +
    +3) No Modified Version of the Font Software may use the Reserved Font
    +Name(s) unless explicit written permission is granted by the
    +corresponding Copyright Holder. This restriction only applies to the
    +primary font name as presented to the users.
    +
    +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
    +Software shall not be used to promote, endorse or advertise any
    +Modified Version, except to acknowledge the contribution(s) of the
    +Copyright Holder(s) and the Author(s) or with their explicit written
    +permission.
    +
    +5) The Font Software, modified or unmodified, in part or in whole,
    +must be distributed entirely under this license, and must not be
    +distributed under any other license. The requirement for fonts to
    +remain under this license does not apply to any document created using
    +the Font Software.
    +
    +TERMINATION
    +This license becomes null and void if any of the above conditions are
    +not met.
    +
    +DISCLAIMER
    +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
    +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
    +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
    +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
    +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
    +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
    +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
    +OTHER DEALINGS IN THE FONT SOFTWARE.
    +
    +
    +--------------------------------------------------------------------------------
    +The Apache License applies to the following files
    +Arimo-Bold.ttf
    +Arimo-BoldItalic.ttf
    +Arimo-Italic.ttf
    +Arimo-Regular.ttf
    +Cousine-Bold.ttf
    +Cousine-BoldItalic.ttf
    +Cousine-Italic.ttf
    +Cousine-Regular.ttf
    +Tinos-Bold.ttf
    +Tinos-BoldItalic.ttf
    +Tinos-Italic.ttf
    +Tinos-Regular.ttf
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +--------------------------------------------------------------------------------
    +The public domain/Creative Commons Zero license applies to the following files
    +Ahem.ttf
    +
    +The Ahem font in this directory belongs to the public domain. In
    +jurisdictions that do not recognize public domain ownership of these
    +files, the following Creative Commons Zero declaration applies:
    +
    +<http://labs.creativecommons.org/licenses/zero-waive/1.0/us/legalcode>
    +
    +which is quoted below:
    +
    + The person who has associated a work with this document (the "Work")
    + affirms that he or she (the "Affirmer") is the/an author or owner of
    + the Work. The Work may be any work of authorship, including a
    + database.
    +
    + The Affirmer hereby fully, permanently and irrevocably waives and
    + relinquishes all of her or his copyright and related or neighboring
    + legal rights in the Work available under any federal or state law,
    + treaty or contract, including but not limited to moral rights,
    + publicity and privacy rights, rights protecting against unfair
    + competition and any rights protecting the extraction, dissemination
    + and reuse of data, whether such rights are present or future, vested
    + or contingent (the "Waiver"). The Affirmer makes the Waiver for the
    + benefit of the public at large and to the detriment of the Affirmer's
    + heirs or successors.
    +
    + The Affirmer understands and intends that the Waiver has the effect
    + of eliminating and entirely removing from the Affirmer's control all
    + the copyright and related or neighboring legal rights previously held
    + by the Affirmer in the Work, to that extent making the Work freely
    + available to the public for any and all uses and purposes without
    + restriction of any kind, including commercial use and uses in media
    + and formats or by methods that have not yet been invented or
    + conceived. Should the Waiver for any reason be judged legally
    + ineffective in any jurisdiction, the Affirmer hereby grants a free,
    + full, permanent, irrevocable, nonexclusive and worldwide license for
    + all her or his copyright and related or neighboring legal rights in
    + the Work.
    +
    +
    +--------------------------------------------------------------------------------
    +The public domain license applies to the following files
    +GardinerModBug.ttf
    +GardinerModCat.ttf
    +
    +In lieu of a licence Fonts in this site are offered free for any use; they may be installed, embedded, opened, edited,
    +modified, regenerated, posted, packaged and redistributed. George Douros
    +
    +
    +
    + +
    +The Chromium Project +homepage + + +
    +
    // Copyright 2015 The Chromium Authors. All rights reserved.
    +//
    +// Redistribution and use in source and binary forms, with or without
    +// modification, are permitted provided that the following conditions are
    +// met:
    +//
    +//    * Redistributions of source code must retain the above copyright
    +// notice, this list of conditions and the following disclaimer.
    +//    * Redistributions in binary form must reproduce the above
    +// copyright notice, this list of conditions and the following disclaimer
    +// in the documentation and/or other materials provided with the
    +// distribution.
    +//    * Neither the name of Google Inc. nor the names of its
    +// contributors may be used to endorse or promote products derived from
    +// this software without specific prior written permission.
    +//
    +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +The USB ID Repository +homepage + + +
    +
    Copyright (c) 2012, Linux USB Project
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
    +
    +o Redistributions of source code must retain the above copyright notice,
    +  this list of conditions and the following disclaimer.
    +
    +o Redistributions in binary form must reproduce the above copyright
    +  notice, this list of conditions and the following disclaimer in the
    +  documentation and/or other materials provided with the distribution.
    +
    +o Neither the name of the Linux USB Project nor the names of its
    +  contributors may be used to endorse or promote products derived from
    +  this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +tlslite +homepage + + +
    +
    +TLS Lite includes code from different sources. All code is either dedicated to
    +the public domain by its authors, or available under a BSD-style license. In
    +particular:
    +
    +- 
    +
    +Code written by Trevor Perrin, Kees Bos, Sam Rushing, Dimitris Moraitis,
    +Marcelo Fernandez, Martin von Loewis, Dave Baggett, and Yngve Pettersen is 
    +available under the following terms:
    +
    +This is free and unencumbered software released into the public domain.
    +
    +Anyone is free to copy, modify, publish, use, compile, sell, or distribute
    +this software, either in source code form or as a compiled binary, for any
    +purpose, commercial or non-commercial, and by any means.
    +
    +In jurisdictions that recognize copyright laws, the author or authors of this
    +software dedicate any and all copyright interest in the software to the public
    +domain. We make this dedication for the benefit of the public at large and to
    +the detriment of our heirs and successors. We intend this dedication to be an
    +overt act of relinquishment in perpetuity of all present and future rights to
    +this software under copyright law.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    +AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
    +ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +
    +-
    +
    +Code written by Bram Cohen (rijndael.py) was dedicated to the public domain by
    +its author. See rijndael.py for details.
    +
    +-
    +
    +Code written by Google is available under the following terms:
    +
    +Copyright (c) 2008, The Chromium Authors 
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are met:
    +
    + * Redistributions of source code must retain the above copyright notice, this
    +   list of conditions and the following disclaimer.
    +
    + * Redistributions in binary form must reproduce the above copyright notice,
    +   this list of conditions and the following disclaimer in the documentation
    +   and/or other materials provided with the distribution.
    +
    + * Neither the name of the Google Inc. nor the names of its contributors may
    +   be used to endorse or promote products derived from this software without
    +   specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
    +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
    +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
    +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
    +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +UnRAR source for decompressing .RAR and other files. +homepage + + +
    +
     ******    *****   ******   UnRAR - free utility for RAR archives
    + **   **  **   **  **   **  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + ******   *******  ******    License for use and distribution of
    + **   **  **   **  **   **   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + **   **  **   **  **   **         FREE portable version
    +                                   ~~~~~~~~~~~~~~~~~~~~~
    +
    +      The source code of UnRAR utility is freeware. This means:
    +
    +   1. All copyrights to RAR and the utility UnRAR are exclusively
    +      owned by the author - Alexander Roshal.
    +
    +   2. UnRAR source code may be used in any software to handle
    +      RAR archives without limitations free of charge, but cannot be
    +      used to develop RAR (WinRAR) compatible archiver and to
    +      re-create RAR compression algorithm, which is proprietary.
    +      Distribution of modified UnRAR source code in separate form
    +      or as a part of other software is permitted, provided that
    +      full text of this paragraph, starting from "UnRAR source code"
    +      words, is included in license, or in documentation if license
    +      is not available, and in source code comments of resulting package.
    +
    +   3. The UnRAR utility may be freely distributed. It is allowed
    +      to distribute UnRAR inside of other software packages.
    +
    +   4. THE RAR ARCHIVER AND THE UnRAR UTILITY ARE DISTRIBUTED "AS IS".
    +      NO WARRANTY OF ANY KIND IS EXPRESSED OR IMPLIED.  YOU USE AT 
    +      YOUR OWN RISK. THE AUTHOR WILL NOT BE LIABLE FOR DATA LOSS, 
    +      DAMAGES, LOSS OF PROFITS OR ANY OTHER KIND OF LOSS WHILE USING
    +      OR MISUSING THIS SOFTWARE.
    +
    +   5. Installing and using the UnRAR utility signifies acceptance of
    +      these terms and conditions of the license.
    +
    +   6. If you don't agree with terms of the license you must remove
    +      UnRAR files from your storage devices and cease to use the
    +      utility.
    +
    +      Thank you for your interest in RAR and UnRAR.
    +
    +
    +                                            Alexander L. Roshal
    +
    +
    +
    + +
    +url_parse +homepage + + +
    +
    Copyright 2007, Google Inc.
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are
    +met:
    +
    +    * Redistributions of source code must retain the above copyright
    +notice, this list of conditions and the following disclaimer.
    +    * Redistributions in binary form must reproduce the above
    +copyright notice, this list of conditions and the following disclaimer
    +in the documentation and/or other materials provided with the
    +distribution.
    +    * Neither the name of Google Inc. nor the names of its
    +contributors may be used to endorse or promote products derived from
    +this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +-------------------------------------------------------------------------------
    +
    +The file url_parse.cc is based on nsURLParsers.cc from Mozilla. This file is
    +licensed separately as follows:
    +
    +The contents of this file are subject to the Mozilla Public License Version
    +1.1 (the "License"); you may not use this file except in compliance with
    +the License. You may obtain a copy of the License at
    +http://www.mozilla.org/MPL/
    +
    +Software distributed under the License is distributed on an "AS IS" basis,
    +WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
    +for the specific language governing rights and limitations under the
    +License.
    +
    +The Original Code is mozilla.org code.
    +
    +The Initial Developer of the Original Code is
    +Netscape Communications Corporation.
    +Portions created by the Initial Developer are Copyright (C) 1998
    +the Initial Developer. All Rights Reserved.
    +
    +Contributor(s):
    +  Darin Fisher (original author)
    +
    +Alternatively, the contents of this file may be used under the terms of
    +either the GNU General Public License Version 2 or later (the "GPL"), or
    +the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
    +in which case the provisions of the GPL or the LGPL are applicable instead
    +of those above. If you wish to allow use of your version of this file only
    +under the terms of either the GPL or the LGPL, and not to allow others to
    +use your version of this file under the terms of the MPL, indicate your
    +decision by deleting the provisions above and replace them with the notice
    +and other provisions required by the GPL or the LGPL. If you do not delete
    +the provisions above, a recipient may use your version of this file under
    +the terms of any one of the MPL, the GPL or the LGPL.
    +
    +
    +
    + +
    +usrsctp +homepage + + +
    +
    (Copied from the COPYRIGHT file of
    +https://code.google.com/p/sctp-refimpl/source/browse/trunk/COPYRIGHT)
    +--------------------------------------------------------------------------------
    +
    +Copyright (c) 2001, 2002 Cisco Systems, Inc.
    +Copyright (c) 2002-12 Randall R. Stewart
    +Copyright (c) 2002-12 Michael Tuexen
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +
    +
    + +
    +v4l-utils +homepage + + +
    +
    +		  GNU LESSER GENERAL PUBLIC LICENSE
    +		       Version 2.1, February 1999
    +
    + Copyright (C) 1991, 1999 Free Software Foundation, Inc.
    +     51 Franklin Street, Suite 500, Boston, MA  02110-1335  USA
    + Everyone is permitted to copy and distribute verbatim copies
    + of this license document, but changing it is not allowed.
    +
    +[This is the first released version of the Lesser GPL.  It also counts
    + as the successor of the GNU Library Public License, version 2, hence
    + the version number 2.1.]
    +
    +			    Preamble
    +
    +  The licenses for most software are designed to take away your
    +freedom to share and change it.  By contrast, the GNU General Public
    +Licenses are intended to guarantee your freedom to share and change
    +free software--to make sure the software is free for all its users.
    +
    +  This license, the Lesser General Public License, applies to some
    +specially designated software packages--typically libraries--of the
    +Free Software Foundation and other authors who decide to use it.  You
    +can use it too, but we suggest you first think carefully about whether
    +this license or the ordinary General Public License is the better
    +strategy to use in any particular case, based on the explanations
    +below.
    +
    +  When we speak of free software, we are referring to freedom of use,
    +not price.  Our General Public Licenses are designed to make sure that
    +you have the freedom to distribute copies of free software (and charge
    +for this service if you wish); that you receive source code or can get
    +it if you want it; that you can change the software and use pieces of
    +it in new free programs; and that you are informed that you can do
    +these things.
    +
    +  To protect your rights, we need to make restrictions that forbid
    +distributors to deny you these rights or to ask you to surrender these
    +rights.  These restrictions translate to certain responsibilities for
    +you if you distribute copies of the library or if you modify it.
    +
    +  For example, if you distribute copies of the library, whether gratis
    +or for a fee, you must give the recipients all the rights that we gave
    +you.  You must make sure that they, too, receive or can get the source
    +code.  If you link other code with the library, you must provide
    +complete object files to the recipients, so that they can relink them
    +with the library after making changes to the library and recompiling
    +it.  And you must show them these terms so they know their rights.
    +
    +  We protect your rights with a two-step method: (1) we copyright the
    +library, and (2) we offer you this license, which gives you legal
    +permission to copy, distribute and/or modify the library.
    +
    +  To protect each distributor, we want to make it very clear that
    +there is no warranty for the free library.  Also, if the library is
    +modified by someone else and passed on, the recipients should know
    +that what they have is not the original version, so that the original
    +author's reputation will not be affected by problems that might be
    +introduced by others.
    +^L
    +  Finally, software patents pose a constant threat to the existence of
    +any free program.  We wish to make sure that a company cannot
    +effectively restrict the users of a free program by obtaining a
    +restrictive license from a patent holder.  Therefore, we insist that
    +any patent license obtained for a version of the library must be
    +consistent with the full freedom of use specified in this license.
    +
    +  Most GNU software, including some libraries, is covered by the
    +ordinary GNU General Public License.  This license, the GNU Lesser
    +General Public License, applies to certain designated libraries, and
    +is quite different from the ordinary General Public License.  We use
    +this license for certain libraries in order to permit linking those
    +libraries into non-free programs.
    +
    +  When a program is linked with a library, whether statically or using
    +a shared library, the combination of the two is legally speaking a
    +combined work, a derivative of the original library.  The ordinary
    +General Public License therefore permits such linking only if the
    +entire combination fits its criteria of freedom.  The Lesser General
    +Public License permits more lax criteria for linking other code with
    +the library.
    +
    +  We call this license the "Lesser" General Public License because it
    +does Less to protect the user's freedom than the ordinary General
    +Public License.  It also provides other free software developers Less
    +of an advantage over competing non-free programs.  These disadvantages
    +are the reason we use the ordinary General Public License for many
    +libraries.  However, the Lesser license provides advantages in certain
    +special circumstances.
    +
    +  For example, on rare occasions, there may be a special need to
    +encourage the widest possible use of a certain library, so that it
    +becomes a de-facto standard.  To achieve this, non-free programs must
    +be allowed to use the library.  A more frequent case is that a free
    +library does the same job as widely used non-free libraries.  In this
    +case, there is little to gain by limiting the free library to free
    +software only, so we use the Lesser General Public License.
    +
    +  In other cases, permission to use a particular library in non-free
    +programs enables a greater number of people to use a large body of
    +free software.  For example, permission to use the GNU C Library in
    +non-free programs enables many more people to use the whole GNU
    +operating system, as well as its variant, the GNU/Linux operating
    +system.
    +
    +  Although the Lesser General Public License is Less protective of the
    +users' freedom, it does ensure that the user of a program that is
    +linked with the Library has the freedom and the wherewithal to run
    +that program using a modified version of the Library.
    +
    +  The precise terms and conditions for copying, distribution and
    +modification follow.  Pay close attention to the difference between a
    +"work based on the library" and a "work that uses the library".  The
    +former contains code derived from the library, whereas the latter must
    +be combined with the library in order to run.
    +^L
    +		  GNU LESSER GENERAL PUBLIC LICENSE
    +   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
    +
    +  0. This License Agreement applies to any software library or other
    +program which contains a notice placed by the copyright holder or
    +other authorized party saying it may be distributed under the terms of
    +this Lesser General Public License (also called "this License").
    +Each licensee is addressed as "you".
    +
    +  A "library" means a collection of software functions and/or data
    +prepared so as to be conveniently linked with application programs
    +(which use some of those functions and data) to form executables.
    +
    +  The "Library", below, refers to any such software library or work
    +which has been distributed under these terms.  A "work based on the
    +Library" means either the Library or any derivative work under
    +copyright law: that is to say, a work containing the Library or a
    +portion of it, either verbatim or with modifications and/or translated
    +straightforwardly into another language.  (Hereinafter, translation is
    +included without limitation in the term "modification".)
    +
    +  "Source code" for a work means the preferred form of the work for
    +making modifications to it.  For a library, complete source code means
    +all the source code for all modules it contains, plus any associated
    +interface definition files, plus the scripts used to control
    +compilation and installation of the library.
    +
    +  Activities other than copying, distribution and modification are not
    +covered by this License; they are outside its scope.  The act of
    +running a program using the Library is not restricted, and output from
    +such a program is covered only if its contents constitute a work based
    +on the Library (independent of the use of the Library in a tool for
    +writing it).  Whether that is true depends on what the Library does
    +and what the program that uses the Library does.
    +
    +  1. You may copy and distribute verbatim copies of the Library's
    +complete source code as you receive it, in any medium, provided that
    +you conspicuously and appropriately publish on each copy an
    +appropriate copyright notice and disclaimer of warranty; keep intact
    +all the notices that refer to this License and to the absence of any
    +warranty; and distribute a copy of this License along with the
    +Library.
    +
    +  You may charge a fee for the physical act of transferring a copy,
    +and you may at your option offer warranty protection in exchange for a
    +fee.
    +
    +  2. You may modify your copy or copies of the Library or any portion
    +of it, thus forming a work based on the Library, and copy and
    +distribute such modifications or work under the terms of Section 1
    +above, provided that you also meet all of these conditions:
    +
    +    a) The modified work must itself be a software library.
    +
    +    b) You must cause the files modified to carry prominent notices
    +    stating that you changed the files and the date of any change.
    +
    +    c) You must cause the whole of the work to be licensed at no
    +    charge to all third parties under the terms of this License.
    +
    +    d) If a facility in the modified Library refers to a function or a
    +    table of data to be supplied by an application program that uses
    +    the facility, other than as an argument passed when the facility
    +    is invoked, then you must make a good faith effort to ensure that,
    +    in the event an application does not supply such function or
    +    table, the facility still operates, and performs whatever part of
    +    its purpose remains meaningful.
    +
    +    (For example, a function in a library to compute square roots has
    +    a purpose that is entirely well-defined independent of the
    +    application.  Therefore, Subsection 2d requires that any
    +    application-supplied function or table used by this function must
    +    be optional: if the application does not supply it, the square
    +    root function must still compute square roots.)
    +
    +These requirements apply to the modified work as a whole.  If
    +identifiable sections of that work are not derived from the Library,
    +and can be reasonably considered independent and separate works in
    +themselves, then this License, and its terms, do not apply to those
    +sections when you distribute them as separate works.  But when you
    +distribute the same sections as part of a whole which is a work based
    +on the Library, the distribution of the whole must be on the terms of
    +this License, whose permissions for other licensees extend to the
    +entire whole, and thus to each and every part regardless of who wrote
    +it.
    +
    +Thus, it is not the intent of this section to claim rights or contest
    +your rights to work written entirely by you; rather, the intent is to
    +exercise the right to control the distribution of derivative or
    +collective works based on the Library.
    +
    +In addition, mere aggregation of another work not based on the Library
    +with the Library (or with a work based on the Library) on a volume of
    +a storage or distribution medium does not bring the other work under
    +the scope of this License.
    +
    +  3. You may opt to apply the terms of the ordinary GNU General Public
    +License instead of this License to a given copy of the Library.  To do
    +this, you must alter all the notices that refer to this License, so
    +that they refer to the ordinary GNU General Public License, version 2,
    +instead of to this License.  (If a newer version than version 2 of the
    +ordinary GNU General Public License has appeared, then you can specify
    +that version instead if you wish.)  Do not make any other change in
    +these notices.
    +^L
    +  Once this change is made in a given copy, it is irreversible for
    +that copy, so the ordinary GNU General Public License applies to all
    +subsequent copies and derivative works made from that copy.
    +
    +  This option is useful when you wish to copy part of the code of
    +the Library into a program that is not a library.
    +
    +  4. You may copy and distribute the Library (or a portion or
    +derivative of it, under Section 2) in object code or executable form
    +under the terms of Sections 1 and 2 above provided that you accompany
    +it with the complete corresponding machine-readable source code, which
    +must be distributed under the terms of Sections 1 and 2 above on a
    +medium customarily used for software interchange.
    +
    +  If distribution of object code is made by offering access to copy
    +from a designated place, then offering equivalent access to copy the
    +source code from the same place satisfies the requirement to
    +distribute the source code, even though third parties are not
    +compelled to copy the source along with the object code.
    +
    +  5. A program that contains no derivative of any portion of the
    +Library, but is designed to work with the Library by being compiled or
    +linked with it, is called a "work that uses the Library".  Such a
    +work, in isolation, is not a derivative work of the Library, and
    +therefore falls outside the scope of this License.
    +
    +  However, linking a "work that uses the Library" with the Library
    +creates an executable that is a derivative of the Library (because it
    +contains portions of the Library), rather than a "work that uses the
    +library".  The executable is therefore covered by this License.
    +Section 6 states terms for distribution of such executables.
    +
    +  When a "work that uses the Library" uses material from a header file
    +that is part of the Library, the object code for the work may be a
    +derivative work of the Library even though the source code is not.
    +Whether this is true is especially significant if the work can be
    +linked without the Library, or if the work is itself a library.  The
    +threshold for this to be true is not precisely defined by law.
    +
    +  If such an object file uses only numerical parameters, data
    +structure layouts and accessors, and small macros and small inline
    +functions (ten lines or less in length), then the use of the object
    +file is unrestricted, regardless of whether it is legally a derivative
    +work.  (Executables containing this object code plus portions of the
    +Library will still fall under Section 6.)
    +
    +  Otherwise, if the work is a derivative of the Library, you may
    +distribute the object code for the work under the terms of Section 6.
    +Any executables containing that work also fall under Section 6,
    +whether or not they are linked directly with the Library itself.
    +^L
    +  6. As an exception to the Sections above, you may also combine or
    +link a "work that uses the Library" with the Library to produce a
    +work containing portions of the Library, and distribute that work
    +under terms of your choice, provided that the terms permit
    +modification of the work for the customer's own use and reverse
    +engineering for debugging such modifications.
    +
    +  You must give prominent notice with each copy of the work that the
    +Library is used in it and that the Library and its use are covered by
    +this License.  You must supply a copy of this License.  If the work
    +during execution displays copyright notices, you must include the
    +copyright notice for the Library among them, as well as a reference
    +directing the user to the copy of this License.  Also, you must do one
    +of these things:
    +
    +    a) Accompany the work with the complete corresponding
    +    machine-readable source code for the Library including whatever
    +    changes were used in the work (which must be distributed under
    +    Sections 1 and 2 above); and, if the work is an executable linked
    +    with the Library, with the complete machine-readable "work that
    +    uses the Library", as object code and/or source code, so that the
    +    user can modify the Library and then relink to produce a modified
    +    executable containing the modified Library.  (It is understood
    +    that the user who changes the contents of definitions files in the
    +    Library will not necessarily be able to recompile the application
    +    to use the modified definitions.)
    +
    +    b) Use a suitable shared library mechanism for linking with the
    +    Library.  A suitable mechanism is one that (1) uses at run time a
    +    copy of the library already present on the user's computer system,
    +    rather than copying library functions into the executable, and (2)
    +    will operate properly with a modified version of the library, if
    +    the user installs one, as long as the modified version is
    +    interface-compatible with the version that the work was made with.
    +
    +    c) Accompany the work with a written offer, valid for at least
    +    three years, to give the same user the materials specified in
    +    Subsection 6a, above, for a charge no more than the cost of
    +    performing this distribution.
    +
    +    d) If distribution of the work is made by offering access to copy
    +    from a designated place, offer equivalent access to copy the above
    +    specified materials from the same place.
    +
    +    e) Verify that the user has already received a copy of these
    +    materials or that you have already sent this user a copy.
    +
    +  For an executable, the required form of the "work that uses the
    +Library" must include any data and utility programs needed for
    +reproducing the executable from it.  However, as a special exception,
    +the materials to be distributed need not include anything that is
    +normally distributed (in either source or binary form) with the major
    +components (compiler, kernel, and so on) of the operating system on
    +which the executable runs, unless that component itself accompanies
    +the executable.
    +
    +  It may happen that this requirement contradicts the license
    +restrictions of other proprietary libraries that do not normally
    +accompany the operating system.  Such a contradiction means you cannot
    +use both them and the Library together in an executable that you
    +distribute.
    +^L
    +  7. You may place library facilities that are a work based on the
    +Library side-by-side in a single library together with other library
    +facilities not covered by this License, and distribute such a combined
    +library, provided that the separate distribution of the work based on
    +the Library and of the other library facilities is otherwise
    +permitted, and provided that you do these two things:
    +
    +    a) Accompany the combined library with a copy of the same work
    +    based on the Library, uncombined with any other library
    +    facilities.  This must be distributed under the terms of the
    +    Sections above.
    +
    +    b) Give prominent notice with the combined library of the fact
    +    that part of it is a work based on the Library, and explaining
    +    where to find the accompanying uncombined form of the same work.
    +
    +  8. You may not copy, modify, sublicense, link with, or distribute
    +the Library except as expressly provided under this License.  Any
    +attempt otherwise to copy, modify, sublicense, link with, or
    +distribute the Library is void, and will automatically terminate your
    +rights under this License.  However, parties who have received copies,
    +or rights, from you under this License will not have their licenses
    +terminated so long as such parties remain in full compliance.
    +
    +  9. You are not required to accept this License, since you have not
    +signed it.  However, nothing else grants you permission to modify or
    +distribute the Library or its derivative works.  These actions are
    +prohibited by law if you do not accept this License.  Therefore, by
    +modifying or distributing the Library (or any work based on the
    +Library), you indicate your acceptance of this License to do so, and
    +all its terms and conditions for copying, distributing or modifying
    +the Library or works based on it.
    +
    +  10. Each time you redistribute the Library (or any work based on the
    +Library), the recipient automatically receives a license from the
    +original licensor to copy, distribute, link with or modify the Library
    +subject to these terms and conditions.  You may not impose any further
    +restrictions on the recipients' exercise of the rights granted herein.
    +You are not responsible for enforcing compliance by third parties with
    +this License.
    +^L
    +  11. If, as a consequence of a court judgment or allegation of patent
    +infringement or for any other reason (not limited to patent issues),
    +conditions are imposed on you (whether by court order, agreement or
    +otherwise) that contradict the conditions of this License, they do not
    +excuse you from the conditions of this License.  If you cannot
    +distribute so as to satisfy simultaneously your obligations under this
    +License and any other pertinent obligations, then as a consequence you
    +may not distribute the Library at all.  For example, if a patent
    +license would not permit royalty-free redistribution of the Library by
    +all those who receive copies directly or indirectly through you, then
    +the only way you could satisfy both it and this License would be to
    +refrain entirely from distribution of the Library.
    +
    +If any portion of this section is held invalid or unenforceable under
    +any particular circumstance, the balance of the section is intended to
    +apply, and the section as a whole is intended to apply in other
    +circumstances.
    +
    +It is not the purpose of this section to induce you to infringe any
    +patents or other property right claims or to contest validity of any
    +such claims; this section has the sole purpose of protecting the
    +integrity of the free software distribution system which is
    +implemented by public license practices.  Many people have made
    +generous contributions to the wide range of software distributed
    +through that system in reliance on consistent application of that
    +system; it is up to the author/donor to decide if he or she is willing
    +to distribute software through any other system and a licensee cannot
    +impose that choice.
    +
    +This section is intended to make thoroughly clear what is believed to
    +be a consequence of the rest of this License.
    +
    +  12. If the distribution and/or use of the Library is restricted in
    +certain countries either by patents or by copyrighted interfaces, the
    +original copyright holder who places the Library under this License
    +may add an explicit geographical distribution limitation excluding those
    +countries, so that distribution is permitted only in or among
    +countries not thus excluded.  In such case, this License incorporates
    +the limitation as if written in the body of this License.
    +
    +  13. The Free Software Foundation may publish revised and/or new
    +versions of the Lesser General Public License from time to time.
    +Such new versions will be similar in spirit to the present version,
    +but may differ in detail to address new problems or concerns.
    +
    +Each version is given a distinguishing version number.  If the Library
    +specifies a version number of this License which applies to it and
    +"any later version", you have the option of following the terms and
    +conditions either of that version or of any later version published by
    +the Free Software Foundation.  If the Library does not specify a
    +license version number, you may choose any version ever published by
    +the Free Software Foundation.
    +^L
    +  14. If you wish to incorporate parts of the Library into other free
    +programs whose distribution conditions are incompatible with these,
    +write to the author to ask for permission.  For software which is
    +copyrighted by the Free Software Foundation, write to the Free
    +Software Foundation; we sometimes make exceptions for this.  Our
    +decision will be guided by the two goals of preserving the free status
    +of all derivatives of our free software and of promoting the sharing
    +and reuse of software generally.
    +
    +			    NO WARRANTY
    +
    +  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
    +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
    +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
    +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
    +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    +PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
    +LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
    +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
    +
    +  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
    +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
    +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
    +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
    +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
    +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
    +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
    +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
    +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
    +DAMAGES.
    +
    +		     END OF TERMS AND CONDITIONS
    +^L
    +	   How to Apply These Terms to Your New Libraries
    +
    +  If you develop a new library, and you want it to be of the greatest
    +possible use to the public, we recommend making it free software that
    +everyone can redistribute and change.  You can do so by permitting
    +redistribution under these terms (or, alternatively, under the terms
    +of the ordinary General Public License).
    +
    +  To apply these terms, attach the following notices to the library.
    +It is safest to attach them to the start of each source file to most
    +effectively convey the exclusion of warranty; and each file should
    +have at least the "copyright" line and a pointer to where the full
    +notice is found.
    +
    +
    +    <one line to give the library's name and a brief idea of what it does.>
    +    Copyright (C) <year>  <name of author>
    +
    +    This library is free software; you can redistribute it and/or
    +    modify it under the terms of the GNU Lesser General Public
    +    License as published by the Free Software Foundation; either
    +    version 2.1 of the License, or (at your option) any later version.
    +
    +    This library is distributed in the hope that it will be useful,
    +    but WITHOUT ANY WARRANTY; without even the implied warranty of
    +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    +    Lesser General Public License for more details.
    +
    +    You should have received a copy of the GNU Lesser General Public
    +    License along with this library; if not, write to the Free Software
    +    Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02111-1307  USA
    +
    +Also add information on how to contact you by electronic and paper mail.
    +
    +You should also get your employer (if you work as a programmer) or
    +your school, if any, to sign a "copyright disclaimer" for the library,
    +if necessary.  Here is a sample; alter the names:
    +
    +  Yoyodyne, Inc., hereby disclaims all copyright interest in the
    +  library `Frob' (a library for tweaking knobs) written by James
    +  Random Hacker.
    +
    +  <signature of Ty Coon>, 1 April 1990
    +  Ty Coon, President of Vice
    +
    +That's all there is to it!
    +
    +
    +
    +
    +
    + +
    +V8 JavaScript Engine +homepage + + +
    +
    This license applies to all parts of V8 that are not externally
    +maintained libraries.  The externally maintained libraries used by V8
    +are:
    +
    +  - PCRE test suite, located in
    +    test/mjsunit/third_party/regexp-pcre/regexp-pcre.js.  This is based on the
    +    test suite from PCRE-7.3, which is copyrighted by the University
    +    of Cambridge and Google, Inc.  The copyright notice and license
    +    are embedded in regexp-pcre.js.
    +
    +  - Layout tests, located in test/mjsunit/third_party/object-keys.  These are
    +    based on layout tests from webkit.org which are copyrighted by
    +    Apple Computer, Inc. and released under a 3-clause BSD license.
    +
    +  - Strongtalk assembler, the basis of the files assembler-arm-inl.h,
    +    assembler-arm.cc, assembler-arm.h, assembler-ia32-inl.h,
    +    assembler-ia32.cc, assembler-ia32.h, assembler-x64-inl.h,
    +    assembler-x64.cc, assembler-x64.h, assembler-mips-inl.h,
    +    assembler-mips.cc, assembler-mips.h, assembler.cc and assembler.h.
    +    This code is copyrighted by Sun Microsystems Inc. and released
    +    under a 3-clause BSD license.
    +
    +  - Valgrind client API header, located at third_party/valgrind/valgrind.h
    +    This is release under the BSD license.
    +
    +  - antlr4 parser generator Cpp library located in third_party/antlr4
    +    This is release under the BSD license.
    +
    +These libraries have their own licenses; we recommend you read them,
    +as their terms may differ from the terms below.
    +
    +Further license information can be found in LICENSE files located in 
    +sub-directories.
    +
    +Copyright 2014, the V8 project authors. All rights reserved.
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are
    +met:
    +
    +    * Redistributions of source code must retain the above copyright
    +      notice, this list of conditions and the following disclaimer.
    +    * Redistributions in binary form must reproduce the above
    +      copyright notice, this list of conditions and the following
    +      disclaimer in the documentation and/or other materials provided
    +      with the distribution.
    +    * Neither the name of Google Inc. nor the names of its
    +      contributors may be used to endorse or promote products derived
    +      from this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +valgrind +homepage + + +
    +
       Notice that the following BSD-style license applies to the Valgrind header
    +   files used by Chromium (valgrind.h and memcheck.h). However, the rest of
    +   Valgrind is licensed under the terms of the GNU General Public License,
    +   version 2, unless otherwise indicated.
    +
    +   ----------------------------------------------------------------
    +
    +   Copyright (C) 2000-2008 Julian Seward.  All rights reserved.
    +
    +   Redistribution and use in source and binary forms, with or without
    +   modification, are permitted provided that the following conditions
    +   are met:
    +
    +   1. Redistributions of source code must retain the above copyright
    +      notice, this list of conditions and the following disclaimer.
    +
    +   2. The origin of this software must not be misrepresented; you must 
    +      not claim that you wrote the original software.  If you use this 
    +      software in a product, an acknowledgment in the product 
    +      documentation would be appreciated but is not required.
    +
    +   3. Altered source versions must be plainly marked as such, and must
    +      not be misrepresented as being the original software.
    +
    +   4. The name of the author may not be used to endorse or promote 
    +      products derived from this software without specific prior written 
    +      permission.
    +
    +   THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
    +   OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +   ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
    +   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
    +   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
    +   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
    +   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
    +   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +Web Animations JS +homepage + + +
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +
    + +
    +WebKit +homepage + + +
    +
    (WebKit doesn't distribute an explicit license.  This LICENSE is derived from
    +license text in the source.)
    +
    +Copyright (c) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
    +2006, 2007 Alexander Kellett, Alexey Proskuryakov, Alex Mathews, Allan
    +Sandfeld Jensen, Alp Toker, Anders Carlsson, Andrew Wellington, Antti
    +Koivisto, Apple Inc., Arthur Langereis, Baron Schwartz, Bjoern Graf,
    +Brent Fulgham, Cameron Zwarich, Charles Samuels, Christian Dywan,
    +Collabora Ltd., Cyrus Patel, Daniel Molkentin, Dave Maclachlan, David
    +Smith, Dawit Alemayehu, Dirk Mueller, Dirk Schulze, Don Gibson, Enrico
    +Ros, Eric Seidel, Frederik Holljen, Frerich Raabe, Friedmann Kleint,
    +George Staikos, Google Inc., Graham Dennis, Harri Porten, Henry Mason,
    +Hiroyuki Ikezoe, Holger Hans Peter Freyther, IBM, James G. Speth, Jan
    +Alonzo, Jean-Loup Gailly, John Reis, Jonas Witt, Jon Shier, Jonas
    +Witt, Julien Chaffraix, Justin Haygood, Kevin Ollivier, Kevin Watters,
    +Kimmo Kinnunen, Kouhei Sutou, Krzysztof Kowalczyk, Lars Knoll, Luca
    +Bruno, Maks Orlovich, Malte Starostik, Mark Adler, Martin Jones,
    +Marvin Decker, Matt Lilek, Michael Emmel, Mitz Pettel, mozilla.org,
    +Netscape Communications Corporation, Nicholas Shanks, Nikolas
    +Zimmermann, Nokia, Oliver Hunt, Opened Hand, Paul Johnston, Peter
    +Kelly, Pioneer Research Center USA, Rich Moore, Rob Buis, Robin Dunn,
    +Ronald Tschalär, Samuel Weinig, Simon Hausmann, Staikos Computing
    +Services Inc., Stefan Schimanski, Symantec Corporation, The Dojo
    +Foundation, The Karbon Developers, Thomas Boyer, Tim Copperfield,
    +Tobias Anton, Torben Weis, Trolltech, University of Cambridge, Vaclav
    +Slavik, Waldo Bastian, Xan Lopez, Zack Rusin
    +
    +The terms and conditions vary from file to file, but are one of:
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are
    +met:
    +
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the
    +   distribution.
    +
    +*OR*
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are
    +met:
    +
    +1. Redistributions of source code must retain the above copyright
    +   notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +   notice, this list of conditions and the following disclaimer in the
    +   documentation and/or other materials provided with the
    +   distribution.
    +3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
    +   its contributors may be used to endorse or promote products derived
    +   from this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
    +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
    +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
    +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
    +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
    +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
    +
    +OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +                  GNU LIBRARY GENERAL PUBLIC LICENSE
    +                       Version 2, June 1991
    +
    + Copyright (C) 1991 Free Software Foundation, Inc.
    + 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
    + Everyone is permitted to copy and distribute verbatim copies
    + of this license document, but changing it is not allowed.
    +
    +[This is the first released version of the library GPL.  It is
    + numbered 2 because it goes with version 2 of the ordinary GPL.]
    +
    +                            Preamble
    +
    +  The licenses for most software are designed to take away your
    +freedom to share and change it.  By contrast, the GNU General Public
    +Licenses are intended to guarantee your freedom to share and change
    +free software--to make sure the software is free for all its users.
    +
    +  This license, the Library General Public License, applies to some
    +specially designated Free Software Foundation software, and to any
    +other libraries whose authors decide to use it.  You can use it for
    +your libraries, too.
    +
    +  When we speak of free software, we are referring to freedom, not
    +price.  Our General Public Licenses are designed to make sure that you
    +have the freedom to distribute copies of free software (and charge for
    +this service if you wish), that you receive source code or can get it
    +if you want it, that you can change the software or use pieces of it
    +in new free programs; and that you know you can do these things.
    +
    +  To protect your rights, we need to make restrictions that forbid
    +anyone to deny you these rights or to ask you to surrender the rights.
    +These restrictions translate to certain responsibilities for you if
    +you distribute copies of the library, or if you modify it.
    +
    +  For example, if you distribute copies of the library, whether gratis
    +or for a fee, you must give the recipients all the rights that we gave
    +you.  You must make sure that they, too, receive or can get the source
    +code.  If you link a program with the library, you must provide
    +complete object files to the recipients so that they can relink them
    +with the library, after making changes to the library and recompiling
    +it.  And you must show them these terms so they know their rights.
    +
    +  Our method of protecting your rights has two steps: (1) copyright
    +the library, and (2) offer you this license which gives you legal
    +permission to copy, distribute and/or modify the library.
    +
    +  Also, for each distributor's protection, we want to make certain
    +that everyone understands that there is no warranty for this free
    +library.  If the library is modified by someone else and passed on, we
    +want its recipients to know that what they have is not the original
    +version, so that any problems introduced by others will not reflect on
    +the original authors' reputations.
    +
    +  Finally, any free program is threatened constantly by software
    +patents.  We wish to avoid the danger that companies distributing free
    +software will individually obtain patent licenses, thus in effect
    +transforming the program into proprietary software.  To prevent this,
    +we have made it clear that any patent must be licensed for everyone's
    +free use or not licensed at all.
    +
    +  Most GNU software, including some libraries, is covered by the ordinary
    +GNU General Public License, which was designed for utility programs.  This
    +license, the GNU Library General Public License, applies to certain
    +designated libraries.  This license is quite different from the ordinary
    +one; be sure to read it in full, and don't assume that anything in it is
    +the same as in the ordinary license.
    +
    +  The reason we have a separate public license for some libraries is that
    +they blur the distinction we usually make between modifying or adding to a
    +program and simply using it.  Linking a program with a library, without
    +changing the library, is in some sense simply using the library, and is
    +analogous to running a utility program or application program.  However, in
    +a textual and legal sense, the linked executable is a combined work, a
    +derivative of the original library, and the ordinary General Public License
    +treats it as such.
    +
    +  Because of this blurred distinction, using the ordinary General
    +Public License for libraries did not effectively promote software
    +sharing, because most developers did not use the libraries.  We
    +concluded that weaker conditions might promote sharing better.
    +
    +  However, unrestricted linking of non-free programs would deprive the
    +users of those programs of all benefit from the free status of the
    +libraries themselves.  This Library General Public License is intended to
    +permit developers of non-free programs to use free libraries, while
    +preserving your freedom as a user of such programs to change the free
    +libraries that are incorporated in them.  (We have not seen how to achieve
    +this as regards changes in header files, but we have achieved it as regards
    +changes in the actual functions of the Library.)  The hope is that this
    +will lead to faster development of free libraries.
    +
    +  The precise terms and conditions for copying, distribution and
    +modification follow.  Pay close attention to the difference between a
    +"work based on the library" and a "work that uses the library".  The
    +former contains code derived from the library, while the latter only
    +works together with the library.
    +
    +  Note that it is possible for a library to be covered by the ordinary
    +General Public License rather than by this special one.
    +
    +                  GNU LIBRARY GENERAL PUBLIC LICENSE
    +   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
    +
    +  0. This License Agreement applies to any software library which
    +contains a notice placed by the copyright holder or other authorized
    +party saying it may be distributed under the terms of this Library
    +General Public License (also called "this License").  Each licensee is
    +addressed as "you".
    +
    +  A "library" means a collection of software functions and/or data
    +prepared so as to be conveniently linked with application programs
    +(which use some of those functions and data) to form executables.
    +
    +  The "Library", below, refers to any such software library or work
    +which has been distributed under these terms.  A "work based on the
    +Library" means either the Library or any derivative work under
    +copyright law: that is to say, a work containing the Library or a
    +portion of it, either verbatim or with modifications and/or translated
    +straightforwardly into another language.  (Hereinafter, translation is
    +included without limitation in the term "modification".)
    +
    +  "Source code" for a work means the preferred form of the work for
    +making modifications to it.  For a library, complete source code means
    +all the source code for all modules it contains, plus any associated
    +interface definition files, plus the scripts used to control compilation
    +and installation of the library.
    +
    +  Activities other than copying, distribution and modification are not
    +covered by this License; they are outside its scope.  The act of
    +running a program using the Library is not restricted, and output from
    +such a program is covered only if its contents constitute a work based
    +on the Library (independent of the use of the Library in a tool for
    +writing it).  Whether that is true depends on what the Library does
    +and what the program that uses the Library does.
    +  
    +  1. You may copy and distribute verbatim copies of the Library's
    +complete source code as you receive it, in any medium, provided that
    +you conspicuously and appropriately publish on each copy an
    +appropriate copyright notice and disclaimer of warranty; keep intact
    +all the notices that refer to this License and to the absence of any
    +warranty; and distribute a copy of this License along with the
    +Library.
    +
    +  You may charge a fee for the physical act of transferring a copy,
    +and you may at your option offer warranty protection in exchange for a
    +fee.
    +
    +  2. You may modify your copy or copies of the Library or any portion
    +of it, thus forming a work based on the Library, and copy and
    +distribute such modifications or work under the terms of Section 1
    +above, provided that you also meet all of these conditions:
    +
    +    a) The modified work must itself be a software library.
    +
    +    b) You must cause the files modified to carry prominent notices
    +    stating that you changed the files and the date of any change.
    +
    +    c) You must cause the whole of the work to be licensed at no
    +    charge to all third parties under the terms of this License.
    +
    +    d) If a facility in the modified Library refers to a function or a
    +    table of data to be supplied by an application program that uses
    +    the facility, other than as an argument passed when the facility
    +    is invoked, then you must make a good faith effort to ensure that,
    +    in the event an application does not supply such function or
    +    table, the facility still operates, and performs whatever part of
    +    its purpose remains meaningful.
    +
    +    (For example, a function in a library to compute square roots has
    +    a purpose that is entirely well-defined independent of the
    +    application.  Therefore, Subsection 2d requires that any
    +    application-supplied function or table used by this function must
    +    be optional: if the application does not supply it, the square
    +    root function must still compute square roots.)
    +
    +These requirements apply to the modified work as a whole.  If
    +identifiable sections of that work are not derived from the Library,
    +and can be reasonably considered independent and separate works in
    +themselves, then this License, and its terms, do not apply to those
    +sections when you distribute them as separate works.  But when you
    +distribute the same sections as part of a whole which is a work based
    +on the Library, the distribution of the whole must be on the terms of
    +this License, whose permissions for other licensees extend to the
    +entire whole, and thus to each and every part regardless of who wrote
    +it.
    +
    +Thus, it is not the intent of this section to claim rights or contest
    +your rights to work written entirely by you; rather, the intent is to
    +exercise the right to control the distribution of derivative or
    +collective works based on the Library.
    +
    +In addition, mere aggregation of another work not based on the Library
    +with the Library (or with a work based on the Library) on a volume of
    +a storage or distribution medium does not bring the other work under
    +the scope of this License.
    +
    +  3. You may opt to apply the terms of the ordinary GNU General Public
    +License instead of this License to a given copy of the Library.  To do
    +this, you must alter all the notices that refer to this License, so
    +that they refer to the ordinary GNU General Public License, version 2,
    +instead of to this License.  (If a newer version than version 2 of the
    +ordinary GNU General Public License has appeared, then you can specify
    +that version instead if you wish.)  Do not make any other change in
    +these notices.
    +
    +  Once this change is made in a given copy, it is irreversible for
    +that copy, so the ordinary GNU General Public License applies to all
    +subsequent copies and derivative works made from that copy.
    +
    +  This option is useful when you wish to copy part of the code of
    +the Library into a program that is not a library.
    +
    +  4. You may copy and distribute the Library (or a portion or
    +derivative of it, under Section 2) in object code or executable form
    +under the terms of Sections 1 and 2 above provided that you accompany
    +it with the complete corresponding machine-readable source code, which
    +must be distributed under the terms of Sections 1 and 2 above on a
    +medium customarily used for software interchange.
    +
    +  If distribution of object code is made by offering access to copy
    +from a designated place, then offering equivalent access to copy the
    +source code from the same place satisfies the requirement to
    +distribute the source code, even though third parties are not
    +compelled to copy the source along with the object code.
    +
    +  5. A program that contains no derivative of any portion of the
    +Library, but is designed to work with the Library by being compiled or
    +linked with it, is called a "work that uses the Library".  Such a
    +work, in isolation, is not a derivative work of the Library, and
    +therefore falls outside the scope of this License.
    +
    +  However, linking a "work that uses the Library" with the Library
    +creates an executable that is a derivative of the Library (because it
    +contains portions of the Library), rather than a "work that uses the
    +library".  The executable is therefore covered by this License.
    +Section 6 states terms for distribution of such executables.
    +
    +  When a "work that uses the Library" uses material from a header file
    +that is part of the Library, the object code for the work may be a
    +derivative work of the Library even though the source code is not.
    +Whether this is true is especially significant if the work can be
    +linked without the Library, or if the work is itself a library.  The
    +threshold for this to be true is not precisely defined by law.
    +
    +  If such an object file uses only numerical parameters, data
    +structure layouts and accessors, and small macros and small inline
    +functions (ten lines or less in length), then the use of the object
    +file is unrestricted, regardless of whether it is legally a derivative
    +work.  (Executables containing this object code plus portions of the
    +Library will still fall under Section 6.)
    +
    +  Otherwise, if the work is a derivative of the Library, you may
    +distribute the object code for the work under the terms of Section 6.
    +Any executables containing that work also fall under Section 6,
    +whether or not they are linked directly with the Library itself.
    +
    +  6. As an exception to the Sections above, you may also compile or
    +link a "work that uses the Library" with the Library to produce a
    +work containing portions of the Library, and distribute that work
    +under terms of your choice, provided that the terms permit
    +modification of the work for the customer's own use and reverse
    +engineering for debugging such modifications.
    +
    +  You must give prominent notice with each copy of the work that the
    +Library is used in it and that the Library and its use are covered by
    +this License.  You must supply a copy of this License.  If the work
    +during execution displays copyright notices, you must include the
    +copyright notice for the Library among them, as well as a reference
    +directing the user to the copy of this License.  Also, you must do one
    +of these things:
    +
    +    a) Accompany the work with the complete corresponding
    +    machine-readable source code for the Library including whatever
    +    changes were used in the work (which must be distributed under
    +    Sections 1 and 2 above); and, if the work is an executable linked
    +    with the Library, with the complete machine-readable "work that
    +    uses the Library", as object code and/or source code, so that the
    +    user can modify the Library and then relink to produce a modified
    +    executable containing the modified Library.  (It is understood
    +    that the user who changes the contents of definitions files in the
    +    Library will not necessarily be able to recompile the application
    +    to use the modified definitions.)
    +
    +    b) Accompany the work with a written offer, valid for at
    +    least three years, to give the same user the materials
    +    specified in Subsection 6a, above, for a charge no more
    +    than the cost of performing this distribution.
    +
    +    c) If distribution of the work is made by offering access to copy
    +    from a designated place, offer equivalent access to copy the above
    +    specified materials from the same place.
    +
    +    d) Verify that the user has already received a copy of these
    +    materials or that you have already sent this user a copy.
    +
    +  For an executable, the required form of the "work that uses the
    +Library" must include any data and utility programs needed for
    +reproducing the executable from it.  However, as a special exception,
    +the source code distributed need not include anything that is normally
    +distributed (in either source or binary form) with the major
    +components (compiler, kernel, and so on) of the operating system on
    +which the executable runs, unless that component itself accompanies
    +the executable.
    +
    +  It may happen that this requirement contradicts the license
    +restrictions of other proprietary libraries that do not normally
    +accompany the operating system.  Such a contradiction means you cannot
    +use both them and the Library together in an executable that you
    +distribute.
    +
    +  7. You may place library facilities that are a work based on the
    +Library side-by-side in a single library together with other library
    +facilities not covered by this License, and distribute such a combined
    +library, provided that the separate distribution of the work based on
    +the Library and of the other library facilities is otherwise
    +permitted, and provided that you do these two things:
    +
    +    a) Accompany the combined library with a copy of the same work
    +    based on the Library, uncombined with any other library
    +    facilities.  This must be distributed under the terms of the
    +    Sections above.
    +
    +    b) Give prominent notice with the combined library of the fact
    +    that part of it is a work based on the Library, and explaining
    +    where to find the accompanying uncombined form of the same work.
    +
    +  8. You may not copy, modify, sublicense, link with, or distribute
    +the Library except as expressly provided under this License.  Any
    +attempt otherwise to copy, modify, sublicense, link with, or
    +distribute the Library is void, and will automatically terminate your
    +rights under this License.  However, parties who have received copies,
    +or rights, from you under this License will not have their licenses
    +terminated so long as such parties remain in full compliance.
    +
    +  9. You are not required to accept this License, since you have not
    +signed it.  However, nothing else grants you permission to modify or
    +distribute the Library or its derivative works.  These actions are
    +prohibited by law if you do not accept this License.  Therefore, by
    +modifying or distributing the Library (or any work based on the
    +Library), you indicate your acceptance of this License to do so, and
    +all its terms and conditions for copying, distributing or modifying
    +the Library or works based on it.
    +
    +  10. Each time you redistribute the Library (or any work based on the
    +Library), the recipient automatically receives a license from the
    +original licensor to copy, distribute, link with or modify the Library
    +subject to these terms and conditions.  You may not impose any further
    +restrictions on the recipients' exercise of the rights granted herein.
    +You are not responsible for enforcing compliance by third parties to
    +this License.
    +
    +  11. If, as a consequence of a court judgment or allegation of patent
    +infringement or for any other reason (not limited to patent issues),
    +conditions are imposed on you (whether by court order, agreement or
    +otherwise) that contradict the conditions of this License, they do not
    +excuse you from the conditions of this License.  If you cannot
    +distribute so as to satisfy simultaneously your obligations under this
    +License and any other pertinent obligations, then as a consequence you
    +may not distribute the Library at all.  For example, if a patent
    +license would not permit royalty-free redistribution of the Library by
    +all those who receive copies directly or indirectly through you, then
    +the only way you could satisfy both it and this License would be to
    +refrain entirely from distribution of the Library.
    +
    +If any portion of this section is held invalid or unenforceable under any
    +particular circumstance, the balance of the section is intended to apply,
    +and the section as a whole is intended to apply in other circumstances.
    +
    +It is not the purpose of this section to induce you to infringe any
    +patents or other property right claims or to contest validity of any
    +such claims; this section has the sole purpose of protecting the
    +integrity of the free software distribution system which is
    +implemented by public license practices.  Many people have made
    +generous contributions to the wide range of software distributed
    +through that system in reliance on consistent application of that
    +system; it is up to the author/donor to decide if he or she is willing
    +to distribute software through any other system and a licensee cannot
    +impose that choice.
    +
    +This section is intended to make thoroughly clear what is believed to
    +be a consequence of the rest of this License.
    +
    +  12. If the distribution and/or use of the Library is restricted in
    +certain countries either by patents or by copyrighted interfaces, the
    +original copyright holder who places the Library under this License may add
    +an explicit geographical distribution limitation excluding those countries,
    +so that distribution is permitted only in or among countries not thus
    +excluded.  In such case, this License incorporates the limitation as if
    +written in the body of this License.
    +
    +  13. The Free Software Foundation may publish revised and/or new
    +versions of the Library General Public License from time to time.
    +Such new versions will be similar in spirit to the present version,
    +but may differ in detail to address new problems or concerns.
    +
    +Each version is given a distinguishing version number.  If the Library
    +specifies a version number of this License which applies to it and
    +"any later version", you have the option of following the terms and
    +conditions either of that version or of any later version published by
    +the Free Software Foundation.  If the Library does not specify a
    +license version number, you may choose any version ever published by
    +the Free Software Foundation.
    +
    +  14. If you wish to incorporate parts of the Library into other free
    +programs whose distribution conditions are incompatible with these,
    +write to the author to ask for permission.  For software which is
    +copyrighted by the Free Software Foundation, write to the Free
    +Software Foundation; we sometimes make exceptions for this.  Our
    +decision will be guided by the two goals of preserving the free status
    +of all derivatives of our free software and of promoting the sharing
    +and reuse of software generally.
    +
    +                            NO WARRANTY
    +
    +  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
    +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
    +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
    +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
    +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    +PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
    +LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
    +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
    +
    +  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
    +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
    +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
    +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
    +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
    +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
    +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
    +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
    +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
    +DAMAGES.
    +
    +                     END OF TERMS AND CONDITIONS
    +
    +                  GNU LESSER GENERAL PUBLIC LICENSE
    +                       Version 2.1, February 1999
    +
    + Copyright (C) 1991, 1999 Free Software Foundation, Inc.
    + 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
    + Everyone is permitted to copy and distribute verbatim copies
    + of this license document, but changing it is not allowed.
    +
    +[This is the first released version of the Lesser GPL.  It also counts
    + as the successor of the GNU Library Public License, version 2, hence
    + the version number 2.1.]
    +
    +                            Preamble
    +
    +  The licenses for most software are designed to take away your
    +freedom to share and change it.  By contrast, the GNU General Public
    +Licenses are intended to guarantee your freedom to share and change
    +free software--to make sure the software is free for all its users.
    +
    +  This license, the Lesser General Public License, applies to some
    +specially designated software packages--typically libraries--of the
    +Free Software Foundation and other authors who decide to use it.  You
    +can use it too, but we suggest you first think carefully about whether
    +this license or the ordinary General Public License is the better
    +strategy to use in any particular case, based on the explanations below.
    +
    +  When we speak of free software, we are referring to freedom of use,
    +not price.  Our General Public Licenses are designed to make sure that
    +you have the freedom to distribute copies of free software (and charge
    +for this service if you wish); that you receive source code or can get
    +it if you want it; that you can change the software and use pieces of
    +it in new free programs; and that you are informed that you can do
    +these things.
    +
    +  To protect your rights, we need to make restrictions that forbid
    +distributors to deny you these rights or to ask you to surrender these
    +rights.  These restrictions translate to certain responsibilities for
    +you if you distribute copies of the library or if you modify it.
    +
    +  For example, if you distribute copies of the library, whether gratis
    +or for a fee, you must give the recipients all the rights that we gave
    +you.  You must make sure that they, too, receive or can get the source
    +code.  If you link other code with the library, you must provide
    +complete object files to the recipients, so that they can relink them
    +with the library after making changes to the library and recompiling
    +it.  And you must show them these terms so they know their rights.
    +
    +  We protect your rights with a two-step method: (1) we copyright the
    +library, and (2) we offer you this license, which gives you legal
    +permission to copy, distribute and/or modify the library.
    +
    +  To protect each distributor, we want to make it very clear that
    +there is no warranty for the free library.  Also, if the library is
    +modified by someone else and passed on, the recipients should know
    +that what they have is not the original version, so that the original
    +author's reputation will not be affected by problems that might be
    +introduced by others.
    +
    +  Finally, software patents pose a constant threat to the existence of
    +any free program.  We wish to make sure that a company cannot
    +effectively restrict the users of a free program by obtaining a
    +restrictive license from a patent holder.  Therefore, we insist that
    +any patent license obtained for a version of the library must be
    +consistent with the full freedom of use specified in this license.
    +
    +  Most GNU software, including some libraries, is covered by the
    +ordinary GNU General Public License.  This license, the GNU Lesser
    +General Public License, applies to certain designated libraries, and
    +is quite different from the ordinary General Public License.  We use
    +this license for certain libraries in order to permit linking those
    +libraries into non-free programs.
    +
    +  When a program is linked with a library, whether statically or using
    +a shared library, the combination of the two is legally speaking a
    +combined work, a derivative of the original library.  The ordinary
    +General Public License therefore permits such linking only if the
    +entire combination fits its criteria of freedom.  The Lesser General
    +Public License permits more lax criteria for linking other code with
    +the library.
    +
    +  We call this license the "Lesser" General Public License because it
    +does Less to protect the user's freedom than the ordinary General
    +Public License.  It also provides other free software developers Less
    +of an advantage over competing non-free programs.  These disadvantages
    +are the reason we use the ordinary General Public License for many
    +libraries.  However, the Lesser license provides advantages in certain
    +special circumstances.
    +
    +  For example, on rare occasions, there may be a special need to
    +encourage the widest possible use of a certain library, so that it becomes
    +a de-facto standard.  To achieve this, non-free programs must be
    +allowed to use the library.  A more frequent case is that a free
    +library does the same job as widely used non-free libraries.  In this
    +case, there is little to gain by limiting the free library to free
    +software only, so we use the Lesser General Public License.
    +
    +  In other cases, permission to use a particular library in non-free
    +programs enables a greater number of people to use a large body of
    +free software.  For example, permission to use the GNU C Library in
    +non-free programs enables many more people to use the whole GNU
    +operating system, as well as its variant, the GNU/Linux operating
    +system.
    +
    +  Although the Lesser General Public License is Less protective of the
    +users' freedom, it does ensure that the user of a program that is
    +linked with the Library has the freedom and the wherewithal to run
    +that program using a modified version of the Library.
    +
    +  The precise terms and conditions for copying, distribution and
    +modification follow.  Pay close attention to the difference between a
    +"work based on the library" and a "work that uses the library".  The
    +former contains code derived from the library, whereas the latter must
    +be combined with the library in order to run.
    +
    +                  GNU LESSER GENERAL PUBLIC LICENSE
    +   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
    +
    +  0. This License Agreement applies to any software library or other
    +program which contains a notice placed by the copyright holder or
    +other authorized party saying it may be distributed under the terms of
    +this Lesser General Public License (also called "this License").
    +Each licensee is addressed as "you".
    +
    +  A "library" means a collection of software functions and/or data
    +prepared so as to be conveniently linked with application programs
    +(which use some of those functions and data) to form executables.
    +
    +  The "Library", below, refers to any such software library or work
    +which has been distributed under these terms.  A "work based on the
    +Library" means either the Library or any derivative work under
    +copyright law: that is to say, a work containing the Library or a
    +portion of it, either verbatim or with modifications and/or translated
    +straightforwardly into another language.  (Hereinafter, translation is
    +included without limitation in the term "modification".)
    +
    +  "Source code" for a work means the preferred form of the work for
    +making modifications to it.  For a library, complete source code means
    +all the source code for all modules it contains, plus any associated
    +interface definition files, plus the scripts used to control compilation
    +and installation of the library.
    +
    +  Activities other than copying, distribution and modification are not
    +covered by this License; they are outside its scope.  The act of
    +running a program using the Library is not restricted, and output from
    +such a program is covered only if its contents constitute a work based
    +on the Library (independent of the use of the Library in a tool for
    +writing it).  Whether that is true depends on what the Library does
    +and what the program that uses the Library does.
    +
    +  1. You may copy and distribute verbatim copies of the Library's
    +complete source code as you receive it, in any medium, provided that
    +you conspicuously and appropriately publish on each copy an
    +appropriate copyright notice and disclaimer of warranty; keep intact
    +all the notices that refer to this License and to the absence of any
    +warranty; and distribute a copy of this License along with the
    +Library.
    +
    +  You may charge a fee for the physical act of transferring a copy,
    +and you may at your option offer warranty protection in exchange for a
    +fee.
    +
    +  2. You may modify your copy or copies of the Library or any portion
    +of it, thus forming a work based on the Library, and copy and
    +distribute such modifications or work under the terms of Section 1
    +above, provided that you also meet all of these conditions:
    +
    +    a) The modified work must itself be a software library.
    +
    +    b) You must cause the files modified to carry prominent notices
    +    stating that you changed the files and the date of any change.
    +
    +    c) You must cause the whole of the work to be licensed at no
    +    charge to all third parties under the terms of this License.
    +
    +    d) If a facility in the modified Library refers to a function or a
    +    table of data to be supplied by an application program that uses
    +    the facility, other than as an argument passed when the facility
    +    is invoked, then you must make a good faith effort to ensure that,
    +    in the event an application does not supply such function or
    +    table, the facility still operates, and performs whatever part of
    +    its purpose remains meaningful.
    +
    +    (For example, a function in a library to compute square roots has
    +    a purpose that is entirely well-defined independent of the
    +    application.  Therefore, Subsection 2d requires that any
    +    application-supplied function or table used by this function must
    +    be optional: if the application does not supply it, the square
    +    root function must still compute square roots.)
    +
    +These requirements apply to the modified work as a whole.  If
    +identifiable sections of that work are not derived from the Library,
    +and can be reasonably considered independent and separate works in
    +themselves, then this License, and its terms, do not apply to those
    +sections when you distribute them as separate works.  But when you
    +distribute the same sections as part of a whole which is a work based
    +on the Library, the distribution of the whole must be on the terms of
    +this License, whose permissions for other licensees extend to the
    +entire whole, and thus to each and every part regardless of who wrote
    +it.
    +
    +Thus, it is not the intent of this section to claim rights or contest
    +your rights to work written entirely by you; rather, the intent is to
    +exercise the right to control the distribution of derivative or
    +collective works based on the Library.
    +
    +In addition, mere aggregation of another work not based on the Library
    +with the Library (or with a work based on the Library) on a volume of
    +a storage or distribution medium does not bring the other work under
    +the scope of this License.
    +
    +  3. You may opt to apply the terms of the ordinary GNU General Public
    +License instead of this License to a given copy of the Library.  To do
    +this, you must alter all the notices that refer to this License, so
    +that they refer to the ordinary GNU General Public License, version 2,
    +instead of to this License.  (If a newer version than version 2 of the
    +ordinary GNU General Public License has appeared, then you can specify
    +that version instead if you wish.)  Do not make any other change in
    +these notices.
    +
    +  Once this change is made in a given copy, it is irreversible for
    +that copy, so the ordinary GNU General Public License applies to all
    +subsequent copies and derivative works made from that copy.
    +
    +  This option is useful when you wish to copy part of the code of
    +the Library into a program that is not a library.
    +
    +  4. You may copy and distribute the Library (or a portion or
    +derivative of it, under Section 2) in object code or executable form
    +under the terms of Sections 1 and 2 above provided that you accompany
    +it with the complete corresponding machine-readable source code, which
    +must be distributed under the terms of Sections 1 and 2 above on a
    +medium customarily used for software interchange.
    +
    +  If distribution of object code is made by offering access to copy
    +from a designated place, then offering equivalent access to copy the
    +source code from the same place satisfies the requirement to
    +distribute the source code, even though third parties are not
    +compelled to copy the source along with the object code.
    +
    +  5. A program that contains no derivative of any portion of the
    +Library, but is designed to work with the Library by being compiled or
    +linked with it, is called a "work that uses the Library".  Such a
    +work, in isolation, is not a derivative work of the Library, and
    +therefore falls outside the scope of this License.
    +
    +  However, linking a "work that uses the Library" with the Library
    +creates an executable that is a derivative of the Library (because it
    +contains portions of the Library), rather than a "work that uses the
    +library".  The executable is therefore covered by this License.
    +Section 6 states terms for distribution of such executables.
    +
    +  When a "work that uses the Library" uses material from a header file
    +that is part of the Library, the object code for the work may be a
    +derivative work of the Library even though the source code is not.
    +Whether this is true is especially significant if the work can be
    +linked without the Library, or if the work is itself a library.  The
    +threshold for this to be true is not precisely defined by law.
    +
    +  If such an object file uses only numerical parameters, data
    +structure layouts and accessors, and small macros and small inline
    +functions (ten lines or less in length), then the use of the object
    +file is unrestricted, regardless of whether it is legally a derivative
    +work.  (Executables containing this object code plus portions of the
    +Library will still fall under Section 6.)
    +
    +  Otherwise, if the work is a derivative of the Library, you may
    +distribute the object code for the work under the terms of Section 6.
    +Any executables containing that work also fall under Section 6,
    +whether or not they are linked directly with the Library itself.
    +
    +  6. As an exception to the Sections above, you may also combine or
    +link a "work that uses the Library" with the Library to produce a
    +work containing portions of the Library, and distribute that work
    +under terms of your choice, provided that the terms permit
    +modification of the work for the customer's own use and reverse
    +engineering for debugging such modifications.
    +
    +  You must give prominent notice with each copy of the work that the
    +Library is used in it and that the Library and its use are covered by
    +this License.  You must supply a copy of this License.  If the work
    +during execution displays copyright notices, you must include the
    +copyright notice for the Library among them, as well as a reference
    +directing the user to the copy of this License.  Also, you must do one
    +of these things:
    +
    +    a) Accompany the work with the complete corresponding
    +    machine-readable source code for the Library including whatever
    +    changes were used in the work (which must be distributed under
    +    Sections 1 and 2 above); and, if the work is an executable linked
    +    with the Library, with the complete machine-readable "work that
    +    uses the Library", as object code and/or source code, so that the
    +    user can modify the Library and then relink to produce a modified
    +    executable containing the modified Library.  (It is understood
    +    that the user who changes the contents of definitions files in the
    +    Library will not necessarily be able to recompile the application
    +    to use the modified definitions.)
    +
    +    b) Use a suitable shared library mechanism for linking with the
    +    Library.  A suitable mechanism is one that (1) uses at run time a
    +    copy of the library already present on the user's computer system,
    +    rather than copying library functions into the executable, and (2)
    +    will operate properly with a modified version of the library, if
    +    the user installs one, as long as the modified version is
    +    interface-compatible with the version that the work was made with.
    +
    +    c) Accompany the work with a written offer, valid for at
    +    least three years, to give the same user the materials
    +    specified in Subsection 6a, above, for a charge no more
    +    than the cost of performing this distribution.
    +
    +    d) If distribution of the work is made by offering access to copy
    +    from a designated place, offer equivalent access to copy the above
    +    specified materials from the same place.
    +
    +    e) Verify that the user has already received a copy of these
    +    materials or that you have already sent this user a copy.
    +
    +  For an executable, the required form of the "work that uses the
    +Library" must include any data and utility programs needed for
    +reproducing the executable from it.  However, as a special exception,
    +the materials to be distributed need not include anything that is
    +normally distributed (in either source or binary form) with the major
    +components (compiler, kernel, and so on) of the operating system on
    +which the executable runs, unless that component itself accompanies
    +the executable.
    +
    +  It may happen that this requirement contradicts the license
    +restrictions of other proprietary libraries that do not normally
    +accompany the operating system.  Such a contradiction means you cannot
    +use both them and the Library together in an executable that you
    +distribute.
    +
    +  7. You may place library facilities that are a work based on the
    +Library side-by-side in a single library together with other library
    +facilities not covered by this License, and distribute such a combined
    +library, provided that the separate distribution of the work based on
    +the Library and of the other library facilities is otherwise
    +permitted, and provided that you do these two things:
    +
    +    a) Accompany the combined library with a copy of the same work
    +    based on the Library, uncombined with any other library
    +    facilities.  This must be distributed under the terms of the
    +    Sections above.
    +
    +    b) Give prominent notice with the combined library of the fact
    +    that part of it is a work based on the Library, and explaining
    +    where to find the accompanying uncombined form of the same work.
    +
    +  8. You may not copy, modify, sublicense, link with, or distribute
    +the Library except as expressly provided under this License.  Any
    +attempt otherwise to copy, modify, sublicense, link with, or
    +distribute the Library is void, and will automatically terminate your
    +rights under this License.  However, parties who have received copies,
    +or rights, from you under this License will not have their licenses
    +terminated so long as such parties remain in full compliance.
    +
    +  9. You are not required to accept this License, since you have not
    +signed it.  However, nothing else grants you permission to modify or
    +distribute the Library or its derivative works.  These actions are
    +prohibited by law if you do not accept this License.  Therefore, by
    +modifying or distributing the Library (or any work based on the
    +Library), you indicate your acceptance of this License to do so, and
    +all its terms and conditions for copying, distributing or modifying
    +the Library or works based on it.
    +
    +  10. Each time you redistribute the Library (or any work based on the
    +Library), the recipient automatically receives a license from the
    +original licensor to copy, distribute, link with or modify the Library
    +subject to these terms and conditions.  You may not impose any further
    +restrictions on the recipients' exercise of the rights granted herein.
    +You are not responsible for enforcing compliance by third parties with
    +this License.
    +
    +  11. If, as a consequence of a court judgment or allegation of patent
    +infringement or for any other reason (not limited to patent issues),
    +conditions are imposed on you (whether by court order, agreement or
    +otherwise) that contradict the conditions of this License, they do not
    +excuse you from the conditions of this License.  If you cannot
    +distribute so as to satisfy simultaneously your obligations under this
    +License and any other pertinent obligations, then as a consequence you
    +may not distribute the Library at all.  For example, if a patent
    +license would not permit royalty-free redistribution of the Library by
    +all those who receive copies directly or indirectly through you, then
    +the only way you could satisfy both it and this License would be to
    +refrain entirely from distribution of the Library.
    +
    +If any portion of this section is held invalid or unenforceable under any
    +particular circumstance, the balance of the section is intended to apply,
    +and the section as a whole is intended to apply in other circumstances.
    +
    +It is not the purpose of this section to induce you to infringe any
    +patents or other property right claims or to contest validity of any
    +such claims; this section has the sole purpose of protecting the
    +integrity of the free software distribution system which is
    +implemented by public license practices.  Many people have made
    +generous contributions to the wide range of software distributed
    +through that system in reliance on consistent application of that
    +system; it is up to the author/donor to decide if he or she is willing
    +to distribute software through any other system and a licensee cannot
    +impose that choice.
    +
    +This section is intended to make thoroughly clear what is believed to
    +be a consequence of the rest of this License.
    +
    +  12. If the distribution and/or use of the Library is restricted in
    +certain countries either by patents or by copyrighted interfaces, the
    +original copyright holder who places the Library under this License may add
    +an explicit geographical distribution limitation excluding those countries,
    +so that distribution is permitted only in or among countries not thus
    +excluded.  In such case, this License incorporates the limitation as if
    +written in the body of this License.
    +
    +  13. The Free Software Foundation may publish revised and/or new
    +versions of the Lesser General Public License from time to time.
    +Such new versions will be similar in spirit to the present version,
    +but may differ in detail to address new problems or concerns.
    +
    +Each version is given a distinguishing version number.  If the Library
    +specifies a version number of this License which applies to it and
    +"any later version", you have the option of following the terms and
    +conditions either of that version or of any later version published by
    +the Free Software Foundation.  If the Library does not specify a
    +license version number, you may choose any version ever published by
    +the Free Software Foundation.
    +
    +  14. If you wish to incorporate parts of the Library into other free
    +programs whose distribution conditions are incompatible with these,
    +write to the author to ask for permission.  For software which is
    +copyrighted by the Free Software Foundation, write to the Free
    +Software Foundation; we sometimes make exceptions for this.  Our
    +decision will be guided by the two goals of preserving the free status
    +of all derivatives of our free software and of promoting the sharing
    +and reuse of software generally.
    +
    +                            NO WARRANTY
    +
    +  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
    +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
    +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
    +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
    +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    +PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
    +LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
    +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
    +
    +  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
    +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
    +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
    +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
    +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
    +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
    +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
    +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
    +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
    +DAMAGES.
    +
    +                     END OF TERMS AND CONDITIONS
    +
    +
    +
    + +
    +WebM container parser and writer. +homepage + + +
    +
    Copyright (c) 2010, Google Inc. All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are
    +met:
    +
    +  * Redistributions of source code must retain the above copyright
    +    notice, this list of conditions and the following disclaimer.
    +
    +  * Redistributions in binary form must reproduce the above copyright
    +    notice, this list of conditions and the following disclaimer in
    +    the documentation and/or other materials provided with the
    +    distribution.
    +
    +  * Neither the name of Google nor the names of its contributors may
    +    be used to endorse or promote products derived from this software
    +    without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    +
    + +
    +WebP image encoder/decoder +homepage + + +
    +
    Copyright (c) 2010, Google Inc. All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are
    +met:
    +
    +  * Redistributions of source code must retain the above copyright
    +    notice, this list of conditions and the following disclaimer.
    +
    +  * Redistributions in binary form must reproduce the above copyright
    +    notice, this list of conditions and the following disclaimer in
    +    the documentation and/or other materials provided with the
    +    distribution.
    +
    +  * Neither the name of Google nor the names of its contributors may
    +    be used to endorse or promote products derived from this software
    +    without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +Additional IP Rights Grant (Patents)
    +------------------------------------
    +
    +"These implementations" means the copyrightable works that implement the WebM
    +codecs distributed by Google as part of the WebM Project.
    +
    +Google hereby grants to you a perpetual, worldwide, non-exclusive, no-charge,
    +royalty-free, irrevocable (except as stated in this section) patent license to
    +make, have made, use, offer to sell, sell, import, transfer, and otherwise
    +run, modify and propagate the contents of these implementations of WebM, where
    +such license applies only to those patent claims, both currently owned by
    +Google and acquired in the future, licensable by Google that are necessarily
    +infringed by these implementations of WebM. This grant does not include claims
    +that would be infringed only as a consequence of further modification of these
    +implementations. If you or your agent or exclusive licensee institute or order
    +or agree to the institution of patent litigation or any other patent
    +enforcement activity against any entity (including a cross-claim or
    +counterclaim in a lawsuit) alleging that any of these implementations of WebM
    +or any code incorporated within any of these implementations of WebM
    +constitute direct or contributory patent infringement, or inducement of
    +patent infringement, then any patent rights granted to you under this License
    +for these implementations of WebM shall terminate as of the date such
    +litigation is filed.
    +
    +
    +
    + +
    +WebRTC +homepage + + +
    +
    Copyright (c) 2011, The WebRTC project authors. All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are
    +met:
    +
    +  * Redistributions of source code must retain the above copyright
    +    notice, this list of conditions and the following disclaimer.
    +
    +  * Redistributions in binary form must reproduce the above copyright
    +    notice, this list of conditions and the following disclaimer in
    +    the documentation and/or other materials provided with the
    +    distribution.
    +
    +  * Neither the name of Google nor the names of its contributors may
    +    be used to endorse or promote products derived from this software
    +    without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +Windows Template Library (WTL) +homepage + + +
    +
    Microsoft Permissive License (Ms-PL)
    +Published: October 12, 2006
    +
    +
    +This license governs use of the accompanying software. If you use the software,
    +you accept this license. If you do not accept the license, do not use the
    +software.
    +
    +
    +1. Definitions
    +
    +The terms "reproduce," "reproduction," "derivative works," and "distribution"
    +have the same meaning here as under U.S. copyright law.
    +
    +A "contribution" is the original software, or any additions or changes to the
    +software.
    +
    +A "contributor" is any person that distributes its contribution under this
    +license.
    +
    +"Licensed patents" are a contributor’s patent claims that read directly on its
    +contribution.
    +
    +
    +2. Grant of Rights
    +
    +(A) Copyright Grant- Subject to the terms of this license, including the
    +license conditions and limitations in section 3, each contributor grants you a
    +non-exclusive, worldwide, royalty-free copyright license to reproduce its
    +contribution, prepare derivative works of its contribution, and distribute its
    +contribution or any derivative works that you create.
    +
    +(B) Patent Grant- Subject to the terms of this license, including the license
    +conditions and limitations in section 3, each contributor grants you a
    +non-exclusive, worldwide, royalty-free license under its licensed patents to
    +make, have made, use, sell, offer for sale, import, and/or otherwise dispose of
    +its contribution in the software or derivative works of the contribution in the
    +software.
    +
    +
    +3. Conditions and Limitations
    +
    +(A) No Trademark License- This license does not grant you rights to use any
    +contributors’ name, logo, or trademarks.
    +
    +(B) If you bring a patent claim against any contributor over patents that you
    +claim are infringed by the software, your patent license from such contributor
    +to the software ends automatically.
    +
    +(C) If you distribute any portion of the software, you must retain all
    +copyright, patent, trademark, and attribution notices that are present in the
    +software.
    +
    +(D) If you distribute any portion of the software in source code form, you may
    +do so only under this license by including a complete copy of this license with
    +your distribution. If you distribute any portion of the software in compiled or
    +object code form, you may only do so under a license that complies with this
    +license.
    +
    +(E) The software is licensed "as-is." You bear the risk of using it. The
    +contributors give no express warranties, guarantees or conditions. You may have
    +additional consumer rights under your local laws which this license cannot
    +change. To the extent permitted under your local laws, the contributors exclude
    +the implied warranties of merchantability, fitness for a particular purpose and
    +non-infringement.
    +
    +
    +
    + +
    +woff2 +homepage + + +
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    +
    +
    + +
    +xdg-mime +homepage + + +
    +
    Licensed under the Academic Free License version 2.0 (below)
    +Or under the following terms:
    +
    +This library is free software; you can redistribute it and/or
    +modify it under the terms of the GNU Lesser General Public
    +License as published by the Free Software Foundation; either
    +version 2 of the License, or (at your option) any later version.
    +
    +This library is distributed in the hope that it will be useful,
    +but WITHOUT ANY WARRANTY; without even the implied warranty of
    +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    +Lesser General Public License for more details.
    +
    +You should have received a copy of the GNU Lesser General Public
    +License along with this library; if not, write to the
    +Free Software Foundation, Inc., 59 Temple Place - Suite 330,
    +Boston, MA 02111-1307, USA.
    +
    +
    +--------------------------------------------------------------------------------
    +Academic Free License v. 2.0
    +--------------------------------------------------------------------------------
    +
    +This Academic Free License (the "License") applies to any original work of
    +authorship (the "Original Work") whose owner (the "Licensor") has placed the
    +following notice immediately following the copyright notice for the Original
    +Work:
    +
    +Licensed under the Academic Free License version 2.0
    +1) Grant of Copyright License. Licensor hereby grants You a world-wide,
    +royalty-free, non-exclusive, perpetual, sublicenseable license to do the
    +following:
    +
    +a) to reproduce the Original Work in copies;
    +b) to prepare derivative works ("Derivative Works") based upon the Original
    +   Work;
    +c) to distribute copies of the Original Work and Derivative Works to the
    +   public;
    +d) to perform the Original Work publicly; and
    +e) to display the Original Work publicly.
    +
    +2) Grant of Patent License. Licensor hereby grants You a world-wide,
    +royalty-free, non-exclusive, perpetual, sublicenseable license, under patent
    +claims owned or controlled by the Licensor that are embodied in the Original
    +Work as furnished by the Licensor, to make, use, sell and offer for sale the
    +Original Work and Derivative Works.
    +
    +3) Grant of Source Code License. The term "Source Code" means the preferred
    +form of the Original Work for making modifications to it and all available
    +documentation describing how to modify the Original Work. Licensor hereby
    +agrees to provide a machine-readable copy of the Source Code of the Original
    +Work along with each copy of the Original Work that Licensor distributes.
    +Licensor reserves the right to satisfy this obligation by placing a
    +machine-readable copy of the Source Code in an information repository
    +reasonably calculated to permit inexpensive and convenient access by You for as
    +long as Licensor continues to distribute the Original Work, and by publishing
    +the address of that information repository in a notice immediately following
    +the copyright notice that applies to the Original Work.
    +
    +4) Exclusions From License Grant. Neither the names of Licensor, nor the names
    +of any contributors to the Original Work, nor any of their trademarks or
    +service marks, may be used to endorse or promote products derived from this
    +Original Work without express prior written permission of the Licensor. Nothing
    +in this License shall be deemed to grant any rights to trademarks, copyrights,
    +patents, trade secrets or any other intellectual property of Licensor except as
    +expressly stated herein. No patent license is granted to make, use, sell or
    +offer to sell embodiments of any patent claims other than the licensed claims
    +defined in Section 2. No right is granted to the trademarks of Licensor even if
    +such marks are included in the Original Work. Nothing in this License shall be
    +interpreted to prohibit Licensor from licensing under different terms from this
    +License any Original Work that Licensor otherwise would have a right to
    +license.
    +
    +5) This section intentionally omitted.
    +
    +6) Attribution Rights. You must retain, in the Source Code of any Derivative
    +Works that You create, all copyright, patent or trademark notices from the
    +Source Code of the Original Work, as well as any notices of licensing and any
    +descriptive text identified therein as an "Attribution Notice." You must cause
    +the Source Code for any Derivative Works that You create to carry a prominent
    +Attribution Notice reasonably calculated to inform recipients that You have
    +modified the Original Work.
    +
    +7) Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that
    +the copyright in and to the Original Work and the patent rights granted herein
    +by Licensor are owned by the Licensor or are sublicensed to You under the terms
    +of this License with the permission of the contributor(s) of those copyrights
    +and patent rights. Except as expressly stated in the immediately proceeding
    +sentence, the Original Work is provided under this License on an "AS IS" BASIS
    +and WITHOUT WARRANTY, either express or implied, including, without limitation,
    +the warranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A PARTICULAR
    +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU.
    +This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No
    +license to Original Work is granted hereunder except under this disclaimer.
    +
    +8) Limitation of Liability. Under no circumstances and under no legal theory,
    +whether in tort (including negligence), contract, or otherwise, shall the
    +Licensor be liable to any person for any direct, indirect, special, incidental,
    +or consequential damages of any character arising as a result of this License
    +or the use of the Original Work including, without limitation, damages for loss
    +of goodwill, work stoppage, computer failure or malfunction, or any and all
    +other commercial damages or losses. This limitation of liability shall not
    +apply to liability for death or personal injury resulting from Licensor's
    +negligence to the extent applicable law prohibits such limitation. Some
    +jurisdictions do not allow the exclusion or limitation of incidental or
    +consequential damages, so this exclusion and limitation may not apply to You.
    +
    +9) Acceptance and Termination. If You distribute copies of the Original Work or
    +a Derivative Work, You must make a reasonable effort under the circumstances to
    +obtain the express assent of recipients to the terms of this License. Nothing
    +else but this License (or another written agreement between Licensor and You)
    +grants You permission to create Derivative Works based upon the Original Work
    +or to exercise any of the rights granted in Section 1 herein, and any attempt
    +to do so except under the terms of this License (or another written agreement
    +between Licensor and You) is expressly prohibited by U.S. copyright law, the
    +equivalent laws of other countries, and by international treaty. Therefore, by
    +exercising any of the rights granted to You in Section 1 herein, You indicate
    +Your acceptance of this License and all of its terms and conditions.
    +
    +10) Termination for Patent Action. This License shall terminate automatically
    +and You may no longer exercise any of the rights granted to You by this License
    +as of the date You commence an action, including a cross-claim or counterclaim,
    +for patent infringement (i) against Licensor with respect to a patent
    +applicable to software or (ii) against any entity with respect to a patent
    +applicable to the Original Work (but excluding combinations of the Original
    +Work with other software or hardware).
    +
    +11) Jurisdiction, Venue and Governing Law. Any action or suit relating to this
    +License may be brought only in the courts of a jurisdiction wherein the
    +Licensor resides or in which Licensor conducts its primary business, and under
    +the laws of that jurisdiction excluding its conflict-of-law provisions. The
    +application of the United Nations Convention on Contracts for the International
    +Sale of Goods is expressly excluded. Any use of the Original Work outside the
    +scope of this License or after its termination shall be subject to the
    +requirements and penalties of the U.S. Copyright Act, 17 U.S.C. 101 et seq.,
    +the equivalent laws of other countries, and international treaty. This section
    +shall survive the termination of this License.
    +
    +12) Attorneys Fees. In any action to enforce the terms of this License or
    +seeking damages relating thereto, the prevailing party shall be entitled to
    +recover its costs and expenses, including, without limitation, reasonable
    +attorneys' fees and costs incurred in connection with such action, including
    +any appeal of such action. This section shall survive the termination of this
    +License.
    +
    +13) Miscellaneous. This License represents the complete agreement concerning
    +the subject matter hereof. If any provision of this License is held to be
    +unenforceable, such provision shall be reformed only to the extent necessary to
    +make it enforceable.
    +
    +14) Definition of "You" in This License. "You" throughout this License, whether
    +in upper or lower case, means an individual or a legal entity exercising rights
    +under, and complying with all of the terms of, this License. For legal
    +entities, "You" includes any entity that controls, is controlled by, or is
    +under common control with you. For purposes of this definition, "control" means
    +(i) the power, direct or indirect, to cause the direction or management of such
    +entity, whether by contract or otherwise, or (ii) ownership of fifty percent
    +(50%) or more of the outstanding shares, or (iii) beneficial ownership of such
    +entity.
    +
    +15) Right to Use. You may use the Original Work in all ways not otherwise
    +restricted or conditioned by this License or by law, and Licensor promises not
    +to interfere with or be responsible for such uses by You.
    +
    +This license is Copyright (C) 2003 Lawrence E. Rosen. All rights reserved.
    +Permission is hereby granted to copy and distribute this license without
    +modification. This license may not be modified without the express written
    +permission of its copyright owner.
    +
    +
    +
    + +
    +xdg-user-dirs +homepage + + +
    +
      Copyright (c) 2007 Red Hat, inc
    +
    +  Permission is hereby granted, free of charge, to any person
    +  obtaining a copy of this software and associated documentation files
    +  (the "Software"), to deal in the Software without restriction,
    +  including without limitation the rights to use, copy, modify, merge,
    +  publish, distribute, sublicense, and/or sell copies of the Software,
    +  and to permit persons to whom the Software is furnished to do so,
    +  subject to the following conditions: 
    +
    +  The above copyright notice and this permission notice shall be
    +  included in all copies or substantial portions of the Software. 
    +
    +  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
    +  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
    +  ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
    +  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
    +  SOFTWARE.
    +
    +
    +
    + +
    +XZ Utils +homepage + + +
    +
    See http://src.chromium.org/viewvc/chrome/trunk/deps/third_party/xz/COPYING
    +
    +
    +
    + +
    +Yara +homepage + + +
    +
    Copyright (c) 2007-2016. The YARA Authors. All Rights Reserved.
    +
    +Redistribution and use in source and binary forms, with or without modification,
    +are permitted provided that the following conditions are met:
    +
    +1. Redistributions of source code must retain the above copyright notice, this
    +list of conditions and the following disclaimer.
    +
    +2. Redistributions in binary form must reproduce the above copyright notice,
    +this list of conditions and the following disclaimer in the documentation and/or
    +other materials provided with the distribution.
    +
    +3. Neither the name of the copyright holder nor the names of its contributors
    +may be used to endorse or promote products derived from this software without
    +specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
    +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
    +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    + +
    +yasm +homepage + + +
    +
    Yasm is Copyright (c) 2001-2014 Peter Johnson and other Yasm developers.
    +
    +Yasm developers and/or contributors include:
    +  Peter Johnson
    +  Michael Urman
    +  Brian Gladman (Visual Studio build files, other fixes)
    +  Stanislav Karchebny (options parser)
    +  Mathieu Monnier (SSE4 instruction patches, NASM preprocessor additions)
    +  Anonymous "NASM64" developer (NASM preprocessor fixes)
    +  Stephen Polkowski (x86 instruction patches)
    +  Henryk Richter (Mach-O object format)
    +  Ben Skeggs (patches, bug reports)
    +  Alexei Svitkine (GAS preprocessor)
    +  Samuel Thibault (TASM parser and frontend)
    +
    +-----------------------------------
    +Yasm licensing overview and summary
    +-----------------------------------
    +
    +Note: This document does not provide legal advice nor is it the actual
    +license of any part of Yasm.  See the individual licenses for complete
    +details.  Consult a lawyer for legal advice.
    +
    +The primary license of Yasm is the 2-clause BSD license.  Please use this
    +license if you plan on submitting code to the project.
    +
    +Yasm has absolutely no warranty; not even for merchantibility or fitness
    +for a particular purpose.
    +
    +-------
    +Libyasm
    +-------
    +Libyasm is 2-clause or 3-clause BSD licensed, with the exception of
    +bitvect, which is triple-licensed under the Artistic license, GPL, and
    +LGPL.  Libyasm is thus GPL and LGPL compatible.  In addition, this also
    +means that libyasm is free for binary-only distribution as long as the
    +terms of the 3-clause BSD license and Artistic license (as it applies to
    +bitvect) are fulfilled.
    +
    +-------
    +Modules
    +-------
    +The modules are 2-clause or 3-clause BSD licensed.
    +
    +---------
    +Frontends
    +---------
    +The frontends are 2-clause BSD licensed.
    +
    +-------------
    +License Texts
    +-------------
    +The full text of all licenses are provided in separate files in the source
    +distribution.  Each source file may include the entire license (in the case
    +of the BSD and Artistic licenses), or may reference the GPL or LGPL license
    +file.
    +
    +BSD.txt - 2-clause and 3-clause BSD licenses
    +Artistic.txt - Artistic license
    +GNU_GPL-2.0 - GNU General Public License
    +GNU_LGPL-2.0 - GNU Library General Public License
    +
    +
    +
    + +
    +zlib +homepage + + +
    +
    version 1.2.11, January 15th, 2017
    +
    +Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler
    +
    +This software is provided 'as-is', without any express or implied
    +warranty.  In no event will the authors be held liable for any damages
    +arising from the use of this software.
    +
    +Permission is granted to anyone to use this software for any purpose,
    +including commercial applications, and to alter it and redistribute it
    +freely, subject to the following restrictions:
    +
    +1. The origin of this software must not be misrepresented; you must not
    +   claim that you wrote the original software. If you use this software
    +   in a product, an acknowledgment in the product documentation would be
    +   appreciated but is not required.
    +2. Altered source versions must be plainly marked as such, and must not be
    +   misrepresented as being the original software.
    +3. This notice may not be removed or altered from any source distribution.
    +
    +
    +
    + +
    diff --git a/extensions/fablabchemnitz/inkstitch/electron/VkICD_mock_icd.dll b/extensions/fablabchemnitz/inkstitch/electron/VkICD_mock_icd.dll new file mode 100644 index 00000000..5b49b2c4 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/VkICD_mock_icd.dll differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/VkLayer_core_validation.dll b/extensions/fablabchemnitz/inkstitch/electron/VkLayer_core_validation.dll new file mode 100644 index 00000000..9593b1fa Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/VkLayer_core_validation.dll differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/VkLayer_object_tracker.dll b/extensions/fablabchemnitz/inkstitch/electron/VkLayer_object_tracker.dll new file mode 100644 index 00000000..9e2b9a5b Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/VkLayer_object_tracker.dll differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/VkLayer_parameter_validation.dll b/extensions/fablabchemnitz/inkstitch/electron/VkLayer_parameter_validation.dll new file mode 100644 index 00000000..b9c6db73 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/VkLayer_parameter_validation.dll differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/VkLayer_threading.dll b/extensions/fablabchemnitz/inkstitch/electron/VkLayer_threading.dll new file mode 100644 index 00000000..4ebe3291 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/VkLayer_threading.dll differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/VkLayer_unique_objects.dll b/extensions/fablabchemnitz/inkstitch/electron/VkLayer_unique_objects.dll new file mode 100644 index 00000000..5ebb423e Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/VkLayer_unique_objects.dll differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/chrome_100_percent.pak b/extensions/fablabchemnitz/inkstitch/electron/chrome_100_percent.pak new file mode 100644 index 00000000..6bdc63ea Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/chrome_100_percent.pak differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/chrome_200_percent.pak b/extensions/fablabchemnitz/inkstitch/electron/chrome_200_percent.pak new file mode 100644 index 00000000..210663a6 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/chrome_200_percent.pak differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/d3dcompiler_47.dll b/extensions/fablabchemnitz/inkstitch/electron/d3dcompiler_47.dll new file mode 100644 index 00000000..dbfe9cee Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/d3dcompiler_47.dll differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/ffmpeg.dll b/extensions/fablabchemnitz/inkstitch/electron/ffmpeg.dll new file mode 100644 index 00000000..625a0986 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/ffmpeg.dll differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/icudtl.dat b/extensions/fablabchemnitz/inkstitch/electron/icudtl.dat new file mode 100644 index 00000000..2b2bc0a3 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/icudtl.dat differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/inkstitch-gui.exe b/extensions/fablabchemnitz/inkstitch/electron/inkstitch-gui.exe new file mode 100644 index 00000000..1ed0cc30 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/inkstitch-gui.exe differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/libEGL.dll b/extensions/fablabchemnitz/inkstitch/electron/libEGL.dll new file mode 100644 index 00000000..38393ebf Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/libEGL.dll differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/libGLESv2.dll b/extensions/fablabchemnitz/inkstitch/electron/libGLESv2.dll new file mode 100644 index 00000000..3d6635f1 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/libGLESv2.dll differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/locales/am.pak b/extensions/fablabchemnitz/inkstitch/electron/locales/am.pak new file mode 100644 index 00000000..0e921452 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/locales/am.pak differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/locales/ar.pak b/extensions/fablabchemnitz/inkstitch/electron/locales/ar.pak new file mode 100644 index 00000000..a2d197ef Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/locales/ar.pak differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/locales/bg.pak b/extensions/fablabchemnitz/inkstitch/electron/locales/bg.pak new file mode 100644 index 00000000..d724ce1f Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/locales/bg.pak differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/locales/bn.pak b/extensions/fablabchemnitz/inkstitch/electron/locales/bn.pak new file mode 100644 index 00000000..059abdfe Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/locales/bn.pak differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/locales/ca.pak b/extensions/fablabchemnitz/inkstitch/electron/locales/ca.pak new file mode 100644 index 00000000..049f3984 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/locales/ca.pak differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/locales/cs.pak b/extensions/fablabchemnitz/inkstitch/electron/locales/cs.pak new file mode 100644 index 00000000..144e021e Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/locales/cs.pak differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/locales/da.pak b/extensions/fablabchemnitz/inkstitch/electron/locales/da.pak new file mode 100644 index 00000000..ef0583a4 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/locales/da.pak differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/locales/de.pak b/extensions/fablabchemnitz/inkstitch/electron/locales/de.pak new file mode 100644 index 00000000..23bf3d40 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/locales/de.pak differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/locales/el.pak b/extensions/fablabchemnitz/inkstitch/electron/locales/el.pak new file mode 100644 index 00000000..b1e708f2 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/locales/el.pak differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/locales/en-GB.pak b/extensions/fablabchemnitz/inkstitch/electron/locales/en-GB.pak new file mode 100644 index 00000000..5b0d625c Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/locales/en-GB.pak differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/locales/en-US.pak b/extensions/fablabchemnitz/inkstitch/electron/locales/en-US.pak new file mode 100644 index 00000000..a94a7d03 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/locales/en-US.pak differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/locales/es-419.pak b/extensions/fablabchemnitz/inkstitch/electron/locales/es-419.pak new file mode 100644 index 00000000..949e62a9 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/locales/es-419.pak differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/locales/es.pak b/extensions/fablabchemnitz/inkstitch/electron/locales/es.pak new file mode 100644 index 00000000..48d9818d Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/locales/es.pak differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/locales/et.pak b/extensions/fablabchemnitz/inkstitch/electron/locales/et.pak new file mode 100644 index 00000000..8c0bab37 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/locales/et.pak differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/locales/fa.pak b/extensions/fablabchemnitz/inkstitch/electron/locales/fa.pak new file mode 100644 index 00000000..9d5768fd Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/locales/fa.pak differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/locales/fi.pak b/extensions/fablabchemnitz/inkstitch/electron/locales/fi.pak new file mode 100644 index 00000000..c496fd2a Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/locales/fi.pak differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/locales/fil.pak b/extensions/fablabchemnitz/inkstitch/electron/locales/fil.pak new file mode 100644 index 00000000..bfd00819 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/locales/fil.pak differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/locales/fr.pak b/extensions/fablabchemnitz/inkstitch/electron/locales/fr.pak new file mode 100644 index 00000000..24507d60 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/locales/fr.pak differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/locales/gu.pak b/extensions/fablabchemnitz/inkstitch/electron/locales/gu.pak new file mode 100644 index 00000000..662e5850 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/locales/gu.pak differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/locales/he.pak b/extensions/fablabchemnitz/inkstitch/electron/locales/he.pak new file mode 100644 index 00000000..b2aedbd3 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/locales/he.pak differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/locales/hi.pak b/extensions/fablabchemnitz/inkstitch/electron/locales/hi.pak new file mode 100644 index 00000000..72c99719 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/locales/hi.pak differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/locales/hr.pak b/extensions/fablabchemnitz/inkstitch/electron/locales/hr.pak new file mode 100644 index 00000000..40a0dacd Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/locales/hr.pak differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/locales/hu.pak b/extensions/fablabchemnitz/inkstitch/electron/locales/hu.pak new file mode 100644 index 00000000..6852cadf Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/locales/hu.pak differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/locales/id.pak b/extensions/fablabchemnitz/inkstitch/electron/locales/id.pak new file mode 100644 index 00000000..cfd80f56 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/locales/id.pak differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/locales/it.pak b/extensions/fablabchemnitz/inkstitch/electron/locales/it.pak new file mode 100644 index 00000000..716f19a4 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/locales/it.pak differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/locales/ja.pak b/extensions/fablabchemnitz/inkstitch/electron/locales/ja.pak new file mode 100644 index 00000000..6833f674 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/locales/ja.pak differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/locales/kn.pak b/extensions/fablabchemnitz/inkstitch/electron/locales/kn.pak new file mode 100644 index 00000000..d7fb68c3 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/locales/kn.pak differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/locales/ko.pak b/extensions/fablabchemnitz/inkstitch/electron/locales/ko.pak new file mode 100644 index 00000000..d3d642a6 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/locales/ko.pak differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/locales/lt.pak b/extensions/fablabchemnitz/inkstitch/electron/locales/lt.pak new file mode 100644 index 00000000..ab8d9640 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/locales/lt.pak differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/locales/lv.pak b/extensions/fablabchemnitz/inkstitch/electron/locales/lv.pak new file mode 100644 index 00000000..69ce2835 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/locales/lv.pak differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/locales/ml.pak b/extensions/fablabchemnitz/inkstitch/electron/locales/ml.pak new file mode 100644 index 00000000..cc080cd7 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/locales/ml.pak differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/locales/mr.pak b/extensions/fablabchemnitz/inkstitch/electron/locales/mr.pak new file mode 100644 index 00000000..75a80de0 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/locales/mr.pak differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/locales/ms.pak b/extensions/fablabchemnitz/inkstitch/electron/locales/ms.pak new file mode 100644 index 00000000..d54a4d4e Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/locales/ms.pak differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/locales/nb.pak b/extensions/fablabchemnitz/inkstitch/electron/locales/nb.pak new file mode 100644 index 00000000..0cef51ec Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/locales/nb.pak differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/locales/nl.pak b/extensions/fablabchemnitz/inkstitch/electron/locales/nl.pak new file mode 100644 index 00000000..cc00bde4 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/locales/nl.pak differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/locales/pl.pak b/extensions/fablabchemnitz/inkstitch/electron/locales/pl.pak new file mode 100644 index 00000000..b75e5b45 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/locales/pl.pak differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/locales/pt-BR.pak b/extensions/fablabchemnitz/inkstitch/electron/locales/pt-BR.pak new file mode 100644 index 00000000..5194a15c Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/locales/pt-BR.pak differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/locales/pt-PT.pak b/extensions/fablabchemnitz/inkstitch/electron/locales/pt-PT.pak new file mode 100644 index 00000000..82c941f1 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/locales/pt-PT.pak differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/locales/ro.pak b/extensions/fablabchemnitz/inkstitch/electron/locales/ro.pak new file mode 100644 index 00000000..72deef2c Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/locales/ro.pak differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/locales/ru.pak b/extensions/fablabchemnitz/inkstitch/electron/locales/ru.pak new file mode 100644 index 00000000..e5a32e0c Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/locales/ru.pak differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/locales/sk.pak b/extensions/fablabchemnitz/inkstitch/electron/locales/sk.pak new file mode 100644 index 00000000..c395f093 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/locales/sk.pak differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/locales/sl.pak b/extensions/fablabchemnitz/inkstitch/electron/locales/sl.pak new file mode 100644 index 00000000..1ad83677 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/locales/sl.pak differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/locales/sr.pak b/extensions/fablabchemnitz/inkstitch/electron/locales/sr.pak new file mode 100644 index 00000000..21f93e46 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/locales/sr.pak differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/locales/sv.pak b/extensions/fablabchemnitz/inkstitch/electron/locales/sv.pak new file mode 100644 index 00000000..eb009ef6 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/locales/sv.pak differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/locales/sw.pak b/extensions/fablabchemnitz/inkstitch/electron/locales/sw.pak new file mode 100644 index 00000000..e243b88b Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/locales/sw.pak differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/locales/ta.pak b/extensions/fablabchemnitz/inkstitch/electron/locales/ta.pak new file mode 100644 index 00000000..bd2ab0ef Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/locales/ta.pak differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/locales/te.pak b/extensions/fablabchemnitz/inkstitch/electron/locales/te.pak new file mode 100644 index 00000000..58d3e46d Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/locales/te.pak differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/locales/th.pak b/extensions/fablabchemnitz/inkstitch/electron/locales/th.pak new file mode 100644 index 00000000..5f8d4f86 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/locales/th.pak differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/locales/tr.pak b/extensions/fablabchemnitz/inkstitch/electron/locales/tr.pak new file mode 100644 index 00000000..92222678 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/locales/tr.pak differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/locales/uk.pak b/extensions/fablabchemnitz/inkstitch/electron/locales/uk.pak new file mode 100644 index 00000000..b2cad457 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/locales/uk.pak differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/locales/vi.pak b/extensions/fablabchemnitz/inkstitch/electron/locales/vi.pak new file mode 100644 index 00000000..2f2cb88c Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/locales/vi.pak differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/locales/zh-CN.pak b/extensions/fablabchemnitz/inkstitch/electron/locales/zh-CN.pak new file mode 100644 index 00000000..3f8f5190 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/locales/zh-CN.pak differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/locales/zh-TW.pak b/extensions/fablabchemnitz/inkstitch/electron/locales/zh-TW.pak new file mode 100644 index 00000000..cd885a77 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/locales/zh-TW.pak differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/natives_blob.bin b/extensions/fablabchemnitz/inkstitch/electron/natives_blob.bin new file mode 100644 index 00000000..25466a77 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/natives_blob.bin differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/osmesa.dll b/extensions/fablabchemnitz/inkstitch/electron/osmesa.dll new file mode 100644 index 00000000..241d7cdd Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/osmesa.dll differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/resources.pak b/extensions/fablabchemnitz/inkstitch/electron/resources.pak new file mode 100644 index 00000000..83daff12 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/resources.pak differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/resources/app.asar b/extensions/fablabchemnitz/inkstitch/electron/resources/app.asar new file mode 100644 index 00000000..4d40879d Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/resources/app.asar differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/CODE_OF_CONDUCT.md b/extensions/fablabchemnitz/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/CODE_OF_CONDUCT.md new file mode 100644 index 00000000..f3a1be43 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/CODE_OF_CONDUCT.md @@ -0,0 +1,50 @@ +# Contributor Code of Conduct + +As contributors and maintainers of this project, and in the interest of +fostering an open and welcoming community, we pledge to respect all people who +contribute through reporting issues, posting feature requests, updating +documentation, submitting pull requests or patches, and other activities. + +We are committed to making participation in this project a harassment-free +experience for everyone, regardless of level of experience, gender, gender +identity and expression, sexual orientation, disability, personal appearance, +body size, race, ethnicity, age, religion, or nationality. + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery +* Personal attacks +* Trolling or insulting/derogatory comments +* Public or private harassment +* Publishing other's private information, such as physical or electronic + addresses, without explicit permission +* Other unethical or unprofessional conduct + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +By adopting this Code of Conduct, project maintainers commit themselves to +fairly and consistently applying these principles to every aspect of managing +this project. Project maintainers who do not follow or enforce the Code of +Conduct may be permanently removed from the project team. + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting a project maintainer at paul@paulbetts.org. All +complaints will be reviewed and investigated and will result in a response that +is deemed necessary and appropriate to the circumstances. Maintainers are +obligated to maintain confidentiality with regard to the reporter of an +incident. + + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], +version 1.3.0, available at +[http://contributor-covenant.org/version/1/3/0/][version] + +[homepage]: http://contributor-covenant.org +[version]: http://contributor-covenant.org/version/1/3/0/ diff --git a/extensions/fablabchemnitz/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/COPYING b/extensions/fablabchemnitz/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/COPYING new file mode 100644 index 00000000..dded1646 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/COPYING @@ -0,0 +1,7 @@ +Copyright (c) 2016 Paul Betts + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/extensions/fablabchemnitz/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/build.cmd b/extensions/fablabchemnitz/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/build.cmd new file mode 100644 index 00000000..e469702a --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/build.cmd @@ -0,0 +1 @@ +npm i && npm t diff --git a/extensions/fablabchemnitz/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/build.sh b/extensions/fablabchemnitz/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/build.sh new file mode 100644 index 00000000..7346845f --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/build.sh @@ -0,0 +1,2 @@ +#!/bin/bash +npm i && npm t diff --git a/extensions/fablabchemnitz/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/esdoc.json b/extensions/fablabchemnitz/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/esdoc.json new file mode 100644 index 00000000..a47b0761 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/esdoc.json @@ -0,0 +1,26 @@ +{ + "source": "./src", + "destination": "./docs", + "includes": ["\\.(js|es6)$"], + "excludes": ["\\.config\\.(js|es6)$"], + "access": ["public", "protected"], + "autoPrivate": true, + "unexportIdentifier": false, + "undocumentIdentifier": true, + "builtinExternal": true, + "index": "./README.md", + "package": "./package.json", + "coverage": true, + "includeSource": true, + "title": "electron-compilers", + "plugins": [ + {"name": "esdoc-es7-plugin"}, + {"name": "esdoc-plugin-async-to-sync"} + ], + "test": { + "type": "mocha", + "source": "./test", + "includes": ["\\.(js|es6)$"] + }, + "lint": true +} diff --git a/extensions/fablabchemnitz/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/lib/index.js b/extensions/fablabchemnitz/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/lib/index.js new file mode 100644 index 00000000..f639d174 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/lib/index.js @@ -0,0 +1,352 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.findActualExecutable = findActualExecutable; +exports.spawnDetached = spawnDetached; +exports.spawn = spawn; +exports.spawnDetachedPromise = spawnDetachedPromise; +exports.spawnPromise = spawnPromise; + +var _path = require('path'); + +var _path2 = _interopRequireDefault(_path); + +var _net = require('net'); + +var _net2 = _interopRequireDefault(_net); + +var _fs = require('fs'); + +var _fs2 = _interopRequireDefault(_fs); + +require('rxjs/add/observable/of'); + +require('rxjs/add/observable/merge'); + +require('rxjs/add/operator/pluck'); + +require('rxjs/add/operator/reduce'); + +var _Observable = require('rxjs/Observable'); + +var _Subscription = require('rxjs/Subscription'); + +var _AsyncSubject = require('rxjs/AsyncSubject'); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +const spawnOg = require('child_process').spawn; +const isWindows = process.platform === 'win32'; + +const d = require('debug')('spawn-rx'); + +/** + * stat a file but don't throw if it doesn't exist + * + * @param {string} file The path to a file + * @return {Stats} The stats structure + * + * @private + */ +function statSyncNoException(file) { + try { + return _fs2.default.statSync(file); + } catch (e) { + return null; + } +} + +/** + * Search PATH to see if a file exists in any of the path folders. + * + * @param {string} exe The file to search for + * @return {string} A fully qualified path, or the original path if nothing + * is found + * + * @private + */ +function runDownPath(exe) { + // NB: Windows won't search PATH looking for executables in spawn like + // Posix does + + // Files with any directory path don't get this applied + if (exe.match(/[\\\/]/)) { + d('Path has slash in directory, bailing'); + return exe; + } + + let target = _path2.default.join('.', exe); + if (statSyncNoException(target)) { + d(`Found executable in currect directory: ${ target }`); + return target; + } + + let haystack = process.env.PATH.split(isWindows ? ';' : ':'); + for (let p of haystack) { + let needle = _path2.default.join(p, exe); + if (statSyncNoException(needle)) return needle; + } + + d('Failed to find executable anywhere in path'); + return exe; +} + +/** + * Finds the actual executable and parameters to run on Windows. This method + * mimics the POSIX behavior of being able to run scripts as executables by + * replacing the passed-in executable with the script runner, for PowerShell, + * CMD, and node scripts. + * + * This method also does the work of running down PATH, which spawn on Windows + * also doesn't do, unlike on POSIX. + * + * @param {string} exe The executable to run + * @param {Array} args The arguments to run + * + * @return {Object} The cmd and args to run + * @property {string} cmd The command to pass to spawn + * @property {Array} args The arguments to pass to spawn + */ +function findActualExecutable(exe, args) { + // POSIX can just execute scripts directly, no need for silly goosery + if (process.platform !== 'win32') return { cmd: runDownPath(exe), args: args }; + + if (!_fs2.default.existsSync(exe)) { + // NB: When you write something like `surf-client ... -- surf-build` on Windows, + // a shell would normally convert that to surf-build.cmd, but since it's passed + // in as an argument, it doesn't happen + const possibleExts = ['.exe', '.bat', '.cmd', '.ps1']; + for (let ext of possibleExts) { + let possibleFullPath = runDownPath(`${ exe }${ ext }`); + + if (_fs2.default.existsSync(possibleFullPath)) { + return findActualExecutable(possibleFullPath, args); + } + } + } + + if (exe.match(/\.ps1$/i)) { + let cmd = _path2.default.join(process.env.SYSTEMROOT, 'System32', 'WindowsPowerShell', 'v1.0', 'PowerShell.exe'); + let psargs = ['-ExecutionPolicy', 'Unrestricted', '-NoLogo', '-NonInteractive', '-File', exe]; + + return { cmd: cmd, args: psargs.concat(args) }; + } + + if (exe.match(/\.(bat|cmd)$/i)) { + let cmd = _path2.default.join(process.env.SYSTEMROOT, 'System32', 'cmd.exe'); + let cmdArgs = ['/C', `${ exe } ${ args.join(' ') }`]; + + return { cmd: cmd, args: cmdArgs }; + } + + if (exe.match(/\.(js)$/i)) { + let cmd = process.execPath; + let nodeArgs = [exe]; + + return { cmd: cmd, args: nodeArgs.concat(args) }; + } + + // Dunno lol + return { cmd: exe, args: args }; +} + +/** + * Spawns a process but detached from the current process. The process is put + * into its own Process Group that can be killed by unsubscribing from the + * return Observable. + * + * @param {string} exe The executable to run + * @param {Array} params The parameters to pass to the child + * @param {Object} opts Options to pass to spawn. + * + * @return {Observable} Returns an Observable that when subscribed + * to, will create a detached process. The + * process output will be streamed to this + * Observable, and if unsubscribed from, the + * process will be terminated early. If the + * process terminates with a non-zero value, + * the Observable will terminate with onError. + */ +function spawnDetached(exe, params) { + let opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; + + var _findActualExecutable = findActualExecutable(exe, params); + + let cmd = _findActualExecutable.cmd, + args = _findActualExecutable.args; + + + if (!isWindows) return spawn(cmd, args, Object.assign({}, opts || {}, { detached: true })); + const newParams = [cmd].concat(args); + + let target = _path2.default.join(__dirname, '..', 'vendor', 'jobber', 'jobber.exe'); + let options = Object.assign({}, opts || {}, { detached: true, jobber: true }); + + d(`spawnDetached: ${ target }, ${ newParams }`); + return spawn(target, newParams, options); +} + +/** + * Spawns a process attached as a child of the current process. + * + * @param {string} exe The executable to run + * @param {Array} params The parameters to pass to the child + * @param {Object} opts Options to pass to spawn. + * + * @return {Observable} Returns an Observable that when subscribed + * to, will create a child process. The + * process output will be streamed to this + * Observable, and if unsubscribed from, the + * process will be terminated early. If the + * process terminates with a non-zero value, + * the Observable will terminate with onError. + */ +function spawn(exe) { + let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; + let opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; + + opts = opts || {}; + let spawnObs = _Observable.Observable.create(subj => { + let proc = null; + + var _findActualExecutable2 = findActualExecutable(exe, params); + + let cmd = _findActualExecutable2.cmd, + args = _findActualExecutable2.args; + + d(`spawning process: ${ cmd } ${ args.join() }, ${ JSON.stringify(opts) }`); + let origOpts = Object.assign({}, opts); + if ('jobber' in origOpts) delete origOpts.jobber; + if ('split' in origOpts) delete origOpts.split; + + proc = spawnOg(cmd, args, origOpts); + + let bufHandler = source => b => { + if (b.length < 1) return; + let chunk = "<< String sent back was too long >>"; + try { + chunk = b.toString(); + } catch (e) { + chunk = `<< Lost chunk of process output for ${ exe } - length was ${ b.length }>>`; + } + + subj.next({ source: source, text: chunk }); + }; + + let ret = new _Subscription.Subscription(); + + if (opts.stdin) { + if (proc.stdin) { + ret.add(opts.stdin.subscribe(x => proc.stdin.write(x), subj.error, () => proc.stdin.end())); + } else { + subj.error(new Error(`opts.stdio conflicts with provided spawn opts.stdin observable, 'pipe' is required`)); + } + } + + let stderrCompleted = null; + let stdoutCompleted = null; + let noClose = false; + + if (proc.stdout) { + stdoutCompleted = new _AsyncSubject.AsyncSubject(); + proc.stdout.on('data', bufHandler('stdout')); + proc.stdout.on('close', () => { + stdoutCompleted.next(true);stdoutCompleted.complete(); + }); + } else { + stdoutCompleted = _Observable.Observable.of(true); + } + + if (proc.stderr) { + stderrCompleted = new _AsyncSubject.AsyncSubject(); + proc.stderr.on('data', bufHandler('stderr')); + proc.stderr.on('close', () => { + stderrCompleted.next(true);stderrCompleted.complete(); + }); + } else { + stderrCompleted = _Observable.Observable.of(true); + } + + proc.on('error', e => { + noClose = true; + subj.error(e); + }); + + proc.on('close', code => { + noClose = true; + let pipesClosed = _Observable.Observable.merge(stdoutCompleted, stderrCompleted).reduce(acc => acc, true); + + if (code === 0) { + pipesClosed.subscribe(() => subj.complete()); + } else { + pipesClosed.subscribe(() => subj.error(new Error(`Failed with exit code: ${ code }`))); + } + }); + + ret.add(new _Subscription.Subscription(() => { + if (noClose) return; + + d(`Killing process: ${ cmd } ${ args.join() }`); + if (opts.jobber) { + // NB: Connecting to Jobber's named pipe will kill it + _net2.default.connect(`\\\\.\\pipe\\jobber-${ proc.pid }`); + setTimeout(() => proc.kill(), 5 * 1000); + } else { + proc.kill(); + } + })); + + return ret; + }); + + return opts.split ? spawnObs : spawnObs.pluck('text'); +} + +function wrapObservableInPromise(obs) { + return new Promise((res, rej) => { + let out = ''; + + obs.subscribe(x => out += x, e => rej(new Error(`${ out }\n${ e.message }`)), () => res(out)); + }); +} + +/** + * Spawns a process but detached from the current process. The process is put + * into its own Process Group. + * + * @param {string} exe The executable to run + * @param {Array} params The parameters to pass to the child + * @param {Object} opts Options to pass to spawn. + * + * @return {Promise} Returns an Promise that represents a detached + * process. The value returned is the process + * output. If the process terminates with a + * non-zero value, the Promise will resolve with + * an Error. + */ +function spawnDetachedPromise(exe, params) { + let opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; + + return wrapObservableInPromise(spawnDetached(exe, params, opts)); +} + +/** + * Spawns a process as a child process. + * + * @param {string} exe The executable to run + * @param {Array} params The parameters to pass to the child + * @param {Object} opts Options to pass to spawn. + * + * @return {Promise} Returns an Promise that represents a child + * process. The value returned is the process + * output. If the process terminates with a + * non-zero value, the Promise will resolve with + * an Error. + */ +function spawnPromise(exe, params) { + let opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; + + return wrapObservableInPromise(spawn(exe, params, opts)); +} \ No newline at end of file diff --git a/extensions/fablabchemnitz/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/lib/src/index.js b/extensions/fablabchemnitz/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/lib/src/index.js new file mode 100644 index 00000000..46a0b06f --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/lib/src/index.js @@ -0,0 +1,317 @@ +"use strict"; +var __rest = (this && this.__rest) || function (s, e) { + var t = {}; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) + t[p] = s[p]; + if (s != null && typeof Object.getOwnPropertySymbols === "function") + for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0) + t[p[i]] = s[p[i]]; + return t; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +var path = require("path"); +var net = require("net"); +var sfs = require("fs"); +var assign = require("lodash.assign"); +require("rxjs/add/observable/of"); +require("rxjs/add/observable/merge"); +require("rxjs/add/operator/pluck"); +require("rxjs/add/operator/reduce"); +var Observable_1 = require("rxjs/Observable"); +var Subscription_1 = require("rxjs/Subscription"); +var AsyncSubject_1 = require("rxjs/AsyncSubject"); +var spawnOg = require('child_process').spawn; //tslint:disable-line:no-var-requires +var isWindows = process.platform === 'win32'; +var d = require('debug')('spawn-rx'); //tslint:disable-line:no-var-requires +/** + * stat a file but don't throw if it doesn't exist + * + * @param {string} file The path to a file + * @return {Stats} The stats structure + * + * @private + */ +function statSyncNoException(file) { + try { + return sfs.statSync(file); + } + catch (e) { + return null; + } +} +/** + * Search PATH to see if a file exists in any of the path folders. + * + * @param {string} exe The file to search for + * @return {string} A fully qualified path, or the original path if nothing + * is found + * + * @private + */ +function runDownPath(exe) { + // NB: Windows won't search PATH looking for executables in spawn like + // Posix does + // Files with any directory path don't get this applied + if (exe.match(/[\\\/]/)) { + d('Path has slash in directory, bailing'); + return exe; + } + var target = path.join('.', exe); + if (statSyncNoException(target)) { + d("Found executable in currect directory: " + target); + return target; + } + var haystack = process.env.PATH.split(isWindows ? ';' : ':'); + for (var _i = 0, haystack_1 = haystack; _i < haystack_1.length; _i++) { + var p = haystack_1[_i]; + var needle = path.join(p, exe); + if (statSyncNoException(needle)) { + return needle; + } + ; + } + d('Failed to find executable anywhere in path'); + return exe; +} +/** + * Finds the actual executable and parameters to run on Windows. This method + * mimics the POSIX behavior of being able to run scripts as executables by + * replacing the passed-in executable with the script runner, for PowerShell, + * CMD, and node scripts. + * + * This method also does the work of running down PATH, which spawn on Windows + * also doesn't do, unlike on POSIX. + * + * @param {string} exe The executable to run + * @param {Array} args The arguments to run + * + * @return {Object} The cmd and args to run + * @property {string} cmd The command to pass to spawn + * @property {Array} args The arguments to pass to spawn + */ +function findActualExecutable(exe, args) { + // POSIX can just execute scripts directly, no need for silly goosery + if (process.platform !== 'win32') { + return { cmd: runDownPath(exe), args: args }; + } + if (!sfs.existsSync(exe)) { + // NB: When you write something like `surf-client ... -- surf-build` on Windows, + // a shell would normally convert that to surf-build.cmd, but since it's passed + // in as an argument, it doesn't happen + var possibleExts = ['.exe', '.bat', '.cmd', '.ps1']; + for (var _i = 0, possibleExts_1 = possibleExts; _i < possibleExts_1.length; _i++) { + var ext = possibleExts_1[_i]; + var possibleFullPath = runDownPath("" + exe + ext); + if (sfs.existsSync(possibleFullPath)) { + return findActualExecutable(possibleFullPath, args); + } + } + } + if (exe.match(/\.ps1$/i)) { + var cmd = path.join(process.env.SYSTEMROOT, 'System32', 'WindowsPowerShell', 'v1.0', 'PowerShell.exe'); + var psargs = ['-ExecutionPolicy', 'Unrestricted', '-NoLogo', '-NonInteractive', '-File', exe]; + return { cmd: cmd, args: psargs.concat(args) }; + } + if (exe.match(/\.(bat|cmd)$/i)) { + var cmd = path.join(process.env.SYSTEMROOT, 'System32', 'cmd.exe'); + var cmdArgs = ['/C', exe].concat(args); + return { cmd: cmd, args: cmdArgs }; + } + if (exe.match(/\.(js)$/i)) { + var cmd = process.execPath; + var nodeArgs = [exe]; + return { cmd: cmd, args: nodeArgs.concat(args) }; + } + // Dunno lol + return { cmd: exe, args: args }; +} +exports.findActualExecutable = findActualExecutable; +/** + * Spawns a process but detached from the current process. The process is put + * into its own Process Group that can be killed by unsubscribing from the + * return Observable. + * + * @param {string} exe The executable to run + * @param {Array} params The parameters to pass to the child + * @param {Object} opts Options to pass to spawn. + * + * @return {Observable} Returns an Observable that when subscribed + * to, will create a detached process. The + * process output will be streamed to this + * Observable, and if unsubscribed from, the + * process will be terminated early. If the + * process terminates with a non-zero value, + * the Observable will terminate with onError. + */ +function spawnDetached(exe, params, opts) { + if (opts === void 0) { opts = null; } + var _a = findActualExecutable(exe, params), cmd = _a.cmd, args = _a.args; + if (!isWindows) { + return spawn(cmd, args, assign({}, opts || {}, { detached: true })); + } + ; + var newParams = [cmd].concat(args); + var target = path.join(__dirname, '..', '..', 'vendor', 'jobber', 'Jobber.exe'); + var options = assign({}, opts || {}, { detached: true, jobber: true }); + d("spawnDetached: " + target + ", " + newParams); + return spawn(target, newParams, options); +} +exports.spawnDetached = spawnDetached; +/** + * Spawns a process attached as a child of the current process. + * + * @param {string} exe The executable to run + * @param {Array} params The parameters to pass to the child + * @param {Object} opts Options to pass to spawn. + * + * @return {Observable} Returns an Observable that when subscribed + * to, will create a child process. The + * process output will be streamed to this + * Observable, and if unsubscribed from, the + * process will be terminated early. If the + * process terminates with a non-zero value, + * the Observable will terminate with onError. + */ +function spawn(exe, params, opts) { + if (params === void 0) { params = []; } + if (opts === void 0) { opts = null; } + opts = opts || {}; + var spawnObs = Observable_1.Observable.create(function (subj) { + var stdin = opts.stdin, optsWithoutStdIn = __rest(opts, ["stdin"]); + var _a = findActualExecutable(exe, params), cmd = _a.cmd, args = _a.args; + d("spawning process: " + cmd + " " + args.join() + ", " + JSON.stringify(optsWithoutStdIn)); + var origOpts = assign({}, optsWithoutStdIn); + if ('jobber' in origOpts) { + delete origOpts.jobber; + } + if ('split' in origOpts) { + delete origOpts.split; + } + ; + var proc = spawnOg(cmd, args, origOpts); + var bufHandler = function (source) { return function (b) { + if (b.length < 1) { + return; + } + ; + var chunk = '<< String sent back was too long >>'; + try { + if (typeof b === 'string') { + chunk = b.toString(); + } + else { + chunk = b.toString(origOpts.encoding || 'utf8'); + } + } + catch (e) { + chunk = "<< Lost chunk of process output for " + exe + " - length was " + b.length + ">>"; + } + subj.next({ source: source, text: chunk }); + }; }; + var ret = new Subscription_1.Subscription(); + if (opts.stdin) { + if (proc.stdin) { + ret.add(opts.stdin.subscribe(function (x) { return proc.stdin.write(x); }, subj.error.bind(subj), function () { return proc.stdin.end(); })); + } + else { + subj.error(new Error("opts.stdio conflicts with provided spawn opts.stdin observable, 'pipe' is required")); + } + } + var stderrCompleted = null; + var stdoutCompleted = null; + var noClose = false; + if (proc.stdout) { + stdoutCompleted = new AsyncSubject_1.AsyncSubject(); + proc.stdout.on('data', bufHandler('stdout')); + proc.stdout.on('close', function () { stdoutCompleted.next(true); stdoutCompleted.complete(); }); + } + else { + stdoutCompleted = Observable_1.Observable.of(true); + } + if (proc.stderr) { + stderrCompleted = new AsyncSubject_1.AsyncSubject(); + proc.stderr.on('data', bufHandler('stderr')); + proc.stderr.on('close', function () { stderrCompleted.next(true); stderrCompleted.complete(); }); + } + else { + stderrCompleted = Observable_1.Observable.of(true); + } + proc.on('error', function (e) { + noClose = true; + subj.error(e); + }); + proc.on('close', function (code) { + noClose = true; + var pipesClosed = Observable_1.Observable.merge(stdoutCompleted, stderrCompleted) + .reduce(function (acc) { return acc; }, true); + if (code === 0) { + pipesClosed.subscribe(function () { return subj.complete(); }); + } + else { + pipesClosed.subscribe(function () { return subj.error(new Error("Failed with exit code: " + code)); }); + } + }); + ret.add(new Subscription_1.Subscription(function () { + if (noClose) { + return; + } + ; + d("Killing process: " + cmd + " " + args.join()); + if (opts.jobber) { + // NB: Connecting to Jobber's named pipe will kill it + net.connect("\\\\.\\pipe\\jobber-" + proc.pid); + setTimeout(function () { return proc.kill(); }, 5 * 1000); + } + else { + proc.kill(); + } + })); + return ret; + }); + return opts.split ? spawnObs : spawnObs.pluck('text'); +} +exports.spawn = spawn; +function wrapObservableInPromise(obs) { + return new Promise(function (res, rej) { + var out = ''; + obs.subscribe(function (x) { return out += x; }, function (e) { return rej(new Error(out + "\n" + e.message)); }, function () { return res(out); }); + }); +} +/** + * Spawns a process but detached from the current process. The process is put + * into its own Process Group. + * + * @param {string} exe The executable to run + * @param {Array} params The parameters to pass to the child + * @param {Object} opts Options to pass to spawn. + * + * @return {Promise} Returns an Promise that represents a detached + * process. The value returned is the process + * output. If the process terminates with a + * non-zero value, the Promise will resolve with + * an Error. + */ +function spawnDetachedPromise(exe, params, opts) { + if (opts === void 0) { opts = null; } + return wrapObservableInPromise(spawnDetached(exe, params, opts)); +} +exports.spawnDetachedPromise = spawnDetachedPromise; +/** + * Spawns a process as a child process. + * + * @param {string} exe The executable to run + * @param {Array} params The parameters to pass to the child + * @param {Object} opts Options to pass to spawn. + * + * @return {Promise} Returns an Promise that represents a child + * process. The value returned is the process + * output. If the process terminates with a + * non-zero value, the Promise will resolve with + * an Error. + */ +function spawnPromise(exe, params, opts) { + if (opts === void 0) { opts = null; } + return wrapObservableInPromise(spawn(exe, params, opts)); +} +exports.spawnPromise = spawnPromise; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/extensions/fablabchemnitz/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/lib/src/index.js.map b/extensions/fablabchemnitz/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/lib/src/index.js.map new file mode 100644 index 00000000..4e82fe2d --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/lib/src/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,2BAA6B;AAC7B,yBAA2B;AAC3B,wBAA0B;AAC1B,sCAAwC;AAExC,kCAAgC;AAChC,qCAAmC;AACnC,mCAAiC;AACjC,oCAAkC;AAClC,8CAA6C;AAE7C,kDAAiD;AACjD,kDAAiD;AAIjD,IAAM,OAAO,GAA8B,OAAO,CAAC,eAAe,CAAC,CAAC,KAAK,CAAC,CAAC,qCAAqC;AAChH,IAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC;AAE/C,IAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,qCAAqC;AAE7E;;;;;;;GAOG;AACH,6BAA6B,IAAY;IACvC,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACX,MAAM,CAAC,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,qBAAqB,GAAW;IAC9B,sEAAsE;IACtE,aAAa;IAEb,uDAAuD;IACvD,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC,CAAC,sCAAsC,CAAC,CAAC;QAC1C,MAAM,CAAC,GAAG,CAAC;IACb,CAAC;IAED,IAAI,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACjC,EAAE,CAAC,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAChC,CAAC,CAAC,4CAA0C,MAAQ,CAAC,CAAC;QACtD,MAAM,CAAC,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,IAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC9D,GAAG,CAAC,CAAU,UAAQ,EAAR,qBAAQ,EAAR,sBAAQ,EAAR,IAAQ;QAAjB,IAAI,CAAC,iBAAA;QACR,IAAI,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC/B,EAAE,CAAC,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAChC,MAAM,CAAC,MAAM,CAAC;QAChB,CAAC;QAAA,CAAC;KACH;IAED,CAAC,CAAC,4CAA4C,CAAC,CAAC;IAChD,MAAM,CAAC,GAAG,CAAC;AACb,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,8BAAqC,GAAW,EAAE,IAAmB;IAInE,qEAAqE;IACrE,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC;QACjC,MAAM,CAAC,EAAE,GAAG,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC/C,CAAC;IAED,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACzB,gFAAgF;QAChF,+EAA+E;QAC/E,uCAAuC;QACvC,IAAM,YAAY,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QACtD,GAAG,CAAC,CAAY,UAAY,EAAZ,6BAAY,EAAZ,0BAAY,EAAZ,IAAY;YAAvB,IAAI,GAAG,qBAAA;YACV,IAAI,gBAAgB,GAAG,WAAW,CAAC,KAAG,GAAG,GAAG,GAAK,CAAC,CAAC;YAEnD,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;gBACrC,MAAM,CAAC,oBAAoB,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;YACtD,CAAC;SACF;IACH,CAAC;IAED,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QACzB,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAW,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,EAAE,gBAAgB,CAAC,CAAC;QACxG,IAAI,MAAM,GAAG,CAAC,kBAAkB,EAAE,cAAc,EAAE,SAAS,EAAE,iBAAiB,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;QAE9F,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;IACjD,CAAC;IAED,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAW,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;QACpE,IAAI,OAAO,IAAI,IAAI,EAAE,GAAG,SAAK,IAAI,CAAC,CAAC;QAEnC,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IACrC,CAAC;IAED,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAC1B,IAAI,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC;QAC3B,IAAI,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC;QAErB,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;IACnD,CAAC;IAED,YAAY;IACZ,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAClC,CAAC;AA9CD,oDA8CC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,uBAA8B,GAAW,EAAE,MAAqB,EAAE,IAAgB;IAAhB,qBAAA,EAAA,WAAgB;IAC1E,IAAA,sCAAiD,EAA/C,YAAG,EAAE,cAAI,CAAuC;IAExD,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,IAAI,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACtE,CAAC;IAAA,CAAC;IAEF,IAAM,SAAS,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAErC,IAAI,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;IAChF,IAAI,OAAO,GAAG,MAAM,CAAC,EAAE,EAAE,IAAI,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAEvE,CAAC,CAAC,oBAAkB,MAAM,UAAK,SAAW,CAAC,CAAC;IAC5C,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;AAC3C,CAAC;AAdD,sCAcC;AAED;;;;;;;;;;;;;;GAcG;AAEH,eAAkC,GAAW,EAAE,MAA0B,EAAE,IAAgB;IAA5C,uBAAA,EAAA,WAA0B;IAAE,qBAAA,EAAA,WAAgB;IACzF,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;IAClB,IAAI,QAAQ,GAAG,uBAAU,CAAC,MAAM,CAAC,UAAC,IAG9B;QACI,IAAA,kBAAK,EAAE,0CAAmB,CAAU;QACtC,IAAA,sCAAiD,EAA/C,YAAG,EAAE,cAAI,CAAuC;QACtD,CAAC,CAAC,uBAAqB,GAAG,SAAI,IAAI,CAAC,IAAI,EAAE,UAAK,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAG,CAAC,CAAC;QAClF,IAAI,QAAQ,GAAG,MAAM,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC;QAC5C,EAAE,CAAC,CAAC,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC;YACzB,OAAO,QAAQ,CAAC,MAAM,CAAC;QACzB,CAAC;QACD,EAAE,CAAC,CAAC,OAAO,IAAI,QAAQ,CAAC,CAAC,CAAC;YACxB,OAAO,QAAQ,CAAC,KAAK,CAAC;QACxB,CAAC;QAAA,CAAC;QAEF,IAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;QAE1C,IAAI,UAAU,GAAG,UAAC,MAAc,IAAK,OAAA,UAAC,CAAkB;YACtD,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;gBACjB,MAAM,CAAC;YACT,CAAC;YAAA,CAAC;YACF,IAAI,KAAK,GAAG,qCAAqC,CAAC;YAClD,IAAI,CAAC;gBACH,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC;oBAC1B,KAAK,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;gBACvB,CAAC;gBAAC,IAAI,CAAC,CAAC;oBACN,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,IAAI,MAAM,CAAC,CAAC;gBAClD,CAAC;YACH,CAAC;YAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACX,KAAK,GAAG,yCAAuC,GAAG,sBAAiB,CAAC,CAAC,MAAM,OAAI,CAAC;YAClF,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC7C,CAAC,EAhBoC,CAgBpC,CAAC;QAEF,IAAI,GAAG,GAAG,IAAI,2BAAY,EAAE,CAAC;QAE7B,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YACf,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;gBACf,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAC1B,UAAC,CAAM,IAAK,OAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAnB,CAAmB,EAC/B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EACrB,cAAM,OAAA,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,EAAhB,CAAgB,CACvB,CAAC,CAAC;YACL,CAAC;YAAC,IAAI,CAAC,CAAC;gBACN,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,oFAAoF,CAAC,CAAC,CAAC;YAC9G,CAAC;QACH,CAAC;QAED,IAAI,eAAe,GAAkD,IAAI,CAAC;QAC1E,IAAI,eAAe,GAAkD,IAAI,CAAC;QAC1E,IAAI,OAAO,GAAG,KAAK,CAAC;QAEpB,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;YAChB,eAAe,GAAG,IAAI,2BAAY,EAAW,CAAC;YAC9C,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC7C,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,cAAS,eAAqC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAE,eAAqC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3I,CAAC;QAAC,IAAI,CAAC,CAAC;YACN,eAAe,GAAG,uBAAU,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QACxC,CAAC;QAED,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;YAChB,eAAe,GAAG,IAAI,2BAAY,EAAW,CAAC;YAC9C,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC7C,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,cAAS,eAAqC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAE,eAAqC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3I,CAAC;QAAC,IAAI,CAAC,CAAC;YACN,eAAe,GAAG,uBAAU,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QACxC,CAAC;QAED,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,UAAC,CAAQ;YACxB,OAAO,GAAG,IAAI,CAAC;YACf,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,UAAC,IAAY;YAC5B,OAAO,GAAG,IAAI,CAAC;YACf,IAAI,WAAW,GAAG,uBAAU,CAAC,KAAK,CAAC,eAAgB,EAAE,eAAgB,CAAC;iBACnE,MAAM,CAAC,UAAC,GAAG,IAAK,OAAA,GAAG,EAAH,CAAG,EAAE,IAAI,CAAC,CAAC;YAE9B,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;gBACf,WAAW,CAAC,SAAS,CAAC,cAAM,OAAA,IAAI,CAAC,QAAQ,EAAE,EAAf,CAAe,CAAC,CAAC;YAC/C,CAAC;YAAC,IAAI,CAAC,CAAC;gBACN,WAAW,CAAC,SAAS,CAAC,cAAM,OAAA,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,4BAA0B,IAAM,CAAC,CAAC,EAAvD,CAAuD,CAAC,CAAC;YACvF,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,GAAG,CAAC,IAAI,2BAAY,CAAC;YACvB,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;gBACZ,MAAM,CAAC;YACT,CAAC;YAAA,CAAC;YAEF,CAAC,CAAC,sBAAoB,GAAG,SAAI,IAAI,CAAC,IAAI,EAAI,CAAC,CAAC;YAC5C,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;gBAChB,qDAAqD;gBACrD,GAAG,CAAC,OAAO,CAAC,yBAAuB,IAAI,CAAC,GAAK,CAAC,CAAC;gBAC/C,UAAU,CAAC,cAAM,OAAA,IAAI,CAAC,IAAI,EAAE,EAAX,CAAW,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;YAC1C,CAAC;YAAC,IAAI,CAAC,CAAC;gBACN,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,CAAC;QACH,CAAC,CAAC,CAAC,CAAC;QAEJ,MAAM,CAAC,GAAG,CAAC;IACb,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AACxD,CAAC;AA3GD,sBA2GC;AAED,iCAAoC,GAAkB;IACpD,MAAM,CAAC,IAAI,OAAO,CAAS,UAAC,GAAG,EAAE,GAAG;QAClC,IAAI,GAAG,GAAG,EAAE,CAAC;QAEb,GAAG,CAAC,SAAS,CACX,UAAC,CAAC,IAAK,OAAA,GAAG,IAAI,CAAC,EAAR,CAAQ,EACf,UAAC,CAAC,IAAK,OAAA,GAAG,CAAC,IAAI,KAAK,CAAI,GAAG,UAAK,CAAC,CAAC,OAAS,CAAC,CAAC,EAAtC,CAAsC,EAC7C,cAAM,OAAA,GAAG,CAAC,GAAG,CAAC,EAAR,CAAQ,CAAC,CAAC;IACpB,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,8BAAqC,GAAW,EAAE,MAAqB,EAAE,IAAgB;IAAhB,qBAAA,EAAA,WAAgB;IACvF,MAAM,CAAC,uBAAuB,CAAS,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;AAC3E,CAAC;AAFD,oDAEC;AAED;;;;;;;;;;;;GAYG;AACH,sBAA6B,GAAW,EAAE,MAAqB,EAAE,IAAgB;IAAhB,qBAAA,EAAA,WAAgB;IAC/E,MAAM,CAAC,uBAAuB,CAAS,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;AACnE,CAAC;AAFD,oCAEC"} \ No newline at end of file diff --git a/extensions/fablabchemnitz/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/package.json b/extensions/fablabchemnitz/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/package.json new file mode 100644 index 00000000..8b98f12d --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/package.json @@ -0,0 +1,38 @@ +{ + "name": "spawn-rx", + "version": "2.0.12", + "description": "An Rx-version of child_process.spawn", + "repository": { + "type": "git", + "url": "https://github.com/paulcbetts/spawn-rx" + }, + "author": "Paul Betts ", + "license": "MIT", + "main": "lib/src/index.js", + "typings": "lib/src/index.d.ts", + "homepage": "https://github.com/paulcbetts/spawn-rx", + "dependencies": { + "debug": "^2.5.1", + "lodash.assign": "^4.2.0", + "rxjs": "^5.1.1" + }, + "devDependencies": { + "@types/chai": "^4.0.4", + "@types/chai-as-promised": "^7.1.0", + "@types/mocha": "^2.2.39", + "@types/node": "^8.0.32", + "babel-register": "^6.23.0", + "chai": "^4.1.2", + "chai-as-promised": "^7.1.1", + "esdoc": "^0.5.2", + "esdoc-es7-plugin": "0.0.3", + "esdoc-plugin-async-to-sync": "^0.5.0", + "marked": "^0.3.6", + "mocha": "^4.0.0", + "npm-run-all": "^4.0.2", + "ts-node": "^3.3.0", + "tslint": "^5.7.0", + "typescript": "^2.5.3", + "uuid": "3.0.1" + } +} \ No newline at end of file diff --git a/extensions/fablabchemnitz/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/src/index.ts b/extensions/fablabchemnitz/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/src/index.ts new file mode 100644 index 00000000..f7b04288 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/src/index.ts @@ -0,0 +1,341 @@ +import * as path from 'path'; +import * as net from 'net'; +import * as sfs from 'fs'; +import * as assign from 'lodash.assign'; + +import 'rxjs/add/observable/of'; +import 'rxjs/add/observable/merge'; +import 'rxjs/add/operator/pluck'; +import 'rxjs/add/operator/reduce'; +import { Observable } from 'rxjs/Observable'; +import { Observer } from 'rxjs/Observer'; +import { Subscription } from 'rxjs/Subscription'; +import { AsyncSubject } from 'rxjs/AsyncSubject'; +import { Subject } from 'rxjs/Subject'; +import * as childProcess from 'child_process'; + +const spawnOg: typeof childProcess.spawn = require('child_process').spawn; //tslint:disable-line:no-var-requires +const isWindows = process.platform === 'win32'; + +const d = require('debug')('spawn-rx'); //tslint:disable-line:no-var-requires + +/** + * stat a file but don't throw if it doesn't exist + * + * @param {string} file The path to a file + * @return {Stats} The stats structure + * + * @private + */ +function statSyncNoException(file: string): sfs.Stats | null { + try { + return sfs.statSync(file); + } catch (e) { + return null; + } +} + +/** + * Search PATH to see if a file exists in any of the path folders. + * + * @param {string} exe The file to search for + * @return {string} A fully qualified path, or the original path if nothing + * is found + * + * @private + */ +function runDownPath(exe: string): string { + // NB: Windows won't search PATH looking for executables in spawn like + // Posix does + + // Files with any directory path don't get this applied + if (exe.match(/[\\\/]/)) { + d('Path has slash in directory, bailing'); + return exe; + } + + let target = path.join('.', exe); + if (statSyncNoException(target)) { + d(`Found executable in currect directory: ${target}`); + return target; + } + + let haystack = process.env.PATH!.split(isWindows ? ';' : ':'); + for (let p of haystack) { + let needle = path.join(p, exe); + if (statSyncNoException(needle)) { + return needle; + }; + } + + d('Failed to find executable anywhere in path'); + return exe; +} + +/** + * Finds the actual executable and parameters to run on Windows. This method + * mimics the POSIX behavior of being able to run scripts as executables by + * replacing the passed-in executable with the script runner, for PowerShell, + * CMD, and node scripts. + * + * This method also does the work of running down PATH, which spawn on Windows + * also doesn't do, unlike on POSIX. + * + * @param {string} exe The executable to run + * @param {Array} args The arguments to run + * + * @return {Object} The cmd and args to run + * @property {string} cmd The command to pass to spawn + * @property {Array} args The arguments to pass to spawn + */ +export function findActualExecutable(exe: string, args: Array): { + cmd: string; + args: Array +} { + // POSIX can just execute scripts directly, no need for silly goosery + if (process.platform !== 'win32') { + return { cmd: runDownPath(exe), args: args }; + } + + if (!sfs.existsSync(exe)) { + // NB: When you write something like `surf-client ... -- surf-build` on Windows, + // a shell would normally convert that to surf-build.cmd, but since it's passed + // in as an argument, it doesn't happen + const possibleExts = ['.exe', '.bat', '.cmd', '.ps1']; + for (let ext of possibleExts) { + let possibleFullPath = runDownPath(`${exe}${ext}`); + + if (sfs.existsSync(possibleFullPath)) { + return findActualExecutable(possibleFullPath, args); + } + } + } + + if (exe.match(/\.ps1$/i)) { + let cmd = path.join(process.env.SYSTEMROOT!, 'System32', 'WindowsPowerShell', 'v1.0', 'PowerShell.exe'); + let psargs = ['-ExecutionPolicy', 'Unrestricted', '-NoLogo', '-NonInteractive', '-File', exe]; + + return { cmd: cmd, args: psargs.concat(args) }; + } + + if (exe.match(/\.(bat|cmd)$/i)) { + let cmd = path.join(process.env.SYSTEMROOT!, 'System32', 'cmd.exe'); + let cmdArgs = ['/C', exe, ...args]; + + return { cmd: cmd, args: cmdArgs }; + } + + if (exe.match(/\.(js)$/i)) { + let cmd = process.execPath; + let nodeArgs = [exe]; + + return { cmd: cmd, args: nodeArgs.concat(args) }; + } + + // Dunno lol + return { cmd: exe, args: args }; +} + +/** + * Spawns a process but detached from the current process. The process is put + * into its own Process Group that can be killed by unsubscribing from the + * return Observable. + * + * @param {string} exe The executable to run + * @param {Array} params The parameters to pass to the child + * @param {Object} opts Options to pass to spawn. + * + * @return {Observable} Returns an Observable that when subscribed + * to, will create a detached process. The + * process output will be streamed to this + * Observable, and if unsubscribed from, the + * process will be terminated early. If the + * process terminates with a non-zero value, + * the Observable will terminate with onError. + */ +export function spawnDetached(exe: string, params: Array, opts: any = null): Observable { + const { cmd, args } = findActualExecutable(exe, params); + + if (!isWindows) { + return spawn(cmd, args, assign({}, opts || {}, { detached: true })); + }; + + const newParams = [cmd].concat(args); + + let target = path.join(__dirname, '..', '..', 'vendor', 'jobber', 'Jobber.exe'); + let options = assign({}, opts || {}, { detached: true, jobber: true }); + + d(`spawnDetached: ${target}, ${newParams}`); + return spawn(target, newParams, options); +} + +/** + * Spawns a process attached as a child of the current process. + * + * @param {string} exe The executable to run + * @param {Array} params The parameters to pass to the child + * @param {Object} opts Options to pass to spawn. + * + * @return {Observable} Returns an Observable that when subscribed + * to, will create a child process. The + * process output will be streamed to this + * Observable, and if unsubscribed from, the + * process will be terminated early. If the + * process terminates with a non-zero value, + * the Observable will terminate with onError. + */ + +export function spawn(exe: string, params: Array = [], opts: any = null): Observable { + opts = opts || {}; + let spawnObs = Observable.create((subj: Observer<{ + source: any, + text: any + }>) => { + let { stdin, ...optsWithoutStdIn } = opts; + let { cmd, args } = findActualExecutable(exe, params); + d(`spawning process: ${cmd} ${args.join()}, ${JSON.stringify(optsWithoutStdIn)}`); + let origOpts = assign({}, optsWithoutStdIn); + if ('jobber' in origOpts) { + delete origOpts.jobber; + } + if ('split' in origOpts) { + delete origOpts.split; + }; + + const proc = spawnOg(cmd, args, origOpts); + + let bufHandler = (source: string) => (b: string | Buffer) => { + if (b.length < 1) { + return; + }; + let chunk = '<< String sent back was too long >>'; + try { + if (typeof b === 'string') { + chunk = b.toString(); + } else { + chunk = b.toString(origOpts.encoding || 'utf8'); + } + } catch (e) { + chunk = `<< Lost chunk of process output for ${exe} - length was ${b.length}>>`; + } + + subj.next({ source: source, text: chunk }); + }; + + let ret = new Subscription(); + + if (opts.stdin) { + if (proc.stdin) { + ret.add(opts.stdin.subscribe( + (x: any) => proc.stdin.write(x), + subj.error.bind(subj), + () => proc.stdin.end() + )); + } else { + subj.error(new Error(`opts.stdio conflicts with provided spawn opts.stdin observable, 'pipe' is required`)); + } + } + + let stderrCompleted: Subject | Observable | null = null; + let stdoutCompleted: Subject | Observable | null = null; + let noClose = false; + + if (proc.stdout) { + stdoutCompleted = new AsyncSubject(); + proc.stdout.on('data', bufHandler('stdout')); + proc.stdout.on('close', () => { (stdoutCompleted! as Subject).next(true); (stdoutCompleted! as Subject).complete(); }); + } else { + stdoutCompleted = Observable.of(true); + } + + if (proc.stderr) { + stderrCompleted = new AsyncSubject(); + proc.stderr.on('data', bufHandler('stderr')); + proc.stderr.on('close', () => { (stderrCompleted! as Subject).next(true); (stderrCompleted! as Subject).complete(); }); + } else { + stderrCompleted = Observable.of(true); + } + + proc.on('error', (e: Error) => { + noClose = true; + subj.error(e); + }); + + proc.on('close', (code: number) => { + noClose = true; + let pipesClosed = Observable.merge(stdoutCompleted!, stderrCompleted!) + .reduce((acc) => acc, true); + + if (code === 0) { + pipesClosed.subscribe(() => subj.complete()); + } else { + pipesClosed.subscribe(() => subj.error(new Error(`Failed with exit code: ${code}`))); + } + }); + + ret.add(new Subscription(() => { + if (noClose) { + return; + }; + + d(`Killing process: ${cmd} ${args.join()}`); + if (opts.jobber) { + // NB: Connecting to Jobber's named pipe will kill it + net.connect(`\\\\.\\pipe\\jobber-${proc.pid}`); + setTimeout(() => proc.kill(), 5 * 1000); + } else { + proc.kill(); + } + })); + + return ret; + }); + + return opts.split ? spawnObs : spawnObs.pluck('text'); +} + +function wrapObservableInPromise(obs: Observable) { + return new Promise((res, rej) => { + let out = ''; + + obs.subscribe( + (x) => out += x, + (e) => rej(new Error(`${out}\n${e.message}`)), + () => res(out)); + }); +} + +/** + * Spawns a process but detached from the current process. The process is put + * into its own Process Group. + * + * @param {string} exe The executable to run + * @param {Array} params The parameters to pass to the child + * @param {Object} opts Options to pass to spawn. + * + * @return {Promise} Returns an Promise that represents a detached + * process. The value returned is the process + * output. If the process terminates with a + * non-zero value, the Promise will resolve with + * an Error. + */ +export function spawnDetachedPromise(exe: string, params: Array, opts: any = null): Promise { + return wrapObservableInPromise(spawnDetached(exe, params, opts)); +} + +/** + * Spawns a process as a child process. + * + * @param {string} exe The executable to run + * @param {Array} params The parameters to pass to the child + * @param {Object} opts Options to pass to spawn. + * + * @return {Promise} Returns an Promise that represents a child + * process. The value returned is the process + * output. If the process terminates with a + * non-zero value, the Promise will resolve with + * an Error. + */ +export function spawnPromise(exe: string, params: Array, opts: any = null): Promise { + return wrapObservableInPromise(spawn(exe, params, opts)); +} diff --git a/extensions/fablabchemnitz/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/tsconfig.json b/extensions/fablabchemnitz/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/tsconfig.json new file mode 100644 index 00000000..2d7bf55b --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/tsconfig.json @@ -0,0 +1,29 @@ +{ + "compilerOptions": { + "removeComments": false, + "preserveConstEnums": true, + "sourceMap": true, + "declaration": true, + "noImplicitAny": true, + "noImplicitReturns": true, + "suppressImplicitAnyIndexErrors": true, + "strictNullChecks": true, + "noUnusedLocals": true, + "noImplicitThis": true, + "noUnusedParameters": true, + "module": "commonjs", + "moduleResolution": "node", + "pretty": true, + "target": "es5", + "outDir": "lib", + "lib": ["dom", "es2015"] + }, + "formatCodeOptions": { + "indentSize": 2, + "tabSize": 2 + }, + "exclude": [ + "node_modules", + "lib" + ] +} \ No newline at end of file diff --git a/extensions/fablabchemnitz/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/tslint.json b/extensions/fablabchemnitz/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/tslint.json new file mode 100644 index 00000000..4f405028 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/tslint.json @@ -0,0 +1,38 @@ +{ + "rules": { + "curly": true, + "eofline": false, + "align": [true, "parameters"], + "class-name": true, + "indent": [true, "spaces"], + "max-line-length": [true, 150], + "no-consecutive-blank-lines": [true], + "no-trailing-whitespace": true, + "no-duplicate-variable": true, + "no-var-keyword": true, + "no-empty": true, + "no-unused-expression": true, + "no-use-before-declare": true, + "no-var-requires": true, + "one-line": [true, + "check-else", + "check-whitespace", + "check-open-brace"], + "quotemark": [true, + "single", + "avoid-escape"], + "semicolon": [true, "always"], + "typedef-whitespace": [true, { + "call-signature": "nospace", + "index-signature": "nospace", + "parameter": "nospace", + "property-declaration": "nospace", + "variable-declaration": "nospace" + }], + "whitespace": [true, + "check-branch", + "check-decl", + "check-operator", + "check-type"] + } +} \ No newline at end of file diff --git a/extensions/fablabchemnitz/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/vendor/jobber/Jobber.exe b/extensions/fablabchemnitz/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/vendor/jobber/Jobber.exe new file mode 100644 index 00000000..4580d5be Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/resources/app.asar.unpacked/node_modules/spawn-rx/vendor/jobber/Jobber.exe differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/resources/electron.asar b/extensions/fablabchemnitz/inkstitch/electron/resources/electron.asar new file mode 100644 index 00000000..7c0b08e7 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/resources/electron.asar differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/snapshot_blob.bin b/extensions/fablabchemnitz/inkstitch/electron/snapshot_blob.bin new file mode 100644 index 00000000..9e7ec2dc Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/snapshot_blob.bin differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/swiftshader/libEGL.dll b/extensions/fablabchemnitz/inkstitch/electron/swiftshader/libEGL.dll new file mode 100644 index 00000000..67059c57 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/swiftshader/libEGL.dll differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/swiftshader/libGLESv2.dll b/extensions/fablabchemnitz/inkstitch/electron/swiftshader/libGLESv2.dll new file mode 100644 index 00000000..68618a0d Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/swiftshader/libGLESv2.dll differ diff --git a/extensions/fablabchemnitz/inkstitch/electron/v8_context_snapshot.bin b/extensions/fablabchemnitz/inkstitch/electron/v8_context_snapshot.bin new file mode 100644 index 00000000..ee5159ef Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/electron/v8_context_snapshot.bin differ diff --git a/extensions/fablabchemnitz/inkstitch/examples/Applique Color Change.svg b/extensions/fablabchemnitz/inkstitch/examples/Applique Color Change.svg new file mode 100644 index 00000000..3d7b6160 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/examples/Applique Color Change.svg @@ -0,0 +1,470 @@ + + + + + + + + + + + + image/svg+xml + + + + + Evan West at Wild West Designs + + + + + Wild West Designs + + + www.wildwestdesigns.biz + + + + + 1. Digitize placement and tackdown stitches as differentcolors, in order to force a stop on your machine. + Steps: + 2. May or may not have to digitize the zig zag tackdown stitch as a different color, depends on the design. + 3. Complete the rest of the design as normal. + 4. Start sewing like normal, after machine does PlacementStitch, stop machine. + 5. Place material over Placement stitch, totally covering the stitch. Use a light adhesive spray to hold material. + 6. Start sewing 1st Tackdown stitch. Stop Machine after. + 7. Completely cut away excess material from the tackdown stitch. Best to use applique scissors if available. + 8. Start machine again and let it finish stitching the rest of the design. Applique portion is finished at this point. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extensions/fablabchemnitz/inkstitch/examples/Applique Stop.svg b/extensions/fablabchemnitz/inkstitch/examples/Applique Stop.svg new file mode 100644 index 00000000..884013d3 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/examples/Applique Stop.svg @@ -0,0 +1,466 @@ + + + + + + + + + + image/svg+xml + + + + + Evan West at Wild West Designs + + + + + Wild West Designs + + + www.wildwestdesigns.biz + + + + + 1. Digitize placement and tackdown stitches and apply stop code at the end to force machine to stop. + Steps: + 2. May or may not have to add a stop code for the zig zag stitches, depends on the design. + 3. Complete the rest of the design as normal. + 4. Start sewing like normal, after machine does PlacementStitch, stop machine. + 5. Place material over Placement stitch, totally covering the stitch. Use a light adhesive spray to hold material. + 6. Start sewing 1st Tackdown stitch. Stop Machine after. + 7. Completely cut away excess material from the tackdown stitch. Best to use applique scissors if available. + 8. Start machine again and let it finish stitching the rest of the design. Applique portion is finished at this point. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extensions/fablabchemnitz/inkstitch/examples/Bfly FSL.svg b/extensions/fablabchemnitz/inkstitch/examples/Bfly FSL.svg new file mode 100644 index 00000000..9e528f1e --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/examples/Bfly FSL.svg @@ -0,0 +1,837 @@ + + + + + + + + + + image/svg+xml + + + + + Evan West at Wild West Designs + + + + + License to Use + + + + + Wild West Designs + + + www.wildwestdesigns.biz + + + "matrix(5, 0, 0, 5, -598.975, -235.975)" + + + Instructions + 1. For free standing lace, the areas thatwould be for traditional fills are going tobe for 2 layers of loose fill with opposingangles. For instance, one loose fill wouldhave 0 degree angle and the second layer would have 90 degree angle. + 2. Experiment with different densitylevels and stitch angles to attach different looks and affects. + 3. For detail work and outline work, use a decent size satin stitch. Satin stitchoutlines are required as that helps "seal"the edges and keep the design togetherafter the solvy stabilizer is removed. + 4. For the actual embroidery, use solvyand I prefer heavy weight solvy, usually with two layers of stabilizer. Dependingon the brand, may still have to use moreeven with it being heavy weight. Just have to experiement to find out what isneeded. + 5. Following the instructions on the stabilizer for removal. I tend to like to have a little of the stabilizer left and to try not to remove all of it. This allows forsome stiffness to remain in the finishedproduct. + 6. Enjoy your new FSL ornament. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extensions/fablabchemnitz/inkstitch/examples/Donkey FullBack Design.svg b/extensions/fablabchemnitz/inkstitch/examples/Donkey FullBack Design.svg new file mode 100644 index 00000000..fd9ae08f --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/examples/Donkey FullBack Design.svg @@ -0,0 +1,652 @@ + + + + + + + + + + image/svg+xml + + + + + Evan West at Wild West Designs + + + + + Wild West Designs + + + www.wildwestdesigns.biz + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extensions/fablabchemnitz/inkstitch/examples/Faux Fill Blend.svg b/extensions/fablabchemnitz/inkstitch/examples/Faux Fill Blend.svg new file mode 100644 index 00000000..c3a91e9a --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/examples/Faux Fill Blend.svg @@ -0,0 +1,580 @@ + + + + + + + + Fill stitch starting point + + + + + Fill stitch ending point + + + + + Ignore entire layer when generating stitch plan + + + + + + + + + + + + + + image/svg+xml + + + + + Evan West at Wild West Designs + + + + + License to Use + + + + + Wild West Designs + + + www.wildwestdesigns.biz + + + + + Instructions + 1. A faux blend has a regular fill layer on bottom and each subsequent layer has variable density settings + 2. Make sure that all of the layers havethe same stitch angle, this allows for blending to happen + 3. When doing more then 2 layers, eachblending layer uses less density then the previous layer + 4. Make sure to follow the same startand end points for each layer. For instance, if the base layer starts at top top and ends at bottom right, follow that same sequence for each layer. + 5. Underlay is typically not needed, but it does depend on the individualproject. + 6. Typically, it is best to work from lightto dark colors, but again it does depend on the design and the desired end look. + 7. While this is not a true blend, inmost instances, this type of blend isgood enough to achieve the desiredend look. + 8. The density values in this exampleare not set in stone, but just toillustrate the concept. True settings will depend on the design, fabric it's goingon and the size of design. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extensions/fablabchemnitz/inkstitch/examples/Fill Stitch Starting and Ending Point.svg b/extensions/fablabchemnitz/inkstitch/examples/Fill Stitch Starting and Ending Point.svg new file mode 100644 index 00000000..d11a24ae --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/examples/Fill Stitch Starting and Ending Point.svg @@ -0,0 +1,215 @@ + + + + + + + + + + + + + + Fill stitch ending point + + + + + Fill stitch starting point + + + + + + + + image/svg+xml + + + + + + + + fill-stitch starting point fill-stitch ending point The start and end markers above tell Ink/Stitch where to start and end the fill stitch.To use the markers, first install them using the Ink/Stitch "Install add-ons for Inkscape" extension and restart Inkscape.Access the markers using the Symbols tool (Object -> Symbols). Select "Ink/Stitch Comm ands" as the symbol set. Drag a marker out onto your canvas (doesn't matter where). Use the Flow-Chart Tool ("create diagram connectors") to draw a connection between the marker and the fill object to which it should apply. This will add a connector path. Adding an arrow on that path as in the above example is not necessary.Moving the marker will change the connector's position to match. You can also move the endpoints of the connector manually. The connector's endpoint nearest to the fill object is the point at which stitching will start or end. + + + + + diff --git a/extensions/fablabchemnitz/inkstitch/examples/Fringe Example.svg b/extensions/fablabchemnitz/inkstitch/examples/Fringe Example.svg new file mode 100644 index 00000000..9e256dee --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/examples/Fringe Example.svg @@ -0,0 +1,500 @@ + + + + + + + + + + + + image/svg+xml + + + + + Evan West at Wild West Designs + + + + + Wild West Designs + + + www.wildwestdesigns.biz + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extensions/fablabchemnitz/inkstitch/examples/InkStitch 1 Color Top Left Origin.svg b/extensions/fablabchemnitz/inkstitch/examples/InkStitch 1 Color Top Left Origin.svg new file mode 100644 index 00000000..15f188cd --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/examples/InkStitch 1 Color Top Left Origin.svg @@ -0,0 +1,421 @@ + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extensions/fablabchemnitz/inkstitch/examples/InkStitch 1 Color.svg b/extensions/fablabchemnitz/inkstitch/examples/InkStitch 1 Color.svg new file mode 100644 index 00000000..0081f332 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/examples/InkStitch 1 Color.svg @@ -0,0 +1,404 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extensions/fablabchemnitz/inkstitch/examples/InkStitch Logo QR Code Patch.svg b/extensions/fablabchemnitz/inkstitch/examples/InkStitch Logo QR Code Patch.svg new file mode 100644 index 00000000..bcbeeef9 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/examples/InkStitch Logo QR Code Patch.svg @@ -0,0 +1,2312 @@ + +Fill stitch ending pointFill stitch starting pointimage/svg+xml"Ink/Stitch""1""400px QR code for Ink/Stitch""matrix(2.1218, 0, 0, 2.1218, -187.183, -187.183)""matrix(1.6617263999999998,0,0,1.6617263999999998,-191,-236)" \ No newline at end of file diff --git a/extensions/fablabchemnitz/inkstitch/examples/InkStitch Multi Color.svg b/extensions/fablabchemnitz/inkstitch/examples/InkStitch Multi Color.svg new file mode 100644 index 00000000..9d4b11e0 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/examples/InkStitch Multi Color.svg @@ -0,0 +1,430 @@ + + + + + + + + + + image/svg+xml + + + + + + "matrix(2.23777, 0, 0, 2.23777, -204, -268)" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extensions/fablabchemnitz/inkstitch/examples/Logo Hat Embroidery.svg b/extensions/fablabchemnitz/inkstitch/examples/Logo Hat Embroidery.svg new file mode 100644 index 00000000..bddb372f --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/examples/Logo Hat Embroidery.svg @@ -0,0 +1,437 @@ + + + + + + + + + + + + + + + image/svg+xml + + + + + Evan West at Wild West Designs + + + + + License to Use + + + + + Wild West Designs + + + www.wildwestdesigns.biz + + + + + Hat Embroidery + 1. Hats require a very specific sequence.Bottom to top, center out. + 2. It does not matter which way you gocenter out, to the right or to the left firstjust be consistent throughout the design + 3. Be careful of the design field for hatson your machine. Some limit the height,some can go as tall as what canphysically fit. 50mm to 57mm tall is a good height on average. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extensions/fablabchemnitz/inkstitch/examples/Monogram Frame Example.svg b/extensions/fablabchemnitz/inkstitch/examples/Monogram Frame Example.svg new file mode 100644 index 00000000..ffb21b75 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/examples/Monogram Frame Example.svg @@ -0,0 +1,586 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + Evan West at Wild West Designs + + + + + License to Use + + + + + Wild West Designs + + + www.wildwestdesigns.biz + + + + "Black Stallion" + "matrix(1.53415, 0, 0, 1.53415, -188.975, -188.975)" + + + Instructions + 1. Frame intended to have monogramletters to be sandwiched between bothframes. The monogram can be longer then the frames if desired.2. Can use both frames, or delete eitherone and just use it as a top or bottom frame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extensions/fablabchemnitz/inkstitch/examples/Puff Only.svg b/extensions/fablabchemnitz/inkstitch/examples/Puff Only.svg new file mode 100644 index 00000000..d435e998 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/examples/Puff Only.svg @@ -0,0 +1,219 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + Steps + 1. Digitizing puff to where thestitches are surrounding the entire embroidery area to aidin foam removal. + 2. Use either the pinch or capping method toaccomplish this. This designuses the pinching method. + 3. After everything stitchesremove the foam and any post stitching cleanup for thenubbies that might be around. + + Pinch + Pinch + + + + + + + diff --git a/extensions/fablabchemnitz/inkstitch/examples/PuffRegular.svg b/extensions/fablabchemnitz/inkstitch/examples/PuffRegular.svg new file mode 100644 index 00000000..4678bf23 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/examples/PuffRegular.svg @@ -0,0 +1,281 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + Steps + 2. Digitizing puff to where thestitches are surrounding the entire embroidery area to aidin foam removal. + 3. Use either the pinch or capping method toaccomplish this. This designuses the pinching method. + 4. After everything stitchesremove the foam and any post stitching cleanup for thenubbies that might be around. + + 1. Digitize regular embroideryfirst and then insert a stopcommand (or color change). + Pinch + Pinch + + + + + + + + + + + + diff --git a/extensions/fablabchemnitz/inkstitch/examples/True Blend.svg b/extensions/fablabchemnitz/inkstitch/examples/True Blend.svg new file mode 100644 index 00000000..94bd521f --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/examples/True Blend.svg @@ -0,0 +1,710 @@ + + + + + + + + Fill stitch starting point + + + + + Fill stitch ending point + + + + + Ignore entire layer when generating stitch plan + + + + + + + + + + + + + + image/svg+xml + + + + + Evan West at Wild West Designs + + + + + License to Use + + + + + Wild West Designs + + + www.wildwestdesigns.biz + + + + + 100% + 0% + 75% + 25% + 25% + 75% + 0% + 100% + =100% + =100% + =100% + =100% + Instructions + 1. Many of the conditions of faux blendsalso apply here. Stitch angle, start/endsequencing, typically go from light to dark colors (depends on the design aswell) + 2. Biggest difference is math is involvedand the more complicated the blend, the more complicated the math. Justhave to make sure that each layer for agiven section equals 100% of the density for that section that you are wanting. + 3. This can involve more layers of colorsand more increments of densityvariation. The biggest factor is the size/shape of the design and the specifics of the project. + 4. What makes this a true blend compared to a faux blend is that eachsection of the layers are actually mixing with each other. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extensions/fablabchemnitz/inkstitch/examples/inkstitch_logo_screenshot.png b/extensions/fablabchemnitz/inkstitch/examples/inkstitch_logo_screenshot.png new file mode 100644 index 00000000..6c77a855 Binary files /dev/null and b/extensions/fablabchemnitz/inkstitch/examples/inkstitch_logo_screenshot.png differ diff --git a/extensions/fablabchemnitz/inkstitch/fonts/dejavufont/LICENSE b/extensions/fablabchemnitz/inkstitch/fonts/dejavufont/LICENSE new file mode 100644 index 00000000..65b8f6f7 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/fonts/dejavufont/LICENSE @@ -0,0 +1,108 @@ +This font has been adapted for Ink/Stitch by @Augusa + +ORIGINAL FONT DOWNLOAD: https://www.fontsquirrel.com/fonts/dejavu-serif +LICENSE: https://www.fontsquirrel.com/license/dejavu-serif + +========================== +DejaVu Fonts License v1.00 +========================== + +This license can also be found at this permalink: https://www.fontsquirrel.com/license/dejavu-serif + +Fonts are (c) Bitstream (see below). DejaVu changes are in public domain. +Glyphs imported from Arev fonts are (c) Tavmjong Bah (see below) + +Bitstream Vera Fonts Copyright +——————————————— + +Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is +a trademark of Bitstream, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of the fonts accompanying this license (“Fontsâ€) and associated +documentation files (the “Font Softwareâ€), to reproduce and distribute the +Font Software, including without limitation the rights to use, copy, merge, +publish, distribute, and/or sell copies of the Font Software, and to permit +persons to whom the Font Software is furnished to do so, subject to the +following conditions: + +The above copyright and trademark notices and this permission notice shall +be included in all copies of one or more of the Font Software typefaces. + +The Font Software may be modified, altered, or added to, and in particular +the designs of glyphs or characters in the Fonts may be modified and +additional glyphs or characters may be added to the Fonts, only if the fonts +are renamed to names not containing either the words “Bitstream†or the word +“Veraâ€. + +This License becomes null and void to the extent applicable to Fonts or Font +Software that has been modified and is distributed under the “Bitstream +Vera†names. + +The Font Software may be sold as part of a larger software package but no +copy of one or more of the Font Software typefaces may be sold by itself. + +THE FONT SOFTWARE IS PROVIDED “AS ISâ€, WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, +TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME +FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING +ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF +THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE +FONT SOFTWARE. + +Except as contained in this notice, the names of Gnome, the Gnome +Foundation, and Bitstream Inc., shall not be used in advertising or +otherwise to promote the sale, use or other dealings in this Font Software +without prior written authorization from the Gnome Foundation or Bitstream +Inc., respectively. For further information, contact: fonts at gnome dot +org. + +Arev Fonts Copyright +——————————————— + +Copyright (c) 2006 by Tavmjong Bah. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the fonts accompanying this license (“Fontsâ€) and +associated documentation files (the “Font Softwareâ€), to reproduce +and distribute the modifications to the Bitstream Vera Font Software, +including without limitation the rights to use, copy, merge, publish, +distribute, and/or sell copies of the Font Software, and to permit +persons to whom the Font Software is furnished to do so, subject to +the following conditions: + +The above copyright and trademark notices and this permission notice +shall be included in all copies of one or more of the Font Software +typefaces. + +The Font Software may be modified, altered, or added to, and in +particular the designs of glyphs or characters in the Fonts may be +modified and additional glyphs or characters may be added to the +Fonts, only if the fonts are renamed to names not containing either +the words “Tavmjong Bah†or the word “Arevâ€. + +This License becomes null and void to the extent applicable to Fonts +or Font Software that has been modified and is distributed under the +“Tavmjong Bah Arev†names. + +The Font Software may be sold as part of a larger software package but +no copy of one or more of the Font Software typefaces may be sold by +itself. + +THE FONT SOFTWARE IS PROVIDED “AS ISâ€, WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL +TAVMJONG BAH BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. + +Except as contained in this notice, the name of Tavmjong Bah shall not +be used in advertising or otherwise to promote the sale, use or other +dealings in this Font Software without prior written authorization +from Tavmjong Bah. For further information, contact: tavmjong @ free +. fr. diff --git a/extensions/fablabchemnitz/inkstitch/fonts/dejavufont/font.json b/extensions/fablabchemnitz/inkstitch/fonts/dejavufont/font.json new file mode 100644 index 00000000..eb74643f --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/fonts/dejavufont/font.json @@ -0,0 +1,105 @@ +{ + "name": "Dejavu for Inkstitch semicondensed", + "description": "The capital em is 19,8 millimeter wide at 100% scale. Can be scaled down to 80% or up to 150%. Every satin has center-walk underlay.", + "leading": 24, + "letter_spacing": 1.5, + "word_spacing": 7, + "auto_satin": false, + "default_glyph": "�", + "min_scale": 0.80, + "max_scale": 1.5, + "kerning_pairs": { + "AA": -1.5 , "AB": -1.5, "AC": -2, "AD": -1.5, "AE": -1.5, + "AF": -1.5,"AG": -2, "AH": -1.5, "AI": -1.5, "AJ": -4, + "AK": -1.5, "AL": -1.5, "AM": -1.5, "AN": -1.5, "AO": -2, + "AP": -1.5, "AQ": -2, "AR": -1.5,"AS": -1.5,"AT": -4, + "AU": -2.5, "AV": -4, "AW": -4, "AX": -1.5, "AY": -3, + "AZ": -1.5, + + "BA": -1.5, "CA": -2, "DA": -2, "EA": -1.5, "FA": -2.5, + "GA": -1.5, "HA": -1.5, "IA": -1.5, "JA": -2, "KA": -1.5, + "LA": -1.5, "MA": -1.5, "NA": -1.5, "OA": -2.5, "PA": -2.5, + "QA": -2.5, "RA": -1.5, "SA": -2, "TA": -4, "UA": -2.5, + "VA": -4, "WA": -4, "XA": -1.5, "YA": -3, "ZA": -1.5, + "BJ": -4, "BT": -1, "BU": -1, "BV": -1, "BW": -1, + "BX": -1.5, "BY": -1.5, "BZ": -1,"CJ": -3.5, "CT": -1, + "CV": -1, "CW": -1, "CX": -3.5, "CJ": -3.5, "CY": -1, + + "DJ": -3.5, "DT": -1, "DU": -1.5, "DV": -1, "DW": -1, + "DX": -1.5, "DY": 1, "DZ": -1, + + "EJ": -3.5, "ET": -1, "EV": -1, "EW": -1, "EY": -1.5, + + "FC": -0.5, "FG": -0.5, "FJ": -1.5, "FO": -1, "FQ": -1, + "FS": -1, "FT": -1.5, "FU": -1, "FV": -1.5, "FW": -1.5, + "FY": -1.5, + + "GJ": -3, "GT": -0.5, "GV": -1, "GW": -1, "GY": -1, + + "HJ": -4, "HT": -1, "HV": -1.5, "HW": -1.5, "HY": -1, + + "IJ": -4, "IT": -1, "IV": -1.5,"IW": -1.5,"IY": -1, + + "KC": -1.5, "KC": -1.5, "KC": -1.5, "KG": -1.5, "KO": -1.5, + "KQ": -1.5, "KT": -1.5, "KV": -1.5, "KW": -1.5, "KY": -1.5, + + "LC": -1, "LG": -1, "LI": -1, "LJ": -4, "LO": -1, + "LQ": -1, "LS": -1, "LT": -1, "LU": -1, "LV": -3, + "LW": -3, "LX": -1, "LY": -3, + + "MJ": -3.5, "MT": -1, "MV": -1.5, "MW": -1.5, "MY": -1, + "NJ": -3.5, "NT": -1, "NV": -1.5, "NW": -1.5, "NY": -1, + + "OJ": -3, "OT": -1, "OV": -2, "OW": -2, "OX": -2, + "OY": -2, "OZ": -1, + + "PJ": -4, "PT": -1, "PU": -1, "PV": -1.5, "PW": -1.5, + "PX": -1, "PY": -1, "PZ": -1, + + "QJ": -3, "QT": -1, "QU": -1, "QT": -1, "QV": -2, + "QW": -2, "QY": -2, "QX": -2, + + "RC": -2, "RG": -2, "RJ": -4, "RO": -1, "RQ": -1, + "RS": -1, "RT": -3, "RU": -3, "RV": -3, "RW": -3, + "RX": -1, "RY": -4, "RZ": -1, + + "SJ": -4, "SO": -1, "SQ": -1, "ST": -2, "SU": -1, + "SV": -1, "SW": -1, "SX": -1, "SY": -1, "SZ": -1, + + "TB": -1, "TC": -1, "TD": -1, "TE": -1, "TF": -1, + "TG": -1, "TH": -1, "TI": -1, "TJ": -4, "TK": -1, + "TL": -1, "TM": -1, "TN": -1, "TO": -1, "TQ": -1, + "TR": -1, "TS": -1, "TU": -1, "TV": -1, "TW": -1, + "TX": -1, "TY": -1, "TZ": -1, + + "UJ": -4, "UO": -1, "UQ": -1, "US": -1, "UT": -1, + "UU": -1, "UV": -1, "UW": -1, "UX": -1, "UY": -1, + + "VB": -1, "VC": -1, "VC": -2, "VD": -1, "VE": -1, + "VF": -1, "VG": -2, "VH": -1, "VI": -1, "VJ": -4, + "VK": -1, "VL": -1, "VM": -1, "VN": -1, "VO": -2, + "VP": -1, "VQ": -2, "VR": -1, "VS": -1, "VT": -1, + "VU": -1, "VV": -1, "VW": -1, "VX": -1, "VY": -1, + "VZ": -1, + + "WB": -1, "WC": -1, "WC": -2, "WD": -1, "WE": -1, + "WF": -1, "WG": -2, "WH": -1, "WI": -1, "WJ": -4, + "WK": -1, "WL": -1, "WM": -1, "WN": -1, "WO": -2, + "WP": -1, "WQ": -2, "WR": -1, "WS": -1, "WT": -1, + "WU": -1, "WV": -1, "WW": -1, "WX": -1, "WY": -1, + "WZ": -1, + + "XC": -2, "XG": -2, "XJ": -4, "XO": -2, "XQ": -2, + "XT": -2, "XU": -1, "XV": -1, "XW": -1, "XX": -1, + "XY": -2, "XZ": -1, + + "YB": -1, "YC": -3, "YD": -1, "YE": -1, "YF": -1, + "YG": -3, "YH": -1, "YI": -1, "YJ": -4, "YK": -1, + "YL": -1, "YM": -1, "YN": -1, "YO": -3, "YP": -1, + "YQ": -3, "YR": -1, "YS": -1, "YT": -1, "YU": -1, + "YV": -1, "YW": -1, "YX": -1, "YZ": -1, + + "ZC": -1, "ZG": -1, "ZJ": -4, "ZO": -2, "ZT": -1, + "ZU": -1, "ZV": -1, "ZW": -1, "ZX": -1, "ZY": -1, "ZZ": -1 + } +} diff --git a/extensions/fablabchemnitz/inkstitch/fonts/dejavufont/â†.svg b/extensions/fablabchemnitz/inkstitch/fonts/dejavufont/â†.svg new file mode 100644 index 00000000..518f1a2d --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/fonts/dejavufont/â†.svg @@ -0,0 +1,6746 @@ + + + + + DejaVu serif semi condensed + + + Trim the thread after sewing this object. + + + + + + + + + + + + + + + + + + + Satin Column cut point + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + DejaVu serif semi condensed + + + Françoise Lapierre Baillet + + + + + + + + Vectorisatio de la police DejaVu serif semi condensed pour Ink/Stitch + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extensions/fablabchemnitz/inkstitch/fonts/dejavufont/↑.svg b/extensions/fablabchemnitz/inkstitch/fonts/dejavufont/↑.svg new file mode 100644 index 00000000..518f1a2d --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/fonts/dejavufont/↑.svg @@ -0,0 +1,6746 @@ + + + + + DejaVu serif semi condensed + + + Trim the thread after sewing this object. + + + + + + + + + + + + + + + + + + + Satin Column cut point + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + DejaVu serif semi condensed + + + Françoise Lapierre Baillet + + + + + + + + Vectorisatio de la police DejaVu serif semi condensed pour Ink/Stitch + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extensions/fablabchemnitz/inkstitch/fonts/dejavufont/→.svg b/extensions/fablabchemnitz/inkstitch/fonts/dejavufont/→.svg new file mode 100644 index 00000000..518f1a2d --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/fonts/dejavufont/→.svg @@ -0,0 +1,6746 @@ + + + + + DejaVu serif semi condensed + + + Trim the thread after sewing this object. + + + + + + + + + + + + + + + + + + + Satin Column cut point + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + DejaVu serif semi condensed + + + Françoise Lapierre Baillet + + + + + + + + Vectorisatio de la police DejaVu serif semi condensed pour Ink/Stitch + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extensions/fablabchemnitz/inkstitch/fonts/dejavufont/↓.svg b/extensions/fablabchemnitz/inkstitch/fonts/dejavufont/↓.svg new file mode 100644 index 00000000..518f1a2d --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/fonts/dejavufont/↓.svg @@ -0,0 +1,6746 @@ + + + + + DejaVu serif semi condensed + + + Trim the thread after sewing this object. + + + + + + + + + + + + + + + + + + + Satin Column cut point + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + DejaVu serif semi condensed + + + Françoise Lapierre Baillet + + + + + + + + Vectorisatio de la police DejaVu serif semi condensed pour Ink/Stitch + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extensions/fablabchemnitz/inkstitch/fonts/geneva_rounded/LICENSE b/extensions/fablabchemnitz/inkstitch/fonts/geneva_rounded/LICENSE new file mode 100644 index 00000000..a856baf3 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/fonts/geneva_rounded/LICENSE @@ -0,0 +1 @@ +CC-BY-SA 2.5 https://creativecommons.org/licenses/by-sa/2.5/ diff --git a/extensions/fablabchemnitz/inkstitch/fonts/geneva_rounded/README.md b/extensions/fablabchemnitz/inkstitch/fonts/geneva_rounded/README.md new file mode 100644 index 00000000..26bedcc2 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/fonts/geneva_rounded/README.md @@ -0,0 +1,7 @@ +Geneva-simple-sans-rounded embroidery typeface V2 (draft) +suitable (in principle) for small fonts 8 to 20 mm + +License: https://creativecommons.org/licenses/by-sa/2.5/ +Cite: https://edutechwiki.unige.ch/en/InkStitch_-_Geneva-simple_typefaces +This work is based on the 1-stroke Hershey font available in InkScape +http://evilmadscientist.com/go/hershey diff --git a/extensions/fablabchemnitz/inkstitch/fonts/geneva_rounded/font.json b/extensions/fablabchemnitz/inkstitch/fonts/geneva_rounded/font.json new file mode 100644 index 00000000..78502c13 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/fonts/geneva_rounded/font.json @@ -0,0 +1,14 @@ +{ + "name": "Geneva Simple Sans Rounded", + "description": "Suitable for small fonts (8 to 20 mm)", + "leading": 16, + "letter_spacing": 2, + "word_spacing": 8, + "auto_satin": true, + "default_glyph": "�", + "min_scale": 0.75, + "max_scale": 2.0, + "kerning_pairs": { + "wo": -0.9 + } +} diff --git a/extensions/fablabchemnitz/inkstitch/fonts/geneva_rounded/â†.svg b/extensions/fablabchemnitz/inkstitch/fonts/geneva_rounded/â†.svg new file mode 100644 index 00000000..f4fa385e --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/fonts/geneva_rounded/â†.svg @@ -0,0 +1,2948 @@ + + + + + + + + + + + + + + Satin Column cut point + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extensions/fablabchemnitz/inkstitch/fonts/geneva_rounded/↑.svg b/extensions/fablabchemnitz/inkstitch/fonts/geneva_rounded/↑.svg new file mode 100644 index 00000000..17bfb479 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/fonts/geneva_rounded/↑.svg @@ -0,0 +1,2948 @@ + + + + + + + + + + + + + + Satin Column cut point + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extensions/fablabchemnitz/inkstitch/fonts/geneva_rounded/→.svg b/extensions/fablabchemnitz/inkstitch/fonts/geneva_rounded/→.svg new file mode 100644 index 00000000..17bfb479 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/fonts/geneva_rounded/→.svg @@ -0,0 +1,2948 @@ + + + + + + + + + + + + + + Satin Column cut point + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extensions/fablabchemnitz/inkstitch/fonts/geneva_rounded/↓.svg b/extensions/fablabchemnitz/inkstitch/fonts/geneva_rounded/↓.svg new file mode 100644 index 00000000..17bfb479 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/fonts/geneva_rounded/↓.svg @@ -0,0 +1,2948 @@ + + + + + + + + + + + + + + Satin Column cut point + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extensions/fablabchemnitz/inkstitch/fonts/geneva_simple/LICENSE b/extensions/fablabchemnitz/inkstitch/fonts/geneva_simple/LICENSE new file mode 100644 index 00000000..a856baf3 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/fonts/geneva_simple/LICENSE @@ -0,0 +1 @@ +CC-BY-SA 2.5 https://creativecommons.org/licenses/by-sa/2.5/ diff --git a/extensions/fablabchemnitz/inkstitch/fonts/geneva_simple/README.md b/extensions/fablabchemnitz/inkstitch/fonts/geneva_simple/README.md new file mode 100644 index 00000000..a47805a9 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/fonts/geneva_simple/README.md @@ -0,0 +1,7 @@ +Geneva-simple-sans embroidery typeface V1 (draft) +suitable (in principle) for small fonts (6 to 15mm) + +License: https://creativecommons.org/licenses/by-sa/2.5/ +Cite: https://edutechwiki.unige.ch/en/InkStitch_-_Geneva-simple_typefaces +This work is based on the 1-stroke Hershey font available in InkScape +http://evilmadscientist.com/go/hershey diff --git a/extensions/fablabchemnitz/inkstitch/fonts/geneva_simple/font.json b/extensions/fablabchemnitz/inkstitch/fonts/geneva_simple/font.json new file mode 100644 index 00000000..9cc28de7 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/fonts/geneva_simple/font.json @@ -0,0 +1,14 @@ +{ + "name": "Geneva Simple Sans", + "description": "Suitable for small fonts (6 to 15mm)", + "leading": 16, + "letter_spacing": 2.5, + "word_spacing": 9, + "auto_satin": true, + "default_glyph": "�", + "min_scale": 0.75, + "max_scale": 2.0, + "kerning_pairs": { + "wo": -0.9 + } +} diff --git a/extensions/fablabchemnitz/inkstitch/fonts/geneva_simple/â†.svg b/extensions/fablabchemnitz/inkstitch/fonts/geneva_simple/â†.svg new file mode 100644 index 00000000..3158f034 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/fonts/geneva_simple/â†.svg @@ -0,0 +1,2841 @@ + + + + + + + + + + + + + + Satin Column cut point + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extensions/fablabchemnitz/inkstitch/fonts/geneva_simple/↑.svg b/extensions/fablabchemnitz/inkstitch/fonts/geneva_simple/↑.svg new file mode 100644 index 00000000..3158f034 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/fonts/geneva_simple/↑.svg @@ -0,0 +1,2841 @@ + + + + + + + + + + + + + + Satin Column cut point + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extensions/fablabchemnitz/inkstitch/fonts/geneva_simple/→.svg b/extensions/fablabchemnitz/inkstitch/fonts/geneva_simple/→.svg new file mode 100644 index 00000000..3158f034 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/fonts/geneva_simple/→.svg @@ -0,0 +1,2841 @@ + + + + + + + + + + + + + + Satin Column cut point + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extensions/fablabchemnitz/inkstitch/fonts/geneva_simple/↓.svg b/extensions/fablabchemnitz/inkstitch/fonts/geneva_simple/↓.svg new file mode 100644 index 00000000..3158f034 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/fonts/geneva_simple/↓.svg @@ -0,0 +1,2841 @@ + + + + + + + + + + + + + + Satin Column cut point + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extensions/fablabchemnitz/inkstitch/fonts/medium_font/LICENSE b/extensions/fablabchemnitz/inkstitch/fonts/medium_font/LICENSE new file mode 100644 index 00000000..10ea73a8 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/fonts/medium_font/LICENSE @@ -0,0 +1,94 @@ +Copyright (c) 2017, Lex Neva. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. + diff --git a/extensions/fablabchemnitz/inkstitch/fonts/medium_font/README_en.md b/extensions/fablabchemnitz/inkstitch/fonts/medium_font/README_en.md new file mode 100644 index 00000000..d2906c2a --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/fonts/medium_font/README_en.md @@ -0,0 +1,24 @@ +Small Font +========== + +This is a small font for use in machine embroidery. It includes capital and lowercase letters, numbers, and the following punctuation: `< > = - + , : ( ) @ . _ ' " “ â€#` + +Currently one size is available, 0.2 inches, as measured by the width of the capital letter "M". + +You may use this font for free in any embroidery project, including in designs that you intend to sell or sew out and sell. There is no limitation on the number of designs or items you may sell. For full details, check the LICENSE file in the top directory. + +I've taken pains to make this font sew out nicely even though it's tiny. Every character is properly underlayed using a center-walk stitch. Even still, your choice of fabric, needle, and stabilizer will definitely affect your end results! Make sure you test it out before sewing onto a garment or anything else that you really care about. + +If you can see areas for improvement, I'd like to know. Just open a github issue in this repo and we can talk through your ideas. + +File Structure +-------------- + +This font is designed for Ink/Stitch and uses its standard font folder layout. The folder contains four files: + +* `→.svg` contains glyphs designed for words laid out horizontally and stitched left-to-right +* `â†.svg` contains glyphs designed for words laid out horizontally and stitched right-to-left +* `↓.svg` contains glyphs designed for words laid out vertically and stitched top-to-bottom +* `↑.svg` contains glyphs designed for words laid out vertically and stitched bottom-to-top + +The files are named as they are so as to (hopefully) be recognizable to native speakers of multiple languages. diff --git a/extensions/fablabchemnitz/inkstitch/fonts/medium_font/font.json b/extensions/fablabchemnitz/inkstitch/fonts/medium_font/font.json new file mode 100644 index 00000000..df760bde --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/fonts/medium_font/font.json @@ -0,0 +1,14 @@ +{ + "name": "Ink/Stitch Medium Font", + "description": "A basic font suited for medium-sized characters. The capital em is 0.6 inches wide at 100% scale. Can be scaled down to 75% or up to 150%. Every satin has contour underlay.", + "leading": 24, + "letter_spacing": 4.5, + "word_spacing": 13.5, + "auto_satin": true, + "default_glyph": "�", + "min_scale": 0.75, + "max_scale": 2.0, + "kerning_pairs": { + "wo": -0.9 + } +} diff --git a/extensions/fablabchemnitz/inkstitch/fonts/medium_font/â†.svg b/extensions/fablabchemnitz/inkstitch/fonts/medium_font/â†.svg new file mode 100644 index 00000000..9fab4701 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/fonts/medium_font/â†.svg @@ -0,0 +1,3215 @@ + + + + + + + + + + + + + + Satin Column cut point + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extensions/fablabchemnitz/inkstitch/fonts/medium_font/↑.svg b/extensions/fablabchemnitz/inkstitch/fonts/medium_font/↑.svg new file mode 100644 index 00000000..bbdacf81 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/fonts/medium_font/↑.svg @@ -0,0 +1,3174 @@ + + + + + + + + + + + + + + Satin Column cut point + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extensions/fablabchemnitz/inkstitch/fonts/medium_font/→.svg b/extensions/fablabchemnitz/inkstitch/fonts/medium_font/→.svg new file mode 100644 index 00000000..ba92382d --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/fonts/medium_font/→.svg @@ -0,0 +1,3205 @@ + + + + + + + + + + + + + + Satin Column cut point + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extensions/fablabchemnitz/inkstitch/fonts/medium_font/↓.svg b/extensions/fablabchemnitz/inkstitch/fonts/medium_font/↓.svg new file mode 100644 index 00000000..4b0dd2d1 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/fonts/medium_font/↓.svg @@ -0,0 +1,3176 @@ + + + + + + + + + + + + + + Satin Column cut point + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extensions/fablabchemnitz/inkstitch/fonts/small_font/LICENSE b/extensions/fablabchemnitz/inkstitch/fonts/small_font/LICENSE new file mode 100644 index 00000000..10ea73a8 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/fonts/small_font/LICENSE @@ -0,0 +1,94 @@ +Copyright (c) 2017, Lex Neva. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. + diff --git a/extensions/fablabchemnitz/inkstitch/fonts/small_font/README_en.md b/extensions/fablabchemnitz/inkstitch/fonts/small_font/README_en.md new file mode 100644 index 00000000..d2906c2a --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/fonts/small_font/README_en.md @@ -0,0 +1,24 @@ +Small Font +========== + +This is a small font for use in machine embroidery. It includes capital and lowercase letters, numbers, and the following punctuation: `< > = - + , : ( ) @ . _ ' " “ â€#` + +Currently one size is available, 0.2 inches, as measured by the width of the capital letter "M". + +You may use this font for free in any embroidery project, including in designs that you intend to sell or sew out and sell. There is no limitation on the number of designs or items you may sell. For full details, check the LICENSE file in the top directory. + +I've taken pains to make this font sew out nicely even though it's tiny. Every character is properly underlayed using a center-walk stitch. Even still, your choice of fabric, needle, and stabilizer will definitely affect your end results! Make sure you test it out before sewing onto a garment or anything else that you really care about. + +If you can see areas for improvement, I'd like to know. Just open a github issue in this repo and we can talk through your ideas. + +File Structure +-------------- + +This font is designed for Ink/Stitch and uses its standard font folder layout. The folder contains four files: + +* `→.svg` contains glyphs designed for words laid out horizontally and stitched left-to-right +* `â†.svg` contains glyphs designed for words laid out horizontally and stitched right-to-left +* `↓.svg` contains glyphs designed for words laid out vertically and stitched top-to-bottom +* `↑.svg` contains glyphs designed for words laid out vertically and stitched bottom-to-top + +The files are named as they are so as to (hopefully) be recognizable to native speakers of multiple languages. diff --git a/extensions/fablabchemnitz/inkstitch/fonts/small_font/font.json b/extensions/fablabchemnitz/inkstitch/fonts/small_font/font.json new file mode 100644 index 00000000..7732a7a0 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/fonts/small_font/font.json @@ -0,0 +1,14 @@ +{ + "name": "Ink/Stitch Small Font", + "description": "A font suited for small characters. The capital em is 0.2 inches wide at 100% scale. Can be scaled up to 300%.", + "leading": 8, + "letter_spacing": 1.5, + "word_spacing": 4.5, + "auto_satin": true, + "default_glyph": "�", + "min_scale": 1.0, + "max_scale": 3.0, + "kerning_pairs": { + "wo": -0.3 + } +} diff --git a/extensions/fablabchemnitz/inkstitch/fonts/small_font/â†.svg b/extensions/fablabchemnitz/inkstitch/fonts/small_font/â†.svg new file mode 100644 index 00000000..8fd8d9b9 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/fonts/small_font/â†.svg @@ -0,0 +1,3112 @@ + + + + + + + + + + + + + + Satin Column cut point + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extensions/fablabchemnitz/inkstitch/fonts/small_font/↑.svg b/extensions/fablabchemnitz/inkstitch/fonts/small_font/↑.svg new file mode 100644 index 00000000..3b511265 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/fonts/small_font/↑.svg @@ -0,0 +1,3076 @@ + + + + + + + + + + + + + + Satin Column cut point + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extensions/fablabchemnitz/inkstitch/fonts/small_font/→.svg b/extensions/fablabchemnitz/inkstitch/fonts/small_font/→.svg new file mode 100644 index 00000000..1933be79 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/fonts/small_font/→.svg @@ -0,0 +1,3097 @@ + + + + + + + + + + + + + + Satin Column cut point + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extensions/fablabchemnitz/inkstitch/fonts/small_font/↓.svg b/extensions/fablabchemnitz/inkstitch/fonts/small_font/↓.svg new file mode 100644 index 00000000..9dbd4719 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/fonts/small_font/↓.svg @@ -0,0 +1,3071 @@ + + + + + + + + + + + + + + Satin Column cut point + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extensions/fablabchemnitz/inkstitch/fonts/tt_directors/README_en.md b/extensions/fablabchemnitz/inkstitch/fonts/tt_directors/README_en.md new file mode 100644 index 00000000..52ba4a20 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/fonts/tt_directors/README_en.md @@ -0,0 +1,13 @@ +Font origin and licence for TT_Masters + +www.free-fonts-download.com/Script/tt-directors-font +Font's name: TT Directors Font +Font's license: Public domain / GPL / OFL +Zip File size: 532 kb +Designed by: Jovanny Lemonad +Designer web: http://typetype.ru/ + +Font is traced and converted to suit Inkstitch embroidery lettering format. + + + diff --git a/extensions/fablabchemnitz/inkstitch/fonts/tt_directors/font.json b/extensions/fablabchemnitz/inkstitch/fonts/tt_directors/font.json new file mode 100644 index 00000000..a819c2cc --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/fonts/tt_directors/font.json @@ -0,0 +1,14 @@ +{ + "name": "TT Directors", + "description": "A font suited for directing", + "leading": 20, + "letter_spacing": 1.0, + "word_spacing": 4.5, + "auto_satin": true, + "default_glyph": "?", + "min_scale": 1.0, + "max_scale": 5.0, + "kerning_pairs": { + "wo": -0.3 + } +} diff --git a/extensions/fablabchemnitz/inkstitch/fonts/tt_directors/â†.svg b/extensions/fablabchemnitz/inkstitch/fonts/tt_directors/â†.svg new file mode 100644 index 00000000..dd303f7c --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/fonts/tt_directors/â†.svg @@ -0,0 +1,2334 @@ + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extensions/fablabchemnitz/inkstitch/fonts/tt_directors/↑.svg b/extensions/fablabchemnitz/inkstitch/fonts/tt_directors/↑.svg new file mode 100644 index 00000000..aa60e89e --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/fonts/tt_directors/↑.svg @@ -0,0 +1,2334 @@ + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extensions/fablabchemnitz/inkstitch/fonts/tt_directors/→.svg b/extensions/fablabchemnitz/inkstitch/fonts/tt_directors/→.svg new file mode 100644 index 00000000..2c58cbd0 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/fonts/tt_directors/→.svg @@ -0,0 +1,2389 @@ + + + + + + + Ignore entire layer when generating stitch plan + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extensions/fablabchemnitz/inkstitch/fonts/tt_directors/↓.svg b/extensions/fablabchemnitz/inkstitch/fonts/tt_directors/↓.svg new file mode 100644 index 00000000..96f67fa0 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/fonts/tt_directors/↓.svg @@ -0,0 +1,2334 @@ + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extensions/fablabchemnitz/inkstitch/fonts/tt_masters/README_en.md b/extensions/fablabchemnitz/inkstitch/fonts/tt_masters/README_en.md new file mode 100644 index 00000000..1941e46f --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/fonts/tt_masters/README_en.md @@ -0,0 +1,13 @@ +Font origin and licence for TT_Masters + +www.free-fonts-download.com/Script/tt-masters-font +Font's name: TT Masters Font +Font's license: Public domain / GPL / OFL +Zip File size: 532 kb +Designed by: Jovanny Lemonad +Designer web: http://typetype.ru/ + +Font is traced and converted to suit Inkstitch embroidery lettering format. + + + diff --git a/extensions/fablabchemnitz/inkstitch/fonts/tt_masters/font.json b/extensions/fablabchemnitz/inkstitch/fonts/tt_masters/font.json new file mode 100644 index 00000000..341aae54 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/fonts/tt_masters/font.json @@ -0,0 +1,16 @@ +{ + "name": "TT Masters", + "description": "A font suited for heavy typing :)", + "leading": 22, + "letter_spacing": 1.5, + "word_spacing": 7, + "auto_satin": true, + "default_glyph": "?", + "min_scale": 1.0, + "max_scale": 3.0, + "kerning_pairs": { + "wo": -0.3, + "vo": -0.3 + + } +} diff --git a/extensions/fablabchemnitz/inkstitch/fonts/tt_masters/â†.svg b/extensions/fablabchemnitz/inkstitch/fonts/tt_masters/â†.svg new file mode 100644 index 00000000..648a422c --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/fonts/tt_masters/â†.svg @@ -0,0 +1,2968 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extensions/fablabchemnitz/inkstitch/fonts/tt_masters/↑.svg b/extensions/fablabchemnitz/inkstitch/fonts/tt_masters/↑.svg new file mode 100644 index 00000000..278fc955 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/fonts/tt_masters/↑.svg @@ -0,0 +1,2968 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extensions/fablabchemnitz/inkstitch/fonts/tt_masters/→.svg b/extensions/fablabchemnitz/inkstitch/fonts/tt_masters/→.svg new file mode 100644 index 00000000..0eace770 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/fonts/tt_masters/→.svg @@ -0,0 +1,2968 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extensions/fablabchemnitz/inkstitch/fonts/tt_masters/↓.svg b/extensions/fablabchemnitz/inkstitch/fonts/tt_masters/↓.svg new file mode 100644 index 00000000..148d8f88 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/fonts/tt_masters/↓.svg @@ -0,0 +1,2968 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extensions/fablabchemnitz/inkstitch/palettes/InkStitch ARC Polyester.gpl b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch ARC Polyester.gpl new file mode 100644 index 00000000..a9d2b2cd --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch ARC Polyester.gpl @@ -0,0 +1,292 @@ +GIMP Palette +Name: Ink/Stitch: ARC Polyester +Columns: 4 +# RGB Value Color Name Number +236 244 251 White 10 +250 176 68 Scholastic 432 +229 100 52 Orange 650 +242 172 179 Pale Pink 305 +194 147 173 Smoky Grape 345 + 56 64 89 Light Midnight 5553 + 51 80 138 Imperial Blue 806 + 0 142 138 Jade Green 447 + 46 159 117 Pale Jade 1615 +227 196 152 Winter Wheat 1145 +126 92 62 Dark Brown 1545 +155 169 165 Quarry 111 +240 247 248 White 15 +233 146 37 Goldenrod 520 +227 103 50 Orange 134 +227 92 120 Shrimp 315 +167 109 144 Mulberry 347 + 58 65 79 Dark Grey / Blue 422 +125 171 187 Milky Blue 404 + 0 153 153 Cyan 443 + 37 117 72 Jade 992 +201 173 127 Latte 2518 +143 95 69 Rancho Brown 3142 +134 142 140 Platinum 8010 +237 237 210 Light Yellow 1140 +248 149 64 Orange 649 +243 89 47 Tangerine 135 +240 111 140 Light Cerise 313 +131 84 120 Argyle Purple 1323 + 58 66 75 Dark Navy 423 + 85 187 200 Capri 446 +174 215 168 Green Ash 947 + 67 100 72 Teal 995 +197 161 108 Honey 2526 +111 81 67 Medium Brown 859 +141 147 138 Platinum 1713 +240 242 216 Vanilla Ice 811 +229 178 92 Golden Cream 466 +224 93 67 Dark Salmon Pink 526 +255 161 181 Dusty Rose 307 +130 98 139 Light Grape 1313 +168 190 213 Angel Falls 379 + 78 182 193 Capri 444 +185 222 138 Lettuce Green 984 +152 171 134 Olive Green 962 +182 163 108 Lark 1552 +133 88 55 Dark Brown 841 +136 145 134 Neutral Gray 112 +227 237 207 Light Yellow 828 +197 146 52 Old Gold 652 +221 88 81 Dark Salmon Pink 527 +231 127 157 Wild Orchid 309 +103 64 103 Dark Purple 348 +160 191 215 Blue Baron 380 + 81 178 187 River Blue 4419 +192 232 124 Lime 985 +122 142 104 Loden Frost 963 +191 155 84 Oak Buff 620 +113 77 61 Brown 1527 +117 126 120 Medium Grey 675 +240 238 204 Glass Green 165 +193 136 47 Medium Orange / Brown 654 +186 70 54 Dark Orange / Brown 528 +167 59 65 Terra Cotta 1240 + 93 74 110 Steel 398 +144 174 202 Pale Blue 382 + 0 153 175 Dark Blue / Green 5555 +152 193 115 Medium Green 1619 +166 164 121 Sage Green 653 +206 158 89 Oak Buff 619 +119 104 82 Medium Green / Yellow 5558 +126 137 142 Grey 589 +247 230 185 Almond Oil 627 +174 133 72 Gold 905 +207 76 63 Dark Salmon 3016 +194 71 85 Dusky Pink 190 + 89 65 74 Dark Brown 362 +144 166 198 Pale Blue 381 + 36 156 187 Dark Turquoise Blue 445 +127 217 87 Bright Green 1183 +184 198 107 Celery Green 983 +176 148 91 Medium Yellow 843 +115 92 72 Bagby Green 878 +115 127 127 Stormy Sea 115 +244 238 128 Medium Yellow 632 +179 119 60 Wicker 624 +226 140 115 Blush 3014 +185 64 54 Dark Orange / Brown 700 +177 184 211 Ice Blue 383 +127 174 202 Pale Blue / Green 406 + 0 120 166 Pretty Blue 697 +115 181 78 Medium Green 988 +155 153 85 Olive Green 951 +177 152 75 Faded Brass 842 +104 80 68 Dark Fawn 890 +118 119 124 Medium Grey 585 +250 227 55 Yellow 635 +177 109 70 Wicker 146 +156 87 68 Medium Brown 839 +180 58 57 Dark Orange / Brown 3015 +170 166 198 Pale Violet 388 +168 202 217 Crystal Blue 6137 + 30 97 106 Deep Atlantic 913 +135 188 166 Dusty Jade Green 961 +159 170 83 Bright Green 950 +209 172 73 Misted Yellow 616 +118 85 71 Medium Brown 888 +109 110 115 Pewter 1716 +248 190 0 Fluo Yellow 763 +186 110 77 Brown 253 +135 74 60 Dark Brown 840 +192 70 66 Dark Salmon Pink 266 +210 195 204 Orchid Leaf 387 +175 203 207 Light Blue / Green 402 + 72 112 114 Gander Green 1386 + 82 179 151 Emerald Green 909 +204 184 109 Rattan 982 +186 156 69 Medium Green / Yellow 2519 +106 77 66 Dark Fawn 513 + 98 127 126 Trellis 966 +247 225 63 Lemon 633 +165 88 58 Medium Brown 255 +148 76 66 Dark Red / Orange 838 +168 61 58 Dark Orange / Brown 187 +169 152 178 Sterling 343 +150 200 217 Moderate Blue 403 + 67 90 106 Petrol Blue 5556 + 30 158 137 Tender Teal 109 +156 138 64 Light Green / Yellow 952 +193 185 157 Sand 1147 + 95 78 64 Dark Fawn 1152 + 98 136 138 Arctic 965 +247 215 72 Gold Goblet 604 +253 219 185 Opaline 1160 +252 225 209 Rosewater 301 +182 70 71 Terra Cotta 529 +153 144 177 Light Lilac 386 +157 200 214 Aqua Lake 4004 + 57 98 118 Medium Green / Blue 142 + 0 140 110 Dark Blue / Green 450 +138 134 74 Medium Green / Yellow 953 +189 185 162 Alfalfa 1141 +104 78 59 Clayrust 858 +108 124 126 Flint Stone 114 +255 210 52 Yellow 419 +245 209 185 Flesh 501 +205 171 153 Peach 830 +154 65 62 Rust 571 +129 116 159 Aster Purple 1324 +118 175 203 Alaskan Blue 5554 +106 135 149 Medium Blue / Grey 541 + 0 115 83 Medium Green 449 +125 120 66 Olive Green 845 +163 162 142 Flint Gray 1149 + 81 73 69 Dark Brown 891 + 86 94 90 Dark Grey 116 +255 197 0 Sunflower 4117 +242 197 173 Bisque 503 +230 207 213 Orchid Ice 376 +155 59 64 Rust 213 +124 104 171 Light Purple 390 + 96 153 177 Wonder Blue 405 +192 233 218 Bleached Aqua 442 + 0 139 111 Dark Blue / Green 825 +117 113 68 Dark Green / Yellow 956 +150 139 119 Moon Rock 1520 + 84 74 68 Dark Brown 892 + 72 80 82 Granite 247 +245 222 143 Blond 601 +238 197 174 Bisque 502 +255 206 210 Blushing Bride 302 +144 67 74 Dark Brown 531 +102 80 143 Kings Purple 392 + 57 129 163 Medium Green / Blue 409 +147 212 198 Pale Aqua Green 903 + 54 125 103 Dark Blue / Green 3325 + 97 101 62 Olive Drab 955 +168 151 129 Light Brown 4371 +203 209 194 Almost Aqua 101 + 81 82 80 Granite 117 +255 215 125 Glow 612 +216 162 133 Cinnamon 831 +251 222 214 Rosewater 303 +141 63 67 Dark Rust Red 1241 + 75 72 132 Purple 1031 + 0 128 168 Medium Turquoise Blue 2093 +148 211 187 Pale Aqua 904 + 41 95 74 Green Petal 695 + 97 96 66 Olive Drab 655 +148 135 117 Moon Rock 836 +198 200 186 Light Green / Yellow 5829 + 59 60 59 Black 20 +238 217 134 Pale Yellow / Gold 613 +190 135 109 Tawny Birch 832 +246 202 213 Pink Bazaar 304 +131 68 83 Dark Brown 2250 + 83 85 153 Medium Purple 1331 + 67 126 176 Medium Blue 809 + 62 173 158 Grizzly Turquoise 906 +207 226 189 Ambrosia 945 + 76 91 65 Medium Green / Yellow 240 +138 123 107 Pine Bark 873 +187 195 181 Palm Leaf 829 +255 201 76 Cornsilk 42 +241 206 88 Primrose Yellow 605 +255 190 172 Flesh Pink 504 +233 176 186 Light Melon 306 +115 59 61 Sepia 1243 + 67 111 157 Cornflower 385 + 55 112 164 Medium Blue 1163 + 91 185 169 Aqua Green 907 +214 225 182 Lime Cream 944 +177 153 131 Fawn 819 +120 118 104 Mushroom 118 +208 210 204 Light Green 5559 +241 255 82 Gold / Yellow 21 +248 210 114 Daffodil 602 +253 174 153 Salmon 505 +223 152 181 Pink 321 +117 71 79 Dark Purple 363 + 55 73 124 Medium Purple 2031 + 62 105 156 Cornflower 417 + 46 165 155 Grizzly Turquoise 138 + 64 155 71 Sage 5557 +217 193 157 Pale Peach 818 +185 163 129 Cane 628 +181 191 184 Winter Sage 1708 +184 81 110 Dark Pink 54 +251 191 73 Scholastic 286 +238 153 142 Salmon 506 +189 83 121 Dark Pink 332 +108 62 71 Dark Purple 216 + 59 72 109 Ash 5550 + 0 102 153 Danish Teal 413 + 0 135 122 Medium Green / Blue 4627 + 53 143 72 Dark Green 990 +210 192 149 Taupe 815 +176 138 87 Medium Yellow 621 +192 203 198 Ballad Blue 1707 +255 118 95 Persimmon 47 +226 180 63 Mustard Yellow 609 +250 166 129 Coral Reef 508 +183 82 122 Dark Pink 325 +106 60 74 Dark Purple 361 + 55 77 112 Ash 5551 + 26 102 144 Medium Blue 104 + 87 120 104 Gander Green 455 + 0 139 71 Emerald 777 +199 186 154 Gravel 1148 +159 138 103 Kelp 412 +165 176 171 Aqua Gray 1710 +255 233 98 Star Gold 33 +246 188 58 Yellow Gold 641 +227 123 85 Copper 525 +203 105 143 Passion Pink 324 +197 155 147 Adobe Rose 862 + 51 76 105 Dark Navy 415 + 30 96 149 Dark Royal Blue 4453 + 67 74 49 Dark Bottle Green 448 + 0 131 64 Green 317 +220 204 168 Sea Mist 814 +120 97 69 Bagby Green 857 +174 185 182 Pearl Blue 102 +255 133 144 Azalea 46 +244 178 69 Amber 642 +234 129 76 Gold 3001 +177 64 91 Dusky Pink 333 +170 123 114 Nostalgia Rose 864 + 61 67 91 Light Midnight 416 + 32 99 145 Medium Blue 414 + 48 85 79 Enchanted Sea 4735 + 49 135 87 Celtics Green 451 +234 222 188 Cream 812 +170 126 96 Fawn 833 +150 158 156 Dark Grey 588 +255 185 83 Mimosa 43 +252 163 59 Orange 646 +233 108 50 Golden Brown 651 +157 61 74 Terra Cotta 530 +159 110 99 Orange / Brown 867 + 62 66 77 Dark Navy 5552 + 48 108 166 Medium Blue 1423 + 0 147 142 Peppermint 688 + 83 174 121 Green 949 +211 200 165 Light Green / Yellow 1146 +133 102 72 Medium Brown 854 +178 191 189 Surf Spray 107 +150 232 69 Bright Green 32 diff --git a/extensions/fablabchemnitz/inkstitch/palettes/InkStitch ARC Rayon.gpl b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch ARC Rayon.gpl new file mode 100644 index 00000000..909aebb2 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch ARC Rayon.gpl @@ -0,0 +1,292 @@ +GIMP Palette +Name: Ink/Stitch: ARC Rayon +Columns: 4 +# RGB Value Color Name Number + 66 69 73 Dark Navy 920 +232 170 67 Amber 882 + 48 154 148 Tender Teal 691 + 96 59 68 Intense Maroon 331 +175 193 119 Nile 791 +231 190 165 Evening Sand 601 + 73 61 58 Black Chrome 880 + 72 79 65 Dark Grey / Green 303 +245 224 199 Aspen White 599 +163 190 190 Canal Blue 380 +196 212 201 Pale Blue 820 +244 252 253 White 15 + 66 70 77 Dark Navy 921 +255 182 37 Golden Lights 764 + 0 135 121 Isle Green 157 +205 147 176 Violet Toule 640 +142 157 78 Medium Green / Yellow 793 +242 156 125 Peach Pink 607 + 89 73 65 Dark Brown 354 + 77 94 83 Kahki Green 245 +236 211 202 Chalk 742 +151 186 199 Pale Blue 682 +170 195 201 Aqualine 822 +234 245 253 White 10 + 56 63 79 Dark Grey / Blue 120 +255 200 85 Cornsilk 763 + 0 169 134 Peppermint 676 +226 197 209 Light Pink 376 + 68 102 82 Kahki Green 695 +164 81 72 Dark Red / Orange 572 +122 92 69 Medium Brown 878 + 56 88 78 Enchanted Sea 324 +235 133 149 Light Orange 713 + 98 139 154 Dull Blue 783 +112 147 164 Medium Blue 453 +197 202 191 Gray Violet 580 + 58 72 94 Dark Blue / Green 218 +245 243 195 Celery 662 + 59 196 160 Peppermint 637 +112 64 106 Dark Purple 745 + 98 148 89 Holly Green 320 +167 85 75 Medium Brown 260 +128 111 92 Medium Green / Yellow 355 + 55 114 109 Dark Green / Blue 185 +133 71 69 Dark Brown 333 + 73 97 121 Dark Grey / Blue 544 + 92 125 144 Slate Grey 540 +194 200 189 Pale Grey 581 + 74 84 102 Petrol Blue 123 +229 223 171 Light Yellow / Orange 667 +138 222 208 Seafrost 681 +167 71 105 Medium Purple 215 +133 171 85 Medium Green / Yellow 690 +188 102 81 Faded Rose 258 + 87 71 61 Dark Brown 613 + 62 108 98 Dark Green 563 +108 63 70 Sepia 416 + 70 104 136 Petrol Blue 142 + 84 102 115 Grey 381 +169 179 172 Traditional Gray 582 + 54 94 148 Medium Purple 808 +246 232 174 Tusk 288 +131 219 190 Tropical Wave 679 +225 130 163 Pink 274 +145 183 114 Medium Green 312 +162 87 65 Medium Brown 255 + 71 64 61 Black Chrome 879 +156 199 155 Hemlock 683 +244 178 186 Candy Pink 670 + 74 93 106 Dark Grey / Blue 541 + 79 91 95 Dark Grey / Blue 542 +160 169 164 Quarry 118 +171 190 204 Cashmere Blue 103 +245 235 189 Transparent Yellow 665 +179 232 207 Mint 635 +231 189 206 Light Pink 659 +134 188 122 Medium Green 315 +165 98 71 Brown 256 +175 138 108 Tawny Birch 620 +152 175 144 Moss 617 +233 176 179 Salmon 327 + 71 71 103 Petrol Blue 217 +133 154 180 Medium Blue / Grey 660 +165 172 168 Aqua Gray 588 +102 128 160 Limoges Blue 272 +233 218 162 Banana Crepe 285 + 93 164 156 Medium Green / Blue 138 +243 217 218 Light Pink 710 +146 183 110 Medium Green 311 +193 131 62 Medium Orange / Brown 384 +184 164 136 Pale Orange 626 +114 135 123 Cloudy Jade 363 +241 199 196 Pink Mist 611 + 59 65 84 Dark Grey / Blue 122 + 85 102 141 Medium Blue 389 +134 136 126 Dark Green 243 + 62 95 149 Slate Blue 806 +239 211 43 Pale Beige 219 + 49 134 122 Jade 110 +204 163 186 Lilac Pink 639 +191 231 144 Green Dust 537 +195 134 70 Sunburst 387 +177 160 130 Twill 600 + 77 94 83 Kahki Green 364 +230 194 178 Peach Whip 352 +175 183 201 Medium Grey 815 + 68 79 125 Grey / Blue 366 +101 110 107 Metal 675 + 44 92 132 Imperial Blue 809 +251 226 146 Popcorn 661 + 49 85 78 Enchanted Sea 129 +194 134 168 Smoky Grape 644 + 96 203 131 Pale Green 634 +254 184 113 Buff Orange 290 +174 149 115 Beige 412 + 85 106 80 Water Lilly 240 +121 65 72 Dark Brown 216 +111 111 150 Dusted Peri 301 + 65 75 112 Ash 391 + 99 114 115 Trooper 244 + 49 103 143 Medium Blue 104 +255 202 87 Cornsilk 663 + 90 131 132 Pale Green / Blue 385 +214 105 153 Hot Pink 261 + 0 179 130 Medium Green / Blue 638 +251 214 158 New Gold 338 +181 152 114 Beige 628 +110 123 76 Lt. Olive 692 +105 60 62 Sepia 330 +145 139 176 Persian Violet 388 +117 145 134 Olive 362 +106 109 107 Steel Gray 677 + 95 134 150 Dull Blue 539 +255 185 51 Medium Orange 664 +213 239 220 Light Blue 368 +200 84 133 Medium Pink 263 + 92 195 153 Medium Green 630 +237 177 92 Chamois 466 +166 146 120 Almondine 394 +186 192 145 Gravel 619 +244 209 211 Light Pink 705 +133 125 165 Dark Lilac 817 + 59 98 103 Dark Blue / Green 673 +125 135 135 Lead 589 +112 155 174 Delphinium Blue 785 +253 163 57 Orange 432 + 91 188 166 Aqua Green 671 +212 84 131 Medium Pink 259 + 0 144 83 Medium Green 317 +214 129 68 Sunburst 766 +125 103 81 Medium Brown 877 +178 178 143 Eucalyptus 618 +246 215 199 Crystal Pink 707 +198 184 202 Purple Heather 641 + 47 98 106 Dark Blue / Green 689 +137 141 140 Platinum 678 + 86 144 175 Blue 402 +237 184 70 Yellow / Gold 286 + 71 157 152 Light Aqua 687 +175 74 82 Terra Cotta 188 + 92 120 70 Moss Green 722 +255 140 69 Golden Poppy 521 +206 194 166 Pale Gray Green 830 + 71 82 67 Dark Grey / Green 650 +237 184 156 Peach 605 +160 139 172 Light Lilac 642 + 0 115 133 Dark Turquoise Blue 126 +147 142 141 Silver Moon 672 + 0 101 156 Dark Blue 807 +245 235 91 Daffodil 568 + 30 112 95 Green Forest 307 +171 59 61 Terra Cotta 187 + 70 131 69 Dark Green 538 +230 101 64 Orange 519 +233 215 174 Pale Peach 627 + 85 81 55 Dark Green / Grey 755 +240 156 149 Salmon 708 +142 104 147 Purple Haze 647 + 55 84 92 Enchanted Sea 382 +187 187 173 Skylight 585 + 0 128 172 Medium Turquoise Blue 697 +243 243 154 Mustard 566 + 0 126 126 Light Green / Blue 688 +206 64 58 Dark Salmon Pink 925 + 66 123 70 Dark Green 560 +237 116 74 Orange Glow 524 +205 181 132 Light Brown 623 + 88 82 55 Dark Green / Grey 655 +237 145 142 Light Orange 732 +162 129 158 Regal Orchid 507 + 66 106 115 Medium Green / Blue 386 +181 178 155 Gray 674 + 0 142 173 Medium Turquoise Blue 608 +253 218 109 Snapdragon 289 + 44 200 185 Peppermint 693 +235 133 152 Light Orange 614 +153 222 165 Green Ash 636 +233 121 102 Medium Orange 632 +232 230 201 Glass Green 828 + 82 84 62 Dark Grey / Green 238 + 84 81 133 Storm Blue 306 +171 117 140 Valerian 323 + 63 95 86 Dark Jade Green 242 +179 182 172 Highrise 587 + 0 152 189 Blue / Green 176 +231 222 160 Straw Yellow 287 + 96 212 218 Light Blue / Green 269 +235 181 194 Lilac Sachet 575 +207 219 201 Light Blue Green 821 +248 149 58 Orange 520 +240 240 216 Vanilla Ice 100 + 88 96 71 Medium Green / Yellow 235 +137 126 140 Penguin Grey 837 +159 97 110 Mellow Mauve 550 +208 172 121 Tan 404 +144 139 117 Spanish Olive 591 +147 202 204 Pale Aqua Green 684 +245 236 202 Vanilla 856 + 0 198 208 Aquamarine 680 +132 71 87 Dark Brown 399 + 0 114 91 Alpine Teal 534 +242 136 75 Autumn Sunset 523 +233 222 189 Cream 857 +129 126 83 Medium Green / Yellow 237 +114 91 141 Veronica Violet 367 +168 112 119 Nostalgia Rose 586 +192 145 105 Light Bronze 195 +148 148 133 Pale / Grey 592 +157 201 210 Aqua Lake 543 +253 221 99 Star Gold 419 + 0 183 199 Aquamarine 268 +206 69 67 Dark Salmon Pink 266 + 0 125 96 Jade 776 +243 148 99 Cadmium Orange 522 +216 189 154 Pale Peach 555 +138 129 76 Medium Green / Yellow 753 + 94 79 117 Steel 652 +171 129 132 Light Purple 325 +173 120 68 Wicker 624 +123 119 111 Charcoal 436 +116 180 193 Milky Blue 696 +228 188 64 Mustard Yellow 625 + 0 181 198 Aquamarine 267 +200 72 77 Dark Salmon 236 + 0 178 147 Bluestone 737 +245 171 138 Flamingo 606 +212 174 123 Tan 403 +176 157 91 Pale Green / Yellow 754 + 98 86 125 Velvet Morning 309 +179 150 139 Fawn 706 +148 106 75 Medium Brown 395 +102 98 86 Dark Grey 593 + 0 131 174 Medium Turquoise Blue 177 +213 172 45 Medium Yellow 396 + 0 151 168 Dark Blue / Green 271 +219 83 68 Dark Salmon Pink 590 + 58 122 79 Dark Green 557 +176 111 92 Canyon Rose 254 +223 181 120 New Wheat 405 +167 168 129 Sage Green 234 +100 106 154 Slate Blue 305 +183 92 111 Red Violet 214 +148 93 61 Medium Brown 146 + 80 83 81 Granite 247 + 58 122 159 Medium Blue 784 +210 172 45 Medium Yellow 579 + 78 151 142 Sea Blue 319 +173 75 72 Terra Cotta 571 + 49 109 72 Tropical Green 536 +159 91 75 Brown 257 +148 108 67 Medium Brown 343 +181 197 129 Nile 790 +134 130 172 Dark Lilac 816 +161 71 86 Terra Cotta 335 +116 83 68 Medium Brown 345 + 75 81 82 Granite 246 + 81 140 164 Dale Blue 270 +196 150 78 Oak Buff 401 + 14 161 144 Parrot 109 +147 66 64 Dark Rust Red 213 + 31 115 85 Green Forest 535 +151 84 63 Medium Brown 512 +142 105 74 Toast 144 + 93 113 68 Olive Drab 239 +100 119 156 Slate Blue 805 +156 78 94 Medium Pink 334 +103 77 62 Clayrust 145 + 56 57 56 Black 20 diff --git a/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Admelody Polyester.gpl b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Admelody Polyester.gpl new file mode 100644 index 00000000..1bad74a3 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Admelody Polyester.gpl @@ -0,0 +1,324 @@ +GIMP Palette +Name: Ink/Stitch: Admelody Polyester +Columns: 4 +# RGB Value Color Name Number +255 187 193 Powder Pink 6001 +252 151 158 Salmon Rose 6002 +182 66 75 Geranium 6003 +207 58 64 Hibiscus 6004 +223 45 52 Fiery Red 6005 +226 77 103 Calypso Coral 6006 +206 47 82 Teaberry 6007 +155 33 60 Barberry 6008 +167 44 80 Rose Red 6009 +171 49 73 Raspberry 6010 +126 23 42 Crimson 6011 +250 156 195 Candy Pink 6012 +207 91 144 Carmine Rose 6013 +231 106 148 Camellia Rose 6014 +169 38 94 Beetroot Purple 6015 +166 44 102 Fuchsia Purple 6016 +113 33 75 Baton Rouge 6017 +197 61 153 Raspberry Rose 6018 +147 47 119 Fuchsia Red 6019 + 95 38 92 Hollyhock 6020 +254 206 221 Blushing Bride 6021 +255 188 204 Quartz Pink 6022 +255 150 174 Pink Lemonade 6023 +194 109 128 Rapture Rose 6024 +140 70 91 Carmine 6025 + 92 35 56 Beet Red 6026 + 85 33 56 Anemone 6027 +148 116 140 Orchid Haze 6028 + 74 39 70 Phlox 6029 + 82 49 76 Purple Passion 6030 + 60 40 55 Deep Purple 6031 + 52 37 45 Prune Purple 6032 +254 216 214 Pink Dogwood 6033 +233 195 186 Creole Pink 6034 +187 143 145 Pale Mauve 6035 +123 76 72 Chutney 6036 +112 87 90 Mellow Mauve 6037 + 91 60 59 Mahogany 6038 + 82 39 32 Henna 6039 + 59 44 43 Deep Mahogany 6040 +222 106 0 Flame Orange 6041 +230 96 10 Orange Peel 6042 +221 75 13 Vermillion Orange 6043 +212 57 11 Spicy Orange 6044 +173 42 21 Mandarin Red 6045 +171 30 29 High Risk Red 6046 +170 35 36 Flame Scarlet 6047 +151 19 27 Aurora Red 6048 +133 31 34 Formula One 6049 +255 170 161 Apricot Blush 6050 +247 136 118 Peach Amber 6051 +223 107 102 Georgia Peach 6052 +194 78 61 Emberglow 6053 +148 50 45 Paprika 6054 +115 34 33 Scarlet 6055 +102 29 33 Tango Red 6056 +119 33 44 Red Rust 6057 + 96 35 45 Deep Claret 6058 +104 33 53 Red Bud 6059 +111 42 58 Earth Red 6060 +252 203 169 Pale Peach 6061 +250 204 176 Spanish Villa 6062 +249 170 146 Peach Nectar 6063 +235 149 125 Shrimp 6064 +242 116 78 Fresh Salmon 6065 +213 82 37 Sunset 6066 +148 49 32 Red Clay 6067 +119 47 27 Burnt Ochre 6068 +114 52 48 Cinnabar 6069 +185 151 126 Pale Tan 6070 +174 135 102 Strawberry Pink 6071 +102 54 37 Ginger Bread 6072 + 85 43 30 Arabian Spice 6073 + 98 65 51 Tortoise Shell 6074 + 69 47 37 Friar Brown 6075 +255 180 129 Peach Nougat 6076 +174 100 52 Butterum 6077 +175 75 23 Caramel 6078 +144 74 39 Rust 6079 +138 64 38 Amberglow 6080 +223 164 48 Mimosa 6081 +193 133 39 Arrowwood 6082 +186 119 13 Golden Yellow 6083 +214 133 36 Artisa Gold 6084 +245 141 0 Citrus 6085 +249 147 0 Old Gold 6086 +240 153 68 Marigold 6087 +211 119 17 Radiant Yellow 6088 +231 165 90 Flax 6089 +169 102 29 Inca Gold 6090 +124 80 33 Buckthorn Brown 6091 +122 72 34 Glazed Ginger 6092 +110 78 51 Chipmunk 6093 + 91 61 35 Monks Robe 6094 +208 168 94 Golden Tan 6095 +190 164 107 Parsnip 6096 +145 129 84 Willow 6097 +159 132 76 Fall Leaf 6098 +159 112 44 Honey 6099 +152 112 38 Green Sulphur 6100 +250 247 220 Pearly Cream 6101 +234 234 199 Papyrus 6102 +248 236 189 Rutabaga 6103 +202 190 156 Wood Ash 6104 +217 217 176 Glass Green 6105 +249 235 134 Leomonade 6106 +252 216 112 Custard 6107 +249 222 96 Cornsilk 6108 +254 221 78 Aurora 6109 +255 225 0 Empire Yellow 6110 +253 237 60 Blazing Yellow 6111 +255 206 0 Vibrant Yellow 6112 +253 196 56 Goldenrod 6113 +255 195 0 Dandelion 6114 +209 149 13 Freesia 6115 +235 163 13 Lemon Chrome 6116 +255 213 114 Snapdragon 6117 +229 179 29 Sulphur 6118 +157 121 27 Oil Yellow 6119 +156 130 0 Golden Palm 6120 +206 186 226 Orchid Bouquet 6121 +141 117 157 Lavender Herb 6122 +158 113 161 Crocus 6123 +147 101 161 Iris Orchid 6124 +140 106 173 Hyacinth 6125 +103 49 129 Dahlia 6126 +105 38 110 Redish Purple 6127 + 72 24 87 Amaranth Purple 6128 + 94 50 92 Clover 6129 + 75 50 85 Grape Juice 6130 +154 153 199 Pastel Lilac 6131 +121 129 181 Violet Tulip 6132 + 91 75 147 Passion Flower 6133 + 63 41 117 Helliotrope 6134 + 46 38 106 Black Purple 6135 + 48 42 85 Gentian Violet 6136 + 48 42 65 Darkest Purple 6137 +158 140 182 Lupine 6138 +113 111 134 Plum Gray 6139 + 33 33 41 Mysterioso 6140 +172 214 240 Baby Blue 6141 +151 192 228 Powder Blue 6142 +148 197 234 Angel Falls 6143 +115 172 208 Dusk Blue 6144 +124 175 222 Placid Blue 6145 + 64 126 187 Azure Blue 6146 + 38 83 146 Turkish Sea 6147 + 18 56 106 True Blue 6148 +101 137 202 Grapemist 6149 + 84 107 174 Baja blue 6150 + 64 73 149 Blue Iris 6151 + 33 42 114 Clematis blue 6152 + 32 59 120 Dazzling Blue 6153 + 28 46 100 Bright Navy 6154 + 27 46 84 Blueprint 6155 + 35 44 80 Mazarine Blue 6156 + 27 47 78 True navy 6157 + 29 47 64 Insignia Blue 6158 + 29 40 50 Mood Indigo 6159 + 29 35 46 Eclipse Blue 6160 + 96 190 222 Light Turquoise 6161 + 0 134 186 Dresdon Blue 6162 + 0 95 150 Blue Aster 6163 + 0 84 143 Victoria Blue 6164 + 31 97 157 Campanula 6165 + 7 66 125 Strong Blue 6166 + 20 49 80 Moonlight Blue 6167 +134 166 181 Winter Sky 6168 +125 169 199 Blue Bell 6169 + 89 131 167 Coronet Blue 6170 + 65 129 164 Niagra 6171 + 55 105 139 Cendre Blue 6172 + 47 116 139 Storm Blue 6173 + 68 100 115 Citadel 6174 + 24 75 94 Ink blue 6175 + 37 77 114 Federal Blue 6176 + 24 70 99 Stellar Blue 6177 + 35 63 85 Dark Denim 6178 + 26 54 65 Indian Teal 6179 + 27 43 56 Black Iris 6180 +209 200 177 Birch 6181 +180 167 145 Feather Gray 6182 +248 216 160 Apricot Gelao 6183 +207 181 142 Almond Buff 6184 +174 144 99 Lark 6185 +163 132 95 Tan 6186 +142 122 95 Doe 6187 +117 88 42 Dried Tobacco 6188 +249 207 159 Apricot Illusion 6189 +213 179 143 Sheepskin 6190 +162 117 72 Biscuit 6191 +134 126 112 Simply Taupe 6192 +138 117 102 Natural 6193 +103 84 72 Partridge 6194 +102 92 75 Dark Sand 6195 + 84 76 65 Chocolate Chip 6196 + 86 76 63 Canteen 6197 +122 106 85 Mink 6198 + 92 75 48 Kangaroo 6199 + 87 73 54 Sepia 6200 +197 205 230 Thistle 6201 +106 106 110 Gull 6202 +101 106 115 Excalibur 6203 + 71 71 81 Graystone 6204 + 97 102 108 Shark 6205 +134 141 143 Griffin 6206 +158 171 177 Pearl Blue 6207 +148 160 166 Quarry 6208 +157 174 189 Celestial Blue 6209 +116 143 163 Blue Shadow 6210 + 71 101 124 Captains Blue 6211 + 74 92 113 Ensign Blue 6212 + 59 75 96 Estate Blue 6213 +102 116 129 Monument 6214 + 62 76 82 Stargazar 6215 + 35 43 46 Moonless Night 6216 +107 113 110 Opal Gray 6217 +104 107 104 Charcoal Gray 6218 + 93 99 98 Gargoyle 6219 + 88 92 92 Plum Kitten 6220 +198 195 194 Wind Chime 6221 +184 176 170 Silver Gray 6222 +152 129 121 Stucco 6223 + 81 63 55 Fudgesickle 6224 + 52 46 42 Chocolate Brown 6225 + 47 47 47 Shale 6226 +229 231 225 White Sand 6227 +198 208 208 Silver Birch 6228 +175 182 178 Gray violet 6229 +179 189 189 High Rise 6230 +140 153 151 Limestone 6231 +106 107 103 Cloudburst 6232 +166 163 145 Cement 6233 +144 141 125 Spray Green 6234 +138 134 117 Seneca Rock 6235 + 94 87 69 Timber Wolf 6236 + 62 58 36 Olive Drab 6237 + 85 85 76 Brindle 6238 + 57 61 53 Beluga 6239 + 57 59 58 Dark gull Gray 6240 +250 252 240 Egret 6241 +249 253 251 Snow White 6242 +240 245 255 Bright White 6243 +226 235 255 Blanc de Blanc 6244 +222 230 255 Cloud Dancer 6245 + 29 34 31 Caviar 6246 +186 244 123 Jasmine Green 6247 +103 145 75 Grass Green 6248 +116 166 77 Bud Green 6249 + 67 106 51 Online Lime 6250 +213 217 56 Sulphur Spring 6251 +123 157 30 Parrot Green 6252 + 79 105 29 Peridot 6253 + 75 156 33 Island Green 6254 + 52 152 52 Classic Green 6255 + 25 139 57 Fern Green 6256 + 58 119 46 Vibrant Green 6257 + 0 126 56 Bright Green 6258 + 0 121 66 Jelly Bean 6259 + 1 81 41 Verdant Green 6260 +162 207 202 Eggshell Blue 6261 +125 207 208 Blue Radiance 6262 +140 212 242 Aquamarine 6263 + 66 179 210 Aquarius 6264 + 61 172 186 Blue Atoll 6265 + 35 150 175 Horizon Blue 6266 + 0 139 169 Blue Danube 6267 + 0 110 133 Blue Jewel 6268 + 0 94 115 Lyons Blue 6269 +120 208 189 Pool Blue 6270 + 61 167 159 Blue Turquoise 6271 + 40 166 153 Ceramic 6272 + 0 143 142 Tile Blue 6273 + 26 155 159 Bluebird 6274 + 0 104 109 Enamel Blue 6275 + 0 121 125 Lake Blue 6276 + 0 131 120 Viridian Green 6277 + 5 80 90 Ocean Depths 6278 + 12 64 66 Deep Teal 6279 + 29 59 55 June Bug 6280 +156 188 154 Sprucestone 6281 +148 197 159 Hemlock 6282 +122 205 140 Spring Bouquet 6283 +120 206 163 Cabbage 6284 + 81 174 146 Marine Green 6285 + 4 145 106 Simply Green 6286 + 30 161 98 Deep Mint 6287 + 0 112 70 Bright Jade 6288 + 0 88 57 Pepper Green 6289 + 13 82 50 Darkest Jade 6290 + 56 112 111 Green-Blue Slate 6291 + 36 116 96 Greenlake 6292 + 0 128 105 Cadmium Green 6293 + 0 91 70 Ultramarine Green 6294 + 0 84 69 Parasailing 6295 + 42 75 48 Fairway 6296 + 47 78 64 Fir 6297 + 35 64 41 Foliage Green 6298 + 21 59 46 Alpine Green 6299 + 18 66 63 Shaded Spruce 6300 +172 190 125 Lettuce Green 6301 +145 163 101 Herbal Garden 6302 +255 251 191 Pastel Yellow 6303 +204 195 123 Shadow Green 6304 +180 162 72 Golden Green 6305 +142 121 41 Golden Olive 6306 +103 87 28 Ecru Olive 6307 +131 124 73 Moss 6308 +133 125 54 Oasis 6309 +111 99 33 Woodbine 6310 + 80 83 32 Calla Green 6311 + 79 76 30 Olive 6312 + 63 63 40 Cypress 6313 + 68 66 31 Avocado 6314 + 99 101 76 Olive Branch 6315 + 98 114 98 Green Bay 6316 + 62 83 61 Elm Green 6317 + 46 60 37 Bronze Green 6318 + 52 64 52 Pineneedle 6319 + 50 54 39 Kombu Green 6320 diff --git a/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Admelody Rayon.gpl b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Admelody Rayon.gpl new file mode 100644 index 00000000..d80ec7fb --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Admelody Rayon.gpl @@ -0,0 +1,424 @@ +GIMP Palette +Name: Ink/Stitch: Admelody Rayon +Columns: 4 +# RGB Value Color Name Number +247 242 222 Pearly Cream 101 +231 213 195 Peach Cloud 102 +246 215 202 Palest Peach 103 +225 180 166 Sandy Peach 104 +248 195 179 Light Salmon 105 +234 156 143 Salmon 106 +231 125 109 Deep Coral 107 +229 126 106 Coral Rose 108 +190 80 70 Orange 109 +150 45 47 Rust 110 +225 80 15 Bright Orange 111 +241 110 15 Pumpkin Orange 112 +233 116 79 Copper 113 +217 101 55 Sunset 114 +193 85 45 Golden Glory 115 +250 148 31 Solell 116 +249 135 18 Wild Carrot 117 +244 229 143 Pale Lemon 118 +241 216 130 Saffron 119 +250 210 94 Snapdragon 120 +254 222 124 Popcorn 121 +251 220 114 Cornsilk 122 +253 200 78 Buttered Popcorn 123 +255 192 12 Orangeade 124 +255 185 24 Dark Orangeade 125 +239 178 93 Lt. Golden Tan 126 +235 161 64 Persimmon 127 +215 158 70 Gold 128 +202 137 69 Sunburst 129 +239 147 68 Marigold 130 +249 250 221 Yellow Cream 131 +250 244 189 Mellow Yellow 132 +237 227 27 Lime 133 +249 237 122 Light Yellow 134 +248 230 85 Soft Yellow 135 +240 231 80 Yellow 136 +251 226 20 Yellow Finch 137 +248 204 95 Mimosa 138 +248 216 23 Dark Lemon 139 +253 203 0 Daffodil 140 +249 227 233 Powder Pink 141 +234 183 213 Sugar Pink 142 +224 183 212 Delicate Mauve 143 +213 172 206 Palest Pink 144 +185 139 171 Lt. Red Violet 145 +185 116 165 Rosie Pink 146 +174 85 148 Clematis 147 +163 35 99 Rose Splash 148 +157 67 116 Wild Rose 149 +116 33 74 Dark Wild Rose 150 +127 38 83 Raspberry 151 +104 30 64 Bilberry 152 + 99 28 54 Deep Bilberry 153 +101 31 45 Claret 154 + 94 30 57 Burgundy 155 + 84 31 47 Maroon 156 + 92 27 51 Plum Wine 157 + 81 28 35 Rich Burgundy 158 + 73 37 51 Eggplant 159 + 50 30 33 Black Wine 160 +238 236 219 Eggshell White 161 +241 218 193 Palest Fawn 162 +224 214 190 Creamy White 163 +195 180 155 Coffee Cream 164 +200 174 163 Victorian Rose 165 +221 179 178 Pink Cloud 166 +197 152 142 Bronze 167 +202 147 150 Blush 168 +156 119 119 Pale Mauve 169 +150 101 105 Pale Wine 170 +115 64 65 Mocha Rose 171 +103 47 46 Rusty Plum 172 + 89 47 41 Plum 173 +220 154 191 Petal Pink 174 +211 123 170 Rose Pink 175 +192 128 159 Sunset Pink 176 +186 112 139 Desert Rose 177 +174 71 106 Dusty Rose 178 +209 99 158 Pink Rose 179 +195 65 129 Magenta 180 +214 75 108 Fiesta Pink 181 +203 54 74 Scarlet 182 +180 29 30 Ruby 183 +191 41 32 True Red 184 +187 39 31 Red 185 +195 50 26 Firecracker 186 +172 29 40 Cherry Red 187 +149 19 32 Baked Cherry 188 +148 19 31 Carmine 189 +114 40 41 Red Wine 190 +120 33 32 Wine 191 +162 59 77 Antique Red 192 +157 35 69 Brandy 193 +165 29 55 Crimson 194 +151 26 51 Chili Pepper 195 +138 22 41 Grenadine 196 +142 24 36 Brick 197 +123 32 40 Bronze Red 198 + 99 28 36 Dark Rust 199 + 95 32 34 Cranberry 200 +219 118 176 Passion Pink 201 +195 65 126 Bright Pink 202 +193 63 127 Madcap Pink 203 +203 72 129 Lipstick Pink 204 +206 70 115 Pink Rapture 205 +189 34 92 Cerise 206 +162 34 97 Fuchsia 207 +177 53 96 Pink Lady 208 +171 47 93 Light Fuchsia 209 +189 40 84 Hot Pink 210 +135 22 53 Blood Red 211 +125 21 45 Old Burgundy 212 +232 137 168 Pink Blush 213 +225 119 150 Pink Mist 214 +216 104 127 Light Cerise 215 +214 103 146 Pink 216 +205 77 119 Pink Aster 217 +196 68 118 Pink Carnation 218 +216 118 127 Dusty Pink 219 +193 59 90 Deep Pink 220 +244 246 223 White Whisper 221 +246 248 240 Palest Ivory 222 +243 246 238 Pale White 223 +213 226 255 Bright White 224 +239 244 255 Dove White 225 +226 233 255 White 226 + 29 34 34 Black 227 +195 204 193 Grey Mist 228 +182 204 198 Blue Foam 229 +125 145 144 Green Shadow 230 +175 205 178 Dusty Green 231 +171 204 190 Seafoam Grey 232 +138 162 143 Sea Green 233 +137 160 142 Slate Grey 234 + 87 115 95 Grecian Green 235 + 89 118 96 Slate Green 236 + 67 93 72 Teal 237 + 43 67 53 Forest Green 238 + 44 77 59 Pine Green 239 + 39 65 48 Spruce Green 240 +166 190 176 Soft Pale Green 241 +168 232 202 Bright Mint 242 +138 198 181 Wintermint 243 +170 218 198 Mint 244 +139 211 196 Peppermint 245 +104 192 174 Aqua 246 + 51 148 129 Lido 247 + 0 158 140 Blue Turquoise 248 + 21 164 140 Aztec Blue 249 + 0 142 123 Regend Green 250 + 0 110 89 Tropical Green 251 + 78 174 139 Lt. Sea Green 252 + 0 120 88 Dk. Sea Green 253 + 0 138 81 Emerald 254 + 29 125 67 Green 255 + 23 115 67 Festive Green 256 + 10 126 96 Jade 257 + 58 142 76 Light Green 258 + 78 134 63 Northern Pine 259 + 88 146 79 Clear Green 260 +188 218 141 Lt. Celery 261 +195 231 161 After Dinner Mint 262 +200 234 191 Palest Mint 263 +176 229 187 Palest Green 264 +141 196 152 Light Jade 265 +116 185 141 Cool Mint 266 +113 179 157 Marshland Green 267 +126 204 177 Tropical Lagoon 268 +140 184 110 Dark Celery 269 +101 155 87 Spring Green 270 +156 180 73 Presh Green 271 + 98 137 48 Meadow Green 272 + 96 138 52 Sweet Pea 273 + 93 178 95 Lt. Blue Jade 274 + 66 175 88 Shamrock 275 + 85 126 69 Foilage Green 276 + 48 112 74 Leaf Green 277 + 63 142 99 Cloudy Jade 278 + 33 135 85 Bangkok Green 279 + 36 126 91 Med. Jade 280 +238 245 236 Angel Blue 281 +216 243 246 Whispering Sky 282 +205 234 237 Pale Blue 283 +209 230 226 Skylight Blue 284 +203 226 221 Iceburg Blue 285 +182 237 240 Palest Aqua 286 +159 216 218 Med. Aqua 287 +141 218 227 Pacific Mist 288 + 64 181 198 Capri 289 + 31 182 216 Turquoise 290 + 0 139 170 Kingfisher 291 + 0 125 171 Dk. Turquoise 292 + 0 136 181 Med. Turquoise 293 + 48 129 139 Cyan 294 + 50 130 139 Lagoon 295 + 0 85 103 Deep Atlantic 296 + 51 94 85 Steel Blue 297 + 21 79 83 Dk. Steel Blue 298 + 25 59 70 Ocean Depths 299 + 22 56 57 Rolled Steel 300 +231 230 191 Gream 301 +169 183 95 Green Apple 302 +146 155 79 Pistachio 303 +178 176 70 Chartreuse 304 +162 162 45 Sumatra Green 305 +123 120 41 Avacodo 306 +108 107 53 Dk. Avacodo 307 + 90 89 65 Camouflage Green 308 +178 197 166 Cream de Menthe 309 +138 161 116 Smokey Sage 310 +111 129 86 Light Olive 311 +114 133 94 Bronze Olive Light 312 + 81 92 52 Dk. Leaf Green 313 + 61 81 48 Olive 314 + 68 79 60 Eucalyptus 315 + 47 53 37 Midnight Green 316 + 60 76 57 Dk. Eucalyptus 317 + 79 134 97 Sage 318 + 44 103 71 Rainforest Green 319 + 31 89 52 Dark Green 320 +215 196 93 Goldenrod 321 +184 157 70 Tawny Gold 322 +164 131 50 Wheat Brown 323 +124 99 45 Khaki 324 +134 100 54 Cargo 325 +126 100 72 Natural Brown 326 +109 84 60 Dark Oak 327 + 77 58 45 Traditional Brown 328 + 60 49 42 Chocolate Cake 329 + 91 86 81 Raven 330 +103 81 79 Coffee Bean 331 +101 66 63 Mahogony 332 +154 86 46 TerraCotta 333 +174 71 33 Russet 334 +172 146 95 Prairie Wheat 335 +183 147 99 Sunkissed 336 +190 142 57 Bright Gold 337 +214 160 88 Golden Lights 338 +215 146 62 Burnished Gold 339 +170 117 66 Auburn 340 +191 189 159 Gravel 341 +182 161 118 Med. Taupe 342 +216 188 148 Beige 343 +207 186 158 Ash Blonde 344 +155 138 106 Taupe 345 +128 97 65 Brownstone 346 +158 116 92 Brazil Brown 347 +122 87 63 Tan 348 +166 120 80 Light Brown 349 +154 101 55 Golden Brown 350 +156 103 62 Cinnamon 351 +103 73 60 Old Maghonoy 352 + 84 57 46 Med. Brown 353 + 85 52 40 Brown 354 + 59 35 32 Fudge Brownie 355 + 84 58 44 Walnut 356 + 90 66 53 Walnut Stain 357 + 81 55 42 Sepia 358 + 68 49 45 Dark Chocolate 359 + 62 48 41 Dark Pecan 360 +205 223 234 Silver Lining 361 +186 203 216 Sterling Blue 362 +212 225 229 Misty Blue 363 +148 154 156 Cadet Grey 364 +147 158 168 Med. Grey 365 +157 173 182 Sleet Grey 366 +188 201 209 Palest Grey 367 +162 176 183 Med. Silver 368 +148 165 183 Lt. Smokey Blue 369 +107 133 154 Silver Blue 370 +115 135 154 Dk. Pewter 371 + 92 120 142 Country Blue 372 + 54 90 118 Wedgewood Blue 373 + 76 95 117 Dk. Slate 374 + 51 66 78 Slate 375 + 58 79 92 Nightfall Blue 376 +107 129 133 Pewter 377 + 72 92 93 Heritage Blue 378 + 61 77 75 Dk. Steel 379 + 45 69 78 Seal 380 +210 224 239 Pale Baby Blue 381 +199 208 210 Platinum 382 +173 177 187 Grey Sky 383 +174 180 189 Pale Grey 384 +169 181 192 Light Pewter 385 +164 180 188 Blissful Blue 386 +142 153 162 French Grey Blue 387 +149 157 160 Med. Granite 388 +161 163 165 Med. Pewter 389 +183 185 185 Silver Shadow 390 +172 178 175 Grey 391 +144 141 143 Pigeon Grey 392 +129 131 130 Polished Pewter 393 +117 121 132 Granite 394 +132 135 133 Burnished Pewter 395 +107 114 112 Dk Granite 396 +122 124 126 Silver Moon 397 +107 116 128 Tarnished Silver 398 + 86 92 99 Steel 399 + 63 72 78 Midnight 400 +201 189 176 Pale Mink 401 +171 159 146 Heirloom Beige 402 +178 165 159 Heirloom Rose / Beige 403 +140 131 124 Med. Mink 404 +147 131 122 Mink 405 +108 92 86 Dark Mink 406 + 55 48 39 Dk. Black Brown 407 + 36 37 34 Carbon Black 408 +207 212 218 Palest Silver 409 +198 201 204 Pale Silver 410 +179 180 180 Amish Grey 411 +198 200 208 Misted Wisteria 412 +165 159 167 Silver Fox 413 +106 105 118 Plum Grey 414 + 97 94 109 Dark Grey 415 + 55 54 63 Coal Black 416 + 82 80 83 Cool Grey 417 + 77 80 92 Darkest Pewter 418 + 55 62 73 Raging Blue 419 + 45 51 52 Licorice Black 420 +201 186 164 Palest Sand 421 +162 156 140 Sandstone 422 +172 158 129 Mudstone 423 +121 108 83 Mushroom 424 +127 115 95 Birch Bark 425 +108 87 63 Bark 426 +180 181 166 Khaki Beige 427 +158 164 146 Shale Green 428 +142 141 127 Mud Brown 429 +128 137 128 Hammered Iron 430 +121 120 102 Willow 431 +133 139 124 Weathered Driftwood 432 + 82 77 65 Mississippi Mud 433 + 57 65 68 Dk. Night Blue 434 + 55 164 211 Med. Peacock 435 + 0 131 181 Peacock 436 + 0 105 165 Dk. Peacock 437 + 28 106 156 Petrel Blue 438 + 12 99 146 Dk. Dutch Blue 439 + 0 87 108 Dk. Victorian Teal Blue 440 +183 212 224 Palest Blue 441 +174 202 215 Winter Blue 442 +185 218 234 Palest Bright Blue 443 +154 188 216 Light Blue 444 +144 179 201 Colonial Blue 445 +132 174 211 Powder Blue 446 +117 161 198 Darker Med. Blue 447 + 71 116 147 Slate Blue 448 + 50 90 116 Copenhagen Blue 449 + 59 96 121 Storm Blue 450 + 41 88 125 Darkest Aqua 451 + 20 78 129 Royal Blue 452 +111 162 217 Mid Blue 453 + 94 141 182 Sky Blue 454 + 38 99 156 Imperial Blue 455 + 26 71 125 Dark Blue 456 + 19 86 162 Bright Blue 457 + 10 73 149 Dk. Bright Blue 458 + 29 76 152 Brightest Dk. Blue 459 + 33 66 120 Dk. Aqua Blue 460 +172 192 227 Pale Periwinkle 461 +135 169 218 Periwinkle 462 +101 142 203 Med. Periwinkle 463 + 68 121 183 Dk. Periwinkle 464 + 53 92 153 Blueberry 465 + 25 43 110 Dk. Royal Blue 466 + 37 52 108 Royalty Blue 467 + 38 52 97 Navy Blue 468 + 31 39 65 Dark Navy Blue 469 + 29 38 59 Darkest Navy Blue 470 + 34 50 66 Historical Blue 471 + 31 44 64 Blazer Blue 472 + 32 45 59 Ebony Blue 473 + 28 43 51 Dk. Ebony Blue 474 + 35 45 62 Carbon Blue 475 + 31 37 44 Corrections Blue 476 + 27 40 49 Wrought Iron 477 + 36 40 43 Blackest Navy 478 + 37 44 55 Prussian Blue 479 + 29 35 40 Dk. Prussian Blue 480 +207 203 226 Pastel Lavender 481 +186 180 205 Palest Mauve 482 +196 186 218 Pale Lilac 483 +182 165 197 Lt. Purple 484 +170 157 203 Pastel Violet 485 +155 146 179 Med. Blue Lavender 486 +168 173 208 Lt. Blue Lavender 487 +157 137 173 Soft Violet 488 +139 115 153 Smokey Grape 489 +129 106 148 Lilac 490 +124 102 167 Amethyst 491 + 86 61 113 Imperial Purple 492 +123 54 121 Purple 493 +162 113 157 Lavender 494 +136 91 159 Lt. Grape 495 +120 85 154 Violet 496 + 89 57 125 Dark Violet 497 + 66 45 106 Deep Violet 498 + 58 49 118 Dk. Plum 499 + 54 48 116 Cassis 500 +216 219 234 Touch of Lavender 501 +179 182 221 Wisteria 502 +112 111 174 Purple Iris 503 + 86 83 154 Med. Purple 504 + 72 55 79 Plum Escape 505 + 91 84 118 Dk. Smokey Grape 506 + 55 54 95 Royal Purple 507 + 46 50 85 Dk. Navy Purple 508 + 37 39 100 Darkest Blue Violet 509 + 78 95 163 Blue Violet 510 + 56 72 130 Med. Blue Violet 511 + 52 72 137 Dk. Blue Purple 512 + 44 69 134 Ultra Blue 513 + 74 85 122 Denim 514 +117 141 195 Blue Lavender 515 +143 167 201 Cape Cod Blue 516 +126 150 197 Sugared Lilac 517 +109 128 174 Blueberry Cream 518 +131 129 163 Mauve Thistle 519 +133 138 198 Clear Lt. Purple 520 diff --git a/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Anchor.gpl b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Anchor.gpl new file mode 100644 index 00000000..96a88b2f --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Anchor.gpl @@ -0,0 +1,427 @@ +GIMP Palette +Name: Ink/Stitch: Anchor +Columns: 4 +# RGB Value Color Name Number +255 255 255 Snow White 1 +255 255 255 White 2 +255 196 184 Salmon Very Light 6 +255 198 140 Salmon Light 8 +255 157 144 Salmon Medium Light 9 +255 128 135 Salmon Medium 10 +237 69 90 Salmon Medium Dark 11 +219 24 85 Salmon Dark 13 +153 92 48 Burgundy Very Dark 22 +255 234 235 Carnation Ultra Light 23 +255 177 174 Carnation Very Light 24 +255 211 212 Carnation Light 25 +255 140 191 Carnation Medium Light 26 +255 194 191 Carnation Medium 27 +243 149 157 Carmine Rose Medium Light 41 +204 51 119 Carnation Medium Dark 28 +230 0 102 Carnation Dark 29 +254 212 219 Blush Light 31 +255 128 109 Blush Medium 33 +255 85 91 Blush Dark 35 +255 157 150 Blossem Pink Light 36 +219 36 79 Blossem Pink Dark 38 +255 109 115 Carmine Rose Light 40 +214 43 91 Carmine Rose Medium 42 +166 0 91 Carmine Rose Medium Dark 43 +162 0 88 Carmine Rose Dark 45 +213 39 86 Crimson Red 46 +231 18 97 Carmine Red 47 +255 234 235 China Rose Very Light 48 +255 213 216 China Rose Light 49 +255 204 208 China Rose Medium 50 +233 109 115 China Rose Medium Dark 52 +255 109 115 Rose Dark China 54 +255 189 202 Beauty Rose Light 55 +222 57 105 Beauty Rose Medium 57 +201 79 91 China Rose 59 +250 151 144 Magenta Light 60 +255 115 140 Magenta Medium 62 +231 84 122 Magenta Dark 63 +201 79 91 Rose Very Dark Antique 65 +250 151 144 Raspberry Light 66 +203 78 97 Raspberry Medium Light 68 +230 0 102 Raspberry Very Dark 72 +255 233 233 Antique Rose Very Light 73 +255 214 209 Antique Rose Light 74 +203 78 97 Antique Rose Medium 76 +255 154 148 Antique Rose Medium Light 75 +203 78 97 Antique Rose Medium Dark 77 +171 22 95 Antique Rose Dark 78 +255 214 229 Orchid Light 85 +247 152 182 Orchid Medium Light 86 +231 79 134 Orchid Medium 87 +219 55 121 Orchid Medium Dark 88 +171 22 95 Orchid Dark 89 +204 163 204 Plum Light 90 +160 100 146 Plum Medium 92 +171 22 95 Plum Dark 94 +255 214 229 Violet Very Light 95 +247 152 182 Violet Light 96 +243 206 225 Violet Medium Light 97 +160 100 146 Violet Medium 98 +146 85 130 Violet 99 + 61 0 103 Violet Medium Dark 100 +109 18 97 Violet Dark 101 +109 18 97 Violet Very Dark 102 +243 218 228 Very Light Plum 103 +236 207 225 Lavender Light 108 +206 148 186 Lavender Medium Light 109 +148 91 128 Lavender Medium 110 +145 180 197 Thistle Light 117 +162 121 164 Thistle Medium 118 +127 84 130 Thistle Dark 119 +230 236 232 Bleuberry Light 120 +187 208 218 Bleuberry Medium Light 121 +119 89 179 Medium Bleuberry 122 + 71 55 93 Bleuberry Dark 123 + 0 0 73 Indigo 127 +247 246 248 Cobalt Bleu Light 128 +202 226 229 Cobalt Bleu 129 +190 193 205 Cobalt Bleu Medium Light 130 +103 115 141 Cobalt Bleu Medium 131 + 30 66 99 Cobalt Bleu Medium Dark 132 + 30 58 95 Cobalt Bleu Dark 133 + 30 54 85 Cobalt Bleu Very Dark 134 +132 156 182 Wedgewood Light 136 +103 115 141 Wedgewood Medium 137 + 30 66 99 Wedgewood Dark 139 +158 176 206 Copen Bleu Light 140 +103 115 141 Copen Bleu Medium 142 + 30 66 99 Copen Bleu Dark 143 +233 238 233 Delft Bleu Very Light 144 +132 156 182 Light Delft Bleu 145 +103 115 141 Delft Bleu 146 + 30 66 99 Delft Bleu Medium Light 147 + 0 79 97 Delft Bleu Medium 148 + 36 73 103 Delft Bleu Medium Dark 149 + 36 73 103 Delft Bleu Dark 150 + 0 0 49 Delft Bleu Very Dark 152 +240 247 239 Sapphire Very Light 158 +213 231 232 Sapphire Medium Light 160 +175 195 205 Sapphire Medium 161 + 16 127 135 Sapphire Medium Dark 162 + 71 97 116 Sapphire Dark 164 + 0 102 179 Sapphire Dark 164 + 24 101 111 Surf Bleu Very Light 167 +128 167 160 Surf Bleu Light 168 + 30 130 133 Surf Bleu Medium 169 + 24 128 134 Surf Bleu Dark 170 +187 208 218 Ocean Bleu Light 175 +147 139 164 Ocean Bleu 176 +128 96 191 Ocean Bleu Medium 177 + 71 55 93 Ocean Bleu Dark 178 +208 224 210 Sea Green Light 185 +171 206 177 Sea Green Medium Light 186 + 0 160 130 Sea Green Medium 187 + 83 166 130 Sea Green Medium Dark 188 + 14 140 86 Sea Green Dark 189 +170 213 164 Mint Green Light 203 +153 188 149 Mint Green Medium 204 + 49 128 97 Mint Green Dark 205 +214 230 204 Spruce Light 206 +182 212 180 Spruce Medium Light 208 +115 158 115 Spruce 209 + 97 134 97 Spruce Medium 210 + 59 96 76 Spruce Dark 212 +206 221 193 Juniper Very Light 213 +181 206 162 Juniper Light 214 +138 153 120 Juniper Medium Light 215 + 97 134 97 Juniper Medium 216 + 95 112 91 Juniper Medium Dark 217 + 85 95 82 Juniper Dark 218 + 79 86 76 Juniper Dark 218 + 79 121 66 Emerald Light 225 + 79 121 66 Emerald Medium Light 226 + 79 108 69 Emerald Medium 227 + 0 96 47 Emerald Medium Dark 228 + 48 116 91 Emerald Dark 229 +235 207 185 Rose Grey Light 231 +210 185 175 Rose Grey Medium 232 +179 151 143 Rose Grey 233 +232 232 229 Charcoal Grey Light 234 +167 139 136 Charcoal Grey Medium 235 + 81 76 83 Charcoal Grey 236 +121 144 76 Medium Spring Dark Grey 238 + 79 121 66 Spring Grey Dark 239 +206 213 176 Grass Green Light 240 +161 196 125 Grass Green 241 +151 183 110 Grass Green Medium Light 242 +134 145 110 Grass Green Medium 243 + 83 97 73 Grass Green Medium Dark 244 + 83 97 73 Grass Green Dark 245 + 58 82 65 Grass Green Very Dark 246 +240 255 200 Parrot Green Very Light 253 +238 255 182 Parrot Green Light 254 +185 200 102 Parrot Green Medium Light 255 +143 163 89 Parrot Green Medium 256 + 98 119 57 Parrot Green Medium Dark 257 + 78 95 57 Parrot Green Dark 258 +231 249 203 Loden Green Very Light 259 +161 167 135 Loden Green Light 260 +187 179 148 Loden Green Medium Light 261 +137 141 114 Loden Green Medium 262 + 96 95 84 Loden Green Dark 263 +234 249 194 Avocado Very Light 264 +225 249 190 Avocado Light 265 +176 187 140 Light Avocado Medium 266 +116 114 92 Avocado Medium 267 + 73 86 55 Avocado Medium Dark 268 + 69 69 49 Avocado Dark 269 +248 247 221 Soft Carnation 271 +113 113 113 Stone Grey Dark 273 +225 224 216 Bleu Mist Light 274 +246 234 219 Citrus Ultra Light 275 +239 214 188 Pearl 276 +136 95 18 Desert Very Dark 277 +206 244 7 Olive Green Light 278 +186 196 5 Olive Green Medium Light 279 +158 158 7 Olive Green Medium 280 +112 112 20 Olive Green Dark 281 +255 255 190 Canary Yellow Light 288 +255 231 109 Canary Yellow Medium Light 289 +255 176 0 Canary Yellow Medium 290 +255 176 0 Canary Yellow Dark 291 +255 255 220 Jonquil Very Light 292 +255 235 168 Jonquil Light 293 +255 224 128 Jonquil Medium Light 295 +255 194 67 Jonquil Medium 297 +255 146 0 Jonquil Dark 298 +255 240 197 Citrus Light 300 +255 239 170 Citrus 301 +255 230 146 Citrus Medium Light 302 +255 183 85 Citrus Medium 303 +255 142 4 Citrus Dark 304 +255 200 124 Topaz Light 305 +225 146 85 Topaz Medium Light 306 +255 242 128 Topaz Medium Light 306 +204 119 66 Topaz Medium 307 +181 107 56 Topaz Medium Dark 308 +181 98 46 Topaz Dark 309 +178 103 70 Topaz Very Dark 310 +255 204 128 Tangerine Very Light 311 +255 181 105 Tangerine Light 313 +255 142 4 Tangerine Medium Light 314 +255 106 0 Tangerine Dark 316 +255 146 109 Apricot Light 323 +200 36 43 Apricot Dark 326 +255 172 162 Melon Light 328 +255 123 103 Melon Medium 329 +255 91 0 Melon Dark Medium 330 +244 73 0 Blaze Light 332 +206 43 0 Blaze Medium Light 333 +255 0 0 Blaze Medium 334 +255 0 0 Blaze Dark 335 +255 172 162 Terra Cotta Light 336 +237 122 100 Terra Cotta Medium Light 337 +237 122 100 Terra Cotta 338 +197 94 88 Terra Cotta Medium 339 +180 75 82 Terra Cotta Medium Dark 340 +168 68 76 Terra Cotta Dark 341 +243 218 228 Lilac Light 342 +194 209 206 Slate Bleu 343 +194 101 76 Bark Light 347 +209 102 84 Bark Medium 349 +157 60 39 Bark Medium Dark 351 +143 57 38 Bark Dark 352 +158 67 18 Mocha Medium 355 +151 84 20 Mocha Dark 357 +151 84 20 Coffee 358 +123 71 20 Coffee Medium 359 +118 55 19 Coffee Dark 360 +244 195 139 Nutmeg Light 361 +238 171 121 Nutmeg Medium Light 362 +191 157 105 Dessert Medium 373 +140 91 43 Dessert Medium Dark 374 +153 92 48 Dessert Dark 375 +217 174 130 Fawn Light 376 +166 129 91 Fawn Medium 378 +128 85 30 Fawn Dark 379 + 94 56 27 Fudge 380 + 99 39 16 Fudge Medium 381 + 83 37 16 Fudge Dark 382 +255 250 204 Citrus Very Light 386 +255 236 191 Ecru 387 +219 194 164 Ecru Medium 388 +242 234 219 Linen Light 390 +239 219 190 Linen 391 +231 207 178 Linen Medium 392 +140 117 109 Linen Dark 393 +210 208 205 Grey Light 397 +221 221 218 Grey 398 +197 198 190 Grey Medium Light 399 +167 139 136 Grey Medium 400 + 85 85 89 Grey Dark 401 + 0 0 0 Black 403 + 0 123 134 Electric Bleu Dark 410 +170 222 225 Electric Bleu 433 + 85 73 0 Forest Dark 681 + 43 57 41 Turf Green 683 +255 220 193 Flesh Light 778 + 92 110 108 Bleu Mist Medium Dark 779 +230 191 136 Sierra Very Light 830 +219 176 122 Sierra Light 831 +203 152 103 Sierra Medium 832 +204 196 129 Fern Green Light 842 +171 170 89 Fern Green 843 +150 140 40 Fern Green Medium 844 +132 119 17 Fern Green Medium Dark 845 +123 119 17 Fern Green Dark 846 +233 233 223 Bleu Mist Very Light 847 +200 198 194 Bleu Mist 848 +200 198 194 Bleu Mist Medium Light 849 + 96 116 115 Bleu Mist Medium 850 + 86 99 100 Bleu Mist Dark 851 +255 236 211 Turf Very Light 852 +203 162 107 Turf Light 853 +196 155 100 Turf Medium Light 854 +184 138 87 Turf Medium 855 +184 138 87 Turf Dark 856 +189 197 151 Laurel Green Light 858 +172 183 142 Laurel Green 859 +159 169 142 Laurel Green Medium Light 860 + 67 63 47 Laurel Green Medium 861 + 55 73 18 Laurel Green Dark 862 +255 177 147 Flesh Medium 868 +235 235 231 Amethyst Light 869 +225 205 200 Amethyst 870 +190 155 167 Amethyst Medium Light 871 +156 125 133 Amethyst Medium 872 +156 125 133 Amethyst Dark 873 +242 209 142 Saffron Medium 874 +182 242 216 Pine Light 875 +143 191 171 Pine 876 + 98 140 122 Pine Medium 877 + 67 85 73 Pine Medium Dark 878 + 43 57 41 Pine Dark 879 +255 229 188 Copper Light 880 +255 206 164 Copper 881 +194 101 76 Copper Medium 883 +197 94 88 Copper Dark 884 +244 233 202 Sand Stone Light 885 +255 231 182 Sand Stone 886 +229 193 139 Sand Stone Medium Light 887 +216 151 105 Sand Stone Medium 888 +151 104 84 Sand Stone Medium Dark 889 +243 176 128 Light Brass 890 +255 206 158 Brass 891 +219 128 115 Rose Wine Medium 895 +184 75 77 Rose Wine Dark 896 +156 41 74 Rose Wine Very Dark 897 +158 109 91 Sierra 898 +206 175 144 Tawny Light 899 +202 202 202 Pewter Light 900 +209 140 103 Brass Medium 901 +188 156 120 Tawny Medium 903 +113 71 42 Tawny 904 +100 71 42 Tawny Dark 905 +130 90 8 Brass Dark 906 +178 119 55 Saffron Dark 907 +194 101 76 Flesh Medium Dark 914 +124 135 145 Denim Light 920 +124 135 145 Denim Medium 921 +102 122 140 Denim Dark 922 + 0 91 6 Emerald Very Dark 923 +140 103 0 Olive Green Very Dark 924 +255 115 97 Tangerine Very Dark 925 +245 240 219 Ecru Very Light 926 +227 234 230 Larkspur Light 928 +239 214 188 Fawn Very Light 933 +162 77 52 Fawn Very Dark 936 +158 176 206 Stormy Bleu Medium 939 + 71 97 116 Stormy Bleu Medium Dark 940 + 97 97 128 Stormy Bleu Very Dark 941 +244 195 139 Wheat Light 942 +237 172 123 Wheat Medium 943 +153 92 48 Wheat Dark 944 +242 209 142 Harvest Medium 945 +219 176 122 Harvest Light 956 +255 199 184 Wineberry Light 968 +219 128 115 Wineberry Medium 969 +203 78 97 Wineberry Medium Dark 970 +161 0 72 Wineberry Dark 972 +237 247 238 Sea Bleu Light 975 +194 209 206 Sea Bleu Medium Light 976 +115 140 170 Sea Bleu Medium 977 + 81 109 135 Sea Bleu Medium Dark 978 + 58 84 103 Sea Bleu Dark 979 +255 199 176 Rose Wine 893 +246 141 57 Antique Gold Medium 1001 +255 164 73 Antique Gold Light 1002 +206 103 91 Amberglow 1003 +197 94 88 Apricot Very Dark 1004 +179 0 91 Cherry Red Medium 1005 +188 0 97 Cherry Red 1006 +173 83 62 Chicory Dark 1007 +231 134 103 Chicory Medium 1008 +255 250 224 Copper Very Light 1009 +255 229 188 Cinnamon Very Light 1010 +255 243 231 Flesh Very Light 1011 +251 227 209 Chickory Light 1012 +237 122 100 Brick Medium 1013 +189 73 47 Brick Very Dark 1014 +191 64 36 Brick Ultra Dark 1015 +255 199 196 Antique Mauve Light 1016 +220 141 141 Antique Mauve Medium 1017 +195 118 123 Antique Mauve Dark 1018 +163 90 91 Antique Mauve Very Dark 1019 +253 229 217 Peony Very Light 1020 +255 201 188 Peony Light 1021 +249 160 146 Peony Medium Light 1022 +230 101 107 Peony 1023 +188 64 85 Peony Medium 1024 +194 36 67 Peony Medium Dark 1025 +255 240 228 Wineberry Very Light 1026 +184 89 88 Rose Wine Medium Dark 1027 +161 53 79 Raspberry Medium Dark 1028 +170 24 91 Antique Rose Ultra Dark 1029 +149 102 162 Thistle Medium Dark 1030 +237 247 247 Antique Bleu Ultra Light 1031 +194 209 206 Antique Bleu Very Light 1032 +182 186 194 Antique Bleu Light 1033 +124 135 145 Antique Bleu Medium 1034 +102 122 140 Antique Bleu Dark 1035 + 12 91 108 Antique Bleu Very Dark 1036 +248 248 252 Sea Bleu Very Light 1037 +194 209 207 Glacier Bleu Medium 1038 +102 148 154 Glacier Bleu Medium Dark 1039 +190 190 185 Pewter Medium 1040 +107 103 102 Stone Grey Very Dark 1041 +206 221 193 Pine Very Light 1042 +243 250 209 Grass Green Very Light 1043 + 89 92 78 Grass Green Ultra Dark 1044 +231 152 115 Toast Light 1045 +234 175 15 Toast 1046 +255 190 164 Cinnamon Light 1047 +221 109 91 Red Cinnamon 1048 +209 102 84 Cinnamon 1049 +113 71 42 Mocha Brown Dark 1050 +204 255 255 Teal Ultra Light 1060 +208 223 205 Teal Very Light 1062 +128 151 132 Teal Light 1064 + 0 153 153 Teal Medium 1066 + 0 107 107 Teal 1068 +192 224 200 Jade Light 1070 +146 183 165 Jade Medium Light 1072 + 70 140 110 Jade Medium 1074 + 47 91 73 Jade 1076 +219 194 164 Taupe Light 1080 +188 134 107 Taupe Medium Light 1082 +128 85 30 Taupe 1084 +109 66 39 Taupe Dark 1086 + 94 56 27 Taupe Very Dark 1088 + 77 121 255 Electric Bleu Medium 1089 +128 220 255 Electric Bleu Light 1090 +208 224 210 Sea Green Very Light 1092 +255 207 214 Beauty Rose Very Light 1094 +237 247 247 Slate Bleu Light 1096 +255 44 0 Crimson Red Light 1098 +239 162 127 Flesh Medium Light 4146 +179 82 18 Brick Dark 5975 +172 172 170 Stone Grey 8581 +231 18 97 Christmas Red 9046 +237 247 238 Glacier Bleu 9159 +255 177 147 Bleu Medium Light 9575 diff --git a/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Aurifil Lana.gpl b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Aurifil Lana.gpl new file mode 100644 index 00000000..81180771 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Aurifil Lana.gpl @@ -0,0 +1,110 @@ +GIMP Palette +Name: Ink/Stitch: Aurifil Lana +Columns: 4 +# RGB Value Color Name Number +242 242 242 White 8024 +207 161 105 Honey 8140 +193 19 30 Flame Red 8265 +254 227 241 Oyster 8410 +177 118 41 Tiger Eye 8330 +202 217 198 Light Blue Green 8310 +201 25 137 Dark Pink 8440 +255 255 227 Ivory White 8021 +255 125 0 Pumpkin 8235 +177 17 7 Warm Red 8460 +253 227 241 Oyster 8420 +209 92 0 Orange 8334 +178 178 94 Medium Green / Yellow 8315 +192 95 173 Lavender 8430 +239 226 191 Etherial Green 8110 +209 119 0 Almond 8240 +160 1 69 Burgundy 8450 +251 187 207 Pink 8425 +102 50 4 Mushroom 8360 +178 178 0 Green / Gold 8346 +249 137 160 Rose Pink 8433 +232 246 166 Dark Olive Green 8115 +251 63 63 Fluo Pink 8248 +108 10 66 French Raspberry Red 8455 +252 187 196 Pink 8405 + 71 15 0 Dark Brown 8380 +158 158 55 Pistachio 8320 +228 154 203 Light Pink 8454 +254 227 149 Popcorn 8130 +253 24 19 Cardinal Red 8220 +250 169 211 Medium Pink 8401 +251 187 200 Pink 8332 +239 214 202 Chalk 8325 +144 152 89 Olive Green 8910 +225 201 227 Light Pink 8574 +227 242 65 Gold / Yellow 8120 +252 25 33 Cardinal Red 8250 +242 38 144 Ruby Glint 8402 +253 210 190 Grape 8205 +230 202 187 Pale Orange 8341 +165 176 3 Peapod 8920 +207 167 191 Orchid Bloom 8553 +253 169 104 Chamois 8135 +237 23 31 Scarlet 8260 +242 1 108 Fuschia 8255 +250 146 154 Shrimp 8210 +252 187 181 Salmon Pink 8333 +127 131 1 Crescent Moon 8331 +211 98 175 Lavender 8535 +225 186 144 Pink Sand 8174 +239 18 9 Red 8225 +202 0 59 Dark Red 8403 +250 126 132 Shell Pink 8215 +224 166 167 Pale Salmon 8344 +112 112 15 Cypress 8361 +202 44 146 Dark Pink 8530 +144 18 132 Plum 8540 + 15 35 140 Blue 8762 +240 240 240 White 8345 +125 206 226 Turquoise 8805 + 47 126 32 Green 8880 + 0 0 0 Black 8692 +145 121 133 Gray Ridge 8088 +176 130 190 Purple 8510 + 12 71 157 Warrior Blue 8720 +227 227 227 Silver Gray 8605 + 31 96 169 Magic Blue 8810 + 40 96 23 Green 8890 +135 135 135 Medium Grey 8082 +145 45 0 Chocolate 8089 +136 75 161 Laurie Lilac 8520 + 18 12 128 Royal 8725 +186 186 186 Winter Sage 8610 + 0 128 141 Calypso Green 8850 + 0 76 55 Dark Green 8892 + 89 89 89 Dark Grey 8083 +105 28 138 Dark Purple 8545 + 5 60 109 Salem Blue 8730 + 90 89 89 Dark Grey 8980 +168 221 185 Brook Green 8940 + 0 81 56 Dark Green 8970 +209 224 238 Pale Silver 8757 +186 216 233 Ice Blue 8600 +104 106 176 Baja Blue 8525 + 61 166 57 Emerald 8820 +112 196 140 Sliced Lime 8860 + 0 100 69 Green 8960 +159 171 164 Aqua Gray 8085 +186 209 229 Ice Blue 8710 + 59 0 113 Purple Maze 8550 + 9 58 128 Royal Blue 8782 + 19 155 137 Parrot 8955 + 0 122 84 Medium Green 8950 + 19 72 51 Green 8090 +168 209 229 Sky Blue 8781 + 6 15 61 Navy Blue 8784 + 92 147 174 Wonder Blue 8861 + 1 147 118 Peacock Green 8870 +145 145 0 Tamarack 8930 +185 175 164 Ashes Of Roses 8084 +145 201 224 Pale Blue 8715 + 6 13 60 Navy Blue 8785 + 79 182 139 Emerald Green 8825 + 24 150 76 Medium Green 8875 +146 146 2 Tamarack 8340 +167 150 141 Atmosphere 8087 diff --git a/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Aurifil Mako.gpl b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Aurifil Mako.gpl new file mode 100644 index 00000000..b8ed79af --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Aurifil Mako.gpl @@ -0,0 +1,162 @@ +GIMP Palette +Name: Ink/Stitch: Aurifil Mako +Columns: 4 +# RGB Value Color Name Number +242 242 242 White 2024 +254 227 149 Popcorn 2130 +253 90 30 Burnt Orange 1104 +236 226 219 Palest Ivory 2310 +145 119 19 Desert Cactus 2335 + 89 89 89 Dark Grey 1140 +244 217 222 Pale Pink 2410 +248 250 226 Bright White 2021 +250 179 67 Scholastic 2135 +247 63 63 Fluo Pink 1154 +225 208 197 Crystal Gray 2315 +209 92 11 Dark Orange 2155 + 79 79 61 Dark Grey / Green 1285 +246 210 218 Primrose Pink 2415 +247 250 226 Bright White 2110 +246 158 50 Gold / Orange 2140 +245 73 92 Fluo Pink 2277 +223 186 169 Pale / Orange 2320 +167 74 17 Old Dark Tex Orange 2350 +122 35 32 Burgundy 2345 +247 196 205 Sugar Pink 2437 +248 248 79 Lemon 2115 +246 124 27 Soleil 2145 +247 23 19 Cardinal Red 2245 +215 167 147 Peachbeige 2210 +102 50 13 Mushroom 2355 + 52 11 9 Dark Chocolate 2468 +241 114 169 Floral Pink 2425 +247 246 25 Canary Yellow 2120 +247 125 17 Fluo Orange 1133 +246 16 45 Cardinal Red 2255 +178 128 105 Fawn 2330 +209 209 197 Pearl Gray 2325 +133 54 26 Burgundy 4012 +229 89 163 Medium Pink 2435 +231 209 154 Light Yellow / Orange 2125 +249 102 17 Fluo Orange 2150 +241 54 102 Pink 2230 +247 136 111 Coral 2215 +145 146 126 Pale / Grey 2370 +101 50 13 Mushroom 2360 +243 146 154 Shrimp 2220 +195 190 141 Vegas Gold 2920 +247 88 16 Paprika 2235 +244 23 39 Cardinal Red 2250 +167 123 14 Bullion 2340 +124 125 106 Vertiver Green 1318 + 23 31 11 Black 1130 +242 126 133 Shell Pink 2225 +249 249 125 Medium Yellow 1135 +209 84 10 Dark Orange 2240 +204 37 43 Red Orange 2260 +179 147 17 Shimmering Gold 2930 +110 92 78 Dark Grey 2372 + 54 8 46 Dark Brown 2465 +244 186 195 Orchid Pink 2420 +252 197 205 Pink 2205 +220 100 176 Medium Pink 2430 +229 190 221 Light Pink 2510 + 65 0 125 Purple Maze 2545 + 12 37 119 Royal Blue 2730 +178 166 208 Pale Purple 2770 +217 217 217 Natural 2610 +243 57 154 Crimson 2440 +201 25 137 Dark Pink 2479 +213 151 201 Light Pink 2515 + 13 9 94 Imperial Blue 1200 + 12 8 94 Imperial Blue 2735 + 13 43 136 Blue 1320 +135 135 135 Medium Grey 1158 +164 17 40 Atom Red 1103 +136 22 135 Grape Wine 2588 +136 75 161 Laurie Lilac 2520 +104 106 176 Baja Blue 2525 + 11 14 88 Navy Blue 2740 + 17 22 134 Royal 4140 + 79 85 86 Granite 4241 +110 28 30 Tan 2460 +127 17 131 Dark Purple 2535 +128 17 131 Dark Purple 2540 + 62 57 151 Purple 1128 + 9 40 105 Royal Blue 2775 + 7 47 103 Blue 1126 + 0 0 0 Black 2692 +240 2 127 Fuschia 2530 +181 76 100 Baroque Rose 2455 +106 28 138 Dark Purple 1243 +185 204 227 Light Blue 2710 + 11 7 79 Navy Blue 2780 +127 132 133 Grey 1246 +217 240 211 Phantom Green 2800 +180 19 133 Dark Pink 4020 +201 25 137 Dark Pink 2450 + 92 17 74 Sugar Beet 4225 +168 203 226 Sky Blue 2715 + 22 12 66 Navy Blue 2784 + 1 64 90 Deep Windsor 1310 +168 221 185 Brook Green 2830 +159 1 89 Dark Red 1100 +129 1 72 Dark Pink 4030 + 54 5 46 Dark Brown 2581 + 31 96 169 Magic Blue 2720 + 6 13 60 Navy Blue 2745 +240 240 240 White 2600 +186 228 188 Light Green / Yellow 2835 +211 98 175 Lavender 2445 +108 10 66 French Raspberry Red 1240 + 59 0 113 Purple Maze 2582 + 32 83 163 Morning Glory 2725 + 6 15 61 Navy Blue 2785 +209 209 209 Lilac Hint 2605 +102 193 157 Spearmint 2805 + 0 128 141 Calypso Green 2815 +158 216 161 Mint Tint 2880 + 0 84 71 Dark Green 2890 +104 138 146 Medium Blue / Grey 2850 +251 180 196 Carnatio 2423 +179 156 60 Medium Green / Yellow 2915 + 0 144 146 Jade Green 1125 +112 196 140 Sliced Lime 1231 + 58 81 10 Green 2887 + 34 161 125 Pale Jade 2860 +174 55 81 Dusky Rose 2452 +178 156 89 Faded Brass 2324 + 15 58 104 Dark Blue 4644 +102 190 125 Zephyr Green 2882 +152 166 5 Tamarack 2910 + 1 131 95 Jade 2865 +179 202 142 Green Oak 2843 +178 134 83 Medium Yellow 2326 + 1 149 131 Peppermint 2810 + 44 163 102 Gotcha Green 1114 +145 145 0 Tamarack 2975 + 0 122 84 Medium Green 2870 +127 184 159 Dusty Jade Green 2847 +178 156 69 Faded Brass 2314 + 1 99 127 Dark Blue 4182 + 81 161 33 Green / Yellow 2884 +145 136 115 Laurel Oak 2900 + 0 80 76 Blue Spruce 2892 +103 96 110 Dark Grey / Blue 2524 +143 177 113 Tarragon 2902 + 19 155 137 Parrot 1148 +158 189 13 Peapod 2888 +111 102 82 Dark Grey 2905 + 0 90 70 Dark Green 4129 + 30 65 102 Dark Blue 1248 +239 227 185 Almond Oil 2000 + 0 81 56 Dark Green 4093 +171 191 8 Peapod 1147 +112 112 15 Cypress 4173 + 0 74 42 Dark Green 2885 + 11 43 120 Royal Blue 2783 +196 232 189 Mint 2886 +145 211 169 Ocean Wave 2840 +135 207 168 Pale Green 2845 + 0 76 55 Dark Green 4026 +229 208 117 Popcorn 2123 diff --git a/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Aurifil Polyester.gpl b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Aurifil Polyester.gpl new file mode 100644 index 00000000..6a8ead87 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Aurifil Polyester.gpl @@ -0,0 +1,208 @@ +GIMP Palette +Name: Ink/Stitch: Aurifil Polyester +Columns: 4 +# RGB Value Color Name Number + 5 20 63 Navy Blue 5102 + 12 8 84 Navy Blue 5120 + 5 60 109 Salem Blue 5138 +178 226 225 Baby Blue 5156 +255 255 227 Ivory White 5202 +254 209 93 Star Gold 5220 +253 210 190 Grape 5238 +242 1 108 Fuschia 5256 + 6 13 60 Navy Blue 5104 +158 169 208 Scalloped Blue 5122 + 9 39 105 Royal Blue 5140 + 7 75 136 Petrel Blue 5158 +255 255 186 Pale Yellow 5204 +254 196 54 Yellow 5222 +254 158 50 Orange 5240 +199 1 85 Dark Red 5258 + 6 15 61 Navy Blue 5106 +209 237 224 Light Blue 5124 +209 224 238 Pale Silver 5142 + 0 104 122 Mallard Blue 5160 +255 240 141 Mustard 5206 +254 112 24 Fluo Orange 5224 +254 145 27 Honeydew 5242 +250 146 154 Shrimp 5260 + 12 32 116 Royal Blue 5108 + 62 181 201 Medium Turquoise 5126 + 7 55 112 Salem Blue 5144 + 0 128 141 Calypso Green 5162 +254 217 94 Star Gold 5208 +254 227 227 Snow White 5226 +255 79 0 Paprika 5244 +249 103 110 Bitteroot 5262 +104 106 176 Baja Blue 5110 + 75 107 175 Medium Blue 5128 + 15 58 104 Dark Blue 5146 +145 213 208 Pale Aqua Green 5164 +254 186 53 Scholastic 5210 +251 179 197 Carnatio 5228 +255 89 0 Paprika 5246 +223 22 43 Foxy Red 5264 +114 100 173 Light Purple 5112 + 11 25 102 Imperial Blue 5130 + 4 42 85 Blue Ribbon 5148 + 0 71 55 Evergreen 5166 +209 84 0 Orange 5212 +250 126 132 Shell Pink 5230 +102 45 0 Chocolate 5248 +164 17 40 Atom Red 5266 +186 216 233 Ice Blue 5114 + 17 12 121 Royal 5132 + 0 76 55 Dark Green 5150 + 0 81 56 Dark Green 5168 +254 232 178 Tusk 5214 +255 89 0 Paprika 5232 +250 159 184 Pale Pink 5250 +110 28 30 Tan 5268 + 1 26 51 Navy Blue 5116 +208 212 232 Palest Blue 5134 + 0 87 88 Dark Teal 5152 + 0 146 112 Medium Jade Green 5170 +254 178 67 Scholastic 5216 +251 103 78 Coral 5234 +213 151 201 Light Pink 5252 +212 0 38 Red 5270 + 11 14 88 Navy Blue 5118 +104 106 176 Baja Blue 5136 + 71 180 148 Emerald Green 5154 +168 221 196 Brook Green 5172 +254 209 114 Daffodil 5218 +255 19 0 Red 5236 +227 2 127 Crimson 5254 +204 0 46 Red 5272 +242 242 242 White 5302 +216 2 127 Passion 5320 +136 74 162 Laurie Lilac 5338 +166 111 180 Iris 5356 + 0 0 0 Black 5402 +249 137 160 Rose Pink 5420 + 0 74 42 Dark Green 5514 + 19 155 137 Parrot 5532 +245 227 227 Oyster 5304 +127 17 131 Dark Purple 5322 + 47 0 124 Purple Maze 5340 + 59 0 113 Purple Maze 5358 + 32 42 14 Black 5404 +179 15 65 Dark Red / Orange 5422 + 58 81 10 Green 5516 +125 203 166 Mint Green 5534 +252 197 212 Memphis Belle 5306 + 92 17 64 French Raspberry Red 5324 + 58 0 111 Purple Maze 5342 +225 221 230 Palest Grey 5360 + 61 58 23 Green 5406 +131 24 52 Maroon 5424 + 24 72 29 Green 5518 + 0 56 34 Ivy 5536 +247 127 190 Fuchsia Pink 5308 +247 114 172 Floral Pink 5326 +177 166 208 Pale Purple 5344 +225 201 207 Steel Gray 5362 +207 161 105 Honey 5408 +145 211 168 Ocean Wave 5502 +127 131 1 Crescent Moon 5520 + 0 57 40 Ivy 5538 +164 17 121 New Berry 5310 +245 92 172 Pink 5328 +114 90 168 Lakers Purple 5346 +165 90 79 Mauvewood 5364 +251 169 154 Salmon 5410 +112 196 140 Sliced Lime 5504 +129 147 125 Green Bay 5522 +129 147 138 Pale Green 5540 +137 12 76 Cranberry 5312 +245 1 89 Cherry Blossom 5330 + 29 10 99 Imperial Blue 5348 +103 18 31 Brown 5366 +226 74 100 Medium Pink 5412 + 44 163 102 Gotcha Green 5506 +240 234 162 PaleYellow 5524 +111 156 18 Meadow Green 5542 +238 205 229 Light Pink 5314 +248 20 66 Cardinal Red 5332 +229 190 221 Light Pink 5350 +176 129 170 Regal Orchid 5368 +181 76 100 Baroque Rose 5414 + 24 150 76 Medium Green 5508 + 0 81 56 Dark Green 5526 +227 227 227 Silver Gray 5544 +220 100 176 Medium Pink 5316 +234 0 48 Ruby 5334 +206 149 200 Purple 5352 +225 201 227 Light Pink 5370 +123 22 29 Cherokee Red 5416 + 0 103 62 Green 5510 + 0 104 91 Green Forest 5528 +168 221 185 Brook Green 5546 +202 44 146 Dark Pink 5318 +176 130 190 Purple 5336 +145 95 172 Medium Purple 5354 + 0 0 0 Black 5372 +251 169 188 Petal Pink 5418 + 0 88 55 Latex Green 5512 + 0 126 111 Jade Green 5530 + 90 130 99 Sea Spray 5548 +171 194 172 Sea Foam 5550 +174 205 111 Light Green 5566 +255 255 0 Gold / Yellow 5610 +240 240 240 White 5626 +123 62 41 Dark Brown 5642 +230 191 192 Pale Orange 5710 +239 240 240 White 5726 +208 197 191 Chrome 5742 +130 164 136 Creme de Menthe 5552 +168 168 16 Peapod 5568 +178 178 0 Green / Gold 5612 +195 178 99 Grapefruit 5628 +225 186 169 Pale / Orange 5644 +224 166 167 Pale Salmon 5712 +227 227 227 Silver Gray 5728 +185 175 170 Cloud 5744 + 40 101 75 Green Forest 5554 +144 152 89 Olive Green 5570 +232 232 207 Pale Orange 5614 +135 111 12 Desert Cactus 5630 +133 60 39 Brown 5646 +209 92 0 Orange 5714 +188 186 186 Pale Grey / Pink 5730 +153 162 155 Jadeite 5746 +209 236 134 Pale Yellow 5556 + 92 103 29 Palmetto 5572 +231 209 154 Light Yellow / Orange 5616 +145 119 0 Crescent Moon 5632 + 78 28 19 Dark Oak 5648 +168 74 9 Old Dark Tex Orange 5716 +135 135 135 Medium Grey 5732 + 0 33 35 Ivy 5748 + 54 146 38 Bright Green 5558 +239 214 186 Ecru 5602 +178 146 0 Shimmering Gold 5618 +135 71 7 Chocolate 5634 +208 197 184 Stainless Steel 5702 +239 214 202 Chalk 5718 + 54 54 54 Dark Grey 5734 + 47 126 32 Green 5560 +226 188 127 Bamboo 5604 +145 145 129 Pale / Grey 5620 +226 208 197 Crystal Gray 5636 +185 175 164 Ashes Of Roses 5704 +144 132 118 Fungi 5720 +158 158 158 Medium Grey 5736 + 27 102 72 Green Petal 5562 +225 186 144 Pink Sand 5606 +125 125 106 Vertiver Green 5622 +254 227 197 Bone 5638 +167 150 141 Atmosphere 5706 +158 149 136 Light Sage 5722 +112 112 112 Medium Grey / Green 5738 +214 222 157 Citron 5564 +255 255 125 Medium Yellow 5608 + 12 55 39 Ivy 5624 +166 105 77 Brown 5640 +145 136 115 Laurel Oak 5708 +177 162 151 String 5724 + 13 16 17 Black 5740 diff --git a/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Aurifil Rayon.gpl b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Aurifil Rayon.gpl new file mode 100644 index 00000000..bf608c9a --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Aurifil Rayon.gpl @@ -0,0 +1,184 @@ +GIMP Palette +Name: Ink/Stitch: Aurifil Rayon +Columns: 4 +# RGB Value Color Name Number + 6 15 61 Navy Blue C314 + 31 96 169 Magic Blue C129 + 62 181 201 Medium Turquoise C110 + 43 0 96 Purple Maze C534 +242 237 231 Natural White C181 + 0 104 122 Mallard Blue C761 +102 190 125 Zephyr Green C352 +184 190 2 Dark Green C504 + 6 13 60 Navy Blue C781 + 37 132 187 Dark Turquoise Blue C113 + 0 83 98 Teal Haze C114 + 33 21 75 Dark Purple C520 +255 255 227 Ivory White C282 + 0 38 47 Ivy C119 + 0 135 119 Isle Green C313 +255 255 125 Medium Yellow C004 + 5 20 63 Navy Blue C774 + 12 71 157 Warrior Blue C775 + 0 149 178 Dark Blue / Green C378 + 50 0 87 Purple Maze C516 +227 227 227 Silver Gray C315 +209 237 224 Light Blue C101 + 0 79 69 Dark Green C756 +240 248 63 Lime C005 + 4 28 67 Navy Blue C264 + 11 61 145 Fire Blue C323 +158 186 217 Light Blue C771 + 58 0 111 Purple Maze C409 + 0 0 0 Black C200 +186 228 215 Bleached Aqua C143 + 0 47 48 Ivy C757 +240 249 125 Medium Yellow C212 + 9 24 88 Navy Blue C512 +135 209 206 Pale Turquoise C109 + 75 107 175 Medium Blue C441 +211 98 175 Lavender C514 +168 222 235 Baby Blue C103 +158 217 195 Yucca C550 + 0 79 69 Dark Green C758 +240 175 0 Medium Orange C737 + 13 43 136 Blue C444 +197 224 230 Cadet Blue C121 + 83 116 169 Medium Purple C130 +145 134 191 Light Purple C451 +112 201 212 Basic Turquoise C104 +125 203 166 Mint Green C146 + 0 80 76 Blue Spruce C476 +255 178 16 Merit Gold C741 + 12 32 116 Royal Blue C773 +145 201 224 Pale Blue C339 + 8 31 91 Imperial Blue C484 +224 89 170 Medium Pink C081 + 0 130 155 Dark Aqua Green C107 + 34 161 125 Pale Jade C475 +168 129 0 Autumn Green C746 +255 217 17 Canary C011 + 12 37 119 Royal Blue C778 + 92 147 174 Wonder Blue C797 + 5 22 64 Navy Blue C197 +242 242 242 White C001 + 0 104 122 Mallard Blue C764 + 0 126 111 Jade Green C285 +145 145 0 Tamarack C211 +255 240 109 Snapdragon C502 +255 240 141 Mustard C015 + 47 126 32 Green C751 + 54 146 38 Bright Green C460 + 40 101 75 Green Forest C462 + 0 0 0 Black C497 +242 38 144 Ruby Glint C560 +239 235 227 Natural White C795 +237 183 218 Pale Pink C044 +255 255 0 Gold / Yellow C010 +178 222 105 Spruce C749 +186 228 188 Light Green / Yellow C161 + 50 93 61 Lime C486 +177 149 156 Satin Wine C225 +251 169 188 Petal Pink C382 +238 235 227 Natural White C376 +251 179 197 Carnatio C046 +255 232 85 Star Gold C009 + 55 146 38 Kelly C358 +196 230 104 Sharp Green C165 +195 190 141 Vegas Gold C473 +201 25 137 Dark Pink C530 +252 187 181 Salmon Pink C222 +251 187 207 Pink C021 +249 127 146 Azalea C052 +255 178 16 Merit Gold C743 + 0 101 50 Green C752 +111 156 18 Meadow Green C166 +255 255 125 Medium Yellow C745 +249 147 188 Pale Pink C377 +254 227 227 Snow White C403 +251 136 111 Coral C408 +223 1 76 Cerise C703 +254 186 53 Scholastic C742 + 0 102 50 Green C324 + 0 40 31 Ivy C357 +217 217 167 Sea Mist C474 +247 114 172 Floral Pink C050 +251 169 188 Petal Pink C406 +204 0 46 Red C708 +164 17 40 Atom Red C219 +254 186 53 Scholastic C501 + 0 56 34 Ivy C747 + 0 45 36 Ivy C469 +125 125 0 Crescent Moon C172 +252 210 232 Delicate Mauve C319 +237 36 43 Scarlet C407 +237 23 31 Scarlet C715 +156 39 34 Red Bittersweet C547 +254 255 0 Gold / Yellow C008 + 0 103 62 Green C753 + 12 55 39 Ivy C755 + 32 42 14 Black C176 +253 227 241 Oyster C041 +193 19 30 Flame Red C713 +255 19 0 Red C717 +126 31 63 Maroon C711 +255 217 17 Canary C006 + 1 131 45 Bright Green C154 + 0 47 48 Ivy C120 + 53 50 13 Green C471 +133 35 100 Dark Purple C058 + 60 17 7 Dark Brown C402 +255 19 1 Red C719 +120 45 54 Wine C548 +252 187 181 Salmon Pink C322 +112 55 0 Chocolate C075 +254 158 44 Gold / Orange C029 +241 231 216 Palest Ivory C791 + 33 32 18 Black C554 +239 227 185 Almond Oil C203 + 79 85 86 Granite C494 + 54 54 54 Dark Grey C557 +251 136 111 Coral C025 +225 55 24 Red C724 +254 112 24 Fluo Orange C509 +240 240 204 Glass Green C788 + 71 15 0 Dark Brown C080 +185 175 170 Cloud C204 +128 132 133 Grey C189 +127 132 133 Grey C798 +254 90 23 Burnt Orange C716 +178 55 0 Old Dark Tex Orange C723 +177 118 36 Tiger Eye C730 +254 232 178 Tusk C740 + 53 27 8 Dark Brown C728 + 79 79 61 Dark Grey / Green C477 +240 240 240 White C331 + 13 16 17 Black C278 +253 24 19 Cardinal Red C510 +209 130 12 Almond C066 +226 188 127 Bamboo C552 +254 232 138 Wheat C793 + 70 22 5 Dark Brown C480 +167 158 153 Opal Gray C541 +227 227 227 Silver Gray C182 +230 202 187 Pale Orange C062 +255 168 20 Mango C720 +208 153 79 Oak Buff C432 +254 227 128 Sunshine C744 +231 209 154 Light Yellow / Orange C538 +125 125 106 Vertiver Green C427 +158 164 166 Quarry C799 +254 227 197 Bone C383 +254 145 27 Honeydew C722 +254 232 178 Tusk C289 +254 232 138 Wheat C016 +239 222 212 Yellow / Gold C328 + 54 54 54 Dark Grey C199 + 89 89 89 Dark Grey C342 +239 226 191 Etherial Green C061 +254 90 23 Burnt Orange C359 +239 227 185 Almond Oil C063 +146 125 50 Medium Yellow / Green C417 +241 231 216 Palest Ivory C201 +127 132 133 Grey C232 + 71 71 71 Midnight C273 diff --git a/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Aurifil Royal.gpl b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Aurifil Royal.gpl new file mode 100644 index 00000000..d997298f --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Aurifil Royal.gpl @@ -0,0 +1,503 @@ +GIMP Palette +Name: Ink/Stitch: Aurifil Royal +Columns: 4 +# RGB Value Color Name Number +243 231 250 White C001 +255 255 240 Light Beige C003 +255 255 225 Yellow Beige C004 +230 240 102 Green Gold C005 +230 240 102 Green Gold C006 +230 240 102 Green Gold C007 +255 255 102 Lemon Yellow C008 +255 240 204 Pale Gold C009 +255 250 153 Gold C010 +245 240 102 Darker Gold C011 +255 230 75 Mid Gold C012 +255 245 0 Orange Gold C013 +255 250 153 Pale Gold C015 +240 220 170 Creamy Beige C016 +255 250 153 Gold C017 +255 204 0 Copper C018 +255 204 0 Copper C020 +255 204 180 Very Pale Peach C021 +255 180 160 Pale Peach C024 +240 153 130 Peach C025 +255 153 51 Carrot C026 +255 153 51 Carrot C027 +255 153 51 Carrot C029 +255 102 0 Orange C030 +255 51 0 Tomato Red C031 +255 51 0 Tomato Red C032 +255 51 0 Tomato Red C033 +255 0 0 Red C037 +255 0 75 Deep Red C038 +170 0 51 Rich Red C040 +220 220 224 Light Grey C041 +255 204 255 Pale Mauve C042 +255 204 255 Pale Mauve C044 +255 204 215 Mauve Pink C046 +255 204 215 Mauve Pink C048 +250 220 220 Pink C049 +220 153 204 Dark Mauve C050 +255 153 170 Plum Pink C051 +255 160 204 Dark Pink C052 +255 102 153 Bright Pink C053 +215 0 120 Dark Rose C054 +255 0 120 Hot Pink C056 +204 0 180 Plum C058 +102 25 75 Dark Maroon C060 +240 220 215 Brownish Cream C061 +230 204 190 Mushroom cap C062 +220 200 160 Camel C063 +245 204 175 Brownish Cream C064 +255 153 102 Tangerine C065 +255 180 160 Peach C066 +204 153 51 Bronze C067 +204 153 51 Bronze C068 +180 130 75 Light brown C069 +180 130 75 Light brown C070 +153 153 51 Brownish green C071 +185 153 102 Burnished brown C072 +185 153 102 Burnished brown C073 +153 51 51 Red brown C075 +153 51 115 Maroon C076 +153 51 51 Red brown C077 +140 95 65 Brown C078 +120 60 51 Reddish brown C079 +102 51 51 Very dark brown C080 +235 204 215 Pale Lavender C081 +204 140 204 Purple C084 +230 190 220 Darker Lilac C085 +204 153 186 Dusky Mauve C086 +220 153 204 Dark Mauve C087 +204 140 204 Purple C088 +153 104 220 Jacaranda C090 +125 0 153 Purple C094 +120 51 153 Ultra Marine C096 + 51 0 204 Marine Blue C099 +102 2 153 Aubergine C100 +220 255 230 Pale Turquoise C101 + 51 191 204 Medium Aqua C102 + 51 191 204 Medium Aqua C103 + 0 185 204 Bright Aqua C104 + 0 235 255 Medium Turquoise C106 + 0 235 255 Medium Turquoise C107 +175 255 245 Light turquoise C109 + 65 153 175 Medium Teal Blue C110 + 80 134 204 Medium Blue C111 + 65 153 175 Medium Teal Blue C112 + 51 153 204 Teal Blue C113 + 51 102 153 Teal Blue C114 + 65 125 135 Dark Sea Green C119 + 51 102 102 Dark Sea Green C120 +204 249 255 Very Pale Blue C121 +204 249 255 Very Pale Blue C123 +240 245 250 Silver Blue C124 +240 250 255 Sky Blue C125 +170 200 255 Medium Blue C128 +170 200 255 Medium Blue C129 +120 150 220 Medium Blue C130 +102 102 204 Marine Blue C131 + 51 51 200 Bright Blue C132 + 0 0 180 Bright Blue C133 + 0 0 180 Bright Blue C134 + 51 0 160 Ultramarine C135 + 51 0 204 Marine Blue C136 +102 2 153 Aubergine C137 + 50 100 170 Marine Blue C138 + 80 0 120 Aubergine C139 + 0 0 75 Dark navy C140 +153 255 220 Light Green C141 +160 204 180 Light Teal Green C142 + 60 220 170 Light teal Green C143 +160 204 180 Light teal Green C144 +153 240 204 Light teal Green C145 + 51 204 165 Light teal Green C146 + 51 255 153 Mint Green C147 + 51 204 153 Green C148 +220 255 240 Pale Green C151 + 30 151 80 Emerald Green C152 + 51 204 153 Light teal Green C154 + 60 175 120 Teal Green C155 + 0 153 130 Emerald C156 + 51 153 153 Dark Aqua C158 + 51 120 102 Dark Slate Green C159 +204 255 204 Pale Green C161 +220 255 204 Very Pale Green C162 +225 255 153 Pale Green C163 +153 204 51 Medium Green C165 +130 191 53 Med Olive Green C166 + 51 204 51 Medium Green C167 + 51 204 153 Green C168 + 51 153 120 Slate Green C169 + 51 153 120 Slate Green C170 +204 204 150 Light Khaki Green C171 +153 153 51 Brownish Green C172 +153 153 51 Med Leaf Green C174 + 80 110 51 Dark Leaf Green C176 + 0 60 20 Dark Leaf Green C177 +140 160 190 Med Leaf Green C180 +220 220 224 Light Silver Grey C181 +204 210 204 Light Silver Grey C182 +204 204 210 Med Silver Grey C183 +204 204 210 Med Silver Grey C184 +225 204 180 Pale Grey Gold C185 +204 180 170 Med Grey Brown C186 +140 135 125 Dark Grey C187 +190 190 195 Silver Grey C189 +153 153 165 Dark Grey C190 +153 153 153 Dark Grey C191 +127 127 127 Dark Grey C192 +140 140 150 Dark Grey C193 +175 175 180 Dark Grey C194 + 85 85 85 Very Dark Grey C195 + 75 75 75 Very Dark Grey C196 + 0 0 51 Dark Navy C197 + 85 85 85 Very Dark Grey C199 + 0 0 0 Black C200 +245 235 204 Light Grey Brown C201 +240 225 195 Creamy Beige C202 +255 240 204 Beige C203 +245 240 230 Light Grey Brown C204 +200 175 140 Med Grey Brown C205 + 20 190 160 Pale Brown C206 +153 121 102 Medium Brown C207 +225 230 140 Light Khaki Green C209 +230 204 110 Khaki Green C210 +204 204 51 Dark yellow C211 +204 204 51 Dark yellow C212 +255 240 51 Bright yellow C214 +255 204 0 Copper C215 +255 170 51 Orange C216 +153 51 75 Burgundy C219 +160 51 102 Burgandy Rose C220 +255 185 190 Pale Pink C222 +255 154 154 Rose Pink C223 +153 153 154 Medium Grey C225 +210 170 210 Light Violet C226 + 75 75 75 Dark Grey C232 +178 178 178 Silver Grey C234 +140 140 150 Dark Grey C235 +229 229 225 Pale Blue C236 + 0 51 153 Intense Blue C244 +240 150 70 Brown Orange C249 + 0 0 75 Dark Navy C264 +125 102 225 Marine Blue C265 +153 153 153 Dark Grey C267 + 75 75 75 Very Dark Grey C269 +102 51 0 Dark brown C270 +153 153 153 Dark Grey C271 + 85 85 85 Very Dark Grey C273 +150 190 230 Medium Blue C275 +153 153 153 Dark Grey C276 + 80 40 0 Very dark brown C277 + 85 85 85 Very Dark Grey C278 +102 153 255 Medium Blue C280 +255 255 230 Beige C282 +170 200 255 Medium Blue C283 +255 165 125 Peach C284 +102 172 153 Blue Green C285 + 0 153 130 Emerald C288 +255 204 130 Pale Gold C289 +153 51 51 Red brown C291 +120 60 51 Reddish brown C294 + 51 153 153 Dark Aqua C313 + 0 0 51 Navy C314 +255 255 240 Off White C315 +255 255 102 Lemon Yellow C316 +239 255 102 Green Gold C317 +255 225 240 Pale Pink C319 +255 178 150 Rose Pink C320 +255 204 204 Salmon Pink C322 + 0 0 180 Bright Blue C323 + 60 175 120 Teal Green C324 +170 120 53 Brown C325 +175 175 180 Dark Grey C327 +255 255 225 Yellow Beige C328 +255 245 0 Orange Gold C329 +235 204 245 Lilac C330 +190 190 180 Light Grey C331 + 0 40 120 Bright Navy C334 + 0 0 102 Navy C336 +153 255 240 Pale Sea Green C337 + 51 102 153 Teal Blue C339 +140 140 150 Dark Grey C342 +255 0 102 Rose Red C343 +204 102 153 Mid Purple C349 + 75 0 153 Ultra Marine C350 +153 255 220 Light Green C352 +240 140 75 Rich Brown C353 +178 178 178 Silver Grey C354 + 0 51 153 Intense Blue C355 + 51 102 0 Dark Leaf Green C357 + 51 204 70 Medium Green C358 +255 153 51 Orange C359 +204 204 210 Med Silver Grey C360 +178 178 185 Grey C362 +153 51 75 Burgundy C373 +153 204 51 Medium Green C374 +255 255 240 Light Beige C376 +255 204 215 Mauve Pink C377 +150 190 230 Medium Blue C378 +250 220 220 Pink C382 +255 180 160 Peach C383 +255 215 165 Sand C401 +153 80 102 Maroon C402 +220 220 224 Light Grey C403 +255 190 102 Tangerine C405 +255 185 190 Pale Pink C406 +204 51 0 Rust C407 +255 154 154 Rose Pink C408 +153 0 153 Purple C409 +180 102 230 Purple C410 + 90 60 0 Dark Olive Green C411 + 85 85 85 Very Dark Grey C412 +255 51 0 Tomato Red C413 + 80 90 102 Steel blue C414 +204 140 150 Plum Pink C415 + 51 153 120 Slate Green C416 +180 130 75 Light brown C417 +153 153 154 Medium Grey C418 +170 120 53 Brown C419 + 30 151 80 Emerald Green C420 +152 153 102 Khaki Green C421 +180 102 230 Purple C422 + 51 130 135 Dark Aqua C423 +255 255 153 Pale Khaki Green C424 +130 191 53 Med Olive Green C425 +255 204 153 Salmon C426 +204 180 170 Medium grey brown C427 + 51 255 153 Mint Green C428 + 51 204 51 Medium Green C429 +220 190 160 Pale Brown C430 +204 150 140 Brownish pink C431 +185 153 102 Burnished brown C432 +204 153 186 Dusky Mauve C433 +127 127 127 Medium Grey C434 +153 153 154 Medium Grey C435 +255 80 190 Deep Pink C436 +255 180 130 Orange Peach C437 +102 153 153 Sea Green C438 +255 245 0 Orange Gold C439 + 80 40 0 Very dark brown C440 +170 200 255 Medium Blue C441 + 50 100 170 MarineBlue C442 +125 125 140 Medium Blue C443 + 51 51 200 Bright Blue C444 +120 153 190 Medium Blue C445 +153 204 240 Pale Blue C446 + 65 153 175 Medium Teal Blue C447 + 80 0 120 Aubergine C448 + 51 120 102 Dark Slate Green C449 +160 51 102 Burgundy Rose C450 +210 170 210 Light Violet C451 +153 104 220 Jacaranda C452 +225 255 204 Pale Green C453 +153 255 240 Pale Sea Green C454 + 51 153 153 Sea Green C455 + 0 190 204 Medium Teal Blue C456 + 51 180 190 Sea Green C457 + 75 120 125 Sea Green C458 +153 190 51 Med Olive Green C459 + 51 204 153 Green C460 + 0 235 255 Medium Turquoise C461 + 51 153 120 Slate Green C462 + 60 175 120 Teal Green C463 + 0 102 0 Dark Emerald C464 + 0 102 0 Dark Emerald C465 +102 102 51 Dark Olive Green C466 +175 170 255 Light Blue C467 + 51 102 102 Dark Sea Green C468 + 51 102 0 Dark Leaf Green C469 +165 153 51 Brownish Green C470 +102 102 51 Dark Olive Green C471 + 0 73 51 Dark Olive Green C472 +245 240 230 Light Grey Brown C473 +235 245 204 Light Khaki Green C474 + 51 204 180 Light teal Green C475 + 51 180 190 Sea Green C476 +204 180 170 Medium grey brown C477 +185 153 102 Burnished brown C478 +185 153 51 Rust Brown C479 +140 95 65 Brown C480 +204 204 204 Silver Grey C481 +190 190 195 Silver Grey C482 +204 204 185 Light Grey Brown C483 + 61 89 120 Dark Blue C484 + 0 165 180 Medium Teal Blue C485 + 51 153 120 Slate Green C486 +255 0 0 Red C487 +255 51 153 Hot Pink C488 +153 153 51 Med Leaf Green C489 +153 0 125 Dark Purple C490 +255 240 220 Beige C491 +178 178 185 Grey C492 +127 127 127 Medium Grey C494 +102 0 102 Dark Fuschia C495 +220 153 204 Dark Mauve C496 +102 25 75 Dark Maroon C497 +140 95 65 Brown C498 +255 230 75 Mid Gold C501 +255 250 204 Cream C502 +255 204 0 Copper C503 +204 204 51 Dark yellow C504 +255 0 102 Rose Red C505 +255 215 204 Pinkish Beige C506 +204 153 186 Dusky Mauve C507 +255 223 216 Very Pale Pink C508 +255 102 0 Orange C509 +255 0 0 Red C510 +150 175 255 Medium Blue C511 + 80 0 120 Aubergine C512 + 50 90 102 Dark Teal Blue C513 +230 190 220 Darker Lilac C514 +102 0 102 Aurifil Royal Purple C515 +102 0 102 Aurifil Royal Purple C516 +102 2 153 Aubergine C517 + 0 0 102 Navy C518 +102 0 102 Purple C519 +102 0 102 Purple C520 + 51 102 153 Teal Blue C521 + 0 185 204 Bright Aqua C522 + 53 170 130 Teal Green C523 +153 204 51 Medium Green C524 +130 191 53 Med Olive Green C525 + 51 160 102 Medium Green C526 +220 190 160 Pale Brown C527 +185 153 102 Burnished brown C528 +204 140 150 Plum Pink C529 +204 102 204 Purple C530 +153 51 51 Red brown C531 +153 102 51 Brown C532 +175 175 180 Dark Grey C533 + 80 102 125 Steel Blue C534 +153 0 204 Jacaranda C535 + 51 51 200 Bright Blue C536 +153 153 154 Medium Grey C537 +240 220 215 Brownish cream C538 +175 170 255 Light Blue C539 +220 220 224 Light Silver Grey C540 +204 180 170 Medium grey brown C541 +255 240 51 Bright yellow C542 +153 153 165 Dark Grey C544 + 0 165 120 Emerald Green C545 + 0 0 75 Dark navy C546 +153 51 80 Medium maroom C547 +153 51 115 Maroon C548 +150 190 230 Medium Blue C549 +204 255 240 Pale Turquoise C550 +220 255 204 Very Pale Green C551 +180 130 75 Light brown C552 +240 140 75 Rich Brown C553 + 80 40 0 Very dark brown C554 +178 178 185 Grey C555 +140 140 150 Dark Grey C556 +140 140 150 Dark Grey C557 + 75 75 75 Very Dark Grey C558 +175 60 120 Deep Plum C560 + 0 60 20 Dark Leaf Green C561 + 0 255 0 Light Green C638 +128 0 128 Purple C701 +255 0 255 Pink C702 +252 3 90 Dark Pink C703 +254 207 240 Light Pink C704 +174 0 0 Blood Red C705 +128 0 64 Crimson C706 +128 0 64 Crimson Red C707 +128 0 64 Crimson C708 +243 222 242 Light Pink C709 +128 0 0 Purple C710 +113 0 56 Purple C711 +128 0 64 Purple C712 +182 10 74 Sap Red C713 +255 128 192 Pink C714 +202 0 0 Red Riding Hood C715 +255 128 0 Orange C716 +223 0 0 Red C717 +128 0 64 Purple C718 +255 0 0 Red C719 +255 157 111 Light Orange C720 +255 184 149 Light Orange C721 +255 128 0 Orange C722 +204 102 0 Orange Brown C723 +185 92 0 Earth C724 +164 0 0 Red Brown C725 +166 83 0 Light Brown C726 + 97 48 48 Dark Brown C727 + 83 41 0 Wood Brown C728 +128 64 64 Brown C729 +128 64 0 Brown C730 +164 82 0 Light Brown C731 +175 175 97 Bronze C732 +162 162 81 Bronze C733 +255 183 111 Orange Brown C734 +255 128 64 Orange C735 +221 221 0 Yellow Green C736 +219 236 9 Gold C737 +242 242 0 Gold C738 +253 253 0 Yellow Gold C739 +255 255 174 Pale Yellow C740 +230 230 0 Flat Yellow C741 +242 242 0 Bright Yellow C742 +235 245 27 Gold C743 +193 193 0 Gold C744 +255 255 185 White Gold C745 +128 128 0 Bronze C746 + 0 85 43 Green C747 + 0 64 64 Green C748 + 0 255 0 Lime Green C749 + 0 128 0 Deep Green C750 + 0 157 0 Green C751 + 0 151 0 Deep Green C752 + 0 113 0 Deep Green C753 +151 255 151 Light Green C754 + 0 51 0 Forest Green C755 + 64 128 128 Teel C756 + 50 101 101 Dark Teel C757 + 49 129 142 Teel Green C758 + 89 172 172 Teel C759 + 0 164 164 Teel C760 + 50 99 99 Heavy Teel C761 + 64 128 128 Blue Teel C762 + 32 174 171 Ocean Blue C763 + 4 124 244 Midnight Blue C764 +128 128 255 Light Blue C765 + 0 0 160 Blue C766 + 37 0 149 Slate Blue C767 + 47 47 255 Baby Blue C768 + 81 81 255 Sky Blue C769 + 15 177 255 Baby Blue C770 + 0 0 160 Purple Blue C771 + 94 0 187 Light Purple C772 + 0 0 149 Dark Purple C773 + 0 0 64 Black Blue C774 + 0 0 196 Blue C775 + 0 0 179 Blue Purple C776 + 0 0 160 Deep Blue C777 + 0 0 128 Aurifil Royal Blue C778 + 0 0 113 Dark Blue C779 + 69 0 138 Purple C780 + 0 0 47 Midnight Blue C781 + 64 0 64 Crimson C782 +188 116 203 Mauve C783 +128 0 128 Purple C784 +100 0 100 Deep Purple C785 + 64 0 64 Purple Brown C786 +188 188 122 Light Brown C787 +185 185 115 Tan C788 + 79 39 0 Brown C790 +214 214 173 Tan C791 +203 203 150 Goldern Tan C792 +173 145 58 Gold C793 + 44 44 44 Night Sky C794 +185 185 185 Light Grey C795 +114 114 114 Dark Grey C796 + 0 0 130 Silver Blue C797 + 97 97 97 Grey C798 +192 192 192 Silver C799 +255 255 0 Gold PG001 +223 223 0 Gold Sliver PG002 +192 192 192 Silver PS001 +225 225 0 Golden AG001 +191 191 0 Gold AG002 +128 128 128 Silver AS001 diff --git a/extensions/fablabchemnitz/inkstitch/palettes/InkStitch BFC Polyester.gpl b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch BFC Polyester.gpl new file mode 100644 index 00000000..766f104f --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch BFC Polyester.gpl @@ -0,0 +1,324 @@ +GIMP Palette +Name: Ink/Stitch: BFC Polyester +Columns: 4 +# RGB Value Color Name Number +247 247 247 White 2168 +240 240 240 Bright White 2169 + 0 0 0 Black 2170 +235 231 219 Antique White 2172 +237 201 212 PALE Salmon Pink 2181 +252 187 209 LT Salmon Pink 2182 +248 141 172 MD Salmon Pink 2187 +230 207 217 PALE Pink 2189 +255 188 224 LT Pink 2193 +253 165 203 Pink 2198 +229 86 109 MD Pink 2199 +237 114 170 DK Pink 2202 +235 225 255 PALE Pink Ice 2208 +234 15 107 Pink Lady 2218 +196 43 112 Fushia 2219 +216 69 138 MD Fushia 2220 +215 61 99 LT Cranberry 2222 +165 42 70 MD Cranberry 2223 +166 23 85 DK Cranberry 2226 +225 140 190 MD Bright Pink 2228 +209 161 212 MD Desert Rose 2235 +168 50 97 MD Bright Plum 2241 +133 28 86 DK Bright Plum 2243 +181 66 133 DK Fushia 2245 +102 11 41 DK Burgandy 2247 +238 209 202 PLST Peach 2250 +233 172 165 LT Peach 2253 +255 138 142 MD Peach 2256 +255 105 109 DK Peach 2260 +242 124 138 DK Salmon Pink 2270 +253 152 180 MD Pink Carnation 2271 +244 71 91 DK Pink Carnation 2275 +168 54 81 Ruby Red 2278 +201 80 66 DK Red Rust 2283 + 97 37 51 DKST Burgandy 2287 +214 58 50 Bright Red 2291 +184 20 42 Cherry Red 2295 +161 25 25 Satin Red 2297 +133 0 0 DK Satin Red 2303 +116 5 11 DKST Satin Red 2306 +138 9 13 Red Wine 2307 +196 72 107 Brandy 2315 +148 55 81 MD Burgandy 2317 +194 122 161 Desert Rose 2320 +199 95 138 LT Fushia 2331 + 74 0 0 Black Wine 2342 +247 247 183 PALE Yellow 2368 +247 241 153 LT Yellow 2371 +255 239 11 Yellow 2376 +255 227 87 Buttered Popcorn 2379 +245 200 95 Buttercup 2380 +233 202 0 Bright Yellow 2385 +240 238 183 PALE Mellow Yellow 2388 +250 233 160 LT Buttered Popcorn 2390 +255 230 100 Bright Popcorn 2403 +255 196 133 LT Mock Orange 2410 +255 197 61 LT Apricot 2411 +255 191 71 MD Apricot 2412 +255 203 101 Apricot 2413 +247 182 52 DK Apricot 2414 +230 145 34 MD Mock Orange 2416 +255 146 23 DKST Apricot 2426 +255 201 159 PALE Peach Fuzz 2428 +255 183 151 MD Peach Fuzz 2430 +253 205 195 LT Melon 2433 +252 169 152 Melon 2435 +255 136 101 DK Melon 2437 +227 114 20 Bright orange 2451 +210 58 0 Orange 2454 +255 121 84 Sunset Orange 2455 +255 102 0 Red Orange 2458 +205 46 14 DK Red Orange 2465 +250 206 195 PLST Salmon 2468 +255 200 191 PALE Salmon 2473 +186 82 47 Terra Cotta 2484 +220 210 189 Beige 2490 +189 147 138 LT Rose Taupe 2499 +201 129 66 LT Terra Cotta 2504 +232 216 202 PLST Mink 2508 +217 202 190 LT Mink 2509 +255 188 182 LT Salmon 2513 +255 175 139 MD Salmon 2514 +243 170 186 LT Rose 2515 +158 106 116 MD Ash Rose 2521 +173 117 128 LT Ash Rose 2545 +125 56 68 DK Ash Rose 2546 +219 191 170 PALE Cameo 2552 +233 213 186 Bisque 2553 +117 37 38 DK Brick 2567 +191 177 168 PALE Mauve Gray 2572 +209 204 201 PALE Gray 2575 +124 97 116 MD Mauve 2581 +107 52 58 Mahogany 2586 +109 79 69 Eggplant 2602 + 64 24 24 DK Mauve 2606 +128 125 95 Nutmeg 2611 +242 205 176 LT Sandstone 2630 +133 82 39 Chestnut 2642 +215 184 127 Warm Sand 2656 +209 162 92 Mustard Gold 2657 +253 201 164 PALE Rust 2675 +236 216 183 Ecru 2689 +245 229 206 PALE Ecru 2690 +237 217 184 LT Ecru 2693 +202 140 103 DK Honey 2695 +246 214 167 LT Putty 2709 +189 97 20 Bright Rust 2721 +222 194 160 MD Putty 2729 +204 187 158 Hemp 2731 +120 73 63 MD Chestnut 2745 + 99 68 54 DK Chestnut 2747 +173 157 132 Taupe 2748 +219 215 153 PALE Gold 2751 +168 129 81 DK Mustard Gold 2756 +169 115 69 MD Rust 2758 +135 120 96 DK Taupe 2759 +149 136 104 MD Taupe 2760 +140 104 82 DKST Camel 2765 +191 151 115 Camel 2768 +166 120 90 LT Golden Brown 2772 +156 135 122 Golden Mink 2781 + 84 53 41 DK Earth 2783 + 38 14 14 DKST Earth 2784 +191 175 154 PALE Mink 2793 +106 70 46 Golden Brown 2802 +156 146 142 Mink 2808 +144 126 122 MD Mink 2809 +124 106 104 DK Mink 2817 +114 99 94 DKST Mink 2818 + 82 40 42 DKST Reddish Mink 2819 + 71 35 37 DK Reddish Mink 2821 +191 187 162 Wheat 2828 +240 226 175 Yellow wheat 2829 +255 203 130 LT Amber 2830 +255 201 121 MD Amber 2831 +255 201 63 Golden Amber 2832 +222 167 71 DK Golden Amber 2833 +222 167 57 Harvest Gold 2834 +221 194 93 LT Green Amber 2852 +132 88 59 Bronze Brown 2862 +245 221 81 PALE Olive 2870 +181 163 60 LT Olive 2873 +201 174 87 MD Olive 2881 +127 107 36 DK Olive 2899 + 69 57 43 Loden Green 2906 +255 243 201 PLST Aloe 2911 +220 221 185 PALE Aloe 2913 + 63 44 40 DK Moss 2924 + 45 44 42 DKST Green Gray 2926 +209 204 181 PALE Sage 2928 +161 149 123 LT Sage 2934 + 99 96 63 DK Yellow Green 2943 + 70 71 52 DKST Sage 2945 +227 229 216 Sage Tint White 2949 +118 141 115 Basil 2970 +139 142 140 Gray Basil 2972 +170 191 183 LT Smoke Green 3008 +126 172 135 MD Smoke Green 3009 + 66 97 63 DK Smoke Green 3013 + 61 91 63 DKST Smoke Green 3014 + 61 66 24 DKST Pine Green 3023 +240 254 238 PLST Smoke green 3028 +183 207 180 PALE Smoke Green 3032 +107 145 110 LT Spruce 3034 + 40 87 32 MD Spruce 3035 + 33 71 17 DK Spruce 3038 +162 212 178 LT Jade 3049 + 90 158 144 MD Aqua Green 3050 + 16 74 34 DKST Aqua Green 3059 +101 212 203 LT Aqua Green 3060 + 81 192 162 MD Jade 3069 + 48 166 72 DK Jade 3072 + 38 158 130 DK Aqua Green 3075 + 8 93 34 DK Emerald 3080 + 41 176 185 Bright Aqua 3082 +165 196 157 LT Moss 3092 +188 245 196 PALE Jade 3096 + 17 124 46 Pine Green 3105 +200 255 189 PLST Moss 3110 +127 147 75 Moss 3113 +143 177 101 MD Moss 3116 +188 245 204 PALE Mint 3130 +168 219 183 LT Mint 3133 + 94 125 65 Spearmint 3136 + 80 115 60 DKST Grass Green 3142 + 35 51 25 DKST Moss 3145 +239 242 199 PLST Lime 3148 +202 245 137 PALE Spring Green 3159 +155 219 99 MD Spring Green 3160 +126 204 0 Spring Green 3161 +105 140 71 DK Spring Green 3166 + 15 115 0 DKST Spring Green 3167 +155 165 40 LT Lime 3174 +148 158 46 MD Lime 3176 +173 186 55 PALE Grass Green 3178 +100 113 5 MD Grass Green 3185 +115 109 0 Dk Lime 3186 + 97 130 62 Blue Green 3194 +146 224 130 MD Mint 3200 +102 203 101 DK Mint 3201 + 40 141 35 MD Shamrock Green 3204 + 23 118 16 DK Shamrock Green 3206 +122 161 98 MD Yellow Green 3211 +113 115 0 Md Loden Green 3218 + 46 52 26 DK Loden Green 3225 +128 143 58 LT Grass Green 3235 + 91 102 42 Dk Grass Green 3238 +218 229 225 PLST Silver 3250 +119 138 117 MD Sage 3254 + 55 230 195 DKST Blue Gray 3263 +199 222 213 PLST Sea Green 3295 +143 183 195 Blue Sea Green 3299 +122 151 133 MD Sea Green 3321 + 15 29 32 DKST Blue Granite 3324 +106 119 127 MD Slate 3340 + 77 82 88 DK Slate 3345 +226 226 228 Silver Tint White 3368 +221 221 223 Gray Pearl 3369 +172 165 159 PALE Mauve Pearl 3370 +214 214 224 PALE Cloud Gray 3371 +129 131 128 LT Gray 3376 + 95 102 118 Blue Gray Granite 3379 + 67 82 94 Steel Gray 3380 +155 146 147 LT Pigeon Gray 3393 + 41 36 30 DK Pigeon Gray 3398 +207 206 204 PLST Gray 3408 +209 208 217 Silver 3409 +118 113 109 MD Pigeon Gray 3412 +137 137 145 MD Gray 3413 + 97 82 90 DK Gray 3415 + 82 79 98 LT Pewter 3416 + 99 101 122 MD Pewter 3417 + 84 86 101 DK Pewter 3418 +110 97 125 Purple Ash 3421 + 15 8 29 DKST Eggplant 3427 +233 243 254 PLST Blue 3429 +179 197 221 PALE Blue 3431 +128 159 188 Light Denim 3437 + 70 159 175 Light Turquoise 3468 + 33 113 138 Turquoise 3471 + 85 177 228 LT Peacock 3472 + 36 125 157 Peacock 3474 + 32 102 89 Deep Lake 3479 + 42 77 99 Green Blue Storm 3486 + 51 86 121 DK Lagoon 3487 + 58 92 75 DKST Lagoon 3507 +155 228 198 PALE Teal 3511 +140 229 201 PALE Teal Blue 3513 +140 234 220 LT Teal 3514 +112 209 178 MD Teal 3520 +218 255 255 PALE Aqua 3531 +198 255 255 LT Aqua 3532 + 42 143 130 DK Teal 3542 + 29 99 90 DKST Teal 3545 +218 243 237 Aqua Tint White 3550 + 67 177 192 MD Turqoise 3559 + 76 147 158 LT Mediterranean Blue 3560 + 28 149 132 Dk Turquoise 3563 + 24 30 64 Navy 3587 + 98 142 204 Light Blue Aster 3597 + 20 102 164 MD Blue Aster 3600 + 53 87 161 DK Bright Aster 3601 + 92 128 154 MD Mediterranean Blue 3604 + 45 87 120 DK Mediterranean Blue 3606 + 37 130 196 French Blue 3620 + 29 53 115 DK Marine Blue 3621 +174 212 255 LT Clear Blue 3636 +151 179 200 Dusk Blue 3639 + 13 46 100 Marine Blue 3645 + 38 42 69 DKST Navy 3646 +165 201 253 LT Bright Blue 3649 + 55 119 197 MD Bright Blue 3655 + 3 33 168 DK Bright Blue 3660 +217 235 255 PALE Clear Blue 3668 +177 214 252 LT Blue 3670 +144 175 232 PALE Aster Blue 3674 + 94 154 208 MD Clear Blue 3675 + 84 122 193 DK Clear Blue 3679 +222 229 245 Violet Tint White 3688 +185 202 246 Light Blue Violet 3690 +110 139 209 MD Blue Violet 3692 + 99 109 180 DK Blue Violet 3694 + 32 42 89 DK Heliotrope 3704 +217 200 205 PALE Eggplant 3713 +147 129 145 MD Eggplant 3714 +135 122 152 LT Purple Sage 3721 +102 88 121 MD Purple Sage 3722 + 87 77 85 DK Purple Sage 3727 +234 236 233 Lilac Tint White 3728 +223 226 230 PALE Heather 3730 +219 216 255 LT Lilac 3731 +201 187 240 MD Lilac 3733 +180 180 214 Heather 3735 +139 122 202 MD Heather 3740 +224 236 250 PLST Periwinkle 3749 +136 146 207 LT Periwinkle 3751 +117 113 172 DK Periwinkle 3752 +128 132 201 MD Periwinkle 3753 + 48 55 125 DKST Periwinkle 3756 + 76 80 143 DK Heather 3758 + 50 37 109 DK Blue Purple 3764 +214 186 205 PALE Lavender 3770 +208 198 227 LT Lavender 3772 +132 95 164 MD Lavender 3777 + 68 40 117 Blue Purple 3778 + 63 14 93 Red Purple 3783 +160 129 163 LT African Violet 3793 +147 117 148 African Violet 3794 +185 106 197 MD African Violet 3796 +116 56 153 DK African Violet 3803 + 86 33 120 DKST African Violet 3805 +255 195 243 PALE Orchid 3812 +208 107 170 MD Orchid 3821 +167 73 161 DK Orchid 3822 +239 229 255 PLST Orchid 3828 +224 218 232 PLST Mauve 3830 +210 160 189 LT Orchid 3833 +247 178 222 LT Pink Orchid 3834 +110 59 130 Purple 3841 + 74 6 74 DKST wine 3846 diff --git a/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Brildor AC.gpl b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Brildor AC.gpl new file mode 100644 index 00000000..114638e6 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Brildor AC.gpl @@ -0,0 +1,124 @@ +GIMP Palette +Name: Ink/Stitch: Brildor AC +Columns: 4 +# RGB Value Color Name Number +255 255 255 Snow White 5101 +223 221 221 Lt. Putty 5186 +191 184 184 Stainless Steel 5235 +171 160 177 Wisteria 5358 +135 128 128 Med. Dk. Gray 5381 + 72 74 74 Grey Suede 5337 + 52 58 62 Black 5338 + 0 0 0 Black 5392 +246 255 195 Parrot Green Very Light 5399 +234 253 136 Applegreen 5464 +240 253 82 Gold / Yellow 5354 +239 238 28 Gold 5353 +255 255 68 Canary 5412 +255 232 58 Neon Yellow 5224 +252 202 16 Manila 5350 +210 138 45 Bright Gold 5355 +170 112 43 Tiger Eye 5389 +116 54 32 Dark Brown 5308 +239 242 161 PaleYellow 5223 +233 172 89 Toast 5255 +204 110 51 Burnt Orange 5256 +254 78 26 Hunter Orange 5352 +236 65 39 Devil Red 5303 +200 17 17 Wild Fire 5304 +227 48 59 Warm Red 5300 +212 37 49 Dark Red / Orange 5302 +172 26 38 Cherry Red 5281 +114 26 34 Tan 5305 + 56 21 21 Dark Brown 5348 +110 56 40 Dark Brown 5343 +183 114 86 Light Brown 5344 + 54 13 21 Dark Brown 5364 +102 18 33 Brown 5363 +170 16 59 Atom Red 5490 +234 28 74 Blossem Pink Dark 5489 +253 143 120 Coral Reef 5252 +255 227 233 Oyster 5215 +255 205 209 China Rose Medium 5419 +243 166 177 Pale Pink 5360 +202 62 81 Dark Salmon Pink 5329 +106 29 40 Warm Wine 5397 + 57 24 29 Cocoa 5217 +255 139 173 Azalea 5207 +226 108 152 Medium Pink 5209 +192 66 126 Bright Pink 5435 +114 27 74 Baton Rouge 5334 +177 13 85 Wild Fuschia 5400 +157 9 64 Burgundy 5283 +202 123 127 Deep Mocha 5216 +255 218 255 Arden Lavender 5211 +180 131 189 Purple 5380 +104 50 119 Bright Mulberry 5333 + 51 18 48 Dark Purple / Navy 5497 + 24 8 25 Dk. Navy 5143 + 48 26 81 Bright Navy Blue 5361 + 90 64 127 Twilight Lupine 5443 +153 127 205 Lavender 5442 +185 179 255 Cristy Blue 5444 + 98 112 180 Medium Purple 5445 + 41 54 129 Dark Royal Blue 5446 +186 207 255 Pastal Blue 5411 + 46 67 106 Dark Navy 5142 + 16 25 69 Light Navy 5311 + 29 42 109 Dk. Royal Blue 5383 + 92 138 192 Oriental Blue 5384 +150 194 255 Lake Blue 5409 + 42 66 165 Dark Royal Blue 5373 + 28 45 132 Royal Blue 5310 +155 210 255 Pale Blue 5410 + 64 117 173 Medium Blue 5346 + 21 47 77 Dark Teal 5372 + 22 96 142 Deep Ocean 5415 + 47 183 227 Turquoise Medium Bright 5376 + 90 219 217 Light Blue / Green 5375 + 5 80 101 Teal Haze 5371 + 11 80 50 Darkest Jade 5198 + 2 88 82 Green 5285 + 38 105 90 Green Forest 5152 + 92 167 124 Sea Green Medium Dark 5404 +129 223 177 Pale Green 5145 +169 255 229 Pacific Mist 5146 +110 214 198 Medium Aqua 5197 + 38 171 156 Aqua 5496 + 19 110 72 Festive Green 5323 + 11 69 45 Deep Forest Green 5325 + 7 38 25 Olive Green 5321 + 13 110 43 Green 5327 + 22 165 54 Lt Jade 5326 + 81 197 43 Green 5408 +142 217 120 Light Jade 5393 + 83 163 58 Pear 5431 + 60 135 44 Kelly 5440 + 46 113 49 Dark Green 5441 + 14 46 37 Ivy 5199 + 3 33 33 Ivy 5320 + 12 44 26 Olive Green 5322 + 10 50 39 Ivy 5416 + 56 84 46 Harbor Green 5406 +105 130 73 Lt. Olive 5398 +177 188 106 Limerick 5405 +156 191 93 Eventide Green 5339 + 57 70 26 Alpine Green 5403 +119 143 23 Meadow Green 5480 +156 125 37 Medium Green / Yellow 5291 +184 143 43 Black Eyed Susie 5125 +179 128 71 Light brown 5340 +216 203 145 Primedor 5342 +208 190 138 Taupe 5423 +230 226 167 Light Yellow / Orange 5345 +255 255 226 Ivory White 5390 +240 244 239 Pale Blue 5391 +253 236 198 Med. Ecru 5388 +199 177 165 Victorian Rose 5160 +107 92 74 Dark Grey 5236 + 77 66 51 Best Brown 5237 +206 174 112 Light Orange 5341 +115 81 48 Chipmunk 5387 + 61 43 28 Dark Brown 5332 + 24 23 14 Espresso 5331 + 12 11 7 Espresso 5330 diff --git a/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Brildor CO.gpl b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Brildor CO.gpl new file mode 100644 index 00000000..4f7e8dc3 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Brildor CO.gpl @@ -0,0 +1,74 @@ +GIMP Palette +Name: Ink/Stitch: Brildor CO +Columns: 4 +# RGB Value Color Name Number +255 255 255 Snow White 4100 +221 221 221 Light Silver Grey 4701 +170 170 170 Stone Grey 4702 +127 127 127 Dark Grey 4704 + 89 89 89 Dark Grey 4706 + 0 0 0 Black 4999 +255 255 0 Gold / Yellow 4122 +255 255 141 Meilee Green 4101 +255 235 102 Star Gold 4118 +255 204 0 Copper 4108 +255 181 0 Goldenrod 4109 +255 164 0 Bright Orange 4110 +255 74 0 Sunkist 4112 +255 19 0 Red 4114 +200 0 0 Red Riding Hood 4211 +162 0 0 Red Brown 4212 + 87 0 0 TH Burgundy 4214 +255 171 167 Shrimp 4231 +255 89 109 Pink 4208 +255 56 89 Fluo Pink 4205 +255 92 128 Dusty Rose 4204 +255 120 167 Wild Pink 4203 +255 144 189 Carnation Medium Light 4232 +255 178 228 Orchid Pink 4202 +252 218 245 Oyster 4201 +253 225 230 Snow White 4228 +255 227 215 Peony Very Light 4230 +250 200 175 Peach 4207 +211 146 246 Tulip 4306 +132 45 174 Medium Purple 4307 + 46 23 88 Violet Blue 4413 + 18 13 49 Med. Dk. Navy 4407 + 63 81 130 Royal Blue 4434 + 20 27 93 Imperial Blue 4411 + 34 51 122 Dark Royal Blue 4410 +100 136 214 Bright Blue 4430 +172 215 255 Heron Blue 4429 +146 191 240 Angel Falls 4427 +112 145 202 Paris Blue 4438 + 55 92 163 Starlight Blue 4409 + 24 46 104 Dark Purple / Navy 4432 + 15 21 37 Charcoal 4414 + 60 106 177 Medium Blue 4431 +124 189 191 Seafrost 4403 +218 255 255 Palest Aqua 4428 +153 231 195 Pale Mint Green 4501 + 3 109 63 Green 4503 + 10 71 48 Dk. Teal 4512 + 5 115 61 Emerald Green dark 4509 + 6 147 59 Vibrant Green 4507 +170 246 193 Aqua 4504 +221 255 132 Applegreen 4513 + 90 141 44 Peapod 4538 + 52 96 30 Dark Green 4516 + 37 87 35 Safari Green 4517 + 61 139 41 Kelly 4529 +211 190 151 Taupe 4603 +224 181 79 Yolk Yellow 4612 +204 128 48 Medium Orange / Brown 4613 +219 186 118 Camel 4607 +246 246 221 Soft Carnation 4117 +246 240 195 Celery 4601 +250 227 138 Wheat 4648 +171 119 52 Brown 4651 +129 62 28 Brown 4620 + 74 38 17 Dark Oak 4621 + 43 25 11 Black 4622 + 27 15 7 Espresso 4623 + 83 26 25 Brown 4611 +153 24 29 Aurora Red 4618 diff --git a/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Brildor MF.gpl b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Brildor MF.gpl new file mode 100644 index 00000000..588e3687 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Brildor MF.gpl @@ -0,0 +1,214 @@ +GIMP Palette +Name: Ink/Stitch: Brildor MF +Columns: 4 +# RGB Value Color Name Number +255 255 243 Winter White 000 +255 255 255 Snow White 100 +230 242 255 White 268 +208 214 214 Illusion Blue 452 +109 108 104 Cloudburst 154 + 53 57 59 Black 156 + 42 45 44 Night Sky 246 + 25 30 33 Black Stallion 123 + 59 70 74 Dark Navy 155 +198 198 186 Light Green / Yellow 133 +182 175 165 Ashes Of Roses 186 +134 140 132 Dark Silver 183 +139 138 135 Wild Dove 207 +122 117 115 Charcoal 124 +104 94 89 Plum Kitten 203 + 56 51 51 Dark Grey 247 + 17 24 30 Charcoal 332 + 23 26 26 Black Stallion 527 + 18 18 18 Charcoal 999 +247 228 0 Sunshine Yellow 119 +247 203 29 Buttercup 111 +218 180 52 Pollen Gold 305 +123 95 21 Earthen Tan 185 +255 250 169 Pale Yellow 513 +255 241 93 Sunburst 112 +219 200 67 Sulphur Yellow 491 +255 226 67 Yellow 148 +254 215 10 Medium Yellow 520 +255 167 29 Mango 265 +255 229 111 Canary Yellow Medium Light 517 +255 123 37 Soleil 118 +255 148 72 Golden Poppy 504 +255 75 26 Fluo Orange 117 +255 210 147 Impala 110 +255 179 131 Orange Peach 531 +255 150 101 Tangerine 147 +215 98 51 Sunset 351 +161 66 42 Bark Medium Dark 218 +128 48 31 Burgundy 455 +192 70 45 Brick Very Dark 259 +160 11 27 Aurora Red 108 +147 10 26 Dark Red 256 +146 14 34 Baked Cherry 511 +111 15 29 Brown 227 + 95 14 31 Brown 107 + 50 10 16 Black Cherry 190 + 33 9 10 Black 223 + 43 11 19 Black 175 + 60 10 32 Parrot Green dark 176 +111 15 65 Purple Ice 145 +156 35 90 Cherrystone 116 +190 98 121 Raspberry Mauve 216 +173 19 63 Dark Red / Orange 200 +222 25 86 Salmon Dark 301 +236 62 86 Salmon Medium Dark 174 +234 93 135 Dark Pink 173 +236 103 146 Light Cerise 255 +252 230 236 Blush 249 +255 211 219 Blush Light 586 +255 192 199 Mountain Rose 240 +247 171 177 Emily Pink 135 +255 142 148 Azalea 109 +240 99 119 Dusty Rose 164 +203 57 78 Scarlet 302 +128 19 51 Maroon 235 +146 33 54 Burgundy 461 +150 54 57 Dark Orange / Red 238 +195 84 81 Dark Rust 213 +164 92 86 Antique Mauve Very Dark 252 +241 185 175 Damask Rose 136 +255 134 103 Light Tangerine 150 +255 73 66 Red 146 +206 76 93 Raspberry Medium Light 239 +179 76 82 Terra Cotta Medium Dark 233 +186 129 125 Dusty Pink medium ST17 153 +189 144 129 Salmon 334 +152 110 98 Hazel 346 +199 84 255 Cindy Purple 166 + 98 36 92 Hollyhock 151 + 53 25 46 Dark Purple / Navy 193 + 59 34 89 Purple Majesty 144 +133 85 151 Mulberry 115 +201 169 255 Tulip 143 + 97 74 173 Violet 152 + 23 18 36 Charcoal 221 + 1 20 35 Midnight Navy 205 + 52 58 81 Dark Grey / Blue 343 + 88 147 178 Blue 234 + 88 119 159 Medium Blue 261 + 44 69 140 Ultra Blue 137 + 0 26 105 Royal Blue 674 + 11 16 33 Charcoal 225 +123 155 200 Delft Blue medium 138 +143 181 223 Lake Blue 450 +138 228 255 Sky Blue 125 +179 229 255 Sun Blue 319 +185 236 255 Sun Blue 391 +140 211 255 Aquamarine 199 +111 182 254 River Mist 126 + 58 112 180 Medium Purple 220 + 0 31 74 Blue Ribbon 272 + 2 14 39 Midnight Navy 101 + 0 36 91 Dark Indigo 206 + 0 46 115 True Blue 127 + 0 73 154 Saphire 102 + 77 152 255 Medium Blue 114 + 15 124 222 Medium Royal Blue 187 + 15 134 222 Bright Blueberry 113 + 0 37 66 Navy 314 + 45 77 115 Federal Blue 182 + 0 83 114 Peacock 283 + 65 166 224 Medium blue 128 +167 232 242 Pacific Mist 167 +219 255 255 Light Blue 103 +171 255 242 Light turquoise 243 + 72 210 225 Aqua Pearl 129 + 0 116 128 Dark Aqua Green 168 + 0 53 68 Deep Slate Blue 236 + 0 134 115 Isle Green 139 + 87 176 149 Emerald Green 165 +106 206 170 Green Light Bright 142 + 12 115 103 Teal Green Dark 140 + 17 62 73 Deep Teal 179 + 70 128 128 Teel 292 +125 197 161 Teal Green 219 + 22 65 65 Shaded Spruce 350 + 14 53 43 Ivy 189 + 9 37 35 Olive Green 104 +137 158 134 Blue Green 211 +157 164 130 Cypress 210 + 76 102 76 Kahki Green 237 +105 142 92 Green Pepper 214 + 99 164 131 Green Spruce 212 +163 215 150 Light Green / Yellow 204 +109 208 125 Pale Green 106 + 0 99 54 Dark Green 130 + 0 67 51 Evergreen 295 + 15 55 40 Ivy 178 + 0 96 51 Shamrock Green 294 + 55 149 67 Dark Green 313 + 61 157 48 Kelly Green 355 + 99 195 48 Electric Green 120 +181 240 72 Flite Green 490 +191 218 89 Spring Fern 162 +170 191 73 Lime 163 + 71 91 32 Palmetto 257 + 20 53 29 Olive Green 232 + 75 124 76 Dark Green 188 + 58 69 43 Pale Yellow / Green 254 + 84 95 47 Pale Green 131 +166 186 118 Lettuce Heart Green 226 +186 186 119 Light Brown 229 +113 112 70 Dark Green / Yellow 169 + 88 95 61 Medium Green / Yellow 132 + 54 61 40 Ebony Black 231 + 28 35 23 Black 248 + 10 32 28 Olive Green 245 +145 132 98 Light Green / Yellow 161 +198 190 170 Overcast 202 +190 180 161 Sand 330 + 90 85 67 Dark Grey / Green 134 + 45 47 36 Midnight Metal 534 + 20 32 29 Black Stallion 300 +117 91 61 Earthen Tan 480 +255 238 191 Ecru 250 +237 220 162 Straw Yellow 191 +233 212 155 Candy Tan 184 +179 144 102 Lark 197 +173 145 95 Prairie Wheat 315 +136 116 68 Olive Green 251 +123 104 67 Cinnamon 532 +163 143 108 Olive Drab 443 +184 164 128 Cane 539 +206 194 152 Sandy Shore 526 +233 229 187 Medium Yellow 209 +181 148 122 Natural 327 +117 92 73 Bagby Green 159 + 55 47 35 Dk. Black Brown 242 + 49 44 35 Midnight Metal 181 + 30 25 21 Midnight Blue 260 + 42 28 19 Black 157 +119 91 80 Chocolate Brown 208 +194 141 100 Bamboo 323 +163 104 52 Tan Brown 215 +134 90 50 Light Cocoa 192 + 53 33 24 Dark Brown 158 + 65 33 26 Dark Oak 275 + 32 25 19 Black 486 + 23 21 18 Charcoal 306 +249 222 162 Linen 122 +255 230 172 Blonde 160 +227 190 147 Cornsilk 253 +172 113 57 Cocoa Brown 121 +106 43 30 Tan 676 + 89 26 24 Brown 311 +231 199 58 Fluo Yellow 347 +206 131 43 Pollen Gold 195 +174 89 26 Coppertone 224 +100 59 21 Mushroom 196 +238 218 136 Pale Yellow / Gold 228 +218 174 82 Mustard 325 +200 138 50 Golden Brown medium 244 +175 130 49 Palomino 465 +127 84 25 Fawn Dark 304 +109 67 20 Sand Dune 530 + 87 57 20 Mocha Brown / Very Dark 194 + 87 59 28 Brown 630 + 88 226 16 Fluorescent Green 170 +255 67 41 Fluo Pink 171 +217 255 0 Lemon 172 diff --git a/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Brildor NY.gpl b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Brildor NY.gpl new file mode 100644 index 00000000..68faab6b --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Brildor NY.gpl @@ -0,0 +1,184 @@ +GIMP Palette +Name: Ink/Stitch: Brildor NY +Columns: 4 +# RGB Value Color Name Number +255 255 255 Snow White 3005 +255 249 243 White Silk 3001 +235 228 214 Yellow / Gold 3087 +214 207 195 Light Grey / Green 3085 +154 154 154 Medium Grey 3011 +121 121 121 Beaver Grey / Dark 3012 + 94 94 94 Medium Grey 3118 +132 123 106 Pine Bark 3062 + 79 77 77 Dark Grey 3361 + 58 57 57 Black 3239 + 72 62 62 Black Chrome 3240 +117 97 86 Deep Taupe 3136 +145 119 122 Lasting Cocoa 3040 + 87 87 91 Dark Grey 3041 + 5 16 29 Black 3241 + 3 11 22 Black 3009 + 0 0 0 Black 3000 +255 255 167 Pale Yellow 3067 +255 255 93 Lemon Yellow 3135 +255 229 0 Mimosa Yellow 3124 +245 190 19 Gold 3125 +228 160 23 Gold / Orange 3172 +194 117 0 Almond 3025 +255 244 112 Pastel Yellow 3066 +249 219 88 Star Gold 3270 +230 176 64 Mustard Yellow 3070 +140 94 24 Desert Very Dark 3192 +165 128 0 Autumn Green 3352 +229 214 45 Pale Beige 3159 +207 128 31 Pollen Gold 3225 +214 137 53 Golden Earth 3173 +238 255 77 Gold / Yellow 3023 +243 255 36 Yellow 3223 +255 243 36 Canary Yellow 3064 +255 226 17 Yellow Finch 3068 +255 202 10 Canary 3024 +255 154 1 Honey Dew 3137 +255 119 1 Pumpkin 3065 +190 59 1 Bright Rust 3021 +170 29 1 Med. Maple 3221 +155 6 0 Cherrywood Red 3039 +133 6 15 Cranberry 3038 +105 13 21 Brown 3174 + 46 0 9 Dark Chocolate 3236 + 70 0 25 Mahogany 3035 + 84 0 21 Dark Chocolate 3384 +104 0 24 Brown 3182 +122 0 21 Cranberry 3181 +184 0 18 Red Jubilee 3147 +178 0 0 Red Jubilee 3037 +214 28 16 Foxy Red 3378 +235 44 19 Scarlet 3078 +255 76 14 Pumpkin 3278 +255 94 18 Neon Orange 3178 +255 146 56 Neon Orange 3155 +231 118 50 Amberglow 3226 +185 40 21 Light Orange / Red 3179 +181 0 28 Medium Red / Orange 3184 +157 0 29 Dark Red 3081 +152 0 25 Dark Red 3281 +255 223 255 White 3115 +255 197 255 Pale Mauve 3116 +255 144 240 Mid Lilac 3321 +234 95 206 Medium Pink 3309 +221 10 111 Cheeky Pink 3109 +198 20 82 Dark Pink 3110 +166 4 55 Pomegranate 3383 +129 9 42 Tahoe Red 3183 +140 0 65 Cranberry 3310 +203 18 67 Rose / Very Dark 3354 +223 43 90 Carmine Rose Medium 3117 +254 125 170 Wild Pink 3108 +255 147 176 Pink Lemonade 3315 +255 153 145 Antique Rose Medium Light 3016 +255 145 123 Coral Reef 3020 +241 192 153 Peach Pastel 3017 +255 203 162 Copper 3053 +255 189 164 Cinnamon Light 3018 +255 162 151 Blossem Pink Light 3019 +255 147 126 Coral Reef 3254 +255 201 255 Pale Mauve 3120 +255 171 239 Orchid Pink 3121 +150 69 150 Violet 3080 +130 49 98 Cerise 3235 + 86 28 94 Purple 3033 + 51 24 56 Dark Purple / Navy 3122 + 57 23 87 Dark Purple 3112 +166 122 244 Purple 3311 +192 128 255 Russian Saga 3232 +130 50 180 Amethyst 3032 + 72 39 102 Ultraviolet 3312 + 71 49 144 Deep Purple 3330 + 47 69 151 Medium Royal Blue 3143 +174 203 240 Pale Blue 3074 +142 179 230 Sky Blue 3075 + 57 89 188 Medium Blue 3029 + 46 72 174 Jamie Blue 3133 + 21 43 111 Dk. Royal Blue 3134 + 7 11 26 Black 3244 + 11 15 79 Navy Blue 3166 + 19 33 118 Prussian Blue 3076 + 43 77 162 Dark Royal Blue 3176 + 10 29 78 Navy Blue 3042 + 8 23 59 Navy Blue 3242 + 13 17 44 Deep Arctic Sky 3243 +203 214 255 Pastal Blue 3153 +173 187 223 Lake Blue 3030 + 37 79 125 Lake Blue 3028 + 31 67 111 Navy Blue 3175 + 7 14 24 Black 3044 +153 211 245 Pale Blue 3092 +138 190 221 Dark Seashell Blue 3027 + 96 130 169 Slate Blue 3360 + 29 47 71 Blue Velvet 3364 + 15 25 33 Charcoal 3043 + 74 151 128 Winter Green 3227 + 35 72 101 Delft Bleu Medium Dark 3160 + 4 43 139 Brilliant Blue 3297 + 0 108 160 Pro Band Blue 3295 + 0 140 185 Blue Horizon 3095 + 77 239 255 Capri 3093 + 0 32 40 Ivy 3162 + 0 44 52 Ivy 3161 + 15 53 63 Dark Blue 3252 + 32 145 177 Horizon Blue 3291 + 68 180 197 Capri 3089 +161 242 255 Powder Blue 3292 + 0 118 93 Alpine Teal 3246 + 4 56 46 Beau Geste 3185 + 7 33 23 Ocean Teal 3390 + 5 40 34 Ivy 3290 + 0 45 37 Ivy 3371 + 13 99 60 Dark Green 3279 + 70 210 150 Peppermint 3046 +162 247 171 Green Oak 3047 + 37 64 37 Foliage Green 3392 + 16 37 16 Ocean Teal 3303 + 6 54 24 Dark Leaf Green 3370 + 0 73 25 Dark Green 3250 + 0 90 19 Dark Green 3079 + 11 115 22 Jade 3051 + 0 118 51 Green 3247 + 7 45 29 Olive Green 3103 + 60 132 23 Green 3049 + 53 112 19 Green 3170 + 89 149 15 Meadow 3169 +169 213 75 Dark Green Oak 3104 +186 221 110 Tamarack 3100 + 14 32 20 Ocean Teal 3393 + 20 40 25 Olive Green 3394 + 79 95 40 Green / Yellow 3156 +103 124 32 Meadow 3106 +192 203 43 Dark yellow 3350 +223 249 117 Pale Yellow 3150 +189 182 84 Misted Yellow 3105 + 75 78 42 Mars Green 3306 + 81 82 36 Calla Green 3157 +167 137 73 Light Green / Yellow 3338 +255 255 241 Light Beige 3003 +235 238 205 Light Yellow 3071 +240 230 179 Wax Yellow 3072 +233 211 164 Banana Crepe 3149 +193 140 108 Dk. Ecru 3142 + 58 34 23 Dark Brown 3336 + 97 66 37 Brown 3144 +175 140 103 Light Brown 3128 +214 205 146 Primedor 3060 +222 201 141 Primedor 3082 +255 231 152 Popcorn 3084 +252 216 129 Glow 3055 +124 90 45 Chocolate Brown 3344 +255 205 135 Visor Gold 3127 +185 107 44 New Penny 3126 +148 81 31 Brown 3056 +116 62 31 Dark Brown 3057 + 85 32 21 Fudge Dark 3158 + 68 25 16 Dark Oak 3058 + 37 20 16 Black 3145 + 20 15 13 Espresso 3129 + 12 7 6 Espresso 3130 diff --git a/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Brildor PB.gpl b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Brildor PB.gpl new file mode 100644 index 00000000..60ccae7f --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Brildor PB.gpl @@ -0,0 +1,264 @@ +GIMP Palette +Name: Ink/Stitch: Brildor PB +Columns: 4 +# RGB Value Color Name Number +240 243 242 White 1090 +250 251 252 White 1100 +187 189 187 Winter Sage 1971 +165 171 165 Aqua Gray 2702 +172 181 162 Steel Grey 1140 + 83 94 99 Bleu Mist Dark 2704 + 50 58 59 Black 2706 + 29 33 42 Black 2707 + 11 14 17 Black 1674 + 10 14 16 Black 1999 +217 213 185 Cream 2701 +169 154 148 Gravel 1139 +113 129 110 Willow 1218 +144 141 143 Cinder 2131 + 77 82 97 Petrol Blue 2674 + 67 66 78 Dark Navy 1612 +255 221 0 Canary 1177 +255 237 0 Manila 2122 +254 255 58 Daffodil 2120 +250 255 140 Meilee Green 1270 +238 246 232 Pale Yellow-Green 1101 +255 255 221 Jonquil Very Light 1071 +255 254 184 Pale Yellow 1300 +255 253 150 Celery 1162 +255 252 114 Glow 1163 +255 228 82 Hawaiian Sunrise 2106 +255 218 103 Star Gold 2108 +255 187 69 Scholastic 1165 +240 157 52 Orange Sorbet 2010 +246 76 16 Reddish Brown 1102 +239 69 0 Sunkist 1800 +235 31 18 Red 1804 +243 47 23 Scarlet 1305 +239 220 103 Yellow Cream 1640 +244 181 76 Amber 1167 +127 27 17 Cherokee Red 1334 +183 47 23 Light Orange / Red 1021 +255 84 40 Fluorescent Orange 1168 +244 160 90 Medium Orange 2111 +247 223 193 Almond Oil 1060 +253 188 139 Pooh 1362 +255 129 69 Orange 1352 +226 173 137 Pink Sand 2645 +195 135 106 Tawny Birch 1255 +138 36 25 Burgundy 2618 +184 51 41 Dark Rust 2616 +168 40 27 Light Orange / Red 2210 + 39 11 13 Black 2216 + 93 14 18 Brown 2214 +125 6 11 Cranberry 1263 +156 8 11 Deep Scarlet 2212 +185 10 13 Red Jubilee 2211 +201 11 14 Carmine 1703 +219 12 15 Foxy Red 1169 +137 16 13 Cranberry 1913 +161 7 19 Dark Red 1902 +195 18 26 Wild Fire 1170 +230 80 84 Medium Red / Orange 2209 +240 115 124 Confetti 1840 +146 8 14 Dark Red 1906 +185 8 21 Red Jubilee 1900 +229 66 84 Medium Red / Orange 2205 +240 106 132 Light Cerise 2204 +250 153 180 Pale Pink 2203 +250 164 182 Pale Pink 1151 +252 200 214 Memphis Belle 2232 +254 234 236 Carnation Ultra Light 2202 +170 44 51 Rust 1921 +162 55 70 Terra Cotta 1741 +220 103 125 Petal Pink 2152 +208 131 144 Heather Pink 1199 +227 169 172 Pale Salmon 1761 +253 224 220 Rosewater 1145 +197 90 97 Coral Flame 1308 +250 228 221 Peony Very Light 2228 +249 173 156 Champagne Pink 1159 +255 151 130 Coral Reef 1532 +242 149 112 Salmon 2207 +253 198 156 Peach Fuzz 2615 +140 33 49 Dark Red S 1188 +184 19 58 Medium Red 2300 +210 35 83 Crimson Red 1158 +225 80 123 Azalea 1157 +251 156 202 Dark Pink 1155 +255 182 213 Pale Pink 1152 +249 202 244 Orchid Pink 2301 +254 227 249 White 2305 +222 158 198 Light Pink 1153 +215 112 187 Medium Pink 2310 +130 37 93 Dark Purple 1144 +152 48 103 Boysenberry 2304 + 72 14 46 Dk. Chestnut 2715 + 50 23 49 Dark Purple / Navy 1536 + 28 19 42 Midnight Blue 2414 +118 29 47 Dark Maroon 2506 + 82 28 52 Dark Purple 2711 + 68 39 56 Plum 1189 +158 110 167 Sugar Plum 2241 +243 227 244 Light Pink 1186 +213 181 222 Soft Tulip 1142 +160 101 172 Sugar Plum 1187 +118 58 147 Cachet 2308 + 75 42 97 Blackberry 1039 + 31 27 57 Dark Purple 1353 +208 145 200 Purple 2045 + 91 35 78 Medium Purple 2810 + 25 21 71 Dark Purple 1602 + 43 23 111 Dark Purple Blue 1541 + 65 47 140 Deep Purple 1210 + 60 42 109 Violet Blue 1211 + 38 27 76 Dark Navy 1182 + 32 25 45 Midnight Navy 1355 + 87 91 206 Marine Blue 1331 + 33 28 139 Team Blue 2439 +208 235 255 Ice Blue 1113 +189 213 255 Pastal Blue 1117 +139 179 255 Medium Blue 1119 +115 153 255 Medium Blue 1120 + 83 104 182 Corn Flower 2431 + 62 98 184 Medium Blue 1121 + 29 52 147 Dark Blue 2410 + 23 42 119 Provence 2411 + 14 29 87 Navy Blue 1122 + 36 32 81 Dark Navy 1184 + 22 26 62 Navy 2440 + 21 19 38 Charcoal 1241 +232 236 239 Pearl Grey 1138 +212 220 240 Pale Silver 1114 +199 210 255 Pastal Blue 1115 +161 179 255 Medium Blue 2438 + 81 107 159 Medium Blue 2434 + 34 38 75 Blueberry Blue 1037 + 59 78 108 Ash 1953 + 42 54 82 Dark Navy 1743 + 56 160 218 Medium blue 2441 + 53 135 208 Sapphire 2442 + 34 95 178 Magic Blue 2443 + 25 66 136 Blue Twirl 1797 + 75 96 124 Dark Grey / Blue 1842 + 95 127 151 Ocean Blue 2403 +208 229 255 Ice Blue 1116 +124 165 213 Little Boy Blue 2430 + 62 114 165 Blueball 2404 + 36 80 136 Blue Dusk 2405 +252 253 253 Paper White 2428 +208 238 250 Ice Blue 1112 +138 211 236 Light Blue / Green 2230 + 62 139 194 Blithe 1181 +202 228 228 Cobalt Bleu 1250 +131 203 205 Pale Turquoise 1430 + 83 168 180 Bright Blue 1128 + 36 98 126 Imperial Blue 1421 + 20 49 78 Dark Teal 1442 + 17 36 64 Navy 1033 + 27 52 70 Atlantic 1644 + 24 45 61 Flag Blue 1515 + 58 99 94 Dark Blue / Green 1185 +102 138 129 Cilantro 1201 +206 255 226 Sprite 1125 +143 234 186 Pale Aqua 1126 + 55 135 117 Jade 1610 +223 255 227 Palest Mint 2501 +125 205 154 Pale Aqua 2502 + 17 129 92 Jade 2503 + 10 59 37 Ivy 1137 + 12 41 30 Olive Green 1374 + 21 43 26 Olive Green 1207 + 7 90 30 Dark Green 2509 + 8 125 35 Green 2531 + 9 146 41 Veggie Green 1988 + 10 168 47 Lt Jade 1613 + 78 196 91 Poison Green 2507 + 7 96 32 Dark Green 1422 + 19 65 31 Green 1326 +105 221 132 Pale Green 1179 + 24 154 83 Emerald Green 1710 + 27 76 47 Dark Mint Green 2335 + 44 92 58 Pistachio Green dark 2511 +125 176 121 Easter Green 1212 +155 209 147 Medium Mint Green 2510 + 78 171 64 Medium Lime 1264 +126 221 75 Bright Green 1135 +208 243 161 Dark Olive Green 1131 +151 238 152 Light Green 1130 +208 255 195 Pale Green 2504 +238 255 232 Silver Grey 1123 + 69 94 47 Green / Yellow 1176 +218 245 160 Dark Olive Green 1129 +167 215 100 Apple Green 2822 + 99 144 27 Meadow Green 2833 + 73 107 25 Palmetto 2538 + 37 65 21 Blue Spruce 2518 +150 190 24 Peapod 2515 + 64 87 10 Dark Olive 1934 +189 255 9 Olive Green Light 2514 +161 223 19 Lime Green 2527 +255 255 219 Jonquil Very Light 1124 +244 255 138 Meilee Green 2513 +185 215 77 Flite Green 1132 +179 192 81 Pale Green Oak 1133 + 95 102 41 Lt. Army Green 1173 + 68 65 37 Black Avocado Green 1156 + 46 62 33 Field Green 1072 +105 124 2 Meadow Green 2133 +130 127 1 Bronze 2132 +179 185 41 Lime 1732 +224 217 21 Yellow 1721 +195 165 37 Gold 2901 + 92 115 85 Juniper Medium Dark 1463 + 94 80 65 Dark Fawn 1776 +147 160 133 Pale Green 1873 +187 184 166 Silver Cloud 1254 +145 134 120 Medium Green / Yellow 1874 +191 170 156 Light Brown 1106 +232 218 181 Tan Light 1104 +241 241 211 Vanilla Ice 1103 +204 182 130 Light Brown 1672 +185 164 112 Lark 2091 +133 132 63 Caper 1552 +202 161 82 Medium Honey 2612 +218 137 51 Golden Earth 1164 +200 145 54 Old Gold 1290 +195 134 51 Golden Brown medium 1166 +214 108 22 Rust 1625 +183 79 16 Brick Dark 1940 +134 50 19 Bark 1932 +120 50 19 Coffee Dark 2610 +127 73 45 Brown 2620 + 62 24 23 Dark Oak 1855 + 55 21 20 Dark Brown 1846 + 20 9 8 Espresso 2623 + 42 26 16 Black 2621 +123 91 57 Sand Dune 2604 + 68 43 27 Dark Brown 1945 +217 186 97 Rice Paper 2650 +134 86 40 Brown 1240 +192 142 53 Old Gold 1941 +218 155 51 Pollen Gold 2613 +221 163 63 Artisan Gold 2608 +238 207 125 Cornsilk 1107 +255 225 159 Linen 1161 +255 230 158 PaleYellow 2648 +225 196 100 Gold 2607 +207 160 77 Medium Honey 2651 +203 149 71 Pale Orange / Brown 1109 + 85 55 25 Mocha Brown / Very Dark 1110 +255 165 69 Singh Mist 2930 +255 131 56 Medium Orange 2931 +255 73 0 Sunkist 2946 +255 35 0 Crimson Red Light 2937 +255 112 84 Persimmon 2932 +255 64 86 Fluo Pink 2922 +255 240 0 Gold / Yellow 2983 +242 54 94 Pink 2920 +254 96 129 Dusty Rose 2921 +241 0 62 Deep Coral 2912 +233 255 73 Gold / Yellow 2967 +222 250 24 Gold 2910 + 68 246 30 Fluorescent Green 2940 + 63 230 7 Erin Green 2911 diff --git a/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Brother Country.gpl b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Brother Country.gpl new file mode 100644 index 00000000..c15e8989 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Brother Country.gpl @@ -0,0 +1,65 @@ +GIMP Palette +Name: Ink/Stitch: Brother Country +Columns: 4 +# RGB Value Color Name Number + 0 0 0 Black 100 +240 240 240 White 000 +231 2 104 Red 149 +253 86 110 Pink 155 +204 40 56 Deep Rose 024 +252 141 175 Flesh Pink 152 +160 7 78 Dark Fuchsia 126 +255 66 9 Vermilion 148 +229 0 51 Carmine 158 + 69 4 81 Royal Purple 636 +103 0 112 Magenta 625 +241 159 188 Salmon Pink 122 +233 76 100 Amber Red 212 +254 254 123 Lemon Yellow 342 +251 251 32 Yellow 043 +251 233 106 Harvest Gold 334 +250 182 0 Orange 335 +250 173 78 Pumpkin 322 +250 183 0 Tangerine 336 +255 239 168 Cream Brown 331 +255 235 132 Cream Yellow 370 +228 152 59 Khaki 242 +242 153 14 Deep Gold 354 +238 204 12 Brass 404 +252 219 161 Linen 025 + 29 24 3 Dark Brown 717 +254 71 12 Reddish Brown 264 +184 116 50 Clay Brown 224 +240 213 179 Beige 012 +172 154 97 Warm Gray 706 +186 163 8 Russet Brown 414 +104 36 8 Light Brown 255 +116 198 177 Seacrest 505 +200 220 200 Mint Green 461 +119 196 135 Leaf Green 463 + 13 42 7 Olive Green 476 +176 207 120 Dark Olive 473 +120 199 159 Teal Green 483 + 0 81 39 Emerald Green 485 + 0 48 30 Deep Green 467 +203 233 162 Fresh Green 442 +182 221 17 Lime Green 444 + 81 137 33 Moss Green 446 + 0 99 144 Blue 586 + 10 89 163 Ultramarine 575 +213 236 235 Light Blue 150 +177 226 223 Sky Blue 512 + 8 90 111 Electric Blue 564 + 5 96 96 Peacock Blue 057 + 6 41 52 Prussian Blue 588 + 85 127 186 Corn Flower Blue 015 +243 111 177 Light Lilac 133 +196 160 207 Lilac 623 +180 128 196 Violet 624 +105 21 136 Purple 635 +146 133 195 Lavender 604 +156 190 219 Wistaria Violet 003 +168 171 173 Pewter 745 + 16 20 12 Dark Gray 747 +224 202 198 Silver 020 +110 100 82 Gray 734 diff --git a/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Brother Embroidery.gpl b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Brother Embroidery.gpl new file mode 100644 index 00000000..915989ed --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Brother Embroidery.gpl @@ -0,0 +1,65 @@ +GIMP Palette +Name: Ink/Stitch: Brother Embroidery +Columns: 4 +# RGB Value Color Name Number + 0 0 0 Black 900 +240 240 240 White 001 +237 23 31 Red 800 +249 147 188 Pink 085 +246 74 138 Deep Rose 086 +253 217 222 Flesh Pink 124 +199 1 86 Dark Fuchsia 107 +254 55 15 Vermilion 030 +247 56 102 Carmine 807 +119 1 118 Royal Purple 869 +145 54 151 Magenta 620 +252 187 196 Salmon Pink 079 +181 76 100 Amber Red 333 +240 249 112 Lemon Yellow 202 +255 255 0 Yellow 205 +255 217 17 Harvest Gold 206 +254 186 53 Orange 208 +254 179 67 Pumpkin 126 +254 158 50 Tangerine 209 +255 255 179 Cream Brown 010 +255 240 141 Cream Yellow 812 +208 166 96 Khaki 348 +232 169 0 Deep Gold 214 +186 152 0 Brass 328 +254 227 197 Linen 307 + 42 19 1 Dark Brown 058 +209 92 0 Reddish Brown 337 +209 84 0 Clay Brown 339 +239 227 185 Beige 843 +216 204 198 Warm Gray 399 +125 111 0 Russet Brown 330 +178 118 36 Light Brown 323 +168 221 196 Seacrest 542 +158 214 125 Mint Green 502 +102 186 73 Leaf Green 509 + 19 43 26 Olive Green 519 + 67 86 7 Dark Olive 517 + 0 135 119 Teal Green 534 + 0 103 62 Emerald Green 507 + 0 56 34 Deep Green 808 +227 243 91 Fresh Green 027 +112 188 31 Lime Green 513 + 47 126 32 Moss Green 515 + 10 85 163 Blue 405 + 11 61 145 Ultramarine 406 +168 222 235 Light Blue 017 + 37 132 187 Sky Blue 019 + 9 91 166 Electric Blue 420 + 19 74 118 Peacock Blue 415 + 14 31 124 Prussian Blue 007 + 75 107 175 Corn Flower 070 +228 154 203 Light Lilac 810 +145 95 172 Lilac 612 +106 28 138 Violet 613 + 78 41 144 Purple 614 +178 175 212 Lavender 804 +104 106 176 Wistaria Violet 607 + 79 85 86 Pewter 704 + 41 49 51 Dark Gray 707 +168 168 168 Silver 005 +135 135 135 Gray 817 diff --git a/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Coats Alcazar Jazz.gpl b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Coats Alcazar Jazz.gpl new file mode 100644 index 00000000..f9cd6c9d --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Coats Alcazar Jazz.gpl @@ -0,0 +1,308 @@ +GIMP Palette +Name: Ink/Stitch: Coats Alcazar Jazz +Columns: 4 +# RGB Value Color Name Number +230 232 255 White 0001 +236 230 89 Light Yellow 0002 +239 218 23 Yellow 0003 +241 215 0 Yellow 0005 +242 175 30 Light Orange 0012 +217 169 49 Light Orange 0013 +196 156 48 Brown / Gold 0014 +190 138 16 Orange / Brown 0015 +170 115 23 Brown / Olive 0016 +157 114 73 Brown 0017 +133 127 53 Dark Green / Yellow 0020 +233 233 232 White 0022 +170 141 84 Medium Yellow 0025 +226 222 218 Light Orange / Red 0026 +168 140 102 Pale Brown 0027 +160 88 7 Orange / Brown 0031 +233 235 227 Light Yellow 0101 +241 218 151 Light Yellow 0104 +235 223 129 Pale Yellow / Gold 0105 +241 143 0 Medium Orange 0109 +242 139 0 Medium Orange 0120 +241 124 0 Orange 0122 +104 89 35 Dark Green / Yellow 0129 +205 147 66 Pale Orange / Brown 0131 +200 131 49 Medium Orange / Brown 0132 +244 196 71 Yellow Gold 0134 +245 190 34 Medium Orange 0135 +208 170 46 Medium Yellow 0136 +224 208 190 Light Orange 0137 +156 115 44 Medium Brown 0138 +175 100 0 Orange / Brown 0141 +228 207 151 Light Yellow / Orange 0150 +232 197 187 Pale Orange 0203 +243 173 154 Pale Orange 0205 +239 143 120 Medium Orange 0206 +233 96 5 Orange 0208 +173 43 22 Light Orange / Red 0209 +235 147 150 Light Orange 0212 +219 49 0 Orange / Red 0215 +223 185 167 Pale Orange 0218 +170 76 40 Brown 0219 +223 87 0 Orange 0220 +225 176 178 Medium Pink 0221 +241 137 53 Medium Orange 0222 +201 159 120 Light Red / Orange 0225 +214 86 110 Medium Pink 0227 + 91 29 40 Dark Brown 0231 +224 183 161 Pale Orange 0242 +187 133 92 Pale Red / Orange 0245 +128 75 40 Brown 0250 +239 186 144 Light Orange 0252 +237 87 0 Orange 0260 +188 93 61 Brown 0262 +161 76 66 Dark Red / Orange 0265 +110 51 54 Dark Brown 0271 +189 0 26 Medium Red / Orange 0300 +161 0 43 Dark Red / Orange 0303 +217 131 146 Medium Pink 0306 +169 0 73 Red 0307 +128 39 61 Brown 0311 +231 194 222 Light Pink 0316 +185 87 120 Dark Pink 0317 +185 221 189 Light Green / Yellow 0318 +140 44 77 Brown 0319 +140 54 87 Brown 0322 +160 0 37 Dark Red 0323 +135 68 80 Dark Brown 0326 +213 62 98 Red 0327 +115 62 86 Dark Purple 0329 +112 30 81 Dark Purple 0330 +208 83 158 Medium Pink 0331 +227 155 198 Light Pink 0335 +188 99 150 Medium Pink 0337 + 98 46 77 Dark Purple 0338 +190 92 144 Medium Pink 0339 +173 0 58 Dark Red 0343 +168 0 36 Red 0344 +143 0 49 Dark Red 0345 + 73 33 60 Dark Purple 0346 +123 16 53 Dark Purple 0347 +100 31 52 Brown 0349 + 89 32 55 Dark Purple 0350 +236 207 222 Light Pink 0355 +215 96 143 Dark Pink 0358 +199 23 94 Red 0361 +140 0 50 Red 0363 +227 162 190 Light Pink 0364 +214 109 135 Medium Pink 0365 +220 101 98 Dark Red / Orange 0367 +197 0 48 Red 0372 +188 0 89 Dark Red 0373 +157 0 93 Dark Red 0377 + 68 35 44 Dark Purple 0380 +184 0 93 Dark Pink 0383 +166 124 138 Light Purple 0406 +161 154 125 Pale Green / Yellow 0410 +115 99 93 Medium Brown 0412 + 83 69 66 Dark Brown 0414 +132 100 73 Medium Brown 0416 + 95 61 55 Dark Brown 0418 +148 127 100 Light Green / Yellow 0419 +171 151 125 Light Brown 0420 +157 145 132 Light Brown 0421 +209 208 203 Light Green 0423 +193 182 168 Light Brown 0426 +134 129 119 Dark Grey 0427 +211 205 166 Light Green / Yellow 0430 +191 165 137 Pale Orange 0432 + 91 64 60 Dark Brown 0441 +203 192 191 Light Purple 0442 + 69 50 48 Black 0443 +142 121 121 Medium Brown 0445 +120 118 100 Medium Green / Yellow 0446 +187 172 154 Light Brown 0449 +161 138 129 Light Brown 0450 +194 171 149 Pale Orange 0457 +110 82 58 Brown 0460 +102 65 40 Brown 0461 + 75 52 45 Dark Brown 0462 + 62 48 51 Black 0463 + 74 36 37 Dark Brown 0466 + 58 33 40 Dark Brown 0467 +230 198 199 Medium Pink 0471 +212 205 195 Light Grey / Green 0473 +200 180 163 Light Brown 0474 +143 102 52 Medium Orange / Brown 0477 + 84 57 45 Dark Brown 0481 +154 129 113 Pale Brown 0484 +142 114 96 Pale Brown 0486 +112 82 60 Medium Brown 0487 + 59 64 33 Green 0488 +233 232 191 Light Yellow 0489 +190 206 189 Light Green 0503 +119 162 142 Pale Green / Blue 0505 + 0 83 61 Dark Green 0510 + 35 77 48 Dark Green 0512 + 0 134 66 Green 0519 + 34 63 47 Dark Green 0520 +154 217 224 Light Blue / Green 0521 + 30 178 167 Medium Blue / Green 0523 + 0 172 171 Medium Green / Blue 0524 +102 199 202 Light Blue / Green 0525 + 0 138 111 Medium Green / Blue 0528 + 0 140 125 Medium Green / Blue 0529 + 0 93 77 Green 0530 + 0 96 93 Dark Green / Blue 0531 + 96 162 153 Medium Green / Blue 0536 + 27 71 63 Dark Green / Blue 0538 +181 192 159 Dark Green / Yellow 0540 +160 195 149 Light Green 0542 +157 215 210 Light Green / Blue 0543 + 94 195 159 Medium Green 0551 +101 115 84 Medium Blue / Green 0552 + 0 107 49 Green 0555 + 0 137 77 Green 0557 + 0 119 68 Green 0558 +120 180 57 Green / Yellow 0560 + 47 59 41 Dark Green 0563 +138 140 122 Pale Grey 0564 + 75 170 130 Green 0569 + 60 121 72 Dark Green 0570 + 19 84 44 Green 0573 + 32 143 107 Medium Green 0574 + 0 109 62 Green 0580 + 18 139 125 Green / Blue 0582 +129 133 68 Medium Green / Yellow 0585 + 45 82 63 Dark Green 0586 +106 114 55 Dark Green / Yellow 0589 + 28 50 47 Dark Blue / Green 0590 + 53 137 74 Dark Green 0598 + 34 59 76 Dark Blue 0601 +119 138 178 Medium Blue 0602 + 83 105 164 Medium Purple 0603 + 42 58 117 Dark Blue 0605 +148 213 230 Light Blue / Green 0610 +136 183 202 Pale Blue / Green 0611 + 0 147 194 Blue / Green 0613 + 78 166 216 Light Blue 0614 + 0 103 173 Medium Blue 0615 + 0 121 185 Medium Blue 0616 + 70 115 175 Medium Blue 0621 + 46 13 151 Medium Green / Blue 0623 + 0 101 112 Medium Green / Blue 0624 + 0 90 99 Dark Green / Yellow 0625 + 0 53 137 Blue 0626 + 32 57 136 Royal Blue 0629 + 0 117 140 Blue / Green 0630 + 45 62 149 Dark Blue 0631 +159 194 226 Pale Blue 0634 +150 178 207 Light Blue 0635 +114 152 193 Pale Purple 0636 +162 202 231 Pale Blue 0638 +110 162 218 Medium Blue 0639 + 0 72 144 Blue 0642 + 37 56 117 Dark Blue 0643 + 29 49 127 Royal Blue 0645 + 41 40 91 Dark Purple 0646 +179 196 220 Light Blue 0647 + 59 105 142 Medium Blue 0649 +118 149 208 Medium Purple 0651 + 66 108 180 Medium Purple 0652 + 83 115 163 Medium Purple 0653 + 26 69 125 Blue 0655 + 95 136 201 Medium Blue 0658 + 9 97 181 Blue 0659 + 67 105 181 Medium Purple 0661 + 35 93 138 Medium Blue 0662 + 51 61 92 Dark Grey / Blue 0665 + 0 159 205 Medium Blue / Green 0667 + 85 120 139 Medium Blue / Green 0669 + 45 91 106 Dark Blue / Green 0670 + 19 81 116 Dark Blue 0672 + 38 42 67 Dark Purple 0673 + 32 52 47 Dark Green 0674 + 39 36 109 Purple 0675 +159 172 213 Light Purple 0677 + 12 47 92 Blue 0678 + 86 98 153 Medium Blue 0680 + 30 77 138 Dark Blue 0682 + 82 186 208 Medium Blue / Green 0684 + 24 63 98 Dark Blue 0689 + 43 38 54 Dark Grey 0700 + 37 36 64 Dark Purple 0701 + 45 39 57 Dark Purple 0702 + 33 34 44 Black 0703 + 38 35 109 Purple 0801 +207 165 204 Light Pink 0804 +185 126 186 Purple 0805 +192 149 201 Purple 0807 + 87 33 98 Purple 0817 + 84 49 92 Dark Purple 0818 +146 123 186 Pale Purple 0822 +112 68 146 Purple 0824 +101 55 132 Purple 0826 + 81 41 113 Purple 0827 +153 164 206 Light Purple 0842 +117 137 189 Medium Purple 0843 +165 161 211 Light Purple 0845 + 77 87 164 Medium Purple 0847 +112 100 163 Medium Purple 0851 + 54 33 96 Purple 0852 +161 83 149 Medium Purple 0853 + 78 97 171 Light Blue 0856 + 9 51 128 Dark Purple 0862 + 78 56 133 Purple 0863 + 33 33 37 Black 0900 +146 152 161 Pale Grey 0902 +116 127 142 Pale Grey / Blue 0903 + 80 90 98 Dark Grey / Blue 0904 + 79 94 123 Dark Grey / Blue 0909 +160 165 174 Medium Grey 0910 +121 121 120 Medium Grey 0916 +145 175 200 Pale Blue 0917 +106 111 128 Grey 0918 +116 121 133 Medium Grey 0919 + 76 89 126 Grey / Blue 0924 + 81 84 48 Green / Yellow 0925 +102 103 97 Medium Grey 0928 +163 165 157 Pale Grey 0930 +137 137 136 Medium Grey 0931 + 64 59 58 Black 0935 +165 173 183 Medium Grey 0939 + 87 85 99 Dark Grey 0940 +130 147 130 Pale Green 0941 +147 153 167 Medium Grey 0942 + 58 57 64 Black 0943 + 82 87 98 Dark Grey 0945 +193 197 211 Light Purple 0946 +173 173 189 Light Purple 0947 +120 119 139 Medium Grey / Blue 0951 + 99 91 112 Dark Grey / Blue 0952 +125 127 141 Grey 0967 + 94 109 132 Dark Grey / Blue 0968 + 0 84 161 Blue 1015 +180 3 57 Dark Red / Orange 1016 + 66 56 136 Purple 1020 + 44 48 127 Purple 1022 +232 221 171 Light Yellow / Orange 1026 +204 88 102 Medium Orange / Red 1028 +128 83 44 Brown 1033 + 37 57 92 Dark Blue 1036 +237 126 108 Medium Orange 1037 + 18 56 70 Dark Blue 1039 + 45 49 71 Dark Purple 1042 +156 0 111 Medium Purple 1047 +200 173 112 Light Orange 1062 +186 0 39 Red 1066 + 0 135 177 Blue / Green 1068 +141 137 137 Medium Grey 1071 +135 111 78 Medium Brown 1072 +130 95 86 Medium Brown 1073 + 96 37 70 Medium Purple 1076 + 0 109 92 Dark Green 1078 + 0 103 99 Dark Blue / Green 1079 +181 137 46 Orange / Brown 1080 + 0 124 121 Light Green / Blue 1081 +107 24 109 Dark Purple 1082 + 59 32 85 Dark Purple 1084 +199 134 141 Light Pink 1087 + 60 115 105 Dark Green / Blue 1088 +122 12 42 Red 1089 + 45 30 95 Dark Purple / Navy 1090 + 10 52 127 Royal Blue 1098 + 46 76 69 Dark Green / Blue 1391 diff --git a/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Coats Alcazar.gpl b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Coats Alcazar.gpl new file mode 100644 index 00000000..e1891b03 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Coats Alcazar.gpl @@ -0,0 +1,504 @@ +GIMP Palette +Name: Ink/Stitch: Coats Alcazar +Columns: 4 +# RGB Value Color Name Number +230 232 255 White 0001 +236 230 89 Light Yellow 0002 +239 218 23 Yellow 0003 +241 215 0 Yellow 0005 +189 185 132 Pale Yellow / Green 0006 +153 133 46 Medium Yellow / Green 0008 +242 168 0 Medium Orange 0011 +242 175 30 Light Orange 0012 +217 169 49 Light Orange 0013 +196 156 48 Brown / Gold 0014 +190 138 16 Orange / Brown 0015 +170 115 23 Brown / Olive 0016 +157 114 73 Brown 0017 +178 113 0 Orange / Brown 0018 +150 147 80 Medium Green / Yellow 0019 +133 127 53 Dark Green / Yellow 0020 +233 233 232 White 0022 +190 168 59 Medium Green / Yellow 0023 +154 134 82 Pale Brown 0024 +170 141 84 Medium Yellow 0025 +226 222 218 Light Orange / Red 0026 +168 140 102 Pale Brown 0027 +142 91 36 Medium Brown 0028 +161 116 57 Pale Brown 0029 +160 88 7 Orange / Brown 0031 +233 235 227 Light Yellow 0101 +234 235 206 Light Yellow 0103 +241 218 151 Light Orange 0104 +235 223 129 Pale Yellow / Gold 0105 +241 143 0 Medium Orange 0109 +242 139 0 Medium Orange 0120 +241 124 0 Orange 0122 +235 92 0 Orange / Red 0124 +184 160 99 Pale Green / Yellow 0125 +168 144 52 Medium Green / Yellow 0126 +104 89 35 Dark Green / Yellow 0129 +205 147 66 Pale Orange / Brown 0131 +200 131 49 Medium Orange / Brown 0132 +241 204 103 Yellow Gold 0133 +244 196 71 Yellow Gold 0134 +245 190 34 Medium Orange 0135 +208 170 46 Medium Yellow 0136 +224 208 190 Light Orange 0137 +156 115 44 Medium Brown 0138 +235 232 208 Pale Orange 0139 +233 232 219 Light Yellow 0140 +175 100 0 Orange / Brown 0141 +228 207 151 Light Yellow / Orange 0150 +210 63 0 Dark Orange 0202 +232 197 187 Pale Orange 0203 +243 173 154 Pale Orange 0205 +239 143 120 Medium Orange 0206 +174 55 44 Orange / Red 0207 +233 96 5 Orange 0208 +173 43 22 Light Orange / Red 0209 +166 48 37 Dark Orange / Red 0210 +192 53 44 Orange / Red 0211 +235 147 150 Light Orange 0212 +233 152 100 Pale Orange 0213 +219 49 0 Orange / Red 0215 +223 185 167 Pale / Orange 0218 +170 76 40 Brown 0219 +223 87 0 Orange 0220 +225 176 178 Medium Pink 0221 +241 137 53 Medium Orange 0222 +157 125 45 Medium Green / Yellow 0223 +201 159 120 Light Red / Orange 0225 +214 86 110 Medium Pink 0227 +166 36 73 Dark Pink 0229 +111 38 50 Brown 0230 + 91 29 40 Dark Brown 0231 +151 47 51 Dark Orange / Red 0238 +127 47 52 Brown 0240 +224 183 161 Pale Orange 0242 +187 133 92 Pale Red / Orange 0245 +189 114 78 Brown 0246 +171 95 34 Orange / Brown 0247 +138 84 53 Brown 0248 +128 75 40 Brown 0250 +128 76 67 Dark Brown 0251 +239 186 144 Light Orange 0252 +237 175 121 Medium Orange 0253 +238 156 85 Medium Orange 0254 +211 106 50 Orange 0257 +178 101 52 Dark Orange / Brown 0258 +237 87 0 Orange 0260 +188 93 61 Brown 0262 +161 76 66 Dark Red / Orange 0265 +118 53 47 Dark Brown 0267 +110 51 54 Dark Brown 0271 +159 83 65 Medium Brown 0273 +189 0 26 Medium Red / Orange 0300 +166 103 128 Medium Purple 0301 +227 120 138 Medium Pink 0302 +161 0 43 Dark Red / Orange 0303 +217 131 146 Medium Pink 0306 +169 0 73 Red 0307 +160 85 102 Medium Pink 0308 +207 54 122 Dark Pink 0309 +128 39 61 Brown 0311 +119 46 66 Brown 0312 +231 191 209 Light Pink 0313 +231 194 222 Light Pink 0316 +185 87 120 Dark Pink 0317 +185 221 189 Light Green / Yellow 0318 +140 44 77 Brown 0319 +218 76 85 Medium Red / Orange 0321 +140 54 87 Brown 0322 +160 0 37 Dark Red 0323 +119 38 74 Dark Purple 0324 +135 68 80 Dark Brown 0326 +213 62 98 Red 0327 +115 62 86 Dark Purple 0329 +112 30 81 Dark Purple 0330 +208 83 158 Medium Pink 0331 +194 15 125 Dark Pink 0332 +227 155 198 Light Pink 0335 +188 99 150 Medium Pink 0337 + 98 46 77 Dark Purple 0338 +190 92 144 Medium Pink 0339 +151 70 117 Medium Purple 0340 +162 66 108 Medium Purple 0341 +134 52 99 Medium Purple 0342 +173 0 58 Dark Red 0343 +168 0 36 Red 0344 +143 0 49 Dark Red 0345 + 73 33 60 Dark Purple 0346 +123 16 53 Dark Purple 0347 + 53 34 44 Dark Brown 0348 +100 31 52 Brown 0349 + 89 32 55 Dark Purple 0350 +236 207 222 Light Pink 0355 +231 190 211 Light Pink 0356 +215 96 143 Dark Pink 0358 +210 38 103 Red 0360 +199 23 94 Red 0361 +140 0 50 Red 0363 +227 162 190 Light Pink 0364 +214 109 135 Medium Pink 0365 +200 82 132 Medium Pink 0366 +220 101 98 Dark Red / Orange 0367 +217 35 63 Dark Red / Orange 0368 +176 39 130 Medium Purple 0369 +221 48 57 Warm Red 0370 +197 0 48 Red 0372 +188 0 89 Dark Red 0373 +165 0 110 Dark Red 0376 +157 0 93 Dark Red 0377 +189 39 61 Dark Red / Orange 0378 + 68 35 44 Dark Purple 0380 +222 114 183 Medium Pink 0381 +226 126 170 Pink 0382 +184 0 93 Dark Pink 0383 +166 156 143 Warm Gray 0400 +183 151 160 Light Purple 0401 + 95 77 50 Dark Green / Yellow 0402 +158 115 117 Pale Brown 0404 +166 125 138 Light Purple 0406 +110 81 100 Medium Purple 0408 +164 162 165 Light Grey 0409 +161 154 125 Pale Green / Yellow 0410 +117 104 95 Medium Brown 0411 +115 99 93 Medium Brown 0412 +123 111 86 Medium Green / Yellow 0413 + 83 69 66 Dark Brown 0414 +132 100 73 Medium Brown 0416 +196 192 175 Light Grey / Green 0417 + 95 61 44 Dark Brown 0418 +148 127 100 Light Green / Yellow 0419 +171 151 125 Light Brown 0420 +157 145 132 Light Brown 0421 +192 174 161 Pale Orange 0422 +209 208 203 Light Green 0423 +125 114 97 Medium Green / Yellow 0424 +169 163 153 Light Green / Yellow 0425 +193 182 168 Light Brown 0426 +134 129 119 Dark Grey 0427 +103 95 80 Dark Grey 0428 +183 180 165 Light Grey / Green 0429 +211 205 166 Light Green / Yellow 0430 +159 158 139 Pale Green / Yellow 0431 +191 165 137 Pale Orange 0432 +155 148 114 Medium Green / Grey 0433 + 89 75 51 Dark Green / Grey 0435 +208 179 136 Light Brown 0436 +160 155 134 Pale Green / Grey 0439 +160 107 93 Orange / Brown 0440 + 91 64 60 Dark Brown 0441 +203 192 191 Light Purple 0442 + 69 50 48 Black 0443 +142 121 121 Medium Brown 0445 +120 118 100 Medium Green / Yellow 0446 +136 102 94 Medium Brown 0447 +187 172 154 Light Brown 0449 +161 138 129 Light Brown 0450 +122 76 62 Dark Brown 0451 +199 200 186 Light Green / Yellow 0452 + 91 64 52 Brown 0453 + 72 56 53 Black 0455 + 48 34 48 Dark Purple / Navy 0456 +194 171 149 Pale Orange 0457 +143 108 77 Medium Brown 0459 +110 82 58 Brown 0460 +102 65 40 Brown 0461 + 75 52 45 Dark Brown 0462 + 62 48 51 Black 0463 + 74 36 37 Dark Brown 0466 + 58 33 40 Dark Brown 0467 +230 198 199 Medium Pink 0471 +168 153 118 Pale Green / Yellow 0472 +212 205 195 Light Grey / Green 0473 +200 180 163 Light Brown 0474 +160 137 76 Light Green / Yellow 0475 +153 118 76 Pale Brown 0476 +143 102 52 Medium Orange / Brown 0477 +178 131 139 Pale Pink 0479 +111 75 59 Brown 0480 + 84 57 45 Dark Brown 0481 +200 186 181 Light Pink 0482 +186 168 156 Light Brown 0483 +154 129 113 Pale Brown 0484 +154 137 126 Light Brown 0485 +142 114 96 Pale Brown 0486 +112 82 60 Medium Brown 0487 + 59 64 33 Green 0488 +233 232 191 Light Yellow 0489 +103 187 57 Green 0501 +190 206 189 Light Green 0503 + 27 183 158 Medium Green / Blue 0504 +119 162 142 Pale Green / Blue 0505 + 67 147 134 Medium Green / Blue 0507 + 0 83 61 Dark Green 0510 + 35 77 48 Dark Green 0512 + 77 134 75 Dark Green 0513 +136 169 128 Medium Green 0514 + 0 134 66 Green 0519 + 34 63 47 Dark Green 0520 +154 217 224 Light Blue / Green 0521 + 30 178 167 Medium Blue / Green 0523 + 0 172 171 Medium Green / Blue 0524 +102 199 202 Light Blue / Green 0525 + 0 162 151 Medium Green / Blue 0526 + 0 77 45 Dark Green 0527 + 0 138 111 Dark Blue / Green 0528 + 0 140 125 Medium Green / Blue 0529 + 0 93 77 Green 0530 + 0 96 93 Dark Green / Blue 0531 +157 189 174 Pale Green / Blue 0532 +108 146 122 Pale Blue / Green 0533 + 63 116 100 Dark Green 0534 + 0 134 104 Blue / Green 0535 + 96 162 153 Medium Green / Blue 0536 +166 219 144 Light Green / Yellow 0537 + 27 71 63 Dark Green / Blue 0538 + 55 123 111 Dark Blue / Green 0539 +181 192 159 Dark Green / Yellow 0540 + 36 60 53 Dark Green / Blue 0541 +160 195 149 Light Green 0542 +157 215 210 Light Green / Blue 0543 +105 144 65 Green / Yellow 0547 + 94 195 159 Medium Green 0551 +101 115 84 Medium Blue / Green 0552 + 0 114 73 Green 0553 + 0 107 49 Green 0555 + 73 157 98 Green 0556 + 0 137 77 Green 0557 + 0 119 68 Green 0558 + 0 93 46 Green 0559 +120 180 57 Green / Yellow 0560 +130 191 76 Green / Yellow 0562 + 47 59 41 Dark Green 0563 +138 140 122 Pale Grey 0564 + 83 124 59 Medium Green 0565 + 75 170 130 Green 0569 + 60 121 72 Dark Green 0570 + 82 160 45 Green / Yellow 0571 + 19 84 44 Green 0573 + 32 143 107 Medium Green 0574 + 90 91 28 Dark Green / Yellow 0575 + 63 107 60 Dark Green 0578 + 56 91 48 Dark Green 0579 + 0 109 62 Green 0580 + 72 118 97 Dark Green 0581 + 18 139 125 Green / Blue 0582 +139 164 79 Medium Green / Yellow 0583 +122 131 45 Medium Green / Yellow 0584 +129 133 68 Medium Green / Yellow 0585 + 45 82 63 Dark Green 0586 +106 114 55 Dark Green / Yellow 0589 + 28 50 47 Dark Blue / Green 0590 + 28 48 47 Dark Blue / Green 0592 + 85 94 67 Medium Green / Yellow 0595 + 0 91 98 Blue / Green 0596 + 0 152 170 Dark Blue / Green 0597 + 53 137 74 Dark Green 0598 + 34 59 76 Dark Blue 0601 +119 138 178 Medium Blue 0602 + 83 105 164 Medium Purple 0603 + 56 66 124 Medium Purple 0604 + 42 58 117 Dark Blue 0605 + 52 71 91 Dark Blue / Green 0606 + 27 78 121 Dark Blue 0608 +174 203 212 Light Blue / Green 0609 +148 213 230 Light Blue / Green 0610 +136 183 202 Pale Blue / Green 0611 + 0 167 206 Medium Blue / Green 0612 + 0 147 194 Blue / Green 0613 + 78 166 216 Light Blue 0614 + 0 103 173 Medium Blue 0615 + 0 121 185 Medium Blue 0616 + 72 163 209 Light Blue 0619 + 0 124 184 Medium Blue / Green 0620 + 70 115 175 Medium Blue 0621 +110 163 176 Medium Green / Blue 0622 + 46 137 151 Medium Green / Blue 0623 + 0 101 112 Medium Green / Blue 0624 + 0 90 99 Dark Green / Yellow 0625 + 0 53 137 Blue 0626 +105 162 158 Pale Green 0627 + 33 76 162 Royal Blue 0628 + 32 57 136 Royal Blue 0629 + 0 117 140 Blue / Green 0630 + 45 62 149 Dark Blue 0631 +157 182 199 Pale Blue 0632 +159 194 226 Pale Blue 0634 +150 178 207 Light Blue 0635 +114 152 193 Pale Purple 0636 + 78 114 161 Medium Blue 0637 +162 202 231 Pale Blue 0638 +110 162 218 Medium Blue 0639 + 84 124 197 Light Blue 0641 + 0 72 144 Blue 0642 + 37 56 117 Dark Blue 0643 + 29 49 127 Royal Blue 0645 + 41 40 91 Dark Purple 0646 +179 196 220 Light Blue 0647 +110 136 186 Pale Blue 0648 + 59 105 142 Medium Blue 0649 +159 188 222 Light Blue 0650 +118 149 208 Medium Purple 0651 + 66 108 180 Medium Purple 0652 + 83 115 163 Medium Purple 0653 + 59 92 143 Medium Purple 0654 + 26 69 125 Blue 0655 + 34 51 91 Navy 0656 + 25 51 105 Dark Purple / Navy 0657 + 95 136 201 MediumBlue 0658 + 9 97 181 Blue 0659 + 67 105 181 Medium Purple 0661 + 35 93 138 Medium Blue 0662 + 51 61 92 Dark Grey / Blue 0665 + 0 159 205 Medium Blue / Green 0667 +135 166 181 Pale Blue 0668 + 85 120 139 Medium Blue / Green 0669 + 45 91 106 Dark Blue / Green 0670 + 43 42 56 Dark Navy 0671 + 19 81 116 Dark Blue 0672 + 38 42 67 Dark Purple 0673 + 32 52 47 Dark Green 0674 + 39 36 109 Purple 0675 +159 172 213 Light Purple 0677 + 12 47 92 Blue 0678 +113 133 173 Pale Purple 0679 + 86 98 153 Medium Blue 0680 + 30 77 138 Dark Blue 0682 + 0 64 126 Light Blue / Green 0683 + 82 186 208 Medium Blue / Green 0684 + 24 63 98 Dark Blue 0689 + 43 38 54 Dark Grey 0700 + 37 36 64 Dark Purple 0701 + 45 39 57 Dark Purple 0702 + 33 34 44 Black 0703 + 38 35 109 Purple 0801 +207 165 204 Light Pink 0804 +185 126 186 Purple 0805 +141 89 159 Medium Purple 0806 +192 149 201 Purple 0807 +180 97 160 Medium Purple 0811 +118 17 87 Dark Purple 0813 +111 31 104 Dark Purple 0814 +118 0 73 Dark Pink 0815 + 87 33 98 Purple 0817 + 84 49 92 Dark Purple 0818 +115 107 139 Medium Purple 0819 +146 123 186 Pale Purple 0822 +112 68 146 Purple 0824 +101 55 132 Purple 0826 + 81 41 113 Purple 0827 +133 118 144 Pale Purple 0830 +153 164 206 Light Purple 0842 +117 137 189 Medium Purple 0843 +165 161 211 Light Purple 0845 + 77 87 164 Medium Purple 0847 + 59 58 119 Purple 0848 +178 158 204 Pale Purple 0849 +140 128 189 Light Purple 0850 +112 100 163 Medium Purple 0851 + 54 33 96 Purple 0852 +161 83 149 Medium Purple 0853 +121 100 166 Light Purple 0854 + 97 115 180 Medium Purple 0855 + 78 97 171 Light Blue 0856 +182 191 212 Light Grey 0857 + 79 51 128 Dark Purple 0862 + 78 56 133 Purple 0863 + 33 33 37 Black 0900 +146 152 161 Pale Grey 0902 +116 127 142 Pale Grey / Blue 0903 + 80 90 98 Dark Grey / Blue 0904 +112 117 110 Medium Grey / Green 0905 +181 192 195 Light Green 0906 +181 191 200 Pale Purple 0907 +125 132 140 Grey 0908 + 79 94 123 Dark Grey / Blue 0909 +160 165 174 Medium Grey 0910 + 63 63 80 Dark Grey / Blue 0911 +106 100 96 Medium Grey / Green 0913 +115 140 160 Medium Blue 0915 +121 121 120 Medium Grey 0916 +145 175 200 Pale Blue 0917 +106 111 128 Grey 0918 +116 121 133 Medium Grey 0919 + 55 54 62 Black 0920 +141 158 129 Pale Green 0921 +112 124 87 Medium Green / Yellow 0922 +121 134 154 Medium Grey / Blue 0923 + 76 89 126 Grey / Blue 0924 + 81 84 48 Green / Yellow 0925 +145 146 129 Pale / Grey 0927 +102 103 97 Medium Grey 0928 +163 165 157 Pale Grey 0929 +182 185 178 Light Grey / Green 0930 +137 137 136 Medium Grey 0931 + 84 87 90 Dark Grey 0933 + 64 59 58 Black 0935 + 95 126 135 Pale Green / Blue 0936 + 63 106 123 Medium Green / Blue 0937 +165 173 183 Medium Grey 0939 + 87 85 99 Dark Grey 0940 +130 147 130 Pale Green 0941 +147 153 167 Medium Grey 0942 + 58 57 64 Black 0943 +172 176 185 Medium Grey 0944 + 82 87 98 Dark Grey 0945 +193 197 211 Light Purple 0946 +173 173 189 Light Purple 0947 +164 164 184 LightPurple 0948 +144 140 157 Medium Purple 0950 +120 119 139 Medium Grey / Blue 0951 + 99 91 112 Dark Grey / Blue 0952 +175 183 199 Medium Grey 0953 +103 112 125 Grey 0955 +121 121 129 Cool Grey 0965 + 91 99 111 Grey 0966 +125 127 141 Grey 0967 + 94 109 132 Dark Grey / Blue 0968 + 94 50 38 Dark Brown 1008 +142 193 117 Medium Green 1013 + 0 84 161 Blue 1015 +180 3 57 Dark Red / Orange 1016 + 66 56 136 Purple 1020 +145 145 146 Pale Grey 1021 + 44 48 127 Purple 1022 +232 221 171 Light Yellow / Orange 1026 + 84 81 64 Dark Grey / Green 1027 +204 88 102 Medium Orange / Red 1028 +128 83 44 Brown 1033 + 37 57 92 Dark Blue 1036 +237 126 108 Medium Orange 1037 +126 45 115 Dark Purple 1038 + 18 56 70 Dark Blue 1039 + 45 49 71 Dark Purple 1042 + 0 82 95 Blue / Green 1046 +156 0 111 Medium Purple 1047 + 72 54 81 Dark Purple 1060 +200 173 112 Light Orange 1062 +195 0 64 Dark Red 1063 +186 0 39 Red 1066 + 0 135 177 Blue / Green 1068 +178 40 122 Dark Pink 1069 +141 137 137 Medium Grey 1071 +135 111 78 Medium Brown 1072 +130 95 86 Medium Brown 1073 + 96 37 70 Medium Purple 1076 + 0 109 92 Dark Green 1078 + 0 103 99 Dark Blue / Green 1079 +181 137 46 Orange / Brown 1080 + 0 124 121 Light Green / Blue 1081 +107 24 109 Dark Purple 1082 + 59 32 85 Dark Purple 1084 +199 134 141 Light Pink 1087 + 60 115 105 Dark Green / Blue 1088 +122 12 42 Red 1089 + 45 30 95 Dark Purple / Navy 1090 + 0 100 65 Green 1092 + 46 33 88 Dark Purple / Navy 1097 + 10 52 127 Royal Blue 1098 + 0 88 124 Blue 1099 + 46 76 69 Dark Green / Blue 1391 +198 15 0 Warm Red 2210 diff --git a/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Coats Sylko USA.gpl b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Coats Sylko USA.gpl new file mode 100644 index 00000000..af220f69 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Coats Sylko USA.gpl @@ -0,0 +1,307 @@ +GIMP Palette +Name: Ink/Stitch: Coats Sylko USA +Columns: 4 +# RGB Value Color Name Number +223 255 44 Fluorescent Yellow B1015 +238 222 162 Straw Yellow B1137 +226 217 153 Maize Silk B1143 +226 224 138 Pale Yellow B1169 +237 229 159 Pale Sunflower B1170 +222 203 61 Mimosa B1213 +238 238 88 Daffodil B1216 +243 210 67 Gold Goblet B1224 +236 196 96 Yellow B1232 +241 188 0 Golden Yellow B1261 +233 180 49 Yellow Poppy B1266 +223 151 26 Goldenrod B1267 +230 171 11 Liberty Gold B1269 +225 155 0 Marigold B1271 +237 179 17 Gold B1274 +230 147 0 Gold Rush B1285 +215 172 97 Shelley Gold B1318 +229 206 151 Maize B1340 +239 225 175 Lemonade B1357 +233 210 121 Popcorn B1376 +190 137 0 Brass B1416 +211 154 0 Royal Gold B1422 +196 170 101 Grapefruit B1456 +171 136 30 Golden Wheat B1479 +169 154 82 Faded Brass B1488 +231 239 249 White B1720 +255 84 46 Fluorescent Orange B2024 +236 138 111 Bright Coral B2101 +224 194 174 Light Apricot B2154 +220 128 100 Miami B2163 +184 112 92 Saffron B2200 +200 48 47 Spanish Red B2216 +218 69 35 Paprika B2239 +196 36 54 Hawks Red B2267 +218 64 93 Iced Poppy B2291 +151 125 88 Sandy Soil B2329 +144 97 53 Unaka Sand B2345 +123 82 47 Dark Red Orange B2348 +166 111 0 Ginger B2354 +165 111 37 Temple Gold B2358 +202 168 102 Pineapple Gold B2360 +202 156 109 Honey B2379 +171 89 30 Coppertone B2382 +178 118 35 Tiger Eye B2388 +227 163 95 Cantaloupe B2406 +208 76 22 Tropical Orange B2432 +234 118 77 Orange Glow B2440 +196 85 31 Autumn Leaf B2462 +227 134 0 Orange Ice B2480 +255 159 0 Bright Orange B2482 +224 122 0 Marigold B2484 +214 93 20 Dark Orange B2495 +236 239 230 Natural White B2730 +255 102 156 Fluorescent Dahlia B3003 +255 79 118 Fluorescent Red B3063 +222 121 129 Peach B3105 +225 160 177 Pink B3108 +233 189 218 Pink B3114 +228 154 195 Anemone B3117 +235 138 172 Pink Petunia B3128 +212 110 148 French Rose B3133 +233 184 184 Light Melon B3138 +212 169 155 Peach B3140 +207 180 174 Rose Beige B3142 +231 203 217 Rose Pink B3162 +234 216 220 Light Pink B3170 +232 182 203 Orchid Rose B3174 +221 149 142 Coral B3196 +240 176 170 Pink Petal B3198 +198 82 97 Coral Flame B3257 +187 87 79 Clay B3285 +187 113 150 Rose Dust B3326 +158 83 106 Medium Berry B3371 +223 80 113 Shocking Pink #2 B3435 +193 0 70 Bulls Red B3436 +211 47 89 Bullet Red B3438 +216 45 106 Carmine B3453 +225 95 135 Dark Pink B3461 +216 46 107 Shocking Pink B3462 +212 23 116 Ruby Glint B3490 +174 72 147 Azalea B3602 +138 36 114 Grape Wine B3608 +118 0 73 Magenta B3617 + 98 26 78 Sugar Beet B3628 +181 0 107 Royal Fuchsia B3633 +197 78 133 Persian Rose B3661 +160 23 100 Rebecca Rose B3695 +101 22 60 French Raspberry Red B3747 +139 46 80 Wine B3751 +139 0 65 Cranberry B3764 +131 15 43 Cranberry B3793 +177 0 71 Rose Bud B3797 +193 32 43 Red Orange B3810 +173 51 41 Canyon Red B3811 +188 0 33 Foxy Red B3813 +167 68 72 Terra Cotta B3815 +159 0 35 Miami Artillery B3845 +200 17 31 Flame Red B3865 +137 0 37 Scarlet Tanager B3876 +186 22 45 Red B3884 +177 0 46 Jefferson Red B3886 +174 0 41 Holly Berry B3887 +174 10 46 Atom Red B3891 +183 0 43 Candy Red B3893 + 96 32 45 Medoc Wine B3947 +132 28 56 Berry Wine B3962 +133 11 41 Tahoe Red B3964 +123 15 39 Cherokee Red B3965 +125 25 57 Kings Wine B3970 +115 30 60 Red Licorice B3984 +138 32 50 Dark Red S B3998 +161 141 183 Light Lilac B4114 +130 123 170 Dark Lilac B4146 +187 185 210 Lavender Azalea B4154 +193 163 187 Lilac Pink B4177 +112 57 135 Deep Violet B4305 +109 80 120 Jazz Purple B4308 +117 70 154 Dark Purple B4314 + 98 75 151 Kings Purple B4315 +122 76 158 Iris B4316 +113 94 142 Veronica Violet B4323 +112 91 165 Lakers Purple B4340 +119 63 142 Purple B4368 +131 109 140 Light Grape B4372 +181 119 159 Loganberry B4381 +187 144 190 Wild Plum B4385 +186 143 192 Lavender B4388 + 58 51 92 Concord B4615 + 91 55 140 Suns Purple B4644 + 87 58 136 Purple Aster B4647 + 99 100 166 Bright Iris B4681 + 47 40 118 Oriental Violet B4705 + 95 40 86 Pale Purple B4902 + 77 44 81 Blackberry B4913 + 72 39 55 Plum B4921 + 88 41 119 Purple Iris B4955 + 68 38 101 Ultraviolet B4956 + 63 35 88 Purple Majesty B4993 +192 255 126 Brilliant Lime B5000 +133 188 88 Lime B5037 +118 216 56 Fluorescent Green B5076 + 0 107 103 Imperial Aqua B5107 + 0 86 58 Latex Green B5126 + 0 94 54 Shamrock Green B5129 + 48 153 105 Gotcha Green B5132 + 0 134 71 Emerald B5135 + 96 179 157 Fountain Green B5142 + 46 144 93 Celtics Green B5146 +112 184 145 Sliced Lime B5157 +143 197 192 Bridal Turquoise B5160 + 0 131 110 Green B5177 + 38 140 124 Jade B5187 + 0 113 95 Alpine Teal B5199 + 31 105 82 Green Forest B5201 + 26 141 79 Kelly B5220 + 47 75 50 Holly Leaf B5225 + 0 134 81 Gator Green B5230 + 0 127 61 Bright Green B5234 + 18 143 130 Inlet Green B5274 +103 143 63 Dark Lime B5332 +105 131 66 Applemint B5343 +151 156 114 Arcadian Green B5347 +164 210 167 Mint Tint B5354 +160 178 76 Bright Green B5356 +179 209 104 Light Green B5360 +142 199 107 Lime B5365 + 92 137 76 Holly Green B5371 + 64 159 92 Plains Green B5391 +112 140 120 Cloudy Jade B5506 +144 143 117 Spanish Olive B5516 + 84 109 102 Seattle Green B5550 + 78 115 105 Gander Green B5554 + 77 102 86 Bucks Green B5558 +166 194 181 Mint B5585 + 61 68 46 Swamp Gator B5752 + 99 93 59 Olive Drab B5766 + 34 56 52 Spruce B5945 + 39 70 61 Mitchell Green B5970 + 31 57 65 Atlantic B5988 + 43 70 57 Forest Green B5992 +139 206 198 Tropical Wave B6133 + 61 160 164 Aqua B6137 + 63 159 161 Light Aqua B6182 +111 194 216 Basic Turquoise B6316 + 67 155 173 Western Sky B6319 + 54 151 178 Radiant Turquoise B6321 +171 201 202 Aqualine B6378 +155 206 208 Aqua Lake B6384 + 0 83 87 Dark Teal B6600 + 0 100 104 Azure B6632 + 55 165 166 Grizzly Turquoise B6640 + 13 150 134 Parrot B6648 + 34 151 144 Tender Teal B6662 + 0 129 136 Calypso Green B6667 + 0 120 116 Bright Peacock B6676 + 0 82 99 Teal Haze B6686 + 0 121 138 Hornets Teal B6698 + 92 139 140 Sea Green B6792 + 33 151 194 Blue B6928 + 0 103 149 Danish Teal B6937 + 23 57 75 Dark Teal B6949 + 76 108 129 Bluestone B6970 + 0 110 137 Oasis B6976 +189 202 214 Misty Fog B7061 +106 130 159 Limoges Blue B7104 + 90 130 168 Dale Blue B7115 + 98 118 156 Slate Blue B7116 +173 187 209 Ice Blue B7122 + 88 145 181 Blue B7126 +156 173 206 Scalloped Blue B7154 +165 192 211 Blue Baron B7164 +145 182 206 Light Blue B7168 +125 149 186 Blue B7178 +136 175 191 Blue B7185 +163 205 222 Bahama Blue B7186 +134 163 192 Sky Blue B7192 + 33 81 165 Morning Glory B7300 + 40 85 165 Minnesota Blue B7302 + 32 85 169 Bright Wedgewood B7303 + 34 96 171 Magic Blue B7306 + 32 68 140 Blue Bird B7308 + 36 61 132 Blue Twirl B7320 + 46 52 116 Calypso B7321 + 43 55 133 Chow Blue B7323 + 42 65 112 Navy B7328 + 45 53 95 Blue Nugget B7332 + 36 51 97 Blue Cobalt B7337 + 43 86 141 Blue Dusk B7344 + 92 114 168 Cavaliers Blue B7348 + 33 73 121 Maverick B7352 + 17 81 145 Warrior Blue B7358 + 0 74 138 Surf B7360 + 10 102 175 Too Blue B7362 + 0 117 168 Pretty Blue B7374 + 68 119 187 Knicks Blue B7377 + 66 132 194 Indian Sky B7386 + 49 98 160 Empire Blue B7392 + 77 109 151 Medium Blue B7394 + 85 124 147 Slate Grey B7537 + 79 101 124 Wedgewood B7542 + 83 98 129 Williamsburg B7559 + 33 80 122 Lake Blue B7568 + 34 61 89 Dragon Fly B7571 + 67 107 156 Cornflower B7576 + 49 53 83 Blue Shadow B7926 + 44 45 58 Nightblu Arctic B7951 + 40 46 68 French Navy B7968 + 41 46 79 Blueberry B7972 + 43 50 80 Colonial Blue B7983 + 43 48 67 Legion Blie B7984 + 41 46 65 Flag Blue B7990 + 48 47 63 Navy B7995 +188 172 149 Straw B8102 +193 185 162 Sand B8104 +186 180 165 Sparrow B8105 +226 220 205 Sand Dune B8129 +222 212 192 Silk Beige B8146 +211 204 188 Champagne B8148 +199 205 206 Pearl B8152 +223 210 182 Champagne Mist B8165 +198 182 141 Vegas Gold B8195 +216 220 215 Natural B8256 +233 234 215 Ivory B8257 +225 230 231 Cream B8262 +186 167 129 Cane B8321 +174 161 146 Honey Fudge B8332 +156 153 139 Light Sage B8338 +184 157 122 Dark Cream B8355 +166 146 130 Taupe Beige B8364 +187 168 145 Tan B8405 +178 152 114 Beige B8414 +166 140 114 Camel B8425 +141 107 75 Toast B8500 +122 116 103 Mushroom B8511 +136 111 89 Doeskin B8525 +131 101 97 Dark Brown B8586 +110 92 67 Bagby Green B8666 +140 94 71 Rancho Brown B8691 +154 49 35 Red Bittersweet B8701 +152 64 60 Rust B8705 +106 73 57 Clayrust B8731 +110 63 47 Emberlite B8765 + 78 51 47 Cassis Brown B8792 + 66 49 45 Brown Mule B8936 + 63 57 47 Dark Olive B8944 + 62 52 51 Moghar Brown B8972 + 73 54 52 Walnut B8994 +187 196 201 Spurs Silver B9119 +138 143 144 Platinum B9126 +176 181 178 Heather Grey B9133 +170 176 184 Grey Ghost B9143 +145 158 165 Grey Opal B9158 +188 192 187 Winter Sage B9165 +175 187 198 Soft Grey B9352 +172 172 160 Chino B9359 +152 162 172 Nickel B9382 + 93 96 107 Grey Blue B9621 +135 132 136 Penguin Grey B9632 + 81 80 83 Granite B9636 + 96 95 105 Western Grey B9639 +108 115 133 Desma Blue B9650 + 44 46 48 Black B9720 + 61 62 71 Soot B9901 diff --git a/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Coats Sylko.gpl b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Coats Sylko.gpl new file mode 100644 index 00000000..50960152 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Coats Sylko.gpl @@ -0,0 +1,403 @@ +GIMP Palette +Name: Ink/Stitch: Coats Sylko +Columns: 4 +# RGB Value Color Name Number +236 240 255 White B1003 +233 238 242 Pale Silver B1008 +230 234 178 Bright Yellow B1156 +242 233 158 PaleYellow B1171 +218 239 168 Dark Olive Green B1178 +231 239 112 Pale Yellow B1181 +237 233 127 Medium Yellow B1182 +224 233 128 Pale Yellow B1183 +225 255 159 Dark Olive Green B1190 +222 228 91 Pale Yellow B1195 +200 255 78 Fluo Yellow / Green B1197 +213 231 44 Dark Green B1198 +210 228 67 Dark Green B1199 +231 211 47 Pale Beige B1214 +236 236 44 Pale Yellow B1234 +245 220 0 Gold / Yellow B1237 +253 251 0 Gold / Yellow B1238 +239 231 0 Gold / Yellow B1239 +232 255 69 Gold / Yellow B1220 +232 195 50 Fluo Yellow B1222 +232 202 112 Pale Yellow B1233 +237 215 144 Pale Yellow B1235 +241 215 102 Cream B1236 +227 218 0 Fluo Orange B1240 +231 183 65 Mustard Yellow B1256 +245 193 0 Fluo Yellow B1261 +230 168 45 Gold / Yellow B1265 +231 185 34 Mustard Yellow B1269 +233 157 15 Gold / Orange B1270 +230 157 0 Dark Gold / Orange B1271 +239 161 0 Dark Gold / Orange B1273 +230 176 0 Dark Gold / Yellow B1282 +235 187 0 Fluo Yellow / Green B1284 +241 190 0 Dark Green B1286 +255 212 0 Medium Yellow B1290 +255 188 0 Fluo Orange B1293 +237 188 134 Peach B1328 +237 220 179 Medium Yellow B1339 +234 210 178 Pale Peach B1345 +240 216 151 Pale Yellow B1360 +222 192 124 Pale Gold B1371 +242 191 132 Peach B1394 +205 153 51 Gold B1413 +189 139 33 Gold B1415 +200 134 41 Gold / Orange B1418 +204 151 0 Cream B1431 +230 183 70 Yellow / Gold B1423 +232 160 47 Gold / Orange B1432 +198 160 31 Gold B1435 +180 163 0 Green / Gold B1439 +175 146 47 Green / Gold B1464 +238 242 255 White B1719 +244 132 106 Salmon Pink B2120 +255 71 92 Fluo Pink B2129 +217 181 150 Pale Peach B2140 +255 141 64 Orange B2146 +250 221 207 Pale Pink B2153 +240 162 146 Salmon Pink B2158 +235 183 153 Peach B2159 +238 210 191 Cream / Pink B2160 +197 36 32 Red B2224 +225 66 37 Orange B2225 +218 81 40 Orange B2244 +212 53 18 Red B2245 +220 92 76 Dark Salmon Pink B2246 +255 65 72 Fluo Pink B2252 +209 85 85 Dark Salmon Pink B2256 +207 63 77 Dark Salmon Pink B2275 +150 78 47 Medium Brown B2285 +214 60 90 Dark Pink B2291 +160 101 46 Tan Brown B2292 +156 94 63 Medium Brown B2298 +253 51 99 Fluo Pink B2299 +193 116 68 Copper B2310 +188 138 97 Fawn B2316 +175 132 97 Fawn B2328 +136 86 60 Dark Brown B2330 +144 104 76 Medium Brown B2351 +181 127 51 Gold B2358 +168 140 82 Gold B2367 +171 105 28 Tan Brown B2375 +250 113 17 Fluo Orange B2428 +226 79 0 Orange B2431 +255 72 32 Fluo Orange B2450 +220 92 58 Orange B2452 +217 88 44 Medium Orange B2458 +202 90 41 Rust B2463 +214 105 58 Copper / Orange B2464 +232 145 0 Dark Yellow B2470 +220 109 0 Gold / Orange B2485 +232 158 81 Pale Gold B2488 +255 107 32 Fluo Orange B2494 +234 241 243 Ivory B2704 +229 235 236 Ivory B2707 +239 145 168 Medium Pink B3105 +255 123 165 Medium Pink B3114 +242 176 203 Pale Pink B3135 +241 168 173 Pale Pink B3137 +242 183 171 Pale Salmon Pink B3146 +219 172 164 Pale Salmon B3154 +235 153 181 Medium Pink B3160 +214 111 142 Dark Pink B3163 +208 163 172 Pale Pink B3164 +235 187 207 Pale Pink B3167 +238 148 193 Medium Pink B3168 +239 216 221 Pale Pink B3170 +244 187 212 Pale Pink B3174 +243 199 229 Pale Pink B3178 +135 99 109 Pink / Brown B3319 +171 87 116 Dusky Pink B3364 +131 35 68 Maroon B3375 +134 31 71 Maroon B3377 +239 79 127 Fluo Pink B3432 +222 75 113 Medium Pink B3435 +193 67 92 Dusky Pink B3439 +255 37 105 Dark Fluo Pink B3440 +194 30 84 Dark Pink B3456 +185 0 74 Dark Pink B3483 +208 0 95 Dark Pink B3487 +213 39 93 Dark Pink B3488 +157 45 127 Dark Purple B3610 +196 0 105 Dark Pink B3632 +203 39 118 Dark Pink B3645 +226 105 157 Medium Pink B3650 +255 111 163 Fluo Medium Pink B3654 +213 72 141 Dark Pink B3660 +204 59 134 Dark Pink B3670 +217 82 150 Medium Pink B3671 +210 88 157 Medium Pink B3672 +197 87 157 Medium Pink B3674 +120 44 128 Purple B3684 +183 0 108 Dark Pink B3690 +166 45 111 Dark Pink B3698 +144 0 48 Dark Red B3796 +159 0 32 Dark Red B3831 +170 0 41 Dark Rust Red B3845 +211 70 78 Dark Salmon B3869 +193 26 51 Medium Red B3872 +186 0 36 Medium Red B3884 +175 0 41 Dark Rust Red B3891 +180 0 40 Medium Red B3898 +171 0 38 Dark Red B3928 + 95 31 40 Dark Maroon B3949 +101 31 55 Dark Maroon B3951 +103 28 64 Dark Maroon B3955 +127 6 45 Dark Maroon B3960 +111 30 50 Dark Maroon B3976 +122 45 55 Pale Maroon B3979 +133 22 57 Maroon B3989 +150 32 46 Medium Rust Red B3992 +156 151 214 Lilac B4117 +136 126 160 Dark Lilac B4143 +169 162 210 Lilac B4144 +208 193 218 Pale Lilac B4155 + 82 52 143 Dark Violet B4306 +103 75 157 Medium Purple B4315 +129 68 174 Medium Purple B4322 +105 92 180 Violet B4326 +171 144 187 Dark Lilac B4341 +157 89 163 Medium Purple B4347 +150 92 175 Medium Purple B4355 +197 170 210 Lilac B4357 +126 28 111 Dark Purple B4367 +129 49 142 Dark Purple B4369 + 99 0 110 Dark Purple B4370 +121 57 130 Dark Purple B4374 +233 182 223 Pale Pink B4398 +238 167 209 Medium Pink B4399 + 44 55 135 Dark Royal Blue B4640 + 61 39 133 Dark Royal Blue B4646 + 74 39 143 Dark Violet B4651 + 47 66 145 Medium Royal Blue B4653 + 87 33 139 Dark Purple B4654 +126 125 200 Violet B4686 +126 146 194 Medium Blue B4687 +103 109 184 Violet B4688 + 87 52 72 Dark Maroon B4910 + 99 52 89 Dark Maroon B4916 +101 62 104 Dark Purple B4918 + 66 50 84 Dark Navy B4942 + 91 34 121 Dark Purple B4955 + 46 42 89 Dark Navy B4972 +140 197 88 Medium Green B5037 + 0 86 62 Dark Green B5126 + 0 121 68 Medium Green B5129 + 0 115 105 Dark Aqua Green B5148 + 95 202 155 Pale Green B5151 +154 226 203 Pale Mint Green B5163 + 0 127 110 Jade Green B5170 + 31 125 108 Jade Green B5185 + 0 96 86 Dark Green B5193 + 0 140 137 Jade Green B5206 + 29 77 67 Dark Green B5209 + 0 96 62 Dark Green B5219 + 0 102 74 Dark Green B5226 + 0 123 83 Medium Green B5231 + 0 78 52 Dark Green B5232 + 4 87 65 Dark Green B5235 + 0 97 57 Dark Green B5236 + 0 88 51 Dark Green B5237 + 47 90 57 Lime B5238 + 0 139 83 Medium Green B5241 + 52 167 120 Pale Jade B5242 +132 204 155 Mint Green B5245 + 29 146 73 Medium Green B5248 +168 207 186 Pale Jade B5249 + 0 135 81 Medium Green B5250 +171 208 179 Pale Mint Green B5251 + 0 141 112 Medium Jade Green B5281 +119 110 36 Olive Green B5310 +127 125 61 Olive Green B5316 +172 188 78 Lime B5318 +183 206 0 Dark Green B5320 +100 128 57 Bright Green B5343 +102 125 45 Lime B5348 +158 174 132 Olive Green B5351 +166 183 47 Lime B5359 +168 203 100 Lime B5364 +181 226 123 Lime B5372 +123 186 27 Medium Green B5373 +150 153 83 Olive Green B5374 +124 172 104 Bright Green B5377 +116 217 74 Bright Green B5382 +116 187 61 Medium Green B5384 + 65 116 53 Medium Grey / Green B5387 + 76 166 100 Medium Green B5391 + 82 174 95 Medium Green B5395 + 76 100 77 Kahki Green B5526 +135 142 123 Dark Green B5542 + 79 73 43 Dark Olive Green B5751 + 59 67 45 Pale Yellow / Green B5752 + 71 74 51 Dark Bottle Green B5757 + 89 97 44 Pale Green B5764 + 94 76 37 Dark Olive Green B5771 +117 105 44 Olive Green B5772 +100 96 44 Olive Green B5773 + 78 64 45 Dark Brown B5917 + 39 64 68 Dark Green B5929 + 57 66 54 Fluo Lime B5939 + 47 71 51 Medium Yellow / Green B5962 + 57 91 79 Dark Jade Green B5989 + 44 72 56 Bright Green / Yellow B5992 + 61 163 172 Turquoise Blue B6109 +139 205 212 Pale Turquoise B6124 + 21 157 168 Dark Turquoise Blue B6136 +146 205 204 Pale Aqua Green B6153 +170 226 214 Pale Green B6155 + 85 180 165 Aqua Green B6160 + 82 137 187 Medium Blue B6317 + 65 171 196 Medium Turquoise B6323 +153 197 226 Pale Blue B6325 + 66 168 199 Medium Turquoise Blue B6327 +120 192 217 Pale blue B6335 + 36 148 185 Dark Turquoise Blue B6350 + 88 176 215 Medium Blue B6360 + 49 153 186 Medium Turqoise Blue B6362 +114 190 231 Medium Blue B6365 +172 199 208 Pale Blue B6380 +125 196 217 Pale Turquoise B6383 + 99 140 151 Medium Blue / Grey B6399 + 31 79 83 Dark Bottle Green B6612 + 64 125 134 Dark Aqua Green B6628 +133 203 177 Pale Green B6661 + 0 117 134 Dark Turquoise Blue B6663 + 0 117 130 Dark Aqua Green B6665 + 0 120 155 Dark Turquoise Blue B6666 + 0 127 147 Dark Aqua Green B6698 + 50 114 150 Petrol Blue B6910 + 81 161 208 Medium Blue B6938 + 0 96 161 Dark Blue B6940 + 62 163 215 Medium blue B6947 + 0 92 129 Dark Blue B6972 + 34 84 117 Dark Blue B6975 + 23 123 184 Medium Blue B6977 + 0 113 149 Medium Blue B6981 + 48 73 107 Dark Navy B6984 + 74 109 136 Petrol Blue B6998 + 0 135 172 Medium Turquoise Blue B6999 +102 119 160 Medium Blue / Purple B7404 +167 186 211 Pale Blue B7224 +155 163 200 Pale Lilac B7235 +130 168 224 Medium Blue B7406 +158 182 226 Pale Blue B7414 +137 156 184 Medium Blue / Grey B7411 +179 195 234 Pale Lilac B7263 +174 198 229 Pale Blue B7408 +153 182 223 Medium Blue / Grey B7267 +179 201 236 Pale Blue B7412 +137 160 207 Medium Blue B7416 +165 187 229 Pale Blue B7407 + 78 118 196 Royal Blue B7403 + 35 84 173 Dark Royal Blue B7402 + 34 71 145 Dark Royal Blue B7400 + 41 46 125 Dark Royal Blue B7323 +103 122 176 Medium Blue B7348 + 67 76 155 Purple B7387 + 36 87 150 Dark Royal Blue B7390 + 42 58 130 Dark Royal Blue B7401 + 42 75 161 Dark Royal Blue B7405 + 30 87 166 Royal Blue B7409 + 56 102 180 Medium Blue B7410 + 55 80 168 Dark Royal Blue B7413 + 33 53 124 Dark Royal Blue B7415 + 54 55 106 Dark Navy Blue B7422 + 40 54 97 Navy Blue B7439 + 42 51 89 Navy Blue B7440 + 42 50 94 Navy Blue B7442 + 21 67 127 Royal Blue B7444 + 67 111 173 Medium Blue B7484 + 59 109 164 Medium Blue B7491 + 50 50 75 Dark Navy B7520 + 77 90 126 Petrol Blue B7526 + 91 123 156 Medium Blue B7536 + 40 62 95 Dark Navy B7578 + 42 59 92 Dark Navy B7877 + 49 59 83 Dark Navy B7878 + 45 55 83 Dark Navy B7896 + 36 39 57 Dark Navy B7897 + 45 50 73 Dark Navy B7898 + 57 44 60 Dark Maroon B7899 + 77 80 114 Petrol Blue B7905 + 56 59 87 Dark Navy B7926 + 41 46 82 Dark Navy B7972 + 43 46 65 Dark Navy B7983 +199 186 172 Medium Beige B8105 +236 224 209 Yellow / Gold B8129 +216 206 184 Cream B8134 +195 186 172 Beige B8141 +231 233 215 Pale Beige B8143 +230 218 201 Pale Beige B8146 +208 201 175 Pale Beige B8175 +216 210 184 Cream B8180 +228 225 214 Medium Yellow B8183 +234 231 216 Ivory B8257 +168 165 104 Medium Green / Yellow B8309 +176 156 110 Gold / Beige B8314 +223 197 168 Pale Peach B8350 +210 186 156 Beige B8365 +185 160 123 Gold / Brown B8367 +160 156 144 Green / Grey B8371 +147 139 124 Fawn B8373 +164 138 123 Fawn B8376 +162 139 141 Light Brown B8378 +161 139 118 Light Brown B8393 +145 136 86 Medium Olive Green B8394 +124 98 89 Medium Brown B8619 +144 124 105 Dark Beige B8621 +102 82 71 Dark Fawn B8651 + 80 64 66 Dark Grey B8653 +174 67 48 Dark Orange / Brown B8710 +109 55 45 Dark Brown B8715 +124 82 84 Brown / Pink B8723 +116 83 70 Medium Brown B8724 +145 61 62 Dark Rust Red B8725 +162 98 96 Dark Salmon Pink B8740 +115 66 49 Dark Brown B8759 +123 73 46 Brown B8768 +106 66 43 Dark Brown B8780 + 83 51 48 Dark Brown B8792 + 79 44 34 Dark Brown B8915 + 60 51 52 Dark Grey B8921 + 63 53 57 Dark Grey B8932 + 75 48 50 Dark Maroon B8935 +165 125 59 Gold / Yellow B8974 +220 190 155 Pale Peach B8977 +190 196 207 Pale Silver B9119 +183 188 192 Medium Grey B9120 +201 204 205 Medium Silver B9123 +152 154 157 Dark Grey B9126 +212 207 214 Pale Grey / Pink B9130 +178 181 192 Medium Grey B9143 +158 159 167 Medium Grey B9148 +176 181 190 Medium Grey / Blue B9160 +159 169 172 Light Grey B9162 +204 201 199 Pale Silver B9163 +204 218 228 Pale Silver B9169 +209 226 233 Pale Silver B9172 +196 194 194 Pale Grey B9180 +160 154 154 Medium Grey B9182 +194 197 193 Pale Grey B9190 +125 115 116 Dark Grey B9342 +193 184 186 Pale Grey / Pink B9344 +165 172 188 Medium Grey B9355 +161 162 159 Medium Grey B9365 +171 179 194 Pale Grey B9369 +151 149 150 Dark Grey B9379 +120 125 144 Dark Gey B9509 +139 134 145 Dark Grey B9532 + 80 75 78 Dark Grey B9558 +103 104 110 Dark Grey B9595 +125 126 120 Green / Grey B9596 +119 116 118 Dark Grey B9608 +140 133 137 Medium Grey B9632 + 83 79 82 Dark Grey B9636 + 63 66 76 Dark Navy B9901 + 59 61 68 Dark grey B9912 + 42 46 51 Dark Grey B9914 + 78 85 99 Petrol Blue B9946 + 39 41 44 Dark Grey B9953 diff --git a/extensions/fablabchemnitz/inkstitch/palettes/InkStitch DMC.gpl b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch DMC.gpl new file mode 100644 index 00000000..38d68bc8 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch DMC.gpl @@ -0,0 +1,462 @@ +GIMP Palette +Name: Ink/Stitch: DMC +Columns: 4 +# RGB Value Color Name Number +255 255 255 White White +233 233 212 Ecru Ecru +255 255 255 White 0000 +255 236 191 Ecru 0000 +148 91 128 Lavender Very Dark 0208 +206 148 186 Lavender Dark 0209 +236 207 225 Lavender Medium 0210 +243 218 228 Lavender Light 0211 +156 41 74 Shell Pink Very Dark 0221 +219 128 115 Shell Pink Light 0223 +255 199 176 Shell Pink Very Light 0224 +255 240 228 Shell Pink Ultra Very L 0225 +143 57 38 Mahogany Very Dark 0300 +209 102 84 Mahogany Medium 0301 +188 0 97 Christmas Red Medium 0304 +255 231 109 Lemon 0307 +214 43 91 Rose Dark 0309 + 0 0 0 Black 0310 + 0 79 97 Navy Blue Medium 0311 + 58 84 103 Navy Blue Light 0312 +163 90 91 Antique Mauve Very Dark 0315 +220 141 141 Antique Mauve Medium 0316 +167 139 136 Pewter Grey 0317 +197 198 190 Steel Grey Light 0318 + 85 95 82 Pistachio Green Very Dark 0319 +138 153 120 Pistachio Green Medium 0320 +231 18 97 Christmas Red 0321 + 81 109 135 Navy Blue Very Light 0322 +188 22 65 Rose Very Dark 0326 + 61 0 103 Violet Dark 0327 +127 84 130 Blue Violet Very Dark 0333 +115 140 170 Baby Blue Medium 0334 +219 36 79 Rose 0335 + 36 73 103 Navy Blue 0336 +162 121 164 Blue Violet Medium 0340 +145 180 197 Blue Violet Light 0341 +194 36 67 Salmon Very Dark 0347 +220 61 91 Coral Dark 0349 +237 69 90 Coral Medium 0350 +255 128 135 Coral 0351 +255 157 144 Coral Light 0352 +255 196 184 Peach Flesh 0353 +189 73 47 Terra Cotta Dark 0355 +226 114 91 Terra Cotta Medium 0356 + 95 112 91 Pistachio Green Dark 0367 +181 206 162 Pistachio Green Light 0368 +243 250 209 Pistachio Green Very Light 0369 +184 138 87 Mustard Medium 0370 +196 155 100 Mustard 0371 +203 162 107 Mustard Light 0372 +157 60 39 Mahogany Dark 0400 +255 190 164 Mahogany Very Light 0402 +194 101 76 Sportsman Flsh Very D 0407 +109 95 95 Pewter Grey Dark 0413 +167 139 136 Steel Grey Dark 0414 +221 221 218 Pearl Grey 0415 +140 91 43 Hazel Nut Brown Dark 0420 +237 172 123 Hazel Nut Brown Light 0422 +151 84 20 Brown Medium 0433 +178 103 70 Brown Light 0434 +187 107 57 Brown Very Light 0435 +231 152 115 Tan 0436 +238 171 121 Tan Light 0437 +255 176 0 Lemon Dark 0444 +255 255 190 Lemon Light 0445 +179 151 143 Shell Grey Dark 0451 +210 185 175 Shell Grey Medium 0452 +235 207 185 Shell Grey Light 0453 +116 114 92 Avocado Green 0469 +133 143 108 Avocado Green Light 0470 +176 187 140 Avocado Green Very Light 0471 +238 255 182 Avocado Green Ultra Light 0472 +187 0 97 Christmas Red Light 0498 + 43 57 41 Blue Green Very Dark 0500 + 67 85 73 Blue Green Dark 0501 +134 158 134 Blue Green 0502 +195 206 183 Blue Green Medium 0503 +206 221 193 Blue Green Light 0504 + 16 127 135 Wedgewood Medium 0517 +102 148 154 Wedgewood Light 0518 +194 209 207 Sky Blue 0519 + 55 73 18 Fern Green Dark 0520 +159 169 142 Fern Green 0522 +172 183 142 Fern Green Light 0523 +205 182 158 Fern Green Very Light 0524 + 85 85 89 Ash Grey Very Light 0535 +239 214 188 Beige Brown Ultra Very Light 0543 +109 18 97 Violet Very Light 0550 +146 85 130 Violet Medium 0552 +160 100 146 Violet 0553 +243 206 225 Violet Light 0554 + 59 96 76 Jade Very Dark 0561 + 97 134 97 Jade Medium 0562 +182 212 180 Jade Light 0563 +214 230 204 Jade Very Light 0564 + 0 103 0 Moss Green Dark 0580 +151 152 49 Moss Green 0581 +128 151 132 Turquoise 0597 +208 223 205 Turquoise Light 0598 +208 57 106 Cranberry Very Dark 0600 +222 57 105 Cranberry Dark 0601 +231 84 122 Cranberry Medium 0602 +255 115 140 Cranberry 0603 +255 189 202 Cranberry Light 0604 +255 207 214 Cranberry Very Light 0605 +255 0 0 Bright Orange Red 0606 +255 91 0 Bright Orange 0608 +151 104 84 Drab Brown Very Dark 0610 +158 109 91 Drab Brown Dark 0611 +203 152 103 Drab Brown Medium 0612 +219 176 122 Drab Brown Light 0613 +162 77 52 Negro Flesh Medium 0632 +163 163 157 Beige Grey Very Dark 0640 +174 176 170 Beige Grey Dark 0642 +224 224 215 Beige Grey Medium 0644 +113 113 113 Beaver Grey Very Dark 0645 +121 121 121 Beaver Grey Dark 0646 +190 190 185 Beaver Grey Medium 0647 +202 202 202 Beaver Grey Light 0648 +213 39 86 Christmas Red Light 0666 +255 206 158 Old Gold Light 0676 +255 231 182 Old Gold Very Light 0677 +209 140 103 Old Gold Dark 0680 + 0 91 6 Chirstmas Green 0699 + 0 96 47 Christmas Green Bright 0700 + 79 108 69 Christmas Green Light 0701 + 79 121 66 Kelly Green 0702 +121 144 76 Chartreuse 0703 +165 164 103 Chartreuse Bright 0704 +245 240 219 Cream 0712 +219 55 121 Plum 0718 +200 36 43 Orange Spice Dark 0720 +255 115 97 Orange Spice Medium 0721 +255 146 109 Orange Spice Light 0722 +255 200 124 Topaz 0725 +255 224 128 Topaz Light 0726 +255 235 168 Topaz Very Light 0727 +243 176 128 Old Gold Medium 0729 +132 119 17 Olive Green Very Dark 0730 +123 119 10 Olive Green Dark 0731 +128 125 21 Olive Green 0732 +158 158 7 Olive Green Medium 0733 +186 196 5 Olive Green Light 0734 +244 195 139 Tan Very Light 0738 +244 233 202 Tan Ultra Very Light 0739 +255 131 19 Tangerine 0740 +255 142 4 Tangerine Medium 0741 +255 183 85 Tangerine Light 0742 +255 230 146 Yellow Medium 0743 +255 239 170 Yellow Pale 0744 +255 240 197 Yellow Light Pale 0745 +246 234 219 Off White 0746 +240 247 239 Sky Blue Very Light 0747 +251 227 209 Peach Flesh Light 0754 +255 177 147 Terra Cotta Very Light 0758 +249 160 146 Salmon 0760 +255 201 188 Salmon Light 0761 +232 232 229 Pearl Grey Very Light 0762 +231 249 203 Pine Green Light 0772 +247 246 248 Baby Blue Very Light 0775 +255 177 174 Pink Medium 0776 +255 199 184 Antique Mauve Very Light 0778 +181 98 46 Topaz Ultra Very Dark 0780 +181 107 56 Topaz Very Dark 0781 +204 119 66 Topaz Dark 0782 +225 146 85 Topaz Medium 0783 + 71 55 93 Cornflower Blue VeryD 0791 + 97 97 128 Cornflower Blue Dark 0792 +147 139 164 Cornflower Blue Medium 0793 +187 208 218 Cornflower Blue Light 0794 + 30 58 95 Royal Blue Dark 0796 + 30 66 99 Royal Blue 0797 +103 115 141 Delft Dark 0798 +132 156 182 Delft Medium 0799 +233 238 233 Delft PALE 0800 +123 71 20 Coffee Brown Dark 0801 + 30 130 133 Peacock Blue Dark 0806 +128 167 160 Peacock Blue 0807 +190 193 205 Delft 0809 +175 195 205 Blue Light 0813 +162 0 88 Garnet Dark 0814 +166 0 91 Garnet Medium 0815 +179 0 91 Garnet 0816 +219 24 85 Coral Red Very Dark 0817 +255 234 235 Baby Pink 0818 +248 247 221 Baby Pink Light 0819 + 30 54 85 Royal Blue Very Dark 0820 +242 234 219 Beige Grey Light 0822 + 0 0 73 Navy Blue Dark 0823 + 71 97 116 Blue Very Dark 0824 + 85 108 128 Blue Dark 0825 +115 138 153 Blue Medium 0826 +213 231 232 Blue Very Light 0827 +237 247 238 Blue Ultra Very Light 0828 +130 90 8 Golden Olive Very Dark 0829 +136 95 18 Golden Olive Dark 0830 +144 103 18 Golden Olive Medium 0831 +178 119 55 Golden Olive 0832 +219 182 128 Golden Olive Light 0833 +242 209 142 Golden Olive Very Light 0834 + 94 56 27 Beige Brown Very Dark 0838 +109 66 39 Beige Brown Dark 0839 +128 85 30 Beige Brown Medium 0840 +188 134 107 Beige Brown Light 0841 +219 194 164 Beige Brown Very Light 0842 +107 103 102 Beaver Brown Ultra Dark 0844 +153 92 48 Hazel Nut Brown Very Dark 0868 +153 92 48 Hazel Nut Brown Very Dark 0869 + 79 86 76 Pistachio Green Ultra Dark 0890 +241 49 84 Carnation Dark 0891 +249 90 97 Carnation Medium 0892 +243 149 157 Carnation Light 0893 +255 194 191 Carnation Very Light 0894 + 89 92 78 Hunter Green Very Dark 0895 +118 55 19 Coffee Brown Very Dark 0898 +233 109 115 Rose Medium 0899 +206 43 0 Burnt Orange Dark 0900 +138 24 77 Granet Very Dark 0902 + 78 95 57 Parrot Green Very Dark 0904 + 98 119 57 Parrot Green Dark 0905 +143 163 89 Parrot Green Medium 0906 +185 200 102 Parrot Green Light 0907 + 49 105 85 Emerald Green Very Dark 0909 + 48 116 91 Emerald Green Dark 0910 + 49 128 97 Emerald Green Medium 0911 +115 158 115 Emerald Green Light 0912 +153 188 149 Nile Green Medium 0913 +170 24 91 Plum Dark 0915 +171 22 95 Plum Medium 0917 +168 68 76 Red Copper Dark 0918 +180 75 82 Red Copper 0919 +197 94 88 Copper Medium 0920 +206 103 91 Copper 0921 +237 134 115 Copper Light 0922 + 86 99 100 Grey Green Very Dark 0924 + 96 116 115 Grey Green Light 0926 +200 198 194 Grey Green Light 0927 +225 224 216 Grey Green Very Light 0928 +102 122 140 Antique Blue Dark 0930 +124 135 145 Antique Blue Medium 0931 +182 186 194 Antique Blue Light 0932 + 62 59 40 Black Avocado Green 0934 + 67 63 47 Avocado Green Dark 0935 + 69 69 49 Avocado Green Very D 0936 + 73 86 55 Avocado Green Medium 0937 + 99 39 16 Coffee Brown Ultra Dark 0938 + 0 0 49 Navy Blue Very Dark 0939 + 0 162 117 Aquamarine Medium 0943 +255 206 164 Flesh Medium 0945 +244 73 0 Burnt Orange Medium 0946 +255 91 0 Burnt Orange 0947 +255 243 231 Peach Flesh Very Light 0948 +239 162 127 Sportsman Flesh 0950 +255 229 188 Flesh 0951 +170 213 164 Nile Green 0954 +214 230 204 Nile Green Light 0955 +255 109 115 Geranium 0956 +255 204 208 Gernanium Pale 0957 + 0 160 130 Sea Green Dark 0958 +171 206 177 Sea Green Medium 0959 +243 108 123 Dusty Rose Dark 0961 +253 134 141 Dusty Rose Medium 0962 +255 233 233 Dusty Rose Ultra Very L 0963 +208 224 210 Sea Green Light 0964 +206 213 176 Baby Green Medium 0966 +255 117 24 Pumpkin Light 0970 +255 106 0 Pumpkin 0971 +255 146 0 Canary Dark 0972 +255 194 67 Canary BRT 0973 +158 67 18 Golden Brown Dark 0975 +246 141 57 Golden Brown Medium 0976 +255 164 73 Golden Brown Light 0977 + 58 82 65 Forest Green Very Dark 0986 + 83 97 73 Forest Green Dark 0987 +134 145 110 Forest Green Medium 0988 +134 153 110 Forest Green 0989 + 47 91 73 Aquamarine Dark 0991 +146 183 165 Aquamarine 0992 +192 224 200 Aquamarine Light 0993 + 0 123 134 Electric Blue Dark 0995 +170 222 225 Electric Blue Medium 0996 +123 119 17 Khaki Green Dark 3011 +181 170 89 Khaki Green Medium 3012 +204 196 129 Khaki Green Light 3013 +115 91 93 Brown Grey Very Dark 3021 +172 172 170 Brown Grey Medium 3022 +198 190 173 Brown Grey Light 3023 +210 208 205 Brown Grey Very Light 3024 + 84 56 23 Mocha Brown Very Dark 3031 +188 156 120 Mocha Brown Medium 3032 +239 219 190 Mocha Brown Very Light 3033 +190 155 167 Antique Violet Medium 3041 +225 205 200 Antique Violet Light 3042 +216 151 105 Yellow Beige Dark 3045 +229 193 139 Yellow Beige Medium 3046 +255 236 211 Yellow Beige Light 3047 + 85 73 0 Green Grey Dark 3051 +137 141 114 Green Grey Medium 3052 +187 179 148 Green Grey 3053 +194 101 76 Dessert Sand 3064 +233 233 223 Beaver Grey Very Light 3072 +255 255 220 Golden Yellow Very Light 3078 +202 226 229 Baby Blue Light 3325 +255 157 150 Rose Light 3326 +188 64 85 Salmon Dark 3328 +255 123 103 Apricot Medium 3340 +255 172 162 Apricot 3341 + 97 100 82 Hunter Green Dark 3345 +120 134 107 Hunter Green 3346 +128 152 115 Yellow Green Medium 3347 +225 249 190 Yellow Green Light 3348 +201 79 91 Dusty Rose Ultra Dark 3350 +255 214 209 Dusty Rose Light 3354 + 96 95 84 Pine Green Dark 3362 +116 127 96 Pine Green Medium 3363 +161 167 135 Pine Green 3364 + 83 37 16 Black Brown 3371 +231 79 134 Plum Light 3607 +247 152 182 Plum Very Light 3608 +255 214 229 Plum Ultra Light 3609 +161 53 79 Mauve Dark 3685 +203 78 97 Mauve 3687 +250 151 144 Mauve Medium 3688 +255 213 216 Mauve Light 3689 +255 85 91 Melon Dark 3705 +255 128 109 Melon Medium 3706 +254 212 219 Melon Light 3708 +230 101 107 Salmon Medium 3712 +253 229 217 Salmon Very Light 3713 +255 211 212 Dusty Rose Very Light 3716 +184 75 77 Shell Pink Dark 3721 +184 89 88 Shell Pink Medium 3722 +195 118 123 Antique Mauve Dark 3726 +255 199 196 Antique Mauve Light 3727 +209 93 103 Dusty Rose Very Dark 3731 +255 154 148 Dusty Rose 3733 +156 125 133 Antique Violet Dark 3740 +235 235 231 Antique Violet Very L 3743 +149 102 162 Blue Violet Dark 3746 +230 236 232 Blue Violet Very Light 3747 + 12 91 108 Antique Blue Very Dark 3750 +194 209 206 Antique Blue Very Light 3752 +237 247 247 Ant. Blue Ultra Very Light 3753 +158 176 206 Baby Blue 3755 +248 248 252 Baby Blue Ultra Very Light 3756 +102 142 152 Wedgewood 3760 +227 234 230 Sky Blue Light 3761 + 24 128 134 Peacock Blue Very Dark 3765 + 24 101 111 Peacock Blue Light 3766 + 92 110 108 Grey Green Dark 3768 +255 250 224 Flesh Very Light 3770 +173 83 62 Negro Flesh 3772 +231 134 103 Sportsman Flesh Medium 3773 +255 220 193 Sportsman Flesh Very L 3774 +221 109 91 Mahogony Light 3776 +191 64 36 Terra Cotta Very Dark 3777 +237 122 100 Terra Cotta Light 3778 +255 177 152 Ter. Cotta Ultra Very L 3779 +113 71 42 Mocha Brown Dark 3781 +206 175 144 Mocho Brown Light 3782 +139 109 115 Brown Grey Dark 3787 +140 117 109 Beige Grey Ultra Dark 3790 + 81 76 83 Pewter Grey Very Dark 3799 +255 44 0 Dark Melon Very 3801 + 9 145 160 Antique Mauve Very Dark 3802 +161 0 72 Mauve Dark 3803 +242 24 121 Cyclamen Pink Dark 3804 +255 38 135 Cyclamen Pink 3805 +242 121 175 Cyclamen Pink Light 3806 +119 89 179 Cornflower Bleu 3807 + 0 107 107 Turquoise Ultra Very Dark 3808 + 0 153 153 Turquoise Very Dark 3809 + 0 191 191 Turquoise Dark 3810 +204 255 255 Turquoise Very Light 3811 + 83 166 130 Seagreen Very Dark 3812 +195 217 207 Bleu Green Light 3813 + 70 140 110 Aquamarine 3814 + 98 140 122 Celadon Green Dark 3815 +143 191 171 Celadon Green 3816 +182 242 216 Celadon Green Light 3817 + 0 107 61 Emarald Green Ultra Very Dark 3818 +206 244 7 Moss Green Light 3819 +255 242 128 Straw Dark 3820 +255 234 51 Straw 3821 +255 242 128 Straw Light 3822 +255 250 204 Pale Yellow Ultra 3823 +255 198 140 Apricot Light 3824 +255 211 166 Pale Pumpkin 3825 +191 120 48 Golden Brown 3826 +255 204 128 Pale Golden Brown 3827 +191 157 105 Hazelnut Brown 3828 +204 163 102 Old Gold Very Dark 3829 +179 82 18 Terra Cotta 3830 +230 0 102 Raspberry Dark 3831 +204 51 119 Raspberry Medium 3832 +255 140 191 Raspberry Light 3833 +138 69 138 Grape Dark 3834 +166 83 166 Grape Medium 3835 +204 163 204 Grape Light 3836 +153 0 153 Lavender Ultra Dark 3837 +128 96 191 Lavender Bleu Dark 3838 +105 127 191 Lavender Bleu Medium 3839 +207 212 230 Lavender Bleu Light 3840 +220 229 250 Pale Baby Bleu 3841 + 0 102 179 Wedgwood Dark 3842 + 77 121 255 Electric Bleu 3843 + 23 173 230 Turquoise Dark Bright 3844 + 46 179 230 Turquoise Medium Bright 3845 +128 220 255 Turquoise Light Bright 3846 + 11 115 115 Teal Green Dark 3847 + 0 153 153 Teal Green Medium 3848 +110 173 172 Teal Green Light 3849 + 14 140 86 Green Dark Bright 3850 +104 199 160 Green Light Bright 3851 +255 214 0 Straw Very Dark 3852 +255 165 13 Autumn Gold Dark 3853 +255 181 105 Autumn Gold Medium 3854 +255 236 191 Autumn Gold Light 3855 +255 226 191 Mahogany Ultra Very Light 3856 +153 77 0 Rosewood Dark 3857 +166 96 25 Rosewood Medium 3858 +217 141 65 Rosewood Light 3859 +166 122 58 Cocoa 3860 +166 129 91 Cocao Light 3861 +166 104 41 Mocha Beige Dark 3862 +191 134 77 Mocha Beige Medium 3863 +217 174 130 Mocha Beige Light 3864 +255 255 242 Winter White 3865 +245 240 219 Mocha Brown Ultra Very Light 3866 +138 55 59 Raspberry Very Dark 0777 +242 188 197 Dusty Rose Very Light 0151 +159 56 69 Dusty Rose Ultra Very Dark 0150 +207 162 150 Shell Pink Medium Light 0152 +222 188 217 Violet Very Light 0153 + 77 46 61 Grape Very Dark 0154 +139 154 197 Blue Violet Medium Light 0156 +144 139 195 Blue Violet Medium Dark 0155 +171 194 222 Cornflower Blue Very Light 0157 + 70 80 130 Cornflower Blue Medium V 0158 +189 219 230 Blue Ultra Very Light 0162 + 44 73 111 Baby Blue Ultra Very Dark 0803 + 65 130 83 Jade 0505 + 86 149 113 Celadon Green Medium 0163 +159 204 141 Forestgreen Light 0164 +218 216 120 MOSS Green Very Light 0165 +191 187 32 Moss Green Medium Light 0166 +159 132 71 Yellowbeige Very Dark 0167 +236 191 60 Topaz 0728 +243 200 182 Apricot Very Light 0967 +232 181 143 Terra Cotta Ultra Very Light 3771 +109 87 72 Cocoa Dark 0779 +255 255 255 White 0001 +167 180 205 Gray Blue Light 0159 +130 144 174 Gray Blue Medium 0160 +102 117 148 Gray Blue 0161 +180 195 193 Pewter Very Light 0168 +139 154 148 Pewter Light 0169 +255 255 255 Snow White(B5200) 5200 diff --git a/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Embroidex.gpl b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Embroidex.gpl new file mode 100644 index 00000000..06d75f75 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Embroidex.gpl @@ -0,0 +1,262 @@ +GIMP Palette +Name: Ink/Stitch: Embroidex +Columns: 4 +# RGB Value Color Name Number +144 86 50 Warm Toffee 2161 +107 73 58 Peach Spice 2286 +170 92 55 Pumpkin Pie Spice 2175 + 95 73 60 Dusky Salmon 2160 + 88 61 49 Rosy Brick 2052 +175 91 62 Rusty Brick 2181 + 93 65 50 Metallic Copper 2024 +105 68 43 Uncertain Orange 2053 +105 68 44 Orange Sunrise 2048 +130 66 50 Wild Salmon 2007 +203 89 63 Orange Glow 2176 +136 71 51 Orange Sherbert 2047 +145 76 50 Dayglow Orange 2153 +244 116 53 Pumpkin 2051 +233 125 73 Pumpkin Ice 2865 +131 97 68 Salmon Rush 2173 +106 80 49 Shades of Melon 2050 +131 106 53 Apricot Dawn 2006 +148 104 52 Orange Delight 2157 +133 104 54 Cantaloupe 2022 +146 103 39 Apricot Glow 2156 +210 139 83 Meskmelon Orange 2049 +176 116 114 Dawn Pink 2033 +101 98 102 Rosy Beige 2032 +111 98 94 Chocolate Cream 2122 +197 128 107 Tangerine Peach 2046 +116 95 86 Rose Gold 2821 +221 159 120 Antique Rose 2404 +140 124 115 Dainty Pink Brush 2178 +118 120 112 Rose Beige 2171 +120 124 111 Beige Blush 2117 +115 124 103 Warm Beige 2158 +130 163 96 Spring Yellow 2018 +143 153 96 Pineapple Ice 2155 +146 145 68 Pale Tangerine 2020 +122 130 68 Lemon Sherbet 2005 +199 166 98 Lemon Ice 2017 +208 175 91 Hint of Gold 2019 +170 140 82 Butterscotch 2025 +106 107 58 Dk. Avacodo 2106 +163 125 80 Butter Taffy 2125 +219 153 68 Sunrise Gold 2021 +247 144 75 Bright Persimmon 2403 +211 157 137 Pale Rose 2164 +196 160 144 Warm Almond 2172 +213 174 155 Chocolate Milk 2120 +178 154 138 Sphinx 2137 +160 144 126 Creamy Beige 2119 +174 148 116 Desert Morning 2274 +171 140 109 Apricot Blush 1914 +180 139 101 Summer Tan 2174 +174 134 88 Daybreak Apricot 2014 +150 115 72 Gold Wire 2128 +120 91 56 Bright Penny 2278 +147 108 89 Mauve 2163 +131 108 75 Rosy Ecru 2121 +139 112 92 Cafe au Lait 2075 + 98 78 47 Dark Bronze 2030 +103 84 52 Antique Gold 2028 +117 93 76 Pale Mauve 2295 +114 87 60 Light Brown 2132 +127 97 60 Copper Penny 2289 +124 80 54 Pecan Brown 2291 +136 85 52 Metallic Bronze 2029 + 80 57 38 Aztec Gold 2124 +139 79 100 Plum 2040 +104 52 74 Wine 2058 + 85 42 72 Dark Claret 2059 +108 73 120 Dark Lilac 2083 + 85 53 89 Royal Purple 2084 + 52 41 62 No Doubt Purple 2210 + 98 69 73 Pale Grape 2815 + 67 41 51 Dark Plum 2085 + 94 58 62 Amethyst Pink 2060 + 96 30 33 Burgundy 2056 + 78 31 38 Rich Burgundy 2055 + 69 35 45 Dusky Burgandy 2057 + 81 47 55 Fudge Delight 2186 +121 62 55 Dusty Pink 2037 +147 78 63 Desert Sandstone 2131 +149 68 44 Bright Penny 2180 +115 66 49 Copper Wire 2126 +125 56 41 Walnut Brown 2290 +127 68 55 Brick Sparkle 2127 +100 70 56 Silver Brown 2130 + 92 54 48 Cocoa Brown 2280 +137 108 124 Mulberry 2294 +136 114 140 Concord Grape 2080 +139 88 134 Bright Purple 2081 +165 117 178 Purple Twilight 2082 +173 137 155 French Lilac 2079 +164 136 168 Lavender 2078 +167 146 179 Lilac Gray 2077 +153 143 196 Lavender Mist 2202 + 86 82 119 Purple Cloud 2208 + 64 53 69 Purple Smoke 2086 + 70 58 82 Indigo 2305 + 90 79 95 Plum Delight 2931 +120 108 121 Twilight Lilac 2203 +143 135 153 Ghost Gray 2205 +170 172 187 Summer Rainstorm 2143 +153 155 180 Blue Gray 2063 +128 141 180 Dusky Blue 2065 +129 157 180 Summer Sky 2189 + 82 63 54 Old Pewter 2145 + 83 62 49 Traditional Brown 2134 + 79 49 43 Rich Brown 2283 + 71 42 37 Dark Brown 2133 +168 210 125 Elfin Green 2241 +168 197 140 Lime Green 2003 +165 207 155 Spring Garden Green 2245 +155 186 157 Powder Green 2236 +147 159 141 Dark Seafoam Green 2225 +137 173 185 True Aqua 2090 +131 166 171 Pistachio Green 2223 +105 169 159 True Turquoise 2096 + 95 148 127 Real Teal 2214 +108 132 129 Pale Aqua 2089 + 80 170 141 Bright Turquoise 2104 + 76 142 144 Standalone Teal 2217 + 44 90 98 Bright Teal 2220 + 52 92 121 Metallic Teal 2221 + 60 95 117 Blue Assertion 2232 + 71 96 131 Dark Topaz 2312 + 71 96 130 Brilliant Blue 2231 + 73 141 173 Dark Aquamarine 2233 +102 130 176 Bright Sky Blue 2066 +114 137 177 Blue Bonnet Blue 2190 +152 170 203 Dapple Gray 2207 +135 132 112 Light Pewter 2249 +122 123 88 Covert Green 2300 +130 126 101 Spanish Moss 2261 + 77 75 67 Charcoal Shadow 2147 + 77 92 97 Smokey Teal 2198 + 74 101 124 Stormy Teal 2215 + 71 78 92 Dark Gray 2296 + 43 59 70 Dark Teal 2200 + 64 78 88 Stormy Cloud Blue 2062 + 62 65 81 Twilight Night 2206 + 52 55 73 Bold Amethyst 2209 + 58 61 78 Blueberry 2088 + 51 69 110 Navy Blue 2071 + 37 60 119 Twilight Blue 2067 + 45 58 89 Little Boy Blue 2196 + 42 56 85 Sapphire Blue 2069 + 32 51 85 Blue Willow 2199 + 43 58 95 Wild Larkspur 2194 + 58 71 104 Charcoal Night 2201 + 36 28 44 Eggplant 2901 + 41 47 68 India Ink Blue 2070 +128 122 96 Lichen Green 2264 +138 143 113 Gray Green 2111 +146 160 101 Dark Moss Green 2246 +138 186 88 Spring Green 2101 +169 184 81 Neon Green 2001 +161 184 107 Mint Green 2002 +125 166 104 Bright Grass Green 2015 +125 150 81 Leaf Green 2100 + 97 104 73 Fresh Mint Green 2260 + 83 121 58 Herb Garden Green 2242 + 96 117 85 Pea Green 2099 + 94 158 96 Sunlit Meadow Green 2110 + 87 144 96 Irish Green 2240 +103 171 109 Kelly Green 2102 +114 172 95 Grass Green 2004 + 65 70 64 Deep Water Green 2114 + 80 85 111 Slate Blue 2092 + 85 98 130 Silver Sky 2191 + 62 81 132 Royal Blue 2068 + 69 89 156 Faded Denim Blue 2197 + 40 66 85 Stained Glass Blue 2230 + 63 75 97 Cadet Blue 2087 +154 147 137 Icicle 2297 +151 143 143 Silver Blue 2146 +150 138 141 Platinum Ice 2299 +149 143 148 GS Gray 2141 +113 115 117 Sea Spray Green 2061 +120 118 116 Smoke 2276 +143 129 125 Cinder 2138 +155 148 137 Light Sage 2136 +151 150 138 Smoky Green 2098 +120 122 115 Mint Ice 2188 +143 146 138 Pale Moss 2298 +173 174 154 Glacier Green 2224 +154 154 126 Silver Patina 2265 +171 176 124 Hint of Celery 2154 +135 152 110 Forest Green 2234 +132 164 115 Pale Green 2238 +144 171 132 Moss Green 2235 + 52 100 94 Dark Turquoise 2097 + 74 137 116 Holly Green 2244 + 66 126 102 Shamrock Green 2103 + 69 108 92 Leprechaun Green 2109 + 68 76 69 Brilliant Green 2106 +168 152 137 Stark White 2271 +192 178 167 First Snowfall White 2149 +178 166 160 Heirloom Rose / Beige 2140 +184 173 164 Foggy Morning Blue 2187 +194 176 173 Adobe Brick 2255 +187 152 141 Golden Sands 2170 +163 144 130 Woodsmoke 2293 +179 154 129 White Shadow 2115 +200 175 139 Cloud White 2272 +204 183 139 White Gold 2259 +201 197 147 Sandy Shore 2118 +199 192 135 Rich Vanilla 2016 +170 160 116 Sun Washed White 2116 + 81 88 81 Oak Green 2250 + 62 75 64 Dark Forest Green 2105 + 65 68 58 Dark Pewter 2252 + 51 56 52 Ash Green 2251 + 58 61 50 Hunter Green 2405 + 42 54 44 Shadowy Forest Green 2108 + 35 47 51 Black Forest Green 2268 + 35 39 54 Midnight Sky Blue 2072 + 98 87 82 Battleship Gray 2144 +107 94 82 Mountain Waterfall 2277 +110 93 61 Green Smoke 2113 +120 100 73 Teak 2129 +128 111 90 Beige Smoke 2123 +120 106 92 Medium Taupe 2292 + 78 59 48 Medium Gray 2302 + 67 62 53 Dark Taupe 2281 + 76 68 63 Dark Brown 2135 + 60 54 62 Stormy Waters 2148 + 49 53 65 Paving Stone 2304 + 52 51 54 Inky Midnight 2074 + 67 56 57 Black Walnut 2285 + 67 56 56 Genuine Brown 2212 + 47 34 29 Coffee Brown 2284 + 51 45 43 Dull Black 2306 + 35 35 33 Dark Charcoal 2150 +127 54 47 Old Brick Red 2182 +173 51 56 Pink With Attitude 2183 +191 57 54 Raspberry Ice 2319 +209 61 52 Strawberry Delight 2406 +194 81 81 Dark Rose 2168 +118 82 92 Dusty Rose 2834 +145 69 82 Crimson 2042 +148 61 106 Bright Magenta 2041 +182 117 152 Blueberry Cream 2204 +191 53 77 Dark Crimson 2044 +169 64 77 Ruby 2043 +173 70 102 Peppermint Stick Pink 2167 +172 57 90 Cranberry Red 2184 +195 83 107 Strawberry Frappe 2269 +196 94 90 Candy Apple Red 2185 +219 87 95 Bright Rose Pink 2010 +212 113 114 Candy Cane Pink 2166 +207 110 111 Cherry Blossom Pink 2034 +246 149 157 Heirloom Pink 2009 +232 177 174 Breath of Lilac 2076 +247 155 139 Bright Pink 2038 +246 148 140 Rose Delight 2179 +247 148 138 Baby Doll Pink 2036 +226 139 134 Cotton Candy Pink 2165 +233 139 139 Honest Pink 2035 +196 174 171 Shadow on Snow 2142 diff --git a/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Emmel.gpl b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Emmel.gpl new file mode 100644 index 00000000..908ab78f --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Emmel.gpl @@ -0,0 +1,525 @@ +GIMP Palette +Name: Ink/Stitch: Emmel +Columns: 4 +# RGB Value Color Name Number +239 236 217 Eggshell White ML1001 +246 216 208 Whisper Pink ML1002 +245 199 199 Crystal Pink ML1003 +242 176 178 Sweet Pink ML1004 +254 159 155 Flamingo Pink ML1005 +234 105 110 Dusty Rose ML1006 +235 95 96 Country Rose 2 ML1007 +247 200 194 Light Coral ML1008 +238 183 176 Peach Skin ML1009 +241 169 170 Pale Pink ML1010 +238 151 159 Medium Pink ML1011 +250 108 120 Brick ML1012 +254 86 119 Dark Pink ML1013 +232 69 100 Medium Pink ML1014 +228 64 99 Pink ML1015 +220 30 74 Cerise ML1016 +252 221 193 Peach ML1017 +255 179 181 Corsage ML1018 +240 122 122 Dark Peach ML1019 +219 104 121 Antique Pink ML1020 +249 186 171 Flesh Pink ML1021 +252 145 148 Azalea ML1022 +254 94 102 Begonia ML1023 +246 45 61 Fluo Pink ML1024 +229 9 21 Fire Engine Red ML1025 +255 209 219 Delicate Mauve ML1026 +252 170 192 Petal Pink ML1028 +236 99 143 Begonia ML1029 +242 78 128 Fluo Pink ML1030 +235 61 114 Azalea ML1031 +218 27 58 N / A ML1032 +242 186 197 Light Mauve ML1033 +226 162 188 Light Pink ML1034 +217 163 197 Orchid ML1035 +195 116 161 Desert Rose ML1036 +177 72 128 DK Fushia ML1037 +197 48 103 Dark Pink ML1038 +190 43 97 Ruby Glint ML1039 +241 151 176 Medium Pink ML1040 +253 121 160 Medium Pink ML1041 +222 88 125 Cranberry medium ML1042 +205 69 119 Pink Rapture ML1043 +190 58 97 Dark Pink ML1044 +176 40 80 Candy Apple Red ML1045 + 83 25 11 Dark Brown ML1046 +206 153 145 Brownish pink ML1047 +161 95 99 Marsh Rose ML1048 +138 53 56 Raspberry Very Dark ML1049 +117 50 57 Wine ML1050 +255 238 219 Beige ML1051 +255 219 193 Flesh Light ML1052 +254 188 164 Cinnamon Light ML1053 +255 166 152 Champagne Pink ML1054 +247 126 109 Blush Medium ML1055 +244 64 67 Fluo Pink ML1056 +222 58 69 Desert Rose ML1057 +221 46 51 Fiery Red ML1058 +207 43 41 Christmas Red BR ML1059 +182 47 53 Orange ML1060 + 88 2 5 TH Burgundy ML1061 +255 102 114 Bitteroot ML1062 +251 77 68 Red ML1063 +229 41 55 Persimmon ML1064 +228 32 34 Ruby Red ML1065 +203 27 29 Wild Fire ML1066 +209 19 19 Carmine ML1067 +221 30 25 Fire Engine Red ML1068 +185 35 47 Warm Red ML1069 +157 32 40 Cabernet ML1070 +139 29 38 Brick ML1071 +103 24 29 Brown ML1072 +131 35 36 Formula One ML1073 +154 34 35 Aurora Red ML1074 + 73 42 40 Deep Walnut ML1075 +246 233 217 Bridal Blush ML1076 +255 229 214 Rosewater ML1077 +253 236 192 Ecru ML1078 +253 187 139 Pooh ML1079 +255 145 89 Summer Splendor ML1080 +254 127 60 Orange ML1081 +254 102 55 Bijol ML1082 +252 81 37 Fluorescent Orange ML1083 +255 69 40 Fluo Pink ML1084 +250 54 40 Paprika ML1085 +253 72 45 Fluo Pink ML1086 +255 70 50 Fluo Pink ML1087 +253 52 42 Paprika ML1088 +255 238 224 Light Coral ML1089 +254 177 171 Carnation Very Light ML1090 +255 123 108 Blush Medium ML1091 +252 59 69 Fluo Pink ML1092 +234 203 198 Medium Pink ML1093 +244 194 195 Pink Glaze ML1094 +218 158 160 Hyacinth ML1095 +202 119 127 Deep Mocha ML1096 +207 83 93 China Rose ML1097 +228 148 157 Sea Pink ML1098 +202 54 68 Strawberry Red ML1099 +163 43 52 Red Berry ML1100 +254 216 213 Pink Dogwood ML1101 +254 198 185 Peony Light ML1102 +238 147 144 Light Orange ML1103 +198 97 101 Coral Flame ML1104 +184 70 78 Chrysanthemum ML1105 +201 89 101 Medium Orange / Red ML1106 +168 56 55 Dark Orange / Brown ML1107 +255 240 215 Eggshell ML1108 +244 212 191 Cream / Pink ML1109 +208 146 135 Brandied Apricot ML1110 +189 114 108 K. A. Bronze ML1111 +147 64 74 Dark Brown ML1112 +243 219 209 Chalk ML1113 +237 196 190 Pink Mist ML1114 +237 193 184 Pale Orange ML1115 +222 165 172 Pale Salmon ML1116 +206 124 138 Festive Pink ML1117 +181 95 104 Baroque Rose ML1118 +167 80 86 Scalloped Coral ML1119 +233 181 185 Bisque ML1120 +236 156 165 Medium Pink ML1121 +208 107 123 Med Plum ML1122 +184 93 110 Red Violet ML1123 +184 88 102 Berry Red ML1124 +148 60 84 Medium maroom ML1125 +195 213 171 Mint ML1126 +162 186 134 Palest Green ML1127 +155 211 172 LT Jade ML1128 +114 158 131 Creme de Menthe ML1129 + 61 103 63 Green Dust ML1130 + 42 78 66 Harbor Green ML1131 +222 255 239 Pale Green ML1132 +192 255 247 Pale Green ML1133 +166 239 220 Island Waters ML1134 + 99 233 222 Seafoam ML1135 +107 229 216 Seafoam ML1136 + 68 222 213 Light Blue / Green ML1137 + 27 122 90 Jade ML1138 + 98 229 187 Light teal Green ML1139 +125 209 194 Tropical Wave ML1140 + 55 204 211 Lilac Silk ML1141 + 61 176 181 Bright Aqua ML1142 + 61 215 225 Capri ML1143 + 80 204 194 Aquamarine ML1144 + 59 164 196 Horizon Blue ML1145 +241 232 157 PaleYellow ML1146 +208 214 142 Lemon ML1147 +177 188 120 Nile ML1148 +135 135 73 Cone ML1149 +105 105 55 Dk. Avacodo ML1150 +206 211 170 Palm Leaf ML1151 +225 255 224 Pastel Green ML1152 +166 190 156 Sprucestone ML1153 +104 189 130 Zephyr Green ML1154 + 82 146 111 Celadon Green Medium ML1155 + 66 126 92 Evergreen ML1156 +228 244 199 Loden Green Very Light ML1157 +195 203 126 Avocado Green Light ML1158 +152 170 96 Leaf Green ML1159 + 80 115 85 Elm Green ML1160 + 73 122 92 Blue Green-dark ML1161 + 41 79 51 Dark Green ML1162 + 35 70 38 Wreath Green ML1163 +228 255 202 Pale Green ML1164 +215 255 220 Pastel Green ML1165 +183 250 197 Slightly Green ML1166 +154 206 158 Medium Mint Green ML1167 + 78 164 91 Vibrant Green ML1168 + 60 128 69 Leaf Green ML1169 +167 163 90 Bronze ML1170 +154 152 75 French Toast ML1171 +111 118 64 Lt. Olive ML1172 + 53 63 26 Special Green ML1173 + 50 63 19 Black Pine ML1174 + 44 59 36 Bronze Green ML1175 +235 246 190 Avocado Very Light ML1176 +227 246 180 Dark Olive Green ML1177 +143 216 134 Light Jade ML1178 +126 168 92 Forest Green medium ML1179 + 71 133 66 Dark Green ML1180 + 45 138 58 Signal Green ML1181 + 18 138 64 Kelly ML1182 +237 255 232 Silver Grey ML1183 +236 255 166 Dark Olive Green ML1184 +164 198 114 Pastoral Green ML1185 +140 194 100 Lime ML1186 + 60 119 35 Green ML1187 + 97 127 63 Spearmint ML1188 + 71 98 47 Green / Yellow ML1189 +226 216 92 Aurora ML1190 +173 153 54 Medium Green / Yellow ML1191 +173 158 63 Golden Olive ML1192 +107 92 33 Dark Green / Yellow ML1193 +176 170 94 Seaweed ML1194 +130 119 63 Seafrost ML1195 +102 111 48 Medium Palmetto Green ML1196 +128 95 2 Earthen Tan ML1197 +198 192 130 Rich Vanilla ML1198 + 87 98 55 Pale Green ML1199 + 71 76 18 Dark Olive ML1200 +239 254 249 Shallow Green ML1201 +210 254 253 Teal Ultra Light ML1202 +180 243 235 Sky Blue ML1203 +140 222 210 Seafrost ML1204 +244 255 250 Silver Tinsel ML1205 +226 255 253 Light Blue ML1206 +194 213 209 Pastel Blue ML1207 +161 193 192 Snow Blue ML1208 + 24 44 81 Blueprint ML1209 + 39 76 85 Dark Bottle Green ML1210 + 54 72 92 Dark Blue / Green ML1211 +244 254 243 Pale Yellow-Green ML1212 +214 242 254 Ice Blue ML1213 +183 226 245 Sun Blue ML1214 + 27 95 116 Deep Sea Blue ML1215 + 60 120 174 Laguna ML1216 + 52 69 115 Navy Blue ML1217 + 48 53 82 Blue Shadow ML1218 + 45 49 61 Navy ML1219 + 45 62 72 Dark Teal ML1220 +183 198 175 Palm Leaf ML1221 +166 185 165 Carousel Green ML1222 +168 191 163 Sea Foam ML1223 + 66 99 82 Kahki Green ML1224 + 50 80 68 Fir ML1225 +242 254 242 Pale Yellow-Green ML1226 +243 254 246 Sea Bleu Light ML1227 +238 255 249 Shallow Green ML1228 +226 238 234 Misty Mint ML1229 +199 232 239 Pale Blue ML1230 +133 181 204 Pale Blue / Green ML1231 + 77 121 158 Peacock Blue ML1232 + 42 82 117 Blue ML1233 + 31 58 103 Dark Blue ML1234 + 24 42 80 Deep Turquoise ML1235 +180 240 230 Sky Blue ML1236 +149 213 197 Pale Aqua Green ML1237 + 30 124 124 Light Green / Blue ML1238 + 22 125 132 Sapphire Medium Dark ML1239 +142 255 245 Pale Sea Green ML1240 +189 229 231 Bleached Aqua ML1241 + 85 153 176 Wonder Blue ML1242 +215 255 254 PALE Aqua ML1243 +255 254 252 White ML1244 +208 255 239 Pale Turquoise ML1245 + 93 224 210 Seafoam ML1246 + 65 190 194 Willow2 ML1247 + 61 142 136 Exotic Green ML1248 +184 254 255 Pillow Blue ML1249 +167 255 254 Aqua ML1250 +233 244 240 Slate Bleu Light ML1251 +212 245 245 Cameron Blue ML1252 +167 225 239 Baby Blue ML1253 +166 217 244 Baby Blue ML1254 +112 183 227 Ultra Blue ML1255 + 44 85 173 Dark Royal Blue ML1256 + 40 67 154 Fire Blue ML1257 + 34 58 148 Imperial Blue ML1258 +199 255 252 LT Aqua ML1259 +218 253 255 Light Blue ML1260 +176 254 255 Aqua ML1261 +128 247 255 Powder Blue ML1262 + 90 228 255 Turquoise ML1263 + 59 194 241 Turquoise Medium Bright ML1264 + 58 196 235 Medium Blue / Green ML1265 + 71 167 215 Light Blue ML1266 + 69 148 189 Surfs' Up ML1267 +244 250 246 Pale Blue ML1268 +172 203 231 Winter Sky ML1269 + 94 130 164 Slate Blue ML1270 + 42 64 103 Dark Navy ML1271 + 17 24 43 Midnight Blue ML1272 + 66 47 79 Blackberry ML1273 + 72 178 240 LT Peacock ML1274 + 68 138 210 Dolphin Blue ML1275 +249 244 242 White ML1276 +254 236 196 Med. Ecru ML1277 +177 183 149 Brown Gray Light ML1278 +133 142 125 Boffin Green ML1279 + 98 95 80 Loden Green Dark ML1280 + 67 68 60 Hedge ML1281 + 63 64 56 Black Chrome ML1282 +252 255 228 Cream Silk ML1283 +255 255 225 Yellow Beige ML1284 +218 218 192 Cream ML1285 +157 122 90 Tawny Birch ML1286 +141 124 96 Espresso ML1287 +252 254 249 Iced Silver ML1288 +190 198 177 Putty ML1289 +195 197 194 Pale Grey ML1290 + 84 86 85 Very Dark Grey ML1291 + 43 53 52 Dark Green / Blue ML1292 +251 238 229 Wineberry Very Light ML1293 +227 198 166 Straw ML1294 +193 165 141 Iced Mocha ML1295 +157 137 112 Sand ML1296 + 94 70 57 Dusky Salmon ML1297 +194 183 155 Light Green / Yellow ML1298 +121 123 110 Beige Blush ML1299 +248 239 232 Star White ML1300 +245 247 233 Off White ML1301 +237 238 224 Summer Shower ML1302 +240 242 228 Maize 4 ML1303 +193 195 181 Light Green / Yellow ML1304 +202 203 197 Chrome ML1305 +127 126 121 Moon Mist ML1306 +101 100 95 Twilight ML1307 + 70 72 71 Grey Suede ML1308 + 35 35 35 Black ML1309 +234 238 223 Summer Shower ML1310 +155 175 173 Soft Steel Blue ML1311 +154 173 169 Quarry ML1312 + 96 116 125 Blue Mirage ML1313 + 71 90 88 Heritage Blue ML1314 + 57 66 65 Dk. Night Blue ML1315 +200 205 198 Dawn Blue ML1316 +215 209 187 Bone White ML1317 +223 227 212 Sage Tint White ML1318 +190 194 180 Palm Leaf ML1319 +135 148 128 Weed ML1320 +183 208 202 Blue Foam ML1321 +154 184 186 Snow Blue ML1322 +114 145 150 Country Gray ML1323 + 70 107 113 Medium Green / Blue ML1324 + 45 79 80 Dark Bottle Green ML1325 +253 231 145 Wheat 2 ML1326 +255 227 113 Snapdragon ML1327 +255 217 108 Snapdragon ML1328 +190 123 52 Autumn Leaf ML1329 +155 89 39 Medium Brown ML1330 +169 86 42 Light Cinnamon ML1331 +255 255 217 Ivory White ML1332 +255 241 164 Light Butter ML1333 +255 255 190 Canary Yellow Light ML1334 +255 238 134 Pale Yellow ML1335 +255 216 85 Warm Yellow ML1336 +252 186 64 Cantaloupe ML1337 +255 192 79 Scholastic ML1338 +255 255 207 Pale Lemon ML1339 +255 244 174 Pale Yellow ML1340 +229 186 133 Glow ML1341 +255 183 80 Mimosa ML1342 +254 134 47 Mango ML1343 +255 101 47 Red Berry ML1344 +255 246 151 Light Mustard ML1345 +209 188 121 Moon Rock ML1346 +196 164 77 Old Gold medium ML1347 +215 176 83 Mustard ML1348 +141 90 35 Medium Brown ML1349 + 91 65 30 Brown ML1350 +233 235 188 Yellow Beige Light ML1351 +244 244 190 Mellow Yellow ML1352 +255 253 189 Canary Yellow Light ML1353 +249 244 153 Mustard ML1354 +255 254 141 Meilee Green ML1355 +255 247 130 Straw Light ML1356 +255 234 81 Hawaiian Sunrise ML1357 +252 200 64 Yellow ML1358 +244 233 167 Maize ML1359 +230 204 119 Old Gold Light ML1360 +219 193 118 Jojoba ML1361 +210 159 67 Black Eyed Susie ML1362 +157 102 35 Golden Grain ML1363 +255 255 224 Yellow Beige ML1364 +240 254 255 Misty Mint ML1365 +240 253 145 Coronation Gold ML1366 +233 252 124 Applegreen ML1367 +234 252 118 Pale Yellow ML1368 +246 255 140 Meilee Green ML1370 +235 255 106 Green Gold ML1371 +195 255 139 Brilliant Lime ML1372 +227 255 142 Applegreen ML1373 +236 255 140 Applegreen ML1374 +239 255 123 Medium Yellow ML1375 +207 175 180 Rose Beige ML1376 +193 141 177 Lt. Red Violet ML1377 +190 154 182 Carnatio ML1378 +128 101 136 Light Grape ML1379 + 97 48 95 Purple ML1380 + 89 46 72 Dark Claret ML1381 +255 255 245 Eggshell ML1382 +232 237 240 Pearl Grey ML1383 +182 178 192 Grey ML1384 +195 219 229 Cadet Blue ML1385 +128 128 130 Polished Pewter ML1386 + 77 85 98 Petrol Blue ML1387 + 50 56 70 Graphite Grey ML1388 +173 170 179 Dark Grey ML1389 +157 154 171 Steel Gray ML1390 +147 144 173 Light Grape ML1391 +141 137 150 Dark Grey ML1392 +101 91 126 Lilac Mist ML1393 + 64 55 108 Petrol Blue ML1394 +229 202 195 Palest Peach ML1395 +220 184 186 Antique Mauve ML1396 +157 108 114 MD Ash Rose ML1397 + 99 74 77 Pale Grape ML1398 + 93 59 75 Medium Purple ML1399 + 44 30 30 Black Wine ML1400 +170 188 192 Celestial Blue ML1401 + 85 112 119 Gobelin Blue ML1402 + 42 66 92 Harbor Twilight ML1403 + 41 50 67 Black ML1404 +225 201 214 Rose Pink ML1405 +212 156 183 Lilac ML1406 +114 57 108 Dark Red ML1407 + 65 23 59 Deep Slate Gray ML1408 + 98 90 101 Plum Kitten ML1409 + 57 47 81 Concord ML1410 + 39 35 58 Aubergine ML1411 + 33 39 71 Blueberry Blue ML1412 +221 187 185 Antique Mauve ML1413 +227 186 192 Orchid ML1415 +180 156 178 Silver Fox ML1416 +143 103 140 Purple Haze MLL1417 + 67 58 113 Dark Purple ML1418 + 78 29 74 Royal Purple ML1419 + 52 28 42 Dark Brown ML1420 +162 150 164 Wisteria ML1422 +214 209 213 Saturn Grey ML1423 +107 38 69 Brushed Burgundy ML1424 +101 48 54 Warm Wine ML1425 +157 143 179 Light Lilac ML1426 +107 101 135 Twilight Purple ML1427 + 99 98 142 Royal Blue ML1428 + 75 74 105 Petrol Blue ML1429 + 63 57 103 Cassis ML1430 + 54 56 79 Dark Grey / Blue ML1431 + 45 48 79 Blueberry ML1432 +231 236 240 Pale Silver ML1433 +191 188 197 Silver Grey ML1434 +152 165 184 Rockport Blue ML1435 + 96 100 127 Velvet Morning ML1436 + 60 79 112 Ash ML1437 +237 244 236 Angel Blue ML1338 +226 227 221 White Sand ML1439 +137 141 144 Steel Gray medium ML1440 +106 117 113 Dk Granite ML1441 + 86 91 95 Dark Gray ML1442 +244 210 182 Opaline ML1443 +230 195 173 Light Apricot ML1444 +200 164 138 Rugby Tan ML1445 +164 101 92 Red Maroon ML1446 +125 80 59 Dark Brown ML1447 +125 74 57 Dark Brown ML1448 +199 249 240 Light Aqua ML1449 +203 207 192 Almost Aqua ML1450 +246 193 162 Tawny ML1451 +235 165 140 Salmon ML1452 +200 138 113 Dk. Ecru ML1453 +242 122 105 Medium Orange ML1454 +166 58 45 Orange / Red ML1455 +169 56 40 Orange / Red ML1456 +244 157 88 Medium Orange ML1457 +198 112 55 Date ML1458 +102 46 29 Tan ML1459 + 91 49 33 Dark Brown ML1460 +237 206 149 Old Gold ML1461 +194 162 103 Parsnip ML1462 +185 161 115 Med. Taupe ML1463 +190 0 0 Radiant Red ML1464 +151 114 72 Gold Wire ML1465 +241 244 225 Sandstone ML1466 +255 255 237 Ivory White ML1467 +255 246 207 Cream ML1468 +232 202 150 Dark Tan ML1469 +216 189 134 Cocoon ML1470 +176 129 83 Gold ML1471 +128 72 37 Brown ML1472 +116 65 38 Dark Brown ML1473 + 75 41 32 Dark Brown ML1474 + 51 42 37 Best Brown ML1475 +255 201 137 Sunburst ML1476 +222 180 130 Golden Olive / Light ML1477 +220 164 113 French Beige ML1478 +183 137 104 Oak Heart ML1479 +146 109 83 Medium Brown ML1480 +150 97 66 Medium Brown ML1481 +255 221 167 Linen ML1482 +249 168 103 Orange Spice Light ML1483 +246 175 121 Peach ML1484 +239 117 52 Canary ML1485 +196 60 34 Brick Ultra Dark ML1486 +250 233 203 Light Ivory ML1487 +190 175 142 Taupe ML1488 +182 148 121 Natural ML1489 +154 0 0 Auburn ML1490 + 87 67 42 Brown ML1491 +255 237 195 Ecru ML1492 +229 164 126 Bamboo ML1493 +175 71 32 Russet ML1494 +168 105 70 Brown ML1495 +140 65 36 Amberglow ML1496 +154 62 47 Indian Paintbrush ML1497 +202 157 124 Light Red / Orange ML1498 +184 97 69 Brown ML1499 +116 57 43 Twig ML1500 +255 255 253 White ML1501 +255 254 251 White ML1502 +254 255 245 Eggshell ML1503 +255 255 255 Snow White ML1504 +255 255 254 White ML1505 +254 255 255 Snow White ML1506 +255 254 255 White ML1507 +231 216 183 Seedpearl ML1508 +219 195 161 Pale Peach ML1509 +165 144 113 Tannin ML1510 +114 105 72 Desert Cactus ML1511 +152 136 103 Dark Beige ML1512 +189 160 100 Parsnip ML1513 +132 112 77 Ermine ML1514 +132 104 65 Medium Orange / Brown ML1515 +141 121 88 Espresso ML1516 + 76 57 42 Traditional Brown ML1517 +255 255 229 Beige ML1518 +255 255 211 Citrus Very Light ML1519 +255 238 198 Med. Ecru ML1520 +225 184 138 Sheepskin ML1521 +255 255 242 Winter White ML1522 +255 237 171 Pale Gold ML1523 +202 182 155 Ash Blonde ML1524 + 13 14 9 Espresso ML1525 diff --git a/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Fil-Tec Glide.gpl b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Fil-Tec Glide.gpl new file mode 100644 index 00000000..7e7d30c0 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Fil-Tec Glide.gpl @@ -0,0 +1,217 @@ +GIMP Palette +Name: Ink/Stitch: Fil-Tec Glide +Columns: 4 +# RGB Value Color Name Number +255 255 255 White 10000 +193 181 165 German Granite 10401 +118 122 125 Medium Grey 10424 +102 109 112 Titanium 10431 +173 178 193 Silver 10536 +198 209 214 Mercury 10643 +138 141 143 Sterling 10877 +200 201 199 Cool Grey 3 10CG3 +151 153 155 Cool Grey 7 10CG7 +250 240 230 Linen 10WG1 +185 173 165 Warm Grey 4 10WG4 +165 156 148 Warm Grey 6 10WG6 + 0 0 0 Black 11001 +145 163 153 Nickel 15497 +110 98 89 Warm Grey 11 1WG11 +122 91 17 Leather 20140 +158 84 10 Mahogany 20160 +112 66 20 Medium Brown 20464 +209 191 145 Sand 20466 + 95 51 17 Chocolate 20469 +244 204 170 Apricot Blush 20474 + 89 61 43 Dark Brown 20476 +122 63 40 Rust Brown 20478 +226 191 155 Mocha 20727 +170 117 63 Light Copper 20730 +133 113 77 Vegas Gold 20872 +191 145 12 Dijon 21245 +132 63 15 Sienna 21615 +132 53 17 Sepia 21685 +188 173 117 Cleopatra 24515 +204 191 142 Khaki 24525 + 71 35 17 Brunette 24625 +140 89 51 Bark 24635 +192 148 119 Light Tan 24655 +229 198 170 Cork 24675 +203 160 82 Military Gold 27407 + 19 133 143 Wheat 27500 +148 121 93 Coffee 27504 +225 184 127 Butterscotch 27508 +192 156 131 Chestnut 27521 +171 92 87 Auburn 27523 + 0 40 104 Blue Berry 30281 +155 196 226 Azure 30283 +117 170 219 Hawaiian Blue 30284 + 0 56 168 Empire 30286 + 0 51 127 Bright Blue 30288 +196 216 226 Baby Blue 30290 + 0 45 71 Midnight Navy 30296 + 0 96 124 Cerulean 30308 +201 232 221 Magic Mint 30317 + 58 73 114 Denim 30534 +155 175 196 Graphite 30644 + 94 130 163 Sky 30646 + 12 28 71 Captian Navy 30655 + 0 53 150 Royal 30661 + 20 222 84 Federal 32757 + 0 49 81 Navy 32965 +186 224 226 Light Turquoise 32975 + 0 96 161 Electric 33015 +187 221 230 Cloud 37457 + 0 115 152 Ocean 37468 + 0 118 129 Aquamarine 37474 +127 40 96 Iris 40249 +119 45 107 Violet 40255 +140 112 107 Dusty Plum 40437 +198 163 193 Tabriz Orchard 40522 +175 114 193 Mulberry 40528 +168 147 173 Wisteria 40666 +216 168 216 Periwinkle 42562 +170 114 191 Lavender 42577 +158 79 165 Viking 42583 + 91 2 122 Raven 42607 +201 173 216 Amethyst 42635 +155 109 198 Lilac 42655 +147 122 204 Eggplant 42715 + 73 48 173 Fandango 42736 + 79 33 58 Wine 45115 +162 119 166 Teaberry 47440 +216 140 2 Bronze 50138 +226 140 5 Halloween 50144 +232 117 17 Mars 50158 +249 137 114 Salmon 50170 +247 73 2 Autumn 50172 +147 51 17 Rust 50174 +244 196 160 Peach 50473 +255 211 170 Strawberry Blonde 50712 +252 186 94 Pumpkin Seed 51365 +249 107 7 Lava 51585 +249 165 140 Coral 51625 +165 63 15 Burnt Orange 51675 + 0 102 99 Teal 60323 + 0 124 102 Irish Spring 60335 + 0 86 63 Christmas Pine 60343 +150 216 175 Mint 60345 + 35 79 51 Totem Green 60350 + 33 91 51 Jade 60357 + 51 158 53 Turf 60362 + 86 107 33 Aloe 60371 +206 224 7 Limerick 60389 +175 168 10 Split Pea 60398 + 96 94 79 Army 60418 +112 168 145 Sea Mist 60556 +163 193 173 Thyme 60557 +209 226 211 Pale Mist 60566 + 96 142 58 Willow 60576 +216 221 181 Celery 60580 +181 170 89 Prickly Pear 60618 +165 191 170 Pistachio 60623 +127 160 140 Mint Julep 60624 + 96 221 73 Chartreuse 60802 +124 99 22 Fools Gold 61265 + 0 175 153 Sprout 63268 + 0 140 130 Mermaid 63282 + 0 124 89 Jungle 63415 + 0 104 71 Emerald 63425 + 38 104 109 Persian 65473 +206 216 209 Cool Mint 65513 +119 145 130 Basil 65555 + 84 104 86 Olive 65615 +114 132 112 Fern 65625 + 63 73 38 Mossy 65743 +117 112 43 Light Olive 65825 + 92 184 178 Sea Green 67472 + 13 82 87 Midnight Storm 67476 + 0 159 77 Shamrock 67482 +116 170 80 Kiwi 67489 +249 94 89 Papaya 70178 +249 191 193 Cotton Candy 70182 +175 30 45 Ruby 70187 +255 163 178 Pink 70189 +196 0 67 Rasberry 70193 +196 30 58 Fil-tec 70200 +140 38 51 Light Burgundy 70202 +229 76 124 Rhododendron 70205 +211 5 71 Apple 70206 +192 0 78 Cranberry 70207 +142 35 68 Hokies 70208 +117 38 61 Maroon 70209 +204 2 86 Blossom 70214 +244 191 209 Pink Lemonade 70217 +216 30 5 Jamaica Sun 70485 +183 56 68 Monarch 70703 +249 221 214 Pink Rose 70705 +252 35 102 Hot Pink 70812 +188 135 135 Mauve 75005 +101 29 50 Merlot 77421 +226 69 133 Passion 77424 +151 27 47 Garnet 77427 +181 91 128 Purple Rose 77432 +244 237 71 Lemon 80101 +249 221 22 Bright Yellow 80108 +252 209 22 Mango 80116 +249 226 127 Cornflower 80120 +181 140 10 Honey Gold 80125 +234 175 15 Marigold 80130 +198 147 10 Desert Sunset 80131 +158 124 10 Penny 80132 +255 219 127 Buttercup 80134 +252 163 17 Bright Gold 80137 +242 234 188 Lemon Ice 80607 +221 224 15 Citron Yellow 80809 +122 56 45 Yellow Whisper 87499 +206 17 38 Candy Apple Red 90186 +229 196 214 Peacock 90256 +153 186 221 Tar Heel 90278 + 58 117 196 Pacific 90285 + 96 198 89 Neon Green 90360 +196 229 142 Key Lime 90366 +255 114 71 Neon Orange 90811 +252 206 135 Cantaloupe 91355 +244 124 0 Blaze 91505 +244 63 79 Lip Stick 91787 + 81 191 226 Dark Aqua 92985 + 0 165 219 Marine 92995 + 53 56 66 Eclipse 30532 +217 200 158 Sand Dune 27501 +124 81 61 Cocoa 24705 +127 186 0 Kryptonite 60376 +219 206 165 Shell 24535 + 91 38 38 Cabernet 70490 + 0 56 147 Bombay 30287 +255 204 73 West Point 81225 +213 0 50 Desire 70199 +164 90 42 Hazel 20470 +150 216 175 Mint 60345 + 0 107 63 Viridian 60349 +204 45 48 Imperial Red 71797 +255 198 30 Canary 80123 +206 17 38 Sultry 70186 + 0 160 186 Robin Egg 30632 +226 61 40 Tomato 70179 +178 168 181 Anchor 15295 + 38 84 124 Cobalt 30647 +107 94 79 Zaffre 35405 +142 71 173 Damson 42587 +209 68 20 Firestorm 50173 +249 86 2 Oriole 51655 + 73 89 40 Soldier Green 60574 + 96 145 145 Tidewater 65483 +249 130 127 Tango 70177 +120 47 64 Chianti 70195 + 81 30 38 Bordeaux 70504 +214 40 40 Valentine 71795 +249 224 76 Daisy 80114 +241 180 52 Medallion 80143 + 24 43 73 Deep Sea 32767 + 19 50 43 Evergreen 60627 +245 126 182 Flamingo 70211 +220 88 42 Marmalade 57579 +221 204 165 Caramel 20467 + 0 158 73 Forest 60355 +226 214 181 Biscotti 20468 +109 79 71 Coffee Bean 27518 diff --git a/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Floriani Polyester.gpl b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Floriani Polyester.gpl new file mode 100644 index 00000000..36f76390 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Floriani Polyester.gpl @@ -0,0 +1,290 @@ +GIMP Palette +Name: Ink/Stitch: Floriani Polyester +Columns: 4 +# RGB Value Color Name Number +243 233 238 Pale Pink 101 +250 209 207 Rose Carolina 1011 +242 95 114 Iceland 1013 +239 83 103 Dusty Rose 1014 +245 214 228 Light Pink 102 +248 229 220 Buff 1021 +253 165 185 Pink 103 +247 126 154 Rosetta 104 +239 75 117 Laurel Pink 105 +217 31 28 Singapore Sunset 1051 +228 30 26 Saffron 1053 +238 71 108 Dark Pink 106 +249 200 205 Pink Rose 1081 +250 143 156 Rose Cerise 1082 +236 63 102 Begonia 1083 +230 30 61 Hibiscus 1084 +223 29 50 Violet Red 1085 +205 18 32 Raspberry 1086 +226 38 92 Pale Peach 110 +237 69 91 Shrimp 1107 +250 221 203 Light Peach 111 +242 99 116 Impatients 1119 +221 46 75 Lafayette Rose 1120 +199 38 53 China Rose 1121 +188 34 44 Marie Antoinette 1122 +245 228 226 Peach Blossom 116 +253 186 192 Misty Pink 117 +182 47 58 Currant 1182 +243 217 230 Pink Mist 123 +248 138 169 Bright Pink 125 +235 56 108 Hot Pink 127 +233 48 104 Scorching Pink 128 +196 17 60 Deep Pink 129 +236 183 206 Light Lilac 131 +196 103 144 Powder Puff 133 +180 46 102 Renaissance 135 +143 25 74 Fandango 137 +250 204 196 Light Coral 140 +249 152 140 Coral 141 +246 105 90 Dark Coral 143 +233 50 53 Rust 145 +229 33 42 Terra Cotta 147 +230 37 62 Martha Washington 155 +230 34 55 Persimmon 156 +154 20 34 Cabernet 1586 +231 125 127 Light Mulberry 1600 +191 83 93 Cameo 1602 +165 53 67 Dark Mulberry 1603 +251 201 192 Fleshtone 163 +194 90 90 Mauve 165 +164 40 45 Deep Mauve 167 +246 125 86 Cantalope 170 +236 57 42 Orange 172 +250 199 177 Pink Flesh 180 +248 119 110 Misty Maize 182 +239 75 72 Salmon 184 +230 38 39 Copper 186 +226 25 45 Iron Rust 188 +176 17 20 Scarlet 190 +250 191 196 Petunia 1900 +229 116 129 Roseleaf 1902 +219 86 97 Pansies Perfections 1904 +209 57 73 Purple Pansies 1906 +178 31 56 Dark Pansies 1908 +131 33 50 Paternina 1910 +153 18 19 Deep Rust 192 +145 18 21 Burgundy 194 +142 28 33 Old Roseleaf 196 +114 23 29 Wine 198 + 6 109 66 True Green 200 +145 184 150 Seafrost 201 +160 165 63 Light Olive 2011 +110 123 40 Avocado 2013 + 84 87 34 Pation Green 2015 + 96 140 111 Moss 203 + 0 153 153 Blue Azure 2040 + 0 151 155 Aquamarine 2042 + 17 87 58 Willow Green 205 + 39 68 33 Wreath Green 206 +156 135 43 Miranda Green 210 +119 98 24 Basil 214 + 88 76 22 Maui Green 218 +166 223 214 Green Mist 219 +104 197 188 Wintergreen 220 + 37 137 124 Neptune 221 + 33 118 109 Teal 222 + 32 110 105 Dark Teal 223 +184 223 128 Cape Green 228 + 91 181 78 Lime 229 + 70 171 77 Sour Apple 231 + 4 151 69 Spring Green 232 + 7 127 74 Irish Green 233 +196 198 122 Ashen Green 236 +117 133 61 Bean Green 237 +109 144 65 Olive Drab 238 +221 245 200 Winter Spring 243 +188 216 152 Celery 244 +114 156 94 Woodland Green 245 + 87 107 60 Ivy 247 + 92 108 66 Hunter Green 248 +244 253 196 Flite Green 251 +205 222 189 Spearmint 252 + 74 179 137 Pale Green 253 + 28 135 104 Evergreen 255 + 77 81 63 Holly Green 257 +142 212 173 Mint 261 + 55 172 116 Nile 262 + 26 162 110 Pale Jade 263 + 13 127 84 Medium Green 264 + 13 90 65 Dinosaur Green 265 + 14 68 55 Emerald Green 266 +185 207 79 Key Lime 273 +164 185 72 Mineral Green 275 + 91 104 52 Green Meadow 277 +206 197 52 Green Gold 283 +178 159 32 Scotch Green 284 +134 123 32 Parsley 285 + 93 190 186 Seaform 291 + 30 108 100 Peppermint 292 + 21 75 70 Blue Spruce 293 + 38 46 55 Pine Green 294 + 35 47 90 Rocket Blue 307 + 34 39 84 Dark Blue 308 + 90 179 198 Colony Blue 310 + 54 140 164 Gettysburg 312 + 49 90 106 Federal Blue 314 + 62 117 166 Periwinkle 332 + 42 74 113 Baltic Blue 333 + 34 51 88 Concord Blue 334 + 28 29 67 Midnight Blue 335 + 92 119 122 Slate Blue 342 + 46 47 52 Pilgrim Blue 344 + 32 28 73 Navy Blue 357 + 31 20 59 Navy Satin 358 + 64 66 95 Midnight Navy 358S + 33 15 26 Dark Navy 360 +206 238 242 Light Blue 361 + 78 169 217 Pastel Blue 362 + 76 146 206 Columbia Blue 363 + 56 99 149 Starlight Blue 364 + 60 102 158 Medium Blue 365 + 46 64 117 Bluejay 366 + 46 65 118 Blueberry 367 + 35 26 85 Royal Blue 368 +139 211 228 Blue Frost 369 + 72 171 205 Mint Julep 370 + 76 162 211 Tahoe Blue 371 + 72 134 194 Blue Pacific 372 + 63 115 170 California Blue 373 + 0 148 171 Indian Ocean 376 + 0 123 148 Deep Sea Turquiose 378 +172 238 249 Venice Blue 383 + 0 133 176 Cascade 384 + 0 104 129 Niagara 385 + 0 129 145 Beryl Blue 391 + 0 103 116 Honey Bird 392 + 0 67 75 Italian Blue 393 +188 183 160 Palm Leaf 411 +125 119 93 Old Silver 413 + 82 71 55 Westpoint 415 + 56 56 47 Penguin 416 +225 209 161 Wood Ash 421 +174 152 96 Lime Gray 422 +151 132 79 Earth Gray 423 +122 163 161 Pewter 434 + 39 42 42 Graphite 436 +191 154 140 Light Taupe 451 +137 113 106 Taupe 452 + 96 74 70 Dark Taupe 453 +204 218 218 Light Gray 483 +116 140 141 Country Gray 484 +120 130 133 Gray 485 + 77 67 68 Slate Gray 486 + 85 85 83 Gun Metal Gray 487 + 59 53 57 Dark Gray 488 + 50 35 38 Charcoal Gray 489 +245 226 124 Chrome Lemon 501 +248 190 91 Dandelion 502 +242 154 76 Sunflower 503 +254 131 66 Primrose Jasmine 512 +210 90 52 Golden Glow 514 +229 108 56 Dark Goldenrod 516 +255 244 162 Cornsilk 521 +255 229 100 Straw 522 +255 196 70 Goldenrod 523 +255 179 60 Old Athletic Gold 524 +255 158 68 Athletic Gold 525 +255 102 52 Bijol 526 +255 252 205 Vanilla 531 +255 196 103 Sunrise 532 +255 177 72 Apricot 533 +255 132 53 Pumpkin 534 +255 120 59 Golden Poppy 535 +255 85 40 Carrot 537 +255 246 203 Cream 540 +255 242 102 Cockatoo 542 +255 224 43 Amber Yellow 544 +255 231 50 Snapdragon 546 +255 222 99 Vegas Gold 560 +255 183 62 Lion Mane 561 +235 145 44 Walnut Taffy 562 +192 98 24 Old Gold 563 +175 98 21 Bran 564 +121 81 19 Harvest 565 +216 99 146 Zephyr 601 +116 14 72 Plum Pewter 603 +101 7 54 Grape 605 +134 156 184 Lilac Blue 612 + 90 92 132 Slate Lilac 614 + 57 45 84 Tyrian Blue 616 +197 192 227 Geisha 622 +169 123 175 Afterglow 624 +117 55 116 Deep Iris 626 +134 94 109 Grape Ice 632 + 54 25 46 Arab Plum 635 +201 127 164 Spring Beauty 653 +121 35 63 Orchid 654 +154 127 185 Light Violet 661 +125 80 155 Violet 663 + 80 26 117 Deep Violet 665 + 66 7 28 Ophelia 6655 +206 186 216 Amethyst 672 +147 78 144 Lavender 673 +134 51 123 Russian Violet 674 +119 34 113 Luxury 675 + 84 28 73 Royal Purple 676 +112 76 154 Voilet Blue 687 + 85 55 131 Grape Jelly 688 + 61 34 86 Concord Grape 689 +123 33 117 Viking Purple 694 + 95 35 115 Purple Passion 695 + 76 22 84 Regal Purple 696 +228 28 23 Mars Red 700 +226 25 22 Fire Engine Red 702 +230 36 35 Ruby Red 703 +219 117 37 Inca Gold 711 +153 55 15 Antique Bronze 713 +124 34 26 Jamoca 715 +232 215 144 Golden Sand 721 +208 172 102 Birch 723 +253 252 252 Off White 730 +245 246 228 Sandstone 731 +243 232 184 Sudan 733 +240 215 152 Oak Buff 734 +222 183 107 Aztec Tan 735 +148 95 50 Indian Spice 737 +165 65 38 Arab Tan 738 + 74 50 30 Cleveland 739 +234 182 127 Pottery Buff 741 +211 150 91 Old World Buff 743 +149 85 42 Harvest Brown 745 + 66 36 29 Mahogany 749 +233 176 88 Sweet Melon 751 +233 163 76 Aurora Orange 752 +230 145 60 Orange Peel 753 +226 80 31 Burnt Orange 755 + 57 45 84 Satin Sheet 765 +200 117 74 Muted Spice 767 +128 37 18 Dark Cinnamon 769 +239 171 121 Sahara Tan 783 +201 102 46 Light Sienna 784 +181 74 31 Sienna Brown 785 +173 61 27 Berkshire Brick 786 +232 185 160 Shasta Pink 792 +168 101 71 Flagstone Clay 794 +125 52 33 Provincial Rose 796 +251 253 252 Pure White 800 +250 251 251 Ice Cap 801 +243 235 207 Angora White 811 +191 183 137 Frontier Tan 813 +178 159 98 Deep Clay 815 +213 198 141 Willow Leaf 842 +154 113 58 African Safari 844 +253 252 252 Lamp Light 850 + 0 0 0 Black 900 + 62 114 167 Solar Blue K07 + 83 187 200 Blue Harmony K33 + 43 136 135 Aqua K37 + 69 10 114 Deep Violet Purple K38 +213 21 55 N / A O23 + 42 57 108 N / A O55 + 29 82 87 N / A O74 +218 24 60 N / A O83 + 64 110 169 N / A OO7 + 55 154 166 N / A P52 +226 38 92 Pink Passion Y40 diff --git a/extensions/fablabchemnitz/inkstitch/palettes/InkStitch FuFu Polyester.gpl b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch FuFu Polyester.gpl new file mode 100644 index 00000000..fe7cb8f6 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch FuFu Polyester.gpl @@ -0,0 +1,717 @@ +GIMP Palette +Name: Ink/Stitch: FuFu Polyester +Columns: 4 +# RGB Value Color Name Number +237 225 228 Oyster 100 +240 204 216 Pale Lavender 101 +241 187 205 Sweet Lilac 102 +243 171 191 Carnation 103 +241 151 175 Medium Pink 104 +236 122 155 Floral Pink 105 +226 93 134 Dark Pink 106 +216 67 118 Medium Pink 107 +244 203 191 Cloud Pink 110 +243 191 176 Peach Melba 111 +246 149 127 Flamingo 113 +241 204 207 Light Pink 116 +222 148 155 Sea Pink 117 +237 191 213 Light Pink 123 +236 151 192 Medium Pink 124 +234 134 177 Pink Petunia 125 +220 122 171 Pink 126 +206 85 152 Medium Pink 127 +179 49 122 Dark Pink 128 +158 28 97 Rebecca Rose 129 +228 191 216 Darker Lilac 130 +224 169 208 Impatient 131 +198 140 183 Lavender Medium Light 132 +192 122 175 Violet 133 +159 101 152 Plum Medium 134 +137 64 123 Deep Violet 135 +126 58 113 Dark Red 136 +122 53 107 Dark Purple 137 +100 42 84 Pale Purple 138 + 80 37 69 Medium Purple 139 +237 175 169 Pink Petal 140 +235 151 147 Emily Pink 141 +231 139 136 Peach Bloosom 142 +222 101 100 Dark Red / Orange 143 +205 86 80 Dark Salmon Pink 144 +198 73 71 Dark Salmon 145 +181 45 57 Terra Cotta 147 +164 41 56 Wildfire 148 +235 185 196 Shell 151 +233 157 179 Medium Pink 152 +232 135 159 Dusty Rose 153 +232 121 145 Medium Pink 154 +220 73 97 Cerise 155 +216 60 87 Dark Pink 156 +193 52 77 Dusky Rose 157 +231 224 224 Silver Gray 160 +237 209 201 Rosewater 161 +231 185 177 Light Peach 163 +191 131 137 Light Pink 165 +169 94 106 Rose Wine 166 +157 86 95 Mauvewood 167 +144 78 78 Dark Brown 168 +251 173 140 Coral Reef 169 +255 155 107 Light Orange 170 +240 107 55 Golden Brown 171 +236 92 38 Red Pepper 172 +234 90 55 Orange 173 +242 179 165 Soft Coral 180 +235 132 131 Peach Bloosom 181 +233 117 116 Tea Rose 182 +230 118 103 Medium Orange 184 +223 96 76 Dark Salmon Pink 185 +209 59 57 Tomato 186 +190 50 63 Burgundy 188 +185 44 64 Poinsettia 190 +162 35 54 Wildfire 192 +142 35 52 Burgundy 193 +149 42 66 Perfect Ruby 194 +125 37 58 Russet 195 +113 42 53 Wine 196 +107 46 55 Wine 197 + 99 43 53 Warm Wine 198 + 86 43 54 Chocolate 199 +242 194 189 Desert Bloom 1011 +225 121 143 Medium Pink 1013 +201 102 125 Med Plum 1014 +232 210 209 Orchid Ice 1020 +236 194 191 Pink Mist 1021 +213 155 176 Pale Pink 1031 +197 132 159 Polignac 1032 +180 106 136 Medium Purple 1033 +168 91 123 Dahlia Mauve 1034 +147 65 98 Medium Purple 1035 +134 63 92 Dark Brown 1036 +124 47 75 Wine 1037 +102 44 70 Grape Shake 1038 +231 69 42 Orange 1051 +226 59 44 Honeysuckle 1052 +224 54 43 Honeysuckle 1053 +243 181 185 Candy Pink 1081 +235 148 162 Classic Wine 1082 +223 85 121 Magenta Dark 1083 +214 53 92 Cerise 1084 +199 19 66 Rose / Very Dark 1085 +187 0 64 Country Red 1086 +240 118 125 Confetti 1106 +240 104 111 Dusty Rose 1107 +218 137 146 Medium Pink 1118 +209 110 134 Medium Pink 1119 +192 82 113 Dark Pink 1120 +176 72 96 Baroque Rose 1121 +163 58 80 Raspberry Medium Dark 1122 +152 36 72 Rose Wine Very Dark 1123 +219 116 126 Tea Rose 1128 +150 58 81 Medium maroom 1182 +150 37 86 Raspberry 1295 +131 49 65 Winterberry 1384 +224 143 193 Petal Pink 1400 +215 118 177 Medium Pink 1401 +208 103 164 Deep Mauve 1402 +185 72 138 Very Berry 1403 +169 63 130 Purple 1404 +161 58 125 Purple 1405 +148 41 109 Dark Red 1406 +243 184 183 Lt. Pink 1510 +245 148 141 Raspberry Light 1511 +243 111 98 Watermelon 1512 +239 86 70 Flamingo 1513 +235 71 51 Light Bronze 1514 +226 94 119 Shrimp 1545 +122 32 58 Russet 1586 +195 152 156 Adobe Rose 1600 +173 125 139 Light Purple 1601 +156 98 114 Perfect Ruby 1602 +133 73 96 Dark Brown 1603 +120 67 82 Dark Purple 1604 +189 156 172 Amethyst Medium Light 1607 +151 108 136 Rose Dust 1608 + 86 49 66 Intense Maroon 1609 +227 104 167 Soft Pink 1700 +220 65 141 Dark Pink 1701 +213 45 126 Dark Pink 1702 +208 25 114 Ruby Glint 1703 +232 89 139 Dark Pink 1714 +219 55 112 Beauty Rose Medium 1715 +204 14 96 Red 1716 +205 68 127 Dark Pink 1727 +187 20 93 Dark Pink 1728 +171 20 88 Antique Rose Ultra Dark 1729 +226 206 208 Orchid Ice 1898 +226 184 194 Golden Sand 1900 +186 117 142 Rose Dust 1902 +170 100 126 Medium Purple 1904 +148 73 102 Medium Purple 1906 +133 58 85 Brown 1908 +123 46 74 Brushed Burgundy 1910 + 0 129 91 Green Dazzle 200 +156 169 147 Laurel Green Medium Light 201 +138 170 144 Surf Bleu Light 202 +118 145 123 Spring Garden 203 + 80 114 93 Harbor Green 204 + 62 91 74 Evergreen 205 + 58 86 71 Grass Green Very Dark 206 +159 159 100 Chartreuse / Bright 208 +148 148 83 Medium Green / Yellow 210 +128 127 68 Medium Green / Yellow 212 +109 109 50 Medium Palmetto Green 214 + 98 99 46 Khaki 216 + 95 96 52 Olive Drab 218 +194 216 211 Pastel Blue 219 +149 198 191 Bridal Turquoise 220 + 56 158 151 Sea Green 221 + 0 141 140 Navigate 222 + 0 122 124 Light Green / Blue 223 + 0 112 108 M. D. Green 224 +208 219 145 Lemon 226 +203 222 123 Green Oak 227 +143 186 92 Lime 228 +128 174 77 Medium Green / Yellow 229 + 96 155 71 Pear 231 + 80 147 82 Sage 232 + 31 137 85 Kelly 233 +176 172 144 Spray Green 234 +165 161 124 Sage Green 235 +150 147 113 Medium Green / Grey 236 +122 119 89 Covert Green 237 +103 96 69 Military Olive 238 + 92 85 62 Dark Grey / Green 239 +193 209 181 Blue Green / Medium 243 +138 164 130 Medium Green 244 + 89 116 89 Juniper Medium Dark 245 + 82 102 75 Grass Green Dark 246 + 66 90 69 French Green 247 + 60 85 68 Grass Green Very Dark 248 + 57 75 58 Mitchell Green 249 +204 208 162 Pastel Green 251 +170 202 175 Sea Green Medium Light 252 +100 156 122 Grass Harper 253 + 77 138 109 Jade Medium 254 + 57 124 98 Dark Blue / Green 255 + 32 94 69 Green Petal 256 + 57 85 74 Enchanted Sea 257 + 56 71 64 Mitchell Green 258 + 47 62 51 Grey Wool 259 +193 225 185 Light Green / Yellow 261 +128 207 149 Pale Aqua 262 + 91 167 113 Green 263 + 0 130 94 Green Dazzle 264 + 0 125 94 Jade 265 + 13 119 94 Jade 266 +198 199 127 Light Pistachio 272 +187 183 90 Tarnished Gold 273 +155 158 72 Pistachio 274 +146 152 78 Medium Green / Yellow 275 +127 138 77 Medium Palmetto 276 + 90 110 41 Meadow 277 +190 166 99 PaleGreen-Yellow 282 +167 142 63 Olive 283 +149 122 43 Medium Yellow / Green 284 +111 92 44 Desert Cactus 285 +144 128 81 Antique Bronze 287 +127 112 66 Olive Green 288 +115 100 60 Moss 289 +103 187 170 Moss 291 + 29 133 122 Surf Bleu Medium 292 + 7 97 93 Peacock Blue 293 + 40 88 89 Dark Bottle Green 294 +107 114 106 Sedona Sage 295 + 82 87 80 Granite 296 + 84 98 93 Dark Gray 297 + 61 74 70 Dark Army Green 298 + 54 67 63 Black 299 +190 194 167 Overcast 2005 +133 132 70 Medium Green / Yellow 2011 +108 104 43 Bronze 2012 + 88 90 42 Green 2013 + 88 89 51 Cajun Mist 2014 + 75 72 45 Water Lilly 2015 + 68 66 47 Laurel Green Medium 2016 + 68 61 51 Black Chrome 2017 +185 207 204 Jade Tint 2039 +158 192 197 Canal Blue 2040 +151 185 189 Snow Blue 2041 +118 164 173 Surf Blue 2042 + 0 157 146 Deep Aqua 2215 + 52 113 66 Tropical Green 2335 +134 168 157 Surf Bleu Light 2411 +104 137 123 Pine Medium 2412 +111 125 109 Willow 2413 + 86 108 93 Harbor Green 2415 + 69 84 64 Dark Grey / Green 2417 +152 204 158 Medium Mint Green 2615 +102 180 121 Zephyr Green 2625 + 60 160 115 Ming Green 2635 +146 212 175 Ocean Wave 2811 +104 203 161 Green Light Bright 2812 + 70 169 138 Isle Green 2813 + 24 153 124 Turquoise 2814 + 0 137 109 Dark Blue / Green 2815 + 72 71 63 Olive 2965 +185 213 222 Ice Blue 301 +148 197 216 Moderate Blue 302 +104 156 185 Pale Purple 303 + 74 135 168 Cendre Blue 304 + 42 114 151 Petrol Blue 305 + 42 90 127 Imperial Blue 306 + 33 84 124 Lake Blue 307 + 30 69 106 Dark Blue 308 + 44 65 92 Dark Navy 309 +152 170 182 Blue Fog 310 +111 138 156 Country Blue 312 + 92 112 131 Dark Grey / Blue 314 + 69 89 102 Petrol Blue 316 + 62 78 93 Grey Pewter 318 + 53 72 85 Dark Blue / Green 320 +175 204 219 Crystal Blue 331 +108 150 186 Pale Purple 332 + 51 95 138 Imperial Blue 333 + 34 70 112 Navy Blue 334 + 43 54 85 Dark Navy 335 +171 189 189 Cloud Blue 340 +122 143 143 Grey 341 +100 125 130 Trellis 342 + 77 99 106 Dark Grey / Blue 343 + 65 85 90 Midnight 344 +190 209 219 Bleuberry Medium Light 351 +153 197 218 Moderate Blue 352 +122 167 197 Sky Blue 353 + 71 137 174 Pale Purple 354 + 39 83 121 Blue 355 + 35 66 103 Dark Blue 356 + 36 59 94 Dark Blue 357 + 41 50 78 Colonial Blue 358 + 59 57 72 Soot 359 + 47 45 57 Nightblu Arctic 360 +177 204 220 Crystal Blue 361 +129 177 206 Pale Blue / Green 362 + 81 144 186 Tropic Blue 363 + 66 127 174 Medium Blue 364 + 29 109 160 Teal 365 + 35 100 169 Magic Blue 366 + 20 82 152 Warrior Blue 367 + 32 64 134 Blue Twirl 368 +143 206 214 Pale Turquoise 369 + 94 203 223 Pacific Blue 370 + 0 179 212 Surf Blue 371 + 0 154 195 California Blue 372 + 0 144 187 Blue Horizon 373 + 0 117 180 Medium Blue 374 + 84 198 208 Spearmint 375 + 0 165 178 Medium Teal Blue 376 + 0 151 167 Dark Blue / Green 377 + 0 136 153 Dark Aqua Green 378 + 0 134 161 Dark Blue 379 +145 191 202 Sky Blue 383 + 70 143 164 Capri 384 + 30 116 141 Teal 385 + 5 111 136 Dark Blue 386 +143 183 195 Thistle Light 390 +107 160 177 Medium Green / Blue 391 + 71 137 160 Blue Moon 392 + 26 109 127 Medium Blue 393 + 42 97 107 Dark Blue / Green 394 + 34 87 99 Deep Atlantic 395 + 43 74 86 Deep Windsor 396 + 51 63 87 Light Midnight 3095 +120 156 178 Country Blue 3101 + 76 120 146 Slate Grey 3102 + 51 92 119 Medium Green / Blue 3103 + 41 79 105 Salem Blue 3104 + 38 65 88 Dragon Fly 3105 +119 193 194 Seafrost 3211 + 57 172 171 Grizzly Turquoise 3212 + 0 151 156 Teal Medium 3213 + 0 141 153 Marine Aqua 3214 + 0 108 120 Pro Teal 3215 + 63 117 122 Deep Atlantic 3216 + 34 106 117 Dark Jade 3217 + 16 84 92 Dark Teal 3218 +144 183 211 Baby Blue 3315 + 66 109 149 Cornflower 3325 + 44 90 143 Blue Dusk 3335 +149 173 170 Quarry 3405 + 45 174 206 Surf Blue 3431 + 0 144 186 Blue Horizon 3432 + 0 122 167 Pretty Blue 3433 + 0 114 161 Dark Turquoise Blue 3434 + 14 99 151 Deep Ocean 3435 + 62 144 197 Blithe 3541 + 25 126 183 Medium Blue 3542 + 9 115 175 Baltic Blue 3543 + 45 131 198 Sapphire 3651 + 0 102 176 Sapphire Dark 3652 + 0 95 172 Medium Blue 3653 +102 145 188 Pale Purple 3654 + 83 131 178 Regatta 3655 + 63 114 164 Blueball 3656 + 58 109 160 Wonder Blue 3657 + 36 52 113 Dark Blue 3685 + 0 188 216 Surf Blue 3705 + 0 161 200 California Blue 3715 + 0 129 185 Baltic Blue 3735 +166 219 222 Baby Blue 3745 +191 204 220 Blue Hint 3761 +137 165 199 Chambray 3762 +110 148 190 Baby Blue 3763 + 85 118 166 Parisian Blue 3764 + 78 101 139 Dark Slate Blue 3765 + 74 79 108 Petrol Blue 3766 + 54 58 79 Dark Grey / Blue 3767 + 45 47 64 Dark Navy 3768 + 45 44 54 Navy 3769 +123 144 185 Cosmic Sky 3871 +113 142 198 Paris Blue 3872 + 94 128 189 Jay Blue 3873 + 74 101 172 Light Blue 3874 + 52 61 125 Medium Purple 3875 + 53 85 136 Imperial Blue 3876 + 60 81 121 Dusty Navy 3877 + 56 59 89 Dark Navy 3878 +200 197 193 Bleu Mist Medium Light 410 +171 163 154 Light Green / Yellow 411 +153 142 131 Light Brown 412 +118 108 101 Black 413 +102 95 92 Plum Kitten 414 + 90 84 83 Rabbit 415 + 72 65 64 Mahogany 416 +205 197 188 Moonstruck 420 +198 187 171 Medium Beige 421 +155 142 126 Light Brown 422 +146 131 115 Fungi 423 +118 104 92 Medium Brown 424 +103 86 76 Egyptian Brown 425 + 93 77 67 Dark Fawn 426 +185 178 185 Pale Sterling Grey 433 +157 152 159 Dark Grey 434 +135 132 143 Dark Grey 435 + 94 90 100 Dark Gray 436 + 79 73 83 Ducky Mauve 437 + 76 73 81 Midnight 438 +189 169 166 Ashes Of Roses 450 +178 156 150 Sphinx 451 +156 133 127 Twilight Mauve 452 +137 118 115 Med. Dk. Khaki 453 +114 95 91 Medium Brown 454 +101 88 89 Sparrow 455 + 81 62 62 Dark Grey 456 +164 170 181 Medium Grey 461 +147 153 166 Medium Grey 462 +129 138 150 Antique Bleu Medium 463 +116 127 140 Pale Grey / Blue 464 + 88 90 101 Dark Gray 465 + 72 69 78 Midnight 466 +141 142 145 Platinum 471 +125 124 126 Dark Grey 472 +108 117 120 Metal 473 + 91 94 96 Dark Gray 474 + 77 80 83 Granite 475 + 66 69 71 Dark Navy 476 +199 203 206 Pearl 482 +181 181 181 Light Grey / Green 483 +160 164 169 Light Grey 484 +141 142 150 Dark Grey 485 +108 110 120 Folkstone Gray 486 + 93 97 104 Grey Blue 487 + 82 82 91 Midnight 488 + 67 62 68 Dark Grey 489 +162 168 185 LightPurple 491 +139 140 157 Medium Purple 492 +116 118 137 Medium Grey / Blue 493 +100 102 118 Lilac Mist 494 + 82 83 99 Nightshadow Blue 495 + 61 58 68 Dark grey 496 +176 166 153 String 4215 +164 154 154 Medium Grey 4251 +152 148 154 Silvery Grey 4252 +136 128 132 Med. Dk. Gray 4253 +121 113 114 Dark Grey 4254 +113 103 108 Charcoal 4255 + 96 89 93 Dark Gull Gray 4256 +199 188 183 Light Pink 4321 +196 185 175 Silver Lining 4322 +191 175 165 Pale Orange 4323 +172 154 142 Atmosphere 4324 +142 127 117 Fungi 4325 +120 105 97 Iron 4326 + 98 89 86 Black Chrome 4327 +115 110 123 Deep Blue 4351 +100 96 108 Dark Grey / Blue 4352 + 86 81 93 Graystone 4353 +188 187 195 Silver Grey 4571 +174 174 182 Dark Grey 4572 +157 156 165 Medium Grey 4573 +122 123 133 Dolphin 4574 +102 100 107 Gray Ridge 4575 + 80 76 81 Charcoal Grey 4576 +169 166 168 Silver 4611 +133 130 135 Penguin Grey 4612 +123 118 119 Charcoal 4613 + 99 93 92 Plum Kitten 4614 + 87 80 79 Twilight 4615 +148 144 143 GS Gray 4761 +138 136 133 Gray 4762 +118 118 118 Dark Grey 4763 + 94 96 91 Medium Grey 4764 + 73 74 70 Black Chrome 4765 +178 180 185 Grey 4835 +143 147 152 Pale Grey 4845 +126 126 132 Medium Grey 4855 + 72 66 73 Midnight 4895 +245 209 104 Gold 501 +234 189 81 Star Gold 502 +222 164 71 Gold 503 +209 138 54 Bright Gold 512 +185 122 56 Autumn Leaf 514 +175 109 43 Tiger Eye 516 +149 86 38 Medium Brown 518 +237 223 186 Tusk 520 +248 214 137 Blond 521 +251 204 93 Moonbeam 522 +255 185 51 Medium Orange 523 +255 162 0 Bright Orange 524 +255 152 0 Honey Dew 525 +254 133 0 Orange Sunrise 526 +247 202 149 Beach Sand 531 +251 175 98 Yellow Mist 532 +249 153 61 Orange 533 +247 134 67 Golden Poppy 534 +237 114 60 Coral Rose 535 +251 112 0 Dark Texas Orange 537 +237 230 207 Pale Orange 538 +229 224 190 Cream 539 +238 231 179 Wax Yellow 540 +240 225 138 Pale Yellow 541 +246 218 111 Snapdragon 542 +247 217 72 Gold Goblet 543 +250 207 59 Yellow 544 +253 203 33 Buttercup 546 +251 184 0 Tangerine 548 +222 179 124 Harvest Light 560 +211 173 104 Gold 561 +195 148 76 Oak Buff 562 +179 127 53 Gold 563 +154 111 55 Golden Grain 564 +136 95 53 Light Cocoa 565 +235 216 173 Pale Peach 571 +242 199 124 Cornsilk 572 +240 194 113 Golden Honey 573 +240 173 82 Scholastic 574 +232 152 63 Khaki 575 +223 127 49 Amberglow 576 +222 118 47 Golden Rust 577 +211 103 41 Orange 578 +225 228 140 Light Khaki Green 581 +220 225 118 Neon Green 583 +216 222 73 Dark Green 585 +238 216 194 Shell 591 +240 202 162 Coast Point 592 +239 171 122 Nutmeg Medium Light 593 +239 154 100 Pale Orange 594 +239 130 65 Apricot 595 +228 93 38 Hazel 596 +243 218 153 Light Orange 5205 +245 173 59 Manila 5235 +202 158 77 Medium Honey 5671 +160 120 59 Pale Brown 5672 +135 103 56 Medium Orange / Brown 5673 +219 180 133 Golden Olive / Light 5681 +210 163 107 Honey 5682 +191 134 78 Mocha Beige Medium 5683 +194 164 202 Viola 600 +176 138 185 African Violet 601 +128 88 146 Mulberry 602 +108 72 122 Jazz Purple 603 + 99 60 112 Bright Plum 604 + 84 50 95 Dark Purple 605 +172 182 200 Medium Grey 611 +151 161 186 Purple Cloud 612 +136 148 176 Purple Impression 613 +105 111 143 Copen Bleu Medium 614 + 86 93 127 Coastal Fjord 615 + 63 69 101 Deep Cobalt 616 +180 182 212 Ice Blue 621 +164 163 200 Pale Lilac 622 +144 140 184 Pale Purple 623 +125 117 168 Dark Lilac 624 +111 97 150 Corsican Blue 625 +100 86 139 Ultra Violet 626 +166 156 175 Wisteria 630 +149 135 158 Ocean Bleu 631 +125 106 130 Gun Metal Gray 632 +107 94 119 Cadet 633 +102 83 111 Mulled Grape 634 + 81 72 101 Blackberry 635 +122 126 187 Deep Periwinkle 641 +108 113 178 Light Royal Blue 642 + 87 93 162 Amparo Blue 643 + 54 54 120 Purple 644 +155 168 213 Light Purple 645 +126 139 194 Oriental Blue 646 +101 118 183 Medium Purple 647 + 77 96 169 Light Blue 648 + 68 80 147 Purple 649 +229 218 225 Light Orange / Red 651 +205 180 198 Haze 652 +171 138 163 Regal Orchid 653 +114 83 117 Crushed Grape 654 + 98 59 79 Medium Purple 655 + 79 59 72 Dark Grey 656 +120 121 175 Deep Periwinkle 661 +118 113 171 Light Purple 662 + 94 92 156 Violet Storm 663 + 89 81 146 Liberty 664 + 70 67 133 Mauve 665 +194 184 212 Purple Heather 671 +184 168 204 Lavender 672 +152 134 182 Bouganville 673 +125 103 159 Iris 674 + 99 79 128 Velvet Morning 675 + 95 63 111 Bright Plum 676 + 72 72 128 Purple 687 + 66 71 119 Skipper Blue 688 + 58 58 103 Dark Navy Blue 689 + 92 68 127 Imperial Purple 694 + 71 59 116 Dark Purple 695 + 68 55 110 Petrol Blue 696 +217 193 215 Light Pink 6001 +134 125 145 Penguin Grey 6271 +116 106 125 Light Grape 6272 + 99 90 115 Dark Grey / Blue 6273 +147 139 165 Ocean Bleu 6351 +134 127 154 Daybreak 6352 +123 116 142 Purple Ash 6353 + 93 83 115 Steel 6354 + 55 63 132 Medium Purple 6495 +187 159 169 Amethyst Medium Light 6501 +159 135 149 Light Brown 6502 +135 108 122 Grapeade 6503 +126 100 121 Gun Metal Gray 6504 +110 84 107 Grayish Purple 6505 +102 67 100 Dk. Plum 6655 + 80 55 82 Dark Purple 6657 +156 162 200 Pale Lilac 6881 +108 115 158 Bleached Denim 6882 +100 106 149 Slate Blue 6883 +221 38 46 Tuxedo Red 700 +215 36 57 Dark Red / Orange 701 +210 23 57 Rosewood 702 +198 0 50 Cardinal 703 +219 124 70 Sunburst 711 +187 104 52 Nutmeg 712 +137 69 48 Mink Brown 713 +120 57 41 Dark Brown 714 +104 49 49 Dark Brown 715 +120 72 59 Brown 719 +230 221 210 Turtledove 720 +210 178 143 Cream 721 +183 149 112 Beige 722 +173 137 100 Light Brown 723 +157 117 84 Fawn 724 +106 68 57 Clayrust 729 +236 231 228 Oyster 730 +237 228 209 Yellow / Gold 731 +231 208 182 Linen Medium 732 +224 193 159 Carmel Cream 733 +206 165 126 Tan 734 +174 128 91 Light Bronze 735 +153 108 74 Medium Brown 736 +140 86 62 Dark Brown 737 +119 77 68 Dark Brown 738 + 86 62 54 Brown 739 +224 189 170 Pale / Orange 740 +216 176 156 Toasted Almond 741 +190 148 127 Salmon 742 +185 137 118 Ash Rose 743 +162 117 100 Orange / Brown 744 +140 94 75 Russet 745 + 67 51 51 Black 749 +249 194 133 Wheat Light 751 +244 155 100 Chamois 752 +238 128 76 Gold 753 +225 107 58 Coral Rose 754 +221 91 44 Medium Orange 755 + 71 57 54 Black 759 +208 164 149 Misty Rose 761 +200 124 116 Canyon Clay 762 +162 82 82 Garnet Rose 763 +147 70 70 Earth Red 764 +219 165 152 Pink 765 +203 141 129 Brandied Apricot 766 +178 113 97 Dewberry 767 +169 102 89 Cedar Wood 768 +134 72 62 Dark Brown 769 +111 70 63 Amber Beige 778 + 81 63 62 Dark Grey 779 +236 158 122 Peach Pink 781 +222 136 99 Salmon Peach 782 +215 122 77 Toast 783 +182 96 66 Brown 784 +155 77 49 Spice 785 +133 60 41 Brown 786 +220 187 181 Lotus 791 +202 160 153 Misty Rose 792 +176 131 127 Tawny Birch 793 +155 105 103 Dark Salmon 794 +143 89 89 Renaissance Rose 795 +139 88 82 Brown 796 +128 86 82 Brown / Pink 797 +151 83 48 Medium Brown 7125 +226 211 183 Champagne Mist 7205 +119 80 61 Dark Brown 7361 +100 64 48 Dark Brown 7362 +222 189 161 Pale Brown 7366 +214 172 141 Light Brown 7367 +195 142 111 Dk. Ecru 7368 +182 124 92 Sirocco 7369 +105 62 45 Dark Brown 7371 + 81 52 47 Dark Brown 7785 +195 181 186 Pale Grey / Pink 7981 +180 153 150 Sphinx 7982 +146 116 118 Medium Brown 7983 +107 79 78 Plum Wine 7984 + 91 63 63 Dark Brown 7985 + 79 51 54 Brown Stone 7986 +229 228 240 Bright White 800 +229 228 239 Bright White 801 +217 193 177 Nude Gold 809 +219 203 186 Cream 810 +201 179 158 Sea Shell 811 +177 159 142 Light Taupe 812 +160 143 125 Taupe 813 +151 132 119 Moon Rock 814 +137 119 103 Pine Bark 815 +118 102 87 Medium Green / Yellow 816 +181 151 130 Fawn 819 +229 227 229 Silver Gray 820 +233 233 240 Blue Blush 821 +175 146 131 Taupe 829 +144 107 89 Beige 839 +198 174 135 Drab Gray 840 +189 158 123 Tawny Medium 841 +180 149 114 Umber 842 +162 138 111 Med. Taupe 843 +137 112 81 Medium Brown 844 +126 97 66 Cinnamon 845 +108 81 53 Brown 846 +129 96 87 Medium Brown 849 +236 232 228 Oyster 850 +102 81 72 Dark Fawn 859 +187 185 172 Skylight 861 +165 162 148 Pale Gray Green 862 +153 150 138 GS Gray 863 + 91 70 62 Dark Brown 869 +160 139 120 Light Brown 871 +148 122 103 Woodsmoke 872 +122 100 88 Medium Brown 873 +104 87 76 Egyptian Brown 874 +236 234 234 Amethyst Light 880 +159 126 105 Fawn 8295 +170 137 97 Candied Ginger 8425 + 46 42 45 Night Sky 900 + 40 37 38 Black 901 +191 167 100 PaleGreen-Yellow 286 diff --git a/extensions/fablabchemnitz/inkstitch/palettes/InkStitch FuFu Rayon.gpl b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch FuFu Rayon.gpl new file mode 100644 index 00000000..2f649173 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch FuFu Rayon.gpl @@ -0,0 +1,717 @@ +GIMP Palette +Name: Ink/Stitch: FuFu Rayon +Columns: 4 +# RGB Value Color Name Number +237 225 228 Oyster 100 +240 204 216 Pale Lavender 101 +241 187 205 Sweet Lilac 102 +243 171 191 Carnation 103 +241 151 175 Medium Pink 104 +236 122 155 Floral Pink 105 +226 93 134 Dark Pink 106 +216 67 118 Medium Pink 107 +244 203 191 Cloud Pink 110 +243 191 176 Peach Melba 111 +246 149 127 Flamingo 113 +241 204 207 Light Pink 116 +222 148 155 Sea Pink 117 +237 191 213 Light Pink 123 +236 151 192 Medium Pink 124 +234 134 177 Pink Petunia 125 +220 122 171 Pink 126 +206 85 152 Medium Pink 127 +179 49 122 Dark Pink 128 +158 28 97 Rebecca Rose 129 +228 191 216 Darker Lilac 130 +224 169 208 Impatient 131 +198 140 183 Lavender Medium Light 132 +192 122 175 Violet 133 +159 101 152 Plum Medium 134 +137 64 123 Deep Violet 135 +126 58 113 Dark Red 136 +122 53 107 Dark Purple 137 +100 42 84 Pale Purple 138 + 80 37 69 Medium Purple 139 +237 175 169 Pink Petal 140 +235 151 147 Emily Pink 141 +231 139 136 Peach Bloosom 142 +222 101 100 Dark Red / Orange 143 +205 86 80 Dark Salmon Pink 144 +198 73 71 Dark Salmon 145 +181 45 57 Terra Cotta 147 +164 41 56 Wildfire 148 +235 185 196 Shell 151 +233 157 179 Medium Pink 152 +232 135 159 Dusty Rose 153 +232 121 145 Medium Pink 154 +220 73 97 Cerise 155 +216 60 87 Dark Pink 156 +193 52 77 Dusky Rose 157 +231 224 224 Silver Gray 160 +237 209 201 Rosewater 161 +231 185 177 Light Peach 163 +191 131 137 Light Pink 165 +169 94 106 Rose Wine 166 +157 86 95 Mauvewood 167 +144 78 78 Dark Brown 168 +251 173 140 Coral Reef 169 +255 155 107 Light Orange 170 +240 107 55 Golden Brown 171 +236 92 38 Red Pepper 172 +234 90 55 Orange 173 +242 179 165 Soft Coral 180 +235 132 131 Peach Bloosom 181 +233 117 116 Tea Rose 182 +230 118 103 Medium Orange 184 +223 96 76 Dark Salmon Pink 185 +209 59 57 Tomato 186 +190 50 63 Burgundy 188 +185 44 64 Poinsettia 190 +162 35 54 Wildfire 192 +142 35 52 Burgundy 193 +149 42 66 Perfect Ruby 194 +125 37 58 Russet 195 +113 42 53 Wine 196 +107 46 55 Wine 197 + 99 43 53 Warm Wine 198 + 86 43 54 Chocolate 199 +242 194 189 Desert Bloom 1011 +225 121 143 Medium Pink 1013 +201 102 125 Med Plum 1014 +232 210 209 Orchid Ice 1020 +236 194 191 Pink Mist 1021 +213 155 176 Pale Pink 1031 +197 132 159 Polignac 1032 +180 106 136 Medium Purple 1033 +168 91 123 Dahlia Mauve 1034 +147 65 98 Medium Purple 1035 +134 63 92 Dark Brown 1036 +124 47 75 Wine 1037 +102 44 70 Grape Shake 1038 +231 69 42 Orange 1051 +226 59 44 Honeysuckle 1052 +224 54 43 Honeysuckle 1053 +243 181 185 Candy Pink 1081 +235 148 162 Classic Wine 1082 +223 85 121 Magenta Dark 1083 +214 53 92 Cerise 1084 +199 19 66 Rose / Very Dark 1085 +187 0 64 Country Red 1086 +240 118 125 Confetti 1106 +240 104 111 Dusty Rose 1107 +218 137 146 Medium Pink 1118 +209 110 134 Medium Pink 1119 +192 82 113 Dark Pink 1120 +176 72 96 Baroque Rose 1121 +163 58 80 Raspberry Medium Dark 1122 +152 36 72 Rose Wine Very Dark 1123 +219 116 126 Tea Rose 1128 +150 58 81 Medium maroom 1182 +150 37 86 Raspberry 1295 +131 49 65 Winterberry 1384 +224 143 193 Petal Pink 1400 +215 118 177 Medium Pink 1401 +208 103 164 Deep Mauve 1402 +185 72 138 Very Berry 1403 +169 63 130 Purple 1404 +161 58 125 Purple 1405 +148 41 109 Dark Red 1406 +243 184 183 Lt. Pink 1510 +245 148 141 Raspberry Light 1511 +243 111 98 Watermelon 1512 +239 86 70 Flamingo 1513 +235 71 51 Light Bronze 1514 +226 94 119 Shrimp 1545 +122 32 58 Russet 1586 +195 152 156 Adobe Rose 1600 +173 125 139 Light Purple 1601 +156 98 114 Perfect Ruby 1602 +133 73 96 Dark Brown 1603 +120 67 82 Dark Purple 1604 +189 156 172 Amethyst Medium Light 1607 +151 108 136 Rose Dust 1608 + 86 49 66 Intense Maroon 1609 +227 104 167 Soft Pink 1700 +220 65 141 Dark Pink 1701 +213 45 126 Dark Pink 1702 +208 25 114 Ruby Glint 1703 +232 89 139 Dark Pink 1714 +219 55 112 Beauty Rose Medium 1715 +204 14 96 Red 1716 +205 68 127 Dark Pink 1727 +187 20 93 Dark Pink 1728 +171 20 88 Antique Rose Ultra Dark 1729 +226 206 208 Orchid Ice 1898 +226 184 194 Golden Sand 1900 +186 117 142 Rose Dust 1902 +170 100 126 Medium Purple 1904 +148 73 102 Medium Purple 1906 +133 58 85 Brown 1908 +123 46 74 Brushed Burgundy 1910 + 0 129 91 Green Dazzle 200 +156 169 147 Laurel Green Medium Light 201 +138 170 144 Surf Bleu Light 202 +118 145 123 Spring Garden 203 + 80 114 93 Harbor Green 204 + 62 91 74 Evergreen 205 + 58 86 71 Grass Green Very Dark 206 +159 159 100 Chartreuse / Bright 208 +148 148 83 Medium Green / Yellow 210 +128 127 68 Medium Green / Yellow 212 +109 109 50 Medium Palmetto Green 214 + 98 99 46 Khaki 216 + 95 96 52 Olive Drab 218 +194 216 211 Pastel Blue 219 +149 198 191 Bridal Turquoise 220 + 56 158 151 Sea Green 221 + 0 141 140 Navigate 222 + 0 122 124 Light Green / Blue 223 + 0 112 108 M. D. Green 224 +208 219 145 Lemon 226 +203 222 123 Green Oak 227 +143 186 92 Lime 228 +128 174 77 Medium Green / Yellow 229 + 96 155 71 Pear 231 + 80 147 82 Sage 232 + 31 137 85 Kelly 233 +176 172 144 Spray Green 234 +165 161 124 Sage Green 235 +150 147 113 Medium Green / Grey 236 +122 119 89 Covert Green 237 +103 96 69 Military Olive 238 + 92 85 62 Dark Grey / Green 239 +193 209 181 Blue Green / Medium 243 +138 164 130 Medium Green 244 + 89 116 89 Juniper Medium Dark 245 + 82 102 75 Grass Green Dark 246 + 66 90 69 French Green 247 + 60 85 68 Grass Green Very Dark 248 + 57 75 58 Mitchell Green 249 +204 208 162 Pastel Green 251 +170 202 175 Sea Green Medium Light 252 +100 156 122 Grass Harper 253 + 77 138 109 Jade Medium 254 + 57 124 98 Dark Blue / Green 255 + 32 94 69 Green Petal 256 + 57 85 74 Enchanted Sea 257 + 56 71 64 Mitchell Green 258 + 47 62 51 Grey Wool 259 +193 225 185 Light Green / Yellow 261 +128 207 149 Pale Aqua 262 + 91 167 113 Green 263 + 0 130 94 Green Dazzle 264 + 0 125 94 Jade 265 + 13 119 94 Jade 266 +198 199 127 Light Pistachio 272 +187 183 90 Tarnished Gold 273 +155 158 72 Pistachio 274 +146 152 78 Medium Green / Yellow 275 +127 138 77 Medium Palmetto 276 + 90 110 41 Meadow 277 +190 166 99 PaleGreen-Yellow 282 +167 142 63 Olive 283 +149 122 43 Medium Yellow / Green 284 +111 92 44 Desert Cactus 285 +144 128 81 Antique Bronze 287 +127 112 66 Olive Green 288 +115 100 60 Moss 289 +103 187 170 Moss 291 + 29 133 122 Surf Bleu Medium 292 + 7 97 93 Peacock Blue 293 + 40 88 89 Dark Bottle Green 294 +107 114 106 Sedona Sage 295 + 82 87 80 Granite 296 + 84 98 93 Dark Gray 297 + 61 74 70 Dark Army Green 298 + 54 67 63 Black 299 +190 194 167 Overcast 2005 +133 132 70 Medium Green / Yellow 2011 +108 104 43 Bronze 2012 + 88 90 42 Green 2013 + 88 89 51 Cajun Mist 2014 + 75 72 45 Water Lilly 2015 + 68 66 47 Laurel Green Medium 2016 + 68 61 51 Black Chrome 2017 +185 207 204 Jade Tint 2039 +158 192 197 Canal Blue 2040 +151 185 189 Snow Blue 2041 +118 164 173 Surf Blue 2042 + 0 157 146 Deep Aqua 2215 + 52 113 66 Tropical Green 2335 +134 168 157 Surf Bleu Light 2411 +104 137 123 Pine Medium 2412 +111 125 109 Willow 2413 + 86 108 93 Harbor Green 2415 + 69 84 64 Dark Grey / Green 2417 +152 204 158 Medium Mint Green 2615 +102 180 121 Zephyr Green 2625 + 60 160 115 Ming Green 2635 +146 212 175 Ocean Wave 2811 +104 203 161 Green Light Bright 2812 + 70 169 138 Isle Green 2813 + 24 153 124 Turquoise 2814 + 0 137 109 Dark Blue / Green 2815 + 72 71 63 Olive 2965 +185 213 222 Ice Blue 301 +148 197 216 Moderate Blue 302 +104 156 185 Pale Purple 303 + 74 135 168 Cendre Blue 304 + 42 114 151 Petrol Blue 305 + 42 90 127 Imperial Blue 306 + 33 84 124 Lake Blue 307 + 30 69 106 Dark Blue 308 + 44 65 92 Dark Navy 309 +152 170 182 Blue Fog 310 +111 138 156 Country Blue 312 + 92 112 131 Dark Grey / Blue 314 + 69 89 102 Petrol Blue 316 + 62 78 93 Grey Pewter 318 + 53 72 85 Dark Blue / Green 320 +175 204 219 Crystal Blue 331 +108 150 186 Pale Purple 332 + 51 95 138 Imperial Blue 333 + 34 70 112 Navy Blue 334 + 43 54 85 Dark Navy 335 +171 189 189 Cloud Blue 340 +122 143 143 Grey 341 +100 125 130 Trellis 342 + 77 99 106 Dark Grey / Blue 343 + 65 85 90 Midnight 344 +190 209 219 Bleuberry Medium Light 351 +153 197 218 Moderate Blue 352 +122 167 197 Sky Blue 353 + 71 137 174 Pale Purple 354 + 39 83 121 Blue 355 + 35 66 103 Dark Blue 356 + 36 59 94 Dark Blue 357 + 41 50 78 Colonial Blue 358 + 59 57 72 Soot 359 + 47 45 57 Nightblu Arctic 360 +177 204 220 Crystal Blue 361 +129 177 206 Pale Blue / Green 362 + 81 144 186 Tropic Blue 363 + 66 127 174 Medium Blue 364 + 29 109 160 Teal 365 + 35 100 169 Magic Blue 366 + 20 82 152 Warrior Blue 367 + 32 64 134 Blue Twirl 368 +143 206 214 Pale Turquoise 369 + 94 203 223 Pacific Blue 370 + 0 179 212 Surf Blue 371 + 0 154 195 California Blue 372 + 0 144 187 Blue Horizon 373 + 0 117 180 Medium Blue 374 + 84 198 208 Spearmint 375 + 0 165 178 Medium Teal Blue 376 + 0 151 167 Dark Blue / Green 377 + 0 136 153 Dark Aqua Green 378 + 0 134 161 Dark Blue 379 +145 191 202 Sky Blue 383 + 70 143 164 Capri 384 + 30 116 141 Teal 385 + 5 111 136 Dark Blue 386 +143 183 195 Thistle Light 390 +107 160 177 Medium Green / Blue 391 + 71 137 160 Blue Moon 392 + 26 109 127 Medium Blue 393 + 42 97 107 Dark Blue / Green 394 + 34 87 99 Deep Atlantic 395 + 43 74 86 Deep Windsor 396 + 51 63 87 Light Midnight 3095 +120 156 178 Country Blue 3101 + 76 120 146 Slate Grey 3102 + 51 92 119 Medium Green / Blue 3103 + 41 79 105 Salem Blue 3104 + 38 65 88 Dragon Fly 3105 +119 193 194 Seafrost 3211 + 57 172 171 Grizzly Turquoise 3212 + 0 151 156 Teal Medium 3213 + 0 141 153 Marine Aqua 3214 + 0 108 120 Pro Teal 3215 + 63 117 122 Deep Atlantic 3216 + 34 106 117 Dark Jade 3217 + 16 84 92 Dark Teal 3218 +144 183 211 Baby Blue 3315 + 66 109 149 Cornflower 3325 + 44 90 143 Blue Dusk 3335 +149 173 170 Quarry 3405 + 45 174 206 Surf Blue 3431 + 0 144 186 Blue Horizon 3432 + 0 122 167 Pretty Blue 3433 + 0 114 161 Dark Turquoise Blue 3434 + 14 99 151 Deep Ocean 3435 + 62 144 197 Blithe 3541 + 25 126 183 Medium Blue 3542 + 9 115 175 Baltic Blue 3543 + 45 131 198 Sapphire 3651 + 0 102 176 Sapphire Dark 3652 + 0 95 172 Medium Blue 3653 +102 145 188 Pale Purple 3654 + 83 131 178 Regatta 3655 + 63 114 164 Blueball 3656 + 58 109 160 Wonder Blue 3657 + 36 52 113 Dark Blue 3685 + 0 188 216 Surf Blue 3705 + 0 161 200 California Blue 3715 + 0 129 185 Baltic Blue 3735 +166 219 222 Baby Blue 3745 +191 204 220 Blue Hint 3761 +137 165 199 Chambray 3762 +110 148 190 Baby Blue 3763 + 85 118 166 Parisian Blue 3764 + 78 101 139 Dark Slate Blue 3765 + 74 79 108 Petrol Blue 3766 + 54 58 79 Dark Grey / Blue 3767 + 45 47 64 Dark Navy 3768 + 45 44 54 Navy 3769 +123 144 185 Cosmic Sky 3871 +113 142 198 Paris Blue 3872 + 94 128 189 Jay Blue 3873 + 74 101 172 Light Blue 3874 + 52 61 125 Medium Purple 3875 + 53 85 136 Imperial Blue 3876 + 60 81 121 Dusty Navy 3877 + 56 59 89 Dark Navy 3878 +200 197 193 Bleu Mist Medium Light 410 +171 163 154 Light Green / Yellow 411 +153 142 131 Light Brown 412 +118 108 101 Black 413 +102 95 92 Plum Kitten 414 + 90 84 83 Rabbit 415 + 72 65 64 Mahogany 416 +205 197 188 Moonstruck 420 +198 187 171 Medium Beige 421 +155 142 126 Light Brown 422 +146 131 115 Fungi 423 +118 104 92 Medium Brown 424 +103 86 76 Egyptian Brown 425 + 93 77 67 Dark Fawn 426 +185 178 185 Pale Sterling Grey 433 +157 152 159 Dark Grey 434 +135 132 143 Dark Grey 435 + 94 90 100 Dark Gray 436 + 79 73 83 Ducky Mauve 437 + 76 73 81 Midnight 438 +189 169 166 Ashes Of Roses 450 +178 156 150 Sphinx 451 +156 133 127 Twilight Mauve 452 +137 118 115 Med. Dk. Khaki 453 +114 95 91 Medium Brown 454 +101 88 89 Sparrow 455 + 81 62 62 Dark Grey 456 +164 170 181 Medium Grey 461 +147 153 166 Medium Grey 462 +129 138 150 Antique Bleu Medium 463 +116 127 140 Pale Grey / Blue 464 + 88 90 101 Dark Gray 465 + 72 69 78 Midnight 466 +141 142 145 Platinum 471 +125 124 126 Dark Grey 472 +108 117 120 Metal 473 + 91 94 96 Dark Gray 474 + 77 80 83 Granite 475 + 66 69 71 Dark Navy 476 +199 203 206 Pearl 482 +181 181 181 Light Grey / Green 483 +160 164 169 Light Grey 484 +141 142 150 Dark Grey 485 +108 110 120 Folkstone Gray 486 + 93 97 104 Grey Blue 487 + 82 82 91 Midnight 488 + 67 62 68 Dark Grey 489 +162 168 185 LightPurple 491 +139 140 157 Medium Purple 492 +116 118 137 Medium Grey / Blue 493 +100 102 118 Lilac Mist 494 + 82 83 99 Nightshadow Blue 495 + 61 58 68 Dark grey 496 +176 166 153 String 4215 +164 154 154 Medium Grey 4251 +152 148 154 Silvery Grey 4252 +136 128 132 Med. Dk. Gray 4253 +121 113 114 Dark Grey 4254 +113 103 108 Charcoal 4255 + 96 89 93 Dark Gull Gray 4256 +199 188 183 Light Pink 4321 +196 185 175 Silver Lining 4322 +191 175 165 Pale Orange 4323 +172 154 142 Atmosphere 4324 +142 127 117 Fungi 4325 +120 105 97 Iron 4326 + 98 89 86 Black Chrome 4327 +115 110 123 Deep Blue 4351 +100 96 108 Dark Grey / Blue 4352 + 86 81 93 Graystone 4353 +188 187 195 Silver Grey 4571 +174 174 182 Dark Grey 4572 +157 156 165 Medium Grey 4573 +122 123 133 Dolphin 4574 +102 100 107 Gray Ridge 4575 + 80 76 81 Charcoal Grey 4576 +169 166 168 Silver 4611 +133 130 135 Penguin Grey 4612 +123 118 119 Charcoal 4613 + 99 93 92 Plum Kitten 4614 + 87 80 79 Twilight 4615 +148 144 143 GS Gray 4761 +138 136 133 Gray 4762 +118 118 118 Dark Grey 4763 + 94 96 91 Medium Grey 4764 + 73 74 70 Black Chrome 4765 +178 180 185 Grey 4835 +143 147 152 Pale Grey 4845 +126 126 132 Medium Grey 4855 + 72 66 73 Midnight 4895 +245 209 104 Gold 501 +234 189 81 Star Gold 502 +222 164 71 Gold 503 +209 138 54 Bright Gold 512 +185 122 56 Autumn Leaf 514 +175 109 43 Tiger Eye 516 +149 86 38 Medium Brown 518 +237 223 186 Tusk 520 +248 214 137 Blond 521 +251 204 93 Moonbeam 522 +255 185 51 Medium Orange 523 +255 162 0 Bright Orange 524 +255 152 0 Honey Dew 525 +254 133 0 Orange Sunrise 526 +247 202 149 Beach Sand 531 +251 175 98 Yellow Mist 532 +249 153 61 Orange 533 +247 134 67 Golden Poppy 534 +237 114 60 Coral Rose 535 +251 112 0 Dark Texas Orange 537 +237 230 207 Pale Orange 538 +229 224 190 Cream 539 +238 231 179 Wax Yellow 540 +240 225 138 Pale Yellow 541 +246 218 111 Snapdragon 542 +247 217 72 Gold Goblet 543 +250 207 59 Yellow 544 +253 203 33 Buttercup 546 +251 184 0 Tangerine 548 +222 179 124 Harvest Light 560 +211 173 104 Gold 561 +195 148 76 Oak Buff 562 +179 127 53 Gold 563 +154 111 55 Golden Grain 564 +136 95 53 Light Cocoa 565 +235 216 173 Pale Peach 571 +242 199 124 Cornsilk 572 +240 194 113 Golden Honey 573 +240 173 82 Scholastic 574 +232 152 63 Khaki 575 +223 127 49 Amberglow 576 +222 118 47 Golden Rust 577 +211 103 41 Orange 578 +225 228 140 Light Khaki Green 581 +220 225 118 Neon Green 583 +216 222 73 Dark Green 585 +238 216 194 Shell 591 +240 202 162 Coast Point 592 +239 171 122 Nutmeg Medium Light 593 +239 154 100 Pale Orange 594 +239 130 65 Apricot 595 +228 93 38 Hazel 596 +243 218 153 Light Orange 5205 +245 173 59 Manila 5235 +202 158 77 Medium Honey 5671 +160 120 59 Pale Brown 5672 +135 103 56 Medium Orange / Brown 5673 +219 180 133 Golden Olive / Light 5681 +210 163 107 Honey 5682 +191 134 78 Mocha Beige Medium 5683 +194 164 202 Viola 600 +176 138 185 African Violet 601 +128 88 146 Mulberry 602 +108 72 122 Jazz Purple 603 + 99 60 112 Bright Plum 604 + 84 50 95 Dark Purple 605 +172 182 200 Medium Grey 611 +151 161 186 Purple Cloud 612 +136 148 176 Purple Impression 613 +105 111 143 Copen Bleu Medium 614 + 86 93 127 Coastal Fjord 615 + 63 69 101 Deep Cobalt 616 +180 182 212 Ice Blue 621 +164 163 200 Pale Lilac 622 +144 140 184 Pale Purple 623 +125 117 168 Dark Lilac 624 +111 97 150 Corsican Blue 625 +100 86 139 Ultra Violet 626 +166 156 175 Wisteria 630 +149 135 158 Ocean Bleu 631 +125 106 130 Gun Metal Gray 632 +107 94 119 Cadet 633 +102 83 111 Mulled Grape 634 + 81 72 101 Blackberry 635 +122 126 187 Deep Periwinkle 641 +108 113 178 Light Royal Blue 642 + 87 93 162 Amparo Blue 643 + 54 54 120 Purple 644 +155 168 213 Light Purple 645 +126 139 194 Oriental Blue 646 +101 118 183 Medium Purple 647 + 77 96 169 Light Blue 648 + 68 80 147 Purple 649 +229 218 225 Light Orange / Red 651 +205 180 198 Haze 652 +171 138 163 Regal Orchid 653 +114 83 117 Crushed Grape 654 + 98 59 79 Medium Purple 655 + 79 59 72 Dark Grey 656 +120 121 175 Deep Periwinkle 661 +118 113 171 Light Purple 662 + 94 92 156 Violet Storm 663 + 89 81 146 Liberty 664 + 70 67 133 Mauve 665 +194 184 212 Purple Heather 671 +184 168 204 Lavender 672 +152 134 182 Bouganville 673 +125 103 159 Iris 674 + 99 79 128 Velvet Morning 675 + 95 63 111 Bright Plum 676 + 72 72 128 Purple 687 + 66 71 119 Skipper Blue 688 + 58 58 103 Dark Navy Blue 689 + 92 68 127 Imperial Purple 694 + 71 59 116 Dark Purple 695 + 68 55 110 Petrol Blue 696 +217 193 215 Light Pink 6001 +134 125 145 Penguin Grey 6271 +116 106 125 Light Grape 6272 + 99 90 115 Dark Grey / Blue 6273 +147 139 165 Ocean Bleu 6351 +134 127 154 Daybreak 6352 +123 116 142 Purple Ash 6353 + 93 83 115 Steel 6354 + 55 63 132 Medium Purple 6495 +187 159 169 Amethyst Medium Light 6501 +159 135 149 Light Brown 6502 +135 108 122 Grapeade 6503 +126 100 121 Gun Metal Gray 6504 +110 84 107 Grayish Purple 6505 +102 67 100 Dk. Plum 6655 + 80 55 82 Dark Purple 6657 +156 162 200 Pale Lilac 6881 +108 115 158 Bleached Denim 6882 +100 106 149 Slate Blue 6883 +221 38 46 Tuxedo Red 700 +215 36 57 Dark Red / Orange 701 +210 23 57 Rosewood 702 +198 0 50 Cardinal 703 +219 124 70 Sunburst 711 +187 104 52 Nutmeg 712 +137 69 48 Mink Brown 713 +120 57 41 Dark Brown 714 +104 49 49 Dark Brown 715 +120 72 59 Brown 719 +230 221 210 Turtledove 720 +210 178 143 Cream 721 +183 149 112 Beige 722 +173 137 100 Light Brown 723 +157 117 84 Fawn 724 +106 68 57 Clayrust 729 +236 231 228 Oyster 730 +237 228 209 Yellow / Gold 731 +231 208 182 Linen Medium 732 +224 193 159 Carmel Cream 733 +206 165 126 Tan 734 +174 128 91 Light Bronze 735 +153 108 74 Medium Brown 736 +140 86 62 Dark Brown 737 +119 77 68 Dark Brown 738 + 86 62 54 Brown 739 +224 189 170 Pale / Orange 740 +216 176 156 Toasted Almond 741 +190 148 127 Salmon 742 +185 137 118 Ash Rose 743 +162 117 100 Orange / Brown 744 +140 94 75 Russet 745 + 67 51 51 Black 749 +249 194 133 Wheat Light 751 +244 155 100 Chamois 752 +238 128 76 Gold 753 +225 107 58 Coral Rose 754 +221 91 44 Medium Orange 755 + 71 57 54 Black 759 +208 164 149 Misty Rose 761 +200 124 116 Canyon Clay 762 +162 82 82 Garnet Rose 763 +147 70 70 Earth Red 764 +219 165 152 Pink 765 +203 141 129 Brandied Apricot 766 +178 113 97 Dewberry 767 +169 102 89 Cedar Wood 768 +134 72 62 Dark Brown 769 +111 70 63 Amber Beige 778 + 81 63 62 Dark Grey 779 +236 158 122 Peach Pink 781 +222 136 99 Salmon Peach 782 +215 122 77 Toast 783 +182 96 66 Brown 784 +155 77 49 Spice 785 +133 60 41 Brown 786 +220 187 181 Lotus 791 +202 160 153 Misty Rose 792 +176 131 127 Tawny Birch 793 +155 105 103 Dark Salmon 794 +143 89 89 Renaissance Rose 795 +139 88 82 Brown 796 +128 86 82 Brown / Pink 797 +151 83 48 Medium Brown 7125 +226 211 183 Champagne Mist 7205 +119 80 61 Dark Brown 7361 +100 64 48 Dark Brown 7362 +222 189 161 Pale Brown 7366 +214 172 141 Light Brown 7367 +195 142 111 Dk. Ecru 7368 +182 124 92 Sirocco 7369 +105 62 45 Dark Brown 7371 + 81 52 47 Dark Brown 7785 +195 181 186 Pale Grey / Pink 7981 +180 153 150 Sphinx 7982 +146 116 118 Medium Brown 7983 +107 79 78 Plum Wine 7984 + 91 63 63 Dark Brown 7985 + 79 51 54 Brown Stone 7986 +229 228 240 Bright White 800 +217 193 177 Nude Gold 809 +219 203 186 Cream 810 +201 179 158 Sea Shell 811 +177 159 142 Light Taupe 812 +160 143 125 Taupe 813 +151 132 119 Moon Rock 814 +137 119 103 Pine Bark 815 +118 102 87 Medium Green / Yellow 816 +181 151 130 Fawn 819 +229 227 229 Silver Gray 820 +233 233 240 Blue Blush 821 +175 146 131 Taupe 829 +144 107 89 Beige 839 +198 174 135 Drab Gray 840 +189 158 123 Tawny Medium 841 +180 149 114 Umber 842 +162 138 111 Med. Taupe 843 +137 112 81 Medium Brown 844 +126 97 66 Cinnamon 845 +108 81 53 Brown 846 +129 96 87 Medium Brown 849 +236 232 228 Oyster 850 +237 237 245 Pale Silver 851 +102 81 72 Dark Fawn 859 +187 185 172 Skylight 861 +165 162 148 Pale Gray Green 862 +153 150 138 GS Gray 863 + 91 70 62 Dark Brown 869 +160 139 120 Light Brown 871 +148 122 103 Woodsmoke 872 +122 100 88 Medium Brown 873 +104 87 76 Egyptian Brown 874 +236 234 234 Amethyst Light 880 +159 126 105 Fawn 8295 +170 137 97 Candied Ginger 8425 + 46 42 45 Night Sky 900 + 40 37 38 Black 901 +191 167 100 PaleGreen-Yellow 286 diff --git a/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Gunold.gpl b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Gunold.gpl new file mode 100644 index 00000000..efa91272 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Gunold.gpl @@ -0,0 +1,134 @@ +GIMP Palette +Name: Ink/Stitch: Gunold +Columns: 4 +# RGB Value Color Name Number + 0 0 0 Black 61005 +102 51 0 Brown 61129 +102 55 0 Expresso 61130 +255 102 0 Dk Tex Orange 61078 +255 105 0 Sunkist 61184 +255 204 0 Pumpkin 61065 +125 80 41 Sienna 61057 +102 51 51 Smokey 61183 +204 51 51 Auburn 61169 +204 72 51 Dark Rust 61181 + 0 73 51 Dk Green 61103 + 0 75 51 Green Sail 61171 + 0 77 51 Green Petal 61174 + 0 79 51 Green Sail2 61536 +153 102 51 Chocolate 61058 +153 105 51 Date 61158 +225 120 51 Rust 61021 +153 153 51 Palmetto 61176 +204 153 51 Almond 61025 +204 155 51 Almond2 61056 +204 157 51 Toast 61126 +255 153 51 Yellow 61024 +255 155 51 Yellow2 61137 +255 157 51 Yellow3 61185 +204 204 51 Daffodil 61067 +240 204 51 Sun Gold 61159 +225 225 51 Star Gold 61023 +225 227 51 Glow 61135 +225 229 51 Star Gold2 61187 +170 120 53 Wicker 61128 +140 95 65 Lt Cocoa 61170 + 0 0 75 Midnight Navy 61043 + 0 5 75 Midnight Navy2 61044 +255 0 75 Red Berry 61039 +255 5 75 Red Berry2 61147 +102 25 75 Red Jubilee 61035 +102 27 75 Dark Maroon 61189 + 75 75 75 Twilight 61220 +255 80 90 Bashful Pink 61119 +255 240 90 Goldenrod 61124 +255 0 102 Persimmon 61037 +153 80 102 Wine 61190 +153 83 102 Wine2 61214 + 51 120 102 Greenstone 61079 + 51 123 102 Green Forest 61208 + 51 125 102 Fern Green 61230 + 51 127 102 Oceanic Green 61513 + 51 129 102 Fern Green2 61517 +153 121 102 Sand Dune 61156 +204 153 102 Ashley Gold 61055 +153 204 102 Erin Green 61510 +140 230 104 Green Oak 61047 +140 233 104 Peapod 61177 +215 0 120 Cherry Punch 61192 +215 5 120 Crimson 61533 + 0 40 120 Blue Ribbon 61200 + 61 89 120 Dark Teal 61162 +230 51 125 Ruby Glint 61231 +230 55 125 Ruby Glint2 61511 + 0 153 130 Dk Emerald 61051 +240 153 130 Flamingo 61019 +240 155 130 Coral 61020 +240 157 130 Melon 61259 +125 0 153 Purple Accent 61112 +125 5 153 Purple Accent2 61195 +153 0 153 Purple Shadow 61122 +153 5 153 Mulberry 61255 +102 2 153 Purple Twist 61197 +102 5 153 Purple Maze 61235 +120 51 153 Iris 61032 +120 55 153 Iris2 61194 +255 51 153 Azalea 61034 + 51 102 153 Baltic Blue 61096 + 51 105 153 Teal 61206 + 51 204 153 Lt Kelly 61101 +255 250 153 Maize 61061 +225 255 153 Pistachio 61209 +153 153 154 Silvery Gray 61041 +153 155 154 Metal 61166 +255 154 154 Rose 61224 +255 180 160 Peach 61258 +220 200 160 Topaz 61070 +153 153 165 Storm Gray 61040 +153 155 165 Storm Gray2 61219 + 50 100 170 Imperial Blue 61198 +204 180 170 Bamboo 61149 +204 185 170 Rattan 61180 +204 0 180 Plum 61033 +204 5 180 Plum2 61080 +204 153 186 Ducky Mauve 61179 +255 80 190 Begonia 61154 +255 85 190 Passion 61191 +255 185 190 Pink Mist 61108 +230 204 190 Opaline 61017 +230 207 190 Ecru 61127 + 51 51 200 Empire Blue 61042 + 51 55 200 Fire Blue 61076 +255 130 204 Floral Pink 61109 + 51 191 204 Willow 61211 + 51 195 204 Willow2 61212 + 51 198 204 Willow3 61508 +204 204 204 Pearl Grey 61236 +255 204 204 Pink 61225 +204 210 204 Skylight 61011 +204 215 204 Gray 61218 +255 170 220 Pale Orchid 61121 +255 204 220 Opal Mist 61064 +255 240 220 Ivory 61082 + 0 204 230 Mystic Teal 61090 + 0 208 230 Aquamarine 61252 +255 230 230 Bisque 61113 +240 180 235 Tulip 61193 +255 255 235 Natural White 61002 +255 255 240 Eggshell 61071 + 0 215 245 Turquoise 61046 + 0 215 245 Periwinkle 61094 + 0 220 245 Md Green 61503 + 90 140 255 Misty 61172 +165 165 255 Jay Blue 61143 +165 170 255 Blue 61535 +150 175 255 Tropic Blue 61196 +210 220 255 Ultra Blue 61028 +210 223 255 Ultra Blue2 61029 +210 226 255 Sky Blue 61074 +210 229 255 Baby Blue 61145 +210 233 255 Sky Blue2 61222 +240 250 255 Ice Blue 61203 +250 250 255 Snow White 61001 + 0 250 255 Mint Julep 61045 + 0 255 255 Lt Blue 61077 diff --git a/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Gutermann Creativ Dekor.gpl b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Gutermann Creativ Dekor.gpl new file mode 100644 index 00000000..aec5e3f1 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Gutermann Creativ Dekor.gpl @@ -0,0 +1,204 @@ +GIMP Palette +Name: Ink/Stitch: Gutermann Creativ Dekor +Columns: 4 +# RGB Value Color Name Number + 28 28 28 Midnight Blue 1000 +230 225 222 Silver Gray 1005 +234 231 219 Light Yellow 1016 +220 214 193 Bone White 1030 +239 197 133 Peach 1130 +237 213 158 Candy Tan 1195 +204 199 170 Beige Brown Light 1365 +237 230 149 Wheat 1405 +145 118 56 Autumn Green 1415 +227 187 86 Star Gold 1440 +227 225 118 Mustard 1445 +250 217 78 Aurora 1455 +213 217 96 Pale Yellow 1460 +248 200 71 Star Gold 1480 +230 171 88 Toast 1565 +242 171 55 Manila 1570 +224 138 37 Goldenrod 1585 +123 94 67 Medium Brown 2605 + 94 66 53 Brown 2585 + 44 33 37 Black 2335 + 82 52 50 Dark Brown 2100 +169 91 51 Medium Brown 2065 +129 67 46 Light Cocoa 1956 +158 86 61 Chocolate 1950 +211 131 58 Splinter 1850 +236 140 77 Rich Brown 1810 +214 141 106 Brass Medium 1790 +223 85 38 Orange 1770 +226 90 35 Hazel 1730 +229 107 65 Coral Rose 1695 +224 153 123 Melon 1660 +214 126 66 Sunburst 1645 +231 127 55 Amberglow 1625 +234 136 29 Goldenrod 1605 +126 99 80 Medium Brown 2610 + 79 58 46 Traditional Brown 2645 +130 91 67 Light Cocoa 2670 +114 108 88 Medium Brown 2735 +119 93 84 Fungi 2755 +217 196 173 Nude Gold 3130 +196 161 130 Sirocco 3165 +218 188 148 Beige 3180 +187 146 115 Champagne 3200 +142 114 100 Coconut 3255 +119 101 83 Medium Green / Yellow 3275 + 45 18 23 Black Red 3340 + 73 25 37 Dark Oak 3380 +154 59 55 Red Fruit 3430 +131 44 43 Burgundy 3450 +209 115 83 Toast 3545 +218 82 58 Orange 3570 +225 82 102 Calypso Coral 4625 +222 70 93 Raspberry 4610 +210 53 40 Saffron 4595 +186 49 58 Currant 4585 +163 49 65 Dark Mulberry 4580 +149 48 64 Perfect Ruby 4565 +170 39 50 Paprika 4550 +128 31 62 Maroon 4500 + 92 38 57 Beet Red 4466 + 63 51 60 Dark Grey 4416 + 60 30 46 Dark Brown 4360 + 85 27 57 Dark Purple 4295 +104 42 53 Warm Wine 4160 +130 80 85 Crushed Berry 4125 +145 118 127 Lasting Cocoa 3893 +211 97 81 Deep Sea Coral 3665 +204 37 39 Red Orange 3590 +192 46 73 Dusky Rose 4700 +171 43 92 Light Fuchsia 4731 +182 45 82 Wildfire 4736 +185 43 96 Ruby Glint 4740 +207 90 139 Carmine Rose 4805 +205 45 88 Teaberry 4810 +162 59 80 Raspberry Medium Dark 4830 +169 70 94 Baroque Rose 4845 +227 91 99 Bashful Pink 4865 +227 93 134 Dark Pink 4870 +226 89 135 Dark Pink 4911 +221 107 142 Dark Pink 4941 +229 141 160 Dusty Rose Light 5020 +221 124 113 Rose Wine Medium 5040 +232 206 205 Light Pink 5080 +229 190 190 Pale Orange 5120 +230 173 169 Flesh Pink 5136 + 54 46 64 Dark Maroon 5470 +120 89 105 Smokey Grey 5455 +118 78 107 Crushed Grape 5435 + 89 58 93 Port Wine 5415 + 83 43 53 Chocolate 5400 +137 54 97 Medium Purple 5385 +126 46 64 Winterberry 5340 +162 47 106 Burgundy Rose 5335 +122 28 80 Dark Wild Rose 5330 +121 28 80 Dark Wild Rose 5315 +136 29 81 Granet / Very Dark 5300 +108 49 105 Peony 5284 +116 59 84 Dark Purple 5280 +143 94 137 Medium Purple 5260 +157 104 148 Plum Medium 5240 +176 125 168 Regal Orchid 5188 +231 162 177 Medium Pink 5185 +229 158 179 Medium Pink 5150 + 40 29 38 Black 5560 + 54 34 60 Dark Maroon 5575 + 84 49 115 Purple Accent 5710 + 66 36 102 Ultraviolet 5720 + 77 37 107 Purple Accent 5727 + 95 48 126 Dahlia 5729 +146 125 161 Iris 5827 +159 133 141 Silver Lilac 5840 +200 173 193 Satin Wine 5845 + 75 56 112 Dark Purple 5865 + 23 22 49 Midnight Blue 5885 + 91 86 141 Royal Blue 5900 + 52 68 89 Dark Blue / Green 5990 + 85 95 122 Coastal Fjord 6008 + 47 65 135 Ultra Blue 6010 + 84 98 159 Medium Blue 6020 +105 111 159 Bleached Denim 6036 +132 138 186 Blue 6260 + 34 35 53 Seal 6805 + 50 44 103 Black Purple 6790 + 47 43 91 Dark Navy 6785 + 43 70 105 Dark Navy 6746 + 48 50 96 Blue Nugget 6665 + 28 59 103 Dark Blue 6660 + 43 55 104 Navy Blue 6655 + 46 53 98 Blue Nugget 6635 + 89 102 147 Dutch Blue 6595 + 91 125 180 Baby Blue dark 6575 + 68 111 156 Cornflower 6574 + 0 79 138 Surf 6540 + 56 110 172 Ocean Blue 6530 + 59 147 181 Radiant Turquoise 6490 +127 186 212 Peacock Blue Light 6445 +151 191 193 Snow Blue 6440 +115 154 183 Dusk Blue 6350 +164 168 193 LightPurple 6280 + 62 52 67 Dark grey 6810 + 47 66 89 Dark Navy 6855 + 62 51 60 Dark Grey 6900 + 63 61 72 Soot 6920 + 32 32 32 Smokey 6950 + 31 72 78 Deep Windsor 6975 + 13 74 112 Royal Blue 7030 + 1 77 111 Peacock 7080 + 1 89 149 Blue 7100 + 1 162 184 Marine Aqua 7160 + 67 145 155 Capri 7165 + 49 169 189 Sea Green 7185 + 35 107 157 Teal 7230 + 1 157 175 Truly Teal 7240 + 1 136 152 Dark Aqua Green 7251 + 0 152 159 Cyan 7337 + 52 112 112 Green-Blue Slate 7385 + 58 145 115 Mountain Lake 7480 + 91 184 130 Peppermint Green 8470 +102 154 88 Spring Green 8450 + 14 99 75 Green Bay 8375 + 58 106 70 Green Dust 8340 + 60 131 65 Leaf Green 8320 + 12 153 91 Light Jade 8310 + 60 146 107 Green Peacock 8275 + 2 140 119 Med. Teal 8270 + 1 86 53 Latex Green 8246 + 1 52 30 Deep Green 8230 + 0 71 53 Evergreen 8220 + 1 94 78 Green 8210 + 11 33 25 Olive Green 8067 + 79 94 85 Kahki Green 7950 + 3 96 89 Green Forest 7550 + 2 132 122 Brite Jade 7543 + 81 146 124 Winter Green 7500 + 99 168 158 Blue Green 7495 +118 187 78 Medium Green 8535 +127 131 75 Medium Palmetto 8595 +164 200 129 Grass Green 8610 +199 223 186 Light Green / Yellow 8615 +174 216 207 Blue Light 8700 + 94 90 79 Raven 8777 + 40 41 36 Grey Olive 8840 + 83 118 53 Sage 8860 + 93 87 94 Dark Gull Gray 9570 + 64 63 69 Dark Grey 9535 + 56 55 61 Black 9530 + 21 40 39 Charcoal 9435 + 36 36 36 Black 9395 + 89 85 57 Dark Green / Grey 8990 +142 134 70 Medium Green / Yellow 8910 + 56 83 40 Harbor Green 8870 + 75 68 76 Midnight 9585 + 94 77 88 Natural Burgundy 9660 +132 121 128 Gray Ridge 9675 +125 128 132 Medium Grey 9720 +105 112 135 Desma Blue 9735 +138 131 139 Medium Grey 9740 +142 126 132 Med. Dk. Gray 9850 +171 177 168 Pro Night Sky 9865 +181 178 189 Grey 9875 diff --git a/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Hemingworth.gpl b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Hemingworth.gpl new file mode 100644 index 00000000..23438122 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Hemingworth.gpl @@ -0,0 +1,298 @@ +GIMP Palette +Name: Ink/Stitch: Hemingworth +Columns: 4 +# RGB Value Color Name Number + 0 0 0 Classic Black 1000 +255 255 255 Pure White 1001 +165 17 0 Cardinal Red 1002 +243 187 206 Baby Pink 1003 +243 117 198 Pink Kiss 1004 +241 219 223 Whisper Pink 1005 +243 201 211 Gentle Blush 1006 +244 178 193 English Rose 1007 +243 158 188 Sweet Pea 1008 +247 122 180 Rosy Blush 1009 +215 31 133 Passion Pink 1010 +255 176 183 Rose Sunset 1011 +243 120 155 Bubblegum Pink 1012 +145 0 75 Very Berry 1013 +219 77 105 Carnation 1014 +255 164 138 Georgia Peach 1015 +255 139 124 Coral Reef 1016 +244 88 122 Apricot Dream 1017 +245 67 89 Dark Salmon 1018 +255 183 174 Petal Peach 1019 +255 143 112 Tangerine 1020 +251 206 146 Whipped Papaya 1021 +255 193 156 Frosted Peach 1022 +255 160 47 Marigold 1023 +233 131 0 Citrus Burst 1024 +255 112 0 Orange Slice 1025 +255 109 66 Dark Mango 1026 +227 114 34 Fiery Sunset 1027 +251 79 20 Hunter Orange 1028 +221 72 20 Fall Harvest 1029 +205 32 44 Candy Apple 1030 +136 35 50 Rummy Raisin 1031 +167 2 50 Pomegranate 1032 +161 0 107 Azalea 1033 +197 0 132 Primrose 1034 +119 32 89 Mulled Wine 1035 +146 0 117 Fuchsia 1036 +220 214 178 Cornsilk 1037 +198 188 137 Macadamia 1038 +248 228 152 Yellow Plumeria 1039 +248 222 110 Maize 1040 +255 188 61 Cantaloupe 1041 +235 232 177 Soft Sunlight 1042 +238 236 131 Lemon Drop 1043 +242 238 114 Canary Yellow 1044 +243 236 122 Daffodil 1045 +250 220 65 Sun 1046 +254 209 0 Dandelion 1047 +243 207 69 Buttercup 1048 +250 218 99 Dried Banana 1049 +239 189 71 Ginger Root 1050 +234 171 0 Goldenrod 1051 +206 142 0 Old Gold 1052 +255 203 79 Butternut 1053 +199 179 127 Antique Lace 1054 +179 179 140 Malt 1055 +194 194 160 Ecru 1056 +210 194 149 Sandy Shore 1057 +130 124 52 Light Avocado 1058 +181 163 0 Spring Leaf 1059 +248 228 152 Almond Cream 1060 +177 155 0 Split Pea 1061 +221 185 154 Honey Butter 1062 +197 146 23 Pale Caramel 1063 +162 80 34 Light Cinnamon 1064 +213 92 25 Carrot 1065 +170 39 47 Paprika 1066 +207 195 195 Dove Gray 1067 +201 202 200 Silver Lining 1068 +178 180 179 Storm Cloud 1069 +198 198 188 Platinum 1070 +175 173 195 Iron Ore 1071 +142 144 143 Chrome 1072 +108 111 112 Pewter Gray 1073 +129 138 143 Sea Storm 1074 + 92 127 146 Misty Blue Grey 1075 +166 188 198 Nautical Blue 1076 +116 118 120 Antique Silver 1077 + 89 90 92 Bronzed Steel 1078 + 25 29 31 Black Stallion 1079 + 85 81 123 Deep Orchid 1080 + 0 66 80 Pacific Waters 1081 + 21 101 112 Deep Sea 1082 +113 134 116 Dried Sage 1083 + 68 105 125 Blue Steel 1084 + 94 106 113 Shadow 1085 + 55 66 74 Dark Slate 1086 + 27 36 42 Charcoal 1087 +166 230 188 Sea Foam 1088 +115 150 0 Leafy Green 1089 + 83 104 43 Kentucky Grass 1090 +146 212 0 Green Apple1 1091 +122 184 0 Key Lime 1092 + 63 156 53 Kelly Green 1093 + 0 181 136 Cucumber Melon 1094 + 0 121 52 Grassy Green 1095 +200 229 154 Pistachio Nut 1096 +105 190 40 Electric Green 1097 +213 200 51 Cornsilk Green 1098 +195 231 111 Lemony Lime 1099 +185 204 195 Ocean Spray 1100 +106 112 41 Avocado 1101 +137 143 75 Seaweed 1102 + 3 86 66 Ivy 1103 + 0 106 77 Caribbean 1104 + 0 125 87 Dark Jade 1105 + 0 152 95 Light Jade 1106 + 0 155 116 Jade 1107 + 0 133 66 Dark Kelly Green 1108 + 0 105 60 Christmas Green 1109 + 40 78 54 Evergreen 1110 + 0 68 56 Mountain Meadow 1111 + 0 77 70 Forest Green 1112 + 0 80 92 Dragonfly 1113 + 73 108 96 Dark Sage 1114 +148 157 158 Silver Green 1115 + 75 71 26 Parsley 1116 + 75 69 44 Coconut Shell 1117 +213 210 202 Marshmallow 1118 +218 227 234 Ice Blue 1119 +131 132 122 Thyme 1120 + 87 88 79 Oregano 1121 +133 104 34 Sahara 1122 + 64 74 41 Jungle Green 1123 +154 153 110 Soft Beige 1124 + 79 76 37 Mocha 1125 + 69 35 37 Dark Chocolate 1126 + 93 53 38 Burnt Sienna 1127 + 78 46 45 Deep Walnut 1128 + 95 51 39 Cherrywood 1129 +110 50 25 Teddybear Brown 1130 + 93 79 75 Warm Earth 1131 +186 111 46 New Penny 1132 +167 111 62 Brown Sugar 1133 + 96 53 29 Light Chestnut 1134 +110 90 42 Pharaoh Gold 1135 +171 132 34 Autumn Haystack 1136 + 91 73 31 Army Green 1137 +179 153 93 Butter Taffy 1138 +227 155 108 Conch Shell 1139 +108 77 35 Pecan Pie 1140 +187 101 14 Pumpkin Spice 1141 +130 92 38 Toasted Almond 1142 +157 83 36 Auburn 1143 +154 59 38 Indian Paintbrush 1144 +174 125 91 Caramel Cappuccino 1145 +165 172 175 Old Lace 1146 +202 209 231 Moonlight 1147 +209 212 211 Snowflake 1148 +194 178 181 Mercury 1149 +239 214 219 Soft Petal 1150 +178 111 126 Dusty Rose 1151 +216 170 179 Light Mauve 1152 +137 104 124 Dark Mauve 1153 +100 68 89 Wild Plum 1154 +100 31 20 Raspberry 1155 +133 0 60 Magenta 1156 +102 32 70 Mulberry 1157 +110 39 20 Cranberry 1158 +106 26 65 Loganberry 1159 + 89 44 53 Merlot 1160 +246 163 187 Valentine Pink 1161 +119 74 57 Old Penny 1162 +178 84 26 Apple Cider 1163 +131 56 32 Rust 1164 +212 144 168 Winter Rose 1165 +255 129 141 Salmon 1166 +255 194 162 Pink Pearl 1167 +236 193 130 Spun Silk 1168 +239 197 206 Peaches 'n Cream 1169 +239 190 156 Peach Pastel 1170 +189 146 113 Champagne 1171 +193 226 229 Icicle Blue 1172 +143 223 226 Frosty Blue 1173 + 0 175 216 Blue Lagoon 1174 +124 162 149 Wintergreen 1175 + 0 154 166 Light Teal Blue 1176 + 99 206 202 Mint Green 1177 +187 231 230 Crystal Lake 1178 + 0 135 124 Navajo Turquoise 1179 + 0 124 146 Teal Blue 1180 + 0 103 120 Blue Satin 1181 + 0 123 105 Peacock Green 1182 + 2 78 67 Forest Glen 1183 + 0 73 83 Deep Teal 1184 +194 222 234 Cornflower Blue 1185 +143 202 231 Misty Blue 1186 + 75 146 219 Bluebird 1187 +106 173 228 Hyacinth 1188 +152 198 234 Winter Blue 1189 +170 202 230 Winter Sky 1190 +142 186 229 Sky Blue 1191 + 0 91 130 Smoky Blue 1192 + 94 156 174 Light Slate Blue 1193 + 0 105 131 Peacock Blue 1194 + 0 117 176 Medium Aquamarine 1195 + 0 102 161 Dark Aquamarine 1196 +101 207 233 Iceberg Blue 1197 + 0 115 207 China Blue 1198 + 0 34 68 Navy 1199 + 0 65 83 Salem Blue 1200 + 0 65 101 Dark Blueberry 1201 + 61 126 219 Azure 1202 + 0 57 166 Royal Blue 1203 + 0 51 141 Brilliant Blue 1204 + 11 34 101 Deep Blue 1205 +136 132 213 Purple Iris 1206 +157 171 226 Tulip 1207 + 33 36 146 Electric Purple 1208 + 26 33 85 Grape 1209 + 65 18 68 Indigo 1210 +100 89 196 Moon Shadow 1211 + 75 48 106 Huckleberry 1212 +179 130 199 Heather 1213 +156 95 181 Lavender 1214 +110 44 107 Peony 1215 +125 0 99 Dark Fuschia 1216 +220 199 223 Pale Orchid 1217 +220 157 221 Orchid 1218 +194 172 190 Dusty Mauve 1219 +117 40 100 Grape Jelly 1220 +193 175 229 Freesia 1221 +197 185 227 Lilac 1222 + 59 0 131 Royal Purple 1223 +130 36 12 Raspberry Red 1224 +245 236 90 Lemon Citrus 1225 +250 231 0 Sunshine Yellow 1226 +252 217 0 Sunflower 1227 +253 196 128 Baby Peach 1228 +215 211 199 Eggshell 1229 +255 182 82 Orange Cream 1230 +255 182 18 September Sunset 1231 +255 161 0 Orange Meringue 1232 +120 48 20 Redwood 1233 +158 48 57 Rusty Red 1234 +206 169 140 Cream Soda 1235 +103 92 83 Weathered Wood 1236 +118 106 101 Dark Alder 1237 +134 67 30 Cinnamon 1238 +185 201 208 Silvery Grey 1239 +125 154 170 Granite 1240 + 0 60 105 Dark Slate Blue 1241 + 0 57 70 Deep Slate Blue 1242 +145 186 163 Antique Grey 1243 + 97 99 101 Graphite 1244 + 77 79 83 Light Charcoal 1245 +101 85 28 Olive Green 1246 +204 220 0 Kiwi Lime 1247 + 0 175 63 Meadow 1248 + 23 94 84 Holly Leaf 1249 + 28 69 59 Winter Pine 1250 +105 146 58 Dusty Green 1251 + 85 118 48 Bush Ivy 1252 + 13 119 110 Minty Teal 1253 + 0 104 91 Dark Teal 1254 + 0 152 219 Country Blue 1255 +160 207 235 Pale Blue 1256 +111 212 228 Summer Sky 1257 + 0 61 76 Dark Turquoise 1258 + 0 152 195 Turquoise 1259 + 0 176 202 Caribbean Blue 1260 + 0 44 119 True Blue 1261 +111 154 211 Periwinkle 1262 + 0 53 145 Berry Blue 1263 + 0 40 87 Dark Blue 1264 + 0 44 95 Sailor Blue 1265 + 75 8 161 Soft Grape 1266 + 21 28 84 Eggplant 1267 + 87 6 140 Pure Purple 1268 + 73 14 111 Dark Purple 1269 +195 0 20 Christmas Red 1270 +221 224 15 Lemon Ice 1271 +201 221 3 Neon Green 1272 + 96 221 73 Brilliant Lime 1273 +255 204 30 Mango 1274 +255 237 56 Neon Yellow 1275 +255 169 82 Tropical Orange 1276 +255 147 56 Neon Orange 1277 +255 88 95 Rebel Peach 1278 +242 140 163 Shy Flamingo 1279 +254 138 158 Neon Pink 1280 +252 7 79 Neon Peach 1281 +246 171 4 Light Gold 9010 +215 148 0 Dark Gold 9011 +213 210 218 Silver 9012 +169 177 181 Pewter 9013 +204 125 81 Copper 9014 + 0 125 63 Emerald 9015 + 54 201 192 Aquamarine 9016 +137 243 214 Blue Topaz 9017 + 52 23 228 Sapphire 9018 +198 24 204 Amethyst 9019 +248 170 216 Rose Quartz 9020 +219 6 53 Ruby 9021 diff --git a/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Isacord Polyester.gpl b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Isacord Polyester.gpl new file mode 100644 index 00000000..a0e14c95 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Isacord Polyester.gpl @@ -0,0 +1,394 @@ +GIMP Palette +Name: Ink/Stitch: Isacord Polyester +Columns: 4 +# RGB Value Color Name Number +233 232 222 Ghost White 0003 +173 180 185 Ash Mist 0105 + 97 99 89 Navajo 0128 + 61 62 62 Smoky 0134 + 82 91 96 Heavy Storm 0138 +255 255 102 Sunbeam 0220 +252 243 141 Easter Dress 0230 +255 255 225 Buttercream 0270 +104 102 67 Olive Drab 0454 +127 123 108 Light Sage 0555 + 60 48 46 Very Dark Brown 0576 +189 166 109 Barewood 0643 +105 104 91 Armour 0674 +255 204 70 Orange Peel 0703 +179 133 51 Antique 0721 +203 160 91 Applesauce 0731 +222 190 105 Wheat 0741 +123 113 93 Dark Rattan 0763 +240 221 192 Candlewick 0781 +238 167 102 Passion Fruit 1030 +173 120 41 Bronze 1032 +209 162 97 Peru 1133 +249 139 67 Sunset Orange 1200 +127 77 44 Pony 1233 +229 90 0 Hunter Orange 1310 +210 94 30 Dark Orange 1321 +138 76 52 Dirty Penny 1322 +100 57 40 Coffee Bean 1344 +124 54 45 Apple Butter 1526 +124 76 70 Rusty Rose 1543 +216 44 48 Not Quite Red 1720 +235 93 112 Strawberries n' Cream 1753 + 49 46 47 Blackberry 1776 +234 0 0 Wildfire 1800 +118 35 72 Pomegranate 2211 +188 63 136 Hot Pink 2508 +243 137 178 Rose 2530 +219 107 161 Pretty In Pink 2532 + 90 94 97 Titanium 2564 + 69 43 102 Grape Jelly 2702 +101 7 101 Purple Passion 2704 +143 51 119 Peony 2723 +155 91 170 Frosted Orchid 2732 +169 145 156 Misty Rose 2762 + 62 63 65 Black Chrome 2776 + 81 79 99 Columbine 2864 + 49 36 50 Scrumptious Plum 2944 + 57 52 87 Concord Fog 2953 + 43 37 62 Aubergine 2954 +180 160 192 Amethyst 3030 +138 141 194 Dawn of Violet 3130 + 75 79 88 Slate Gray 3265 +101 108 116 Battleship Gray 3274 + 62 90 160 Forget Me Not 3332 +202 213 240 Lavender Whisper 3350 + 36 46 70 Midnight Blue 3363 + 79 109 161 Rich Blue 3410 +157 165 202 Lavendar 3450 + 0 0 255 Electric Blue 3510 +157 172 185 Summer Grey 3572 + 32 39 48 Darkest Blue 3574 +122 172 231 Sweet Boy 3630 + 76 113 160 Tufts Blue 3631 + 14 56 88 Royal Navy 3644 + 43 55 81 Prussian Blue 3645 + 58 82 108 Blue Shadow 3654 + 40 48 58 Space 3666 + 51 113 174 Cornflower Blue 3713 +153 198 240 Something Blue 3730 + 83 151 189 Surfs' Up 3830 + 99 118 131 Manatee 3852 +200 228 245 Hint of Blue 3963 + 89 100 104 Dimgray 4074 +128 181 189 Serenity 4152 +136 213 198 Aquamarine 4740 +133 171 167 Vintage Blue 4752 +147 206 200 Mystic Blue 4952 +129 223 149 Mint 5440 +166 216 177 Basic Seafoam 5450 + 0 164 90 Kelly 5515 +100 130 112 Garden Moss 5542 + 24 56 35 Enchanting Forest 5565 + 82 108 81 Asparagus 5743 +220 255 185 Chartreuse 5830 +156 189 84 Celery 5832 +190 231 110 Tamarack 6011 +218 224 86 Limelight 6031 +114 119 21 Yellowgreen 6043 +183 180 150 Old Lace 6071 +237 237 177 Lemongrass 6151 +255 255 250 Silky White 0010 +255 255 255 White 0015 +255 255 255 Paper White 0017 + 0 0 0 Black 0020 +255 255 245 Eggshell 0101 +153 153 153 Cobblestone 0108 +127 127 127 Whale 0111 +127 127 127 Leadville 0112 +204 204 185 Fieldstone 0124 +175 175 180 Smoke 0131 + 86 89 89 Dark Pewter 0132 +178 178 178 Sterling 0142 +214 214 216 Skylight 0145 +190 190 180 Mystik Grey 0150 +186 170 158 Cloud 0151 +140 135 125 Dolphin 0152 +214 211 214 Saturn Grey 0182 +224 209 198 Pearl 0184 +230 240 102 Light Brass 0221 +255 230 140 Seaweed 0232 +255 255 204 Lemon Frost 0250 +255 255 102 Yellow 0310 +255 230 0 Canary 0311 +165 153 51 Moss 0345 +230 240 130 Marsh 0352 +204 204 51 Tarnished Gold 0442 +188 173 117 Army Drab 0453 +114 132 112 Cypress 0463 +115 115 51 Umber 0465 +255 237 56 Sun 0501 +255 240 102 Yellow Bird 0506 +255 255 153 Daffodil 0520 +240 220 170 Champagne 0532 +204 185 0 Ochre 0542 +204 180 65 Ginger 0546 +204 180 135 Flax 0552 +255 255 0 Citrus 0600 +255 240 0 Daisy 0605 +255 220 0 Sunshine 0608 +255 250 153 Buttercup 0630 +255 240 204 Parchment 0640 +221 204 165 Cornsilk 0651 +255 250 204 Vanilla 0660 +255 255 240 Cream 0670 +225 204 180 Baquette 0672 +255 173 20 Bright Yellow 0700 +255 230 75 Papaya 0702 +245 240 102 Gold 0704 +255 240 130 Lemon 0713 +153 130 110 Khaki 0722 +140 120 50 Golden Brown 0747 +245 235 204 Oat 0761 +135 120 102 Sage 0776 +255 245 0 Goldenrod 0800 +255 204 0 Candlelight 0811 +240 204 51 Honey 0821 +230 204 110 Palomino 0822 +225 127 61 Liberty Gold 0824 +204 170 120 Sisal 0832 +240 190 130 Toffee 0842 +240 204 145 Old Gold 0851 +170 140 102 Pecan 0853 +221 204 165 Tantone 0861 +163 150 135 Wild Rice 0862 +255 250 230 Muslin 0870 +195 185 160 Stone 0873 +190 160 145 Gravel 0874 +216 140 2 Spanish Gold 0904 +175 117 5 Ashley Gold 0922 +188 109 10 Honey Gold 0931 +185 153 51 Nutmeg 0932 +153 102 51 Redwood 0933 +204 180 153 Fawn 0934 +204 153 51 Autumn Leaf 0940 +180 130 70 Golden Grain 0941 +140 110 70 Pine Park 0945 +255 255 230 Linen 0970 +153 102 51 Bark 1055 +255 230 185 Shrimp Pink 1060 +200 175 140 Taupe 1061 +255 170 51 Pumpkin 1102 +255 127 30 Orange 1106 +240 150 70 Clay 1114 +158 84 10 Copper 1115 +255 188 33 Sunset 1120 +193 168 117 Caramel Cream 1123 +140 89 51 Light Cocoa 1134 +225 220 175 Meringue 1140 +232 178 130 Tan 1141 +140 89 51 Penny 1154 +240 225 204 Ivory 1172 +255 190 102 Apricot 1220 +255 153 51 Tangerine 1300 +209 68 20 Paprika 1301 +255 125 0 Red Pepper 1304 +255 140 0 Fox Fire 1305 +249 89 81 Devil Red 1306 +240 140 75 Date 1311 +155 48 28 Burnt Orange 1312 +188 79 70 Harvest 1332 +204 102 51 Spice 1334 +163 38 56 Dark Rust 1335 +190 125 65 Rust 1342 +135 90 45 Cinnamon 1346 +255 195 153 Starfish 1351 +255 180 130 Salmon 1352 +153 102 51 Fox 1355 +255 215 165 Shrimp 1362 +110 51 0 Mahogany 1366 + 40 40 33 Dark Charcoal 1375 +255 165 125 Melon 1430 +155 48 28 Brick 1514 +226 61 40 Flamingo 1521 +255 185 170 Coral 1532 +102 89 76 Espresso 1565 +235 140 115 Spanish Tile 1600 +255 102 51 Red Berry 1701 +255 0 0 Poppy 1703 +232 17 45 Candy Apple 1704 +220 102 51 Terra Cotta 1725 +240 220 220 Hyacinth 1755 +245 204 175 Twine 1760 +255 220 210 Tea Rose 1761 +193 5 56 Strawberry 1805 +255 175 175 Corsage 1840 +255 245 240 Shell 1860 +130 114 99 Pewter 1874 +125 90 50 Chocolate 1876 +240 0 102 Geranium 1900 +204 0 0 Poinsettia 1902 +229 5 58 Lipstick 1903 +191 10 48 Cardinal 1904 +204 51 102 Tulip 1906 +170 0 51 Foliage Rose 1911 +175 0 75 Winterberry 1912 +204 51 0 Cherry 1913 +210 130 130 Blossom 1921 +255 0 147 Chrysanthemum 1940 +214 0 158 Tropical Pink 1950 +140 137 132 Silvery Grey 1972 +153 33 53 Fire Engine 2011 +140 38 51 Rio Red 2022 +220 180 180 Teaberry 2051 +168 12 53 Country Red 2101 +117 38 51 Cranberry 2113 +122 38 56 Beet Red 2115 +135 0 51 Bordeaux 2123 +255 153 170 Heather Pink 2152 +220 153 160 Dusty Mauve 2153 +255 204 204 Pink Tulip 2155 +250 220 220 Iced Pink 2160 +255 250 245 Chiffon 2170 +255 245 250 Blush 2171 +255 160 204 Tropicana 2220 +153 75 102 Burgundy 2222 +122 38 56 Claret 2224 +204 140 150 Mauve 2241 +255 204 215 Petal Pink 2250 +255 51 153 Bright Ruby 2300 +220 102 130 Raspberry 2320 +153 51 102 Wine 2333 + 81 45 68 Maroon 2336 +255 235 235 Carnation 2363 +185 80 130 Boysenberry 2500 +163 5 127 Plum 2504 +175 60 120 Cerise 2506 +255 204 180 Garden Rose 2520 +226 60 115 Fuchsia 2521 +255 170 220 Soft Pink 2550 +255 185 204 Azalea Pink 2560 +204 102 153 Dusty Grape 2600 +225 170 245 Frosted Plum 2640 +255 204 230 Impatiens 2650 +235 204 215 Aura 2655 +140 140 150 Steel 2674 +153 0 125 Dark Current 2711 +153 0 153 Pansy 2715 +183 114 142 Violet 2764 +204 102 204 Orchid 2810 +204 140 204 Wild Iris 2830 + 89 17 142 Deep Purple 2900 +142 71 173 Iris Blue 2905 +170 114 191 Grape 2910 +137 119 186 Purple 2920 +235 204 245 Lavender 3040 +230 190 220 Cachet 3045 + 75 0 153 Provence 3102 +120 51 153 Dark Ink 3110 + 68 35 89 Purple Twist 3114 +105 89 205 Blueberry 3210 + 98 74 147 Twilight 3211 +210 170 210 Amethyst Frost 3241 +168 147 173 Haze 3251 + 80 0 120 Delft 3323 +175 170 255 Cadet Blue 3331 + 30 28 119 Fire Blue 3333 + 0 56 147 Flag Blue 3335 + 12 56 68 Midnight 3344 + 0 0 125 Light Midnight 3353 + 0 0 102 Dark Indigo 3355 + 80 90 102 Concord 3444 + 45 51 142 Blue 3522 +102 0 102 Heraldic 3536 +153 0 204 Venetian Blue 3541 + 51 0 204 Royal Blue 3543 + 0 56 147 Sapphire 3544 + 2 40 58 Navy 3554 +102 102 204 Nordic Blue 3600 +125 102 255 Blue Ribbon 3611 + 45 51 142 Starlight Blue 3612 + 48 68 181 Imperial Blue 3622 +153 186 221 Lake Blue 3640 +170 180 215 Wedgewood 3641 +240 245 250 Ice Cap 3650 +147 183 209 Baby Blue 3652 + 0 51 76 Slate Blue 3732 + 80 102 125 Harbor 3743 +183 204 219 Winter Frost 3750 +240 250 255 Winter Sky 3761 +214 216 211 Oyster 3770 +120 153 190 Laguna 3810 + 0 142 214 Reef Blue 3815 +150 190 230 Celestial 3820 +235 250 255 Oxford 3840 +120 130 140 Copenhagen 3842 + 0 127 204 Cerulean 3900 + 51 153 204 Tropical Blue 3901 + 0 91 191 Colonial Blue 3902 +153 204 240 Crystal Blue 3910 +180 200 225 Azure Blue 3951 +125 125 140 Ocean Blue 3953 +204 225 245 River Mist 3962 +204 204 204 Silver 3971 + 0 190 204 Caribbean Blue 4010 +102 153 175 Teal 4032 +245 245 250 Glacier Green 4071 +155 153 147 Metal 4073 + 0 165 180 Wave Blue 4101 + 0 163 209 California Blue 4103 + 0 235 255 Turquoise 4111 +120 190 204 Alexis Blue 4113 + 0 109 117 Dark Teal 4116 + 51 102 115 Deep Ocean 4133 + 85 85 85 Charcoal 4174 + 0 204 204 Island Green 4220 +175 255 255 Aqua 4230 +204 255 255 Spearmint 4240 +220 255 250 Snomoon 4250 + 0 160 186 Aqua Velva 4410 + 51 180 190 Light Mallard 4421 + 0 155 170 Marine Aqua 4423 +153 240 220 Island Waters 4430 + 51 102 102 Spruce 4515 + 51 153 153 Caribbean 4531 + 47 185 165 Deep Aqua 4610 + 51 204 180 Jade 4620 + 0 89 81 Seagreen 4625 + 75 120 125 Amazon 4643 +102 130 115 Mallard 4644 + 0 96 86 Rain Forest 5005 + 0 153 135 Scotty Green 5010 +220 255 230 Luster 5050 + 0 165 120 Green 5100 + 51 175 153 Dark Jade 5101 + 51 204 165 Baccarat Green 5115 + 51 204 153 Trellis Green 5210 +160 204 180 Silver Sage 5220 +153 240 204 Bottle Green 5230 + 38 102 89 Field Green 5233 + 2 73 48 Bright Green 5324 + 0 115 80 Evergreen 5326 + 0 73 63 Swamp 5335 + 0 60 20 Forest Green 5374 + 0 135 81 Shamrock 5411 + 0 122 61 Irish Green 5415 + 60 175 120 Swiss Ivy 5422 + 28 206 40 Limedrop 5500 + 51 158 53 Emerald 5510 + 0 158 15 Ming 5513 +153 204 102 Pear 5531 +158 170 153 Palm Leaf 5552 + 35 79 51 Deep Green 5555 +180 240 130 Bright Mint 5610 + 0 183 96 Light Kelly 5613 +102 153 51 Lime 5633 + 33 91 51 Green Dust 5643 +225 255 204 Spring Frost 5650 +119 145 130 Willow 5664 +175 204 130 Kiwi 5822 +153 190 51 Limabean 5833 + 90 60 0 Herb Green 5866 +158 196 0 Erin Green 5912 +140 160 90 Grasshopper 5933 +153 153 51 Moss Green 5934 +217 255 66 Sour Apple neon 5940 + 80 110 51 Backyard Green 5944 +255 255 63 Mountain Dew neon 6010 +225 255 153 Jalapeno 6051 +153 153 45 Caper 6133 +115 102 40 Olive 6156 diff --git a/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Isafil Rayon.gpl b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Isafil Rayon.gpl new file mode 100644 index 00000000..5e82a6d8 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Isafil Rayon.gpl @@ -0,0 +1,290 @@ +GIMP Palette +Name: Ink/Stitch: Isafil Rayon +Columns: 4 +# RGB Value Color Name Number +255 255 250 White 0010 +255 255 255 White 0015 + 0 0 0 Black 0020 +255 255 236 Ivory White 0270 +255 255 205 Pale Lemon 0505 +249 243 105 Pale Yellow 0580 +255 238 67 Lemon 0590 +255 224 61 Yellow 0600 +255 238 52 Canary Yellow 0605 +255 203 37 Buttercup 0610 +250 215 37 Canary 0713 +255 255 201 Pale Lemon 0260 +255 255 233 Ivory White 0510 +255 255 203 Pale Lemon 0520 +255 249 111 Pale Yellow 0620 +254 227 87 Star Gold 0615 +252 250 107 Pale Yellow 0625 +221 224 87 Pale Yellow 0221 +219 203 44 Pale Beige 0542 +201 184 44 Medium Yellow 0545 +168 154 51 Medium Green / Yellow 0726 +255 255 217 Ivory White 0660 +249 226 81 Star Gold 0640 +255 240 137 Pale Yellow 0630 +255 215 56 Yellow 0506 +242 155 57 Gold / Orange 0702 +212 173 37 Medium Yellow 0704 +255 212 42 Buttercup 0805 +249 172 27 Light Orange 0800 +226 175 35 Mustard Yellow 0811 +217 149 23 Goldenrod 0821 +255 247 201 Pale Lemon 0635 +255 226 123 Sunshine 0830 +255 168 56 Gold / Orange 0900 +255 152 60 Orange 1100 +187 142 37 Gold 0940 +255 168 30 Mango 1101 +255 140 35 Soleil 1099 +252 121 28 Soleil 1300 +255 225 138 Wheat 1060 +255 220 177 Alesan 1362 +185 81 62 Bronze 1113 +201 116 89 Brown 1211 +255 112 28 Fluo Orange 1320 +253 71 0 Sunkist 1304 +253 79 0 Sunkist 1305 +217 74 9 Orange 1302 +255 240 215 Eggshell 2180 +255 181 125 Peach 1351 +250 133 58 Medium Orange 1430 +215 114 95 Crabapple 1421 +169 65 43 Dark Orange / Brown 1905 +255 166 92 Chamois 1352 +185 70 55 Dark Orange / Brown 1313 +192 109 87 Saffron 1311 +149 74 53 Medium Brown 1324 +131 70 63 Dark Brown 1348 +255 245 238 Star White 2165 +255 236 228 Star White 1870 +255 229 205 Bone 1630 +255 198 188 Strawberry Cream 1850 +241 135 130 Shell Pink 1849 +227 116 79 Copper 1600 +232 51 0 Orange / Red 1701 +235 79 25 Golden Glory 1705 +255 56 33 Paprika 1703 +226 53 39 Honeysuckle 1800 +191 30 30 Red 1902 +231 81 88 Medium Red / Orange 1802 +196 63 79 Dark Salmon Pink 1805 +205 50 76 Dark Salmon Pink 1900 +160 56 51 Terra Cotta 1913 +150 51 49 Dark Orange / Red 2100 +159 74 64 Dark Red / Orange 1914 +145 53 56 Dark Orange / Red 2123 +238 187 180 Peach Skin 2170 +238 229 229 Oyster 2168 +240 215 212 Light Pink 1860 +255 219 222 Delicate Mauve 1855 +236 152 152 Light Orange 1840 +220 117 120 Tea Rose 1750 +185 97 105 Baroque Rose 1921 +145 53 61 Dark Rust Red 1912 +219 201 191 Heather 1761 +193 149 144 Deauville Mauve 2053 +134 69 74 Dark Brown 1842 +168 128 138 Light Purple 2051 +231 210 216 Orchid Ice 2360 +228 200 205 Medium Pink 1960 +205 138 156 Cashmere Rose 2152 +178 108 122 Heather Rose 2241 +139 74 94 Dark Brown 2332 +107 54 73 Dark Purple 2333 +255 224 224 Rosewater 2250 +255 180 204 Pink 2230 +255 145 183 Pale Pink 2220 +217 52 101 Shocking Pink 2300 +255 198 229 Orchid Pink 2555 +237 106 146 Light Cerise 2520 +231 70 127 Azalea 2310 +241 147 174 Medium Pink 2550 +147 115 153 Purple Haze 2524 +189 84 116 Dark Pink 2513 +166 58 109 Medium Purple 2505 +169 85 117 Dusky Pink 2500 + 95 30 37 Dark Maroon 2502 +231 201 198 Medium Pink 2650 +243 192 233 Pale Pink 2640 +229 161 203 Light Pink 2620 +154 85 119 Medium Berry 2600 +123 58 100 Medium Purple 2611 +250 219 238 Oyster 2645 +233 194 229 Light Pink 3045 +185 143 195 Lavender 2830 +143 93 143 Medium Purple 2810 + 71 0 51 Dark Maroon 2715 +199 168 248 Tulip 3040 +201 121 196 Purple 2820 +147 84 152 Violet 2712 +149 123 188 Pale Purple 3213 +100 72 134 Purple 3103 +208 197 220 Pale Lilac 3262 +189 176 207 Pastel Lilac 3241 +183 191 229 Pale Lilac 3340 +149 138 192 Violet Tulip 3230 +108 110 191 Violet 3200 +100 83 170 Violet 3540 + 78 57 114 Dark Purple 3110 + 44 13 63 Dark Purple 2743 +229 233 249 White 3661 +215 229 255 White 3845 +129 147 189 Blue 3430 +123 146 215 Medium Purple 3321 +163 164 201 Pale Lilac 3420 +105 98 165 Bright Iris 3301 + 68 55 133 Purple 3330 + 83 78 153 Medium Purple 3102 + 91 73 127 Imperial Purple 3211 + 76 66 111 Petrol Blue 3222 + 70 45 79 Blackberry 3313 +186 209 241 Ice Blue 3761 +116 140 193 Medium Purple 3631 + 70 82 144 Purple 3611 + 74 85 151 Purple 3543 + 75 81 133 Grey / Blue 3322 + 61 50 88 Concord 3353 + 0 7 79 Navy Blue 3355 +236 240 239 White 4071 +195 206 214 Pastel Blue 3752 +175 198 214 Light Blue / Green 3840 +143 176 207 Light Blue 3820 +110 129 169 Slate Blue 3810 + 86 102 172 Soldier Blue 3600 +192 223 239 Cadet Blue 3961 +171 233 255 Powder Blue 3910 + 20 161 255 Mid Windsor 3901 + 77 166 212 Light Blue 4030 + 72 180 229 Light Blue 4105 +104 121 144 Smoke Blue 4032 + 60 86 99 Dark Blue / Green 4133 +171 194 219 Lake Blue 3851 +126 143 170 Faded Denim 3952 +100 222 131 Pale Green 3743 + 84 79 108 Steel 3443 + 59 45 56 Dark Maroon 3344 +141 167 171 Chicory 4040 + 89 166 175 Bright Blue 4121 + 39 159 166 Grizzly Turquoise 4111 + 28 105 125 Medium Blue 4100 + 29 60 80 Dark Blue 3822 + 24 83 106 Dark Blue 4232 + 44 55 56 Dark Green / Blue 4022 +138 205 198 Tropical Wave 4440 + 93 173 177 Bright Blue 4231 + 44 84 86 Dark Bottle Green 4500 + 54 69 78 Dark Navy 4432 +116 171 174 Light Clear Blue 4430 +101 169 179 Aqua 4420 + 80 125 146 Slate Grey 4421 + 56 117 126 Medium Green / Blue 4400 + 88 107 111 Gobelin Blue 4643 + 58 86 82 Enchanted Sea 4644 + 48 63 46 Dark Green 4516 +245 252 251 White 5040 +173 206 198 Aqualine 4250 +152 217 199 Pale Mint Green 4840 + 92 169 163 Porcelain 4620 + 97 150 147 Teal 4610 + 77 130 131 Bristol Blue 4513 +180 226 203 Mint 5050 +126 217 185 Pale Green 5020 + 30 175 116 Pale Jade 5111 + 37 156 114 Gotcha Green 5000 +121 212 161 Seafoam 5240 +145 203 166 Ocean Wave 5230 + 95 203 119 Neon Green 5210 + 77 180 91 Medium Green 5431 +184 229 187 Mint 5460 +109 145 112 Shale Green 5542 + 55 98 81 Dark Jade Green 5255 + 42 63 51 Dark Green / Blue 5375 +194 254 168 Dark Olive Green 5470 + 60 189 65 Harvest Green 5620 + 2 154 58 Vibrant Green 5515 + 11 124 42 Green 5422 + 2 102 39 Green 5425 + 0 88 39 Green 5326 +121 196 58 Medium Green 5611 + 98 203 58 Green 5600 +205 255 135 Brilliant Lime 5650 +191 240 109 Sharp Green 5840 +175 238 116 Lime 5610 +152 210 98 Lime 5531 + 84 138 62 Moss Green 5633 +187 229 121 Lime 6051 +161 224 91 Spruce 5832 +117 154 49 Green / Yellow 5833 + 79 140 25 Meadow 5933 + 72 126 37 Green 5934 +255 244 214 Eggshell 0970 +253 248 188 Pale Yellow 0251 +221 215 133 Charlock 0232 +173 184 84 Lime 0442 +150 161 74 Pistachio 0345 +232 241 170 Bright Yellow 0241 +191 193 116 Leek Green 0352 +170 166 63 Pistachio 6133 +128 109 80 Medium Brown 0465 + 93 85 67 Dark Grey / Green 6156 +210 229 177 Lime Cream 6071 +167 165 125 Sage Green 0453 +139 147 89 Medium Olive Green 0454 + 88 100 46 Pale Green 6065 + 37 84 49 Dark Green 5765 + 53 98 56 Lime 5944 + 58 93 53 Dark Green 5766 + 58 74 42 Olive 5776 +221 201 165 Pale Peach 0761 +215 191 133 Cocoon 0532 +240 199 115 Pale Yellow 0822 +169 124 63 Gold / Yellow 0551 +102 93 30 Dark Green / Yellow 0936 + 79 79 46 Green / Yellow 0747 +231 201 155 Maize 0851 +172 129 81 Gold 0842 +255 250 227 Ivory White 0961 +231 202 157 Maize 1140 +255 212 177 Alesan 1361 +230 166 112 Apricot Nectar 1041 +174 110 58 Cocoa Brown 0932 +137 91 50 Light Cocoa 0933 +145 93 60 Unaka Sand 1342 +130 88 62 Dark Brown 1355 +105 74 51 Clayrust 1346 + 84 58 30 Brown 1376 +255 255 245 White 0670 +255 255 240 White 0870 +252 225 190 Almond Oil 1172 +170 139 109 Camel 0853 +120 95 74 Bagby Green 0945 + 74 58 42 Dark Brown 0866 +181 148 139 Woodrose 1061 +121 81 53 Mushroom 1055 + 70 46 28 Dark Brown 1876 + 51 37 21 Dark Brown 1366 + 55 41 35 Dark Brown 1276 +207 195 180 Stainless Steel 0672 +198 186 165 Sand 0873 +161 160 134 Pale Green / Grey 0732 + 94 76 62 Dark Grey / Green 1573 +205 205 205 Medium Silver 0109 +240 240 225 Natural White 0150 +212 213 205 Lilac Hint 3971 +216 218 215 Natural 0124 +212 213 205 Lilac Hint 0142 +193 189 195 Vapor Blue 0104 +220 227 235 Cream 0145 +183 182 183 Light Grey / Green 0156 +181 181 181 Light Grey / Green 1972 +149 164 153 Jadeite 0141 +117 122 133 Medium Grey 0108 +130 120 135 Gray Ridge 0152 + 84 97 94 Dark Gray 0111 +149 145 142 GS Gray 0107 +124 120 122 Medium Grey 2675 + 86 85 86 Dark Grey 4175 diff --git a/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Isalon Polyester.gpl b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Isalon Polyester.gpl new file mode 100644 index 00000000..5374bba2 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Isalon Polyester.gpl @@ -0,0 +1,418 @@ +GIMP Palette +Name: Ink/Stitch: Isalon Polyester +Columns: 4 +# RGB Value Color Name Number +247 240 232 Star White 0005 +250 237 222 Gardenia 0010 +245 232 217 Bridal Blush 0015 +237 232 222 Lily White 0017 +242 237 181 Tender Yellow 0250 +245 237 128 Limelight 0300 +232 219 82 Aurora 0320 +245 224 59 Buttercup 0600 +232 219 82 Aurora 0500 +245 224 59 Buttercup 0605 +235 212 64 Maize 0603 +240 219 105 Yellow Cream 0304 +237 204 82 Primrose Yellow 0620 +237 204 82 Primrose Yellow 0602 +235 212 64 Maize 0608 +235 212 64 Maize 0311 +235 235 199 Sylvan Green 0460 +245 230 168 French Vanilla 0520 +240 219 105 Yellow Cream 0523 +247 222 115 Snapdragon 0713 +232 196 115 Cornsilk 0507 +245 230 168 French Vanilla 0360 +237 204 82 Primrose Yellow 0502 +250 194 69 Daffodil 0503 +247 201 102 Sunset Gold 0801 +232 196 115 Cornsilk 0711 +247 186 84 Amber Yellow 0701 +224 181 79 Yolk Yellow 0704 +235 176 77 Amber 0705 +237 186 97 Golden Cream 0810 +227 204 145 Straw 0742 +217 194 125 Jojoba 0741 +222 181 102 Ochre 0514 +204 153 89 Oak Buff 0821 +219 168 117 Clay 0632 +240 227 184 Rutabaga 0660 +227 204 128 Dusky Citron 0640 +237 186 97 Golden Cream 0714 +219 163 64 Artisan Gold 0802 +252 143 79 Tangerine 0912 +252 171 71 Marigold 0911 +240 196 79 Mimosa 0902 +250 201 161 Almond Cream 1350 +247 140 97 Melon 1103 +235 120 92 Coral 1330 +217 122 51 Amberglow 1305 +245 214 181 Nude 1570 +250 194 148 Beach Sand 1040 +235 153 92 Muskmelon 1105 +227 135 84 Dusty Orange 1303 +230 112 61 Coral Rose 1307 +232 112 74 Flamingo 1302 +217 194 148 Marzipan 0981 +217 194 148 Marzipan 0950 +242 194 140 Apricot Cream 1030 +252 143 79 Tangerine 1200 +235 153 92 Muskmelon 1110 +240 140 79 Autumn Sunset 1102 +212 125 89 Carnelian 1321 +209 135 87 Coral Gold 1221 +209 130 102 Tawny Orange 1332 +179 99 89 Dusty Cedar 1335 +173 92 74 Redwood 1334 +247 161 140 Peach Amber 1849 +214 94 84 Deep Sea Coral 1510 +186 79 79 Cranberry 1702 +184 71 77 Chrysanthemum 1704 +186 79 79 Cranberry 1800 +184 71 77 Chrysanthemum 1706 +168 79 79 Garnet Rose 1902 +168 79 79 Garnet Rose 2102 +143 69 74 Earth Red 2100 +143 71 84 Dry Rose 1912 +125 79 84 Crushed Berry 2323 +143 71 84 Dry Rose 1724 +143 71 84 Dry Rose 2103 +143 69 74 Earth Red 1911 +184 71 77 Chrysanthemum 2101 +199 77 89 Claret Red 1900 +143 71 84 Dry Rose 2012 +158 84 74 Marsala 2011 +133 74 69 Pompeii 2132 +130 77 74 Roan Rouge 2113 +140 89 94 Renaissance Rose 2222 +240 212 179 Dawn 0961 +224 207 176 Creme Brulee 1571 +217 181 153 Toasted Almond 1260 +194 140 122 Cameo Brown 1451 +186 133 122 Ash Rose 1842 +133 84 99 Tulipwood 2224 +140 89 94 Renaissance Rose 2114 +230 150 135 Lobster Bisque 1540 +232 204 176 Cream Tan 1560 +245 224 207 Dew 1460 +235 219 209 Paster Parchment 2165 +227 179 176 Coral Blush 2340 +227 153 161 Sea Pink 2152 +173 107 117 Heather Rose 2231 +133 84 99 Tulipwood 2333 +115 89 92 Flint 2326 +196 163 171 Red Lilac 2762 +166 117 117 Nostalgia Rose 2164 +133 84 99 Tulipwood 2322 +125 84 102 Berry Conserve 2325 +115 89 92 Flint 2336 +255 212 214 Blushing Bride 1961 +237 204 201 Chalk Pink 2250 +245 191 194 Almond Blossom 2155 +247 191 194 Orchid Pink 2350 +237 133 148 Morning Glory 1941 +209 74 99 Honeysuckle 2130 +168 77 87 Holly Berry 1920 +209 74 99 Honeysuckle 2120 +235 122 135 Bubblegum 1930 +240 194 199 Pink Mist 2555 +237 181 199 Lilac Sachet 2550 +209 120 140 Chateau Rose 2220 +199 77 89 Claret Red 2303 +186 66 94 Carmine 2301 +166 89 102 Rose Wine 2211 +240 222 212 Mauve Morn 2360 +230 204 201 Pale Lilac 2363 +237 181 199 Lilac Sachet 2560 +242 122 150 Pink Carnation 2520 +204 79 110 Pink Flambe 2305 +166 84 120 Meadow Mauve 2723 +227 199 209 Lilac Snow 2740 +214 171 201 Orchid Bouquet 2731 +196 125 171 Violet 2732 +125 77 120 Bright Violet 2704 +125 84 102 Berry Conserve 2633 +135 97 120 Chinese Violet 2700 +171 138 166 Regal Orchid 2830 +194 176 199 Orchid Petal 2940 +189 171 204 Lavender 3030 +143 115 166 Paisley Purple 3213 +112 87 110 Grayish Purple 2702 +191 176 204 Pastel Lilac 3152 +189 171 204 Lavender 3140 +110 97 148 Corsican Blue 3120 +102 82 135 Ultra Violet 3122 +191 184 209 Purple Heather 3450 +166 153 173 Wisteria 3241 +117 105 120 Purple Sage 2864 +105 89 110 Mulled Grape 2954 +112 92 110 Montana Grape 2733 +110 99 117 Cadet 2953 +143 138 176 Persian Violet 3230 +102 117 171 Wedgewood 3320 + 71 74 115 Skipper Blue 3102 + 87 97 125 Coastal Fjord 3353 +143 156 191 Lavender Lustre 3420 +143 156 191 Lavender Lustre 3430 +148 156 201 Easter Egg 3351 +120 135 194 Persian Jewel 3321 + 87 89 135 Purple Mountain 3302 + 87 89 135 Purple Mountain 3524 +102 107 171 Baja Blue 3512 + 94 117 158 Riviera 3600 +163 184 209 Powder Blue 3640 +115 138 179 Allure 3410 +102 117 171 Wedgewood 3611 + 97 97 163 Violet Storm 3543 + 97 97 163 Violet Storm 3300 + 87 97 125 Coastal Fjord 3323 +110 99 117 Cadet 3645 + 79 84 102 Nightshadow Blue 3363 + 89 84 87 Rabbit 3755 +189 199 201 Ballad Blue 3845 +156 184 212 Cerulean 3530 +105 135 179 Silver Lake Blue 3631 + 92 135 199 Marina 3713 + 69 112 163 Blueball 3311 + 82 102 148 Dutch Blue 3734 +122 153 184 Dusk Blue 3841 +179 189 196 Celestial Blue 3951 +143 176 191 Forget-Me-Not 3742 +125 143 163 Faded Denim 3952 + 82 102 148 Dutch Blue 3411 + 87 97 125 Coastal Fjord 3736 + 79 84 102 Nightshadow Blue 3346 + 79 84 102 Nightshadow Blue 3554 + 79 84 102 Nightshadow Blue 3364 +102 92 92 Plum Kitten 3574 +179 189 196 Celestial Blue 3750 +143 176 191 Forget-Me-Not 3851 + 84 110 138 Captains Blue 3833 + 79 84 102 Nightshadow Blue 4055 + 94 84 74 Major Brown 3775 +222 222 217 Barely Blue 3571 +209 212 214 Illusion Blue 3650 +186 201 209 Baby Blue 3761 +163 184 212 Blue Bell 3820 + 79 138 194 Azure Blue 3715 +115 138 179 Allure 3810 + 87 120 166 Parisian Blue 3621 + 79 99 130 Moonlight Blue 3743 +105 107 120 Folkstone Gray 3444 +186 201 209 Baby Blue 3840 +148 199 214 Moderate Blue 3721 +120 163 214 Little Boy Blue 3720 + 69 112 163 Bluebell 3801 + 84 92 163 Amparo Blue 3510 +209 212 214 Illusion Blue 3860 +173 207 212 Blue Glow 3961 +171 204 217 Crystal Blue 4130 +125 176 201 Air Blue 3910 +112 176 207 Blue Grotto 3903 + 51 140 194 Blithe 3901 + 51 140 194 Blithe 3905 +204 224 217 Blue Glass 4040 +148 199 214 Moderate Blue 4120 + 99 191 212 Bachelor Button 4112 + 79 173 196 River Blue 4123 + 64 166 191 Horizon Blue 4102 + 64 125 143 Larkspur 4126 + 64 125 143 Larkspur 4200 + 97 135 156 Niagara 4000 + 84 99 120 China Blue 4143 +222 222 217 Barely Blue 5040 +209 212 214 Illusion Blue 4250 +176 209 212 Light Blue 4740 +110 184 176 Pool Blue 4310 + 89 158 163 Porcelain 4710 + 89 158 163 Porcelain 4520 + 20 122 140 Pagoda Blue 4502 + 74 125 112 Deep Sea 4822 + 46 156 161 Baltic 4712 + 69 166 153 Bright Aqua 5110 + 64 158 130 Marine Green 5122 + 84 133 97 Deep Grass Green 5100 +230 232 217 Ice 4860 +201 209 189 Almost Aqua 5060 +105 153 130 Feldspar 5542 + 99 117 115 Trooper 5665 + 87 99 97 Balsam Green 5365 + 87 99 97 Balsam Green 5575 + 99 115 125 Blue Mirage 4844 +199 222 209 Opal Blue 4850 +212 219 209 Sprout Green 4160 +156 166 163 Quarry 4462 +117 138 148 Cadet Gray 4463 + 99 117 115 Trooper 4776 + 92 105 107 Gobelin Blue 5255 + 87 99 97 Balsam Green 5374 +107 112 107 Sedona Sage 5755 +140 153 140 Green Milieu 5663 +148 163 150 Jadeite 5552 +145 143 128 Rock Ridge 0674 +148 135 120 Moon Rock 0274 +168 153 140 Atmosphere 0555 +186 173 158 Feather Gray 0873 +207 217 173 Seafoam Green 5650 +161 196 120 Jade Lime 5840 +181 209 130 Sap Green 5830 +115 186 97 Bud Green 5600 + 84 168 89 Vibrant Green 5511 + 87 186 97 Poison Green 5502 + 51 158 92 Kelly Green 5503 + 61 163 117 Ming Green 5522 + 61 163 117 Ming Green 5505 + 61 163 117 Ming Green 5515 + 84 133 97 Deep Grass Green 5422 + 79 110 105 Sagebrush Green 5536 + 84 97 89 Dark Forest 5336 +163 201 92 Bright Lime Green 5912 +196 217 99 Wild Lime 6021 +194 207 148 Lily Green 6051 +161 196 120 Jade Lime 5610 +120 168 105 Green Tea 5531 + 94 143 79 Fluorite Green 5513 + 74 105 84 Myrtle 5326 + 74 105 84 Myrtle 5335 +194 207 173 Seacrest 6061 +179 191 130 Nile 5822 +153 173 99 Leaf Green 5832 +115 150 99 Jade Green 5722 + 89 117 99 Dark Ivy 5643 +102 115 102 Laurel Wreath 5746 + 84 97 89 Dark Forest 5865 + 87 99 97 Balsam Green 5576 + 99 107 79 Loden Green 5735 +128 153 71 Spinach Green 6043 +125 145 94 Epsom 5833 + 94 128 89 English Ivy 5933 + 84 97 89 Dark Forest 5765 + 79 99 87 Duck Green 5554 +128 145 125 Green Bay 5743 +204 199 158 Green Haze 6071 +168 166 125 Sage Green 0453 +148 135 107 Coriander 0454 +125 110 94 Walnut 0265 +125 117 92 Covert Green 0544 +115 110 107 Charcoal Gray 0464 +214 201 92 Acacia 0221 +199 186 125 Dried Moss 0313 +199 186 125 Dried Moss 0352 +138 138 97 Boa 6133 + 97 97 97 Pewter 0366 +112 107 94 Bungee Cord 0356 + 97 92 89 Dark Gull Gray 5776 +107 112 107 Sedona Sage 5876 + 92 92 89 Gunmetal 5866 +125 120 102 Vertiver Green 0266 +145 143 128 Rock Ridge 0128 +224 230 207 Water Lily 0370 +214 199 171 Wood Ash 0372 +194 171 133 Candied Ginger 0652 +148 128 82 Antique Bronze 0726 +196 176 135 Drab Gray 0552 +209 186 130 Cocoon 0532 +232 217 191 Seedpearl 1370 +222 209 166 Light Chartreuse 0571 +224 179 130 Desert Mist 0740 +173 140 92 Apple Cinnamon 0941 +227 153 92 Apricot Tan 0913 +227 191 135 Desert Dust 0851 +209 161 122 Toast 0921 +191 158 115 Tan 1133 +184 143 110 Macaroon 1132 +168 122 97 Mocha Mousse 1032 +140 97 87 Cognac 0933 +140 97 87 Cognac 1244 +143 94 77 Russet 1326 +140 97 87 Cognac 1342 +184 122 87 Sunburn 1115 +186 158 130 Nouget 1123 +176 143 112 Praline 1142 +130 92 82 Nutmeg 1354 +125 92 89 Rose Taupe 1746 +135 120 105 Pine Bark 1054 +148 120 110 Antler 1243 +153 128 110 Ginger Snap 0953 +181 163 133 Nomad 1061 +148 120 110 Antler 1453 +138 112 112 Twilight Mauve 1844 +235 237 224 Summer Shower 0003 +237 232 222 Lily White 0190 +227 219 196 White Asparagus 0780 +222 214 194 Bone White 1071 +209 199 179 Oatmeal 0872 +201 191 171 Peyote 0861 +247 237 219 Whisper White 1171 +214 194 166 Shifting Sand 0581 +186 158 130 Nouget 0934 +179 150 125 Natural 0853 +166 143 115 Chanterelle 0753 +133 120 102 Fossil 0945 + 89 84 87 Rabbit 1566 +102 89 89 Sparrow 1164 +184 184 166 Agate Gray 0573 +196 191 171 Overcast 0172 +179 171 148 Spray Green 1062 +168 153 138 Cobblestone 0973 +166 153 140 Goat 0874 +138 130 122 Steeple Gray 1374 +120 94 87 Deep Taupe 0576 +227 219 196 White Asparagus 0870 +214 207 181 Fog 1270 +199 191 176 Gray Morn 0170 +153 145 122 Seneca Rock 0763 +143 130 115 Fungi 0864 +120 107 97 Iron 1573 +102 92 92 Plum Kitten 1186 +115 110 107 Charcoal Gray 0575 +143 130 125 Cinder 0776 +143 130 125 Cinder 0732 +102 89 89 Sparrow 1366 +181 181 179 Storm Gray 0123 +204 209 201 Dawn Blue 0150 +217 222 212 Zephyr Blue 4070 +209 209 199 Foggy Dew 3570 +201 196 181 Moonstruck 0174 +201 196 181 Moonstruck 0160 +140 138 135 Wild Dove 0153 +138 133 133 Frost Gray 0140 +107 102 107 Excalibur 2776 +125 110 94 Walnut 0134 +212 219 209 Sprout Green 4071 +173 184 186 Pearl Blue 4072 +138 158 161 Arona 3853 +207 201 196 Glacier Gray 0145 +171 173 166 Blue Gray 0109 +133 138 135 Monument 4074 + 89 84 87 Rabbit 4175 +105 107 107 Steel Gray 3265 +138 133 133 Frost Gray 0112 +171 163 161 Gull Gray 2673 +204 209 201 Dawn Blue 4171 +189 199 189 Smoke 3971 +181 181 179 Storm Gray 0142 +143 145 140 Griffin 4362 +156 166 163 Quarry 0156 +156 166 163 Quarry 0131 +171 163 161 Gull Gray 1972 +143 145 140 Griffin 0129 +128 128 122 Moon Mist 2564 + 99 99 99 Castlerock 2775 +110 99 102 Shark 3475 +214 217 209 Blue Blush 3760 +189 199 189 Smoke 0163 +156 158 153 Limestone 3974 +179 181 176 Highrise 0106 +145 138 135 Gull 3274 +133 138 135 Monument 3263 +143 158 171 Chicory 3452 +102 92 92 Plum Kitten 3666 +102 92 92 Plum Kitten 3476 + 0 0 0 Black 0020 +135 204 181 Pale Aqua Green 5500 +252 158 156 Flamingo Pink 1306 +242 143 120 Burnt Coral 1501 +250 171 186 Prism Pink 1940 +235 122 135 Bubblegum 1950 diff --git a/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Janome.gpl b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Janome.gpl new file mode 100644 index 00000000..44113b29 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Janome.gpl @@ -0,0 +1,82 @@ +GIMP Palette +Name: Ink/Stitch: Janome +Columns: 4 +# RGB Value Color Name Number +240 240 240 White 001 + 0 0 0 Black 002 +228 195 93 Gold 003 +246 105 160 Pink 201 +255 0 0 Red 225 +255 102 0 Orange 203 +255 255 23 Yellow 204 + 72 26 5 Dark Brown 205 + 35 115 54 Green 226 + 11 47 132 Blue 207 +171 90 150 Purple 208 +172 156 199 Pale Violet 209 +253 245 181 Pale Yellow 210 +249 153 183 Pale Pink 211 +250 179 129 Peach 212 +215 189 164 Beige 213 +156 100 69 Brown 214 +151 5 51 Wine Red 215 +160 184 204 Pale Sky 216 +101 194 200 Sky 217 +127 194 28 Yellow Green 218 + 47 89 51 Olive Green 219 +229 229 229 Silver Gray 220 +136 155 155 Gray 221 +152 214 189 Pale Aqua 227 +178 225 227 Baby Blue 228 +152 243 254 Powder Blue 229 +112 169 226 Bright Blue 230 + 29 84 120 Slate Blue 231 + 7 22 80 Navy Blue 232 +255 187 187 Salmon Pink 233 +255 96 72 Coral 234 +255 90 39 Burnt Orange 235 +226 161 136 Cinnamon 236 +181 148 116 Umber 237 +245 219 139 Blond 238 +255 204 0 Sunflower 239 +255 189 227 Orchid Pink 240 +195 0 126 Peony Purple 241 +168 0 67 Burgundy 242 + 84 5 113 Royal Purple 243 +255 9 39 Cardinal Red 244 +198 238 203 Opal Green 245 + 96 133 65 Moss Green 246 + 96 148 24 Meadow Green 247 + 6 72 13 Dark Green 248 + 91 210 181 Aquamarine 249 + 76 181 143 Emerald Green 250 + 4 145 123 Peacock Green 251 + 89 91 97 Dark Gray 252 +255 255 220 Ivory White 253 +255 71 32 Vermilion 202 + 0 181 82 Bright Green 206 + 2 87 181 Ocean Blue 222 +208 186 176 Beige Gray 223 +227 190 129 Bamboo 224 +230 101 30 Hazel 254 +230 150 90 Toast 255 +240 156 150 Salmon 256 +167 108 61 Cocoa Brown 257 +180 90 48 Sienna 258 +110 57 55 Sepia 259 + 92 38 37 Dark Sepia 260 + 98 49 189 Violet Blue 261 + 20 50 156 Blue Ink 262 + 22 95 167 Solar Blue 263 +196 227 157 Green Dust 264 +253 51 163 Crimson 265 +238 113 175 Floral Pink 266 +132 49 84 Wine 267 +163 145 102 Olive Drab 268 + 12 137 24 Meadow 269 +247 242 151 Mustard 270 +204 153 0 Yellow Ocher 271 +199 151 50 Old Gold 272 +255 157 0 Honey Dew 273 +255 186 94 Tangerine 274 +252 241 33 Canary Yellow 275 diff --git a/extensions/fablabchemnitz/inkstitch/palettes/InkStitch King Star.gpl b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch King Star.gpl new file mode 100644 index 00000000..bf2020c1 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch King Star.gpl @@ -0,0 +1,434 @@ +GIMP Palette +Name: Ink/Stitch: King Star +Columns: 4 +# RGB Value Color Name Number +255 245 254 White 1 +240 222 218 Light Pink 2 +247 219 215 Heavenly Pink 3 +249 188 204 Pink 4 +248 171 191 Petal Pink 5 +248 154 181 Pale Pink 6 +242 117 151 Pink 7 +239 62 104 Pink 8 +224 0 71 Cerise 9 +200 7 64 Dark Red 10 +239 198 202 Parfait Pink 11 +249 188 204 Pink 12 +249 154 176 Rose 13 +253 122 174 Wild Pink 14 +210 83 150 Medium Pink 15 +182 37 112 Dark Pink 16 +159 0 82 Dark Red 17 +137 1 77 Cranberry 18 +106 28 67 Dark Maroon 19 + 76 37 58 Dark Maroon 20 +234 201 208 Pink Bazaar 21 +242 182 208 Violet 22 +252 165 210 Medium Pink 23 +249 114 191 Floral Pink 24 +230 24 148 Ruby Glint 25 +222 30 129 Ruby Glint 26 +238 205 186 Bisque 27 +236 188 168 Pale Salmon Pink 28 +251 172 177 Emily Pink 29 +233 149 123 Coral Haze 30 +246 215 213 Primrose Pink 41 +255 230 223 Snow White 42 +252 222 214 Rosewater 43 +251 206 200 Petal Pink 44 +250 192 180 Impatiens Pink 45 +249 183 171 Flesh Pink 46 +245 192 200 Sugar Pink 47 +239 169 177 Pale Pink 48 +248 143 157 Shrimp 49 +231 141 153 Light Orange 50 +251 155 166 Peony 51 +236 119 128 Confetti 52 +212 60 72 Dark Salmon Pink 53 +203 40 43 Spanish Red 54 +175 28 46 Red Berry 55 +169 8 76 Red 56 +236 166 176 Pale Pink 57 +232 171 186 Cameo Pink 58 +218 130 142 Medium Pink 59 +231 141 153 Light Orange 60 +241 212 198 Crystal Pink 61 +247 171 145 Salmon 62 +233 149 123 Coral Haze 63 +216 126 100 Crabapple 64 +184 93 66 Brown 65 +183 73 48 Dark Orange / Brown 66 +154 48 24 Red Bittersweet 67 +120 40 29 Bark 68 +117 41 53 Wine 69 +154 30 54 Cranberry 70 +236 227 212 Yellow / Gold 81 +238 234 187 Celery 82 +246 227 159 PaleYellow 83 +247 222 138 Wheat 84 +250 201 62 Yellow 85 +253 203 22 Manila 86 +252 184 83 Mimosa 87 +247 164 8 Marigold 88 +211 133 0 Karat 89 +220 136 2 Karat 90 +216 117 0 Gold / Orange 91 +253 199 129 Buff Orange 92 +252 180 122 Peach 93 +251 170 78 Amber 94 +242 127 0 Orange 95 +243 125 1 Orange 96 +225 104 0 Gold / Orange 97 +216 79 0 Orange 98 +189 56 39 Dark Rust 99 +132 52 15 Chocolate 100 +236 227 212 Yellow / Gold 101 +238 234 187 Celery 102 +239 236 159 PaleYellow 103 +245 234 92 Daffodil 104 +248 220 22 Moonbeam 105 +246 211 21 Canary 106 +249 208 22 Manila 107 +253 203 22 Manila 108 +241 190 21 Gold 109 +226 173 17 Pollen Gold 110 +247 234 155 PaleYellow 121 +239 225 126 Pale Yellow / Gold 122 +225 212 118 Popcorn 123 +190 168 49 Medium Green / Yellow 124 +157 126 9 Autumn Green 125 +120 87 8 Earthen Tan 126 +196 160 14 Black Eyed Susie 127 +178 139 10 Shimmering Gold 128 +120 87 8 Earthen Tan 129 +239 215 167 Double Cream 130 +235 188 136 Peach 131 +225 154 98 Pale Orange 132 +253 177 115 Peach 133 +253 172 90 Chamois 134 +251 170 78 Amber 135 +233 157 71 Pale Gold 136 +188 82 6 Rust 137 +132 52 15 Chocolate 138 +220 136 2 Karat 139 +178 85 7 Rust 140 +200 188 136 Vegas Gold 141 +225 214 182 Champagne Mist 142 +212 197 154 Parsnip 143 + 94 80 31 Dark Olive Green 144 + 94 80 31 Dark Olive Green 145 +124 91 22 Earthen Tan 146 +111 89 29 Dark Green / Yellow 147 + 79 74 34 Dark Olive Green 148 + 99 86 18 Dark Green / Yellow 149 +237 207 181 Cottage Beige 150 +231 227 218 Medium Yellow 161 +216 212 185 Cream 162 +225 214 182 Champagne Mist 163 +212 197 154 Parsnip 164 +224 194 168 Pale Peach 165 +211 175 143 Light Brown 166 +194 155 124 Light Red / Orange 167 +176 127 87 Fawn 168 +200 171 153 Pale Orange 169 +187 154 139 Deauville Mauve 170 +178 141 122 Roebuck 171 +129 86 69 Dark Brown 172 + 76 38 17 Dark Oak 173 + 79 50 36 Dark Brown 174 + 76 38 17 Dark Oak 175 + 59 45 42 Best Brown 176 +100 83 75 Dark Fawn 177 + 72 52 51 Egyptian Brown 178 + 63 54 55 Dark Grey 179 + 35 37 36 Black 180 +238 205 186 Bisque 181 +236 188 168 Pale Salmon Pink 182 +217 159 145 Peachbeige 183 +199 131 112 Canyon Clay 184 +142 81 62 Dark Brown 185 +111 56 35 Dark Brown 186 + 91 48 32 Dark Brown 187 +209 201 188 Champagne 188 +206 196 186 Moonstruck 189 +193 183 171 Light Brown 190 +206 235 127 Pale Yellow 201 +187 232 90 Sharp Green 202 +186 211 5 Dark Green 203 +139 173 1 Green Dust 204 +191 210 154 Flite Green 205 +180 202 138 Green Oak 206 +148 177 113 Tarragon 207 +126 156 82 Medium Green / Yellow 208 +149 220 90 Medium Green 209 + 97 192 26 Medium Green 210 + 79 168 2 Meadow 211 + 51 139 39 Bright Green 212 + 51 114 35 Green 213 + 79 139 15 Meadow 214 + 60 125 23 Green 215 + 51 114 35 Green 216 + 57 97 34 Dark Green 217 + 64 80 35 Hedge 218 + 58 80 34 Hedge 219 + 62 72 35 Hedge 220 +231 242 202 Light Yellow 221 +197 214 162 Flite Green 222 +141 169 121 Forest Shade 223 + 99 146 114 Pale Blue / Green 224 + 62 98 72 Teal 225 + 26 70 43 Dark Green 226 + 21 77 40 Green 227 + 26 70 43 Dark Green 228 + 99 164 132 Green Spruce 229 + 35 169 116 Pale Jade 230 +101 199 161 Medium Green 241 + 45 164 106 Gotcha Green 242 + 0 116 53 Green 243 + 0 116 53 Green 244 + 0 116 53 Green 245 + 1 99 58 Dark Green 246 +199 229 227 Soothing Sea 247 +152 220 221 Mint Julep 248 + 78 199 180 Aquamarine 249 + 40 163 142 Tender Teal 250 + 0 129 107 Jade Green 251 + 0 104 87 Green Forest 252 + 0 97 98 Garden Green 253 +177 209 185 Bird Egg Green 254 +118 164 138 Creme de Menthe 255 +118 164 138 Creme de Menthe 256 + 14 107 78 Green Bay 257 + 0 83 63 Dark Green 258 + 1 75 58 Dark Green 259 + 0 66 54 Evergreen 260 +224 204 216 Rose Pink 261 +234 191 221 Pink 262 +209 164 203 Light Pink 263 +223 155 216 Mid Lilac 264 +151 70 149 Violet 265 +156 26 135 Plum 266 +161 0 130 New Berry 267 +131 0 94 Dark Purple 268 +131 0 94 Dark Purple 269 +221 191 215 Light Pink 270 +228 216 220 Light Pink 281 +199 173 220 Tulip 282 +179 147 214 Pale Purple 283 +156 111 202 Iris 284 +169 145 177 Sterling 285 +128 99 143 Light Grape 286 +104 72 121 Jazz Purple 287 +196 198 211 Light Purple 288 +205 203 225 Paris Blue 289 +191 180 220 Purple Heather 290 +171 157 216 Lilac 291 +124 97 174 Light Purple 292 + 39 24 107 Purple 293 +183 172 212 Lavender 294 +179 147 214 Pale Purple 295 +130 114 187 Mauve 296 + 25 68 163 Royal Blue 297 + 0 56 130 Blue 298 + 0 54 150 Fire Blue 299 + 0 54 150 Fire Blue 300 +198 212 223 Cadet Blue 301 +157 177 201 Pale Blue 302 +123 152 184 Dusk Blue 303 + 96 129 160 Slate Blue 304 + 63 101 140 Medium Blue 305 +121 150 206 Cornflower Blue 306 +102 124 209 Jay Blue 307 +129 104 205 Amethyst 308 +111 78 191 Violet 309 + 55 16 143 Medium Green / Blue 310 +199 217 229 Cadet Blue 321 +167 194 205 Angel Falls 322 +140 177 193 Forget-Me-Not 323 + 86 151 157 Porcelain 324 + 55 119 119 Dark Blue / Green 325 + 22 131 154 Dark Aqua Green 326 + 0 104 133 Oasis 327 + 0 77 105 Peacock 328 + 19 53 78 Dark Teal 329 + 90 185 205 Medium Blue / Green 330 + 0 159 188 Marine Aqua 331 +176 218 230 Baby Blue 332 +134 199 229 Pale Turquoise 333 + 86 181 225 Medium Blue 334 + 0 162 224 Mid Windsor 335 + 10 147 215 Baltic Blue 336 + 0 88 156 Solar Blue 337 + 30 20 117 Royal 338 + 0 54 150 Fire Blue 339 + 23 25 99 Imperial Blue 340 +180 216 248 Ice Blue 341 +191 222 217 Bleached Aqua 342 +100 136 168 Slate Blue 343 + 20 56 88 Blue 344 +185 202 230 Light Blue 345 +156 177 196 Pale Blue 346 +133 152 167 Stone Blue 347 + 93 121 142 Medium Blue / Green 348 + 49 86 113 Dark Blue / Green 349 + 23 76 92 Dark Bottle Green 350 +189 197 200 Ballad Blue 361 +159 167 170 Light Grey 362 +129 137 140 Grey 363 + 99 107 110 Metal 364 + 69 77 80 Midnight 365 + 39 47 50 Dark Grey 366 +177 182 186 Medium Grey / Blue 367 +146 151 155 Pale Grey 368 +119 124 128 Cool Grey 369 + 88 93 97 Dark Gray 370 + 66 75 82 Midnight 371 +206 186 185 Light Pink 372 +180 162 158 String 373 +152 139 131 Zinc 374 +127 110 102 Medium Green / Yellow 375 +222 217 213 Vapor 376 +194 191 184 Saturn Gray 377 +149 148 144 GS Gray 378 + 89 89 89 Dark Grey 379 + 52 53 47 Dark Grey 380 +193 199 185 Light Green / Yellow 381 +160 174 159 Willow 382 +138 149 106 Spanish Olive 383 +111 119 70 Lt. Olive 384 + 77 89 13 Palmetto 385 + 64 80 35 Hedge 386 +197 214 162 Flite Green 387 +162 182 129 Palest Green 388 +111 126 71 Lt. Olive 389 + 77 89 13 Palmetto 390 +248 117 148 Pink 801 +241 83 131 Begonia 802 +208 5 69 Strawberry 803 +224 0 71 Cerise 804 +255 197 245 Orchid Pink 805 +255 172 232 Orchid Pink 806 +251 121 219 Wild Pink 807 +242 81 210 Medium Pink 808 +237 50 183 Crimson 809 +217 0 166 Passion 810 +250 151 169 Rose 811 +250 104 125 Dusty Rose 812 +251 45 66 Fluo Pink 813 +250 172 162 Quartz Pink 814 +251 164 154 Flamingo Pink 815 +249 125 115 Shell Pink 816 +249 91 80 Coral 817 +250 58 43 Paprika 818 +237 245 126 Medium Yellow 819 +224 228 17 Yellow 820 +225 215 22 Yellow 821 +255 201 30 Buttercup 822 +255 201 30 Buttercup 823 +254 149 58 Orange 824 +206 251 109 Brilliant Lime 825 +206 250 67 Fluo Yellow / Green 826 +206 251 28 Fluorescent Yellow 827 +123 224 66 Bright Green 828 +123 224 66 Bright Green 829 + 83 184 26 Green / Yellow 830 +225 98 81 Dark Salmon Pink 31 +189 56 39 Dark Rust 32 +210 35 32 Rust 33 +213 45 18 Red 34 +235 39 41 Scarlet 35 +220 25 42 Foxy Red 36 +187 17 43 Red 37 +190 19 55 Medium Red 38 +167 16 57 Atom Red 39 +142 33 65 Perfect Ruby 40 +124 34 43 Burgundy 71 +117 41 53 Wine 72 +214 139 160 Rose Tint 73 +117 38 59 Red Jubilee 74 +142 33 65 Perfect Ruby 75 +122 27 61 Kings Wine 76 +242 207 175 Gray Sand 77 +252 207 148 Impala 78 +252 201 83 Cornsilk 79 +198 149 12 Old Gold 80 +247 237 212 Afterglow 111 +238 234 187 Celery 112 +238 234 187 Celery 113 +239 236 159 PaleYellow 114 +244 238 90 Daffodil 115 +245 231 21 Daffodil 116 +247 224 22 Moonbeam 117 +238 222 109 Yellow Cream 118 +215 167 56 Light Orange 119 +167 130 0 Autumn Green 120 +226 190 156 Gold 151 +200 146 86 Ashley Gold 152 +153 100 8 Orange / Brown 153 +129 91 29 Earthen Tan 154 +107 75 28 Sand Dune 155 +131 61 10 Chocolate 156 +144 91 49 Light Cocoa 157 + 86 63 31 Brown 158 + 79 50 36 Dark Brown 159 + 55 25 15 Dark Brown 160 +176 166 154 String 191 +155 143 129 Light Brown 192 +127 115 101 Medium Green / Yellow 193 +206 203 188 Chrome 194 +182 178 140 Winter Pear 195 +159 156 111 Slate Green 196 +114 104 92 Medium Brown 197 +160 159 111 Slate Green 198 +113 105 86 Medium Brown 199 +221 208 217 Pearl Gray 200 + 1 121 85 Medium Green 231 + 0 129 73 Emerald 232 + 0 110 81 Green Bay 233 +104 181 161 Fountain Green 234 + 77 172 150 Emerald Green 235 + 35 134 106 Medium Green 236 + 1 102 72 Dark Green 237 + 0 76 64 Dark Green 238 + 0 66 54 Evergreen 239 + 1 40 47 Ivy 240 +193 152 208 Purple 271 +132 34 143 Dark Purple 272 +103 15 125 Purple Shadow 273 + 88 1 118 Purple Shadow 274 + 61 25 86 Dark Purple 275 +209 164 203 Light Pink 276 +209 164 203 Light Pink 277 +158 77 170 Medium Purple 278 +131 0 142 Medium Purple 279 +102 0 135 Purple Shadow 280 + 20 31 121 Royal Blue 311 + 0 35 103 Royal Blue 312 + 0 35 103 Royal Blue 313 +194 201 207 Light Purple 314 +185 204 221 Light Blue 315 +158 160 219 Lilac 316 +171 189 229 Pale Blue 317 +121 150 206 Cornflower Blue 318 + 66 107 186 Medium Purple 319 + 0 56 130 Blue 320 + 0 63 78 Deep Windsor 351 + 45 66 119 Navy 352 + 38 86 135 Blue Dusk 353 + 0 46 98 Blue 354 + 0 49 92 Blue 355 + 53 86 139 Imperial Blue 356 + 1 36 76 Blue Ribbon 357 + 0 33 78 Blue Ribbon 358 + 6 37 55 Navy 359 + 0 25 45 Navy Blue 360 + 73 96 26 Palmetto 391 +174 185 177 Heather Grey 392 +149 167 155 Moss 393 +126 151 129 Pale Green 394 +111 130 111 Willow 395 + 94 113 94 Medium Blue / Green 396 +231 227 218 Medium Yellow 397 +250 250 250 White 401 + 0 0 0 Black 402 +231 227 218 Off White 403 diff --git a/extensions/fablabchemnitz/inkstitch/palettes/InkStitch MTB - Embroidex.gpl b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch MTB - Embroidex.gpl new file mode 100644 index 00000000..378f92fd --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch MTB - Embroidex.gpl @@ -0,0 +1,111 @@ +GIMP Palette +Name: Ink/Stitch: MTB - Embroidex +Columns: 4 +# RGB Value Color Name Number + 0 0 0 Black P101 +255 255 255 White P102 +255 241 215 Off White P110 +242 251 215 Sand P115 +237 227 184 Lt Beige P120 +198 174 157 Beige P121 +196 187 157 SandStone P122 +183 172 134 Beachcomber P123 +214 194 158 Dusky Goldenrod P125 +191 172 106 Twilight Harvest P126 +120 96 63 Brown P127 +226 197 126 Sienna P130 +185 138 68 Sienna Rose P131 +163 104 20 Sienna Brass P135 +145 87 53 Light Cocoa P140 + 94 52 51 Burnished Eggplant P143 + 72 38 38 Spanish Roast P145 +248 244 211 Pearled Gold P195 +242 236 182 Golden Sand P196 +247 244 201 Pearled bronze P200 +253 236 168 Pale Gold P201 +251 242 89 Buttercup P205 +249 233 38 Bright gold P206 +230 196 77 Goldenrod P207 +226 179 14 Brass P210 +248 194 114 Brass Rose P211 +217 166 3 Dusky Brass P212 +218 99 12 Cayenne P215 +221 121 11 Cinnamon P220 +162 47 3 Orange Glory P221 +190 168 12 Antique Bronze P224 +190 154 12 Antique Gold P225 +158 129 10 Pickled Olive P226 +205 243 167 Cool Mint P300 +168 235 101 California Lime P305 +115 190 12 Vivid Mint P306 +194 218 112 Grey Moss P307 + 96 115 30 Deep Moss P308 + 80 149 38 New Pine P310 + 79 91 26 Lilypad Green P312 + 73 96 26 Palmetto P313 + 50 66 17 Black Pine P314 +196 210 87 Spring Fern P315 +156 139 41 Olive P316 +135 120 35 Parsley P320 + 98 104 26 Golden Pine P325 +225 249 204 Frosted Wintergreen P400 +172 199 116 Pastoral Green P401 + 86 203 128 Deep Wintergreen P405 +108 173 20 Parrot Green P406 + 51 89 9 Christmas Fir P407 +209 250 230 Morning Cyan P408 +131 194 233 Dusky Cyan P409 + 52 139 113 Mountain Lake P410 + 38 111 102 Lake Shadows P411 + 48 129 104 Lake Forest P415 + 22 75 69 Midnight Lake P416 +225 247 244 Winter Morning P420 +208 240 253 Pearled Coneflower P421 +202 213 221 winter Haze P422 +117 120 134 Russina Blue P423 +104 107 119 Charcoal Blue P424 +172 211 223 Summer morning P425 + 48 105 122 Harbor P426 +131 153 186 Cornflower P427 + 92 151 194 Dusky Harbor P428 + 39 65 92 Harbor Twilight P429 + 46 65 114 Royal Blue P430 + 69 81 101 Suskty Navy P431 + 63 60 96 Deep Navy P435 +253 232 236 Frosted Rose P500 +250 190 191 Rose P501 +252 216 216 Pearled Rose P505 +247 155 197 Tea Rose P506 +241 139 221 Vivid Rose P507 +230 159 155 Salmon Rose P510 +177 37 151 Dusty Fuschia P515 +193 13 113 Light Rose P520 +213 0 0 Paprika Red P525 +155 0 0 Cherrywood Red P526 +126 10 65 Dusty Burgundy P530 +111 9 57 Burgandy P531 +188 14 97 Pearld Burgandy P535 + 86 7 65 Syrah P540 +252 228 173 Blonde P600 +254 218 188 Platinum Rose P605 +253 201 166 Dusty Salmon P606 +250 183 150 Pearled Salmon P607 +248 162 120 Salmon P610 +255 128 128 Vivid Salmon P612 +244 187 196 Light Mauve P613 +184 161 169 Light Lilac P695 +141 117 143 Antique Lilac P696 +155 136 139 Silver Lilac P697 +207 154 179 Lilac P700 +150 102 168 Twilight Lilac P701 +125 94 168 Lupine P702 +132 70 122 Deep Violet P703 + 99 60 104 Royal Eggplant P704 + 91 67 124 Twilight Lupine P705 +220 220 219 Platinum P800 +217 232 215 Quartz P801 +198 187 185 Titanium P802 +187 187 187 Blue Titanium P803 +156 156 146 Anitque Platinum P805 +133 133 120 Hematite P810 + 87 80 79 Twilight P815 diff --git a/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Madeira Burmilana.gpl b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Madeira Burmilana.gpl new file mode 100644 index 00000000..996c9963 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Madeira Burmilana.gpl @@ -0,0 +1,125 @@ +GIMP Palette +Name: Ink/Stitch: Madeira Burmilana +Columns: 4 +# RGB Value Color Name Number +239 237 252 Aspen White 3601 +171 121 43 Bullion 3625 + 59 84 103 Sea Bleu Dark 3642 + 44 48 58 Black 3643 +137 171 153 Surf Bleu Light 3645 +175 200 189 Sage Green 3646 + 71 102 94 Green Forest 3652 +190 171 156 Light Brown 3660 +202 199 196 Lunar Rock 3686 +120 191 183 Seafrost 3697 + 25 96 80 Green Petal 3698 + 56 75 64 Mitchell Green 3699 +231 157 179 Medium Pink 3707 +208 116 160 Hot Pink 3709 +202 178 192 Light Pink 3711 +232 201 204 Grape 3715 +162 107 117 Nostalgia Rose 3716 + 72 45 54 Shark 3717 +229 198 150 Winter Wheat 3723 +246 186 89 Mimosa 3724 +152 145 141 GS Gray 3735 +122 106 94 Iron 3736 + 92 84 75 Major Brown 3737 +240 122 118 Dark Peach 3752 +238 162 115 Chamois 3755 +192 115 65 Copper 3756 +140 31 50 Dark Red S 3781 +146 55 91 Brown 3783 + 0 101 95 Imperial Aqua 3785 +159 119 61 Pale Brown 3791 +190 36 42 Red Orange 3800 +176 30 45 Red Berry 3802 +205 86 62 Dark Salmon 3803 +171 54 43 Orange / Red 3804 +123 47 48 Brown 3805 +133 76 53 Rust 3808 + 0 85 139 Fire Blue 3810 + 43 55 82 Dark Navy 3811 + 32 54 51 Spruce 3820 + 20 68 51 Green 3821 + 65 77 56 Mitchell Green 3822 + 0 124 102 Jungle Green 3823 + 0 108 82 Green Bay 3825 + 30 153 79 Emerald Green 3826 + 0 121 63 Green Forest 3827 +175 84 102 Amber Red 3829 + 53 45 45 Best Brown 3830 + 77 59 49 Egyptian Brown 3831 + 98 77 61 Fungi 3832 +118 83 122 Crushed Grape 3833 +123 65 107 Dark Red 3834 + 86 96 100 Bleu Mist Dark 3837 + 67 78 84 Midnight 3838 +161 162 121 Sage Green 3839 +175 133 96 Fawn 3840 +178 149 125 Natural 3841 +209 176 147 Light Tan 3842 +118 77 66 Dark Brown 3843 +171 121 104 Light Brown 3844 +209 191 170 Taupe 3845 + 73 149 181 Medium Teal Blue 3846 + 87 51 51 Dark Sepia 3848 +255 169 61 Gold / Orange 3850 +239 99 34 Hazel 3852 +249 198 63 Yellow 3853 +229 215 117 Canary Yellow 3854 +187 117 43 Toast 3855 +147 146 155 Pale Grey 3858 +236 155 161 Medium Pink 3860 + 69 64 110 Petrol Blue 3861 +127 37 56 Russet 3863 + 97 44 56 Warm Wine 3864 + 0 108 120 Pro Teal 3871 + 0 84 113 Peacock 3872 + 0 113 160 Dark Turquoise Blue 3873 + 98 186 185 Blue Turquoise 3875 + 0 157 167 Dark Blue / Green 3876 +149 133 163 Ocean Bleu 3880 +143 143 141 Griffin 3881 + 48 84 120 Dark Blue / Green 3883 + 88 133 159 Slate Blue 3884 +136 102 79 Wine 3887 +227 197 173 Pale Peach 3888 +143 93 53 Chocolate 3889 +231 223 203 Turtledove 3890 +237 231 228 Oyster 3891 + 41 43 44 Ruby Black 3892 +149 198 153 Hemlock 3893 +118 56 65 Sepia 3897 +129 127 98 Aloe 3898 +209 202 166 Frost Green 3899 +163 52 112 Medium Purple 3900 +102 94 58 Olive Drab 3903 +135 150 134 Weed 3904 +161 153 124 Pale Green / Yellow 3905 + 84 79 56 Dark Green / Grey 3906 +109 166 50 Green / Yellow 3908 +133 169 188 Sky Blue 3909 +147 184 197 Thistle Light 3910 +162 181 198 Pale Blue 3911 +243 203 114 Pale Yellow 3912 + 0 128 156 Blue / Green 3915 + 53 56 49 Dark Grey 3916 +236 184 189 Bisque 3919 +199 177 156 Sea Shell 3923 +126 154 102 Envy 3931 +178 106 155 Medium Purple 3935 + 84 130 77 Dark Green 3940 + 67 115 78 Fairway 3941 +132 142 187 Blue 3942 + 95 97 142 Royal Blue 3943 +156 171 193 Rockport Blue 3944 +102 121 157 Slate Blue 3945 + 56 78 118 Dusty Navy 3946 +227 213 153 Maize Silk 3964 + 68 48 77 Blackberry 3977 +169 148 58 Gold 3980 +203 47 81 Dark Salmon Pink 3989 +141 39 70 Cabernet 3990 + 29 167 149 Tender Teal 3996 + 29 167 148 Tender Teal 3997 diff --git a/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Madeira Matt.gpl b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Madeira Matt.gpl new file mode 100644 index 00000000..47973362 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Madeira Matt.gpl @@ -0,0 +1,165 @@ +GIMP Palette +Name: Ink/Stitch: Madeira Matt +Columns: 4 +# RGB Value Color Name Number +220 220 230 Aspen White 7611 +200 209 211 Palest Ivory 7613 +250 125 120 Flamingo 7616 +253 119 49 Moonbeam 7621 +251 234 91 Moonbeam 7623 +254 191 84 Moonbeam 7624 +241 184 134 Manila 7625 +207 197 219 Pollen Gold 7627 +191 202 219 Ruby Glint 7628 +183 165 200 Whisper Pink 7630 + 93 13 34 Medium Purple 7635 +204 58 43 Pollen Gold 7639 +118 122 121 Earthen Tan 7640 + 14 20 23 Aqua Pearl 7641 + 13 29 55 Aqua Pearl 7643 +182 221 216 Green Haze 7645 +177 209 159 Bleached Aqua 7647 +183 210 148 Whisper Pink 7648 + 3 108 55 Aqua Pearl 7650 + 1 117 110 Aqua Pearl 7652 +235 221 221 Pink Mist 7653 +167 113 71 Medium Pink 7657 +166 83 56 K. A. Bronze 7658 +238 234 223 Rosewater 7661 +169 148 138 Bullion 7662 +128 115 101 Sterling 7664 +241 234 190 Manila 7666 +147 170 149 Pastel Lilac 7668 +221 193 124 Sunkist 7670 +168 196 205 Pale Gray Green 7674 + 96 50 87 Warm Wine 7680 +211 194 178 Sea Mist 7682 +147 143 133 Thistle 7689 + 4 52 59 Dark Blue 7690 +208 223 228 Dawn Blue 7692 +121 182 176 Pale Blue 7694 + 32 163 188 Aqua Velva 7695 + 3 79 58 Coachman Green 7704 +183 168 76 Whisper Pink 7706 +223 71 149 Sunkist 7710 +193 176 206 Amber Beige 7711 +234 218 221 Bisque 7713 +186 186 197 Old Dark Tex Orange 7718 +240 165 189 Canary 7721 +230 215 175 Daffodil 7723 +226 184 108 Pink 7725 +156 121 112 Light Pink 7729 +182 114 63 Foxy Red 7730 +216 192 206 Cerise 7731 + 90 124 170 Meadow 7733 +240 224 80 Sunshine 7735 + 45 69 59 Black 7739 + 95 105 101 Medium Grey 7741 + 35 12 99 Imperial Blue 7742 +139 95 79 Silvery Gray 7745 +112 188 186 Sky Blue 7746 +131 7 9 Iris 7747 +179 213 136 Platinum 7748 + 99 206 105 Warm Wine 7749 +240 184 168 Flesh Pink 7752 +235 173 146 Blue Blush 7753 +225 59 46 Billowing Sail 7754 +253 173 87 Moonbeam 7755 + 81 138 177 Water Lilly 7760 +215 222 251 Wild Pink 7761 + 48 37 128 Dark Ink 7767 +127 182 100 Sterling 7770 +233 177 98 Flesh Pink 7771 +221 153 65 Sunkist 7773 + 15 117 156 Teal 7775 +226 145 141 Paprika 7777 +240 114 45 Canary 7778 +234 86 80 Natural White 7779 +177 14 60 Bleached Aqua 7781 +233 85 124 Shell Pink 7786 +221 69 130 Sunkist 7787 +140 122 39 Red Bittersweet 7790 +189 125 51 Wildfire 7791 +136 124 64 Seafrost 7793 + 80 80 52 Pale Green 7795 + 0 100 146 Blue 7797 + 4 8 15 Jet Black 7800 +227 222 222 Flamingo 7801 +230 220 210 Daffodil 7803 +197 196 83 Light Pink 7809 +195 187 171 Vapor 7810 +195 190 184 Vapor 7811 +226 203 211 Star Gold 7815 +231 196 203 Peach 7816 +225 203 205 Petal Pink 7818 +224 125 87 Sunkist 7820 +207 44 37 Ivory 7821 +214 207 192 Wild Pink 7822 +236 242 84 PaleYellow 7823 +123 183 194 Green Dust 7827 +135 175 215 Seafrost 7828 +131 81 171 Iris 7832 +210 165 198 Black Eyed Susie 7834 +194 42 53 Lime Cream 7838 + 53 58 61 Black 7841 + 22 59 147 Flag Blue 7842 + 0 36 90 Dark Indigo 7843 + 10 11 13 Black 7844 +150 204 170 Sharp Green 7845 +137 181 105 Banner Gray 7848 + 2 95 70 Frosty Spruce 7851 + 44 130 153 Dark Aqua Green 7852 +246 206 180 Orange 7855 +226 220 194 Star Gold 7860 +231 221 162 Peach 7866 + 10 150 121 Peacock Green 7868 +240 164 89 Canary 7869 +252 208 145 Moonbeam 7870 +160 180 208 Fawn 7871 +182 198 231 Green Haze 7874 +224 206 190 Sunkist 7882 +213 188 167 Buff Orange 7884 +191 149 108 Ruby Glint 7885 +226 223 224 Star Gold 7886 +176 215 211 Bleached Aqua 7892 + 98 184 195 Aquamarine 7893 +190 90 61 Dark Pink 7899 +204 210 184 Seashell 7900 + 16 93 83 Holly Leaf 7902 + 33 86 66 Deep Green 7903 +252 101 103 Moonbeam 7908 +254 150 165 Moonbeam 7909 +236 222 226 Pink Mist 7911 +231 145 159 Daffodil 7917 +221 105 132 Sunkist 7919 +176 177 132 Bleached Aqua 7920 +230 189 205 Crystal Pink 7921 + 88 41 151 Purple 7922 +243 227 42 Lemon 7924 + 55 44 36 Best Brown 7931 + 22 97 167 Sky Blue 7934 +161 146 113 Black Eyed Susie 7936 +253 155 9 Moonbeam 7937 +231 219 197 Peach 7938 +186 165 141 Old Dark Tex Orange 7939 +231 200 198 Peach 7941 +253 146 14 Moonbeam 7946 +232 152 171 Shell Pink 7948 +235 234 232 Pink Mist 7949 +158 226 57 Mint 7950 +250 197 52 Arctic Ice 7951 +240 153 133 Canary 7952 +196 211 224 Vapor 7953 +102 70 57 DK Chestnut 7957 + 11 59 93 Dark Blue 7962 +250 148 59 Arctic Ice 7965 +156 165 133 Light Pink 7969 + 49 106 51 Dark Green 7970 +249 212 67 Flamingo 7971 + 2 30 84 Navy Blue 7976 + 25 144 186 Blue Horizon 7977 +243 211 38 Manila 7980 +173 28 45 Illusion Blue 7982 +232 110 152 Shell Pink 7984 +197 35 33 Vapor 7986 + 11 195 96 Nile 7988 diff --git a/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Madeira Polyneon.gpl b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Madeira Polyneon.gpl new file mode 100644 index 00000000..065330eb --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Madeira Polyneon.gpl @@ -0,0 +1,353 @@ +GIMP Palette +Name: Ink/Stitch: Madeira Polyneon +Columns: 4 +# RGB Value Color Name Number +183 195 197 Celestial Blue 1610 +158 169 177 Highrise 1611 +151 166 180 Blue Fog 1612 +147 158 158 Platinum 1613 + 99 103 103 Medium Grey 1614 +112 118 118 Metal 1615 +225 114 116 Shell Pink 1616 + 90 86 96 Gray Ridge 1617 +113 115 126 Silver Rose 1618 + 99 101 108 Gray Ridge 1619 +252 140 151 Azalea 1620 +196 86 45 Old Dark Tex Orange 1621 +238 223 188 Tusk 1622 +245 225 84 Copper 1623 +244 167 49 Gold 1624 +195 127 41 Copper 1625 +248 197 120 Sunset Gold 1626 +121 117 139 Purple Ash 1627 +126 168 192 Pale Purple 1628 +194 199 218 Paris Blue 1629 +148 145 186 Violet Tulip 1630 +141 103 157 Laurie Lilac 1631 + 64 53 79 Fleet Blue 1632 + 93 42 101 Dark Purple 1633 + 64 52 90 Purple Accent 1634 +108 47 65 Dark Maroon 1635 +188 33 48 Warm Red 1637 +133 45 50 Cherry Jubilee 1638 +173 62 65 Red Berry 1639 + 94 97 98 Twilight 1640 + 53 57 61 Black 1641 + 41 90 148 Blue 1642 + 45 53 65 Navy 1643 +119 199 187 Seafrost 1645 +136 186 156 Cameo Green 1647 +137 155 99 Sage Green 1648 +116 149 43 Meadow 1649 + 54 121 54 Medium Green 1650 + 0 132 69 Kelly 1651 + 59 121 122 Deep Atlantic 1652 +240 188 169 Peach 1653 +102 79 76 Twilight Mauve 1654 +191 154 136 Light Red / Orange 1656 +135 91 67 Light Cocoa 1657 +121 70 57 Brown 1658 + 82 56 52 Dark Oak 1659 +177 164 160 Light Brown 1660 +241 235 202 Celery 1661 +139 132 118 Atmosphere 1662 +110 99 85 Cinder 1663 + 97 93 86 Black Chrome 1664 + 73 73 67 Charcoal Gray 1665 +244 229 179 Wheat 1666 +100 118 106 Water Lilly 1668 + 65 76 66 Dark Army Green 1669 +213 167 104 Old Gold 1670 + 91 133 162 Slate Blue 1671 +167 121 62 Shimmering Gold 1672 +173 142 94 Beige 1673 +141 188 220 Angel Falls 1674 +122 174 213 Caribbean Blue 1675 + 46 75 134 Royal 1676 + 0 77 81 Deep Windsor 1677 +237 85 46 Fluorescent Orange 1678 + 92 60 91 Port Wine 1680 +189 55 85 Atom Red 1681 +205 191 172 Taupe 1682 +255 197 86 Buttercup 1683 +190 162 115 Warm Sand 1684 + 0 134 129 J. Turquoise 1685 +210 211 210 Gray Lilac 1686 +189 197 195 Vapor 1687 +108 110 108 Gull 1689 + 23 76 75 Dark Blue 1690 +158 199 195 Pale Blue 1692 + 0 160 174 Marine Aqua 1694 + 0 137 163 Dark Blue 1695 + 72 159 48 Absinthe Green 1701 +104 186 132 Meadow 1702 + 10 93 66 Dark Green 1703 + 26 74 63 Evergreen 1704 + 55 61 50 Dark Army 1705 +148 137 73 Cypress 1706 +197 74 91 Dusky Rose 1707 +206 56 147 Passion 1709 +150 48 113 Dark Red 1710 +161 140 177 Wisteria 1711 +170 122 166 Smoky Grape 1712 +244 203 205 Petal Pink 1713 +145 155 162 Highrise 1718 +110 62 101 Plum Wine 1719 +108 56 91 Dark Purple 1720 +235 100 146 Begonia 1721 + 67 55 123 Purple Maze 1722 +246 209 168 Impala 1723 +222 173 57 Pollen Gold 1724 +202 140 63 Old Gold 1725 +181 128 90 Sirocco 1726 +237 212 117 Mimosa 1727 +152 128 106 Fawn 1728 +150 123 108 Fawn 1729 +125 92 57 Sand Dune 1730 +158 125 146 Very Grape 1731 + 59 123 176 Violet 1733 +228 53 70 Desert Rose 1734 +242 210 98 Lemon 1735 +145 133 122 Medium Green / Yellow 1736 +197 183 156 Pistachio 1738 + 78 74 74 Dark Grey 1739 +123 120 125 Silver Rose 1740 +116 117 115 Gull 1741 + 34 61 92 Blue Ribbon 1742 + 47 55 92 Light Navy 1743 +104 87 76 Egyptian Brown 1744 +118 93 83 Fungi 1745 + 40 163 157 Nile Blue 1746 +164 30 53 Very Red 1747 +169 221 118 Spruce 1748 + 55 163 70 Medium Green 1749 + 0 113 74 Dark Green 1750 + 0 124 73 Vibrant Green 1751 +248 172 136 Coral Reef 1752 +184 107 69 Date 1753 +216 58 74 Spanish Red 1754 +247 143 71 Marigold 1755 + 91 90 47 Green 1756 + 99 82 47 Dark Green / Yellow 1757 +110 74 53 Dark Brown 1758 +150 125 57 Foliage Green 1759 + 74 112 127 Medium Green / Blue 1760 +136 166 180 Stone Blue 1761 + 19 83 104 Deep Windsor 1762 +221 123 42 Karat 1763 + 44 72 93 Blue Ribbon 1764 +237 112 31 Pumpkin 1765 + 53 59 26 Violet Blue 1766 + 38 61 118 Royal 1767 +169 184 130 Celadon Green 1768 + 92 119 44 Pale Green 1769 + 70 113 62 Green 1770 +224 162 66 Gold 1771 +216 150 37 Old Gold 1772 +176 102 50 Almond 1773 + 63 123 157 Lake Blue 1775 + 28 78 104 Blue 1776 +239 135 126 Coral 1777 +231 95 62 Orange 1778 +226 62 40 Honeysuckle 1779 + 0 104 82 Green Forest 1780 +153 30 58 Burgundy 1781 +133 52 72 Red Jubilee 1782 +133 44 88 Red Licorice 1783 +117 44 58 Wine 1784 +104 43 68 Grape Shake 1785 +176 46 84 Candy Apple Red 1786 +181 50 108 Cherrystone 1787 +119 50 105 Dark Purple 1788 +100 62 88 Medium Purple 1789 +126 111 49 Palmetto 1790 +175 121 64 Earthen Tan 1791 +178 136 54 Autumn Green 1792 +117 96 47 Sand Dune 1793 + 86 77 48 Dark Olive Green 1794 + 73 71 53 D. H. Green 1795 + 95 87 47 Khaki 1796 + 0 105 155 Solar Blue 1797 + 63 64 52 Charcoal Gray 1798 + 0 176 158 M. D. Green 1799 + 47 48 50 Black 1800 +228 232 255 Barely Blue 1801 +236 237 255 Aspen White 1802 +237 236 223 Lily White 1803 +236 236 230 Blanc de Blanc 1804 +221 225 255 Lilac Hint 1805 +182 161 85 Hemp 1809 +173 176 174 Pale Grey 1810 +169 176 177 Traditional Gray 1811 +169 170 164 Vapor Blue 1812 +252 190 210 Pink 1815 +253 175 192 Dusty Rose 1816 +246 166 150 Flamingo 1817 +228 189 185 Crystal Pink 1818 +251 159 157 Shell Pink 1819 +245 148 130 Flamingo 1820 +164 59 52 Red Bittersweet 1821 +226 220 197 Seashell 1822 +249 255 0 Yellow 1823 +255 221 0 Canary 1824 +249 178 0 Gold 1825 +255 198 124 Honey 1826 + 85 185 214 Medium Blue 1827 + 65 139 174 Pale Purple 1828 + 0 102 160 Fire Blue 1829 +101 134 188 Jay Blue 1830 +154 100 156 Medium Purple 1831 +106 85 149 Purple Shadow 1832 +119 45 115 Dark Purple 1833 +150 122 162 Iris 1834 +134 49 73 Perfect Ruby 1835 + 76 55 56 Brown Stone 1836 +255 62 38 Fluo Pink 1837 +180 34 50 Foxy Red 1838 +173 29 49 Lipstick 1839 +116 125 135 Wild Dove 1840 + 79 86 92 Midnight 1841 + 0 85 149 Fire Blue 1842 + 15 70 120 Royal Blue 1843 + 49 51 62 Smokey 1844 +109 195 159 Neptune Green 1845 + 0 146 144 J. Turquoise 1846 + 66 171 146 Isle Green 1847 +117 159 86 Meadow 1848 + 33 123 104 Green Bay 1849 + 92 202 75 Green 1850 + 0 94 56 Fleece Green 1851 + 50 124 146 Faded Denim 1852 +239 188 154 Bamboo 1853 +156 132 128 Twilight Mauve 1854 +179 147 113 Wicker 1855 +159 85 57 Chocolate 1856 +137 82 53 Mushroom 1857 +101 55 48 Mink Brown 1858 + 75 63 62 Brown Mule 1859 +176 166 151 String 1860 +240 203 123 Cornsilk 1861 +148 143 131 Vertiver Green 1862 +219 210 177 Cocoa Mulch 1863 +240 221 145 Pale Yellow 1866 +228 255 130 Applegreen 1867 + 0 147 109 Jungle Green 1868 +221 136 58 Golden Earth 1869 +235 166 109 Chamois 1870 +120 172 200 Sky Blue 1871 + 99 81 66 Antler 1872 +144 179 216 Baby Blue 1874 +200 47 43 Saffron 1878 + 0 120 101 Green Forest 1879 +120 63 132 Dark Purple 1880 +249 197 173 Tawny 1882 +255 249 0 Canary 1883 +197 169 141 Rattan 1884 +160 126 97 Tawny Birch 1885 +191 185 186 Stainless Steel 1886 + 70 47 57 Shark 1887 + 0 161 163 Marine Blue 1888 + 0 124 128 Mallard Blue 1890 + 0 85 97 Deep Windsor 1891 +120 200 204 Turquoise 1892 + 46 173 201 Surf Blue 1893 + 0 148 170 Dark Aqua Green 1895 + 0 112 136 Dark Blue 1896 +157 75 56 Desert Sand 1898 +135 59 49 Red Bittersweet 1899 +154 186 155 Nile 1900 + 96 171 39 Emerald 1901 + 45 74 56 Mitchell Green 1902 + 58 89 78 Evergreen 1903 + 71 91 74 Chinois Green 1904 + 59 74 55 Mitchell Green 1905 +106 86 63 Dark Olive Green 1906 +255 61 103 Fluorescent Red 1907 +255 67 104 Dark Fluo Pink 1908 +255 103 144 Dark Pink 1909 +214 36 94 Strawberry 1910 +203 173 207 Light Pink 1911 +253 175 183 Emily Pink 1915 +203 115 135 Rapture Rose 1917 +138 139 142 Limestone 1918 +160 85 102 Maroon 1919 +206 196 137 Cocoon 1920 +243 147 184 Wild Pink 1921 + 77 50 117 Purple Accent 1922 +255 187 84 Merit Gold 1923 +251 212 0 Moonbeam 1924 +255 216 43 Merit Gold 1925 +174 132 108 Tawny Birch 1926 +220 177 146 Gold 1927 +141 119 101 Moon Rock 1928 +105 91 83 Best Brown 1929 + 74 81 145 Violet Blue 1930 + 64 58 60 Dark Grey 1931 +124 197 220 Pale Blue 1932 +121 128 175 Light Purple 1933 + 0 93 153 Light Blue / Green 1934 +232 255 0 Lemon 1935 +125 111 98 Dark Grey 1936 +255 171 0 Orange 1937 +185 169 153 Mushroom 1938 +160 138 96 Nouget 1939 +204 203 76 Fluo Orange 1940 +188 139 143 Light Pink 1941 +143 86 83 Brown 1942 + 91 112 172 Violet 1943 + 46 60 74 Blue Ribbon 1944 +114 79 70 Brown 1945 +255 97 21 Neon Orange 1946 +255 73 67 Red 1947 +253 139 165 Azalea 1948 +240 231 212 Moonbeam 1949 +118 214 56 Green 1950 +246 153 42 Honeydew 1951 +251 123 98 Coral 1952 +162 196 220 Sky Blue 1953 +255 73 81 Bitteroot 1954 +243 139 28 Honeydew 1955 +139 128 85 Olive Green 1956 + 74 64 50 Best Brown 1957 +112 73 74 Coffee Bean 1958 +167 137 21 Shimmering Gold 1959 +115 140 158 Country Blue 1960 + 79 109 131 Tempest 1961 + 37 69 83 Dark Blue 1962 + 75 87 109 Purple Sage 1963 + 72 91 114 Ash 1964 +249 103 34 Orange 1965 + 41 52 81 Light Navy 1966 + 35 57 87 Light Navy 1967 +107 150 89 Fair Green 1968 +108 108 88 Hedge 1969 + 52 92 62 Evergreen 1970 +249 179 36 Manila 1971 +255 187 0 Merit Gold 1972 +147 93 52 Chocolate 1973 +138 63 64 Burgundy 1974 + 40 85 120 Blue 1975 + 44 54 70 Cadet 1976 + 0 129 175 Dark Turquoise Blue 1977 +255 132 66 Orange 1978 + 0 95 67 Frosty Spruce 1979 +251 193 26 Manila 1980 +135 42 57 Wine 1981 +127 37 49 Burgundy 1982 + 78 52 67 Plum 1983 +181 41 98 Ruby Glint 1984 + 0 91 79 Green 1985 +171 34 69 Candy Apple Red 1986 +228 60 34 Fluorescent Orange 1987 + 0 140 67 Kelly 1988 + 0 154 103 Irish Green 1989 +216 95 149 Ruby Glint 1990 + 0 115 121 Blue / Green 1991 + 0 95 118 Peacock 1992 +215 49 92 Cerise 1993 +235 77 112 Bashful Pink 1994 +255 255 0 Bright yellow 1995 + 42 66 64 Green Sail 1996 + 59 48 61 Black 1997 +126 96 100 Elderberry 1998 +102 49 49 Dark Brown 1999 diff --git a/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Madeira Rayon.gpl b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Madeira Rayon.gpl new file mode 100644 index 00000000..8f85b628 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Madeira Rayon.gpl @@ -0,0 +1,361 @@ +GIMP Palette +Name: Ink/Stitch: Madeira Rayon +Columns: 4 +# RGB Value Color Name Number + 40 41 42 Black 1000 +227 229 251 Bright White 1001 +231 231 244 Bright White 1002 +233 231 231 Natural White 1003 +234 232 238 Blue Blush 1004 +224 228 255 Billowing Sail 1005 + 41 40 42 Diamond Black 1006 + 42 40 41 Black 1007 + 40 42 44 Ruby Black 1008 + 43 43 48 Sapphire Black 1009 +194 196 191 Vapor 1010 +169 175 178 Traditional Gray 1011 +163 175 179 Pastel Blue 1012 +238 209 202 Rosewater 1013 +238 178 188 Orchid Pink 1014 +233 179 177 Desert Bloom 1015 +234 149 149 Emily Pink 1016 +244 188 172 Peach 1017 +240 180 168 Flesh Pink 1018 +233 172 165 Flesh Pink 1019 +247 136 125 Flamingo 1020 +186 82 47 Old Dark Tex Orange 1021 +234 227 185 Medium Yellow 1022 +243 218 104 Lemon 1023 +255 166 23 Buttercup 1024 +205 129 38 Pollen Gold 1025 +244 188 139 Glow 1026 +154 186 202 Cadet Blue 1027 + 90 137 170 Caribbean Blue 1028 + 46 137 189 Dolphin Blue 1029 +148 169 194 Lake Blue 1030 +199 161 191 Carnatio 1031 +129 108 157 Iris 1032 +110 73 129 Mulberry 1033 +153 66 98 Burgundy 1034 + 99 47 61 Warm Wine 1035 + 89 48 50 Dark Sepia 1036 +190 20 34 Tuxedo Red 1037 +140 47 51 Red Bittersweet 1038 +161 40 49 Red Berry 1039 +138 134 137 Silvery Gray 1040 +110 116 123 Metal 1041 + 33 79 119 Imperial Blue 1042 + 44 52 69 Black 1043 + 46 49 62 Navy 1044 +134 204 191 Seafrost 1045 + 79 172 152 Pale Green 1046 +158 189 162 Mint 1047 +123 149 83 Green Dust 1048 +111 160 77 Spruce 1049 + 69 150 69 Emerald 1050 + 0 135 69 Kelly 1051 + 57 116 116 Imperial Aqua 1052 +231 183 165 Peach 1053 +172 131 122 Tawny Birch 1054 +212 177 143 Cream 1055 +158 105 71 Wicker 1056 +160 113 85 Fawn 1057 +113 70 59 Mushroom 1058 + 66 55 52 Egyptian Brown 1059 +179 166 151 Platinum 1060 +244 218 171 Wheat 1061 +141 134 122 Pale Grey 1062 +124 118 105 Medium Green / Yellow 1063 +255 199 29 Daffodil 1064 +229 120 33 Mango 1065 +245 214 161 Pale Yellow 1066 +240 221 166 Sunshine 1067 +255 188 22 Canary 1068 +255 177 4 Manila 1069 +210 169 112 Yellow Gold 1070 +233 229 220 Natural White 1071 +220 210 189 Aspen White 1072 +204 219 207 Billowing Sail 1073 +149 181 207 Ice Blue 1074 +132 168 200 Baby Blue 1075 + 0 87 150 Blue 1076 +226 67 61 Paprika 1077 +237 83 42 Paprika 1078 + 0 135 79 Kelly 1079 +166 125 169 Medium Pink 1080 +186 48 81 Wildfire 1081 +205 186 166 Ivory 1082 +250 206 90 Moonbeam 1083 +210 185 157 Sea Mist 1084 +184 181 175 White Sand 1085 +199 201 198 Palest Ivory 1086 +188 188 184 Pearl Gray 1087 + 97 169 172 Aquamarine 1088 +108 169 178 Basic Turquoise 1089 + 20 133 137 M. D. Green 1090 + 0 112 128 Dark Aqua Green 1091 +147 194 209 Cadet Blue 1092 + 27 187 201 Indian Ocean Blue 1093 + 0 179 201 Periwinkle 1094 + 0 169 194 Aquamarine 1095 + 0 125 155 Pretty Blue 1096 +175 210 192 Bleached Aqua 1097 + 88 135 115 Blue Surf 1098 +186 193 159 Pastel Green 1099 +190 209 178 Pastel Green 1100 + 72 143 82 Emerald 1101 +182 175 124 Green Haze 1102 + 52 77 59 Holly 1103 +193 197 150 Lime Cream 1104 +171 163 126 Silver Fern 1105 +151 140 84 Crescent Moon 1106 +232 98 118 Shell Pink 1107 +233 139 163 Dusty Rose 1108 +207 77 136 Ruby Glint 1109 +191 47 110 Ruby Glint 1110 +197 173 197 Light Pink 1111 + 83 70 128 Purple Accent 1112 +235 197 192 Pink Mist 1113 +234 186 186 Bisque 1114 +239 187 193 Crystal Pink 1115 +235 173 191 Orchid Pink 1116 +212 98 142 Begonia 1117 +137 145 147 Banner Gray 1118 +156 79 100 K. A. Bronze 1119 +230 186 201 Crystal Pink 1120 +226 175 197 Pink 1121 + 78 53 104 Purple Shadow 1122 +237 224 191 Tusk 1123 +250 199 75 Star Gold 1124 +241 177 60 Manila 1125 +174 125 90 Light Bronze 1126 +220 186 165 Alesan 1127 +162 144 130 Taupe 1128 + 72 57 51 Egyptian Brown 1129 + 73 57 55 Espresso 1130 + 59 52 49 Dark Grey 1131 +136 187 207 Pale Blue 1132 + 39 126 183 Dolphin Blue 1133 + 0 85 146 Fire Blue 1134 +245 215 119 Lemon 1135 +139 121 108 String 1136 +244 140 13 Merit Gold 1137 +204 186 164 Seashell 1138 +128 128 51 Tamarack 1140 +156 113 120 Light Pink 1141 +183 155 143 Whisper Pink 1142 + 75 107 153 Jay Blue 1143 +132 106 87 Light Cocoa 1144 + 94 62 53 Brown 1145 +212 39 39 Saffron 1146 +182 15 47 Foxy Red 1147 +220 139 154 Medium Pink 1148 +220 199 179 Ecru 1149 +219 224 140 Pebblestone 1150 +187 197 206 Cadmium Orange 1151 +250 137 114 Arctic Ice 1152 +172 191 203 Illusion Blue 1153 +216 70 96 Cerise 1154 +245 158 101 Chamois 1155 +120 115 70 Medium Green / Yellow 1156 +119 107 76 Desert Cactus 1157 +121 67 55 Mushroom 1158 +210 161 66 Black Eyed Susie 1159 + 76 114 131 Wonder Blue 1160 + 45 72 81 Deep Windsor 1161 + 31 63 74 Deep Windsor 1162 +128 151 158 Blue Gray 1163 + 83 90 99 Gull 1164 + 30 68 130 Royal 1166 + 35 72 119 Blue Suede 1167 +150 168 78 Sharp Green 1168 +141 153 73 Medium Green 1169 + 90 110 41 Meadow 1170 +240 175 69 Star Gold 1171 +231 152 45 Buttercup 1172 +194 121 63 Almond 1173 +132 58 55 Burgundy 1174 + 59 104 141 Slate Blue 1175 + 0 129 182 Baltic Blue 1176 + 0 109 167 Ocean Blue 1177 +246 105 67 Orange 1178 +201 82 75 Dark Rust 1179 +230 196 74 Daffodil 1180 +137 37 51 Red Berry 1181 +120 43 60 Burgundy 1182 +141 49 82 Cranberry 1183 +189 29 68 Wildfire 1184 + 0 98 94 Imperial Aqua 1185 +169 0 66 Red 1186 +183 24 85 Dark Pink 1187 +122 59 109 Dark Red 1188 + 63 84 53 Holly 1189 +149 127 61 Medium Yellow / Green 1190 +146 112 56 Autumn Green 1191 +169 121 42 Bullion 1192 +180 159 85 Hemp 1193 +113 92 45 Desert Cactus 1194 +143 195 180 Pale Green 1195 +161 130 42 Black Eyed Susie 1196 +181 198 214 Cadet Blue 1198 + 42 46 54 Black 1199 +163 175 179 Pale Silver 1212 +239 178 150 Opaline 1217 +173 114 107 Mahogany Rose 1218 +163 188 184 Sprite 1219 +225 117 120 Pink Icing 1220 +170 65 52 Dark Rust 1221 +233 222 186 Celery 1222 +239 200 44 Canary 1223 +226 188 81 Star Gold 1224 +201 141 71 Pollen Gold 1225 +213 141 100 Buff Orange 1226 +121 156 151 Pale Blue 1227 +109 98 88 Vertiver Green 1228 + 93 81 71 Dark Grey 1229 + 97 78 63 Fungi 1230 +167 153 187 Violet 1232 + 78 69 100 Blackberry 1233 +190 55 99 Dark Pink 1234 +154 104 142 Rose Dust 1235 + 78 42 54 Plum 1236 +129 40 51 Dark Orange / Red 1238 + 87 82 81 Twilight 1239 +114 105 103 Charcoal 1240 + 59 63 69 Black 1241 + 35 61 91 Blue Ink 1242 + 51 60 83 Light Navy 1243 + 45 48 56 Black 1244 + 43 159 132 Seafoam 1245 + 0 139 135 M. D. Green 1246 + 0 147 109 Peppermint 1247 +154 206 105 Sharp Green 1248 + 14 161 70 Harvest Green 1249 + 0 112 71 Dark Green 1250 + 0 145 76 Vibrant Green 1251 + 55 91 99 Deep Atlantic 1252 +205 122 78 Toast 1253 +227 141 129 Flamingo 1254 +193 149 108 Gold 1255 +175 127 86 Sirocco 1256 +156 86 47 Orange / Brown 1257 +126 72 51 Light Cocoa 1258 +119 88 84 Dark Brown 1259 +192 176 133 Wheat 1260 +147 157 195 Pastel Lilac 1261 +126 120 151 Sterling 1263 +147 140 158 Thistle 1264 + 43 83 146 Jamie Blue 1266 +236 226 171 PaleYellow 1267 +228 186 130 Glow 1270 +219 162 114 Impala 1272 +167 140 97 Candied Ginger 1273 +112 168 198 Sky Blue 1274 +121 145 183 Cosmic Sky 1275 + 64 116 151 Pale Purple 1276 + 39 60 82 Blue 1277 +255 102 22 Pumpkin 1278 + 0 129 115 Peppermint 1279 + 0 119 99 Jade 1280 +159 35 63 Atom Red 1281 +106 198 163 Pale Aqua 1282 + 0 98 83 Green Forest 1284 +207 205 202 Dawn Blue 1286 +107 104 105 Metal 1287 +122 121 118 Moon Mist 1288 + 70 152 165 Capri 1289 + 21 75 75 Blue Spruce 1290 + 0 100 115 Mallard Blue 1291 +142 196 195 Light Blue 1292 + 0 109 112 M. D. Green 1293 + 0 129 155 Blue / Green 1294 + 0 140 172 Dark Blue / Green 1295 + 0 95 126 Peacock 1296 + 0 113 163 Baltic Blue 1297 + 0 134 122 Brite Jade 1298 + 0 185 172 Aqua Pearl 1299 + 56 168 125 Bluestone 1301 +122 206 150 Pale Aqua 1302 + 54 64 51 Dark Army Green 1303 + 14 78 63 Dark Green 1304 +193 181 151 Light Green / Yellow 1305 +123 121 102 Arcadian Green 1306 +218 71 81 Scarlet 1307 +107 109 89 Medium Green / Yellow 1308 +214 99 153 Wild Pink 1309 +149 60 115 Hot Peony 1310 +142 139 184 Pale Purple 1311 + 88 73 111 Purple Accent 1312 + 68 53 85 Purple Accent 1313 +228 156 167 Pink Mist 1315 +233 160 155 Emily Pink 1317 + 66 64 71 Dark Grey 1318 +162 102 137 Hot Pink 1319 + 90 64 92 Medium Purple 1320 +225 146 184 Petal Pink 1321 + 65 63 121 Dark Purple / Navy 1322 +205 175 76 Yellow 1323 +152 125 110 Shadow Gray 1328 +124 96 84 Dark Olive Green 1329 + 81 94 151 Violet 1330 + 97 50 103 Mulberry 1334 + 69 101 162 Violet 1335 +110 88 81 Dark Brown 1336 +153 154 135 Pussywillow Gray 1337 +171 143 106 Olive Drab 1338 +167 165 149 Pale Gray Green 1339 +141 132 48 Crescent Moon 1340 +164 100 98 K. A. Bronze 1341 +193 153 136 Amber Beige 1342 + 53 56 98 Blue Ink 1343 +143 113 84 Beige 1344 +118 91 52 Earthen Tan 1347 +121 93 60 Earthen Tan 1348 +237 206 136 Pale Yellow 1349 +181 163 72 Green / Gold 1350 + 20 90 74 Green Bay 1351 +184 139 48 Black Eyed Susie 1352 + 79 107 128 Slate Blue 1353 +204 75 109 Cerise 1354 +181 153 161 Rose Beige 1356 + 72 70 52 Green 1357 +119 77 77 Dark Brown 1358 +207 152 45 Pollen Gold 1359 +118 145 161 Country Blue 1360 + 94 96 94 Medium Grey 1361 + 81 76 94 Light Midnight 1362 +121 129 145 Purple Cloud 1363 + 71 89 110 Lake Blue 1364 + 64 73 95 Light Midnight 1365 + 44 53 107 Violet Blue 1366 + 45 47 55 Navy 1367 + 42 55 74 Blue Ribbon 1368 + 58 121 62 Kelly 1369 + 35 79 59 Evergreen 1370 + 32 84 78 Green 1371 +240 166 83 Scholastic 1372 + 89 154 181 Ozone 1373 + 96 44 49 Warm Wine 1374 + 60 125 158 Pale Purple 1375 + 35 77 103 Salem Blue 1376 +113 172 107 Neon Green 1377 +221 56 35 Sunkist 1378 +225 84 69 Coral 1379 + 0 153 134 Bluestone 1380 +140 40 66 Cabernet 1381 +101 61 71 Dark Maroon 1382 +156 31 84 Cherrystone 1383 +110 43 56 Wine 1384 + 97 37 51 Wine 1385 + 77 48 61 Plum 1386 +116 103 126 Light Grape 1387 + 92 53 81 Medium Purple 1388 +115 46 74 Brushed Burgundy 1389 + 44 69 61 Dark Green 1390 + 78 107 97 Green Forest 1391 +106 122 106 Harbor Green 1392 + 65 65 55 Hedge 1393 + 80 84 67 Green / Yellow 1394 + 61 73 63 Mitchell Green 1395 + 81 97 80 Water Lilly 1396 + 33 69 59 Evergreen 1397 diff --git a/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Marathon Polyester.gpl b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Marathon Polyester.gpl new file mode 100644 index 00000000..4bae92d1 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Marathon Polyester.gpl @@ -0,0 +1,305 @@ +GIMP Palette +Name: Ink/Stitch: Marathon Polyester +Columns: 4 +# RGB Value Color Name Number +250 230 16 Daffodil 2005 +254 119 88 Persimmon 2007 +239 29 120 Cherry Blossom 2010 +127 187 0 Green Dust 2015 +241 235 135 Pale Yellow 2016 +238 231 93 Light Yellow 2017 +249 231 21 Daffodil 2018 +249 223 22 Moonbeam 2019 +250 215 22 Canary 2020 +254 200 31 Buttercup 2021 +235 177 16 Gold 2022 +240 179 47 Yellow Poppy 2023 +254 183 120 Buff Orange 2024 +192 146 12 Old Gold 2025 +221 205 106 Pale Yellow 2026 +182 172 89 Pale Green / Yellow 2027 +153 144 8 Sun Shadow 2028 +204 122 2 Almond 2029 +175 117 6 Copper 2030 +243 209 190 Grape 2031 +181 145 125 Roebuck 2032 +244 191 210 Memphis Belle 2033 +242 176 194 Carnatio 2034 +250 176 174 Emily Pink 2035 +251 133 142 Azalea 2036 +220 129 140 Medium Pink 2037 +229 77 125 Azalea 2039 +189 55 121 Dark Pink 2040 +226 41 130 Ruby Glint 2041 +208 0 87 Dark Pink 2042 +225 7 71 Cerise 2043 +207 19 38 Foxy Red 2044 +192 11 49 Very Red 2045 +240 182 160 Blossom 2046 +251 144 110 Melon 2047 +252 136 69 Golden Poppy 2048 +232 117 19 Golden Poppy 2049 +228 141 6 Dark Yellow 2050 +223 89 0 Orange 2051 +222 79 4 Orange 2052 +250 64 37 Paprika 2053 +168 12 54 Atom Red 2054 +140 37 50 Burgundy 2055 +144 36 68 Perfect Ruby 2056 +126 31 63 Maroon 2057 +112 25 61 Red Licorice 2058 +155 0 111 Medium Purple 2059 +133 34 108 Grape Wine 2060 +118 179 223 Ultra Blue 2062 +165 187 224 Cristy Blue 2063 +167 176 213 Light Purple 2064 +118 170 220 Caribbean Blue 2065 + 58 117 196 Dolphin Blue 2066 + 0 85 160 Solar Blue 2067 + 47 52 142 Blue 2068 + 0 56 147 Fire Blue 2069 + 0 51 127 Blue Suede 2070 + 37 85 126 Lake Blue 2071 + 15 44 92 Blue Ribbon 2072 + 14 29 71 Light Navy 2073 + 0 69 89 Deep Windsor 2075 +225 206 224 Rose Pink 2076 +207 162 212 Light Pink 2078 +158 146 199 Violet Tulip 2079 +138 119 185 Mauve 2080 +170 116 192 Iris 2081 +142 72 173 Laurie Lilac 2082 + 79 34 113 Purple Accent 2083 + 90 19 142 Dark Purple 2084 + 70 36 90 Purple Accent 2085 + 57 26 122 Purple Maze 2086 + 30 29 120 Royal 2088 +152 215 223 Blue Frost 2090 +113 207 227 Basic Turquoise 2091 + 42 197 218 Periwinkle 2092 + 0 152 180 Dark Blue / Green 2093 + 0 113 159 Dark Turquoise Blue 2095 + 0 115 116 M. D. Green 2097 +196 207 190 Almost Aqua 2098 +187 218 11 Dark Green 2100 +170 221 110 Spruce 2101 + 0 124 88 Irish Green 2103 + 0 152 135 Peppermint 2104 + 0 106 83 Green Bay 2105 + 0 109 102 Imperial Aqua 2106 + 0 126 103 Jungle Green 2108 + 0 106 91 Green Forest 2109 + 59 119 42 Green 2110 + 87 99 20 Palmetto 2111 + 74 70 19 Khaki 2113 + 35 70 54 Mitchell Green 2114 +233 226 215 Palest Ivory 2115 +229 198 171 Pale Peach 2120 +216 180 150 Amber Beige 2121 +227 191 155 Gold 2123 +254 213 145 Impala 2126 +179 131 96 Fawn 2127 + 92 71 36 Dark Olive Green 2130 +117 85 38 Light Cocoa 2131 +177 39 38 Red Berry 2132 +126 45 36 Burgundy 2133 +100 56 38 Dark Brown 2135 +213 216 212 Blue Blush 2137 +220 211 211 Pearl Gray 2138 +174 175 171 Traditional Gray 2139 +146 150 148 Banner Gray 2140 + 43 44 42 Dark Grey 2150 +139 215 0 Erin Green 2151 +255 82 52 Neon Orange 2152 +255 57 66 Fluo Pink 2153 +244 237 177 Tender Yellow 2154 +246 237 72 Lemon 2155 +253 180 21 Merit Gold 2156 +252 164 18 Mango 2157 +248 231 171 Tusk 2158 +241 191 74 Penny 2159 +251 186 131 Apricot Wash 2160 +180 140 11 Shimmering Gold 2162 +242 214 217 Light Pink 2163 +252 191 201 Pink 2164 +236 123 159 Floral Pink 2166 +236 41 148 Ruby Glint 2167 +212 4 72 Strawberry 2168 +174 1 92 Ruby Glint 2169 +251 224 225 Ivory 2170 +248 210 205 Crystal Pink 2171 +243 209 201 Crystal Pink 2172 +249 200 172 Peach 2173 +241 197 176 Bisque 2174 +222 117 0 Marigold 2175 +226 62 40 Honeysuckle 2176 +244 201 201 Crystal Pink 2177 +251 191 195 Orchid Pink 2178 +241 104 119 Dusty Rose 2179 +161 48 50 Terra Cotta 2180 +193 57 40 Dark Rust 2181 +216 30 4 Orange / Red 2182 +244 71 107 Bashful Pink 2183 +194 4 55 Wildfire 2184 +144 5 83 Dark Red 2185 + 96 32 69 Medium Purple 2186 +196 213 214 Pastel Blue 2187 +196 218 226 Cadet Blue 2188 +147 183 210 Baby Blue 2189 +102 137 205 Bright Blue 2191 + 89 97 169 Soldier Blue 2192 + 0 51 127 Blue Suede 2195 + 0 43 127 Blue Suede 2196 +128 139 192 Oriental Blue 2197 + 97 176 221 Ozone 2198 + 52 86 134 Imperial Blue 2199 + 0 38 75 Blue Ribbon 2201 +187 176 211 Pastel Lilac 2202 +180 145 210 Pale Purple 2203 +212 107 199 Medium Pink 2204 +116 82 189 Violet 2208 + 17 32 81 Light Navy 2209 + 38 16 84 Dark Purple / Navy 2210 +179 103 133 Medium Purple 2211 + 89 52 68 Intense Maroon 2212 + 0 179 170 M. D. Green 2214 + 0 133 144 Oceanic Green 2215 + 0 106 119 Mallard Blue 2216 + 0 134 137 J. Turquoise 2217 + 0 141 129 Brite Jade 2218 + 0 101 100 Garden Green 2219 + 0 70 83 Blue Spruce 2220 + 0 65 83 Deep Windsor 2221 + 0 53 58 Dark Blue 2222 +202 232 223 Light Blue 2223 +204 227 222 Soothing Sea 2224 +209 228 212 Blue Glass 2225 +187 224 225 Bleached Aqua 2226 +149 222 219 Mint Julep 2227 + 82 192 226 Medium Blue / Green 2229 + 0 163 222 Mid Windsor 2231 + 0 115 198 Medium Blue 2232 + 0 131 155 Dark Aqua Green 2233 +155 219 194 Pale Aqua 2237 + 91 191 33 Green 2241 + 0 123 62 Kelly 2242 + 0 154 119 Peacock Green 2243 + 0 97 87 Green Forest 2244 +212 233 164 Dark Olive Green 2245 +112 149 2 Meadow Green 2246 + 87 143 21 Meadow 2247 + 86 106 33 Pale Green 2250 + 3 74 49 Evergreen 2251 + 34 83 65 Field Green 2252 + 66 72 23 Green 2253 + 36 59 46 Dark Army Green 2254 +230 220 186 Cocoa Mulch 2255 +178 172 113 Silver Fern 2256 +122 169 145 Moss 2262 +141 176 174 Pale Blue 2265 +194 168 117 Rattan 2275 +126 81 61 Dark Brown 2283 + 64 49 44 Espresso 2285 +250 202 162 New Gold 2286 +250 192 157 Tawny 2287 +234 170 123 Bamboo 2288 +157 83 10 Orange / Brown 2289 +143 75 4 Orange / Brown 2290 +122 65 42 Brown 2291 +166 163 157 Pale Grey 2292 +224 202 203 Orchid Tint 2294 +223 219 210 Vapor 2298 +146 162 153 Jadeite 2301 + 3 41 59 Navy 2306 +252 201 161 Peach Fuzz 2006 +237 181 199 Lilac Sachet 2008 +237 156 181 Begonia Pink 2009 +230 143 168 Rosebloom 2011 +230 143 168 Rosebloom 2012 +227 135 130 Strawberry Ice 2013 +250 201 161 Almond Cream 2125 +235 179 140 Grain 2161 +227 173 181 Cameo Pink 2165 +227 153 161 Sea Pink 2038 +171 204 217 Crystal Blue 2061 +130 158 201 Della Robbia Blue 2190 +102 117 171 Wedgewood 2193 +110 115 158 Bleached Denim 2194 +125 133 153 Tempest 2200 +135 120 130 Gray Ridge 2074 +212 184 194 Winsome Orchid 2077 +163 158 191 Sweet Lavender 2205 +143 138 176 Persian Violet 2206 +143 130 148 Dusk 2207 +115 107 153 Dusted Peri 2087 +117 105 120 Purple Sage 2213 +112 173 176 Light Clear Blue 2096 +189 227 219 Bleached Aqua 2089 +171 204 217 Crystal Blue 2228 +110 166 204 Alaskan Blue 2230 +115 161 189 Cobalt 2094 +214 232 196 Ambrosia 2234 +214 232 196 Ambrosia 2099 +171 209 186 Bird Egg Green 2235 +166 217 168 Green Ash 2236 +153 199 176 Ocean Wave 2238 +107 181 176 Blue Turquoise 2239 + 97 189 153 Spearmint 2102 +143 191 135 Brilliant Green 2240 +168 166 125 Sage Green 2248 +153 145 122 Seneca Rock 2249 +115 130 128 Stormy Sea 2112 +173 191 171 Sea Foam 2257 +194 186 173 Silver Lining 2258 +194 186 173 Silver Lining 2259 +196 227 204 Misty Jade 2260 +161 176 166 Aqua Gray 2261 +161 176 166 Aqua Gray 2263 +161 176 166 Aqua Gray 2264 +135 161 166 Tourmaline 2266 +102 130 140 Smoke Blue 2267 + 0 68 55 Evergreen 2107 + 0 68 55 Evergreen 2268 + 0 68 55 Evergreen 2269 + 0 68 55 Evergreen 2270 +245 240 232 Cloud Dancer 2271 +247 240 232 Star White 2116 +235 219 209 Pastel Parchment 2272 +247 237 219 Whisper White 2117 +222 207 186 Whisper Pink 2118 +222 207 194 Crystal Gray 2273 +237 214 194 Shell 2119 +227 196 181 Peach Whip 2274 +199 191 176 Gray Morn 2122 +176 163 145 Simply Taupe 2276 +179 166 153 String 2277 +191 161 148 Adobe Rose 2278 +201 168 143 Rugby Tan 2128 +181 171 158 Gray 2279 +179 166 153 String 2280 +179 158 145 Sphinx 2124 +194 173 158 Mushroom 2281 +179 158 145 Sphinx 2282 +156 130 130 Quail 2129 +135 120 130 Gray Ridge 2284 +138 112 112 Twilight Mauve 2134 +196 186 186 Lilac Gray 2141 +214 196 191 Hushed Violet 2142 +196 186 186 Lilac Gray 2293 +150 140 148 Silver Rose 2295 +145 138 135 Gull 2296 +161 158 168 Lavender Aura 2144 +171 163 161 Gull Gray 2145 +224 214 204 White Sand 2297 +214 217 209 Blue Blush 2136 +173 184 186 Pearl Blue 2299 +179 181 176 Highrise 2300 +171 163 161 Gull Gray 2302 +166 163 171 Dapple Gray 2303 +189 181 196 Thistle 2143 +153 158 184 Purple Cloud 2146 +150 140 148 Silver Rose 2304 +135 120 130 Gray Ridge 2147 +143 130 148 Dusk 2148 +135 120 130 Gray Ridge 2305 +247 237 222 Snow White 2149 diff --git a/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Marathon Rayon V3.gpl b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Marathon Rayon V3.gpl new file mode 100644 index 00000000..31eb396d --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Marathon Rayon V3.gpl @@ -0,0 +1,388 @@ +GIMP Palette +Name: Ink/Stitch: Marathon Rayon V3 +Columns: 4 +# RGB Value Color Name Number +245 238 126 Medium Yellow 1004 +249 231 21 Daffodil 1005 +198 174 15 Black Eyed Susie 1018 +249 229 39 Canary Yellow 1007 +249 223 22 Moonbeam 1008 +250 215 22 Canary 1009 +199 161 14 Black Eyed Susie 1187 +253 218 87 Star Gold 1011 +253 218 87 Star Gold 1405 +254 200 31 Buttercup 1188 +224 170 15 Pollen Gold 1404 +235 177 16 Gold 1219 +235 177 16 Gold 1425 +253 190 73 Scholastic 1189 +175 117 6 Copper 1224 +240 179 47 Yellow Poppy 1012 +199 127 7 Almond 1015 +247 127 0 Pumpkin 1333 +232 117 19 Golden Poppy 1043 +252 158 113 Cadmium Orange 1041 +250 99 2 Dark Tex Orange 1045 +247 74 3 Sunkist 1046 +251 129 128 Shell Pink 1051 +251 95 88 Coral 1436 +226 62 40 Honeysuckle 1194 +193 57 40 Dark Rust 1157 +251 191 195 Orchid Pink 1032 +233 19 47 Rosewood 1048 +207 19 38 Foxy Red 1050 +207 19 38 Foxy Red 1419 +124 33 41 Burgundy 1158 +255 162 178 Dusty Rose 1192 +252 117 143 Azalea 1034 +230 6 58 Cerise 1335 +218 28 63 Rosewood 1052 +162 37 56 Wildfire 1243 +242 176 194 Carnatio 1022 +176 0 61 Candy Apple Red 1438 +118 39 60 Red Jubilee 1156 +255 160 190 Petal Pink 1227 +249 78 143 Begonia 1024 +234 16 106 Cherry Blossom 1025 +203 3 86 Dark Pink 1026 +166 4 69 Burgundy 1155 +126 31 63 Maroon 1244 +244 191 210 Memphis Belle 1021 +244 191 210 Memphis Belle 1437 +237 114 171 Floral Pink 1027 +226 41 130 Ruby Glint 1329 +112 25 61 Red Licorice 1246 +214 2 112 Crimson 1232 +109 32 65 Brushed Burgundy 1196 +109 32 65 Brushed Burgundy 1429 +251 177 212 Pale Pink 1193 +173 0 118 New Berry 1153 +162 5 127 New Berry 1336 +225 206 224 Rose Pink 1073 +198 171 219 Tulip 1261 +187 176 211 Pastel Lilac 1195 +158 146 199 Violet Tulip 1260 +102 137 205 Bright Blue 1063 +156 196 226 Sky Blue 1062 +118 170 220 Caribbean Blue 1058 + 58 117 196 Dolphin Blue 1064 +169 206 227 Sky Blue 1057 +169 206 227 Sky Blue 1411 + 0 82 186 Ocean Blue 1253 + 0 163 222 Mid Windsor 1059 + 0 115 198 Medium Blue 1097 + 0 78 110 Peacock 1098 + 0 64 83 Deep Windsor 1072 +114 210 223 Turquoise 1099 + 42 197 218 Periwinkle 1100 + 0 174 200 Aquamarine 1101 +149 222 219 Mint Julep 1266 + 0 157 160 Cyan 1277 + 0 134 137 J. Turquoise 1274 + 0 115 116 M. D. Green 1107 +170 222 213 Mint Julep 1093 + 0 141 129 Brite Jade 1279 + 0 120 112 Fern Green 1106 + 0 109 102 Imperial Aqua 1209 + 0 152 125 Peacock Green 1207 +123 210 182 Pale Green 1113 + 0 106 83 Green Bay 1343 + 0 86 65 Dark Green 1346 +180 226 192 Mint 1272 +150 218 176 Pale Aqua 1111 +111 206 156 Seafoam 1112 + 0 158 96 Vibrant Green 1342 + 0 134 81 Dark Green 1116 + 36 79 50 Dark Green 1344 + 36 79 50 Dark Green 1403 + 0 183 96 Bright Green 1285 + 0 183 96 Bright Green 1435 + 0 157 75 Vibrant Green 1115 + 31 181 59 Harvest Green 1125 + 52 159 54 Emerald 1448 + 62 144 50 Kelly 1126 +212 233 164 Dark Olive Green 1119 +170 221 110 Spruce 1121 + 86 172 27 Green / Yellow 1123 + 87 143 21 Meadow 1284 +187 232 96 Sharp Green 1120 +187 232 96 Sharp Green 1423 +186 196 6 Dark Green 1122 +157 157 8 Tamarack 1221 +242 239 134 Medium Yellow 1003 +103 88 77 Dark Taupe 1414 +146 150 148 Banner Gray 1319 +103 109 111 Metal 1321 +103 109 111 Metal 1408 + 70 78 82 Midnight 1216 +137 143 140 Platinum 1320 + 74 76 73 Dark Grey 1178 +215 204 175 Seashell 1300 +227 217 192 Birch 1299 +227 214 125 Popcorn 1017 +210 190 145 Taupe 1406 +221 204 165 Sea Mist 1132 +234 170 123 Bamboo 1138 +100 56 38 Dark Brown 1161 +176 137 113 Tawny Birch 1140 +240 182 160 Blossom 1040 +240 182 160 Blossom 1426 +241 197 176 Bisque 1039 +243 209 190 Grape 1326 +146 52 56 Dark Orange / Red 1159 +220 129 140 Medium Pink 1035 +246 189 191 Desert Bloom 1031 + 82 42 37 Dark Brown 1308 +245 210 205 Crystal Pink 1037 +217 133 189 Medium Pink 1239 + 81 47 70 Dark Maroon 1241 +226 204 212 Orchid Ice 1166 + 82 37 84 Port Wine 1089 +207 162 212 Light Pink 1075 +215 177 215 Palest Mauve 1074 + 54 64 92 Light Midnight 1324 +196 198 206 Light Purple 1164 +213 212 213 Illusion Blue 1311 + 0 49 75 Blue Ribbon 1070 + 0 51 91 Blue 1204 + 94 152 172 Wonder Blue 1250 +163 193 202 Canal Blue 1056 + 35 70 54 Mitchell Green 1298 + 43 76 64 Harbor Green 1345 +209 228 212 Blue Glass 1092 +204 230 213 Blue Glass 1110 + 74 89 41 Green / Yellow 1294 + 84 119 49 Sage 1172 +241 235 135 Pale Yellow 1006 +182 172 89 Pale Green / Yellow 1016 +166 190 171 Sea Foam 1168 +204 227 222 Soothing Sea 1091 + 0 161 185 Marine Aqua 1278 + 0 127 152 Dark Aqua Green 1341 + 0 101 128 Dark Blue 1108 +187 224 225 Bleached Aqua 1205 + 0 160 196 California Blue 1103 + 0 122 167 Pretty Blue 1271 + 37 85 126 Lake Blue 1325 + 0 48 94 Blue 1068 +110 134 169 Slate Blue 1176 + 14 29 71 Light Navy 1413 + 89 97 169 Soldier Blue 1200 + 47 52 142 Blue 1254 + 13 25 117 Royal Blue 1069 +226 212 214 Orchid Ice 1212 +103 75 118 Jazz Purple 1088 + 72 43 88 Blackberry 1090 +242 214 217 Light Pink 1019 +240 199 211 Pink Bazaar 1020 +183 114 144 Rose Dust 1149 +128 42 80 Wine 1331 +179 103 133 Medium Purple 1148 +202 140 141 Salmon 1428 +232 136 144 Light Orange 1332 +251 221 214 Rosewater 1030 +253 173 177 Emily Pink 1033 +225 67 81 Medium Red / Orange 1053 +239 197 157 Opaline 1131 +231 179 131 Gold 1302 +208 143 85 Ashley Gold 1433 +211 168 125 Tan 1451 +193 144 97 Light Bronze 1141 +248 231 171 Tusk 1010 +250 224 139 Wheat 1183 +253 180 21 Merit Gold 1420 +192 146 12 Old Gold 1450 +251 155 14 Honeydew 1190 +254 183 120 Buff Orange 1233 +255 153 64 Orange 1042 +246 126 0 Pumpkin 1044 +222 79 4 Orange 1402 +251 157 163 Flamingo Pink 1234 +215 42 41 Tuxedo Red 1049 +205 46 49 Spanish Red 1334 + 93 46 41 Coffee Bean 1160 +225 7 71 Cerise 1328 +194 4 55 Wildfire 1424 +168 12 54 Atom Red 1054 +149 23 55 Cabernet 1459 +155 0 111 Medium Purple 1154 +217 168 217 Mid Lilac 1076 +186 124 189 Purple 1077 +135 43 149 Dark Purple 1410 + 87 12 112 Royal Purple 1080 +155 109 200 Amethyst 1081 +137 80 191 Amethyst 1082 +192 209 229 Cadet Blue 1060 +165 161 214 Light Purple 1085 +165 187 224 Cristy Blue 1197 + 93 120 203 Jay Blue 1247 +116 82 189 Violet 1263 +103 87 189 Violet 1201 + 95 105 196 Violet 1248 + 75 49 173 Violet Blue 1086 + 30 29 120 Royal 1202 + 30 29 120 Royal 1440 + 52 40 117 Violet Blue 1084 + 44 38 92 Blue Ink 1203 + 0 62 106 Salem Blue 1256 + 0 62 106 Salem Blue 1441 + 82 192 226 Medium Blue / Green 1270 + 0 167 219 Surf Blue 1095 + 0 70 83 Blue Spruce 1071 +127 215 220 Turquoise 1267 + 0 184 200 Aquamarine 1275 + 0 184 200 Aquamarine 1431 + 0 133 144 Oceanic Green 1327 +122 211 193 Tropical Wave 1104 + 0 193 182 M. D. Green 1105 + 0 175 153 Bluestone 1434 + 0 152 135 Peppermint 1118 + 0 97 87 Green Forest 1289 + 0 131 115 Greenstone 1208 + 0 106 91 Green Forest 1117 + 0 80 66 Dark Green 1290 + 0 68 55 Evergreen 1347 + 0 201 147 Bluestone 1114 + 3 74 49 Evergreen 1442 + 3 74 49 Evergreen 1443 +141 89 50 Light Cocoa 1144 +126 81 61 Dark Brown 1307 +154 113 92 Orange / Brown 1422 +204 175 183 Rose Beige 1145 + 72 40 54 Plum 1242 +203 194 200 Skylight 1165 +175 188 192 Celestial Blue 1401 +213 216 212 Blue Blush 1210 + 0 53 58 Dark Blue 1293 +177 187 178 Light Grey / Green 1175 +121 146 129 Olive 1446 +150 171 154 Moss 1170 + 85 105 86 Water Lilly 1296 + 64 74 38 Hedge 1297 +180 181 143 Oxford Tan 1301 +200 199 165 Pale Gray Green 1339 + 74 70 19 Khaki 1295 +242 242 226 Natural White 1001 +248 241 211 Eggshell 1002 +250 233 212 Ivory 1182 +227 208 185 Tapioca 1127 +227 210 195 Crystal Gray 1184 +230 209 197 Peach Blush 1128 +246 229 229 Oyster 1029 +213 232 205 Ambrosia 1109 + 0 151 212 Baltic Blue 1102 + 56 56 56 Black 1180 + 66 46 45 Brown Mule 1310 +233 226 215 Palest Ivory 1312 +187 183 175 Skylight 1316 + 0 145 202 Blue / Green 1096 +239 43 47 Scarlet 1047 + 14 27 141 Blue 1066 +236 0 146 Fuschia 1230 +164 151 136 Goat 1421 + 0 80 66 Dark Green 1292 + 0 80 66 Dark Green 1291 +237 156 181 Begonia Pink 1023 +222 120 153 Wild Orchid 1028 +209 138 150 Cashmere Rose 1229 +153 99 117 Bordeaux 1152 +217 158 194 Orchid 1150 +227 135 130 Strawberry Ice 1409 +209 135 133 Brandied Apricot 1036 +173 107 117 Heather Rose 1151 +201 171 171 Burnished Lilac 1136 +181 138 143 Lilas 1427 +135 105 107 Grape Shake 1417 +204 148 148 Blush 1418 +186 153 161 Mauve Shadows 1146 +130 112 158 Aster Purple 1262 +112 97 143 Veronica 1083 +138 117 150 Purple Haze 1439 +138 117 150 Purple Haze 1079 +181 138 179 African Violet 1078 +186 143 166 Grayish Lavender 1147 +102 117 171 Wedgewood 1065 +209 212 214 Illusion Blue 1055 +166 201 212 Aquamarine 1094 +125 125 176 Deep Periwinkle 1249 +125 125 163 Lavender Violet 1067 +140 161 209 Vista Blue 1061 +115 107 153 Dusted Peri 1255 +110 184 176 Pool Blue 1276 +120 128 150 Purple Dusk 1407 +125 133 153 Tempest 1432 +163 184 209 Powder Blue 1198 +115 138 179 Allure 1199 + 99 158 158 Dusty Turquoise 1287 +102 150 130 Malachite Green 1444 +112 181 128 Absinthe Green 1124 +247 237 219 Whisper White 1348 +227 219 196 White Asparagus 1181 +173 168 148 Abbey Stone 1445 +179 176 161 Pussywillow Gray 1206 +161 158 145 Flint Gray 1340 +148 163 150 Jadeite 1282 +171 191 176 Grayish Green 1169 +199 209 194 Pale Aqua 1265 +140 173 168 Aquifer 1171 +143 156 156 Slate 1288 +125 120 102 Vertiver Green 1173 +140 135 115 Laurel Oak 1330 +148 148 122 Tea 1460 +209 204 158 Hay 1447 +235 214 163 Banana Crepe 1449 +235 179 140 Grain 1014 +247 140 97 Melon 1191 +232 181 150 Almost Apricot 1013 +181 163 133 Nomad 1186 +179 158 140 Light Taupe 1338 +222 184 140 Sheepskin 1430 +148 120 110 Antler 1143 +171 145 122 Almondine 1452 +176 163 145 Simply Taupe 1337 +179 158 145 Sphinx 1303 +194 173 158 Mushroom 1134 +166 158 153 Opal Gray 1135 +179 158 145 Sphinx 1304 +176 148 138 Fawn 1412 +181 125 115 Old Rose 1306 +179 145 125 Roebuck 1139 +194 173 158 Mushroom 1130 +212 184 166 Rose Smoke 1185 +232 204 176 Crean Tan 1129 +232 176 156 Dusty Pink 1137 +181 125 115 Old Rose 1305 +156 130 130 Quail 1416 +171 163 161 Gull Gray 1214 +135 125 153 Daybreak 1087 +135 120 130 Gray Ridge 1323 +135 120 130 Gray Ridge 1458 +150 140 148 Silver Rose 1322 +166 163 171 Dapple Gray 1213 +171 163 161 Gull Gray 1215 +184 173 166 Ashes of Roses 1317 +199 189 173 Silver Gray 1454 +181 171 158 Gray 1133 +135 120 130 Gray Ridge 1415 +138 112 112 Twilight Mauve 1162 +150 140 148 Silver Rose 1174 +214 196 191 Hushed Violet 1211 +189 184 168 Silver Cloud 1453 +209 209 199 Foggy Dew 1163 +194 194 194 Vapor Blue 1314 +145 138 135 Gull 1455 +148 135 145 Purple Ash 1457 +150 140 148 Silver Rose 1177 +179 181 176 Highrise 1318 +138 133 133 Frost Gray 1456 +237 232 222 Lily White 1179 +227 214 191 White Swan 4001 +217 194 148 Marzipan 4003 +217 194 148 Marzipan 4009 +227 217 196 Birch 4004 +219 209 166 Sea Mist 4005 +227 204 145 Straw 4006 +230 196 133 Sahara Sun 4007 +237 209 194 Peach Blush 1038 +171 145 125 Stucco 1142 +179 181 176 Highrise 1167 diff --git a/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Marathon Rayon.gpl b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Marathon Rayon.gpl new file mode 100644 index 00000000..c70f8646 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Marathon Rayon.gpl @@ -0,0 +1,321 @@ +GIMP Palette +Name: Ink/Stitch: Marathon Rayon +Columns: 4 +# RGB Value Color Name Number +242 242 226 Natural White 1001 +248 241 211 Eggshell 1002 +242 239 134 Medium Yellow 1003 +245 238 126 Medium Yellow 1004 +249 231 21 Daffodil 1005 +241 235 135 Pale Yellow 1006 +249 229 39 Canary Yellow 1007 +249 223 22 Moonbeam 1008 +250 215 22 Canary 1009 +248 231 171 Tusk 1010 +253 218 87 Star Gold 1011 +240 179 47 Yellow Poppy 1012 +199 127 7 Almond 1015 +182 172 89 Pale Green / Yellow 1016 +227 214 125 Popcorn 1017 +198 174 15 Black Eyed Susie 1018 +242 214 217 Light Pink 1019 +240 199 211 Pink Bazaar 1020 +244 191 210 Memphis Belle 1021 +242 176 194 Carnatio 1022 +249 78 143 Begonia 1024 +234 16 106 Cherry Blossom 1025 +203 3 86 Dark Pink 1026 +237 114 171 Floral Pink 1027 +246 229 229 Oyster 1029 +251 221 214 Rosewater 1030 +246 189 191 Desert Bloom 1031 +251 191 195 Orchid Pink 1032 +253 173 177 Emily Pink 1033 +252 117 143 Azalea 1034 +220 129 140 Medium Pink 1035 +245 210 205 Crystal Pink 1037 +248 210 205 Crystal Pink 1038 +241 197 176 Bisque 1039 +240 182 160 Blossom 1040 +252 158 113 Cadmium Orange 1041 +255 153 64 Orange 1042 +232 117 19 Golden Poppy 1043 +246 126 0 Pumpkin 1044 +250 99 2 Dark Tex Orange 1045 +247 74 3 Sunkist 1046 +239 43 47 Scarlet 1047 +233 19 47 Rosewood 1048 +215 42 41 Tuxedo Red 1049 +207 19 38 Foxy Red 1050 +251 129 128 Shell Pink 1051 +218 28 63 Rosewood 1052 +225 67 81 Medium Red / Orange 1053 +168 12 54 Atom Red 1054 +163 193 202 Canal Blue 1056 +169 206 227 Sky Blue 1057 +118 170 220 Caribbean Blue 1058 + 0 163 222 Mid Windsor 1059 +192 209 229 Cadet Blue 1060 +156 196 226 Sky Blue 1062 +102 137 205 Bright Blue 1063 + 58 117 196 Dolphin Blue 1064 + 14 27 141 Blue 1066 + 0 48 94 Blue 1068 + 13 25 117 Royal Blue 1069 + 0 49 75 Blue Ribbon 1070 + 0 70 83 Blue Spruce 1071 + 0 64 83 Deep Windsor 1072 +225 206 224 Rose Pink 1073 +215 177 215 Palest Mauve 1074 +207 162 212 Light Pink 1075 +217 168 217 Mid Lilac 1076 +186 124 189 Purple 1077 + 87 12 112 Royal Purple 1080 +155 109 200 Amethyst 1081 +137 80 191 Amethyst 1082 + 52 40 117 Violet Blue 1084 +165 161 214 Light Purple 1085 + 75 49 173 Violet Blue 1086 +179 103 133 Medium Purple 1088 + 82 37 84 Port Wine 1089 + 72 43 88 Blackberry 1090 +204 227 222 Soothing Sea 1091 +209 228 212 Blue Glass 1092 +170 222 213 Mint Julep 1093 + 0 167 219 Surf Blue 1095 + 0 145 202 Blue / Green 1096 + 0 115 198 Medium Blue 1097 + 0 78 110 Peacock 1098 +114 210 223 Turquoise 1099 + 42 197 218 Periwinkle 1100 + 0 174 200 Aquamarine 1101 + 0 151 212 Baltic Blue 1102 + 0 160 196 California Blue 1103 +122 211 193 Tropical Wave 1104 + 0 193 182 M. D. Green 1105 + 0 120 112 Fern Green 1106 + 0 115 116 M. D. Green 1107 + 0 101 128 Dark Blue 1108 +213 232 205 Ambrosia 1109 +204 230 213 Blue Glass 1110 +150 218 176 Pale Aqua 1111 +111 206 156 Seafoam 1112 +123 210 182 Pale Green 1113 + 0 201 147 Bluestone 1114 + 0 157 75 Vibrant Green 1115 + 0 134 81 Dark Green 1116 + 0 106 91 Green Forest 1117 + 0 152 135 Peppermint 1118 +212 233 164 Dark Olive Green 1119 +187 232 96 Sharp Green 1120 +170 221 110 Spruce 1121 +186 196 6 Dark Green 1122 + 86 172 27 Green / Yellow 1123 + 31 181 59 Harvest Green 1125 + 62 144 50 Kelly 1126 +227 208 185 Tapioca 1127 +239 197 157 Opaline 1131 +221 204 165 Sea Mist 1132 +234 170 123 Bamboo 1138 +176 137 113 Tawny Birch 1140 +193 144 97 Light Bronze 1141 +179 131 96 Fawn 1142 +141 89 50 Light Cocoa 1144 +204 175 183 Rose Beige 1145 +179 103 133 Medium Purple 1148 +183 114 144 Rose Dust 1149 +173 0 118 New Berry 1153 +155 0 111 Medium Purple 1154 +166 4 69 Burgundy 1155 +118 39 60 Red Jubilee 1156 +193 57 40 Dark Rust 1157 +124 33 41 Burgundy 1158 +146 52 56 Dark Orange / Red 1159 + 93 46 41 Coffee Bean 1160 +100 56 38 Dark Brown 1161 +196 198 206 Light Purple 1164 +203 194 200 Skylight 1165 +226 204 212 Orchid Ice 1166 +175 188 192 Celestial Blue 1167 +166 190 171 Sea Foam 1168 +150 171 154 Moss 1170 + 84 119 49 Sage 1172 +177 187 178 Light Grey / Green 1175 +110 134 169 Slate Blue 1176 + 74 76 73 Dark Grey 1178 + 56 56 56 Black 1180 +250 233 212 Ivory 1182 +250 224 139 Wheat 1183 +227 210 195 Crystal Gray 1184 +199 161 14 Black Eyed Susie 1187 +254 200 31 Buttercup 1188 +253 190 73 Scholastic 1189 +251 155 14 Honeydew 1190 +255 162 178 Dusty Rose 1192 +251 177 212 Pale Pink 1193 +226 62 40 Honeysuckle 1194 +187 176 211 Pastel Lilac 1195 +109 32 65 Brushed Burgundy 1196 +165 187 224 Cristy Blue 1197 + 89 97 169 Soldier Blue 1200 + 48 70 180 Jamie Blue 1201 + 30 29 120 Royal 1202 + 44 38 92 Blue Ink 1203 + 0 51 91 Blue 1204 +187 224 225 Bleached Aqua 1205 + 0 152 125 Peacock Green 1207 + 0 131 115 Greenstone 1208 + 0 109 102 Imperial Aqua 1209 +213 216 212 Blue Blush 1210 +226 212 214 Orchid Ice 1212 + 70 78 82 Midnight 1216 +235 177 16 Gold 1219 +157 157 8 Tamarack 1221 +175 117 6 Copper 1224 +255 160 190 Petal Pink 1227 +236 0 146 Fuschia 1230 +214 2 112 Crimson 1232 +254 183 120 Buff Orange 1233 +251 157 163 Flamingo Pink 1234 +217 133 189 Medium Pink 1239 + 81 47 70 Dark Maroon 1241 + 72 40 54 Plum 1242 +162 37 56 Wildfire 1243 +126 31 63 Maroon 1244 +112 25 61 Red Licorice 1246 + 93 120 203 Jay Blue 1247 + 95 105 196 Violet 1248 + 94 152 172 Wonder Blue 1250 + 0 82 186 Ocean Blue 1253 + 47 52 142 Blue 1254 + 0 62 106 Salem Blue 1256 +158 146 199 Violet Tulip 1260 +198 171 219 Tulip 1261 +116 82 189 Violet 1263 +149 222 219 Mint Julep 1266 +127 215 220 Turquoise 1267 + 82 192 226 Medium Blue / Green 1270 + 0 122 167 Pretty Blue 1271 +180 226 192 Mint 1272 + 0 134 137 J. Turquoise 1274 + 0 184 200 Aquamarine 1275 + 0 157 160 Cyan 1277 + 0 161 185 Marine Aqua 1278 + 0 141 129 Brite Jade 1279 + 87 143 21 Meadow 1284 + 0 183 96 Bright Green 1285 + 0 97 87 Green Forest 1289 + 0 80 66 Dark Green 1290 + 0 53 58 Dark Blue 1293 + 66 72 23 Green 1294 + 74 70 19 Khaki 1295 + 85 105 86 Water Lilly 1296 + 64 74 38 Hedge 1297 + 35 70 54 Mitchell Green 1298 +227 217 192 Birch 1299 +215 204 175 Seashell 1300 +180 181 143 Oxford Tan 1301 +231 179 131 Gold 1302 +126 81 61 Dark Brown 1307 + 82 42 37 Dark Brown 1308 + 66 46 45 Brown Mule 1310 +213 212 213 Illusion Blue 1311 +233 226 215 Palest Ivory 1312 +187 183 175 Skylight 1316 +146 150 148 Banner Gray 1319 +137 143 140 Platinum 1320 +103 109 111 Metal 1321 + 54 64 92 Light Midnight 1324 + 37 85 126 Lake Blue 1325 +243 209 190 Grape 1326 + 0 133 144 Oceanic Green 1327 +225 7 71 Cerise 1328 +226 41 130 Ruby Glint 1329 +128 42 80 Wine 1331 +232 136 144 Light Orange 1332 +247 127 0 Pumpkin 1333 +205 46 49 Spanish Red 1334 +230 6 58 Cerise 1335 +162 5 127 New Berry 1336 +200 199 165 Pale Gray Green 1339 + 0 127 152 Dark Aqua Green 1341 + 0 158 96 Vibrant Green 1342 + 0 106 83 Green Bay 1343 + 36 79 50 Dark Green 1344 + 43 76 64 Harbor Green 1345 + 0 86 65 Dark Green 1346 + 0 68 55 Evergreen 1347 +235 179 140 Grain 1013 +224 176 145 Pink Sand 1014 +250 171 186 Prism Pink 1023 +209 138 150 Cashmere Rose 1229 +237 140 166 Aurora Pink 1028 +250 148 105 Cadmium Orange 1191 +173 107 117 Heather Rose 1036 +173 107 117 Heather Rose 1151 +166 117 148 Dusty Lavender 1152 +209 212 214 Illusion Blue 1055 +150 173 209 Placid Blue 1198 +150 173 209 Placid Blue 1061 +102 117 171 Wedgewood 1065 +115 107 153 Dusted Peri 1255 +125 125 163 Lavender Violet 1249 +125 125 163 Lavender Violet 1067 +219 166 194 Pastel Lavender 1150 +181 138 179 African Violet 1078 +138 117 150 Purple Haze 1079 +135 125 153 Daybreak 1087 +130 112 158 Aster Purple 1262 +138 117 150 Purple Haze 1083 +186 153 161 Mauve Shadows 1146 +171 138 166 Regal Orchid 1147 +105 163 173 Aqua 1287 +166 201 212 Aquamarine 1094 +122 173 179 Marine Blue 1276 +115 138 179 Allure 1199 +143 191 135 Brilliant Green 1124 +176 179 168 Pigeon 1206 +161 158 145 Flint Gray 1340 +143 150 130 Seagrass 1330 +125 120 102 Vertiver Green 1173 +191 209 201 Pale Blue 1265 +176 196 189 Surf Spray 1169 +143 176 191 Foget-Me-Not 1171 +148 163 150 Jadeite 1282 +135 156 161 Stone Blue 1288 + 0 68 55 Evergreen 1291 + 0 68 55 Evergreen 1292 +247 237 222 Snow White 1348 +237 232 222 Lily White 1181 +179 158 140 Light Taupe 1186 +186 171 148 Oxford Tan 1338 +176 163 145 Simply Taupe 1337 +184 173 166 Ashes Of Roses 1133 +179 166 153 String 1134 +166 158 153 Opal Gray 1135 +166 158 153 Opal Gray 1303 +179 158 145 Sphinx 1304 +153 138 135 Zinc 1143 +143 130 125 Cinder 1162 +222 207 194 Crystal Gray 1128 +227 196 181 Peach Whip 1129 +212 184 166 Rose Smoke 1185 +194 173 158 Mushroom 1130 +201 171 171 Burnished Lilac 1136 +232 176 156 Dusty Pink 1137 +176 148 138 Fawn 1139 +194 140 122 Cameo Brown 1305 +186 133 122 Ash Rose 1306 +212 219 209 Sprout Green 1163 +173 184 186 Pearl Blue 1314 +179 181 176 Highrise 1318 +125 133 153 Tempest 1177 +135 120 130 Gray Ridge 1323 +237 232 222 Lily White 1179 +196 186 186 Lilac Gray 1211 +166 163 171 Dapple Gray 1214 +171 163 161 Gull Gray 1215 +179 181 176 Highrise 1317 +161 158 168 Lavender Aura 1174 +171 163 161 Gull Gray 1213 +150 140 148 Silver Rose 1322 diff --git a/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Metro.gpl b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Metro.gpl new file mode 100644 index 00000000..9ba6dd2d --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Metro.gpl @@ -0,0 +1,172 @@ +GIMP Palette +Name: Ink/Stitch: Metro +Columns: 4 +# RGB Value Color Name Number +240 186 212 Sugar Pink 1624 +237 171 194 Carnatio 1636 +232 122 163 Floral Pink 1637 +171 3 92 Ruby Glint 1643 +189 56 38 Dark Rust 1652 +207 20 43 Candy Apple 1654 +166 15 56 Atom Red 1658 +245 226 227 Oyster 1662 +250 171 176 Emily Pink 1664 +237 204 186 Chiffon 1667 +222 135 3 Karat 1680 +217 79 0 Orange 1682 +222 59 33 Sunkist 1685 +237 235 135 Lemon Drop 1704 +245 232 20 Daffodil 1706 +252 201 23 Manila 1708 +247 181 18 Orange 1709 +247 163 10 Marigold 1710 +252 201 24 Manila 1711 +247 163 11 Marigold 1712 + 0 150 135 Parrot 1723 + 0 125 105 Shutter Green 1724 +207 232 156 Pistachio Nut 1742 +163 217 99 Apple Green 1743 + 97 191 26 Medium Green 1744 + 0 115 54 Green 1751 + 0 99 56 Dark Green 1754 +207 232 155 Pistachio Nut 1761 +163 217 100 Apple Green 1763 +107 143 0 Meadow Green 1764 + 77 89 13 Palmetto 1766 +209 227 227 Sapphire Medium Light 1772 +191 209 214 Ocean Bleu Light 1790 +115 181 224 Ultra Blue 1800 +181 222 227 Bleached Aqua 1802 + 0 110 199 Dark Blue 1804 +156 186 214 Cerulean 1815 + 0 56 150 Flag Blue 1821 + 0 48 130 Blue Ribbon 1823 +199 217 230 Cadet Blue 1838 + 0 176 171 Ocean Blue 1840 + 0 133 138 M. D. Green 1841 + 0 135 125 Navajo Turquoise 1842 +179 199 227 Light Blue 1845 +199 230 227 Soothing Sea 1846 +179 199 226 Azure Blue 1859 + 89 23 138 Dark Purple 1865 + 28 20 117 Royal 1867 +130 28 107 Grape Wine 2645 +140 66 173 Iris Blue 1871 +181 145 214 Pale Purple 1875 +130 28 108 Grape Wine 1885 +186 158 102 Parsnip 1924 +153 79 20 Date 1925 + 84 64 31 Brown 1926 +237 194 130 Spun Silk 1942 +171 115 5 Ginger 1945 +191 148 13 Brass 1950 +215 217 228 PALE Cloud Gray 1961 +140 143 145 Steel Gray medium 1965 +122 122 120 Medium Grey 1966 +207 196 186 Moonstruck 1969 +150 135 125 Light Brown 1975 +189 56 39 Dark Rust 1980 +201 181 130 Antique Lace 1981 + 64 71 20 Green 2007 + 0 71 48 Grass Green 2089 +173 219 227 Light Blue 2096 + 51 13 115 Purple Maze 2110 +194 94 3 Bright Rust 2124 +222 112 8 Sunburst 2126 +107 74 28 Sand Dune 2142 +222 135 181 Azalea Pink 2153 +184 105 140 Medium Purple 2155 +184 56 71 Develish Pink 2161 +153 0 112 Medium Purple 2170 + 0 163 224 Mid Windsor 2190 + 54 87 140 Imperial Blue 2193 +222 31 130 Ruby Glint 2209 +107 23 59 Red Licorice 2295 + 97 33 71 Medium Purple 2296 +232 235 56 Pale Yellow 2324 +255 120 77 Sunset Orange 2327 + 0 148 108 Peppermint 1722 +173 192 124 Lettuce Green 1774 + 31 43 57 Ebony Blue 1825 +106 50 128 Dahlia 1873 +203 177 138 Almond Buff 1903 +241 238 208 Eggshell 1907 +215 176 100 Gold 1947 +189 156 131 Warm Taupe 2255 +143 123 95 Doe 2256 +171 204 217 Crystal Blue 1806 +209 228 212 Blue Glass 1860 +199 191 176 Gray Morn 1922 +135 120 130 Gray Ridge 1940 +199 191 175 Gray Morn 2154 +164 120 171 Afterglow 1863 + 42 79 49 Dark Green 1948 +181 186 182 Heather Grey 1964 + 55 60 53 Beluga 1998 + 39 49 35 Midnight Green 2088 +255 255 255 Snow White 1618 + 0 0 0 Black 1621 +169 221 118 Spruce 2259 + 28 34 32 Caviar 1973 + 93 93 40 Green 2003 +150 112 163 Hyacinth 2104 +126 168 192 Pale Purple 1799 +166 131 221 Lavender 1869 +255 143 126 Coral Reef 1669 +255 90 70 Coral 1670 +216 224 212 Pale Pearl Gray 1619 +228 167 127 Bamboo 1914 +151 1 48 Cranberry 3 1656 +255 91 107 Pink 2231 + 89 71 28 Army Green 2241 + 37 69 83 Dark Blue 2311 + 0 60 71 Deep Slate Blue 2313 + 0 69 68 Green 2317 +254 62 22 Vermilion 2288 +175 126 38 Palomino 2333 + 71 26 107 Dark Purple 2336 +169 221 119 Spruce 2337 +255 103 144 Dark Pink 2340 + 49 27 39 Dark Brown 2341 + 82 56 52 Dark Oak 2342 +205 0 64 Rose / Very Dark 2357 +246 91 139 Neon Pink 2360 +255 96 127 Dusty Rose 2374 +138 0 83 Cranberry 2409 +225 114 116 Shell Pink 2444 +255 91 108 Pink 2458 +255 143 127 Coral Reef 2461 +255 171 0 Orange 2469 +246 91 138 Neon Pink 2471 +255 103 143 Dark Pink 2472 +255 163 0 Bright Orange 2478 +255 132 66 Orange 2480 +255 90 0 Burnt Orange 2484 +244 229 179 Wheat 2486 +255 255 0 Gold / Yellow 2487 +255 249 0 Canary 2488 +228 167 128 Bamboo 2501 +255 231 0 Canary 2505 +255 205 0 Copper 2507 +150 125 57 Foliage Green 2509 +125 92 57 Sand Dune 2510 + 0 147 109 Peppermint 2512 +168 221 118 Spruce 2513 +107 204 92 DK Mint 2515 + 0 32 41 Ivy 2525 + 78 49 31 Dark Brown 2581 + 26 39 42 Moonless Night 2371 +145 133 122 Medium Green / Yellow 2747 + 97 93 86 Black Chrome 2749 +209 175 129 Ashley Gold 2780 + 38 62 82 Dark Denim 2797 +158 125 146 Very Grape 2814 +166 119 132 Light Purple 2821 +158 125 145 Very Grape 2834 +255 141 102 Apricot Light 2865 + 70 34 63 Deep Slate Gray 2901 + 71 26 108 Dark Purple 2931 +101 81 18 Sand Dune 2239 +162 144 104 Olive Drab 2254 + 53 59 66 Black 2731 +157 125 146 Very Grape 2813 diff --git a/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Mettler Embroidery.gpl b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Mettler Embroidery.gpl new file mode 100644 index 00000000..5a7993b9 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Mettler Embroidery.gpl @@ -0,0 +1,156 @@ +GIMP Palette +Name: Ink/Stitch: Mettler Embroidery +Columns: 4 +# RGB Value Color Name Number +250 248 246 White 002 + 0 0 0 Black 003 +252 249 239 Natural White 703 +252 249 232 Off White 704 +252 241 211 Eggshell 781 +241 215 170 Seashell 844 +210 176 145 Light Tan 628 +180 133 104 Toast 629 +173 124 100 Light Brown 636 +148 82 61 Tan 511 +128 63 46 Light Cocoa 839 +110 49 35 Brown 711 + 81 37 37 Camel 786 + 57 26 29 Cocoa 712 + 37 15 24 Dark Brown 618 + 3 7 28 Black 745 +113 70 61 Amber Beige 753 +116 87 58 Light Brown 698 +190 161 131 Light Tan 692 +203 186 157 Ecru 820 +244 224 166 Glow 520 +228 186 120 New Gold 515 +210 145 79 Topaz 517 +186 113 60 Coffee 658 +229 122 28 Nut 507 +178 67 44 Date 528 +141 34 17 Coffee Bean 728 +251 136 108 Apricot 592 +251 151 138 Coral 591 +252 187 134 Coral 914 +253 222 174 Bisque 605 +254 245 218 Light Cream 512 +250 248 171 Lemon 502 +255 247 156 Light Mustard 961 +250 253 128 Star Gold 922 +255 212 19 Nectar 827 +254 163 54 Goldenrod 828 +254 153 48 Orange 505 +255 235 50 Yellow 500 +255 240 43 Sunflower 522 +247 244 61 Yellow 501 +242 249 78 Daffodil 911 +254 207 37 Nectar 767 +211 132 63 Splinter 830 +216 95 29 Scholastic 829 +181 76 44 Scholastic 809 +181 13 19 Red Jubilee 534 +175 40 47 Rust 822 +229 67 57 Light Bronze 902 +255 76 11 Pumpkin 953 +255 66 11 Orangeade 594 +252 34 44 Hazy Red 913 +233 11 51 Red 739 +191 1 55 Carolina Red 600 +254 237 222 Light Coral 645 +251 169 156 Champagne Pink 802 +252 200 180 Flamingo 800 +251 162 155 Light Rust 646 +248 78 103 Azalea 596 +169 2 68 Wine 769 + 87 4 57 Dark Maroon 738 + 54 0 37 Dark Brown 771 + 52 0 15 Dark Chocolate 607 +111 5 57 Dark Maroon 601 +172 1 52 Dark Maroon 838 +226 1 49 Maroon 837 +246 28 89 Foxy Red 835 +250 27 61 Foxy Red 821 +248 83 117 Blush 806 +248 114 139 Shrimp 921 +250 164 193 Pink 610 +252 212 222 Bisque 647 +247 127 177 Pink Mist 803 +246 94 161 Rose 805 +245 74 147 Tuxedo Red 923 +244 67 144 Wine 612 +175 13 97 Red Jubilee 960 +129 13 131 Cachet 958 + 57 2 125 Raspberry 583 + 5 14 49 Midnight Navy 916 + 0 0 0 Black 559 +204 233 116 Flite Green 893 +192 227 82 Flite Green 903 +141 203 66 Light Green 900 +100 185 75 Apple Green 952 +136 202 91 Light Green 546 +105 125 43 Green Dust 547 + 91 92 49 Olive Drab 717 + 79 71 66 Dark Brown 706 + 20 21 22 Charcoal 759 + 28 28 39 Midnight Navy 707 + 62 67 74 Metal 696 + 86 86 85 Metal 657 + 89 89 82 Cinder 623 + 71 71 68 Metal 859 + 63 61 60 Charcoal 700 + 48 43 40 Twilight 685 +116 113 93 Palm Leaf 651 +140 136 134 Palm Leaf 724 +146 140 144 Cinder 640 +153 153 145 Dover Gray 725 +217 213 202 Ash White 713 +239 194 223 Bisque 575 +184 62 156 Tulip 959 +177 71 160 Tulip 611 +113 58 152 Cachet 650 + 49 23 96 Violet Blue 581 + 32 1 59 Navy Blue 582 +199 232 171 Pale Green 536 +141 207 131 Pale Green 544 + 32 154 80 Light Emerald 795 + 27 122 55 Fleece Green 847 + 57 90 46 Dark Green 678 + 45 96 49 Green Gables 549 + 93 115 41 Green Dust 540 +103 189 108 Green Gables 895 +100 188 114 Pale Green 899 + 2 142 91 Fleece Green 849 +118 199 156 Green Pearl 548 + 53 113 91 Olive 539 + 4 78 81 Harbor Green 850 + 2 131 107 Pine Green 553 + 78 181 136 Harbor Green 554 + 88 185 141 Green Pearl 889 +169 221 188 Pale Green 561 +222 242 224 Natural White 668 +219 237 233 True White 749 +194 227 230 Light Blue 787 +161 208 203 Light Blue 669 +110 123 116 Teal 681 + 5 58 80 Deep Windsor 690 + 5 43 63 Navy 864 + 2 28 35 Ivy 543 + 26 37 24 Black 894 + 57 90 46 Dark Green 714 +179 211 221 Sky Blue 962 +161 175 191 Winter Blue 736 +119 165 205 Baby Blue 788 +111 147 196 Baby Blue 672 + 95 138 191 Oriental Blue 498 + 87 142 188 Tropic Blue 901 + 52 140 164 Misty 890 + 24 100 142 Misty 814 + 4 144 190 Blue Horizon 892 + 9 113 176 Baltic Blue 888 + 18 74 158 Lannen Blue 790 + 20 56 150 Imperial Blue 885 + 13 40 126 Blue Suede 833 + 12 47 125 Blue Ribbon 675 + 4 16 41 Midnight Navy 792 + 14 39 74 Midnight Navy 688 + 52 58 93 Slate Blue 684 diff --git a/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Mettler Poly Sheen.gpl b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Mettler Poly Sheen.gpl new file mode 100644 index 00000000..d1d91fa8 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Mettler Poly Sheen.gpl @@ -0,0 +1,355 @@ +GIMP Palette +Name: Ink/Stitch: Mettler Poly Sheen +Columns: 4 +# RGB Value Color Name Number +255 255 255 White 0015 + 35 31 32 Black 0020 +255 255 255 Silky White 0010 +255 254 244 Eggshell 0101 +246 239 226 Muslin 0870 +205 203 179 Baguette 0672 +162 155 134 Stone 0873 +173 158 148 Gravel 0874 +174 141 127 Taupe 1061 +153 137 128 Khaki 0722 +147 113 95 Pecan 0853 +201 162 131 Fawn 0934 +224 204 170 Ivory 1172 +229 190 146 Cornsilk 0651 +254 215 170 Meringue 1140 +206 157 115 Tan 1141 +206 157 115 Toffee 0842 +176 133 81 Sisal 0832 +186 120 49 Autumn Leaf 0940 +177 119 52 Ashley Gold 0922 +185 104 49 Nutmeg 0932 +149 92 55 Light Cocoa 1134 +132 75 55 Rust 1342 +113 81 58 Redwood 0933 +115 66 57 Fox 1355 + 95 66 57 Cinnamon 1346 + 90 81 78 Chocolate 1876 +103 81 59 Pine Bark 0945 +113 81 58 Bark 1055 +104 73 58 Espresso 1565 +110 89 91 Sage 0776 +157 115 55 Golden Grain 0941 +177 133 53 Palomino 0822 +196 162 118 Flax 0552 +206 183 139 Champagne 0532 +218 206 171 Oat 0761 +255 253 233 Cream 0670 +242 245 194 Lemon Frost 0250 +255 242 0 Citrus 0600 +255 203 8 Canary 0311 +255 243 43 Yellow 0310 +250 236 180 Daffodil 0520 +255 249 231 Linen 0970 +255 244 201 Vanilla 0660 +255 222 136 Parchment 0640 +239 163 31 Candlelight 0811 +252 175 23 Papaya 0702 +255 224 106 Buttercup 0630 +255 210 78 Lemon 0713 +253 184 19 Bright Yellow 0700 +228 160 36 Gold 0704 +249 157 28 Golden Rod 0800 +244 121 32 Pumpkin 1102 +242 101 49 Tangerine 1300 +241 89 34 Red Pepper 1304 +239 64 35 Fox Fire 1305 +228 30 38 Poppy 1703 +183 41 60 Poinsettia 1902 +201 37 53 Lipstick 1903 +183 41 55 Terra Cotta 1725 +176 66 49 Dark Rust 1335 +158 75 52 Spice 1334 +239 196 171 Twine 1760 +254 219 179 Shrimp Pink 1060 +251 179 131 Shrimp 1362 +244 127 59 Apricot 1220 +222 110 69 Clay 1114 +247 150 107 Salmon 1352 +249 165 126 Starfish 1351 +248 170 143 Pink Clay 1551 +246 141 118 Coral 1532 +234 130 101 Melon 1430 +241 90 78 Flamingo 1521 +230 77 64 Spanish Tile 1600 +210 33 62 Strawberry 1805 +201 36 74 Geranium 1900 +166 43 67 Foliage Rose 1911 +132 48 70 Winterberry 1912 +115 49 71 Burgundy 2222 +164 85 106 Mauve 2241 +182 105 123 Teaberry 2051 +215 162 151 Tea Rose 1761 +239 217 215 Chiffon 2170 +243 190 208 Iced Pink 2160 +224 164 166 Hyacinth 1755 +211 126 148 Heather Pink 2152 +237 187 199 Shell 1860 +252 229 238 Blush 2171 +243 133 141 Corsage 1840 +183 65 90 Blossom 1921 +132 48 70 Cranberry 2113 +116 50 66 Bordeaux 2123 + 73 67 66 Mahogany 1366 + 87 122 188 Cadet Blue 3331 + 64 86 166 Twilight 3211 + 59 71 157 Blueberry 3210 + 73 71 157 Venetian Blue 3541 + 37 36 123 Dark Ink 3110 + 71 47 145 Deep Purple 2900 + 9 25 93 Heraldic 3536 + 85 51 100 Pansy 2715 +111 65 123 Orchid 2810 +104 80 162 Purple 2920 +131 98 171 Wild Iris 2830 +222 176 209 Impatient 2650 +223 204 227 Aura 2655 +171 135 162 Violet 2764 +189 132 186 Frosted Plum 2640 +122 45 115 Dusty Grape 2600 +153 63 152 Plum 2504 +131 46 98 Cerise 2506 +182 34 107 Bright Ruby 2300 +238 56 151 Garden Rose 2520 +230 112 172 Soft Pink 2550 +231 132 183 Azalea Pink 2560 +250 213 229 Carnation 2363 +247 183 202 Petal Pink 2250 +247 172 188 Pink Tulip 2155 +238 76 148 Tropicana 2220 +200 33 93 Fuchsia 2521 +182 38 94 Raspberry 2320 +148 44 97 Boysenberry 2500 + 97 18 109 Dark Current 2711 + 77 53 64 Maroon 2336 +176 155 202 Lavender 3040 +122 112 143 Amethyst Frost 3241 +141 126 148 Cinder 3062 +120 125 138 Leadville 0112 + 64 80 100 Dark Pewter 0132 +119 132 148 Steel 2674 +160 157 162 Smoke 0131 +176 173 161 Cloud 0151 +214 204 203 Saturn Grey 0182 +193 190 183 Mystic Grey 0150 +191 199 196 Fieldstone 0124 +190 200 205 Silver 3971 +157 172 178 Sterling 0142 +150 150 154 Silvery Grey 1972 +119 132 141 Cobblestone 0108 +121 125 131 Dolphin 0152 + 92 107 120 Whale 0111 + 36 40 63 Charcoal 4174 + 85 94 93 Dark Charcoal 1375 + 71 73 60 Olive 6156 + 48 67 59 Herb Green 5866 +113 81 58 Umber 0465 +111 95 60 Golden Brown 0747 +120 102 60 Moss 0345 +178 147 53 Ochre 0542 +235 212 23 Light Brass 0221 +177 172 89 Seaweed 0232 +177 180 91 Marsh 0352 +138 132 61 Caper 6133 +106 120 64 Moss Green 5934 + 39 79 62 Backyard Green 5944 + 96 133 119 Willow 5664 +129 148 134 Palm Leaf 5552 +152 159 123 Army Drab 0453 +137 184 116 Kiwi 5822 +162 192 132 Jalepeno 6051 +181 219 173 Spring Frost 5650 + 93 158 69 Pear 5531 +114 177 100 Bright Mint 5610 +113 191 68 Erin Green 5912 +103 132 66 Limabean 5833 + 58 123 68 Lime 5633 + 53 103 65 Green Dust 5643 + 0 159 77 Ming 5513 + 41 164 74 Emerald 5510 + 0 166 81 Light Kelly 5613 + 0 144 88 Kelly 5515 + 0 133 74 Irish Green 5415 + 0 167 109 Swiss Ivy 5422 + 6 101 67 Bright Green 5324 + 34 85 63 Deep Green 5555 + 32 85 72 Evergreen 5326 + 0 122 101 Green 5100 + 0 160 120 Trellis Green 5210 + 74 190 157 Bottle Green 5230 +126 203 174 Silver Sage 5220 +202 222 215 Snomoon 4250 +190 218 215 Luster 5050 + 5 181 157 Baccarat Green 5115 + 0 140 128 Dark Jade 5101 + 0 107 101 Rain Forest 5005 + 36 79 80 Forest Green 5374 +188 208 224 Glacier Green 4071 +175 197 221 Ice Cap 3650 +148 189 229 Wintersky 3761 +126 167 208 Oxford 3840 +118 157 195 Azure Blue 3951 +101 154 210 Celestial 3820 + 53 118 174 Laguna 3810 + 96 122 150 Ocean Blue 3953 + 57 124 148 Copenhagen 3842 + 12 91 116 Mallard 4644 + 28 115 150 Teal 4032 + 0 113 174 Tropical Blue 3901 + 0 114 188 Cerulean 3900 + 1 174 230 Crystal Blue 3910 +112 198 240 River Mist 3962 + 80 198 216 Spearmint 4240 + 76 198 224 Aqua 4230 + 14 163 193 Turquoise 4111 + 0 149 218 California Blue 4103 + 0 159 207 Wave Blue 4101 + 0 136 178 Caribbean Blue 4010 + 0 113 138 Dark Teal 4116 + 22 85 108 Tartan Blue 4033 + 4 96 119 Deep Sea Blue 4442 + 0 124 145 Caribbean 4531 + 0 141 155 Marine Aqua 4423 + 0 176 181 Island Green 4220 + 37 189 173 Jade 4620 + 0 156 147 Deep Aqua 4610 + 0 102 121 Amazon 4643 + 0 101 99 Spruce 4515 +191 202 198 Oyster 3770 +178 187 199 Skylight 0145 +154 180 198 Winter Frost 3750 +149 181 224 Lake Blue 3640 + 85 129 186 Wedgewood 3641 + 12 77 162 Nordic Blue 3600 + 13 78 150 Blue 3522 + 32 71 127 Imperial Blue 3622 + 32 64 154 Royal Blue 3543 + 23 70 158 Sapphire 3544 + 32 64 154 Fire Blue 3333 + 22 43 117 Provence 3102 + 2 37 98 Delft 3323 + 0 38 89 Dark Indigo 3355 + 0 44 84 Concord 3444 + 32 71 127 Slate Blue 3732 + 24 79 121 Harbor 3743 +108 192 103 Limedrop 5500 +226 228 23 Sour Apple 5940 +244 240 110 Sun 0501 +255 200 11 Sunflower 0706 +252 175 23 Sunset 1120 +247 148 30 Orange 1106 +239 64 35 Devil Red 1306 +242 113 146 Chrysanthemum 1940 +239 58 128 Tropical Pink 1950 +190 175 152 Wild Rice 0862 +226 219 204 Sea Shell 0170 +220 209 189 Tantone 0861 +117 116 109 Pewter 1874 +127 62 56 Coffee Bean 1344 +164 116 77 Penny 1154 +228 209 174 Rattan 0771 +224 181 83 Honey Gold 0821 +239 210 36 Mimosa 0504 +231 207 94 Star Gold 0622 +231 183 0 Liberty Gold 0824 +224 199 150 Old Gold 0851 +224 196 156 Carmel Cream 1123 +203 163 138 Dark Tan 1252 +224 196 166 Straw 1161 +214 160 78 Honey 0931 +219 145 74 Copper 1115 +201 113 59 Date 1311 +206 108 52 Burnt Orange 1312 +182 64 49 Brick 1514 +255 253 239 Buttercream 0270 +246 222 0 Daisy 0605 +249 228 59 Sunshine 0608 +240 170 0 Spanish Gold 0904 +250 222 94 Yellow Bird 0506 +228 171 86 Toast 1010 +227 157 83 Harvest 1332 +221 73 32 Paprika 1301 +171 0 51 Cherry 1913 +171 7 64 Fire Engine 2011 +230 72 90 Persimmon 1730 +199 0 78 Tulip 1906 +133 25 74 Claret 2224 +173 10 73 Rio Red 2022 +210 0 43 Candy Apple 1704 +191 0 61 Country Red 2101 +197 0 50 Cardinal 1904 +196 6 47 Wildfire 1800 +225 90 77 Red Berry 1701 +245 165 187 Rose 2530 +214 144 156 Dusty Mauve 2153 +236 218 212 Flesh 2166 +117 31 66 Beet Red 2115 +157 13 80 Wine 2333 +210 200 221 Stainless 3150 +194 194 224 Blue Dawn 3151 + 94 39 132 Purple Twist 3114 +127 93 161 Iris Blue 2905 +170 131 182 Grape 2910 +224 194 217 Cachet 3045 +136 72 147 Easter Purple 2832 +218 188 197 Dessert 2761 +255 246 240 Whitewash 0180 +194 91 153 Roseate 2510 +178 77 146 Very Berry 2721 +156 59 135 Sangria 2720 +164 111 168 Sugar Plum 2912 +155 166 131 Cypress 0463 +255 255 255 Paper White 0017 +247 247 240 Pearl 0184 +229 228 221 Fog 0176 +156 160 162 Metal 4073 +131 119 142 Greyhound 2576 +201 182 201 Haze 3251 + 39 48 117 Light Midnight 3353 +206 188 95 Ginger 0546 +181 179 93 Tarnished Gold 0442 +178 207 128 Spring Green 6141 +165 211 109 Apple Green 5730 + 51 145 52 Green Grass 5722 + 93 140 65 Grasshopper 5933 +201 226 172 Mint 5740 +192 221 106 Tamarack 6011 + 0 152 100 Shamrock 5411 + 0 169 87 Scrub Green 5400 +221 235 208 Spanish Moss 5770 + 0 109 86 Swamp 5335 + 0 124 115 Field Green 5233 + 0 144 141 Seagreen 4625 + 0 178 162 Scotty Green 5010 + 0 165 183 Aqua Velva 4410 + 0 174 234 Pacific Blue 3906 + 0 176 212 Danish Teal 4114 + 72 188 227 Peacock 4122 +120 200 242 Chicory 3920 + 0 176 219 Alexis Blue 4113 + 0 141 166 Light Mallard 4421 +171 216 220 Island Waters 4430 + 0 156 176 Truly Teal 4452 + 0 161 180 Dark Aqua 4425 + 21 98 143 Deep Ocean 4133 +115 159 174 Rough Sea 4332 +126 150 175 Ash Blue 3853 + 0 121 192 Colonial Blue 3902 +112 179 227 Reef Blue 3815 +162 188 213 Country Blue 3762 + 67 112 180 Marine Blue 3620 + 56 127 193 Empire Blue 3722 + 69 129 193 Blue Bird 3710 +197 220 242 Baby Blue 3652 + 73 137 199 Dolphin Blue 3711 + 39 85 164 Blue Ribbon 3611 + 59 94 168 Starlight Blue 3612 + 52 62 146 Flag Blue 3335 + 30 36 93 Navy 3554 + 24 31 80 Midnight 3344 +202 225 0 Mountain Dew 6010 +235 105 104 Watermelon 1501 diff --git a/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Outback Embroidery Rayon.gpl b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Outback Embroidery Rayon.gpl new file mode 100644 index 00000000..3344ecc5 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Outback Embroidery Rayon.gpl @@ -0,0 +1,104 @@ +GIMP Palette +Name: Ink/Stitch: Outback Embroidery Rayon +Columns: 4 +# RGB Value Color Name Number + 40 41 42 Black E000 +227 229 251 White E001 +163 175 179 Marri Grey E012 +238 209 202 Lite Pink E013 +233 172 165 Medium Peach E019 +247 136 125 Mature Peach E020 +186 82 47 Sebring Orange E021 +243 218 104 Lemon E023 +255 166 23 Challis E024 +205 129 38 Rich Gold E025 +154 186 202 Light Sky E027 + 90 137 170 Medium Sky E028 +199 161 191 Pastel Orchid E031 +129 108 157 Light Purple E032 +110 73 129 Medium Purple E033 + 99 47 61 Port E035 +190 20 34 Picardy Red E037 +161 40 49 Red Satin E039 +138 134 137 Smoke Grey E040 +110 116 123 Gundagai Grey E041 + 33 79 119 Wild Blue E042 +134 204 191 Light Ocean E045 + 79 172 152 Ocean Green E046 +158 189 162 Sage Green E047 + 0 135 69 Xmas Tree E051 +231 183 165 Lite Peach E053 +172 131 122 Dark Flesh E054 +212 177 143 Bridle E055 +160 113 85 Medium Bridle E057 + 66 55 52 Chocalate E059 +179 166 151 Drum E060 +240 221 166 Sunshine E067 +255 188 22 Sunfire Yellow E068 +210 169 112 Inca E070 +233 229 220 Atherton Ivory E071 +132 168 200 Grey Blue E075 +237 83 42 Valencia Orange E078 +166 125 169 Jester E080 +205 186 166 Sunlit Biege E082 +210 185 157 Medium Flesh E084 +188 188 184 Gloster Grey E087 + 0 125 155 Rhodes Blue E096 +190 209 178 Pastel Green E100 + 72 143 82 Vine Green E101 + 52 77 59 Baltic Green E103 +151 140 84 Lite Kiwi Green E106 +232 98 118 Reef E107 +233 139 163 Dark Riley E108 +191 47 110 Medium Ruby E110 + 83 70 128 Wild Violet E112 +235 173 191 Jester Pink E116 +212 98 142 Dark Ruby E117 +137 145 147 Light Smoke E118 +230 186 201 Pastel Jester E120 +220 186 165 Katherine Biege E127 +162 144 130 Medium Leather E128 + 39 126 183 Dolphin Blue E133 + 0 85 146 Falcon Blue E134 +244 140 13 Dark Challis E137 +183 155 143 Light Leather E142 + 75 107 153 Pastel Navy E143 +132 106 87 Dark Leather E144 + 94 62 53 Light Chocalate E145 +172 191 203 Smoky Blue E153 +120 115 70 Light Military E156 +119 107 76 Medium Military E157 + 83 90 99 Carbine Grey E164 + 30 68 130 Omega Blue E166 +141 153 73 Kiwi Fruit E169 + 90 110 41 Dark Kiwi E170 +194 121 63 Dark Almond E173 + 0 109 167 Night Mist Blue E177 +137 37 51 Dry Red E181 +169 0 66 Light Ruby E186 +122 59 109 Royal Ruby E188 +149 127 61 Inca Green E190 +169 121 42 Dark Inca E192 +233 222 186 Pale Lemon E222 +239 200 44 Monaro Yellow E223 + 51 60 83 Midnite Blue E243 +154 206 105 Lina Mint E248 + 0 112 71 Jewel Green E250 + 0 145 76 Bold Green E251 +255 102 22 Navel Orange E278 + 0 119 99 Dark Ocean E280 + 21 75 75 Deep Ocean E290 + 0 140 172 Vibrant Blue E295 + 56 168 125 Kelp E301 + 14 78 63 Seaton Green E304 +214 99 153 Aggs Pink E309 +149 60 115 Ruby Prudence E310 +142 139 184 Pastel Lavender E311 +171 143 106 Wholemeal E338 + 72 70 52 Verdoro Green E357 + 35 79 59 Duck Green E370 +240 166 83 Light Inca E372 + 35 77 103 Blue Steel E376 +225 84 69 Manderin Red E379 + 97 37 51 Etna Moroon E385 + 80 84 67 Earth Green E394 diff --git a/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Poly X40.gpl b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Poly X40.gpl new file mode 100644 index 00000000..c8336589 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Poly X40.gpl @@ -0,0 +1,290 @@ +GIMP Palette +Name: Ink/Stitch: Poly X40 +Columns: 4 +# RGB Value Color Name Number + 45 175 163 Light Aqua 0909 + 0 73 98 Danish Teal 0913 +219 224 194 Grass Green 3 0944 +235 240 207 Grass Green 4 0945 +179 220 178 Tea Green 0947 + 95 196 156 Green Meadow 0949 +153 181 97 Avocado 0950 +168 160 75 Light Swamp Green 0951 +155 151 54 Medium Gold 0952 +134 144 45 Swamp Green 0953 + 86 96 0 Olive Drab 0955 +119 132 42 Seagrass 0956 +117 182 174 Turquoise 4 0961 +184 202 180 Silver Green 0962 + 61 97 28 Money 0963 + 56 93 109 Blue Mist 0965 + 69 97 109 Lake Combo 0966 +211 188 86 Light Gold 0982 +174 190 32 Green Onion 0983 +200 225 167 Seedling 0984 +196 221 137 Green Apple 0985 +109 179 63 Cilantro 0988 + 0 166 78 Verde Broght Green 0990 + 0 114 63 Jungle Green 0992 + 0 81 58 Spruce 0995 + 44 46 146 Vintage Grapes 1031 +240 242 229 Maize 4 1140 +175 170 148 Muslin 1141 +228 187 131 Straw 1145 +228 215 181 Tan 2 1146 +195 187 168 Blonde 1147 +205 184 153 Tan 3 1148 +150 154 131 Pewter 1149 + 98 70 46 Coffee 2 1152 + 0 93 163 Chicory 1163 +138 199 62 Erin Green 1183 +178 1 55 Carolina Red 1240 +152 1 46 Cranberry 3 1241 +119 1 51 Russet 3 1243 +113 73 146 Orchid Bouquet 1313 +118 34 130 Orchid 1323 +136 114 178 Tulip 3 1324 + 71 71 157 Vintage Grapes 2 1331 + 0 82 103 Enchanted Sea 1386 + 0 78 161 Light Royal 2 1423 +135 123 107 Antelope 1520 + 95 61 33 Twig 2 1527 +119 69 0 Nutmeg 3 1545 +180 152 89 New Gold 1552 + 0 167 124 Seafoam 1615 +166 206 55 Green Apple 2 1619 +191 192 194 Silver 1707 +187 188 190 Moonlight 1708 +160 161 165 Zinc 1710 +125 129 130 Ash 2 1713 +105 106 111 Dark Grey 2 1716 + 0 81 155 Night Horizon 2031 + 0 145 212 Baltic Blue 2093 +123 21 68 Red Jubilee 2250 +216 164 116 French Beige 2518 +181 155 19 Bright Gold 2 2519 +209 158 95 French Beige 2 2562 +244 123 32 Paprika 3001 +245 157 135 Papaya 3014 +180 0 27 Cherry 2 3015 +241 89 75 Country Rose 4 3016 +153 81 0 Bronze 3142 + 0 125 103 Lincoln Green 3325 +138 199 223 Chambray Blue 2 4004 +254 213 0 Sunflower 4117 +136 109 88 Prairie Beige 4371 + 94 203 226 Periwinkle 3 4419 + 0 102 177 Blue Suede 2 4453 + 0 103 102 Azure 2 4627 + 0 94 96 Dark Green 2 4735 + 0 52 102 Royal 2 5550 + 0 75 143 Cobalt Blue 2 5551 + 0 40 76 Legion Blue 3 5552 + 26 64 100 Light Navy 2 5553 +114 176 217 Spa Blue 5554 + 0 131 173 Surf Blue 5555 + 0 54 92 Black Pearl 5556 + 0 176 98 Verde Bright Green 2 5557 + 79 70 37 Bark 5558 +208 202 202 Stainless Steel 5559 +209 201 199 Light Silver 2 5829 +163 215 237 Baby Blue 6137 +106 117 123 Light Grey 2 8010 +245 245 243 White 0010 +245 245 243 Natural 0015 + 34 29 26 Black 0020 +234 231 20 Spring Green 0021 +189 215 46 Neon Green 0032 +254 194 0 Golden 0033 +254 199 57 Light Neon Orange 0042 +250 164 27 Neon Orange 0043 +240 90 136 Neon Pink 0046 +240 76 83 Neon Rose 0047 +187 0 103 Neon Fuchsia 0054 +217 218 210 Light Silver 0101 +167 180 185 Dove Greay 0102 + 0 104 170 China Blue 0104 +158 173 180 Silver Moon 0107 + 45 175 163 Aqua 0109 +129 144 149 Dove Grey 2 0111 +125 129 130 Ash 0112 + 67 87 94 Grey 0114 + 67 86 93 Grey 2 0115 + 68 78 88 Charcoal 0116 + 34 0 0 Greyhound 0117 + 56 99 90 Gray Cat 0118 +243 112 34 Saffron 0134 +241 90 33 Heart 0135 + 34 190 189 Turquoise 0138 + 0 53 89 Salem Blue 0142 +224 144 73 Sienna 0146 +240 240 223 Maize 0165 +181 0 51 Cherry 0187 +210 1 67 Rosewood 0190 +181 40 74 Jockey Red 0213 +123 22 66 Russet 0216 + 0 81 58 Hedge 0240 + 0 21 34 Greyhound 2 0247 +244 132 86 Hazel 0253 +220 102 28 Hazel 2 0255 +237 47 33 Country Rose 0266 +254 195 75 Crocus 0286 +253 229 217 Soft Buff 0301 +248 213 207 Cotton Candy 0302 +247 225 214 Seashell 0303 +249 198 197 Pink Glaze 0304 +245 153 176 Petunia 0305 +246 178 189 Pueblo Pink 0306 +244 156 178 Desert Rose 0307 +242 134 166 Shrimp 0309 +240 89 130 Bashful Pink 0313 +240 89 130 Bashful Pink 2 0315 + 0 152 73 Grass Green 0317 +241 135 181 Pink Sorbet 0321 +239 80 144 Cabernet 0324 +216 69 140 Cabernet 2 0325 +218 103 142 Cabernet 3 0332 +182 53 91 Burgundy 0333 +176 154 200 Tulip 0343 +210 162 200 Opalescent Pink 0345 +166 95 151 Crepe Myrtle 0347 +102 35 132 Plum 0348 +123 21 68 Dark Maroon 0361 + 75 21 79 Hortensia Plum 0362 +123 21 60 Russet 2 0363 +250 222 223 Petal Pink 0376 +148 181 222 Powder Blue 0379 +116 169 213 Country Blue 0380 +118 161 206 Violet Blue 0381 +134 166 204 Slate Blue 0382 +168 166 204 Dark Lilac 0383 + 0 102 177 Sapphire 0385 +176 154 200 Purple Aster 0386 +228 209 213 Pink Glaze 2 0387 +166 144 193 Tulip 2 0388 +139 99 170 Deep Purple 0390 +123 80 159 Purple 0392 + 42 21 98 Purple Shadow 0398 +153 190 199 Ice Blue 0402 +102 181 211 Chambray Blue 0403 + 92 146 182 Saxon Blue 0404 + 53 126 167 Slate Blue 2 0405 + 93 155 206 Country Blue 2 0406 + 34 132 197 Windjammer 0409 +165 132 97 Brown Linen 0412 + 0 108 177 Light Royal 0413 + 0 102 177 Blue Suede 0414 + 0 56 115 Cobalt Blue 0415 + 0 43 85 Light Navy 0416 + 0 90 169 Sapphire 2 0417 +253 237 82 Mustard 0419 + 0 39 75 Legion Blue 0422 + 0 40 76 Legion Blue 2 0423 +254 196 63 Marigold 0432 +205 226 216 Pale Green 0442 + 0 143 151 Turquoise Green 0443 + 0 155 183 Periwinkle 0444 + 0 134 187 Periwinkle 0445 + 76 180 207 Periwinkle 2 0446 + 0 116 123 Turquoise Green 2 0447 + 0 90 90 Blue Spruce 0448 + 0 125 103 Shutter Green 0449 + 0 147 125 Azure 0450 + 0 176 98 Grass Green 2 0451 + 20 120 108 Dark Seafoam 0455 +253 207 111 Peach Sherbert 0466 +253 231 210 Beige 0501 +250 201 187 Flesh 0502 +253 221 198 Flesh 2 0503 +251 200 179 Illusion 0504 +247 169 149 Peach 2 0505 +246 160 145 Carnation Pink 0506 +248 163 99 Peachy Pink 0508 +100 56 45 Dark Brown 0513 +246 147 27 Mandarin 0520 +244 115 32 Honeysuckle 0525 +217 84 27 Heart 2 0526 +240 90 89 Country Rose 2 0527 +217 57 43 Flame Red 0528 +181 0 51 Persimmon 0529 +182 39 83 Cranberry 0530 +133 0 55 Cranberry 2 0531 +100 135 165 Slate Blue 3 0541 +197 46 61 Holly Red 0571 +106 106 116 Dark Grey 0585 +136 143 149 Light Grey 0588 +106 117 123 Grey 3 0589 +241 227 139 Custard 0601 +243 227 142 Wheat 0602 +254 241 110 Pale Yellow 0604 +253 229 97 Yellow Rose 0605 +230 176 26 Crocus 2 0609 +254 232 147 Wheat 2 0612 +243 234 161 Custard 2 0613 +210 169 0 Harvest Gold 0616 +197 149 83 Caramel 0619 +188 138 67 Honey 0620 +186 129 58 Applespice 0621 +223 135 27 Cinnamon 0624 +246 235 203 Tusk 0627 +185 142 100 Fawn 0628 +243 242 152 Pale Yellow 2 0632 +238 235 65 Yellow 0633 +243 238 94 Yellow Rose 2 0635 +254 195 33 Crocus 3 0641 +252 184 21 Crocus 4 0642 +253 204 26 Tangerine 0646 +247 167 56 Cantelope 0649 +243 112 34 Saffron 2 0650 +243 111 34 Saffron 3 0651 +209 172 42 Amber 0652 +157 163 115 Reed Green 0653 +207 139 42 Copper 0654 + 90 86 0 Cactus 0655 + 92 96 95 Volcano 0675 + 0 143 151 Turquoise Green 3 0688 + 0 77 55 Dark Green 0695 +237 47 33 Country Rose 3 0700 +254 203 0 Crocus 5 0763 + 0 153 73 Christmas Green 0777 + 0 85 150 Royal 0806 + 0 90 169 Jay Blue 0809 +240 241 227 Maize 2 0811 +254 230 192 Bone 0812 +231 207 173 Tan 0814 +217 199 153 Taupe 0815 +254 219 187 Peach 0818 +204 150 124 Wicker 0819 + 0 148 126 Teal 0825 +238 240 227 Teal 0828 +202 207 203 Barely Beige 0829 +203 150 132 Cafe Au Lait 0830 +245 157 135 Illusion 2 0831 +212 131 110 Dusty Peach 0832 +150 92 68 Bunny Brown 0833 +124 107 100 Smoky Taupe 0836 +179 82 63 Napa Red 0838 +158 52 21 Cappacino 0839 +137 46 0 Burnished Copper 0840 +128 73 42 Date 0841 +181 155 19 Bright Gold 0842 +168 120 54 Caramel 2 0843 +119 132 42 Seaweed 0845 +129 93 71 Nutmeg 0854 +117 80 0 Honcho Brown 0857 +119 69 0 Nutmeg 2 0858 + 89 21 0 Dark Brown 2 0859 +249 191 190 Light Dusty Rose 0862 +174 112 101 Dusty Rose 0864 +174 112 101 Dark Dusty Rose 0867 +136 117 110 Dusk 0873 + 98 70 46 Coffee 0878 +115 57 45 Twig 0888 + 87 39 0 Teak 0890 + 63 40 50 Mahogany 0891 + 34 0 0 Mahogany 2 0892 +101 200 197 Turquoise 2 0903 +143 205 202 Turquoise Green 4 0904 +205 140 60 Burnt Sienna 0905 + 0 166 158 Turquoise 3 0906 + 32 177 162 Aqua 2 0907 diff --git a/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Princess.gpl b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Princess.gpl new file mode 100644 index 00000000..237fcb9e --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Princess.gpl @@ -0,0 +1,124 @@ +GIMP Palette +Name: Ink/Stitch: Princess +Columns: 4 +# RGB Value Color Name Number +255 255 255 White 1-1 +216 205 212 Grey 1-2 +230 60 102 Pink 1-3 +109 132 72 Lt. Olive 1-4 +255 210 60 Yellow 1-5 + 0 0 0 Black 1-6 + 94 140 176 Mid Blue 1-7 +255 0 3 Red 1-8 + 41 122 30 Green 1-9 + 89 23 23 Brown 1-10 +232 221 192 Cream 2-1 +227 130 70 Gold 2-2 +180 114 83 Light Brown 2-3 +180 45 48 Orange 2-4 +161 63 125 Purple 2-5 +106 112 115 Pewter 2-6 + 0 152 160 Cyan 2-7 + 23 50 142 Dark Blue 2-8 + 60 78 44 Olive 2-9 +128 36 38 Burgundy 2-10 +237 228 216 Palest Ivory 3-1 +232 210 168 Palest Yellow 3-2 +230 198 182 Palest Fawn 3-3 +235 208 203 Palest Peach 3-4 +238 200 220 Palest Pink 3-5 +220 216 225 Palest Grey 3-6 +209 216 231 Palest Blue 3-7 +206 250 244 Palest Aqua 3-8 +155 182 133 Palest Green 3-9 +211 187 213 Palest Mauve 3-10 +182 200 225 Light Blue 4-1 +135 160 212 Powder Blue 4-2 +114 119 199 Sky Blue 4-3 + 62 95 151 Slate Blue 4-4 + 85 87 122 Storm Blue 4-5 + 38 42 92 Denim 4-6 + 10 75 140 Petrel Blue 4-7 + 17 27 94 Imperial Blue 4-8 + 14 34 114 Royal Blue 4-9 + 18 17 59 Navy Blue 4-10 +230 120 80 Copper 5-1 +215 107 60 Golden Brown 5-2 +110 40 25 Tan 5-3 +116 37 20 Bark 5-4 + 75 27 18 Dark Oak 5-5 +130 0 0 Russet 5-6 + 80 20 18 Mahogany 5-7 +120 84 54 Mushroom 5-8 + 91 60 17 Khaki 5-9 + 68 1 0 Dark Chocolate 5-10 +248 189 155 Light Salmon 6-1 +243 138 103 Salmon 6-2 +242 82 56 Tangerine 6-3 +230 145 120 Blush 6-4 +184 90 60 Bronze 6-5 +232 41 37 Scarlet 6-6 +202 32 23 Rust 6-7 +210 4 20 Carmine 6-8 +231 0 28 Ruby 6-9 +224 47 52 Antique Red 6-10 +144 214 130 Light Jade 7-1 +158 164 70 Pistachio 7-2 +170 201 60 Fresh Green 7-3 + 75 148 81 Sage 7-4 + 64 96 64 Teal 7-5 + 54 143 52 Bright Green 7-6 + 41 118 66 Jade 7-7 + 58 130 60 Leaf Green 7-8 + 30 145 41 Emerald 7-9 + 11 96 32 Dark Green 7-10 +245 192 200 Sugar Pink 8-1 +250 170 190 Petal Pink 8-2 +250 134 160 Rose Pink 8-3 +208 102 144 Passion Pink 8-4 +190 52 85 Dusky Rose 8-5 +241 105 133 Light Cerise 8-6 +239 91 111 Dusky Pink 8-7 +220 0 74 Cerise 8-8 +255 0 118 Fuschia 8-9 +149 36 80 Raspberry 8-10 +244 241 236 Platinum 9-1 +185 164 183 Silver Fox 9-2 +176 176 187 Sleet Grey 9-3 +116 121 146 Silver Blue 9-4 +150 140 142 Silver Moon 9-5 +138 125 102 Willow 9-6 +102 83 102 Dark Grey 9-7 + 86 83 108 Steel 9-8 + 75 71 80 Midnight 9-9 + 36 36 54 Seal 9-10 +162 251 230 Pacific Mist 10-1 +184 231 202 Mint 10-2 +149 244 219 Aqua 10-3 + 49 214 227 Capri 10-4 + 70 140 145 Lagoon 10-5 + 21 151 174 Kingfisher 10-6 + 51 142 103 Lido 10-7 + 40 111 68 Tropical Green 10-8 + 34 96 100 Deep Atlantic 10-9 + 40 67 70 Ocean Depths 10-10 +255 210 220 Delicate Mauve 11-1 +225 186 233 Pale Lilac 11-2 +159 107 156 Lilac 11-3 +196 102 168 Lavender 11-4 +151 76 148 Violet 11-5 +189 75 151 Clematis 11-6 + 93 59 123 Imperial Purple 11-7 +142 95 196 Amethyst 11-8 +129 58 126 Deep Violet 11-9 + 63 53 102 Cassis 11-10 +254 246 196 Pale Lemon 12-1 +248 187 85 Mimosa 12-2 +251 251 66 Lime 12-3 +249 210 113 Daffodil 12-4 +215 155 96 Sunkissed 12-5 +245 180 34 Golden Lights 12-6 +255 124 28 Soleil 12-7 +225 72 28 Golden Glory 12-8 +211 131 71 Sunburst 12-9 +214 92 48 Marigold 12-10 diff --git a/extensions/fablabchemnitz/inkstitch/palettes/InkStitch RAL.gpl b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch RAL.gpl new file mode 100644 index 00000000..22028e0a --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch RAL.gpl @@ -0,0 +1,198 @@ +GIMP Palette +Name: Ink/Stitch: RAL +Columns: 4 +# RGB Value Color Name Number +214 199 148 Green Beige 1000 +217 186 140 Beige 1001 +214 176 117 Sand Yellow 1002 +252 163 41 Signal Yellow 1003 +227 150 36 Golden Yellow 1004 +201 135 33 Honey Yellow 1005 +224 130 31 Maize Yellow 1006 +227 122 31 Daffodil Yellow 1007 +173 122 79 Brown Beige 1011 +227 184 56 Lemon Yellow 1012 +255 245 227 Oyster White 1013 +240 214 171 Ivory 1014 +252 235 204 Light Ivory 1015 +255 245 66 Sulfur Yellow 1016 +255 171 89 Saffron Yellow 1017 +255 214 77 Zinc Yellow 1018 +163 140 122 Grey Beige 1019 +156 143 97 Olive Yellow 1020 +252 189 31 Rape Yellow 1021 +252 184 33 Traffic Yellow 1023 +181 140 79 Ochre Yellow 1024 +255 255 10 Luminous Yellow 1026 +153 117 33 Curry 1027 +255 140 26 Melon Yellow 1028 +227 163 41 Broom Yellow 1032 +255 148 54 Dahlia Yellow 1033 +247 153 92 Pastel Yellow 1034 +224 94 31 Yellow Orange 2000 +186 46 33 Red Orange 2001 +204 36 28 Vermilion 2002 +255 99 54 Pastel Orange 2003 +242 59 28 Pure Orange 2004 +252 28 20 Luminous Orange 2005 +255 117 33 Luminous Bright Orange 2007 +250 79 41 Bright Red Orange 2008 +235 59 28 Traffic Orange 2009 +212 69 41 Signal Orange 2010 +237 92 41 Deep Orange 2011 +222 82 71 Salmon Orange 2012 +171 31 28 Flame Red 3000 +163 23 26 Signal Red 3001 +163 26 26 Carmine Red 3002 +138 18 20 Ruby Red 3003 +105 15 20 Purple Red 3004 + 79 18 26 Wine Red 3005 + 46 18 26 Black Red 3007 + 94 33 33 Oxide Red 3009 +120 20 23 Brown Red 3011 +204 130 115 Beige Red 3012 +150 31 28 Tomato Red 3013 +217 102 117 Antique Pink 3014 +232 156 181 Light Pink 3015 +166 36 38 Coral Red 3016 +209 54 84 Rose 3017 +207 41 66 Strawberry Red 3018 +199 23 18 Traffic Red 3020 +217 89 79 Salmon Pink 3022 +252 10 28 Luminous Red 3024 +252 20 20 Luminous Bright Red 3026 +181 18 51 Raspberry Red 3027 +166 28 46 Orient Red 3031 +130 64 128 Red Lilac 4001 +143 38 64 Red Violet 4002 +201 56 140 Heather Violet 4003 + 92 8 43 Claret Violet 4004 + 99 61 156 Blue Lilac 4005 +145 15 102 Traffic Purple 4006 + 56 10 46 Purple Violet 4007 +125 31 122 Signal Violet 4008 +158 115 148 Pastel Violet 4009 +191 23 115 Telemagenta 4010 + 23 51 107 Violet Blue 5000 + 10 51 84 Green Blue 5001 + 0 15 117 Ultramarine Blue 5002 + 0 23 69 Sapphire Blue 5003 + 3 13 31 Black Blue 5004 + 0 46 122 Signal Blue 5005 + 38 79 135 Brillant Blue 5007 + 26 41 56 Gray Blue 5008 + 23 69 112 Azure Blue 5009 + 0 43 112 Gentian Blue 5010 + 3 20 46 Steel Blue 5011 + 41 115 184 Light Blue 5012 + 0 18 69 Cobalt Blue 5013 + 77 105 153 Pigeon Blue 5014 + 23 97 171 Sky Blue 5015 + 0 59 128 Traffic Blue 5017 + 56 148 130 Turquoise Blue 5018 + 10 66 120 Capri Blue 5019 + 5 51 51 Ocean Blue 5020 + 26 122 99 Water Blue 5021 + 0 8 79 Night Blue 5022 + 46 82 143 Distant Blue 5023 + 87 140 181 Pastel Blue 5024 + 51 120 84 Patina Green 6000 + 38 102 41 Emerald Green 6001 + 38 87 33 Leaf Green 6002 + 61 69 46 Olive Green 6003 + 13 59 46 Blue Green 6004 + 10 56 31 Moss Green 6005 + 41 43 36 Grey Olive 6006 + 28 38 23 Bottle Green 6007 + 33 33 26 Brown Green 6008 + 23 41 28 Fir Green 6009 + 54 105 38 Grass Green 6010 + 94 125 79 Reseda Green 6011 + 31 46 43 Black Green 6012 +117 115 79 Reed Green 6013 + 51 48 38 Yellow Olive 6014 + 41 43 38 Black Olive 6015 + 15 112 51 Turquoise Green 6016 + 64 130 54 Yellow Green 6017 + 79 168 51 May Green 6018 +191 227 186 Pastel Green 6019 + 38 56 41 Chrome Green 6020 +133 166 122 Pale Green 6021 + 43 38 28 Olive Drab 6022 + 36 145 64 Traffic Green 6024 + 74 110 51 Fern Green 6025 + 10 92 51 Opal Green 6026 +125 204 189 Light Green 6027 + 38 74 51 Pine Green 6028 + 18 120 38 Mint Green 6029 + 41 138 64 Signal Green 6032 + 66 140 120 Mint Turquoise 6033 +125 189 181 Pastel Turquoise 6034 +115 133 145 Squirrel Grey 7000 +135 148 166 Silver Grey 7001 +122 117 97 Olive Grey 7002 +112 112 97 Moss Grey 7003 +156 156 166 Signal Grey 7004 + 97 105 105 Mouse Grey 7005 +107 97 87 Beige Grey 7006 +105 84 56 Khaki Grey 7008 + 77 82 74 Green Grey 7009 + 74 79 74 Tarpaulin Grey 7010 + 64 74 84 Iron Grey 7011 + 74 84 89 Basalt Grey 7012 + 71 66 56 Brown Grey 7013 + 61 66 82 Slate Grey 7015 + 38 46 56 Anthracite Grey 7016 + 26 33 41 Black Grey 7021 + 61 61 59 Umbra Grey 7022 +122 125 117 Concrete Grey 7023 + 48 56 69 Graphite Grey 7024 + 38 51 56 Granite Grey 7026 +145 143 135 Stone Grey 7030 + 77 92 107 Blue Grey 7031 +189 186 171 Pebble Grey 7032 +122 130 117 Cement Grey 7033 +143 135 112 Yellow Grey 7034 +212 217 219 Light Grey 7035 +158 150 156 Platinum Grey 7036 +122 125 128 Dusty Grey 7037 +186 189 186 Agate Grey 7038 + 97 94 89 Quartz Grey 7039 +158 163 176 Window Grey 7040 +143 150 153 Verkehrsgrau A 7042 + 64 69 69 Verkehrsgrau B 7043 +194 191 184 Silk Grey 7044 +143 148 158 Telegrau 1 7045 +120 130 140 Telegrau 2 7046 +217 214 219 Telegrau 4 7047 +125 92 56 Green Brown 8000 +145 82 46 Ocher Brown 8001 +110 59 48 Signal Brown 8002 +115 59 36 Clay Brown 8003 +133 56 43 Copper Brown 8004 + 94 51 31 Fawn Brown 8007 + 99 61 36 Olive Brown 8008 + 71 38 28 Nut Brown 8011 + 84 31 31 Red Brown 8012 + 56 38 28 Sepia Brown 8014 + 77 31 28 Chestnut Brown 8015 + 61 31 28 Mahogany Brown 8016 + 46 28 28 Chocolate Brown 8017 + 43 38 41 Grey Brown 8019 + 13 8 13 Black Brown 8022 +156 69 41 Orange Brown 8023 +110 64 48 Beige Brown 8024 +102 74 61 Pale Brown 8025 + 64 46 33 Terra Brown 8028 +255 252 240 Cream 9001 +240 237 230 Grey White 9002 +255 255 255 Signal White 9003 + 28 28 33 Signal Black 9004 + 3 5 10 Jet Black 9005 +166 171 181 White Aluminium 9006 +125 122 120 Grey Aluminium 9007 +250 255 255 Pure White 9010 + 13 18 26 Graphite Black 9011 +252 255 255 Traffic White 9016 + 20 23 28 Traffic Black 9017 +219 227 222 Papyrus White 9018 diff --git a/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Radiant Rayon.gpl b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Radiant Rayon.gpl new file mode 100644 index 00000000..428a9d17 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Radiant Rayon.gpl @@ -0,0 +1,106 @@ +GIMP Palette +Name: Ink/Stitch: Radiant Rayon +Columns: 4 +# RGB Value Color Name Number + 0 0 0 Black P101 +255 255 255 White P102 +255 241 215 Off White P110 +242 251 215 Sand P115 +237 227 184 Lt Beige P120 +198 174 157 Beige P121 +196 187 157 SandStone P122 +183 172 134 Beachcomber P123 +214 194 158 Dusky Goldenrod P125 +191 172 106 Twilight Harvest P126 +120 96 63 Brown P127 +226 197 126 Sienna P130 +185 138 68 Sienna Rose P131 +163 104 20 Sienna Brass P135 + 94 52 51 Burnished Eggplant P143 + 72 38 38 Spanish Roast P145 +248 244 211 Pearled Gold P195 +242 236 182 Golden Sand P196 +247 244 201 Pearled bronze P200 +253 236 168 Pale Gold P201 +251 242 89 Buttercup P205 +249 233 38 Bright gold P206 +230 196 77 Goldenrod P207 +226 179 14 Brass P210 +248 194 114 Brass Rose P211 +217 166 3 Dusky Brass P212 +218 99 12 Cayenne P215 +220 121 11 Cinnamon P220 +190 168 12 Antique Bronze P224 +190 154 12 Antique Gold P225 +158 129 10 Pickled Olive P226 +205 243 167 Cool Mint P300 +235 101 168 Fresh Mint P305 +115 190 12 Vivid Mint P306 +194 218 112 Grey Moss P307 + 96 115 30 Deep Moss P308 + 80 149 38 New Pine P310 + 97 91 26 Dusky Spruce P312 + 93 96 26 Dusky Pine P313 + 50 66 17 Black Pine P314 +196 210 87 Spring Fern P315 +156 139 41 Olive P316 + 35 120 35 Deep Olive P320 + 98 104 26 Golden Pine P325 +225 249 204 Frosted Wintergreen P400 + 86 203 128 Deep Wintergreen P405 + 51 89 9 Christmas Fir P407 +209 250 230 Morning Cyan P408 +134 194 233 Dusky Cyan P409 + 52 139 113 Mountain Lake P410 + 38 111 102 Lake Shadows P411 + 48 129 104 Lake Forest P415 + 22 75 69 Midnight Lake P416 +225 247 244 Winter Morning P420 +208 240 253 Pearled Coneflower P421 +203 213 221 winter Haze P422 +117 120 134 Russina Blue P423 +104 107 119 Charcoal Blue P424 +172 211 223 Summer morning P425 + 48 105 122 Harbor P426 +131 153 186 Cornflower P427 + 92 151 194 Dusky Harbor P428 + 39 65 92 Harbor Twilight P429 + 46 65 114 Royal Blue P430 + 69 81 101 Suskty Navy P431 + 63 60 96 Deep Navy P435 +253 232 236 Frosted Rose P500 +250 190 191 Rose P501 +252 216 216 Pearled Rose P505 +247 155 197 Tea Rose P506 +241 139 221 Vivid Rose P507 +230 159 155 Salmon Rose P510 +177 37 151 Dusty Fuschia P515 +193 13 113 Light Rose P520 +213 0 0 Paprika Red P525 +155 0 0 Cherrywood Red P526 +126 10 65 Dusty Burgundy P530 +111 9 57 Burgandy P531 +188 14 97 Pearld Burgandy P535 + 86 7 65 Syrah P540 +252 228 173 Blonde P600 +254 218 188 Platinum Rose P605 +253 201 166 Dusty Salmon P606 +250 183 150 Pearled Salmon P607 +248 162 120 Salmon P610 +255 128 128 Vivid Salmon P612 +244 187 196 Light Mauve P613 +184 161 169 Light Lilac P695 +141 117 143 Antique Lilac P696 +155 136 139 Silver Lilac P697 +207 154 179 Lilac P700 +150 102 168 Twilight Lilac P701 +125 94 168 Lupine P702 + 99 60 104 Royal Eggplant P704 + 91 67 124 Twilight Lupine P705 +220 220 219 Platinum P800 +217 232 215 Quartz P801 +198 187 185 Titanium P802 +187 187 187 Blue Titanium P803 +156 156 146 Anitque Platinum P805 +133 133 120 Hematite P810 + 87 80 79 Stone P815 diff --git a/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Robison-Anton Polyester.gpl b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Robison-Anton Polyester.gpl new file mode 100644 index 00000000..4899053e --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Robison-Anton Polyester.gpl @@ -0,0 +1,456 @@ +GIMP Palette +Name: Ink/Stitch: Robison-Anton Polyester +Columns: 4 +# RGB Value Color Name Number +255 240 248 Pink Cascade 9026 +255 244 248 Light Pink 5543 +255 208 232 Pink 5523 +255 192 224 Dusty Rose 5675 +255 216 232 Petal Pink 7701 +255 216 216 Pink Joy 9030 +255 204 208 Pink Sham 9078 +255 224 224 Ginger Jar 9080 +255 236 232 Winter Almond 9069 +232 200 200 Grape 5572 +255 216 208 Wild Ginseng 9045 +208 168 168 Salmon 5599 +255 200 176 Heather Mist 9070 +208 156 160 Toasted Champagne 9063 +184 108 104 K. A. Bronze 5780 +255 148 192 Fairy Tale Pink 9015 +248 188 240 Pink Pompas 9025 +255 132 152 Mauven Maud 9164 +168 84 88 Comfort Pink 9077 +255 192 200 Mountain Rose 5795 +255 156 208 Rose Cerise 5544 +255 120 184 Carnation 5537 +255 188 176 Dancing Salmon 9073 +255 168 168 Shrimp 5546 +168 84 88 Scalloped Coral 9065 +255 100 104 Bitteroot 7709 +128 0 0 Burgundy 5549 +120 0 64 Warm Wine 5796 +104 0 48 Russet 5552 +104 0 48 Wine 5525 + 96 12 48 Salvia Plum 9055 + 72 0 40 Maroon 5676 + 72 0 40 Intense Maroon 5887 + 48 0 24 Royal Crest 9162 +240 116 136 Cabernet 5794 +208 80 120 Passion Rose 5899 +200 56 120 HOt Pink 5560 +136 32 64 Perfect Ruby 5797 +136 0 72 Cherry Stone 5804 +176 20 72 Ruby Glint 5561 +232 72 184 Horizon Pink 9168 +255 100 104 Begonia 5528 +224 100 152 Wild Romance 9007 +184 0 96 Azalea 7712 +192 12 96 Rose Pink 5806 +176 0 80 Pink Bleeding Heart 9012 +208 0 104 Strawberry 5732 +168 0 0 Devil Road 7706 +168 0 48 Cherry Punch 5717 +184 12 0 Candy Apple Red 5807 +168 0 88 Red Coral Bell 9013 +120 12 0 Hollyhock Red 9006 +120 12 0 Toasty Red 9002 +192 16 24 Wild Fire 5567 +184 20 0 Red 5678 +216 12 0 Jockey Red 5581 +192 0 0 Radiant Red 5566 +192 0 0 Red Berry 5718 +255 0 0 Very Red 5719 +232 0 0 Foxy Red 5563 +216 12 0 Lipstick 5533 +216 20 24 Miami Artillery 9170 +152 12 0 Scarlet 5519 +152 12 0 Deep Scarlet 5811 +120 12 16 Cranberry 5570 +120 0 0 Carolina Red 5568 +255 236 232 Bisque 5677 +255 204 208 Flesh Pink 5553 +255 188 176 Flamingo 5558 +255 132 136 Melon 5594 +255 148 112 Melonade 7812 +255 116 48 Oriental Poppies 9058 +224 72 0 Honeysuckle 7713 +168 56 0 Orange Glory 9056 +224 244 255 Out Of The Blue 9029 +208 232 240 Blue Joy 9032 +208 232 255 Ice Blue 5600 +208 240 240 Cameron Blue 9089 +184 232 255 Sun Blue 5569 +168 208 255 Rockport Blue 5836 +192 212 255 Pastal Blue 5682 +168 212 255 Heron Blue 5825 +152 232 255 Sky Blue 5539 +184 220 255 Baby Blue 5506 +176 176 255 Cristy Blue 5683 +136 196 248 Lake Blue 5604 + 0 156 232 Blue Splendor 9039 + 0 116 168 Ultra Blue 5733 + 0 84 168 Tropic Blue 5734 + 0 88 176 Oriental Blue 5601 + 0 72 144 Blue Moon 9081 + 0 80 160 Copen 5545 + 0 80 160 China Blue 5823 + 0 112 152 Slate Blue 5575 + 0 68 104 Ash 5641 + 0 68 104 Favorite Deep Blue 9075 + 56 112 160 Wonder Blue 5877 + 0 140 200 Mid Windsor 5820 + 0 104 208 California Blue 5689 + 0 88 184 Cerulean 5801 + 0 68 136 Baltic Blue 5741 + 48 100 184 Dolphine Blue 5829 + 0 52 112 Blue 5520 + 0 24 136 Jay Blue 5684 + 0 0 128 Imperial Blue 5602 + 0 0 40 Fleet Blue 5750 + 0 8 88 Blue Ribbon 5739 + 0 8 80 Blue Ink 5740 + 0 0 40 Light Navy 5603 + 0 8 80 PN Navy 5824 + 0 16 88 Light Midnight 5686 + 0 0 56 Navy 5515 + 0 0 40 Midnight Navy 5687 + 0 76 152 Saphire 5580 + 0 0 128 Blue Suede 5738 + 24 20 128 Fire Blue 5736 + 0 12 128 Royal 5510 + 0 52 120 Jamie Blue 5685 + 0 24 136 Empire Blue 5737 + 0 0 112 Nikko Blue 9022 + 0 44 88 Chow Blue 9171 + 0 0 152 Purple Twist 5729 +232 236 255 Paris Blue 5583 +168 168 255 Amanda Lavender 9048 +216 172 255 Sterling 5706 +136 132 192 Lucky Lavender 9064 +192 120 255 Tulip 5586 +144 152 200 Tulip Lavender 9167 + 72 68 136 Mauve 5587 + 80 0 152 Dark Melody 9031 + 88 0 176 Livid Lavender 9166 + 96 0 192 Purple Chariot 9049 + 64 0 104 Purple Maze 5728 + 88 0 168 Vanessa Purple 9057 + 72 0 136 Deep Purple 5803 + 56 16 104 Purple Accent 5731 + 72 0 144 Regal Purple 9021 + 64 0 64 May Nights 9053 + 96 0 96 Dark Purple 5681 + 88 0 104 Mod Purple 9071 + 96 48 96 Purple 5554 + 88 0 168 Iris 5588 +168 72 255 Cindy Purple 9088 +128 0 128 Popular Purple 9019 +208 120 255 Poker Primrose 9011 +136 12 136 Plum 5592 +255 216 255 Arden Lavender 9067 +192 128 255 Russian Saga 9016 +192 132 232 Pansy Purple 9098 +200 128 200 Dwarf Lilac 9009 +255 204 232 Violet 5585 +255 204 232 Liatris Lavender 9004 +255 244 255 Siberian Iris 9041 +255 220 240 Fantasia Pink 9044 +255 204 224 Le Reve Pink 9040 +255 204 224 Exclusive Pink 9074 +255 168 255 Pink Sherbet 9036 +255 176 216 Pink Splendor 9037 +255 128 192 Wild Pink 5559 +136 0 136 New Berry 5800 +176 0 176 Rich Pink 9097 +168 0 80 Passion 5591 +104 0 104 Raspberry Ice 9017 +112 20 56 Purple Ice 9027 + 80 0 40 Aubergine 9046 +184 255 255 Pillow Blue 9059 + 96 164 216 Misty 5608 +120 196 224 Bambino Blue 9079 + 48 188 168 Blue Fringe 9054 + 0 148 152 Marine Aqua 5607 + 0 152 224 Blue Wisteria 9052 + 16 176 192 Surf Blue 5819 + 0 156 160 Angela Blue 9060 + 0 88 88 Mallard Blue 5821 + 48 84 88 Peacock 5810 + 0 132 144 Mountainview 9105 + 0 152 144 Southampton 9143 + 0 84 72 Paradise Green 9104 + 0 84 71 Perpetual Teal 9062 + 0 104 104 Venus Blue 9100 +224 255 255 Light Blue 5522 +240 255 248 Shallow Green 9101 +208 255 232 Sprite 5613 +192 255 224 Nautical Teal 9076 +144 255 255 Alaska Sky 9138 +192 255 223 Herbal Blue 9103 +152 255 200 Mint Julep 5610 + 0 184 176 Sea Glass 9141 + 32 152 120 Turquoise 5504 + 48 148 136 Mystic Teal 5743 + 0 140 144 Teal 5609 + 0 184 184 J. Turquoise 5792 + 56 136 104 Oceanic Green 5746 + 32 156 136 Blue Appeal 9139 + 0 140 112 Tempest Turq 9102 +128 255 192 Breath Of Spring 9140 + 0 156 112 M. D. Green 5745 + 0 172 120 Dark Teal 5809 + 0 144 72 Pine Green 5691 + 32 104 80 Sea Water 9173 + 0 160 120 Inner Sanctum 9142 + 40 68 32 Blue Spruce 5849 + 0 80 0 Newport 5850 + 88 140 88 Endicott Bay 9145 + 48 84 40 Green Bay 5755 +104 192 168 Moss 5578 +208 212 168 Palm Leaf 5541 +112 116 56 Willow 5521 +136 136 80 Kiwi Green 9107 + 80 120 64 Olive 5502 + 72 72 48 Water Lilly 5854 + 72 72 48 Dress Green 5884 + 56 88 48 Harbor Green 5692 + 56 76 48 Ivy 5852 + 48 60 24 Special Green 5805 + 40 60 40 Dark Army Green 5853 + 0 52 40 D. H. Green 7711 + 56 76 24 Alpine Green 9151 + 40 68 32 Field Green 5760 + 0 52 0 Green Sail 5759 + 48 48 24 Teal Appeal 9146 +200 255 248 Pale Green 5618 + 0 224 224 Sea Mist 5693 +128 252 200 Green Pearl 5752 +144 208 144 Seafoam 5611 +176 220 192 Tealeaf 9106 + 0 128 64 Isle Green 5612 + 0 184 0 Cone Forest 9144 + 0 120 24 Jade 5813 + 40 136 88 Peppermint 5690 + 24 100 0 Green Forest 5748 + 0 88 40 Fern Green 5749 + 0 120 64 Green Forest 5751 + 0 68 0 Evergreen 5615 + 0 68 0 Evergreen 5615 + 0 112 0 Green Petal 5758 + 80 116 56 Holly 5623 + 40 112 64 Deep Green 5584 + 72 140 56 Green 5509 + 0 132 0 Irish Green 5812 + 40 116 56 Dark Green 5508 + 0 148 40 Conner Green 9092 + 0 147 40 Veggie Green 9091 + 56 176 64 Light Kelly 7710 + 48 188 56 Kelly 5540 + 0 208 0 Emerald 5514 +224 255 224 Pastel Green 5855 +184 255 224 Mint 5538 +184 255 184 Slightly Green 9149 +168 255 168 Green Oak 5619 + 0 188 96 Nile 5511 +144 208 152 Glendale 9153 + 96 140 48 Peapod 5757 +144 212 104 Pastoral Green 5621 +120 188 128 Envy Green 9108 +120 184 104 Rolling Meadow 9148 +160 188 88 Eventide Green 9147 + 80 144 64 Spruce 5579 + 96 140 48 Peapod 5757 + 0 168 0 Ming 5622 + 0 244 0 Erin Green 5620 +184 180 104 Limerick 9121 +168 168 0 Tamarack 5530 +200 204 0 Foliage Green 5842 +255 255 136 Meilee Green 9118 +255 255 136 Daiqueri Ice 9120 +192 196 56 Finch 9035 +216 172 96 Black Eyed Susie 5861 +192 176 80 Cloth Of Gold 9005 +192 176 80 Cheviot Gold 9124 +168 172 0 Golder Slipper 9084 +168 132 56 Autumn Green 5843 +104 96 48 Allegheny 9119 +136 136 72 Cone 9154 +104 104 16 Palmetto 5529 +176 176 0 Mosstone 9150 + 96 120 32 Meadow 5526 +104 104 16 Boneaire Green 9152 +112 120 56 Olive Drab 5617 + 0 52 40 Beau Geste 9122 + 0 53 40 Castlewalk Green 9155 +248 232 134 Green Ice 9018 +255 255 152 Coronation Gold 9014 +255 255 104 Lemon 5625 +255 254 150 Celery 5616 +255 255 120 Lemon Fluff 9003 +255 255 56 Daffodil 5626 +255 252 30 Sunflower 5762 +255 252 24 Golden Stargazor 9051 +255 252 31 Moonbeam 5860 +255 252 0 Ombre Gold 9001 +255 255 64 Canary 5535 +255 236 0 Manila 5766 +255 240 40 Goldenrod 5542 +255 220 24 Warm Sunshine 9172 +240 176 0 Pollen Gold 5856 +240 192 0 Day Lilly 9010 +255 232 88 Star Gold 5708 +255 208 32 Cornsilk 5695 +240 224 0 Scholastic 5765 +255 188 136 Pooh 9109 +255 192 48 Brite Yellow 5696 +255 164 80 Nectar 5764 +255 184 16 Merit Gold 5763 +240 208 32 Marigold 5516 +255 168 80 Mango 5694 +255 156 0 Sun Gold 5512 +120 12 16 Cranberry 5570 +255 164 120 Yellow Mist 5709 +232 176 40 Yellow 5513 +200 148 40 Golden Chair 9050 +216 188 120 Mustard 5631 +152 116 32 Copper 5595 +255 84 80 Grilled Orange 9072 +232 76 0 Orangeade 5767 +224 0 0 Paprika 5536 +255 52 48 Vibrant Orange 9066 +255 92 88 Indian Summer 9023 +184 0 0 Saffron 5629 +183 0 0 Scarlet Flame 9020 +154 0 0 Auburn 5772 +152 0 0 Terra Cotta 5634 +136 68 0 Dark Rust 5505 +255 140 88 Summer Splendor 9061 +255 144 32 Complex Orange 9068 +255 188 160 Tawny 5556 +255 220 200 Shangri La 9047 +208 104 32 Rust 5589 +232 128 80 Deviled Orange 9038 +255 92 24 Orange 5518 +255 108 40 Golden Poppy 5630 +224 112 0 Sunburst 9008 +255 108 0 Dark Texas Orange 5769 +255 200 128 Visor Gold 5698 +216 192 96 Ashley Gold 5701 +224 192 128 Topaz 5700 +208 140 88 Honey 5547 +152 104 0 Almond 5779 +200 116 32 Toast 5531 +120 60 0 Hazel 5781 +104 52 0 Date 5590 + 88 44 48 Chocolate 5527 + 96 48 24 Sienna 5702 +255 255 150 Wheat 5761 +248 232 136 Maize 5564 +255 252 112 Glow 5534 +160 160 80 Pistachio 5550 +160 160 79 Tommy Tan 9123 +160 156 80 Golden Tan 5870 +160 156 0 Ginger 5633 +208 204 0 Shimmering Gold 5711 +208 203 0 Old Gold 5501 +104 108 24 Temple Gold 9165 +192 132 48 Terry Tan 9131 +192 156 72 Sweet Dreams 9130 +224 204 144 Primedor 9132 +216 188 96 Rice Paper 9125 +208 188 80 Penny 5632 +232 212 152 Candy Tan 9094 +232 212 136 Taupe 5598 +200 196 136 Rattan 5774 +152 148 72 French Toast 9086 +112 112 56 Beige 5524 +104 108 48 Bronze 5815 +120 100 40 Sand Dune 5777 +240 216 144 Bali 9136 +232 208 144 Tan 5573 +255 252 240 Ivory 5635 +248 236 200 Seashell 5776 +248 240 200 Ecru 5532 +240 196 160 Coast Point 9160 +255 204 152 Opaline 5773 + 96 48 0 Cocoa Mulch 5788 + 96 72 40 Light Cocoa 5778 +120 100 40 Lucrene 9133 +232 208 152 New Gold 5699 +255 232 208 Foundation 9034 +255 176 104 Bamboo 5638 +248 232 184 Gold 5503 +168 140 56 Wicker 5789 +255 208 160 Amber Beige 5636 + 48 52 0 Sonesta Brown 9156 + 88 44 0 Brownstone 9042 + 80 40 0 Coffee Bean 5639 + 80 39 0 Brown 5551 + 48 48 0 Espresso 5637 + 0 32 0 Mahogany 5864 + 88 88 48 Cajun Mist 9137 + 48 48 0 Dark Brown 5672 + 80 80 80 Happy Trail 9087 +151 158 150 Carbondale 9128 +164 176 168 Decorator Tan 9135 +208 204 208 Basket Beige 9126 +128 140 128 Turkish Tan 9134 + 72 76 40 Mars Green 9129 + 48 60 48 Grey Wool 9158 + 32 32 32 Smokey 5787 +104 100 88 Vassar Chic 9111 + 72 72 72 Black Chrome 5841 + 64 68 72 Aged Charcoal 5865 +104 100 104 Metal 5707 +136 136 136 Twilight 5517 +152 152 152 Cinder 5704 +112 116 112 Bellaire Grey 9110 +120 116 120 Silvery Gray 5784 +112 108 112 Delano Grey 9112 + 80 72 72 Coal Hill 9163 +120 108 112 Storm Gray 5786 +152 156 152 Fairview Grey 9114 +208 212 208 Cloud 5783 +192 200 192 Melville 9113 +120 120 120 GS Grey 5802 +112 112 112 Grey Flannel 9117 + 64 64 64 Charcoal 5565 +184 184 184 Skylight 5782 +216 216 216 Saturn Gray 5785 +255 254 255 Chrome 5839 +208 220 208 Storm Gail 9090 +184 192 184 Otter Grey 9115 +208 208 216 Teardrop Grey 9116 +255 255 255 Oyster 5703 +240 240 240 Raindrop 9095 +255 252 255 Hi Ho Silver 9082 +232 228 232 Titanium 9083 +192 192 200 Gray 5507 +184 192 0 TH Gold 5906 +216 220 216 Pearl Grey 5640 +104 108 112 Dover Grey 5705 +255 236 232 Winter Almond 9069 +160 156 168 Steel Gray 5574 +104 104 112 Granite 9099 + 80 72 80 Ducky Mauve 5722 +144 128 128 Satin Wine 5614 + 0 0 0 Black 5596 +245 245 245 Eggshell 5643 +238 238 238 Ice Ballet 9028 +255 255 224 Beige Delight 9024 +255 255 255 Natural White 5642 +248 248 248 Snow White 5597 +208 204 0 Shimmering Gold 5711 +224 0 112 Cheeky Pink 9161 +255 52 56 Neon Red 5712 +240 0 0 Hot Cha Cha 9159 +255 88 24 Neon Orange 5710 +255 164 72 Singh Mist 9157 +232 188 24 Havana Yellow 9127 +255 255 0 Stunning Yellow 9085 +232 232 0 Neon Yellow 5713 + 96 144 40 Neon Green 5814 + 0 72 0 TH Green 5907 + 88 0 0 TH Burgundy 5908 + 0 0 64 TH Navy 5909 diff --git a/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Robison-Anton Rayon.gpl b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Robison-Anton Rayon.gpl new file mode 100644 index 00000000..d2db91ec --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Robison-Anton Rayon.gpl @@ -0,0 +1,423 @@ +GIMP Palette +Name: Ink/Stitch: Robison-Anton Rayon +Columns: 4 +# RGB Value Color Name Number +239 204 206 Light Pink 2243 +252 191 201 Pink 2223 +239 198 211 Pink Bazaar 2599 +249 178 183 Pink Mist 2373 +249 175 173 Emily Pink 2374 +252 155 178 Rose 2293 +252 140 153 Rose Cerise 2244 +242 175 193 Carnation 2237 +229 86 109 Shrimp 2246 +244 71 107 Bashful Pink 2248 +229 86 109 Begonia 2228 +249 132 142 Azalea 2412 +242 104 119 Dusty Rose 2375 +216 137 155 Rose Tint 2591 +140 38 51 Burgundy 2249 +124 33 40 TH Burgundy 2608 +122 38 56 Russet 2252 +117 38 61 Pro Firebrand 2622 +119 45 53 Wine 2225 + 89 51 68 Intense Maroon 2587 + 79 33 58 Dark Maroon 2376 +147 22 56 Cabernet 2494 +249 178 183 Mountain Rose 2495 +102 30 43 Warm Wine 2496 +229 86 109 Primrose 2491 +142 35 68 Perfect Ruby 2497 +109 33 63 Brushed Burgundy 2498 +142 35 68 Passion Rose 2499 +173 0 117 New Berry 2500 +252 201 198 Petal Pink 2501 +244 191 209 Memphis Belle 2502 +247 191 191 Desert Bloom 2503 +206 0 124 Wild Pink 2259 +237 114 170 Floral Pink 2415 +211 107 158 Hot Pink 2260 +214 2 112 Crimson 2416 +226 40 130 Ruby Glint 2261 +170 0 79 Cherrystone 2504 +170 0 79 Cherry Punch 2417 +234 15 107 Cherry Blossom 2262 +175 30 45 Red Berry 2418 +191 10 48 Jockey Red 2281 +191 10 48 Very Red 2419 +191 10 48 Red 2378 +206 17 38 Foxy Red 2263 +214 40 40 Tuxedo Red 2420 +191 10 48 Lipstick 2233 +196 30 58 Scarlet 2219 +196 30 58 Radiant Red 2266 +163 38 56 Wildfire 2267 +140 38 51 Carolina Red 2268 +117 38 61 Red Jubilee 2421 +153 33 53 Cranberry 2270 +163 38 56 Antique Red 2505 +196 30 58 Devil Red 2506 +175 0 61 Candy Apple Red 2507 +216 28 63 Rosewood 2508 +252 94 114 Bitteroot 2509 +242 196 175 Bisque 2377 +244 204 170 Flesh 2413 +249 186 170 Flesh Pink 2253 +247 191 191 Opal Mist 2255 +249 191 158 Tawny 2256 +249 198 170 Peach 2257 +249 142 109 Melon 2294 +249 165 140 Flamingo 2258 +249 137 114 Coral 2414 +244 63 79 Persimmon 2277 +249 198 170 Peach Blossom 2510 +249 186 170 Illusion 2511 +249 137 114 Melonade 2512 +226 61 40 Honeysuckle 2513 + 0 140 130 Brite Jade 2514 + 0 178 160 Bluestone 2515 + 71 214 193 Aqua Pearl 2516 +135 221 209 Seafrost 2517 + 0 135 137 J. Turquoise 2492 + 45 198 214 Indian Ocean Blue 2518 + 0 165 219 Surf Blue 2519 + 0 163 221 Mid Windsor 2520 + 0 63 84 Deep Windsor 2589 + 0 45 71 Pro Dark Blue 2620 + 0 109 117 Mallard Blue 2521 +155 196 226 Sky Blue 2239 +175 188 219 Lake Blue 2304 + 91 119 204 Pro Lusty Blue 2614 +109 135 168 Slate Blue 2275 +153 214 221 Blue Frost 2305 + 40 196 216 Periwinkle 2306 + 0 173 198 Aquamarine 2307 + 0 160 196 California Blue 2389 + 0 142 214 Baltic Blue 2441 + 0 84 160 Solar Blue 2442 + 0 142 214 Pacific Blue 2388 + 0 163 221 Boo Boo Blue 2730 + 0 112 158 Pro Band Blue 2737 + 0 122 165 Pro Peacock 2740 +201 232 221 Light Blue 2222 + 30 28 119 Royal 2210 + 0 43 127 Blue Suede 2438 + 51 86 135 Imperial Blue 2302 +175 188 219 Bridgeport Blue 2522 + 51 86 135 China Blue 2523 + 38 84 124 Pro Imperial 2612 +119 150 178 Country Blue 2524 +193 201 221 Heron Blue 2525 +119 150 178 Pro Saxon 2624 +102 137 204 Bright Blue 2526 + 89 96 168 Soldier Blue 2527 + 0 81 186 Pro Brilliance 2619 +102 137 204 Atlantis Blue 2528 + 58 117 196 Dolphin Blue 2529 +117 170 219 Caribbean Blue 2530 +196 216 226 Dana Blue 2531 +196 216 226 Cadet Blue 2532 + 96 175 221 Ozone 2533 + 0 61 107 Salem Blue 2534 + 15 43 91 Blue Ribbon 2439 + 25 33 104 Pro Navy 2625 + 43 38 91 Blue Ink 2440 + 0 38 84 Pro Midnight 2613 + 0 38 73 Pro College Blue 2647 + 53 63 91 Light Midnight 2386 + 53 38 79 Fleet Blue 2450 + 17 33 81 Light Navy 2303 + 20 33 61 Flag Blue 2603 + 0 38 84 TH Navy 2609 + 20 33 61 Navy 2215 + 20 33 61 Midnight Navy 2387 +198 209 214 Pastel Blue 2382 +193 201 221 Blue Hint 2598 +181 209 232 Ice Blue 2300 +209 206 221 Paris Blue 2283 +153 186 221 Baby Blue 2206 +175 188 219 Sun Blue 2269 +165 186 224 Cristy Blue 2383 +117 178 221 Ultra Blue 2433 +117 170 219 Tropic Blue 2434 +102 137 204 Blue Horizon 2435 +127 140 191 Oriental Blue 2301 +109 135 168 Copen 2245 + 91 119 204 Jay Blue 2384 + 45 51 142 Blue 2220 + 45 51 142 Sapphire 2280 + 0 51 127 Pro Royal 2627 + 0 56 147 Fire Blue 2436 + 45 51 142 Jammie Blue 2385 + 63 40 147 Empire Blue 2437 + 58 86 79 Enchanted Sea 2535 +132 153 165 Pro Twinkle 2617 +155 170 191 Rockport Blue 2536 + 94 153 170 Wonder Blue 2577 +173 175 170 Traditional Gray 2540 +191 186 175 Steel 2537 +186 183 175 Pro Pearl 2741 +196 193 186 Pro Cool Gray 2733 +204 193 178 Stainless Steel 2538 +209 204 191 Chrome 2539 +173 175 170 Pro Night Sky 2618 +140 137 132 Gull 2731 +104 102 99 Mineral 2729 + 68 61 56 Black Chrome 2541 +221 198 196 Heather 2271 +211 183 163 Grape 2272 +181 147 155 Satin Wine 2314 +142 104 119 Ducky Mauve 2422 +252 191 201 Pale Orchid 2423 +229 191 198 Orchid 2379 +239 198 211 Lavender 2276 +237 196 221 Violet 2285 +181 140 178 Cachet 2424 +201 173 216 Tulip 2286 +226 158 214 Mid Lilac 2588 + 81 38 84 Port Wine 2600 + 81 45 68 Pro Maroon 2616 +142 71 173 Laurie Lilac 2425 +175 114 193 Iris 2288 +155 79 150 Raspberry 2426 +102 17 109 Mulberry 2380 + 99 48 94 Plum Wine 2490 + 30 28 119 Purple Twist 2429 + 51 40 117 Violet Blue 2427 + 53 0 109 Purple Maze 2428 + 43 17 102 Pro Brite Star 2736 + 56 25 122 Pro Violet 2742 + 53 0 109 Pro Purple 2628 +142 71 173 Purple 2254 + 91 2 122 Purple Shadow 2430 + 76 20 94 Dark Purple 2381 +137 119 186 Mauve 2287 + 68 35 94 Purple Accent 2431 +170 0 102 Hot Peony 2590 +206 0 124 Passion 2291 +170 0 79 Strawberry 2432 +158 35 135 Plum 2292 + 94 153 170 Misty 2308 + 96 145 145 Mystic Teal 2443 + 96 145 145 Teal 2309 + 0 63 84 Dark Teal 2444 +147 221 219 Mint Julep 2310 +127 214 219 Turquoise 2204 + 0 114 114 M. D. Green 2445 +112 206 155 Seafoam 2311 +112 206 155 Isle Green 2312 + 53 196 175 Peppermint 2390 + 0 109 117 Oceanic Green 2446 + 0 107 119 Pro Teal 2621 + 0 102 99 Garden Green 2447 + 0 109 102 Pro Green 2735 + 0 140 130 Pine Green 2391 + 0 130 114 Greenstone 2448 + 0 102 99 Fern Green 2449 + 0 109 102 Pro Hunter 2615 +188 193 178 Palm Leaf 2241 +198 214 160 Flite Green 2282 +158 170 153 Willow 2221 +178 216 216 Sprite 2313 +122 168 145 Moss 2278 +122 168 145 Wintergreen 2594 + 0 96 96 Greenforest 2451 + 0 96 86 Pro Forest 2743 + 79 109 94 Harbor Green 2392 + 2 73 48 Evergreen 2315 + 0 68 56 Pro Dark Green 2734 + 43 76 63 Lizzy Lime 2631 + 40 45 38 D. H. Green 2411 +242 234 188 Celery 2316 +204 198 147 Pistachio 2250 + 94 102 58 Olive Drab 2317 +119 145 130 Olive 2202 +201 232 221 Pale Green 2318 +147 221 219 Green Pearl 2452 +147 221 219 Sea Mist 2393 +181 232 191 Mint 2238 +170 221 109 Spruce 2279 +160 219 142 Nile 2211 +181 204 142 Green Oak 2319 +140 214 0 Erin Green 2320 + 86 170 28 Pro Erin 2738 + 51 158 53 Emerald 2214 + 0 122 61 Dark Emerald 2453 + 0 122 61 Light Kelly 2410 + 0 122 61 Kelly 2240 + 0 135 81 Dark Green 2208 + 0 107 63 Fleece Green 2454 + 0 104 84 TH Green 2607 + 30 181 58 Harvest Green 2578 + 0 158 73 Vibrant Green 2579 + 0 158 73 Green Grass 2580 + 0 107 63 Deep Green 2284 + 0 107 84 Green Bay 2455 + 0 124 102 Jungle Green 2597 +163 175 7 Peapod 2456 +127 186 0 Pastoral Green 2321 +127 186 0 Green Dust 2457 +127 186 0 Ming 2322 + 86 142 20 Meadow 2226 +147 153 5 Tamarack 2230 + 86 99 20 Palmetto 2229 + 2 73 48 Green Petal 2458 + 84 119 48 Sage 2595 + 63 73 38 Hedge 2601 + 58 119 40 Green 2209 + 25 56 51 Green Sail 2459 + 33 91 51 Holly 2323 + 38 81 66 Field Green 2460 + 63 73 38 Dress Green 2584 +153 132 10 Foliage Green 2542 +163 130 5 Autumn Green 2543 +137 119 25 Desert Cactus 2544 +112 112 20 Cypress 2545 +132 130 5 Crescent Moon 2546 +226 229 132 Pebblestone 2547 +153 142 7 Sun Shadow 2548 + 0 73 79 Blue Spruce 2549 + 79 109 94 Newport 2550 +119 145 130 Spring Garden 2551 + 84 104 86 Water Lilly 2554 + 12 48 38 Ivy 2552 + 35 58 45 Dark Army Green 2553 + 33 61 48 Army Green 2728 +201 214 163 Pastel Green 2555 +224 170 15 Pollen Gold 2556 +244 226 135 Pale Yellow 2557 +255 198 30 Buttercup 2558 +247 232 170 Tusk 2559 +249 221 22 Moonbeam 2560 +198 160 12 Black Eyed Susie 2561 +163 127 20 Bullion 2562 +247 232 170 Chinese Yellow 2324 +247 232 170 Maize 2264 +234 221 150 Wheat 2461 +249 224 140 Pro Maize 2732 +255 216 127 Glow 2234 +252 216 86 Star Gold 2408 +252 163 17 Mango 2394 +252 163 17 Yellow Mist 2409 +252 163 17 Yellow 2213 +249 221 22 Sunflower 2462 +244 237 71 Lemon 2325 +249 232 20 Daffodil 2326 +252 181 20 Merit Gold 2463 +255 204 73 Cornsilk 2395 +255 198 30 Nectar 2464 +252 191 73 Scholastic 2465 +252 224 22 Canary 2235 +255 198 30 Pro Gold 2626 +252 209 22 Manila 2466 +252 209 22 Goldenrod 2242 +255 204 73 Brite Yellow 2396 +249 155 12 Honeydew 2327 +247 127 0 Pumpkin 2328 +247 73 2 Orangeade 2467 +247 73 2 Sunkist 2397 +249 86 2 Paprika 2236 +249 63 38 Saffron 2329 +249 86 2 Tex Orange 2468 +249 107 7 Orange 2218 +249 99 2 Dark Tex Orange 2469 +165 63 15 Old Dark Tex Orange 2581 +252 135 68 Golden Poppy 2330 +188 79 7 Rust 2289 +175 117 5 Copper 2295 +193 142 96 Light Bronze 2493 +252 206 135 Visor Gold 2398 +255 204 73 Goldenlite 2605 +252 186 94 Honey 2247 +255 204 73 Marigold 2216 +224 170 15 Mustard 2331 +224 170 15 Sun Gold 2212 +224 170 15 Karat 2470 +242 191 73 Penny 2332 +252 206 135 New Gold 2399 +226 214 181 Pro Beige 2630 +198 160 12 Marine Gold 2596 +163 127 20 Ginger 2333 +198 160 12 Shimmering Gold 2471 +191 145 12 Old Gold 2201 +234 178 178 Salmon 2299 +193 56 40 Dark Rust 2205 +160 48 51 Terra Cotta 2334 +175 30 45 Pro Red 2623 +175 30 45 Auburn 2472 +255 240 220 Bone 2582 +255 240 220 Ivory 2335 +247 211 181 Opaline 2473 +237 211 188 Ecru 2232 +170 117 63 Wicker 2489 +211 168 124 Tan 2273 +237 211 181 Cottage Beige 2593 +193 168 117 Rattan 2474 +226 191 155 Gold 2203 +211 168 124 Mocha Cream 2475 +191 145 12 Topaz 2400 +209 142 84 Ashley Gold 2401 +216 181 150 Amber Beige 2336 +214 204 175 Seashell 2476 +255 255 216 Light Maize 2604 +170 117 63 Beige 2224 +107 71 20 Sand Dune 2477 +209 191 145 Taupe 2298 +192 124 120 Pro Brown 2610 +135 96 40 Chocolate 2227 + 96 48 0 Pro Walnut 2629 +117 84 38 Light Cocoa 2478 +178 130 96 Cocoa Mulch 2488 + 89 61 43 Brown 2251 + 89 61 43 Dark Brown 2372 + 63 48 43 Espresso 2337 +193 142 96 Bamboo 2338 +175 117 5 Almond 2479 +186 117 48 Toast 2231 +117 84 38 Sienna 2402 +178 107 112 KA Bronze 2480 +255 136 136 Pro Cinnamon 2611 +155 79 25 Date 2290 +155 79 25 Hazel 2481 + 91 45 40 Coffee Bean 2339 + 89 61 43 Dogwood 2563 + 63 48 43 Mahogany 2564 + 61 48 40 Best Brown 2566 + 99 58 17 Mushroom 2567 +193 168 117 Perfect Tan 2568 +122 91 17 Earthen Tan 2569 +193 168 117 Golden Tan 2570 +242 191 73 14 kt. Gold 2586 +242 206 104 TH Gold 2606 +216 140 2 24 kt. Gold 2602 +193 181 165 Platinum 2571 +153 137 124 Pro Gray 2739 +173 160 122 Grayrod 2572 +173 160 122 Pewter 2573 +248 248 248 Aspen White 2574 +102 89 76 Dark Taupe 2575 + 73 53 51 Egyptian Brown 2576 +255 255 245 Oyster 2403 +221 198 196 Gray 2207 +219 211 211 Pearl Gray 2340 +216 204 209 Steel Gray 2274 +204 193 198 Skylight 2482 +175 170 163 Cloud 2483 +173 175 170 Silver Steel 2592 +145 150 147 Banner Gray 2585 +140 137 132 Silvery Gray 2484 +204 193 198 Cinder 2404 +219 211 211 Saturn Gray 2485 +204 193 198 Dover Gray 2405 +178 168 181 Storm Gray 2486 +168 147 173 Sterling 2406 +102 109 112 Metal 2407 +104 102 99 Twilight 2217 + 68 61 56 Aged Charcoal 2565 +119 119 114 Charcoal 2265 + 53 56 66 Smokey 2487 + 58 73 114 Ash 2341 + 28 38 48 Black 2296 +250 250 255 Snow White 2297 +255 255 235 Natural White 2342 +255 255 235 Eggshell 2343 diff --git a/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Royal Polyester.gpl b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Royal Polyester.gpl new file mode 100644 index 00000000..efc142d6 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Royal Polyester.gpl @@ -0,0 +1,477 @@ +GIMP Palette +Name: Ink/Stitch: Royal Polyester +Columns: 4 +# RGB Value Color Name Number +222 78 52 Orange P046 +243 242 248 Silver Blue WHITE + 31 26 28 Midnight Blue BLACK +255 255 255 Snow White P001 +250 248 223 Pale Sea Foam P002 +248 245 204 Ecru P003 +248 241 150 Mustard P004 +255 242 68 Lemon P005 +251 248 107 Pale Yellow P006 +255 230 77 Mid Gold P007 +239 213 54 Sunburst P008 +255 207 62 Yellow P009 +241 229 171 Tan P010 +238 189 96 Golden Cream P011 +242 152 56 Gold / Orange P012 +247 171 119 Nutmeg Medium Light P013 +255 160 47 Orange P014 +201 126 35 Pollen Gold P015 +200 184 89 Ginger P016 +242 202 89 Primrose Yellow P017 +221 174 44 Light Orange P018 +234 216 228 Pale Pink P019 +235 201 218 Palest Pink P020 +242 190 213 Memphis Belle P021 +239 176 207 Pale Pink P022 +243 160 188 Salmon Pink P023 +215 90 122 Cranberry medium P024 +230 60 107 Pink P025 +230 60 108 Pink P025 +228 40 98 Med. Rose P026 +228 40 99 Med. Rose P026 +209 107 157 Hot Pink P027 +204 63 116 Pink Rapture P028 +230 219 223 Light Orange / Red P029 +239 189 180 Peach Skin P030 +235 190 211 Light Pink P031 +231 152 158 Sea Pink P032 +239 147 158 Carmine Rose Medium Light P033 +207 98 119 Hot Red P034 +199 107 118 Med Plum P035 +199 107 119 Med Plum P035 +192 77 74 Orange P036 +236 202 193 Demure P037 +231 205 208 Light Pink P038 +241 179 164 Soft Coral P039 +244 179 159 Blossom P040 +228 122 96 Medium Orange P041 +235 135 75 Gold P042 +234 128 70 Gold P043 +239 132 78 Gold P044 +223 74 50 Light Bronze P045 +210 24 35 Foxy Red P047 +196 66 52 Rococco Red P048 +210 26 26 Scarlet Red P049 +210 26 27 Scarlet Red P049 +184 67 75 Geranium P050 +235 125 126 Confetti P051 +205 56 58 Dark Punch P052 +180 59 64 Dusky Rose P053 +166 39 46 Red Berry P054 +230 244 255 White P055 +189 216 243 Ice Blue P056 +169 202 255 Medium Blue P057 +122 159 230 Medium Blue P058 +105 190 245 River Mist P059 +200 209 248 Pastal Blue P060 +109 143 232 Medium Blue P061 +139 176 247 Medium Blue P062 +105 142 230 Bright Blue P063 + 25 58 173 Royal Blue P064 + 26 81 198 Smurf Blue P065 + 31 52 145 Dark Blue P066 + 95 111 170 Violet P067 + 32 44 92 Denim P068 + 17 24 105 Imperial Blue P069 + 31 37 61 Darkest Navy Blue P070 + 47 88 90 Peacock P071 + 31 65 75 Deep Windsor P072 +234 201 248 Lilac P073 +206 123 215 Lt. Purple P074 +224 160 234 Hyacinth P075 +201 107 203 Purple P076 +152 74 194 Mulberry P077 +172 109 179 Iris P078 +172 109 178 Iris P078 + 74 7 104 Royal Purple P079 + 66 13 121 Purple Maze P080 +144 65 192 Amethyst P081 +102 30 155 Dark Purple P082 + 73 16 145 Regal Purple P083 + 51 12 119 Purple Maze P084 +122 129 210 Violet P085 + 59 30 114 Purple Maze P086 + 87 81 151 Med. Purple P087 +102 35 132 Purple Twist P088 + 93 65 106 Bright Plum P089 + 48 40 91 Dark Navy P090 +208 245 38 Fluorescent Yellow P091 +192 242 231 Sky Blue P092 +154 227 234 Aqua P093 +192 237 255 Sun Blue P094 + 90 170 233 Medium Blue P095 + 50 142 217 Sapphire P096 + 26 111 202 Dark Blue P097 + 23 58 62 Rolled Steel P098 +147 226 255 Sky Blue P099 +123 217 253 Electric Bleu Light P100 + 28 167 188 Dark Turquoise Blue P101 + 0 120 154 Dark Turquoise Blue P102 + 67 185 171 Turquoise P103 +168 235 202 Bright Mint P104 + 79 191 175 Aquamarine P105 + 13 119 109 Teal Green Dark P106 + 24 111 92 Green Forest P107 + 30 134 135 Surf Bleu Medium P108 +225 248 204 Loden Green Very Light P109 +177 233 204 Mint P110 +145 217 131 Light Jade P111 +137 206 141 Seafoam P112 +130 202 136 Spring Bouquet P113 +101 189 102 Green Gables P114 + 36 123 68 Jade P115 + 33 132 78 Bangkok Green P116 + 22 77 58 Evergreen P117 + 70 171 127 Green P118 +216 244 131 Pale Yellow P119 +204 241 76 Fluo Yellow / Green P120 +138 187 44 Med Olive Green P121 +201 191 94 Ginger P122 + 90 160 46 Green / Yellow P123 +105 189 93 Limedrop P124 + 92 168 59 Pear P125 + 62 126 52 Medium Green P126 +230 205 165 Wheat P127 +233 201 176 Cream Tan P129 +182 144 121 Roebuck P130 +237 187 136 Peach P131 +225 185 136 Sheepskin P132 +164 153 125 Pale Green / Yellow P133 +148 117 86 Raw Umber P134 +157 145 123 Taupe P135 +173 146 119 Almondine P136 +225 147 111 Sand Stone Medium P137 +218 149 94 Sunkissed P138 +127 84 50 Dark Red Orange P139 +170 101 72 Brown P140 +152 118 72 Pale Brown P141 +158 132 99 Sienna P142 +155 112 78 Brown P143 +142 102 53 Medium Orange / Brown P144 +196 170 173 Burnished Lilac P145 +196 170 172 Burnished Lilac P145 +222 173 179 Medium Pink P146 +222 173 178 Medium Pink P146 +184 126 167 Regal Orchid P147 +184 126 166 Regal Orchid P147 +182 93 123 Dark Pink P148 +182 93 124 Dark Pink P148 +170 83 102 Amber Red P149 +170 83 103 Amber Red P149 +253 166 217 Medium Pink P150 +253 166 216 Medium Pink P150 + 99 0 28 Red P151 + 99 0 29 Red P151 +143 36 82 Raspberry P152 +188 22 104 Dark Pink P152 +140 24 89 Burgundy P153 +111 20 99 Violet Very Dark P153 +135 16 72 Cranberry P154 +135 16 73 Cranberry P154 +127 32 38 TH Burgundy P155 +127 32 39 TH Burgundy P155 +101 21 32 Brown P156 +101 21 33 Brown P156 +181 40 30 Red P157 +157 75 61 Dark Red / Orange P158 +157 75 62 Dark Red / Orange P158 + 87 36 33 Henna P159 + 87 36 34 Henna P159 +102 46 33 Tan P160 +102 46 34 Tan P160 +114 66 46 Dark Brown P161 +114 66 47 Dark Brown P161 +107 59 55 Sepia P162 +107 59 56 Sepia P162 +242 250 237 Pale Yellow-Green P163 +180 173 181 Storm Gray P164 +210 202 215 Pale Grey / Pink P165 +206 183 191 Light Pink P166 +206 183 190 Light Pink P166 +168 167 173 Pewter P167 +139 163 139 Sea Green P168 +167 226 180 Brook Green P169 +142 151 132 Seagrass P170 +154 230 220 Mint Julep P171 +120 118 67 Medium Green / Yellow P172 + 44 72 21 Blue Spruce P173 +153 142 146 Silver Rose P174 +155 154 123 Grey Khaki P175 +122 124 149 Purple Dusk P176 +123 122 128 Cool Grey P177 + 40 36 27 Black P178 +250 244 246 White P181 +245 238 220 Ecru Very Light P182 +241 223 177 Lemonade P183 +244 232 210 Nude Gold P184 +220 184 148 Pale Peach P185 +161 134 81 Fall Leaf P186 +196 149 45 Old Gold P187 +255 173 39 Manila P188 +240 148 63 Marigold P189 +235 136 69 Apricot P190 +230 120 57 Coral Rose P191 +243 175 198 Carnatio P192 +237 184 212 Sugar Pink P193 +215 48 78 Teaberry P194 +224 191 238 Light Tulip P195 +118 36 58 Red Jubilee P196 +131 62 65 Brown P196 +141 163 246 Medium Blue P197 +129 167 232 Medium Blue P198 +102 140 205 Med. Periwinkle P199 + 20 60 173 Royal Blue P200 + 20 53 168 Blue Ink P201 + 27 54 145 Dark Blue P202 + 17 16 58 Navy Blue P203 + 39 39 75 Blueberry Blue P204 +192 250 252 Pillow Blue P205 +148 143 113 Medium Green / Grey P206 + 11 94 66 Dark Green P207 + 27 116 86 Green Forest P208 + 3 91 103 Dark Green / Yellow P209 +237 233 224 Lily White P210 +194 180 169 Light Brown P211 +195 185 183 Lilac Gray P212 +115 104 108 Charcoal P213 +139 122 128 Gray Ridge P214 +128 118 116 Suede P215 + 84 87 102 Gull P216 +253 175 39 Manila P219 +164 150 77 Golden Tan P221 +153 91 18 Mocha Dark P224 +240 152 176 Medium Pink P227 +172 79 132 Dahlia Mauve P229 +185 59 96 Dark Pink P230 +188 22 105 Dk. Rose P232 +140 24 90 Burgundy P232 +246 177 122 Peach P233 +220 114 114 Shell Pink P234 +226 208 188 Light Orange P239 +205 110 178 Medium Pink P239 +205 110 177 Medium Pink P239 + 70 27 36 Dark Oak P241 + 70 27 37 Dark Oak P241 + 88 51 58 Dark Sepia P242 + 88 51 59 Intense Maroon P242 +186 44 43 Dark Rust P243 +186 44 44 Orange P243 +102 5 22 Brown P244 +102 5 23 Brown P244 + 81 1 12 Dark Chocolate P246 + 81 1 13 Dark Chocolate P246 +111 133 216 Jay Blue P247 + 77 103 200 Royal Blue P248 + 81 100 203 Marine Blue P249 +254 139 170 Azalea P250 + 53 105 207 Dolphin Blue P253 + 37 77 190 Jamie Blue P254 + 31 50 127 Royal Blue P255 + 42 54 102 Navy Blue P256 +192 128 224 Pansy Purple P260 +177 102 205 Amethyst P261 +139 59 192 Amethyst P262 +110 113 190 Violet P263 +186 200 175 Palm Leaf P265 +158 238 227 Aqua P266 +125 208 248 Chicory P270 + 41 131 194 Sapphire P271 +187 239 173 Pale Green P272 + 39 160 155 Nile Blue P274 +100 205 201 Light Blue / Green P275 + 93 198 194 Aquamarine P276 + 57 178 173 Grizzly Turquoise P277 + 63 184 211 Aquarius P278 + 20 139 120 Green / Blue P279 +130 151 118 Yellow Green / Medium P282 + 75 111 50 Dark Leaf Green P284 +105 183 82 Apple Green P285 + 38 145 125 Jade P287 +113 142 122 Cloudy Jade P288 + 23 125 112 Jade Green P289 + 15 68 60 Shaded Spruce P290 + 0 53 45 Beau Geste P291 + 17 79 58 Dark Green P292 + 44 56 46 Pine Dark P293 + 74 87 41 Green / Yellow P294 + 62 72 48 Swamp Gator P295 + 53 57 30 Dark Forest P296 + 47 58 28 Special Green P297 + 45 42 23 Teal Appeal P298 +242 233 194 Sheer Ivory P299 +212 204 158 Hay P300 +187 186 155 Tidal Foam P301 +197 163 117 Flax P302 +144 123 94 Doe P303 +157 119 100 Medium Brown P304 +205 94 41 Rust P305 +205 94 42 Rust P305 +170 97 63 Autumn Glaze P306 +104 57 31 Mocha P307 +104 57 32 Mocha P307 + 90 58 59 Mahogany P308 + 90 58 60 Mahogany P308 + 83 50 35 Dark Brown P310 + 83 50 36 Dark Brown P310 +122 34 58 Russet P311 +236 247 243 Slate Bleu Light P311 +230 221 214 Turtledove P312 +169 181 171 Traditional Gray P314 +185 178 186 Pale Sterling Grey P316 +181 181 181 Light Grey / Green P317 +154 15 161 Purple P318 +155 144 148 Silver Rose P319 +135 152 146 Limestone P320 +103 91 101 Plum Kitten P321 +140 128 138 Penguin Grey P322 +105 96 115 Cadet P323 + 34 56 116 Dark Blue P325 +246 190 141 Glow P326 + 47 168 163 Grizzly Turquoise P327 +205 56 59 Dark Punch P328 +186 47 88 Wildfire P329 + 64 92 41 Dark Green P330 +122 34 59 Russet P331 + 62 65 80 Dark Grey / Blue P4324 +250 244 245 White P7003 +186 186 186 Winter Sage P7011 +233 215 195 Peach Cloud P7017 +219 95 43 Medium Orange P7021 +245 244 213 Eggshell P7022 +255 173 40 Manila P7024 +240 155 26 Golden Rod P7025 +230 192 127 Bamboo P7026 +133 159 218 Powder Blue P7028 +104 12 27 Brown P7035 +131 62 66 Brown P7036 +130 62 65 Brown P7036 +213 37 22 Red P7037 +213 37 23 Red P7037 +144 18 19 Cranberry P7038 +144 18 20 Aurora Red P7038 +193 15 13 Carmine P7039 +193 15 14 Carmine P7039 +159 142 148 Light Brown P7040 + 12 14 35 Charcoal P7044 +189 239 186 Lt. Teal P7047 +135 178 70 Medium Green / Yellow P7049 + 65 38 46 Dark Purple P7050 + 54 149 81 Light Green P7051 + 55 127 103 Dark Blue / Green P7052 +240 211 195 Crystal Pink P7053 +235 201 155 Deep Ecru P7055 +129 86 33 Taupe P7056 +142 89 58 Dark Brown P7057 +142 89 59 Dark Brown P7057 +194 182 160 Sand P7060 +232 124 51 Amberglow P7065 +238 188 101 Golden Cream P7070 +178 197 239 Pale Blue P7075 + 25 58 172 Royal Blue P7076 +225 84 41 Orange P7078 +231 213 193 Peach Cloud P7082 +233 216 190 Seedpearl P7084 +148 219 205 Pale Aqua Green P7089 + 65 173 147 Isle Green P7090 + 35 150 153 Tender Teal P7091 + 0 36 3 Mahogany P7103 +248 96 157 Rose P7109 +248 96 156 Rose P7109 + 95 25 158 Dark Purple P7112 +178 175 192 Sleet Grey P7118 +236 197 216 Violet P7121 +255 200 61 Bright Yellow P7125 +174 113 66 Wicker P7126 +193 161 136 Iced Mocha P7128 +100 72 50 Clayrust P7129 +100 72 51 Clayrust P7129 +184 231 241 Palest Aqua P7132 +109 137 221 Medium Blue P7133 + 28 77 196 Smurf Blue P7134 +233 140 36 Goldenrod P7137 + 98 109 199 Violet P7143 +112 65 55 Fox P7145 +112 65 56 Fox P7145 +235 55 32 Fluorescent Orange P7146 +235 55 33 Fluorescent Orange P7146 +202 17 22 Wild Fire P7147 +202 17 23 Wild Fire P7147 +238 220 200 White Smoke P7149 +126 63 32 Brown P7158 +126 63 33 Dark Brown P7158 +254 183 77 Mimosa P7159 + 39 46 127 Dark Royal Blue P7166 + 35 47 133 Royal Blue P7167 +247 169 1 Orange Mist P7172 + 89 110 177 Violet P7175 + 36 95 185 Magic Blue P7177 +151 6 19 Dark Red P7181 +151 6 20 Dark Red P7181 +155 47 63 Perfect Ruby P7182 +155 47 64 Perfect Ruby P7182 + 1 76 72 Dark Green P7185 +177 12 26 Red Jubilee P7186 +177 12 27 Red Jubilee P7186 +111 20 100 Violet Very Dark P7188 +134 16 72 Cranberry P7188 +151 124 71 Pale Brown P7191 +197 55 19 Firecracker P7221 +197 55 20 Firecracker P7221 +225 134 19 Tan P7225 +239 157 107 Pale Orange P7226 + 77 14 103 Dark Purple P7233 +237 66 118 Azalea P7234 +237 66 119 Azalea P7234 + 36 37 31 Carbon Black P7241 + 19 40 107 Dk. Royal Blue P7242 + 37 39 60 Dark Navy P7243 + 75 183 157 Turquoise P7246 + 23 108 69 Festive Green P7250 +208 117 64 Topaz Medium P7253 +245 136 69 Golden Poppy P7278 +158 13 30 Aurora Red P7281 +158 13 31 Aurora Red P7281 + 9 50 52 Prussian Blue P7290 + 11 83 95 Dark Teal P7291 + 33 115 162 Teal P7295 + 1 126 190 Colonial Blue P7297 +190 133 227 Pansy Purple P7311 +234 166 163 Flesh Pink P7317 + 75 27 127 Purple Accent P7322 +186 157 115 Tan P7338 +150 77 70 Dark Red / Orange P7341 +150 77 71 Dark Red / Orange P7341 + 68 26 92 Purple Accent P7343 +157 169 191 Rockport Blue P7360 + 72 136 62 Northern Pine P7369 + 17 70 42 Deep Forest Green P7370 + 37 69 126 Imperial Blue P7376 +131 27 52 Maroon P7384 +131 27 53 Maroon P7384 +106 26 37 Warm Wine P7385 +106 26 38 Warm Wine P7385 +105 60 81 Dark Purple P7386 +105 60 82 Medium Purple P7386 +114 17 60 Purple Ice P7389 +114 17 61 Purple Ice P7389 + 30 57 48 Spruce P7397 +243 243 243 White P7802 + 39 161 146 Tender Teal P801 + 23 129 115 Surf Bleu Medium P802 +106 107 101 Cloudburst P803 + 97 93 84 Black Chrome P804 + 71 23 159 Bright Sky P805 + 93 21 67 French Raspberry Red P806 +253 250 47 Yellow P807 +245 255 152 Coronation Gold P808 +118 253 65 Bright Green P809 +255 121 34 Soleil P810 +255 67 63 Fluo Pink P811 +255 61 137 Wine P812 +218 73 90 Raspberry P813 +218 73 91 Raspberry P813 + 23 50 41 Ivy P814 diff --git a/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Royal Viscose Rayon.gpl b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Royal Viscose Rayon.gpl new file mode 100644 index 00000000..375e588a --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Royal Viscose Rayon.gpl @@ -0,0 +1,498 @@ +GIMP Palette +Name: Ink/Stitch: Royal Viscose Rayon +Columns: 4 +# RGB Value Color Name Number +225 67 81 Medium Red / Orange C056 +229 77 125 Azalea C436 +212 4 72 Strawberry C505 +162 37 56 Wildfire C320 +236 207 199 Palest Peach C041 +229 77 125 Azalea C377 +220 129 140 Medium Pink C496 +213 97 110 Rapture Rose C086 +144 36 68 Perfect Ruby C058 +162 37 56 Wildfire C701 +148 66 101 Medium Purple C530 +162 37 56 Wildfire C349 +218 138 155 Rose Tint C495 +218 138 155 Rose Tint C050 +239 152 164 Medium Pink C702 +236 207 199 Palest Peach C403 +232 136 144 Light Orange C450 +229 86 109 Shrimp C488 +212 4 72 Strawberry C560 +183 57 68 Dusky Rose C703 +241 104 119 Dusty Rose C052 +242 199 196 Pink Mist C046 +241 185 192 Orchid Pink C048 +244 200 202 Crystal Pink C704 +241 185 192 Orchid Pink C319 +241 173 178 Pale Pink C049 +239 152 164 Medium Pink C382 +215 42 41 Tuxedo Red C487 +225 67 81 Medium Red / Orange C053 +209 45 51 Spanish Red C705 +225 67 81 Medium Red / Orange C054 +232 136 144 Light Orange C051 +242 199 196 Pink Mist C044 +227 189 183 Lotus C042 +242 167 171 Pale Pink C406 +213 97 110 Rapture Rose C507 +155 49 28 Red Bittersweet C706 +125 32 30 Burgundy C220 +126 45 36 Burgundy C076 +124 33 41 Burgundy C707 +177 39 38 Red Berry C708 +193 57 40 Dark Rust C219 +193 57 40 Dark Rust C373 +241 104 119 Dusty Rose C223 +240 182 160 Blossom C222 +229 198 171 Pale Peach C508 +229 198 171 Pale Peach C709 +241 104 119 Dusty Rose C408 +144 71 75 Dark Brown C529 +140 37 50 Burgundy C710 +126 45 36 Burgundy C548 + 92 38 37 Dark Sepia C711 + 92 38 37 Dark Sepia C712 +109 52 44 Dark Brown C490 +126 45 36 Burgundy C077 +232 192 187 Pale Orange C021 +232 192 187 Pale Orange C506 +188 95 30 Hazel C407 +148 51 18 Red Bittersweet C713 +148 51 18 Red Bittersweet C547 +232 136 144 Light Orange C714 +240 182 160 Blossom C322 +234 170 123 Bamboo C025 +210 69 20 Tropical Orange C715 +216 30 4 Orange / Red C413 +234 170 123 Bamboo C284 +211 168 125 Tan C024 +241 197 176 Bisque C383 +222 79 4 Orange C510 +216 30 4 Orange / Red C037 +210 69 20 Tropical Orange C040 +210 69 20 Tropical Orange C343 +222 79 4 Orange C033 +232 117 19 Golden Poppy C031 +237 160 80 Pale Gold C026 +232 117 19 Golden Poppy C716 +222 79 4 Orange C032 +216 30 4 Orange / Red C717 +226 62 40 Honeysuckle C038 +193 57 40 Dark Rust C718 +216 30 4 Orange / Red C719 +222 79 4 Orange C509 +232 117 19 Golden Poppy C359 +237 160 80 Pale Gold C405 +242 132 17 Golden Poppy C720 +245 197 160 Opaline C437 +231 179 131 Gold C721 +161 78 19 Date C553 +167 63 16 Old Dark Tex Orange C531 +232 117 19 Golden Poppy C030 +242 132 17 Golden Poppy C027 +232 117 19 Golden Poppy C029 +252 127 64 Golden Poppy C722 +245 197 160 Opaline C066 +245 197 160 Opaline C401 +209 93 6 Dark Orange C723 +167 63 16 Old Dark Tex Orange C724 +167 63 16 Old Dark Tex Orange C291 +193 57 40 Dark Rust C725 +133 53 19 Bark C075 +141 89 50 Light Cocoa C726 +144 71 75 Dark Brown C532 + 72 35 18 Dark Oak C294 + 72 35 18 Dark Oak C079 + 72 35 18 Dark Oak C727 +110 51 33 Dark Brown C728 +132 63 16 Chocolate C729 +188 95 30 Hazel C353 +161 78 19 Date C479 +171 117 64 Wicker C325 +171 117 64 Wicker C069 +187 117 49 Toast C067 +143 75 4 Orange / Brown C730 +161 78 19 Date C731 +157 106 6 Ginger C419 +116 64 10 Chocolate C073 + 97 52 19 Mushroom C480 + 72 35 18 Dark Oak C078 +108 49 32 Tan C498 + 82 42 37 Dark Brown C080 +171 117 64 Wicker C528 +179 131 96 Fawn C206 +194 168 117 Rattan C732 +216 180 150 Amber Beige C538 +193 144 97 Light Bronze C205 +134 96 40 Chocolate C072 +171 117 64 Wicker C070 +245 197 160 Opaline C426 +216 180 150 Amber Beige C063 +210 190 145 Taupe C289 +194 168 117 Rattan C552 +154 98 7 Orange / Brown C432 +216 180 150 Amber Beige C202 +179 131 96 Fawn C733 +164 127 21 Bullion C417 +171 117 64 Wicker C071 +211 168 125 Tan C065 +179 131 96 Fawn C734 +187 117 49 Toast C068 +187 117 49 Toast C735 +192 146 12 Old Gold C736 +208 143 85 Ashley Gold C214 +192 146 12 Old Gold C542 +192 146 12 Old Gold C737 +199 147 10 Old Gold C738 +237 160 80 Pale Gold C249 +204 122 2 Almond C216 +240 179 47 Yellow Poppy C215 +240 179 47 Yellow Poppy C018 +208 143 85 Ashley Gold C020 +243 208 62 Gold Goblet C739 +246 204 170 Flesh C016 +211 168 125 Tan C740 +205 196 126 Cocoon C017 +243 206 105 Yellow Gold C503 +243 208 62 Gold Goblet C329 +216 181 17 Pollen Gold C741 +235 177 16 Gold C742 +243 208 62 Gold Goblet C013 +235 177 16 Gold C439 +243 208 62 Gold Goblet C012 +255 203 73 Cornsilk C501 +243 208 62 Gold Goblet C743 +241 191 74 Penny C011 +234 223 151 Wheat C015 +234 223 151 Wheat C502 +221 205 106 Pale Yellow C210 +210 190 145 Taupe C744 +251 224 112 Snapdragon C010 +243 206 105 Yellow Gold C009 +230 220 186 Cocoa Mulch C745 +227 219 116 Canary Yellow C007 +234 223 151 Wheat C317 +232 222 32 Yellow C316 +232 222 32 Yellow C008 +245 228 135 Pale Yellow C006 +221 205 106 Pale Yellow C212 +181 155 13 Old Gold C211 +192 146 12 Old Gold C504 +162 131 5 Autumn Green C746 +228 220 170 Light Yellow / Orange C004 +235 229 151 Wheat C005 +221 205 106 Pale Yellow C209 +221 205 106 Pale Yellow C525 +151 140 41 Medium Yellow / Green C421 +106 113 43 Palmetto C489 + 72 35 18 Dark Oak C470 + 72 35 18 Dark Oak C471 + 72 35 18 Dark Oak C472 + 92 71 36 Dark Olive Green C411 + 74 70 19 Khaki C176 + 96 76 18 Sand Dune C177 + 96 76 18 Sand Dune C466 +135 117 49 Dark Green / Yellow C172 +113 111 21 Cypress C459 + 98 94 17 Palmetto C174 + 84 119 49 Sage C526 + 64 74 38 Hedge C747 + 64 74 38 Hedge C748 + 64 74 38 Hedge C180 +112 149 2 Meadow Green C425 +182 172 89 Pale Green / Yellow C166 +206 215 75 Dark Green C165 +206 215 75 Dark Green C524 +181 204 142 Green Oak C429 +171 186 10 Peapod C167 +206 215 75 Dark Green C638 +170 221 110 Spruce C374 +221 213 155 Maize Silk C163 +234 223 151 Wheat C424 +181 204 142 Green Oak C749 + 96 144 59 Spruce C750 + 87 99 20 Palmetto C751 +112 149 2 Meadow Green C460 +217 223 180 Lime Cream C551 +217 223 180 Lime Cream C162 +181 204 142 Green Oak C358 + 62 144 50 Kelly C752 + 96 144 59 Spruce C152 + 96 144 59 Spruce C324 +216 214 184 Cream C453 +199 214 161 Flite Green C148 +247 127 0 Pumpkin C151 + 8 110 84 Green Bay C753 +181 204 142 Green Oak C420 +199 214 161 Flite Green C168 +176 191 174 Sea Foam C754 +212 210 170 Light Green / Yellow C161 +181 204 142 Green Oak C428 +162 194 174 Jade Gray C147 + 0 124 88 Irish Green C155 + 79 110 94 Harbor Green C288 + 8 110 84 Green Bay C545 + 0 124 88 Irish Green C154 +122 169 145 Moss C523 +155 219 194 Pale Aqua C145 +128 188 171 Dusty Jade Green C352 + 8 110 84 Green Bay C156 + 8 110 84 Green Bay C463 + 34 83 65 Field Green C159 + 83 72 45 Dark Olive Green C465 + 35 70 54 Mitchell Green C755 + 64 64 57 Black Chrome C561 + 68 62 55 Black Chrome C464 +184 207 188 Celadon C144 +198 214 197 Dawn Blue C142 +209 228 212 Blue Glass C141 +159 170 153 Willow C169 +142 139 122 Pale Grey C486 +159 170 153 Willow C170 +159 170 153 Willow C416 +115 132 113 Willow C462 + 68 62 55 Black Chrome C469 +106 95 80 Dark Grey C120 +188 220 203 Pale Green C337 +209 228 212 Blue Glass C143 +146 162 153 Jadeite C438 +121 119 116 Charcoal C756 + 74 76 73 Dark Grey C757 + 73 53 50 Egyptian Brown C468 +184 207 188 Celadon C146 + 0 134 115 Isle Green C285 + 31 123 109 Jade Green C476 + 31 123 109 Jade Green C158 + 79 110 94 Harbor Green C758 + 79 110 94 Harbor Green C449 + 98 146 146 Teal C461 +127 200 179 Pale Green C475 +188 220 203 Pale Green C550 + 93 134 114 Trooper C759 + 98 146 146 Teal C760 + 98 146 146 Teal C313 + 0 161 185 Marine Aqua C456 +141 205 212 Pale Turquoise C454 + 98 146 146 Teal C455 + 0 127 152 Dark Aqua Green C761 + 98 146 146 Teal C457 + 97 125 141 Pale Green / Blue C485 + 39 105 109 Deep Atlantic C762 + 70 78 82 Midnight C119 + 94 130 163 Slate Blue C423 + 98 146 146 Teal C458 +152 215 223 Blue Frost C102 +204 227 222 Soothing Sea C101 + 84 183 200 Capri C104 +101 147 189 Pale Purple C107 + 0 139 178 Blue / Green C522 + 0 122 167 Pretty Blue C447 + 0 139 178 Blue / Green C106 + 0 139 178 Blue / Green C764 +141 205 212 Pale Turquoise C103 +184 205 219 Misty Fog C109 +175 188 192 Celestial Blue C339 +120 150 178 Country Blue C765 + 94 130 163 Slate Blue C766 + 63 97 117 Medium Green / Blue C767 + 97 125 141 Pale Green / Blue C443 + 70 78 82 Midnight C521 + 70 78 82 Midnight C513 +101 147 189 Pale Purple C446 +118 179 223 Ultra Blue C110 +101 147 189 Pale Purple C111 + 0 132 202 Blue / Green C112 + 0 115 198 Medium Blue C113 + 0 113 159 Dark Turquoise Blue C768 + 93 120 203 Jay Blue C769 + 52 86 134 Imperial Blue C132 + 52 40 117 Violet Blue C323 + 47 52 142 Blue C536 + 52 86 134 Imperial Blue C133 + 94 130 163 Slate Blue C114 +155 162 184 Purple Cloud C275 +118 179 223 Ultra Blue C378 +173 178 194 Pale Grey C124 +173 178 194 Pale Grey C770 +198 208 214 Pastel Blue C121 +209 206 200 Light Green C123 +155 170 192 Rockport Blue C771 + 52 86 134 Imperial Blue C772 + 52 40 117 Violet Blue C773 + 47 52 142 Blue C265 + 47 52 142 Blue C134 + 89 97 169 Soldier Blue C131 +155 162 184 Purple Cloud C283 +155 170 192 Rockport Blue C280 +128 139 192 Oriental Blue C129 + 94 130 163 Slate Blue C549 + 52 40 117 Violet Blue C444 + 59 75 115 Ash C512 +155 162 184 Purple Cloud C128 +155 162 184 Purple Cloud C511 +155 170 192 Rockport Blue C125 + 94 130 163 Slate Blue C130 + 73 53 50 Egyptian Brown C334 + 73 53 50 Egyptian Brown C138 + 63 97 117 Medium Green / Blue C484 + 70 78 82 Midnight C546 + 60 52 43 Best Brown C314 + 60 52 43 Best Brown C774 + 0 115 198 Medium Blue C775 + 47 52 142 Blue C776 + 47 52 142 Blue C777 + 37 85 126 Lake Blue C778 + 59 75 115 Ash C779 +173 178 194 Pale Grey C539 +110 134 169 Slate Blue C441 + 52 86 134 Imperial Blue C442 + 52 40 117 Violet Blue C136 + 44 38 92 Blue Ink C135 + 52 40 117 Violet Blue C244 + 52 40 117 Violet Blue C355 + 59 75 115 Ash C137 + 72 43 88 Blackberry C780 +173 178 194 Pale Grey C236 +103 75 118 Jazz Purple C534 + 64 49 44 Espresso C139 + 73 53 50 Egyptian Brown C264 + 73 53 50 Egyptian Brown C140 + 64 49 44 Espresso C781 + 44 32 71 Dark Purple C520 + 73 53 50 Egyptian Brown C336 + 89 52 68 Intense Maroon C782 +103 75 118 Jazz Purple C448 +141 131 154 Dusk C783 +141 131 154 Dusk C518 + 98 86 121 Dark Grey / Blue C445 +138 119 185 Mauve C410 + 74 60 99 Cassis C099 + 44 38 92 Blue Ink C100 +103 75 118 Jazz Purple C784 + 52 40 117 Violet Blue C785 + 52 40 117 Violet Blue C535 + 72 43 88 Blackberry C350 + 74 60 99 Cassis C094 +103 75 118 Jazz Purple C452 +212 183 203 Winsome Orchid C330 +141 131 154 Dusk C467 +138 119 185 Mauve C090 + 44 38 92 Blue Ink C517 +169 147 173 Sterling C451 +180 140 178 Cachet C422 +148 107 128 Very Grape C409 + 72 43 88 Blackberry C515 + 72 43 88 Blackberry C516 + 74 60 99 Cassis C096 +148 107 128 Very Grape C088 +198 164 193 Lavandula C084 +211 157 177 Pale Pink C514 +203 194 200 Skylight C081 +204 175 183 Rose Beige C085 +166 108 109 Heather Rose C087 + 89 52 68 Intense Maroon C519 +229 198 171 Pale Peach C061 +189 165 159 Light Brown C226 +132 73 74 Dark Brown C415 +178 107 111 K. A. Bronze C433 +109 52 44 Dark Brown C402 +108 49 32 Tan C060 + 73 53 50 Egyptian Brown C786 + 72 40 54 Plum C440 + 68 30 27 Dark Oak C497 +189 165 159 Light Brown C225 +211 192 184 Stainless Steel C186 +211 192 184 Stainless Steel C483 +193 182 165 Platinum C185 +221 204 165 Sea Mist C203 +225 204 185 Whisper Pink C201 +211 183 162 Grape C204 +176 137 113 Tawny Birch C477 + 92 71 36 Dark Olive Green C270 +126 81 61 Dark Brown C207 +164 151 136 Goat C427 +211 183 162 Grape C787 +229 198 171 Pale Peach C788 +216 180 150 Amber Beige C789 +154 113 92 Orange / Brown C541 + 59 52 33 Best Brown C554 + 72 35 18 Dark Oak C277 + 59 52 33 Best Brown C790 +238 211 181 Cottage Beige C791 +229 198 171 Pale Peach C792 +211 183 162 Grape C062 +211 183 162 Grape C431 +181 145 125 Roebuck C527 +154 113 92 Orange / Brown C478 +196 153 119 Light Red / Orange C430 +211 168 125 Tan C064 +242 200 141 Apricot Cream C793 +227 191 155 Gold C491 +230 220 186 Cocoa Mulch C328 +188 173 118 Silver Fern C473 +196 184 150 Gravel C474 +155 159 116 Arcadian Green C171 +166 163 157 Pale Grey C232 +129 115 100 Medium Green / Yellow C276 + 73 53 50 Egyptian Brown C199 + 60 52 43 Best Brown C269 + 41 41 32 D. H. Green C357 + 43 44 42 Dark Grey C794 +151 149 142 GS Gray C555 +164 151 136 Goat C435 +146 150 148 Banner Gray C556 +230 220 205 Turtledove C481 +206 210 199 Dawn Blue C360 +197 193 185 Saturn Gray C482 +193 182 165 Platinum C362 +151 149 142 GS Gray C267 +104 103 100 Twilight C271 +103 88 77 Dark Taupe C195 +233 226 215 Palest Ivory C315 +230 220 205 Turtledove C181 +223 217 206 White Sand C182 +187 183 175 Skylight C354 +212 206 197 Pearl Gray C183 +203 194 200 Skylight C540 +209 206 200 Light Green C184 +153 137 125 Light Brown C537 +140 111 108 Twilight Mauve C434 +126 110 99 Medium Green / Yellow C342 +234 226 183 Cocoa Mulch C003 +233 226 215 Palest Ivory C795 +200 195 178 Moonstruck C331 +166 163 157 Pale Grey C189 +140 111 108 Twilight Mauve C494 +140 111 108 Twilight Mauve C557 +153 137 125 Light Brown C190 +129 115 100 Medium Green / Yellow C192 +126 110 99 Medium Green / Yellow C193 +153 137 125 Light Brown C492 +164 151 136 Goat C796 +233 226 215 Palest Ivory C376 +233 226 215 Palest Ivory C001 +233 226 215 Palest Ivory C282 +153 137 125 Light Brown C187 +141 127 113 Fungi C418 +126 110 99 Medium Green / Yellow C191 +153 137 125 Light Brown C194 + 68 62 55 Black Chrome C196 +103 88 77 Dark Taupe C273 +174 175 171 Traditional Gray C797 +166 163 157 Pale Grey C798 +187 183 175 Skylight C327 + 73 53 50 Egyptian Brown C197 + 60 48 41 Best Brown C278 +103 88 77 Dark Taupe C412 +121 119 116 Charcoal C235 + 98 86 121 Dark Grey / Blue C544 +209 206 200 Light Green C799 +187 183 175 Skylight C533 +166 163 157 Pale Grey C234 + 89 63 62 Dark Brown C414 + 64 49 44 Espresso C558 + 62 49 35 Best Brown C200 +115 162 172 Country Blue C763 diff --git a/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Sigma.gpl b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Sigma.gpl new file mode 100644 index 00000000..0c95201c --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Sigma.gpl @@ -0,0 +1,154 @@ +GIMP Palette +Name: Ink/Stitch: Sigma +Columns: 4 +# RGB Value Color Name Number +255 255 255 White ST10 + 0 0 0 Black ST20 +237 255 80 Light Neon Green ST21 +150 232 69 Neon Green ST32 +255 231 86 Light Neon Orange ST33 +255 120 36 Med Neon Orange ST43 +242 141 166 Neon Pink ST46 +199 12 87 Neon Orange Pink ST47 +226 45 42 Silver ST101 +184 184 184 Silver Diamond ST102 +136 145 134 Lava Stone ST112 +115 127 127 Medium Grey ST115 + 86 94 90 Dark Platinum ST116 + 81 82 80 Charcoal ST117 +120 118 104 Badger Grey ST118 +237 87 47 Pumpkin Orange ST135 + 46 165 156 Turquoise ST138 + 57 98 118 Dark Wedgewood ST142 +155 59 64 Cardinal Red ST213 +108 62 71 Maroon ST216 +186 110 77 Rust ST253 +187 61 46 Medium Rust ST255 +249 223 207 Natural Pink ST301 +251 222 214 Baby Pink ST303 +247 205 213 Piggy Pink ST304 +242 175 180 Sweet Pink ST305 +232 65 140 Blushing Pink ST307 +231 127 157 Pink ST309 +240 111 140 Rose Pink ST313 + 0 131 64 Green ST317 +223 153 182 Shocking Pink ST321 +130 0 82 Ruby ST325 +177 65 95 Garnet ST333 +195 148 174 Light Purple ST345 +168 110 145 Medium Purple ST347 +105 65 105 Dark Grape ST348 +230 207 213 Pastel Light Pink ST376 +168 190 215 Light Baby Blue ST379 +160 191 215 Crystal Blue ST380 +144 166 198 Very Light Lavender ST381 +143 175 198 Cornflower ST382 +177 184 211 Lavender ST383 + 65 108 155 Denim ST385 +125 119 175 Light Violet ST386 +250 218 244 Misty Rose ST387 +102 64 144 Grape ST390 +234 240 249 Lt. Weathered Blue ST402 +166 216 246 Baby Blue ST403 +123 156 176 Med Baby Blue ST404 +100 141 199 Med Pastel Blue ST406 + 61 106 161 Blue Raspberry ST409 + 45 68 145 Med Royal Blue ST413 + 20 61 122 Ocean Blue ST414 + 17 50 99 Med Navy ST415 + 14 31 56 Dark Navy ST423 + 14 31 56 Bright Sunshine ST432 + 0 145 165 Teal ST443 + 0 91 99 Deep Teal ST448 + 0 71 77 Dark Teal ST449 +229 177 92 Old Gold ST466 +213 191 155 Cream ST501 +255 208 133 Pale Salmon ST503 +246 176 142 Med Peach ST505 +179 232 81 Pink Salmon ST506 +241 162 54 Dark Peach ST508 +110 67 55 Dark Brown ST513 +216 73 62 Pale Red ST527 +105 118 152 Heron Blue ST541 +253 232 150 Pale Yellow ST601 +237 229 93 Pastel Yellow ST602 +223 162 0 Golden Puppy ST609 +253 232 150 Buttercup ST612 +206 178 76 Treasure Gold ST616 +173 149 62 Old Gold ST619 +254 249 234 Pale Apricot ST627 +189 149 101 Tan ST628 +253 247 108 Mellow Yellow ST632 +237 239 5 Lemon ST633 +248 195 0 Amber ST646 +231 120 23 Mandarina ST649 +230 101 53 Orange ST650 +198 150 50 Golden Rod ST652 +152 153 109 Light Olive ST653 +201 131 0 Bright Gold ST654 + 0 123 141 Blue-Green ST688 + 0 77 61 Forrest Green ST695 + 0 126 186 Midnight Blue ST697 +207 0 64 Med Red ST700 + 40 67 140 Med Blue ST809 +208 180 120 Sweet Apricot ST812 +229 190 108 Skin ST818 + 68 146 132 Jade ST825 +207 207 207 Light Silver ST829 +220 135 94 Papaya Whip ST831 +180 112 93 Cooper ST832 +155 92 75 Light Pecan ST833 +169 49 33 Burnt Rust ST838 +177 139 0 Vegas Gold ST842 +134 70 46 Med Brown ST857 + 97 65 37 Med Russett ST859 +178 92 49 Med Copper ST864 +128 106 97 Dark Driftwood ST873 + 99 72 49 Birch ST878 + 26 12 6 Dark Chocolate ST891 +150 213 200 Sky Blue 2 ST903 +180 220 216 Aquamarine ST904 +175 125 62 Golden Brown ST905 + 0 163 160 Sea Blue ST906 + 0 64 93 Deep Sea ST913 +201 227 197 Pastel Mint ST947 + 85 175 120 True Green ST949 +133 131 37 Med Olive ST951 + 97 96 28 Olive ST955 +112 145 136 Light Jade ST961 +190 220 140 Smith Apple ST984 +190 230 120 Light Lime ST985 +118 200 80 Grass Green ST988 + 70 110 100 Deep Teal ST448 + 53 105 54 Med Forrest Green ST992 + 75 72 132 Deep Violet S1031 +237 237 210 Light Natural S1140 +243 216 168 Wheat S1145 +200 190 150 Desert Sand S1148 + 36 58 125 Egyptian Blue S1163 +134 190 78 Gecko S1183 +142 64 68 Burgandy S1241 +137 52 128 Med Orchid S1323 +140 109 170 Med Purple S1324 +182 163 108 Very Old Gold S1552 + 46 159 118 Light Spruce S1615 +152 193 115 Paris Green S1619 +205 205 205 Timberwolf S1707 + 42 55 126 Bright Blue S2031 + 0 108 165 Turquoise Blue S2093 +131 68 85 Dark Wine S2250 +208 164 79 Beige S2518 +237 146 6 Gold S2519 +237 239 5 Med Orange S3001 +192 122 70 Dark Salmon S3014 +180 60 60 Fire Red S3015 +145 95 70 Saddle Brown S3142 +255 197 0 Yellow Sun S4117 +166 138 104 Deep Taupe S4371 + 0 164 217 Sky Blue S4419 + 11 127 133 Wild Peacock S4627 + 0 45 31 Millard Green S4735 + 17 38 60 Dark Blue S5552 +145 185 226 Powder Blue S5554 + 66 150 72 Froggy Green S5557 +135 140 140 Stone Grey S8010 diff --git a/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Simthread Polyester.gpl b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Simthread Polyester.gpl new file mode 100644 index 00000000..aae11d37 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Simthread Polyester.gpl @@ -0,0 +1,111 @@ +GIMP Palette +Name: Ink/Stitch: Simthread Polyester +Columns: 4 +# RGB Value Color Name Number + 0 8 11 Jet Black S001 +227 226 232 Powder Blue Tint S002 +244 240 219 Ecru Very Light S003 +238 233 195 Sheer Ivory S004 +225 188 143 Pink Sand S005 +186 148 129 Pale Tan S006 +172 165 173 Stone Grey S007 +168 163 157 Pale Grey S008 +182 142 117 Roebuck S009 +152 124 102 Woodsmoke S010 + 76 66 77 Midnight S011 +195 119 187 Purple S012 +204 87 44 Rust S013 +111 38 19 Cranberry S014 + 92 52 44 Cherrywood S015 + 43 18 50 Dark Purple / Navy S016 + 28 26 27 Midnight Blue S017 +240 236 188 Celery S018 +255 227 162 Linen S019 +232 230 121 Medium Yellow S020 +255 233 131 Cream Yellow S021 +222 194 0 Liberty Gold S022 +255 208 30 Cornsilk S023 +230 160 24 Gold / Orange S024 +242 128 24 Soleil S025 +244 123 68 Orange Spice medium S026 +221 121 33 Inca Gold S027 +230 17 9 Red S028 +255 55 27 Paprika S029 +171 19 18 Scarlet S030 +163 122 2 Autumn Green S031 +173 107 33 Tan Brown S032 +103 70 3 Hazel S033 +148 236 97 Lt. Green S034 + 81 213 6 Fluorescent Green S035 + 43 184 0 Emerald S036 +128 187 97 Springtime green S037 + 28 93 0 Green Forest S038 + 18 163 0 Meadow S039 + 30 70 44 Dark Green S040 + 2 64 0 Evergreen S041 + 13 37 37 Olive Green S042 +194 233 90 Sharp Green S043 + 72 58 23 Sienna S044 + 73 69 8 Khaki S045 + 41 73 23 Blue Spruce S046 +184 248 196 Slightly Green S047 +103 206 71 Green S048 + 54 224 92 Green S049 + 19 144 24 Meadow S050 + 0 123 0 Dark Green S051 +137 240 247 Powder Blue S052 + 37 152 209 Medium Ocean Blue S053 + 26 150 114 Turquoise S054 + 17 134 126 Green / Blue S055 + 26 147 93 Emerald Green S056 + 5 41 15 Dark Green S057 +167 207 215 Crystal Blue S058 +150 199 255 Lake Blue S059 +144 171 238 Medium Blue S060 + 42 60 136 Dark Royal Blue S061 + 27 37 108 Dk. Royal Blue S062 + 91 192 246 Sky Blue S063 + 0 109 207 California Blue S064 + 48 93 238 Dolphin Blue S065 + 28 98 220 Dark Blue S066 + 6 38 141 Brilliant Blue S067 + 0 11 228 Ultra Marine S068 + 24 42 140 Dark Blue S069 + 0 0 146 Dark Purple S070 +238 205 232 Light Pink S071 +232 100 209 Medium Pink S072 +205 114 253 Poker Primrose S073 +189 30 236 Amethyst S074 +162 2 248 Light Denim S075 +239 73 159 Tropicana S076 +119 15 236 Purple S077 +149 6 182 Jacaranda S078 +227 7 45 Maroon S079 +142 3 42 Dark Red S080 + 94 11 101 Violet Very Dark S081 + 72 1 95 Royal Purple S082 +131 6 106 Dark Fuschia S083 + 24 0 71 Midnight Navy S084 +242 177 135 Light Brass S085 +238 177 184 Orchid Pink S086 +239 133 181 Pink Petunia S087 +209 99 185 Lavender S088 +228 58 151 Garden Rose S089 +255 79 133 Begonia S090 +206 57 187 Violet S091 +154 97 238 Jacaranda S092 + 98 58 207 Violet Blue S093 +112 93 157 Corsican Blue S094 +121 41 254 Cindy Purple S095 + 96 35 252 Sky Blue S096 + 83 20 248 Sapphire S097 + 54 3 192 Marine Blue S098 + 16 0 185 Bright Blue S099 +108 66 145 Purple S100 +196 182 217 Pale Lilac S101 +206 236 224 Light Blue S102 +200 196 231 Geisha S103 +124 136 186 Oriental Blue S104 +100 115 144 Silver Blue S105 + 62 69 113 Ash S106 + 43 50 42 Night Sky S107 diff --git a/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Simthread Rayon.gpl b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Simthread Rayon.gpl new file mode 100644 index 00000000..ec166d59 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Simthread Rayon.gpl @@ -0,0 +1,388 @@ +GIMP Palette +Name: Ink/Stitch: Simthread Rayon +Columns: 4 +# RGB Value Color Name Number +254 254 254 Snow White S1001 +255 254 252 White S1002 +254 253 252 Lamp Light S1003 + 16 16 18 Charcoal S1004 +251 241 247 Blush S1005 +251 217 240 Fantasia Pink S1006 +249 193 236 Pale Pink S1007 +247 165 224 Orchid Pink S1008 +248 236 235 Light Pink S1009 +251 236 226 Wineberry Very Light S1010 +250 231 233 Carnation Ultra Light S1011 +248 136 210 Floral Pink S1012 +248 134 208 Floral Pink S1013 +248 75 173 Pink S1014 +248 95 192 Passion S1015 +210 9 105 Strawberry S1016 +245 47 167 Crimson S1017 +245 21 98 Rose Red S1018 +221 4 80 Salmon Dark S1019 +249 178 203 Pink S1020 +248 120 160 Bubblegum Pink S1021 +247 21 51 Cardinal Red S1022 +251 13 38 Cardinal Red S1023 +251 4 27 Luminous Red S1024 +245 4 27 Scarlet S1025 +209 12 57 Rosewood S1026 +216 12 45 Foxy Red S1027 +221 14 70 Cerise S1028 +252 253 245 Eggshell S1029 +253 251 241 Natural White S1030 +252 250 247 White S1031 +250 98 76 Coral S1032 +250 229 207 Beige S1033 +250 229 209 Barely Pink S1034 +250 161 128 Peach Pink S1035 +248 188 84 Mimosa S1036 +251 142 25 Honeydew S1037 +250 122 15 Soleil S1038 +248 107 34 Orange S1039 +249 124 55 Medium Orange S1040 +251 26 18 Luminous Orange S1041 +254 254 245 Eggshell S1042 +253 253 236 Ivory White S1043 +252 251 212 Light Maize S1044 +252 250 229 Cream S1045 +250 240 143 Easter Dress S1046 +249 231 52 Canary Yellow S1047 +252 231 39 Canary Yellow S1048 +253 231 39 Straw S1049 +252 251 132 Medium Yellow S1050 +252 250 96 Lemon Yellow S1051 +249 251 57 Lime S1052 +254 254 240 Light Beige S1053 +253 251 175 Cream Brown S1054 +251 252 134 Meilee Green S1055 +252 253 112 Lemon Fluff S1056 +250 251 125 Medium Yellow S1057 +251 251 74 Lime S1058 +250 222 60 Sun S1059 +252 213 55 Yellow S1060 +250 197 44 Sunset S1061 +233 250 231 Silver Grey S1062 +136 235 169 Mint S1063 + 9 199 182 Peppermint S1064 + 6 163 163 Teel S1065 +128 238 241 clWhite S1066 +106 243 247 clWhite S1067 +212 250 248 PALE Aqua S1068 +125 245 247 Alaska Sky S1069 + 4 202 206 Lilac Silk S1070 + 6 179 176 Ocean Blue S1071 +234 251 250 Misty Mint S1072 +200 248 234 Pale Turquoise S1073 + 71 221 180 Light teal Green S1074 + 7 125 90 Irish Green S1075 +195 238 144 Green Dust S1076 +102 214 100 DK Mint S1077 + 51 184 50 Kelly S1078 +213 244 150 Dark Olive Green S1079 +168 240 154 Light Green S1080 + 53 190 68 Harvest Green S1081 + 7 63 71 Swamp Green S1082 + 6 181 88 Bright Mint Green S1083 +191 223 139 Lettuce Green S1084 +182 213 91 Spring Fern S1085 +143 185 79 Lime S1086 +139 167 75 Medium Green / Yellow S1087 +231 234 163 Young Wheat S1088 +150 163 81 Pistachio S1089 +138 180 168 Jade Medium Light S1090 + 48 78 71 Dark Green / Blue S1091 + 37 71 221 Smurf Blue S1092 +192 218 236 Ice Blue S1093 +169 214 241 Baby Blue S1094 +111 181 231 Reef Blue S1095 + 19 107 229 Dolphin Blue S1096 +189 218 245 Ice Blue S1097 +145 200 237 Pale Blue S1098 + 94 142 221 Light Blue Aster S1099 + 71 129 219 Azure S1100 +189 226 248 Cadet Blue S1101 +155 183 239 Pale Blue S1102 +139 184 234 Sky Blue S1103 + 76 123 237 Electric Bleu Medium S1104 + 45 60 181 Royal Blue S1105 + 42 76 206 Smurf Blue S1106 + 23 39 179 Dark Smurf Blue S1107 + 28 33 173 DK Bright Blue S1108 + 29 36 125 Dark Ink S1109 + 17 24 63 Navy S1110 + 18 22 51 Midnight Blue S1111 +105 141 199 Med. Periwinkle S1112 +109 207 225 Basic Turquoise S1113 +211 229 238 Med. Pastel Blue S1114 +126 169 228 Medium Blue S1115 + 80 113 172 Delft Blue dark S1116 + 49 95 173 Magic Blue S1117 +117 207 213 Turquoise S1118 + 22 183 203 Bright Aqua S1119 + 7 147 169 Dark Aqua Green S1120 + 64 164 192 Horizon Blue S1121 + 12 95 146 Blue Aster S1122 +166 239 247 Venice Blue S1123 + 80 227 240 Capri S1124 + 20 208 241 Turquoise S1125 +116 206 217 Turquoise S1126 + 19 235 246 Medium Turquoise S1127 +233 221 246 PLST Orchid S1128 +217 205 246 LT Lilac S1129 +104 48 173 Violet Blue S1130 + 76 28 103 Purple Accent S1131 + 72 33 157 Bright Sky S1132 + 49 27 124 Dark Royal Blue S1133 +242 173 225 Azalea Pink S1134 +186 91 192 Amethyst S1135 +154 65 163 Plum S1136 +243 231 249 White S1137 +233 169 230 Pink S1138 +197 142 216 Medium Tulip S1139 +118 48 146 Deep Purple S1140 +112 30 141 Violet S1141 +242 107 211 clWhite S1142 +230 60 186 Crimson S1143 +224 31 154 Ruby Glint S1144 +124 49 170 Medium Purple S1145 +246 213 246 Arden Lavender S1146 +248 168 237 Orchid Pink S1147 +215 76 193 Deep Mauve S1148 +180 60 161 Tulip S1149 +223 163 220 Pink S1150 +254 241 235 Shell S1151 +254 250 240 Natural White S1152 +253 254 248 Iced Silver S1153 +249 254 200 Flite Green S1154 +249 213 135 Blond S1155 +242 246 211 Grass Green 4 S1156 +255 219 138 Glow S1157 +255 246 208 Cream S1158 +238 209 167 Ivory S1159 +176 175 121 Sage Green S1160 +255 245 222 Light Cream S1161 +254 228 183 Shrimp Pink S1162 +249 209 156 Impala S1163 +251 226 166 Blonde S1164 +242 165 90 Pale Gold S1165 +250 236 202 Pale Gold S1166 +243 153 81 Sunflower S1167 +223 162 76 Gold S1168 +255 253 245 Eggshell S1169 +255 252 210 Citrus Very Light S1170 +247 247 175 Light Lemon S1171 +237 236 215 Ecru S1172 +201 147 109 Dk. Ecru S1173 +242 161 80 Pale Gold S1174 +137 74 51 Dirty Penny S1175 +255 246 185 Pale Yellow S1176 +255 251 196 Pastel Yellow S1177 +245 225 112 Yellow Cream S1178 +234 174 42 Yellow S1179 +255 234 74 Hawaiian Sunrise S1180 +253 231 130 clWhite S1181 +248 249 139 Meilee Green S1182 +253 249 164 Pineapple S1183 +250 229 86 Soft Yellow S1184 +251 242 51 Yellow S1185 +240 230 221 Palest Ivory S1186 +242 237 233 Natural White S1187 +250 247 254 Silver Blue S1188 +219 193 181 Peach Whip S1189 +134 100 93 Medium Brown S1190 +254 246 250 Blush S1191 +209 217 215 Illusion Blue S1192 +184 183 188 Pale Sterling Grey S1193 +228 193 183 Pale Orange S1194 +237 227 174 PaleYellow S1195 +177 165 86 Khaki Green / Medium S1196 +231 179 93 Golden Cream S1197 +141 77 51 Dirty Penny S1198 +171 82 35 Light Cinnamon S1199 +217 103 68 Dark Coral S1200 +222 83 63 Orange S1201 +222 172 113 Sierra Light S1202 +252 252 255 Sea Bleu Very Light S1203 +247 248 232 Off White S1204 +253 253 245 Eggshell S1205 +163 142 146 Light Brown S1206 +182 179 146 Old Lace S1207 +245 246 238 Palest Ivory S1208 +184 185 173 Skylight S1209 +148 135 158 Ocean Bleu S1210 + 27 213 187 Turquoise S1211 +243 248 84 Daffodil S1212 +143 157 54 MD Lime S1213 + 21 44 124 Provence S1214 + 32 33 41 Mysterioso S1215 +251 65 188 Deep Pink S1216 +150 10 36 Baked Cherry S1217 +249 15 115 Fuschia S1218 +138 24 103 Traffic Purple S1219 +251 251 199 Pale Lemon S1220 +202 218 160 Flite Green S1221 +124 186 145 Mint Green S1222 + 90 149 87 Holly Green S1223 + 32 179 150 Bluestone S1224 + 12 165 82 Light Kelly S1225 + 5 150 103 Shamrock S1226 + 71 121 227 Azure S1227 + 79 88 200 Marine Blue S1228 + 65 109 228 Dolphin Blue S1229 + 36 25 120 Purple Twist S1230 +252 241 251 Siberian Iris S1231 +224 230 246 Violet Tint White S1232 +187 172 245 Cristy Blue S1233 +249 11 94 Dark Pink S1234 +235 250 95 Green Gold S1235 + 6 216 181 DKST Blue Gray S1236 + 25 123 94 Jade S1237 + 49 82 79 Enchanted Sea S1238 +229 229 124 clWhite S1239 +190 170 81 Golden Olive Light S1240 + 12 196 243 Peacock S1241 + 16 129 225 Medium Royal Blue S1242 +132 100 227 Marine Blue S1243 +186 133 209 Heather S1244 +119 82 175 Medium Bleuberry S1245 +111 61 175 Blue Lilac S1246 +250 255 216 Jonquil Very Light S1247 +252 247 150 Gold S1248 +247 232 113 Harvest Gold S1249 +255 242 255 Siberian Iris S1250 +252 107 184 Floral Pink S1251 +251 33 123 Hot Pink S1252 +255 227 252 White S1253 +255 51 182 Deep Pink S1254 +243 10 76 Blossem Pink Dark S1255 +255 6 115 Fuschia S1256 + 9 207 245 Turquoise S1257 + 10 229 244 Medium Turquoise S1258 +252 212 128 Glow S1259 +247 158 24 Tangerine medium S1260 +254 249 225 Ivory White S1261 +245 246 75 Lemon S1262 +167 202 254 LT Bright Blue S1263 + 30 124 250 Bright Blue S1264 + 26 33 208 clWhite S1265 + 24 75 123 Royal Blue S1266 + 70 82 149 Purple S1267 + 30 30 54 Dark Purple S1268 +235 187 201 Shell S1269 +245 170 205 Pale Pink S1270 +232 166 204 Medium Pink S1271 +232 120 173 Floral Pink S1272 +228 122 162 Floral Pink S1273 +243 83 93 Fluo Pink S1274 +189 47 62 Burgundy S1275 +203 62 132 Dark Pink S1276 +200 70 115 Pink Rapture S1277 +203 39 96 Fuchsia S1278 +151 29 65 Brandy S1279 +140 25 61 Perfect Ruby S1280 +170 42 108 Dark Pink S1281 +191 80 63 Emberglow S1282 +168 75 69 Terra Cotta S1283 +189 23 85 Dark Pink S1284 +154 68 95 Burgundy S1285 +153 38 105 Dark Red S1286 +134 58 97 Medium Purple S1287 +143 43 71 Cabernet S1288 +120 21 36 Cherokee Red S1289 +111 24 20 Brown Red S1290 +225 160 120 Bamboo S1291 +176 140 114 Tawny Birch S1292 +192 126 104 Canyon Clay S1293 +123 54 40 Dark Brown S1294 + 96 36 46 Deep Claret S1295 +105 54 37 Ginger Bread S1296 +123 64 50 Mushroom S1297 +121 39 48 Red Rust S1298 +124 64 36 Dark Brown S1299 +112 65 28 Light Copper Brown S1300 + 92 57 25 Fudge S1301 + 86 54 31 Taupe Very Dark S1302 + 98 53 25 Redwood S1303 +105 59 43 Dark Brown S1304 + 87 35 24 Fudge Dark S1305 + 98 42 33 Tan S1306 + 76 43 27 Chocolate S1307 + 58 44 43 Deep Mahogany S1308 + 72 43 37 Dark Brown S1309 +212 224 239 Pale Baby Blue S1310 +196 213 231 Cadet Blue S1311 +141 160 178 Lt. Smokey Blue S1312 + 57 83 118 Dark Blue S1313 + 34 68 93 Dragon Fly S1314 + 56 72 108 Ash S1315 + 65 82 114 Dusty Navy S1316 + 77 90 112 True Blue S1317 + 67 80 108 Ash S1318 + 96 36 47 Deep Claret S1319 +105 54 38 Ginger Bread S1320 +121 112 117 Storm Gray S1321 +119 107 117 Purple Sage S1322 + 83 79 94 Graystone S1323 + 64 45 51 Shark S1324 + 58 45 45 Deep Mahogany S1325 +233 206 235 Light Pink S1326 +219 181 209 Delicate Mauve S1327 +226 154 215 Mid Lilac S1328 +205 113 185 Medium Pink S1329 +136 107 187 Mauve S1330 +154 90 201 Amethyst S1331 +176 70 175 DK Orchid S1332 +120 9 85 Dark Purple S1333 +164 147 202 Violet Tulip S1334 + 76 39 117 Purple Accent S1335 + 89 24 77 Sugar Beet S1336 + 88 12 74 Sugar Beet S1337 +214 250 77 Fluo Yellow / Green S1338 +186 252 25 Olive Green Light S1339 + 81 255 131 Green S1340 + 11 188 38 Kelly S1341 +194 208 191 Light Green S1342 +128 128 103 Aloe S1343 +144 115 99 Coconut S1344 +181 192 123 Nile S1345 +126 142 43 Swamp Green S1346 +118 135 39 Seagrass S1347 + 96 126 49 Avocado Green medium S1348 + 86 91 28 Dark Green / Yellow S1349 + 68 68 32 Avocado S1350 + 46 91 53 Olive Green S1351 + 3 90 200 Colonial Blue S1352 + 31 52 185 Dark Smurf Blue S1353 +249 232 186 Almond Oil S1354 +252 238 19 Yellow S1355 +182 175 191 Thistle S1356 +249 211 241 Pale Pink S1357 +246 144 192 Medium Pink S1358 +246 88 157 Rose S1359 +192 8 5 Red Berry S1360 +151 1 5 Terra Cotta S1361 +188 53 18 Firecracker S1362 +157 142 151 Light Brown S1363 + 81 255 130 Green S1364 +141 115 114 Twilight Mauve S1365 + 86 96 108 Grey S1366 + 54 51 61 Coal Black S1367 +163 111 233 Jacaranda S1368 + 92 43 106 Dark Purple S1369 + 6 25 134 Empire Blue S1370 +184 21 35 Foxy Red S1371 +195 108 177 Medium Pink S1372 +198 135 166 Smoky Grape S1373 +127 44 76 Wine S1374 +143 162 40 MD Lime S1375 +243 224 165 Glow S1376 +144 120 67 Pale Brown S1377 +242 202 161 Coast Point S1378 + 87 36 32 Henna S1379 +182 116 73 Raw Sienna S1380 +226 199 70 Mimosa S1381 +179 178 192 Grey S1382 + 11 191 243 Turquoise Medium Bright S1383 +251 246 189 Mellow Yellow S1384 diff --git a/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Sulky Polyester.gpl b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Sulky Polyester.gpl new file mode 100644 index 00000000..10ebb5f2 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Sulky Polyester.gpl @@ -0,0 +1,911 @@ +GIMP Palette +Name: Ink/Stitch: Sulky Polyester +Columns: 4 +# RGB Value Color Name Number +255 255 255 Snow White 100 +255 255 254 White 1000 +249 249 255 Bright White 1001 + 27 27 31 Black Stallion 1001 +249 249 244 Soft White 1002 + 0 0 0 Black 1005 +218 8 21 Foxy Red 101 +183 169 172 Steel Gray 1011 +225 175 154 Med. Peach 1015 +236 150 140 Pastel Coral 1016 +239 223 189 Pastel Peach 1017 +236 160 130 Peach 1019 +212 16 44 Foxy Red 102 +240 130 120 Dark Peach 1020 +235 102 2 Maple 1021 +255 247 213 Cream 1022 +255 230 105 Yellow 1023 +255 184 0 Goldenrod 1024 +215 128 0 Mine Gold 1025 +190 195 225 Baby Blue 1028 +160 195 235 Med. Blue 1029 +165 20 14 Warm Red 103 +166 162 198 Periwinkle 1030 +223 190 200 Med. Orchid 1031 +230 140 235 Med. Purple 1032 +216 100 150 Dk. Orchid 1033 +198 50 60 Burgundy 1034 +121 0 0 Dk. Burgundy 1035 +122 0 0 Tawny Brown 1036 +249 0 0 Lt. Red 1037 +235 0 0 Christmas Red 1039 +244 52 8 Vermilion 104 +135 115 117 Med. Dk. Khaki 1040 +140 127 131 Med. Dk. Gray 1041 + 50 30 80 Bright Navy Blue 1042 + 25 5 37 Dk. Navy 1043 + 29 6 47 Midnight Blue 1044 +195 239 191 Lt. Teal 1045 + 46 131 89 Teal 1046 +166 194 132 Mint Green 1047 + 66 160 33 Grass Green 1049 +243 8 8 Red 105 + 30 100 25 Christmas Green 1051 +238 190 174 Med. Dk. Ecru 1054 +235 188 128 Tawny Tan 1055 +175 91 0 Med. Tawny Tan 1056 +100 39 2 Chocolate 1057 +102 53 0 Dark brown 1058 + 83 6 1 Dk. Tawny Brown 1059 +153 50 69 Burgundy 106 +255 247 185 Pale Yellow 1061 +240 248 236 Pale Yellow-Green 1063 +230 180 170 Pale Peach 1064 +255 145 0 Orange Yellow 1065 +255 241 128 Primrose 1066 +255 255 133 Lemon Yellow 1067 +243 219 217 Pink Tint 1068 +230 4 9 Carmine 107 +246 206 105 Gold 1070 +249 249 234 Off White 1071 +214 213 232 Pale Powder Blue 1074 + 90 90 139 Royal Blue 1076 +190 205 200 Jade Tint 1077 +255 102 0 Orange 1078 + 23 85 35 Emerald Green 1079 +220 130 160 Orchid 1080 +240 110 120 Brick 1081 +247 227 187 Ecru 1082 +255 193 0 Spark Gold 1083 +226 207 199 Silver 1085 +249 249 224 Pale Sea Foam 1086 + 22 98 95 Deep Peacock 1090 + 38 191 202 Med. Turquoise 1094 + 16 209 189 Turquoise 1095 + 15 105 120 Dk. Turquoise 1096 +194 211 125 Lt. Grass Green 1100 + 9 133 49 True Green 1101 + 2 20 15 Dk. Khaki 1103 +165 175 104 Pastel Yellow-Green 1104 +250 164 164 Lt. Mauve 1108 +220 100 150 Hot Pink 1109 +252 203 223 Pastel Orchid 1111 + 70 1 110 Royal Purple 1112 +240 200 180 Pastel Mauve 1113 +240 185 185 Lt. Pink 1115 +245 169 160 Mauve 1117 +180 110 117 Dk. Mauve 1119 + 39 94 46 Green Gables 112 +240 214 210 Pale Pink 1120 +250 185 203 Pink 1121 +130 40 142 Purple 1122 +255 236 0 Manila 1124 +220 140 23 Tan 1126 +250 236 198 Med. Ecru 1127 +195 148 113 Dk. Ecru 1128 +106 31 6 Brown 1129 + 45 106 36 Green 113 + 85 22 2 Dark Brown 1130 + 73 0 2 Cloister Brown 1131 + 80 125 170 Peacock Blue 1134 +255 240 114 Pastel Yellow 1135 +255 190 0 Yellow Orange 1137 +144 180 69 Medium Green / Yellow 114 + 74 88 112 True Blue 1143 +180 225 235 Powder Blue 1145 +235 0 1 True Red 1147 +255 189 189 Lt. Coral 1148 +232 200 156 Deep Ecru 1149 + 56 114 38 Green 115 +226 226 235 Powder Blue Tint 1151 +250 153 153 Coral 1154 + 99 99 39 Lt. Army Green 1156 +186 69 0 Dk. Maple 1158 +211 157 0 Temple Gold 1159 + 92 139 38 Peapod 116 + 16 57 74 Deep Teal 1162 +223 229 235 Lt. Sky Blue 1165 +142 126 126 Med. Steel Gray 1166 +255 210 38 Maize Yellow 1167 +245 116 10 True Orange 1168 +156 0 0 Bayberry Red 1169 + 79 172 91 Medium Green 117 +151 95 47 Lt. Brown 1170 + 8 24 14 Weathered Blue 1171 +110 120 140 Med. Weathered Blue 1172 + 89 89 29 Med. Army Green 1173 + 13 41 4 Dk. Pine Green 1174 + 21 45 4 Dk. Avocado 1175 + 81 83 8 Med. Dk. Avocado 1176 +137 152 18 Avocado 1177 +143 98 61 Dk. Taupe 1179 + 59 105 32 Dark Green 118 +165 137 115 Med. Taupe 1180 +203 0 0 Rust 1181 + 2 1 20 Blue Black 1182 + 50 6 20 Black Cherry 1183 +255 102 1 Orange 1184 +252 190 5 Golden Yellow 1185 + 91 0 0 Sable Brown 1186 +255 229 0 Mimosa Yellow 1187 +255 0 75 Deep Red 1188 + 75 18 45 Dk. Chestnut 1189 + 51 94 25 Dark Green 119 +160 70 86 Med. Burgundy 1190 +189 30 96 Dk. Rose 1191 +210 30 130 Fuchsia 1192 +230 175 210 Lavender 1193 +210 116 215 Lt. Purple 1194 + 55 1 80 Dk. Purple 1195 +150 195 225 Blue 1196 + 34 15 52 Med. Navy 1197 + 60 80 117 Dusty Navy 1198 + 42 20 63 Admiral Navy Blue 1199 + 81 181 138 Emerald Green 120 + 20 11 45 Med. Dk. Navy 1200 +100 139 190 Med. Powder Blue 1201 + 24 43 86 Deep Turquoise 1202 +174 184 195 Lt. Weathered Blue 1203 +168 200 188 Pastel Jade 1204 +110 144 165 Med. Jade 1205 + 30 110 111 Dark Jade 1206 +128 163 136 Sea Foam Green 1207 + 12 61 3 Mallard Green 1208 +189 209 99 Lt. Avocado 1209 + 39 59 0 Dk. Army Green 1210 +149 164 144 Lt. Khaki 1211 + 99 99 45 Khaki 1212 +185 160 150 Taupe 1213 +100 40 40 Med. Chestnut 1214 + 80 10 30 Blackberry 1215 +172 28 1 Med. Maple 1216 +151 31 1 Chestnut 1217 +223 223 203 Silver Gray 1218 +152 136 140 Gray 1219 + 9 25 73 Navy Blue 122 +118 89 96 Charcoal Gray 1220 +209 219 255 Lt. Baby Blue 1222 +220 224 241 Baby Blue Tint 1223 +240 160 185 Bright Pink 1224 +250 203 203 Pastel Pink 1225 + 87 54 158 Dk. Periwinkle 1226 +175 137 1 Gold Green 1227 +150 170 139 Drab Green 1228 +224 219 219 Lt. Putty 1229 + 11 65 51 Dk. Teal 1230 +229 50 106 Med. Rose 1231 + 25 50 7 Classic Green 1232 + 13 34 16 Ocean Teal 1233 + 60 27 31 Almost Black 1234 +120 50 152 Deep Purple 1235 +234 228 228 Lt. Silver 1236 +188 61 44 Deep Mauve 1237 +255 131 0 Orange Sunrise 1238 +255 171 87 Apricot 1239 + 14 6 61 Midnight Navy 124 +116 88 108 Smokey Grey 1240 + 93 52 70 Intense Maroon 1241 + 84 58 141 Nassau Blue 1242 +224 198 59 Mimosa 1243 +202 169 2 Royal Gold 1244 +178 142 0 Shimmering Gold 1245 +255 0 0 Blaze Medium 1246 +102 0 0 Mahogany 1247 +210 230 240 Med. Pastel Blue 1248 + 98 170 220 Cornflower Blue 1249 + 73 129 124 Teel 125 + 39 92 112 Duck Wing Blue 1250 + 48 111 117 Bright Turquoise 1251 + 9 161 168 Bright Peacock 1252 + 27 76 164 Dk. Sapphire 1253 +230 185 245 Dusty Lavender 1254 +190 25 130 Deep Orchid 1255 +235 130 150 Sweet Pink 1256 +230 0 65 Deep Coral 1257 +240 196 160 Coast Point 1258 +226 130 100 Salmon Peach 1259 +146 171 186 Lt. Smokey Blue 126 +221 171 0 Dusky Brass 1260 +255 227 0 Empire Yellow 1261 +169 136 3 Gold Green 1262 +179 0 0 Red Jubilee 1263 +106 0 0 Cognac 1264 +155 107 44 Burnt Toast 1265 +156 109 69 Toast 1266 +134 76 49 Mink Brown 1267 +239 239 229 Light Gray Khaki 1268 +172 135 131 Light Purple 1269 + 26 22 102 Imperial Blue 127 +183 183 175 Dk. Gray Khaki 1270 + 60 79 49 Evergreen 1271 + 74 74 25 Hedge Green 1272 + 54 54 31 Dark Forest 1273 + 92 154 26 Nile Green 1274 +224 230 200 Sea Mist 1275 +112 119 15 Pistachio 1276 + 2 118 2 Ivy Green 1277 + 0 175 56 Bright Green 1278 +147 209 108 Willow Green 1279 + 97 114 136 Dark Steel Blue 128 + 70 183 116 Dk. Willow Green 1280 + 3 103 70 Dark Green 1281 +146 149 3 Tamarack 1282 + 72 61 89 Slate Gray 1283 + 70 110 120 Dk. Winter Sky 1284 + 19 79 69 Dk. Sage Green 1285 + 52 50 19 Dk. French Green 1286 + 65 85 69 French Green 1287 + 15 165 111 Aqua 1288 +220 235 240 Ice Blue 1289 +189 208 221 Bleuberry Medium Light 129 + 22 85 165 Bright Blue 1290 +114 116 131 Winter Sky 1291 +209 220 250 Heron Blue 1292 + 68 35 93 Deep Nassau Blue 1293 + 65 32 68 Deep Slate Gray 1294 +130 135 140 Sterling 1295 +210 170 240 Hyacinth 1296 +115 90 100 Lt. Plum 1297 +100 70 100 Dk. Plum 1298 + 65 20 70 Purple Shadow 1299 +204 232 237 Pale Blue 130 +126 30 70 Plum 1300 + 50 0 70 Deep Eggplant 1301 +110 10 150 Eggplant 1302 +250 95 127 Dusty Rose 1303 +180 115 100 Dewberry 1304 +174 198 187 Sage Green 1305 +126 108 124 Gun Metal Gray 1306 +219 100 120 Petal Pink 1307 +154 44 80 Rose Wine Very Dark 1308 +120 35 70 Magenta 1309 +188 54 90 Atom Red 1310 +150 26 50 Mulberry 1311 +132 0 0 Wine 1312 +252 143 12 Bittersweet 1313 +240 110 12 Pumpkin Orange 1314 +235 102 6 Maple 1315 +255 0 1 Blaze Dark 1317 +239 0 0 Hot Cha Cha 1319 +199 126 35 Pollen Gold 1320 +203 203 189 Gray Khaki 1321 +129 137 1 Chartreuse 1322 + 71 2 0 Dark Chocolate 1323 + 70 1 0 Dark Chocolate 1324 +248 245 241 Whisper Gray 1325 +238 227 225 Oyster 1326 +213 199 195 Dk. Whisper Gray 1327 +192 178 183 Nickel Gray 1328 +171 160 168 Dk. Nickel Gray 1329 +238 137 11 Merit Gold 133 +137 112 125 Lavender 1330 +237 246 212 Pale Green 1331 +134 129 5 Deep Chartreuse 1332 +243 182 0 Sunflower Gold 1333 +167 138 5 Autumn Green 1334 +246 224 61 Buttercup 134 +246 236 123 Daffodil 135 +254 255 255 Paper White 1351 + 40 40 40 Black 1352 +245 182 59 Yellow Gold 136 +185 180 145 Loden Green Medium Light 1366 +255 180 0 Goldenrod 1367 +246 245 186 Mellow Yellow 137 +195 185 150 Gravel 1389 +230 25 25 Red 1393 + 89 82 52 Dark Green / Grey 140 +185 25 25 Ruby 1401 +139 144 93 Medium Olive Green 142 +172 172 123 Sage Green 143 +225 225 225 Silver Gray 1465 +178 189 56 Fresh Green 147 +141 244 211 Blue Topaz 148 +148 199 150 Hemlock 149 + 52 150 105 Green Peacock 1503 +193 203 185 Putty 1508 +131 187 146 Mint Green 151 +122 179 29 Lime Green 1510 +238 80 120 Deep Rose 1511 + 0 122 103 Wild Peacock 1513 +255 130 180 Pink Mist 1515 + 1 79 58 Coachman Green 1517 +214 241 238 Light Blue 152 +235 136 128 Peach Bloosom 153 +205 5 77 Lt. Rose 1533 + 52 125 203 Sapphire 1534 + 35 35 139 Team Blue 1535 + 8 23 5 Midnight Teal 1536 +246 83 43 Tangerine 154 +255 214 199 Pinkish Beige 1543 +156 100 132 Hot Pink 1545 +205 168 104 Tan 1549 +108 142 135 Cilantro 1550 +128 176 174 Mystic 1551 +108 124 113 Teal 1552 +140 116 140 Antique Lilac 1554 +240 90 115 Dusky Pink 1558 +230 211 170 Palest Yellow 156 +104 224 248 Turquoise 1560 +125 120 199 Violet 1561 +180 174 140 Winter Pear 157 +199 191 160 Wood Ash 159 + 25 30 45 Black 1598 + 15 60 15 Mallard Green 1609 +209 186 131 Cocoon 161 +194 208 112 Pale Meadow Green 162 +222 129 111 Rose Wine Medium 169 +170 175 180 Traditional Gray 1711 + 0 200 0 Harvest Green 1718 +140 205 175 Pale Green 1720 +160 145 130 Taupe 1721 + 15 15 125 Royal 1728 +250 210 170 Impala 1800 +250 220 150 Golden Haze 1801 +255 200 150 Opaline 1802 +255 155 110 Light Orange 1803 + 55 90 115 Wedgewood Blue 1804 + 40 80 90 Dark Bottle Green 1805 +160 185 195 Pale Blue 1806 +180 150 130 Fawn 1807 +210 175 155 Toasted Almond 1808 +160 125 130 Amethyst Dark 1809 +100 53 98 Plum Wine 181 +100 80 85 Peppercorn 1810 + 60 40 55 Deep Purple 1811 +110 45 90 Dark Purple 1812 +110 45 65 Dark Maroon 1813 +175 75 105 Dusty Rose 1814 +145 180 50 Bright Olive Green 1815 +215 245 140 Pale Yellow 1816 +170 175 20 Peapod 1817 +200 245 140 Brilliant Lime 1818 +195 145 60 Bright Gold 1819 +195 140 115 Dk. Ecru 1820 +250 200 150 Beach Sand 1821 +150 90 55 Light Cocoa 1822 +150 90 40 Medium Brown 1823 +210 195 175 Nude Gold 1824 + 95 150 25 Meadow Green 1825 +170 130 10 Bullion 1826 +255 100 60 Dark Mango 1827 +255 230 170 Blonde 1828 +240 235 165 PaleYellow 1829 +180 115 150 Rose Dust 1830 +145 225 45 Fluorescent Green 1831 +225 145 25 Goldenrod 1832 +210 95 0 Orange 1833 +175 170 5 Green / Gold 1834 +110 130 5 Meadow Green 1835 + 60 75 5 Green 1836 +155 115 90 Orange / Brown 1837 +180 155 125 Natural 1838 +240 200 135 Apricot Cream 1839 + 88 23 115 Royal Purple 199 +202 109 109 Cherry 200 +252 181 173 Petal Peach 208 +243 220 200 Pink Champagne 209 +245 200 184 Pastel Mauve 211 +246 172 149 Salmon 214 +246 216 177 Nude 221 +214 221 89 Pale Yellow 231 + 52 80 13 Green 235 + 74 79 13 Dark Olive 236 + 59 57 30 Best Brown 237 + 88 35 46 Maroon 240 +116 82 115 Crushed Grape 243 +108 110 95 Florentine 244 +146 163 162 Quarry 246 +199 218 111 Grey Moss 259 +244 151 151 Shrimp 262 +253 217 225 Delicate Mauve 278 +134 80 156 Mulberry 279 +200 187 189 Titanium 280 +165 119 51 Brown 281 +105 90 39 Dark Green / Yellow 285 +142 57 30 Bark Dark 292 + 76 49 35 Dark Brown 293 +100 65 38 Brown 294 + 67 70 22 Green 295 +165 123 63 Shimmering Gold 298 +115 78 42 Chipmunk 299 + 32 39 33 Carbon Black 300 + 88 87 31 Med. Army Green 302 +226 195 137 Sand Stone Medium Light 303 +227 219 194 White Asparagus 304 +245 179 29 Light Orange 304 + 66 108 26 Palmetto 305 +124 133 49 Medium Green / Yellow 306 +179 230 169 Spring Frost 307 +111 140 80 Grass Green 308 +172 187 145 Laurel Green 309 + 74 92 101 Dark Grey / Blue 310 +250 183 175 Flesh Pink 311 +140 87 57 Dark Brown 312 +239 238 150 Light Sulphur 3120 +241 197 132 Peach 3122 +250 240 125 Light Yellow 3125 +249 209 23 Manila 3129 +187 149 117 Champagne 313 +183 148 118 Umber 314 +245 239 211 Afterglow 315 +171 197 206 Pale Blue 316 +246 215 8 Canary-BRT 317 +192 117 29 Copper 3170 +132 125 70 Moss 318 +230 192 106 Golden Honey 319 +255 195 195 Carnation Medium 3209 + 80 144 125 Winter Green 321 +255 160 120 Yellow Mist 3212 +255 100 90 Coral 3213 +255 90 125 Dusty Rose 3214 +220 115 125 Tea Rose 3215 +171 97 113 Rose Wine 322 +250 128 110 Blush Medium 3223 +227 54 91 Coral / Dark 3224 +186 173 130 Beachcomber 323 +208 124 67 Topaz Medium 324 +210 160 165 Toasted Champagne 3240 +117 96 101 Black Plum 3241 + 85 10 60 Syrah 3245 +184 33 27 Ruby 325 +120 50 75 Wine 3250 + 95 10 20 Brown 3259 +250 228 209 Chickory Light 326 + 82 10 33 Blackberry 3261 +166 176 255 Medium Blue 3263 +111 102 119 Cadet 3264 + 81 69 93 Midnight Grey 3266 +255 238 222 Light Coral 327 +217 232 248 Pale Baby Bleu 328 +239 242 241 White 329 + 10 4 51 Deep Arctic Sky 330 +200 235 252 Ice Blue 3305 +137 145 162 Medium Purple 3306 +131 139 131 Dark Silver 3307 +183 232 209 Mint 3309 +255 254 203 Pale Lemon 331 +150 198 242 Pale Blue 3313 + 80 202 203 Spearmint 3318 + 47 158 159 Baltic 3319 +185 184 163 Agate Gray 332 + 33 181 140 Dark Aqua 3320 + 69 83 69 Dark Grey / Green 3322 + 22 95 102 Deep Peacock 3323 + 33 85 144 Turkish Sea 3324 + 79 90 79 Granite 3327 + 67 163 212 Light Blue 3328 + 58 79 79 Dk. Steel 3329 +252 255 220 Jonquil Very Light 333 + 14 72 99 Stellar Blue 3331 + 14 52 99 Dark Blue 3336 + 3 30 63 Navy Blue 3339 +255 187 179 Salmon Pink 334 + 12 28 48 Dark Blue Grey 3346 + 98 79 36 Dark Olive Green 335 + 3 36 46 Ivy 3351 +165 110 104 Heather Rose 336 + 96 73 37 Light Cocoa 337 + 90 102 117 Dark Steel Blue 338 +112 112 95 Palm Leaf 339 +168 172 160 Stone Grey 340 +255 255 240 Light Beige 3400 +245 235 190 Transparent Yellow 3401 +232 222 175 Light Yellow / Orange 3402 +232 194 133 Sahara Sun 3403 +246 226 181 Wheat 3404 +244 217 162 Pale Yellow 3405 +245 229 188 Ecru 3406 +173 156 98 Warm Gray 3407 + 64 60 43 Black Avocado Green 341 +212 164 88 Golden Lights 3411 +171 126 81 Gold 3412 +139 80 37 Brown 3418 +138 140 121 Pale Grey 342 + 99 102 75 Olive Branch 3420 + 97 87 58 Olive Drab 3421 +167 136 43 Medium Ginger 3422 +175 100 25 Tan Brown 3423 +185 75 25 Brick Dark 3424 +167 105 33 Inca Gold 3431 +135 75 21 Cinnamon 3432 +129 58 15 Chocolate 3433 +160 40 15 Red Bittersweet 3434 + 88 50 13 Mocha Brown / Very Dark 3435 +111 94 39 Pharaoh Gold 344 + 64 34 4 Dark Brown 3445 + 50 5 10 Dark Chocolate 3455 +173 146 88 Medium Yellow 346 +224 154 146 Coral 347 +113 134 161 Medium Blue 348 +106 128 139 Smoke Blue 350 + 42 82 22 Blue Spruce 351 +178 236 130 Lime 3510 +105 255 158 Seafrost 3511 +186 181 128 Beechnut 3514 +177 213 141 Green Oak 3515 +186 225 124 Lime 3516 +118 113 60 Earth 3517 + 85 96 50 Pale Green 3518 +127 255 65 Bright Green 3519 +155 55 42 Indian Paintbrush 352 +138 192 47 Med Olive Green 3521 + 17 190 62 Harvest Green 3522 + 68 126 53 Medium Green 3524 + 51 130 93 Mint Green Dark 3525 + 64 63 98 Deep Cobalt 353 + 86 105 25 Palmetto 3532 + 25 93 99 Deep Peacock 3535 + 6 70 34 Dark Green 3538 + 67 83 68 French Green 354 +180 164 55 Medium Green / Yellow 3546 + 55 70 10 Laurel Green Dark 3560 + 65 113 117 Dk. Winter Sky 3600 + 54 68 68 Dk. Night Blue 3601 + 58 73 79 Midnight 3602 +211 203 177 Birch 3613 +141 159 141 Slate Grey 3615 +104 85 61 Dark Olive Green 3617 +128 128 128 Silver 3625 + 76 78 82 Light Charcoal 3630 + 62 68 62 Charcoal 3635 +195 5 100 Dark Grenandine 3844 +254 232 49 Straw 3853 +241 154 133 Peach 3860 +115 20 30 Brown 3863 +110 140 151 Country Blue 3884 +174 41 41 Christmas Red 3900 +207 125 166 Rose Pink 3935 +175 194 46 Lime 3970 +180 185 165 Khaki Beige 501 +239 200 16 Cornsilk 502 + 12 8 45 Deep Arctic Sky 505 +249 230 202 Flesh 508 +253 243 218 Light Cream 520 +178 108 41 Tiger Eye 521 +231 144 2 Autumn Gold 523 + 34 3 39 Dk. Navy 524 + 52 72 30 English Green 525 + 17 54 117 Cobalt Blue 526 +120 20 60 Purple Ice 534 +125 38 42 Burgundy 535 + 17 20 8 Forest Green 538 +255 255 0 Gold / Yellow 542 +225 0 0 Lipstick 561 +255 180 53 Spice 562 +243 160 1 Butterfly Gold 567 +230 109 0 Cinnamon 568 + 22 95 40 Garden Green 569 + 55 140 55 Bright Green 570 + 8 142 108 Deep Aqua 571 + 16 10 124 Blue Ribbon 572 + 53 105 61 Mint Julep 580 +150 60 70 Deep Rose 607 +149 149 139 GS Gray 610 +244 244 248 Silver Blue 61001 +245 238 242 White 61002 + 32 4 22 Dk. Navy 61005 +150 150 149 Dark Grey 61011 +253 205 203 Salmon Pink 61015 +239 202 174 Bisque 61017 +255 150 134 Coral Reef 61019 +255 117 112 Carmine Rose Light 61020 +203 59 28 Firecracker 61021 +245 243 213 Eggshell 61022 +255 222 5 Canary 61023 +255 174 0 Canary Yellow Medium 61024 +212 117 0 Almond 61025 +129 131 204 Violet 61028 +106 128 220 Jay Blue 61029 +164 181 234 Pale Blue 61030 +214 179 205 Winsome Orchid 61031 +151 77 180 Mulberry 61032 +179 44 146 Dusty Fuschia 61033 +167 43 74 Rose Red 61034 +103 17 25 Brown 61035 +139 54 52 Garnet medium 61036 +232 2 0 Foxy Red 61037 +202 0 5 Red Riding Hood 61039 +106 94 94 Pewter Grey / Dark 61040 +117 114 114 Dark Grey 61041 + 34 18 107 Purple 61042 + 56 38 60 Dark Maroon 61043 + 85 25 69 French Raspberry Red 61044 +139 203 203 Tropical Wave 61045 +109 143 143 Medium Blue / Grey 61046 +191 207 161 Reed 61047 +107 161 104 Kelly 61049 + 42 108 49 Dark Green 61051 +232 187 159 Evening Sand 61054 +233 175 110 Apricot Nectar 61055 +208 116 68 Topaz Medium 61056 +117 34 18 Bark 61057 +103 40 29 Tan 61058 +100 68 63 Mahogony 61059 +255 234 166 Jonquil Light 61061 +240 249 233 Pale Yellow-Green 61063 +255 213 236 Petal Pink 61064 +255 139 0 Citrus Dark 61065 +255 238 164 Cream Brown 61066 +255 247 127 Straw Light 61067 +245 233 233 Light Pink 61068 +232 174 84 Toast 61070 +239 233 220 Light Peach 61071 +213 223 254 Bright White 61074 + 41 35 121 Dark Ink 61076 +196 207 206 Slate Bleu 61077 +255 114 0 Orange Slice 61078 + 35 117 83 Green Forest 61079 +208 118 193 Purple 61080 +207 93 97 Dusty Rose / Very Dark 61081 +248 228 201 Aspen White 61082 +255 201 79 Butternut 61083 +219 204 195 Crystal Gray 61085 +255 255 237 Ivory White 61086 + 27 120 149 Teal 61090 + 64 170 222 Medium blue 61094 + 49 170 209 Surf Blue 61095 + 7 87 135 Fire Blue 61096 +187 215 169 Mint 61100 + 53 136 75 Dark Green 61101 + 55 30 24 Dark Brown 61103 +204 211 148 Light Khaki Green 61104 +255 149 195 Fairy Tale Pink 61108 +241 46 132 Ruby Glint 61109 +250 200 219 Memphis Belle 61111 + 63 14 106 Purple Accent 61112 +255 228 232 Oyster 61113 +255 205 218 Mauve Pink 61115 +255 188 202 Beauty Rose Light 61117 +218 88 125 Cranberry medium 61119 +252 237 238 Carnation Ultra Light 61120 +243 168 213 Rose Quartz 61121 +102 13 99 Violet Very Dark 61122 +255 197 0 Sunflower 61124 +230 133 54 Sun Orange 61126 +230 202 170 Pale Peach 61127 +157 101 78 Copper Brown 61128 +118 28 29 Wine 61129 +110 42 38 Red Wine 61130 + 83 66 70 Dark Brown 61131 + 95 144 187 Medium Blue 61134 +255 218 108 Snapdragon 61135 +255 180 6 Manila 61137 + 57 64 142 Flag Blue 61143 +136 172 221 Periwinkle 61145 +196 0 6 Red Berry 61147 +255 154 178 Rose 61148 +215 164 126 Tan 61149 +214 229 232 Sapphire Medium Light 61151 +255 123 160 Medium Pink 61154 + 90 90 10 Palmetto 61156 +145 45 16 Red Bittersweet 61158 +203 179 0 Royal Gold 61159 + 41 38 54 Dark Grey 61162 +190 205 221 Blue Hint 61165 +104 97 96 Medium Grey / Green 61166 +255 217 120 Glow 61167 +255 131 29 Soleil 61168 +128 18 21 Cherokee Red 61169 +128 63 42 Light Cocoa 61170 + 82 51 85 Dark Purple 61171 +103 94 125 Lilac Mist 61172 +128 98 75 Natural Brown 61173 + 27 79 11 Green 61174 + 97 96 63 Olive Drab 61175 +102 100 33 Lt. Army Green 61176 +174 178 86 Marsh 61177 +145 95 101 Cognac 61179 +145 102 95 Cognac 61180 +194 35 20 Bright Red 61181 + 44 12 78 Dark Purple / Navy 61183 +255 73 5 Sunkist 61184 +255 163 0 Bright Orange 61185 +255 214 0 Straw Very Dark 61187 + 66 8 97 Royal Purple 61189 +159 35 71 Brandy 61190 +213 4 118 Dark Rose 61191 +188 6 104 Dark Grenandine 61192 +172 128 186 Grape 61193 +145 74 180 Laurie Lilac 61194 + 67 20 103 Dark Purple 61195 + 88 103 203 Marine Blue 61196 + 71 26 95 Purple Accent 61197 + 86 60 125 Dark Violet 61198 + 42 22 88 Violet Blue 61200 +173 184 211 Ice Blue 61203 + 65 93 115 Medium Green / Blue 61206 + 50 87 74 Enchanted Sea 61208 +209 193 132 Medium Tan 61209 +147 126 105 Dark Beige 61211 +125 110 90 Medium Green / Yellow 61212 +114 64 74 Dark Purple 61214 +192 182 179 Mercury 61218 +103 97 96 Medium Grey / Green 61219 + 77 64 68 Dark Grey 61220 +141 178 240 Medium Blue 61222 +255 138 192 Carnation Medium Light 61224 +255 210 241 Light Pink 61225 + 49 103 114 Harbor 61230 +255 14 111 Fuschia 61231 + 52 13 107 Purple Accent 61235 +226 216 225 Light Orange / Red 61236 +101 180 227 Ozone 61249 + 0 134 198 Blue / Green 61252 + 0 87 162 Solar Blue 61253 +170 5 148 Purple 61255 +255 201 167 Dusty Salmon 61258 +254 125 110 Blush Medium 61259 +244 244 247 Eggshell 61350 +243 244 248 Silver Blue 61351 + 35 40 0 Dark Green 61352 + 81 94 99 Bleu Mist Dark 61353 + 61 58 56 Black 61354 + 97 98 109 Dark Grey / Blue 61355 +124 125 138 Medium Blue 61356 +172 168 170 Stone Grey 61357 + 97 77 73 Warm Earth 61358 +219 190 0 Liberty Gold 61359 +113 66 0 Hazel 61360 +130 106 0 Olive Green Very Dark 61361 + 93 80 39 Dark Olive Green 61362 + 88 74 63 Dark Brown 61363 +170 115 0 Ginger 61364 +243 208 0 Canary-BRT 61365 +159 148 120 Taupe 61366 +242 146 0 Medium Orange 61367 +219 121 0 Gold / Orange 61368 +253 196 40 Sunset 61369 +102 62 55 Sepia 61370 + 89 60 21 Mocha Brown / Very Dark 61371 +192 155 93 Medium Beige 61372 +255 140 0 Citrus Dark 61373 +173 107 0 Orange / Brown 61374 +190 120 33 Copper 61375 +211 150 95 Sunkissed 61376 +123 67 39 Brown 61377 +220 209 186 Whisper Pink 61378 +137 123 96 Espresso 61379 +116 94 90 Medium Brown 61380 +182 59 0 Bright Rust 61381 +143 97 54 Unaka Sand 61382 +159 74 0 Rosewood Dark 61383 +107 51 0 Date 61384 + 86 34 27 Fudge Dark 61385 + 94 32 34 Cranberry 61386 +245 194 158 Opaline 61387 +127 78 77 Roan Rouge 61388 +192 157 121 Tawny Medium 61389 +172 0 0 Blood Red 61390 +149 58 10 Bright Rust 61391 +233 0 0 Foxy Red 61392 +215 0 0 Paprika Red 61393 +220 150 149 Sea Pink 61394 +183 0 0 Scarlet Flame 61395 +255 115 141 Magenta Medium 61396 + 71 46 39 Friar Brown 61397 +195 0 0 Radiant Red 61398 +145 0 0 Terra Cotta 61399 +139 30 1 Chestnut 614 +124 0 0 Tawny Brown 61400 +132 0 1 Wine 61401 +110 33 0 Brown 61402 +214 110 0 Gold / Orange 61403 +236 0 94 Carnation Dark 61404 +122 19 34 Cherokee Red 61405 +156 27 55 Cranberry 61406 +122 44 54 Pale Maroon 61407 +244 206 233 Pale Pink 61408 +164 0 66 Burgundy 61409 +237 103 162 Fresh Mint 61410 +106 0 162 Aubergine 61411 +103 8 54 Evening Brandy 61412 +123 49 78 Wine 61413 +104 54 122 Bright Mulberry 61414 + 54 60 102 Dark Navy Blue 61415 + 43 39 144 Team Blue 61416 + 64 42 128 Dark Royal Blue 61417 +119 89 126 Crushed Grape 61418 + 64 31 61 Deep Slate Gray 61419 + 59 39 74 Fleet Blue 61420 + 61 36 64 Deep Slate Gray 61421 + 56 27 58 Dark Purple / Navy 61422 + 79 30 58 Dark Maroon 61423 + 34 64 153 Fire Blue 61424 + 0 81 179 Ocean Blue 61425 + 0 56 139 Blue 61426 + 15 58 101 Dark Blue 61427 + 0 113 175 Tropical Blue 61428 + 0 120 211 China Blue 61429 + 0 157 218 Country Blue 61430 +105 151 193 Pale Purple 61431 + 66 87 121 Dark Blue 61432 +116 188 215 Pale blue 61433 +162 167 188 LightPurple 61434 + 0 95 163 Dark Blue 61435 + 68 66 91 Slate Gray 61436 + 0 132 182 Peacock 61437 + 35 46 86 Mazarine Blue 61438 + 45 33 40 Black 61439 + 95 195 205 Sky 61440 + 30 50 70 Blue Velvet 61441 + 0 113 143 Blue / Green 61442 + 0 128 159 Blue / Green 61443 + 10 61 96 Dark Blue 61444 + 60 70 102 Deep Cobalt 61445 +101 180 183 Blue Turquoise 61446 + 0 99 99 Spruce 61447 + 0 100 86 Green Forest 61448 + 29 34 42 Black 61449 + 55 35 28 Dark Brown 61450 + 0 95 71 Frosty Spruce 61451 + 90 150 73 Clear Green 61452 +138 194 119 Medium Green 61453 + 45 57 34 Bronze Green 61454 + 70 40 31 Dark Brown 61455 +251 213 0 Moonbeam 61456 +229 0 0 Foxy Red 61457 +151 0 6 Terra Cotta 61458 +149 206 238 Pale Blue 61459 + 23 60 134 Blue Twirl 61460 + 36 36 54 Seal 61461 +197 175 152 Sea Shell 61462 +115 63 3 Hazel 61463 +200 196 196 Bleu Mist 61464 +158 157 172 Steel Gray 61465 + 54 93 178 Medium Blue 61466 + 28 62 157 Royal Blue 61467 + 0 112 192 Cerulean 61468 + 0 102 48 Green 61469 +140 115 90 Doeskin 61470 +100 104 126 Heron 61471 +200 173 123 Flax 61472 + 86 44 26 Arabian Spice 61473 +177 179 168 Pigeon 61474 +149 142 145 GS Gray 61475 +232 217 187 Seedpearl 61476 +224 184 154 Honey Butter 61477 + 34 126 114 Jade Green 61503 +163 131 115 Med. Taupe 61508 +146 212 92 Lime 61510 +255 48 130 Cyclamen Pink 61511 + 24 124 154 Dark Aqua Green 61513 + 62 101 106 Dark Blue / Green 61517 +202 8 79 Lt. Rose 61533 + 16 27 147 Blue 61535 + 48 33 34 Black Wine 61536 +126 0 0 Purple 61594 +233 189 150 Dusty Peach 619 +216 254 40 Fluorescent Yellow 61901 +144 255 0 Erin Green 61904 +255 241 0 Gold / Yellow 61905 +255 111 150 Pink 61909 +255 0 130 Hot Pink 61910 +255 0 68 Deep Red 61913 +255 158 6 Honeydew 61914 +255 72 0 Sunkist 61953 +205 57 0 Sunset 621 +248 212 138 Blond 622 +119 113 19 Moss Green 630 + 28 111 81 Med. Aqua 640 + 38 35 69 Arctic Sky 643 +105 55 60 Sepia 670 +255 110 0 Orange Slice 677 +185 165 100 Pale Green / Yellow 688 +145 235 195 Pale Mint Green 817 +220 210 175 Cocoa Mulch 836 + 70 135 180 Pale Purple 861 +235 210 120 Popcorn 868 diff --git a/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Sulky Rayon.gpl b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Sulky Rayon.gpl new file mode 100644 index 00000000..a30e11db --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Sulky Rayon.gpl @@ -0,0 +1,284 @@ +GIMP Palette +Name: Ink/Stitch: Sulky Rayon +Columns: 4 +# RGB Value Color Name Number +249 249 255 Bright White 1001 +249 249 244 Soft White 1002 +249 249 234 Off White 1071 +249 249 224 Pale Sea Foam 1086 +223 223 203 Silver Gray 1218 +203 203 189 Gray Khaki 1321 +183 183 175 Dk. Gray Khaki 1270 +239 239 229 Light Gray Khaki 1268 +224 219 219 Lt. Putty 1229 +193 203 185 Putty 1508 +149 164 144 Lt. Khaki 1211 +150 170 139 Drab Green 1228 + 99 99 39 Lt. Army Green 1156 + 89 89 29 Med. Army Green 1173 + 39 59 0 Dk. Army Green 1210 +189 209 99 Lt. Avocado 1209 +119 113 19 Moss Green 630 + 99 99 45 Khaki 1212 + 74 74 25 Hedge Green 1272 + 54 54 31 Dark Forest 1273 + 60 79 49 Evergreen 1271 +240 248 236 Pale Yellow-Green 1063 +237 246 212 Pale Green 1331 +194 211 125 Lt. Grass Green 1100 +166 194 132 Mint Green 1047 +112 119 15 Pistachio 1276 +122 179 29 Lime Green 1510 + 92 154 26 Nile Green 1274 + 66 160 33 Grass Green 1049 + 2 118 2 Ivy Green 1277 +147 209 108 Willow Green 1279 + 70 183 116 Dk. Willow Green 1280 + 9 133 49 True Green 1101 + 0 175 56 Bright Green 1278 + 30 100 25 Christmas Green 1051 + 25 50 7 Classic Green 1232 + 22 95 40 Garden Green 569 + 23 85 35 Emerald Green 1079 + 12 61 3 Mallard Green 1208 + 46 131 89 Teal 1046 + 52 72 30 English Green 525 + 17 20 8 Forest Green 538 + 11 65 51 Dk. Teal 1230 +165 175 104 Pastel Yellow-Green 1104 +137 152 18 Avocado 1177 +129 137 1 Chartreuse 1322 +134 129 5 Deep Chartreuse 1332 + 81 83 8 Med. Dk. Avocado 1176 + 21 45 4 Dk. Avocado 1175 + 13 41 4 Dk. Pine Green 1174 +190 205 200 Jade Tint 1077 +224 230 200 Sea Mist 1275 +128 163 136 Sea Foam Green 1207 + 65 85 69 French Green 1287 + 2 20 15 Dk. Khaki 1103 + 53 105 61 Mint Julep 580 + 52 50 19 Dk. French Green 1286 +195 239 191 Lt. Teal 1045 + 15 165 111 Aqua 1288 + 28 111 81 Med. Aqua 640 + 8 142 108 Deep Aqua 571 + 52 150 105 Green Peacock 1503 + 1 79 58 Coachman Green 1517 +226 226 235 Powder Blue Tint 1151 +168 200 188 Pastel Jade 1204 +110 144 165 Med. Jade 1205 +174 198 187 Sage Green 1305 + 19 79 69 Dk. Sage Green 1285 + 16 57 74 Deep Teal 1162 + 13 34 16 Ocean Teal 1233 + 8 24 14 Weathered Blue 1171 + 8 23 5 Midnight Teal 1536 + 0 122 103 Wild Peacock 1513 + 22 98 95 Deep Peacock 1090 + 30 110 111 Dark Jade 1206 + 15 105 120 Dk. Turquoise 1096 + 48 111 117 Bright Turquoise 1251 + 39 92 112 Duck Wing Blue 1250 + 16 209 189 Turquoise 1095 + 38 191 202 Med. Turquoise 1094 + 9 161 168 Bright Peacock 1252 + 52 125 203 Sapphire 1534 + 27 76 164 Dk. Sapphire 1253 + 24 43 86 Deep Turquoise 1202 +166 162 198 Periwinkle 1030 + 87 54 158 Dk. Periwinkle 1226 + 84 58 141 Nassau Blue 1242 + 68 35 93 Deep Nassau Blue 1293 + 50 30 80 Bright Navy Blue 1042 + 42 20 63 Admiral Navy Blue 1199 + 34 15 52 Med. Navy 1197 + 20 11 45 Med. Dk. Navy 1200 + 90 90 139 Royal Blue 1076 + 17 54 117 Cobalt Blue 526 + 35 35 139 Team Blue 1535 + 16 10 124 Blue Ribbon 572 + 74 88 112 True Blue 1143 + 60 80 117 Dusty Navy 1198 + 38 35 69 Arctic Sky 643 + 12 8 45 Deep Arctic Sky 505 + 72 61 89 Slate Gray 1283 + 65 32 68 Deep Slate Gray 1294 + 29 6 47 Midnight Blue 1044 + 25 5 37 Dk. Navy 1043 + 2 1 20 Blue Black 1182 +220 224 241 Baby Blue Tint 1223 +214 213 232 Pale Powder Blue 1074 +114 116 131 Winter Sky 1291 +174 184 195 Lt. Weathered Blue 1203 +110 120 140 Med. Weathered Blue 1172 +209 219 255 Lt. Baby Blue 1222 +100 139 190 Med. Powder Blue 1201 + 98 170 220 Cornflower Blue 1249 + 80 125 170 Peacock Blue 1134 +220 235 240 Ice Blue 1289 +210 230 240 Med. Pastel Blue 1248 +180 225 235 Powder Blue 1145 + 70 110 120 Dk. Winter Sky 1284 +209 220 250 Heron Blue 1292 +190 195 225 Baby Blue 1028 +160 195 235 Med. Blue 1029 +150 195 225 Blue 1196 +120 50 152 Deep Purple 1235 + 70 1 110 Royal Purple 1112 + 50 0 70 Deep Eggplant 1301 +110 10 150 Eggplant 1302 +223 229 235 Lt. Sky Blue 1165 +130 135 140 Sterling 1295 +100 70 100 Dk. Plum 1298 +115 90 100 Lt. Plum 1297 +230 175 210 Lavender 1193 +223 190 200 Med. Orchid 1031 +220 130 160 Orchid 1080 +216 100 150 Dk. Orchid 1033 +126 30 70 Plum 1300 + 75 18 45 Dk. Chestnut 1189 +100 40 40 Med. Chestnut 1214 + 80 10 30 Blackberry 1215 + 50 6 20 Black Cherry 1183 +210 30 130 Fuchsia 1192 +190 25 130 Deep Orchid 1255 +230 140 235 Med. Purple 1032 +210 116 215 Lt. Purple 1194 +130 40 142 Purple 1122 + 65 20 70 Purple Shadow 1299 +210 170 240 Hyacinth 1296 +230 185 245 Dusty Lavender 1254 + 55 1 80 Dk. Purple 1195 +243 219 217 Pink Tint 1068 +240 200 180 Pastel Mauve 1113 +240 214 210 Pale Pink 1120 +230 180 170 Pale Peach 1064 +225 175 154 Med. Peach 1015 +236 150 140 Pastel Coral 1016 +240 130 120 Dark Peach 1020 +226 130 100 Salmon Peach 1259 +236 160 130 Peach 1019 +239 223 189 Pastel Peach 1017 +240 196 160 Coral Reef 1258 +233 189 150 Dusty Peach 619 +219 100 120 Petal Pink 1307 +180 110 117 Dk. Mauve 1119 +160 70 86 Med. Burgundy 1190 +120 35 70 Magenta 1309 +198 50 60 Burgundy 1034 +150 26 50 Mulberry 1311 +252 203 223 Pastel Orchid 1111 +250 185 203 Pink 1121 +250 203 203 Pastel Pink 1225 +240 185 185 Lt. Pink 1115 +250 164 164 Lt. Mauve 1108 +240 160 185 Bright Pink 1224 +235 130 150 Sweet Pink 1256 +220 100 150 Hot Pink 1109 +189 30 96 Dk. Rose 1191 +238 80 120 Deep Rose 1511 +229 50 106 Med. Rose 1231 +205 5 77 Lt. Rose 1533 +255 0 75 Red Geranium 1188 +230 0 65 Deep Coral 1257 +255 189 189 Lt. Coral 1148 +250 153 153 Coral 1154 +240 110 120 Brick 1081 +188 61 44 Deep Mauve 1237 +245 169 160 Mauve 1117 +180 115 100 Dewberry 1304 +185 160 150 Taupe 1213 +248 245 241 Whisper Gray 1325 +213 199 195 Dk. Whisper Gray 1327 +234 228 228 Lt. Silver 1236 +192 178 183 Nickel Gray 1328 +183 169 172 Steel Gray 1011 +152 136 140 Gray 1219 +135 115 117 Med. Dk. Khaki 1040 +140 127 131 Med. Dk. Gray 1041 +142 126 126 Med. Steel Gray 1166 +118 89 96 Charcoal Gray 1220 +171 160 168 Dk. Nickel Gray 1329 +126 108 124 Gun Metal Gray 1306 +116 88 108 Smokey Grey 1240 + 60 27 31 Almost Black 1234 + 38 6 5 Black 1005 +175 137 1 Gold Green 1227 +255 247 213 Cream 1022 +255 255 133 Lemon Yellow 1067 +255 247 185 Pale Yellow 1061 +255 241 128 Primrose 1066 +255 240 114 Pastel Yellow 1135 +255 210 38 Maize Yellow 1167 +246 206 105 Gold 1070 +255 230 105 Yellow 1023 +255 229 0 Mimosa Yellow 1187 +255 236 0 Sun Yellow 1124 +252 190 5 Golden Yellow 1185 +239 200 16 Cornsilk 502 +255 193 0 Spark Gold 1083 +243 182 0 Sunflower Gold 1333 +255 184 0 Goldenrod 1024 +255 190 0 Yellow Orange 1137 +211 157 0 Temple Gold 1159 +255 180 53 Spice 562 +252 143 12 Bittersweet 1313 +231 144 2 Autumn Gold 523 +220 140 23 Tan 1126 +175 91 0 Med. Tawny Tan 1056 +122 0 0 Tawny Brown 1058 +102 0 0 Mahogany 1247 +230 109 0 Cinnamon 568 +186 69 0 Dk. Maple 1158 +255 171 87 Apricot 1239 +235 102 2 Maple 1021 +205 57 0 Sunset 621 +172 28 1 Med. Maple 1216 +151 31 1 Chestnut 1217 +106 0 0 Cognac 1264 +238 190 174 Med. Dk. Ecru 1054 + 91 0 0 Sable Brown 1186 +243 160 1 Butterfly Gold 567 +215 128 0 Mine Gold 1025 +255 145 0 Orange Yellow 1065 +255 131 0 Orange Sunrise 1238 +245 116 10 True Orange 1168 +255 102 0 Tangerine 1078 +255 102 1 Orange Red 1184 +203 0 0 Rust 1181 +249 0 0 Lt. Red 1037 +235 0 0 Christmas Red 1147 +225 0 0 Lipstick 561 +235 0 1 True Red 1039 +179 0 0 Red Jubilee 1263 +156 0 0 Bayberry Red 1169 +121 0 0 Dk. Burgundy 1035 +132 0 0 Wine 1312 +247 227 187 Ecru 1082 +250 236 198 Med. Ecru 1127 +235 188 128 Tawny Tan 1055 +232 200 156 Deep Ecru 1149 +195 148 113 Dk. Ecru 1128 +156 109 69 Toast 1266 +151 95 47 Lt. Brown 1170 +155 107 44 Burnt Toast 1265 + 85 22 2 Dark Brown 1130 +134 76 49 Mink Brown 1267 +106 31 6 Brown 1129 + 83 6 1 Dk. Tawny Brown 1059 + 73 0 2 Cloister Brown 1131 +143 98 61 Dk. Taupe 1179 +226 207 199 Silver 1085 +165 137 115 Med. Taupe 1180 +237 156 181 Rosebud 1515 +252 212 176 Peach Fluff 1543 +135 105 107 Purple Accent 1545 +199 171 125 Flax 1549 +138 138 135 Desert Cactus 1550 + 56 140 140 Ocean Aqua 1551 +143 145 140 Dk. Desert Cactus 1552 +117 105 120 Purple Passion 1554 +224 130 117 Tea Rose 1558 + 84 186 196 Marine Aqua 1560 +143 138 176 Deep Hyacinth 1561 diff --git a/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Swist Rayon.gpl b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Swist Rayon.gpl new file mode 100644 index 00000000..2e6a90e7 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Swist Rayon.gpl @@ -0,0 +1,231 @@ +GIMP Palette +Name: Ink/Stitch: Swist Rayon +Columns: 4 +# RGB Value Color Name Number +237 235 227 Blanc de Blanc 1618B +224 214 204 White Sand 1618C +224 219 212 Vapor 1620 +227 219 196 White Asparagus 1701 +222 214 166 Garden Glade 1703 +222 224 138 Charlock 1705 +214 201 69 Sulphur Yellow 1706 +235 212 64 Maize 1700 +240 196 79 Mimosa 1708 +247 186 84 Amber Yellow 1693 +227 204 145 Straw 2559 +252 171 71 Marigold 1710 +252 161 23 Radiant Yellow 1712 +219 199 94 Cream Gold 2563 +224 227 163 Young Wheat 2564 +227 204 128 Dusky Citron 2405 +237 209 194 Peach Blush 1661 +224 194 186 Lotus 1663 +237 186 176 Powder Pink 1665 +250 214 196 Creole Pink 1667 +255 194 148 Prairie Sunset 1669 +250 173 148 Salmon 1676 +247 148 122 Peach Pink 1677 +232 112 74 Flamingo 1678 +235 110 48 Mandarin Orange 1681 +230 112 61 Coral Rose 1683 +232 107 82 Emberglow 1685 +245 112 64 Firecracker 2288 +214 92 84 Spiced Coral 2289 +189 87 71 Burnt Sienna 2290 +230 204 201 Pale Lilac 1623 +237 186 204 Sweet Lilac 1625 +250 171 186 Prism Pink 1626 +237 140 166 Aurora Pink 1637 +219 107 158 Phlox Pink 1642 +204 79 110 Pink Flambe 1645 +245 163 166 Peony 1648 +232 135 130 Peach Bloosom 1650 +224 102 97 Porcelain Rose 1652 +214 92 84 Spiced Coral 1654 +199 77 89 Claret Red 1655 +189 71 87 Raspberry Wine 1656 +143 71 84 Dry Rose 1657 +150 74 64 Barn Red 2407 +133 74 69 Pompeii 2173 +184 71 77 Chrysanthemum 2015 +168 77 87 Holly Berry 2016 +222 181 199 Pink Lavender 1880 +217 158 194 Orchid 1881 +189 110 150 Spring Crocus 1882 +189 110 150 Spring Crocus 1883 +212 184 194 winsome Orchid 1874 +196 163 199 Viola 1875 +181 138 179 African Violet 1876 +156 115 163 Hyacinth 1877 +158 133 184 Bouganville 2298 +130 110 171 Dahlia Purple 2299 +112 87 110 Grayish Purple 2300 +135 102 120 Grapeade 2303 +209 212 214 Illusion Blue 1831 +186 201 209 Baby Blue 1832 +156 168 181 Blue Fog 1833 +115 138 179 Allure 1834 +110 122 153 Colony Blue 1835 +117 128 150 Infinity 1836 +201 201 212 Arctic Ice 1790 +150 173 209 Placid Blue 1792 +102 117 171 Wedgewood 1794 + 97 97 163 Violet Storm 1795 + 97 97 163 Violet Storm 1820 + 87 89 135 Purple Mountain 1821 +105 97 135 Twilight Purple 1822 +107 102 125 Heron 1823 +102 92 92 Plum Kitten 1824 + 89 110 138 Coronet Blue 1830 + 99 99 99 Castlerock 2010 +201 209 207 Ice Flow 2456 +196 217 214 Pastel Blue 2457 +173 214 209 Blue Light 2458 +173 214 209 Blue Light 2459 +148 199 214 Moderate Blue 2460 + 38 128 156 Bluejay 2464 + 97 120 163 Blue Yonder 2465 +201 209 207 Ice Flow 1837 +191 204 199 Misty Blue 1838 +158 194 196 Canal Blue 1839 +135 184 181 Aqua Haze 1840 + 89 158 163 Porcelain 1841 + 64 128 128 Green-Blue Slate 1842 + 64 125 143 Larkspur 1843 + 74 99 120 Copen Blue 1844 +161 201 196 Eggshell Blue 1730 + 71 181 166 Turquoise 2368 + 82 173 156 Waterfall 1732 + 0 140 140 Navigate 1733 + 43 156 135 Sea Green 1734 +181 214 173 Pastel Green 1715 +166 217 168 Green Ash 1716 +143 191 135 Brilliant Green 1720 +120 212 158 Spring Bud 1722 + 97 189 153 Spearmint 1723 + 79 153 122 Winter Green 1724 +196 227 204 Misty Jade 1735 +135 191 161 Neptune Green 1737 + 84 133 97 Deep Grass Green 1739 + 89 125 97 Comfrey 1740 +204 204 168 Aloe Wash 1741 +191 209 161 Reed 1742 +196 219 150 Butterfly 2369 +181 209 130 Sap Green 1743 +161 196 120 Jade Lime 1744 +117 176 99 Grass Green 1745 +107 156 77 Foliage 1746 + 77 135 84 Medium Green 1753 + 77 135 84 Medium Green 1754 + 89 125 97 Comfrey 2530 + 84 110 79 Vineyard Green 2531 +102 107 84 DeepLichen Green 2532 +186 201 156 Seedling 1762 +158 171 102 Sweet Pea 1764 +122 133 102 Oil Green 1766 +107 107 69 Deep Olive 2088 +194 201 194 Sky Grey 1785 +143 156 150 Silver Blue 1787 +105 107 107 Steel Gray 1789 +189 186 130 Beechnut 2261 +179 181 120 Willow Green 2330 +135 140 92 Cedar 2329 +122 110 74 Gothic Olive 2328 +130 128 97 Aloe 2327 +102 107 84 DeepLichen Green 2326 +110 99 102 Shark 2324 +222 207 194 Crystal Gray 1896 +222 214 194 Bone White 1921 +209 186 158 Ecru Drab 1923 +176 143 112 Praline 1925 +191 158 115 Tan 1906 +222 209 184 Sandshell 1908 +191 186 153 Tidal Foam 1910 +166 143 115 Chanterelle 1912 +230 201 163 Wheat 1914 +204 171 128 Sand 1915 +204 143 105 Sandstone 1916 +204 143 105 Sandstone 1918 +168 122 97 Mocha Mousse 1920 +161 115 79 Lion 1932 +179 135 97 Indian Tan 2122 +199 122 74 Caramel 2123 +184 115 77 Raw Sienna 2124 +186 107 69 Autumn Leaf 2426 +173 92 74 Redwood 2427 +158 97 97 Copper Brown 2428 +219 168 117 Clay 1943 +181 135 92 Biscuit 1945 +168 115 84 Pecan Brown 1946 +173 130 102 Cafe 'Au Lait 1936 +140 97 97 Cognac 1937 +148 107 74 Thrush 1938 +150 115 92 Raw Umber 1939 +138 112 112 Twilight Mauve 1940 +120 94 87 Deep Taupe 2415 +105 84 82 Peppercorn 2414 + 99 87 74 Chocolate Chip 2215 +184 173 166 Ashes Of Roses 1957 +171 163 161 Gull Gray 1958 +153 138 135 Zinc 1959 +115 110 107 Charcoal Gray 1960 +120 107 97 Iron 1961 +194 194 194 Vapor Blue 2499 +171 173 168 Puritan Gray 2500 +143 156 150 Silver Blue 2501 +140 138 135 Wild Dove 2502 +138 133 133 Frost Gray 2503 +128 128 122 Moon Mist 2505 +179 173 166 Dove 1992 +163 161 153 Drizzle 1993 +145 135 133 Medium Gray 1995 + 97 97 97 Pewter 1997 +105 105 107 Stell Gray 1998 +112 107 94 Bungee Cord 1621 +237 235 227 Blanc de Blanc 2620 +227 219 196 White Asparagus 2818 +214 201 69 Sulphur Yellow 2832 +232 191 23 Lemon 2776 +209 181 79 Bamboo 2859 +224 181 79 Yolk Yellow 2785 +230 112 61 Coral Rose 2687 +214 94 84 Deep Sea Coral 2700 +184 71 77 Chrysanthemum 2706 +176 74 69 Baked Apple 2712 +158 71 59 Red Earth 3630 +143 94 77 Russet 2736 +232 204 201 Light Lilac 2623 +214 150 171 Moonlite Mauve 2626 +184 92 97 Baroque Rose 2646 +217 161 153 Bridal Rose 2663 +196 163 199 Lavandula 3286 +143 115 166 Paisley Purple 3224 +115 92 99 Black Plum 3296 +209 212 214 Illusion Blue 3087 +145 189 209 Sky Blue 3049 + 84 125 179 Regatta 3055 + 61 92 135 Delft 3105 + 74 79 99 Blue Indigo 3108 + 79 79 79 Dark Shadow 3116 + 89 163 179 Bright Blue 3077 +102 128 148 Blue Heaven 3045 +179 217 158 Pistachio Green 2903 +117 176 99 Grass Green 3036 + 51 158 92 Kelly Green 2944 + 79 112 79 Elm Green 2917 +125 145 66 Peridot 3005 + 99 107 79 Loden Green 3007 +117 115 89 Dusky Green 3579 +222 207 186 Whisper Pink 3323 +214 199 171 Wood Ash 3329 +186 166 94 PaleGreen-Yellow 3337 +194 171 133 Candied Ginger 3343 +150 125 102 Woodsmoke 3381 +143 99 74 Carob Brown 3426 +120 94 87 Deep Taupe 3438 +168 115 84 Pecan Brown 3369 +158 92 59 Sierra 3402 +184 173 166 Ashes Of Roses 3469 +166 163 171 Dapple Gray 3501 +110 99 102 Shark 3509 +105 84 82 Peppercorn 2621 diff --git a/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Tristar Polyester.gpl b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Tristar Polyester.gpl new file mode 100644 index 00000000..f3a9f642 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Tristar Polyester.gpl @@ -0,0 +1,302 @@ +GIMP Palette +Name: Ink/Stitch: Tristar Polyester +Columns: 4 +# RGB Value Color Name Number +245 20 232 Cloud Dancer 1451 +242 237 222 Marshmallow NAT +242 235 173 Wax Yellow 2029 +222 224 138 Charlock 2030 +247 224 125 Sunshine 2160 +245 237 128 Limelight 2280 +245 224 59 Buttercup 1858 +232 219 82 Aurora 2314 +245 224 59 Buttercup 2058 +237 204 82 Primrose Yellow 2193 +245 224 122 Lemon Drop 2051 +247 201 102 Sunset Gold 1491 +227 191 56 Super Lemon 2008 +232 191 23 Lemon 2297 +224 171 28 Golden Rod 2033 +235 173 69 Beeswax 2049 +240 189 33 Freesia 2158 +240 219 168 Double Cream 3244 +250 217 153 Golden Haze 2032 +242 224 156 Mellow Yeloow 2159 +252 171 71 Marigold 2219 +245 181 38 Citrus 1859 +242 212 214 Cradle Pink 2106 +245 163 166 Peony 9099 +227 153 161 Sea Pink 2103 +250 173 148 Salmon 2057 +250 173 148 Salmon 2084 +235 179 140 Grain 2211 +240 171 130 Coral Sands 2125 +219 158 84 Golden Nugget 2116 +252 143 79 Tangerine 2044 +227 135 84 Dusty Orange 10050 +227 135 84 Dusty Orange 2195 +252 143 79 Tangerine 2052 +237 133 48 Sun Orange 2037 +237 148 48 Apricot 2294 +252 171 71 Marigold 2291 +245 168 102 Pumpkin 10040 +237 173 112 Apricot Nectar 3227 +242 191 148 Caramel Cream 3238 +250 201 161 Almond Cream 2299 +250 199 138 Sunburst 1857 +240 217 199 Pink Champagne 2130 +235 199 184 Pale Dogwood 2213 +242 209 191 Pearlblush 2081 +247 191 173 Peach Melba 7129 +240 204 181 Bisque 2161 +227 186 163 Evening Sand 2162 +224 176 145 Pink Sand 2164 +209 128 110 Terra Cotta 2123 +232 112 74 Flamingo 1853 +227 99 56 Tigerlily 10058 +199 79 56 Paprika 2215 +214 94 84 Deep Sea Coral 1850 +214 94 84 Deep Sea Coral 2165 +186 79 79 Cranberry 2149 +199 59 59 Rococco Red 1851 +186 87 61 Chili 2007 +184 71 77 Chrysanthemum 2150 +176 74 69 Baked Apple 10024 +176 74 69 Baked Apple 3066 +158 71 59 Red Earth 2066 +179 84 79 Mineral Red 2054 +158 84 74 Marsala 2009 +168 79 79 Garnet Rose 2209 +173 92 74 Redwood 3255 +179 99 89 Dusty Cedar 2171 +138 84 71 Mahogany 2172 +117 64 64 Oxblood Red 10032 +133 74 69 Pompeii 9078 +237 207 199 Pinkish Gray 2001 +237 186 176 Powder Pink 2002 +224 194 186 Lotus 3209 +247 181 186 Candy Pink 2079 +245 163 166 Peony 2117 +237 181 199 Lilac Sachet 2003 +250 171 186 Prism Pink 10044 +230 143 168 Rosebloom 2104 +227 153 161 Sea Pink 2100 +227 115 115 Tea Rose 2090 +242 143 120 Burnt Coral 2151 +227 135 130 Strawberry Ice 2071 +204 148 148 Blush 2110 +222 120 153 Wild Orchid 10048 +227 115 130 Confetti 2304 +209 120 140 Chatea Rose 2005 +163 89 92 Mauvewood 1852 +227 115 115 Tea Rose 2006 +217 69 92 Raspberry 2026 +194 74 112 Lilac Rose 2087 +186 66 94 Carmine 10047 +156 64 84 Sangria 8792 +143 77 94 Violet Quartz 1873 +117 64 64 Oxblood Red 1882 +107 77 82 Plum Wine 2170 +107 77 82 Plum Wine 10043 +247 191 194 Orchid Pink 10052 +181 138 143 Lilas 2012 +130 79 107 Amethyst 2223 +128 71 89 Damson 1875 +130 79 107 Amethyst 2185 +163 64 107 Baton Rouge 2109 +171 89 122 Dahlia Mauve 2256 +201 135 171 Crocus 2811 +196 163 199 Lavandula 2091 +158 133 184 Bouganville 2277 +156 115 163 Hyacinth 9014 +125 84 125 Crushed Grape 2184 + 97 71 97 Loganberry 2183 +125 84 102 Berry Conserve 8830 +112 87 110 Grayish Purple 2803 +102 77 117 Imperial Palace 2108 +110 97 148 Corsican Blue 2105 +171 143 181 Viola 2166 +158 133 184 Bouganville 2252 +191 176 204 Pastel Lilac 2312 +143 130 148 Dusk 2013 +191 176 186 Lavender Frost 2086 +143 138 176 Persian Violet 2167 +148 156 201 Easter Egg 2218 +135 143 194 Jacaranda 1872 +143 145 176 Purple Impression 2118 +163 158 191 Sweet Lavender 8820 +115 138 179 Allure 2146 +143 156 191 Lavender Lustre 3147 +171 181 204 Kentucky Blue 3272 +163 184 209 Powder Blue 2293 +173 186 207 Cashmere Blue 2055 +163 184 209 Powder Blue 1839 +122 153 184 Dusk Blue 2134 +105 135 179 Silver Lake Blue 2133 + 94 117 158 Riviera 2231 + 69 112 163 Bluebell 1840 + 82 102 148 Dutch Blue 9020 + 77 99 138 Federal Blue 2142 + 61 92 135 Delft 2021 + 64 71 128 Deep Ultramarine 9802 + 89 79 140 Liberty 1841 + 84 71 110 Deep Wisteria 3102 + 64 66 97 Deep Cobalt 10057 + 79 84 102 Nightshadow Blue 2141 + 82 77 92 Graystone 2121 + 82 77 92 Graystone 3056 + 82 79 84 Nine Iron 1871 + 79 79 79 Dark Shadow 1185 + 82 77 92 Graystone 9056 + 79 84 102 Nightshadow Blue 2227 +107 102 125 Heron 9826 + 79 84 102 Nightshadow Blue 2127 + 84 99 120 China Blue 3344 + 92 97 128 Velvet Morning 1407 +143 145 176 Purple Impression 2126 +112 120 133 Flint Stone 10045 + 99 99 99 Castlerock 2023 + 92 105 107 Gobelin Blue 2323 + 69 107 122 Bluesteel 2061 + 77 128 163 Cendre Blue 2419 + 36 130 171 Swedish Blue 10046 + 79 138 194 Azure Blue 2259 + 79 138 194 Azure Blue 1868 +145 189 209 Sky Blue 3250 +201 209 207 Ice Flow 1977 +176 191 201 Winter Sky 2015 +186 201 209 Baby Blue 2207 +122 161 171 Cameo Blue 2065 +143 176 191 Forget-Me-Not 2145 + 64 135 163 Blue Moon 2072 + 64 135 163 Blue Moon 2272 + 99 168 191 Blue Mist 2018 + 87 163 199 Norse Blue 2242 +122 173 179 Marine Blue 2092 + 74 158 153 Lagoon 2175 + 64 158 130 Marine Green 1861 + 56 140 140 Bay Leaf 2206 + 97 138 153 Dull Blue 2154 + 82 171 135 Gumdrop Green 10022 +173 214 209 Blue Light 2307 +171 204 217 Crystal Blue 2266 +161 201 196 Eggshell Blue 2048 +173 207 212 Blue Glow 2237 +199 222 209 Opal Blue 2148 +179 191 156 Celadon Green 2070 +201 209 189 Almost Aqua 2177 +196 217 214 Pastel Blue 2290 +173 207 212 Blue Glow 2309 +166 217 168 Green Ash 2262 +158 191 138 Arcadian Green 2078 + 84 153 105 Light Elm Green 10049 + 84 168 89 Vibrant Green 2250 +112 181 128 Absinthe Green 2124 + 61 163 117 Ming Green 1863 +135 128 71 Green Moss 10053 +148 168 79 Dark Citron 3303 +179 204 97 Green Glow 3120 +163 201 92 BrightLime Green 2226 +135 191 161 Neptune Green 10021 + 56 138 94 Leprechaun 1864 + 61 122 105 Bottle Green 2075 + 61 122 105 Bottle Green 2275 + 64 112 74 Fairway 3028 + 64 112 74 Fairway 2228 + 87 99 74 Bronze Green 9817 + 79 99 87 Duck Green 10030 + 66 99 87 Smoke Pine 1837 + 79 79 74 Green Black 1838 +158 171 102 Sweet Pea 3180 +201 184 150 Pale Khaki 10051 +189 186 143 Bog 2025 +168 158 133 Tuffet 2224 +102 115 102 Laurel Wreath 1899 +105 102 79 Burnt Olive 3318 +130 128 97 Aloe 10034 +171 156 66 Golden Olive 2111 +105 94 66 Military Olive 1865 + 97 84 69 Teak 10031 +148 128 82 Antique Bronze 2990 +179 158 140 Light Taupe 2114 +194 171 133 Candied Ginger 2120 +199 176 138 Warm Sand 2077 +199 171 125 Latte 2203 +186 156 130 Warm Taupe 2080 +191 168 140 Sesame 2205 +153 143 117 Dune 1886 +186 158 130 Nouget 2039 +214 194 166 Shifting Sand 2289 +240 212 179 Dawn 2053 +230 201 163 Wheat 2238 +166 143 107 Tannin 2221 +153 135 99 Kelp 2180 +181 156 112 Lark 2344 +222 184 128 New Wheat 2083 +181 176 71 Cress Green 2186 +186 166 94 PaleGreen-Yellow 2319 +194 168 107 Fall Leaf 2128 +222 184 128 New Wheat 1897 +163 120 77 Almond 2042 +194 143 92 Butterum 3273 +212 163 64 Mineral Yellow 2849 +209 140 69 Nugget 2035 +184 115 77 Raw Sienna 1879 +194 97 61 Mecca Orange 2036 +176 92 59 Autumn Glaze 1856 +158 84 74 Marsala 2274 +138 84 71 Mahogany 1883 +138 87 69 Rustic Brown 2311 +158 97 77 Copper Brown 2062 +138 97 71 Rawhide 2306 +217 191 148 Beige 10081 +235 179 140 Grain 2302 +245 214 181 Nude 2265 +224 179 130 Desert Mist 10023 +189 140 94 Sandstorm 2073 +181 135 92 Biscuit 2041 +148 107 74 Thrush 3275 +150 115 92 Raw Umber 2043 +107 79 61 Cocoa Brown 2244 +102 89 77 Canteen 1881 +122 94 82 Acorn 2144 +143 99 74 Carob Brown 2074 +133 112 77 Ermine 2395 +181 156 112 Lark 3198 +166 143 107 Tannin 0853 +191 158 115 Tan 10042 +199 163 130 Sirocco 2298 +217 181 153 Toasted Almond 3040 +209 168 140 Maple Sugar 10041 +242 217 189 Vanilla Cream 8880 +235 219 199 White Smoke 2113 +227 217 196 Birch 2194 +199 189 168 Pelican 2187 +179 166 153 String 2255 +179 173 166 Dove 2085 +194 194 194 Vapor Blue 2806 +204 194 176 Pumice Stone 2096 +171 173 166 Blue Gray 2045 +194 194 194 Vapor Blue 2076 +204 199 191 Wind Chime 2253 +184 173 166 Ashes of Roses 2317 +148 135 120 Moon Rock 2316 +143 130 125 Cinder 2301 +143 130 115 Fungi 2064 +153 158 150 Wrought Iron 2251 +145 153 143 Slate Gray 2260 +120 135 135 Lead 2249 +117 138 148 Cadet Gray 2022 +112 120 133 Flint Stone 2135 +173 186 186 Cloud Blue 2137 +153 158 184 Purple Cloud 2248 +145 135 133 Medium Gray 2155 +150 140 148 Silver Rose 2156 +171 163 161 Gull Gray 2046 +140 138 135 Wild Dove 2350 +138 133 133 Frost Gray 2047 +115 110 107 Charcoal Gray 2082 + 97 92 89 Dark Gull Gray 8832 + 89 84 87 Rabbit 8846 + 99 99 99 Castlerock 2254 + 84 84 66 Olive Night 9100 diff --git a/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Tristar Rayon.gpl b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Tristar Rayon.gpl new file mode 100644 index 00000000..1b0954be --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Tristar Rayon.gpl @@ -0,0 +1,410 @@ +GIMP Palette +Name: Ink/Stitch: Tristar Rayon +Columns: 4 +# RGB Value Color Name Number +245 217 209 Whisper Pink 124 +240 222 212 Light Pink 109 +237 194 201 Lady Pink 112 +230 204 201 Blush 110 +240 194 199 Petal Pink 111 +242 212 214 Soft Pink 125 +227 153 161 Rose 113 +250 171 186 Wild Pink 121 +237 140 166 Petunia 102 +222 120 153 Hot Pink 116 +209 120 140 Carnation 118 +204 99 135 Ruby 114 +186 66 94 Fuchsia 104 +204 99 135 Passion 123 +173 107 117 Berry 115 +173 107 117 New Berry 126 +237 209 194 Floral Pink 127 +227 179 176 Coral Pink 318 +232 186 179 Warm Pink 108 +227 173 181 Dusty Rose 106 +227 153 161 Rost Tint 119 +209 135 133 Cabernet 107 +173 107 117 Passion Rose 128 +158 97 102 Marsh Rose 129 +153 99 112 Perfect Ruby 122 +148 110 112 Carnival Burgundy 131 +245 163 166 Cerise 101 +252 158 156 Easter Pink 117 +237 133 148 Azalea 105 +227 115 130 Flamingo Pink 132 +204 99 135 Punch 205 +204 99 112 Blossom 204 +209 107 112 Cherry 213 +199 77 89 Fire Red 214 +204 99 112 Hot Red 215 +166 105 97 Red Maroon 216 +232 135 130 Japonica 217 +227 115 115 Egyptian Pink 220 +209 120 140 Festive Pink 218 +204 99 112 Spectrum Red 219 +179 84 79 Scarlet 209 +186 97 92 Regal 201 +199 77 89 Foxy 200 +214 94 84 Tuxedo Red 960 +181 89 94 Candy Apple 210 +168 79 79 Apple 206 +181 92 66 Fury 297 +189 87 71 Red 203 +186 79 79 Wild Fire 208 +189 87 71 Copper Glow 221 +176 102 79 Fire Clay 222 +191 122 107 Carmine 305 +209 128 110 Dark Melon 314 +219 150 130 Melon 313 +235 173 148 Papaya 316 +227 153 135 Peach 312 +232 181 150 Tawny 315 +217 181 153 Opal 734 +222 207 186 Flesh 103 +237 186 176 Fantasy Pink 317 +222 166 150 Pink 100 +217 161 153 Rosy Flesh 319 +245 176 163 Blushing Pink 320 +227 186 163 Charade 321 +232 186 179 Light Peach 311 +237 209 194 Bisque 310 +217 161 153 Salmon 120 +237 186 176 Damask Rose 322 +204 148 148 Misty Rose 323 +166 105 97 Cranberry 211 +140 89 94 Black Rose 212 +143 94 77 Burgundy 300 +148 110 112 Sherry 324 +140 102 84 Wine 302 +125 92 89 Maroon 301 +120 94 87 Dark Maroon 303 +115 92 99 Intense Maroon 325 +117 105 120 Port Wine 412 +140 112 125 Velvet Maroon 423 +150 122 153 Rich Plum 424 +140 112 125 Mulberry 409 +140 112 125 Lavender 401 +184 125 143 Plum 425 +186 143 166 Dark Violet 402 +212 181 189 Violet Mist 411 +240 194 199 Violet 404 +214 196 191 Orchid 410 +173 153 161 Satin Wine 426 +186 163 150 Clove Dust 427 +196 186 186 Tanberry 428 +191 176 186 Mistic Lilac 429 +168 161 184 Tulip 406 +143 130 148 Lilac 405 +171 143 181 Iris Patel 430 +143 115 166 Purple 403 +138 117 150 Chianti 431 +140 112 125 Dark Purple 413 +135 97 120 Hyachinthe 408 +105 97 135 Asian Grape 414 +143 130 148 Mauve 407 +135 125 153 Tuscany Blue 432 +117 105 120 Deep Blue 433 +110 99 102 Blue Violet 415 +117 105 120 Blue Ink 528 +112 97 143 Purple Twist 416 +135 125 153 Purple Mist 417 +143 156 184 Copen 526 +173 186 207 Pearl Blue 502 +171 181 204 Cotton Candy 420 +189 194 209 Satin Blue 521 +201 209 207 Ice Blue 534 +186 201 209 Pastel Blue 535 +168 191 209 Sky Blue 523 +135 153 201 April Blue 525 +125 143 163 Delft 513 +143 156 184 Tropicana 576 +115 138 179 Atlantic 575 +120 150 204 Bright Blue 505 +102 117 171 Jay Blue 506 +125 125 176 Postal Blue 507 +179 189 196 French Blue 536 +143 156 184 Lake Blue 419 +112 120 133 Antarctic Blue 418 +143 145 176 Pool Blue 503 +125 125 163 Calico 518 +120 128 150 Imperial Blue 537 +112 120 133 Bristol 538 +156 166 163 Stormy Blue 541 +117 128 150 Dusty Blue 527 +115 110 107 Cool Blue 421 +196 217 214 Baby Blue 522 +171 212 217 Tahiti 539 +148 199 214 Tropical Sky 540 +148 199 214 Mint Julep 570 + 87 163 199 Light Aqua 516 + 87 163 199 Aqua 571 + 87 163 199 Mediterranean 578 +105 135 179 California Blue 572 + 79 138 194 Pacific 573 +122 153 184 Pottery Blue 579 + 94 117 158 Solar 574 +115 138 179 Solar 524 +115 107 153 Sapphire 508 +112 97 143 Titanic Blue 509 +115 107 153 Royal 501 +110 97 148 Blue Suede 504 +105 107 120 Sailor 529 +107 102 125 Eclipse 530 +110 99 102 Fleet Blue 515 +110 99 117 Light Midnight 422 +115 110 107 Light Navy 531 +125 110 94 Cosmic Navy 542 +120 94 87 Navy 532 +120 105 82 Old Navy 533 + 99 87 74 Midnight Blue 514 +105 107 120 Smokey Navy 543 +143 176 191 Misty 577 +112 120 133 Napoleon 580 +117 138 148 Country Blue 605 +105 107 107 Dark Teal 615 +120 107 97 Calico Teal 581 +138 158 161 Winter Blue 512 +115 130 128 Deep Ocean 511 +107 107 97 Florentine 582 +120 163 171 Surf Blue 583 +107 158 171 Unicorn 584 +102 130 140 Marine Blue 585 +135 156 161 Teal 614 +120 153 148 Turqoise 601 +150 194 186 Sea Mist 611 +163 219 199 Green Oyster 607 +125 171 171 Mystic 613 +125 171 171 Light Turquoise 612 +122 161 171 Blue Canyon 586 +102 130 130 Oceanic 602 +156 181 179 Sprite 587 +201 227 207 Frost Blue 588 +171 207 181 Sea Breeze 618 +133 194 171 Pastel Aqua 617 +107 181 176 Jade 600 +112 173 176 Green Flash 590 + 97 156 145 Billiard Green 589 +194 230 207 Sunlit Sea 591 +133 184 163 Peppermint 606 + 82 150 143 Peacock 608 +102 150 130 Pine 629 +110 150 135 Aspen 592 +102 140 135 Cilantro 593 +128 145 125 Field Green 594 +133 150 135 Fern 595 +125 120 102 Stone Green 596 +115 130 128 Spruce 597 +128 128 122 Ever Green 622 + 74 125 112 Garden Green 646 +102 130 130 Dark Emerald 654 +120 163 140 Isle Green 648 +133 184 163 Sea Green 628 +148 163 150 Moss 630 +133 150 135 Weed 631 +145 153 143 Secret Garden 660 +107 112 107 Ivy 661 +125 120 102 Newport 610 +105 107 107 Forest 616 + 99 99 102 Winter Green 609 +117 115 89 Hunter Green 634 +112 107 94 Cape Green 683 +122 133 102 Harbor Green 637 +138 128 89 Petal Green 638 +191 212 171 Mint 627 +161 196 153 Spring Green 626 +158 191 138 Nile 655 +120 176 125 Easter Green 656 +112 181 128 Sap 657 +135 171 77 Glitter Green 658 +143 173 92 Ming 620 +161 196 120 Erin Green 625 +171 194 115 Pastoral Green 650 +122 150 107 Envy 662 +179 191 130 Snowpea 663 +158 176 140 Peel Green 664 +179 179 130 Spring Burst 665 +209 204 168 Frost Green 672 +181 186 143 Bright Green 671 +102 120 102 Green 621 +102 107 84 Holly 635 +128 135 89 Barbado 686 +125 156 112 Merry Green 667 +120 171 105 Green Grass 624 +125 145 94 Light Green 652 +105 158 102 Kelly 623 +105 140 99 Green Pepper 604 + 99 158 130 Grass Harper 653 +112 143 112 Emerald 603 +130 156 125 Freemont 668 +224 222 125 Neon Green 745 +186 184 115 Sun Green 643 +194 173 107 Celery 673 +161 150 110 Foliage Green 644 +138 138 97 Palmetto 642 +140 135 115 Citronette 746 +179 181 168 Palm Leaf 639 +145 143 128 Willow Creek 640 +143 143 120 Olive Drab 641 +212 219 173 Pastel Green 674 +181 186 143 Monteray 681 +166 184 166 Carousel Green 747 +161 153 117 Cove Green 670 +148 148 122 Pear Green 659 +140 153 140 Village Green 690 +135 143 125 Boffin Green 684 +125 120 102 Olive 636 +128 140 133 Lunar Green 685 +107 107 97 Terrace 698 +130 128 97 Essex 687 +115 110 107 Hedge 688 +133 120 102 Congo Green 689 +140 135 115 Cypress 676 +125 117 92 Desert Cactus 645 +153 135 99 Fall Green 677 +204 171 128 Root Gold 694 +194 168 107 Old Gold 716 +194 168 107 Ginger 715 +214 181 107 Rustic Gold 693 +214 181 107 Centennial Gold 738 +209 179 89 Yellow Gold 692 +201 153 89 Yellow Ochre 702 +204 153 89 Nectarine 783 +209 156 71 Brass Gold 782 +204 153 89 Gold 721 +227 204 145 Vanishing Yellow 712 +232 217 191 Wheat 739 +222 209 166 Vanilla Cream 740 +240 227 184 Butter 726 +212 219 173 Creamy Yellow 717 +217 222 148 Lemon 701 +214 201 92 Daffodil 718 +214 201 69 Canary 700 +240 219 105 Moonlight 695 +227 204 128 Corn Silk 741 +240 196 79 Star Gold 697 +240 196 79 Mums 705 +224 181 79 Goldenrod 706 +245 189 74 Wild Flower 727 +247 186 84 Apricot 742 +227 115 115 Glazed Carrot 743 +235 120 92 Popsicle 709 +227 135 84 Sunset 724 +209 130 102 Orange 710 +209 135 87 Sunkist 728 +222 140 92 Golden Poppy 725 +235 153 92 Honeydew 708 +252 143 79 Marigold 707 +219 158 84 Excel Gold 703 +247 176 94 Yellow Mist 744 +235 176 77 Mango 704 +237 186 97 Tangerine 714 +222 173 89 Mustard 720 +250 199 138 Banana 713 +240 209 173 Provincial Tan 770 +237 214 163 Apple Wood 771 +224 179 130 Moon Dance 772 +214 189 145 Antic Penny 691 +222 184 128 Cane 773 +242 194 140 Squash 774 +237 173 112 Toast 808 +237 173 112 Honey 719 +201 135 94 Rust 803 +176 102 79 Red Wood 775 +168 115 84 Bright Sienna 776 +168 107 89 Roanoke Brown 777 +209 189 122 Moon Rock 781 +222 184 128 Glitter Gold 780 +214 189 145 Riviera Sand 779 +201 184 150 Congo Tan 825 +209 186 145 Maize 678 +214 189 145 Cameo 711 +204 171 128 Ashley Gold 784 +199 171 125 Light Topaz 729 +222 184 128 Topoz 730 +235 214 181 Champagne 647 +224 201 168 Bone 750 +227 194 150 Rice Puff 785 +217 181 153 Tropic Tan 786 +209 168 140 Bamboo 810 +199 176 138 Tan 806 +191 168 140 Amber beige 731 +176 143 112 Wicker 805 +181 138 105 Cinnamon 811 +153 110 102 Hazel 818 +184 135 102 Date 787 +173 133 102 Light Brown 802 +145 115 97 Brown 800 +158 128 97 Sienna 816 +184 135 102 Cocoa Bean 821 +153 122 99 Dandy Brown 822 +148 115 79 Coffee 801 +214 163 133 Camel 820 +194 143 92 Almond 819 +189 150 102 Tobacco 823 +181 138 105 Oak Heart 824 +199 176 150 Sea Shell 733 +199 176 150 Taupe 812 +179 150 125 Beige 679 +181 163 133 Rattan 804 +191 168 140 Columbian Tan 752 +179 158 145 Mountain Tan 753 +153 138 115 Pepper Beige 754 +153 135 99 Dark Beige 732 +209 186 145 Pistachio 675 +168 158 133 Oyster 831 +148 135 107 Twilight Gray 832 +158 135 110 Sand 817 +171 145 125 Teakwood 833 +148 120 110 Boulder Brown 834 +145 115 97 Coconut 813 +148 120 110 Mushroom 835 +166 143 115 Earth Brown 925 +140 122 92 Espresso 815 +125 105 77 Hickory 923 +153 140 120 Pipe Gray 941 +166 156 138 Gladstone 940 +186 171 148 Grayrod 929 +214 194 166 Platinum 826 +209 199 184 Pearl 751 +222 201 181 Ivory 809 +224 214 204 Silk 830 +214 194 166 Natural 838 +212 184 166 Ecru 735 +179 145 125 Spice Beige 837 +138 112 112 Java 827 +135 105 107 Mocha 304 +138 112 112 Mohogany 814 +156 130 130 Dogwood 828 +133 120 102 Dark Brown 829 +199 189 173 Morning Gray 916 +204 199 191 Dove 917 +196 186 186 Velvet Gray 918 +196 186 186 Steel 906 +171 163 161 Storm Gray 919 +143 130 148 Ducky Mauve 737 +153 138 135 Canyon Mauve 921 +194 194 194 Fog 926 +199 199 194 Chrome 920 +204 199 191 Pearl Grey 901 +194 194 194 Oxford 915 +168 158 153 Iron 907 +156 158 153 Moody Gray 927 +150 140 148 Silver 903 +196 186 186 Granite 908 +150 140 148 Dark Silver 914 +153 138 135 Black Pearl 909 +214 196 191 Porcelain 905 +204 199 191 Soft Silver 913 +179 181 176 Gray 904 +179 173 166 Cloud 912 +171 173 166 True Gray 902 +179 181 176 Titanium 942 +135 120 130 Metal 943 +138 130 122 Glacier Gray 928 +135 120 130 Charcoal 911 +133 120 102 Dark Shadow 922 +120 107 97 Black 910 +224 219 212 White 930 +237 232 222 Natural White 931 +235 219 209 Egg Shell 899 +227 219 196 Creme 900 diff --git a/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Viking Palette.gpl b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Viking Palette.gpl new file mode 100644 index 00000000..f25af56f --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Viking Palette.gpl @@ -0,0 +1,33 @@ +GIMP Palette +Name: Ink/Stitch: Viking Palette +Columns: 4 +# RGB Value Color Name Number + 0 0 0 Black 1 + 0 0 255 Blue 2 + 0 255 0 Light Green 3 +255 0 0 Red 4 +255 0 255 Purple 5 +255 255 0 Yellow 6 +132 130 132 Gray 7 + 0 130 255 Light Blue 8 + 0 255 132 Green 9 +255 130 0 Orange 10 +255 162 181 Pink 11 +198 65 0 Brown 12 +255 255 255 White 13 + 0 0 132 Dark Blue 14 + 0 130 0 Dark Green 15 +165 0 0 Dark Red 16 +255 121 123 Light Red 17 +132 0 132 Dark Purple 18 +255 130 255 Light Purple 19 +198 195 0 Dark Yellow 20 +255 255 165 Light Yellow 21 + 66 65 66 Dark Gray 22 +198 195 198 Light Gray 23 +231 65 0 Dark Orange 24 +255 174 66 Light Orange 25 +255 89 123 Dark Pink 26 +255 211 214 Light Pink 27 +132 32 0 Dark Brown 28 +231 97 33 Light Brown 29 diff --git a/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Vyapar Rayon.gpl b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Vyapar Rayon.gpl new file mode 100644 index 00000000..4a846cab --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Vyapar Rayon.gpl @@ -0,0 +1,292 @@ +GIMP Palette +Name: Ink/Stitch: Vyapar Rayon +Columns: 4 +# RGB Value Color Name Number +245 238 126 Medium Yellow V11022 +246 237 72 Lemon V11023 +249 231 21 Daffodil V11180 +130 118 16 Desert Cactus V11157 +249 223 22 Moonbeam V11083 +250 215 22 Canary V11068 +216 181 17 Pollen Gold V11359 +251 227 77 Lemon V11135 +251 225 77 Star Gold V11124 +251 225 77 Star Gold V11224 +252 208 22 Manila V11125 +252 208 22 Manila V11069 +199 161 14 Black Eyed Susie V11159 +251 228 128 Sunshine V11067 +253 218 87 Star Gold V11171 +254 200 31 Buttercup V11172 +254 200 31 Buttercup V11024 +224 170 15 Pollen Gold V11025 +224 170 15 Pollen Gold V11225 +162 131 5 Autumn Green V11191 +245 228 135 Pale Yellow V11066 +254 217 128 Glow V11026 +254 217 128 Glow V11270 +252 164 18 Mango V11065 +243 206 105 Yellow Gold V11070 +253 173 87 Chamois V11155 +247 127 0 Pumpkin V11278 +244 219 172 Cream V11055 +249 200 172 Peach V11053 +249 200 172 Peach V11017 +252 158 113 Cadmium Orange V11152 +250 186 171 Flesh Pink V11018 +250 186 171 Flesh Pink V11019 +247 74 3 Sunkist V11378 +250 176 174 Emily Pink V11016 +250 176 174 Emily Pink V11317 +251 129 128 Shell Pink V11107 +193 57 40 Dark Rust V11221 +193 57 40 Dark Rust V11179 +126 45 36 Burgundy V11174 +251 191 195 Orchid Pink V11116 +251 191 195 Orchid Pink V11014 +207 19 38 Foxy Red V11147 +176 30 45 Red Berry V11181 +255 162 178 Dusty Rose V11108 +230 6 58 Cerise V11154 +120 45 54 Wine V11384 +120 45 54 Wine V11385 +244 201 201 Crystal Pink V11120 +239 152 164 Medium Pink V11148 +140 37 50 Burgundy V11182 +255 160 190 Petal Pink V11321 +254 120 168 Wild Pink V11309 +203 3 86 Dark Pink V11234 +166 4 69 Burgundy V11034 +226 41 130 Ruby Glint V11109 +226 41 130 Ruby Glint V11110 +172 1 80 Cherrystone V11383 +148 1 67 Cranberry V11183 +109 32 65 Brushed Burgundy V11389 +171 0 101 Hot Peony V11310 +231 128 201 Medium Pink V11080 +236 197 221 Violet V11232 + 85 35 70 Medium Purple V11388 + 85 35 70 Medium Purple V11320 + 79 34 113 Purple Accent V11112 + 70 36 90 Purple Accent V11313 + 44 19 102 Dark Purple / Navy V11322 +180 210 231 Ice Blue V11074 +154 187 223 Baby Blue V11075 + 0 43 127 Blue Suede V11167 +118 170 220 Caribbean Blue V11028 + 58 117 196 Dolphin Blue V11133 + 58 117 196 Dolphin Blue V11029 + 0 56 168 Fire Blue V11134 +196 218 226 Cadet Blue V11092 +196 218 226 Cadet Blue V11027 + 0 82 186 Ocean Blue V11177 + 0 56 106 Salem Blue V11376 + 0 78 110 Peacock V11296 + 0 64 83 Deep Windsor V11161 + 0 122 167 Pretty Blue V11096 + 42 197 218 Periwinkle V11094 + 0 174 200 Aquamarine V11095 + 0 152 180 Dark Blue / Green V11295 + 0 131 155 Dark Aqua Green V11091 + 0 106 119 Mallard Blue V11291 + 0 74 79 Blue Spruce V11290 +202 232 223 Light Blue V11292 + 0 115 116 M. D. Green V11293 + 87 202 194 Aquamarine V11088 + 0 179 170 M. D. Green V11246 + 0 179 170 M. D. Green V11090 + 0 109 102 Imperial Aqua V11185 + 0 109 102 Imperial Aqua V11052 + 0 89 82 Green V11371 +187 234 214 Bleached Aqua V11097 +123 210 182 Pale Green V11046 + 0 123 95 Jade V11280 +180 226 192 Mint V11047 +111 206 156 Seafoam V11245 + 0 134 81 Dark Green V11250 +153 229 178 Pale Aqua V11302 + 0 157 75 Vibrant Green V11251 + 0 123 62 Kelly V11051 + 0 123 62 Kelly V11079 + 34 91 52 Holly V11103 + 31 181 59 Harvest Green V11249 + 52 159 54 Emerald V11101 + 52 159 54 Emerald V11050 + 62 144 50 Kelly V11369 +170 221 110 Spruce V11049 + 87 143 21 Meadow V11170 +187 232 96 Sharp Green V11248 +187 232 96 Sharp Green V11168 +127 187 0 Green Dust V11048 +147 154 6 Tamarack V11140 +176 168 10 Green / Gold V11350 +142 139 122 Pale Grey V11062 +119 116 100 Medium Green / Yellow V11063 +223 219 210 Vapor V11010 +174 175 171 Traditional Gray V11011 +146 150 148 Banner Gray V11118 +103 109 111 Metal V11041 + 49 56 59 Black V11241 + 89 63 62 Dark Brown V11259 + 89 63 62 Dark Brown V11336 + 73 53 50 Egyptian Brown V11059 + 73 53 50 Egyptian Brown V11129 + 64 49 44 Espresso V11130 +215 204 175 Seashell V11138 +234 223 151 Wheat V11260 + 92 71 36 Dark Olive Green V11329 +117 85 38 Light Cocoa V11144 +210 190 145 Taupe V11128 +221 204 165 Sea Mist V11084 + 97 52 19 Mushroom V11058 + 97 52 19 Mushroom V11158 + 89 60 43 Brown V11145 +176 137 113 Tawny Birch V11054 +225 204 185 Whisper Pink V11142 +155 49 28 Red Bittersweet V11038 +241 197 176 Bisque V11114 + 92 38 37 Dark Sepia V11036 +146 52 56 Dark Orange / Red V11238 +242 199 196 Pink Mist V11113 +102 31 43 Warm Wine V11374 +102 31 43 Warm Wine V11035 + 54 64 92 Light Midnight V11362 + 54 64 92 Light Midnight V11365 +155 162 184 Purple Cloud V11363 +101 147 189 Pale Purple V11375 + 0 65 83 Deep Windsor V11162 + 94 152 172 Wonder Blue V11160 + 35 70 54 Mitchell Green V11395 + 37 103 89 Green Forest V11391 + 74 89 41 Green / Yellow V11394 +201 215 163 Pastel Green V11100 +201 215 163 Pastel Green V11099 +217 223 180 Lime Cream V11104 +135 137 6 Crescent Moon V11106 +135 137 6 Crescent Moon V11340 +227 229 133 Pebblestone V11150 +151 140 41 Medium Yellow / Green V11190 + 84 183 200 Capri V11289 +106 201 220 Basic Turquoise V11089 + 0 139 178 Blue / Green V11294 +210 216 217 Illusion Blue V11153 +198 208 214 Pastel Blue V11012 +120 150 178 Country Blue V11360 + 37 85 126 Lake Blue V11364 +110 134 169 Slate Blue V11175 + 52 86 134 Imperial Blue V11042 + 47 52 142 Blue V11076 +127 101 138 Light Grape V11387 + 72 43 88 Blackberry V11233 +234 172 197 Carnatio V11031 +212 107 157 Hot Pink V11319 +234 203 207 Light Pink V11111 +183 114 144 Rose Dust V11235 +178 107 111 K. A. Bronze V11341 +178 107 111 K. A. Bronze V11119 +248 210 205 Crystal Pink V11115 +247 192 190 Desert Bloom V11015 +244 210 176 Alesan V11127 +187 117 49 Toast V11253 +193 144 97 Light Bronze V11126 +171 117 64 Wicker V11056 +163 145 106 Olive Drab V11338 +174 147 110 Beige V11344 +248 231 171 Tusk V11123 +250 224 139 Wheat V11061 +253 180 21 Merit Gold V11137 +164 127 21 Bullion V11192 +204 122 2 Almond V11173 +254 183 120 Buff Orange V11226 +251 108 7 Orange V11178 +250 166 140 Flamingo V11254 +250 166 140 Flamingo V11020 +250 87 3 Paprika V11078 +167 63 16 Old Dark Tex Orange V11021 +251 178 183 Pink Mist V11315 +240 44 45 Scarlet V11307 +215 42 41 Tuxedo Red V11037 +177 39 38 Red Berry V11039 +252 191 201 Pink V11121 +244 84 126 Begonia V11117 +225 7 71 Cerise V11354 +194 4 55 Wildfire V11184 +194 4 55 Wildfire V11081 +168 12 54 Atom Red V11281 +149 23 55 Cabernet V11381 +134 0 93 Dark Red V11188 +170 116 192 Iris V11032 + 93 3 123 Purple Shadow V11122 +102 19 109 Mulberry V11334 +102 19 109 Mulberry V11033 +180 145 210 Pale Purple V11311 + 70 35 95 Purple Accent V11312 +175 189 220 Lake Blue V11030 + 93 120 203 Jay Blue V11143 +103 87 189 Violet V11330 +103 87 189 Violet V11335 + 30 29 120 Royal V11166 + 52 40 117 Violet Blue V11366 + 44 38 92 Blue Ink V11242 + 44 38 92 Blue Ink V11343 + 21 32 61 Navy V11044 + 17 32 81 Light Navy V11243 +147 199 225 Pale Blue V11132 + 0 144 215 Baltic Blue V11176 + 0 144 215 Baltic Blue V11297 + 46 200 213 Indian Ocean Blue V11093 +134 223 210 Seafrost V11045 + 71 215 195 Aqua Pearl V11299 + 0 175 153 Bluestone V11380 + 0 141 131 Brite Jade V11298 + 0 152 135 Peppermint V11279 + 0 74 63 Dark Green V11304 + 0 80 66 Dark Green V11390 + 0 68 55 Evergreen V11397 + 0 201 147 Bluestone V11301 + 0 178 123 Peppermint V11247 + 3 74 49 Evergreen V11370 +179 131 96 Fawn V11057 +236 212 188 Ecru V11149 +132 73 74 Dark Brown V11358 +189 135 135 Light Pink V11141 + 78 32 58 Dark Maroon V11382 + 72 40 54 Plum V11386 + 72 40 54 Plum V11236 + 39 105 109 Deep Atlantic V11252 +141 176 174 Pale Blue V11227 + 79 110 94 Harbor Green V11392 + 36 59 46 Dark Army Green V11303 + 85 105 86 Water Lilly V11396 + 64 74 38 Hedge V11393 + 66 72 23 Green V11357 +140 145 79 Medium Green / Yellow V11156 +155 159 116 Arcadian Green V11306 +178 172 113 Silver Fern V11105 +213 207 163 Light Green / Yellow V11305 +240 237 228 Natural White V11071 +240 237 228 Natural White V11003 +245 242 227 Bright White V11002 +245 240 227 Bright White V11001 +249 231 214 Ivory V11082 +253 221 214 Rosewater V11013 +224 242 229 Billowing Sail V11073 +126 187 37 Medium Green V11169 + 28 39 48 Black V11043 + 28 39 48 Black V11000 + 54 52 58 Black V11244 + 91 91 89 Dark Grey V11131 + 91 91 89 Dark Grey V11318 +233 226 215 Palest Ivory V11086 +121 119 116 Charcoal V11240 +104 103 100 Twilight V11239 +223 217 206 White Sand V11085 +212 206 197 Pearl Gray V11087 +140 138 133 Silvery Gray V11040 +208 0 87 Dark Pink V11187 +209 25 86 Red V11186 +194 181 166 Platinum V11060 +181 168 153 String V11136 +243 66 45 Saffron V11146 +252 225 22 Canary V11223 +250 230 16 Daffodil V11064 diff --git a/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Wonderfil Polyester.gpl b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Wonderfil Polyester.gpl new file mode 100644 index 00000000..0430d4a1 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Wonderfil Polyester.gpl @@ -0,0 +1,174 @@ +GIMP Palette +Name: Ink/Stitch: Wonderfil Polyester +Columns: 4 +# RGB Value Color Name Number +255 215 221 Light Silky Pink 1007 +228 108 88 Salmon Pink 1012 +158 2 57 Dark Cherry 1017 +255 232 218 Light Flesh 1020 +254 89 184 Flesh 1021 +241 223 208 Barely Pink 1022 +231 204 188 Soft Demure 1023 +237 204 192 Demure 1025 +241 221 242 Satin Wine 1026 +255 188 221 Soft Mauve 1028 +255 177 218 Light Mauve 1029 +218 128 161 Medium Plum 1030 +203 0 69 Deep Passion 1031 +255 139 61 Medium Orange 1033 +239 110 24 Dark Orange 1034 +214 94 85 Rust Pink 1035 +182 1 86 Medium Fuschia 1038 +134 1 0 Dark Fuschia 1039 +247 121 189 Wild Pink 1051 +254 155 149 Curry Gold 1052 +245 136 38 Orange 1072 +255 84 0 Deep Orange 1074 +206 1 79 Wild Fuschia 1077 +129 29 66 Plush Velvet 1078 +237 189 232 Light Tulip 1081 +182 133 179 Dark Tulip 1083 +255 185 248 Bright Tulip 1084 +203 80 175 Deep Mauve 1085 +192 5 102 Dark Grenandine 1086 +222 79 140 Light Grenandine 1087 +193 41 41 Poppy Red 1088 +211 62 87 Coral Red 1089 +246 52 52 Satin Red 1091 +148 15 90 Burgundy 1094 +158 17 99 Deep Burgundy 1095 +138 43 117 Bright Mulberry 1096 +157 69 180 Mulberry 1097 +114 34 107 Dark Mulberry 1098 +101 30 65 Dark Plum 1099 +198 228 239 Ice Blue 2101 +165 18 212 Light Denim 2102 +163 208 239 Seashell Blue 2104 +139 192 219 Dark Seashell Blue 2106 +114 209 203 Lake Blue 2107 +124 200 235 Seashell Blue 2109 + 60 155 191 Dark Seashell Blue 2110 +102 104 188 Twilight Blue 2111 + 0 115 196 Royal Blue 2112 + 74 1 183 Dark Royal Blue 2114 + 36 67 113 Navy Blue 2117 + 26 47 79 Midnight Navy 2118 + 76 27 175 Bright Sky 2132 + 0 122 255 Bright Blue 2133 + 31 114 188 Dark Blue 2134 + 1 35 82 Bright Royal Blue 2155 + 20 201 207 Lilac Silk 2160 +212 178 234 Grape 2162 +204 170 214 Light Tulip 2164 +187 99 200 Amethyst 2165 +112 167 213 Blue Jazz 2166 + 0 171 34 French Blue 2168 + 3 139 217 Bright Blueberry 2170 + 2 142 159 Imperial Blue 2171 + 99 119 134 Dark Steel Blue 2172 + 0 122 136 Dark Imperial Blue 2175 + 10 0 136 Navy Blue 2177 + 0 131 222 Medium Royal Blue 2191 + 25 199 159 Butterfly Orange 3233 +211 165 3 Dark Gold 3238 +255 198 0 Sunset 3257 +213 139 59 Bright Gold 3259 +255 248 163 Light Lemon 3260 +248 238 98 Bright Lemon 3261 +255 232 80 Hawaiian Sunrise 3262 +247 200 56 Bright Pineapple 3265 +237 213 55 Sunburst 3266 +255 214 79 Warm Yellow 3267 +212 195 170 Silver Sand 3268 +219 200 165 Tan 3270 +220 190 156 Medium Tan 3272 +232 205 157 Dark Tan 3273 +234 212 151 Light Gold 3274 +211 177 105 Gold 3275 +250 200 0 Canary Yellow 3276 +243 166 1 Orange Mist 3278 +202 136 65 Sheer Ginger 3279 +213 158 122 Hazlenut 4284 +176 87 14 Light Copper Brown 4290 +181 103 11 Rich Spice 4308 +222 120 10 Copper 4309 +181 62 3 Bright Rust 4314 +214 195 173 Nude Gold 4321 +189 162 136 Iced Mocha 4323 +176 142 112 Brown Toast 4324 +169 136 114 Cinnamon 4325 +147 131 105 Sage Green 4326 +157 142 135 Smoke Grey 4327 +146 121 124 Lasting Cocoa 4328 +169 102 47 Coffee Shine 4330 +164 88 41 Toffee 4332 +166 63 7 Dark Copper Brown 4333 +183 59 73 Develish Pink 4334 +149 23 80 Wild Plum 4336 +149 77 23 Light Teddy Bear 4338 +105 61 28 Mocha 4339 +216 119 48 Golden Rust 4348 +177 119 51 Burnished Gold 4351 +191 91 22 Dark Rust 4352 +209 174 75 Brass 4360 +165 139 60 Olive 4368 +100 6 54 Evening Brandy 4375 +104 72 66 Teddy Bear Brown 4378 +230 221 203 Silk 5382 +211 208 156 Wheat Gold 5383 +190 178 150 Spun Gold 5384 +202 195 185 Grey Whisper 5387 +214 217 210 Pearl Grey 5389 +175 184 167 Steel Grey 5390 +167 184 181 Silver Cloud 5391 + 74 90 109 Silver Haze 5393 +101 97 123 Lilac Mist 5394 +106 120 134 Pewter 5395 +129 129 131 Polished Pewter 5396 + 62 76 94 Grey Pewter 5399 +127 119 114 Suede 5411 +177 169 177 Sterling 5421 +179 177 149 Gold Digger 5423 + 90 92 125 Blue Violet 5431 +216 212 198 Steel 5440 +217 220 222 Cinder Grey 5441 +154 148 135 Froster Silver 5452 +119 90 77 Chocolate Brown 5453 + 78 75 93 Midnight Grey 5458 +181 171 154 Oyster Beige 5464 +103 167 166 Magic Blue 5476 +206 239 118 California Lemon 6480 +194 200 104 Burnt Lime 6482 +165 230 95 California Lime 6483 +206 226 185 Mint Green 6485 +210 209 156 Oyster Shell 6486 +145 208 24 Bright Green 6487 + 0 166 93 Kelly Green 6489 +102 176 88 Lime Green 6492 + 7 196 189 Turquoise 6493 + 54 144 141 Exotic Green 6494 + 16 172 144 Bright Aqua 6495 +108 110 77 Leaf 6496 + 15 88 60 Dark Evergreen 6499 + 86 153 32 Medium Lime Green 6508 + 0 116 84 Forest Green 6514 + 8 119 123 Teal Blue 6516 + 47 181 179 Pacific Blue 6543 +108 134 54 Dark Palmetto Green 6558 +120 209 141 Ice Green 6573 +255 255 255 White 6580 + 0 0 0 Black 6581 +247 241 219 Frosty White 6582 +184 221 181 Soft Mint Green 6584 +203 214 174 Light Celery 6585 + 0 173 179 Bright Pacific Blue 6587 + 25 153 158 Dark Pacific Blue 6588 +124 166 109 Light Oak 6589 +118 187 134 Medium Mint Green 6590 +134 139 80 Medium Palmetto 6591 + 0 130 95 Green Dazzle 6593 + 20 129 69 Dark Mint Green 6594 +113 136 59 Swamp Green 6596 +210 220 222 Soft Steel Blue 6597 +119 174 168 Steel Blue 6598 + 88 154 135 Exotic Green 6599 diff --git a/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Wonderfil Rayon.gpl b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Wonderfil Rayon.gpl new file mode 100644 index 00000000..28e82005 --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/palettes/InkStitch Wonderfil Rayon.gpl @@ -0,0 +1,346 @@ +GIMP Palette +Name: Ink/Stitch: Wonderfil Rayon +Columns: 4 +# RGB Value Color Name Number +248 232 232 Light Pink 1101 +248 219 223 Soft Pink 1102 +253 160 171 Strawberry Cream 1103 +254 134 161 Pink Mist 1104 +238 103 136 Med Rose 1105 +220 65 97 Pansy Pink 1106 +218 144 146 Dusty Rose 1107 +184 87 94 Dark Rose 1108 +164 74 84 Bright Rose 1109 +148 56 67 Deep Rose 1110 +255 194 199 Soft Fuschia 1111 +211 142 161 Light Fuschia 1112 +151 251 189 Ice Pink 1113 +234 49 116 Hot Pink 1114 +218 80 132 Wild Pink 1115 +179 39 131 Deep Pink 1116 +159 7 96 Dark Fuschia 1117 +230 180 201 Soft Mauve 1118 +229 151 199 Light Mauve 1119 +197 106 147 Med Mauve 1120 +207 102 164 Deep Mauve 1121 +161 26 128 Deep Passion 1122 +128 1 88 Light Burgundy 1123 +110 0 69 Dark Burgundy 1124 +239 232 220 Light Peach 1125 +253 208 179 Opal Mist 1126 +250 159 141 Flesh Pink 1127 +219 94 100 Bashful Pink 1128 +184 89 64 Rust Pink 1129 +246 62 92 Watermelon 1130 +219 178 165 Soft Mocha 1131 +209 143 146 Med Mocha 1132 +197 118 121 Deep Mocha 1133 +255 204 176 Pink Snow 1134 +249 161 121 Sugar Plum 1135 +247 135 105 Charmed Peach 1136 +255 133 100 Light Tangerine 1137 +254 132 78 Soft Tangerine 1138 +255 122 57 Medium Tangerine 1139 +241 103 15 Dark Tangerine 1140 +251 68 12 Deep Tangerine 1141 +253 207 185 Light Coral 1142 +241 179 166 Soft Coral 1143 +155 129 129 Bright Coral 1144 +224 98 64 Dark Coral 1145 +197 37 16 Bright Red 1146 +194 17 42 Satin Red 1147 +192 2 60 Deep Red 1148 +110 20 55 Plush Velvet 1149 + 79 17 38 Evening Brandy 1150 +241 207 208 Silky Pink 1151 +240 169 184 Cotton Candy 1152 +250 187 178 Angora Rayon 1153 +249 121 128 Pink Currant 1154 +246 119 144 Carnation Pink 1155 +226 160 178 Soft Plum 1156 +198 108 130 Med Plum 1157 +108 2 64 Dark Plum 1158 +216 19 19 Foxy Red 1159 +212 7 26 Poppy Red 1160 +254 229 228 Crystal Pink 1161 +255 203 203 Pink Crystal 1162 +253 178 185 Rose Wine 1163 +254 119 126 Light Punch 1164 +213 83 83 Medium Punch 1165 +203 57 57 Dark Punch 1166 +168 16 29 Christmas Red 1167 +181 5 88 Wild Fuschia 1168 +210 28 25 Scarlet Red 1169 +198 23 40 Sangria 1170 +139 6 28 Divine Wine 1171 +213 99 123 Barely Rose 1172 +253 247 240 Pearl 1173 +252 230 216 Milky Way 1174 +247 179 146 Apricot 1175 +250 157 101 Light Orange 1176 +250 123 52 Medium Orange 1177 +236 64 8 Deep Orange 1178 +221 2 2 Dark Orange 1179 +216 0 107 Fuschia 1180 +236 149 163 Classic Wine 1181 +184 9 42 Calypso Red 1182 +194 82 102 Berry Red 1183 +193 8 43 Midnight Red 1184 +253 254 226 Cream Silk 2101 +254 239 178 Snow Pearl 2102 +255 204 124 Light Yellow 2103 +253 190 91 Medium Yellow 2104 +255 176 63 Golden Honey 2105 +255 154 56 Honeydew 2106 +255 140 56 Mango 2107 +255 121 41 Pumpkin 2108 +244 241 200 Vanilla 2109 +252 249 179 Light Lemon 2110 +252 248 164 Pineapple 2111 +252 238 94 Sunburst 2112 +255 227 129 Medium Lemon 2113 +248 202 78 Dark Lemon 2114 +246 186 64 Deep Lemon 2115 +247 234 74 Hawaiian Sunrise 2116 +255 218 44 Canary Yellow 2117 +255 196 38 Sunset 2118 +201 172 70 Light Gold 2119 +207 178 75 Medium Gold 2120 +202 146 37 Dark Gold 2121 +207 140 61 Burnished Gold 2122 +203 128 62 Dark Burnished Gold 2123 +176 149 54 Light Ginger 2124 +167 138 48 Medium Ginger 2125 +167 130 50 Dark Ginger 2126 +234 169 82 Light Copper 2127 +190 119 34 Copper 2128 +253 250 217 Pure Pearl 2129 +254 250 200 Soft Butter 2130 +252 240 159 Light Butter 2131 +255 224 101 Medium Butter 2132 +254 202 62 Bright Yellow 2133 +253 193 30 Deep Yellow 2134 +255 177 9 Dark Yellow 2135 +247 246 227 Peach and Cream 2136 +255 252 222 Antique Linen 2137 +252 233 205 Flesh 2138 +255 225 174 Sheer Sunlight 2139 +252 201 128 Medium Peach 2140 +245 161 54 Dark Peach 2141 +245 156 51 Orange Sorbet 2142 +238 248 250 Soft Blue 3101 +215 221 223 Light Blue 3102 +165 191 194 Medium Blue 3103 +167 203 229 Seashell Blue 3104 +132 165 202 Chambray 3105 +151 175 201 Light Denim 3106 + 78 95 138 Medium Denim 3107 +112 138 199 Paris Blue 3108 + 69 100 151 Indigo Blue 3109 +104 136 177 Blue Jazz 3110 + 45 70 124 Dark Denim 3111 +158 176 176 Soft Steel Blue 3112 +154 189 189 Snow Blue 3113 +118 136 124 Medium Steel Blue 3114 +103 120 136 Stirling Blue 3115 + 89 105 121 Dark Steel Blue 3116 + 73 99 94 Metal Blue 3117 +111 118 182 Light Royal Blue 3118 + 52 59 147 Medium Royal Blue 3119 + 52 30 126 Dark Royal Blue 3120 +136 120 191 Light Periwinkle 3121 + 94 93 125 Dark Periwinkle 3122 + 65 82 136 Royal Blue 3123 + 25 12 86 Navy Blue 3124 + 18 8 65 Midnight Navy 3125 +103 178 199 Soft Ocean Blue 3126 + 83 181 211 Light Ocean Blue 3127 + 38 149 196 Medium Ocean Blue 3128 + 1 110 166 Bright Ocean Blue 3129 +148 219 217 Light Frost 3130 +101 206 221 Medium Frost 3131 + 6 138 181 Aquamarine 3132 +115 156 161 Light Lake Blue 3133 + 82 146 164 Lake Blue 3134 + 36 96 128 Imperial Blue 3135 + 34 95 120 Dark Imperial Blue 3136 +241 246 240 Pale Blue 3137 +227 240 227 Light Sky Blue 3138 +202 239 226 Sky Blue 3139 +182 243 242 Light Pacific Blue 3140 + 93 207 219 Pacific Blue 3141 + 99 184 197 Dark Pacific Blue 3142 + 3 133 176 Bright Pacific Blue 3143 +224 231 232 Ice Blue 3144 +194 206 212 Medium Ice Blue 3145 +176 197 217 Dark Ice Blue 3146 +127 151 167 Slate Blue 3147 + 85 100 133 Medium Slate Blue 3148 + 78 102 139 Dark Slate Blue 3149 + 29 30 25 Midnight Blue 3150 +202 198 130 Light Pistachio 4101 +156 156 2 Medium Pistachio 4102 +143 137 7 Dark Pistachio 4103 +249 255 248 Pale Celery 4104 +238 252 226 Light Celery 4105 +212 240 190 Pale Oak Green 4106 +205 249 184 Light Oak Green 4107 +165 221 120 Pale Emerald 4108 + 55 193 48 Bright Emerald 4109 +112 207 60 Medium Emerald 4110 + 77 114 65 Pale Kelly Green 4111 + 59 171 94 Kelly Green 4112 + 55 89 28 Dark Kelly Green 4113 +179 187 147 Moss Green 4114 + 94 109 48 Dark Palmetto Green 4115 +137 148 67 Palmetto Green 4116 +106 112 48 Medium Palmetto Green 4117 + 97 91 45 Alligator Green 4118 + 81 90 29 Lilypad Green 4119 +204 197 83 Spring Green 4120 +150 137 53 Brass 4121 +134 131 46 Bronze 4122 +149 181 50 Bright Olive Green 4123 + 94 129 39 Medium Olive Green 4124 + 54 101 41 Dark Olive Green 4125 +182 218 164 Soft Mint Green 4126 +181 227 189 Light Mint Green 4127 +150 202 152 Medium Mint Green 4128 + 14 180 92 Bright Mint Green 4129 + 27 76 51 Dark Mint Green 4130 + 36 100 48 Soft Evergreen 4131 + 96 131 77 Medium Evergreen 4132 + 77 130 97 Evergreen 4133 + 31 60 38 Dark Evergreen 4134 +200 255 244 Light Aqua 4135 +167 226 217 Soft Aqua 4136 +109 212 196 Medium Aqua 4137 + 33 173 155 Aqua 4138 + 24 172 139 Dark Aqua 4139 + 6 137 120 Bright Aqua 4140 + 6 113 120 Turquoise 4141 +230 245 243 Misty Mint 4142 +199 225 222 Baby Blue 4143 +170 195 189 Exotic Green 4144 +196 216 116 Pale Meadow Green 4145 +140 167 62 Meadow Green 4146 +152 175 86 Bright Moss 4147 +134 134 48 Dark Moss 4148 +174 190 86 Pale Green Oak 4149 +195 220 130 Green Oak 4150 +163 204 72 Dark Green Oak 4151 +134 197 88 Bright Green Oak 4152 + 82 165 71 Medium Lime 4153 + 14 150 57 Lime Green 4154 + 78 115 61 Swamp Green 4155 + 47 89 42 Safari Green 4156 + 48 81 53 Dark Green 4157 + 53 88 62 Deep Green 4158 +253 246 240 Candleglow 5101 +255 230 241 Orchid 5102 +203 170 191 Satin Wine 5103 +210 185 219 Soft Tulip 5104 +223 189 236 Light Tulip 5105 +186 140 199 Medium Tulip 5106 +163 134 177 Dark Tulip 5107 +116 87 150 Bright Tulip 5108 +132 85 143 Mulberry 5109 +104 40 118 Bright Mulberry 5110 +126 81 116 Amethyst 5111 + 94 40 116 Dark Purple 5112 +222 217 247 Pale Grape 5113 +144 139 171 Light Grape 5114 +159 140 172 Grape 5115 + 85 134 121 Bright Grape 5116 + 79 38 61 Dark Amethyst 5117 +126 98 182 Light Mauve 5118 + 48 52 91 Dark Mauve 5119 +102 66 110 Bright Plum 5120 +224 210 200 Grey 6101 +232 235 238 Pearl Grey 6102 +202 199 212 Cinder Grey 6103 +195 205 193 Pebble Grey 6104 +170 170 158 Stone Grey 6105 +149 141 126 Smoke Grey 6106 +100 105 94 Charcoal 6107 +181 180 184 Pale Sterling Grey 6108 +116 114 127 Sterling Grey 6109 +161 157 150 Twilight Grey 6110 + 76 73 91 Dark Twilight Grey 6111 + 47 45 36 Midnight Metal 6112 + 22 25 42 Midnight Blue 6113 +244 237 209 Cream Wheat 6114 +209 202 163 Spun Gold 6115 +157 157 121 Grey Khaki 6116 +114 114 64 Earth 6117 +240 224 170 Tan 6118 +209 188 131 Medium Tan 6119 +161 143 66 Dark Tan 6120 + 79 82 28 Dark Khaki 6121 +248 247 240 Pure Diamond 6122 +249 229 210 Barely Pink 6123 +243 233 199 Sheer Ivory 6124 +234 211 191 Soft Demure 6125 +221 168 148 Demure 6126 +220 186 128 Butterscotch 6127 +117 86 37 Caramel 6128 +253 245 229 Frosty White 6129 +253 255 250 Iced Silver 6130 +255 248 243 White Silk 6131 +227 214 191 Siver Sand 6132 +241 203 154 Skin Light 6133 +194 180 150 Taupe 6134 +136 120 79 Sage Green 6135 +242 223 186 Sheer Beige 7101 +245 231 206 Nude Gold 7102 +213 192 173 Iced Mocha 7103 +220 181 196 Golden Sand 7104 +195 158 80 Brown Sugar 7105 +180 150 107 Brown Toast 7106 +127 100 68 Cinnamon 7107 +154 113 42 Cedar 7108 +143 98 33 Coffee 7109 +108 75 39 Mocha 7110 + 94 58 19 Toffee 7111 + 80 40 10 Blackberry 7112 +255 219 183 Peach Tulip 7113 +255 152 165 Butterfly Orange 7114 +224 145 97 Light Rust 7115 +202 118 43 Golden Rust 7116 +162 83 30 Dark Rust 7117 +154 62 6 Bright Rust 7118 +246 222 222 Pale Salmon 7119 +186 147 134 Salmon 7120 +154 103 100 Dark Salmon 7121 +113 61 19 Light Copper Brown 7122 +103 40 15 Dark Copper Brown 7123 + 48 34 28 Coffee Bean 7124 + 24 17 14 Espresso 7125 +248 255 249 Silver Tinsel 7126 +235 250 233 Silver Grey 7127 +214 228 213 Granite 7128 +162 178 161 Steel Glaze 7129 +134 142 134 Dark Silver 7130 + 93 91 65 Parsley 7131 + 72 76 73 Grey Suede 7132 +149 140 149 Natural Plum 7133 + 90 76 82 Natural Burgundy 7134 + 48 41 77 Sapphire 7135 + 33 44 71 Blue Velvet 7136 +221 191 155 Soft Beige 7137 +199 152 91 Medium Beige 7138 +237 192 111 Golden Honey 7139 +208 161 78 Medium Honey 7140 +128 123 129 Light Blue Grey 7141 +103 118 133 Medium Blue Grey 7142 + 8 29 56 Dark Blue Grey 7143 + 99 118 144 Silver Blue 7144 + 29 97 189 Smurf Blue 7145 + 21 47 182 Dark Smurf Blue 7146 + 0 49 86 Dark Blue Aqua 7147 + 17 29 66 Midnight Navy 7148 +255 255 255 White 8101 +242 235 222 Soft White 8102 +246 241 230 Off White 8103 +251 247 241 Antique White 8104 + 0 0 0 Black 9000 diff --git a/extensions/fablabchemnitz/inkstitch/symbols/inkstitch.svg b/extensions/fablabchemnitz/inkstitch/symbols/inkstitch.svg new file mode 100644 index 00000000..4a67ae1c --- /dev/null +++ b/extensions/fablabchemnitz/inkstitch/symbols/inkstitch.svg @@ -0,0 +1,418 @@ + + + + + + + + Ink/Stitch Commands + + + Fill stitch ending point + + + + + Trim the thread after sewing this object. + + + + + Fill stitch starting point + + + + + Stop the machine after sewing this object (for applique, etc) + + + + + + Ignore object when generating stitch plan + + + + + + Ignore entire layer when generating stitch plan + + + + + + + + + + + Jump destination for Stop commands (a.k.a. "Frame Out position"). + + + + + + Origin for exported embroidery files + + + + + + + + Satin Column cut point + + + + + + Satin column starting point + + + + + + Satin column ending point + + + + + + + + + image/svg+xml + + + + + + + Create symbols carefully! They must be centered about the origin before being converted to a symbol. + + + + + + + + + + + + diff --git a/extensions/fablabchemnitz/insert_paper_template/insert_paper_template.inx b/extensions/fablabchemnitz/insert_paper_template/insert_paper_template.inx new file mode 100644 index 00000000..70d37888 --- /dev/null +++ b/extensions/fablabchemnitz/insert_paper_template/insert_paper_template.inx @@ -0,0 +1,30 @@ + + + Insert Paper Template + fablabchemnitz.de.insert_paper_template + + + + + + + + + + + + + + true + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/insert_paper_template/insert_paper_template.py b/extensions/fablabchemnitz/insert_paper_template/insert_paper_template.py new file mode 100644 index 00000000..b3481459 --- /dev/null +++ b/extensions/fablabchemnitz/insert_paper_template/insert_paper_template.py @@ -0,0 +1,96 @@ +#!/usr/bin/env python3 + + +# Copyright 2016 Luke Phillips (lukerazor@hotmail.com) +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +#along with this program; if not, write to the Free Software +#Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +# Extension dirs +# linux:~/.config/inkscape/extensions +# windows: D:\Program Files\Inkscape\share\extensions +from lxml import etree +import inkex + +inkex.NSS[u'cs'] = u'http://www.razorfoss.org/tuckboxextension/' + +class InsertPaperTemplate(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument('-p', '--papertype') + pars.add_argument('-s', '--show_type') + + ### colour ### + self.StrokeWidthMM = 0.25 + self.FontSize = "11px" + + def effect(self): + self.Group = etree.SubElement(self.svg.get_current_layer(), inkex.addNS('g','svg'), {} ) + + papertypes = {} + papertypes["A5"] = (148, 210, "#ffeeaa") # yellow + papertypes["A4"] = (210, 297, "#ffccaa") # orange + papertypes["A3"] = (297, 420, "#afdde9") # blue + papertypes["A2"] = (420, 594, "#ccaaff") # purple + papertypes["A1"] = (594, 841, "#afe9c6") # green + papertypes["A0"] = (841, 1189, "#ffd5d5") # red + papertypes["POKER"] = (63.5, 88, "#ffffff") # white + papertypes["BRIDGE"] = (56, 88, "#ffffff") # white + papertypes["MINI_US"] = (41, 63, "#ffffff") # white + papertypes["MINI_EU"] = (44, 68, "#ffffff") # white + papertypes["TAROT"] = (70, 120, "#ffffff") # white + + + if self.options.papertype in papertypes: + self.CreateTemplate(self.options.papertype, *(papertypes[self.options.papertype])) + else: + raise Exception("Paper type '{0}' is undefined".format(self.options.papertype)) + + def CreateTemplate(self, label, width, height, colour): + x = 0 + y = 0 + self._CreateRectangleInMillimetres(width-self.StrokeWidthMM, height-self.StrokeWidthMM, x, y, colour) + if self.options.show_type == "true": + self._CreateText(label, x + width/2 , y + height/2) + + def _CreateText(self, labelText, x, y): + style = {'stroke': '#000000', + 'stroke-width': self.MMtoUU(self.StrokeWidthMM), + 'fill' : '#000000', + 'font-size' : self.FontSize, + 'text-align' : 'center', + 'text-anchor' : 'middle' + } + + attribs = {'style': str(inkex.Style(style)), 'x': self.MMtoUU(x), 'y': self.MMtoUU(y)} + + text = etree.Element(inkex.addNS('text','svg'), attribs) + text.text = labelText + + self.Group.append(text) + + def _CreateRectangleInMillimetres(self, width, height, x, y, color): + style = {'stroke': '#000000', 'stroke-width': self.MMtoUU(self.StrokeWidthMM), 'fill' : color} + attribs = {'style': str(inkex.Style(style)), 'height': self.MMtoUU(height), 'width': self.MMtoUU(width), 'x': self.MMtoUU(x), 'y': self.MMtoUU(y)} + etree.SubElement(self.Group, inkex.addNS('rect','svg'), attribs ) + + def MMtoUU(self, mmval): + if hasattr(self.svg, "unittouu"): + return str(self.svg.unittouu("{0}mm".format(mmval))) + else: + MM_TO_PIXELS = 1 + + return str(MM_TO_PIXELS * mmval) + +if __name__ == '__main__': + InsertPaperTemplate().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/inset_alignment/inset_alignment.inx b/extensions/fablabchemnitz/inset_alignment/inset_alignment.inx new file mode 100644 index 00000000..592572ff --- /dev/null +++ b/extensions/fablabchemnitz/inset_alignment/inset_alignment.inx @@ -0,0 +1,33 @@ + + + Inset Alignment + fablabchemnitz.de.inset_alignment + + + + + + + + + + + + + + + + 10 + 10 + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/inset_alignment/inset_alignment.py b/extensions/fablabchemnitz/inset_alignment/inset_alignment.py new file mode 100644 index 00000000..a3532c77 --- /dev/null +++ b/extensions/fablabchemnitz/inset_alignment/inset_alignment.py @@ -0,0 +1,91 @@ +#!/usr/bin/env python3 + + +# Copyright 2016 Luke Phillips (lukerazor@hotmail.com) +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +#along with this program; if not, write to the Free Software +#Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +# Extension dirs +# linux:~/.config/inkscape/extensions +# windows: D:\Program Files\Inkscape\share\extensions + +import inkex + +def BoundingBoxArea(node): + bb = node.bounding_box() + return bb.width * bb.height + +class InsetAlignment(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument('-a', '--anchor_node') + pars.add_argument('-v', '--relative_to_v') + pars.add_argument('-t', '--relative_to_h') + pars.add_argument('-x', '--inset_x', type = float) + pars.add_argument('-y', '--inset_y', type = float) + + def GetPaths(self): + paths = [] + + def effect(self): + # make sure we have at least 2 nodes selected + if len(self.options.ids) < 2: + inkex.utils.debug("You must select at least 2 nodes") + return + + # pick the achor node + anchor_nodeId = self.options.ids[0] # first selected + if self.options.anchor_node == "LAST_SEL": # last selected + #inkex.utils.debug("last sel") + #inkex.utils.debug(self.options.ids) + anchor_nodeId = self.options.ids[-1] + elif self.options.anchor_node == "LARGEST": # largest + anchor_nodeId = None + largestArea = 0 + for nodeId, node in self.svg.selected.items(): + nodeArea = BoundingBoxArea(node) + if nodeArea > largestArea: + anchor_nodeId = nodeId + largestArea = nodeArea + + anchorBBox = self.svg.selected[anchor_nodeId].bounding_box() + + # calculate the offsets in mm + insetH = self.svg.unittouu("{0}mm".format(self.options.inset_x)) + insetV = self.svg.unittouu("{0}mm".format(self.options.inset_y)) + + otherNodes = [n for i, n in self.svg.selected.items() if i != anchor_nodeId] + # for every other Node + for node in otherNodes: + bbox = node.bounding_box() + + # sort out vertical offset + deltaV = (anchorBBox.top - bbox.top) + insetV # ALIGN TOP + if self.options.relative_to_v in "BOTTOM": + deltaV = (anchorBBox.bottom - bbox.bottom) - insetV # ALIGN BOTTOM + if self.options.relative_to_v == "CENTRE": + deltaV = (anchorBBox.top + anchorBBox.height/2 - bbox.height/2) - bbox.top # ALIGN CENTRE + + # sort out the horizontal offset + deltaH = (anchorBBox.left - bbox.left) + insetH # ALIGN LEFT + if self.options.relative_to_h == "RIGHT": + deltaH = (anchorBBox.right - bbox.right) - insetH # ALIGN RIGHT + if self.options.relative_to_h == "MIDDLE": + deltaH = (anchorBBox.left + anchorBBox.width/2 - bbox.width/2) - bbox.left # ALIGN MIDDLE + + tform = inkex.Transform("translate({0}, {1})".format(deltaH, deltaV)) + node.transform = tform * node.transform + +if __name__ == '__main__': + InsetAlignment().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/inventory_sticker/inventory_sticker.inx b/extensions/fablabchemnitz/inventory_sticker/inventory_sticker.inx new file mode 100644 index 00000000..08688f9a --- /dev/null +++ b/extensions/fablabchemnitz/inventory_sticker/inventory_sticker.inx @@ -0,0 +1,60 @@ + + + Inventory Sticker + fablabchemnitz.de.inventory_sticker + + + + https://the.domain.de/items.csv + User + Password + + qwa.es + Stadtfabrikanten e.V. + + 1 + /home/ + false + true + false + 0 + 04f9:2044 + false + + + + + + + + + + + + + + + + + + + + + + + + + + ../000_about_fablabchemnitz.svg + + + + all + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/inventory_sticker/inventory_sticker.py b/extensions/fablabchemnitz/inventory_sticker/inventory_sticker.py new file mode 100644 index 00000000..6e7068a3 --- /dev/null +++ b/extensions/fablabchemnitz/inventory_sticker/inventory_sticker.py @@ -0,0 +1,655 @@ +#!/usr/bin/env python3 +# +# An extension to generate SVG/PNG labels (stickers) for use with our item inventory system. +# It pulls a .csv file from a server URL (protected by basic auth) and exports and prints the labels to a Brother QL-720NW label printer +# Documentation: https://wiki.fablabchemnitz.de/display/TEED/Werkstattorientierung+im+FabLab+-+Digtales+Inventar +# +# Made by FabLab Chemnitz / Stadtfabrikanten e.V. - Developer: Mario Voigt (year 2021) +# +# This extension is based on the "original" barcode extension included in default InkScape Extension Set, which is licensed by the following: +# +# Copyright (C) 2009 John Beard john.j.beard@gmail.com +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# + +import csv +import os +import shutil +import urllib.request +from lxml import etree +import inkex +from inkex import Rectangle +from inkex.command import inkscape +import re +import subprocess +from subprocess import Popen, PIPE + +INVALID_BIT = 2 + +# CODEWORD STREAM GENERATION ========================================= +# take the text input and return the codewords, +# including the Reed-Solomon error-correcting codes. +# ===================================================================== + +def get_codewords(text, nd, nc, inter, size144): + # convert the data to the codewords + data = list(encode_to_ascii(text)) + + if not size144: # render a "normal" datamatrix + data_blocks = partition_data(data, nd * inter) # partition into data blocks of length nd*inter -> inter Reed-Solomon block + data_blocks = interleave(data_blocks, inter) # interleave consecutive inter blocks if required + data_blocks = reed_solomon(data_blocks, nd, nc) # generate and append the Reed-Solomon codewords + data_blocks = combine_interleaved(data_blocks, inter, nd, nc, False) # concatenate Reed-Solomon blocks bound for the same datamatrix + return data_blocks + + +# Takes a codeword stream and splits up into "inter" blocks. +# eg interleave( [1,2,3,4,5,6], 2 ) -> [1,3,5], [2,4,6] +def interleave(blocks, inter): + if inter == 1: # if we don"t have to interleave, just return the blocks + return blocks + else: + result = [] + for block in blocks: # for each codeword block in the stream + block_length = int(len(block) / inter) # length of each interleaved block + inter_blocks = [[0] * block_length for i in range(inter)] # the interleaved blocks + + for i in range(block_length): # for each element in the interleaved blocks + for j in range(inter): # for each interleaved block + inter_blocks[j][i] = block[i * inter + j] + + result.extend(inter_blocks) # add the interleaved blocks to the output + + return result + +# Combine interleaved blocks into the groups for the same datamatrix +# +# e.g combine_interleaved( [[d1, d3, d5, e1, e3, e5], [d2, d4, d6, e2, e4, e6]], 2, 3, 3 ) +# --> [[d1, d2, d3, d4, d5, d6, e1, e2, e3, e4, e5, e6]] +def combine_interleaved(blocks, inter, nd, nc, size144): + if inter == 1: # the blocks aren"t interleaved + return blocks + else: + result = [] + for i in range(len(blocks) // inter): # for each group of "inter" blocks -> one full datamatrix + data_codewords = [] # interleaved data blocks + + if size144: + nd_range = 1558 # 1558 = 156*8 + 155*2 + nc_range = 620 # 620 = 62*8 + 62*2 + else: + nd_range = nd * inter + nc_range = nc * inter + + for j in range(nd_range): # for each codeword in the final list + data_codewords.append(blocks[i * inter + j % inter][j // inter]) + + for j in range(nc_range): # for each block, add the ecc codewords + data_codewords.append(blocks[i * inter + j % inter][nd + j // inter]) + + result.append(data_codewords) + return result + +def encode_to_ascii(text): + """Encode this text into chunks, ascii or digits""" + i = 0 + while i < len(text): + # check for double digits, if the next char is also a digit + if text[i].isdigit() and (i < len(text) - 1) and text[i + 1].isdigit(): + yield int(text[i] + text[i + 1]) + 130 + i += 2 # move on 2 characters + else: # encode as a normal ascii, + yield ord(text[i]) + 1 # codeword is ASCII value + 1 (ISO 16022:2006 5.2.3) + i += 1 # next character + +# partition data into blocks of the appropriate size to suit the +# Reed-Solomon block being used. +# e.g. partition_data([1,2,3,4,5], 3) -> [[1,2,3],[4,5,PAD]] +def partition_data(data, rs_data): + PAD_VAL = 129 # PAD codeword (ISO 16022:2006 5.2.3) + data_blocks = [] + i = 0 + while i < len(data): + if len(data) >= i + rs_data: # we have a whole block in our data + data_blocks.append(data[i:i + rs_data]) + i = i + rs_data + else: # pad out with the pad codeword + data_block = data[i:len(data)] # add any remaining data + pad_pos = len(data) + padded = False + while len(data_block) < rs_data: # and then pad with randomised pad codewords + if not padded: + data_block.append(PAD_VAL) # add a normal pad codeword + padded = True + else: + data_block.append(randomise_pad_253(PAD_VAL, pad_pos)) + pad_pos += 1 + data_blocks.append(data_block) + break + + return data_blocks + + +# Pad character randomisation, to prevent regular patterns appearing +# in the data matrix +def randomise_pad_253(pad_value, pad_position): + pseudo_random_number = ((149 * pad_position) % 253) + 1 + randomised = pad_value + pseudo_random_number + if randomised <= 254: + return randomised + else: + return randomised - 254 + +# REED-SOLOMON ENCODING ROUTINES ===================================== + +# "prod(x,y,log,alog,gf)" returns the product "x" times "y" +def prod(x, y, log, alog, gf): + if x == 0 or y == 0: + return 0 + else: + result = alog[(log[x] + log[y]) % (gf - 1)] + return result + +# generate the log & antilog lists: +def gen_log_alog(gf, pp): + log = [0] * gf + alog = [0] * gf + + log[0] = 1 - gf + alog[0] = 1 + + for i in range(1, gf): + alog[i] = alog[i - 1] * 2 + + if alog[i] >= gf: + alog[i] = alog[i] ^ pp + + log[alog[i]] = i + + return log, alog + + +# generate the generator polynomial coefficients: +def gen_poly_coeffs(nc, log, alog, gf): + c = [0] * (nc + 1) + c[0] = 1 + + for i in range(1, nc + 1): + c[i] = c[i - 1] + + j = i - 1 + while j >= 1: + c[j] = c[j - 1] ^ prod(c[j], alog[i], log, alog, gf) + j -= 1 + + c[0] = prod(c[0], alog[i], log, alog, gf) + + return c + + +# "ReedSolomon(wd,nd,nc)" takes "nd" data codeword values in wd[] +# and adds on "nc" check codewords, all within GF(gf) where "gf" is a +# power of 2 and "pp" is the value of its prime modulus polynomial */ +def reed_solomon(data, nd, nc): + # parameters of the polynomial arithmetic + gf = 256 # operating on 8-bit codewords -> Galois field = 2^8 = 256 + pp = 301 # prime modulus polynomial for ECC-200 is 0b100101101 = 301 (ISO 16022:2006 5.7.1) + + log, alog = gen_log_alog(gf, pp) + c = gen_poly_coeffs(nc, log, alog, gf) + + for block in data: # for each block of data codewords + + block.extend([0] * (nc + 1)) # extend to make space for the error codewords + + # generate "nc" checkwords in the list block + for i in range(0, nd): + k = block[nd] ^ block[i] + + for j in range(0, nc): + block[nd + j] = block[nd + j + 1] ^ prod(k, c[nc - j - 1], log, alog, gf) + + block.pop() + + return data + + +# MODULE PLACEMENT ROUTINES=========================================== +# These routines take a steam of codewords, and place them into the +# DataMatrix in accordance with Annex F of BS ISO/IEC 16022:2006 + +def bit(byte, bit_ch): + """bit() returns the bit"th bit of the byte""" + # the MSB is bit 1, LSB is bit 8 + return (byte >> (8 - bit_ch)) % 2 + +def module(array, nrow, ncol, row, col, bit_ch): + """place a given bit with appropriate wrapping within array""" + if row < 0: + row = row + nrow + col = col + 4 - ((nrow + 4) % 8) + + if col < 0: + col = col + ncol + row = row + 4 - ((ncol + 4) % 8) + + array[row][col] = bit_ch + +def place_square(case, array, nrow, ncol, row, col, char): + """Populate corner cases (0-3) and utah case (-1)""" + for i in range(8): + x, y = [ + [(row - 1, 0), (row - 1, 1), (row - 1, 2), (0, col - 2), + (0, col - 1), (1, col - 1), (2, col - 1), (3, col - 1)], + [(row - 3, 0), (row - 2, 0), (row - 1, 0), (0, col - 4), + (0, col - 3), (0, col - 2), (0, col - 1), (1, col - 1)], + [(row - 3, 0), (row - 2, 0), (row - 1, 0), (0, col - 2), + (0, col - 1), (1, col - 1), (2, col - 1), (3, col - 1)], + [(row - 1, 0), (row - 1, col - 1), (0, col - 3), (0, col - 2), + (0, col - 1), (1, col - 3), (1, col - 2), (1, col - 1)], + + # "utah" places the 8 bits of a utah-shaped symbol character in ECC200 + [(row - 2, col -2), (row - 2, col -1), (row - 1, col - 2), (row - 1, col - 1), + (row - 1, col), (row, col - 2), (row, col - 1), (row, col)], + ][case][i] + module(array, nrow, ncol, x, y, bit(char, i + 1)) + return 1 + +def place_bits(data, nrow, ncol): + """fill an nrow x ncol array with the bits from the codewords in data.""" + # initialise and fill with -1"s (invalid value) + array = [[INVALID_BIT] * ncol for i in range(nrow)] + # Starting in the correct location for character #1, bit 8,... + char = 0 + row = 4 + col = 0 + while True: + + # first check for one of the special corner cases, then... + if (row == nrow) and (col == 0): + char += place_square(0, array, nrow, ncol, nrow, ncol, data[char]) + elif (row == nrow - 2) and (col == 0) and (ncol % 4): + char += place_square(1, array, nrow, ncol, nrow, ncol, data[char]) + elif (row == nrow - 2) and (col == 0) and (ncol % 8 == 4): + char += place_square(2, array, nrow, ncol, nrow, ncol, data[char]) + elif (row == nrow + 4) and (col == 2) and ((ncol % 8) == 0): + char += place_square(3, array, nrow, ncol, nrow, ncol, data[char]) + + # sweep upward diagonally, inserting successive characters,... + while (row >= 0) and (col < ncol): + if (row < nrow) and (col >= 0) and (array[row][col] == INVALID_BIT): + char += place_square(-1, array, nrow, ncol, row, col, data[char]) + row -= 2 + col += 2 + + row += 1 + col += 3 + + # & then sweep downward diagonally, inserting successive characters,... + while (row < nrow) and (col >= 0): + if (row >= 0) and (col < ncol) and (array[row][col] == INVALID_BIT): + char += place_square(-1, array, nrow, ncol, row, col, data[char]) + row += 2 + col -= 2 + + row += 3 + col += 1 + + # ... until the entire array is scanned + if not ((row < nrow) or (col < ncol)): + break + + # Lastly, if the lower righthand corner is untouched, fill in fixed pattern */ + if array[nrow - 1][ncol - 1] == INVALID_BIT: + array[nrow - 1][ncol - 2] = 0 + array[nrow - 1][ncol - 1] = 1 + array[nrow - 2][ncol - 1] = 0 + array[nrow - 2][ncol - 2] = 1 + + return array # return the array of 1"s and 0"s + +def add_finder_pattern(array, data_nrow, data_ncol, reg_row, reg_col): + # get the total size of the datamatrix + nrow = (data_nrow + 2) * reg_row + ncol = (data_ncol + 2) * reg_col + + datamatrix = [[0] * ncol for i in range(nrow)] # initialise and fill with 0"s + + for i in range(reg_col): # for each column of data regions + for j in range(nrow): + datamatrix[j][i * (data_ncol + 2)] = 1 # vertical black bar on left + datamatrix[j][i * (data_ncol + 2) + data_ncol + 1] = j % 2 # alternating blocks + + for i in range(reg_row): # for each row of data regions + for j in range(ncol): + datamatrix[i * (data_nrow + 2) + data_nrow + 1][j] = 1 # horizontal black bar at bottom + datamatrix[i * (data_nrow + 2)][j] = (j + 1) % 2 # alternating blocks + + for i in range(data_nrow * reg_row): + for j in range(data_ncol * reg_col): + # offset by 1, plus two for every addition block + dest_col = j + 1 + 2 * (j // data_ncol) + dest_row = i + 1 + 2 * (i // data_nrow) + + datamatrix[dest_row][dest_col] = array[i][j] # transfer from the plain bit array + + return datamatrix + +def get_valid_filename(s): + s = str(s).strip().replace(" ", "_") + return re.sub(r"(?u)[^-\w.]", "", s) + +def splitAt(string, length): + return ' '.join(string[i:i+length] for i in range(0,len(string),length)) + +class InventorySticker(inkex.Effect): + + def add_arguments(self, pars): + pars.add_argument("--tab") + pars.add_argument("--server_address", default="https://the.domain.de/items.csv") + pars.add_argument("--htuser", default="user") + pars.add_argument("--htpassword", default="password") + pars.add_argument("--sticker_ids", default="*") + pars.add_argument("--target_url", default="qwa.es") + pars.add_argument("--target_owner", default="Stadtfabrikanten e.V.") + pars.add_argument("--export_dir", default="/home/") + pars.add_argument("--flat_export", type=inkex.Boolean, default=False) + pars.add_argument("--preview", type=inkex.Boolean, default=False) + pars.add_argument("--export_svg", type=inkex.Boolean, default=True) + pars.add_argument("--export_png", type=inkex.Boolean, default=False) + pars.add_argument("--print_png", type=int, default=0) + pars.add_argument("--print_device", default="04f9:2044") + + def effect(self): + # Adjust the document view for the desired sticker size + root = self.svg.getElement("//svg:svg") + + subline_fontsize = 40 #px; one line of bottom text (id and owner) creates a box of that height + + #our DataMatrix has size 16x16, each cube is sized by 16x16px -> total size is 256x256px. We use 4px padding for all directions + DataMatrix_xy = 16 + DataMatrix_height = 16 * DataMatrix_xy + DataMatrix_width = DataMatrix_height + sticker_padding = 4 + sticker_height = DataMatrix_height + subline_fontsize + 3 * sticker_padding + sticker_width = 696 + + #configure font sizes and box heights to define how large the font size may be at maximum (to omit overflow) + objectNameMaxHeight = sticker_height - 2 * subline_fontsize - 4 * sticker_padding + objectNameMaxLines = 5 + objectNameFontSize = objectNameMaxHeight / objectNameMaxLines #px; generate main font size from lines and box size + + root.set("width", str(sticker_width) + "px") + root.set("height", str(sticker_height) + "px") + root.set("viewBox", "%f %f %f %f" % (0, 0, sticker_width, sticker_height)) + + #clean the document (make it blank) to avoid printing duplicated things + ct = 0 + for node in self.document.xpath('//*', namespaces=inkex.NSS): + ct = ct + 1 + if ct > 3: #we keep svg:svg, sodipodi:namedview and svg:defs which defines the default canvas without any content inside + #inkex.errormsg(str(node)) + try: + root.remove(node) + except Exception as e: + pass + + #set the document units + self.document.getroot().find(inkex.addNS("namedview", "sodipodi")).set("inkscape:document-units", "px") + + # Download the recent inventory CSV file and parse line by line to create an inventory sticker + password_mgr = urllib.request.HTTPPasswordMgrWithDefaultRealm() + password_mgr.add_password(None, self.options.server_address, self.options.htuser, self.options.htpassword) + handler = urllib.request.HTTPBasicAuthHandler(password_mgr) + opener = urllib.request.build_opener(handler) + + try: + inventoryData = opener.open(self.options.server_address).read().decode("utf-8") + urllib.request.install_opener(opener) + + inventoryCSVParent = os.path.join(self.options.export_dir, "InventorySticker") + inventoryCSV = os.path.join(inventoryCSVParent, "inventory.csv") + + # To avoid messing with old stickers we remove the directory on Client before doing something new + shutil.rmtree(inventoryCSVParent, ignore_errors=True) #remove the output directory before doing new job + + # we are going to write the imported Server CSV file temporarily. Otherwise CSV reader seems to mess with the file if passed directly + if not os.path.exists(inventoryCSVParent): + os.mkdir(inventoryCSVParent) + with open(inventoryCSV, 'w', encoding="utf-8") as f: + f.write(inventoryData) + f.close() + + #parse sticker Ids from user input + if self.options.sticker_ids != "*": + sticker_ids = self.options.sticker_ids.split(",") + else: + sticker_ids = None + + with open(inventoryCSV, 'r', encoding="utf-8") as csv_file: + csv_reader = csv.reader(csv_file, delimiter=",") + + totalOutputs = 0 + for row in csv_reader: + internal_id = row[0] + doc_title = row[1] + sticker_id = row[2] + level = row[3] + zone = row[4] + + if sticker_ids is None or sticker_id in sticker_ids: + totalOutputs += 1 + #create new sub directories for each non-existent FabLab zone (if flat export is disabled) + if self.options.flat_export == False: + if not zone: + zoneDir = os.path.join(inventoryCSVParent, get_valid_filename("Keinem Bereich zugeordnet")) + else: + zoneDir = os.path.join(inventoryCSVParent, get_valid_filename(zone)) #remove invalid charaters from zone + if not os.path.exists(zoneDir): + os.mkdir(zoneDir) + else: + zoneDir = inventoryCSVParent #use top directory + + #Generate the recent sticker content + stickerGroup = self.document.getroot().add(inkex.Group(id="InventorySticker_Id" + sticker_id)) #make a new group at root level + DataMatrixStyle = inkex.Style({"stroke": "none", "stroke-width": "1", "fill": "#000000"}) + DataMatrixAttribs = {"style": str(DataMatrixStyle), "height": str(DataMatrix_xy) + "px", "width": str(DataMatrix_xy) + "px"} + + # 1 - create DataMatrix (create a 2d list corresponding to the 1"s and 0s of the DataMatrix) + encoded = self.encode(self.options.target_url + "/" + sticker_id) + DataMatrixGroup = stickerGroup.add(inkex.Group(id="DataMatrix_Id" + sticker_id)) #make a new group at root level + for x, y in self.render_data_matrix(encoded, DataMatrix_xy): + DataMatrixAttribs.update({"x": str(x + sticker_padding), "y": str(y + sticker_padding)}) + etree.SubElement(DataMatrixGroup, inkex.addNS("rect","svg"), DataMatrixAttribs) + + inline_size = sticker_width - DataMatrix_width - 3 * sticker_padding #remaining width for objects next to the DataMatrix + x_pos = DataMatrix_width + 2 * sticker_padding + + # 2 - Add Object Name Text + objectName = etree.SubElement(stickerGroup, + inkex.addNS("text", "svg"), + { + "font-size": str(objectNameFontSize) + "px", + "x": str(x_pos) + "px", + #"xml:space": "preserve", #we cannot add this here because InkScape throws an error + #"y": "4px", #if set it does not correctly apply + "text-align" : "left", + "text-anchor": "left", + "vertical-align" : "bottom", + #style: inline-size required for text wrapping inside box; letter spacing is required to remove the additional whitespaces. The letter spacing depends to the selected font family (Miso) + "style": str(inkex.Style({"fill": "#000000", "inline-size": str(inline_size) + "px", "stroke": "none", "font-family": "Miso", "font-weight": "bold", "letter-spacing": "-3.66px"})) + } + ) + objectName.set("id", "objectName_Id" + sticker_id) + objectName.set("xml:space", "preserve") #so we add it here instead .. if multiple whitespaces in text are coming after each other just render them (preserve!) + objectNameTextSpan = etree.SubElement(objectName, inkex.addNS("tspan", "svg"), {}) + objectNameTextSpan.text = splitAt(doc_title, 1) #add 1 whitespace after each chacter. So we can simulate a in-word line break (break by char instead by word) + + # 3 - Add Object Id Text - use the same position but revert text anchors/align + objectId = etree.SubElement(stickerGroup, + inkex.addNS("text", "svg"), + { + "font-size": str(subline_fontsize) + "px", + "x": str(sticker_padding) + "px", + "transform": "translate(0," + str(sticker_height - subline_fontsize) + ")", + "text-align" : "left", + "text-anchor": "left", + "vertical-align" : "bottom", + "style": str(inkex.Style({"fill": "#000000", "inline-size":str(inline_size) + "px", "stroke": "none", "font-family": "Miso", "font-weight": "bold"})) #inline-size required for text wrapping + } + ) + objectId.set("id", "objectId_Id" + sticker_id) + objectIdTextSpan = etree.SubElement(objectId, inkex.addNS("tspan", "svg"), {}) + objectIdTextSpan.text = "Thing #" + sticker_id + + # 4 - Add Owner Text + owner = etree.SubElement(stickerGroup, + inkex.addNS("text", "svg"), + { + "font-size": str(subline_fontsize) + "px", + "x": str(x_pos) + "px", + "transform": "translate(0," + str(sticker_height - subline_fontsize) + ")", + "text-align" : "right", + "text-anchor": "right", + "vertical-align" : "bottom", + "style": str(inkex.Style({"fill": "#000000", "inline-size":str(inline_size) + "px", "stroke": "none", "font-family": "Miso", "font-weight": "300"})) #inline-size required for text wrapping + } + ) + owner.set("id", "owner_Id" + sticker_id) + ownerTextSpan = etree.SubElement(owner, inkex.addNS("tspan", "svg"), {}) + ownerTextSpan.text = self.options.target_owner + + # 5 - Add Level Text + levelText = etree.SubElement(stickerGroup, + inkex.addNS("text", "svg"), + { + "font-size": str(subline_fontsize) + "px", + "x": str(x_pos) + "px", + "transform": "translate(0," + str(sticker_height - subline_fontsize - subline_fontsize) + ")", + "text-align" : "right", + "text-anchor": "right", + "vertical-align" : "bottom", + "style": str(inkex.Style({"fill": "#000000", "inline-size":str(inline_size) + "px", "stroke": "none", "font-family": "Miso", "font-weight": "bold"})) #inline-size required for text wrapping + } + ) + levelText.set("id", "level_Id" + sticker_id) + levelTextTextSpan = etree.SubElement(levelText, inkex.addNS("tspan", "svg"), {}) + levelTextTextSpan.text = level + + # 6 - Add horizontal divider line + line_thickness = 2 #px + line_x_pos = 350 #px; start of the line (left coord) + line_length = sticker_width - line_x_pos + divider = etree.SubElement(stickerGroup, + inkex.addNS("path", "svg"), + { + "d": "m " + str(line_x_pos) + "," + str(sticker_height - subline_fontsize - subline_fontsize) + " h " + str(line_length) , + "style": str(inkex.Style({"fill": "none", "stroke": "#000000", "stroke-width": str(line_thickness) + "px", "stroke-linecap": "butt", "stroke-linejoin":"miter", "stroke-opacity": "1"})) #inline-size required for text wrapping + } + ) + divider.set("id", "divider_Id" + sticker_id) + + if self.options.preview == False: + export_file_name = sticker_id + "_" + get_valid_filename(doc_title) + export_file_path = os.path.join(zoneDir, export_file_name) + + #"Export" as SVG by just copying the recent SVG document to the target directory. We need to remove special characters to have valid file names on Windows/Linux + export_file_svg = open(export_file_path + ".svg", "w", encoding="utf-8") + export_file_svg.write(str(etree.tostring(self.document), "utf-8")) + export_file_svg.close() + + if self.options.export_png == False and self.options.export_svg == False: + inkex.errormsg("Nothing to export. Generating preview only ...") + break + + if self.options.export_png == True: #we need to generate SVG before to get PNG. But if user selected PNG only we need to remove SVG afterwards + #Make PNG from SVG (slow because each file is picked up separately. Takes about 10 minutes for 600 files + inkscape(export_file_path + ".svg", actions="export-dpi:96;export-background:white;export-filename:{file_name};export-do;FileClose".format(file_name=export_file_path + ".png")) + + #fix for "usb.core.USBError: [Errno 13] Access denied (insufficient permissions)" + #echo 'SUBSYSTEM=="usb", ATTR{idVendor}=="04f9", ATTR{idProduct}=="2044", MODE="666"' > /etc/udev/rules.d/99-garmin.rules && sudo udevadm trigger + if self.options.print_png > 0: + if self.options.export_png == False: + inkex.errormsg("No file output for printing. Please set 'Export PNG' to true first.") + else: + for x in range(self.options.print_png): + command = "brother_ql -m QL-720NW --backend pyusb --printer usb://" + self.options.print_device + " print -l 62 --600dpi -r auto " + export_file_path + ".png" + p = Popen(command, shell=True, stdout=PIPE, stderr=PIPE) #forr Windows: shell=False + stdout, stderr = p.communicate() + p.wait() + if p.returncode != 0: + std_out = stdout.decode('utf-8') + std_err = stderr.decode('utf-8') + if std_err.endswith("ValueError: Device not found\n") is True: + self.msg("Printer device not found or offline. Check for power, cables and entered printer interface ID") + else: + inkex.errormsg("brother_ql returned errors:\nError code {:d}\n{}\n{}".format(p.returncode, std_out, std_err)) + + if self.options.export_svg != True: #If user selected PNG only we need to remove SVG again + os.remove(export_file_path + ".svg") + + self.document.getroot().remove(stickerGroup) #remove the stickerGroup again + else: #create preview by just breaking the for loop without executing remove(stickerGroup) + break + csv_file.close() + if totalOutputs == 0: + self.msg("No output was generated. Check if your entered IDs are valid!") + except Exception as e: + inkex.errormsg(e) + #inkex.errormsg("Wrong inventory.csv URL or invalid credentials for Basic Auth") + + # parameters for the selected datamatrix size + # drow number of rows in each data region + # dcol number of cols in each data region + # reg_row number of rows of data regions + # reg_col number of cols of data regions + # nd number of data codewords per reed-solomon block + # nc number of ECC codewords per reed-solomon block + # inter number of interleaved Reed-Solomon blocks + def encode(self, text, nrow = 16, ncol = 16, data_nrow = 14, data_ncol = 14, reg_row = 1, reg_col = 1, nd = 12, nc = 12, inter = 1): + """ + Take an input string and convert it to a sequence (or sequences) + of codewords as specified in ISO/IEC 16022:2006 (section 5.2.3) + """ + # generate the codewords including padding and ECC + codewords = get_codewords(text, nd, nc, inter, nrow == 144) + + # break up into separate arrays if more than one DataMatrix is needed + module_arrays = [] + for codeword_stream in codewords: # for each datamatrix + # place the codewords" bits across the array as modules + bit_array = place_bits(codeword_stream, data_nrow * reg_row, data_ncol * reg_col) + # add finder patterns around the modules + module_arrays.append(add_finder_pattern(bit_array, data_nrow, data_ncol, reg_row, reg_col)) + + return module_arrays + + def render_data_matrix(self, module_arrays, size): + """turn a 2D array of 1"s and 0"s into a set of black squares""" + spacing = 16 * size * 1.5 + for i, line in enumerate(module_arrays): + height = len(line) + width = len(line[0]) + + for y in range(height): # loop over all the modules in the datamatrix + for x in range(width): + if line[y][x] == 1: # A binary 1 is a filled square + yield (x * size + i * spacing, y * size) + elif line[y][x] == INVALID_BIT: # we have an invalid bit value + inkex.errormsg("Invalid bit value, {}!".format(line[y][x])) + +if __name__ == "__main__": + InventorySticker().run() diff --git a/extensions/fablabchemnitz/isometric_projection/isometric_projection.inx b/extensions/fablabchemnitz/isometric_projection/isometric_projection.inx new file mode 100644 index 00000000..ff3037ae --- /dev/null +++ b/extensions/fablabchemnitz/isometric_projection/isometric_projection.inx @@ -0,0 +1,22 @@ + + + Isometric Projection + fablabchemnitz.de.isometric_projection + + + + + + false + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/isometric_projection/isometric_projection.py b/extensions/fablabchemnitz/isometric_projection/isometric_projection.py new file mode 100644 index 00000000..46dd329c --- /dev/null +++ b/extensions/fablabchemnitz/isometric_projection/isometric_projection.py @@ -0,0 +1,161 @@ +#!/usr/bin/env python3 + +import math +import inkex +from inkex import Transform + +class IsometricProjection(inkex.EffectExtension): + """ + Convert a flat 2D projection to one of the three visible sides in an + isometric projection, and vice versa. + """ + + attrTransformCenterX = inkex.addNS('transform-center-x', 'inkscape') + attrTransformCenterY = inkex.addNS('transform-center-y', 'inkscape') + + # Precomputed values for sine, cosine, and tangent of 30°. + rad_30 = math.radians(30) + cos_30 = math.cos(rad_30) + sin_30 = 0.5 # No point in using math.sin for 30°. + tan_30 = math.tan(rad_30) + + # Combined affine transformation matrices. The bottom row of these 3×3 + # matrices is omitted; it is always [0, 0, 1]. + transformations = { + # From 2D to isometric top down view: + # * scale vertically by cos(30°) + # * shear horizontally by -30° + # * rotate clock-wise 30° + 'to_top': [[cos_30, -cos_30, 0], + [sin_30, sin_30, 0]], + + # From 2D to isometric left-hand side view: + # * scale horizontally by cos(30°) + # * shear vertically by -30° + 'to_left': [[cos_30, 0, 0], + [sin_30, 1, 0]], + + # From 2D to isometric right-hand side view: + # * scale horizontally by cos(30°) + # * shear vertically by 30° + 'to_right': [[cos_30, 0, 0], + [-sin_30, 1, 0]], + + # From isometric top down view to 2D: + # * rotate counter-clock-wise 30° + # * shear horizontally by 30° + # * scale vertically by 1 / cos(30°) + 'from_top': [[tan_30, 1, 0], + [-tan_30, 1, 0]], + + # From isometric left-hand side view to 2D: + # * shear vertically by 30° + # * scale horizontally by 1 / cos(30°) + 'from_left': [[1 / cos_30, 0, 0], + [-tan_30, 1, 0]], + + # From isometric right-hand side view to 2D: + # * shear vertically by -30° + # * scale horizontally by 1 / cos(30°) + 'from_right': [[1 / cos_30, 0, 0], + [tan_30, 1, 0]] + } + + def add_arguments(self, pars): + pars.add_argument('--conversion', default='top', help='Conversion to perform: (top|left|right)') + pars.add_argument('--reverse', default="false", help='Reverse the transformation from isometric projection to flat 2D') + + def getTransformCenter(self, midpoint, node): + """ + Find the transformation center of an object. If the user set it + manually by dragging it in Inkscape, those coordinates are used. + Otherwise, an attempt is made to find the center of the object's + bounding box. + """ + + c_x = node.get(self.attrTransformCenterX) + c_y = node.get(self.attrTransformCenterY) + + # Default to dead-center. + if c_x is None: + c_x = 0.0 + else: + c_x = float(c_x) + if c_y is None: + c_y = 0.0 + else: + c_y = float(c_y) + + x = midpoint[0] + c_x + y = midpoint[1] - c_y + + return [x, y] + + def translateBetweenPoints(self, tr, here, there): + """ + Add a translation to a matrix that moves between two points. + """ + + x = there[0] - here[0] + y = there[1] - here[1] + tr.add_translate(x, y) + + def moveTransformationCenter(self, node, midpoint, center_new): + """ + If a transformation center is manually set on the node, move it to + match the transformation performed on the node. + """ + + c_x = node.get(self.attrTransformCenterX) + c_y = node.get(self.attrTransformCenterY) + + if c_x is not None: + x = str(center_new[0] - midpoint[0]) + node.set(self.attrTransformCenterX, x) + if c_y is not None: + y = str(midpoint[1] - center_new[1]) + node.set(self.attrTransformCenterY, y) + + def effect(self): + if self.options.reverse == "true": + conversion = "from_" + self.options.conversion + else: + conversion = "to_" + self.options.conversion + + if len(self.svg.selected) == 0: + inkex.errormsg("Please select an object to perform the " + + "isometric projection transformation on.") + return + + # Default to the flat 2D to isometric top down view conversion if an + # invalid identifier is passed. + effect_matrix = self.transformations.get( + conversion, self.transformations.get('to_top')) + + for id, node in self.svg.selected.items(): + bbox = node.bounding_box() + midpoint = [bbox.center_x, bbox.center_y] + center_old = self.getTransformCenter(midpoint, node) + transform = node.get("transform") + # Combine our transformation matrix with any pre-existing + # transform. + tr = Transform(transform) * Transform(effect_matrix) + + # Compute the location of the transformation center after applying + # the transformation matrix. + center_new = center_old[:] + #Transform(matrix).apply_to_point(center_new) + tr.apply_to_point(center_new) + tr.apply_to_point(midpoint) + + # Add a translation transformation that will move the object to + # keep its transformation center in the same place. + self.translateBetweenPoints(tr, center_new, center_old) + + node.set('transform', str(tr)) + + # Adjust the transformation center. + self.moveTransformationCenter(node, midpoint, center_new) + +if __name__ == '__main__': + IsometricProjection().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/j_tech_photonics_laser_tool/j_tech_photonics_laser_tool.inx b/extensions/fablabchemnitz/j_tech_photonics_laser_tool/j_tech_photonics_laser_tool.inx new file mode 100644 index 00000000..d2494e2a --- /dev/null +++ b/extensions/fablabchemnitz/j_tech_photonics_laser_tool/j_tech_photonics_laser_tool.inx @@ -0,0 +1,71 @@ + + + J Tech Photonics Laser Tool + fablabchemnitz.de.j_tech_photonics_laser_tool + + + + + + + 3000 + 750 + + 1 + 1 + + -- Choose Output Directory -- + output.gcode + true + + + M3 S255; + M5; + 0 + + true + 0.5 + 1.0 + + 0.01 + + + + + + + false + 0 + + false + + true + true + + + + + + + + false + 200 + 200 + + 0 + 0 + 1 + + + + path + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/j_tech_photonics_laser_tool/j_tech_photonics_laser_tool.py b/extensions/fablabchemnitz/j_tech_photonics_laser_tool/j_tech_photonics_laser_tool.py new file mode 100644 index 00000000..7850a0a7 --- /dev/null +++ b/extensions/fablabchemnitz/j_tech_photonics_laser_tool/j_tech_photonics_laser_tool.py @@ -0,0 +1,296 @@ +import os + +from lxml import etree +from xml.etree import ElementTree as xml_tree +from inkex import EffectExtension, Boolean + +from svg_to_gcode.svg_parser import parse_root, Transformation, debug_methods +from svg_to_gcode.geometry import LineSegmentChain +from svg_to_gcode.compiler import Compiler, interfaces +from svg_to_gcode import TOLERANCES + +svg_name_space = "http://www.w3.org/2000/svg" +inkscape_name_space = "http://www.inkscape.org/namespaces/inkscape" +sodipodi_name_space = "http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + +inx_filename = "j_tech_photonics_laser_tool.inx" + + +def generate_custom_interface(laser_off_command, laser_power_command): + """Wrapper function for generating a Gcode interface with a custom laser power command""" + + class CustomInterface(interfaces.Gcode): + """A Gcode interface with a custom laser power command""" + + def __init__(self): + super().__init__() + + def laser_off(self): + return f"{laser_off_command}" + + def set_laser_power(self, _): + return f"{laser_power_command}" + + return CustomInterface + + +class GcodeExtension(EffectExtension): + """Inkscape Effect Extension.""" + + def __init__(self): + EffectExtension.__init__(self) + + def effect(self): + """Takes the SVG from Inkscape, generates gcode, returns the SVG after adding debug lines.""" + + root = self.document.getroot() + + # Change svg_to_gcode's approximation tolerance + TOLERANCES["approximation"] = float(self.options.approximation_tolerance.replace(',', '.')) + + # Construct output path + output_path = os.path.join(self.options.directory, self.options.filename) + if self.options.filename_suffix: + try: + filename, extension = output_path.split('.') + except: + self.msg("Error in output directory!") + exit(1) + + n = 1 + while os.path.isfile(output_path): + output_path = filename + str(n) + '.' + extension + n += 1 + + # Load header and footer files + header = [] + if os.path.isfile(self.options.header_path): + with open(self.options.header_path, 'r') as header_file: + header = header_file.read().splitlines() + elif self.options.header_path != os.getcwd(): # The Inkscape file selector defaults to the working directory + self.debug(f"Header file does not exist at {self.options.header_path}") + + footer = [] + if os.path.isfile(self.options.footer_path): + with open(self.options.footer_path, 'r') as footer_file: + footer = footer_file.read().splitlines() + elif self.options.footer_path != os.getcwd(): + self.debug(f"Footer file does not exist at {self.options.footer_path}") + + # Customize header/footer + custom_interface = generate_custom_interface(self.options.tool_off_command, self.options.tool_power_command) + interface_instance = custom_interface() + + if self.options.do_laser_off_start: + header.append(interface_instance.laser_off()) + if self.options.do_laser_off_end: + footer.append(interface_instance.laser_off()) + + header.append(interface_instance.set_movement_speed(self.options.travel_speed)) + if self.options.do_z_axis_start: + header.append(interface_instance.linear_move(z=self.options.z_axis_start)) + if self.options.move_to_origin_end: + footer.append(interface_instance.linear_move(x=0, y=0)) + + # Generate gcode + gcode_compiler = Compiler(custom_interface, self.options.travel_speed, self.options.cutting_speed, + self.options.pass_depth, dwell_time=self.options.dwell_time, custom_header=header, + custom_footer=footer, unit=self.options.unit) + + transformation = Transformation() + + transformation.add_translation(self.options.horizontal_offset, self.options.vertical_offset) + transformation.add_scale(self.options.scaling_factor) + + if self.options.machine_origin == "center": + transformation.add_translation(-self.options.bed_width / 2, self.options.bed_height / 2) + elif self.options.machine_origin == "top-left": + transformation.add_translation(0, self.options.bed_height) + + curves = parse_root(root, transform_origin=not self.options.invert_y_axis, root_transformation=transformation, + canvas_height=self.options.bed_height) + + gcode_compiler.append_curves(curves) + gcode_compiler.compile_to_file(output_path, passes=self.options.passes) + + # Draw debug lines + self.clear_debug() + if self.options.draw_debug: + self.draw_debug_traces(curves) + self.draw_unit_reference() + self.select_non_debug_layer() + + return self.document + + def draw_debug_traces(self, curves): + """Traces arrows over all parsed paths""" + + root = self.document.getroot() + origin = self.options.machine_origin + bed_width = self.options.bed_width + bed_height = self.options.bed_height + + group = etree.Element("{%s}g" % svg_name_space) + group.set("id", "debug_traces") + group.set("{%s}groupmode" % inkscape_name_space, "layer") + group.set("{%s}label" % inkscape_name_space, "debug traces") + + group.append( + etree.fromstring(xml_tree.tostring(debug_methods.arrow_defs(arrow_scale=self.options.debug_arrow_scale)))) + + for curve in curves: + approximation = LineSegmentChain.line_segment_approximation(curve) + + change_origin = Transformation() + + if not self.options.invert_y_axis: + change_origin.add_scale(1, -1) + change_origin.add_translation(0, -bed_height) + + if origin == "center": + change_origin.add_translation(bed_width / 2, bed_height / 2) + + + + path_string = xml_tree.tostring( + debug_methods.to_svg_path(approximation, color="red", opacity="0.5", stroke_width=f"{self.options.debug_line_width}px", + transformation=change_origin, draw_arrows=True) + ) + + group.append(etree.fromstring(path_string)) + + root.append(group) + + def draw_unit_reference(self): + """Draws reference points to mark the bed's four corners""" + root = self.document.getroot() + unit = self.options.unit + origin = self.options.machine_origin + bed_width = self.options.bed_width + bed_height = self.options.bed_height + + group = etree.Element("{%s}g" % svg_name_space) + group.set("id", "debug_references") + group.set("{%s}groupmode" % inkscape_name_space, "layer") + group.set("{%s}label" % inkscape_name_space, "debug reference points") + + reference_points_svg = [(0, 0), (0, bed_height), (bed_width, 0), (bed_width, bed_height)] + reference_points_gcode = { + "bottom-left": [(0, bed_height), (0, 0), (bed_width, bed_height), (bed_width, 0)], + "top-left": [(0, 0), (0, bed_height), (bed_width, 0), (bed_width, bed_height)], + "center": [(-bed_width / 2, bed_height / 2), (-bed_width / 2, -bed_height / 2), + (bed_width / 2, bed_height / 2), + (bed_width / 2, -bed_height / 2)] + }[origin] + for i, (x, y) in enumerate(reference_points_svg): + reference_point = etree.Element("{%s}g" % svg_name_space) + + stroke_width = 2 + size = 7 + + x_direction = -1 if x > 0 else 1 + plus_sign = etree.Element("{%s}g" % svg_name_space) + horizontal = etree.Element("{%s}line" % svg_name_space) + horizontal.set("x1", str(x - x_direction * stroke_width / 2)) + horizontal.set("y1", str(y)) + horizontal.set("x2", str(x + x_direction * size)) + horizontal.set("y2", str(y)) + horizontal.set("style", f"stroke:black;stroke-width:{stroke_width}") + plus_sign.append(horizontal) + + y_direction = -1 if y > 0 else 1 + vertical = etree.Element("{%s}line" % svg_name_space) + vertical.set("x1", str(x)) + vertical.set("y1", str(y + stroke_width / 2)) + vertical.set("x2", str(x)) + vertical.set("y2", str(y + y_direction * size)) + vertical.set("style", f"stroke:black;stroke-width:{stroke_width}") + plus_sign.append(vertical) + + reference_point.append(plus_sign) + + text_box = etree.Element("{%s}text" % svg_name_space) + text_box.set("x", str(x - 28)) + text_box.set("y", str(y - (y <= 0) * 6 + (y > 0) * 9)) + text_box.set("font-size", "6") + text_box.text = f"{reference_points_gcode[i][0]}{unit}, {reference_points_gcode[i][1]}{unit}" + reference_point.append(text_box) + + group.append(reference_point) + + root.append(group) + + def select_non_debug_layer(self): + """ + Select content_layer and create one if it doesn't exist. This helps stop the user from accidentally placing new + objects in debug layers. + """ + + root = self.document.getroot() + + unique_id = "layer89324" + content_layer = root.find("{%s}g[@id='%s']" % (svg_name_space, unique_id)) + + if content_layer is None: + content_layer = etree.Element("{%s}g" % svg_name_space) + content_layer.set("id", unique_id) + content_layer.set("{%s}groupmode" % inkscape_name_space, "layer") + content_layer.set("{%s}label" % inkscape_name_space, "content layer") + + sodipodi = root.find("{%s}namedview" % sodipodi_name_space) + if sodipodi is not None: + sodipodi.set("{%s}current-layer" % inkscape_name_space, unique_id) + + root.append(content_layer) + + def clear_debug(self): + """Removes debug groups. Used before parsing paths for gcode.""" + root = self.document.getroot() + + debug_traces = root.find("{%s}g[@id='debug_traces']" % svg_name_space) + debug_references = root.find("{%s}g[@id='debug_references']" % svg_name_space) + + if debug_traces is not None: + root.remove(debug_traces) + + if debug_references is not None: + root.remove(debug_references) + + def add_arguments(self, arg_parser): + """Tell inkscape what arguments to stick in self.options (behind the hood it's more complicated, see docs)""" + arguments = self.read_arguments() + + for arg in arguments: + arg_parser.add_argument("--" + arg["name"], type=arg["type"], dest=arg["name"]) + + @staticmethod + def read_arguments(): + """ + This method reads arguments off of the inx file so you don't have to explicitly declare them in self.add_arguments() + """ + root = etree.parse(inx_filename).getroot() + + arguments = [] # [{name, type, ...}] + namespace = "http://www.inkscape.org/namespace/inkscape/extension" + for arg in root.iter("{%s}param" % namespace): + + name = arg.attrib["name"] + + arg_type = arg.attrib["type"] + + if arg_type in ["description", "notebook"]: + continue + + types = {"int": int, "float": float, "boolean": Boolean, "string": str, "optiongroup": str, "path": str} + + arguments.append({"name": name, "type": types[arg_type]}) + + if next(root.iter("{%s}page" % namespace)) is not None: + arguments.append({"name": "tabs", "type": str}) + + return arguments + + +if __name__ == '__main__': + effect = GcodeExtension() + effect.run() diff --git a/extensions/fablabchemnitz/jitter_gradients/jitter_gradients.inx b/extensions/fablabchemnitz/jitter_gradients/jitter_gradients.inx new file mode 100644 index 00000000..aa00d57e --- /dev/null +++ b/extensions/fablabchemnitz/jitter_gradients/jitter_gradients.inx @@ -0,0 +1,17 @@ + + + Jitter Gradients + fablabchemnitz.de.jitter_gradients + 0 + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/jitter_gradients/jitter_gradients.py b/extensions/fablabchemnitz/jitter_gradients/jitter_gradients.py new file mode 100644 index 00000000..40143a7b --- /dev/null +++ b/extensions/fablabchemnitz/jitter_gradients/jitter_gradients.py @@ -0,0 +1,66 @@ +#!/usr/bin/env python3 + +import inkex +from inkex import Style +import re +import random + +class JitterGradients(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument('-j', '--jitter_amount', type=int, default=10, help='Relative to distance between gradient nodes') + + def getUrlFromString(self, text): + pattern = re.compile(r"url\(#([a-zA-Z0-9_-]+)\)") + result = re.search(pattern, text) + if (result): + return result.group(1) + else: + return 0; + + def getFill(self, element): + if(element.get('fill') and self.getUrlFromString(element.get('fill'))): + return self.getUrlFromString(element.get('fill')) + elif (element.get('style') and Style(element.get('style'))['fill'] and self.getUrlFromString(Style(element.get('style'))['fill'])): + return self.getUrlFromString(Style(element.get('style'))['fill']) + else: + return None + + def getGradientFromId(self, elementId): + element = self.svg.getElementById(elementId) + if (element is not None and element.tag.find("linearGradient") >= 0): + return element + else: + return None + + def effect(self): + option = self.options.jitter_amount + self._main_function(option) + + def _main_function(self, amount): + for element in self.svg.selected.values(): + fillId = self.getFill(element) + if (fillId is None): + continue + + gradient = self.getGradientFromId(fillId) + if (gradient is None): + continue + + x1 = self.svg.unittouu(gradient.get("x1")) + y1 = self.svg.unittouu(gradient.get("y1")) + x2 = self.svg.unittouu(gradient.get("x2")) + y2 = self.svg.unittouu(gradient.get("y2")) + + x1 += random.uniform(-amount, amount) + y1 += random.uniform(-amount, amount) + x2 += random.uniform(-amount, amount) + y2 += random.uniform(-amount, amount) + + gradient.set('x1', str(self.svg.uutounit(x1, self.svg.unit)) + self.svg.unit) + gradient.set('y1', str(self.svg.uutounit(y1, self.svg.unit)) + self.svg.unit) + gradient.set('x2', str(self.svg.uutounit(x2, self.svg.unit)) + self.svg.unit) + gradient.set('y2', str(self.svg.uutounit(y2, self.svg.unit)) + self.svg.unit) + +if __name__ == '__main__': + JitterGradients().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/join_paths/join_paths.inx b/extensions/fablabchemnitz/join_paths/join_paths.inx new file mode 100644 index 00000000..7da9bbf9 --- /dev/null +++ b/extensions/fablabchemnitz/join_paths/join_paths.inx @@ -0,0 +1,25 @@ + + + Join Paths + fablabchemnitz.de.join_paths + + + true + + + + + + + path + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/join_paths/join_paths.py b/extensions/fablabchemnitz/join_paths/join_paths.py new file mode 100644 index 00000000..4cf28730 --- /dev/null +++ b/extensions/fablabchemnitz/join_paths/join_paths.py @@ -0,0 +1,163 @@ +#!/usr/bin/env python3 + +''' +Inkscape extension to join the selected paths. With the optimized option selected, +the next path to be joined is the one, which has one of its end nodes closest to the ending +node of the earlier path. + +Copyright (C) 2019 Shrinivas Kulkarni + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +''' + +import inkex +from inkex.paths import CubicSuperPath +import copy + +def floatCmpWithMargin(float1, float2, margin): + return abs(float1 - float2) < margin + +def vectCmpWithMargin(vect1, vect2, margin): + return all(floatCmpWithMargin(vect2[i], vect1[i], margin) for i in range(0, len(vect1))) + +def getPartsFromCubicSuper(cspath): + parts = [] + for subpath in cspath: + part = [] + prevBezPt = None + for i, bezierPt in enumerate(subpath): + if(prevBezPt != None): + seg = [prevBezPt[1], prevBezPt[2], bezierPt[0], bezierPt[1]] + part.append(seg) + prevBezPt = bezierPt + parts.append(part) + return parts + +def getCubicSuperFromParts(parts): + cbsuper = [] + for part in parts: + subpath = [] + lastPt = None + pt = None + for seg in part: + if(pt == None): + ptLeft = seg[0] + pt = seg[0] + ptRight = seg[1] + subpath.append([ptLeft, pt, ptRight]) + ptLeft = seg[2] + pt = seg[3] + subpath.append([ptLeft, pt, pt]) + cbsuper.append(subpath) + return cbsuper + +def getArrangedIds(pathMap, startPathId): + nextPathId = startPathId + orderPathIds = [nextPathId] + + #Arrange in order + while(len(orderPathIds) < len(pathMap)): + minDist = 9e+100 #A large float + closestId = None + np = pathMap[nextPathId] + npPts = [np[-1][-1][-1]] + if(len(orderPathIds) == 1):#compare both the ends for the first path + npPts.append(np[0][0][0]) + + for key in pathMap: + if(key in orderPathIds): + continue + parts = pathMap[key] + start = parts[0][0][0] + end = parts[-1][-1][-1] + + for i, npPt in enumerate(npPts): + dist = abs(start[0] - npPt[0]) + abs(start[1] - npPt[1]) + if(dist < minDist): + minDist = dist + closestId = key + dist = abs(end[0] - npPt[0]) + abs(end[1] - npPt[1]) + if(dist < minDist): + minDist = dist + pathMap[key] = [[[pts for pts in reversed(seg)] for seg in \ + reversed(part)] for part in reversed(parts)] + closestId = key + + #If start point of the first path is closer reverse its direction + if(i > 0 and closestId == key): + pathMap[nextPathId] = [[[pts for pts in reversed(seg)] for seg in \ + reversed(part)] for part in reversed(np)] + + orderPathIds.append(closestId) + nextPathId = closestId + return orderPathIds + +class JoinPaths(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument("--optimized", type=inkex.Boolean, default=True) + pars.add_argument("--tab", default="sampling", help="Tab") + + def effect(self): + selections = self.svg.selected + pathNodes = self.document.xpath('//svg:path',namespaces=inkex.NSS) + + paths = {p.get('id'): getPartsFromCubicSuper(CubicSuperPath(p.get('d'))) for p in pathNodes } + + #paths.keys() Order disturbed + pathIds = [p.get('id') for p in pathNodes] + + if(len(paths) > 1): + if(self.options.optimized): + startPathId = pathIds[0] + pathIds = getArrangedIds(paths, startPathId) + + newParts = [] + firstElem = None + for key in pathIds: + parts = paths[key] + # ~ parts = getPartsFromCubicSuper(cspath) + start = parts[0][0][0] + try: + elem = self.svg.selected[key] + + if(len(newParts) == 0): + newParts += parts[:] + firstElem = elem + else: + if(vectCmpWithMargin(start, newParts[-1][-1][-1], margin = .01)): + newParts[-1] += parts[0] + else: + newSeg = [newParts[-1][-1][-1], newParts[-1][-1][-1], start, start] + newParts[-1].append(newSeg) + newParts[-1] += parts[0] + + if(len(parts) > 1): + newParts += parts[1:] + + parent = elem.getparent() + idx = parent.index(elem) + parent.remove(elem) + except: + pass #elem might come from group item - in this case we need to ignore it + + newElem = copy.copy(firstElem) + oldId = firstElem.get('id') + newElem.set('d', CubicSuperPath(getCubicSuperFromParts(newParts))) + newElem.set('id', oldId + '_joined') + parent.insert(idx, newElem) + +if __name__ == '__main__': + JoinPaths().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/jpeg_export/jpeg_export.inx b/extensions/fablabchemnitz/jpeg_export/jpeg_export.inx new file mode 100644 index 00000000..f2037f60 --- /dev/null +++ b/extensions/fablabchemnitz/jpeg_export/jpeg_export.inx @@ -0,0 +1,30 @@ + + + JPEG Export + fablabchemnitz.de.jpeg_export + C:\Users\ + + 100 + 90 + true + true + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/jpeg_export/jpeg_export.py b/extensions/fablabchemnitz/jpeg_export/jpeg_export.py new file mode 100644 index 00000000..ad069a63 --- /dev/null +++ b/extensions/fablabchemnitz/jpeg_export/jpeg_export.py @@ -0,0 +1,202 @@ +#!/usr/bin/env python3 + +#This program is free software: you can redistribute it and/or modify +#it under the terms of the GNU General Public License as published by +#the Free Software Foundation, either version 3 of the License, or +#(at your option) any later version. +# +#This program is distributed in the hope that it will be useful, +#but WITHOUT ANY WARRANTY; without even the implied warranty of +#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +#GNU General Public License for more details. +# +#You should have received a copy of the GNU General Public License +#along with this program. If not, see . + +# Author: Giacomo Mirabassi +# Version: 0.2 + +import os +import re +from distutils.spawn import find_executable +import subprocess +import math +import inkex +import shutil + +inkex.localization.localize + +class JPEGExport(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument("--path", default="") + pars.add_argument("--bgcol", default="#ffffff") + pars.add_argument("--quality",type=int, default="90") + pars.add_argument("--density", type=int, default="90") + pars.add_argument("--page", type=inkex.Boolean, default=False) + pars.add_argument("--fast", type=inkex.Boolean, default=True) + + def effect(self): + """get selected item coords and call command line command to export as a png""" + # The user must supply a directory to export: + if not self.options.path: + inkex.errormsg(_('Please indicate a file name and path to export the jpg.')) + exit() + if not os.path.basename(self.options.path): + inkex.errormsg(_('Please indicate a file name.')) + exit() + if not os.path.dirname(self.options.path): + inkex.errormsg(_('Please indicate a directory other than your system\'s base directory.')) + exit() + + # Test if the directory exists and filename is valid: + filebase = os.path.dirname(self.options.path) + if not os.path.exists(filebase): + inkex.errormsg(_('The directory "%s" does not exist.') % filebase) + exit() + filename = os.path.splitext(os.path.basename(self.options.path)) + filename_base = filename[0] + filename_ending = filename[1] + if self.get_valid_filename(filename_base) != filename_base: + inkex.errormsg(_('The file name "%s" is invalid.') % filename_base) + return + if filename_ending != 'jpg' or filename_ending != 'jpeg': + filename_ending = 'jpg' + outfile = os.path.join(filebase, filename_base + '.' + filename_ending) + + shutil.copy(self.options.input_file, self.options.input_file + ".svg") #make a file copy with file ending to suppress import warnings + curfile = self.options.input_file + ".svg" + #inkex.utils.debug("curfile:" + curfile) + + # Test if color is valid + _rgbhexstring = re.compile(r'#[a-fA-F0-9]{6}$') + if not _rgbhexstring.match(self.options.bgcol): + inkex.errormsg(_('Please indicate the background color like this: \"#abc123\" or leave the field empty for white.')) + exit() + + bgcol = self.options.bgcol + + if self.options.page == False: + if len(self.svg.selected) == 0: + inkex.errormsg(_('Please select something.')) + exit() + + coords=self.processSelected() + self.exportArea(int(coords[0]),int(coords[1]),int(coords[2]),int(coords[3]),curfile,outfile,bgcol) + + elif self.options.page == True: + self.exportPage(curfile,outfile,bgcol) + + def processSelected(self): + """Iterate trough nodes and find the bounding coordinates of the selected area""" + startx=None + starty=None + endx=None + endy=None + nodelist=[] + root=self.document.getroot(); + toty=self.svg.unittouu(root.attrib['height']) + scale = self.svg.unittouu('1px') + props=['x', 'y', 'width', 'height'] + + for id in self.svg.selected: + if self.options.fast == True: + nodelist.append(self.svg.getElementById(id)) + else: # uses command line + rawprops=[] + for prop in props: + command=("inkscape", "--query-id", id, "--query-"+prop, self.options.input_file) + proc=subprocess.Popen(command,stdout=subprocess.PIPE,stderr=subprocess.PIPE) + proc.wait() + rawprops.append(math.ceil(self.svg.unittouu(proc.stdout.read()))) + proc.stdout.close() + proc.stderr.close() + nodeEndX = rawprops[0] + rawprops[2] + nodeStartY = toty - rawprops[1] - rawprops[3] + nodeEndY = toty - rawprops[1] + + if rawprops[0] < startx or startx is None: + startx = rawprops[0] + + if nodeStartY < starty or starty is None: + starty = nodeStartY + + if nodeEndX > endx or endx is None: + endx = nodeEndX + + if nodeEndY > endy or endy is None: + endy = nodeEndY + + + if self.options.fast == True: + bbox = sum([node.bounding_box() for node in nodelist], None) + #inkex.utils.debug(bbox) - see transform.py + ''' + width = property(lambda self: self.x.size) + height = property(lambda self: self.y.size) + top = property(lambda self: self.y.minimum) + left = property(lambda self: self.x.minimum) + bottom = property(lambda self: self.y.maximum) + right = property(lambda self: self.x.maximum) + center_x = property(lambda self: self.x.center) + center_y = property(lambda self: self.y.center) + ''' + startx = math.ceil(bbox.left) + endx = math.ceil(bbox.right) + h = -bbox.top + bbox.bottom + starty = toty - math.ceil(bbox.top) -h + endy = toty - math.ceil(bbox.top) + + coords = [startx / scale, starty / scale, endx / scale, endy / scale] + return coords + + def exportArea(self, x0, y0, x1, y1, curfile, outfile, bgcol): + tmp = self.getTmpPath() + command="inkscape --export-area %s:%s:%s:%s -d %s --export-filename \"%sjpinkexp.png\" -b \"%s\" \"%s\"" % (x0, y0, x1, y1, self.options.density, tmp, bgcol, curfile) + p = subprocess.Popen(command, shell=True) + return_code = p.wait() + self.tojpeg(outfile) + #inkex.utils.debug("command:" + command) + #inkex.utils.debug("Errorcode:" + str(return_code)) + + def exportPage(self, curfile, outfile, bgcol): + tmp = self.getTmpPath() + command = "inkscape --export-area-drawing -d %s --export-filename \"%sjpinkexp.png\" -b \"%s\" \"%s\"" % (self.options.density, tmp, bgcol, curfile) + p = subprocess.Popen(command, shell=True) + return_code = p.wait() + self.tojpeg(outfile) + #inkex.utils.debug("command:" + command) + #inkex.utils.debug("Errorcode:" + str(return_code)) + + def tojpeg(self, outfile): + tmp = self.getTmpPath() + if os.name == 'nt': + outfile = outfile.replace("\\","\\\\") + # set the ImageMagick command to run based on what's installed + if find_executable('magick'): + command = "magick \"%sjpinkexp.png\" -sampling-factor 4:4:4 -strip -interlace JPEG -colorspace RGB -quality %s -density %s \"%s\" " % (tmp, self.options.quality, self.options.density, outfile) + # inkex.utils.debug(command) + elif find_executable('convert'): + command = "convert \"%sjpinkexp.png\" -sampling-factor 4:4:4 -strip -interlace JPEG -colorspace RGB -quality %s -density %s \"%s\" " % (tmp, self.options.quality, self.options.density, outfile) + # inkex.utils.debug(command) + else: + inkex.errormsg(_('ImageMagick does not appear to be installed.')) + exit() + p = subprocess.Popen(command, shell=True) + return_code = p.wait() + #inkex.utils.debug("command:" + command) + #inkex.utils.debug("Errorcode:" + str(return_code)) + + def getTmpPath(self): + """Define the temporary folder path depending on the operating system""" + if os.name == 'nt': + return os.getenv('TEMP') + '\\' + else: + return '/tmp/' + + def get_valid_filename(self, s): + s = str(s).strip().replace(" ", "_") + return re.sub(r"(?u)[^-\w.]", "", s) + +if __name__ == '__main__': + JPEGExport().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/knob_scale/knob_scale.inx b/extensions/fablabchemnitz/knob_scale/knob_scale.inx new file mode 100644 index 00000000..77df3052 --- /dev/null +++ b/extensions/fablabchemnitz/knob_scale/knob_scale.inx @@ -0,0 +1,50 @@ + + + Knob Scale + fablabchemnitz.de.knob_scale + + + 0 + 0 + 100 + 300 + 1 + true + false + + + + + + + 2 + 10 + 1 + 5 + + + + + + + + false + 0 + 10 + 20 + 0 + 10 + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/knob_scale/knob_scale.py b/extensions/fablabchemnitz/knob_scale/knob_scale.py new file mode 100644 index 00000000..475ce416 --- /dev/null +++ b/extensions/fablabchemnitz/knob_scale/knob_scale.py @@ -0,0 +1,221 @@ +#!/usr/bin/env python3 +''' +Copyright (C) 2017 Artem Synytsyn a.synytsyn@gmail.com + +#TODO: Code cleaning and refactoring + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +''' + +import inkex +from lxml import etree +from math import * + +class KnobScale(inkex.EffectExtension): + + def add_arguments(self, pars): + # General settings + pars.add_argument("--x", type=float, default=0.0, help="Center X") + pars.add_argument("--y", type=float, default=0.0, help="Center Y") + pars.add_argument("--radius", type=float, default=100.0, help="Knob radius") + pars.add_argument("--linewidth", type=float, default=1) + pars.add_argument("--angle", type=float, default=260.0, help="Angle of the knob scale in degrees") + pars.add_argument("--draw_arc", type=inkex.Boolean, default='True') + pars.add_argument("--draw_centering_circle", type=inkex.Boolean, default='False') + pars.add_argument("-u", "--units", default="px", help="units to measure size of knob") + # Tick settings + pars.add_argument("--n_ticks", type=int, default=5) + pars.add_argument("--ticksize", type=float, default=10) + pars.add_argument("--n_subticks", type=int, default=10) + pars.add_argument("--subticksize", type=float, default=5) + pars.add_argument("--style", default='marks_outwards', help="Style of marks") + + # Label settings + pars.add_argument("--labels_enabled", type=inkex.Boolean, default='False') + pars.add_argument("--rounding_level", type=int, default=0) + pars.add_argument("--text_size", type=float, default=1) + pars.add_argument("--text_offset", type=float, default=20) + pars.add_argument("--start_value", type=float, default=0) + pars.add_argument("--stop_value", type=float, default=10) + # Dummy + pars.add_argument("--tab") + + def draw_text(self, textvalue, radius, angular_position, text_size, parent): + # Create text element + text = etree.Element(inkex.addNS('text','svg')) + text.text = textvalue + + # Set text position to center of document. + text.set('x', str(self.x_offset + radius*cos(angular_position))) + text.set('y', str(self.y_offset + radius*sin(angular_position) + text_size/2)) + + # Center text horizontally with CSS style. + style = { + 'text-align' : 'center', + 'text-anchor': 'middle', + 'alignment-baseline' : 'center', + 'font-size' : str(text_size), + 'vertical-align' : 'middle' + } + + text.set('style', str(inkex.Style(style))) + parent.append(text) + def draw_knob_arc(self, radius, parent, angle, transform='' ): + + start_point_angle = (angle - pi)/2.0 + end_point_angle = pi - start_point_angle + + style = { 'stroke' : '#000000', + 'stroke-width' : str(self.options.linewidth), + 'fill' : 'none' } + ell_attribs = {'style': str(inkex.Style(style)), + inkex.addNS('cx','sodipodi') :str(self.x_offset), + inkex.addNS('cy','sodipodi') :str(self.y_offset), + inkex.addNS('rx','sodipodi') :str(radius), + inkex.addNS('ry','sodipodi') :str(radius), + inkex.addNS('start','sodipodi') :str(end_point_angle), + inkex.addNS('end','sodipodi') :str(start_point_angle), + inkex.addNS('open','sodipodi') :'true', #all ellipse sectors we will draw are open + inkex.addNS('type','sodipodi') :'arc', + 'transform' :transform + + } + ell = etree.SubElement(parent, inkex.addNS('path','svg'), ell_attribs ) + + def draw_centering_circle(self, radius, parent): + + style = { 'stroke' : '#000000', + 'stroke-width' : '1', + 'fill' : 'none' } + ell_attribs = {'style':str(inkex.Style(style)), + inkex.addNS('cx','sodipodi') :str(self.x_offset), + inkex.addNS('cy','sodipodi') :str(self.y_offset), + inkex.addNS('rx','sodipodi') :str(radius), + inkex.addNS('ry','sodipodi') :str(radius), + inkex.addNS('type','sodipodi') :'arc' + } + ell = etree.SubElement(parent, inkex.addNS('path','svg'), ell_attribs ) + + def draw_circle_mark(self, x_offset, y_offset, radius, mark_angle, mark_length, parent): + + cx = x_offset + radius*cos(mark_angle) + cy = y_offset + radius*sin(mark_angle) + r = mark_length / 2.0 + + style = { + 'stroke': '#000000', + 'stroke-width':'0', + 'fill': '#000000' + } + + circ_attribs = { + 'style':str(inkex.Style(style)), + 'cx':str(cx), + 'cy':str(cy), + 'r':str(r) + } + circle = etree.SubElement(parent, inkex.addNS('circle','svg'), circ_attribs ) + + def draw_knob_line_mark(self, x_offset, y_offset, radius, mark_angle, mark_length, parent): + x1 = x_offset + radius*cos(mark_angle) + y1 = y_offset + radius*sin(mark_angle) + x2 = x_offset + (radius + mark_length)*cos(mark_angle) + y2 = y_offset + (radius + mark_length)*sin(mark_angle) + + line_style = { 'stroke': '#000000', + 'stroke-width': str(self.options.linewidth), + 'fill': 'none' + } + + line_attribs = {'style' : str(inkex.Style(line_style)), + inkex.addNS('label','inkscape') : "none", + 'd' : 'M '+str(x1) +',' + + str(y1) +' L '+str(x2) + +','+str(y2) } + + line = etree.SubElement(parent, inkex.addNS('path','svg'), line_attribs ) + + def draw_tick(self, radius, mark_angle, mark_size, parent): + if (self.options.style == 'marks_inwards') or (self.options.style == 'marks_outwards'): + self.draw_knob_line_mark(self.x_offset, self.y_offset, radius, mark_angle, mark_size, parent) + elif self.options.style == 'marks_circles': + self.draw_circle_mark(self.x_offset, self.y_offset, radius, mark_angle, mark_size, parent) + + def effect(self): + parent = self.svg.get_current_layer() + radius = self.svg.unittouu(str(self.options.radius) + self.options.units) + self.x_offset = self.svg.unittouu(str(self.options.x) + self.options.units) + self.y_offset = self.svg.unittouu(str(self.options.y) + self.options.units) + angle = self.options.angle*pi/180.0 + n_ticks = self.options.n_ticks + n_subticks = self.options.n_subticks + is_outer = True + if self.options.style == 'marks_inwards': + is_outer = False + + tick_length = self.svg.unittouu(str(self.options.ticksize) + self.options.units) + subtick_length = self.svg.unittouu(str(self.options.subticksize) + self.options.units) + arc_radius = radius + + + # Labeling settings + start_num = self.options.start_value + end_num = self.options.stop_value + text_spacing = self.svg.unittouu(str(self.options.text_offset) + self.options.units) + text_size = self.svg.unittouu(str(self.options.text_size) + self.options.units) + + if not is_outer: + subtick_radius = radius + tick_length - subtick_length + arc_radius = radius + tick_length + else: + subtick_radius = radius + arc_radius = radius + + if self.options.draw_arc: + self.draw_knob_arc(arc_radius, parent, angle) + + if self.options.draw_centering_circle: + self.draw_centering_circle(arc_radius + tick_length + text_size + text_spacing, parent) + + ticks_delta = angle / (n_ticks - 1) + start_ticks_angle = 1.5*pi - 0.5*angle + for tick in range(n_ticks): + self.draw_tick(radius, start_ticks_angle + ticks_delta*tick, + tick_length, parent) + + if self.options.labels_enabled: + if self.options.rounding_level > 0: + tick_text = str(round(start_num + + float(tick) * (end_num - start_num) / (n_ticks - 1), + self.options.rounding_level)) + else: + tick_text = str(int(start_num + float(tick) * (end_num - start_num) / (n_ticks - 1))) + + self.draw_text(tick_text, radius + tick_length + text_spacing, + start_ticks_angle + ticks_delta*tick, + text_size, + parent) + + if tick == (n_ticks - 1): + break + + subticks_delta = ticks_delta / (n_subticks + 1) + subtick_start_angle = start_ticks_angle + ticks_delta*tick + subticks_delta + for subtick in range(n_subticks): + self.draw_tick(subtick_radius, subtick_start_angle + subticks_delta*subtick, + subtick_length, parent) + +if __name__ == '__main__': + e = KnobScale().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/label_feature_with_fill_color/label_feature_with_fill_color.inx b/extensions/fablabchemnitz/label_feature_with_fill_color/label_feature_with_fill_color.inx new file mode 100644 index 00000000..9ab25796 --- /dev/null +++ b/extensions/fablabchemnitz/label_feature_with_fill_color/label_feature_with_fill_color.inx @@ -0,0 +1,16 @@ + + + Label Feature With Fill Color + fablabchemnitz.de.label_feature_with_fill_color + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/label_feature_with_fill_color/label_feature_with_fill_color.py b/extensions/fablabchemnitz/label_feature_with_fill_color/label_feature_with_fill_color.py new file mode 100644 index 00000000..e0e5a5e7 --- /dev/null +++ b/extensions/fablabchemnitz/label_feature_with_fill_color/label_feature_with_fill_color.py @@ -0,0 +1,143 @@ +#!/usr/bin/env python3 + + +""" +A inkscape plugin to label features with their fill colour + + +Copyright (C) 2019 Christoph Fink + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +""" + +import inkex +from inkex.paths import CubicSuperPath, Path +from lxml import etree + +class LabelFeatureWithFillColor(inkex.EffectExtension): + + def effect(self): + if len(self.svg.selected) > 0: + for id, node in self.svg.selected.items(): + self.labelFeature(node) + + def labelFeature(self, node): + style = node.get('style') + if style: + nodeStyle = dict(inkex.Style.parse_str(node.attrib["style"])) + nodeColour, labelColour = self.getNodeAndLabelColours(nodeStyle["fill"]) + nodeX, nodeY, nodeWidth, nodeHeight = self.getNodeDimensions(node) + parent = node.getparent() + label = etree.SubElement( + parent, + inkex.addNS("text", "svg"), + { + "font-size": str(nodeHeight/4), + "x": str(nodeX + (nodeWidth/2)), + "y": str(nodeY + (nodeHeight/2)), + "dy": "0.5em", + "style": str(inkex.Style({ + "fill": labelColour, + "stroke": "none", + "text-anchor": "middle" + })) + } + ) + labelTextSpan = etree.SubElement( + label, + inkex.addNS("tspan", "svg"), + {} + ) + labelTextSpan.text = nodeColour + + + def getNodeAndLabelColours(self, nodeStyleFill): + if nodeStyleFill[:5] == "url(#": + nodeFill = self.svg.getElementById(nodeStyleFill[5:-1]) + if "Gradient" in nodeFill.tag: + nodeColour, labelColour = self.getNodeAndLabelColourForGradient(nodeFill) + else: + nodeColour = "" + labelColour = "" + + else: + nodeColour = nodeStyleFill + labelColour = self.getLabelColour(nodeColour) + + return (nodeColour, labelColour) + + def getNodeAndLabelColourForGradient(self, gradientNode): + stops = self.getGradientStops(gradientNode) + + nodeColours = [] + + for stop in stops: + offset = float(stop[0]) + colour = stop[1] + nodeColours.append("{colour:s}{offset:s}".format( + colour=colour, + offset="" if offset in (0, 1) else " ({:0.2f})".format(offset) + )) + nodeColour = u" ↔ ".join(nodeColours) + + avgNodeColour = [sum([inkex.Color(stop[1]).to_rgb()[c] for stop in stops]) / len(stops) for c in range(3)] + + labelColour = str(inkex.Color(avgNodeColour)) + + return (nodeColour, labelColour) + + def getGradientStops(self, gradientNode): + while "{http://www.w3.org/1999/xlink}href" in gradientNode.attrib: + gradientNode = self.svg.getElementById(gradientNode.attrib["{http://www.w3.org/1999/xlink}href"][1:]) # noqa:E129 + + stops = [] + + for child in gradientNode: + if "stop" in child.tag: + stopStyle = dict(inkex.Style.parse_str(child.attrib["style"])) + stops.append((child.attrib["offset"], stopStyle["stop-color"])) + + # if only opacity differs (colour == same), return one stop only: + if len(set([s[1] for s in stops])) == 1: + stops = [(0, stops[0][1])] + + return stops + + def getLabelColour(self, nodeColour): + labelColour = "#000000" + + try: + nodeColour = inkex.Color(nodeColour).to_rgb() + if sum(nodeColour) / len(nodeColour) < 128: + labelColour = "#ffffff" + except ( + TypeError, + ZeroDivisionError # if parseColor returns "" + ): + pass + + return labelColour + + def getNodeDimensions(self, node): + bbox = node.bounding_box() + nodeX = bbox.left + nodeY = bbox.top + nodeWidth = bbox.right - bbox.left + nodeHeight = bbox.bottom - bbox.top + + return nodeX, nodeY, nodeWidth, nodeHeight + +if __name__ == '__main__': + LabelFeatureWithFillColor().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/label_guides/label_guides.inx b/extensions/fablabchemnitz/label_guides/label_guides.inx new file mode 100644 index 00000000..f97d2d7e --- /dev/null +++ b/extensions/fablabchemnitz/label_guides/label_guides.inx @@ -0,0 +1,158 @@ + + + Label Guides + fablabchemnitz.de.label_guides + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 8.5 + 13 + 37 + 37 + 39 + 39 + 5 + 7 + + + + + + + + false + true + true + 5 + true + true + 5 + true + false + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/label_guides/label_guides.py b/extensions/fablabchemnitz/label_guides/label_guides.py new file mode 100644 index 00000000..599afd0c --- /dev/null +++ b/extensions/fablabchemnitz/label_guides/label_guides.py @@ -0,0 +1,559 @@ +#!/usr/bin/env python3 +''' +Label Guides Creator + +Copyright (C) 2018 John Beard - john.j.beard **guesswhat** gmail.com + +## Simple Extension to draw guides and outlines for common paper labels + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; version 2 of the License. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +''' + +import inkex +from lxml import etree + +# Colours to use for the guides +GUIDE_COLOURS = { + 'edge': '#00A000', + 'centre': '#A00000', + 'inset': '#0000A0' +} + +# Preset list +# Regular grids defined as: +# 'reg', unit, page_szie, l marg, t marg, X size, Y size, +# X pitch, Y pitch, Number across, Number down, shapes +PRESETS = { + # Rounded rectangular labels in grid layout + 'L7167': ['reg', 'mm', 'a4', 5.2, 3.95, 199.6, 289.1, 199.6, 289.1, 1, 1, 'rrect'], + 'L7168': ['reg', 'mm', 'a4', 5.2, 5, 199.6, 143.5, 199.6, 143.5, 1, 2, 'rrect'], + 'L7169': ['reg', 'mm', 'a4', 4.65, 9.5, 99.1, 139, 101.6, 139, 2, 2, 'rrect'], + 'L7701': ['reg', 'mm', 'a4', 9, 24.5, 192, 62, 192, 62, 1, 4, 'rrect'], + 'L7171': ['reg', 'mm', 'a4', 5, 28.5, 200, 60, 200, 60, 1, 4, 'rrect'], + 'L7166': ['reg', 'mm', 'a4', 4.65, 8.85, 99.1, 93.1, 101.6, 93.1, 2, 3, 'rrect'], + 'L4760': ['reg', 'mm', 'a4', 9, 12, 192, 39, 192, 39, 1, 7, 'rrect'], + 'L7165': ['reg', 'mm', 'a4', 4.65, 13.1, 99.1, 67.7, 101.6, 67.7, 2, 4, 'rrect'], + 'L7664': ['reg', 'mm', 'a4', 18, 4.9, 70, 71.8, 104, 71.8, 2, 4, 'rrect'], + 'L7667': ['reg', 'mm', 'a4', 38.5, 15.3, 133, 29.6, 133, 29.6, 1, 9, 'rrect'], + 'L7173': ['reg', 'mm', 'a4', 4.65, 6, 99.1, 57, 101.6, 57, 2, 5, 'rrect'], + 'J5103': ['reg', 'mm', 'a4', 4.75, 13.5, 38.1, 135, 40.6, 135, 5, 2, 'rrect'], + 'L7666': ['reg', 'mm', 'a4', 23, 18.5, 70, 52, 94, 52, 2, 5, 'rrect'], + 'L7783': ['reg', 'mm', 'a4', 7.85, 21.75, 95.8, 50.7, 98.5, 50.7, 2, 5, 'rrect'], + 'L7164': ['reg', 'mm', 'a4', 7.25, 4.5, 63.5, 72, 66, 72, 3, 4, 'rrect'], + 'L7671': ['reg', 'mm', 'a4', 27.55, 9.3, 76.2, 46.4, 78.7, 46.4, 2, 6, 'rrect'], + 'L7177': ['reg', 'mm', 'a4', 4.65, 21.6, 99.1, 42.3, 101.6, 42.3, 2, 6, 'rrect'], + 'L7163': ['reg', 'mm', 'a4', 4.65, 15.15, 99.1, 38.1, 101.6, 38.1, 2, 7, 'rrect'], + 'L7668': ['reg', 'mm', 'a4', 13.5, 21.25, 59, 50.9, 62, 50.9, 3, 5, 'rrect'], + 'L7162': ['reg', 'mm', 'a4', 4.65, 12.9, 99.1, 33.9, 101.6, 33.9, 2, 8, 'rrect'], + 'L7674': ['reg', 'mm', 'a4', 32.5, 12.5, 145, 17, 145, 17, 1, 16, 'rrect'], + 'L7161': ['reg', 'mm', 'a4', 7.25, 8.7, 63.5, 46.6, 66, 46.6, 3, 6, 'rrect'], + 'L7172': ['reg', 'mm', 'a4', 3.75, 13.5, 100, 30, 102.5, 30, 2, 9, 'rrect'], + 'J5101': ['reg', 'mm', 'a4', 4.75, 10.5, 38.1, 69, 40.6, 69, 5, 4, 'rrect'], + 'L7160': ['reg', 'mm', 'a4', 7.25, 15.15, 63.5, 38.1, 66, 38.1, 3, 7, 'rrect'], + 'L7159': ['reg', 'mm', 'a4', 7.25, 12.9, 63.5, 33.9, 66, 33.9, 3, 8, 'rrect'], + 'L7665': ['reg', 'mm', 'a4', 22, 21.6, 72, 21.15, 94, 21.15, 2, 12, 'rrect'], + 'L7170': ['reg', 'mm', 'a4', 38, 16.5, 134, 11, 134, 11, 1, 24, 'rrect'], + 'L6011': ['reg', 'mm', 'a4', 7.25, 15.3, 63.5, 29.6, 66, 29.6, 3, 9, 'rrect'], + 'LP33_53': ['reg', 'mm', 'a4', 21, 17.5, 54, 22, 57, 24, 3, 11, 'rrect'], + 'LP36_49': ['reg', 'mm', 'a4', 4.8, 15.3, 48.9, 29.6, 50.5, 29.6, 4, 9, 'rrect'], + 'L7654': ['reg', 'mm', 'a4', 9.7, 21.5, 45.7, 25.4, 48.3, 25.4, 4, 10, 'rrect'], + 'L7636': ['reg', 'mm', 'a4', 9.85, 21.3, 45.7, 21.2, 48.2, 21.2, 4, 12, 'rrect'], + 'LP56_89': ['reg', 'mm', 'a4', 8, 8.5, 89, 10, 105, 10, 2, 28, 'rrect'], + 'L7651': ['reg', 'mm', 'a4', 4.75, 10.7, 38.1, 21.2, 40.6, 21.2, 5, 13, 'rrect'], + 'L7656': ['reg', 'mm', 'a4', 5.95, 15.95, 46, 11.1, 50.7, 12.7, 4, 21, 'rrect'], + 'L7658': ['reg', 'mm', 'a4', 8.6, 13.5, 25.4, 10, 27.9, 10, 7, 27, 'rrect'], + 'L7657': ['reg', 'mm', 'a4', 4.75, 13.5, 17.8, 10, 20.3, 10, 10, 27, 'rrect'], + + # Rect labels + 'L7784': ['reg', 'mm', 'a4', 0, 0, 210, 297, 210, 297, 1, 1, 'rect'], + 'LP2_105': ['reg', 'mm', 'a4', 0, 0, 105, 297, 105, 297, 2, 1, 'rect'], + '3655': ['reg', 'mm', 'a4', 0, 0, 210, 148.5, 210, 148.5, 1, 2, 'rect'], + 'LP3_210': ['reg', 'mm', 'a4', 0, 0, 210, 99, 210, 99, 1, 3, 'rect'], + '3483': ['reg', 'mm', 'a4', 0, 0, 105, 148.5, 105, 148.5, 2, 2, 'rect'], + 'LP4_210': ['reg', 'mm', 'a4', 0, 0, 210, 74.25, 210, 74.25, 1, 4, 'rect'], + 'LP6_70': ['reg', 'mm', 'a4', 0, 0, 70, 148.5, 70, 148.5, 3, 2, 'rect'], + 'LP6_105': ['reg', 'mm', 'a4', 0, 0, 105, 99, 105, 99, 2, 3, 'rect'], + '3427': ['reg', 'mm', 'a4', 0, 0, 105, 74.25, 105, 74.25, 2, 4, 'rect'], + 'LP8_105S': ['reg', 'mm', 'a4', 0, 7.1, 105, 70.7, 105, 70.7, 2, 4, 'rect'], + 'LP10_105': ['reg', 'mm', 'a4', 0, 0, 105, 59.4, 105, 59.4, 2, 5, 'rect'], + '3425': ['reg', 'mm', 'a4', 0, 4.625, 105, 57.55, 105, 57.55, 2, 5, 'rect'], + 'LP12_105': ['reg', 'mm', 'a4', 0, 0, 105, 49.5, 105, 49.5, 2, 6, 'rect'], + '3424': ['reg', 'mm', 'a4', 0, 4.8, 105, 47.9, 105, 47.9, 2, 6, 'rect'], + '3653': ['reg', 'mm', 'a4', 0, 0, 105, 42.42, 105, 42.42, 2, 7, 'rect'], + 'LP15_70': ['reg', 'mm', 'a4', 0, 0, 70, 59.4, 70, 59.4, 3, 5, 'rect'], + 'LP15_70S': ['reg', 'mm', 'a4', 0, 21.75, 70, 50.7, 70, 50.7, 3, 5, 'rect'], + '3484': ['reg', 'mm', 'a4', 0, 0, 105, 37.12, 105, 37.12, 2, 8, 'rect'], + '3423': ['reg', 'mm', 'a4', 0, 8.7, 105, 34.95, 105, 34.95, 2, 8, 'rect'], + '3652': ['reg', 'mm', 'a4', 0, 0, 70, 42.42, 70, 42.42, 3, 7, 'rect'], + 'LP21_70S': ['reg', 'mm', 'a4', 0, 15.15, 70, 38.1, 70, 38.1, 3, 7, 'rect'], + '3474': ['reg', 'mm', 'a4', 0, 0, 70, 37.12, 70, 37.12, 3, 8, 'rect'], + '3422': ['reg', 'mm', 'a4', 0, 8.7, 70, 34.95, 70, 34.95, 3, 8, 'rect'], + 'LP24_70LS': ['reg', 'mm', 'a4', 0, 12.5, 70, 34, 70, 34, 3, 8, 'rect'], + '3475': ['reg', 'mm', 'a4', 0, 4.5, 70, 36, 70, 36, 3, 8, 'rect'], + 'LP27_70S': ['reg', 'mm', 'a4', 0, 4.725, 70, 31.95, 70, 31.95, 3, 9, 'rect'], + '3489': ['reg', 'mm', 'a4', 0, 0, 70, 29.7, 70, 29.7, 3, 10, 'rect'], + '3421': ['reg', 'mm', 'a4', 0, 8.8, 70, 25.4, 70, 25.4, 3, 11, 'rect'], + 'L7409': ['reg', 'mm', 'a4', 19.5, 21, 57, 15, 57, 15, 3, 17, 'rect'], + 'LP56_52': ['reg', 'mm', 'a4', 0, 0, 52.5, 21.21, 52.5, 21.21, 4, 14, 'rect'], + + # Round labels + 'LP2_115R': ['reg', 'mm', 'a4', 47.75, 16.65, 114.5, 114.5, 114.5, 149.2, 1, 2, 'circle'], + 'LP6_88R': ['reg', 'mm', 'a4', 16, 14.5, 88, 88, 90, 90, 2, 3, 'circle'], + 'LP6_85R': ['reg', 'mm', 'a4', 17.5, 16, 85, 85, 90, 90, 2, 3, 'circle'], + 'LP6_76R': ['reg', 'mm', 'a4', 27, 31, 76, 76, 80, 79.5, 2, 3, 'circle'], + 'C2244': ['reg', 'mm', 'a4', 29.7, 33.9, 72, 72, 78.6, 78.6, 2, 3, 'circle'], + 'LP8_69R': ['reg', 'mm', 'a4', 34.5, 6, 69, 69, 72, 72, 2, 4, 'circle'], + 'L7670': ['reg', 'mm', 'a4', 5.25, 14.75, 63.5, 63.5, 68, 68, 3, 4, 'circle'], + 'LP15_51R': ['reg', 'mm', 'a4', 26.5, 17, 51, 51, 53, 53, 3, 5, 'circle'], + 'LP24_45R': ['reg', 'mm', 'a4', 9, 6, 45, 45, 49, 48, 4, 6, 'circle'], + 'L7780': ['reg', 'mm', 'a4', 16, 13.5, 40, 40, 46, 46, 4, 6, 'circle'], + 'LP35_37R': ['reg', 'mm', 'a4', 8.5, 13, 37, 37, 39, 39, 5, 7, 'circle'], + 'LP35_35R': ['reg', 'mm', 'a4', 9.5, 17, 35, 35, 39, 38, 5, 7, 'circle'], + 'LP40_32R': ['reg', 'mm', 'a4', 19, 10.35, 32, 32, 35, 34.9, 5, 8, 'circle'], + 'LP54_29R': ['reg', 'mm', 'a4', 8, 6, 29, 29, 33, 32, 6, 9, 'circle'], + 'LP70_25R': ['reg', 'mm', 'a4', 11.5, 14.5, 25, 25, 27, 27, 7, 10, 'circle'], + 'LP117_19R': ['reg', 'mm', 'a4', 11.5, 13, 19, 19, 21, 21, 9, 13, 'circle'], + 'LP216_13R': ['reg', 'mm', 'a4', 13.25, 10.25, 13, 13, 15.5, 15.5, 12, 18, 'circle'], + + # Oval labels + 'LP2_195OV': ['reg', 'mm', 'a4', 7.5, 8.5, 195, 138, 195, 142, 1, 2, 'circle'], + 'LP4_90OV': ['reg', 'mm', 'a4', 14, 12.5, 90, 135, 92, 137, 2, 2, 'circle'], + 'LP8_90OV': ['reg', 'mm', 'a4', 9.25, 15.95, 90, 62, 101.5, 67.7, 2, 4, 'circle'], + 'LP10_95OV': ['reg', 'mm', 'a4', 7, 8, 95, 53, 101, 57, 2, 5, 'circle'], + 'LP14_95OV': ['reg', 'mm', 'a4', 7, 17.5, 95, 34, 101, 38, 2, 7, 'circle'], + 'LP21_60OV': ['reg', 'mm', 'a4', 11, 10, 60, 34, 64, 40.5, 3, 7, 'circle'], + 'LP32_40OV': ['reg', 'mm', 'a4', 22, 21.5, 40, 30, 42, 32, 4, 8, 'circle'], + 'LP65_35OV': ['reg', 'mm', 'a4', 5.975, 13.3, 35.05, 16, 40.75, 21.2, 5, 13, 'circle'], + + # Square labels + 'LP6_95SQ': ['reg', 'mm', 'a4', 6.5, 3, 95, 95, 98, 98, 2, 3, 'rrect'], + 'LP12_65SQ': ['reg', 'mm', 'a4', 5, 15.5, 65, 65, 67.5, 67, 3, 4, 'rrect'], + 'LP15_51SQ': ['reg', 'mm', 'a4', 26.6, 17.2, 51, 51, 52.9, 52.9, 3, 5, 'rrect'], + 'LP35_37SQ': ['reg', 'mm', 'a4', 8.5 / 12, 13.3, 37, 37, 39, 38.9, 5, 7, 'rrect'], + 'LP70_25SQ': ['reg', 'mm', 'a4', 11.5, 14.5, 25, 25, 27, 27, 7, 10, 'rrect'], +} + + +def add_SVG_guide(x, y, orientation, colour, parent): + """ Create a sodipodi:guide node on the given parent + """ + + try: + # convert mnemonics to actual orientations + orientation = { + 'vert': '1,0', + 'horz': '0,1' + }[orientation] + except KeyError: + pass + + attribs = { + 'position': str(x) + "," + str(y), + 'orientation': orientation + } + + if colour is not None: + attribs[inkex.addNS('color', 'inkscape')] = colour + + etree.SubElement( + parent, + inkex.addNS('guide', 'sodipodi'), + attribs) + + +def delete_all_guides(document): + # getting the parent's tag of the guides + nv = document.xpath( + '/svg:svg/sodipodi:namedview', namespaces=inkex.NSS)[0] + + # getting all the guides + children = document.xpath('/svg:svg/sodipodi:namedview/sodipodi:guide', + namespaces=inkex.NSS) + + # removing each guides + for element in children: + nv.remove(element) + + +def draw_SVG_ellipse(rx, ry, cx, cy, style, parent): + + attribs = { + 'style': str(inkex.Style(style)), + inkex.addNS('cx', 'sodipodi'): str(cx), + inkex.addNS('cy', 'sodipodi'): str(cy), + inkex.addNS('rx', 'sodipodi'): str(rx), + inkex.addNS('ry', 'sodipodi'): str(ry), + inkex.addNS('type', 'sodipodi'): 'arc', + } + + etree.SubElement(parent, inkex.addNS('path', 'svg'), attribs) + + +def draw_SVG_rect(x, y, w, h, round, style, parent): + + attribs = { + 'style': str(inkex.Style(style)), + 'height': str(h), + 'width': str(w), + 'x': str(x), + 'y': str(y) + } + + if round: + attribs['ry'] = str(round) + + etree.SubElement(parent, inkex.addNS('rect', 'svg'), attribs) + + +def add_SVG_layer(parent, gid, label): + + layer = etree.SubElement(parent, 'g', { + 'id': gid, + inkex.addNS('groupmode', 'inkscape'): 'layer', + inkex.addNS('label', 'inkscape'): label + }) + + return layer + + +class LabelGuides(inkex.Effect): + + def __init__(self): + + inkex.Effect.__init__(self) + self.arg_parser.add_argument('--units', default="mm", help='The units to use for custom label sizing') + self.arg_parser.add_argument('--preset_tab', default='rrect', help='The preset section that is selected (other sections will be ignored)') + + # ROUNDED RECTANGLE PRESET OPTIONS + self.arg_parser.add_argument('--rrect_preset', default='L7167', help='Use the given rounded rectangle preset template') + self.arg_parser.add_argument('--rrect_radius', type=float, default=1, help='Rectangle corner radius') # RECTANGULAR PRESET OPTIONS + self.arg_parser.add_argument('--rect_preset', default='L7784', help='Use the given square-corner rectangle template') + + # CIRCULAR PRESET OPTIONS + self.arg_parser.add_argument('--circ_preset', default='LP2_115R', help='Use the given circular template') + + # CUSTOM LABEL OPTIONS + self.arg_parser.add_argument('--margin_l', type=float, default=8.5, help='Left page margin') + self.arg_parser.add_argument('--margin_t', type=float, default=13, help='Top page margin') + self.arg_parser.add_argument('--size_x', type=float, default=37, help='Label X size') + self.arg_parser.add_argument('--size_y', type=float, default=37, help='Label Y size') + self.arg_parser.add_argument('--pitch_x', type=float, default=39, help='Label X pitch') + self.arg_parser.add_argument('--pitch_y', type=float, default=39, help='Label Y pitch') + self.arg_parser.add_argument('--count_x', type=int, default=5, help='Number of labels across') + self.arg_parser.add_argument('--count_y', type=int, default=7, help='Number of labels down') + self.arg_parser.add_argument('--shapes', default='rect', help='Label shapes to draw') + + # GENERAL DRAWING OPTIONS + self.arg_parser.add_argument('--delete_existing_guides', type=inkex.Boolean, default=False, help='Delete existing guides from document') + self.arg_parser.add_argument('--draw_edge_guides', type=inkex.Boolean, default=True, help='Draw guides at label edges') + self.arg_parser.add_argument('--draw_centre_guides', type=inkex.Boolean, default=True, help='Draw guides at label centres') + self.arg_parser.add_argument('--inset', type=float, default=5, help='Inset to use for inset guides') + self.arg_parser.add_argument('--draw_inset_guides', type=inkex.Boolean, default=True, help='Draw guides inset to label edges') + self.arg_parser.add_argument('--draw_shapes', type=inkex.Boolean, default=True, help='Draw label outline shapes') + self.arg_parser.add_argument('--shape_inset', default=5, help='Inset to use for inset shapes') + self.arg_parser.add_argument('--draw_inset_shapes', type=inkex.Boolean, default=True, help='Draw shapes inset in the label outline') + self.arg_parser.add_argument('--set_page_size', type=inkex.Boolean, default=True, help='Set page size (presets only)') + + def _to_uu(self, val, unit): + """ + Transform a value in given units to User Units + """ + return self.svg.unittouu(str(val) + unit) + + def _get_page_size(self, size): + """ + Get a page size from a definition entry - can be in the form + [x, y], or a string (one of ['a4']) + """ + + if isinstance(size, (list,)): + # Explicit size + return size + elif size == "a4": + return [210, 297] + + # Failed to find a useful size, None will inhibit setting the size + return None + + def _set_SVG_page_size(self, document, x, y, unit): + """ + Set the SVG page size to the given absolute size. The viewbox is + also rescaled as needed to maintain the scale factor. + """ + + svg = document.getroot() + + # Re-calculate viewbox in terms of User Units + new_uu_w = self._to_uu(x, unit) + new_uu_h = self._to_uu(y, unit) + + # set SVG page size + svg.attrib['width'] = str(x) + unit + svg.attrib['height'] = str(y) + unit + + svg.attrib['viewBox'] = "0 0 %f %f" % (new_uu_w, new_uu_h) + + def _read_custom_options(self, options): + """ + Read custom label geometry options and produce + a dictionary of parameters for ingestion + """ + unit = options.units + + custom_opts = { + 'units': options.units, + 'page_size': None, + 'margin': { + 'l': self._to_uu(options.margin_l, unit), + 't': self._to_uu(options.margin_t, unit) + }, + 'size': { + 'x': self._to_uu(options.size_x, unit), + 'y': self._to_uu(options.size_y, unit) + }, + 'pitch': { + 'x': self._to_uu(options.pitch_x, unit), + 'y': self._to_uu(options.pitch_y, unit) + }, + 'count': { + 'x': options.count_x, + 'y': options.count_y + }, + 'shapes': options.shapes, + 'corner_rad': None, + } + + return custom_opts + + def _construct_preset_opts(self, preset_type, preset_id, options): + """Construct an options object for a preset label template + """ + preset = PRESETS[preset_id] + + unit = preset[1] + + opts = { + 'units': unit, + 'page_size': self._get_page_size(preset[2]), + 'margin': { + 'l': self._to_uu(preset[3], unit), + 't': self._to_uu(preset[4], unit) + }, + 'size': { + 'x': self._to_uu(preset[5], unit), + 'y': self._to_uu(preset[6], unit) + }, + 'pitch': { + 'x': self._to_uu(preset[7], unit), + 'y': self._to_uu(preset[8], unit) + }, + 'count': { + 'x': preset[9], + 'y': preset[10] + }, + 'shapes': preset[11], + 'corner_rad': None, + } + + # add addtional options by preset type + if preset_type == "rrect": + opts["corner_rad"] = self._to_uu(options.rrect_radius, unit) + + return opts + + def _get_regular_guides(self, label_opts, inset): + """ + Get the guides for a set of labels defined by a regular grid + + This is done so that irregular-grid presets can be defined if + needed + """ + + guides = {'v': [], 'h': []} + + x = label_opts['margin']['l'] + + # Vertical guides, left to right + for x_idx in range(label_opts['count']['x']): + + l_pos = x + inset + r_pos = x + label_opts['size']['x'] - inset + + guides['v'].extend([l_pos, r_pos]) + + # Step over to next label + x += label_opts['pitch']['x'] + + # Horizontal guides, bottom to top + y = label_opts['margin']['t'] + + for y_idx in range(label_opts['count']['y']): + + t_pos = y + inset + b_pos = y + label_opts['size']['y'] - inset + + guides['h'].extend([t_pos, b_pos]) + + # Step over to next label + y += label_opts['pitch']['y'] + + return guides + + def _draw_label_guides(self, document, label_opts, inset, colour): + """ + Draws label guides from a regular guide description object + """ + # convert to UU + inset = self._to_uu(inset, label_opts['units']) + + guides = self._get_regular_guides(label_opts, inset) + + # Get parent tag of the guides + nv = self.svg.namedview + + # Draw vertical guides + for g in guides['v']: + add_SVG_guide(g, 0, 'vert', colour, nv) + + # Draw horizontal guides + for g in guides['h']: + add_SVG_guide(0, self.svg.height - g, 'horz', colour, nv) + + def _draw_centre_guides(self, document, label_opts, colour): + """ + Draw guides in the centre of labels defined by the given options + """ + + guides = self._get_regular_guides(label_opts, 0) + nv = self.svg.namedview + + for g in range(0, len(guides['v']), 2): + pos = (guides['v'][g] + guides['v'][g + 1]) / 2 + add_SVG_guide(pos, 0, 'vert', colour, nv) + + for g in range(0, len(guides['h']), 2): + pos = (guides['h'][g] + guides['h'][g + 1]) / 2 + add_SVG_guide(0, self.svg.height - pos, 'horz', colour, nv) + + def _draw_shapes(self, document, label_opts, inset): + """ + Draw label shapes from a regular grid + """ + + style = { + 'stroke': '#000000', + 'stroke-width': self._to_uu(1, "px"), + 'fill': "none" + } + + inset = self._to_uu(inset, label_opts['units']) + + guides = self._get_regular_guides(label_opts, 0) + shape = label_opts['shapes'] + + shapeLayer = add_SVG_layer( + self.document.getroot(), + self.svg.get_unique_id("outlineLayer"), + "Label outlines") + + # draw shapes between every set of two guides + for xi in range(0, len(guides['v']), 2): + + for yi in range(0, len(guides['h']), 2): + + if shape == 'circle': + cx = (guides['v'][xi] + guides['v'][xi + 1]) / 2 + cy = (guides['h'][yi] + guides['h'][yi + 1]) / 2 + + rx = cx - guides['v'][xi] - inset + ry = cy - guides['h'][yi] - inset + + draw_SVG_ellipse(rx, ry, cx, cy, style, shapeLayer) + + elif shape in ["rect", "rrect"]: + + x = guides['v'][xi] + inset + w = guides['v'][xi + 1] - x - inset + + y = guides['h'][yi] + inset + h = guides['h'][yi + 1] - y - inset + + rnd = self._to_uu(label_opts['corner_rad'], + label_opts['units']) + + draw_SVG_rect(x, y, w, h, rnd, style, shapeLayer) + def _set_page_size(self, document, label_opts): + """ + Set the SVG page size from the given label template definition + """ + + size = label_opts['page_size'] + unit = label_opts['units'] + + if size is not None: + self._set_SVG_page_size(document, size[0], size[1], unit) + + def effect(self): + """ + Perform the label template generation effect + """ + + preset_type = self.options.preset_tab.strip('"') + + if preset_type == "custom": + # construct from parameters + label_opts = self._read_custom_options(self.options) + else: + # construct from a preset + + # get the preset ID from the relevant enum entry + preset_id = { + "rrect": self.options.rrect_preset, + "rect": self.options.rect_preset, + "circ": self.options.circ_preset, + }[preset_type] + + label_opts = self._construct_preset_opts(preset_type, preset_id, + self.options) + + if self.options.delete_existing_guides: + delete_all_guides(self.document) + + # Resize page first, otherwise guides won't be in the right places + if self.options.set_page_size: + self._set_page_size(self.document, label_opts) + + if self.options.draw_edge_guides: + self._draw_label_guides(self.document, label_opts, 0, + GUIDE_COLOURS['edge']) + + if self.options.draw_centre_guides: + self._draw_centre_guides(self.document, label_opts, + GUIDE_COLOURS['centre']) + + if self.options.draw_inset_guides and self.options.inset > 0.0: + self._draw_label_guides(self.document, label_opts, + self.options.inset, + GUIDE_COLOURS['inset']) + + if self.options.draw_shapes: + self._draw_shapes(self.document, label_opts, 0) + + if self.options.draw_inset_shapes: + self._draw_shapes(self.document, label_opts, + self.options.shape_inset) + + +if __name__ == '__main__': + LabelGuides().run() diff --git a/extensions/fablabchemnitz/lasercut_jigsaw/lasercut_jigsaw.inx b/extensions/fablabchemnitz/lasercut_jigsaw/lasercut_jigsaw.inx new file mode 100644 index 00000000..5731b608 --- /dev/null +++ b/extensions/fablabchemnitz/lasercut_jigsaw/lasercut_jigsaw.inx @@ -0,0 +1,75 @@ + + + Lasercut Jigsaw + fablabchemnitz.de.lasercut_jigsaw + + + + 4278190335 + 65535 + + + + 100.0 + 80.0 + 5.0 + + + + + + + + false + 20.0 + 5.0 + + + + + + 5 + 4 + + + + 0.5 + 0.4 + false + 10 + true + 12345 + false + 0 + + + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/lasercut_jigsaw/lasercut_jigsaw.py b/extensions/fablabchemnitz/lasercut_jigsaw/lasercut_jigsaw.py new file mode 100644 index 00000000..dc4890c2 --- /dev/null +++ b/extensions/fablabchemnitz/lasercut_jigsaw/lasercut_jigsaw.py @@ -0,0 +1,498 @@ +#!/usr/bin/env python3 +''' +Copyright (C) 2011 Mark Schafer + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +''' + +# Build a Jigsaw puzzle for Lasercutting. +# User defines: +# - dimensions, +# - number of pieces in X and Y, +# - notch size, +# - random amount of perturbation for uniqueness, +# - border and rounding for border and inner corners +# - random or random seed for repeats + +### 0.1 make basic jigsaw for lasercut - March 2011 +### 0.2 add random seed so repeatable, add pieces for manual booleans - May 2011 +### 0.3 add some no-knob edges - June 2019 + +### Todo +# add option to cut pieces: +# - taking two rows(cols) at a time - reverse the second one and concat on end - add z to close +# - taking a row and a col - do intersect = piece. + +__version__ = "0.3" + +import sys, math, random, copy +from lxml import etree +import inkex +from inkex import Path, CubicSuperPath, Color +from inkex.command import inkscape + +def dirtyFormat(path): + return str(path).replace('[','').replace(']','').replace(',','').replace('\'','') + +def randomize(x_y, radius, norm=True, absolute=False): + """ return x,y moved by a random amount inside a radius. + use uniform distribution unless + - norm = True - then use a normal distribution + If absolute is true - ensure random is only added to x,y """ + # if norm: + # r = abs(random.normalvariate(0.0,0.5*radius)) + # else: + # r = random.uniform(0.0,radius) + x, y = x_y + a = random.uniform(0.0,2*math.pi) + x += math.cos(a)*radius + y += math.sin(a)*radius + if absolute: + x = abs(x) + y = abs(y) + return [x, y] + +def add_rounded_rectangle(startx, starty, radius, width, height, style, name, parent, mask=False): + line_path = [['M', [startx, starty+radius]]] + if radius > 0.0: # rounded corners + line_path.append(['c', [0, -radius/2, radius/2, -radius, radius, -radius]]) + if mask == "Below": + line_path.append(['m', [width-2*radius, 0,]]) + else: + line_path.append(['c', [radius/2, 0, width-2*radius-radius/2, 0, width-2*radius,0 ]]) # top line + line_path.append(['c', [radius/2, 0, radius, radius/2, radius, radius]]) + line_path.append(['c', [0, radius/2, 0, height-2*radius-radius/2, 0, height-2*radius]]) # RHS line + line_path.append(['c', [0, radius/2, -radius/2, radius, -radius, radius]]) + line_path.append(['c', [-radius/2,0, -width+2*radius+radius/2,0, -width+2*radius,0]]) # bottom line + line_path.append(['c', [-radius/2, 0, -radius, -radius/2, -radius, -radius]]) + if mask == "Right": + line_path.append(['m', [0, height]]) + else: + line_path.append(['c', [0, -radius/2, 0, -height+2*radius+radius/2, 0, -height+2*radius]]) # LHS line + else: # square corners + if mask == "Below": + line_path.append(['m', [width, 0]]) + line_path.append(['l', [0, height, -width, 0, 0, -height]]) + elif mask == "Right": + line_path.append(['l', [width, 0, 0, height, -width, 0,]]) + else: # separate + line_path.append(['l', [width, 0, 0, height, -width, 0, 0, -height]]) + # + #sys.stderr.write("%s\n"% line_path) + attribs = {'style':str(inkex.Style(style)), inkex.addNS('label','inkscape'):name, 'd':dirtyFormat(line_path)} + #sys.stderr.write("%s\n"% attribs) + etree.SubElement(parent, inkex.addNS('path','svg'), attribs ) + +###---------------------- +### all for intersection from http://www.kevlindev.com/gui/index.htm + +def get_derivative(polynomial): + deriv = [] + for i in range(len(polynomial)): + deriv.append(i* polynomial[i]) + return deriv + +class LasercutJigsaw(inkex.EffectExtension): + + def add_arguments(self, pars): + # General settings + pars.add_argument("--tab") + + #Style + pars.add_argument("--color_border", type=Color, default='4278190335', help="Border color") + pars.add_argument("--color_jigsaw", type=Color, default='65535', help="Jigsaw lines color") + + #Dimensions + pars.add_argument("--width", type=float, default=50.0, help="The Box Width - in the X dimension") + pars.add_argument("--height", type=float, default=30.0, help="The Box Height - in the Y dimension") + pars.add_argument("--innerradius", type=float, default=5.0, help="0 implies square corners") + pars.add_argument("--units", default="cm", help="The unit of the box dimensions") + pars.add_argument("--border", type=inkex.Boolean, default=False, help="Add Outer Surround") + pars.add_argument("--borderwidth", type=float, default=10.0, help="Size of external surrounding border.") + pars.add_argument("--outerradius", type=float, default=5.0, help="0 implies square corners") + pars.add_argument("--pack", default="Below", help="Where to place backing piece on page") + pars.add_argument("--pieces_W", type=int, default=11, help="How many pieces across") + pars.add_argument("--pieces_H", type=int, default=11, help="How many pieces down") + + #Notches + pars.add_argument("--notch_percent", type=float, default=0.0, help="Notch relative size. 0 to 1. 0.15 is good") + pars.add_argument("--rand", type=float, default=0.1, help="Amount to perturb the basic piece grid.") + pars.add_argument("--noknob_frequency", type=float, default=10, help="Percentage of smooth-sided edges.") + pars.add_argument("--smooth_edges", type=inkex.Boolean, default=False, help="Allow pieces with smooth edges.") + pars.add_argument("--use_seed", type=inkex.Boolean, default=False, help="Use the kerf value as the drawn line width") + pars.add_argument("--seed", type=int, default=12345, help="Random seed for repeatability") + pars.add_argument("--pieces", type=inkex.Boolean, default=False, help="Create separated pieces") + pars.add_argument("--shift", type=float, default=0.0, help="Shifting for each piece (%)") + + def add_jigsaw_horiz_line(self, startx, starty, stepx, steps, width, style, name, parent): + """ complex version All C smooth + - get ctrl pt offset and use on both sides of each node (negate for smooth)""" + line_path = [] + # starts with an M - then C with first point same as M = smooth (also last point still in C but doubled) + line_path.append(['M', [startx, starty]]) + clist = [startx, starty] # duplicate 1st point so its smooth + for i in range(1,steps+1): + flip = 1 + if random.uniform(0.0,1.0) < 0.5: + flip = -1 + do_smooth = False + if self.smooth_edges: + if random.uniform(0.0,100.0) < self.noknob_frequency: + do_smooth = True + if do_smooth: + pt1 = randomize((startx+i*stepx/2+stepx/2*(i-1), starty), self.random_radius/3, True) + rand1 = randomize((0, 0), self.random_radius/4, True, True) + # up to pt1 + ctrl1 = (-self.notch_step*1.5, self.notch_step*1.5) + clist.extend([pt1[0]+ctrl1[0]-rand1[0], pt1[1]-ctrl1[1]*flip+rand1[1]*flip]) + clist.extend(pt1) + # last ctrl point for next step + clist.extend([pt1[0]-ctrl1[0]+rand1[0], pt1[1]+ctrl1[1]*flip-rand1[1]*flip]) + else: + pt1 = randomize((startx-self.notch_step+i*stepx/2+stepx/2*(i-1), starty+self.notch_step/4*flip), self.random_radius/3, True) + pt2 = randomize((startx-self.notch_step+i*stepx/2+stepx/2*(i-1), starty-self.notch_step*flip), self.random_radius/3, True) + # pt3 is foor tip of the notch - required ? + pt4 = randomize((startx+self.notch_step+i*stepx/2+stepx/2*(i-1), starty-self.notch_step*flip), self.random_radius/3, True) #mirror of 2 + pt5 = randomize((startx+self.notch_step+i*stepx/2+stepx/2*(i-1), starty+self.notch_step/4*flip), self.random_radius/3, True) # mirror of pt1 + # Create random local value for x,y of handle - then reflect to enforce smoothness + rand1 = randomize((0, 0), self.random_radius/4, True, True) + rand2 = randomize((0, 0), self.random_radius/4, True, True) + rand4 = randomize((0, 0), self.random_radius/4, True, True) + rand5 = randomize((0, 0), self.random_radius/4, True, True) + # up to pt1 + #ctrl1_2 = (startx+i*stepx/2+(i-1)*stepx/2, starty-self.notch_step/3) + ctrl1 = (self.notch_step/1.2, -self.notch_step/3) + clist.extend([pt1[0]-ctrl1[0]-rand1[0], pt1[1]-ctrl1[1]*flip+rand1[1]*flip]) + clist.extend(pt1) + # up to pt2 + clist.extend([pt1[0]+ctrl1[0]+rand1[0], pt1[1]+ctrl1[1]*flip-rand1[1]*flip]) + ctrl2 = (0, -self.notch_step/1.2) + clist.extend([pt2[0]+ctrl2[0]-rand2[0], pt2[1]-ctrl2[1]*flip+rand2[1]*flip]) + clist.extend(pt2) + # up to pt4 + clist.extend([pt2[0]-ctrl2[0]+rand2[0], pt2[1]+ctrl2[1]*flip-rand2[1]*flip]) + ctrl4 = (0, self.notch_step/1.2) + clist.extend([pt4[0]+ctrl4[0]-rand4[0], pt4[1]-ctrl4[1]*flip+rand4[1]*flip]) + clist.extend(pt4) + # up to pt5 + clist.extend([pt4[0]-ctrl4[0]+rand4[0], pt4[1]+ctrl4[1]*flip-rand4[1]*flip]) + ctrl5 = (self.notch_step/1.2, self.notch_step/3) + clist.extend([pt5[0]-ctrl5[0]+rand5[0], pt5[1]-ctrl5[1]*flip-rand5[1]*flip]) + clist.extend(pt5) + # last ctrl point for next step + clist.extend([pt5[0]+ctrl5[0]-rand5[0], pt5[1]+ctrl5[1]*flip+rand5[1]*flip]) + # + clist.extend([width, starty, width, starty]) # doubled up at end for smooth curve + line_path.append(['C',clist]) + borderLineStyle = str(inkex.Style(style)) + attribs = { 'style':borderLineStyle, 'id':name, 'd':dirtyFormat(line_path)} + etree.SubElement(parent, inkex.addNS('path','svg'), attribs ) + + def create_horiz_blocks(self, group, gridy, style): + path = lastpath = 0 + blocks = [] + count = 0 + for node in gridy.iterchildren(): + if node.tag == inkex.addNS('path','svg'): # which they ALL should because we just made them + path = CubicSuperPath(node.get('d')) # turn it into a global C style SVG path + #sys.stderr.write("count: %d\n"% count) + if count == 0: # first one so use the top border + spath = node.get('d') # work on string instead of cubicpath + lastpoint = spath.split()[-2:] + lastx = float(lastpoint[0]) + lasty = float(lastpoint[1]) + #sys.stderr.write("lastpoint: %s\n"% lastpoint) + spath += ' %f %f %f %f %f %f' % (lastx,lasty-self.inner_radius, lastx,1.5*self.inner_radius, lastx,self.inner_radius) + spath += ' %f %f %f %f %f %f' % (self.width,self.inner_radius/2, self.width-self.inner_radius/2,0, self.width-self.inner_radius,0) + spath += ' %f %f %f %f %f %f' % (self.width-self.inner_radius/2,0, 1.5*self.inner_radius,0, self.inner_radius, 0) + spath += ' %f %f %f %f %f %f' % (self.inner_radius/2, 0, 0,self.inner_radius/2, 0,self.inner_radius) + spath += 'z' + #sys.stderr.write("spath: %s\n"% spath) + # + name = "RowPieces_%d" % (count) + attribs = { 'style':style, 'id':name, 'd':spath } + n = etree.SubElement(group, inkex.addNS('path','svg'), attribs ) + blocks.append(n) # for direct traversal later + else: # internal line - concat a reversed version with the last one + thispath = copy.deepcopy(path) + for i in range(len(thispath[0])): # reverse the internal C pairs + thispath[0][i].reverse() + thispath[0].reverse() # reverse the entire line + lastpath[0].extend(thispath[0]) # append + name = "RowPieces_%d" % (count) + attribs = { 'style':style, 'id':name, 'd':dirtyFormat(lastpath) } + n = etree.SubElement(group, inkex.addNS('path','svg'), attribs ) + blocks.append(n) # for direct traversal later + n.set('d', n.get('d')+'z') # close it + # + count += 1 + lastpath = path + # do the last row + spath = node.get('d') # work on string instead of cubicpath + lastpoint = spath.split()[-2:] + lastx = float(lastpoint[0]) + lasty = float(lastpoint[1]) + #sys.stderr.write("lastpoint: %s\n"% lastpoint) + spath += ' %f %f %f %f %f %f' % (lastx,lasty+self.inner_radius, lastx,self.height-1.5*self.inner_radius, lastx,self.height-self.inner_radius) + spath += ' %f %f %f %f %f %f' % (self.width,self.height-self.inner_radius/2, self.width-self.inner_radius/2,self.height, self.width-self.inner_radius,self.height) + spath += ' %f %f %f %f %f %f' % (self.width-self.inner_radius/2,self.height, 1.5*self.inner_radius,self.height, self.inner_radius, self.height) + spath += ' %f %f %f %f %f %f' % (self.inner_radius/2, self.height, 0,self.height-self.inner_radius/2, 0,self.height-self.inner_radius) + spath += 'z' + # + name = "RowPieces_%d" % (count) + attribs = { 'style':style, 'id':name, 'd':spath } + n = etree.SubElement(group, inkex.addNS('path','svg'), attribs ) + blocks.append(n) # for direct traversal later + # + return(blocks) + + + def create_vert_blocks(self, group, gridx, style): + path = lastpath = 0 + blocks = [] + count = 0 + for node in gridx.iterchildren(): + if node.tag == inkex.addNS('path','svg'): # which they ALL should because we just made them + path = CubicSuperPath(node.get('d')) # turn it into a global C style SVG path + #sys.stderr.write("count: %d\n"% count) + if count == 0: # first one so use the right border + spath = node.get('d') # work on string instead of cubicpath + lastpoint = spath.split()[-2:] + lastx = float(lastpoint[0]) + lasty = float(lastpoint[1]) + #sys.stderr.write("lastpoint: %s\n"% lastpoint) + spath += ' %f %f %f %f %f %f' % (lastx+self.inner_radius/2,lasty, self.width-1.5*self.inner_radius,lasty, self.width-self.inner_radius, lasty) + spath += ' %f %f %f %f %f %f' % (self.width-self.inner_radius/2,lasty, self.width,self.height-self.inner_radius/2, self.width,self.height-self.inner_radius) + spath += ' %f %f %f %f %f %f' % (self.width,self.height-1.5*self.inner_radius, self.width, 1.5*self.inner_radius, self.width,self.inner_radius) + spath += ' %f %f %f %f %f %f' % (self.width,self.inner_radius/2, self.width-self.inner_radius/2,0, self.width-self.inner_radius,0) + spath += 'z' + #sys.stderr.write("spath: %s\n"% spath) + # + name = "ColPieces_%d" % (count) + attribs = { 'style':style, 'id':name, 'd':spath } + n = etree.SubElement(group, inkex.addNS('path','svg'), attribs ) + blocks.append(n) # for direct traversal later + else: # internal line - concat a reversed version with the last one + thispath = copy.deepcopy(path) + for i in range(len(thispath[0])): # reverse the internal C pairs + thispath[0][i].reverse() + thispath[0].reverse() # reverse the entire line + lastpath[0].extend(thispath[0]) # append + name = "ColPieces_%d" % (count) + attribs = { 'style':style, 'id':name, 'd':dirtyFormat(lastpath) } + n = etree.SubElement(group, inkex.addNS('path','svg'), attribs ) + blocks.append(n) # for direct traversal later + n.set('d', n.get('d')+'z') # close it + # + count += 1 + lastpath = path + # do the last one (LHS) + spath = node.get('d') # work on string instead of cubicpath + lastpoint = spath.split()[-2:] + lastx = float(lastpoint[0]) + lasty = float(lastpoint[1]) + #sys.stderr.write("lastpoint: %s\n"% lastpoint) + spath += ' %f %f %f %f %f %f' % (lastx-self.inner_radius,lasty, 1.5*self.inner_radius, lasty, self.inner_radius,lasty) + spath += ' %f %f %f %f %f %f' % (self.inner_radius/2,lasty, 0,lasty-self.inner_radius/2, 0,lasty-self.inner_radius) + spath += ' %f %f %f %f %f %f' % (0,lasty-1.5*self.inner_radius, 0,1.5*self.inner_radius, 0,self.inner_radius) + spath += ' %f %f %f %f %f %f' % (self.inner_radius/2,0, self.inner_radius,0, 1.5*self.inner_radius, 0) + spath += 'z' + # + name = "ColPieces_%d" % (count) + attribs = { 'style':style, 'id':name, 'd':spath } + n = etree.SubElement(group, inkex.addNS('path','svg'), attribs ) + blocks.append(n) # for direct traversal later + # + return(blocks) + + + def create_pieces(self, jigsaw, gridx, gridy): + """ Loop through each row """ + # Treat outer edge carefully as border runs around. So special code the edges + # Internal lines should be in pairs - with second line reversed and appended to first. Close with a 'z' + # Create new group + g_attribs = {inkex.addNS('label','inkscape'):'JigsawPieces:X' + \ + str( self.pieces_W )+':Y'+str( self.pieces_H ) } + jigsaw_pieces = etree.SubElement(jigsaw, 'g', g_attribs) + jigsaw_pieces_id = self.svg.get_unique_id("pieces-") + jigsaw_pieces.attrib['id'] = jigsaw_pieces_id + borderLineStyle = str(inkex.Style(self.borderLineStyle)) + + xblocks = self.create_horiz_blocks(jigsaw_pieces, gridy, borderLineStyle) + yblocks = self.create_vert_blocks(jigsaw_pieces, gridx, borderLineStyle) + + # for each xblock intersect it with each Y block + puzzlePartNo = 1 + allPathPairsToIntersect = [] + allPathsToDelete = [] + + for x in range(len(xblocks)): + for y in range(len(yblocks)): + allPathPairsToIntersect.append([copy.copy(xblocks[x]), copy.copy(yblocks[y])]) + allPathsToDelete.append(xblocks[x]) + allPathsToDelete.append(yblocks[y]) + + for pair in allPathPairsToIntersect: + pair[0].attrib['id'] = str(puzzlePartNo) + "_X" + pair[1].attrib['id'] = str(puzzlePartNo) + "_Y" + xId = pair[0].get('id') + yId = pair[1].get('id') + #self.msg("intersecting {} with {}".format(xId, yId)) + puzzlePartNo += 1 + jigsaw_pieces.append(pair[0]) + jigsaw_pieces.append(pair[1]) + + for pathToDelete in allPathsToDelete: + pathToDelete.delete() + + actions_list = [] + for pair in allPathPairsToIntersect: + actions_list.append("select:{}".format(pair[0].attrib['id'])) + actions_list.append("select:{}".format(pair[1].attrib['id'])) + actions_list.append("SelectionIntersect") + actions_list.append("EditDeselect") + + #self.msg(actions_list) + + #workaround to fix it (we use export to tempfile instead processing and saving again) + tempfile = self.options.input_file + "-intersected.svg" + with open(tempfile, 'wb') as fp: + fp.write(self.svg.tostring()) + extra_param = "--batch-process" + actions_list.append("export-type:svg") + actions_list.append("export-filename:{}".format(tempfile)) + actions_list.append("export-do") + actions = ";".join(actions_list) + #self.msg(actions) + cli_output = inkscape(tempfile, extra_param, actions=actions) #process recent file + if len(cli_output) > 0: + self.msg("Inkscape returned the following output when trying to run the file export; the file export may still have worked:") + self.msg(cli_output) + + # replace current document with content of temp copy file + self.document = inkex.load_svg(tempfile) + # update self.svg + self.svg = self.document.getroot() + + row = 1 + col = 1 + offsetW = self.options.shift / 100 * (self.options.width / self.options.pieces_W) + offsetH = self.options.shift / 100 * (self.options.height / self.options.pieces_H) + for jigsaw_piece in self.svg.getElementById(jigsaw_pieces_id).getchildren(): + jigsaw_piece.apply_transform() + jigsaw_piece.set('transform', 'translate(%f,%f)' % (-col * offsetH, 0)) + jigsaw_piece.apply_transform() + jigsaw_piece.set('transform', 'translate(%f,%f)' % (0, row * offsetW)) + jigsaw_piece.apply_transform() + currentPiece = int(jigsaw_piece.get('id').split('_')[0]) + #self.msg("piece {} zeile {} Spalte {}".format(currentPiece, row, col)) + if currentPiece % self.options.pieces_W == 0: + row += 1 + col -= self.options.pieces_W + col += 1 + + def effect(self): + + # internal useful variables + self.stroke_width = 0.1 # default for visiblity + self.borderLineStyle = {'stroke': self.options.color_border, 'fill': 'none', 'stroke-width': self.stroke_width, + 'stroke-linecap': 'butt', 'stroke-linejoin': 'miter'} + self.jigsawLineStyle = {'stroke': self.options.color_jigsaw, 'fill': 'none', 'stroke-width': self.stroke_width, + 'stroke-linecap': 'butt', 'stroke-linejoin': 'miter'} + + + # document dimensions (for centering) + docW = self.svg.unittouu(self.document.getroot().get('width')) + docH = self.svg.unittouu(self.document.getroot().get('height')) + + # extract fields from UI + self.width = self.svg.unittouu( str(self.options.width) + self.options.units ) + self.height = self.svg.unittouu( str(self.options.height) + self.options.units ) + self.pieces_W = self.options.pieces_W + self.pieces_H = self.options.pieces_H + average_block = (self.width/self.pieces_W + self.height/self.pieces_H) / 2 + self.notch_step = average_block * self.options.notch_percent / 3 # 3 = a useful notch size factor + self.smooth_edges = self.options.smooth_edges + self.noknob_frequency = self.options.noknob_frequency + self.random_radius = self.options.rand * average_block / 5 # 5 = a useful range factor + self.inner_radius = self.options.innerradius + if self.inner_radius < 0.01: self.inner_radius = 0.0 # snap to 0 for UI error when setting spinner to 0.0 + self.border = self.options.border + self.borderwidth = self.options.borderwidth + self.outer_radius = self.options.outerradius + if self.outer_radius < 0.01: self.outer_radius = 0.0 # snap to 0 for UI error when setting spinner to 0.0 + self.pack = self.options.pack + # pieces + self.pieces = self.options.pieces + # random function + if not self.options.use_seed: + random.seed(self.options.seed) + + # + # set up the main object in the current layer - group gridlines + g_attribs = {inkex.addNS('label','inkscape'):'Jigsaw:X' + \ + str( self.pieces_W )+':Y'+str( self.pieces_H ) } + jigsaw_group = etree.SubElement(self.svg.get_current_layer(), 'g', g_attribs) + #Group for X grid + g_attribs = {inkex.addNS('label','inkscape'):'X_Gridlines'} + gridx = etree.SubElement(jigsaw_group, 'g', g_attribs) + #Group for Y grid + g_attribs = {inkex.addNS('label','inkscape'):'Y_Gridlines'} + gridy = etree.SubElement(jigsaw_group, 'g', g_attribs) + + # Draw the Border + add_rounded_rectangle(0,0, self.inner_radius, self.width, self.height, self.borderLineStyle, 'innerborder', jigsaw_group) + # Do the Border + if self.border: + add_rounded_rectangle(-self.borderwidth,-self.borderwidth, self.outer_radius, self.borderwidth*2+self.width, + self.borderwidth*2+self.height, self.borderLineStyle, 'outerborder', jigsaw_group) + # make a second copy below the jigsaw for the cutout BG + if self.pack == "Below": + add_rounded_rectangle(-self.borderwidth,self.borderwidth+ self.height, self.outer_radius, self.borderwidth*2+self.width, + self.borderwidth*2+self.height, self.borderLineStyle, 'BG', jigsaw_group, self.pack) + elif self.pack == "Right": + add_rounded_rectangle(self.width+self.borderwidth,-self.borderwidth, self.outer_radius, self.borderwidth*2+self.width, + self.borderwidth*2+self.height, self.borderLineStyle, 'BG', jigsaw_group, self.pack) + else: # Separate + add_rounded_rectangle(self.width+self.borderwidth*2,-self.borderwidth, self.outer_radius, self.borderwidth*2+self.width, + self.borderwidth*2+self.height, self.borderLineStyle, 'BG', jigsaw_group) + + # Step through the Grid + Xstep = self.width / (self.pieces_W) + Ystep = self.height / (self.pieces_H) + # Draw Horizontal lines on Y step with Xstep notches + for i in range(1, self.pieces_H): + self.add_jigsaw_horiz_line(0, Ystep*i, Xstep, self.pieces_W, self.width, self.jigsawLineStyle, 'YDiv'+str(i), gridy) + # Draw Vertical lines on X step with Ystep notches + for i in range(1, self.pieces_W): + self.add_jigsaw_horiz_line(0, Xstep*i, Ystep, self.pieces_H, self.height, self.jigsawLineStyle, 'XDiv'+str(i), gridx) + # Rotate lines into pos + # actualy transform can have multiple transforms in it e.g. 'translate(10,10) rotate(10)' + for node in gridx.iterchildren(): + if node.tag == inkex.addNS('path','svg'): + node.set('transform', 'translate(%f,%f) rotate(90)' % (self.width, 0)) + node.apply_transform() + # center the jigsaw + jigsaw_group.set('transform', 'translate(%f,%f)' % ( (docW-self.width)/2, (docH-self.height)/2 ) ) + + # pieces + if self.pieces: + gridx.delete() #delete the previous x generated stuff because we have single pieces instead! + gridy.delete() #delete the previous y generated stuff because we have single pieces instead! + jigsaw_group.getchildren()[0].delete() #delete inner border + self.create_pieces(jigsaw_group, gridx,gridy) + +if __name__ == '__main__': + LasercutJigsaw().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/lasercut_polygon/lasercut_polygon.inx b/extensions/fablabchemnitz/lasercut_polygon/lasercut_polygon.inx new file mode 100644 index 00000000..87a45517 --- /dev/null +++ b/extensions/fablabchemnitz/lasercut_polygon/lasercut_polygon.inx @@ -0,0 +1,70 @@ + + + Lasercut Polygon + fablabchemnitz.de.lasercut_polygon + + + + + + + + + + + + + + + 1.0 + 3 + + + + + + 0.0 + + + + + + + 1.0 + 3 + + + + + + 0.0 + + + + + + + + 0.1 + 1 + 1923076095 + 4012452351 + 2500 + 85 + 0 + false + =pass%n:%s:%i:%c= + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/lasercut_polygon/lasercut_polygon.py b/extensions/fablabchemnitz/lasercut_polygon/lasercut_polygon.py new file mode 100644 index 00000000..7b2448bb --- /dev/null +++ b/extensions/fablabchemnitz/lasercut_polygon/lasercut_polygon.py @@ -0,0 +1,180 @@ +#! /usr/bin/env python +''' +Generates Inkscape SVG file containing up to two polygons or circle taking kerf and clearance into account + +Copyright (C) 2016 Thore Mehr thore.mehr@gmail.com +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +''' +__version__ = "0.8" ### please report bugs, suggestions etc to bugs@twot.eu ### + +import inkex +import math +from lxml import etree +from inkex import Color + + +def drawS(XYstring,color): # Draw lines from a list + name='part' + style = { 'stroke': color, 'fill': 'none' } + drw = {'style':str(inkex.Style(style)),inkex.addNS('label','inkscape'):name,'d':XYstring} + etree.SubElement(parent, inkex.addNS('path','svg'), drw ) + return + +def groupdraw(XYstrings,colors) : + if len(XYstrings)==1: + drawS(XYstrings[0],colors[0]) + return + grp_name = 'Group' + grp_attribs = {inkex.addNS('label','inkscape'):grp_name} + grp = etree.SubElement(parent, 'g', grp_attribs)#the group to put everything in + name='part' + for i in range(len(XYstrings)): + style = { 'stroke': colors[i], 'fill': 'none' } + drw = {'style':str(inkex.Style(style)),inkex.addNS('label','inkscape'):name+str(i),'d':XYstrings[i]} + etree.SubElement(grp, inkex.addNS('path','svg'), drw ) + return + +def svg_from_points(points,offset): + s='M'+str(points[0][0]+offset[0])+','+str(points[0][1]+offset[1]) + for i in range(1,len(points)): + s+='L'+str(points[i][0]+offset[0])+','+str(points[i][1]+offset[1]) + s+='Z' + return s + +class LasercutPolygon(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument('--page') + pars.add_argument('--unit', default='mm', help='Measure Units') + pars.add_argument('--o_type', type=int, default=1, help='Outer type') + pars.add_argument('--o_radius',type=float, default=100, help='Outer Radius') + pars.add_argument('--o_edges', type=int, default=1, help='Outer edges') + pars.add_argument('--o_r_type', type=int, default=1, help='Outer radius type') + pars.add_argument('--o_offset',type=float, default=100, help='Outer Radius') + pars.add_argument('--i_type', type=int, default=1, help='Inner type') + pars.add_argument('--i_radius',type=float, default=100, help='Inner Radius') + pars.add_argument('--i_edges', type=int, default=1, help='Inner edges') + pars.add_argument('--i_r_type', type=int, default=1, help='Inner radius type') + pars.add_argument('--i_offset',type=float, default=100, help='Outer Radius') + pars.add_argument('--kerf',type=float, default=0.5, help='Kerf (width) of cut') + pars.add_argument('--spacing',type=float, default=0.5) + pars.add_argument('--color1', type=Color, default='1923076095') + pars.add_argument('--color2', type=Color, default='4012452351') + pars.add_argument('--intensity', type=int, default=1) + pars.add_argument('--speed', type=int, default=1) + pars.add_argument('--pass_offset', type=int, default=1) + pars.add_argument('--displaylasertag', type=inkex.Boolean, default=False) + pars.add_argument('--lasertag', default="=pass%n:%s:%i:%c=") + + def effect(self): + global parent,nomTab,equalTabs,thickness,kerf,correction + + # Get access to main SVG document element and get its dimensions. + svg = self.document.getroot() + + # Get the attibutes: + widthDoc = self.svg.unittouu(svg.get('width')) + heightDoc = self.svg.unittouu(svg.get('height')) + + parent=self.svg.get_current_layer() + + # Get script's option values. + unit=self.options.unit + kerf = self.svg.unittouu( str(self.options.kerf) + unit ) + spacing = self.svg.unittouu( str(self.options.spacing) + unit ) + + o_type=self.options.o_type + o_edges=self.options.o_edges + o_r_type=self.options.o_r_type + o_radius=self.svg.unittouu(str(self.options.o_radius)+unit)+kerf + o_offset=math.radians(-self.options.o_offset)+math.pi + + i_type=self.options.i_type + i_edges=self.options.i_edges + i_r_type=self.options.i_r_type + i_radius=self.svg.unittouu(str(self.options.i_radius)+unit)+kerf + i_offset=math.radians(-self.options.i_offset)+math.pi + + color1=self.options.color1 + color2=self.options.color2 + intensity=self.options.intensity + speed=self.options.speed + pass_offset=self.options.pass_offset + lasertag=self.options.lasertag + + if (o_r_type==2 and o_type==2): + #a/sin(alpa)=b/sin(beta)=c/sin(gamma) + #b=o_radius, alpha=(2*math.pi/o_edges), gamma=pi/2 , alpha+beta+gamma=pi->beta=pi-alpha+gamma + #search for c + #c=b*(sin(gamma)/sin(betta)) + beta=math.pi/2-(math.pi/o_edges) + o_radius/=math.sin(beta) + if (o_r_type==3 and o_type==2): + beta=math.pi/2-(math.pi/o_edges) + o_radius*=math.sin(beta)/math.sin(math.pi/o_edges) + if (i_r_type==2 and i_type==3): + #a/sin(alpa)=b/sin(beta)=c/sin(gamma) + #b=o_radius, alpha=(2*math.pi/o_edges), gamma=pi/2 , alpha+beta+gamma=pi->beta=pi-alpha+gamma + #search for c + #c=b*(sin(gamma)/sin(betta)) + beta=math.pi/2-(math.pi/i_edges) + i_radius/=math.sin(beta) + if (i_r_type==3 and i_type==3): + beta=math.pi/2-(math.pi/i_edges) + i_radius*=math.sin(beta)/math.sin(math.pi/o_edges) + + + #text = etree.Element(inkex.addNS('text','svg')) + #text.text = "Outside:"+str(self.uutounit(cabinet_width,unit))+"x"+str(self.uutounit(cabinet_depth,unit))+"x"+str(self.uutounit(cabinet_height,unit))+" " + #layer.append(text) + + + if(o_type==1): + s=['M '+str(spacing)+','+str(o_radius+spacing)+'a'+str(o_radius)+','+str(o_radius)+' 0 1,0 '+str(2*o_radius)+',0'+'a'+str(o_radius)+','+str(o_radius)+' 0 1,0 '+str(-2*o_radius)+',0'] + if(o_type==2): + stepsize=2*math.pi/o_edges + points=[] + + for i in range(o_edges): + points+=[(math.sin(o_offset+stepsize*i)*(o_radius+kerf),math.cos(o_offset+stepsize*i)*(o_radius+kerf))] + s=[svg_from_points(points,(o_radius+spacing,o_radius+spacing))] + if(i_type==2): + s+=['M '+str(spacing+o_radius-i_radius)+','+str(o_radius+spacing)+'a'+str(i_radius)+','+str(i_radius)+' 0 1,0 '+str(2*i_radius)+',0'+'a'+str(i_radius)+','+str(i_radius)+' 0 1,0 '+str(-2*i_radius)+',0'] + if(i_type==3): + stepsize=2*math.pi/i_edges + points=[] + + for i in range(i_edges): + points+=[(math.sin(i_offset+stepsize*i)*(i_radius+kerf),math.cos(i_offset+stepsize*i)*(i_radius+kerf))] + s+=[svg_from_points(points,(o_radius+spacing,o_radius+spacing))] + groupdraw(s,[color1,color2]) + + if self.options.displaylasertag: + # Create a new layer. + layer = etree.SubElement(svg, 'g') + layer.set(inkex.addNS('label', 'inkscape'), 'lasertag') + layer.set(inkex.addNS('groupmode', 'inkscape'), 'layer') + + tag_1=lasertag + tag_1=tag_1.replace("%n",str(pass_offset+1)).replace("%s",str(speed)).replace("%i",str(intensity)).replace("%c",str(color2)) + tag_2=lasertag + tag_2=tag_2.replace("%n",str(pass_offset+2)).replace("%s",str(speed)).replace("%i",str(intensity)).replace("%c",str(color1)) + text = etree.Element(inkex.addNS('text','svg')) + text.text = tag_1 + if (len(s)>1): + text.text+=" "+tag_2 + layer.append(text) + +if __name__ == '__main__': + LasercutPolygon().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/layer_clip/clip.py b/extensions/fablabchemnitz/layer_clip/clip.py new file mode 100644 index 00000000..f62338f6 --- /dev/null +++ b/extensions/fablabchemnitz/layer_clip/clip.py @@ -0,0 +1,73 @@ +# Copyright (c) 2012 Stuart Pernsteiner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED +# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +import sys +import inkex +import gettext +from lxml import etree +_ = gettext.gettext + +class ClipEffect(inkex.EffectExtension): + + def __init__(self, dirmark): + inkex.Effect.__init__(self) + self.dirmark = dirmark + + def effect(self): + defs = self.svg.getElement('//svg:defs') + + if len(self.svg.selected) != 1: + die(_("Error: You must select exactly one path")) + # Create the svg:clipPath inside of svg:defs + pathId = list(self.svg.selected.values())[0].get('id') + + #inkex.utils.debug(pathId) + clippath = etree.SubElement(defs, 'clipPath', + {'clipPathUnits': 'userSpaceOnUse' + ,'id': self.svg.get_unique_id("clipPath")}) + use = etree.SubElement(clippath, 'use', + {inkex.addNS('href','xlink'): '#' + pathId + ,'id': self.svg.get_unique_id("use")}) + + # Find the target layer and set its clip-path attribute + layer = self.svg.selected[pathId].getparent() + target = self.find_target(pathId) + + target.set('clip-path', 'url(#%s)' % clippath.get('id')) + + # Update layer names + label_attr = inkex.addNS('label', 'inkscape') + + layer_label = layer.get(label_attr) + layer.set(label_attr, layer_label + ' (c%s)' % self.dirmark) + + target_label = target.get(label_attr) + target.set(label_attr, target_label + ' (C)') + +def layername(layer): + return layer.get(inkex.addNS('label','inkscape')) + +def die(msg): + inkex.errormsg(msg) + sys.exit(1) + diff --git a/extensions/fablabchemnitz/layer_clip/clip_above.inx b/extensions/fablabchemnitz/layer_clip/clip_above.inx new file mode 100644 index 00000000..d328de0b --- /dev/null +++ b/extensions/fablabchemnitz/layer_clip/clip_above.inx @@ -0,0 +1,16 @@ + + + Clip Layer Above + fablabchemnitz.de_clip_layer_above + + path + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/layer_clip/clip_above.py b/extensions/fablabchemnitz/layer_clip/clip_above.py new file mode 100644 index 00000000..c0570eb9 --- /dev/null +++ b/extensions/fablabchemnitz/layer_clip/clip_above.py @@ -0,0 +1,52 @@ +#!/usr/bin/env python3 + +# Copyright (c) 2012 Stuart Pernsteiner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED +# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +import clip +import inkex +import gettext +_ = gettext.gettext + +class ClipAboveEffect(clip.ClipEffect): + def __init__(self): + clip.ClipEffect.__init__(self, '+') + + def find_target(self, pathId): + layer = self.svg.selected[pathId].getparent() + parent = layer.getparent() + sibling = None + last = None + + children = parent.getchildren() + children.reverse() + for child in children: + if child == layer and last is not None: + return last + last = child + + clip.die(_("Error: There is no layer above '%s'") % clip.layername(layer)) + +# Create effect instance and apply it. +ClipAboveEffect().run() + diff --git a/extensions/fablabchemnitz/layer_clip/clip_below.inx b/extensions/fablabchemnitz/layer_clip/clip_below.inx new file mode 100644 index 00000000..1fb896a0 --- /dev/null +++ b/extensions/fablabchemnitz/layer_clip/clip_below.inx @@ -0,0 +1,16 @@ + + + Clip Layer Below + fablabchemnitz.de_clip_layer_below + + path + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/layer_clip/clip_below.py b/extensions/fablabchemnitz/layer_clip/clip_below.py new file mode 100644 index 00000000..6d1a1fa6 --- /dev/null +++ b/extensions/fablabchemnitz/layer_clip/clip_below.py @@ -0,0 +1,52 @@ +#!/usr/bin/env python3 + +# Copyright (c) 2012 Stuart Pernsteiner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED +# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +import clip +import inkex +import gettext +_ = gettext.gettext + +class ClipBelowEffect(clip.ClipEffect): + def __init__(self): + clip.ClipEffect.__init__(self, '-') + + def find_target(self, pathId): + layer = self.svg.selected[pathId].getparent() + parent = layer.getparent() + sibling = None + last = None + + if clip.layername(parent) is None: + layer = parent + + for child in parent.getchildren(): + if child == layer and last is not None: + return last + last = child + + clip.die(_("Error: There is no layer below '%s'") % clip.layername(layer)) + +# Create effect instance and apply it. +ClipBelowEffect().run() diff --git a/extensions/fablabchemnitz/layer_clip/clip_current.inx b/extensions/fablabchemnitz/layer_clip/clip_current.inx new file mode 100644 index 00000000..d3769e93 --- /dev/null +++ b/extensions/fablabchemnitz/layer_clip/clip_current.inx @@ -0,0 +1,16 @@ + + + Clip Layer Current + fablabchemnitz.de_clip_layer_current + + path + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/layer_clip/clip_current.py b/extensions/fablabchemnitz/layer_clip/clip_current.py new file mode 100644 index 00000000..0afbf251 --- /dev/null +++ b/extensions/fablabchemnitz/layer_clip/clip_current.py @@ -0,0 +1,36 @@ +#!/usr/bin/env python3 + +# Copyright (c) 2012 Stuart Pernsteiner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED +# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +import clip +from lxml import etree +class ClipCurrentEffect(clip.ClipEffect): + def __init__(self): + clip.ClipEffect.__init__(self, '*') + + def find_target(self, pathId): + return self.svg.selected[pathId].getparent() + +# Create effect instance and apply it. +ClipCurrentEffect().run() diff --git a/extensions/fablabchemnitz/layer_clip/clip_fixtransform.inx b/extensions/fablabchemnitz/layer_clip/clip_fixtransform.inx new file mode 100644 index 00000000..cb1ea5fc --- /dev/null +++ b/extensions/fablabchemnitz/layer_clip/clip_fixtransform.inx @@ -0,0 +1,16 @@ + + + Clip Layer Fix Transform + fablabchemnitz.de_clip_layer_fix_transform + + path + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/layer_clip/clip_fixtransform.py b/extensions/fablabchemnitz/layer_clip/clip_fixtransform.py new file mode 100644 index 00000000..6c6a5ab3 --- /dev/null +++ b/extensions/fablabchemnitz/layer_clip/clip_fixtransform.py @@ -0,0 +1,41 @@ +#!/usr/bin/env python3 + +# Copyright (c) 2012 Stuart Pernsteiner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED +# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +import sys +import inkex + +class FixTransformEffect(inkex.EffectExtension): + + def effect(self): + defs = self.document.xpath('//svg:defs/svg:clipPath/svg:use', + namespaces=inkex.NSS) + + for d in defs: + del d.attrib['transform'] + +# Create effect instance and apply it. +FixTransformEffect().run() + + diff --git a/extensions/fablabchemnitz/layer_clip/clip_parent.inx b/extensions/fablabchemnitz/layer_clip/clip_parent.inx new file mode 100644 index 00000000..9d4dd650 --- /dev/null +++ b/extensions/fablabchemnitz/layer_clip/clip_parent.inx @@ -0,0 +1,16 @@ + + + Clip Layer Parent + fablabchemnitz.de_clip_layer_parent + + path + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/layer_clip/clip_parent.py b/extensions/fablabchemnitz/layer_clip/clip_parent.py new file mode 100644 index 00000000..d1ea55fd --- /dev/null +++ b/extensions/fablabchemnitz/layer_clip/clip_parent.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python3 + +# Copyright (c) 2012 Stuart Pernsteiner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED +# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +import clip +import inkex +import gettext +_ = gettext.gettext + +class ClipParentEffect(clip.ClipEffect): + def __init__(self): + clip.ClipEffect.__init__(self, '**') + + def find_target(self, pathId): + layer = self.svg.getElementById(pathId).getparent() + parent = layer.getparent() + + if parent.get(inkex.addNS('groupmode','inkscape')) != 'layer': + clip.die(_("Error: Layer '%s' has no parent layer") % + clip.layername(layer)) + return parent + +# Create effect instance and apply it. +ClipParentEffect().run() diff --git a/extensions/fablabchemnitz/layer_clip/clip_remove.inx b/extensions/fablabchemnitz/layer_clip/clip_remove.inx new file mode 100644 index 00000000..612591f7 --- /dev/null +++ b/extensions/fablabchemnitz/layer_clip/clip_remove.inx @@ -0,0 +1,16 @@ + + + Clip Layer Remove + fablabchemnitz.de_clip_layer_remove + + path + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/layer_clip/clip_remove.py b/extensions/fablabchemnitz/layer_clip/clip_remove.py new file mode 100644 index 00000000..b37b13c8 --- /dev/null +++ b/extensions/fablabchemnitz/layer_clip/clip_remove.py @@ -0,0 +1,50 @@ +#!/usr/bin/env python3 + +# Copyright (c) 2012 Stuart Pernsteiner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED +# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +import sys +import inkex + +class RemoveClipEffect(inkex.Effect): + def __init__(self): + inkex.Effect.__init__(self) + + def effect(self): + path = list(self.svg.selected.values())[0] + layer = path.getparent() + if layer.attrib.has_key('clip-path'): + del layer.attrib['clip-path'] + + # Update layer name + label_attr = inkex.addNS('label', 'inkscape') + + layer_label = layer.get(label_attr) + if layer_label[-4:] == " (C)": + layer.set(label_attr, layer_label[:-4]) + + +# Create effect instance and apply it. +RemoveClipEffect().run() + + diff --git a/extensions/fablabchemnitz/leather_case/leather_case.inx b/extensions/fablabchemnitz/leather_case/leather_case.inx new file mode 100644 index 00000000..7b8458c2 --- /dev/null +++ b/extensions/fablabchemnitz/leather_case/leather_case.inx @@ -0,0 +1,31 @@ + + + Leather Case + fablabchemnitz.de.leather_case + 80.0 + 165.0 + 10.0 + 10.0 + 10.0 + 2 + + + + + 10.0 + 40.0 + 10.0 + true + false + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/leather_case/leather_case.py b/extensions/fablabchemnitz/leather_case/leather_case.py new file mode 100644 index 00000000..a713fccd --- /dev/null +++ b/extensions/fablabchemnitz/leather_case/leather_case.py @@ -0,0 +1,159 @@ +#!/usr/bin/env python3 +""" +A Inkscape extension to generate the pieces for a leather case that can be laser cut. + +The leather case is intended to be used with up to 5 mobile phones. +""" + +import inkex +import math +from lxml import etree + +class LeatherCase(inkex.EffectExtension): + height = -1.0 + + def add_arguments(self, pars): + pars.add_argument('-w', '--width', type=float, default=80, help='Width (mm)') + pars.add_argument('-x', '--height', type=float, default=165, help='Height (mm)') + pars.add_argument('-d', '--depth', type=float, default=10, help='Depth (mm)') + pars.add_argument('-H', '--heightMargin', type=float, default=10, help='Height Margin (mm)') + pars.add_argument('-r', '--cornerRoundness', type=float, default=10, help='Corner Roundness (mm)') + pars.add_argument('-i', '--divisions', type=int, default=2, help='Divisions') + pars.add_argument('-a', '--claspAmount', default=1, help='Number of Clasps') + pars.add_argument('-p', '--extraTongueLength', type=float, default=10, help='Extra Tongue Length (mm)') + pars.add_argument('-t', '--tipTongueLength', type=float,default=40, help='Tip Tongue Length (mm)') + pars.add_argument('-e', '--extraEdgeWidth', type=float, default=10, help='Extra Edge Width (mm)') + pars.add_argument('-o', '--makeHoles', default="true", help='Make Holes') + pars.add_argument('-g', '--groupObjects', default="false", help='Group Objects') + + def effect(self): + width = self.options.width + height = self.options.height + depth = self.options.depth + heightMargin = self.options.heightMargin + cornerRoundness = self.options.cornerRoundness + divisions = self.options.divisions + oneClasp = self.options.claspAmount == "1" + extraTongueLength = self.options.extraTongueLength + tipTongueLength = self.options.tipTongueLength + extraEdgeWidth = self.options.extraEdgeWidth + makeHoles = self.options.makeHoles == "true" + group = self.options.groupObjects == "true" + + parent = self.svg.get_current_layer() + + if group: + parent = etree.SubElement(parent, 'g') + + line_style = { 'stroke-width': self.svg.unittouu(str(0.1) + "mm"), 'stroke':'#FF0000', 'fill':'none'} + + verticalLine1Size = width - cornerRoundness - 1 + + hole = '' + + if makeHoles: + if oneClasp: + hole = ' m ' + str((height + heightMargin * 2) / 2) + ',' + str(extraTongueLength + 13) + ' c 1,0 2,1 2,2 0,1 -1,2 -2,2 -1,0 -2,-1 -2,-2 0,-1 1,-2 2,-2' + else: + hole = (' m ' + str((height + heightMargin * 2) / 2 - 55) + ',' + str(extraTongueLength + 13) + ' c 1,0 2,1 2,2 0,1 -1,2 -2,2 -1,0 -2,-1 -2,-2 0,-1 1,-2 2,-2' + + ' m 110,0' + ' c 1,0 2,1 2,2 0,1 -1,2 -2,2 -1,0 -2,-1 -2,-2 0,-1 1,-2 2,-2' + ) + + firstPiece_attribs = {'style' : str(inkex.Style(line_style)), + 'd' : 'M 0,0 l 0,' + str(verticalLine1Size) + + ' c 0,' + str(cornerRoundness / 2.0) + ' ' + str(cornerRoundness / 2) + ',' + str(cornerRoundness) + ' ' + str(cornerRoundness) + ',' + str(cornerRoundness) + + ' l ' + str(height + heightMargin * 2 - cornerRoundness * 2) + ',0' + + ' c ' + str(cornerRoundness / 2) + ',0 ' + str(cornerRoundness) + ',' + str(-cornerRoundness / 2) + ' ' + str(cornerRoundness) + ',' + str(-cornerRoundness) + + ' l 0,' + str(-verticalLine1Size) + ' Z' + + hole + } + + + firstPiece = etree.SubElement(parent, inkex.addNS('path','svg'), firstPiece_attribs ) + + + # Intermediate pieces + for x in range(1, divisions): + intermediatePiece_attribs = {'style' : str(inkex.Style(line_style)), + 'd' : 'M ' + str(10 + x*5) + ',' + str(10 + x*5) + ' l 0,' + str(verticalLine1Size) + + ' c 0,' + str(cornerRoundness / 2.0) + ' ' + str(cornerRoundness / 2) + ',' + str(cornerRoundness) + ' ' + str(cornerRoundness) + ',' + str(cornerRoundness) + + ' l ' + str(height + heightMargin * 2 - cornerRoundness * 2) + ',0' + + ' c ' + str(cornerRoundness / 2) + ',0 ' + str(cornerRoundness) + ',' + str(-cornerRoundness / 2) + ' ' + str(cornerRoundness) + ',' + str(-cornerRoundness) + + ' l 0,' + str(-verticalLine1Size) + ' Z' + } + + + intermediatePiece = etree.SubElement(parent, inkex.addNS('path','svg'), intermediatePiece_attribs ) + + + line_style2 = { 'stroke-width': self.svg.unittouu(str(0.1) + "mm"), 'stroke':'#00FF00', 'fill':'none'} + plainTongueLength = depth * divisions + extraTongueLength - 1 + (divisions - 1) + totalWidth = height + heightMargin * 2; + hole = '' + + if makeHoles: + if oneClasp: + hole = ' m 30,' + str(-50 -(plainTongueLength + tipTongueLength - 10)) + ' c 1,0 2,1 2,2 0,1 -1,2 -2,2 -1,0 -2,-1 -2,-2 0,-1 1,-2 2,-2' + else: + hole = (' m -25,' + str(-50 -(plainTongueLength + tipTongueLength - 10)) + ' c 1,0 2,1 2,2 0,1 -1,2 -2,2 -1,0 -2,-1 -2,-2 0,-1 1,-2 2,-2' + + ' m 110,0' + ' c 1,0 2,1 2,2 0,1 -1,2 -2,2 -1,0 -2,-1 -2,-2 0,-1 1,-2 2,-2') + + + if oneClasp: + tongue = (' 0,' + str(-plainTongueLength) + + ' c 0,' + str(-tipTongueLength / 2) + ' ' + str(-totalWidth / 4) + ',' + str(-tipTongueLength) + ' ' + str(-totalWidth / 2) + ',' + str(-tipTongueLength) + + ' ' + str(-totalWidth / 4) + ',0 ' + str(-totalWidth / 2) + ',' + str(tipTongueLength / 2) + ' ' + str(-totalWidth / 2) + ',' + str(tipTongueLength) + + ' l 0,' + str(plainTongueLength) + ) + else: + tongue = (' 0,' + str(-(plainTongueLength + tipTongueLength - cornerRoundness)) + + ' c 0,' + str(-cornerRoundness / 2) + ' ' + str(-cornerRoundness / 2) + ',' + str(-cornerRoundness) + ' ' + str(-cornerRoundness) + ',' + str(-cornerRoundness) + + ' l ' + str(-(height + heightMargin * 2 - cornerRoundness * 2)) + ',0' + + ' c ' + str(-cornerRoundness / 2) + ',0 ' + str(-cornerRoundness) + ',' + str(cornerRoundness / 2) + ' ' + str(-cornerRoundness) + ',' + str(cornerRoundness) + + ' l 0,' + str(plainTongueLength + tipTongueLength - cornerRoundness) + ) + + secondPiece_attribs = {'style' : str(inkex.Style(line_style2)), + 'd' : 'M -5,-4 l 0,' + str(verticalLine1Size - 1) + + ' c 0,' + str(cornerRoundness / 2.0) + ' ' + str(cornerRoundness / 2) + ',' + str(cornerRoundness) + ' ' + str(cornerRoundness) + ',' + str(cornerRoundness) + + ' l ' + str(height + heightMargin * 2 - cornerRoundness * 2) + ',0' + + ' c ' + str(cornerRoundness / 2) + ',0 ' + str(cornerRoundness) + ',' + str(-cornerRoundness / 2) + ' ' + str(cornerRoundness) + ',' + str(-cornerRoundness) + + ' l 0,' + str(-(verticalLine1Size-1)) + + ' -1,-1' + ' 1,-1' + + tongue + + ' 1,1 -1,1 m ' + + str(totalWidth / 2 - 30) +',-1 c 0.25,0 0.5,0.25 0.5,0.5 0,0.25 -0.25,0.5 -0.5,0.5 -0.25,0 -0.5,-0.25 -0.5,-0.5 0,-0.25 0.25,-0.5 0.5,-0.5 ' + + 'm 60,0 c 0.25,0 0.5,0.25 0.5,0.5 0,0.25 -0.25,0.5 -0.5,0.5 -0.25,0 -0.5,-0.25 -0.5,-0.5 0,-0.25 0.25,-0.5 0.5,-0.5' + + 'm 0,50 c 0.25,0 0.5,0.25 0.5,0.5 0,0.25 -0.25,0.5 -0.5,0.5 -0.25,0 -0.5,-0.25 -0.5,-0.5 0,-0.25 0.25,-0.5 0.5,-0.5' + 'm -60,0 c 0.25,0 0.5,0.25 0.5,0.5 0,0.25 -0.25,0.5 -0.5,0.5 -0.25,0 -0.5,-0.25 -0.5,-0.5 0,-0.25 0.25,-0.5 0.5,-0.5' + + hole + } + + secondPiece = etree.SubElement(parent, inkex.addNS('path','svg'), secondPiece_attribs ) + + line_style3 = { 'stroke-width': self.svg.unittouu(str(0.1) + "mm"), 'stroke':'#0000FF', 'fill':'none'} + edgeLength = (width - cornerRoundness) * 2 + height + heightMargin * 2 - cornerRoundness * 2 + 3.14159 * cornerRoundness + edgeWidth = depth * divisions + divisions - 1 + extraEdgeWidth + + thirdPiece_attribs = {'style' : str(inkex.Style(line_style3)), + 'd' : 'M 5,5 l 0,' + str(edgeWidth) + + ' ' + str(edgeLength) + ',0' + + ' 0,' + str(-edgeWidth) + ' Z' + } + + thirdPiece = etree.SubElement(parent, inkex.addNS('path','svg'), thirdPiece_attribs ) + + line_style4 = { 'stroke-width': self.svg.unittouu(str(0.1) + "mm"), 'stroke':'#FF00FF', 'fill':'none'} + edgeLength = 70 + edgeWidth = 60 + + fourthPiece_attribs = {'style' : str(inkex.Style(line_style4)), + 'd' : 'M 10,10 l 0,' + str(edgeWidth) + + ' ' + str(edgeLength) + ',0' + + ' 0,' + str(-edgeWidth) + ' Z' + } + + fourthPiece = etree.SubElement(parent, inkex.addNS('path','svg'), fourthPiece_attribs ) + +if __name__ == '__main__': + LeatherCase().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/line_animator/line_animator.inx b/extensions/fablabchemnitz/line_animator/line_animator.inx new file mode 100644 index 00000000..f3e50594 --- /dev/null +++ b/extensions/fablabchemnitz/line_animator/line_animator.inx @@ -0,0 +1,47 @@ + + + Line Animator + fablabchemnitz.de.line_animator + + + + animation_1 + 10.000 + 1 + 0.000 + + + + + + + + + + + + + + + + + + + + + + + + + + path + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/line_animator/line_animator.py b/extensions/fablabchemnitz/line_animator/line_animator.py new file mode 100644 index 00000000..e90490b6 --- /dev/null +++ b/extensions/fablabchemnitz/line_animator/line_animator.py @@ -0,0 +1,216 @@ +#!/usr/bin/env python3 +""" +line animator - create CSS3 animations that look as if someone is drawing them by hand + +Copyright (C) 2018-2021, Maren Hachmann + +using path length measuring code from measure.py, written by: + Copyright (C) 2015 ~suv + Copyright (C) 2010 Alvin Penner + Copyright (C) 2006 Georg Wiora + Copyright (C) 2006 Nathan Hurst + Copyright (C) 2005 Aaron Spike, aaron@ekips.org + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +""" + +__version__ = 1.0 + +import re +import sys +from lxml import etree + +# local libraries +import inkex +from inkex.bezier import csplength + +# TODO: +# - do not add class style tag with anything but animation name list (needs to be parsed! animation-name: animation_1, animation_2;), but repeat all the other data for each path. This is the only way to add two different animations to a single path. +# - fix delay +# - implement removal of animations + + +class LineAnimator(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument("--duration", type=float, default=10.0, help="Duration in seconds") + pars.add_argument("--repeat", type=int, default=1, help="Number of repetitions for looping, 0 means infinite") + pars.add_argument("--delay", type=float, default=0.0, help="Delay of animation start in seconds") + pars.add_argument("--identifier", default="animation_1", help="Unique identifier for the animation (only A-Z, a-z, 0-1, _)") + pars.add_argument("--remove_from", default="selected", help="Remove animations from selected items") + pars.add_argument("--action", default="add_anim", help="The active tab when Apply is pressed.") + pars.add_argument("--timing", default="ease") + + def effect(self): + self.root = self.document.getroot() + + id_regex = re.compile('^[a-zA-Z0-9_]+$') + if not id_regex.match(self.options.identifier): + inkex.errormsg(_("Please make sure that the animation's name does not contain any other characters than uppercase or lowercase letters from A to Z, numbers from 0 to 9, or underscores.")) + + if self.options.repeat == 0: + self.options.repeat = "infinite" + + if self.options.action == 'remove_anim': + if self.options.remove_from == 'selected': + self.remove_selected() + else: + self.remove_all() + elif len(self.svg.selected): + self.add_animation(self.options.identifier, + self.options.duration, + self.options.delay, + self.options.repeat, + self.options.timing) + if self.options.delay > 0: + self.add_animation("delay_{0}".format(self.options.identifier), + self.options.delay, + 0, + 1, + "linear", + True) + else: + inkex.errormsg(_('Please select one or more paths to animate.')) + + def add_animation(self, id, duration, delay, repetitions, timing, is_delay_anim=False): + + animation_style_id = "anim_{0}".format(id) + # inkex.utils.debug('animation_style_id: '+animation_style_id) + + to_animate = [] + for thing in self.svg.selection.paint_order(): + to_animate.append(thing) + + lengths = [] # relevant lengths of all subsequently animated paths + for element in to_animate: + if element.tag == inkex.addNS('path','svg'): + lengths.append(self.get_animatable_length(element)) + else: + inkex.errormsg(_('At least one of the selected objects is not a path: {}\nPlease convert all objects to paths before running this extension.\n').format(element.get('id'))) + total_length = sum(lengths) + #inkex.utils.debug(total_length) + #inkex.utils.debug(lengths) + + end_percent = 0 + + for index, length in enumerate(lengths): + + # if we're creating an animation just to + # hide a path during delay time + if is_delay_anim == True: + # TODO: fix delay! + inkex.errormsg(_("Sorry, delay isn't working currently. Please set back to zero.")) + sys.exit() + self.animate_path(to_animate[index], 0, 100, length, length, length, animation_style_id, True) + else: + # start where we ended before + start_percent = end_percent + # compute new end + end_percent += round(length/total_length*100, 3) + if end_percent > 100: + end_percent = 100 + + self.animate_path(to_animate[index], start_percent, end_percent, length, length, 0, animation_style_id, is_delay_anim) + + animation_style_content = """ + .{id} {{ + animation-duration: {duration}s; + animation-timing-function: {timing}; + animation-delay: {delay}s; + animation-iteration-count: {repetitions}; + animation-fill-mode: forwards; + }}\n""".format(id=animation_style_id, duration=duration, delay=delay, repetitions=repetitions, timing=timing) + + # create general style tag for animation that applies to all objects + self.add_or_replace_style_tag(animation_style_id, animation_style_content) + + + def animate_path(self, element, start_percent, end_percent, length, start_length, end_length, animation_identifier, is_delay_anim=False): + + path_identifier = element.get('id') + animation_name = path_identifier + if is_delay_anim: + animation_name = 'delay_'+path_identifier + path_style_content = """ + #{id} {{ + animation-name: {animation_name}; + stroke-dasharray: {length} !important; + }} + + @keyframes {animation_name} {{ + 0%, {start_percent}% {{stroke-dashoffset: {start_length};}} + {end_percent}%, 100% {{stroke-dashoffset: {end_length};}} + }}\n""".format(id=path_identifier, + animation_name=animation_name, + length=length, + start_percent=start_percent, + start_length=start_length, + end_percent=end_percent, + end_length=end_length) + # inkex.utils.debug(path_style_content) + + # inkex.utils.debug('self.add_or_replace_style_tag('+'pathanim_' + animation_name + ','+path_style_content+')') + self.add_or_replace_style_tag('pathanim_' + animation_name, path_style_content) + # only change the element's class when we add the real animation + if is_delay_anim == False: + element.set("class", animation_identifier) + + def get_animatable_length(self, elem): + # csp = elem.path.transform(elem.composed_transform()).to_superpath() + csp = elem.path.to_superpath() + subpath_lengths, path_length = csplength(csp) + + # if there are subpaths, we do not want to extend the animation + # for longer than necessary (subpaths are animated in parallel) + if len(subpath_lengths) > 1: + path_length = max([sum(subpath_segments) for subpath_segments in subpath_lengths]) + + return path_length + + def add_or_replace_style_tag(self, tag_id, content): + + # inkex.utils.debug(tag_id) + old_tag = self.get_style_tag(tag_id) + # inkex.utils.debug('old_tag: '+str(old_tag)) + if old_tag != False: + (self.root.remove(old_tag)) + style_tag = etree.SubElement(self.root, 'style', {'id': tag_id}) + style_tag.text = content + + def get_style_tags(self): + style_tags = [] + for element in self.root.getchildren(): + if element.tag == inkex.addNS('style', 'svg'): + style_tags.append(element) + return(style_tags) + + def get_style_tag(self, id): + for tag in self.get_style_tags(): + if tag.get('id') == id: + return tag + return False + + + def remove_all(self): + inkex.utils.debug('Removing all not implemented yet.') + + def remove_selected(self): + + if len(self.svg.selected) == 0: + inkex.errormsg(_("Please select items to remove the animation from.")) + inkex.utils.debug('Removing selected not implemented yet.') + +if __name__ == '__main__': + LineAnimator().run() diff --git a/extensions/fablabchemnitz/line_shading/line_shading.inx b/extensions/fablabchemnitz/line_shading/line_shading.inx new file mode 100644 index 00000000..c863aa34 --- /dev/null +++ b/extensions/fablabchemnitz/line_shading/line_shading.inx @@ -0,0 +1,43 @@ + + + Line Shading + fablabchemnitz.de.line_shading + + + + + + + + 20 + 0.1 + 2.0 + 0.0 + 1.0 + 2.2 + + + + + + 0.25 + + + + + + + + false + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/line_shading/line_shading.py b/extensions/fablabchemnitz/line_shading/line_shading.py new file mode 100644 index 00000000..04141801 --- /dev/null +++ b/extensions/fablabchemnitz/line_shading/line_shading.py @@ -0,0 +1,320 @@ +#!/usr/bin/env python3 +''' +Created by Danylo Horbatenko 2018, dnkxyz@gmail.com +Copyright (C) 2018 George Fomitchev, gf@endurancerobots.com + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +''' +#Version control: last edited by 01.03.2018 8:20 +import os +import tempfile +import shutil +import subprocess +import math +import inkex +import sys +import png +from lxml import etree +from inkex.paths import Path + +def saw(x): + #The function returns a symmetric triangle wave with period 4 and varying between -1 and 1 + x = math.fmod(x, 4.0) + x = math.fabs(x) + if x > 2.0: + y = 3 - x + else: + y = x - 1 + return y + +def square(x): + #The function returns a square wave with period 4 and varying between -1 and 1 + x = math.fmod(x, 4.0) + if 1.0 < x < 3.0: + y = 1.0 + else: + y = -1.0 + return y + +class LineShading(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument('--palette', help='Choose the colors...') + pars.add_argument("--waveform", help="Select the shape of the curve") + pars.add_argument("--num_lines", type=int, help="Number of lines") + pars.add_argument("--min_period", type=float, help="Minimum period (corresponds to black pixels)") + pars.add_argument("--max_period", type=float, help="Maximum period (corresponds to white pixels)") + pars.add_argument("--min_amplitude", type=float, help="Minimum amplitude (corresponds to white pixels)") + pars.add_argument("--max_amplitude", type=float, help="Maximum amplitude (corresponds to black pixels)") + pars.add_argument("--gamma", type=float, help="Maximum amplitude (corresponds to black pixels)") + pars.add_argument("--line_width", type=float, help="Line width") + pars.add_argument("--units", help="Units for line thickness") + pars.add_argument("--remove", type=inkex.Boolean, help="If True, source image is removed") + pars.add_argument("--active-tab", help="The selected UI-tab when OK was pressed") + + def drawfunction(self, image_w, image_h, file): + reader = png.Reader(file) + w, h, pixels, metadata = reader.read_flat() + matrice = [[1.0 for i in range(w)]for j in range(h)] + if metadata['alpha']: + n = 4 + else: + n = 3 + #RGB convert to grayscale 0.21R + 0.72G + 0.07B + for y in range(h): + for x in range(w): + pixel_pos = (x + y * w)*n + p = 1.0 - (pixels[pixel_pos]*0.21 + pixels[(pixel_pos+1)]*0.72 + pixels[(pixel_pos+2)]*0.07)/255.0 + matrice[y][x] = math.pow(p, 1.0/self.options.gamma) + + points = [] + step_y = image_h/h + step_x = image_w/(w-1) + min_amplitude = self.options.min_amplitude*step_y/2 + max_amplitude = self.options.max_amplitude*step_y/2 + min_period = self.options.min_period*step_y + max_period = self.options.max_period*step_y + min_frequency = 1.0/max_period + max_frequency = 1.0/min_period + + #Sinusoidal wave (optimized) + if self.options.waveform == 'sin': + for y in range(h): + pi = math.pi + phase = 0.0 + coord_x = 0.0 + amplitude = 0.0 + n_step = 0 + x0 = 0.0 + y0 = math.sin(phase)*(min_amplitude + (max_amplitude - min_amplitude)*matrice[y][x]) + (y+0.5)*step_y + points.append(['M',[x0, y0]]) + for x in range(w): + period = min_period + (max_period - min_period)*(1-matrice[y][x]) + #period = 1.0/(min_frequency + (max_frequency - min_frequency)*(matrice[y][x])) + d_phase = 2.0*pi/period*step_x + #calculate y + if phase > 2.0*pi: + if n_step > 0: + x3 = coord_x + y3 = -amplitude/n_step + (y+0.5)*step_y + x2 = x3 - (x3-x0)*0.32 + y2 = y3 + x1 = x0 + (x3-x0)*0.34 + y1 = y0 + x0 = x3 + y0 = y3 + points.append(['C',[x1, y1, x2, y2, x3, y3]]) + n_step = 0 + amplitude = 0 + elif phase < pi < (phase + d_phase): + if n_step > 0: + x3 = coord_x + y3 = amplitude/n_step + (y+0.5)*step_y + x2 = x3 - (x3-x0)*0.34 + y2 = y3 + x1 = x0 + (x3-x0)*0.32 + y1 = y0 + x0 = x3 + y0 = y3 + points.append(['C',[x1, y1, x2, y2, x3, y3]]) + n_step = 0 + amplitude = 0 + phase = math.fmod(phase, 2.0*pi) + #calculate x + if phase < 0.5*pi < (phase + d_phase): + coord_x = (x - (phase - 0.5*pi)/d_phase)*step_x + elif phase < 1.5*pi < (phase + d_phase): + coord_x = (x - (phase - 1.5*pi)/d_phase)*step_x + phase += d_phase + amplitude += (min_amplitude + (max_amplitude - min_amplitude)*matrice[y][x]) + n_step += 1 + #add last point + if n_step > 0: + phase = math.fmod(phase, 2.0*pi) + if (0 < phase < 0.5*pi) or (pi < phase < 1.5*pi): + x3 = (w-1)*step_x + y3 = amplitude*math.sin(phase)/n_step + (y+0.5)*step_y + x2 = x3 + y2 = y3 + x1 = x0 + (x3-x0)*0.33 + y1 = y0 + points.append(['C',[x1, y1, x2, y2, x3, y3]]) + else: + if coord_x > (w-1)*step_x: + coord_x = (w-1)*step_x + x3 = coord_x + y3 = math.copysign( amplitude , math.sin(phase))/n_step + (y+0.5)*step_y + x2 = x3 - (x3-x0)*0.32 + y2 = y3 + x1 = x0 + (x3-x0)*0.34 + y1 = y0 + points.append(['C',[x1, y1, x2, y2, x3, y3]]) + if coord_x < (w-1)*step_x: + x0 = x3 + y0 = y3 + x3 = (w-1)*step_x + y3 = amplitude*math.sin(phase)/n_step + (y+0.5)*step_y + x2 = x3 + y2 = y3 + x1 = x0 + (x3-x0)*0.33 + y1 = y0 + points.append(['C',[x1, y1, x2, y2, x3, y3]]) + + #Sinusoidal wave (Brute-force) + elif self.options.waveform == 'sin_b': + pi2 = math.pi*2.0 + for y in range(h): + phase = - pi2/4.0 + for x in range(w): + period = min_period + (max_period - min_period)*(1-matrice[y][x]) + amplitude = min_amplitude + (max_amplitude - min_amplitude)*matrice[y][x] + phase += pi2*step_x/period + phase = math.fmod(phase, pi2) + if x == 0: + points.append(['M',[x*step_x, amplitude*math.sin(phase) + (y+0.5)*step_y]]) + else: + points.append(['L',[x*step_x, amplitude*math.sin(phase) + (y+0.5)*step_y]]) + + #Saw wave + elif self.options.waveform == 'saw': + for y in range(h): + phase = 0.0 + coord_x = 0.0 + amplitude = 0.0 + n_step = 0.0 + for x in range(w): + period = min_period + (max_period - min_period)*(1-matrice[y][x]) + #period = 1.0/(min_frequency + (max_frequency - min_frequency)*(matrice[y][x])) + d_phase = 4.0/period*step_x + if phase > 4.0: + coord_x = (x - (phase - 4.0)/d_phase)*step_x + elif phase < 2.0 < (phase + d_phase): + coord_x = (x - (phase - 2.0)/d_phase)*step_x + phase = math.fmod(phase, 4.0) + if (phase < 1.0 < (phase + d_phase)) or (phase < 3.0 < (phase + d_phase)): + if n_step > 0: + if coord_x == 0.0: + points.append(['M',[coord_x, amplitude*square(phase - 1.0)/n_step + (y+0.5)*step_y]]) + else: + points.append(['L',[coord_x, amplitude*square(phase - 1.0)/n_step + (y+0.5)*step_y]]) + n_step = 0 + amplitude = 0 + phase += d_phase + n_step += 1.0 + amplitude += (min_amplitude + (max_amplitude - min_amplitude)*matrice[y][x]) + if n_step > 0: + points.append(['L',[(w-1)*step_x, amplitude*saw(phase - 1.0)/n_step + (y+0.5)*step_y]]) + + #Square wave + else: + for y in range(h): + phase = 0.0 + coord_x = 0.0 + amplitude = 0.0 + n_step = 0 + for x in range(w): + period = min_period + (max_period - min_period)*(1-matrice[y][x]) + #period = 1.0/(min_frequency + (max_frequency - min_frequency)*(matrice[y][x])) + d_phase = 4.0/period*step_x + if phase > 4.0: + coord_x = (x - (phase - 4.0)/d_phase)*step_x + elif phase < 2.0 < (phase + d_phase): + coord_x = (x - (phase - 2.0)/d_phase)*step_x + phase = math.fmod(phase, 4.0) + if phase < 1.0 < (phase + d_phase): + if n_step > 0: + if coord_x == 0.0: + points.append(['M',[coord_x, amplitude/n_step + (y+0.5)*step_y]]) + else: + points.append(['L',[coord_x, -amplitude/n_step + (y+0.5)*step_y]]) + points.append(['L',[coord_x, amplitude/n_step + (y+0.5)*step_y]]) + n_step = 0 + amplitude = 0 + elif phase < 3.0 < (phase + d_phase): + if n_step > 0: + if coord_x == 0.0: + points.append(['M',[coord_x, -amplitude/n_step + (y+0.5)*step_y]]) + else: + points.append(['L',[coord_x, amplitude/n_step + (y+0.5)*step_y]]) + points.append(['L',[coord_x, -amplitude/n_step + (y+0.5)*step_y]]) + n_step = 0 + amplitude = 0 + phase += d_phase + n_step += 1 + amplitude += (min_amplitude + (max_amplitude - min_amplitude)*matrice[y][x]) + if n_step > 0: + if 3.0 > phase > 1.0: + points.append(['L',[(w-1)*step_x, amplitude/n_step + (y+0.5)*step_y]]) + else: + points.append(['L',[(w-1)*step_x, -amplitude/n_step + (y+0.5)*step_y]]) + return points + + def draw_path(self, node, file): + newpath = etree.Element(inkex.addNS('path','svg')) + line_width = self.options.line_width + units = self.options.units + s = {'stroke': '#000000', 'fill': 'none', 'stroke-linejoin': 'round', 'stroke-linecap': 'round', 'stroke-width': str(self.svg.unittouu(str(line_width) + units))} + newpath.set('style', str(inkex.Style(s))) + x = node.get('x') + y = node.get('y') + t = 'translate('+ x +','+ y +')' + newpath.set('transform', t) + image_w = float(node.get('width')) + image_h = float(node.get('height')) + newpath.set('d', str(Path(self.drawfunction(image_w, image_h, file)))) + newpath.set('title', 'Line_Shading') + node.getparent().append(newpath) + newpath.set('x', x) + + def export_png(self, node, file): + image_w = float(node.get('width')) + image_h = float(node.get('height')) + min_period = self.options.min_period + max_period = self.options.min_period + poinnt_per_min_period = 8.0 + current_file = self.options.input_file + h_png = str(self.options.num_lines) + if min_period < max_period: + w_png = str(round(poinnt_per_min_period*image_w*float(h_png)/min_period/image_h)) + else: + w_png = str(round(poinnt_per_min_period*image_w*float(h_png)/max_period/image_h)) + id = node.get('id') + cmd = "inkscape " + current_file + " --export-type=\"png\" --export-filename=" + file + " --actions=\"export-width:"+w_png+";export-height:"+h_png+";export-background:rgb(255,255,255);export-background-opacity:255;export-id:"+id+"\"" + #inkex.errormsg(cmd) + proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + #inkex.utils.debug(cmd) + #inkex.utils.debug(proc.communicate()) + #sys.exit(0) + #return_code = proc.wait() + #sys.exit(0) + f = proc.stdout + err = proc.stderr + f.close() + err.close() + proc.wait() + #inkex.errormsg(proc.stdout.read()) + + def effect(self): + image_selected_flag = False + for id, node in self.svg.selected.items(): + if node.tag == inkex.addNS('image','svg'): + image_selected_flag = True + tmp_dir = tempfile.mkdtemp() + png_temp_file = os.path.join(tmp_dir, "LineShading.png") + self.export_png(node, png_temp_file) + self.draw_path(node, png_temp_file) + shutil.rmtree(tmp_dir) + if self.options.remove: + node.delete() + return + if not image_selected_flag: + inkex.errormsg("Please select an image") + +if __name__ == '__main__': + LineShading().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/line_shading/png.py b/extensions/fablabchemnitz/line_shading/png.py new file mode 100644 index 00000000..42dadd54 --- /dev/null +++ b/extensions/fablabchemnitz/line_shading/png.py @@ -0,0 +1,2751 @@ +#!/usr/bin/env python3 + +# png.py - PNG encoder/decoder in pure Python +# +# Copyright (C) 2006 Johann C. Rocholl +# Portions Copyright (C) 2009 David Jones +# And probably portions Copyright (C) 2006 Nicko van Someren +# +# Original concept by Johann C. Rocholl. +# +# LICENCE (MIT) +# +# Permission is hereby granted, free of charge, to any person +# obtaining a copy of this software and associated documentation files +# (the "Software"), to deal in the Software without restriction, +# including without limitation the rights to use, copy, modify, merge, +# publish, distribute, sublicense, and/or sell copies of the Software, +# and to permit persons to whom the Software is furnished to do so, +# subject to the following conditions: +# +# The above copyright notice and this permission notice shall be +# included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS +# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +""" +Pure Python PNG Reader/Writer + +This Python module implements support for PNG images (see PNG +specification at http://www.w3.org/TR/2003/REC-PNG-20031110/ ). It reads +and writes PNG files with all allowable bit depths +(1/2/4/8/16/24/32/48/64 bits per pixel) and colour combinations: +greyscale (1/2/4/8/16 bit); RGB, RGBA, LA (greyscale with alpha) with +8/16 bits per channel; colour mapped images (1/2/4/8 bit). +Adam7 interlacing is supported for reading and +writing. A number of optional chunks can be specified (when writing) +and understood (when reading): ``tRNS``, ``bKGD``, ``gAMA``. + +For help, type ``import png; help(png)`` in your python interpreter. + +A good place to start is the :class:`Reader` and :class:`Writer` +classes. + +Requires Python 2.3. Limited support is available for Python 2.2, but +not everything works. Best with Python 2.4 and higher. Installation is +trivial, but see the ``README.txt`` file (with the source distribution) +for details. + +This file can also be used as a command-line utility to convert +`Netpbm `_ PNM files to PNG, and the +reverse conversion from PNG to PNM. The interface is similar to that +of the ``pnmtopng`` program from Netpbm. Type ``python png.py --help`` +at the shell prompt for usage and a list of options. + +A note on spelling and terminology +---------------------------------- + +Generally British English spelling is used in the documentation. So +that's "greyscale" and "colour". This not only matches the author's +native language, it's also used by the PNG specification. + +The major colour models supported by PNG (and hence by PyPNG) are: +greyscale, RGB, greyscale--alpha, RGB--alpha. These are sometimes +referred to using the abbreviations: L, RGB, LA, RGBA. In this case +each letter abbreviates a single channel: *L* is for Luminance or Luma +or Lightness which is the channel used in greyscale images; *R*, *G*, +*B* stand for Red, Green, Blue, the components of a colour image; *A* +stands for Alpha, the opacity channel (used for transparency effects, +but higher values are more opaque, so it makes sense to call it +opacity). + +A note on formats +----------------- + +When getting pixel data out of this module (reading) and presenting +data to this module (writing) there are a number of ways the data could +be represented as a Python value. Generally this module uses one of +three formats called "flat row flat pixel", "boxed row flat pixel", and +"boxed row boxed pixel". Basically the concern is whether each pixel +and each row comes in its own little tuple (box), or not. + +Consider an image that is 3 pixels wide by 2 pixels high, and each pixel +has RGB components: + +Boxed row flat pixel:: + + list([R,G,B, R,G,B, R,G,B], + [R,G,B, R,G,B, R,G,B]) + +Each row appears as its own list, but the pixels are flattened so +that three values for one pixel simply follow the three values for +the previous pixel. This is the most common format used, because it +provides a good compromise between space and convenience. PyPNG regards +itself as at liberty to replace any sequence type with any sufficiently +compatible other sequence type; in practice each row is an array (from +the array module), and the outer list is sometimes an iterator rather +than an explicit list (so that streaming is possible). + +Flat row flat pixel:: + + [R,G,B, R,G,B, R,G,B, + R,G,B, R,G,B, R,G,B] + +The entire image is one single giant sequence of colour values. +Generally an array will be used (to save space), not a list. + +Boxed row boxed pixel:: + + list([ (R,G,B), (R,G,B), (R,G,B) ], + [ (R,G,B), (R,G,B), (R,G,B) ]) + +Each row appears in its own list, but each pixel also appears in its own +tuple. A serious memory burn in Python. + +In all cases the top row comes first, and for each row the pixels are +ordered from left-to-right. Within a pixel the values appear in the +order, R-G-B-A (or L-A for greyscale--alpha). + +There is a fourth format, mentioned because it is used internally, +is close to what lies inside a PNG file itself, and has some support +from the public API. This format is called packed. When packed, +each row is a sequence of bytes (integers from 0 to 255), just as +it is before PNG scanline filtering is applied. When the bit depth +is 8 this is essentially the same as boxed row flat pixel; when the +bit depth is less than 8, several pixels are packed into each byte; +when the bit depth is 16 (the only value more than 8 that is supported +by the PNG image format) each pixel value is decomposed into 2 bytes +(and `packed` is a misnomer). This format is used by the +:meth:`Writer.write_packed` method. It isn't usually a convenient +format, but may be just right if the source data for the PNG image +comes from something that uses a similar format (for example, 1-bit +BMPs, or another PNG file). + +And now, my famous members +-------------------------- +""" + +# http://www.python.org/doc/2.2.3/whatsnew/node5.html +from __future__ import generators + +__version__ = "0.0.16" + +from array import array +try: # See :pyver:old + import itertools +except ImportError: + pass +import math +# http://www.python.org/doc/2.4.4/lib/module-operator.html +import operator +import struct +import sys +import zlib +# http://www.python.org/doc/2.4.4/lib/module-warnings.html +import warnings +try: + # `cpngfilters` is a Cython module: it must be compiled by + # Cython for this import to work. + # If this import does work, then it overrides pure-python + # filtering functions defined later in this file (see `class + # pngfilters`). + import cpngfilters as pngfilters +except ImportError: + pass + + +__all__ = ['Image', 'Reader', 'Writer', 'write_chunks', 'from_array'] + + +# The PNG signature. +# http://www.w3.org/TR/PNG/#5PNG-file-signature +_signature = struct.pack('8B', 137, 80, 78, 71, 13, 10, 26, 10) + +_adam7 = ((0, 0, 8, 8), + (4, 0, 8, 8), + (0, 4, 4, 8), + (2, 0, 4, 4), + (0, 2, 2, 4), + (1, 0, 2, 2), + (0, 1, 1, 2)) + +def group(s, n): + # See http://www.python.org/doc/2.6/library/functions.html#zip + return zip(*[iter(s)]*n) + +def isarray(x): + """Same as ``isinstance(x, array)`` except on Python 2.2, where it + always returns ``False``. This helps PyPNG work on Python 2.2. + """ + + try: + return isinstance(x, array) + except TypeError: + # Because on Python 2.2 array.array is not a type. + return False + +try: + array.tobytes +except AttributeError: + try: # see :pyver:old + array.tostring + except AttributeError: + def tostring(row): + l = len(row) + return struct.pack('%dB' % l, *row) + else: + def tostring(row): + """Convert row of bytes to string. Expects `row` to be an + ``array``. + """ + return row.tostring() +else: + def tostring(row): + """ Python3 definition, array.tostring() is deprecated in Python3 + """ + return row.tobytes() + +# Conditionally convert to bytes. Works on Python 2 and Python 3. +try: + bytes('', 'ascii') + def strtobytes(x): return bytes(x, 'iso8859-1') + def bytestostr(x): return str(x, 'iso8859-1') +except (NameError, TypeError): + # We get NameError when bytes() does not exist (most Python + # 2.x versions), and TypeError when bytes() exists but is on + # Python 2.x (when it is an alias for str() and takes at most + # one argument). + strtobytes = str + bytestostr = str + +def interleave_planes(ipixels, apixels, ipsize, apsize): + """ + Interleave (colour) planes, e.g. RGB + A = RGBA. + + Return an array of pixels consisting of the `ipsize` elements of + data from each pixel in `ipixels` followed by the `apsize` elements + of data from each pixel in `apixels`. Conventionally `ipixels` + and `apixels` are byte arrays so the sizes are bytes, but it + actually works with any arrays of the same type. The returned + array is the same type as the input arrays which should be the + same type as each other. + """ + + itotal = len(ipixels) + atotal = len(apixels) + newtotal = itotal + atotal + newpsize = ipsize + apsize + # Set up the output buffer + # See http://www.python.org/doc/2.4.4/lib/module-array.html#l2h-1356 + out = array(ipixels.typecode) + # It's annoying that there is no cheap way to set the array size :-( + out.extend(ipixels) + out.extend(apixels) + # Interleave in the pixel data + for i in range(ipsize): + out[i:newtotal:newpsize] = ipixels[i:itotal:ipsize] + for i in range(apsize): + out[i+ipsize:newtotal:newpsize] = apixels[i:atotal:apsize] + return out + +def check_palette(palette): + """Check a palette argument (to the :class:`Writer` class) + for validity. Returns the palette as a list if okay; raises an + exception otherwise. + """ + + # None is the default and is allowed. + if palette is None: + return None + + p = list(palette) + if not (0 < len(p) <= 256): + raise ValueError("a palette must have between 1 and 256 entries") + seen_triple = False + for i,t in enumerate(p): + if len(t) not in (3,4): + raise ValueError( + "palette entry %d: entries must be 3- or 4-tuples." % i) + if len(t) == 3: + seen_triple = True + if seen_triple and len(t) == 4: + raise ValueError( + "palette entry %d: all 4-tuples must precede all 3-tuples" % i) + for x in t: + if int(x) != x or not(0 <= x <= 255): + raise ValueError( + "palette entry %d: values must be integer: 0 <= x <= 255" % i) + return p + +def check_sizes(size, width, height): + """Check that these arguments, in supplied, are consistent. + Return a (width, height) pair. + """ + + if not size: + return width, height + + if len(size) != 2: + raise ValueError( + "size argument should be a pair (width, height)") + if width is not None and width != size[0]: + raise ValueError( + "size[0] (%r) and width (%r) should match when both are used." + % (size[0], width)) + if height is not None and height != size[1]: + raise ValueError( + "size[1] (%r) and height (%r) should match when both are used." + % (size[1], height)) + return size + +def check_color(c, greyscale, which): + """Checks that a colour argument for transparent or + background options is the right form. Returns the colour + (which, if it's a bar integer, is "corrected" to a 1-tuple). + """ + + if c is None: + return c + if greyscale: + try: + l = len(c) + except TypeError: + c = (c,) + if len(c) != 1: + raise ValueError("%s for greyscale must be 1-tuple" % + which) + if not isinteger(c[0]): + raise ValueError( + "%s colour for greyscale must be integer" % which) + else: + if not (len(c) == 3 and + isinteger(c[0]) and + isinteger(c[1]) and + isinteger(c[2])): + raise ValueError( + "%s colour must be a triple of integers" % which) + return c + +class Error(Exception): + def __str__(self): + return self.__class__.__name__ + ': ' + ' '.join(self.args) + +class FormatError(Error): + """Problem with input file format. In other words, PNG file does + not conform to the specification in some way and is invalid. + """ + +class ChunkError(FormatError): + pass + + +class Writer: + """ + PNG encoder in pure Python. + """ + + def __init__(self, width=None, height=None, + size=None, + greyscale=False, + alpha=False, + bitdepth=8, + palette=None, + transparent=None, + background=None, + gamma=None, + compression=None, + interlace=False, + bytes_per_sample=None, # deprecated + planes=None, + colormap=None, + maxval=None, + chunk_limit=2**20): + """ + Create a PNG encoder object. + + Arguments: + + width, height + Image size in pixels, as two separate arguments. + size + Image size (w,h) in pixels, as single argument. + greyscale + Input data is greyscale, not RGB. + alpha + Input data has alpha channel (RGBA or LA). + bitdepth + Bit depth: from 1 to 16. + palette + Create a palette for a colour mapped image (colour type 3). + transparent + Specify a transparent colour (create a ``tRNS`` chunk). + background + Specify a default background colour (create a ``bKGD`` chunk). + gamma + Specify a gamma value (create a ``gAMA`` chunk). + compression + zlib compression level: 0 (none) to 9 (more compressed); + default: -1 or None. + interlace + Create an interlaced image. + chunk_limit + Write multiple ``IDAT`` chunks to save memory. + + The image size (in pixels) can be specified either by using the + `width` and `height` arguments, or with the single `size` + argument. If `size` is used it should be a pair (*width*, + *height*). + + `greyscale` and `alpha` are booleans that specify whether + an image is greyscale (or colour), and whether it has an + alpha channel (or not). + + `bitdepth` specifies the bit depth of the source pixel values. + Each source pixel value must be an integer between 0 and + ``2**bitdepth-1``. For example, 8-bit images have values + between 0 and 255. PNG only stores images with bit depths of + 1,2,4,8, or 16. When `bitdepth` is not one of these values, + the next highest valid bit depth is selected, and an ``sBIT`` + (significant bits) chunk is generated that specifies the + original precision of the source image. In this case the + supplied pixel values will be rescaled to fit the range of + the selected bit depth. + + The details of which bit depth / colour model combinations the + PNG file format supports directly, are somewhat arcane + (refer to the PNG specification for full details). Briefly: + "small" bit depths (1,2,4) are only allowed with greyscale and + colour mapped images; colour mapped images cannot have bit depth + 16. + + For colour mapped images (in other words, when the `palette` + argument is specified) the `bitdepth` argument must match one of + the valid PNG bit depths: 1, 2, 4, or 8. (It is valid to have a + PNG image with a palette and an ``sBIT`` chunk, but the meaning + is slightly different; it would be awkward to press the + `bitdepth` argument into service for this.) + + The `palette` option, when specified, causes a colour mapped + image to be created: the PNG colour type is set to 3; greyscale + must not be set; alpha must not be set; transparent must not be + set; the bit depth must be 1,2,4, or 8. When a colour mapped + image is created, the pixel values are palette indexes and + the `bitdepth` argument specifies the size of these indexes + (not the size of the colour values in the palette). + + The palette argument value should be a sequence of 3- or + 4-tuples. 3-tuples specify RGB palette entries; 4-tuples + specify RGBA palette entries. If both 4-tuples and 3-tuples + appear in the sequence then all the 4-tuples must come + before all the 3-tuples. A ``PLTE`` chunk is created; if there + are 4-tuples then a ``tRNS`` chunk is created as well. The + ``PLTE`` chunk will contain all the RGB triples in the same + sequence; the ``tRNS`` chunk will contain the alpha channel for + all the 4-tuples, in the same sequence. Palette entries + are always 8-bit. + + If specified, the `transparent` and `background` parameters must + be a tuple with three integer values for red, green, blue, or + a simple integer (or singleton tuple) for a greyscale image. + + If specified, the `gamma` parameter must be a positive number + (generally, a float). A ``gAMA`` chunk will be created. + Note that this will not change the values of the pixels as + they appear in the PNG file, they are assumed to have already + been converted appropriately for the gamma specified. + + The `compression` argument specifies the compression level to + be used by the ``zlib`` module. Values from 1 to 9 specify + compression, with 9 being "more compressed" (usually smaller + and slower, but it doesn't always work out that way). 0 means + no compression. -1 and ``None`` both mean that the default + level of compession will be picked by the ``zlib`` module + (which is generally acceptable). + + If `interlace` is true then an interlaced image is created + (using PNG's so far only interace method, *Adam7*). This does + not affect how the pixels should be presented to the encoder, + rather it changes how they are arranged into the PNG file. + On slow connexions interlaced images can be partially decoded + by the browser to give a rough view of the image that is + successively refined as more image data appears. + + .. note :: + + Enabling the `interlace` option requires the entire image + to be processed in working memory. + + `chunk_limit` is used to limit the amount of memory used whilst + compressing the image. In order to avoid using large amounts of + memory, multiple ``IDAT`` chunks may be created. + """ + + # At the moment the `planes` argument is ignored; + # its purpose is to act as a dummy so that + # ``Writer(x, y, **info)`` works, where `info` is a dictionary + # returned by Reader.read and friends. + # Ditto for `colormap`. + + width, height = check_sizes(size, width, height) + del size + + if width <= 0 or height <= 0: + raise ValueError("width and height must be greater than zero") + if not isinteger(width) or not isinteger(height): + raise ValueError("width and height must be integers") + # http://www.w3.org/TR/PNG/#7Integers-and-byte-order + if width > 2**32-1 or height > 2**32-1: + raise ValueError("width and height cannot exceed 2**32-1") + + if alpha and transparent is not None: + raise ValueError( + "transparent colour not allowed with alpha channel") + + if bytes_per_sample is not None: + warnings.warn('please use bitdepth instead of bytes_per_sample', + DeprecationWarning) + if bytes_per_sample not in (0.125, 0.25, 0.5, 1, 2): + raise ValueError( + "bytes per sample must be .125, .25, .5, 1, or 2") + bitdepth = int(8*bytes_per_sample) + del bytes_per_sample + if not isinteger(bitdepth) or bitdepth < 1 or 16 < bitdepth: + raise ValueError("bitdepth (%r) must be a postive integer <= 16" % + bitdepth) + + self.rescale = None + if palette: + if bitdepth not in (1,2,4,8): + raise ValueError("with palette, bitdepth must be 1, 2, 4, or 8") + if transparent is not None: + raise ValueError("transparent and palette not compatible") + if alpha: + raise ValueError("alpha and palette not compatible") + if greyscale: + raise ValueError("greyscale and palette not compatible") + else: + # No palette, check for sBIT chunk generation. + if alpha or not greyscale: + if bitdepth not in (8,16): + targetbitdepth = (8,16)[bitdepth > 8] + self.rescale = (bitdepth, targetbitdepth) + bitdepth = targetbitdepth + del targetbitdepth + else: + assert greyscale + assert not alpha + if bitdepth not in (1,2,4,8,16): + if bitdepth > 8: + targetbitdepth = 16 + elif bitdepth == 3: + targetbitdepth = 4 + else: + assert bitdepth in (5,6,7) + targetbitdepth = 8 + self.rescale = (bitdepth, targetbitdepth) + bitdepth = targetbitdepth + del targetbitdepth + + if bitdepth < 8 and (alpha or not greyscale and not palette): + raise ValueError( + "bitdepth < 8 only permitted with greyscale or palette") + if bitdepth > 8 and palette: + raise ValueError( + "bit depth must be 8 or less for images with palette") + + transparent = check_color(transparent, greyscale, 'transparent') + background = check_color(background, greyscale, 'background') + + # It's important that the true boolean values (greyscale, alpha, + # colormap, interlace) are converted to bool because Iverson's + # convention is relied upon later on. + self.width = width + self.height = height + self.transparent = transparent + self.background = background + self.gamma = gamma + self.greyscale = bool(greyscale) + self.alpha = bool(alpha) + self.colormap = bool(palette) + self.bitdepth = int(bitdepth) + self.compression = compression + self.chunk_limit = chunk_limit + self.interlace = bool(interlace) + self.palette = check_palette(palette) + + self.color_type = 4*self.alpha + 2*(not greyscale) + 1*self.colormap + assert self.color_type in (0,2,3,4,6) + + self.color_planes = (3,1)[self.greyscale or self.colormap] + self.planes = self.color_planes + self.alpha + # :todo: fix for bitdepth < 8 + self.psize = (self.bitdepth/8) * self.planes + + def make_palette(self): + """Create the byte sequences for a ``PLTE`` and if necessary a + ``tRNS`` chunk. Returned as a pair (*p*, *t*). *t* will be + ``None`` if no ``tRNS`` chunk is necessary. + """ + + p = array('B') + t = array('B') + + for x in self.palette: + p.extend(x[0:3]) + if len(x) > 3: + t.append(x[3]) + p = tostring(p) + t = tostring(t) + if t: + return p,t + return p,None + + def write(self, outfile, rows): + """Write a PNG image to the output file. `rows` should be + an iterable that yields each row in boxed row flat pixel + format. The rows should be the rows of the original image, + so there should be ``self.height`` rows of ``self.width * + self.planes`` values. If `interlace` is specified (when + creating the instance), then an interlaced PNG file will + be written. Supply the rows in the normal image order; + the interlacing is carried out internally. + + .. note :: + + Interlacing will require the entire image to be in working + memory. + """ + + if self.interlace: + fmt = 'BH'[self.bitdepth > 8] + a = array(fmt, itertools.chain(*rows)) + return self.write_array(outfile, a) + else: + nrows = self.write_passes(outfile, rows) + if nrows != self.height: + raise ValueError( + "rows supplied (%d) does not match height (%d)" % + (nrows, self.height)) + + def write_passes(self, outfile, rows, packed=False): + """ + Write a PNG image to the output file. + + Most users are expected to find the :meth:`write` or + :meth:`write_array` method more convenient. + + The rows should be given to this method in the order that + they appear in the output file. For straightlaced images, + this is the usual top to bottom ordering, but for interlaced + images the rows should have already been interlaced before + passing them to this function. + + `rows` should be an iterable that yields each row. When + `packed` is ``False`` the rows should be in boxed row flat pixel + format; when `packed` is ``True`` each row should be a packed + sequence of bytes. + """ + + # http://www.w3.org/TR/PNG/#5PNG-file-signature + outfile.write(_signature) + + # http://www.w3.org/TR/PNG/#11IHDR + write_chunk(outfile, 'IHDR', + struct.pack("!2I5B", self.width, self.height, + self.bitdepth, self.color_type, + 0, 0, self.interlace)) + + # See :chunk:order + # http://www.w3.org/TR/PNG/#11gAMA + if self.gamma is not None: + write_chunk(outfile, 'gAMA', + struct.pack("!L", int(round(self.gamma*1e5)))) + + # See :chunk:order + # http://www.w3.org/TR/PNG/#11sBIT + if self.rescale: + write_chunk(outfile, 'sBIT', + struct.pack('%dB' % self.planes, + *[self.rescale[0]]*self.planes)) + + # :chunk:order: Without a palette (PLTE chunk), ordering is + # relatively relaxed. With one, gAMA chunk must precede PLTE + # chunk which must precede tRNS and bKGD. + # See http://www.w3.org/TR/PNG/#5ChunkOrdering + if self.palette: + p,t = self.make_palette() + write_chunk(outfile, 'PLTE', p) + if t: + # tRNS chunk is optional. Only needed if palette entries + # have alpha. + write_chunk(outfile, 'tRNS', t) + + # http://www.w3.org/TR/PNG/#11tRNS + if self.transparent is not None: + if self.greyscale: + write_chunk(outfile, 'tRNS', + struct.pack("!1H", *self.transparent)) + else: + write_chunk(outfile, 'tRNS', + struct.pack("!3H", *self.transparent)) + + # http://www.w3.org/TR/PNG/#11bKGD + if self.background is not None: + if self.greyscale: + write_chunk(outfile, 'bKGD', + struct.pack("!1H", *self.background)) + else: + write_chunk(outfile, 'bKGD', + struct.pack("!3H", *self.background)) + + # http://www.w3.org/TR/PNG/#11IDAT + if self.compression is not None: + compressor = zlib.compressobj(self.compression) + else: + compressor = zlib.compressobj() + + # Choose an extend function based on the bitdepth. The extend + # function packs/decomposes the pixel values into bytes and + # stuffs them onto the data array. + data = array('B') + if self.bitdepth == 8 or packed: + extend = data.extend + elif self.bitdepth == 16: + # Decompose into bytes + def extend(sl): + fmt = '!%dH' % len(sl) + data.extend(array('B', struct.pack(fmt, *sl))) + else: + # Pack into bytes + assert self.bitdepth < 8 + # samples per byte + spb = int(8/self.bitdepth) + def extend(sl): + a = array('B', sl) + # Adding padding bytes so we can group into a whole + # number of spb-tuples. + l = float(len(a)) + extra = math.ceil(l / float(spb))*spb - l + a.extend([0]*int(extra)) + # Pack into bytes + l = group(a, spb) + l = map(lambda e: reduce(lambda x,y: + (x << self.bitdepth) + y, e), l) + data.extend(l) + if self.rescale: + oldextend = extend + factor = \ + float(2**self.rescale[1]-1) / float(2**self.rescale[0]-1) + def extend(sl): + oldextend(map(lambda x: int(round(factor*x)), sl)) + + # Build the first row, testing mostly to see if we need to + # changed the extend function to cope with NumPy integer types + # (they cause our ordinary definition of extend to fail, so we + # wrap it). See + # http://code.google.com/p/pypng/issues/detail?id=44 + enumrows = enumerate(rows) + del rows + + # First row's filter type. + data.append(0) + # :todo: Certain exceptions in the call to ``.next()`` or the + # following try would indicate no row data supplied. + # Should catch. + i, row = next(enumrows) + try: + # If this fails... + extend(row) + except: + # ... try a version that converts the values to int first. + # Not only does this work for the (slightly broken) NumPy + # types, there are probably lots of other, unknown, "nearly" + # int types it works for. + def wrapmapint(f): + return lambda sl: f(map(int, sl)) + extend = wrapmapint(extend) + del wrapmapint + extend(row) + + for i,row in enumrows: + # Add "None" filter type. Currently, it's essential that + # this filter type be used for every scanline as we do not + # mark the first row of a reduced pass image; that means we + # could accidentally compute the wrong filtered scanline if + # we used "up", "average", or "paeth" on such a line. + data.append(0) + extend(row) + if len(data) > self.chunk_limit: + compressed = compressor.compress(tostring(data)) + if len(compressed): + write_chunk(outfile, 'IDAT', compressed) + # Because of our very witty definition of ``extend``, + # above, we must re-use the same ``data`` object. Hence + # we use ``del`` to empty this one, rather than create a + # fresh one (which would be my natural FP instinct). + del data[:] + if len(data): + compressed = compressor.compress(tostring(data)) + else: + compressed = '' + flushed = compressor.flush() + if len(compressed) or len(flushed): + write_chunk(outfile, 'IDAT', compressed + flushed) + # http://www.w3.org/TR/PNG/#11IEND + write_chunk(outfile, 'IEND') + return i+1 + + def write_array(self, outfile, pixels): + """ + Write an array in flat row flat pixel format as a PNG file on + the output file. See also :meth:`write` method. + """ + + if self.interlace: + self.write_passes(outfile, self.array_scanlines_interlace(pixels)) + else: + self.write_passes(outfile, self.array_scanlines(pixels)) + + def write_packed(self, outfile, rows): + """ + Write PNG file to `outfile`. The pixel data comes from `rows` + which should be in boxed row packed format. Each row should be + a sequence of packed bytes. + + Technically, this method does work for interlaced images but it + is best avoided. For interlaced images, the rows should be + presented in the order that they appear in the file. + + This method should not be used when the source image bit depth + is not one naturally supported by PNG; the bit depth should be + 1, 2, 4, 8, or 16. + """ + + if self.rescale: + raise Error("write_packed method not suitable for bit depth %d" % + self.rescale[0]) + return self.write_passes(outfile, rows, packed=True) + + def convert_pnm(self, infile, outfile): + """ + Convert a PNM file containing raw pixel data into a PNG file + with the parameters set in the writer object. Works for + (binary) PGM, PPM, and PAM formats. + """ + + if self.interlace: + pixels = array('B') + pixels.fromfile(infile, + (self.bitdepth/8) * self.color_planes * + self.width * self.height) + self.write_passes(outfile, self.array_scanlines_interlace(pixels)) + else: + self.write_passes(outfile, self.file_scanlines(infile)) + + def convert_ppm_and_pgm(self, ppmfile, pgmfile, outfile): + """ + Convert a PPM and PGM file containing raw pixel data into a + PNG outfile with the parameters set in the writer object. + """ + pixels = array('B') + pixels.fromfile(ppmfile, + (self.bitdepth/8) * self.color_planes * + self.width * self.height) + apixels = array('B') + apixels.fromfile(pgmfile, + (self.bitdepth/8) * + self.width * self.height) + pixels = interleave_planes(pixels, apixels, + (self.bitdepth/8) * self.color_planes, + (self.bitdepth/8)) + if self.interlace: + self.write_passes(outfile, self.array_scanlines_interlace(pixels)) + else: + self.write_passes(outfile, self.array_scanlines(pixels)) + + def file_scanlines(self, infile): + """ + Generates boxed rows in flat pixel format, from the input file + `infile`. It assumes that the input file is in a "Netpbm-like" + binary format, and is positioned at the beginning of the first + pixel. The number of pixels to read is taken from the image + dimensions (`width`, `height`, `planes`) and the number of bytes + per value is implied by the image `bitdepth`. + """ + + # Values per row + vpr = self.width * self.planes + row_bytes = vpr + if self.bitdepth > 8: + assert self.bitdepth == 16 + row_bytes *= 2 + fmt = '>%dH' % vpr + def line(): + return array('H', struct.unpack(fmt, infile.read(row_bytes))) + else: + def line(): + scanline = array('B', infile.read(row_bytes)) + return scanline + for y in range(self.height): + yield line() + + def array_scanlines(self, pixels): + """ + Generates boxed rows (flat pixels) from flat rows (flat pixels) + in an array. + """ + + # Values per row + vpr = self.width * self.planes + stop = 0 + for y in range(self.height): + start = stop + stop = start + vpr + yield pixels[start:stop] + + def array_scanlines_interlace(self, pixels): + """ + Generator for interlaced scanlines from an array. `pixels` is + the full source image in flat row flat pixel format. The + generator yields each scanline of the reduced passes in turn, in + boxed row flat pixel format. + """ + + # http://www.w3.org/TR/PNG/#8InterlaceMethods + # Array type. + fmt = 'BH'[self.bitdepth > 8] + # Value per row + vpr = self.width * self.planes + for xstart, ystart, xstep, ystep in _adam7: + if xstart >= self.width: + continue + # Pixels per row (of reduced image) + ppr = int(math.ceil((self.width-xstart)/float(xstep))) + # number of values in reduced image row. + row_len = ppr*self.planes + for y in range(ystart, self.height, ystep): + if xstep == 1: + offset = y * vpr + yield pixels[offset:offset+vpr] + else: + row = array(fmt) + # There's no easier way to set the length of an array + row.extend(pixels[0:row_len]) + offset = y * vpr + xstart * self.planes + end_offset = (y+1) * vpr + skip = self.planes * xstep + for i in range(self.planes): + row[i::self.planes] = \ + pixels[offset+i:end_offset:skip] + yield row + +def write_chunk(outfile, tag, data=strtobytes('')): + """ + Write a PNG chunk to the output file, including length and + checksum. + """ + + # http://www.w3.org/TR/PNG/#5Chunk-layout + outfile.write(struct.pack("!I", len(data))) + tag = strtobytes(tag) + outfile.write(tag) + outfile.write(data) + checksum = zlib.crc32(tag) + checksum = zlib.crc32(data, checksum) + checksum &= 2**32-1 + outfile.write(struct.pack("!I", checksum)) + +def write_chunks(out, chunks): + """Create a PNG file by writing out the chunks.""" + + out.write(_signature) + for chunk in chunks: + write_chunk(out, *chunk) + +def filter_scanline(type, line, fo, prev=None): + """Apply a scanline filter to a scanline. `type` specifies the + filter type (0 to 4); `line` specifies the current (unfiltered) + scanline as a sequence of bytes; `prev` specifies the previous + (unfiltered) scanline as a sequence of bytes. `fo` specifies the + filter offset; normally this is size of a pixel in bytes (the number + of bytes per sample times the number of channels), but when this is + < 1 (for bit depths < 8) then the filter offset is 1. + """ + + assert 0 <= type < 5 + + # The output array. Which, pathetically, we extend one-byte at a + # time (fortunately this is linear). + out = array('B', [type]) + + def sub(): + ai = -fo + for x in line: + if ai >= 0: + x = (x - line[ai]) & 0xff + out.append(x) + ai += 1 + def up(): + for i,x in enumerate(line): + x = (x - prev[i]) & 0xff + out.append(x) + def average(): + ai = -fo + for i,x in enumerate(line): + if ai >= 0: + x = (x - ((line[ai] + prev[i]) >> 1)) & 0xff + else: + x = (x - (prev[i] >> 1)) & 0xff + out.append(x) + ai += 1 + def paeth(): + # http://www.w3.org/TR/PNG/#9Filter-type-4-Paeth + ai = -fo # also used for ci + for i,x in enumerate(line): + a = 0 + b = prev[i] + c = 0 + + if ai >= 0: + a = line[ai] + c = prev[ai] + p = a + b - c + pa = abs(p - a) + pb = abs(p - b) + pc = abs(p - c) + if pa <= pb and pa <= pc: Pr = a + elif pb <= pc: Pr = b + else: Pr = c + + x = (x - Pr) & 0xff + out.append(x) + ai += 1 + + if not prev: + # We're on the first line. Some of the filters can be reduced + # to simpler cases which makes handling the line "off the top" + # of the image simpler. "up" becomes "none"; "paeth" becomes + # "left" (non-trivial, but true). "average" needs to be handled + # specially. + if type == 2: # "up" + type = 0 + elif type == 3: + prev = [0]*len(line) + elif type == 4: # "paeth" + type = 1 + if type == 0: + out.extend(line) + elif type == 1: + sub() + elif type == 2: + up() + elif type == 3: + average() + else: # type == 4 + paeth() + return out + + +def from_array(a, mode=None, info={}): + """Create a PNG :class:`Image` object from a 2- or 3-dimensional + array. One application of this function is easy PIL-style saving: + ``png.from_array(pixels, 'L').save('foo.png')``. + + .. note : + + The use of the term *3-dimensional* is for marketing purposes + only. It doesn't actually work. Please bear with us. Meanwhile + enjoy the complimentary snacks (on request) and please use a + 2-dimensional array. + + Unless they are specified using the *info* parameter, the PNG's + height and width are taken from the array size. For a 3 dimensional + array the first axis is the height; the second axis is the width; + and the third axis is the channel number. Thus an RGB image that is + 16 pixels high and 8 wide will use an array that is 16x8x3. For 2 + dimensional arrays the first axis is the height, but the second axis + is ``width*channels``, so an RGB image that is 16 pixels high and 8 + wide will use a 2-dimensional array that is 16x24 (each row will be + 8*3==24 sample values). + + *mode* is a string that specifies the image colour format in a + PIL-style mode. It can be: + + ``'L'`` + greyscale (1 channel) + ``'LA'`` + greyscale with alpha (2 channel) + ``'RGB'`` + colour image (3 channel) + ``'RGBA'`` + colour image with alpha (4 channel) + + The mode string can also specify the bit depth (overriding how this + function normally derives the bit depth, see below). Appending + ``';16'`` to the mode will cause the PNG to be 16 bits per channel; + any decimal from 1 to 16 can be used to specify the bit depth. + + When a 2-dimensional array is used *mode* determines how many + channels the image has, and so allows the width to be derived from + the second array dimension. + + The array is expected to be a ``numpy`` array, but it can be any + suitable Python sequence. For example, a list of lists can be used: + ``png.from_array([[0, 255, 0], [255, 0, 255]], 'L')``. The exact + rules are: ``len(a)`` gives the first dimension, height; + ``len(a[0])`` gives the second dimension; ``len(a[0][0])`` gives the + third dimension, unless an exception is raised in which case a + 2-dimensional array is assumed. It's slightly more complicated than + that because an iterator of rows can be used, and it all still + works. Using an iterator allows data to be streamed efficiently. + + The bit depth of the PNG is normally taken from the array element's + datatype (but if *mode* specifies a bitdepth then that is used + instead). The array element's datatype is determined in a way which + is supposed to work both for ``numpy`` arrays and for Python + ``array.array`` objects. A 1 byte datatype will give a bit depth of + 8, a 2 byte datatype will give a bit depth of 16. If the datatype + does not have an implicit size, for example it is a plain Python + list of lists, as above, then a default of 8 is used. + + The *info* parameter is a dictionary that can be used to specify + metadata (in the same style as the arguments to the + :class:``png.Writer`` class). For this function the keys that are + useful are: + + height + overrides the height derived from the array dimensions and allows + *a* to be an iterable. + width + overrides the width derived from the array dimensions. + bitdepth + overrides the bit depth derived from the element datatype (but + must match *mode* if that also specifies a bit depth). + + Generally anything specified in the + *info* dictionary will override any implicit choices that this + function would otherwise make, but must match any explicit ones. + For example, if the *info* dictionary has a ``greyscale`` key then + this must be true when mode is ``'L'`` or ``'LA'`` and false when + mode is ``'RGB'`` or ``'RGBA'``. + """ + + # We abuse the *info* parameter by modifying it. Take a copy here. + # (Also typechecks *info* to some extent). + info = dict(info) + + # Syntax check mode string. + bitdepth = None + try: + # Assign the 'L' or 'RGBA' part to `gotmode`. + if mode.startswith('L'): + gotmode = 'L' + mode = mode[1:] + elif mode.startswith('RGB'): + gotmode = 'RGB' + mode = mode[3:] + else: + raise Error() + if mode.startswith('A'): + gotmode += 'A' + mode = mode[1:] + + # Skip any optional ';' + while mode.startswith(';'): + mode = mode[1:] + + # Parse optional bitdepth + if mode: + try: + bitdepth = int(mode) + except (TypeError, ValueError): + raise Error() + except Error: + raise Error("mode string should be 'RGB' or 'L;16' or similar.") + mode = gotmode + + # Get bitdepth from *mode* if possible. + if bitdepth: + if info.get('bitdepth') and bitdepth != info['bitdepth']: + raise Error("mode bitdepth (%d) should match info bitdepth (%d)." % + (bitdepth, info['bitdepth'])) + info['bitdepth'] = bitdepth + + # Fill in and/or check entries in *info*. + # Dimensions. + if 'size' in info: + # Check width, height, size all match where used. + for dimension,axis in [('width', 0), ('height', 1)]: + if dimension in info: + if info[dimension] != info['size'][axis]: + raise Error( + "info[%r] should match info['size'][%r]." % + (dimension, axis)) + info['width'],info['height'] = info['size'] + if 'height' not in info: + try: + l = len(a) + except TypeError: + raise Error( + "len(a) does not work, supply info['height'] instead.") + info['height'] = l + # Colour format. + if 'greyscale' in info: + if bool(info['greyscale']) != ('L' in mode): + raise Error("info['greyscale'] should match mode.") + info['greyscale'] = 'L' in mode + if 'alpha' in info: + if bool(info['alpha']) != ('A' in mode): + raise Error("info['alpha'] should match mode.") + info['alpha'] = 'A' in mode + + planes = len(mode) + if 'planes' in info: + if info['planes'] != planes: + raise Error("info['planes'] should match mode.") + + # In order to work out whether we the array is 2D or 3D we need its + # first row, which requires that we take a copy of its iterator. + # We may also need the first row to derive width and bitdepth. + a,t = itertools.tee(a) + row = t.next() + del t + try: + row[0][0] + threed = True + testelement = row[0] + except (IndexError, TypeError): + threed = False + testelement = row + if 'width' not in info: + if threed: + width = len(row) + else: + width = len(row) // planes + info['width'] = width + + # Not implemented yet + assert not threed + + if 'bitdepth' not in info: + try: + dtype = testelement.dtype + # goto the "else:" clause. Sorry. + except AttributeError: + try: + # Try a Python array.array. + bitdepth = 8 * testelement.itemsize + except AttributeError: + # We can't determine it from the array element's + # datatype, use a default of 8. + bitdepth = 8 + else: + # If we got here without exception, we now assume that + # the array is a numpy array. + if dtype.kind == 'b': + bitdepth = 1 + else: + bitdepth = 8 * dtype.itemsize + info['bitdepth'] = bitdepth + + for thing in 'width height bitdepth greyscale alpha'.split(): + assert thing in info + return Image(a, info) + +# So that refugee's from PIL feel more at home. Not documented. +fromarray = from_array + +class Image: + """A PNG image. You can create an :class:`Image` object from + an array of pixels by calling :meth:`png.from_array`. It can be + saved to disk with the :meth:`save` method. + """ + + def __init__(self, rows, info): + """ + .. note :: + + The constructor is not public. Please do not call it. + """ + + self.rows = rows + self.info = info + + def save(self, file): + """Save the image to *file*. If *file* looks like an open file + descriptor then it is used, otherwise it is treated as a + filename and a fresh file is opened. + + In general, you can only call this method once; after it has + been called the first time and the PNG image has been saved, the + source data will have been streamed, and cannot be streamed + again. + """ + + w = Writer(**self.info) + + try: + file.write + def close(): pass + except AttributeError: + file = open(file, 'wb') + def close(): file.close() + + try: + w.write(file, self.rows) + finally: + close() + +class _readable: + """ + A simple file-like interface for strings and arrays. + """ + + def __init__(self, buf): + self.buf = buf + self.offset = 0 + + def read(self, n): + r = self.buf[self.offset:self.offset+n] + if isarray(r): + r = r.tostring() + self.offset += n + return r + + +class Reader: + """ + PNG decoder in pure Python. + """ + + def __init__(self, _guess=None, **kw): + """ + Create a PNG decoder object. + + The constructor expects exactly one keyword argument. If you + supply a positional argument instead, it will guess the input + type. You can choose among the following keyword arguments: + + filename + Name of input file (a PNG file). + file + A file-like object (object with a read() method). + bytes + ``array`` or ``string`` with PNG data. + + """ + if ((_guess is not None and len(kw) != 0) or + (_guess is None and len(kw) != 1)): + raise TypeError("Reader() takes exactly 1 argument") + + # Will be the first 8 bytes, later on. See validate_signature. + self.signature = None + self.transparent = None + # A pair of (len,type) if a chunk has been read but its data and + # checksum have not (in other words the file position is just + # past the 4 bytes that specify the chunk type). See preamble + # method for how this is used. + self.atchunk = None + + if _guess is not None: + if isarray(_guess): + kw["bytes"] = _guess + elif isinstance(_guess, str): + kw["filename"] = _guess + elif hasattr(_guess, 'read'): + kw["file"] = _guess + + if "filename" in kw: + self.file = open(kw["filename"], "rb") + elif "file" in kw: + self.file = kw["file"] + elif "bytes" in kw: + self.file = _readable(kw["bytes"]) + else: + raise TypeError("expecting filename, file or bytes array") + + + def chunk(self, seek=None, lenient=False): + """ + Read the next PNG chunk from the input file; returns a + (*type*,*data*) tuple. *type* is the chunk's type as a string + (all PNG chunk types are 4 characters long). *data* is the + chunk's data content, as a string. + + If the optional `seek` argument is + specified then it will keep reading chunks until it either runs + out of file or finds the type specified by the argument. Note + that in general the order of chunks in PNGs is unspecified, so + using `seek` can cause you to miss chunks. + + If the optional `lenient` argument evaluates to True, + checksum failures will raise warnings rather than exceptions. + """ + + self.validate_signature() + + while True: + # http://www.w3.org/TR/PNG/#5Chunk-layout + if not self.atchunk: + self.atchunk = self.chunklentype() + length,type = self.atchunk + self.atchunk = None + data = self.file.read(length) + if len(data) != length: + raise ChunkError('Chunk %s too short for required %i octets.' + % (type, length)) + checksum = self.file.read(4) + if len(checksum) != 4: + raise ValueError('Chunk %s too short for checksum.', tag) + if seek and type != seek: + continue + verify = zlib.crc32(strtobytes(type)) + verify = zlib.crc32(data, verify) + # Whether the output from zlib.crc32 is signed or not varies + # according to hideous implementation details, see + # http://bugs.python.org/issue1202 . + # We coerce it to be positive here (in a way which works on + # Python 2.3 and older). + verify &= 2**32 - 1 + verify = struct.pack('!I', verify) + if checksum != verify: + (a, ) = struct.unpack('!I', checksum) + (b, ) = struct.unpack('!I', verify) + message = "Checksum error in %s chunk: 0x%08X != 0x%08X." % (type, a, b) + if lenient: + warnings.warn(message, RuntimeWarning) + else: + raise ChunkError(message) + return type, data + + def chunks(self): + """Return an iterator that will yield each chunk as a + (*chunktype*, *content*) pair. + """ + + while True: + t,v = self.chunk() + yield t,v + if t == 'IEND': + break + + def undo_filter(self, filter_type, scanline, previous): + """Undo the filter for a scanline. `scanline` is a sequence of + bytes that does not include the initial filter type byte. + `previous` is decoded previous scanline (for straightlaced + images this is the previous pixel row, but for interlaced + images, it is the previous scanline in the reduced image, which + in general is not the previous pixel row in the final image). + When there is no previous scanline (the first row of a + straightlaced image, or the first row in one of the passes in an + interlaced image), then this argument should be ``None``. + + The scanline will have the effects of filtering removed, and the + result will be returned as a fresh sequence of bytes. + """ + + # :todo: Would it be better to update scanline in place? + # Yes, with the Cython extension making the undo_filter fast, + # updating scanline inplace makes the code 3 times faster + # (reading 50 images of 800x800 went from 40s to 16s) + result = scanline + + if filter_type == 0: + return result + + if filter_type not in (1,2,3,4): + raise FormatError('Invalid PNG Filter Type.' + ' See http://www.w3.org/TR/2003/REC-PNG-20031110/#9Filters .') + + # Filter unit. The stride from one pixel to the corresponding + # byte from the previous pixel. Normally this is the pixel + # size in bytes, but when this is smaller than 1, the previous + # byte is used instead. + fu = max(1, self.psize) + + # For the first line of a pass, synthesize a dummy previous + # line. An alternative approach would be to observe that on the + # first line 'up' is the same as 'null', 'paeth' is the same + # as 'sub', with only 'average' requiring any special case. + if not previous: + previous = array('B', [0]*len(scanline)) + + def sub(): + """Undo sub filter.""" + + ai = 0 + # Loop starts at index fu. Observe that the initial part + # of the result is already filled in correctly with + # scanline. + for i in range(fu, len(result)): + x = scanline[i] + a = result[ai] + result[i] = (x + a) & 0xff + ai += 1 + + def up(): + """Undo up filter.""" + + for i in range(len(result)): + x = scanline[i] + b = previous[i] + result[i] = (x + b) & 0xff + + def average(): + """Undo average filter.""" + + ai = -fu + for i in range(len(result)): + x = scanline[i] + if ai < 0: + a = 0 + else: + a = result[ai] + b = previous[i] + result[i] = (x + ((a + b) >> 1)) & 0xff + ai += 1 + + def paeth(): + """Undo Paeth filter.""" + + # Also used for ci. + ai = -fu + for i in range(len(result)): + x = scanline[i] + if ai < 0: + a = c = 0 + else: + a = result[ai] + c = previous[ai] + b = previous[i] + p = a + b - c + pa = abs(p - a) + pb = abs(p - b) + pc = abs(p - c) + if pa <= pb and pa <= pc: + pr = a + elif pb <= pc: + pr = b + else: + pr = c + result[i] = (x + pr) & 0xff + ai += 1 + + # Call appropriate filter algorithm. Note that 0 has already + # been dealt with. + (None, + pngfilters.undo_filter_sub, + pngfilters.undo_filter_up, + pngfilters.undo_filter_average, + pngfilters.undo_filter_paeth)[filter_type](fu, scanline, previous, result) + return result + + def deinterlace(self, raw): + """ + Read raw pixel data, undo filters, deinterlace, and flatten. + Return in flat row flat pixel format. + """ + + # Values per row (of the target image) + vpr = self.width * self.planes + + # Make a result array, and make it big enough. Interleaving + # writes to the output array randomly (well, not quite), so the + # entire output array must be in memory. + fmt = 'BH'[self.bitdepth > 8] + a = array(fmt, [0]*vpr*self.height) + source_offset = 0 + + for xstart, ystart, xstep, ystep in _adam7: + if xstart >= self.width: + continue + # The previous (reconstructed) scanline. None at the + # beginning of a pass to indicate that there is no previous + # line. + recon = None + # Pixels per row (reduced pass image) + ppr = int(math.ceil((self.width-xstart)/float(xstep))) + # Row size in bytes for this pass. + row_size = int(math.ceil(self.psize * ppr)) + for y in range(ystart, self.height, ystep): + filter_type = raw[source_offset] + source_offset += 1 + scanline = raw[source_offset:source_offset+row_size] + source_offset += row_size + recon = self.undo_filter(filter_type, scanline, recon) + # Convert so that there is one element per pixel value + flat = self.serialtoflat(recon, ppr) + if xstep == 1: + assert xstart == 0 + offset = y * vpr + a[offset:offset+vpr] = flat + else: + offset = y * vpr + xstart * self.planes + end_offset = (y+1) * vpr + skip = self.planes * xstep + for i in range(self.planes): + a[offset+i:end_offset:skip] = \ + flat[i::self.planes] + return a + + def iterboxed(self, rows): + """Iterator that yields each scanline in boxed row flat pixel + format. `rows` should be an iterator that yields the bytes of + each row in turn. + """ + + def asvalues(raw): + """Convert a row of raw bytes into a flat row. Result may + or may not share with argument""" + + if self.bitdepth == 8: + return raw + if self.bitdepth == 16: + raw = tostring(raw) + return array('H', struct.unpack('!%dH' % (len(raw)//2), raw)) + assert self.bitdepth < 8 + width = self.width + # Samples per byte + spb = 8//self.bitdepth + out = array('B') + mask = 2**self.bitdepth - 1 + shifts = map(self.bitdepth.__mul__, reversed(range(spb))) + for o in raw: + out.extend(map(lambda i: mask&(o>>i), shifts)) + return out[:width] + + return map(asvalues, rows) + + def serialtoflat(self, bytes, width=None): + """Convert serial format (byte stream) pixel data to flat row + flat pixel. + """ + + if self.bitdepth == 8: + return bytes + if self.bitdepth == 16: + bytes = tostring(bytes) + return array('H', + struct.unpack('!%dH' % (len(bytes)//2), bytes)) + assert self.bitdepth < 8 + if width is None: + width = self.width + # Samples per byte + spb = 8//self.bitdepth + out = array('B') + mask = 2**self.bitdepth - 1 + shifts = map(self.bitdepth.__mul__, reversed(range(spb))) + l = width + for o in bytes: + out.extend([(mask&(o>>s)) for s in shifts][:l]) + l -= spb + if l <= 0: + l = width + return out + + def iterstraight(self, raw): + """Iterator that undoes the effect of filtering, and yields + each row in serialised format (as a sequence of bytes). + Assumes input is straightlaced. `raw` should be an iterable + that yields the raw bytes in chunks of arbitrary size. + """ + + # length of row, in bytes + rb = self.row_bytes + a = array('B') + # The previous (reconstructed) scanline. None indicates first + # line of image. + recon = None + for some in raw: + a.extend(some) + while len(a) >= rb + 1: + filter_type = a[0] + scanline = a[1:rb+1] + del a[:rb+1] + recon = self.undo_filter(filter_type, scanline, recon) + yield recon + if len(a) != 0: + # :file:format We get here with a file format error: + # when the available bytes (after decompressing) do not + # pack into exact rows. + raise FormatError( + 'Wrong size for decompressed IDAT chunk.') + assert len(a) == 0 + + def validate_signature(self): + """If signature (header) has not been read then read and + validate it; otherwise do nothing. + """ + + if self.signature: + return + self.signature = self.file.read(8) + if self.signature != _signature: + raise FormatError("PNG file has invalid signature.") + + def preamble(self, lenient=False): + """ + Extract the image metadata by reading the initial part of + the PNG file up to the start of the ``IDAT`` chunk. All the + chunks that precede the ``IDAT`` chunk are read and either + processed for metadata or discarded. + + If the optional `lenient` argument evaluates to True, checksum + failures will raise warnings rather than exceptions. + """ + + self.validate_signature() + + while True: + if not self.atchunk: + self.atchunk = self.chunklentype() + if self.atchunk is None: + raise FormatError( + 'This PNG file has no IDAT chunks.') + if self.atchunk[1] == 'IDAT': + return + self.process_chunk(lenient=lenient) + + def chunklentype(self): + """Reads just enough of the input to determine the next + chunk's length and type, returned as a (*length*, *type*) pair + where *type* is a string. If there are no more chunks, ``None`` + is returned. + """ + + x = self.file.read(8) + if not x: + return None + if len(x) != 8: + raise FormatError( + 'End of file whilst reading chunk length and type.') + length,type = struct.unpack('!I4s', x) + type = bytestostr(type) + if length > 2**31-1: + raise FormatError('Chunk %s is too large: %d.' % (type,length)) + return length,type + + def process_chunk(self, lenient=False): + """Process the next chunk and its data. This only processes the + following chunk types, all others are ignored: ``IHDR``, + ``PLTE``, ``bKGD``, ``tRNS``, ``gAMA``, ``sBIT``. + + If the optional `lenient` argument evaluates to True, + checksum failures will raise warnings rather than exceptions. + """ + + type, data = self.chunk(lenient=lenient) + method = '_process_' + type + m = getattr(self, method, None) + if m: + m(data) + + def _process_IHDR(self, data): + # http://www.w3.org/TR/PNG/#11IHDR + if len(data) != 13: + raise FormatError('IHDR chunk has incorrect length.') + (self.width, self.height, self.bitdepth, self.color_type, + self.compression, self.filter, + self.interlace) = struct.unpack("!2I5B", data) + + check_bitdepth_colortype(self.bitdepth, self.color_type) + + if self.compression != 0: + raise Error("unknown compression method %d" % self.compression) + if self.filter != 0: + raise FormatError("Unknown filter method %d," + " see http://www.w3.org/TR/2003/REC-PNG-20031110/#9Filters ." + % self.filter) + if self.interlace not in (0,1): + raise FormatError("Unknown interlace method %d," + " see http://www.w3.org/TR/2003/REC-PNG-20031110/#8InterlaceMethods ." + % self.interlace) + + # Derived values + # http://www.w3.org/TR/PNG/#6Colour-values + colormap = bool(self.color_type & 1) + greyscale = not (self.color_type & 2) + alpha = bool(self.color_type & 4) + color_planes = (3,1)[greyscale or colormap] + planes = color_planes + alpha + + self.colormap = colormap + self.greyscale = greyscale + self.alpha = alpha + self.color_planes = color_planes + self.planes = planes + self.psize = float(self.bitdepth)/float(8) * planes + if int(self.psize) == self.psize: + self.psize = int(self.psize) + self.row_bytes = int(math.ceil(self.width * self.psize)) + # Stores PLTE chunk if present, and is used to check + # chunk ordering constraints. + self.plte = None + # Stores tRNS chunk if present, and is used to check chunk + # ordering constraints. + self.trns = None + # Stores sbit chunk if present. + self.sbit = None + + def _process_PLTE(self, data): + # http://www.w3.org/TR/PNG/#11PLTE + if self.plte: + warnings.warn("Multiple PLTE chunks present.") + self.plte = data + if len(data) % 3 != 0: + raise FormatError( + "PLTE chunk's length should be a multiple of 3.") + if len(data) > (2**self.bitdepth)*3: + raise FormatError("PLTE chunk is too long.") + if len(data) == 0: + raise FormatError("Empty PLTE is not allowed.") + + def _process_bKGD(self, data): + try: + if self.colormap: + if not self.plte: + warnings.warn( + "PLTE chunk is required before bKGD chunk.") + self.background = struct.unpack('B', data) + else: + self.background = struct.unpack("!%dH" % self.color_planes, + data) + except struct.error: + raise FormatError("bKGD chunk has incorrect length.") + + def _process_tRNS(self, data): + # http://www.w3.org/TR/PNG/#11tRNS + self.trns = data + if self.colormap: + if not self.plte: + warnings.warn("PLTE chunk is required before tRNS chunk.") + else: + if len(data) > len(self.plte)/3: + # Was warning, but promoted to Error as it + # would otherwise cause pain later on. + raise FormatError("tRNS chunk is too long.") + else: + if self.alpha: + raise FormatError( + "tRNS chunk is not valid with colour type %d." % + self.color_type) + try: + self.transparent = \ + struct.unpack("!%dH" % self.color_planes, data) + except struct.error: + raise FormatError("tRNS chunk has incorrect length.") + + def _process_gAMA(self, data): + try: + self.gamma = struct.unpack("!L", data)[0] / 100000.0 + except struct.error: + raise FormatError("gAMA chunk has incorrect length.") + + def _process_sBIT(self, data): + self.sbit = data + if (self.colormap and len(data) != 3 or + not self.colormap and len(data) != self.planes): + raise FormatError("sBIT chunk has incorrect length.") + + def read(self, lenient=False): + """ + Read the PNG file and decode it. Returns (`width`, `height`, + `pixels`, `metadata`). + + May use excessive memory. + + `pixels` are returned in boxed row flat pixel format. + + If the optional `lenient` argument evaluates to True, + checksum failures will raise warnings rather than exceptions. + """ + + def iteridat(): + """Iterator that yields all the ``IDAT`` chunks as strings.""" + while True: + try: + type, data = self.chunk(lenient=lenient) + except ValueError as e: + raise ChunkError(e.args[0]) + if type == 'IEND': + # http://www.w3.org/TR/PNG/#11IEND + break + if type != 'IDAT': + continue + # type == 'IDAT' + # http://www.w3.org/TR/PNG/#11IDAT + if self.colormap and not self.plte: + warnings.warn("PLTE chunk is required before IDAT chunk") + yield data + + def iterdecomp(idat): + """Iterator that yields decompressed strings. `idat` should + be an iterator that yields the ``IDAT`` chunk data. + """ + + # Currently, with no max_length paramter to decompress, this + # routine will do one yield per IDAT chunk. So not very + # incremental. + d = zlib.decompressobj() + # Each IDAT chunk is passed to the decompressor, then any + # remaining state is decompressed out. + for data in idat: + # :todo: add a max_length argument here to limit output + # size. + yield array('B', d.decompress(data)) + yield array('B', d.flush()) + + self.preamble(lenient=lenient) + raw = iterdecomp(iteridat()) + + if self.interlace: + raw = array('B', itertools.chain(*raw)) + arraycode = 'BH'[self.bitdepth>8] + # Like :meth:`group` but producing an array.array object for + # each row. + pixels = itertools.imap(lambda *row: array(arraycode, row), + *[iter(self.deinterlace(raw))]*self.width*self.planes) + else: + pixels = self.iterboxed(self.iterstraight(raw)) + meta = dict() + for attr in 'greyscale alpha planes bitdepth interlace'.split(): + meta[attr] = getattr(self, attr) + meta['size'] = (self.width, self.height) + for attr in 'gamma transparent background'.split(): + a = getattr(self, attr, None) + if a is not None: + meta[attr] = a + if self.plte: + meta['palette'] = self.palette() + return self.width, self.height, pixels, meta + + + def read_flat(self): + """ + Read a PNG file and decode it into flat row flat pixel format. + Returns (*width*, *height*, *pixels*, *metadata*). + + May use excessive memory. + + `pixels` are returned in flat row flat pixel format. + + See also the :meth:`read` method which returns pixels in the + more stream-friendly boxed row flat pixel format. + """ + + x, y, pixel, meta = self.read() + arraycode = 'BH'[meta['bitdepth']>8] + pixel = array(arraycode, itertools.chain(*pixel)) + self.file.close() + return x, y, pixel, meta + + def palette(self, alpha='natural'): + """Returns a palette that is a sequence of 3-tuples or 4-tuples, + synthesizing it from the ``PLTE`` and ``tRNS`` chunks. These + chunks should have already been processed (for example, by + calling the :meth:`preamble` method). All the tuples are the + same size: 3-tuples if there is no ``tRNS`` chunk, 4-tuples when + there is a ``tRNS`` chunk. Assumes that the image is colour type + 3 and therefore a ``PLTE`` chunk is required. + + If the `alpha` argument is ``'force'`` then an alpha channel is + always added, forcing the result to be a sequence of 4-tuples. + """ + + if not self.plte: + raise FormatError( + "Required PLTE chunk is missing in colour type 3 image.") + plte = group(array('B', self.plte), 3) + if self.trns or alpha == 'force': + trns = array('B', self.trns or '') + trns.extend([255]*(len(plte)-len(trns))) + plte = map(operator.add, plte, group(trns, 1)) + return plte + + def asDirect(self): + """Returns the image data as a direct representation of an + ``x * y * planes`` array. This method is intended to remove the + need for callers to deal with palettes and transparency + themselves. Images with a palette (colour type 3) + are converted to RGB or RGBA; images with transparency (a + ``tRNS`` chunk) are converted to LA or RGBA as appropriate. + When returned in this format the pixel values represent the + colour value directly without needing to refer to palettes or + transparency information. + + Like the :meth:`read` method this method returns a 4-tuple: + + (*width*, *height*, *pixels*, *meta*) + + This method normally returns pixel values with the bit depth + they have in the source image, but when the source PNG has an + ``sBIT`` chunk it is inspected and can reduce the bit depth of + the result pixels; pixel values will be reduced according to + the bit depth specified in the ``sBIT`` chunk (PNG nerds should + note a single result bit depth is used for all channels; the + maximum of the ones specified in the ``sBIT`` chunk. An RGB565 + image will be rescaled to 6-bit RGB666). + + The *meta* dictionary that is returned reflects the `direct` + format and not the original source image. For example, an RGB + source image with a ``tRNS`` chunk to represent a transparent + colour, will have ``planes=3`` and ``alpha=False`` for the + source image, but the *meta* dictionary returned by this method + will have ``planes=4`` and ``alpha=True`` because an alpha + channel is synthesized and added. + + *pixels* is the pixel data in boxed row flat pixel format (just + like the :meth:`read` method). + + All the other aspects of the image data are not changed. + """ + + self.preamble() + + # Simple case, no conversion necessary. + if not self.colormap and not self.trns and not self.sbit: + return self.read() + + x,y,pixels,meta = self.read() + + if self.colormap: + meta['colormap'] = False + meta['alpha'] = bool(self.trns) + meta['bitdepth'] = 8 + meta['planes'] = 3 + bool(self.trns) + plte = self.palette() + def iterpal(pixels): + for row in pixels: + row = map(plte.__getitem__, row) + yield array('B', itertools.chain(*row)) + pixels = iterpal(pixels) + elif self.trns: + # It would be nice if there was some reasonable way + # of doing this without generating a whole load of + # intermediate tuples. But tuples does seem like the + # easiest way, with no other way clearly much simpler or + # much faster. (Actually, the L to LA conversion could + # perhaps go faster (all those 1-tuples!), but I still + # wonder whether the code proliferation is worth it) + it = self.transparent + maxval = 2**meta['bitdepth']-1 + planes = meta['planes'] + meta['alpha'] = True + meta['planes'] += 1 + typecode = 'BH'[meta['bitdepth']>8] + def itertrns(pixels): + for row in pixels: + # For each row we group it into pixels, then form a + # characterisation vector that says whether each + # pixel is opaque or not. Then we convert + # True/False to 0/maxval (by multiplication), + # and add it as the extra channel. + row = group(row, planes) + opa = map(it.__ne__, row) + opa = map(maxval.__mul__, opa) + opa = zip(opa) # convert to 1-tuples + yield array(typecode, + itertools.chain(*map(operator.add, row, opa))) + pixels = itertrns(pixels) + targetbitdepth = None + if self.sbit: + sbit = struct.unpack('%dB' % len(self.sbit), self.sbit) + targetbitdepth = max(sbit) + if targetbitdepth > meta['bitdepth']: + raise Error('sBIT chunk %r exceeds bitdepth %d' % + (sbit,self.bitdepth)) + if min(sbit) <= 0: + raise Error('sBIT chunk %r has a 0-entry' % sbit) + if targetbitdepth == meta['bitdepth']: + targetbitdepth = None + if targetbitdepth: + shift = meta['bitdepth'] - targetbitdepth + meta['bitdepth'] = targetbitdepth + def itershift(pixels): + for row in pixels: + yield map(shift.__rrshift__, row) + pixels = itershift(pixels) + return x,y,pixels,meta + + def asFloat(self, maxval=1.0): + """Return image pixels as per :meth:`asDirect` method, but scale + all pixel values to be floating point values between 0.0 and + *maxval*. + """ + + x,y,pixels,info = self.asDirect() + sourcemaxval = 2**info['bitdepth']-1 + del info['bitdepth'] + info['maxval'] = float(maxval) + factor = float(maxval)/float(sourcemaxval) + def iterfloat(): + for row in pixels: + yield map(factor.__mul__, row) + return x,y,iterfloat(),info + + def _as_rescale(self, get, targetbitdepth): + """Helper used by :meth:`asRGB8` and :meth:`asRGBA8`.""" + + width,height,pixels,meta = get() + maxval = 2**meta['bitdepth'] - 1 + targetmaxval = 2**targetbitdepth - 1 + factor = float(targetmaxval) / float(maxval) + meta['bitdepth'] = targetbitdepth + def iterscale(): + for row in pixels: + yield map(lambda x: int(round(x*factor)), row) + if maxval == targetmaxval: + return width, height, pixels, meta + else: + return width, height, iterscale(), meta + + def asRGB8(self): + """Return the image data as an RGB pixels with 8-bits per + sample. This is like the :meth:`asRGB` method except that + this method additionally rescales the values so that they + are all between 0 and 255 (8-bit). In the case where the + source image has a bit depth < 8 the transformation preserves + all the information; where the source image has bit depth + > 8, then rescaling to 8-bit values loses precision. No + dithering is performed. Like :meth:`asRGB`, an alpha channel + in the source image will raise an exception. + + This function returns a 4-tuple: + (*width*, *height*, *pixels*, *metadata*). + *width*, *height*, *metadata* are as per the + :meth:`read` method. + + *pixels* is the pixel data in boxed row flat pixel format. + """ + + return self._as_rescale(self.asRGB, 8) + + def asRGBA8(self): + """Return the image data as RGBA pixels with 8-bits per + sample. This method is similar to :meth:`asRGB8` and + :meth:`asRGBA`: The result pixels have an alpha channel, *and* + values are rescaled to the range 0 to 255. The alpha channel is + synthesized if necessary (with a small speed penalty). + """ + + return self._as_rescale(self.asRGBA, 8) + + def asRGB(self): + """Return image as RGB pixels. RGB colour images are passed + through unchanged; greyscales are expanded into RGB + triplets (there is a small speed overhead for doing this). + + An alpha channel in the source image will raise an + exception. + + The return values are as for the :meth:`read` method + except that the *metadata* reflect the returned pixels, not the + source image. In particular, for this method + ``metadata['greyscale']`` will be ``False``. + """ + + width,height,pixels,meta = self.asDirect() + if meta['alpha']: + raise Error("will not convert image with alpha channel to RGB") + if not meta['greyscale']: + return width,height,pixels,meta + meta['greyscale'] = False + typecode = 'BH'[meta['bitdepth'] > 8] + def iterrgb(): + for row in pixels: + a = array(typecode, [0]) * 3 * width + for i in range(3): + a[i::3] = row + yield a + return width,height,iterrgb(),meta + + def asRGBA(self): + """Return image as RGBA pixels. Greyscales are expanded into + RGB triplets; an alpha channel is synthesized if necessary. + The return values are as for the :meth:`read` method + except that the *metadata* reflect the returned pixels, not the + source image. In particular, for this method + ``metadata['greyscale']`` will be ``False``, and + ``metadata['alpha']`` will be ``True``. + """ + + width,height,pixels,meta = self.asDirect() + if meta['alpha'] and not meta['greyscale']: + return width,height,pixels,meta + typecode = 'BH'[meta['bitdepth'] > 8] + maxval = 2**meta['bitdepth'] - 1 + maxbuffer = struct.pack('=' + typecode, maxval) * 4 * width + def newarray(): + return array(typecode, maxbuffer) + + if meta['alpha'] and meta['greyscale']: + # LA to RGBA + def convert(): + for row in pixels: + # Create a fresh target row, then copy L channel + # into first three target channels, and A channel + # into fourth channel. + a = newarray() + pngfilters.convert_la_to_rgba(row, a) + yield a + elif meta['greyscale']: + # L to RGBA + def convert(): + for row in pixels: + a = newarray() + pngfilters.convert_l_to_rgba(row, a) + yield a + else: + assert not meta['alpha'] and not meta['greyscale'] + # RGB to RGBA + def convert(): + for row in pixels: + a = newarray() + pngfilters.convert_rgb_to_rgba(row, a) + yield a + meta['alpha'] = True + meta['greyscale'] = False + return width,height,convert(),meta + +def check_bitdepth_colortype(bitdepth, colortype): + """Check that `bitdepth` and `colortype` are both valid, + and specified in a valid combination. Returns if valid, + raise an Exception if not valid. + """ + + if bitdepth not in (1,2,4,8,16): + raise FormatError("invalid bit depth %d" % bitdepth) + if colortype not in (0,2,3,4,6): + raise FormatError("invalid colour type %d" % colortype) + # Check indexed (palettized) images have 8 or fewer bits + # per pixel; check only indexed or greyscale images have + # fewer than 8 bits per pixel. + if colortype & 1 and bitdepth > 8: + raise FormatError( + "Indexed images (colour type %d) cannot" + " have bitdepth > 8 (bit depth %d)." + " See http://www.w3.org/TR/2003/REC-PNG-20031110/#table111 ." + % (bitdepth, colortype)) + if bitdepth < 8 and colortype not in (0,3): + raise FormatError("Illegal combination of bit depth (%d)" + " and colour type (%d)." + " See http://www.w3.org/TR/2003/REC-PNG-20031110/#table111 ." + % (bitdepth, colortype)) + +def isinteger(x): + try: + return int(x) == x + except (TypeError, ValueError): + return False + + +# === Legacy Version Support === + +# :pyver:old: PyPNG works on Python versions 2.3 and 2.2, but not +# without some awkward problems. Really PyPNG works on Python 2.4 (and +# above); it works on Pythons 2.3 and 2.2 by virtue of fixing up +# problems here. It's a bit ugly (which is why it's hidden down here). +# +# Generally the strategy is one of pretending that we're running on +# Python 2.4 (or above), and patching up the library support on earlier +# versions so that it looks enough like Python 2.4. When it comes to +# Python 2.2 there is one thing we cannot patch: extended slices +# http://www.python.org/doc/2.3/whatsnew/section-slices.html. +# Instead we simply declare that features that are implemented using +# extended slices will not work on Python 2.2. +# +# In order to work on Python 2.3 we fix up a recurring annoyance involving +# the array type. In Python 2.3 an array cannot be initialised with an +# array, and it cannot be extended with a list (or other sequence). +# Both of those are repeated issues in the code. Whilst I would not +# normally tolerate this sort of behaviour, here we "shim" a replacement +# for array into place (and hope no-one notices). You never read this. +# +# In an amusing case of warty hacks on top of warty hacks... the array +# shimming we try and do only works on Python 2.3 and above (you can't +# subclass array.array in Python 2.2). So to get it working on Python +# 2.2 we go for something much simpler and (probably) way slower. +try: + array('B').extend([]) + array('B', array('B')) +# :todo:(drj) Check that TypeError is correct for Python 2.3 +except TypeError: + # Expect to get here on Python 2.3 + try: + class _array_shim(array): + true_array = array + def __new__(cls, typecode, init=None): + super_new = super(_array_shim, cls).__new__ + it = super_new(cls, typecode) + if init is None: + return it + it.extend(init) + return it + def extend(self, extension): + super_extend = super(_array_shim, self).extend + if isinstance(extension, self.true_array): + return super_extend(extension) + if not isinstance(extension, (list, str)): + # Convert to list. Allows iterators to work. + extension = list(extension) + return super_extend(self.true_array(self.typecode, extension)) + array = _array_shim + except TypeError: + # Expect to get here on Python 2.2 + def array(typecode, init=()): + if type(init) == str: + return map(ord, init) + return list(init) + +# Further hacks to get it limping along on Python 2.2 +try: + enumerate +except NameError: + def enumerate(seq): + i=0 + for x in seq: + yield i,x + i += 1 + +try: + reversed +except NameError: + def reversed(l): + l = list(l) + l.reverse() + for x in l: + yield x + +try: + itertools +except NameError: + class _dummy_itertools: + pass + itertools = _dummy_itertools() + def _itertools_imap(f, seq): + for x in seq: + yield f(x) + itertools.imap = _itertools_imap + def _itertools_chain(*iterables): + for it in iterables: + for element in it: + yield element + itertools.chain = _itertools_chain + + +# === Support for users without Cython === + +try: + pngfilters +except NameError: + class pngfilters(object): + def undo_filter_sub(filter_unit, scanline, previous, result): + """Undo sub filter.""" + + ai = 0 + # Loops starts at index fu. Observe that the initial part + # of the result is already filled in correctly with + # scanline. + for i in range(filter_unit, len(result)): + x = scanline[i] + a = result[ai] + result[i] = (x + a) & 0xff + ai += 1 + undo_filter_sub = staticmethod(undo_filter_sub) + + def undo_filter_up(filter_unit, scanline, previous, result): + """Undo up filter.""" + + for i in range(len(result)): + x = scanline[i] + b = previous[i] + result[i] = (x + b) & 0xff + undo_filter_up = staticmethod(undo_filter_up) + + def undo_filter_average(filter_unit, scanline, previous, result): + """Undo up filter.""" + + ai = -filter_unit + for i in range(len(result)): + x = scanline[i] + if ai < 0: + a = 0 + else: + a = result[ai] + b = previous[i] + result[i] = (x + ((a + b) >> 1)) & 0xff + ai += 1 + undo_filter_average = staticmethod(undo_filter_average) + + def undo_filter_paeth(filter_unit, scanline, previous, result): + """Undo Paeth filter.""" + + # Also used for ci. + ai = -filter_unit + for i in range(len(result)): + x = scanline[i] + if ai < 0: + a = c = 0 + else: + a = result[ai] + c = previous[ai] + b = previous[i] + p = a + b - c + pa = abs(p - a) + pb = abs(p - b) + pc = abs(p - c) + if pa <= pb and pa <= pc: + pr = a + elif pb <= pc: + pr = b + else: + pr = c + result[i] = (x + pr) & 0xff + ai += 1 + undo_filter_paeth = staticmethod(undo_filter_paeth) + + def convert_la_to_rgba(row, result): + for i in range(3): + result[i::4] = row[0::2] + result[3::4] = row[1::2] + convert_la_to_rgba = staticmethod(convert_la_to_rgba) + + def convert_l_to_rgba(row, result): + """Convert a grayscale image to RGBA. This method assumes + the alpha channel in result is already correctly + initialized. + """ + for i in range(3): + result[i::4] = row + convert_l_to_rgba = staticmethod(convert_l_to_rgba) + + def convert_rgb_to_rgba(row, result): + """Convert an RGB image to RGBA. This method assumes the + alpha channel in result is already correctly initialized. + """ + for i in range(3): + result[i::4] = row[i::3] + convert_rgb_to_rgba = staticmethod(convert_rgb_to_rgba) + + +# === Command Line Support === + +def read_pam_header(infile): + """ + Read (the rest of a) PAM header. `infile` should be positioned + immediately after the initial 'P7' line (at the beginning of the + second line). Returns are as for `read_pnm_header`. + """ + + # Unlike PBM, PGM, and PPM, we can read the header a line at a time. + header = dict() + while True: + l = infile.readline().strip() + if l == strtobytes('ENDHDR'): + break + if not l: + raise EOFError('PAM ended prematurely') + if l[0] == strtobytes('#'): + continue + l = l.split(None, 1) + if l[0] not in header: + header[l[0]] = l[1] + else: + header[l[0]] += strtobytes(' ') + l[1] + + required = ['WIDTH', 'HEIGHT', 'DEPTH', 'MAXVAL'] + required = [strtobytes(x) for x in required] + WIDTH,HEIGHT,DEPTH,MAXVAL = required + present = [x for x in required if x in header] + if len(present) != len(required): + raise Error('PAM file must specify WIDTH, HEIGHT, DEPTH, and MAXVAL') + width = int(header[WIDTH]) + height = int(header[HEIGHT]) + depth = int(header[DEPTH]) + maxval = int(header[MAXVAL]) + if (width <= 0 or + height <= 0 or + depth <= 0 or + maxval <= 0): + raise Error( + 'WIDTH, HEIGHT, DEPTH, MAXVAL must all be positive integers') + return 'P7', width, height, depth, maxval + +def read_pnm_header(infile, supported=('P5','P6')): + """ + Read a PNM header, returning (format,width,height,depth,maxval). + `width` and `height` are in pixels. `depth` is the number of + channels in the image; for PBM and PGM it is synthesized as 1, for + PPM as 3; for PAM images it is read from the header. `maxval` is + synthesized (as 1) for PBM images. + """ + + # Generally, see http://netpbm.sourceforge.net/doc/ppm.html + # and http://netpbm.sourceforge.net/doc/pam.html + + supported = [strtobytes(x) for x in supported] + + # Technically 'P7' must be followed by a newline, so by using + # rstrip() we are being liberal in what we accept. I think this + # is acceptable. + type = infile.read(3).rstrip() + if type not in supported: + raise NotImplementedError('file format %s not supported' % type) + if type == strtobytes('P7'): + # PAM header parsing is completely different. + return read_pam_header(infile) + # Expected number of tokens in header (3 for P4, 4 for P6) + expected = 4 + pbm = ('P1', 'P4') + if type in pbm: + expected = 3 + header = [type] + + # We have to read the rest of the header byte by byte because the + # final whitespace character (immediately following the MAXVAL in + # the case of P6) may not be a newline. Of course all PNM files in + # the wild use a newline at this point, so it's tempting to use + # readline; but it would be wrong. + def getc(): + c = infile.read(1) + if not c: + raise Error('premature EOF reading PNM header') + return c + + c = getc() + while True: + # Skip whitespace that precedes a token. + while c.isspace(): + c = getc() + # Skip comments. + while c == '#': + while c not in '\n\r': + c = getc() + if not c.isdigit(): + raise Error('unexpected character %s found in header' % c) + # According to the specification it is legal to have comments + # that appear in the middle of a token. + # This is bonkers; I've never seen it; and it's a bit awkward to + # code good lexers in Python (no goto). So we break on such + # cases. + token = strtobytes('') + while c.isdigit(): + token += c + c = getc() + # Slight hack. All "tokens" are decimal integers, so convert + # them here. + header.append(int(token)) + if len(header) == expected: + break + # Skip comments (again) + while c == '#': + while c not in '\n\r': + c = getc() + if not c.isspace(): + raise Error('expected header to end with whitespace, not %s' % c) + + if type in pbm: + # synthesize a MAXVAL + header.append(1) + depth = (1,3)[type == strtobytes('P6')] + return header[0], header[1], header[2], depth, header[3] + +def write_pnm(file, width, height, pixels, meta): + """Write a Netpbm PNM/PAM file. + """ + + bitdepth = meta['bitdepth'] + maxval = 2**bitdepth - 1 + # Rudely, the number of image planes can be used to determine + # whether we are L (PGM), LA (PAM), RGB (PPM), or RGBA (PAM). + planes = meta['planes'] + # Can be an assert as long as we assume that pixels and meta came + # from a PNG file. + assert planes in (1,2,3,4) + if planes in (1,3): + if 1 == planes: + # PGM + # Could generate PBM if maxval is 1, but we don't (for one + # thing, we'd have to convert the data, not just blat it + # out). + fmt = 'P5' + else: + # PPM + fmt = 'P6' + file.write('%s %d %d %d\n' % (fmt, width, height, maxval)) + if planes in (2,4): + # PAM + # See http://netpbm.sourceforge.net/doc/pam.html + if 2 == planes: + tupltype = 'GRAYSCALE_ALPHA' + else: + tupltype = 'RGB_ALPHA' + file.write('P7\nWIDTH %d\nHEIGHT %d\nDEPTH %d\nMAXVAL %d\n' + 'TUPLTYPE %s\nENDHDR\n' % + (width, height, planes, maxval, tupltype)) + # Values per row + vpr = planes * width + # struct format + fmt = '>%d' % vpr + if maxval > 0xff: + fmt = fmt + 'H' + else: + fmt = fmt + 'B' + for row in pixels: + file.write(struct.pack(fmt, *row)) + file.flush() + +def color_triple(color): + """ + Convert a command line colour value to a RGB triple of integers. + FIXME: Somewhere we need support for greyscale backgrounds etc. + """ + if color.startswith('#') and len(color) == 4: + return (int(color[1], 16), + int(color[2], 16), + int(color[3], 16)) + if color.startswith('#') and len(color) == 7: + return (int(color[1:3], 16), + int(color[3:5], 16), + int(color[5:7], 16)) + elif color.startswith('#') and len(color) == 13: + return (int(color[1:5], 16), + int(color[5:9], 16), + int(color[9:13], 16)) + +def _add_common_options(parser): + """Call *parser.add_option* for each of the options that are + common between this PNG--PNM conversion tool and the gen + tool. + """ + parser.add_option("-i", "--interlace", + default=False, action="store_true", + help="create an interlaced PNG file (Adam7)") + parser.add_option("-t", "--transparent", + action="store", type="string", metavar="#RRGGBB", + help="mark the specified colour as transparent") + parser.add_option("-b", "--background", + action="store", type="string", metavar="#RRGGBB", + help="save the specified background colour") + parser.add_option("-g", "--gamma", + action="store", type="float", metavar="value", + help="save the specified gamma value") + parser.add_option("-c", "--compression", + action="store", type="int", metavar="level", + help="zlib compression level (0-9)") + return parser + +def _main(argv): + """ + Run the PNG encoder with options from the command line. + """ + + # Parse command line arguments + from optparse import OptionParser + import re + version = '%prog ' + __version__ + parser = OptionParser(version=version) + parser.set_usage("%prog [options] [imagefile]") + parser.add_option('-r', '--read-png', default=False, + action='store_true', + help='Read PNG, write PNM') + parser.add_option("-a", "--alpha", + action="store", type="string", metavar="pgmfile", + help="alpha channel transparency (RGBA)") + _add_common_options(parser) + + (options, args) = parser.parse_args(args=argv[1:]) + + # Convert options + if options.transparent is not None: + options.transparent = color_triple(options.transparent) + if options.background is not None: + options.background = color_triple(options.background) + + # Prepare input and output files + if len(args) == 0: + infilename = '-' + infile = sys.stdin + elif len(args) == 1: + infilename = args[0] + infile = open(infilename, 'rb') + else: + parser.error("more than one input file") + outfile = sys.stdout + if sys.platform == "win32": + import msvcrt, os + msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY) + + if options.read_png: + # Encode PNG to PPM + png = Reader(file=infile) + width,height,pixels,meta = png.asDirect() + write_pnm(outfile, width, height, pixels, meta) + else: + # Encode PNM to PNG + format, width, height, depth, maxval = \ + read_pnm_header(infile, ('P5','P6','P7')) + # When it comes to the variety of input formats, we do something + # rather rude. Observe that L, LA, RGB, RGBA are the 4 colour + # types supported by PNG and that they correspond to 1, 2, 3, 4 + # channels respectively. So we use the number of channels in + # the source image to determine which one we have. We do not + # care about TUPLTYPE. + greyscale = depth <= 2 + pamalpha = depth in (2,4) + supported = map(lambda x: 2**x-1, range(1,17)) + try: + mi = supported.index(maxval) + except ValueError: + raise NotImplementedError( + 'your maxval (%s) not in supported list %s' % + (maxval, str(supported))) + bitdepth = mi+1 + writer = Writer(width, height, + greyscale=greyscale, + bitdepth=bitdepth, + interlace=options.interlace, + transparent=options.transparent, + background=options.background, + alpha=bool(pamalpha or options.alpha), + gamma=options.gamma, + compression=options.compression) + if options.alpha: + pgmfile = open(options.alpha, 'rb') + format, awidth, aheight, adepth, amaxval = \ + read_pnm_header(pgmfile, 'P5') + if amaxval != '255': + raise NotImplementedError( + 'maxval %s not supported for alpha channel' % amaxval) + if (awidth, aheight) != (width, height): + raise ValueError("alpha channel image size mismatch" + " (%s has %sx%s but %s has %sx%s)" + % (infilename, width, height, + options.alpha, awidth, aheight)) + writer.convert_ppm_and_pgm(infile, pgmfile, outfile) + else: + writer.convert_pnm(infile, outfile) + + +if __name__ == '__main__': + try: + _main(sys.argv) + except Error as e: + print(sys.stderr, e) \ No newline at end of file diff --git a/extensions/fablabchemnitz/living_hinge/living_hinge.inx b/extensions/fablabchemnitz/living_hinge/living_hinge.inx new file mode 100644 index 00000000..25ab649b --- /dev/null +++ b/extensions/fablabchemnitz/living_hinge/living_hinge.inx @@ -0,0 +1,37 @@ + + + Living Hinge + fablabchemnitz.de.living_hinge + + + + + + + + + + + 19.0 + 3.0 + 1.5 + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/living_hinge/living_hinge.py b/extensions/fablabchemnitz/living_hinge/living_hinge.py new file mode 100644 index 00000000..8d7f7544 --- /dev/null +++ b/extensions/fablabchemnitz/living_hinge/living_hinge.py @@ -0,0 +1,262 @@ +#!/usr/bin/env python3 +""" +hinge_cuts.py +A module for creating lines to laser cut living hinges + +Copyright (C) 2013 Mark Endicott; drphonon@gmail.com + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +For a copy of the GNU General Public License +write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +""" + +""" +Change in version 0.2. +Changed self.unittouu to self.svg.unittouu +and self.uutounit to self.uutounit +to make it work with Inkscape 0.91 +Thanks to Pete Prodoehl for pointing this out. +""" + +""" +Change in version 0.3 +Add a direction option so the cuts can be done in the X or Y direction. +Modification by Sylvain GARNAVAULT; garnav@wanadoo.fr +""" + +""" +Change in version 0.4. +Python3 / inkscape 1.0 migration +""" +__version__ = "0.4" + +import inkex +import gettext +_ = gettext.gettext + +from lxml import etree + +class LivingHinge(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument('--direction',default='y',help='cuts direction') + pars.add_argument('--unit',default='mm',help='units of measurement') + pars.add_argument('--cut_length',type=float, default=0,help='length of the cuts for the hinge.') + pars.add_argument('--gap_length',type=float, default=0,help='separation distance between successive hinge cuts.') + pars.add_argument('--sep_distance',type=float, default=0,help='distance between successive lines of hinge cuts.') + + def effect(self): + + unit=self.options.unit + # which direction are we cutting + dir = self.options.direction + # starting cut length. Will be adjusted for get an integer number of cuts in the y-direction. + l = self.svg.unittouu(str(self.options.cut_length) + unit) + # cut separation in the y-direction + d = self.svg.unittouu(str(self.options.gap_length) + unit) + # starting separation between lines of cuts in the x-direction. Will be adjusted to get an integer + # number of cut lines in the x-direction. + dd = self.svg.unittouu(str(self.options.sep_distance) + unit) + + # get selected nodes + if self.svg.selected: + # put lines on the current layer + parent = self.svg.get_current_layer() + for id, node in self.svg.selected.items(): + # inkex.utils.debug("id:" + id) + # for key in node.attrib.keys(): + # inkex.utils.debug(key + ": " + node.get(key)) + bbox = node.bounding_box() + + # calculate the cut lines for the hinge + if (dir=="y"): + lines, l_actual, d_actual, dd_actual = self.calcYCutLines(bbox.left, bbox.top, bbox.width, bbox.height, l, d, dd) + else: + lines, l_actual, d_actual, dd_actual = self.calcXCutLines(bbox.left, bbox.top, bbox.width, bbox.height, l, d, dd) + + s = '' + for line in lines: + s = s + "M %s, %s L %s, %s " % (line['x1'], line['y1'], line['x2'], line['y2']) + style = { 'stroke': '#000000', 'fill': 'none', 'stroke-width': self.svg.unittouu("0.1 mm")} + drw = {'style':str(inkex.Style(style)), 'd': s} + hinge = etree.SubElement(parent, inkex.addNS('path', 'svg'), drw) + desc = etree.SubElement(hinge, inkex.addNS('desc', 'svg')) + desc.text = "Hinge cut parameters: actual(requested)\n" \ + "cut length: %.2f %s (%.2f %s)\n" \ + "gap length: %.2f %s (%.2f %s)\n" \ + "separation distance: %.2f %s (%.2f %s)" % (self.svg.uutounit(l_actual, unit), unit, self.svg.uutounit(l, unit), unit, + self.svg.uutounit(d_actual, unit), unit, self.svg.uutounit(d, unit), unit, + self.svg.uutounit(dd_actual, unit), unit, self.svg.uutounit(dd, unit), unit) + else: + inkex.utils.debug("No rectangle(s) have been selected.") + + def calcYCutLines(self, x, y, dx, dy, l, d, dd): + """ + Return a list of cut lines as dicts. Each dict contains the end points for one cut line. + [{x1, y1, x2, y2}, ... ] + + Parameters + x, y: the coordinates of the lower left corner of the bounding rect + dx, dy: width and height of the bounding rect + l: the nominal length of a cut line + d: the separation between cut lines in the y-direction + dd: the nominal separation between cut lines in the x-direction + + l will be adjusted so that there is an integral number of cuts in the y-direction. + dd will be adjusted so that there is an integral number of cuts in the x-direction. + """ + ret = [] + + # use l as a starting guess. Adjust it so that we get an integer number of cuts in the y-direction + # First compute the number of cuts in the y-direction using l. This will not in general be an integer. + p = (dy-d)/(d+l) + #round p to the nearest integer + p = round(p) + #compute the new l that will result in p cuts in the y-direction. + l = (dy-d)/p - d + + # use dd as a starting guess. Adjust it so that we get an even integer number of cut lines in the x-direction. + p = dx/dd + p = round(p) + if p % 2 == 1: + p = p + 1 + dd = dx/p + + # + # Column A cuts + # + currx = 0 + donex = False + while not donex: + doney = False + starty = 0 + endy = (l + d)/2.0 + while not doney: + if endy >= dy: + endy = dy + # Add the end points of the line + ret.append({'x1' : x + currx, 'y1' : y + starty, 'x2': x + currx, 'y2': y + endy}) + starty = endy + d + endy = starty + l + if starty >= dy: + doney = True + currx = currx + dd * 2.0 + if currx - dx > dd: + donex = True +# inkex.utils.debug("lastx: " + str(lastx) + "; currx: " + str(currx)) + # + #Column B cuts + # + currx = dd + donex = False + while not donex: + doney = False + starty = d + endy = starty + l + while not doney: + if endy >= dy: + endy = dy + # create a line + ret.append({'x1' : x + currx, 'y1' : y + starty, 'x2': x + currx, 'y2': y + endy}) + starty = endy + d + endy = starty + l + if starty >= dy: + doney = True + currx = currx + dd*2.0 + if currx > dx: + donex = True + + return (ret, l, d, dd) + + + def calcXCutLines(self, x, y, dx, dy, l, d, dd): + """ + Return a list of cut lines as dicts. Each dict contains the end points for one cut line. + [{x1, y1, x2, y2}, ... ] + + Parameters + x, y: the coordinates of the lower left corner of the bounding rect + dx, dy: width and height of the bounding rect + l: the nominal length of a cut line + d: the separation between cut lines in the x-direction + dd: the nominal separation between cut lines in the y-direction + + l will be adjusted so that there is an integral number of cuts in the x-direction. + dd will be adjusted so that there is an integral number of cuts in the y-direction. + """ + ret = [] + + + # use l as a starting guess. Adjust it so that we get an integer number of cuts in the y-direction + # First compute the number of cuts in the x-direction using l. This will not in general be an integer. + p = (dx-d)/(d+l) + #round p to the nearest integer + p = round(p) + #compute the new l that will result in p cuts in the x-direction. + l = (dx-d)/p - d + + # use dd as a starting guess. Adjust it so that we get an even integer number of cut lines in the y-direction. + p = dy/dd + p = round(p) + if p % 2 == 1: + p = p + 1 + dd = dy/p + + # + # Rows A cuts + # + curry = 0 + doney = False + while not doney: + donex = False + startx = 0 + endx = (l + d)/2.0 + while not donex: + if endx >= dx: + endx = dx + # Add the end points of the line + ret.append({'x1' : x + startx, 'y1' : y + curry, 'x2': x + endx, 'y2': y + curry}) + startx = endx + d + endx = startx + l + if startx >= dx: + donex = True + curry = curry + dd * 2.0 + if curry - dy > dd: + doney = True + + # + # Rows B cuts + # + curry = dd + doney = False + while not doney: + donex = False + startx = d + endx = startx + l + while not donex: + if endx >= dx: + endx = dx + # create a line + ret.append({'x1' : x + startx, 'y1' : y + curry, 'x2': x + endx, 'y2': y + curry}) + startx = endx + d + endx = startx + l + if startx >= dx: + donex = True + curry = curry + dd*2.0 + if curry > dy: + doney = True + + return (ret, l, d, dd) + +if __name__ == '__main__': + LivingHinge().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/living_hinge_size_input/living_hinge_size_input.inx b/extensions/fablabchemnitz/living_hinge_size_input/living_hinge_size_input.inx new file mode 100644 index 00000000..d17ce4b0 --- /dev/null +++ b/extensions/fablabchemnitz/living_hinge_size_input/living_hinge_size_input.inx @@ -0,0 +1,23 @@ + + + Living Hinge (Size Input) + fablabchemnitz.de.living_hinge_size_input + 10 + 100 + 1.0 + 3.0 + 30 + false + false + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/living_hinge_size_input/living_hinge_size_input.py b/extensions/fablabchemnitz/living_hinge_size_input/living_hinge_size_input.py new file mode 100644 index 00000000..3aff5529 --- /dev/null +++ b/extensions/fablabchemnitz/living_hinge_size_input/living_hinge_size_input.py @@ -0,0 +1,81 @@ +#!/usr/bin/env python3 + +""" +A Inkscape extension to generate a pattern that allows to bend wood or MDF one it is laser cut. +""" + +import inkex +import math +from lxml import etree + +class LivingHingeSizeInput(inkex.EffectExtension): + height = -1.0 + + def add_arguments(self, pars): + pars.add_argument('--width', type=float, default=10, help='Width (mm)') + pars.add_argument('--height', type=float, default=100, help='Height (mm)') + pars.add_argument('--horizontalLineSeparation', type=float, default=1, help='Horizontal Line Separation (mm)') + pars.add_argument('--verticalLineSeparation', type=float, default=3, help='Vertical Line Separation (mm)') + pars.add_argument('--maxLineLength', type=float, default=30, help='Max Line Length (mm)') + pars.add_argument('--addInitMarks', default="false", help='Add Init Marks') + pars.add_argument('--groupLines', default="false", help='Group Lines') + +#draw an SVG line segment between the given (raw) points + def draw_SVG_line(self, x1, y1, x2, y2, parent): + + if self.height < 0: + svg = self.document.getroot() + self.height = self.svg.unittouu(svg.attrib['height']) + + line_style = { 'stroke-width':self.svg.unittouu(str(0.1)+"mm"), 'stroke':'#000000'} + + line_attribs = {'style' : str(inkex.Style(line_style)), + 'd' : 'M '+str(x1)+','+str(self.height - y1)+' L '+str(x2)+','+str(self.height - y2)} + + line = etree.SubElement(parent, inkex.addNS('path','svg'), line_attribs ) + + def effect(self): + width = self.options.width + height = self.options.height + horizontalLineSeparation = self.options.horizontalLineSeparation + verticalLineSeparation = self.options.verticalLineSeparation + maxLineLength = self.options.maxLineLength + marks = self.options.addInitMarks == "true" + group = self.options.groupLines == "true" + + parent = self.svg.get_current_layer() + + if group: + parent = etree.SubElement(parent, 'g') + + xLines = int(width / horizontalLineSeparation) + maxLineLength = self.options.maxLineLength + + linesPerColumn = int(math.ceil(height / maxLineLength)) + ll = height / linesPerColumn + + for x in range(0, xLines): + if marks: + self.draw_SVG_line(x * horizontalLineSeparation, -3, x * horizontalLineSeparation, -2, parent) + + if x % 2 == 0: + for y in range(0, linesPerColumn): + self.draw_SVG_line(x * horizontalLineSeparation, y * ll + verticalLineSeparation / 2, x * horizontalLineSeparation, (y + 1) * ll - verticalLineSeparation / 2, parent) + + else: + for y in range(-1, linesPerColumn): + incy = ll / 2 + + y0 = y * ll + verticalLineSeparation / 2 + incy + if y0 < 0: + y0 = -1 + + y1 = (y + 1) * ll - verticalLineSeparation / 2 + incy + + if y1 > height: + y1 = height + 1 + + self.draw_SVG_line(x * horizontalLineSeparation, y0, x * horizontalLineSeparation, y1, parent) + +if __name__ == '__main__': + LivingHingeSizeInput().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/longest_continuous_path/longest_continuous_path.inx b/extensions/fablabchemnitz/longest_continuous_path/longest_continuous_path.inx new file mode 100644 index 00000000..a427e7c9 --- /dev/null +++ b/extensions/fablabchemnitz/longest_continuous_path/longest_continuous_path.inx @@ -0,0 +1,24 @@ + + + Longest Continuous Path + fablabchemnitz.de.optimize_path + 0.10 + + + + + + false + false + + path + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/longest_continuous_path/longest_continuous_path.py b/extensions/fablabchemnitz/longest_continuous_path/longest_continuous_path.py new file mode 100644 index 00000000..4bad4b1f --- /dev/null +++ b/extensions/fablabchemnitz/longest_continuous_path/longest_continuous_path.py @@ -0,0 +1,624 @@ +#!/usr/bin/env python3 +''' +Copyright (C) 2017 Romain Testuz + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin St Fifth Floor, Boston, MA 02139 +''' +import inkex +import sys +import math +import random +import colorsys +import os +import numpy +import timeit + +import networkx as nx + +MAX_CONSECUTIVE_OVERWRITE_EDGE = 3 +STOP_SHORTEST_PATH_IF_SMALLER_OR_EQUAL_TO = 1 +OVERWRITE_ALLOW = 0 +OVERWRITE_ALLOW_SOME = 1 +OVERWRITE_ALLOW_NONE = 2 + +""" +class Graph: + def __init__(self): + self.__adj = {} + self.__data = {} + + def __str__(self): + return str(self.__adj) + + def nodes(self): + nodes = [] + for n in self.__adj: + nodes.append(n) + return nodes + + def edges(self): + edges = [] + for n1 in self.__adj: + for n2 in self.neighbours(n1): + if((n2, n1) not in edges): + edges.append((n1, n2)) + return edges + + def node(self, n): + if n in self.__adj: + return self.__data[n] + else: + raise ValueError('Inexistant node') + + def neighbours(self, n): + if n in self.__adj: + return self.__adj[n] + else: + raise ValueError('Inexistant node') + + def outEdges(self, n): + edges = [] + for n2 in self.neighbours(n): + edges.append((n, n2)) + return edges + + def degree(self, n): + if n in self.__adj: + return len(self.__adj[n]) + else: + raise ValueError('Inexistant node') + + def addNode(self, n, data): + if n not in self.__adj: + self.__adj[n] = [] + self.__data[n] = data + else: + raise ValueError('Node already exists') + + def removeNode(self, n): + if n in self.__adj: + #Remove all edges pointing to node + for n2 in self.__adj: + neighbours = self.__adj[n2] + if n in neighbours: + neighbours.remove(n) + del self.__adj[n] + del self.__data[n] + else: + raise ValueError('Removing inexistant node') + + def addEdge(self, n1, n2): + if(n1 in self.__adj and n2 in self.__adj): + self.__adj[n1].append(n2) + self.__adj[n2].append(n1) + else: + raise ValueError('Adding edge to inexistant node') + + def removeEdge(self, n1, n2): + if(n1 in self.__adj and n2 in self.__adj and + n2 in self.__adj[n1] and n1 in self.__adj[n2]): + self.__adj[n1].remove(n2) + self.__adj[n2].remove(n1) + else: + raise ValueError('Removing inexistant edge') + + def __sortedEdgesByAngle(self, previousEdge, edges): + previousEdgeVectNormalized = numpy.array(self.node(previousEdge[1])) - numpy.array(self.node(previousEdge[0])) + previousEdgeVectNormalized = previousEdgeVectNormalized/numpy.linalg.norm(previousEdgeVectNormalized) + #previousEdgeVectNormalized = numpy.array((0,1)) + def angleKey(outEdge): + edgeVectNormalized = numpy.array(self.node(outEdge[1])) - numpy.array(self.node(outEdge[0])) + edgeVectNormalized = edgeVectNormalized/numpy.linalg.norm(edgeVectNormalized) + return -numpy.dot(previousEdgeVectNormalized, edgeVectNormalized) + + return sorted(edges, key=angleKey) + + def dfsEdges(self): + nodes = self.nodes() + visitedEdges = set() + visitedNodes = set() + edges = {} + dfsEdges = [] + + for startNode in nodes: + #if self.degree(startNode) != 1: + #continue#Makes sure we don't start in the middle of a path + stack = [startNode] + prevEdge = None + while stack: + currentNode = stack[-1] + if currentNode not in visitedNodes: + edges[currentNode] = self.outEdges(currentNode) + visitedNodes.add(currentNode) + + if edges[currentNode]: + if(prevEdge): + edges[currentNode] = self.__sortedEdgesByAngle(prevEdge, edges[currentNode]) + edge = edges[currentNode][0] + if edge not in visitedEdges and (edge[1], edge[0]) not in visitedEdges: + visitedEdges.add(edge) + # Mark the traversed "to" node as to-be-explored. + stack.append(edge[1]) + dfsEdges.append(edge) + prevEdge = edge + edges[currentNode].pop(0) + else: + # No more edges from the current node. + stack.pop() + prevEdge = None + + return dfsEdges +""" + +class LongestContinuousPath(inkex.GenerateExtension): + + def add_arguments(self, pars): + pars.add_argument("-t", "--tolerance", type=float, default=0.1, help="the distance below which 2 nodes will be merged") + pars.add_argument("-l", "--enableLog", type=inkex.Boolean, default=False, help="Enable logging") + pars.add_argument("-o", "--overwriteRule", type=int, default=1, help="Options to control edge overwrite rules") + pars.add_argument("-k", "--keepSelected", type=inkex.Boolean, default=False, help="Keep selected elements") + + def parseSVG(self): + vertices = [] + edges = [] + + objects = self.svg.selection.filter(inkex.PathElement).values() + + for node in objects: + if node.tag == inkex.addNS('path', 'svg'): + node.apply_transform() + superpath = node.path.to_absolute().to_superpath() + for subpath in superpath: + subpathList = list(subpath) + + # We only work with lines, not curves, so we ignore the a and c in [a, b, c] + newVertices = list(map(lambda x: x[1], subpathList)) + # self.log(newVertices) + + newEdges = range(len(vertices), len(vertices) + len(newVertices) - 1) + newEdges = list(map(lambda x: (x, x + 1), newEdges)) + # self.log(newEdges) + + edges.extend(newEdges) + vertices.extend(newVertices) + else: + self.log("This extension only works with paths and currently doesn't support groups") + + if self.options.keepSelected is False: + for object in objects: + if object.getparent() is not None: + #inkex.utils.debug(object.get('id')) + object.getparent().remove(object) + + return (vertices, edges) + + # Also computes edge weight + def buildGraph(self, vertices, edges): + G = nx.Graph() + for i, v in enumerate(vertices): + G.add_node(i, x=v[0], y=v[1]) + # self.log("N "+ str(i) + " (" + str(v[0]) + "," + str(v[1]) + ")") + for e in edges: + dist = self.dist(G.nodes[e[0]], G.nodes[e[1]]) + G.add_edge(e[0], e[1], weight=dist) + # self.log("E "+str(e[0]) + " " + str(e[1])) + return G + + @staticmethod + def dist(a, b): + return math.sqrt((a['x'] - b['x']) ** 2 + (a['y'] - b['y']) ** 2) + + def log(self, message): + if self.options.enableLog: + inkex.utils.debug(message) + + def mergeWithTolerance(self, G, tolerance): + mergeTo = {} + for ni in G.nodes(): + for nj in G.nodes(): + if nj <= ni: + continue + # self.log("Test " + str(ni) + " with " + str(nj)) + dist_ij = self.dist(G.nodes[ni], G.nodes[nj]) + if (dist_ij < tolerance) and (nj not in mergeTo) and (ni not in mergeTo): + # self.log("Merge " + str(nj) + " with " + str(ni) + " (dist=" + str(dist_ij) + ")") + mergeTo[nj] = ni + + for n in mergeTo: + newEdges = [] + for neigh_n in G[n]: + newEdge = None + if neigh_n in mergeTo: + newEdge = (mergeTo[n], mergeTo[neigh_n]) + else: + newEdge = (mergeTo[n], neigh_n) + + if newEdge[0] != newEdge[1]: # Don't add self-loops + newEdges.append(newEdge) + + for e in newEdges: + G.add_edge(*e) + # self.log("Added edge: "+str(e[0]) + " " + str(e[1])) + G.remove_node(n) + # self.log("Removed node: " + str(n)) + + @staticmethod + def rgbToHex(rgb): + return '#%02x%02x%02x' % rgb + + # Color should be in hex format ("#RRGGBB"), if not specified a random color will be generated + def addPathToInkscape(self, path, parent, color): + elem = parent.add(inkex.PathElement()) + elem.style = {'stroke': color, 'stroke-width': 2, 'fill': 'none'} + elem.path = inkex.Path(path) + + def removeSomeEdges(self, G, edges): + visitedEdges = set() + + # Contains a list of [start, end] where start is the start index of a duplicate path + # and end is the end index of the duplicate path + edgeRangeToRemove = [] + isPrevEdgeDuplicate = False + duplicatePathStartIndex = -1 + for i, e in enumerate(edges): + isEdgeDuplicate = e in visitedEdges or (e[1], e[0]) in visitedEdges + + if isEdgeDuplicate: + if duplicatePathStartIndex == -1: + duplicatePathStartIndex = i + else: + if duplicatePathStartIndex >= 0: + edgeRangeToRemove.append((duplicatePathStartIndex, i - 1)) + duplicatePathStartIndex = -1 + + visitedEdges.add(e) + + if isEdgeDuplicate and i == len(edges) - 1: + edgeRangeToRemove.append((duplicatePathStartIndex, i)) + + if self.options.overwriteRule == OVERWRITE_ALLOW: + # The last duplicate path can always be removed + edgeRangeToRemove = [edgeRangeToRemove[-1]] if edgeRangeToRemove else [] + elif self.options.overwriteRule == OVERWRITE_ALLOW_SOME: # Allow overwrite except for long paths + edgeRangeToRemove = [x for x in edgeRangeToRemove if x[1] - x[0] > MAX_CONSECUTIVE_OVERWRITE_EDGE] + + indicesToRemove = set() + for start, end in edgeRangeToRemove: + indicesToRemove.update(range(start, end + 1)) + + cleanedEdges = [e for i, e in enumerate(edges) if i not in indicesToRemove] + + return cleanedEdges + + # Find the first break and rotate the edges to align to this break + # this allows to avoid an extra path + # Return the rotated edges + def shiftEdgesToBreak(self, edges): + if not edges: + return edges + # Only useful if the last edge connects to the first + if edges[0][0] != edges[-1][1]: + return edges + + for i, e in enumerate(edges): + if i == 0: + continue + if edges[i - 1][1] != e[0]: + return edges[i:] + edges[:i] + + return edges + + def edgesToPaths(self, edges): + paths = [] + path = [] + + for i, e in enumerate(edges): + if e[0] == -1: # Start with extra node, ignore it + assert not path + elif e[1] == -1: # End with extra node, ignore it + if path: + paths.append(path) + path = [] + + else: + # Path ends either at the last edge or when the next edge starts somewhere else + endPath = (i == len(edges) - 1 or e[1] != edges[i + 1][0]) + + if not path: + path.append(e[0]) + path.append(e[1]) + else: + path.append(e[1]) + + if endPath: + paths.append(path) + path = [] + + if self.options.overwriteRule == OVERWRITE_ALLOW: + assert len(paths) == 1 + + # paths.sort(key=len, reverse=True) + return paths + + def pathsToSVG(self, G, paths): + svgPaths = [] + for path in paths: + svgPath = [] + for nodeIndex, n in enumerate(path): + command = None + if nodeIndex == 0: + command = 'M' + else: + command = 'L' + svgPath.append([command, (G.nodes[n]['x'], G.nodes[n]['y'])]) + svgPaths.append(svgPath) + + # Create a group + group = inkex.Group.new("OptimizedPaths") + + for pathIndex, svgPath in enumerate(svgPaths): + # Generate a different color for every path + color = colorsys.hsv_to_rgb(pathIndex / float(len(svgPaths)), 1.0, 1.0) + color = tuple(int(x * 255) for x in color) + color = self.rgbToHex(color) + self.addPathToInkscape(svgPath, group, color) + return group + + # Computes the physical path length (it ignores the edge weight) + def pathLength(self, G, path): + length = 0.0 + for i, n in enumerate(path): + if i > 0: + length += self.dist(G.nodes[path[i - 1]], G.nodes[path[i]]) + return length + + # Eulerization algorithm: + # 1. Find all vertices with odd valence. + # 2. Pair them up with their nearest neighbor. + # 3. Find the shortest path between each pair. + # 4. Duplicate these edges. + # Doesn't modify input graph + def makeEulerianGraph(self, G): + oddNodes = [] + for n in G.nodes: + if G.degree(n) % 2 != 0: + oddNodes.append(n) + # self.log("Number of nodes with odd degree: " + str(len(oddNodes))) + + if len(oddNodes) == 0: + return G + + # self.computeEdgeWeights(G) + + pathsToDuplicate = [] + + while (oddNodes): + n1 = oddNodes[0] + + shortestPaths = [] + # For every other node, find the shortest path to the closest node + for n2 in oddNodes: + if n2 != n1: + # self.log(str(n1) + " " + str(n2)) + shortestPath = nx.astar_path(G, n1, n2, + lambda n1, n2: self.dist(G.nodes[n1], G.nodes[n2]), 'weight') + # self.log(str(len(shortestPath))) + shortestPaths.append(shortestPath) + if len(shortestPath) <= STOP_SHORTEST_PATH_IF_SMALLER_OR_EQUAL_TO: + # If we find a path of length <= STOP_SHORTEST_PATH_IF_SMALLER_OR_EQUAL_TO, + # we assume it's good enough (to speed up calculation) + break + # For all the shortest paths from n1, we take the shortest one and therefore get the closest odd node + shortestShortestPath = min(shortestPaths, key=lambda x: self.pathLength(G, x)) + closestNode = shortestShortestPath[-1] + pathsToDuplicate.append(shortestShortestPath) + oddNodes.pop(0) + oddNodes.remove(closestNode) + + numberOfDuplicatedEdges = 0 + lenghtOfDuplicatedEdges = 0.0 + + for path in pathsToDuplicate: + numberOfDuplicatedEdges += len(path) - 1 + pathLength = self.pathLength(G, path) + # self.log("Path length: " + str(pathLength)) + lenghtOfDuplicatedEdges += pathLength + # self.log("Number of duplicated edges: " + str(numberOfDuplicatedEdges)) + # self.log("Length of duplicated edges: " + str(lenghtOfDuplicatedEdges)) + + # Convert the graph to a MultiGraph to allow parallel edges + G2 = nx.MultiGraph(G) + for path in pathsToDuplicate: + nx.add_path(G2, path) + + return G2 + + # Doesn't modify input graph + # faster than makeEulerianGraph but creates an extra node + def makeEulerianGraphExtraNode(self, G): + oddNodes = [] + for n in G.nodes: + if G.degree(n) % 2 != 0: + oddNodes.append(n) + if len(oddNodes) == 0: + return G + + G2 = nx.Graph(G) + G2.add_node(-1, x=0, y=0) + for n in oddNodes: + G2.add_edge(n, -1) + + return G2 + + """def computeEdgeWeights(self, G): + for n1, n2 in G.edges(): + dist = self.dist(G.nodes[n1], G.nodes[n2]) + G.add_edge(n1, n2, weight=dist)""" + + def _getNodePosition(self, G, n): + return (G.nodes[n]['x'], G.nodes[n]['y']) + + def _getBestEdge(self, G, previousEdge, edges): + previousEdgeVectNormalized = numpy.array(self._getNodePosition(G, previousEdge[1])) - numpy.array( + self._getNodePosition(G, previousEdge[0])) + # self.log(str(numpy.linalg.norm(previousEdgeVectNormalized)) + " " + str(previousEdge[1]) + " " + str(previousEdge[0])) + previousEdgeVectNormalized = previousEdgeVectNormalized / numpy.linalg.norm(previousEdgeVectNormalized) + + # previousEdgeVectNormalized = numpy.array((0,1)) + def angleKey(outEdge): + edgeVectNormalized = numpy.array(self._getNodePosition(G, outEdge[1])) - numpy.array( + self._getNodePosition(G, outEdge[0])) + edgeVectNormalized = edgeVectNormalized / numpy.linalg.norm(edgeVectNormalized) + return numpy.dot(previousEdgeVectNormalized, edgeVectNormalized) + + return max(edges, key=angleKey) + + """def eulerian_circuit(self, G): + g = G.__class__(G)#G.copy() + v = next(g.nodes()) + + degree = g.degree + edges = g.edges + + circuit = [] + vertex_stack = [v] + last_vertex = None + while vertex_stack: + current_vertex = vertex_stack[-1] + if degree(current_vertex) == 0: + if last_vertex is not None: + circuit.append((last_vertex, current_vertex)) + self.log(str(last_vertex) + " " + str(current_vertex)) + last_vertex = current_vertex + vertex_stack.pop() + else: + if circuit: + arbitrary_edge = self._getBestEdge(g, circuit[-1], edges(current_vertex)) + else:#For the first iteration we arbitrarily take the first edge + arbitrary_edge = next(edges(current_vertex)) + #self.log(str(arbitrary_edge) + "::" + str(edges[current_vertex])) + + #self.log(str(edges[current_vertex])) + #self.log(" ") + + vertex_stack.append(arbitrary_edge[1]) + g.remove_edge(*arbitrary_edge) + + return circuit""" + + # Walk as straight as possible from node until stuck + def walk(self, node, G): + n = node + e = None + path = [n] + + while G.degree[n]: # Continue until there no unvisited edges from n + if e: + e = self._getBestEdge(G, e, G.edges(n)) + else: # For the first iteration we arbitrarily take the first edge + e = (n, next(iter(G[n]))) + n = e[1] + G.remove_edge(*e) + path.append(n) + + return path + + def eulerian_circuit_hierholzer(self, G): + g = G.copy() + v = next(iter(g.nodes)) # First vertex, arbitrary + + cycle = self.walk(v, g) + assert cycle[0] == cycle[-1] + notvisited = set(cycle) + + while len(notvisited) != 0: + v = notvisited.pop() + if g.degree(v) != 0: + i = cycle.index(v) + sub = self.walk(v, g) + assert sub[0] == sub[-1] + cycle = cycle[:i] + sub[:-1] + cycle[i:] + notvisited.update(sub) + + cycleEdges = [] + prevNode = None + for n in cycle: + if prevNode != None: + cycleEdges.append((prevNode, n)) + prevNode = n + return cycleEdges + + def generate(self): + self.log("NetworkX version: " + nx.__version__) + if int(nx.__version__[0]) < 2: + inkex.utils.debug("NetworkX version is: {} but should be >= 2.0.".format(nx.__version__)) + return + self.log("Python version: " + sys.version) + + totalTimerStart = timeit.default_timer() + (vertices, edges) = self.parseSVG() + G = self.buildGraph(vertices, edges) + + timerStart = timeit.default_timer() + self.mergeWithTolerance(G, self.options.tolerance) + timerStop = timeit.default_timer() + mergeDuration = timerStop - timerStart + initialEdgeCount = nx.number_of_edges(G) + finalEdgeCount = 0 + + """for e in G.edges(): + self.log("E "+str(e[0]) + " " + str(e[1])) + for n in G.nodes(): + self.log("Degree of "+str(n) + ": " + str(G.degree(n)))""" + # Split disjoint graphs + connectedGraphs = [G.subgraph(c).copy() for c in nx.connected_components(G)] + self.log("Number of disconnected graphs: " + str(len(connectedGraphs))) + + paths = [] + makeEulerianDuration = 0 + for connectedGraph in connectedGraphs: + timerStart = timeit.default_timer() + if self.options.overwriteRule == OVERWRITE_ALLOW_NONE: + connectedGraph = self.makeEulerianGraphExtraNode(connectedGraph) + #connectedGraph = nx.eulerize(connectedGraph) + else: + connectedGraph = self.makeEulerianGraph(connectedGraph) + #connectedGraph = nx.eulerize(connectedGraph) + timerStop = timeit.default_timer() + makeEulerianDuration += timerStop - timerStart + # connectedGraph is now likely a multigraph + + finalEdgeCount = finalEdgeCount + nx.number_of_edges(connectedGraph) + #pathEdges = list(nx.eulerian_path(connectedGraph)) + pathEdges = self.eulerian_circuit_hierholzer(connectedGraph) + pathEdges = self.removeSomeEdges(connectedGraph, pathEdges) + pathEdges = self.shiftEdgesToBreak(pathEdges) + + paths.extend(self.edgesToPaths(pathEdges)) + + self.log("Path number: " + str(len(paths))) + self.log("Total path length: {:.2f}".format(sum(self.pathLength(G, x) for x in paths))) + self.log("Number of duplicated edges: {:d}".format(finalEdgeCount-initialEdgeCount)) + + group = self.pathsToSVG(G, paths) + totalTimerStop = timeit.default_timer() + totalDuration = totalTimerStop - totalTimerStart + self.log("Merge duration: {:.0f} sec ({:.1f} min)".format(mergeDuration, mergeDuration / 60)) + self.log("Make Eulerian duration: {:.0f} sec ({:.1f} min)".format(makeEulerianDuration, makeEulerianDuration / 60)) + self.log("Total duration: {:.0f} sec ({:.1f} min)".format(totalDuration, totalDuration / 60)) + return group + +if __name__ == '__main__': + LongestContinuousPath().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/low_poly_2/low_poly_2.inx b/extensions/fablabchemnitz/low_poly_2/low_poly_2.inx new file mode 100644 index 00000000..570f6440 --- /dev/null +++ b/extensions/fablabchemnitz/low_poly_2/low_poly_2.inx @@ -0,0 +1,16 @@ + + + Low Poly 2 + fablabchemnitz.de.low_poly_2 + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/low_poly_2/low_poly_2.py b/extensions/fablabchemnitz/low_poly_2/low_poly_2.py new file mode 100644 index 00000000..f61d7c23 --- /dev/null +++ b/extensions/fablabchemnitz/low_poly_2/low_poly_2.py @@ -0,0 +1,301 @@ +#!/usr/bin/env python3 + +import os +import inkex +import voronoi +from inkex.transforms import Transform +from inkex.paths import CubicSuperPath, Path +from PIL import Image +from lxml import etree +import base64 +from io import BytesIO +import urllib.request as urllib + +# A tool for making polygonal art. Can be created with one click with a pass. + +class Point: + def __init__(self, x, y): + self.x = x + self.y = y + def __lt__(self,other): + return (self.x*self.yother.x*other.y) + + def __ge__(self,other): + return (self.x*self.y>=other.x*other.y) + + def __eq__(self,other): + return (self.x==other.x) and (self.y==other.y) + + def __ne__(self,other): + return (self.x!=other.x) or (self.y!=other.y) + + def __str__(self): + return "("+str(self.x)+","+str(self.y)+")" + + +class LowPoly2(inkex.Effect): + def __init__(self): + inkex.Effect.__init__(self) + + # Clipping a line by a bounding box + def dot(self, x, y): + return x[0] * y[0] + x[1] * y[1] + + def intersectLineSegment(self, line, v1, v2): + s1 = self.dot(line, v1) - line[2] + s2 = self.dot(line, v2) - line[2] + if s1 * s2 > 0: + return (0, 0, False) + else: + tmp = self.dot(line, v1) - self.dot(line, v2) + if tmp == 0: + return (0, 0, False) + u = (line[2] - self.dot(line, v2)) / tmp + v = 1 - u + return (u * v1[0] + v * v2[0], u * v1[1] + v * v2[1], True) + + def clipEdge(self, vertices, lines, edge, bbox): + # bounding box corners + bbc = [] + bbc.append((bbox[0], bbox[2])) + bbc.append((bbox[1], bbox[2])) + bbc.append((bbox[1], bbox[3])) + bbc.append((bbox[0], bbox[3])) + + # record intersections of the line with bounding box edges + line = (lines[edge[0]]) + interpoints = [] + for i in range(4): + p = self.intersectLineSegment(line, bbc[i], bbc[(i + 1) % 4]) + if (p[2]): + interpoints.append(p) + + # if the edge has no intersection, return empty intersection + if (len(interpoints) < 2): + return [] + + if (len(interpoints) > 2): #h appens when the edge crosses the corner of the box + interpoints = list(set(interpoints)) # remove doubles + + # points of the edge + v1 = vertices[edge[1]] + interpoints.append((v1[0], v1[1], False)) + v2 = vertices[edge[2]] + interpoints.append((v2[0], v2[1], False)) + + # sorting the points in the widest range to get them in order on the line + minx = interpoints[0][0] + maxx = interpoints[0][0] + miny = interpoints[0][1] + maxy = interpoints[0][1] + for point in interpoints: + minx = min(point[0], minx) + maxx = max(point[0], maxx) + miny = min(point[1], miny) + maxy = max(point[1], maxy) + + if (maxx - minx) > (maxy - miny): + interpoints.sort() + else: + interpoints.sort(key=lambda pt: pt[1]) + + start = [] + inside = False #true when the part of the line studied is in the clip box + startWrite = False #true when the part of the line is in the edge segment + for point in interpoints: + if point[2]: #The point is a bounding box intersection + if inside: + if startWrite: + return [[start[0], start[1]], [point[0], point[1]]] + else: + return [] + else: + if startWrite: + start = point + inside = not inside + else: # The point is a segment endpoint + if startWrite: + if inside: + # a vertex ends the line inside the bounding box + return [[start[0], start[1]], [point[0], point[1]]] + else: + return [] + else: + if inside: + start = point + startWrite = not startWrite + + # Transformation helpers + def invertTransform(self, mat): + det = mat[0][0] * mat[1][1] - mat[0][1] * mat[1][0] + if det != 0: #det is 0 only in case of 0 scaling + # invert the rotation/scaling part + a11 = mat[1][1] / det + a12 = -mat[0][1] / det + a21 = -mat[1][0] / det + a22 = mat[0][0] / det + + # invert the translational part + a13 = -(a11 * mat[0][2] + a12 * mat[1][2]) + a23 = -(a21 * mat[0][2] + a22 * mat[1][2]) + + return [[a11, a12, a13], [a21, a22, a23]] + else: + return [[0, 0, -mat[0][2]], [0, 0, -mat[1][2]]] + + def getGlobalTransform(self, node): + parent = node.getparent() + myTrans = Transform(node.get('transform')).matrix + if myTrans: + if parent is not None: + parentTrans = self.getGlobalTransform(parent) + if parentTrans: + return Transform(parentTrans) * Transform(myTrans) + else: + return myTrans + else: + if parent is not None: + return self.getGlobalTransform(parent) + else: + return None + + def checkImagePath(self, node): + """Embed the data of the selected Image Tag element""" + xlink = node.get('xlink:href') + if xlink and xlink[:5] == 'data:': + # No need, data alread embedded + return + + url = urllib.urlparse(xlink) + href = urllib.url2pathname(url.path) + + # Primary location always the filename itself. + path = self.absolute_href(href or '') + + # Backup directory where we can find the image + if not os.path.isfile(path): + path = node.get('sodipodi:absref', path) + + if not os.path.isfile(path): + inkex.errormsg('File not found "{}". Unable to embed image.').format(path) + return + + if (os.path.isfile(path)): + return path + + def effect(self): + # Check that elements have been selected + if len(self.options.ids) == 0: + inkex.errormsg("Please select objects!") + return + + # Drawing styles + linestyle = { + 'stroke': '#000000', + 'stroke-width': str(self.svg.unittouu('1px')), + 'fill': 'none' + } + + facestyle = { + 'stroke': '#000000', + 'stroke-width':'0px',# str(self.svg.unittouu('1px')), + 'fill': 'none' + } + + # Handle the transformation of the current group + parentGroup = (self.svg.selected[self.options.ids[0]]).getparent() + + svg = self.document.getroot() + image_element = svg.find('.//{http://www.w3.org/2000/svg}image') + if image_element is None: + inkex.utils.debug("No image found") + exit(1) + self.path = self.checkImagePath(image_element) # This also ensures the file exists + if self.path is None: # check if image is embedded or linked + image_string = image_element.get('{http://www.w3.org/1999/xlink}href') + # find comma position + i = 0 + while i < 40: + if image_string[i] == ',': + break + i = i + 1 + img = Image.open(BytesIO(base64.b64decode(image_string[i + 1:len(image_string)]))) + else: + img = Image.open(self.path) + + extrinsic_image_width=float(image_element.get('width')) + extrinsic_image_height=float(image_element.get('height')) + (width, height) = img.size + trans = self.getGlobalTransform(parentGroup) + invtrans = None + if trans: + invtrans = self.invertTransform(trans) + + # Recovery of the selected objects + pts = [] + nodes = [] + seeds = [] + + for id in self.options.ids: + node = self.svg.selected[id] + nodes.append(node) + if(node.tag=="{http://www.w3.org/2000/svg}path"):#If it is path + # Get vertex coordinates of path + points = CubicSuperPath(node.get('d')) + for p in points[0]: + pt=[p[1][0],p[1][1]] + if trans: + Transform(trans).apply_to_point(pt) + pts.append(Point(pt[0], pt[1])) + seeds.append(Point(p[1][0], p[1][1])) + else: # For other shapes + bbox = node.bounding_box() + if bbox: + cx = 0.5 * (bbox.left + bbox.top) + cy = 0.5 * (bbox.top + bbox.bottom) + pt = [cx, cy] + if trans: + Transform(trans).apply_to_point(pt) + pts.append(Point(pt[0], pt[1])) + seeds.append(Point(cx, cy)) + pts.sort() + seeds.sort() + + # In Creation of groups to store the result + # Delaunay + groupDelaunay = etree.SubElement(parentGroup, inkex.addNS('g', 'svg')) + groupDelaunay.set(inkex.addNS('label', 'inkscape'), 'Delaunay') + + scale_x=float(extrinsic_image_width)/float(width) + scale_y=float(extrinsic_image_height)/float(height) + # Voronoi diagram generation + + triangles = voronoi.computeDelaunayTriangulation(seeds) + for triangle in triangles: + p1 = seeds[triangle[0]] + p2 = seeds[triangle[1]] + p3 = seeds[triangle[2]] + cmds = [['M', [p1.x, p1.y]], + ['L', [p2.x, p2.y]], + ['L', [p3.x, p3.y]], + ['Z', []]] + path = etree.Element(inkex.addNS('path', 'svg')) + path.set('d', str(Path(cmds))) + middleX=(p1.x+p2.x+p3.x)/3.0 + middleY=(p1.y+p2.y+p3.y)/3.0 + if width>middleX and height>middleY and middleX>=0 and middleY>=0: + pixelColor = img.getpixel((middleX,middleY)) + facestyle["fill"]=str(inkex.Color((pixelColor[0], pixelColor[1], pixelColor[2]))) + else: + facestyle["fill"]="black" + path.set('style', str(inkex.Style(facestyle))) + groupDelaunay.append(path) + +if __name__ == '__main__': + LowPoly2().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/lyz_export/lyz_bezmisc.py b/extensions/fablabchemnitz/lyz_export/lyz_bezmisc.py new file mode 100644 index 00000000..b062bc34 --- /dev/null +++ b/extensions/fablabchemnitz/lyz_export/lyz_bezmisc.py @@ -0,0 +1,286 @@ +#!/usr/bin/env python3 +''' +Copyright (C) 2010 Nick Drobchenko, nick@cnc-club.ru +Copyright (C) 2005 Aaron Spike, aaron@ekips.org + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +''' + +import math +import cmath + +def rootWrapper(a,b,c,d): + if a: + # Monics formula see http://en.wikipedia.org/wiki/Cubic_function#Monic_formula_of_roots + a,b,c = (b/a, c/a, d/a) + m = 2.0*a**3 - 9.0*a*b + 27.0*c + k = a**2 - 3.0*b + n = m**2 - 4.0*k**3 + w1 = -.5 + .5*cmath.sqrt(-3.0) + w2 = -.5 - .5*cmath.sqrt(-3.0) + if n < 0: + m1 = pow(complex((m+cmath.sqrt(n))/2),1./3) + n1 = pow(complex((m-cmath.sqrt(n))/2),1./3) + else: + if m+math.sqrt(n) < 0: + m1 = -pow(-(m+math.sqrt(n))/2,1./3) + else: + m1 = pow((m+math.sqrt(n))/2,1./3) + if m-math.sqrt(n) < 0: + n1 = -pow(-(m-math.sqrt(n))/2,1./3) + else: + n1 = pow((m-math.sqrt(n))/2,1./3) + x1 = -1./3 * (a + m1 + n1) + x2 = -1./3 * (a + w1*m1 + w2*n1) + x3 = -1./3 * (a + w2*m1 + w1*n1) + return (x1,x2,x3) + elif b: + det=c**2.0-4.0*b*d + if det: + return (-c+cmath.sqrt(det))/(2.0*b),(-c-cmath.sqrt(det))/(2.0*b) + else: + return -c/(2.0*b), + elif c: + return 1.0*(-d/c), + return () + +def bezierparameterize(xxx_todo_changeme): + #parametric bezier + ((bx0,by0),(bx1,by1),(bx2,by2),(bx3,by3)) = xxx_todo_changeme + x0=bx0 + y0=by0 + cx=3*(bx1-x0) + bx=3*(bx2-bx1)-cx + ax=bx3-x0-cx-bx + cy=3*(by1-y0) + by=3*(by2-by1)-cy + ay=by3-y0-cy-by + + return ax,ay,bx,by,cx,cy,x0,y0 + #ax,ay,bx,by,cx,cy,x0,y0=bezierparameterize(((bx0,by0),(bx1,by1),(bx2,by2),(bx3,by3))) + +def linebezierintersect(xxx_todo_changeme1, xxx_todo_changeme2): + #parametric line + ((lx1,ly1),(lx2,ly2)) = xxx_todo_changeme1 + ((bx0,by0),(bx1,by1),(bx2,by2),(bx3,by3)) = xxx_todo_changeme2 + dd=lx1 + cc=lx2-lx1 + bb=ly1 + aa=ly2-ly1 + + if aa: + coef1=cc/aa + coef2=1 + else: + coef1=1 + coef2=aa/cc + + ax,ay,bx,by,cx,cy,x0,y0=bezierparameterize(((bx0,by0),(bx1,by1),(bx2,by2),(bx3,by3))) + #cubic intersection coefficients + a=coef1*ay-coef2*ax + b=coef1*by-coef2*bx + c=coef1*cy-coef2*cx + d=coef1*(y0-bb)-coef2*(x0-dd) + + roots = rootWrapper(a,b,c,d) + retval = [] + for i in roots: + if type(i) is complex and i.imag==0: + i = i.real + if type(i) is not complex and 0<=i<=1: + retval.append(bezierpointatt(((bx0,by0),(bx1,by1),(bx2,by2),(bx3,by3)),i)) + return retval + +def bezierpointatt(xxx_todo_changeme3,t): + ((bx0,by0),(bx1,by1),(bx2,by2),(bx3,by3)) = xxx_todo_changeme3 + ax,ay,bx,by,cx,cy,x0,y0=bezierparameterize(((bx0,by0),(bx1,by1),(bx2,by2),(bx3,by3))) + x=ax*(t**3)+bx*(t**2)+cx*t+x0 + y=ay*(t**3)+by*(t**2)+cy*t+y0 + return x,y + +def bezierslopeatt(xxx_todo_changeme4,t): + ((bx0,by0),(bx1,by1),(bx2,by2),(bx3,by3)) = xxx_todo_changeme4 + ax,ay,bx,by,cx,cy,x0,y0=bezierparameterize(((bx0,by0),(bx1,by1),(bx2,by2),(bx3,by3))) + dx=3*ax*(t**2)+2*bx*t+cx + dy=3*ay*(t**2)+2*by*t+cy + return dx,dy + +def beziertatslope(xxx_todo_changeme5, xxx_todo_changeme6): + ((bx0,by0),(bx1,by1),(bx2,by2),(bx3,by3)) = xxx_todo_changeme5 + (dy,dx) = xxx_todo_changeme6 + ax,ay,bx,by,cx,cy,x0,y0=bezierparameterize(((bx0,by0),(bx1,by1),(bx2,by2),(bx3,by3))) + #quadratic coefficents of slope formula + if dx: + slope = 1.0*(dy/dx) + a=3*ay-3*ax*slope + b=2*by-2*bx*slope + c=cy-cx*slope + elif dy: + slope = 1.0*(dx/dy) + a=3*ax-3*ay*slope + b=2*bx-2*by*slope + c=cx-cy*slope + else: + return [] + + roots = rootWrapper(0,a,b,c) + retval = [] + for i in roots: + if type(i) is complex and i.imag==0: + i = i.real + if type(i) is not complex and 0<=i<=1: + retval.append(i) + return retval + +def tpoint(xxx_todo_changeme7, xxx_todo_changeme8,t): + (x1,y1) = xxx_todo_changeme7 + (x2,y2) = xxx_todo_changeme8 + return x1+t*(x2-x1),y1+t*(y2-y1) +def beziersplitatt(xxx_todo_changeme9,t): + ((bx0,by0),(bx1,by1),(bx2,by2),(bx3,by3)) = xxx_todo_changeme9 + m1=tpoint((bx0,by0),(bx1,by1),t) + m2=tpoint((bx1,by1),(bx2,by2),t) + m3=tpoint((bx2,by2),(bx3,by3),t) + m4=tpoint(m1,m2,t) + m5=tpoint(m2,m3,t) + m=tpoint(m4,m5,t) + + return ((bx0,by0),m1,m4,m),(m,m5,m3,(bx3,by3)) + +''' +Approximating the arc length of a bezier curve +according to + +if: + L1 = |P0 P1| +|P1 P2| +|P2 P3| + L0 = |P0 P3| +then: + L = 1/2*L0 + 1/2*L1 + ERR = L1-L0 +ERR approaches 0 as the number of subdivisions (m) increases + 2^-4m + +Reference: +Jens Gravesen +"Adaptive subdivision and the length of Bezier curves" +mat-report no. 1992-10, Mathematical Institute, The Technical +University of Denmark. +''' +def pointdistance(xxx_todo_changeme10, xxx_todo_changeme11): + (x1,y1) = xxx_todo_changeme10 + (x2,y2) = xxx_todo_changeme11 + return math.sqrt(((x2 - x1) ** 2) + ((y2 - y1) ** 2)) +def Gravesen_addifclose(b, len, error = 0.001): + box = 0 + for i in range(1,4): + box += pointdistance(b[i-1], b[i]) + chord = pointdistance(b[0], b[3]) + if (box - chord) > error: + first, second = beziersplitatt(b, 0.5) + Gravesen_addifclose(first, len, error) + Gravesen_addifclose(second, len, error) + else: + len[0] += (box / 2.0) + (chord / 2.0) +def bezierlengthGravesen(b, error = 0.001): + len = [0] + Gravesen_addifclose(b, len, error) + return len[0] + +# balf = Bezier Arc Length Function +balfax,balfbx,balfcx,balfay,balfby,balfcy = 0,0,0,0,0,0 +def balf(t): + retval = (balfax*(t**2) + balfbx*t + balfcx)**2 + (balfay*(t**2) + balfby*t + balfcy)**2 + return math.sqrt(retval) + +def Simpson(f, a, b, n_limit, tolerance): + n = 2 + multiplier = (b - a)/6.0 + endsum = f(a) + f(b) + interval = (b - a)/2.0 + asum = 0.0 + bsum = f(a + interval) + est1 = multiplier * (endsum + (2.0 * asum) + (4.0 * bsum)) + est0 = 2.0 * est1 + #print multiplier, endsum, interval, asum, bsum, est1, est0 + while n < n_limit and abs(est1 - est0) > tolerance: + n *= 2 + multiplier /= 2.0 + interval /= 2.0 + asum += bsum + bsum = 0.0 + est0 = est1 + for i in range(1, n, 2): + bsum += f(a + (i * interval)) + est1 = multiplier * (endsum + (2.0 * asum) + (4.0 * bsum)) + #print multiplier, endsum, interval, asum, bsum, est1, est0 + return est1 + +def bezierlengthSimpson(xxx_todo_changeme12, tolerance = 0.001): + ((bx0,by0),(bx1,by1),(bx2,by2),(bx3,by3)) = xxx_todo_changeme12 + global balfax,balfbx,balfcx,balfay,balfby,balfcy + ax,ay,bx,by,cx,cy,x0,y0=bezierparameterize(((bx0,by0),(bx1,by1),(bx2,by2),(bx3,by3))) + balfax,balfbx,balfcx,balfay,balfby,balfcy = 3*ax,2*bx,cx,3*ay,2*by,cy + return Simpson(balf, 0.0, 1.0, 4096, tolerance) + +def beziertatlength(xxx_todo_changeme13, l = 0.5, tolerance = 0.001): + ((bx0,by0),(bx1,by1),(bx2,by2),(bx3,by3)) = xxx_todo_changeme13 + global balfax,balfbx,balfcx,balfay,balfby,balfcy + ax,ay,bx,by,cx,cy,x0,y0=bezierparameterize(((bx0,by0),(bx1,by1),(bx2,by2),(bx3,by3))) + balfax,balfbx,balfcx,balfay,balfby,balfcy = 3*ax,2*bx,cx,3*ay,2*by,cy + t = 1.0 + tdiv = t + curlen = Simpson(balf, 0.0, t, 4096, tolerance) + targetlen = l * curlen + diff = curlen - targetlen + while abs(diff) > tolerance: + tdiv /= 2.0 + if diff < 0: + t += tdiv + else: + t -= tdiv + curlen = Simpson(balf, 0.0, t, 4096, tolerance) + diff = curlen - targetlen + return t + +#default bezier length method +bezierlength = bezierlengthSimpson + +if __name__ == '__main__': + import timing + #print linebezierintersect(((,),(,)),((,),(,),(,),(,))) + #print linebezierintersect(((0,1),(0,-1)),((-1,0),(-.5,0),(.5,0),(1,0))) + tol = 0.00000001 + curves = [((0,0),(1,5),(4,5),(5,5)), + ((0,0),(0,0),(5,0),(10,0)), + ((0,0),(0,0),(5,1),(10,0)), + ((-10,0),(0,0),(10,0),(10,10)), + ((15,10),(0,0),(10,0),(-5,10))] + ''' + for curve in curves: + timing.start() + g = bezierlengthGravesen(curve,tol) + timing.finish() + gt = timing.micro() + + timing.start() + s = bezierlengthSimpson(curve,tol) + timing.finish() + st = timing.micro() + + print g, gt + print s, st + ''' + for curve in curves: + print(beziertatlength(curve,0.5)) \ No newline at end of file diff --git a/extensions/fablabchemnitz/lyz_export/lyz_cspsubdiv.py b/extensions/fablabchemnitz/lyz_export/lyz_cspsubdiv.py new file mode 100644 index 00000000..dc857ab0 --- /dev/null +++ b/extensions/fablabchemnitz/lyz_export/lyz_cspsubdiv.py @@ -0,0 +1,35 @@ +#!/usr/bin/env python3 +from lyz_bezmisc import * +from lyz_ffgeom import * + +def maxdist(xxx_todo_changeme): + ((p0x,p0y),(p1x,p1y),(p2x,p2y),(p3x,p3y)) = xxx_todo_changeme + p0 = Point(p0x,p0y) + p1 = Point(p1x,p1y) + p2 = Point(p2x,p2y) + p3 = Point(p3x,p3y) + + s1 = Segment(p0,p3) + return max(s1.distanceToPoint(p1),s1.distanceToPoint(p2)) + +def cspsubdiv(csp,flat): + for sp in csp: + subdiv(sp,flat) + +def subdiv(sp,flat,i=1): + while i < len(sp): + p0 = sp[i-1][1] + p1 = sp[i-1][2] + p2 = sp[i][0] + p3 = sp[i][1] + + b = (p0,p1,p2,p3) + m = maxdist(b) + if m <= flat: + i += 1 + else: + one, two = beziersplitatt(b,0.5) + sp[i-1][2] = one[1] + sp[i][0] = two[2] + p = [one[2],one[3],two[1]] + sp[i:1] = [p] \ No newline at end of file diff --git a/extensions/fablabchemnitz/lyz_export/lyz_cubicsuperpath.py b/extensions/fablabchemnitz/lyz_export/lyz_cubicsuperpath.py new file mode 100644 index 00000000..a07974b3 --- /dev/null +++ b/extensions/fablabchemnitz/lyz_export/lyz_cubicsuperpath.py @@ -0,0 +1,166 @@ +#!/usr/bin/env python3 +""" +cubicsuperpath.py + +Copyright (C) 2005 Aaron Spike, aaron@ekips.org + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +""" +import lyz_simplepath as simplepath +from math import * + +def matprod(mlist): + prod=mlist[0] + for m in mlist[1:]: + a00=prod[0][0]*m[0][0]+prod[0][1]*m[1][0] + a01=prod[0][0]*m[0][1]+prod[0][1]*m[1][1] + a10=prod[1][0]*m[0][0]+prod[1][1]*m[1][0] + a11=prod[1][0]*m[0][1]+prod[1][1]*m[1][1] + prod=[[a00,a01],[a10,a11]] + return prod +def rotmat(teta): + return [[cos(teta),-sin(teta)],[sin(teta),cos(teta)]] +def applymat(mat, pt): + x=mat[0][0]*pt[0]+mat[0][1]*pt[1] + y=mat[1][0]*pt[0]+mat[1][1]*pt[1] + pt[0]=x + pt[1]=y +def norm(pt): + return sqrt(pt[0]*pt[0]+pt[1]*pt[1]) + +def ArcToPath(p1,params): + A=p1[:] + rx,ry,teta,longflag,sweepflag,x2,y2=params[:] + teta = teta*pi/180.0 + B=[x2,y2] + if rx==0 or ry==0 or A==B: + return([[A[:],A[:],A[:]],[B[:],B[:],B[:]]]) + mat=matprod((rotmat(teta),[[1/rx,0],[0,1/ry]],rotmat(-teta))) + applymat(mat, A) + applymat(mat, B) + k=[-(B[1]-A[1]),B[0]-A[0]] + d=k[0]*k[0]+k[1]*k[1] + k[0]/=sqrt(d) + k[1]/=sqrt(d) + d=sqrt(max(0,1-d/4)) + if longflag==sweepflag: + d*=-1 + O=[(B[0]+A[0])/2+d*k[0],(B[1]+A[1])/2+d*k[1]] + OA=[A[0]-O[0],A[1]-O[1]] + OB=[B[0]-O[0],B[1]-O[1]] + start=acos(OA[0]/norm(OA)) + if OA[1]<0: + start*=-1 + end=acos(OB[0]/norm(OB)) + if OB[1]<0: + end*=-1 + + if sweepflag and start>end: + end +=2*pi + if (not sweepflag) and start + + LaserDraw LYZ Export + fablabchemnitz.de.lyz_export + + + + + + + + + + 1000 + 2.0 + false + + + + + + + .lyz + image/lyz + Laser Draw LYZ (*.lyz) + LaserDraw LYZ Output + true + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/lyz_export/lyz_export.py b/extensions/fablabchemnitz/lyz_export/lyz_export.py new file mode 100644 index 00000000..8a5d99c9 --- /dev/null +++ b/extensions/fablabchemnitz/lyz_export/lyz_export.py @@ -0,0 +1,571 @@ +#!/usr/bin/env python3 +''' +This file output script for Inkscape creates Laser Draw (LaserDRW) LYZ files. + +File history: +0.1 Initial code (2/5/2017) +0.2 - Added support for rectangle, circle and ellipse (2/7/2017) + - Added option to automatically convert text to paths +0.3 - Fixed x,y translation when view box is used in SVG file for scaling (2/10/2017) +0.4 - Changed limits in resolution to 100 dpi minimum and 1000 dpi maximum (if you get an out of memory error in LaserDRW try reducing the resolution) +0.5 - Removed some messages that were not needed + - Fixed default resolution in inx files +0.6 - Made compatible with Python 3 and Inkscape 1.0 + +Copyright (C) 2017-2020 Scorch www.scorchworks.com +Derived from dxf_outlines.py by Aaron Spike and Alvin Penner + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +''' + +import math +import tempfile, os, sys, shutil +from subprocess import Popen, PIPE +import zipfile +import re + +import lyz_inkex as inkex +import lyz_simplestyle as simplestyle +import lyz_simpletransform as simpletransform +import lyz_cubicsuperpath as cubicsuperpath +import lyz_cspsubdiv as cspsubdiv +from lyz_library import LYZ_CLASS + +## Subprocess timout stuff ###### +from threading import Timer +def run_external(cmd, timeout_sec): + proc = Popen(cmd, stdout=PIPE, stderr=PIPE) + kill_proc = lambda p: p.kill() + timer = Timer(timeout_sec, kill_proc, [proc]) + try: + timer.start() + stdout,stderr = proc.communicate() + finally: + timer.cancel() +################################## + +class LYZExport(inkex.Effect): + def __init__(self): + inkex.Effect.__init__(self) + self.flatness = 0.01 + self.lines =[] + self.Cut_Type = {} + self.Xsize=40 + self.Ysize=40 + self.margin = 2 + self.PNG_DATA = None + self.png_area = "--export-area-page" + self.timout = 60 #timeout time for external calls to Inkscape in seconds + + self.OptionParser.add_option("--area_select", type="string", default="page_area") + self.OptionParser.add_option("--cut_select", type="string", default="zip") + self.OptionParser.add_option("--resolution", type="int", default=1000) + self.OptionParser.add_option("--margin", type="float", default=2.00) + self.OptionParser.add_option("--inkscape_version", type="int", default=100) + self.OptionParser.add_option("--txt2paths", type="inkbool", default=False) + + self.layers = ['0'] + self.layer = '0' + self.layernames = [] + self.PYTHON_VERSION = sys.version_info[0] + + + def stream_binary_data(self,filename): + # Change the format for STDOUT to binary to support + # writing the binary output file through STDOUT + if os.name == 'nt': #if sys.platform == "win32": + try: + import msvcrt + #msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY) + msvcrt.setmode(1, os.O_BINARY) + except: + pass + # Open the temporary file for reading + out = open(filename,'rb') + # Send the contents of the temp file to STDOUT + if self.PYTHON_VERSION < 3: + sys.stdout.write(out.read()) + else: + sys.stdout.buffer.write(out.read()) + out.close() + + + def output(self): + #create OS temp folder + self.tmp_dir = tempfile.mkdtemp() + + if (self.cut_select=="image" ): + LYZ=LYZ_CLASS() + LYZ.setup_new_header() + LYZ.add_png(self.PNG_DATA,self.Xsize,self.Ysize) + LYZ.set_size(self.Xsize+self.margin,self.Ysize+self.margin) + LYZ.set_margin(self.margin) + image_file = os.path.join(self.tmp_dir, "image.lyz") + LYZ.write_file(image_file) + + if (self.cut_select=="all" ) or (self.cut_select=="zip" ): + LYZ=LYZ_CLASS() + LYZ.setup_new_header() + LYZ.add_png(self.PNG_DATA,self.Xsize,self.Ysize) + for line in self.lines: + ID=line[7] + if (self.Cut_Type[ID]=="cut") or (self.Cut_Type[ID]=="engrave"): + LYZ.add_line(line[0],line[1],line[2],line[3],0.025) + LYZ.set_size(self.Xsize+self.margin,self.Ysize+self.margin) + LYZ.set_margin(self.margin) + all_file = os.path.join(self.tmp_dir, "all.lyz") + LYZ.write_file(all_file) + + if (self.cut_select=="raster" ) or (self.cut_select=="zip" ): + LYZ=LYZ_CLASS() + LYZ.setup_new_header() + LYZ.add_png(self.PNG_DATA,self.Xsize,self.Ysize) + LYZ.set_size(self.Xsize+self.margin,self.Ysize+self.margin) + LYZ.set_margin(self.margin) + raster_file = os.path.join(self.tmp_dir, "01_raster_engrave.lyz") + LYZ.write_file(raster_file) + + if (self.cut_select=="vector_red" ) or (self.cut_select=="zip" ): + LYZ=LYZ_CLASS() + LYZ.setup_new_header() + for line in self.lines: + ID=line[7] + if (self.Cut_Type[ID]=="cut"): + LYZ.add_line(line[0],line[1],line[2],line[3],0.025) + LYZ.set_size(self.Xsize+self.margin,self.Ysize+self.margin) + LYZ.set_margin(self.margin) + cut_file = os.path.join(self.tmp_dir, "03_vector_cut.lyz") + LYZ.write_file(cut_file) + + if (self.cut_select=="vector_blue" ) or (self.cut_select=="zip" ): + LYZ=LYZ_CLASS() + LYZ.setup_new_header() + for line in self.lines: + ID=line[7] + if (self.Cut_Type[ID]=="engrave"): + LYZ.add_line(line[0],line[1],line[2],line[3],0.025) + LYZ.set_size(self.Xsize+self.margin,self.Ysize+self.margin) + LYZ.set_margin(self.margin) + engrave_file = os.path.join(self.tmp_dir, "02_vector_engrave.lyz") + LYZ.write_file(engrave_file) + + if (self.cut_select=="image" ): + self.stream_binary_data(image_file) + + if (self.cut_select=="all" ): + self.stream_binary_data(all_file) + + if (self.cut_select=="raster" ): + self.stream_binary_data(raster_file) + + if (self.cut_select=="vector_red" ): + self.stream_binary_data(cut_file) + + if (self.cut_select=="vector_blue"): + self.stream_binary_data(engrave_file) + + if (self.cut_select=="zip" ): + # Add image LYZ file? Encode zip file names? + zip_file = os.path.join(self.tmp_dir, "lyz_files.zip") + z = zipfile.ZipFile(zip_file, 'w') + z.write(all_file , os.path.basename(all_file) ) + z.write(raster_file , os.path.basename(raster_file) ) + z.write(cut_file , os.path.basename(cut_file) ) + z.write(engrave_file, os.path.basename(engrave_file)) + z.write(sys.argv[-1], "design.svg" ) + z.close() + self.stream_binary_data(zip_file) + + #Delete the temp folder and file + shutil.rmtree(self.tmp_dir) + + def dxf_line(self,csp,pen_width=0.025,color=None,path_id="",layer="none"): + x1 = csp[0][0] + y1 = csp[0][1] + x2 = csp[1][0] + y2 = csp[1][1] + self.lines.append([x1,-y1,x2,-y2,layer,pen_width,color,path_id]) + + def colmod(self,r,g,b,path_id): + if (r,g,b) ==(255,0,0): + self.Cut_Type[path_id]="cut" + (r,g,b) = (255,255,255) + elif (r,g,b)==(0,0,255): + self.Cut_Type[path_id]="engrave" + (r,g,b) = (255,255,255) + else: + self.Cut_Type[path_id]="raster" + (r,g,b) = (0,0,0) + + return '%02x%02x%02x' % (r,g,b) + + def process_shape(self, node, mat): + rgb = (0,0,0) + path_id = node.get('id') + style = node.get('style') + self.Cut_Type[path_id]="raster" # Set default type to raster + + color_props_fill = ('fill', 'stop-color', 'flood-color', 'lighting-color') + color_props_stroke = ('stroke',) + color_props = color_props_fill + color_props_stroke + + ##################################################### + ## The following is ripped off from Coloreffect.py ## + ##################################################### + if style: + declarations = style.split(';') + for i,decl in enumerate(declarations): + parts = decl.split(':', 2) + if len(parts) == 2: + (prop, col) = parts + prop = prop.strip().lower() + #if prop in color_props: + if prop == 'stroke': + col= col.strip() + if simplestyle.isColor(col): + c=simplestyle.parseColor(col) + new_val='#'+self.colmod(c[0],c[1],c[2],path_id) + else: + new_val = col + if new_val != col: + declarations[i] = prop + ':' + new_val + node.set('style', ';'.join(declarations)) + + ##################################################### + if node.tag == inkex.addNS('path','svg'): + d = node.get('d') + if not d: + return + p = cubicsuperpath.parsePath(d) + elif node.tag == inkex.addNS('rect','svg'): + x = float(node.get('x')) + y = float(node.get('y')) + width = float(node.get('width')) + height = float(node.get('height')) + #d = "M %f,%f %f,%f %f,%f %f,%f Z" %(x,y, x+width,y, x+width,y+height, x,y+height) + #p = cubicsuperpath.parsePath(d) + rx = 0.0 + ry = 0.0 + if node.get('rx'): + rx=float(node.get('rx')) + if node.get('ry'): + ry=float(node.get('ry')) + + if max(rx,ry) > 0.0: + if rx==0.0 or ry==0.0: + rx = max(rx,ry) + ry = rx + #msg = "rx = %f ry = %f " %(rx,ry) + #inkex.errormsg(msg) + L1 = "M %f,%f %f,%f " %(x+rx , y , x+width-rx , y ) + C1 = "A %f,%f 0 0 1 %f,%f" %(rx , ry , x+width , y+ry ) + L2 = "M %f,%f %f,%f " %(x+width , y+ry , x+width , y+height-ry) + C2 = "A %f,%f 0 0 1 %f,%f" %(rx , ry , x+width-rx , y+height ) + L3 = "M %f,%f %f,%f " %(x+width-rx , y+height , x+rx , y+height ) + C3 = "A %f,%f 0 0 1 %f,%f" %(rx , ry , x , y+height-ry) + L4 = "M %f,%f %f,%f " %(x , y+height-ry, x , y+ry ) + C4 = "A %f,%f 0 0 1 %f,%f" %(rx , ry , x+rx , y ) + d = L1 + C1 + L2 + C2 + L3 + C3 + L4 + C4 + else: + d = "M %f,%f %f,%f %f,%f %f,%f Z" %(x,y, x+width,y, x+width,y+height, x,y+height) + p = cubicsuperpath.parsePath(d) + + elif node.tag == inkex.addNS('circle','svg'): + cx = float(node.get('cx') ) + cy = float(node.get('cy')) + r = float(node.get('r')) + d = "M %f,%f A %f,%f 0 0 1 %f,%f %f,%f 0 0 1 %f,%f %f,%f 0 0 1 %f,%f %f,%f 0 0 1 %f,%f Z" %(cx+r,cy, r,r,cx,cy+r, r,r,cx-r,cy, r,r,cx,cy-r, r,r,cx+r,cy) + p = cubicsuperpath.parsePath(d) + + elif node.tag == inkex.addNS('ellipse','svg'): + cx = float(node.get('cx')) + cy = float(node.get('cy')) + rx = float(node.get('rx')) + ry = float(node.get('ry')) + d = "M %f,%f A %f,%f 0 0 1 %f,%f %f,%f 0 0 1 %f,%f %f,%f 0 0 1 %f,%f %f,%f 0 0 1 %f,%f Z" %(cx+rx,cy, rx,ry,cx,cy+ry, rx,ry,cx-rx,cy, rx,ry,cx,cy-ry, rx,ry,cx+rx,cy) + p = cubicsuperpath.parsePath(d) + else: + return + trans = node.get('transform') + if trans: + mat = simpletransform.composeTransform(mat, simpletransform.parseTransform(trans)) + simpletransform.applyTransformToPath(mat, p) + + ################################################### + ## Break Curves down into small lines + ################################################### + f = self.flatness + is_flat = 0 + while is_flat < 1: + try: + cspsubdiv.cspsubdiv(p, f) + is_flat = 1 + except IndexError: + break + except: + f += 0.1 + if f>2 : + break + #something has gone very wrong. + ################################################### + for sub in p: + for i in range(len(sub)-1): + s = sub[i] + e = sub[i+1] + self.dxf_line([s[1],e[1]],0.025,rgb,path_id) + + + def process_clone(self, node): + trans = node.get('transform') + x = node.get('x') + y = node.get('y') + mat = [[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]] + if trans: + mat = simpletransform.composeTransform(mat, simpletransform.parseTransform(trans)) + if x: + mat = simpletransform.composeTransform(mat, [[1.0, 0.0, float(x)], [0.0, 1.0, 0.0]]) + if y: + mat = simpletransform.composeTransform(mat, [[1.0, 0.0, 0.0], [0.0, 1.0, float(y)]]) + # push transform + if trans or x or y: + self.groupmat.append(simpletransform.composeTransform(self.groupmat[-1], mat)) + # get referenced node + refid = node.get(inkex.addNS('href','xlink')) + refnode = self.getElementById(refid[1:]) + if refnode is not None: + if refnode.tag == inkex.addNS('g','svg'): + self.process_group(refnode) + elif refnode.tag == inkex.addNS('use', 'svg'): + self.process_clone(refnode) + else: + self.process_shape(refnode, self.groupmat[-1]) + # pop transform + if trans or x or y: + self.groupmat.pop() + + def process_group(self, group): + if group.get(inkex.addNS('groupmode', 'inkscape')) == 'layer': + style = group.get('style') + if style: + style = simplestyle.parseStyle(style) + if style.has_key('display'): + if style['display'] == 'none' and self.options.layer_option and self.options.layer_option=='visible': + return + layer = group.get(inkex.addNS('label', 'inkscape')) + + layer = layer.replace(' ', '_') + if layer in self.layers: + self.layer = layer + trans = group.get('transform') + if trans: + self.groupmat.append(simpletransform.composeTransform(self.groupmat[-1], simpletransform.parseTransform(trans))) + for node in group: + if node.tag == inkex.addNS('g','svg'): + self.process_group(node) + elif node.tag == inkex.addNS('use', 'svg'): + self.process_clone(node) + else: + self.process_shape(node, self.groupmat[-1]) + if trans: + self.groupmat.pop() + + + def Make_PNG(self): + #create OS temp folder + tmp_dir = tempfile.mkdtemp() + svg_temp_file = os.path.join(tmp_dir, "LYZimage.svg") + png_temp_file = os.path.join(tmp_dir, "LYZpngdata.png") + + dpi = "%d" %(self.options.resolution) + if self.inkscape_version >= 100: + cmd = [ "inkscape", self.png_area, "--export-dpi", dpi, \ + "--export-background","rgb(255, 255, 255)","--export-background-opacity", \ + "255" ,"--export-type=png", "--export-filename=%s" %(png_temp_file), svg_temp_file ] + else: + cmd = [ "inkscape", self.png_area, "--export-dpi", dpi, \ + "--export-background","rgb(255, 255, 255)","--export-background-opacity", \ + "255" ,"--export-png", png_temp_file, svg_temp_file ] + + if (self.cut_select=="raster") or (self.cut_select=="all") or (self.cut_select=="zip"): + self.document.write(svg_temp_file) + #cmd = [ "inkscape", self.png_area, "--export-dpi", dpi, "--export-background","rgb(255, 255, 255)","--export-background-opacity", "255" ,"--export-png", png_temp_file, svg_temp_file ] + #p = Popen(cmd, stdout=PIPE, stderr=PIPE) + #stdout, stderr = p.communicate() + run_external(cmd, self.timout) + else: + shutil.copyfile(sys.argv[-1], svg_temp_file) + #cmd = [ "inkscape", self.png_area, "--export-dpi", dpi, "--export-background","rgb(255, 255, 255)","--export-background-opacity", "255" ,"--export-png", png_temp_file, svg_temp_file ] + #p = Popen(cmd, stdout=PIPE, stderr=PIPE) + #stdout, stderr = p.communicate() + run_external(cmd, self.timout) + try: + with open(png_temp_file, 'rb') as f: + self.PNG_DATA = f.read() + except: + inkex.errormsg("PNG generation timed out.\nTry saving again.\n\n") + + #Delete the temp folder and any files + shutil.rmtree(tmp_dir) + + def unit2mm(self, string): + # Returns mm given a string representation of units in another system + # a dictionary of unit to user unit conversion factors + uuconv = {'in': 25.4, + 'pt': 25.4/72.0, + 'px': 25.4/self.inkscape_dpi, + 'mm': 1.0, + 'cm': 10.0, + 'm' : 1000.0, + 'km': 1000.0*1000.0, + 'pc': 25.4/6.0, + 'yd': 25.4*12*3, + 'ft': 25.4*12} + + unit = re.compile('(%s)$' % '|'.join(uuconv.keys())) + param = re.compile(r'(([-+]?[0-9]+(\.[0-9]*)?|[-+]?\.[0-9]+)([eE][-+]?[0-9]+)?)') + + p = param.match(string) + u = unit.search(string) + if p: + retval = float(p.string[p.start():p.end()]) + else: + inkex.errormsg("Size was not determined returning zero value") + retval = 0.0 + if u: + retunit = u.string[u.start():u.end()] + else: + inkex.errormsg("units not understood assuming px at %d dpi" %(self.inkscape_dpi)) + retunit = 'px' + + try: + return retval * uuconv[retunit] + except KeyError: + return retval + + def effect(self): + msg = "" + #area_select = self.options.area_select # "page_area", "object_area" + area_select = "page_area" + self.cut_select = self.options.cut_select # "vector_red", "vector_blue", "raster", "all", "image", "Zip" + self.margin = self.options.margin # float value + #self.inkscape_dpi = self.options.inkscape_dpi # float value + self.inkscape_version = self.options.inkscape_version # float value + self.txt2paths = self.options.txt2paths # boolean Value + + + if self.inkscape_version > 91: + self.inkscape_dpi = 96 + else: + self.inkscape_dpi = 90 + + if (self.txt2paths): + #create OS temp folder + tmp_dir = tempfile.mkdtemp() + txt2path_file = os.path.join(tmp_dir, "txt2path.svg") + if self.inkscape_version >= 100: + cmd = [ "inkscape", "--export-text-to-path","--export-plain-svg", "--export-filename=%s" %(txt2path_file), sys.argv[-1] ] + else: + cmd = [ "inkscape", "--export-text-to-path","--export-plain-svg",txt2path_file, sys.argv[-1] ] + + run_external(cmd, self.timout) + self.document.parse(txt2path_file) + #Delete the temp folder and any files + shutil.rmtree(tmp_dir) + + h_uu = self.svg.unittouu(self.document.getroot().xpath('@height', namespaces=inkex.NSS)[0]) + w_uu = self.svg.unittouu(self.document.getroot().xpath('@width' , namespaces=inkex.NSS)[0]) + + h_mm = self.unit2mm(self.document.getroot().xpath('@height', namespaces=inkex.NSS)[0]) + w_mm = self.unit2mm(self.document.getroot().xpath('@width', namespaces=inkex.NSS)[0]) + + try: + view_box_str = self.document.getroot().xpath('@viewBox', namespaces=inkex.NSS)[0] + view_box_list = view_box_str.split(' ') + Wpix = float(view_box_list[2]) + Hpix = float(view_box_list[3]) + scale = h_mm/Hpix + Dx = float(view_box_list[0]) / ( float(view_box_list[2])/w_mm ) + Dy = float(view_box_list[1]) / ( float(view_box_list[3])/h_mm ) + except: + #inkex.errormsg("Using Default Inkscape Scale") + scale = 25.4/self.inkscape_dpi + Dx = 0 + Dy = 0 + + for node in self.document.getroot().xpath('//svg:g', namespaces=inkex.NSS): + if node.get(inkex.addNS('groupmode', 'inkscape')) == 'layer': + layer = node.get(inkex.addNS('label', 'inkscape')) + self.layernames.append(layer.lower()) + # if self.options.layer_name and self.options.layer_option and self.options.layer_option=='name' and not layer.lower() in self.options.layer_name: + # continue + layer = layer.replace(' ', '_') + if layer and not layer in self.layers: + self.layers.append(layer) + + #self.groupmat = [[[scale, 0.0, 0.0], [0.0, -scale, h_mm]]] + self.groupmat = [[[scale, 0.0, 0.0-Dx], + [0.0 , -scale, h_mm+Dy]]] + #doc = self.document.getroot() + self.process_group(self.document.getroot()) + ################################################# + + # msg = msg + self.getDocumentUnit() + "\n" + # msg = msg + "scale = %f\n" %(scale) + msg = msg + "Height(mm)= %f\n" %(h_mm) + msg = msg + "Width (mm)= %f\n" %(w_mm) + # msg = msg + "h_uu = %f\n" %(h_uu) + # msg = msg + "w_uu = %f\n" %(w_uu) + + #inkex.errormsg(msg) + + if (area_select=="object_area"): + self.png_area = "--export-area-drawing" + xmin= self.lines[0][0]+0.0 + xmax= self.lines[0][0]+0.0 + ymin= self.lines[0][1]+0.0 + ymax= self.lines[0][1]+0.0 + for line in self.lines: + x1= line[0] + y1= line[1] + x2= line[2] + y2= line[3] + xmin = min(min(xmin,x1),x2) + ymin = min(min(ymin,y1),y2) + xmax = max(max(xmax,x1),x2) + ymax = max(max(ymax,y1),y2) + else: + self.png_area = "--export-area-page" + xmin= 0.0 + xmax= w_mm + ymin= -h_mm + ymax= 0.0 + + self.Xsize=xmax-xmin + self.Ysize=ymax-ymin + Xcenter=(xmax+xmin)/2.0 + Ycenter=(ymax+ymin)/2.0 + for ii in range(len(self.lines)): + self.lines[ii][0] = self.lines[ii][0]-Xcenter + self.lines[ii][1] = self.lines[ii][1]-Ycenter + self.lines[ii][2] = self.lines[ii][2]-Xcenter + self.lines[ii][3] = self.lines[ii][3]-Ycenter + + if (self.cut_select=="raster") or \ + (self.cut_select=="all" ) or \ + (self.cut_select=="image" ) or \ + (self.cut_select=="zip" ): + self.Make_PNG() + +LYZExport().affect() \ No newline at end of file diff --git a/extensions/fablabchemnitz/lyz_export/lyz_export_zip.inx b/extensions/fablabchemnitz/lyz_export/lyz_export_zip.inx new file mode 100644 index 00000000..4b20e7e2 --- /dev/null +++ b/extensions/fablabchemnitz/lyz_export/lyz_export_zip.inx @@ -0,0 +1,45 @@ + + + LaserDraw LYZ Export (zip) + fablabchemnitz.de.lyz_export.zip + + + + 1000 + 2.0 + false + + + + + + + + .zip + application/x-zip + Laser Draw LYZ (ZIP)(*.zip) + LaserDraw LYZ Output Zipped + true + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/lyz_export/lyz_ffgeom.py b/extensions/fablabchemnitz/lyz_export/lyz_ffgeom.py new file mode 100644 index 00000000..28ef03a9 --- /dev/null +++ b/extensions/fablabchemnitz/lyz_export/lyz_ffgeom.py @@ -0,0 +1,138 @@ +#!/usr/bin/env python3 +""" + ffgeom.py + Copyright (C) 2005 Aaron Cyril Spike, aaron@ekips.org + + This file is part of FretFind 2-D. + + FretFind 2-D is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + FretFind 2-D is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with FretFind 2-D; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +""" +import math +try: + NaN = float('NaN') +except ValueError: + PosInf = 1e300000 + NaN = PosInf/PosInf + +class Point: + precision = 5 + def __init__(self, x, y): + self.__coordinates = {'x' : float(x), 'y' : float(y)} + def __getitem__(self, key): + return self.__coordinates[key] + def __setitem__(self, key, value): + self.__coordinates[key] = float(value) + def __repr__(self): + return '(%s, %s)' % (round(self['x'],self.precision),round(self['y'],self.precision)) + def copy(self): + return Point(self['x'],self['y']) + def translate(self, x, y): + self['x'] += x + self['y'] += y + def move(self, x, y): + self['x'] = float(x) + self['y'] = float(y) + +class Segment: + def __init__(self, e0, e1): + self.__endpoints = [e0, e1] + def __getitem__(self, key): + return self.__endpoints[key] + def __setitem__(self, key, value): + self.__endpoints[key] = value + def __repr__(self): + return repr(self.__endpoints) + def copy(self): + return Segment(self[0],self[1]) + def translate(self, x, y): + self[0].translate(x,y) + self[1].translate(x,y) + def move(self,e0,e1): + self[0] = e0 + self[1] = e1 + def delta_x(self): + return self[1]['x'] - self[0]['x'] + def delta_y(self): + return self[1]['y'] - self[0]['y'] + #alias functions + run = delta_x + rise = delta_y + def slope(self): + if self.delta_x() != 0: + return self.delta_x() / self.delta_y() + return NaN + def intercept(self): + if self.delta_x() != 0: + return self[1]['y'] - (self[0]['x'] * self.slope()) + return NaN + def distanceToPoint(self, p): + s2 = Segment(self[0],p) + c1 = dot(s2,self) + if c1 <= 0: + return Segment(p,self[0]).length() + c2 = dot(self,self) + if c2 <= c1: + return Segment(p,self[1]).length() + return self.perpDistanceToPoint(p) + def perpDistanceToPoint(self, p): + len = self.length() + if len == 0: return NaN + return math.fabs(((self[1]['x'] - self[0]['x']) * (self[0]['y'] - p['y'])) - \ + ((self[0]['x'] - p['x']) * (self[1]['y'] - self[0]['y']))) / len + def angle(self): + return math.pi * (math.atan2(self.delta_y(), self.delta_x())) / 180 + def length(self): + return math.sqrt((self.delta_x() ** 2) + (self.delta_y() ** 2)) + def pointAtLength(self, len): + if self.length() == 0: return Point(NaN, NaN) + ratio = len / self.length() + x = self[0]['x'] + (ratio * self.delta_x()) + y = self[0]['y'] + (ratio * self.delta_y()) + return Point(x, y) + def pointAtRatio(self, ratio): + if self.length() == 0: return Point(NaN, NaN) + x = self[0]['x'] + (ratio * self.delta_x()) + y = self[0]['y'] + (ratio * self.delta_y()) + return Point(x, y) + def createParallel(self, p): + return Segment(Point(p['x'] + self.delta_x(), p['y'] + self.delta_y()), p) + def intersect(self, s): + return intersectSegments(self, s) + +def intersectSegments(s1, s2): + x1 = s1[0]['x'] + x2 = s1[1]['x'] + x3 = s2[0]['x'] + x4 = s2[1]['x'] + + y1 = s1[0]['y'] + y2 = s1[1]['y'] + y3 = s2[0]['y'] + y4 = s2[1]['y'] + + denom = ((y4 - y3) * (x2 - x1)) - ((x4 - x3) * (y2 - y1)) + num1 = ((x4 - x3) * (y1 - y3)) - ((y4 - y3) * (x1 - x3)) + num2 = ((x2 - x1) * (y1 - y3)) - ((y2 - y1) * (x1 - x3)) + + num = num1 + + if denom != 0: + x = x1 + ((num / denom) * (x2 - x1)) + y = y1 + ((num / denom) * (y2 - y1)) + return Point(x, y) + return Point(NaN, NaN) + +def dot(s1, s2): + return s1.delta_x() * s2.delta_x() + s1.delta_y() * s2.delta_y() \ No newline at end of file diff --git a/extensions/fablabchemnitz/lyz_export/lyz_inkex.py b/extensions/fablabchemnitz/lyz_export/lyz_inkex.py new file mode 100644 index 00000000..7fb4c821 --- /dev/null +++ b/extensions/fablabchemnitz/lyz_export/lyz_inkex.py @@ -0,0 +1,399 @@ +#!/usr/bin/env python3 +""" +inkex.py +A helper module for creating Inkscape extensions + +Copyright (C) 2005,2010 Aaron Spike and contributors + +Contributors: + Aurelio A. Heckert + Bulia Byak + Nicolas Dufour, nicoduf@yahoo.fr + Peter J. R. Moulder + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +""" +import copy +import gettext +import optparse +import os +import random +import re +import sys +from math import * +from lxml import etree + +# a dictionary of all of the xmlns prefixes in a standard inkscape doc +NSS = { +u'sodipodi' :u'http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd', +u'cc' :u'http://creativecommons.org/ns#', +u'ccOLD' :u'http://web.resource.org/cc/', +u'svg' :u'http://www.w3.org/2000/svg', +u'dc' :u'http://purl.org/dc/elements/1.1/', +u'rdf' :u'http://www.w3.org/1999/02/22-rdf-syntax-ns#', +u'inkscape' :u'http://www.inkscape.org/namespaces/inkscape', +u'xlink' :u'http://www.w3.org/1999/xlink', +u'xml' :u'http://www.w3.org/XML/1998/namespace' +} + + +def localize(): + domain = 'inkscape' + if sys.platform.startswith('win'): + import locale + current_locale, encoding = locale.getdefaultlocale() + os.environ['LANG'] = current_locale + try: + localdir = os.environ['INKSCAPE_LOCALEDIR'] + trans = gettext.translation(domain, localdir, [current_locale], fallback=True) + except KeyError: + trans = gettext.translation(domain, fallback=True) + elif sys.platform.startswith('darwin'): + try: + localdir = os.environ['INKSCAPE_LOCALEDIR'] + trans = gettext.translation(domain, localdir, fallback=True) + except KeyError: + try: + localdir = os.environ['PACKAGE_LOCALE_DIR'] + trans = gettext.translation(domain, localdir, fallback=True) + except KeyError: + trans = gettext.translation(domain, fallback=True) + else: + try: + localdir = os.environ['PACKAGE_LOCALE_DIR'] + trans = gettext.translation(domain, localdir, fallback=True) + except KeyError: + trans = gettext.translation(domain, fallback=True) + #sys.stderr.write(str(localdir) + "\n") + trans.install() + + +def debug(what): + sys.stderr.write(str(what) + "\n") + return what + + +def errormsg(msg): + """Intended for end-user-visible error messages. + + (Currently just writes to stderr with an appended newline, but could do + something better in future: e.g. could add markup to distinguish error + messages from status messages or debugging output.) + + Note that this should always be combined with translation: + + import inkex + ... + inkex.errormsg("This extension requires two selected paths.") + """ + #if isinstance(msg, unicode): + # sys.stderr.write(msg.encode("utf-8") + "\n") + #else: + # sys.stderr.write((unicode(msg, "utf-8", errors='replace') + "\n").encode("utf-8")) + print(msg) + +def are_near_relative(a, b, eps): + return (a-b <= a*eps) and (a-b >= -a*eps) + + +def check_inkbool(option, opt, value): + if str(value).capitalize() == 'True': + return True + elif str(value).capitalize() == 'False': + return False + else: + raise optparse.OptionValueError("option %s: invalid inkbool value: %s" % (opt, value)) + + +def addNS(tag, ns=None): + val = tag + if ns is not None and len(ns) > 0 and ns in NSS and len(tag) > 0 and tag[0] != '{': + val = "{%s}%s" % (NSS[ns], tag) + return val + + +class InkOption(optparse.Option): + TYPES = optparse.Option.TYPES + ("inkbool",) + TYPE_CHECKER = copy.copy(optparse.Option.TYPE_CHECKER) + TYPE_CHECKER["inkbool"] = check_inkbool + + +class Effect: + """A class for creating Inkscape SVG Effects""" + + def __init__(self, *args, **kwargs): + self.document = None + self.original_document = None + self.ctx = None + self.selected = {} + self.doc_ids = {} + self.options = None + self.args = None + self.OptionParser = optparse.OptionParser(usage="usage: %prog [options] SVGfile", option_class=InkOption) + self.OptionParser.add_option("--id", dest="ids", default=[], help="id attribute of object to manipulate") + self.OptionParser.add_option("--selected-nodes", dest="selected_nodes", default=[], help="id:subpath:position of selected nodes, if any") + # TODO write a parser for this + + def effect(self): + """Apply some effects on the document. Extensions subclassing Effect + must override this function and define the transformations + in it.""" + pass + + def getoptions(self,args=sys.argv[1:]): + """Collect command line arguments""" + self.options, self.args = self.OptionParser.parse_args(args) + + def parse(self, filename=None, encoding=None): + """Parse document in specified file or on stdin""" + + # First try to open the file from the function argument + if filename is not None: + try: + stream = open(filename, 'r') + except IOError: + errormsg("Unable to open specified file: %s" % filename) + sys.exit() + + # If it wasn't specified, try to open the file specified as + # an object member + elif self.svg_file is not None: + try: + stream = open(self.svg_file, 'r') + except IOError: + errormsg("Unable to open object member file: %s" % self.svg_file) + sys.exit() + + # Finally, if the filename was not specified anywhere, use + # standard input stream + else: + stream = sys.stdin + + if encoding == None: + p = etree.XMLParser(huge_tree=True, recover=True) + else: + p = etree.XMLParser(huge_tree=True, recover=True, encoding=encoding) + + self.document = etree.parse(stream, parser=p) + self.original_document = copy.deepcopy(self.document) + stream.close() + + # defines view_center in terms of document units + def getposinlayer(self): + #defaults + self.current_layer = self.document.getroot() + self.view_center = (0.0, 0.0) + + layerattr = self.document.xpath('//sodipodi:namedview/@inkscape:current-layer', namespaces=NSS) + if layerattr: + layername = layerattr[0] + layer = self.document.xpath('//svg:g[@id="%s"]' % layername, namespaces=NSS) + if layer: + self.current_layer = layer[0] + + xattr = self.document.xpath('//sodipodi:namedview/@inkscape:cx', namespaces=NSS) + yattr = self.document.xpath('//sodipodi:namedview/@inkscape:cy', namespaces=NSS) + if xattr and yattr: + x = self.unittouu(xattr[0] + 'px') + y = self.unittouu(yattr[0] + 'px') + doc_height = self.unittouu(self.getDocumentHeight()) + if x and y: + self.view_center = (float(x), doc_height - float(y)) + # FIXME: y-coordinate flip, eliminate it when it's gone in Inkscape + + def getselected(self): + """Collect selected nodes""" + for i in self.options.ids: + path = '//*[@id="%s"]' % i + for node in self.document.xpath(path, namespaces=NSS): + self.selected[i] = node + + def getElementById(self, id): + path = '//*[@id="%s"]' % id + el_list = self.document.xpath(path, namespaces=NSS) + if el_list: + return el_list[0] + else: + return None + + def getParentNode(self, node): + for parent in self.document.getiterator(): + if node in parent.getchildren(): + return parent + + def getdocids(self): + docIdNodes = self.document.xpath('//@id', namespaces=NSS) + for m in docIdNodes: + self.doc_ids[m] = 1 + + def getNamedView(self): + return self.document.xpath('//sodipodi:namedview', namespaces=NSS)[0] + + def createGuide(self, posX, posY, angle): + atts = { + 'position': str(posX)+','+str(posY), + 'orientation': str(sin(radians(angle)))+','+str(-cos(radians(angle))) + } + guide = etree.SubElement( + self.getNamedView(), + addNS('guide','sodipodi'), atts) + return guide + + def output(self): + """Serialize document into XML on stdout""" + original = etree.tostring(self.original_document) + result = etree.tostring(self.document) + if original != result: + self.document.write(sys.stdout) + + def affect(self, args=sys.argv[1:], output=True): + """Affect an SVG document with a callback effect""" + self.svg_file = args[-1] + localize() + self.getoptions(args) + self.parse() + self.getposinlayer() + self.getselected() + self.getdocids() + self.effect() + if output: + self.output() + + def uniqueId(self, old_id, make_new_id=True): + new_id = old_id + if make_new_id: + while new_id in self.doc_ids: + new_id += random.choice('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ') + self.doc_ids[new_id] = 1 + return new_id + + def xpathSingle(self, path): + try: + retval = self.document.xpath(path, namespaces=NSS)[0] + except: + errormsg("No matching node for expression: %s" % path) + retval = None + return retval + + # a dictionary of unit to user unit conversion factors + __uuconv = {'in': 96.0, 'pt': 1.33333333333, 'px': 1.0, 'mm': 3.77952755913, 'cm': 37.7952755913, + 'm': 3779.52755913, 'km': 3779527.55913, 'pc': 16.0, 'yd': 3456.0, 'ft': 1152.0} + + # Fault tolerance for lazily defined SVG + def getDocumentWidth(self): + width = self.document.getroot().get('width') + if width: + return width + else: + viewbox = self.document.getroot().get('viewBox') + if viewbox: + return viewbox.split()[2] + else: + return '0' + + # Fault tolerance for lazily defined SVG + def getDocumentHeight(self): + """Returns a string corresponding to the height of the document, as + defined in the SVG file. If it is not defined, returns the height + as defined by the viewBox attribute. If viewBox is not defined, + returns the string '0'.""" + height = self.document.getroot().get('height') + if height: + return height + else: + viewbox = self.document.getroot().get('viewBox') + if viewbox: + return viewbox.split()[3] + else: + return '0' + + def getDocumentUnit(self): + """Returns the unit used for in the SVG document. + In the case the SVG document lacks an attribute that explicitly + defines what units are used for SVG coordinates, it tries to calculate + the unit from the SVG width and viewBox attributes. + Defaults to 'px' units.""" + svgunit = 'px' # default to pixels + + svgwidth = self.getDocumentWidth() + viewboxstr = self.document.getroot().get('viewBox') + if viewboxstr: + unitmatch = re.compile('(%s)$' % '|'.join(self.__uuconv.keys())) + param = re.compile(r'(([-+]?[0-9]+(\.[0-9]*)?|[-+]?\.[0-9]+)([eE][-+]?[0-9]+)?)') + + p = param.match(svgwidth) + u = unitmatch.search(svgwidth) + + width = 100 # default + viewboxwidth = 100 # default + svgwidthunit = 'px' # default assume 'px' unit + if p: + width = float(p.string[p.start():p.end()]) + else: + errormsg("SVG Width not set correctly! Assuming width = 100") + if u: + svgwidthunit = u.string[u.start():u.end()] + + viewboxnumbers = [] + for t in viewboxstr.split(): + try: + viewboxnumbers.append(float(t)) + except ValueError: + pass + if len(viewboxnumbers) == 4: # check for correct number of numbers + viewboxwidth = viewboxnumbers[2] + + svgunitfactor = self.__uuconv[svgwidthunit] * width / viewboxwidth + + # try to find the svgunitfactor in the list of units known. If we don't find something, ... + eps = 0.01 # allow 1% error in factor + for key in self.__uuconv: + if are_near_relative(self.__uuconv[key], svgunitfactor, eps): + # found match! + svgunit = key + + return svgunit + + def unittouu(self, string): + """Returns userunits given a string representation of units in another system""" + unit = re.compile('(%s)$' % '|'.join(self.__uuconv.keys())) + param = re.compile(r'(([-+]?[0-9]+(\.[0-9]*)?|[-+]?\.[0-9]+)([eE][-+]?[0-9]+)?)') + + p = param.match(string) + u = unit.search(string) + if p: + retval = float(p.string[p.start():p.end()]) + else: + retval = 0.0 + if u: + try: + return retval * (self.__uuconv[u.string[u.start():u.end()]] / self.__uuconv[self.getDocumentUnit()]) + except KeyError: + pass + else: # default assume 'px' unit + return retval / self.__uuconv[self.getDocumentUnit()] + + return retval + + def uutounit(self, val, unit): + return val / (self.__uuconv[unit] / self.__uuconv[self.getDocumentUnit()]) + + def addDocumentUnit(self, value): + """Add document unit when no unit is specified in the string """ + try: + float(value) + return value + self.getDocumentUnit() + except ValueError: + return value \ No newline at end of file diff --git a/extensions/fablabchemnitz/lyz_export/lyz_library.py b/extensions/fablabchemnitz/lyz_export/lyz_library.py new file mode 100644 index 00000000..3ec4b53a --- /dev/null +++ b/extensions/fablabchemnitz/lyz_export/lyz_library.py @@ -0,0 +1,441 @@ +#!/usr/bin/env python3 +''' +This script reads and writes Laser Draw (LaserDRW) LYZ files. + +File history: +0.1 Initial code (2/5/2017) + +Copyright (C) 2017 Scorch www.scorchworks.com + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +''' + +import struct +import sys +import os +from time import time +from shutil import copyfile + +############################################################################## +def show(byte_in): + print("%03d" %ord(byte_in)) + + +def possible_values(loc,len,type,bf): + cur= bf.tell() + vals="" + if type=='d' or type=='Q' or type=='>d' or type=='>Q': + tl=8 + elif type=='i' or type=='f' or type=='l' or type=='L' or type=='I': + tl=4 + elif type=='>i' or type=='>f' or type=='>l' or type=='>L' or type=='>I': + tl=4 + elif type=='h' or type=='H' or type=='>h' or type=='>H': + tl=2 + + for i in range(tl): + for j in range(i,(len-tl+1),tl): + bf.seek(loc+j) + vals = vals + "\t"+ str( struct.unpack(type,bf.read(tl))[0] ) + vals = vals+"\n" + bf.seek(cur) + return vals +############################################################################## + + +class LYZ_CLASS: + def __init__(self): + # DEFINE HEADER FIELDS + self.header_fields = [] + + self.header_data = [] + self.feature_list = [] + self.left_over = "" + self.EOF = "" + + ########################## Description ,location,length,type,default value + self.header_fields.append(["EXTENSION" , 9999999, 4, 't', ".LYZ" ]) #0 + self.header_fields.append(["LENGTH" , 9999999, 4, 'i', 221 ]) #1 + self.header_fields.append(["N FEATURES" , 9999999, 4, 'i', 0 ]) #2 + self.header_fields.append(["?A(4)" , 9999999, 4, 'i', 0 ]) #3 + self.header_fields.append(["CREATOR" , 9999999, 50, 't',"Creater: LaserDraw.exe(Lihuiyu software Co., Ltd.)"]) #4 + self.header_fields.append(["?B(14)" , 9999999, 14, 'z',[0,0,0,0,0,0,0,0,0,2,0,0,0,128] ]) #5 + self.header_fields.append(["DESC" , 9999999, 37, 't',"Description: LaserDraw Graphics File."]) #6 + self.header_fields.append(["?C(1)" , 9999999, 1, 'z', [0] ]) #7 + self.header_fields.append(["?D(1)" , 9999999, 1, 'z', [0] ]) #8 + self.header_fields.append(["Time(8)" , 9999999, 8, 'z', [0,0,0,0,0,0,0,0] ]) #9 + self.header_fields.append(["TIME(8)" , 9999999, 8, 'z', [0,0,0,0,0,0,0,0] ]) #10 + self.header_fields.append(["?G(8)" , 9999999, 4, 'z', [0,0,0,0] ]) #11 + self.header_fields.append(["?H(8)" , 9999999, 4, 'z', [0,0,0,0] ]) #12 + self.header_fields.append(["?I(18)" , 9999999, 18, 'z', [176,8,210,125,0,65,206,0,0,19,17,126,0,36,35,23,0,2] ]) #13 + self.header_fields.append(["OFFSET" , 9999999, 8, 'd', 0.0 ]) #14 #was 84 + self.header_fields.append(["X SIZE" , 9999999, 8, 'd', 42.0 ]) #15 + self.header_fields.append(["Y SIZE" , 9999999, 8, 'd', 42.0 ]) #16 + self.header_fields.append(["BORDER1" , 9999999, 8, 'd', 1.0 ]) #17 + self.header_fields.append(["BORDER2" , 9999999, 8, 'd', 1.0 ]) #18 + self.header_fields.append(["BORDER3" , 9999999, 8, 'd', 1.0 ]) #19 + self.header_fields.append(["BORDER4" , 9999999, 8, 'd', 1.0 ]) #20 + + # DEFINE FEATURE FIELDS + self.feature_fields=[] + ########################## Description ,location,length,type,default value + self.feature_fields.append(["?a(4)" , 9999999, 4, 'i', 0 ]) #0 + self.feature_fields.append(["SHAPE TYPE", 9999999, 1, 'b', 10 ]) #1 + #SHAPE TYPE NUMBERS + #0, circle + #1 square + #2 Square Rounded Corners + #3 Square Bevel Corners + #4 triangle + #5 diamond + #8 Star + #10 line + #12 PNG + #22 line text + self.feature_fields.append(["AC Density", 9999999, 4, 'z', [75,0,0,0] ]) #2 [ACdensity,color 0 or 8, ?,?] + self.feature_fields.append(["?b(1)" , 9999999, 1, 'z', [134] ]) #3 #solid fill 134 + self.feature_fields.append(["AC cnt" , 9999999, 1, 'z', [2] ]) #4 This needs to be 2 for lines + self.feature_fields.append(["?c(1)" , 9999999, 1, 'z', [0] ]) #5 + self.feature_fields.append(["?d(1)" , 9999999, 1, 'z', [6] ]) #6 + self.feature_fields.append(["?e(3)" , 9999999, 3, 'z', [0 ,0 ,0 ] ]) #7 + self.feature_fields.append(["?f(4)" , 9999999, 4, 'i', 16 ]) #8 + self.feature_fields.append(["ZOOM" , 9999999, 8, 'd', 96 ]) #9 + self.feature_fields.append(["?g(8)" , 9999999, 8, 'd', 0 ]) #10 + self.feature_fields.append(["?h(8)" , 9999999, 8, 'd', 0 ]) #11 + self.feature_fields.append(["?i(8)" , 9999999, 8, 'd', 0 ]) #12 + self.feature_fields.append(["?j(8)" , 9999999, 8, 'd', 0 ]) #13 + self.feature_fields.append(["X cent Loc", 9999999, 8, 'd', 0 ]) #14 To the Right of the center of the laser area + self.feature_fields.append(["Y cent Loc", 9999999, 8, 'd', 0 ]) #15 Down from the center of the laser area + self.feature_fields.append(["Width" , 9999999, 8, 'd', 0 ]) #16 + self.feature_fields.append(["Height" , 9999999, 8, 'd', 0 ]) #17 + self.feature_fields.append(["Pen Width" , 9999999, 8, 'd', 0.025 ]) #18 + self.feature_fields.append(["AC Line" , 9999999, 8, 'd', 0.127 ]) #19 + self.feature_fields.append(["Rot(deg)" , 9999999, 8, 'd', 0 ]) #20 + self.feature_fields.append(["Corner Rad", 9999999, 8, 'd', 0 ]) #21 + self.feature_fields.append(["?k(8)" , 9999999, 8, 'd', 0 ]) #22 + self.feature_fields.append(["?l(8)" , 9999999, 8, 'd', 0 ]) #23 + self.feature_fields.append(["?m(8)" , 9999999, 8, 'd', 0 ]) #24 + self.feature_fields.append(["?n(4)" , 9999999, 4, 'i', 4 ]) #25 + self.feature_fields.append(["?o(4)" , 9999999, 4, 'i', 0 ]) #26 + self.feature_fields.append(["?p(4)" , 9999999, 4, 'z', [0 ,0 ,0 ,0 ] ]) #27 + self.feature_fields.append(["?q(4)" , 9999999, 4, 'z', [255,255,255,0 ] ]) #28 + self.feature_fields.append(["?r(4)" , 9999999, 4, 'z', [0 ,0 ,0 ,0 ] ]) #29 + self.feature_fields.append(["string_len", 9999999, 4, 'i', 0 ]) #30 + self.feature_fields.append(["filename" , 9999999, 4, 'x', "\000" ]) #31 + self.feature_fields.append(["?u(4)" , 9999999, 4, 'z', [0 ,0 ,0 ,0 ] ]) #32 + self.feature_fields.append(["ACtexture1", 9999999, 4, 'z', [255,255,255,255] ]) #33 [0 ,0 ,0 ,0 ] + self.feature_fields.append(["ACtexture2", 9999999, 4, 'z', [0 ,0 ,0 ,0 ] ]) #34 + self.feature_fields.append(["?v(4)" , 9999999, 4, 'z', [0 ,0 ,0 ,0 ] ]) #35 + self.feature_fields.append(["?w(4)" , 9999999, 4, 'z', [2 ,0 ,0 ,0 ] ]) #36 + self.feature_fields.append(["data length", 9999999, 4, 'i', 2 ]) #37 needs to be 2 for line + + self.feature_appendix = [] + for i in range(13): + self.feature_appendix.append([]) + ## Appendix values for Line + self.feature_appendix[10].append(["line X1", 9999999, 4, 'i', -10000 ]) #position as 1000*value + self.feature_appendix[10].append(["line Y1", 9999999, 4, 'i', -10000 ]) #position as 1000*value + self.feature_appendix[10].append(["line X2", 9999999, 4, 'i', 10000 ]) #position as 1000*value + self.feature_appendix[10].append(["line Y2", 9999999, 4, 'i', 10000 ]) #position as 1000*value + self.feature_appendix[10].append(["lineEND", 9999999, 4, 'i', 0 ]) + ##Appendix values for PNG + self.feature_appendix[12].append(["PNGdata", 9999999, 0, 't', "" ]) + self.feature_appendix[12].append(["PNGend" , 9999999, 8, 'z', [0,0,0,0,0,0,0,0] ]) + + + def lyz_read(self,loc,len,type,bf): + #try: + if 1==1: + #bf.seek(loc) + if type=='t': + data = bf.read(len) + elif type == 'z': + data = [] + for i in range(len): + data.append(ord(bf.read(1))) + elif type == 'x': + data = "" + for i in range(0,len,4): + data_temp = bf.read(4) + data = data + data_temp[0] + else: + data = struct.unpack(type, bf.read(len))[0] + return data + #except: + # print("Error Reading data (lyz_read)") + # return [] + + + def lyz_write(self,data,type,bf): + #print("type,data: ",type,data) + if type=='t': + #print("data:",data) + #bf.write(data) + try: + bf.write(data) + except: + bf.write(data.encode()) + elif type == 'z': + for i in range(len(data)): + #bf.write(chr(data[i])) + bf.write(struct.pack('B',data[i])) + elif type == 'x': + for char in data: + bf.write(char.encode()) + bf.write(struct.pack('B',0)) + bf.write(struct.pack('B',0)) + bf.write(struct.pack('B',0)) + else: + bf.write(struct.pack(type,data)) + + def read_header(self,f): + self.header_data=[] + for line in self.header_fields: + #pos = line[1] + len = line[2] + typ = line[3] + self.header_data.append(self.lyz_read(None,len,typ,f)) + + + def read_feature(self,f): + feature_data=[] + for i in range(len(self.feature_fields)): + length = self.feature_fields[i][2] + typ = self.feature_fields[i][3] + + if i==31 and feature_data[1]==12: + string_length = feature_data[-1]*4 + feature_data.append(self.lyz_read(None,string_length,typ,f)) + else: + feature_data.append(self.lyz_read(None,length,typ,f)) + + #if i==30 and feature_data[1]==12: + # self.feature_fields[i+1][2] = feature_data[-1]*4 + + + feat_type = feature_data[1] + if feat_type==10 or feat_type==12: + for i in range(len(self.feature_appendix[feat_type])): + if feat_type==12 and i==0: + length = feature_data[-1] + else: + length = self.feature_appendix[feat_type][i][2] + typ = self.feature_appendix[feat_type][i][3] + feature_data.append(self.lyz_read(None,length,typ,f)) + return feature_data + + + def setup_new_header(self): + self.header_data=[] + for line in self.header_fields: + data = line[4] + self.header_data.append(data) + + + def add_line(self,x1,y1,x2,y2,Pen_Width=.025): + feature_data=[] + for line in self.feature_fields: + data = line[4] + feature_data.append(data) + feature_data.append(int(x1*1000.0)) + feature_data.append(int(y1*1000.0)) + feature_data.append(int(x2*1000.0)) + feature_data.append(int(y2*1000.0)) + feature_data.append(0) + feature_data[1]=10 #set type to line + feature_data[4]=[2] #Not sure what this is for lines but it needs to be 2 + feature_data[18]=Pen_Width + + self.header_data[2]=self.header_data[2]+1 + self.feature_list.append(feature_data) + + def add_png(self,PNG_DATA,Xsixe,Ysize): + filename="filename" + feature_data=[] + for line in self.feature_fields: + data = line[4] + feature_data.append(data) + feature_data.append(PNG_DATA) + feature_data.append([0,0,0,0,0,0,0,0]) + feature_data[1] = 12 # set type to PNG + feature_data[3] = [150] + feature_data[2] = [75, 4, 0, 144] + feature_data[4] = [0] # Number of Anti-Counterfeit lines + feature_data[6] = [12] # if this is not set to [12] the image does not get passed to the engrave window + feature_data[16] = Xsixe # set PNG width + feature_data[17] = Ysize # set PNG height + feature_data[18] = 1.0 + feature_data[26] = 16777215 + feature_data[30]= len(filename) # set filename length + feature_data[31]= filename # set filename + feature_data[33]=[0 ,0 ,0 ,0 ] + feature_data[34]=[255,255,255,255] + feature_data[36]=[226, 29, 5, 175] + feature_data[37]= len(PNG_DATA) # set PNG data length + + self.header_data[2]=self.header_data[2]+1 + self.feature_list.append(feature_data) + + def set_size(self,Xsize,Ysize): + self.header_data[15]=Xsize + self.header_data[16]=Ysize + + def set_margin(self,margin): + self.header_data[17]=margin/2 + self.header_data[18]=margin/2 + self.header_data[19]=margin/2 + self.header_data[20]=margin/2 + + def find_PNG(self,f): + self.PNGstart = -1 + self.PNGend = -1 + f.seek(0) + loc=0 + flag = True + while flag: + byte=f.read(1) + if byte=="": + flag=False + if byte =="P": + if byte =="N": + if byte =="G": + self.PNGstart = f.tell()-4 + if byte =="E": + if byte =="N": + if byte =="D": + self.PNGend = f.tell()+4 + flag = False + f.seek(0) + + + def read_file(self, file_name): + with open(file_name, "rb") as f: + self.find_PNG(f) + PNGlen = self.PNGend-self.PNGstart + self.png_message = "PNGlen: ",PNGlen + self.read_header(f) + for i in range(self.header_data[2]): + data = self.read_feature(f) + self.feature_list.append(data) + + self.left_over = f.read( self.header_data[1]-4-f.tell() ) + + self.EOF = "" + byte = f.read(1) + while byte!="": + self.EOF=self.EOF+byte + byte = f.read(1) + #print(possible_values(200+217,348-200,'d',f)) + + + def write_file(self, file_name): + with open(file_name, "wb") as f: + for i in range(len(self.header_fields)): + typ = self.header_fields[i][3] + data = self.header_data[i] + self.lyz_write(data,typ,f) + + for j in range(len(self.feature_list)): + for i in range(len(self.feature_fields)): + typ = self.feature_fields[i][3] + data = self.feature_list[j][i] + #print(j,i," typ,data: ",typ,data) + self.lyz_write(data,typ,f) + + feat_type=self.feature_list[j][1] + if feat_type==10 or feat_type==12: + appendix_data=[] + for i in range(len(self.feature_appendix[feat_type])): + typ = self.feature_appendix[feat_type][i][3] + data = self.feature_list[j][i+len(self.feature_fields)] #appendix_data + #print(j,i," typ,data: "typ,data) + self.lyz_write(data,typ,f) + + f.write("@EOF".encode()) + length=f.tell() + f.seek(4) + f.write(struct.pack('i',length)) + + + def print_header(self): + print("\nHEADER DATA:") + print("--------------------") + for i in range(len(self.header_data)): + print("%11s : " %(self.header_fields[i][0]),self.header_data[i]) + + + def print_features(self): + for i in range(len(self.feature_list)): + print("\nFEATURE #%d:" %(i+1)) + print("--------------------") + feature = self.feature_list[i] + for j in range(len(self.feature_fields)): + try: + print("%11s : " %(self.feature_fields[j][0]),feature[j]) + except: + print("error") + feat_type = feature[1] + if feat_type==10 or feat_type==12: + print("---LINE COORDS---") + for j in range(len(self.feature_appendix[feat_type])): + jj = j+len(self.feature_fields) + if feat_type==12 and jj==38: + print("%11s : " %(self.feature_appendix[feat_type][j][0]),"....") + else: + print("%11s : " %(self.feature_appendix[feat_type][j][0]),feature[jj]) + print("--------------------") + + + +if __name__ == "__main__": + ############################### + try: + file_name = sys.argv[1] + print("input: ",file_name) + except: + file_name = "" + ############################### + try: + file_out = sys.argv[2] + print("output: ",file_name) + except: + file_out = "" + ############################### + + if file_name=="test": + LYZ=LYZ_CLASS() + LYZ.setup_new_header() + #image_file = "squigles.png" + #image_file = "drawing_mod.png" + image_file = "temp.png" + with open(image_file, 'rb') as f: + PNG_DATA = f.read() + LYZ.add_png(PNG_DATA,20,20) + + LYZ.add_line(5,5,-10,-10,0.025) + #LYZ.print_header() + #LYZ.print_features() + LYZ.write_file("test.lyz") + else: + if file_name!="": + LYZ=LYZ_CLASS() + LYZ.read_file(file_name) + LYZ.print_header() + LYZ.print_features() + print("LEFTOVER :", LYZ.left_over) + print("EOF :",LYZ.EOF) + + if file_out!="": + LYZ.write_file(file_out) \ No newline at end of file diff --git a/extensions/fablabchemnitz/lyz_export/lyz_simplepath.py b/extensions/fablabchemnitz/lyz_export/lyz_simplepath.py new file mode 100644 index 00000000..bce11d21 --- /dev/null +++ b/extensions/fablabchemnitz/lyz_export/lyz_simplepath.py @@ -0,0 +1,209 @@ +#!/usr/bin/env python3 +""" +simplepath.py +functions for digesting paths into a simple list structure + +Copyright (C) 2005 Aaron Spike, aaron@ekips.org + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +""" +import re, math + +def lexPath(d): + """ + returns and iterator that breaks path data + identifies command and parameter tokens + """ + offset = 0 + length = len(d) + delim = re.compile(r'[ \t\r\n,]+') + command = re.compile(r'[MLHVCSQTAZmlhvcsqtaz]') + parameter = re.compile(r'(([-+]?[0-9]+(\.[0-9]*)?|[-+]?\.[0-9]+)([eE][-+]?[0-9]+)?)') + while 1: + m = delim.match(d, offset) + if m: + offset = m.end() + if offset >= length: + break + m = command.match(d, offset) + if m: + yield [d[offset:m.end()], True] + offset = m.end() + continue + m = parameter.match(d, offset) + if m: + yield [d[offset:m.end()], False] + offset = m.end() + continue + #TODO: create new exception + raise Exception('Invalid path data!') +''' +pathdefs = {commandfamily: + [ + implicitnext, + #params, + [casts,cast,cast], + [coord type,x,y,0] + ]} +''' +pathdefs = { + 'M':['L', 2, [float, float], ['x','y']], + 'L':['L', 2, [float, float], ['x','y']], + 'H':['H', 1, [float], ['x']], + 'V':['V', 1, [float], ['y']], + 'C':['C', 6, [float, float, float, float, float, float], ['x','y','x','y','x','y']], + 'S':['S', 4, [float, float, float, float], ['x','y','x','y']], + 'Q':['Q', 4, [float, float, float, float], ['x','y','x','y']], + 'T':['T', 2, [float, float], ['x','y']], + 'A':['A', 7, [float, float, float, int, int, float, float], ['r','r','a',0,'s','x','y']], + 'Z':['L', 0, [], []] + } +def parsePath(d): + """ + Parse SVG path and return an array of segments. + Removes all shorthand notation. + Converts coordinates to absolute. + """ + retval = [] + lexer = lexPath(d) + + pen = (0.0,0.0) + subPathStart = pen + lastControl = pen + lastCommand = '' + + while 1: + try: + token, isCommand = next(lexer) + except StopIteration: + break + params = [] + needParam = True + if isCommand: + if not lastCommand and token.upper() != 'M': + raise Exception('Invalid path, must begin with moveto.') + else: + command = token + else: + #command was omited + #use last command's implicit next command + needParam = False + if lastCommand: + if lastCommand.isupper(): + command = pathdefs[lastCommand][0] + else: + command = pathdefs[lastCommand.upper()][0].lower() + else: + raise Exception('Invalid path, no initial command.') + numParams = pathdefs[command.upper()][1] + while numParams > 0: + if needParam: + try: + token, isCommand = next(lexer) + if isCommand: + raise Exception('Invalid number of parameters') + except StopIteration: + raise Exception('Unexpected end of path') + cast = pathdefs[command.upper()][2][-numParams] + param = cast(token) + if command.islower(): + if pathdefs[command.upper()][3][-numParams]=='x': + param += pen[0] + elif pathdefs[command.upper()][3][-numParams]=='y': + param += pen[1] + params.append(param) + needParam = True + numParams -= 1 + #segment is now absolute so + outputCommand = command.upper() + + #Flesh out shortcut notation + if outputCommand in ('H','V'): + if outputCommand == 'H': + params.append(pen[1]) + if outputCommand == 'V': + params.insert(0,pen[0]) + outputCommand = 'L' + if outputCommand in ('S','T'): + params.insert(0,pen[1]+(pen[1]-lastControl[1])) + params.insert(0,pen[0]+(pen[0]-lastControl[0])) + if outputCommand == 'S': + outputCommand = 'C' + if outputCommand == 'T': + outputCommand = 'Q' + + #current values become "last" values + if outputCommand == 'M': + subPathStart = tuple(params[0:2]) + pen = subPathStart + if outputCommand == 'Z': + pen = subPathStart + else: + pen = tuple(params[-2:]) + + if outputCommand in ('Q','C'): + lastControl = tuple(params[-4:-2]) + else: + lastControl = pen + lastCommand = command + + retval.append([outputCommand,params]) + return retval + +def formatPath(a): + """Format SVG path data from an array""" + return "".join([cmd + " ".join([str(p) for p in params]) for cmd, params in a]) + +def translatePath(p, x, y): + for cmd,params in p: + defs = pathdefs[cmd] + for i in range(defs[1]): + if defs[3][i] == 'x': + params[i] += x + elif defs[3][i] == 'y': + params[i] += y + +def scalePath(p, x, y): + for cmd,params in p: + defs = pathdefs[cmd] + for i in range(defs[1]): + if defs[3][i] == 'x': + params[i] *= x + elif defs[3][i] == 'y': + params[i] *= y + elif defs[3][i] == 'r': # radius parameter + params[i] *= x + elif defs[3][i] == 's': # sweep-flag parameter + if x*y < 0: + params[i] = 1 - params[i] + elif defs[3][i] == 'a': # x-axis-rotation angle + if y < 0: + params[i] = - params[i] + +def rotatePath(p, a, cx = 0, cy = 0): + if a == 0: + return p + for cmd,params in p: + defs = pathdefs[cmd] + for i in range(defs[1]): + if defs[3][i] == 'x': + x = params[i] - cx + y = params[i + 1] - cy + r = math.sqrt((x**2) + (y**2)) + if r != 0: + theta = math.atan2(y, x) + a + params[i] = (r * math.cos(theta)) + cx + params[i + 1] = (r * math.sin(theta)) + cy \ No newline at end of file diff --git a/extensions/fablabchemnitz/lyz_export/lyz_simplestyle.py b/extensions/fablabchemnitz/lyz_export/lyz_simplestyle.py new file mode 100644 index 00000000..f6485451 --- /dev/null +++ b/extensions/fablabchemnitz/lyz_export/lyz_simplestyle.py @@ -0,0 +1,242 @@ +#!/usr/bin/env python3 +""" +simplestyle.py +Two simple functions for working with inline css +and some color handling on top. + +Copyright (C) 2005 Aaron Spike, aaron@ekips.org + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +""" + +svgcolors={ + 'aliceblue':'#f0f8ff', + 'antiquewhite':'#faebd7', + 'aqua':'#00ffff', + 'aquamarine':'#7fffd4', + 'azure':'#f0ffff', + 'beige':'#f5f5dc', + 'bisque':'#ffe4c4', + 'black':'#000000', + 'blanchedalmond':'#ffebcd', + 'blue':'#0000ff', + 'blueviolet':'#8a2be2', + 'brown':'#a52a2a', + 'burlywood':'#deb887', + 'cadetblue':'#5f9ea0', + 'chartreuse':'#7fff00', + 'chocolate':'#d2691e', + 'coral':'#ff7f50', + 'cornflowerblue':'#6495ed', + 'cornsilk':'#fff8dc', + 'crimson':'#dc143c', + 'cyan':'#00ffff', + 'darkblue':'#00008b', + 'darkcyan':'#008b8b', + 'darkgoldenrod':'#b8860b', + 'darkgray':'#a9a9a9', + 'darkgreen':'#006400', + 'darkgrey':'#a9a9a9', + 'darkkhaki':'#bdb76b', + 'darkmagenta':'#8b008b', + 'darkolivegreen':'#556b2f', + 'darkorange':'#ff8c00', + 'darkorchid':'#9932cc', + 'darkred':'#8b0000', + 'darksalmon':'#e9967a', + 'darkseagreen':'#8fbc8f', + 'darkslateblue':'#483d8b', + 'darkslategray':'#2f4f4f', + 'darkslategrey':'#2f4f4f', + 'darkturquoise':'#00ced1', + 'darkviolet':'#9400d3', + 'deeppink':'#ff1493', + 'deepskyblue':'#00bfff', + 'dimgray':'#696969', + 'dimgrey':'#696969', + 'dodgerblue':'#1e90ff', + 'firebrick':'#b22222', + 'floralwhite':'#fffaf0', + 'forestgreen':'#228b22', + 'fuchsia':'#ff00ff', + 'gainsboro':'#dcdcdc', + 'ghostwhite':'#f8f8ff', + 'gold':'#ffd700', + 'goldenrod':'#daa520', + 'gray':'#808080', + 'grey':'#808080', + 'green':'#008000', + 'greenyellow':'#adff2f', + 'honeydew':'#f0fff0', + 'hotpink':'#ff69b4', + 'indianred':'#cd5c5c', + 'indigo':'#4b0082', + 'ivory':'#fffff0', + 'khaki':'#f0e68c', + 'lavender':'#e6e6fa', + 'lavenderblush':'#fff0f5', + 'lawngreen':'#7cfc00', + 'lemonchiffon':'#fffacd', + 'lightblue':'#add8e6', + 'lightcoral':'#f08080', + 'lightcyan':'#e0ffff', + 'lightgoldenrodyellow':'#fafad2', + 'lightgray':'#d3d3d3', + 'lightgreen':'#90ee90', + 'lightgrey':'#d3d3d3', + 'lightpink':'#ffb6c1', + 'lightsalmon':'#ffa07a', + 'lightseagreen':'#20b2aa', + 'lightskyblue':'#87cefa', + 'lightslategray':'#778899', + 'lightslategrey':'#778899', + 'lightsteelblue':'#b0c4de', + 'lightyellow':'#ffffe0', + 'lime':'#00ff00', + 'limegreen':'#32cd32', + 'linen':'#faf0e6', + 'magenta':'#ff00ff', + 'maroon':'#800000', + 'mediumaquamarine':'#66cdaa', + 'mediumblue':'#0000cd', + 'mediumorchid':'#ba55d3', + 'mediumpurple':'#9370db', + 'mediumseagreen':'#3cb371', + 'mediumslateblue':'#7b68ee', + 'mediumspringgreen':'#00fa9a', + 'mediumturquoise':'#48d1cc', + 'mediumvioletred':'#c71585', + 'midnightblue':'#191970', + 'mintcream':'#f5fffa', + 'mistyrose':'#ffe4e1', + 'moccasin':'#ffe4b5', + 'navajowhite':'#ffdead', + 'navy':'#000080', + 'oldlace':'#fdf5e6', + 'olive':'#808000', + 'olivedrab':'#6b8e23', + 'orange':'#ffa500', + 'orangered':'#ff4500', + 'orchid':'#da70d6', + 'palegoldenrod':'#eee8aa', + 'palegreen':'#98fb98', + 'paleturquoise':'#afeeee', + 'palevioletred':'#db7093', + 'papayawhip':'#ffefd5', + 'peachpuff':'#ffdab9', + 'peru':'#cd853f', + 'pink':'#ffc0cb', + 'plum':'#dda0dd', + 'powderblue':'#b0e0e6', + 'purple':'#800080', + 'rebeccapurple':'#663399', + 'red':'#ff0000', + 'rosybrown':'#bc8f8f', + 'royalblue':'#4169e1', + 'saddlebrown':'#8b4513', + 'salmon':'#fa8072', + 'sandybrown':'#f4a460', + 'seagreen':'#2e8b57', + 'seashell':'#fff5ee', + 'sienna':'#a0522d', + 'silver':'#c0c0c0', + 'skyblue':'#87ceeb', + 'slateblue':'#6a5acd', + 'slategray':'#708090', + 'slategrey':'#708090', + 'snow':'#fffafa', + 'springgreen':'#00ff7f', + 'steelblue':'#4682b4', + 'tan':'#d2b48c', + 'teal':'#008080', + 'thistle':'#d8bfd8', + 'tomato':'#ff6347', + 'turquoise':'#40e0d0', + 'violet':'#ee82ee', + 'wheat':'#f5deb3', + 'white':'#ffffff', + 'whitesmoke':'#f5f5f5', + 'yellow':'#ffff00', + 'yellowgreen':'#9acd32' +} + +def parseStyle(s): + """Create a dictionary from the value of an inline style attribute""" + if s is None: + return {} + else: + return dict([[x.strip() for x in i.split(":")] for i in s.split(";") if len(i.strip())]) + +def formatStyle(a): + """Format an inline style attribute from a dictionary""" + return ";".join([att+":"+str(val) for att,val in a.iteritems()]) + +def isColor(c): + """Determine if its a color we can use. If not, leave it unchanged.""" + if c.startswith('#') and (len(c)==4 or len(c)==7): + return True + if c.lower() in svgcolors.keys(): + return True + #might be "none" or some undefined color constant or rgb() + #however, rgb() shouldnt occur at this point + return False + +def parseColor(c): + """Creates a rgb int array""" + tmp = svgcolors.get(c.lower()) + if tmp is not None: + c = tmp + elif c.startswith('#') and len(c)==4: + c='#'+c[1:2]+c[1:2]+c[2:3]+c[2:3]+c[3:]+c[3:] + elif c.startswith('rgb('): + # remove the rgb(...) stuff + tmp = c.strip()[4:-1] + numbers = [number.strip() for number in tmp.split(',')] + converted_numbers = [] + if len(numbers) == 3: + for num in numbers: + if num.endswith(r'%'): + converted_numbers.append(int(float(num[0:-1])*255/100)) + else: + converted_numbers.append(int(num)) + return tuple(converted_numbers) + else: + return (0,0,0) + try: + r=int(c[1:3],16) + g=int(c[3:5],16) + b=int(c[5:],16) + except: + # unknown color ... + # Return a default color. Maybe not the best thing to do but probably + # better than raising an exception. + return(0,0,0) + return (r,g,b) + +def formatColoria(a): + """int array to #rrggbb""" + return '#%02x%02x%02x' % (a[0],a[1],a[2]) + +def formatColorfa(a): + """float array to #rrggbb""" + return '#%02x%02x%02x' % (int(round(a[0]*255)),int(round(a[1]*255)),int(round(a[2]*255))) + +def formatColor3i(r,g,b): + """3 ints to #rrggbb""" + return '#%02x%02x%02x' % (r,g,b) + +def formatColor3f(r,g,b): + """3 floats to #rrggbb""" + return '#%02x%02x%02x' % (int(round(r*255)),int(round(g*255)),int(round(b*255))) \ No newline at end of file diff --git a/extensions/fablabchemnitz/lyz_export/lyz_simpletransform.py b/extensions/fablabchemnitz/lyz_export/lyz_simpletransform.py new file mode 100644 index 00000000..70c49ecf --- /dev/null +++ b/extensions/fablabchemnitz/lyz_export/lyz_simpletransform.py @@ -0,0 +1,259 @@ +#!/usr/bin/env python3 +''' +Copyright (C) 2006 Jean-Francois Barraud, barraud@math.univ-lille1.fr +Copyright (C) 2010 Alvin Penner, penner@vaxxine.com + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +barraud@math.univ-lille1.fr + +This code defines several functions to make handling of transform +attribute easier. +''' +import inkex, cubicsuperpath, bezmisc, simplestyle +import copy, math, re + +def parseTransform(transf,mat=[[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]]): + if transf=="" or transf==None: + return(mat) + stransf = transf.strip() + result=re.match("(translate|scale|rotate|skewX|skewY|matrix)\s*\(([^)]*)\)\s*,?",stransf) +#-- translate -- + if result.group(1)=="translate": + args=result.group(2).replace(',',' ').split() + dx=float(args[0]) + if len(args)==1: + dy=0.0 + else: + dy=float(args[1]) + matrix=[[1,0,dx],[0,1,dy]] +#-- scale -- + if result.group(1)=="scale": + args=result.group(2).replace(',',' ').split() + sx=float(args[0]) + if len(args)==1: + sy=sx + else: + sy=float(args[1]) + matrix=[[sx,0,0],[0,sy,0]] +#-- rotate -- + if result.group(1)=="rotate": + args=result.group(2).replace(',',' ').split() + a=float(args[0])*math.pi/180 + if len(args)==1: + cx,cy=(0.0,0.0) + else: + cx,cy=list(map(float,args[1:])) + matrix=[[math.cos(a),-math.sin(a),cx],[math.sin(a),math.cos(a),cy]] + matrix=composeTransform(matrix,[[1,0,-cx],[0,1,-cy]]) +#-- skewX -- + if result.group(1)=="skewX": + a=float(result.group(2))*math.pi/180 + matrix=[[1,math.tan(a),0],[0,1,0]] +#-- skewY -- + if result.group(1)=="skewY": + a=float(result.group(2))*math.pi/180 + matrix=[[1,0,0],[math.tan(a),1,0]] +#-- matrix -- + if result.group(1)=="matrix": + a11,a21,a12,a22,v1,v2=result.group(2).replace(',',' ').split() + matrix=[[float(a11),float(a12),float(v1)], [float(a21),float(a22),float(v2)]] + + matrix=composeTransform(mat,matrix) + if result.end() < len(stransf): + return(parseTransform(stransf[result.end():], matrix)) + else: + return matrix + +def formatTransform(mat): + return ("matrix(%f,%f,%f,%f,%f,%f)" % (mat[0][0], mat[1][0], mat[0][1], mat[1][1], mat[0][2], mat[1][2])) + +def invertTransform(mat): + det = mat[0][0]*mat[1][1] - mat[0][1]*mat[1][0] + if det !=0: # det is 0 only in case of 0 scaling + # invert the rotation/scaling part + a11 = mat[1][1]/det + a12 = -mat[0][1]/det + a21 = -mat[1][0]/det + a22 = mat[0][0]/det + # invert the translational part + a13 = -(a11*mat[0][2] + a12*mat[1][2]) + a23 = -(a21*mat[0][2] + a22*mat[1][2]) + return [[a11,a12,a13],[a21,a22,a23]] + else: + return[[0,0,-mat[0][2]],[0,0,-mat[1][2]]] + +def composeTransform(M1,M2): + a11 = M1[0][0]*M2[0][0] + M1[0][1]*M2[1][0] + a12 = M1[0][0]*M2[0][1] + M1[0][1]*M2[1][1] + a21 = M1[1][0]*M2[0][0] + M1[1][1]*M2[1][0] + a22 = M1[1][0]*M2[0][1] + M1[1][1]*M2[1][1] + + v1 = M1[0][0]*M2[0][2] + M1[0][1]*M2[1][2] + M1[0][2] + v2 = M1[1][0]*M2[0][2] + M1[1][1]*M2[1][2] + M1[1][2] + return [[a11,a12,v1],[a21,a22,v2]] + +def composeParents(node, mat): + trans = node.get('transform') + if trans: + mat = composeTransform(parseTransform(trans), mat) + if node.getparent().tag == inkex.addNS('g','svg'): + mat = composeParents(node.getparent(), mat) + return mat + +def applyTransformToNode(mat,node): + m=parseTransform(node.get("transform")) + newtransf=formatTransform(composeTransform(mat,m)) + node.set("transform", newtransf) + +def applyTransformToPoint(mat,pt): + x = mat[0][0]*pt[0] + mat[0][1]*pt[1] + mat[0][2] + y = mat[1][0]*pt[0] + mat[1][1]*pt[1] + mat[1][2] + pt[0]=x + pt[1]=y + +def applyTransformToPath(mat,path): + for comp in path: + for ctl in comp: + for pt in ctl: + applyTransformToPoint(mat,pt) + +def fuseTransform(node): + if node.get('d')==None: + #FIXME: how do you raise errors? + raise AssertionError('can not fuse "transform" of elements that have no "d" attribute') + t = node.get("transform") + if t == None: + return + m = parseTransform(t) + d = node.get('d') + p = cubicsuperpath.parsePath(d) + applyTransformToPath(m,p) + node.set('d', cubicsuperpath.formatPath(p)) + del node.attrib["transform"] + +#################################################################### +##-- Some functions to compute a rough bbox of a given list of objects. +##-- this should be shipped out in an separate file... + +def boxunion(b1,b2): + if b1 is None: + return b2 + elif b2 is None: + return b1 + else: + return((min(b1[0],b2[0]), max(b1[1],b2[1]), min(b1[2],b2[2]), max(b1[3],b2[3]))) + +def roughBBox(path): + xmin,xMax,ymin,yMax = path[0][0][0][0],path[0][0][0][0],path[0][0][0][1],path[0][0][0][1] + for pathcomp in path: + for ctl in pathcomp: + for pt in ctl: + xmin = min(xmin,pt[0]) + xMax = max(xMax,pt[0]) + ymin = min(ymin,pt[1]) + yMax = max(yMax,pt[1]) + return xmin,xMax,ymin,yMax + +def refinedBBox(path): + xmin,xMax,ymin,yMax = path[0][0][1][0],path[0][0][1][0],path[0][0][1][1],path[0][0][1][1] + for pathcomp in path: + for i in range(1, len(pathcomp)): + cmin, cmax = cubicExtrema(pathcomp[i-1][1][0], pathcomp[i-1][2][0], pathcomp[i][0][0], pathcomp[i][1][0]) + xmin = min(xmin, cmin) + xMax = max(xMax, cmax) + cmin, cmax = cubicExtrema(pathcomp[i-1][1][1], pathcomp[i-1][2][1], pathcomp[i][0][1], pathcomp[i][1][1]) + ymin = min(ymin, cmin) + yMax = max(yMax, cmax) + return xmin,xMax,ymin,yMax + +def cubicExtrema(y0, y1, y2, y3): + cmin = min(y0, y3) + cmax = max(y0, y3) + d1 = y1 - y0 + d2 = y2 - y1 + d3 = y3 - y2 + if (d1 - 2*d2 + d3): + if (d2*d2 > d1*d3): + t = (d1 - d2 + math.sqrt(d2*d2 - d1*d3))/(d1 - 2*d2 + d3) + if (t > 0) and (t < 1): + y = y0*(1-t)*(1-t)*(1-t) + 3*y1*t*(1-t)*(1-t) + 3*y2*t*t*(1-t) + y3*t*t*t + cmin = min(cmin, y) + cmax = max(cmax, y) + t = (d1 - d2 - math.sqrt(d2*d2 - d1*d3))/(d1 - 2*d2 + d3) + if (t > 0) and (t < 1): + y = y0*(1-t)*(1-t)*(1-t) + 3*y1*t*(1-t)*(1-t) + 3*y2*t*t*(1-t) + y3*t*t*t + cmin = min(cmin, y) + cmax = max(cmax, y) + elif (d3 - d1): + t = -d1/(d3 - d1) + if (t > 0) and (t < 1): + y = y0*(1-t)*(1-t)*(1-t) + 3*y1*t*(1-t)*(1-t) + 3*y2*t*t*(1-t) + y3*t*t*t + cmin = min(cmin, y) + cmax = max(cmax, y) + return cmin, cmax + +def computeBBox(aList,mat=[[1,0,0],[0,1,0]]): + bbox=None + for node in aList: + m = parseTransform(node.get('transform')) + m = composeTransform(mat,m) + #TODO: text not supported! + d = None + if node.get("d"): + d = node.get('d') + elif node.get('points'): + d = 'M' + node.get('points') + elif node.tag in [ inkex.addNS('rect','svg'), 'rect', inkex.addNS('image','svg'), 'image' ]: + d = 'M' + node.get('x', '0') + ',' + node.get('y', '0') + \ + 'h' + node.get('width') + 'v' + node.get('height') + \ + 'h-' + node.get('width') + elif node.tag in [ inkex.addNS('line','svg'), 'line' ]: + d = 'M' + node.get('x1') + ',' + node.get('y1') + \ + ' ' + node.get('x2') + ',' + node.get('y2') + elif node.tag in [ inkex.addNS('circle','svg'), 'circle', \ + inkex.addNS('ellipse','svg'), 'ellipse' ]: + rx = node.get('r') + if rx is not None: + ry = rx + else: + rx = node.get('rx') + ry = node.get('ry') + cx = float(node.get('cx', '0')) + cy = float(node.get('cy', '0')) + x1 = cx - float(rx) + x2 = cx + float(rx) + d = 'M %f %f ' % (x1, cy) + \ + 'A' + rx + ',' + ry + ' 0 1 0 %f,%f' % (x2, cy) + \ + 'A' + rx + ',' + ry + ' 0 1 0 %f,%f' % (x1, cy) + + if d is not None: + p = cubicsuperpath.parsePath(d) + applyTransformToPath(m,p) + bbox=boxunion(refinedBBox(p),bbox) + + elif node.tag == inkex.addNS('use','svg') or node.tag=='use': + refid=node.get(inkex.addNS('href','xlink')) + path = '//*[@id="%s"]' % refid[1:] + refnode = node.xpath(path) + bbox=boxunion(computeBBox(refnode,m),bbox) + + bbox=boxunion(computeBBox(node,m),bbox) + return bbox + + +def computePointInNode(pt, node, mat=[[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]]): + if node.getparent() is not None: + applyTransformToPoint(invertTransform(composeParents(node, mat)), pt) + return pt \ No newline at end of file diff --git a/extensions/fablabchemnitz/maze/maze.inx b/extensions/fablabchemnitz/maze/maze.inx new file mode 100644 index 00000000..2ece6107 --- /dev/null +++ b/extensions/fablabchemnitz/maze/maze.inx @@ -0,0 +1,34 @@ + + + Maze + fablabchemnitz.de.maze + 20 + 20 + 10.0 + + + + + + + + 1.0 + + + + + + + + + path + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/maze/maze.py b/extensions/fablabchemnitz/maze/maze.py new file mode 100644 index 00000000..0e7b0167 --- /dev/null +++ b/extensions/fablabchemnitz/maze/maze.py @@ -0,0 +1,66 @@ +#! /usr/bin/env python3 + +# this extension is under licence CC-by-sa @ Tiemen DUVILLARD 2020 +# for all questions, comments, bugs: duvillard.tiemen@gmail.com + +import inkex +from lxml import etree +from maze_lib import * + + +def points_to_svgd(p, close=False): + """ convert list of points (x,y) pairs + into a SVG path list + """ + f = p[0] + p = p[1:] + svgd = 'M%.4f,%.4f' % f + for x in p: + svgd += 'L%.4f,%.4f' % x + if close: + svgd += 'z' + return svgd + + +class Maze(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument("--verti", type=int, default=20, help="Height (cells)") + pars.add_argument("--horiz", type=int, default=20, help="Length (cells)") + pars.add_argument("--size", type=float, default=10.0, help="Cell size") + pars.add_argument("--cell_units", default="mm", help="Units") + pars.add_argument("--algo", default=1, help="Algorithm") + pars.add_argument("--width", type=float, default=10.0, help="Line width") + + def effect(self): + # basic style + style = { 'stroke': "black", "fill":"none", 'stroke-width': self.options.width } + # my group of paths + topgroup = etree.SubElement(self.svg.get_current_layer(), 'g' ) + + lc = self.svg.unittouu (str(self.options.size) + self.options.cell_units) + X = self.options.verti + Y = self.options.horiz + + L = Maze(X,Y,self.options.algo) + + for i,j,door in L.verticalDoors(): + if door: + path = points_to_svgd([(lc*(j+1), lc*(i)), (lc*(j+1), lc*(i+1))]) + mypath_attribs = { 'style': str(inkex.Style(style)), 'd': path } + squiggle = etree.SubElement(topgroup, inkex.addNS('path','svg'), mypath_attribs ) + + for i,j,door in L.horizontalDoors(): + if door: + path = points_to_svgd([(lc*(j), lc*(i+1)), (lc*(j+1), lc*(i+1))]) + mypath_attribs = { 'style': str(inkex.Style(style)), 'd': path } + squiggle = etree.SubElement(topgroup, inkex.addNS('path','svg'), mypath_attribs ) + + + path = points_to_svgd([(0,0),(0,lc*Y),(lc*X,lc*Y),(lc*X,0)], True) + mypath_attribs = { 'style': str(inkex.Style(style)), 'd': path } + squiggle = etree.SubElement(topgroup, inkex.addNS('path','svg'), mypath_attribs ) + + +if __name__ == '__main__': + Maze().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/maze/maze_lib.py b/extensions/fablabchemnitz/maze/maze_lib.py new file mode 100644 index 00000000..44c00f01 --- /dev/null +++ b/extensions/fablabchemnitz/maze/maze_lib.py @@ -0,0 +1,536 @@ +#! /usr/bin/env python3 + +# this module is under licence CC-by-sa @ Tiemen DUVILLARD 2020 +# for all questions, comments, bugs: duvillard.tiemen@gmail.com + + +from random import choice, randrange + +# Representation of maze : +# A labyrinth is a set of 2 door panels. +# For a maze 5*5 : +# Theory : ## Example : +# L = [[[a, b, c, d], # vertical doors ## L = [[[1, 1, 1, 1], # vertical doors +# [e, f, g, h], ## [1, 0, 1, 0], +# [i, j, k, l], ## [0, 1, 0, 1], +# [m, n, o, p], ## [0, 0, 0, 0], +# [q, r, s, t]], ## [0, 1, 0, 0]], +# [[A, B, C, D, E], # horizontal doors ## [[0, 0, 0, 0, 0], # horizontal doors +# [F, G, H, I, J], ## [0, 0, 0, 0, 1], +# [K, L, M, N, O], ## [0, 1, 1, 1, 0], +# [P, Q, R, S, T]]] ## [0, 1, 0, 1, 1]]] +# ## +# ==>> ## ==>> +# X 0 1 2 3 4 ## X 0 1 2 3 4 +# Y ┌───┬───┬───┬───┬───┠## Y ┌───┬───┬───┬───┬───┠+# 0 │ ∙ a ∙ b ∙ c ∙ d ∙ │ ## 0 │ ∙ │ ∙ │ ∙ │ ∙ │ ∙ │ +# ├─A─┼─B─┼─C─┼─D─┼─E─┤ ## │ │ │ │ │ │ +# 1 │ ∙ e ∙ f ∙ g ∙ h ∙ │ ## 1 │ ∙ │ ∙ ∙ │ ∙ ∙ │ +# ├─F─┼─G─┼─H─┼─I─┼─J─┤ ## │ │ │ │ ┌───┤ +# 2 │ ∙ i ∙ j ∙ k ∙ l ∙ │ ## 2 │ ∙ ∙ │ ∙ ∙ │ ∙ │ +# ├─K─┼─L─┼─M─┼─N─┼─O─┤ ## │ ╶───┴───────┘ │ +# 3 │ ∙ m ∙ n ∙ o ∙ p ∙ │ ## 3 │ ∙ ∙ ∙ ∙ ∙ │ +# ├─P─┼─Q─┼─R─┼─S─┼─T─┤ ## │ ╶───┠╶───────│ +# 4 │ ∙ q ∙ r ∙ s ∙ t ∙ │ ## 4 │ ∙ ∙ │ ∙ ∙ ∙ │ +# └───┴───┴───┴───┴───┘ ## └───────┴───────────┘ + +def kruskal(x, y): + global ID + ID = 0 + + class case: + """Little class for union-find""" + def __init__(self,x,y): + self.x = x + self.y = y + self.is_repr = True + self.repr = None + global ID + self.ID = ID + ID += 1 + + def represent(self): + if self.is_repr: + return self + else: + L = [self.repr] + while not L[0].is_repr: + L[0] = L[0].repr + return L[0] + + def __eq__(self,other): + return self.represent().ID == other.represent().ID + + def union(self,other): + a = self.represent() + b = other.represent() + if not (a == b): + b.is_repr = False + b.repr = a + + # set of doors + doors = [] + # verticals doors result + verti = [] + # horizontals doors result + horiz = [] + # set of cases + cases = [] + ## initialize vertical doors + for j in range(y): + l = [] + for i in range(x-1): + l.append(1) + doors.append([i,j,'v']) + verti.append(l) + ## initialize horizontal doors + for j in range(y-1): + l = [] + for i in range(x): + l.append(1) + doors.append([i,j,'h']) + horiz.append(l) + + ## initialize cases + for i in range(y): + l = [] + for j in range(x): + l.append(case(x,y)) + cases.append(l) + + cpt = x*y -1 # nb of openings in perfect maze + while cpt > 0: + # I choose a door + idoor = randrange(len(doors)) + dx, dy, dd = doors[idoor] + cx1, cy1 = dx, dy + if dd == 'h' : cx2, cy2 = cx1, cy1+1 + else : cx2, cy2 = cx1+1, cy1 + + C1 = cases[cy1][cx1] + C2 = cases[cy2][cx2] + # if the 2 cases separate by my door are not in same set + if not C1 == C2: + C1.union(C2) + cpt -= 1 + # i modify my result + if dd == "v": verti[dy][dx] = 0 + else: horiz[dy][dx] = 0 + # i delete the door + del doors[idoor] + + return verti,horiz + +def recursive_backtrack(x, y): + # Initialisation of my variables + labyrinthe = [] + for i in range(y): labyrinthe.append([0] * x) + horiz = [] + for i in range(y-1): horiz.append([1] * x) + verti = [] + for i in range(y): verti.append([1] * (x-1)) + + # I choose a random start + X_pos = randrange(x) + Y_pos = randrange(y) + labyrinthe[Y_pos][X_pos] = 1 + historique = [[X_pos,Y_pos]] + + # I explore a tree with deep parcours + while len(historique) != 0: + X = historique[-1][0] + Y = historique[-1][1] + + possibilite = [] + if (Y-1 >= 0) and (labyrinthe[Y-1][X] == 0): possibilite.append(0) + if (X+1 < x) and (labyrinthe[Y][X+1] == 0): possibilite.append(1) + if (Y+1 < y) and (labyrinthe[Y+1][X] == 0): possibilite.append(2) + if (X-1 >= 0) and (labyrinthe[Y][X-1] == 0): possibilite.append(3) + + if len(possibilite) == 0: + del historique[-1] + else: + d = choice(possibilite) + if d == 0: + X1,Y1 = X, Y-1 + horiz[Y-1][X] = 0 + if d == 1: + X1,Y1 = X+1, Y + verti[Y][X] = 0 + if d == 2: + X1,Y1 = X, Y+1 + horiz[Y][X] = 0 + if d == 3: + X1,Y1 = X-1, Y + verti[Y][X-1] = 0 + labyrinthe[Y1][X1] = 1 + historique.append([X1,Y1]) + + return verti, horiz + +# a empty maze +def empty(x, y): + verti = [] + for i in range(y): + verti.append([0] * (x-1)) + + horiz = [] + for i in range(y-1): + horiz.append([0] * x) + return verti, horiz + +# a full maze +def full(x, y): + verti = [] + for i in range(y): + verti.append([1] * (x-1)) + + horiz = [] + for i in range(y-1): + horiz.append([1] * x) + return verti, horiz + + + +class Maze: + """This Class define a Maze object""" + def __init__(self, X=5, Y=5, algorithm="empty"): + """Use : m = Maze(X:int,Y:int, algorithm:string)""" + self.X = X # width + self.Y = Y # height + self.verti = [] # table of vertical doors + self.horiz = [] # table of horizontal doors + + + if algorithm in ("kruskal","K") : + self.verti, self.horiz = kruskal(self.X,self.Y) + self.doors = self.nbDoors() + self.algorithm = "kruskal" + self.perfect = True + + elif algorithm in ("recursive_backtrack","RB") : + self.verti, self.horiz = recursive_backtrack(self.X,self.Y) + self.doors = self.nbDoors() + self.algorithm = "recursive_backtrack" + self.perfect = True + + elif algorithm in ("empty","E") : + self.verti, self.horiz = empty(self.X,self.Y) + self.doors = self.nbDoors() + self.algorithm = "empty" + self.perfect = False + + elif algorithm in ("full","F") : + self.verti, self.horiz = full(self.X,self.Y) + self.doors = self.nbDoors() + self.algorithm = "full" + self.perfect = False + + else : + raise("Algorithm not recognized. Algorithm must be in ['kruskal','recursive_backtrack','empty','full']") + + def __str__(self): + """Return information about maze""" + s = "Size of maze : {}*{}\nGenerate by : {}\nNb of doors : {}\nPerfect : {}" + s = s.format(self.X,self.Y,self.algorithm,self.doors,self.perfect) + return s + + def nbDoors(self): + """Return number of doors in my maze. If maze is perfect, it equals to (self.X-1)*(self.Y-1)""" + S = 0 + for k in self.verti: S += sum(k) + for k in self.horiz: S += sum(k) + return S + + def verticalDoors(self): + """Iterate on vertical doors""" + for i in range(len(self.verti)): + for j in range(len(self.verti[i])): + yield i,j, bool(self.verti[i][j]) + + def horizontalDoors(self): + """Iterate on horizontal doors""" + for i in range(len(self.horiz)): + for j in range(len(self.horiz[i])): + yield i,j, bool(self.horiz[i][j]) + + def canMove(self, x, y, direction) : + """return if i can move in a direction since (x,y) """ + if direction in ["down","d",0] : # down + if y == self.Y-1 :return False + return not self.horiz[y][x] + if direction in ["up","u",2] : # up + if y == 0 : return False + return not self.horiz[y-1][x] + if direction in ["left","l",3] : # left + if x == 0 : return False + return not self.verti[y][x-1] + if direction in ["right","r",1] : # right + if x == self.X-1 : return False + return not self.verti[y][x] + return False + + def move(self, x, y, direction) : + """return new cord after one move in direction""" + if direction in ["down","d",0] : # down + return x,y+1 + if direction in ["up","u",2] : # up + return x,y-1 + if direction in ["left","l",3] : # left + return x-1,y + if direction in ["right","r",1] : # right + return x+1,y + return x,y + + def toSquare(self): + """return another representation of maze, a List of List of case in {0,1} """ + RET = [] + for i in range(self.Y*2+1): + l = [] + for j in range(self.X*2+1): + if i == 0 or i == self.Y*2 or j == 0 or j == self.X*2 : + l.append(1) + else : + if (i%2==0 and j%2==0) : + l.append(1) + elif (i%2==1 and j%2==1): + l.append(0) + elif (i%2==0 and j%2==1): + l.append(self.horiz[(i-1)//2][(j-1)//2]) + elif (i%2==1 and j%2==0): + l.append(self.verti[(i-1)//2][(j-1)//2]) + RET.append(l) + return RET + + def solve(self, xa, ya, xb, yb): + """return a list of direction for link (xa,ya) -> (xb,yb). Null""" + Sol = [] + Pile = [(xa,ya)] + laby = [] + for i in range(self.Y): + laby.append(['new'] * self.X) + + while Pile[-1] != (xb,yb) and len(Pile) != 0: + pos = Pile[-1] + x,y = pos[0],pos[1] + if laby[y][x] == 'new': + possibilite = [] + for d in ['down',"up","left","right"]: + if self.canMove(pos[0],pos[1],d) : + nx,ny = self.move(pos[0],pos[1],d) + if laby[ny][nx] == 'new' : + possibilite.append(d) + + if len(possibilite) == 0: + laby[y][x] = "old" + else : + laby[y][x] = possibilite + elif laby[y][x] == "old": + del Pile[-1] + del Sol[-1] + elif type(laby[y][x]) == list: + if len(laby[y][x]) == 0: + laby[y][x] = "old" + else: + ichoix = randrange(len(laby[y][x])) + choix = laby[y][x][ichoix] + Pile.append(self.move(x,y,choix)) + Sol.append(choix) + del laby[y][x][ichoix] + + return Sol + + def save(self): + """Return a string contain's all information. it can be save in file, print, etc..""" + s = "{};{};{};{};{};{};{}".format(self.X, self.Y, self.doors, self.algorithm, self.perfect, self.verti, self.horiz) + return s + + def load(self, st): + """Load a Maze since a string of format save""" + cont = st.split(";") + self.X = int(cont[0]) + self.Y = int(cont[1]) + self.doors = int(cont[2]) + self.algorithm = cont[3] + self.perfect = bool(cont[4]) + self.verti = cont[5].split("], [") + for i in range(len(self.verti)): + self.verti[i] = self.verti[i].split(',') + for j in range(len(self.verti[i])): + self.verti[i][j] = self.verti[i][j].replace("[","") + self.verti[i][j] = self.verti[i][j].replace("]","") + self.verti[i][j] = self.verti[i][j].replace(" ","") + self.verti[i][j] = int(self.verti[i][j]) + + self.horiz = cont[6].split("], [") + for i in range(len(self.horiz)): + self.horiz[i] = self.horiz[i].split(',') + for j in range(len(self.horiz[i])): + self.horiz[i][j] = self.horiz[i][j].replace("[","") + self.horiz[i][j] = self.horiz[i][j].replace("]","") + self.horiz[i][j] = self.horiz[i][j].replace(" ","") + self.horiz[i][j] = int(self.horiz[i][j]) + + def toTxt(self, centre=False, coord=False, basic= False): + """return a txt representation of maze in ASCII art""" + if type(centre) == bool: + if centre : centre = "*" + else : centre = " " + else: + centre = centre[0] + + if basic : + if coord: + R = " X" + for i in range(self.X): + R += " {} ".format(i%10) + R += "\n" + R += "Y +" + r = "0 |" + else: + R = "+" + r = "|" + for j in range(self.X-1): + if self.verti[0][j]: + R += "---+" + r += " {} |".format(centre) + else: + R += "----" + r += " {} ".format(centre) + R += "---+\n" + r += " {} |\n".format(centre) + R += r + for i in range(self.Y-1): + if coord: + if self.horiz[i][0]: + l1 = " +" + else: + l1 = " |" + l2 = "{} |".format((i+1)%10) + else: + if self.horiz[i][0]: + l1 = "+" + else: + l1 = "|" + l2 = "|" + for j in range(self.X-1): + inter = "+" + if self.horiz[i][j] and self.horiz[i][j+1] and not self.verti[i][j] and not self.verti[i+1][j] : inter = "-" + if not self.horiz[i][j] and not self.horiz[i][j+1] and self.verti[i][j] and self.verti[i+1][j] : inter = "|" + if not self.horiz[i][j] and not self.horiz[i][j+1] and not self.verti[i][j] and not self.verti[i+1][j] : inter = " " + + if self.horiz[i][j]: + l1 += "---"+inter + else: + l1 += " "+inter + + if self.verti[i+1][j]: + l2 += " {} |".format(centre) + else: + l2 += " {} ".format(centre) + if self.horiz[i][-1]: + l1 += "---+" + else: + l1 += " |" + l2 += " {} |".format(centre) + + R += l1 + "\n" + R += l2 + "\n" + if coord: + r = " +" + else: + r = "+" + for j in range(self.X-1): + if self.verti[-1][j]: + r += "---+" + else: + r += "----" + r += "---+" + R += r + return R + + else : + if coord: + R = " X" + for i in range(self.X): + R += " {} ".format(i%10) + R += "\n" + R += "Y ┌" + r = "0 │" + else: + R = "┌" + r = "│" + for j in range(self.X-1): + if self.verti[0][j]: + R += "───┬" + r += " {} │".format(centre) + else: + R += "────" + r += " {} ".format(centre) + R += "───â”\n" + r += " {} │\n".format(centre) + R += r + for i in range(self.Y-1): + if coord: + if self.horiz[i][0]: + l1 = " ├" + else: + l1 = " │" + l2 = "{} │".format((i+1)%10) + else: + if self.horiz[i][0]: + l1 = "├" + else: + l1 = "│" + l2 = "│" + for j in range(self.X-1): + # 4 door + if self.horiz[i][j] and self.horiz[i][j+1] and self.verti[i][j] and self.verti[i+1][j] : inter = "┼" + # 3 door + if self.horiz[i][j] and self.horiz[i][j+1] and self.verti[i][j] and not self.verti[i+1][j] : inter = "â”´" + if self.horiz[i][j] and self.horiz[i][j+1] and not self.verti[i][j] and self.verti[i+1][j] : inter = "┬" + if self.horiz[i][j] and not self.horiz[i][j+1] and self.verti[i][j] and self.verti[i+1][j] : inter = "┤" + if not self.horiz[i][j] and self.horiz[i][j+1] and self.verti[i][j] and self.verti[i+1][j] : inter = "├" + # 2 door + if self.horiz[i][j] and self.horiz[i][j+1] and not self.verti[i][j] and not self.verti[i+1][j] : inter = "─" + if self.horiz[i][j] and not self.horiz[i][j+1] and self.verti[i][j] and not self.verti[i+1][j] : inter = "┘" + if not self.horiz[i][j] and self.horiz[i][j+1] and self.verti[i][j] and not self.verti[i+1][j] : inter = "â””" + if self.horiz[i][j] and not self.horiz[i][j+1] and not self.verti[i][j] and self.verti[i+1][j] : inter = "â”" + if not self.horiz[i][j] and self.horiz[i][j+1] and not self.verti[i][j] and self.verti[i+1][j] : inter = "┌" + if not self.horiz[i][j] and not self.horiz[i][j+1] and self.verti[i][j] and self.verti[i+1][j] : inter = "│" + # 1 door + if not self.horiz[i][j] and not self.horiz[i][j+1] and not self.verti[i][j] and self.verti[i+1][j] : inter = "â•·" + if not self.horiz[i][j] and not self.horiz[i][j+1] and self.verti[i][j] and not self.verti[i+1][j] : inter = "╵" + if not self.horiz[i][j] and self.horiz[i][j+1] and not self.verti[i][j] and not self.verti[i+1][j] : inter = "╶" + if self.horiz[i][j] and not self.horiz[i][j+1] and not self.verti[i][j] and not self.verti[i+1][j] : inter = "â•´" + # 0 door + if not self.horiz[i][j] and not self.horiz[i][j+1] and not self.verti[i][j] and not self.verti[i+1][j] : inter = " " + if self.horiz[i][j]: + l1 += "───"+inter + else: + l1 += " "+inter + + if self.verti[i+1][j]: + l2 += " {} │".format(centre) + else: + l2 += " {} ".format(centre) + if self.horiz[i][-1]: + l1 += "───┤" + else: + l1 += " │" + l2 += " {} │".format(centre) + + R += l1 + "\n" + R += l2 + "\n" + if coord: + r = " â””" + else: + r = "â””" + for j in range(self.X-1): + if self.verti[-1][j]: + r += "───┴" + else: + r += "────" + r += "───┘" + R += r + return R diff --git a/extensions/fablabchemnitz/mirror/mirror.inx b/extensions/fablabchemnitz/mirror/mirror.inx new file mode 100644 index 00000000..50e2d689 --- /dev/null +++ b/extensions/fablabchemnitz/mirror/mirror.inx @@ -0,0 +1,16 @@ + + + Mirror + fablabchemnitz.de.mirror + + path + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/mirror/mirror.py b/extensions/fablabchemnitz/mirror/mirror.py new file mode 100644 index 00000000..c8982a42 --- /dev/null +++ b/extensions/fablabchemnitz/mirror/mirror.py @@ -0,0 +1,77 @@ +#!/usr/bin/env python3 +""" +Derived from the "envelope" extension by Aaron Spike, aaron@ekips.org +By Apex 2011 +New version Jens Kober 2017, 2020 + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +""" +import inkex +from inkex.localization import inkex_gettext as _ + +class Mirror(inkex.EffectExtension): + + def effect(self): + if len(self.options.ids) < 2: + raise inkex.AbortExtension(_("This extension requires two selected objects. \nThe second must be a path, exactly two nodes long.")) + + #trafo is selected second + obj = self.svg.selected[self.options.ids[0]] + trafo = self.svg.selected[self.options.ids[1]] + + if isinstance(trafo, inkex.PathElement): + #distil trafo into two node points + trafoPath = trafo.path.transform(trafo.composed_transform()).to_superpath() + if len(trafoPath[0]) != 2: + raise inkex.AbortExtension(_("The second selected object must be exactly two nodes long.")) + + # origin of mirror line + ox = trafoPath[0][0][1][0] + oy = trafoPath[0][0][1][1] + # vector along mirror line + vx = trafoPath[0][1][1][0] - ox + vy = trafoPath[0][1][1][1] - oy + + # the transformation first translates the origin of the mirror line to [0 0], then rotates the mirror line onto the x-axis, + # reflects everything over the x-axis, undoes the rotation, and finally undoes the translation + + # alpha = atan2(vy, vx); + + # [1 0 ox] [cos(alpha) -sin(alpha) 0] [1 0 0] [cos(-alpha) -sin(-alpha) 0] [1 0 -ox] + # Transformation = [0 1 oy]*[sin(alpha) cos(alpha) 0]*[0 -1 0]*[sin(-alpha) cos(-alpha) 0]*[0 1 -oy] + # [0 0 1] [ 0 0 1] [0 0 1] [ 0 0 1] [0 0 1] + + # after some simplifications (or using your favorite symbolic math software): + + # [(vx^2-vy^2)/(vx^2+vy^2) (2 vx vy)/(vx^2+vy^2) (2 vy (ox vy-oy vx))/(vx^2+vy^2)] + # Transformation = [ (2 vx vy)/(vx^2+vy^2) -(vx^2-vy^2)/(vx^2+vy^2) -(2 vx (ox vy-oy vx))/(vx^2+vy^2)] + # [ 0 0 1] + + denom = vx**2 + vy**2 + a00 = (vx**2 - vy**2) / denom + a01 = (2 * vx * vy) / denom + a02 = 2 * (ox * vy - oy * vx) / denom + mat=[[a00, a01, vy * a02], [a01, -a00, -vx * a02]] + obj.transform = inkex.Transform(mat) * obj.transform + + else: + if isinstance(trafo, inkex.Group): + raise inkex.AbortExtension(_("The second selected object is a group, not a path.\nTry using the procedure Object->Ungroup.")) + else: + raise inkex.AbortExtension(_("The second selected object is not a path.\nTry using the procedure Path->Object to Path.")) + +if __name__ == '__main__': + Mirror().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/move_path_node/move_path_node.inx b/extensions/fablabchemnitz/move_path_node/move_path_node.inx new file mode 100644 index 00000000..a51f371f --- /dev/null +++ b/extensions/fablabchemnitz/move_path_node/move_path_node.inx @@ -0,0 +1,55 @@ + + + Move Path Node + fablabchemnitz.de.move_path_node + + + true + 0 + false + 10px + 10px + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ../000_about_fablabchemnitz.svg + + + + path + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/move_path_node/move_path_node.py b/extensions/fablabchemnitz/move_path_node/move_path_node.py new file mode 100644 index 00000000..80d59d18 --- /dev/null +++ b/extensions/fablabchemnitz/move_path_node/move_path_node.py @@ -0,0 +1,183 @@ +#!/usr/bin/env python3 + +''' +Author: Mario Voigt / FabLab Chemnitz +Mail: mario.voigt@stadtfabrikanten.org +Date: 19.05.2021 +Last patch: 19.05.2021 +License: GNU GPL v3 +''' + +import copy +import inkex +from inkex import Circle, TextElement, Path, PathElement, CubicSuperPath + +class MovePathNode(inkex.EffectExtension): + + def modify(self, element): + raw = element.path.to_arrays() + subpaths, prev = [], 0 + for i in range(len(raw)): # Breaks compound paths into simple paths + if raw[i][0] == 'M' and i != 0: + subpaths.append(raw[prev:i]) + prev = i + subpaths.append(raw[prev:]) + if self.options.debug is True: + if len(subpaths) == 0: + self.msg("{} has no subpaths").format(element.get('id')) + else: + self.msg("{} has {} subpath(s)".format(element.get('id'), len(subpaths))) + + subpathNr = 0 + for path in subpaths: + subpathNr += 1 + newSubpaths = subpaths #we will overwrite them later + + pathIsClosed = False + if path[-1][0] == 'Z' or \ + (path[-1][0] == 'L' and path[0][1] == path[-1][1]) or \ + (path[-1][0] == 'C' and path[0][1] == [path[-1][1][-2], path[-1][1][-1]]) \ + : #if first is last point the path is also closed. The "Z" command is not required + pathIsClosed = True + + if self.options.debug is True: + self.msg("pathIsClosed = " + str(pathIsClosed)) + self.msg("nodes = " + str(len(path))) + + if self.options.closed_only is True and pathIsClosed is False: + if len(subpaths) == 0: + self.msg("{}/subpath {} is not closed! Skipping ...".format(element.get('id'), subpathNr)) + else: + self.msg("{} is not closed! Skipping ...".format(element.get('id'))) + continue #skip this open path + + if len(path) == 2: + continue #skip this open path (special case of straight line segment) + + if path[-1][0] == 'Z': #replace Z with another L command (which moves to the coordinates of the first M command in path) to have better overview + path[-1][0] = 'L' + path[-1][1] = path[0][1] + + #adjust if entered move number is higher than actual node count. We handle as infinite looping + moves = (self.options.movenode) % len(path) + if pathIsClosed is True: #if closed start and end collapse and "duplicate" + moves = (self.options.movenode) % (len(path) - 1) + if self.options.movenode == 0: #special handling for 0 is required + moves = 0 + + if self.options.debug is True: + self.msg("moves to perform = " + str(moves)) + self.msg("root path:") + self.msg(path) + self.msg("-"*25) + + for i in range(moves): + if len(path) > 2: #the path needs at least more than two segments, else we might just get a "pointy path" on an open path + + #we move the first segment to the end of the list + move = path[0] + del path[0] + path.append(move) + oldseg = copy.deepcopy(path[0]) #if we assign like "oldseg = path[0]", it will get overwritten. So we need copy + + if self.options.debug is True: + self.msg("moved path (move no. {}):".format(i+1)) + self.msg(path) + self.msg("-"*25) + + #Now we messed the integrity of the path. It does not begin with 'M' now. But we need an 'M'. + #It now either starts with L or C. H, V, Z cannot occure here. + if path[0][0] == 'C': #and path[-1][0] == 'M': + #self.msg("C to M") + path[0][1] = [path[0][1][-2], path[0][1][-1]] + elif path[0][0] == 'L': #and path[-1][0] == 'M': + #self.msg("L to M") + path[0][1] = [path[0][1][0], path[0][1][1]] + #else: + # self.msg("no idea") + path[0][0] = 'M' #we really need M. Does not matter if 'L' or 'C'. + + if pathIsClosed is True: + if path[-1][0] == 'M' and len(oldseg[1]) == 2: #data of an 'L' command + path[-1][0] = 'L' + path[-1][1] = path[0][1] + elif path[-1][0] == 'M' and len(oldseg[1]) > 2: #data of an 'C' command + path[-1][0] = 'C' + path[-1][1] = oldseg[1] + else: + if path[-1][0] == 'M': #if open path we just drop the dangling 'M' command completely + del path[-1] + + if self.options.debug is True: + self.msg("final path:") + self.msg(path) + self.msg("-"*25) + + newSubpaths[subpathNr - 1] = path + else: + inkex.utils.debug("More moves entered than possible to apply. Path result would be a point, not a line") + #return + + composedPath = inkex.Path() + for newSubpath in newSubpaths: + composedPath.extend(newSubpath) + + if self.options.debug is True: + self.msg("Composed path = " + str(composedPath)) + + element.path = composedPath + + def visualizeFirstTwo(self, element): + """Add a dot label for this path element""" + group = element.getparent().add(inkex.Group(id="visualize-group-" + element.get('id'))) + dot_group = group.add(inkex.Group(id="dot-group-" + element.get('id'))) + num_group = group.add(inkex.Group(id="num-group-" + element.get('id'))) + group.transform = element.transform + radius = self.svg.unittouu(self.options.dotsize) / 2 + + count = 0 + for step, (x, y) in enumerate(element.path.end_points): + count += 1 + circle = Circle(cx=str(x), cy=str(y), r=str(radius), id="circle-" + element.get('id') + "-" + str(count)) + circle.style = inkex.Style({'stroke': 'none', 'fill': '#000'}) + + text = TextElement(x=str(x + radius), y=str(y - radius), id="text-" + element.get('id') + "-" + str(count)) + text.text = str(count) #we start with #1 + text.style = inkex.Style({'font-size': self.svg.unittouu(self.options.fontsize), 'fill-opacity': '1.0', 'stroke': 'none', + 'font-weight': 'normal', 'font-style': 'normal', 'fill': '#999'}) + + dot_group.append(circle) + num_group.append(text) + + if count > 1: #we only display first two points to see the position of the first node and the path direction + break + + def add_arguments(self, pars): + pars.add_argument("--tab") + pars.add_argument("--closed_only", type=inkex.Boolean, default=False, help="If disabled we also apply on open (sub)path. Warning: This REMOVES segments!") + pars.add_argument("--movenode", type=int, default=0, help="Move starting node n nodes further") + pars.add_argument('--visualize_result', type=inkex.Boolean, default=False, help="If enabled each node gets a number and a dot") + pars.add_argument("--dotsize", default="10px", help="Size of the dots on the path nodes") + pars.add_argument("--fontsize", default="20px", help="Size of node labels") + pars.add_argument("--debug", type=inkex.Boolean, default=False, help="Debug Output") + + def effect(self): + if len(self.svg.selected) > 0: + elements = self.svg.selection.filter(PathElement).values() + if len(elements) > 0: + for element in elements: + #move starting element / change direction + self.modify(element) + + #finally apply dots to visualize the result + if self.options.visualize_result is True: + self.visualizeFirstTwo(element) + else: + inkex.errormsg('Selection seems not to contain path elements. Maybe you have selected a group instead?') + return + else: + inkex.errormsg('Please select some objects first.') + return + +if __name__ == '__main__': + MovePathNode().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/mutual_cut_line/mutual_cut_line.inx b/extensions/fablabchemnitz/mutual_cut_line/mutual_cut_line.inx new file mode 100644 index 00000000..b8fad4cf --- /dev/null +++ b/extensions/fablabchemnitz/mutual_cut_line/mutual_cut_line.inx @@ -0,0 +1,16 @@ + + + Mutual Cut Line + fablabchemnitz.de.mutual_cut_line + + path + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/mutual_cut_line/mutual_cut_line.py b/extensions/fablabchemnitz/mutual_cut_line/mutual_cut_line.py new file mode 100644 index 00000000..faba348f --- /dev/null +++ b/extensions/fablabchemnitz/mutual_cut_line/mutual_cut_line.py @@ -0,0 +1,91 @@ +#!/usr/bin/env python3 +''' +Mutual Cut Line +This Inkscape extension will take 2 selected line and cut them both +at their intersection point. +Only the first segment of a multi-segment line will be used. +''' +import inkex +from inkex.paths import Path +import simplepath +from math import * +from lxml import etree + +def error(message): + inkex.errormsg(message) + exit() + +class MutualCutLine(inkex.EffectExtension): + + def effect(self): + if len(self.svg.selected.items()) != 2: + error('Please select 2 lines before running this effect.') + + line = [] + numPaths = 0 + for id, path in self.svg.selected.items(): + if path.tag == inkex.addNS('path','svg'): + numPaths += 1 + style = path.get('style') + np = [style] + p = Path(path.get('d')).to_arrays() + for sp in p: + np.append([sp[1][0], sp[1][1]]) + line.append(np) + path.getparent().remove(path) #after cutting we remove the original lines + + if numPaths != 2: + error('Please select 2 lines before running this effect.') + + # Extract style and points for the first 2 line segments. + astyle = line[0][0] + bstyle = line[1][0] + a1x = line[0][1][0] + a1y = line[0][1][1] + a2x = line[0][2][0] + a2y = line[0][2][1] + b1x = line[1][1][0] + b1y = line[1][1][1] + b2x = line[1][2][0] + b2y = line[1][2][1] + + # Calculate intersection point. + adx = a1x - a2x + ady = a1y - a2y + bdx = b1x - b2x + bdy = b1y - b2y + + denom = adx * bdy - ady * bdx + numa = (a1x * a2y - a1y * a2x) + numb = (b1x * b2y - b1y * b2x) + x_num = numa * bdx - numb * adx + y_num = numa * bdy - numb * ady + + if denom == 0: + error('Lines don\'t intersect in a single point.') + x = x_num / denom + y = y_num / denom + + # TODO: Verify that the 2 segments intersect. + # Current code will connect outside the line segments. + + # Create 4 line segments from the intersection point. + svg_path = inkex.addNS('path','svg') + sega1 = etree.SubElement(self.svg.get_current_layer(), svg_path) + sega1.set('d', 'M '+str(x)+','+str(y)+' L '+str(a1x)+','+str(a1y)) + sega1.set('style', astyle) + + sega2 = etree.SubElement(self.svg.get_current_layer(), svg_path) + sega2.set('d', 'M '+str(x)+','+str(y)+' L '+str(a2x)+','+str(a2y)) + sega2.set('style', astyle) + + segb1 = etree.SubElement(self.svg.get_current_layer(), svg_path) + segb1.set('d', 'M '+str(x)+','+str(y)+' L '+str(b1x)+','+str(b1y)) + segb1.set('style', bstyle) + + segb2 = etree.SubElement(self.svg.get_current_layer(), svg_path) + segb2.set('d', 'M '+str(x)+','+str(y)+' L '+str(b2x)+','+str(b2y)) + segb2.set('style', bstyle) + +if __name__ == '__main__': + MutualCutLine().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/netting/netting.inx b/extensions/fablabchemnitz/netting/netting.inx new file mode 100644 index 00000000..42616540 --- /dev/null +++ b/extensions/fablabchemnitz/netting/netting.inx @@ -0,0 +1,52 @@ + + + Netting + fablabchemnitz.de.netting + + + + + + + 0 + 1.000 + + + + + + + + + + + + + + + + + + + + + + + + + + ../000_about_fablabchemnitz.svg + + + + path + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/netting/netting.py b/extensions/fablabchemnitz/netting/netting.py new file mode 100644 index 00000000..79ada48c --- /dev/null +++ b/extensions/fablabchemnitz/netting/netting.py @@ -0,0 +1,106 @@ +#!/usr/bin/env python3 +''' +netting.py +Sunabe kazumichi 2010/3/4 +http://dp48069596.lolipop.jp/ + + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +this program nets in the line. +''' +import random +import math +import inkex +import cubicsuperpath +from lxml import etree +from inkex.paths import Path, CubicSuperPath + +class Netting(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument("--tab") + pars.add_argument("--netting_type", default="allwithall", help="Netting type") + pars.add_argument("--node_shifting", type=int, default=0, help="Does not apply for 'all with all' type.") + pars.add_argument("--stroke_width", type=float, default=1.0, help="stroke width") + + def effect(self): + #static + style = {'stroke-width': str(self.options.stroke_width) +'px', 'stroke': '#000000', 'fill': 'none'} + old_segments = [] + new_segments = [] + + #get complete path data from all selected paths + for element in self.svg.selected.filter(inkex.PathElement).values(): + d = element.get('d') + p = CubicSuperPath(Path(d)) + for subpath in p: + for i, csp in enumerate(subpath): + old_segments.append("%f,%f" % (csp[1][0], csp[1][1])) + + if self.options.netting_type == "allwithall": + allnet_group = inkex.Group(id="g" + element.get('id')) + pathsCollection = [] + self.svg.get_current_layer().append(allnet_group) + for segment1 in range(0, len(old_segments)): + for segment2 in range(1, len(old_segments)): + if old_segments[segment1] != old_segments[segment2]: + pathVariant1 = Path('M' + old_segments[segment1] + ' L' + old_segments[segment2]) + pathVariant2 = Path('M' + old_segments[segment2] + ' L' + old_segments[segment1]) #the reversed one + if pathVariant1 not in pathsCollection and pathVariant2 not in pathsCollection: + pathsCollection.append(pathVariant1) + + for p in pathsCollection: + allnet_path = inkex.PathElement() + allnet_path.style = style + allnet_path.path = p + allnet_group.append(allnet_path) + + elif self.options.netting_type == "alternatingly": + #build up the net path between the path points alternatingly + first = True + while len(old_segments) > 0: + if first is True: + new_segments.append('M') + first = False + else: + new_segments.append('L') + new_segments.append(old_segments.pop(0)) + if len(old_segments) > 0: + new_segments.append('L') + new_segments.append(old_segments.pop()) + + shift = self.options.node_shifting + if shift < 0: + counter = -1 + else: + counter = +1 + for i in range(0, self.options.node_shifting, counter): + for i in range(4): + shifting = new_segments[0] + if new_segments[0] == 'M': + shifting = 'L' #overwrite possible 'M' with 'L' + del new_segments[0] + new_segments.append(shifting) + new_segments[0] = 'M' #let's begin the path with 'M' again + + #create the path and add it to the current layer + net_path = inkex.PathElement() + net_path.style = style + net_path.path = Path(" ".join(new_segments)) + self.svg.get_current_layer().append(net_path) + +if __name__ == '__main__': + Netting().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/nextgenerator/nextgenerator.inx b/extensions/fablabchemnitz/nextgenerator/nextgenerator.inx new file mode 100644 index 00000000..a1e00633 --- /dev/null +++ b/extensions/fablabchemnitz/nextgenerator/nextgenerator.inx @@ -0,0 +1,63 @@ + + + NextGenerator + fablabchemnitz.de.nextgenerator + + + + /path/to/file.csv + + + + + + + + + + + + + + + 300 + %VAR_my_variablename% + /tmp + + + + + + + + + + + + + + + + all + + + + + + Automatically replace values and export the result. + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/nextgenerator/nextgenerator.py b/extensions/fablabchemnitz/nextgenerator/nextgenerator.py new file mode 100644 index 00000000..73df4612 --- /dev/null +++ b/extensions/fablabchemnitz/nextgenerator/nextgenerator.py @@ -0,0 +1,142 @@ +#!/usr/bin/env python +# coding=utf-8 +# +# NextGenerator - an Inkscape extension to export images with automatically replaced values +# Copyright (C) 2008 Aurélio A. Heckert (original Generator extension in Bash) +# 2019 Maren Hachmann (Python rewrite, update for Inkscape 1.0) +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# Version 0.9 +""" +An Inkscape extension to automatically replace values (text, attribute values) +in an SVG file and to then export the result to various file formats. + +This is useful e.g. for generating images for name badges and other similar items. +""" + +from __future__ import unicode_literals + +import os +import csv +import json +import time #for debugging purposes +import inkex +from inkex.command import inkscape + + +class NextGenerator(inkex.base.TempDirMixin, inkex.base.InkscapeExtension): + """Generate image files by replacing variables in the current file""" + + def add_arguments(self, pars): + pars.add_argument("-c", "--csv_file", type=str, dest="csv_file", help="path to a CSV file") + pars.add_argument("-e", "--extra-vars", help="additional variables to replace and the corresponding columns, in JSON format") + pars.add_argument("-f", "--format", help="file format to export to: png, pdf, svg, ps, eps") + pars.add_argument("-d", "--dpi", type=int, default="300", help="dpi value for exported raster images") + pars.add_argument("-o", "--output_folder", help="path to output folder") + pars.add_argument("-p", "--file_pattern", help="pattern for the output file") + pars.add_argument("-t", "--tab", type=str, default="any", help="not needed at all") + pars.add_argument("-i", "--id", type=str, default="", help="not needed at all") + + def effect(self): + + # load the attributes that should be replaced in addition to textual values + if self.options.extra_vars == None: + self.options.extra_vars = '{}' + + extra_vars = json.loads(self.options.extra_vars) + + + # load the CSV file + # spaces around commas will be stripped + csv.register_dialect('generator', 'excel', skipinitialspace=True) + + with open(self.options.csv_file, newline='', encoding='utf-8-sig') as csvfile: + + data = csv.DictReader(csvfile, dialect='generator') + + for row in data: + export_base_name = self.options.file_pattern + self.new_doc = self.document + for i, (key, value) in enumerate(row.items()): + search_string = "%VAR_" + key + "%" + # replace any occurrances of %VAR_my_variable_name% in the SVG file source code + self.new_doc = self.new_doc.replace(search_string, value) + # build the file name, still without file extension + export_base_name = export_base_name.replace(search_string, value) + for key, svg_cont in extra_vars.items(): + if key in row.keys(): + # replace any attributes and other SVG content by the values from the CSV file + self.new_doc = self.new_doc.replace(svg_cont, row[key]) + else: + inkex.errormsg("The replacements in the generated images may be incomplete. Please check your entry '{key}' in the field for the non-text values.").format(key=key) + if self.export(export_base_name) != True: + return + + def export(self, export_base_name): + + export_file_name = '{0}.{1}'.format(export_base_name, self.options.format) + + if os.path.exists(self.options.output_folder): + export_file_path = os.path.join(self.options.output_folder, export_file_name) + else: + inkex.errormsg("The selected output folder does not exist.") + return False + + + if self.options.format == 'svg': + # would use this, but it cannot overwrite, nor handle strings for writing...: + # write_svg(self.new_doc, export_file_path) + with open(export_file_path, 'w') as f: + f.write(self.new_doc) + else: + + actions = { + 'png' : 'export-dpi:{dpi};export-filename:{file_name};export-do;FileClose'.\ + format(dpi=self.options.dpi, file_name=export_file_path), + 'pdf' : 'export-dpi:{dpi};export-pdf-version:1.5;export-text-to-path;export-filename:{file_name};export-do;FileClose'.\ + format(dpi=self.options.dpi, file_name=export_file_path), + 'ps' : 'export-dpi:{dpi};export-text-to-path;export-filename:{file_name};export-do;FileClose'.\ + format(dpi=self.options.dpi, file_name=export_file_path), + 'eps' : 'export-dpi:{dpi};export-text-to-path;export-filename:{file_name};export-do;FileClose'.\ + format(dpi=self.options.dpi, file_name=export_file_path), + } + + # create a temporary svg file from our string + temp_svg_name = '{0}.{1}'.format(export_base_name, 'svg') + temp_svg_path = os.path.join(self.tempdir, temp_svg_name) + #inkex.utils.debug("temp_svg_path=" + temp_svg_path) + with open(temp_svg_path, 'w') as f: + f.write(self.new_doc) + #inkex.utils.debug("self.new_doc=" + self.new_doc) + # let Inkscape do the exporting + # self.debug(actions[self.options.format]) + cli_output = inkscape(temp_svg_path, actions=actions[self.options.format]) + + if len(cli_output) > 0: + self.debug(_("Inkscape returned the following output when trying to run the file export; the file export may still have worked:")) + self.debug(cli_output) + return False + return True + + def load(self, stream): + return str(stream.read(), 'utf-8') + + def save(self, stream): + # must be implemented, but isn't needed. + pass + +if __name__ == '__main__': + NextGenerator().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/number_subpaths/number_subpaths.inx b/extensions/fablabchemnitz/number_subpaths/number_subpaths.inx new file mode 100644 index 00000000..d4aadd90 --- /dev/null +++ b/extensions/fablabchemnitz/number_subpaths/number_subpaths.inx @@ -0,0 +1,21 @@ + + + Number Subpaths + fablabchemnitz.de.number_subpaths + + 10px + 10px + false + + + path + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/number_subpaths/number_subpaths.py b/extensions/fablabchemnitz/number_subpaths/number_subpaths.py new file mode 100644 index 00000000..41997145 --- /dev/null +++ b/extensions/fablabchemnitz/number_subpaths/number_subpaths.py @@ -0,0 +1,83 @@ +#!/usr/bin/env python3 +# +# Copyright (C) 2005 Aaron Spike, aaron@ekips.org +# Modified by Ellen Wasbo, ellen@wasbo.net 2021 - number subpaths and mark start/end element with green/red dot +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +import math +import inkex +from inkex import TextElement, Circle + +class NumberSubpaths(inkex.EffectExtension): + """Mark start and end elements with numbered dots according to the options""" + def add_arguments(self, pars): + pars.add_argument("--dotsize", default="10px", help="Size of the dots on the path elements") + pars.add_argument("--fontsize", default="10px", help="Size of element labels") + pars.add_argument("--showID", type=inkex.Boolean, default=False) + + def effect(self): + if not self.svg.selected: + raise inkex.AbortExtension("Please select an object.") + for element in self.svg.selection.values(): + self.add_dot(element) + + def add_dot(self, element): + """Add a dot label for this path element""" + group = element.getparent().add(inkex.Group()) + dot_group = group.add(inkex.Group()) + num_group = group.add(inkex.Group()) + group.transform = element.transform + + styleStart = inkex.Style({'stroke': 'none', 'fill': '#00ff00'}) + styleEnd = inkex.Style({'stroke': 'none', 'fill': '#ff0000'}) + + idTxt='' + if self.options.showID==True: + idTxt=element.get('id')+', ' + + cc=0 + for sub in element.path.to_superpath(): + x=sub[0][1][0] + y=sub[0][1][1] + circle = dot_group.add(Circle(cx=str(x), cy=str(y), r=str(self.svg.unittouu(self.options.dotsize) / 2))) + circle.style = styleStart + num_group.append(self.add_text( + x + (self.svg.unittouu(self.options.dotsize) / 3), + y - (self.svg.unittouu(self.options.dotsize) / 3), idTxt+str(cc))) + x=sub[-1][1][0] + y=sub[-1][1][1] + circle = dot_group.add(Circle(cx=str(x), cy=str(y), r=str(self.svg.unittouu(self.options.dotsize) *0.9 / 2))) + circle.style = styleEnd + num_group.append(self.add_text( + x + (self.svg.unittouu(self.options.dotsize) / 3), + y - (self.svg.unittouu(self.options.dotsize) / 3), idTxt+str(cc))) + cc+=1 + + def add_text(self, x, y, text): + """Add a text label at the given location""" + elem = TextElement(x=str(x), y=str(y)) + elem.text = str(text) + elem.style = { + 'font-size': self.svg.unittouu(self.options.fontsize), + 'fill-opacity': '1.0', + 'stroke': 'none', + 'font-weight': 'normal', + 'font-style': 'normal', + 'fill': '#999'} + return elem + +if __name__ == '__main__': + NumberSubpaths().run() diff --git a/extensions/fablabchemnitz/ocr/.gitignore b/extensions/fablabchemnitz/ocr/.gitignore new file mode 100644 index 00000000..b6e47617 --- /dev/null +++ b/extensions/fablabchemnitz/ocr/.gitignore @@ -0,0 +1,129 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +pip-wheel-metadata/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +.python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ diff --git a/extensions/fablabchemnitz/ocr/ocr.inx b/extensions/fablabchemnitz/ocr/ocr.inx new file mode 100644 index 00000000..5342dd45 --- /dev/null +++ b/extensions/fablabchemnitz/ocr/ocr.inx @@ -0,0 +1,16 @@ + + + OCR (Image To Text) + fablabchemnitz.de.ocr + + path + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/ocr/ocr.py b/extensions/fablabchemnitz/ocr/ocr.py new file mode 100755 index 00000000..180e6293 --- /dev/null +++ b/extensions/fablabchemnitz/ocr/ocr.py @@ -0,0 +1,46 @@ +#!/usr/bin/env python3 + +# Copyright (C) 2021 Amal Santhosh , amalsanp@gmail.com + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# + +import inkex +import pytesseract +from PIL import Image +import cairosvg +import os + + +class OcrOutputExtension(inkex.OutputExtension): + + def effect(self): + try: + cairosvg.svg2png(url=self.file_io.name, write_to='read.png') + im = Image.open('read.png') + text = pytesseract.image_to_string(im,lang ='eng') + self.msg(text.rstrip()) + os.remove('read.png') + except Exception as e: + self.msg(e) + self.msg("Image reading failed!") + return + + + def save(self, stream): + pass + +if __name__ == '__main__': + OcrOutputExtension().run() diff --git a/extensions/fablabchemnitz/offset_paths/offset_paths.inx b/extensions/fablabchemnitz/offset_paths/offset_paths.inx new file mode 100644 index 00000000..a42065a1 --- /dev/null +++ b/extensions/fablabchemnitz/offset_paths/offset_paths.inx @@ -0,0 +1,79 @@ + + + Offset Paths + fablabchemnitz.de.offset_paths + + + + + + + + + + + 1 + 1.0000 + 1.0000 + 0.0000 + 3.0 + 1024 + + + + + + + + + + + + + false + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ../000_about_fablabchemnitz.svg + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/offset_paths/offset_paths.py b/extensions/fablabchemnitz/offset_paths/offset_paths.py new file mode 100644 index 00000000..4202a54f --- /dev/null +++ b/extensions/fablabchemnitz/offset_paths/offset_paths.py @@ -0,0 +1,149 @@ +#!/usr/bin/env python3 + +""" +Based on +- https://github.com/TimeTravel-0/ofsplot + +ToDo's +- break apart combined paths +- option to handle groups + +Author: Mario Voigt / FabLab Chemnitz +Mail: mario.voigt@stadtfabrikanten.org +Last Patch: 10.06.2021 +License: GNU GPL v3 + +""" + +import inkex +import math +from inkex.paths import CubicSuperPath +import re +import copy +import pyclipper + +class OffsetPaths(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument('--tab') + pars.add_argument('--unit') + pars.add_argument("--offset_count", type=int, default=1, help="Number of offset paths") + pars.add_argument("--offset", type=float, default=1.000, help="Offset amount") + pars.add_argument("--init_offset", type=float, default=0.000, help="Initial Offset Amount") + pars.add_argument("--offset_increase", type=float, default=0.000, help="Offset increase between iterations") + pars.add_argument("--jointype", default="2", help="Join type") + pars.add_argument("--endtype", default="3", help="End type") + pars.add_argument("--miterlimit", type=float, default=3.0, help="Miter limit") + pars.add_argument("--clipperscale", type=int, default=1024, help="Scaling factor. Should be a multiplicator of 2, like 2^4=16 or 2^10=1024. The higher the scale factor the higher the quality.") + pars.add_argument("--copy_org", type=inkex.Boolean, default=True, help="copy original path") + pars.add_argument("--individual", type=inkex.Boolean, default=True, help="Separate into individual paths") + pars.add_argument("--path_types", default="both", help="Process open, closed or all paths!") + + + def effect(self): + unit_factor = 1.0 / self.svg.uutounit(1.0, self.options.unit) + pathElements = self.svg.selection.filter(inkex.PathElement).values() + count = sum(1 for pathElement in pathElements) + pathElements = self.svg.selection.filter(inkex.PathElement).values() #we need to call this twice because the sum function consumes the generator + if count == 0: + inkex.errormsg("No paths selected.") + exit() + for pathElement in pathElements: + csp = CubicSuperPath(pathElement.get('d')) + + ''' + check for closed or open paths + ''' + isClosed = False + raw = pathElement.path.to_arrays() + if raw[-1][0] == 'Z' or \ + (raw[-1][0] == 'L' and raw[0][1] == raw[-1][1]) or \ + (raw[-1][0] == 'C' and raw[0][1] == [raw[-1][1][-2], raw[-1][1][-1]]) \ + : #if first is last point the path is also closed. The "Z" command is not required + isClosed = True + if self.options.path_types == "open_paths" and isClosed is True: + continue #skip this loop iteration + elif self.options.path_types == "closed_paths" and isClosed is False: + continue #skip this loop iteration + + scale_factor = self.options.clipperscale # 2 ** 32 = 1024 - see also https://github.com/fonttools/pyclipper/wiki/Deprecating-SCALING_FACTOR + pco = pyclipper.PyclipperOffset(self.options.miterlimit) + + JT = None #join types + if self.options.jointype == "0": + JT = pyclipper.JT_SQUARE + elif self.options.jointype == "1": + JT = pyclipper.JT_ROUND + elif self.options.jointype == "2": + JT = pyclipper.JT_MITER + + ET = None #end types + if self.options.endtype == "0": + ET = pyclipper.ET_CLOSEDPOLYGON + elif self.options.endtype == "1": + ET = pyclipper.ET_CLOSEDLINE + elif self.options.endtype == "2": + ET = pyclipper.ET_OPENBUTT + elif self.options.endtype == "3": + ET = pyclipper.ET_OPENSQUARE + elif self.options.endtype == "4": + ET = pyclipper.ET_OPENROUND + + newPaths = [] + + # load in initial paths + for subPath in csp: + sub_simple = [] + for item in subPath: + itemx = [float(z) * scale_factor for z in item[1]] + sub_simple.append(itemx) + pco.AddPath(sub_simple, JT, ET) + + # calculate offset paths for different offset amounts + offset_list = [] + offset_list.append(self.options.init_offset * unit_factor) + for i in range(0, self.options.offset_count): + ofs_increase = +math.pow(float(i) * self.options.offset_increase * unit_factor, 2) + if self.options.offset_increase < 0: + ofs_increase = -ofs_increase + offset_list.append(offset_list[0] + float(i) * self.options.offset * unit_factor + ofs_increase * unit_factor) + + solutions = [] + for offset in offset_list: + solution = pco.Execute(offset * scale_factor) + solutions.append(solution) + if len(solution) <= 0: + continue # no more loops to go, will provide no results. + + # re-arrange solutions to fit expected format & add to array + for solution in solutions: + for sol in solution: + solx = [[float(s[0]) / scale_factor, float(s[1]) / scale_factor] for s in sol] + sol_p = [[a, a, a] for a in solx] + sol_p.append(sol_p[0][:]) + if sol_p not in newPaths: + newPaths.append(sol_p) + + if self.options.individual is True: + parentGroup = pathElement.getparent().add(inkex.Group(id="g-offset-{}".format(pathElement.attrib["id"]))) + parent = pathElement.getparent() + idx = parent.index(pathElement) + 1 + idSuffix = 0 + for newPath in newPaths: + copyElement = copy.copy(pathElement) + elementId = copyElement.get('id') + copyElement.path = CubicSuperPath(newPath) + copyElement.set('id', elementId + str(idSuffix)) + parentGroup.append(copyElement) + idSuffix += 1 + parent.insert(idx, parentGroup) + if self.options.copy_org is False: + pathElement.delete() + else: + if self.options.copy_org is True: + for subPath in csp: + newPaths.append(subPath) + pathElement.set('d', CubicSuperPath(newPaths)) + +if __name__ == '__main__': + OffsetPaths().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/open_closed_path/open_closed_path.inx b/extensions/fablabchemnitz/open_closed_path/open_closed_path.inx new file mode 100644 index 00000000..f8c83032 --- /dev/null +++ b/extensions/fablabchemnitz/open_closed_path/open_closed_path.inx @@ -0,0 +1,16 @@ + + + Open Closed Path + fablabchemnitz.de.open_closed_path + + path + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/open_closed_path/open_closed_path.py b/extensions/fablabchemnitz/open_closed_path/open_closed_path.py new file mode 100644 index 00000000..dc0a59c2 --- /dev/null +++ b/extensions/fablabchemnitz/open_closed_path/open_closed_path.py @@ -0,0 +1,43 @@ +#!/usr/bin/env python3 +# coding=utf-8 +# +# Copyright (C) 2020 Ellen Wasboe, ellen@wasbo.net +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +""" +Remove all z-s from all selected paths +My purpose: to open paths of single line fonts with a temporary closing to fit into .ttf/.otf format files +""" + +import inkex, re +from inkex import PathElement + +class OpenClosedPath(inkex.EffectExtension): +# Extension to open a closed path by z or by last node + + def effect(self): + elements = self.svg.selection.filter(PathElement).values() + for elem in elements: + pp = elem.path.to_absolute() #remove transformation matrix + elem.path = re.sub(r"Z","",str(pp)) + + sp = elem.path.to_superpath() + if sp[0] == sp[-1]: #if first is last point the path is also closed. The "Z" command is not required + raw = elem.path.to_arrays() + del raw[-1] #delete last point in path + elem.path = raw + +if __name__ == '__main__': + OpenClosedPath().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/open_in_roland_cutstudio/open_in_roland_cutstudio.inx b/extensions/fablabchemnitz/open_in_roland_cutstudio/open_in_roland_cutstudio.inx new file mode 100644 index 00000000..15d3bfd6 --- /dev/null +++ b/extensions/fablabchemnitz/open_in_roland_cutstudio/open_in_roland_cutstudio.inx @@ -0,0 +1,16 @@ + + + Open In Roland CutStudio + fablabchemnitz.de.open_in_roland_cutstudio + + path + + + + + + + + diff --git a/extensions/fablabchemnitz/open_in_roland_cutstudio/open_in_roland_cutstudio.py b/extensions/fablabchemnitz/open_in_roland_cutstudio/open_in_roland_cutstudio.py new file mode 100644 index 00000000..5a012c95 --- /dev/null +++ b/extensions/fablabchemnitz/open_in_roland_cutstudio/open_in_roland_cutstudio.py @@ -0,0 +1,397 @@ +#!/usr/bin/env python3 +# SPDX-License-Identifier: GPL-2.0-or-later +''' +Roland CutStudio export script +Copyright (C) 2014 - 2020 Max Gaukler + +skeleton based on Visicut Inkscape Plugin : +Copyright (C) 2012 Thomas Oster, thomas.oster@rwth-aachen.de + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +''' + +''' +KNOWN BUGS: +WONTFIX: clipping of paths doesnt work +WONTFIX: if there is any object with opacity != 100%, inkscape exports some objects as bitmaps. They will disappear in CutStudio! The same problem also occurs if the alpha value of stroke or fill color is not 100%. +WONTFIX: filters (e.g. blur) are not supported +''' + +import sys +import os +import subprocess +from subprocess import Popen +from functools import reduce +from pathlib import Path +import shutil +import numpy +import atexit +import filecmp +import tempfile +import warnings +import inkex.command +from inkex.command import inkscape + +DEVNULL = open(os.devnull, 'w') +atexit.register(DEVNULL.close) + +def message(s): + sys.stderr.write(s+"\n") + +def debug(s): + message(s) + +# copied from https://github.com/t-oster/VisiCut/blob/0abe785a30d5d5085dd3b5953b38239b1ff83358/tools/inkscape_extension/visicut_export.py +def which(program, raiseError, extraPaths=[], subdir=None): + """ + find program in the $PATH environment variable and in $extraPaths. + If $subdir is given, also look in the given subdirectory of each $PATH entry. + """ + pathlist=os.environ["PATH"].split(os.pathsep) + if "nt" in os.name: + pathlist.append(os.environ.get("ProgramFiles","C:\Program Files\\")) + pathlist.append(os.environ.get("ProgramFiles(x86)","C:\Program Files (x86)\\")) + pathlist.append("C:\Program Files\\") # needed for 64bit inkscape on 64bit Win7 machines + pathlist.append(os.path.dirname(os.path.dirname(os.getcwd()))) # portable application in the current directory + pathlist += extraPaths + if subdir: + pathlist = [os.path.join(p, subdir) for p in pathlist] + pathlist + def is_exe(fpath): + return os.path.isfile(fpath) and (os.access(fpath, os.X_OK) or fpath.endswith(".exe")) + for path in pathlist: + exe_file = os.path.join(path, program) + if is_exe(exe_file): + return exe_file + if raiseError: + raise Exception("Cannot find " + str(program) + " in any of these paths: " + str(pathlist) + ". Either the program is not installed, PATH is not set correctly, or this is a bug.") + else: + return None + +# copied from https://github.com/t-oster/VisiCut/blob/0abe785a30d5d5085dd3b5953b38239b1ff83358/tools/inkscape_extension/visicut_export.py +# Strip SVG to only contain selected elements, convert objects to paths, unlink clones +# Inkscape version: takes care of special cases where the selected objects depend on non-selected ones. +# Examples are linked clones, flowtext limited to a shape and linked flowtext boxes (overflow into the next box). +# +# Inkscape is called with certain "verbs" (gui actions) to do the required cleanup +# The idea is similar to http://bazaar.launchpad.net/~nikitakit/inkscape/svg2sif/view/head:/share/extensions/synfig_prepare.py#L181 , but more primitive - there is no need for more complicated preprocessing here +def stripSVG_inkscape(src, dest, elements): + # create temporary file for opening with inkscape. + # delete this file later so that it will disappear from the "recently opened" list. + tmpfile = tempfile.NamedTemporaryFile(delete=False, prefix='temp-cutstudio-', suffix='.svg') + tmpfile.close() + tmpfile = tmpfile.name + shutil.copyfile(src, tmpfile) + actions_list=[] + actions_list.append("ObjectToPath") + actions_list.append("UnlockAllInAllLayers") + + if elements: # something is selected + actions_list.append("select:{}".format(",".join(elements))) + else: + actions_list.append("EditSelectAllInAllLayers") + actions_list.append("UnhideAllInAllLayers") + actions_list.append("EditInvertInAllLayers") + actions_list.append("EditDelete") + actions_list.append("EditSelectAllInAllLayers") + actions_list.append("EditUnlinkClone") + actions_list.append("ObjectToPath") + actions_list.append("FileSave") + actions = ";".join(actions_list) + cli_output = inkscape(tmpfile, "--batch-process", actions=actions) #process recent file + if len(cli_output) > 0: + self.msg("Inkscape returned the following output when trying to run the file export; the file export may still have worked:") + self.msg(cli_output) + + # move output to the intended destination filename + os.rename(tmpfile, dest) + +# header +# for debugging purposes you can open the resulting EPS file in Inkscape, +# select all, ungroup multiple times +# --> now you can view the exported lines in inkscape +prefix=""" +%!PS-Adobe-3.0 EPSF-3.0 +%%LanguageLevel: 2 +%%BoundingBox -10000 -10000 10000 10000 +%%EndComments +%%BeginSetup +%%EndSetup +%%BeginProlog +% This code (until EndProlog) is from an inkscape-exported EPS, copyright unknown, see cairo-library +save +50 dict begin +/q { gsave } bind def +/Q { grestore } bind def +/cm { 6 array astore concat } bind def +/w { setlinewidth } bind def +/J { setlinecap } bind def +/j { setlinejoin } bind def +/M { setmiterlimit } bind def +/d { setdash } bind def +/m { moveto } bind def +/l { lineto } bind def +/c { curveto } bind def +/h { closepath } bind def +/re { exch dup neg 3 1 roll 5 3 roll moveto 0 rlineto + 0 exch rlineto 0 rlineto closepath } bind def +/S { stroke } bind def +/f { fill } bind def +/f* { eofill } bind def +/n { newpath } bind def +/W { clip } bind def +/W* { eoclip } bind def +/BT { } bind def +/ET { } bind def +/pdfmark where { pop globaldict /?pdfmark /exec load put } + { globaldict begin /?pdfmark /pop load def /pdfmark + /cleartomark load def end } ifelse +/BDC { mark 3 1 roll /BDC pdfmark } bind def +/EMC { mark /EMC pdfmark } bind def +/cairo_store_point { /cairo_point_y exch def /cairo_point_x exch def } def +/Tj { show currentpoint cairo_store_point } bind def +/TJ { + { + dup + type /stringtype eq + { show } { -0.001 mul 0 cairo_font_matrix dtransform rmoveto } ifelse + } forall + currentpoint cairo_store_point +} bind def +/cairo_selectfont { cairo_font_matrix aload pop pop pop 0 0 6 array astore + cairo_font exch selectfont cairo_point_x cairo_point_y moveto } bind def +/Tf { pop /cairo_font exch def /cairo_font_matrix where + { pop cairo_selectfont } if } bind def +/Td { matrix translate cairo_font_matrix matrix concatmatrix dup + /cairo_font_matrix exch def dup 4 get exch 5 get cairo_store_point + /cairo_font where { pop cairo_selectfont } if } bind def +/Tm { 2 copy 8 2 roll 6 array astore /cairo_font_matrix exch def + cairo_store_point /cairo_font where { pop cairo_selectfont } if } bind def +/g { setgray } bind def +/rg { setrgbcolor } bind def +/d1 { setcachedevice } bind def +%%EndProlog +%%Page: 1 1 +%%BeginPageSetup +%%PageBoundingBox: -10000 -10000 10000 10000 +%%EndPageSetup +% This is a severely crippled fucked-up pseudo-postscript for importing in Roland CutStudio +% Do not even try to open it with something else +% FIXME opening with inkscape currently does not show any objects, although it worked some time in the past + +% Inkscape header, not used by cutstudio +% Start +q -10000 -10000 10000 10000 rectclip q + +0 g +0.286645 w +0 J +0 j +[] 0.0 d +4 M q +% Cutstudio Start +""" +postfix=""" +% Cutstudio End + +%this is necessary for CutStudio so that the last line isnt skipped: +0 0 m + +% Inkscape footer +S Q +Q Q +showpage +%%Trailer +end restore +%%EOF +""" + +def OpenInRolandCutStudio(src, dest, mirror=False): + + def outputFromStack(stack, n, transformCoordinates=True): + arr=stack[-(n+1):-1] + if transformCoordinates: + arrTransformed=[] + for i in range(n//2): + arrTransformed+=transform(arr[2*i], arr[2*i+1]) + return output(arrTransformed+[stack[-1]]) + else: + return output(arr+[stack[-1]]) + + def transform(x, y): + #debug("trafo from: {} {}".format(x, y)) + p=numpy.array([[float(x),float(y),1]]).transpose() + multiply = lambda a, b: numpy.matmul(a, b) + # concatenate transformations by multiplying: new = transformation x previousTransformtaion + m=reduce(multiply, scalingStack[::-1]) + m=m.transpose() + #debug("with {}".format(m)) + pnew = numpy.matmul(m, p) + x=float(pnew[0]) + y=float(pnew[1]) + #debug("to: {} {}".format(x, y)) + return [x, y] + + def toString(v): + """ + like str(), but gives the exact same output for floats across python2 and python3 + """ + if isinstance(v, (type(float()), type(int()))): + return repr(v) + else: + return str(v) + + def outputMoveto(x, y): + [xx, yy]=transform(x, y) + return output([toString(xx), toString(yy), "m"]) + + def outputLineto(x, y): + [xx, yy]=transform(x, y) + return output([toString(xx), toString(yy), "l"]) + + def output(array): + array=list(map(toString, array)) + output=" ".join(array) + #debug("OUTPUT: "+output) + return output + "\n" + + stack=[] + scalingStack=[numpy.identity(3)] + if mirror: + scalingStack.append(numpy.diag([-1, 1, 1])) + lastMoveCoordinates=None + outputStr=prefix + inputFile=open(src) + outputFile=open(dest, "w") + for line in inputFile.readlines(): + line=line.strip() + if line.startswith("%"): + # comment line + continue + if line.endswith("re W n"): + continue # ignore clipping rectangle + #debug(line) + for item in line.split(" "): + item=item.strip() + if item=="": + continue + #debug("INPUT: " + item.__repr__()) + stack.append(item) + if item=="h": # close path + assert lastMoveCoordinates, "closed path before first moveto" + outputStr += outputLineto(float(lastMoveCoordinates[0]), float(lastMoveCoordinates[1])) + elif item == "c": # bezier curveto + outputStr += outputFromStack(stack, 6) + stack=[] + elif item=="re": # rectangle + x=float(stack[-5]) + y=float(stack[-4]) + dx=float(stack[-3]) + dy=float(stack[-2]) + outputStr += outputMoveto(x, y) + outputStr += outputLineto(x+dx, y) + outputStr += outputLineto(x+dx, y+dy) + outputStr += outputLineto(x, y+dy) + outputStr += outputLineto(x, y) + elif item=="cm": # matrix transformation + newTrafo=numpy.array([[float(stack[-7]), float(stack[-6]), 0], [float(stack[-5]), float(stack[-4]), 0], [float(stack[-3]), float(stack[-2]), 1]]) + #debug("applying trafo "+str(newTrafo)) + scalingStack[-1] = numpy.matmul(scalingStack[-1], newTrafo) + elif item=="q": # save graphics state to stack + scalingStack.append(numpy.identity(3)) + elif item=="Q": # pop graphics state from stack + scalingStack.pop() + elif item in ["m", "l"]: + if item=="m": # moveto + lastMoveCoordinates=stack[-3:-1] + elif item=="l": # lineto + pass + outputStr += outputFromStack(stack, 2) + stack=[] + else: + pass # do nothing + outputStr += postfix + outputFile.write(outputStr) + outputFile.close() + inputFile.close() + +selectedElements=[] +for arg in sys.argv[1:]: + if arg[0] == "-": + if len(arg) >= 5 and arg[0:5] == "--id=": + selectedElements +=[arg[5:]] + else: + filename = arg +if "--selftest" in sys.argv: + filename = "./test-input.svg" + +if len(selectedElements)==0: + shutil.copyfile(filename, filename+".filtered.svg") +else: + # only take selected elements + stripSVG_inkscape(src=filename, dest=filename+".filtered.svg", elements=selectedElements) + +actions_list=[] +actions_list.append("export-text-to-path") +actions_list.append("export-ignore-filters") +actions_list.append("export-area-drawing") +actions_list.append("export-filename:{}".format(filename + ".inkscape.eps")) +actions_list.append("export-do") +actions = ";".join(actions_list) +cli_output = inkscape(filename + ".filtered.svg", actions=actions) #process recent file +if len(cli_output) > 0: + self.msg("Inkscape returned the following output when trying to run the file export; the file export may still have worked:") + self.msg(cli_output) + +inkscape_eps_file = filename + ".inkscape.eps" +assert os.path.exists(inkscape_eps_file), 'EPS conversion failed: command did not create result file: ' + '"' + '" "'.join(cmd) + '"' + +if "--selftest" in sys.argv: + # used for unit-testing: fixed location of output file + destination = "./test-output-actual.cutstudio.eps" +else: + # normally + destination = filename + ".cutstudio.eps" + +OpenInRolandCutStudio(inkscape_eps_file, destination, mirror=("--mirror=true" in sys.argv)) + +if "--selftest" in sys.argv: + # unittest: compare with known reference output + TEST_REFERENCE_FILE = "./test-output-reference.cutstudio.eps" + assert filecmp.cmp(destination, TEST_REFERENCE_FILE), "Test output changed. Please compare " + destination + " and " + TEST_REFERENCE_FILE + print("Selftest successful :-)") + sys.exit(0) + +if os.name=="nt": + DETACHED_PROCESS = 8 # start as "daemon" + warnings.simplefilter('ignore', ResourceWarning) #suppress "enable tracemalloc to get the object allocation traceback" + proc = Popen([which("CutStudio\CutStudio.exe", True), "/import", destination], creationflags=DETACHED_PROCESS, close_fds=True) + #warnings.simplefilter("default", ResourceWarning) + +else: #check if we have access to "wine" + CUTSTUDIO_C_DRIVE = str(Path.home()) + "/.wine/drive_c/" + CUTSTUDIO_PATH_LINUX_WINE = CUTSTUDIO_C_DRIVE + "Program Files (x86)/CutStudio/CutStudio.exe" + CUTSTUDIO_COMMANDLINE = ["wine", CUTSTUDIO_PATH_LINUX_WINE, "/import", r'C:\cutstudio.eps'] + try: + if not which("wine", False): + raise Exception("Cannot find 'wine'") + if not os.path.exists(CUTSTUDIO_PATH_LINUX_WINE): + raise Exception("Cannot find CutStudio in " + CUTSTUDIO_PATH_LINUX_WINE) + shutil.copyfile(destination, CUTSTUDIO_C_DRIVE + "cutstudio.eps") + subprocess.check_call(CUTSTUDIO_COMMANDLINE) + except Exception as exc: + message("Could not open CutStudio.\nInstead, your file was saved to:\n" + destination + "\n" + \ + "Please open that with CutStudio manually. \n\n" + \ + "Tip: On Linux, you can use 'wine' to install CutStudio 3.10. Then, the file will be directly opened with CutStudio. \n" + \ + " Diagnostic information: \n" + str(exc)) \ No newline at end of file diff --git a/extensions/fablabchemnitz/optimize_sequence_lasercut_sequence/optimize_sequence_lasercut_sequence.inx b/extensions/fablabchemnitz/optimize_sequence_lasercut_sequence/optimize_sequence_lasercut_sequence.inx new file mode 100644 index 00000000..6b686b3b --- /dev/null +++ b/extensions/fablabchemnitz/optimize_sequence_lasercut_sequence/optimize_sequence_lasercut_sequence.inx @@ -0,0 +1,16 @@ + + + Optimize Sequence: Small Holes First + fablabchemnitz.de.optimize_sequence_lasercut_sequence + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/optimize_sequence_lasercut_sequence/optimize_sequence_lasercut_sequence.py b/extensions/fablabchemnitz/optimize_sequence_lasercut_sequence/optimize_sequence_lasercut_sequence.py new file mode 100644 index 00000000..1edf2488 --- /dev/null +++ b/extensions/fablabchemnitz/optimize_sequence_lasercut_sequence/optimize_sequence_lasercut_sequence.py @@ -0,0 +1,40 @@ +#!/usr/bin/env python3 + +import inkex +import measure +from inkex.paths import Path +from inkex import paths + +def getArea(path): + return abs(measure.csparea(paths.CubicSuperPath(path + "z"))) + +class OptimizeSequenceLasercutSequence(inkex.EffectExtension): + + def effect(self): + elements = self.document.xpath('//svg:path',namespaces=inkex.NSS) + for el in elements: + oldpathstring = el.attrib['d'] + nodes = Path(oldpathstring).to_arrays() + currentSection = [] + sections = [currentSection] + for node in nodes: + command = node.pop(0) + currentSection.append(command + ' ' + ' '.join(list(map(lambda c: ','.join(map(str, c)), node)))) + if command.lower() == 'z': + currentSection = [] + sections.append(currentSection) + + sections = list(map(lambda n: ' '.join(n), filter(lambda n: len(n) > 0, sections))) + + if (sections[-1][-2].lower() != 'z'): + nonClosedSection = ' ' + sections.pop() + else: + nonClosedSection = '' + + sections = filter(lambda s: s[0].lower() != 'z', sections) + sections = sorted(sections, key=getArea) + newpathstring = "z ".join(sections) + nonClosedSection + el.set('d', newpathstring) + +if __name__ == '__main__': + OptimizeSequenceLasercutSequence().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/optimize_sequence_travel_distance/optimize_sequence_travel_distance.inx b/extensions/fablabchemnitz/optimize_sequence_travel_distance/optimize_sequence_travel_distance.inx new file mode 100755 index 00000000..2be52797 --- /dev/null +++ b/extensions/fablabchemnitz/optimize_sequence_travel_distance/optimize_sequence_travel_distance.inx @@ -0,0 +1,25 @@ + + + Optimize Sequence: Travel Distances + fablabchemnitz.de.optimize_sequence_travel_distance + + + + + + + +false + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/optimize_sequence_travel_distance/optimize_sequence_travel_distance.py b/extensions/fablabchemnitz/optimize_sequence_travel_distance/optimize_sequence_travel_distance.py new file mode 100644 index 00000000..29038cc5 --- /dev/null +++ b/extensions/fablabchemnitz/optimize_sequence_travel_distance/optimize_sequence_travel_distance.py @@ -0,0 +1,1239 @@ +# coding=utf-8 +# +# SVG Path Ordering Extension +# This extension uses a simple TSP algorithm to order the paths so as +# to reduce plotting time by plotting nearby paths consecutively. +# +# +# While written from scratch, this is a derivative in spirit of the work by +# Matthew Beckler and Daniel C. Newman for the EggBot project. +# +# The MIT License (MIT) +# +# Copyright (c) 2020 Windell H. Oskay, Evil Mad Science LLC +# www.evilmadscientist.com +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +import math +import sys +from lxml import etree +import inkex +import simpletransform +import simplestyle +import plot_utils + +""" +TODOs: + +* Apparent difference in execution time for portrait vs landscape document orientation. + Seems to be related to the _change_ + +* Implement path functions + + +<_option value=0>Leave as is +<_option value=1>Reorder subpaths +<_option value=2>Break apart + + +self.OptionParser.add_option( "--path_handling",\ +action="store", type="int", dest="path_handling",\ +default=1,help="How compound paths are handled") + + +* Consider re-introducing GUI method for rendering: + +false + + +""" + +class OptimizeSequenceTravelDistance(inkex.EffectExtension): + """ + Inkscape effect extension. + Re-order the objects in the SVG document for faster plotting. + Respect layers: Initialize a new dictionary of objects for each layer, and sort + objects within that layer only + Objects in root of document are treated as being on a _single_ layer, and will all + be sorted. + + """ + + def add_arguments(self, pars): + pars.add_argument( "--reordering",type=int, default=1, help="How groups are handled") + pars.add_argument( "--preview_rendering",type=inkex.Boolean, default=False, help="Preview rendering") # Rendering is available for debug purposes. It only previews pen-up movements that are reordered and typically does not include all possible movement. + self.auto_rotate = True + + def effect(self): + # Main entry point of the program + + self.svg_width = 0 + self.svg_height = 0 + self.air_total_default = 0 + self.air_total_sorted = 0 + self.printPortrait = False + + self.layer_index = 0 # index for coloring layers + self.svg = self.document.getroot() + self.DocUnits = "in" # Default + self.DocUnits = self.svg.unit + self.unit_scaling = 1 + self.getDocProps() + + """ + Set up the document-wide transforms to handle SVG viewbox + """ + + matCurrent = [[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]] + + viewbox = self.svg.get( 'viewBox' ) + + vb = self.svg.get('viewBox') + if vb: + p_a_r = self.svg.get('preserveAspectRatio') + sx,sy,ox,oy = plot_utils.vb_scale(vb, p_a_r, self.svg_width, self.svg_height) + else: + sx = 1.0 / float(plot_utils.PX_PER_INCH) # Handle case of no viewbox + sy = sx + ox = 0.0 + oy = 0.0 + + # Initial transform of document is based on viewbox, if present: + matCurrent = simpletransform.parseTransform('scale({0:.6E},{1:.6E}) translate({2:.6E},{3:.6E})'.format(sx, sy, ox, oy)) + # Set up x_last, y_last, which keep track of last known pen position + # The initial position is given by the expected initial pen position + + self.y_last = 0 + + if (self.printPortrait): + self.x_last = self.svg_width + else: + self.x_last = 0 + + parent_vis='visible' + + self.root_nodes = [] + + if self.options.preview_rendering == True: + # Remove old preview layers, if rendering is enabled + for node in self.svg: + if node.tag == inkex.addNS( 'g', 'svg' ) or node.tag == 'g': + if ( node.get( inkex.addNS( 'groupmode', 'inkscape' ) ) == 'layer' ): + LayerName = node.get( inkex.addNS( 'label', 'inkscape' ) ) + if LayerName == '% Preview': + self.svg.remove( node ) + + preview_transform = simpletransform.parseTransform( + 'translate({2:.6E},{3:.6E}) scale({0:.6E},{1:.6E})'.format( + 1.0/sx, 1.0/sy, -ox, -oy)) + path_attrs = { 'transform': simpletransform.formatTransform(preview_transform)} + self.preview_layer = etree.Element(inkex.addNS('g', 'svg'), + path_attrs, nsmap=inkex.NSS) + + + self.preview_layer.set( inkex.addNS('groupmode', 'inkscape' ), 'layer' ) + self.preview_layer.set( inkex.addNS( 'label', 'inkscape' ), '% Preview' ) + self.svg.append( self.preview_layer ) + + + # Preview stroke width: 1/1000 of page width or height, whichever is smaller + if self.svg_width < self.svg_height: + width_du = self.svg_width / 1000.0 + else: + width_du = self.svg_height / 1000.0 + + """ + Stroke-width is a css style element, and cannot accept scientific notation. + + Thus, in cases with large scaling (i.e., high values of 1/sx, 1/sy) + resulting from the viewbox attribute of the SVG document, it may be necessary to use + a _very small_ stroke width, so that the stroke width displayed on the screen + has a reasonable width after being displayed greatly magnified thanks to the viewbox. + + Use log10(the number) to determine the scale, and thus the precision needed. + """ + + log_ten = math.log10(width_du) + if log_ten > 0: # For width_du > 1 + width_string = "{0:.3f}".format(width_du) + else: + prec = int(math.ceil(-log_ten) + 3) + width_string = "{0:.{1}f}".format(width_du, prec) + + self.p_style = {'stroke-width': width_string, 'fill': 'none', + 'stroke-linejoin': 'round', 'stroke-linecap': 'round'} + + self.svg = self.parse_svg(self.svg, matCurrent) + + + def parse_svg(self, input_node, mat_current=None, parent_vis='visible'): + """ + Input: An SVG node (usually) containing other nodes: + The SVG root, a layer, sublayer, or other group. + Output: The re-ordered node. The contents are reordered with the greedy + algorithm, except: + - Layers and sublayers are preserved. The contents of each are + re-ordered for faster plotting. + - Groups are either preserved, broken apart, or re-ordered within + the group, depending on the value of group_mode. + """ + + coord_dict = {} + # coord_dict maps a node ID to the following data: + # Is the node plottable, first coordinate pair, last coordinate pair. + # i.e., Node_id -> (Boolean: plottable, Xi, Yi, Xf, Yf) + + group_dict = {} + # group_dict maps a node ID for a group to the contents of that group. + # The contents may be a preserved nested group or a flat list, depending + # on the selected group handling mode. Example: + # group_dict = {'id_1': , + # 'id_2': + + nodes_to_delete = [] + + counter = 0 # TODO: Replace this with better unique ID system + + # Account for input_node's transform and any transforms above it: + if mat_current is None: + mat_current = [[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]] + try: + matNew = simpletransform.composeTransform( mat_current, + simpletransform.parseTransform( input_node.get( "transform" ))) + except AttributeError: + matNew = mat_current + + for node in input_node: + # Step through each object within the top-level input node + + + if node.tag is etree.Comment: + continue + + try: + id = node.get( 'id' ) + except AttributeError: + id = self.svg.get_unique_id("1",True) + node.set( 'id', id) + if id == None: + id = self.svg.get_unique_id("1",True) + node.set( 'id', id) + + + # First check for object visibility: + skip_object = False + + # Check for "display:none" in the node's style attribute: + style = dict(inkex.Style.parse_str(node.get('style'))) + if 'display' in style.keys() and style['display'] == 'none': + skip_object = True # Plot neither this object nor its children + + # The node may have a display="none" attribute as well: + if node.get( 'display' ) == 'none': + skip_object = True # Plot neither this object nor its children + + # Visibility attributes control whether a given object will plot. + # Children of hidden (not visible) parents may be plotted if + # they assert visibility. + visibility = node.get( 'visibility', parent_vis ) + + if 'visibility' in style.keys(): + visibility = style['visibility'] # Style may override attribute. + + if visibility == 'inherit': + visibility = parent_vis + + if visibility != 'visible': + skip_object = True # Skip this object and its children + + # Next, check to see if this inner node is itself a group or layer: + if node.tag == inkex.addNS( 'g', 'svg' ) or node.tag == 'g': + + # Use the user-given option to decide what to do with subgroups: + subgroup_mode = self.options.reordering + +# Values of the parameter: +# subgroup_mode=="1": Preserve groups +# subgroup_mode=="2": Reorder within groups +# subgroup_mode=="3": Break apart groups + + if node.get(inkex.addNS('groupmode', 'inkscape')) == 'layer': + # The node is a layer or sub-layer, not a regular group. + # Parse it separately, and re-order its contents. + + subgroup_mode = 2 # Always sort within each layer. + self.layer_index += 1 + + layer_name = node.get( inkex.addNS( 'label', 'inkscape' ) ) + + if sys.version_info < (3,): # Yes this is ugly. More elegant suggestions welcome. :) + layer_name = layer_name.encode( 'ascii', 'ignore' ) #Drop non-ascii characters + else: + layer_name = str(layer_name) + layer_name.lstrip # Remove leading whitespace + + if layer_name: + if layer_name[0] == '%': # First character is '%'; This + skip_object = True # is a documentation layer; skip plotting. + self.layer_index -= 1 # Set this back to previous value. + + if skip_object: + # Do not re-order hidden groups or layers. + subgroup_mode = 1 # Preserve this group + + if subgroup_mode == 3: + # Break apart this non-layer subgroup and add it to + # the set of things to be re-ordered. + + nodes_to_delete.append(node) + nodes_inside_group = self.group2NodeDict(node) + + for a_node in nodes_inside_group: + try: + id = a_node.get( 'id' ) + except AttributeError: + id = self.uniqueId("1",True) + a_node.set( 'id', id) + if id == None: + id = self.uniqueId("1",True) + a_node.set( 'id', id) + + # Use getFirstPoint and getLastPoint on each object: + start_plottable, first_point = self.getFirstPoint(a_node, matNew) + end_plottable, last_point = self.getLastPoint(a_node, matNew) + + coord_dict[id] = (start_plottable and end_plottable, + first_point[0], first_point[1], last_point[0], last_point[1] ) + # Entry in group_dict is this node + group_dict[id] = a_node + + elif subgroup_mode == 2: + # Reorder a layer or subgroup with a recursive call. + + node = self.parse_svg(node, matNew, visibility) + + # Capture the first and last x,y coordinates of the optimized node + start_plottable, first_point = self.group_first_pt(node, matNew) + end_plottable, last_point = self.group_last_pt(node, matNew) + + # Then add this optimized node to the coord_dict + coord_dict[id] = (start_plottable and end_plottable, + first_point[0], first_point[1], last_point[0], last_point[1] ) + # Entry in group_dict is this node + group_dict[id] = node + + else: # (subgroup_mode == 1) + # Preserve the group, but find its first and last point so + # that it can be re-ordered with respect to other items + + if skip_object: + start_plottable = False + end_plottable = False + first_point = [(-1.), (-1.)] + last_point = [(-1.), (-1.)] + else: + start_plottable, first_point = self.group_first_pt(node, matNew) + end_plottable, last_point = self.group_last_pt(node, matNew) + + coord_dict[id] = (start_plottable and end_plottable, + first_point[0], first_point[1], last_point[0], last_point[1] ) + # Entry in group_dict is this node + group_dict[id] = node + + else: # Handle objects that are not groups + if skip_object: + start_plottable = False + end_plottable = False + first_point = [(-1.), (-1.)] + last_point = [(-1.), (-1.)] + else: + start_plottable, first_point = self.getFirstPoint(node, matNew) + end_plottable, last_point = self.getLastPoint(node, matNew) + + coord_dict[id] = (start_plottable and end_plottable, + first_point[0], first_point[1], last_point[0], last_point[1] ) + group_dict[id] = node # Entry in group_dict is this node + + # Perform the re-ordering: + ordered_element_list = self.ReorderNodeList(coord_dict, group_dict) + + # Once a better order for the svg elements has been determined, + # All there is do to is to reintroduce the nodes to the parent in the correct order + for elt in ordered_element_list: + # Creates identical node at the correct location according to ordered_element_list + input_node.append(elt) + # Once program is finished parsing through + for element_to_remove in nodes_to_delete: + try: + input_node.remove(element_to_remove) + except ValueError: + inkex.errormsg(str(element_to_remove.get('id'))+" is not a member of " + str(input_node.get('id'))) + + return input_node + + + def break_apart_path(self, path): + """ + An SVG path may contain multiple distinct portions, that are normally separated + by pen-up movements. + + This function takes the path data string from an SVG path, parses it, and returns + a dictionary of independent path data strings, each of which represents a single + pen-down movement. It is equivalent to the Inkscape function Path > Break Apart + + Input: path data string, representing a single SVG path + Output: Dictionary of (separated) path data strings + + """ + MaxLength = len(path) + ix = 0 + move_to_location = [] + path_dictionary = {} + path_list = [] + path_number = 1 + + # Search for M or m location + while ix < MaxLength: + if(path[ix] == 'm' or path[ix] == 'M'): + move_to_location.append(ix) + ix = ix + 1 + # Iterate through every M or m location in our list of move to instructions + # Slice the path string according to path beginning and ends as indicated by the + # location of these instructions + + for counter, m in enumerate(move_to_location): + if (m == move_to_location[-1]): + # last entry + path_list.append(path[m:MaxLength].rstrip()) + else: + path_list.append(path[m:move_to_location[counter + 1]].rstrip()) + + for counter, current_path in enumerate(path_list): + + # Enumerate over every entry in the path looking for relative m commands + if current_path[0] == 'm' and counter > 0: + # If path contains relative m command, the best case is when the last command + # was a Z or z. In this case, all relative operations are performed relative to + # initial x, y coordinates of the previous path + + if path_list[counter -1][-1].upper() == 'Z': + current_path_x, current_path_y,index = self.getFirstPoint(current_path, matNew) + prev_path_x, prev_path_y,ignore = self.getFirstPoint(path_list[counter-1]) + adapted_x = current_path_x + prev_path_x + adapted_y = current_path_y + prev_path_y + # Now we can replace the path data with an Absolute Move to instruction + # HOWEVER, we need to adapt all the data until we reach a different command in the case of a repeating + path_list[counter] = "m "+str(adapted_x)+","+str(adapted_y) + ' ' +current_path[index:] + + # If there is no z or absolute commands, we need to parse the entire path + else: + + # scan path for absolute coordinates. If present, begin parsing from their index + # instead of the beginning + prev_path = path_list[counter-1] + prev_path_length = len(prev_path) + jx = 0 + x_val, y_val = 0,0 + # Check one char at a time + # until we have the moveTo Command + last_command = '' + is_absolute_command = False + repeated_command = False + # name of command + # how many parameters we need to skip + accepted_commands = { + 'M':0, + 'L':0, + 'H':0, + 'V':0, + 'C':4, + 'S':2, + 'Q':2, + 'T':0, + 'A':5 + } + + # If there is an absolute command which specifies a new initial point + # then we can save time by setting our index directly to its location in the path data + # See if an accepted_command is present in the path data. If it is present further in the + # string than any command found before, then set the pointer to that location + # if a command is not found, find() will return a -1. jx is initialized to 0, so if no matches + # are found, the program will parse from the beginning to the end of the path + + for keys in 'MLCSQTA': # TODO: Compare to last_point; see if we can clean up this part + if(prev_path.find(keys) > jx): + jx = prev_path.find(keys) + + while jx < prev_path_length: + + temp_x_val = '' + temp_y_val = '' + num_of_params_to_skip = 0 + + # SVG Path commands can be repeated + if (prev_path[jx].isdigit() and last_command): + repeated_command = True + else: + repeated_command = False + + if (prev_path[jx].isalpha() and prev_path[jx].upper() in accepted_commands) or repeated_command: + + if repeated_command: + #is_relative_command is saved from last iteration of the loop + current_command = last_command + else: + # If the character is accepted, we must parse until reach the x y coordinates + is_absolute_command = prev_path[jx].isupper() + current_command = prev_path[jx].upper() + + # Each command has a certain number of parameters we must pass before we reach the + # information we care about. We will parse until we know that we have reached them + + # Get to start of next number + # We will know we have reached a number if the current character is a +/- sign + # or current character is a digit + while jx < prev_path_length: + if(prev_path[jx] in '+-' or prev_path[jx].isdigit()): + break + jx = jx + 1 + + # We need to parse past the unused parameters in our command + # The number of parameters to parse past is dependent on the command and stored + # as the value of accepted_command + # Spaces and commas are used to deliniate paramters + while jx < prev_path_length and num_of_params_to_skip < accepted_commands[current_command]: + if(prev_path[jx].isspace() or prev_path[jx] == ','): + num_of_params_to_skip = num_of_params_to_skip + 1 + jx = jx + 1 + + # Now, we are in front of the x character + + if current_command.upper() == 'V': + temp_x_val = 0 + + if current_command.upper() == 'H': + temp_y_val = 0 + + # Parse until next character is a digit or +/- character + while jx < prev_path_length and current_command.upper() != 'V': + if(prev_path[jx] in '+-' or prev_path[jx].isdigit()): + break + jx = jx + 1 + + # Save each next character until we reach a space + while jx < prev_path_length and current_command.upper() != 'V' and not (prev_path[jx].isspace() or prev_path[jx] == ','): + temp_x_val = temp_x_val + prev_path[jx] + jx = jx + 1 + + # Then we know we have completely parsed the x character + + # Now we are in front of the y character + + # Parse until next character is a digit or +/- character + while jx < prev_path_length and current_command.upper() != 'H': + if(prev_path[jx] in '+-' or prev_path[jx].isdigit()): + break + jx = jx + 1 + + ## Save each next character until we reach a space + while jx < prev_path_length and current_command.upper() != 'H' and not (prev_path[jx].isspace() or prev_path[jx] == ','): + temp_y_val = temp_y_val + prev_path[jx] + jx = jx + 1 + + # Then we know we have completely parsed the y character + + if is_absolute_command: + + if current_command == 'H': + # Absolute commands create new x,y position + try: + x_val = float(temp_x_val) + except ValueError: + pass + elif current_command == 'V': + # Absolute commands create new x,y position + try: + y_val = float(temp_y_val) + except ValueError: + pass + else: + # Absolute commands create new x,y position + try: + x_val = float(temp_x_val) + y_val = float(temp_y_val) + except ValueError: + pass + else: + + if current_command == 'h': + # Absolute commands create new x,y position + try: + x_val = x_val + float(temp_x_val) + except ValueError: + pass + elif current_command == 'V': + # Absolute commands create new x,y position + try: + y_val = y_val + float(temp_y_val) + except ValueError: + pass + else: + # Absolute commands create new x,y position + try: + x_val = x_val + float(temp_x_val) + y_val = y_val + float(temp_y_val) + except ValueError: + pass + last_command = current_command + jx = jx + 1 + x,y,index = self.getFirstPoint(current_path,None) + path_list[counter] = "m "+str(x_val+x)+","+str(y_val+y) + ' ' + current_path[index:] + + for counter, path in enumerate(path_list): + path_dictionary['ad_path'+ str(counter)] = path + + return path_dictionary + + + def getFirstPoint(self, node, matCurrent): + """ + Input: (non-group) node and parent transformation matrix + Output: Boolean value to indicate if the svg element is plottable and + two floats stored in a list representing the x and y coordinates we plot first + """ + + # first apply the current matrix transform to this node's transform + matNew = simpletransform.composeTransform( matCurrent, simpletransform.parseTransform( node.get( "transform" ) ) ) + + point = [float(-1), float(-1)] + try: + if node.tag == inkex.addNS( 'path', 'svg' ): + + pathdata = node.get('d') + + point = plot_utils.pathdata_first_point(pathdata) + simpletransform.applyTransformToPoint(matNew, point) + + return True, point + + if node.tag == inkex.addNS( 'rect', 'svg' ) or node.tag == 'rect': + + """ + The x,y coordinates for a rect are included in their specific attributes + If there is a transform, we need translate the x & y coordinates to their + correct location via applyTransformToPoint. + """ + + point[0] = float( node.get( 'x' ) ) + point[1] = float( node.get( 'y' ) ) + + simpletransform.applyTransformToPoint(matNew, point) + + return True, point + + if node.tag == inkex.addNS( 'line', 'svg' ) or node.tag == 'line': + """ + The x1 and y1 attributes are where we will start to draw + So, get them, apply the transform matrix, and return the point + """ + + point[0] = float( node.get( 'x1' ) ) + point[1] = float( node.get( 'y1' ) ) + + simpletransform.applyTransformToPoint(matNew, point) + + return True, point + + + if node.tag == inkex.addNS( 'polyline', 'svg' ) or node.tag == 'polyline': + pl = node.get( 'points', '' ).strip() + + if pl == '': + return False, point + + pa = pl.replace(',',' ').split() # replace comma with space before splitting + + if not pa: + return False, point + pathLength = len( pa ) + if (pathLength < 4): # Minimum of x1,y1 x2,y2 required. + return False, point + + d = "M " + pa[0] + " " + pa[1] + i = 2 + while (i < (pathLength - 1 )): + d += " L " + pa[i] + " " + pa[i + 1] + i += 2 + + point = plot_utils.pathdata_first_point(d) + simpletransform.applyTransformToPoint(matNew, point) + + return True, point + + if (node.tag == inkex.addNS( 'polygon', 'svg' ) or + node.tag == 'polygon'): + """ + We need to extract x1 and y1 from these: + + We accomplish this with Python string strip + and split methods. Then apply transforms + """ + # Strip() removes all whitespace from the start and end of p1 + pl = node.get( 'points', '' ).strip() + if (pl == ''): + # If pl is blank there has been an error, return False and -1,-1 to indicate a problem has occured + return False, point + # Split string by whitespace + pa = pl.split() + if not len( pa ): + # If pa is blank there has been an error, return False and -1,-1 to indicate a problem has occured + return False, point + # pa[0] = "x1,y1 + # split string via comma to get x1 and y1 individually + # then point = [x1,x2] + point = pa[0].split(",") + + point = [float(point[0]),float(point[1])] + + simpletransform.applyTransformToPoint(matNew, point) + + return True, point + + if node.tag == inkex.addNS( 'ellipse', 'svg' ) or \ + node.tag == 'ellipse': + + cx = float( node.get( 'cx', '0' ) ) + cy = float( node.get( 'cy', '0' ) ) + rx = float( node.get( 'rx', '0' ) ) + + point[0] = cx - rx + point[1] = cy + + simpletransform.applyTransformToPoint(matNew, point) + + return True, point + + if node.tag == inkex.addNS( 'circle', 'svg' ) or \ + node.tag == 'circle': + cx = float( node.get( 'cx', '0' ) ) + cy = float( node.get( 'cy', '0' ) ) + r = float( node.get( 'r', '0' ) ) + point[0] = cx - r + point[1] = cy + + simpletransform.applyTransformToPoint(matNew, point) + + return True, point + + if node.tag == inkex.addNS('symbol', 'svg') or node.tag == 'symbol': + # A symbol is much like a group, except that + # it's an invisible object. + return False, point # Skip this element. + + if node.tag == inkex.addNS('use', 'svg') or node.tag == 'use': + + """ + A element refers to another SVG element via an xlink:href="#blah" + attribute. We will handle the element by doing an XPath search through + the document, looking for the element with the matching id="blah" + attribute. We then recursively process that element after applying + any necessary (x,y) translation. + + Notes: + 1. We ignore the height and g attributes as they do not apply to + path-like elements, and + 2. Even if the use element has visibility="hidden", SVG still calls + for processing the referenced element. The referenced element is + hidden only if its visibility is "inherit" or "hidden". + 3. We may be able to unlink clones using the code in pathmodifier.py + """ + + refid = node.get(inkex.addNS('href', 'xlink')) + + if refid is not None: + # [1:] to ignore leading '#' in reference + path = '//*[@id="{0}"]'.format(refid[1:]) + refnode = node.xpath(path) + if refnode is not None: + + x = float(node.get('x', '0')) + y = float(node.get('y', '0')) + + # Note: the transform has already been applied + if x != 0 or y != 0: + mat_new2 = simpletransform.composeTransform(matNew, simpletransform.parseTransform('translate({0:f},{1:f})'.format(x, y))) + else: + mat_new2 = matNew + # Note that the referenced object may be a 'symbol`, + # which acts like a group, or it may be a simple + # object. + + if len(refnode) > 0: + plottable, the_point = self.group_first_pt(refnode[0], mat_new2) + else: + plottable, the_point = self.group_first_pt(refnode, mat_new2) + + return plottable, the_point + except: + pass + + # Svg Object is not a plottable element + # In this case, return False to indicate a non-plottable element + # and a default point + + return False, point + + def getLastPoint(self, node, matCurrent): + """ + Input: XML tree node and transformation matrix + Output: Boolean value to indicate if the svg element is plottable or not and + two floats stored in a list representing the x and y coordinates we plot last + """ + + # first apply the current matrix transform to this node's transform + matNew = simpletransform.composeTransform( matCurrent, simpletransform.parseTransform( node.get( "transform" ) ) ) + + # If we return a negative value, we know that this function did not work + point = [float(-1), float(-1)] + try: + if node.tag == inkex.addNS( 'path', 'svg' ): + + path = node.get('d') + + point = plot_utils.pathdata_last_point(path) + simpletransform.applyTransformToPoint(matNew, point) + + return True, point + + if node.tag == inkex.addNS( 'rect', 'svg' ) or node.tag == 'rect': + + """ + The x,y coordinates for a rect are included in their specific attributes + If there is a transform, we need translate the x & y coordinates to their + correct location via applyTransformToPoint. + """ + + point[0] = float( node.get( 'x' ) ) + point[1] = float( node.get( 'y' ) ) + + simpletransform.applyTransformToPoint(matNew, point) + + return True, point # Same start and end points + + if node.tag == inkex.addNS( 'line', 'svg' ) or node.tag == 'line': + + """ + The x2 and y2 attributes are where we will end our drawing + So, get them, apply the transform matrix, and return the point + """ + + point[0] = float( node.get( 'x2' ) ) + point[1] = float( node.get( 'y2' ) ) + + simpletransform.applyTransformToPoint(matNew, point) + + return True, point + + if node.tag == inkex.addNS( 'polyline', 'svg' ) or node.tag == 'polyline': + + pl = node.get( 'points', '' ).strip() + + if pl == '': + return False, point + + pa = pl.replace(',',' ').split() + if not pa: + return False, point + pathLength = len( pa ) + if (pathLength < 4): # Minimum of x1,y1 x2,y2 required. + return False, point + + d = "M " + pa[0] + " " + pa[1] + i = 2 + while (i < (pathLength - 1 )): + d += " L " + pa[i] + " " + pa[i + 1] + i += 2 + + endpoint = plot_utils.pathdata_last_point(d) + simpletransform.applyTransformToPoint(matNew, endpoint) + + return True, endpoint + + if node.tag == inkex.addNS( 'polygon', 'svg' ) or node.tag == 'polygon': + """ + We need to extract x1 and y1 from these: + + We accomplish this with Python string strip + and split methods. Then apply transforms + """ + # Strip() removes all whitespace from the start and end of p1 + pl = node.get( 'points', '' ).strip() + if (pl == ''): + # If pl is blank there has been an error, return -1,-1 to indicate a problem has occured + return False, point + # Split string by whitespace + pa = pl.split() + if not len( pa ): + # If pl is blank there has been an error, return -1,-1 to indicate a problem has occured + return False, point + # pa[0] = "x1,y1 + # split string via comma to get x1 and y1 individually + # then point = [x1,x2] + point = pa[0].split(",") + + point = [float(point[0]),float(point[1])] + + simpletransform.applyTransformToPoint(matNew, point) + + return True, point + + if node.tag == inkex.addNS( 'ellipse', 'svg' ) or node.tag == 'ellipse': + + cx = float( node.get( 'cx', '0' ) ) + cy = float( node.get( 'cy', '0' ) ) + rx = float( node.get( 'rx', '0' ) ) + + point[0] = cx - rx + point[1] = cy + + simpletransform.applyTransformToPoint(matNew, point) + + return True, point + + if node.tag == inkex.addNS( 'circle', 'svg' ) or node.tag == 'circle': + cx = float( node.get( 'cx', '0' ) ) + cy = float( node.get( 'cy', '0' ) ) + r = float( node.get( 'r', '0' ) ) + point[0] = cx - r + point[1] = cy + + simpletransform.applyTransformToPoint(matNew, point) + + return True, point + + if node.tag == inkex.addNS('symbol', 'svg') or node.tag == 'symbol': + # A symbol is much like a group, except that it should only be + # rendered when called within a "use" tag. + return False, point # Skip this element. + + if node.tag == inkex.addNS('use', 'svg') or node.tag == 'use': + + """ + A element refers to another SVG element via an xlink:href="#blah" + attribute. We will handle the element by doing an XPath search through + the document, looking for the element with the matching id="blah" + attribute. We then recursively process that element after applying + any necessary (x,y) translation. + + Notes: + 1. We ignore the height and g attributes as they do not apply to + path-like elements, and + 2. Even if the use element has visibility="hidden", SVG still calls + for processing the referenced element. The referenced element is + hidden only if its visibility is "inherit" or "hidden". + 3. We may be able to unlink clones using the code in pathmodifier.py + """ + + refid = node.get(inkex.addNS('href', 'xlink')) + if refid is not None: + # [1:] to ignore leading '#' in reference + path = '//*[@id="{0}"]'.format(refid[1:]) + refnode = node.xpath(path) + if refnode is not None: + x = float(node.get('x', '0')) + y = float(node.get('y', '0')) + # Note: the transform has already been applied + if x != 0 or y != 0: + mat_new2 = simpletransform.composeTransform(matNew, simpletransform.parseTransform('translate({0:f},{1:f})'.format(x, y))) + else: + mat_new2 = matNew + if len(refnode) > 0: + plottable, the_point = self.group_last_pt(refnode[0], mat_new2) + else: + plottable, the_point = self.group_last_pt(refnode, mat_new2) + return plottable, the_point + except: + pass + + # Svg Object is not a plottable element; + # Return False and a default point + return False, point + + + def group_first_pt(self, group, matCurrent = [[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]]): + """ + Input: A Node which we have found to be a group + Output: Boolean value to indicate if a point is plottable + float values for first x,y coordinates of svg element + """ + + if len(group) == 0: # Empty group -- The object may not be a group. + return self.getFirstPoint(group, matCurrent) + + success = False + point = [float(-1), float(-1)] + + # first apply the current matrix transform to this node's transform + matNew = simpletransform.composeTransform( matCurrent, simpletransform.parseTransform( group.get( "transform" ) ) ) + + # Step through the group, we examine each element until we find a plottable object + for subnode in group: + # Check to see if the subnode we are looking at in this iteration of our for loop is a group + # If it is a group, we must recursively call this function to search for a plottable object + if subnode.tag == inkex.addNS( 'g', 'svg' ) or subnode.tag == 'g': + # Verify that the nested group has objects within it + # otherwise we will not parse it + if subnode is not None: + # Check if group contains plottable elements by recursively calling group_first_pt + # If group contains plottable subnode, then it will return that value and escape the loop + # Else function continues search for first plottable object + success, point = self.group_first_pt(subnode, matNew) + if success: + # Subnode inside nested group is plottable! + # Break from our loop so we can return the first point of this plottable subnode + break + else: + continue + else: + # Node is not a group + # Get its first (x,y) coordinates + # Also get a Boolean value to indicate if the subnode is plottable or not + # If subnode is not plottable, continue to next subnode in the group + success, point = self.getFirstPoint(subnode, matNew) + + if success: + # Subnode inside group is plottable! + # Break from our loop so we can return the first point of this plottable subnode + break + else: + continue + return success, point + + + def group_last_pt(self, group, matCurrent=[[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]]): + """ + Input: A Node which we have found to be a group + Output: The last node within the group which can be plotted + """ + + if len(group) == 0: # Empty group -- Did someone send an object that isn't a group? + return self.getLastPoint(group, matCurrent) + + success = False + point = [float(-1),float(-1)] + + # first apply the current matrix transform to this node's transform + matNew = simpletransform.composeTransform( matCurrent, simpletransform.parseTransform( group.get( "transform" ) ) ) + + # Step through the group, we examine each element until we find a plottable object + for subnode in reversed(group): + # Check to see if the subnode we are looking at in this iteration of our for loop is a group + # If it is a group, we must recursively call this function to search for a plottable object + if subnode.tag == inkex.addNS( 'g', 'svg' ) or subnode.tag == 'g': + # Verify that the nested group has objects within it + # otherwise we will not parse it + if subnode is not None: + # Check if group contains plottable elements by recursively calling group_last_pt + # If group contains plottable subnode, then it will return that value and escape the loop + # Else function continues search for last plottable object + success, point = self.group_last_pt(subnode, matNew) + if success: + # Subnode inside nested group is plottable! + # Break from our loop so we can return the first point of this plottable subnode + break + else: + continue + else: + # Node is not a group + # Get its first (x,y) coordinates + # Also get a Boolean value to indicate if the subnode is plottable or not + # If subnode is not plottable, continue to next subnode in the group + success, point = self.getLastPoint(subnode, matNew) + if success: + + # Subode inside nested group is plottable! + # Break from our loop so we can return the first point of this plottable subnode + break + else: + continue + return success, point + + + def group2NodeDict(self, group, mat_current=None): + + if mat_current is None: + mat_current = [[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]] + + # first apply the current matrix transform to this node's transform + matNew = simpletransform.composeTransform( mat_current, simpletransform.parseTransform( group.get( "transform" ) ) ) + + nodes_in_group = [] + + # Step through the group, we examine each element until we find a plottable object + for subnode in group: + # Check to see if the subnode we are looking at in this iteration of our for loop is a group + # If it is a group, we must recursively call this function to search for a plottable object + if subnode.tag == inkex.addNS( 'g', 'svg' ) or subnode.tag == 'g': + # Verify that the nested group has objects within it + # otherwise we will not parse it + if subnode is not None: + # Check if group contains plottable elements by recursively calling group_first_pt + # If group contains plottable subnode, then it will return that value and escape the loop + # Else function continues search for first plottable object + nodes_in_group.extend(self.group2NodeDict(subnode, matNew)) + else: + simpletransform.applyTransformToNode(matNew, subnode) + nodes_in_group.append(subnode) + return nodes_in_group + + + def ReorderNodeList(self, coord_dict, group_dict): + # Re-order the given set of SVG elements, using a simple "greedy" algorithm. + # The first object will be the element closest to the origin + # After this choice, the algorithm loops through all remaining elements looking for the element whose first x,y + # coordinates are closest to the the previous choice's last x,y coordinates + # This process continues until all elements have been sorted into ordered_element_list and removed from group_dict + + ordered_layer_element_list = [] + + # Continue until all elements have been re-ordered + while group_dict: + + nearest_dist = float('inf') + for key,node in group_dict.items(): + # Is this node non-plottable? + # If so, exit loop and append element to ordered_layer_element_list + if not coord_dict[key][0]: + # Object is not Plottable + nearest = node + nearest_id = key + continue + + # If we reach this point, node is plottable and needs to be considered in our algo + entry_x = coord_dict[key][1] # x-coordinate of first point of the path + entry_y = coord_dict[key][2] # y-coordinate of first point of the path + + exit_x = coord_dict[key][3] # x-coordinate of last point of the path + exit_y = coord_dict[key][4] # y-coordinate of last point of the path + + object_dist = (entry_x-self.x_last)*(entry_x-self.x_last) + (entry_y-self.y_last) * (entry_y-self.y_last) + # This is actually the distance squared; calculating it rather than the pythagorean distance + # saves a square root calculation. Right now, we only care about _which distance is less_ + # not the exact value of it, so this is a harmless shortcut. + # If this distance is smaller than the previous element's distance, then replace the previous + # element's entry with our current element's distance + if nearest_dist >= object_dist: + # We have found an element closer than the previous closest element + nearest = node + nearest_id = key + nearest_dist = object_dist + nearest_start_x = entry_x + nearest_start_y = entry_y + + # Now that the closest object has been determined, it is time to add it to the + # optimized list of closest objects + ordered_layer_element_list.append(nearest) + + # To determine the closest object in the next iteration of the loop, + # we must save the last x,y coor of this element + # If this element is plottable, then save the x,y coordinates + # If this element is non-plottable, then do not save the x,y coordinates + if coord_dict[nearest_id][0]: + + # Also, draw line indicating that we've found a new point. + if self.options.preview_rendering == True: + preview_path = [] # pen-up path data for preview + + preview_path.append("M{0:.3f} {1:.3f}".format( + self.x_last, self.y_last)) + preview_path.append("{0:.3f} {1:.3f}".format( + nearest_start_x, nearest_start_y)) + self.p_style.update({'stroke': self.color_index(self.layer_index)}) + path_attrs = { + 'style': str(inkex.Style(self.p_style)), + 'd': " ".join(preview_path)} + + etree.SubElement( self.preview_layer, + inkex.addNS( 'path', 'svg'), path_attrs, nsmap=inkex.NSS ) + + self.x_last = coord_dict[nearest_id][3] + self.y_last = coord_dict[nearest_id][4] + + # Remove this element from group_dict to indicate it has been optimized + del group_dict[nearest_id] + + # Once all elements have been removed from the group_dictionary + # Return the optimized list of svg elements in the layer + return ordered_layer_element_list + + + def color_index(self, index): + index = index % 9 + + if index == 0: + return "rgb(255, 0, 0))" + elif index == 1: + return "rgb(170, 85, 0))" + elif index == 2: + return "rgb(85, 170, 0))" + elif index == 3: + return "rgb(0, 255, 0))" + elif index == 4: + return "rgb(0, 170, 85))" + elif index == 5: + return "rgb(0, 85, 170))" + elif index == 6: + return "rgb(0, 0, 255))" + elif index == 7: + return "rgb(85, 0, 170))" + else: + return "rgb(170, 0, 85))" + + + def getDocProps(self): + """ + Get the document's height and width attributes from the tag. + Use a default value in case the property is not present or is + expressed in units of percentages. + """ + + self.svg_height = plot_utils.getLengthInches(self, 'height') + self.svg_width = plot_utils.getLengthInches(self, 'width') + + width_string = self.svg.get('width') + if width_string: + value, units = plot_utils.parseLengthWithUnits(width_string) + self.doc_units = units + + if self.auto_rotate and (self.svg_height > self.svg_width): + self.printPortrait = True + if self.svg_height is None or self.svg_width is None: + return False + else: + return True + + + def get_output(self): + # Return serialized copy of svg document output + result = etree.tostring(self.document) + return result.decode("utf-8") + +if __name__ == '__main__': + OptimizeSequenceTravelDistance().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/optimize_sequence_travel_distance/plot_utils.py b/extensions/fablabchemnitz/optimize_sequence_travel_distance/plot_utils.py new file mode 100644 index 00000000..db1dc5ff --- /dev/null +++ b/extensions/fablabchemnitz/optimize_sequence_travel_distance/plot_utils.py @@ -0,0 +1,744 @@ +# plot_utils.py +# Common plotting utilities for EiBotBoard +# https://github.com/evil-mad/plotink +# +# Intended to provide some common interfaces that can be used by +# EggBot, WaterColorBot, AxiDraw, and similar machines. +# +# See below for version information +# +# +# The MIT License (MIT) +# +# Copyright (c) 2019 Windell H. Oskay, Evil Mad Scientist Laboratories +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +from math import sqrt + +import cspsubdiv +import simplepath +import bezmisc +import ffgeom + +def version(): # Version number for this document + return "0.16" # Dated 2019-06-18 + +__version__ = version() + +PX_PER_INCH = 96.0 +# This value has changed to 96 px per inch, as of version 0.12 of this library. +# Prior versions used 90 PPI, corresponding the value used in Inkscape < 0.92. +# For use with Inkscape 0.91 (or older), use PX_PER_INCH = 90.0 + +trivial_svg = """ + + + """ + +def checkLimits(value, lower_bound, upper_bound): + # Limit a value to within a range. + # Return constrained value with error boolean. + if value > upper_bound: + return upper_bound, True + if value < lower_bound: + return lower_bound, True + return value, False + + +def checkLimitsTol(value, lower_bound, upper_bound, tolerance): + # Limit a value to within a range. + # Return constrained value with error boolean. + # Allow a range of tolerance where we constrain the value without an error message. + + if value > upper_bound: + if value > (upper_bound + tolerance): + return upper_bound, True # Truncate & throw error + else: + return upper_bound, False # Truncate with no error + if value < lower_bound: + if value < (lower_bound - tolerance): + return lower_bound, True # Truncate & throw error + else: + return lower_bound, False # Truncate with no error + return value, False # Return original value without error + + +def clip_code(x, y, x_min, x_max, y_min, y_max): + # Encode point position with respect to boundary box + code = 0 + if x < x_min: + code = 1 # Left + if x > x_max: + code |= 2 # Right + if y < y_min: + code |= 4 # Top + if y > y_max: + code |= 8 # Bottom + return code + + +def clip_segment(segment, bounds): + """ + Given an input line segment [[x1,y1],[x2,y2]], as well as a + rectangular bounding region [[x_min,y_min],[x_max,y_max]], clip and + keep the part of the segment within the bounding region, using the + Cohen–Sutherland algorithm. + Return a boolean value, "accept", indicating that the output + segment is non-empty, as well as truncated segment, + [[x1',y1'],[x2',y2']], giving the portion of the input line segment + that fits within the bounds. + """ + + x1 = segment[0][0] + y1 = segment[0][1] + x2 = segment[1][0] + y2 = segment[1][1] + + x_min = bounds[0][0] + y_min = bounds[0][1] + x_max = bounds[1][0] + y_max = bounds[1][1] + + while True: # Repeat until return + code_1 = clip_code(x1, y1, x_min, x_max, y_min, y_max) + code_2 = clip_code(x2, y2, x_min, x_max, y_min, y_max) + + # Trivial accept: + if code_1 == 0 and code_2 == 0: + return True, segment # Both endpoints are within bounds. + # Trivial reject, if both endpoints are outside, and on the same side: + if code_1 & code_2: + return False, segment # Verify with bitwise AND. + + # Otherwise, at least one point is out of bounds; not trivial. + if code_1 != 0: + code = code_1 + else: + code = code_2 + + # Clip at a single boundary; may need to do this up to twice per vertex + + if code & 1: # Vertex on LEFT side of bounds: + x = x_min # Find intersection of our segment with x_min + slope = (y2 - y1) / (x2 - x1) + y = slope * (x_min - x1) + y1 + + elif code & 2: # Vertex on RIGHT side of bounds: + x = x_max # Find intersection of our segment with x_max + slope = (y2 - y1) / (x2 - x1) + y = slope * (x_max - x1) + y1 + + elif code & 4: # Vertex on TOP side of bounds: + y = y_min # Find intersection of our segment with y_min + slope = (x2 - x1) / (y2 - y1) + x = slope * (y_min - y1) + x1 + + elif code & 8: # Vertex on BOTTOM side of bounds: + y = y_max # Find intersection of our segment with y_max + slope = (x2 - x1) / (y2 - y1) + x = slope * (y_max - y1) + x1 + + if code == code_1: + x1 = x + y1 = y + else: + x2 = x + y2 = y + segment = [[x1,y1],[x2,y2]] # Now checking this clipped segment + + +def constrainLimits(value, lower_bound, upper_bound): + # Limit a value to within a range. + return max(lower_bound, min(upper_bound, value)) + + +def distance(x, y): + """ + Pythagorean theorem + """ + return sqrt(x * x + y * y) + + +def dotProductXY(input_vector_first, input_vector_second): + temp = input_vector_first[0] * input_vector_second[0] + input_vector_first[1] * input_vector_second[1] + if temp > 1: + return 1 + elif temp < -1: + return -1 + else: + return temp + + +def getLength(altself, name, default): + """ + Get the attribute with name "name" and default value "default" + Parse the attribute into a value and associated units. Then, accept + no units (''), units of pixels ('px'), and units of percentage ('%'). + Return value in px. + """ + string_to_parse = altself.document.getroot().get(name) + + if string_to_parse: + v, u = parseLengthWithUnits(string_to_parse) + if v is None: + return None + elif u == '' or u == 'px': + return float(v) + elif u == 'in': + return float(v) * PX_PER_INCH + elif u == 'mm': + return float(v) * PX_PER_INCH / 25.4 + elif u == 'cm': + return float(v) * PX_PER_INCH / 2.54 + elif u == 'Q' or u == 'q': + return float(v) * PX_PER_INCH / (40.0 * 2.54) + elif u == 'pc': + return float(v) * PX_PER_INCH / 6.0 + elif u == 'pt': + return float(v) * PX_PER_INCH / 72.0 + elif u == '%': + return float(default) * v / 100.0 + else: + # Unsupported units + return None + else: + # No width specified; assume the default value + return float(default) + + +def getLengthInches(altself, name): + """ + Get the attribute with name "name", and parse it as a length, + into a value and associated units. Return value in inches. + + As of version 0.11, units of 'px' or no units ('') are interpreted + as imported px, at a resolution of 96 px per inch, as per the SVG + specification. (Prior versions returned None in this case.) + + This allows certain imported SVG files, (imported with units of px) + to plot while they would not previously. However, it may also cause + new scaling issues in some circumstances. Note, for example, that + Adobe Illustrator uses 72 px per inch, and Inkscape used 90 px per + inch prior to version 0.92. + """ + string_to_parse = altself.document.getroot().get(name) + if string_to_parse: + v, u = parseLengthWithUnits(string_to_parse) + if v is None: + return None + elif u == 'in': + return float(v) + elif u == 'mm': + return float(v) / 25.4 + elif u == 'cm': + return float(v) / 2.54 + elif u == 'Q' or u == 'q': + return float(v) / (40.0 * 2.54) + elif u == 'pc': + return float(v) / 6.0 + elif u == 'pt': + return float(v) / 72.0 + elif u == '' or u == 'px': + return float(v) / 96.0 + else: + # Unsupported units, including '%' + return None + + +def parseLengthWithUnits(string_to_parse): + """ + Parse an SVG value which may or may not have units attached. + There is a more general routine to consider in scour.py if more + generality is ever needed. + """ + u = 'px' + s = string_to_parse.strip() + if s[-2:] == 'px': # pixels, at a size of PX_PER_INCH per inch + s = s[:-2] + elif s[-2:] == 'in': # inches + s = s[:-2] + u = 'in' + elif s[-2:] == 'mm': # millimeters + s = s[:-2] + u = 'mm' + elif s[-2:] == 'cm': # centimeters + s = s[:-2] + u = 'cm' + elif s[-2:] == 'pt': # points; 1pt = 1/72th of 1in + s = s[:-2] + u = 'pt' + elif s[-2:] == 'pc': # picas; 1pc = 1/6th of 1in + s = s[:-2] + u = 'pc' + elif s[-1:] == 'Q' or s[-1:] == 'q': # quarter-millimeters. 1q = 1/40th of 1cm + s = s[:-1] + u = 'Q' + elif s[-1:] == '%': + u = '%' + s = s[:-1] + + try: + v = float(s) + except: + return None, None + + return v, u + + +def unitsToUserUnits(input_string): + """ + Custom replacement for the unittouu routine in inkex.py + + Parse the attribute into a value and associated units. + Return value in user units (typically "px"). + """ + + v, u = parseLengthWithUnits(input_string) + if v is None: + return None + elif u == '' or u == 'px': + return float(v) + elif u == 'in': + return float(v) * PX_PER_INCH + elif u == 'mm': + return float(v) * PX_PER_INCH / 25.4 + elif u == 'cm': + return float(v) * PX_PER_INCH / 2.54 + elif u == 'Q' or u == 'q': + return float(v) * PX_PER_INCH / (40.0 * 2.54) + elif u == 'pc': + return float(v) * PX_PER_INCH / 6.0 + elif u == 'pt': + return float(v) * PX_PER_INCH / 72.0 + elif u == '%': + return float(v) / 100.0 + else: + # Unsupported units + return None + + +def subdivideCubicPath(sp, flat, i=1): + """ + Break up a bezier curve into smaller curves, each of which + is approximately a straight line within a given tolerance + (the "smoothness" defined by [flat]). + + This is a modified version of cspsubdiv.cspsubdiv(). I rewrote the recursive + call because it caused recursion-depth errors on complicated line segments. + """ + + while True: + while True: + if i >= len(sp): + return + p0 = sp[i - 1][1] + p1 = sp[i - 1][2] + p2 = sp[i][0] + p3 = sp[i][1] + + b = (p0, p1, p2, p3) + + if cspsubdiv.maxdist(b) > flat: + break + i += 1 + + one, two = bezmisc.beziersplitatt(b, 0.5) + sp[i - 1][2] = one[1] + sp[i][0] = two[2] + p = [one[2], one[3], two[1]] + sp[i:1] = [p] + +def max_dist_from_n_points(input): + """ + Like cspsubdiv.maxdist, but it can check for distances of any number of points >= 0. + + `input` is an ordered collection of points, each point specified as an x- and y-coordinate. + The first point and the last point define the segment we are finding distances from. + + does not mutate `input` + """ + assert len(input) >= 3, "There must be points (other than begin/end) to check." + + points = [ffgeom.Point(point[0], point[1]) for point in input] + segment = ffgeom.Segment(points.pop(0), points.pop()) + + distances = [segment.distanceToPoint(point) for point in points] + return max(distances) + +def supersample(vertices, tolerance): + """ + Given a list of vertices, remove some according to the following algorithm. + + Suppose that the vertex list consists of points A, B, C, D, E, and so forth, which define segments AB, BC, CD, DE, EF, and so on. + + We first test to see if vertex B can be removed, by using perpDistanceToPoint to check whether the distance between B and segment AC is less than tolerance. + If B can be removed, then check to see if the next vertex, C, can be removed. Both B and C can be removed if the both the distance between B and AD is less than Tolerance and the distance between C and AD is less than Tolerance. Continue removing additional vertices, so long as the perpendicular distance between every point removed and the resulting segment is less than tolerance (and the end of the vertex list is not reached). +If B cannot be removed, then move onto vertex C, and perform the same checks, until the end of the vertex list is reached. + """ + if len(vertices) <= 2: # there is nothing to delete + return vertices + + start_index = 0 # can't remove first vertex + while start_index < len(vertices) - 2: + end_index = start_index + 2 + # test the removal of (start_index, end_index), exclusive until we can't advance end_index + while (max_dist_from_n_points(vertices[start_index:end_index + 1]) < tolerance + and end_index < len(vertices)): + end_index += 1 # try removing the next vertex too + + vertices[start_index + 1:end_index - 1] = [] # delete (start_index, end_index), exclusive + start_index += 1 + +def userUnitToUnits(distance_uu, unit_string): + """ + Custom replacement for the uutounit routine in inkex.py + + Parse the attribute into a value and associated units. + Return value in user units (typically "px"). + """ + + if distance_uu is None: # Couldn't parse the value + return None + elif unit_string == '' or unit_string == 'px': + return float(distance_uu) + elif unit_string == 'in': + return float(distance_uu) / PX_PER_INCH + elif unit_string == 'mm': + return float(distance_uu) / (PX_PER_INCH / 25.4) + elif unit_string == 'cm': + return float(distance_uu) / (PX_PER_INCH / 2.54) + elif unit_string == 'Q' or unit_string == 'q': + return float(distance_uu) / (PX_PER_INCH / (40.0 * 2.54)) + elif unit_string == 'pc': + return float(distance_uu) / (PX_PER_INCH / 6.0) + elif unit_string == 'pt': + return float(distance_uu) / (PX_PER_INCH / 72.0) + elif unit_string == '%': + return float(distance_uu) * 100.0 + else: + # Unsupported units + return None + + +def vb_scale(vb, p_a_r, doc_width, doc_height): + """" + Parse SVG viewbox and generate scaling parameters. + Reference documentation: https://www.w3.org/TR/SVG11/coords.html + + Inputs: + vb: Contents of SVG viewbox attribute + p_a_r: Contents of SVG preserveAspectRatio attribute + doc_width: Width of SVG document + doc_height: Height of SVG document + + Output: sx, sy, ox, oy + Scale parameters (sx,sy) and offset parameters (ox,oy) + + """ + if vb is None: + return 1,1,0,0 # No viewbox; return default transform + else: + vb_array = vb.strip().replace(',', ' ').split() + + if len(vb_array) < 4: + return 1,1,0,0 # invalid viewbox; return default transform + + min_x = float(vb_array[0]) # Viewbox offset: x + min_y = float(vb_array[1]) # Viewbox offset: y + width = float(vb_array[2]) # Viewbox width + height = float(vb_array[3]) # Viewbox height + + if width <= 0 or height <= 0: + return 1,1,0,0 # invalid viewbox; return default transform + + d_width = float(doc_width) + d_height = float(doc_height) + + if d_width <= 0 or d_height <= 0: + return 1,1,0,0 # invalid document size; return default transform + + ar_doc = d_height / d_width # Document aspect ratio + ar_vb = height / width # Viewbox aspect ratio + + # Default values of the two preserveAspectRatio parameters: + par_align = "xmidymid" # "align" parameter (lowercased) + par_mos = "meet" # "meetOrSlice" parameter + + if p_a_r is not None: + par_array = p_a_r.strip().replace(',', ' ').lower().split() + if len(par_array) > 0: + par0 = par_array[0] + if par0 == "defer": + if len(par_array) > 1: + par_align = par_array[1] + if len(par_array) > 2: + par_mos = par_array[2] + else: + par_align = par0 + if len(par_array) > 1: + par_mos = par_array[1] + + if par_align == "none": + # Scale document to fill page. Do not preserve aspect ratio. + # This is not default behavior, nor what happens if par_align + # is not given; the "none" value must be _explicitly_ specified. + + sx = d_width/ width + sy = d_height / height + ox = -min_x + oy = -min_y + return sx,sy,ox,oy + + """ + Other than "none", all situations fall into two classes: + + 1) (ar_doc >= ar_vb AND par_mos == "meet") + or (ar_doc < ar_vb AND par_mos == "slice") + -> In these cases, scale document up until VB fills doc in X. + + 2) All other cases, i.e., + (ar_doc < ar_vb AND par_mos == "meet") + or (ar_doc >= ar_vb AND par_mos == "slice") + -> In these cases, scale document up until VB fills doc in Y. + + Note in cases where the scaled viewbox exceeds the document + (page) boundaries (all "slice" cases and many "meet" cases where + an offset value is given) that this routine does not perform + any clipping, but subsequent clipping to the page boundary + is appropriate. + + Besides "none", there are 9 possible values of par_align: + xminymin xmidymin xmaxymin + xminymid xmidymid xmaxymid + xminymax xmidymax xmaxymax + """ + + if (((ar_doc >= ar_vb) and (par_mos == "meet")) + or ((ar_doc < ar_vb) and (par_mos == "slice"))): + # Case 1: Scale document up until VB fills doc in X. + + sx = d_width / width + sy = sx # Uniform aspect ratio + ox = -min_x + + scaled_vb_height = ar_doc * width + excess_height = scaled_vb_height - height + + if par_align in {"xminymin", "xmidymin", "xmaxymin"}: + # Case: Y-Min: Align viewbox to minimum Y of the viewport. + oy = -min_y + # OK: tested with Tall-Meet, Wide-Slice + + elif par_align in {"xminymax", "xmidymax", "xmaxymax"}: + # Case: Y-Max: Align viewbox to maximum Y of the viewport. + oy = -min_y + excess_height + # OK: tested with Tall-Meet, Wide-Slice + + else: # par_align in {"xminymid", "xmidymid", "xmaxymid"}: + # Default case: Y-Mid: Center viewbox on page in Y + oy = -min_y + excess_height / 2 + # OK: Tested with Tall-Meet, Wide-Slice + + return sx,sy,ox,oy + else: + # Case 2: Scale document up until VB fills doc in Y. + + sy = d_height / height + sx = sy # Uniform aspect ratio + oy = -min_y + + scaled_vb_width = height / ar_doc + excess_width = scaled_vb_width - width + + if par_align in {"xminymin", "xminymid", "xminymax"}: + # Case: X-Min: Align viewbox to minimum X of the viewport. + ox = -min_x + # OK: Tested with Tall-Slice, Wide-Meet + + elif par_align in {"xmaxymin", "xmaxymid", "xmaxymax"}: + # Case: X-Max: Align viewbox to maximum X of the viewport. + ox = -min_x + excess_width + # Need test: Tall-Slice, Wide-Meet + + else: # par_align in {"xmidymin", "xmidymid", "xmidymax"}: + # Default case: X-Mid: Center viewbox on page in X + ox = -min_x + excess_width / 2 + # OK: Tested with Tall-Slice, Wide-Meet + + return sx,sy,ox,oy + return 1,1,0,0 # Catch-all: return default transform + + +def vInitial_VF_A_Dx(v_final, acceleration, delta_x): + """ + Kinematic calculation: Maximum allowed initial velocity to arrive at distance X + with specified final velocity, and given maximum linear acceleration. + + Calculate and return the (real) initial velocity, given an final velocity, + acceleration rate, and distance interval. + + Uses the kinematic equation Vi^2 = Vf^2 - 2 a D_x , where + Vf is the final velocity, + a is the acceleration rate, + D_x (delta x) is the distance interval, and + Vi is the initial velocity. + + We are looking at the positive root only-- if the argument of the sqrt + is less than zero, return -1, to indicate a failure. + """ + initial_v_squared = (v_final * v_final) - (2 * acceleration * delta_x) + if initial_v_squared > 0: + return sqrt(initial_v_squared) + else: + return -1 + + +def vFinal_Vi_A_Dx(v_initial, acceleration, delta_x): + """ + Kinematic calculation: Final velocity with constant linear acceleration. + + Calculate and return the (real) final velocity, given an initial velocity, + acceleration rate, and distance interval. + + Uses the kinematic equation Vf^2 = 2 a D_x + Vi^2, where + Vf is the final velocity, + a is the acceleration rate, + D_x (delta x) is the distance interval, and + Vi is the initial velocity. + + We are looking at the positive root only-- if the argument of the sqrt + is less than zero, return -1, to indicate a failure. + """ + final_v_squared = (2 * acceleration * delta_x) + (v_initial * v_initial) + if final_v_squared > 0: + return sqrt(final_v_squared) + else: + return -1 + + +def pathdata_first_point(path): + """ + Return the first (X,Y) point from an SVG path data string + + Input: A path data string; the text of the 'd' attribute of an SVG path + Output: Two floats in a list representing the x and y coordinates of the first point + """ + + # Path origin's default values are used to see if we have + # Written anything to the path_origin variable yet + MaxLength = len(path) + ix = 0 + tempString = '' + x_val = '' + y_val = '' + # Check one char at a time + # until we have the moveTo Command + while ix < MaxLength: + if path[ix].upper() == 'M': + break + # Increment until we have M + ix = ix + 1 + + # Parse path until we reach a digit, decimal point or negative sign + while ix < MaxLength: + if(path[ix].isdigit()) or path[ix] == '.' or path[ix] == '-': + break + ix = ix + 1 + + # Add digits and decimal points to x_val + # Stop parsing when next character is neither a digit nor a decimal point + while ix < MaxLength: + if (path[ix].isdigit()): + tempString = tempString + path[ix] + x_val = float(tempString ) + ix = ix + 1 + # If next character is a decimal place, save the decimal and continue parsing + # This allows for paths without leading zeros to be parsed correctly + elif (path[ix] == '.' or path[ix] == '-'): + tempString = tempString + path[ix] + ix = ix + 1 + else: + ix = ix + 1 + break + + # Reset tempString for y coordinate + tempString = '' + + # Parse path until we reach a digit or decimal point + while ix < MaxLength: + if(path[ix].isdigit()) or path[ix] == '.' or path[ix] == '-': + break + ix = ix + 1 + + # Add digits and decimal points to y_val + # Stop parsin when next character is neither a digit nor a decimal point + while ix < MaxLength: + if (path[ix].isdigit() ): + tempString = tempString + path[ix] + y_val = float(tempString) + ix = ix + 1 + # If next character is a decimal place, save the decimal and continue parsing + # This allows for paths without leading zeros to be parsed correctly + elif (path[ix] == '.' or path[ix] == '-'): + tempString = tempString + path[ix] + ix = ix + 1 + else: + ix = ix + 1 + break + return [x_val,y_val] + + +def pathdata_last_point(path): + """ + Return the last (X,Y) point from an SVG path data string + + Input: A path data string; the text of the 'd' attribute of an SVG path + Output: Two floats in a list representing the x and y coordinates of the last point + """ + + command, params = simplepath.parsePath(path)[-1] # parsePath splits path into segments + + if command.upper() == 'Z': + return pathdata_first_point(path) # Trivial case + + """ + Otherwise: The last command should be in the set 'MLCQA' + - All commands converted to absolute by parsePath. + - Can ignore Z (case handled) + - Can ignore H,V, since those are converted to L by parsePath. + - Can ignore S, converted to C by parsePath. + - Can ignore T, converted to Q by parsePath. + + MLCQA: Commands all ending in (X,Y) pair. + """ + + x_val = params[-2] # Second to last parameter given + y_val = params[-1] # Last parameter given + + return [x_val,y_val] diff --git a/extensions/fablabchemnitz/optimize_sequence_travel_distance/simplepath.py b/extensions/fablabchemnitz/optimize_sequence_travel_distance/simplepath.py new file mode 100644 index 00000000..81e3cd9e --- /dev/null +++ b/extensions/fablabchemnitz/optimize_sequence_travel_distance/simplepath.py @@ -0,0 +1,211 @@ +""" +simplepath.py +functions for digesting paths into a simple list structure + +Copyright (C) 2005 Aaron Spike, aaron@ekips.org + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +""" +import re, math + +def lexPath(d): + """ + returns and iterator that breaks path data + identifies command and parameter tokens + """ + offset = 0 + length = len(d) + delim = re.compile(r'[ \t\r\n,]+') + command = re.compile(r'[MLHVCSQTAZmlhvcsqtaz]') + parameter = re.compile(r'(([-+]?[0-9]+(\.[0-9]*)?|[-+]?\.[0-9]+)([eE][-+]?[0-9]+)?)') + while 1: + m = delim.match(d, offset) + if m: + offset = m.end() + if offset >= length: + break + m = command.match(d, offset) + if m: + yield [d[offset:m.end()], True] + offset = m.end() + continue + m = parameter.match(d, offset) + if m: + yield [d[offset:m.end()], False] + offset = m.end() + continue + #TODO: create new exception + raise Exception('Invalid path data!') +''' +pathdefs = {commandfamily: + [ + implicitnext, + #params, + [casts,cast,cast], + [coord type,x,y,0] + ]} +''' +pathdefs = { + 'M':['L', 2, [float, float], ['x','y']], + 'L':['L', 2, [float, float], ['x','y']], + 'H':['H', 1, [float], ['x']], + 'V':['V', 1, [float], ['y']], + 'C':['C', 6, [float, float, float, float, float, float], ['x','y','x','y','x','y']], + 'S':['S', 4, [float, float, float, float], ['x','y','x','y']], + 'Q':['Q', 4, [float, float, float, float], ['x','y','x','y']], + 'T':['T', 2, [float, float], ['x','y']], + 'A':['A', 7, [float, float, float, int, int, float, float], ['r','r','a',0,'s','x','y']], + 'Z':['L', 0, [], []] + } +def parsePath(d): + """ + Parse SVG path and return an array of segments. + Removes all shorthand notation. + Converts coordinates to absolute. + """ + retval = [] + lexer = lexPath(d) + + pen = (0.0,0.0) + subPathStart = pen + lastControl = pen + lastCommand = '' + + while 1: + try: + token, isCommand = next(lexer) + except StopIteration: + break + params = [] + needParam = True + if isCommand: + if not lastCommand and token.upper() != 'M': + raise Exception('Invalid path, must begin with moveto.') + else: + command = token + else: + #command was omited + #use last command's implicit next command + needParam = False + if lastCommand: + if lastCommand.isupper(): + command = pathdefs[lastCommand][0] + else: + command = pathdefs[lastCommand.upper()][0].lower() + else: + raise Exception('Invalid path, no initial command.') + numParams = pathdefs[command.upper()][1] + while numParams > 0: + if needParam: + try: + token, isCommand = next(lexer) + if isCommand: + raise Exception('Invalid number of parameters') + except StopIteration: + raise Exception('Unexpected end of path') + cast = pathdefs[command.upper()][2][-numParams] + param = cast(token) + if command.islower(): + if pathdefs[command.upper()][3][-numParams]=='x': + param += pen[0] + elif pathdefs[command.upper()][3][-numParams]=='y': + param += pen[1] + params.append(param) + needParam = True + numParams -= 1 + #segment is now absolute so + outputCommand = command.upper() + + #Flesh out shortcut notation + if outputCommand in ('H','V'): + if outputCommand == 'H': + params.append(pen[1]) + if outputCommand == 'V': + params.insert(0,pen[0]) + outputCommand = 'L' + if outputCommand in ('S','T'): + params.insert(0,pen[1]+(pen[1]-lastControl[1])) + params.insert(0,pen[0]+(pen[0]-lastControl[0])) + if outputCommand == 'S': + outputCommand = 'C' + if outputCommand == 'T': + outputCommand = 'Q' + + #current values become "last" values + if outputCommand == 'M': + subPathStart = tuple(params[0:2]) + pen = subPathStart + if outputCommand == 'Z': + pen = subPathStart + else: + pen = tuple(params[-2:]) + + if outputCommand in ('Q','C'): + lastControl = tuple(params[-4:-2]) + else: + lastControl = pen + lastCommand = command + + retval.append([outputCommand,params]) + return retval + +def formatPath(a): + """Format SVG path data from an array""" + return "".join([cmd + " ".join([str(p) for p in params]) for cmd, params in a]) + +def translatePath(p, x, y): + for cmd,params in p: + defs = pathdefs[cmd] + for i in range(defs[1]): + if defs[3][i] == 'x': + params[i] += x + elif defs[3][i] == 'y': + params[i] += y + +def scalePath(p, x, y): + for cmd,params in p: + defs = pathdefs[cmd] + for i in range(defs[1]): + if defs[3][i] == 'x': + params[i] *= x + elif defs[3][i] == 'y': + params[i] *= y + elif defs[3][i] == 'r': # radius parameter + params[i] *= x + elif defs[3][i] == 's': # sweep-flag parameter + if x*y < 0: + params[i] = 1 - params[i] + elif defs[3][i] == 'a': # x-axis-rotation angle + if y < 0: + params[i] = - params[i] + +def rotatePath(p, a, cx = 0, cy = 0): + if a == 0: + return p + for cmd,params in p: + defs = pathdefs[cmd] + for i in range(defs[1]): + if defs[3][i] == 'x': + x = params[i] - cx + y = params[i + 1] - cy + r = math.sqrt((x**2) + (y**2)) + if r != 0: + theta = math.atan2(y, x) + a + params[i] = (r * math.cos(theta)) + cx + params[i + 1] = (r * math.sin(theta)) + cy + + +# vim: expandtab shiftwidth=4 tabstop=8 softtabstop=4 fileencoding=utf-8 textwidth=99 diff --git a/extensions/fablabchemnitz/optimize_sequence_travel_distance/simpletransform.py b/extensions/fablabchemnitz/optimize_sequence_travel_distance/simpletransform.py new file mode 100644 index 00000000..e615fc1d --- /dev/null +++ b/extensions/fablabchemnitz/optimize_sequence_travel_distance/simpletransform.py @@ -0,0 +1,261 @@ +''' +Copyright (C) 2006 Jean-Francois Barraud, barraud@math.univ-lille1.fr +Copyright (C) 2010 Alvin Penner, penner@vaxxine.com + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +barraud@math.univ-lille1.fr + +This code defines several functions to make handling of transform +attribute easier. +''' +import inkex, cubicsuperpath, bezmisc, simplestyle +import copy, math, re + +def parseTransform(transf,mat=[[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]]): + if transf=="" or transf==None: + return(mat) + stransf = transf.strip() + result=re.match(r"(translate|scale|rotate|skewX|skewY|matrix)\s*\(([^)]*)\)\s*,?",stransf) +#-- translate -- + if result.group(1)=="translate": + args=result.group(2).replace(',',' ').split() + dx=float(args[0]) + if len(args)==1: + dy=0.0 + else: + dy=float(args[1]) + matrix=[[1,0,dx],[0,1,dy]] +#-- scale -- + if result.group(1)=="scale": + args=result.group(2).replace(',',' ').split() + sx=float(args[0]) + if len(args)==1: + sy=sx + else: + sy=float(args[1]) + matrix=[[sx,0,0],[0,sy,0]] +#-- rotate -- + if result.group(1)=="rotate": + args=result.group(2).replace(',',' ').split() + a=float(args[0])*math.pi/180 + if len(args)==1: + cx,cy=(0.0,0.0) + else: + cx,cy=map(float,args[1:]) + matrix=[[math.cos(a),-math.sin(a),cx],[math.sin(a),math.cos(a),cy]] + matrix=composeTransform(matrix,[[1,0,-cx],[0,1,-cy]]) +#-- skewX -- + if result.group(1)=="skewX": + a=float(result.group(2))*math.pi/180 + matrix=[[1,math.tan(a),0],[0,1,0]] +#-- skewY -- + if result.group(1)=="skewY": + a=float(result.group(2))*math.pi/180 + matrix=[[1,0,0],[math.tan(a),1,0]] +#-- matrix -- + if result.group(1)=="matrix": + a11,a21,a12,a22,v1,v2=result.group(2).replace(',',' ').split() + matrix=[[float(a11),float(a12),float(v1)], [float(a21),float(a22),float(v2)]] + + matrix=composeTransform(mat,matrix) + if result.end() < len(stransf): + return(parseTransform(stransf[result.end():], matrix)) + else: + return matrix + +def formatTransform(mat): + return ("matrix(%f,%f,%f,%f,%f,%f)" % (mat[0][0], mat[1][0], mat[0][1], mat[1][1], mat[0][2], mat[1][2])) + +def invertTransform(mat): + det = mat[0][0]*mat[1][1] - mat[0][1]*mat[1][0] + if det !=0: # det is 0 only in case of 0 scaling + # invert the rotation/scaling part + a11 = mat[1][1]/det + a12 = -mat[0][1]/det + a21 = -mat[1][0]/det + a22 = mat[0][0]/det + # invert the translational part + a13 = -(a11*mat[0][2] + a12*mat[1][2]) + a23 = -(a21*mat[0][2] + a22*mat[1][2]) + return [[a11,a12,a13],[a21,a22,a23]] + else: + return[[0,0,-mat[0][2]],[0,0,-mat[1][2]]] + +def composeTransform(M1,M2): + a11 = M1[0][0]*M2[0][0] + M1[0][1]*M2[1][0] + a12 = M1[0][0]*M2[0][1] + M1[0][1]*M2[1][1] + a21 = M1[1][0]*M2[0][0] + M1[1][1]*M2[1][0] + a22 = M1[1][0]*M2[0][1] + M1[1][1]*M2[1][1] + + v1 = M1[0][0]*M2[0][2] + M1[0][1]*M2[1][2] + M1[0][2] + v2 = M1[1][0]*M2[0][2] + M1[1][1]*M2[1][2] + M1[1][2] + return [[a11,a12,v1],[a21,a22,v2]] + +def composeParents(node, mat): + trans = node.get('transform') + if trans: + mat = composeTransform(parseTransform(trans), mat) + if node.getparent().tag == inkex.addNS('g','svg'): + mat = composeParents(node.getparent(), mat) + return mat + +def applyTransformToNode(mat,node): + m=parseTransform(node.get("transform")) + newtransf=formatTransform(composeTransform(mat,m)) + node.set("transform", newtransf) + +def applyTransformToPoint(mat,pt): + x = mat[0][0]*pt[0] + mat[0][1]*pt[1] + mat[0][2] + y = mat[1][0]*pt[0] + mat[1][1]*pt[1] + mat[1][2] + pt[0]=x + pt[1]=y + +def applyTransformToPath(mat,path): + for comp in path: + for ctl in comp: + for pt in ctl: + applyTransformToPoint(mat,pt) + +def fuseTransform(node): + if node.get('d')==None: + #FIXME: how do you raise errors? + raise AssertionError('can not fuse "transform" of elements that have no "d" attribute') + t = node.get("transform") + if t == None: + return + m = parseTransform(t) + d = node.get('d') + p = cubicsuperpath.parsePath(d) + applyTransformToPath(m,p) + node.set('d', cubicsuperpath.formatPath(p)) + del node.attrib["transform"] + +#################################################################### +##-- Some functions to compute a rough bbox of a given list of objects. +##-- this should be shipped out in an separate file... + +def boxunion(b1,b2): + if b1 is None: + return b2 + elif b2 is None: + return b1 + else: + return((min(b1[0],b2[0]), max(b1[1],b2[1]), min(b1[2],b2[2]), max(b1[3],b2[3]))) + +def roughBBox(path): + xmin,xMax,ymin,yMax = path[0][0][0][0],path[0][0][0][0],path[0][0][0][1],path[0][0][0][1] + for pathcomp in path: + for ctl in pathcomp: + for pt in ctl: + xmin = min(xmin,pt[0]) + xMax = max(xMax,pt[0]) + ymin = min(ymin,pt[1]) + yMax = max(yMax,pt[1]) + return xmin,xMax,ymin,yMax + +def refinedBBox(path): + xmin,xMax,ymin,yMax = path[0][0][1][0],path[0][0][1][0],path[0][0][1][1],path[0][0][1][1] + for pathcomp in path: + for i in range(1, len(pathcomp)): + cmin, cmax = cubicExtrema(pathcomp[i-1][1][0], pathcomp[i-1][2][0], pathcomp[i][0][0], pathcomp[i][1][0]) + xmin = min(xmin, cmin) + xMax = max(xMax, cmax) + cmin, cmax = cubicExtrema(pathcomp[i-1][1][1], pathcomp[i-1][2][1], pathcomp[i][0][1], pathcomp[i][1][1]) + ymin = min(ymin, cmin) + yMax = max(yMax, cmax) + return xmin,xMax,ymin,yMax + +def cubicExtrema(y0, y1, y2, y3): + cmin = min(y0, y3) + cmax = max(y0, y3) + d1 = y1 - y0 + d2 = y2 - y1 + d3 = y3 - y2 + if (d1 - 2*d2 + d3): + if (d2*d2 > d1*d3): + t = (d1 - d2 + math.sqrt(d2*d2 - d1*d3))/(d1 - 2*d2 + d3) + if (t > 0) and (t < 1): + y = y0*(1-t)*(1-t)*(1-t) + 3*y1*t*(1-t)*(1-t) + 3*y2*t*t*(1-t) + y3*t*t*t + cmin = min(cmin, y) + cmax = max(cmax, y) + t = (d1 - d2 - math.sqrt(d2*d2 - d1*d3))/(d1 - 2*d2 + d3) + if (t > 0) and (t < 1): + y = y0*(1-t)*(1-t)*(1-t) + 3*y1*t*(1-t)*(1-t) + 3*y2*t*t*(1-t) + y3*t*t*t + cmin = min(cmin, y) + cmax = max(cmax, y) + elif (d3 - d1): + t = -d1/(d3 - d1) + if (t > 0) and (t < 1): + y = y0*(1-t)*(1-t)*(1-t) + 3*y1*t*(1-t)*(1-t) + 3*y2*t*t*(1-t) + y3*t*t*t + cmin = min(cmin, y) + cmax = max(cmax, y) + return cmin, cmax + +def computeBBox(aList,mat=[[1,0,0],[0,1,0]]): + bbox=None + for node in aList: + m = parseTransform(node.get('transform')) + m = composeTransform(mat,m) + #TODO: text not supported! + d = None + if node.get("d"): + d = node.get('d') + elif node.get('points'): + d = 'M' + node.get('points') + elif node.tag in [ inkex.addNS('rect','svg'), 'rect', inkex.addNS('image','svg'), 'image' ]: + d = 'M' + node.get('x', '0') + ',' + node.get('y', '0') + \ + 'h' + node.get('width') + 'v' + node.get('height') + \ + 'h-' + node.get('width') + elif node.tag in [ inkex.addNS('line','svg'), 'line' ]: + d = 'M' + node.get('x1') + ',' + node.get('y1') + \ + ' ' + node.get('x2') + ',' + node.get('y2') + elif node.tag in [ inkex.addNS('circle','svg'), 'circle', \ + inkex.addNS('ellipse','svg'), 'ellipse' ]: + rx = node.get('r') + if rx is not None: + ry = rx + else: + rx = node.get('rx') + ry = node.get('ry') + cx = float(node.get('cx', '0')) + cy = float(node.get('cy', '0')) + x1 = cx - float(rx) + x2 = cx + float(rx) + d = 'M %f %f ' % (x1, cy) + \ + 'A' + rx + ',' + ry + ' 0 1 0 %f,%f' % (x2, cy) + \ + 'A' + rx + ',' + ry + ' 0 1 0 %f,%f' % (x1, cy) + + if d is not None: + p = cubicsuperpath.parsePath(d) + applyTransformToPath(m,p) + bbox=boxunion(refinedBBox(p),bbox) + + elif node.tag == inkex.addNS('use','svg') or node.tag=='use': + refid=node.get(inkex.addNS('href','xlink')) + path = '//*[@id="%s"]' % refid[1:] + refnode = node.xpath(path) + bbox=boxunion(computeBBox(refnode,m),bbox) + + bbox=boxunion(computeBBox(node,m),bbox) + return bbox + + +def computePointInNode(pt, node, mat=[[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]]): + if node.getparent() is not None: + applyTransformToPoint(invertTransform(composeParents(node, mat)), pt) + return pt + + +# vim: expandtab shiftwidth=4 tabstop=8 softtabstop=4 fileencoding=utf-8 textwidth=99 diff --git a/extensions/fablabchemnitz/origami_patterns/OrigamiPatterns/Hypar.py b/extensions/fablabchemnitz/origami_patterns/OrigamiPatterns/Hypar.py new file mode 100644 index 00000000..699b563d --- /dev/null +++ b/extensions/fablabchemnitz/origami_patterns/OrigamiPatterns/Hypar.py @@ -0,0 +1,112 @@ +#! /usr/bin/env python3 + +import numpy as np +from math import pi, tan, sqrt, sin, cos +import inkex +from Path import Path +from Pattern import Pattern + +class Hypar(Pattern): + def __init__(self): + Pattern.__init__(self) # Must be called in order to parse common options + self.add_argument("-p", "--pattern", default="template1", help="Origami pattern") + self.add_argument("--radius", type=float, default=10.0, help="Radius of tower (mm)") + self.add_argument("--sides", type=int, default=4, help="Number of polygon sides") + self.add_argument("--rings", type=int, default=7, help="Number of rings") + self.add_argument("--simplify_center", type=inkex.Boolean, default=0, help="Simplify center") + + def generate_path_tree(self): + """ Specialized path generation for your origami pattern + """ + # retrieve saved parameters + unit_factor = self.calc_unit_factor() + vertex_radius = self.options.vertex_radius * unit_factor + pattern = self.options.pattern + radius = self.options.radius * unit_factor + sides = self.options.sides + rings = self.options.rings + simplify_center = self.options.simplify_center + sin_ = sin(pi / float(sides)) + a = radius*sin_ # half of length of polygon side + H = radius*sqrt(1 - sin_**2) + + polygon = Path.generate_polygon(sides, radius, 'e') + + # # OLD diagonals generation with universal creases + # diagonals = [] + # for i in range(sides): + # diagonals.append(Path([(0, 0), polygon.points[i]], 'u')) + # points = [(x, y) for x, y in polygon.points] + # diagonals = diagonals + [Path.generate_separated_paths(points, 'm')] + + # # modify center if needed + # if simplify_center: + # for i in range(sides): + # if i % 2 == 0: + # p2 = diagonals[i].points[1] + # diagonals[i].points[0] = (1. / (rings + 1) * p2[0], 1. / (rings + 1) * p2[1]) + + # separate generic closed ring to create edges + self.edge_points = polygon.points + + # vertex and diagonal lines creation + vertex_line = [] + diagonal_line = [] + for i in range(1, rings + 2): + y1 = a * (float(i - 1) / (rings + 1.)) + x1 = H * float(i - 1) / (rings + 1.) + y2 = a * (float(i) / (rings + 1.)) + x2 = H * float(i) / (rings + 1.) + vertex_line.append((Path((x2, y2), style='p', radius=vertex_radius))) + diagonal_line.append((Path([(x1, y1), (x2, y2)], style='m' if i % 2 else 'v'))) + + # rotation of vertices and diagonals for completing the drawing + diagonals = [] + vertices = [Path((0, 0), style='p', radius=vertex_radius)] + for i in range(sides): + vertices = vertices+Path.list_rotate(vertex_line, i * 2 * pi / float(sides)) + diagonals = diagonals+[Path.list_rotate(diagonal_line, i * 2 * pi / float(sides))] + + # modify center if needed + if simplify_center: + for i in range(sides): + if i % 2 == 0: + del diagonals[i][0] + + # inkex.debug(len(diagonals)) + # inkex.debug(len(diagonals[0])) + # diagonals = diagonals + diagonal + + # scale generic closed ring to create inner rings + inner_rings = [] + for i in range(rings + 1): + inner_rings.append(polygon * (float(i)/(rings+1))) + inner_rings[i].style = 'v' if i % 2 else 'm' + + # create points for zig zag pattern + zig_zags = [] + if pattern != "classic": + zig_zag = [] + for i in range(1, rings + 1): + y_out = a * ((i + 1.) / (rings + 1.)) + y_in = a * (float(i) / (rings + 1.)) + x_out = H * (i + 1.) / (rings + 1.) + x_in = H * float(i) / (rings + 1.) + + if pattern == "alternate_asymmetric" and i % 2: + zig_zag.append(Path([(x_in, -y_in), (x_out, +y_out)], style='u')) + else: + zig_zag.append(Path([(x_in, +y_in), (x_out, -y_out)], style='u')) + + # reflect zig zag pattern to create all sides + zig_zags.append(zig_zag) + for i in range(sides - 1): + points = diagonals[i][0].points + zig_zags.append(Path.list_reflect(zig_zags[i], points[0], points[1])) + + self.translate = (radius, radius) + self.path_tree = [diagonals, zig_zags, inner_rings, vertices] + +# Main function, creates an instance of the Class and calls inkex.affect() to draw the origami on inkscape +if __name__ == '__main__': + Hypar().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/origami_patterns/OrigamiPatterns/Kresling.py b/extensions/fablabchemnitz/origami_patterns/OrigamiPatterns/Kresling.py new file mode 100644 index 00000000..6c3ef0d1 --- /dev/null +++ b/extensions/fablabchemnitz/origami_patterns/OrigamiPatterns/Kresling.py @@ -0,0 +1,154 @@ +#! /usr/bin/env python3 + +from math import pi, sin, cos, tan, acos, sqrt +import inkex +from Path import Path +from Pattern import Pattern + +class Kresling(Pattern): + def __init__(self): + Pattern.__init__(self) # Must be called in order to parse common options + self.add_argument("-p", "--pattern", default="kresling", help="Origami pattern") + self.add_argument("--lines", type=int, default=1, help="Number of lines") + self.add_argument("--sides", type=int, default=3, help="Number of polygon sides") + self.add_argument("--add_attachment", type=inkex.Boolean, default=False, help="Add attachment?") + self.add_argument("--attachment_percentage", type=float, default=100., help="Length percentage of extra facet") + self.add_argument("--mirror_cells", type=inkex.Boolean, default=False, help="Mirror odd cells?") + + @staticmethod + def generate_kresling_zigzag(sides, radius, angle_ratio, add_attachment): + + theta = (pi / 2.) * (1 - 2. / sides) + l = 2. * radius * cos(theta * (1. - angle_ratio)) + a = 2. * radius * sin(pi / sides) + # b = sqrt(a * a + l * l - 2 * a * l * cos(angle_ratio * theta)) + # phi = abs(acos((l * l + b * b - a * a) / (2 * l * b))) + # gamma = pi / 2 - angle_ratio * theta - phi + dy = l * sin(theta * angle_ratio) + dx = l * cos(theta * angle_ratio) - a + + points = [] + styles = [] + + for i in range(sides): + points.append((i * a, 0)) + points.append(((i + 1) * a + dx, -dy)) + styles.append('v') + if i != sides - 1: + styles.append('m') + elif add_attachment: + points.append((sides * a, 0)) + styles.append('m') + + path = Path.generate_separated_paths(points, styles) + return path + + def generate_path_tree(self): + """ Specialized path generation for Waterbomb tesselation pattern + """ + unit_factor = self.calc_unit_factor() + vertex_radius = self.options.vertex_radius * unit_factor + lines = self.options.lines + sides = self.options.sides + radius = self.options.radius * unit_factor + angle_ratio = self.options.angle_ratio + mirror_cells = self.options.mirror_cells + + theta = (pi/2.)*(1 - 2./sides) + l = 2.*radius*cos(theta*(1.-angle_ratio)) + a = 2.*radius*sin(pi/sides) + # b = sqrt(a*a + l*l - 2*a*l*cos(angle_ratio*theta)) + # phi = abs(acos((l*l + b*b - a*a)/(2*l*b))) + # gamma = pi/2 - angle_ratio*theta - phi + # dy = b*cos(gamma) + # dx = b*sin(gamma) + dy = l * sin(theta * angle_ratio) + dx = l * cos(theta * angle_ratio) - a + + add_attachment = self.options.add_attachment + attachment_percentage = self.options.attachment_percentage/100. + attachment_height = a*(attachment_percentage-1)*tan(angle_ratio*theta) + + vertices = [] + for i in range(sides + 1): + for j in range(lines + 1): + if mirror_cells: + vertices.append(Path((dx*((lines - j)%2) + a*i, dy*j), style='p', radius=vertex_radius)) + else: + vertices.append(Path((dx*(lines - j) + a*i, dy*j), style='p', radius=vertex_radius)) + + # create a horizontal grid, then offset each line according to angle + grid_h = Path.generate_hgrid([0, a * sides], [0, dy * lines], lines, 'm') + + + if not mirror_cells: + # shift every mountain line of the grid to the right by increasing amounts + grid_h = Path.list_add(grid_h, [(i * dx, 0) for i in range(lines - 1, 0, -1)]) + else: + # shift every OTHER mountain line of the grid a bit to the right + grid_h = Path.list_add(grid_h, [((i%2)*dx, 0) for i in range(lines-1, 0, -1)]) + if add_attachment: + for i in range(lines%2, lines-1, 2): + # hacky solution, changes length of every other mountain line + grid_h[i].points[1-i%2] = (grid_h[i].points[1-i%2][0] + a*attachment_percentage, grid_h[i].points[1-i%2][1]) + + + # create MV zigzag for Kresling pattern + zigzag = Kresling.generate_kresling_zigzag(sides, radius, angle_ratio, add_attachment) + zigzags = [] + + # duplicate zigzag pattern for desired number of cells + if not mirror_cells: + for i in range(lines): + zigzags.append(Path.list_add(zigzag, (i * dx, (lines - i) * dy))) + else: + zigzag_mirror = Path.list_reflect(zigzag, (0, lines * dy / 2), (dx, lines * dy / 2)) + for i in range(lines): + if i % 2 == 1: + zigzags.append(Path.list_add(zigzag_mirror, (0, -(lines - i + (lines-1)%2) * dy))) + else: + zigzags.append(Path.list_add(zigzag, (0, (lines - i) * dy))) + + # create edge strokes + if not mirror_cells: + self.edge_points = [ + (a * sides , dy * lines), # bottom right + (0 , dy * lines), # bottom left + (dx * lines , 0), # top left + (dx * lines + a * sides, 0)] # top right + + if add_attachment: + for i in range(lines): + x = dx * (lines - i) + a * (sides + attachment_percentage) + self.edge_points.append((x, dy * i)) + self.edge_points.append((x, dy * i - attachment_height)) + if i != lines - 1: + self.edge_points.append((x-dx-a*attachment_percentage, dy * (i + 1))) + pass + + else: + self.edge_points = [(a * sides + (lines % 2)*dx, 0)] + + for i in range(lines+1): + self.edge_points.append([((lines+i) % 2)*dx, dy*i]) + + self.edge_points.append([a * sides + ((lines+i) %2)*dx, lines*dy]) + + if add_attachment: + for i in range(lines + 1): + + if not i%2 == 0: + self.edge_points.append([a*sides + (i%2)*(dx+a*attachment_percentage), dy*(lines - i) - (i%2)*attachment_height]) + self.edge_points.append([a*sides + (i%2)*(dx+a*attachment_percentage), dy*(lines - i)]) + if (i != lines): + self.edge_points.append([a * sides + (i % 2) * (dx + a * attachment_percentage), dy * (lines - i) + (i % 2) * attachment_height]) + else: + self.edge_points.append([a * sides + (i % 2) * (dx + a * attachment_percentage), dy * (lines - i)]) + else: + for i in range(lines + 1): + self.edge_points.append([a*sides + (i%2)*dx, dy*(lines - i)]) + + self.path_tree = [grid_h, zigzags, vertices] + +if __name__ == '__main__': + Kresling().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/origami_patterns/OrigamiPatterns/Kresling_full.py b/extensions/fablabchemnitz/origami_patterns/OrigamiPatterns/Kresling_full.py new file mode 100644 index 00000000..5d55d004 --- /dev/null +++ b/extensions/fablabchemnitz/origami_patterns/OrigamiPatterns/Kresling_full.py @@ -0,0 +1,89 @@ +#! /usr/bin/env python3 + +from math import sin, cos, sqrt, asin, pi, ceil +import inkex +from Path import Path +from Pattern import Pattern +from Kresling import Kresling + + +class Kresling_Full(Kresling): + + def __init__(self): + """ Constructor + """ + Kresling.__init__(self) # Must be called in order to parse common options + + self.add_argument('--measure_value', type=float, default=10.0, help="Length") + self.add_argument('--measure_type', default=60, help="Type of length") + self.add_argument('--parameter_type', default=60, help="Type of parameter") + self.add_argument('--radial_ratio', type=float, default=0.5, help="Radial ratio") + self.add_argument('--angle_ratio', type=float, default=0.5, help="Anle ratio") + self.add_argument('--lambdatheta', type=float, default=45, help="lambdatheta") + + def generate_path_tree(self): + """ Convert radial to angular ratio, then call regular Kresling constructor + """ + n = self.options.sides + theta = pi*(n-2)/(2*n) + # define ratio parameter + parameter = self.options.parameter_type + if parameter == 'radial_ratio': + radial_ratio = self.options.radial_ratio + max_radial_ratio = sin((pi/4)*(1. - 2./n)) + if radial_ratio > max_radial_ratio: + inkex.errormsg(_("For polygon of {} sides, the maximal radial ratio is = {}".format(n, max_radial_ratio))) + radial_ratio = max_radial_ratio + self.options.angle_ratio = 1 - 2*n*asin(radial_ratio)/((n-2)*pi) + + elif parameter == 'lambdatheta': + lambdatheta = self.options.lambdatheta + angle_min = 45. * (1 - 2. / n) + angle_max = 2 * angle_min + if lambdatheta < angle_min: + inkex.errormsg(_( + "For polygon of {} sides, phi must be between {} and {} degrees, \nsetting lambda*theta = {}\n".format( + n, angle_min, angle_max, angle_min))) + lambdatheta = angle_min + elif lambdatheta > angle_max: + inkex.errormsg(_( + "For polygon of {} sides, phi must be between {} and {} degrees, \nsetting lambda*theta = {}\n".format( + n, angle_min, angle_max, angle_max))) + lambdatheta = angle_max + self.options.angle_ratio = lambdatheta * n / (90. * (n - 2.)) + + + # define some length + mtype = self.options.measure_type + mvalue = self.options.measure_value + angle_ratio = self.options.angle_ratio + if mtype == 'a': + radius = 0.5*mvalue / (sin(pi/n)) + if mtype == 'b': + A = cos(theta*(1-angle_ratio)) + B = sin(pi/n) + C = cos(theta*angle_ratio) + radius = 0.5*mvalue / sqrt(A**2 + B**2 - 2*A*B*C) + elif mtype == 'l': + radius = 0.5*mvalue/cos(theta*(1-angle_ratio)) + elif mtype == 'radius_external': + radius = mvalue + elif mtype == 'radius_internal': + radius = mvalue/(sin(theta*(1-angle_ratio))) + elif mtype == 'diameter_external': + radius = 0.5*mvalue + elif mtype == 'diameter_internal': + radius = 0.5*mvalue/sin(theta*(1-angle_ratio)) + + # inkex.errormsg(_("Value = {}, Mode = {}, Radius = {}".format(mvalue, mtype, radius))) + + if self.options.pattern == 'mirrowed': + self.options.mirror_cells = True + else: + self.options.mirror_cells = False + self.options.radius = radius + + Kresling.generate_path_tree(self) + +if __name__ == '__main__': + Kresling_Full().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/origami_patterns/OrigamiPatterns/Path.py b/extensions/fablabchemnitz/origami_patterns/OrigamiPatterns/Path.py new file mode 100644 index 00000000..ceab873c --- /dev/null +++ b/extensions/fablabchemnitz/origami_patterns/OrigamiPatterns/Path.py @@ -0,0 +1,466 @@ +#! /usr/bin/env python3 + +import inkex +from lxml import etree +from math import sin, cos, pi + +class Path: + """ Class that defines an svg stroke to be drawn in Inkscape + + Attributes + --------- + points: tuple or list of tuples + Points defining stroke lines. + style: str + Single character defining style of stroke. Default values are: + 'm' for mountain creases + 'v' for valley creases + 'e' for edge borders + Extra possible values: + 'u' for universal creases + 's' for semicreases + 'c' for kirigami cuts + closed: bool + Tells if desired path should contain a last stroke from the last point to the first point, closing the path + radius: float + If only one point is given, it's assumed to be a circle and radius sets the radius + + + Methods + --------- + invert(self) + Inverts path + + Overloaded Operators + --------- + __add__(self, offsets) + Adding a tuple to a Path returns a new path with all points having an offset defined by the tuple + + __mul__(self, transform) + Define multiplication of a Path to a vector in complex exponential representation + + + Static Methods + --------- + draw_paths_recursively(path_tree, group, styles_dict) + Draws strokes defined on "path_tree" to "group". Styles dict maps style of path_tree element to the definition + of the style. Ex.: + if path_tree[i].style = 'm', styles_dict must have an element 'm'. + + generate_hgrid(cls, xlims, ylims, nb_of_divisions, style, include_edge=False) + Generate list of Path instances, in which each Path is a stroke defining a horizontal grid dividing the space + xlims * ylims nb_of_divisions times. + + generate_vgrid(cls, xlims, ylims, nb_of_divisions, style, include_edge=False) + Generate list of Path instances, in which each Path is a stroke defining a vertical grid dividing the space + xlims * ylims nb_of_divisions times. + + generate_separated_paths(cls, points, styles, closed=False) + Generate list of Path instances, in which each Path is the stroke between each two point tuples, in case each + stroke must be handled separately + + reflect(cls, path, p1, p2) + Reflects each point of path on line defined by two points and return new Path instance with new reflected points + + list_reflect(cls, paths, p1, p2) + Generate list of new Path instances, rotation each path by transform + + list_rotate(cls, paths, theta, translation=(0, 0)) + Generate list of new Path instances, rotation each path by transform + + list_add(cls, paths, offsets) + Generate list of new Path instances, adding a different tuple for each list + + + """ + + def __init__(self, points, style, closed=False, invert=False, radius=0.1, separated=False): + """ Constructor + + Parameters + --------- + points: list of 2D tuples + stroke will connect all points + style: str + Single character defining style of stroke. For use with the OrigamiPatterns class (probably the only + project that will ever use this file) the default values are: + 'm' for mountain creases + 'v' for valley creases + 'e' for edge borders + closed: bool + if true, last point will be connected to first point at the end + invert: bool + if true, stroke will start at the last point and go all the way to the first one + """ + if type(points) == list and len(points) != 1: + self.type = 'linear' + if invert: + self.points = points[::-1] + else: + self.points = points + + elif (type(points) == list and len(points) == 1): + self.type = 'circular' + self.points = points + self.radius = radius + + elif (type(points) == tuple and len(points) == 2): + self.type = 'circular' + self.points = [points] + self.radius = radius + + else: + raise TypeError("Points must be tuple of length 2 (for a circle) or a list of tuples of length 2 each") + + self.style = style + self.closed = closed + + def invert(self): + """ Inverts path + """ + self.points = self.points[::-1] + + """ + Draw path recursively + - Static method + - Draws strokes defined on "path_tree" to "group" + - Inputs: + -- path_tree [nested list] of Path instances + -- group [etree.SubElement] + -- styles_dict [dict] containing all styles for path_tree + """ + @staticmethod + def draw_paths_recursively(path_tree, group, styles_dict): + """ Static method, draw list of Path instances recursively + """ + for subpath in path_tree: + if type(subpath) == list: + if len(subpath) == 1: + subgroup = group + else: + subgroup = etree.SubElement(group, 'g') + Path.draw_paths_recursively(subpath, subgroup, styles_dict) + else: + if styles_dict[subpath.style]['draw']: + if subpath.type == 'linear': + + points = subpath.points + path = 'M{},{} '.format(*points[0]) + for i in range(1, len(points)): + path = path + 'L{},{} '.format(*points[i]) + if subpath.closed: + path = path + 'L{},{} Z'.format(*points[0]) + + attribs = {'style': str(inkex.Style(styles_dict[subpath.style])), 'd': path} + etree.SubElement(group, inkex.addNS('path', 'svg'), attribs) + else: + attribs = {'style': str(inkex.Style(styles_dict[subpath.style])), + 'cx': str(subpath.points[0][0]), 'cy': str(subpath.points[0][1]), + 'r': str(subpath.radius)} + etree.SubElement(group, inkex.addNS('circle', 'svg'), attribs) + + @classmethod + def generate_hgrid(cls, xlims, ylims, nb_of_divisions, style, include_edge=False): + """ Generate list of Path instances, in which each Path is a stroke defining + a horizontal grid dividing the space xlims * ylims nb_of_divisions times. + + All lines are alternated, to minimize Laser Cutter unnecessary movements + + Parameters + --------- + xlims: tuple + Defines x_min and x_max for space that must be divided. + ylims: tuple + Defines y_min and y_max for space that must be divided. + nb_of_divisions: int + Defines how many times it should be divided. + style: str + Single character defining style of stroke. + include_edge: bool + Defines if edge should be drawn or not. + + Returns + --------- + paths: list of Path instances + """ + rect_len = (ylims[1] - ylims[0])/nb_of_divisions + hgrid = [] + for i in range(1 - include_edge, nb_of_divisions + include_edge): + hgrid.append(cls([(xlims[0], ylims[0]+i*rect_len), + (xlims[1], ylims[0]+i*rect_len)], + style=style, invert=i % 2 == 0)) + return hgrid + + @classmethod + def generate_vgrid(cls, xlims, ylims, nb_of_divisions, style, include_edge=False): + """ Generate list of Path instances, in which each Path is a stroke defining + a vertical grid dividing the space xlims * ylims nb_of_divisions times. + + All lines are alternated, to minimize Laser Cutter unnecessary movements + + Parameters + --------- + -> refer to generate_hgrid + + Returns + --------- + paths: list of Path instances + """ + rect_len = (xlims[1] - xlims[0])/nb_of_divisions + vgrid = [] + for i in range(1 - include_edge, nb_of_divisions + include_edge): + vgrid.append(cls([(xlims[0]+i*rect_len, ylims[0]), + (xlims[0]+i*rect_len, ylims[1])], + style=style, invert=i % 2 == 0)) + return vgrid + + @classmethod + def generate_polygon(cls, sides, radius, style, center=(0, 0)): + points = [] + for i in range(sides): + points.append((radius * cos((1 + i * 2) * pi / sides), + radius * sin((1 + i * 2) * pi / sides))) + return Path(points, style, closed=True) + + @classmethod + def generate_separated_paths(cls, points, styles, closed=False): + """ Generate list of Path instances, in which each Path is the stroke + between each two point tuples, in case each stroke must be handled separately. + + Returns + --------- + paths: list + list of Path instances + """ + paths = [] + if type(styles) == str: + styles = [styles] * (len(points) - 1 + int(closed)) + elif len(styles) != len(points) - 1 + int(closed): + raise TypeError("Number of paths and styles don't match") + for i in range(len(points) - 1 + int(closed)): + j = (i+1)%len(points) + paths.append(cls([points[i], points[j]], + styles[i])) + return paths + + def __add__(self, offsets): + """ " + " operator overload. + Adding a tuple to a Path returns a new path with all points having an offset + defined by the tuple + """ + if type(offsets) == list: + if len(offsets) != 1 or len(offsets) != len(self.points): + raise TypeError("Paths can only be added by a tuple of a list of N tuples, " + "where N is the same number of points") + + elif type(offsets) != tuple: + raise TypeError("Paths can only be added by tuples") + else: + offsets = [offsets] * len(self.points) + + # if type(self.points) == list: + points_new = [] + for point, offset in zip(self.points, offsets): + points_new.append((point[0]+offset[0], + point[1]+offset[1])) + + if self.type == 'circular': + radius = self.radius + else: + radius = 0.2 + + # if self.type == 'circular' else 0.1 + + return Path(points_new, self.style, self.closed, radius=radius) + + @classmethod + def list_add(cls, paths, offsets): + """ Generate list of new Path instances, adding a different tuple for each list + + Parameters + --------- + paths: Path or list + list of N Path instances + offsets: tuple or list + list of N tuples + + Returns + --------- + paths_new: list + list of N Path instances + """ + if type(paths) == Path and type(offsets) == tuple: + paths = [paths] + offsets = [offsets] + elif type(paths) == list and type(offsets) == tuple: + offsets = [offsets] * len(paths) + elif type(paths) == Path and type(offsets) == list: + paths = [paths] * len(offsets) + elif type(paths) == list and type(offsets) == list: + if len(paths) == 1: + paths = [paths[0]] * len(offsets) + elif len(offsets) == 1: + offsets = [offsets[0]] * len(paths) + elif len(offsets) != len(paths): + raise TypeError("List of paths and list of tuples must have same length. {} paths and {} offsets " + " where given".format(len(paths), len(offsets))) + else: + pass + + paths_new = [] + for path, offset in zip(paths, offsets): + paths_new.append(path+offset) + + return paths_new + + def __mul__(self, transform): + """ " * " operator overload. + Define multiplication of a Path to a vector in complex exponential representation + + Parameters + --------- + transform: float of tuple of length 2 or 4 + if float, transform represents magnitude + Example: path * 3 + if tuple length 2, transform[0] represents magnitude and transform[1] represents angle of rotation + Example: path * (3, pi) + if tuple length 4, transform[2],transform[3] define a different axis of rotation + Example: path * (3, pi, 1, 1) + """ + points_new = [] + + # "temporary" (probably permanent) compatibility hack + try: + long_ = long + except: + long_ = int + + if isinstance(transform, (int, long_, float)): + for p in self.points: + points_new.append((transform * p[0], + transform * p[1])) + + elif isinstance(transform, (list, tuple)): + if len(transform) == 2: + u = transform[0]*cos(transform[1]) + v = transform[0]*sin(transform[1]) + x_, y_ = 0, 0 + elif len(transform) == 4: + u = transform[0]*cos(transform[1]) + v = transform[0]*sin(transform[1]) + x_, y_ = transform[2:] + else: + raise IndexError('Paths can only be multiplied by a number or a tuple/list of length 2 or 4') + + for p in self.points: + x, y = p[0]-x_, p[1]-y_ + points_new.append((x_ + x * u - y * v, + y_ + x * v + y * u)) + else: + raise TypeError('Paths can only be multiplied by a number or a tuple/list of length 2 or 4') + + if self.type == 'circular': + radius = self.radius + else: + radius = 0.2 + + return Path(points_new, self.style, self.closed, radius=radius) + + @classmethod + def list_rotate(cls, paths, theta, translation=(0, 0)): + """ Generate list of new Path instances, rotation each path by transform + + Parameters + --------- + paths: Path or list + list of N Path instances + theta: float (radians) + angle of rotation + translation: tuple or list 2 + axis of rotation + + Returns + --------- + paths_new: list + list of N Path instances + """ + if len(translation) != 2: + TypeError("Translation must have length 2") + + if type(paths) != list: + paths = [paths] + + paths_new = [] + for path in paths: + paths_new.append(path*(1, theta, translation[0], translation[1])) + + if len(paths_new) == 1: + paths_new = paths_new[0] + return paths_new + + # TODO: + # Apparently it's not working properly, must be debugged and tested + @classmethod + def reflect(cls, path, p1, p2): + """ Reflects each point of path on line defined by two points and return new Path instance with new reflected points + + Parameters + --------- + path: Path + p1: tuple or list of size 2 + p2: tuple or list of size 2 + + Returns + --------- + path_reflected: Path + """ + + (x1, y1) = p1 + (x2, y2) = p2 + + if x1 == x2 and y1 == y2: + ValueError("Duplicate points don't define a line") + elif x1 == x2: + t_x = [-1, 0, 2*x1, 1] + t_y = [0, 1, 0, 1] + else: + m = (y2 - y1)/(x2 - x1) + t = y1 - m*x1 + t_x = [1 - m**2, 2*m, -2*m*t, m**2 + 1] + t_y = [2*m, m**2 - 1, +2*t, m**2 + 1] + + points_new = [] + for p in path.points: + x_ = (t_x[0]*p[0] + t_x[1]*p[1] + t_x[2]) / t_x[3] + y_ = (t_y[0]*p[0] + t_y[1]*p[1] + t_y[2]) / t_y[3] + points_new.append((x_, y_)) + + return Path(points_new, path.style, path.closed) + + # TODO: + # Apparently it's not working properly, must be debugged and tested + @classmethod + def list_reflect(cls, paths, p1, p2): + """ Generate list of new Path instances, rotation each path by transform + + Parameters + --------- + paths: Path or list + list of N Path instances + p1: tuple or list of size 2 + p2: tuple or list of size 2 + + Returns + --------- + paths_new: list + list of N Path instances + """ + + if type(paths) == Path: + paths = [paths] + + paths_new = [] + for path in paths: + paths_new.append(Path.reflect(path, p1, p2)) + + return paths_new \ No newline at end of file diff --git a/extensions/fablabchemnitz/origami_patterns/OrigamiPatterns/Pattern.py b/extensions/fablabchemnitz/origami_patterns/OrigamiPatterns/Pattern.py new file mode 100644 index 00000000..3dc8c257 --- /dev/null +++ b/extensions/fablabchemnitz/origami_patterns/OrigamiPatterns/Pattern.py @@ -0,0 +1,249 @@ +#! /usr/bin/env python3 + +import os +from abc import abstractmethod +from lxml import etree +from Path import Path, inkex + +class Pattern(inkex.Effect): + @abstractmethod + def generate_path_tree(self): + """ Generate nested list of Path instances + Abstract method, must be defined in all child classes + """ + pass + + def __init__(self): + inkex.Effect.__init__(self) # initialize the super class + self.add_argument = self.arg_parser.add_argument + self.add_argument("-u", "--units", default='mm', help="Units this dialog is using") + + # self.add_argument("-a", "--add_attachment", type=inkex.Boolean, default=False, help="command line help") + # self.add_argument("", "--accuracy", type=int, default=0, help="command line help") + + # -------------------------------------------------------------------------------------------------------------- + # mountain options + self.add_argument('-m', '--mountain_stroke_color', default=4278190335, help='The mountain creases color.') + self.add_argument('--mountain_stroke_width', type=float, default=0.1, help='Width of mountain strokes.') + self.add_argument('--mountain_dashes_len', type=float, default=1.0, help='Mountain dash + gap length.') + self.add_argument('--mountain_dashes_duty', type=float, default=0.5, help='Mountain dash duty cycle.') + self.add_argument('--mountain_dashes_bool', type=inkex.Boolean, default=True, help='Dashed strokes?') + self.add_argument('--mountain_bool', type=inkex.Boolean, default=True, help='Draw mountains?') + + # -------------------------------------------------------------------------------------------------------------- + # valley options + self.add_argument('-v', '--valley_stroke_color', default=65535, help='The valley creases color.') + self.add_argument('--valley_stroke_width', type=float, default=0.1, help='Width of valley strokes.') + self.add_argument('--valley_dashes_len', type=float, default=1.0, help='Valley dash + gap length.') + self.add_argument('--valley_dashes_duty', type=float, default=0.25, help='Valley dash duty cycle.') + self.add_argument('--valley_dashes_bool', type=inkex.Boolean, default=True, help='Dashed strokes?') + self.add_argument('--valley_bool', type=inkex.Boolean, default=True, help='Draw valleys?') + + # -------------------------------------------------------------------------------------------------------------- + # edge options + self.add_argument('-e', '--edge_stroke_color', default=255, help='The mountain creases color.') + self.add_argument('--edge_stroke_width', type=float, default=0.1, help='Width of edge strokes.') + self.add_argument('--edge_dashes_len', type=float, default=1.0, help='Edge dash + gap length.') + self.add_argument('--edge_dashes_duty', type=float, default=0.25, help='Edge dash duty cycle.') + self.add_argument('--edge_dashes_bool', type=inkex.Boolean, default=False, help='Dashed strokes?') + self.add_argument('--edge_bool', type=inkex.Boolean, default=True, help='Draw edges?') + self.add_argument('--edge_single_path', type=inkex.Boolean, default=True, help='Edges as single path?') + + # -------------------------------------------------------------------------------------------------------------- + # universal crease options + self.add_argument('--universal_stroke_color', default=4278255615, help='The universal creases color.') + self.add_argument('--universal_stroke_width', type=float, default=0.1, help='Width of universal strokes.') + self.add_argument('--universal_dashes_len', type=float, default=1.0, help='Universal dash + gap length.') + self.add_argument('--universal_dashes_duty', type=float, default=0.25, help='Universal dash duty cycle.') + self.add_argument('--universal_dashes_bool', type=inkex.Boolean, default=False, help='Dashed strokes?') + self.add_argument('--universal_bool', type=inkex.Boolean, default=True, help='Draw universal creases?') + + # -------------------------------------------------------------------------------------------------------------- + # semicrease options + self.add_argument('--semicrease_stroke_color', default=4294902015, help='The semicrease creases color.') + self.add_argument('--semicrease_stroke_width', type=float, default=0.1, help='Width of semicrease strokes.') + self.add_argument('--semicrease_dashes_len', type=float, default=1.0, help='Semicrease dash + gap length.') + self.add_argument('--semicrease_dashes_duty', type=float,default=0.25, help='Semicrease dash duty cycle.') + self.add_argument('--semicrease_dashes_bool', type=inkex.Boolean, default=False, help='Dashed strokes?') + self.add_argument('--semicrease_bool', type=inkex.Boolean, default=True, help='Draw semicreases?') + + # -------------------------------------------------------------------------------------------------------------- + # cut options + self.add_argument('--cut_stroke_color', default=16711935, help='The cut creases color.') + self.add_argument('--cut_stroke_width', type=float, default=0.1, help='Width of cut strokes.') + self.add_argument('--cut_dashes_len', type=float, default=1.0, help='Cut dash + gap length.') + self.add_argument('--cut_dashes_duty', type=float, default=0.25, help='Cut dash duty cycle.') + self.add_argument('--cut_dashes_bool', type=inkex.Boolean, default=False, help='Dashed strokes?') + self.add_argument('--cut_bool', type=inkex.Boolean, default=True, help='Draw cuts?') + + # -------------------------------------------------------------------------------------------------------------- + # vertex options + self.add_argument('--vertex_stroke_color', default=255, help='Vertices\' color.') + self.add_argument('--vertex_stroke_width', type=float, default=0.1, help='Width of vertex strokes.') + self.add_argument('--vertex_radius', type=float, default=0.1, help='Radius of vertices.') + self.add_argument('--vertex_bool', type=inkex.Boolean, default=True, help='Draw vertices?') + # here so we can have tabs - but we do not use it directly - else error + self.add_argument('--active-tab', default='title', help="Active tab.") + + self.path_tree = [] + self.edge_points = [] + self.translate = (0, 0) + + def effect(self): + """ Main function, called when the extension is run. + """ + # construct dictionary containing styles + self.create_styles_dict() + + # get paths for selected origami pattern + self.generate_path_tree() + + # ~ accuracy = self.options.accuracy + # ~ unit_factor = self.calc_unit_factor() + # what page are we on + # page_id = self.options.active_tab # sometimes wrong the very first time + + # Translate according to translate attribute + g_attribs = {inkex.addNS('label', 'inkscape'): '{} Origami pattern'.format(self.options.pattern), + # inkex.addNS('transform-center-x','inkscape'): str(-bbox_center[0]), + # inkex.addNS('transform-center-y','inkscape'): str(-bbox_center[1]), + inkex.addNS('transform-center-x', 'inkscape'): str(0), + inkex.addNS('transform-center-y', 'inkscape'): str(0), + 'transform': 'translate(%s,%s)' % self.translate} + + # add the group to the document's current layer + if type(self.path_tree) == list and len(self.path_tree) != 1: + self.topgroup = etree.SubElement(self.get_layer(), 'g', g_attribs) + else: + self.topgroup = self.get_layer() + + if len(self.edge_points) == 0: + Path.draw_paths_recursively(self.path_tree, self.topgroup, self.styles_dict) + elif self.options.edge_single_path: + edges = Path(self.edge_points, 'e', closed=True) + Path.draw_paths_recursively(self.path_tree + [edges], self.topgroup, self.styles_dict) + else: + edges = Path.generate_separated_paths(self.edge_points, 'e', closed=True) + Path.draw_paths_recursively(self.path_tree + edges, self.topgroup, self.styles_dict) + + # self.draw_paths_recursively(self.path_tree, self.topgroup, self.styles_dict) + + # compatibility hack + def get_layer(self): + try: + return self.svg.get_current_layer() # new + except: + return self.current_layer # old + + def create_styles_dict(self): + """ Get stroke style parameters and use them to create the styles dictionary, used for the Path generation + """ + unit_factor = self.calc_unit_factor() + + # define colour and stroke width + mountain_style = {'draw': self.options.mountain_bool, + 'stroke': self.get_color_string(self.options.mountain_stroke_color), + 'fill': 'none', + 'stroke-width': self.options.mountain_stroke_width*unit_factor} + + valley_style = {'draw': self.options.valley_bool, + 'stroke': self.get_color_string(self.options.valley_stroke_color), + 'fill': 'none', + 'stroke-width': self.options.valley_stroke_width*unit_factor} + + universal_style = {'draw': self.options.universal_bool, + 'stroke': self.get_color_string(self.options.universal_stroke_color), + 'fill': 'none', + 'stroke-width': self.options.universal_stroke_width*unit_factor} + + semicrease_style = {'draw': self.options.semicrease_bool, + 'stroke': self.get_color_string(self.options.semicrease_stroke_color), + 'fill': 'none', + 'stroke-width': self.options.semicrease_stroke_width*unit_factor} + + cut_style = {'draw': self.options.cut_bool, + 'stroke': self.get_color_string(self.options.cut_stroke_color), + 'fill': 'none', + 'stroke-width': self.options.cut_stroke_width*unit_factor} + + edge_style = {'draw': self.options.edge_bool, + 'stroke': self.get_color_string(self.options.edge_stroke_color), + 'fill': 'none', + 'stroke-width': self.options.edge_stroke_width*unit_factor} + + vertex_style = {'draw': self.options.vertex_bool, + 'stroke': self.get_color_string(self.options.vertex_stroke_color), + 'fill': 'none', + 'stroke-width': self.options.vertex_stroke_width*unit_factor} + + # check if dashed option selected + if self.options.mountain_dashes_bool: + dash = self.options.mountain_dashes_len*self.options.mountain_dashes_duty*unit_factor + gap = abs(dash - self.options.mountain_dashes_len*unit_factor) + mountain_style['stroke-dasharray'] = "{},{}".format(dash, gap) + if self.options.valley_dashes_bool: + dash = self.options.valley_dashes_len * self.options.valley_dashes_duty*unit_factor + gap = abs(dash - self.options.valley_dashes_len*unit_factor) + valley_style['stroke-dasharray'] = "{},{}".format(dash, gap) + if self.options.edge_dashes_bool: + dash = self.options.edge_dashes_len * self.options.edge_dashes_duty*unit_factor + gap = abs(dash - self.options.edge_dashes_len*unit_factor) + edge_style['stroke-dasharray'] = "{},{}".format(dash, gap) + if self.options.universal_dashes_bool: + dash = self.options.universal_dashes_len * self.options.universal_dashes_duty*unit_factor + gap = abs(dash - self.options.universal_dashes_len*unit_factor) + universal_style['stroke-dasharray'] = "{},{}".format(dash, gap) + if self.options.semicrease_dashes_bool: + dash = self.options.semicrease_dashes_len * self.options.semicrease_dashes_duty*unit_factor + gap = abs(dash - self.options.semicrease_dashes_len*unit_factor) + semicrease_style['stroke-dasharray'] = "{},{}".format(dash, gap) + if self.options.cut_dashes_bool: + dash = self.options.cut_dashes_len * self.options.cut_dashes_duty*unit_factor + gap = abs(dash - self.options.cut_dashes_len*unit_factor) + cut_style['stroke-dasharray'] = "{},{}".format(dash, gap) + + self.styles_dict = {'m': mountain_style, + 'v': valley_style, + 'u': universal_style, + 's': semicrease_style, + 'c': cut_style, + 'e': edge_style, + 'p': vertex_style} + + def get_color_string(self, longColor, verbose=False): + """ Convert the long into a #RRGGBB color value + - verbose=true pops up value for us in defaults + conversion back is A + B*256^1 + G*256^2 + R*256^3 + """ + # compatibility hack, no "long" in Python 3 + try: + longColor = long(longColor) + if longColor < 0: longColor = long(longColor) & 0xFFFFFFFF + hexColor = hex(longColor)[2:-3] + except: + longColor = int(longColor) + hexColor = hex(longColor)[2:-2] + inkex.debug = inkex.utils.debug + + hexColor = '#' + hexColor.rjust(6, '0').upper() + if verbose: inkex.debug("longColor = {}, hex = {}".format(longColor,hexColor)) + + return hexColor + + def add_text(self, node, text, position, text_height=12): + """ Create and insert a single line of text into the svg under node. + """ + line_style = {'font-size': '%dpx' % text_height, 'font-style':'normal', 'font-weight': 'normal', + 'fill': '#F6921E', 'font-family': 'Bitstream Vera Sans,sans-serif', + 'text-anchor': 'middle', 'text-align': 'center'} + line_attribs = {inkex.addNS('label','inkscape'): 'Annotation', + 'style': str(Inkex.style(line_style)), + 'x': str(position[0]), + 'y': str((position[1] + text_height) * 1.2) + } + line = etree.SubElement(node, inkex.addNS('text','svg'), line_attribs) + line.text = text + + + def calc_unit_factor(self): + return self.svg.unittouu(str(1.0) + self.options.units) \ No newline at end of file diff --git a/extensions/fablabchemnitz/origami_patterns/OrigamiPatterns/Pleat_Circular.py b/extensions/fablabchemnitz/origami_patterns/OrigamiPatterns/Pleat_Circular.py new file mode 100644 index 00000000..e7103f27 --- /dev/null +++ b/extensions/fablabchemnitz/origami_patterns/OrigamiPatterns/Pleat_Circular.py @@ -0,0 +1,91 @@ +#! /usr/bin/env python3 + +import inkex +import numpy as np +from math import pi, sin, cos +from Path import Path +from Pattern import Pattern + + +# Select name of class, inherits from Pattern +# TODO: +# 1) Implement __init__ method to get all custom options and then call Pattern's __init__ +# 2) Implement generate_path_tree to define all of the desired strokes + +class PleatCircular(Pattern): + def __init__(self): + Pattern.__init__(self) + self.add_argument("-p", "--pattern", default="pleat_circular", help="Origami pattern") + self.add_argument("--radius", type=float, default=55.0, help="Radius of circle") + self.add_argument("--ratio", type=float, default=0.4, help="Opening ratio") + self.add_argument("--rings", type=int, default=15, help="Number of rings") + self.add_argument("--simulation_mode", type=inkex.Boolean, default=True, help="Approximate circle and draw semicreases for simulation?") + self.add_argument("--sides", type=int, default=20, help="Number of sides for polygon approximating half circle") + + def generate_path_tree(self): + """ Specialized path generation for your origami pattern + """ + # retrieve saved parameters + unit_factor = self.calc_unit_factor() + R = self.options.radius * unit_factor + ratio = self.options.ratio + r = R * ratio + rings = self.options.rings + dr = (1.-ratio)*R/rings + self.translate = (R, R) + + if not self.options.simulation_mode: + inner_circles = [] + for i in range(1, rings): + inner_circles.append(Path((0, 0), radius=r + i*dr, style='m' if i % 2 else 'v')) + + edges = [Path((0, 0), radius=R, style='e'), + Path((0, 0), radius=r, style='e')] + + self.path_tree = [inner_circles, edges] + + # append semicreases for simulation + else: + sides = self.options.sides + dtheta = pi / sides + # create diagonals + diagonals = [] + for i in range(sides): + p1 = (0, 0) + p2 = (R * cos((1 + i * 2) * dtheta), R * sin((1 + i * 2) * dtheta)) + diagonals.append(Path([p1, p2], 'u')) + + s = sin(dtheta) + c = cos(dtheta) + + # Edge + paths = [Path([(c * R, -s * R), (R, 0), (c * R, s * R)], style='e'), + Path([(c * r, -s * r), (r, 0), (c * r, s * r)], style='e')] + + # MV circles + for i in range(1, rings): + r_i = r + i * dr + paths.append(Path([(c * r_i, -s * r_i), (r_i, 0), (c * r_i, s * r_i)], + style='m' if i % 2 else 'v')) + + # Semicreases + top = [] + bottom = [] + for i in range(rings + 1): + r_i = r + i*dr + top.append((r_i*(1 + (i % 2)*(c-1)), -(i % 2)*s*r_i)) + bottom.append((r_i*(1 + (i % 2)*(c-1)), (i % 2)*s*r_i)) + paths = paths + [Path([(r, 0), (R, 0)], 's'), # straight line 1 + Path([(r*c, r*s), (R*c, R*s)], 's', invert=True), # straight line 2 + Path(top, 's'), # top half of semicrease pattern + Path(bottom, 's')] # bottom half of semicrease pattern + + all_paths = [paths] + for i in range(1, sides): + all_paths.append(Path.list_rotate(all_paths[0], i*2*dtheta)) + + self.path_tree = all_paths + +# Main function, creates an instance of the Class and calls inkex.affect() to draw the origami on inkscape +if __name__ == '__main__': + PleatCircular().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/origami_patterns/OrigamiPatterns/Template.py b/extensions/fablabchemnitz/origami_patterns/OrigamiPatterns/Template.py new file mode 100644 index 00000000..c8305726 --- /dev/null +++ b/extensions/fablabchemnitz/origami_patterns/OrigamiPatterns/Template.py @@ -0,0 +1,97 @@ +#! /usr/bin/env python3 + +import numpy as np +from math import pi +import inkex +from Path import Path +from Pattern import Pattern + +# Select name of class, inherits from Pattern +# TODO: +# 1) Implement __init__ method to get all custom options and then call Pattern's __init__ +# 2) Implement generate_path_tree to define all of the desired strokes + +class Template(Pattern): + def __init__(self): + Pattern.__init__(self) + self.add_argument('-p', '--pattern', default="template1", help="Origami pattern") + self.add_argument('--length', type=float, default=10.0, help="Length of grid square") + self.add_argument('--theta', type=int, default=0, help="Rotation angle (degree)") + + def generate_path_tree(self): + """ Specialized path generation for your origami pattern + """ + # retrieve conversion factor for selected unit + unit_factor = self.calc_unit_factor() + + # retrieve saved parameters, and apply unit factor where needed + length = self.options.length * unit_factor + vertex_radius = self.options.vertex_radius * unit_factor + pattern = self.options.pattern + theta = self.options.theta * pi / 180 + + # create all Path instances defining strokes + # first define its points as a list of tuples... + mountain_h_stroke_points = [(length / 2, 0), + (length / 2, length)] + mountain_v_stroke_points = [(0, length / 2), + (length, length / 2)] + + # ... and then create the Path instances, defining its type ('m' for mountain, etc...) + mountains = [Path(mountain_h_stroke_points, 'm' if pattern == 'template1' else 'v'), + Path(mountain_v_stroke_points, 'm' if pattern == 'template1' else 'v')] + + # doing the same for valleys + valley_1st_stroke_points = [(0, 0), + (length, length)] + valley_2nd_stroke_points = [(0, length), + (length, 0)] + valleys = [Path(valley_1st_stroke_points, 'v' if pattern == 'template1' else 'm'), + Path(valley_2nd_stroke_points, 'v' if pattern == 'template1' else 'm')] + + + + vertices = [] + for i in range(3): + for j in range(3): + vertices.append(Path(((i/2.) * length, (j/2.) * length), style='p', radius=vertex_radius)) + + # multiplication is implemented as a rotation, and list_rotate implements rotation for list of Path instances + vertices = Path.list_rotate(vertices, theta, (1 * length, 1 * length)) + mountains = Path.list_rotate(mountains, theta, (1 * length, 1 * length)) + valleys = Path.list_rotate(valleys, theta, (1 * length, 1 * length)) + + # if Path constructor is called with more than two points, a single stroke connecting all of then will be + # created. Using method generate_separated_paths, you can instead return a list of separated strokes + # linking each two points + # create a list for edge strokes + edge_points = [(0 * length, 0 * length), # top left + (1 * length, 0 * length), # top right + (1 * length, 1 * length), # bottom right + (0 * length, 1 * length)] # bottom left + + # create path from points to be able to use the already built rotate method + edges = Path(edge_points, 'e', closed=True) + edges = Path.list_rotate(edges, theta, (1 * length, 1 * length)) + + # division is implemented as a reflection, and list_reflect implements it for a list of Path instances + # here's a commented example: + # line_reflect = (0 * length, 2 * length, 1 * length, 1 * length) + # mountains = Path.list_reflect(mountains, line_reflect) + # valleys = Path.list_reflect(valleys, line_reflect) + # edges = Path.list_reflect(edges, line_reflect) + + # IMPORTANT: at the end, save edge points as "self.edge_points", to simplify selection of single or multiple + # strokes for the edge + self.edge_points = edges.points + + # IMPORTANT: the attribute "path_tree" must be created at the end, saving all strokes + self.path_tree = [mountains, valleys, vertices] + # if you decide not to declare "self.edge_points", then the edge must be explicitly created in the path_tree: + # self.path_tree = [mountains, valleys, vertices, edges] + + +# Main function, creates an instance of the Class and calls self.draw() to draw the origami on inkscape +# self.draw() is either a call to inkex.affect() or to svg.run(), depending on python version +if __name__ == '__main__': + Template().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/origami_patterns/OrigamiPatterns/Waterbomb.py b/extensions/fablabchemnitz/origami_patterns/OrigamiPatterns/Waterbomb.py new file mode 100644 index 00000000..658ced48 --- /dev/null +++ b/extensions/fablabchemnitz/origami_patterns/OrigamiPatterns/Waterbomb.py @@ -0,0 +1,103 @@ +#! /usr/bin/env python3 + +import math +import numpy as np +import inkex +from Path import Path +from Pattern import Pattern + +# TODO: +# Add fractional column number option + +class Waterbomb(Pattern): + def __init__(self): + Pattern.__init__(self) + self.add_argument("-p", "--pattern", default="waterbomb", help="Origami pattern") + self.add_argument("--pattern_first_line", default="waterbomb", help="Origami pattern") + self.add_argument("--pattern_last_line", default="waterbomb", help="Origami pattern") + self.add_argument("--lines", type=int, default=8, help="Number of lines") + self.add_argument("--columns", type=int, default=16, help="Number of columns") + self.add_argument("--length", type=float, default=10.0, help="Length of grid square") + self.add_argument('--phase_shift', type=inkex.Boolean, default=True, help='Shift phase of tesselation.') + + def generate_path_tree(self): + """ Specialized path generation for Waterbomb tesselation pattern + """ + unit_factor = self.calc_unit_factor() + length = self.options.length * unit_factor + vertex_radius = self.options.vertex_radius * unit_factor + cols = self.options.columns + lines = self.options.lines + phase_shift = self.options.phase_shift + pattern_first_line = self.options.pattern_first_line + pattern_last_line = self.options.pattern_last_line + + # create vertices + vertex_line_types = [[Path(((i / 2.) * length, 0), style='p', radius=vertex_radius) for i in range(2*cols + 1)], + [Path((i * length, 0), style='p', radius=vertex_radius) for i in range(cols + 1)], + [Path(((i + 0.5) * length, 0), style='p', radius=vertex_radius) for i in range(cols)]] + + vertices = [] + for i in range(2*lines + 1): + if i % 2 == 0 or (pattern_first_line == 'magic_ball' and i == 1) or (pattern_last_line == 'magic_ball' and i == 2*lines - 1): + type = 0 + elif(i/2 + phase_shift) % 2 == 0: + type = 1 + else: + type = 2 + vertices = vertices + Path.list_add(vertex_line_types[type], (0, 0.5*i*length)) + + # create a list for the horizontal creases and another for the vertical creases + # alternate strokes to minimize laser cutter path + corr_fist_line = length/2 if pattern_first_line == 'magic_ball' else 0 + corr_last_line = length/2 if pattern_last_line == 'magic_ball' else 0 + grid = [Path.generate_hgrid([0, length*cols], [0, length*lines], lines, 'm'), + Path.generate_vgrid([0, length*cols], [corr_fist_line, length*lines-corr_last_line], 2*cols, 'm')] + + vgrid_a = Path.generate_vgrid([0, length * cols], [0, length / 2], 2 * cols, 'v') + vgrid_b = Path.list_add(vgrid_a, (0, (lines - 0.5) * length)) + if pattern_first_line == 'magic_ball' and pattern_last_line == 'magic_ball': + grid[1] = [[vgrid_a[i], grid[1][i], vgrid_b[i]] if i % 2 == 0 else + [vgrid_b[i], grid[1][i], vgrid_a[i]] for i in range(len(grid[1]))] + elif pattern_first_line == 'magic_ball': + grid[1] = [[vgrid_a[i], grid[1][i]] if i % 2 == 0 else + [grid[1][i], vgrid_a[i]] for i in range(len(grid[1]))] + elif pattern_last_line == 'magic_ball': + grid[1] = [[grid[1][i], vgrid_b[i]] if i % 2 == 0 else + [vgrid_b[i], grid[1][i]] for i in range(len(grid[1]))] + + # create generic valley Path lines, one pointing up and other pointing down + valley_types = [Path([(i * length / 2, (1 - i % 2) * length / 2) for i in range(2 * cols + 1)], 'v'), + Path([( i*length/2, (i % 2)*length/2) for i in range(2 * cols + 1)], 'v')] + + # define which lines must be of which type, according to parity and options + senses = np.array([bool((i % 2+i)/2 % 2) for i in range(2*lines)]) + senses = 1*senses # converts bool array to 0's and 1's + if phase_shift: + senses = np.invert(senses) + if pattern_first_line == "magic_ball": + senses[0] = ~senses[0] + if pattern_last_line == "magic_ball": + senses[-1] = ~senses[-1] + valleys = [valley_types[senses[i]] + (0, i * length / 2) for i in range(2*lines)] + + # convert first and last lines to mountains if magic_ball + if pattern_first_line == "magic_ball": + valleys[0].style = 'm' + if pattern_last_line == "magic_ball": + valleys[-1].style = 'm' + + # invert every two lines to minimize laser cutter movements + for i in range(1, 2*lines, 2): + valleys[i].invert() + + self.edge_points = [(0*length*cols, 0*length*lines), # top left + (1*length*cols, 0*length*lines), # top right + (1*length*cols, 1*length*lines), # bottom right + (0*length*cols, 1*length*lines)] # bottom left + + self.path_tree = [grid, valleys, vertices] + + +if __name__ == '__main__': + Waterbomb().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/origami_patterns/OrigamiPatterns/__init__.py b/extensions/fablabchemnitz/origami_patterns/OrigamiPatterns/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/extensions/fablabchemnitz/origami_patterns/origami_patterns_kresling.inx b/extensions/fablabchemnitz/origami_patterns/origami_patterns_kresling.inx new file mode 100644 index 00000000..e742e297 --- /dev/null +++ b/extensions/fablabchemnitz/origami_patterns/origami_patterns_kresling.inx @@ -0,0 +1,92 @@ + + + Origami Pattern - Kresling tower + fablabchemnitz.de.origami_patterns.kresling_full + + + + + + + + 3 + 6 + + 10.0 + + + + + + + + + + + + + + + + + + + + + + 0.5 + 0.5 + 60.0 + + + + false + 100 + + + + true + true + 1 + 0.5 + 0.1 + 4278190335 + + + true + true + 1 + 0.25 + 0.1 + 65535 + + + true + true + false + 1 + 0.25 + 0.1 + 255 + + + false + 0.1 + 0.1 + 255 + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/origami_patterns/origami_patterns_pleat_circular.inx b/extensions/fablabchemnitz/origami_patterns/origami_patterns_pleat_circular.inx new file mode 100644 index 00000000..ffcbf00a --- /dev/null +++ b/extensions/fablabchemnitz/origami_patterns/origami_patterns_pleat_circular.inx @@ -0,0 +1,67 @@ + + + Origami Pattern - Circular + fablabchemnitz.de.origami_patterns.pleat_circular + + + 55.0 + + + + + + + 0.4 + 15 + + true + + 20 + + + true + true + 1 + 0.5 + 0.1 + 4278190335 + + + true + true + 1 + 0.25 + 0.1 + 65535 + + + true + true + false + 1 + 0.25 + 0.1 + 255 + + + true + false + 1 + 0.25 + 0.1 + 4294902015 + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/origami_patterns/origami_patterns_pleat_hypar.inx b/extensions/fablabchemnitz/origami_patterns/origami_patterns_pleat_hypar.inx new file mode 100644 index 00000000..ebfec933 --- /dev/null +++ b/extensions/fablabchemnitz/origami_patterns/origami_patterns_pleat_hypar.inx @@ -0,0 +1,78 @@ + + + Origami Pattern - N-sided Hypar + fablabchemnitz.de.origami_patterns.pleat_hypar + + + + + + + + 100.0 + + + + + + + + 4 + 7 + false + + + + + true + true + 1 + 0.5 + 0.1 + 4278190335 + + + true + true + 1 + 0.25 + 0.1 + 65535 + + + true + false + 1 + 0.25 + 0.1 + 4278255615 + + + true + true + false + 1 + 0.25 + 0.1 + 255 + + + false + 0.1 + 0.1 + 255 + + + + all + + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/origami_patterns/origami_patterns_template.inx b/extensions/fablabchemnitz/origami_patterns/origami_patterns_template.inx new file mode 100644 index 00000000..fc3d7c57 --- /dev/null +++ b/extensions/fablabchemnitz/origami_patterns/origami_patterns_template.inx @@ -0,0 +1,90 @@ + + + Origami Pattern - Template effect + fablabchemnitz.de.origami_patterns.template + + + + + + + 10.0 + + + + + + + 0 + + + + + true + true + 1 + 0.5 + 0.1 + 4278190335 + + + true + true + 1 + 0.25 + 0.1 + 65535 + + + true + true + false + 1 + 0.25 + 0.1 + 255 + + + true + 0.1 + 0.1 + 255 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/origami_patterns/origami_patterns_waterbomb.inx b/extensions/fablabchemnitz/origami_patterns/origami_patterns_waterbomb.inx new file mode 100644 index 00000000..b54314e0 --- /dev/null +++ b/extensions/fablabchemnitz/origami_patterns/origami_patterns_waterbomb.inx @@ -0,0 +1,72 @@ + + + Origami Pattern - Waterbomb + fablabchemnitz.de.origami_patterns.magic_ball + + + + + + + + + + + false + + 8 + 16 + + 10.0 + + + + + + + + + + true + true + 1 + 0.5 + 0.1 + 4278190335 + + + true + true + 1 + 0.25 + 0.1 + 65535 + + + true + true + false + 1 + 0.25 + 0.1 + 255 + + + false + 0.1 + 0.1 + 255 + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/output_pro/output_pro.inx b/extensions/fablabchemnitz/output_pro/output_pro.inx new file mode 100644 index 00000000..c0d7ce0e --- /dev/null +++ b/extensions/fablabchemnitz/output_pro/output_pro.inx @@ -0,0 +1,16 @@ + + + Inkscape Output Pro + fablabchemnitz.de.output_pro + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/output_pro/output_pro.py b/extensions/fablabchemnitz/output_pro/output_pro.py new file mode 100644 index 00000000..cd73fc2e --- /dev/null +++ b/extensions/fablabchemnitz/output_pro/output_pro.py @@ -0,0 +1,1078 @@ +#!/usr/bin/env python3 + +import inkex, re, os, random, sys, subprocess, shutil +from inkex.command import inkscape + +from outputpro import cmyk, cutmarks + +from PyQt5 import QtGui, QtCore, uic, QtWidgets +from PyQt5.QtWidgets import QMainWindow, QApplication +from PyQt5.QtCore import * + +import gettext +_ = gettext.gettext + +import tempfile + +dirpathTempFolder = tempfile.TemporaryDirectory(suffix=str(random.randint(0,9)), prefix="output-") +dirpathSoftware = os.path.join(os.path.abspath(os.path.dirname(__file__)), 'outputpro') +uuconv = {'in':90.0, 'pt':1.25, 'px':1, 'mm':3.5433070866, 'cm':35.433070866, 'pc':15.0} + +def unittouu(string): + '''Returns userunits given a string representation of units in another system''' + unit = re.compile('(%s)$' % '|'.join(uuconv.keys())) + param = re.compile(r'(([-+]?[0-9]+(\.[0-9]*)?|[-+]?\.[0-9]+)([eE][-+]?[0-9]+)?)') + + p = param.match(string) + u = unit.search(string) + if p: + retval = float(p.string[p.start():p.end()]) + else: + retval = 0.0 + if u: + try: + return retval * uuconv[u.string[u.start():u.end()]] + except KeyError: + pass + return retval + +class OutputPro(inkex.EffectExtension): + + def effect(self): + try: + with open(os.path.join(os.path.abspath(inkex.utils.get_user_directory() + "/../"), "preferences.xml"), 'r') as f: + inkscape_config = f.read() + + list_of_export_formats = ['JPEG'] + list_of_format_tips = {'JPEG':'The JPEG format always has some loss of quality. Although it supports CMYK, it is not recommended for use in printed graphics.'} + list_of_color_modes_jpeg = ['CMYK','RGB','Gray','CMY','HSB','HSL','HWB','Lab','Log', 'OHTA','Rec601Luma','Rec601YCbCr','Rec709Luma','Rec709YCbCr','sRGB','XYZ','YCbCr','YCC','YIQ','YPbPr','YUV'] + list_of_interlacing_jpeg = {u'None':'none', u'Line':'line', u'Plane':'plane', u'Partition':'partition'} + list_of_noise_jpeg = {u'Gaussian':'Gaussian-noise', u'Impulse':'Impulse-noise', u'Laplacian':'Laplacian-noise', u'Multiplicative':'Multiplicative-noise', u'Poisson':'Poisson-noise', u'Uniform':'Uniform-noise'} + list_of_subsampling_jpeg = ['1x1, 1x1, 1x1', '2x1, 1x1, 1x1', '1x2, 1x1, 1x1', '2x2, 1x1, 1x1'] + list_of_dct_jpeg = {u'Integer':'int', u'Integer (fast)':'fast', u'Floating point':'float'} + list_of_area_to_export = [_(u"Page"), _(u"Drawing"), _(u"Object")]#, _(u"Ãrea definida")] + + if "nt" in os.name: + icc_dir = 'C:\\Windows\\System32\\spool\\drivers\\color' + shell = True + else: + icc_dir = '/usr/share/color/icc/colord/' + shell = False + list_of_profiles = os.listdir(icc_dir) + #inkex.utils.debug(list_of_profiles) + + selected_screen_profile = inkscape_config.split('id="displayprofile"')[1].split('uri="')[1].split('" />')[0].split('/')[-1] + #if selected_screen_profile == '': + # inkex.utils.debug("Configured icc color profile (Inkscape) is not set. Configure it in preferences and restart Inkscape to apply changes.") + selected_print_profile = inkscape_config.split('id="softproof"')[1].split('uri="')[1].split('" />')[0].split('/')[-1] + + rgb_profile = '"' + inkscape_config.split('id="displayprofile"')[1].split('uri="')[1].split('" />')[0] + '"' + #cmyk_profile = '"' + inkscape_config.split('id="softproof"')[1].split('uri="')[1].split('" />')[0] + '"' + + list_of_selected_objects = [] + for id, node in self.svg.selected.items(): + list_of_selected_objects.append(node.get('id')) + if len(list_of_selected_objects) >= 1: + selected_object = list_of_selected_objects[0] + else: + selected_object = 'layer1' + + resolution = '90' + + shutil.copy2(self.options.input_file, os.path.join(dirpathTempFolder.name, "original.svg")) # complete target filename given + + svg = self.document.getroot() + page_width = unittouu(svg.get('width')) + page_height = unittouu(svg.attrib['height']) + + class mainWindow(QtWidgets.QWidget): + def __init__(self, parent=None): + QtWidgets.QWidget.__init__(self, parent) + self.resize(950, 600) + self.setMaximumSize(QtCore.QSize(950, 600)) + self.setMinimumSize(QtCore.QSize(950, 600)) + self.setWindowTitle(_(u'Inkscape Output Pro Bitmap')) + self.setWindowIcon(QtGui.QIcon('/usr/share/pixmaps/inkscape-outputpro.png')) + self.move(int((QtWidgets.QDesktopWidget().screenGeometry().width()-self.geometry().width())/2), int((QtWidgets.QDesktopWidget().screenGeometry().height()-self.geometry().height())/2)) + + self.preview_zoom = 1.0 + + self.top_title_bitmap = QtWidgets.QLabel(parent=self) + self.top_title_bitmap.setGeometry(0, 0, 950, 60) + self.top_title_bitmap.setPixmap(QtGui.QPixmap(os.path.join(dirpathSoftware, 'top.png'))) + + self.preview_panel = QtWidgets.QWidget(parent=self) + self.preview_panel.setGeometry(0, 0, 320, 600) + + self.preview_bitmap = QtWidgets.QLabel(parent=self.preview_panel) + self.preview_bitmap.setGeometry(10, 70, 300, 300) + self.preview_bitmap.setPixmap(QtGui.QPixmap(os.path.join(dirpathTempFolder.name, 'preview.png'))) + #self.preview_bitmap.setStyleSheet("QWidget { background: url(alpha.png)}") + #self.preview_bitmap.setAlignment(QtCore.Qt.AlignHCenter | QtCore.Qt.AlignCenter) + + self.preview_original_title = QtWidgets.QLabel(parent=self.preview_panel) + self.preview_original_title.setText(_(u"Original").upper()) + self.preview_original_title.setGeometry(255, 355, 50, 10) + self.preview_original_title.setAlignment(QtCore.Qt.AlignCenter) + self.preview_original_title.setStyleSheet('QFrame{font:6pt;border-radius: 2px;padding: 2px;background-color:rgba(0,0,0,128);color:white}') + + self.preview_result_title = QtWidgets.QLabel(parent=self.preview_panel) + self.preview_result_title.setText(_(u"Result").upper()) + self.preview_result_title.setGeometry(15, 75, 50, 10) + self.preview_result_title.setAlignment(QtCore.Qt.AlignCenter) + self.preview_result_title.setStyleSheet('QFrame{font:6pt;border-radius: 2px;padding: 2px;background-color:rgba(0,0,0,128);color:white}') + + self.zoom_out_button = QtWidgets.QPushButton(QtGui.QIcon.fromTheme("zoom-out"), '', parent=self.preview_panel) + self.zoom_out_button.setGeometry(10, 371, 16, 16) + self.zoom_out_button.setIconSize(QtCore.QSize(12,12)) + self.zoom_out_button.setFlat(True) + self.zoom_out_button.clicked.connect(self.zoom_out) + + self.zoom_in_button = QtWidgets.QPushButton(QtGui.QIcon.fromTheme("zoom-in"), '', parent=self.preview_panel) + self.zoom_in_button.setGeometry(26, 371, 16, 16) + self.zoom_in_button.setIconSize(QtCore.QSize(12,12)) + self.zoom_in_button.setFlat(True) + self.zoom_in_button.clicked.connect(self.zoom_in) + + self.preview_zoom_title = QtWidgets.QLabel(parent=self.preview_panel) + self.preview_zoom_title.setGeometry(44, 371, 256, 16) + self.preview_zoom_title.setText('100%') + self.preview_zoom_title.setAlignment(QtCore.Qt.AlignVCenter | QtCore.Qt.AlignLeft) + self.preview_zoom_title.setFont(QtGui.QFont('Ubuntu', 8)) + #self.preview_result_title.setStyleSheet('QFrame{font:7pt;border-radius: 2px;padding: 2px;background-color:rgba(0,0,0,128);color:white}') + + self.view_c_button = QtWidgets.QPushButton('C', parent=self.preview_panel) + self.view_c_button.setGeometry(246, 371, 16, 16) + self.view_c_button.setIconSize(QtCore.QSize(12,12)) + self.view_c_button.setFlat(True) + self.view_c_button.setCheckable(True) + self.view_c_button.setChecked(True) + self.view_c_button.setVisible(False) + self.view_c_button.clicked.connect(self.cmyk_advanced_manipulation_view_separations) + + self.view_m_button = QtWidgets.QPushButton('M', parent=self.preview_panel) + self.view_m_button.setGeometry(262, 371, 16, 16) + self.view_m_button.setIconSize(QtCore.QSize(12,12)) + self.view_m_button.setFlat(True) + self.view_m_button.setCheckable(True) + self.view_m_button.setChecked(True) + self.view_m_button.setVisible(False) + self.view_m_button.clicked.connect(self.cmyk_advanced_manipulation_view_separations) + + self.view_y_button = QtWidgets.QPushButton('Y', parent=self.preview_panel) + self.view_y_button.setGeometry(278, 371, 16, 16) + self.view_y_button.setIconSize(QtCore.QSize(12,12)) + self.view_y_button.setFlat(True) + self.view_y_button.setCheckable(True) + self.view_y_button.setChecked(True) + self.view_y_button.setVisible(False) + self.view_y_button.clicked.connect(self.cmyk_advanced_manipulation_view_separations) + + self.view_k_button = QtWidgets.QPushButton('K', parent=self.preview_panel) + self.view_k_button.setGeometry(294, 371, 16, 16) + self.view_k_button.setIconSize(QtCore.QSize(12,12)) + self.view_k_button.setFlat(True) + self.view_k_button.setCheckable(True) + self.view_k_button.setChecked(True) + self.view_k_button.setVisible(False) + self.view_k_button.clicked.connect(self.cmyk_advanced_manipulation_view_separations) + + self.view_image_info = QtWidgets.QLabel(parent=self.preview_panel) + self.view_image_info.setGeometry(10, 400, 300, 190) + self.view_image_info.setFont(QtGui.QFont('Ubuntu', 8)) + self.view_image_info.setWordWrap(True) + self.view_image_info.setAlignment(QtCore.Qt.AlignTop) + + #self.main_title = QtWidgets.QLabel(parent=self) + #self.main_title.setText(_(u"BITMAPS").upper()) + #self.main_title.setGeometry(640, 30, 150, 30) + #self.main_title.setFont(QtWidgets.QFont('Ubuntu', 16, 75)) + #self.main_title.setAlignment(QtCore.Qt.AlignRight) + #self.main_title.setForegroundRole(QtWidgets.QPalette.ColorRole(2)) + + self.format_title = QtWidgets.QLabel(parent=self) + self.format_title.setText(_(u"Format").upper()) + self.format_title.setGeometry(320, 70, 200, 15) + self.format_title.setFont(QtGui.QFont('Ubuntu', 8, 75)) + + self.format_choice = QtWidgets.QComboBox(parent=self) + self.format_choice.setGeometry(320, 85, 200, 25) + self.format_choice.addItems(list_of_export_formats) + self.format_choice.activated.connect(self.change_format) + + self.format_preview_check = QtWidgets.QCheckBox(parent=self) + self.format_preview_check.setGeometry(540, 85, 200, 25) + self.format_preview_check.setText(_(u"Preview")) + self.format_preview_check.setChecked(True) + self.format_preview_check.clicked.connect(self.format_preview_change) + + self.option_box = QtWidgets.QTabWidget(parent=self) + self.option_box.setGeometry(320, 120, 620, 435) + + self.general_options_panel = QtWidgets.QWidget(parent=self) + self.general_geometry_panel = QtWidgets.QWidget(parent=self) + self.general_prepress_panel = QtWidgets.QWidget(parent=self) + self.general_imposition_panel = QtWidgets.QWidget(parent=self) + self.option_box.addTab(self.general_options_panel, _(u"Options")) + self.option_box.addTab(self.general_geometry_panel, _(u"Size")) + self.option_box.addTab(self.general_prepress_panel, _(u"Prepress")) + self.option_box.addTab(self.general_imposition_panel, _(u"Imposition")) + + self.option_box.currentChanged.connect(self.generate_preview) + + self.general_options_panel_jpeg = QtWidgets.QWidget(parent=self.general_options_panel) + self.general_options_panel_jpeg.setVisible(False) + + self.color_mode_title_jpeg = QtWidgets.QLabel(parent=self.general_options_panel_jpeg) + self.color_mode_title_jpeg.setText(_(u"Color mode").upper()) + self.color_mode_title_jpeg.setGeometry(10, 10, 260, 15) + self.color_mode_title_jpeg.setFont(QtGui.QFont('Ubuntu', 8)) + + self.color_mode_choice_jpeg = QtWidgets.QComboBox(parent=self.general_options_panel_jpeg) + self.color_mode_choice_jpeg.setGeometry(10, 25, 260, 25) + self.color_mode_choice_jpeg.addItems(list_of_color_modes_jpeg) + self.color_mode_choice_jpeg.activated.connect(self.change_color_mode_jpeg) + + self.color_mode_title_tip_jpeg = QtWidgets.QLabel(parent=self.general_options_panel_jpeg) + self.color_mode_title_tip_jpeg.setGeometry(10, 50, 260, 15) + self.color_mode_title_tip_jpeg.setFont(QtGui.QFont('Ubuntu', 7)) + #self.color_mode_title_tip.setAlignment(QtCore.Qt.AlignLeft) + + self.quality_title_jpeg = QtWidgets.QLabel(parent=self.general_options_panel_jpeg) + self.quality_title_jpeg.setText(_(u"Quality").upper()) + self.quality_title_jpeg.setGeometry(285, 10, 100, 15) + self.quality_title_jpeg.setFont(QtGui.QFont('Ubuntu', 8)) + + self.quality_percent_title_jpeg = QtWidgets.QLabel(parent=self.general_options_panel_jpeg) + self.quality_percent_title_jpeg.setText('50%') + self.quality_percent_title_jpeg.setGeometry(505, 10, 100, 40) + self.quality_percent_title_jpeg.setFont(QtGui.QFont('Ubuntu', 12, 75)) + self.quality_percent_title_jpeg.setAlignment(QtCore.Qt.AlignRight) + + self.quality_percent_title_left_jpeg = QtWidgets.QLabel(parent=self.general_options_panel_jpeg) + self.quality_percent_title_left_jpeg.setText('Lower quality\nSmaller file') + self.quality_percent_title_left_jpeg.setGeometry(285, 40, 160, 25) + self.quality_percent_title_left_jpeg.setFont(QtGui.QFont('Ubuntu', 7)) + self.quality_percent_title_left_jpeg.setAlignment(QtCore.Qt.AlignLeft) + + self.quality_percent_title_right_jpeg = QtWidgets.QLabel(parent=self.general_options_panel_jpeg) + self.quality_percent_title_right_jpeg.setText('Higher quality
    Larger file') + self.quality_percent_title_right_jpeg.setGeometry(445, 40, 160, 25) + self.quality_percent_title_right_jpeg.setFont(QtGui.QFont('Ubuntu', 7)) + self.quality_percent_title_right_jpeg.setAlignment(QtCore.Qt.AlignRight) + + self.quality_choice_dial_jpeg = QtWidgets.QDial(parent=self.general_options_panel_jpeg) + self.quality_choice_dial_jpeg.setRange(1,100) + self.quality_choice_dial_jpeg.setGeometry(415, 10, 60, 60) + self.quality_choice_dial_jpeg.setNotchesVisible(True) + self.quality_choice_dial_jpeg.setValue(50) + self.quality_choice_dial_jpeg.sliderReleased.connect(self.generate_preview) + self.quality_choice_dial_jpeg.valueChanged.connect(self.change_quality_live_jpeg) + + self.color_profile_choice_jpeg = QtWidgets.QCheckBox(_(u"Use Inkscape color profile"), parent=self.general_options_panel_jpeg) + self.color_profile_choice_jpeg.setChecked(False) + self.color_profile_choice_jpeg.setGeometry(283, 150, 325, 25) + self.color_profile_choice_jpeg.clicked.connect(self.generate_preview) + + self.document_color_profile_title_jpeg = QtWidgets.QLabel(parent=self.general_options_panel_jpeg) + self.document_color_profile_title_jpeg.setGeometry(290, 175, 320, 30) + self.document_color_profile_title_jpeg.setWordWrap(True) + self.document_color_profile_title_jpeg.setFont(QtGui.QFont('Ubuntu', 7)) + self.document_color_profile_title_jpeg.setAlignment(QtCore.Qt.AlignLeft) + + if selected_print_profile == '': + self.document_color_profile_title_jpeg.setEnabled(False) + self.color_profile_choice_jpeg.setEnabled(False) + self.document_color_profile_title_jpeg.setText(_(u"This document is not using a color profile.")) + else: + self.document_color_profile_title_jpeg.setText(_(u"The profile used by Inkscape is") + ' ' + selected_print_profile[:-4]) + + self.jpeg_interlace_option_jpeg = QtWidgets.QCheckBox(_(u"Interlace"), parent=self.general_options_panel_jpeg) + self.jpeg_interlace_option_jpeg.setGeometry(10, 80, 120, 25) + self.jpeg_interlace_option_jpeg.toggled.connect(self.jpeg_interlace_click_jpeg) + + self.jpeg_interlace_choice_jpeg = QtWidgets.QComboBox(parent=self.general_options_panel_jpeg) + self.jpeg_interlace_choice_jpeg.setGeometry(130, 80, 140, 25) + self.jpeg_interlace_choice_jpeg.addItems(list_of_interlacing_jpeg.keys()) + self.jpeg_interlace_choice_jpeg.setCurrentIndex(1) + self.jpeg_interlace_choice_jpeg.setEnabled(False) + self.jpeg_interlace_choice_jpeg.activated.connect(self.generate_preview) + + self.jpeg_optimize_option_jpeg = QtWidgets.QCheckBox(_(u"Optimize"), parent=self.general_options_panel_jpeg) + self.jpeg_optimize_option_jpeg.setGeometry(10, 115, 260, 25) + self.jpeg_optimize_option_jpeg.setChecked(True) + + self.jpeg_noise_option_jpeg = QtWidgets.QCheckBox(_(u"Noise"), parent=self.general_options_panel_jpeg) + self.jpeg_noise_option_jpeg.setGeometry(10, 150, 120, 25) + self.jpeg_noise_option_jpeg.toggled.connect(self.jpeg_noise_click_jpeg) + + self.jpeg_noise_choice_jpeg = QtWidgets.QComboBox(parent=self.general_options_panel_jpeg) + self.jpeg_noise_choice_jpeg.setGeometry(130, 150, 140, 25) + self.jpeg_noise_choice_jpeg.addItems(list_of_noise_jpeg.keys()) + self.jpeg_noise_choice_jpeg.setCurrentIndex(1) + self.jpeg_noise_choice_jpeg.setEnabled(False) + self.jpeg_noise_choice_jpeg.activated.connect(self.generate_preview) + + self.jpeg_noise_ammount_jpeg = QtWidgets.QSlider(QtCore.Qt.Horizontal, parent=self.general_options_panel_jpeg) + self.jpeg_noise_ammount_jpeg.setGeometry(15, 175, 260, 25) + self.jpeg_noise_ammount_jpeg.setRange(0,100) + self.jpeg_noise_ammount_jpeg.setEnabled(False) + self.jpeg_noise_ammount_jpeg.setValue(0) + self.jpeg_noise_ammount_jpeg.sliderReleased.connect(self.generate_preview) + + self.jpeg_subsampling_option_jpeg = QtWidgets.QLabel(parent=self.general_options_panel_jpeg) + self.jpeg_subsampling_option_jpeg.setText(_(u"Sub-sampling")) + self.jpeg_subsampling_option_jpeg.setGeometry(10, 210, 140, 25) + + self.jpeg_subsampling_choice_jpeg = QtWidgets.QComboBox(parent=self.general_options_panel_jpeg) + self.jpeg_subsampling_choice_jpeg.setGeometry(150, 210, 120, 25) + self.jpeg_subsampling_choice_jpeg.addItems(list_of_subsampling_jpeg) + self.jpeg_subsampling_choice_jpeg.setCurrentIndex(0) + self.jpeg_subsampling_choice_jpeg.activated.connect(self.generate_preview) + + self.jpeg_dct_option_jpeg = QtWidgets.QLabel(parent=self.general_options_panel_jpeg) + self.jpeg_dct_option_jpeg.setText(_(u"DCT Method")) + self.jpeg_dct_option_jpeg.setGeometry(10, 245, 120, 25) + + self.jpeg_dct_choice_jpeg = QtWidgets.QComboBox(parent=self.general_options_panel_jpeg) + self.jpeg_dct_choice_jpeg.setGeometry(130, 245, 140, 25) + self.jpeg_dct_choice_jpeg.addItems(list_of_dct_jpeg.keys()) + self.jpeg_dct_choice_jpeg.activated.connect(self.generate_preview) + + self.cmyk_advanced_manipulation_option_jpeg = QtWidgets.QCheckBox(_(u"Accurate color handling"), parent=self.general_options_panel_jpeg) + self.cmyk_advanced_manipulation_option_jpeg.setGeometry(283, 80, 325, 25) + self.cmyk_advanced_manipulation_option_jpeg.clicked.connect(self.cmyk_advanced_manipulation_click_jpeg) + + self.cmyk_overblack_jpeg = QtWidgets.QCheckBox(_(u"Black overlay"), parent=self.general_options_panel_jpeg) + self.cmyk_overblack_jpeg.setGeometry(283, 115, 325, 25) + self.cmyk_overblack_jpeg.setEnabled(False) + self.cmyk_overblack_jpeg.clicked.connect(self.cmyk_advanced_manipulation_click_jpeg) + + self.area_to_export_title = QtWidgets.QLabel(parent=self.general_geometry_panel) + self.area_to_export_title.setText(_(u"Area to export").upper()) + self.area_to_export_title.setGeometry(10, 20, 250, 15) + self.area_to_export_title.setFont(QtGui.QFont('Ubuntu', 8)) + + self.area_to_export_choice = QtWidgets.QComboBox(parent=self.general_geometry_panel) + self.area_to_export_choice.setGeometry(10, 35, 250, 25) + self.area_to_export_choice.addItems(list_of_area_to_export) + self.area_to_export_choice.activated.connect(self.change_area_to_export) + + self.dpi_title = QtWidgets.QLabel(parent=self.general_geometry_panel) + self.dpi_title.setText(_(u"Dots per inch").upper()) + self.dpi_title.setGeometry(270, 20, 200, 15) + self.dpi_title.setFont(QtGui.QFont('Ubuntu', 8)) + + self.dpi_choice = QtWidgets.QSpinBox(parent=self.general_geometry_panel) + self.dpi_choice.setValue(90) + self.dpi_choice.setGeometry(270, 35, 100, 25) + self.dpi_choice.setRange(1, 99999) + self.dpi_choice.editingFinished.connect(self.change_area_to_export) + + self.dpi_text_title = QtWidgets.QLabel(parent=self.general_geometry_panel) + self.dpi_text_title.setText('dpi') + self.dpi_text_title.setGeometry(380, 35, 80, 25) + self.dpi_text_title.setFont(QtGui.QFont('Ubuntu', 8)) + + self.x0_value = QtWidgets.QSpinBox(parent=self.general_geometry_panel) + self.x0_value.setGeometry(10, 100, 80, 25) + self.x0_value.setRange(1, 2147483647) + self.x0_value.editingFinished.connect(self.change_area_to_export) + + self.y0_value = QtWidgets.QSpinBox(parent=self.general_geometry_panel) + self.y0_value.setGeometry(100, 130, 80, 25) + self.y0_value.setRange(1, 2147483647) + self.y0_value.editingFinished.connect(self.change_area_to_export) + + self.x1_value = QtWidgets.QSpinBox(parent=self.general_geometry_panel) + self.x1_value.setGeometry(100, 70, 80, 25) + self.x1_value.setRange(1, 2147483647) + self.x1_value.editingFinished.connect(self.change_area_to_export) + + self.y1_value = QtWidgets.QSpinBox(parent=self.general_geometry_panel) + self.y1_value.setGeometry(190, 100, 80, 25) + self.y1_value.setRange(1, 2147483647) + self.y1_value.editingFinished.connect(self.change_area_to_export) + + self.area_to_export_id_title = QtWidgets.QLabel(parent=self.general_geometry_panel) + self.area_to_export_id_title.setText(_(u"Object to be exported").upper()) + self.area_to_export_id_title.setGeometry(10, 70, 300, 15) + self.area_to_export_id_title.setFont(QtGui.QFont('Ubuntu', 8)) + + self.area_to_export_id_name = QtWidgets.QLineEdit(parent=self.general_geometry_panel) + self.area_to_export_id_name.setGeometry(10, 85, 300, 25) + + self.area_to_export_idonly_check = QtWidgets.QCheckBox(parent=self.general_geometry_panel) + self.area_to_export_idonly_check.setGeometry(10, 120, 400, 25) + self.area_to_export_idonly_check.setText(_(u"Export only object")) + + self.prepress_paper_settings_label = QtWidgets.QLabel(parent=self.general_prepress_panel) + self.prepress_paper_settings_label.setGeometry(10, 10, 300, 15) + self.prepress_paper_settings_label.setText(_(u"Paper or film setting").upper()) + self.prepress_paper_settings_label.setFont(QtGui.QFont('Ubuntu', 8)) + + self.prepress_paper_settings_invert = QtWidgets.QCheckBox(parent=self.general_prepress_panel) + self.prepress_paper_settings_invert.setGeometry(10, 25, 300, 25) + self.prepress_paper_settings_invert.setText(_(u"Invert")) + self.prepress_paper_settings_invert.setChecked(False) + self.prepress_paper_settings_invert.clicked.connect(self.generate_preview) + + self.prepress_paper_settings_mirror = QtWidgets.QCheckBox(parent=self.general_prepress_panel) + self.prepress_paper_settings_mirror.setGeometry(10, 50, 300, 25) + self.prepress_paper_settings_mirror.setText(_(u"Mirror")) + self.prepress_paper_settings_mirror.setChecked(False) + self.prepress_paper_settings_mirror.clicked.connect(self.generate_preview) + + self.prepress_paper_cutmarks_label = QtWidgets.QLabel(parent=self.general_prepress_panel) + self.prepress_paper_cutmarks_label.setGeometry(10, 85, 300, 15) + self.prepress_paper_cutmarks_label.setText(_(u"Crop marks").upper()) + self.prepress_paper_cutmarks_label.setFont(QtGui.QFont('Ubuntu', 8)) + + self.prepress_paper_cutmarks_check = QtWidgets.QCheckBox(parent=self.general_prepress_panel) + self.prepress_paper_cutmarks_check.setGeometry(10, 100, 300, 25) + self.prepress_paper_cutmarks_check.setText(_(u"Insert crop marks")) + self.prepress_paper_cutmarks_check.setChecked(False) + self.prepress_paper_cutmarks_check.clicked.connect(self.cut_marks_insert_change) + + self.prepress_paper_cutmarks_strokewidth_label = QtWidgets.QLabel(parent=self.general_prepress_panel) + self.prepress_paper_cutmarks_strokewidth_label.setGeometry(10, 125, 200, 25) + self.prepress_paper_cutmarks_strokewidth_label.setText(_(u"Mark thickness:")) + self.prepress_paper_cutmarks_strokewidth_label.setEnabled(False) + + self.prepress_paper_cutmarks_strokewidth_value = QtWidgets.QLineEdit(parent=self.general_prepress_panel) + self.prepress_paper_cutmarks_strokewidth_value.setGeometry(210, 125, 50, 25) + self.prepress_paper_cutmarks_strokewidth_value.setText('1') + self.prepress_paper_cutmarks_strokewidth_value.setEnabled(False) + self.prepress_paper_cutmarks_strokewidth_value.editingFinished.connect(self.generate_preview) + + self.prepress_paper_cutmarks_strokewidth_choice = QtWidgets.QComboBox(parent=self.general_prepress_panel) + self.prepress_paper_cutmarks_strokewidth_choice.setGeometry(260,125,50,25) + self.prepress_paper_cutmarks_strokewidth_choice.addItems(uuconv.keys()) + self.prepress_paper_cutmarks_strokewidth_choice.setCurrentIndex(5) + self.prepress_paper_cutmarks_strokewidth_choice.activated.connect(self.generate_preview) + self.prepress_paper_cutmarks_strokewidth_choice.setEnabled(False) + + self.prepress_paper_cutmarks_bleedsize_label = QtWidgets.QLabel(parent=self.general_prepress_panel) + self.prepress_paper_cutmarks_bleedsize_label.setGeometry(10, 150, 200, 25) + self.prepress_paper_cutmarks_bleedsize_label.setText(_(u"Bleed:")) + self.prepress_paper_cutmarks_bleedsize_label.setEnabled(False) + + self.prepress_paper_cutmarks_bleedsize_value = QtWidgets.QLineEdit(parent=self.general_prepress_panel) + self.prepress_paper_cutmarks_bleedsize_value.setGeometry(210, 150, 50, 25) + self.prepress_paper_cutmarks_bleedsize_value.setText('5') + self.prepress_paper_cutmarks_bleedsize_value.setEnabled(False) + self.prepress_paper_cutmarks_bleedsize_value.editingFinished.connect(self.generate_preview) + + self.prepress_paper_cutmarks_bleedsize_choice = QtWidgets.QComboBox(parent=self.general_prepress_panel) + self.prepress_paper_cutmarks_bleedsize_choice.setGeometry(260,150,50,25) + self.prepress_paper_cutmarks_bleedsize_choice.addItems(uuconv.keys()) + self.prepress_paper_cutmarks_bleedsize_choice.setCurrentIndex(5) + self.prepress_paper_cutmarks_bleedsize_choice.activated.connect(self.generate_preview) + self.prepress_paper_cutmarks_bleedsize_choice.setEnabled(False) + + self.prepress_paper_cutmarks_marksize_label = QtWidgets.QLabel(parent=self.general_prepress_panel) + self.prepress_paper_cutmarks_marksize_label.setGeometry(10, 175, 200, 25) + self.prepress_paper_cutmarks_marksize_label.setText(_(u"Mark size:")) + self.prepress_paper_cutmarks_marksize_label.setEnabled(False) + + self.prepress_paper_cutmarks_marksize_value = QtWidgets.QLineEdit(parent=self.general_prepress_panel) + self.prepress_paper_cutmarks_marksize_value.setGeometry(210, 175, 50, 25) + self.prepress_paper_cutmarks_marksize_value.setText('5') + self.prepress_paper_cutmarks_marksize_value.setEnabled(False) + self.prepress_paper_cutmarks_marksize_value.editingFinished.connect(self.generate_preview) + + self.prepress_paper_cutmarks_marksize_choice = QtWidgets.QComboBox(parent=self.general_prepress_panel) + self.prepress_paper_cutmarks_marksize_choice.setGeometry(260,175,50,25) + self.prepress_paper_cutmarks_marksize_choice.addItems(uuconv.keys()) + self.prepress_paper_cutmarks_marksize_choice.setCurrentIndex(5) + self.prepress_paper_cutmarks_marksize_choice.activated.connect(self.generate_preview) + self.prepress_paper_cutmarks_marksize_choice.setEnabled(False) + + self.prepress_paper_cutmarks_inside_check = QtWidgets.QCheckBox(parent=self.general_prepress_panel) + self.prepress_paper_cutmarks_inside_check.setGeometry(10, 200, 300, 25) + self.prepress_paper_cutmarks_inside_check.setText(_(u"No internal marks")) + self.prepress_paper_cutmarks_inside_check.setChecked(False) + self.prepress_paper_cutmarks_inside_check.setEnabled(False) + self.prepress_paper_cutmarks_inside_check.clicked.connect(self.generate_preview) + + self.imposition_label = QtWidgets.QLabel(parent=self.general_imposition_panel) + self.imposition_label.setGeometry(10, 10, 300, 15) + self.imposition_label.setText(_(u"Amount of impositions").upper()) + self.imposition_label.setFont(QtGui.QFont('Ubuntu', 8)) + + self.imposition_vertical_number_label = QtWidgets.QLabel(parent=self.general_imposition_panel) + self.imposition_vertical_number_label.setGeometry(10, 25, 200, 25) + self.imposition_vertical_number_label.setText(_(u"Lines:")) + + self.imposition_vertical_number_value = QtWidgets.QSpinBox(parent=self.general_imposition_panel) + self.imposition_vertical_number_value.setGeometry(210, 25, 50, 25) + self.imposition_vertical_number_value.setValue(1) + self.imposition_vertical_number_value.setRange(1, 999) + self.imposition_vertical_number_value.editingFinished.connect(self.generate_preview) + + self.imposition_horizontal_number_label = QtWidgets.QLabel(parent=self.general_imposition_panel) + self.imposition_horizontal_number_label.setGeometry(10, 60, 200, 25) + self.imposition_horizontal_number_label.setText(_(u"Columns:")) + + self.imposition_horizontal_number_value = QtWidgets.QSpinBox(parent=self.general_imposition_panel) + self.imposition_horizontal_number_value.setGeometry(210, 60, 50, 25) + self.imposition_horizontal_number_value.setValue(1) + self.imposition_horizontal_number_value.setRange(1, 999) + self.imposition_horizontal_number_value.editingFinished.connect(self.generate_preview) + + self.imposition_space_label = QtWidgets.QLabel(parent=self.general_imposition_panel) + self.imposition_space_label.setGeometry(10, 90, 200, 25) + self.imposition_space_label.setText(_(u"Space between marks:")) + + self.imposition_space_value = QtWidgets.QLineEdit(parent=self.general_imposition_panel) + self.imposition_space_value.setGeometry(210, 90, 50, 25) + self.imposition_space_value.setText('5') + self.imposition_space_value.editingFinished.connect(self.generate_preview) + + self.imposition_space_choice = QtWidgets.QComboBox(parent=self.general_imposition_panel) + self.imposition_space_choice.setGeometry(260,90,50,25) + self.imposition_space_choice.addItems(uuconv.keys()) + self.imposition_space_choice.setCurrentIndex(5) + self.imposition_space_choice.activated.connect(self.generate_preview) + + self.export_button = QtWidgets.QPushButton(QtGui.QIcon.fromTheme("document-export"), _("Export"), parent=self) + self.export_button.setGeometry(740, 560, 200, 30) + self.export_button.setIconSize(QtCore.QSize(20,20)) + self.export_button.clicked.connect(self.export) + + self.change_area_to_export() + self.change_format() + + def generate_preview(self): + if self.format_preview_check.isChecked(): + self.generate_final_file() + + if self.option_box.currentIndex() == 0: + self.preview_original_title.setVisible(True) + self.preview_result_title.setVisible(True) + + final_command = ['convert'] + final_command.append(os.path.join(dirpathTempFolder.name, 'result-imp.') + list_of_export_formats[self.format_choice.currentIndex()].lower()) + + if self.color_profile_choice_jpeg.isChecked(): + final_command.append('-profile') + final_command.append(os.path.join(icc_dir, selected_screen_profile)) + + final_command.append(os.path.join(dirpathTempFolder.name, 'result.png')) + subprocess.Popen(final_command, shell=shell).wait() + + file_info = subprocess.Popen(['identify', os.path.join(dirpathTempFolder.name, 'source.png')], shell=shell, stdout=subprocess.PIPE).communicate()[0].decode('UTF-8') + image_width = int(file_info.split(' ')[2].split('x')[0]) + image_height = int(file_info.split(' ')[2].split('x')[1]) + + marksize = (self.dpi_choice.value() / 90) * unittouu(str(self.prepress_paper_cutmarks_marksize_value.text()) + str(self.prepress_paper_cutmarks_marksize_choice.currentText())) + imposition_space = (self.dpi_choice.value() / 90) * unittouu(str(self.imposition_space_value.text()) + str(self.imposition_space_choice.currentText())) + + file_info = subprocess.Popen(['identify', '-verbose', os.path.join(dirpathTempFolder.name, 'result-imp.') + list_of_export_formats[self.format_choice.currentIndex()].lower()], shell=shell, stdout=subprocess.PIPE).communicate()[0].decode('UTF-8') + file_info_final = '' + for line in file_info.split('\n'): + if ' Format: ' in line: + file_info_final += 'Image Format: ' + line.replace(' Format: ', '') + '
    ' + if ' Geometry: ' in line: + file_info_final += 'Width and height: ' + line.replace(' Geometry: ', '').split('+')[0] + '
    ' + if ' Resolution: ' in line: + file_info_final += 'Resolution: ' + line.replace(' Resolution: ', '') + if ' Units: ' in line: + file_info_final += ' ' + line.replace(' Units: ', '').replace('Per', ' per ').replace('Pixels', 'pixels').replace('Centimeter', 'centimeter').replace('Inch', 'inch') + '
    ' + if ' Colorspace: ' in line: + file_info_final += 'Colorspace: ' + line.replace(' Colorspace: ', '') + '
    ' + if ' Depth: ' in line: + file_info_final += 'Depth: ' + line.replace(' Depth: ', '') + '
    ' + if ' Quality: ' in line: + file_info_final += 'Quality: ' + line.replace(' Quality: ', '') + '%
    ' + if ' Filesize: ' in line: + file_info_final += 'Filesize: ' + line.replace(' Filesize: ', '') + '
    ' + if ' jpeg:sampling-factor: ' in line: + file_info_final += 'Sampling: ' + line.replace(' jpeg:sampling-factor: ', '') + '
    ' + + if self.prepress_paper_cutmarks_check.isChecked(): + margin = marksize + else: + margin = imposition_space + + if image_width < 300 or image_height < 300: + what_show = '-extent ' + str(int(300 * self.preview_zoom)) + 'x' + str(int(300 * self.preview_zoom)) + '-' + str(int(150 * self.preview_zoom) - int(image_width / 2)) + '-' + str(int(150 * self.preview_zoom) - int(image_height / 2)) + else: + what_show = '-crop ' + str(int(300 * self.preview_zoom)) + 'x' + str(int(300 * self.preview_zoom)) + '+' + str(int(image_width / 2) - int(150 * self.preview_zoom)) + '+' + str(int(image_height / 2) - int(150 * self.preview_zoom)) + os.system('convert "' + os.path.join(dirpathTempFolder.name, 'source.png') + '" ' + what_show + ' "' + os.path.join(dirpathTempFolder.name, 'original.png') + '"' ) + + if image_width < 300 or image_height < 300: + what_show = '-extent ' + str(int(300 * self.preview_zoom)) + 'x' + str(int(300 * self.preview_zoom)) + '-' + str(int(150 * self.preview_zoom) - int(image_width / 2) - margin) + '-' + str(int(150 * self.preview_zoom) - int(image_height / 2) - margin) + else: + what_show = '-crop ' + str(int(300 * self.preview_zoom)) + 'x' + str(int(300 * self.preview_zoom)) + '+' + str(int(image_width / 2) - int(150 * self.preview_zoom) + margin) + '+' + str(int(image_height / 2) - int(150 * self.preview_zoom) + margin) + + os.system('convert "' + os.path.join(dirpathTempFolder.name, 'result.png') + '" ' + what_show + ' "' + os.path.join(dirpathTempFolder.name, 'result.png') + '"' ) + + if not self.preview_zoom == 1: + os.system('convert "' + os.path.join(dirpathTempFolder.name, 'original.png') + '" -filter box -resize 300x300 "' + os.path.join(dirpathTempFolder.name, 'original.png') + '"' ) + os.system('convert "' + os.path.join(dirpathTempFolder.name, 'result.png') + '" -filter box -resize 300x300 "' + os.path.join(dirpathTempFolder.name, 'result.png') + '"' ) + + os.system( + 'convert "' + + os.path.join(dirpathTempFolder.name, 'original.png') + + '" "' + + os.path.join(dirpathTempFolder.name, 'result.png') + + '" "' + + os.path.join(dirpathSoftware, 'preview_mask.png') + #static file from extension directory + '" -composite "' + + os.path.join(dirpathTempFolder.name, 'preview.png') + + '"' + ) + + self.view_image_info.setText(file_info_final + '
    ' + list_of_format_tips[list_of_export_formats[self.format_choice.currentIndex()]] + '') + + elif self.option_box.currentIndex() == 1: + self.preview_original_title.setVisible(False) + self.preview_result_title.setVisible(False) + + subprocess.Popen(['convert', os.path.join(dirpathTempFolder.name, 'result-imp.') + list_of_export_formats[self.format_choice.currentIndex()].lower(), '-resize', '300x300', os.path.join(dirpathTempFolder.name, 'preview.png')], shell=shell).wait() + + elif self.option_box.currentIndex() == 2: + None + + elif self.option_box.currentIndex() == 3: + None + + self.preview_bitmap.setPixmap(QtGui.QPixmap(os.path.join(dirpathTempFolder.name, 'preview.png'))) + + def generate_final_file(self): + if list_of_export_formats[self.format_choice.currentIndex()] == 'JPEG': + jpeg_command = ['convert'] + + if not self.cmyk_advanced_manipulation_option_jpeg.isChecked(): + pre_command = ['convert'] + pre_command.append(os.path.join(dirpathTempFolder.name, 'source.tiff')) + + if list_of_color_modes_jpeg[self.color_mode_choice_jpeg.currentIndex()] == 'CMYK' or list_of_color_modes_jpeg[self.color_mode_choice_jpeg.currentIndex()] == 'RGB': + if self.color_profile_choice_jpeg.isChecked(): + pre_command.append('-profile') + pre_command.append(os.path.join(icc_dir, selected_screen_profile)) + pre_command.append('-profile') + pre_command.append(os.path.join(icc_dir, selected_screen_profile)) + + if list_of_color_modes_jpeg[self.color_mode_choice_jpeg.currentIndex()] == 'RGB': + pre_command.append(os.path.join(dirpathTempFolder.name, 'result.tiff')) + subprocess.Popen(pre_command, shell=shell).wait() + del pre_command[:] + pre_command.append('convert') + pre_command.append(os.path.join(dirpathTempFolder.name, 'result.tiff')) + pre_command.append('-profile') + pre_command.append(os.path.join(icc_dir, selected_screen_profile)) + + pre_command.append(os.path.join(dirpathTempFolder.name, 'result.tiff')) + subprocess.Popen(pre_command, shell=shell).wait() + if not os.path.isfile(os.path.join(dirpathTempFolder.name, 'result.tiff')): + inkex.utils.debug("Error. Missing result.tiff") + + else: + if self.color_profile_choice_jpeg.isChecked(): + pre_command = ['convert'] + pre_command.append(os.path.join(dirpathTempFolder.name, 'result.tiff')) + pre_command.append('-profile') + pre_command.append(os.path.join(icc_dir, selected_screen_profile)) + pre_command.append(os.path.join(dirpathTempFolder.name, 'result.tiff')) + subprocess.Popen(pre_command, shell=shell).wait() + + file_info = subprocess.Popen(['identify', os.path.join(dirpathTempFolder.name, 'source.png')], shell=shell, stdout=subprocess.PIPE).communicate()[0].decode('UTF-8') + if self.prepress_paper_cutmarks_check.isChecked(): + bleedsize = (self.dpi_choice.value() / 90) * unittouu(str(self.prepress_paper_cutmarks_bleedsize_value.text()) + str(self.prepress_paper_cutmarks_bleedsize_choice.currentText())) + marksize = (self.dpi_choice.value() / 90) * unittouu(str(self.prepress_paper_cutmarks_marksize_value.text()) + str(self.prepress_paper_cutmarks_marksize_choice.currentText())) + else: + bleedsize = 0 + marksize = 0 + + imposition_space = (self.dpi_choice.value() / 90) *unittouu(str(self.imposition_space_value.text()) + str(self.imposition_space_choice.currentText())) + + image_width = [] + for i in range(self.imposition_vertical_number_value.value()): + image_width.append(int(file_info.split(' ')[2].split('x')[0])) + + image_height = [] + for i in range(self.imposition_horizontal_number_value.value()): + image_height.append(int(file_info.split(' ')[2].split('x')[1])) + + imposition_command = ['convert'] + imposition_command.append(os.path.join(dirpathTempFolder.name, 'result.tiff')) + imposition_command.append('-extent') + imposition_command.append(str(sum(image_width) + (marksize*2) + (imposition_space * (len(image_width) -1))) + 'x' + str(sum(image_height) + (marksize*2) + (imposition_space * (len(image_height) -1))) + '-' + str(marksize) + '-' + str(marksize)) + imposition_command.append(os.path.join(dirpathTempFolder.name, 'result-imp.tiff')) + subprocess.Popen(imposition_command, shell=shell).wait() + + last_width = 0 + last_height = 0 + last_marksize = marksize + for width in image_width: + for height in image_height: + if not (last_width == 0 and last_height == 0): + imposition_command = ['composite'] + imposition_command.append('-geometry') + imposition_command.append('+' + str(last_width + marksize) + '+' + str(last_height + marksize)) + imposition_command.append(os.path.join(dirpathTempFolder.name, 'result.tiff')) + imposition_command.append(os.path.join(dirpathTempFolder.name, 'result-imp.tiff')) + imposition_command.append(os.path.join(dirpathTempFolder.name, 'result-imp.tiff')) + subprocess.Popen(imposition_command, shell=shell).wait() + + last_height += height + imposition_space + last_marksize = 0 + last_width += width + imposition_space + last_height = 0 + + if self.prepress_paper_cutmarks_check.isChecked(): + cutmarks.generate_final_file(False, + self.prepress_paper_cutmarks_inside_check.isChecked(), + list_of_color_modes_jpeg[self.color_mode_choice_jpeg.currentIndex()], + image_width, + image_height, + imposition_space, + unittouu(str(self.prepress_paper_cutmarks_strokewidth_value.text()) + str(self.prepress_paper_cutmarks_strokewidth_choice.currentText())), + bleedsize, + marksize, + dirpathTempFolder.name) + + cut_marks_command = ['composite'] + cut_marks_command.append('-compose') + cut_marks_command.append('Multiply') + cut_marks_command.append('-gravity') + cut_marks_command.append('center') + cut_marks_command.append(os.path.join(dirpathTempFolder.name, 'cut_mark.tiff')) + cut_marks_command.append(os.path.join(dirpathTempFolder.name, 'result-imp.tiff')) + cut_marks_command.append(os.path.join(dirpathTempFolder.name, 'result-imp.tiff')) + subprocess.Popen(cut_marks_command, shell=shell).wait() + + if not os.path.isfile(os.path.join(dirpathTempFolder.name, 'result-imp.tiff')): + inkex.utils.debug("Error. Missing result-imp.tiff") + + jpeg_command.append(os.path.join(dirpathTempFolder.name, 'result-imp.tiff')) + + if self.prepress_paper_settings_invert.isChecked(): + jpeg_command.append('-negate') + + if self.prepress_paper_settings_mirror.isChecked(): + jpeg_command.append('-flop') + + jpeg_command.append('-quality') + jpeg_command.append(str(self.quality_choice_dial_jpeg.value())) + + jpeg_command.append('-colorspace') + jpeg_command.append(list_of_color_modes_jpeg[self.color_mode_choice_jpeg.currentIndex()]) + + if self.jpeg_interlace_option_jpeg.isChecked(): + jpeg_command.append('-interlace') + jpeg_command.append(list_of_interlacing_jpeg[self.jpeg_interlace_choice_jpeg.currentText()]) + + if self.jpeg_optimize_option_jpeg.isChecked(): + jpeg_command.append('-type') + jpeg_command.append('optimize') + + if self.jpeg_noise_option_jpeg.isChecked(): + jpeg_command.append('-evaluate') + jpeg_command.append(list_of_noise_jpeg[self.jpeg_noise_choice_jpeg.currentText()]) + jpeg_command.append(str(self.jpeg_noise_ammount_jpeg.value())) + + jpeg_command.append('-sampling-factor') + jpeg_command.append(self.jpeg_subsampling_choice_jpeg.currentText()) + + jpeg_command.append('-define') + jpeg_command.append('jpeg:dct-method=' + list_of_dct_jpeg[self.jpeg_dct_choice_jpeg.currentText()]) + + jpeg_command.append(os.path.join(dirpathTempFolder.name, 'result-imp.jpeg')) + + subprocess.Popen(jpeg_command, shell=shell).wait() + + def change_format(self): + self.general_options_panel_jpeg.setVisible(False) + + if list_of_export_formats[self.format_choice.currentIndex()] == 'JPEG': + self.general_options_panel_jpeg.setVisible(True) + + self.generate_preview() + + def change_color_mode_jpeg(self): + if list_of_color_modes_jpeg[self.color_mode_choice_jpeg.currentIndex()] == 'CMYK': + self.color_mode_title_tip_jpeg.setText(u'Recommended for graphic printing') + self.cmyk_advanced_manipulation_option_jpeg.setChecked(False) + self.cmyk_advanced_manipulation_option_jpeg.setEnabled(True) + self.cmyk_overblack_jpeg.setEnabled(False) + self.cmyk_overblack_jpeg.setChecked(False) + self.color_profile_choice_jpeg.setEnabled(True) + self.color_profile_choice_jpeg.setChecked(False) + self.document_color_profile_title_jpeg.setEnabled(True) + self.general_prepress_panel.setEnabled(True) + else: + self.cmyk_advanced_manipulation_option_jpeg.setEnabled(False) + self.cmyk_overblack_jpeg.setEnabled(False) + self.cmyk_overblack_jpeg.setChecked(False) + #self.color_profile_choice_jpeg.setEnabled(False) + self.color_profile_choice_jpeg.setChecked(False) + self.document_color_profile_title_jpeg.setEnabled(False) + self.general_prepress_panel.setEnabled(False) + if list_of_color_modes_jpeg[self.color_mode_choice_jpeg.currentIndex()] == 'CMY': + self.color_mode_title_tip_jpeg.setText(u'Recommended for specific print cases') + elif list_of_color_modes_jpeg[self.color_mode_choice_jpeg.currentIndex()] == 'RGB': + self.color_mode_title_tip_jpeg.setText(u'Recommended for use on screens') + elif list_of_color_modes_jpeg[self.color_mode_choice_jpeg.currentIndex()] == 'Gray': + self.color_mode_title_tip_jpeg.setText(u'Grayscale image') + + self.generate_preview() + + def change_quality_live_jpeg(self): + self.quality_percent_title_jpeg.setText(str(self.quality_choice_dial_jpeg.value()) + '%') + + def jpeg_interlace_click_jpeg(self): + if self.jpeg_interlace_option_jpeg.isChecked(): + self.jpeg_interlace_choice_jpeg.setEnabled(True) + else: + self.jpeg_interlace_choice_jpeg.setEnabled(False) + self.generate_preview() + + def jpeg_noise_click_jpeg(self): + if self.jpeg_noise_option_jpeg.isChecked(): + self.jpeg_noise_choice_jpeg.setEnabled(True) + self.jpeg_noise_ammount_jpeg.setEnabled(True) + else: + self.jpeg_noise_choice_jpeg.setEnabled(False) + self.jpeg_noise_ammount_jpeg.setEnabled(False) + self.generate_preview() + + def cmyk_advanced_manipulation_click_jpeg(self): + if self.cmyk_advanced_manipulation_option_jpeg.isChecked(): + self.cmyk_overblack_jpeg.setEnabled(True) + self.view_c_button.setVisible(True) + self.view_m_button.setVisible(True) + self.view_y_button.setVisible(True) + self.view_k_button.setVisible(True) + self.cmyk_overprint_black() + self.cmyk_advanced_manipulation() + + else: + self.cmyk_overblack_jpeg.setEnabled(False) + self.cmyk_overblack_jpeg.setChecked(False) + self.view_c_button.setVisible(False) + self.view_m_button.setVisible(False) + self.view_y_button.setVisible(False) + self.view_k_button.setVisible(False) + self.generate_preview() + + def cmyk_overprint_black(self): + with open(os.path.join(dirpathTempFolder.name, 'original.svg'), 'r') as f: + if self.cmyk_overblack_jpeg.isChecked(): + cmyk.generate_svg_separations(dirpathTempFolder.name, f.read(), True) + else: + cmyk.generate_svg_separations(dirpathTempFolder.name, f.read(), False) + + def cmyk_advanced_manipulation(self): + area_to_export = self.area_to_export() + cmyk.generate_png_separations(dirpathTempFolder.name, self.area_to_export(), self.dpi_choice.value(), False) + + for color in ['C', 'M', 'Y', 'K']: + cmd = ['convert', + os.path.join(dirpathTempFolder.name, 'separated' + area_to_export.replace(' ', '') + color + ".png"), + '-colorspace', + 'CMYK', + '-channel', + color, + '-separate', + os.path.join(dirpathTempFolder.name, 'separated' + area_to_export.replace(' ', '') + color + ".png")] + #inkex.utils.debug(cmd) + p = subprocess.Popen(cmd, shell=shell).wait() + + self.cmyk_advanced_manipulation_view_separations() + + def cmyk_advanced_manipulation_view_separations(self): + area_to_export = self.area_to_export() + + file_info = subprocess.Popen(['identify', os.path.join(dirpathTempFolder.name, 'source.png')], shell=shell, stdout=subprocess.PIPE).communicate()[0].decode('UTF-8') + + image_size = file_info.split(' ')[2] + + subprocess.Popen(['convert', '-size', image_size, 'xc:black', os.path.join(dirpathTempFolder.name, 'empty.png')], shell=shell).wait() + + final_command = ['convert'] + + if self.view_c_button.isChecked(): + final_command.append(os.path.join(dirpathTempFolder.name, 'separated') + area_to_export.replace(' ', '') + 'C' + ".png") + else: + final_command.append(os.path.join(dirpathTempFolder.name, 'empty.png')) + + if self.view_m_button.isChecked(): + final_command.append(os.path.join(dirpathTempFolder.name, 'separated') + area_to_export.replace(' ', '') + 'M' + ".png") + else: + final_command.append(os.path.join(dirpathTempFolder.name, 'empty.png')) + + if self.view_y_button.isChecked(): + final_command.append(os.path.join(dirpathTempFolder.name, 'separated') + area_to_export.replace(' ', '') + 'Y' + ".png") + else: + final_command.append(os.path.join(dirpathTempFolder.name, 'empty.png')) + + if self.view_k_button.isChecked(): + final_command.append(os.path.join(dirpathTempFolder.name, 'separated') + area_to_export.replace(' ', '') + 'K' + ".png") + else: + final_command.append(os.path.join(dirpathTempFolder.name, 'empty.png')) + + if not os.path.isfile(os.path.join(dirpathTempFolder.name, 'empty.png')): + inkex.utils.debug("Error. Missing empty.png") + + final_command.extend(['-set', 'colorspace', 'cmyk']) + final_command.extend(['-combine', os.path.join(dirpathTempFolder.name, 'result.tiff')]) + subprocess.Popen(final_command, shell=shell).wait() + + self.generate_preview() + + def area_to_export(self): + if self.area_to_export_choice.currentIndex() == 1: + return 'export-area-drawing' + + elif self.area_to_export_choice.currentIndex() == 2: + if self.area_to_export_idonly_check.isChecked(): + return 'export-id:' + str(self.area_to_export_id_name.text()) + 'export-id-only' + else: + return 'export-id:' + str(self.area_to_export_id_name.text()) + + elif self.area_to_export_choice.currentIndex() == 3: + return 'export-area:' + str(self.x0_value.value()) + ':' + str(self.y0_value.value()) + ':' + str(self.x1_value.value()) + ':' + str(self.y1_value.value()) + + else: + return 'export-area-page' + + def change_area_to_export(self): + self.x0_value.setVisible(False) + self.y0_value.setVisible(False) + self.x1_value.setVisible(False) + self.y1_value.setVisible(False) + self.area_to_export_id_title.setVisible(False) + self.area_to_export_id_name.setVisible(False) + self.area_to_export_idonly_check.setVisible(False) + + if self.area_to_export_choice.currentIndex() == 2: + self.area_to_export_id_name.setText(selected_object) + self.area_to_export_id_title.setVisible(True) + self.area_to_export_id_name.setVisible(True) + self.area_to_export_idonly_check.setVisible(True) + + elif self.area_to_export_choice.currentIndex() == 3: + self.x0_value.setVisible(True) + self.y0_value.setVisible(True) + self.x1_value.setVisible(True) + self.y1_value.setVisible(True) + + cmd = self.area_to_export() + ';export-dpi:' + str(self.dpi_choice.value()) + ';export-background-opacity:1;export-filename:' + os.path.join(dirpathTempFolder.name, 'source.png') + ';export-do' + cli_output = inkscape(os.path.join(dirpathTempFolder.name, 'original.svg'), actions=cmd) + #inkex.utils.debug(cmd) + if len(cli_output) > 0: + self.debug(_("Inkscape returned the following output when trying to run the file export; the file export may still have worked:")) + self.debug(cli_output) + + subprocess.Popen(['convert', os.path.join(dirpathTempFolder.name, 'source.png'), os.path.join(dirpathTempFolder.name, 'source.tiff')], shell=shell).wait() + + if not os.path.isfile(os.path.join(dirpathTempFolder.name, 'source.tiff')): + inkex.utils.debug("Error. Missing source.tiff") + + self.generate_preview() + + def zoom_out(self): + self.preview_zoom += 0.1 + self.generate_preview() + + if int(self.preview_zoom * 100) == 200: + self.zoom_out_button.setEnabled(False) + self.zoom_in_button.setEnabled(True) + + self.preview_zoom_title.setText(str(int(self.preview_zoom * 100)) + '%') + + def zoom_in(self): + self.preview_zoom -= 0.1 + self.generate_preview() + + if int(self.preview_zoom * 100) == 10: + self.zoom_in_button.setEnabled(False) + self.zoom_out_button.setEnabled(True) + + self.preview_zoom_title.setText(str(int(self.preview_zoom * 100)) + '%') + + def cut_marks_insert_change(self): + if self.prepress_paper_cutmarks_check.isChecked(): + self.prepress_paper_cutmarks_strokewidth_label.setEnabled(True) + self.prepress_paper_cutmarks_strokewidth_value.setEnabled(True) + self.prepress_paper_cutmarks_strokewidth_choice.setEnabled(True) + self.prepress_paper_cutmarks_bleedsize_label.setEnabled(True) + self.prepress_paper_cutmarks_bleedsize_value.setEnabled(True) + self.prepress_paper_cutmarks_bleedsize_choice.setEnabled(True) + self.prepress_paper_cutmarks_marksize_label.setEnabled(True) + self.prepress_paper_cutmarks_marksize_value.setEnabled(True) + self.prepress_paper_cutmarks_marksize_choice.setEnabled(True) + self.prepress_paper_cutmarks_inside_check.setEnabled(True) + + else: + self.prepress_paper_cutmarks_strokewidth_label.setEnabled(False) + self.prepress_paper_cutmarks_strokewidth_value.setEnabled(False) + self.prepress_paper_cutmarks_strokewidth_choice.setEnabled(False) + self.prepress_paper_cutmarks_bleedsize_label.setEnabled(False) + self.prepress_paper_cutmarks_bleedsize_value.setEnabled(False) + self.prepress_paper_cutmarks_bleedsize_choice.setEnabled(False) + self.prepress_paper_cutmarks_marksize_label.setEnabled(False) + self.prepress_paper_cutmarks_marksize_value.setEnabled(False) + self.prepress_paper_cutmarks_marksize_choice.setEnabled(False) + self.prepress_paper_cutmarks_inside_check.setEnabled(False) + + self.generate_preview() + + def format_preview_change(self): + if self.format_preview_check.isChecked(): + self.resize(950, 600) + self.setMaximumSize(QtCore.QSize(950, 600)) + self.setMinimumSize(QtCore.QSize(950, 600)) + self.preview_panel.setVisible(True) + self.option_box.setGeometry(320, 120, 620, 435) + self.format_title.setGeometry(320, 70, 200, 15) + self.format_choice.setGeometry(320, 85, 200, 25) + self.export_button.setGeometry(740, 560, 200, 30) + self.format_preview_check.setGeometry(540, 85, 200, 25) + else: + self.resize(640, 600) + self.setMaximumSize(QtCore.QSize(640, 600)) + self.setMinimumSize(QtCore.QSize(640, 600)) + self.preview_panel.setVisible(False) + self.option_box.setGeometry(10, 120, 620, 435) + self.format_title.setGeometry(10, 70, 200, 15) + self.format_choice.setGeometry(10, 85, 200, 25) + self.export_button.setGeometry(430, 560, 200, 30) + self.format_preview_check.setGeometry(230, 85, 200, 25) + + self.move(int((QtWidgets.QDesktopWidget().screenGeometry().width()-self.geometry().width())/2), int((QtWidgets.QDesktopWidget().screenGeometry().height()-self.geometry().height())/2)) + + def export(self): + self.location_path = QtWidgets.QFileDialog.getSaveFileName(self, _(u"Save image"), os.environ.get('HOME', None), list_of_export_formats[self.format_choice.currentIndex()], options=QtWidgets.QFileDialog.DontConfirmOverwrite) + + if not self.format_preview_check.isChecked(): + self.generate_final_file() + + if not str(self.location_path) == '': + result_imp = os.path.join(dirpathTempFolder.name, 'result-imp.' + list_of_export_formats[self.format_choice.currentIndex()].lower()) + target_imp = os.path.abspath(self.location_path[0] + "." + self.location_path[1].lower()) + if not os.path.isfile(result_imp): + inkex.utils.debug("Error. No result generated to export. The following files were created in temp dir:") + inkex.utils.debug(os.listdir(dirpathTempFolder.name)) + else: + shutil.copy2(result_imp, target_imp) + + app = QtWidgets.QApplication(sys.argv) + app.main = mainWindow() + getattr(app.main, "raise")() + app.main.show() + app.main.activateWindow() #bring to front (required for Windows; but not for Linux) + sys.exit(app.exec_()) + + + except Exception as e: + self.msg(e) + finally: + #inkex.utils.debug(os.listdir(dirpathTempFolder.name)) + dirpathTempFolder.cleanup() #close temp dir + +if __name__ == '__main__': + OutputPro().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/output_pro/outputpro/__init__.py b/extensions/fablabchemnitz/output_pro/outputpro/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/extensions/fablabchemnitz/output_pro/outputpro/alpha.png b/extensions/fablabchemnitz/output_pro/outputpro/alpha.png new file mode 100644 index 00000000..c30c1c2a Binary files /dev/null and b/extensions/fablabchemnitz/output_pro/outputpro/alpha.png differ diff --git a/extensions/fablabchemnitz/output_pro/outputpro/cmyk.py b/extensions/fablabchemnitz/output_pro/outputpro/cmyk.py new file mode 100644 index 00000000..d9391759 --- /dev/null +++ b/extensions/fablabchemnitz/output_pro/outputpro/cmyk.py @@ -0,0 +1,118 @@ +#!/usr/bin/env python3 + +import re +import os +import inkex +from inkex.command import inkscape + +def calculateCMYK(red, green, blue): + C = float() + M = float() + Y = float() + K = float() + + if 1.00 - red < 1.00 - green: + K = 1.00 - red + else: + K = 1.00 - green + + if 1.00 - blue < K: + K = 1.00 - blue + + if K != 1.00: + C = ( 1.00 - red - K ) / ( 1.00 - K ) + M = ( 1.00 - green - K ) / ( 1.00 - K ) + Y = ( 1.00 - blue - K ) / ( 1.00 - K ) + + return [C, M, Y, K] + +def clean_svg_color_definitions(svg): + def change_colors(origin, color_type): + for i in range(len(str(origin).split(color_type + ':'))): + if str(str(origin).split(color_type + ':')[i].split(';')[0]) in inkex.colors.SVG_COLOR.keys(): + color_numbers = str(inkex.Color(inkex.Color(str(str(origin).split(color_type + ':')[i].split(';')[0])).to_rgb())) + origin = str(origin).replace(':' + str(str(origin).split(color_type + ':')[i].split(';')[0]) + ';', ':' + color_numbers + ';') + return origin + + colortypes = ['fill', 'stop-color', 'flood-color', 'lighting-color', 'stroke'] + for i in range(len(colortypes)): + svg = change_colors(svg, colortypes[i]) + + return svg + +def removeK(origin): + def reset_opacity(value): + return str(value.group()).split('opacity:')[0] + "opacity:0;" + #return re.sub("#000000;fill-opacity:[0-9.]+;", reset_opacity, re.sub("#000000;stop-opacity:[0-9.]+;", reset_opacity, re.sub("#000000;stroke-opacity:[0-9.]+;", reset_opacity, re.sub("#000000;flood-opacity:[0-9.]+;", reset_opacity, re.sub("#000000;lighting-opacity:[0-9.]+;", reset_opacity, origin))))) + return re.sub("#000000;fill-opacity:[0-9.?]+", reset_opacity, re.sub("#000000;stop-opacity:[0-9.?]+", reset_opacity, re.sub("#000000;stroke-opacity:[0-9.?]+", reset_opacity, re.sub("#000000;flood-opacity:[0-9.?]+", reset_opacity, re.sub("#000000;lighting-opacity:[0-9.?]+", reset_opacity, origin))))) + +def representC(value): + # returns CMS color if available + if (re.search("icc-color", value.group())): + return str(inkex.Color((float(1.00 - float(re.split(r'[,\)\s]+',value.group())[2])), float(1.00), float(1.00)))) + else: + red = float(inkex.Color(str(value.group())).to_rgb()[0]/255.00) + green = float(inkex.Color(str(value.group())).to_rgb()[1]/255.00) + blue = float(inkex.Color(str(value.group())).to_rgb()[2]/255.00) + return str(inkex.Color((float(1.00 - calculateCMYK(red, green, blue)[0]), float(1.00), float(1.00)))) + +def representM(value): + # returns CMS color if available + if ( re.search("icc-color", value.group()) ): + return str(inkex.Color((float(1.00), float(1.00 - float(re.split(r'[,\)\s]+',value.group())[3])), float(1.00)))) + else: + red = float(inkex.Color(str(value.group())).to_rgb()[0]/255.00) + green = float(inkex.Color(str(value.group())).to_rgb()[1]/255.00) + blue = float(inkex.Color(str(value.group())).to_rgb()[2]/255.00) + return str(inkex.Color((float(1.00), float(1.00 - calculateCMYK(red, green, blue)[1]), float(1.00)))) + +def representY(value): + # returns CMS color if available + if (re.search("icc-color", value.group()) ): + return str(inkex.Color((float(1.00), float(1.00), float(1.00 - float(re.split(r'[,\)\s]+',value.group())[4]))))) + else: + red = float(inkex.Color(str(value.group())).to_rgb()[0]/255.00) + green = float(inkex.Color(str(value.group())).to_rgb()[1]/255.00) + blue = float(inkex.Color(str(value.group())).to_rgb()[2]/255.00) + return str(inkex.Color((float(1.00), float(1.00), float(1.00 - calculateCMYK(red, green, blue)[2])))) + +def representK(value): + # returns CMS color if available + if (re.search("icc-color", value.group()) ): + return str(inkex.Color((float(1.00 - float(re.split(r'[,\)\s]+',value.group())[5])), float(1.00 - float(re.split(r'[,\)\s]+',value.group())[5])), float(1.00 - float(re.split(r'[,\)\s]+',value.group())[5]))))) + else: + red = float(inkex.Color(str(value.group())).to_rgb()[0]/255.00) + green = float(inkex.Color(str(value.group())).to_rgb()[1]/255.00) + blue = float(inkex.Color(str(value.group())).to_rgb()[2]/255.00) + return str(inkex.Color((float(1.00 - calculateCMYK(red, green, blue)[3]), float(1.00 - calculateCMYK(red, green, blue)[3]), float(1.00 - calculateCMYK(red, green, blue)[3])))) + + +def generate_svg_separations(temp_dir, original_source, overblack): + svg_ready = clean_svg_color_definitions(original_source) + + with open(os.path.join(temp_dir, "separationK.svg"), "w") as f: + f.write(re.sub(r"#[a-fA-F0-9]{6}( icc-color\(.*?\))?", representK, svg_ready)) + + if overblack: + svg_ready = removeK(svg_ready) + + with open(os.path.join(temp_dir, "separationC.svg"), "w") as f: + f.write(re.sub(r"#[a-fA-F0-9]{6}( icc-color\(.*?\))?", representC, svg_ready)) + with open(os.path.join(temp_dir, "separationM.svg"), "w") as f: + f.write(re.sub(r"#[a-fA-F0-9]{6}( icc-color\(.*?\))?", representM, svg_ready)) + with open(os.path.join(temp_dir, "separationY.svg"), "w") as f: + f.write(re.sub(r"#[a-fA-F0-9]{6}( icc-color\(.*?\))?", representY, svg_ready)) + +def generate_png_separations(temp_dir, area_to_export, resolution, alpha): + if alpha: + alpha_command = "" + else: + alpha_command = ";export-background:white" + for color in ['C', 'M', 'Y', 'K']: + cmd = area_to_export + alpha_command + ';export-dpi:' + str(resolution) + ';export-background-opacity:1;export-filename:' + os.path.join(temp_dir, "separated" + area_to_export.replace(' ', '') + color + ".png") + ';export-do' + #inkex.utils.debug(cmd) + cli_output = inkscape(os.path.join(temp_dir, "separation" + color + ".svg"), actions=cmd) + if len(cli_output) > 0: + inkex.utils.debug(cli_output) + #inkex.utils.debug(os.listdir(temp_dir)) + \ No newline at end of file diff --git a/extensions/fablabchemnitz/output_pro/outputpro/cutmarks.py b/extensions/fablabchemnitz/output_pro/outputpro/cutmarks.py new file mode 100644 index 00000000..5ddbf16a --- /dev/null +++ b/extensions/fablabchemnitz/output_pro/outputpro/cutmarks.py @@ -0,0 +1,84 @@ +#!/usr/bin/env python3 + +import subprocess +import os + +def generate_final_file(isvector, hide_inside_marks, colormode, width, height, space, strokewidth, bleedsize, marksize, temp_dir): + if not isvector: + + if "nt" in os.name: + shell = True + else: + shell = False + + command = [] + final_command = ['convert'] + + for color in colormode: + command.append('convert') + command.append('-size') + command.append(str(sum(width) + (marksize*2) + (space * (len(width) -1))) + 'x' + str(sum(height) + (marksize*2) + (space * (len(height) -1)))) + command.append('xc:white') + command.append('-stroke') + command.append('black') + command.append('-strokewidth') + command.append(str(strokewidth)) + + width_value = 0 + number_of_column = 1 + + for column in width: + height_value = 0 + number_of_line = 1 + + for line in height: + with open(os.path.join(temp_dir, 'str.txt'), 'a') as f: + f.write(str(width.index(column))) + + if not hide_inside_marks or (hide_inside_marks and number_of_column == 1): + command.append('-draw') + command.append('line ' + str(width_value + marksize) + ',' + str(height_value + marksize + bleedsize) + ', ' + str(width_value) + ',' + str(height_value + marksize + bleedsize)) + command.append('-draw') + command.append('line ' + str(width_value + marksize) + ',' + str(height_value + line + marksize - bleedsize) + ', ' + str(width_value) + ',' + str(height_value + line + marksize - bleedsize)) + + if not hide_inside_marks or (hide_inside_marks and number_of_line == 1): + command.append('-draw') + command.append('line ' + str(width_value + marksize + bleedsize) + ',' + str(height_value + marksize) + ', ' + str(width_value + marksize + bleedsize) + ',' + str(height_value)) + command.append('-draw') + command.append('line ' + str(width_value + column + marksize - bleedsize) + ',' + str(height_value + marksize) + ', ' + str(width_value + column + marksize - bleedsize) + ',' + str(height_value)) + + if not hide_inside_marks or (hide_inside_marks and number_of_column == len(width)): + command.append('-draw') + command.append('line ' + str(width_value + marksize + column) + ',' + str(height_value + marksize + bleedsize) + ', ' + str(width_value + (marksize*2) + column) + ',' + str(height_value + marksize + bleedsize)) + command.append('-draw') + command.append('line ' + str(width_value + marksize + column) + ',' + str(height_value + line + marksize - bleedsize) + ', ' + str(width_value + (marksize*2) + column) + ',' + str(height_value + marksize + line - bleedsize)) + + if not hide_inside_marks or (hide_inside_marks and number_of_line == len(height)): + command.append('-draw') + command.append('line ' + str(width_value + marksize + bleedsize) + ',' + str(height_value + line + marksize) + ', ' + str(width_value + marksize + bleedsize) + ',' + str(height_value + line + (marksize*2))) + command.append('-draw') + command.append('line ' + str(width_value + column + marksize - bleedsize) + ',' + str(height_value + line + marksize) + ', ' + str(width_value + marksize + column - bleedsize) + ',' + str(height_value + line + (marksize*2))) + + height_value += line + space + number_of_line += 1 + width_value += column + space + number_of_column += 1 + command.append(os.path.join(temp_dir, 'cut_mark_' + color + '.png')) + subprocess.Popen(command, shell=shell).wait() + del command[:] + + command.append('convert') + command.append(os.path.join(temp_dir, 'cut_mark_' + color + '.png')) + command.append('-colorspace') + command.append(str(colormode).lower()) + command.append('-channel') + command.append('K') + command.append('-separate') + command.append(os.path.join(temp_dir, 'cut_mark_' + color + '.png')) + subprocess.Popen(command, shell=shell).wait() + del command[:] + + final_command.append(os.path.join(temp_dir, 'cut_mark_' + color + '.png')) + + final_command.extend(['-set', 'colorspace', colormode, '-combine', os.path.join(temp_dir, 'cut_mark.tiff')]) + subprocess.Popen(final_command, shell=shell).wait() diff --git a/extensions/fablabchemnitz/output_pro/outputpro/preview_mask.png b/extensions/fablabchemnitz/output_pro/outputpro/preview_mask.png new file mode 100644 index 00000000..9932f773 Binary files /dev/null and b/extensions/fablabchemnitz/output_pro/outputpro/preview_mask.png differ diff --git a/extensions/fablabchemnitz/output_pro/outputpro/top.png b/extensions/fablabchemnitz/output_pro/outputpro/top.png new file mode 100644 index 00000000..25dce744 Binary files /dev/null and b/extensions/fablabchemnitz/output_pro/outputpro/top.png differ diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/.libs/admesh b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/.libs/admesh new file mode 100755 index 00000000..0b60732d Binary files /dev/null and b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/.libs/admesh differ diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/.libs/libadmesh.la b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/.libs/libadmesh.la new file mode 120000 index 00000000..e76c6c7b --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/.libs/libadmesh.la @@ -0,0 +1 @@ +../libadmesh.la \ No newline at end of file diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/.libs/libadmesh.lai b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/.libs/libadmesh.lai new file mode 100644 index 00000000..ebbca10a --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/.libs/libadmesh.lai @@ -0,0 +1,41 @@ +# libadmesh.la - a libtool library file +# Generated by libtool (GNU libtool) 2.4.6 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# The name that we can dlopen(3). +dlname='libadmesh.so.1' + +# Names of this library. +library_names='libadmesh.so.1.0.0 libadmesh.so.1 libadmesh.so' + +# The name of the static archive. +old_library='' + +# Linker flags that cannot go in dependency_libs. +inherited_linker_flags='' + +# Libraries that this one depends upon. +dependency_libs=' -lm' + +# Names of additional weak libraries provided by this library +weak_library_names='' + +# Version information for libadmesh. +current=1 +age=0 +revision=0 + +# Is this an already installed library? +installed=yes + +# Should we warn about portability when linking against -modules? +shouldnotlink=no + +# Files to dlopen/dlpreopen +dlopen='' +dlpreopen='' + +# Directory that this library needs to be installed in: +libdir='/usr/local/lib' diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/.libs/libadmesh.so b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/.libs/libadmesh.so new file mode 120000 index 00000000..5878c6c1 --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/.libs/libadmesh.so @@ -0,0 +1 @@ +libadmesh.so.1.0.0 \ No newline at end of file diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/.libs/libadmesh.so.1 b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/.libs/libadmesh.so.1 new file mode 120000 index 00000000..5878c6c1 --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/.libs/libadmesh.so.1 @@ -0,0 +1 @@ +libadmesh.so.1.0.0 \ No newline at end of file diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/.libs/libadmesh.so.1.0.0 b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/.libs/libadmesh.so.1.0.0 new file mode 100755 index 00000000..1558266c Binary files /dev/null and b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/.libs/libadmesh.so.1.0.0 differ diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/AUTHORS b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/AUTHORS new file mode 100644 index 00000000..b189667c --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/AUTHORS @@ -0,0 +1,11 @@ +Alessandro Ranellucci +Andy Doucette +Anthony D. Martin +Anton Gladky +cpaulson +Guillaume Seguin +Marek ZÌŒehra +Miro HronÄok +Tomas Chvatal +Tomáš ÄŒejka +Tomáš Chvátal diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/COPYING b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/COPYING new file mode 100644 index 00000000..d159169d --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/COPYING @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/ChangeLog b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/ChangeLog new file mode 100644 index 00000000..37c5b357 --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/ChangeLog @@ -0,0 +1,143 @@ +0.98.2: 2015-05-03 17:51:40 +0200 + + * Release 0.98.2 + * Add subdir-objects option for Autotools + * Reverse all facets when volume is negative only when fixall_flag is set + * Also pre-zero backwards_edges in stl_initialize() + * Fix bug that causes random binary STL files not to be read correctly on Windows + +0.98.1: 2014-09-23 14:20:25 +0200 + + * Release 0.98.1 + * Initialize the error value to zero in the right moment + * modified autogen.sh to work with os x 10.9 + +0.98.0: 2014-07-29 19:33:20 +0200 + + * Release 0.98.0 + * Update the fortag script to sort the tags by date + +0.98.0rc1: 2014-07-29 14:19:07 +0200 + + * Release 0.98.0rc1 + * Generate nicer ChangeLog + * Include generated doc in doc as well + * Export more functions for simarrange compatibility + * Do not include block.stl in doc, but include COPYING + +0.98.0beta: 2014-07-18 14:24:49 +0200 + + * Release 0.98.0beta + * On Mac, use -dead_strip linker flag instead of --gc-sections --as-needed + +0.98.0alpha: 2014-07-10 22:35:50 +0200 + + * Release 0.98.0alpha + * Add XML files for abi-compliance-checker + * Keep stl_repair on one line in stl.h, so it's easier to parse by Python bindings autogen + * stl_repair() Fixes #6 + * Provide stl_get_error_function + * Indent cleanup + * Error reporting and no exiting + +0.97.5: 2014-06-29 18:13:19 +0200 + + * Release 0.97.5 + * No facets, no volume + * Propagate stl_add_facet + +0.97.4: 2014-06-29 13:20:40 +0200 + + * Relese 0.97.4 + * Reverse facets when mirroring + * Merge pull request #3 from marekzehra/master + * Prevent to redefinition in case of multiple include + * Merge pull request #2 from cejkato2/master + * BUGFIX C++ linking + * Move from hroncok namespace to admesh on GitHub + * Typo + * Update download URL + * Add -Werror=format-security as a default option + +0.97.3: 2014-01-02 20:37:28 +0100 + + * Add note about other contributors to copyright notice + * Add AUTHORS to tarball + * Use Markdown in README, polish it a bit + * Reintroduce Fix merge-command + * Bugfix: overflow causing full object facets reversal when STL file has large coordinates + * Release 0.97.3 + * Change URL of the issues + * Back to the admesh messages, delte commented code + * If VERSION is not defined, don't blow up (for Slic3r) + * Header for stl_translate_relative + * Use VERSION variable in output + * Slic3r compatibility commit + * Removed commented out code + * Rename variable new to newn + * Set vaiables to NULL after free + * Also increase volume when scaling + * Bugfix: some binary STL files were not correctly parsed on Windows + * Use fread() to read facet number + * Ability to export OBJ from the library + * Prevent admesh to reverse all facets twice in some mostly-random situations. + * Invalidate shared vertices + * Add link to the thesis into README + * Backported the "fix" from d91d179766 as stl_translate_relative + * Release 0.97.2 + * Remove the translate fix, as it breaks things + * Travis: Run everything in script section + * Enable Travis-CI + * Release 0.97.1 + * Export everything except main to the library + * Release 0.97.0 + * We accept no warnings + * Check return value of fread + * Check the return value of fscanf + * Return correct exitcode when wrong arguments are used + * Add -Wp,-D_FORTIFY_SOURCE=2 to configure.ac + * Fix typo. + * Drop never used just assigned variable. + * Typo + * Updated INSTALL and README a bit + * Update copyright information with current GNU GPLv2 + * Install and distribute the manpage in tarball + * Propred content for the manpage + * Added autogenerated manpage + * Split some overlength strings + * Avoid mixed declaration and code braought by some fixing patches + * Avoid // comments + * Always use VERSION from config.h in the code + * Add fresh info to the README + * Close file properly + * Fix translate-command + * Fix merge-command + * Install the docs to docdir. + * Safer is to always libtoolize + * Get rid of dome compiler warnings + * Add minor missing includes + * Also change ADMESH.DOC filename in Makefile.am + * Renamed ADMESH.DOC to avoid confusion by file extension In the future, this should be changed to a manual page anyway + * Remove bundled getopt + * Add more things and dirs to gitignore, keep the file sorted + * Provide libadmesh for linking purposes. + * Move sources to src subfolder + * Create automake rules so we actually build. + * Move to configure.ac and prepare the autoconf work + +0.95: 2013-10-20 11:02:25 +0200 + + * Add version 0.95 from upstream + +0.97.2: 2013-10-21 19:16:55 +0200 + + * Release 0.97.2 + * Remove the translate fix, as it breaks things + * Travis: Run everything in script section + * Enable Travis-CI + +0.97.1: 2013-10-21 18:41:55 +0200 + + * Release 0.97.1 + * Export everything except main to the library + diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/ChangeLog.old b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/ChangeLog.old new file mode 100644 index 00000000..31c09696 --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/ChangeLog.old @@ -0,0 +1,42 @@ +Tue Aug 1 03:25:46 PDT 1995 Anthony Martin + + * Fix it so that big endian systems write a little endian file + Also, write null characters after the label in stl_write_binary + +Tue Aug 1 03:25:46 PDT 1995 Anthony Martin + + * Change stl_fill_holes so that duplicate facets are not likely + to be generated. Should improve quality of filled holes. + +Wed Aug 2 16:56:03 PDT 1995 Anthony Martin + + * Add support for generating shared vertices + * Move fclose(stl->fp) to stl_open() + +Tue Oct 31 13:56:25 PST 1995 Anthony Martin + + * Don't use area any more to see whether or not the normal should + be calculated. Just go ahead and calculate the normal, and let the + code in stl_normalize vector() take care of the case of a normal + with zero area. + * Changes call to stl_check_normal_vector() in stl_add_facet() so + that it doesn't check the normal vector after it adds it. Just + caused accounting error for normals fixed. + +Wed Nov 1 08:39:17 PST 1995 Anthony Martin + * Initialize normal vector to 0,0,0 when a new facet is added. + +Sat Jan 20 23:43:01 PST 1996 Anthony Martin + * stlinit.c Initialize pointers to NULL. Check whether they have + been allocated before free()ing them. Duh. + +Thu Jan 25 16:02:57 PST 1996 Anthony Martin + * shared.c Add fclose(fp); to stl_write_off(). + * stl_io.c Add dxf write capability + * shared.c Add vrml write capability + +Fri Jul 26 11:31:50 PDT 1996 Anthony Martin + * Update normals after rotation + * Add code to calculate the volume of the part + + diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/INSTALL b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/INSTALL new file mode 100644 index 00000000..f0a50c31 --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/INSTALL @@ -0,0 +1,14 @@ +To install ADMesh, you will need a system with a c compiler. +Do the following: + +1. Get the file admesh-x.xx.tar.gz +2. Extract the archive. i.e. type something like the following: + tar -zxvf admesh-x.xx.tar.gz + The source files will be extracted into a directory called admesh-x.xx +3. cd admesh-x.xx +4. type the following: + ./configure + make + su -c 'make install' + +That should do it. Standard options for configure script and make are provided. diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/Makefile b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/Makefile new file mode 100644 index 00000000..4d032ed3 --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/Makefile @@ -0,0 +1,1138 @@ +# Makefile.in generated by automake 1.16.1 from Makefile.am. +# Makefile. Generated from Makefile.in by configure. + +# Copyright (C) 1994-2018 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + + + + + + +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/admesh +pkgincludedir = $(includedir)/admesh +pkglibdir = $(libdir)/admesh +pkglibexecdir = $(libexecdir)/admesh +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = x86_64-unknown-linux-gnu +host_triplet = x86_64-unknown-linux-gnu +bin_PROGRAMS = admesh$(EXEEXT) +subdir = . +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ + $(am__configure_deps) $(pkginclude_HEADERS) $(am__DIST_COMMON) +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ + configure.lineno config.status.lineno +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = config.h +CONFIG_CLEAN_FILES = libadmesh.pc +CONFIG_CLEAN_VPATH_FILES = +am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(libdir)" \ + "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(docdir)" \ + "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(pkgincludedir)" +PROGRAMS = $(bin_PROGRAMS) +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +LTLIBRARIES = $(lib_LTLIBRARIES) +libadmesh_la_LIBADD = +am__dirstamp = $(am__leading_dot)dirstamp +am_libadmesh_la_OBJECTS = src/connect.lo src/normals.lo src/shared.lo \ + src/stlinit.lo src/stl_io.lo src/util.lo +libadmesh_la_OBJECTS = $(am_libadmesh_la_OBJECTS) +AM_V_lt = $(am__v_lt_$(V)) +am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) +am__v_lt_0 = --silent +am__v_lt_1 = +libadmesh_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(libadmesh_la_LDFLAGS) $(LDFLAGS) -o $@ +am_admesh_OBJECTS = src/admesh.$(OBJEXT) +admesh_OBJECTS = $(am_admesh_OBJECTS) +admesh_DEPENDENCIES = libadmesh.la +AM_V_P = $(am__v_P_$(V)) +am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY)) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I. +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__maybe_remake_depfiles = depfiles +am__depfiles_remade = src/$(DEPDIR)/admesh.Po \ + src/$(DEPDIR)/connect.Plo src/$(DEPDIR)/normals.Plo \ + src/$(DEPDIR)/shared.Plo src/$(DEPDIR)/stl_io.Plo \ + src/$(DEPDIR)/stlinit.Plo src/$(DEPDIR)/util.Plo +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_$(V)) +am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_$(V)) +am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(libadmesh_la_SOURCES) $(admesh_SOURCES) +DIST_SOURCES = $(libadmesh_la_SOURCES) $(admesh_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +man1dir = $(mandir)/man1 +NROFF = nroff +MANS = $(dist_man_MANS) +DATA = $(doc_DATA) $(pkgconfig_DATA) +HEADERS = $(pkginclude_HEADERS) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ + $(LISP)config.h.in +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +CSCOPE = cscope +AM_RECURSIVE_TARGETS = cscope +am__DIST_COMMON = $(dist_man_MANS) $(srcdir)/Makefile.in \ + $(srcdir)/config.h.in $(srcdir)/libadmesh.pc.in AUTHORS \ + COPYING ChangeLog INSTALL compile config.guess config.sub \ + depcomp install-sh ltmain.sh missing +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) +am__remove_distdir = \ + if test -d "$(distdir)"; then \ + find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -rf "$(distdir)" \ + || { sleep 5 && rm -rf "$(distdir)"; }; \ + else :; fi +am__post_remove_distdir = $(am__remove_distdir) +GZIP_ENV = --best +DIST_ARCHIVES = $(distdir).tar.xz +DIST_TARGETS = dist-xz +distuninstallcheck_listfiles = find . -type f -print +am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ + | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' +distcleancheck_listfiles = find . -type f -print +ACLOCAL = ${SHELL} /home/tomate/mightyscape/papercraft_unfold/admesh/admesh-0.98.4/missing aclocal-1.16 +AMTAR = $${TAR-tar} +AM_DEFAULT_VERBOSITY = 0 +AR = ar +AUTOCONF = ${SHELL} /home/tomate/mightyscape/papercraft_unfold/admesh/admesh-0.98.4/missing autoconf +AUTOHEADER = ${SHELL} /home/tomate/mightyscape/papercraft_unfold/admesh/admesh-0.98.4/missing autoheader +AUTOMAKE = ${SHELL} /home/tomate/mightyscape/papercraft_unfold/admesh/admesh-0.98.4/missing automake-1.16 +AWK = mawk +CC = gcc +CCDEPMODE = depmode=gcc3 +CFLAGS = -g -O2 -Wall -Wextra -pedantic -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 +CPP = gcc -E +CPPFLAGS = +CYGPATH_W = echo +DEAD_STRIP = -Wl,--gc-sections -Wl,--as-needed +DEFS = -DHAVE_CONFIG_H +DEPDIR = .deps +DLLTOOL = false +DSYMUTIL = +DUMPBIN = +ECHO_C = +ECHO_N = -n +ECHO_T = +EGREP = /usr/bin/grep -E +EXEEXT = +FGREP = /usr/bin/grep -F +GREP = /usr/bin/grep +INSTALL = /usr/bin/install -c +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_PROGRAM = ${INSTALL} +INSTALL_SCRIPT = ${INSTALL} +INSTALL_STRIP_PROGRAM = $(install_sh) -c -s +LD = /usr/bin/ld -m elf_x86_64 +LDFLAGS = +LIBOBJS = +LIBS = -lm +LIBTOOL = $(SHELL) $(top_builddir)/libtool +LIPO = +LN_S = ln -s +LTLIBOBJS = +LT_SYS_LIBRARY_PATH = +MAKEINFO = ${SHELL} /home/tomate/mightyscape/papercraft_unfold/admesh/admesh-0.98.4/missing makeinfo +MANIFEST_TOOL = : +MKDIR_P = /usr/bin/mkdir -p +NM = /usr/bin/nm -B +NMEDIT = +OBJDUMP = objdump +OBJEXT = o +OTOOL = +OTOOL64 = +PACKAGE = admesh +PACKAGE_BUGREPORT = +PACKAGE_NAME = admesh +PACKAGE_STRING = admesh 0.98.4 +PACKAGE_TARNAME = admesh +PACKAGE_URL = +PACKAGE_VERSION = 0.98.4 +PATH_SEPARATOR = : +RANLIB = ranlib +SED = /usr/bin/sed +SET_MAKE = +SHELL = /bin/bash +STRIP = strip +VERSION = 0.98.4 +abs_builddir = /home/tomate/mightyscape/papercraft_unfold/admesh/admesh-0.98.4 +abs_srcdir = /home/tomate/mightyscape/papercraft_unfold/admesh/admesh-0.98.4 +abs_top_builddir = /home/tomate/mightyscape/papercraft_unfold/admesh/admesh-0.98.4 +abs_top_srcdir = /home/tomate/mightyscape/papercraft_unfold/admesh/admesh-0.98.4 +ac_ct_AR = ar +ac_ct_CC = gcc +ac_ct_DUMPBIN = +am__include = include +am__leading_dot = . +am__quote = +am__tar = $${TAR-tar} chof - "$$tardir" +am__untar = $${TAR-tar} xf - +bindir = ${exec_prefix}/bin +build = x86_64-unknown-linux-gnu +build_alias = +build_cpu = x86_64 +build_os = linux-gnu +build_vendor = unknown +builddir = . +datadir = ${datarootdir} +datarootdir = ${prefix}/share +docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} +dvidir = ${docdir} +exec_prefix = ${prefix} +host = x86_64-unknown-linux-gnu +host_alias = +host_cpu = x86_64 +host_os = linux-gnu +host_vendor = unknown +htmldir = ${docdir} +includedir = ${prefix}/include +infodir = ${datarootdir}/info +install_sh = ${SHELL} /home/tomate/mightyscape/papercraft_unfold/admesh/admesh-0.98.4/install-sh +libdir = ${exec_prefix}/lib +libexecdir = ${exec_prefix}/libexec +localedir = ${datarootdir}/locale +localstatedir = ${prefix}/var +mandir = ${datarootdir}/man +mkdir_p = $(MKDIR_P) +oldincludedir = /usr/include +pdfdir = ${docdir} +prefix = /usr/local +program_transform_name = s,x,x, +psdir = ${docdir} +sbindir = ${exec_prefix}/sbin +sharedstatedir = ${prefix}/com +srcdir = . +sysconfdir = ${prefix}/etc +target_alias = +top_build_prefix = +top_builddir = . +top_srcdir = . +ACLOCAL_AMFLAGS = -I m4 +AM_LDFLAGS = -Wl,--gc-sections -Wl,--as-needed -no-undefined +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = libadmesh.pc +doc_DATA = \ + admesh-doc.txt \ + README.md \ + COPYING \ + AUTHORS \ + ChangeLog \ + ChangeLog.old + +EXTRA_DIST = \ + $(doc_DATA) \ + INSTALL \ + libadmesh.pc.in \ + block.stl + +CLEANFILES = libadmesh.pc +dist_man_MANS = admesh.1 +admesh_SOURCES = \ + src/admesh.c + +admesh_LDADD = \ + libadmesh.la + + +# libadmesh libtool versioning +LIBADMESH_CURRENT = 1 +LIBADMESH_REVISION = 0 +LIBADMESH_AGE = 0 +pkginclude_HEADERS = src/stl.h +lib_LTLIBRARIES = libadmesh.la +libadmesh_la_SOURCES = \ + src/connect.c \ + src/normals.c \ + src/shared.c \ + src/stlinit.c \ + src/stl_io.c \ + src/util.c \ + src/portable_endian.h + +libadmesh_la_LDFLAGS = \ + $(AM_LDFLAGS) \ + -version-info $(LIBADMESH_CURRENT):$(LIBADMESH_REVISION):$(LIBADMESH_AGE) + +all: config.h + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +am--refresh: Makefile + @: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ + $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + echo ' $(SHELL) ./config.status'; \ + $(SHELL) ./config.status;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck + +$(top_srcdir)/configure: $(am__configure_deps) + $(am__cd) $(srcdir) && $(AUTOCONF) +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +$(am__aclocal_m4_deps): + +config.h: stamp-h1 + @test -f $@ || rm -f stamp-h1 + @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 + +stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status + @rm -f stamp-h1 + cd $(top_builddir) && $(SHELL) ./config.status config.h +$(srcdir)/config.h.in: $(am__configure_deps) + ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) + rm -f stamp-h1 + touch $@ + +distclean-hdr: + -rm -f config.h stamp-h1 +libadmesh.pc: $(top_builddir)/config.status $(srcdir)/libadmesh.pc.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ + fi; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p \ + || test -f $$p1 \ + ; then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' \ + -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' \ + `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files + +clean-binPROGRAMS: + @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list + +install-libLTLIBRARIES: $(lib_LTLIBRARIES) + @$(NORMAL_INSTALL) + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ + } + +uninstall-libLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ + done + +clean-libLTLIBRARIES: + -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) + @list='$(lib_LTLIBRARIES)'; \ + locs=`for p in $$list; do echo $$p; done | \ + sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ + sort -u`; \ + test -z "$$locs" || { \ + echo rm -f $${locs}; \ + rm -f $${locs}; \ + } +src/$(am__dirstamp): + @$(MKDIR_P) src + @: > src/$(am__dirstamp) +src/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) src/$(DEPDIR) + @: > src/$(DEPDIR)/$(am__dirstamp) +src/connect.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) +src/normals.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) +src/shared.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) +src/stlinit.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) +src/stl_io.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) +src/util.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) + +libadmesh.la: $(libadmesh_la_OBJECTS) $(libadmesh_la_DEPENDENCIES) $(EXTRA_libadmesh_la_DEPENDENCIES) + $(AM_V_CCLD)$(libadmesh_la_LINK) -rpath $(libdir) $(libadmesh_la_OBJECTS) $(libadmesh_la_LIBADD) $(LIBS) +src/admesh.$(OBJEXT): src/$(am__dirstamp) \ + src/$(DEPDIR)/$(am__dirstamp) + +admesh$(EXEEXT): $(admesh_OBJECTS) $(admesh_DEPENDENCIES) $(EXTRA_admesh_DEPENDENCIES) + @rm -f admesh$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(admesh_OBJECTS) $(admesh_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + -rm -f src/*.$(OBJEXT) + -rm -f src/*.lo + +distclean-compile: + -rm -f *.tab.c + +include src/$(DEPDIR)/admesh.Po # am--include-marker +include src/$(DEPDIR)/connect.Plo # am--include-marker +include src/$(DEPDIR)/normals.Plo # am--include-marker +include src/$(DEPDIR)/shared.Plo # am--include-marker +include src/$(DEPDIR)/stl_io.Plo # am--include-marker +include src/$(DEPDIR)/stlinit.Plo # am--include-marker +include src/$(DEPDIR)/util.Plo # am--include-marker + +$(am__depfiles_remade): + @$(MKDIR_P) $(@D) + @echo '# dummy' >$@-t && $(am__mv) $@-t $@ + +am--depfiles: $(am__depfiles_remade) + +.c.o: + $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ + $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ + $(am__mv) $$depbase.Tpo $$depbase.Po +# $(AM_V_CC)source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(COMPILE) -c -o $@ $< + +.c.obj: + $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ + $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ + $(am__mv) $$depbase.Tpo $$depbase.Po +# $(AM_V_CC)source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: + $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ + $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ + $(am__mv) $$depbase.Tpo $$depbase.Plo +# $(AM_V_CC)source='$<' object='$@' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + -rm -rf src/.libs src/_libs + +distclean-libtool: + -rm -f libtool config.lt +install-man1: $(dist_man_MANS) + @$(NORMAL_INSTALL) + @list1=''; \ + list2='$(dist_man_MANS)'; \ + test -n "$(man1dir)" \ + && test -n "`echo $$list1$$list2`" \ + || exit 0; \ + echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ + { for i in $$list1; do echo "$$i"; done; \ + if test -n "$$list2"; then \ + for i in $$list2; do echo "$$i"; done \ + | sed -n '/\.1[a-z]*$$/p'; \ + fi; \ + } | while read p; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; echo "$$p"; \ + done | \ + sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ + sed 'N;N;s,\n, ,g' | { \ + list=; while read file base inst; do \ + if test "$$base" = "$$inst"; then list="$$list $$file"; else \ + echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ + $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ + fi; \ + done; \ + for i in $$list; do echo "$$i"; done | $(am__base_list) | \ + while read files; do \ + test -z "$$files" || { \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ + done; } + +uninstall-man1: + @$(NORMAL_UNINSTALL) + @list=''; test -n "$(man1dir)" || exit 0; \ + files=`{ for i in $$list; do echo "$$i"; done; \ + l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.1[a-z]*$$/p'; \ + } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ + dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) +install-docDATA: $(doc_DATA) + @$(NORMAL_INSTALL) + @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(docdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(docdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(docdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(docdir)" || exit $$?; \ + done + +uninstall-docDATA: + @$(NORMAL_UNINSTALL) + @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(docdir)'; $(am__uninstall_files_from_dir) +install-pkgconfigDATA: $(pkgconfig_DATA) + @$(NORMAL_INSTALL) + @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(pkgconfigdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ + done + +uninstall-pkgconfigDATA: + @$(NORMAL_UNINSTALL) + @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir) +install-pkgincludeHEADERS: $(pkginclude_HEADERS) + @$(NORMAL_INSTALL) + @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ + done + +uninstall-pkgincludeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscope: cscope.files + test ! -s cscope.files \ + || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) +clean-cscope: + -rm -f cscope.files +cscope.files: clean-cscope cscopelist +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + -rm -f cscope.out cscope.in.out cscope.po.out cscope.files + +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) + $(am__remove_distdir) + test -d "$(distdir)" || mkdir "$(distdir)" + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook + -test -n "$(am__skip_mode_fix)" \ + || find "$(distdir)" -type d ! -perm -755 \ + -exec chmod u+rwx,go+rx {} \; -o \ + ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ + || chmod -R a+r "$(distdir)" +dist-gzip: distdir + tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz + $(am__post_remove_distdir) + +dist-bzip2: distdir + tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 + $(am__post_remove_distdir) + +dist-lzip: distdir + tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz + $(am__post_remove_distdir) +dist-xz: distdir + tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz + $(am__post_remove_distdir) + +dist-tarZ: distdir + @echo WARNING: "Support for distribution archives compressed with" \ + "legacy program 'compress' is deprecated." >&2 + @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 + tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z + $(am__post_remove_distdir) + +dist-shar: distdir + @echo WARNING: "Support for shar distribution archives is" \ + "deprecated." >&2 + @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 + shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz + $(am__post_remove_distdir) + +dist-zip: distdir + -rm -f $(distdir).zip + zip -rq $(distdir).zip $(distdir) + $(am__post_remove_distdir) + +dist dist-all: + $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' + $(am__post_remove_distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + case '$(DIST_ARCHIVES)' in \ + *.tar.gz*) \ + eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\ + *.tar.bz2*) \ + bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.lz*) \ + lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ + *.tar.xz*) \ + xz -dc $(distdir).tar.xz | $(am__untar) ;;\ + *.tar.Z*) \ + uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ + *.shar.gz*) \ + eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ + *.zip*) \ + unzip $(distdir).zip ;;\ + esac + chmod -R a-w $(distdir) + chmod u+w $(distdir) + mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst + chmod a-w $(distdir) + test -d $(distdir)/_build || exit 0; \ + dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ + && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ + && am__cwd=`pwd` \ + && $(am__cd) $(distdir)/_build/sub \ + && ../../configure \ + $(AM_DISTCHECK_CONFIGURE_FLAGS) \ + $(DISTCHECK_CONFIGURE_FLAGS) \ + --srcdir=../.. --prefix="$$dc_install_base" \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ + distuninstallcheck \ + && chmod -R a-w "$$dc_install_base" \ + && ({ \ + (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ + distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ + } || { rm -rf "$$dc_destdir"; exit 1; }) \ + && rm -rf "$$dc_destdir" \ + && $(MAKE) $(AM_MAKEFLAGS) dist \ + && rm -rf $(DIST_ARCHIVES) \ + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ + && cd "$$am__cwd" \ + || exit 1 + $(am__post_remove_distdir) + @(echo "$(distdir) archives ready for distribution: "; \ + list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ + sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' +distuninstallcheck: + @test -n '$(distuninstallcheck_dir)' || { \ + echo 'ERROR: trying to run $@ with an empty' \ + '$$(distuninstallcheck_dir)' >&2; \ + exit 1; \ + }; \ + $(am__cd) '$(distuninstallcheck_dir)' || { \ + echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ + exit 1; \ + }; \ + test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left after uninstall:" ; \ + if test -n "$(DESTDIR)"; then \ + echo " (check DESTDIR support)"; \ + fi ; \ + $(distuninstallcheck_listfiles) ; \ + exit 1; } >&2 +distcleancheck: distclean + @if test '$(srcdir)' = . ; then \ + echo "ERROR: distcleancheck can only run from a VPATH build" ; \ + exit 1 ; \ + fi + @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left in build directory after distclean:" ; \ + $(distcleancheck_listfiles) ; \ + exit 1; } >&2 +check-am: all-am +check: check-am +all-am: Makefile $(PROGRAMS) $(LTLIBRARIES) $(MANS) $(DATA) $(HEADERS) \ + config.h +install-binPROGRAMS: install-libLTLIBRARIES + +installdirs: + for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(libdir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(docdir)" "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(pkgincludedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + -rm -f src/$(DEPDIR)/$(am__dirstamp) + -rm -f src/$(am__dirstamp) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-binPROGRAMS clean-generic clean-libLTLIBRARIES \ + clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -f src/$(DEPDIR)/admesh.Po + -rm -f src/$(DEPDIR)/connect.Plo + -rm -f src/$(DEPDIR)/normals.Plo + -rm -f src/$(DEPDIR)/shared.Plo + -rm -f src/$(DEPDIR)/stl_io.Plo + -rm -f src/$(DEPDIR)/stlinit.Plo + -rm -f src/$(DEPDIR)/util.Plo + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-hdr distclean-libtool distclean-local distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-docDATA install-man install-pkgconfigDATA \ + install-pkgincludeHEADERS + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-binPROGRAMS install-libLTLIBRARIES + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: install-man1 + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf $(top_srcdir)/autom4te.cache + -rm -f src/$(DEPDIR)/admesh.Po + -rm -f src/$(DEPDIR)/connect.Plo + -rm -f src/$(DEPDIR)/normals.Plo + -rm -f src/$(DEPDIR)/shared.Plo + -rm -f src/$(DEPDIR)/stl_io.Plo + -rm -f src/$(DEPDIR)/stlinit.Plo + -rm -f src/$(DEPDIR)/util.Plo + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-binPROGRAMS uninstall-docDATA \ + uninstall-libLTLIBRARIES uninstall-man uninstall-pkgconfigDATA \ + uninstall-pkgincludeHEADERS + +uninstall-man: uninstall-man1 + +.MAKE: all install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles am--refresh check \ + check-am clean clean-binPROGRAMS clean-cscope clean-generic \ + clean-libLTLIBRARIES clean-libtool cscope cscopelist-am ctags \ + ctags-am dist dist-all dist-bzip2 dist-gzip dist-hook \ + dist-lzip dist-shar dist-tarZ dist-xz dist-zip distcheck \ + distclean distclean-compile distclean-generic distclean-hdr \ + distclean-libtool distclean-local distclean-tags \ + distcleancheck distdir distuninstallcheck dvi dvi-am html \ + html-am info info-am install install-am install-binPROGRAMS \ + install-data install-data-am install-docDATA install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am \ + install-libLTLIBRARIES install-man install-man1 install-pdf \ + install-pdf-am install-pkgconfigDATA install-pkgincludeHEADERS \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am uninstall-binPROGRAMS \ + uninstall-docDATA uninstall-libLTLIBRARIES uninstall-man \ + uninstall-man1 uninstall-pkgconfigDATA \ + uninstall-pkgincludeHEADERS + +.PRECIOUS: Makefile + + +distclean-local: + rm -rf *.cache *~ + +AUTHORS: + git log --format='%aN <%aE>' | sort -u > $@ + +ChangeLog: + ./fortag.sh >$@ + +dist-hook: AUTHORS ChangeLog + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/Makefile.am b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/Makefile.am new file mode 100644 index 00000000..4bed4d1a --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/Makefile.am @@ -0,0 +1,63 @@ +ACLOCAL_AMFLAGS = -I m4 + +AM_LDFLAGS = @DEAD_STRIP@ +AM_LDFLAGS += -no-undefined + +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = libadmesh.pc + +doc_DATA = \ + admesh-doc.txt \ + README.md \ + COPYING \ + AUTHORS \ + ChangeLog \ + ChangeLog.old + +EXTRA_DIST = \ + $(doc_DATA) \ + INSTALL \ + libadmesh.pc.in \ + block.stl + +CLEANFILES = libadmesh.pc + +dist_man_MANS = admesh.1 + +bin_PROGRAMS = admesh +admesh_SOURCES = \ + src/admesh.c +admesh_LDADD = \ + libadmesh.la + +# libadmesh libtool versioning +LIBADMESH_CURRENT=1 +LIBADMESH_REVISION=0 +LIBADMESH_AGE=0 + +pkginclude_HEADERS = src/stl.h +lib_LTLIBRARIES = libadmesh.la + +libadmesh_la_SOURCES = \ + src/connect.c \ + src/normals.c \ + src/shared.c \ + src/stlinit.c \ + src/stl_io.c \ + src/util.c \ + src/portable_endian.h + +libadmesh_la_LDFLAGS = \ + $(AM_LDFLAGS) \ + -version-info $(LIBADMESH_CURRENT):$(LIBADMESH_REVISION):$(LIBADMESH_AGE) + +distclean-local: + rm -rf *.cache *~ + +AUTHORS: + git log --format='%aN <%aE>' | sort -u > $@ + +ChangeLog: + ./fortag.sh >$@ + +dist-hook: AUTHORS ChangeLog diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/Makefile.in b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/Makefile.in new file mode 100644 index 00000000..b2e183aa --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/Makefile.in @@ -0,0 +1,1138 @@ +# Makefile.in generated by automake 1.16.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2018 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + + + + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +bin_PROGRAMS = admesh$(EXEEXT) +subdir = . +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ + $(am__configure_deps) $(pkginclude_HEADERS) $(am__DIST_COMMON) +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ + configure.lineno config.status.lineno +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = config.h +CONFIG_CLEAN_FILES = libadmesh.pc +CONFIG_CLEAN_VPATH_FILES = +am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(libdir)" \ + "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(docdir)" \ + "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(pkgincludedir)" +PROGRAMS = $(bin_PROGRAMS) +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +LTLIBRARIES = $(lib_LTLIBRARIES) +libadmesh_la_LIBADD = +am__dirstamp = $(am__leading_dot)dirstamp +am_libadmesh_la_OBJECTS = src/connect.lo src/normals.lo src/shared.lo \ + src/stlinit.lo src/stl_io.lo src/util.lo +libadmesh_la_OBJECTS = $(am_libadmesh_la_OBJECTS) +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +libadmesh_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(libadmesh_la_LDFLAGS) $(LDFLAGS) -o $@ +am_admesh_OBJECTS = src/admesh.$(OBJEXT) +admesh_OBJECTS = $(am_admesh_OBJECTS) +admesh_DEPENDENCIES = libadmesh.la +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__maybe_remake_depfiles = depfiles +am__depfiles_remade = src/$(DEPDIR)/admesh.Po \ + src/$(DEPDIR)/connect.Plo src/$(DEPDIR)/normals.Plo \ + src/$(DEPDIR)/shared.Plo src/$(DEPDIR)/stl_io.Plo \ + src/$(DEPDIR)/stlinit.Plo src/$(DEPDIR)/util.Plo +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(libadmesh_la_SOURCES) $(admesh_SOURCES) +DIST_SOURCES = $(libadmesh_la_SOURCES) $(admesh_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +man1dir = $(mandir)/man1 +NROFF = nroff +MANS = $(dist_man_MANS) +DATA = $(doc_DATA) $(pkgconfig_DATA) +HEADERS = $(pkginclude_HEADERS) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ + $(LISP)config.h.in +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +CSCOPE = cscope +AM_RECURSIVE_TARGETS = cscope +am__DIST_COMMON = $(dist_man_MANS) $(srcdir)/Makefile.in \ + $(srcdir)/config.h.in $(srcdir)/libadmesh.pc.in AUTHORS \ + COPYING ChangeLog INSTALL compile config.guess config.sub \ + depcomp install-sh ltmain.sh missing +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) +am__remove_distdir = \ + if test -d "$(distdir)"; then \ + find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -rf "$(distdir)" \ + || { sleep 5 && rm -rf "$(distdir)"; }; \ + else :; fi +am__post_remove_distdir = $(am__remove_distdir) +GZIP_ENV = --best +DIST_ARCHIVES = $(distdir).tar.xz +DIST_TARGETS = dist-xz +distuninstallcheck_listfiles = find . -type f -print +am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ + | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' +distcleancheck_listfiles = find . -type f -print +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEAD_STRIP = @DEAD_STRIP@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +ACLOCAL_AMFLAGS = -I m4 +AM_LDFLAGS = @DEAD_STRIP@ -no-undefined +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = libadmesh.pc +doc_DATA = \ + admesh-doc.txt \ + README.md \ + COPYING \ + AUTHORS \ + ChangeLog \ + ChangeLog.old + +EXTRA_DIST = \ + $(doc_DATA) \ + INSTALL \ + libadmesh.pc.in \ + block.stl + +CLEANFILES = libadmesh.pc +dist_man_MANS = admesh.1 +admesh_SOURCES = \ + src/admesh.c + +admesh_LDADD = \ + libadmesh.la + + +# libadmesh libtool versioning +LIBADMESH_CURRENT = 1 +LIBADMESH_REVISION = 0 +LIBADMESH_AGE = 0 +pkginclude_HEADERS = src/stl.h +lib_LTLIBRARIES = libadmesh.la +libadmesh_la_SOURCES = \ + src/connect.c \ + src/normals.c \ + src/shared.c \ + src/stlinit.c \ + src/stl_io.c \ + src/util.c \ + src/portable_endian.h + +libadmesh_la_LDFLAGS = \ + $(AM_LDFLAGS) \ + -version-info $(LIBADMESH_CURRENT):$(LIBADMESH_REVISION):$(LIBADMESH_AGE) + +all: config.h + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +am--refresh: Makefile + @: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ + $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + echo ' $(SHELL) ./config.status'; \ + $(SHELL) ./config.status;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck + +$(top_srcdir)/configure: $(am__configure_deps) + $(am__cd) $(srcdir) && $(AUTOCONF) +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +$(am__aclocal_m4_deps): + +config.h: stamp-h1 + @test -f $@ || rm -f stamp-h1 + @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 + +stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status + @rm -f stamp-h1 + cd $(top_builddir) && $(SHELL) ./config.status config.h +$(srcdir)/config.h.in: $(am__configure_deps) + ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) + rm -f stamp-h1 + touch $@ + +distclean-hdr: + -rm -f config.h stamp-h1 +libadmesh.pc: $(top_builddir)/config.status $(srcdir)/libadmesh.pc.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ + fi; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p \ + || test -f $$p1 \ + ; then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' \ + -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' \ + `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files + +clean-binPROGRAMS: + @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list + +install-libLTLIBRARIES: $(lib_LTLIBRARIES) + @$(NORMAL_INSTALL) + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ + } + +uninstall-libLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ + done + +clean-libLTLIBRARIES: + -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) + @list='$(lib_LTLIBRARIES)'; \ + locs=`for p in $$list; do echo $$p; done | \ + sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ + sort -u`; \ + test -z "$$locs" || { \ + echo rm -f $${locs}; \ + rm -f $${locs}; \ + } +src/$(am__dirstamp): + @$(MKDIR_P) src + @: > src/$(am__dirstamp) +src/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) src/$(DEPDIR) + @: > src/$(DEPDIR)/$(am__dirstamp) +src/connect.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) +src/normals.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) +src/shared.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) +src/stlinit.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) +src/stl_io.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) +src/util.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) + +libadmesh.la: $(libadmesh_la_OBJECTS) $(libadmesh_la_DEPENDENCIES) $(EXTRA_libadmesh_la_DEPENDENCIES) + $(AM_V_CCLD)$(libadmesh_la_LINK) -rpath $(libdir) $(libadmesh_la_OBJECTS) $(libadmesh_la_LIBADD) $(LIBS) +src/admesh.$(OBJEXT): src/$(am__dirstamp) \ + src/$(DEPDIR)/$(am__dirstamp) + +admesh$(EXEEXT): $(admesh_OBJECTS) $(admesh_DEPENDENCIES) $(EXTRA_admesh_DEPENDENCIES) + @rm -f admesh$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(admesh_OBJECTS) $(admesh_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + -rm -f src/*.$(OBJEXT) + -rm -f src/*.lo + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/admesh.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/connect.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/normals.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/shared.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/stl_io.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/stlinit.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/util.Plo@am__quote@ # am--include-marker + +$(am__depfiles_remade): + @$(MKDIR_P) $(@D) + @echo '# dummy' >$@-t && $(am__mv) $@-t $@ + +am--depfiles: $(am__depfiles_remade) + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + -rm -rf src/.libs src/_libs + +distclean-libtool: + -rm -f libtool config.lt +install-man1: $(dist_man_MANS) + @$(NORMAL_INSTALL) + @list1=''; \ + list2='$(dist_man_MANS)'; \ + test -n "$(man1dir)" \ + && test -n "`echo $$list1$$list2`" \ + || exit 0; \ + echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ + { for i in $$list1; do echo "$$i"; done; \ + if test -n "$$list2"; then \ + for i in $$list2; do echo "$$i"; done \ + | sed -n '/\.1[a-z]*$$/p'; \ + fi; \ + } | while read p; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; echo "$$p"; \ + done | \ + sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ + sed 'N;N;s,\n, ,g' | { \ + list=; while read file base inst; do \ + if test "$$base" = "$$inst"; then list="$$list $$file"; else \ + echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ + $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ + fi; \ + done; \ + for i in $$list; do echo "$$i"; done | $(am__base_list) | \ + while read files; do \ + test -z "$$files" || { \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ + done; } + +uninstall-man1: + @$(NORMAL_UNINSTALL) + @list=''; test -n "$(man1dir)" || exit 0; \ + files=`{ for i in $$list; do echo "$$i"; done; \ + l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.1[a-z]*$$/p'; \ + } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ + dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) +install-docDATA: $(doc_DATA) + @$(NORMAL_INSTALL) + @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(docdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(docdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(docdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(docdir)" || exit $$?; \ + done + +uninstall-docDATA: + @$(NORMAL_UNINSTALL) + @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(docdir)'; $(am__uninstall_files_from_dir) +install-pkgconfigDATA: $(pkgconfig_DATA) + @$(NORMAL_INSTALL) + @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(pkgconfigdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ + done + +uninstall-pkgconfigDATA: + @$(NORMAL_UNINSTALL) + @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir) +install-pkgincludeHEADERS: $(pkginclude_HEADERS) + @$(NORMAL_INSTALL) + @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ + done + +uninstall-pkgincludeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscope: cscope.files + test ! -s cscope.files \ + || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) +clean-cscope: + -rm -f cscope.files +cscope.files: clean-cscope cscopelist +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + -rm -f cscope.out cscope.in.out cscope.po.out cscope.files + +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) + $(am__remove_distdir) + test -d "$(distdir)" || mkdir "$(distdir)" + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook + -test -n "$(am__skip_mode_fix)" \ + || find "$(distdir)" -type d ! -perm -755 \ + -exec chmod u+rwx,go+rx {} \; -o \ + ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ + || chmod -R a+r "$(distdir)" +dist-gzip: distdir + tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz + $(am__post_remove_distdir) + +dist-bzip2: distdir + tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 + $(am__post_remove_distdir) + +dist-lzip: distdir + tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz + $(am__post_remove_distdir) +dist-xz: distdir + tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz + $(am__post_remove_distdir) + +dist-tarZ: distdir + @echo WARNING: "Support for distribution archives compressed with" \ + "legacy program 'compress' is deprecated." >&2 + @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 + tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z + $(am__post_remove_distdir) + +dist-shar: distdir + @echo WARNING: "Support for shar distribution archives is" \ + "deprecated." >&2 + @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 + shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz + $(am__post_remove_distdir) + +dist-zip: distdir + -rm -f $(distdir).zip + zip -rq $(distdir).zip $(distdir) + $(am__post_remove_distdir) + +dist dist-all: + $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' + $(am__post_remove_distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + case '$(DIST_ARCHIVES)' in \ + *.tar.gz*) \ + eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\ + *.tar.bz2*) \ + bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.lz*) \ + lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ + *.tar.xz*) \ + xz -dc $(distdir).tar.xz | $(am__untar) ;;\ + *.tar.Z*) \ + uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ + *.shar.gz*) \ + eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ + *.zip*) \ + unzip $(distdir).zip ;;\ + esac + chmod -R a-w $(distdir) + chmod u+w $(distdir) + mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst + chmod a-w $(distdir) + test -d $(distdir)/_build || exit 0; \ + dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ + && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ + && am__cwd=`pwd` \ + && $(am__cd) $(distdir)/_build/sub \ + && ../../configure \ + $(AM_DISTCHECK_CONFIGURE_FLAGS) \ + $(DISTCHECK_CONFIGURE_FLAGS) \ + --srcdir=../.. --prefix="$$dc_install_base" \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ + distuninstallcheck \ + && chmod -R a-w "$$dc_install_base" \ + && ({ \ + (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ + distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ + } || { rm -rf "$$dc_destdir"; exit 1; }) \ + && rm -rf "$$dc_destdir" \ + && $(MAKE) $(AM_MAKEFLAGS) dist \ + && rm -rf $(DIST_ARCHIVES) \ + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ + && cd "$$am__cwd" \ + || exit 1 + $(am__post_remove_distdir) + @(echo "$(distdir) archives ready for distribution: "; \ + list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ + sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' +distuninstallcheck: + @test -n '$(distuninstallcheck_dir)' || { \ + echo 'ERROR: trying to run $@ with an empty' \ + '$$(distuninstallcheck_dir)' >&2; \ + exit 1; \ + }; \ + $(am__cd) '$(distuninstallcheck_dir)' || { \ + echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ + exit 1; \ + }; \ + test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left after uninstall:" ; \ + if test -n "$(DESTDIR)"; then \ + echo " (check DESTDIR support)"; \ + fi ; \ + $(distuninstallcheck_listfiles) ; \ + exit 1; } >&2 +distcleancheck: distclean + @if test '$(srcdir)' = . ; then \ + echo "ERROR: distcleancheck can only run from a VPATH build" ; \ + exit 1 ; \ + fi + @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left in build directory after distclean:" ; \ + $(distcleancheck_listfiles) ; \ + exit 1; } >&2 +check-am: all-am +check: check-am +all-am: Makefile $(PROGRAMS) $(LTLIBRARIES) $(MANS) $(DATA) $(HEADERS) \ + config.h +install-binPROGRAMS: install-libLTLIBRARIES + +installdirs: + for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(libdir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(docdir)" "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(pkgincludedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + -rm -f src/$(DEPDIR)/$(am__dirstamp) + -rm -f src/$(am__dirstamp) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-binPROGRAMS clean-generic clean-libLTLIBRARIES \ + clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -f src/$(DEPDIR)/admesh.Po + -rm -f src/$(DEPDIR)/connect.Plo + -rm -f src/$(DEPDIR)/normals.Plo + -rm -f src/$(DEPDIR)/shared.Plo + -rm -f src/$(DEPDIR)/stl_io.Plo + -rm -f src/$(DEPDIR)/stlinit.Plo + -rm -f src/$(DEPDIR)/util.Plo + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-hdr distclean-libtool distclean-local distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-docDATA install-man install-pkgconfigDATA \ + install-pkgincludeHEADERS + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-binPROGRAMS install-libLTLIBRARIES + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: install-man1 + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf $(top_srcdir)/autom4te.cache + -rm -f src/$(DEPDIR)/admesh.Po + -rm -f src/$(DEPDIR)/connect.Plo + -rm -f src/$(DEPDIR)/normals.Plo + -rm -f src/$(DEPDIR)/shared.Plo + -rm -f src/$(DEPDIR)/stl_io.Plo + -rm -f src/$(DEPDIR)/stlinit.Plo + -rm -f src/$(DEPDIR)/util.Plo + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-binPROGRAMS uninstall-docDATA \ + uninstall-libLTLIBRARIES uninstall-man uninstall-pkgconfigDATA \ + uninstall-pkgincludeHEADERS + +uninstall-man: uninstall-man1 + +.MAKE: all install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles am--refresh check \ + check-am clean clean-binPROGRAMS clean-cscope clean-generic \ + clean-libLTLIBRARIES clean-libtool cscope cscopelist-am ctags \ + ctags-am dist dist-all dist-bzip2 dist-gzip dist-hook \ + dist-lzip dist-shar dist-tarZ dist-xz dist-zip distcheck \ + distclean distclean-compile distclean-generic distclean-hdr \ + distclean-libtool distclean-local distclean-tags \ + distcleancheck distdir distuninstallcheck dvi dvi-am html \ + html-am info info-am install install-am install-binPROGRAMS \ + install-data install-data-am install-docDATA install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am \ + install-libLTLIBRARIES install-man install-man1 install-pdf \ + install-pdf-am install-pkgconfigDATA install-pkgincludeHEADERS \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am uninstall-binPROGRAMS \ + uninstall-docDATA uninstall-libLTLIBRARIES uninstall-man \ + uninstall-man1 uninstall-pkgconfigDATA \ + uninstall-pkgincludeHEADERS + +.PRECIOUS: Makefile + + +distclean-local: + rm -rf *.cache *~ + +AUTHORS: + git log --format='%aN <%aE>' | sort -u > $@ + +ChangeLog: + ./fortag.sh >$@ + +dist-hook: AUTHORS ChangeLog + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/README.md b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/README.md new file mode 100644 index 00000000..0fe285bf --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/README.md @@ -0,0 +1,115 @@ +About this release and repository: +---------------------------------- + +ADMesh was released as an application in 1995/96. Not much happened since then. +As the code of this project might bring use for others, this "fork" was created +to provide a shared library. Once done that, I've collected lots of bugfixes +from the world around us. + +No further development will be done, but bugs will be resolved, if possible. + +Don't patch this project downstream but use this code, so all can benefit from +the changes. Pull requests are welcome, but be sure to generate no warnings. + +Grab the 0.98.4 tarball: +https://github.com/admesh/admesh/releases/download/v0.98.4/admesh-0.98.4.tar.gz + +About ADMesh: +------------- + +ADMesh is a program for processing triangulated solid meshes. Currently, +ADMesh only reads the STL file format that is used for rapid prototyping +applications, although it can write STL, VRML, OFF, and DXF files. + +Additional information regarding the underlying algorithms of ADMesh +can be found in Anthony Martin's Masters Thesis available from here: + +http://www.varlog.com/admesh-htm/ADMeshThesis.zip + +Features: +--------- + + * Read and write binary and ASCII STL files + * Check STL files for flaws (i.e. unconnected facets, bad normals) + * Repair facets by connecting nearby facets that are within a given tolerance + * Fill holes in the mesh by adding facets. + * Repair normal directions (i.e. facets should be CCW) + * Repair normal values (i.e. should be perpendicular to facet with length=1) + * Remove degenerate facets (i.e. facets with 2 or more vertices equal) + * Translate in x, y, and z directions + * Rotate about the x, y, and z axes + * Mirror about the xy, yz, and xz planes + * Scale the part by a factor + * Merge 2 STL files into one + * Write an OFF file + * Write a VRML file + * Write a DXF file + * Calculate the volume of a part + +ADMesh outputs the following statistics after processing: + +```` +================= Results produced by ADMesh version 0.98.4 ================= +Input file : sphere.stl +File type : Binary STL file +Header : Processed by ADMesh version 0.98.4 +============== Size ============== +Min X = -1.334557, Max X = 1.370952 +Min Y = -1.377953, Max Y = 1.377230 +Min Z = -1.373225, Max Z = 1.242838 +========= Facet Status ========== Original ============ Final ==== +Number of facets : 3656 3656 +Facets with 1 disconnected edge : 18 0 +Facets with 2 disconnected edges : 3 0 +Facets with 3 disconnected edges : 0 0 +Total disconnected facets : 21 0 +=== Processing Statistics === ===== Other Statistics ===== +Number of parts : 1 Volume : 10.889216 +Degenerate facets : 0 +Edges fixed : 24 +Facets removed : 0 +Facets added : 0 +Facets reversed : 0 +Backwards edges : 0 +Normals fixed : 0 +```` + +There are two different algorithms used for fixing unconnected facets. The +first algorithm finds an unconnected edge, and then checks nearby within a +given tolerance for another unconnected edge. It then fixes edges within +tolerance. Some meshes can be completely fixed just using this method. If +there are still unconnected facets after this "nearby check" has been done, +then a second algorithm is used. This algorithm just fills any holes in the +mesh by adding facets until all of the holes are filled. Using these two +algorithms, almost any imperfect STL file can be "fixed" 100% so that there +are 0 unconnected facets. Whether the resulting mesh is what you really +want is another question since there is no way for ADMesh to add information +that isn't there. + +At this point ADMesh is only command-line driven and has no windowing +capabilities. This should make it extremely easy to port to any UNIX-like +system, and it shouldn't have any problems compiling on Windows NT, and some +people have had success compiling it under DOS or Windows using DJGPP. + +ADMesh was developed on a 486/66 with 16Mb running the Linux operating system. +It has also been compiled and run on the following systems: +SunOS 4.1.3 +IRIX 5.2 +Please let me know about successes or failures with other systems. + +On my Linux system with 16Mb of memory, I can easily process files that have +up to about 200,000 facets. Files larger than this can be processed, but +the system begins to slow down significantly due to swapping. A system with +more memory will be able to process greater numbers of facets more easily. +Following are some indications of process times: + + * 40,000 facets: 10 seconds + * 80,000 facets: 20 seconds + * 160,000 facets: 50 seconds + * 320,000 facets: 13 minutes (heavy swapping occurred) + +Note that those times were calculated around 1996. + +ADMesh is free but copyrighted software. It is distributed under the terms +of the GNU General Public License (GPL). Details of the GPL are in the file +COPYING that comes with the ADMesh software package. diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/aclocal.m4 b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/aclocal.m4 new file mode 100644 index 00000000..f73d7d01 --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/aclocal.m4 @@ -0,0 +1,1169 @@ +# generated automatically by aclocal 1.16.1 -*- Autoconf -*- + +# Copyright (C) 1996-2018 Free Software Foundation, Inc. + +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, +[m4_warning([this file was generated for autoconf 2.69. +You have another version of autoconf. It may work, but is not guaranteed to. +If you have problems, you may need to regenerate the build system entirely. +To do so, use the procedure documented by the package, typically 'autoreconf'.])]) + +# Copyright (C) 2002-2018 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_AUTOMAKE_VERSION(VERSION) +# ---------------------------- +# Automake X.Y traces this macro to ensure aclocal.m4 has been +# generated from the m4 files accompanying Automake X.Y. +# (This private macro should not be called outside this file.) +AC_DEFUN([AM_AUTOMAKE_VERSION], +[am__api_version='1.16' +dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to +dnl require some minimum version. Point them to the right macro. +m4_if([$1], [1.16.1], [], + [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl +]) + +# _AM_AUTOCONF_VERSION(VERSION) +# ----------------------------- +# aclocal traces this macro to find the Autoconf version. +# This is a private macro too. Using m4_define simplifies +# the logic in aclocal, which can simply ignore this definition. +m4_define([_AM_AUTOCONF_VERSION], []) + +# AM_SET_CURRENT_AUTOMAKE_VERSION +# ------------------------------- +# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. +# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. +AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], +[AM_AUTOMAKE_VERSION([1.16.1])dnl +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) + +# AM_AUX_DIR_EXPAND -*- Autoconf -*- + +# Copyright (C) 2001-2018 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets +# $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to +# '$srcdir', '$srcdir/..', or '$srcdir/../..'. +# +# Of course, Automake must honor this variable whenever it calls a +# tool from the auxiliary directory. The problem is that $srcdir (and +# therefore $ac_aux_dir as well) can be either absolute or relative, +# depending on how configure is run. This is pretty annoying, since +# it makes $ac_aux_dir quite unusable in subdirectories: in the top +# source directory, any form will work fine, but in subdirectories a +# relative path needs to be adjusted first. +# +# $ac_aux_dir/missing +# fails when called from a subdirectory if $ac_aux_dir is relative +# $top_srcdir/$ac_aux_dir/missing +# fails if $ac_aux_dir is absolute, +# fails when called from a subdirectory in a VPATH build with +# a relative $ac_aux_dir +# +# The reason of the latter failure is that $top_srcdir and $ac_aux_dir +# are both prefixed by $srcdir. In an in-source build this is usually +# harmless because $srcdir is '.', but things will broke when you +# start a VPATH build or use an absolute $srcdir. +# +# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, +# iff we strip the leading $srcdir from $ac_aux_dir. That would be: +# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` +# and then we would define $MISSING as +# MISSING="\${SHELL} $am_aux_dir/missing" +# This will work as long as MISSING is not called from configure, because +# unfortunately $(top_srcdir) has no meaning in configure. +# However there are other variables, like CC, which are often used in +# configure, and could therefore not use this "fixed" $ac_aux_dir. +# +# Another solution, used here, is to always expand $ac_aux_dir to an +# absolute PATH. The drawback is that using absolute paths prevent a +# configured tree to be moved without reconfiguration. + +AC_DEFUN([AM_AUX_DIR_EXPAND], +[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl +# Expand $ac_aux_dir to an absolute path. +am_aux_dir=`cd "$ac_aux_dir" && pwd` +]) + +# AM_CONDITIONAL -*- Autoconf -*- + +# Copyright (C) 1997-2018 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_CONDITIONAL(NAME, SHELL-CONDITION) +# ------------------------------------- +# Define a conditional. +AC_DEFUN([AM_CONDITIONAL], +[AC_PREREQ([2.52])dnl + m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE])dnl +AC_SUBST([$1_FALSE])dnl +_AM_SUBST_NOTMAKE([$1_TRUE])dnl +_AM_SUBST_NOTMAKE([$1_FALSE])dnl +m4_define([_AM_COND_VALUE_$1], [$2])dnl +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi +AC_CONFIG_COMMANDS_PRE( +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then + AC_MSG_ERROR([[conditional "$1" was never defined. +Usually this means the macro was only invoked conditionally.]]) +fi])]) + +# Copyright (C) 1999-2018 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + + +# There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be +# written in clear, in which case automake, when reading aclocal.m4, +# will think it sees a *use*, and therefore will trigger all it's +# C support machinery. Also note that it means that autoscan, seeing +# CC etc. in the Makefile, will ask for an AC_PROG_CC use... + + +# _AM_DEPENDENCIES(NAME) +# ---------------------- +# See how the compiler implements dependency checking. +# NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". +# We try a few techniques and use that to set a single cache variable. +# +# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was +# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular +# dependency, and given that the user is not expected to run this macro, +# just rely on AC_PROG_CC. +AC_DEFUN([_AM_DEPENDENCIES], +[AC_REQUIRE([AM_SET_DEPDIR])dnl +AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl +AC_REQUIRE([AM_MAKE_INCLUDE])dnl +AC_REQUIRE([AM_DEP_TRACK])dnl + +m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], + [$1], [CXX], [depcc="$CXX" am_compiler_list=], + [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], + [$1], [UPC], [depcc="$UPC" am_compiler_list=], + [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) + +AC_CACHE_CHECK([dependency style of $depcc], + [am_cv_$1_dependencies_compiler_type], +[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_$1_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` + fi + am__universal=false + m4_case([$1], [CC], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac], + [CXX], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac]) + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with '-c' and '-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok '-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_$1_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_$1_dependencies_compiler_type=none +fi +]) +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) +AM_CONDITIONAL([am__fastdep$1], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) +]) + + +# AM_SET_DEPDIR +# ------------- +# Choose a directory name for dependency files. +# This macro is AC_REQUIREd in _AM_DEPENDENCIES. +AC_DEFUN([AM_SET_DEPDIR], +[AC_REQUIRE([AM_SET_LEADING_DOT])dnl +AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl +]) + + +# AM_DEP_TRACK +# ------------ +AC_DEFUN([AM_DEP_TRACK], +[AC_ARG_ENABLE([dependency-tracking], [dnl +AS_HELP_STRING( + [--enable-dependency-tracking], + [do not reject slow dependency extractors]) +AS_HELP_STRING( + [--disable-dependency-tracking], + [speeds up one-time build])]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' + am__nodep='_no' +fi +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH])dnl +_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl +AC_SUBST([am__nodep])dnl +_AM_SUBST_NOTMAKE([am__nodep])dnl +]) + +# Generate code to set up dependency tracking. -*- Autoconf -*- + +# Copyright (C) 1999-2018 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_OUTPUT_DEPENDENCY_COMMANDS +# ------------------------------ +AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], +[{ + # Older Autoconf quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + # TODO: see whether this extra hack can be removed once we start + # requiring Autoconf 2.70 or later. + AS_CASE([$CONFIG_FILES], + [*\'*], [eval set x "$CONFIG_FILES"], + [*], [set x $CONFIG_FILES]) + shift + # Used to flag and report bootstrapping failures. + am_rc=0 + for am_mf + do + # Strip MF so we end up with the name of the file. + am_mf=`AS_ECHO(["$am_mf"]) | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile which includes + # dependency-tracking related rules and includes. + # Grep'ing the whole file directly is not great: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ + || continue + am_dirpart=`AS_DIRNAME(["$am_mf"])` + am_filepart=`AS_BASENAME(["$am_mf"])` + AM_RUN_LOG([cd "$am_dirpart" \ + && sed -e '/# am--include-marker/d' "$am_filepart" \ + | $MAKE -f - am--depfiles]) || am_rc=$? + done + if test $am_rc -ne 0; then + AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments + for automatic dependency tracking. Try re-running configure with the + '--disable-dependency-tracking' option to at least be able to build + the package (albeit without support for automatic dependency tracking).]) + fi + AS_UNSET([am_dirpart]) + AS_UNSET([am_filepart]) + AS_UNSET([am_mf]) + AS_UNSET([am_rc]) + rm -f conftest-deps.mk +} +])# _AM_OUTPUT_DEPENDENCY_COMMANDS + + +# AM_OUTPUT_DEPENDENCY_COMMANDS +# ----------------------------- +# This macro should only be invoked once -- use via AC_REQUIRE. +# +# This code is only required when automatic dependency tracking is enabled. +# This creates each '.Po' and '.Plo' makefile fragment that we'll need in +# order to bootstrap the dependency handling code. +AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], +[AC_CONFIG_COMMANDS([depfiles], + [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], + [AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}"])]) + +# Do all the work for Automake. -*- Autoconf -*- + +# Copyright (C) 1996-2018 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This macro actually does too much. Some checks are only needed if +# your package does certain things. But this isn't really a big deal. + +dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. +m4_define([AC_PROG_CC], +m4_defn([AC_PROG_CC]) +[_AM_PROG_CC_C_O +]) + +# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) +# AM_INIT_AUTOMAKE([OPTIONS]) +# ----------------------------------------------- +# The call with PACKAGE and VERSION arguments is the old style +# call (pre autoconf-2.50), which is being phased out. PACKAGE +# and VERSION should now be passed to AC_INIT and removed from +# the call to AM_INIT_AUTOMAKE. +# We support both call styles for the transition. After +# the next Automake release, Autoconf can make the AC_INIT +# arguments mandatory, and then we can depend on a new Autoconf +# release and drop the old call support. +AC_DEFUN([AM_INIT_AUTOMAKE], +[AC_PREREQ([2.65])dnl +dnl Autoconf wants to disallow AM_ names. We explicitly allow +dnl the ones we care about. +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl +AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl +AC_REQUIRE([AC_PROG_INSTALL])dnl +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi +AC_SUBST([CYGPATH_W]) + +# Define the identity of the package. +dnl Distinguish between old-style and new-style calls. +m4_ifval([$2], +[AC_DIAGNOSE([obsolete], + [$0: two- and three-arguments forms are deprecated.]) +m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])dnl +dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. +m4_if( + m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), + [ok:ok],, + [m4_fatal([AC_INIT should be called with package and version arguments])])dnl + AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl + AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl + +_AM_IF_OPTION([no-define],, +[AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) + AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl + +# Some tools Automake needs. +AC_REQUIRE([AM_SANITY_CHECK])dnl +AC_REQUIRE([AC_ARG_PROGRAM])dnl +AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) +AM_MISSING_PROG([AUTOCONF], [autoconf]) +AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) +AM_MISSING_PROG([AUTOHEADER], [autoheader]) +AM_MISSING_PROG([MAKEINFO], [makeinfo]) +AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +# For better backward compatibility. To be removed once Automake 1.9.x +# dies out for good. For more background, see: +# +# +AC_SUBST([mkdir_p], ['$(MKDIR_P)']) +# We need awk for the "check" target (and possibly the TAP driver). The +# system "awk" is bad on some platforms. +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([AC_PROG_MAKE_SET])dnl +AC_REQUIRE([AM_SET_LEADING_DOT])dnl +_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) +_AM_IF_OPTION([no-dependencies],, +[AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES([CC])], + [m4_define([AC_PROG_CC], + m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES([CXX])], + [m4_define([AC_PROG_CXX], + m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES([OBJC])], + [m4_define([AC_PROG_OBJC], + m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], + [_AM_DEPENDENCIES([OBJCXX])], + [m4_define([AC_PROG_OBJCXX], + m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl +]) +AC_REQUIRE([AM_SILENT_RULES])dnl +dnl The testsuite driver may need to know about EXEEXT, so add the +dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This +dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. +AC_CONFIG_COMMANDS_PRE(dnl +[m4_provide_if([_AM_COMPILER_EXEEXT], + [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl + +# POSIX will say in a future version that running "rm -f" with no argument +# is OK; and we want to be able to make that assumption in our Makefile +# recipes. So use an aggressive probe to check that the usage we want is +# actually supported "in the wild" to an acceptable degree. +# See automake bug#10828. +# To make any issue more visible, cause the running configure to be aborted +# by default if the 'rm' program in use doesn't match our expectations; the +# user can still override this though. +if rm -f && rm -fr && rm -rf; then : OK; else + cat >&2 <<'END' +Oops! + +Your 'rm' program seems unable to run without file operands specified +on the command line, even when the '-f' option is present. This is contrary +to the behaviour of most rm programs out there, and not conforming with +the upcoming POSIX standard: + +Please tell bug-automake@gnu.org about your system, including the value +of your $PATH and any error possibly output before this message. This +can help us improve future automake versions. + +END + if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then + echo 'Configuration will proceed anyway, since you have set the' >&2 + echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 + echo >&2 + else + cat >&2 <<'END' +Aborting the configuration process, to ensure you take notice of the issue. + +You can download and install GNU coreutils to get an 'rm' implementation +that behaves properly: . + +If you want to complete the configuration process using your problematic +'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM +to "yes", and re-run configure. + +END + AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) + fi +fi +dnl The trailing newline in this macro's definition is deliberate, for +dnl backward compatibility and to allow trailing 'dnl'-style comments +dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. +]) + +dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not +dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further +dnl mangled by Autoconf and run in a shell conditional statement. +m4_define([_AC_COMPILER_EXEEXT], +m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) + +# When config.status generates a header, we must update the stamp-h file. +# This file resides in the same directory as the config header +# that is generated. The stamp files are numbered to have different names. + +# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the +# loop where config.status creates the headers, so we can generate +# our stamp files there. +AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], +[# Compute $1's index in $config_headers. +_am_arg=$1 +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) + +# Copyright (C) 2001-2018 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_SH +# ------------------ +# Define $install_sh. +AC_DEFUN([AM_PROG_INSTALL_SH], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +if test x"${install_sh+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi +AC_SUBST([install_sh])]) + +# Copyright (C) 2003-2018 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# Check whether the underlying file-system supports filenames +# with a leading dot. For instance MS-DOS doesn't. +AC_DEFUN([AM_SET_LEADING_DOT], +[rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null +AC_SUBST([am__leading_dot])]) + +# Check to see how 'make' treats includes. -*- Autoconf -*- + +# Copyright (C) 2001-2018 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_MAKE_INCLUDE() +# ----------------- +# Check whether make has an 'include' directive that can support all +# the idioms we need for our automatic dependency tracking code. +AC_DEFUN([AM_MAKE_INCLUDE], +[AC_MSG_CHECKING([whether ${MAKE-make} supports the include directive]) +cat > confinc.mk << 'END' +am__doit: + @echo this is the am__doit target >confinc.out +.PHONY: am__doit +END +am__include="#" +am__quote= +# BSD make does it like this. +echo '.include "confinc.mk" # ignored' > confmf.BSD +# Other make implementations (GNU, Solaris 10, AIX) do it like this. +echo 'include confinc.mk # ignored' > confmf.GNU +_am_result=no +for s in GNU BSD; do + AM_RUN_LOG([${MAKE-make} -f confmf.$s && cat confinc.out]) + AS_CASE([$?:`cat confinc.out 2>/dev/null`], + ['0:this is the am__doit target'], + [AS_CASE([$s], + [BSD], [am__include='.include' am__quote='"'], + [am__include='include' am__quote=''])]) + if test "$am__include" != "#"; then + _am_result="yes ($s style)" + break + fi +done +rm -f confinc.* confmf.* +AC_MSG_RESULT([${_am_result}]) +AC_SUBST([am__include])]) +AC_SUBST([am__quote])]) + +# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- + +# Copyright (C) 1997-2018 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_MISSING_PROG(NAME, PROGRAM) +# ------------------------------ +AC_DEFUN([AM_MISSING_PROG], +[AC_REQUIRE([AM_MISSING_HAS_RUN]) +$1=${$1-"${am_missing_run}$2"} +AC_SUBST($1)]) + +# AM_MISSING_HAS_RUN +# ------------------ +# Define MISSING if not defined so far and test if it is modern enough. +# If it is, set am_missing_run to use it, otherwise, to nothing. +AC_DEFUN([AM_MISSING_HAS_RUN], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([missing])dnl +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --is-lightweight"; then + am_missing_run="$MISSING " +else + am_missing_run= + AC_MSG_WARN(['missing' script is too old or missing]) +fi +]) + +# -*- Autoconf -*- +# Obsolete and "removed" macros, that must however still report explicit +# error messages when used, to smooth transition. +# +# Copyright (C) 1996-2018 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +AC_DEFUN([AM_CONFIG_HEADER], +[AC_DIAGNOSE([obsolete], +['$0': this macro is obsolete. +You should use the 'AC][_CONFIG_HEADERS' macro instead.])dnl +AC_CONFIG_HEADERS($@)]) + +AC_DEFUN([AM_PROG_CC_STDC], +[AC_PROG_CC +am_cv_prog_cc_stdc=$ac_cv_prog_cc_stdc +AC_DIAGNOSE([obsolete], +['$0': this macro is obsolete. +You should simply use the 'AC][_PROG_CC' macro instead. +Also, your code should no longer depend upon 'am_cv_prog_cc_stdc', +but upon 'ac_cv_prog_cc_stdc'.])]) + +AC_DEFUN([AM_C_PROTOTYPES], + [AC_FATAL([automatic de-ANSI-fication support has been removed])]) +AU_DEFUN([fp_C_PROTOTYPES], [AM_C_PROTOTYPES]) + +# Helper functions for option handling. -*- Autoconf -*- + +# Copyright (C) 2001-2018 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_MANGLE_OPTION(NAME) +# ----------------------- +AC_DEFUN([_AM_MANGLE_OPTION], +[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) + +# _AM_SET_OPTION(NAME) +# -------------------- +# Set option NAME. Presently that only means defining a flag for this option. +AC_DEFUN([_AM_SET_OPTION], +[m4_define(_AM_MANGLE_OPTION([$1]), [1])]) + +# _AM_SET_OPTIONS(OPTIONS) +# ------------------------ +# OPTIONS is a space-separated list of Automake options. +AC_DEFUN([_AM_SET_OPTIONS], +[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) + +# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) +# ------------------------------------------- +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +AC_DEFUN([_AM_IF_OPTION], +[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) + +# Copyright (C) 1999-2018 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_PROG_CC_C_O +# --------------- +# Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC +# to automatically call this. +AC_DEFUN([_AM_PROG_CC_C_O], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([compile])dnl +AC_LANG_PUSH([C])dnl +AC_CACHE_CHECK( + [whether $CC understands -c and -o together], + [am_cv_prog_cc_c_o], + [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) + # Make sure it works both with $CC and with simple cc. + # Following AC_PROG_CC_C_O, we do the test twice because some + # compilers refuse to overwrite an existing .o file with -o, + # though they will create one. + am_cv_prog_cc_c_o=yes + for am_i in 1 2; do + if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ + && test -f conftest2.$ac_objext; then + : OK + else + am_cv_prog_cc_c_o=no + break + fi + done + rm -f core conftest* + unset am_i]) +if test "$am_cv_prog_cc_c_o" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi +AC_LANG_POP([C])]) + +# For backward compatibility. +AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) + +# Copyright (C) 2001-2018 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_RUN_LOG(COMMAND) +# ------------------- +# Run COMMAND, save the exit status in ac_status, and log it. +# (This has been adapted from Autoconf's _AC_RUN_LOG macro.) +AC_DEFUN([AM_RUN_LOG], +[{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD + ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + (exit $ac_status); }]) + +# Check to make sure that the build environment is sane. -*- Autoconf -*- + +# Copyright (C) 1996-2018 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_SANITY_CHECK +# --------------- +AC_DEFUN([AM_SANITY_CHECK], +[AC_MSG_CHECKING([whether build environment is sane]) +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[[\\\"\#\$\&\'\`$am_lf]]*) + AC_MSG_ERROR([unsafe absolute working directory name]);; +esac +case $srcdir in + *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) + AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; +esac + +# Do 'set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + am_has_slept=no + for am_try in 1 2; do + echo "timestamp, slept: $am_has_slept" > conftest.file + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken + alias in your environment]) + fi + if test "$[2]" = conftest.file || test $am_try -eq 2; then + break + fi + # Just in case. + sleep 1 + am_has_slept=yes + done + test "$[2]" = conftest.file + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +AC_MSG_RESULT([yes]) +# If we didn't sleep, we still need to ensure time stamps of config.status and +# generated files are strictly newer. +am_sleep_pid= +if grep 'slept: no' conftest.file >/dev/null 2>&1; then + ( sleep 1 ) & + am_sleep_pid=$! +fi +AC_CONFIG_COMMANDS_PRE( + [AC_MSG_CHECKING([that generated files are newer than configure]) + if test -n "$am_sleep_pid"; then + # Hide warnings about reused PIDs. + wait $am_sleep_pid 2>/dev/null + fi + AC_MSG_RESULT([done])]) +rm -f conftest.file +]) + +# Copyright (C) 2009-2018 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_SILENT_RULES([DEFAULT]) +# -------------------------- +# Enable less verbose build rules; with the default set to DEFAULT +# ("yes" being less verbose, "no" or empty being verbose). +AC_DEFUN([AM_SILENT_RULES], +[AC_ARG_ENABLE([silent-rules], [dnl +AS_HELP_STRING( + [--enable-silent-rules], + [less verbose build output (undo: "make V=1")]) +AS_HELP_STRING( + [--disable-silent-rules], + [verbose build output (undo: "make V=0")])dnl +]) +case $enable_silent_rules in @%:@ ((( + yes) AM_DEFAULT_VERBOSITY=0;; + no) AM_DEFAULT_VERBOSITY=1;; + *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; +esac +dnl +dnl A few 'make' implementations (e.g., NonStop OS and NextStep) +dnl do not support nested variable expansions. +dnl See automake bug#9928 and bug#10237. +am_make=${MAKE-make} +AC_CACHE_CHECK([whether $am_make supports nested variables], + [am_cv_make_support_nested_variables], + [if AS_ECHO([['TRUE=$(BAR$(V)) +BAR0=false +BAR1=true +V=1 +am__doit: + @$(TRUE) +.PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then + am_cv_make_support_nested_variables=yes +else + am_cv_make_support_nested_variables=no +fi]) +if test $am_cv_make_support_nested_variables = yes; then + dnl Using '$V' instead of '$(V)' breaks IRIX make. + AM_V='$(V)' + AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +else + AM_V=$AM_DEFAULT_VERBOSITY + AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY +fi +AC_SUBST([AM_V])dnl +AM_SUBST_NOTMAKE([AM_V])dnl +AC_SUBST([AM_DEFAULT_V])dnl +AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl +AC_SUBST([AM_DEFAULT_VERBOSITY])dnl +AM_BACKSLASH='\' +AC_SUBST([AM_BACKSLASH])dnl +_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl +]) + +# Copyright (C) 2001-2018 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_STRIP +# --------------------- +# One issue with vendor 'install' (even GNU) is that you can't +# specify the program used to strip binaries. This is especially +# annoying in cross-compiling environments, where the build's strip +# is unlikely to handle the host's binaries. +# Fortunately install-sh will honor a STRIPPROG variable, so we +# always use install-sh in "make install-strip", and initialize +# STRIPPROG with the value of the STRIP variable (set by the user). +AC_DEFUN([AM_PROG_INSTALL_STRIP], +[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +# Installed binaries are usually stripped using 'strip' when the user +# run "make install-strip". However 'strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the 'STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. +if test "$cross_compiling" != no; then + AC_CHECK_TOOL([STRIP], [strip], :) +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) + +# Copyright (C) 2006-2018 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. +# This macro is traced by Automake. +AC_DEFUN([_AM_SUBST_NOTMAKE]) + +# AM_SUBST_NOTMAKE(VARIABLE) +# -------------------------- +# Public sister of _AM_SUBST_NOTMAKE. +AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) + +# Check how to create a tarball. -*- Autoconf -*- + +# Copyright (C) 2004-2018 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_PROG_TAR(FORMAT) +# -------------------- +# Check how to create a tarball in format FORMAT. +# FORMAT should be one of 'v7', 'ustar', or 'pax'. +# +# Substitute a variable $(am__tar) that is a command +# writing to stdout a FORMAT-tarball containing the directory +# $tardir. +# tardir=directory && $(am__tar) > result.tar +# +# Substitute a variable $(am__untar) that extract such +# a tarball read from stdin. +# $(am__untar) < result.tar +# +AC_DEFUN([_AM_PROG_TAR], +[# Always define AMTAR for backward compatibility. Yes, it's still used +# in the wild :-( We should find a proper way to deprecate it ... +AC_SUBST([AMTAR], ['$${TAR-tar}']) + +# We'll loop over all known methods to create a tar archive until one works. +_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' + +m4_if([$1], [v7], + [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], + + [m4_case([$1], + [ustar], + [# The POSIX 1988 'ustar' format is defined with fixed-size fields. + # There is notably a 21 bits limit for the UID and the GID. In fact, + # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 + # and bug#13588). + am_max_uid=2097151 # 2^21 - 1 + am_max_gid=$am_max_uid + # The $UID and $GID variables are not portable, so we need to resort + # to the POSIX-mandated id(1) utility. Errors in the 'id' calls + # below are definitely unexpected, so allow the users to see them + # (that is, avoid stderr redirection). + am_uid=`id -u || echo unknown` + am_gid=`id -g || echo unknown` + AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) + if test $am_uid -le $am_max_uid; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + _am_tools=none + fi + AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) + if test $am_gid -le $am_max_gid; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + _am_tools=none + fi], + + [pax], + [], + + [m4_fatal([Unknown tar format])]) + + AC_MSG_CHECKING([how to create a $1 tar archive]) + + # Go ahead even if we have the value already cached. We do so because we + # need to set the values for the 'am__tar' and 'am__untar' variables. + _am_tools=${am_cv_prog_tar_$1-$_am_tools} + + for _am_tool in $_am_tools; do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; do + AM_RUN_LOG([$_am_tar --version]) && break + done + am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x $1 -w "$$tardir"' + am__tar_='pax -L -x $1 -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H $1 -L' + am__tar_='find "$tardir" -print | cpio -o -H $1 -L' + am__untar='cpio -i -H $1 -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_$1}" && break + + # tar/untar a dummy directory, and stop if the command works. + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) + rm -rf conftest.dir + if test -s conftest.tar; then + AM_RUN_LOG([$am__untar /dev/null 2>&1 && break + fi + done + rm -rf conftest.dir + + AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) + AC_MSG_RESULT([$am_cv_prog_tar_$1])]) + +AC_SUBST([am__tar]) +AC_SUBST([am__untar]) +]) # _AM_PROG_TAR + +m4_include([m4/libtool.m4]) +m4_include([m4/ltoptions.m4]) +m4_include([m4/ltsugar.m4]) +m4_include([m4/ltversion.m4]) +m4_include([m4/lt~obsolete.m4]) diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/admesh b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/admesh new file mode 100755 index 00000000..4b5e71ec --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/admesh @@ -0,0 +1,210 @@ +#! /bin/bash + +# admesh - temporary wrapper script for .libs/admesh +# Generated by libtool (GNU libtool) 2.4.6 +# +# The admesh program cannot be directly executed until all the libtool +# libraries that it depends on are installed. +# +# This wrapper script should never be moved out of the build directory. +# If it is, it will not operate correctly. + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='s|\([`"$\\]\)|\\\1|g' + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +relink_command="" + +# This environment variable determines our operation mode. +if test "$libtool_install_magic" = "%%%MAGIC variable%%%"; then + # install mode needs the following variables: + generated_by_libtool_version='2.4.6' + notinst_deplibs=' libadmesh.la' +else + # When we are sourced in execute mode, $file and $ECHO are already set. + if test "$libtool_execute_magic" != "%%%MAGIC variable%%%"; then + file="$0" + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' +} + ECHO="printf %s\\n" + fi + +# Very basic option parsing. These options are (a) specific to +# the libtool wrapper, (b) are identical between the wrapper +# /script/ and the wrapper /executable/ that is used only on +# windows platforms, and (c) all begin with the string --lt- +# (application programs are unlikely to have options that match +# this pattern). +# +# There are only two supported options: --lt-debug and +# --lt-dump-script. There is, deliberately, no --lt-help. +# +# The first argument to this parsing function should be the +# script's ./libtool value, followed by no. +lt_option_debug= +func_parse_lt_options () +{ + lt_script_arg0=$0 + shift + for lt_opt + do + case "$lt_opt" in + --lt-debug) lt_option_debug=1 ;; + --lt-dump-script) + lt_dump_D=`$ECHO "X$lt_script_arg0" | /usr/bin/sed -e 's/^X//' -e 's%/[^/]*$%%'` + test "X$lt_dump_D" = "X$lt_script_arg0" && lt_dump_D=. + lt_dump_F=`$ECHO "X$lt_script_arg0" | /usr/bin/sed -e 's/^X//' -e 's%^.*/%%'` + cat "$lt_dump_D/$lt_dump_F" + exit 0 + ;; + --lt-*) + $ECHO "Unrecognized --lt- option: '$lt_opt'" 1>&2 + exit 1 + ;; + esac + done + + # Print the debug banner immediately: + if test -n "$lt_option_debug"; then + echo "admesh:admesh:$LINENO: libtool wrapper (GNU libtool) 2.4.6" 1>&2 + fi +} + +# Used when --lt-debug. Prints its arguments to stdout +# (redirection is the responsibility of the caller) +func_lt_dump_args () +{ + lt_dump_args_N=1; + for lt_arg + do + $ECHO "admesh:admesh:$LINENO: newargv[$lt_dump_args_N]: $lt_arg" + lt_dump_args_N=`expr $lt_dump_args_N + 1` + done +} + +# Core function for launching the target application +func_exec_program_core () +{ + + if test -n "$lt_option_debug"; then + $ECHO "admesh:admesh:$LINENO: newargv[0]: $progdir/$program" 1>&2 + func_lt_dump_args ${1+"$@"} 1>&2 + fi + exec "$progdir/$program" ${1+"$@"} + + $ECHO "$0: cannot exec $program $*" 1>&2 + exit 1 +} + +# A function to encapsulate launching the target application +# Strips options in the --lt-* namespace from $@ and +# launches target application with the remaining arguments. +func_exec_program () +{ + case " $* " in + *\ --lt-*) + for lt_wr_arg + do + case $lt_wr_arg in + --lt-*) ;; + *) set x "$@" "$lt_wr_arg"; shift;; + esac + shift + done ;; + esac + func_exec_program_core ${1+"$@"} +} + + # Parse options + func_parse_lt_options "$0" ${1+"$@"} + + # Find the directory that this script lives in. + thisdir=`$ECHO "$file" | /usr/bin/sed 's%/[^/]*$%%'` + test "x$thisdir" = "x$file" && thisdir=. + + # Follow symbolic links until we get to the real thisdir. + file=`ls -ld "$file" | /usr/bin/sed -n 's/.*-> //p'` + while test -n "$file"; do + destdir=`$ECHO "$file" | /usr/bin/sed 's%/[^/]*$%%'` + + # If there was a directory component, then change thisdir. + if test "x$destdir" != "x$file"; then + case "$destdir" in + [\\/]* | [A-Za-z]:[\\/]*) thisdir="$destdir" ;; + *) thisdir="$thisdir/$destdir" ;; + esac + fi + + file=`$ECHO "$file" | /usr/bin/sed 's%^.*/%%'` + file=`ls -ld "$thisdir/$file" | /usr/bin/sed -n 's/.*-> //p'` + done + + # Usually 'no', except on cygwin/mingw when embedded into + # the cwrapper. + WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=no + if test "$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR" = "yes"; then + # special case for '.' + if test "$thisdir" = "."; then + thisdir=`pwd` + fi + # remove .libs from thisdir + case "$thisdir" in + *[\\/].libs ) thisdir=`$ECHO "$thisdir" | /usr/bin/sed 's%[\\/][^\\/]*$%%'` ;; + .libs ) thisdir=. ;; + esac + fi + + # Try to get the absolute directory name. + absdir=`cd "$thisdir" && pwd` + test -n "$absdir" && thisdir="$absdir" + + program='admesh' + progdir="$thisdir/.libs" + + + if test -f "$progdir/$program"; then + # Add our own library path to LD_LIBRARY_PATH + LD_LIBRARY_PATH="/home/tomate/mightyscape/papercraft_unfold/admesh/linux/.libs:$LD_LIBRARY_PATH" + + # Some systems cannot cope with colon-terminated LD_LIBRARY_PATH + # The second colon is a workaround for a bug in BeOS R4 sed + LD_LIBRARY_PATH=`$ECHO "$LD_LIBRARY_PATH" | /usr/bin/sed 's/::*$//'` + + export LD_LIBRARY_PATH + + if test "$libtool_execute_magic" != "%%%MAGIC variable%%%"; then + # Run the actual program with our arguments. + func_exec_program ${1+"$@"} + fi + else + # The program doesn't exist. + $ECHO "$0: error: '$progdir/$program' does not exist" 1>&2 + $ECHO "This script is just a wrapper for $program." 1>&2 + $ECHO "See the libtool documentation for more information." 1>&2 + exit 1 + fi +fi diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/admesh-doc.txt b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/admesh-doc.txt new file mode 100644 index 00000000..044a4431 --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/admesh-doc.txt @@ -0,0 +1,475 @@ +Note: This manual is slightly out of date. Specifically it doesn't +mention OFF, VRML, or DXF files. However, there isn't much to know about +these options. If you just type 'admesh --help' a list of options will be +printed. + +This document describes the use of ADMesh version 0.93. ADMesh is a program +for processing triangulated solid meshes. Currently, ADMesh only reads the +STL file format that is used for rapid prototyping applications, although it +can write STL, VRML, OFF, and DXF files. + +For information about compiling ADMesh, see the file INSTALL. The file +README contains a brief description of ADMesh along with its features and +capabilities. + +ADMesh is Copyrighted software and is distributed under the terms of the GNU +General Public License. See the file COPYING for license information. + +Invoking ADMesh +=============== + +ADMesh is executed as follows: + admesh [OPTION]... file + +By default, ADMesh performs all of the mesh checking and repairing options +on the input file. This means that is checks exact, nearby, +remove-unconnected, fill-holes, normal-directions, and normal-values. The +file type (ASCII or binary) is automatically detected. The input file is +not modified unless it is specified by the --write option. If the following +command line was input: + admesh sphere.stl +The file sphere.stl would be opened and read, it would be checked and fixed +if necessary, and the results of processing would be printed out. The +results would not be saved. + +The default value for tolerance is the length of the shortest edge of the +mesh. The default number of iterations is 2, and the default increment is +0.01% of the diameter of a sphere that encloses the entire mesh. + +If any of the options --exact, --nearby, --remove-unconnected, --fill-holes, +--normal-directions, --reverse-all, --normal-values, or --no-check are +given, then no other checks besides that one will be done unless they are +specified or unless they are required by ADMesh before the specified check +can be done. For example the following command line: + admesh --remove-unconnected sphere.stl +would first do an exact check because it is required, and then the +unconnected facets would be removed. The results would be printed and no +other checks would be done. + +Examples +======== + +To perform all checks except for nearby, the following command line would be +used: + admesh --exact --remove-unconnected --fill-holes \ + --normal-directions --normal-values sphere.stl + +Actually, since the exact check is required by ADMesh before +remove-unconnected, and remove-unconnected is required before --fill-holes, +the above command line could be shortened as follows with the same results: + admesh --fill-holes --normal-directions --normal-values sphere.stl + +And again the same results could be achieved using the short options: + admesh -fudev sphere.stl +or + admesh -fdv sphere.stl + +The following command lines do the same thing: + admesh sphere.stl + admesh -fundev sphere.stl + admesh -f -u -n -d -e -v sphere.stl +since the -fundev options are implied by default. To eliminate one of the +checks, just remove the letter of the check to eliminate from the "word" +'fundev'. + +About + +Option Summary +============== + +ADMesh supports the following options, grouped by type. + +*Mesh Transformation and Manipulation Options* + --x-rotate=angle Rotate CCW about x-axis by angle degrees + --y-rotate=angle Rotate CCW about y-axis by angle degrees + --z-rotate=angle Rotate CCW about z-axis by angle degrees + --xy-mirror Mirror about the xy plane + --yz-mirror Mirror about the yz plane + --xz-mirror Mirror about the xz plane + --scale=factor Scale the file by factor (multiply by factor) + --translate=x,y,z Translate the file to x, y, and z + --merge=name Merge file called name with input file + +*Mesh Checking and Repairing Options* + -e, --exact Only check for perfectly matched edges + -n, --nearby Find and connect nearby facets. Correct bad facets + -t, --tolerance=tol Initial tolerance to use for nearby check = tol + -i, --iterations=i Number of iterations for nearby check = i + -m, --increment=inc Amount to increment tolerance after iteration=inc + -u, --remove-unconnected Remove facets that have 0 neighbors + -f, --fill-holes Add facets to fill holes + -d, --normal-directions Check and fix direction of normals(ie cw, ccw) + --reverse-all Reverse the directions of all facets and normals + -v, --normal-values Check and fix normal values + -c, --no-check Don't do any check on input file + +*File Output Options* + -b, --write-binary-stl=name Output a binary STL file called name + -a, --write-ascii-stl=name Output an ascii STL file called name + +*Miscellaneous Options* + --help Display this help and exit + --version Output version information and exit + + + + + + + +Mesh Transformation and Manipulation Options +============================================ + +'--x-rotate=angle' +'--y-rotate=angle' +'--z-rotate=angle' + Rotate the entire mesh about the specified axis by the given number of + degrees. The rotation is counter-clockwise about the axis as seen by + looking along the positive axis towards the origin, assuming that the + coordinate system is as follows: + + y^ + | + | + | + +-------> + / x + / + z/ + +'--xy-mirror' +'--yz-mirror' +'--xz-mirror' + Mirror the mesh about the specified plane. Mirroring involves reversing + the sign of all of the coordinates in a particular axis. For example, to + mirror a mesh about the xy plane, the signs of all of the z coordinates + in the mesh are reversed. + +'--scale=factor' + Scale the mesh by the given factor. This multiplies all of the + coordinates by the specified number. This option could be used to change + the "units" (there are no units explicitly specified in an STL file) of + the mesh. For example, to change a part from inches to millimeters, just + use the --scale=25.4 option. + +'--translate=x,y,z' + Translate the mesh to the position x,y,z. This moves the minimum x, y, + and z values of the mesh to the specified position. For example, given a + mesh that has the following initial minimum and maximum coordinate values: + Min X = 4.000000, Max X = 5.000000 + Min Y = 1.000000, Max Y = 3.000000 + Min Z = -7.000000, Max Z = -2.000000 + if the option --translate=1,2,3 is specified, the final values will be: + Min X = 1.000000, Max X = 2.000000 + Min Y = 2.000000, Max Y = 4.000000 + Min Z = 3.000000, Max Z = 8.000000 + The translate option is often used to translate a mesh with arbitrary + minimum and maximum coordinates to 0,0,0. Usually, translation is also + required when merging two files. + +'merge=name' + Merge the specified file with the input file. No translation is done, so + if, for example, a file was merged with itself, the resulting file would + end up with two meshes exactly the same, occupying exactly the same + space. So generally, translations need to be done to the files to be + merged so that when the two meshes are merged into one, the two resulting + parts are properly spaced. If you know the nature of the parts to be + merged, it is possible to "nest" one part inside the other. Note, + however, that no warnings will be given if one part intersects with the + other. + + It is possible to place one part against another, with no space in + between, but you will still end up with two separately defined parts. If + such a mesh was made on a rapid-prototyping machine, the result would + depend on the nature of the machine. Machines that use a photopolymer + would produce a single solid part because the two parts would be "bonded" + during the build process. Machines that use a cutting process would + yield two or more parts. + + A copy of a mesh can be made by using the --merge and --translate options + at the same time. For example, given a file called block.stl with the + following size: + Min X = 0.000000, Max X = 2.000000 + Min Y = 0.000000, Max Y = 2.000000 + Min Z = 0.000000, Max Z = 2.000000 + + to create a file called 2blocks.stl that contains two of the parts + separated by 1 unit in the x direction, the following command line would + be used: + admesh + --translate=3,0,0 --merge=block.stl --write-binary=2blocks.stl block.stl + + This would yield a binary STL file called 2blocks.stl with the following + size: + Min X = 0.000000, Max X = 5.000000 + Min Y = 0.000000, Max Y = 2.000000 + Min Z = 0.000000, Max Z = 2.000000 + + +Mesh Checking and Repairing Options +=================================== + +'-e', '--exact' + Check each facet of the mesh for its 3 neighbors. Since each facet is a + triangle, there should be exactly 3 neighboring facets for every facet in + the mesh. Since the mesh defines a solid, there should be no unconnected + edges in the mesh. When this option is specified, the 3 neighbors of + every facet are searched for and, if found, the neighbors are added to an + internal list that keeps track of the neighbors of each facet. A facet + is only considered a neighbor if two of its vertices EXACTLY match two of + the vertices of another facet. That means that there must be 0 + difference between the x, y, and z coordinates of the two vertices of the + first facet and the two vertices of the second facet. + + Degenerate facets (facets with two or more vertices equal to each other) + are removed during the exact check. No other changes are made to the + mesh. An exact check is always done before any of the other checking and + repairing options even if --exact isn't specified. There is one + exception to this rule; no exact check needs to be done before the + --normal-values option. + +'-n', '--nearby' +'-t', '--tolerance=tol' +'-i', '--iterations=i' +'-m', '--increment=inc' + Checks each unconnected facet of the mesh for facets that are almost + connected but not quite. Due to round-off errors and other factors, it + is common for a mesh to have facets with neighbors that are very close + but don't match exactly. Often, this difference is only in the 8th + decimal place of the vertices, but these facets will not show up as + neighbors during the exact check. This option finds these nearby + neighbors and it changes their vertices so that they match exactly. The + exact check is alway done before the nearby check, so only facets that + remain unconnected after the exact check are candidates for the nearby + check. + + The --tolerance=tol option is used to specify the distance that is + searched for the neighboring facet. By default, this value is set + automatically by ADMesh to be the length of the shortest edge of the + mesh. This value is used because it makes it unlikely for a facet that + shouldn't be a neighbor to be found and matched as a neighbor. If the + tolerance is too big, then some facets could end up connected that should + definitely not be connected. This could create a "mobius part" that is + not a valid solid. If this occurs, it can be seen by checking the value + of "Backwards edges" that is printed after processing. (The number of + backwards edges should be 0 for a valid solid.) + + The --iterations=i and --increment=inc options are used together to + gradually connect nearby facets using progressively larger tolerances. + This helps to prevent incorrect connects but can also allow larger + tolerances to be used. The --iterations option gives the number of times + that facets are checked for nearby facets, each time using a larger + tolerance. The --increment=inc option gives the amount that the + tolerance is increased after each iteration. The number specified by + 'inc' is added to the tolerance that was used in the previous iteration. + If all of the facets are connected, no further nearby checks will be + done. + +'-f', '--fill-holes' + + Fill holes in the mesh by adding facets. This is done after the exact + check and after nearby check (if any nearby check is done). If there are + still unconnected facets, then facets will be added to the mesh, + connecting the unconnected facets, until all of the holes have been + filled. This is guaranteed to completely completely fix all unconnected + facets. However, the resulting mesh may or may not be what the user + expects. + +'-d', '--normal-directions' + + Check and fix if necessary the directions of the facets. This only deals + with whether the vertices of all the facets are oriented clockwise or + counterclockwise, it doesn't check or modify the value of the normal + vector. Every facet should have its vertices defined in a + counterclockwise order when looked at from the outside of the part. This + option will orient all of the vertices so that they are all facing in the + same direction. However, it it possible that this option will make all + of the facets facet inwards instead of outwards. The algorithm tries to + get a clue of which direction is inside and outside by checking the value + of the normal vector so the chance is very good that the resulting mesh + will be correct. However, it doesn't explicitly check to find which + direction is inside and which is outside. In the future, I might write + code to explicitly check for the inside and the outside, but until then, + the current algorithm gets it right most of the time. + +'--reverse-all' + Reverses the directions of all of the facets and normals. If the + --normal-directions option ended up making all of the facets facet + inwards instead of outwards, then this option can be used to reverse all + of the facets. It is up to the user to determine if the facets are + facing inwards and if they need reversing. In future versions of ADMesh, + this process may be automated. This option also fixes and updates the + normal vector for each facet. + +'-v', '--normal-values' + Checks and fixes if necessary the normal vectors of every facet. The + normal vector will point outward for a counterclockwise facet. The + length of the normal vector will be 1. + +'-c', '--no-check' + Don't do any checks or modifications to the input file. By default, + ADMesh performs all processes (exact, nearby, remove_unconnected, + fill-holes, normal-directions, and normals-values) on the input file. If + the --no-check option is specified, no checks or modifications will be + made on the input file. This could be used, for example, to translate an + ASCII STL file to a binary STL file, with no modifications made. A + command line such as the following might be used: + admesh + --no-check --write-binary-stl=newblock.stl --translate=0,0,0 block.stl + This would open the file block.stl, would translate it to 0,0,0 no checks + would be performed and a binary STL file of the translated mesh would be + written to newblock.stl. + +'-b', '--write-binary-stl=name' +'-a,' '--write-ascii-stl=name' + Write a binary STL file with the name specified. The input file is not + modified by ADMesh so the only way to preserve any modifications that + have been made to the input file is to use one of the --write options. If + the user wants to modify (overwrite) the input file, then the input file + can also be specified for the --write option. For example, to convert an + input ASCII STL file called sphere.stl to a binary STL file, overwriting + the original file, and performing no checks, the following command line + would be used: + admesh --write-binary-stl=sphere.stl --no-check sphere.stl + +'--help' + Display the possible command line options with a short description, and + then exit. + +'--version' + + Show the version information for ADMesh, and then exit. + + +ADMesh Output +============= + +After ADMesh has processed a mesh, it prints out a page of information about +that mesh. The output looks like the following: + +================= Results produced by ADMesh version 0.95 ================= +Input file : sphere.stl +File type : Binary STL file +Header : Processed by ADMesh version 0.95 +============== Size ============== +Min X = -1.334557, Max X = 1.370952 +Min Y = -1.377953, Max Y = 1.377230 +Min Z = -1.373225, Max Z = 1.242838 +========= Facet Status ========== Original ============ Final ==== +Number of facets : 3656 3656 +Facets with 1 disconnected edge : 18 0 +Facets with 2 disconnected edges : 3 0 +Facets with 3 disconnected edges : 0 0 +Total disconnected facets : 21 0 +=== Processing Statistics === ===== Other Statistics ===== +Number of parts : 1 Volume : 10.889216 +Degenerate facets : 0 +Edges fixed : 24 +Facets removed : 0 +Facets added : 0 +Facets reversed : 0 +Backwards edges : 0 +Normals fixed : 0 + +Description of Output +==================== + +The following describes the output information line by line. + +Input file : sphere.stl + The name of the file that was read. + +File type : Binary STL file + The type of file. Currently, the only two possibilities are Binary STL + file and ASCII STL file. ADMesh automatically detect the type of input + file. + +Header : Processed by ADMesh version 0.95 + The first 80 characters of the STL file. The first 80 bytes of a binary + STL file or the first line of an ASCII STL file can contain some text. + Usually, the CAD system that has created that file, or the last program + to process that file puts its name in the header. ADMesh puts its own + string in the header when it saves the file. + +============== Size ============== +Min X = -1.334557, Max X = 1.370952 +Min Y = -1.377953, Max Y = 1.377230 +Min Z = -1.373225, Max Z = 1.242838 + This section gives the boundaries of the mesh. The mesh will fit just + inside a box of this size. + +========= Facet Status ========== Original ============ Final ==== +Number of facets : 3656 3656 +Facets with 1 disconnected edge : 18 0 +Facets with 2 disconnected edges : 3 0 +Facets with 3 disconnected edges : 0 0 +Total disconnected facets : 21 0 + Information about the quality of the mesh before, and after processing by + ADMesh. The number of facets gives an idea about the complexity and + accuracy of the mesh. Disconnected facets will fall into 3 categories. + Some facets will have only one disconnected edge, some will have 2 edges + disconnected, and some will have all 3 edges disconnected. Of course, + for a valid solid mesh, there should be 0 disconnected facets. + +=== Processing Statistics === +Number of parts : 1 + This is the total number of separate parts in the file. This can be a + very useful indication of whether your file is correct. Sometimes, the + user of the CAD system that creates the mesh just puts several pieces + together next to each other, and then outputs the mesh. This might not + cause any problems for a rapid prototyping system that uses a + photopolymer because all of the parts will be "glued" together anyway + during the build. However, a rapid prototyping machine that is based on + cutting will cut each one of the parts individually and the result will + be many parts that need to be glued together. The number of parts is + counted during --normal-directions, so if the --normal-directions check + is eliminated, then the number of parts will read 0. + +Degenerate facets : 0 + Number of degenerate facets in the input file. A degenerate facet is a + facet that has two or more vertices exactly the same. The resulting + facet is just a line (if two vertices are the same) or could even be a + point (if all 3 vertices are the same). These facets add no information + to the file and are removed by ADMesh during processing. + +Edges fixed : 24 + The total number of edges that were fixed by moving the vertices slightly + during the nearby check. This does not include facets that were added by + --fill-holes. + +Facets removed : 0 + The total number of facets removed. There are two cases where facets + might be removed. First, all degenerate facets in the input file are + removed. Second, if there are any completely unconnected facets (facets + with 3 disconnected edges) after the exact and nearby checks, then these + facets will be removed by --remove-unconnected. + +Facets added : 0 + Number of facets that have been added by ADMesh to the original mesh. + Facets are only added during --fill-holes. So this number represents the + number of facets that had to be added to fill all of the holes, if any, + in the original mesh. + +Facets reversed : 0 + The number of facets that were reversed during --normal-directions. This + only relates to the order of the vertices of the facet (CW or CCW), it + has nothing to do with the value of the normal vector. + +Backwards edges : 0 + The number of edges that are backwards. After ADMesh has finished all of + the checks and processing, it verifies the results. If the + normal-directions check has been done then the NUMBER OF BACKWARDS EDGES + SHOULD BE 0. If it is not, then a "mobius part" has been created which + is not a valid solid mesh. In this case the mesh can be processed again, + but a smaller tolerance on the nearby check should be used or no nearby + check should be done. + +Normals fixed : 0 + The number of normal vectors that have been fixed. During the + normal-values check, ADMesh calculates the value of every facet and + compares the result with the normal vector from the input file. If the + result is not within a fixed tolerance, then the normal is said to be + fixed. Actually, for consistency, every normal vector is rewritten with + the new calculated normal, even if the original normal was within + tolerance. However, the normals that were within tolerance are not + counted by normals fixed. diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/admesh.1 b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/admesh.1 new file mode 100644 index 00000000..9832d332 --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/admesh.1 @@ -0,0 +1,173 @@ +.TH ADMESH "1" 21/10/2013 "User Commands" +.SH NAME +ADMesh - a program for processing triangulated solid meshes +.SH SYNOPSIS +.B admesh +[\fIOPTION\fR]... \fIfile\fR +.SH DESCRIPTION +ADMesh is a program for processing triangulated solid meshes. Currently, ADMesh only reads the STL file format that is used for rapid prototyping applications, although it can write STL, VRML, OFF, and DXF files. + +By default, ADMesh performs all of the mesh checking and repairing options +on the input file. This means that is checks exact, nearby, +remove-unconnected, fill-holes, normal-directions, and normal-values. The +file type (ASCII or binary) is automatically detected. The input file is +not modified unless it is specified by the \fB--write\fP option. If the following +command line was input: + +.B admesh sphere.stl + +The file sphere.stl would be opened and read, it would be checked and fixed +if necessary, and the results of processing would be printed out. The +results would not be saved. + +The default value for tolerance is the length of the shortest edge of the +mesh. The default number of iterations is 2, and the default increment is +0.01% of the diameter of a sphere that encloses the entire mesh. + +If any of the options \fB--exact\fP, \fB--nearby\fP, \fB--remove-unconnected\fP, \fB--fill-holes\fP, +\fB--normal-directions\fP, \fB--reverse-all\fP, \fB--normal-values\fP, or \fB--no-check\fP are +given, then no other checks besides that one will be done unless they are +specified or unless they are required by ADMesh before the specified check +can be done. For example the following command line: + +.B admesh --remove-unconnected sphere.stl + +would first do an exact check because it is required, and then the +unconnected facets would be removed. The results would be printed and no +other checks would be done. +.SH OPTIONS +.TP +\fB\-\-x\-rotate\fR=\fIangle\fR +Rotate CCW about x\-axis by angle degrees +.TP +\fB\-\-y\-rotate\fR=\fIangle\fR +Rotate CCW about y\-axis by angle degrees +.TP +\fB\-\-z\-rotate\fR=\fIangle\fR +Rotate CCW about z\-axis by angle degrees +.TP +\fB\-\-xy\-mirror\fR +Mirror about the xy plane +.TP +\fB\-\-yz\-mirror\fR +Mirror about the yz plane +.TP +\fB\-\-xz\-mirror\fR +Mirror about the xz plane +.TP +\fB\-\-scale\fR=\fIfactor\fR +Scale the file by factor (multiply by factor) +.TP +\fB\-\-translate\fR=\fIx\fR,y,z +Translate the file to x, y, and z +.TP +\fB\-\-merge\fR=\fIname\fR +Merge file called name with input file +.TP +\fB\-e\fR, \fB\-\-exact\fR +Only check for perfectly matched edges +.TP +\fB\-n\fR, \fB\-\-nearby\fR +Find and connect nearby facets. Correct bad facets +.TP +\fB\-t\fR, \fB\-\-tolerance\fR=\fItol\fR +Initial tolerance to use for nearby check = tol +.TP +\fB\-i\fR, \fB\-\-iterations\fR=\fIi\fR +Number of iterations for nearby check = i +.TP +\fB\-m\fR, \fB\-\-increment\fR=\fIinc\fR +Amount to increment tolerance after iteration=inc +.HP +\fB\-u\fR, \fB\-\-remove\-unconnected\fR Remove facets that have 0 neighbors +.TP +\fB\-f\fR, \fB\-\-fill\-holes\fR +Add facets to fill holes +.TP +\fB\-d\fR, \fB\-\-normal\-directions\fR +Check and fix direction of normals(ie cw, ccw) +.TP +\fB\-\-reverse\-all\fR +Reverse the directions of all facets and normals +.TP +\fB\-v\fR, \fB\-\-normal\-values\fR +Check and fix normal values +.TP +\fB\-c\fR, \fB\-\-no\-check\fR +Don't do any check on input file +.TP +\fB\-b\fR, \fB\-\-write\-binary\-stl\fR=\fIname\fR +Output a binary STL file called name +.TP +\fB\-a\fR, \fB\-\-write\-ascii\-stl\fR=\fIname\fR +Output an ascii STL file called name +.TP +\fB\-\-write\-off\fR=\fIname\fR +Output a Geomview OFF format file called name +.TP +\fB\-\-write\-dxf\fR=\fIname\fR +Output a DXF format file called name +.TP +\fB\-\-write\-vrml\fR=\fIname\fR +Output a VRML format file called name +.TP +\fB\-\-help\fR +Display this help and exit +.TP +\fB\-\-version\fR +Output version information and exit +.PP +The functions are executed in the same order as the options shown here. +So check here to find what happens if, for example, \fB\-\-translate\fR and \fB\-\-merge\fR +options are specified together. The order of the options specified on the +command line is not important. +.SH EXAMPLES +To perform all checks except for nearby, the following command line would be +used: + +.B admesh --exact --remove-unconnected --fill-holes --normal-directions --normal-values sphere.stl + +Actually, since the \fBexact\fP check is required by ADMesh before +\fBremove-unconnected\fP, and \fBremove-unconnected\fP is required before \fB--fill-holes\fP, +the above command line could be shortened as follows with the same results: + +.B admesh --fill-holes --normal-directions --normal-values sphere.stl + +And again the same results could be achieved using the short options: + +.B admesh -fudev sphere.stl + +or + +.B admesh -fdv sphere.stl + +The following command lines do the same thing: + +.B admesh sphere.stl + +.B admesh -fundev sphere.stl + +.B admesh -f -u -n -d -e -v sphere.stl + +since the \fB-fundev\fP options are implied by default. To eliminate one of the +checks, just remove the letter of the check to eliminate from the "word" fundev. +.SH SEE ALSO +For more information about the options and output read +.B admesh-doc.txt +- it is usually located in /usr/share/doc/admesh-x.xx dir. +.SH COPYRIGHT +Copyright (C) 1995, 1996 Anthony D. Martin + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/block.stl b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/block.stl new file mode 100644 index 00000000..71b03a50 --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/block.stl @@ -0,0 +1,86 @@ +SOLID Untitled1 + FACET NORMAL 0.00000000E+00 0.00000000E+00 1.00000000E+00 + OUTER LOOP + VERTEX -1.96850394E+00 1.96850394E+00 1.96850394E+00 + VERTEX -1.96850394E+00 -1.96850394E+00 1.96850394E+00 + VERTEX 1.96850394E+00 -1.96850394E+00 1.96850394E+00 + ENDLOOP + ENDFACET + FACET NORMAL 0.00000000E+00 -0.00000000E+00 1.00000000E+00 + OUTER LOOP + VERTEX 1.96850394E+00 -1.96850394E+00 1.96850394E+00 + VERTEX 1.96850394E+00 1.96850394E+00 1.96850394E+00 + VERTEX -1.96850394E+00 1.96850394E+00 1.96850394E+00 + ENDLOOP + ENDFACET + FACET NORMAL 0.00000000E+00 -0.00000000E+00 -1.00000000E+00 + OUTER LOOP + VERTEX 1.96850394E+00 1.96850394E+00 -1.96850394E+00 + VERTEX 1.96850394E+00 -1.96850394E+00 -1.96850394E+00 + VERTEX -1.96850394E+00 -1.96850394E+00 -1.96850394E+00 + ENDLOOP + ENDFACET + FACET NORMAL 0.00000000E+00 0.00000000E+00 -1.00000000E+00 + OUTER LOOP + VERTEX -1.96850394E+00 -1.96850394E+00 -1.96850394E+00 + VERTEX -1.96850394E+00 1.96850394E+00 -1.96850394E+00 + VERTEX 1.96850394E+00 1.96850394E+00 -1.96850394E+00 + ENDLOOP + ENDFACET + FACET NORMAL -1.00000000E+00 0.00000000E+00 0.00000000E+00 + OUTER LOOP + VERTEX -1.96850394E+00 1.96850394E+00 -1.96850394E+00 + VERTEX -1.96850394E+00 -1.96850394E+00 -1.96850394E+00 + VERTEX -1.96850394E+00 -1.96850394E+00 1.96850394E+00 + ENDLOOP + ENDFACET + FACET NORMAL -1.00000000E+00 0.00000000E+00 0.00000000E+00 + OUTER LOOP + VERTEX -1.96850394E+00 -1.96850394E+00 1.96850394E+00 + VERTEX -1.96850394E+00 1.96850394E+00 1.96850394E+00 + VERTEX -1.96850394E+00 1.96850394E+00 -1.96850394E+00 + ENDLOOP + ENDFACET + FACET NORMAL 1.00000000E+00 0.00000000E+00 0.00000000E+00 + OUTER LOOP + VERTEX 1.96850394E+00 1.96850394E+00 1.96850394E+00 + VERTEX 1.96850394E+00 -1.96850394E+00 1.96850394E+00 + VERTEX 1.96850394E+00 -1.96850394E+00 -1.96850394E+00 + ENDLOOP + ENDFACET + FACET NORMAL 1.00000000E+00 0.00000000E+00 0.00000000E+00 + OUTER LOOP + VERTEX 1.96850394E+00 -1.96850394E+00 -1.96850394E+00 + VERTEX 1.96850394E+00 1.96850394E+00 -1.96850394E+00 + VERTEX 1.96850394E+00 1.96850394E+00 1.96850394E+00 + ENDLOOP + ENDFACET + FACET NORMAL 0.00000000E+00 -1.00000000E+00 0.00000000E+00 + OUTER LOOP + VERTEX -1.96850394E+00 -1.96850394E+00 1.96850394E+00 + VERTEX -1.96850394E+00 -1.96850394E+00 -1.96850394E+00 + VERTEX 1.96850394E+00 -1.96850394E+00 -1.96850394E+00 + ENDLOOP + ENDFACET + FACET NORMAL 0.00000000E+00 -1.00000000E+00 0.00000000E+00 + OUTER LOOP + VERTEX 1.96850394E+00 -1.96850394E+00 -1.96850394E+00 + VERTEX 1.96850394E+00 -1.96850394E+00 1.96850394E+00 + VERTEX -1.96850394E+00 -1.96850394E+00 1.96850394E+00 + ENDLOOP + ENDFACET + FACET NORMAL 0.00000000E+00 1.00000000E+00 0.00000000E+00 + OUTER LOOP + VERTEX -1.96850394E+00 1.96850394E+00 -1.96850394E+00 + VERTEX -1.96850394E+00 1.96850394E+00 1.96850394E+00 + VERTEX 1.96850394E+00 1.96850394E+00 1.96850394E+00 + ENDLOOP + ENDFACET + FACET NORMAL 0.00000000E+00 1.00000000E+00 0.00000000E+00 + OUTER LOOP + VERTEX 1.96850394E+00 1.96850394E+00 1.96850394E+00 + VERTEX 1.96850394E+00 1.96850394E+00 -1.96850394E+00 + VERTEX -1.96850394E+00 1.96850394E+00 -1.96850394E+00 + ENDLOOP + ENDFACET +ENDSOLID Untitled1 diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/compile b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/compile new file mode 100755 index 00000000..a85b723c --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/compile @@ -0,0 +1,347 @@ +#! /bin/sh +# Wrapper for compilers which do not understand '-c -o'. + +scriptversion=2012-10-14.11; # UTC + +# Copyright (C) 1999-2014 Free Software Foundation, Inc. +# Written by Tom Tromey . +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# This file is maintained in Automake, please report +# bugs to or send patches to +# . + +nl=' +' + +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent tools from complaining about whitespace usage. +IFS=" "" $nl" + +file_conv= + +# func_file_conv build_file lazy +# Convert a $build file to $host form and store it in $file +# Currently only supports Windows hosts. If the determined conversion +# type is listed in (the comma separated) LAZY, no conversion will +# take place. +func_file_conv () +{ + file=$1 + case $file in + / | /[!/]*) # absolute file, and not a UNC file + if test -z "$file_conv"; then + # lazily determine how to convert abs files + case `uname -s` in + MINGW*) + file_conv=mingw + ;; + CYGWIN*) + file_conv=cygwin + ;; + *) + file_conv=wine + ;; + esac + fi + case $file_conv/,$2, in + *,$file_conv,*) + ;; + mingw/*) + file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` + ;; + cygwin/*) + file=`cygpath -m "$file" || echo "$file"` + ;; + wine/*) + file=`winepath -w "$file" || echo "$file"` + ;; + esac + ;; + esac +} + +# func_cl_dashL linkdir +# Make cl look for libraries in LINKDIR +func_cl_dashL () +{ + func_file_conv "$1" + if test -z "$lib_path"; then + lib_path=$file + else + lib_path="$lib_path;$file" + fi + linker_opts="$linker_opts -LIBPATH:$file" +} + +# func_cl_dashl library +# Do a library search-path lookup for cl +func_cl_dashl () +{ + lib=$1 + found=no + save_IFS=$IFS + IFS=';' + for dir in $lib_path $LIB + do + IFS=$save_IFS + if $shared && test -f "$dir/$lib.dll.lib"; then + found=yes + lib=$dir/$lib.dll.lib + break + fi + if test -f "$dir/$lib.lib"; then + found=yes + lib=$dir/$lib.lib + break + fi + if test -f "$dir/lib$lib.a"; then + found=yes + lib=$dir/lib$lib.a + break + fi + done + IFS=$save_IFS + + if test "$found" != yes; then + lib=$lib.lib + fi +} + +# func_cl_wrapper cl arg... +# Adjust compile command to suit cl +func_cl_wrapper () +{ + # Assume a capable shell + lib_path= + shared=: + linker_opts= + for arg + do + if test -n "$eat"; then + eat= + else + case $1 in + -o) + # configure might choose to run compile as 'compile cc -o foo foo.c'. + eat=1 + case $2 in + *.o | *.[oO][bB][jJ]) + func_file_conv "$2" + set x "$@" -Fo"$file" + shift + ;; + *) + func_file_conv "$2" + set x "$@" -Fe"$file" + shift + ;; + esac + ;; + -I) + eat=1 + func_file_conv "$2" mingw + set x "$@" -I"$file" + shift + ;; + -I*) + func_file_conv "${1#-I}" mingw + set x "$@" -I"$file" + shift + ;; + -l) + eat=1 + func_cl_dashl "$2" + set x "$@" "$lib" + shift + ;; + -l*) + func_cl_dashl "${1#-l}" + set x "$@" "$lib" + shift + ;; + -L) + eat=1 + func_cl_dashL "$2" + ;; + -L*) + func_cl_dashL "${1#-L}" + ;; + -static) + shared=false + ;; + -Wl,*) + arg=${1#-Wl,} + save_ifs="$IFS"; IFS=',' + for flag in $arg; do + IFS="$save_ifs" + linker_opts="$linker_opts $flag" + done + IFS="$save_ifs" + ;; + -Xlinker) + eat=1 + linker_opts="$linker_opts $2" + ;; + -*) + set x "$@" "$1" + shift + ;; + *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) + func_file_conv "$1" + set x "$@" -Tp"$file" + shift + ;; + *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) + func_file_conv "$1" mingw + set x "$@" "$file" + shift + ;; + *) + set x "$@" "$1" + shift + ;; + esac + fi + shift + done + if test -n "$linker_opts"; then + linker_opts="-link$linker_opts" + fi + exec "$@" $linker_opts + exit 1 +} + +eat= + +case $1 in + '') + echo "$0: No command. Try '$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: compile [--help] [--version] PROGRAM [ARGS] + +Wrapper for compilers which do not understand '-c -o'. +Remove '-o dest.o' from ARGS, run PROGRAM with the remaining +arguments, and rename the output as expected. + +If you are trying to build a whole package this is not the +right script to run: please start by reading the file 'INSTALL'. + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "compile $scriptversion" + exit $? + ;; + cl | *[/\\]cl | cl.exe | *[/\\]cl.exe ) + func_cl_wrapper "$@" # Doesn't return... + ;; +esac + +ofile= +cfile= + +for arg +do + if test -n "$eat"; then + eat= + else + case $1 in + -o) + # configure might choose to run compile as 'compile cc -o foo foo.c'. + # So we strip '-o arg' only if arg is an object. + eat=1 + case $2 in + *.o | *.obj) + ofile=$2 + ;; + *) + set x "$@" -o "$2" + shift + ;; + esac + ;; + *.c) + cfile=$1 + set x "$@" "$1" + shift + ;; + *) + set x "$@" "$1" + shift + ;; + esac + fi + shift +done + +if test -z "$ofile" || test -z "$cfile"; then + # If no '-o' option was seen then we might have been invoked from a + # pattern rule where we don't need one. That is ok -- this is a + # normal compilation that the losing compiler can handle. If no + # '.c' file was seen then we are probably linking. That is also + # ok. + exec "$@" +fi + +# Name of file we expect compiler to create. +cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` + +# Create the lock directory. +# Note: use '[/\\:.-]' here to ensure that we don't use the same name +# that we are using for the .o file. Also, base the name on the expected +# object file name, since that is what matters with a parallel build. +lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d +while true; do + if mkdir "$lockdir" >/dev/null 2>&1; then + break + fi + sleep 1 +done +# FIXME: race condition here if user kills between mkdir and trap. +trap "rmdir '$lockdir'; exit 1" 1 2 15 + +# Run the compile. +"$@" +ret=$? + +if test -f "$cofile"; then + test "$cofile" = "$ofile" || mv "$cofile" "$ofile" +elif test -f "${cofile}bj"; then + test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" +fi + +rmdir "$lockdir" +exit $ret + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/config.guess b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/config.guess new file mode 100755 index 00000000..1f5c50c0 --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/config.guess @@ -0,0 +1,1420 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright 1992-2014 Free Software Foundation, Inc. + +timestamp='2014-03-23' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, see . +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that +# program. This Exception is an additional permission under section 7 +# of the GNU General Public License, version 3 ("GPLv3"). +# +# Originally written by Per Bothner. +# +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD +# +# Please send patches with a ChangeLog entry to config-patches@gnu.org. + + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright 1992-2014 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +trap 'exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac ; set_cc_for_build= ;' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +case "${UNAME_SYSTEM}" in +Linux|GNU|GNU/*) + # If the system lacks a compiler, then just pick glibc. + # We could probably try harder. + LIBC=gnu + + eval $set_cc_for_build + cat <<-EOF > $dummy.c + #include + #if defined(__UCLIBC__) + LIBC=uclibc + #elif defined(__dietlibc__) + LIBC=dietlibc + #else + LIBC=gnu + #endif + EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` + ;; +esac + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + sh5el) machine=sh5le-unknown ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE_ARCH}" in + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ELF__ + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "${UNAME_VERSION}" in + Debian*) + release='-gnu' + ;; + *) + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit ;; + *:Bitrig:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} + exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} + exit ;; + *:ekkoBSD:*:*) + echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + exit ;; + *:SolidBSD:*:*) + echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} + exit ;; + macppc:MirBSD:*:*) + echo powerpc-unknown-mirbsd${UNAME_RELEASE} + exit ;; + *:MirBSD:*:*) + echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + exit ;; + alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + ;; + *5.*) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE="alpha" ;; + "EV4.5 (21064)") + UNAME_MACHINE="alpha" ;; + "LCA4 (21066/21068)") + UNAME_MACHINE="alpha" ;; + "EV5 (21164)") + UNAME_MACHINE="alphaev5" ;; + "EV5.6 (21164A)") + UNAME_MACHINE="alphaev56" ;; + "EV5.6 (21164PC)") + UNAME_MACHINE="alphapca56" ;; + "EV5.7 (21164PC)") + UNAME_MACHINE="alphapca57" ;; + "EV6 (21264)") + UNAME_MACHINE="alphaev6" ;; + "EV6.7 (21264A)") + UNAME_MACHINE="alphaev67" ;; + "EV6.8CB (21264C)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8AL (21264B)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8CX (21264D)") + UNAME_MACHINE="alphaev68" ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE="alphaev69" ;; + "EV7 (21364)") + UNAME_MACHINE="alphaev7" ;; + "EV7.9 (21364A)") + UNAME_MACHINE="alphaev79" ;; + esac + # A Pn.n version is a patched version. + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Reset EXIT trap before exiting to avoid spurious non-zero exit code. + exitcode=$? + trap '' 0 + exit $exitcode ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit ;; + arm*:riscos:*:*|arm*:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7; exit ;; + esac ;; + s390x:SunOS:*:*) + echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) + echo i386-pc-auroraux${UNAME_RELEASE} + exit ;; + i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) + eval $set_cc_for_build + SUN_ARCH="i386" + # If there is a compiler, see if it is configured for 64-bit objects. + # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. + # This test works for both compilers. + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + SUN_ARCH="x86_64" + fi + fi + echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} + exit ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && + dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`$dummy $dummyarg` && + { echo "$SYSTEM_NAME"; exit; } + echo mips-mips-riscos${UNAME_RELEASE} + exit ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` + then + echo "$SYSTEM_NAME" + else + echo rs6000-ibm-aix3.2.5 + fi + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit ;; + *:AIX:*:[4567]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if [ ${HP_ARCH} = "hppa2.0w" ] + then + eval $set_cc_for_build + + # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating + # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler + # generating 64-bit code. GNU and HP use different nomenclature: + # + # $ CC_FOR_BUILD=cc ./config.guess + # => hppa2.0w-hp-hpux11.23 + # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess + # => hppa64-hp-hpux11.23 + + if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | + grep -q __LP64__ + then + HP_ARCH="hppa2.0w" + else + HP_ARCH="hppa64" + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + echo unknown-hitachi-hiuxwe2 + exit ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:FreeBSD:*:*) + UNAME_PROCESSOR=`/usr/bin/uname -p` + case ${UNAME_PROCESSOR} in + amd64) + echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + *) + echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + esac + exit ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit ;; + *:MINGW64*:*) + echo ${UNAME_MACHINE}-pc-mingw64 + exit ;; + *:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit ;; + *:MSYS*:*) + echo ${UNAME_MACHINE}-pc-msys + exit ;; + i*:windows32*:*) + # uname -m includes "-pc" on this system. + echo ${UNAME_MACHINE}-mingw32 + exit ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit ;; + *:Interix*:*) + case ${UNAME_MACHINE} in + x86) + echo i586-pc-interix${UNAME_RELEASE} + exit ;; + authenticamd | genuineintel | EM64T) + echo x86_64-unknown-interix${UNAME_RELEASE} + exit ;; + IA64) + echo ia64-unknown-interix${UNAME_RELEASE} + exit ;; + esac ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit ;; + 8664:Windows_NT:*) + echo x86_64-pc-mks + exit ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i586-pc-interix + exit ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-unknown-cygwin + exit ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + *:GNU:*:*) + # the GNU system + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} + exit ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit ;; + aarch64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + aarch64_be:Linux:*:*) + UNAME_MACHINE=aarch64_be + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep -q ld.so.1 + if test "$?" = 0 ; then LIBC="gnulibc1" ; fi + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + arc:Linux:*:* | arceb:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + arm*:Linux:*:*) + eval $set_cc_for_build + if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_EABI__ + then + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + else + if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_PCS_VFP + then + echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi + else + echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf + fi + fi + exit ;; + avr32*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + cris:Linux:*:*) + echo ${UNAME_MACHINE}-axis-linux-${LIBC} + exit ;; + crisv32:Linux:*:*) + echo ${UNAME_MACHINE}-axis-linux-${LIBC} + exit ;; + frv:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + hexagon:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + i*86:Linux:*:*) + echo ${UNAME_MACHINE}-pc-linux-${LIBC} + exit ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + m32r*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + mips:Linux:*:* | mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef ${UNAME_MACHINE} + #undef ${UNAME_MACHINE}el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=${UNAME_MACHINE}el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=${UNAME_MACHINE} + #else + CPU= + #endif + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } + ;; + openrisc*:Linux:*:*) + echo or1k-unknown-linux-${LIBC} + exit ;; + or32:Linux:*:* | or1k*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + padre:Linux:*:*) + echo sparc-unknown-linux-${LIBC} + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-${LIBC} + exit ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; + PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; + *) echo hppa-unknown-linux-${LIBC} ;; + esac + exit ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-${LIBC} + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-${LIBC} + exit ;; + ppc64le:Linux:*:*) + echo powerpc64le-unknown-linux-${LIBC} + exit ;; + ppcle:Linux:*:*) + echo powerpcle-unknown-linux-${LIBC} + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux-${LIBC} + exit ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + tile*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + vax:Linux:*:*) + echo ${UNAME_MACHINE}-dec-linux-${LIBC} + exit ;; + x86_64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + xtensa*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit ;; + i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable + exit ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit ;; + i*86:*:5:[678]*) + # UnixWare 7.x, OpenUNIX and OpenServer 6. + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i586. + # Note: whatever this is, it MUST be the same as what config.sub + # prints for the "djgpp" host, or else GDB configury will decide that + # this is a cross-build. + echo i586-pc-msdosdjgpp + exit ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit ;; + M68*:*:R3V[5678]*:*) + test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; + 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4; exit; } ;; + NCR*:*:4.2:* | MPRAS*:*:4.2:*) + OS_REL='.3' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit ;; + i*86:VOS:*:*) + # From Paul.Green@stratus.com. + echo ${UNAME_MACHINE}-stratus-vos + exit ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit ;; + BePC:Haiku:*:*) # Haiku running on Intel PC compatible. + echo i586-pc-haiku + exit ;; + x86_64:Haiku:*:*) + echo x86_64-unknown-haiku + exit ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit ;; + SX-7:SUPER-UX:*:*) + echo sx7-nec-superux${UNAME_RELEASE} + exit ;; + SX-8:SUPER-UX:*:*) + echo sx8-nec-superux${UNAME_RELEASE} + exit ;; + SX-8R:SUPER-UX:*:*) + echo sx8r-nec-superux${UNAME_RELEASE} + exit ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Darwin:*:*) + UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown + eval $set_cc_for_build + if test "$UNAME_PROCESSOR" = unknown ; then + UNAME_PROCESSOR=powerpc + fi + if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + case $UNAME_PROCESSOR in + i386) UNAME_PROCESSOR=x86_64 ;; + powerpc) UNAME_PROCESSOR=powerpc64 ;; + esac + fi + fi + elif test "$UNAME_PROCESSOR" = i386 ; then + # Avoid executing cc on OS X 10.9, as it ships with a stub + # that puts up a graphical alert prompting to install + # developer tools. Any system running Mac OS X 10.7 or + # later (Darwin 11 and later) is required to have a 64-bit + # processor. This is not true of the ARM version of Darwin + # that Apple uses in portable devices. + UNAME_PROCESSOR=x86_64 + fi + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = "x86"; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit ;; + NEO-?:NONSTOP_KERNEL:*:*) + echo neo-tandem-nsk${UNAME_RELEASE} + exit ;; + NSE-*:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit ;; + NSR-?:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux${UNAME_RELEASE} + exit ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit ;; + *:*VMS:*:*) + UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "${UNAME_MACHINE}" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; + V*) echo vax-dec-vms ; exit ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit ;; + i*86:skyos:*:*) + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' + exit ;; + i*86:rdos:*:*) + echo ${UNAME_MACHINE}-pc-rdos + exit ;; + i*86:AROS:*:*) + echo ${UNAME_MACHINE}-pc-aros + exit ;; + x86_64:VMkernel:*:*) + echo ${UNAME_MACHINE}-unknown-esx + exit ;; +esac + +cat >&2 < in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/config.h b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/config.h new file mode 100644 index 00000000..080c891f --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/config.h @@ -0,0 +1,65 @@ +/* config.h. Generated from config.h.in by configure. */ +/* config.h.in. Generated from configure.ac by autoheader. */ + +/* Define to 1 if you have the header file. */ +#define HAVE_DLFCN_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_INTTYPES_H 1 + +/* Define to 1 if you have the `m' library (-lm). */ +#define HAVE_LIBM 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_MEMORY_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDINT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDLIB_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STRINGS_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STRING_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_STAT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_TYPES_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_UNISTD_H 1 + +/* Define to the sub-directory where libtool stores uninstalled libraries. */ +#define LT_OBJDIR ".libs/" + +/* Name of package */ +#define PACKAGE "admesh" + +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "" + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "admesh" + +/* Define to the full name and version of this package. */ +#define PACKAGE_STRING "admesh 0.98.4" + +/* Define to the one symbol short name of this package. */ +#define PACKAGE_TARNAME "admesh" + +/* Define to the home page for this package. */ +#define PACKAGE_URL "" + +/* Define to the version of this package. */ +#define PACKAGE_VERSION "0.98.4" + +/* Define to 1 if you have the ANSI C header files. */ +#define STDC_HEADERS 1 + +/* Version number of package */ +#define VERSION "0.98.4" diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/config.h.in b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/config.h.in new file mode 100644 index 00000000..86961166 --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/config.h.in @@ -0,0 +1,64 @@ +/* config.h.in. Generated from configure.ac by autoheader. */ + +/* Define to 1 if you have the header file. */ +#undef HAVE_DLFCN_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_INTTYPES_H + +/* Define to 1 if you have the `m' library (-lm). */ +#undef HAVE_LIBM + +/* Define to 1 if you have the header file. */ +#undef HAVE_MEMORY_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_UNISTD_H + +/* Define to the sub-directory where libtool stores uninstalled libraries. */ +#undef LT_OBJDIR + +/* Name of package */ +#undef PACKAGE + +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the home page for this package. */ +#undef PACKAGE_URL + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Version number of package */ +#undef VERSION diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/config.log b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/config.log new file mode 100644 index 00000000..329cbe2d --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/config.log @@ -0,0 +1,699 @@ +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by admesh configure 0.98.4'', which was +generated by GNU Autoconf 2.69. Invocation command line was + + $ ./configure + +## --------- ## +## Platform. ## +## --------- ## + +hostname = tomator +uname -m = x86_64 +uname -r = 5.4.0-47-generic +uname -s = Linux +uname -v = #51-Ubuntu SMP Fri Sep 4 19:50:52 UTC 2020 + +/usr/bin/uname -p = x86_64 +/bin/uname -X = unknown + +/bin/arch = x86_64 +/usr/bin/arch -k = unknown +/usr/convex/getsysinfo = unknown +/usr/bin/hostinfo = unknown +/bin/machine = unknown +/usr/bin/oslevel = unknown +/bin/universe = unknown + +PATH: /usr/local/go/bin +PATH: /home/tomate/.local/bin +PATH: /usr/local/sbin +PATH: /usr/local/bin +PATH: /usr/sbin +PATH: /usr/bin +PATH: /sbin +PATH: /bin +PATH: /usr/games +PATH: /usr/local/games +PATH: /snap/bin +PATH: /home/tomate/go/bin + + +## ----------- ## +## Core tests. ## +## ----------- ## + +configure:2166: checking for a BSD-compatible install +configure:2234: result: /usr/bin/install -c +configure:2245: checking whether build environment is sane +configure:2300: result: yes +configure:2449: checking for a thread-safe mkdir -p +configure:2488: result: /usr/bin/mkdir -p +configure:2495: checking for gawk +configure:2525: result: no +configure:2495: checking for mawk +configure:2511: found /usr/bin/mawk +configure:2522: result: mawk +configure:2533: checking whether make sets $(MAKE) +configure:2555: result: yes +configure:2584: checking whether make supports nested variables +configure:2601: result: yes +configure:2738: checking whether make supports nested variables +configure:2755: result: yes +configure:2795: checking build system type +configure:2809: result: x86_64-unknown-linux-gnu +configure:2829: checking host system type +configure:2842: result: x86_64-unknown-linux-gnu +configure:2883: checking how to print strings +configure:2910: result: printf +configure:2935: checking whether make supports the include directive +configure:2950: make -f confmf.GNU && cat confinc.out +this is the am__doit target +configure:2953: $? = 0 +configure:2972: result: yes (GNU style) +configure:3042: checking for gcc +configure:3058: found /usr/bin/gcc +configure:3069: result: gcc +configure:3298: checking for C compiler version +configure:3307: gcc --version >&5 +gcc (Ubuntu 9.3.0-10ubuntu2) 9.3.0 +Copyright (C) 2019 Free Software Foundation, Inc. +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +configure:3318: $? = 0 +configure:3307: gcc -v >&5 +Using built-in specs. +COLLECT_GCC=gcc +COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/9/lto-wrapper +OFFLOAD_TARGET_NAMES=nvptx-none:hsa +OFFLOAD_TARGET_DEFAULT=1 +Target: x86_64-linux-gnu +Configured with: ../src/configure -v --with-pkgversion='Ubuntu 9.3.0-10ubuntu2' --with-bugurl=file:///usr/share/doc/gcc-9/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,gm2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-9 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none,hsa --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu +Thread model: posix +gcc version 9.3.0 (Ubuntu 9.3.0-10ubuntu2) +configure:3318: $? = 0 +configure:3307: gcc -V >&5 +gcc: error: unrecognized command line option '-V' +gcc: fatal error: no input files +compilation terminated. +configure:3318: $? = 1 +configure:3307: gcc -qversion >&5 +gcc: error: unrecognized command line option '-qversion'; did you mean '--version'? +gcc: fatal error: no input files +compilation terminated. +configure:3318: $? = 1 +configure:3338: checking whether the C compiler works +configure:3360: gcc conftest.c >&5 +configure:3364: $? = 0 +configure:3412: result: yes +configure:3415: checking for C compiler default output file name +configure:3417: result: a.out +configure:3423: checking for suffix of executables +configure:3430: gcc -o conftest conftest.c >&5 +configure:3434: $? = 0 +configure:3456: result: +configure:3478: checking whether we are cross compiling +configure:3486: gcc -o conftest conftest.c >&5 +configure:3490: $? = 0 +configure:3497: ./conftest +configure:3501: $? = 0 +configure:3489: result: no +configure:3494: checking for suffix of object files +configure:3516: gcc -c conftest.c >&5 +configure:3520: $? = 0 +configure:3541: result: o +configure:3545: checking whether we are using the GNU C compiler +configure:3564: gcc -c conftest.c >&5 +configure:3564: $? = 0 +configure:3573: result: yes +configure:3582: checking whether gcc accepts -g +configure:3602: gcc -c -g conftest.c >&5 +configure:3602: $? = 0 +configure:3643: result: yes +configure:3660: checking for gcc option to accept ISO C89 +configure:3723: gcc -c -g -O2 conftest.c >&5 +configure:3723: $? = 0 +configure:3736: result: none needed +configure:3761: checking whether gcc understands -c and -o together +configure:3783: gcc -c conftest.c -o conftest2.o +configure:3786: $? = 0 +configure:3783: gcc -c conftest.c -o conftest2.o +configure:3786: $? = 0 +configure:3798: result: yes +configure:3817: checking dependency style of gcc +configure:3928: result: gcc3 +configure:3943: checking for a sed that does not truncate output +configure:4007: result: /usr/bin/sed +configure:4025: checking for grep that handles long lines and -e +configure:4083: result: /usr/bin/grep +configure:4088: checking for egrep +configure:4150: result: /usr/bin/grep -E +configure:4155: checking for fgrep +configure:4217: result: /usr/bin/grep -F +configure:4252: checking for ld used by gcc +configure:4319: result: /usr/bin/ld +configure:4326: checking if the linker (/usr/bin/ld) is GNU ld +configure:4341: result: yes +configure:4353: checking for BSD- or MS-compatible name lister (nm) +configure:4407: result: /usr/bin/nm -B +configure:4537: checking the name lister (/usr/bin/nm -B) interface +configure:4544: gcc -c -g -O2 conftest.c >&5 +configure:4547: /usr/bin/nm -B "conftest.o" +configure:4550: output +0000000000000000 B some_variable +configure:4551: result: BSD nm +configure:4554: checking whether ln -s works +configure:4558: result: yes +configure:4566: checking the maximum length of command line arguments +configure:4697: result: 1572864 +configure:4745: checking how to convert x86_64-unknown-linux-gnu file names to x86_64-unknown-linux-gnu format +configure:4785: result: func_convert_file_noop +configure:4792: checking how to convert x86_64-unknown-linux-gnu file names to toolchain format +configure:4812: result: func_convert_file_noop +configure:4819: checking for /usr/bin/ld option to reload object files +configure:4826: result: -r +configure:4900: checking for objdump +configure:4916: found /usr/bin/objdump +configure:4927: result: objdump +configure:4959: checking how to recognize dependent libraries +configure:5159: result: pass_all +configure:5244: checking for dlltool +configure:5274: result: no +configure:5304: checking how to associate runtime and link libraries +configure:5331: result: printf %s\n +configure:5392: checking for ar +configure:5408: found /usr/bin/ar +configure:5419: result: ar +configure:5456: checking for archiver @FILE support +configure:5473: gcc -c -g -O2 conftest.c >&5 +configure:5473: $? = 0 +configure:5476: ar cru libconftest.a @conftest.lst >&5 +ar: `u' modifier ignored since `D' is the default (see `U') +configure:5479: $? = 0 +configure:5484: ar cru libconftest.a @conftest.lst >&5 +ar: `u' modifier ignored since `D' is the default (see `U') +ar: conftest.o: No such file or directory +configure:5487: $? = 1 +configure:5486: result: @ +configure:5544: checking for strip +configure:5560: found /usr/bin/strip +configure:5571: result: strip +configure:5643: checking for ranlib +configure:5659: found /usr/bin/ranlib +configure:5670: result: ranlib +configure:5772: checking command to parse /usr/bin/nm -B output from gcc object +configure:5925: gcc -c -g -O2 conftest.c >&5 +configure:5928: $? = 0 +configure:5932: /usr/bin/nm -B conftest.o \| sed -n -e 's/^.*[ ]\([ABCDGIRSTW][ABCDGIRSTW]*\)[ ][ ]*\([_A-Za-z][_A-Za-z0-9]*\)$/\1 \2 \2/p' | sed '/ __gnu_lto/d' \> conftest.nm +configure:5935: $? = 0 +configure:6001: gcc -o conftest -g -O2 conftest.c conftstm.o >&5 +configure:6004: $? = 0 +configure:6042: result: ok +configure:6089: checking for sysroot +configure:6119: result: no +configure:6126: checking for a working dd +configure:6164: result: /usr/bin/dd +configure:6168: checking how to truncate binary pipes +configure:6183: result: /usr/bin/dd bs=4096 count=1 +configure:6319: gcc -c -g -O2 conftest.c >&5 +configure:6322: $? = 0 +configure:6512: checking for mt +configure:6528: found /usr/bin/mt +configure:6539: result: mt +configure:6562: checking if mt is a manifest tool +configure:6568: mt '-?' +configure:6576: result: no +configure:7253: checking how to run the C preprocessor +configure:7284: gcc -E conftest.c +configure:7284: $? = 0 +configure:7298: gcc -E conftest.c +conftest.c:11:10: fatal error: ac_nonexistent.h: No such file or directory + 11 | #include + | ^~~~~~~~~~~~~~~~~~ +compilation terminated. +configure:7298: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "admesh" +| #define PACKAGE_TARNAME "admesh" +| #define PACKAGE_VERSION "0.98.4" +| #define PACKAGE_STRING "admesh 0.98.4" +| #define PACKAGE_BUGREPORT "" +| #define PACKAGE_URL "" +| #define PACKAGE "admesh" +| #define VERSION "0.98.4" +| /* end confdefs.h. */ +| #include +configure:7323: result: gcc -E +configure:7343: gcc -E conftest.c +configure:7343: $? = 0 +configure:7357: gcc -E conftest.c +conftest.c:11:10: fatal error: ac_nonexistent.h: No such file or directory + 11 | #include + | ^~~~~~~~~~~~~~~~~~ +compilation terminated. +configure:7357: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "admesh" +| #define PACKAGE_TARNAME "admesh" +| #define PACKAGE_VERSION "0.98.4" +| #define PACKAGE_STRING "admesh 0.98.4" +| #define PACKAGE_BUGREPORT "" +| #define PACKAGE_URL "" +| #define PACKAGE "admesh" +| #define VERSION "0.98.4" +| /* end confdefs.h. */ +| #include +configure:7386: checking for ANSI C header files +configure:7406: gcc -c -g -O2 conftest.c >&5 +configure:7406: $? = 0 +configure:7479: gcc -o conftest -g -O2 conftest.c >&5 +configure:7479: $? = 0 +configure:7479: ./conftest +configure:7479: $? = 0 +configure:7490: result: yes +configure:7503: checking for sys/types.h +configure:7503: gcc -c -g -O2 conftest.c >&5 +configure:7503: $? = 0 +configure:7503: result: yes +configure:7503: checking for sys/stat.h +configure:7503: gcc -c -g -O2 conftest.c >&5 +configure:7503: $? = 0 +configure:7503: result: yes +configure:7503: checking for stdlib.h +configure:7503: gcc -c -g -O2 conftest.c >&5 +configure:7503: $? = 0 +configure:7503: result: yes +configure:7503: checking for string.h +configure:7503: gcc -c -g -O2 conftest.c >&5 +configure:7503: $? = 0 +configure:7503: result: yes +configure:7503: checking for memory.h +configure:7503: gcc -c -g -O2 conftest.c >&5 +configure:7503: $? = 0 +configure:7503: result: yes +configure:7503: checking for strings.h +configure:7503: gcc -c -g -O2 conftest.c >&5 +configure:7503: $? = 0 +configure:7503: result: yes +configure:7503: checking for inttypes.h +configure:7503: gcc -c -g -O2 conftest.c >&5 +configure:7503: $? = 0 +configure:7503: result: yes +configure:7503: checking for stdint.h +configure:7503: gcc -c -g -O2 conftest.c >&5 +configure:7503: $? = 0 +configure:7503: result: yes +configure:7503: checking for unistd.h +configure:7503: gcc -c -g -O2 conftest.c >&5 +configure:7503: $? = 0 +configure:7503: result: yes +configure:7517: checking for dlfcn.h +configure:7517: gcc -c -g -O2 conftest.c >&5 +configure:7517: $? = 0 +configure:7517: result: yes +configure:7771: checking for objdir +configure:7786: result: .libs +configure:8050: checking if gcc supports -fno-rtti -fno-exceptions +configure:8068: gcc -c -g -O2 -fno-rtti -fno-exceptions conftest.c >&5 +cc1: warning: command line option '-fno-rtti' is valid for C++/D/ObjC++ but not for C +configure:8072: $? = 0 +configure:8085: result: no +configure:8443: checking for gcc option to produce PIC +configure:8450: result: -fPIC -DPIC +configure:8458: checking if gcc PIC flag -fPIC -DPIC works +configure:8476: gcc -c -g -O2 -fPIC -DPIC -DPIC conftest.c >&5 +configure:8480: $? = 0 +configure:8493: result: yes +configure:8522: checking if gcc static flag -static works +configure:8550: result: yes +configure:8565: checking if gcc supports -c -o file.o +configure:8586: gcc -c -g -O2 -o out/conftest2.o conftest.c >&5 +configure:8590: $? = 0 +configure:8612: result: yes +configure:8620: checking if gcc supports -c -o file.o +configure:8667: result: yes +configure:8700: checking whether the gcc linker (/usr/bin/ld -m elf_x86_64) supports shared libraries +configure:9959: result: yes +configure:9996: checking whether -lc should be explicitly linked in +configure:10004: gcc -c -g -O2 conftest.c >&5 +configure:10007: $? = 0 +configure:10022: gcc -shared -fPIC -DPIC conftest.o -v -Wl,-soname -Wl,conftest -o conftest 2\>\&1 \| /usr/bin/grep -lc \>/dev/null 2\>\&1 +configure:10025: $? = 0 +configure:10039: result: no +configure:10199: checking dynamic linker characteristics +configure:10780: gcc -o conftest -g -O2 -Wl,-rpath -Wl,/foo conftest.c >&5 +configure:10780: $? = 0 +configure:11020: result: GNU/Linux ld.so +configure:11142: checking how to hardcode library paths into programs +configure:11167: result: immediate +configure:11715: checking whether stripping libraries is possible +configure:11720: result: yes +configure:11755: checking if libtool supports shared libraries +configure:11757: result: yes +configure:11760: checking whether to build shared libraries +configure:11785: result: yes +configure:11788: checking whether to build static libraries +configure:11792: result: no +configure:8676: checking for gcc +configure:8703: result: gcc +configure:8932: checking for C compiler version +configure:8941: gcc --version >&5 +gcc (Ubuntu 9.3.0-10ubuntu2) 9.3.0 +Copyright (C) 2019 Free Software Foundation, Inc. +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +configure:8952: $? = 0 +configure:8941: gcc -v >&5 +Using built-in specs. +COLLECT_GCC=gcc +COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/9/lto-wrapper +OFFLOAD_TARGET_NAMES=nvptx-none:hsa +OFFLOAD_TARGET_DEFAULT=1 +Target: x86_64-linux-gnu +Configured with: ../src/configure -v --with-pkgversion='Ubuntu 9.3.0-10ubuntu2' --with-bugurl=file:///usr/share/doc/gcc-9/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,gm2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-9 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none,hsa --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu +Thread model: posix +gcc version 9.3.0 (Ubuntu 9.3.0-10ubuntu2) +configure:8952: $? = 0 +configure:8941: gcc -V >&5 +gcc: error: unrecognized command line option '-V' +gcc: fatal error: no input files +compilation terminated. +configure:8952: $? = 1 +configure:8941: gcc -qversion >&5 +gcc: error: unrecognized command line option '-qversion'; did you mean '--version'? +gcc: fatal error: no input files +compilation terminated. +configure:8952: $? = 1 +configure:8956: checking whether we are using the GNU C compiler +configure:8984: result: yes +configure:8993: checking whether gcc accepts -g +configure:9054: result: yes +configure:9071: checking for gcc option to accept ISO C89 +configure:9147: result: none needed +configure:9172: checking whether gcc understands -c and -o together +configure:9209: result: yes +configure:9228: checking dependency style of gcc +configure:9339: result: gcc3 +configure:9356: checking for a sed that does not truncate output +configure:9420: result: /usr/bin/sed +configure:9470: checking for main in -lm +configure:9489: gcc -o conftest -g -O2 -Wall -Wextra -pedantic -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 conftest.c -lm >&5 +configure:9489: $? = 0 +configure:9498: result: yes +configure:9616: checking that generated files are newer than configure +configure:9622: result: done +configure:9649: creating ./config.status + +## ---------------------- ## +## Running config.status. ## +## ---------------------- ## + +This file was extended by admesh config.status 0.98.4'', which was +generated by GNU Autoconf 2.69. Invocation command line was + + CONFIG_FILES = + CONFIG_HEADERS = + CONFIG_LINKS = + CONFIG_COMMANDS = + $ ./config.status + +on tomator + +config.status:1082: creating Makefile +config.status:1082: creating libadmesh.pc +config.status:1082: creating config.h +config.status:1311: executing depfiles commands +config.status:1388: cd . && sed -e '/# am--include-marker/d' Makefile | make -f - am--depfiles +config.status:1393: $? = 0 +config.status:1311: executing libtool commands +configure:11803: +============================================================================== +Build configuration: + werror: no +============================================================================== + + +## ---------------- ## +## Cache variables. ## +## ---------------- ## + +ac_cv_build=x86_64-unknown-linux-gnu +ac_cv_c_compiler_gnu=yes +ac_cv_env_CC_set= +ac_cv_env_CC_value= +ac_cv_env_CFLAGS_set= +ac_cv_env_CFLAGS_value= +ac_cv_env_CPPFLAGS_set= +ac_cv_env_CPPFLAGS_value= +ac_cv_env_CPP_set= +ac_cv_env_CPP_value= +ac_cv_env_LDFLAGS_set= +ac_cv_env_LDFLAGS_value= +ac_cv_env_LIBS_set= +ac_cv_env_LIBS_value= +ac_cv_env_LT_SYS_LIBRARY_PATH_set= +ac_cv_env_LT_SYS_LIBRARY_PATH_value= +ac_cv_env_build_alias_set= +ac_cv_env_build_alias_value= +ac_cv_env_host_alias_set= +ac_cv_env_host_alias_value= +ac_cv_env_target_alias_set= +ac_cv_env_target_alias_value= +ac_cv_header_dlfcn_h=yes +ac_cv_header_inttypes_h=yes +ac_cv_header_memory_h=yes +ac_cv_header_stdc=yes +ac_cv_header_stdint_h=yes +ac_cv_header_stdlib_h=yes +ac_cv_header_string_h=yes +ac_cv_header_strings_h=yes +ac_cv_header_sys_stat_h=yes +ac_cv_header_sys_types_h=yes +ac_cv_header_unistd_h=yes +ac_cv_host=x86_64-unknown-linux-gnu +ac_cv_lib_m_main=yes +ac_cv_objext=o +ac_cv_path_EGREP='/usr/bin/grep -E' +ac_cv_path_FGREP='/usr/bin/grep -F' +ac_cv_path_GREP=/usr/bin/grep +ac_cv_path_SED=/usr/bin/sed +ac_cv_path_install='/usr/bin/install -c' +ac_cv_path_lt_DD=/usr/bin/dd +ac_cv_path_mkdir=/usr/bin/mkdir +ac_cv_prog_AWK=mawk +ac_cv_prog_CPP='gcc -E' +ac_cv_prog_ac_ct_AR=ar +ac_cv_prog_ac_ct_CC=gcc +ac_cv_prog_ac_ct_MANIFEST_TOOL=mt +ac_cv_prog_ac_ct_OBJDUMP=objdump +ac_cv_prog_ac_ct_RANLIB=ranlib +ac_cv_prog_ac_ct_STRIP=strip +ac_cv_prog_cc_c89= +ac_cv_prog_cc_g=yes +ac_cv_prog_make_make_set=yes +am_cv_CC_dependencies_compiler_type=gcc3 +am_cv_make_support_nested_variables=yes +am_cv_prog_cc_c_o=yes +lt_cv_ar_at_file=@ +lt_cv_archive_cmds_need_lc=no +lt_cv_deplibs_check_method=pass_all +lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_ld_reload_flag=-r +lt_cv_nm_interface='BSD nm' +lt_cv_objdir=.libs +lt_cv_path_LD=/usr/bin/ld +lt_cv_path_NM='/usr/bin/nm -B' +lt_cv_path_mainfest_tool=no +lt_cv_prog_compiler_c_o=yes +lt_cv_prog_compiler_pic='-fPIC -DPIC' +lt_cv_prog_compiler_pic_works=yes +lt_cv_prog_compiler_rtti_exceptions=no +lt_cv_prog_compiler_static_works=yes +lt_cv_prog_gnu_ld=yes +lt_cv_sharedlib_from_linklib_cmd='printf %s\n' +lt_cv_shlibpath_overrides_runpath=yes +lt_cv_sys_global_symbol_pipe='sed -n -e '\''s/^.*[ ]\([ABCDGIRSTW][ABCDGIRSTW]*\)[ ][ ]*\([_A-Za-z][_A-Za-z0-9]*\)$/\1 \2 \2/p'\'' | sed '\''/ __gnu_lto/d'\''' +lt_cv_sys_global_symbol_to_c_name_address='sed -n -e '\''s/^: \(.*\) .*$/ {"\1", (void *) 0},/p'\'' -e '\''s/^[ABCDGIRSTW][ABCDGIRSTW]* .* \(.*\)$/ {"\1", (void *) \&\1},/p'\''' +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='sed -n -e '\''s/^: \(.*\) .*$/ {"\1", (void *) 0},/p'\'' -e '\''s/^[ABCDGIRSTW][ABCDGIRSTW]* .* \(lib.*\)$/ {"\1", (void *) \&\1},/p'\'' -e '\''s/^[ABCDGIRSTW][ABCDGIRSTW]* .* \(.*\)$/ {"lib\1", (void *) \&\1},/p'\''' +lt_cv_sys_global_symbol_to_cdecl='sed -n -e '\''s/^T .* \(.*\)$/extern int \1();/p'\'' -e '\''s/^[ABCDGIRSTW][ABCDGIRSTW]* .* \(.*\)$/extern char \1;/p'\''' +lt_cv_sys_global_symbol_to_import= +lt_cv_sys_max_cmd_len=1572864 +lt_cv_to_host_file_cmd=func_convert_file_noop +lt_cv_to_tool_file_cmd=func_convert_file_noop +lt_cv_truncate_bin='/usr/bin/dd bs=4096 count=1' + +## ----------------- ## +## Output variables. ## +## ----------------- ## + +ACLOCAL='${SHELL} /home/tomate/mightyscape/papercraft_unfold/admesh/admesh-0.98.4/missing aclocal-1.16' +AMDEPBACKSLASH='\' +AMDEP_FALSE='#' +AMDEP_TRUE='' +AMTAR='$${TAR-tar}' +AM_BACKSLASH='\' +AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +AM_DEFAULT_VERBOSITY='0' +AM_V='$(V)' +AR='ar' +AUTOCONF='${SHELL} /home/tomate/mightyscape/papercraft_unfold/admesh/admesh-0.98.4/missing autoconf' +AUTOHEADER='${SHELL} /home/tomate/mightyscape/papercraft_unfold/admesh/admesh-0.98.4/missing autoheader' +AUTOMAKE='${SHELL} /home/tomate/mightyscape/papercraft_unfold/admesh/admesh-0.98.4/missing automake-1.16' +AWK='mawk' +CC='gcc' +CCDEPMODE='depmode=gcc3' +CFLAGS='-g -O2 -Wall -Wextra -pedantic -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2' +CPP='gcc -E' +CPPFLAGS='' +CYGPATH_W='echo' +DEAD_STRIP='-Wl,--gc-sections -Wl,--as-needed' +DEFS='-DHAVE_CONFIG_H' +DEPDIR='.deps' +DLLTOOL='false' +DSYMUTIL='' +DUMPBIN='' +ECHO_C='' +ECHO_N='-n' +ECHO_T='' +EGREP='/usr/bin/grep -E' +EXEEXT='' +FGREP='/usr/bin/grep -F' +GREP='/usr/bin/grep' +INSTALL_DATA='${INSTALL} -m 644' +INSTALL_PROGRAM='${INSTALL}' +INSTALL_SCRIPT='${INSTALL}' +INSTALL_STRIP_PROGRAM='$(install_sh) -c -s' +LD='/usr/bin/ld -m elf_x86_64' +LDFLAGS='' +LIBOBJS='' +LIBS='-lm ' +LIBTOOL='$(SHELL) $(top_builddir)/libtool' +LIPO='' +LN_S='ln -s' +LTLIBOBJS='' +LT_SYS_LIBRARY_PATH='' +MAKEINFO='${SHELL} /home/tomate/mightyscape/papercraft_unfold/admesh/admesh-0.98.4/missing makeinfo' +MANIFEST_TOOL=':' +MKDIR_P='/usr/bin/mkdir -p' +NM='/usr/bin/nm -B' +NMEDIT='' +OBJDUMP='objdump' +OBJEXT='o' +OTOOL64='' +OTOOL='' +PACKAGE='admesh' +PACKAGE_BUGREPORT='' +PACKAGE_NAME='admesh' +PACKAGE_STRING='admesh 0.98.4' +PACKAGE_TARNAME='admesh' +PACKAGE_URL='' +PACKAGE_VERSION='0.98.4' +PATH_SEPARATOR=':' +RANLIB='ranlib' +SED='/usr/bin/sed' +SET_MAKE='' +SHELL='/bin/bash' +STRIP='strip' +VERSION='0.98.4' +ac_ct_AR='ar' +ac_ct_CC='gcc' +ac_ct_DUMPBIN='' +am__EXEEXT_FALSE='' +am__EXEEXT_TRUE='#' +am__fastdepCC_FALSE='#' +am__fastdepCC_TRUE='' +am__include='include' +am__isrc='' +am__leading_dot='.' +am__nodep='_no' +am__quote='' +am__tar='$${TAR-tar} chof - "$$tardir"' +am__untar='$${TAR-tar} xf -' +bindir='${exec_prefix}/bin' +build='x86_64-unknown-linux-gnu' +build_alias='' +build_cpu='x86_64' +build_os='linux-gnu' +build_vendor='unknown' +datadir='${datarootdir}' +datarootdir='${prefix}/share' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +dvidir='${docdir}' +exec_prefix='${prefix}' +host='x86_64-unknown-linux-gnu' +host_alias='' +host_cpu='x86_64' +host_os='linux-gnu' +host_vendor='unknown' +htmldir='${docdir}' +includedir='${prefix}/include' +infodir='${datarootdir}/info' +install_sh='${SHELL} /home/tomate/mightyscape/papercraft_unfold/admesh/admesh-0.98.4/install-sh' +libdir='${exec_prefix}/lib' +libexecdir='${exec_prefix}/libexec' +localedir='${datarootdir}/locale' +localstatedir='${prefix}/var' +mandir='${datarootdir}/man' +mkdir_p='$(MKDIR_P)' +oldincludedir='/usr/include' +pdfdir='${docdir}' +prefix='/usr/local' +program_transform_name='s,x,x,' +psdir='${docdir}' +sbindir='${exec_prefix}/sbin' +sharedstatedir='${prefix}/com' +sysconfdir='${prefix}/etc' +target_alias='' + +## ----------- ## +## confdefs.h. ## +## ----------- ## + +/* confdefs.h */ +#define PACKAGE_NAME "admesh" +#define PACKAGE_TARNAME "admesh" +#define PACKAGE_VERSION "0.98.4" +#define PACKAGE_STRING "admesh 0.98.4" +#define PACKAGE_BUGREPORT "" +#define PACKAGE_URL "" +#define PACKAGE "admesh" +#define VERSION "0.98.4" +#define STDC_HEADERS 1 +#define HAVE_SYS_TYPES_H 1 +#define HAVE_SYS_STAT_H 1 +#define HAVE_STDLIB_H 1 +#define HAVE_STRING_H 1 +#define HAVE_MEMORY_H 1 +#define HAVE_STRINGS_H 1 +#define HAVE_INTTYPES_H 1 +#define HAVE_STDINT_H 1 +#define HAVE_UNISTD_H 1 +#define HAVE_DLFCN_H 1 +#define LT_OBJDIR ".libs/" +#define HAVE_LIBM 1 + +configure: exit 0 + +## ---------------------- ## +## Running config.status. ## +## ---------------------- ## + +This file was extended by admesh config.status 0.98.4'', which was +generated by GNU Autoconf 2.69. Invocation command line was + + CONFIG_FILES = + CONFIG_HEADERS = + CONFIG_LINKS = + CONFIG_COMMANDS = + $ ./config.status libadmesh.pc + +on tomator + +config.status:1082: creating libadmesh.pc diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/config.status b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/config.status new file mode 100755 index 00000000..51e09b27 --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/config.status @@ -0,0 +1,1964 @@ +#! /bin/bash +# Generated by configure. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false + +SHELL=${CONFIG_SHELL-/bin/bash} +export SHELL +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by admesh $as_me 0.98.4'', which was +generated by GNU Autoconf 2.69. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +# Files that config.status was made for. +config_files=" Makefile libadmesh.pc" +config_headers=" config.h" +config_commands=" depfiles libtool" + +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration commands: +$config_commands + +Report bugs to the package provider." + +ac_cs_config="" +ac_cs_version="\ +admesh config.status 0.98.4'' +configured by ./configure, generated by GNU Autoconf 2.69, + with options \"$ac_cs_config\" + +Copyright (C) 2012 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='/home/tomate/mightyscape/papercraft_unfold/admesh/admesh-0.98.4' +srcdir='.' +INSTALL='/usr/bin/install -c' +MKDIR_P='/usr/bin/mkdir -p' +AWK='mawk' +test -n "$AWK" || AWK=awk +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=?*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_HEADERS " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + as_fn_error $? "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; + --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +if $ac_cs_recheck; then + set X /bin/bash './configure' $ac_configure_extra_args --no-create --no-recursion + shift + $as_echo "running CONFIG_SHELL=/bin/bash $*" >&6 + CONFIG_SHELL='/bin/bash' + export CONFIG_SHELL + exec "$@" +fi + +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + +# +# INIT-COMMANDS +# +AMDEP_TRUE="" MAKE="make" + + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' +double_quote_subst='s/\(["`\\]\)/\\\1/g' +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' +macro_version='2.4.6' +macro_revision='2.4.6' +enable_static='no' +pic_mode='yes' +enable_shared='yes' +enable_fast_install='needless' +shared_archive_member_spec='' +SHELL='/bin/bash' +ECHO='printf %s\n' +PATH_SEPARATOR=':' +host_alias='' +host='x86_64-unknown-linux-gnu' +host_os='linux-gnu' +build_alias='' +build='x86_64-unknown-linux-gnu' +build_os='linux-gnu' +SED='/usr/bin/sed' +Xsed='/usr/bin/sed -e 1s/^X//' +GREP='/usr/bin/grep' +EGREP='/usr/bin/grep -E' +FGREP='/usr/bin/grep -F' +LD='/usr/bin/ld -m elf_x86_64' +NM='/usr/bin/nm -B' +LN_S='ln -s' +max_cmd_len='1572864' +ac_objext='o' +exeext='' +lt_unset='unset' +lt_SP2NL='tr \040 \012' +lt_NL2SP='tr \015\012 \040\040' +lt_cv_to_host_file_cmd='func_convert_file_noop' +lt_cv_to_tool_file_cmd='func_convert_file_noop' +reload_flag=' -r' +reload_cmds='$LD$reload_flag -o $output$reload_objs' +OBJDUMP='objdump' +deplibs_check_method='pass_all' +file_magic_cmd='$MAGIC_CMD' +file_magic_glob='' +want_nocaseglob='no' +DLLTOOL='false' +sharedlib_from_linklib_cmd='printf %s\n' +AR='ar' +AR_FLAGS='cru' +archiver_list_spec='@' +STRIP='strip' +RANLIB='ranlib' +old_postinstall_cmds='chmod 644 $oldlib~$RANLIB $tool_oldlib' +old_postuninstall_cmds='' +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs~$RANLIB $tool_oldlib' +lock_old_archive_extraction='no' +CC='gcc' +CFLAGS='-g -O2 -Wall -Wextra -pedantic -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2' +compiler='gcc' +GCC='yes' +lt_cv_sys_global_symbol_pipe='sed -n -e '\''s/^.*[ ]\([ABCDGIRSTW][ABCDGIRSTW]*\)[ ][ ]*\([_A-Za-z][_A-Za-z0-9]*\)$/\1 \2 \2/p'\'' | sed '\''/ __gnu_lto/d'\''' +lt_cv_sys_global_symbol_to_cdecl='sed -n -e '\''s/^T .* \(.*\)$/extern int \1();/p'\'' -e '\''s/^[ABCDGIRSTW][ABCDGIRSTW]* .* \(.*\)$/extern char \1;/p'\''' +lt_cv_sys_global_symbol_to_import='' +lt_cv_sys_global_symbol_to_c_name_address='sed -n -e '\''s/^: \(.*\) .*$/ {"\1", (void *) 0},/p'\'' -e '\''s/^[ABCDGIRSTW][ABCDGIRSTW]* .* \(.*\)$/ {"\1", (void *) \&\1},/p'\''' +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='sed -n -e '\''s/^: \(.*\) .*$/ {"\1", (void *) 0},/p'\'' -e '\''s/^[ABCDGIRSTW][ABCDGIRSTW]* .* \(lib.*\)$/ {"\1", (void *) \&\1},/p'\'' -e '\''s/^[ABCDGIRSTW][ABCDGIRSTW]* .* \(.*\)$/ {"lib\1", (void *) \&\1},/p'\''' +lt_cv_nm_interface='BSD nm' +nm_file_list_spec='@' +lt_sysroot='' +lt_cv_truncate_bin='/usr/bin/dd bs=4096 count=1' +objdir='.libs' +MAGIC_CMD='file' +lt_prog_compiler_no_builtin_flag=' -fno-builtin' +lt_prog_compiler_pic=' -fPIC -DPIC' +lt_prog_compiler_wl='-Wl,' +lt_prog_compiler_static='-static' +lt_cv_prog_compiler_c_o='yes' +need_locks='no' +MANIFEST_TOOL=':' +DSYMUTIL='' +NMEDIT='' +LIPO='' +OTOOL='' +OTOOL64='' +libext='a' +shrext_cmds='.so' +extract_expsyms_cmds='' +archive_cmds_need_lc='no' +enable_shared_with_static_runtimes='no' +export_dynamic_flag_spec='$wl--export-dynamic' +whole_archive_flag_spec='$wl--whole-archive$convenience $wl--no-whole-archive' +compiler_needs_object='no' +old_archive_from_new_cmds='' +old_archive_from_expsyms_cmds='' +archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' +archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' +module_cmds='' +module_expsym_cmds='' +with_gnu_ld='yes' +allow_undefined_flag='' +no_undefined_flag='' +hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' +hardcode_libdir_separator='' +hardcode_direct='no' +hardcode_direct_absolute='no' +hardcode_minus_L='no' +hardcode_shlibpath_var='unsupported' +hardcode_automatic='no' +inherit_rpath='no' +link_all_deplibs='unknown' +always_export_symbols='no' +export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' +exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' +include_expsyms='' +prelink_cmds='' +postlink_cmds='' +file_list_spec='' +variables_saved_for_relink='PATH LD_LIBRARY_PATH LD_RUN_PATH GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH' +need_lib_prefix='no' +need_version='no' +version_type='linux' +runpath_var='LD_RUN_PATH' +shlibpath_var='LD_LIBRARY_PATH' +shlibpath_overrides_runpath='yes' +libname_spec='lib$name' +library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' +soname_spec='$libname$release$shared_ext$major' +install_override_mode='' +postinstall_cmds='' +postuninstall_cmds='' +finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' +finish_eval='' +hardcode_into_libs='yes' +sys_lib_search_path_spec='/usr/lib/gcc/x86_64-linux-gnu/9 /usr/lib/x86_64-linux-gnu /usr/lib /lib/x86_64-linux-gnu /lib ' +configure_time_dlsearch_path='/lib64 /usr/lib64 /lib /usr/lib /usr/lib/x86_64-linux-gnu/libfakeroot /usr/local/lib/i386-linux-gnu /lib/i386-linux-gnu /usr/lib/i386-linux-gnu /usr/local/lib/i686-linux-gnu /lib/i686-linux-gnu /usr/lib/i686-linux-gnu /usr/local/lib /usr/local/lib/x86_64-linux-gnu /lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu /lib32 /usr/lib32 ' +configure_time_lt_sys_library_path='' +hardcode_action='immediate' +enable_dlopen='unknown' +enable_dlopen_self='unknown' +enable_dlopen_self_static='unknown' +old_striplib='strip --strip-debug' +striplib='strip --strip-unneeded' + +LTCC='gcc' +LTCFLAGS='-g -O2' +compiler='gcc' + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' +} + +# Quote evaled strings. +for var in SHELL ECHO PATH_SEPARATOR SED GREP EGREP FGREP LD NM LN_S lt_SP2NL lt_NL2SP reload_flag OBJDUMP deplibs_check_method file_magic_cmd file_magic_glob want_nocaseglob DLLTOOL sharedlib_from_linklib_cmd AR AR_FLAGS archiver_list_spec STRIP RANLIB CC CFLAGS compiler lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl lt_cv_sys_global_symbol_to_import lt_cv_sys_global_symbol_to_c_name_address lt_cv_sys_global_symbol_to_c_name_address_lib_prefix lt_cv_nm_interface nm_file_list_spec lt_cv_truncate_bin lt_prog_compiler_no_builtin_flag lt_prog_compiler_pic lt_prog_compiler_wl lt_prog_compiler_static lt_cv_prog_compiler_c_o need_locks MANIFEST_TOOL DSYMUTIL NMEDIT LIPO OTOOL OTOOL64 shrext_cmds export_dynamic_flag_spec whole_archive_flag_spec compiler_needs_object with_gnu_ld allow_undefined_flag no_undefined_flag hardcode_libdir_flag_spec hardcode_libdir_separator exclude_expsyms include_expsyms file_list_spec variables_saved_for_relink libname_spec library_names_spec soname_spec install_override_mode finish_eval old_striplib striplib; do + case `eval \\$ECHO \\""\\$$var"\\"` in + *[\\\`\"\$]*) + eval "lt_$var=\\\"\`\$ECHO \"\$$var\" | \$SED \"\$sed_quote_subst\"\`\\\"" ## exclude from sc_prohibit_nested_quotes + ;; + *) + eval "lt_$var=\\\"\$$var\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in reload_cmds old_postinstall_cmds old_postuninstall_cmds old_archive_cmds extract_expsyms_cmds old_archive_from_new_cmds old_archive_from_expsyms_cmds archive_cmds archive_expsym_cmds module_cmds module_expsym_cmds export_symbols_cmds prelink_cmds postlink_cmds postinstall_cmds postuninstall_cmds finish_cmds sys_lib_search_path_spec configure_time_dlsearch_path configure_time_lt_sys_library_path; do + case `eval \\$ECHO \\""\\$$var"\\"` in + *[\\\`\"\$]*) + eval "lt_$var=\\\"\`\$ECHO \"\$$var\" | \$SED -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ## exclude from sc_prohibit_nested_quotes + ;; + *) + eval "lt_$var=\\\"\$$var\\\"" + ;; + esac +done + +ac_aux_dir='.' + +# See if we are running on zsh, and set the options that allow our +# commands through without removal of \ escapes INIT. +if test -n "${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST +fi + + + PACKAGE='admesh' + VERSION='0.98.4' + RM='rm -f' + ofile='libtool' + + + + + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "libadmesh.pc") CONFIG_FILES="$CONFIG_FILES libadmesh.pc" ;; + + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= ac_tmp= + trap 'exit_status=$? + : "${ac_tmp:=$tmp}" + { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 +ac_tmp=$tmp + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$ac_tmp/subs1.awk" && +cat >>"$ac_tmp/subs1.awk" <<\_ACAWK && +S["am__EXEEXT_FALSE"]="" +S["am__EXEEXT_TRUE"]="#" +S["LTLIBOBJS"]="" +S["LIBOBJS"]="" +S["DEAD_STRIP"]="-Wl,--gc-sections -Wl,--as-needed" +S["CPP"]="gcc -E" +S["LT_SYS_LIBRARY_PATH"]="" +S["OTOOL64"]="" +S["OTOOL"]="" +S["LIPO"]="" +S["NMEDIT"]="" +S["DSYMUTIL"]="" +S["MANIFEST_TOOL"]=":" +S["RANLIB"]="ranlib" +S["ac_ct_AR"]="ar" +S["AR"]="ar" +S["DLLTOOL"]="false" +S["OBJDUMP"]="objdump" +S["LN_S"]="ln -s" +S["NM"]="/usr/bin/nm -B" +S["ac_ct_DUMPBIN"]="" +S["DUMPBIN"]="" +S["LD"]="/usr/bin/ld -m elf_x86_64" +S["FGREP"]="/usr/bin/grep -F" +S["EGREP"]="/usr/bin/grep -E" +S["GREP"]="/usr/bin/grep" +S["SED"]="/usr/bin/sed" +S["am__fastdepCC_FALSE"]="#" +S["am__fastdepCC_TRUE"]="" +S["CCDEPMODE"]="depmode=gcc3" +S["am__nodep"]="_no" +S["AMDEPBACKSLASH"]="\\" +S["AMDEP_FALSE"]="#" +S["AMDEP_TRUE"]="" +S["am__include"]="include" +S["DEPDIR"]=".deps" +S["OBJEXT"]="o" +S["EXEEXT"]="" +S["ac_ct_CC"]="gcc" +S["CPPFLAGS"]="" +S["LDFLAGS"]="" +S["CFLAGS"]="-g -O2 -Wall -Wextra -pedantic -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2" +S["CC"]="gcc" +S["host_os"]="linux-gnu" +S["host_vendor"]="unknown" +S["host_cpu"]="x86_64" +S["host"]="x86_64-unknown-linux-gnu" +S["build_os"]="linux-gnu" +S["build_vendor"]="unknown" +S["build_cpu"]="x86_64" +S["build"]="x86_64-unknown-linux-gnu" +S["LIBTOOL"]="$(SHELL) $(top_builddir)/libtool" +S["AM_BACKSLASH"]="\\" +S["AM_DEFAULT_VERBOSITY"]="0" +S["AM_DEFAULT_V"]="$(AM_DEFAULT_VERBOSITY)" +S["AM_V"]="$(V)" +S["am__untar"]="$${TAR-tar} xf -" +S["am__tar"]="$${TAR-tar} chof - \"$$tardir\"" +S["AMTAR"]="$${TAR-tar}" +S["am__leading_dot"]="." +S["SET_MAKE"]="" +S["AWK"]="mawk" +S["mkdir_p"]="$(MKDIR_P)" +S["MKDIR_P"]="/usr/bin/mkdir -p" +S["INSTALL_STRIP_PROGRAM"]="$(install_sh) -c -s" +S["STRIP"]="strip" +S["install_sh"]="${SHELL} /home/tomate/mightyscape/papercraft_unfold/admesh/admesh-0.98.4/install-sh" +S["MAKEINFO"]="${SHELL} /home/tomate/mightyscape/papercraft_unfold/admesh/admesh-0.98.4/missing makeinfo" +S["AUTOHEADER"]="${SHELL} /home/tomate/mightyscape/papercraft_unfold/admesh/admesh-0.98.4/missing autoheader" +S["AUTOMAKE"]="${SHELL} /home/tomate/mightyscape/papercraft_unfold/admesh/admesh-0.98.4/missing automake-1.16" +S["AUTOCONF"]="${SHELL} /home/tomate/mightyscape/papercraft_unfold/admesh/admesh-0.98.4/missing autoconf" +S["ACLOCAL"]="${SHELL} /home/tomate/mightyscape/papercraft_unfold/admesh/admesh-0.98.4/missing aclocal-1.16" +S["VERSION"]="0.98.4" +S["PACKAGE"]="admesh" +S["CYGPATH_W"]="echo" +S["am__isrc"]="" +S["INSTALL_DATA"]="${INSTALL} -m 644" +S["INSTALL_SCRIPT"]="${INSTALL}" +S["INSTALL_PROGRAM"]="${INSTALL}" +S["target_alias"]="" +S["host_alias"]="" +S["build_alias"]="" +S["LIBS"]="-lm " +S["ECHO_T"]="" +S["ECHO_N"]="-n" +S["ECHO_C"]="" +S["DEFS"]="-DHAVE_CONFIG_H" +S["mandir"]="${datarootdir}/man" +S["localedir"]="${datarootdir}/locale" +S["libdir"]="${exec_prefix}/lib" +S["psdir"]="${docdir}" +S["pdfdir"]="${docdir}" +S["dvidir"]="${docdir}" +S["htmldir"]="${docdir}" +S["infodir"]="${datarootdir}/info" +S["docdir"]="${datarootdir}/doc/${PACKAGE_TARNAME}" +S["oldincludedir"]="/usr/include" +S["includedir"]="${prefix}/include" +S["localstatedir"]="${prefix}/var" +S["sharedstatedir"]="${prefix}/com" +S["sysconfdir"]="${prefix}/etc" +S["datadir"]="${datarootdir}" +S["datarootdir"]="${prefix}/share" +S["libexecdir"]="${exec_prefix}/libexec" +S["sbindir"]="${exec_prefix}/sbin" +S["bindir"]="${exec_prefix}/bin" +S["program_transform_name"]="s,x,x," +S["prefix"]="/usr/local" +S["exec_prefix"]="${prefix}" +S["PACKAGE_URL"]="" +S["PACKAGE_BUGREPORT"]="" +S["PACKAGE_STRING"]="admesh 0.98.4" +S["PACKAGE_VERSION"]="0.98.4" +S["PACKAGE_TARNAME"]="admesh" +S["PACKAGE_NAME"]="admesh" +S["PATH_SEPARATOR"]=":" +S["SHELL"]="/bin/bash" +S["am__quote"]="" +_ACAWK +cat >>"$ac_tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 +fi # test -n "$CONFIG_FILES" + +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$ac_tmp/defines.awk" <<\_ACAWK || +BEGIN { +D["PACKAGE_NAME"]=" \"admesh\"" +D["PACKAGE_TARNAME"]=" \"admesh\"" +D["PACKAGE_VERSION"]=" \"0.98.4\"" +D["PACKAGE_STRING"]=" \"admesh 0.98.4\"" +D["PACKAGE_BUGREPORT"]=" \"\"" +D["PACKAGE_URL"]=" \"\"" +D["PACKAGE"]=" \"admesh\"" +D["VERSION"]=" \"0.98.4\"" +D["STDC_HEADERS"]=" 1" +D["HAVE_SYS_TYPES_H"]=" 1" +D["HAVE_SYS_STAT_H"]=" 1" +D["HAVE_STDLIB_H"]=" 1" +D["HAVE_STRING_H"]=" 1" +D["HAVE_MEMORY_H"]=" 1" +D["HAVE_STRINGS_H"]=" 1" +D["HAVE_INTTYPES_H"]=" 1" +D["HAVE_STDINT_H"]=" 1" +D["HAVE_UNISTD_H"]=" 1" +D["HAVE_DLFCN_H"]=" 1" +D["LT_OBJDIR"]=" \".libs/\"" +D["HAVE_LIBM"]=" 1" + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+[_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ][_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789]*([\t (]|$)/ { + line = $ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK + as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$ac_tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$ac_tmp/stdin" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} + ac_datarootdir_hack=' + s&@datadir@&${datarootdir}&g + s&@docdir@&${datarootdir}/doc/${PACKAGE_TARNAME}&g + s&@infodir@&${datarootdir}/info&g + s&@localedir@&${datarootdir}/locale&g + s&@mandir@&${datarootdir}/man&g + s&\${datarootdir}&${prefix}/share&g' ;; +esac +ac_sed_extra="/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// +s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// +s/^[^=]*=[ ]*$// +} + +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ + >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ + "$ac_tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&2;} + + rm -f "$ac_tmp/stdin" + case $ac_file in + -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; + *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; + esac \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + ;; + :H) + # + # CONFIG_HEADER + # + if test x"$ac_file" != x-; then + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" + } >"$ac_tmp/config.h" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f "$ac_file" + mv "$ac_tmp/config.h" "$ac_file" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + fi + else + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error $? "could not create -" "$LINENO" 5 + fi +# Compute "$ac_file"'s index in $config_headers. +_am_arg="$ac_file" +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || +$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$_am_arg" : 'X\(//\)[^/]' \| \ + X"$_am_arg" : 'X\(//\)$' \| \ + X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$_am_arg" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'`/stamp-h$_am_stamp_count + ;; + + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { + # Older Autoconf quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + # TODO: see whether this extra hack can be removed once we start + # requiring Autoconf 2.70 or later. + case $CONFIG_FILES in #( + *\'*) : + eval set x "$CONFIG_FILES" ;; #( + *) : + set x $CONFIG_FILES ;; #( + *) : + ;; +esac + shift + # Used to flag and report bootstrapping failures. + am_rc=0 + for am_mf + do + # Strip MF so we end up with the name of the file. + am_mf=`$as_echo "$am_mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile which includes + # dependency-tracking related rules and includes. + # Grep'ing the whole file directly is not great: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ + || continue + am_dirpart=`$as_dirname -- "$am_mf" || +$as_expr X"$am_mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$am_mf" : 'X\(//\)[^/]' \| \ + X"$am_mf" : 'X\(//\)$' \| \ + X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$am_mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + am_filepart=`$as_basename -- "$am_mf" || +$as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \ + X"$am_mf" : 'X\(//\)$' \| \ + X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$am_mf" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + { echo "$as_me:$LINENO: cd "$am_dirpart" \ + && sed -e '/# am--include-marker/d' "$am_filepart" \ + | $MAKE -f - am--depfiles" >&5 + (cd "$am_dirpart" \ + && sed -e '/# am--include-marker/d' "$am_filepart" \ + | $MAKE -f - am--depfiles) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } || am_rc=$? + done + if test $am_rc -ne 0; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "Something went wrong bootstrapping makefile fragments + for automatic dependency tracking. Try re-running configure with the + '--disable-dependency-tracking' option to at least be able to build + the package (albeit without support for automatic dependency tracking). +See \`config.log' for more details" "$LINENO" 5; } + fi + { am_dirpart=; unset am_dirpart;} + { am_filepart=; unset am_filepart;} + { am_mf=; unset am_mf;} + { am_rc=; unset am_rc;} + rm -f conftest-deps.mk +} + ;; + "libtool":C) + + # See if we are running on zsh, and set the options that allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST + fi + + cfgfile=${ofile}T + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL +# Generated automatically by $as_me ($PACKAGE) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. + +# Provide generalized library-building support services. +# Written by Gordon Matzigkeit, 1996 + +# Copyright (C) 2014 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# GNU Libtool is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of of the License, or +# (at your option) any later version. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program or library that is built +# using GNU Libtool, you may include this file under the same +# distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + + +# The names of the tagged configurations supported by this script. +available_tags='' + +# Configured defaults for sys_lib_dlsearch_path munging. +: \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} + +# ### BEGIN LIBTOOL CONFIG + +# Which release of libtool.m4 was used? +macro_version=$macro_version +macro_revision=$macro_revision + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# What type of objects to build. +pic_mode=$pic_mode + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# Shared archive member basename,for filename based shared library versioning on AIX. +shared_archive_member_spec=$shared_archive_member_spec + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# An echo program that protects backslashes. +ECHO=$lt_ECHO + +# The PATH separator for the build system. +PATH_SEPARATOR=$lt_PATH_SEPARATOR + +# The host system. +host_alias=$host_alias +host=$host +host_os=$host_os + +# The build system. +build_alias=$build_alias +build=$build +build_os=$build_os + +# A sed program that does not truncate output. +SED=$lt_SED + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="\$SED -e 1s/^X//" + +# A grep program that handles long lines. +GREP=$lt_GREP + +# An ERE matcher. +EGREP=$lt_EGREP + +# A literal string matcher. +FGREP=$lt_FGREP + +# A BSD- or MS-compatible name lister. +NM=$lt_NM + +# Whether we need soft or hard links. +LN_S=$lt_LN_S + +# What is the maximum length of a command? +max_cmd_len=$max_cmd_len + +# Object file suffix (normally "o"). +objext=$ac_objext + +# Executable file suffix (normally ""). +exeext=$exeext + +# whether the shell understands "unset". +lt_unset=$lt_unset + +# turn spaces into newlines. +SP2NL=$lt_lt_SP2NL + +# turn newlines into spaces. +NL2SP=$lt_lt_NL2SP + +# convert \$build file names to \$host format. +to_host_file_cmd=$lt_cv_to_host_file_cmd + +# convert \$build files to toolchain format. +to_tool_file_cmd=$lt_cv_to_tool_file_cmd + +# An object symbol dumper. +OBJDUMP=$lt_OBJDUMP + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method = "file_magic". +file_magic_cmd=$lt_file_magic_cmd + +# How to find potential files when deplibs_check_method = "file_magic". +file_magic_glob=$lt_file_magic_glob + +# Find potential files using nocaseglob when deplibs_check_method = "file_magic". +want_nocaseglob=$lt_want_nocaseglob + +# DLL creation program. +DLLTOOL=$lt_DLLTOOL + +# Command to associate shared and link libraries. +sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd + +# The archiver. +AR=$lt_AR + +# Flags to create an archive. +AR_FLAGS=$lt_AR_FLAGS + +# How to feed a file listing to the archiver. +archiver_list_spec=$lt_archiver_list_spec + +# A symbol stripping program. +STRIP=$lt_STRIP + +# Commands used to install an old-style archive. +RANLIB=$lt_RANLIB +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Whether to use a lock for old archive extraction. +lock_old_archive_extraction=$lock_old_archive_extraction + +# A C compiler. +LTCC=$lt_CC + +# LTCC compiler flags. +LTCFLAGS=$lt_CFLAGS + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration. +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm into a list of symbols to manually relocate. +global_symbol_to_import=$lt_lt_cv_sys_global_symbol_to_import + +# Transform the output of nm in a C name address pair. +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# Transform the output of nm in a C name address pair when lib prefix is needed. +global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix + +# The name lister interface. +nm_interface=$lt_lt_cv_nm_interface + +# Specify filename containing input files for \$NM. +nm_file_list_spec=$lt_nm_file_list_spec + +# The root where to search for dependent libraries,and where our libraries should be installed. +lt_sysroot=$lt_sysroot + +# Command to truncate a binary pipe. +lt_truncate_bin=$lt_lt_cv_truncate_bin + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# Used to examine libraries when file_magic_cmd begins with "file". +MAGIC_CMD=$MAGIC_CMD + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# Manifest tool. +MANIFEST_TOOL=$lt_MANIFEST_TOOL + +# Tool to manipulate archived DWARF debug symbol files on Mac OS X. +DSYMUTIL=$lt_DSYMUTIL + +# Tool to change global to local symbols on Mac OS X. +NMEDIT=$lt_NMEDIT + +# Tool to manipulate fat objects and archives on Mac OS X. +LIPO=$lt_LIPO + +# ldd/readelf like tool for Mach-O binaries on Mac OS X. +OTOOL=$lt_OTOOL + +# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. +OTOOL64=$lt_OTOOL64 + +# Old archive suffix (normally "a"). +libext=$libext + +# Shared library suffix (normally ".so"). +shrext_cmds=$lt_shrext_cmds + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at link time. +variables_saved_for_relink=$lt_variables_saved_for_relink + +# Do we need the "lib" prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Library versioning type. +version_type=$version_type + +# Shared library runtime path variable. +runpath_var=$runpath_var + +# Shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Permission mode override for installation of shared libraries. +install_override_mode=$lt_install_override_mode + +# Command to use after installation of a shared archive. +postinstall_cmds=$lt_postinstall_cmds + +# Command to use after uninstallation of a shared archive. +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# As "finish_cmds", except a single script fragment to be evaled but +# not shown. +finish_eval=$lt_finish_eval + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Compile-time system search path for libraries. +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Detected run-time system search path for libraries. +sys_lib_dlsearch_path_spec=$lt_configure_time_dlsearch_path + +# Explicit LT_SYS_LIBRARY_PATH set during ./configure time. +configure_time_lt_sys_library_path=$lt_configure_time_lt_sys_library_path + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + + +# The linker used to build libraries. +LD=$lt_LD + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds + +# A language specific compiler. +CC=$lt_compiler + +# Is the compiler the GNU compiler? +with_gcc=$GCC + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds +archive_expsym_cmds=$lt_archive_expsym_cmds + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds +module_expsym_cmds=$lt_module_expsym_cmds + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator + +# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct + +# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \$shlibpath_var if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds + +# Commands necessary for finishing linking programs. +postlink_cmds=$lt_postlink_cmds + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action + +# ### END LIBTOOL CONFIG + +_LT_EOF + + cat <<'_LT_EOF' >> "$cfgfile" + +# ### BEGIN FUNCTIONS SHARED WITH CONFIGURE + +# func_munge_path_list VARIABLE PATH +# ----------------------------------- +# VARIABLE is name of variable containing _space_ separated list of +# directories to be munged by the contents of PATH, which is string +# having a format: +# "DIR[:DIR]:" +# string "DIR[ DIR]" will be prepended to VARIABLE +# ":DIR[:DIR]" +# string "DIR[ DIR]" will be appended to VARIABLE +# "DIRP[:DIRP]::[DIRA:]DIRA" +# string "DIRP[ DIRP]" will be prepended to VARIABLE and string +# "DIRA[ DIRA]" will be appended to VARIABLE +# "DIR[:DIR]" +# VARIABLE will be replaced by "DIR[ DIR]" +func_munge_path_list () +{ + case x$2 in + x) + ;; + *:) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" + ;; + x:*) + eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" + ;; + *::*) + eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" + eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" + ;; + *) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" + ;; + esac +} + + +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +func_cc_basename () +{ + for cc_temp in $*""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac + done + func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +} + + +# ### END FUNCTIONS SHARED WITH CONFIGURE + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test set != "${COLLECT_NAMES+set}"; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + +ltmain=$ac_aux_dir/ltmain.sh + + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '$q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" + + ;; + + esac +done # for ac_tag + + +as_fn_exit 0 diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/config.sub b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/config.sub new file mode 100755 index 00000000..66c50743 --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/config.sub @@ -0,0 +1,1798 @@ +#! /bin/sh +# Configuration validation subroutine script. +# Copyright 1992-2014 Free Software Foundation, Inc. + +timestamp='2014-07-28' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, see . +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that +# program. This Exception is an additional permission under section 7 +# of the GNU General Public License, version 3 ("GPLv3"). + + +# Please send patches with a ChangeLog entry to config-patches@gnu.org. +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS + $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.sub ($timestamp) + +Copyright 1992-2014 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo $1 + exit ;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ + linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ + knetbsd*-gnu* | netbsd*-gnu* | \ + kopensolaris*-gnu* | \ + storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + android-linux) + os=-linux-android + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple | -axis | -knuth | -cray | -microblaze*) + os= + basic_machine=$1 + ;; + -bluegene*) + os=-cnk + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco6) + os=-sco5v6 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*178) + os=-lynxos178 + ;; + -lynx*5) + os=-lynxos5 + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | aarch64 | aarch64_be \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | am33_2.0 \ + | arc | arceb \ + | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ + | avr | avr32 \ + | be32 | be64 \ + | bfin \ + | c4x | c8051 | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | epiphany \ + | fido | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | hexagon \ + | i370 | i860 | i960 | ia64 \ + | ip2k | iq2000 \ + | k1om \ + | le32 | le64 \ + | lm32 \ + | m32c | m32r | m32rle | m68000 | m68k | m88k \ + | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64octeon | mips64octeonel \ + | mips64orion | mips64orionel \ + | mips64r5900 | mips64r5900el \ + | mips64vr | mips64vrel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa32r6 | mipsisa32r6el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64r6 | mipsisa64r6el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipsr5900 | mipsr5900el \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | moxie \ + | mt \ + | msp430 \ + | nds32 | nds32le | nds32be \ + | nios | nios2 | nios2eb | nios2el \ + | ns16k | ns32k \ + | open8 | or1k | or1knd | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle \ + | pyramid \ + | rl78 | rx \ + | score \ + | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ + | spu \ + | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ + | ubicom32 \ + | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ + | we32k \ + | x86 | xc16x | xstormy16 | xtensa \ + | z8k | z80) + basic_machine=$basic_machine-unknown + ;; + c54x) + basic_machine=tic54x-unknown + ;; + c55x) + basic_machine=tic55x-unknown + ;; + c6x) + basic_machine=tic6x-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + ms1) + basic_machine=mt-unknown + ;; + + strongarm | thumb | xscale) + basic_machine=arm-unknown + ;; + xgate) + basic_machine=$basic_machine-unknown + os=-none + ;; + xscaleeb) + basic_machine=armeb-unknown + ;; + + xscaleel) + basic_machine=armel-unknown + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | aarch64-* | aarch64_be-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* | avr32-* \ + | be32-* | be64-* \ + | bfin-* | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* \ + | c8051-* | clipper-* | craynv-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | hexagon-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* | iq2000-* \ + | k1om-* \ + | le32-* | le64-* \ + | lm32-* \ + | m32c-* | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ + | microblaze-* | microblazeel-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64octeon-* | mips64octeonel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64r5900-* | mips64r5900el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mips64vr5900-* | mips64vr5900el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa32r6-* | mipsisa32r6el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64r6-* | mipsisa64r6el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipsr5900-* | mipsr5900el-* \ + | mipstx39-* | mipstx39el-* \ + | mmix-* \ + | mt-* \ + | msp430-* \ + | nds32-* | nds32le-* | nds32be-* \ + | nios-* | nios2-* | nios2eb-* | nios2el-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | open8-* \ + | or1k*-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ + | pyramid-* \ + | rl78-* | romp-* | rs6000-* | rx-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ + | sparclite-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ + | tahoe-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ + | tile*-* \ + | tron-* \ + | ubicom32-* \ + | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ + | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xc16x-* | xps100-* \ + | xstormy16-* | xtensa*-* \ + | ymp-* \ + | z8k-* | z80-*) + ;; + # Recognize the basic CPU types without company name, with glob match. + xtensa*) + basic_machine=$basic_machine-unknown + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + abacus) + basic_machine=abacus-unknown + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amd64) + basic_machine=x86_64-pc + ;; + amd64-*) + basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aros) + basic_machine=i386-pc + os=-aros + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + blackfin) + basic_machine=bfin-unknown + os=-linux + ;; + blackfin-*) + basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + bluegene*) + basic_machine=powerpc-ibm + os=-cnk + ;; + c54x-*) + basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c55x-*) + basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c6x-*) + basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + cegcc) + basic_machine=arm-unknown + os=-cegcc + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | j90) + basic_machine=j90-cray + os=-unicos + ;; + craynv) + basic_machine=craynv-cray + os=-unicosmp + ;; + cr16 | cr16-*) + basic_machine=cr16-unknown + os=-elf + ;; + crds | unos) + basic_machine=m68k-crds + ;; + crisv32 | crisv32-* | etraxfs*) + basic_machine=crisv32-axis + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + crx) + basic_machine=crx-unknown + os=-elf + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + dicos) + basic_machine=i686-pc + os=-dicos + ;; + djgpp) + basic_machine=i586-pc + os=-msdosdjgpp + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m68knommu) + basic_machine=m68k-unknown + os=-linux + ;; + m68knommu-*) + basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + microblaze*) + basic_machine=microblaze-xilinx + ;; + mingw64) + basic_machine=x86_64-pc + os=-mingw64 + ;; + mingw32) + basic_machine=i686-pc + os=-mingw32 + ;; + mingw32ce) + basic_machine=arm-unknown + os=-mingw32ce + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + moxiebox) + basic_machine=moxie-unknown + os=-moxiebox + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + ms1-*) + basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` + ;; + msys) + basic_machine=i686-pc + os=-msys + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + nacl) + basic_machine=le32-unknown + os=-nacl + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + neo-tandem) + basic_machine=neo-tandem + ;; + nse-tandem) + basic_machine=nse-tandem + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + openrisc | openrisc-*) + basic_machine=or32-unknown + ;; + os400) + basic_machine=powerpc-ibm + os=-os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + parisc) + basic_machine=hppa-unknown + os=-linux + ;; + parisc-*) + basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pc98) + basic_machine=i386-pc + ;; + pc98-*) + basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2 | pentiumiii | pentium3) + basic_machine=i686-pc + ;; + pentium4) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium4-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc | ppcbe) basic_machine=powerpc-unknown + ;; + ppc-* | ppcbe-*) + basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-* | ppc64p7-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little | ppc64-le | powerpc64-little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rdos | rdos64) + basic_machine=x86_64-pc + os=-rdos + ;; + rdos32) + basic_machine=i386-pc + os=-rdos + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sde) + basic_machine=mipsisa32-sde + os=-elf + ;; + sei) + basic_machine=mips-sei + os=-seiux + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sh5el) + basic_machine=sh5le-unknown + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparclite-wrs | simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + strongarm-* | thumb-*) + basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray + os=-unicos + ;; + tile*) + basic_machine=$basic_machine-unknown + os=-linux-gnu + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + tpf) + basic_machine=s390x-ibm + os=-tpf + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + xbox) + basic_machine=i686-pc + os=-mingw32 + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + xscale-* | xscalee[bl]-*) + basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + z80-*-coff) + basic_machine=z80-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + mmix) + basic_machine=mmix-knuth + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; + sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -auroraux) + os=-auroraux + ;; + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ + | -sym* | -kopensolaris* | -plan9* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* | -aros* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ + | -bitrig* | -openbsd* | -solidbsd* \ + | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ + | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* | -cegcc* \ + | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ + | -linux-newlib* | -linux-musl* | -linux-uclibc* \ + | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ + | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* | -tirtos*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto-qnx*) + ;; + -nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux-dietlibc) + os=-linux-dietlibc + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -os400*) + os=-os400 + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -syllable*) + os=-syllable + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -nova*) + os=-rtmk-nova + ;; + -ns2 ) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -tpf*) + os=-tpf + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -aros*) + os=-aros + ;; + -zvmoe) + os=-zvmoe + ;; + -dicos*) + os=-dicos + ;; + -nacl*) + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + score-*) + os=-elf + ;; + spu-*) + os=-elf + ;; + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + c4x-* | tic4x-*) + os=-coff + ;; + c8051-*) + os=-elf + ;; + hexagon-*) + os=-elf + ;; + tic54x-*) + os=-coff + ;; + tic55x-*) + os=-coff + ;; + tic6x-*) + os=-coff + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + ;; + m68*-cisco) + os=-aout + ;; + mep-*) + os=-elf + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-haiku) + os=-haiku + ;; + *-ibm) + os=-aix + ;; + *-knuth) + os=-mmixware + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -cnk*|-aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -os400*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -tpf*) + vendor=ibm + ;; + -vxsim* | -vxworks* | -windiss*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + -vos*) + vendor=stratus + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/configure b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/configure new file mode 100755 index 00000000..fdac694a --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/configure @@ -0,0 +1,15080 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.69 for admesh 0.98.4''. +# +# +# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. +# +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +# Use a proper internal environment variable to ensure we don't fall + # into an infinite loop, continuously re-executing ourselves. + if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then + _as_can_reexec=no; export _as_can_reexec; + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +as_fn_exit 255 + fi + # We don't want this to propagate to other subprocesses. + { _as_can_reexec=; unset _as_can_reexec;} +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1 +test -x / || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 + + test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( + ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO + ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO + PATH=/empty FPATH=/empty; export PATH FPATH + test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ + || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in #( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + export CONFIG_SHELL + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +exit 255 +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, +$0: including any error possibly output before this +$0: message. Then install a modern shell, or manually run +$0: the script under such a shell if you do have one." + fi + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + + + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + + # If we had to re-execute with $CONFIG_SHELL, we're ensured to have + # already done that, so ensure we don't try to do so again and fall + # in an infinite loop. This has already happened in practice. + _as_can_reexec=no; export _as_can_reexec + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + +SHELL=${CONFIG_SHELL-/bin/sh} + + +test -n "$DJDIR" || exec 7<&0 &1 + +# Name of the host. +# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIBOBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= + +# Identity of this package. +PACKAGE_NAME='admesh' +PACKAGE_TARNAME='admesh' +PACKAGE_VERSION='0.98.4''' +PACKAGE_STRING='admesh 0.98.4''' +PACKAGE_BUGREPORT='' +PACKAGE_URL='' + +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif +#ifdef STDC_HEADERS +# include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include +# endif +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_INTTYPES_H +# include +#endif +#ifdef HAVE_STDINT_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif" + +ac_subst_vars='am__EXEEXT_FALSE +am__EXEEXT_TRUE +LTLIBOBJS +LIBOBJS +DEAD_STRIP +CPP +LT_SYS_LIBRARY_PATH +OTOOL64 +OTOOL +LIPO +NMEDIT +DSYMUTIL +MANIFEST_TOOL +RANLIB +ac_ct_AR +AR +DLLTOOL +OBJDUMP +LN_S +NM +ac_ct_DUMPBIN +DUMPBIN +LD +FGREP +EGREP +GREP +SED +am__fastdepCC_FALSE +am__fastdepCC_TRUE +CCDEPMODE +am__nodep +AMDEPBACKSLASH +AMDEP_FALSE +AMDEP_TRUE +am__include +DEPDIR +OBJEXT +EXEEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +LIBTOOL +AM_BACKSLASH +AM_DEFAULT_VERBOSITY +AM_DEFAULT_V +AM_V +am__untar +am__tar +AMTAR +am__leading_dot +SET_MAKE +AWK +mkdir_p +MKDIR_P +INSTALL_STRIP_PROGRAM +STRIP +install_sh +MAKEINFO +AUTOHEADER +AUTOMAKE +AUTOCONF +ACLOCAL +VERSION +PACKAGE +CYGPATH_W +am__isrc +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL +am__quote' +ac_subst_files='' +ac_user_opts=' +enable_option_checking +enable_silent_rules +enable_static +with_pic +enable_shared +enable_fast_install +with_aix_soname +enable_dependency_tracking +with_gnu_ld +with_sysroot +enable_libtool_lock +enable_werror +' + ac_precious_vars='build_alias +host_alias +target_alias +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS +LT_SYS_LIBRARY_PATH +CPP' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *=) ac_optarg= ;; + *) ac_optarg=yes ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; + + -without-* | --without-*) + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) as_fn_error $? "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information" + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + as_fn_error $? "missing argument to $ac_option" +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir +do + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + as_fn_error $? "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error $? "pwd does not report name of working directory" + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures admesh 0.98.4'' to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking ...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/admesh] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF + +Program names: + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM run sed PROGRAM on installed program names + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of admesh 0.98.4'':";; + esac + cat <<\_ACEOF + +Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-silent-rules less verbose build output (undo: "make V=1") + --disable-silent-rules verbose build output (undo: "make V=0") + --enable-static[=PKGS] build static libraries [default=no] + --enable-shared[=PKGS] build shared libraries [default=yes] + --enable-fast-install[=PKGS] + optimize for fast installation [default=yes] + --enable-dependency-tracking + do not reject slow dependency extractors + --disable-dependency-tracking + speeds up one-time build + --disable-libtool-lock avoid locking (might break parallel builds) + --enable-werror Treat all warnings as errors, useful for development + [default=disabled] + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use + both] + --with-aix-soname=aix|svr4|both + shared library versioning (aka "SONAME") variant to + provide on AIX, [default=aix]. + --with-gnu-ld assume the C compiler uses GNU ld [default=no] + --with-sysroot[=DIR] Search for dependent libraries within DIR (or the + compiler's sysroot if not specified). + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if + you have headers in a nonstandard directory + LT_SYS_LIBRARY_PATH + User-defined run-time library search path. + CPP C preprocessor + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +Report bugs to the package provider. +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive + else + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } + done +fi + +test -n "$ac_init_help" && exit $ac_status +if $ac_init_version; then + cat <<\_ACEOF +admesh configure 0.98.4'' +generated by GNU Autoconf 2.69 + +Copyright (C) 2012 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +# ac_fn_c_try_compile LINENO +# -------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_compile + +# ac_fn_c_try_link LINENO +# ----------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + test -x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_link + +# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_compile + +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_run + +# ac_fn_c_check_func LINENO FUNC VAR +# ---------------------------------- +# Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_c_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case declares $2. + For example, HP-UX 11i declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_func +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by admesh $as_me 0.98.4'', which was +generated by GNU Autoconf 2.69. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" + done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; + 2) + as_fn_append ac_configure_args1 " '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + as_fn_append ac_configure_args " '$ac_arg'" + ;; + esac + done +done +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + $as_echo "## ---------------- ## +## Cache variables. ## +## ---------------- ##" + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + $as_echo "## ----------------- ## +## Output variables. ## +## ----------------- ##" + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + $as_echo "## ------------------- ## +## File substitutions. ## +## ------------------- ##" + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + $as_echo "## ----------- ## +## confdefs.h. ## +## ----------- ##" + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + # We do not want a PATH search for config.site. + case $CONFIG_SITE in #(( + -*) ac_site_file1=./$CONFIG_SITE;; + */*) ac_site_file1=$CONFIG_SITE;; + *) ac_site_file1=./$CONFIG_SITE;; + esac +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" \ + || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "failed to load site script $ac_site_file +See \`config.log' for more details" "$LINENO" 5; } + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +ac_config_headers="$ac_config_headers config.h" + +am__api_version='1.16' + +ac_aux_dir= +for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if ${ac_cv_path_install+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in #(( + ./ | .// | /[cC]/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac + + done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 +$as_echo_n "checking whether build environment is sane... " >&6; } +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[\\\"\#\$\&\'\`$am_lf]*) + as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; +esac +case $srcdir in + *[\\\"\#\$\&\'\`$am_lf\ \ ]*) + as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; +esac + +# Do 'set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + am_has_slept=no + for am_try in 1 2; do + echo "timestamp, slept: $am_has_slept" > conftest.file + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + as_fn_error $? "ls -t appears to fail. Make sure there is not a broken + alias in your environment" "$LINENO" 5 + fi + if test "$2" = conftest.file || test $am_try -eq 2; then + break + fi + # Just in case. + sleep 1 + am_has_slept=yes + done + test "$2" = conftest.file + ) +then + # Ok. + : +else + as_fn_error $? "newly created file is older than distributed files! +Check your system clock" "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +# If we didn't sleep, we still need to ensure time stamps of config.status and +# generated files are strictly newer. +am_sleep_pid= +if grep 'slept: no' conftest.file >/dev/null 2>&1; then + ( sleep 1 ) & + am_sleep_pid=$! +fi + +rm -f conftest.file + +test "$program_prefix" != NONE && + program_transform_name="s&^&$program_prefix&;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s&\$&$program_suffix&;$program_transform_name" +# Double any \ or $. +# By default was `s,x,x', remove it if useless. +ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' +program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` + +# Expand $ac_aux_dir to an absolute path. +am_aux_dir=`cd "$ac_aux_dir" && pwd` + +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --is-lightweight"; then + am_missing_run="$MISSING " +else + am_missing_run= + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} +fi + +if test x"${install_sh+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi + +# Installed binaries are usually stripped using 'strip' when the user +# run "make install-strip". However 'strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the 'STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } +if test -z "$MKDIR_P"; then + if ${ac_cv_path_mkdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in mkdir gmkdir; do + for ac_exec_ext in '' $ac_executable_extensions; do + as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ + 'mkdir (fileutils) '4.1*) + ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + break 3;; + esac + done + done + done +IFS=$as_save_IFS + +fi + + test -d ./--version && rmdir ./--version + if test "${ac_cv_path_mkdir+set}" = set; then + MKDIR_P="$ac_cv_path_mkdir -p" + else + # As a last resort, use the slow shell script. Don't cache a + # value for MKDIR_P within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + MKDIR_P="$ac_install_sh -d" + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 +$as_echo "$MKDIR_P" >&6; } + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AWK+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AWK="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat >conftest.make <<\_ACEOF +SHELL = /bin/sh +all: + @echo '@@@%%%=$(MAKE)=@@@%%%' +_ACEOF +# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac +rm -f conftest.make +fi +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + SET_MAKE= +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi + +rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null + +# Check whether --enable-silent-rules was given. +if test "${enable_silent_rules+set}" = set; then : + enableval=$enable_silent_rules; +fi + +case $enable_silent_rules in # ((( + yes) AM_DEFAULT_VERBOSITY=0;; + no) AM_DEFAULT_VERBOSITY=1;; + *) AM_DEFAULT_VERBOSITY=1;; +esac +am_make=${MAKE-make} +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 +$as_echo_n "checking whether $am_make supports nested variables... " >&6; } +if ${am_cv_make_support_nested_variables+:} false; then : + $as_echo_n "(cached) " >&6 +else + if $as_echo 'TRUE=$(BAR$(V)) +BAR0=false +BAR1=true +V=1 +am__doit: + @$(TRUE) +.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then + am_cv_make_support_nested_variables=yes +else + am_cv_make_support_nested_variables=no +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 +$as_echo "$am_cv_make_support_nested_variables" >&6; } +if test $am_cv_make_support_nested_variables = yes; then + AM_V='$(V)' + AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +else + AM_V=$AM_DEFAULT_VERBOSITY + AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY +fi +AM_BACKSLASH='\' + +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + am__isrc=' -I$(srcdir)' + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi + + +# Define the identity of the package. + PACKAGE='admesh' + VERSION='0.98.4''' + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE "$PACKAGE" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define VERSION "$VERSION" +_ACEOF + +# Some tools Automake needs. + +ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} + + +AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} + + +AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} + + +AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} + + +MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} + +# For better backward compatibility. To be removed once Automake 1.9.x +# dies out for good. For more background, see: +# +# +mkdir_p='$(MKDIR_P)' + +# We need awk for the "check" target (and possibly the TAP driver). The +# system "awk" is bad on some platforms. +# Always define AMTAR for backward compatibility. Yes, it's still used +# in the wild :-( We should find a proper way to deprecate it ... +AMTAR='$${TAR-tar}' + + +# We'll loop over all known methods to create a tar archive until one works. +_am_tools='gnutar pax cpio none' + +am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' + + + + + + +# POSIX will say in a future version that running "rm -f" with no argument +# is OK; and we want to be able to make that assumption in our Makefile +# recipes. So use an aggressive probe to check that the usage we want is +# actually supported "in the wild" to an acceptable degree. +# See automake bug#10828. +# To make any issue more visible, cause the running configure to be aborted +# by default if the 'rm' program in use doesn't match our expectations; the +# user can still override this though. +if rm -f && rm -fr && rm -rf; then : OK; else + cat >&2 <<'END' +Oops! + +Your 'rm' program seems unable to run without file operands specified +on the command line, even when the '-f' option is present. This is contrary +to the behaviour of most rm programs out there, and not conforming with +the upcoming POSIX standard: + +Please tell bug-automake@gnu.org about your system, including the value +of your $PATH and any error possibly output before this message. This +can help us improve future automake versions. + +END + if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then + echo 'Configuration will proceed anyway, since you have set the' >&2 + echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 + echo >&2 + else + cat >&2 <<'END' +Aborting the configuration process, to ensure you take notice of the issue. + +You can download and install GNU coreutils to get an 'rm' implementation +that behaves properly: . + +If you want to complete the configuration process using your problematic +'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM +to "yes", and re-run configure. + +END + as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 + fi +fi + +# Check whether --enable-silent-rules was given. +if test "${enable_silent_rules+set}" = set; then : + enableval=$enable_silent_rules; +fi + +case $enable_silent_rules in # ((( + yes) AM_DEFAULT_VERBOSITY=0;; + no) AM_DEFAULT_VERBOSITY=1;; + *) AM_DEFAULT_VERBOSITY=0;; +esac +am_make=${MAKE-make} +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 +$as_echo_n "checking whether $am_make supports nested variables... " >&6; } +if ${am_cv_make_support_nested_variables+:} false; then : + $as_echo_n "(cached) " >&6 +else + if $as_echo 'TRUE=$(BAR$(V)) +BAR0=false +BAR1=true +V=1 +am__doit: + @$(TRUE) +.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then + am_cv_make_support_nested_variables=yes +else + am_cv_make_support_nested_variables=no +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 +$as_echo "$am_cv_make_support_nested_variables" >&6; } +if test $am_cv_make_support_nested_variables = yes; then + AM_V='$(V)' + AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +else + AM_V=$AM_DEFAULT_VERBOSITY + AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY +fi +AM_BACKSLASH='\' + +case `pwd` in + *\ * | *\ *) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 +$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; +esac + + + +macro_version='2.4.6' +macro_revision='2.4.6' + + + + + + + + + + + + + +ltmain=$ac_aux_dir/ltmain.sh + +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if ${ac_cv_build+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if ${ac_cv_host+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + +# Backslashify metacharacters that are still active within +# double-quoted strings. +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 +$as_echo_n "checking how to print strings... " >&6; } +# Test print first, because it will be a builtin if present. +if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ + test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='print -r --' +elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='printf %s\n' +else + # Use this function as a fallback that always works. + func_fallback_echo () + { + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' + } + ECHO='func_fallback_echo' +fi + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "" +} + +case $ECHO in + printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 +$as_echo "printf" >&6; } ;; + print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 +$as_echo "print -r" >&6; } ;; + *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 +$as_echo "cat" >&6; } ;; +esac + + + + + + + + + + + + + + +DEPDIR="${am__leading_dot}deps" + +ac_config_commands="$ac_config_commands depfiles" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5 +$as_echo_n "checking whether ${MAKE-make} supports the include directive... " >&6; } +cat > confinc.mk << 'END' +am__doit: + @echo this is the am__doit target >confinc.out +.PHONY: am__doit +END +am__include="#" +am__quote= +# BSD make does it like this. +echo '.include "confinc.mk" # ignored' > confmf.BSD +# Other make implementations (GNU, Solaris 10, AIX) do it like this. +echo 'include confinc.mk # ignored' > confmf.GNU +_am_result=no +for s in GNU BSD; do + { echo "$as_me:$LINENO: ${MAKE-make} -f confmf.$s && cat confinc.out" >&5 + (${MAKE-make} -f confmf.$s && cat confinc.out) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + case $?:`cat confinc.out 2>/dev/null` in #( + '0:this is the am__doit target') : + case $s in #( + BSD) : + am__include='.include' am__quote='"' ;; #( + *) : + am__include='include' am__quote='' ;; +esac ;; #( + *) : + ;; +esac + if test "$am__include" != "#"; then + _am_result="yes ($s style)" + break + fi +done +rm -f confinc.* confmf.* +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5 +$as_echo "${_am_result}" >&6; } + +# Check whether --enable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then : + enableval=$enable_dependency_tracking; +fi + +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' + am__nodep='_no' +fi + if test "x$enable_dependency_tracking" != xno; then + AMDEP_TRUE= + AMDEP_FALSE='#' +else + AMDEP_TRUE='#' + AMDEP_FALSE= +fi + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else + ac_file='' +fi +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "C compiler cannot create executables +See \`config.log' for more details" "$LINENO" 5; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +ac_exeext=$ac_cv_exeext + +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details" "$LINENO" 5; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if ${ac_cv_objext+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of object files: cannot compile +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +struct stat; +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 +$as_echo_n "checking whether $CC understands -c and -o together... " >&6; } +if ${am_cv_prog_cc_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF + # Make sure it works both with $CC and with simple cc. + # Following AC_PROG_CC_C_O, we do the test twice because some + # compilers refuse to overwrite an existing .o file with -o, + # though they will create one. + am_cv_prog_cc_c_o=yes + for am_i in 1 2; do + if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 + ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } \ + && test -f conftest2.$ac_objext; then + : OK + else + am_cv_prog_cc_c_o=no + break + fi + done + rm -f core conftest* + unset am_i +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 +$as_echo "$am_cv_prog_cc_c_o" >&6; } +if test "$am_cv_prog_cc_c_o" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +depcc="$CC" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CC_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with '-c' and '-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok '-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if ${ac_cv_path_SED+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_SED" || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 + fi +else + ac_cv_path_SED=$SED +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed + +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if ${ac_cv_path_GREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_GREP" || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if ${ac_cv_path_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_EGREP" || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 +$as_echo_n "checking for fgrep... " >&6; } +if ${ac_cv_path_FGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 + then ac_cv_path_FGREP="$GREP -F" + else + if test -z "$FGREP"; then + ac_path_FGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in fgrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_FGREP" || continue +# Check for GNU ac_path_FGREP and select it if it is found. + # Check for GNU $ac_path_FGREP +case `"$ac_path_FGREP" --version 2>&1` in +*GNU*) + ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'FGREP' >> "conftest.nl" + "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_FGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_FGREP="$ac_path_FGREP" + ac_path_FGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_FGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_FGREP"; then + as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_FGREP=$FGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 +$as_echo "$ac_cv_path_FGREP" >&6; } + FGREP="$ac_cv_path_FGREP" + + +test -z "$GREP" && GREP=grep + + + + + + + + + + + + + + + + + + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test yes = "$GCC"; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return, which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD=$ac_prog + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test yes = "$with_gnu_ld"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if ${lt_cv_path_LD+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD=$ac_dir/$ac_prog + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if ${lt_cv_prog_gnu_ld+:} false; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 +$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } +if ${lt_cv_path_NM+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM=$NM +else + lt_nm_to_check=${ac_tool_prefix}nm + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + tmp_nm=$ac_dir/$lt_tmp_nm + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the 'sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty + case $build_os in + mingw*) lt_bad_file=conftest.nm/nofile ;; + *) lt_bad_file=/dev/null ;; + esac + case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in + *$lt_bad_file* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break 2 + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break 2 + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS=$lt_save_ifs + done + : ${lt_cv_path_NM=no} +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 +$as_echo "$lt_cv_path_NM" >&6; } +if test no != "$lt_cv_path_NM"; then + NM=$lt_cv_path_NM +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$DUMPBIN"; then : + # Let the user override the test. + else + if test -n "$ac_tool_prefix"; then + for ac_prog in dumpbin "link -dump" + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DUMPBIN+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DUMPBIN"; then + ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DUMPBIN=$ac_cv_prog_DUMPBIN +if test -n "$DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 +$as_echo "$DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$DUMPBIN" && break + done +fi +if test -z "$DUMPBIN"; then + ac_ct_DUMPBIN=$DUMPBIN + for ac_prog in dumpbin "link -dump" +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DUMPBIN"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN +if test -n "$ac_ct_DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 +$as_echo "$ac_ct_DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_DUMPBIN" && break +done + + if test "x$ac_ct_DUMPBIN" = x; then + DUMPBIN=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DUMPBIN=$ac_ct_DUMPBIN + fi +fi + + case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in + *COFF*) + DUMPBIN="$DUMPBIN -symbols -headers" + ;; + *) + DUMPBIN=: + ;; + esac + fi + + if test : != "$DUMPBIN"; then + NM=$DUMPBIN + fi +fi +test -z "$NM" && NM=nm + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 +$as_echo_n "checking the name lister ($NM) interface... " >&6; } +if ${lt_cv_nm_interface+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&5 + (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&5 + (eval echo "\"\$as_me:$LINENO: output\"" >&5) + cat conftest.out >&5 + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 +$as_echo "$lt_cv_nm_interface" >&6; } + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +$as_echo_n "checking whether ln -s works... " >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +$as_echo "no, using $LN_S" >&6; } +fi + +# find the maximum length of command line arguments +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 +$as_echo_n "checking the maximum length of command line arguments... " >&6; } +if ${lt_cv_sys_max_cmd_len+:} false; then : + $as_echo_n "(cached) " >&6 +else + i=0 + teststring=ABCD + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + mint*) + # On MiNT this can take a long time and run out of memory. + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + os2*) + # The test takes a long time on OS/2. + lt_cv_sys_max_cmd_len=8192 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len" && \ + test undefined != "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test X`env echo "$teststring$teststring" 2>/dev/null` \ + = "X$teststring$teststring"; } >/dev/null 2>&1 && + test 17 != "$i" # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac + +fi + +if test -n "$lt_cv_sys_max_cmd_len"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 +$as_echo "$lt_cv_sys_max_cmd_len" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 +$as_echo "none" >&6; } +fi +max_cmd_len=$lt_cv_sys_max_cmd_len + + + + + + +: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} + +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi + + + + + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 +$as_echo_n "checking how to convert $build file names to $host format... " >&6; } +if ${lt_cv_to_host_file_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 + ;; + esac + ;; + *-*-cygwin* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin + ;; + esac + ;; + * ) # unhandled hosts (and "normal" native builds) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; +esac + +fi + +to_host_file_cmd=$lt_cv_to_host_file_cmd +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 +$as_echo "$lt_cv_to_host_file_cmd" >&6; } + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 +$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } +if ${lt_cv_to_tool_file_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + #assume ordinary cross tools, or native build. +lt_cv_to_tool_file_cmd=func_convert_file_noop +case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 + ;; + esac + ;; +esac + +fi + +to_tool_file_cmd=$lt_cv_to_tool_file_cmd +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 +$as_echo "$lt_cv_to_tool_file_cmd" >&6; } + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 +$as_echo_n "checking for $LD option to reload object files... " >&6; } +if ${lt_cv_ld_reload_flag+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_reload_flag='-r' +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 +$as_echo "$lt_cv_ld_reload_flag" >&6; } +reload_flag=$lt_cv_ld_reload_flag +case $reload_flag in +"" | " "*) ;; +*) reload_flag=" $reload_flag" ;; +esac +reload_cmds='$LD$reload_flag -o $output$reload_objs' +case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + if test yes != "$GCC"; then + reload_cmds=false + fi + ;; + darwin*) + if test yes = "$GCC"; then + reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs' + else + reload_cmds='$LD$reload_flag -o $output$reload_objs' + fi + ;; +esac + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. +set dummy ${ac_tool_prefix}objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OBJDUMP="objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +$as_echo "$ac_ct_OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJDUMP=$ac_ct_OBJDUMP + fi +else + OBJDUMP="$ac_cv_prog_OBJDUMP" +fi + +test -z "$OBJDUMP" && OBJDUMP=objdump + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 +$as_echo_n "checking how to recognize dependent libraries... " >&6; } +if ${lt_cv_deplibs_check_method+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# 'unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# that responds to the $file_magic_cmd with a given extended regex. +# If you have 'file' or equivalent on your system and you're not sure +# whether 'pass_all' will *always* work, you probably want this one. + +case $host_os in +aix[4-9]*) + lt_cv_deplibs_check_method=pass_all + ;; + +beos*) + lt_cv_deplibs_check_method=pass_all + ;; + +bsdi[45]*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; + +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; + +mingw* | pw32*) + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump', + # unless we find 'file', for example because we are cross-compiling. + if ( file / ) >/dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + # Keep this pattern in sync with the one in func_win32_libid. + lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc*) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +haiku*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[3-9]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd* | bitrig*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +os2*) + lt_cv_deplibs_check_method=pass_all + ;; +esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 +$as_echo "$lt_cv_deplibs_check_method" >&6; } + +file_magic_glob= +want_nocaseglob=no +if test "$build" = "$host"; then + case $host_os in + mingw* | pw32*) + if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then + want_nocaseglob=yes + else + file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` + fi + ;; + esac +fi + +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + + + + + + + + + + + + + + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. +set dummy ${ac_tool_prefix}dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DLLTOOL"; then + ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DLLTOOL=$ac_cv_prog_DLLTOOL +if test -n "$DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 +$as_echo "$DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DLLTOOL"; then + ac_ct_DLLTOOL=$DLLTOOL + # Extract the first word of "dlltool", so it can be a program name with args. +set dummy dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DLLTOOL"; then + ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DLLTOOL="dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL +if test -n "$ac_ct_DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 +$as_echo "$ac_ct_DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DLLTOOL" = x; then + DLLTOOL="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DLLTOOL=$ac_ct_DLLTOOL + fi +else + DLLTOOL="$ac_cv_prog_DLLTOOL" +fi + +test -z "$DLLTOOL" && DLLTOOL=dlltool + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 +$as_echo_n "checking how to associate runtime and link libraries... " >&6; } +if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_sharedlib_from_linklib_cmd='unknown' + +case $host_os in +cygwin* | mingw* | pw32* | cegcc*) + # two different shell functions defined in ltmain.sh; + # decide which one to use based on capabilities of $DLLTOOL + case `$DLLTOOL --help 2>&1` in + *--identify-strict*) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib + ;; + *) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback + ;; + esac + ;; +*) + # fallback: assume linklib IS sharedlib + lt_cv_sharedlib_from_linklib_cmd=$ECHO + ;; +esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 +$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } +sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd +test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO + + + + + + + + +if test -n "$ac_tool_prefix"; then + for ac_prog in ar + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AR" && break + done +fi +if test -z "$AR"; then + ac_ct_AR=$AR + for ac_prog in ar +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_AR" && break +done + + if test "x$ac_ct_AR" = x; then + AR="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +fi + +: ${AR=ar} +: ${AR_FLAGS=cru} + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 +$as_echo_n "checking for archiver @FILE support... " >&6; } +if ${lt_cv_ar_at_file+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ar_at_file=no + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + echo conftest.$ac_objext > conftest.lst + lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 + (eval $lt_ar_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if test 0 -eq "$ac_status"; then + # Ensure the archiver fails upon bogus file names. + rm -f conftest.$ac_objext libconftest.a + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 + (eval $lt_ar_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if test 0 -ne "$ac_status"; then + lt_cv_ar_at_file=@ + fi + fi + rm -f conftest.* libconftest.a + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 +$as_echo "$lt_cv_ar_at_file" >&6; } + +if test no = "$lt_cv_ar_at_file"; then + archiver_list_spec= +else + archiver_list_spec=$lt_cv_ar_at_file +fi + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +test -z "$STRIP" && STRIP=: + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + +test -z "$RANLIB" && RANLIB=: + + + + + + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + bitrig* | openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" +fi + +case $host_os in + darwin*) + lock_old_archive_extraction=yes ;; + *) + lock_old_archive_extraction=no ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# Check for command to grab the raw symbol name followed by C symbol from nm. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 +$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } +if ${lt_cv_sys_global_symbol_pipe+:} false; then : + $as_echo_n "(cached) " >&6 +else + +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[BCDEGRST]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([_A-Za-z][_A-Za-z0-9]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[BCDT]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[ABCDGISTW]' + ;; +hpux*) + if test ia64 = "$host_cpu"; then + symcode='[ABCDEGRST]' + fi + ;; +irix* | nonstopux*) + symcode='[BCDEGRST]' + ;; +osf*) + symcode='[BCDEGQRST]' + ;; +solaris*) + symcode='[BDRT]' + ;; +sco3.2v5*) + symcode='[DT]' + ;; +sysv4.2uw2*) + symcode='[DT]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[ABDT]' + ;; +sysv4) + symcode='[DFNSTU]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[ABCDGIRSTW]' ;; +esac + +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Gets list of data symbols to import. + lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'" + # Adjust the below global symbol transforms to fixup imported variables. + lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" + lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" + lt_c_name_lib_hook="\ + -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ + -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" +else + # Disable hooks by default. + lt_cv_sys_global_symbol_to_import= + lt_cdecl_hook= + lt_c_name_hook= + lt_c_name_lib_hook= +fi + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n"\ +$lt_cdecl_hook\ +" -e 's/^T .* \(.*\)$/extern int \1();/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n"\ +$lt_c_name_hook\ +" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" + +# Transform an extracted symbol line into symbol name with lib prefix and +# symbol address. +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\ +$lt_c_name_lib_hook\ +" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ +" -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function, + # D for any global variable and I for any imported variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK '"\ +" {last_section=section; section=\$ 3};"\ +" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ +" /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ +" /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ +" {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ +" s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + # Now try to grab the symbols. + nlist=conftest.nm + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 + (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE +/* DATA imports from DLLs on WIN32 can't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT_DLSYM_CONST +#elif defined __osf__ +/* This system does not cope well with relocations in const data. */ +# define LT_DLSYM_CONST +#else +# define LT_DLSYM_CONST const +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +LT_DLSYM_CONST struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_globsym_save_LIBS=$LIBS + lt_globsym_save_CFLAGS=$CFLAGS + LIBS=conftstm.$ac_objext + CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest$ac_exeext; then + pipe_works=yes + fi + LIBS=$lt_globsym_save_LIBS + CFLAGS=$lt_globsym_save_CFLAGS + else + echo "cannot find nm_test_func in $nlist" >&5 + fi + else + echo "cannot find nm_test_var in $nlist" >&5 + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 + fi + else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test yes = "$pipe_works"; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done + +fi + +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 +$as_echo "failed" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 +$as_echo "ok" >&6; } +fi + +# Response file support. +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + nm_file_list_spec='@' +elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then + nm_file_list_spec='@' +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 +$as_echo_n "checking for sysroot... " >&6; } + +# Check whether --with-sysroot was given. +if test "${with_sysroot+set}" = set; then : + withval=$with_sysroot; +else + with_sysroot=no +fi + + +lt_sysroot= +case $with_sysroot in #( + yes) + if test yes = "$GCC"; then + lt_sysroot=`$CC --print-sysroot 2>/dev/null` + fi + ;; #( + /*) + lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` + ;; #( + no|'') + ;; #( + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5 +$as_echo "$with_sysroot" >&6; } + as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 + ;; +esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 +$as_echo "${lt_sysroot:-no}" >&6; } + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5 +$as_echo_n "checking for a working dd... " >&6; } +if ${ac_cv_path_lt_DD+:} false; then : + $as_echo_n "(cached) " >&6 +else + printf 0123456789abcdef0123456789abcdef >conftest.i +cat conftest.i conftest.i >conftest2.i +: ${lt_DD:=$DD} +if test -z "$lt_DD"; then + ac_path_lt_DD_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in dd; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_lt_DD="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_lt_DD" || continue +if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then + cmp -s conftest.i conftest.out \ + && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: +fi + $ac_path_lt_DD_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_lt_DD"; then + : + fi +else + ac_cv_path_lt_DD=$lt_DD +fi + +rm -f conftest.i conftest2.i conftest.out +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5 +$as_echo "$ac_cv_path_lt_DD" >&6; } + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5 +$as_echo_n "checking how to truncate binary pipes... " >&6; } +if ${lt_cv_truncate_bin+:} false; then : + $as_echo_n "(cached) " >&6 +else + printf 0123456789abcdef0123456789abcdef >conftest.i +cat conftest.i conftest.i >conftest2.i +lt_cv_truncate_bin= +if "$ac_cv_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then + cmp -s conftest.i conftest.out \ + && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" +fi +rm -f conftest.i conftest2.i conftest.out +test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5 +$as_echo "$lt_cv_truncate_bin" >&6; } + + + + + + + +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +func_cc_basename () +{ + for cc_temp in $*""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac + done + func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +} + +# Check whether --enable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then : + enableval=$enable_libtool_lock; +fi + +test no = "$enable_libtool_lock" || enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out what ABI is being produced by ac_compile, and set mode + # options accordingly. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE=32 + ;; + *ELF-64*) + HPUX_IA64_MODE=64 + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo '#line '$LINENO' "configure"' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + if test yes = "$lt_cv_prog_gnu_ld"; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +mips64*-*linux*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo '#line '$LINENO' "configure"' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + emul=elf + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + emul="${emul}32" + ;; + *64-bit*) + emul="${emul}64" + ;; + esac + case `/usr/bin/file conftest.$ac_objext` in + *MSB*) + emul="${emul}btsmip" + ;; + *LSB*) + emul="${emul}ltsmip" + ;; + esac + case `/usr/bin/file conftest.$ac_objext` in + *N32*) + emul="${emul}n32" + ;; + esac + LD="${LD-ld} -m $emul" + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. Note that the listed cases only cover the + # situations where additional linker options are needed (such as when + # doing 32-bit compilation for a host where ld defaults to 64-bit, or + # vice versa); the common cases where no linker options are needed do + # not appear in the list. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + case `/usr/bin/file conftest.o` in + *x86-64*) + LD="${LD-ld} -m elf32_x86_64" + ;; + *) + LD="${LD-ld} -m elf_i386" + ;; + esac + ;; + powerpc64le-*linux*) + LD="${LD-ld} -m elf32lppclinux" + ;; + powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + powerpcle-*linux*) + LD="${LD-ld} -m elf64lppc" + ;; + powerpc-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS=$CFLAGS + CFLAGS="$CFLAGS -belf" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 +$as_echo_n "checking whether the C compiler needs -belf... " >&6; } +if ${lt_cv_cc_needs_belf+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_cc_needs_belf=yes +else + lt_cv_cc_needs_belf=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 +$as_echo "$lt_cv_cc_needs_belf" >&6; } + if test yes != "$lt_cv_cc_needs_belf"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS=$SAVE_CFLAGS + fi + ;; +*-*solaris*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) + case $host in + i?86-*-solaris*|x86_64-*-solaris*) + LD="${LD-ld} -m elf_x86_64" + ;; + sparc*-*-solaris*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + # GNU ld 2.21 introduced _sol2 emulations. Use them if available. + if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then + LD=${LD-ld}_sol2 + fi + ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks=$enable_libtool_lock + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. +set dummy ${ac_tool_prefix}mt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$MANIFEST_TOOL"; then + ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL +if test -n "$MANIFEST_TOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 +$as_echo "$MANIFEST_TOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_MANIFEST_TOOL"; then + ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL + # Extract the first word of "mt", so it can be a program name with args. +set dummy mt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_MANIFEST_TOOL"; then + ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL +if test -n "$ac_ct_MANIFEST_TOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 +$as_echo "$ac_ct_MANIFEST_TOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_MANIFEST_TOOL" = x; then + MANIFEST_TOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL + fi +else + MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" +fi + +test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 +$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } +if ${lt_cv_path_mainfest_tool+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_path_mainfest_tool=no + echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 + $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out + cat conftest.err >&5 + if $GREP 'Manifest Tool' conftest.out > /dev/null; then + lt_cv_path_mainfest_tool=yes + fi + rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 +$as_echo "$lt_cv_path_mainfest_tool" >&6; } +if test yes != "$lt_cv_path_mainfest_tool"; then + MANIFEST_TOOL=: +fi + + + + + + + case $host_os in + rhapsody* | darwin*) + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. +set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DSYMUTIL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DSYMUTIL"; then + ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DSYMUTIL=$ac_cv_prog_DSYMUTIL +if test -n "$DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 +$as_echo "$DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DSYMUTIL"; then + ac_ct_DSYMUTIL=$DSYMUTIL + # Extract the first word of "dsymutil", so it can be a program name with args. +set dummy dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DSYMUTIL"; then + ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL +if test -n "$ac_ct_DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 +$as_echo "$ac_ct_DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DSYMUTIL" = x; then + DSYMUTIL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DSYMUTIL=$ac_ct_DSYMUTIL + fi +else + DSYMUTIL="$ac_cv_prog_DSYMUTIL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. +set dummy ${ac_tool_prefix}nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_NMEDIT+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NMEDIT"; then + ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +NMEDIT=$ac_cv_prog_NMEDIT +if test -n "$NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 +$as_echo "$NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_NMEDIT"; then + ac_ct_NMEDIT=$NMEDIT + # Extract the first word of "nmedit", so it can be a program name with args. +set dummy nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_NMEDIT"; then + ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_NMEDIT="nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT +if test -n "$ac_ct_NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 +$as_echo "$ac_ct_NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_NMEDIT" = x; then + NMEDIT=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + NMEDIT=$ac_ct_NMEDIT + fi +else + NMEDIT="$ac_cv_prog_NMEDIT" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. +set dummy ${ac_tool_prefix}lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_LIPO+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LIPO"; then + ac_cv_prog_LIPO="$LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_LIPO="${ac_tool_prefix}lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LIPO=$ac_cv_prog_LIPO +if test -n "$LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 +$as_echo "$LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LIPO"; then + ac_ct_LIPO=$LIPO + # Extract the first word of "lipo", so it can be a program name with args. +set dummy lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_LIPO+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LIPO"; then + ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_LIPO="lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO +if test -n "$ac_ct_LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 +$as_echo "$ac_ct_LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LIPO" = x; then + LIPO=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LIPO=$ac_ct_LIPO + fi +else + LIPO="$ac_cv_prog_LIPO" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL"; then + ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OTOOL="${ac_tool_prefix}otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL=$ac_cv_prog_OTOOL +if test -n "$OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 +$as_echo "$OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL"; then + ac_ct_OTOOL=$OTOOL + # Extract the first word of "otool", so it can be a program name with args. +set dummy otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL"; then + ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OTOOL="otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL +if test -n "$ac_ct_OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 +$as_echo "$ac_ct_OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL" = x; then + OTOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL=$ac_ct_OTOOL + fi +else + OTOOL="$ac_cv_prog_OTOOL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OTOOL64+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL64"; then + ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL64=$ac_cv_prog_OTOOL64 +if test -n "$OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 +$as_echo "$OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL64"; then + ac_ct_OTOOL64=$OTOOL64 + # Extract the first word of "otool64", so it can be a program name with args. +set dummy otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL64"; then + ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OTOOL64="otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 +if test -n "$ac_ct_OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 +$as_echo "$ac_ct_OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL64" = x; then + OTOOL64=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL64=$ac_ct_OTOOL64 + fi +else + OTOOL64="$ac_cv_prog_OTOOL64" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 +$as_echo_n "checking for -single_module linker flag... " >&6; } +if ${lt_cv_apple_cc_single_mod+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_apple_cc_single_mod=no + if test -z "$LT_MULTI_MODULE"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + # If there is a non-empty error log, and "single_module" + # appears in it, assume the flag caused a linker warning + if test -s conftest.err && $GREP single_module conftest.err; then + cat conftest.err >&5 + # Otherwise, if the output was created with a 0 exit code from + # the compiler, it worked. + elif test -f libconftest.dylib && test 0 = "$_lt_result"; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&5 + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 +$as_echo "$lt_cv_apple_cc_single_mod" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 +$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } +if ${lt_cv_ld_exported_symbols_list+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_ld_exported_symbols_list=yes +else + lt_cv_ld_exported_symbols_list=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 +$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 +$as_echo_n "checking for -force_load linker flag... " >&6; } +if ${lt_cv_ld_force_load+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_force_load=no + cat > conftest.c << _LT_EOF +int forced_loaded() { return 2;} +_LT_EOF + echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 + $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 + echo "$AR cru libconftest.a conftest.o" >&5 + $AR cru libconftest.a conftest.o 2>&5 + echo "$RANLIB libconftest.a" >&5 + $RANLIB libconftest.a 2>&5 + cat > conftest.c << _LT_EOF +int main() { return 0;} +_LT_EOF + echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err + _lt_result=$? + if test -s conftest.err && $GREP force_load conftest.err; then + cat conftest.err >&5 + elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then + lt_cv_ld_force_load=yes + else + cat conftest.err >&5 + fi + rm -f conftest.err libconftest.a conftest conftest.c + rm -rf conftest.dSYM + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 +$as_echo "$lt_cv_ld_force_load" >&6; } + case $host_os in + rhapsody* | darwin1.[012]) + _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[91]*) + _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; + 10.[012][,.]*) + _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test yes = "$lt_cv_apple_cc_single_mod"; then + _lt_dar_single_mod='$single_module' + fi + if test yes = "$lt_cv_ld_exported_symbols_list"; then + _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' + fi + if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac + +# func_munge_path_list VARIABLE PATH +# ----------------------------------- +# VARIABLE is name of variable containing _space_ separated list of +# directories to be munged by the contents of PATH, which is string +# having a format: +# "DIR[:DIR]:" +# string "DIR[ DIR]" will be prepended to VARIABLE +# ":DIR[:DIR]" +# string "DIR[ DIR]" will be appended to VARIABLE +# "DIRP[:DIRP]::[DIRA:]DIRA" +# string "DIRP[ DIRP]" will be prepended to VARIABLE and string +# "DIRA[ DIRA]" will be appended to VARIABLE +# "DIR[:DIR]" +# VARIABLE will be replaced by "DIR[ DIR]" +func_munge_path_list () +{ + case x$2 in + x) + ;; + *:) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" + ;; + x:*) + eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" + ;; + *::*) + eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" + eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" + ;; + *) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" + ;; + esac +} + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if ${ac_cv_prog_CPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "#define STDC_HEADERS 1" >>confdefs.h + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +for ac_header in dlfcn.h +do : + ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default +" +if test "x$ac_cv_header_dlfcn_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_DLFCN_H 1 +_ACEOF + +fi + +done + + + + + +# Set options +# Check whether --enable-static was given. +if test "${enable_static+set}" = set; then : + enableval=$enable_static; p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS=$lt_save_ifs + ;; + esac +else + enable_static=no +fi + + + + + + + + +# Check whether --with-pic was given. +if test "${with_pic+set}" = set; then : + withval=$with_pic; lt_p=${PACKAGE-default} + case $withval in + yes|no) pic_mode=$withval ;; + *) + pic_mode=default + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for lt_pkg in $withval; do + IFS=$lt_save_ifs + if test "X$lt_pkg" = "X$lt_p"; then + pic_mode=yes + fi + done + IFS=$lt_save_ifs + ;; + esac +else + pic_mode=yes +fi + + + + + + + + + + enable_dlopen=no + + + enable_win32_dll=no + + + # Check whether --enable-shared was given. +if test "${enable_shared+set}" = set; then : + enableval=$enable_shared; p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS=$lt_save_ifs + ;; + esac +else + enable_shared=yes +fi + + + + + + + + + + + + # Check whether --enable-fast-install was given. +if test "${enable_fast_install+set}" = set; then : + enableval=$enable_fast_install; p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS=$lt_save_ifs + ;; + esac +else + enable_fast_install=yes +fi + + + + + + + + + shared_archive_member_spec= +case $host,$enable_shared in +power*-*-aix[5-9]*,yes) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5 +$as_echo_n "checking which variant of shared library versioning to provide... " >&6; } + +# Check whether --with-aix-soname was given. +if test "${with_aix_soname+set}" = set; then : + withval=$with_aix_soname; case $withval in + aix|svr4|both) + ;; + *) + as_fn_error $? "Unknown argument to --with-aix-soname" "$LINENO" 5 + ;; + esac + lt_cv_with_aix_soname=$with_aix_soname +else + if ${lt_cv_with_aix_soname+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_with_aix_soname=aix +fi + + with_aix_soname=$lt_cv_with_aix_soname +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5 +$as_echo "$with_aix_soname" >&6; } + if test aix != "$with_aix_soname"; then + # For the AIX way of multilib, we name the shared archive member + # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', + # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. + # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, + # the AIX toolchain works better with OBJECT_MODE set (default 32). + if test 64 = "${OBJECT_MODE-32}"; then + shared_archive_member_spec=shr_64 + else + shared_archive_member_spec=shr + fi + fi + ;; +*) + with_aix_soname=aix + ;; +esac + + + + + + + + + + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS=$ltmain + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +test -z "$LN_S" && LN_S="ln -s" + + + + + + + + + + + + + + +if test -n "${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 +$as_echo_n "checking for objdir... " >&6; } +if ${lt_cv_objdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 +$as_echo "$lt_cv_objdir" >&6; } +objdir=$lt_cv_objdir + + + + + +cat >>confdefs.h <<_ACEOF +#define LT_OBJDIR "$lt_cv_objdir/" +_ACEOF + + + + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test set != "${COLLECT_NAMES+set}"; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a '.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld=$lt_cv_prog_gnu_ld + +old_CC=$CC +old_CFLAGS=$CFLAGS + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +func_cc_basename $compiler +cc_basename=$func_cc_basename_result + + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 +$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } +if ${lt_cv_path_MAGIC_CMD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD=$MAGIC_CMD + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/${ac_tool_prefix}file"; then + lt_cv_path_MAGIC_CMD=$ac_dir/"${ac_tool_prefix}file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD=$lt_cv_path_MAGIC_CMD + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS=$lt_save_ifs + MAGIC_CMD=$lt_save_MAGIC_CMD + ;; +esac +fi + +MAGIC_CMD=$lt_cv_path_MAGIC_CMD +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + + +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 +$as_echo_n "checking for file... " >&6; } +if ${lt_cv_path_MAGIC_CMD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD=$MAGIC_CMD + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/file"; then + lt_cv_path_MAGIC_CMD=$ac_dir/"file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD=$lt_cv_path_MAGIC_CMD + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS=$lt_save_ifs + MAGIC_CMD=$lt_save_MAGIC_CMD + ;; +esac +fi + +MAGIC_CMD=$lt_cv_path_MAGIC_CMD +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + else + MAGIC_CMD=: + fi +fi + + fi + ;; +esac + +# Use C for the default configuration in the libtool script + +lt_save_CC=$CC +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +objext=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* + +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* + + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + +lt_prog_compiler_no_builtin_flag= + +if test yes = "$GCC"; then + case $cc_basename in + nvcc*) + lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; + *) + lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; + esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } +if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_rtti_exceptions=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-fno-rtti -fno-exceptions" ## exclude from sc_useless_quotes_in_assignment + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_rtti_exceptions=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } + +if test yes = "$lt_cv_prog_compiler_rtti_exceptions"; then + lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" +else + : +fi + +fi + + + + + + + lt_prog_compiler_wl= +lt_prog_compiler_pic= +lt_prog_compiler_static= + + + if test yes = "$GCC"; then + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_static='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + fi + lt_prog_compiler_pic='-fPIC' + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the '-m68020' flag to GCC prevents building anything better, + # like '-m68040'. + lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic='-DDLL_EXPORT' + case $host_os in + os2*) + lt_prog_compiler_static='$wl-static' + ;; + esac + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + ;; + + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + lt_prog_compiler_static= + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + ;; + + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic=-Kconform_pic + fi + ;; + + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + + case $cc_basename in + nvcc*) # Cuda Compiler Driver 2.2 + lt_prog_compiler_wl='-Xlinker ' + if test -n "$lt_prog_compiler_pic"; then + lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" + fi + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl='-Wl,' + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + else + lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + case $cc_basename in + nagfor*) + # NAG Fortran compiler + lt_prog_compiler_wl='-Wl,-Wl,,' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + esac + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic='-DDLL_EXPORT' + case $host_os in + os2*) + lt_prog_compiler_static='$wl-static' + ;; + esac + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static='$wl-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static='-non_shared' + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + # old Intel for x86_64, which still supported -KPIC. + ecc*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='--shared' + lt_prog_compiler_static='--static' + ;; + nagfor*) + # NAG Fortran compiler + lt_prog_compiler_wl='-Wl,-Wl,,' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + tcc*) + # Fabrice Bellard et al's Tiny C Compiler + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + ccc*) + lt_prog_compiler_wl='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + xl* | bgxl* | bgf* | mpixl*) + # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-qpic' + lt_prog_compiler_static='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='' + ;; + *Sun\ F* | *Sun*Fortran*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Qoption ld ' + ;; + *Sun\ C*) + # Sun C 5.9 + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Wl,' + ;; + *Intel*\ [CF]*Compiler*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + *Portland\ Group*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + esac + ;; + esac + ;; + + newsos6) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + + rdos*) + lt_prog_compiler_static='-non_shared' + ;; + + solaris*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + case $cc_basename in + f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) + lt_prog_compiler_wl='-Qoption ld ';; + *) + lt_prog_compiler_wl='-Wl,';; + esac + ;; + + sunos4*) + lt_prog_compiler_wl='-Qoption ld ' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic='-Kconform_pic' + lt_prog_compiler_static='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + unicos*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_can_build_shared=no + ;; + + uts4*) + lt_prog_compiler_pic='-pic' + lt_prog_compiler_static='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared=no + ;; + esac + fi + +case $host_os in + # For platforms that do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic= + ;; + *) + lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" + ;; +esac + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } +if ${lt_cv_prog_compiler_pic+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic=$lt_prog_compiler_pic +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 +$as_echo "$lt_cv_prog_compiler_pic" >&6; } +lt_prog_compiler_pic=$lt_cv_prog_compiler_pic + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } +if ${lt_cv_prog_compiler_pic_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_works=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic -DPIC" ## exclude from sc_useless_quotes_in_assignment + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } + +if test yes = "$lt_cv_prog_compiler_pic_works"; then + case $lt_prog_compiler_pic in + "" | " "*) ;; + *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; + esac +else + lt_prog_compiler_pic= + lt_prog_compiler_can_build_shared=no +fi + +fi + + + + + + + + + + + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if ${lt_cv_prog_compiler_static_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_static_works=no + save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works=yes + fi + else + lt_cv_prog_compiler_static_works=yes + fi + fi + $RM -r conftest* + LDFLAGS=$save_LDFLAGS + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 +$as_echo "$lt_cv_prog_compiler_static_works" >&6; } + +if test yes = "$lt_cv_prog_compiler_static_works"; then + : +else + lt_prog_compiler_static= +fi + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + +hard_links=nottested +if test no = "$lt_cv_prog_compiler_c_o" && test no != "$need_locks"; then + # do not overwrite the value of need_locks provided by the user + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } + if test no = "$hard_links"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + + runpath_var= + allow_undefined_flag= + always_export_symbols=no + archive_cmds= + archive_expsym_cmds= + compiler_needs_object=no + enable_shared_with_static_runtimes=no + export_dynamic_flag_spec= + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + hardcode_automatic=no + hardcode_direct=no + hardcode_direct_absolute=no + hardcode_libdir_flag_spec= + hardcode_libdir_separator= + hardcode_minus_L=no + hardcode_shlibpath_var=unsupported + inherit_rpath=no + link_all_deplibs=unknown + module_cmds= + module_expsym_cmds= + old_archive_from_new_cmds= + old_archive_from_expsyms_cmds= + thread_safe_flag_spec= + whole_archive_flag_spec= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ' (' and ')$', so one must not match beginning or + # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc', + # as well as any symbol that contains 'd'. + exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test yes != "$GCC"; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd* | bitrig*) + with_gnu_ld=no + ;; + esac + + ld_shlibs=yes + + # On some targets, GNU ld is compatible enough with the native linker + # that we're better off using the native interface for both. + lt_use_gnu_ld_interface=no + if test yes = "$with_gnu_ld"; then + case $host_os in + aix*) + # The AIX port of GNU ld has always aspired to compatibility + # with the native linker. However, as the warning in the GNU ld + # block says, versions before 2.19.5* couldn't really create working + # shared libraries, regardless of the interface used. + case `$LD -v 2>&1` in + *\ \(GNU\ Binutils\)\ 2.19.5*) ;; + *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; + *\ \(GNU\ Binutils\)\ [3-9]*) ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + fi + + if test yes = "$lt_use_gnu_ld_interface"; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='$wl' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + export_dynamic_flag_spec='$wl--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' + else + whole_archive_flag_spec= + fi + supports_anon_versioning=no + case `$LD -v | $SED -e 's/(^)\+)\s\+//' 2>&1` in + *GNU\ gold*) supports_anon_versioning=yes ;; + *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[3-9]*) + # On AIX/PPC, the GNU linker is very broken + if test ia64 != "$host_cpu"; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.19, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to install binutils +*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. +*** You will then need to restart the configuration process. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + else + ld_shlibs=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + export_dynamic_flag_spec='$wl--export-all-symbols' + allow_undefined_flag=unsupported + always_export_symbols=no + enable_shared_with_static_runtimes=yes + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' + exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file, use it as + # is; otherwise, prepend EXPORTS... + archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs=no + fi + ;; + + haiku*) + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + link_all_deplibs=yes + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + shrext_cmds=.dll + archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + enable_shared_with_static_runtimes=yes + ;; + + interix[3-9]*) + hardcode_direct=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='$wl-rpath,$libdir' + export_dynamic_flag_spec='$wl-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + tmp_diet=no + if test linux-dietlibc = "$host_os"; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test no = "$tmp_diet" + then + tmp_addflag=' $pic_flag' + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group f77 and f90 compilers + whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + whole_archive_flag_spec= + tmp_sharedflag='--shared' ;; + nagfor*) # NAGFOR 5.3 + tmp_sharedflag='-Wl,-shared' ;; + xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + nvcc*) # Cuda Compiler Driver 2.2 + whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + compiler_needs_object=yes + ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + whole_archive_flag_spec='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + compiler_needs_object=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + + if test yes = "$supports_anon_versioning"; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + tcc*) + export_dynamic_flag_spec='-rdynamic' + ;; + xlf* | bgf* | bgxlf* | mpixlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' + if test yes = "$supports_anon_versioning"; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + ld_shlibs=no + fi + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + ;; + + sunos4*) + archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + + if test no = "$ld_shlibs"; then + runpath_var= + hardcode_libdir_flag_spec= + export_dynamic_flag_spec= + whole_archive_flag_spec= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag=unsupported + always_export_symbols=yes + archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + + aix[4-9]*) + if test ia64 = "$host_cpu"; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag= + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to GNU nm, but means don't demangle to AIX nm. + # Without the "-l" option, or with the "-B" option, AIX nm treats + # weak defined symbols like other global defined symbols, whereas + # GNU nm marks them as "W". + # While the 'weak' keyword is ignored in the Export File, we need + # it in the Import File for the 'aix-soname' feature, so we have + # to replace the "-B" option with "-P" for AIX nm. + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # have runtime linking enabled, and use it for executables. + # For shared libraries, we enable/disable runtime linking + # depending on the kind of the shared library created - + # when "with_aix_soname,aix_use_runtimelinking" is: + # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables + # "aix,yes" lib.so shared, rtl:yes, for executables + # lib.a static archive + # "both,no" lib.so.V(shr.o) shared, rtl:yes + # lib.a(lib.so.V) shared, rtl:no, for executables + # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a(lib.so.V) shared, rtl:no + # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a static archive + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then + aix_use_runtimelinking=yes + break + fi + done + if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then + # With aix-soname=svr4, we create the lib.so.V shared archives only, + # so we don't have lib.a shared libs to link our executables. + # We have to force runtime linking in this case. + aix_use_runtimelinking=yes + LDFLAGS="$LDFLAGS -Wl,-brtl" + fi + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds='' + hardcode_direct=yes + hardcode_direct_absolute=yes + hardcode_libdir_separator=':' + link_all_deplibs=yes + file_list_spec='$wl-f,' + case $with_aix_soname,$aix_use_runtimelinking in + aix,*) ;; # traditional, no import file + svr4,* | *,yes) # use import file + # The Import File defines what to hardcode. + hardcode_direct=no + hardcode_direct_absolute=no + ;; + esac + + if test yes = "$GCC"; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`$CC -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + ;; + esac + shared_flag='-shared' + if test yes = "$aix_use_runtimelinking"; then + shared_flag="$shared_flag "'$wl-G' + fi + # Need to ensure runtime linking is disabled for the traditional + # shared library, or the linker may eventually find shared libraries + # /with/ Import File - we do not want to mix them. + shared_flag_aix='-shared' + shared_flag_svr4='-shared $wl-G' + else + # not using gcc + if test ia64 = "$host_cpu"; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test yes = "$aix_use_runtimelinking"; then + shared_flag='$wl-G' + else + shared_flag='$wl-bM:SRE' + fi + shared_flag_aix='$wl-bM:SRE' + shared_flag_svr4='$wl-G' + fi + fi + + export_dynamic_flag_spec='$wl-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols=yes + if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + if test set = "${lt_cv_aix_libpath+set}"; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath_+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=/usr/lib:/lib + fi + +fi + + aix_libpath=$lt_cv_aix_libpath_ +fi + + hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag + else + if test ia64 = "$host_cpu"; then + hardcode_libdir_flag_spec='$wl-R $libdir:/usr/lib:/lib' + allow_undefined_flag="-z nodefs" + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + if test set = "${lt_cv_aix_libpath+set}"; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath_+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=/usr/lib:/lib + fi + +fi + + aix_libpath=$lt_cv_aix_libpath_ +fi + + hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag=' $wl-bernotok' + allow_undefined_flag=' $wl-berok' + if test yes = "$with_gnu_ld"; then + # We only use this code for GNU lds that support --whole-archive. + whole_archive_flag_spec='$wl--whole-archive$convenience $wl--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec='$convenience' + fi + archive_cmds_need_lc=yes + archive_expsym_cmds='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' + # -brtl affects multiple linker settings, -berok does not and is overridden later + compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`' + if test svr4 != "$with_aix_soname"; then + # This is similar to how AIX traditionally builds its shared libraries. + archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' + fi + if test aix != "$with_aix_soname"; then + archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' + else + # used by -dlpreopen to get the symbols + archive_expsym_cmds="$archive_expsym_cmds"'~$MV $output_objdir/$realname.d/$soname $output_objdir' + fi + archive_expsym_cmds="$archive_expsym_cmds"'~$RM -r $output_objdir/$realname.d' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + bsdi[45]*) + export_dynamic_flag_spec=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + case $cc_basename in + cl*) + # Native MSVC + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + always_export_symbols=yes + file_list_spec='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=.dll + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' + archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then + cp "$export_symbols" "$output_objdir/$soname.def"; + echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; + else + $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, )='true' + enable_shared_with_static_runtimes=yes + exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' + # Don't use ranlib + old_postinstall_cmds='chmod 644 $oldlib' + postlink_cmds='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile=$lt_outputfile.exe + lt_tool_outputfile=$lt_tool_outputfile.exe + ;; + esac~ + if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # Assume MSVC wrapper + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=.dll + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_from_new_cmds='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' + enable_shared_with_static_runtimes=yes + ;; + esac + ;; + + darwin* | rhapsody*) + + + archive_cmds_need_lc=no + hardcode_direct=no + hardcode_automatic=yes + hardcode_shlibpath_var=unsupported + if test yes = "$lt_cv_ld_force_load"; then + whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + + else + whole_archive_flag_spec='' + fi + link_all_deplibs=yes + allow_undefined_flag=$_lt_dar_allow_undefined + case $cc_basename in + ifort*|nagfor*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test yes = "$_lt_dar_can_shared"; then + output_verbose_link_cmd=func_echo_all + archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" + module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" + archive_expsym_cmds="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" + module_expsym_cmds="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" + + else + ld_shlibs=no + fi + + ;; + + dgux*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2.*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + hpux9*) + if test yes = "$GCC"; then + archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + else + archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + fi + hardcode_libdir_flag_spec='$wl+b $wl$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + export_dynamic_flag_spec='$wl-E' + ;; + + hpux10*) + if test yes,no = "$GCC,$with_gnu_ld"; then + archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test no = "$with_gnu_ld"; then + hardcode_libdir_flag_spec='$wl+b $wl$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='$wl-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + fi + ;; + + hpux11*) + if test yes,no = "$GCC,$with_gnu_ld"; then + case $host_cpu in + hppa*64*) + archive_cmds='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + archive_cmds='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + + # Older versions of the 11.00 compiler do not understand -b yet + # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 +$as_echo_n "checking if $CC understands -b... " >&6; } +if ${lt_cv_prog_compiler__b+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler__b=no + save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS -b" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler__b=yes + fi + else + lt_cv_prog_compiler__b=yes + fi + fi + $RM -r conftest* + LDFLAGS=$save_LDFLAGS + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 +$as_echo "$lt_cv_prog_compiler__b" >&6; } + +if test yes = "$lt_cv_prog_compiler__b"; then + archive_cmds='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' +else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' +fi + + ;; + esac + fi + if test no = "$with_gnu_ld"; then + hardcode_libdir_flag_spec='$wl+b $wl$libdir' + hardcode_libdir_separator=: + + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct=no + hardcode_shlibpath_var=no + ;; + *) + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='$wl-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test yes = "$GCC"; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + # This should be the same for all languages, so no per-tag cache variable. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 +$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } +if ${lt_cv_irix_exported_symbol+:} false; then : + $as_echo_n "(cached) " >&6 +else + save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int foo (void) { return 0; } +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_irix_exported_symbol=yes +else + lt_cv_irix_exported_symbol=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 +$as_echo "$lt_cv_irix_exported_symbol" >&6; } + if test yes = "$lt_cv_irix_exported_symbol"; then + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' + fi + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + hardcode_libdir_separator=: + inherit_rpath=yes + link_all_deplibs=yes + ;; + + linux*) + case $cc_basename in + tcc*) + # Fabrice Bellard et al's Tiny C Compiler + ld_shlibs=yes + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + newsos6) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + hardcode_libdir_separator=: + hardcode_shlibpath_var=no + ;; + + *nto* | *qnx*) + ;; + + openbsd* | bitrig*) + if test -f /usr/libexec/ld.so; then + hardcode_direct=yes + hardcode_shlibpath_var=no + hardcode_direct_absolute=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' + hardcode_libdir_flag_spec='$wl-rpath,$libdir' + export_dynamic_flag_spec='$wl-E' + else + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='$wl-rpath,$libdir' + fi + else + ld_shlibs=no + fi + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + shrext_cmds=.dll + archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + enable_shared_with_static_runtimes=yes + ;; + + osf3*) + if test yes = "$GCC"; then + allow_undefined_flag=' $wl-expect_unresolved $wl\*' + archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + hardcode_libdir_separator=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test yes = "$GCC"; then + allow_undefined_flag=' $wl-expect_unresolved $wl\*' + archive_cmds='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + archive_cmds_need_lc='no' + hardcode_libdir_separator=: + ;; + + solaris*) + no_undefined_flag=' -z defs' + if test yes = "$GCC"; then + wlarc='$wl' + archive_cmds='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + archive_cmds='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='$wl' + archive_cmds='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_shlibpath_var=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands '-z linker_flag'. GCC discards it without '$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test yes = "$GCC"; then + whole_archive_flag_spec='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' + else + whole_archive_flag_spec='-z allextract$convenience -z defaultextract' + fi + ;; + esac + link_all_deplibs=yes + ;; + + sunos4*) + if test sequent = "$host_vendor"; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds='$CC -r -o $output$reload_objs' + hardcode_direct=no + ;; + motorola) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + ;; + + sysv4.3*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + export_dynamic_flag_spec='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag='$wl-z,text' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + runpath_var='LD_RUN_PATH' + + if test yes = "$GCC"; then + archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We CANNOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag='$wl-z,text' + allow_undefined_flag='$wl-z,nodefs' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='$wl-R,$libdir' + hardcode_libdir_separator=':' + link_all_deplibs=yes + export_dynamic_flag_spec='$wl-Bexport' + runpath_var='LD_RUN_PATH' + + if test yes = "$GCC"; then + archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + *) + ld_shlibs=no + ;; + esac + + if test sni = "$host_vendor"; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + export_dynamic_flag_spec='$wl-Blargedynsym' + ;; + esac + fi + fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 +$as_echo "$ld_shlibs" >&6; } +test no = "$ld_shlibs" && can_build_shared=no + +with_gnu_ld=$with_gnu_ld + + + + + + + + + + + + + + + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc=yes + + if test yes,yes = "$GCC,$enable_shared"; then + case $archive_cmds in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } +if ${lt_cv_archive_cmds_need_lc+:} false; then : + $as_echo_n "(cached) " >&6 +else + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl + pic_flag=$lt_prog_compiler_pic + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag + allow_undefined_flag= + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 + (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + then + lt_cv_archive_cmds_need_lc=no + else + lt_cv_archive_cmds_need_lc=yes + fi + allow_undefined_flag=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 +$as_echo "$lt_cv_archive_cmds_need_lc" >&6; } + archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc + ;; + esac + fi + ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } + +if test yes = "$GCC"; then + case $host_os in + darwin*) lt_awk_arg='/^libraries:/,/LR/' ;; + *) lt_awk_arg='/^libraries:/' ;; + esac + case $host_os in + mingw* | cegcc*) lt_sed_strip_eq='s|=\([A-Za-z]:\)|\1|g' ;; + *) lt_sed_strip_eq='s|=/|/|g' ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` + case $lt_search_path_spec in + *\;*) + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` + ;; + *) + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` + ;; + esac + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary... + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + # ...but if some path component already ends with the multilib dir we assume + # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). + case "$lt_multi_os_dir; $lt_search_path_spec " in + "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) + lt_multi_os_dir= + ;; + esac + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" + elif test -n "$lt_multi_os_dir"; then + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' +BEGIN {RS = " "; FS = "/|\n";} { + lt_foo = ""; + lt_count = 0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo = "/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[lt_foo]++; } + if (lt_freq[lt_foo] == 1) { print lt_foo; } +}'` + # AWK program above erroneously prepends '/' to C:/dos/paths + # for these hosts. + case $host_os in + mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ + $SED 's|/\([A-Za-z]:\)|\1|g'` ;; + esac + sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=.so +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + + + +case $host_os in +aix3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='$libname$release$shared_ext$major' + ;; + +aix[4-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test ia64 = "$host_cpu"; then + # AIX 5 supports IA64 + library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line '#! .'. This would cause the generated library to + # depend on '.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # Using Import Files as archive members, it is possible to support + # filename-based versioning of shared library archives on AIX. While + # this would work for both with and without runtime linking, it will + # prevent static linking of such archives. So we do filename-based + # shared library versioning with .so extension only, which is used + # when both runtime linking and shared linking is enabled. + # Unfortunately, runtime linking may impact performance, so we do + # not want this to be the default eventually. Also, we use the + # versioned .so libs for executables only if there is the -brtl + # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. + # To allow for filename-based versioning support, we need to create + # libNAME.so.V as an archive file, containing: + # *) an Import File, referring to the versioned filename of the + # archive as well as the shared archive member, telling the + # bitwidth (32 or 64) of that shared object, and providing the + # list of exported symbols of that shared object, eventually + # decorated with the 'weak' keyword + # *) the shared object with the F_LOADONLY flag set, to really avoid + # it being seen by the linker. + # At run time we better use the real file rather than another symlink, + # but for link time we create the symlink libNAME.so -> libNAME.so.V + + case $with_aix_soname,$aix_use_runtimelinking in + # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + aix,yes) # traditional libtool + dynamic_linker='AIX unversionable lib.so' + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + ;; + aix,no) # traditional AIX only + dynamic_linker='AIX lib.a(lib.so.V)' + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='$libname$release.a $libname.a' + soname_spec='$libname$release$shared_ext$major' + ;; + svr4,*) # full svr4 only + dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)" + library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' + # We do not specify a path in Import Files, so LIBPATH fires. + shlibpath_overrides_runpath=yes + ;; + *,yes) # both, prefer svr4 + dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)" + library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' + # unpreferred sharedlib libNAME.a needs extra handling + postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' + postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' + # We do not specify a path in Import Files, so LIBPATH fires. + shlibpath_overrides_runpath=yes + ;; + *,no) # both, prefer aix + dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)" + library_names_spec='$libname$release.a $libname.a' + soname_spec='$libname$release$shared_ext$major' + # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling + postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' + postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' + ;; + esac + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='$libname$shared_ext' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=.dll + need_version=no + need_lib_prefix=no + + case $GCC,$cc_basename in + yes,*) + # gcc + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + ;; + esac + dynamic_linker='Win32 ld.exe' + ;; + + *,cl*) + # Native MSVC + libname_spec='$name' + soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + library_names_spec='$libname.dll.lib' + + case $build_os in + mingw*) + sys_lib_search_path_spec= + lt_save_ifs=$IFS + IFS=';' + for lt_path in $LIB + do + IFS=$lt_save_ifs + # Let DOS variable expansion print the short 8.3 style file name. + lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` + sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" + done + IFS=$lt_save_ifs + # Convert to MSYS style. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` + ;; + cygwin*) + # Convert to unix form, then to dos form, then back to unix form + # but this time dos style (no spaces!) so that the unix form looks + # like /cygdrive/c/PROGRA~1:/cygdr... + sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` + sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` + sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + ;; + *) + sys_lib_search_path_spec=$LIB + if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # FIXME: find the short name or the path components, as spaces are + # common. (e.g. "Program Files" -> "PROGRA~1") + ;; + esac + + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + dynamic_linker='Win32 link.exe' + ;; + + *) + # Assume MSVC wrapper + library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib' + dynamic_linker='Win32 ld.exe' + ;; + esac + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' + soname_spec='$libname$release$major$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[23].*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2.*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +haiku*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=no + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + if test 32 = "$HPUX_IA64_MODE"; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + sys_lib_dlsearch_path_spec=/usr/lib/hpux32 + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + sys_lib_dlsearch_path_spec=/usr/lib/hpux64 + fi + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; + +interix[3-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test yes = "$lt_cv_prog_gnu_ld"; then + version_type=linux # correct to gnu/linux during the next big refactor + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" + sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +linux*android*) + version_type=none # Android doesn't support versioned libraries. + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext' + soname_spec='$libname$release$shared_ext' + finish_cmds= + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + dynamic_linker='Android linker' + # Don't embed -rpath directories since the linker doesn't support them. + hardcode_libdir_flag_spec='-L$libdir' + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + if ${lt_cv_shlibpath_overrides_runpath+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : + lt_cv_shlibpath_overrides_runpath=yes +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + +fi + + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Add ABI-specific directories to the system library path. + sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib" + + # Ideally, we could use ldconfig to report *all* directores which are + # searched for libraries, however this is still not possible. Aside from not + # being certain /sbin/ldconfig is available, command + # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, + # even though it is searched at run-time. Try to do the best guess by + # appending ld.so.conf contents (and includes) to the search path. + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd* | bitrig*) + version_type=sunos + sys_lib_dlsearch_path_spec=/usr/lib + need_lib_prefix=no + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + need_version=no + else + need_version=yes + fi + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +os2*) + libname_spec='$name' + version_type=windows + shrext_cmds=.dll + need_version=no + need_lib_prefix=no + # OS/2 can only load a DLL with a base name of 8 characters or less. + soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; + v=$($ECHO $release$versuffix | tr -d .-); + n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); + $ECHO $n$v`$shared_ext' + library_names_spec='${libname}_dll.$libext' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=BEGINLIBPATH + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test yes = "$with_gnu_ld"; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec; then + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' + soname_spec='$libname$shared_ext.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=sco + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test yes = "$with_gnu_ld"; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } +test no = "$dynamic_linker" && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test yes = "$GCC"; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then + sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec +fi + +if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then + sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec +fi + +# remember unaugmented sys_lib_dlsearch_path content for libtool script decls... +configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec + +# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code +func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" + +# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool +configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } +hardcode_action= +if test -n "$hardcode_libdir_flag_spec" || + test -n "$runpath_var" || + test yes = "$hardcode_automatic"; then + + # We can hardcode non-existent directories. + if test no != "$hardcode_direct" && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, )" && + test no != "$hardcode_minus_L"; then + # Linking always hardcodes the temporary library directory. + hardcode_action=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action=unsupported +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 +$as_echo "$hardcode_action" >&6; } + +if test relink = "$hardcode_action" || + test yes = "$inherit_rpath"; then + # Fast installation is not supported + enable_fast_install=no +elif test yes = "$shlibpath_overrides_runpath" || + test no = "$enable_shared"; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + if test yes != "$enable_dlopen"; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen=load_add_on + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen=LoadLibrary + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen=dlopen + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : + lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl +else + + lt_cv_dlopen=dyld + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + +fi + + ;; + + tpf*) + # Don't try to run any link tests for TPF. We know it's impossible + # because TPF is a cross-compiler, and we know how we open DSOs. + lt_cv_dlopen=dlopen + lt_cv_dlopen_libs= + lt_cv_dlopen_self=no + ;; + + *) + ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" +if test "x$ac_cv_func_shl_load" = xyes; then : + lt_cv_dlopen=shl_load +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 +$as_echo_n "checking for shl_load in -ldld... " >&6; } +if ${ac_cv_lib_dld_shl_load+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shl_load (); +int +main () +{ +return shl_load (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_shl_load=yes +else + ac_cv_lib_dld_shl_load=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 +$as_echo "$ac_cv_lib_dld_shl_load" >&6; } +if test "x$ac_cv_lib_dld_shl_load" = xyes; then : + lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld +else + ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" +if test "x$ac_cv_func_dlopen" = xyes; then : + lt_cv_dlopen=dlopen +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : + lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 +$as_echo_n "checking for dlopen in -lsvld... " >&6; } +if ${ac_cv_lib_svld_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsvld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_svld_dlopen=yes +else + ac_cv_lib_svld_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 +$as_echo "$ac_cv_lib_svld_dlopen" >&6; } +if test "x$ac_cv_lib_svld_dlopen" = xyes; then : + lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 +$as_echo_n "checking for dld_link in -ldld... " >&6; } +if ${ac_cv_lib_dld_dld_link+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dld_link (); +int +main () +{ +return dld_link (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_dld_link=yes +else + ac_cv_lib_dld_dld_link=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 +$as_echo "$ac_cv_lib_dld_dld_link" >&6; } +if test "x$ac_cv_lib_dld_dld_link" = xyes; then : + lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld +fi + + +fi + + +fi + + +fi + + +fi + + +fi + + ;; + esac + + if test no = "$lt_cv_dlopen"; then + enable_dlopen=no + else + enable_dlopen=yes + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS=$CPPFLAGS + test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS=$LDFLAGS + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS=$LIBS + LIBS="$lt_cv_dlopen_libs $LIBS" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 +$as_echo_n "checking whether a program can dlopen itself... " >&6; } +if ${lt_cv_dlopen_self+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test yes = "$cross_compiling"; then : + lt_cv_dlopen_self=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisibility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 +$as_echo "$lt_cv_dlopen_self" >&6; } + + if test yes = "$lt_cv_dlopen_self"; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 +$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } +if ${lt_cv_dlopen_self_static+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test yes = "$cross_compiling"; then : + lt_cv_dlopen_self_static=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisibility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self_static=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 +$as_echo "$lt_cv_dlopen_self_static" >&6; } + fi + + CPPFLAGS=$save_CPPFLAGS + LDFLAGS=$save_LDFLAGS + LIBS=$save_LIBS + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi + + + + + + + + + + + + + + + + + +striplib= +old_striplib= +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 +$as_echo_n "checking whether stripping libraries is possible... " >&6; } +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP"; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + fi + ;; + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + ;; + esac +fi + + + + + + + + + + + + + # Report what library types will actually be built + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 +$as_echo_n "checking if libtool supports shared libraries... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 +$as_echo "$can_build_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 +$as_echo_n "checking whether to build shared libraries... " >&6; } + test no = "$can_build_shared" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test yes = "$enable_shared" && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[4-9]*) + if test ia64 != "$host_cpu"; then + case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in + yes,aix,yes) ;; # shared object as lib.so file only + yes,svr4,*) ;; # shared object as lib.so archive member only + yes,*) enable_static=no ;; # shared object in lib.a archive as well + esac + fi + ;; + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 +$as_echo "$enable_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 +$as_echo_n "checking whether to build static libraries... " >&6; } + # Make sure either enable_shared or enable_static is yes. + test yes = "$enable_shared" || enable_static=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 +$as_echo "$enable_static" >&6; } + + + + +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC=$lt_save_CC + + + + + + + + + + + + + + + + ac_config_commands="$ac_config_commands libtool" + + + + +# Only expand once: + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +# =========================== +# Find required base packages +# =========================== +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +struct stat; +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 +$as_echo_n "checking whether $CC understands -c and -o together... " >&6; } +if ${am_cv_prog_cc_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF + # Make sure it works both with $CC and with simple cc. + # Following AC_PROG_CC_C_O, we do the test twice because some + # compilers refuse to overwrite an existing .o file with -o, + # though they will create one. + am_cv_prog_cc_c_o=yes + for am_i in 1 2; do + if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 + ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } \ + && test -f conftest2.$ac_objext; then + : OK + else + am_cv_prog_cc_c_o=no + break + fi + done + rm -f core conftest* + unset am_i +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 +$as_echo "$am_cv_prog_cc_c_o" >&6; } +if test "$am_cv_prog_cc_c_o" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +depcc="$CC" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CC_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with '-c' and '-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok '-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if ${ac_cv_path_SED+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_SED" || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 + fi +else + ac_cv_path_SED=$SED +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed + + + +# ======================= +# Platform specific setup +# ======================= + + +case $host_os in + darwin* ) + DEAD_STRIP="-Wl,-dead_strip" + ;; + *) + DEAD_STRIP="-Wl,--gc-sections -Wl,--as-needed" + ;; +esac + + +# ================ +# Check for cflags +# ================ +# Check whether --enable-werror was given. +if test "${enable_werror+set}" = set; then : + enableval=$enable_werror; enable_werror="$enableval" +else + enable_werror=no + +fi + +if test x"$enable_werror" != "xno"; then : + + CFLAGS="$CFLAGS -Werror" + CXXFLAGS="$CXXFLAGS -Werror" + +fi +if test x"$GCC" = xyes; then : + + # Be tough with warnings and produce less careless code + CFLAGS="$CFLAGS -Wall -Wextra -pedantic -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2" + CXXFLAGS="$CXXFLAGS -Wall -Wextra -Wshadow -pedantic -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2" + +fi + +# ========= +# Find libs +# ========= +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lm" >&5 +$as_echo_n "checking for main in -lm... " >&6; } +if ${ac_cv_lib_m_main+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +int +main () +{ +return main (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_m_main=yes +else + ac_cv_lib_m_main=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_main" >&5 +$as_echo "$ac_cv_lib_m_main" >&6; } +if test "x$ac_cv_lib_m_main" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBM 1 +_ACEOF + + LIBS="-lm $LIBS" + +fi + + +# ===================== +# Prepare all .in files +# ===================== +ac_config_files="$ac_config_files Makefile libadmesh.pc" + + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + if test "x$cache_file" != "x/dev/null"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + if test ! -f "$cache_file" || test -h "$cache_file"; then + cat confcache >"$cache_file" + else + case $cache_file in #( + */* | ?:*) + mv -f confcache "$cache_file"$$ && + mv -f "$cache_file"$$ "$cache_file" ;; #( + *) + mv -f confcache "$cache_file" ;; + esac + fi + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +DEFS=-DHAVE_CONFIG_H + +ac_libobjs= +ac_ltlibobjs= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 +$as_echo_n "checking that generated files are newer than configure... " >&6; } + if test -n "$am_sleep_pid"; then + # Hide warnings about reused PIDs. + wait $am_sleep_pid 2>/dev/null + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 +$as_echo "done" >&6; } + if test -n "$EXEEXT"; then + am__EXEEXT_TRUE= + am__EXEEXT_FALSE='#' +else + am__EXEEXT_TRUE='#' + am__EXEEXT_FALSE= +fi + +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + as_fn_error $? "conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi + +: "${CONFIG_STATUS=./config.status}" +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false + +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by admesh $as_me 0.98.4'', which was +generated by GNU Autoconf 2.69. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + +case $ac_config_headers in *" +"*) set x $ac_config_headers; shift; ac_config_headers=$*;; +esac + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" +config_headers="$ac_config_headers" +config_commands="$ac_config_commands" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration commands: +$config_commands + +Report bugs to the package provider." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_version="\\ +admesh config.status 0.98.4'' +configured by $0, generated by GNU Autoconf 2.69, + with options \\"\$ac_cs_config\\" + +Copyright (C) 2012 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +MKDIR_P='$MKDIR_P' +AWK='$AWK' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=?*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_HEADERS " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + as_fn_error $? "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; + --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# +# INIT-COMMANDS +# +AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}" + + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' +macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' +enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' +pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' +enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' +enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' +shared_archive_member_spec='`$ECHO "$shared_archive_member_spec" | $SED "$delay_single_quote_subst"`' +SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' +ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' +PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' +host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' +host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' +host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' +build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' +build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' +build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' +SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' +Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' +GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' +EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' +FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' +LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' +NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' +LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' +max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' +ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' +exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' +lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' +lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' +lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' +lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' +lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' +reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' +reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' +OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' +deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' +file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' +file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' +want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' +DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' +sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' +AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' +AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' +archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' +STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' +RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' +old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' +old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' +old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' +lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' +CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' +CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' +compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' +GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_import='`$ECHO "$lt_cv_sys_global_symbol_to_import" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' +lt_cv_nm_interface='`$ECHO "$lt_cv_nm_interface" | $SED "$delay_single_quote_subst"`' +nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' +lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' +lt_cv_truncate_bin='`$ECHO "$lt_cv_truncate_bin" | $SED "$delay_single_quote_subst"`' +objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' +MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' +need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' +MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' +DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' +NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' +LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' +OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' +OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' +libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' +shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' +extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' +archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' +export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' +whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' +compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' +old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' +archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' +archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' +module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' +module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' +with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' +allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' +no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' +hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' +hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' +hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' +hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' +hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' +inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' +link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' +always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' +export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' +exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' +include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' +prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' +postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' +file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' +variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' +need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' +need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' +version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' +runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' +shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' +shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' +libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' +library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' +soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' +install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' +postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' +postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' +finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' +finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' +hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' +sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' +configure_time_dlsearch_path='`$ECHO "$configure_time_dlsearch_path" | $SED "$delay_single_quote_subst"`' +configure_time_lt_sys_library_path='`$ECHO "$configure_time_lt_sys_library_path" | $SED "$delay_single_quote_subst"`' +hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' +enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' +enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' +enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' +old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' +striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' + +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$1 +_LTECHO_EOF' +} + +# Quote evaled strings. +for var in SHELL \ +ECHO \ +PATH_SEPARATOR \ +SED \ +GREP \ +EGREP \ +FGREP \ +LD \ +NM \ +LN_S \ +lt_SP2NL \ +lt_NL2SP \ +reload_flag \ +OBJDUMP \ +deplibs_check_method \ +file_magic_cmd \ +file_magic_glob \ +want_nocaseglob \ +DLLTOOL \ +sharedlib_from_linklib_cmd \ +AR \ +AR_FLAGS \ +archiver_list_spec \ +STRIP \ +RANLIB \ +CC \ +CFLAGS \ +compiler \ +lt_cv_sys_global_symbol_pipe \ +lt_cv_sys_global_symbol_to_cdecl \ +lt_cv_sys_global_symbol_to_import \ +lt_cv_sys_global_symbol_to_c_name_address \ +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ +lt_cv_nm_interface \ +nm_file_list_spec \ +lt_cv_truncate_bin \ +lt_prog_compiler_no_builtin_flag \ +lt_prog_compiler_pic \ +lt_prog_compiler_wl \ +lt_prog_compiler_static \ +lt_cv_prog_compiler_c_o \ +need_locks \ +MANIFEST_TOOL \ +DSYMUTIL \ +NMEDIT \ +LIPO \ +OTOOL \ +OTOOL64 \ +shrext_cmds \ +export_dynamic_flag_spec \ +whole_archive_flag_spec \ +compiler_needs_object \ +with_gnu_ld \ +allow_undefined_flag \ +no_undefined_flag \ +hardcode_libdir_flag_spec \ +hardcode_libdir_separator \ +exclude_expsyms \ +include_expsyms \ +file_list_spec \ +variables_saved_for_relink \ +libname_spec \ +library_names_spec \ +soname_spec \ +install_override_mode \ +finish_eval \ +old_striplib \ +striplib; do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in reload_cmds \ +old_postinstall_cmds \ +old_postuninstall_cmds \ +old_archive_cmds \ +extract_expsyms_cmds \ +old_archive_from_new_cmds \ +old_archive_from_expsyms_cmds \ +archive_cmds \ +archive_expsym_cmds \ +module_cmds \ +module_expsym_cmds \ +export_symbols_cmds \ +prelink_cmds \ +postlink_cmds \ +postinstall_cmds \ +postuninstall_cmds \ +finish_cmds \ +sys_lib_search_path_spec \ +configure_time_dlsearch_path \ +configure_time_lt_sys_library_path; do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +ac_aux_dir='$ac_aux_dir' + +# See if we are running on zsh, and set the options that allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST +fi + + + PACKAGE='$PACKAGE' + VERSION='$VERSION' + RM='$RM' + ofile='$ofile' + + + + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "libadmesh.pc") CONFIG_FILES="$CONFIG_FILES libadmesh.pc" ;; + + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= ac_tmp= + trap 'exit_status=$? + : "${ac_tmp:=$tmp}" + { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 +ac_tmp=$tmp + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$ac_tmp/subs1.awk" && +_ACEOF + + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 +_ACEOF + +# VPATH may cause trouble with some makes, so we remove sole $(srcdir), +# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// +s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$ac_tmp/defines.awk" <<\_ACAWK || +BEGIN { +_ACEOF + +# Transform confdefs.h into an awk script `defines.awk', embedded as +# here-document in config.status, that substitutes the proper values into +# config.h.in to produce config.h. + +# Create a delimiter string that does not exist in confdefs.h, to ease +# handling of long lines. +ac_delim='%!_!# ' +for ac_last_try in false false :; do + ac_tt=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_tt"; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +# For the awk script, D is an array of macro values keyed by name, +# likewise P contains macro parameters if any. Preserve backslash +# newline sequences. + +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +sed -n ' +s/.\{148\}/&'"$ac_delim"'/g +t rset +:rset +s/^[ ]*#[ ]*define[ ][ ]*/ / +t def +d +:def +s/\\$// +t bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3"/p +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p +d +:bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3\\\\\\n"\\/p +t cont +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p +t cont +d +:cont +n +s/.\{148\}/&'"$ac_delim"'/g +t clear +:clear +s/\\$// +t bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/"/p +d +:bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p +b cont +' >$CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { + line = \$ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$ac_tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$ac_tmp/stdin" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ + >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ + "$ac_tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&2;} + + rm -f "$ac_tmp/stdin" + case $ac_file in + -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; + *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; + esac \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + ;; + :H) + # + # CONFIG_HEADER + # + if test x"$ac_file" != x-; then + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" + } >"$ac_tmp/config.h" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f "$ac_file" + mv "$ac_tmp/config.h" "$ac_file" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + fi + else + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error $? "could not create -" "$LINENO" 5 + fi +# Compute "$ac_file"'s index in $config_headers. +_am_arg="$ac_file" +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || +$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$_am_arg" : 'X\(//\)[^/]' \| \ + X"$_am_arg" : 'X\(//\)$' \| \ + X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$_am_arg" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'`/stamp-h$_am_stamp_count + ;; + + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { + # Older Autoconf quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + # TODO: see whether this extra hack can be removed once we start + # requiring Autoconf 2.70 or later. + case $CONFIG_FILES in #( + *\'*) : + eval set x "$CONFIG_FILES" ;; #( + *) : + set x $CONFIG_FILES ;; #( + *) : + ;; +esac + shift + # Used to flag and report bootstrapping failures. + am_rc=0 + for am_mf + do + # Strip MF so we end up with the name of the file. + am_mf=`$as_echo "$am_mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile which includes + # dependency-tracking related rules and includes. + # Grep'ing the whole file directly is not great: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ + || continue + am_dirpart=`$as_dirname -- "$am_mf" || +$as_expr X"$am_mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$am_mf" : 'X\(//\)[^/]' \| \ + X"$am_mf" : 'X\(//\)$' \| \ + X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$am_mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + am_filepart=`$as_basename -- "$am_mf" || +$as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \ + X"$am_mf" : 'X\(//\)$' \| \ + X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$am_mf" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + { echo "$as_me:$LINENO: cd "$am_dirpart" \ + && sed -e '/# am--include-marker/d' "$am_filepart" \ + | $MAKE -f - am--depfiles" >&5 + (cd "$am_dirpart" \ + && sed -e '/# am--include-marker/d' "$am_filepart" \ + | $MAKE -f - am--depfiles) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } || am_rc=$? + done + if test $am_rc -ne 0; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "Something went wrong bootstrapping makefile fragments + for automatic dependency tracking. Try re-running configure with the + '--disable-dependency-tracking' option to at least be able to build + the package (albeit without support for automatic dependency tracking). +See \`config.log' for more details" "$LINENO" 5; } + fi + { am_dirpart=; unset am_dirpart;} + { am_filepart=; unset am_filepart;} + { am_mf=; unset am_mf;} + { am_rc=; unset am_rc;} + rm -f conftest-deps.mk +} + ;; + "libtool":C) + + # See if we are running on zsh, and set the options that allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST + fi + + cfgfile=${ofile}T + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL +# Generated automatically by $as_me ($PACKAGE) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. + +# Provide generalized library-building support services. +# Written by Gordon Matzigkeit, 1996 + +# Copyright (C) 2014 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# GNU Libtool is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of of the License, or +# (at your option) any later version. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program or library that is built +# using GNU Libtool, you may include this file under the same +# distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + + +# The names of the tagged configurations supported by this script. +available_tags='' + +# Configured defaults for sys_lib_dlsearch_path munging. +: \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} + +# ### BEGIN LIBTOOL CONFIG + +# Which release of libtool.m4 was used? +macro_version=$macro_version +macro_revision=$macro_revision + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# What type of objects to build. +pic_mode=$pic_mode + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# Shared archive member basename,for filename based shared library versioning on AIX. +shared_archive_member_spec=$shared_archive_member_spec + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# An echo program that protects backslashes. +ECHO=$lt_ECHO + +# The PATH separator for the build system. +PATH_SEPARATOR=$lt_PATH_SEPARATOR + +# The host system. +host_alias=$host_alias +host=$host +host_os=$host_os + +# The build system. +build_alias=$build_alias +build=$build +build_os=$build_os + +# A sed program that does not truncate output. +SED=$lt_SED + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="\$SED -e 1s/^X//" + +# A grep program that handles long lines. +GREP=$lt_GREP + +# An ERE matcher. +EGREP=$lt_EGREP + +# A literal string matcher. +FGREP=$lt_FGREP + +# A BSD- or MS-compatible name lister. +NM=$lt_NM + +# Whether we need soft or hard links. +LN_S=$lt_LN_S + +# What is the maximum length of a command? +max_cmd_len=$max_cmd_len + +# Object file suffix (normally "o"). +objext=$ac_objext + +# Executable file suffix (normally ""). +exeext=$exeext + +# whether the shell understands "unset". +lt_unset=$lt_unset + +# turn spaces into newlines. +SP2NL=$lt_lt_SP2NL + +# turn newlines into spaces. +NL2SP=$lt_lt_NL2SP + +# convert \$build file names to \$host format. +to_host_file_cmd=$lt_cv_to_host_file_cmd + +# convert \$build files to toolchain format. +to_tool_file_cmd=$lt_cv_to_tool_file_cmd + +# An object symbol dumper. +OBJDUMP=$lt_OBJDUMP + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method = "file_magic". +file_magic_cmd=$lt_file_magic_cmd + +# How to find potential files when deplibs_check_method = "file_magic". +file_magic_glob=$lt_file_magic_glob + +# Find potential files using nocaseglob when deplibs_check_method = "file_magic". +want_nocaseglob=$lt_want_nocaseglob + +# DLL creation program. +DLLTOOL=$lt_DLLTOOL + +# Command to associate shared and link libraries. +sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd + +# The archiver. +AR=$lt_AR + +# Flags to create an archive. +AR_FLAGS=$lt_AR_FLAGS + +# How to feed a file listing to the archiver. +archiver_list_spec=$lt_archiver_list_spec + +# A symbol stripping program. +STRIP=$lt_STRIP + +# Commands used to install an old-style archive. +RANLIB=$lt_RANLIB +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Whether to use a lock for old archive extraction. +lock_old_archive_extraction=$lock_old_archive_extraction + +# A C compiler. +LTCC=$lt_CC + +# LTCC compiler flags. +LTCFLAGS=$lt_CFLAGS + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration. +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm into a list of symbols to manually relocate. +global_symbol_to_import=$lt_lt_cv_sys_global_symbol_to_import + +# Transform the output of nm in a C name address pair. +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# Transform the output of nm in a C name address pair when lib prefix is needed. +global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix + +# The name lister interface. +nm_interface=$lt_lt_cv_nm_interface + +# Specify filename containing input files for \$NM. +nm_file_list_spec=$lt_nm_file_list_spec + +# The root where to search for dependent libraries,and where our libraries should be installed. +lt_sysroot=$lt_sysroot + +# Command to truncate a binary pipe. +lt_truncate_bin=$lt_lt_cv_truncate_bin + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# Used to examine libraries when file_magic_cmd begins with "file". +MAGIC_CMD=$MAGIC_CMD + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# Manifest tool. +MANIFEST_TOOL=$lt_MANIFEST_TOOL + +# Tool to manipulate archived DWARF debug symbol files on Mac OS X. +DSYMUTIL=$lt_DSYMUTIL + +# Tool to change global to local symbols on Mac OS X. +NMEDIT=$lt_NMEDIT + +# Tool to manipulate fat objects and archives on Mac OS X. +LIPO=$lt_LIPO + +# ldd/readelf like tool for Mach-O binaries on Mac OS X. +OTOOL=$lt_OTOOL + +# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. +OTOOL64=$lt_OTOOL64 + +# Old archive suffix (normally "a"). +libext=$libext + +# Shared library suffix (normally ".so"). +shrext_cmds=$lt_shrext_cmds + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at link time. +variables_saved_for_relink=$lt_variables_saved_for_relink + +# Do we need the "lib" prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Library versioning type. +version_type=$version_type + +# Shared library runtime path variable. +runpath_var=$runpath_var + +# Shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Permission mode override for installation of shared libraries. +install_override_mode=$lt_install_override_mode + +# Command to use after installation of a shared archive. +postinstall_cmds=$lt_postinstall_cmds + +# Command to use after uninstallation of a shared archive. +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# As "finish_cmds", except a single script fragment to be evaled but +# not shown. +finish_eval=$lt_finish_eval + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Compile-time system search path for libraries. +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Detected run-time system search path for libraries. +sys_lib_dlsearch_path_spec=$lt_configure_time_dlsearch_path + +# Explicit LT_SYS_LIBRARY_PATH set during ./configure time. +configure_time_lt_sys_library_path=$lt_configure_time_lt_sys_library_path + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + + +# The linker used to build libraries. +LD=$lt_LD + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds + +# A language specific compiler. +CC=$lt_compiler + +# Is the compiler the GNU compiler? +with_gcc=$GCC + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds +archive_expsym_cmds=$lt_archive_expsym_cmds + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds +module_expsym_cmds=$lt_module_expsym_cmds + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator + +# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct + +# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \$shlibpath_var if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds + +# Commands necessary for finishing linking programs. +postlink_cmds=$lt_postlink_cmds + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action + +# ### END LIBTOOL CONFIG + +_LT_EOF + + cat <<'_LT_EOF' >> "$cfgfile" + +# ### BEGIN FUNCTIONS SHARED WITH CONFIGURE + +# func_munge_path_list VARIABLE PATH +# ----------------------------------- +# VARIABLE is name of variable containing _space_ separated list of +# directories to be munged by the contents of PATH, which is string +# having a format: +# "DIR[:DIR]:" +# string "DIR[ DIR]" will be prepended to VARIABLE +# ":DIR[:DIR]" +# string "DIR[ DIR]" will be appended to VARIABLE +# "DIRP[:DIRP]::[DIRA:]DIRA" +# string "DIRP[ DIRP]" will be prepended to VARIABLE and string +# "DIRA[ DIRA]" will be appended to VARIABLE +# "DIR[:DIR]" +# VARIABLE will be replaced by "DIR[ DIR]" +func_munge_path_list () +{ + case x$2 in + x) + ;; + *:) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" + ;; + x:*) + eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" + ;; + *::*) + eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" + eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" + ;; + *) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" + ;; + esac +} + + +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +func_cc_basename () +{ + for cc_temp in $*""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac + done + func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +} + + +# ### END FUNCTIONS SHARED WITH CONFIGURE + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test set != "${COLLECT_NAMES+set}"; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + +ltmain=$ac_aux_dir/ltmain.sh + + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '$q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" + + ;; + + esac +done # for ac_tag + + +as_fn_exit 0 +_ACEOF +ac_clean_files=$ac_clean_files_save + +test $ac_write_fail = 0 || + as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || as_fn_exit 1 +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi + + +# ============================================== +# Display final informations about configuration +# ============================================== +{ $as_echo "$as_me:${as_lineno-$LINENO}: +============================================================================== +Build configuration: + werror: ${enable_werror} +============================================================================== +" >&5 +$as_echo "$as_me: +============================================================================== +Build configuration: + werror: ${enable_werror} +============================================================================== +" >&6;} diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/configure.ac b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/configure.ac new file mode 100644 index 00000000..3cbae39e --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/configure.ac @@ -0,0 +1,90 @@ +dnl Process this file with autoconf to produce a configure script. + +AC_PREREQ([2.65]) + +# ==================== +# Version informations +# ==================== +m4_define([admesh_version_major],[0]) +m4_define([admesh_version_minor],[98]) +m4_define([admesh_version_micro],[4]) +m4_define([admesh_version_suffix],[]) +m4_define([admesh_version],[admesh_version_major.admesh_version_minor.admesh_version_micro''admesh_version_suffix]) + +# ============= +# Automake init +# ============= +AC_INIT([admesh],[admesh_version]) +AC_CONFIG_MACRO_DIR([m4]) +AM_CONFIG_HEADER([config.h]) +AM_INIT_AUTOMAKE([1.11 foreign no-dist-gzip dist-xz subdir-objects]) +AM_SILENT_RULES([yes]) +LT_INIT([disable-static pic-only]) +AC_LANG([C]) + +# =========================== +# Find required base packages +# =========================== +AC_PROG_CC +AC_PROG_INSTALL +AC_PROG_LIBTOOL +AC_PROG_SED +AC_PROG_MKDIR_P + +# ======================= +# Platform specific setup +# ======================= + +AC_CANONICAL_HOST +case $host_os in + darwin* ) + DEAD_STRIP="-Wl,-dead_strip" + ;; + *) + DEAD_STRIP="-Wl,--gc-sections -Wl,--as-needed" + ;; +esac +AC_SUBST(DEAD_STRIP) + +# ================ +# Check for cflags +# ================ +AC_ARG_ENABLE([werror], + [AS_HELP_STRING([--enable-werror], [Treat all warnings as errors, useful for development @<:@default=disabled@:>@])], + [enable_werror="$enableval"], + [enable_werror=no] +) +AS_IF([test x"$enable_werror" != "xno"], [ + CFLAGS="$CFLAGS -Werror" + CXXFLAGS="$CXXFLAGS -Werror" +]) +AS_IF([test x"$GCC" = xyes], [ + # Be tough with warnings and produce less careless code + CFLAGS="$CFLAGS -Wall -Wextra -pedantic -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2" + CXXFLAGS="$CXXFLAGS -Wall -Wextra -Wshadow -pedantic -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2" +]) + +# ========= +# Find libs +# ========= +AC_CHECK_LIB(m, main) + +# ===================== +# Prepare all .in files +# ===================== +AC_CONFIG_FILES([ +Makefile +libadmesh.pc +]) + +AC_OUTPUT + +# ============================================== +# Display final informations about configuration +# ============================================== +AC_MSG_NOTICE([ +============================================================================== +Build configuration: + werror: ${enable_werror} +============================================================================== +]) diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/depcomp b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/depcomp new file mode 100755 index 00000000..fc98710e --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/depcomp @@ -0,0 +1,791 @@ +#! /bin/sh +# depcomp - compile a program generating dependencies as side-effects + +scriptversion=2013-05-30.07; # UTC + +# Copyright (C) 1999-2014 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Originally written by Alexandre Oliva . + +case $1 in + '') + echo "$0: No command. Try '$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: depcomp [--help] [--version] PROGRAM [ARGS] + +Run PROGRAMS ARGS to compile a file, generating dependencies +as side-effects. + +Environment variables: + depmode Dependency tracking mode. + source Source file read by 'PROGRAMS ARGS'. + object Object file output by 'PROGRAMS ARGS'. + DEPDIR directory where to store dependencies. + depfile Dependency file to output. + tmpdepfile Temporary file to use when outputting dependencies. + libtool Whether libtool is used (yes/no). + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "depcomp $scriptversion" + exit $? + ;; +esac + +# Get the directory component of the given path, and save it in the +# global variables '$dir'. Note that this directory component will +# be either empty or ending with a '/' character. This is deliberate. +set_dir_from () +{ + case $1 in + */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; + *) dir=;; + esac +} + +# Get the suffix-stripped basename of the given path, and save it the +# global variable '$base'. +set_base_from () +{ + base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` +} + +# If no dependency file was actually created by the compiler invocation, +# we still have to create a dummy depfile, to avoid errors with the +# Makefile "include basename.Plo" scheme. +make_dummy_depfile () +{ + echo "#dummy" > "$depfile" +} + +# Factor out some common post-processing of the generated depfile. +# Requires the auxiliary global variable '$tmpdepfile' to be set. +aix_post_process_depfile () +{ + # If the compiler actually managed to produce a dependency file, + # post-process it. + if test -f "$tmpdepfile"; then + # Each line is of the form 'foo.o: dependency.h'. + # Do two passes, one to just change these to + # $object: dependency.h + # and one to simply output + # dependency.h: + # which is needed to avoid the deleted-header problem. + { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" + sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" + } > "$depfile" + rm -f "$tmpdepfile" + else + make_dummy_depfile + fi +} + +# A tabulation character. +tab=' ' +# A newline character. +nl=' +' +# Character ranges might be problematic outside the C locale. +# These definitions help. +upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ +lower=abcdefghijklmnopqrstuvwxyz +digits=0123456789 +alpha=${upper}${lower} + +if test -z "$depmode" || test -z "$source" || test -z "$object"; then + echo "depcomp: Variables source, object and depmode must be set" 1>&2 + exit 1 +fi + +# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. +depfile=${depfile-`echo "$object" | + sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} +tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} + +rm -f "$tmpdepfile" + +# Avoid interferences from the environment. +gccflag= dashmflag= + +# Some modes work just like other modes, but use different flags. We +# parameterize here, but still list the modes in the big case below, +# to make depend.m4 easier to write. Note that we *cannot* use a case +# here, because this file can only contain one case statement. +if test "$depmode" = hp; then + # HP compiler uses -M and no extra arg. + gccflag=-M + depmode=gcc +fi + +if test "$depmode" = dashXmstdout; then + # This is just like dashmstdout with a different argument. + dashmflag=-xM + depmode=dashmstdout +fi + +cygpath_u="cygpath -u -f -" +if test "$depmode" = msvcmsys; then + # This is just like msvisualcpp but w/o cygpath translation. + # Just convert the backslash-escaped backslashes to single forward + # slashes to satisfy depend.m4 + cygpath_u='sed s,\\\\,/,g' + depmode=msvisualcpp +fi + +if test "$depmode" = msvc7msys; then + # This is just like msvc7 but w/o cygpath translation. + # Just convert the backslash-escaped backslashes to single forward + # slashes to satisfy depend.m4 + cygpath_u='sed s,\\\\,/,g' + depmode=msvc7 +fi + +if test "$depmode" = xlc; then + # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. + gccflag=-qmakedep=gcc,-MF + depmode=gcc +fi + +case "$depmode" in +gcc3) +## gcc 3 implements dependency tracking that does exactly what +## we want. Yay! Note: for some reason libtool 1.4 doesn't like +## it if -MD -MP comes after the -MF stuff. Hmm. +## Unfortunately, FreeBSD c89 acceptance of flags depends upon +## the command line argument order; so add the flags where they +## appear in depend2.am. Note that the slowdown incurred here +## affects only configure: in makefiles, %FASTDEP% shortcuts this. + for arg + do + case $arg in + -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; + *) set fnord "$@" "$arg" ;; + esac + shift # fnord + shift # $arg + done + "$@" + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + mv "$tmpdepfile" "$depfile" + ;; + +gcc) +## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. +## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. +## (see the conditional assignment to $gccflag above). +## There are various ways to get dependency output from gcc. Here's +## why we pick this rather obscure method: +## - Don't want to use -MD because we'd like the dependencies to end +## up in a subdir. Having to rename by hand is ugly. +## (We might end up doing this anyway to support other compilers.) +## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like +## -MM, not -M (despite what the docs say). Also, it might not be +## supported by the other compilers which use the 'gcc' depmode. +## - Using -M directly means running the compiler twice (even worse +## than renaming). + if test -z "$gccflag"; then + gccflag=-MD, + fi + "$@" -Wp,"$gccflag$tmpdepfile" + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + # The second -e expression handles DOS-style file names with drive + # letters. + sed -e 's/^[^:]*: / /' \ + -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" +## This next piece of magic avoids the "deleted header file" problem. +## The problem is that when a header file which appears in a .P file +## is deleted, the dependency causes make to die (because there is +## typically no way to rebuild the header). We avoid this by adding +## dummy dependencies for each header file. Too bad gcc doesn't do +## this for us directly. +## Some versions of gcc put a space before the ':'. On the theory +## that the space means something, we add a space to the output as +## well. hp depmode also adds that space, but also prefixes the VPATH +## to the object. Take care to not repeat it in the output. +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ + | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +sgi) + if test "$libtool" = yes; then + "$@" "-Wp,-MDupdate,$tmpdepfile" + else + "$@" -MDupdate "$tmpdepfile" + fi + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + + if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files + echo "$object : \\" > "$depfile" + # Clip off the initial element (the dependent). Don't try to be + # clever and replace this with sed code, as IRIX sed won't handle + # lines with more than a fixed number of characters (4096 in + # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; + # the IRIX cc adds comments like '#:fec' to the end of the + # dependency line. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ + | tr "$nl" ' ' >> "$depfile" + echo >> "$depfile" + # The second pass generates a dummy entry for each header file. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ + >> "$depfile" + else + make_dummy_depfile + fi + rm -f "$tmpdepfile" + ;; + +xlc) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +aix) + # The C for AIX Compiler uses -M and outputs the dependencies + # in a .u file. In older versions, this file always lives in the + # current directory. Also, the AIX compiler puts '$object:' at the + # start of each line; $object doesn't have directory information. + # Version 6 uses the directory in both cases. + set_dir_from "$object" + set_base_from "$object" + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.u + tmpdepfile2=$base.u + tmpdepfile3=$dir.libs/$base.u + "$@" -Wc,-M + else + tmpdepfile1=$dir$base.u + tmpdepfile2=$dir$base.u + tmpdepfile3=$dir$base.u + "$@" -M + fi + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + do + test -f "$tmpdepfile" && break + done + aix_post_process_depfile + ;; + +tcc) + # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 + # FIXME: That version still under development at the moment of writing. + # Make that this statement remains true also for stable, released + # versions. + # It will wrap lines (doesn't matter whether long or short) with a + # trailing '\', as in: + # + # foo.o : \ + # foo.c \ + # foo.h \ + # + # It will put a trailing '\' even on the last line, and will use leading + # spaces rather than leading tabs (at least since its commit 0394caf7 + # "Emit spaces for -MD"). + "$@" -MD -MF "$tmpdepfile" + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. + # We have to change lines of the first kind to '$object: \'. + sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" + # And for each line of the second kind, we have to emit a 'dep.h:' + # dummy dependency, to avoid the deleted-header problem. + sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" + rm -f "$tmpdepfile" + ;; + +## The order of this option in the case statement is important, since the +## shell code in configure will try each of these formats in the order +## listed in this file. A plain '-MD' option would be understood by many +## compilers, so we must ensure this comes after the gcc and icc options. +pgcc) + # Portland's C compiler understands '-MD'. + # Will always output deps to 'file.d' where file is the root name of the + # source file under compilation, even if file resides in a subdirectory. + # The object file name does not affect the name of the '.d' file. + # pgcc 10.2 will output + # foo.o: sub/foo.c sub/foo.h + # and will wrap long lines using '\' : + # foo.o: sub/foo.c ... \ + # sub/foo.h ... \ + # ... + set_dir_from "$object" + # Use the source, not the object, to determine the base name, since + # that's sadly what pgcc will do too. + set_base_from "$source" + tmpdepfile=$base.d + + # For projects that build the same source file twice into different object + # files, the pgcc approach of using the *source* file root name can cause + # problems in parallel builds. Use a locking strategy to avoid stomping on + # the same $tmpdepfile. + lockdir=$base.d-lock + trap " + echo '$0: caught signal, cleaning up...' >&2 + rmdir '$lockdir' + exit 1 + " 1 2 13 15 + numtries=100 + i=$numtries + while test $i -gt 0; do + # mkdir is a portable test-and-set. + if mkdir "$lockdir" 2>/dev/null; then + # This process acquired the lock. + "$@" -MD + stat=$? + # Release the lock. + rmdir "$lockdir" + break + else + # If the lock is being held by a different process, wait + # until the winning process is done or we timeout. + while test -d "$lockdir" && test $i -gt 0; do + sleep 1 + i=`expr $i - 1` + done + fi + i=`expr $i - 1` + done + trap - 1 2 13 15 + if test $i -le 0; then + echo "$0: failed to acquire lock after $numtries attempts" >&2 + echo "$0: check lockdir '$lockdir'" >&2 + exit 1 + fi + + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + # Each line is of the form `foo.o: dependent.h', + # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process this invocation + # correctly. Breaking it into two sed invocations is a workaround. + sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ + | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp2) + # The "hp" stanza above does not work with aCC (C++) and HP's ia64 + # compilers, which have integrated preprocessors. The correct option + # to use with these is +Maked; it writes dependencies to a file named + # 'foo.d', which lands next to the object file, wherever that + # happens to be. + # Much of this is similar to the tru64 case; see comments there. + set_dir_from "$object" + set_base_from "$object" + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir.libs/$base.d + "$@" -Wc,+Maked + else + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir$base.d + "$@" +Maked + fi + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile1" "$tmpdepfile2" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" + # Add 'dependent.h:' lines. + sed -ne '2,${ + s/^ *// + s/ \\*$// + s/$/:/ + p + }' "$tmpdepfile" >> "$depfile" + else + make_dummy_depfile + fi + rm -f "$tmpdepfile" "$tmpdepfile2" + ;; + +tru64) + # The Tru64 compiler uses -MD to generate dependencies as a side + # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. + # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put + # dependencies in 'foo.d' instead, so we check for that too. + # Subdirectories are respected. + set_dir_from "$object" + set_base_from "$object" + + if test "$libtool" = yes; then + # Libtool generates 2 separate objects for the 2 libraries. These + # two compilations output dependencies in $dir.libs/$base.o.d and + # in $dir$base.o.d. We have to check for both files, because + # one of the two compilations can be disabled. We should prefer + # $dir$base.o.d over $dir.libs/$base.o.d because the latter is + # automatically cleaned when .libs/ is deleted, while ignoring + # the former would cause a distcleancheck panic. + tmpdepfile1=$dir$base.o.d # libtool 1.5 + tmpdepfile2=$dir.libs/$base.o.d # Likewise. + tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 + "$@" -Wc,-MD + else + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir$base.d + tmpdepfile3=$dir$base.d + "$@" -MD + fi + + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + do + test -f "$tmpdepfile" && break + done + # Same post-processing that is required for AIX mode. + aix_post_process_depfile + ;; + +msvc7) + if test "$libtool" = yes; then + showIncludes=-Wc,-showIncludes + else + showIncludes=-showIncludes + fi + "$@" $showIncludes > "$tmpdepfile" + stat=$? + grep -v '^Note: including file: ' "$tmpdepfile" + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + # The first sed program below extracts the file names and escapes + # backslashes for cygpath. The second sed program outputs the file + # name when reading, but also accumulates all include files in the + # hold buffer in order to output them again at the end. This only + # works with sed implementations that can handle large buffers. + sed < "$tmpdepfile" -n ' +/^Note: including file: *\(.*\)/ { + s//\1/ + s/\\/\\\\/g + p +}' | $cygpath_u | sort -u | sed -n ' +s/ /\\ /g +s/\(.*\)/'"$tab"'\1 \\/p +s/.\(.*\) \\/\1:/ +H +$ { + s/.*/'"$tab"'/ + G + p +}' >> "$depfile" + echo >> "$depfile" # make sure the fragment doesn't end with a backslash + rm -f "$tmpdepfile" + ;; + +msvc7msys) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +#nosideeffect) + # This comment above is used by automake to tell side-effect + # dependency tracking mechanisms from slower ones. + +dashmstdout) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout, regardless of -o. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + # Remove '-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + test -z "$dashmflag" && dashmflag=-M + # Require at least two characters before searching for ':' + # in the target name. This is to cope with DOS-style filenames: + # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. + "$@" $dashmflag | + sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process this sed invocation + # correctly. Breaking it into two sed invocations is a workaround. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ + | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +dashXmstdout) + # This case only exists to satisfy depend.m4. It is never actually + # run, as this mode is specially recognized in the preamble. + exit 1 + ;; + +makedepend) + "$@" || exit $? + # Remove any Libtool call + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + # X makedepend + shift + cleared=no eat=no + for arg + do + case $cleared in + no) + set ""; shift + cleared=yes ;; + esac + if test $eat = yes; then + eat=no + continue + fi + case "$arg" in + -D*|-I*) + set fnord "$@" "$arg"; shift ;; + # Strip any option that makedepend may not understand. Remove + # the object too, otherwise makedepend will parse it as a source file. + -arch) + eat=yes ;; + -*|$object) + ;; + *) + set fnord "$@" "$arg"; shift ;; + esac + done + obj_suffix=`echo "$object" | sed 's/^.*\././'` + touch "$tmpdepfile" + ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" + rm -f "$depfile" + # makedepend may prepend the VPATH from the source file name to the object. + # No need to regex-escape $object, excess matching of '.' is harmless. + sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process the last invocation + # correctly. Breaking it into two sed invocations is a workaround. + sed '1,2d' "$tmpdepfile" \ + | tr ' ' "$nl" \ + | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ + | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" "$tmpdepfile".bak + ;; + +cpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + # Remove '-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + "$@" -E \ + | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ + -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ + | sed '$ s: \\$::' > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + cat < "$tmpdepfile" >> "$depfile" + sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvisualcpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + IFS=" " + for arg + do + case "$arg" in + -o) + shift + ;; + $object) + shift + ;; + "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") + set fnord "$@" + shift + shift + ;; + *) + set fnord "$@" "$arg" + shift + shift + ;; + esac + done + "$@" -E 2>/dev/null | + sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" + echo "$tab" >> "$depfile" + sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvcmsys) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +none) + exec "$@" + ;; + +*) + echo "Unknown depmode $depmode" 1>&2 + exit 1 + ;; +esac + +exit 0 + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/install-sh b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/install-sh new file mode 100755 index 00000000..377bb868 --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/install-sh @@ -0,0 +1,527 @@ +#!/bin/sh +# install - install a program, script, or datafile + +scriptversion=2011-11-20.07; # UTC + +# This originates from X11R5 (mit/util/scripts/install.sh), which was +# later released in X11R6 (xc/config/util/install.sh) with the +# following copyright and license. +# +# Copyright (C) 1994 X Consortium +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- +# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# +# Except as contained in this notice, the name of the X Consortium shall not +# be used in advertising or otherwise to promote the sale, use or other deal- +# ings in this Software without prior written authorization from the X Consor- +# tium. +# +# +# FSF changes to this file are in the public domain. +# +# Calling this script install-sh is preferred over install.sh, to prevent +# 'make' implicit rules from creating a file called install from it +# when there is no Makefile. +# +# This script is compatible with the BSD install script, but was written +# from scratch. + +nl=' +' +IFS=" "" $nl" + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit=${DOITPROG-} +if test -z "$doit"; then + doit_exec=exec +else + doit_exec=$doit +fi + +# Put in absolute file names if you don't have them in your path; +# or use environment vars. + +chgrpprog=${CHGRPPROG-chgrp} +chmodprog=${CHMODPROG-chmod} +chownprog=${CHOWNPROG-chown} +cmpprog=${CMPPROG-cmp} +cpprog=${CPPROG-cp} +mkdirprog=${MKDIRPROG-mkdir} +mvprog=${MVPROG-mv} +rmprog=${RMPROG-rm} +stripprog=${STRIPPROG-strip} + +posix_glob='?' +initialize_posix_glob=' + test "$posix_glob" != "?" || { + if (set -f) 2>/dev/null; then + posix_glob= + else + posix_glob=: + fi + } +' + +posix_mkdir= + +# Desired mode of installed file. +mode=0755 + +chgrpcmd= +chmodcmd=$chmodprog +chowncmd= +mvcmd=$mvprog +rmcmd="$rmprog -f" +stripcmd= + +src= +dst= +dir_arg= +dst_arg= + +copy_on_change=false +no_target_directory= + +usage="\ +Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE + or: $0 [OPTION]... SRCFILES... DIRECTORY + or: $0 [OPTION]... -t DIRECTORY SRCFILES... + or: $0 [OPTION]... -d DIRECTORIES... + +In the 1st form, copy SRCFILE to DSTFILE. +In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. +In the 4th, create DIRECTORIES. + +Options: + --help display this help and exit. + --version display version info and exit. + + -c (ignored) + -C install only if different (preserve the last data modification time) + -d create directories instead of installing files. + -g GROUP $chgrpprog installed files to GROUP. + -m MODE $chmodprog installed files to MODE. + -o USER $chownprog installed files to USER. + -s $stripprog installed files. + -t DIRECTORY install into DIRECTORY. + -T report an error if DSTFILE is a directory. + +Environment variables override the default commands: + CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG + RMPROG STRIPPROG +" + +while test $# -ne 0; do + case $1 in + -c) ;; + + -C) copy_on_change=true;; + + -d) dir_arg=true;; + + -g) chgrpcmd="$chgrpprog $2" + shift;; + + --help) echo "$usage"; exit $?;; + + -m) mode=$2 + case $mode in + *' '* | *' '* | *' +'* | *'*'* | *'?'* | *'['*) + echo "$0: invalid mode: $mode" >&2 + exit 1;; + esac + shift;; + + -o) chowncmd="$chownprog $2" + shift;; + + -s) stripcmd=$stripprog;; + + -t) dst_arg=$2 + # Protect names problematic for 'test' and other utilities. + case $dst_arg in + -* | [=\(\)!]) dst_arg=./$dst_arg;; + esac + shift;; + + -T) no_target_directory=true;; + + --version) echo "$0 $scriptversion"; exit $?;; + + --) shift + break;; + + -*) echo "$0: invalid option: $1" >&2 + exit 1;; + + *) break;; + esac + shift +done + +if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then + # When -d is used, all remaining arguments are directories to create. + # When -t is used, the destination is already specified. + # Otherwise, the last argument is the destination. Remove it from $@. + for arg + do + if test -n "$dst_arg"; then + # $@ is not empty: it contains at least $arg. + set fnord "$@" "$dst_arg" + shift # fnord + fi + shift # arg + dst_arg=$arg + # Protect names problematic for 'test' and other utilities. + case $dst_arg in + -* | [=\(\)!]) dst_arg=./$dst_arg;; + esac + done +fi + +if test $# -eq 0; then + if test -z "$dir_arg"; then + echo "$0: no input file specified." >&2 + exit 1 + fi + # It's OK to call 'install-sh -d' without argument. + # This can happen when creating conditional directories. + exit 0 +fi + +if test -z "$dir_arg"; then + do_exit='(exit $ret); exit $ret' + trap "ret=129; $do_exit" 1 + trap "ret=130; $do_exit" 2 + trap "ret=141; $do_exit" 13 + trap "ret=143; $do_exit" 15 + + # Set umask so as not to create temps with too-generous modes. + # However, 'strip' requires both read and write access to temps. + case $mode in + # Optimize common cases. + *644) cp_umask=133;; + *755) cp_umask=22;; + + *[0-7]) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw='% 200' + fi + cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; + *) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw=,u+rw + fi + cp_umask=$mode$u_plus_rw;; + esac +fi + +for src +do + # Protect names problematic for 'test' and other utilities. + case $src in + -* | [=\(\)!]) src=./$src;; + esac + + if test -n "$dir_arg"; then + dst=$src + dstdir=$dst + test -d "$dstdir" + dstdir_status=$? + else + + # Waiting for this to be detected by the "$cpprog $src $dsttmp" command + # might cause directories to be created, which would be especially bad + # if $src (and thus $dsttmp) contains '*'. + if test ! -f "$src" && test ! -d "$src"; then + echo "$0: $src does not exist." >&2 + exit 1 + fi + + if test -z "$dst_arg"; then + echo "$0: no destination specified." >&2 + exit 1 + fi + dst=$dst_arg + + # If destination is a directory, append the input filename; won't work + # if double slashes aren't ignored. + if test -d "$dst"; then + if test -n "$no_target_directory"; then + echo "$0: $dst_arg: Is a directory" >&2 + exit 1 + fi + dstdir=$dst + dst=$dstdir/`basename "$src"` + dstdir_status=0 + else + # Prefer dirname, but fall back on a substitute if dirname fails. + dstdir=` + (dirname "$dst") 2>/dev/null || + expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$dst" : 'X\(//\)[^/]' \| \ + X"$dst" : 'X\(//\)$' \| \ + X"$dst" : 'X\(/\)' \| . 2>/dev/null || + echo X"$dst" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q' + ` + + test -d "$dstdir" + dstdir_status=$? + fi + fi + + obsolete_mkdir_used=false + + if test $dstdir_status != 0; then + case $posix_mkdir in + '') + # Create intermediate dirs using mode 755 as modified by the umask. + # This is like FreeBSD 'install' as of 1997-10-28. + umask=`umask` + case $stripcmd.$umask in + # Optimize common cases. + *[2367][2367]) mkdir_umask=$umask;; + .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; + + *[0-7]) + mkdir_umask=`expr $umask + 22 \ + - $umask % 100 % 40 + $umask % 20 \ + - $umask % 10 % 4 + $umask % 2 + `;; + *) mkdir_umask=$umask,go-w;; + esac + + # With -d, create the new directory with the user-specified mode. + # Otherwise, rely on $mkdir_umask. + if test -n "$dir_arg"; then + mkdir_mode=-m$mode + else + mkdir_mode= + fi + + posix_mkdir=false + case $umask in + *[123567][0-7][0-7]) + # POSIX mkdir -p sets u+wx bits regardless of umask, which + # is incompatible with FreeBSD 'install' when (umask & 300) != 0. + ;; + *) + tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ + trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 + + if (umask $mkdir_umask && + exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 + then + if test -z "$dir_arg" || { + # Check for POSIX incompatibilities with -m. + # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or + # other-writable bit of parent directory when it shouldn't. + # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. + ls_ld_tmpdir=`ls -ld "$tmpdir"` + case $ls_ld_tmpdir in + d????-?r-*) different_mode=700;; + d????-?--*) different_mode=755;; + *) false;; + esac && + $mkdirprog -m$different_mode -p -- "$tmpdir" && { + ls_ld_tmpdir_1=`ls -ld "$tmpdir"` + test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" + } + } + then posix_mkdir=: + fi + rmdir "$tmpdir/d" "$tmpdir" + else + # Remove any dirs left behind by ancient mkdir implementations. + rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null + fi + trap '' 0;; + esac;; + esac + + if + $posix_mkdir && ( + umask $mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" + ) + then : + else + + # The umask is ridiculous, or mkdir does not conform to POSIX, + # or it failed possibly due to a race condition. Create the + # directory the slow way, step by step, checking for races as we go. + + case $dstdir in + /*) prefix='/';; + [-=\(\)!]*) prefix='./';; + *) prefix='';; + esac + + eval "$initialize_posix_glob" + + oIFS=$IFS + IFS=/ + $posix_glob set -f + set fnord $dstdir + shift + $posix_glob set +f + IFS=$oIFS + + prefixes= + + for d + do + test X"$d" = X && continue + + prefix=$prefix$d + if test -d "$prefix"; then + prefixes= + else + if $posix_mkdir; then + (umask=$mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break + # Don't fail if two instances are running concurrently. + test -d "$prefix" || exit 1 + else + case $prefix in + *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; + *) qprefix=$prefix;; + esac + prefixes="$prefixes '$qprefix'" + fi + fi + prefix=$prefix/ + done + + if test -n "$prefixes"; then + # Don't fail if two instances are running concurrently. + (umask $mkdir_umask && + eval "\$doit_exec \$mkdirprog $prefixes") || + test -d "$dstdir" || exit 1 + obsolete_mkdir_used=true + fi + fi + fi + + if test -n "$dir_arg"; then + { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && + { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || + test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 + else + + # Make a couple of temp file names in the proper directory. + dsttmp=$dstdir/_inst.$$_ + rmtmp=$dstdir/_rm.$$_ + + # Trap to clean up those temp files at exit. + trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 + + # Copy the file name to the temp name. + (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && + + # and set any options; do chmod last to preserve setuid bits. + # + # If any of these fail, we abort the whole thing. If we want to + # ignore errors from any of these, just make sure not to ignore + # errors from the above "$doit $cpprog $src $dsttmp" command. + # + { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && + { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && + { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && + + # If -C, don't bother to copy if it wouldn't change the file. + if $copy_on_change && + old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && + new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && + + eval "$initialize_posix_glob" && + $posix_glob set -f && + set X $old && old=:$2:$4:$5:$6 && + set X $new && new=:$2:$4:$5:$6 && + $posix_glob set +f && + + test "$old" = "$new" && + $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 + then + rm -f "$dsttmp" + else + # Rename the file to the real destination. + $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || + + # The rename failed, perhaps because mv can't rename something else + # to itself, or perhaps because mv is so ancient that it does not + # support -f. + { + # Now remove or move aside any old file at destination location. + # We try this two ways since rm can't unlink itself on some + # systems and the destination file might be busy for other + # reasons. In this case, the final cleanup might fail but the new + # file should still install successfully. + { + test ! -f "$dst" || + $doit $rmcmd -f "$dst" 2>/dev/null || + { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && + { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } + } || + { echo "$0: cannot unlink or rename $dst" >&2 + (exit 1); exit 1 + } + } && + + # Now rename the file to the real destination. + $doit $mvcmd "$dsttmp" "$dst" + } + fi || exit 1 + + trap '' 0 + fi +done + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/libadmesh.la b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/libadmesh.la new file mode 100644 index 00000000..8fef8510 --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/libadmesh.la @@ -0,0 +1,41 @@ +# libadmesh.la - a libtool library file +# Generated by libtool (GNU libtool) 2.4.6 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# The name that we can dlopen(3). +dlname='libadmesh.so.1' + +# Names of this library. +library_names='libadmesh.so.1.0.0 libadmesh.so.1 libadmesh.so' + +# The name of the static archive. +old_library='' + +# Linker flags that cannot go in dependency_libs. +inherited_linker_flags='' + +# Libraries that this one depends upon. +dependency_libs=' -lm' + +# Names of additional weak libraries provided by this library +weak_library_names='' + +# Version information for libadmesh. +current=1 +age=0 +revision=0 + +# Is this an already installed library? +installed=no + +# Should we warn about portability when linking against -modules? +shouldnotlink=no + +# Files to dlopen/dlpreopen +dlopen='' +dlpreopen='' + +# Directory that this library needs to be installed in: +libdir='/usr/local/lib' diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/libadmesh.pc b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/libadmesh.pc new file mode 100644 index 00000000..d98d38c9 --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/libadmesh.pc @@ -0,0 +1,11 @@ +prefix=/usr/local +exec_prefix=${prefix} +libdir=${exec_prefix}/lib +includedir=${prefix}/include + +Name: libadmesh +Description: Library for woring with admesh +Version: 0.98.4 +Libs: -L${libdir} -ladmesh +Libs.private: +Cflags: -I${includedir} diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/libadmesh.pc.in b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/libadmesh.pc.in new file mode 100644 index 00000000..53042e3c --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/libadmesh.pc.in @@ -0,0 +1,11 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: libadmesh +Description: Library for woring with admesh +Version: @VERSION@ +Libs: -L${libdir} -ladmesh +Libs.private: +Cflags: -I${includedir} diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/libtool b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/libtool new file mode 100755 index 00000000..d8503c51 --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/libtool @@ -0,0 +1,11645 @@ +#! /bin/bash +# Generated automatically by config.status (admesh) 0.98.4 +# Libtool was configured on host tomator: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. + +# Provide generalized library-building support services. +# Written by Gordon Matzigkeit, 1996 + +# Copyright (C) 2014 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# GNU Libtool is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of of the License, or +# (at your option) any later version. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program or library that is built +# using GNU Libtool, you may include this file under the same +# distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + + +# The names of the tagged configurations supported by this script. +available_tags='' + +# Configured defaults for sys_lib_dlsearch_path munging. +: ${LT_SYS_LIBRARY_PATH=""} + +# ### BEGIN LIBTOOL CONFIG + +# Which release of libtool.m4 was used? +macro_version=2.4.6 +macro_revision=2.4.6 + +# Whether or not to build static libraries. +build_old_libs=no + +# What type of objects to build. +pic_mode=yes + +# Whether or not to build shared libraries. +build_libtool_libs=yes + +# Whether or not to optimize for fast installation. +fast_install=needless + +# Shared archive member basename,for filename based shared library versioning on AIX. +shared_archive_member_spec= + +# Shell to use when invoking shell scripts. +SHELL="/bin/bash" + +# An echo program that protects backslashes. +ECHO="printf %s\\n" + +# The PATH separator for the build system. +PATH_SEPARATOR=":" + +# The host system. +host_alias= +host=x86_64-unknown-linux-gnu +host_os=linux-gnu + +# The build system. +build_alias= +build=x86_64-unknown-linux-gnu +build_os=linux-gnu + +# A sed program that does not truncate output. +SED="/usr/bin/sed" + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="$SED -e 1s/^X//" + +# A grep program that handles long lines. +GREP="/usr/bin/grep" + +# An ERE matcher. +EGREP="/usr/bin/grep -E" + +# A literal string matcher. +FGREP="/usr/bin/grep -F" + +# A BSD- or MS-compatible name lister. +NM="/usr/bin/nm -B" + +# Whether we need soft or hard links. +LN_S="ln -s" + +# What is the maximum length of a command? +max_cmd_len=1572864 + +# Object file suffix (normally "o"). +objext=o + +# Executable file suffix (normally ""). +exeext= + +# whether the shell understands "unset". +lt_unset=unset + +# turn spaces into newlines. +SP2NL="tr \\040 \\012" + +# turn newlines into spaces. +NL2SP="tr \\015\\012 \\040\\040" + +# convert $build file names to $host format. +to_host_file_cmd=func_convert_file_noop + +# convert $build files to toolchain format. +to_tool_file_cmd=func_convert_file_noop + +# An object symbol dumper. +OBJDUMP="objdump" + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method="pass_all" + +# Command to use when deplibs_check_method = "file_magic". +file_magic_cmd="\$MAGIC_CMD" + +# How to find potential files when deplibs_check_method = "file_magic". +file_magic_glob="" + +# Find potential files using nocaseglob when deplibs_check_method = "file_magic". +want_nocaseglob="no" + +# DLL creation program. +DLLTOOL="false" + +# Command to associate shared and link libraries. +sharedlib_from_linklib_cmd="printf %s\\n" + +# The archiver. +AR="ar" + +# Flags to create an archive. +AR_FLAGS="cru" + +# How to feed a file listing to the archiver. +archiver_list_spec="@" + +# A symbol stripping program. +STRIP="strip" + +# Commands used to install an old-style archive. +RANLIB="ranlib" +old_postinstall_cmds="chmod 644 \$oldlib~\$RANLIB \$tool_oldlib" +old_postuninstall_cmds="" + +# Whether to use a lock for old archive extraction. +lock_old_archive_extraction=no + +# A C compiler. +LTCC="gcc" + +# LTCC compiler flags. +LTCFLAGS="-g -O2 -Wall -Wextra -pedantic -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2" + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe="sed -n -e 's/^.*[ ]\\([ABCDGIRSTW][ABCDGIRSTW]*\\)[ ][ ]*\\([_A-Za-z][_A-Za-z0-9]*\\)\$/\\1 \\2 \\2/p' | sed '/ __gnu_lto/d'" + +# Transform the output of nm in a proper C declaration. +global_symbol_to_cdecl="sed -n -e 's/^T .* \\(.*\\)\$/extern int \\1();/p' -e 's/^[ABCDGIRSTW][ABCDGIRSTW]* .* \\(.*\\)\$/extern char \\1;/p'" + +# Transform the output of nm into a list of symbols to manually relocate. +global_symbol_to_import="" + +# Transform the output of nm in a C name address pair. +global_symbol_to_c_name_address="sed -n -e 's/^: \\(.*\\) .*\$/ {\"\\1\", (void *) 0},/p' -e 's/^[ABCDGIRSTW][ABCDGIRSTW]* .* \\(.*\\)\$/ {\"\\1\", (void *) \\&\\1},/p'" + +# Transform the output of nm in a C name address pair when lib prefix is needed. +global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \\(.*\\) .*\$/ {\"\\1\", (void *) 0},/p' -e 's/^[ABCDGIRSTW][ABCDGIRSTW]* .* \\(lib.*\\)\$/ {\"\\1\", (void *) \\&\\1},/p' -e 's/^[ABCDGIRSTW][ABCDGIRSTW]* .* \\(.*\\)\$/ {\"lib\\1\", (void *) \\&\\1},/p'" + +# The name lister interface. +nm_interface="BSD nm" + +# Specify filename containing input files for $NM. +nm_file_list_spec="@" + +# The root where to search for dependent libraries,and where our libraries should be installed. +lt_sysroot= + +# Command to truncate a binary pipe. +lt_truncate_bin="/usr/bin/dd bs=4096 count=1" + +# The name of the directory that contains temporary libtool files. +objdir=.libs + +# Used to examine libraries when file_magic_cmd begins with "file". +MAGIC_CMD=file + +# Must we lock files when doing compilation? +need_locks="no" + +# Manifest tool. +MANIFEST_TOOL=":" + +# Tool to manipulate archived DWARF debug symbol files on Mac OS X. +DSYMUTIL="" + +# Tool to change global to local symbols on Mac OS X. +NMEDIT="" + +# Tool to manipulate fat objects and archives on Mac OS X. +LIPO="" + +# ldd/readelf like tool for Mach-O binaries on Mac OS X. +OTOOL="" + +# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. +OTOOL64="" + +# Old archive suffix (normally "a"). +libext=a + +# Shared library suffix (normally ".so"). +shrext_cmds=".so" + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds="" + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at link time. +variables_saved_for_relink="PATH LD_LIBRARY_PATH LD_RUN_PATH GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" + +# Do we need the "lib" prefix for modules? +need_lib_prefix=no + +# Do we need a version for libraries? +need_version=no + +# Library versioning type. +version_type=linux + +# Shared library runtime path variable. +runpath_var=LD_RUN_PATH + +# Shared library path variable. +shlibpath_var=LD_LIBRARY_PATH + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=yes + +# Format of library name prefix. +libname_spec="lib\$name" + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME +library_names_spec="\$libname\$release\$shared_ext\$versuffix \$libname\$release\$shared_ext\$major \$libname\$shared_ext" + +# The coded name of the library, if different from the real name. +soname_spec="\$libname\$release\$shared_ext\$major" + +# Permission mode override for installation of shared libraries. +install_override_mode="" + +# Command to use after installation of a shared archive. +postinstall_cmds="" + +# Command to use after uninstallation of a shared archive. +postuninstall_cmds="" + +# Commands used to finish a libtool library installation in a directory. +finish_cmds="PATH=\\\"\\\$PATH:/sbin\\\" ldconfig -n \$libdir" + +# As "finish_cmds", except a single script fragment to be evaled but +# not shown. +finish_eval="" + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=yes + +# Compile-time system search path for libraries. +sys_lib_search_path_spec="/usr/lib/gcc/x86_64-linux-gnu/9 /usr/lib/x86_64-linux-gnu /usr/lib /lib/x86_64-linux-gnu /lib " + +# Detected run-time system search path for libraries. +sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib /usr/lib/x86_64-linux-gnu/libfakeroot /usr/local/lib/i386-linux-gnu /lib/i386-linux-gnu /usr/lib/i386-linux-gnu /usr/local/lib/i686-linux-gnu /lib/i686-linux-gnu /usr/lib/i686-linux-gnu /usr/local/lib /usr/local/lib/x86_64-linux-gnu /lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu /lib32 /usr/lib32 " + +# Explicit LT_SYS_LIBRARY_PATH set during ./configure time. +configure_time_lt_sys_library_path="" + +# Whether dlopen is supported. +dlopen_support=unknown + +# Whether dlopen of programs is supported. +dlopen_self=unknown + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=unknown + +# Commands to strip libraries. +old_striplib="strip --strip-debug" +striplib="strip --strip-unneeded" + + +# The linker used to build libraries. +LD="/usr/bin/ld -m elf_x86_64" + +# How to create reloadable object files. +reload_flag=" -r" +reload_cmds="\$LD\$reload_flag -o \$output\$reload_objs" + +# Commands used to build an old-style archive. +old_archive_cmds="\$AR \$AR_FLAGS \$oldlib\$oldobjs~\$RANLIB \$tool_oldlib" + +# A language specific compiler. +CC="gcc" + +# Is the compiler the GNU compiler? +with_gcc=yes + +# Compiler flag to turn off builtin functions. +no_builtin_flag=" -fno-builtin" + +# Additional compiler flags for building library objects. +pic_flag=" -fPIC -DPIC" + +# How to pass a linker flag through the compiler. +wl="-Wl," + +# Compiler flag to prevent dynamic linking. +link_static_flag="-static" + +# Does compiler simultaneously support -c and -o options? +compiler_c_o="yes" + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=no + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=no + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec="\$wl--export-dynamic" + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec="\$wl--whole-archive\$convenience \$wl--no-whole-archive" + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object="no" + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds="" + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds="" + +# Commands used to build a shared archive. +archive_cmds="\$CC -shared \$pic_flag \$libobjs \$deplibs \$compiler_flags \$wl-soname \$wl\$soname -o \$lib" +archive_expsym_cmds="echo \\\"{ global:\\\" > \$output_objdir/\$libname.ver~ + cat \$export_symbols | sed -e \\\"s/\\\\(.*\\\\)/\\\\1;/\\\" >> \$output_objdir/\$libname.ver~ + echo \\\"local: *; };\\\" >> \$output_objdir/\$libname.ver~ + \$CC -shared \$pic_flag \$libobjs \$deplibs \$compiler_flags \$wl-soname \$wl\$soname \$wl-version-script \$wl\$output_objdir/\$libname.ver -o \$lib" + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds="" +module_expsym_cmds="" + +# Whether we are building with GNU ld or not. +with_gnu_ld="yes" + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag="" + +# Flag that enforces no undefined symbols. +no_undefined_flag="" + +# Flag to hardcode $libdir into a binary during linking. +# This must work even if $libdir does not exist +hardcode_libdir_flag_spec="\$wl-rpath \$wl\$libdir" + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator="" + +# Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=no + +# Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting $shlibpath_var if the +# library is relocated. +hardcode_direct_absolute=no + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=no + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=unsupported + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=no + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=no + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=unknown + +# Set to "yes" if exported symbols are required. +always_export_symbols=no + +# The commands to list exported symbols. +export_symbols_cmds="\$NM \$libobjs \$convenience | \$global_symbol_pipe | \$SED 's/.* //' | sort | uniq > \$export_symbols" + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms="_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*" + +# Symbols that must always be exported. +include_expsyms="" + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds="" + +# Commands necessary for finishing linking programs. +postlink_cmds="" + +# Specify filename containing input files. +file_list_spec="" + +# How to hardcode a shared library path into an executable. +hardcode_action=immediate + +# ### END LIBTOOL CONFIG + + +# ### BEGIN FUNCTIONS SHARED WITH CONFIGURE + +# func_munge_path_list VARIABLE PATH +# ----------------------------------- +# VARIABLE is name of variable containing _space_ separated list of +# directories to be munged by the contents of PATH, which is string +# having a format: +# "DIR[:DIR]:" +# string "DIR[ DIR]" will be prepended to VARIABLE +# ":DIR[:DIR]" +# string "DIR[ DIR]" will be appended to VARIABLE +# "DIRP[:DIRP]::[DIRA:]DIRA" +# string "DIRP[ DIRP]" will be prepended to VARIABLE and string +# "DIRA[ DIRA]" will be appended to VARIABLE +# "DIR[:DIR]" +# VARIABLE will be replaced by "DIR[ DIR]" +func_munge_path_list () +{ + case x$2 in + x) + ;; + *:) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" + ;; + x:*) + eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" + ;; + *::*) + eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" + eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" + ;; + *) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" + ;; + esac +} + + +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +func_cc_basename () +{ + for cc_temp in $*""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac + done + func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +} + + +# ### END FUNCTIONS SHARED WITH CONFIGURE + +#! /bin/sh +## DO NOT EDIT - This file generated from ./build-aux/ltmain.in +## by inline-source v2014-01-03.01 + +# libtool (GNU libtool) 2.4.6 +# Provide generalized library-building support services. +# Written by Gordon Matzigkeit , 1996 + +# Copyright (C) 1996-2015 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# GNU Libtool is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + + +PROGRAM=libtool +PACKAGE=libtool +VERSION=2.4.6 +package_revision=2.4.6 + + +## ------ ## +## Usage. ## +## ------ ## + +# Run './libtool --help' for help with using this script from the +# command line. + + +## ------------------------------- ## +## User overridable command paths. ## +## ------------------------------- ## + +# After configure completes, it has a better idea of some of the +# shell tools we need than the defaults used by the functions shared +# with bootstrap, so set those here where they can still be over- +# ridden by the user, but otherwise take precedence. + +: ${AUTOCONF="autoconf"} +: ${AUTOMAKE="automake"} + + +## -------------------------- ## +## Source external libraries. ## +## -------------------------- ## + +# Much of our low-level functionality needs to be sourced from external +# libraries, which are installed to $pkgauxdir. + +# Set a version string for this script. +scriptversion=2015-01-20.17; # UTC + +# General shell script boiler plate, and helper functions. +# Written by Gary V. Vaughan, 2004 + +# Copyright (C) 2004-2015 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. + +# As a special exception to the GNU General Public License, if you distribute +# this file as part of a program or library that is built using GNU Libtool, +# you may include this file under the same distribution terms that you use +# for the rest of that program. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNES FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# Please report bugs or propose patches to gary@gnu.org. + + +## ------ ## +## Usage. ## +## ------ ## + +# Evaluate this file near the top of your script to gain access to +# the functions and variables defined here: +# +# . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh +# +# If you need to override any of the default environment variable +# settings, do that before evaluating this file. + + +## -------------------- ## +## Shell normalisation. ## +## -------------------- ## + +# Some shells need a little help to be as Bourne compatible as possible. +# Before doing anything else, make sure all that help has been provided! + +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac +fi + +# NLS nuisances: We save the old values in case they are required later. +_G_user_locale= +_G_safe_locale= +for _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES +do + eval "if test set = \"\${$_G_var+set}\"; then + save_$_G_var=\$$_G_var + $_G_var=C + export $_G_var + _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\" + _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\" + fi" +done + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +# Make sure IFS has a sensible default +sp=' ' +nl=' +' +IFS="$sp $nl" + +# There are apparently some retarded systems that use ';' as a PATH separator! +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + + +## ------------------------- ## +## Locate command utilities. ## +## ------------------------- ## + + +# func_executable_p FILE +# ---------------------- +# Check that FILE is an executable regular file. +func_executable_p () +{ + test -f "$1" && test -x "$1" +} + + +# func_path_progs PROGS_LIST CHECK_FUNC [PATH] +# -------------------------------------------- +# Search for either a program that responds to --version with output +# containing "GNU", or else returned by CHECK_FUNC otherwise, by +# trying all the directories in PATH with each of the elements of +# PROGS_LIST. +# +# CHECK_FUNC should accept the path to a candidate program, and +# set $func_check_prog_result if it truncates its output less than +# $_G_path_prog_max characters. +func_path_progs () +{ + _G_progs_list=$1 + _G_check_func=$2 + _G_PATH=${3-"$PATH"} + + _G_path_prog_max=0 + _G_path_prog_found=false + _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:} + for _G_dir in $_G_PATH; do + IFS=$_G_save_IFS + test -z "$_G_dir" && _G_dir=. + for _G_prog_name in $_G_progs_list; do + for _exeext in '' .EXE; do + _G_path_prog=$_G_dir/$_G_prog_name$_exeext + func_executable_p "$_G_path_prog" || continue + case `"$_G_path_prog" --version 2>&1` in + *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;; + *) $_G_check_func $_G_path_prog + func_path_progs_result=$func_check_prog_result + ;; + esac + $_G_path_prog_found && break 3 + done + done + done + IFS=$_G_save_IFS + test -z "$func_path_progs_result" && { + echo "no acceptable sed could be found in \$PATH" >&2 + exit 1 + } +} + + +# We want to be able to use the functions in this file before configure +# has figured out where the best binaries are kept, which means we have +# to search for them ourselves - except when the results are already set +# where we skip the searches. + +# Unless the user overrides by setting SED, search the path for either GNU +# sed, or the sed that truncates its output the least. +test -z "$SED" && { + _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for _G_i in 1 2 3 4 5 6 7; do + _G_sed_script=$_G_sed_script$nl$_G_sed_script + done + echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed + _G_sed_script= + + func_check_prog_sed () + { + _G_path_prog=$1 + + _G_count=0 + printf 0123456789 >conftest.in + while : + do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo '' >> conftest.nl + "$_G_path_prog" -f conftest.sed conftest.out 2>/dev/null || break + diff conftest.out conftest.nl >/dev/null 2>&1 || break + _G_count=`expr $_G_count + 1` + if test "$_G_count" -gt "$_G_path_prog_max"; then + # Best one so far, save it but keep looking for a better one + func_check_prog_result=$_G_path_prog + _G_path_prog_max=$_G_count + fi + # 10*(2^10) chars as input seems more than enough + test 10 -lt "$_G_count" && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out + } + + func_path_progs "sed gsed" func_check_prog_sed $PATH:/usr/xpg4/bin + rm -f conftest.sed + SED=$func_path_progs_result +} + + +# Unless the user overrides by setting GREP, search the path for either GNU +# grep, or the grep that truncates its output the least. +test -z "$GREP" && { + func_check_prog_grep () + { + _G_path_prog=$1 + + _G_count=0 + _G_path_prog_max=0 + printf 0123456789 >conftest.in + while : + do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo 'GREP' >> conftest.nl + "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' conftest.out 2>/dev/null || break + diff conftest.out conftest.nl >/dev/null 2>&1 || break + _G_count=`expr $_G_count + 1` + if test "$_G_count" -gt "$_G_path_prog_max"; then + # Best one so far, save it but keep looking for a better one + func_check_prog_result=$_G_path_prog + _G_path_prog_max=$_G_count + fi + # 10*(2^10) chars as input seems more than enough + test 10 -lt "$_G_count" && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out + } + + func_path_progs "grep ggrep" func_check_prog_grep $PATH:/usr/xpg4/bin + GREP=$func_path_progs_result +} + + +## ------------------------------- ## +## User overridable command paths. ## +## ------------------------------- ## + +# All uppercase variable names are used for environment variables. These +# variables can be overridden by the user before calling a script that +# uses them if a suitable command of that name is not already available +# in the command search PATH. + +: ${CP="cp -f"} +: ${ECHO="printf %s\n"} +: ${EGREP="$GREP -E"} +: ${FGREP="$GREP -F"} +: ${LN_S="ln -s"} +: ${MAKE="make"} +: ${MKDIR="mkdir"} +: ${MV="mv -f"} +: ${RM="rm -f"} +: ${SHELL="${CONFIG_SHELL-/bin/sh}"} + + +## -------------------- ## +## Useful sed snippets. ## +## -------------------- ## + +sed_dirname='s|/[^/]*$||' +sed_basename='s|^.*/||' + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='s|\([`"$\\]\)|\\\1|g' + +# Same as above, but do not quote variable references. +sed_double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution that turns a string into a regex matching for the +# string literally. +sed_make_literal_regex='s|[].[^$\\*\/]|\\&|g' + +# Sed substitution that converts a w32 file name or path +# that contains forward slashes, into one that contains +# (escaped) backslashes. A very naive implementation. +sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' + +# Re-'\' parameter expansions in output of sed_double_quote_subst that +# were '\'-ed in input to the same. If an odd number of '\' preceded a +# '$' in input to sed_double_quote_subst, that '$' was protected from +# expansion. Since each input '\' is now two '\'s, look for any number +# of runs of four '\'s followed by two '\'s and then a '$'. '\' that '$'. +_G_bs='\\' +_G_bs2='\\\\' +_G_bs4='\\\\\\\\' +_G_dollar='\$' +sed_double_backslash="\ + s/$_G_bs4/&\\ +/g + s/^$_G_bs2$_G_dollar/$_G_bs&/ + s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g + s/\n//g" + + +## ----------------- ## +## Global variables. ## +## ----------------- ## + +# Except for the global variables explicitly listed below, the following +# functions in the '^func_' namespace, and the '^require_' namespace +# variables initialised in the 'Resource management' section, sourcing +# this file will not pollute your global namespace with anything +# else. There's no portable way to scope variables in Bourne shell +# though, so actually running these functions will sometimes place +# results into a variable named after the function, and often use +# temporary variables in the '^_G_' namespace. If you are careful to +# avoid using those namespaces casually in your sourcing script, things +# should continue to work as you expect. And, of course, you can freely +# overwrite any of the functions or variables defined here before +# calling anything to customize them. + +EXIT_SUCCESS=0 +EXIT_FAILURE=1 +EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. +EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. + +# Allow overriding, eg assuming that you follow the convention of +# putting '$debug_cmd' at the start of all your functions, you can get +# bash to show function call trace with: +# +# debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name +debug_cmd=${debug_cmd-":"} +exit_cmd=: + +# By convention, finish your script with: +# +# exit $exit_status +# +# so that you can set exit_status to non-zero if you want to indicate +# something went wrong during execution without actually bailing out at +# the point of failure. +exit_status=$EXIT_SUCCESS + +# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh +# is ksh but when the shell is invoked as "sh" and the current value of +# the _XPG environment variable is not equal to 1 (one), the special +# positional parameter $0, within a function call, is the name of the +# function. +progpath=$0 + +# The name of this program. +progname=`$ECHO "$progpath" |$SED "$sed_basename"` + +# Make sure we have an absolute progpath for reexecution: +case $progpath in + [\\/]*|[A-Za-z]:\\*) ;; + *[\\/]*) + progdir=`$ECHO "$progpath" |$SED "$sed_dirname"` + progdir=`cd "$progdir" && pwd` + progpath=$progdir/$progname + ;; + *) + _G_IFS=$IFS + IFS=${PATH_SEPARATOR-:} + for progdir in $PATH; do + IFS=$_G_IFS + test -x "$progdir/$progname" && break + done + IFS=$_G_IFS + test -n "$progdir" || progdir=`pwd` + progpath=$progdir/$progname + ;; +esac + + +## ----------------- ## +## Standard options. ## +## ----------------- ## + +# The following options affect the operation of the functions defined +# below, and should be set appropriately depending on run-time para- +# meters passed on the command line. + +opt_dry_run=false +opt_quiet=false +opt_verbose=false + +# Categories 'all' and 'none' are always available. Append any others +# you will pass as the first argument to func_warning from your own +# code. +warning_categories= + +# By default, display warnings according to 'opt_warning_types'. Set +# 'warning_func' to ':' to elide all warnings, or func_fatal_error to +# treat the next displayed warning as a fatal error. +warning_func=func_warn_and_continue + +# Set to 'all' to display all warnings, 'none' to suppress all +# warnings, or a space delimited list of some subset of +# 'warning_categories' to display only the listed warnings. +opt_warning_types=all + + +## -------------------- ## +## Resource management. ## +## -------------------- ## + +# This section contains definitions for functions that each ensure a +# particular resource (a file, or a non-empty configuration variable for +# example) is available, and if appropriate to extract default values +# from pertinent package files. Call them using their associated +# 'require_*' variable to ensure that they are executed, at most, once. +# +# It's entirely deliberate that calling these functions can set +# variables that don't obey the namespace limitations obeyed by the rest +# of this file, in order that that they be as useful as possible to +# callers. + + +# require_term_colors +# ------------------- +# Allow display of bold text on terminals that support it. +require_term_colors=func_require_term_colors +func_require_term_colors () +{ + $debug_cmd + + test -t 1 && { + # COLORTERM and USE_ANSI_COLORS environment variables take + # precedence, because most terminfo databases neglect to describe + # whether color sequences are supported. + test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"} + + if test 1 = "$USE_ANSI_COLORS"; then + # Standard ANSI escape sequences + tc_reset='' + tc_bold=''; tc_standout='' + tc_red=''; tc_green='' + tc_blue=''; tc_cyan='' + else + # Otherwise trust the terminfo database after all. + test -n "`tput sgr0 2>/dev/null`" && { + tc_reset=`tput sgr0` + test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold` + tc_standout=$tc_bold + test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso` + test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1` + test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2` + test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4` + test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5` + } + fi + } + + require_term_colors=: +} + + +## ----------------- ## +## Function library. ## +## ----------------- ## + +# This section contains a variety of useful functions to call in your +# scripts. Take note of the portable wrappers for features provided by +# some modern shells, which will fall back to slower equivalents on +# less featureful shells. + + +# func_append VAR VALUE +# --------------------- +# Append VALUE onto the existing contents of VAR. + + # We should try to minimise forks, especially on Windows where they are + # unreasonably slow, so skip the feature probes when bash or zsh are + # being used: + if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then + : ${_G_HAVE_ARITH_OP="yes"} + : ${_G_HAVE_XSI_OPS="yes"} + # The += operator was introduced in bash 3.1 + case $BASH_VERSION in + [12].* | 3.0 | 3.0*) ;; + *) + : ${_G_HAVE_PLUSEQ_OP="yes"} + ;; + esac + fi + + # _G_HAVE_PLUSEQ_OP + # Can be empty, in which case the shell is probed, "yes" if += is + # useable or anything else if it does not work. + test -z "$_G_HAVE_PLUSEQ_OP" \ + && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \ + && _G_HAVE_PLUSEQ_OP=yes + +if test yes = "$_G_HAVE_PLUSEQ_OP" +then + # This is an XSI compatible shell, allowing a faster implementation... + eval 'func_append () + { + $debug_cmd + + eval "$1+=\$2" + }' +else + # ...otherwise fall back to using expr, which is often a shell builtin. + func_append () + { + $debug_cmd + + eval "$1=\$$1\$2" + } +fi + + +# func_append_quoted VAR VALUE +# ---------------------------- +# Quote VALUE and append to the end of shell variable VAR, separated +# by a space. +if test yes = "$_G_HAVE_PLUSEQ_OP"; then + eval 'func_append_quoted () + { + $debug_cmd + + func_quote_for_eval "$2" + eval "$1+=\\ \$func_quote_for_eval_result" + }' +else + func_append_quoted () + { + $debug_cmd + + func_quote_for_eval "$2" + eval "$1=\$$1\\ \$func_quote_for_eval_result" + } +fi + + +# func_append_uniq VAR VALUE +# -------------------------- +# Append unique VALUE onto the existing contents of VAR, assuming +# entries are delimited by the first character of VALUE. For example: +# +# func_append_uniq options " --another-option option-argument" +# +# will only append to $options if " --another-option option-argument " +# is not already present somewhere in $options already (note spaces at +# each end implied by leading space in second argument). +func_append_uniq () +{ + $debug_cmd + + eval _G_current_value='`$ECHO $'$1'`' + _G_delim=`expr "$2" : '\(.\)'` + + case $_G_delim$_G_current_value$_G_delim in + *"$2$_G_delim"*) ;; + *) func_append "$@" ;; + esac +} + + +# func_arith TERM... +# ------------------ +# Set func_arith_result to the result of evaluating TERMs. + test -z "$_G_HAVE_ARITH_OP" \ + && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \ + && _G_HAVE_ARITH_OP=yes + +if test yes = "$_G_HAVE_ARITH_OP"; then + eval 'func_arith () + { + $debug_cmd + + func_arith_result=$(( $* )) + }' +else + func_arith () + { + $debug_cmd + + func_arith_result=`expr "$@"` + } +fi + + +# func_basename FILE +# ------------------ +# Set func_basename_result to FILE with everything up to and including +# the last / stripped. +if test yes = "$_G_HAVE_XSI_OPS"; then + # If this shell supports suffix pattern removal, then use it to avoid + # forking. Hide the definitions single quotes in case the shell chokes + # on unsupported syntax... + _b='func_basename_result=${1##*/}' + _d='case $1 in + */*) func_dirname_result=${1%/*}$2 ;; + * ) func_dirname_result=$3 ;; + esac' + +else + # ...otherwise fall back to using sed. + _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`' + _d='func_dirname_result=`$ECHO "$1" |$SED "$sed_dirname"` + if test "X$func_dirname_result" = "X$1"; then + func_dirname_result=$3 + else + func_append func_dirname_result "$2" + fi' +fi + +eval 'func_basename () +{ + $debug_cmd + + '"$_b"' +}' + + +# func_dirname FILE APPEND NONDIR_REPLACEMENT +# ------------------------------------------- +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +eval 'func_dirname () +{ + $debug_cmd + + '"$_d"' +}' + + +# func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT +# -------------------------------------------------------- +# Perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# For efficiency, we do not delegate to the functions above but instead +# duplicate the functionality here. +eval 'func_dirname_and_basename () +{ + $debug_cmd + + '"$_b"' + '"$_d"' +}' + + +# func_echo ARG... +# ---------------- +# Echo program name prefixed message. +func_echo () +{ + $debug_cmd + + _G_message=$* + + func_echo_IFS=$IFS + IFS=$nl + for _G_line in $_G_message; do + IFS=$func_echo_IFS + $ECHO "$progname: $_G_line" + done + IFS=$func_echo_IFS +} + + +# func_echo_all ARG... +# -------------------- +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "$*" +} + + +# func_echo_infix_1 INFIX ARG... +# ------------------------------ +# Echo program name, followed by INFIX on the first line, with any +# additional lines not showing INFIX. +func_echo_infix_1 () +{ + $debug_cmd + + $require_term_colors + + _G_infix=$1; shift + _G_indent=$_G_infix + _G_prefix="$progname: $_G_infix: " + _G_message=$* + + # Strip color escape sequences before counting printable length + for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan" + do + test -n "$_G_tc" && { + _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"` + _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"` + } + done + _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`" " ## exclude from sc_prohibit_nested_quotes + + func_echo_infix_1_IFS=$IFS + IFS=$nl + for _G_line in $_G_message; do + IFS=$func_echo_infix_1_IFS + $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2 + _G_prefix=$_G_indent + done + IFS=$func_echo_infix_1_IFS +} + + +# func_error ARG... +# ----------------- +# Echo program name prefixed message to standard error. +func_error () +{ + $debug_cmd + + $require_term_colors + + func_echo_infix_1 " $tc_standout${tc_red}error$tc_reset" "$*" >&2 +} + + +# func_fatal_error ARG... +# ----------------------- +# Echo program name prefixed message to standard error, and exit. +func_fatal_error () +{ + $debug_cmd + + func_error "$*" + exit $EXIT_FAILURE +} + + +# func_grep EXPRESSION FILENAME +# ----------------------------- +# Check whether EXPRESSION matches any line of FILENAME, without output. +func_grep () +{ + $debug_cmd + + $GREP "$1" "$2" >/dev/null 2>&1 +} + + +# func_len STRING +# --------------- +# Set func_len_result to the length of STRING. STRING may not +# start with a hyphen. + test -z "$_G_HAVE_XSI_OPS" \ + && (eval 'x=a/b/c; + test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ + && _G_HAVE_XSI_OPS=yes + +if test yes = "$_G_HAVE_XSI_OPS"; then + eval 'func_len () + { + $debug_cmd + + func_len_result=${#1} + }' +else + func_len () + { + $debug_cmd + + func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` + } +fi + + +# func_mkdir_p DIRECTORY-PATH +# --------------------------- +# Make sure the entire path to DIRECTORY-PATH is available. +func_mkdir_p () +{ + $debug_cmd + + _G_directory_path=$1 + _G_dir_list= + + if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then + + # Protect directory names starting with '-' + case $_G_directory_path in + -*) _G_directory_path=./$_G_directory_path ;; + esac + + # While some portion of DIR does not yet exist... + while test ! -d "$_G_directory_path"; do + # ...make a list in topmost first order. Use a colon delimited + # list incase some portion of path contains whitespace. + _G_dir_list=$_G_directory_path:$_G_dir_list + + # If the last portion added has no slash in it, the list is done + case $_G_directory_path in */*) ;; *) break ;; esac + + # ...otherwise throw away the child directory and loop + _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"` + done + _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'` + + func_mkdir_p_IFS=$IFS; IFS=: + for _G_dir in $_G_dir_list; do + IFS=$func_mkdir_p_IFS + # mkdir can fail with a 'File exist' error if two processes + # try to create one of the directories concurrently. Don't + # stop in that case! + $MKDIR "$_G_dir" 2>/dev/null || : + done + IFS=$func_mkdir_p_IFS + + # Bail out if we (or some other process) failed to create a directory. + test -d "$_G_directory_path" || \ + func_fatal_error "Failed to create '$1'" + fi +} + + +# func_mktempdir [BASENAME] +# ------------------------- +# Make a temporary directory that won't clash with other running +# libtool processes, and avoids race conditions if possible. If +# given, BASENAME is the basename for that directory. +func_mktempdir () +{ + $debug_cmd + + _G_template=${TMPDIR-/tmp}/${1-$progname} + + if test : = "$opt_dry_run"; then + # Return a directory name, but don't create it in dry-run mode + _G_tmpdir=$_G_template-$$ + else + + # If mktemp works, use that first and foremost + _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null` + + if test ! -d "$_G_tmpdir"; then + # Failing that, at least try and use $RANDOM to avoid a race + _G_tmpdir=$_G_template-${RANDOM-0}$$ + + func_mktempdir_umask=`umask` + umask 0077 + $MKDIR "$_G_tmpdir" + umask $func_mktempdir_umask + fi + + # If we're not in dry-run mode, bomb out on failure + test -d "$_G_tmpdir" || \ + func_fatal_error "cannot create temporary directory '$_G_tmpdir'" + fi + + $ECHO "$_G_tmpdir" +} + + +# func_normal_abspath PATH +# ------------------------ +# Remove doubled-up and trailing slashes, "." path components, +# and cancel out any ".." path components in PATH after making +# it an absolute path. +func_normal_abspath () +{ + $debug_cmd + + # These SED scripts presuppose an absolute path with a trailing slash. + _G_pathcar='s|^/\([^/]*\).*$|\1|' + _G_pathcdr='s|^/[^/]*||' + _G_removedotparts=':dotsl + s|/\./|/|g + t dotsl + s|/\.$|/|' + _G_collapseslashes='s|/\{1,\}|/|g' + _G_finalslash='s|/*$|/|' + + # Start from root dir and reassemble the path. + func_normal_abspath_result= + func_normal_abspath_tpath=$1 + func_normal_abspath_altnamespace= + case $func_normal_abspath_tpath in + "") + # Empty path, that just means $cwd. + func_stripname '' '/' "`pwd`" + func_normal_abspath_result=$func_stripname_result + return + ;; + # The next three entries are used to spot a run of precisely + # two leading slashes without using negated character classes; + # we take advantage of case's first-match behaviour. + ///*) + # Unusual form of absolute path, do nothing. + ;; + //*) + # Not necessarily an ordinary path; POSIX reserves leading '//' + # and for example Cygwin uses it to access remote file shares + # over CIFS/SMB, so we conserve a leading double slash if found. + func_normal_abspath_altnamespace=/ + ;; + /*) + # Absolute path, do nothing. + ;; + *) + # Relative path, prepend $cwd. + func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath + ;; + esac + + # Cancel out all the simple stuff to save iterations. We also want + # the path to end with a slash for ease of parsing, so make sure + # there is one (and only one) here. + func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"` + while :; do + # Processed it all yet? + if test / = "$func_normal_abspath_tpath"; then + # If we ascended to the root using ".." the result may be empty now. + if test -z "$func_normal_abspath_result"; then + func_normal_abspath_result=/ + fi + break + fi + func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$_G_pathcar"` + func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$_G_pathcdr"` + # Figure out what to do with it + case $func_normal_abspath_tcomponent in + "") + # Trailing empty path component, ignore it. + ;; + ..) + # Parent dir; strip last assembled component from result. + func_dirname "$func_normal_abspath_result" + func_normal_abspath_result=$func_dirname_result + ;; + *) + # Actual path component, append it. + func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent" + ;; + esac + done + # Restore leading double-slash if one was found on entry. + func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result +} + + +# func_notquiet ARG... +# -------------------- +# Echo program name prefixed message only when not in quiet mode. +func_notquiet () +{ + $debug_cmd + + $opt_quiet || func_echo ${1+"$@"} + + # A bug in bash halts the script if the last line of a function + # fails when set -e is in force, so we need another command to + # work around that: + : +} + + +# func_relative_path SRCDIR DSTDIR +# -------------------------------- +# Set func_relative_path_result to the relative path from SRCDIR to DSTDIR. +func_relative_path () +{ + $debug_cmd + + func_relative_path_result= + func_normal_abspath "$1" + func_relative_path_tlibdir=$func_normal_abspath_result + func_normal_abspath "$2" + func_relative_path_tbindir=$func_normal_abspath_result + + # Ascend the tree starting from libdir + while :; do + # check if we have found a prefix of bindir + case $func_relative_path_tbindir in + $func_relative_path_tlibdir) + # found an exact match + func_relative_path_tcancelled= + break + ;; + $func_relative_path_tlibdir*) + # found a matching prefix + func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" + func_relative_path_tcancelled=$func_stripname_result + if test -z "$func_relative_path_result"; then + func_relative_path_result=. + fi + break + ;; + *) + func_dirname $func_relative_path_tlibdir + func_relative_path_tlibdir=$func_dirname_result + if test -z "$func_relative_path_tlibdir"; then + # Have to descend all the way to the root! + func_relative_path_result=../$func_relative_path_result + func_relative_path_tcancelled=$func_relative_path_tbindir + break + fi + func_relative_path_result=../$func_relative_path_result + ;; + esac + done + + # Now calculate path; take care to avoid doubling-up slashes. + func_stripname '' '/' "$func_relative_path_result" + func_relative_path_result=$func_stripname_result + func_stripname '/' '/' "$func_relative_path_tcancelled" + if test -n "$func_stripname_result"; then + func_append func_relative_path_result "/$func_stripname_result" + fi + + # Normalisation. If bindir is libdir, return '.' else relative path. + if test -n "$func_relative_path_result"; then + func_stripname './' '' "$func_relative_path_result" + func_relative_path_result=$func_stripname_result + fi + + test -n "$func_relative_path_result" || func_relative_path_result=. + + : +} + + +# func_quote_for_eval ARG... +# -------------------------- +# Aesthetically quote ARGs to be evaled later. +# This function returns two values: +# i) func_quote_for_eval_result +# double-quoted, suitable for a subsequent eval +# ii) func_quote_for_eval_unquoted_result +# has all characters that are still active within double +# quotes backslashified. +func_quote_for_eval () +{ + $debug_cmd + + func_quote_for_eval_unquoted_result= + func_quote_for_eval_result= + while test 0 -lt $#; do + case $1 in + *[\\\`\"\$]*) + _G_unquoted_arg=`printf '%s\n' "$1" |$SED "$sed_quote_subst"` ;; + *) + _G_unquoted_arg=$1 ;; + esac + if test -n "$func_quote_for_eval_unquoted_result"; then + func_append func_quote_for_eval_unquoted_result " $_G_unquoted_arg" + else + func_append func_quote_for_eval_unquoted_result "$_G_unquoted_arg" + fi + + case $_G_unquoted_arg in + # Double-quote args containing shell metacharacters to delay + # word splitting, command substitution and variable expansion + # for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + _G_quoted_arg=\"$_G_unquoted_arg\" + ;; + *) + _G_quoted_arg=$_G_unquoted_arg + ;; + esac + + if test -n "$func_quote_for_eval_result"; then + func_append func_quote_for_eval_result " $_G_quoted_arg" + else + func_append func_quote_for_eval_result "$_G_quoted_arg" + fi + shift + done +} + + +# func_quote_for_expand ARG +# ------------------------- +# Aesthetically quote ARG to be evaled later; same as above, +# but do not quote variable references. +func_quote_for_expand () +{ + $debug_cmd + + case $1 in + *[\\\`\"]*) + _G_arg=`$ECHO "$1" | $SED \ + -e "$sed_double_quote_subst" -e "$sed_double_backslash"` ;; + *) + _G_arg=$1 ;; + esac + + case $_G_arg in + # Double-quote args containing shell metacharacters to delay + # word splitting and command substitution for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + _G_arg=\"$_G_arg\" + ;; + esac + + func_quote_for_expand_result=$_G_arg +} + + +# func_stripname PREFIX SUFFIX NAME +# --------------------------------- +# strip PREFIX and SUFFIX from NAME, and store in func_stripname_result. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +if test yes = "$_G_HAVE_XSI_OPS"; then + eval 'func_stripname () + { + $debug_cmd + + # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are + # positional parameters, so assign one to ordinary variable first. + func_stripname_result=$3 + func_stripname_result=${func_stripname_result#"$1"} + func_stripname_result=${func_stripname_result%"$2"} + }' +else + func_stripname () + { + $debug_cmd + + case $2 in + .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;; + *) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;; + esac + } +fi + + +# func_show_eval CMD [FAIL_EXP] +# ----------------------------- +# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. +func_show_eval () +{ + $debug_cmd + + _G_cmd=$1 + _G_fail_exp=${2-':'} + + func_quote_for_expand "$_G_cmd" + eval "func_notquiet $func_quote_for_expand_result" + + $opt_dry_run || { + eval "$_G_cmd" + _G_status=$? + if test 0 -ne "$_G_status"; then + eval "(exit $_G_status); $_G_fail_exp" + fi + } +} + + +# func_show_eval_locale CMD [FAIL_EXP] +# ------------------------------------ +# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. Use the saved locale for evaluation. +func_show_eval_locale () +{ + $debug_cmd + + _G_cmd=$1 + _G_fail_exp=${2-':'} + + $opt_quiet || { + func_quote_for_expand "$_G_cmd" + eval "func_echo $func_quote_for_expand_result" + } + + $opt_dry_run || { + eval "$_G_user_locale + $_G_cmd" + _G_status=$? + eval "$_G_safe_locale" + if test 0 -ne "$_G_status"; then + eval "(exit $_G_status); $_G_fail_exp" + fi + } +} + + +# func_tr_sh +# ---------- +# Turn $1 into a string suitable for a shell variable name. +# Result is stored in $func_tr_sh_result. All characters +# not in the set a-zA-Z0-9_ are replaced with '_'. Further, +# if $1 begins with a digit, a '_' is prepended as well. +func_tr_sh () +{ + $debug_cmd + + case $1 in + [0-9]* | *[!a-zA-Z0-9_]*) + func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'` + ;; + * ) + func_tr_sh_result=$1 + ;; + esac +} + + +# func_verbose ARG... +# ------------------- +# Echo program name prefixed message in verbose mode only. +func_verbose () +{ + $debug_cmd + + $opt_verbose && func_echo "$*" + + : +} + + +# func_warn_and_continue ARG... +# ----------------------------- +# Echo program name prefixed warning message to standard error. +func_warn_and_continue () +{ + $debug_cmd + + $require_term_colors + + func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2 +} + + +# func_warning CATEGORY ARG... +# ---------------------------- +# Echo program name prefixed warning message to standard error. Warning +# messages can be filtered according to CATEGORY, where this function +# elides messages where CATEGORY is not listed in the global variable +# 'opt_warning_types'. +func_warning () +{ + $debug_cmd + + # CATEGORY must be in the warning_categories list! + case " $warning_categories " in + *" $1 "*) ;; + *) func_internal_error "invalid warning category '$1'" ;; + esac + + _G_category=$1 + shift + + case " $opt_warning_types " in + *" $_G_category "*) $warning_func ${1+"$@"} ;; + esac +} + + +# func_sort_ver VER1 VER2 +# ----------------------- +# 'sort -V' is not generally available. +# Note this deviates from the version comparison in automake +# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a +# but this should suffice as we won't be specifying old +# version formats or redundant trailing .0 in bootstrap.conf. +# If we did want full compatibility then we should probably +# use m4_version_compare from autoconf. +func_sort_ver () +{ + $debug_cmd + + printf '%s\n%s\n' "$1" "$2" \ + | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n -k 5,5n -k 6,6n -k 7,7n -k 8,8n -k 9,9n +} + +# func_lt_ver PREV CURR +# --------------------- +# Return true if PREV and CURR are in the correct order according to +# func_sort_ver, otherwise false. Use it like this: +# +# func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..." +func_lt_ver () +{ + $debug_cmd + + test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q` +} + + +# Local variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'before-save-hook 'time-stamp) +# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" +# time-stamp-time-zone: "UTC" +# End: +#! /bin/sh + +# Set a version string for this script. +scriptversion=2014-01-07.03; # UTC + +# A portable, pluggable option parser for Bourne shell. +# Written by Gary V. Vaughan, 2010 + +# Copyright (C) 2010-2015 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# Please report bugs or propose patches to gary@gnu.org. + + +## ------ ## +## Usage. ## +## ------ ## + +# This file is a library for parsing options in your shell scripts along +# with assorted other useful supporting features that you can make use +# of too. +# +# For the simplest scripts you might need only: +# +# #!/bin/sh +# . relative/path/to/funclib.sh +# . relative/path/to/options-parser +# scriptversion=1.0 +# func_options ${1+"$@"} +# eval set dummy "$func_options_result"; shift +# ...rest of your script... +# +# In order for the '--version' option to work, you will need to have a +# suitably formatted comment like the one at the top of this file +# starting with '# Written by ' and ending with '# warranty; '. +# +# For '-h' and '--help' to work, you will also need a one line +# description of your script's purpose in a comment directly above the +# '# Written by ' line, like the one at the top of this file. +# +# The default options also support '--debug', which will turn on shell +# execution tracing (see the comment above debug_cmd below for another +# use), and '--verbose' and the func_verbose function to allow your script +# to display verbose messages only when your user has specified +# '--verbose'. +# +# After sourcing this file, you can plug processing for additional +# options by amending the variables from the 'Configuration' section +# below, and following the instructions in the 'Option parsing' +# section further down. + +## -------------- ## +## Configuration. ## +## -------------- ## + +# You should override these variables in your script after sourcing this +# file so that they reflect the customisations you have added to the +# option parser. + +# The usage line for option parsing errors and the start of '-h' and +# '--help' output messages. You can embed shell variables for delayed +# expansion at the time the message is displayed, but you will need to +# quote other shell meta-characters carefully to prevent them being +# expanded when the contents are evaled. +usage='$progpath [OPTION]...' + +# Short help message in response to '-h' and '--help'. Add to this or +# override it after sourcing this library to reflect the full set of +# options your script accepts. +usage_message="\ + --debug enable verbose shell tracing + -W, --warnings=CATEGORY + report the warnings falling in CATEGORY [all] + -v, --verbose verbosely report processing + --version print version information and exit + -h, --help print short or long help message and exit +" + +# Additional text appended to 'usage_message' in response to '--help'. +long_help_message=" +Warning categories include: + 'all' show all warnings + 'none' turn off all the warnings + 'error' warnings are treated as fatal errors" + +# Help message printed before fatal option parsing errors. +fatal_help="Try '\$progname --help' for more information." + + + +## ------------------------- ## +## Hook function management. ## +## ------------------------- ## + +# This section contains functions for adding, removing, and running hooks +# to the main code. A hook is just a named list of of function, that can +# be run in order later on. + +# func_hookable FUNC_NAME +# ----------------------- +# Declare that FUNC_NAME will run hooks added with +# 'func_add_hook FUNC_NAME ...'. +func_hookable () +{ + $debug_cmd + + func_append hookable_fns " $1" +} + + +# func_add_hook FUNC_NAME HOOK_FUNC +# --------------------------------- +# Request that FUNC_NAME call HOOK_FUNC before it returns. FUNC_NAME must +# first have been declared "hookable" by a call to 'func_hookable'. +func_add_hook () +{ + $debug_cmd + + case " $hookable_fns " in + *" $1 "*) ;; + *) func_fatal_error "'$1' does not accept hook functions." ;; + esac + + eval func_append ${1}_hooks '" $2"' +} + + +# func_remove_hook FUNC_NAME HOOK_FUNC +# ------------------------------------ +# Remove HOOK_FUNC from the list of functions called by FUNC_NAME. +func_remove_hook () +{ + $debug_cmd + + eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`' +} + + +# func_run_hooks FUNC_NAME [ARG]... +# --------------------------------- +# Run all hook functions registered to FUNC_NAME. +# It is assumed that the list of hook functions contains nothing more +# than a whitespace-delimited list of legal shell function names, and +# no effort is wasted trying to catch shell meta-characters or preserve +# whitespace. +func_run_hooks () +{ + $debug_cmd + + case " $hookable_fns " in + *" $1 "*) ;; + *) func_fatal_error "'$1' does not support hook funcions.n" ;; + esac + + eval _G_hook_fns=\$$1_hooks; shift + + for _G_hook in $_G_hook_fns; do + eval $_G_hook '"$@"' + + # store returned options list back into positional + # parameters for next 'cmd' execution. + eval _G_hook_result=\$${_G_hook}_result + eval set dummy "$_G_hook_result"; shift + done + + func_quote_for_eval ${1+"$@"} + func_run_hooks_result=$func_quote_for_eval_result +} + + + +## --------------- ## +## Option parsing. ## +## --------------- ## + +# In order to add your own option parsing hooks, you must accept the +# full positional parameter list in your hook function, remove any +# options that you action, and then pass back the remaining unprocessed +# options in '_result', escaped suitably for +# 'eval'. Like this: +# +# my_options_prep () +# { +# $debug_cmd +# +# # Extend the existing usage message. +# usage_message=$usage_message' +# -s, --silent don'\''t print informational messages +# ' +# +# func_quote_for_eval ${1+"$@"} +# my_options_prep_result=$func_quote_for_eval_result +# } +# func_add_hook func_options_prep my_options_prep +# +# +# my_silent_option () +# { +# $debug_cmd +# +# # Note that for efficiency, we parse as many options as we can +# # recognise in a loop before passing the remainder back to the +# # caller on the first unrecognised argument we encounter. +# while test $# -gt 0; do +# opt=$1; shift +# case $opt in +# --silent|-s) opt_silent=: ;; +# # Separate non-argument short options: +# -s*) func_split_short_opt "$_G_opt" +# set dummy "$func_split_short_opt_name" \ +# "-$func_split_short_opt_arg" ${1+"$@"} +# shift +# ;; +# *) set dummy "$_G_opt" "$*"; shift; break ;; +# esac +# done +# +# func_quote_for_eval ${1+"$@"} +# my_silent_option_result=$func_quote_for_eval_result +# } +# func_add_hook func_parse_options my_silent_option +# +# +# my_option_validation () +# { +# $debug_cmd +# +# $opt_silent && $opt_verbose && func_fatal_help "\ +# '--silent' and '--verbose' options are mutually exclusive." +# +# func_quote_for_eval ${1+"$@"} +# my_option_validation_result=$func_quote_for_eval_result +# } +# func_add_hook func_validate_options my_option_validation +# +# You'll alse need to manually amend $usage_message to reflect the extra +# options you parse. It's preferable to append if you can, so that +# multiple option parsing hooks can be added safely. + + +# func_options [ARG]... +# --------------------- +# All the functions called inside func_options are hookable. See the +# individual implementations for details. +func_hookable func_options +func_options () +{ + $debug_cmd + + func_options_prep ${1+"$@"} + eval func_parse_options \ + ${func_options_prep_result+"$func_options_prep_result"} + eval func_validate_options \ + ${func_parse_options_result+"$func_parse_options_result"} + + eval func_run_hooks func_options \ + ${func_validate_options_result+"$func_validate_options_result"} + + # save modified positional parameters for caller + func_options_result=$func_run_hooks_result +} + + +# func_options_prep [ARG]... +# -------------------------- +# All initialisations required before starting the option parse loop. +# Note that when calling hook functions, we pass through the list of +# positional parameters. If a hook function modifies that list, and +# needs to propogate that back to rest of this script, then the complete +# modified list must be put in 'func_run_hooks_result' before +# returning. +func_hookable func_options_prep +func_options_prep () +{ + $debug_cmd + + # Option defaults: + opt_verbose=false + opt_warning_types= + + func_run_hooks func_options_prep ${1+"$@"} + + # save modified positional parameters for caller + func_options_prep_result=$func_run_hooks_result +} + + +# func_parse_options [ARG]... +# --------------------------- +# The main option parsing loop. +func_hookable func_parse_options +func_parse_options () +{ + $debug_cmd + + func_parse_options_result= + + # this just eases exit handling + while test $# -gt 0; do + # Defer to hook functions for initial option parsing, so they + # get priority in the event of reusing an option name. + func_run_hooks func_parse_options ${1+"$@"} + + # Adjust func_parse_options positional parameters to match + eval set dummy "$func_run_hooks_result"; shift + + # Break out of the loop if we already parsed every option. + test $# -gt 0 || break + + _G_opt=$1 + shift + case $_G_opt in + --debug|-x) debug_cmd='set -x' + func_echo "enabling shell trace mode" + $debug_cmd + ;; + + --no-warnings|--no-warning|--no-warn) + set dummy --warnings none ${1+"$@"} + shift + ;; + + --warnings|--warning|-W) + test $# = 0 && func_missing_arg $_G_opt && break + case " $warning_categories $1" in + *" $1 "*) + # trailing space prevents matching last $1 above + func_append_uniq opt_warning_types " $1" + ;; + *all) + opt_warning_types=$warning_categories + ;; + *none) + opt_warning_types=none + warning_func=: + ;; + *error) + opt_warning_types=$warning_categories + warning_func=func_fatal_error + ;; + *) + func_fatal_error \ + "unsupported warning category: '$1'" + ;; + esac + shift + ;; + + --verbose|-v) opt_verbose=: ;; + --version) func_version ;; + -\?|-h) func_usage ;; + --help) func_help ;; + + # Separate optargs to long options (plugins may need this): + --*=*) func_split_equals "$_G_opt" + set dummy "$func_split_equals_lhs" \ + "$func_split_equals_rhs" ${1+"$@"} + shift + ;; + + # Separate optargs to short options: + -W*) + func_split_short_opt "$_G_opt" + set dummy "$func_split_short_opt_name" \ + "$func_split_short_opt_arg" ${1+"$@"} + shift + ;; + + # Separate non-argument short options: + -\?*|-h*|-v*|-x*) + func_split_short_opt "$_G_opt" + set dummy "$func_split_short_opt_name" \ + "-$func_split_short_opt_arg" ${1+"$@"} + shift + ;; + + --) break ;; + -*) func_fatal_help "unrecognised option: '$_G_opt'" ;; + *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; + esac + done + + # save modified positional parameters for caller + func_quote_for_eval ${1+"$@"} + func_parse_options_result=$func_quote_for_eval_result +} + + +# func_validate_options [ARG]... +# ------------------------------ +# Perform any sanity checks on option settings and/or unconsumed +# arguments. +func_hookable func_validate_options +func_validate_options () +{ + $debug_cmd + + # Display all warnings if -W was not given. + test -n "$opt_warning_types" || opt_warning_types=" $warning_categories" + + func_run_hooks func_validate_options ${1+"$@"} + + # Bail if the options were screwed! + $exit_cmd $EXIT_FAILURE + + # save modified positional parameters for caller + func_validate_options_result=$func_run_hooks_result +} + + + +## ----------------- ## +## Helper functions. ## +## ----------------- ## + +# This section contains the helper functions used by the rest of the +# hookable option parser framework in ascii-betical order. + + +# func_fatal_help ARG... +# ---------------------- +# Echo program name prefixed message to standard error, followed by +# a help hint, and exit. +func_fatal_help () +{ + $debug_cmd + + eval \$ECHO \""Usage: $usage"\" + eval \$ECHO \""$fatal_help"\" + func_error ${1+"$@"} + exit $EXIT_FAILURE +} + + +# func_help +# --------- +# Echo long help message to standard output and exit. +func_help () +{ + $debug_cmd + + func_usage_message + $ECHO "$long_help_message" + exit 0 +} + + +# func_missing_arg ARGNAME +# ------------------------ +# Echo program name prefixed message to standard error and set global +# exit_cmd. +func_missing_arg () +{ + $debug_cmd + + func_error "Missing argument for '$1'." + exit_cmd=exit +} + + +# func_split_equals STRING +# ------------------------ +# Set func_split_equals_lhs and func_split_equals_rhs shell variables after +# splitting STRING at the '=' sign. +test -z "$_G_HAVE_XSI_OPS" \ + && (eval 'x=a/b/c; + test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ + && _G_HAVE_XSI_OPS=yes + +if test yes = "$_G_HAVE_XSI_OPS" +then + # This is an XSI compatible shell, allowing a faster implementation... + eval 'func_split_equals () + { + $debug_cmd + + func_split_equals_lhs=${1%%=*} + func_split_equals_rhs=${1#*=} + test "x$func_split_equals_lhs" = "x$1" \ + && func_split_equals_rhs= + }' +else + # ...otherwise fall back to using expr, which is often a shell builtin. + func_split_equals () + { + $debug_cmd + + func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'` + func_split_equals_rhs= + test "x$func_split_equals_lhs" = "x$1" \ + || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'` + } +fi #func_split_equals + + +# func_split_short_opt SHORTOPT +# ----------------------------- +# Set func_split_short_opt_name and func_split_short_opt_arg shell +# variables after splitting SHORTOPT after the 2nd character. +if test yes = "$_G_HAVE_XSI_OPS" +then + # This is an XSI compatible shell, allowing a faster implementation... + eval 'func_split_short_opt () + { + $debug_cmd + + func_split_short_opt_arg=${1#??} + func_split_short_opt_name=${1%"$func_split_short_opt_arg"} + }' +else + # ...otherwise fall back to using expr, which is often a shell builtin. + func_split_short_opt () + { + $debug_cmd + + func_split_short_opt_name=`expr "x$1" : 'x-\(.\)'` + func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'` + } +fi #func_split_short_opt + + +# func_usage +# ---------- +# Echo short help message to standard output and exit. +func_usage () +{ + $debug_cmd + + func_usage_message + $ECHO "Run '$progname --help |${PAGER-more}' for full usage" + exit 0 +} + + +# func_usage_message +# ------------------ +# Echo short help message to standard output. +func_usage_message () +{ + $debug_cmd + + eval \$ECHO \""Usage: $usage"\" + echo + $SED -n 's|^# || + /^Written by/{ + x;p;x + } + h + /^Written by/q' < "$progpath" + echo + eval \$ECHO \""$usage_message"\" +} + + +# func_version +# ------------ +# Echo version message to standard output and exit. +func_version () +{ + $debug_cmd + + printf '%s\n' "$progname $scriptversion" + $SED -n ' + /(C)/!b go + :more + /\./!{ + N + s|\n# | | + b more + } + :go + /^# Written by /,/# warranty; / { + s|^# || + s|^# *$|| + s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2| + p + } + /^# Written by / { + s|^# || + p + } + /^warranty; /q' < "$progpath" + + exit $? +} + + +# Local variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'before-save-hook 'time-stamp) +# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" +# time-stamp-time-zone: "UTC" +# End: + +# Set a version string. +scriptversion='(GNU libtool) 2.4.6' + + +# func_echo ARG... +# ---------------- +# Libtool also displays the current mode in messages, so override +# funclib.sh func_echo with this custom definition. +func_echo () +{ + $debug_cmd + + _G_message=$* + + func_echo_IFS=$IFS + IFS=$nl + for _G_line in $_G_message; do + IFS=$func_echo_IFS + $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line" + done + IFS=$func_echo_IFS +} + + +# func_warning ARG... +# ------------------- +# Libtool warnings are not categorized, so override funclib.sh +# func_warning with this simpler definition. +func_warning () +{ + $debug_cmd + + $warning_func ${1+"$@"} +} + + +## ---------------- ## +## Options parsing. ## +## ---------------- ## + +# Hook in the functions to make sure our own options are parsed during +# the option parsing loop. + +usage='$progpath [OPTION]... [MODE-ARG]...' + +# Short help message in response to '-h'. +usage_message="Options: + --config show all configuration variables + --debug enable verbose shell tracing + -n, --dry-run display commands without modifying any files + --features display basic configuration information and exit + --mode=MODE use operation mode MODE + --no-warnings equivalent to '-Wnone' + --preserve-dup-deps don't remove duplicate dependency libraries + --quiet, --silent don't print informational messages + --tag=TAG use configuration variables from tag TAG + -v, --verbose print more informational messages than default + --version print version information + -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] + -h, --help, --help-all print short, long, or detailed help message +" + +# Additional text appended to 'usage_message' in response to '--help'. +func_help () +{ + $debug_cmd + + func_usage_message + $ECHO "$long_help_message + +MODE must be one of the following: + + clean remove files from the build directory + compile compile a source file into a libtool object + execute automatically set library path, then run a program + finish complete the installation of libtool libraries + install install libraries or executables + link create a library or an executable + uninstall remove libraries from an installed directory + +MODE-ARGS vary depending on the MODE. When passed as first option, +'--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that. +Try '$progname --help --mode=MODE' for a more detailed description of MODE. + +When reporting a bug, please describe a test case to reproduce it and +include the following information: + + host-triplet: $host + shell: $SHELL + compiler: $LTCC + compiler flags: $LTCFLAGS + linker: $LD (gnu? $with_gnu_ld) + version: $progname (GNU libtool) 2.4.6 + automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` + autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` + +Report bugs to . +GNU libtool home page: . +General help using GNU software: ." + exit 0 +} + + +# func_lo2o OBJECT-NAME +# --------------------- +# Transform OBJECT-NAME from a '.lo' suffix to the platform specific +# object suffix. + +lo2o=s/\\.lo\$/.$objext/ +o2lo=s/\\.$objext\$/.lo/ + +if test yes = "$_G_HAVE_XSI_OPS"; then + eval 'func_lo2o () + { + case $1 in + *.lo) func_lo2o_result=${1%.lo}.$objext ;; + * ) func_lo2o_result=$1 ;; + esac + }' + + # func_xform LIBOBJ-OR-SOURCE + # --------------------------- + # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise) + # suffix to a '.lo' libtool-object suffix. + eval 'func_xform () + { + func_xform_result=${1%.*}.lo + }' +else + # ...otherwise fall back to using sed. + func_lo2o () + { + func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"` + } + + func_xform () + { + func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'` + } +fi + + +# func_fatal_configuration ARG... +# ------------------------------- +# Echo program name prefixed message to standard error, followed by +# a configuration failure hint, and exit. +func_fatal_configuration () +{ + func__fatal_error ${1+"$@"} \ + "See the $PACKAGE documentation for more information." \ + "Fatal configuration error." +} + + +# func_config +# ----------- +# Display the configuration for all the tags in this script. +func_config () +{ + re_begincf='^# ### BEGIN LIBTOOL' + re_endcf='^# ### END LIBTOOL' + + # Default configuration. + $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" + + # Now print the configurations for the tags. + for tagname in $taglist; do + $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" + done + + exit $? +} + + +# func_features +# ------------- +# Display the features supported by this script. +func_features () +{ + echo "host: $host" + if test yes = "$build_libtool_libs"; then + echo "enable shared libraries" + else + echo "disable shared libraries" + fi + if test yes = "$build_old_libs"; then + echo "enable static libraries" + else + echo "disable static libraries" + fi + + exit $? +} + + +# func_enable_tag TAGNAME +# ----------------------- +# Verify that TAGNAME is valid, and either flag an error and exit, or +# enable the TAGNAME tag. We also add TAGNAME to the global $taglist +# variable here. +func_enable_tag () +{ + # Global variable: + tagname=$1 + + re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" + re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" + sed_extractcf=/$re_begincf/,/$re_endcf/p + + # Validate tagname. + case $tagname in + *[!-_A-Za-z0-9,/]*) + func_fatal_error "invalid tag name: $tagname" + ;; + esac + + # Don't test for the "default" C tag, as we know it's + # there but not specially marked. + case $tagname in + CC) ;; + *) + if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then + taglist="$taglist $tagname" + + # Evaluate the configuration. Be careful to quote the path + # and the sed script, to avoid splitting on whitespace, but + # also don't use non-portable quotes within backquotes within + # quotes we have to do it in 2 steps: + extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` + eval "$extractedcf" + else + func_error "ignoring unknown tag $tagname" + fi + ;; + esac +} + + +# func_check_version_match +# ------------------------ +# Ensure that we are using m4 macros, and libtool script from the same +# release of libtool. +func_check_version_match () +{ + if test "$package_revision" != "$macro_revision"; then + if test "$VERSION" != "$macro_version"; then + if test -z "$macro_version"; then + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from an older release. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + fi + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, +$progname: but the definition of this LT_INIT comes from revision $macro_revision. +$progname: You should recreate aclocal.m4 with macros from revision $package_revision +$progname: of $PACKAGE $VERSION and run autoconf again. +_LT_EOF + fi + + exit $EXIT_MISMATCH + fi +} + + +# libtool_options_prep [ARG]... +# ----------------------------- +# Preparation for options parsed by libtool. +libtool_options_prep () +{ + $debug_mode + + # Option defaults: + opt_config=false + opt_dlopen= + opt_dry_run=false + opt_help=false + opt_mode= + opt_preserve_dup_deps=false + opt_quiet=false + + nonopt= + preserve_args= + + # Shorthand for --mode=foo, only valid as the first argument + case $1 in + clean|clea|cle|cl) + shift; set dummy --mode clean ${1+"$@"}; shift + ;; + compile|compil|compi|comp|com|co|c) + shift; set dummy --mode compile ${1+"$@"}; shift + ;; + execute|execut|execu|exec|exe|ex|e) + shift; set dummy --mode execute ${1+"$@"}; shift + ;; + finish|finis|fini|fin|fi|f) + shift; set dummy --mode finish ${1+"$@"}; shift + ;; + install|instal|insta|inst|ins|in|i) + shift; set dummy --mode install ${1+"$@"}; shift + ;; + link|lin|li|l) + shift; set dummy --mode link ${1+"$@"}; shift + ;; + uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) + shift; set dummy --mode uninstall ${1+"$@"}; shift + ;; + esac + + # Pass back the list of options. + func_quote_for_eval ${1+"$@"} + libtool_options_prep_result=$func_quote_for_eval_result +} +func_add_hook func_options_prep libtool_options_prep + + +# libtool_parse_options [ARG]... +# --------------------------------- +# Provide handling for libtool specific options. +libtool_parse_options () +{ + $debug_cmd + + # Perform our own loop to consume as many options as possible in + # each iteration. + while test $# -gt 0; do + _G_opt=$1 + shift + case $_G_opt in + --dry-run|--dryrun|-n) + opt_dry_run=: + ;; + + --config) func_config ;; + + --dlopen|-dlopen) + opt_dlopen="${opt_dlopen+$opt_dlopen +}$1" + shift + ;; + + --preserve-dup-deps) + opt_preserve_dup_deps=: ;; + + --features) func_features ;; + + --finish) set dummy --mode finish ${1+"$@"}; shift ;; + + --help) opt_help=: ;; + + --help-all) opt_help=': help-all' ;; + + --mode) test $# = 0 && func_missing_arg $_G_opt && break + opt_mode=$1 + case $1 in + # Valid mode arguments: + clean|compile|execute|finish|install|link|relink|uninstall) ;; + + # Catch anything else as an error + *) func_error "invalid argument for $_G_opt" + exit_cmd=exit + break + ;; + esac + shift + ;; + + --no-silent|--no-quiet) + opt_quiet=false + func_append preserve_args " $_G_opt" + ;; + + --no-warnings|--no-warning|--no-warn) + opt_warning=false + func_append preserve_args " $_G_opt" + ;; + + --no-verbose) + opt_verbose=false + func_append preserve_args " $_G_opt" + ;; + + --silent|--quiet) + opt_quiet=: + opt_verbose=false + func_append preserve_args " $_G_opt" + ;; + + --tag) test $# = 0 && func_missing_arg $_G_opt && break + opt_tag=$1 + func_append preserve_args " $_G_opt $1" + func_enable_tag "$1" + shift + ;; + + --verbose|-v) opt_quiet=false + opt_verbose=: + func_append preserve_args " $_G_opt" + ;; + + # An option not handled by this hook function: + *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; + esac + done + + + # save modified positional parameters for caller + func_quote_for_eval ${1+"$@"} + libtool_parse_options_result=$func_quote_for_eval_result +} +func_add_hook func_parse_options libtool_parse_options + + + +# libtool_validate_options [ARG]... +# --------------------------------- +# Perform any sanity checks on option settings and/or unconsumed +# arguments. +libtool_validate_options () +{ + # save first non-option argument + if test 0 -lt $#; then + nonopt=$1 + shift + fi + + # preserve --debug + test : = "$debug_cmd" || func_append preserve_args " --debug" + + case $host in + # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452 + # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788 + *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*) + # don't eliminate duplications in $postdeps and $predeps + opt_duplicate_compiler_generated_deps=: + ;; + *) + opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps + ;; + esac + + $opt_help || { + # Sanity checks first: + func_check_version_match + + test yes != "$build_libtool_libs" \ + && test yes != "$build_old_libs" \ + && func_fatal_configuration "not configured to build any kind of library" + + # Darwin sucks + eval std_shrext=\"$shrext_cmds\" + + # Only execute mode is allowed to have -dlopen flags. + if test -n "$opt_dlopen" && test execute != "$opt_mode"; then + func_error "unrecognized option '-dlopen'" + $ECHO "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Change the help message to a mode-specific one. + generic_help=$help + help="Try '$progname --help --mode=$opt_mode' for more information." + } + + # Pass back the unparsed argument list + func_quote_for_eval ${1+"$@"} + libtool_validate_options_result=$func_quote_for_eval_result +} +func_add_hook func_validate_options libtool_validate_options + + +# Process options as early as possible so that --help and --version +# can return quickly. +func_options ${1+"$@"} +eval set dummy "$func_options_result"; shift + + + +## ----------- ## +## Main. ## +## ----------- ## + +magic='%%%MAGIC variable%%%' +magic_exe='%%%MAGIC EXE variable%%%' + +# Global variables. +extracted_archives= +extracted_serial=0 + +# If this variable is set in any of the actions, the command in it +# will be execed at the end. This prevents here-documents from being +# left over by shells. +exec_cmd= + + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' +} + +# func_generated_by_libtool +# True iff stdin has been generated by Libtool. This function is only +# a basic sanity check; it will hardly flush out determined imposters. +func_generated_by_libtool_p () +{ + $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 +} + +# func_lalib_p file +# True iff FILE is a libtool '.la' library or '.lo' object file. +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_lalib_p () +{ + test -f "$1" && + $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p +} + +# func_lalib_unsafe_p file +# True iff FILE is a libtool '.la' library or '.lo' object file. +# This function implements the same check as func_lalib_p without +# resorting to external programs. To this end, it redirects stdin and +# closes it afterwards, without saving the original file descriptor. +# As a safety measure, use it only where a negative result would be +# fatal anyway. Works if 'file' does not exist. +func_lalib_unsafe_p () +{ + lalib_p=no + if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then + for lalib_p_l in 1 2 3 4 + do + read lalib_p_line + case $lalib_p_line in + \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; + esac + done + exec 0<&5 5<&- + fi + test yes = "$lalib_p" +} + +# func_ltwrapper_script_p file +# True iff FILE is a libtool wrapper script +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_script_p () +{ + test -f "$1" && + $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p +} + +# func_ltwrapper_executable_p file +# True iff FILE is a libtool wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_executable_p () +{ + func_ltwrapper_exec_suffix= + case $1 in + *.exe) ;; + *) func_ltwrapper_exec_suffix=.exe ;; + esac + $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 +} + +# func_ltwrapper_scriptname file +# Assumes file is an ltwrapper_executable +# uses $file to determine the appropriate filename for a +# temporary ltwrapper_script. +func_ltwrapper_scriptname () +{ + func_dirname_and_basename "$1" "" "." + func_stripname '' '.exe' "$func_basename_result" + func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper +} + +# func_ltwrapper_p file +# True iff FILE is a libtool wrapper script or wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_p () +{ + func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" +} + + +# func_execute_cmds commands fail_cmd +# Execute tilde-delimited COMMANDS. +# If FAIL_CMD is given, eval that upon failure. +# FAIL_CMD may read-access the current command in variable CMD! +func_execute_cmds () +{ + $debug_cmd + + save_ifs=$IFS; IFS='~' + for cmd in $1; do + IFS=$sp$nl + eval cmd=\"$cmd\" + IFS=$save_ifs + func_show_eval "$cmd" "${2-:}" + done + IFS=$save_ifs +} + + +# func_source file +# Source FILE, adding directory component if necessary. +# Note that it is not necessary on cygwin/mingw to append a dot to +# FILE even if both FILE and FILE.exe exist: automatic-append-.exe +# behavior happens only for exec(3), not for open(2)! Also, sourcing +# 'FILE.' does not work on cygwin managed mounts. +func_source () +{ + $debug_cmd + + case $1 in + */* | *\\*) . "$1" ;; + *) . "./$1" ;; + esac +} + + +# func_resolve_sysroot PATH +# Replace a leading = in PATH with a sysroot. Store the result into +# func_resolve_sysroot_result +func_resolve_sysroot () +{ + func_resolve_sysroot_result=$1 + case $func_resolve_sysroot_result in + =*) + func_stripname '=' '' "$func_resolve_sysroot_result" + func_resolve_sysroot_result=$lt_sysroot$func_stripname_result + ;; + esac +} + +# func_replace_sysroot PATH +# If PATH begins with the sysroot, replace it with = and +# store the result into func_replace_sysroot_result. +func_replace_sysroot () +{ + case $lt_sysroot:$1 in + ?*:"$lt_sysroot"*) + func_stripname "$lt_sysroot" '' "$1" + func_replace_sysroot_result='='$func_stripname_result + ;; + *) + # Including no sysroot. + func_replace_sysroot_result=$1 + ;; + esac +} + +# func_infer_tag arg +# Infer tagged configuration to use if any are available and +# if one wasn't chosen via the "--tag" command line option. +# Only attempt this if the compiler in the base compile +# command doesn't match the default compiler. +# arg is usually of the form 'gcc ...' +func_infer_tag () +{ + $debug_cmd + + if test -n "$available_tags" && test -z "$tagname"; then + CC_quoted= + for arg in $CC; do + func_append_quoted CC_quoted "$arg" + done + CC_expanded=`func_echo_all $CC` + CC_quoted_expanded=`func_echo_all $CC_quoted` + case $@ in + # Blanks in the command may have been stripped by the calling shell, + # but not from the CC environment variable when configure was run. + " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ + " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; + # Blanks at the start of $base_compile will cause this to fail + # if we don't check for them as well. + *) + for z in $available_tags; do + if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then + # Evaluate the configuration. + eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" + CC_quoted= + for arg in $CC; do + # Double-quote args containing other shell metacharacters. + func_append_quoted CC_quoted "$arg" + done + CC_expanded=`func_echo_all $CC` + CC_quoted_expanded=`func_echo_all $CC_quoted` + case "$@ " in + " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ + " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) + # The compiler in the base compile command matches + # the one in the tagged configuration. + # Assume this is the tagged configuration we want. + tagname=$z + break + ;; + esac + fi + done + # If $tagname still isn't set, then no tagged configuration + # was found and let the user know that the "--tag" command + # line option must be used. + if test -z "$tagname"; then + func_echo "unable to infer tagged configuration" + func_fatal_error "specify a tag with '--tag'" +# else +# func_verbose "using $tagname tagged configuration" + fi + ;; + esac + fi +} + + + +# func_write_libtool_object output_name pic_name nonpic_name +# Create a libtool object file (analogous to a ".la" file), +# but don't create it if we're doing a dry run. +func_write_libtool_object () +{ + write_libobj=$1 + if test yes = "$build_libtool_libs"; then + write_lobj=\'$2\' + else + write_lobj=none + fi + + if test yes = "$build_old_libs"; then + write_oldobj=\'$3\' + else + write_oldobj=none + fi + + $opt_dry_run || { + cat >${write_libobj}T </dev/null` + if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then + func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | + $SED -e "$sed_naive_backslashify"` + else + func_convert_core_file_wine_to_w32_result= + fi + fi +} +# end: func_convert_core_file_wine_to_w32 + + +# func_convert_core_path_wine_to_w32 ARG +# Helper function used by path conversion functions when $build is *nix, and +# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly +# configured wine environment available, with the winepath program in $build's +# $PATH. Assumes ARG has no leading or trailing path separator characters. +# +# ARG is path to be converted from $build format to win32. +# Result is available in $func_convert_core_path_wine_to_w32_result. +# Unconvertible file (directory) names in ARG are skipped; if no directory names +# are convertible, then the result may be empty. +func_convert_core_path_wine_to_w32 () +{ + $debug_cmd + + # unfortunately, winepath doesn't convert paths, only file names + func_convert_core_path_wine_to_w32_result= + if test -n "$1"; then + oldIFS=$IFS + IFS=: + for func_convert_core_path_wine_to_w32_f in $1; do + IFS=$oldIFS + func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" + if test -n "$func_convert_core_file_wine_to_w32_result"; then + if test -z "$func_convert_core_path_wine_to_w32_result"; then + func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result + else + func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" + fi + fi + done + IFS=$oldIFS + fi +} +# end: func_convert_core_path_wine_to_w32 + + +# func_cygpath ARGS... +# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when +# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) +# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or +# (2), returns the Cygwin file name or path in func_cygpath_result (input +# file name or path is assumed to be in w32 format, as previously converted +# from $build's *nix or MSYS format). In case (3), returns the w32 file name +# or path in func_cygpath_result (input file name or path is assumed to be in +# Cygwin format). Returns an empty string on error. +# +# ARGS are passed to cygpath, with the last one being the file name or path to +# be converted. +# +# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH +# environment variable; do not put it in $PATH. +func_cygpath () +{ + $debug_cmd + + if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then + func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` + if test "$?" -ne 0; then + # on failure, ensure result is empty + func_cygpath_result= + fi + else + func_cygpath_result= + func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'" + fi +} +#end: func_cygpath + + +# func_convert_core_msys_to_w32 ARG +# Convert file name or path ARG from MSYS format to w32 format. Return +# result in func_convert_core_msys_to_w32_result. +func_convert_core_msys_to_w32 () +{ + $debug_cmd + + # awkward: cmd appends spaces to result + func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | + $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"` +} +#end: func_convert_core_msys_to_w32 + + +# func_convert_file_check ARG1 ARG2 +# Verify that ARG1 (a file name in $build format) was converted to $host +# format in ARG2. Otherwise, emit an error message, but continue (resetting +# func_to_host_file_result to ARG1). +func_convert_file_check () +{ + $debug_cmd + + if test -z "$2" && test -n "$1"; then + func_error "Could not determine host file name corresponding to" + func_error " '$1'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback: + func_to_host_file_result=$1 + fi +} +# end func_convert_file_check + + +# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH +# Verify that FROM_PATH (a path in $build format) was converted to $host +# format in TO_PATH. Otherwise, emit an error message, but continue, resetting +# func_to_host_file_result to a simplistic fallback value (see below). +func_convert_path_check () +{ + $debug_cmd + + if test -z "$4" && test -n "$3"; then + func_error "Could not determine the host path corresponding to" + func_error " '$3'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback. This is a deliberately simplistic "conversion" and + # should not be "improved". See libtool.info. + if test "x$1" != "x$2"; then + lt_replace_pathsep_chars="s|$1|$2|g" + func_to_host_path_result=`echo "$3" | + $SED -e "$lt_replace_pathsep_chars"` + else + func_to_host_path_result=$3 + fi + fi +} +# end func_convert_path_check + + +# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG +# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT +# and appending REPL if ORIG matches BACKPAT. +func_convert_path_front_back_pathsep () +{ + $debug_cmd + + case $4 in + $1 ) func_to_host_path_result=$3$func_to_host_path_result + ;; + esac + case $4 in + $2 ) func_append func_to_host_path_result "$3" + ;; + esac +} +# end func_convert_path_front_back_pathsep + + +################################################## +# $build to $host FILE NAME CONVERSION FUNCTIONS # +################################################## +# invoked via '$to_host_file_cmd ARG' +# +# In each case, ARG is the path to be converted from $build to $host format. +# Result will be available in $func_to_host_file_result. + + +# func_to_host_file ARG +# Converts the file name ARG from $build format to $host format. Return result +# in func_to_host_file_result. +func_to_host_file () +{ + $debug_cmd + + $to_host_file_cmd "$1" +} +# end func_to_host_file + + +# func_to_tool_file ARG LAZY +# converts the file name ARG from $build format to toolchain format. Return +# result in func_to_tool_file_result. If the conversion in use is listed +# in (the comma separated) LAZY, no conversion takes place. +func_to_tool_file () +{ + $debug_cmd + + case ,$2, in + *,"$to_tool_file_cmd",*) + func_to_tool_file_result=$1 + ;; + *) + $to_tool_file_cmd "$1" + func_to_tool_file_result=$func_to_host_file_result + ;; + esac +} +# end func_to_tool_file + + +# func_convert_file_noop ARG +# Copy ARG to func_to_host_file_result. +func_convert_file_noop () +{ + func_to_host_file_result=$1 +} +# end func_convert_file_noop + + +# func_convert_file_msys_to_w32 ARG +# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic +# conversion to w32 is not available inside the cwrapper. Returns result in +# func_to_host_file_result. +func_convert_file_msys_to_w32 () +{ + $debug_cmd + + func_to_host_file_result=$1 + if test -n "$1"; then + func_convert_core_msys_to_w32 "$1" + func_to_host_file_result=$func_convert_core_msys_to_w32_result + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_msys_to_w32 + + +# func_convert_file_cygwin_to_w32 ARG +# Convert file name ARG from Cygwin to w32 format. Returns result in +# func_to_host_file_result. +func_convert_file_cygwin_to_w32 () +{ + $debug_cmd + + func_to_host_file_result=$1 + if test -n "$1"; then + # because $build is cygwin, we call "the" cygpath in $PATH; no need to use + # LT_CYGPATH in this case. + func_to_host_file_result=`cygpath -m "$1"` + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_cygwin_to_w32 + + +# func_convert_file_nix_to_w32 ARG +# Convert file name ARG from *nix to w32 format. Requires a wine environment +# and a working winepath. Returns result in func_to_host_file_result. +func_convert_file_nix_to_w32 () +{ + $debug_cmd + + func_to_host_file_result=$1 + if test -n "$1"; then + func_convert_core_file_wine_to_w32 "$1" + func_to_host_file_result=$func_convert_core_file_wine_to_w32_result + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_nix_to_w32 + + +# func_convert_file_msys_to_cygwin ARG +# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. +# Returns result in func_to_host_file_result. +func_convert_file_msys_to_cygwin () +{ + $debug_cmd + + func_to_host_file_result=$1 + if test -n "$1"; then + func_convert_core_msys_to_w32 "$1" + func_cygpath -u "$func_convert_core_msys_to_w32_result" + func_to_host_file_result=$func_cygpath_result + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_msys_to_cygwin + + +# func_convert_file_nix_to_cygwin ARG +# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed +# in a wine environment, working winepath, and LT_CYGPATH set. Returns result +# in func_to_host_file_result. +func_convert_file_nix_to_cygwin () +{ + $debug_cmd + + func_to_host_file_result=$1 + if test -n "$1"; then + # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. + func_convert_core_file_wine_to_w32 "$1" + func_cygpath -u "$func_convert_core_file_wine_to_w32_result" + func_to_host_file_result=$func_cygpath_result + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_nix_to_cygwin + + +############################################# +# $build to $host PATH CONVERSION FUNCTIONS # +############################################# +# invoked via '$to_host_path_cmd ARG' +# +# In each case, ARG is the path to be converted from $build to $host format. +# The result will be available in $func_to_host_path_result. +# +# Path separators are also converted from $build format to $host format. If +# ARG begins or ends with a path separator character, it is preserved (but +# converted to $host format) on output. +# +# All path conversion functions are named using the following convention: +# file name conversion function : func_convert_file_X_to_Y () +# path conversion function : func_convert_path_X_to_Y () +# where, for any given $build/$host combination the 'X_to_Y' value is the +# same. If conversion functions are added for new $build/$host combinations, +# the two new functions must follow this pattern, or func_init_to_host_path_cmd +# will break. + + +# func_init_to_host_path_cmd +# Ensures that function "pointer" variable $to_host_path_cmd is set to the +# appropriate value, based on the value of $to_host_file_cmd. +to_host_path_cmd= +func_init_to_host_path_cmd () +{ + $debug_cmd + + if test -z "$to_host_path_cmd"; then + func_stripname 'func_convert_file_' '' "$to_host_file_cmd" + to_host_path_cmd=func_convert_path_$func_stripname_result + fi +} + + +# func_to_host_path ARG +# Converts the path ARG from $build format to $host format. Return result +# in func_to_host_path_result. +func_to_host_path () +{ + $debug_cmd + + func_init_to_host_path_cmd + $to_host_path_cmd "$1" +} +# end func_to_host_path + + +# func_convert_path_noop ARG +# Copy ARG to func_to_host_path_result. +func_convert_path_noop () +{ + func_to_host_path_result=$1 +} +# end func_convert_path_noop + + +# func_convert_path_msys_to_w32 ARG +# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic +# conversion to w32 is not available inside the cwrapper. Returns result in +# func_to_host_path_result. +func_convert_path_msys_to_w32 () +{ + $debug_cmd + + func_to_host_path_result=$1 + if test -n "$1"; then + # Remove leading and trailing path separator characters from ARG. MSYS + # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; + # and winepath ignores them completely. + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" + func_to_host_path_result=$func_convert_core_msys_to_w32_result + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_msys_to_w32 + + +# func_convert_path_cygwin_to_w32 ARG +# Convert path ARG from Cygwin to w32 format. Returns result in +# func_to_host_file_result. +func_convert_path_cygwin_to_w32 () +{ + $debug_cmd + + func_to_host_path_result=$1 + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_cygwin_to_w32 + + +# func_convert_path_nix_to_w32 ARG +# Convert path ARG from *nix to w32 format. Requires a wine environment and +# a working winepath. Returns result in func_to_host_file_result. +func_convert_path_nix_to_w32 () +{ + $debug_cmd + + func_to_host_path_result=$1 + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" + func_to_host_path_result=$func_convert_core_path_wine_to_w32_result + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_nix_to_w32 + + +# func_convert_path_msys_to_cygwin ARG +# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. +# Returns result in func_to_host_file_result. +func_convert_path_msys_to_cygwin () +{ + $debug_cmd + + func_to_host_path_result=$1 + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" + func_cygpath -u -p "$func_convert_core_msys_to_w32_result" + func_to_host_path_result=$func_cygpath_result + func_convert_path_check : : \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" : "$1" + fi +} +# end func_convert_path_msys_to_cygwin + + +# func_convert_path_nix_to_cygwin ARG +# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a +# a wine environment, working winepath, and LT_CYGPATH set. Returns result in +# func_to_host_file_result. +func_convert_path_nix_to_cygwin () +{ + $debug_cmd + + func_to_host_path_result=$1 + if test -n "$1"; then + # Remove leading and trailing path separator characters from + # ARG. msys behavior is inconsistent here, cygpath turns them + # into '.;' and ';.', and winepath ignores them completely. + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" + func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" + func_to_host_path_result=$func_cygpath_result + func_convert_path_check : : \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" : "$1" + fi +} +# end func_convert_path_nix_to_cygwin + + +# func_dll_def_p FILE +# True iff FILE is a Windows DLL '.def' file. +# Keep in sync with _LT_DLL_DEF_P in libtool.m4 +func_dll_def_p () +{ + $debug_cmd + + func_dll_def_p_tmp=`$SED -n \ + -e 's/^[ ]*//' \ + -e '/^\(;.*\)*$/d' \ + -e 's/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p' \ + -e q \ + "$1"` + test DEF = "$func_dll_def_p_tmp" +} + + +# func_mode_compile arg... +func_mode_compile () +{ + $debug_cmd + + # Get the compilation command and the source file. + base_compile= + srcfile=$nonopt # always keep a non-empty value in "srcfile" + suppress_opt=yes + suppress_output= + arg_mode=normal + libobj= + later= + pie_flag= + + for arg + do + case $arg_mode in + arg ) + # do not "continue". Instead, add this to base_compile + lastarg=$arg + arg_mode=normal + ;; + + target ) + libobj=$arg + arg_mode=normal + continue + ;; + + normal ) + # Accept any command-line options. + case $arg in + -o) + test -n "$libobj" && \ + func_fatal_error "you cannot specify '-o' more than once" + arg_mode=target + continue + ;; + + -pie | -fpie | -fPIE) + func_append pie_flag " $arg" + continue + ;; + + -shared | -static | -prefer-pic | -prefer-non-pic) + func_append later " $arg" + continue + ;; + + -no-suppress) + suppress_opt=no + continue + ;; + + -Xcompiler) + arg_mode=arg # the next one goes into the "base_compile" arg list + continue # The current "srcfile" will either be retained or + ;; # replaced later. I would guess that would be a bug. + + -Wc,*) + func_stripname '-Wc,' '' "$arg" + args=$func_stripname_result + lastarg= + save_ifs=$IFS; IFS=, + for arg in $args; do + IFS=$save_ifs + func_append_quoted lastarg "$arg" + done + IFS=$save_ifs + func_stripname ' ' '' "$lastarg" + lastarg=$func_stripname_result + + # Add the arguments to base_compile. + func_append base_compile " $lastarg" + continue + ;; + + *) + # Accept the current argument as the source file. + # The previous "srcfile" becomes the current argument. + # + lastarg=$srcfile + srcfile=$arg + ;; + esac # case $arg + ;; + esac # case $arg_mode + + # Aesthetically quote the previous argument. + func_append_quoted base_compile "$lastarg" + done # for arg + + case $arg_mode in + arg) + func_fatal_error "you must specify an argument for -Xcompile" + ;; + target) + func_fatal_error "you must specify a target with '-o'" + ;; + *) + # Get the name of the library object. + test -z "$libobj" && { + func_basename "$srcfile" + libobj=$func_basename_result + } + ;; + esac + + # Recognize several different file suffixes. + # If the user specifies -o file.o, it is replaced with file.lo + case $libobj in + *.[cCFSifmso] | \ + *.ada | *.adb | *.ads | *.asm | \ + *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ + *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) + func_xform "$libobj" + libobj=$func_xform_result + ;; + esac + + case $libobj in + *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; + *) + func_fatal_error "cannot determine name of library object from '$libobj'" + ;; + esac + + func_infer_tag $base_compile + + for arg in $later; do + case $arg in + -shared) + test yes = "$build_libtool_libs" \ + || func_fatal_configuration "cannot build a shared library" + build_old_libs=no + continue + ;; + + -static) + build_libtool_libs=no + build_old_libs=yes + continue + ;; + + -prefer-pic) + pic_mode=yes + continue + ;; + + -prefer-non-pic) + pic_mode=no + continue + ;; + esac + done + + func_quote_for_eval "$libobj" + test "X$libobj" != "X$func_quote_for_eval_result" \ + && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ + && func_warning "libobj name '$libobj' may not contain shell special characters." + func_dirname_and_basename "$obj" "/" "" + objname=$func_basename_result + xdir=$func_dirname_result + lobj=$xdir$objdir/$objname + + test -z "$base_compile" && \ + func_fatal_help "you must specify a compilation command" + + # Delete any leftover library objects. + if test yes = "$build_old_libs"; then + removelist="$obj $lobj $libobj ${libobj}T" + else + removelist="$lobj $libobj ${libobj}T" + fi + + # On Cygwin there's no "real" PIC flag so we must build both object types + case $host_os in + cygwin* | mingw* | pw32* | os2* | cegcc*) + pic_mode=default + ;; + esac + if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then + # non-PIC code in shared libraries is not supported + pic_mode=default + fi + + # Calculate the filename of the output object if compiler does + # not support -o with -c + if test no = "$compiler_c_o"; then + output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext + lockfile=$output_obj.lock + else + output_obj= + need_locks=no + lockfile= + fi + + # Lock this critical section if it is needed + # We use this script file to make the link, it avoids creating a new file + if test yes = "$need_locks"; then + until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do + func_echo "Waiting for $lockfile to be removed" + sleep 2 + done + elif test warn = "$need_locks"; then + if test -f "$lockfile"; then + $ECHO "\ +*** ERROR, $lockfile exists and contains: +`cat $lockfile 2>/dev/null` + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support '-c' and '-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + func_append removelist " $output_obj" + $ECHO "$srcfile" > "$lockfile" + fi + + $opt_dry_run || $RM $removelist + func_append removelist " $lockfile" + trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 + + func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 + srcfile=$func_to_tool_file_result + func_quote_for_eval "$srcfile" + qsrcfile=$func_quote_for_eval_result + + # Only build a PIC object if we are building libtool libraries. + if test yes = "$build_libtool_libs"; then + # Without this assignment, base_compile gets emptied. + fbsd_hideous_sh_bug=$base_compile + + if test no != "$pic_mode"; then + command="$base_compile $qsrcfile $pic_flag" + else + # Don't build PIC code + command="$base_compile $qsrcfile" + fi + + func_mkdir_p "$xdir$objdir" + + if test -z "$output_obj"; then + # Place PIC objects in $objdir + func_append command " -o $lobj" + fi + + func_show_eval_locale "$command" \ + 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' + + if test warn = "$need_locks" && + test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then + $ECHO "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support '-c' and '-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed, then go on to compile the next one + if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then + func_show_eval '$MV "$output_obj" "$lobj"' \ + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' + fi + + # Allow error messages only from the first compilation. + if test yes = "$suppress_opt"; then + suppress_output=' >/dev/null 2>&1' + fi + fi + + # Only build a position-dependent object if we build old libraries. + if test yes = "$build_old_libs"; then + if test yes != "$pic_mode"; then + # Don't build PIC code + command="$base_compile $qsrcfile$pie_flag" + else + command="$base_compile $qsrcfile $pic_flag" + fi + if test yes = "$compiler_c_o"; then + func_append command " -o $obj" + fi + + # Suppress compiler output if we already did a PIC compilation. + func_append command "$suppress_output" + func_show_eval_locale "$command" \ + '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' + + if test warn = "$need_locks" && + test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then + $ECHO "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support '-c' and '-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed + if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then + func_show_eval '$MV "$output_obj" "$obj"' \ + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' + fi + fi + + $opt_dry_run || { + func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" + + # Unlock the critical section if it was locked + if test no != "$need_locks"; then + removelist=$lockfile + $RM "$lockfile" + fi + } + + exit $EXIT_SUCCESS +} + +$opt_help || { + test compile = "$opt_mode" && func_mode_compile ${1+"$@"} +} + +func_mode_help () +{ + # We need to display help for each of the modes. + case $opt_mode in + "") + # Generic help is extracted from the usage comments + # at the start of this file. + func_help + ;; + + clean) + $ECHO \ +"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... + +Remove files from the build directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed +to RM. + +If FILE is a libtool library, object or program, all the files associated +with it are deleted. Otherwise, only FILE itself is deleted using RM." + ;; + + compile) + $ECHO \ +"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE + +Compile a source file into a libtool library object. + +This mode accepts the following additional options: + + -o OUTPUT-FILE set the output file name to OUTPUT-FILE + -no-suppress do not suppress compiler output for multiple passes + -prefer-pic try to build PIC objects only + -prefer-non-pic try to build non-PIC objects only + -shared do not build a '.o' file suitable for static linking + -static only build a '.o' file suitable for static linking + -Wc,FLAG pass FLAG directly to the compiler + +COMPILE-COMMAND is a command to be used in creating a 'standard' object file +from the given SOURCEFILE. + +The output file name is determined by removing the directory component from +SOURCEFILE, then substituting the C source code suffix '.c' with the +library object suffix, '.lo'." + ;; + + execute) + $ECHO \ +"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... + +Automatically set library path, then run a program. + +This mode accepts the following additional options: + + -dlopen FILE add the directory containing FILE to the library path + +This mode sets the library path environment variable according to '-dlopen' +flags. + +If any of the ARGS are libtool executable wrappers, then they are translated +into their corresponding uninstalled binary, and any of their required library +directories are added to the library path. + +Then, COMMAND is executed, with ARGS as arguments." + ;; + + finish) + $ECHO \ +"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... + +Complete the installation of libtool libraries. + +Each LIBDIR is a directory that contains libtool libraries. + +The commands that this mode executes may require superuser privileges. Use +the '--dry-run' option if you just want to see what would be executed." + ;; + + install) + $ECHO \ +"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... + +Install executables or libraries. + +INSTALL-COMMAND is the installation command. The first component should be +either the 'install' or 'cp' program. + +The following components of INSTALL-COMMAND are treated specially: + + -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation + +The rest of the components are interpreted as arguments to that command (only +BSD-compatible install options are recognized)." + ;; + + link) + $ECHO \ +"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... + +Link object files or libraries together to form another library, or to +create an executable program. + +LINK-COMMAND is a command using the C compiler that you would use to create +a program from several object files. + +The following components of LINK-COMMAND are treated specially: + + -all-static do not do any dynamic linking at all + -avoid-version do not add a version suffix if possible + -bindir BINDIR specify path to binaries directory (for systems where + libraries must be found in the PATH setting at runtime) + -dlopen FILE '-dlpreopen' FILE if it cannot be dlopened at runtime + -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols + -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) + -export-symbols SYMFILE + try to export only the symbols listed in SYMFILE + -export-symbols-regex REGEX + try to export only the symbols matching REGEX + -LLIBDIR search LIBDIR for required installed libraries + -lNAME OUTPUT-FILE requires the installed library libNAME + -module build a library that can dlopened + -no-fast-install disable the fast-install mode + -no-install link a not-installable executable + -no-undefined declare that a library does not refer to external symbols + -o OUTPUT-FILE create OUTPUT-FILE from the specified objects + -objectlist FILE use a list of object files found in FILE to specify objects + -os2dllname NAME force a short DLL name on OS/2 (no effect on other OSes) + -precious-files-regex REGEX + don't remove output files matching REGEX + -release RELEASE specify package release information + -rpath LIBDIR the created library will eventually be installed in LIBDIR + -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries + -shared only do dynamic linking of libtool libraries + -shrext SUFFIX override the standard shared library file extension + -static do not do any dynamic linking of uninstalled libtool libraries + -static-libtool-libs + do not do any dynamic linking of libtool libraries + -version-info CURRENT[:REVISION[:AGE]] + specify library version info [each variable defaults to 0] + -weak LIBNAME declare that the target provides the LIBNAME interface + -Wc,FLAG + -Xcompiler FLAG pass linker-specific FLAG directly to the compiler + -Wl,FLAG + -Xlinker FLAG pass linker-specific FLAG directly to the linker + -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) + +All other options (arguments beginning with '-') are ignored. + +Every other argument is treated as a filename. Files ending in '.la' are +treated as uninstalled libtool libraries, other files are standard or library +object files. + +If the OUTPUT-FILE ends in '.la', then a libtool library is created, +only library objects ('.lo' files) may be specified, and '-rpath' is +required, except when creating a convenience library. + +If OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created +using 'ar' and 'ranlib', or on Windows using 'lib'. + +If OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file +is created, otherwise an executable program is created." + ;; + + uninstall) + $ECHO \ +"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... + +Remove libraries from an installation directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed +to RM. + +If FILE is a libtool library, all the files associated with it are deleted. +Otherwise, only FILE itself is deleted using RM." + ;; + + *) + func_fatal_help "invalid operation mode '$opt_mode'" + ;; + esac + + echo + $ECHO "Try '$progname --help' for more information about other modes." +} + +# Now that we've collected a possible --mode arg, show help if necessary +if $opt_help; then + if test : = "$opt_help"; then + func_mode_help + else + { + func_help noexit + for opt_mode in compile link execute install finish uninstall clean; do + func_mode_help + done + } | $SED -n '1p; 2,$s/^Usage:/ or: /p' + { + func_help noexit + for opt_mode in compile link execute install finish uninstall clean; do + echo + func_mode_help + done + } | + $SED '1d + /^When reporting/,/^Report/{ + H + d + } + $x + /information about other modes/d + /more detailed .*MODE/d + s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' + fi + exit $? +fi + + +# func_mode_execute arg... +func_mode_execute () +{ + $debug_cmd + + # The first argument is the command name. + cmd=$nonopt + test -z "$cmd" && \ + func_fatal_help "you must specify a COMMAND" + + # Handle -dlopen flags immediately. + for file in $opt_dlopen; do + test -f "$file" \ + || func_fatal_help "'$file' is not a file" + + dir= + case $file in + *.la) + func_resolve_sysroot "$file" + file=$func_resolve_sysroot_result + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$file" \ + || func_fatal_help "'$lib' is not a valid libtool archive" + + # Read the libtool library. + dlname= + library_names= + func_source "$file" + + # Skip this library if it cannot be dlopened. + if test -z "$dlname"; then + # Warn if it was a shared library. + test -n "$library_names" && \ + func_warning "'$file' was not linked with '-export-dynamic'" + continue + fi + + func_dirname "$file" "" "." + dir=$func_dirname_result + + if test -f "$dir/$objdir/$dlname"; then + func_append dir "/$objdir" + else + if test ! -f "$dir/$dlname"; then + func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'" + fi + fi + ;; + + *.lo) + # Just add the directory containing the .lo file. + func_dirname "$file" "" "." + dir=$func_dirname_result + ;; + + *) + func_warning "'-dlopen' is ignored for non-libtool libraries and objects" + continue + ;; + esac + + # Get the absolute pathname. + absdir=`cd "$dir" && pwd` + test -n "$absdir" && dir=$absdir + + # Now add the directory to shlibpath_var. + if eval "test -z \"\$$shlibpath_var\""; then + eval "$shlibpath_var=\"\$dir\"" + else + eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" + fi + done + + # This variable tells wrapper scripts just to set shlibpath_var + # rather than running their programs. + libtool_execute_magic=$magic + + # Check if any of the arguments is a wrapper script. + args= + for file + do + case $file in + -* | *.la | *.lo ) ;; + *) + # Do a test to see if this is really a libtool program. + if func_ltwrapper_script_p "$file"; then + func_source "$file" + # Transform arg to wrapped name. + file=$progdir/$program + elif func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + func_source "$func_ltwrapper_scriptname_result" + # Transform arg to wrapped name. + file=$progdir/$program + fi + ;; + esac + # Quote arguments (to preserve shell metacharacters). + func_append_quoted args "$file" + done + + if $opt_dry_run; then + # Display what would be done. + if test -n "$shlibpath_var"; then + eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" + echo "export $shlibpath_var" + fi + $ECHO "$cmd$args" + exit $EXIT_SUCCESS + else + if test -n "$shlibpath_var"; then + # Export the shlibpath_var. + eval "export $shlibpath_var" + fi + + # Restore saved environment variables + for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES + do + eval "if test \"\${save_$lt_var+set}\" = set; then + $lt_var=\$save_$lt_var; export $lt_var + else + $lt_unset $lt_var + fi" + done + + # Now prepare to actually exec the command. + exec_cmd=\$cmd$args + fi +} + +test execute = "$opt_mode" && func_mode_execute ${1+"$@"} + + +# func_mode_finish arg... +func_mode_finish () +{ + $debug_cmd + + libs= + libdirs= + admincmds= + + for opt in "$nonopt" ${1+"$@"} + do + if test -d "$opt"; then + func_append libdirs " $opt" + + elif test -f "$opt"; then + if func_lalib_unsafe_p "$opt"; then + func_append libs " $opt" + else + func_warning "'$opt' is not a valid libtool archive" + fi + + else + func_fatal_error "invalid argument '$opt'" + fi + done + + if test -n "$libs"; then + if test -n "$lt_sysroot"; then + sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` + sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" + else + sysroot_cmd= + fi + + # Remove sysroot references + if $opt_dry_run; then + for lib in $libs; do + echo "removing references to $lt_sysroot and '=' prefixes from $lib" + done + else + tmpdir=`func_mktempdir` + for lib in $libs; do + $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ + > $tmpdir/tmp-la + mv -f $tmpdir/tmp-la $lib + done + ${RM}r "$tmpdir" + fi + fi + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + for libdir in $libdirs; do + if test -n "$finish_cmds"; then + # Do each command in the finish commands. + func_execute_cmds "$finish_cmds" 'admincmds="$admincmds +'"$cmd"'"' + fi + if test -n "$finish_eval"; then + # Do the single finish_eval. + eval cmds=\"$finish_eval\" + $opt_dry_run || eval "$cmds" || func_append admincmds " + $cmds" + fi + done + fi + + # Exit here if they wanted silent mode. + $opt_quiet && exit $EXIT_SUCCESS + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + echo "----------------------------------------------------------------------" + echo "Libraries have been installed in:" + for libdir in $libdirs; do + $ECHO " $libdir" + done + echo + echo "If you ever happen to want to link against installed libraries" + echo "in a given directory, LIBDIR, you must either use libtool, and" + echo "specify the full pathname of the library, or use the '-LLIBDIR'" + echo "flag during linking and do at least one of the following:" + if test -n "$shlibpath_var"; then + echo " - add LIBDIR to the '$shlibpath_var' environment variable" + echo " during execution" + fi + if test -n "$runpath_var"; then + echo " - add LIBDIR to the '$runpath_var' environment variable" + echo " during linking" + fi + if test -n "$hardcode_libdir_flag_spec"; then + libdir=LIBDIR + eval flag=\"$hardcode_libdir_flag_spec\" + + $ECHO " - use the '$flag' linker flag" + fi + if test -n "$admincmds"; then + $ECHO " - have your system administrator run these commands:$admincmds" + fi + if test -f /etc/ld.so.conf; then + echo " - have your system administrator add LIBDIR to '/etc/ld.so.conf'" + fi + echo + + echo "See any operating system documentation about shared libraries for" + case $host in + solaris2.[6789]|solaris2.1[0-9]) + echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" + echo "pages." + ;; + *) + echo "more information, such as the ld(1) and ld.so(8) manual pages." + ;; + esac + echo "----------------------------------------------------------------------" + fi + exit $EXIT_SUCCESS +} + +test finish = "$opt_mode" && func_mode_finish ${1+"$@"} + + +# func_mode_install arg... +func_mode_install () +{ + $debug_cmd + + # There may be an optional sh(1) argument at the beginning of + # install_prog (especially on Windows NT). + if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" || + # Allow the use of GNU shtool's install command. + case $nonopt in *shtool*) :;; *) false;; esac + then + # Aesthetically quote it. + func_quote_for_eval "$nonopt" + install_prog="$func_quote_for_eval_result " + arg=$1 + shift + else + install_prog= + arg=$nonopt + fi + + # The real first argument should be the name of the installation program. + # Aesthetically quote it. + func_quote_for_eval "$arg" + func_append install_prog "$func_quote_for_eval_result" + install_shared_prog=$install_prog + case " $install_prog " in + *[\\\ /]cp\ *) install_cp=: ;; + *) install_cp=false ;; + esac + + # We need to accept at least all the BSD install flags. + dest= + files= + opts= + prev= + install_type= + isdir=false + stripme= + no_mode=: + for arg + do + arg2= + if test -n "$dest"; then + func_append files " $dest" + dest=$arg + continue + fi + + case $arg in + -d) isdir=: ;; + -f) + if $install_cp; then :; else + prev=$arg + fi + ;; + -g | -m | -o) + prev=$arg + ;; + -s) + stripme=" -s" + continue + ;; + -*) + ;; + *) + # If the previous option needed an argument, then skip it. + if test -n "$prev"; then + if test X-m = "X$prev" && test -n "$install_override_mode"; then + arg2=$install_override_mode + no_mode=false + fi + prev= + else + dest=$arg + continue + fi + ;; + esac + + # Aesthetically quote the argument. + func_quote_for_eval "$arg" + func_append install_prog " $func_quote_for_eval_result" + if test -n "$arg2"; then + func_quote_for_eval "$arg2" + fi + func_append install_shared_prog " $func_quote_for_eval_result" + done + + test -z "$install_prog" && \ + func_fatal_help "you must specify an install program" + + test -n "$prev" && \ + func_fatal_help "the '$prev' option requires an argument" + + if test -n "$install_override_mode" && $no_mode; then + if $install_cp; then :; else + func_quote_for_eval "$install_override_mode" + func_append install_shared_prog " -m $func_quote_for_eval_result" + fi + fi + + if test -z "$files"; then + if test -z "$dest"; then + func_fatal_help "no file or destination specified" + else + func_fatal_help "you must specify a destination" + fi + fi + + # Strip any trailing slash from the destination. + func_stripname '' '/' "$dest" + dest=$func_stripname_result + + # Check to see that the destination is a directory. + test -d "$dest" && isdir=: + if $isdir; then + destdir=$dest + destname= + else + func_dirname_and_basename "$dest" "" "." + destdir=$func_dirname_result + destname=$func_basename_result + + # Not a directory, so check to see that there is only one file specified. + set dummy $files; shift + test "$#" -gt 1 && \ + func_fatal_help "'$dest' is not a directory" + fi + case $destdir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + for file in $files; do + case $file in + *.lo) ;; + *) + func_fatal_help "'$destdir' must be an absolute directory name" + ;; + esac + done + ;; + esac + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic=$magic + + staticlibs= + future_libdirs= + current_libdirs= + for file in $files; do + + # Do each installation. + case $file in + *.$libext) + # Do the static libraries later. + func_append staticlibs " $file" + ;; + + *.la) + func_resolve_sysroot "$file" + file=$func_resolve_sysroot_result + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$file" \ + || func_fatal_help "'$file' is not a valid libtool archive" + + library_names= + old_library= + relink_command= + func_source "$file" + + # Add the libdir to current_libdirs if it is the destination. + if test "X$destdir" = "X$libdir"; then + case "$current_libdirs " in + *" $libdir "*) ;; + *) func_append current_libdirs " $libdir" ;; + esac + else + # Note the libdir as a future libdir. + case "$future_libdirs " in + *" $libdir "*) ;; + *) func_append future_libdirs " $libdir" ;; + esac + fi + + func_dirname "$file" "/" "" + dir=$func_dirname_result + func_append dir "$objdir" + + if test -n "$relink_command"; then + # Determine the prefix the user has applied to our future dir. + inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` + + # Don't allow the user to place us outside of our expected + # location b/c this prevents finding dependent libraries that + # are installed to the same prefix. + # At present, this check doesn't affect windows .dll's that + # are installed into $libdir/../bin (currently, that works fine) + # but it's something to keep an eye on. + test "$inst_prefix_dir" = "$destdir" && \ + func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir" + + if test -n "$inst_prefix_dir"; then + # Stick the inst_prefix_dir data into the link command. + relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` + else + relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` + fi + + func_warning "relinking '$file'" + func_show_eval "$relink_command" \ + 'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"' + fi + + # See the names of the shared library. + set dummy $library_names; shift + if test -n "$1"; then + realname=$1 + shift + + srcname=$realname + test -n "$relink_command" && srcname=${realname}T + + # Install the shared library and build the symlinks. + func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ + 'exit $?' + tstripme=$stripme + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + case $realname in + *.dll.a) + tstripme= + ;; + esac + ;; + os2*) + case $realname in + *_dll.a) + tstripme= + ;; + esac + ;; + esac + if test -n "$tstripme" && test -n "$striplib"; then + func_show_eval "$striplib $destdir/$realname" 'exit $?' + fi + + if test "$#" -gt 0; then + # Delete the old symlinks, and create new ones. + # Try 'ln -sf' first, because the 'ln' binary might depend on + # the symlink we replace! Solaris /bin/ln does not understand -f, + # so we also need to try rm && ln -s. + for linkname + do + test "$linkname" != "$realname" \ + && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" + done + fi + + # Do each command in the postinstall commands. + lib=$destdir/$realname + func_execute_cmds "$postinstall_cmds" 'exit $?' + fi + + # Install the pseudo-library for information purposes. + func_basename "$file" + name=$func_basename_result + instname=$dir/${name}i + func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' + + # Maybe install the static library, too. + test -n "$old_library" && func_append staticlibs " $dir/$old_library" + ;; + + *.lo) + # Install (i.e. copy) a libtool object. + + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile=$destdir/$destname + else + func_basename "$file" + destfile=$func_basename_result + destfile=$destdir/$destfile + fi + + # Deduce the name of the destination old-style object file. + case $destfile in + *.lo) + func_lo2o "$destfile" + staticdest=$func_lo2o_result + ;; + *.$objext) + staticdest=$destfile + destfile= + ;; + *) + func_fatal_help "cannot copy a libtool object to '$destfile'" + ;; + esac + + # Install the libtool object if requested. + test -n "$destfile" && \ + func_show_eval "$install_prog $file $destfile" 'exit $?' + + # Install the old object if enabled. + if test yes = "$build_old_libs"; then + # Deduce the name of the old-style object file. + func_lo2o "$file" + staticobj=$func_lo2o_result + func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' + fi + exit $EXIT_SUCCESS + ;; + + *) + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile=$destdir/$destname + else + func_basename "$file" + destfile=$func_basename_result + destfile=$destdir/$destfile + fi + + # If the file is missing, and there is a .exe on the end, strip it + # because it is most likely a libtool script we actually want to + # install + stripped_ext= + case $file in + *.exe) + if test ! -f "$file"; then + func_stripname '' '.exe' "$file" + file=$func_stripname_result + stripped_ext=.exe + fi + ;; + esac + + # Do a test to see if this is really a libtool program. + case $host in + *cygwin* | *mingw*) + if func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + wrapper=$func_ltwrapper_scriptname_result + else + func_stripname '' '.exe' "$file" + wrapper=$func_stripname_result + fi + ;; + *) + wrapper=$file + ;; + esac + if func_ltwrapper_script_p "$wrapper"; then + notinst_deplibs= + relink_command= + + func_source "$wrapper" + + # Check the variables that should have been set. + test -z "$generated_by_libtool_version" && \ + func_fatal_error "invalid libtool wrapper script '$wrapper'" + + finalize=: + for lib in $notinst_deplibs; do + # Check to see that each library is installed. + libdir= + if test -f "$lib"; then + func_source "$lib" + fi + libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'` + if test -n "$libdir" && test ! -f "$libfile"; then + func_warning "'$lib' has not been installed in '$libdir'" + finalize=false + fi + done + + relink_command= + func_source "$wrapper" + + outputname= + if test no = "$fast_install" && test -n "$relink_command"; then + $opt_dry_run || { + if $finalize; then + tmpdir=`func_mktempdir` + func_basename "$file$stripped_ext" + file=$func_basename_result + outputname=$tmpdir/$file + # Replace the output file specification. + relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` + + $opt_quiet || { + func_quote_for_expand "$relink_command" + eval "func_echo $func_quote_for_expand_result" + } + if eval "$relink_command"; then : + else + func_error "error: relink '$file' with the above command before installing it" + $opt_dry_run || ${RM}r "$tmpdir" + continue + fi + file=$outputname + else + func_warning "cannot relink '$file'" + fi + } + else + # Install the binary that we compiled earlier. + file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` + fi + fi + + # remove .exe since cygwin /usr/bin/install will append another + # one anyway + case $install_prog,$host in + */usr/bin/install*,*cygwin*) + case $file:$destfile in + *.exe:*.exe) + # this is ok + ;; + *.exe:*) + destfile=$destfile.exe + ;; + *:*.exe) + func_stripname '' '.exe' "$destfile" + destfile=$func_stripname_result + ;; + esac + ;; + esac + func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' + $opt_dry_run || if test -n "$outputname"; then + ${RM}r "$tmpdir" + fi + ;; + esac + done + + for file in $staticlibs; do + func_basename "$file" + name=$func_basename_result + + # Set up the ranlib parameters. + oldlib=$destdir/$name + func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 + tool_oldlib=$func_to_tool_file_result + + func_show_eval "$install_prog \$file \$oldlib" 'exit $?' + + if test -n "$stripme" && test -n "$old_striplib"; then + func_show_eval "$old_striplib $tool_oldlib" 'exit $?' + fi + + # Do each command in the postinstall commands. + func_execute_cmds "$old_postinstall_cmds" 'exit $?' + done + + test -n "$future_libdirs" && \ + func_warning "remember to run '$progname --finish$future_libdirs'" + + if test -n "$current_libdirs"; then + # Maybe just do a dry run. + $opt_dry_run && current_libdirs=" -n$current_libdirs" + exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs' + else + exit $EXIT_SUCCESS + fi +} + +test install = "$opt_mode" && func_mode_install ${1+"$@"} + + +# func_generate_dlsyms outputname originator pic_p +# Extract symbols from dlprefiles and create ${outputname}S.o with +# a dlpreopen symbol table. +func_generate_dlsyms () +{ + $debug_cmd + + my_outputname=$1 + my_originator=$2 + my_pic_p=${3-false} + my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'` + my_dlsyms= + + if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then + if test -n "$NM" && test -n "$global_symbol_pipe"; then + my_dlsyms=${my_outputname}S.c + else + func_error "not configured to extract global symbols from dlpreopened files" + fi + fi + + if test -n "$my_dlsyms"; then + case $my_dlsyms in + "") ;; + *.c) + # Discover the nlist of each of the dlfiles. + nlist=$output_objdir/$my_outputname.nm + + func_show_eval "$RM $nlist ${nlist}S ${nlist}T" + + # Parse the name list into a source file. + func_verbose "creating $output_objdir/$my_dlsyms" + + $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ +/* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */ +/* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */ + +#ifdef __cplusplus +extern \"C\" { +#endif + +#if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) +#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" +#endif + +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE +/* DATA imports from DLLs on WIN32 can't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT_DLSYM_CONST +#elif defined __osf__ +/* This system does not cope well with relocations in const data. */ +# define LT_DLSYM_CONST +#else +# define LT_DLSYM_CONST const +#endif + +#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) + +/* External symbol declarations for the compiler. */\ +" + + if test yes = "$dlself"; then + func_verbose "generating symbol list for '$output'" + + $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" + + # Add our own program objects to the symbol list. + progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` + for progfile in $progfiles; do + func_to_tool_file "$progfile" func_convert_file_msys_to_w32 + func_verbose "extracting global C symbols from '$func_to_tool_file_result'" + $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" + done + + if test -n "$exclude_expsyms"; then + $opt_dry_run || { + eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + } + fi + + if test -n "$export_symbols_regex"; then + $opt_dry_run || { + eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + } + fi + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + export_symbols=$output_objdir/$outputname.exp + $opt_dry_run || { + $RM $export_symbols + eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' + case $host in + *cygwin* | *mingw* | *cegcc* ) + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' + ;; + esac + } + else + $opt_dry_run || { + eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' + eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + case $host in + *cygwin* | *mingw* | *cegcc* ) + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' + ;; + esac + } + fi + fi + + for dlprefile in $dlprefiles; do + func_verbose "extracting global C symbols from '$dlprefile'" + func_basename "$dlprefile" + name=$func_basename_result + case $host in + *cygwin* | *mingw* | *cegcc* ) + # if an import library, we need to obtain dlname + if func_win32_import_lib_p "$dlprefile"; then + func_tr_sh "$dlprefile" + eval "curr_lafile=\$libfile_$func_tr_sh_result" + dlprefile_dlbasename= + if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then + # Use subshell, to avoid clobbering current variable values + dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` + if test -n "$dlprefile_dlname"; then + func_basename "$dlprefile_dlname" + dlprefile_dlbasename=$func_basename_result + else + # no lafile. user explicitly requested -dlpreopen . + $sharedlib_from_linklib_cmd "$dlprefile" + dlprefile_dlbasename=$sharedlib_from_linklib_result + fi + fi + $opt_dry_run || { + if test -n "$dlprefile_dlbasename"; then + eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' + else + func_warning "Could not compute DLL name from $name" + eval '$ECHO ": $name " >> "$nlist"' + fi + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | + $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" + } + else # not an import lib + $opt_dry_run || { + eval '$ECHO ": $name " >> "$nlist"' + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" + } + fi + ;; + *) + $opt_dry_run || { + eval '$ECHO ": $name " >> "$nlist"' + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" + } + ;; + esac + done + + $opt_dry_run || { + # Make sure we have at least an empty file. + test -f "$nlist" || : > "$nlist" + + if test -n "$exclude_expsyms"; then + $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T + $MV "$nlist"T "$nlist" + fi + + # Try sorting and uniquifying the output. + if $GREP -v "^: " < "$nlist" | + if sort -k 3 /dev/null 2>&1; then + sort -k 3 + else + sort +2 + fi | + uniq > "$nlist"S; then + : + else + $GREP -v "^: " < "$nlist" > "$nlist"S + fi + + if test -f "$nlist"S; then + eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' + else + echo '/* NONE */' >> "$output_objdir/$my_dlsyms" + fi + + func_show_eval '$RM "${nlist}I"' + if test -n "$global_symbol_to_import"; then + eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I' + fi + + echo >> "$output_objdir/$my_dlsyms" "\ + +/* The mapping between symbol names and symbols. */ +typedef struct { + const char *name; + void *address; +} lt_dlsymlist; +extern LT_DLSYM_CONST lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[];\ +" + + if test -s "$nlist"I; then + echo >> "$output_objdir/$my_dlsyms" "\ +static void lt_syminit(void) +{ + LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols; + for (; symbol->name; ++symbol) + {" + $SED 's/.*/ if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms" + echo >> "$output_objdir/$my_dlsyms" "\ + } +}" + fi + echo >> "$output_objdir/$my_dlsyms" "\ +LT_DLSYM_CONST lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[] = +{ {\"$my_originator\", (void *) 0}," + + if test -s "$nlist"I; then + echo >> "$output_objdir/$my_dlsyms" "\ + {\"@INIT@\", (void *) <_syminit}," + fi + + case $need_lib_prefix in + no) + eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" + ;; + *) + eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" + ;; + esac + echo >> "$output_objdir/$my_dlsyms" "\ + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt_${my_prefix}_LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif\ +" + } # !$opt_dry_run + + pic_flag_for_symtable= + case "$compile_command " in + *" -static "*) ;; + *) + case $host in + # compiling the symbol table file with pic_flag works around + # a FreeBSD bug that causes programs to crash when -lm is + # linked before any other PIC object. But we must not use + # pic_flag when linking with -static. The problem exists in + # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. + *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) + pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; + *-*-hpux*) + pic_flag_for_symtable=" $pic_flag" ;; + *) + $my_pic_p && pic_flag_for_symtable=" $pic_flag" + ;; + esac + ;; + esac + symtab_cflags= + for arg in $LTCFLAGS; do + case $arg in + -pie | -fpie | -fPIE) ;; + *) func_append symtab_cflags " $arg" ;; + esac + done + + # Now compile the dynamic symbol file. + func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' + + # Clean up the generated files. + func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"' + + # Transform the symbol file into the correct name. + symfileobj=$output_objdir/${my_outputname}S.$objext + case $host in + *cygwin* | *mingw* | *cegcc* ) + if test -f "$output_objdir/$my_outputname.def"; then + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` + else + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` + fi + ;; + *) + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` + ;; + esac + ;; + *) + func_fatal_error "unknown suffix for '$my_dlsyms'" + ;; + esac + else + # We keep going just in case the user didn't refer to + # lt_preloaded_symbols. The linker will fail if global_symbol_pipe + # really was required. + + # Nullify the symbol file. + compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` + fi +} + +# func_cygming_gnu_implib_p ARG +# This predicate returns with zero status (TRUE) if +# ARG is a GNU/binutils-style import library. Returns +# with nonzero status (FALSE) otherwise. +func_cygming_gnu_implib_p () +{ + $debug_cmd + + func_to_tool_file "$1" func_convert_file_msys_to_w32 + func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` + test -n "$func_cygming_gnu_implib_tmp" +} + +# func_cygming_ms_implib_p ARG +# This predicate returns with zero status (TRUE) if +# ARG is an MS-style import library. Returns +# with nonzero status (FALSE) otherwise. +func_cygming_ms_implib_p () +{ + $debug_cmd + + func_to_tool_file "$1" func_convert_file_msys_to_w32 + func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` + test -n "$func_cygming_ms_implib_tmp" +} + +# func_win32_libid arg +# return the library type of file 'arg' +# +# Need a lot of goo to handle *both* DLLs and import libs +# Has to be a shell function in order to 'eat' the argument +# that is supplied when $file_magic_command is called. +# Despite the name, also deal with 64 bit binaries. +func_win32_libid () +{ + $debug_cmd + + win32_libid_type=unknown + win32_fileres=`file -L $1 2>/dev/null` + case $win32_fileres in + *ar\ archive\ import\ library*) # definitely import + win32_libid_type="x86 archive import" + ;; + *ar\ archive*) # could be an import, or static + # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. + if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | + $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then + case $nm_interface in + "MS dumpbin") + if func_cygming_ms_implib_p "$1" || + func_cygming_gnu_implib_p "$1" + then + win32_nmres=import + else + win32_nmres= + fi + ;; + *) + func_to_tool_file "$1" func_convert_file_msys_to_w32 + win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | + $SED -n -e ' + 1,100{ + / I /{ + s|.*|import| + p + q + } + }'` + ;; + esac + case $win32_nmres in + import*) win32_libid_type="x86 archive import";; + *) win32_libid_type="x86 archive static";; + esac + fi + ;; + *DLL*) + win32_libid_type="x86 DLL" + ;; + *executable*) # but shell scripts are "executable" too... + case $win32_fileres in + *MS\ Windows\ PE\ Intel*) + win32_libid_type="x86 DLL" + ;; + esac + ;; + esac + $ECHO "$win32_libid_type" +} + +# func_cygming_dll_for_implib ARG +# +# Platform-specific function to extract the +# name of the DLL associated with the specified +# import library ARG. +# Invoked by eval'ing the libtool variable +# $sharedlib_from_linklib_cmd +# Result is available in the variable +# $sharedlib_from_linklib_result +func_cygming_dll_for_implib () +{ + $debug_cmd + + sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` +} + +# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs +# +# The is the core of a fallback implementation of a +# platform-specific function to extract the name of the +# DLL associated with the specified import library LIBNAME. +# +# SECTION_NAME is either .idata$6 or .idata$7, depending +# on the platform and compiler that created the implib. +# +# Echos the name of the DLL associated with the +# specified import library. +func_cygming_dll_for_implib_fallback_core () +{ + $debug_cmd + + match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` + $OBJDUMP -s --section "$1" "$2" 2>/dev/null | + $SED '/^Contents of section '"$match_literal"':/{ + # Place marker at beginning of archive member dllname section + s/.*/====MARK====/ + p + d + } + # These lines can sometimes be longer than 43 characters, but + # are always uninteresting + /:[ ]*file format pe[i]\{,1\}-/d + /^In archive [^:]*:/d + # Ensure marker is printed + /^====MARK====/p + # Remove all lines with less than 43 characters + /^.\{43\}/!d + # From remaining lines, remove first 43 characters + s/^.\{43\}//' | + $SED -n ' + # Join marker and all lines until next marker into a single line + /^====MARK====/ b para + H + $ b para + b + :para + x + s/\n//g + # Remove the marker + s/^====MARK====// + # Remove trailing dots and whitespace + s/[\. \t]*$// + # Print + /./p' | + # we now have a list, one entry per line, of the stringified + # contents of the appropriate section of all members of the + # archive that possess that section. Heuristic: eliminate + # all those that have a first or second character that is + # a '.' (that is, objdump's representation of an unprintable + # character.) This should work for all archives with less than + # 0x302f exports -- but will fail for DLLs whose name actually + # begins with a literal '.' or a single character followed by + # a '.'. + # + # Of those that remain, print the first one. + $SED -e '/^\./d;/^.\./d;q' +} + +# func_cygming_dll_for_implib_fallback ARG +# Platform-specific function to extract the +# name of the DLL associated with the specified +# import library ARG. +# +# This fallback implementation is for use when $DLLTOOL +# does not support the --identify-strict option. +# Invoked by eval'ing the libtool variable +# $sharedlib_from_linklib_cmd +# Result is available in the variable +# $sharedlib_from_linklib_result +func_cygming_dll_for_implib_fallback () +{ + $debug_cmd + + if func_cygming_gnu_implib_p "$1"; then + # binutils import library + sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` + elif func_cygming_ms_implib_p "$1"; then + # ms-generated import library + sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` + else + # unknown + sharedlib_from_linklib_result= + fi +} + + +# func_extract_an_archive dir oldlib +func_extract_an_archive () +{ + $debug_cmd + + f_ex_an_ar_dir=$1; shift + f_ex_an_ar_oldlib=$1 + if test yes = "$lock_old_archive_extraction"; then + lockfile=$f_ex_an_ar_oldlib.lock + until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do + func_echo "Waiting for $lockfile to be removed" + sleep 2 + done + fi + func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ + 'stat=$?; rm -f "$lockfile"; exit $stat' + if test yes = "$lock_old_archive_extraction"; then + $opt_dry_run || rm -f "$lockfile" + fi + if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then + : + else + func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" + fi +} + + +# func_extract_archives gentop oldlib ... +func_extract_archives () +{ + $debug_cmd + + my_gentop=$1; shift + my_oldlibs=${1+"$@"} + my_oldobjs= + my_xlib= + my_xabs= + my_xdir= + + for my_xlib in $my_oldlibs; do + # Extract the objects. + case $my_xlib in + [\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;; + *) my_xabs=`pwd`"/$my_xlib" ;; + esac + func_basename "$my_xlib" + my_xlib=$func_basename_result + my_xlib_u=$my_xlib + while :; do + case " $extracted_archives " in + *" $my_xlib_u "*) + func_arith $extracted_serial + 1 + extracted_serial=$func_arith_result + my_xlib_u=lt$extracted_serial-$my_xlib ;; + *) break ;; + esac + done + extracted_archives="$extracted_archives $my_xlib_u" + my_xdir=$my_gentop/$my_xlib_u + + func_mkdir_p "$my_xdir" + + case $host in + *-darwin*) + func_verbose "Extracting $my_xabs" + # Do not bother doing anything if just a dry run + $opt_dry_run || { + darwin_orig_dir=`pwd` + cd $my_xdir || exit $? + darwin_archive=$my_xabs + darwin_curdir=`pwd` + func_basename "$darwin_archive" + darwin_base_archive=$func_basename_result + darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` + if test -n "$darwin_arches"; then + darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` + darwin_arch= + func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" + for darwin_arch in $darwin_arches; do + func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch" + $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive" + cd "unfat-$$/$darwin_base_archive-$darwin_arch" + func_extract_an_archive "`pwd`" "$darwin_base_archive" + cd "$darwin_curdir" + $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" + done # $darwin_arches + ## Okay now we've a bunch of thin objects, gotta fatten them up :) + darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u` + darwin_file= + darwin_files= + for darwin_file in $darwin_filelist; do + darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` + $LIPO -create -output "$darwin_file" $darwin_files + done # $darwin_filelist + $RM -rf unfat-$$ + cd "$darwin_orig_dir" + else + cd $darwin_orig_dir + func_extract_an_archive "$my_xdir" "$my_xabs" + fi # $darwin_arches + } # !$opt_dry_run + ;; + *) + func_extract_an_archive "$my_xdir" "$my_xabs" + ;; + esac + my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` + done + + func_extract_archives_result=$my_oldobjs +} + + +# func_emit_wrapper [arg=no] +# +# Emit a libtool wrapper script on stdout. +# Don't directly open a file because we may want to +# incorporate the script contents within a cygwin/mingw +# wrapper executable. Must ONLY be called from within +# func_mode_link because it depends on a number of variables +# set therein. +# +# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR +# variable will take. If 'yes', then the emitted script +# will assume that the directory where it is stored is +# the $objdir directory. This is a cygwin/mingw-specific +# behavior. +func_emit_wrapper () +{ + func_emit_wrapper_arg1=${1-no} + + $ECHO "\ +#! $SHELL + +# $output - temporary wrapper script for $objdir/$outputname +# Generated by $PROGRAM (GNU $PACKAGE) $VERSION +# +# The $output program cannot be directly executed until all the libtool +# libraries that it depends on are installed. +# +# This wrapper script should never be moved out of the build directory. +# If it is, it will not operate correctly. + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='$sed_quote_subst' + +# Be Bourne compatible +if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +relink_command=\"$relink_command\" + +# This environment variable determines our operation mode. +if test \"\$libtool_install_magic\" = \"$magic\"; then + # install mode needs the following variables: + generated_by_libtool_version='$macro_version' + notinst_deplibs='$notinst_deplibs' +else + # When we are sourced in execute mode, \$file and \$ECHO are already set. + if test \"\$libtool_execute_magic\" != \"$magic\"; then + file=\"\$0\"" + + qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` + $ECHO "\ + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$1 +_LTECHO_EOF' +} + ECHO=\"$qECHO\" + fi + +# Very basic option parsing. These options are (a) specific to +# the libtool wrapper, (b) are identical between the wrapper +# /script/ and the wrapper /executable/ that is used only on +# windows platforms, and (c) all begin with the string "--lt-" +# (application programs are unlikely to have options that match +# this pattern). +# +# There are only two supported options: --lt-debug and +# --lt-dump-script. There is, deliberately, no --lt-help. +# +# The first argument to this parsing function should be the +# script's $0 value, followed by "$@". +lt_option_debug= +func_parse_lt_options () +{ + lt_script_arg0=\$0 + shift + for lt_opt + do + case \"\$lt_opt\" in + --lt-debug) lt_option_debug=1 ;; + --lt-dump-script) + lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` + test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. + lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` + cat \"\$lt_dump_D/\$lt_dump_F\" + exit 0 + ;; + --lt-*) + \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 + exit 1 + ;; + esac + done + + # Print the debug banner immediately: + if test -n \"\$lt_option_debug\"; then + echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2 + fi +} + +# Used when --lt-debug. Prints its arguments to stdout +# (redirection is the responsibility of the caller) +func_lt_dump_args () +{ + lt_dump_args_N=1; + for lt_arg + do + \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\" + lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` + done +} + +# Core function for launching the target application +func_exec_program_core () +{ +" + case $host in + # Backslashes separate directories on plain windows + *-*-mingw | *-*-os2* | *-cegcc*) + $ECHO "\ + if test -n \"\$lt_option_debug\"; then + \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2 + func_lt_dump_args \${1+\"\$@\"} 1>&2 + fi + exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} +" + ;; + + *) + $ECHO "\ + if test -n \"\$lt_option_debug\"; then + \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2 + func_lt_dump_args \${1+\"\$@\"} 1>&2 + fi + exec \"\$progdir/\$program\" \${1+\"\$@\"} +" + ;; + esac + $ECHO "\ + \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 + exit 1 +} + +# A function to encapsulate launching the target application +# Strips options in the --lt-* namespace from \$@ and +# launches target application with the remaining arguments. +func_exec_program () +{ + case \" \$* \" in + *\\ --lt-*) + for lt_wr_arg + do + case \$lt_wr_arg in + --lt-*) ;; + *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; + esac + shift + done ;; + esac + func_exec_program_core \${1+\"\$@\"} +} + + # Parse options + func_parse_lt_options \"\$0\" \${1+\"\$@\"} + + # Find the directory that this script lives in. + thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` + test \"x\$thisdir\" = \"x\$file\" && thisdir=. + + # Follow symbolic links until we get to the real thisdir. + file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` + while test -n \"\$file\"; do + destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` + + # If there was a directory component, then change thisdir. + if test \"x\$destdir\" != \"x\$file\"; then + case \"\$destdir\" in + [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; + *) thisdir=\"\$thisdir/\$destdir\" ;; + esac + fi + + file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` + file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` + done + + # Usually 'no', except on cygwin/mingw when embedded into + # the cwrapper. + WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 + if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then + # special case for '.' + if test \"\$thisdir\" = \".\"; then + thisdir=\`pwd\` + fi + # remove .libs from thisdir + case \"\$thisdir\" in + *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; + $objdir ) thisdir=. ;; + esac + fi + + # Try to get the absolute directory name. + absdir=\`cd \"\$thisdir\" && pwd\` + test -n \"\$absdir\" && thisdir=\"\$absdir\" +" + + if test yes = "$fast_install"; then + $ECHO "\ + program=lt-'$outputname'$exeext + progdir=\"\$thisdir/$objdir\" + + if test ! -f \"\$progdir/\$program\" || + { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\ + test \"X\$file\" != \"X\$progdir/\$program\"; }; then + + file=\"\$\$-\$program\" + + if test ! -d \"\$progdir\"; then + $MKDIR \"\$progdir\" + else + $RM \"\$progdir/\$file\" + fi" + + $ECHO "\ + + # relink executable if necessary + if test -n \"\$relink_command\"; then + if relink_command_output=\`eval \$relink_command 2>&1\`; then : + else + \$ECHO \"\$relink_command_output\" >&2 + $RM \"\$progdir/\$file\" + exit 1 + fi + fi + + $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || + { $RM \"\$progdir/\$program\"; + $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } + $RM \"\$progdir/\$file\" + fi" + else + $ECHO "\ + program='$outputname' + progdir=\"\$thisdir/$objdir\" +" + fi + + $ECHO "\ + + if test -f \"\$progdir/\$program\"; then" + + # fixup the dll searchpath if we need to. + # + # Fix the DLL searchpath if we need to. Do this before prepending + # to shlibpath, because on Windows, both are PATH and uninstalled + # libraries must come first. + if test -n "$dllsearchpath"; then + $ECHO "\ + # Add the dll search path components to the executable PATH + PATH=$dllsearchpath:\$PATH +" + fi + + # Export our shlibpath_var if we have one. + if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then + $ECHO "\ + # Add our own library path to $shlibpath_var + $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" + + # Some systems cannot cope with colon-terminated $shlibpath_var + # The second colon is a workaround for a bug in BeOS R4 sed + $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` + + export $shlibpath_var +" + fi + + $ECHO "\ + if test \"\$libtool_execute_magic\" != \"$magic\"; then + # Run the actual program with our arguments. + func_exec_program \${1+\"\$@\"} + fi + else + # The program doesn't exist. + \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2 + \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 + \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 + exit 1 + fi +fi\ +" +} + + +# func_emit_cwrapperexe_src +# emit the source code for a wrapper executable on stdout +# Must ONLY be called from within func_mode_link because +# it depends on a number of variable set therein. +func_emit_cwrapperexe_src () +{ + cat < +#include +#ifdef _MSC_VER +# include +# include +# include +#else +# include +# include +# ifdef __CYGWIN__ +# include +# endif +#endif +#include +#include +#include +#include +#include +#include +#include +#include + +#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) + +/* declarations of non-ANSI functions */ +#if defined __MINGW32__ +# ifdef __STRICT_ANSI__ +int _putenv (const char *); +# endif +#elif defined __CYGWIN__ +# ifdef __STRICT_ANSI__ +char *realpath (const char *, char *); +int putenv (char *); +int setenv (const char *, const char *, int); +# endif +/* #elif defined other_platform || defined ... */ +#endif + +/* portability defines, excluding path handling macros */ +#if defined _MSC_VER +# define setmode _setmode +# define stat _stat +# define chmod _chmod +# define getcwd _getcwd +# define putenv _putenv +# define S_IXUSR _S_IEXEC +#elif defined __MINGW32__ +# define setmode _setmode +# define stat _stat +# define chmod _chmod +# define getcwd _getcwd +# define putenv _putenv +#elif defined __CYGWIN__ +# define HAVE_SETENV +# define FOPEN_WB "wb" +/* #elif defined other platforms ... */ +#endif + +#if defined PATH_MAX +# define LT_PATHMAX PATH_MAX +#elif defined MAXPATHLEN +# define LT_PATHMAX MAXPATHLEN +#else +# define LT_PATHMAX 1024 +#endif + +#ifndef S_IXOTH +# define S_IXOTH 0 +#endif +#ifndef S_IXGRP +# define S_IXGRP 0 +#endif + +/* path handling portability macros */ +#ifndef DIR_SEPARATOR +# define DIR_SEPARATOR '/' +# define PATH_SEPARATOR ':' +#endif + +#if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \ + defined __OS2__ +# define HAVE_DOS_BASED_FILE_SYSTEM +# define FOPEN_WB "wb" +# ifndef DIR_SEPARATOR_2 +# define DIR_SEPARATOR_2 '\\' +# endif +# ifndef PATH_SEPARATOR_2 +# define PATH_SEPARATOR_2 ';' +# endif +#endif + +#ifndef DIR_SEPARATOR_2 +# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) +#else /* DIR_SEPARATOR_2 */ +# define IS_DIR_SEPARATOR(ch) \ + (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) +#endif /* DIR_SEPARATOR_2 */ + +#ifndef PATH_SEPARATOR_2 +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) +#else /* PATH_SEPARATOR_2 */ +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) +#endif /* PATH_SEPARATOR_2 */ + +#ifndef FOPEN_WB +# define FOPEN_WB "w" +#endif +#ifndef _O_BINARY +# define _O_BINARY 0 +#endif + +#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) +#define XFREE(stale) do { \ + if (stale) { free (stale); stale = 0; } \ +} while (0) + +#if defined LT_DEBUGWRAPPER +static int lt_debug = 1; +#else +static int lt_debug = 0; +#endif + +const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ + +void *xmalloc (size_t num); +char *xstrdup (const char *string); +const char *base_name (const char *name); +char *find_executable (const char *wrapper); +char *chase_symlinks (const char *pathspec); +int make_executable (const char *path); +int check_executable (const char *path); +char *strendzap (char *str, const char *pat); +void lt_debugprintf (const char *file, int line, const char *fmt, ...); +void lt_fatal (const char *file, int line, const char *message, ...); +static const char *nonnull (const char *s); +static const char *nonempty (const char *s); +void lt_setenv (const char *name, const char *value); +char *lt_extend_str (const char *orig_value, const char *add, int to_end); +void lt_update_exe_path (const char *name, const char *value); +void lt_update_lib_path (const char *name, const char *value); +char **prepare_spawn (char **argv); +void lt_dump_script (FILE *f); +EOF + + cat <= 0) + && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) + return 1; + else + return 0; +} + +int +make_executable (const char *path) +{ + int rval = 0; + struct stat st; + + lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", + nonempty (path)); + if ((!path) || (!*path)) + return 0; + + if (stat (path, &st) >= 0) + { + rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); + } + return rval; +} + +/* Searches for the full path of the wrapper. Returns + newly allocated full path name if found, NULL otherwise + Does not chase symlinks, even on platforms that support them. +*/ +char * +find_executable (const char *wrapper) +{ + int has_slash = 0; + const char *p; + const char *p_next; + /* static buffer for getcwd */ + char tmp[LT_PATHMAX + 1]; + size_t tmp_len; + char *concat_name; + + lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", + nonempty (wrapper)); + + if ((wrapper == NULL) || (*wrapper == '\0')) + return NULL; + + /* Absolute path? */ +#if defined HAVE_DOS_BASED_FILE_SYSTEM + if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') + { + concat_name = xstrdup (wrapper); + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } + else + { +#endif + if (IS_DIR_SEPARATOR (wrapper[0])) + { + concat_name = xstrdup (wrapper); + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } +#if defined HAVE_DOS_BASED_FILE_SYSTEM + } +#endif + + for (p = wrapper; *p; p++) + if (*p == '/') + { + has_slash = 1; + break; + } + if (!has_slash) + { + /* no slashes; search PATH */ + const char *path = getenv ("PATH"); + if (path != NULL) + { + for (p = path; *p; p = p_next) + { + const char *q; + size_t p_len; + for (q = p; *q; q++) + if (IS_PATH_SEPARATOR (*q)) + break; + p_len = (size_t) (q - p); + p_next = (*q == '\0' ? q : q + 1); + if (p_len == 0) + { + /* empty path: current directory */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", + nonnull (strerror (errno))); + tmp_len = strlen (tmp); + concat_name = + XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + } + else + { + concat_name = + XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, p, p_len); + concat_name[p_len] = '/'; + strcpy (concat_name + p_len + 1, wrapper); + } + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } + } + /* not found in PATH; assume curdir */ + } + /* Relative path | not found in path: prepend cwd */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", + nonnull (strerror (errno))); + tmp_len = strlen (tmp); + concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + return NULL; +} + +char * +chase_symlinks (const char *pathspec) +{ +#ifndef S_ISLNK + return xstrdup (pathspec); +#else + char buf[LT_PATHMAX]; + struct stat s; + char *tmp_pathspec = xstrdup (pathspec); + char *p; + int has_symlinks = 0; + while (strlen (tmp_pathspec) && !has_symlinks) + { + lt_debugprintf (__FILE__, __LINE__, + "checking path component for symlinks: %s\n", + tmp_pathspec); + if (lstat (tmp_pathspec, &s) == 0) + { + if (S_ISLNK (s.st_mode) != 0) + { + has_symlinks = 1; + break; + } + + /* search backwards for last DIR_SEPARATOR */ + p = tmp_pathspec + strlen (tmp_pathspec) - 1; + while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) + p--; + if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) + { + /* no more DIR_SEPARATORS left */ + break; + } + *p = '\0'; + } + else + { + lt_fatal (__FILE__, __LINE__, + "error accessing file \"%s\": %s", + tmp_pathspec, nonnull (strerror (errno))); + } + } + XFREE (tmp_pathspec); + + if (!has_symlinks) + { + return xstrdup (pathspec); + } + + tmp_pathspec = realpath (pathspec, buf); + if (tmp_pathspec == 0) + { + lt_fatal (__FILE__, __LINE__, + "could not follow symlinks for %s", pathspec); + } + return xstrdup (tmp_pathspec); +#endif +} + +char * +strendzap (char *str, const char *pat) +{ + size_t len, patlen; + + assert (str != NULL); + assert (pat != NULL); + + len = strlen (str); + patlen = strlen (pat); + + if (patlen <= len) + { + str += len - patlen; + if (STREQ (str, pat)) + *str = '\0'; + } + return str; +} + +void +lt_debugprintf (const char *file, int line, const char *fmt, ...) +{ + va_list args; + if (lt_debug) + { + (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); + va_start (args, fmt); + (void) vfprintf (stderr, fmt, args); + va_end (args); + } +} + +static void +lt_error_core (int exit_status, const char *file, + int line, const char *mode, + const char *message, va_list ap) +{ + fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); + vfprintf (stderr, message, ap); + fprintf (stderr, ".\n"); + + if (exit_status >= 0) + exit (exit_status); +} + +void +lt_fatal (const char *file, int line, const char *message, ...) +{ + va_list ap; + va_start (ap, message); + lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); + va_end (ap); +} + +static const char * +nonnull (const char *s) +{ + return s ? s : "(null)"; +} + +static const char * +nonempty (const char *s) +{ + return (s && !*s) ? "(empty)" : nonnull (s); +} + +void +lt_setenv (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_setenv) setting '%s' to '%s'\n", + nonnull (name), nonnull (value)); + { +#ifdef HAVE_SETENV + /* always make a copy, for consistency with !HAVE_SETENV */ + char *str = xstrdup (value); + setenv (name, str, 1); +#else + size_t len = strlen (name) + 1 + strlen (value) + 1; + char *str = XMALLOC (char, len); + sprintf (str, "%s=%s", name, value); + if (putenv (str) != EXIT_SUCCESS) + { + XFREE (str); + } +#endif + } +} + +char * +lt_extend_str (const char *orig_value, const char *add, int to_end) +{ + char *new_value; + if (orig_value && *orig_value) + { + size_t orig_value_len = strlen (orig_value); + size_t add_len = strlen (add); + new_value = XMALLOC (char, add_len + orig_value_len + 1); + if (to_end) + { + strcpy (new_value, orig_value); + strcpy (new_value + orig_value_len, add); + } + else + { + strcpy (new_value, add); + strcpy (new_value + add_len, orig_value); + } + } + else + { + new_value = xstrdup (add); + } + return new_value; +} + +void +lt_update_exe_path (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", + nonnull (name), nonnull (value)); + + if (name && *name && value && *value) + { + char *new_value = lt_extend_str (getenv (name), value, 0); + /* some systems can't cope with a ':'-terminated path #' */ + size_t len = strlen (new_value); + while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1])) + { + new_value[--len] = '\0'; + } + lt_setenv (name, new_value); + XFREE (new_value); + } +} + +void +lt_update_lib_path (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", + nonnull (name), nonnull (value)); + + if (name && *name && value && *value) + { + char *new_value = lt_extend_str (getenv (name), value, 0); + lt_setenv (name, new_value); + XFREE (new_value); + } +} + +EOF + case $host_os in + mingw*) + cat <<"EOF" + +/* Prepares an argument vector before calling spawn(). + Note that spawn() does not by itself call the command interpreter + (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : + ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); + GetVersionEx(&v); + v.dwPlatformId == VER_PLATFORM_WIN32_NT; + }) ? "cmd.exe" : "command.com"). + Instead it simply concatenates the arguments, separated by ' ', and calls + CreateProcess(). We must quote the arguments since Win32 CreateProcess() + interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a + special way: + - Space and tab are interpreted as delimiters. They are not treated as + delimiters if they are surrounded by double quotes: "...". + - Unescaped double quotes are removed from the input. Their only effect is + that within double quotes, space and tab are treated like normal + characters. + - Backslashes not followed by double quotes are not special. + - But 2*n+1 backslashes followed by a double quote become + n backslashes followed by a double quote (n >= 0): + \" -> " + \\\" -> \" + \\\\\" -> \\" + */ +#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" +#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" +char ** +prepare_spawn (char **argv) +{ + size_t argc; + char **new_argv; + size_t i; + + /* Count number of arguments. */ + for (argc = 0; argv[argc] != NULL; argc++) + ; + + /* Allocate new argument vector. */ + new_argv = XMALLOC (char *, argc + 1); + + /* Put quoted arguments into the new argument vector. */ + for (i = 0; i < argc; i++) + { + const char *string = argv[i]; + + if (string[0] == '\0') + new_argv[i] = xstrdup ("\"\""); + else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) + { + int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); + size_t length; + unsigned int backslashes; + const char *s; + char *quoted_string; + char *p; + + length = 0; + backslashes = 0; + if (quote_around) + length++; + for (s = string; *s != '\0'; s++) + { + char c = *s; + if (c == '"') + length += backslashes + 1; + length++; + if (c == '\\') + backslashes++; + else + backslashes = 0; + } + if (quote_around) + length += backslashes + 1; + + quoted_string = XMALLOC (char, length + 1); + + p = quoted_string; + backslashes = 0; + if (quote_around) + *p++ = '"'; + for (s = string; *s != '\0'; s++) + { + char c = *s; + if (c == '"') + { + unsigned int j; + for (j = backslashes + 1; j > 0; j--) + *p++ = '\\'; + } + *p++ = c; + if (c == '\\') + backslashes++; + else + backslashes = 0; + } + if (quote_around) + { + unsigned int j; + for (j = backslashes; j > 0; j--) + *p++ = '\\'; + *p++ = '"'; + } + *p = '\0'; + + new_argv[i] = quoted_string; + } + else + new_argv[i] = (char *) string; + } + new_argv[argc] = NULL; + + return new_argv; +} +EOF + ;; + esac + + cat <<"EOF" +void lt_dump_script (FILE* f) +{ +EOF + func_emit_wrapper yes | + $SED -n -e ' +s/^\(.\{79\}\)\(..*\)/\1\ +\2/ +h +s/\([\\"]\)/\\\1/g +s/$/\\n/ +s/\([^\n]*\).*/ fputs ("\1", f);/p +g +D' + cat <<"EOF" +} +EOF +} +# end: func_emit_cwrapperexe_src + +# func_win32_import_lib_p ARG +# True if ARG is an import lib, as indicated by $file_magic_cmd +func_win32_import_lib_p () +{ + $debug_cmd + + case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in + *import*) : ;; + *) false ;; + esac +} + +# func_suncc_cstd_abi +# !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!! +# Several compiler flags select an ABI that is incompatible with the +# Cstd library. Avoid specifying it if any are in CXXFLAGS. +func_suncc_cstd_abi () +{ + $debug_cmd + + case " $compile_command " in + *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*) + suncc_use_cstd_abi=no + ;; + *) + suncc_use_cstd_abi=yes + ;; + esac +} + +# func_mode_link arg... +func_mode_link () +{ + $debug_cmd + + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + # It is impossible to link a dll without this setting, and + # we shouldn't force the makefile maintainer to figure out + # what system we are compiling for in order to pass an extra + # flag for every libtool invocation. + # allow_undefined=no + + # FIXME: Unfortunately, there are problems with the above when trying + # to make a dll that has undefined symbols, in which case not + # even a static library is built. For now, we need to specify + # -no-undefined on the libtool link line when we can be certain + # that all symbols are satisfied, otherwise we get a static library. + allow_undefined=yes + ;; + *) + allow_undefined=yes + ;; + esac + libtool_args=$nonopt + base_compile="$nonopt $@" + compile_command=$nonopt + finalize_command=$nonopt + + compile_rpath= + finalize_rpath= + compile_shlibpath= + finalize_shlibpath= + convenience= + old_convenience= + deplibs= + old_deplibs= + compiler_flags= + linker_flags= + dllsearchpath= + lib_search_path=`pwd` + inst_prefix_dir= + new_inherited_linker_flags= + + avoid_version=no + bindir= + dlfiles= + dlprefiles= + dlself=no + export_dynamic=no + export_symbols= + export_symbols_regex= + generated= + libobjs= + ltlibs= + module=no + no_install=no + objs= + os2dllname= + non_pic_objects= + precious_files_regex= + prefer_static_libs=no + preload=false + prev= + prevarg= + release= + rpath= + xrpath= + perm_rpath= + temp_rpath= + thread_safe=no + vinfo= + vinfo_number=no + weak_libs= + single_module=$wl-single_module + func_infer_tag $base_compile + + # We need to know -static, to get the right output filenames. + for arg + do + case $arg in + -shared) + test yes != "$build_libtool_libs" \ + && func_fatal_configuration "cannot build a shared library" + build_old_libs=no + break + ;; + -all-static | -static | -static-libtool-libs) + case $arg in + -all-static) + if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then + func_warning "complete static linking is impossible in this configuration" + fi + if test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + -static) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=built + ;; + -static-libtool-libs) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + esac + build_libtool_libs=no + build_old_libs=yes + break + ;; + esac + done + + # See if our shared archives depend on static archives. + test -n "$old_archive_from_new_cmds" && build_old_libs=yes + + # Go through the arguments, transforming them on the way. + while test "$#" -gt 0; do + arg=$1 + shift + func_quote_for_eval "$arg" + qarg=$func_quote_for_eval_unquoted_result + func_append libtool_args " $func_quote_for_eval_result" + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case $prev in + output) + func_append compile_command " @OUTPUT@" + func_append finalize_command " @OUTPUT@" + ;; + esac + + case $prev in + bindir) + bindir=$arg + prev= + continue + ;; + dlfiles|dlprefiles) + $preload || { + # Add the symbol object into the linking commands. + func_append compile_command " @SYMFILE@" + func_append finalize_command " @SYMFILE@" + preload=: + } + case $arg in + *.la | *.lo) ;; # We handle these cases below. + force) + if test no = "$dlself"; then + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + self) + if test dlprefiles = "$prev"; then + dlself=yes + elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then + dlself=yes + else + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + *) + if test dlfiles = "$prev"; then + func_append dlfiles " $arg" + else + func_append dlprefiles " $arg" + fi + prev= + continue + ;; + esac + ;; + expsyms) + export_symbols=$arg + test -f "$arg" \ + || func_fatal_error "symbol file '$arg' does not exist" + prev= + continue + ;; + expsyms_regex) + export_symbols_regex=$arg + prev= + continue + ;; + framework) + case $host in + *-*-darwin*) + case "$deplibs " in + *" $qarg.ltframework "*) ;; + *) func_append deplibs " $qarg.ltframework" # this is fixed later + ;; + esac + ;; + esac + prev= + continue + ;; + inst_prefix) + inst_prefix_dir=$arg + prev= + continue + ;; + mllvm) + # Clang does not use LLVM to link, so we can simply discard any + # '-mllvm $arg' options when doing the link step. + prev= + continue + ;; + objectlist) + if test -f "$arg"; then + save_arg=$arg + moreargs= + for fil in `cat "$save_arg"` + do +# func_append moreargs " $fil" + arg=$fil + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if func_lalib_unsafe_p "$arg"; then + pic_object= + non_pic_object= + + # Read the .lo file + func_source "$arg" + + if test -z "$pic_object" || + test -z "$non_pic_object" || + test none = "$pic_object" && + test none = "$non_pic_object"; then + func_fatal_error "cannot find name of object for '$arg'" + fi + + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir=$func_dirname_result + + if test none != "$pic_object"; then + # Prepend the subdirectory the object is found in. + pic_object=$xdir$pic_object + + if test dlfiles = "$prev"; then + if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then + func_append dlfiles " $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test dlprefiles = "$prev"; then + # Preload the old-style object. + func_append dlprefiles " $pic_object" + prev= + fi + + # A PIC object. + func_append libobjs " $pic_object" + arg=$pic_object + fi + + # Non-PIC object. + if test none != "$non_pic_object"; then + # Prepend the subdirectory the object is found in. + non_pic_object=$xdir$non_pic_object + + # A standard non-PIC object + func_append non_pic_objects " $non_pic_object" + if test -z "$pic_object" || test none = "$pic_object"; then + arg=$non_pic_object + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object=$pic_object + func_append non_pic_objects " $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if $opt_dry_run; then + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir=$func_dirname_result + + func_lo2o "$arg" + pic_object=$xdir$objdir/$func_lo2o_result + non_pic_object=$xdir$func_lo2o_result + func_append libobjs " $pic_object" + func_append non_pic_objects " $non_pic_object" + else + func_fatal_error "'$arg' is not a valid libtool object" + fi + fi + done + else + func_fatal_error "link input file '$arg' does not exist" + fi + arg=$save_arg + prev= + continue + ;; + os2dllname) + os2dllname=$arg + prev= + continue + ;; + precious_regex) + precious_files_regex=$arg + prev= + continue + ;; + release) + release=-$arg + prev= + continue + ;; + rpath | xrpath) + # We need an absolute path. + case $arg in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + func_fatal_error "only absolute run-paths are allowed" + ;; + esac + if test rpath = "$prev"; then + case "$rpath " in + *" $arg "*) ;; + *) func_append rpath " $arg" ;; + esac + else + case "$xrpath " in + *" $arg "*) ;; + *) func_append xrpath " $arg" ;; + esac + fi + prev= + continue + ;; + shrext) + shrext_cmds=$arg + prev= + continue + ;; + weak) + func_append weak_libs " $arg" + prev= + continue + ;; + xcclinker) + func_append linker_flags " $qarg" + func_append compiler_flags " $qarg" + prev= + func_append compile_command " $qarg" + func_append finalize_command " $qarg" + continue + ;; + xcompiler) + func_append compiler_flags " $qarg" + prev= + func_append compile_command " $qarg" + func_append finalize_command " $qarg" + continue + ;; + xlinker) + func_append linker_flags " $qarg" + func_append compiler_flags " $wl$qarg" + prev= + func_append compile_command " $wl$qarg" + func_append finalize_command " $wl$qarg" + continue + ;; + *) + eval "$prev=\"\$arg\"" + prev= + continue + ;; + esac + fi # test -n "$prev" + + prevarg=$arg + + case $arg in + -all-static) + if test -n "$link_static_flag"; then + # See comment for -static flag below, for more details. + func_append compile_command " $link_static_flag" + func_append finalize_command " $link_static_flag" + fi + continue + ;; + + -allow-undefined) + # FIXME: remove this flag sometime in the future. + func_fatal_error "'-allow-undefined' must not be used because it is the default" + ;; + + -avoid-version) + avoid_version=yes + continue + ;; + + -bindir) + prev=bindir + continue + ;; + + -dlopen) + prev=dlfiles + continue + ;; + + -dlpreopen) + prev=dlprefiles + continue + ;; + + -export-dynamic) + export_dynamic=yes + continue + ;; + + -export-symbols | -export-symbols-regex) + if test -n "$export_symbols" || test -n "$export_symbols_regex"; then + func_fatal_error "more than one -exported-symbols argument is not allowed" + fi + if test X-export-symbols = "X$arg"; then + prev=expsyms + else + prev=expsyms_regex + fi + continue + ;; + + -framework) + prev=framework + continue + ;; + + -inst-prefix-dir) + prev=inst_prefix + continue + ;; + + # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* + # so, if we see these flags be careful not to treat them like -L + -L[A-Z][A-Z]*:*) + case $with_gcc/$host in + no/*-*-irix* | /*-*-irix*) + func_append compile_command " $arg" + func_append finalize_command " $arg" + ;; + esac + continue + ;; + + -L*) + func_stripname "-L" '' "$arg" + if test -z "$func_stripname_result"; then + if test "$#" -gt 0; then + func_fatal_error "require no space between '-L' and '$1'" + else + func_fatal_error "need path for '-L' option" + fi + fi + func_resolve_sysroot "$func_stripname_result" + dir=$func_resolve_sysroot_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + absdir=`cd "$dir" && pwd` + test -z "$absdir" && \ + func_fatal_error "cannot determine absolute directory name of '$dir'" + dir=$absdir + ;; + esac + case "$deplibs " in + *" -L$dir "* | *" $arg "*) + # Will only happen for absolute or sysroot arguments + ;; + *) + # Preserve sysroot, but never include relative directories + case $dir in + [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; + *) func_append deplibs " -L$dir" ;; + esac + func_append lib_search_path " $dir" + ;; + esac + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$dir:"*) ;; + ::) dllsearchpath=$dir;; + *) func_append dllsearchpath ":$dir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + ::) dllsearchpath=$testbindir;; + *) func_append dllsearchpath ":$testbindir";; + esac + ;; + esac + continue + ;; + + -l*) + if test X-lc = "X$arg" || test X-lm = "X$arg"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) + # These systems don't actually have a C or math library (as such) + continue + ;; + *-*-os2*) + # These systems don't actually have a C library (as such) + test X-lc = "X$arg" && continue + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) + # Do not include libc due to us having libc/libc_r. + test X-lc = "X$arg" && continue + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C and math libraries are in the System framework + func_append deplibs " System.ltframework" + continue + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + test X-lc = "X$arg" && continue + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + test X-lc = "X$arg" && continue + ;; + esac + elif test X-lc_r = "X$arg"; then + case $host in + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) + # Do not include libc_r directly, use -pthread flag. + continue + ;; + esac + fi + func_append deplibs " $arg" + continue + ;; + + -mllvm) + prev=mllvm + continue + ;; + + -module) + module=yes + continue + ;; + + # Tru64 UNIX uses -model [arg] to determine the layout of C++ + # classes, name mangling, and exception handling. + # Darwin uses the -arch flag to determine output architecture. + -model|-arch|-isysroot|--sysroot) + func_append compiler_flags " $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + prev=xcompiler + continue + ;; + + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ + |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) + func_append compiler_flags " $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + case "$new_inherited_linker_flags " in + *" $arg "*) ;; + * ) func_append new_inherited_linker_flags " $arg" ;; + esac + continue + ;; + + -multi_module) + single_module=$wl-multi_module + continue + ;; + + -no-fast-install) + fast_install=no + continue + ;; + + -no-install) + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) + # The PATH hackery in wrapper scripts is required on Windows + # and Darwin in order for the loader to find any dlls it needs. + func_warning "'-no-install' is ignored for $host" + func_warning "assuming '-no-fast-install' instead" + fast_install=no + ;; + *) no_install=yes ;; + esac + continue + ;; + + -no-undefined) + allow_undefined=no + continue + ;; + + -objectlist) + prev=objectlist + continue + ;; + + -os2dllname) + prev=os2dllname + continue + ;; + + -o) prev=output ;; + + -precious-files-regex) + prev=precious_regex + continue + ;; + + -release) + prev=release + continue + ;; + + -rpath) + prev=rpath + continue + ;; + + -R) + prev=xrpath + continue + ;; + + -R*) + func_stripname '-R' '' "$arg" + dir=$func_stripname_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + =*) + func_stripname '=' '' "$dir" + dir=$lt_sysroot$func_stripname_result + ;; + *) + func_fatal_error "only absolute run-paths are allowed" + ;; + esac + case "$xrpath " in + *" $dir "*) ;; + *) func_append xrpath " $dir" ;; + esac + continue + ;; + + -shared) + # The effects of -shared are defined in a previous loop. + continue + ;; + + -shrext) + prev=shrext + continue + ;; + + -static | -static-libtool-libs) + # The effects of -static are defined in a previous loop. + # We used to do the same as -all-static on platforms that + # didn't have a PIC flag, but the assumption that the effects + # would be equivalent was wrong. It would break on at least + # Digital Unix and AIX. + continue + ;; + + -thread-safe) + thread_safe=yes + continue + ;; + + -version-info) + prev=vinfo + continue + ;; + + -version-number) + prev=vinfo + vinfo_number=yes + continue + ;; + + -weak) + prev=weak + continue + ;; + + -Wc,*) + func_stripname '-Wc,' '' "$arg" + args=$func_stripname_result + arg= + save_ifs=$IFS; IFS=, + for flag in $args; do + IFS=$save_ifs + func_quote_for_eval "$flag" + func_append arg " $func_quote_for_eval_result" + func_append compiler_flags " $func_quote_for_eval_result" + done + IFS=$save_ifs + func_stripname ' ' '' "$arg" + arg=$func_stripname_result + ;; + + -Wl,*) + func_stripname '-Wl,' '' "$arg" + args=$func_stripname_result + arg= + save_ifs=$IFS; IFS=, + for flag in $args; do + IFS=$save_ifs + func_quote_for_eval "$flag" + func_append arg " $wl$func_quote_for_eval_result" + func_append compiler_flags " $wl$func_quote_for_eval_result" + func_append linker_flags " $func_quote_for_eval_result" + done + IFS=$save_ifs + func_stripname ' ' '' "$arg" + arg=$func_stripname_result + ;; + + -Xcompiler) + prev=xcompiler + continue + ;; + + -Xlinker) + prev=xlinker + continue + ;; + + -XCClinker) + prev=xcclinker + continue + ;; + + # -msg_* for osf cc + -msg_*) + func_quote_for_eval "$arg" + arg=$func_quote_for_eval_result + ;; + + # Flags to be passed through unchanged, with rationale: + # -64, -mips[0-9] enable 64-bit mode for the SGI compiler + # -r[0-9][0-9]* specify processor for the SGI compiler + # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler + # +DA*, +DD* enable 64-bit mode for the HP compiler + # -q* compiler args for the IBM compiler + # -m*, -t[45]*, -txscale* architecture-specific flags for GCC + # -F/path path to uninstalled frameworks, gcc on darwin + # -p, -pg, --coverage, -fprofile-* profiling flags for GCC + # -fstack-protector* stack protector flags for GCC + # @file GCC response files + # -tp=* Portland pgcc target processor selection + # --sysroot=* for sysroot support + # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization + # -stdlib=* select c++ std lib with clang + -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ + -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ + -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*) + func_quote_for_eval "$arg" + arg=$func_quote_for_eval_result + func_append compile_command " $arg" + func_append finalize_command " $arg" + func_append compiler_flags " $arg" + continue + ;; + + -Z*) + if test os2 = "`expr $host : '.*\(os2\)'`"; then + # OS/2 uses -Zxxx to specify OS/2-specific options + compiler_flags="$compiler_flags $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + case $arg in + -Zlinker | -Zstack) + prev=xcompiler + ;; + esac + continue + else + # Otherwise treat like 'Some other compiler flag' below + func_quote_for_eval "$arg" + arg=$func_quote_for_eval_result + fi + ;; + + # Some other compiler flag. + -* | +*) + func_quote_for_eval "$arg" + arg=$func_quote_for_eval_result + ;; + + *.$objext) + # A standard object. + func_append objs " $arg" + ;; + + *.lo) + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if func_lalib_unsafe_p "$arg"; then + pic_object= + non_pic_object= + + # Read the .lo file + func_source "$arg" + + if test -z "$pic_object" || + test -z "$non_pic_object" || + test none = "$pic_object" && + test none = "$non_pic_object"; then + func_fatal_error "cannot find name of object for '$arg'" + fi + + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir=$func_dirname_result + + test none = "$pic_object" || { + # Prepend the subdirectory the object is found in. + pic_object=$xdir$pic_object + + if test dlfiles = "$prev"; then + if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then + func_append dlfiles " $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test dlprefiles = "$prev"; then + # Preload the old-style object. + func_append dlprefiles " $pic_object" + prev= + fi + + # A PIC object. + func_append libobjs " $pic_object" + arg=$pic_object + } + + # Non-PIC object. + if test none != "$non_pic_object"; then + # Prepend the subdirectory the object is found in. + non_pic_object=$xdir$non_pic_object + + # A standard non-PIC object + func_append non_pic_objects " $non_pic_object" + if test -z "$pic_object" || test none = "$pic_object"; then + arg=$non_pic_object + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object=$pic_object + func_append non_pic_objects " $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if $opt_dry_run; then + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir=$func_dirname_result + + func_lo2o "$arg" + pic_object=$xdir$objdir/$func_lo2o_result + non_pic_object=$xdir$func_lo2o_result + func_append libobjs " $pic_object" + func_append non_pic_objects " $non_pic_object" + else + func_fatal_error "'$arg' is not a valid libtool object" + fi + fi + ;; + + *.$libext) + # An archive. + func_append deplibs " $arg" + func_append old_deplibs " $arg" + continue + ;; + + *.la) + # A libtool-controlled library. + + func_resolve_sysroot "$arg" + if test dlfiles = "$prev"; then + # This library was specified with -dlopen. + func_append dlfiles " $func_resolve_sysroot_result" + prev= + elif test dlprefiles = "$prev"; then + # The library was specified with -dlpreopen. + func_append dlprefiles " $func_resolve_sysroot_result" + prev= + else + func_append deplibs " $func_resolve_sysroot_result" + fi + continue + ;; + + # Some other compiler argument. + *) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + func_quote_for_eval "$arg" + arg=$func_quote_for_eval_result + ;; + esac # arg + + # Now actually substitute the argument into the commands. + if test -n "$arg"; then + func_append compile_command " $arg" + func_append finalize_command " $arg" + fi + done # argument parsing loop + + test -n "$prev" && \ + func_fatal_help "the '$prevarg' option requires an argument" + + if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then + eval arg=\"$export_dynamic_flag_spec\" + func_append compile_command " $arg" + func_append finalize_command " $arg" + fi + + oldlibs= + # calculate the name of the file, without its directory + func_basename "$output" + outputname=$func_basename_result + libobjs_save=$libobjs + + if test -n "$shlibpath_var"; then + # get the directories listed in $shlibpath_var + eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\` + else + shlib_search_path= + fi + eval sys_lib_search_path=\"$sys_lib_search_path_spec\" + eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" + + # Definition is injected by LT_CONFIG during libtool generation. + func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH" + + func_dirname "$output" "/" "" + output_objdir=$func_dirname_result$objdir + func_to_tool_file "$output_objdir/" + tool_output_objdir=$func_to_tool_file_result + # Create the object directory. + func_mkdir_p "$output_objdir" + + # Determine the type of output + case $output in + "") + func_fatal_help "you must specify an output file" + ;; + *.$libext) linkmode=oldlib ;; + *.lo | *.$objext) linkmode=obj ;; + *.la) linkmode=lib ;; + *) linkmode=prog ;; # Anything else should be a program. + esac + + specialdeplibs= + + libs= + # Find all interdependent deplibs by searching for libraries + # that are linked more than once (e.g. -la -lb -la) + for deplib in $deplibs; do + if $opt_preserve_dup_deps; then + case "$libs " in + *" $deplib "*) func_append specialdeplibs " $deplib" ;; + esac + fi + func_append libs " $deplib" + done + + if test lib = "$linkmode"; then + libs="$predeps $libs $compiler_lib_search_path $postdeps" + + # Compute libraries that are listed more than once in $predeps + # $postdeps and mark them as special (i.e., whose duplicates are + # not to be eliminated). + pre_post_deps= + if $opt_duplicate_compiler_generated_deps; then + for pre_post_dep in $predeps $postdeps; do + case "$pre_post_deps " in + *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; + esac + func_append pre_post_deps " $pre_post_dep" + done + fi + pre_post_deps= + fi + + deplibs= + newdependency_libs= + newlib_search_path= + need_relink=no # whether we're linking any uninstalled libtool libraries + notinst_deplibs= # not-installed libtool libraries + notinst_path= # paths that contain not-installed libtool libraries + + case $linkmode in + lib) + passes="conv dlpreopen link" + for file in $dlfiles $dlprefiles; do + case $file in + *.la) ;; + *) + func_fatal_help "libraries can '-dlopen' only libtool libraries: $file" + ;; + esac + done + ;; + prog) + compile_deplibs= + finalize_deplibs= + alldeplibs=false + newdlfiles= + newdlprefiles= + passes="conv scan dlopen dlpreopen link" + ;; + *) passes="conv" + ;; + esac + + for pass in $passes; do + # The preopen pass in lib mode reverses $deplibs; put it back here + # so that -L comes before libs that need it for instance... + if test lib,link = "$linkmode,$pass"; then + ## FIXME: Find the place where the list is rebuilt in the wrong + ## order, and fix it there properly + tmp_deplibs= + for deplib in $deplibs; do + tmp_deplibs="$deplib $tmp_deplibs" + done + deplibs=$tmp_deplibs + fi + + if test lib,link = "$linkmode,$pass" || + test prog,scan = "$linkmode,$pass"; then + libs=$deplibs + deplibs= + fi + if test prog = "$linkmode"; then + case $pass in + dlopen) libs=$dlfiles ;; + dlpreopen) libs=$dlprefiles ;; + link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; + esac + fi + if test lib,dlpreopen = "$linkmode,$pass"; then + # Collect and forward deplibs of preopened libtool libs + for lib in $dlprefiles; do + # Ignore non-libtool-libs + dependency_libs= + func_resolve_sysroot "$lib" + case $lib in + *.la) func_source "$func_resolve_sysroot_result" ;; + esac + + # Collect preopened libtool deplibs, except any this library + # has declared as weak libs + for deplib in $dependency_libs; do + func_basename "$deplib" + deplib_base=$func_basename_result + case " $weak_libs " in + *" $deplib_base "*) ;; + *) func_append deplibs " $deplib" ;; + esac + done + done + libs=$dlprefiles + fi + if test dlopen = "$pass"; then + # Collect dlpreopened libraries + save_deplibs=$deplibs + deplibs= + fi + + for deplib in $libs; do + lib= + found=false + case $deplib in + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ + |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) + if test prog,link = "$linkmode,$pass"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + func_append compiler_flags " $deplib" + if test lib = "$linkmode"; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) func_append new_inherited_linker_flags " $deplib" ;; + esac + fi + fi + continue + ;; + -l*) + if test lib != "$linkmode" && test prog != "$linkmode"; then + func_warning "'-l' is ignored for archives/objects" + continue + fi + func_stripname '-l' '' "$deplib" + name=$func_stripname_result + if test lib = "$linkmode"; then + searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" + else + searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" + fi + for searchdir in $searchdirs; do + for search_ext in .la $std_shrext .so .a; do + # Search the libtool library + lib=$searchdir/lib$name$search_ext + if test -f "$lib"; then + if test .la = "$search_ext"; then + found=: + else + found=false + fi + break 2 + fi + done + done + if $found; then + # deplib is a libtool library + # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, + # We need to do some special things here, and not later. + if test yes = "$allow_libtool_libs_with_static_runtimes"; then + case " $predeps $postdeps " in + *" $deplib "*) + if func_lalib_p "$lib"; then + library_names= + old_library= + func_source "$lib" + for l in $old_library $library_names; do + ll=$l + done + if test "X$ll" = "X$old_library"; then # only static version available + found=false + func_dirname "$lib" "" "." + ladir=$func_dirname_result + lib=$ladir/$old_library + if test prog,link = "$linkmode,$pass"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" + fi + continue + fi + fi + ;; + *) ;; + esac + fi + else + # deplib doesn't seem to be a libtool library + if test prog,link = "$linkmode,$pass"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" + fi + continue + fi + ;; # -l + *.ltframework) + if test prog,link = "$linkmode,$pass"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + if test lib = "$linkmode"; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) func_append new_inherited_linker_flags " $deplib" ;; + esac + fi + fi + continue + ;; + -L*) + case $linkmode in + lib) + deplibs="$deplib $deplibs" + test conv = "$pass" && continue + newdependency_libs="$deplib $newdependency_libs" + func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + func_append newlib_search_path " $func_resolve_sysroot_result" + ;; + prog) + if test conv = "$pass"; then + deplibs="$deplib $deplibs" + continue + fi + if test scan = "$pass"; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + func_append newlib_search_path " $func_resolve_sysroot_result" + ;; + *) + func_warning "'-L' is ignored for archives/objects" + ;; + esac # linkmode + continue + ;; # -L + -R*) + if test link = "$pass"; then + func_stripname '-R' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + dir=$func_resolve_sysroot_result + # Make sure the xrpath contains only unique directories. + case "$xrpath " in + *" $dir "*) ;; + *) func_append xrpath " $dir" ;; + esac + fi + deplibs="$deplib $deplibs" + continue + ;; + *.la) + func_resolve_sysroot "$deplib" + lib=$func_resolve_sysroot_result + ;; + *.$libext) + if test conv = "$pass"; then + deplibs="$deplib $deplibs" + continue + fi + case $linkmode in + lib) + # Linking convenience modules into shared libraries is allowed, + # but linking other static libraries is non-portable. + case " $dlpreconveniencelibs " in + *" $deplib "*) ;; + *) + valid_a_lib=false + case $deplibs_check_method in + match_pattern*) + set dummy $deplibs_check_method; shift + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ + | $EGREP "$match_pattern_regex" > /dev/null; then + valid_a_lib=: + fi + ;; + pass_all) + valid_a_lib=: + ;; + esac + if $valid_a_lib; then + echo + $ECHO "*** Warning: Linking the shared library $output against the" + $ECHO "*** static library $deplib is not portable!" + deplibs="$deplib $deplibs" + else + echo + $ECHO "*** Warning: Trying to link with static lib archive $deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because the file extensions .$libext of this argument makes me believe" + echo "*** that it is just a static archive that I should not use here." + fi + ;; + esac + continue + ;; + prog) + if test link != "$pass"; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + continue + ;; + esac # linkmode + ;; # *.$libext + *.lo | *.$objext) + if test conv = "$pass"; then + deplibs="$deplib $deplibs" + elif test prog = "$linkmode"; then + if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then + # If there is no dlopen support or we're linking statically, + # we need to preload. + func_append newdlprefiles " $deplib" + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + func_append newdlfiles " $deplib" + fi + fi + continue + ;; + %DEPLIBS%) + alldeplibs=: + continue + ;; + esac # case $deplib + + $found || test -f "$lib" \ + || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'" + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$lib" \ + || func_fatal_error "'$lib' is not a valid libtool archive" + + func_dirname "$lib" "" "." + ladir=$func_dirname_result + + dlname= + dlopen= + dlpreopen= + libdir= + library_names= + old_library= + inherited_linker_flags= + # If the library was installed with an old release of libtool, + # it will not redefine variables installed, or shouldnotlink + installed=yes + shouldnotlink=no + avoidtemprpath= + + + # Read the .la file + func_source "$lib" + + # Convert "-framework foo" to "foo.ltframework" + if test -n "$inherited_linker_flags"; then + tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` + for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do + case " $new_inherited_linker_flags " in + *" $tmp_inherited_linker_flag "*) ;; + *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; + esac + done + fi + dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + if test lib,link = "$linkmode,$pass" || + test prog,scan = "$linkmode,$pass" || + { test prog != "$linkmode" && test lib != "$linkmode"; }; then + test -n "$dlopen" && func_append dlfiles " $dlopen" + test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" + fi + + if test conv = "$pass"; then + # Only check for convenience libraries + deplibs="$lib $deplibs" + if test -z "$libdir"; then + if test -z "$old_library"; then + func_fatal_error "cannot find name of link library for '$lib'" + fi + # It is a libtool convenience library, so add in its objects. + func_append convenience " $ladir/$objdir/$old_library" + func_append old_convenience " $ladir/$objdir/$old_library" + elif test prog != "$linkmode" && test lib != "$linkmode"; then + func_fatal_error "'$lib' is not a convenience library" + fi + tmp_libs= + for deplib in $dependency_libs; do + deplibs="$deplib $deplibs" + if $opt_preserve_dup_deps; then + case "$tmp_libs " in + *" $deplib "*) func_append specialdeplibs " $deplib" ;; + esac + fi + func_append tmp_libs " $deplib" + done + continue + fi # $pass = conv + + + # Get the name of the library we link against. + linklib= + if test -n "$old_library" && + { test yes = "$prefer_static_libs" || + test built,no = "$prefer_static_libs,$installed"; }; then + linklib=$old_library + else + for l in $old_library $library_names; do + linklib=$l + done + fi + if test -z "$linklib"; then + func_fatal_error "cannot find name of link library for '$lib'" + fi + + # This library was specified with -dlopen. + if test dlopen = "$pass"; then + test -z "$libdir" \ + && func_fatal_error "cannot -dlopen a convenience library: '$lib'" + if test -z "$dlname" || + test yes != "$dlopen_support" || + test no = "$build_libtool_libs" + then + # If there is no dlname, no dlopen support or we're linking + # statically, we need to preload. We also need to preload any + # dependent libraries so libltdl's deplib preloader doesn't + # bomb out in the load deplibs phase. + func_append dlprefiles " $lib $dependency_libs" + else + func_append newdlfiles " $lib" + fi + continue + fi # $pass = dlopen + + # We need an absolute path. + case $ladir in + [\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;; + *) + abs_ladir=`cd "$ladir" && pwd` + if test -z "$abs_ladir"; then + func_warning "cannot determine absolute directory name of '$ladir'" + func_warning "passing it literally to the linker, although it might fail" + abs_ladir=$ladir + fi + ;; + esac + func_basename "$lib" + laname=$func_basename_result + + # Find the relevant object directory and library name. + if test yes = "$installed"; then + if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then + func_warning "library '$lib' was moved." + dir=$ladir + absdir=$abs_ladir + libdir=$abs_ladir + else + dir=$lt_sysroot$libdir + absdir=$lt_sysroot$libdir + fi + test yes = "$hardcode_automatic" && avoidtemprpath=yes + else + if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then + dir=$ladir + absdir=$abs_ladir + # Remove this search path later + func_append notinst_path " $abs_ladir" + else + dir=$ladir/$objdir + absdir=$abs_ladir/$objdir + # Remove this search path later + func_append notinst_path " $abs_ladir" + fi + fi # $installed = yes + func_stripname 'lib' '.la' "$laname" + name=$func_stripname_result + + # This library was specified with -dlpreopen. + if test dlpreopen = "$pass"; then + if test -z "$libdir" && test prog = "$linkmode"; then + func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'" + fi + case $host in + # special handling for platforms with PE-DLLs. + *cygwin* | *mingw* | *cegcc* ) + # Linker will automatically link against shared library if both + # static and shared are present. Therefore, ensure we extract + # symbols from the import library if a shared library is present + # (otherwise, the dlopen module name will be incorrect). We do + # this by putting the import library name into $newdlprefiles. + # We recover the dlopen module name by 'saving' the la file + # name in a special purpose variable, and (later) extracting the + # dlname from the la file. + if test -n "$dlname"; then + func_tr_sh "$dir/$linklib" + eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" + func_append newdlprefiles " $dir/$linklib" + else + func_append newdlprefiles " $dir/$old_library" + # Keep a list of preopened convenience libraries to check + # that they are being used correctly in the link pass. + test -z "$libdir" && \ + func_append dlpreconveniencelibs " $dir/$old_library" + fi + ;; + * ) + # Prefer using a static library (so that no silly _DYNAMIC symbols + # are required to link). + if test -n "$old_library"; then + func_append newdlprefiles " $dir/$old_library" + # Keep a list of preopened convenience libraries to check + # that they are being used correctly in the link pass. + test -z "$libdir" && \ + func_append dlpreconveniencelibs " $dir/$old_library" + # Otherwise, use the dlname, so that lt_dlopen finds it. + elif test -n "$dlname"; then + func_append newdlprefiles " $dir/$dlname" + else + func_append newdlprefiles " $dir/$linklib" + fi + ;; + esac + fi # $pass = dlpreopen + + if test -z "$libdir"; then + # Link the convenience library + if test lib = "$linkmode"; then + deplibs="$dir/$old_library $deplibs" + elif test prog,link = "$linkmode,$pass"; then + compile_deplibs="$dir/$old_library $compile_deplibs" + finalize_deplibs="$dir/$old_library $finalize_deplibs" + else + deplibs="$lib $deplibs" # used for prog,scan pass + fi + continue + fi + + + if test prog = "$linkmode" && test link != "$pass"; then + func_append newlib_search_path " $ladir" + deplibs="$lib $deplibs" + + linkalldeplibs=false + if test no != "$link_all_deplibs" || test -z "$library_names" || + test no = "$build_libtool_libs"; then + linkalldeplibs=: + fi + + tmp_libs= + for deplib in $dependency_libs; do + case $deplib in + -L*) func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + func_append newlib_search_path " $func_resolve_sysroot_result" + ;; + esac + # Need to link against all dependency_libs? + if $linkalldeplibs; then + deplibs="$deplib $deplibs" + else + # Need to hardcode shared library paths + # or/and link against static libraries + newdependency_libs="$deplib $newdependency_libs" + fi + if $opt_preserve_dup_deps; then + case "$tmp_libs " in + *" $deplib "*) func_append specialdeplibs " $deplib" ;; + esac + fi + func_append tmp_libs " $deplib" + done # for deplib + continue + fi # $linkmode = prog... + + if test prog,link = "$linkmode,$pass"; then + if test -n "$library_names" && + { { test no = "$prefer_static_libs" || + test built,yes = "$prefer_static_libs,$installed"; } || + test -z "$old_library"; }; then + # We need to hardcode the library path + if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then + # Make sure the rpath contains only unique directories. + case $temp_rpath: in + *"$absdir:"*) ;; + *) func_append temp_rpath "$absdir:" ;; + esac + fi + + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) func_append compile_rpath " $absdir" ;; + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + ;; + esac + fi # $linkmode,$pass = prog,link... + + if $alldeplibs && + { test pass_all = "$deplibs_check_method" || + { test yes = "$build_libtool_libs" && + test -n "$library_names"; }; }; then + # We only need to search for static libraries + continue + fi + fi + + link_static=no # Whether the deplib will be linked statically + use_static_libs=$prefer_static_libs + if test built = "$use_static_libs" && test yes = "$installed"; then + use_static_libs=no + fi + if test -n "$library_names" && + { test no = "$use_static_libs" || test -z "$old_library"; }; then + case $host in + *cygwin* | *mingw* | *cegcc* | *os2*) + # No point in relinking DLLs because paths are not encoded + func_append notinst_deplibs " $lib" + need_relink=no + ;; + *) + if test no = "$installed"; then + func_append notinst_deplibs " $lib" + need_relink=yes + fi + ;; + esac + # This is a shared library + + # Warn about portability, can't link against -module's on some + # systems (darwin). Don't bleat about dlopened modules though! + dlopenmodule= + for dlpremoduletest in $dlprefiles; do + if test "X$dlpremoduletest" = "X$lib"; then + dlopenmodule=$dlpremoduletest + break + fi + done + if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then + echo + if test prog = "$linkmode"; then + $ECHO "*** Warning: Linking the executable $output against the loadable module" + else + $ECHO "*** Warning: Linking the shared library $output against the loadable module" + fi + $ECHO "*** $linklib is not portable!" + fi + if test lib = "$linkmode" && + test yes = "$hardcode_into_libs"; then + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) func_append compile_rpath " $absdir" ;; + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + ;; + esac + fi + + if test -n "$old_archive_from_expsyms_cmds"; then + # figure out the soname + set dummy $library_names + shift + realname=$1 + shift + libname=`eval "\\$ECHO \"$libname_spec\""` + # use dlname if we got it. it's perfectly good, no? + if test -n "$dlname"; then + soname=$dlname + elif test -n "$soname_spec"; then + # bleh windows + case $host in + *cygwin* | mingw* | *cegcc* | *os2*) + func_arith $current - $age + major=$func_arith_result + versuffix=-$major + ;; + esac + eval soname=\"$soname_spec\" + else + soname=$realname + fi + + # Make a new name for the extract_expsyms_cmds to use + soroot=$soname + func_basename "$soroot" + soname=$func_basename_result + func_stripname 'lib' '.dll' "$soname" + newlib=libimp-$func_stripname_result.a + + # If the library has no export list, then create one now + if test -f "$output_objdir/$soname-def"; then : + else + func_verbose "extracting exported symbol list from '$soname'" + func_execute_cmds "$extract_expsyms_cmds" 'exit $?' + fi + + # Create $newlib + if test -f "$output_objdir/$newlib"; then :; else + func_verbose "generating import library for '$soname'" + func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' + fi + # make sure the library variables are pointing to the new library + dir=$output_objdir + linklib=$newlib + fi # test -n "$old_archive_from_expsyms_cmds" + + if test prog = "$linkmode" || test relink != "$opt_mode"; then + add_shlibpath= + add_dir= + add= + lib_linked=yes + case $hardcode_action in + immediate | unsupported) + if test no = "$hardcode_direct"; then + add=$dir/$linklib + case $host in + *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;; + *-*-sysv4*uw2*) add_dir=-L$dir ;; + *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ + *-*-unixware7*) add_dir=-L$dir ;; + *-*-darwin* ) + # if the lib is a (non-dlopened) module then we cannot + # link against it, someone is ignoring the earlier warnings + if /usr/bin/file -L $add 2> /dev/null | + $GREP ": [^:]* bundle" >/dev/null; then + if test "X$dlopenmodule" != "X$lib"; then + $ECHO "*** Warning: lib $linklib is a module, not a shared library" + if test -z "$old_library"; then + echo + echo "*** And there doesn't seem to be a static archive available" + echo "*** The link will probably fail, sorry" + else + add=$dir/$old_library + fi + elif test -n "$old_library"; then + add=$dir/$old_library + fi + fi + esac + elif test no = "$hardcode_minus_L"; then + case $host in + *-*-sunos*) add_shlibpath=$dir ;; + esac + add_dir=-L$dir + add=-l$name + elif test no = "$hardcode_shlibpath_var"; then + add_shlibpath=$dir + add=-l$name + else + lib_linked=no + fi + ;; + relink) + if test yes = "$hardcode_direct" && + test no = "$hardcode_direct_absolute"; then + add=$dir/$linklib + elif test yes = "$hardcode_minus_L"; then + add_dir=-L$absdir + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + func_append add_dir " -L$inst_prefix_dir$libdir" + ;; + esac + fi + add=-l$name + elif test yes = "$hardcode_shlibpath_var"; then + add_shlibpath=$dir + add=-l$name + else + lib_linked=no + fi + ;; + *) lib_linked=no ;; + esac + + if test yes != "$lib_linked"; then + func_fatal_configuration "unsupported hardcode properties" + fi + + if test -n "$add_shlibpath"; then + case :$compile_shlibpath: in + *":$add_shlibpath:"*) ;; + *) func_append compile_shlibpath "$add_shlibpath:" ;; + esac + fi + if test prog = "$linkmode"; then + test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" + test -n "$add" && compile_deplibs="$add $compile_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + if test yes != "$hardcode_direct" && + test yes != "$hardcode_minus_L" && + test yes = "$hardcode_shlibpath_var"; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) func_append finalize_shlibpath "$libdir:" ;; + esac + fi + fi + fi + + if test prog = "$linkmode" || test relink = "$opt_mode"; then + add_shlibpath= + add_dir= + add= + # Finalize command for both is simple: just hardcode it. + if test yes = "$hardcode_direct" && + test no = "$hardcode_direct_absolute"; then + add=$libdir/$linklib + elif test yes = "$hardcode_minus_L"; then + add_dir=-L$libdir + add=-l$name + elif test yes = "$hardcode_shlibpath_var"; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) func_append finalize_shlibpath "$libdir:" ;; + esac + add=-l$name + elif test yes = "$hardcode_automatic"; then + if test -n "$inst_prefix_dir" && + test -f "$inst_prefix_dir$libdir/$linklib"; then + add=$inst_prefix_dir$libdir/$linklib + else + add=$libdir/$linklib + fi + else + # We cannot seem to hardcode it, guess we'll fake it. + add_dir=-L$libdir + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + func_append add_dir " -L$inst_prefix_dir$libdir" + ;; + esac + fi + add=-l$name + fi + + if test prog = "$linkmode"; then + test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" + test -n "$add" && finalize_deplibs="$add $finalize_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + fi + fi + elif test prog = "$linkmode"; then + # Here we assume that one of hardcode_direct or hardcode_minus_L + # is not unsupported. This is valid on all known static and + # shared platforms. + if test unsupported != "$hardcode_direct"; then + test -n "$old_library" && linklib=$old_library + compile_deplibs="$dir/$linklib $compile_deplibs" + finalize_deplibs="$dir/$linklib $finalize_deplibs" + else + compile_deplibs="-l$name -L$dir $compile_deplibs" + finalize_deplibs="-l$name -L$dir $finalize_deplibs" + fi + elif test yes = "$build_libtool_libs"; then + # Not a shared library + if test pass_all != "$deplibs_check_method"; then + # We're trying link a shared library against a static one + # but the system doesn't support it. + + # Just print a warning and add the library to dependency_libs so + # that the program can be linked against the static library. + echo + $ECHO "*** Warning: This system cannot link to static lib archive $lib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have." + if test yes = "$module"; then + echo "*** But as you try to build a module library, libtool will still create " + echo "*** a static module, that should work as long as the dlopening application" + echo "*** is linked with the -dlopen flag to resolve symbols at runtime." + if test -z "$global_symbol_pipe"; then + echo + echo "*** However, this would only work if libtool was able to extract symbol" + echo "*** lists from a program, using 'nm' or equivalent, but libtool could" + echo "*** not find such a program. So, this module is probably useless." + echo "*** 'nm' from GNU binutils and a full rebuild may help." + fi + if test no = "$build_old_libs"; then + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + else + deplibs="$dir/$old_library $deplibs" + link_static=yes + fi + fi # link shared/static library? + + if test lib = "$linkmode"; then + if test -n "$dependency_libs" && + { test yes != "$hardcode_into_libs" || + test yes = "$build_old_libs" || + test yes = "$link_static"; }; then + # Extract -R from dependency_libs + temp_deplibs= + for libdir in $dependency_libs; do + case $libdir in + -R*) func_stripname '-R' '' "$libdir" + temp_xrpath=$func_stripname_result + case " $xrpath " in + *" $temp_xrpath "*) ;; + *) func_append xrpath " $temp_xrpath";; + esac;; + *) func_append temp_deplibs " $libdir";; + esac + done + dependency_libs=$temp_deplibs + fi + + func_append newlib_search_path " $absdir" + # Link against this library + test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs" + # ... and its dependency_libs + tmp_libs= + for deplib in $dependency_libs; do + newdependency_libs="$deplib $newdependency_libs" + case $deplib in + -L*) func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result";; + *) func_resolve_sysroot "$deplib" ;; + esac + if $opt_preserve_dup_deps; then + case "$tmp_libs " in + *" $func_resolve_sysroot_result "*) + func_append specialdeplibs " $func_resolve_sysroot_result" ;; + esac + fi + func_append tmp_libs " $func_resolve_sysroot_result" + done + + if test no != "$link_all_deplibs"; then + # Add the search paths of all dependency libraries + for deplib in $dependency_libs; do + path= + case $deplib in + -L*) path=$deplib ;; + *.la) + func_resolve_sysroot "$deplib" + deplib=$func_resolve_sysroot_result + func_dirname "$deplib" "" "." + dir=$func_dirname_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + func_warning "cannot determine absolute directory name of '$dir'" + absdir=$dir + fi + ;; + esac + if $GREP "^installed=no" $deplib > /dev/null; then + case $host in + *-*-darwin*) + depdepl= + eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` + if test -n "$deplibrary_names"; then + for tmp in $deplibrary_names; do + depdepl=$tmp + done + if test -f "$absdir/$objdir/$depdepl"; then + depdepl=$absdir/$objdir/$depdepl + darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + if test -z "$darwin_install_name"; then + darwin_install_name=`$OTOOL64 -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + fi + func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl" + func_append linker_flags " -dylib_file $darwin_install_name:$depdepl" + path= + fi + fi + ;; + *) + path=-L$absdir/$objdir + ;; + esac + else + eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + test -z "$libdir" && \ + func_fatal_error "'$deplib' is not a valid libtool archive" + test "$absdir" != "$libdir" && \ + func_warning "'$deplib' seems to be moved" + + path=-L$absdir + fi + ;; + esac + case " $deplibs " in + *" $path "*) ;; + *) deplibs="$path $deplibs" ;; + esac + done + fi # link_all_deplibs != no + fi # linkmode = lib + done # for deplib in $libs + if test link = "$pass"; then + if test prog = "$linkmode"; then + compile_deplibs="$new_inherited_linker_flags $compile_deplibs" + finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" + else + compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + fi + fi + dependency_libs=$newdependency_libs + if test dlpreopen = "$pass"; then + # Link the dlpreopened libraries before other libraries + for deplib in $save_deplibs; do + deplibs="$deplib $deplibs" + done + fi + if test dlopen != "$pass"; then + test conv = "$pass" || { + # Make sure lib_search_path contains only unique directories. + lib_search_path= + for dir in $newlib_search_path; do + case "$lib_search_path " in + *" $dir "*) ;; + *) func_append lib_search_path " $dir" ;; + esac + done + newlib_search_path= + } + + if test prog,link = "$linkmode,$pass"; then + vars="compile_deplibs finalize_deplibs" + else + vars=deplibs + fi + for var in $vars dependency_libs; do + # Add libraries to $var in reverse order + eval tmp_libs=\"\$$var\" + new_libs= + for deplib in $tmp_libs; do + # FIXME: Pedantically, this is the right thing to do, so + # that some nasty dependency loop isn't accidentally + # broken: + #new_libs="$deplib $new_libs" + # Pragmatically, this seems to cause very few problems in + # practice: + case $deplib in + -L*) new_libs="$deplib $new_libs" ;; + -R*) ;; + *) + # And here is the reason: when a library appears more + # than once as an explicit dependence of a library, or + # is implicitly linked in more than once by the + # compiler, it is considered special, and multiple + # occurrences thereof are not removed. Compare this + # with having the same library being listed as a + # dependency of multiple other libraries: in this case, + # we know (pedantically, we assume) the library does not + # need to be listed more than once, so we keep only the + # last copy. This is not always right, but it is rare + # enough that we require users that really mean to play + # such unportable linking tricks to link the library + # using -Wl,-lname, so that libtool does not consider it + # for duplicate removal. + case " $specialdeplibs " in + *" $deplib "*) new_libs="$deplib $new_libs" ;; + *) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$deplib $new_libs" ;; + esac + ;; + esac + ;; + esac + done + tmp_libs= + for deplib in $new_libs; do + case $deplib in + -L*) + case " $tmp_libs " in + *" $deplib "*) ;; + *) func_append tmp_libs " $deplib" ;; + esac + ;; + *) func_append tmp_libs " $deplib" ;; + esac + done + eval $var=\"$tmp_libs\" + done # for var + fi + + # Add Sun CC postdeps if required: + test CXX = "$tagname" && { + case $host_os in + linux*) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C++ 5.9 + func_suncc_cstd_abi + + if test no != "$suncc_use_cstd_abi"; then + func_append postdeps ' -library=Cstd -library=Crun' + fi + ;; + esac + ;; + + solaris*) + func_cc_basename "$CC" + case $func_cc_basename_result in + CC* | sunCC*) + func_suncc_cstd_abi + + if test no != "$suncc_use_cstd_abi"; then + func_append postdeps ' -library=Cstd -library=Crun' + fi + ;; + esac + ;; + esac + } + + # Last step: remove runtime libs from dependency_libs + # (they stay in deplibs) + tmp_libs= + for i in $dependency_libs; do + case " $predeps $postdeps $compiler_lib_search_path " in + *" $i "*) + i= + ;; + esac + if test -n "$i"; then + func_append tmp_libs " $i" + fi + done + dependency_libs=$tmp_libs + done # for pass + if test prog = "$linkmode"; then + dlfiles=$newdlfiles + fi + if test prog = "$linkmode" || test lib = "$linkmode"; then + dlprefiles=$newdlprefiles + fi + + case $linkmode in + oldlib) + if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then + func_warning "'-dlopen' is ignored for archives" + fi + + case " $deplibs" in + *\ -l* | *\ -L*) + func_warning "'-l' and '-L' are ignored for archives" ;; + esac + + test -n "$rpath" && \ + func_warning "'-rpath' is ignored for archives" + + test -n "$xrpath" && \ + func_warning "'-R' is ignored for archives" + + test -n "$vinfo" && \ + func_warning "'-version-info/-version-number' is ignored for archives" + + test -n "$release" && \ + func_warning "'-release' is ignored for archives" + + test -n "$export_symbols$export_symbols_regex" && \ + func_warning "'-export-symbols' is ignored for archives" + + # Now set the variables for building old libraries. + build_libtool_libs=no + oldlibs=$output + func_append objs "$old_deplibs" + ;; + + lib) + # Make sure we only generate libraries of the form 'libNAME.la'. + case $outputname in + lib*) + func_stripname 'lib' '.la' "$outputname" + name=$func_stripname_result + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + ;; + *) + test no = "$module" \ + && func_fatal_help "libtool library '$output' must begin with 'lib'" + + if test no != "$need_lib_prefix"; then + # Add the "lib" prefix for modules if required + func_stripname '' '.la' "$outputname" + name=$func_stripname_result + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + else + func_stripname '' '.la' "$outputname" + libname=$func_stripname_result + fi + ;; + esac + + if test -n "$objs"; then + if test pass_all != "$deplibs_check_method"; then + func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs" + else + echo + $ECHO "*** Warning: Linking the shared library $output against the non-libtool" + $ECHO "*** objects $objs is not portable!" + func_append libobjs " $objs" + fi + fi + + test no = "$dlself" \ + || func_warning "'-dlopen self' is ignored for libtool libraries" + + set dummy $rpath + shift + test 1 -lt "$#" \ + && func_warning "ignoring multiple '-rpath's for a libtool library" + + install_libdir=$1 + + oldlibs= + if test -z "$rpath"; then + if test yes = "$build_libtool_libs"; then + # Building a libtool convenience library. + # Some compilers have problems with a '.al' extension so + # convenience libraries should have the same extension an + # archive normally would. + oldlibs="$output_objdir/$libname.$libext $oldlibs" + build_libtool_libs=convenience + build_old_libs=yes + fi + + test -n "$vinfo" && \ + func_warning "'-version-info/-version-number' is ignored for convenience libraries" + + test -n "$release" && \ + func_warning "'-release' is ignored for convenience libraries" + else + + # Parse the version information argument. + save_ifs=$IFS; IFS=: + set dummy $vinfo 0 0 0 + shift + IFS=$save_ifs + + test -n "$7" && \ + func_fatal_help "too many parameters to '-version-info'" + + # convert absolute version numbers to libtool ages + # this retains compatibility with .la files and attempts + # to make the code below a bit more comprehensible + + case $vinfo_number in + yes) + number_major=$1 + number_minor=$2 + number_revision=$3 + # + # There are really only two kinds -- those that + # use the current revision as the major version + # and those that subtract age and use age as + # a minor version. But, then there is irix + # that has an extra 1 added just for fun + # + case $version_type in + # correct linux to gnu/linux during the next big refactor + darwin|freebsd-elf|linux|osf|windows|none) + func_arith $number_major + $number_minor + current=$func_arith_result + age=$number_minor + revision=$number_revision + ;; + freebsd-aout|qnx|sunos) + current=$number_major + revision=$number_minor + age=0 + ;; + irix|nonstopux) + func_arith $number_major + $number_minor + current=$func_arith_result + age=$number_minor + revision=$number_minor + lt_irix_increment=no + ;; + esac + ;; + no) + current=$1 + revision=$2 + age=$3 + ;; + esac + + # Check that each of the things are valid numbers. + case $current in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "CURRENT '$current' must be a nonnegative integer" + func_fatal_error "'$vinfo' is not valid version information" + ;; + esac + + case $revision in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "REVISION '$revision' must be a nonnegative integer" + func_fatal_error "'$vinfo' is not valid version information" + ;; + esac + + case $age in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "AGE '$age' must be a nonnegative integer" + func_fatal_error "'$vinfo' is not valid version information" + ;; + esac + + if test "$age" -gt "$current"; then + func_error "AGE '$age' is greater than the current interface number '$current'" + func_fatal_error "'$vinfo' is not valid version information" + fi + + # Calculate the version variables. + major= + versuffix= + verstring= + case $version_type in + none) ;; + + darwin) + # Like Linux, but with the current version available in + # verstring for coding it into the library header + func_arith $current - $age + major=.$func_arith_result + versuffix=$major.$age.$revision + # Darwin ld doesn't like 0 for these options... + func_arith $current + 1 + minor_current=$func_arith_result + xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" + verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" + # On Darwin other compilers + case $CC in + nagfor*) + verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" + ;; + *) + verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" + ;; + esac + ;; + + freebsd-aout) + major=.$current + versuffix=.$current.$revision + ;; + + freebsd-elf) + func_arith $current - $age + major=.$func_arith_result + versuffix=$major.$age.$revision + ;; + + irix | nonstopux) + if test no = "$lt_irix_increment"; then + func_arith $current - $age + else + func_arith $current - $age + 1 + fi + major=$func_arith_result + + case $version_type in + nonstopux) verstring_prefix=nonstopux ;; + *) verstring_prefix=sgi ;; + esac + verstring=$verstring_prefix$major.$revision + + # Add in all the interfaces that we are compatible with. + loop=$revision + while test 0 -ne "$loop"; do + func_arith $revision - $loop + iface=$func_arith_result + func_arith $loop - 1 + loop=$func_arith_result + verstring=$verstring_prefix$major.$iface:$verstring + done + + # Before this point, $major must not contain '.'. + major=.$major + versuffix=$major.$revision + ;; + + linux) # correct to gnu/linux during the next big refactor + func_arith $current - $age + major=.$func_arith_result + versuffix=$major.$age.$revision + ;; + + osf) + func_arith $current - $age + major=.$func_arith_result + versuffix=.$current.$age.$revision + verstring=$current.$age.$revision + + # Add in all the interfaces that we are compatible with. + loop=$age + while test 0 -ne "$loop"; do + func_arith $current - $loop + iface=$func_arith_result + func_arith $loop - 1 + loop=$func_arith_result + verstring=$verstring:$iface.0 + done + + # Make executables depend on our current version. + func_append verstring ":$current.0" + ;; + + qnx) + major=.$current + versuffix=.$current + ;; + + sco) + major=.$current + versuffix=.$current + ;; + + sunos) + major=.$current + versuffix=.$current.$revision + ;; + + windows) + # Use '-' rather than '.', since we only want one + # extension on DOS 8.3 file systems. + func_arith $current - $age + major=$func_arith_result + versuffix=-$major + ;; + + *) + func_fatal_configuration "unknown library version type '$version_type'" + ;; + esac + + # Clear the version info if we defaulted, and they specified a release. + if test -z "$vinfo" && test -n "$release"; then + major= + case $version_type in + darwin) + # we can't check for "0.0" in archive_cmds due to quoting + # problems, so we reset it completely + verstring= + ;; + *) + verstring=0.0 + ;; + esac + if test no = "$need_version"; then + versuffix= + else + versuffix=.0.0 + fi + fi + + # Remove version info from name if versioning should be avoided + if test yes,no = "$avoid_version,$need_version"; then + major= + versuffix= + verstring= + fi + + # Check to see if the archive will have undefined symbols. + if test yes = "$allow_undefined"; then + if test unsupported = "$allow_undefined_flag"; then + if test yes = "$build_old_libs"; then + func_warning "undefined symbols not allowed in $host shared libraries; building static only" + build_libtool_libs=no + else + func_fatal_error "can't build $host shared library unless -no-undefined is specified" + fi + fi + else + # Don't allow undefined symbols. + allow_undefined_flag=$no_undefined_flag + fi + + fi + + func_generate_dlsyms "$libname" "$libname" : + func_append libobjs " $symfileobj" + test " " = "$libobjs" && libobjs= + + if test relink != "$opt_mode"; then + # Remove our outputs, but don't remove object files since they + # may have been created when compiling PIC objects. + removelist= + tempremovelist=`$ECHO "$output_objdir/*"` + for p in $tempremovelist; do + case $p in + *.$objext | *.gcno) + ;; + $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*) + if test -n "$precious_files_regex"; then + if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 + then + continue + fi + fi + func_append removelist " $p" + ;; + *) ;; + esac + done + test -n "$removelist" && \ + func_show_eval "${RM}r \$removelist" + fi + + # Now set the variables for building old libraries. + if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then + func_append oldlibs " $output_objdir/$libname.$libext" + + # Transform .lo files to .o files. + oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP` + fi + + # Eliminate all temporary directories. + #for path in $notinst_path; do + # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` + # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` + # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` + #done + + if test -n "$xrpath"; then + # If the user specified any rpath flags, then add them. + temp_xrpath= + for libdir in $xrpath; do + func_replace_sysroot "$libdir" + func_append temp_xrpath " -R$func_replace_sysroot_result" + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + done + if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then + dependency_libs="$temp_xrpath $dependency_libs" + fi + fi + + # Make sure dlfiles contains only unique files that won't be dlpreopened + old_dlfiles=$dlfiles + dlfiles= + for lib in $old_dlfiles; do + case " $dlprefiles $dlfiles " in + *" $lib "*) ;; + *) func_append dlfiles " $lib" ;; + esac + done + + # Make sure dlprefiles contains only unique files + old_dlprefiles=$dlprefiles + dlprefiles= + for lib in $old_dlprefiles; do + case "$dlprefiles " in + *" $lib "*) ;; + *) func_append dlprefiles " $lib" ;; + esac + done + + if test yes = "$build_libtool_libs"; then + if test -n "$rpath"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) + # these systems don't actually have a c library (as such)! + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C library is in the System framework + func_append deplibs " System.ltframework" + ;; + *-*-netbsd*) + # Don't link with libc until the a.out ld.so is fixed. + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc due to us having libc/libc_r. + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + ;; + *) + # Add libc to deplibs on all other systems if necessary. + if test yes = "$build_libtool_need_lc"; then + func_append deplibs " -lc" + fi + ;; + esac + fi + + # Transform deplibs into only deplibs that can be linked in shared. + name_save=$name + libname_save=$libname + release_save=$release + versuffix_save=$versuffix + major_save=$major + # I'm not sure if I'm treating the release correctly. I think + # release should show up in the -l (ie -lgmp5) so we don't want to + # add it in twice. Is that correct? + release= + versuffix= + major= + newdeplibs= + droppeddeps=no + case $deplibs_check_method in + pass_all) + # Don't check for shared/static. Everything works. + # This might be a little naive. We might want to check + # whether the library exists or not. But this is on + # osf3 & osf4 and I'm not really sure... Just + # implementing what was already the behavior. + newdeplibs=$deplibs + ;; + test_compile) + # This code stresses the "libraries are programs" paradigm to its + # limits. Maybe even breaks it. We compile a program, linking it + # against the deplibs as a proxy for the library. Then we can check + # whether they linked in statically or dynamically with ldd. + $opt_dry_run || $RM conftest.c + cat > conftest.c </dev/null` + $nocaseglob + else + potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` + fi + for potent_lib in $potential_libs; do + # Follow soft links. + if ls -lLd "$potent_lib" 2>/dev/null | + $GREP " -> " >/dev/null; then + continue + fi + # The statement above tries to avoid entering an + # endless loop below, in case of cyclic links. + # We might still enter an endless loop, since a link + # loop can be closed while we follow links, + # but so what? + potlib=$potent_lib + while test -h "$potlib" 2>/dev/null; do + potliblink=`ls -ld $potlib | $SED 's/.* -> //'` + case $potliblink in + [\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;; + *) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";; + esac + done + if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | + $SED -e 10q | + $EGREP "$file_magic_regex" > /dev/null; then + func_append newdeplibs " $a_deplib" + a_deplib= + break 2 + fi + done + done + fi + if test -n "$a_deplib"; then + droppeddeps=yes + echo + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib"; then + $ECHO "*** with $libname but no candidates were found. (...for file magic test)" + else + $ECHO "*** with $libname and none of the candidates passed a file format test" + $ECHO "*** using a file magic. Last file checked: $potlib" + fi + fi + ;; + *) + # Add a -L argument. + func_append newdeplibs " $a_deplib" + ;; + esac + done # Gone through all deplibs. + ;; + match_pattern*) + set dummy $deplibs_check_method; shift + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + for a_deplib in $deplibs; do + case $a_deplib in + -l*) + func_stripname -l '' "$a_deplib" + name=$func_stripname_result + if test yes = "$allow_libtool_libs_with_static_runtimes"; then + case " $predeps $postdeps " in + *" $a_deplib "*) + func_append newdeplibs " $a_deplib" + a_deplib= + ;; + esac + fi + if test -n "$a_deplib"; then + libname=`eval "\\$ECHO \"$libname_spec\""` + for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do + potential_libs=`ls $i/$libname[.-]* 2>/dev/null` + for potent_lib in $potential_libs; do + potlib=$potent_lib # see symlink-check above in file_magic test + if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ + $EGREP "$match_pattern_regex" > /dev/null; then + func_append newdeplibs " $a_deplib" + a_deplib= + break 2 + fi + done + done + fi + if test -n "$a_deplib"; then + droppeddeps=yes + echo + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib"; then + $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" + else + $ECHO "*** with $libname and none of the candidates passed a file format test" + $ECHO "*** using a regex pattern. Last file checked: $potlib" + fi + fi + ;; + *) + # Add a -L argument. + func_append newdeplibs " $a_deplib" + ;; + esac + done # Gone through all deplibs. + ;; + none | unknown | *) + newdeplibs= + tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` + if test yes = "$allow_libtool_libs_with_static_runtimes"; then + for i in $predeps $postdeps; do + # can't use Xsed below, because $i might contain '/' + tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"` + done + fi + case $tmp_deplibs in + *[!\ \ ]*) + echo + if test none = "$deplibs_check_method"; then + echo "*** Warning: inter-library dependencies are not supported in this platform." + else + echo "*** Warning: inter-library dependencies are not known to be supported." + fi + echo "*** All declared inter-library dependencies are being dropped." + droppeddeps=yes + ;; + esac + ;; + esac + versuffix=$versuffix_save + major=$major_save + release=$release_save + libname=$libname_save + name=$name_save + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library with the System framework + newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` + ;; + esac + + if test yes = "$droppeddeps"; then + if test yes = "$module"; then + echo + echo "*** Warning: libtool could not satisfy all declared inter-library" + $ECHO "*** dependencies of module $libname. Therefore, libtool will create" + echo "*** a static module, that should work as long as the dlopening" + echo "*** application is linked with the -dlopen flag." + if test -z "$global_symbol_pipe"; then + echo + echo "*** However, this would only work if libtool was able to extract symbol" + echo "*** lists from a program, using 'nm' or equivalent, but libtool could" + echo "*** not find such a program. So, this module is probably useless." + echo "*** 'nm' from GNU binutils and a full rebuild may help." + fi + if test no = "$build_old_libs"; then + oldlibs=$output_objdir/$libname.$libext + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + else + echo "*** The inter-library dependencies that have been dropped here will be" + echo "*** automatically added whenever a program is linked with this library" + echo "*** or is declared to -dlopen it." + + if test no = "$allow_undefined"; then + echo + echo "*** Since this library must not contain undefined symbols," + echo "*** because either the platform does not support them or" + echo "*** it was explicitly requested with -no-undefined," + echo "*** libtool will only create a static version of it." + if test no = "$build_old_libs"; then + oldlibs=$output_objdir/$libname.$libext + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + fi + fi + # Done checking deplibs! + deplibs=$newdeplibs + fi + # Time to change all our "foo.ltframework" stuff back to "-framework foo" + case $host in + *-*-darwin*) + newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + ;; + esac + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $deplibs " in + *" -L$path/$objdir "*) + func_append new_libs " -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) func_append new_libs " $deplib" ;; + esac + ;; + *) func_append new_libs " $deplib" ;; + esac + done + deplibs=$new_libs + + # All the library-specific variables (install_libdir is set above). + library_names= + old_library= + dlname= + + # Test again, we may have decided not to build it any more + if test yes = "$build_libtool_libs"; then + # Remove $wl instances when linking with ld. + # FIXME: should test the right _cmds variable. + case $archive_cmds in + *\$LD\ *) wl= ;; + esac + if test yes = "$hardcode_into_libs"; then + # Hardcode the library paths + hardcode_libdirs= + dep_rpath= + rpath=$finalize_rpath + test relink = "$opt_mode" || rpath=$compile_rpath$rpath + for libdir in $rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + func_replace_sysroot "$libdir" + libdir=$func_replace_sysroot_result + if test -z "$hardcode_libdirs"; then + hardcode_libdirs=$libdir + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + func_append dep_rpath " $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) func_append perm_rpath " $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir=$hardcode_libdirs + eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" + fi + if test -n "$runpath_var" && test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + func_append rpath "$dir:" + done + eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" + fi + test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" + fi + + shlibpath=$finalize_shlibpath + test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath + if test -n "$shlibpath"; then + eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" + fi + + # Get the real and link names of the library. + eval shared_ext=\"$shrext_cmds\" + eval library_names=\"$library_names_spec\" + set dummy $library_names + shift + realname=$1 + shift + + if test -n "$soname_spec"; then + eval soname=\"$soname_spec\" + else + soname=$realname + fi + if test -z "$dlname"; then + dlname=$soname + fi + + lib=$output_objdir/$realname + linknames= + for link + do + func_append linknames " $link" + done + + # Use standard objects if they are pic + test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` + test "X$libobjs" = "X " && libobjs= + + delfiles= + if test -n "$export_symbols" && test -n "$include_expsyms"; then + $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" + export_symbols=$output_objdir/$libname.uexp + func_append delfiles " $export_symbols" + fi + + orig_export_symbols= + case $host_os in + cygwin* | mingw* | cegcc*) + if test -n "$export_symbols" && test -z "$export_symbols_regex"; then + # exporting using user supplied symfile + func_dll_def_p "$export_symbols" || { + # and it's NOT already a .def file. Must figure out + # which of the given symbols are data symbols and tag + # them as such. So, trigger use of export_symbols_cmds. + # export_symbols gets reassigned inside the "prepare + # the list of exported symbols" if statement, so the + # include_expsyms logic still works. + orig_export_symbols=$export_symbols + export_symbols= + always_export_symbols=yes + } + fi + ;; + esac + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then + func_verbose "generating symbol list for '$libname.la'" + export_symbols=$output_objdir/$libname.exp + $opt_dry_run || $RM $export_symbols + cmds=$export_symbols_cmds + save_ifs=$IFS; IFS='~' + for cmd1 in $cmds; do + IFS=$save_ifs + # Take the normal branch if the nm_file_list_spec branch + # doesn't work or if tool conversion is not needed. + case $nm_file_list_spec~$to_tool_file_cmd in + *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) + try_normal_branch=yes + eval cmd=\"$cmd1\" + func_len " $cmd" + len=$func_len_result + ;; + *) + try_normal_branch=no + ;; + esac + if test yes = "$try_normal_branch" \ + && { test "$len" -lt "$max_cmd_len" \ + || test "$max_cmd_len" -le -1; } + then + func_show_eval "$cmd" 'exit $?' + skipped_export=false + elif test -n "$nm_file_list_spec"; then + func_basename "$output" + output_la=$func_basename_result + save_libobjs=$libobjs + save_output=$output + output=$output_objdir/$output_la.nm + func_to_tool_file "$output" + libobjs=$nm_file_list_spec$func_to_tool_file_result + func_append delfiles " $output" + func_verbose "creating $NM input file list: $output" + for obj in $save_libobjs; do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" + done > "$output" + eval cmd=\"$cmd1\" + func_show_eval "$cmd" 'exit $?' + output=$save_output + libobjs=$save_libobjs + skipped_export=false + else + # The command line is too long to execute in one step. + func_verbose "using reloadable object file for export list..." + skipped_export=: + # Break out early, otherwise skipped_export may be + # set to false by a later but shorter cmd. + break + fi + done + IFS=$save_ifs + if test -n "$export_symbols_regex" && test : != "$skipped_export"; then + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' + fi + fi + fi + + if test -n "$export_symbols" && test -n "$include_expsyms"; then + tmp_export_symbols=$export_symbols + test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols + $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' + fi + + if test : != "$skipped_export" && test -n "$orig_export_symbols"; then + # The given exports_symbols file has to be filtered, so filter it. + func_verbose "filter symbol list for '$libname.la' to tag DATA exports" + # FIXME: $output_objdir/$libname.filter potentially contains lots of + # 's' commands, which not all seds can handle. GNU sed should be fine + # though. Also, the filter scales superlinearly with the number of + # global variables. join(1) would be nice here, but unfortunately + # isn't a blessed tool. + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter + func_append delfiles " $export_symbols $output_objdir/$libname.filter" + export_symbols=$output_objdir/$libname.def + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols + fi + + tmp_deplibs= + for test_deplib in $deplibs; do + case " $convenience " in + *" $test_deplib "*) ;; + *) + func_append tmp_deplibs " $test_deplib" + ;; + esac + done + deplibs=$tmp_deplibs + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec" && + test yes = "$compiler_needs_object" && + test -z "$libobjs"; then + # extract the archives, so we have objects to list. + # TODO: could optimize this to just extract one archive. + whole_archive_flag_spec= + fi + if test -n "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + test "X$libobjs" = "X " && libobjs= + else + gentop=$output_objdir/${outputname}x + func_append generated " $gentop" + + func_extract_archives $gentop $convenience + func_append libobjs " $func_extract_archives_result" + test "X$libobjs" = "X " && libobjs= + fi + fi + + if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then + eval flag=\"$thread_safe_flag_spec\" + func_append linker_flags " $flag" + fi + + # Make a backup of the uninstalled library when relinking + if test relink = "$opt_mode"; then + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? + fi + + # Do each of the archive commands. + if test yes = "$module" && test -n "$module_cmds"; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + eval test_cmds=\"$module_expsym_cmds\" + cmds=$module_expsym_cmds + else + eval test_cmds=\"$module_cmds\" + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + eval test_cmds=\"$archive_expsym_cmds\" + cmds=$archive_expsym_cmds + else + eval test_cmds=\"$archive_cmds\" + cmds=$archive_cmds + fi + fi + + if test : != "$skipped_export" && + func_len " $test_cmds" && + len=$func_len_result && + test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + : + else + # The command line is too long to link in one step, link piecewise + # or, if using GNU ld and skipped_export is not :, use a linker + # script. + + # Save the value of $output and $libobjs because we want to + # use them later. If we have whole_archive_flag_spec, we + # want to use save_libobjs as it was before + # whole_archive_flag_spec was expanded, because we can't + # assume the linker understands whole_archive_flag_spec. + # This may have to be revisited, in case too many + # convenience libraries get linked in and end up exceeding + # the spec. + if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + fi + save_output=$output + func_basename "$output" + output_la=$func_basename_result + + # Clear the reloadable object creation command queue and + # initialize k to one. + test_cmds= + concat_cmds= + objlist= + last_robj= + k=1 + + if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then + output=$output_objdir/$output_la.lnkscript + func_verbose "creating GNU ld script: $output" + echo 'INPUT (' > $output + for obj in $save_libobjs + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" >> $output + done + echo ')' >> $output + func_append delfiles " $output" + func_to_tool_file "$output" + output=$func_to_tool_file_result + elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then + output=$output_objdir/$output_la.lnk + func_verbose "creating linker input file list: $output" + : > $output + set x $save_libobjs + shift + firstobj= + if test yes = "$compiler_needs_object"; then + firstobj="$1 " + shift + fi + for obj + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" >> $output + done + func_append delfiles " $output" + func_to_tool_file "$output" + output=$firstobj\"$file_list_spec$func_to_tool_file_result\" + else + if test -n "$save_libobjs"; then + func_verbose "creating reloadable object files..." + output=$output_objdir/$output_la-$k.$objext + eval test_cmds=\"$reload_cmds\" + func_len " $test_cmds" + len0=$func_len_result + len=$len0 + + # Loop over the list of objects to be linked. + for obj in $save_libobjs + do + func_len " $obj" + func_arith $len + $func_len_result + len=$func_arith_result + if test -z "$objlist" || + test "$len" -lt "$max_cmd_len"; then + func_append objlist " $obj" + else + # The command $test_cmds is almost too long, add a + # command to the queue. + if test 1 -eq "$k"; then + # The first file doesn't have a previous command to add. + reload_objs=$objlist + eval concat_cmds=\"$reload_cmds\" + else + # All subsequent reloadable object files will link in + # the last one created. + reload_objs="$objlist $last_robj" + eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" + fi + last_robj=$output_objdir/$output_la-$k.$objext + func_arith $k + 1 + k=$func_arith_result + output=$output_objdir/$output_la-$k.$objext + objlist=" $obj" + func_len " $last_robj" + func_arith $len0 + $func_len_result + len=$func_arith_result + fi + done + # Handle the remaining objects by creating one last + # reloadable object file. All subsequent reloadable object + # files will link in the last one created. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + reload_objs="$objlist $last_robj" + eval concat_cmds=\"\$concat_cmds$reload_cmds\" + if test -n "$last_robj"; then + eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" + fi + func_append delfiles " $output" + + else + output= + fi + + ${skipped_export-false} && { + func_verbose "generating symbol list for '$libname.la'" + export_symbols=$output_objdir/$libname.exp + $opt_dry_run || $RM $export_symbols + libobjs=$output + # Append the command to create the export file. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" + if test -n "$last_robj"; then + eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" + fi + } + + test -n "$save_libobjs" && + func_verbose "creating a temporary reloadable object file: $output" + + # Loop through the commands generated above and execute them. + save_ifs=$IFS; IFS='~' + for cmd in $concat_cmds; do + IFS=$save_ifs + $opt_quiet || { + func_quote_for_expand "$cmd" + eval "func_echo $func_quote_for_expand_result" + } + $opt_dry_run || eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test relink = "$opt_mode"; then + ( cd "$output_objdir" && \ + $RM "${realname}T" && \ + $MV "${realname}U" "$realname" ) + fi + + exit $lt_exit + } + done + IFS=$save_ifs + + if test -n "$export_symbols_regex" && ${skipped_export-false}; then + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' + fi + fi + + ${skipped_export-false} && { + if test -n "$export_symbols" && test -n "$include_expsyms"; then + tmp_export_symbols=$export_symbols + test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols + $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' + fi + + if test -n "$orig_export_symbols"; then + # The given exports_symbols file has to be filtered, so filter it. + func_verbose "filter symbol list for '$libname.la' to tag DATA exports" + # FIXME: $output_objdir/$libname.filter potentially contains lots of + # 's' commands, which not all seds can handle. GNU sed should be fine + # though. Also, the filter scales superlinearly with the number of + # global variables. join(1) would be nice here, but unfortunately + # isn't a blessed tool. + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter + func_append delfiles " $export_symbols $output_objdir/$libname.filter" + export_symbols=$output_objdir/$libname.def + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols + fi + } + + libobjs=$output + # Restore the value of output. + output=$save_output + + if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + test "X$libobjs" = "X " && libobjs= + fi + # Expand the library linking commands again to reset the + # value of $libobjs for piecewise linking. + + # Do each of the archive commands. + if test yes = "$module" && test -n "$module_cmds"; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + cmds=$module_expsym_cmds + else + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + cmds=$archive_expsym_cmds + else + cmds=$archive_cmds + fi + fi + fi + + if test -n "$delfiles"; then + # Append the command to remove temporary files to $cmds. + eval cmds=\"\$cmds~\$RM $delfiles\" + fi + + # Add any objects from preloaded convenience libraries + if test -n "$dlprefiles"; then + gentop=$output_objdir/${outputname}x + func_append generated " $gentop" + + func_extract_archives $gentop $dlprefiles + func_append libobjs " $func_extract_archives_result" + test "X$libobjs" = "X " && libobjs= + fi + + save_ifs=$IFS; IFS='~' + for cmd in $cmds; do + IFS=$sp$nl + eval cmd=\"$cmd\" + IFS=$save_ifs + $opt_quiet || { + func_quote_for_expand "$cmd" + eval "func_echo $func_quote_for_expand_result" + } + $opt_dry_run || eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test relink = "$opt_mode"; then + ( cd "$output_objdir" && \ + $RM "${realname}T" && \ + $MV "${realname}U" "$realname" ) + fi + + exit $lt_exit + } + done + IFS=$save_ifs + + # Restore the uninstalled library and exit + if test relink = "$opt_mode"; then + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? + + if test -n "$convenience"; then + if test -z "$whole_archive_flag_spec"; then + func_show_eval '${RM}r "$gentop"' + fi + fi + + exit $EXIT_SUCCESS + fi + + # Create links to the real library. + for linkname in $linknames; do + if test "$realname" != "$linkname"; then + func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' + fi + done + + # If -module or -export-dynamic was specified, set the dlname. + if test yes = "$module" || test yes = "$export_dynamic"; then + # On all known operating systems, these are identical. + dlname=$soname + fi + fi + ;; + + obj) + if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then + func_warning "'-dlopen' is ignored for objects" + fi + + case " $deplibs" in + *\ -l* | *\ -L*) + func_warning "'-l' and '-L' are ignored for objects" ;; + esac + + test -n "$rpath" && \ + func_warning "'-rpath' is ignored for objects" + + test -n "$xrpath" && \ + func_warning "'-R' is ignored for objects" + + test -n "$vinfo" && \ + func_warning "'-version-info' is ignored for objects" + + test -n "$release" && \ + func_warning "'-release' is ignored for objects" + + case $output in + *.lo) + test -n "$objs$old_deplibs" && \ + func_fatal_error "cannot build library object '$output' from non-libtool objects" + + libobj=$output + func_lo2o "$libobj" + obj=$func_lo2o_result + ;; + *) + libobj= + obj=$output + ;; + esac + + # Delete the old objects. + $opt_dry_run || $RM $obj $libobj + + # Objects from convenience libraries. This assumes + # single-version convenience libraries. Whenever we create + # different ones for PIC/non-PIC, this we'll have to duplicate + # the extraction. + reload_conv_objs= + gentop= + # if reload_cmds runs $LD directly, get rid of -Wl from + # whole_archive_flag_spec and hope we can get by with turning comma + # into space. + case $reload_cmds in + *\$LD[\ \$]*) wl= ;; + esac + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec"; then + eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" + test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` + reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags + else + gentop=$output_objdir/${obj}x + func_append generated " $gentop" + + func_extract_archives $gentop $convenience + reload_conv_objs="$reload_objs $func_extract_archives_result" + fi + fi + + # If we're not building shared, we need to use non_pic_objs + test yes = "$build_libtool_libs" || libobjs=$non_pic_objects + + # Create the old-style object. + reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs + + output=$obj + func_execute_cmds "$reload_cmds" 'exit $?' + + # Exit if we aren't doing a library object file. + if test -z "$libobj"; then + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + exit $EXIT_SUCCESS + fi + + test yes = "$build_libtool_libs" || { + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + # Create an invalid libtool object if no PIC, so that we don't + # accidentally link it into a program. + # $show "echo timestamp > $libobj" + # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? + exit $EXIT_SUCCESS + } + + if test -n "$pic_flag" || test default != "$pic_mode"; then + # Only do commands if we really have different PIC objects. + reload_objs="$libobjs $reload_conv_objs" + output=$libobj + func_execute_cmds "$reload_cmds" 'exit $?' + fi + + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + exit $EXIT_SUCCESS + ;; + + prog) + case $host in + *cygwin*) func_stripname '' '.exe' "$output" + output=$func_stripname_result.exe;; + esac + test -n "$vinfo" && \ + func_warning "'-version-info' is ignored for programs" + + test -n "$release" && \ + func_warning "'-release' is ignored for programs" + + $preload \ + && test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \ + && func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support." + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library is the System framework + compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` + finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` + ;; + esac + + case $host in + *-*-darwin*) + # Don't allow lazy linking, it breaks C++ global constructors + # But is supposedly fixed on 10.4 or later (yay!). + if test CXX = "$tagname"; then + case ${MACOSX_DEPLOYMENT_TARGET-10.0} in + 10.[0123]) + func_append compile_command " $wl-bind_at_load" + func_append finalize_command " $wl-bind_at_load" + ;; + esac + fi + # Time to change all our "foo.ltframework" stuff back to "-framework foo" + compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + ;; + esac + + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $compile_deplibs " in + *" -L$path/$objdir "*) + func_append new_libs " -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $compile_deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) func_append new_libs " $deplib" ;; + esac + ;; + *) func_append new_libs " $deplib" ;; + esac + done + compile_deplibs=$new_libs + + + func_append compile_command " $compile_deplibs" + func_append finalize_command " $finalize_deplibs" + + if test -n "$rpath$xrpath"; then + # If the user specified any rpath flags, then add them. + for libdir in $rpath $xrpath; do + # This is the magic to use -rpath. + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + done + fi + + # Now hardcode the library paths + rpath= + hardcode_libdirs= + for libdir in $compile_rpath $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs=$libdir + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + func_append rpath " $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) func_append perm_rpath " $libdir" ;; + esac + fi + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$libdir:"*) ;; + ::) dllsearchpath=$libdir;; + *) func_append dllsearchpath ":$libdir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + ::) dllsearchpath=$testbindir;; + *) func_append dllsearchpath ":$testbindir";; + esac + ;; + esac + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir=$hardcode_libdirs + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + compile_rpath=$rpath + + rpath= + hardcode_libdirs= + for libdir in $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs=$libdir + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + func_append rpath " $flag" + fi + elif test -n "$runpath_var"; then + case "$finalize_perm_rpath " in + *" $libdir "*) ;; + *) func_append finalize_perm_rpath " $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir=$hardcode_libdirs + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + finalize_rpath=$rpath + + if test -n "$libobjs" && test yes = "$build_old_libs"; then + # Transform all the library objects into standard objects. + compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` + finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` + fi + + func_generate_dlsyms "$outputname" "@PROGRAM@" false + + # template prelinking step + if test -n "$prelink_cmds"; then + func_execute_cmds "$prelink_cmds" 'exit $?' + fi + + wrappers_required=: + case $host in + *cegcc* | *mingw32ce*) + # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. + wrappers_required=false + ;; + *cygwin* | *mingw* ) + test yes = "$build_libtool_libs" || wrappers_required=false + ;; + *) + if test no = "$need_relink" || test yes != "$build_libtool_libs"; then + wrappers_required=false + fi + ;; + esac + $wrappers_required || { + # Replace the output file specification. + compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` + link_command=$compile_command$compile_rpath + + # We have no uninstalled library dependencies, so finalize right now. + exit_status=0 + func_show_eval "$link_command" 'exit_status=$?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + + # Delete the generated files. + if test -f "$output_objdir/${outputname}S.$objext"; then + func_show_eval '$RM "$output_objdir/${outputname}S.$objext"' + fi + + exit $exit_status + } + + if test -n "$compile_shlibpath$finalize_shlibpath"; then + compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" + fi + if test -n "$finalize_shlibpath"; then + finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" + fi + + compile_var= + finalize_var= + if test -n "$runpath_var"; then + if test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + func_append rpath "$dir:" + done + compile_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + if test -n "$finalize_perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $finalize_perm_rpath; do + func_append rpath "$dir:" + done + finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + fi + + if test yes = "$no_install"; then + # We don't need to create a wrapper script. + link_command=$compile_var$compile_command$compile_rpath + # Replace the output file specification. + link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` + # Delete the old output file. + $opt_dry_run || $RM $output + # Link the executable and exit + func_show_eval "$link_command" 'exit $?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + + exit $EXIT_SUCCESS + fi + + case $hardcode_action,$fast_install in + relink,*) + # Fast installation is not supported + link_command=$compile_var$compile_command$compile_rpath + relink_command=$finalize_var$finalize_command$finalize_rpath + + func_warning "this platform does not like uninstalled shared libraries" + func_warning "'$output' will be relinked during installation" + ;; + *,yes) + link_command=$finalize_var$compile_command$finalize_rpath + relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` + ;; + *,no) + link_command=$compile_var$compile_command$compile_rpath + relink_command=$finalize_var$finalize_command$finalize_rpath + ;; + *,needless) + link_command=$finalize_var$compile_command$finalize_rpath + relink_command= + ;; + esac + + # Replace the output file specification. + link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` + + # Delete the old output files. + $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname + + func_show_eval "$link_command" 'exit $?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output_objdir/$outputname" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + + # Now create the wrapper script. + func_verbose "creating $output" + + # Quote the relink command for shipping. + if test -n "$relink_command"; then + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + func_quote_for_eval "$var_value" + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + fi + done + relink_command="(cd `pwd`; $relink_command)" + relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` + fi + + # Only actually do things if not in dry run mode. + $opt_dry_run || { + # win32 will think the script is a binary if it has + # a .exe suffix, so we strip it off here. + case $output in + *.exe) func_stripname '' '.exe' "$output" + output=$func_stripname_result ;; + esac + # test for cygwin because mv fails w/o .exe extensions + case $host in + *cygwin*) + exeext=.exe + func_stripname '' '.exe' "$outputname" + outputname=$func_stripname_result ;; + *) exeext= ;; + esac + case $host in + *cygwin* | *mingw* ) + func_dirname_and_basename "$output" "" "." + output_name=$func_basename_result + output_path=$func_dirname_result + cwrappersource=$output_path/$objdir/lt-$output_name.c + cwrapper=$output_path/$output_name.exe + $RM $cwrappersource $cwrapper + trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 + + func_emit_cwrapperexe_src > $cwrappersource + + # The wrapper executable is built using the $host compiler, + # because it contains $host paths and files. If cross- + # compiling, it, like the target executable, must be + # executed on the $host or under an emulation environment. + $opt_dry_run || { + $LTCC $LTCFLAGS -o $cwrapper $cwrappersource + $STRIP $cwrapper + } + + # Now, create the wrapper script for func_source use: + func_ltwrapper_scriptname $cwrapper + $RM $func_ltwrapper_scriptname_result + trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 + $opt_dry_run || { + # note: this script will not be executed, so do not chmod. + if test "x$build" = "x$host"; then + $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result + else + func_emit_wrapper no > $func_ltwrapper_scriptname_result + fi + } + ;; + * ) + $RM $output + trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 + + func_emit_wrapper no > $output + chmod +x $output + ;; + esac + } + exit $EXIT_SUCCESS + ;; + esac + + # See if we need to build an old-fashioned archive. + for oldlib in $oldlibs; do + + case $build_libtool_libs in + convenience) + oldobjs="$libobjs_save $symfileobj" + addlibs=$convenience + build_libtool_libs=no + ;; + module) + oldobjs=$libobjs_save + addlibs=$old_convenience + build_libtool_libs=no + ;; + *) + oldobjs="$old_deplibs $non_pic_objects" + $preload && test -f "$symfileobj" \ + && func_append oldobjs " $symfileobj" + addlibs=$old_convenience + ;; + esac + + if test -n "$addlibs"; then + gentop=$output_objdir/${outputname}x + func_append generated " $gentop" + + func_extract_archives $gentop $addlibs + func_append oldobjs " $func_extract_archives_result" + fi + + # Do each command in the archive commands. + if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then + cmds=$old_archive_from_new_cmds + else + + # Add any objects from preloaded convenience libraries + if test -n "$dlprefiles"; then + gentop=$output_objdir/${outputname}x + func_append generated " $gentop" + + func_extract_archives $gentop $dlprefiles + func_append oldobjs " $func_extract_archives_result" + fi + + # POSIX demands no paths to be encoded in archives. We have + # to avoid creating archives with duplicate basenames if we + # might have to extract them afterwards, e.g., when creating a + # static archive out of a convenience library, or when linking + # the entirety of a libtool archive into another (currently + # not supported by libtool). + if (for obj in $oldobjs + do + func_basename "$obj" + $ECHO "$func_basename_result" + done | sort | sort -uc >/dev/null 2>&1); then + : + else + echo "copying selected object files to avoid basename conflicts..." + gentop=$output_objdir/${outputname}x + func_append generated " $gentop" + func_mkdir_p "$gentop" + save_oldobjs=$oldobjs + oldobjs= + counter=1 + for obj in $save_oldobjs + do + func_basename "$obj" + objbase=$func_basename_result + case " $oldobjs " in + " ") oldobjs=$obj ;; + *[\ /]"$objbase "*) + while :; do + # Make sure we don't pick an alternate name that also + # overlaps. + newobj=lt$counter-$objbase + func_arith $counter + 1 + counter=$func_arith_result + case " $oldobjs " in + *[\ /]"$newobj "*) ;; + *) if test ! -f "$gentop/$newobj"; then break; fi ;; + esac + done + func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" + func_append oldobjs " $gentop/$newobj" + ;; + *) func_append oldobjs " $obj" ;; + esac + done + fi + func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 + tool_oldlib=$func_to_tool_file_result + eval cmds=\"$old_archive_cmds\" + + func_len " $cmds" + len=$func_len_result + if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + cmds=$old_archive_cmds + elif test -n "$archiver_list_spec"; then + func_verbose "using command file archive linking..." + for obj in $oldobjs + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" + done > $output_objdir/$libname.libcmd + func_to_tool_file "$output_objdir/$libname.libcmd" + oldobjs=" $archiver_list_spec$func_to_tool_file_result" + cmds=$old_archive_cmds + else + # the command line is too long to link in one step, link in parts + func_verbose "using piecewise archive linking..." + save_RANLIB=$RANLIB + RANLIB=: + objlist= + concat_cmds= + save_oldobjs=$oldobjs + oldobjs= + # Is there a better way of finding the last object in the list? + for obj in $save_oldobjs + do + last_oldobj=$obj + done + eval test_cmds=\"$old_archive_cmds\" + func_len " $test_cmds" + len0=$func_len_result + len=$len0 + for obj in $save_oldobjs + do + func_len " $obj" + func_arith $len + $func_len_result + len=$func_arith_result + func_append objlist " $obj" + if test "$len" -lt "$max_cmd_len"; then + : + else + # the above command should be used before it gets too long + oldobjs=$objlist + if test "$obj" = "$last_oldobj"; then + RANLIB=$save_RANLIB + fi + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\$concat_cmds$old_archive_cmds\" + objlist= + len=$len0 + fi + done + RANLIB=$save_RANLIB + oldobjs=$objlist + if test -z "$oldobjs"; then + eval cmds=\"\$concat_cmds\" + else + eval cmds=\"\$concat_cmds~\$old_archive_cmds\" + fi + fi + fi + func_execute_cmds "$cmds" 'exit $?' + done + + test -n "$generated" && \ + func_show_eval "${RM}r$generated" + + # Now create the libtool archive. + case $output in + *.la) + old_library= + test yes = "$build_old_libs" && old_library=$libname.$libext + func_verbose "creating $output" + + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + func_quote_for_eval "$var_value" + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + fi + done + # Quote the link command for shipping. + relink_command="(cd `pwd`; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" + relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` + if test yes = "$hardcode_automatic"; then + relink_command= + fi + + # Only create the output if not a dry run. + $opt_dry_run || { + for installed in no yes; do + if test yes = "$installed"; then + if test -z "$install_libdir"; then + break + fi + output=$output_objdir/${outputname}i + # Replace all uninstalled libtool libraries with the installed ones + newdependency_libs= + for deplib in $dependency_libs; do + case $deplib in + *.la) + func_basename "$deplib" + name=$func_basename_result + func_resolve_sysroot "$deplib" + eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` + test -z "$libdir" && \ + func_fatal_error "'$deplib' is not a valid libtool archive" + func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" + ;; + -L*) + func_stripname -L '' "$deplib" + func_replace_sysroot "$func_stripname_result" + func_append newdependency_libs " -L$func_replace_sysroot_result" + ;; + -R*) + func_stripname -R '' "$deplib" + func_replace_sysroot "$func_stripname_result" + func_append newdependency_libs " -R$func_replace_sysroot_result" + ;; + *) func_append newdependency_libs " $deplib" ;; + esac + done + dependency_libs=$newdependency_libs + newdlfiles= + + for lib in $dlfiles; do + case $lib in + *.la) + func_basename "$lib" + name=$func_basename_result + eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + test -z "$libdir" && \ + func_fatal_error "'$lib' is not a valid libtool archive" + func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" + ;; + *) func_append newdlfiles " $lib" ;; + esac + done + dlfiles=$newdlfiles + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + *.la) + # Only pass preopened files to the pseudo-archive (for + # eventual linking with the app. that links it) if we + # didn't already link the preopened objects directly into + # the library: + func_basename "$lib" + name=$func_basename_result + eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + test -z "$libdir" && \ + func_fatal_error "'$lib' is not a valid libtool archive" + func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" + ;; + esac + done + dlprefiles=$newdlprefiles + else + newdlfiles= + for lib in $dlfiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; + *) abs=`pwd`"/$lib" ;; + esac + func_append newdlfiles " $abs" + done + dlfiles=$newdlfiles + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; + *) abs=`pwd`"/$lib" ;; + esac + func_append newdlprefiles " $abs" + done + dlprefiles=$newdlprefiles + fi + $RM $output + # place dlname in correct position for cygwin + # In fact, it would be nice if we could use this code for all target + # systems that can't hard-code library paths into their executables + # and that have no shared library path variable independent of PATH, + # but it turns out we can't easily determine that from inspecting + # libtool variables, so we have to hard-code the OSs to which it + # applies here; at the moment, that means platforms that use the PE + # object format with DLL files. See the long comment at the top of + # tests/bindir.at for full details. + tdlname=$dlname + case $host,$output,$installed,$module,$dlname in + *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) + # If a -bindir argument was supplied, place the dll there. + if test -n "$bindir"; then + func_relative_path "$install_libdir" "$bindir" + tdlname=$func_relative_path_result/$dlname + else + # Otherwise fall back on heuristic. + tdlname=../bin/$dlname + fi + ;; + esac + $ECHO > $output "\ +# $outputname - a libtool library file +# Generated by $PROGRAM (GNU $PACKAGE) $VERSION +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# The name that we can dlopen(3). +dlname='$tdlname' + +# Names of this library. +library_names='$library_names' + +# The name of the static archive. +old_library='$old_library' + +# Linker flags that cannot go in dependency_libs. +inherited_linker_flags='$new_inherited_linker_flags' + +# Libraries that this one depends upon. +dependency_libs='$dependency_libs' + +# Names of additional weak libraries provided by this library +weak_library_names='$weak_libs' + +# Version information for $libname. +current=$current +age=$age +revision=$revision + +# Is this an already installed library? +installed=$installed + +# Should we warn about portability when linking against -modules? +shouldnotlink=$module + +# Files to dlopen/dlpreopen +dlopen='$dlfiles' +dlpreopen='$dlprefiles' + +# Directory that this library needs to be installed in: +libdir='$install_libdir'" + if test no,yes = "$installed,$need_relink"; then + $ECHO >> $output "\ +relink_command=\"$relink_command\"" + fi + done + } + + # Do a symbolic link so that the libtool archive can be found in + # LD_LIBRARY_PATH before the program is installed. + func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' + ;; + esac + exit $EXIT_SUCCESS +} + +if test link = "$opt_mode" || test relink = "$opt_mode"; then + func_mode_link ${1+"$@"} +fi + + +# func_mode_uninstall arg... +func_mode_uninstall () +{ + $debug_cmd + + RM=$nonopt + files= + rmforce=false + exit_status=0 + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic=$magic + + for arg + do + case $arg in + -f) func_append RM " $arg"; rmforce=: ;; + -*) func_append RM " $arg" ;; + *) func_append files " $arg" ;; + esac + done + + test -z "$RM" && \ + func_fatal_help "you must specify an RM program" + + rmdirs= + + for file in $files; do + func_dirname "$file" "" "." + dir=$func_dirname_result + if test . = "$dir"; then + odir=$objdir + else + odir=$dir/$objdir + fi + func_basename "$file" + name=$func_basename_result + test uninstall = "$opt_mode" && odir=$dir + + # Remember odir for removal later, being careful to avoid duplicates + if test clean = "$opt_mode"; then + case " $rmdirs " in + *" $odir "*) ;; + *) func_append rmdirs " $odir" ;; + esac + fi + + # Don't error if the file doesn't exist and rm -f was used. + if { test -L "$file"; } >/dev/null 2>&1 || + { test -h "$file"; } >/dev/null 2>&1 || + test -f "$file"; then + : + elif test -d "$file"; then + exit_status=1 + continue + elif $rmforce; then + continue + fi + + rmfiles=$file + + case $name in + *.la) + # Possibly a libtool archive, so verify it. + if func_lalib_p "$file"; then + func_source $dir/$name + + # Delete the libtool libraries and symlinks. + for n in $library_names; do + func_append rmfiles " $odir/$n" + done + test -n "$old_library" && func_append rmfiles " $odir/$old_library" + + case $opt_mode in + clean) + case " $library_names " in + *" $dlname "*) ;; + *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; + esac + test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" + ;; + uninstall) + if test -n "$library_names"; then + # Do each command in the postuninstall commands. + func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1' + fi + + if test -n "$old_library"; then + # Do each command in the old_postuninstall commands. + func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1' + fi + # FIXME: should reinstall the best remaining shared library. + ;; + esac + fi + ;; + + *.lo) + # Possibly a libtool object, so verify it. + if func_lalib_p "$file"; then + + # Read the .lo file + func_source $dir/$name + + # Add PIC object to the list of files to remove. + if test -n "$pic_object" && test none != "$pic_object"; then + func_append rmfiles " $dir/$pic_object" + fi + + # Add non-PIC object to the list of files to remove. + if test -n "$non_pic_object" && test none != "$non_pic_object"; then + func_append rmfiles " $dir/$non_pic_object" + fi + fi + ;; + + *) + if test clean = "$opt_mode"; then + noexename=$name + case $file in + *.exe) + func_stripname '' '.exe' "$file" + file=$func_stripname_result + func_stripname '' '.exe' "$name" + noexename=$func_stripname_result + # $file with .exe has already been added to rmfiles, + # add $file without .exe + func_append rmfiles " $file" + ;; + esac + # Do a test to see if this is a libtool program. + if func_ltwrapper_p "$file"; then + if func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + relink_command= + func_source $func_ltwrapper_scriptname_result + func_append rmfiles " $func_ltwrapper_scriptname_result" + else + relink_command= + func_source $dir/$noexename + fi + + # note $name still contains .exe if it was in $file originally + # as does the version of $file that was added into $rmfiles + func_append rmfiles " $odir/$name $odir/${name}S.$objext" + if test yes = "$fast_install" && test -n "$relink_command"; then + func_append rmfiles " $odir/lt-$name" + fi + if test "X$noexename" != "X$name"; then + func_append rmfiles " $odir/lt-$noexename.c" + fi + fi + fi + ;; + esac + func_show_eval "$RM $rmfiles" 'exit_status=1' + done + + # Try to remove the $objdir's in the directories where we deleted files + for dir in $rmdirs; do + if test -d "$dir"; then + func_show_eval "rmdir $dir >/dev/null 2>&1" + fi + done + + exit $exit_status +} + +if test uninstall = "$opt_mode" || test clean = "$opt_mode"; then + func_mode_uninstall ${1+"$@"} +fi + +test -z "$opt_mode" && { + help=$generic_help + func_fatal_help "you must specify a MODE" +} + +test -z "$exec_cmd" && \ + func_fatal_help "invalid operation mode '$opt_mode'" + +if test -n "$exec_cmd"; then + eval exec "$exec_cmd" + exit $EXIT_FAILURE +fi + +exit $exit_status + + +# The TAGs below are defined such that we never get into a situation +# where we disable both kinds of libraries. Given conflicting +# choices, we go for a static library, that is the most portable, +# since we can't tell whether shared libraries were disabled because +# the user asked for that or because the platform doesn't support +# them. This is particularly important on AIX, because we don't +# support having both static and shared libraries enabled at the same +# time on that platform, so we default to a shared-only configuration. +# If a disable-shared tag is given, we'll fallback to a static-only +# configuration. But we'll never go from static-only to shared-only. + +# ### BEGIN LIBTOOL TAG CONFIG: disable-shared +build_libtool_libs=no +build_old_libs=yes +# ### END LIBTOOL TAG CONFIG: disable-shared + +# ### BEGIN LIBTOOL TAG CONFIG: disable-static +build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` +# ### END LIBTOOL TAG CONFIG: disable-static + +# Local Variables: +# mode:shell-script +# sh-indentation:2 +# End: diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/ltmain.sh b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/ltmain.sh new file mode 100644 index 00000000..0f0a2da3 --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/ltmain.sh @@ -0,0 +1,11147 @@ +#! /bin/sh +## DO NOT EDIT - This file generated from ./build-aux/ltmain.in +## by inline-source v2014-01-03.01 + +# libtool (GNU libtool) 2.4.6 +# Provide generalized library-building support services. +# Written by Gordon Matzigkeit , 1996 + +# Copyright (C) 1996-2015 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# GNU Libtool is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + + +PROGRAM=libtool +PACKAGE=libtool +VERSION=2.4.6 +package_revision=2.4.6 + + +## ------ ## +## Usage. ## +## ------ ## + +# Run './libtool --help' for help with using this script from the +# command line. + + +## ------------------------------- ## +## User overridable command paths. ## +## ------------------------------- ## + +# After configure completes, it has a better idea of some of the +# shell tools we need than the defaults used by the functions shared +# with bootstrap, so set those here where they can still be over- +# ridden by the user, but otherwise take precedence. + +: ${AUTOCONF="autoconf"} +: ${AUTOMAKE="automake"} + + +## -------------------------- ## +## Source external libraries. ## +## -------------------------- ## + +# Much of our low-level functionality needs to be sourced from external +# libraries, which are installed to $pkgauxdir. + +# Set a version string for this script. +scriptversion=2015-01-20.17; # UTC + +# General shell script boiler plate, and helper functions. +# Written by Gary V. Vaughan, 2004 + +# Copyright (C) 2004-2015 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. + +# As a special exception to the GNU General Public License, if you distribute +# this file as part of a program or library that is built using GNU Libtool, +# you may include this file under the same distribution terms that you use +# for the rest of that program. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNES FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# Please report bugs or propose patches to gary@gnu.org. + + +## ------ ## +## Usage. ## +## ------ ## + +# Evaluate this file near the top of your script to gain access to +# the functions and variables defined here: +# +# . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh +# +# If you need to override any of the default environment variable +# settings, do that before evaluating this file. + + +## -------------------- ## +## Shell normalisation. ## +## -------------------- ## + +# Some shells need a little help to be as Bourne compatible as possible. +# Before doing anything else, make sure all that help has been provided! + +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac +fi + +# NLS nuisances: We save the old values in case they are required later. +_G_user_locale= +_G_safe_locale= +for _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES +do + eval "if test set = \"\${$_G_var+set}\"; then + save_$_G_var=\$$_G_var + $_G_var=C + export $_G_var + _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\" + _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\" + fi" +done + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +# Make sure IFS has a sensible default +sp=' ' +nl=' +' +IFS="$sp $nl" + +# There are apparently some retarded systems that use ';' as a PATH separator! +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + + +## ------------------------- ## +## Locate command utilities. ## +## ------------------------- ## + + +# func_executable_p FILE +# ---------------------- +# Check that FILE is an executable regular file. +func_executable_p () +{ + test -f "$1" && test -x "$1" +} + + +# func_path_progs PROGS_LIST CHECK_FUNC [PATH] +# -------------------------------------------- +# Search for either a program that responds to --version with output +# containing "GNU", or else returned by CHECK_FUNC otherwise, by +# trying all the directories in PATH with each of the elements of +# PROGS_LIST. +# +# CHECK_FUNC should accept the path to a candidate program, and +# set $func_check_prog_result if it truncates its output less than +# $_G_path_prog_max characters. +func_path_progs () +{ + _G_progs_list=$1 + _G_check_func=$2 + _G_PATH=${3-"$PATH"} + + _G_path_prog_max=0 + _G_path_prog_found=false + _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:} + for _G_dir in $_G_PATH; do + IFS=$_G_save_IFS + test -z "$_G_dir" && _G_dir=. + for _G_prog_name in $_G_progs_list; do + for _exeext in '' .EXE; do + _G_path_prog=$_G_dir/$_G_prog_name$_exeext + func_executable_p "$_G_path_prog" || continue + case `"$_G_path_prog" --version 2>&1` in + *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;; + *) $_G_check_func $_G_path_prog + func_path_progs_result=$func_check_prog_result + ;; + esac + $_G_path_prog_found && break 3 + done + done + done + IFS=$_G_save_IFS + test -z "$func_path_progs_result" && { + echo "no acceptable sed could be found in \$PATH" >&2 + exit 1 + } +} + + +# We want to be able to use the functions in this file before configure +# has figured out where the best binaries are kept, which means we have +# to search for them ourselves - except when the results are already set +# where we skip the searches. + +# Unless the user overrides by setting SED, search the path for either GNU +# sed, or the sed that truncates its output the least. +test -z "$SED" && { + _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for _G_i in 1 2 3 4 5 6 7; do + _G_sed_script=$_G_sed_script$nl$_G_sed_script + done + echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed + _G_sed_script= + + func_check_prog_sed () + { + _G_path_prog=$1 + + _G_count=0 + printf 0123456789 >conftest.in + while : + do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo '' >> conftest.nl + "$_G_path_prog" -f conftest.sed conftest.out 2>/dev/null || break + diff conftest.out conftest.nl >/dev/null 2>&1 || break + _G_count=`expr $_G_count + 1` + if test "$_G_count" -gt "$_G_path_prog_max"; then + # Best one so far, save it but keep looking for a better one + func_check_prog_result=$_G_path_prog + _G_path_prog_max=$_G_count + fi + # 10*(2^10) chars as input seems more than enough + test 10 -lt "$_G_count" && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out + } + + func_path_progs "sed gsed" func_check_prog_sed $PATH:/usr/xpg4/bin + rm -f conftest.sed + SED=$func_path_progs_result +} + + +# Unless the user overrides by setting GREP, search the path for either GNU +# grep, or the grep that truncates its output the least. +test -z "$GREP" && { + func_check_prog_grep () + { + _G_path_prog=$1 + + _G_count=0 + _G_path_prog_max=0 + printf 0123456789 >conftest.in + while : + do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo 'GREP' >> conftest.nl + "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' conftest.out 2>/dev/null || break + diff conftest.out conftest.nl >/dev/null 2>&1 || break + _G_count=`expr $_G_count + 1` + if test "$_G_count" -gt "$_G_path_prog_max"; then + # Best one so far, save it but keep looking for a better one + func_check_prog_result=$_G_path_prog + _G_path_prog_max=$_G_count + fi + # 10*(2^10) chars as input seems more than enough + test 10 -lt "$_G_count" && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out + } + + func_path_progs "grep ggrep" func_check_prog_grep $PATH:/usr/xpg4/bin + GREP=$func_path_progs_result +} + + +## ------------------------------- ## +## User overridable command paths. ## +## ------------------------------- ## + +# All uppercase variable names are used for environment variables. These +# variables can be overridden by the user before calling a script that +# uses them if a suitable command of that name is not already available +# in the command search PATH. + +: ${CP="cp -f"} +: ${ECHO="printf %s\n"} +: ${EGREP="$GREP -E"} +: ${FGREP="$GREP -F"} +: ${LN_S="ln -s"} +: ${MAKE="make"} +: ${MKDIR="mkdir"} +: ${MV="mv -f"} +: ${RM="rm -f"} +: ${SHELL="${CONFIG_SHELL-/bin/sh}"} + + +## -------------------- ## +## Useful sed snippets. ## +## -------------------- ## + +sed_dirname='s|/[^/]*$||' +sed_basename='s|^.*/||' + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='s|\([`"$\\]\)|\\\1|g' + +# Same as above, but do not quote variable references. +sed_double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution that turns a string into a regex matching for the +# string literally. +sed_make_literal_regex='s|[].[^$\\*\/]|\\&|g' + +# Sed substitution that converts a w32 file name or path +# that contains forward slashes, into one that contains +# (escaped) backslashes. A very naive implementation. +sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' + +# Re-'\' parameter expansions in output of sed_double_quote_subst that +# were '\'-ed in input to the same. If an odd number of '\' preceded a +# '$' in input to sed_double_quote_subst, that '$' was protected from +# expansion. Since each input '\' is now two '\'s, look for any number +# of runs of four '\'s followed by two '\'s and then a '$'. '\' that '$'. +_G_bs='\\' +_G_bs2='\\\\' +_G_bs4='\\\\\\\\' +_G_dollar='\$' +sed_double_backslash="\ + s/$_G_bs4/&\\ +/g + s/^$_G_bs2$_G_dollar/$_G_bs&/ + s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g + s/\n//g" + + +## ----------------- ## +## Global variables. ## +## ----------------- ## + +# Except for the global variables explicitly listed below, the following +# functions in the '^func_' namespace, and the '^require_' namespace +# variables initialised in the 'Resource management' section, sourcing +# this file will not pollute your global namespace with anything +# else. There's no portable way to scope variables in Bourne shell +# though, so actually running these functions will sometimes place +# results into a variable named after the function, and often use +# temporary variables in the '^_G_' namespace. If you are careful to +# avoid using those namespaces casually in your sourcing script, things +# should continue to work as you expect. And, of course, you can freely +# overwrite any of the functions or variables defined here before +# calling anything to customize them. + +EXIT_SUCCESS=0 +EXIT_FAILURE=1 +EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. +EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. + +# Allow overriding, eg assuming that you follow the convention of +# putting '$debug_cmd' at the start of all your functions, you can get +# bash to show function call trace with: +# +# debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name +debug_cmd=${debug_cmd-":"} +exit_cmd=: + +# By convention, finish your script with: +# +# exit $exit_status +# +# so that you can set exit_status to non-zero if you want to indicate +# something went wrong during execution without actually bailing out at +# the point of failure. +exit_status=$EXIT_SUCCESS + +# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh +# is ksh but when the shell is invoked as "sh" and the current value of +# the _XPG environment variable is not equal to 1 (one), the special +# positional parameter $0, within a function call, is the name of the +# function. +progpath=$0 + +# The name of this program. +progname=`$ECHO "$progpath" |$SED "$sed_basename"` + +# Make sure we have an absolute progpath for reexecution: +case $progpath in + [\\/]*|[A-Za-z]:\\*) ;; + *[\\/]*) + progdir=`$ECHO "$progpath" |$SED "$sed_dirname"` + progdir=`cd "$progdir" && pwd` + progpath=$progdir/$progname + ;; + *) + _G_IFS=$IFS + IFS=${PATH_SEPARATOR-:} + for progdir in $PATH; do + IFS=$_G_IFS + test -x "$progdir/$progname" && break + done + IFS=$_G_IFS + test -n "$progdir" || progdir=`pwd` + progpath=$progdir/$progname + ;; +esac + + +## ----------------- ## +## Standard options. ## +## ----------------- ## + +# The following options affect the operation of the functions defined +# below, and should be set appropriately depending on run-time para- +# meters passed on the command line. + +opt_dry_run=false +opt_quiet=false +opt_verbose=false + +# Categories 'all' and 'none' are always available. Append any others +# you will pass as the first argument to func_warning from your own +# code. +warning_categories= + +# By default, display warnings according to 'opt_warning_types'. Set +# 'warning_func' to ':' to elide all warnings, or func_fatal_error to +# treat the next displayed warning as a fatal error. +warning_func=func_warn_and_continue + +# Set to 'all' to display all warnings, 'none' to suppress all +# warnings, or a space delimited list of some subset of +# 'warning_categories' to display only the listed warnings. +opt_warning_types=all + + +## -------------------- ## +## Resource management. ## +## -------------------- ## + +# This section contains definitions for functions that each ensure a +# particular resource (a file, or a non-empty configuration variable for +# example) is available, and if appropriate to extract default values +# from pertinent package files. Call them using their associated +# 'require_*' variable to ensure that they are executed, at most, once. +# +# It's entirely deliberate that calling these functions can set +# variables that don't obey the namespace limitations obeyed by the rest +# of this file, in order that that they be as useful as possible to +# callers. + + +# require_term_colors +# ------------------- +# Allow display of bold text on terminals that support it. +require_term_colors=func_require_term_colors +func_require_term_colors () +{ + $debug_cmd + + test -t 1 && { + # COLORTERM and USE_ANSI_COLORS environment variables take + # precedence, because most terminfo databases neglect to describe + # whether color sequences are supported. + test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"} + + if test 1 = "$USE_ANSI_COLORS"; then + # Standard ANSI escape sequences + tc_reset='' + tc_bold=''; tc_standout='' + tc_red=''; tc_green='' + tc_blue=''; tc_cyan='' + else + # Otherwise trust the terminfo database after all. + test -n "`tput sgr0 2>/dev/null`" && { + tc_reset=`tput sgr0` + test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold` + tc_standout=$tc_bold + test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso` + test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1` + test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2` + test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4` + test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5` + } + fi + } + + require_term_colors=: +} + + +## ----------------- ## +## Function library. ## +## ----------------- ## + +# This section contains a variety of useful functions to call in your +# scripts. Take note of the portable wrappers for features provided by +# some modern shells, which will fall back to slower equivalents on +# less featureful shells. + + +# func_append VAR VALUE +# --------------------- +# Append VALUE onto the existing contents of VAR. + + # We should try to minimise forks, especially on Windows where they are + # unreasonably slow, so skip the feature probes when bash or zsh are + # being used: + if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then + : ${_G_HAVE_ARITH_OP="yes"} + : ${_G_HAVE_XSI_OPS="yes"} + # The += operator was introduced in bash 3.1 + case $BASH_VERSION in + [12].* | 3.0 | 3.0*) ;; + *) + : ${_G_HAVE_PLUSEQ_OP="yes"} + ;; + esac + fi + + # _G_HAVE_PLUSEQ_OP + # Can be empty, in which case the shell is probed, "yes" if += is + # useable or anything else if it does not work. + test -z "$_G_HAVE_PLUSEQ_OP" \ + && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \ + && _G_HAVE_PLUSEQ_OP=yes + +if test yes = "$_G_HAVE_PLUSEQ_OP" +then + # This is an XSI compatible shell, allowing a faster implementation... + eval 'func_append () + { + $debug_cmd + + eval "$1+=\$2" + }' +else + # ...otherwise fall back to using expr, which is often a shell builtin. + func_append () + { + $debug_cmd + + eval "$1=\$$1\$2" + } +fi + + +# func_append_quoted VAR VALUE +# ---------------------------- +# Quote VALUE and append to the end of shell variable VAR, separated +# by a space. +if test yes = "$_G_HAVE_PLUSEQ_OP"; then + eval 'func_append_quoted () + { + $debug_cmd + + func_quote_for_eval "$2" + eval "$1+=\\ \$func_quote_for_eval_result" + }' +else + func_append_quoted () + { + $debug_cmd + + func_quote_for_eval "$2" + eval "$1=\$$1\\ \$func_quote_for_eval_result" + } +fi + + +# func_append_uniq VAR VALUE +# -------------------------- +# Append unique VALUE onto the existing contents of VAR, assuming +# entries are delimited by the first character of VALUE. For example: +# +# func_append_uniq options " --another-option option-argument" +# +# will only append to $options if " --another-option option-argument " +# is not already present somewhere in $options already (note spaces at +# each end implied by leading space in second argument). +func_append_uniq () +{ + $debug_cmd + + eval _G_current_value='`$ECHO $'$1'`' + _G_delim=`expr "$2" : '\(.\)'` + + case $_G_delim$_G_current_value$_G_delim in + *"$2$_G_delim"*) ;; + *) func_append "$@" ;; + esac +} + + +# func_arith TERM... +# ------------------ +# Set func_arith_result to the result of evaluating TERMs. + test -z "$_G_HAVE_ARITH_OP" \ + && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \ + && _G_HAVE_ARITH_OP=yes + +if test yes = "$_G_HAVE_ARITH_OP"; then + eval 'func_arith () + { + $debug_cmd + + func_arith_result=$(( $* )) + }' +else + func_arith () + { + $debug_cmd + + func_arith_result=`expr "$@"` + } +fi + + +# func_basename FILE +# ------------------ +# Set func_basename_result to FILE with everything up to and including +# the last / stripped. +if test yes = "$_G_HAVE_XSI_OPS"; then + # If this shell supports suffix pattern removal, then use it to avoid + # forking. Hide the definitions single quotes in case the shell chokes + # on unsupported syntax... + _b='func_basename_result=${1##*/}' + _d='case $1 in + */*) func_dirname_result=${1%/*}$2 ;; + * ) func_dirname_result=$3 ;; + esac' + +else + # ...otherwise fall back to using sed. + _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`' + _d='func_dirname_result=`$ECHO "$1" |$SED "$sed_dirname"` + if test "X$func_dirname_result" = "X$1"; then + func_dirname_result=$3 + else + func_append func_dirname_result "$2" + fi' +fi + +eval 'func_basename () +{ + $debug_cmd + + '"$_b"' +}' + + +# func_dirname FILE APPEND NONDIR_REPLACEMENT +# ------------------------------------------- +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +eval 'func_dirname () +{ + $debug_cmd + + '"$_d"' +}' + + +# func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT +# -------------------------------------------------------- +# Perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# For efficiency, we do not delegate to the functions above but instead +# duplicate the functionality here. +eval 'func_dirname_and_basename () +{ + $debug_cmd + + '"$_b"' + '"$_d"' +}' + + +# func_echo ARG... +# ---------------- +# Echo program name prefixed message. +func_echo () +{ + $debug_cmd + + _G_message=$* + + func_echo_IFS=$IFS + IFS=$nl + for _G_line in $_G_message; do + IFS=$func_echo_IFS + $ECHO "$progname: $_G_line" + done + IFS=$func_echo_IFS +} + + +# func_echo_all ARG... +# -------------------- +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "$*" +} + + +# func_echo_infix_1 INFIX ARG... +# ------------------------------ +# Echo program name, followed by INFIX on the first line, with any +# additional lines not showing INFIX. +func_echo_infix_1 () +{ + $debug_cmd + + $require_term_colors + + _G_infix=$1; shift + _G_indent=$_G_infix + _G_prefix="$progname: $_G_infix: " + _G_message=$* + + # Strip color escape sequences before counting printable length + for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan" + do + test -n "$_G_tc" && { + _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"` + _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"` + } + done + _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`" " ## exclude from sc_prohibit_nested_quotes + + func_echo_infix_1_IFS=$IFS + IFS=$nl + for _G_line in $_G_message; do + IFS=$func_echo_infix_1_IFS + $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2 + _G_prefix=$_G_indent + done + IFS=$func_echo_infix_1_IFS +} + + +# func_error ARG... +# ----------------- +# Echo program name prefixed message to standard error. +func_error () +{ + $debug_cmd + + $require_term_colors + + func_echo_infix_1 " $tc_standout${tc_red}error$tc_reset" "$*" >&2 +} + + +# func_fatal_error ARG... +# ----------------------- +# Echo program name prefixed message to standard error, and exit. +func_fatal_error () +{ + $debug_cmd + + func_error "$*" + exit $EXIT_FAILURE +} + + +# func_grep EXPRESSION FILENAME +# ----------------------------- +# Check whether EXPRESSION matches any line of FILENAME, without output. +func_grep () +{ + $debug_cmd + + $GREP "$1" "$2" >/dev/null 2>&1 +} + + +# func_len STRING +# --------------- +# Set func_len_result to the length of STRING. STRING may not +# start with a hyphen. + test -z "$_G_HAVE_XSI_OPS" \ + && (eval 'x=a/b/c; + test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ + && _G_HAVE_XSI_OPS=yes + +if test yes = "$_G_HAVE_XSI_OPS"; then + eval 'func_len () + { + $debug_cmd + + func_len_result=${#1} + }' +else + func_len () + { + $debug_cmd + + func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` + } +fi + + +# func_mkdir_p DIRECTORY-PATH +# --------------------------- +# Make sure the entire path to DIRECTORY-PATH is available. +func_mkdir_p () +{ + $debug_cmd + + _G_directory_path=$1 + _G_dir_list= + + if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then + + # Protect directory names starting with '-' + case $_G_directory_path in + -*) _G_directory_path=./$_G_directory_path ;; + esac + + # While some portion of DIR does not yet exist... + while test ! -d "$_G_directory_path"; do + # ...make a list in topmost first order. Use a colon delimited + # list incase some portion of path contains whitespace. + _G_dir_list=$_G_directory_path:$_G_dir_list + + # If the last portion added has no slash in it, the list is done + case $_G_directory_path in */*) ;; *) break ;; esac + + # ...otherwise throw away the child directory and loop + _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"` + done + _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'` + + func_mkdir_p_IFS=$IFS; IFS=: + for _G_dir in $_G_dir_list; do + IFS=$func_mkdir_p_IFS + # mkdir can fail with a 'File exist' error if two processes + # try to create one of the directories concurrently. Don't + # stop in that case! + $MKDIR "$_G_dir" 2>/dev/null || : + done + IFS=$func_mkdir_p_IFS + + # Bail out if we (or some other process) failed to create a directory. + test -d "$_G_directory_path" || \ + func_fatal_error "Failed to create '$1'" + fi +} + + +# func_mktempdir [BASENAME] +# ------------------------- +# Make a temporary directory that won't clash with other running +# libtool processes, and avoids race conditions if possible. If +# given, BASENAME is the basename for that directory. +func_mktempdir () +{ + $debug_cmd + + _G_template=${TMPDIR-/tmp}/${1-$progname} + + if test : = "$opt_dry_run"; then + # Return a directory name, but don't create it in dry-run mode + _G_tmpdir=$_G_template-$$ + else + + # If mktemp works, use that first and foremost + _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null` + + if test ! -d "$_G_tmpdir"; then + # Failing that, at least try and use $RANDOM to avoid a race + _G_tmpdir=$_G_template-${RANDOM-0}$$ + + func_mktempdir_umask=`umask` + umask 0077 + $MKDIR "$_G_tmpdir" + umask $func_mktempdir_umask + fi + + # If we're not in dry-run mode, bomb out on failure + test -d "$_G_tmpdir" || \ + func_fatal_error "cannot create temporary directory '$_G_tmpdir'" + fi + + $ECHO "$_G_tmpdir" +} + + +# func_normal_abspath PATH +# ------------------------ +# Remove doubled-up and trailing slashes, "." path components, +# and cancel out any ".." path components in PATH after making +# it an absolute path. +func_normal_abspath () +{ + $debug_cmd + + # These SED scripts presuppose an absolute path with a trailing slash. + _G_pathcar='s|^/\([^/]*\).*$|\1|' + _G_pathcdr='s|^/[^/]*||' + _G_removedotparts=':dotsl + s|/\./|/|g + t dotsl + s|/\.$|/|' + _G_collapseslashes='s|/\{1,\}|/|g' + _G_finalslash='s|/*$|/|' + + # Start from root dir and reassemble the path. + func_normal_abspath_result= + func_normal_abspath_tpath=$1 + func_normal_abspath_altnamespace= + case $func_normal_abspath_tpath in + "") + # Empty path, that just means $cwd. + func_stripname '' '/' "`pwd`" + func_normal_abspath_result=$func_stripname_result + return + ;; + # The next three entries are used to spot a run of precisely + # two leading slashes without using negated character classes; + # we take advantage of case's first-match behaviour. + ///*) + # Unusual form of absolute path, do nothing. + ;; + //*) + # Not necessarily an ordinary path; POSIX reserves leading '//' + # and for example Cygwin uses it to access remote file shares + # over CIFS/SMB, so we conserve a leading double slash if found. + func_normal_abspath_altnamespace=/ + ;; + /*) + # Absolute path, do nothing. + ;; + *) + # Relative path, prepend $cwd. + func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath + ;; + esac + + # Cancel out all the simple stuff to save iterations. We also want + # the path to end with a slash for ease of parsing, so make sure + # there is one (and only one) here. + func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"` + while :; do + # Processed it all yet? + if test / = "$func_normal_abspath_tpath"; then + # If we ascended to the root using ".." the result may be empty now. + if test -z "$func_normal_abspath_result"; then + func_normal_abspath_result=/ + fi + break + fi + func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$_G_pathcar"` + func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$_G_pathcdr"` + # Figure out what to do with it + case $func_normal_abspath_tcomponent in + "") + # Trailing empty path component, ignore it. + ;; + ..) + # Parent dir; strip last assembled component from result. + func_dirname "$func_normal_abspath_result" + func_normal_abspath_result=$func_dirname_result + ;; + *) + # Actual path component, append it. + func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent" + ;; + esac + done + # Restore leading double-slash if one was found on entry. + func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result +} + + +# func_notquiet ARG... +# -------------------- +# Echo program name prefixed message only when not in quiet mode. +func_notquiet () +{ + $debug_cmd + + $opt_quiet || func_echo ${1+"$@"} + + # A bug in bash halts the script if the last line of a function + # fails when set -e is in force, so we need another command to + # work around that: + : +} + + +# func_relative_path SRCDIR DSTDIR +# -------------------------------- +# Set func_relative_path_result to the relative path from SRCDIR to DSTDIR. +func_relative_path () +{ + $debug_cmd + + func_relative_path_result= + func_normal_abspath "$1" + func_relative_path_tlibdir=$func_normal_abspath_result + func_normal_abspath "$2" + func_relative_path_tbindir=$func_normal_abspath_result + + # Ascend the tree starting from libdir + while :; do + # check if we have found a prefix of bindir + case $func_relative_path_tbindir in + $func_relative_path_tlibdir) + # found an exact match + func_relative_path_tcancelled= + break + ;; + $func_relative_path_tlibdir*) + # found a matching prefix + func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" + func_relative_path_tcancelled=$func_stripname_result + if test -z "$func_relative_path_result"; then + func_relative_path_result=. + fi + break + ;; + *) + func_dirname $func_relative_path_tlibdir + func_relative_path_tlibdir=$func_dirname_result + if test -z "$func_relative_path_tlibdir"; then + # Have to descend all the way to the root! + func_relative_path_result=../$func_relative_path_result + func_relative_path_tcancelled=$func_relative_path_tbindir + break + fi + func_relative_path_result=../$func_relative_path_result + ;; + esac + done + + # Now calculate path; take care to avoid doubling-up slashes. + func_stripname '' '/' "$func_relative_path_result" + func_relative_path_result=$func_stripname_result + func_stripname '/' '/' "$func_relative_path_tcancelled" + if test -n "$func_stripname_result"; then + func_append func_relative_path_result "/$func_stripname_result" + fi + + # Normalisation. If bindir is libdir, return '.' else relative path. + if test -n "$func_relative_path_result"; then + func_stripname './' '' "$func_relative_path_result" + func_relative_path_result=$func_stripname_result + fi + + test -n "$func_relative_path_result" || func_relative_path_result=. + + : +} + + +# func_quote_for_eval ARG... +# -------------------------- +# Aesthetically quote ARGs to be evaled later. +# This function returns two values: +# i) func_quote_for_eval_result +# double-quoted, suitable for a subsequent eval +# ii) func_quote_for_eval_unquoted_result +# has all characters that are still active within double +# quotes backslashified. +func_quote_for_eval () +{ + $debug_cmd + + func_quote_for_eval_unquoted_result= + func_quote_for_eval_result= + while test 0 -lt $#; do + case $1 in + *[\\\`\"\$]*) + _G_unquoted_arg=`printf '%s\n' "$1" |$SED "$sed_quote_subst"` ;; + *) + _G_unquoted_arg=$1 ;; + esac + if test -n "$func_quote_for_eval_unquoted_result"; then + func_append func_quote_for_eval_unquoted_result " $_G_unquoted_arg" + else + func_append func_quote_for_eval_unquoted_result "$_G_unquoted_arg" + fi + + case $_G_unquoted_arg in + # Double-quote args containing shell metacharacters to delay + # word splitting, command substitution and variable expansion + # for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + _G_quoted_arg=\"$_G_unquoted_arg\" + ;; + *) + _G_quoted_arg=$_G_unquoted_arg + ;; + esac + + if test -n "$func_quote_for_eval_result"; then + func_append func_quote_for_eval_result " $_G_quoted_arg" + else + func_append func_quote_for_eval_result "$_G_quoted_arg" + fi + shift + done +} + + +# func_quote_for_expand ARG +# ------------------------- +# Aesthetically quote ARG to be evaled later; same as above, +# but do not quote variable references. +func_quote_for_expand () +{ + $debug_cmd + + case $1 in + *[\\\`\"]*) + _G_arg=`$ECHO "$1" | $SED \ + -e "$sed_double_quote_subst" -e "$sed_double_backslash"` ;; + *) + _G_arg=$1 ;; + esac + + case $_G_arg in + # Double-quote args containing shell metacharacters to delay + # word splitting and command substitution for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + _G_arg=\"$_G_arg\" + ;; + esac + + func_quote_for_expand_result=$_G_arg +} + + +# func_stripname PREFIX SUFFIX NAME +# --------------------------------- +# strip PREFIX and SUFFIX from NAME, and store in func_stripname_result. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +if test yes = "$_G_HAVE_XSI_OPS"; then + eval 'func_stripname () + { + $debug_cmd + + # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are + # positional parameters, so assign one to ordinary variable first. + func_stripname_result=$3 + func_stripname_result=${func_stripname_result#"$1"} + func_stripname_result=${func_stripname_result%"$2"} + }' +else + func_stripname () + { + $debug_cmd + + case $2 in + .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;; + *) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;; + esac + } +fi + + +# func_show_eval CMD [FAIL_EXP] +# ----------------------------- +# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. +func_show_eval () +{ + $debug_cmd + + _G_cmd=$1 + _G_fail_exp=${2-':'} + + func_quote_for_expand "$_G_cmd" + eval "func_notquiet $func_quote_for_expand_result" + + $opt_dry_run || { + eval "$_G_cmd" + _G_status=$? + if test 0 -ne "$_G_status"; then + eval "(exit $_G_status); $_G_fail_exp" + fi + } +} + + +# func_show_eval_locale CMD [FAIL_EXP] +# ------------------------------------ +# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. Use the saved locale for evaluation. +func_show_eval_locale () +{ + $debug_cmd + + _G_cmd=$1 + _G_fail_exp=${2-':'} + + $opt_quiet || { + func_quote_for_expand "$_G_cmd" + eval "func_echo $func_quote_for_expand_result" + } + + $opt_dry_run || { + eval "$_G_user_locale + $_G_cmd" + _G_status=$? + eval "$_G_safe_locale" + if test 0 -ne "$_G_status"; then + eval "(exit $_G_status); $_G_fail_exp" + fi + } +} + + +# func_tr_sh +# ---------- +# Turn $1 into a string suitable for a shell variable name. +# Result is stored in $func_tr_sh_result. All characters +# not in the set a-zA-Z0-9_ are replaced with '_'. Further, +# if $1 begins with a digit, a '_' is prepended as well. +func_tr_sh () +{ + $debug_cmd + + case $1 in + [0-9]* | *[!a-zA-Z0-9_]*) + func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'` + ;; + * ) + func_tr_sh_result=$1 + ;; + esac +} + + +# func_verbose ARG... +# ------------------- +# Echo program name prefixed message in verbose mode only. +func_verbose () +{ + $debug_cmd + + $opt_verbose && func_echo "$*" + + : +} + + +# func_warn_and_continue ARG... +# ----------------------------- +# Echo program name prefixed warning message to standard error. +func_warn_and_continue () +{ + $debug_cmd + + $require_term_colors + + func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2 +} + + +# func_warning CATEGORY ARG... +# ---------------------------- +# Echo program name prefixed warning message to standard error. Warning +# messages can be filtered according to CATEGORY, where this function +# elides messages where CATEGORY is not listed in the global variable +# 'opt_warning_types'. +func_warning () +{ + $debug_cmd + + # CATEGORY must be in the warning_categories list! + case " $warning_categories " in + *" $1 "*) ;; + *) func_internal_error "invalid warning category '$1'" ;; + esac + + _G_category=$1 + shift + + case " $opt_warning_types " in + *" $_G_category "*) $warning_func ${1+"$@"} ;; + esac +} + + +# func_sort_ver VER1 VER2 +# ----------------------- +# 'sort -V' is not generally available. +# Note this deviates from the version comparison in automake +# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a +# but this should suffice as we won't be specifying old +# version formats or redundant trailing .0 in bootstrap.conf. +# If we did want full compatibility then we should probably +# use m4_version_compare from autoconf. +func_sort_ver () +{ + $debug_cmd + + printf '%s\n%s\n' "$1" "$2" \ + | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n -k 5,5n -k 6,6n -k 7,7n -k 8,8n -k 9,9n +} + +# func_lt_ver PREV CURR +# --------------------- +# Return true if PREV and CURR are in the correct order according to +# func_sort_ver, otherwise false. Use it like this: +# +# func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..." +func_lt_ver () +{ + $debug_cmd + + test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q` +} + + +# Local variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'before-save-hook 'time-stamp) +# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" +# time-stamp-time-zone: "UTC" +# End: +#! /bin/sh + +# Set a version string for this script. +scriptversion=2014-01-07.03; # UTC + +# A portable, pluggable option parser for Bourne shell. +# Written by Gary V. Vaughan, 2010 + +# Copyright (C) 2010-2015 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# Please report bugs or propose patches to gary@gnu.org. + + +## ------ ## +## Usage. ## +## ------ ## + +# This file is a library for parsing options in your shell scripts along +# with assorted other useful supporting features that you can make use +# of too. +# +# For the simplest scripts you might need only: +# +# #!/bin/sh +# . relative/path/to/funclib.sh +# . relative/path/to/options-parser +# scriptversion=1.0 +# func_options ${1+"$@"} +# eval set dummy "$func_options_result"; shift +# ...rest of your script... +# +# In order for the '--version' option to work, you will need to have a +# suitably formatted comment like the one at the top of this file +# starting with '# Written by ' and ending with '# warranty; '. +# +# For '-h' and '--help' to work, you will also need a one line +# description of your script's purpose in a comment directly above the +# '# Written by ' line, like the one at the top of this file. +# +# The default options also support '--debug', which will turn on shell +# execution tracing (see the comment above debug_cmd below for another +# use), and '--verbose' and the func_verbose function to allow your script +# to display verbose messages only when your user has specified +# '--verbose'. +# +# After sourcing this file, you can plug processing for additional +# options by amending the variables from the 'Configuration' section +# below, and following the instructions in the 'Option parsing' +# section further down. + +## -------------- ## +## Configuration. ## +## -------------- ## + +# You should override these variables in your script after sourcing this +# file so that they reflect the customisations you have added to the +# option parser. + +# The usage line for option parsing errors and the start of '-h' and +# '--help' output messages. You can embed shell variables for delayed +# expansion at the time the message is displayed, but you will need to +# quote other shell meta-characters carefully to prevent them being +# expanded when the contents are evaled. +usage='$progpath [OPTION]...' + +# Short help message in response to '-h' and '--help'. Add to this or +# override it after sourcing this library to reflect the full set of +# options your script accepts. +usage_message="\ + --debug enable verbose shell tracing + -W, --warnings=CATEGORY + report the warnings falling in CATEGORY [all] + -v, --verbose verbosely report processing + --version print version information and exit + -h, --help print short or long help message and exit +" + +# Additional text appended to 'usage_message' in response to '--help'. +long_help_message=" +Warning categories include: + 'all' show all warnings + 'none' turn off all the warnings + 'error' warnings are treated as fatal errors" + +# Help message printed before fatal option parsing errors. +fatal_help="Try '\$progname --help' for more information." + + + +## ------------------------- ## +## Hook function management. ## +## ------------------------- ## + +# This section contains functions for adding, removing, and running hooks +# to the main code. A hook is just a named list of of function, that can +# be run in order later on. + +# func_hookable FUNC_NAME +# ----------------------- +# Declare that FUNC_NAME will run hooks added with +# 'func_add_hook FUNC_NAME ...'. +func_hookable () +{ + $debug_cmd + + func_append hookable_fns " $1" +} + + +# func_add_hook FUNC_NAME HOOK_FUNC +# --------------------------------- +# Request that FUNC_NAME call HOOK_FUNC before it returns. FUNC_NAME must +# first have been declared "hookable" by a call to 'func_hookable'. +func_add_hook () +{ + $debug_cmd + + case " $hookable_fns " in + *" $1 "*) ;; + *) func_fatal_error "'$1' does not accept hook functions." ;; + esac + + eval func_append ${1}_hooks '" $2"' +} + + +# func_remove_hook FUNC_NAME HOOK_FUNC +# ------------------------------------ +# Remove HOOK_FUNC from the list of functions called by FUNC_NAME. +func_remove_hook () +{ + $debug_cmd + + eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`' +} + + +# func_run_hooks FUNC_NAME [ARG]... +# --------------------------------- +# Run all hook functions registered to FUNC_NAME. +# It is assumed that the list of hook functions contains nothing more +# than a whitespace-delimited list of legal shell function names, and +# no effort is wasted trying to catch shell meta-characters or preserve +# whitespace. +func_run_hooks () +{ + $debug_cmd + + case " $hookable_fns " in + *" $1 "*) ;; + *) func_fatal_error "'$1' does not support hook funcions.n" ;; + esac + + eval _G_hook_fns=\$$1_hooks; shift + + for _G_hook in $_G_hook_fns; do + eval $_G_hook '"$@"' + + # store returned options list back into positional + # parameters for next 'cmd' execution. + eval _G_hook_result=\$${_G_hook}_result + eval set dummy "$_G_hook_result"; shift + done + + func_quote_for_eval ${1+"$@"} + func_run_hooks_result=$func_quote_for_eval_result +} + + + +## --------------- ## +## Option parsing. ## +## --------------- ## + +# In order to add your own option parsing hooks, you must accept the +# full positional parameter list in your hook function, remove any +# options that you action, and then pass back the remaining unprocessed +# options in '_result', escaped suitably for +# 'eval'. Like this: +# +# my_options_prep () +# { +# $debug_cmd +# +# # Extend the existing usage message. +# usage_message=$usage_message' +# -s, --silent don'\''t print informational messages +# ' +# +# func_quote_for_eval ${1+"$@"} +# my_options_prep_result=$func_quote_for_eval_result +# } +# func_add_hook func_options_prep my_options_prep +# +# +# my_silent_option () +# { +# $debug_cmd +# +# # Note that for efficiency, we parse as many options as we can +# # recognise in a loop before passing the remainder back to the +# # caller on the first unrecognised argument we encounter. +# while test $# -gt 0; do +# opt=$1; shift +# case $opt in +# --silent|-s) opt_silent=: ;; +# # Separate non-argument short options: +# -s*) func_split_short_opt "$_G_opt" +# set dummy "$func_split_short_opt_name" \ +# "-$func_split_short_opt_arg" ${1+"$@"} +# shift +# ;; +# *) set dummy "$_G_opt" "$*"; shift; break ;; +# esac +# done +# +# func_quote_for_eval ${1+"$@"} +# my_silent_option_result=$func_quote_for_eval_result +# } +# func_add_hook func_parse_options my_silent_option +# +# +# my_option_validation () +# { +# $debug_cmd +# +# $opt_silent && $opt_verbose && func_fatal_help "\ +# '--silent' and '--verbose' options are mutually exclusive." +# +# func_quote_for_eval ${1+"$@"} +# my_option_validation_result=$func_quote_for_eval_result +# } +# func_add_hook func_validate_options my_option_validation +# +# You'll alse need to manually amend $usage_message to reflect the extra +# options you parse. It's preferable to append if you can, so that +# multiple option parsing hooks can be added safely. + + +# func_options [ARG]... +# --------------------- +# All the functions called inside func_options are hookable. See the +# individual implementations for details. +func_hookable func_options +func_options () +{ + $debug_cmd + + func_options_prep ${1+"$@"} + eval func_parse_options \ + ${func_options_prep_result+"$func_options_prep_result"} + eval func_validate_options \ + ${func_parse_options_result+"$func_parse_options_result"} + + eval func_run_hooks func_options \ + ${func_validate_options_result+"$func_validate_options_result"} + + # save modified positional parameters for caller + func_options_result=$func_run_hooks_result +} + + +# func_options_prep [ARG]... +# -------------------------- +# All initialisations required before starting the option parse loop. +# Note that when calling hook functions, we pass through the list of +# positional parameters. If a hook function modifies that list, and +# needs to propogate that back to rest of this script, then the complete +# modified list must be put in 'func_run_hooks_result' before +# returning. +func_hookable func_options_prep +func_options_prep () +{ + $debug_cmd + + # Option defaults: + opt_verbose=false + opt_warning_types= + + func_run_hooks func_options_prep ${1+"$@"} + + # save modified positional parameters for caller + func_options_prep_result=$func_run_hooks_result +} + + +# func_parse_options [ARG]... +# --------------------------- +# The main option parsing loop. +func_hookable func_parse_options +func_parse_options () +{ + $debug_cmd + + func_parse_options_result= + + # this just eases exit handling + while test $# -gt 0; do + # Defer to hook functions for initial option parsing, so they + # get priority in the event of reusing an option name. + func_run_hooks func_parse_options ${1+"$@"} + + # Adjust func_parse_options positional parameters to match + eval set dummy "$func_run_hooks_result"; shift + + # Break out of the loop if we already parsed every option. + test $# -gt 0 || break + + _G_opt=$1 + shift + case $_G_opt in + --debug|-x) debug_cmd='set -x' + func_echo "enabling shell trace mode" + $debug_cmd + ;; + + --no-warnings|--no-warning|--no-warn) + set dummy --warnings none ${1+"$@"} + shift + ;; + + --warnings|--warning|-W) + test $# = 0 && func_missing_arg $_G_opt && break + case " $warning_categories $1" in + *" $1 "*) + # trailing space prevents matching last $1 above + func_append_uniq opt_warning_types " $1" + ;; + *all) + opt_warning_types=$warning_categories + ;; + *none) + opt_warning_types=none + warning_func=: + ;; + *error) + opt_warning_types=$warning_categories + warning_func=func_fatal_error + ;; + *) + func_fatal_error \ + "unsupported warning category: '$1'" + ;; + esac + shift + ;; + + --verbose|-v) opt_verbose=: ;; + --version) func_version ;; + -\?|-h) func_usage ;; + --help) func_help ;; + + # Separate optargs to long options (plugins may need this): + --*=*) func_split_equals "$_G_opt" + set dummy "$func_split_equals_lhs" \ + "$func_split_equals_rhs" ${1+"$@"} + shift + ;; + + # Separate optargs to short options: + -W*) + func_split_short_opt "$_G_opt" + set dummy "$func_split_short_opt_name" \ + "$func_split_short_opt_arg" ${1+"$@"} + shift + ;; + + # Separate non-argument short options: + -\?*|-h*|-v*|-x*) + func_split_short_opt "$_G_opt" + set dummy "$func_split_short_opt_name" \ + "-$func_split_short_opt_arg" ${1+"$@"} + shift + ;; + + --) break ;; + -*) func_fatal_help "unrecognised option: '$_G_opt'" ;; + *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; + esac + done + + # save modified positional parameters for caller + func_quote_for_eval ${1+"$@"} + func_parse_options_result=$func_quote_for_eval_result +} + + +# func_validate_options [ARG]... +# ------------------------------ +# Perform any sanity checks on option settings and/or unconsumed +# arguments. +func_hookable func_validate_options +func_validate_options () +{ + $debug_cmd + + # Display all warnings if -W was not given. + test -n "$opt_warning_types" || opt_warning_types=" $warning_categories" + + func_run_hooks func_validate_options ${1+"$@"} + + # Bail if the options were screwed! + $exit_cmd $EXIT_FAILURE + + # save modified positional parameters for caller + func_validate_options_result=$func_run_hooks_result +} + + + +## ----------------- ## +## Helper functions. ## +## ----------------- ## + +# This section contains the helper functions used by the rest of the +# hookable option parser framework in ascii-betical order. + + +# func_fatal_help ARG... +# ---------------------- +# Echo program name prefixed message to standard error, followed by +# a help hint, and exit. +func_fatal_help () +{ + $debug_cmd + + eval \$ECHO \""Usage: $usage"\" + eval \$ECHO \""$fatal_help"\" + func_error ${1+"$@"} + exit $EXIT_FAILURE +} + + +# func_help +# --------- +# Echo long help message to standard output and exit. +func_help () +{ + $debug_cmd + + func_usage_message + $ECHO "$long_help_message" + exit 0 +} + + +# func_missing_arg ARGNAME +# ------------------------ +# Echo program name prefixed message to standard error and set global +# exit_cmd. +func_missing_arg () +{ + $debug_cmd + + func_error "Missing argument for '$1'." + exit_cmd=exit +} + + +# func_split_equals STRING +# ------------------------ +# Set func_split_equals_lhs and func_split_equals_rhs shell variables after +# splitting STRING at the '=' sign. +test -z "$_G_HAVE_XSI_OPS" \ + && (eval 'x=a/b/c; + test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ + && _G_HAVE_XSI_OPS=yes + +if test yes = "$_G_HAVE_XSI_OPS" +then + # This is an XSI compatible shell, allowing a faster implementation... + eval 'func_split_equals () + { + $debug_cmd + + func_split_equals_lhs=${1%%=*} + func_split_equals_rhs=${1#*=} + test "x$func_split_equals_lhs" = "x$1" \ + && func_split_equals_rhs= + }' +else + # ...otherwise fall back to using expr, which is often a shell builtin. + func_split_equals () + { + $debug_cmd + + func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'` + func_split_equals_rhs= + test "x$func_split_equals_lhs" = "x$1" \ + || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'` + } +fi #func_split_equals + + +# func_split_short_opt SHORTOPT +# ----------------------------- +# Set func_split_short_opt_name and func_split_short_opt_arg shell +# variables after splitting SHORTOPT after the 2nd character. +if test yes = "$_G_HAVE_XSI_OPS" +then + # This is an XSI compatible shell, allowing a faster implementation... + eval 'func_split_short_opt () + { + $debug_cmd + + func_split_short_opt_arg=${1#??} + func_split_short_opt_name=${1%"$func_split_short_opt_arg"} + }' +else + # ...otherwise fall back to using expr, which is often a shell builtin. + func_split_short_opt () + { + $debug_cmd + + func_split_short_opt_name=`expr "x$1" : 'x-\(.\)'` + func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'` + } +fi #func_split_short_opt + + +# func_usage +# ---------- +# Echo short help message to standard output and exit. +func_usage () +{ + $debug_cmd + + func_usage_message + $ECHO "Run '$progname --help |${PAGER-more}' for full usage" + exit 0 +} + + +# func_usage_message +# ------------------ +# Echo short help message to standard output. +func_usage_message () +{ + $debug_cmd + + eval \$ECHO \""Usage: $usage"\" + echo + $SED -n 's|^# || + /^Written by/{ + x;p;x + } + h + /^Written by/q' < "$progpath" + echo + eval \$ECHO \""$usage_message"\" +} + + +# func_version +# ------------ +# Echo version message to standard output and exit. +func_version () +{ + $debug_cmd + + printf '%s\n' "$progname $scriptversion" + $SED -n ' + /(C)/!b go + :more + /\./!{ + N + s|\n# | | + b more + } + :go + /^# Written by /,/# warranty; / { + s|^# || + s|^# *$|| + s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2| + p + } + /^# Written by / { + s|^# || + p + } + /^warranty; /q' < "$progpath" + + exit $? +} + + +# Local variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'before-save-hook 'time-stamp) +# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" +# time-stamp-time-zone: "UTC" +# End: + +# Set a version string. +scriptversion='(GNU libtool) 2.4.6' + + +# func_echo ARG... +# ---------------- +# Libtool also displays the current mode in messages, so override +# funclib.sh func_echo with this custom definition. +func_echo () +{ + $debug_cmd + + _G_message=$* + + func_echo_IFS=$IFS + IFS=$nl + for _G_line in $_G_message; do + IFS=$func_echo_IFS + $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line" + done + IFS=$func_echo_IFS +} + + +# func_warning ARG... +# ------------------- +# Libtool warnings are not categorized, so override funclib.sh +# func_warning with this simpler definition. +func_warning () +{ + $debug_cmd + + $warning_func ${1+"$@"} +} + + +## ---------------- ## +## Options parsing. ## +## ---------------- ## + +# Hook in the functions to make sure our own options are parsed during +# the option parsing loop. + +usage='$progpath [OPTION]... [MODE-ARG]...' + +# Short help message in response to '-h'. +usage_message="Options: + --config show all configuration variables + --debug enable verbose shell tracing + -n, --dry-run display commands without modifying any files + --features display basic configuration information and exit + --mode=MODE use operation mode MODE + --no-warnings equivalent to '-Wnone' + --preserve-dup-deps don't remove duplicate dependency libraries + --quiet, --silent don't print informational messages + --tag=TAG use configuration variables from tag TAG + -v, --verbose print more informational messages than default + --version print version information + -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] + -h, --help, --help-all print short, long, or detailed help message +" + +# Additional text appended to 'usage_message' in response to '--help'. +func_help () +{ + $debug_cmd + + func_usage_message + $ECHO "$long_help_message + +MODE must be one of the following: + + clean remove files from the build directory + compile compile a source file into a libtool object + execute automatically set library path, then run a program + finish complete the installation of libtool libraries + install install libraries or executables + link create a library or an executable + uninstall remove libraries from an installed directory + +MODE-ARGS vary depending on the MODE. When passed as first option, +'--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that. +Try '$progname --help --mode=MODE' for a more detailed description of MODE. + +When reporting a bug, please describe a test case to reproduce it and +include the following information: + + host-triplet: $host + shell: $SHELL + compiler: $LTCC + compiler flags: $LTCFLAGS + linker: $LD (gnu? $with_gnu_ld) + version: $progname (GNU libtool) 2.4.6 + automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` + autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` + +Report bugs to . +GNU libtool home page: . +General help using GNU software: ." + exit 0 +} + + +# func_lo2o OBJECT-NAME +# --------------------- +# Transform OBJECT-NAME from a '.lo' suffix to the platform specific +# object suffix. + +lo2o=s/\\.lo\$/.$objext/ +o2lo=s/\\.$objext\$/.lo/ + +if test yes = "$_G_HAVE_XSI_OPS"; then + eval 'func_lo2o () + { + case $1 in + *.lo) func_lo2o_result=${1%.lo}.$objext ;; + * ) func_lo2o_result=$1 ;; + esac + }' + + # func_xform LIBOBJ-OR-SOURCE + # --------------------------- + # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise) + # suffix to a '.lo' libtool-object suffix. + eval 'func_xform () + { + func_xform_result=${1%.*}.lo + }' +else + # ...otherwise fall back to using sed. + func_lo2o () + { + func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"` + } + + func_xform () + { + func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'` + } +fi + + +# func_fatal_configuration ARG... +# ------------------------------- +# Echo program name prefixed message to standard error, followed by +# a configuration failure hint, and exit. +func_fatal_configuration () +{ + func__fatal_error ${1+"$@"} \ + "See the $PACKAGE documentation for more information." \ + "Fatal configuration error." +} + + +# func_config +# ----------- +# Display the configuration for all the tags in this script. +func_config () +{ + re_begincf='^# ### BEGIN LIBTOOL' + re_endcf='^# ### END LIBTOOL' + + # Default configuration. + $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" + + # Now print the configurations for the tags. + for tagname in $taglist; do + $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" + done + + exit $? +} + + +# func_features +# ------------- +# Display the features supported by this script. +func_features () +{ + echo "host: $host" + if test yes = "$build_libtool_libs"; then + echo "enable shared libraries" + else + echo "disable shared libraries" + fi + if test yes = "$build_old_libs"; then + echo "enable static libraries" + else + echo "disable static libraries" + fi + + exit $? +} + + +# func_enable_tag TAGNAME +# ----------------------- +# Verify that TAGNAME is valid, and either flag an error and exit, or +# enable the TAGNAME tag. We also add TAGNAME to the global $taglist +# variable here. +func_enable_tag () +{ + # Global variable: + tagname=$1 + + re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" + re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" + sed_extractcf=/$re_begincf/,/$re_endcf/p + + # Validate tagname. + case $tagname in + *[!-_A-Za-z0-9,/]*) + func_fatal_error "invalid tag name: $tagname" + ;; + esac + + # Don't test for the "default" C tag, as we know it's + # there but not specially marked. + case $tagname in + CC) ;; + *) + if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then + taglist="$taglist $tagname" + + # Evaluate the configuration. Be careful to quote the path + # and the sed script, to avoid splitting on whitespace, but + # also don't use non-portable quotes within backquotes within + # quotes we have to do it in 2 steps: + extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` + eval "$extractedcf" + else + func_error "ignoring unknown tag $tagname" + fi + ;; + esac +} + + +# func_check_version_match +# ------------------------ +# Ensure that we are using m4 macros, and libtool script from the same +# release of libtool. +func_check_version_match () +{ + if test "$package_revision" != "$macro_revision"; then + if test "$VERSION" != "$macro_version"; then + if test -z "$macro_version"; then + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from an older release. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + fi + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, +$progname: but the definition of this LT_INIT comes from revision $macro_revision. +$progname: You should recreate aclocal.m4 with macros from revision $package_revision +$progname: of $PACKAGE $VERSION and run autoconf again. +_LT_EOF + fi + + exit $EXIT_MISMATCH + fi +} + + +# libtool_options_prep [ARG]... +# ----------------------------- +# Preparation for options parsed by libtool. +libtool_options_prep () +{ + $debug_mode + + # Option defaults: + opt_config=false + opt_dlopen= + opt_dry_run=false + opt_help=false + opt_mode= + opt_preserve_dup_deps=false + opt_quiet=false + + nonopt= + preserve_args= + + # Shorthand for --mode=foo, only valid as the first argument + case $1 in + clean|clea|cle|cl) + shift; set dummy --mode clean ${1+"$@"}; shift + ;; + compile|compil|compi|comp|com|co|c) + shift; set dummy --mode compile ${1+"$@"}; shift + ;; + execute|execut|execu|exec|exe|ex|e) + shift; set dummy --mode execute ${1+"$@"}; shift + ;; + finish|finis|fini|fin|fi|f) + shift; set dummy --mode finish ${1+"$@"}; shift + ;; + install|instal|insta|inst|ins|in|i) + shift; set dummy --mode install ${1+"$@"}; shift + ;; + link|lin|li|l) + shift; set dummy --mode link ${1+"$@"}; shift + ;; + uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) + shift; set dummy --mode uninstall ${1+"$@"}; shift + ;; + esac + + # Pass back the list of options. + func_quote_for_eval ${1+"$@"} + libtool_options_prep_result=$func_quote_for_eval_result +} +func_add_hook func_options_prep libtool_options_prep + + +# libtool_parse_options [ARG]... +# --------------------------------- +# Provide handling for libtool specific options. +libtool_parse_options () +{ + $debug_cmd + + # Perform our own loop to consume as many options as possible in + # each iteration. + while test $# -gt 0; do + _G_opt=$1 + shift + case $_G_opt in + --dry-run|--dryrun|-n) + opt_dry_run=: + ;; + + --config) func_config ;; + + --dlopen|-dlopen) + opt_dlopen="${opt_dlopen+$opt_dlopen +}$1" + shift + ;; + + --preserve-dup-deps) + opt_preserve_dup_deps=: ;; + + --features) func_features ;; + + --finish) set dummy --mode finish ${1+"$@"}; shift ;; + + --help) opt_help=: ;; + + --help-all) opt_help=': help-all' ;; + + --mode) test $# = 0 && func_missing_arg $_G_opt && break + opt_mode=$1 + case $1 in + # Valid mode arguments: + clean|compile|execute|finish|install|link|relink|uninstall) ;; + + # Catch anything else as an error + *) func_error "invalid argument for $_G_opt" + exit_cmd=exit + break + ;; + esac + shift + ;; + + --no-silent|--no-quiet) + opt_quiet=false + func_append preserve_args " $_G_opt" + ;; + + --no-warnings|--no-warning|--no-warn) + opt_warning=false + func_append preserve_args " $_G_opt" + ;; + + --no-verbose) + opt_verbose=false + func_append preserve_args " $_G_opt" + ;; + + --silent|--quiet) + opt_quiet=: + opt_verbose=false + func_append preserve_args " $_G_opt" + ;; + + --tag) test $# = 0 && func_missing_arg $_G_opt && break + opt_tag=$1 + func_append preserve_args " $_G_opt $1" + func_enable_tag "$1" + shift + ;; + + --verbose|-v) opt_quiet=false + opt_verbose=: + func_append preserve_args " $_G_opt" + ;; + + # An option not handled by this hook function: + *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; + esac + done + + + # save modified positional parameters for caller + func_quote_for_eval ${1+"$@"} + libtool_parse_options_result=$func_quote_for_eval_result +} +func_add_hook func_parse_options libtool_parse_options + + + +# libtool_validate_options [ARG]... +# --------------------------------- +# Perform any sanity checks on option settings and/or unconsumed +# arguments. +libtool_validate_options () +{ + # save first non-option argument + if test 0 -lt $#; then + nonopt=$1 + shift + fi + + # preserve --debug + test : = "$debug_cmd" || func_append preserve_args " --debug" + + case $host in + # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452 + # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788 + *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*) + # don't eliminate duplications in $postdeps and $predeps + opt_duplicate_compiler_generated_deps=: + ;; + *) + opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps + ;; + esac + + $opt_help || { + # Sanity checks first: + func_check_version_match + + test yes != "$build_libtool_libs" \ + && test yes != "$build_old_libs" \ + && func_fatal_configuration "not configured to build any kind of library" + + # Darwin sucks + eval std_shrext=\"$shrext_cmds\" + + # Only execute mode is allowed to have -dlopen flags. + if test -n "$opt_dlopen" && test execute != "$opt_mode"; then + func_error "unrecognized option '-dlopen'" + $ECHO "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Change the help message to a mode-specific one. + generic_help=$help + help="Try '$progname --help --mode=$opt_mode' for more information." + } + + # Pass back the unparsed argument list + func_quote_for_eval ${1+"$@"} + libtool_validate_options_result=$func_quote_for_eval_result +} +func_add_hook func_validate_options libtool_validate_options + + +# Process options as early as possible so that --help and --version +# can return quickly. +func_options ${1+"$@"} +eval set dummy "$func_options_result"; shift + + + +## ----------- ## +## Main. ## +## ----------- ## + +magic='%%%MAGIC variable%%%' +magic_exe='%%%MAGIC EXE variable%%%' + +# Global variables. +extracted_archives= +extracted_serial=0 + +# If this variable is set in any of the actions, the command in it +# will be execed at the end. This prevents here-documents from being +# left over by shells. +exec_cmd= + + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' +} + +# func_generated_by_libtool +# True iff stdin has been generated by Libtool. This function is only +# a basic sanity check; it will hardly flush out determined imposters. +func_generated_by_libtool_p () +{ + $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 +} + +# func_lalib_p file +# True iff FILE is a libtool '.la' library or '.lo' object file. +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_lalib_p () +{ + test -f "$1" && + $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p +} + +# func_lalib_unsafe_p file +# True iff FILE is a libtool '.la' library or '.lo' object file. +# This function implements the same check as func_lalib_p without +# resorting to external programs. To this end, it redirects stdin and +# closes it afterwards, without saving the original file descriptor. +# As a safety measure, use it only where a negative result would be +# fatal anyway. Works if 'file' does not exist. +func_lalib_unsafe_p () +{ + lalib_p=no + if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then + for lalib_p_l in 1 2 3 4 + do + read lalib_p_line + case $lalib_p_line in + \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; + esac + done + exec 0<&5 5<&- + fi + test yes = "$lalib_p" +} + +# func_ltwrapper_script_p file +# True iff FILE is a libtool wrapper script +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_script_p () +{ + test -f "$1" && + $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p +} + +# func_ltwrapper_executable_p file +# True iff FILE is a libtool wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_executable_p () +{ + func_ltwrapper_exec_suffix= + case $1 in + *.exe) ;; + *) func_ltwrapper_exec_suffix=.exe ;; + esac + $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 +} + +# func_ltwrapper_scriptname file +# Assumes file is an ltwrapper_executable +# uses $file to determine the appropriate filename for a +# temporary ltwrapper_script. +func_ltwrapper_scriptname () +{ + func_dirname_and_basename "$1" "" "." + func_stripname '' '.exe' "$func_basename_result" + func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper +} + +# func_ltwrapper_p file +# True iff FILE is a libtool wrapper script or wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_p () +{ + func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" +} + + +# func_execute_cmds commands fail_cmd +# Execute tilde-delimited COMMANDS. +# If FAIL_CMD is given, eval that upon failure. +# FAIL_CMD may read-access the current command in variable CMD! +func_execute_cmds () +{ + $debug_cmd + + save_ifs=$IFS; IFS='~' + for cmd in $1; do + IFS=$sp$nl + eval cmd=\"$cmd\" + IFS=$save_ifs + func_show_eval "$cmd" "${2-:}" + done + IFS=$save_ifs +} + + +# func_source file +# Source FILE, adding directory component if necessary. +# Note that it is not necessary on cygwin/mingw to append a dot to +# FILE even if both FILE and FILE.exe exist: automatic-append-.exe +# behavior happens only for exec(3), not for open(2)! Also, sourcing +# 'FILE.' does not work on cygwin managed mounts. +func_source () +{ + $debug_cmd + + case $1 in + */* | *\\*) . "$1" ;; + *) . "./$1" ;; + esac +} + + +# func_resolve_sysroot PATH +# Replace a leading = in PATH with a sysroot. Store the result into +# func_resolve_sysroot_result +func_resolve_sysroot () +{ + func_resolve_sysroot_result=$1 + case $func_resolve_sysroot_result in + =*) + func_stripname '=' '' "$func_resolve_sysroot_result" + func_resolve_sysroot_result=$lt_sysroot$func_stripname_result + ;; + esac +} + +# func_replace_sysroot PATH +# If PATH begins with the sysroot, replace it with = and +# store the result into func_replace_sysroot_result. +func_replace_sysroot () +{ + case $lt_sysroot:$1 in + ?*:"$lt_sysroot"*) + func_stripname "$lt_sysroot" '' "$1" + func_replace_sysroot_result='='$func_stripname_result + ;; + *) + # Including no sysroot. + func_replace_sysroot_result=$1 + ;; + esac +} + +# func_infer_tag arg +# Infer tagged configuration to use if any are available and +# if one wasn't chosen via the "--tag" command line option. +# Only attempt this if the compiler in the base compile +# command doesn't match the default compiler. +# arg is usually of the form 'gcc ...' +func_infer_tag () +{ + $debug_cmd + + if test -n "$available_tags" && test -z "$tagname"; then + CC_quoted= + for arg in $CC; do + func_append_quoted CC_quoted "$arg" + done + CC_expanded=`func_echo_all $CC` + CC_quoted_expanded=`func_echo_all $CC_quoted` + case $@ in + # Blanks in the command may have been stripped by the calling shell, + # but not from the CC environment variable when configure was run. + " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ + " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; + # Blanks at the start of $base_compile will cause this to fail + # if we don't check for them as well. + *) + for z in $available_tags; do + if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then + # Evaluate the configuration. + eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" + CC_quoted= + for arg in $CC; do + # Double-quote args containing other shell metacharacters. + func_append_quoted CC_quoted "$arg" + done + CC_expanded=`func_echo_all $CC` + CC_quoted_expanded=`func_echo_all $CC_quoted` + case "$@ " in + " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ + " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) + # The compiler in the base compile command matches + # the one in the tagged configuration. + # Assume this is the tagged configuration we want. + tagname=$z + break + ;; + esac + fi + done + # If $tagname still isn't set, then no tagged configuration + # was found and let the user know that the "--tag" command + # line option must be used. + if test -z "$tagname"; then + func_echo "unable to infer tagged configuration" + func_fatal_error "specify a tag with '--tag'" +# else +# func_verbose "using $tagname tagged configuration" + fi + ;; + esac + fi +} + + + +# func_write_libtool_object output_name pic_name nonpic_name +# Create a libtool object file (analogous to a ".la" file), +# but don't create it if we're doing a dry run. +func_write_libtool_object () +{ + write_libobj=$1 + if test yes = "$build_libtool_libs"; then + write_lobj=\'$2\' + else + write_lobj=none + fi + + if test yes = "$build_old_libs"; then + write_oldobj=\'$3\' + else + write_oldobj=none + fi + + $opt_dry_run || { + cat >${write_libobj}T </dev/null` + if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then + func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | + $SED -e "$sed_naive_backslashify"` + else + func_convert_core_file_wine_to_w32_result= + fi + fi +} +# end: func_convert_core_file_wine_to_w32 + + +# func_convert_core_path_wine_to_w32 ARG +# Helper function used by path conversion functions when $build is *nix, and +# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly +# configured wine environment available, with the winepath program in $build's +# $PATH. Assumes ARG has no leading or trailing path separator characters. +# +# ARG is path to be converted from $build format to win32. +# Result is available in $func_convert_core_path_wine_to_w32_result. +# Unconvertible file (directory) names in ARG are skipped; if no directory names +# are convertible, then the result may be empty. +func_convert_core_path_wine_to_w32 () +{ + $debug_cmd + + # unfortunately, winepath doesn't convert paths, only file names + func_convert_core_path_wine_to_w32_result= + if test -n "$1"; then + oldIFS=$IFS + IFS=: + for func_convert_core_path_wine_to_w32_f in $1; do + IFS=$oldIFS + func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" + if test -n "$func_convert_core_file_wine_to_w32_result"; then + if test -z "$func_convert_core_path_wine_to_w32_result"; then + func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result + else + func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" + fi + fi + done + IFS=$oldIFS + fi +} +# end: func_convert_core_path_wine_to_w32 + + +# func_cygpath ARGS... +# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when +# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) +# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or +# (2), returns the Cygwin file name or path in func_cygpath_result (input +# file name or path is assumed to be in w32 format, as previously converted +# from $build's *nix or MSYS format). In case (3), returns the w32 file name +# or path in func_cygpath_result (input file name or path is assumed to be in +# Cygwin format). Returns an empty string on error. +# +# ARGS are passed to cygpath, with the last one being the file name or path to +# be converted. +# +# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH +# environment variable; do not put it in $PATH. +func_cygpath () +{ + $debug_cmd + + if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then + func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` + if test "$?" -ne 0; then + # on failure, ensure result is empty + func_cygpath_result= + fi + else + func_cygpath_result= + func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'" + fi +} +#end: func_cygpath + + +# func_convert_core_msys_to_w32 ARG +# Convert file name or path ARG from MSYS format to w32 format. Return +# result in func_convert_core_msys_to_w32_result. +func_convert_core_msys_to_w32 () +{ + $debug_cmd + + # awkward: cmd appends spaces to result + func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | + $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"` +} +#end: func_convert_core_msys_to_w32 + + +# func_convert_file_check ARG1 ARG2 +# Verify that ARG1 (a file name in $build format) was converted to $host +# format in ARG2. Otherwise, emit an error message, but continue (resetting +# func_to_host_file_result to ARG1). +func_convert_file_check () +{ + $debug_cmd + + if test -z "$2" && test -n "$1"; then + func_error "Could not determine host file name corresponding to" + func_error " '$1'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback: + func_to_host_file_result=$1 + fi +} +# end func_convert_file_check + + +# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH +# Verify that FROM_PATH (a path in $build format) was converted to $host +# format in TO_PATH. Otherwise, emit an error message, but continue, resetting +# func_to_host_file_result to a simplistic fallback value (see below). +func_convert_path_check () +{ + $debug_cmd + + if test -z "$4" && test -n "$3"; then + func_error "Could not determine the host path corresponding to" + func_error " '$3'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback. This is a deliberately simplistic "conversion" and + # should not be "improved". See libtool.info. + if test "x$1" != "x$2"; then + lt_replace_pathsep_chars="s|$1|$2|g" + func_to_host_path_result=`echo "$3" | + $SED -e "$lt_replace_pathsep_chars"` + else + func_to_host_path_result=$3 + fi + fi +} +# end func_convert_path_check + + +# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG +# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT +# and appending REPL if ORIG matches BACKPAT. +func_convert_path_front_back_pathsep () +{ + $debug_cmd + + case $4 in + $1 ) func_to_host_path_result=$3$func_to_host_path_result + ;; + esac + case $4 in + $2 ) func_append func_to_host_path_result "$3" + ;; + esac +} +# end func_convert_path_front_back_pathsep + + +################################################## +# $build to $host FILE NAME CONVERSION FUNCTIONS # +################################################## +# invoked via '$to_host_file_cmd ARG' +# +# In each case, ARG is the path to be converted from $build to $host format. +# Result will be available in $func_to_host_file_result. + + +# func_to_host_file ARG +# Converts the file name ARG from $build format to $host format. Return result +# in func_to_host_file_result. +func_to_host_file () +{ + $debug_cmd + + $to_host_file_cmd "$1" +} +# end func_to_host_file + + +# func_to_tool_file ARG LAZY +# converts the file name ARG from $build format to toolchain format. Return +# result in func_to_tool_file_result. If the conversion in use is listed +# in (the comma separated) LAZY, no conversion takes place. +func_to_tool_file () +{ + $debug_cmd + + case ,$2, in + *,"$to_tool_file_cmd",*) + func_to_tool_file_result=$1 + ;; + *) + $to_tool_file_cmd "$1" + func_to_tool_file_result=$func_to_host_file_result + ;; + esac +} +# end func_to_tool_file + + +# func_convert_file_noop ARG +# Copy ARG to func_to_host_file_result. +func_convert_file_noop () +{ + func_to_host_file_result=$1 +} +# end func_convert_file_noop + + +# func_convert_file_msys_to_w32 ARG +# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic +# conversion to w32 is not available inside the cwrapper. Returns result in +# func_to_host_file_result. +func_convert_file_msys_to_w32 () +{ + $debug_cmd + + func_to_host_file_result=$1 + if test -n "$1"; then + func_convert_core_msys_to_w32 "$1" + func_to_host_file_result=$func_convert_core_msys_to_w32_result + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_msys_to_w32 + + +# func_convert_file_cygwin_to_w32 ARG +# Convert file name ARG from Cygwin to w32 format. Returns result in +# func_to_host_file_result. +func_convert_file_cygwin_to_w32 () +{ + $debug_cmd + + func_to_host_file_result=$1 + if test -n "$1"; then + # because $build is cygwin, we call "the" cygpath in $PATH; no need to use + # LT_CYGPATH in this case. + func_to_host_file_result=`cygpath -m "$1"` + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_cygwin_to_w32 + + +# func_convert_file_nix_to_w32 ARG +# Convert file name ARG from *nix to w32 format. Requires a wine environment +# and a working winepath. Returns result in func_to_host_file_result. +func_convert_file_nix_to_w32 () +{ + $debug_cmd + + func_to_host_file_result=$1 + if test -n "$1"; then + func_convert_core_file_wine_to_w32 "$1" + func_to_host_file_result=$func_convert_core_file_wine_to_w32_result + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_nix_to_w32 + + +# func_convert_file_msys_to_cygwin ARG +# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. +# Returns result in func_to_host_file_result. +func_convert_file_msys_to_cygwin () +{ + $debug_cmd + + func_to_host_file_result=$1 + if test -n "$1"; then + func_convert_core_msys_to_w32 "$1" + func_cygpath -u "$func_convert_core_msys_to_w32_result" + func_to_host_file_result=$func_cygpath_result + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_msys_to_cygwin + + +# func_convert_file_nix_to_cygwin ARG +# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed +# in a wine environment, working winepath, and LT_CYGPATH set. Returns result +# in func_to_host_file_result. +func_convert_file_nix_to_cygwin () +{ + $debug_cmd + + func_to_host_file_result=$1 + if test -n "$1"; then + # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. + func_convert_core_file_wine_to_w32 "$1" + func_cygpath -u "$func_convert_core_file_wine_to_w32_result" + func_to_host_file_result=$func_cygpath_result + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_nix_to_cygwin + + +############################################# +# $build to $host PATH CONVERSION FUNCTIONS # +############################################# +# invoked via '$to_host_path_cmd ARG' +# +# In each case, ARG is the path to be converted from $build to $host format. +# The result will be available in $func_to_host_path_result. +# +# Path separators are also converted from $build format to $host format. If +# ARG begins or ends with a path separator character, it is preserved (but +# converted to $host format) on output. +# +# All path conversion functions are named using the following convention: +# file name conversion function : func_convert_file_X_to_Y () +# path conversion function : func_convert_path_X_to_Y () +# where, for any given $build/$host combination the 'X_to_Y' value is the +# same. If conversion functions are added for new $build/$host combinations, +# the two new functions must follow this pattern, or func_init_to_host_path_cmd +# will break. + + +# func_init_to_host_path_cmd +# Ensures that function "pointer" variable $to_host_path_cmd is set to the +# appropriate value, based on the value of $to_host_file_cmd. +to_host_path_cmd= +func_init_to_host_path_cmd () +{ + $debug_cmd + + if test -z "$to_host_path_cmd"; then + func_stripname 'func_convert_file_' '' "$to_host_file_cmd" + to_host_path_cmd=func_convert_path_$func_stripname_result + fi +} + + +# func_to_host_path ARG +# Converts the path ARG from $build format to $host format. Return result +# in func_to_host_path_result. +func_to_host_path () +{ + $debug_cmd + + func_init_to_host_path_cmd + $to_host_path_cmd "$1" +} +# end func_to_host_path + + +# func_convert_path_noop ARG +# Copy ARG to func_to_host_path_result. +func_convert_path_noop () +{ + func_to_host_path_result=$1 +} +# end func_convert_path_noop + + +# func_convert_path_msys_to_w32 ARG +# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic +# conversion to w32 is not available inside the cwrapper. Returns result in +# func_to_host_path_result. +func_convert_path_msys_to_w32 () +{ + $debug_cmd + + func_to_host_path_result=$1 + if test -n "$1"; then + # Remove leading and trailing path separator characters from ARG. MSYS + # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; + # and winepath ignores them completely. + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" + func_to_host_path_result=$func_convert_core_msys_to_w32_result + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_msys_to_w32 + + +# func_convert_path_cygwin_to_w32 ARG +# Convert path ARG from Cygwin to w32 format. Returns result in +# func_to_host_file_result. +func_convert_path_cygwin_to_w32 () +{ + $debug_cmd + + func_to_host_path_result=$1 + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_cygwin_to_w32 + + +# func_convert_path_nix_to_w32 ARG +# Convert path ARG from *nix to w32 format. Requires a wine environment and +# a working winepath. Returns result in func_to_host_file_result. +func_convert_path_nix_to_w32 () +{ + $debug_cmd + + func_to_host_path_result=$1 + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" + func_to_host_path_result=$func_convert_core_path_wine_to_w32_result + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_nix_to_w32 + + +# func_convert_path_msys_to_cygwin ARG +# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. +# Returns result in func_to_host_file_result. +func_convert_path_msys_to_cygwin () +{ + $debug_cmd + + func_to_host_path_result=$1 + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" + func_cygpath -u -p "$func_convert_core_msys_to_w32_result" + func_to_host_path_result=$func_cygpath_result + func_convert_path_check : : \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" : "$1" + fi +} +# end func_convert_path_msys_to_cygwin + + +# func_convert_path_nix_to_cygwin ARG +# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a +# a wine environment, working winepath, and LT_CYGPATH set. Returns result in +# func_to_host_file_result. +func_convert_path_nix_to_cygwin () +{ + $debug_cmd + + func_to_host_path_result=$1 + if test -n "$1"; then + # Remove leading and trailing path separator characters from + # ARG. msys behavior is inconsistent here, cygpath turns them + # into '.;' and ';.', and winepath ignores them completely. + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" + func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" + func_to_host_path_result=$func_cygpath_result + func_convert_path_check : : \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" : "$1" + fi +} +# end func_convert_path_nix_to_cygwin + + +# func_dll_def_p FILE +# True iff FILE is a Windows DLL '.def' file. +# Keep in sync with _LT_DLL_DEF_P in libtool.m4 +func_dll_def_p () +{ + $debug_cmd + + func_dll_def_p_tmp=`$SED -n \ + -e 's/^[ ]*//' \ + -e '/^\(;.*\)*$/d' \ + -e 's/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p' \ + -e q \ + "$1"` + test DEF = "$func_dll_def_p_tmp" +} + + +# func_mode_compile arg... +func_mode_compile () +{ + $debug_cmd + + # Get the compilation command and the source file. + base_compile= + srcfile=$nonopt # always keep a non-empty value in "srcfile" + suppress_opt=yes + suppress_output= + arg_mode=normal + libobj= + later= + pie_flag= + + for arg + do + case $arg_mode in + arg ) + # do not "continue". Instead, add this to base_compile + lastarg=$arg + arg_mode=normal + ;; + + target ) + libobj=$arg + arg_mode=normal + continue + ;; + + normal ) + # Accept any command-line options. + case $arg in + -o) + test -n "$libobj" && \ + func_fatal_error "you cannot specify '-o' more than once" + arg_mode=target + continue + ;; + + -pie | -fpie | -fPIE) + func_append pie_flag " $arg" + continue + ;; + + -shared | -static | -prefer-pic | -prefer-non-pic) + func_append later " $arg" + continue + ;; + + -no-suppress) + suppress_opt=no + continue + ;; + + -Xcompiler) + arg_mode=arg # the next one goes into the "base_compile" arg list + continue # The current "srcfile" will either be retained or + ;; # replaced later. I would guess that would be a bug. + + -Wc,*) + func_stripname '-Wc,' '' "$arg" + args=$func_stripname_result + lastarg= + save_ifs=$IFS; IFS=, + for arg in $args; do + IFS=$save_ifs + func_append_quoted lastarg "$arg" + done + IFS=$save_ifs + func_stripname ' ' '' "$lastarg" + lastarg=$func_stripname_result + + # Add the arguments to base_compile. + func_append base_compile " $lastarg" + continue + ;; + + *) + # Accept the current argument as the source file. + # The previous "srcfile" becomes the current argument. + # + lastarg=$srcfile + srcfile=$arg + ;; + esac # case $arg + ;; + esac # case $arg_mode + + # Aesthetically quote the previous argument. + func_append_quoted base_compile "$lastarg" + done # for arg + + case $arg_mode in + arg) + func_fatal_error "you must specify an argument for -Xcompile" + ;; + target) + func_fatal_error "you must specify a target with '-o'" + ;; + *) + # Get the name of the library object. + test -z "$libobj" && { + func_basename "$srcfile" + libobj=$func_basename_result + } + ;; + esac + + # Recognize several different file suffixes. + # If the user specifies -o file.o, it is replaced with file.lo + case $libobj in + *.[cCFSifmso] | \ + *.ada | *.adb | *.ads | *.asm | \ + *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ + *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) + func_xform "$libobj" + libobj=$func_xform_result + ;; + esac + + case $libobj in + *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; + *) + func_fatal_error "cannot determine name of library object from '$libobj'" + ;; + esac + + func_infer_tag $base_compile + + for arg in $later; do + case $arg in + -shared) + test yes = "$build_libtool_libs" \ + || func_fatal_configuration "cannot build a shared library" + build_old_libs=no + continue + ;; + + -static) + build_libtool_libs=no + build_old_libs=yes + continue + ;; + + -prefer-pic) + pic_mode=yes + continue + ;; + + -prefer-non-pic) + pic_mode=no + continue + ;; + esac + done + + func_quote_for_eval "$libobj" + test "X$libobj" != "X$func_quote_for_eval_result" \ + && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ + && func_warning "libobj name '$libobj' may not contain shell special characters." + func_dirname_and_basename "$obj" "/" "" + objname=$func_basename_result + xdir=$func_dirname_result + lobj=$xdir$objdir/$objname + + test -z "$base_compile" && \ + func_fatal_help "you must specify a compilation command" + + # Delete any leftover library objects. + if test yes = "$build_old_libs"; then + removelist="$obj $lobj $libobj ${libobj}T" + else + removelist="$lobj $libobj ${libobj}T" + fi + + # On Cygwin there's no "real" PIC flag so we must build both object types + case $host_os in + cygwin* | mingw* | pw32* | os2* | cegcc*) + pic_mode=default + ;; + esac + if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then + # non-PIC code in shared libraries is not supported + pic_mode=default + fi + + # Calculate the filename of the output object if compiler does + # not support -o with -c + if test no = "$compiler_c_o"; then + output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext + lockfile=$output_obj.lock + else + output_obj= + need_locks=no + lockfile= + fi + + # Lock this critical section if it is needed + # We use this script file to make the link, it avoids creating a new file + if test yes = "$need_locks"; then + until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do + func_echo "Waiting for $lockfile to be removed" + sleep 2 + done + elif test warn = "$need_locks"; then + if test -f "$lockfile"; then + $ECHO "\ +*** ERROR, $lockfile exists and contains: +`cat $lockfile 2>/dev/null` + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support '-c' and '-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + func_append removelist " $output_obj" + $ECHO "$srcfile" > "$lockfile" + fi + + $opt_dry_run || $RM $removelist + func_append removelist " $lockfile" + trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 + + func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 + srcfile=$func_to_tool_file_result + func_quote_for_eval "$srcfile" + qsrcfile=$func_quote_for_eval_result + + # Only build a PIC object if we are building libtool libraries. + if test yes = "$build_libtool_libs"; then + # Without this assignment, base_compile gets emptied. + fbsd_hideous_sh_bug=$base_compile + + if test no != "$pic_mode"; then + command="$base_compile $qsrcfile $pic_flag" + else + # Don't build PIC code + command="$base_compile $qsrcfile" + fi + + func_mkdir_p "$xdir$objdir" + + if test -z "$output_obj"; then + # Place PIC objects in $objdir + func_append command " -o $lobj" + fi + + func_show_eval_locale "$command" \ + 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' + + if test warn = "$need_locks" && + test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then + $ECHO "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support '-c' and '-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed, then go on to compile the next one + if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then + func_show_eval '$MV "$output_obj" "$lobj"' \ + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' + fi + + # Allow error messages only from the first compilation. + if test yes = "$suppress_opt"; then + suppress_output=' >/dev/null 2>&1' + fi + fi + + # Only build a position-dependent object if we build old libraries. + if test yes = "$build_old_libs"; then + if test yes != "$pic_mode"; then + # Don't build PIC code + command="$base_compile $qsrcfile$pie_flag" + else + command="$base_compile $qsrcfile $pic_flag" + fi + if test yes = "$compiler_c_o"; then + func_append command " -o $obj" + fi + + # Suppress compiler output if we already did a PIC compilation. + func_append command "$suppress_output" + func_show_eval_locale "$command" \ + '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' + + if test warn = "$need_locks" && + test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then + $ECHO "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support '-c' and '-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed + if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then + func_show_eval '$MV "$output_obj" "$obj"' \ + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' + fi + fi + + $opt_dry_run || { + func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" + + # Unlock the critical section if it was locked + if test no != "$need_locks"; then + removelist=$lockfile + $RM "$lockfile" + fi + } + + exit $EXIT_SUCCESS +} + +$opt_help || { + test compile = "$opt_mode" && func_mode_compile ${1+"$@"} +} + +func_mode_help () +{ + # We need to display help for each of the modes. + case $opt_mode in + "") + # Generic help is extracted from the usage comments + # at the start of this file. + func_help + ;; + + clean) + $ECHO \ +"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... + +Remove files from the build directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed +to RM. + +If FILE is a libtool library, object or program, all the files associated +with it are deleted. Otherwise, only FILE itself is deleted using RM." + ;; + + compile) + $ECHO \ +"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE + +Compile a source file into a libtool library object. + +This mode accepts the following additional options: + + -o OUTPUT-FILE set the output file name to OUTPUT-FILE + -no-suppress do not suppress compiler output for multiple passes + -prefer-pic try to build PIC objects only + -prefer-non-pic try to build non-PIC objects only + -shared do not build a '.o' file suitable for static linking + -static only build a '.o' file suitable for static linking + -Wc,FLAG pass FLAG directly to the compiler + +COMPILE-COMMAND is a command to be used in creating a 'standard' object file +from the given SOURCEFILE. + +The output file name is determined by removing the directory component from +SOURCEFILE, then substituting the C source code suffix '.c' with the +library object suffix, '.lo'." + ;; + + execute) + $ECHO \ +"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... + +Automatically set library path, then run a program. + +This mode accepts the following additional options: + + -dlopen FILE add the directory containing FILE to the library path + +This mode sets the library path environment variable according to '-dlopen' +flags. + +If any of the ARGS are libtool executable wrappers, then they are translated +into their corresponding uninstalled binary, and any of their required library +directories are added to the library path. + +Then, COMMAND is executed, with ARGS as arguments." + ;; + + finish) + $ECHO \ +"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... + +Complete the installation of libtool libraries. + +Each LIBDIR is a directory that contains libtool libraries. + +The commands that this mode executes may require superuser privileges. Use +the '--dry-run' option if you just want to see what would be executed." + ;; + + install) + $ECHO \ +"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... + +Install executables or libraries. + +INSTALL-COMMAND is the installation command. The first component should be +either the 'install' or 'cp' program. + +The following components of INSTALL-COMMAND are treated specially: + + -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation + +The rest of the components are interpreted as arguments to that command (only +BSD-compatible install options are recognized)." + ;; + + link) + $ECHO \ +"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... + +Link object files or libraries together to form another library, or to +create an executable program. + +LINK-COMMAND is a command using the C compiler that you would use to create +a program from several object files. + +The following components of LINK-COMMAND are treated specially: + + -all-static do not do any dynamic linking at all + -avoid-version do not add a version suffix if possible + -bindir BINDIR specify path to binaries directory (for systems where + libraries must be found in the PATH setting at runtime) + -dlopen FILE '-dlpreopen' FILE if it cannot be dlopened at runtime + -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols + -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) + -export-symbols SYMFILE + try to export only the symbols listed in SYMFILE + -export-symbols-regex REGEX + try to export only the symbols matching REGEX + -LLIBDIR search LIBDIR for required installed libraries + -lNAME OUTPUT-FILE requires the installed library libNAME + -module build a library that can dlopened + -no-fast-install disable the fast-install mode + -no-install link a not-installable executable + -no-undefined declare that a library does not refer to external symbols + -o OUTPUT-FILE create OUTPUT-FILE from the specified objects + -objectlist FILE use a list of object files found in FILE to specify objects + -os2dllname NAME force a short DLL name on OS/2 (no effect on other OSes) + -precious-files-regex REGEX + don't remove output files matching REGEX + -release RELEASE specify package release information + -rpath LIBDIR the created library will eventually be installed in LIBDIR + -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries + -shared only do dynamic linking of libtool libraries + -shrext SUFFIX override the standard shared library file extension + -static do not do any dynamic linking of uninstalled libtool libraries + -static-libtool-libs + do not do any dynamic linking of libtool libraries + -version-info CURRENT[:REVISION[:AGE]] + specify library version info [each variable defaults to 0] + -weak LIBNAME declare that the target provides the LIBNAME interface + -Wc,FLAG + -Xcompiler FLAG pass linker-specific FLAG directly to the compiler + -Wl,FLAG + -Xlinker FLAG pass linker-specific FLAG directly to the linker + -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) + +All other options (arguments beginning with '-') are ignored. + +Every other argument is treated as a filename. Files ending in '.la' are +treated as uninstalled libtool libraries, other files are standard or library +object files. + +If the OUTPUT-FILE ends in '.la', then a libtool library is created, +only library objects ('.lo' files) may be specified, and '-rpath' is +required, except when creating a convenience library. + +If OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created +using 'ar' and 'ranlib', or on Windows using 'lib'. + +If OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file +is created, otherwise an executable program is created." + ;; + + uninstall) + $ECHO \ +"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... + +Remove libraries from an installation directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed +to RM. + +If FILE is a libtool library, all the files associated with it are deleted. +Otherwise, only FILE itself is deleted using RM." + ;; + + *) + func_fatal_help "invalid operation mode '$opt_mode'" + ;; + esac + + echo + $ECHO "Try '$progname --help' for more information about other modes." +} + +# Now that we've collected a possible --mode arg, show help if necessary +if $opt_help; then + if test : = "$opt_help"; then + func_mode_help + else + { + func_help noexit + for opt_mode in compile link execute install finish uninstall clean; do + func_mode_help + done + } | $SED -n '1p; 2,$s/^Usage:/ or: /p' + { + func_help noexit + for opt_mode in compile link execute install finish uninstall clean; do + echo + func_mode_help + done + } | + $SED '1d + /^When reporting/,/^Report/{ + H + d + } + $x + /information about other modes/d + /more detailed .*MODE/d + s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' + fi + exit $? +fi + + +# func_mode_execute arg... +func_mode_execute () +{ + $debug_cmd + + # The first argument is the command name. + cmd=$nonopt + test -z "$cmd" && \ + func_fatal_help "you must specify a COMMAND" + + # Handle -dlopen flags immediately. + for file in $opt_dlopen; do + test -f "$file" \ + || func_fatal_help "'$file' is not a file" + + dir= + case $file in + *.la) + func_resolve_sysroot "$file" + file=$func_resolve_sysroot_result + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$file" \ + || func_fatal_help "'$lib' is not a valid libtool archive" + + # Read the libtool library. + dlname= + library_names= + func_source "$file" + + # Skip this library if it cannot be dlopened. + if test -z "$dlname"; then + # Warn if it was a shared library. + test -n "$library_names" && \ + func_warning "'$file' was not linked with '-export-dynamic'" + continue + fi + + func_dirname "$file" "" "." + dir=$func_dirname_result + + if test -f "$dir/$objdir/$dlname"; then + func_append dir "/$objdir" + else + if test ! -f "$dir/$dlname"; then + func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'" + fi + fi + ;; + + *.lo) + # Just add the directory containing the .lo file. + func_dirname "$file" "" "." + dir=$func_dirname_result + ;; + + *) + func_warning "'-dlopen' is ignored for non-libtool libraries and objects" + continue + ;; + esac + + # Get the absolute pathname. + absdir=`cd "$dir" && pwd` + test -n "$absdir" && dir=$absdir + + # Now add the directory to shlibpath_var. + if eval "test -z \"\$$shlibpath_var\""; then + eval "$shlibpath_var=\"\$dir\"" + else + eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" + fi + done + + # This variable tells wrapper scripts just to set shlibpath_var + # rather than running their programs. + libtool_execute_magic=$magic + + # Check if any of the arguments is a wrapper script. + args= + for file + do + case $file in + -* | *.la | *.lo ) ;; + *) + # Do a test to see if this is really a libtool program. + if func_ltwrapper_script_p "$file"; then + func_source "$file" + # Transform arg to wrapped name. + file=$progdir/$program + elif func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + func_source "$func_ltwrapper_scriptname_result" + # Transform arg to wrapped name. + file=$progdir/$program + fi + ;; + esac + # Quote arguments (to preserve shell metacharacters). + func_append_quoted args "$file" + done + + if $opt_dry_run; then + # Display what would be done. + if test -n "$shlibpath_var"; then + eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" + echo "export $shlibpath_var" + fi + $ECHO "$cmd$args" + exit $EXIT_SUCCESS + else + if test -n "$shlibpath_var"; then + # Export the shlibpath_var. + eval "export $shlibpath_var" + fi + + # Restore saved environment variables + for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES + do + eval "if test \"\${save_$lt_var+set}\" = set; then + $lt_var=\$save_$lt_var; export $lt_var + else + $lt_unset $lt_var + fi" + done + + # Now prepare to actually exec the command. + exec_cmd=\$cmd$args + fi +} + +test execute = "$opt_mode" && func_mode_execute ${1+"$@"} + + +# func_mode_finish arg... +func_mode_finish () +{ + $debug_cmd + + libs= + libdirs= + admincmds= + + for opt in "$nonopt" ${1+"$@"} + do + if test -d "$opt"; then + func_append libdirs " $opt" + + elif test -f "$opt"; then + if func_lalib_unsafe_p "$opt"; then + func_append libs " $opt" + else + func_warning "'$opt' is not a valid libtool archive" + fi + + else + func_fatal_error "invalid argument '$opt'" + fi + done + + if test -n "$libs"; then + if test -n "$lt_sysroot"; then + sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` + sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" + else + sysroot_cmd= + fi + + # Remove sysroot references + if $opt_dry_run; then + for lib in $libs; do + echo "removing references to $lt_sysroot and '=' prefixes from $lib" + done + else + tmpdir=`func_mktempdir` + for lib in $libs; do + $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ + > $tmpdir/tmp-la + mv -f $tmpdir/tmp-la $lib + done + ${RM}r "$tmpdir" + fi + fi + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + for libdir in $libdirs; do + if test -n "$finish_cmds"; then + # Do each command in the finish commands. + func_execute_cmds "$finish_cmds" 'admincmds="$admincmds +'"$cmd"'"' + fi + if test -n "$finish_eval"; then + # Do the single finish_eval. + eval cmds=\"$finish_eval\" + $opt_dry_run || eval "$cmds" || func_append admincmds " + $cmds" + fi + done + fi + + # Exit here if they wanted silent mode. + $opt_quiet && exit $EXIT_SUCCESS + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + echo "----------------------------------------------------------------------" + echo "Libraries have been installed in:" + for libdir in $libdirs; do + $ECHO " $libdir" + done + echo + echo "If you ever happen to want to link against installed libraries" + echo "in a given directory, LIBDIR, you must either use libtool, and" + echo "specify the full pathname of the library, or use the '-LLIBDIR'" + echo "flag during linking and do at least one of the following:" + if test -n "$shlibpath_var"; then + echo " - add LIBDIR to the '$shlibpath_var' environment variable" + echo " during execution" + fi + if test -n "$runpath_var"; then + echo " - add LIBDIR to the '$runpath_var' environment variable" + echo " during linking" + fi + if test -n "$hardcode_libdir_flag_spec"; then + libdir=LIBDIR + eval flag=\"$hardcode_libdir_flag_spec\" + + $ECHO " - use the '$flag' linker flag" + fi + if test -n "$admincmds"; then + $ECHO " - have your system administrator run these commands:$admincmds" + fi + if test -f /etc/ld.so.conf; then + echo " - have your system administrator add LIBDIR to '/etc/ld.so.conf'" + fi + echo + + echo "See any operating system documentation about shared libraries for" + case $host in + solaris2.[6789]|solaris2.1[0-9]) + echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" + echo "pages." + ;; + *) + echo "more information, such as the ld(1) and ld.so(8) manual pages." + ;; + esac + echo "----------------------------------------------------------------------" + fi + exit $EXIT_SUCCESS +} + +test finish = "$opt_mode" && func_mode_finish ${1+"$@"} + + +# func_mode_install arg... +func_mode_install () +{ + $debug_cmd + + # There may be an optional sh(1) argument at the beginning of + # install_prog (especially on Windows NT). + if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" || + # Allow the use of GNU shtool's install command. + case $nonopt in *shtool*) :;; *) false;; esac + then + # Aesthetically quote it. + func_quote_for_eval "$nonopt" + install_prog="$func_quote_for_eval_result " + arg=$1 + shift + else + install_prog= + arg=$nonopt + fi + + # The real first argument should be the name of the installation program. + # Aesthetically quote it. + func_quote_for_eval "$arg" + func_append install_prog "$func_quote_for_eval_result" + install_shared_prog=$install_prog + case " $install_prog " in + *[\\\ /]cp\ *) install_cp=: ;; + *) install_cp=false ;; + esac + + # We need to accept at least all the BSD install flags. + dest= + files= + opts= + prev= + install_type= + isdir=false + stripme= + no_mode=: + for arg + do + arg2= + if test -n "$dest"; then + func_append files " $dest" + dest=$arg + continue + fi + + case $arg in + -d) isdir=: ;; + -f) + if $install_cp; then :; else + prev=$arg + fi + ;; + -g | -m | -o) + prev=$arg + ;; + -s) + stripme=" -s" + continue + ;; + -*) + ;; + *) + # If the previous option needed an argument, then skip it. + if test -n "$prev"; then + if test X-m = "X$prev" && test -n "$install_override_mode"; then + arg2=$install_override_mode + no_mode=false + fi + prev= + else + dest=$arg + continue + fi + ;; + esac + + # Aesthetically quote the argument. + func_quote_for_eval "$arg" + func_append install_prog " $func_quote_for_eval_result" + if test -n "$arg2"; then + func_quote_for_eval "$arg2" + fi + func_append install_shared_prog " $func_quote_for_eval_result" + done + + test -z "$install_prog" && \ + func_fatal_help "you must specify an install program" + + test -n "$prev" && \ + func_fatal_help "the '$prev' option requires an argument" + + if test -n "$install_override_mode" && $no_mode; then + if $install_cp; then :; else + func_quote_for_eval "$install_override_mode" + func_append install_shared_prog " -m $func_quote_for_eval_result" + fi + fi + + if test -z "$files"; then + if test -z "$dest"; then + func_fatal_help "no file or destination specified" + else + func_fatal_help "you must specify a destination" + fi + fi + + # Strip any trailing slash from the destination. + func_stripname '' '/' "$dest" + dest=$func_stripname_result + + # Check to see that the destination is a directory. + test -d "$dest" && isdir=: + if $isdir; then + destdir=$dest + destname= + else + func_dirname_and_basename "$dest" "" "." + destdir=$func_dirname_result + destname=$func_basename_result + + # Not a directory, so check to see that there is only one file specified. + set dummy $files; shift + test "$#" -gt 1 && \ + func_fatal_help "'$dest' is not a directory" + fi + case $destdir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + for file in $files; do + case $file in + *.lo) ;; + *) + func_fatal_help "'$destdir' must be an absolute directory name" + ;; + esac + done + ;; + esac + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic=$magic + + staticlibs= + future_libdirs= + current_libdirs= + for file in $files; do + + # Do each installation. + case $file in + *.$libext) + # Do the static libraries later. + func_append staticlibs " $file" + ;; + + *.la) + func_resolve_sysroot "$file" + file=$func_resolve_sysroot_result + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$file" \ + || func_fatal_help "'$file' is not a valid libtool archive" + + library_names= + old_library= + relink_command= + func_source "$file" + + # Add the libdir to current_libdirs if it is the destination. + if test "X$destdir" = "X$libdir"; then + case "$current_libdirs " in + *" $libdir "*) ;; + *) func_append current_libdirs " $libdir" ;; + esac + else + # Note the libdir as a future libdir. + case "$future_libdirs " in + *" $libdir "*) ;; + *) func_append future_libdirs " $libdir" ;; + esac + fi + + func_dirname "$file" "/" "" + dir=$func_dirname_result + func_append dir "$objdir" + + if test -n "$relink_command"; then + # Determine the prefix the user has applied to our future dir. + inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` + + # Don't allow the user to place us outside of our expected + # location b/c this prevents finding dependent libraries that + # are installed to the same prefix. + # At present, this check doesn't affect windows .dll's that + # are installed into $libdir/../bin (currently, that works fine) + # but it's something to keep an eye on. + test "$inst_prefix_dir" = "$destdir" && \ + func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir" + + if test -n "$inst_prefix_dir"; then + # Stick the inst_prefix_dir data into the link command. + relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` + else + relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` + fi + + func_warning "relinking '$file'" + func_show_eval "$relink_command" \ + 'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"' + fi + + # See the names of the shared library. + set dummy $library_names; shift + if test -n "$1"; then + realname=$1 + shift + + srcname=$realname + test -n "$relink_command" && srcname=${realname}T + + # Install the shared library and build the symlinks. + func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ + 'exit $?' + tstripme=$stripme + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + case $realname in + *.dll.a) + tstripme= + ;; + esac + ;; + os2*) + case $realname in + *_dll.a) + tstripme= + ;; + esac + ;; + esac + if test -n "$tstripme" && test -n "$striplib"; then + func_show_eval "$striplib $destdir/$realname" 'exit $?' + fi + + if test "$#" -gt 0; then + # Delete the old symlinks, and create new ones. + # Try 'ln -sf' first, because the 'ln' binary might depend on + # the symlink we replace! Solaris /bin/ln does not understand -f, + # so we also need to try rm && ln -s. + for linkname + do + test "$linkname" != "$realname" \ + && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" + done + fi + + # Do each command in the postinstall commands. + lib=$destdir/$realname + func_execute_cmds "$postinstall_cmds" 'exit $?' + fi + + # Install the pseudo-library for information purposes. + func_basename "$file" + name=$func_basename_result + instname=$dir/${name}i + func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' + + # Maybe install the static library, too. + test -n "$old_library" && func_append staticlibs " $dir/$old_library" + ;; + + *.lo) + # Install (i.e. copy) a libtool object. + + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile=$destdir/$destname + else + func_basename "$file" + destfile=$func_basename_result + destfile=$destdir/$destfile + fi + + # Deduce the name of the destination old-style object file. + case $destfile in + *.lo) + func_lo2o "$destfile" + staticdest=$func_lo2o_result + ;; + *.$objext) + staticdest=$destfile + destfile= + ;; + *) + func_fatal_help "cannot copy a libtool object to '$destfile'" + ;; + esac + + # Install the libtool object if requested. + test -n "$destfile" && \ + func_show_eval "$install_prog $file $destfile" 'exit $?' + + # Install the old object if enabled. + if test yes = "$build_old_libs"; then + # Deduce the name of the old-style object file. + func_lo2o "$file" + staticobj=$func_lo2o_result + func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' + fi + exit $EXIT_SUCCESS + ;; + + *) + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile=$destdir/$destname + else + func_basename "$file" + destfile=$func_basename_result + destfile=$destdir/$destfile + fi + + # If the file is missing, and there is a .exe on the end, strip it + # because it is most likely a libtool script we actually want to + # install + stripped_ext= + case $file in + *.exe) + if test ! -f "$file"; then + func_stripname '' '.exe' "$file" + file=$func_stripname_result + stripped_ext=.exe + fi + ;; + esac + + # Do a test to see if this is really a libtool program. + case $host in + *cygwin* | *mingw*) + if func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + wrapper=$func_ltwrapper_scriptname_result + else + func_stripname '' '.exe' "$file" + wrapper=$func_stripname_result + fi + ;; + *) + wrapper=$file + ;; + esac + if func_ltwrapper_script_p "$wrapper"; then + notinst_deplibs= + relink_command= + + func_source "$wrapper" + + # Check the variables that should have been set. + test -z "$generated_by_libtool_version" && \ + func_fatal_error "invalid libtool wrapper script '$wrapper'" + + finalize=: + for lib in $notinst_deplibs; do + # Check to see that each library is installed. + libdir= + if test -f "$lib"; then + func_source "$lib" + fi + libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'` + if test -n "$libdir" && test ! -f "$libfile"; then + func_warning "'$lib' has not been installed in '$libdir'" + finalize=false + fi + done + + relink_command= + func_source "$wrapper" + + outputname= + if test no = "$fast_install" && test -n "$relink_command"; then + $opt_dry_run || { + if $finalize; then + tmpdir=`func_mktempdir` + func_basename "$file$stripped_ext" + file=$func_basename_result + outputname=$tmpdir/$file + # Replace the output file specification. + relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` + + $opt_quiet || { + func_quote_for_expand "$relink_command" + eval "func_echo $func_quote_for_expand_result" + } + if eval "$relink_command"; then : + else + func_error "error: relink '$file' with the above command before installing it" + $opt_dry_run || ${RM}r "$tmpdir" + continue + fi + file=$outputname + else + func_warning "cannot relink '$file'" + fi + } + else + # Install the binary that we compiled earlier. + file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` + fi + fi + + # remove .exe since cygwin /usr/bin/install will append another + # one anyway + case $install_prog,$host in + */usr/bin/install*,*cygwin*) + case $file:$destfile in + *.exe:*.exe) + # this is ok + ;; + *.exe:*) + destfile=$destfile.exe + ;; + *:*.exe) + func_stripname '' '.exe' "$destfile" + destfile=$func_stripname_result + ;; + esac + ;; + esac + func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' + $opt_dry_run || if test -n "$outputname"; then + ${RM}r "$tmpdir" + fi + ;; + esac + done + + for file in $staticlibs; do + func_basename "$file" + name=$func_basename_result + + # Set up the ranlib parameters. + oldlib=$destdir/$name + func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 + tool_oldlib=$func_to_tool_file_result + + func_show_eval "$install_prog \$file \$oldlib" 'exit $?' + + if test -n "$stripme" && test -n "$old_striplib"; then + func_show_eval "$old_striplib $tool_oldlib" 'exit $?' + fi + + # Do each command in the postinstall commands. + func_execute_cmds "$old_postinstall_cmds" 'exit $?' + done + + test -n "$future_libdirs" && \ + func_warning "remember to run '$progname --finish$future_libdirs'" + + if test -n "$current_libdirs"; then + # Maybe just do a dry run. + $opt_dry_run && current_libdirs=" -n$current_libdirs" + exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs' + else + exit $EXIT_SUCCESS + fi +} + +test install = "$opt_mode" && func_mode_install ${1+"$@"} + + +# func_generate_dlsyms outputname originator pic_p +# Extract symbols from dlprefiles and create ${outputname}S.o with +# a dlpreopen symbol table. +func_generate_dlsyms () +{ + $debug_cmd + + my_outputname=$1 + my_originator=$2 + my_pic_p=${3-false} + my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'` + my_dlsyms= + + if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then + if test -n "$NM" && test -n "$global_symbol_pipe"; then + my_dlsyms=${my_outputname}S.c + else + func_error "not configured to extract global symbols from dlpreopened files" + fi + fi + + if test -n "$my_dlsyms"; then + case $my_dlsyms in + "") ;; + *.c) + # Discover the nlist of each of the dlfiles. + nlist=$output_objdir/$my_outputname.nm + + func_show_eval "$RM $nlist ${nlist}S ${nlist}T" + + # Parse the name list into a source file. + func_verbose "creating $output_objdir/$my_dlsyms" + + $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ +/* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */ +/* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */ + +#ifdef __cplusplus +extern \"C\" { +#endif + +#if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) +#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" +#endif + +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE +/* DATA imports from DLLs on WIN32 can't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT_DLSYM_CONST +#elif defined __osf__ +/* This system does not cope well with relocations in const data. */ +# define LT_DLSYM_CONST +#else +# define LT_DLSYM_CONST const +#endif + +#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) + +/* External symbol declarations for the compiler. */\ +" + + if test yes = "$dlself"; then + func_verbose "generating symbol list for '$output'" + + $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" + + # Add our own program objects to the symbol list. + progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` + for progfile in $progfiles; do + func_to_tool_file "$progfile" func_convert_file_msys_to_w32 + func_verbose "extracting global C symbols from '$func_to_tool_file_result'" + $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" + done + + if test -n "$exclude_expsyms"; then + $opt_dry_run || { + eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + } + fi + + if test -n "$export_symbols_regex"; then + $opt_dry_run || { + eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + } + fi + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + export_symbols=$output_objdir/$outputname.exp + $opt_dry_run || { + $RM $export_symbols + eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' + case $host in + *cygwin* | *mingw* | *cegcc* ) + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' + ;; + esac + } + else + $opt_dry_run || { + eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' + eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + case $host in + *cygwin* | *mingw* | *cegcc* ) + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' + ;; + esac + } + fi + fi + + for dlprefile in $dlprefiles; do + func_verbose "extracting global C symbols from '$dlprefile'" + func_basename "$dlprefile" + name=$func_basename_result + case $host in + *cygwin* | *mingw* | *cegcc* ) + # if an import library, we need to obtain dlname + if func_win32_import_lib_p "$dlprefile"; then + func_tr_sh "$dlprefile" + eval "curr_lafile=\$libfile_$func_tr_sh_result" + dlprefile_dlbasename= + if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then + # Use subshell, to avoid clobbering current variable values + dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` + if test -n "$dlprefile_dlname"; then + func_basename "$dlprefile_dlname" + dlprefile_dlbasename=$func_basename_result + else + # no lafile. user explicitly requested -dlpreopen . + $sharedlib_from_linklib_cmd "$dlprefile" + dlprefile_dlbasename=$sharedlib_from_linklib_result + fi + fi + $opt_dry_run || { + if test -n "$dlprefile_dlbasename"; then + eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' + else + func_warning "Could not compute DLL name from $name" + eval '$ECHO ": $name " >> "$nlist"' + fi + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | + $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" + } + else # not an import lib + $opt_dry_run || { + eval '$ECHO ": $name " >> "$nlist"' + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" + } + fi + ;; + *) + $opt_dry_run || { + eval '$ECHO ": $name " >> "$nlist"' + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" + } + ;; + esac + done + + $opt_dry_run || { + # Make sure we have at least an empty file. + test -f "$nlist" || : > "$nlist" + + if test -n "$exclude_expsyms"; then + $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T + $MV "$nlist"T "$nlist" + fi + + # Try sorting and uniquifying the output. + if $GREP -v "^: " < "$nlist" | + if sort -k 3 /dev/null 2>&1; then + sort -k 3 + else + sort +2 + fi | + uniq > "$nlist"S; then + : + else + $GREP -v "^: " < "$nlist" > "$nlist"S + fi + + if test -f "$nlist"S; then + eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' + else + echo '/* NONE */' >> "$output_objdir/$my_dlsyms" + fi + + func_show_eval '$RM "${nlist}I"' + if test -n "$global_symbol_to_import"; then + eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I' + fi + + echo >> "$output_objdir/$my_dlsyms" "\ + +/* The mapping between symbol names and symbols. */ +typedef struct { + const char *name; + void *address; +} lt_dlsymlist; +extern LT_DLSYM_CONST lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[];\ +" + + if test -s "$nlist"I; then + echo >> "$output_objdir/$my_dlsyms" "\ +static void lt_syminit(void) +{ + LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols; + for (; symbol->name; ++symbol) + {" + $SED 's/.*/ if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms" + echo >> "$output_objdir/$my_dlsyms" "\ + } +}" + fi + echo >> "$output_objdir/$my_dlsyms" "\ +LT_DLSYM_CONST lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[] = +{ {\"$my_originator\", (void *) 0}," + + if test -s "$nlist"I; then + echo >> "$output_objdir/$my_dlsyms" "\ + {\"@INIT@\", (void *) <_syminit}," + fi + + case $need_lib_prefix in + no) + eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" + ;; + *) + eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" + ;; + esac + echo >> "$output_objdir/$my_dlsyms" "\ + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt_${my_prefix}_LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif\ +" + } # !$opt_dry_run + + pic_flag_for_symtable= + case "$compile_command " in + *" -static "*) ;; + *) + case $host in + # compiling the symbol table file with pic_flag works around + # a FreeBSD bug that causes programs to crash when -lm is + # linked before any other PIC object. But we must not use + # pic_flag when linking with -static. The problem exists in + # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. + *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) + pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; + *-*-hpux*) + pic_flag_for_symtable=" $pic_flag" ;; + *) + $my_pic_p && pic_flag_for_symtable=" $pic_flag" + ;; + esac + ;; + esac + symtab_cflags= + for arg in $LTCFLAGS; do + case $arg in + -pie | -fpie | -fPIE) ;; + *) func_append symtab_cflags " $arg" ;; + esac + done + + # Now compile the dynamic symbol file. + func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' + + # Clean up the generated files. + func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"' + + # Transform the symbol file into the correct name. + symfileobj=$output_objdir/${my_outputname}S.$objext + case $host in + *cygwin* | *mingw* | *cegcc* ) + if test -f "$output_objdir/$my_outputname.def"; then + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` + else + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` + fi + ;; + *) + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` + ;; + esac + ;; + *) + func_fatal_error "unknown suffix for '$my_dlsyms'" + ;; + esac + else + # We keep going just in case the user didn't refer to + # lt_preloaded_symbols. The linker will fail if global_symbol_pipe + # really was required. + + # Nullify the symbol file. + compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` + fi +} + +# func_cygming_gnu_implib_p ARG +# This predicate returns with zero status (TRUE) if +# ARG is a GNU/binutils-style import library. Returns +# with nonzero status (FALSE) otherwise. +func_cygming_gnu_implib_p () +{ + $debug_cmd + + func_to_tool_file "$1" func_convert_file_msys_to_w32 + func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` + test -n "$func_cygming_gnu_implib_tmp" +} + +# func_cygming_ms_implib_p ARG +# This predicate returns with zero status (TRUE) if +# ARG is an MS-style import library. Returns +# with nonzero status (FALSE) otherwise. +func_cygming_ms_implib_p () +{ + $debug_cmd + + func_to_tool_file "$1" func_convert_file_msys_to_w32 + func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` + test -n "$func_cygming_ms_implib_tmp" +} + +# func_win32_libid arg +# return the library type of file 'arg' +# +# Need a lot of goo to handle *both* DLLs and import libs +# Has to be a shell function in order to 'eat' the argument +# that is supplied when $file_magic_command is called. +# Despite the name, also deal with 64 bit binaries. +func_win32_libid () +{ + $debug_cmd + + win32_libid_type=unknown + win32_fileres=`file -L $1 2>/dev/null` + case $win32_fileres in + *ar\ archive\ import\ library*) # definitely import + win32_libid_type="x86 archive import" + ;; + *ar\ archive*) # could be an import, or static + # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. + if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | + $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then + case $nm_interface in + "MS dumpbin") + if func_cygming_ms_implib_p "$1" || + func_cygming_gnu_implib_p "$1" + then + win32_nmres=import + else + win32_nmres= + fi + ;; + *) + func_to_tool_file "$1" func_convert_file_msys_to_w32 + win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | + $SED -n -e ' + 1,100{ + / I /{ + s|.*|import| + p + q + } + }'` + ;; + esac + case $win32_nmres in + import*) win32_libid_type="x86 archive import";; + *) win32_libid_type="x86 archive static";; + esac + fi + ;; + *DLL*) + win32_libid_type="x86 DLL" + ;; + *executable*) # but shell scripts are "executable" too... + case $win32_fileres in + *MS\ Windows\ PE\ Intel*) + win32_libid_type="x86 DLL" + ;; + esac + ;; + esac + $ECHO "$win32_libid_type" +} + +# func_cygming_dll_for_implib ARG +# +# Platform-specific function to extract the +# name of the DLL associated with the specified +# import library ARG. +# Invoked by eval'ing the libtool variable +# $sharedlib_from_linklib_cmd +# Result is available in the variable +# $sharedlib_from_linklib_result +func_cygming_dll_for_implib () +{ + $debug_cmd + + sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` +} + +# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs +# +# The is the core of a fallback implementation of a +# platform-specific function to extract the name of the +# DLL associated with the specified import library LIBNAME. +# +# SECTION_NAME is either .idata$6 or .idata$7, depending +# on the platform and compiler that created the implib. +# +# Echos the name of the DLL associated with the +# specified import library. +func_cygming_dll_for_implib_fallback_core () +{ + $debug_cmd + + match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` + $OBJDUMP -s --section "$1" "$2" 2>/dev/null | + $SED '/^Contents of section '"$match_literal"':/{ + # Place marker at beginning of archive member dllname section + s/.*/====MARK====/ + p + d + } + # These lines can sometimes be longer than 43 characters, but + # are always uninteresting + /:[ ]*file format pe[i]\{,1\}-/d + /^In archive [^:]*:/d + # Ensure marker is printed + /^====MARK====/p + # Remove all lines with less than 43 characters + /^.\{43\}/!d + # From remaining lines, remove first 43 characters + s/^.\{43\}//' | + $SED -n ' + # Join marker and all lines until next marker into a single line + /^====MARK====/ b para + H + $ b para + b + :para + x + s/\n//g + # Remove the marker + s/^====MARK====// + # Remove trailing dots and whitespace + s/[\. \t]*$// + # Print + /./p' | + # we now have a list, one entry per line, of the stringified + # contents of the appropriate section of all members of the + # archive that possess that section. Heuristic: eliminate + # all those that have a first or second character that is + # a '.' (that is, objdump's representation of an unprintable + # character.) This should work for all archives with less than + # 0x302f exports -- but will fail for DLLs whose name actually + # begins with a literal '.' or a single character followed by + # a '.'. + # + # Of those that remain, print the first one. + $SED -e '/^\./d;/^.\./d;q' +} + +# func_cygming_dll_for_implib_fallback ARG +# Platform-specific function to extract the +# name of the DLL associated with the specified +# import library ARG. +# +# This fallback implementation is for use when $DLLTOOL +# does not support the --identify-strict option. +# Invoked by eval'ing the libtool variable +# $sharedlib_from_linklib_cmd +# Result is available in the variable +# $sharedlib_from_linklib_result +func_cygming_dll_for_implib_fallback () +{ + $debug_cmd + + if func_cygming_gnu_implib_p "$1"; then + # binutils import library + sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` + elif func_cygming_ms_implib_p "$1"; then + # ms-generated import library + sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` + else + # unknown + sharedlib_from_linklib_result= + fi +} + + +# func_extract_an_archive dir oldlib +func_extract_an_archive () +{ + $debug_cmd + + f_ex_an_ar_dir=$1; shift + f_ex_an_ar_oldlib=$1 + if test yes = "$lock_old_archive_extraction"; then + lockfile=$f_ex_an_ar_oldlib.lock + until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do + func_echo "Waiting for $lockfile to be removed" + sleep 2 + done + fi + func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ + 'stat=$?; rm -f "$lockfile"; exit $stat' + if test yes = "$lock_old_archive_extraction"; then + $opt_dry_run || rm -f "$lockfile" + fi + if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then + : + else + func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" + fi +} + + +# func_extract_archives gentop oldlib ... +func_extract_archives () +{ + $debug_cmd + + my_gentop=$1; shift + my_oldlibs=${1+"$@"} + my_oldobjs= + my_xlib= + my_xabs= + my_xdir= + + for my_xlib in $my_oldlibs; do + # Extract the objects. + case $my_xlib in + [\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;; + *) my_xabs=`pwd`"/$my_xlib" ;; + esac + func_basename "$my_xlib" + my_xlib=$func_basename_result + my_xlib_u=$my_xlib + while :; do + case " $extracted_archives " in + *" $my_xlib_u "*) + func_arith $extracted_serial + 1 + extracted_serial=$func_arith_result + my_xlib_u=lt$extracted_serial-$my_xlib ;; + *) break ;; + esac + done + extracted_archives="$extracted_archives $my_xlib_u" + my_xdir=$my_gentop/$my_xlib_u + + func_mkdir_p "$my_xdir" + + case $host in + *-darwin*) + func_verbose "Extracting $my_xabs" + # Do not bother doing anything if just a dry run + $opt_dry_run || { + darwin_orig_dir=`pwd` + cd $my_xdir || exit $? + darwin_archive=$my_xabs + darwin_curdir=`pwd` + func_basename "$darwin_archive" + darwin_base_archive=$func_basename_result + darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` + if test -n "$darwin_arches"; then + darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` + darwin_arch= + func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" + for darwin_arch in $darwin_arches; do + func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch" + $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive" + cd "unfat-$$/$darwin_base_archive-$darwin_arch" + func_extract_an_archive "`pwd`" "$darwin_base_archive" + cd "$darwin_curdir" + $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" + done # $darwin_arches + ## Okay now we've a bunch of thin objects, gotta fatten them up :) + darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u` + darwin_file= + darwin_files= + for darwin_file in $darwin_filelist; do + darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` + $LIPO -create -output "$darwin_file" $darwin_files + done # $darwin_filelist + $RM -rf unfat-$$ + cd "$darwin_orig_dir" + else + cd $darwin_orig_dir + func_extract_an_archive "$my_xdir" "$my_xabs" + fi # $darwin_arches + } # !$opt_dry_run + ;; + *) + func_extract_an_archive "$my_xdir" "$my_xabs" + ;; + esac + my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` + done + + func_extract_archives_result=$my_oldobjs +} + + +# func_emit_wrapper [arg=no] +# +# Emit a libtool wrapper script on stdout. +# Don't directly open a file because we may want to +# incorporate the script contents within a cygwin/mingw +# wrapper executable. Must ONLY be called from within +# func_mode_link because it depends on a number of variables +# set therein. +# +# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR +# variable will take. If 'yes', then the emitted script +# will assume that the directory where it is stored is +# the $objdir directory. This is a cygwin/mingw-specific +# behavior. +func_emit_wrapper () +{ + func_emit_wrapper_arg1=${1-no} + + $ECHO "\ +#! $SHELL + +# $output - temporary wrapper script for $objdir/$outputname +# Generated by $PROGRAM (GNU $PACKAGE) $VERSION +# +# The $output program cannot be directly executed until all the libtool +# libraries that it depends on are installed. +# +# This wrapper script should never be moved out of the build directory. +# If it is, it will not operate correctly. + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='$sed_quote_subst' + +# Be Bourne compatible +if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +relink_command=\"$relink_command\" + +# This environment variable determines our operation mode. +if test \"\$libtool_install_magic\" = \"$magic\"; then + # install mode needs the following variables: + generated_by_libtool_version='$macro_version' + notinst_deplibs='$notinst_deplibs' +else + # When we are sourced in execute mode, \$file and \$ECHO are already set. + if test \"\$libtool_execute_magic\" != \"$magic\"; then + file=\"\$0\"" + + qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` + $ECHO "\ + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$1 +_LTECHO_EOF' +} + ECHO=\"$qECHO\" + fi + +# Very basic option parsing. These options are (a) specific to +# the libtool wrapper, (b) are identical between the wrapper +# /script/ and the wrapper /executable/ that is used only on +# windows platforms, and (c) all begin with the string "--lt-" +# (application programs are unlikely to have options that match +# this pattern). +# +# There are only two supported options: --lt-debug and +# --lt-dump-script. There is, deliberately, no --lt-help. +# +# The first argument to this parsing function should be the +# script's $0 value, followed by "$@". +lt_option_debug= +func_parse_lt_options () +{ + lt_script_arg0=\$0 + shift + for lt_opt + do + case \"\$lt_opt\" in + --lt-debug) lt_option_debug=1 ;; + --lt-dump-script) + lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` + test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. + lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` + cat \"\$lt_dump_D/\$lt_dump_F\" + exit 0 + ;; + --lt-*) + \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 + exit 1 + ;; + esac + done + + # Print the debug banner immediately: + if test -n \"\$lt_option_debug\"; then + echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2 + fi +} + +# Used when --lt-debug. Prints its arguments to stdout +# (redirection is the responsibility of the caller) +func_lt_dump_args () +{ + lt_dump_args_N=1; + for lt_arg + do + \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\" + lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` + done +} + +# Core function for launching the target application +func_exec_program_core () +{ +" + case $host in + # Backslashes separate directories on plain windows + *-*-mingw | *-*-os2* | *-cegcc*) + $ECHO "\ + if test -n \"\$lt_option_debug\"; then + \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2 + func_lt_dump_args \${1+\"\$@\"} 1>&2 + fi + exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} +" + ;; + + *) + $ECHO "\ + if test -n \"\$lt_option_debug\"; then + \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2 + func_lt_dump_args \${1+\"\$@\"} 1>&2 + fi + exec \"\$progdir/\$program\" \${1+\"\$@\"} +" + ;; + esac + $ECHO "\ + \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 + exit 1 +} + +# A function to encapsulate launching the target application +# Strips options in the --lt-* namespace from \$@ and +# launches target application with the remaining arguments. +func_exec_program () +{ + case \" \$* \" in + *\\ --lt-*) + for lt_wr_arg + do + case \$lt_wr_arg in + --lt-*) ;; + *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; + esac + shift + done ;; + esac + func_exec_program_core \${1+\"\$@\"} +} + + # Parse options + func_parse_lt_options \"\$0\" \${1+\"\$@\"} + + # Find the directory that this script lives in. + thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` + test \"x\$thisdir\" = \"x\$file\" && thisdir=. + + # Follow symbolic links until we get to the real thisdir. + file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` + while test -n \"\$file\"; do + destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` + + # If there was a directory component, then change thisdir. + if test \"x\$destdir\" != \"x\$file\"; then + case \"\$destdir\" in + [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; + *) thisdir=\"\$thisdir/\$destdir\" ;; + esac + fi + + file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` + file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` + done + + # Usually 'no', except on cygwin/mingw when embedded into + # the cwrapper. + WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 + if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then + # special case for '.' + if test \"\$thisdir\" = \".\"; then + thisdir=\`pwd\` + fi + # remove .libs from thisdir + case \"\$thisdir\" in + *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; + $objdir ) thisdir=. ;; + esac + fi + + # Try to get the absolute directory name. + absdir=\`cd \"\$thisdir\" && pwd\` + test -n \"\$absdir\" && thisdir=\"\$absdir\" +" + + if test yes = "$fast_install"; then + $ECHO "\ + program=lt-'$outputname'$exeext + progdir=\"\$thisdir/$objdir\" + + if test ! -f \"\$progdir/\$program\" || + { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\ + test \"X\$file\" != \"X\$progdir/\$program\"; }; then + + file=\"\$\$-\$program\" + + if test ! -d \"\$progdir\"; then + $MKDIR \"\$progdir\" + else + $RM \"\$progdir/\$file\" + fi" + + $ECHO "\ + + # relink executable if necessary + if test -n \"\$relink_command\"; then + if relink_command_output=\`eval \$relink_command 2>&1\`; then : + else + \$ECHO \"\$relink_command_output\" >&2 + $RM \"\$progdir/\$file\" + exit 1 + fi + fi + + $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || + { $RM \"\$progdir/\$program\"; + $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } + $RM \"\$progdir/\$file\" + fi" + else + $ECHO "\ + program='$outputname' + progdir=\"\$thisdir/$objdir\" +" + fi + + $ECHO "\ + + if test -f \"\$progdir/\$program\"; then" + + # fixup the dll searchpath if we need to. + # + # Fix the DLL searchpath if we need to. Do this before prepending + # to shlibpath, because on Windows, both are PATH and uninstalled + # libraries must come first. + if test -n "$dllsearchpath"; then + $ECHO "\ + # Add the dll search path components to the executable PATH + PATH=$dllsearchpath:\$PATH +" + fi + + # Export our shlibpath_var if we have one. + if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then + $ECHO "\ + # Add our own library path to $shlibpath_var + $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" + + # Some systems cannot cope with colon-terminated $shlibpath_var + # The second colon is a workaround for a bug in BeOS R4 sed + $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` + + export $shlibpath_var +" + fi + + $ECHO "\ + if test \"\$libtool_execute_magic\" != \"$magic\"; then + # Run the actual program with our arguments. + func_exec_program \${1+\"\$@\"} + fi + else + # The program doesn't exist. + \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2 + \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 + \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 + exit 1 + fi +fi\ +" +} + + +# func_emit_cwrapperexe_src +# emit the source code for a wrapper executable on stdout +# Must ONLY be called from within func_mode_link because +# it depends on a number of variable set therein. +func_emit_cwrapperexe_src () +{ + cat < +#include +#ifdef _MSC_VER +# include +# include +# include +#else +# include +# include +# ifdef __CYGWIN__ +# include +# endif +#endif +#include +#include +#include +#include +#include +#include +#include +#include + +#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) + +/* declarations of non-ANSI functions */ +#if defined __MINGW32__ +# ifdef __STRICT_ANSI__ +int _putenv (const char *); +# endif +#elif defined __CYGWIN__ +# ifdef __STRICT_ANSI__ +char *realpath (const char *, char *); +int putenv (char *); +int setenv (const char *, const char *, int); +# endif +/* #elif defined other_platform || defined ... */ +#endif + +/* portability defines, excluding path handling macros */ +#if defined _MSC_VER +# define setmode _setmode +# define stat _stat +# define chmod _chmod +# define getcwd _getcwd +# define putenv _putenv +# define S_IXUSR _S_IEXEC +#elif defined __MINGW32__ +# define setmode _setmode +# define stat _stat +# define chmod _chmod +# define getcwd _getcwd +# define putenv _putenv +#elif defined __CYGWIN__ +# define HAVE_SETENV +# define FOPEN_WB "wb" +/* #elif defined other platforms ... */ +#endif + +#if defined PATH_MAX +# define LT_PATHMAX PATH_MAX +#elif defined MAXPATHLEN +# define LT_PATHMAX MAXPATHLEN +#else +# define LT_PATHMAX 1024 +#endif + +#ifndef S_IXOTH +# define S_IXOTH 0 +#endif +#ifndef S_IXGRP +# define S_IXGRP 0 +#endif + +/* path handling portability macros */ +#ifndef DIR_SEPARATOR +# define DIR_SEPARATOR '/' +# define PATH_SEPARATOR ':' +#endif + +#if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \ + defined __OS2__ +# define HAVE_DOS_BASED_FILE_SYSTEM +# define FOPEN_WB "wb" +# ifndef DIR_SEPARATOR_2 +# define DIR_SEPARATOR_2 '\\' +# endif +# ifndef PATH_SEPARATOR_2 +# define PATH_SEPARATOR_2 ';' +# endif +#endif + +#ifndef DIR_SEPARATOR_2 +# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) +#else /* DIR_SEPARATOR_2 */ +# define IS_DIR_SEPARATOR(ch) \ + (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) +#endif /* DIR_SEPARATOR_2 */ + +#ifndef PATH_SEPARATOR_2 +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) +#else /* PATH_SEPARATOR_2 */ +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) +#endif /* PATH_SEPARATOR_2 */ + +#ifndef FOPEN_WB +# define FOPEN_WB "w" +#endif +#ifndef _O_BINARY +# define _O_BINARY 0 +#endif + +#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) +#define XFREE(stale) do { \ + if (stale) { free (stale); stale = 0; } \ +} while (0) + +#if defined LT_DEBUGWRAPPER +static int lt_debug = 1; +#else +static int lt_debug = 0; +#endif + +const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ + +void *xmalloc (size_t num); +char *xstrdup (const char *string); +const char *base_name (const char *name); +char *find_executable (const char *wrapper); +char *chase_symlinks (const char *pathspec); +int make_executable (const char *path); +int check_executable (const char *path); +char *strendzap (char *str, const char *pat); +void lt_debugprintf (const char *file, int line, const char *fmt, ...); +void lt_fatal (const char *file, int line, const char *message, ...); +static const char *nonnull (const char *s); +static const char *nonempty (const char *s); +void lt_setenv (const char *name, const char *value); +char *lt_extend_str (const char *orig_value, const char *add, int to_end); +void lt_update_exe_path (const char *name, const char *value); +void lt_update_lib_path (const char *name, const char *value); +char **prepare_spawn (char **argv); +void lt_dump_script (FILE *f); +EOF + + cat <= 0) + && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) + return 1; + else + return 0; +} + +int +make_executable (const char *path) +{ + int rval = 0; + struct stat st; + + lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", + nonempty (path)); + if ((!path) || (!*path)) + return 0; + + if (stat (path, &st) >= 0) + { + rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); + } + return rval; +} + +/* Searches for the full path of the wrapper. Returns + newly allocated full path name if found, NULL otherwise + Does not chase symlinks, even on platforms that support them. +*/ +char * +find_executable (const char *wrapper) +{ + int has_slash = 0; + const char *p; + const char *p_next; + /* static buffer for getcwd */ + char tmp[LT_PATHMAX + 1]; + size_t tmp_len; + char *concat_name; + + lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", + nonempty (wrapper)); + + if ((wrapper == NULL) || (*wrapper == '\0')) + return NULL; + + /* Absolute path? */ +#if defined HAVE_DOS_BASED_FILE_SYSTEM + if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') + { + concat_name = xstrdup (wrapper); + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } + else + { +#endif + if (IS_DIR_SEPARATOR (wrapper[0])) + { + concat_name = xstrdup (wrapper); + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } +#if defined HAVE_DOS_BASED_FILE_SYSTEM + } +#endif + + for (p = wrapper; *p; p++) + if (*p == '/') + { + has_slash = 1; + break; + } + if (!has_slash) + { + /* no slashes; search PATH */ + const char *path = getenv ("PATH"); + if (path != NULL) + { + for (p = path; *p; p = p_next) + { + const char *q; + size_t p_len; + for (q = p; *q; q++) + if (IS_PATH_SEPARATOR (*q)) + break; + p_len = (size_t) (q - p); + p_next = (*q == '\0' ? q : q + 1); + if (p_len == 0) + { + /* empty path: current directory */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", + nonnull (strerror (errno))); + tmp_len = strlen (tmp); + concat_name = + XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + } + else + { + concat_name = + XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, p, p_len); + concat_name[p_len] = '/'; + strcpy (concat_name + p_len + 1, wrapper); + } + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } + } + /* not found in PATH; assume curdir */ + } + /* Relative path | not found in path: prepend cwd */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", + nonnull (strerror (errno))); + tmp_len = strlen (tmp); + concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + return NULL; +} + +char * +chase_symlinks (const char *pathspec) +{ +#ifndef S_ISLNK + return xstrdup (pathspec); +#else + char buf[LT_PATHMAX]; + struct stat s; + char *tmp_pathspec = xstrdup (pathspec); + char *p; + int has_symlinks = 0; + while (strlen (tmp_pathspec) && !has_symlinks) + { + lt_debugprintf (__FILE__, __LINE__, + "checking path component for symlinks: %s\n", + tmp_pathspec); + if (lstat (tmp_pathspec, &s) == 0) + { + if (S_ISLNK (s.st_mode) != 0) + { + has_symlinks = 1; + break; + } + + /* search backwards for last DIR_SEPARATOR */ + p = tmp_pathspec + strlen (tmp_pathspec) - 1; + while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) + p--; + if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) + { + /* no more DIR_SEPARATORS left */ + break; + } + *p = '\0'; + } + else + { + lt_fatal (__FILE__, __LINE__, + "error accessing file \"%s\": %s", + tmp_pathspec, nonnull (strerror (errno))); + } + } + XFREE (tmp_pathspec); + + if (!has_symlinks) + { + return xstrdup (pathspec); + } + + tmp_pathspec = realpath (pathspec, buf); + if (tmp_pathspec == 0) + { + lt_fatal (__FILE__, __LINE__, + "could not follow symlinks for %s", pathspec); + } + return xstrdup (tmp_pathspec); +#endif +} + +char * +strendzap (char *str, const char *pat) +{ + size_t len, patlen; + + assert (str != NULL); + assert (pat != NULL); + + len = strlen (str); + patlen = strlen (pat); + + if (patlen <= len) + { + str += len - patlen; + if (STREQ (str, pat)) + *str = '\0'; + } + return str; +} + +void +lt_debugprintf (const char *file, int line, const char *fmt, ...) +{ + va_list args; + if (lt_debug) + { + (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); + va_start (args, fmt); + (void) vfprintf (stderr, fmt, args); + va_end (args); + } +} + +static void +lt_error_core (int exit_status, const char *file, + int line, const char *mode, + const char *message, va_list ap) +{ + fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); + vfprintf (stderr, message, ap); + fprintf (stderr, ".\n"); + + if (exit_status >= 0) + exit (exit_status); +} + +void +lt_fatal (const char *file, int line, const char *message, ...) +{ + va_list ap; + va_start (ap, message); + lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); + va_end (ap); +} + +static const char * +nonnull (const char *s) +{ + return s ? s : "(null)"; +} + +static const char * +nonempty (const char *s) +{ + return (s && !*s) ? "(empty)" : nonnull (s); +} + +void +lt_setenv (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_setenv) setting '%s' to '%s'\n", + nonnull (name), nonnull (value)); + { +#ifdef HAVE_SETENV + /* always make a copy, for consistency with !HAVE_SETENV */ + char *str = xstrdup (value); + setenv (name, str, 1); +#else + size_t len = strlen (name) + 1 + strlen (value) + 1; + char *str = XMALLOC (char, len); + sprintf (str, "%s=%s", name, value); + if (putenv (str) != EXIT_SUCCESS) + { + XFREE (str); + } +#endif + } +} + +char * +lt_extend_str (const char *orig_value, const char *add, int to_end) +{ + char *new_value; + if (orig_value && *orig_value) + { + size_t orig_value_len = strlen (orig_value); + size_t add_len = strlen (add); + new_value = XMALLOC (char, add_len + orig_value_len + 1); + if (to_end) + { + strcpy (new_value, orig_value); + strcpy (new_value + orig_value_len, add); + } + else + { + strcpy (new_value, add); + strcpy (new_value + add_len, orig_value); + } + } + else + { + new_value = xstrdup (add); + } + return new_value; +} + +void +lt_update_exe_path (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", + nonnull (name), nonnull (value)); + + if (name && *name && value && *value) + { + char *new_value = lt_extend_str (getenv (name), value, 0); + /* some systems can't cope with a ':'-terminated path #' */ + size_t len = strlen (new_value); + while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1])) + { + new_value[--len] = '\0'; + } + lt_setenv (name, new_value); + XFREE (new_value); + } +} + +void +lt_update_lib_path (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", + nonnull (name), nonnull (value)); + + if (name && *name && value && *value) + { + char *new_value = lt_extend_str (getenv (name), value, 0); + lt_setenv (name, new_value); + XFREE (new_value); + } +} + +EOF + case $host_os in + mingw*) + cat <<"EOF" + +/* Prepares an argument vector before calling spawn(). + Note that spawn() does not by itself call the command interpreter + (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : + ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); + GetVersionEx(&v); + v.dwPlatformId == VER_PLATFORM_WIN32_NT; + }) ? "cmd.exe" : "command.com"). + Instead it simply concatenates the arguments, separated by ' ', and calls + CreateProcess(). We must quote the arguments since Win32 CreateProcess() + interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a + special way: + - Space and tab are interpreted as delimiters. They are not treated as + delimiters if they are surrounded by double quotes: "...". + - Unescaped double quotes are removed from the input. Their only effect is + that within double quotes, space and tab are treated like normal + characters. + - Backslashes not followed by double quotes are not special. + - But 2*n+1 backslashes followed by a double quote become + n backslashes followed by a double quote (n >= 0): + \" -> " + \\\" -> \" + \\\\\" -> \\" + */ +#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" +#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" +char ** +prepare_spawn (char **argv) +{ + size_t argc; + char **new_argv; + size_t i; + + /* Count number of arguments. */ + for (argc = 0; argv[argc] != NULL; argc++) + ; + + /* Allocate new argument vector. */ + new_argv = XMALLOC (char *, argc + 1); + + /* Put quoted arguments into the new argument vector. */ + for (i = 0; i < argc; i++) + { + const char *string = argv[i]; + + if (string[0] == '\0') + new_argv[i] = xstrdup ("\"\""); + else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) + { + int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); + size_t length; + unsigned int backslashes; + const char *s; + char *quoted_string; + char *p; + + length = 0; + backslashes = 0; + if (quote_around) + length++; + for (s = string; *s != '\0'; s++) + { + char c = *s; + if (c == '"') + length += backslashes + 1; + length++; + if (c == '\\') + backslashes++; + else + backslashes = 0; + } + if (quote_around) + length += backslashes + 1; + + quoted_string = XMALLOC (char, length + 1); + + p = quoted_string; + backslashes = 0; + if (quote_around) + *p++ = '"'; + for (s = string; *s != '\0'; s++) + { + char c = *s; + if (c == '"') + { + unsigned int j; + for (j = backslashes + 1; j > 0; j--) + *p++ = '\\'; + } + *p++ = c; + if (c == '\\') + backslashes++; + else + backslashes = 0; + } + if (quote_around) + { + unsigned int j; + for (j = backslashes; j > 0; j--) + *p++ = '\\'; + *p++ = '"'; + } + *p = '\0'; + + new_argv[i] = quoted_string; + } + else + new_argv[i] = (char *) string; + } + new_argv[argc] = NULL; + + return new_argv; +} +EOF + ;; + esac + + cat <<"EOF" +void lt_dump_script (FILE* f) +{ +EOF + func_emit_wrapper yes | + $SED -n -e ' +s/^\(.\{79\}\)\(..*\)/\1\ +\2/ +h +s/\([\\"]\)/\\\1/g +s/$/\\n/ +s/\([^\n]*\).*/ fputs ("\1", f);/p +g +D' + cat <<"EOF" +} +EOF +} +# end: func_emit_cwrapperexe_src + +# func_win32_import_lib_p ARG +# True if ARG is an import lib, as indicated by $file_magic_cmd +func_win32_import_lib_p () +{ + $debug_cmd + + case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in + *import*) : ;; + *) false ;; + esac +} + +# func_suncc_cstd_abi +# !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!! +# Several compiler flags select an ABI that is incompatible with the +# Cstd library. Avoid specifying it if any are in CXXFLAGS. +func_suncc_cstd_abi () +{ + $debug_cmd + + case " $compile_command " in + *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*) + suncc_use_cstd_abi=no + ;; + *) + suncc_use_cstd_abi=yes + ;; + esac +} + +# func_mode_link arg... +func_mode_link () +{ + $debug_cmd + + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + # It is impossible to link a dll without this setting, and + # we shouldn't force the makefile maintainer to figure out + # what system we are compiling for in order to pass an extra + # flag for every libtool invocation. + # allow_undefined=no + + # FIXME: Unfortunately, there are problems with the above when trying + # to make a dll that has undefined symbols, in which case not + # even a static library is built. For now, we need to specify + # -no-undefined on the libtool link line when we can be certain + # that all symbols are satisfied, otherwise we get a static library. + allow_undefined=yes + ;; + *) + allow_undefined=yes + ;; + esac + libtool_args=$nonopt + base_compile="$nonopt $@" + compile_command=$nonopt + finalize_command=$nonopt + + compile_rpath= + finalize_rpath= + compile_shlibpath= + finalize_shlibpath= + convenience= + old_convenience= + deplibs= + old_deplibs= + compiler_flags= + linker_flags= + dllsearchpath= + lib_search_path=`pwd` + inst_prefix_dir= + new_inherited_linker_flags= + + avoid_version=no + bindir= + dlfiles= + dlprefiles= + dlself=no + export_dynamic=no + export_symbols= + export_symbols_regex= + generated= + libobjs= + ltlibs= + module=no + no_install=no + objs= + os2dllname= + non_pic_objects= + precious_files_regex= + prefer_static_libs=no + preload=false + prev= + prevarg= + release= + rpath= + xrpath= + perm_rpath= + temp_rpath= + thread_safe=no + vinfo= + vinfo_number=no + weak_libs= + single_module=$wl-single_module + func_infer_tag $base_compile + + # We need to know -static, to get the right output filenames. + for arg + do + case $arg in + -shared) + test yes != "$build_libtool_libs" \ + && func_fatal_configuration "cannot build a shared library" + build_old_libs=no + break + ;; + -all-static | -static | -static-libtool-libs) + case $arg in + -all-static) + if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then + func_warning "complete static linking is impossible in this configuration" + fi + if test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + -static) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=built + ;; + -static-libtool-libs) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + esac + build_libtool_libs=no + build_old_libs=yes + break + ;; + esac + done + + # See if our shared archives depend on static archives. + test -n "$old_archive_from_new_cmds" && build_old_libs=yes + + # Go through the arguments, transforming them on the way. + while test "$#" -gt 0; do + arg=$1 + shift + func_quote_for_eval "$arg" + qarg=$func_quote_for_eval_unquoted_result + func_append libtool_args " $func_quote_for_eval_result" + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case $prev in + output) + func_append compile_command " @OUTPUT@" + func_append finalize_command " @OUTPUT@" + ;; + esac + + case $prev in + bindir) + bindir=$arg + prev= + continue + ;; + dlfiles|dlprefiles) + $preload || { + # Add the symbol object into the linking commands. + func_append compile_command " @SYMFILE@" + func_append finalize_command " @SYMFILE@" + preload=: + } + case $arg in + *.la | *.lo) ;; # We handle these cases below. + force) + if test no = "$dlself"; then + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + self) + if test dlprefiles = "$prev"; then + dlself=yes + elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then + dlself=yes + else + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + *) + if test dlfiles = "$prev"; then + func_append dlfiles " $arg" + else + func_append dlprefiles " $arg" + fi + prev= + continue + ;; + esac + ;; + expsyms) + export_symbols=$arg + test -f "$arg" \ + || func_fatal_error "symbol file '$arg' does not exist" + prev= + continue + ;; + expsyms_regex) + export_symbols_regex=$arg + prev= + continue + ;; + framework) + case $host in + *-*-darwin*) + case "$deplibs " in + *" $qarg.ltframework "*) ;; + *) func_append deplibs " $qarg.ltframework" # this is fixed later + ;; + esac + ;; + esac + prev= + continue + ;; + inst_prefix) + inst_prefix_dir=$arg + prev= + continue + ;; + mllvm) + # Clang does not use LLVM to link, so we can simply discard any + # '-mllvm $arg' options when doing the link step. + prev= + continue + ;; + objectlist) + if test -f "$arg"; then + save_arg=$arg + moreargs= + for fil in `cat "$save_arg"` + do +# func_append moreargs " $fil" + arg=$fil + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if func_lalib_unsafe_p "$arg"; then + pic_object= + non_pic_object= + + # Read the .lo file + func_source "$arg" + + if test -z "$pic_object" || + test -z "$non_pic_object" || + test none = "$pic_object" && + test none = "$non_pic_object"; then + func_fatal_error "cannot find name of object for '$arg'" + fi + + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir=$func_dirname_result + + if test none != "$pic_object"; then + # Prepend the subdirectory the object is found in. + pic_object=$xdir$pic_object + + if test dlfiles = "$prev"; then + if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then + func_append dlfiles " $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test dlprefiles = "$prev"; then + # Preload the old-style object. + func_append dlprefiles " $pic_object" + prev= + fi + + # A PIC object. + func_append libobjs " $pic_object" + arg=$pic_object + fi + + # Non-PIC object. + if test none != "$non_pic_object"; then + # Prepend the subdirectory the object is found in. + non_pic_object=$xdir$non_pic_object + + # A standard non-PIC object + func_append non_pic_objects " $non_pic_object" + if test -z "$pic_object" || test none = "$pic_object"; then + arg=$non_pic_object + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object=$pic_object + func_append non_pic_objects " $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if $opt_dry_run; then + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir=$func_dirname_result + + func_lo2o "$arg" + pic_object=$xdir$objdir/$func_lo2o_result + non_pic_object=$xdir$func_lo2o_result + func_append libobjs " $pic_object" + func_append non_pic_objects " $non_pic_object" + else + func_fatal_error "'$arg' is not a valid libtool object" + fi + fi + done + else + func_fatal_error "link input file '$arg' does not exist" + fi + arg=$save_arg + prev= + continue + ;; + os2dllname) + os2dllname=$arg + prev= + continue + ;; + precious_regex) + precious_files_regex=$arg + prev= + continue + ;; + release) + release=-$arg + prev= + continue + ;; + rpath | xrpath) + # We need an absolute path. + case $arg in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + func_fatal_error "only absolute run-paths are allowed" + ;; + esac + if test rpath = "$prev"; then + case "$rpath " in + *" $arg "*) ;; + *) func_append rpath " $arg" ;; + esac + else + case "$xrpath " in + *" $arg "*) ;; + *) func_append xrpath " $arg" ;; + esac + fi + prev= + continue + ;; + shrext) + shrext_cmds=$arg + prev= + continue + ;; + weak) + func_append weak_libs " $arg" + prev= + continue + ;; + xcclinker) + func_append linker_flags " $qarg" + func_append compiler_flags " $qarg" + prev= + func_append compile_command " $qarg" + func_append finalize_command " $qarg" + continue + ;; + xcompiler) + func_append compiler_flags " $qarg" + prev= + func_append compile_command " $qarg" + func_append finalize_command " $qarg" + continue + ;; + xlinker) + func_append linker_flags " $qarg" + func_append compiler_flags " $wl$qarg" + prev= + func_append compile_command " $wl$qarg" + func_append finalize_command " $wl$qarg" + continue + ;; + *) + eval "$prev=\"\$arg\"" + prev= + continue + ;; + esac + fi # test -n "$prev" + + prevarg=$arg + + case $arg in + -all-static) + if test -n "$link_static_flag"; then + # See comment for -static flag below, for more details. + func_append compile_command " $link_static_flag" + func_append finalize_command " $link_static_flag" + fi + continue + ;; + + -allow-undefined) + # FIXME: remove this flag sometime in the future. + func_fatal_error "'-allow-undefined' must not be used because it is the default" + ;; + + -avoid-version) + avoid_version=yes + continue + ;; + + -bindir) + prev=bindir + continue + ;; + + -dlopen) + prev=dlfiles + continue + ;; + + -dlpreopen) + prev=dlprefiles + continue + ;; + + -export-dynamic) + export_dynamic=yes + continue + ;; + + -export-symbols | -export-symbols-regex) + if test -n "$export_symbols" || test -n "$export_symbols_regex"; then + func_fatal_error "more than one -exported-symbols argument is not allowed" + fi + if test X-export-symbols = "X$arg"; then + prev=expsyms + else + prev=expsyms_regex + fi + continue + ;; + + -framework) + prev=framework + continue + ;; + + -inst-prefix-dir) + prev=inst_prefix + continue + ;; + + # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* + # so, if we see these flags be careful not to treat them like -L + -L[A-Z][A-Z]*:*) + case $with_gcc/$host in + no/*-*-irix* | /*-*-irix*) + func_append compile_command " $arg" + func_append finalize_command " $arg" + ;; + esac + continue + ;; + + -L*) + func_stripname "-L" '' "$arg" + if test -z "$func_stripname_result"; then + if test "$#" -gt 0; then + func_fatal_error "require no space between '-L' and '$1'" + else + func_fatal_error "need path for '-L' option" + fi + fi + func_resolve_sysroot "$func_stripname_result" + dir=$func_resolve_sysroot_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + absdir=`cd "$dir" && pwd` + test -z "$absdir" && \ + func_fatal_error "cannot determine absolute directory name of '$dir'" + dir=$absdir + ;; + esac + case "$deplibs " in + *" -L$dir "* | *" $arg "*) + # Will only happen for absolute or sysroot arguments + ;; + *) + # Preserve sysroot, but never include relative directories + case $dir in + [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; + *) func_append deplibs " -L$dir" ;; + esac + func_append lib_search_path " $dir" + ;; + esac + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$dir:"*) ;; + ::) dllsearchpath=$dir;; + *) func_append dllsearchpath ":$dir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + ::) dllsearchpath=$testbindir;; + *) func_append dllsearchpath ":$testbindir";; + esac + ;; + esac + continue + ;; + + -l*) + if test X-lc = "X$arg" || test X-lm = "X$arg"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) + # These systems don't actually have a C or math library (as such) + continue + ;; + *-*-os2*) + # These systems don't actually have a C library (as such) + test X-lc = "X$arg" && continue + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) + # Do not include libc due to us having libc/libc_r. + test X-lc = "X$arg" && continue + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C and math libraries are in the System framework + func_append deplibs " System.ltframework" + continue + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + test X-lc = "X$arg" && continue + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + test X-lc = "X$arg" && continue + ;; + esac + elif test X-lc_r = "X$arg"; then + case $host in + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) + # Do not include libc_r directly, use -pthread flag. + continue + ;; + esac + fi + func_append deplibs " $arg" + continue + ;; + + -mllvm) + prev=mllvm + continue + ;; + + -module) + module=yes + continue + ;; + + # Tru64 UNIX uses -model [arg] to determine the layout of C++ + # classes, name mangling, and exception handling. + # Darwin uses the -arch flag to determine output architecture. + -model|-arch|-isysroot|--sysroot) + func_append compiler_flags " $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + prev=xcompiler + continue + ;; + + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ + |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) + func_append compiler_flags " $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + case "$new_inherited_linker_flags " in + *" $arg "*) ;; + * ) func_append new_inherited_linker_flags " $arg" ;; + esac + continue + ;; + + -multi_module) + single_module=$wl-multi_module + continue + ;; + + -no-fast-install) + fast_install=no + continue + ;; + + -no-install) + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) + # The PATH hackery in wrapper scripts is required on Windows + # and Darwin in order for the loader to find any dlls it needs. + func_warning "'-no-install' is ignored for $host" + func_warning "assuming '-no-fast-install' instead" + fast_install=no + ;; + *) no_install=yes ;; + esac + continue + ;; + + -no-undefined) + allow_undefined=no + continue + ;; + + -objectlist) + prev=objectlist + continue + ;; + + -os2dllname) + prev=os2dllname + continue + ;; + + -o) prev=output ;; + + -precious-files-regex) + prev=precious_regex + continue + ;; + + -release) + prev=release + continue + ;; + + -rpath) + prev=rpath + continue + ;; + + -R) + prev=xrpath + continue + ;; + + -R*) + func_stripname '-R' '' "$arg" + dir=$func_stripname_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + =*) + func_stripname '=' '' "$dir" + dir=$lt_sysroot$func_stripname_result + ;; + *) + func_fatal_error "only absolute run-paths are allowed" + ;; + esac + case "$xrpath " in + *" $dir "*) ;; + *) func_append xrpath " $dir" ;; + esac + continue + ;; + + -shared) + # The effects of -shared are defined in a previous loop. + continue + ;; + + -shrext) + prev=shrext + continue + ;; + + -static | -static-libtool-libs) + # The effects of -static are defined in a previous loop. + # We used to do the same as -all-static on platforms that + # didn't have a PIC flag, but the assumption that the effects + # would be equivalent was wrong. It would break on at least + # Digital Unix and AIX. + continue + ;; + + -thread-safe) + thread_safe=yes + continue + ;; + + -version-info) + prev=vinfo + continue + ;; + + -version-number) + prev=vinfo + vinfo_number=yes + continue + ;; + + -weak) + prev=weak + continue + ;; + + -Wc,*) + func_stripname '-Wc,' '' "$arg" + args=$func_stripname_result + arg= + save_ifs=$IFS; IFS=, + for flag in $args; do + IFS=$save_ifs + func_quote_for_eval "$flag" + func_append arg " $func_quote_for_eval_result" + func_append compiler_flags " $func_quote_for_eval_result" + done + IFS=$save_ifs + func_stripname ' ' '' "$arg" + arg=$func_stripname_result + ;; + + -Wl,*) + func_stripname '-Wl,' '' "$arg" + args=$func_stripname_result + arg= + save_ifs=$IFS; IFS=, + for flag in $args; do + IFS=$save_ifs + func_quote_for_eval "$flag" + func_append arg " $wl$func_quote_for_eval_result" + func_append compiler_flags " $wl$func_quote_for_eval_result" + func_append linker_flags " $func_quote_for_eval_result" + done + IFS=$save_ifs + func_stripname ' ' '' "$arg" + arg=$func_stripname_result + ;; + + -Xcompiler) + prev=xcompiler + continue + ;; + + -Xlinker) + prev=xlinker + continue + ;; + + -XCClinker) + prev=xcclinker + continue + ;; + + # -msg_* for osf cc + -msg_*) + func_quote_for_eval "$arg" + arg=$func_quote_for_eval_result + ;; + + # Flags to be passed through unchanged, with rationale: + # -64, -mips[0-9] enable 64-bit mode for the SGI compiler + # -r[0-9][0-9]* specify processor for the SGI compiler + # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler + # +DA*, +DD* enable 64-bit mode for the HP compiler + # -q* compiler args for the IBM compiler + # -m*, -t[45]*, -txscale* architecture-specific flags for GCC + # -F/path path to uninstalled frameworks, gcc on darwin + # -p, -pg, --coverage, -fprofile-* profiling flags for GCC + # -fstack-protector* stack protector flags for GCC + # @file GCC response files + # -tp=* Portland pgcc target processor selection + # --sysroot=* for sysroot support + # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization + # -stdlib=* select c++ std lib with clang + -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ + -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ + -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*) + func_quote_for_eval "$arg" + arg=$func_quote_for_eval_result + func_append compile_command " $arg" + func_append finalize_command " $arg" + func_append compiler_flags " $arg" + continue + ;; + + -Z*) + if test os2 = "`expr $host : '.*\(os2\)'`"; then + # OS/2 uses -Zxxx to specify OS/2-specific options + compiler_flags="$compiler_flags $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + case $arg in + -Zlinker | -Zstack) + prev=xcompiler + ;; + esac + continue + else + # Otherwise treat like 'Some other compiler flag' below + func_quote_for_eval "$arg" + arg=$func_quote_for_eval_result + fi + ;; + + # Some other compiler flag. + -* | +*) + func_quote_for_eval "$arg" + arg=$func_quote_for_eval_result + ;; + + *.$objext) + # A standard object. + func_append objs " $arg" + ;; + + *.lo) + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if func_lalib_unsafe_p "$arg"; then + pic_object= + non_pic_object= + + # Read the .lo file + func_source "$arg" + + if test -z "$pic_object" || + test -z "$non_pic_object" || + test none = "$pic_object" && + test none = "$non_pic_object"; then + func_fatal_error "cannot find name of object for '$arg'" + fi + + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir=$func_dirname_result + + test none = "$pic_object" || { + # Prepend the subdirectory the object is found in. + pic_object=$xdir$pic_object + + if test dlfiles = "$prev"; then + if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then + func_append dlfiles " $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test dlprefiles = "$prev"; then + # Preload the old-style object. + func_append dlprefiles " $pic_object" + prev= + fi + + # A PIC object. + func_append libobjs " $pic_object" + arg=$pic_object + } + + # Non-PIC object. + if test none != "$non_pic_object"; then + # Prepend the subdirectory the object is found in. + non_pic_object=$xdir$non_pic_object + + # A standard non-PIC object + func_append non_pic_objects " $non_pic_object" + if test -z "$pic_object" || test none = "$pic_object"; then + arg=$non_pic_object + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object=$pic_object + func_append non_pic_objects " $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if $opt_dry_run; then + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir=$func_dirname_result + + func_lo2o "$arg" + pic_object=$xdir$objdir/$func_lo2o_result + non_pic_object=$xdir$func_lo2o_result + func_append libobjs " $pic_object" + func_append non_pic_objects " $non_pic_object" + else + func_fatal_error "'$arg' is not a valid libtool object" + fi + fi + ;; + + *.$libext) + # An archive. + func_append deplibs " $arg" + func_append old_deplibs " $arg" + continue + ;; + + *.la) + # A libtool-controlled library. + + func_resolve_sysroot "$arg" + if test dlfiles = "$prev"; then + # This library was specified with -dlopen. + func_append dlfiles " $func_resolve_sysroot_result" + prev= + elif test dlprefiles = "$prev"; then + # The library was specified with -dlpreopen. + func_append dlprefiles " $func_resolve_sysroot_result" + prev= + else + func_append deplibs " $func_resolve_sysroot_result" + fi + continue + ;; + + # Some other compiler argument. + *) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + func_quote_for_eval "$arg" + arg=$func_quote_for_eval_result + ;; + esac # arg + + # Now actually substitute the argument into the commands. + if test -n "$arg"; then + func_append compile_command " $arg" + func_append finalize_command " $arg" + fi + done # argument parsing loop + + test -n "$prev" && \ + func_fatal_help "the '$prevarg' option requires an argument" + + if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then + eval arg=\"$export_dynamic_flag_spec\" + func_append compile_command " $arg" + func_append finalize_command " $arg" + fi + + oldlibs= + # calculate the name of the file, without its directory + func_basename "$output" + outputname=$func_basename_result + libobjs_save=$libobjs + + if test -n "$shlibpath_var"; then + # get the directories listed in $shlibpath_var + eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\` + else + shlib_search_path= + fi + eval sys_lib_search_path=\"$sys_lib_search_path_spec\" + eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" + + # Definition is injected by LT_CONFIG during libtool generation. + func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH" + + func_dirname "$output" "/" "" + output_objdir=$func_dirname_result$objdir + func_to_tool_file "$output_objdir/" + tool_output_objdir=$func_to_tool_file_result + # Create the object directory. + func_mkdir_p "$output_objdir" + + # Determine the type of output + case $output in + "") + func_fatal_help "you must specify an output file" + ;; + *.$libext) linkmode=oldlib ;; + *.lo | *.$objext) linkmode=obj ;; + *.la) linkmode=lib ;; + *) linkmode=prog ;; # Anything else should be a program. + esac + + specialdeplibs= + + libs= + # Find all interdependent deplibs by searching for libraries + # that are linked more than once (e.g. -la -lb -la) + for deplib in $deplibs; do + if $opt_preserve_dup_deps; then + case "$libs " in + *" $deplib "*) func_append specialdeplibs " $deplib" ;; + esac + fi + func_append libs " $deplib" + done + + if test lib = "$linkmode"; then + libs="$predeps $libs $compiler_lib_search_path $postdeps" + + # Compute libraries that are listed more than once in $predeps + # $postdeps and mark them as special (i.e., whose duplicates are + # not to be eliminated). + pre_post_deps= + if $opt_duplicate_compiler_generated_deps; then + for pre_post_dep in $predeps $postdeps; do + case "$pre_post_deps " in + *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; + esac + func_append pre_post_deps " $pre_post_dep" + done + fi + pre_post_deps= + fi + + deplibs= + newdependency_libs= + newlib_search_path= + need_relink=no # whether we're linking any uninstalled libtool libraries + notinst_deplibs= # not-installed libtool libraries + notinst_path= # paths that contain not-installed libtool libraries + + case $linkmode in + lib) + passes="conv dlpreopen link" + for file in $dlfiles $dlprefiles; do + case $file in + *.la) ;; + *) + func_fatal_help "libraries can '-dlopen' only libtool libraries: $file" + ;; + esac + done + ;; + prog) + compile_deplibs= + finalize_deplibs= + alldeplibs=false + newdlfiles= + newdlprefiles= + passes="conv scan dlopen dlpreopen link" + ;; + *) passes="conv" + ;; + esac + + for pass in $passes; do + # The preopen pass in lib mode reverses $deplibs; put it back here + # so that -L comes before libs that need it for instance... + if test lib,link = "$linkmode,$pass"; then + ## FIXME: Find the place where the list is rebuilt in the wrong + ## order, and fix it there properly + tmp_deplibs= + for deplib in $deplibs; do + tmp_deplibs="$deplib $tmp_deplibs" + done + deplibs=$tmp_deplibs + fi + + if test lib,link = "$linkmode,$pass" || + test prog,scan = "$linkmode,$pass"; then + libs=$deplibs + deplibs= + fi + if test prog = "$linkmode"; then + case $pass in + dlopen) libs=$dlfiles ;; + dlpreopen) libs=$dlprefiles ;; + link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; + esac + fi + if test lib,dlpreopen = "$linkmode,$pass"; then + # Collect and forward deplibs of preopened libtool libs + for lib in $dlprefiles; do + # Ignore non-libtool-libs + dependency_libs= + func_resolve_sysroot "$lib" + case $lib in + *.la) func_source "$func_resolve_sysroot_result" ;; + esac + + # Collect preopened libtool deplibs, except any this library + # has declared as weak libs + for deplib in $dependency_libs; do + func_basename "$deplib" + deplib_base=$func_basename_result + case " $weak_libs " in + *" $deplib_base "*) ;; + *) func_append deplibs " $deplib" ;; + esac + done + done + libs=$dlprefiles + fi + if test dlopen = "$pass"; then + # Collect dlpreopened libraries + save_deplibs=$deplibs + deplibs= + fi + + for deplib in $libs; do + lib= + found=false + case $deplib in + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ + |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) + if test prog,link = "$linkmode,$pass"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + func_append compiler_flags " $deplib" + if test lib = "$linkmode"; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) func_append new_inherited_linker_flags " $deplib" ;; + esac + fi + fi + continue + ;; + -l*) + if test lib != "$linkmode" && test prog != "$linkmode"; then + func_warning "'-l' is ignored for archives/objects" + continue + fi + func_stripname '-l' '' "$deplib" + name=$func_stripname_result + if test lib = "$linkmode"; then + searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" + else + searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" + fi + for searchdir in $searchdirs; do + for search_ext in .la $std_shrext .so .a; do + # Search the libtool library + lib=$searchdir/lib$name$search_ext + if test -f "$lib"; then + if test .la = "$search_ext"; then + found=: + else + found=false + fi + break 2 + fi + done + done + if $found; then + # deplib is a libtool library + # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, + # We need to do some special things here, and not later. + if test yes = "$allow_libtool_libs_with_static_runtimes"; then + case " $predeps $postdeps " in + *" $deplib "*) + if func_lalib_p "$lib"; then + library_names= + old_library= + func_source "$lib" + for l in $old_library $library_names; do + ll=$l + done + if test "X$ll" = "X$old_library"; then # only static version available + found=false + func_dirname "$lib" "" "." + ladir=$func_dirname_result + lib=$ladir/$old_library + if test prog,link = "$linkmode,$pass"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" + fi + continue + fi + fi + ;; + *) ;; + esac + fi + else + # deplib doesn't seem to be a libtool library + if test prog,link = "$linkmode,$pass"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" + fi + continue + fi + ;; # -l + *.ltframework) + if test prog,link = "$linkmode,$pass"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + if test lib = "$linkmode"; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) func_append new_inherited_linker_flags " $deplib" ;; + esac + fi + fi + continue + ;; + -L*) + case $linkmode in + lib) + deplibs="$deplib $deplibs" + test conv = "$pass" && continue + newdependency_libs="$deplib $newdependency_libs" + func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + func_append newlib_search_path " $func_resolve_sysroot_result" + ;; + prog) + if test conv = "$pass"; then + deplibs="$deplib $deplibs" + continue + fi + if test scan = "$pass"; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + func_append newlib_search_path " $func_resolve_sysroot_result" + ;; + *) + func_warning "'-L' is ignored for archives/objects" + ;; + esac # linkmode + continue + ;; # -L + -R*) + if test link = "$pass"; then + func_stripname '-R' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + dir=$func_resolve_sysroot_result + # Make sure the xrpath contains only unique directories. + case "$xrpath " in + *" $dir "*) ;; + *) func_append xrpath " $dir" ;; + esac + fi + deplibs="$deplib $deplibs" + continue + ;; + *.la) + func_resolve_sysroot "$deplib" + lib=$func_resolve_sysroot_result + ;; + *.$libext) + if test conv = "$pass"; then + deplibs="$deplib $deplibs" + continue + fi + case $linkmode in + lib) + # Linking convenience modules into shared libraries is allowed, + # but linking other static libraries is non-portable. + case " $dlpreconveniencelibs " in + *" $deplib "*) ;; + *) + valid_a_lib=false + case $deplibs_check_method in + match_pattern*) + set dummy $deplibs_check_method; shift + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ + | $EGREP "$match_pattern_regex" > /dev/null; then + valid_a_lib=: + fi + ;; + pass_all) + valid_a_lib=: + ;; + esac + if $valid_a_lib; then + echo + $ECHO "*** Warning: Linking the shared library $output against the" + $ECHO "*** static library $deplib is not portable!" + deplibs="$deplib $deplibs" + else + echo + $ECHO "*** Warning: Trying to link with static lib archive $deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because the file extensions .$libext of this argument makes me believe" + echo "*** that it is just a static archive that I should not use here." + fi + ;; + esac + continue + ;; + prog) + if test link != "$pass"; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + continue + ;; + esac # linkmode + ;; # *.$libext + *.lo | *.$objext) + if test conv = "$pass"; then + deplibs="$deplib $deplibs" + elif test prog = "$linkmode"; then + if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then + # If there is no dlopen support or we're linking statically, + # we need to preload. + func_append newdlprefiles " $deplib" + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + func_append newdlfiles " $deplib" + fi + fi + continue + ;; + %DEPLIBS%) + alldeplibs=: + continue + ;; + esac # case $deplib + + $found || test -f "$lib" \ + || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'" + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$lib" \ + || func_fatal_error "'$lib' is not a valid libtool archive" + + func_dirname "$lib" "" "." + ladir=$func_dirname_result + + dlname= + dlopen= + dlpreopen= + libdir= + library_names= + old_library= + inherited_linker_flags= + # If the library was installed with an old release of libtool, + # it will not redefine variables installed, or shouldnotlink + installed=yes + shouldnotlink=no + avoidtemprpath= + + + # Read the .la file + func_source "$lib" + + # Convert "-framework foo" to "foo.ltframework" + if test -n "$inherited_linker_flags"; then + tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` + for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do + case " $new_inherited_linker_flags " in + *" $tmp_inherited_linker_flag "*) ;; + *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; + esac + done + fi + dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + if test lib,link = "$linkmode,$pass" || + test prog,scan = "$linkmode,$pass" || + { test prog != "$linkmode" && test lib != "$linkmode"; }; then + test -n "$dlopen" && func_append dlfiles " $dlopen" + test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" + fi + + if test conv = "$pass"; then + # Only check for convenience libraries + deplibs="$lib $deplibs" + if test -z "$libdir"; then + if test -z "$old_library"; then + func_fatal_error "cannot find name of link library for '$lib'" + fi + # It is a libtool convenience library, so add in its objects. + func_append convenience " $ladir/$objdir/$old_library" + func_append old_convenience " $ladir/$objdir/$old_library" + elif test prog != "$linkmode" && test lib != "$linkmode"; then + func_fatal_error "'$lib' is not a convenience library" + fi + tmp_libs= + for deplib in $dependency_libs; do + deplibs="$deplib $deplibs" + if $opt_preserve_dup_deps; then + case "$tmp_libs " in + *" $deplib "*) func_append specialdeplibs " $deplib" ;; + esac + fi + func_append tmp_libs " $deplib" + done + continue + fi # $pass = conv + + + # Get the name of the library we link against. + linklib= + if test -n "$old_library" && + { test yes = "$prefer_static_libs" || + test built,no = "$prefer_static_libs,$installed"; }; then + linklib=$old_library + else + for l in $old_library $library_names; do + linklib=$l + done + fi + if test -z "$linklib"; then + func_fatal_error "cannot find name of link library for '$lib'" + fi + + # This library was specified with -dlopen. + if test dlopen = "$pass"; then + test -z "$libdir" \ + && func_fatal_error "cannot -dlopen a convenience library: '$lib'" + if test -z "$dlname" || + test yes != "$dlopen_support" || + test no = "$build_libtool_libs" + then + # If there is no dlname, no dlopen support or we're linking + # statically, we need to preload. We also need to preload any + # dependent libraries so libltdl's deplib preloader doesn't + # bomb out in the load deplibs phase. + func_append dlprefiles " $lib $dependency_libs" + else + func_append newdlfiles " $lib" + fi + continue + fi # $pass = dlopen + + # We need an absolute path. + case $ladir in + [\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;; + *) + abs_ladir=`cd "$ladir" && pwd` + if test -z "$abs_ladir"; then + func_warning "cannot determine absolute directory name of '$ladir'" + func_warning "passing it literally to the linker, although it might fail" + abs_ladir=$ladir + fi + ;; + esac + func_basename "$lib" + laname=$func_basename_result + + # Find the relevant object directory and library name. + if test yes = "$installed"; then + if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then + func_warning "library '$lib' was moved." + dir=$ladir + absdir=$abs_ladir + libdir=$abs_ladir + else + dir=$lt_sysroot$libdir + absdir=$lt_sysroot$libdir + fi + test yes = "$hardcode_automatic" && avoidtemprpath=yes + else + if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then + dir=$ladir + absdir=$abs_ladir + # Remove this search path later + func_append notinst_path " $abs_ladir" + else + dir=$ladir/$objdir + absdir=$abs_ladir/$objdir + # Remove this search path later + func_append notinst_path " $abs_ladir" + fi + fi # $installed = yes + func_stripname 'lib' '.la' "$laname" + name=$func_stripname_result + + # This library was specified with -dlpreopen. + if test dlpreopen = "$pass"; then + if test -z "$libdir" && test prog = "$linkmode"; then + func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'" + fi + case $host in + # special handling for platforms with PE-DLLs. + *cygwin* | *mingw* | *cegcc* ) + # Linker will automatically link against shared library if both + # static and shared are present. Therefore, ensure we extract + # symbols from the import library if a shared library is present + # (otherwise, the dlopen module name will be incorrect). We do + # this by putting the import library name into $newdlprefiles. + # We recover the dlopen module name by 'saving' the la file + # name in a special purpose variable, and (later) extracting the + # dlname from the la file. + if test -n "$dlname"; then + func_tr_sh "$dir/$linklib" + eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" + func_append newdlprefiles " $dir/$linklib" + else + func_append newdlprefiles " $dir/$old_library" + # Keep a list of preopened convenience libraries to check + # that they are being used correctly in the link pass. + test -z "$libdir" && \ + func_append dlpreconveniencelibs " $dir/$old_library" + fi + ;; + * ) + # Prefer using a static library (so that no silly _DYNAMIC symbols + # are required to link). + if test -n "$old_library"; then + func_append newdlprefiles " $dir/$old_library" + # Keep a list of preopened convenience libraries to check + # that they are being used correctly in the link pass. + test -z "$libdir" && \ + func_append dlpreconveniencelibs " $dir/$old_library" + # Otherwise, use the dlname, so that lt_dlopen finds it. + elif test -n "$dlname"; then + func_append newdlprefiles " $dir/$dlname" + else + func_append newdlprefiles " $dir/$linklib" + fi + ;; + esac + fi # $pass = dlpreopen + + if test -z "$libdir"; then + # Link the convenience library + if test lib = "$linkmode"; then + deplibs="$dir/$old_library $deplibs" + elif test prog,link = "$linkmode,$pass"; then + compile_deplibs="$dir/$old_library $compile_deplibs" + finalize_deplibs="$dir/$old_library $finalize_deplibs" + else + deplibs="$lib $deplibs" # used for prog,scan pass + fi + continue + fi + + + if test prog = "$linkmode" && test link != "$pass"; then + func_append newlib_search_path " $ladir" + deplibs="$lib $deplibs" + + linkalldeplibs=false + if test no != "$link_all_deplibs" || test -z "$library_names" || + test no = "$build_libtool_libs"; then + linkalldeplibs=: + fi + + tmp_libs= + for deplib in $dependency_libs; do + case $deplib in + -L*) func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + func_append newlib_search_path " $func_resolve_sysroot_result" + ;; + esac + # Need to link against all dependency_libs? + if $linkalldeplibs; then + deplibs="$deplib $deplibs" + else + # Need to hardcode shared library paths + # or/and link against static libraries + newdependency_libs="$deplib $newdependency_libs" + fi + if $opt_preserve_dup_deps; then + case "$tmp_libs " in + *" $deplib "*) func_append specialdeplibs " $deplib" ;; + esac + fi + func_append tmp_libs " $deplib" + done # for deplib + continue + fi # $linkmode = prog... + + if test prog,link = "$linkmode,$pass"; then + if test -n "$library_names" && + { { test no = "$prefer_static_libs" || + test built,yes = "$prefer_static_libs,$installed"; } || + test -z "$old_library"; }; then + # We need to hardcode the library path + if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then + # Make sure the rpath contains only unique directories. + case $temp_rpath: in + *"$absdir:"*) ;; + *) func_append temp_rpath "$absdir:" ;; + esac + fi + + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) func_append compile_rpath " $absdir" ;; + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + ;; + esac + fi # $linkmode,$pass = prog,link... + + if $alldeplibs && + { test pass_all = "$deplibs_check_method" || + { test yes = "$build_libtool_libs" && + test -n "$library_names"; }; }; then + # We only need to search for static libraries + continue + fi + fi + + link_static=no # Whether the deplib will be linked statically + use_static_libs=$prefer_static_libs + if test built = "$use_static_libs" && test yes = "$installed"; then + use_static_libs=no + fi + if test -n "$library_names" && + { test no = "$use_static_libs" || test -z "$old_library"; }; then + case $host in + *cygwin* | *mingw* | *cegcc* | *os2*) + # No point in relinking DLLs because paths are not encoded + func_append notinst_deplibs " $lib" + need_relink=no + ;; + *) + if test no = "$installed"; then + func_append notinst_deplibs " $lib" + need_relink=yes + fi + ;; + esac + # This is a shared library + + # Warn about portability, can't link against -module's on some + # systems (darwin). Don't bleat about dlopened modules though! + dlopenmodule= + for dlpremoduletest in $dlprefiles; do + if test "X$dlpremoduletest" = "X$lib"; then + dlopenmodule=$dlpremoduletest + break + fi + done + if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then + echo + if test prog = "$linkmode"; then + $ECHO "*** Warning: Linking the executable $output against the loadable module" + else + $ECHO "*** Warning: Linking the shared library $output against the loadable module" + fi + $ECHO "*** $linklib is not portable!" + fi + if test lib = "$linkmode" && + test yes = "$hardcode_into_libs"; then + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) func_append compile_rpath " $absdir" ;; + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + ;; + esac + fi + + if test -n "$old_archive_from_expsyms_cmds"; then + # figure out the soname + set dummy $library_names + shift + realname=$1 + shift + libname=`eval "\\$ECHO \"$libname_spec\""` + # use dlname if we got it. it's perfectly good, no? + if test -n "$dlname"; then + soname=$dlname + elif test -n "$soname_spec"; then + # bleh windows + case $host in + *cygwin* | mingw* | *cegcc* | *os2*) + func_arith $current - $age + major=$func_arith_result + versuffix=-$major + ;; + esac + eval soname=\"$soname_spec\" + else + soname=$realname + fi + + # Make a new name for the extract_expsyms_cmds to use + soroot=$soname + func_basename "$soroot" + soname=$func_basename_result + func_stripname 'lib' '.dll' "$soname" + newlib=libimp-$func_stripname_result.a + + # If the library has no export list, then create one now + if test -f "$output_objdir/$soname-def"; then : + else + func_verbose "extracting exported symbol list from '$soname'" + func_execute_cmds "$extract_expsyms_cmds" 'exit $?' + fi + + # Create $newlib + if test -f "$output_objdir/$newlib"; then :; else + func_verbose "generating import library for '$soname'" + func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' + fi + # make sure the library variables are pointing to the new library + dir=$output_objdir + linklib=$newlib + fi # test -n "$old_archive_from_expsyms_cmds" + + if test prog = "$linkmode" || test relink != "$opt_mode"; then + add_shlibpath= + add_dir= + add= + lib_linked=yes + case $hardcode_action in + immediate | unsupported) + if test no = "$hardcode_direct"; then + add=$dir/$linklib + case $host in + *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;; + *-*-sysv4*uw2*) add_dir=-L$dir ;; + *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ + *-*-unixware7*) add_dir=-L$dir ;; + *-*-darwin* ) + # if the lib is a (non-dlopened) module then we cannot + # link against it, someone is ignoring the earlier warnings + if /usr/bin/file -L $add 2> /dev/null | + $GREP ": [^:]* bundle" >/dev/null; then + if test "X$dlopenmodule" != "X$lib"; then + $ECHO "*** Warning: lib $linklib is a module, not a shared library" + if test -z "$old_library"; then + echo + echo "*** And there doesn't seem to be a static archive available" + echo "*** The link will probably fail, sorry" + else + add=$dir/$old_library + fi + elif test -n "$old_library"; then + add=$dir/$old_library + fi + fi + esac + elif test no = "$hardcode_minus_L"; then + case $host in + *-*-sunos*) add_shlibpath=$dir ;; + esac + add_dir=-L$dir + add=-l$name + elif test no = "$hardcode_shlibpath_var"; then + add_shlibpath=$dir + add=-l$name + else + lib_linked=no + fi + ;; + relink) + if test yes = "$hardcode_direct" && + test no = "$hardcode_direct_absolute"; then + add=$dir/$linklib + elif test yes = "$hardcode_minus_L"; then + add_dir=-L$absdir + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + func_append add_dir " -L$inst_prefix_dir$libdir" + ;; + esac + fi + add=-l$name + elif test yes = "$hardcode_shlibpath_var"; then + add_shlibpath=$dir + add=-l$name + else + lib_linked=no + fi + ;; + *) lib_linked=no ;; + esac + + if test yes != "$lib_linked"; then + func_fatal_configuration "unsupported hardcode properties" + fi + + if test -n "$add_shlibpath"; then + case :$compile_shlibpath: in + *":$add_shlibpath:"*) ;; + *) func_append compile_shlibpath "$add_shlibpath:" ;; + esac + fi + if test prog = "$linkmode"; then + test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" + test -n "$add" && compile_deplibs="$add $compile_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + if test yes != "$hardcode_direct" && + test yes != "$hardcode_minus_L" && + test yes = "$hardcode_shlibpath_var"; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) func_append finalize_shlibpath "$libdir:" ;; + esac + fi + fi + fi + + if test prog = "$linkmode" || test relink = "$opt_mode"; then + add_shlibpath= + add_dir= + add= + # Finalize command for both is simple: just hardcode it. + if test yes = "$hardcode_direct" && + test no = "$hardcode_direct_absolute"; then + add=$libdir/$linklib + elif test yes = "$hardcode_minus_L"; then + add_dir=-L$libdir + add=-l$name + elif test yes = "$hardcode_shlibpath_var"; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) func_append finalize_shlibpath "$libdir:" ;; + esac + add=-l$name + elif test yes = "$hardcode_automatic"; then + if test -n "$inst_prefix_dir" && + test -f "$inst_prefix_dir$libdir/$linklib"; then + add=$inst_prefix_dir$libdir/$linklib + else + add=$libdir/$linklib + fi + else + # We cannot seem to hardcode it, guess we'll fake it. + add_dir=-L$libdir + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + func_append add_dir " -L$inst_prefix_dir$libdir" + ;; + esac + fi + add=-l$name + fi + + if test prog = "$linkmode"; then + test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" + test -n "$add" && finalize_deplibs="$add $finalize_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + fi + fi + elif test prog = "$linkmode"; then + # Here we assume that one of hardcode_direct or hardcode_minus_L + # is not unsupported. This is valid on all known static and + # shared platforms. + if test unsupported != "$hardcode_direct"; then + test -n "$old_library" && linklib=$old_library + compile_deplibs="$dir/$linklib $compile_deplibs" + finalize_deplibs="$dir/$linklib $finalize_deplibs" + else + compile_deplibs="-l$name -L$dir $compile_deplibs" + finalize_deplibs="-l$name -L$dir $finalize_deplibs" + fi + elif test yes = "$build_libtool_libs"; then + # Not a shared library + if test pass_all != "$deplibs_check_method"; then + # We're trying link a shared library against a static one + # but the system doesn't support it. + + # Just print a warning and add the library to dependency_libs so + # that the program can be linked against the static library. + echo + $ECHO "*** Warning: This system cannot link to static lib archive $lib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have." + if test yes = "$module"; then + echo "*** But as you try to build a module library, libtool will still create " + echo "*** a static module, that should work as long as the dlopening application" + echo "*** is linked with the -dlopen flag to resolve symbols at runtime." + if test -z "$global_symbol_pipe"; then + echo + echo "*** However, this would only work if libtool was able to extract symbol" + echo "*** lists from a program, using 'nm' or equivalent, but libtool could" + echo "*** not find such a program. So, this module is probably useless." + echo "*** 'nm' from GNU binutils and a full rebuild may help." + fi + if test no = "$build_old_libs"; then + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + else + deplibs="$dir/$old_library $deplibs" + link_static=yes + fi + fi # link shared/static library? + + if test lib = "$linkmode"; then + if test -n "$dependency_libs" && + { test yes != "$hardcode_into_libs" || + test yes = "$build_old_libs" || + test yes = "$link_static"; }; then + # Extract -R from dependency_libs + temp_deplibs= + for libdir in $dependency_libs; do + case $libdir in + -R*) func_stripname '-R' '' "$libdir" + temp_xrpath=$func_stripname_result + case " $xrpath " in + *" $temp_xrpath "*) ;; + *) func_append xrpath " $temp_xrpath";; + esac;; + *) func_append temp_deplibs " $libdir";; + esac + done + dependency_libs=$temp_deplibs + fi + + func_append newlib_search_path " $absdir" + # Link against this library + test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs" + # ... and its dependency_libs + tmp_libs= + for deplib in $dependency_libs; do + newdependency_libs="$deplib $newdependency_libs" + case $deplib in + -L*) func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result";; + *) func_resolve_sysroot "$deplib" ;; + esac + if $opt_preserve_dup_deps; then + case "$tmp_libs " in + *" $func_resolve_sysroot_result "*) + func_append specialdeplibs " $func_resolve_sysroot_result" ;; + esac + fi + func_append tmp_libs " $func_resolve_sysroot_result" + done + + if test no != "$link_all_deplibs"; then + # Add the search paths of all dependency libraries + for deplib in $dependency_libs; do + path= + case $deplib in + -L*) path=$deplib ;; + *.la) + func_resolve_sysroot "$deplib" + deplib=$func_resolve_sysroot_result + func_dirname "$deplib" "" "." + dir=$func_dirname_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + func_warning "cannot determine absolute directory name of '$dir'" + absdir=$dir + fi + ;; + esac + if $GREP "^installed=no" $deplib > /dev/null; then + case $host in + *-*-darwin*) + depdepl= + eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` + if test -n "$deplibrary_names"; then + for tmp in $deplibrary_names; do + depdepl=$tmp + done + if test -f "$absdir/$objdir/$depdepl"; then + depdepl=$absdir/$objdir/$depdepl + darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + if test -z "$darwin_install_name"; then + darwin_install_name=`$OTOOL64 -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + fi + func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl" + func_append linker_flags " -dylib_file $darwin_install_name:$depdepl" + path= + fi + fi + ;; + *) + path=-L$absdir/$objdir + ;; + esac + else + eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + test -z "$libdir" && \ + func_fatal_error "'$deplib' is not a valid libtool archive" + test "$absdir" != "$libdir" && \ + func_warning "'$deplib' seems to be moved" + + path=-L$absdir + fi + ;; + esac + case " $deplibs " in + *" $path "*) ;; + *) deplibs="$path $deplibs" ;; + esac + done + fi # link_all_deplibs != no + fi # linkmode = lib + done # for deplib in $libs + if test link = "$pass"; then + if test prog = "$linkmode"; then + compile_deplibs="$new_inherited_linker_flags $compile_deplibs" + finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" + else + compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + fi + fi + dependency_libs=$newdependency_libs + if test dlpreopen = "$pass"; then + # Link the dlpreopened libraries before other libraries + for deplib in $save_deplibs; do + deplibs="$deplib $deplibs" + done + fi + if test dlopen != "$pass"; then + test conv = "$pass" || { + # Make sure lib_search_path contains only unique directories. + lib_search_path= + for dir in $newlib_search_path; do + case "$lib_search_path " in + *" $dir "*) ;; + *) func_append lib_search_path " $dir" ;; + esac + done + newlib_search_path= + } + + if test prog,link = "$linkmode,$pass"; then + vars="compile_deplibs finalize_deplibs" + else + vars=deplibs + fi + for var in $vars dependency_libs; do + # Add libraries to $var in reverse order + eval tmp_libs=\"\$$var\" + new_libs= + for deplib in $tmp_libs; do + # FIXME: Pedantically, this is the right thing to do, so + # that some nasty dependency loop isn't accidentally + # broken: + #new_libs="$deplib $new_libs" + # Pragmatically, this seems to cause very few problems in + # practice: + case $deplib in + -L*) new_libs="$deplib $new_libs" ;; + -R*) ;; + *) + # And here is the reason: when a library appears more + # than once as an explicit dependence of a library, or + # is implicitly linked in more than once by the + # compiler, it is considered special, and multiple + # occurrences thereof are not removed. Compare this + # with having the same library being listed as a + # dependency of multiple other libraries: in this case, + # we know (pedantically, we assume) the library does not + # need to be listed more than once, so we keep only the + # last copy. This is not always right, but it is rare + # enough that we require users that really mean to play + # such unportable linking tricks to link the library + # using -Wl,-lname, so that libtool does not consider it + # for duplicate removal. + case " $specialdeplibs " in + *" $deplib "*) new_libs="$deplib $new_libs" ;; + *) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$deplib $new_libs" ;; + esac + ;; + esac + ;; + esac + done + tmp_libs= + for deplib in $new_libs; do + case $deplib in + -L*) + case " $tmp_libs " in + *" $deplib "*) ;; + *) func_append tmp_libs " $deplib" ;; + esac + ;; + *) func_append tmp_libs " $deplib" ;; + esac + done + eval $var=\"$tmp_libs\" + done # for var + fi + + # Add Sun CC postdeps if required: + test CXX = "$tagname" && { + case $host_os in + linux*) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C++ 5.9 + func_suncc_cstd_abi + + if test no != "$suncc_use_cstd_abi"; then + func_append postdeps ' -library=Cstd -library=Crun' + fi + ;; + esac + ;; + + solaris*) + func_cc_basename "$CC" + case $func_cc_basename_result in + CC* | sunCC*) + func_suncc_cstd_abi + + if test no != "$suncc_use_cstd_abi"; then + func_append postdeps ' -library=Cstd -library=Crun' + fi + ;; + esac + ;; + esac + } + + # Last step: remove runtime libs from dependency_libs + # (they stay in deplibs) + tmp_libs= + for i in $dependency_libs; do + case " $predeps $postdeps $compiler_lib_search_path " in + *" $i "*) + i= + ;; + esac + if test -n "$i"; then + func_append tmp_libs " $i" + fi + done + dependency_libs=$tmp_libs + done # for pass + if test prog = "$linkmode"; then + dlfiles=$newdlfiles + fi + if test prog = "$linkmode" || test lib = "$linkmode"; then + dlprefiles=$newdlprefiles + fi + + case $linkmode in + oldlib) + if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then + func_warning "'-dlopen' is ignored for archives" + fi + + case " $deplibs" in + *\ -l* | *\ -L*) + func_warning "'-l' and '-L' are ignored for archives" ;; + esac + + test -n "$rpath" && \ + func_warning "'-rpath' is ignored for archives" + + test -n "$xrpath" && \ + func_warning "'-R' is ignored for archives" + + test -n "$vinfo" && \ + func_warning "'-version-info/-version-number' is ignored for archives" + + test -n "$release" && \ + func_warning "'-release' is ignored for archives" + + test -n "$export_symbols$export_symbols_regex" && \ + func_warning "'-export-symbols' is ignored for archives" + + # Now set the variables for building old libraries. + build_libtool_libs=no + oldlibs=$output + func_append objs "$old_deplibs" + ;; + + lib) + # Make sure we only generate libraries of the form 'libNAME.la'. + case $outputname in + lib*) + func_stripname 'lib' '.la' "$outputname" + name=$func_stripname_result + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + ;; + *) + test no = "$module" \ + && func_fatal_help "libtool library '$output' must begin with 'lib'" + + if test no != "$need_lib_prefix"; then + # Add the "lib" prefix for modules if required + func_stripname '' '.la' "$outputname" + name=$func_stripname_result + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + else + func_stripname '' '.la' "$outputname" + libname=$func_stripname_result + fi + ;; + esac + + if test -n "$objs"; then + if test pass_all != "$deplibs_check_method"; then + func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs" + else + echo + $ECHO "*** Warning: Linking the shared library $output against the non-libtool" + $ECHO "*** objects $objs is not portable!" + func_append libobjs " $objs" + fi + fi + + test no = "$dlself" \ + || func_warning "'-dlopen self' is ignored for libtool libraries" + + set dummy $rpath + shift + test 1 -lt "$#" \ + && func_warning "ignoring multiple '-rpath's for a libtool library" + + install_libdir=$1 + + oldlibs= + if test -z "$rpath"; then + if test yes = "$build_libtool_libs"; then + # Building a libtool convenience library. + # Some compilers have problems with a '.al' extension so + # convenience libraries should have the same extension an + # archive normally would. + oldlibs="$output_objdir/$libname.$libext $oldlibs" + build_libtool_libs=convenience + build_old_libs=yes + fi + + test -n "$vinfo" && \ + func_warning "'-version-info/-version-number' is ignored for convenience libraries" + + test -n "$release" && \ + func_warning "'-release' is ignored for convenience libraries" + else + + # Parse the version information argument. + save_ifs=$IFS; IFS=: + set dummy $vinfo 0 0 0 + shift + IFS=$save_ifs + + test -n "$7" && \ + func_fatal_help "too many parameters to '-version-info'" + + # convert absolute version numbers to libtool ages + # this retains compatibility with .la files and attempts + # to make the code below a bit more comprehensible + + case $vinfo_number in + yes) + number_major=$1 + number_minor=$2 + number_revision=$3 + # + # There are really only two kinds -- those that + # use the current revision as the major version + # and those that subtract age and use age as + # a minor version. But, then there is irix + # that has an extra 1 added just for fun + # + case $version_type in + # correct linux to gnu/linux during the next big refactor + darwin|freebsd-elf|linux|osf|windows|none) + func_arith $number_major + $number_minor + current=$func_arith_result + age=$number_minor + revision=$number_revision + ;; + freebsd-aout|qnx|sunos) + current=$number_major + revision=$number_minor + age=0 + ;; + irix|nonstopux) + func_arith $number_major + $number_minor + current=$func_arith_result + age=$number_minor + revision=$number_minor + lt_irix_increment=no + ;; + esac + ;; + no) + current=$1 + revision=$2 + age=$3 + ;; + esac + + # Check that each of the things are valid numbers. + case $current in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "CURRENT '$current' must be a nonnegative integer" + func_fatal_error "'$vinfo' is not valid version information" + ;; + esac + + case $revision in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "REVISION '$revision' must be a nonnegative integer" + func_fatal_error "'$vinfo' is not valid version information" + ;; + esac + + case $age in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "AGE '$age' must be a nonnegative integer" + func_fatal_error "'$vinfo' is not valid version information" + ;; + esac + + if test "$age" -gt "$current"; then + func_error "AGE '$age' is greater than the current interface number '$current'" + func_fatal_error "'$vinfo' is not valid version information" + fi + + # Calculate the version variables. + major= + versuffix= + verstring= + case $version_type in + none) ;; + + darwin) + # Like Linux, but with the current version available in + # verstring for coding it into the library header + func_arith $current - $age + major=.$func_arith_result + versuffix=$major.$age.$revision + # Darwin ld doesn't like 0 for these options... + func_arith $current + 1 + minor_current=$func_arith_result + xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" + verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" + # On Darwin other compilers + case $CC in + nagfor*) + verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" + ;; + *) + verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" + ;; + esac + ;; + + freebsd-aout) + major=.$current + versuffix=.$current.$revision + ;; + + freebsd-elf) + func_arith $current - $age + major=.$func_arith_result + versuffix=$major.$age.$revision + ;; + + irix | nonstopux) + if test no = "$lt_irix_increment"; then + func_arith $current - $age + else + func_arith $current - $age + 1 + fi + major=$func_arith_result + + case $version_type in + nonstopux) verstring_prefix=nonstopux ;; + *) verstring_prefix=sgi ;; + esac + verstring=$verstring_prefix$major.$revision + + # Add in all the interfaces that we are compatible with. + loop=$revision + while test 0 -ne "$loop"; do + func_arith $revision - $loop + iface=$func_arith_result + func_arith $loop - 1 + loop=$func_arith_result + verstring=$verstring_prefix$major.$iface:$verstring + done + + # Before this point, $major must not contain '.'. + major=.$major + versuffix=$major.$revision + ;; + + linux) # correct to gnu/linux during the next big refactor + func_arith $current - $age + major=.$func_arith_result + versuffix=$major.$age.$revision + ;; + + osf) + func_arith $current - $age + major=.$func_arith_result + versuffix=.$current.$age.$revision + verstring=$current.$age.$revision + + # Add in all the interfaces that we are compatible with. + loop=$age + while test 0 -ne "$loop"; do + func_arith $current - $loop + iface=$func_arith_result + func_arith $loop - 1 + loop=$func_arith_result + verstring=$verstring:$iface.0 + done + + # Make executables depend on our current version. + func_append verstring ":$current.0" + ;; + + qnx) + major=.$current + versuffix=.$current + ;; + + sco) + major=.$current + versuffix=.$current + ;; + + sunos) + major=.$current + versuffix=.$current.$revision + ;; + + windows) + # Use '-' rather than '.', since we only want one + # extension on DOS 8.3 file systems. + func_arith $current - $age + major=$func_arith_result + versuffix=-$major + ;; + + *) + func_fatal_configuration "unknown library version type '$version_type'" + ;; + esac + + # Clear the version info if we defaulted, and they specified a release. + if test -z "$vinfo" && test -n "$release"; then + major= + case $version_type in + darwin) + # we can't check for "0.0" in archive_cmds due to quoting + # problems, so we reset it completely + verstring= + ;; + *) + verstring=0.0 + ;; + esac + if test no = "$need_version"; then + versuffix= + else + versuffix=.0.0 + fi + fi + + # Remove version info from name if versioning should be avoided + if test yes,no = "$avoid_version,$need_version"; then + major= + versuffix= + verstring= + fi + + # Check to see if the archive will have undefined symbols. + if test yes = "$allow_undefined"; then + if test unsupported = "$allow_undefined_flag"; then + if test yes = "$build_old_libs"; then + func_warning "undefined symbols not allowed in $host shared libraries; building static only" + build_libtool_libs=no + else + func_fatal_error "can't build $host shared library unless -no-undefined is specified" + fi + fi + else + # Don't allow undefined symbols. + allow_undefined_flag=$no_undefined_flag + fi + + fi + + func_generate_dlsyms "$libname" "$libname" : + func_append libobjs " $symfileobj" + test " " = "$libobjs" && libobjs= + + if test relink != "$opt_mode"; then + # Remove our outputs, but don't remove object files since they + # may have been created when compiling PIC objects. + removelist= + tempremovelist=`$ECHO "$output_objdir/*"` + for p in $tempremovelist; do + case $p in + *.$objext | *.gcno) + ;; + $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*) + if test -n "$precious_files_regex"; then + if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 + then + continue + fi + fi + func_append removelist " $p" + ;; + *) ;; + esac + done + test -n "$removelist" && \ + func_show_eval "${RM}r \$removelist" + fi + + # Now set the variables for building old libraries. + if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then + func_append oldlibs " $output_objdir/$libname.$libext" + + # Transform .lo files to .o files. + oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP` + fi + + # Eliminate all temporary directories. + #for path in $notinst_path; do + # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` + # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` + # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` + #done + + if test -n "$xrpath"; then + # If the user specified any rpath flags, then add them. + temp_xrpath= + for libdir in $xrpath; do + func_replace_sysroot "$libdir" + func_append temp_xrpath " -R$func_replace_sysroot_result" + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + done + if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then + dependency_libs="$temp_xrpath $dependency_libs" + fi + fi + + # Make sure dlfiles contains only unique files that won't be dlpreopened + old_dlfiles=$dlfiles + dlfiles= + for lib in $old_dlfiles; do + case " $dlprefiles $dlfiles " in + *" $lib "*) ;; + *) func_append dlfiles " $lib" ;; + esac + done + + # Make sure dlprefiles contains only unique files + old_dlprefiles=$dlprefiles + dlprefiles= + for lib in $old_dlprefiles; do + case "$dlprefiles " in + *" $lib "*) ;; + *) func_append dlprefiles " $lib" ;; + esac + done + + if test yes = "$build_libtool_libs"; then + if test -n "$rpath"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) + # these systems don't actually have a c library (as such)! + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C library is in the System framework + func_append deplibs " System.ltframework" + ;; + *-*-netbsd*) + # Don't link with libc until the a.out ld.so is fixed. + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc due to us having libc/libc_r. + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + ;; + *) + # Add libc to deplibs on all other systems if necessary. + if test yes = "$build_libtool_need_lc"; then + func_append deplibs " -lc" + fi + ;; + esac + fi + + # Transform deplibs into only deplibs that can be linked in shared. + name_save=$name + libname_save=$libname + release_save=$release + versuffix_save=$versuffix + major_save=$major + # I'm not sure if I'm treating the release correctly. I think + # release should show up in the -l (ie -lgmp5) so we don't want to + # add it in twice. Is that correct? + release= + versuffix= + major= + newdeplibs= + droppeddeps=no + case $deplibs_check_method in + pass_all) + # Don't check for shared/static. Everything works. + # This might be a little naive. We might want to check + # whether the library exists or not. But this is on + # osf3 & osf4 and I'm not really sure... Just + # implementing what was already the behavior. + newdeplibs=$deplibs + ;; + test_compile) + # This code stresses the "libraries are programs" paradigm to its + # limits. Maybe even breaks it. We compile a program, linking it + # against the deplibs as a proxy for the library. Then we can check + # whether they linked in statically or dynamically with ldd. + $opt_dry_run || $RM conftest.c + cat > conftest.c </dev/null` + $nocaseglob + else + potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` + fi + for potent_lib in $potential_libs; do + # Follow soft links. + if ls -lLd "$potent_lib" 2>/dev/null | + $GREP " -> " >/dev/null; then + continue + fi + # The statement above tries to avoid entering an + # endless loop below, in case of cyclic links. + # We might still enter an endless loop, since a link + # loop can be closed while we follow links, + # but so what? + potlib=$potent_lib + while test -h "$potlib" 2>/dev/null; do + potliblink=`ls -ld $potlib | $SED 's/.* -> //'` + case $potliblink in + [\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;; + *) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";; + esac + done + if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | + $SED -e 10q | + $EGREP "$file_magic_regex" > /dev/null; then + func_append newdeplibs " $a_deplib" + a_deplib= + break 2 + fi + done + done + fi + if test -n "$a_deplib"; then + droppeddeps=yes + echo + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib"; then + $ECHO "*** with $libname but no candidates were found. (...for file magic test)" + else + $ECHO "*** with $libname and none of the candidates passed a file format test" + $ECHO "*** using a file magic. Last file checked: $potlib" + fi + fi + ;; + *) + # Add a -L argument. + func_append newdeplibs " $a_deplib" + ;; + esac + done # Gone through all deplibs. + ;; + match_pattern*) + set dummy $deplibs_check_method; shift + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + for a_deplib in $deplibs; do + case $a_deplib in + -l*) + func_stripname -l '' "$a_deplib" + name=$func_stripname_result + if test yes = "$allow_libtool_libs_with_static_runtimes"; then + case " $predeps $postdeps " in + *" $a_deplib "*) + func_append newdeplibs " $a_deplib" + a_deplib= + ;; + esac + fi + if test -n "$a_deplib"; then + libname=`eval "\\$ECHO \"$libname_spec\""` + for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do + potential_libs=`ls $i/$libname[.-]* 2>/dev/null` + for potent_lib in $potential_libs; do + potlib=$potent_lib # see symlink-check above in file_magic test + if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ + $EGREP "$match_pattern_regex" > /dev/null; then + func_append newdeplibs " $a_deplib" + a_deplib= + break 2 + fi + done + done + fi + if test -n "$a_deplib"; then + droppeddeps=yes + echo + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib"; then + $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" + else + $ECHO "*** with $libname and none of the candidates passed a file format test" + $ECHO "*** using a regex pattern. Last file checked: $potlib" + fi + fi + ;; + *) + # Add a -L argument. + func_append newdeplibs " $a_deplib" + ;; + esac + done # Gone through all deplibs. + ;; + none | unknown | *) + newdeplibs= + tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` + if test yes = "$allow_libtool_libs_with_static_runtimes"; then + for i in $predeps $postdeps; do + # can't use Xsed below, because $i might contain '/' + tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"` + done + fi + case $tmp_deplibs in + *[!\ \ ]*) + echo + if test none = "$deplibs_check_method"; then + echo "*** Warning: inter-library dependencies are not supported in this platform." + else + echo "*** Warning: inter-library dependencies are not known to be supported." + fi + echo "*** All declared inter-library dependencies are being dropped." + droppeddeps=yes + ;; + esac + ;; + esac + versuffix=$versuffix_save + major=$major_save + release=$release_save + libname=$libname_save + name=$name_save + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library with the System framework + newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` + ;; + esac + + if test yes = "$droppeddeps"; then + if test yes = "$module"; then + echo + echo "*** Warning: libtool could not satisfy all declared inter-library" + $ECHO "*** dependencies of module $libname. Therefore, libtool will create" + echo "*** a static module, that should work as long as the dlopening" + echo "*** application is linked with the -dlopen flag." + if test -z "$global_symbol_pipe"; then + echo + echo "*** However, this would only work if libtool was able to extract symbol" + echo "*** lists from a program, using 'nm' or equivalent, but libtool could" + echo "*** not find such a program. So, this module is probably useless." + echo "*** 'nm' from GNU binutils and a full rebuild may help." + fi + if test no = "$build_old_libs"; then + oldlibs=$output_objdir/$libname.$libext + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + else + echo "*** The inter-library dependencies that have been dropped here will be" + echo "*** automatically added whenever a program is linked with this library" + echo "*** or is declared to -dlopen it." + + if test no = "$allow_undefined"; then + echo + echo "*** Since this library must not contain undefined symbols," + echo "*** because either the platform does not support them or" + echo "*** it was explicitly requested with -no-undefined," + echo "*** libtool will only create a static version of it." + if test no = "$build_old_libs"; then + oldlibs=$output_objdir/$libname.$libext + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + fi + fi + # Done checking deplibs! + deplibs=$newdeplibs + fi + # Time to change all our "foo.ltframework" stuff back to "-framework foo" + case $host in + *-*-darwin*) + newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + ;; + esac + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $deplibs " in + *" -L$path/$objdir "*) + func_append new_libs " -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) func_append new_libs " $deplib" ;; + esac + ;; + *) func_append new_libs " $deplib" ;; + esac + done + deplibs=$new_libs + + # All the library-specific variables (install_libdir is set above). + library_names= + old_library= + dlname= + + # Test again, we may have decided not to build it any more + if test yes = "$build_libtool_libs"; then + # Remove $wl instances when linking with ld. + # FIXME: should test the right _cmds variable. + case $archive_cmds in + *\$LD\ *) wl= ;; + esac + if test yes = "$hardcode_into_libs"; then + # Hardcode the library paths + hardcode_libdirs= + dep_rpath= + rpath=$finalize_rpath + test relink = "$opt_mode" || rpath=$compile_rpath$rpath + for libdir in $rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + func_replace_sysroot "$libdir" + libdir=$func_replace_sysroot_result + if test -z "$hardcode_libdirs"; then + hardcode_libdirs=$libdir + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + func_append dep_rpath " $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) func_append perm_rpath " $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir=$hardcode_libdirs + eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" + fi + if test -n "$runpath_var" && test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + func_append rpath "$dir:" + done + eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" + fi + test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" + fi + + shlibpath=$finalize_shlibpath + test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath + if test -n "$shlibpath"; then + eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" + fi + + # Get the real and link names of the library. + eval shared_ext=\"$shrext_cmds\" + eval library_names=\"$library_names_spec\" + set dummy $library_names + shift + realname=$1 + shift + + if test -n "$soname_spec"; then + eval soname=\"$soname_spec\" + else + soname=$realname + fi + if test -z "$dlname"; then + dlname=$soname + fi + + lib=$output_objdir/$realname + linknames= + for link + do + func_append linknames " $link" + done + + # Use standard objects if they are pic + test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` + test "X$libobjs" = "X " && libobjs= + + delfiles= + if test -n "$export_symbols" && test -n "$include_expsyms"; then + $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" + export_symbols=$output_objdir/$libname.uexp + func_append delfiles " $export_symbols" + fi + + orig_export_symbols= + case $host_os in + cygwin* | mingw* | cegcc*) + if test -n "$export_symbols" && test -z "$export_symbols_regex"; then + # exporting using user supplied symfile + func_dll_def_p "$export_symbols" || { + # and it's NOT already a .def file. Must figure out + # which of the given symbols are data symbols and tag + # them as such. So, trigger use of export_symbols_cmds. + # export_symbols gets reassigned inside the "prepare + # the list of exported symbols" if statement, so the + # include_expsyms logic still works. + orig_export_symbols=$export_symbols + export_symbols= + always_export_symbols=yes + } + fi + ;; + esac + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then + func_verbose "generating symbol list for '$libname.la'" + export_symbols=$output_objdir/$libname.exp + $opt_dry_run || $RM $export_symbols + cmds=$export_symbols_cmds + save_ifs=$IFS; IFS='~' + for cmd1 in $cmds; do + IFS=$save_ifs + # Take the normal branch if the nm_file_list_spec branch + # doesn't work or if tool conversion is not needed. + case $nm_file_list_spec~$to_tool_file_cmd in + *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) + try_normal_branch=yes + eval cmd=\"$cmd1\" + func_len " $cmd" + len=$func_len_result + ;; + *) + try_normal_branch=no + ;; + esac + if test yes = "$try_normal_branch" \ + && { test "$len" -lt "$max_cmd_len" \ + || test "$max_cmd_len" -le -1; } + then + func_show_eval "$cmd" 'exit $?' + skipped_export=false + elif test -n "$nm_file_list_spec"; then + func_basename "$output" + output_la=$func_basename_result + save_libobjs=$libobjs + save_output=$output + output=$output_objdir/$output_la.nm + func_to_tool_file "$output" + libobjs=$nm_file_list_spec$func_to_tool_file_result + func_append delfiles " $output" + func_verbose "creating $NM input file list: $output" + for obj in $save_libobjs; do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" + done > "$output" + eval cmd=\"$cmd1\" + func_show_eval "$cmd" 'exit $?' + output=$save_output + libobjs=$save_libobjs + skipped_export=false + else + # The command line is too long to execute in one step. + func_verbose "using reloadable object file for export list..." + skipped_export=: + # Break out early, otherwise skipped_export may be + # set to false by a later but shorter cmd. + break + fi + done + IFS=$save_ifs + if test -n "$export_symbols_regex" && test : != "$skipped_export"; then + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' + fi + fi + fi + + if test -n "$export_symbols" && test -n "$include_expsyms"; then + tmp_export_symbols=$export_symbols + test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols + $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' + fi + + if test : != "$skipped_export" && test -n "$orig_export_symbols"; then + # The given exports_symbols file has to be filtered, so filter it. + func_verbose "filter symbol list for '$libname.la' to tag DATA exports" + # FIXME: $output_objdir/$libname.filter potentially contains lots of + # 's' commands, which not all seds can handle. GNU sed should be fine + # though. Also, the filter scales superlinearly with the number of + # global variables. join(1) would be nice here, but unfortunately + # isn't a blessed tool. + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter + func_append delfiles " $export_symbols $output_objdir/$libname.filter" + export_symbols=$output_objdir/$libname.def + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols + fi + + tmp_deplibs= + for test_deplib in $deplibs; do + case " $convenience " in + *" $test_deplib "*) ;; + *) + func_append tmp_deplibs " $test_deplib" + ;; + esac + done + deplibs=$tmp_deplibs + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec" && + test yes = "$compiler_needs_object" && + test -z "$libobjs"; then + # extract the archives, so we have objects to list. + # TODO: could optimize this to just extract one archive. + whole_archive_flag_spec= + fi + if test -n "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + test "X$libobjs" = "X " && libobjs= + else + gentop=$output_objdir/${outputname}x + func_append generated " $gentop" + + func_extract_archives $gentop $convenience + func_append libobjs " $func_extract_archives_result" + test "X$libobjs" = "X " && libobjs= + fi + fi + + if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then + eval flag=\"$thread_safe_flag_spec\" + func_append linker_flags " $flag" + fi + + # Make a backup of the uninstalled library when relinking + if test relink = "$opt_mode"; then + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? + fi + + # Do each of the archive commands. + if test yes = "$module" && test -n "$module_cmds"; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + eval test_cmds=\"$module_expsym_cmds\" + cmds=$module_expsym_cmds + else + eval test_cmds=\"$module_cmds\" + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + eval test_cmds=\"$archive_expsym_cmds\" + cmds=$archive_expsym_cmds + else + eval test_cmds=\"$archive_cmds\" + cmds=$archive_cmds + fi + fi + + if test : != "$skipped_export" && + func_len " $test_cmds" && + len=$func_len_result && + test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + : + else + # The command line is too long to link in one step, link piecewise + # or, if using GNU ld and skipped_export is not :, use a linker + # script. + + # Save the value of $output and $libobjs because we want to + # use them later. If we have whole_archive_flag_spec, we + # want to use save_libobjs as it was before + # whole_archive_flag_spec was expanded, because we can't + # assume the linker understands whole_archive_flag_spec. + # This may have to be revisited, in case too many + # convenience libraries get linked in and end up exceeding + # the spec. + if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + fi + save_output=$output + func_basename "$output" + output_la=$func_basename_result + + # Clear the reloadable object creation command queue and + # initialize k to one. + test_cmds= + concat_cmds= + objlist= + last_robj= + k=1 + + if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then + output=$output_objdir/$output_la.lnkscript + func_verbose "creating GNU ld script: $output" + echo 'INPUT (' > $output + for obj in $save_libobjs + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" >> $output + done + echo ')' >> $output + func_append delfiles " $output" + func_to_tool_file "$output" + output=$func_to_tool_file_result + elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then + output=$output_objdir/$output_la.lnk + func_verbose "creating linker input file list: $output" + : > $output + set x $save_libobjs + shift + firstobj= + if test yes = "$compiler_needs_object"; then + firstobj="$1 " + shift + fi + for obj + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" >> $output + done + func_append delfiles " $output" + func_to_tool_file "$output" + output=$firstobj\"$file_list_spec$func_to_tool_file_result\" + else + if test -n "$save_libobjs"; then + func_verbose "creating reloadable object files..." + output=$output_objdir/$output_la-$k.$objext + eval test_cmds=\"$reload_cmds\" + func_len " $test_cmds" + len0=$func_len_result + len=$len0 + + # Loop over the list of objects to be linked. + for obj in $save_libobjs + do + func_len " $obj" + func_arith $len + $func_len_result + len=$func_arith_result + if test -z "$objlist" || + test "$len" -lt "$max_cmd_len"; then + func_append objlist " $obj" + else + # The command $test_cmds is almost too long, add a + # command to the queue. + if test 1 -eq "$k"; then + # The first file doesn't have a previous command to add. + reload_objs=$objlist + eval concat_cmds=\"$reload_cmds\" + else + # All subsequent reloadable object files will link in + # the last one created. + reload_objs="$objlist $last_robj" + eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" + fi + last_robj=$output_objdir/$output_la-$k.$objext + func_arith $k + 1 + k=$func_arith_result + output=$output_objdir/$output_la-$k.$objext + objlist=" $obj" + func_len " $last_robj" + func_arith $len0 + $func_len_result + len=$func_arith_result + fi + done + # Handle the remaining objects by creating one last + # reloadable object file. All subsequent reloadable object + # files will link in the last one created. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + reload_objs="$objlist $last_robj" + eval concat_cmds=\"\$concat_cmds$reload_cmds\" + if test -n "$last_robj"; then + eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" + fi + func_append delfiles " $output" + + else + output= + fi + + ${skipped_export-false} && { + func_verbose "generating symbol list for '$libname.la'" + export_symbols=$output_objdir/$libname.exp + $opt_dry_run || $RM $export_symbols + libobjs=$output + # Append the command to create the export file. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" + if test -n "$last_robj"; then + eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" + fi + } + + test -n "$save_libobjs" && + func_verbose "creating a temporary reloadable object file: $output" + + # Loop through the commands generated above and execute them. + save_ifs=$IFS; IFS='~' + for cmd in $concat_cmds; do + IFS=$save_ifs + $opt_quiet || { + func_quote_for_expand "$cmd" + eval "func_echo $func_quote_for_expand_result" + } + $opt_dry_run || eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test relink = "$opt_mode"; then + ( cd "$output_objdir" && \ + $RM "${realname}T" && \ + $MV "${realname}U" "$realname" ) + fi + + exit $lt_exit + } + done + IFS=$save_ifs + + if test -n "$export_symbols_regex" && ${skipped_export-false}; then + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' + fi + fi + + ${skipped_export-false} && { + if test -n "$export_symbols" && test -n "$include_expsyms"; then + tmp_export_symbols=$export_symbols + test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols + $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' + fi + + if test -n "$orig_export_symbols"; then + # The given exports_symbols file has to be filtered, so filter it. + func_verbose "filter symbol list for '$libname.la' to tag DATA exports" + # FIXME: $output_objdir/$libname.filter potentially contains lots of + # 's' commands, which not all seds can handle. GNU sed should be fine + # though. Also, the filter scales superlinearly with the number of + # global variables. join(1) would be nice here, but unfortunately + # isn't a blessed tool. + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter + func_append delfiles " $export_symbols $output_objdir/$libname.filter" + export_symbols=$output_objdir/$libname.def + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols + fi + } + + libobjs=$output + # Restore the value of output. + output=$save_output + + if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + test "X$libobjs" = "X " && libobjs= + fi + # Expand the library linking commands again to reset the + # value of $libobjs for piecewise linking. + + # Do each of the archive commands. + if test yes = "$module" && test -n "$module_cmds"; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + cmds=$module_expsym_cmds + else + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + cmds=$archive_expsym_cmds + else + cmds=$archive_cmds + fi + fi + fi + + if test -n "$delfiles"; then + # Append the command to remove temporary files to $cmds. + eval cmds=\"\$cmds~\$RM $delfiles\" + fi + + # Add any objects from preloaded convenience libraries + if test -n "$dlprefiles"; then + gentop=$output_objdir/${outputname}x + func_append generated " $gentop" + + func_extract_archives $gentop $dlprefiles + func_append libobjs " $func_extract_archives_result" + test "X$libobjs" = "X " && libobjs= + fi + + save_ifs=$IFS; IFS='~' + for cmd in $cmds; do + IFS=$sp$nl + eval cmd=\"$cmd\" + IFS=$save_ifs + $opt_quiet || { + func_quote_for_expand "$cmd" + eval "func_echo $func_quote_for_expand_result" + } + $opt_dry_run || eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test relink = "$opt_mode"; then + ( cd "$output_objdir" && \ + $RM "${realname}T" && \ + $MV "${realname}U" "$realname" ) + fi + + exit $lt_exit + } + done + IFS=$save_ifs + + # Restore the uninstalled library and exit + if test relink = "$opt_mode"; then + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? + + if test -n "$convenience"; then + if test -z "$whole_archive_flag_spec"; then + func_show_eval '${RM}r "$gentop"' + fi + fi + + exit $EXIT_SUCCESS + fi + + # Create links to the real library. + for linkname in $linknames; do + if test "$realname" != "$linkname"; then + func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' + fi + done + + # If -module or -export-dynamic was specified, set the dlname. + if test yes = "$module" || test yes = "$export_dynamic"; then + # On all known operating systems, these are identical. + dlname=$soname + fi + fi + ;; + + obj) + if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then + func_warning "'-dlopen' is ignored for objects" + fi + + case " $deplibs" in + *\ -l* | *\ -L*) + func_warning "'-l' and '-L' are ignored for objects" ;; + esac + + test -n "$rpath" && \ + func_warning "'-rpath' is ignored for objects" + + test -n "$xrpath" && \ + func_warning "'-R' is ignored for objects" + + test -n "$vinfo" && \ + func_warning "'-version-info' is ignored for objects" + + test -n "$release" && \ + func_warning "'-release' is ignored for objects" + + case $output in + *.lo) + test -n "$objs$old_deplibs" && \ + func_fatal_error "cannot build library object '$output' from non-libtool objects" + + libobj=$output + func_lo2o "$libobj" + obj=$func_lo2o_result + ;; + *) + libobj= + obj=$output + ;; + esac + + # Delete the old objects. + $opt_dry_run || $RM $obj $libobj + + # Objects from convenience libraries. This assumes + # single-version convenience libraries. Whenever we create + # different ones for PIC/non-PIC, this we'll have to duplicate + # the extraction. + reload_conv_objs= + gentop= + # if reload_cmds runs $LD directly, get rid of -Wl from + # whole_archive_flag_spec and hope we can get by with turning comma + # into space. + case $reload_cmds in + *\$LD[\ \$]*) wl= ;; + esac + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec"; then + eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" + test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` + reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags + else + gentop=$output_objdir/${obj}x + func_append generated " $gentop" + + func_extract_archives $gentop $convenience + reload_conv_objs="$reload_objs $func_extract_archives_result" + fi + fi + + # If we're not building shared, we need to use non_pic_objs + test yes = "$build_libtool_libs" || libobjs=$non_pic_objects + + # Create the old-style object. + reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs + + output=$obj + func_execute_cmds "$reload_cmds" 'exit $?' + + # Exit if we aren't doing a library object file. + if test -z "$libobj"; then + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + exit $EXIT_SUCCESS + fi + + test yes = "$build_libtool_libs" || { + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + # Create an invalid libtool object if no PIC, so that we don't + # accidentally link it into a program. + # $show "echo timestamp > $libobj" + # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? + exit $EXIT_SUCCESS + } + + if test -n "$pic_flag" || test default != "$pic_mode"; then + # Only do commands if we really have different PIC objects. + reload_objs="$libobjs $reload_conv_objs" + output=$libobj + func_execute_cmds "$reload_cmds" 'exit $?' + fi + + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + exit $EXIT_SUCCESS + ;; + + prog) + case $host in + *cygwin*) func_stripname '' '.exe' "$output" + output=$func_stripname_result.exe;; + esac + test -n "$vinfo" && \ + func_warning "'-version-info' is ignored for programs" + + test -n "$release" && \ + func_warning "'-release' is ignored for programs" + + $preload \ + && test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \ + && func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support." + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library is the System framework + compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` + finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` + ;; + esac + + case $host in + *-*-darwin*) + # Don't allow lazy linking, it breaks C++ global constructors + # But is supposedly fixed on 10.4 or later (yay!). + if test CXX = "$tagname"; then + case ${MACOSX_DEPLOYMENT_TARGET-10.0} in + 10.[0123]) + func_append compile_command " $wl-bind_at_load" + func_append finalize_command " $wl-bind_at_load" + ;; + esac + fi + # Time to change all our "foo.ltframework" stuff back to "-framework foo" + compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + ;; + esac + + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $compile_deplibs " in + *" -L$path/$objdir "*) + func_append new_libs " -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $compile_deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) func_append new_libs " $deplib" ;; + esac + ;; + *) func_append new_libs " $deplib" ;; + esac + done + compile_deplibs=$new_libs + + + func_append compile_command " $compile_deplibs" + func_append finalize_command " $finalize_deplibs" + + if test -n "$rpath$xrpath"; then + # If the user specified any rpath flags, then add them. + for libdir in $rpath $xrpath; do + # This is the magic to use -rpath. + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + done + fi + + # Now hardcode the library paths + rpath= + hardcode_libdirs= + for libdir in $compile_rpath $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs=$libdir + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + func_append rpath " $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) func_append perm_rpath " $libdir" ;; + esac + fi + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$libdir:"*) ;; + ::) dllsearchpath=$libdir;; + *) func_append dllsearchpath ":$libdir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + ::) dllsearchpath=$testbindir;; + *) func_append dllsearchpath ":$testbindir";; + esac + ;; + esac + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir=$hardcode_libdirs + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + compile_rpath=$rpath + + rpath= + hardcode_libdirs= + for libdir in $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs=$libdir + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + func_append rpath " $flag" + fi + elif test -n "$runpath_var"; then + case "$finalize_perm_rpath " in + *" $libdir "*) ;; + *) func_append finalize_perm_rpath " $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir=$hardcode_libdirs + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + finalize_rpath=$rpath + + if test -n "$libobjs" && test yes = "$build_old_libs"; then + # Transform all the library objects into standard objects. + compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` + finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` + fi + + func_generate_dlsyms "$outputname" "@PROGRAM@" false + + # template prelinking step + if test -n "$prelink_cmds"; then + func_execute_cmds "$prelink_cmds" 'exit $?' + fi + + wrappers_required=: + case $host in + *cegcc* | *mingw32ce*) + # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. + wrappers_required=false + ;; + *cygwin* | *mingw* ) + test yes = "$build_libtool_libs" || wrappers_required=false + ;; + *) + if test no = "$need_relink" || test yes != "$build_libtool_libs"; then + wrappers_required=false + fi + ;; + esac + $wrappers_required || { + # Replace the output file specification. + compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` + link_command=$compile_command$compile_rpath + + # We have no uninstalled library dependencies, so finalize right now. + exit_status=0 + func_show_eval "$link_command" 'exit_status=$?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + + # Delete the generated files. + if test -f "$output_objdir/${outputname}S.$objext"; then + func_show_eval '$RM "$output_objdir/${outputname}S.$objext"' + fi + + exit $exit_status + } + + if test -n "$compile_shlibpath$finalize_shlibpath"; then + compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" + fi + if test -n "$finalize_shlibpath"; then + finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" + fi + + compile_var= + finalize_var= + if test -n "$runpath_var"; then + if test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + func_append rpath "$dir:" + done + compile_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + if test -n "$finalize_perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $finalize_perm_rpath; do + func_append rpath "$dir:" + done + finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + fi + + if test yes = "$no_install"; then + # We don't need to create a wrapper script. + link_command=$compile_var$compile_command$compile_rpath + # Replace the output file specification. + link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` + # Delete the old output file. + $opt_dry_run || $RM $output + # Link the executable and exit + func_show_eval "$link_command" 'exit $?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + + exit $EXIT_SUCCESS + fi + + case $hardcode_action,$fast_install in + relink,*) + # Fast installation is not supported + link_command=$compile_var$compile_command$compile_rpath + relink_command=$finalize_var$finalize_command$finalize_rpath + + func_warning "this platform does not like uninstalled shared libraries" + func_warning "'$output' will be relinked during installation" + ;; + *,yes) + link_command=$finalize_var$compile_command$finalize_rpath + relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` + ;; + *,no) + link_command=$compile_var$compile_command$compile_rpath + relink_command=$finalize_var$finalize_command$finalize_rpath + ;; + *,needless) + link_command=$finalize_var$compile_command$finalize_rpath + relink_command= + ;; + esac + + # Replace the output file specification. + link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` + + # Delete the old output files. + $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname + + func_show_eval "$link_command" 'exit $?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output_objdir/$outputname" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + + # Now create the wrapper script. + func_verbose "creating $output" + + # Quote the relink command for shipping. + if test -n "$relink_command"; then + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + func_quote_for_eval "$var_value" + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + fi + done + relink_command="(cd `pwd`; $relink_command)" + relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` + fi + + # Only actually do things if not in dry run mode. + $opt_dry_run || { + # win32 will think the script is a binary if it has + # a .exe suffix, so we strip it off here. + case $output in + *.exe) func_stripname '' '.exe' "$output" + output=$func_stripname_result ;; + esac + # test for cygwin because mv fails w/o .exe extensions + case $host in + *cygwin*) + exeext=.exe + func_stripname '' '.exe' "$outputname" + outputname=$func_stripname_result ;; + *) exeext= ;; + esac + case $host in + *cygwin* | *mingw* ) + func_dirname_and_basename "$output" "" "." + output_name=$func_basename_result + output_path=$func_dirname_result + cwrappersource=$output_path/$objdir/lt-$output_name.c + cwrapper=$output_path/$output_name.exe + $RM $cwrappersource $cwrapper + trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 + + func_emit_cwrapperexe_src > $cwrappersource + + # The wrapper executable is built using the $host compiler, + # because it contains $host paths and files. If cross- + # compiling, it, like the target executable, must be + # executed on the $host or under an emulation environment. + $opt_dry_run || { + $LTCC $LTCFLAGS -o $cwrapper $cwrappersource + $STRIP $cwrapper + } + + # Now, create the wrapper script for func_source use: + func_ltwrapper_scriptname $cwrapper + $RM $func_ltwrapper_scriptname_result + trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 + $opt_dry_run || { + # note: this script will not be executed, so do not chmod. + if test "x$build" = "x$host"; then + $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result + else + func_emit_wrapper no > $func_ltwrapper_scriptname_result + fi + } + ;; + * ) + $RM $output + trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 + + func_emit_wrapper no > $output + chmod +x $output + ;; + esac + } + exit $EXIT_SUCCESS + ;; + esac + + # See if we need to build an old-fashioned archive. + for oldlib in $oldlibs; do + + case $build_libtool_libs in + convenience) + oldobjs="$libobjs_save $symfileobj" + addlibs=$convenience + build_libtool_libs=no + ;; + module) + oldobjs=$libobjs_save + addlibs=$old_convenience + build_libtool_libs=no + ;; + *) + oldobjs="$old_deplibs $non_pic_objects" + $preload && test -f "$symfileobj" \ + && func_append oldobjs " $symfileobj" + addlibs=$old_convenience + ;; + esac + + if test -n "$addlibs"; then + gentop=$output_objdir/${outputname}x + func_append generated " $gentop" + + func_extract_archives $gentop $addlibs + func_append oldobjs " $func_extract_archives_result" + fi + + # Do each command in the archive commands. + if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then + cmds=$old_archive_from_new_cmds + else + + # Add any objects from preloaded convenience libraries + if test -n "$dlprefiles"; then + gentop=$output_objdir/${outputname}x + func_append generated " $gentop" + + func_extract_archives $gentop $dlprefiles + func_append oldobjs " $func_extract_archives_result" + fi + + # POSIX demands no paths to be encoded in archives. We have + # to avoid creating archives with duplicate basenames if we + # might have to extract them afterwards, e.g., when creating a + # static archive out of a convenience library, or when linking + # the entirety of a libtool archive into another (currently + # not supported by libtool). + if (for obj in $oldobjs + do + func_basename "$obj" + $ECHO "$func_basename_result" + done | sort | sort -uc >/dev/null 2>&1); then + : + else + echo "copying selected object files to avoid basename conflicts..." + gentop=$output_objdir/${outputname}x + func_append generated " $gentop" + func_mkdir_p "$gentop" + save_oldobjs=$oldobjs + oldobjs= + counter=1 + for obj in $save_oldobjs + do + func_basename "$obj" + objbase=$func_basename_result + case " $oldobjs " in + " ") oldobjs=$obj ;; + *[\ /]"$objbase "*) + while :; do + # Make sure we don't pick an alternate name that also + # overlaps. + newobj=lt$counter-$objbase + func_arith $counter + 1 + counter=$func_arith_result + case " $oldobjs " in + *[\ /]"$newobj "*) ;; + *) if test ! -f "$gentop/$newobj"; then break; fi ;; + esac + done + func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" + func_append oldobjs " $gentop/$newobj" + ;; + *) func_append oldobjs " $obj" ;; + esac + done + fi + func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 + tool_oldlib=$func_to_tool_file_result + eval cmds=\"$old_archive_cmds\" + + func_len " $cmds" + len=$func_len_result + if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + cmds=$old_archive_cmds + elif test -n "$archiver_list_spec"; then + func_verbose "using command file archive linking..." + for obj in $oldobjs + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" + done > $output_objdir/$libname.libcmd + func_to_tool_file "$output_objdir/$libname.libcmd" + oldobjs=" $archiver_list_spec$func_to_tool_file_result" + cmds=$old_archive_cmds + else + # the command line is too long to link in one step, link in parts + func_verbose "using piecewise archive linking..." + save_RANLIB=$RANLIB + RANLIB=: + objlist= + concat_cmds= + save_oldobjs=$oldobjs + oldobjs= + # Is there a better way of finding the last object in the list? + for obj in $save_oldobjs + do + last_oldobj=$obj + done + eval test_cmds=\"$old_archive_cmds\" + func_len " $test_cmds" + len0=$func_len_result + len=$len0 + for obj in $save_oldobjs + do + func_len " $obj" + func_arith $len + $func_len_result + len=$func_arith_result + func_append objlist " $obj" + if test "$len" -lt "$max_cmd_len"; then + : + else + # the above command should be used before it gets too long + oldobjs=$objlist + if test "$obj" = "$last_oldobj"; then + RANLIB=$save_RANLIB + fi + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\$concat_cmds$old_archive_cmds\" + objlist= + len=$len0 + fi + done + RANLIB=$save_RANLIB + oldobjs=$objlist + if test -z "$oldobjs"; then + eval cmds=\"\$concat_cmds\" + else + eval cmds=\"\$concat_cmds~\$old_archive_cmds\" + fi + fi + fi + func_execute_cmds "$cmds" 'exit $?' + done + + test -n "$generated" && \ + func_show_eval "${RM}r$generated" + + # Now create the libtool archive. + case $output in + *.la) + old_library= + test yes = "$build_old_libs" && old_library=$libname.$libext + func_verbose "creating $output" + + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + func_quote_for_eval "$var_value" + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + fi + done + # Quote the link command for shipping. + relink_command="(cd `pwd`; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" + relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` + if test yes = "$hardcode_automatic"; then + relink_command= + fi + + # Only create the output if not a dry run. + $opt_dry_run || { + for installed in no yes; do + if test yes = "$installed"; then + if test -z "$install_libdir"; then + break + fi + output=$output_objdir/${outputname}i + # Replace all uninstalled libtool libraries with the installed ones + newdependency_libs= + for deplib in $dependency_libs; do + case $deplib in + *.la) + func_basename "$deplib" + name=$func_basename_result + func_resolve_sysroot "$deplib" + eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` + test -z "$libdir" && \ + func_fatal_error "'$deplib' is not a valid libtool archive" + func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" + ;; + -L*) + func_stripname -L '' "$deplib" + func_replace_sysroot "$func_stripname_result" + func_append newdependency_libs " -L$func_replace_sysroot_result" + ;; + -R*) + func_stripname -R '' "$deplib" + func_replace_sysroot "$func_stripname_result" + func_append newdependency_libs " -R$func_replace_sysroot_result" + ;; + *) func_append newdependency_libs " $deplib" ;; + esac + done + dependency_libs=$newdependency_libs + newdlfiles= + + for lib in $dlfiles; do + case $lib in + *.la) + func_basename "$lib" + name=$func_basename_result + eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + test -z "$libdir" && \ + func_fatal_error "'$lib' is not a valid libtool archive" + func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" + ;; + *) func_append newdlfiles " $lib" ;; + esac + done + dlfiles=$newdlfiles + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + *.la) + # Only pass preopened files to the pseudo-archive (for + # eventual linking with the app. that links it) if we + # didn't already link the preopened objects directly into + # the library: + func_basename "$lib" + name=$func_basename_result + eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + test -z "$libdir" && \ + func_fatal_error "'$lib' is not a valid libtool archive" + func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" + ;; + esac + done + dlprefiles=$newdlprefiles + else + newdlfiles= + for lib in $dlfiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; + *) abs=`pwd`"/$lib" ;; + esac + func_append newdlfiles " $abs" + done + dlfiles=$newdlfiles + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; + *) abs=`pwd`"/$lib" ;; + esac + func_append newdlprefiles " $abs" + done + dlprefiles=$newdlprefiles + fi + $RM $output + # place dlname in correct position for cygwin + # In fact, it would be nice if we could use this code for all target + # systems that can't hard-code library paths into their executables + # and that have no shared library path variable independent of PATH, + # but it turns out we can't easily determine that from inspecting + # libtool variables, so we have to hard-code the OSs to which it + # applies here; at the moment, that means platforms that use the PE + # object format with DLL files. See the long comment at the top of + # tests/bindir.at for full details. + tdlname=$dlname + case $host,$output,$installed,$module,$dlname in + *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) + # If a -bindir argument was supplied, place the dll there. + if test -n "$bindir"; then + func_relative_path "$install_libdir" "$bindir" + tdlname=$func_relative_path_result/$dlname + else + # Otherwise fall back on heuristic. + tdlname=../bin/$dlname + fi + ;; + esac + $ECHO > $output "\ +# $outputname - a libtool library file +# Generated by $PROGRAM (GNU $PACKAGE) $VERSION +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# The name that we can dlopen(3). +dlname='$tdlname' + +# Names of this library. +library_names='$library_names' + +# The name of the static archive. +old_library='$old_library' + +# Linker flags that cannot go in dependency_libs. +inherited_linker_flags='$new_inherited_linker_flags' + +# Libraries that this one depends upon. +dependency_libs='$dependency_libs' + +# Names of additional weak libraries provided by this library +weak_library_names='$weak_libs' + +# Version information for $libname. +current=$current +age=$age +revision=$revision + +# Is this an already installed library? +installed=$installed + +# Should we warn about portability when linking against -modules? +shouldnotlink=$module + +# Files to dlopen/dlpreopen +dlopen='$dlfiles' +dlpreopen='$dlprefiles' + +# Directory that this library needs to be installed in: +libdir='$install_libdir'" + if test no,yes = "$installed,$need_relink"; then + $ECHO >> $output "\ +relink_command=\"$relink_command\"" + fi + done + } + + # Do a symbolic link so that the libtool archive can be found in + # LD_LIBRARY_PATH before the program is installed. + func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' + ;; + esac + exit $EXIT_SUCCESS +} + +if test link = "$opt_mode" || test relink = "$opt_mode"; then + func_mode_link ${1+"$@"} +fi + + +# func_mode_uninstall arg... +func_mode_uninstall () +{ + $debug_cmd + + RM=$nonopt + files= + rmforce=false + exit_status=0 + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic=$magic + + for arg + do + case $arg in + -f) func_append RM " $arg"; rmforce=: ;; + -*) func_append RM " $arg" ;; + *) func_append files " $arg" ;; + esac + done + + test -z "$RM" && \ + func_fatal_help "you must specify an RM program" + + rmdirs= + + for file in $files; do + func_dirname "$file" "" "." + dir=$func_dirname_result + if test . = "$dir"; then + odir=$objdir + else + odir=$dir/$objdir + fi + func_basename "$file" + name=$func_basename_result + test uninstall = "$opt_mode" && odir=$dir + + # Remember odir for removal later, being careful to avoid duplicates + if test clean = "$opt_mode"; then + case " $rmdirs " in + *" $odir "*) ;; + *) func_append rmdirs " $odir" ;; + esac + fi + + # Don't error if the file doesn't exist and rm -f was used. + if { test -L "$file"; } >/dev/null 2>&1 || + { test -h "$file"; } >/dev/null 2>&1 || + test -f "$file"; then + : + elif test -d "$file"; then + exit_status=1 + continue + elif $rmforce; then + continue + fi + + rmfiles=$file + + case $name in + *.la) + # Possibly a libtool archive, so verify it. + if func_lalib_p "$file"; then + func_source $dir/$name + + # Delete the libtool libraries and symlinks. + for n in $library_names; do + func_append rmfiles " $odir/$n" + done + test -n "$old_library" && func_append rmfiles " $odir/$old_library" + + case $opt_mode in + clean) + case " $library_names " in + *" $dlname "*) ;; + *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; + esac + test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" + ;; + uninstall) + if test -n "$library_names"; then + # Do each command in the postuninstall commands. + func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1' + fi + + if test -n "$old_library"; then + # Do each command in the old_postuninstall commands. + func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1' + fi + # FIXME: should reinstall the best remaining shared library. + ;; + esac + fi + ;; + + *.lo) + # Possibly a libtool object, so verify it. + if func_lalib_p "$file"; then + + # Read the .lo file + func_source $dir/$name + + # Add PIC object to the list of files to remove. + if test -n "$pic_object" && test none != "$pic_object"; then + func_append rmfiles " $dir/$pic_object" + fi + + # Add non-PIC object to the list of files to remove. + if test -n "$non_pic_object" && test none != "$non_pic_object"; then + func_append rmfiles " $dir/$non_pic_object" + fi + fi + ;; + + *) + if test clean = "$opt_mode"; then + noexename=$name + case $file in + *.exe) + func_stripname '' '.exe' "$file" + file=$func_stripname_result + func_stripname '' '.exe' "$name" + noexename=$func_stripname_result + # $file with .exe has already been added to rmfiles, + # add $file without .exe + func_append rmfiles " $file" + ;; + esac + # Do a test to see if this is a libtool program. + if func_ltwrapper_p "$file"; then + if func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + relink_command= + func_source $func_ltwrapper_scriptname_result + func_append rmfiles " $func_ltwrapper_scriptname_result" + else + relink_command= + func_source $dir/$noexename + fi + + # note $name still contains .exe if it was in $file originally + # as does the version of $file that was added into $rmfiles + func_append rmfiles " $odir/$name $odir/${name}S.$objext" + if test yes = "$fast_install" && test -n "$relink_command"; then + func_append rmfiles " $odir/lt-$name" + fi + if test "X$noexename" != "X$name"; then + func_append rmfiles " $odir/lt-$noexename.c" + fi + fi + fi + ;; + esac + func_show_eval "$RM $rmfiles" 'exit_status=1' + done + + # Try to remove the $objdir's in the directories where we deleted files + for dir in $rmdirs; do + if test -d "$dir"; then + func_show_eval "rmdir $dir >/dev/null 2>&1" + fi + done + + exit $exit_status +} + +if test uninstall = "$opt_mode" || test clean = "$opt_mode"; then + func_mode_uninstall ${1+"$@"} +fi + +test -z "$opt_mode" && { + help=$generic_help + func_fatal_help "you must specify a MODE" +} + +test -z "$exec_cmd" && \ + func_fatal_help "invalid operation mode '$opt_mode'" + +if test -n "$exec_cmd"; then + eval exec "$exec_cmd" + exit $EXIT_FAILURE +fi + +exit $exit_status + + +# The TAGs below are defined such that we never get into a situation +# where we disable both kinds of libraries. Given conflicting +# choices, we go for a static library, that is the most portable, +# since we can't tell whether shared libraries were disabled because +# the user asked for that or because the platform doesn't support +# them. This is particularly important on AIX, because we don't +# support having both static and shared libraries enabled at the same +# time on that platform, so we default to a shared-only configuration. +# If a disable-shared tag is given, we'll fallback to a static-only +# configuration. But we'll never go from static-only to shared-only. + +# ### BEGIN LIBTOOL TAG CONFIG: disable-shared +build_libtool_libs=no +build_old_libs=yes +# ### END LIBTOOL TAG CONFIG: disable-shared + +# ### BEGIN LIBTOOL TAG CONFIG: disable-static +build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` +# ### END LIBTOOL TAG CONFIG: disable-static + +# Local Variables: +# mode:shell-script +# sh-indentation:2 +# End: diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/m4/libtool.m4 b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/m4/libtool.m4 new file mode 100644 index 00000000..a644432f --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/m4/libtool.m4 @@ -0,0 +1,8372 @@ +# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- +# +# Copyright (C) 1996-2001, 2003-2015 Free Software Foundation, Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +m4_define([_LT_COPYING], [dnl +# Copyright (C) 2014 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# GNU Libtool is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of of the License, or +# (at your option) any later version. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program or library that is built +# using GNU Libtool, you may include this file under the same +# distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +]) + +# serial 58 LT_INIT + + +# LT_PREREQ(VERSION) +# ------------------ +# Complain and exit if this libtool version is less that VERSION. +m4_defun([LT_PREREQ], +[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, + [m4_default([$3], + [m4_fatal([Libtool version $1 or higher is required], + 63)])], + [$2])]) + + +# _LT_CHECK_BUILDDIR +# ------------------ +# Complain if the absolute build directory name contains unusual characters +m4_defun([_LT_CHECK_BUILDDIR], +[case `pwd` in + *\ * | *\ *) + AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; +esac +]) + + +# LT_INIT([OPTIONS]) +# ------------------ +AC_DEFUN([LT_INIT], +[AC_PREREQ([2.62])dnl We use AC_PATH_PROGS_FEATURE_CHECK +AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl +AC_BEFORE([$0], [LT_LANG])dnl +AC_BEFORE([$0], [LT_OUTPUT])dnl +AC_BEFORE([$0], [LTDL_INIT])dnl +m4_require([_LT_CHECK_BUILDDIR])dnl + +dnl Autoconf doesn't catch unexpanded LT_ macros by default: +m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl +m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl +dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 +dnl unless we require an AC_DEFUNed macro: +AC_REQUIRE([LTOPTIONS_VERSION])dnl +AC_REQUIRE([LTSUGAR_VERSION])dnl +AC_REQUIRE([LTVERSION_VERSION])dnl +AC_REQUIRE([LTOBSOLETE_VERSION])dnl +m4_require([_LT_PROG_LTMAIN])dnl + +_LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) + +dnl Parse OPTIONS +_LT_SET_OPTIONS([$0], [$1]) + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS=$ltmain + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' +AC_SUBST(LIBTOOL)dnl + +_LT_SETUP + +# Only expand once: +m4_define([LT_INIT]) +])# LT_INIT + +# Old names: +AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) +AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_PROG_LIBTOOL], []) +dnl AC_DEFUN([AM_PROG_LIBTOOL], []) + + +# _LT_PREPARE_CC_BASENAME +# ----------------------- +m4_defun([_LT_PREPARE_CC_BASENAME], [ +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +func_cc_basename () +{ + for cc_temp in @S|@*""; do + case $cc_temp in + compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; + distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; + \-*) ;; + *) break;; + esac + done + func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +} +])# _LT_PREPARE_CC_BASENAME + + +# _LT_CC_BASENAME(CC) +# ------------------- +# It would be clearer to call AC_REQUIREs from _LT_PREPARE_CC_BASENAME, +# but that macro is also expanded into generated libtool script, which +# arranges for $SED and $ECHO to be set by different means. +m4_defun([_LT_CC_BASENAME], +[m4_require([_LT_PREPARE_CC_BASENAME])dnl +AC_REQUIRE([_LT_DECL_SED])dnl +AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl +func_cc_basename $1 +cc_basename=$func_cc_basename_result +]) + + +# _LT_FILEUTILS_DEFAULTS +# ---------------------- +# It is okay to use these file commands and assume they have been set +# sensibly after 'm4_require([_LT_FILEUTILS_DEFAULTS])'. +m4_defun([_LT_FILEUTILS_DEFAULTS], +[: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} +])# _LT_FILEUTILS_DEFAULTS + + +# _LT_SETUP +# --------- +m4_defun([_LT_SETUP], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl +AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl + +_LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl +dnl +_LT_DECL([], [host_alias], [0], [The host system])dnl +_LT_DECL([], [host], [0])dnl +_LT_DECL([], [host_os], [0])dnl +dnl +_LT_DECL([], [build_alias], [0], [The build system])dnl +_LT_DECL([], [build], [0])dnl +_LT_DECL([], [build_os], [0])dnl +dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([LT_PATH_LD])dnl +AC_REQUIRE([LT_PATH_NM])dnl +dnl +AC_REQUIRE([AC_PROG_LN_S])dnl +test -z "$LN_S" && LN_S="ln -s" +_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl +dnl +AC_REQUIRE([LT_CMD_MAX_LEN])dnl +_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl +_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl +dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_CHECK_SHELL_FEATURES])dnl +m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl +m4_require([_LT_CMD_RELOAD])dnl +m4_require([_LT_CHECK_MAGIC_METHOD])dnl +m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl +m4_require([_LT_CMD_OLD_ARCHIVE])dnl +m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl +m4_require([_LT_WITH_SYSROOT])dnl +m4_require([_LT_CMD_TRUNCATE])dnl + +_LT_CONFIG_LIBTOOL_INIT([ +# See if we are running on zsh, and set the options that allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST +fi +]) +if test -n "${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST +fi + +_LT_CHECK_OBJDIR + +m4_require([_LT_TAG_COMPILER])dnl + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test set != "${COLLECT_NAMES+set}"; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a '.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld=$lt_cv_prog_gnu_ld + +old_CC=$CC +old_CFLAGS=$CFLAGS + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +_LT_CC_BASENAME([$compiler]) + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + _LT_PATH_MAGIC + fi + ;; +esac + +# Use C for the default configuration in the libtool script +LT_SUPPORTED_TAG([CC]) +_LT_LANG_C_CONFIG +_LT_LANG_DEFAULT_CONFIG +_LT_CONFIG_COMMANDS +])# _LT_SETUP + + +# _LT_PREPARE_SED_QUOTE_VARS +# -------------------------- +# Define a few sed substitution that help us do robust quoting. +m4_defun([_LT_PREPARE_SED_QUOTE_VARS], +[# Backslashify metacharacters that are still active within +# double-quoted strings. +sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\([["`\\]]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' +]) + +# _LT_PROG_LTMAIN +# --------------- +# Note that this code is called both from 'configure', and 'config.status' +# now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, +# 'config.status' has no value for ac_aux_dir unless we are using Automake, +# so we pass a copy along to make sure it has a sensible value anyway. +m4_defun([_LT_PROG_LTMAIN], +[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl +_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) +ltmain=$ac_aux_dir/ltmain.sh +])# _LT_PROG_LTMAIN + + +## ------------------------------------- ## +## Accumulate code for creating libtool. ## +## ------------------------------------- ## + +# So that we can recreate a full libtool script including additional +# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS +# in macros and then make a single call at the end using the 'libtool' +# label. + + +# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) +# ---------------------------------------- +# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. +m4_define([_LT_CONFIG_LIBTOOL_INIT], +[m4_ifval([$1], + [m4_append([_LT_OUTPUT_LIBTOOL_INIT], + [$1 +])])]) + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_INIT]) + + +# _LT_CONFIG_LIBTOOL([COMMANDS]) +# ------------------------------ +# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. +m4_define([_LT_CONFIG_LIBTOOL], +[m4_ifval([$1], + [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], + [$1 +])])]) + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) + + +# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) +# ----------------------------------------------------- +m4_defun([_LT_CONFIG_SAVE_COMMANDS], +[_LT_CONFIG_LIBTOOL([$1]) +_LT_CONFIG_LIBTOOL_INIT([$2]) +]) + + +# _LT_FORMAT_COMMENT([COMMENT]) +# ----------------------------- +# Add leading comment marks to the start of each line, and a trailing +# full-stop to the whole comment if one is not present already. +m4_define([_LT_FORMAT_COMMENT], +[m4_ifval([$1], [ +m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], + [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) +)]) + + + +## ------------------------ ## +## FIXME: Eliminate VARNAME ## +## ------------------------ ## + + +# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) +# ------------------------------------------------------------------- +# CONFIGNAME is the name given to the value in the libtool script. +# VARNAME is the (base) name used in the configure script. +# VALUE may be 0, 1 or 2 for a computed quote escaped value based on +# VARNAME. Any other value will be used directly. +m4_define([_LT_DECL], +[lt_if_append_uniq([lt_decl_varnames], [$2], [, ], + [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], + [m4_ifval([$1], [$1], [$2])]) + lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) + m4_ifval([$4], + [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) + lt_dict_add_subkey([lt_decl_dict], [$2], + [tagged?], [m4_ifval([$5], [yes], [no])])]) +]) + + +# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) +# -------------------------------------------------------- +m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) + + +# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ +m4_define([lt_decl_tag_varnames], +[_lt_decl_filter([tagged?], [yes], $@)]) + + +# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) +# --------------------------------------------------------- +m4_define([_lt_decl_filter], +[m4_case([$#], + [0], [m4_fatal([$0: too few arguments: $#])], + [1], [m4_fatal([$0: too few arguments: $#: $1])], + [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], + [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], + [lt_dict_filter([lt_decl_dict], $@)])[]dnl +]) + + +# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) +# -------------------------------------------------- +m4_define([lt_decl_quote_varnames], +[_lt_decl_filter([value], [1], $@)]) + + +# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- +m4_define([lt_decl_dquote_varnames], +[_lt_decl_filter([value], [2], $@)]) + + +# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- +m4_define([lt_decl_varnames_tagged], +[m4_assert([$# <= 2])dnl +_$0(m4_quote(m4_default([$1], [[, ]])), + m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), + m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) +m4_define([_lt_decl_varnames_tagged], +[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) + + +# lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ +m4_define([lt_decl_all_varnames], +[_$0(m4_quote(m4_default([$1], [[, ]])), + m4_if([$2], [], + m4_quote(lt_decl_varnames), + m4_quote(m4_shift($@))))[]dnl +]) +m4_define([_lt_decl_all_varnames], +[lt_join($@, lt_decl_varnames_tagged([$1], + lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl +]) + + +# _LT_CONFIG_STATUS_DECLARE([VARNAME]) +# ------------------------------------ +# Quote a variable value, and forward it to 'config.status' so that its +# declaration there will have the same value as in 'configure'. VARNAME +# must have a single quote delimited value for this to work. +m4_define([_LT_CONFIG_STATUS_DECLARE], +[$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) + + +# _LT_CONFIG_STATUS_DECLARATIONS +# ------------------------------ +# We delimit libtool config variables with single quotes, so when +# we write them to config.status, we have to be sure to quote all +# embedded single quotes properly. In configure, this macro expands +# each variable declared with _LT_DECL (and _LT_TAGDECL) into: +# +# ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' +m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], +[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), + [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) + + +# _LT_LIBTOOL_TAGS +# ---------------- +# Output comment and list of tags supported by the script +m4_defun([_LT_LIBTOOL_TAGS], +[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl +available_tags='_LT_TAGS'dnl +]) + + +# _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) +# ----------------------------------- +# Extract the dictionary values for VARNAME (optionally with TAG) and +# expand to a commented shell variable setting: +# +# # Some comment about what VAR is for. +# visible_name=$lt_internal_name +m4_define([_LT_LIBTOOL_DECLARE], +[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], + [description])))[]dnl +m4_pushdef([_libtool_name], + m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl +m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), + [0], [_libtool_name=[$]$1], + [1], [_libtool_name=$lt_[]$1], + [2], [_libtool_name=$lt_[]$1], + [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl +m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl +]) + + +# _LT_LIBTOOL_CONFIG_VARS +# ----------------------- +# Produce commented declarations of non-tagged libtool config variables +# suitable for insertion in the LIBTOOL CONFIG section of the 'libtool' +# script. Tagged libtool config variables (even for the LIBTOOL CONFIG +# section) are produced by _LT_LIBTOOL_TAG_VARS. +m4_defun([_LT_LIBTOOL_CONFIG_VARS], +[m4_foreach([_lt_var], + m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), + [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) + + +# _LT_LIBTOOL_TAG_VARS(TAG) +# ------------------------- +m4_define([_LT_LIBTOOL_TAG_VARS], +[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), + [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) + + +# _LT_TAGVAR(VARNAME, [TAGNAME]) +# ------------------------------ +m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) + + +# _LT_CONFIG_COMMANDS +# ------------------- +# Send accumulated output to $CONFIG_STATUS. Thanks to the lists of +# variables for single and double quote escaping we saved from calls +# to _LT_DECL, we can put quote escaped variables declarations +# into 'config.status', and then the shell code to quote escape them in +# for loops in 'config.status'. Finally, any additional code accumulated +# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. +m4_defun([_LT_CONFIG_COMMANDS], +[AC_PROVIDE_IFELSE([LT_OUTPUT], + dnl If the libtool generation code has been placed in $CONFIG_LT, + dnl instead of duplicating it all over again into config.status, + dnl then we will have config.status run $CONFIG_LT later, so it + dnl needs to know what name is stored there: + [AC_CONFIG_COMMANDS([libtool], + [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], + dnl If the libtool generation code is destined for config.status, + dnl expand the accumulated commands and init code now: + [AC_CONFIG_COMMANDS([libtool], + [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) +])#_LT_CONFIG_COMMANDS + + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], +[ + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +_LT_CONFIG_STATUS_DECLARATIONS +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$[]1 +_LTECHO_EOF' +} + +# Quote evaled strings. +for var in lt_decl_all_varnames([[ \ +]], lt_decl_quote_varnames); do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[[\\\\\\\`\\"\\\$]]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in lt_decl_all_varnames([[ \ +]], lt_decl_dquote_varnames); do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[[\\\\\\\`\\"\\\$]]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +_LT_OUTPUT_LIBTOOL_INIT +]) + +# _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) +# ------------------------------------ +# Generate a child script FILE with all initialization necessary to +# reuse the environment learned by the parent script, and make the +# file executable. If COMMENT is supplied, it is inserted after the +# '#!' sequence but before initialization text begins. After this +# macro, additional text can be appended to FILE to form the body of +# the child script. The macro ends with non-zero status if the +# file could not be fully written (such as if the disk is full). +m4_ifdef([AS_INIT_GENERATED], +[m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], +[m4_defun([_LT_GENERATED_FILE_INIT], +[m4_require([AS_PREPARE])]dnl +[m4_pushdef([AS_MESSAGE_LOG_FD])]dnl +[lt_write_fail=0 +cat >$1 <<_ASEOF || lt_write_fail=1 +#! $SHELL +# Generated by $as_me. +$2 +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$1 <<\_ASEOF || lt_write_fail=1 +AS_SHELL_SANITIZE +_AS_PREPARE +exec AS_MESSAGE_FD>&1 +_ASEOF +test 0 = "$lt_write_fail" && chmod +x $1[]dnl +m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT + +# LT_OUTPUT +# --------- +# This macro allows early generation of the libtool script (before +# AC_OUTPUT is called), incase it is used in configure for compilation +# tests. +AC_DEFUN([LT_OUTPUT], +[: ${CONFIG_LT=./config.lt} +AC_MSG_NOTICE([creating $CONFIG_LT]) +_LT_GENERATED_FILE_INIT(["$CONFIG_LT"], +[# Run this file to recreate a libtool stub with the current configuration.]) + +cat >>"$CONFIG_LT" <<\_LTEOF +lt_cl_silent=false +exec AS_MESSAGE_LOG_FD>>config.log +{ + echo + AS_BOX([Running $as_me.]) +} >&AS_MESSAGE_LOG_FD + +lt_cl_help="\ +'$as_me' creates a local libtool stub from the current configuration, +for use in further configure time tests before the real libtool is +generated. + +Usage: $[0] [[OPTIONS]] + + -h, --help print this help, then exit + -V, --version print version number, then exit + -q, --quiet do not print progress messages + -d, --debug don't remove temporary files + +Report bugs to ." + +lt_cl_version="\ +m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl +m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) +configured by $[0], generated by m4_PACKAGE_STRING. + +Copyright (C) 2011 Free Software Foundation, Inc. +This config.lt script is free software; the Free Software Foundation +gives unlimited permision to copy, distribute and modify it." + +while test 0 != $[#] +do + case $[1] in + --version | --v* | -V ) + echo "$lt_cl_version"; exit 0 ;; + --help | --h* | -h ) + echo "$lt_cl_help"; exit 0 ;; + --debug | --d* | -d ) + debug=: ;; + --quiet | --q* | --silent | --s* | -q ) + lt_cl_silent=: ;; + + -*) AC_MSG_ERROR([unrecognized option: $[1] +Try '$[0] --help' for more information.]) ;; + + *) AC_MSG_ERROR([unrecognized argument: $[1] +Try '$[0] --help' for more information.]) ;; + esac + shift +done + +if $lt_cl_silent; then + exec AS_MESSAGE_FD>/dev/null +fi +_LTEOF + +cat >>"$CONFIG_LT" <<_LTEOF +_LT_OUTPUT_LIBTOOL_COMMANDS_INIT +_LTEOF + +cat >>"$CONFIG_LT" <<\_LTEOF +AC_MSG_NOTICE([creating $ofile]) +_LT_OUTPUT_LIBTOOL_COMMANDS +AS_EXIT(0) +_LTEOF +chmod +x "$CONFIG_LT" + +# configure is writing to config.log, but config.lt does its own redirection, +# appending to config.log, which fails on DOS, as config.log is still kept +# open by configure. Here we exec the FD to /dev/null, effectively closing +# config.log, so it can be properly (re)opened and appended to by config.lt. +lt_cl_success=: +test yes = "$silent" && + lt_config_lt_args="$lt_config_lt_args --quiet" +exec AS_MESSAGE_LOG_FD>/dev/null +$SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false +exec AS_MESSAGE_LOG_FD>>config.log +$lt_cl_success || AS_EXIT(1) +])# LT_OUTPUT + + +# _LT_CONFIG(TAG) +# --------------- +# If TAG is the built-in tag, create an initial libtool script with a +# default configuration from the untagged config vars. Otherwise add code +# to config.status for appending the configuration named by TAG from the +# matching tagged config vars. +m4_defun([_LT_CONFIG], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +_LT_CONFIG_SAVE_COMMANDS([ + m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl + m4_if(_LT_TAG, [C], [ + # See if we are running on zsh, and set the options that allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST + fi + + cfgfile=${ofile}T + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL +# Generated automatically by $as_me ($PACKAGE) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. + +# Provide generalized library-building support services. +# Written by Gordon Matzigkeit, 1996 + +_LT_COPYING +_LT_LIBTOOL_TAGS + +# Configured defaults for sys_lib_dlsearch_path munging. +: \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} + +# ### BEGIN LIBTOOL CONFIG +_LT_LIBTOOL_CONFIG_VARS +_LT_LIBTOOL_TAG_VARS +# ### END LIBTOOL CONFIG + +_LT_EOF + + cat <<'_LT_EOF' >> "$cfgfile" + +# ### BEGIN FUNCTIONS SHARED WITH CONFIGURE + +_LT_PREPARE_MUNGE_PATH_LIST +_LT_PREPARE_CC_BASENAME + +# ### END FUNCTIONS SHARED WITH CONFIGURE + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test set != "${COLLECT_NAMES+set}"; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + _LT_PROG_LTMAIN + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '$q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" +], +[cat <<_LT_EOF >> "$ofile" + +dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded +dnl in a comment (ie after a #). +# ### BEGIN LIBTOOL TAG CONFIG: $1 +_LT_LIBTOOL_TAG_VARS(_LT_TAG) +# ### END LIBTOOL TAG CONFIG: $1 +_LT_EOF +])dnl /m4_if +], +[m4_if([$1], [], [ + PACKAGE='$PACKAGE' + VERSION='$VERSION' + RM='$RM' + ofile='$ofile'], []) +])dnl /_LT_CONFIG_SAVE_COMMANDS +])# _LT_CONFIG + + +# LT_SUPPORTED_TAG(TAG) +# --------------------- +# Trace this macro to discover what tags are supported by the libtool +# --tag option, using: +# autoconf --trace 'LT_SUPPORTED_TAG:$1' +AC_DEFUN([LT_SUPPORTED_TAG], []) + + +# C support is built-in for now +m4_define([_LT_LANG_C_enabled], []) +m4_define([_LT_TAGS], []) + + +# LT_LANG(LANG) +# ------------- +# Enable libtool support for the given language if not already enabled. +AC_DEFUN([LT_LANG], +[AC_BEFORE([$0], [LT_OUTPUT])dnl +m4_case([$1], + [C], [_LT_LANG(C)], + [C++], [_LT_LANG(CXX)], + [Go], [_LT_LANG(GO)], + [Java], [_LT_LANG(GCJ)], + [Fortran 77], [_LT_LANG(F77)], + [Fortran], [_LT_LANG(FC)], + [Windows Resource], [_LT_LANG(RC)], + [m4_ifdef([_LT_LANG_]$1[_CONFIG], + [_LT_LANG($1)], + [m4_fatal([$0: unsupported language: "$1"])])])dnl +])# LT_LANG + + +# _LT_LANG(LANGNAME) +# ------------------ +m4_defun([_LT_LANG], +[m4_ifdef([_LT_LANG_]$1[_enabled], [], + [LT_SUPPORTED_TAG([$1])dnl + m4_append([_LT_TAGS], [$1 ])dnl + m4_define([_LT_LANG_]$1[_enabled], [])dnl + _LT_LANG_$1_CONFIG($1)])dnl +])# _LT_LANG + + +m4_ifndef([AC_PROG_GO], [ +############################################################ +# NOTE: This macro has been submitted for inclusion into # +# GNU Autoconf as AC_PROG_GO. When it is available in # +# a released version of Autoconf we should remove this # +# macro and use it instead. # +############################################################ +m4_defun([AC_PROG_GO], +[AC_LANG_PUSH(Go)dnl +AC_ARG_VAR([GOC], [Go compiler command])dnl +AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl +_AC_ARG_VAR_LDFLAGS()dnl +AC_CHECK_TOOL(GOC, gccgo) +if test -z "$GOC"; then + if test -n "$ac_tool_prefix"; then + AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) + fi +fi +if test -z "$GOC"; then + AC_CHECK_PROG(GOC, gccgo, gccgo, false) +fi +])#m4_defun +])#m4_ifndef + + +# _LT_LANG_DEFAULT_CONFIG +# ----------------------- +m4_defun([_LT_LANG_DEFAULT_CONFIG], +[AC_PROVIDE_IFELSE([AC_PROG_CXX], + [LT_LANG(CXX)], + [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) + +AC_PROVIDE_IFELSE([AC_PROG_F77], + [LT_LANG(F77)], + [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) + +AC_PROVIDE_IFELSE([AC_PROG_FC], + [LT_LANG(FC)], + [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) + +dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal +dnl pulling things in needlessly. +AC_PROVIDE_IFELSE([AC_PROG_GCJ], + [LT_LANG(GCJ)], + [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], + [LT_LANG(GCJ)], + [AC_PROVIDE_IFELSE([LT_PROG_GCJ], + [LT_LANG(GCJ)], + [m4_ifdef([AC_PROG_GCJ], + [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) + m4_ifdef([A][M_PROG_GCJ], + [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) + m4_ifdef([LT_PROG_GCJ], + [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) + +AC_PROVIDE_IFELSE([AC_PROG_GO], + [LT_LANG(GO)], + [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) + +AC_PROVIDE_IFELSE([LT_PROG_RC], + [LT_LANG(RC)], + [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) +])# _LT_LANG_DEFAULT_CONFIG + +# Obsolete macros: +AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) +AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) +AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) +AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) +AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_CXX], []) +dnl AC_DEFUN([AC_LIBTOOL_F77], []) +dnl AC_DEFUN([AC_LIBTOOL_FC], []) +dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) +dnl AC_DEFUN([AC_LIBTOOL_RC], []) + + +# _LT_TAG_COMPILER +# ---------------- +m4_defun([_LT_TAG_COMPILER], +[AC_REQUIRE([AC_PROG_CC])dnl + +_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl +_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl +_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl +_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC +])# _LT_TAG_COMPILER + + +# _LT_COMPILER_BOILERPLATE +# ------------------------ +# Check for compiler boilerplate output or warnings with +# the simple compiler test code. +m4_defun([_LT_COMPILER_BOILERPLATE], +[m4_require([_LT_DECL_SED])dnl +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* +])# _LT_COMPILER_BOILERPLATE + + +# _LT_LINKER_BOILERPLATE +# ---------------------- +# Check for linker boilerplate output or warnings with +# the simple link test code. +m4_defun([_LT_LINKER_BOILERPLATE], +[m4_require([_LT_DECL_SED])dnl +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* +])# _LT_LINKER_BOILERPLATE + +# _LT_REQUIRED_DARWIN_CHECKS +# ------------------------- +m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ + case $host_os in + rhapsody* | darwin*) + AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) + AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) + AC_CHECK_TOOL([LIPO], [lipo], [:]) + AC_CHECK_TOOL([OTOOL], [otool], [:]) + AC_CHECK_TOOL([OTOOL64], [otool64], [:]) + _LT_DECL([], [DSYMUTIL], [1], + [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) + _LT_DECL([], [NMEDIT], [1], + [Tool to change global to local symbols on Mac OS X]) + _LT_DECL([], [LIPO], [1], + [Tool to manipulate fat objects and archives on Mac OS X]) + _LT_DECL([], [OTOOL], [1], + [ldd/readelf like tool for Mach-O binaries on Mac OS X]) + _LT_DECL([], [OTOOL64], [1], + [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) + + AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], + [lt_cv_apple_cc_single_mod=no + if test -z "$LT_MULTI_MODULE"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + # If there is a non-empty error log, and "single_module" + # appears in it, assume the flag caused a linker warning + if test -s conftest.err && $GREP single_module conftest.err; then + cat conftest.err >&AS_MESSAGE_LOG_FD + # Otherwise, if the output was created with a 0 exit code from + # the compiler, it worked. + elif test -f libconftest.dylib && test 0 = "$_lt_result"; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&AS_MESSAGE_LOG_FD + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi]) + + AC_CACHE_CHECK([for -exported_symbols_list linker flag], + [lt_cv_ld_exported_symbols_list], + [lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], + [lt_cv_ld_exported_symbols_list=yes], + [lt_cv_ld_exported_symbols_list=no]) + LDFLAGS=$save_LDFLAGS + ]) + + AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], + [lt_cv_ld_force_load=no + cat > conftest.c << _LT_EOF +int forced_loaded() { return 2;} +_LT_EOF + echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD + echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD + $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD + echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD + $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD + cat > conftest.c << _LT_EOF +int main() { return 0;} +_LT_EOF + echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err + _lt_result=$? + if test -s conftest.err && $GREP force_load conftest.err; then + cat conftest.err >&AS_MESSAGE_LOG_FD + elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then + lt_cv_ld_force_load=yes + else + cat conftest.err >&AS_MESSAGE_LOG_FD + fi + rm -f conftest.err libconftest.a conftest conftest.c + rm -rf conftest.dSYM + ]) + case $host_os in + rhapsody* | darwin1.[[012]]) + _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) + _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; + 10.[[012]][[,.]]*) + _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test yes = "$lt_cv_apple_cc_single_mod"; then + _lt_dar_single_mod='$single_module' + fi + if test yes = "$lt_cv_ld_exported_symbols_list"; then + _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' + fi + if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac +]) + + +# _LT_DARWIN_LINKER_FEATURES([TAG]) +# --------------------------------- +# Checks for linker and compiler features on darwin +m4_defun([_LT_DARWIN_LINKER_FEATURES], +[ + m4_require([_LT_REQUIRED_DARWIN_CHECKS]) + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_automatic, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + if test yes = "$lt_cv_ld_force_load"; then + _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], + [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) + else + _LT_TAGVAR(whole_archive_flag_spec, $1)='' + fi + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=$_lt_dar_allow_undefined + case $cc_basename in + ifort*|nagfor*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test yes = "$_lt_dar_can_shared"; then + output_verbose_link_cmd=func_echo_all + _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" + _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" + _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" + _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" + m4_if([$1], [CXX], +[ if test yes != "$lt_cv_apple_cc_single_mod"; then + _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil" + _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil" + fi +],[]) + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi +]) + +# _LT_SYS_MODULE_PATH_AIX([TAGNAME]) +# ---------------------------------- +# Links a minimal program and checks the executable +# for the system default hardcoded library path. In most cases, +# this is /usr/lib:/lib, but when the MPI compilers are used +# the location of the communication and MPI libs are included too. +# If we don't find anything, use the default library path according +# to the aix ld manual. +# Store the results from the different compilers for each TAGNAME. +# Allow to override them for all tags through lt_cv_aix_libpath. +m4_defun([_LT_SYS_MODULE_PATH_AIX], +[m4_require([_LT_DECL_SED])dnl +if test set = "${lt_cv_aix_libpath+set}"; then + aix_libpath=$lt_cv_aix_libpath +else + AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], + [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ + lt_aix_libpath_sed='[ + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }]' + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi],[]) + if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=/usr/lib:/lib + fi + ]) + aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) +fi +])# _LT_SYS_MODULE_PATH_AIX + + +# _LT_SHELL_INIT(ARG) +# ------------------- +m4_define([_LT_SHELL_INIT], +[m4_divert_text([M4SH-INIT], [$1 +])])# _LT_SHELL_INIT + + + +# _LT_PROG_ECHO_BACKSLASH +# ----------------------- +# Find how we can fake an echo command that does not interpret backslash. +# In particular, with Autoconf 2.60 or later we add some code to the start +# of the generated configure script that will find a shell with a builtin +# printf (that we can use as an echo command). +m4_defun([_LT_PROG_ECHO_BACKSLASH], +[ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + +AC_MSG_CHECKING([how to print strings]) +# Test print first, because it will be a builtin if present. +if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ + test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='print -r --' +elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='printf %s\n' +else + # Use this function as a fallback that always works. + func_fallback_echo () + { + eval 'cat <<_LTECHO_EOF +$[]1 +_LTECHO_EOF' + } + ECHO='func_fallback_echo' +fi + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "$*" +} + +case $ECHO in + printf*) AC_MSG_RESULT([printf]) ;; + print*) AC_MSG_RESULT([print -r]) ;; + *) AC_MSG_RESULT([cat]) ;; +esac + +m4_ifdef([_AS_DETECT_SUGGESTED], +[_AS_DETECT_SUGGESTED([ + test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( + ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO + ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + PATH=/empty FPATH=/empty; export PATH FPATH + test "X`printf %s $ECHO`" = "X$ECHO" \ + || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) + +_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) +_LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) +])# _LT_PROG_ECHO_BACKSLASH + + +# _LT_WITH_SYSROOT +# ---------------- +AC_DEFUN([_LT_WITH_SYSROOT], +[AC_MSG_CHECKING([for sysroot]) +AC_ARG_WITH([sysroot], +[AS_HELP_STRING([--with-sysroot@<:@=DIR@:>@], + [Search for dependent libraries within DIR (or the compiler's sysroot + if not specified).])], +[], [with_sysroot=no]) + +dnl lt_sysroot will always be passed unquoted. We quote it here +dnl in case the user passed a directory name. +lt_sysroot= +case $with_sysroot in #( + yes) + if test yes = "$GCC"; then + lt_sysroot=`$CC --print-sysroot 2>/dev/null` + fi + ;; #( + /*) + lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` + ;; #( + no|'') + ;; #( + *) + AC_MSG_RESULT([$with_sysroot]) + AC_MSG_ERROR([The sysroot must be an absolute path.]) + ;; +esac + + AC_MSG_RESULT([${lt_sysroot:-no}]) +_LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl +[dependent libraries, and where our libraries should be installed.])]) + +# _LT_ENABLE_LOCK +# --------------- +m4_defun([_LT_ENABLE_LOCK], +[AC_ARG_ENABLE([libtool-lock], + [AS_HELP_STRING([--disable-libtool-lock], + [avoid locking (might break parallel builds)])]) +test no = "$enable_libtool_lock" || enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out what ABI is being produced by ac_compile, and set mode + # options accordingly. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE=32 + ;; + *ELF-64*) + HPUX_IA64_MODE=64 + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + if test yes = "$lt_cv_prog_gnu_ld"; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +mips64*-*linux*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + emul=elf + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + emul="${emul}32" + ;; + *64-bit*) + emul="${emul}64" + ;; + esac + case `/usr/bin/file conftest.$ac_objext` in + *MSB*) + emul="${emul}btsmip" + ;; + *LSB*) + emul="${emul}ltsmip" + ;; + esac + case `/usr/bin/file conftest.$ac_objext` in + *N32*) + emul="${emul}n32" + ;; + esac + LD="${LD-ld} -m $emul" + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. Note that the listed cases only cover the + # situations where additional linker options are needed (such as when + # doing 32-bit compilation for a host where ld defaults to 64-bit, or + # vice versa); the common cases where no linker options are needed do + # not appear in the list. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + case `/usr/bin/file conftest.o` in + *x86-64*) + LD="${LD-ld} -m elf32_x86_64" + ;; + *) + LD="${LD-ld} -m elf_i386" + ;; + esac + ;; + powerpc64le-*linux*) + LD="${LD-ld} -m elf32lppclinux" + ;; + powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + powerpcle-*linux*) + LD="${LD-ld} -m elf64lppc" + ;; + powerpc-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS=$CFLAGS + CFLAGS="$CFLAGS -belf" + AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, + [AC_LANG_PUSH(C) + AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) + AC_LANG_POP]) + if test yes != "$lt_cv_cc_needs_belf"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS=$SAVE_CFLAGS + fi + ;; +*-*solaris*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) + case $host in + i?86-*-solaris*|x86_64-*-solaris*) + LD="${LD-ld} -m elf_x86_64" + ;; + sparc*-*-solaris*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + # GNU ld 2.21 introduced _sol2 emulations. Use them if available. + if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then + LD=${LD-ld}_sol2 + fi + ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks=$enable_libtool_lock +])# _LT_ENABLE_LOCK + + +# _LT_PROG_AR +# ----------- +m4_defun([_LT_PROG_AR], +[AC_CHECK_TOOLS(AR, [ar], false) +: ${AR=ar} +: ${AR_FLAGS=cru} +_LT_DECL([], [AR], [1], [The archiver]) +_LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) + +AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], + [lt_cv_ar_at_file=no + AC_COMPILE_IFELSE([AC_LANG_PROGRAM], + [echo conftest.$ac_objext > conftest.lst + lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' + AC_TRY_EVAL([lt_ar_try]) + if test 0 -eq "$ac_status"; then + # Ensure the archiver fails upon bogus file names. + rm -f conftest.$ac_objext libconftest.a + AC_TRY_EVAL([lt_ar_try]) + if test 0 -ne "$ac_status"; then + lt_cv_ar_at_file=@ + fi + fi + rm -f conftest.* libconftest.a + ]) + ]) + +if test no = "$lt_cv_ar_at_file"; then + archiver_list_spec= +else + archiver_list_spec=$lt_cv_ar_at_file +fi +_LT_DECL([], [archiver_list_spec], [1], + [How to feed a file listing to the archiver]) +])# _LT_PROG_AR + + +# _LT_CMD_OLD_ARCHIVE +# ------------------- +m4_defun([_LT_CMD_OLD_ARCHIVE], +[_LT_PROG_AR + +AC_CHECK_TOOL(STRIP, strip, :) +test -z "$STRIP" && STRIP=: +_LT_DECL([], [STRIP], [1], [A symbol stripping program]) + +AC_CHECK_TOOL(RANLIB, ranlib, :) +test -z "$RANLIB" && RANLIB=: +_LT_DECL([], [RANLIB], [1], + [Commands used to install an old-style archive]) + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + bitrig* | openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" +fi + +case $host_os in + darwin*) + lock_old_archive_extraction=yes ;; + *) + lock_old_archive_extraction=no ;; +esac +_LT_DECL([], [old_postinstall_cmds], [2]) +_LT_DECL([], [old_postuninstall_cmds], [2]) +_LT_TAGDECL([], [old_archive_cmds], [2], + [Commands used to build an old-style archive]) +_LT_DECL([], [lock_old_archive_extraction], [0], + [Whether to use a lock for old archive extraction]) +])# _LT_CMD_OLD_ARCHIVE + + +# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------------------- +# Check whether the given compiler option works +AC_DEFUN([_LT_COMPILER_OPTION], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$3" ## exclude from sc_useless_quotes_in_assignment + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + fi + $RM conftest* +]) + +if test yes = "[$]$2"; then + m4_if([$5], , :, [$5]) +else + m4_if([$6], , :, [$6]) +fi +])# _LT_COMPILER_OPTION + +# Old name: +AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) + + +# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------- +# Check whether the given linker option works +AC_DEFUN([_LT_LINKER_OPTION], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS $3" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&AS_MESSAGE_LOG_FD + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + else + $2=yes + fi + fi + $RM -r conftest* + LDFLAGS=$save_LDFLAGS +]) + +if test yes = "[$]$2"; then + m4_if([$4], , :, [$4]) +else + m4_if([$5], , :, [$5]) +fi +])# _LT_LINKER_OPTION + +# Old name: +AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) + + +# LT_CMD_MAX_LEN +#--------------- +AC_DEFUN([LT_CMD_MAX_LEN], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +# find the maximum length of command line arguments +AC_MSG_CHECKING([the maximum length of command line arguments]) +AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl + i=0 + teststring=ABCD + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + mint*) + # On MiNT this can take a long time and run out of memory. + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + os2*) + # The test takes a long time on OS/2. + lt_cv_sys_max_cmd_len=8192 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len" && \ + test undefined != "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test X`env echo "$teststring$teststring" 2>/dev/null` \ + = "X$teststring$teststring"; } >/dev/null 2>&1 && + test 17 != "$i" # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac +]) +if test -n "$lt_cv_sys_max_cmd_len"; then + AC_MSG_RESULT($lt_cv_sys_max_cmd_len) +else + AC_MSG_RESULT(none) +fi +max_cmd_len=$lt_cv_sys_max_cmd_len +_LT_DECL([], [max_cmd_len], [0], + [What is the maximum length of a command?]) +])# LT_CMD_MAX_LEN + +# Old name: +AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) + + +# _LT_HEADER_DLFCN +# ---------------- +m4_defun([_LT_HEADER_DLFCN], +[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl +])# _LT_HEADER_DLFCN + + +# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, +# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) +# ---------------------------------------------------------------- +m4_defun([_LT_TRY_DLOPEN_SELF], +[m4_require([_LT_HEADER_DLFCN])dnl +if test yes = "$cross_compiling"; then : + [$4] +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +[#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisibility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +}] +_LT_EOF + if AC_TRY_EVAL(ac_link) && test -s "conftest$ac_exeext" 2>/dev/null; then + (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) $1 ;; + x$lt_dlneed_uscore) $2 ;; + x$lt_dlunknown|x*) $3 ;; + esac + else : + # compilation failed + $3 + fi +fi +rm -fr conftest* +])# _LT_TRY_DLOPEN_SELF + + +# LT_SYS_DLOPEN_SELF +# ------------------ +AC_DEFUN([LT_SYS_DLOPEN_SELF], +[m4_require([_LT_HEADER_DLFCN])dnl +if test yes != "$enable_dlopen"; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen=load_add_on + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen=LoadLibrary + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen=dlopen + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl],[ + lt_cv_dlopen=dyld + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ]) + ;; + + tpf*) + # Don't try to run any link tests for TPF. We know it's impossible + # because TPF is a cross-compiler, and we know how we open DSOs. + lt_cv_dlopen=dlopen + lt_cv_dlopen_libs= + lt_cv_dlopen_self=no + ;; + + *) + AC_CHECK_FUNC([shl_load], + [lt_cv_dlopen=shl_load], + [AC_CHECK_LIB([dld], [shl_load], + [lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld], + [AC_CHECK_FUNC([dlopen], + [lt_cv_dlopen=dlopen], + [AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl], + [AC_CHECK_LIB([svld], [dlopen], + [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld], + [AC_CHECK_LIB([dld], [dld_link], + [lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld]) + ]) + ]) + ]) + ]) + ]) + ;; + esac + + if test no = "$lt_cv_dlopen"; then + enable_dlopen=no + else + enable_dlopen=yes + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS=$CPPFLAGS + test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS=$LDFLAGS + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS=$LIBS + LIBS="$lt_cv_dlopen_libs $LIBS" + + AC_CACHE_CHECK([whether a program can dlopen itself], + lt_cv_dlopen_self, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, + lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) + ]) + + if test yes = "$lt_cv_dlopen_self"; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + AC_CACHE_CHECK([whether a statically linked program can dlopen itself], + lt_cv_dlopen_self_static, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, + lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) + ]) + fi + + CPPFLAGS=$save_CPPFLAGS + LDFLAGS=$save_LDFLAGS + LIBS=$save_LIBS + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi +_LT_DECL([dlopen_support], [enable_dlopen], [0], + [Whether dlopen is supported]) +_LT_DECL([dlopen_self], [enable_dlopen_self], [0], + [Whether dlopen of programs is supported]) +_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], + [Whether dlopen of statically linked programs is supported]) +])# LT_SYS_DLOPEN_SELF + +# Old name: +AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) + + +# _LT_COMPILER_C_O([TAGNAME]) +# --------------------------- +# Check to see if options -c and -o are simultaneously supported by compiler. +# This macro does not hard code the compiler like AC_PROG_CC_C_O. +m4_defun([_LT_COMPILER_C_O], +[m4_require([_LT_DECL_SED])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_TAG_COMPILER])dnl +AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], + [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], + [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + fi + fi + chmod u+w . 2>&AS_MESSAGE_LOG_FD + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* +]) +_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], + [Does compiler simultaneously support -c and -o options?]) +])# _LT_COMPILER_C_O + + +# _LT_COMPILER_FILE_LOCKS([TAGNAME]) +# ---------------------------------- +# Check to see if we can do hard links to lock some files if needed +m4_defun([_LT_COMPILER_FILE_LOCKS], +[m4_require([_LT_ENABLE_LOCK])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +_LT_COMPILER_C_O([$1]) + +hard_links=nottested +if test no = "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" && test no != "$need_locks"; then + # do not overwrite the value of need_locks provided by the user + AC_MSG_CHECKING([if we can lock with hard links]) + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + AC_MSG_RESULT([$hard_links]) + if test no = "$hard_links"; then + AC_MSG_WARN(['$CC' does not support '-c -o', so 'make -j' may be unsafe]) + need_locks=warn + fi +else + need_locks=no +fi +_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) +])# _LT_COMPILER_FILE_LOCKS + + +# _LT_CHECK_OBJDIR +# ---------------- +m4_defun([_LT_CHECK_OBJDIR], +[AC_CACHE_CHECK([for objdir], [lt_cv_objdir], +[rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null]) +objdir=$lt_cv_objdir +_LT_DECL([], [objdir], [0], + [The name of the directory that contains temporary libtool files])dnl +m4_pattern_allow([LT_OBJDIR])dnl +AC_DEFINE_UNQUOTED([LT_OBJDIR], "$lt_cv_objdir/", + [Define to the sub-directory where libtool stores uninstalled libraries.]) +])# _LT_CHECK_OBJDIR + + +# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) +# -------------------------------------- +# Check hardcoding attributes. +m4_defun([_LT_LINKER_HARDCODE_LIBPATH], +[AC_MSG_CHECKING([how to hardcode library paths into programs]) +_LT_TAGVAR(hardcode_action, $1)= +if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || + test -n "$_LT_TAGVAR(runpath_var, $1)" || + test yes = "$_LT_TAGVAR(hardcode_automatic, $1)"; then + + # We can hardcode non-existent directories. + if test no != "$_LT_TAGVAR(hardcode_direct, $1)" && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" && + test no != "$_LT_TAGVAR(hardcode_minus_L, $1)"; then + # Linking always hardcodes the temporary library directory. + _LT_TAGVAR(hardcode_action, $1)=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + _LT_TAGVAR(hardcode_action, $1)=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + _LT_TAGVAR(hardcode_action, $1)=unsupported +fi +AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) + +if test relink = "$_LT_TAGVAR(hardcode_action, $1)" || + test yes = "$_LT_TAGVAR(inherit_rpath, $1)"; then + # Fast installation is not supported + enable_fast_install=no +elif test yes = "$shlibpath_overrides_runpath" || + test no = "$enable_shared"; then + # Fast installation is not necessary + enable_fast_install=needless +fi +_LT_TAGDECL([], [hardcode_action], [0], + [How to hardcode a shared library path into an executable]) +])# _LT_LINKER_HARDCODE_LIBPATH + + +# _LT_CMD_STRIPLIB +# ---------------- +m4_defun([_LT_CMD_STRIPLIB], +[m4_require([_LT_DECL_EGREP]) +striplib= +old_striplib= +AC_MSG_CHECKING([whether stripping libraries is possible]) +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + AC_MSG_RESULT([yes]) +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP"; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + fi + ;; + *) + AC_MSG_RESULT([no]) + ;; + esac +fi +_LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) +_LT_DECL([], [striplib], [1]) +])# _LT_CMD_STRIPLIB + + +# _LT_PREPARE_MUNGE_PATH_LIST +# --------------------------- +# Make sure func_munge_path_list() is defined correctly. +m4_defun([_LT_PREPARE_MUNGE_PATH_LIST], +[[# func_munge_path_list VARIABLE PATH +# ----------------------------------- +# VARIABLE is name of variable containing _space_ separated list of +# directories to be munged by the contents of PATH, which is string +# having a format: +# "DIR[:DIR]:" +# string "DIR[ DIR]" will be prepended to VARIABLE +# ":DIR[:DIR]" +# string "DIR[ DIR]" will be appended to VARIABLE +# "DIRP[:DIRP]::[DIRA:]DIRA" +# string "DIRP[ DIRP]" will be prepended to VARIABLE and string +# "DIRA[ DIRA]" will be appended to VARIABLE +# "DIR[:DIR]" +# VARIABLE will be replaced by "DIR[ DIR]" +func_munge_path_list () +{ + case x@S|@2 in + x) + ;; + *:) + eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'` \@S|@@S|@1\" + ;; + x:*) + eval @S|@1=\"\@S|@@S|@1 `$ECHO @S|@2 | $SED 's/:/ /g'`\" + ;; + *::*) + eval @S|@1=\"\@S|@@S|@1\ `$ECHO @S|@2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" + eval @S|@1=\"`$ECHO @S|@2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \@S|@@S|@1\" + ;; + *) + eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'`\" + ;; + esac +} +]])# _LT_PREPARE_PATH_LIST + + +# _LT_SYS_DYNAMIC_LINKER([TAG]) +# ----------------------------- +# PORTME Fill in your ld.so characteristics +m4_defun([_LT_SYS_DYNAMIC_LINKER], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_OBJDUMP])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_CHECK_SHELL_FEATURES])dnl +m4_require([_LT_PREPARE_MUNGE_PATH_LIST])dnl +AC_MSG_CHECKING([dynamic linker characteristics]) +m4_if([$1], + [], [ +if test yes = "$GCC"; then + case $host_os in + darwin*) lt_awk_arg='/^libraries:/,/LR/' ;; + *) lt_awk_arg='/^libraries:/' ;; + esac + case $host_os in + mingw* | cegcc*) lt_sed_strip_eq='s|=\([[A-Za-z]]:\)|\1|g' ;; + *) lt_sed_strip_eq='s|=/|/|g' ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` + case $lt_search_path_spec in + *\;*) + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` + ;; + *) + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` + ;; + esac + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary... + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + # ...but if some path component already ends with the multilib dir we assume + # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). + case "$lt_multi_os_dir; $lt_search_path_spec " in + "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) + lt_multi_os_dir= + ;; + esac + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" + elif test -n "$lt_multi_os_dir"; then + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' +BEGIN {RS = " "; FS = "/|\n";} { + lt_foo = ""; + lt_count = 0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo = "/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[[lt_foo]]++; } + if (lt_freq[[lt_foo]] == 1) { print lt_foo; } +}'` + # AWK program above erroneously prepends '/' to C:/dos/paths + # for these hosts. + case $host_os in + mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ + $SED 's|/\([[A-Za-z]]:\)|\1|g'` ;; + esac + sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi]) +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=.so +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +AC_ARG_VAR([LT_SYS_LIBRARY_PATH], +[User-defined run-time library search path.]) + +case $host_os in +aix3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='$libname$release$shared_ext$major' + ;; + +aix[[4-9]]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test ia64 = "$host_cpu"; then + # AIX 5 supports IA64 + library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line '#! .'. This would cause the generated library to + # depend on '.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[[01]] | aix4.[[01]].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # Using Import Files as archive members, it is possible to support + # filename-based versioning of shared library archives on AIX. While + # this would work for both with and without runtime linking, it will + # prevent static linking of such archives. So we do filename-based + # shared library versioning with .so extension only, which is used + # when both runtime linking and shared linking is enabled. + # Unfortunately, runtime linking may impact performance, so we do + # not want this to be the default eventually. Also, we use the + # versioned .so libs for executables only if there is the -brtl + # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. + # To allow for filename-based versioning support, we need to create + # libNAME.so.V as an archive file, containing: + # *) an Import File, referring to the versioned filename of the + # archive as well as the shared archive member, telling the + # bitwidth (32 or 64) of that shared object, and providing the + # list of exported symbols of that shared object, eventually + # decorated with the 'weak' keyword + # *) the shared object with the F_LOADONLY flag set, to really avoid + # it being seen by the linker. + # At run time we better use the real file rather than another symlink, + # but for link time we create the symlink libNAME.so -> libNAME.so.V + + case $with_aix_soname,$aix_use_runtimelinking in + # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + aix,yes) # traditional libtool + dynamic_linker='AIX unversionable lib.so' + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + ;; + aix,no) # traditional AIX only + dynamic_linker='AIX lib.a[(]lib.so.V[)]' + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='$libname$release.a $libname.a' + soname_spec='$libname$release$shared_ext$major' + ;; + svr4,*) # full svr4 only + dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)]" + library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' + # We do not specify a path in Import Files, so LIBPATH fires. + shlibpath_overrides_runpath=yes + ;; + *,yes) # both, prefer svr4 + dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)], lib.a[(]lib.so.V[)]" + library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' + # unpreferred sharedlib libNAME.a needs extra handling + postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' + postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' + # We do not specify a path in Import Files, so LIBPATH fires. + shlibpath_overrides_runpath=yes + ;; + *,no) # both, prefer aix + dynamic_linker="AIX lib.a[(]lib.so.V[)], lib.so.V[(]$shared_archive_member_spec.o[)]" + library_names_spec='$libname$release.a $libname.a' + soname_spec='$libname$release$shared_ext$major' + # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling + postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' + postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' + ;; + esac + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='$libname$shared_ext' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[[45]]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=.dll + need_version=no + need_lib_prefix=no + + case $GCC,$cc_basename in + yes,*) + # gcc + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' +m4_if([$1], [],[ + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' + ;; + esac + dynamic_linker='Win32 ld.exe' + ;; + + *,cl*) + # Native MSVC + libname_spec='$name' + soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' + library_names_spec='$libname.dll.lib' + + case $build_os in + mingw*) + sys_lib_search_path_spec= + lt_save_ifs=$IFS + IFS=';' + for lt_path in $LIB + do + IFS=$lt_save_ifs + # Let DOS variable expansion print the short 8.3 style file name. + lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` + sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" + done + IFS=$lt_save_ifs + # Convert to MSYS style. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` + ;; + cygwin*) + # Convert to unix form, then to dos form, then back to unix form + # but this time dos style (no spaces!) so that the unix form looks + # like /cygdrive/c/PROGRA~1:/cygdr... + sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` + sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` + sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + ;; + *) + sys_lib_search_path_spec=$LIB + if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then + # It is most probably a Windows format PATH. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # FIXME: find the short name or the path components, as spaces are + # common. (e.g. "Program Files" -> "PROGRA~1") + ;; + esac + + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + dynamic_linker='Win32 link.exe' + ;; + + *) + # Assume MSVC wrapper + library_names_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext $libname.lib' + dynamic_linker='Win32 ld.exe' + ;; + esac + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' + soname_spec='$libname$release$major$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' +m4_if([$1], [],[ + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[[23]].*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2.*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[[01]]* | freebsdelf3.[[01]]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ + freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +haiku*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=no + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + if test 32 = "$HPUX_IA64_MODE"; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + sys_lib_dlsearch_path_spec=/usr/lib/hpux32 + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + sys_lib_dlsearch_path_spec=/usr/lib/hpux64 + fi + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; + +interix[[3-9]]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test yes = "$lt_cv_prog_gnu_ld"; then + version_type=linux # correct to gnu/linux during the next big refactor + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" + sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +linux*android*) + version_type=none # Android doesn't support versioned libraries. + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext' + soname_spec='$libname$release$shared_ext' + finish_cmds= + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + dynamic_linker='Android linker' + # Don't embed -rpath directories since the linker doesn't support them. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], + [lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ + LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" + AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], + [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], + [lt_cv_shlibpath_overrides_runpath=yes])]) + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + ]) + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Add ABI-specific directories to the system library path. + sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib" + + # Ideally, we could use ldconfig to report *all* directores which are + # searched for libraries, however this is still not possible. Aside from not + # being certain /sbin/ldconfig is available, command + # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, + # even though it is searched at run-time. Try to do the best guess by + # appending ld.so.conf contents (and includes) to the search path. + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd* | bitrig*) + version_type=sunos + sys_lib_dlsearch_path_spec=/usr/lib + need_lib_prefix=no + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + need_version=no + else + need_version=yes + fi + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +os2*) + libname_spec='$name' + version_type=windows + shrext_cmds=.dll + need_version=no + need_lib_prefix=no + # OS/2 can only load a DLL with a base name of 8 characters or less. + soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; + v=$($ECHO $release$versuffix | tr -d .-); + n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); + $ECHO $n$v`$shared_ext' + library_names_spec='${libname}_dll.$libext' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=BEGINLIBPATH + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test yes = "$with_gnu_ld"; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec; then + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' + soname_spec='$libname$shared_ext.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=sco + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test yes = "$with_gnu_ld"; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +AC_MSG_RESULT([$dynamic_linker]) +test no = "$dynamic_linker" && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test yes = "$GCC"; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then + sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec +fi + +if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then + sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec +fi + +# remember unaugmented sys_lib_dlsearch_path content for libtool script decls... +configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec + +# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code +func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" + +# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool +configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH + +_LT_DECL([], [variables_saved_for_relink], [1], + [Variables whose values should be saved in libtool wrapper scripts and + restored at link time]) +_LT_DECL([], [need_lib_prefix], [0], + [Do we need the "lib" prefix for modules?]) +_LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) +_LT_DECL([], [version_type], [0], [Library versioning type]) +_LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) +_LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) +_LT_DECL([], [shlibpath_overrides_runpath], [0], + [Is shlibpath searched before the hard-coded library search path?]) +_LT_DECL([], [libname_spec], [1], [Format of library name prefix]) +_LT_DECL([], [library_names_spec], [1], + [[List of archive names. First name is the real one, the rest are links. + The last name is the one that the linker finds with -lNAME]]) +_LT_DECL([], [soname_spec], [1], + [[The coded name of the library, if different from the real name]]) +_LT_DECL([], [install_override_mode], [1], + [Permission mode override for installation of shared libraries]) +_LT_DECL([], [postinstall_cmds], [2], + [Command to use after installation of a shared archive]) +_LT_DECL([], [postuninstall_cmds], [2], + [Command to use after uninstallation of a shared archive]) +_LT_DECL([], [finish_cmds], [2], + [Commands used to finish a libtool library installation in a directory]) +_LT_DECL([], [finish_eval], [1], + [[As "finish_cmds", except a single script fragment to be evaled but + not shown]]) +_LT_DECL([], [hardcode_into_libs], [0], + [Whether we should hardcode library paths into libraries]) +_LT_DECL([], [sys_lib_search_path_spec], [2], + [Compile-time system search path for libraries]) +_LT_DECL([sys_lib_dlsearch_path_spec], [configure_time_dlsearch_path], [2], + [Detected run-time system search path for libraries]) +_LT_DECL([], [configure_time_lt_sys_library_path], [2], + [Explicit LT_SYS_LIBRARY_PATH set during ./configure time]) +])# _LT_SYS_DYNAMIC_LINKER + + +# _LT_PATH_TOOL_PREFIX(TOOL) +# -------------------------- +# find a file program that can recognize shared library +AC_DEFUN([_LT_PATH_TOOL_PREFIX], +[m4_require([_LT_DECL_EGREP])dnl +AC_MSG_CHECKING([for $1]) +AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, +[case $MAGIC_CMD in +[[\\/*] | ?:[\\/]*]) + lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD=$MAGIC_CMD + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR +dnl $ac_dummy forces splitting on constant user-supplied paths. +dnl POSIX.2 word splitting is done only on the output of word expansions, +dnl not every word. This closes a longstanding sh security hole. + ac_dummy="m4_if([$2], , $PATH, [$2])" + for ac_dir in $ac_dummy; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$1"; then + lt_cv_path_MAGIC_CMD=$ac_dir/"$1" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD=$lt_cv_path_MAGIC_CMD + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS=$lt_save_ifs + MAGIC_CMD=$lt_save_MAGIC_CMD + ;; +esac]) +MAGIC_CMD=$lt_cv_path_MAGIC_CMD +if test -n "$MAGIC_CMD"; then + AC_MSG_RESULT($MAGIC_CMD) +else + AC_MSG_RESULT(no) +fi +_LT_DECL([], [MAGIC_CMD], [0], + [Used to examine libraries when file_magic_cmd begins with "file"])dnl +])# _LT_PATH_TOOL_PREFIX + +# Old name: +AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) + + +# _LT_PATH_MAGIC +# -------------- +# find a file program that can recognize a shared library +m4_defun([_LT_PATH_MAGIC], +[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) + else + MAGIC_CMD=: + fi +fi +])# _LT_PATH_MAGIC + + +# LT_PATH_LD +# ---------- +# find the pathname to the GNU or non-GNU linker +AC_DEFUN([LT_PATH_LD], +[AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_PROG_ECHO_BACKSLASH])dnl + +AC_ARG_WITH([gnu-ld], + [AS_HELP_STRING([--with-gnu-ld], + [assume the C compiler uses GNU ld @<:@default=no@:>@])], + [test no = "$withval" || with_gnu_ld=yes], + [with_gnu_ld=no])dnl + +ac_prog=ld +if test yes = "$GCC"; then + # Check if gcc -print-prog-name=ld gives a path. + AC_MSG_CHECKING([for ld used by $CC]) + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return, which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [[\\/]]* | ?:[[\\/]]*) + re_direlt='/[[^/]][[^/]]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD=$ac_prog + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test yes = "$with_gnu_ld"; then + AC_MSG_CHECKING([for GNU ld]) +else + AC_MSG_CHECKING([for non-GNU ld]) +fi +AC_CACHE_VAL(lt_cv_path_LD, +[if test -z "$LD"; then + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD=$ac_dir/$ac_prog + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &1 conftest.i +cat conftest.i conftest.i >conftest2.i +: ${lt_DD:=$DD} +AC_PATH_PROGS_FEATURE_CHECK([lt_DD], [dd], +[if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then + cmp -s conftest.i conftest.out \ + && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: +fi]) +rm -f conftest.i conftest2.i conftest.out]) +])# _LT_PATH_DD + + +# _LT_CMD_TRUNCATE +# ---------------- +# find command to truncate a binary pipe +m4_defun([_LT_CMD_TRUNCATE], +[m4_require([_LT_PATH_DD]) +AC_CACHE_CHECK([how to truncate binary pipes], [lt_cv_truncate_bin], +[printf 0123456789abcdef0123456789abcdef >conftest.i +cat conftest.i conftest.i >conftest2.i +lt_cv_truncate_bin= +if "$ac_cv_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then + cmp -s conftest.i conftest.out \ + && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" +fi +rm -f conftest.i conftest2.i conftest.out +test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q"]) +_LT_DECL([lt_truncate_bin], [lt_cv_truncate_bin], [1], + [Command to truncate a binary pipe]) +])# _LT_CMD_TRUNCATE + + +# _LT_CHECK_MAGIC_METHOD +# ---------------------- +# how to check for library dependencies +# -- PORTME fill in with the dynamic library characteristics +m4_defun([_LT_CHECK_MAGIC_METHOD], +[m4_require([_LT_DECL_EGREP]) +m4_require([_LT_DECL_OBJDUMP]) +AC_CACHE_CHECK([how to recognize dependent libraries], +lt_cv_deplibs_check_method, +[lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# 'unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# that responds to the $file_magic_cmd with a given extended regex. +# If you have 'file' or equivalent on your system and you're not sure +# whether 'pass_all' will *always* work, you probably want this one. + +case $host_os in +aix[[4-9]]*) + lt_cv_deplibs_check_method=pass_all + ;; + +beos*) + lt_cv_deplibs_check_method=pass_all + ;; + +bsdi[[45]]*) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; + +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; + +mingw* | pw32*) + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump', + # unless we find 'file', for example because we are cross-compiling. + if ( file / ) >/dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + # Keep this pattern in sync with the one in func_win32_libid. + lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc*) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +haiku*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[[3-9]]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd* | bitrig*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +os2*) + lt_cv_deplibs_check_method=pass_all + ;; +esac +]) + +file_magic_glob= +want_nocaseglob=no +if test "$build" = "$host"; then + case $host_os in + mingw* | pw32*) + if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then + want_nocaseglob=yes + else + file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` + fi + ;; + esac +fi + +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + +_LT_DECL([], [deplibs_check_method], [1], + [Method to check whether dependent libraries are shared objects]) +_LT_DECL([], [file_magic_cmd], [1], + [Command to use when deplibs_check_method = "file_magic"]) +_LT_DECL([], [file_magic_glob], [1], + [How to find potential files when deplibs_check_method = "file_magic"]) +_LT_DECL([], [want_nocaseglob], [1], + [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) +])# _LT_CHECK_MAGIC_METHOD + + +# LT_PATH_NM +# ---------- +# find the pathname to a BSD- or MS-compatible name lister +AC_DEFUN([LT_PATH_NM], +[AC_REQUIRE([AC_PROG_CC])dnl +AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, +[if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM=$NM +else + lt_nm_to_check=${ac_tool_prefix}nm + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + tmp_nm=$ac_dir/$lt_tmp_nm + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the 'sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty + case $build_os in + mingw*) lt_bad_file=conftest.nm/nofile ;; + *) lt_bad_file=/dev/null ;; + esac + case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in + *$lt_bad_file* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break 2 + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break 2 + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS=$lt_save_ifs + done + : ${lt_cv_path_NM=no} +fi]) +if test no != "$lt_cv_path_NM"; then + NM=$lt_cv_path_NM +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$DUMPBIN"; then : + # Let the user override the test. + else + AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) + case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in + *COFF*) + DUMPBIN="$DUMPBIN -symbols -headers" + ;; + *) + DUMPBIN=: + ;; + esac + fi + AC_SUBST([DUMPBIN]) + if test : != "$DUMPBIN"; then + NM=$DUMPBIN + fi +fi +test -z "$NM" && NM=nm +AC_SUBST([NM]) +_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl + +AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], + [lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) + cat conftest.out >&AS_MESSAGE_LOG_FD + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest*]) +])# LT_PATH_NM + +# Old names: +AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) +AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_PROG_NM], []) +dnl AC_DEFUN([AC_PROG_NM], []) + +# _LT_CHECK_SHAREDLIB_FROM_LINKLIB +# -------------------------------- +# how to determine the name of the shared library +# associated with a specific link library. +# -- PORTME fill in with the dynamic library characteristics +m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], +[m4_require([_LT_DECL_EGREP]) +m4_require([_LT_DECL_OBJDUMP]) +m4_require([_LT_DECL_DLLTOOL]) +AC_CACHE_CHECK([how to associate runtime and link libraries], +lt_cv_sharedlib_from_linklib_cmd, +[lt_cv_sharedlib_from_linklib_cmd='unknown' + +case $host_os in +cygwin* | mingw* | pw32* | cegcc*) + # two different shell functions defined in ltmain.sh; + # decide which one to use based on capabilities of $DLLTOOL + case `$DLLTOOL --help 2>&1` in + *--identify-strict*) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib + ;; + *) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback + ;; + esac + ;; +*) + # fallback: assume linklib IS sharedlib + lt_cv_sharedlib_from_linklib_cmd=$ECHO + ;; +esac +]) +sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd +test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO + +_LT_DECL([], [sharedlib_from_linklib_cmd], [1], + [Command to associate shared and link libraries]) +])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB + + +# _LT_PATH_MANIFEST_TOOL +# ---------------------- +# locate the manifest tool +m4_defun([_LT_PATH_MANIFEST_TOOL], +[AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) +test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt +AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], + [lt_cv_path_mainfest_tool=no + echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD + $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out + cat conftest.err >&AS_MESSAGE_LOG_FD + if $GREP 'Manifest Tool' conftest.out > /dev/null; then + lt_cv_path_mainfest_tool=yes + fi + rm -f conftest*]) +if test yes != "$lt_cv_path_mainfest_tool"; then + MANIFEST_TOOL=: +fi +_LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl +])# _LT_PATH_MANIFEST_TOOL + + +# _LT_DLL_DEF_P([FILE]) +# --------------------- +# True iff FILE is a Windows DLL '.def' file. +# Keep in sync with func_dll_def_p in the libtool script +AC_DEFUN([_LT_DLL_DEF_P], +[dnl + test DEF = "`$SED -n dnl + -e '\''s/^[[ ]]*//'\'' dnl Strip leading whitespace + -e '\''/^\(;.*\)*$/d'\'' dnl Delete empty lines and comments + -e '\''s/^\(EXPORTS\|LIBRARY\)\([[ ]].*\)*$/DEF/p'\'' dnl + -e q dnl Only consider the first "real" line + $1`" dnl +])# _LT_DLL_DEF_P + + +# LT_LIB_M +# -------- +# check for math library +AC_DEFUN([LT_LIB_M], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +LIBM= +case $host in +*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) + # These system don't have libm, or don't need it + ;; +*-ncr-sysv4.3*) + AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM=-lmw) + AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") + ;; +*) + AC_CHECK_LIB(m, cos, LIBM=-lm) + ;; +esac +AC_SUBST([LIBM]) +])# LT_LIB_M + +# Old name: +AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_CHECK_LIBM], []) + + +# _LT_COMPILER_NO_RTTI([TAGNAME]) +# ------------------------------- +m4_defun([_LT_COMPILER_NO_RTTI], +[m4_require([_LT_TAG_COMPILER])dnl + +_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + +if test yes = "$GCC"; then + case $cc_basename in + nvcc*) + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; + *) + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; + esac + + _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], + lt_cv_prog_compiler_rtti_exceptions, + [-fno-rtti -fno-exceptions], [], + [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) +fi +_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], + [Compiler flag to turn off builtin functions]) +])# _LT_COMPILER_NO_RTTI + + +# _LT_CMD_GLOBAL_SYMBOLS +# ---------------------- +m4_defun([_LT_CMD_GLOBAL_SYMBOLS], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([LT_PATH_NM])dnl +AC_REQUIRE([LT_PATH_LD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_TAG_COMPILER])dnl + +# Check for command to grab the raw symbol name followed by C symbol from nm. +AC_MSG_CHECKING([command to parse $NM output from $compiler object]) +AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], +[ +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[[BCDEGRST]]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[[BCDT]]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[[ABCDGISTW]]' + ;; +hpux*) + if test ia64 = "$host_cpu"; then + symcode='[[ABCDEGRST]]' + fi + ;; +irix* | nonstopux*) + symcode='[[BCDEGRST]]' + ;; +osf*) + symcode='[[BCDEGQRST]]' + ;; +solaris*) + symcode='[[BDRT]]' + ;; +sco3.2v5*) + symcode='[[DT]]' + ;; +sysv4.2uw2*) + symcode='[[DT]]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[[ABDT]]' + ;; +sysv4) + symcode='[[DFNSTU]]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[[ABCDGIRSTW]]' ;; +esac + +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Gets list of data symbols to import. + lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'" + # Adjust the below global symbol transforms to fixup imported variables. + lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" + lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" + lt_c_name_lib_hook="\ + -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ + -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" +else + # Disable hooks by default. + lt_cv_sys_global_symbol_to_import= + lt_cdecl_hook= + lt_c_name_hook= + lt_c_name_lib_hook= +fi + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n"\ +$lt_cdecl_hook\ +" -e 's/^T .* \(.*\)$/extern int \1();/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n"\ +$lt_c_name_hook\ +" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" + +# Transform an extracted symbol line into symbol name with lib prefix and +# symbol address. +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\ +$lt_c_name_lib_hook\ +" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ +" -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function, + # D for any global variable and I for any imported variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK ['"\ +" {last_section=section; section=\$ 3};"\ +" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ +" /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ +" /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ +" {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ +" s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx]" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if AC_TRY_EVAL(ac_compile); then + # Now try to grab the symbols. + nlist=conftest.nm + if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE +/* DATA imports from DLLs on WIN32 can't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT@&t@_DLSYM_CONST +#elif defined __osf__ +/* This system does not cope well with relocations in const data. */ +# define LT@&t@_DLSYM_CONST +#else +# define LT@&t@_DLSYM_CONST const +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +LT@&t@_DLSYM_CONST struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[[]] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_globsym_save_LIBS=$LIBS + lt_globsym_save_CFLAGS=$CFLAGS + LIBS=conftstm.$ac_objext + CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" + if AC_TRY_EVAL(ac_link) && test -s conftest$ac_exeext; then + pipe_works=yes + fi + LIBS=$lt_globsym_save_LIBS + CFLAGS=$lt_globsym_save_CFLAGS + else + echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD + fi + else + echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test yes = "$pipe_works"; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done +]) +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + AC_MSG_RESULT(failed) +else + AC_MSG_RESULT(ok) +fi + +# Response file support. +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + nm_file_list_spec='@' +elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then + nm_file_list_spec='@' +fi + +_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], + [Take the output of nm and produce a listing of raw symbols and C names]) +_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], + [Transform the output of nm in a proper C declaration]) +_LT_DECL([global_symbol_to_import], [lt_cv_sys_global_symbol_to_import], [1], + [Transform the output of nm into a list of symbols to manually relocate]) +_LT_DECL([global_symbol_to_c_name_address], + [lt_cv_sys_global_symbol_to_c_name_address], [1], + [Transform the output of nm in a C name address pair]) +_LT_DECL([global_symbol_to_c_name_address_lib_prefix], + [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], + [Transform the output of nm in a C name address pair when lib prefix is needed]) +_LT_DECL([nm_interface], [lt_cv_nm_interface], [1], + [The name lister interface]) +_LT_DECL([], [nm_file_list_spec], [1], + [Specify filename containing input files for $NM]) +]) # _LT_CMD_GLOBAL_SYMBOLS + + +# _LT_COMPILER_PIC([TAGNAME]) +# --------------------------- +m4_defun([_LT_COMPILER_PIC], +[m4_require([_LT_TAG_COMPILER])dnl +_LT_TAGVAR(lt_prog_compiler_wl, $1)= +_LT_TAGVAR(lt_prog_compiler_pic, $1)= +_LT_TAGVAR(lt_prog_compiler_static, $1)= + +m4_if([$1], [CXX], [ + # C++ specific cases for pic, static, wl, etc. + if test yes = "$GXX"; then + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the '-m68020' flag to GCC prevents building anything better, + # like '-m68040'. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + case $host_os in + os2*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' + ;; + esac + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + _LT_TAGVAR(lt_prog_compiler_static, $1)= + ;; + interix[[3-9]]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + else + case $host_os in + aix[[4-9]]*) + # All AIX code is PIC. + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68*) + # Green Hills C++ Compiler + # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + dgux*) + case $cc_basename in + ec++*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + ghcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | dragonfly*) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' + if test ia64 != "$host_cpu"; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + fi + ;; + aCC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + interix*) + # This is c89, which is MS Visual C++ (no shared libs) + # Anyone wants to do a port? + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + KCC*) + # KAI C++ Compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + ecpc* ) + # old Intel C++ for x86_64, which still supported -KPIC. + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + icpc* ) + # Intel C++, used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + cxx*) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) + # IBM XL 8.0, 9.0 on PPC and BlueGene + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + esac + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd*) + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + ;; + RCC*) + # Rational C++ 2.4.1 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + cxx*) + # Digital/Compaq C++ + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + lcc*) + # Lucid + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + *) + ;; + esac + ;; + vxworks*) + ;; + *) + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +], +[ + if test yes = "$GCC"; then + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the '-m68020' flag to GCC prevents building anything better, + # like '-m68040'. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + case $host_os in + os2*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' + ;; + esac + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + _LT_TAGVAR(lt_prog_compiler_static, $1)= + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + + interix[[3-9]]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + + case $cc_basename in + nvcc*) # Cuda Compiler Driver 2.2 + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' + if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" + fi + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + case $cc_basename in + nagfor*) + # NAG Fortran compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + esac + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + case $host_os in + os2*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' + ;; + esac + ;; + + hpux9* | hpux10* | hpux11*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC (with -KPIC) is the default. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + # old Intel for x86_64, which still supported -KPIC. + ecc*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' + _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' + ;; + nagfor*) + # NAG Fortran compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + tcc*) + # Fabrice Bellard et al's Tiny C Compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + ccc*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All Alpha code is PIC. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + xl* | bgxl* | bgf* | mpixl*) + # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='' + ;; + *Sun\ F* | *Sun*Fortran*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + *Sun\ C*) + # Sun C 5.9 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + ;; + *Intel*\ [[CF]]*Compiler*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + *Portland\ Group*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + esac + ;; + esac + ;; + + newsos6) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All OSF/1 code is PIC. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + rdos*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + solaris*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + case $cc_basename in + f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; + *) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; + esac + ;; + + sunos4*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + unicos*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + + uts4*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *) + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +]) +case $host_os in + # For platforms that do not support PIC, -DPIC is meaningless: + *djgpp*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" + ;; +esac + +AC_CACHE_CHECK([for $compiler option to produce PIC], + [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], + [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) +_LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then + _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], + [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], + [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], + [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in + "" | " "*) ;; + *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; + esac], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) +fi +_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], + [Additional compiler flags for building library objects]) + +_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], + [How to pass a linker flag through the compiler]) +# +# Check to make sure the static flag actually works. +# +wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" +_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], + _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), + $lt_tmp_static_flag, + [], + [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) +_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], + [Compiler flag to prevent dynamic linking]) +])# _LT_COMPILER_PIC + + +# _LT_LINKER_SHLIBS([TAGNAME]) +# ---------------------------- +# See if the linker supports building shared libraries. +m4_defun([_LT_LINKER_SHLIBS], +[AC_REQUIRE([LT_PATH_LD])dnl +AC_REQUIRE([LT_PATH_NM])dnl +m4_require([_LT_PATH_MANIFEST_TOOL])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl +m4_require([_LT_TAG_COMPILER])dnl +AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) +m4_if([$1], [CXX], [ + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] + case $host_os in + aix[[4-9]]*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to GNU nm, but means don't demangle to AIX nm. + # Without the "-l" option, or with the "-B" option, AIX nm treats + # weak defined symbols like other global defined symbols, whereas + # GNU nm marks them as "W". + # While the 'weak' keyword is ignored in the Export File, we need + # it in the Import File for the 'aix-soname' feature, so we have + # to replace the "-B" option with "-P" for AIX nm. + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' + else + _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + _LT_TAGVAR(export_symbols_cmds, $1)=$ltdll_cmds + ;; + cygwin* | mingw* | cegcc*) + case $cc_basename in + cl*) + _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + ;; + *) + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] + ;; + esac + ;; + *) + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac +], [ + runpath_var= + _LT_TAGVAR(allow_undefined_flag, $1)= + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(archive_cmds, $1)= + _LT_TAGVAR(archive_expsym_cmds, $1)= + _LT_TAGVAR(compiler_needs_object, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + _LT_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(hardcode_automatic, $1)=no + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(hardcode_libdir_separator, $1)= + _LT_TAGVAR(hardcode_minus_L, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_TAGVAR(inherit_rpath, $1)=no + _LT_TAGVAR(link_all_deplibs, $1)=unknown + _LT_TAGVAR(module_cmds, $1)= + _LT_TAGVAR(module_expsym_cmds, $1)= + _LT_TAGVAR(old_archive_from_new_cmds, $1)= + _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= + _LT_TAGVAR(thread_safe_flag_spec, $1)= + _LT_TAGVAR(whole_archive_flag_spec, $1)= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + _LT_TAGVAR(include_expsyms, $1)= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ' (' and ')$', so one must not match beginning or + # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc', + # as well as any symbol that contains 'd'. + _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. +dnl Note also adjust exclude_expsyms for C++ above. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test yes != "$GCC"; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd* | bitrig*) + with_gnu_ld=no + ;; + esac + + _LT_TAGVAR(ld_shlibs, $1)=yes + + # On some targets, GNU ld is compatible enough with the native linker + # that we're better off using the native interface for both. + lt_use_gnu_ld_interface=no + if test yes = "$with_gnu_ld"; then + case $host_os in + aix*) + # The AIX port of GNU ld has always aspired to compatibility + # with the native linker. However, as the warning in the GNU ld + # block says, versions before 2.19.5* couldn't really create working + # shared libraries, regardless of the interface used. + case `$LD -v 2>&1` in + *\ \(GNU\ Binutils\)\ 2.19.5*) ;; + *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; + *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + fi + + if test yes = "$lt_use_gnu_ld_interface"; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='$wl' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + supports_anon_versioning=no + case `$LD -v | $SED -e 's/([^)]\+)\s\+//' 2>&1` in + *GNU\ gold*) supports_anon_versioning=yes ;; + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[[3-9]]*) + # On AIX/PPC, the GNU linker is very broken + if test ia64 != "$host_cpu"; then + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.19, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to install binutils +*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. +*** You will then need to restart the configuration process. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='' + ;; + m68k) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file, use it as + # is; otherwise, prepend EXPORTS... + _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + haiku*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + os2*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + shrext_cmds=.dll + _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + + interix[[3-9]]*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + tmp_diet=no + if test linux-dietlibc = "$host_os"; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test no = "$tmp_diet" + then + tmp_addflag=' $pic_flag' + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group f77 and f90 compilers + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + _LT_TAGVAR(whole_archive_flag_spec, $1)= + tmp_sharedflag='--shared' ;; + nagfor*) # NAGFOR 5.3 + tmp_sharedflag='-Wl,-shared' ;; + xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + nvcc*) # Cuda Compiler Driver 2.2 + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + + if test yes = "$supports_anon_versioning"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + tcc*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='-rdynamic' + ;; + xlf* | bgf* | bgxlf* | mpixlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' + if test yes = "$supports_anon_versioning"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + sunos4*) + _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + + if test no = "$_LT_TAGVAR(ld_shlibs, $1)"; then + runpath_var= + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + _LT_TAGVAR(hardcode_direct, $1)=unsupported + fi + ;; + + aix[[4-9]]*) + if test ia64 = "$host_cpu"; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag= + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to GNU nm, but means don't demangle to AIX nm. + # Without the "-l" option, or with the "-B" option, AIX nm treats + # weak defined symbols like other global defined symbols, whereas + # GNU nm marks them as "W". + # While the 'weak' keyword is ignored in the Export File, we need + # it in the Import File for the 'aix-soname' feature, so we have + # to replace the "-B" option with "-P" for AIX nm. + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' + else + _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # have runtime linking enabled, and use it for executables. + # For shared libraries, we enable/disable runtime linking + # depending on the kind of the shared library created - + # when "with_aix_soname,aix_use_runtimelinking" is: + # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables + # "aix,yes" lib.so shared, rtl:yes, for executables + # lib.a static archive + # "both,no" lib.so.V(shr.o) shared, rtl:yes + # lib.a(lib.so.V) shared, rtl:no, for executables + # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a(lib.so.V) shared, rtl:no + # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a static archive + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) + for ld_flag in $LDFLAGS; do + if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then + aix_use_runtimelinking=yes + break + fi + done + if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then + # With aix-soname=svr4, we create the lib.so.V shared archives only, + # so we don't have lib.a shared libs to link our executables. + # We have to force runtime linking in this case. + aix_use_runtimelinking=yes + LDFLAGS="$LDFLAGS -Wl,-brtl" + fi + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_TAGVAR(archive_cmds, $1)='' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='$wl-f,' + case $with_aix_soname,$aix_use_runtimelinking in + aix,*) ;; # traditional, no import file + svr4,* | *,yes) # use import file + # The Import File defines what to hardcode. + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=no + ;; + esac + + if test yes = "$GCC"; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`$CC -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + _LT_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)= + fi + ;; + esac + shared_flag='-shared' + if test yes = "$aix_use_runtimelinking"; then + shared_flag="$shared_flag "'$wl-G' + fi + # Need to ensure runtime linking is disabled for the traditional + # shared library, or the linker may eventually find shared libraries + # /with/ Import File - we do not want to mix them. + shared_flag_aix='-shared' + shared_flag_svr4='-shared $wl-G' + else + # not using gcc + if test ia64 = "$host_cpu"; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test yes = "$aix_use_runtimelinking"; then + shared_flag='$wl-G' + else + shared_flag='$wl-bM:SRE' + fi + shared_flag_aix='$wl-bM:SRE' + shared_flag_svr4='$wl-G' + fi + fi + + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + _LT_TAGVAR(always_export_symbols, $1)=yes + if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag + else + if test ia64 = "$host_cpu"; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib' + _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok' + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok' + if test yes = "$with_gnu_ld"; then + # We only use this code for GNU lds that support --whole-archive. + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' + # -brtl affects multiple linker settings, -berok does not and is overridden later + compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`' + if test svr4 != "$with_aix_soname"; then + # This is similar to how AIX traditionally builds its shared libraries. + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' + fi + if test aix != "$with_aix_soname"; then + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' + else + # used by -dlpreopen to get the symbols + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir' + fi + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='' + ;; + m68k) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + ;; + + bsdi[[45]]*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + case $cc_basename in + cl*) + # Native MSVC + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=.dll + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' + _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then + cp "$export_symbols" "$output_objdir/$soname.def"; + echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; + else + $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' + # Don't use ranlib + _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' + _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile=$lt_outputfile.exe + lt_tool_outputfile=$lt_tool_outputfile.exe + ;; + esac~ + if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # Assume MSVC wrapper + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=.dll + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + # FIXME: Should let the user specify the lib program. + _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + esac + ;; + + darwin* | rhapsody*) + _LT_DARWIN_LINKER_FEATURES($1) + ;; + + dgux*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2.*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + hpux9*) + if test yes = "$GCC"; then + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + else + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_direct, $1)=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + ;; + + hpux10*) + if test yes,no = "$GCC,$with_gnu_ld"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test no = "$with_gnu_ld"; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + fi + ;; + + hpux11*) + if test yes,no = "$GCC,$with_gnu_ld"; then + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + m4_if($1, [], [ + # Older versions of the 11.00 compiler do not understand -b yet + # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) + _LT_LINKER_OPTION([if $CC understands -b], + _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], + [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], + [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], + [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) + ;; + esac + fi + if test no = "$with_gnu_ld"; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test yes = "$GCC"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + # This should be the same for all languages, so no per-tag cache variable. + AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], + [lt_cv_irix_exported_symbol], + [save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" + AC_LINK_IFELSE( + [AC_LANG_SOURCE( + [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], + [C++], [[int foo (void) { return 0; }]], + [Fortran 77], [[ + subroutine foo + end]], + [Fortran], [[ + subroutine foo + end]])])], + [lt_cv_irix_exported_symbol=yes], + [lt_cv_irix_exported_symbol=no]) + LDFLAGS=$save_LDFLAGS]) + if test yes = "$lt_cv_irix_exported_symbol"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' + fi + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(inherit_rpath, $1)=yes + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + linux*) + case $cc_basename in + tcc*) + # Fabrice Bellard et al's Tiny C Compiler + _LT_TAGVAR(ld_shlibs, $1)=yes + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + newsos6) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *nto* | *qnx*) + ;; + + openbsd* | bitrig*) + if test -f /usr/libexec/ld.so; then + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + fi + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + os2*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + shrext_cmds=.dll + _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + + osf3*) + if test yes = "$GCC"; then + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + else + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test yes = "$GCC"; then + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + else + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + solaris*) + _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' + if test yes = "$GCC"; then + wlarc='$wl' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + _LT_TAGVAR(archive_cmds, $1)='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='$wl' + _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands '-z linker_flag'. GCC discards it without '$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test yes = "$GCC"; then + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' + fi + ;; + esac + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + sunos4*) + if test sequent = "$host_vendor"; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4) + case $host_vendor in + sni) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' + _LT_TAGVAR(hardcode_direct, $1)=no + ;; + motorola) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4.3*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + _LT_TAGVAR(ld_shlibs, $1)=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) + _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + if test yes = "$GCC"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We CANNOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' + _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport' + runpath_var='LD_RUN_PATH' + + if test yes = "$GCC"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + + if test sni = "$host_vendor"; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Blargedynsym' + ;; + esac + fi + fi +]) +AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) +test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no + +_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld + +_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl +_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl +_LT_DECL([], [extract_expsyms_cmds], [2], + [The commands to extract the exported symbol list from a shared archive]) + +# +# Do we need to explicitly link libc? +# +case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in +x|xyes) + # Assume -lc should be added + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + + if test yes,yes = "$GCC,$enable_shared"; then + case $_LT_TAGVAR(archive_cmds, $1) in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + AC_CACHE_CHECK([whether -lc should be explicitly linked in], + [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), + [$RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if AC_TRY_EVAL(ac_compile) 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) + pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) + _LT_TAGVAR(allow_undefined_flag, $1)= + if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) + then + lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no + else + lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes + fi + _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + ]) + _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) + ;; + esac + fi + ;; +esac + +_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], + [Whether or not to add -lc for building shared libraries]) +_LT_TAGDECL([allow_libtool_libs_with_static_runtimes], + [enable_shared_with_static_runtimes], [0], + [Whether or not to disallow shared libs when runtime libs are static]) +_LT_TAGDECL([], [export_dynamic_flag_spec], [1], + [Compiler flag to allow reflexive dlopens]) +_LT_TAGDECL([], [whole_archive_flag_spec], [1], + [Compiler flag to generate shared objects directly from archives]) +_LT_TAGDECL([], [compiler_needs_object], [1], + [Whether the compiler copes with passing no objects directly]) +_LT_TAGDECL([], [old_archive_from_new_cmds], [2], + [Create an old-style archive from a shared archive]) +_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], + [Create a temporary old-style archive to link instead of a shared archive]) +_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) +_LT_TAGDECL([], [archive_expsym_cmds], [2]) +_LT_TAGDECL([], [module_cmds], [2], + [Commands used to build a loadable module if different from building + a shared archive.]) +_LT_TAGDECL([], [module_expsym_cmds], [2]) +_LT_TAGDECL([], [with_gnu_ld], [1], + [Whether we are building with GNU ld or not]) +_LT_TAGDECL([], [allow_undefined_flag], [1], + [Flag that allows shared libraries with undefined symbols to be built]) +_LT_TAGDECL([], [no_undefined_flag], [1], + [Flag that enforces no undefined symbols]) +_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], + [Flag to hardcode $libdir into a binary during linking. + This must work even if $libdir does not exist]) +_LT_TAGDECL([], [hardcode_libdir_separator], [1], + [Whether we need a single "-rpath" flag with a separated argument]) +_LT_TAGDECL([], [hardcode_direct], [0], + [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes + DIR into the resulting binary]) +_LT_TAGDECL([], [hardcode_direct_absolute], [0], + [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes + DIR into the resulting binary and the resulting library dependency is + "absolute", i.e impossible to change by setting $shlibpath_var if the + library is relocated]) +_LT_TAGDECL([], [hardcode_minus_L], [0], + [Set to "yes" if using the -LDIR flag during linking hardcodes DIR + into the resulting binary]) +_LT_TAGDECL([], [hardcode_shlibpath_var], [0], + [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR + into the resulting binary]) +_LT_TAGDECL([], [hardcode_automatic], [0], + [Set to "yes" if building a shared library automatically hardcodes DIR + into the library and all subsequent libraries and executables linked + against it]) +_LT_TAGDECL([], [inherit_rpath], [0], + [Set to yes if linker adds runtime paths of dependent libraries + to runtime path list]) +_LT_TAGDECL([], [link_all_deplibs], [0], + [Whether libtool must link a program against all its dependency libraries]) +_LT_TAGDECL([], [always_export_symbols], [0], + [Set to "yes" if exported symbols are required]) +_LT_TAGDECL([], [export_symbols_cmds], [2], + [The commands to list exported symbols]) +_LT_TAGDECL([], [exclude_expsyms], [1], + [Symbols that should not be listed in the preloaded symbols]) +_LT_TAGDECL([], [include_expsyms], [1], + [Symbols that must always be exported]) +_LT_TAGDECL([], [prelink_cmds], [2], + [Commands necessary for linking programs (against libraries) with templates]) +_LT_TAGDECL([], [postlink_cmds], [2], + [Commands necessary for finishing linking programs]) +_LT_TAGDECL([], [file_list_spec], [1], + [Specify filename containing input files]) +dnl FIXME: Not yet implemented +dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], +dnl [Compiler flag to generate thread safe objects]) +])# _LT_LINKER_SHLIBS + + +# _LT_LANG_C_CONFIG([TAG]) +# ------------------------ +# Ensure that the configuration variables for a C compiler are suitably +# defined. These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_C_CONFIG], +[m4_require([_LT_DECL_EGREP])dnl +lt_save_CC=$CC +AC_LANG_PUSH(C) + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + +_LT_TAG_COMPILER +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + LT_SYS_DLOPEN_SELF + _LT_CMD_STRIPLIB + + # Report what library types will actually be built + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test no = "$can_build_shared" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test yes = "$enable_shared" && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[[4-9]]*) + if test ia64 != "$host_cpu"; then + case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in + yes,aix,yes) ;; # shared object as lib.so file only + yes,svr4,*) ;; # shared object as lib.so archive member only + yes,*) enable_static=no ;; # shared object in lib.a archive as well + esac + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test yes = "$enable_shared" || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_CONFIG($1) +fi +AC_LANG_POP +CC=$lt_save_CC +])# _LT_LANG_C_CONFIG + + +# _LT_LANG_CXX_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a C++ compiler are suitably +# defined. These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_CXX_CONFIG], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_PATH_MANIFEST_TOOL])dnl +if test -n "$CXX" && ( test no != "$CXX" && + ( (test g++ = "$CXX" && `g++ -v >/dev/null 2>&1` ) || + (test g++ != "$CXX"))); then + AC_PROG_CXXCPP +else + _lt_caught_CXX_error=yes +fi + +AC_LANG_PUSH(C++) +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(compiler_needs_object, $1)=no +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for C++ test sources. +ac_ext=cpp + +# Object file extension for compiled C++ test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the CXX compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test yes != "$_lt_caught_CXX_error"; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="int some_variable = 0;" + + # Code to be used in simple link tests + lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_CFLAGS=$CFLAGS + lt_save_LD=$LD + lt_save_GCC=$GCC + GCC=$GXX + lt_save_with_gnu_ld=$with_gnu_ld + lt_save_path_LD=$lt_cv_path_LD + if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx + else + $as_unset lt_cv_prog_gnu_ld + fi + if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX + else + $as_unset lt_cv_path_LD + fi + test -z "${LDCXX+set}" || LD=$LDCXX + CC=${CXX-"c++"} + CFLAGS=$CXXFLAGS + compiler=$CC + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + + if test -n "$compiler"; then + # We don't want -fno-exception when compiling C++ code, so set the + # no_builtin_flag separately + if test yes = "$GXX"; then + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' + else + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + fi + + if test yes = "$GXX"; then + # Set up default GNU C++ configuration + + LT_PATH_LD + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test yes = "$with_gnu_ld"; then + _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='$wl' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | + $GREP 'no-whole-archive' > /dev/null; then + _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + GXX=no + with_gnu_ld=no + wlarc= + fi + + # PORTME: fill in a description of your system's C++ link characteristics + AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) + _LT_TAGVAR(ld_shlibs, $1)=yes + case $host_os in + aix3*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aix[[4-9]]*) + if test ia64 = "$host_cpu"; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag= + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # have runtime linking enabled, and use it for executables. + # For shared libraries, we enable/disable runtime linking + # depending on the kind of the shared library created - + # when "with_aix_soname,aix_use_runtimelinking" is: + # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables + # "aix,yes" lib.so shared, rtl:yes, for executables + # lib.a static archive + # "both,no" lib.so.V(shr.o) shared, rtl:yes + # lib.a(lib.so.V) shared, rtl:no, for executables + # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a(lib.so.V) shared, rtl:no + # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a static archive + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then + # With aix-soname=svr4, we create the lib.so.V shared archives only, + # so we don't have lib.a shared libs to link our executables. + # We have to force runtime linking in this case. + aix_use_runtimelinking=yes + LDFLAGS="$LDFLAGS -Wl,-brtl" + fi + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_TAGVAR(archive_cmds, $1)='' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='$wl-f,' + case $with_aix_soname,$aix_use_runtimelinking in + aix,*) ;; # no import file + svr4,* | *,yes) # use import file + # The Import File defines what to hardcode. + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=no + ;; + esac + + if test yes = "$GXX"; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`$CC -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + _LT_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)= + fi + esac + shared_flag='-shared' + if test yes = "$aix_use_runtimelinking"; then + shared_flag=$shared_flag' $wl-G' + fi + # Need to ensure runtime linking is disabled for the traditional + # shared library, or the linker may eventually find shared libraries + # /with/ Import File - we do not want to mix them. + shared_flag_aix='-shared' + shared_flag_svr4='-shared $wl-G' + else + # not using gcc + if test ia64 = "$host_cpu"; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test yes = "$aix_use_runtimelinking"; then + shared_flag='$wl-G' + else + shared_flag='$wl-bM:SRE' + fi + shared_flag_aix='$wl-bM:SRE' + shared_flag_svr4='$wl-G' + fi + fi + + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to + # export. + _LT_TAGVAR(always_export_symbols, $1)=yes + if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + # The "-G" linker flag allows undefined symbols. + _LT_TAGVAR(no_undefined_flag, $1)='-bernotok' + # Determine the default libpath from the value encoded in an empty + # executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" + + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag + else + if test ia64 = "$host_cpu"; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib' + _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok' + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok' + if test yes = "$with_gnu_ld"; then + # We only use this code for GNU lds that support --whole-archive. + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' + # -brtl affects multiple linker settings, -berok does not and is overridden later + compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`' + if test svr4 != "$with_aix_soname"; then + # This is similar to how AIX traditionally builds its shared + # libraries. Need -bnortl late, we may have -brtl in LDFLAGS. + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' + fi + if test aix != "$with_aix_soname"; then + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' + else + # used by -dlpreopen to get the symbols + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir' + fi + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d' + fi + fi + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + cygwin* | mingw* | pw32* | cegcc*) + case $GXX,$cc_basename in + ,cl* | no,cl*) + # Native MSVC + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=.dll + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' + _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then + cp "$export_symbols" "$output_objdir/$soname.def"; + echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; + else + $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + # Don't use ranlib + _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' + _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile=$lt_outputfile.exe + lt_tool_outputfile=$lt_tool_outputfile.exe + ;; + esac~ + func_to_tool_file "$lt_outputfile"~ + if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # g++ + # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file, use it as + # is; otherwise, prepend EXPORTS... + _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + darwin* | rhapsody*) + _LT_DARWIN_LINKER_FEATURES($1) + ;; + + os2*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + shrext_cmds=.dll + _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + + dgux*) + case $cc_basename in + ec++*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + ghcx*) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + freebsd2.*) + # C++ shared libraries reported to be fairly broken before + # switch to ELF + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + freebsd-elf*) + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + ;; + + freebsd* | dragonfly*) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + _LT_TAGVAR(ld_shlibs, $1)=yes + ;; + + haiku*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + hpux9*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test yes = "$GXX"; then + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + hpux10*|hpux11*) + if test no = "$with_gnu_ld"; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + ;; + *) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + ;; + esac + fi + case $host_cpu in + hppa*64*|ia64*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test yes = "$GXX"; then + if test no = "$with_gnu_ld"; then + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + interix[[3-9]]*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + irix5* | irix6*) + case $cc_basename in + CC*) + # SGI C++ + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test yes = "$GXX"; then + if test no = "$with_gnu_ld"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` -o $lib' + fi + fi + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + esac + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(inherit_rpath, $1)=yes + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib $wl-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc* | ecpc* ) + # Intel C++ + with_gnu_ld=yes + # version 8.0 and above of icpc choke on multiply defined symbols + # if we add $predep_objects and $postdep_objects, however 7.1 and + # earlier do not add the objects themselves. + case `$CC -V 2>&1` in + *"Version 7."*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 8.0 or newer + tmp_idyn= + case $host_cpu in + ia64*) tmp_idyn=' -i_dynamic';; + esac + _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + case `$CC -V` in + *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) + _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ + compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' + _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ + $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ + $RANLIB $oldlib' + _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 6 and above use weak symbols + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl--rpath $wl$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + ;; + cxx*) + # Compaq C++ + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib $wl-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' + ;; + xl* | mpixl* | bgxl*) + # IBM XL 8.0 on PPC, with GNU ld + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + if test yes = "$supports_anon_versioning"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' + fi + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file $wl$export_symbols' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + + # Not sure whether something based on + # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 + # would be better. + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + esac + ;; + esac + ;; + + lynxos*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + m88k*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + mvs*) + case $cc_basename in + cxx*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; + + *nto* | *qnx*) + _LT_TAGVAR(ld_shlibs, $1)=yes + ;; + + openbsd* | bitrig*) + if test -f /usr/libexec/ld.so; then + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file,$export_symbols -o $lib' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' + fi + output_verbose_link_cmd=func_echo_all + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + case $host in + osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; + *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; + esac + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + cxx*) + case $host in + osf3*) + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $soname `test -n "$verstring" && func_echo_all "$wl-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + ;; + *) + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname $wl-input $wl$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~ + $RM $lib.exp' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test yes,no = "$GXX,$with_gnu_ld"; then + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' + case $host in + osf3*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + psos*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + lcc*) + # Lucid + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_TAGVAR(archive_cmds_need_lc,$1)=yes + _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G$allow_undefined_flag $wl-M $wl$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands '-z linker_flag'. + # Supported since Solaris 2.6 (maybe 2.5.1?) + _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' + ;; + esac + _LT_TAGVAR(link_all_deplibs, $1)=yes + + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test yes,no = "$GXX,$with_gnu_ld"; then + _LT_TAGVAR(no_undefined_flag, $1)=' $wl-z ${wl}defs' + if $CC --version | $GREP -v '^2\.7' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + else + # g++ 2.7 appears to require '-G' NOT '-shared' on this + # platform. + _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + fi + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $wl$libdir' + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' + ;; + esac + fi + ;; + esac + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) + _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We CANNOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' + _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport' + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ + '"$_LT_TAGVAR(old_archive_cmds, $1)" + _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ + '"$_LT_TAGVAR(reload_cmds, $1)" + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + vxworks*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + + AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) + test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no + + _LT_TAGVAR(GCC, $1)=$GXX + _LT_TAGVAR(LD, $1)=$LD + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_SYS_HIDDEN_LIBDEPS($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS + LDCXX=$LD + LD=$lt_save_LD + GCC=$lt_save_GCC + with_gnu_ld=$lt_save_with_gnu_ld + lt_cv_path_LDCXX=$lt_cv_path_LD + lt_cv_path_LD=$lt_save_path_LD + lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld + lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld +fi # test yes != "$_lt_caught_CXX_error" + +AC_LANG_POP +])# _LT_LANG_CXX_CONFIG + + +# _LT_FUNC_STRIPNAME_CNF +# ---------------------- +# func_stripname_cnf prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# +# This function is identical to the (non-XSI) version of func_stripname, +# except this one can be used by m4 code that may be executed by configure, +# rather than the libtool script. +m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl +AC_REQUIRE([_LT_DECL_SED]) +AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) +func_stripname_cnf () +{ + case @S|@2 in + .*) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%\\\\@S|@2\$%%"`;; + *) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%@S|@2\$%%"`;; + esac +} # func_stripname_cnf +])# _LT_FUNC_STRIPNAME_CNF + + +# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) +# --------------------------------- +# Figure out "hidden" library dependencies from verbose +# compiler output when linking a shared library. +# Parse the compiler output and extract the necessary +# objects, libraries and library flags. +m4_defun([_LT_SYS_HIDDEN_LIBDEPS], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl +# Dependencies to place before and after the object being linked: +_LT_TAGVAR(predep_objects, $1)= +_LT_TAGVAR(postdep_objects, $1)= +_LT_TAGVAR(predeps, $1)= +_LT_TAGVAR(postdeps, $1)= +_LT_TAGVAR(compiler_lib_search_path, $1)= + +dnl we can't use the lt_simple_compile_test_code here, +dnl because it contains code intended for an executable, +dnl not a library. It's possible we should let each +dnl tag define a new lt_????_link_test_code variable, +dnl but it's only used here... +m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF +int a; +void foo (void) { a = 0; } +_LT_EOF +], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF +class Foo +{ +public: + Foo (void) { a = 0; } +private: + int a; +}; +_LT_EOF +], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF + subroutine foo + implicit none + integer*4 a + a=0 + return + end +_LT_EOF +], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF + subroutine foo + implicit none + integer a + a=0 + return + end +_LT_EOF +], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF +public class foo { + private int a; + public void bar (void) { + a = 0; + } +}; +_LT_EOF +], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF +package foo +func foo() { +} +_LT_EOF +]) + +_lt_libdeps_save_CFLAGS=$CFLAGS +case "$CC $CFLAGS " in #( +*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; +*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; +*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; +esac + +dnl Parse the compiler output and extract the necessary +dnl objects, libraries and library flags. +if AC_TRY_EVAL(ac_compile); then + # Parse the compiler output and extract the necessary + # objects, libraries and library flags. + + # Sentinel used to keep track of whether or not we are before + # the conftest object file. + pre_test_object_deps_done=no + + for p in `eval "$output_verbose_link_cmd"`; do + case $prev$p in + + -L* | -R* | -l*) + # Some compilers place space between "-{L,R}" and the path. + # Remove the space. + if test x-L = "$p" || + test x-R = "$p"; then + prev=$p + continue + fi + + # Expand the sysroot to ease extracting the directories later. + if test -z "$prev"; then + case $p in + -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; + -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; + -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; + esac + fi + case $p in + =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; + esac + if test no = "$pre_test_object_deps_done"; then + case $prev in + -L | -R) + # Internal compiler library paths should come after those + # provided the user. The postdeps already come after the + # user supplied libs so there is no need to process them. + if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then + _LT_TAGVAR(compiler_lib_search_path, $1)=$prev$p + else + _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} $prev$p" + fi + ;; + # The "-l" case would never come before the object being + # linked, so don't bother handling this case. + esac + else + if test -z "$_LT_TAGVAR(postdeps, $1)"; then + _LT_TAGVAR(postdeps, $1)=$prev$p + else + _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} $prev$p" + fi + fi + prev= + ;; + + *.lto.$objext) ;; # Ignore GCC LTO objects + *.$objext) + # This assumes that the test object file only shows up + # once in the compiler output. + if test "$p" = "conftest.$objext"; then + pre_test_object_deps_done=yes + continue + fi + + if test no = "$pre_test_object_deps_done"; then + if test -z "$_LT_TAGVAR(predep_objects, $1)"; then + _LT_TAGVAR(predep_objects, $1)=$p + else + _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" + fi + else + if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then + _LT_TAGVAR(postdep_objects, $1)=$p + else + _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" + fi + fi + ;; + + *) ;; # Ignore the rest. + + esac + done + + # Clean up. + rm -f a.out a.exe +else + echo "libtool.m4: error: problem compiling $1 test program" +fi + +$RM -f confest.$objext +CFLAGS=$_lt_libdeps_save_CFLAGS + +# PORTME: override above test on systems where it is broken +m4_if([$1], [CXX], +[case $host_os in +interix[[3-9]]*) + # Interix 3.5 installs completely hosed .la files for C++, so rather than + # hack all around it, let's just trust "g++" to DTRT. + _LT_TAGVAR(predep_objects,$1)= + _LT_TAGVAR(postdep_objects,$1)= + _LT_TAGVAR(postdeps,$1)= + ;; +esac +]) + +case " $_LT_TAGVAR(postdeps, $1) " in +*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; +esac + _LT_TAGVAR(compiler_lib_search_dirs, $1)= +if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then + _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | $SED -e 's! -L! !g' -e 's!^ !!'` +fi +_LT_TAGDECL([], [compiler_lib_search_dirs], [1], + [The directories searched by this compiler when creating a shared library]) +_LT_TAGDECL([], [predep_objects], [1], + [Dependencies to place before and after the objects being linked to + create a shared library]) +_LT_TAGDECL([], [postdep_objects], [1]) +_LT_TAGDECL([], [predeps], [1]) +_LT_TAGDECL([], [postdeps], [1]) +_LT_TAGDECL([], [compiler_lib_search_path], [1], + [The library search path used internally by the compiler when linking + a shared library]) +])# _LT_SYS_HIDDEN_LIBDEPS + + +# _LT_LANG_F77_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a Fortran 77 compiler are +# suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_F77_CONFIG], +[AC_LANG_PUSH(Fortran 77) +if test -z "$F77" || test no = "$F77"; then + _lt_disable_F77=yes +fi + +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for f77 test sources. +ac_ext=f + +# Object file extension for compiled f77 test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the F77 compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test yes != "$_lt_disable_F77"; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="\ + subroutine t + return + end +" + + # Code to be used in simple link tests + lt_simple_link_test_code="\ + program t + end +" + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_GCC=$GCC + lt_save_CFLAGS=$CFLAGS + CC=${F77-"f77"} + CFLAGS=$FFLAGS + compiler=$CC + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + GCC=$G77 + if test -n "$compiler"; then + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test no = "$can_build_shared" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test yes = "$enable_shared" && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix[[4-9]]*) + if test ia64 != "$host_cpu"; then + case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in + yes,aix,yes) ;; # shared object as lib.so file only + yes,svr4,*) ;; # shared object as lib.so archive member only + yes,*) enable_static=no ;; # shared object in lib.a archive as well + esac + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test yes = "$enable_shared" || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_TAGVAR(GCC, $1)=$G77 + _LT_TAGVAR(LD, $1)=$LD + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + GCC=$lt_save_GCC + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS +fi # test yes != "$_lt_disable_F77" + +AC_LANG_POP +])# _LT_LANG_F77_CONFIG + + +# _LT_LANG_FC_CONFIG([TAG]) +# ------------------------- +# Ensure that the configuration variables for a Fortran compiler are +# suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_FC_CONFIG], +[AC_LANG_PUSH(Fortran) + +if test -z "$FC" || test no = "$FC"; then + _lt_disable_FC=yes +fi + +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for fc test sources. +ac_ext=${ac_fc_srcext-f} + +# Object file extension for compiled fc test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the FC compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test yes != "$_lt_disable_FC"; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="\ + subroutine t + return + end +" + + # Code to be used in simple link tests + lt_simple_link_test_code="\ + program t + end +" + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_GCC=$GCC + lt_save_CFLAGS=$CFLAGS + CC=${FC-"f95"} + CFLAGS=$FCFLAGS + compiler=$CC + GCC=$ac_cv_fc_compiler_gnu + + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + + if test -n "$compiler"; then + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test no = "$can_build_shared" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test yes = "$enable_shared" && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix[[4-9]]*) + if test ia64 != "$host_cpu"; then + case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in + yes,aix,yes) ;; # shared object as lib.so file only + yes,svr4,*) ;; # shared object as lib.so archive member only + yes,*) enable_static=no ;; # shared object in lib.a archive as well + esac + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test yes = "$enable_shared" || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_TAGVAR(GCC, $1)=$ac_cv_fc_compiler_gnu + _LT_TAGVAR(LD, $1)=$LD + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_SYS_HIDDEN_LIBDEPS($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + GCC=$lt_save_GCC + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS +fi # test yes != "$_lt_disable_FC" + +AC_LANG_POP +])# _LT_LANG_FC_CONFIG + + +# _LT_LANG_GCJ_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for the GNU Java Compiler compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_GCJ_CONFIG], +[AC_REQUIRE([LT_PROG_GCJ])dnl +AC_LANG_SAVE + +# Source file extension for Java test sources. +ac_ext=java + +# Object file extension for compiled Java test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="class foo {}" + +# Code to be used in simple link tests +lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_CFLAGS=$CFLAGS +lt_save_GCC=$GCC +GCC=yes +CC=${GCJ-"gcj"} +CFLAGS=$GCJFLAGS +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_TAGVAR(LD, $1)=$LD +_LT_CC_BASENAME([$compiler]) + +# GCJ did not exist at the time GCC didn't implicitly link libc in. +_LT_TAGVAR(archive_cmds_need_lc, $1)=no + +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) +fi + +AC_LANG_RESTORE + +GCC=$lt_save_GCC +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS +])# _LT_LANG_GCJ_CONFIG + + +# _LT_LANG_GO_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for the GNU Go compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_GO_CONFIG], +[AC_REQUIRE([LT_PROG_GO])dnl +AC_LANG_SAVE + +# Source file extension for Go test sources. +ac_ext=go + +# Object file extension for compiled Go test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="package main; func main() { }" + +# Code to be used in simple link tests +lt_simple_link_test_code='package main; func main() { }' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_CFLAGS=$CFLAGS +lt_save_GCC=$GCC +GCC=yes +CC=${GOC-"gccgo"} +CFLAGS=$GOFLAGS +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_TAGVAR(LD, $1)=$LD +_LT_CC_BASENAME([$compiler]) + +# Go did not exist at the time GCC didn't implicitly link libc in. +_LT_TAGVAR(archive_cmds_need_lc, $1)=no + +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) +fi + +AC_LANG_RESTORE + +GCC=$lt_save_GCC +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS +])# _LT_LANG_GO_CONFIG + + +# _LT_LANG_RC_CONFIG([TAG]) +# ------------------------- +# Ensure that the configuration variables for the Windows resource compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_RC_CONFIG], +[AC_REQUIRE([LT_PROG_RC])dnl +AC_LANG_SAVE + +# Source file extension for RC test sources. +ac_ext=rc + +# Object file extension for compiled RC test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' + +# Code to be used in simple link tests +lt_simple_link_test_code=$lt_simple_compile_test_code + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_CFLAGS=$CFLAGS +lt_save_GCC=$GCC +GCC= +CC=${RC-"windres"} +CFLAGS= +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_CC_BASENAME([$compiler]) +_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + +if test -n "$compiler"; then + : + _LT_CONFIG($1) +fi + +GCC=$lt_save_GCC +AC_LANG_RESTORE +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS +])# _LT_LANG_RC_CONFIG + + +# LT_PROG_GCJ +# ----------- +AC_DEFUN([LT_PROG_GCJ], +[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], + [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], + [AC_CHECK_TOOL(GCJ, gcj,) + test set = "${GCJFLAGS+set}" || GCJFLAGS="-g -O2" + AC_SUBST(GCJFLAGS)])])[]dnl +]) + +# Old name: +AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_GCJ], []) + + +# LT_PROG_GO +# ---------- +AC_DEFUN([LT_PROG_GO], +[AC_CHECK_TOOL(GOC, gccgo,) +]) + + +# LT_PROG_RC +# ---------- +AC_DEFUN([LT_PROG_RC], +[AC_CHECK_TOOL(RC, windres,) +]) + +# Old name: +AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_RC], []) + + +# _LT_DECL_EGREP +# -------------- +# If we don't have a new enough Autoconf to choose the best grep +# available, choose the one first in the user's PATH. +m4_defun([_LT_DECL_EGREP], +[AC_REQUIRE([AC_PROG_EGREP])dnl +AC_REQUIRE([AC_PROG_FGREP])dnl +test -z "$GREP" && GREP=grep +_LT_DECL([], [GREP], [1], [A grep program that handles long lines]) +_LT_DECL([], [EGREP], [1], [An ERE matcher]) +_LT_DECL([], [FGREP], [1], [A literal string matcher]) +dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too +AC_SUBST([GREP]) +]) + + +# _LT_DECL_OBJDUMP +# -------------- +# If we don't have a new enough Autoconf to choose the best objdump +# available, choose the one first in the user's PATH. +m4_defun([_LT_DECL_OBJDUMP], +[AC_CHECK_TOOL(OBJDUMP, objdump, false) +test -z "$OBJDUMP" && OBJDUMP=objdump +_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) +AC_SUBST([OBJDUMP]) +]) + +# _LT_DECL_DLLTOOL +# ---------------- +# Ensure DLLTOOL variable is set. +m4_defun([_LT_DECL_DLLTOOL], +[AC_CHECK_TOOL(DLLTOOL, dlltool, false) +test -z "$DLLTOOL" && DLLTOOL=dlltool +_LT_DECL([], [DLLTOOL], [1], [DLL creation program]) +AC_SUBST([DLLTOOL]) +]) + +# _LT_DECL_SED +# ------------ +# Check for a fully-functional sed program, that truncates +# as few characters as possible. Prefer GNU sed if found. +m4_defun([_LT_DECL_SED], +[AC_PROG_SED +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" +_LT_DECL([], [SED], [1], [A sed program that does not truncate output]) +_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], + [Sed that helps us avoid accidentally triggering echo(1) options like -n]) +])# _LT_DECL_SED + +m4_ifndef([AC_PROG_SED], [ +############################################################ +# NOTE: This macro has been submitted for inclusion into # +# GNU Autoconf as AC_PROG_SED. When it is available in # +# a released version of Autoconf we should remove this # +# macro and use it instead. # +############################################################ + +m4_defun([AC_PROG_SED], +[AC_MSG_CHECKING([for a sed that does not truncate output]) +AC_CACHE_VAL(lt_cv_path_SED, +[# Loop through the user's path and test for sed and gsed. +# Then use that list of sed's as ones to test for truncation. +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for lt_ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then + lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" + fi + done + done +done +IFS=$as_save_IFS +lt_ac_max=0 +lt_ac_count=0 +# Add /usr/xpg4/bin/sed as it is typically found on Solaris +# along with /bin/sed that truncates output. +for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do + test ! -f "$lt_ac_sed" && continue + cat /dev/null > conftest.in + lt_ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >conftest.in + # Check for GNU sed and select it if it is found. + if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then + lt_cv_path_SED=$lt_ac_sed + break + fi + while true; do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo >>conftest.nl + $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break + cmp -s conftest.out conftest.nl || break + # 10000 chars as input seems more than enough + test 10 -lt "$lt_ac_count" && break + lt_ac_count=`expr $lt_ac_count + 1` + if test "$lt_ac_count" -gt "$lt_ac_max"; then + lt_ac_max=$lt_ac_count + lt_cv_path_SED=$lt_ac_sed + fi + done +done +]) +SED=$lt_cv_path_SED +AC_SUBST([SED]) +AC_MSG_RESULT([$SED]) +])#AC_PROG_SED +])#m4_ifndef + +# Old name: +AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_SED], []) + + +# _LT_CHECK_SHELL_FEATURES +# ------------------------ +# Find out whether the shell is Bourne or XSI compatible, +# or has some other useful features. +m4_defun([_LT_CHECK_SHELL_FEATURES], +[if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi +_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac +_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl +_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl +])# _LT_CHECK_SHELL_FEATURES + + +# _LT_PATH_CONVERSION_FUNCTIONS +# ----------------------------- +# Determine what file name conversion functions should be used by +# func_to_host_file (and, implicitly, by func_to_host_path). These are needed +# for certain cross-compile configurations and native mingw. +m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +AC_MSG_CHECKING([how to convert $build file names to $host format]) +AC_CACHE_VAL(lt_cv_to_host_file_cmd, +[case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 + ;; + esac + ;; + *-*-cygwin* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin + ;; + esac + ;; + * ) # unhandled hosts (and "normal" native builds) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; +esac +]) +to_host_file_cmd=$lt_cv_to_host_file_cmd +AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) +_LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], + [0], [convert $build file names to $host format])dnl + +AC_MSG_CHECKING([how to convert $build file names to toolchain format]) +AC_CACHE_VAL(lt_cv_to_tool_file_cmd, +[#assume ordinary cross tools, or native build. +lt_cv_to_tool_file_cmd=func_convert_file_noop +case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 + ;; + esac + ;; +esac +]) +to_tool_file_cmd=$lt_cv_to_tool_file_cmd +AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) +_LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], + [0], [convert $build files to toolchain format])dnl +])# _LT_PATH_CONVERSION_FUNCTIONS diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/m4/ltoptions.m4 b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/m4/ltoptions.m4 new file mode 100644 index 00000000..94b08297 --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/m4/ltoptions.m4 @@ -0,0 +1,437 @@ +# Helper functions for option handling. -*- Autoconf -*- +# +# Copyright (C) 2004-2005, 2007-2009, 2011-2015 Free Software +# Foundation, Inc. +# Written by Gary V. Vaughan, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 8 ltoptions.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) + + +# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) +# ------------------------------------------ +m4_define([_LT_MANGLE_OPTION], +[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) + + +# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) +# --------------------------------------- +# Set option OPTION-NAME for macro MACRO-NAME, and if there is a +# matching handler defined, dispatch to it. Other OPTION-NAMEs are +# saved as a flag. +m4_define([_LT_SET_OPTION], +[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl +m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), + _LT_MANGLE_DEFUN([$1], [$2]), + [m4_warning([Unknown $1 option '$2'])])[]dnl +]) + + +# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) +# ------------------------------------------------------------ +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +m4_define([_LT_IF_OPTION], +[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) + + +# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) +# ------------------------------------------------------- +# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME +# are set. +m4_define([_LT_UNLESS_OPTIONS], +[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), + [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), + [m4_define([$0_found])])])[]dnl +m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 +])[]dnl +]) + + +# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) +# ---------------------------------------- +# OPTION-LIST is a space-separated list of Libtool options associated +# with MACRO-NAME. If any OPTION has a matching handler declared with +# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about +# the unknown option and exit. +m4_defun([_LT_SET_OPTIONS], +[# Set options +m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), + [_LT_SET_OPTION([$1], _LT_Option)]) + +m4_if([$1],[LT_INIT],[ + dnl + dnl Simply set some default values (i.e off) if boolean options were not + dnl specified: + _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no + ]) + _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no + ]) + dnl + dnl If no reference was made to various pairs of opposing options, then + dnl we run the default mode handler for the pair. For example, if neither + dnl 'shared' nor 'disable-shared' was passed, we enable building of shared + dnl archives by default: + _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) + _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) + _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) + _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], + [_LT_ENABLE_FAST_INSTALL]) + _LT_UNLESS_OPTIONS([LT_INIT], [aix-soname=aix aix-soname=both aix-soname=svr4], + [_LT_WITH_AIX_SONAME([aix])]) + ]) +])# _LT_SET_OPTIONS + + +## --------------------------------- ## +## Macros to handle LT_INIT options. ## +## --------------------------------- ## + +# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) +# ----------------------------------------- +m4_define([_LT_MANGLE_DEFUN], +[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) + + +# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) +# ----------------------------------------------- +m4_define([LT_OPTION_DEFINE], +[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl +])# LT_OPTION_DEFINE + + +# dlopen +# ------ +LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes +]) + +AU_DEFUN([AC_LIBTOOL_DLOPEN], +[_LT_SET_OPTION([LT_INIT], [dlopen]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the 'dlopen' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) + + +# win32-dll +# --------- +# Declare package support for building win32 dll's. +LT_OPTION_DEFINE([LT_INIT], [win32-dll], +[enable_win32_dll=yes + +case $host in +*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) + AC_CHECK_TOOL(AS, as, false) + AC_CHECK_TOOL(DLLTOOL, dlltool, false) + AC_CHECK_TOOL(OBJDUMP, objdump, false) + ;; +esac + +test -z "$AS" && AS=as +_LT_DECL([], [AS], [1], [Assembler program])dnl + +test -z "$DLLTOOL" && DLLTOOL=dlltool +_LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl + +test -z "$OBJDUMP" && OBJDUMP=objdump +_LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl +])# win32-dll + +AU_DEFUN([AC_LIBTOOL_WIN32_DLL], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +_LT_SET_OPTION([LT_INIT], [win32-dll]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the 'win32-dll' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) + + +# _LT_ENABLE_SHARED([DEFAULT]) +# ---------------------------- +# implement the --enable-shared flag, and supports the 'shared' and +# 'disable-shared' LT_INIT options. +# DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. +m4_define([_LT_ENABLE_SHARED], +[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([shared], + [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], + [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS=$lt_save_ifs + ;; + esac], + [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) + + _LT_DECL([build_libtool_libs], [enable_shared], [0], + [Whether or not to build shared libraries]) +])# _LT_ENABLE_SHARED + +LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) + +# Old names: +AC_DEFUN([AC_ENABLE_SHARED], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) +]) + +AC_DEFUN([AC_DISABLE_SHARED], +[_LT_SET_OPTION([LT_INIT], [disable-shared]) +]) + +AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) +AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_ENABLE_SHARED], []) +dnl AC_DEFUN([AM_DISABLE_SHARED], []) + + + +# _LT_ENABLE_STATIC([DEFAULT]) +# ---------------------------- +# implement the --enable-static flag, and support the 'static' and +# 'disable-static' LT_INIT options. +# DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. +m4_define([_LT_ENABLE_STATIC], +[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([static], + [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], + [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS=$lt_save_ifs + ;; + esac], + [enable_static=]_LT_ENABLE_STATIC_DEFAULT) + + _LT_DECL([build_old_libs], [enable_static], [0], + [Whether or not to build static libraries]) +])# _LT_ENABLE_STATIC + +LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) + +# Old names: +AC_DEFUN([AC_ENABLE_STATIC], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) +]) + +AC_DEFUN([AC_DISABLE_STATIC], +[_LT_SET_OPTION([LT_INIT], [disable-static]) +]) + +AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) +AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_ENABLE_STATIC], []) +dnl AC_DEFUN([AM_DISABLE_STATIC], []) + + + +# _LT_ENABLE_FAST_INSTALL([DEFAULT]) +# ---------------------------------- +# implement the --enable-fast-install flag, and support the 'fast-install' +# and 'disable-fast-install' LT_INIT options. +# DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. +m4_define([_LT_ENABLE_FAST_INSTALL], +[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([fast-install], + [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], + [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS=$lt_save_ifs + ;; + esac], + [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) + +_LT_DECL([fast_install], [enable_fast_install], [0], + [Whether or not to optimize for fast installation])dnl +])# _LT_ENABLE_FAST_INSTALL + +LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) + +# Old names: +AU_DEFUN([AC_ENABLE_FAST_INSTALL], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the 'fast-install' option into LT_INIT's first parameter.]) +]) + +AU_DEFUN([AC_DISABLE_FAST_INSTALL], +[_LT_SET_OPTION([LT_INIT], [disable-fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the 'disable-fast-install' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) +dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) + + +# _LT_WITH_AIX_SONAME([DEFAULT]) +# ---------------------------------- +# implement the --with-aix-soname flag, and support the `aix-soname=aix' +# and `aix-soname=both' and `aix-soname=svr4' LT_INIT options. DEFAULT +# is either `aix', `both' or `svr4'. If omitted, it defaults to `aix'. +m4_define([_LT_WITH_AIX_SONAME], +[m4_define([_LT_WITH_AIX_SONAME_DEFAULT], [m4_if($1, svr4, svr4, m4_if($1, both, both, aix))])dnl +shared_archive_member_spec= +case $host,$enable_shared in +power*-*-aix[[5-9]]*,yes) + AC_MSG_CHECKING([which variant of shared library versioning to provide]) + AC_ARG_WITH([aix-soname], + [AS_HELP_STRING([--with-aix-soname=aix|svr4|both], + [shared library versioning (aka "SONAME") variant to provide on AIX, @<:@default=]_LT_WITH_AIX_SONAME_DEFAULT[@:>@.])], + [case $withval in + aix|svr4|both) + ;; + *) + AC_MSG_ERROR([Unknown argument to --with-aix-soname]) + ;; + esac + lt_cv_with_aix_soname=$with_aix_soname], + [AC_CACHE_VAL([lt_cv_with_aix_soname], + [lt_cv_with_aix_soname=]_LT_WITH_AIX_SONAME_DEFAULT) + with_aix_soname=$lt_cv_with_aix_soname]) + AC_MSG_RESULT([$with_aix_soname]) + if test aix != "$with_aix_soname"; then + # For the AIX way of multilib, we name the shared archive member + # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', + # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. + # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, + # the AIX toolchain works better with OBJECT_MODE set (default 32). + if test 64 = "${OBJECT_MODE-32}"; then + shared_archive_member_spec=shr_64 + else + shared_archive_member_spec=shr + fi + fi + ;; +*) + with_aix_soname=aix + ;; +esac + +_LT_DECL([], [shared_archive_member_spec], [0], + [Shared archive member basename, for filename based shared library versioning on AIX])dnl +])# _LT_WITH_AIX_SONAME + +LT_OPTION_DEFINE([LT_INIT], [aix-soname=aix], [_LT_WITH_AIX_SONAME([aix])]) +LT_OPTION_DEFINE([LT_INIT], [aix-soname=both], [_LT_WITH_AIX_SONAME([both])]) +LT_OPTION_DEFINE([LT_INIT], [aix-soname=svr4], [_LT_WITH_AIX_SONAME([svr4])]) + + +# _LT_WITH_PIC([MODE]) +# -------------------- +# implement the --with-pic flag, and support the 'pic-only' and 'no-pic' +# LT_INIT options. +# MODE is either 'yes' or 'no'. If omitted, it defaults to 'both'. +m4_define([_LT_WITH_PIC], +[AC_ARG_WITH([pic], + [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], + [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], + [lt_p=${PACKAGE-default} + case $withval in + yes|no) pic_mode=$withval ;; + *) + pic_mode=default + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for lt_pkg in $withval; do + IFS=$lt_save_ifs + if test "X$lt_pkg" = "X$lt_p"; then + pic_mode=yes + fi + done + IFS=$lt_save_ifs + ;; + esac], + [pic_mode=m4_default([$1], [default])]) + +_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl +])# _LT_WITH_PIC + +LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) +LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) + +# Old name: +AU_DEFUN([AC_LIBTOOL_PICMODE], +[_LT_SET_OPTION([LT_INIT], [pic-only]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the 'pic-only' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) + +## ----------------- ## +## LTDL_INIT Options ## +## ----------------- ## + +m4_define([_LTDL_MODE], []) +LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], + [m4_define([_LTDL_MODE], [nonrecursive])]) +LT_OPTION_DEFINE([LTDL_INIT], [recursive], + [m4_define([_LTDL_MODE], [recursive])]) +LT_OPTION_DEFINE([LTDL_INIT], [subproject], + [m4_define([_LTDL_MODE], [subproject])]) + +m4_define([_LTDL_TYPE], []) +LT_OPTION_DEFINE([LTDL_INIT], [installable], + [m4_define([_LTDL_TYPE], [installable])]) +LT_OPTION_DEFINE([LTDL_INIT], [convenience], + [m4_define([_LTDL_TYPE], [convenience])]) diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/m4/ltsugar.m4 b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/m4/ltsugar.m4 new file mode 100644 index 00000000..48bc9344 --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/m4/ltsugar.m4 @@ -0,0 +1,124 @@ +# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- +# +# Copyright (C) 2004-2005, 2007-2008, 2011-2015 Free Software +# Foundation, Inc. +# Written by Gary V. Vaughan, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 6 ltsugar.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) + + +# lt_join(SEP, ARG1, [ARG2...]) +# ----------------------------- +# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their +# associated separator. +# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier +# versions in m4sugar had bugs. +m4_define([lt_join], +[m4_if([$#], [1], [], + [$#], [2], [[$2]], + [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) +m4_define([_lt_join], +[m4_if([$#$2], [2], [], + [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) + + +# lt_car(LIST) +# lt_cdr(LIST) +# ------------ +# Manipulate m4 lists. +# These macros are necessary as long as will still need to support +# Autoconf-2.59, which quotes differently. +m4_define([lt_car], [[$1]]) +m4_define([lt_cdr], +[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], + [$#], 1, [], + [m4_dquote(m4_shift($@))])]) +m4_define([lt_unquote], $1) + + +# lt_append(MACRO-NAME, STRING, [SEPARATOR]) +# ------------------------------------------ +# Redefine MACRO-NAME to hold its former content plus 'SEPARATOR''STRING'. +# Note that neither SEPARATOR nor STRING are expanded; they are appended +# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). +# No SEPARATOR is output if MACRO-NAME was previously undefined (different +# than defined and empty). +# +# This macro is needed until we can rely on Autoconf 2.62, since earlier +# versions of m4sugar mistakenly expanded SEPARATOR but not STRING. +m4_define([lt_append], +[m4_define([$1], + m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) + + + +# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) +# ---------------------------------------------------------- +# Produce a SEP delimited list of all paired combinations of elements of +# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list +# has the form PREFIXmINFIXSUFFIXn. +# Needed until we can rely on m4_combine added in Autoconf 2.62. +m4_define([lt_combine], +[m4_if(m4_eval([$# > 3]), [1], + [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl +[[m4_foreach([_Lt_prefix], [$2], + [m4_foreach([_Lt_suffix], + ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, + [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) + + +# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) +# ----------------------------------------------------------------------- +# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited +# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. +m4_define([lt_if_append_uniq], +[m4_ifdef([$1], + [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], + [lt_append([$1], [$2], [$3])$4], + [$5])], + [lt_append([$1], [$2], [$3])$4])]) + + +# lt_dict_add(DICT, KEY, VALUE) +# ----------------------------- +m4_define([lt_dict_add], +[m4_define([$1($2)], [$3])]) + + +# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) +# -------------------------------------------- +m4_define([lt_dict_add_subkey], +[m4_define([$1($2:$3)], [$4])]) + + +# lt_dict_fetch(DICT, KEY, [SUBKEY]) +# ---------------------------------- +m4_define([lt_dict_fetch], +[m4_ifval([$3], + m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), + m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) + + +# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) +# ----------------------------------------------------------------- +m4_define([lt_if_dict_fetch], +[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], + [$5], + [$6])]) + + +# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) +# -------------------------------------------------------------- +m4_define([lt_dict_filter], +[m4_if([$5], [], [], + [lt_join(m4_quote(m4_default([$4], [[, ]])), + lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), + [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl +]) diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/m4/ltversion.m4 b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/m4/ltversion.m4 new file mode 100644 index 00000000..fa04b52a --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/m4/ltversion.m4 @@ -0,0 +1,23 @@ +# ltversion.m4 -- version numbers -*- Autoconf -*- +# +# Copyright (C) 2004, 2011-2015 Free Software Foundation, Inc. +# Written by Scott James Remnant, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# @configure_input@ + +# serial 4179 ltversion.m4 +# This file is part of GNU Libtool + +m4_define([LT_PACKAGE_VERSION], [2.4.6]) +m4_define([LT_PACKAGE_REVISION], [2.4.6]) + +AC_DEFUN([LTVERSION_VERSION], +[macro_version='2.4.6' +macro_revision='2.4.6' +_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) +_LT_DECL(, macro_revision, 0) +]) diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/m4/lt~obsolete.m4 b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/m4/lt~obsolete.m4 new file mode 100644 index 00000000..c6b26f88 --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/m4/lt~obsolete.m4 @@ -0,0 +1,99 @@ +# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- +# +# Copyright (C) 2004-2005, 2007, 2009, 2011-2015 Free Software +# Foundation, Inc. +# Written by Scott James Remnant, 2004. +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 5 lt~obsolete.m4 + +# These exist entirely to fool aclocal when bootstrapping libtool. +# +# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN), +# which have later been changed to m4_define as they aren't part of the +# exported API, or moved to Autoconf or Automake where they belong. +# +# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN +# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us +# using a macro with the same name in our local m4/libtool.m4 it'll +# pull the old libtool.m4 in (it doesn't see our shiny new m4_define +# and doesn't know about Autoconf macros at all.) +# +# So we provide this file, which has a silly filename so it's always +# included after everything else. This provides aclocal with the +# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything +# because those macros already exist, or will be overwritten later. +# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. +# +# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. +# Yes, that means every name once taken will need to remain here until +# we give up compatibility with versions before 1.7, at which point +# we need to keep only those names which we still refer to. + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) + +m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) +m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) +m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) +m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) +m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) +m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) +m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) +m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) +m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) +m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) +m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) +m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) +m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) +m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) +m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) +m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) +m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) +m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) +m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) +m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) +m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) +m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) +m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) +m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) +m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) +m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) +m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) +m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) +m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) +m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) +m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) +m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) +m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) +m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) +m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) +m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) +m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) +m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) +m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) +m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) +m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) +m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) +m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) +m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) +m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) +m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) +m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) +m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) +m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) +m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) +m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) +m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) +m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) +m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) +m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) +m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) +m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/missing b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/missing new file mode 100755 index 00000000..f62bbae3 --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/missing @@ -0,0 +1,215 @@ +#! /bin/sh +# Common wrapper for a few potentially missing GNU programs. + +scriptversion=2013-10-28.13; # UTC + +# Copyright (C) 1996-2014 Free Software Foundation, Inc. +# Originally written by Fran,cois Pinard , 1996. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +if test $# -eq 0; then + echo 1>&2 "Try '$0 --help' for more information" + exit 1 +fi + +case $1 in + + --is-lightweight) + # Used by our autoconf macros to check whether the available missing + # script is modern enough. + exit 0 + ;; + + --run) + # Back-compat with the calling convention used by older automake. + shift + ;; + + -h|--h|--he|--hel|--help) + echo "\ +$0 [OPTION]... PROGRAM [ARGUMENT]... + +Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due +to PROGRAM being missing or too old. + +Options: + -h, --help display this help and exit + -v, --version output version information and exit + +Supported PROGRAM values: + aclocal autoconf autoheader autom4te automake makeinfo + bison yacc flex lex help2man + +Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and +'g' are ignored when checking the name. + +Send bug reports to ." + exit $? + ;; + + -v|--v|--ve|--ver|--vers|--versi|--versio|--version) + echo "missing $scriptversion (GNU Automake)" + exit $? + ;; + + -*) + echo 1>&2 "$0: unknown '$1' option" + echo 1>&2 "Try '$0 --help' for more information" + exit 1 + ;; + +esac + +# Run the given program, remember its exit status. +"$@"; st=$? + +# If it succeeded, we are done. +test $st -eq 0 && exit 0 + +# Also exit now if we it failed (or wasn't found), and '--version' was +# passed; such an option is passed most likely to detect whether the +# program is present and works. +case $2 in --version|--help) exit $st;; esac + +# Exit code 63 means version mismatch. This often happens when the user +# tries to use an ancient version of a tool on a file that requires a +# minimum version. +if test $st -eq 63; then + msg="probably too old" +elif test $st -eq 127; then + # Program was missing. + msg="missing on your system" +else + # Program was found and executed, but failed. Give up. + exit $st +fi + +perl_URL=http://www.perl.org/ +flex_URL=http://flex.sourceforge.net/ +gnu_software_URL=http://www.gnu.org/software + +program_details () +{ + case $1 in + aclocal|automake) + echo "The '$1' program is part of the GNU Automake package:" + echo "<$gnu_software_URL/automake>" + echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" + echo "<$gnu_software_URL/autoconf>" + echo "<$gnu_software_URL/m4/>" + echo "<$perl_URL>" + ;; + autoconf|autom4te|autoheader) + echo "The '$1' program is part of the GNU Autoconf package:" + echo "<$gnu_software_URL/autoconf/>" + echo "It also requires GNU m4 and Perl in order to run:" + echo "<$gnu_software_URL/m4/>" + echo "<$perl_URL>" + ;; + esac +} + +give_advice () +{ + # Normalize program name to check for. + normalized_program=`echo "$1" | sed ' + s/^gnu-//; t + s/^gnu//; t + s/^g//; t'` + + printf '%s\n' "'$1' is $msg." + + configure_deps="'configure.ac' or m4 files included by 'configure.ac'" + case $normalized_program in + autoconf*) + echo "You should only need it if you modified 'configure.ac'," + echo "or m4 files included by it." + program_details 'autoconf' + ;; + autoheader*) + echo "You should only need it if you modified 'acconfig.h' or" + echo "$configure_deps." + program_details 'autoheader' + ;; + automake*) + echo "You should only need it if you modified 'Makefile.am' or" + echo "$configure_deps." + program_details 'automake' + ;; + aclocal*) + echo "You should only need it if you modified 'acinclude.m4' or" + echo "$configure_deps." + program_details 'aclocal' + ;; + autom4te*) + echo "You might have modified some maintainer files that require" + echo "the 'autom4te' program to be rebuilt." + program_details 'autom4te' + ;; + bison*|yacc*) + echo "You should only need it if you modified a '.y' file." + echo "You may want to install the GNU Bison package:" + echo "<$gnu_software_URL/bison/>" + ;; + lex*|flex*) + echo "You should only need it if you modified a '.l' file." + echo "You may want to install the Fast Lexical Analyzer package:" + echo "<$flex_URL>" + ;; + help2man*) + echo "You should only need it if you modified a dependency" \ + "of a man page." + echo "You may want to install the GNU Help2man package:" + echo "<$gnu_software_URL/help2man/>" + ;; + makeinfo*) + echo "You should only need it if you modified a '.texi' file, or" + echo "any other file indirectly affecting the aspect of the manual." + echo "You might want to install the Texinfo package:" + echo "<$gnu_software_URL/texinfo/>" + echo "The spurious makeinfo call might also be the consequence of" + echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" + echo "want to install GNU make:" + echo "<$gnu_software_URL/make/>" + ;; + *) + echo "You might have modified some files without having the proper" + echo "tools for further handling them. Check the 'README' file, it" + echo "often tells you about the needed prerequisites for installing" + echo "this package. You may also peek at any GNU archive site, in" + echo "case some other package contains this missing '$1' program." + ;; + esac +} + +give_advice "$1" | sed -e '1s/^/WARNING: /' \ + -e '2,$s/^/ /' >&2 + +# Propagate the correct exit status (expected to be 127 for a program +# not found, 63 for a program that failed due to version mismatch). +exit $st + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/.deps/.dirstamp b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/.deps/.dirstamp new file mode 100644 index 00000000..e69de29b diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/.deps/admesh.Po b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/.deps/admesh.Po new file mode 100644 index 00000000..5e764990 --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/.deps/admesh.Po @@ -0,0 +1,179 @@ +src/admesh.o: src/admesh.c /usr/include/stdc-predef.h \ + /usr/include/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/libc-header-start.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/bits/long-double.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/9/include/stddef.h \ + /usr/lib/gcc/x86_64-linux-gnu/9/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/timesize.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h \ + /usr/include/x86_64-linux-gnu/bits/time64.h \ + /usr/include/x86_64-linux-gnu/bits/types/__fpos_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__fpos64_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__FILE.h \ + /usr/include/x86_64-linux-gnu/bits/types/FILE.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/getopt_core.h \ + /usr/include/x86_64-linux-gnu/bits/getopt_ext.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h \ + /usr/include/x86_64-linux-gnu/bits/floatn.h \ + /usr/include/x86_64-linux-gnu/bits/floatn-common.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/bits/types/clock_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/clockid_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/time_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/timer_t.h \ + /usr/include/x86_64-linux-gnu/bits/stdint-intn.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endianness.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/bits/uintn-identity.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/types/sigset_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__sigset_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_timeval.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/x86_64-linux-gnu/bits/thread-shared-types.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h \ + /usr/include/x86_64-linux-gnu/bits/struct_mutex.h \ + /usr/include/x86_64-linux-gnu/bits/struct_rwlock.h /usr/include/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h src/stl.h config.h + +/usr/include/stdc-predef.h: + +/usr/include/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/libc-header-start.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/bits/long-double.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/9/include/stddef.h: + +/usr/lib/gcc/x86_64-linux-gnu/9/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/timesize.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/x86_64-linux-gnu/bits/time64.h: + +/usr/include/x86_64-linux-gnu/bits/types/__fpos_t.h: + +/usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h: + +/usr/include/x86_64-linux-gnu/bits/types/__fpos64_t.h: + +/usr/include/x86_64-linux-gnu/bits/types/__FILE.h: + +/usr/include/x86_64-linux-gnu/bits/types/FILE.h: + +/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/getopt_core.h: + +/usr/include/x86_64-linux-gnu/bits/getopt_ext.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/x86_64-linux-gnu/bits/floatn.h: + +/usr/include/x86_64-linux-gnu/bits/floatn-common.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/bits/types/clock_t.h: + +/usr/include/x86_64-linux-gnu/bits/types/clockid_t.h: + +/usr/include/x86_64-linux-gnu/bits/types/time_t.h: + +/usr/include/x86_64-linux-gnu/bits/types/timer_t.h: + +/usr/include/x86_64-linux-gnu/bits/stdint-intn.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endianness.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/bits/uintn-identity.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/types/sigset_t.h: + +/usr/include/x86_64-linux-gnu/bits/types/__sigset_t.h: + +/usr/include/x86_64-linux-gnu/bits/types/struct_timeval.h: + +/usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/x86_64-linux-gnu/bits/thread-shared-types.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h: + +/usr/include/x86_64-linux-gnu/bits/struct_mutex.h: + +/usr/include/x86_64-linux-gnu/bits/struct_rwlock.h: + +/usr/include/alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib-float.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +src/stl.h: + +config.h: diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/.deps/connect.Plo b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/.deps/connect.Plo new file mode 100644 index 00000000..7bbb0fa7 --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/.deps/connect.Plo @@ -0,0 +1,212 @@ +src/connect.lo: src/connect.c /usr/include/stdc-predef.h \ + /usr/include/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/libc-header-start.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/bits/long-double.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/9/include/stddef.h \ + /usr/lib/gcc/x86_64-linux-gnu/9/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/timesize.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h \ + /usr/include/x86_64-linux-gnu/bits/time64.h \ + /usr/include/x86_64-linux-gnu/bits/types/__fpos_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__fpos64_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__FILE.h \ + /usr/include/x86_64-linux-gnu/bits/types/FILE.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h \ + /usr/include/x86_64-linux-gnu/bits/floatn.h \ + /usr/include/x86_64-linux-gnu/bits/floatn-common.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/bits/types/clock_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/clockid_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/time_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/timer_t.h \ + /usr/include/x86_64-linux-gnu/bits/stdint-intn.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endianness.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/bits/uintn-identity.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/types/sigset_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__sigset_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_timeval.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/x86_64-linux-gnu/bits/thread-shared-types.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h \ + /usr/include/x86_64-linux-gnu/bits/struct_mutex.h \ + /usr/include/x86_64-linux-gnu/bits/struct_rwlock.h /usr/include/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/string.h \ + /usr/include/x86_64-linux-gnu/bits/types/locale_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__locale_t.h \ + /usr/include/strings.h \ + /usr/include/x86_64-linux-gnu/bits/strings_fortified.h \ + /usr/include/x86_64-linux-gnu/bits/string_fortified.h \ + /usr/include/math.h /usr/include/x86_64-linux-gnu/bits/math-vector.h \ + /usr/include/x86_64-linux-gnu/bits/libm-simd-decl-stubs.h \ + /usr/include/x86_64-linux-gnu/bits/flt-eval-method.h \ + /usr/include/x86_64-linux-gnu/bits/fp-logb.h \ + /usr/include/x86_64-linux-gnu/bits/fp-fast.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls-helper-functions.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h \ + /usr/include/x86_64-linux-gnu/bits/mathinline.h src/stl.h + +/usr/include/stdc-predef.h: + +/usr/include/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/libc-header-start.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/bits/long-double.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/9/include/stddef.h: + +/usr/lib/gcc/x86_64-linux-gnu/9/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/timesize.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/x86_64-linux-gnu/bits/time64.h: + +/usr/include/x86_64-linux-gnu/bits/types/__fpos_t.h: + +/usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h: + +/usr/include/x86_64-linux-gnu/bits/types/__fpos64_t.h: + +/usr/include/x86_64-linux-gnu/bits/types/__FILE.h: + +/usr/include/x86_64-linux-gnu/bits/types/FILE.h: + +/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/x86_64-linux-gnu/bits/floatn.h: + +/usr/include/x86_64-linux-gnu/bits/floatn-common.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/bits/types/clock_t.h: + +/usr/include/x86_64-linux-gnu/bits/types/clockid_t.h: + +/usr/include/x86_64-linux-gnu/bits/types/time_t.h: + +/usr/include/x86_64-linux-gnu/bits/types/timer_t.h: + +/usr/include/x86_64-linux-gnu/bits/stdint-intn.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endianness.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/bits/uintn-identity.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/types/sigset_t.h: + +/usr/include/x86_64-linux-gnu/bits/types/__sigset_t.h: + +/usr/include/x86_64-linux-gnu/bits/types/struct_timeval.h: + +/usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/x86_64-linux-gnu/bits/thread-shared-types.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h: + +/usr/include/x86_64-linux-gnu/bits/struct_mutex.h: + +/usr/include/x86_64-linux-gnu/bits/struct_rwlock.h: + +/usr/include/alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib-float.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/string.h: + +/usr/include/x86_64-linux-gnu/bits/types/locale_t.h: + +/usr/include/x86_64-linux-gnu/bits/types/__locale_t.h: + +/usr/include/strings.h: + +/usr/include/x86_64-linux-gnu/bits/strings_fortified.h: + +/usr/include/x86_64-linux-gnu/bits/string_fortified.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/math-vector.h: + +/usr/include/x86_64-linux-gnu/bits/libm-simd-decl-stubs.h: + +/usr/include/x86_64-linux-gnu/bits/flt-eval-method.h: + +/usr/include/x86_64-linux-gnu/bits/fp-logb.h: + +/usr/include/x86_64-linux-gnu/bits/fp-fast.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls-helper-functions.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +/usr/include/x86_64-linux-gnu/bits/mathinline.h: + +src/stl.h: diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/.deps/normals.Plo b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/.deps/normals.Plo new file mode 100644 index 00000000..7f745db7 --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/.deps/normals.Plo @@ -0,0 +1,212 @@ +src/normals.lo: src/normals.c /usr/include/stdc-predef.h \ + /usr/include/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/libc-header-start.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/bits/long-double.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/9/include/stddef.h \ + /usr/lib/gcc/x86_64-linux-gnu/9/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/timesize.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h \ + /usr/include/x86_64-linux-gnu/bits/time64.h \ + /usr/include/x86_64-linux-gnu/bits/types/__fpos_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__fpos64_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__FILE.h \ + /usr/include/x86_64-linux-gnu/bits/types/FILE.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h \ + /usr/include/x86_64-linux-gnu/bits/floatn.h \ + /usr/include/x86_64-linux-gnu/bits/floatn-common.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/bits/types/clock_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/clockid_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/time_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/timer_t.h \ + /usr/include/x86_64-linux-gnu/bits/stdint-intn.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endianness.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/bits/uintn-identity.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/types/sigset_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__sigset_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_timeval.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/x86_64-linux-gnu/bits/thread-shared-types.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h \ + /usr/include/x86_64-linux-gnu/bits/struct_mutex.h \ + /usr/include/x86_64-linux-gnu/bits/struct_rwlock.h /usr/include/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/string.h \ + /usr/include/x86_64-linux-gnu/bits/types/locale_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__locale_t.h \ + /usr/include/strings.h \ + /usr/include/x86_64-linux-gnu/bits/strings_fortified.h \ + /usr/include/x86_64-linux-gnu/bits/string_fortified.h \ + /usr/include/math.h /usr/include/x86_64-linux-gnu/bits/math-vector.h \ + /usr/include/x86_64-linux-gnu/bits/libm-simd-decl-stubs.h \ + /usr/include/x86_64-linux-gnu/bits/flt-eval-method.h \ + /usr/include/x86_64-linux-gnu/bits/fp-logb.h \ + /usr/include/x86_64-linux-gnu/bits/fp-fast.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls-helper-functions.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h \ + /usr/include/x86_64-linux-gnu/bits/mathinline.h src/stl.h + +/usr/include/stdc-predef.h: + +/usr/include/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/libc-header-start.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/bits/long-double.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/9/include/stddef.h: + +/usr/lib/gcc/x86_64-linux-gnu/9/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/timesize.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/x86_64-linux-gnu/bits/time64.h: + +/usr/include/x86_64-linux-gnu/bits/types/__fpos_t.h: + +/usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h: + +/usr/include/x86_64-linux-gnu/bits/types/__fpos64_t.h: + +/usr/include/x86_64-linux-gnu/bits/types/__FILE.h: + +/usr/include/x86_64-linux-gnu/bits/types/FILE.h: + +/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/x86_64-linux-gnu/bits/floatn.h: + +/usr/include/x86_64-linux-gnu/bits/floatn-common.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/bits/types/clock_t.h: + +/usr/include/x86_64-linux-gnu/bits/types/clockid_t.h: + +/usr/include/x86_64-linux-gnu/bits/types/time_t.h: + +/usr/include/x86_64-linux-gnu/bits/types/timer_t.h: + +/usr/include/x86_64-linux-gnu/bits/stdint-intn.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endianness.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/bits/uintn-identity.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/types/sigset_t.h: + +/usr/include/x86_64-linux-gnu/bits/types/__sigset_t.h: + +/usr/include/x86_64-linux-gnu/bits/types/struct_timeval.h: + +/usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/x86_64-linux-gnu/bits/thread-shared-types.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h: + +/usr/include/x86_64-linux-gnu/bits/struct_mutex.h: + +/usr/include/x86_64-linux-gnu/bits/struct_rwlock.h: + +/usr/include/alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib-float.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/string.h: + +/usr/include/x86_64-linux-gnu/bits/types/locale_t.h: + +/usr/include/x86_64-linux-gnu/bits/types/__locale_t.h: + +/usr/include/strings.h: + +/usr/include/x86_64-linux-gnu/bits/strings_fortified.h: + +/usr/include/x86_64-linux-gnu/bits/string_fortified.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/math-vector.h: + +/usr/include/x86_64-linux-gnu/bits/libm-simd-decl-stubs.h: + +/usr/include/x86_64-linux-gnu/bits/flt-eval-method.h: + +/usr/include/x86_64-linux-gnu/bits/fp-logb.h: + +/usr/include/x86_64-linux-gnu/bits/fp-fast.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls-helper-functions.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +/usr/include/x86_64-linux-gnu/bits/mathinline.h: + +src/stl.h: diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/.deps/shared.Plo b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/.deps/shared.Plo new file mode 100644 index 00000000..0e5f74f6 --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/.deps/shared.Plo @@ -0,0 +1,186 @@ +src/shared.lo: src/shared.c /usr/include/stdc-predef.h \ + /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/libc-header-start.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/bits/long-double.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/9/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h \ + /usr/include/x86_64-linux-gnu/bits/floatn.h \ + /usr/include/x86_64-linux-gnu/bits/floatn-common.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/timesize.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h \ + /usr/include/x86_64-linux-gnu/bits/time64.h \ + /usr/include/x86_64-linux-gnu/bits/types/clock_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/clockid_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/time_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/timer_t.h \ + /usr/include/x86_64-linux-gnu/bits/stdint-intn.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endianness.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/bits/uintn-identity.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/types/sigset_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__sigset_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_timeval.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/x86_64-linux-gnu/bits/thread-shared-types.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h \ + /usr/include/x86_64-linux-gnu/bits/struct_mutex.h \ + /usr/include/x86_64-linux-gnu/bits/struct_rwlock.h /usr/include/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/string.h \ + /usr/include/x86_64-linux-gnu/bits/types/locale_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__locale_t.h \ + /usr/include/strings.h \ + /usr/include/x86_64-linux-gnu/bits/strings_fortified.h \ + /usr/include/x86_64-linux-gnu/bits/string_fortified.h src/stl.h \ + /usr/include/stdio.h /usr/lib/gcc/x86_64-linux-gnu/9/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/types/__fpos_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__fpos64_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__FILE.h \ + /usr/include/x86_64-linux-gnu/bits/types/FILE.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h + +/usr/include/stdc-predef.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/libc-header-start.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/bits/long-double.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/9/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/x86_64-linux-gnu/bits/floatn.h: + +/usr/include/x86_64-linux-gnu/bits/floatn-common.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/timesize.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/x86_64-linux-gnu/bits/time64.h: + +/usr/include/x86_64-linux-gnu/bits/types/clock_t.h: + +/usr/include/x86_64-linux-gnu/bits/types/clockid_t.h: + +/usr/include/x86_64-linux-gnu/bits/types/time_t.h: + +/usr/include/x86_64-linux-gnu/bits/types/timer_t.h: + +/usr/include/x86_64-linux-gnu/bits/stdint-intn.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endianness.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/bits/uintn-identity.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/types/sigset_t.h: + +/usr/include/x86_64-linux-gnu/bits/types/__sigset_t.h: + +/usr/include/x86_64-linux-gnu/bits/types/struct_timeval.h: + +/usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/x86_64-linux-gnu/bits/thread-shared-types.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h: + +/usr/include/x86_64-linux-gnu/bits/struct_mutex.h: + +/usr/include/x86_64-linux-gnu/bits/struct_rwlock.h: + +/usr/include/alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib-float.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/string.h: + +/usr/include/x86_64-linux-gnu/bits/types/locale_t.h: + +/usr/include/x86_64-linux-gnu/bits/types/__locale_t.h: + +/usr/include/strings.h: + +/usr/include/x86_64-linux-gnu/bits/strings_fortified.h: + +/usr/include/x86_64-linux-gnu/bits/string_fortified.h: + +src/stl.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/x86_64-linux-gnu/9/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/types/__fpos_t.h: + +/usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h: + +/usr/include/x86_64-linux-gnu/bits/types/__fpos64_t.h: + +/usr/include/x86_64-linux-gnu/bits/types/__FILE.h: + +/usr/include/x86_64-linux-gnu/bits/types/FILE.h: + +/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/.deps/stl_io.Plo b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/.deps/stl_io.Plo new file mode 100644 index 00000000..f29ec283 --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/.deps/stl_io.Plo @@ -0,0 +1,188 @@ +src/stl_io.lo: src/stl_io.c /usr/include/stdc-predef.h \ + /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/libc-header-start.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/bits/long-double.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/9/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h \ + /usr/include/x86_64-linux-gnu/bits/floatn.h \ + /usr/include/x86_64-linux-gnu/bits/floatn-common.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/timesize.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h \ + /usr/include/x86_64-linux-gnu/bits/time64.h \ + /usr/include/x86_64-linux-gnu/bits/types/clock_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/clockid_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/time_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/timer_t.h \ + /usr/include/x86_64-linux-gnu/bits/stdint-intn.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endianness.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/bits/uintn-identity.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/types/sigset_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__sigset_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_timeval.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/x86_64-linux-gnu/bits/thread-shared-types.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h \ + /usr/include/x86_64-linux-gnu/bits/struct_mutex.h \ + /usr/include/x86_64-linux-gnu/bits/struct_rwlock.h /usr/include/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/string.h \ + /usr/include/x86_64-linux-gnu/bits/types/locale_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__locale_t.h \ + /usr/include/strings.h \ + /usr/include/x86_64-linux-gnu/bits/strings_fortified.h \ + /usr/include/x86_64-linux-gnu/bits/string_fortified.h src/stl.h \ + /usr/include/stdio.h /usr/lib/gcc/x86_64-linux-gnu/9/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/types/__fpos_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__fpos64_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__FILE.h \ + /usr/include/x86_64-linux-gnu/bits/types/FILE.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h config.h + +/usr/include/stdc-predef.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/libc-header-start.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/bits/long-double.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/9/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/x86_64-linux-gnu/bits/floatn.h: + +/usr/include/x86_64-linux-gnu/bits/floatn-common.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/timesize.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/x86_64-linux-gnu/bits/time64.h: + +/usr/include/x86_64-linux-gnu/bits/types/clock_t.h: + +/usr/include/x86_64-linux-gnu/bits/types/clockid_t.h: + +/usr/include/x86_64-linux-gnu/bits/types/time_t.h: + +/usr/include/x86_64-linux-gnu/bits/types/timer_t.h: + +/usr/include/x86_64-linux-gnu/bits/stdint-intn.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endianness.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/bits/uintn-identity.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/types/sigset_t.h: + +/usr/include/x86_64-linux-gnu/bits/types/__sigset_t.h: + +/usr/include/x86_64-linux-gnu/bits/types/struct_timeval.h: + +/usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/x86_64-linux-gnu/bits/thread-shared-types.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h: + +/usr/include/x86_64-linux-gnu/bits/struct_mutex.h: + +/usr/include/x86_64-linux-gnu/bits/struct_rwlock.h: + +/usr/include/alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib-float.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/string.h: + +/usr/include/x86_64-linux-gnu/bits/types/locale_t.h: + +/usr/include/x86_64-linux-gnu/bits/types/__locale_t.h: + +/usr/include/strings.h: + +/usr/include/x86_64-linux-gnu/bits/strings_fortified.h: + +/usr/include/x86_64-linux-gnu/bits/string_fortified.h: + +src/stl.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/x86_64-linux-gnu/9/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/types/__fpos_t.h: + +/usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h: + +/usr/include/x86_64-linux-gnu/bits/types/__fpos64_t.h: + +/usr/include/x86_64-linux-gnu/bits/types/__FILE.h: + +/usr/include/x86_64-linux-gnu/bits/types/FILE.h: + +/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +config.h: diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/.deps/stlinit.Plo b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/.deps/stlinit.Plo new file mode 100644 index 00000000..b8df558d --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/.deps/stlinit.Plo @@ -0,0 +1,225 @@ +src/stlinit.lo: src/stlinit.c /usr/include/stdc-predef.h \ + /usr/lib/gcc/x86_64-linux-gnu/9/include/stdint.h /usr/include/stdint.h \ + /usr/include/x86_64-linux-gnu/bits/libc-header-start.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/bits/long-double.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/timesize.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h \ + /usr/include/x86_64-linux-gnu/bits/time64.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/include/x86_64-linux-gnu/bits/stdint-intn.h \ + /usr/include/x86_64-linux-gnu/bits/stdint-uintn.h /usr/include/stdio.h \ + /usr/lib/gcc/x86_64-linux-gnu/9/include/stddef.h \ + /usr/lib/gcc/x86_64-linux-gnu/9/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/types/__fpos_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__fpos64_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__FILE.h \ + /usr/include/x86_64-linux-gnu/bits/types/FILE.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h \ + /usr/include/x86_64-linux-gnu/bits/floatn.h \ + /usr/include/x86_64-linux-gnu/bits/floatn-common.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/bits/types/clock_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/clockid_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/time_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/timer_t.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endianness.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/bits/uintn-identity.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/types/sigset_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__sigset_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_timeval.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/x86_64-linux-gnu/bits/thread-shared-types.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h \ + /usr/include/x86_64-linux-gnu/bits/struct_mutex.h \ + /usr/include/x86_64-linux-gnu/bits/struct_rwlock.h /usr/include/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/string.h \ + /usr/include/x86_64-linux-gnu/bits/types/locale_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__locale_t.h \ + /usr/include/strings.h \ + /usr/include/x86_64-linux-gnu/bits/strings_fortified.h \ + /usr/include/x86_64-linux-gnu/bits/string_fortified.h \ + /usr/include/math.h /usr/include/x86_64-linux-gnu/bits/math-vector.h \ + /usr/include/x86_64-linux-gnu/bits/libm-simd-decl-stubs.h \ + /usr/include/x86_64-linux-gnu/bits/flt-eval-method.h \ + /usr/include/x86_64-linux-gnu/bits/fp-logb.h \ + /usr/include/x86_64-linux-gnu/bits/fp-fast.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls-helper-functions.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h \ + /usr/include/x86_64-linux-gnu/bits/mathinline.h src/portable_endian.h \ + src/stl.h + +/usr/include/stdc-predef.h: + +/usr/lib/gcc/x86_64-linux-gnu/9/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/x86_64-linux-gnu/bits/libc-header-start.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/bits/long-double.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/timesize.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/x86_64-linux-gnu/bits/time64.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/include/x86_64-linux-gnu/bits/stdint-intn.h: + +/usr/include/x86_64-linux-gnu/bits/stdint-uintn.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/x86_64-linux-gnu/9/include/stddef.h: + +/usr/lib/gcc/x86_64-linux-gnu/9/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/types/__fpos_t.h: + +/usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h: + +/usr/include/x86_64-linux-gnu/bits/types/__fpos64_t.h: + +/usr/include/x86_64-linux-gnu/bits/types/__FILE.h: + +/usr/include/x86_64-linux-gnu/bits/types/FILE.h: + +/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/x86_64-linux-gnu/bits/floatn.h: + +/usr/include/x86_64-linux-gnu/bits/floatn-common.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/bits/types/clock_t.h: + +/usr/include/x86_64-linux-gnu/bits/types/clockid_t.h: + +/usr/include/x86_64-linux-gnu/bits/types/time_t.h: + +/usr/include/x86_64-linux-gnu/bits/types/timer_t.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endianness.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/bits/uintn-identity.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/types/sigset_t.h: + +/usr/include/x86_64-linux-gnu/bits/types/__sigset_t.h: + +/usr/include/x86_64-linux-gnu/bits/types/struct_timeval.h: + +/usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/x86_64-linux-gnu/bits/thread-shared-types.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h: + +/usr/include/x86_64-linux-gnu/bits/struct_mutex.h: + +/usr/include/x86_64-linux-gnu/bits/struct_rwlock.h: + +/usr/include/alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib-float.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/string.h: + +/usr/include/x86_64-linux-gnu/bits/types/locale_t.h: + +/usr/include/x86_64-linux-gnu/bits/types/__locale_t.h: + +/usr/include/strings.h: + +/usr/include/x86_64-linux-gnu/bits/strings_fortified.h: + +/usr/include/x86_64-linux-gnu/bits/string_fortified.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/math-vector.h: + +/usr/include/x86_64-linux-gnu/bits/libm-simd-decl-stubs.h: + +/usr/include/x86_64-linux-gnu/bits/flt-eval-method.h: + +/usr/include/x86_64-linux-gnu/bits/fp-logb.h: + +/usr/include/x86_64-linux-gnu/bits/fp-fast.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls-helper-functions.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +/usr/include/x86_64-linux-gnu/bits/mathinline.h: + +src/portable_endian.h: + +src/stl.h: diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/.deps/util.Plo b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/.deps/util.Plo new file mode 100644 index 00000000..8e7aeabf --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/.deps/util.Plo @@ -0,0 +1,211 @@ +src/util.lo: src/util.c /usr/include/stdc-predef.h /usr/include/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/libc-header-start.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/bits/long-double.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/9/include/stddef.h \ + /usr/lib/gcc/x86_64-linux-gnu/9/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/timesize.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h \ + /usr/include/x86_64-linux-gnu/bits/time64.h \ + /usr/include/x86_64-linux-gnu/bits/types/__fpos_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__fpos64_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__FILE.h \ + /usr/include/x86_64-linux-gnu/bits/types/FILE.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h \ + /usr/include/x86_64-linux-gnu/bits/floatn.h \ + /usr/include/x86_64-linux-gnu/bits/floatn-common.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/bits/types/clock_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/clockid_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/time_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/timer_t.h \ + /usr/include/x86_64-linux-gnu/bits/stdint-intn.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endianness.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/bits/uintn-identity.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/types/sigset_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__sigset_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_timeval.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/x86_64-linux-gnu/bits/thread-shared-types.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h \ + /usr/include/x86_64-linux-gnu/bits/struct_mutex.h \ + /usr/include/x86_64-linux-gnu/bits/struct_rwlock.h /usr/include/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/string.h \ + /usr/include/x86_64-linux-gnu/bits/types/locale_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__locale_t.h \ + /usr/include/strings.h \ + /usr/include/x86_64-linux-gnu/bits/strings_fortified.h \ + /usr/include/x86_64-linux-gnu/bits/string_fortified.h \ + /usr/include/math.h /usr/include/x86_64-linux-gnu/bits/math-vector.h \ + /usr/include/x86_64-linux-gnu/bits/libm-simd-decl-stubs.h \ + /usr/include/x86_64-linux-gnu/bits/flt-eval-method.h \ + /usr/include/x86_64-linux-gnu/bits/fp-logb.h \ + /usr/include/x86_64-linux-gnu/bits/fp-fast.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls-helper-functions.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h \ + /usr/include/x86_64-linux-gnu/bits/mathinline.h src/stl.h + +/usr/include/stdc-predef.h: + +/usr/include/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/libc-header-start.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/bits/long-double.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/9/include/stddef.h: + +/usr/lib/gcc/x86_64-linux-gnu/9/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/timesize.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/x86_64-linux-gnu/bits/time64.h: + +/usr/include/x86_64-linux-gnu/bits/types/__fpos_t.h: + +/usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h: + +/usr/include/x86_64-linux-gnu/bits/types/__fpos64_t.h: + +/usr/include/x86_64-linux-gnu/bits/types/__FILE.h: + +/usr/include/x86_64-linux-gnu/bits/types/FILE.h: + +/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/x86_64-linux-gnu/bits/floatn.h: + +/usr/include/x86_64-linux-gnu/bits/floatn-common.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/bits/types/clock_t.h: + +/usr/include/x86_64-linux-gnu/bits/types/clockid_t.h: + +/usr/include/x86_64-linux-gnu/bits/types/time_t.h: + +/usr/include/x86_64-linux-gnu/bits/types/timer_t.h: + +/usr/include/x86_64-linux-gnu/bits/stdint-intn.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endianness.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/bits/uintn-identity.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/types/sigset_t.h: + +/usr/include/x86_64-linux-gnu/bits/types/__sigset_t.h: + +/usr/include/x86_64-linux-gnu/bits/types/struct_timeval.h: + +/usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/x86_64-linux-gnu/bits/thread-shared-types.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h: + +/usr/include/x86_64-linux-gnu/bits/struct_mutex.h: + +/usr/include/x86_64-linux-gnu/bits/struct_rwlock.h: + +/usr/include/alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib-float.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/string.h: + +/usr/include/x86_64-linux-gnu/bits/types/locale_t.h: + +/usr/include/x86_64-linux-gnu/bits/types/__locale_t.h: + +/usr/include/strings.h: + +/usr/include/x86_64-linux-gnu/bits/strings_fortified.h: + +/usr/include/x86_64-linux-gnu/bits/string_fortified.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/math-vector.h: + +/usr/include/x86_64-linux-gnu/bits/libm-simd-decl-stubs.h: + +/usr/include/x86_64-linux-gnu/bits/flt-eval-method.h: + +/usr/include/x86_64-linux-gnu/bits/fp-logb.h: + +/usr/include/x86_64-linux-gnu/bits/fp-fast.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls-helper-functions.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +/usr/include/x86_64-linux-gnu/bits/mathinline.h: + +src/stl.h: diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/.dirstamp b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/.dirstamp new file mode 100644 index 00000000..e69de29b diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/.libs/connect.o b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/.libs/connect.o new file mode 100644 index 00000000..76948b0b Binary files /dev/null and b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/.libs/connect.o differ diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/.libs/normals.o b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/.libs/normals.o new file mode 100644 index 00000000..1c0bed63 Binary files /dev/null and b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/.libs/normals.o differ diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/.libs/shared.o b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/.libs/shared.o new file mode 100644 index 00000000..6f841927 Binary files /dev/null and b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/.libs/shared.o differ diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/.libs/stl_io.o b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/.libs/stl_io.o new file mode 100644 index 00000000..b6e1f1fb Binary files /dev/null and b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/.libs/stl_io.o differ diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/.libs/stlinit.o b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/.libs/stlinit.o new file mode 100644 index 00000000..20990116 Binary files /dev/null and b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/.libs/stlinit.o differ diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/.libs/util.o b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/.libs/util.o new file mode 100644 index 00000000..e741456d Binary files /dev/null and b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/.libs/util.o differ diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/admesh.c b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/admesh.c new file mode 100644 index 00000000..cbab4b35 --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/admesh.c @@ -0,0 +1,425 @@ +/* ADMesh -- process triangulated solid meshes + * Copyright (C) 1995, 1996 Anthony D. Martin + * Copyright (C) 2013, 2014 several contributors, see AUTHORS + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Questions, comments, suggestions, etc to + * https://github.com/admesh/admesh/issues + */ + +#include +#include +#include + + +#include "stl.h" +#include "config.h" + +static void usage(int status, char *program_name); + +int +main(int argc, char **argv) { + stl_file stl_in; + float tolerance = 0; + float increment = 0; + float x_trans; + float y_trans; + float z_trans; + float scale_factor = 0; + float rotate_x_angle = 0; + float rotate_y_angle = 0; + float rotate_z_angle = 0; + int c; + char *program_name; + char *binary_name = NULL; + char *ascii_name = NULL; + char *merge_name = NULL; + char *off_name = NULL; + char *dxf_name = NULL; + char *vrml_name = NULL; + int fixall_flag = 1; /* Default behavior is to fix all. */ + int exact_flag = 0; /* All checks turned off by default. */ + int tolerance_flag = 0; /* Is tolerance specified on cmdline */ + int nearby_flag = 0; + int remove_unconnected_flag = 0; + int fill_holes_flag = 0; + int normal_directions_flag = 0; + int normal_values_flag = 0; + int reverse_all_flag = 0; + int write_binary_stl_flag = 0; + int write_ascii_stl_flag = 0; + int generate_shared_vertices_flag = 0; + int write_off_flag = 0; + int write_dxf_flag = 0; + int write_vrml_flag = 0; + int translate_flag = 0; + int scale_flag = 0; + int rotate_x_flag = 0; + int rotate_y_flag = 0; + int rotate_z_flag = 0; + int mirror_xy_flag = 0; + int mirror_yz_flag = 0; + int mirror_xz_flag = 0; + int merge_flag = 0; + int help_flag = 0; + int version_flag = 0; + + int iterations = 2; /* Default number of iterations. */ + int increment_flag = 0; + char *input_file = NULL; + + int ret = 0; + + enum {rotate_x = 1000, rotate_y, rotate_z, merge, help, version, + mirror_xy, mirror_yz, mirror_xz, scale, translate, reverse_all, + off_file, dxf_file, vrml_file + }; + + struct option long_options[] = { + {"exact", no_argument, NULL, 'e'}, + {"nearby", no_argument, NULL, 'n'}, + {"tolerance", required_argument, NULL, 't'}, + {"iterations", required_argument, NULL, 'i'}, + {"increment", required_argument, NULL, 'm'}, + {"remove-unconnected", no_argument, NULL, 'u'}, + {"fill-holes", no_argument, NULL, 'f'}, + {"normal-directions", no_argument, NULL, 'd'}, + {"normal-values", no_argument, NULL, 'v'}, + {"no-check", no_argument, NULL, 'c'}, + {"reverse-all", no_argument, NULL, reverse_all}, + {"write-binary-stl", required_argument, NULL, 'b'}, + {"write-ascii-stl", required_argument, NULL, 'a'}, + {"write-off", required_argument, NULL, off_file}, + {"write-dxf", required_argument, NULL, dxf_file}, + {"write-vrml", required_argument, NULL, vrml_file}, + {"translate", required_argument, NULL, translate}, + {"scale", required_argument, NULL, scale}, + {"x-rotate", required_argument, NULL, rotate_x}, + {"y-rotate", required_argument, NULL, rotate_y}, + {"z-rotate", required_argument, NULL, rotate_z}, + {"xy-mirror", no_argument, NULL, mirror_xy}, + {"yz-mirror", no_argument, NULL, mirror_yz}, + {"xz-mirror", no_argument, NULL, mirror_xz}, + {"merge", required_argument, NULL, merge}, + {"help", no_argument, NULL, help}, + {"version", no_argument, NULL, version}, + {NULL, 0, NULL, 0} + }; + + program_name = argv[0]; + while((c = getopt_long(argc, argv, "et:i:m:nufdcvb:a:", + long_options, (int *) 0)) != EOF) { + switch(c) { + case 0: /* If *flag is not null */ + break; + case 'e': + exact_flag = 1; + fixall_flag = 0; + break; + case 'n': + nearby_flag = 1; + fixall_flag = 0; + break; + case 't': + tolerance_flag = 1; + tolerance = atof(optarg); + break; + case 'i': + iterations = atoi(optarg); + break; + case 'm': + increment_flag = 1; + increment = atof(optarg); + break; + case 'u': + remove_unconnected_flag = 1; + fixall_flag = 0; + break; + case 'f': + fill_holes_flag = 1; + fixall_flag = 0; + break; + case 'd': + normal_directions_flag = 1; + fixall_flag = 0; + break; + case 'v': + normal_values_flag = 1; + fixall_flag = 0; + break; + case 'c': + fixall_flag = 0; + break; + case reverse_all: + reverse_all_flag = 1; + fixall_flag = 0; + break; + case 'b': + write_binary_stl_flag = 1; + binary_name = optarg; /* I'm not sure if this is safe. */ + break; + case 'a': + write_ascii_stl_flag = 1; + ascii_name = optarg; /* I'm not sure if this is safe. */ + break; + case off_file: + generate_shared_vertices_flag = 1; + write_off_flag = 1; + off_name = optarg; + break; + case vrml_file: + generate_shared_vertices_flag = 1; + write_vrml_flag = 1; + vrml_name = optarg; + break; + case dxf_file: + write_dxf_flag = 1; + dxf_name = optarg; + break; + case translate: + translate_flag = 1; + sscanf(optarg, "%f,%f,%f", &x_trans, &y_trans, &z_trans); + break; + case scale: + scale_flag = 1; + scale_factor = atof(optarg); + break; + case rotate_x: + rotate_x_flag = 1; + rotate_x_angle = atof(optarg); + break; + case rotate_y: + rotate_y_flag = 1; + rotate_y_angle = atof(optarg); + break; + case rotate_z: + rotate_z_flag = 1; + rotate_z_angle = atof(optarg); + break; + case mirror_xy: + mirror_xy_flag = 1; + break; + case mirror_yz: + mirror_yz_flag = 1; + break; + case mirror_xz: + mirror_xz_flag = 1; + break; + case merge: + merge_flag = 1; + merge_name = optarg; + break; + case help: + help_flag = 1; + break; + case version: + version_flag = 1; + break; + default: + usage(1, program_name); + return 1; + } + } + + if(help_flag) { + usage(0, program_name); + return 0; + } + if(version_flag) { + printf("ADMesh - version " VERSION "\n"); + return 0; + } + + if(optind == argc) { + printf("No input file name given.\n"); + usage(1, program_name); + return 1; + } else { + input_file = argv[optind]; + } + + printf("\ +ADMesh version " VERSION ", Copyright (C) 1995, 1996 Anthony D. Martin\n\ +ADMesh comes with NO WARRANTY. This is free software, and you are welcome to\n\ +redistribute it under certain conditions. See the file COPYING for details.\n"); + + + printf("Opening %s\n", input_file); + stl_open(&stl_in, input_file); + stl_exit_on_error(&stl_in); + + if(rotate_x_flag) { + printf("Rotating about the x axis by %f degrees...\n", rotate_x_angle); + stl_rotate_x(&stl_in, rotate_x_angle); + } + if(rotate_y_flag) { + printf("Rotating about the y axis by %f degrees...\n", rotate_y_angle); + stl_rotate_y(&stl_in, rotate_y_angle); + } + if(rotate_z_flag) { + printf("Rotating about the z axis by %f degrees...\n", rotate_z_angle); + stl_rotate_z(&stl_in, rotate_z_angle); + } + if(mirror_xy_flag) { + printf("Mirroring about the xy plane...\n"); + stl_mirror_xy(&stl_in); + } + if(mirror_yz_flag) { + printf("Mirroring about the yz plane...\n"); + stl_mirror_yz(&stl_in); + } + if(mirror_xz_flag) { + printf("Mirroring about the xz plane...\n"); + stl_mirror_xz(&stl_in); + } + + if(scale_flag) { + printf("Scaling by factor %f...\n", scale_factor); + stl_scale(&stl_in, scale_factor); + } + if(translate_flag) { + printf("Translating to %f, %f, %f ...\n", x_trans, y_trans, z_trans); + stl_translate(&stl_in, x_trans, y_trans, z_trans); + } + if(merge_flag) { + printf("Merging %s with %s\n", input_file, merge_name); + /* Open the file and add the contents to stl_in: */ + stl_open_merge(&stl_in, merge_name); + } + + stl_repair(&stl_in, + fixall_flag, + exact_flag, + tolerance_flag, + tolerance, + increment_flag, + increment, + nearby_flag, + iterations, + remove_unconnected_flag, + fill_holes_flag, + normal_directions_flag, + normal_values_flag, + reverse_all_flag, + 1); + + + if(generate_shared_vertices_flag) { + printf("Generating shared vertices...\n"); + stl_generate_shared_vertices(&stl_in); + } + + if(write_off_flag) { + printf("Writing OFF file %s\n", off_name); + stl_write_off(&stl_in, off_name); + if (stl_in.error) { + stl_clear_error(&stl_in); + ret = 1; + } + } + + if(write_dxf_flag) { + printf("Writing DXF file %s\n", dxf_name); + stl_write_dxf(&stl_in, dxf_name, "Created by ADMesh version " VERSION); + if (stl_in.error) { + stl_clear_error(&stl_in); + ret = 1; + } + } + + if(write_vrml_flag) { + printf("Writing VRML file %s\n", vrml_name); + stl_write_vrml(&stl_in, vrml_name); + if (stl_in.error) { + stl_clear_error(&stl_in); + ret = 1; + } + } + + if(write_ascii_stl_flag) { + printf("Writing ascii file %s\n", ascii_name); + stl_write_ascii(&stl_in, ascii_name, + "Processed by ADMesh version " VERSION); + if (stl_in.error) { + stl_clear_error(&stl_in); + ret = 1; + } + } + + if(write_binary_stl_flag) { + printf("Writing binary file %s\n", binary_name); + stl_write_binary(&stl_in, binary_name, + "Processed by ADMesh version " VERSION); + if (stl_in.error) { + stl_clear_error(&stl_in); + ret = 1; + } + } + + stl_stats_out(&stl_in, stdout, input_file); + + stl_close(&stl_in); + + if (ret) + fprintf(stderr, "Some part of the procedure failed, see the above log for more information about what happened.\n"); + + return ret; +} + +static void +usage(int status, char *program_name) { + if(status != 0) { + fprintf(stderr, "Try '%s --help' for more information.\n", program_name); + } else { + printf("\n"); + printf("ADMesh version " VERSION "\n"); + printf("Copyright (C) 1995, 1996 Anthony D. Martin\n"); + printf("Usage: %s [OPTION]... file\n", program_name); + printf("\n"); + printf(" --x-rotate=angle Rotate CCW about x-axis by angle degrees\n"); + printf(" --y-rotate=angle Rotate CCW about y-axis by angle degrees\n"); + printf(" --z-rotate=angle Rotate CCW about z-axis by angle degrees\n"); + printf(" --xy-mirror Mirror about the xy plane\n"); + printf(" --yz-mirror Mirror about the yz plane\n"); + printf(" --xz-mirror Mirror about the xz plane\n"); + printf(" --scale=factor Scale the file by factor (multiply by factor)\n"); + printf(" --translate=x,y,z Translate the file to x, y, and z\n"); + printf(" --merge=name Merge file called name with input file\n"); + printf(" -e, --exact Only check for perfectly matched edges\n"); + printf(" -n, --nearby Find and connect nearby facets. Correct bad facets\n"); + printf(" -t, --tolerance=tol Initial tolerance to use for nearby check = tol\n"); + printf(" -i, --iterations=i Number of iterations for nearby check = i\n"); + printf(" -m, --increment=inc Amount to increment tolerance after iteration=inc\n"); + printf(" -u, --remove-unconnected Remove facets that have 0 neighbors\n"); + printf(" -f, --fill-holes Add facets to fill holes\n"); + printf(" -d, --normal-directions Check and fix direction of normals(ie cw, ccw)\n"); + printf(" --reverse-all Reverse the directions of all facets and normals\n"); + printf(" -v, --normal-values Check and fix normal values\n"); + printf(" -c, --no-check Don't do any check on input file\n"); + printf(" -b, --write-binary-stl=name Output a binary STL file called name\n"); + printf(" -a, --write-ascii-stl=name Output an ascii STL file called name\n"); + printf(" --write-off=name Output a Geomview OFF format file called name\n"); + printf(" --write-dxf=name Output a DXF format file called name\n"); + printf(" --write-vrml=name Output a VRML format file called name\n"); + printf(" --help Display this help and exit\n"); + printf(" --version Output version information and exit\n"); + printf("\n"); + printf("The functions are executed in the same order as the options shown here.\n"); + printf("So check here to find what happens if, for example, --translate and --merge\n"); + printf("options are specified together. The order of the options specified on the\n"); + printf("command line is not important.\n"); + } +} diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/admesh.o b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/admesh.o new file mode 100644 index 00000000..c4501f95 Binary files /dev/null and b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/admesh.o differ diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/connect.c b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/connect.c new file mode 100644 index 00000000..281c2878 --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/connect.c @@ -0,0 +1,975 @@ +/* ADMesh -- process triangulated solid meshes + * Copyright (C) 1995, 1996 Anthony D. Martin + * Copyright (C) 2013, 2014 several contributors, see AUTHORS + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Questions, comments, suggestions, etc to + * https://github.com/admesh/admesh/issues + */ + +#include +#include +#include +#include + +#include "stl.h" + + +static void stl_match_neighbors_exact(stl_file *stl, + stl_hash_edge *edge_a, stl_hash_edge *edge_b); +static void stl_match_neighbors_nearby(stl_file *stl, + stl_hash_edge *edge_a, stl_hash_edge *edge_b); +static void stl_record_neighbors(stl_file *stl, + stl_hash_edge *edge_a, stl_hash_edge *edge_b); +static void stl_initialize_facet_check_exact(stl_file *stl); +static void stl_initialize_facet_check_nearby(stl_file *stl); +static void stl_load_edge_exact(stl_file *stl, stl_hash_edge *edge, + stl_vertex *a, stl_vertex *b); +static int stl_load_edge_nearby(stl_file *stl, stl_hash_edge *edge, + stl_vertex *a, stl_vertex *b, float tolerance); +static void insert_hash_edge(stl_file *stl, stl_hash_edge edge, + void (*match_neighbors)(stl_file *stl, + stl_hash_edge *edge_a, stl_hash_edge *edge_b)); +static int stl_get_hash_for_edge(int M, stl_hash_edge *edge); +static int stl_compare_function(stl_hash_edge *edge_a, stl_hash_edge *edge_b); +static void stl_free_edges(stl_file *stl); +static void stl_remove_facet(stl_file *stl, int facet_number); +static void stl_change_vertices(stl_file *stl, int facet_num, int vnot, + stl_vertex new_vertex); +static void stl_which_vertices_to_change(stl_file *stl, stl_hash_edge *edge_a, + stl_hash_edge *edge_b, int *facet1, int *vertex1, + int *facet2, int *vertex2, + stl_vertex *new_vertex1, stl_vertex *new_vertex2); +static void stl_remove_degenerate(stl_file *stl, int facet); +extern int stl_check_normal_vector(stl_file *stl, + int facet_num, int normal_fix_flag); +static void stl_update_connects_remove_1(stl_file *stl, int facet_num); + + +void +stl_check_facets_exact(stl_file *stl) { + /* This function builds the neighbors list. No modifications are made + * to any of the facets. The edges are said to match only if all six + * floats of the first edge matches all six floats of the second edge. + */ + + stl_hash_edge edge; + stl_facet facet; + int i; + int j; + + if (stl->error) return; + + stl->stats.connected_edges = 0; + stl->stats.connected_facets_1_edge = 0; + stl->stats.connected_facets_2_edge = 0; + stl->stats.connected_facets_3_edge = 0; + + stl_initialize_facet_check_exact(stl); + + for(i = 0; i < stl->stats.number_of_facets; i++) { + facet = stl->facet_start[i]; + + /* If any two of the three vertices are found to be exactally the same, call them degenerate and remove the facet. */ + if( !memcmp(&facet.vertex[0], &facet.vertex[1], + sizeof(stl_vertex)) + || !memcmp(&facet.vertex[1], &facet.vertex[2], + sizeof(stl_vertex)) + || !memcmp(&facet.vertex[0], &facet.vertex[2], + sizeof(stl_vertex))) { + stl->stats.degenerate_facets += 1; + stl_remove_facet(stl, i); + i--; + continue; + + } + for(j = 0; j < 3; j++) { + edge.facet_number = i; + edge.which_edge = j; + stl_load_edge_exact(stl, &edge, &facet.vertex[j], + &facet.vertex[(j + 1) % 3]); + + insert_hash_edge(stl, edge, stl_match_neighbors_exact); + } + } + stl_free_edges(stl); +} + +static void +stl_load_edge_exact(stl_file *stl, stl_hash_edge *edge, + stl_vertex *a, stl_vertex *b) { + + float diff_x; + float diff_y; + float diff_z; + float max_diff; + + if (stl->error) return; + + diff_x = ABS(a->x - b->x); + diff_y = ABS(a->y - b->y); + diff_z = ABS(a->z - b->z); + max_diff = STL_MAX(diff_x, diff_y); + max_diff = STL_MAX(diff_z, max_diff); + stl->stats.shortest_edge = STL_MIN(max_diff, stl->stats.shortest_edge); + + if(diff_x == max_diff) { + if(a->x > b->x) { + memcpy(&edge->key[0], a, sizeof(stl_vertex)); + memcpy(&edge->key[3], b, sizeof(stl_vertex)); + } else { + memcpy(&edge->key[0], b, sizeof(stl_vertex)); + memcpy(&edge->key[3], a, sizeof(stl_vertex)); + edge->which_edge += 3; /* this edge is loaded backwards */ + } + } else if(diff_y == max_diff) { + if(a->y > b->y) { + memcpy(&edge->key[0], a, sizeof(stl_vertex)); + memcpy(&edge->key[3], b, sizeof(stl_vertex)); + } else { + memcpy(&edge->key[0], b, sizeof(stl_vertex)); + memcpy(&edge->key[3], a, sizeof(stl_vertex)); + edge->which_edge += 3; /* this edge is loaded backwards */ + } + } else { + if(a->z > b->z) { + memcpy(&edge->key[0], a, sizeof(stl_vertex)); + memcpy(&edge->key[3], b, sizeof(stl_vertex)); + } else { + memcpy(&edge->key[0], b, sizeof(stl_vertex)); + memcpy(&edge->key[3], a, sizeof(stl_vertex)); + edge->which_edge += 3; /* this edge is loaded backwards */ + } + } +} + +static void +stl_initialize_facet_check_exact(stl_file *stl) { + int i; + + if (stl->error) return; + + stl->stats.malloced = 0; + stl->stats.freed = 0; + stl->stats.collisions = 0; + + + stl->M = 81397; + + for(i = 0; i < stl->stats.number_of_facets ; i++) { + /* initialize neighbors list to -1 to mark unconnected edges */ + stl->neighbors_start[i].neighbor[0] = -1; + stl->neighbors_start[i].neighbor[1] = -1; + stl->neighbors_start[i].neighbor[2] = -1; + } + + stl->heads = (stl_hash_edge**)calloc(stl->M, sizeof(*stl->heads)); + if(stl->heads == NULL) perror("stl_initialize_facet_check_exact"); + + stl->tail = (stl_hash_edge*)malloc(sizeof(stl_hash_edge)); + if(stl->tail == NULL) perror("stl_initialize_facet_check_exact"); + + stl->tail->next = stl->tail; + + for(i = 0; i < stl->M; i++) { + stl->heads[i] = stl->tail; + } +} + +static void +insert_hash_edge(stl_file *stl, stl_hash_edge edge, + void (*match_neighbors)(stl_file *stl, + stl_hash_edge *edge_a, stl_hash_edge *edge_b)) { + stl_hash_edge *link; + stl_hash_edge *new_edge; + stl_hash_edge *temp; + int chain_number; + + if (stl->error) return; + + chain_number = stl_get_hash_for_edge(stl->M, &edge); + + link = stl->heads[chain_number]; + + if(link == stl->tail) { + /* This list doesn't have any edges currently in it. Add this one. */ + new_edge = (stl_hash_edge*)malloc(sizeof(stl_hash_edge)); + if(new_edge == NULL) perror("insert_hash_edge"); + stl->stats.malloced++; + *new_edge = edge; + new_edge->next = stl->tail; + stl->heads[chain_number] = new_edge; + return; + } else if(!stl_compare_function(&edge, link)) { + /* This is a match. Record result in neighbors list. */ + match_neighbors(stl, &edge, link); + /* Delete the matched edge from the list. */ + stl->heads[chain_number] = link->next; + free(link); + stl->stats.freed++; + return; + } else { + /* Continue through the rest of the list */ + for(;;) { + if(link->next == stl->tail) { + /* This is the last item in the list. Insert a new edge. */ + new_edge = (stl_hash_edge*)malloc(sizeof(stl_hash_edge)); + if(new_edge == NULL) perror("insert_hash_edge"); + stl->stats.malloced++; + *new_edge = edge; + new_edge->next = stl->tail; + link->next = new_edge; + stl->stats.collisions++; + return; + } else if(!stl_compare_function(&edge, link->next)) { + /* This is a match. Record result in neighbors list. */ + match_neighbors(stl, &edge, link->next); + + /* Delete the matched edge from the list. */ + temp = link->next; + link->next = link->next->next; + free(temp); + stl->stats.freed++; + return; + } else { + /* This is not a match. Go to the next link */ + link = link->next; + stl->stats.collisions++; + } + } + } +} + + +static int +stl_get_hash_for_edge(int M, stl_hash_edge *edge) { + return ((edge->key[0] / 23 + edge->key[1] / 19 + edge->key[2] / 17 + + edge->key[3] /13 + edge->key[4] / 11 + edge->key[5] / 7 ) % M); +} + +static int +stl_compare_function(stl_hash_edge *edge_a, stl_hash_edge *edge_b) { + if(edge_a->facet_number == edge_b->facet_number) { + return 1; /* Don't match edges of the same facet */ + } else { + return memcmp(edge_a, edge_b, SIZEOF_EDGE_SORT); + } +} + +void +stl_check_facets_nearby(stl_file *stl, float tolerance) { + stl_hash_edge edge[3]; + stl_facet facet; + int i; + int j; + + if (stl->error) return; + + if( (stl->stats.connected_facets_1_edge == stl->stats.number_of_facets) + && (stl->stats.connected_facets_2_edge == stl->stats.number_of_facets) + && (stl->stats.connected_facets_3_edge == stl->stats.number_of_facets)) { + /* No need to check any further. All facets are connected */ + return; + } + + stl_initialize_facet_check_nearby(stl); + + for(i = 0; i < stl->stats.number_of_facets; i++) { + facet = stl->facet_start[i]; + for(j = 0; j < 3; j++) { + if(stl->neighbors_start[i].neighbor[j] == -1) { + edge[j].facet_number = i; + edge[j].which_edge = j; + if(stl_load_edge_nearby(stl, &edge[j], &facet.vertex[j], + &facet.vertex[(j + 1) % 3], + tolerance)) { + /* only insert edges that have different keys */ + insert_hash_edge(stl, edge[j], stl_match_neighbors_nearby); + } + } + } + } + + stl_free_edges(stl); +} + +static int +stl_load_edge_nearby(stl_file *stl, stl_hash_edge *edge, + stl_vertex *a, stl_vertex *b, float tolerance) { + float diff_x; + float diff_y; + float diff_z; + float max_diff; + unsigned vertex1[3]; + unsigned vertex2[3]; + + + diff_x = ABS(a->x - b->x); + diff_y = ABS(a->y - b->y); + diff_z = ABS(a->z - b->z); + max_diff = STL_MAX(diff_x, diff_y); + max_diff = STL_MAX(diff_z, max_diff); + + vertex1[0] = (unsigned)((a->x - stl->stats.min.x) / tolerance); + vertex1[1] = (unsigned)((a->y - stl->stats.min.y) / tolerance); + vertex1[2] = (unsigned)((a->z - stl->stats.min.z) / tolerance); + vertex2[0] = (unsigned)((b->x - stl->stats.min.x) / tolerance); + vertex2[1] = (unsigned)((b->y - stl->stats.min.y) / tolerance); + vertex2[2] = (unsigned)((b->z - stl->stats.min.z) / tolerance); + + if( (vertex1[0] == vertex2[0]) + && (vertex1[1] == vertex2[1]) + && (vertex1[2] == vertex2[2])) { + /* Both vertices hash to the same value */ + return 0; + } + + if(diff_x == max_diff) { + if(a->x > b->x) { + memcpy(&edge->key[0], vertex1, sizeof(stl_vertex)); + memcpy(&edge->key[3], vertex2, sizeof(stl_vertex)); + } else { + memcpy(&edge->key[0], vertex2, sizeof(stl_vertex)); + memcpy(&edge->key[3], vertex1, sizeof(stl_vertex)); + edge->which_edge += 3; /* this edge is loaded backwards */ + } + } else if(diff_y == max_diff) { + if(a->y > b->y) { + memcpy(&edge->key[0], vertex1, sizeof(stl_vertex)); + memcpy(&edge->key[3], vertex2, sizeof(stl_vertex)); + } else { + memcpy(&edge->key[0], vertex2, sizeof(stl_vertex)); + memcpy(&edge->key[3], vertex1, sizeof(stl_vertex)); + edge->which_edge += 3; /* this edge is loaded backwards */ + } + } else { + if(a->z > b->z) { + memcpy(&edge->key[0], vertex1, sizeof(stl_vertex)); + memcpy(&edge->key[3], vertex2, sizeof(stl_vertex)); + } else { + memcpy(&edge->key[0], vertex2, sizeof(stl_vertex)); + memcpy(&edge->key[3], vertex1, sizeof(stl_vertex)); + edge->which_edge += 3; /* this edge is loaded backwards */ + } + } + return 1; +} + +static void +stl_free_edges(stl_file *stl) { + int i; + stl_hash_edge *temp; + + if (stl->error) return; + + if(stl->stats.malloced != stl->stats.freed) { + for(i = 0; i < stl->M; i++) { + for(temp = stl->heads[i]; stl->heads[i] != stl->tail; + temp = stl->heads[i]) { + stl->heads[i] = stl->heads[i]->next; + free(temp); + stl->stats.freed++; + } + } + } + free(stl->heads); + free(stl->tail); +} + +static void +stl_initialize_facet_check_nearby(stl_file *stl) { + int i; + + if (stl->error) return; + + stl->stats.malloced = 0; + stl->stats.freed = 0; + stl->stats.collisions = 0; + + /* tolerance = STL_MAX(stl->stats.shortest_edge, tolerance);*/ + /* tolerance = STL_MAX((stl->stats.bounding_diameter / 500000.0), tolerance);*/ + /* tolerance *= 0.5;*/ + + stl->M = 81397; + + stl->heads = (stl_hash_edge**)calloc(stl->M, sizeof(*stl->heads)); + if(stl->heads == NULL) perror("stl_initialize_facet_check_nearby"); + + stl->tail = (stl_hash_edge*)malloc(sizeof(stl_hash_edge)); + if(stl->tail == NULL) perror("stl_initialize_facet_check_nearby"); + + stl->tail->next = stl->tail; + + for(i = 0; i < stl->M; i++) { + stl->heads[i] = stl->tail; + } +} + + + +static void +stl_record_neighbors(stl_file *stl, + stl_hash_edge *edge_a, stl_hash_edge *edge_b) { + int i; + int j; + + if (stl->error) return; + + /* Facet a's neighbor is facet b */ + stl->neighbors_start[edge_a->facet_number].neighbor[edge_a->which_edge % 3] = + edge_b->facet_number; /* sets the .neighbor part */ + + stl->neighbors_start[edge_a->facet_number]. + which_vertex_not[edge_a->which_edge % 3] = + (edge_b->which_edge + 2) % 3; /* sets the .which_vertex_not part */ + + /* Facet b's neighbor is facet a */ + stl->neighbors_start[edge_b->facet_number].neighbor[edge_b->which_edge % 3] = + edge_a->facet_number; /* sets the .neighbor part */ + + stl->neighbors_start[edge_b->facet_number]. + which_vertex_not[edge_b->which_edge % 3] = + (edge_a->which_edge + 2) % 3; /* sets the .which_vertex_not part */ + + if( ((edge_a->which_edge < 3) && (edge_b->which_edge < 3)) + || ((edge_a->which_edge > 2) && (edge_b->which_edge > 2))) { + /* these facets are oriented in opposite directions. */ + /* their normals are probably messed up. */ + stl->neighbors_start[edge_a->facet_number]. + which_vertex_not[edge_a->which_edge % 3] += 3; + stl->neighbors_start[edge_b->facet_number]. + which_vertex_not[edge_b->which_edge % 3] += 3; + } + + + /* Count successful connects */ + /* Total connects */ + stl->stats.connected_edges += 2; + /* Count individual connects */ + i = ((stl->neighbors_start[edge_a->facet_number].neighbor[0] == -1) + + (stl->neighbors_start[edge_a->facet_number].neighbor[1] == -1) + + (stl->neighbors_start[edge_a->facet_number].neighbor[2] == -1)); + j = ((stl->neighbors_start[edge_b->facet_number].neighbor[0] == -1) + + (stl->neighbors_start[edge_b->facet_number].neighbor[1] == -1) + + (stl->neighbors_start[edge_b->facet_number].neighbor[2] == -1)); + if(i == 2) { + stl->stats.connected_facets_1_edge +=1; + } else if(i == 1) { + stl->stats.connected_facets_2_edge +=1; + } else { + stl->stats.connected_facets_3_edge +=1; + } + if(j == 2) { + stl->stats.connected_facets_1_edge +=1; + } else if(j == 1) { + stl->stats.connected_facets_2_edge +=1; + } else { + stl->stats.connected_facets_3_edge +=1; + } +} + +static void +stl_match_neighbors_exact(stl_file *stl, + stl_hash_edge *edge_a, stl_hash_edge *edge_b) { + if (stl->error) return; + stl_record_neighbors(stl, edge_a, edge_b); +} + +static void +stl_match_neighbors_nearby(stl_file *stl, + stl_hash_edge *edge_a, stl_hash_edge *edge_b) { + int facet1; + int facet2; + int vertex1; + int vertex2; + int vnot1; + int vnot2; + stl_vertex new_vertex1; + stl_vertex new_vertex2; + + if (stl->error) return; + + stl_record_neighbors(stl, edge_a, edge_b); + stl_which_vertices_to_change(stl, edge_a, edge_b, &facet1, &vertex1, + &facet2, &vertex2, &new_vertex1, &new_vertex2); + if(facet1 != -1) { + if(facet1 == edge_a->facet_number) { + vnot1 = (edge_a->which_edge + 2) % 3; + } else { + vnot1 = (edge_b->which_edge + 2) % 3; + } + if(((vnot1 + 2) % 3) == vertex1) { + vnot1 += 3; + } + stl_change_vertices(stl, facet1, vnot1, new_vertex1); + } + if(facet2 != -1) { + if(facet2 == edge_a->facet_number) { + vnot2 = (edge_a->which_edge + 2) % 3; + } else { + vnot2 = (edge_b->which_edge + 2) % 3; + } + if(((vnot2 + 2) % 3) == vertex2) { + vnot2 += 3; + } + stl_change_vertices(stl, facet2, vnot2, new_vertex2); + } + stl->stats.edges_fixed += 2; +} + + +static void +stl_change_vertices(stl_file *stl, int facet_num, int vnot, + stl_vertex new_vertex) { + int first_facet; + int direction; + int next_edge; + int pivot_vertex; + + if (stl->error) return; + + first_facet = facet_num; + direction = 0; + + for(;;) { + if(vnot > 2) { + if(direction == 0) { + pivot_vertex = (vnot + 2) % 3; + next_edge = pivot_vertex; + direction = 1; + } else { + pivot_vertex = (vnot + 1) % 3; + next_edge = vnot % 3; + direction = 0; + } + } else { + if(direction == 0) { + pivot_vertex = (vnot + 1) % 3; + next_edge = vnot; + } else { + pivot_vertex = (vnot + 2) % 3; + next_edge = pivot_vertex; + } + } + stl->facet_start[facet_num].vertex[pivot_vertex] = new_vertex; + vnot = stl->neighbors_start[facet_num].which_vertex_not[next_edge]; + facet_num = stl->neighbors_start[facet_num].neighbor[next_edge]; + + if(facet_num == -1) { + break; + } + + if(facet_num == first_facet) { + /* back to the beginning */ + printf("\ +Back to the first facet changing vertices: probably a mobius part.\n\ +Try using a smaller tolerance or don't do a nearby check\n"); + return; + } + } +} + + +static void +stl_which_vertices_to_change(stl_file *stl, stl_hash_edge *edge_a, + stl_hash_edge *edge_b, int *facet1, int *vertex1, + int *facet2, int *vertex2, + stl_vertex *new_vertex1, stl_vertex *new_vertex2) { + int v1a; /* pair 1, facet a */ + int v1b; /* pair 1, facet b */ + int v2a; /* pair 2, facet a */ + int v2b; /* pair 2, facet b */ + + /* Find first pair */ + if(edge_a->which_edge < 3) { + v1a = edge_a->which_edge; + v2a = (edge_a->which_edge + 1) % 3; + } else { + v2a = edge_a->which_edge % 3; + v1a = (edge_a->which_edge + 1) % 3; + } + if(edge_b->which_edge < 3) { + v1b = edge_b->which_edge; + v2b = (edge_b->which_edge + 1) % 3; + } else { + v2b = edge_b->which_edge % 3; + v1b = (edge_b->which_edge + 1) % 3; + } + + /* Of the first pair, which vertex, if any, should be changed */ + if(!memcmp(&stl->facet_start[edge_a->facet_number].vertex[v1a], + &stl->facet_start[edge_b->facet_number].vertex[v1b], + sizeof(stl_vertex))) { + /* These facets are already equal. No need to change. */ + *facet1 = -1; + } else { + if( (stl->neighbors_start[edge_a->facet_number].neighbor[v1a] == -1) + && (stl->neighbors_start[edge_a->facet_number]. + neighbor[(v1a + 2) % 3] == -1)) { + /* This vertex has no neighbors. This is a good one to change */ + *facet1 = edge_a->facet_number; + *vertex1 = v1a; + *new_vertex1 = stl->facet_start[edge_b->facet_number].vertex[v1b]; + } else { + *facet1 = edge_b->facet_number; + *vertex1 = v1b; + *new_vertex1 = stl->facet_start[edge_a->facet_number].vertex[v1a]; + } + } + + /* Of the second pair, which vertex, if any, should be changed */ + if(!memcmp(&stl->facet_start[edge_a->facet_number].vertex[v2a], + &stl->facet_start[edge_b->facet_number].vertex[v2b], + sizeof(stl_vertex))) { + /* These facets are already equal. No need to change. */ + *facet2 = -1; + } else { + if( (stl->neighbors_start[edge_a->facet_number].neighbor[v2a] == -1) + && (stl->neighbors_start[edge_a->facet_number]. + neighbor[(v2a + 2) % 3] == -1)) { + /* This vertex has no neighbors. This is a good one to change */ + *facet2 = edge_a->facet_number; + *vertex2 = v2a; + *new_vertex2 = stl->facet_start[edge_b->facet_number].vertex[v2b]; + } else { + *facet2 = edge_b->facet_number; + *vertex2 = v2b; + *new_vertex2 = stl->facet_start[edge_a->facet_number].vertex[v2a]; + } + } +} + +static void +stl_remove_facet(stl_file *stl, int facet_number) { + int neighbor[3]; + int vnot[3]; + int i; + int j; + + if (stl->error) return; + + stl->stats.facets_removed += 1; + /* Update list of connected edges */ + j = ((stl->neighbors_start[facet_number].neighbor[0] == -1) + + (stl->neighbors_start[facet_number].neighbor[1] == -1) + + (stl->neighbors_start[facet_number].neighbor[2] == -1)); + if(j == 2) { + stl->stats.connected_facets_1_edge -= 1; + } else if(j == 1) { + stl->stats.connected_facets_2_edge -= 1; + stl->stats.connected_facets_1_edge -= 1; + } else if(j == 0) { + stl->stats.connected_facets_3_edge -= 1; + stl->stats.connected_facets_2_edge -= 1; + stl->stats.connected_facets_1_edge -= 1; + } + + stl->facet_start[facet_number] = + stl->facet_start[stl->stats.number_of_facets - 1]; + /* I could reallocate at this point, but it is not really necessary. */ + stl->neighbors_start[facet_number] = + stl->neighbors_start[stl->stats.number_of_facets - 1]; + stl->stats.number_of_facets -= 1; + + for(i = 0; i < 3; i++) { + neighbor[i] = stl->neighbors_start[facet_number].neighbor[i]; + vnot[i] = stl->neighbors_start[facet_number].which_vertex_not[i]; + } + + for(i = 0; i < 3; i++) { + if(neighbor[i] != -1) { + if(stl->neighbors_start[neighbor[i]].neighbor[(vnot[i] + 1)% 3] != + stl->stats.number_of_facets) { + printf("\ +in stl_remove_facet: neighbor = %d numfacets = %d this is wrong\n", + stl->neighbors_start[neighbor[i]].neighbor[(vnot[i] + 1)% 3], + stl->stats.number_of_facets); + return; + } + stl->neighbors_start[neighbor[i]].neighbor[(vnot[i] + 1)% 3] + = facet_number; + } + } +} + +void +stl_remove_unconnected_facets(stl_file *stl) { + /* A couple of things need to be done here. One is to remove any */ + /* completely unconnected facets (0 edges connected) since these are */ + /* useless and could be completely wrong. The second thing that needs to */ + /* be done is to remove any degenerate facets that were created during */ + /* stl_check_facets_nearby(). */ + + int i; + + if (stl->error) return; + + /* remove degenerate facets */ + for(i = 0; i < stl->stats.number_of_facets; i++) { + if( !memcmp(&stl->facet_start[i].vertex[0], + &stl->facet_start[i].vertex[1], sizeof(stl_vertex)) + || !memcmp(&stl->facet_start[i].vertex[1], + &stl->facet_start[i].vertex[2], sizeof(stl_vertex)) + || !memcmp(&stl->facet_start[i].vertex[0], + &stl->facet_start[i].vertex[2], sizeof(stl_vertex))) { + stl_remove_degenerate(stl, i); + i--; + } + } + + if(stl->stats.connected_facets_1_edge < stl->stats.number_of_facets) { + /* remove completely unconnected facets */ + for(i = 0; i < stl->stats.number_of_facets; i++) { + if( (stl->neighbors_start[i].neighbor[0] == -1) + && (stl->neighbors_start[i].neighbor[1] == -1) + && (stl->neighbors_start[i].neighbor[2] == -1)) { + /* This facet is completely unconnected. Remove it. */ + stl_remove_facet(stl, i); + i--; + } + } + } +} + +static void +stl_remove_degenerate(stl_file *stl, int facet) { + int edge1; + int edge2; + int edge3; + int neighbor1; + int neighbor2; + int neighbor3; + int vnot1; + int vnot2; + int vnot3; + + if (stl->error) return; + + if( !memcmp(&stl->facet_start[facet].vertex[0], + &stl->facet_start[facet].vertex[1], sizeof(stl_vertex)) + && !memcmp(&stl->facet_start[facet].vertex[1], + &stl->facet_start[facet].vertex[2], sizeof(stl_vertex))) { + /* all 3 vertices are equal. Just remove the facet. I don't think*/ + /* this is really possible, but just in case... */ + printf("removing a facet in stl_remove_degenerate\n"); + + stl_remove_facet(stl, facet); + return; + } + + if(!memcmp(&stl->facet_start[facet].vertex[0], + &stl->facet_start[facet].vertex[1], sizeof(stl_vertex))) { + edge1 = 1; + edge2 = 2; + edge3 = 0; + } else if(!memcmp(&stl->facet_start[facet].vertex[1], + &stl->facet_start[facet].vertex[2], sizeof(stl_vertex))) { + edge1 = 0; + edge2 = 2; + edge3 = 1; + } else if(!memcmp(&stl->facet_start[facet].vertex[2], + &stl->facet_start[facet].vertex[0], sizeof(stl_vertex))) { + edge1 = 0; + edge2 = 1; + edge3 = 2; + } else { + /* No degenerate. Function shouldn't have been called. */ + return; + } + neighbor1 = stl->neighbors_start[facet].neighbor[edge1]; + neighbor2 = stl->neighbors_start[facet].neighbor[edge2]; + + if(neighbor1 == -1) { + stl_update_connects_remove_1(stl, neighbor2); + } + if(neighbor2 == -1) { + stl_update_connects_remove_1(stl, neighbor1); + } + + + neighbor3 = stl->neighbors_start[facet].neighbor[edge3]; + vnot1 = stl->neighbors_start[facet].which_vertex_not[edge1]; + vnot2 = stl->neighbors_start[facet].which_vertex_not[edge2]; + vnot3 = stl->neighbors_start[facet].which_vertex_not[edge3]; + + if(neighbor1 != -1){ + stl->neighbors_start[neighbor1].neighbor[(vnot1 + 1) % 3] = neighbor2; + stl->neighbors_start[neighbor1].which_vertex_not[(vnot1 + 1) % 3] = vnot2; + } + if(neighbor2 != -1){ + stl->neighbors_start[neighbor2].neighbor[(vnot2 + 1) % 3] = neighbor1; + stl->neighbors_start[neighbor2].which_vertex_not[(vnot2 + 1) % 3] = vnot1; + } + + stl_remove_facet(stl, facet); + + if(neighbor3 != -1) { + stl_update_connects_remove_1(stl, neighbor3); + stl->neighbors_start[neighbor3].neighbor[(vnot3 + 1) % 3] = -1; + } +} + +void +stl_update_connects_remove_1(stl_file *stl, int facet_num) { + int j; + + if (stl->error) return; + /* Update list of connected edges */ + j = ((stl->neighbors_start[facet_num].neighbor[0] == -1) + + (stl->neighbors_start[facet_num].neighbor[1] == -1) + + (stl->neighbors_start[facet_num].neighbor[2] == -1)); + if(j == 0) { /* Facet has 3 neighbors */ + stl->stats.connected_facets_3_edge -= 1; + } else if(j == 1) { /* Facet has 2 neighbors */ + stl->stats.connected_facets_2_edge -= 1; + } else if(j == 2) { /* Facet has 1 neighbor */ + stl->stats.connected_facets_1_edge -= 1; + } +} + +void +stl_fill_holes(stl_file *stl) { + stl_facet facet; + stl_facet new_facet; + int neighbors_initial[3]; + stl_hash_edge edge; + int first_facet; + int direction; + int facet_num; + int vnot; + int next_edge; + int pivot_vertex; + int next_facet; + int i; + int j; + int k; + + if (stl->error) return; + + /* Insert all unconnected edges into hash list */ + stl_initialize_facet_check_nearby(stl); + for(i = 0; i < stl->stats.number_of_facets; i++) { + facet = stl->facet_start[i]; + for(j = 0; j < 3; j++) { + if(stl->neighbors_start[i].neighbor[j] != -1) continue; + edge.facet_number = i; + edge.which_edge = j; + stl_load_edge_exact(stl, &edge, &facet.vertex[j], + &facet.vertex[(j + 1) % 3]); + + insert_hash_edge(stl, edge, stl_match_neighbors_exact); + } + } + + for(i = 0; i < stl->stats.number_of_facets; i++) { + facet = stl->facet_start[i]; + neighbors_initial[0] = stl->neighbors_start[i].neighbor[0]; + neighbors_initial[1] = stl->neighbors_start[i].neighbor[1]; + neighbors_initial[2] = stl->neighbors_start[i].neighbor[2]; + first_facet = i; + for(j = 0; j < 3; j++) { + if(stl->neighbors_start[i].neighbor[j] != -1) continue; + + new_facet.vertex[0] = facet.vertex[j]; + new_facet.vertex[1] = facet.vertex[(j + 1) % 3]; + if(neighbors_initial[(j + 2) % 3] == -1) { + direction = 1; + } else { + direction = 0; + } + + facet_num = i; + vnot = (j + 2) % 3; + + for(;;) { + if(vnot > 2) { + if(direction == 0) { + pivot_vertex = (vnot + 2) % 3; + next_edge = pivot_vertex; + direction = 1; + } else { + pivot_vertex = (vnot + 1) % 3; + next_edge = vnot % 3; + direction = 0; + } + } else { + if(direction == 0) { + pivot_vertex = (vnot + 1) % 3; + next_edge = vnot; + } else { + pivot_vertex = (vnot + 2) % 3; + next_edge = pivot_vertex; + } + } + next_facet = stl->neighbors_start[facet_num].neighbor[next_edge]; + + if(next_facet == -1) { + new_facet.vertex[2] = stl->facet_start[facet_num]. + vertex[vnot % 3]; + stl_add_facet(stl, &new_facet); + for(k = 0; k < 3; k++) { + edge.facet_number = stl->stats.number_of_facets - 1; + edge.which_edge = k; + stl_load_edge_exact(stl, &edge, &new_facet.vertex[k], + &new_facet.vertex[(k + 1) % 3]); + + insert_hash_edge(stl, edge, stl_match_neighbors_exact); + } + break; + } else { + vnot = stl->neighbors_start[facet_num]. + which_vertex_not[next_edge]; + facet_num = next_facet; + } + + if(facet_num == first_facet) { + /* back to the beginning */ + printf("\ +Back to the first facet filling holes: probably a mobius part.\n\ +Try using a smaller tolerance or don't do a nearby check\n"); + return; + } + } + } + } +} + +void +stl_add_facet(stl_file *stl, stl_facet *new_facet) { + if (stl->error) return; + + stl->stats.facets_added += 1; + if(stl->stats.facets_malloced < stl->stats.number_of_facets + 1) { + stl->facet_start = (stl_facet*)realloc(stl->facet_start, + (sizeof(stl_facet) * (stl->stats.facets_malloced + 256))); + if(stl->facet_start == NULL) perror("stl_add_facet"); + stl->neighbors_start = (stl_neighbors*)realloc(stl->neighbors_start, + (sizeof(stl_neighbors) * (stl->stats.facets_malloced + 256))); + if(stl->neighbors_start == NULL) perror("stl_add_facet"); + stl->stats.facets_malloced += 256; + } + stl->facet_start[stl->stats.number_of_facets] = *new_facet; + + /* note that the normal vector is not set here, just initialized to 0 */ + stl->facet_start[stl->stats.number_of_facets].normal.x = 0.0; + stl->facet_start[stl->stats.number_of_facets].normal.y = 0.0; + stl->facet_start[stl->stats.number_of_facets].normal.z = 0.0; + + stl->neighbors_start[stl->stats.number_of_facets].neighbor[0] = -1; + stl->neighbors_start[stl->stats.number_of_facets].neighbor[1] = -1; + stl->neighbors_start[stl->stats.number_of_facets].neighbor[2] = -1; + stl->stats.number_of_facets += 1; +} diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/connect.lo b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/connect.lo new file mode 100644 index 00000000..e0491d17 --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/connect.lo @@ -0,0 +1,12 @@ +# src/connect.lo - a libtool object file +# Generated by libtool (GNU libtool) 2.4.6 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/connect.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/normals.c b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/normals.c new file mode 100644 index 00000000..2832899f --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/normals.c @@ -0,0 +1,333 @@ +/* ADMesh -- process triangulated solid meshes + * Copyright (C) 1995, 1996 Anthony D. Martin + * Copyright (C) 2013, 2014 several contributors, see AUTHORS + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Questions, comments, suggestions, etc to + * https://github.com/admesh/admesh/issues + */ + +#include +#include +#include +#include + +#include "stl.h" + +static void stl_reverse_facet(stl_file *stl, int facet_num); +static void stl_reverse_vector(float v[]); +int stl_check_normal_vector(stl_file *stl, int facet_num, int normal_fix_flag); + +static void +stl_reverse_facet(stl_file *stl, int facet_num) { + stl_vertex tmp_vertex; + /* int tmp_neighbor;*/ + int neighbor[3]; + int vnot[3]; + + stl->stats.facets_reversed += 1; + + neighbor[0] = stl->neighbors_start[facet_num].neighbor[0]; + neighbor[1] = stl->neighbors_start[facet_num].neighbor[1]; + neighbor[2] = stl->neighbors_start[facet_num].neighbor[2]; + vnot[0] = stl->neighbors_start[facet_num].which_vertex_not[0]; + vnot[1] = stl->neighbors_start[facet_num].which_vertex_not[1]; + vnot[2] = stl->neighbors_start[facet_num].which_vertex_not[2]; + + /* reverse the facet */ + tmp_vertex = stl->facet_start[facet_num].vertex[0]; + stl->facet_start[facet_num].vertex[0] = + stl->facet_start[facet_num].vertex[1]; + stl->facet_start[facet_num].vertex[1] = tmp_vertex; + + /* fix the vnots of the neighboring facets */ + if(neighbor[0] != -1) + stl->neighbors_start[neighbor[0]].which_vertex_not[(vnot[0] + 1) % 3] = + (stl->neighbors_start[neighbor[0]]. + which_vertex_not[(vnot[0] + 1) % 3] + 3) % 6; + if(neighbor[1] != -1) + stl->neighbors_start[neighbor[1]].which_vertex_not[(vnot[1] + 1) % 3] = + (stl->neighbors_start[neighbor[1]]. + which_vertex_not[(vnot[1] + 1) % 3] + 4) % 6; + if(neighbor[2] != -1) + stl->neighbors_start[neighbor[2]].which_vertex_not[(vnot[2] + 1) % 3] = + (stl->neighbors_start[neighbor[2]]. + which_vertex_not[(vnot[2] + 1) % 3] + 2) % 6; + + /* swap the neighbors of the facet that is being reversed */ + stl->neighbors_start[facet_num].neighbor[1] = neighbor[2]; + stl->neighbors_start[facet_num].neighbor[2] = neighbor[1]; + + /* swap the vnots of the facet that is being reversed */ + stl->neighbors_start[facet_num].which_vertex_not[1] = vnot[2]; + stl->neighbors_start[facet_num].which_vertex_not[2] = vnot[1]; + + /* reverse the values of the vnots of the facet that is being reversed */ + stl->neighbors_start[facet_num].which_vertex_not[0] = + (stl->neighbors_start[facet_num].which_vertex_not[0] + 3) % 6; + stl->neighbors_start[facet_num].which_vertex_not[1] = + (stl->neighbors_start[facet_num].which_vertex_not[1] + 3) % 6; + stl->neighbors_start[facet_num].which_vertex_not[2] = + (stl->neighbors_start[facet_num].which_vertex_not[2] + 3) % 6; +} + +void +stl_fix_normal_directions(stl_file *stl) { + char *norm_sw; + /* int edge_num;*/ + /* int vnot;*/ + int checked = 0; + int facet_num; + /* int next_facet;*/ + int i; + int j; + struct stl_normal { + int facet_num; + struct stl_normal *next; + }; + struct stl_normal *head; + struct stl_normal *tail; + struct stl_normal *newn; + struct stl_normal *temp; + + if (stl->error) return; + + /* Initialize linked list. */ + head = (struct stl_normal*)malloc(sizeof(struct stl_normal)); + if(head == NULL) perror("stl_fix_normal_directions"); + tail = (struct stl_normal*)malloc(sizeof(struct stl_normal)); + if(tail == NULL) perror("stl_fix_normal_directions"); + head->next = tail; + tail->next = tail; + + /* Initialize list that keeps track of already fixed facets. */ + norm_sw = (char*)calloc(stl->stats.number_of_facets, sizeof(char)); + if(norm_sw == NULL) perror("stl_fix_normal_directions"); + + + facet_num = 0; + /* If normal vector is not within tolerance and backwards: + Arbitrarily starts at face 0. If this one is wrong, we're screwed. Thankfully, the chances + of it being wrong randomly are low if most of the triangles are right: */ + if(stl_check_normal_vector(stl, 0, 0) == 2) + stl_reverse_facet(stl, 0); + + /* Say that we've fixed this facet: */ + norm_sw[facet_num] = 1; + checked++; + + for(;;) { + /* Add neighbors_to_list. + Add unconnected neighbors to the list:a */ + for(j = 0; j < 3; j++) { + /* Reverse the neighboring facets if necessary. */ + if(stl->neighbors_start[facet_num].which_vertex_not[j] > 2) { + /* If the facet has a neighbor that is -1, it means that edge isn't shared by another facet */ + if(stl->neighbors_start[facet_num].neighbor[j] != -1) { + stl_reverse_facet + (stl, stl->neighbors_start[facet_num].neighbor[j]); + } + } + /* If this edge of the facet is connected: */ + if(stl->neighbors_start[facet_num].neighbor[j] != -1) { + /* If we haven't fixed this facet yet, add it to the list: */ + if(norm_sw[stl->neighbors_start[facet_num].neighbor[j]] != 1) { + /* Add node to beginning of list. */ + newn = (struct stl_normal*)malloc(sizeof(struct stl_normal)); + if(newn == NULL) perror("stl_fix_normal_directions"); + newn->facet_num = stl->neighbors_start[facet_num].neighbor[j]; + newn->next = head->next; + head->next = newn; + } + } + } + /* Get next facet to fix from top of list. */ + if(head->next != tail) { + facet_num = head->next->facet_num; + if(norm_sw[facet_num] != 1) { /* If facet is in list mutiple times */ + norm_sw[facet_num] = 1; /* Record this one as being fixed. */ + checked++; + } + temp = head->next; /* Delete this facet from the list. */ + head->next = head->next->next; + free(temp); + } else { /* if we ran out of facets to fix: */ + /* All of the facets in this part have been fixed. */ + stl->stats.number_of_parts += 1; + if(checked >= stl->stats.number_of_facets) { + /* All of the facets have been checked. Bail out. */ + break; + } else { + /* There is another part here. Find it and continue. */ + for(i = 0; i < stl->stats.number_of_facets; i++) { + if(norm_sw[i] == 0) { + /* This is the first facet of the next part. */ + facet_num = i; + if(stl_check_normal_vector(stl, i, 0) == 2) { + stl_reverse_facet(stl, i); + } + + norm_sw[facet_num] = 1; + checked++; + break; + } + } + } + } + } + free(head); + free(tail); + free(norm_sw); +} + +int +stl_check_normal_vector(stl_file *stl, int facet_num, int normal_fix_flag) { + /* Returns 0 if the normal is within tolerance */ + /* Returns 1 if the normal is not within tolerance, but direction is OK */ + /* Returns 2 if the normal is not within tolerance and backwards */ + /* Returns 4 if the status is unknown. */ + + float normal[3]; + float test_norm[3]; + stl_facet *facet; + + facet = &stl->facet_start[facet_num]; + + stl_calculate_normal(normal, facet); + stl_normalize_vector(normal); + + if( (ABS(normal[0] - facet->normal.x) < 0.001) + && (ABS(normal[1] - facet->normal.y) < 0.001) + && (ABS(normal[2] - facet->normal.z) < 0.001)) { + /* It is not really necessary to change the values here */ + /* but just for consistency, I will. */ + facet->normal.x = normal[0]; + facet->normal.y = normal[1]; + facet->normal.z = normal[2]; + return 0; + } + + test_norm[0] = facet->normal.x; + test_norm[1] = facet->normal.y; + test_norm[2] = facet->normal.z; + + stl_normalize_vector(test_norm); + if( (ABS(normal[0] - test_norm[0]) < 0.001) + && (ABS(normal[1] - test_norm[1]) < 0.001) + && (ABS(normal[2] - test_norm[2]) < 0.001)) { + if(normal_fix_flag) { + facet->normal.x = normal[0]; + facet->normal.y = normal[1]; + facet->normal.z = normal[2]; + stl->stats.normals_fixed += 1; + } + return 1; + } + + stl_reverse_vector(test_norm); + if( (ABS(normal[0] - test_norm[0]) < 0.001) + && (ABS(normal[1] - test_norm[1]) < 0.001) + && (ABS(normal[2] - test_norm[2]) < 0.001)) { + /* Facet is backwards. */ + if(normal_fix_flag) { + facet->normal.x = normal[0]; + facet->normal.y = normal[1]; + facet->normal.z = normal[2]; + stl->stats.normals_fixed += 1; + } + return 2; + } + if(normal_fix_flag) { + facet->normal.x = normal[0]; + facet->normal.y = normal[1]; + facet->normal.z = normal[2]; + stl->stats.normals_fixed += 1; + } + return 4; +} + +static void +stl_reverse_vector(float v[]) { + v[0] *= -1; + v[1] *= -1; + v[2] *= -1; +} + + +void +stl_calculate_normal(float normal[], stl_facet *facet) { + float v1[3]; + float v2[3]; + + v1[0] = facet->vertex[1].x - facet->vertex[0].x; + v1[1] = facet->vertex[1].y - facet->vertex[0].y; + v1[2] = facet->vertex[1].z - facet->vertex[0].z; + v2[0] = facet->vertex[2].x - facet->vertex[0].x; + v2[1] = facet->vertex[2].y - facet->vertex[0].y; + v2[2] = facet->vertex[2].z - facet->vertex[0].z; + + normal[0] = (float)((double)v1[1] * (double)v2[2]) - ((double)v1[2] * (double)v2[1]); + normal[1] = (float)((double)v1[2] * (double)v2[0]) - ((double)v1[0] * (double)v2[2]); + normal[2] = (float)((double)v1[0] * (double)v2[1]) - ((double)v1[1] * (double)v2[0]); +} + +void stl_normalize_vector(float v[]) { + double length; + double factor; + float min_normal_length; + + length = sqrt((double)v[0] * (double)v[0] + (double)v[1] * (double)v[1] + (double)v[2] * (double)v[2]); + min_normal_length = 0.000000000001; + if(length < min_normal_length) { + v[0] = 0.0; + v[1] = 0.0; + v[2] = 0.0; + return; + } + factor = 1.0 / length; + v[0] *= factor; + v[1] *= factor; + v[2] *= factor; +} + +void +stl_fix_normal_values(stl_file *stl) { + int i; + + if (stl->error) return; + + for(i = 0; i < stl->stats.number_of_facets; i++) { + stl_check_normal_vector(stl, i, 1); + } +} + +void +stl_reverse_all_facets(stl_file *stl) { + int i; + float normal[3]; + + if (stl->error) return; + + for(i = 0; i < stl->stats.number_of_facets; i++) { + stl_reverse_facet(stl, i); + stl_calculate_normal(normal, &stl->facet_start[i]); + stl_normalize_vector(normal); + stl->facet_start[i].normal.x = normal[0]; + stl->facet_start[i].normal.y = normal[1]; + stl->facet_start[i].normal.z = normal[2]; + } +} + diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/normals.lo b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/normals.lo new file mode 100644 index 00000000..eae64495 --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/normals.lo @@ -0,0 +1,12 @@ +# src/normals.lo - a libtool object file +# Generated by libtool (GNU libtool) 2.4.6 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/normals.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/portable_endian.h b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/portable_endian.h new file mode 100644 index 00000000..f980de82 --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/portable_endian.h @@ -0,0 +1,123 @@ +/* portable_endian.h + * from https://gist.github.com/panzi/6856583 + * "License": Public Domain + * I, Mathias Panzenböck, place this file hereby into the public domain. Use it + * at your own risk for whatever you like. In case there are jurisdictions + * that don't support putting things in the public domain you can also consider + * it to be "dual licensed" under the BSD, MIT and Apache licenses, if you want + * to. This code is trivial anyway. Consider it an example on how to get the + * endian conversion functions on different platforms. + */ + +#ifndef PORTABLE_ENDIAN_H__ +#define PORTABLE_ENDIAN_H__ + +#if (defined(_WIN16) || defined(_WIN32) || defined(_WIN64)) && !defined(__WINDOWS__) + +# define __WINDOWS__ + +#endif + +#if defined(__linux__) || defined(__CYGWIN__) + +# include + +#elif defined(__APPLE__) + +# include + +# define htobe16(x) OSSwapHostToBigInt16(x) +# define htole16(x) OSSwapHostToLittleInt16(x) +# define be16toh(x) OSSwapBigToHostInt16(x) +# define le16toh(x) OSSwapLittleToHostInt16(x) + +# define htobe32(x) OSSwapHostToBigInt32(x) +# define htole32(x) OSSwapHostToLittleInt32(x) +# define be32toh(x) OSSwapBigToHostInt32(x) +# define le32toh(x) OSSwapLittleToHostInt32(x) + +# define htobe64(x) OSSwapHostToBigInt64(x) +# define htole64(x) OSSwapHostToLittleInt64(x) +# define be64toh(x) OSSwapBigToHostInt64(x) +# define le64toh(x) OSSwapLittleToHostInt64(x) + +# define __BYTE_ORDER BYTE_ORDER +# define __BIG_ENDIAN BIG_ENDIAN +# define __LITTLE_ENDIAN LITTLE_ENDIAN +# define __PDP_ENDIAN PDP_ENDIAN + +#elif defined(__OpenBSD__) + +# include + +#elif defined(__NetBSD__) || defined(__FreeBSD__) || defined(__DragonFly__) + +# include + +# define be16toh(x) betoh16(x) +# define le16toh(x) letoh16(x) + +# define be32toh(x) betoh32(x) +# define le32toh(x) letoh32(x) + +# define be64toh(x) betoh64(x) +# define le64toh(x) letoh64(x) + +#elif defined(__WINDOWS__) + +/* # include */ +# include + +# if BYTE_ORDER == LITTLE_ENDIAN + +# define htobe16(x) htons(x) +# define htole16(x) (x) +# define be16toh(x) ntohs(x) +# define le16toh(x) (x) + +# define htobe32(x) htonl(x) +# define htole32(x) (x) +# define be32toh(x) ntohl(x) +# define le32toh(x) (x) + +# define htobe64(x) htonll(x) +# define htole64(x) (x) +# define be64toh(x) ntohll(x) +# define le64toh(x) (x) + +# elif BYTE_ORDER == BIG_ENDIAN + + /* that would be xbox 360 */ +# define htobe16(x) (x) +# define htole16(x) __builtin_bswap16(x) +# define be16toh(x) (x) +# define le16toh(x) __builtin_bswap16(x) + +# define htobe32(x) (x) +# define htole32(x) __builtin_bswap32(x) +# define be32toh(x) (x) +# define le32toh(x) __builtin_bswap32(x) + +# define htobe64(x) (x) +# define htole64(x) __builtin_bswap64(x) +# define be64toh(x) (x) +# define le64toh(x) __builtin_bswap64(x) + +# else + +# error byte order not supported + +# endif + +# define __BYTE_ORDER BYTE_ORDER +# define __BIG_ENDIAN BIG_ENDIAN +# define __LITTLE_ENDIAN LITTLE_ENDIAN +# define __PDP_ENDIAN PDP_ENDIAN + +#else + +# error platform not supported + +#endif + +#endif diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/shared.c b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/shared.c new file mode 100644 index 00000000..56164e25 --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/shared.c @@ -0,0 +1,262 @@ +/* ADMesh -- process triangulated solid meshes + * Copyright (C) 1995, 1996 Anthony D. Martin + * Copyright (C) 2013, 2014 several contributors, see AUTHORS + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Questions, comments, suggestions, etc to + * https://github.com/admesh/admesh/issues + */ + +#include +#include + +#include "stl.h" + +void +stl_invalidate_shared_vertices(stl_file *stl) { + if (stl->error) return; + + if (stl->v_indices != NULL) { + free(stl->v_indices); + stl->v_indices = NULL; + } + if (stl->v_shared != NULL) { + free(stl->v_shared); + stl->v_shared = NULL; + } +} + +void +stl_generate_shared_vertices(stl_file *stl) { + int i; + int j; + int first_facet; + int direction; + int facet_num; + int vnot; + int next_edge; + int pivot_vertex; + int next_facet; + int reversed; + + if (stl->error) return; + + /* make sure this function is idempotent and does not leak memory */ + stl_invalidate_shared_vertices(stl); + + stl->v_indices = (v_indices_struct*) + calloc(stl->stats.number_of_facets, sizeof(v_indices_struct)); + if(stl->v_indices == NULL) perror("stl_generate_shared_vertices"); + stl->v_shared = (stl_vertex*) + calloc((stl->stats.number_of_facets / 2), sizeof(stl_vertex)); + if(stl->v_shared == NULL) perror("stl_generate_shared_vertices"); + stl->stats.shared_malloced = stl->stats.number_of_facets / 2; + stl->stats.shared_vertices = 0; + + for(i = 0; i < stl->stats.number_of_facets; i++) { + stl->v_indices[i].vertex[0] = -1; + stl->v_indices[i].vertex[1] = -1; + stl->v_indices[i].vertex[2] = -1; + } + + + for(i = 0; i < stl->stats.number_of_facets; i++) { + first_facet = i; + for(j = 0; j < 3; j++) { + if(stl->v_indices[i].vertex[j] != -1) { + continue; + } + if(stl->stats.shared_vertices == stl->stats.shared_malloced) { + stl->stats.shared_malloced += 1024; + stl->v_shared = (stl_vertex*)realloc(stl->v_shared, + stl->stats.shared_malloced * sizeof(stl_vertex)); + if(stl->v_shared == NULL) perror("stl_generate_shared_vertices"); + } + + stl->v_shared[stl->stats.shared_vertices] = + stl->facet_start[i].vertex[j]; + + direction = 0; + reversed = 0; + facet_num = i; + vnot = (j + 2) % 3; + + for(;;) { + if(vnot > 2) { + if(direction == 0) { + pivot_vertex = (vnot + 2) % 3; + next_edge = pivot_vertex; + direction = 1; + } else { + pivot_vertex = (vnot + 1) % 3; + next_edge = vnot % 3; + direction = 0; + } + } else { + if(direction == 0) { + pivot_vertex = (vnot + 1) % 3; + next_edge = vnot; + } else { + pivot_vertex = (vnot + 2) % 3; + next_edge = pivot_vertex; + } + } + stl->v_indices[facet_num].vertex[pivot_vertex] = + stl->stats.shared_vertices; + + next_facet = stl->neighbors_start[facet_num].neighbor[next_edge]; + if(next_facet == -1) { + if(reversed) { + break; + } else { + direction = 1; + vnot = (j + 1) % 3; + reversed = 1; + facet_num = first_facet; + } + } else if(next_facet != first_facet) { + vnot = stl->neighbors_start[facet_num]. + which_vertex_not[next_edge]; + facet_num = next_facet; + } else { + break; + } + } + stl->stats.shared_vertices += 1; + } + } +} + +void +stl_write_off(stl_file *stl, char *file) { + int i; + FILE *fp; + char *error_msg; + + if (stl->error) return; + + /* Open the file */ + fp = fopen(file, "w"); + if(fp == NULL) { + error_msg = (char*) + malloc(81 + strlen(file)); /* Allow 80 chars+file size for message */ + sprintf(error_msg, "stl_write_ascii: Couldn't open %s for writing", + file); + perror(error_msg); + free(error_msg); + stl->error = 1; + return; + } + + fprintf(fp, "OFF\n"); + fprintf(fp, "%d %d 0\n", + stl->stats.shared_vertices, stl->stats.number_of_facets); + + for(i = 0; i < stl->stats.shared_vertices; i++) { + fprintf(fp, "\t%f %f %f\n", + stl->v_shared[i].x, stl->v_shared[i].y, stl->v_shared[i].z); + } + for(i = 0; i < stl->stats.number_of_facets; i++) { + fprintf(fp, "\t3 %d %d %d\n", stl->v_indices[i].vertex[0], + stl->v_indices[i].vertex[1], stl->v_indices[i].vertex[2]); + } + fclose(fp); +} + +void +stl_write_vrml(stl_file *stl, char *file) { + int i; + FILE *fp; + char *error_msg; + + if (stl->error) return; + + /* Open the file */ + fp = fopen(file, "w"); + if(fp == NULL) { + error_msg = (char*) + malloc(81 + strlen(file)); /* Allow 80 chars+file size for message */ + sprintf(error_msg, "stl_write_ascii: Couldn't open %s for writing", + file); + perror(error_msg); + free(error_msg); + stl->error = 1; + return; + } + + fprintf(fp, "#VRML V1.0 ascii\n\n"); + fprintf(fp, "Separator {\n"); + fprintf(fp, "\tDEF STLShape ShapeHints {\n"); + fprintf(fp, "\t\tvertexOrdering COUNTERCLOCKWISE\n"); + fprintf(fp, "\t\tfaceType CONVEX\n"); + fprintf(fp, "\t\tshapeType SOLID\n"); + fprintf(fp, "\t\tcreaseAngle 0.0\n"); + fprintf(fp, "\t}\n"); + fprintf(fp, "\tDEF STLModel Separator {\n"); + fprintf(fp, "\t\tDEF STLColor Material {\n"); + fprintf(fp, "\t\t\temissiveColor 0.700000 0.700000 0.000000\n"); + fprintf(fp, "\t\t}\n"); + fprintf(fp, "\t\tDEF STLVertices Coordinate3 {\n"); + fprintf(fp, "\t\t\tpoint [\n"); + + for(i = 0; i < (stl->stats.shared_vertices - 1); i++) { + fprintf(fp, "\t\t\t\t%f %f %f,\n", + stl->v_shared[i].x, stl->v_shared[i].y, stl->v_shared[i].z); + } + fprintf(fp, "\t\t\t\t%f %f %f]\n", + stl->v_shared[i].x, stl->v_shared[i].y, stl->v_shared[i].z); + fprintf(fp, "\t\t}\n"); + fprintf(fp, "\t\tDEF STLTriangles IndexedFaceSet {\n"); + fprintf(fp, "\t\t\tcoordIndex [\n"); + + for(i = 0; i < (stl->stats.number_of_facets - 1); i++) { + fprintf(fp, "\t\t\t\t%d, %d, %d, -1,\n", stl->v_indices[i].vertex[0], + stl->v_indices[i].vertex[1], stl->v_indices[i].vertex[2]); + } + fprintf(fp, "\t\t\t\t%d, %d, %d, -1]\n", stl->v_indices[i].vertex[0], + stl->v_indices[i].vertex[1], stl->v_indices[i].vertex[2]); + fprintf(fp, "\t\t}\n"); + fprintf(fp, "\t}\n"); + fprintf(fp, "}\n"); + fclose(fp); +} + +void stl_write_obj (stl_file *stl, char *file) { + int i; + FILE* fp; + + if (stl->error) return; + + /* Open the file */ + fp = fopen(file, "w"); + if (fp == NULL) { + char* error_msg = (char*)malloc(81 + strlen(file)); /* Allow 80 chars+file size for message */ + sprintf(error_msg, "stl_write_ascii: Couldn't open %s for writing", file); + perror(error_msg); + free(error_msg); + stl->error = 1; + return; + } + + for (i = 0; i < stl->stats.shared_vertices; i++) { + fprintf(fp, "v %f %f %f\n", stl->v_shared[i].x, stl->v_shared[i].y, stl->v_shared[i].z); + } + for (i = 0; i < stl->stats.number_of_facets; i++) { + fprintf(fp, "f %d %d %d\n", stl->v_indices[i].vertex[0]+1, stl->v_indices[i].vertex[1]+1, stl->v_indices[i].vertex[2]+1); + } + + fclose(fp); +} diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/shared.lo b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/shared.lo new file mode 100644 index 00000000..7b5f19e7 --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/shared.lo @@ -0,0 +1,12 @@ +# src/shared.lo - a libtool object file +# Generated by libtool (GNU libtool) 2.4.6 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/shared.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/stl.h b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/stl.h new file mode 100644 index 00000000..25fe770a --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/stl.h @@ -0,0 +1,201 @@ +/* ADMesh -- process triangulated solid meshes + * Copyright (C) 1995, 1996 Anthony D. Martin + * Copyright (C) 2013, 2014 several contributors, see AUTHORS + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Questions, comments, suggestions, etc to + * https://github.com/admesh/admesh/issues + */ + +#ifndef __admesh_stl__ +#define __admesh_stl__ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define STL_MAX(A,B) ((A)>(B)? (A):(B)) +#define STL_MIN(A,B) ((A)<(B)? (A):(B)) +#define ABS(X) ((X) < 0 ? -(X) : (X)) + +#define LABEL_SIZE 80 +#define NUM_FACET_SIZE 4 +#define HEADER_SIZE 84 +#define STL_MIN_FILE_SIZE 284 +#define ASCII_LINES_PER_FACET 7 +#define SIZEOF_EDGE_SORT 24 + +typedef struct { + float x; + float y; + float z; +} stl_vertex; + +typedef struct { + float x; + float y; + float z; +} stl_normal; + +typedef char stl_extra[2]; + +typedef struct { + stl_normal normal; + stl_vertex vertex[3]; + stl_extra extra; +} stl_facet; +#define SIZEOF_STL_FACET 50 + +typedef enum {binary, ascii, inmemory} stl_type; + +typedef struct { + stl_vertex p1; + stl_vertex p2; + int facet_number; +} stl_edge; + +typedef struct stl_hash_edge { + unsigned key[6]; + int facet_number; + int which_edge; + struct stl_hash_edge *next; +} stl_hash_edge; + +typedef struct { + int neighbor[3]; + char which_vertex_not[3]; +} stl_neighbors; + +typedef struct { + int vertex[3]; +} v_indices_struct; + +typedef struct { + char header[81]; + stl_type type; + int number_of_facets; + stl_vertex max; + stl_vertex min; + stl_vertex size; + float bounding_diameter; + float shortest_edge; + float volume; + unsigned number_of_blocks; + int connected_edges; + int connected_facets_1_edge; + int connected_facets_2_edge; + int connected_facets_3_edge; + int facets_w_1_bad_edge; + int facets_w_2_bad_edge; + int facets_w_3_bad_edge; + int original_num_facets; + int edges_fixed; + int degenerate_facets; + int facets_removed; + int facets_added; + int facets_reversed; + int backwards_edges; + int normals_fixed; + int number_of_parts; + int malloced; + int freed; + int facets_malloced; + int collisions; + int shared_vertices; + int shared_malloced; +} stl_stats; + +typedef struct { + FILE *fp; + stl_facet *facet_start; + stl_edge *edge_start; + stl_hash_edge **heads; + stl_hash_edge *tail; + int M; + stl_neighbors *neighbors_start; + v_indices_struct *v_indices; + stl_vertex *v_shared; + stl_stats stats; + char error; +} stl_file; + + +extern void stl_open(stl_file *stl, char *file); +extern void stl_close(stl_file *stl); +extern void stl_stats_out(stl_file *stl, FILE *file, char *input_file); +extern void stl_print_edges(stl_file *stl, FILE *file); +extern void stl_print_neighbors(stl_file *stl, char *file); +extern void stl_put_little_int(FILE *fp, int value_in); +extern void stl_put_little_float(FILE *fp, float value_in); +extern void stl_write_ascii(stl_file *stl, const char *file, const char *label); +extern void stl_write_binary(stl_file *stl, const char *file, const char *label); +extern void stl_write_binary_block(stl_file *stl, FILE *fp); +extern void stl_check_facets_exact(stl_file *stl); +extern void stl_check_facets_nearby(stl_file *stl, float tolerance); +extern void stl_remove_unconnected_facets(stl_file *stl); +extern void stl_write_vertex(stl_file *stl, int facet, int vertex); +extern void stl_write_facet(stl_file *stl, char *label, int facet); +extern void stl_write_edge(stl_file *stl, char *label, stl_hash_edge edge); +extern void stl_write_neighbor(stl_file *stl, int facet); +extern void stl_write_quad_object(stl_file *stl, char *file); +extern void stl_verify_neighbors(stl_file *stl); +extern void stl_fill_holes(stl_file *stl); +extern void stl_fix_normal_directions(stl_file *stl); +extern void stl_fix_normal_values(stl_file *stl); +extern void stl_reverse_all_facets(stl_file *stl); +extern void stl_translate(stl_file *stl, float x, float y, float z); +extern void stl_translate_relative(stl_file *stl, float x, float y, float z); +extern void stl_scale_versor(stl_file *stl, float versor[3]); +extern void stl_scale(stl_file *stl, float factor); +extern void stl_rotate_x(stl_file *stl, float angle); +extern void stl_rotate_y(stl_file *stl, float angle); +extern void stl_rotate_z(stl_file *stl, float angle); +extern void stl_mirror_xy(stl_file *stl); +extern void stl_mirror_yz(stl_file *stl); +extern void stl_mirror_xz(stl_file *stl); +extern void stl_open_merge(stl_file *stl, char *file); +extern void stl_invalidate_shared_vertices(stl_file *stl); +extern void stl_generate_shared_vertices(stl_file *stl); +extern void stl_write_obj(stl_file *stl, char *file); +extern void stl_write_off(stl_file *stl, char *file); +extern void stl_write_dxf(stl_file *stl, char *file, char *label); +extern void stl_write_vrml(stl_file *stl, char *file); +extern void stl_calculate_normal(float normal[], stl_facet *facet); +extern void stl_normalize_vector(float v[]); +extern void stl_calculate_volume(stl_file *stl); + +extern void stl_repair(stl_file *stl, int fixall_flag, int exact_flag, int tolerance_flag, float tolerance, int increment_flag, float increment, int nearby_flag, int iterations, int remove_unconnected_flag, int fill_holes_flag, int normal_directions_flag, int normal_values_flag, int reverse_all_flag, int verbose_flag); + +extern void stl_initialize(stl_file *stl); +extern void stl_count_facets(stl_file *stl, char *file); +extern void stl_allocate(stl_file *stl); +extern void stl_read(stl_file *stl, int first_facet, int first); +extern void stl_facet_stats(stl_file *stl, stl_facet facet, int first); +extern void stl_reallocate(stl_file *stl); +extern void stl_add_facet(stl_file *stl, stl_facet *new_facet); +extern void stl_get_size(stl_file *stl); + +extern void stl_clear_error(stl_file *stl); +extern int stl_get_error(stl_file *stl); +extern void stl_exit_on_error(stl_file *stl); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/stl_io.c b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/stl_io.c new file mode 100644 index 00000000..e015cee9 --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/stl_io.c @@ -0,0 +1,479 @@ +/* ADMesh -- process triangulated solid meshes + * Copyright (C) 1995, 1996 Anthony D. Martin + * Copyright (C) 2013, 2014 several contributors, see AUTHORS + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Questions, comments, suggestions, etc to + * https://github.com/admesh/admesh/issues + */ + +#include +#include +#include "stl.h" +#include "config.h" + +#if !defined(SEEK_SET) +#define SEEK_SET 0 +#define SEEK_CUR 1 +#define SEEK_END 2 +#endif + +void +stl_print_edges(stl_file *stl, FILE *file) { + int i; + int edges_allocated; + + if (stl->error) return; + + edges_allocated = stl->stats.number_of_facets * 3; + for(i = 0; i < edges_allocated; i++) { + fprintf(file, "%d, %f, %f, %f, %f, %f, %f\n", + stl->edge_start[i].facet_number, + stl->edge_start[i].p1.x, stl->edge_start[i].p1.y, + stl->edge_start[i].p1.z, stl->edge_start[i].p2.x, + stl->edge_start[i].p2.y, stl->edge_start[i].p2.z); + } +} + + +void +stl_stats_out(stl_file *stl, FILE *file, char *input_file) { + if (stl->error) return; + + /* this is here for Slic3r, without our config.h + it won't use this part of the code anyway */ +#ifndef VERSION +#define VERSION "unknown" +#endif + fprintf(file, "\n\ +================= Results produced by ADMesh version " VERSION " ================\n"); + fprintf(file, "\ +Input file : %s\n", input_file); + if(stl->stats.type == binary) { + fprintf(file, "\ +File type : Binary STL file\n"); + } else { + fprintf(file, "\ +File type : ASCII STL file\n"); + } + fprintf(file, "\ +Header : %s\n", stl->stats.header); + fprintf(file, "============== Size ==============\n"); + fprintf(file, "Min X = % f, Max X = % f\n", + stl->stats.min.x, stl->stats.max.x); + fprintf(file, "Min Y = % f, Max Y = % f\n", + stl->stats.min.y, stl->stats.max.y); + fprintf(file, "Min Z = % f, Max Z = % f\n", + stl->stats.min.z, stl->stats.max.z); + + fprintf(file, "\ +========= Facet Status ========== Original ============ Final ====\n"); + fprintf(file, "\ +Number of facets : %5d %5d\n", + stl->stats.original_num_facets, stl->stats.number_of_facets); + fprintf(file, "\ +Facets with 1 disconnected edge : %5d %5d\n", + stl->stats.facets_w_1_bad_edge, stl->stats.connected_facets_2_edge - + stl->stats.connected_facets_3_edge); + fprintf(file, "\ +Facets with 2 disconnected edges : %5d %5d\n", + stl->stats.facets_w_2_bad_edge, stl->stats.connected_facets_1_edge - + stl->stats.connected_facets_2_edge); + fprintf(file, "\ +Facets with 3 disconnected edges : %5d %5d\n", + stl->stats.facets_w_3_bad_edge, stl->stats.number_of_facets - + stl->stats.connected_facets_1_edge); + fprintf(file, "\ +Total disconnected facets : %5d %5d\n", + stl->stats.facets_w_1_bad_edge + stl->stats.facets_w_2_bad_edge + + stl->stats.facets_w_3_bad_edge, stl->stats.number_of_facets - + stl->stats.connected_facets_3_edge); + + fprintf(file, + "=== Processing Statistics === ===== Other Statistics =====\n"); + fprintf(file, "\ +Number of parts : %5d Volume : % f\n", + stl->stats.number_of_parts, stl->stats.volume); + fprintf(file, "\ +Degenerate facets : %5d\n", stl->stats.degenerate_facets); + fprintf(file, "\ +Edges fixed : %5d\n", stl->stats.edges_fixed); + fprintf(file, "\ +Facets removed : %5d\n", stl->stats.facets_removed); + fprintf(file, "\ +Facets added : %5d\n", stl->stats.facets_added); + fprintf(file, "\ +Facets reversed : %5d\n", stl->stats.facets_reversed); + fprintf(file, "\ +Backwards edges : %5d\n", stl->stats.backwards_edges); + fprintf(file, "\ +Normals fixed : %5d\n", stl->stats.normals_fixed); +} + +void +stl_write_ascii(stl_file *stl, const char *file, const char *label) { + int i; + FILE *fp; + char *error_msg; + + if (stl->error) return; + + /* Open the file */ + fp = fopen(file, "w"); + if(fp == NULL) { + error_msg = (char*) + malloc(81 + strlen(file)); /* Allow 80 chars+file size for message */ + sprintf(error_msg, "stl_write_ascii: Couldn't open %s for writing", + file); + perror(error_msg); + free(error_msg); + stl->error = 1; + return; + } + + fprintf(fp, "solid %s\n", label); + + for(i = 0; i < stl->stats.number_of_facets; i++) { + fprintf(fp, " facet normal % .8E % .8E % .8E\n", + stl->facet_start[i].normal.x, stl->facet_start[i].normal.y, + stl->facet_start[i].normal.z); + fprintf(fp, " outer loop\n"); + fprintf(fp, " vertex % .8E % .8E % .8E\n", + stl->facet_start[i].vertex[0].x, stl->facet_start[i].vertex[0].y, + stl->facet_start[i].vertex[0].z); + fprintf(fp, " vertex % .8E % .8E % .8E\n", + stl->facet_start[i].vertex[1].x, stl->facet_start[i].vertex[1].y, + stl->facet_start[i].vertex[1].z); + fprintf(fp, " vertex % .8E % .8E % .8E\n", + stl->facet_start[i].vertex[2].x, stl->facet_start[i].vertex[2].y, + stl->facet_start[i].vertex[2].z); + fprintf(fp, " endloop\n"); + fprintf(fp, " endfacet\n"); + } + + fprintf(fp, "endsolid %s\n", label); + + fclose(fp); +} + +void +stl_print_neighbors(stl_file *stl, char *file) { + int i; + FILE *fp; + char *error_msg; + + if (stl->error) return; + + /* Open the file */ + fp = fopen(file, "w"); + if(fp == NULL) { + error_msg = (char*) + malloc(81 + strlen(file)); /* Allow 80 chars+file size for message */ + sprintf(error_msg, "stl_print_neighbors: Couldn't open %s for writing", + file); + perror(error_msg); + free(error_msg); + stl->error = 1; + return; + } + + for(i = 0; i < stl->stats.number_of_facets; i++) { + fprintf(fp, "%d, %d,%d, %d,%d, %d,%d\n", + i, + stl->neighbors_start[i].neighbor[0], + (int)stl->neighbors_start[i].which_vertex_not[0], + stl->neighbors_start[i].neighbor[1], + (int)stl->neighbors_start[i].which_vertex_not[1], + stl->neighbors_start[i].neighbor[2], + (int)stl->neighbors_start[i].which_vertex_not[2]); + } + fclose(fp); +} + +void +stl_put_little_int(FILE *fp, int value_in) { + int new_value; + union { + int int_value; + char char_value[4]; + } value; + + value.int_value = value_in; + + new_value = value.char_value[0] & 0xFF; + new_value |= (value.char_value[1] & 0xFF) << 0x08; + new_value |= (value.char_value[2] & 0xFF) << 0x10; + new_value |= (value.char_value[3] & 0xFF) << 0x18; + fwrite(&new_value, sizeof(int), 1, fp); +} + +void +stl_put_little_float(FILE *fp, float value_in) { + int new_value; + union { + float float_value; + char char_value[4]; + } value; + + value.float_value = value_in; + + new_value = value.char_value[0] & 0xFF; + new_value |= (value.char_value[1] & 0xFF) << 0x08; + new_value |= (value.char_value[2] & 0xFF) << 0x10; + new_value |= (value.char_value[3] & 0xFF) << 0x18; + fwrite(&new_value, sizeof(int), 1, fp); +} + +void +stl_write_binary_block(stl_file *stl, FILE *fp) +{ + int i; + for(i = 0; i < stl->stats.number_of_facets; i++) + { + stl_put_little_float(fp, stl->facet_start[i].normal.x); + stl_put_little_float(fp, stl->facet_start[i].normal.y); + stl_put_little_float(fp, stl->facet_start[i].normal.z); + stl_put_little_float(fp, stl->facet_start[i].vertex[0].x); + stl_put_little_float(fp, stl->facet_start[i].vertex[0].y); + stl_put_little_float(fp, stl->facet_start[i].vertex[0].z); + stl_put_little_float(fp, stl->facet_start[i].vertex[1].x); + stl_put_little_float(fp, stl->facet_start[i].vertex[1].y); + stl_put_little_float(fp, stl->facet_start[i].vertex[1].z); + stl_put_little_float(fp, stl->facet_start[i].vertex[2].x); + stl_put_little_float(fp, stl->facet_start[i].vertex[2].y); + stl_put_little_float(fp, stl->facet_start[i].vertex[2].z); + fputc(stl->facet_start[i].extra[0], fp); + fputc(stl->facet_start[i].extra[1], fp); + } +} + +void +stl_write_binary(stl_file *stl, const char *file, const char *label) { + FILE *fp; + int i; + char *error_msg; + + if (stl->error) return; + + /* Open the file */ + fp = fopen(file, "wb"); + if(fp == NULL) { + error_msg = (char*) + malloc(81 + strlen(file)); /* Allow 80 chars+file size for message */ + sprintf(error_msg, "stl_write_binary: Couldn't open %s for writing", + file); + perror(error_msg); + free(error_msg); + stl->error = 1; + return; + } + + fprintf(fp, "%s", label); + for(i = strlen(label); i < LABEL_SIZE; i++) putc(0, fp); + + fseek(fp, LABEL_SIZE, SEEK_SET); + + stl_put_little_int(fp, stl->stats.number_of_facets); + + stl_write_binary_block(stl, fp); + + fclose(fp); +} + +void +stl_write_vertex(stl_file *stl, int facet, int vertex) { + if (stl->error) return; + printf(" vertex %d/%d % .8E % .8E % .8E\n", vertex, facet, + stl->facet_start[facet].vertex[vertex].x, + stl->facet_start[facet].vertex[vertex].y, + stl->facet_start[facet].vertex[vertex].z); +} + +void +stl_write_facet(stl_file *stl, char *label, int facet) { + if (stl->error) return; + printf("facet (%d)/ %s\n", facet, label); + stl_write_vertex(stl, facet, 0); + stl_write_vertex(stl, facet, 1); + stl_write_vertex(stl, facet, 2); +} + +void +stl_write_edge(stl_file *stl, char *label, stl_hash_edge edge) { + if (stl->error) return; + printf("edge (%d)/(%d) %s\n", edge.facet_number, edge.which_edge, label); + if(edge.which_edge < 3) { + stl_write_vertex(stl, edge.facet_number, edge.which_edge % 3); + stl_write_vertex(stl, edge.facet_number, (edge.which_edge + 1) % 3); + } else { + stl_write_vertex(stl, edge.facet_number, (edge.which_edge + 1) % 3); + stl_write_vertex(stl, edge.facet_number, edge.which_edge % 3); + } +} + +void +stl_write_neighbor(stl_file *stl, int facet) { + if (stl->error) return; + printf("Neighbors %d: %d, %d, %d ; %d, %d, %d\n", facet, + stl->neighbors_start[facet].neighbor[0], + stl->neighbors_start[facet].neighbor[1], + stl->neighbors_start[facet].neighbor[2], + stl->neighbors_start[facet].which_vertex_not[0], + stl->neighbors_start[facet].which_vertex_not[1], + stl->neighbors_start[facet].which_vertex_not[2]); +} + +void +stl_write_quad_object(stl_file *stl, char *file) { + FILE *fp; + int i; + int j; + char *error_msg; + stl_vertex connect_color; + stl_vertex uncon_1_color; + stl_vertex uncon_2_color; + stl_vertex uncon_3_color; + stl_vertex color; + + if (stl->error) return; + + /* Open the file */ + fp = fopen(file, "w"); + if(fp == NULL) { + error_msg = (char*) + malloc(81 + strlen(file)); /* Allow 80 chars+file size for message */ + sprintf(error_msg, "stl_write_quad_object: Couldn't open %s for writing", + file); + perror(error_msg); + free(error_msg); + stl->error = 1; + return; + } + + connect_color.x = 0.0; + connect_color.y = 0.0; + connect_color.z = 1.0; + uncon_1_color.x = 0.0; + uncon_1_color.y = 1.0; + uncon_1_color.z = 0.0; + uncon_2_color.x = 1.0; + uncon_2_color.y = 1.0; + uncon_2_color.z = 1.0; + uncon_3_color.x = 1.0; + uncon_3_color.y = 0.0; + uncon_3_color.z = 0.0; + + fprintf(fp, "CQUAD\n"); + for(i = 0; i < stl->stats.number_of_facets; i++) { + j = ((stl->neighbors_start[i].neighbor[0] == -1) + + (stl->neighbors_start[i].neighbor[1] == -1) + + (stl->neighbors_start[i].neighbor[2] == -1)); + if(j == 0) { + color = connect_color; + } else if(j == 1) { + color = uncon_1_color; + } else if(j == 2) { + color = uncon_2_color; + } else { + color = uncon_3_color; + } + fprintf(fp, "%f %f %f %1.1f %1.1f %1.1f 1\n", + stl->facet_start[i].vertex[0].x, + stl->facet_start[i].vertex[0].y, + stl->facet_start[i].vertex[0].z, color.x, color.y, color.z); + fprintf(fp, "%f %f %f %1.1f %1.1f %1.1f 1\n", + stl->facet_start[i].vertex[1].x, + stl->facet_start[i].vertex[1].y, + stl->facet_start[i].vertex[1].z, color.x, color.y, color.z); + fprintf(fp, "%f %f %f %1.1f %1.1f %1.1f 1\n", + stl->facet_start[i].vertex[2].x, + stl->facet_start[i].vertex[2].y, + stl->facet_start[i].vertex[2].z, color.x, color.y, color.z); + fprintf(fp, "%f %f %f %1.1f %1.1f %1.1f 1\n", + stl->facet_start[i].vertex[2].x, + stl->facet_start[i].vertex[2].y, + stl->facet_start[i].vertex[2].z, color.x, color.y, color.z); + } + fclose(fp); +} + +void +stl_write_dxf(stl_file *stl, char *file, char *label) { + int i; + FILE *fp; + char *error_msg; + + if (stl->error) return; + + /* Open the file */ + fp = fopen(file, "w"); + if(fp == NULL) { + error_msg = (char*) + malloc(81 + strlen(file)); /* Allow 80 chars+file size for message */ + sprintf(error_msg, "stl_write_ascii: Couldn't open %s for writing", + file); + perror(error_msg); + free(error_msg); + stl->error = 1; + return; + } + + fprintf(fp, "999\n%s\n", label); + fprintf(fp, "0\nSECTION\n2\nHEADER\n0\nENDSEC\n"); + fprintf(fp, "0\nSECTION\n2\nTABLES\n0\nTABLE\n2\nLAYER\n70\n1\n\ +0\nLAYER\n2\n0\n70\n0\n62\n7\n6\nCONTINUOUS\n0\nENDTAB\n0\nENDSEC\n"); + fprintf(fp, "0\nSECTION\n2\nBLOCKS\n0\nENDSEC\n"); + + fprintf(fp, "0\nSECTION\n2\nENTITIES\n"); + + for(i = 0; i < stl->stats.number_of_facets; i++) { + fprintf(fp, "0\n3DFACE\n8\n0\n"); + fprintf(fp, "10\n%f\n20\n%f\n30\n%f\n", + stl->facet_start[i].vertex[0].x, stl->facet_start[i].vertex[0].y, + stl->facet_start[i].vertex[0].z); + fprintf(fp, "11\n%f\n21\n%f\n31\n%f\n", + stl->facet_start[i].vertex[1].x, stl->facet_start[i].vertex[1].y, + stl->facet_start[i].vertex[1].z); + fprintf(fp, "12\n%f\n22\n%f\n32\n%f\n", + stl->facet_start[i].vertex[2].x, stl->facet_start[i].vertex[2].y, + stl->facet_start[i].vertex[2].z); + fprintf(fp, "13\n%f\n23\n%f\n33\n%f\n", + stl->facet_start[i].vertex[2].x, stl->facet_start[i].vertex[2].y, + stl->facet_start[i].vertex[2].z); + } + + fprintf(fp, "0\nENDSEC\n0\nEOF\n"); + + fclose(fp); +} + +void +stl_clear_error(stl_file *stl) { + stl->error = 0; +} + +void +stl_exit_on_error(stl_file *stl) { + if (!stl->error) return; + stl->error = 0; + stl_close(stl); + exit(1); +} + +int +stl_get_error(stl_file *stl) { + return stl->error; +} diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/stl_io.lo b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/stl_io.lo new file mode 100644 index 00000000..b45c6db2 --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/stl_io.lo @@ -0,0 +1,12 @@ +# src/stl_io.lo - a libtool object file +# Generated by libtool (GNU libtool) 2.4.6 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/stl_io.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/stlinit.c b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/stlinit.c new file mode 100644 index 00000000..50a13a4f --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/stlinit.c @@ -0,0 +1,404 @@ +/* ADMesh -- process triangulated solid meshes + * Copyright (C) 1995, 1996 Anthony D. Martin + * Copyright (C) 2013, 2014 several contributors, see AUTHORS + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Questions, comments, suggestions, etc to + * https://github.com/admesh/admesh/issues + */ + +#include +#include +#include +#include +#include + +#include "portable_endian.h" +#include "stl.h" + +#if !defined(SEEK_SET) +#define SEEK_SET 0 +#define SEEK_CUR 1 +#define SEEK_END 2 +#endif + +void +stl_open(stl_file *stl, char *file) { + stl_initialize(stl); + stl_count_facets(stl, file); + stl_allocate(stl); + stl_read(stl, 0, 1); + if (!stl->error) fclose(stl->fp); +} + + +void +stl_initialize(stl_file *stl) { + stl->error = 0; + stl->stats.backwards_edges = 0; + stl->stats.degenerate_facets = 0; + stl->stats.edges_fixed = 0; + stl->stats.facets_added = 0; + stl->stats.facets_removed = 0; + stl->stats.facets_reversed = 0; + stl->stats.normals_fixed = 0; + stl->stats.number_of_parts = 0; + stl->stats.original_num_facets = 0; + stl->stats.number_of_facets = 0; + stl->stats.facets_malloced = 0; + stl->stats.volume = -1.0; + + stl->neighbors_start = NULL; + stl->facet_start = NULL; + stl->v_indices = NULL; + stl->v_shared = NULL; +} + +void +stl_count_facets(stl_file *stl, char *file) { + long file_size; + uint32_t header_num_facets; + int num_facets; + int i, j; + size_t s; + unsigned char chtest[128]; + int num_lines = 1; + char *error_msg; + + if (stl->error) return; + + /* Open the file in binary mode first */ + stl->fp = fopen(file, "rb"); + if(stl->fp == NULL) { + error_msg = (char*) + malloc(81 + strlen(file)); /* Allow 80 chars+file size for message */ + sprintf(error_msg, "stl_initialize: Couldn't open %s for reading", + file); + perror(error_msg); + free(error_msg); + stl->error = 1; + return; + } + /* Find size of file */ + fseek(stl->fp, 0, SEEK_END); + file_size = ftell(stl->fp); + + /* Check for binary or ASCII file */ + fseek(stl->fp, HEADER_SIZE, SEEK_SET); + if (!fread(chtest, sizeof(chtest), 1, stl->fp)) { + perror("The input is an empty file"); + stl->error = 1; + return; + } + stl->stats.type = ascii; + for(s = 0; s < sizeof(chtest); s++) { + if(chtest[s] > 127) { + stl->stats.type = binary; + break; + } + } + rewind(stl->fp); + + /* Get the header and the number of facets in the .STL file */ + /* If the .STL file is binary, then do the following */ + if(stl->stats.type == binary) { + /* Test if the STL file has the right size */ + if(((file_size - HEADER_SIZE) % SIZEOF_STL_FACET != 0) + || (file_size < STL_MIN_FILE_SIZE)) { + fprintf(stderr, "The file %s has the wrong size.\n", file); + stl->error = 1; + return; + } + num_facets = (file_size - HEADER_SIZE) / SIZEOF_STL_FACET; + + /* Read the header */ + if (fread(stl->stats.header, LABEL_SIZE, 1, stl->fp) > 79) { + stl->stats.header[80] = '\0'; + } + + /* Read the int following the header. This should contain # of facets */ + if((!fread(&header_num_facets, sizeof(uint32_t), 1, stl->fp)) || (uint32_t)num_facets != le32toh(header_num_facets)) { + fprintf(stderr, + "Warning: File size doesn't match number of facets in the header\n"); + } + } + /* Otherwise, if the .STL file is ASCII, then do the following */ + else { + /* Reopen the file in text mode (for getting correct newlines on Windows) */ + if (freopen(file, "r", stl->fp) == NULL) { + perror("Could not reopen the file, something went wrong"); + stl->error = 1; + return; + } + + /* Find the number of facets */ + j = 0; + for(i = 0; i < file_size ; i++) { + j++; + if(getc(stl->fp) == '\n') { + if(j > 4) { /* don't count short lines */ + num_lines++; + } + j = 0; + } + } + rewind(stl->fp); + + /* Get the header */ + for(i = 0; + (i < 80) && (stl->stats.header[i] = getc(stl->fp)) != '\n'; i++); + stl->stats.header[i] = '\0'; /* Lose the '\n' */ + stl->stats.header[80] = '\0'; + + num_facets = num_lines / ASCII_LINES_PER_FACET; + } + stl->stats.number_of_facets += num_facets; + stl->stats.original_num_facets = stl->stats.number_of_facets; +} + +void +stl_allocate(stl_file *stl) { + if (stl->error) return; + + /* Allocate memory for the entire .STL file */ + stl->facet_start = (stl_facet*)calloc(stl->stats.number_of_facets, + sizeof(stl_facet)); + if(stl->facet_start == NULL) perror("stl_initialize"); + stl->stats.facets_malloced = stl->stats.number_of_facets; + + /* Allocate memory for the neighbors list */ + stl->neighbors_start = (stl_neighbors*) + calloc(stl->stats.number_of_facets, sizeof(stl_neighbors)); + if(stl->neighbors_start == NULL) perror("stl_initialize"); +} + +void +stl_open_merge(stl_file *stl, char *file_to_merge) { + int num_facets_so_far; + stl_type origStlType; + FILE *origFp; + stl_file stl_to_merge; + + if (stl->error) return; + + /* Record how many facets we have so far from the first file. We will start putting + facets in the next position. Since we're 0-indexed, it'l be the same position. */ + num_facets_so_far = stl->stats.number_of_facets; + + /* Record the file type we started with: */ + origStlType=stl->stats.type; + /* Record the file pointer too: */ + origFp=stl->fp; + + /* Initialize the sturucture with zero stats, header info and sizes: */ + stl_initialize(&stl_to_merge); + stl_count_facets(&stl_to_merge, file_to_merge); + + /* Copy what we need to into stl so that we can read the file_to_merge directly into it + using stl_read: Save the rest of the valuable info: */ + stl->stats.type=stl_to_merge.stats.type; + stl->fp=stl_to_merge.fp; + + /* Add the number of facets we already have in stl with what we we found in stl_to_merge but + haven't read yet. */ + stl->stats.number_of_facets=num_facets_so_far+stl_to_merge.stats.number_of_facets; + + /* Allocate enough room for stl->stats.number_of_facets facets and neighbors: */ + stl_reallocate(stl); + + /* Read the file to merge directly into stl, adding it to what we have already. + Start at num_facets_so_far, the index to the first unused facet. Also say + that this isn't our first time so we should augment stats like min and max + instead of erasing them. */ + stl_read(stl, num_facets_so_far, 0); + + /* Restore the stl information we overwrote (for stl_read) so that it still accurately + reflects the subject part: */ + stl->stats.type=origStlType; + stl->fp=origFp; +} + +extern void +stl_reallocate(stl_file *stl) { + if (stl->error) return; + /* Reallocate more memory for the .STL file(s) */ + stl->facet_start = (stl_facet*)realloc(stl->facet_start, stl->stats.number_of_facets * + sizeof(stl_facet)); + if(stl->facet_start == NULL) perror("stl_initialize"); + stl->stats.facets_malloced = stl->stats.number_of_facets; + + /* Reallocate more memory for the neighbors list */ + stl->neighbors_start = (stl_neighbors*) + realloc(stl->neighbors_start, stl->stats.number_of_facets * + sizeof(stl_neighbors)); + if(stl->facet_start == NULL) perror("stl_initialize"); +} + + +/* Reads the contents of the file pointed to by stl->fp into the stl structure, + starting at facet first_facet. The second argument says if it's our first + time running this for the stl and therefore we should reset our max and min stats. */ +void +stl_read(stl_file *stl, int first_facet, int first) { + stl_facet facet; + int i, j; + const int facet_float_length = 12; + float *facet_floats[12]; + char facet_buffer[12 * sizeof(float)]; + uint32_t endianswap_buffer; /* for byteswapping operations */ + + facet.extra[0] = 0; + facet.extra[1] = 0; + + facet_floats[0] = &facet.normal.x; + facet_floats[1] = &facet.normal.y; + facet_floats[2] = &facet.normal.z; + facet_floats[3] = &facet.vertex[0].x; + facet_floats[4] = &facet.vertex[0].y; + facet_floats[5] = &facet.vertex[0].z; + facet_floats[6] = &facet.vertex[1].x; + facet_floats[7] = &facet.vertex[1].y; + facet_floats[8] = &facet.vertex[1].z; + facet_floats[9] = &facet.vertex[2].x; + facet_floats[10] = &facet.vertex[2].y; + facet_floats[11] = &facet.vertex[2].z; + + if (stl->error) return; + + if(stl->stats.type == binary) { + fseek(stl->fp, HEADER_SIZE, SEEK_SET); + } else { + rewind(stl->fp); + /* Skip the first line of the file */ + while(getc(stl->fp) != '\n'); + } + + for(i = first_facet; i < stl->stats.number_of_facets; i++) { + if(stl->stats.type == binary) + /* Read a single facet from a binary .STL file */ + { + if(fread(facet_buffer, sizeof(facet_buffer), 1, stl->fp) + + fread(&facet.extra, sizeof(char), 2, stl->fp) != 3) { + perror("Cannot read facet"); + stl->error = 1; + return; + } + + for(j = 0; j < facet_float_length; j++) { + /* convert LE float to host byte order */ + memcpy(&endianswap_buffer, facet_buffer + j * sizeof(float), 4); + endianswap_buffer = le32toh(endianswap_buffer); + memcpy(facet_floats[j], &endianswap_buffer, 4); + } + } else + /* Read a single facet from an ASCII .STL file */ + { + if((fscanf(stl->fp, "%*s %*s %f %f %f\n", &facet.normal.x, &facet.normal.y, &facet.normal.z) + \ + fscanf(stl->fp, "%*s %*s") + \ + fscanf(stl->fp, "%*s %f %f %f\n", &facet.vertex[0].x, &facet.vertex[0].y, &facet.vertex[0].z) + \ + fscanf(stl->fp, "%*s %f %f %f\n", &facet.vertex[1].x, &facet.vertex[1].y, &facet.vertex[1].z) + \ + fscanf(stl->fp, "%*s %f %f %f\n", &facet.vertex[2].x, &facet.vertex[2].y, &facet.vertex[2].z) + \ + fscanf(stl->fp, "%*s") + \ + fscanf(stl->fp, "%*s")) != 12) { + perror("Something is syntactically very wrong with this ASCII STL!"); + stl->error = 1; + return; + } + } + /* Write the facet into memory. */ + stl->facet_start[i] = facet; + + stl_facet_stats(stl, facet, first); + first = 0; + } + stl->stats.size.x = stl->stats.max.x - stl->stats.min.x; + stl->stats.size.y = stl->stats.max.y - stl->stats.min.y; + stl->stats.size.z = stl->stats.max.z - stl->stats.min.z; + stl->stats.bounding_diameter = sqrt( + stl->stats.size.x * stl->stats.size.x + + stl->stats.size.y * stl->stats.size.y + + stl->stats.size.z * stl->stats.size.z + ); +} + +void +stl_facet_stats(stl_file *stl, stl_facet facet, int first) { + float diff_x; + float diff_y; + float diff_z; + float max_diff; + + if (stl->error) return; + + /* while we are going through all of the facets, let's find the */ + /* maximum and minimum values for x, y, and z */ + + /* Initialize the max and min values the first time through*/ + if (first) { + stl->stats.max.x = facet.vertex[0].x; + stl->stats.min.x = facet.vertex[0].x; + stl->stats.max.y = facet.vertex[0].y; + stl->stats.min.y = facet.vertex[0].y; + stl->stats.max.z = facet.vertex[0].z; + stl->stats.min.z = facet.vertex[0].z; + + diff_x = ABS(facet.vertex[0].x - facet.vertex[1].x); + diff_y = ABS(facet.vertex[0].y - facet.vertex[1].y); + diff_z = ABS(facet.vertex[0].z - facet.vertex[1].z); + max_diff = STL_MAX(diff_x, diff_y); + max_diff = STL_MAX(diff_z, max_diff); + stl->stats.shortest_edge = max_diff; + + first = 0; + } + + /* now find the max and min values */ + stl->stats.max.x = STL_MAX(stl->stats.max.x, facet.vertex[0].x); + stl->stats.min.x = STL_MIN(stl->stats.min.x, facet.vertex[0].x); + stl->stats.max.y = STL_MAX(stl->stats.max.y, facet.vertex[0].y); + stl->stats.min.y = STL_MIN(stl->stats.min.y, facet.vertex[0].y); + stl->stats.max.z = STL_MAX(stl->stats.max.z, facet.vertex[0].z); + stl->stats.min.z = STL_MIN(stl->stats.min.z, facet.vertex[0].z); + + stl->stats.max.x = STL_MAX(stl->stats.max.x, facet.vertex[1].x); + stl->stats.min.x = STL_MIN(stl->stats.min.x, facet.vertex[1].x); + stl->stats.max.y = STL_MAX(stl->stats.max.y, facet.vertex[1].y); + stl->stats.min.y = STL_MIN(stl->stats.min.y, facet.vertex[1].y); + stl->stats.max.z = STL_MAX(stl->stats.max.z, facet.vertex[1].z); + stl->stats.min.z = STL_MIN(stl->stats.min.z, facet.vertex[1].z); + + stl->stats.max.x = STL_MAX(stl->stats.max.x, facet.vertex[2].x); + stl->stats.min.x = STL_MIN(stl->stats.min.x, facet.vertex[2].x); + stl->stats.max.y = STL_MAX(stl->stats.max.y, facet.vertex[2].y); + stl->stats.min.y = STL_MIN(stl->stats.min.y, facet.vertex[2].y); + stl->stats.max.z = STL_MAX(stl->stats.max.z, facet.vertex[2].z); + stl->stats.min.z = STL_MIN(stl->stats.min.z, facet.vertex[2].z); +} + +void +stl_close(stl_file *stl) { + if (stl->error) return; + + if(stl->neighbors_start != NULL) + free(stl->neighbors_start); + if(stl->facet_start != NULL) + free(stl->facet_start); + if(stl->v_indices != NULL) + free(stl->v_indices); + if(stl->v_shared != NULL) + free(stl->v_shared); +} + diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/stlinit.lo b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/stlinit.lo new file mode 100644 index 00000000..dfffbb0c --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/stlinit.lo @@ -0,0 +1,12 @@ +# src/stlinit.lo - a libtool object file +# Generated by libtool (GNU libtool) 2.4.6 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/stlinit.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/util.c b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/util.c new file mode 100644 index 00000000..69700c99 --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/util.c @@ -0,0 +1,557 @@ +/* ADMesh -- process triangulated solid meshes + * Copyright (C) 1995, 1996 Anthony D. Martin + * Copyright (C) 2013, 2014 several contributors, see AUTHORS + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Questions, comments, suggestions, etc to + * https://github.com/admesh/admesh/issues + */ + +#include +#include +#include +#include + +#include "stl.h" + +static void stl_rotate(float *x, float *y, float angle); +static float get_area(stl_facet *facet); +static float get_volume(stl_file *stl); + + +void +stl_verify_neighbors(stl_file *stl) { + int i; + int j; + stl_edge edge_a; + stl_edge edge_b; + int neighbor; + int vnot; + + if (stl->error) return; + + stl->stats.backwards_edges = 0; + + for(i = 0; i < stl->stats.number_of_facets; i++) { + for(j = 0; j < 3; j++) { + edge_a.p1 = stl->facet_start[i].vertex[j]; + edge_a.p2 = stl->facet_start[i].vertex[(j + 1) % 3]; + neighbor = stl->neighbors_start[i].neighbor[j]; + vnot = stl->neighbors_start[i].which_vertex_not[j]; + + if(neighbor == -1) + continue; /* this edge has no neighbor... Continue. */ + if(vnot < 3) { + edge_b.p1 = stl->facet_start[neighbor].vertex[(vnot + 2) % 3]; + edge_b.p2 = stl->facet_start[neighbor].vertex[(vnot + 1) % 3]; + } else { + stl->stats.backwards_edges += 1; + edge_b.p1 = stl->facet_start[neighbor].vertex[(vnot + 1) % 3]; + edge_b.p2 = stl->facet_start[neighbor].vertex[(vnot + 2) % 3]; + } + if(memcmp(&edge_a, &edge_b, SIZEOF_EDGE_SORT) != 0) { + /* These edges should match but they don't. Print results. */ + printf("edge %d of facet %d doesn't match edge %d of facet %d\n", + j, i, vnot + 1, neighbor); + stl_write_facet(stl, (char*)"first facet", i); + stl_write_facet(stl, (char*)"second facet", neighbor); + } + } + } +} + +void +stl_translate(stl_file *stl, float x, float y, float z) { + int i; + int j; + + if (stl->error) return; + + for(i = 0; i < stl->stats.number_of_facets; i++) { + for(j = 0; j < 3; j++) { + stl->facet_start[i].vertex[j].x -= (stl->stats.min.x - x); + stl->facet_start[i].vertex[j].y -= (stl->stats.min.y - y); + stl->facet_start[i].vertex[j].z -= (stl->stats.min.z - z); + } + } + stl->stats.max.x -= (stl->stats.min.x - x); + stl->stats.max.y -= (stl->stats.min.y - y); + stl->stats.max.z -= (stl->stats.min.z - z); + stl->stats.min.x = x; + stl->stats.min.y = y; + stl->stats.min.z = z; + + stl_invalidate_shared_vertices(stl); +} + +/* Translates the stl by x,y,z, relatively from wherever it is currently */ +void +stl_translate_relative(stl_file *stl, float x, float y, float z) { + int i; + int j; + + if (stl->error) return; + + for(i = 0; i < stl->stats.number_of_facets; i++) { + for(j = 0; j < 3; j++) { + stl->facet_start[i].vertex[j].x += x; + stl->facet_start[i].vertex[j].y += y; + stl->facet_start[i].vertex[j].z += z; + } + } + stl->stats.min.x += x; + stl->stats.min.y += y; + stl->stats.min.z += z; + stl->stats.max.x += x; + stl->stats.max.y += y; + stl->stats.max.z += z; + + stl_invalidate_shared_vertices(stl); +} + +void +stl_scale_versor(stl_file *stl, float versor[3]) { + int i; + int j; + + if (stl->error) return; + + /* scale extents */ + stl->stats.min.x *= versor[0]; + stl->stats.min.y *= versor[1]; + stl->stats.min.z *= versor[2]; + stl->stats.max.x *= versor[0]; + stl->stats.max.y *= versor[1]; + stl->stats.max.z *= versor[2]; + + /* scale size */ + stl->stats.size.x *= versor[0]; + stl->stats.size.y *= versor[1]; + stl->stats.size.z *= versor[2]; + + /* scale volume */ + if (stl->stats.volume > 0.0) { + stl->stats.volume *= (versor[0] * versor[1] * versor[2]); + } + + for(i = 0; i < stl->stats.number_of_facets; i++) { + for(j = 0; j < 3; j++) { + stl->facet_start[i].vertex[j].x *= versor[0]; + stl->facet_start[i].vertex[j].y *= versor[1]; + stl->facet_start[i].vertex[j].z *= versor[2]; + } + } + + stl_invalidate_shared_vertices(stl); +} + +void +stl_scale(stl_file *stl, float factor) { + float versor[3]; + + if (stl->error) return; + + versor[0] = factor; + versor[1] = factor; + versor[2] = factor; + stl_scale_versor(stl, versor); +} + +static void calculate_normals(stl_file *stl) { + long i; + float normal[3]; + + if (stl->error) return; + + for(i = 0; i < stl->stats.number_of_facets; i++) { + stl_calculate_normal(normal, &stl->facet_start[i]); + stl_normalize_vector(normal); + stl->facet_start[i].normal.x = normal[0]; + stl->facet_start[i].normal.y = normal[1]; + stl->facet_start[i].normal.z = normal[2]; + } +} + +void +stl_rotate_x(stl_file *stl, float angle) { + int i; + int j; + + if (stl->error) return; + + for(i = 0; i < stl->stats.number_of_facets; i++) { + for(j = 0; j < 3; j++) { + stl_rotate(&stl->facet_start[i].vertex[j].y, + &stl->facet_start[i].vertex[j].z, angle); + } + } + stl_get_size(stl); + calculate_normals(stl); +} + +void +stl_rotate_y(stl_file *stl, float angle) { + int i; + int j; + + if (stl->error) return; + + for(i = 0; i < stl->stats.number_of_facets; i++) { + for(j = 0; j < 3; j++) { + stl_rotate(&stl->facet_start[i].vertex[j].z, + &stl->facet_start[i].vertex[j].x, angle); + } + } + stl_get_size(stl); + calculate_normals(stl); +} + +void +stl_rotate_z(stl_file *stl, float angle) { + int i; + int j; + + if (stl->error) return; + + for(i = 0; i < stl->stats.number_of_facets; i++) { + for(j = 0; j < 3; j++) { + stl_rotate(&stl->facet_start[i].vertex[j].x, + &stl->facet_start[i].vertex[j].y, angle); + } + } + stl_get_size(stl); + calculate_normals(stl); +} + + + +static void +stl_rotate(float *x, float *y, float angle) { + double r; + double theta; + double radian_angle; + + radian_angle = (angle / 180.0) * M_PI; + + r = sqrt((*x **x) + (*y **y)); + theta = atan2(*y, *x); + *x = r * cos(theta + radian_angle); + *y = r * sin(theta + radian_angle); +} + +extern void +stl_get_size(stl_file *stl) { + int i; + int j; + + if (stl->error) return; + if (stl->stats.number_of_facets == 0) return; + + stl->stats.min.x = stl->facet_start[0].vertex[0].x; + stl->stats.min.y = stl->facet_start[0].vertex[0].y; + stl->stats.min.z = stl->facet_start[0].vertex[0].z; + stl->stats.max.x = stl->facet_start[0].vertex[0].x; + stl->stats.max.y = stl->facet_start[0].vertex[0].y; + stl->stats.max.z = stl->facet_start[0].vertex[0].z; + + for(i = 0; i < stl->stats.number_of_facets; i++) { + for(j = 0; j < 3; j++) { + stl->stats.min.x = STL_MIN(stl->stats.min.x, + stl->facet_start[i].vertex[j].x); + stl->stats.min.y = STL_MIN(stl->stats.min.y, + stl->facet_start[i].vertex[j].y); + stl->stats.min.z = STL_MIN(stl->stats.min.z, + stl->facet_start[i].vertex[j].z); + stl->stats.max.x = STL_MAX(stl->stats.max.x, + stl->facet_start[i].vertex[j].x); + stl->stats.max.y = STL_MAX(stl->stats.max.y, + stl->facet_start[i].vertex[j].y); + stl->stats.max.z = STL_MAX(stl->stats.max.z, + stl->facet_start[i].vertex[j].z); + } + } + stl->stats.size.x = stl->stats.max.x - stl->stats.min.x; + stl->stats.size.y = stl->stats.max.y - stl->stats.min.y; + stl->stats.size.z = stl->stats.max.z - stl->stats.min.z; + stl->stats.bounding_diameter = sqrt( + stl->stats.size.x * stl->stats.size.x + + stl->stats.size.y * stl->stats.size.y + + stl->stats.size.z * stl->stats.size.z + ); +} + +void +stl_mirror_xy(stl_file *stl) { + int i; + int j; + float temp_size; + + if (stl->error) return; + + for(i = 0; i < stl->stats.number_of_facets; i++) { + for(j = 0; j < 3; j++) { + stl->facet_start[i].vertex[j].z *= -1.0; + } + } + temp_size = stl->stats.min.z; + stl->stats.min.z = stl->stats.max.z; + stl->stats.max.z = temp_size; + stl->stats.min.z *= -1.0; + stl->stats.max.z *= -1.0; + stl_reverse_all_facets(stl); + stl->stats.facets_reversed -= stl->stats.number_of_facets; /* for not altering stats */ +} + +void +stl_mirror_yz(stl_file *stl) { + int i; + int j; + float temp_size; + + if (stl->error) return; + + for(i = 0; i < stl->stats.number_of_facets; i++) { + for(j = 0; j < 3; j++) { + stl->facet_start[i].vertex[j].x *= -1.0; + } + } + temp_size = stl->stats.min.x; + stl->stats.min.x = stl->stats.max.x; + stl->stats.max.x = temp_size; + stl->stats.min.x *= -1.0; + stl->stats.max.x *= -1.0; + stl_reverse_all_facets(stl); + stl->stats.facets_reversed -= stl->stats.number_of_facets; /* for not altering stats */ +} + +void +stl_mirror_xz(stl_file *stl) { + int i; + int j; + float temp_size; + + if (stl->error) return; + + for(i = 0; i < stl->stats.number_of_facets; i++) { + for(j = 0; j < 3; j++) { + stl->facet_start[i].vertex[j].y *= -1.0; + } + } + temp_size = stl->stats.min.y; + stl->stats.min.y = stl->stats.max.y; + stl->stats.max.y = temp_size; + stl->stats.min.y *= -1.0; + stl->stats.max.y *= -1.0; + stl_reverse_all_facets(stl); + stl->stats.facets_reversed -= stl->stats.number_of_facets; /* for not altering stats */ +} + +static float get_volume(stl_file *stl) { + long i; + stl_vertex p0; + stl_vertex p; + stl_normal n; + float height; + float area; + float volume = 0.0; + + if (stl->error) return 0; + + /* Choose a point, any point as the reference */ + p0.x = stl->facet_start[0].vertex[0].x; + p0.y = stl->facet_start[0].vertex[0].y; + p0.z = stl->facet_start[0].vertex[0].z; + + for(i = 0; i < stl->stats.number_of_facets; i++) { + p.x = stl->facet_start[i].vertex[0].x - p0.x; + p.y = stl->facet_start[i].vertex[0].y - p0.y; + p.z = stl->facet_start[i].vertex[0].z - p0.z; + /* Do dot product to get distance from point to plane */ + n = stl->facet_start[i].normal; + height = (n.x * p.x) + (n.y * p.y) + (n.z * p.z); + area = get_area(&stl->facet_start[i]); + volume += (area * height) / 3.0; + } + return volume; +} + +void stl_calculate_volume(stl_file *stl) { + if (stl->error) return; + stl->stats.volume = get_volume(stl); +} + +static float get_area(stl_facet *facet) { + double cross[3][3]; + float sum[3]; + float n[3]; + float area; + int i; + + /* cast to double before calculating cross product because large coordinates + can result in overflowing product + (bad area is responsible for bad volume and bad facets reversal) */ + for(i = 0; i < 3; i++) { + cross[i][0]=(((double)facet->vertex[i].y * (double)facet->vertex[(i + 1) % 3].z) - + ((double)facet->vertex[i].z * (double)facet->vertex[(i + 1) % 3].y)); + cross[i][1]=(((double)facet->vertex[i].z * (double)facet->vertex[(i + 1) % 3].x) - + ((double)facet->vertex[i].x * (double)facet->vertex[(i + 1) % 3].z)); + cross[i][2]=(((double)facet->vertex[i].x * (double)facet->vertex[(i + 1) % 3].y) - + ((double)facet->vertex[i].y * (double)facet->vertex[(i + 1) % 3].x)); + } + + sum[0] = cross[0][0] + cross[1][0] + cross[2][0]; + sum[1] = cross[0][1] + cross[1][1] + cross[2][1]; + sum[2] = cross[0][2] + cross[1][2] + cross[2][2]; + + /* This should already be done. But just in case, let's do it again */ + stl_calculate_normal(n, facet); + stl_normalize_vector(n); + + area = 0.5 * (n[0] * sum[0] + n[1] * sum[1] + n[2] * sum[2]); + return area; +} + +void stl_repair(stl_file *stl, + int fixall_flag, + int exact_flag, + int tolerance_flag, + float tolerance, + int increment_flag, + float increment, + int nearby_flag, + int iterations, + int remove_unconnected_flag, + int fill_holes_flag, + int normal_directions_flag, + int normal_values_flag, + int reverse_all_flag, + int verbose_flag) { + + int i; + int last_edges_fixed = 0; + + if (stl->error) return; + + if(exact_flag || fixall_flag || nearby_flag || remove_unconnected_flag + || fill_holes_flag || normal_directions_flag) { + if (verbose_flag) + printf("Checking exact...\n"); + exact_flag = 1; + stl_check_facets_exact(stl); + stl->stats.facets_w_1_bad_edge = + (stl->stats.connected_facets_2_edge - + stl->stats.connected_facets_3_edge); + stl->stats.facets_w_2_bad_edge = + (stl->stats.connected_facets_1_edge - + stl->stats.connected_facets_2_edge); + stl->stats.facets_w_3_bad_edge = + (stl->stats.number_of_facets - + stl->stats.connected_facets_1_edge); + } + + if(nearby_flag || fixall_flag) { + if(!tolerance_flag) { + tolerance = stl->stats.shortest_edge; + } + if(!increment_flag) { + increment = stl->stats.bounding_diameter / 10000.0; + } + + if(stl->stats.connected_facets_3_edge < stl->stats.number_of_facets) { + for(i = 0; i < iterations; i++) { + if(stl->stats.connected_facets_3_edge < + stl->stats.number_of_facets) { + if (verbose_flag) + printf("\ +Checking nearby. Tolerance= %f Iteration=%d of %d...", + tolerance, i + 1, iterations); + stl_check_facets_nearby(stl, tolerance); + if (verbose_flag) + printf(" Fixed %d edges.\n", + stl->stats.edges_fixed - last_edges_fixed); + last_edges_fixed = stl->stats.edges_fixed; + tolerance += increment; + } else { + if (verbose_flag) + printf("\ +All facets connected. No further nearby check necessary.\n"); + break; + } + } + } else { + if (verbose_flag) + printf("All facets connected. No nearby check necessary.\n"); + } + } + + if(remove_unconnected_flag || fixall_flag || fill_holes_flag) { + if(stl->stats.connected_facets_3_edge < stl->stats.number_of_facets) { + if (verbose_flag) + printf("Removing unconnected facets...\n"); + stl_remove_unconnected_facets(stl); + } else + if (verbose_flag) + printf("No unconnected need to be removed.\n"); + } + + if(fill_holes_flag || fixall_flag) { + if(stl->stats.connected_facets_3_edge < stl->stats.number_of_facets) { + if (verbose_flag) + printf("Filling holes...\n"); + stl_fill_holes(stl); + } else + if (verbose_flag) + printf("No holes need to be filled.\n"); + } + + if(reverse_all_flag) { + if (verbose_flag) + printf("Reversing all facets...\n"); + stl_reverse_all_facets(stl); + } + + if(normal_directions_flag || fixall_flag) { + if (verbose_flag) + printf("Checking normal directions...\n"); + stl_fix_normal_directions(stl); + } + + if(normal_values_flag || fixall_flag) { + if (verbose_flag) + printf("Checking normal values...\n"); + stl_fix_normal_values(stl); + } + + /* Always calculate the volume. It shouldn't take too long */ + if (verbose_flag) + printf("Calculating volume...\n"); + stl_calculate_volume(stl); + + if(fixall_flag) { + if(stl->stats.volume < 0.0) { + if (verbose_flag) + printf("Reversing all facets because volume is negative...\n"); + stl_reverse_all_facets(stl); + stl->stats.volume = -stl->stats.volume; + } + } + + if(exact_flag) { + if (verbose_flag) + printf("Verifying neighbors...\n"); + stl_verify_neighbors(stl); + } +} diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/util.lo b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/util.lo new file mode 100644 index 00000000..d25f7ab6 --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/src/util.lo @@ -0,0 +1,12 @@ +# src/util.lo - a libtool object file +# Generated by libtool (GNU libtool) 2.4.6 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/util.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/stamp-h1 b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/stamp-h1 new file mode 100644 index 00000000..4547fe1b --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/admesh/linux/stamp-h1 @@ -0,0 +1 @@ +timestamp for config.h diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/windows/admesh.exe b/extensions/fablabchemnitz/papercraft_unfold/admesh/windows/admesh.exe new file mode 100755 index 00000000..ea56453d Binary files /dev/null and b/extensions/fablabchemnitz/papercraft_unfold/admesh/windows/admesh.exe differ diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/windows/include/admesh/stl.h b/extensions/fablabchemnitz/papercraft_unfold/admesh/windows/include/admesh/stl.h new file mode 100644 index 00000000..25fe770a --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/admesh/windows/include/admesh/stl.h @@ -0,0 +1,201 @@ +/* ADMesh -- process triangulated solid meshes + * Copyright (C) 1995, 1996 Anthony D. Martin + * Copyright (C) 2013, 2014 several contributors, see AUTHORS + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Questions, comments, suggestions, etc to + * https://github.com/admesh/admesh/issues + */ + +#ifndef __admesh_stl__ +#define __admesh_stl__ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define STL_MAX(A,B) ((A)>(B)? (A):(B)) +#define STL_MIN(A,B) ((A)<(B)? (A):(B)) +#define ABS(X) ((X) < 0 ? -(X) : (X)) + +#define LABEL_SIZE 80 +#define NUM_FACET_SIZE 4 +#define HEADER_SIZE 84 +#define STL_MIN_FILE_SIZE 284 +#define ASCII_LINES_PER_FACET 7 +#define SIZEOF_EDGE_SORT 24 + +typedef struct { + float x; + float y; + float z; +} stl_vertex; + +typedef struct { + float x; + float y; + float z; +} stl_normal; + +typedef char stl_extra[2]; + +typedef struct { + stl_normal normal; + stl_vertex vertex[3]; + stl_extra extra; +} stl_facet; +#define SIZEOF_STL_FACET 50 + +typedef enum {binary, ascii, inmemory} stl_type; + +typedef struct { + stl_vertex p1; + stl_vertex p2; + int facet_number; +} stl_edge; + +typedef struct stl_hash_edge { + unsigned key[6]; + int facet_number; + int which_edge; + struct stl_hash_edge *next; +} stl_hash_edge; + +typedef struct { + int neighbor[3]; + char which_vertex_not[3]; +} stl_neighbors; + +typedef struct { + int vertex[3]; +} v_indices_struct; + +typedef struct { + char header[81]; + stl_type type; + int number_of_facets; + stl_vertex max; + stl_vertex min; + stl_vertex size; + float bounding_diameter; + float shortest_edge; + float volume; + unsigned number_of_blocks; + int connected_edges; + int connected_facets_1_edge; + int connected_facets_2_edge; + int connected_facets_3_edge; + int facets_w_1_bad_edge; + int facets_w_2_bad_edge; + int facets_w_3_bad_edge; + int original_num_facets; + int edges_fixed; + int degenerate_facets; + int facets_removed; + int facets_added; + int facets_reversed; + int backwards_edges; + int normals_fixed; + int number_of_parts; + int malloced; + int freed; + int facets_malloced; + int collisions; + int shared_vertices; + int shared_malloced; +} stl_stats; + +typedef struct { + FILE *fp; + stl_facet *facet_start; + stl_edge *edge_start; + stl_hash_edge **heads; + stl_hash_edge *tail; + int M; + stl_neighbors *neighbors_start; + v_indices_struct *v_indices; + stl_vertex *v_shared; + stl_stats stats; + char error; +} stl_file; + + +extern void stl_open(stl_file *stl, char *file); +extern void stl_close(stl_file *stl); +extern void stl_stats_out(stl_file *stl, FILE *file, char *input_file); +extern void stl_print_edges(stl_file *stl, FILE *file); +extern void stl_print_neighbors(stl_file *stl, char *file); +extern void stl_put_little_int(FILE *fp, int value_in); +extern void stl_put_little_float(FILE *fp, float value_in); +extern void stl_write_ascii(stl_file *stl, const char *file, const char *label); +extern void stl_write_binary(stl_file *stl, const char *file, const char *label); +extern void stl_write_binary_block(stl_file *stl, FILE *fp); +extern void stl_check_facets_exact(stl_file *stl); +extern void stl_check_facets_nearby(stl_file *stl, float tolerance); +extern void stl_remove_unconnected_facets(stl_file *stl); +extern void stl_write_vertex(stl_file *stl, int facet, int vertex); +extern void stl_write_facet(stl_file *stl, char *label, int facet); +extern void stl_write_edge(stl_file *stl, char *label, stl_hash_edge edge); +extern void stl_write_neighbor(stl_file *stl, int facet); +extern void stl_write_quad_object(stl_file *stl, char *file); +extern void stl_verify_neighbors(stl_file *stl); +extern void stl_fill_holes(stl_file *stl); +extern void stl_fix_normal_directions(stl_file *stl); +extern void stl_fix_normal_values(stl_file *stl); +extern void stl_reverse_all_facets(stl_file *stl); +extern void stl_translate(stl_file *stl, float x, float y, float z); +extern void stl_translate_relative(stl_file *stl, float x, float y, float z); +extern void stl_scale_versor(stl_file *stl, float versor[3]); +extern void stl_scale(stl_file *stl, float factor); +extern void stl_rotate_x(stl_file *stl, float angle); +extern void stl_rotate_y(stl_file *stl, float angle); +extern void stl_rotate_z(stl_file *stl, float angle); +extern void stl_mirror_xy(stl_file *stl); +extern void stl_mirror_yz(stl_file *stl); +extern void stl_mirror_xz(stl_file *stl); +extern void stl_open_merge(stl_file *stl, char *file); +extern void stl_invalidate_shared_vertices(stl_file *stl); +extern void stl_generate_shared_vertices(stl_file *stl); +extern void stl_write_obj(stl_file *stl, char *file); +extern void stl_write_off(stl_file *stl, char *file); +extern void stl_write_dxf(stl_file *stl, char *file, char *label); +extern void stl_write_vrml(stl_file *stl, char *file); +extern void stl_calculate_normal(float normal[], stl_facet *facet); +extern void stl_normalize_vector(float v[]); +extern void stl_calculate_volume(stl_file *stl); + +extern void stl_repair(stl_file *stl, int fixall_flag, int exact_flag, int tolerance_flag, float tolerance, int increment_flag, float increment, int nearby_flag, int iterations, int remove_unconnected_flag, int fill_holes_flag, int normal_directions_flag, int normal_values_flag, int reverse_all_flag, int verbose_flag); + +extern void stl_initialize(stl_file *stl); +extern void stl_count_facets(stl_file *stl, char *file); +extern void stl_allocate(stl_file *stl); +extern void stl_read(stl_file *stl, int first_facet, int first); +extern void stl_facet_stats(stl_file *stl, stl_facet facet, int first); +extern void stl_reallocate(stl_file *stl); +extern void stl_add_facet(stl_file *stl, stl_facet *new_facet); +extern void stl_get_size(stl_file *stl); + +extern void stl_clear_error(stl_file *stl); +extern int stl_get_error(stl_file *stl); +extern void stl_exit_on_error(stl_file *stl); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/windows/lib/libadmesh.a b/extensions/fablabchemnitz/papercraft_unfold/admesh/windows/lib/libadmesh.a new file mode 100644 index 00000000..601cd204 Binary files /dev/null and b/extensions/fablabchemnitz/papercraft_unfold/admesh/windows/lib/libadmesh.a differ diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/windows/lib/libadmesh.dll.a b/extensions/fablabchemnitz/papercraft_unfold/admesh/windows/lib/libadmesh.dll.a new file mode 100755 index 00000000..6a52c063 Binary files /dev/null and b/extensions/fablabchemnitz/papercraft_unfold/admesh/windows/lib/libadmesh.dll.a differ diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/windows/lib/libadmesh.la b/extensions/fablabchemnitz/papercraft_unfold/admesh/windows/lib/libadmesh.la new file mode 100755 index 00000000..d7de0992 --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/admesh/windows/lib/libadmesh.la @@ -0,0 +1,41 @@ +# libadmesh.la - a libtool library file +# Generated by libtool (GNU libtool) 2.4.6 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# The name that we can dlopen(3). +dlname='../bin/libadmesh-1.dll' + +# Names of this library. +library_names='libadmesh.dll.a' + +# The name of the static archive. +old_library='' + +# Linker flags that cannot go in dependency_libs. +inherited_linker_flags='' + +# Libraries that this one depends upon. +dependency_libs='' + +# Names of additional weak libraries provided by this library +weak_library_names='' + +# Version information for libadmesh. +current=1 +age=0 +revision=0 + +# Is this an already installed library? +installed=yes + +# Should we warn about portability when linking against -modules? +shouldnotlink=no + +# Files to dlopen/dlpreopen +dlopen='' +dlpreopen='' + +# Directory that this library needs to be installed in: +libdir='/usr/x86_64-w64-mingw32/sys-root/mingw/lib' diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/windows/lib/pkgconfig/libadmesh.pc b/extensions/fablabchemnitz/papercraft_unfold/admesh/windows/lib/pkgconfig/libadmesh.pc new file mode 100644 index 00000000..7a2fbe46 --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/admesh/windows/lib/pkgconfig/libadmesh.pc @@ -0,0 +1,11 @@ +prefix=/usr/x86_64-w64-mingw32/sys-root/mingw +exec_prefix=/usr/x86_64-w64-mingw32/sys-root/mingw +libdir=/usr/x86_64-w64-mingw32/sys-root/mingw/lib +includedir=/usr/x86_64-w64-mingw32/sys-root/mingw/include + +Name: libadmesh +Description: Library for woring with admesh +Version: 0.98.3 +Libs: -L${libdir} -ladmesh +Libs.private: +Cflags: -I${includedir} diff --git a/extensions/fablabchemnitz/papercraft_unfold/admesh/windows/libadmesh-1.dll b/extensions/fablabchemnitz/papercraft_unfold/admesh/windows/libadmesh-1.dll new file mode 100755 index 00000000..d64fdd4e Binary files /dev/null and b/extensions/fablabchemnitz/papercraft_unfold/admesh/windows/libadmesh-1.dll differ diff --git a/extensions/fablabchemnitz/papercraft_unfold/assets/models/cube/cube.mtl b/extensions/fablabchemnitz/papercraft_unfold/assets/models/cube/cube.mtl new file mode 100644 index 00000000..5a4b37fe --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/assets/models/cube/cube.mtl @@ -0,0 +1,10 @@ +newmtl cubemtl +Ns 10 +Ni 1.0 +d 1.0 +Tf 1 1 1 +illum 2 +Ka 0.5 0.5 0. +Kd 0.9 0.9 0.9 +Ks 0.0 0.0 0.0 +map_Kd cube.png diff --git a/extensions/fablabchemnitz/papercraft_unfold/assets/models/cube/cube.obj b/extensions/fablabchemnitz/papercraft_unfold/assets/models/cube/cube.obj new file mode 100644 index 00000000..d105fe83 --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/assets/models/cube/cube.obj @@ -0,0 +1,34 @@ +mtllib cube.mtl + +usemtl cubemtl + +v -0.5 -0.5 -0.5 +v -0.5 -0.5 0.5 +v -0.5 0.5 -0.5 +v -0.5 0.5 0.5 +v 0.5 -0.5 -0.5 +v 0.5 -0.5 0.5 +v 0.5 0.5 -0.5 +v 0.5 0.5 0.5 + +vt 0.0 0.0 +vt 0.0 1.0 +vt 1.0 0.0 +vt 1.0 1.0 + +vn 1.0 0.0 0.0 +vn 0.0 1.0 0.0 +vn 0.0 0.0 1.0 +vn -1.0 0.0 0.0 +vn 0.0 -1.0 0.0 +vn 0.0 0.0 -1.0 + +f 1/1/4 2/3/4 4/4/4 3/2/4 +f 2/1/3 6/3/3 8/4/3 4/2/3 +f 6/1/1 5/3/1 7/4/1 8/2/1 +f 5/1/6 1/3/6 3/4/6 7/2/6 +f 4/1/2 8/3/2 7/4/2 3/2/2 +f 2/1/5 1/3/5 5/4/5 6/2/5 + +usemtl fuckyou + diff --git a/extensions/fablabchemnitz/papercraft_unfold/assets/models/cube/cube.png b/extensions/fablabchemnitz/papercraft_unfold/assets/models/cube/cube.png new file mode 100644 index 00000000..b1928b00 Binary files /dev/null and b/extensions/fablabchemnitz/papercraft_unfold/assets/models/cube/cube.png differ diff --git a/extensions/fablabchemnitz/papercraft_unfold/assets/shaders/shader.frag b/extensions/fablabchemnitz/papercraft_unfold/assets/shaders/shader.frag new file mode 100644 index 00000000..b8500344 --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/assets/shaders/shader.frag @@ -0,0 +1,22 @@ +varying vec3 fNormal; +varying vec4 fFrontColor; + +vec3 ambientLight = vec3(0.2,0.2,0.2); +vec3 directionnalLight = normalize(vec3(10,5,7)); +vec3 directionnalLightFactor = vec3(0.5,0.5,0.5); + +uniform sampler2D tex; + +void main() { + + vec3 ambientFactor = ambientLight; + vec3 lambertFactor = max(vec3(0.0,0.0,0.0), dot(directionnalLight, fNormal) * directionnalLightFactor); + vec4 noTexColor = vec4(ambientFactor + lambertFactor, 1.0); + + vec4 color = texture2D(tex, gl_TexCoord[0].st); + + vec4 fragColor = noTexColor * color; + gl_FragColor = fragColor * fFrontColor; + +} + diff --git a/extensions/fablabchemnitz/papercraft_unfold/assets/shaders/shader.vert b/extensions/fablabchemnitz/papercraft_unfold/assets/shaders/shader.vert new file mode 100644 index 00000000..a50f4ef6 --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/assets/shaders/shader.vert @@ -0,0 +1,12 @@ +varying vec3 fNormal; +varying vec4 fTexCoord; +varying vec4 fFrontColor; + +void main() { + + fNormal = gl_Normal; + gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; + gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0; + fFrontColor = gl_Color; + +} diff --git a/extensions/fablabchemnitz/papercraft_unfold/d3/__init__.py b/extensions/fablabchemnitz/papercraft_unfold/d3/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/extensions/fablabchemnitz/papercraft_unfold/d3/camera.py b/extensions/fablabchemnitz/papercraft_unfold/d3/camera.py new file mode 100644 index 00000000..9eeecc1f --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/d3/camera.py @@ -0,0 +1,27 @@ +from .geometry import Vector + +import OpenGL.GLU as glu + +class Camera: + """Simple 3D camera + """ + def __init__(self, position = Vector(1.0,0.0,0.0), target = Vector(), up = Vector(0.0,1.0,0.0)): + """Creates a simple camera + + :param position: center of the camera + :param target: point where the camera is looking + :param up: up vector of the camera + """ + self.position = position + self.target = target + self.up = up + + def look(self): + """Sets the model view matrix of OpenGL + + Simply calls the gluLookAt function + """ + glu.gluLookAt( + self.position.x, self.position.y, self.position.z, + self.target.x, self.target.y, self.target.z, + self.up.x, self.up.y, self.up.z) diff --git a/extensions/fablabchemnitz/papercraft_unfold/d3/controls.py b/extensions/fablabchemnitz/papercraft_unfold/d3/controls.py new file mode 100644 index 00000000..bff9be15 --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/d3/controls.py @@ -0,0 +1,112 @@ +from .geometry import Vector + +import pygame +import OpenGL.GL as gl +import math + +class Controls: + """Abstract class for controls + """ + def __init__(self): + pass + + def apply(self): + """Apply the controls modification to the model view matrix + """ + pass + + def update(self, time = 10): + """Update according to the user's inputs + """ + pass + +class TrackBallControls(Controls): + """Trackball controls + + Simple trackball controls""" + + def __init__(self): + """Creates a TrackBallControls + + The trackball is centered at the origin + """ + super().__init__() + self.vertex = Vector() + self.theta = 0 + + def apply(self): + """Apply the rotation of the current trackball + """ + gl.glRotatef(self.theta * 180 / math.pi, self.vertex.x, self.vertex.y, self.vertex.z) + + def update(self, time = 10): + """Checks the keyboard inputs and update the angle + """ + if not pygame.mouse.get_pressed()[0]: + return + + coeff = 0.001 + move = pygame.mouse.get_rel() + + dV = Vector(move[1] * time * coeff, move[0] * time * coeff, 0) + dTheta = dV.norm2() + + if abs(dTheta) < 0.00001: + return + + dV.normalize() + + cosT2 = math.cos(self.theta / 2) + sinT2 = math.sin(self.theta / 2) + cosDT2 = math.cos(dTheta / 2) + sinDT2 = math.sin(dTheta / 2) + + A = cosT2 * sinDT2 * dV + cosDT2 * sinT2 * self.vertex + sinDT2 * sinT2 * Vector.cross_product(dV, self.vertex) + + self.theta = 2 * math.acos(cosT2 * cosDT2 - sinT2 * sinDT2 * Vector.dot(dV, self.vertex)) + + self.vertex = A + self.vertex.normalize() + +class OrbitControls(Controls): + """Simple OrbitControls + + Similar to TrackBallControls but the up vector is preserved""" + + def __init__(self): + """Creates an OrbitControls with null angles + """ + super().__init__() + self.phi = 0 + self.theta = 0 + self.scale_log = 0 + + def apply(self): + scale = math.exp(self.scale_log) + gl.glScalef(scale, scale, scale) + gl.glRotatef(self.theta * 180 / math.pi, 1.0, 0.0, 0.0) + gl.glRotatef(self.phi * 180 / math.pi, 0.0, 1.0, 0.0) + + def apply_event(self, event): + """Manages the wheel event + + :param event: a pyevent + """ + if event.type == pygame.MOUSEBUTTONDOWN: + # Wheel up + if event.button == 4: + self.scale_log += 0.1 + # Wheel down + elif event.button == 5: + self.scale_log -= 0.1 + + def update(self, time = 10): + + if not pygame.mouse.get_pressed()[0]: + return + + move = pygame.mouse.get_rel() + self.theta += move[1] * 0.01 + self.phi += move[0] * 0.01 + + self.theta = max(min(self.theta, math.pi / 2), -math.pi / 2) diff --git a/extensions/fablabchemnitz/papercraft_unfold/d3/geometry.py b/extensions/fablabchemnitz/papercraft_unfold/d3/geometry.py new file mode 100644 index 00000000..2e90c9cc --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/d3/geometry.py @@ -0,0 +1,108 @@ +import math + +class Vector: + """ 3D Vector + + Simple class that represents a 3D vector + """ + + def __init__(self, x = 0.0, y = 0.0, z = 0.0): + """ + Creates a vector from it's coordinates + """ + self.x = x + self.y = y + self.z = z + + def from_array(self, arr): + """ + Creates a vector from an array + """ + self.x = float(arr[0]) if len(arr) > 0 else None + self.y = float(arr[1]) if len(arr) > 1 else None + self.z = float(arr[2]) if len(arr) > 2 else None + return self + + def __add__(self, other): + """ + Sums two vectors + """ + return Vector(self.x + other.x, self.y + other.y, self.z + other.z) + + def __sub__(self, other): + """ + Subs two vectors + """ + return Vector(self.x - other.x, self.y - other.y, self.z - other.z) + + def __mul__(self, other): + """ + Computes the product between a vector and a number + """ + return Vector(self.x * other, self.y * other, self.z * other) + + def __truediv__(self, number): + self.x /= number + self.y /= number + self.z /= number + return self + + def __rmul__(self, other): + """ + Computes the product between a vector and a number + """ + return self.__mul__(other) + + def norm2(self): + """ + Computes the square of the norm of a vector + """ + return self.x * self.x + self.y * self.y + self.z * self.z + + def norm(self): + """ + Compute the norm of a vector + """ + return math.sqrt(self.norm2()) + + def normalize(self): + """ + Divides each coordinate of the vector by its norm + """ + norm = self.norm() + if abs(norm) > 0.0001: + self.x /= norm + self.y /= norm + self.z /= norm + + def cross_product(v1, v2): + """ + Computes the cross product between the two vectors + """ + return Vector( + v1.y * v2.z - v1.z * v2.y, + v1.z * v2.x - v1.x * v2.z, + v1.x * v2.y - v1.y * v2.x) + + def from_points(v1, v2): + """ + Creates a vector from two points + """ + return Vector( + v2.x - v1.x, + v2.y - v1.y, + v2.z - v1.z) + + def __str__(self): + """ + Prints the coordinates of the vector between partheses + """ + return '(' + ", ".join([str(self.x), str(self.y), str(self.z)]) + ")" + + def dot(self, other): + """ + Computes the dot product of two vectors + """ + return self.x * other.x + self.y * other.y + self.z * other.z + + diff --git a/extensions/fablabchemnitz/papercraft_unfold/d3/model/__init__.py b/extensions/fablabchemnitz/papercraft_unfold/d3/model/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/extensions/fablabchemnitz/papercraft_unfold/d3/model/basemodel.py b/extensions/fablabchemnitz/papercraft_unfold/d3/model/basemodel.py new file mode 100644 index 00000000..f9ee647a --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/d3/model/basemodel.py @@ -0,0 +1,334 @@ +from math import sqrt +from ..geometry import Vector +from .mesh import Material, MeshPart + +Vertex = Vector +TexCoord = Vertex +Normal = Vertex +Color = Vertex + +class FaceVertex: + """Contains the information a vertex needs in a face + + In contains the index of the vertex, the index of the texture coordinate + and the index of the normal. It is None if it is not available. + :param vertex: index of the vertex + :param tex_coord: index of the texture coordinate + :param normal: index of the normal + :param color: index of the color + """ + def __init__(self, vertex = None, tex_coord = None, normal = None, color = None): + """Initializes a FaceVertex from its indices + """ + self.vertex = vertex + self.tex_coord = tex_coord + self.normal = normal + self.color = color + + def from_array(self, arr): + """Initializes a FaceVertex from an array + + :param arr: can be an array of strings, the first value will be the + vertex index, the second will be the texture coordinate index, the + third will be the normal index, and the fourth will be the color index. + """ + self.vertex = int(arr[0]) if len(arr) > 0 else None + + try: + self.tex_coord = int(arr[1]) if len(arr) > 1 else None + except: + self.tex_coord = None + + try: + self.normal = int(arr[2]) if len(arr) > 2 else None + except: + self.normal = None + + try: + self.color = int(arr[3]) if len(arr) > 3 else None + except: + self.color = None + + return self + +class Face: + """Represents a face with 3 vertices + + Faces with more than 3 vertices are not supported in this class. You should + split your face first and then create the number needed of instances of + this class. + """ + def __init__(self, a = None, b = None, c = None, material = None): + """Initializes a Face with its three FaceVertex and its Material + + :param a: first FaceVertex element + :param b: second FaceVertex element + :param c: third FaceVertex element + :param material: the material to use with this face + """ + self.a = a + self.b = b + self.c = c + self.material = material + + # Expects array of array + def from_array(self, arr): + """Initializes a Face with an array + + :param arr: should be an array of array of objects. Each array will + represent a FaceVertex + """ + self.a = FaceVertex().from_array(arr[0]) + self.b = FaceVertex().from_array(arr[1]) + self.c = FaceVertex().from_array(arr[2]) + return self + +class ModelParser: + """Represents a 3D model + """ + def __init__(self, up_conversion = None): + """Initializes the model + + :param up_conversion: couple of characters, can be y z or z y + """ + self.up_conversion = up_conversion + self.vertices = [] + self.colors = [] + self.normals = [] + self.tex_coords = [] + self.parts = [] + self.materials = [] + self.current_part = None + self.path = None + + def init_textures(self): + """Initializes the textures of the parts of the model + + Basically, calls glGenTexture on each texture + """ + for part in self.parts: + part.init_texture() + + def add_vertex(self, vertex): + """Adds a vertex to the current model + + Will also update its bounding box, and convert the up vector if + up_conversion was specified. + + :param vertex: vertex to add to the model + """ + # Apply up_conversion to the vertex + new_vertex = vertex + if self.up_conversion is not None: + if self.up_conversion[0] == 'y' and self.up_conversion[1] == 'z': + new_vertex = Vector(vertex.y, vertex.z, vertex.x) + elif self.up_conversion[0] == 'z' and self.up_conversion[1] == 'y': + new_vertex = Vector(vertex.z, vertex.x, vertex.y) + + self.vertices.append(new_vertex) + + def add_tex_coord(self, tex_coord): + """Adds a texture coordinate element to the current model + + :param tex_coord: tex_coord to add to the model + """ + self.tex_coords.append(tex_coord) + + def add_normal(self, normal): + """Adds a normal element to the current model + + :param normal: normal to add to the model + """ + self.normals.append(normal) + + def add_color(self, color): + """Adds a color element to the current model + + :param color: color to add to the model + """ + self.colors.append(color) + + def add_face(self, face): + """Adds a face to the current model + + If the face has a different material than the current material, it will + create a new mesh part and update the current material. + + :param face: face to add to the model + """ + if self.current_part is None or (face.material != self.current_part.material and face.material is not None): + self.current_part = MeshPart(self) + self.current_part.material = face.material if face.material is not None else Material.DEFAULT_MATERIAL + self.parts.append(self.current_part) + + self.current_part.add_face(face) + + def parse_file(self, path, chunk_size = 512): + """Sets the path of the model and parse bytes by chunk + + :param path: path to the file to parse + :param chunk_size: the file will be read chunk by chunk, each chunk + having chunk_size bytes + """ + self.path = path + byte_counter = 0 + with open(path, 'rb') as f: + while True: + bytes = f.read(chunk_size) + if bytes == b'': + return + self.parse_bytes(bytes, byte_counter) + byte_counter += chunk_size + + def draw(self): + """Draws each part of the model with OpenGL + """ + import OpenGL.GL as gl + + for part in self.parts: + part.draw() + + def generate_vbos(self): + """Generates the VBOs of each part of the model + """ + for part in self.parts: + part.generate_vbos() + + def generate_vertex_normals(self): + """Generate the normals for each vertex of the model + + A normal will be the average normal of the adjacent faces of a vertex. + """ + self.normals = [Normal() for i in self.vertices] + + for part in self.parts: + for face in part.faces: + v1 = Vertex.from_points(self.vertices[face.a.vertex], self.vertices[face.b.vertex]) + v2 = Vertex.from_points(self.vertices[face.a.vertex], self.vertices[face.c.vertex]) + v1.normalize() + v2.normalize() + cross = Vertex.cross_product(v1, v2) + self.normals[face.a.vertex] += cross + self.normals[face.b.vertex] += cross + self.normals[face.c.vertex] += cross + + for normal in self.normals: + normal.normalize() + + for part in self.parts: + for face in part.faces: + face.a.normal = face.a.vertex + face.b.normal = face.b.vertex + face.c.normal = face.c.vertex + + def generate_face_normals(self): + """Generate the normals for each face of the model + + A normal will be the normal of the face + """ + # Build array of faces + faces = sum(map(lambda x: x.faces, self.parts), []) + self.normals = [Normal()] * len(faces) + + for (index, face) in enumerate(faces): + + v1 = Vertex.from_points(self.vertices[face.a.vertex], self.vertices[face.b.vertex]) + v2 = Vertex.from_points(self.vertices[face.a.vertex], self.vertices[face.c.vertex]) + cross = Vertex.cross_product(v1, v2) + cross.normalize() + self.normals[index] = cross + + face.a.normal = index + face.b.normal = index + face.c.normal = index + + def get_material_index(self, material): + """Finds the index of the given material + + :param material: Material you want the index of + """ + return [i for (i,m) in enumerate(self.materials) if m.name == material.name][0] + +class TextModelParser(ModelParser): + def parse_file(self, path): + """Sets the path of the model and parse each line + + :param path: path to the text file to parse + """ + self.path = path + with open(path) as f: + for line in f.readlines(): + line = line.rstrip() + if line != '': + self.parse_line(line) + + +class BoundingBox: + """Represents a bounding box of a 3D model + """ + def __init__(self): + """Initializes the coordinates of the bounding box + """ + self.min_x = +float('inf') + self.min_y = +float('inf') + self.min_z = +float('inf') + + self.max_x = -float('inf') + self.max_y = -float('inf') + self.max_z = -float('inf') + + def add(self, vector): + """Adds a vector to a bounding box + + If the vector is outside the bounding box, the bounding box will be + enlarged, otherwise, nothing will happen. + + :param vector: the vector that will enlarge the bounding box + """ + self.min_x = min(self.min_x, vector.x) + self.min_y = min(self.min_y, vector.y) + self.min_z = min(self.min_z, vector.z) + + self.max_x = max(self.max_x, vector.x) + self.max_y = max(self.max_y, vector.y) + self.max_z = max(self.max_z, vector.z) + + def __str__(self): + """Returns a string that represents the bounding box + """ + return "[{},{}],[{},{}],[{},{}]".format( + self.min_x, + self.min_y, + self.min_z, + self.max_x, + self.max_y, + self.max_z) + + def get_center(self): + """Returns the center of the bounding box + """ + return Vertex( + (self.min_x + self.max_x) / 2, + (self.min_y + self.max_y) / 2, + (self.min_z + self.max_z) / 2) + + def get_scale(self): + """Returns the maximum edge of the bounding box + """ + return max( + abs(self.max_x - self.min_x), + abs(self.max_y - self.min_y), + abs(self.max_z - self.min_z)) + + +class Exporter: + """Represents an object that can export a model into a certain format + """ + def __init__(self, model): + """Creates a exporter for the model + + :param model: model to export + """ + self.model = model + + diff --git a/extensions/fablabchemnitz/papercraft_unfold/d3/model/formats/__init__.py b/extensions/fablabchemnitz/papercraft_unfold/d3/model/formats/__init__.py new file mode 100644 index 00000000..ff5b8f08 --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/d3/model/formats/__init__.py @@ -0,0 +1,4 @@ +from os.path import dirname, basename, isfile +import glob +modules = glob.glob(dirname(__file__)+"/*.py") +__all__ = [ basename(f)[:-3] for f in modules if isfile(f)] diff --git a/extensions/fablabchemnitz/papercraft_unfold/d3/model/formats/obj.py b/extensions/fablabchemnitz/papercraft_unfold/d3/model/formats/obj.py new file mode 100644 index 00000000..26ec05d6 --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/d3/model/formats/obj.py @@ -0,0 +1,208 @@ +from ..basemodel import TextModelParser, Exporter, Vertex, TexCoord, Normal, FaceVertex, Face +from ..mesh import Material, MeshPart +from functools import reduce +import os.path +import sys + + +def is_obj(filename): + """Checks that the file is a .obj file + + Only checks the extension of the file + :param filename: path to the file + """ + return filename[-4:] == '.obj' + +class OBJParser(TextModelParser): + """Parser that parses a .obj file + """ + + def __init__(self, up_conversion = None): + super().__init__(up_conversion) + self.current_material = None + self.mtl = None + self.vertex_offset = 0 + + def parse_line(self, string): + """Parses a line of .obj file + + :param string: the line to parse + """ + if string == '': + return + + split = string.split() + first = split[0] + split = split[1:] + + if first == 'usemtl' and self.mtl is not None: + self.current_material = self.mtl[split[0]] + elif first == 'mtllib': + path = os.path.join(os.path.dirname(self.path), ' '.join(split[:])) + if os.path.isfile(path): + self.mtl = MTLParser(self) + self.mtl.parse_file(path) + else: + print('Warning : ' + path + ' not found ', file=sys.stderr) + elif first == 'v': + self.add_vertex(Vertex().from_array(split)) + elif first == 'vn': + self.add_normal(Normal().from_array(split)) + elif first == 'vt': + self.add_tex_coord(TexCoord().from_array(split)) + elif first == 'f': + splits = list(map(lambda x: x.split('/'), split)) + + for i in range(len(splits)): + for j in range(len(splits[i])): + if splits[i][j] != '': + splits[i][j] = int(splits[i][j]) + if splits[i][j] > 0: + splits[i][j] -= 1 + else: + splits[i][j] = len(self.vertices) + splits[i][j] + + # if Face3 + if len(split) == 3: + face = Face().from_array(splits) + face.material = self.current_material + self.add_face(face) + + # Face4 are well supported with the next stuff + # elif len(split) == 4: + # face = Face().from_array(splits[:3]) + # face.material = self.current_material + # self.add_face(face) + + # face = Face().from_array([splits[0], splits[2], splits[3]]) + # face.material = self.current_material + # self.add_face(face) + + else: + # Bweeee + # First, lets compute all the FaceVertex for each vertex + face_vertices = [] + for face_vertex in splits[:]: + face_vertices.append(FaceVertex(*face_vertex)) + + # Then, we build the faces 0 i i+1 for each 1 <= i < len - 1 + for i in range(1, len(face_vertices) - 1): + + # Create face with barycenter, i and i + 1 + face = Face(face_vertices[0], face_vertices[i], face_vertices[i+1]) + face.material = self.current_material + self.add_face(face) + + + + + + +class MTLParser: + """Parser that parses a .mtl material file + """ + def __init__(self, parent): + """Creates a MTLParser bound to the OBJParser + + :param parent: the OBJParser this MTLParser refers to + """ + self.parent = parent + self.current_mtl = None + + def parse_line(self, string): + """Parses a line of .mtl file + + :param string: line to parse + """ + + if string == '': + return + + split = string.split() + first = split[0] + split = split[1:] + + if first == 'newmtl': + self.current_mtl = Material(' '.join(split[:])) + self.parent.materials.append(self.current_mtl) + elif first == 'Ka': + self.current_mtl.Ka = Vertex().from_array(split) + elif first == 'Kd': + self.current_mtl.Kd = Vertex().from_array(split) + elif first == 'Ks': + self.current_mtl.Ks = Vertex().from_array(split) + elif first == 'map_Kd': + self.current_mtl.relative_path_to_texture = ' '.join(split) + self.current_mtl.absolute_path_to_texture = os.path.join(os.path.dirname(self.parent.path), ' '.join(split)) + + + def parse_file(self, path): + with open(path) as f: + for line in f.readlines(): + line = line.rstrip() + self.parse_line(line) + + def __getitem__(self, key): + for material in self.parent.materials: + if material.name == key: + return material + + +class OBJExporter(Exporter): + """Exporter to .obj format + """ + + def __init__(self, model): + """Creates an exporter from the model + + :param model: Model to export + """ + super().__init__(model) + + def __str__(self): + """Exports the model + """ + current_material = '' + string = "" + + for vertex in self.model.vertices: + string += "v " + ' '.join([str(vertex.x), str(vertex.y), str(vertex.z)]) + "\n" + + string += "\n" + + if len(self.model.tex_coords) > 0: + for tex_coord in self.model.tex_coords: + string += "vt " + ' '.join([str(tex_coord.x), str(tex_coord.y)]) + "\n" + + string += "\n" + + if len(self.model.normals) > 0: + for normal in self.model.normals: + string += "vn " + ' '.join([str(normal.x), str(normal.y), str(normal.z)]) + "\n" + + string += "\n" + + faces = sum(map(lambda x: x.faces, self.model.parts), []) + + for face in faces: + if face.material is not None and face.material.name != current_material: + current_material = face.material.name + string += "usemtl " + current_material + "\n" + string += "f " + arr = [] + for v in [face.a, face.b, face.c]: + sub_arr = [] + sub_arr.append(str(v.vertex + 1)) + if v.normal is None: + if v.tex_coord is not None: + sub_arr.append('') + sub_arr.append(str(v.tex_coord + 1)) + elif v.tex_coord is not None: + sub_arr.append(str(v.tex_coord + 1)) + if v.normal is not None: + sub_arr.append(str(v.normal + 1)) + arr.append('/'.join(sub_arr)) + + string += ' '.join(arr) + '\n' + return string + diff --git a/extensions/fablabchemnitz/papercraft_unfold/d3/model/formats/off.py b/extensions/fablabchemnitz/papercraft_unfold/d3/model/formats/off.py new file mode 100644 index 00000000..9bf08824 --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/d3/model/formats/off.py @@ -0,0 +1,65 @@ +from ..basemodel import TextModelParser, Exporter, Vertex, TexCoord, Normal, FaceVertex, Face +from ..mesh import Material, MeshPart + +def is_off(filename): + """Checks that the file is a .off file + + Only checks the extension of the file + :param filename: path to the file + """ + return filename[-4:] == '.off' + +class OFFParser(TextModelParser): + """Parser that parses a .off file + """ + def __init__(self, up_conversion = None): + super().__init__(up_conversion) + self.vertex_number = None + self.face_number = None + self.edge_number = None + + def parse_line(self, string): + """Parses a line of .off file + + :param string: the line to parse + """ + split = string.split() + + if string == '' or string == 'OFF': + pass + elif self.vertex_number is None: + # The first will be the header + self.vertex_number = int(split[0]) + self.face_number = int(split[1]) + self.edge_number = int(split[2]) + elif len(self.vertices) < self.vertex_number: + self.add_vertex(Vertex().from_array(split)) + else: + self.add_face(Face(FaceVertex(int(split[1])), FaceVertex(int(split[2])), FaceVertex(int(split[3])))) + + + +class OFFExporter(Exporter): + """Exporter to .off format + """ + def __init__(self, model): + """Creates an exporter from the model + + :param model: Model to export + """ + super().__init__(model) + + def __str__(self): + """Exports the model + """ + faces = sum(map(lambda x: x.faces, self.model.parts), []) + string = "OFF\n{} {} {}".format(len(self.model.vertices), len(faces), 0) + '\n' + + for vertex in self.model.vertices: + string += ' '.join([str(vertex.x), str(vertex.y), str(vertex.z)]) + '\n' + + for face in faces: + string += '3 ' + ' '.join([str(face.a.vertex), str(face.b.vertex), str(face.c.vertex)]) + '\n' + + return string + diff --git a/extensions/fablabchemnitz/papercraft_unfold/d3/model/formats/ply.py b/extensions/fablabchemnitz/papercraft_unfold/d3/model/formats/ply.py new file mode 100644 index 00000000..8e32539a --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/d3/model/formats/ply.py @@ -0,0 +1,494 @@ +import os +import sys +import struct +from ..basemodel import ModelParser, TextModelParser, Exporter, Vertex, Face, Color, FaceVertex, TexCoord, Material + +class UnkownTypeError(Exception): + def __init__(self, message): + self.message = message + +def is_ply(filename): + """Checks that the file is a .ply file + + Only checks the extension of the file + :param filename: path to the file + """ + return filename[-4:] == '.ply' + +# List won't work with this function +def _ply_type_size(type): + """Returns the size of a ply property + + :param type: a string that is in a ply element + """ + if type == 'char' or type == 'uchar': + return 1 + elif type == 'short' or type == 'ushort': + return 2 + elif type == 'int' or type == 'uint': + return 4 + elif type == 'float': + return 4 + elif type == 'double': + return 8 + else: + raise UnkownTypeError('Type ' + type + ' is unknown') + +def ply_type_size(type): + """Returns the list containing the sizes of the elements + + :param type: a string that is in a ply element + """ + split = type.split() + + if len(split) == 1: + return [_ply_type_size(type)] + else: + if split[0] != 'list': + print('You have multiple types but it\'s not a list...', file=sys.stderr) + sys.exit(-1) + else: + return list(map(lambda a: _ply_type_size(a), split[1:])) + + +def bytes_to_element(type, bytes, byteorder = 'little'): + """Returns a python object parsed from bytes + + :param type: the type of the object to parse + :param bytes: the bytes to read + :param byteorder: little or big endian + """ + if type == 'char': + return ord(struct.unpack(' len(bytes): + self.previous_bytes = bytes[beginning_byte_index:] + # self.current_byte -= len(self.previous_bytes) + return + + if len(size) == 1: + + size = size[0] + + current_property_bytes = bytes[current_byte_index:current_byte_index+size] + property_values.append(bytes_to_element(property[1], current_property_bytes)) + current_byte_index += size + # self.current_byte += size + + elif len(size) == 2: + + types = property[1].split()[1:] + current_property_bytes = bytes[current_byte_index:current_byte_index+size[0]] + number_of_elements = bytes_to_element(types[0], current_property_bytes) + current_byte_index += size[0] + # self.current_byte += size[0] + + property_values.append([]) + + # Parse list + for i in range(number_of_elements): + + if current_byte_index + size[1] > len(bytes): + + self.previous_bytes = bytes[beginning_byte_index:] + # self.current_byte -= len(self.previous_bytes) + return + + current_property_bytes = bytes[current_byte_index:current_byte_index+size[1]] + property_values[-1].append(bytes_to_element(types[1], current_property_bytes)) + current_byte_index += size[1] + # self.current_byte += size[1] + + + else: + print('I have not idea what this means', file=sys.stderr) + + # Add element + if self.current_element.name == 'vertex': + + vertex = Vertex() + red = None + green = None + blue = None + alpha = None + offset = 0 + + for property in self.current_element.properties: + + if property[0] == 'x': + vertex.x = property_values[offset] + elif property[0] == 'y': + vertex.y = property_values[offset] + elif property[0] == 'z': + vertex.z = property_values[offset] + elif property[0] == 'red': + red = property_values[offset] / 255 + elif property[0] == 'green': + green = property_values[offset] / 255 + elif property[0] == 'blue': + blue = property_values[offset] / 255 + elif property[0] == 'alpha': + alpha = property_values[offset] / 255 + + offset += 1 + + self.parent.add_vertex(vertex) + + if red is not None: + self.parent.add_color(Color(red, blue, green)) + + elif self.current_element.name == 'face': + + vertex_indices = [] + tex_coords = [] + material = None + + for (i, property) in enumerate(self.current_element.properties): + + if property[0] == 'vertex_indices': + vertex_indices.append(property_values[i][0]) + vertex_indices.append(property_values[i][1]) + vertex_indices.append(property_values[i][2]) + + elif property[0] == 'texcoord': + # Create texture coords + for j in range(0,6,2): + tex_coord = TexCoord(*property_values[i][j:j+2]) + tex_coords.append(tex_coord) + + elif property[0] == 'texnumber': + material = self.parent.materials[property_values[i]] + + for tex_coord in tex_coords: + self.parent.add_tex_coord(tex_coord) + + face = Face(*list(map(lambda x: FaceVertex(x), vertex_indices))) + + counter = 3 + if len(tex_coords) > 0: + for face_vertex in [face.a, face.b, face.c]: + face_vertex.tex_coord = len(self.parent.tex_coords) - counter + counter -= 1 + + if material is None and len(self.parent.materials) == 1: + material = self.parent.materials[0] + + face.material = material + + self.parent.add_face(face) + + self.counter += 1 + + if self.counter == self.current_element.number: + self.next_element() + + def next_element(self): + self.counter = 0 + self.element_index += 1 + if self.element_index < len(self.parent.elements): + self.current_element = self.parent.elements[self.element_index] + + + +class PLYBigEndianContentParser(PLYLittleEndianContentParser): + def __init__(self, parent): + super().__init__(self, parent) + + def parse_bytes(self, bytes): + # Reverse bytes, and then + super().parse_bytes(self, bytes) + +class PLYExporter(Exporter): + def __init__(self, model): + super().__init__(model) + + def __str__(self): + + faces = sum([part.faces for part in self.model.parts], []) + + # Header + string = "ply\nformat ascii 1.0\ncomment Automatically gnerated by model-converter\n" + + for material in self.model.materials: + string += "comment TextureFile " + (material.relative_path_to_texture or 'None') + "\n" + + # Types : vertices + string += "element vertex " + str(len(self.model.vertices)) +"\n" + string += "property float x\nproperty float y\nproperty float z\n" + + # Types : faces + string += "element face " + str(len(faces)) + "\n" + string += "property list uchar int vertex_indices\n" + + if len(self.model.tex_coords) > 0: + string += "property list uchar float texcoord\n" + string += "property int texnumber\n" + + # End header + string += "end_header\n" + + # Content of the model + for vertex in self.model.vertices: + string += str(vertex.x) + " " + str(vertex.y) + " " + str(vertex.z) + "\n" + + for face in faces: + string += "3 " + str(face.a.vertex) + " " + str(face.b.vertex) + " " + str(face.c.vertex) + + if len(self.model.tex_coords) > 0: + string += " 6 " \ + + str(self.model.tex_coords[face.a.tex_coord].x) + " " \ + + str(self.model.tex_coords[face.a.tex_coord].y) + " " \ + + str(self.model.tex_coords[face.b.tex_coord].x) + " " \ + + str(self.model.tex_coords[face.b.tex_coord].y) + " " \ + + str(self.model.tex_coords[face.c.tex_coord].x) + " " \ + + str(self.model.tex_coords[face.c.tex_coord].y) + " " \ + + str(self.model.get_material_index(face.material)) + + string += "\n" + + return string + diff --git a/extensions/fablabchemnitz/papercraft_unfold/d3/model/formats/stl.py b/extensions/fablabchemnitz/papercraft_unfold/d3/model/formats/stl.py new file mode 100644 index 00000000..7cb367ad --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/d3/model/formats/stl.py @@ -0,0 +1,116 @@ +from ..basemodel import TextModelParser, Exporter, Vertex, FaceVertex, Face +from ..mesh import MeshPart + +import os.path + +def is_stl(filename): + """Checks that the file is a .stl file + + Only checks the extension of the file + :param filename: path to the file + """ + return filename[-4:] == '.stl' + +class STLParser(TextModelParser): + """Parser that parses a .stl file + """ + + def __init__(self, up_conversion = None): + super().__init__(up_conversion) + self.parsing_solid = False + self.parsing_face = False + self.parsing_loop = False + self.current_face = None + self.face_vertices = None + + def parse_line(self, string): + """Parses a line of .stl file + + :param string: the line to parse + """ + if string == '': + return + + split = string.split() + + if split[0] == 'solid': + self.parsing_solid = True + return + + if split[0] == 'endsolid': + self.parsing_solid = False + return + + if self.parsing_solid: + + if split[0] == 'facet' and split[1] == 'normal': + self.parsing_face = True + self.face_vertices = [FaceVertex(), FaceVertex(), FaceVertex()] + self.current_face = Face(*self.face_vertices) + return + + if self.parsing_face: + + if split[0] == 'outer' and split[1] == 'loop': + self.parsing_loop = True + return + + if split[0] == 'endloop': + self.parsing_loop = False + return + + if self.parsing_loop: + + if split[0] == 'vertex': + current_vertex = Vertex().from_array(split[1:]) + self.add_vertex(current_vertex) + self.face_vertices[0].vertex = len(self.vertices) - 1 + self.face_vertices.pop(0) + return + + if split[0] == 'endfacet': + self.parsing_face = False + self.add_face(self.current_face) + self.current_face = None + self.face_vertices = None + + +class STLExporter(Exporter): + """Exporter to .stl format + """ + def __init__(self, model): + """Creates an exporter from the model + + :param model: Model to export + """ + super().__init__(model) + super().__init__(model) + + def __str__(self): + """Exports the model + """ + string = 'solid {}\n'.format(os.path.basename(self.model.path[:-4])) + + self.model.generate_face_normals() + + faces = sum(map(lambda x: x.faces, self.model.parts), []) + + for face in faces: + + n = self.model.normals[face.a.normal] + v1 = self.model.vertices[face.a.vertex] + v2 = self.model.vertices[face.b.vertex] + v3 = self.model.vertices[face.c.vertex] + + string += "facet normal {} {} {}\n".format(n.x, n.y, n.z) + + string += "\touter loop\n" + string += "\t\tvertex {} {} {}\n".format(v1.x, v1.y, v1.z) + string += "\t\tvertex {} {} {}\n".format(v2.x, v2.y, v2.z) + string += "\t\tvertex {} {} {}\n".format(v3.x, v3.y, v3.z) + + string += "\tendloop\n" + string += "endfacet\n" + + string += 'endsolid {}'.format(os.path.basename(self.model.path[:-4])) + return string diff --git a/extensions/fablabchemnitz/papercraft_unfold/d3/model/mesh.py b/extensions/fablabchemnitz/papercraft_unfold/d3/model/mesh.py new file mode 100644 index 00000000..c47f36f1 --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/d3/model/mesh.py @@ -0,0 +1,230 @@ +class Material: + """Represents a material + + It contains its constants and its texturess. It is also usable with OpenGL + """ + def __init__(self, name): + """ Creates an empty material + + :param name: name of the material: + """ + self.name = name + self.Ka = None + self.Kd = None + self.Ks = None + self.relative_path_to_texture = None + self.absolute_path_to_texture = None + self.im = None + self.id = None + + def init_texture(self): + """ Initializes the OpenGL texture of the current material + + To be simple, calls glGenTextures and stores the given id + """ + + import OpenGL.GL as gl + + # Already initialized + if self.id is not None: + return + + # If no map_Kd, nothing to do + if self.im is None: + + if self.absolute_path_to_texture is None: + return + + try: + import PIL.Image + self.im = PIL.Image.open(self.absolute_path_to_texture) + except ImportError: + return + + try: + ix, iy, image = self.im.size[0], self.im.size[1], self.im.tobytes("raw", "RGBA", 0, -1) + except: + ix, iy, image = self.im.size[0], self.im.size[1], self.im.tobytes("raw", "RGBX", 0, -1) + + self.id = gl.glGenTextures(1) + + gl.glBindTexture(gl.GL_TEXTURE_2D, self.id) + gl.glPixelStorei(gl.GL_UNPACK_ALIGNMENT,1) + + gl.glTexImage2D( + gl.GL_TEXTURE_2D, 0, 3, ix, iy, 0, + gl.GL_RGBA, gl.GL_UNSIGNED_BYTE, image + ) + + def bind(self): + """Binds the material to OpenGL + """ + from OpenGL import GL as gl + + gl.glEnable(gl.GL_TEXTURE_2D) + gl.glTexParameterf(gl.GL_TEXTURE_2D, gl.GL_TEXTURE_MAG_FILTER, gl.GL_NEAREST) + gl.glTexParameterf(gl.GL_TEXTURE_2D, gl.GL_TEXTURE_MIN_FILTER, gl.GL_NEAREST) + gl.glTexEnvf(gl.GL_TEXTURE_ENV, gl.GL_TEXTURE_ENV_MODE, gl.GL_DECAL) + gl.glBindTexture(gl.GL_TEXTURE_2D, self.id) + + def unbind(self): + """Disables the GL_TEXTURE_2D flag of OpenGL + """ + from OpenGL import GL as gl + + gl.glDisable(gl.GL_TEXTURE_2D) + +Material.DEFAULT_MATERIAL=Material('') +"""Material that is used when no material is specified +""" +Material.DEFAULT_MATERIAL.Ka = 1.0 +Material.DEFAULT_MATERIAL.Kd = 0.0 +Material.DEFAULT_MATERIAL.Ks = 0.0 + +try: + import PIL.Image + Material.DEFAULT_MATERIAL.im = PIL.Image.new("RGBA", (1,1), "white") +except ImportError: + pass + +class MeshPart: + """A part of a 3D model that is bound to a single material + """ + def __init__(self, parent): + """Creates a mesh part + + :param parent: the global model with all the information + """ + self.parent = parent + self.material = None + self.vertex_vbo = None + self.tex_coord_vbo = None + self.normal_vbo = None + self.color_vbo = None + self.faces = [] + + def init_texture(self): + """Initializes the material of the current parent + """ + if self.material is not None: + self.material.init_texture() + + def add_face(self, face): + """Adds a face to this MeshPart + + :param face: face to add + """ + self.faces.append(face) + + def generate_vbos(self): + """Generates the vbo for this MeshPart + + Creates the arrays that are necessary for smooth rendering + """ + + from OpenGL.arrays import vbo + from numpy import array + + # Build VBO + v = [] + n = [] + t = [] + c = [] + + for face in self.faces: + v1 = self.parent.vertices[face.a.vertex] + v2 = self.parent.vertices[face.b.vertex] + v3 = self.parent.vertices[face.c.vertex] + v += [[v1.x, v1.y, v1.z], [v2.x, v2.y, v2.z], [v3.x, v3.y, v3.z]] + + if face.a.normal is not None: + n1 = self.parent.normals[face.a.normal] + n2 = self.parent.normals[face.b.normal] + n3 = self.parent.normals[face.c.normal] + n += [[n1.x, n1.y, n1.z], [n2.x, n2.y, n2.z], [n3.x, n3.y, n3.z]] + + if face.a.tex_coord is not None: + t1 = self.parent.tex_coords[face.a.tex_coord] + t2 = self.parent.tex_coords[face.b.tex_coord] + t3 = self.parent.tex_coords[face.c.tex_coord] + t += [[t1.x, t1.y], [t2.x, t2.y], [t3.x, t3.y]] + + if len(self.parent.colors) > 0: # face.a.color is not None: + c1 = self.parent.colors[face.a.vertex] + c2 = self.parent.colors[face.b.vertex] + c3 = self.parent.colors[face.c.vertex] + c += [[c1.x, c1.y, c1.z], [c2.x, c2.y, c2.z], [c3.x, c3.y, c3.z]] + + self.vertex_vbo = vbo.VBO(array(v, 'f')) + + if len(n) > 0: + self.normal_vbo = vbo.VBO(array(n, 'f')) + + if len(t) > 0: + self.tex_coord_vbo = vbo.VBO(array(t, 'f')) + + if len(c) > 0: + self.color_vbo = vbo.VBO(array(c, 'f')) + + def draw(self): + """Draws the current MeshPart + + Binds the material, and draws the model + """ + if self.material is not None: + self.material.bind() + + if self.vertex_vbo is not None: + self.draw_from_vbos() + else: + self.draw_from_arrays() + + if self.material is not None: + self.material.unbind() + + def draw_from_vbos(self): + """Simply calls the OpenGL drawArrays function + + Sets the correct vertex arrays and draws the part + """ + + import OpenGL.GL as gl + + self.vertex_vbo.bind() + gl.glEnableClientState(gl.GL_VERTEX_ARRAY); + gl.glVertexPointerf(self.vertex_vbo) + self.vertex_vbo.unbind() + + if self.normal_vbo is not None: + self.normal_vbo.bind() + gl.glEnableClientState(gl.GL_NORMAL_ARRAY) + gl.glNormalPointerf(self.normal_vbo) + self.normal_vbo.unbind() + + if self.tex_coord_vbo is not None: + + if self.material is not None: + self.material.bind() + + self.tex_coord_vbo.bind() + gl.glEnableClientState(gl.GL_TEXTURE_COORD_ARRAY) + gl.glTexCoordPointerf(self.tex_coord_vbo) + self.tex_coord_vbo.unbind() + + if self.color_vbo is not None: + self.color_vbo.bind() + gl.glEnableClientState(gl.GL_COLOR_ARRAY) + gl.glColorPointerf(self.color_vbo) + self.color_vbo.unbind() + + gl.glDrawArrays(gl.GL_TRIANGLES, 0, len(self.vertex_vbo.data) * 9) + + gl.glDisableClientState(gl.GL_VERTEX_ARRAY) + gl.glDisableClientState(gl.GL_NORMAL_ARRAY) + gl.glDisableClientState(gl.GL_TEXTURE_COORD_ARRAY) + gl.glDisableClientState(gl.GL_COLOR_ARRAY) + + + def draw_from_arrays(self): + pass + diff --git a/extensions/fablabchemnitz/papercraft_unfold/d3/model/tools.py b/extensions/fablabchemnitz/papercraft_unfold/d3/model/tools.py new file mode 100644 index 00000000..2b3ef066 --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/d3/model/tools.py @@ -0,0 +1,99 @@ +import os +from importlib import import_module + +from . import formats +from .formats import * +from .basemodel import ModelParser, Exporter + +from types import ModuleType + +supported_formats = [] + +class ModelType: + """Represents a type of coding of 3D object, and the module enabling + parsing and exporting + """ + def __init__(self, typename, inner_module): + """Creates a ModelType + + :param typename: the name of the 3D format + :param inner_module: the module that will parse and export the format + """ + self.typename = typename + self.inner_module = inner_module + + def test_type(self, file): + """Tests if a file has the correct type + + :param file: path to the file to test + """ + return getattr(self.inner_module, 'is_' + self.typename)(file) + + def create_parser(self, *args, **kwargs): + """Creates a parser of the current type + """ + return getattr(self.inner_module, self.typename.upper() + 'Parser')(*args, **kwargs) + + def create_exporter(self, *args, **kwargs): + """Creates an exporter of the current type + """ + return getattr(self.inner_module, self.typename.upper() + 'Exporter')(*args, **kwargs) + +def find_type(filename, supported_formats): + """Find the correct type from a filename + + :param filename: path to the file + :param supported_formats: list of formats that we have modules for + """ + for type in supported_formats: + if type.test_type(filename): + return type + +for name in formats.__dict__: + if isinstance(formats.__dict__[name], ModuleType) and name != 'glob': + type = ModelType(name, formats.__dict__[name]) + supported_formats.append(type) + +def load_model(path, up_conversion = None): + """Loads a model from a path + + :param path: path to the file to load + :param up_conversion: conversion of up vectors + """ + parser = None + type = find_type(path, supported_formats) + + if type is None: + raise Exception("File format not supported \"" + str(type) + "\"") + + parser = type.create_parser(up_conversion) + parser.parse_file(path) + + return parser + +def export_model(model, path): + """Exports a model to a path + + :param model: model to export + :param path: path to save the model + """ + exporter = None + type = find_type(path, supported_formats) + + if type is None: + raise Exception('File format is not supported') + + exporter = type.create_exporter(model) + return exporter + +def convert(input, output, up_conversion = None): + """Converts a model + + :param input: path of the input model + :param output: path to the output + :param up_conversion: convert the up vector + """ + model = load_model(input, up_conversion) + exporter = export_model(model, output) + return str(exporter) + diff --git a/extensions/fablabchemnitz/papercraft_unfold/d3/shader.py b/extensions/fablabchemnitz/papercraft_unfold/d3/shader.py new file mode 100644 index 00000000..e55cc7e8 --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/d3/shader.py @@ -0,0 +1,53 @@ +import os +dir_path = os.path.dirname(os.path.realpath(__file__)) + +import OpenGL.GL as gl +import OpenGL.GL.shaders as sh + +default_vertex_path = dir_path + '/../assets/shaders/shader.vert' +default_fragment_path = dir_path + '/../assets/shaders/shader.frag' + +class Shader: + """Shader + + Loads, compile and binds the shader that are in the assets/shaders + directory + """ + + def __init__(self, vertex_path = default_vertex_path, fragment_path = default_fragment_path): + """Creates a shader object, and compile it + + :param vertex_path: path to the vertex shader + :param fragment_path: path to the fragment shader + """ + with open(vertex_path) as f: + self.vertex_src = f.read() + + with open(fragment_path) as f: + self.fragment_src = f.read() + + self.compile_shaders() + self.compile_program() + + def compile_shaders(self): + """ Compiles the shader + """ + self.vertex_shader = sh.compileShader(self.vertex_src, gl.GL_VERTEX_SHADER) + self.fragment_shader = sh.compileShader(self.fragment_src, gl.GL_FRAGMENT_SHADER) + + def compile_program(self): + """Compile the shader program + + The shaders must be compiled + """ + self.program = sh.compileProgram(self.vertex_shader, self.fragment_shader) + + def bind(self): + """Bind the current shader to the OpenGL context + """ + gl.glUseProgram(self.program) + + def unbind(self): + """Reset OpenGL shader to 0 + """ + gl.glUseProgram(0) diff --git a/extensions/fablabchemnitz/papercraft_unfold/fstl/Qt5Core.dll b/extensions/fablabchemnitz/papercraft_unfold/fstl/Qt5Core.dll new file mode 100644 index 00000000..0cf12ee9 Binary files /dev/null and b/extensions/fablabchemnitz/papercraft_unfold/fstl/Qt5Core.dll differ diff --git a/extensions/fablabchemnitz/papercraft_unfold/fstl/Qt5Gui.dll b/extensions/fablabchemnitz/papercraft_unfold/fstl/Qt5Gui.dll new file mode 100644 index 00000000..289239e7 Binary files /dev/null and b/extensions/fablabchemnitz/papercraft_unfold/fstl/Qt5Gui.dll differ diff --git a/extensions/fablabchemnitz/papercraft_unfold/fstl/Qt5OpenGL.dll b/extensions/fablabchemnitz/papercraft_unfold/fstl/Qt5OpenGL.dll new file mode 100644 index 00000000..e9732770 Binary files /dev/null and b/extensions/fablabchemnitz/papercraft_unfold/fstl/Qt5OpenGL.dll differ diff --git a/extensions/fablabchemnitz/papercraft_unfold/fstl/Qt5Widgets.dll b/extensions/fablabchemnitz/papercraft_unfold/fstl/Qt5Widgets.dll new file mode 100644 index 00000000..69564682 Binary files /dev/null and b/extensions/fablabchemnitz/papercraft_unfold/fstl/Qt5Widgets.dll differ diff --git a/extensions/fablabchemnitz/papercraft_unfold/fstl/fstl b/extensions/fablabchemnitz/papercraft_unfold/fstl/fstl new file mode 100755 index 00000000..e2632a56 Binary files /dev/null and b/extensions/fablabchemnitz/papercraft_unfold/fstl/fstl differ diff --git a/extensions/fablabchemnitz/papercraft_unfold/fstl/fstl.exe b/extensions/fablabchemnitz/papercraft_unfold/fstl/fstl.exe new file mode 100644 index 00000000..c748c73a Binary files /dev/null and b/extensions/fablabchemnitz/papercraft_unfold/fstl/fstl.exe differ diff --git a/extensions/fablabchemnitz/papercraft_unfold/fstl/libEGL.dll b/extensions/fablabchemnitz/papercraft_unfold/fstl/libEGL.dll new file mode 100644 index 00000000..9e6d1b7f Binary files /dev/null and b/extensions/fablabchemnitz/papercraft_unfold/fstl/libEGL.dll differ diff --git a/extensions/fablabchemnitz/papercraft_unfold/fstl/libGLESv2.dll b/extensions/fablabchemnitz/papercraft_unfold/fstl/libGLESv2.dll new file mode 100644 index 00000000..7e6cd396 Binary files /dev/null and b/extensions/fablabchemnitz/papercraft_unfold/fstl/libGLESv2.dll differ diff --git a/extensions/fablabchemnitz/papercraft_unfold/fstl/platforms/qwindows.dll b/extensions/fablabchemnitz/papercraft_unfold/fstl/platforms/qwindows.dll new file mode 100644 index 00000000..dfce4d35 Binary files /dev/null and b/extensions/fablabchemnitz/papercraft_unfold/fstl/platforms/qwindows.dll differ diff --git a/extensions/fablabchemnitz/papercraft_unfold/papercraft_unfold.inx b/extensions/fablabchemnitz/papercraft_unfold/papercraft_unfold.inx new file mode 100644 index 00000000..89f7325e --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/papercraft_unfold.inx @@ -0,0 +1,80 @@ + + + Papercraft Unfold + fablabchemnitz.de.papercraft_unfold + + + /your/beautiful/3dmodel/file + true + true + 0.0 + + + + + + + + true + + + true + true + 0.0 + 1 + 0.0 + true + true + true + true + true + + false + false + false + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ../000_about_fablabchemnitz.svg + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/papercraft_unfold/papercraft_unfold.py b/extensions/fablabchemnitz/papercraft_unfold/papercraft_unfold.py new file mode 100644 index 00000000..8f954aa5 --- /dev/null +++ b/extensions/fablabchemnitz/papercraft_unfold/papercraft_unfold.py @@ -0,0 +1,205 @@ +#!/usr/bin/env python3 +import sys +import os +import inkex +import tempfile +import shutil + +import subprocess +from subprocess import Popen, PIPE +from lxml import etree + +#specific imports for model-converter-python - d3 library to convert obj/off/ply to stl (https://github.com/nabeel3133/file-converter-.obj-to-.ply) +import functools as fc +import d3.model.tools as mt +from d3.model.basemodel import Vector + +""" +Extension for InkScape 1.0 + +Author: Mario Voigt / FabLab Chemnitz +Mail: mario.voigt@stadtfabrikanten.org +Date: 08.09.2020 +Last patch: 25.04.2021 +License: GNU GPL v3 + +This tool converts a STL/OFF/PLY/OBJ into binary STL Format. The STL then gets unfolded (flattened) to make a papercraft model. + +################################################################# +ADMesh version 0.99.0dev +Copyright (C) 1995, 1996 Anthony D. Martin +Usage: /usr/share/inkscape/extensions/mightyscape-1.X/extensions/fablabchemnitz/papercraft/.libs/admesh [OPTION]... file + + --x-rotate=angle Rotate CCW about x-axis by angle degrees + --y-rotate=angle Rotate CCW about y-axis by angle degrees + --z-rotate=angle Rotate CCW about z-axis by angle degrees + --xy-mirror Mirror about the xy plane + --yz-mirror Mirror about the yz plane + --xz-mirror Mirror about the xz plane + --scale=factor Scale the file by factor (multiply by factor) + --scale-xyz=x,y,z Scale the file by a non uniform factor + --translate=x,y,z Translate the file to x, y, and z + --merge=name Merge file called name with input file + -e, --exact Only check for perfectly matched edges + -n, --nearby Find and connect nearby facets. Correct bad facets + -t, --tolerance=tol Initial tolerance to use for nearby check = tol + -i, --iterations=i Number of iterations for nearby check = i + -m, --increment=inc Amount to increment tolerance after iteration=inc + -u, --remove-unconnected Remove facets that have 0 neighbors + -f, --fill-holes Add facets to fill holes + -d, --normal-directions Check and fix direction of normals(ie cw, ccw) + --reverse-all Reverse the directions of all facets and normals + -v, --normal-values Check and fix normal values + -c, --no-check Don't do any check on input file + -b, --write-binary-stl=name Output a binary STL file called name + -a, --write-ascii-stl=name Output an ascii STL file called name + --write-off=name Output a Geomview OFF format file called name + --write-dxf=name Output a DXF format file called name + --write-vrml=name Output a VRML format file called name + --help Display this help and exit + --version Output version information and exit + +The functions are executed in the same order as the options shown here. +So check here to find what happens if, for example, --translate and --merge +options are specified together. The order of the options specified on the +command line is not important. + +NOTE: If admesh on linux fails just run "make clean && make" to re-create the executable. There error could be like +"papercraft_unfold/admesh/linux/.libs/admesh: error while loading shared libraries: libadmesh.so.1: cannot open shared object file: No such file or directory" +admesh is sensible for moving from one dir to another + +################################################################# +Module licenses +- papercraft - 26307b8 (https://github.com/osresearch/papercraft) - GPL v2 License +- admesh - 0.98.3 (https://github.com/admesh/admesh) - GPL License +- fstl - (https://github.com/fstl-app/fstl) - MIT License +""" + +class PapercraftUnfold(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument("--tab") + pars.add_argument("--inputfile") + pars.add_argument("--generatelabels", type=inkex.Boolean, default=True, help="Generate labels for edges") + pars.add_argument("--resizetoimport", type=inkex.Boolean, default=True, help="Resize the canvas to the imported drawing's bounding box") + pars.add_argument("--extraborder", type=float, default=0.0) + pars.add_argument("--extraborder_units") + pars.add_argument("--show_fstl", type=inkex.Boolean, default=True, help="Show converted (and fixed) STL in fstl Viewer") + pars.add_argument("--exact", type=inkex.Boolean, default=True, help="Only check for perfectly matched edges") + pars.add_argument("--nearby", type=inkex.Boolean, default=True, help="Find and connect nearby facets. Correct bad facets") + pars.add_argument("--tolerance", type=float, default=0.0, help="Initial tolerance to use for nearby check") + pars.add_argument("--iterations", type=int, default=1, help="Number of iterations for nearby check") + pars.add_argument("--increment", type=float, default=0.0, help="Amount to increment tolerance after iteration") + pars.add_argument("--remove_unconnected", type=inkex.Boolean, default=True, help="Remove facets that have 0 neighbors") + pars.add_argument("--fill_holes", type=inkex.Boolean, default=True, help="Add facets to fill holes") + pars.add_argument("--normal_directions", type=inkex.Boolean, default=True, help="Check and fix direction of normals (ie cw, ccw)") + pars.add_argument("--reverse_all", type=inkex.Boolean, default=True, help="Reverse the directions of all facets and normals") + pars.add_argument("--normal_values", type=inkex.Boolean, default=True, help="Check and fix normal values") + pars.add_argument("--xy_mirror", type=inkex.Boolean, default=True) + pars.add_argument("--yz_mirror", type=inkex.Boolean, default=True) + pars.add_argument("--xz_mirror", type=inkex.Boolean, default=True) + pars.add_argument("--scale", type=float, default=1.0) + + def effect(self): + inputfile = self.options.inputfile + if not os.path.exists(inputfile): + inkex.utils.debug("The input file does not exist. Please select a proper file and try again.") + exit(1) + converted_inputfile = os.path.join(tempfile.gettempdir(), os.path.splitext(os.path.basename(inputfile))[0] + ".stl") + if os.path.exists(converted_inputfile): + os.remove(converted_inputfile) #remove previously generated conversion file + up_conversion = None + + try: + with open(converted_inputfile, 'w') as f: + f.write(mt.convert(inputfile, converted_inputfile, up_conversion)) + except UnicodeDecodeError as e: #conversion failed. Maybe it was a binary STL. Skipping and regular copy + shutil.copy2(inputfile, converted_inputfile) + + + # Run ADMesh mesh fixer to overwrite the STL with fixed output and binary file format for osresearch/papercraft + if os.name=="nt": + admesh_cmd = "admesh\\windows\\admesh.exe " + else: + admesh_cmd = "./admesh/linux/admesh " + + if self.options.xy_mirror == True: admesh_cmd += "--xy-mirror " + if self.options.yz_mirror == True: admesh_cmd += "--yz-mirror " + if self.options.xz_mirror == True: admesh_cmd += "--xz-mirror " + if self.options.scale != 1.0: admesh_cmd += "--scale " + str(self.options.scale) + " " + if self.options.exact == True: admesh_cmd += "--exact " + if self.options.nearby == True: admesh_cmd += "--nearby " + if self.options.tolerance > 0.0: admesh_cmd += "--tolerance " + str(self.options.tolerance) + " " + if self.options.iterations > 1: admesh_cmd += "--iterations " + str(self.options.iterations) + " " + if self.options.increment > 0.0: admesh_cmd += "--increment " + str(self.options.increment) + " " + if self.options.remove_unconnected == True: admesh_cmd += "--remove-unconnected " + if self.options.normal_directions == True: admesh_cmd += "--normal-directions " + if self.options.fill_holes == True: admesh_cmd += "--fill-holes " + if self.options.reverse_all == True: admesh_cmd += "--reverse-all " + if self.options.normal_values == True: admesh_cmd += "--normal-values " + admesh_cmd += "\"" + converted_inputfile + "\" " + admesh_cmd += "-b \"" + converted_inputfile + "\"" + p = Popen(admesh_cmd, shell=True, stdout=PIPE, stderr=PIPE) + stdout, stderr = p.communicate() + p.wait() + if p.returncode != 0: + inkex.utils.debug("admesh failed: %d %s %s" % (p.returncode, stdout, stderr)) + exit(1) + + # Run papercraft flattening + converted_flattenfile = os.path.join(tempfile.gettempdir(), os.path.splitext(os.path.basename(inputfile))[0] + ".svg") + if os.path.exists(converted_flattenfile): + os.remove(converted_flattenfile) #remove previously generated conversion file + if self.options.generatelabels: + unfold_exec = "unfold_labels" + else: + unfold_exec = "unfold_nolabels" + if os.name=="nt": + papercraft_cmd = "unfold\\" + unfold_exec + ".exe" + " < \"" + converted_inputfile + "\" > \"" + converted_flattenfile + "\"" + else: + papercraft_cmd = "./unfold/" + unfold_exec + " < \"" + converted_inputfile + "\" > \"" + converted_flattenfile + "\"" + p = Popen(papercraft_cmd, shell=True, stdout=PIPE, stderr=PIPE) + stdout, stderr = p.communicate() + p.wait() + if p.returncode != 0: + inkex.utils.debug("osresearch/papercraft unfold failed: %d %s %s" % (p.returncode, stdout, stderr)) + + # Open converted output in fstl + if self.options.show_fstl == True: + if os.name=="nt": + fstl_cmd = "fstl\\fstl.exe \"" + converted_inputfile + "\"" + else: + fstl_cmd = "./fstl/fstl \"" + converted_inputfile + "\"" + p = Popen(fstl_cmd, shell=True) + p.wait() + + # Write the generated SVG into InkScape's canvas + try: + stream = open(converted_flattenfile, 'r') + except FileNotFoundError as e: + inkex.utils.debug("There was no SVG output generated. Cannot continue") + exit(1) + p = etree.XMLParser(huge_tree=True) + try: + doc = etree.parse(stream, parser=etree.XMLParser(huge_tree=True)).getroot() + except BaseException as e: + self.msg("Error: STL could not be unfolded") + exit(1) + finally: + stream.close() + + doc.set('id', self.svg.get_unique_id('papercraft_unfold')) + self.document.getroot().append(doc) + + #adjust viewport and width/height to have the import at the center of the canvas + if self.options.resizetoimport: + bbox = inkex.elements._selected.ElementList.bounding_box(doc) + if bbox is not None: + root = self.svg.getElement('//svg:svg'); + offset = self.svg.unittouu(str(self.options.extraborder) + self.options.extraborder_units) + root.set('viewBox', '%f %f %f %f' % (bbox.left - offset, bbox.top - offset, bbox.width + 2 * offset, bbox.height + 2 * offset)) + root.set('width', bbox.width + 2 * offset) + root.set('height', bbox.height + 2 * offset) + +if __name__ == '__main__': + PapercraftUnfold().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/papercraft_unfold/unfold/cygwin1.dll b/extensions/fablabchemnitz/papercraft_unfold/unfold/cygwin1.dll new file mode 100644 index 00000000..6998051c Binary files /dev/null and b/extensions/fablabchemnitz/papercraft_unfold/unfold/cygwin1.dll differ diff --git a/extensions/fablabchemnitz/papercraft_unfold/unfold/unfold_labels b/extensions/fablabchemnitz/papercraft_unfold/unfold/unfold_labels new file mode 100755 index 00000000..3b93c23f Binary files /dev/null and b/extensions/fablabchemnitz/papercraft_unfold/unfold/unfold_labels differ diff --git a/extensions/fablabchemnitz/papercraft_unfold/unfold/unfold_labels.exe b/extensions/fablabchemnitz/papercraft_unfold/unfold/unfold_labels.exe new file mode 100644 index 00000000..8cc75d7f Binary files /dev/null and b/extensions/fablabchemnitz/papercraft_unfold/unfold/unfold_labels.exe differ diff --git a/extensions/fablabchemnitz/papercraft_unfold/unfold/unfold_nolabels b/extensions/fablabchemnitz/papercraft_unfold/unfold/unfold_nolabels new file mode 100755 index 00000000..e0afb53d Binary files /dev/null and b/extensions/fablabchemnitz/papercraft_unfold/unfold/unfold_nolabels differ diff --git a/extensions/fablabchemnitz/papercraft_unfold/unfold/unfold_nolabels.exe b/extensions/fablabchemnitz/papercraft_unfold/unfold/unfold_nolabels.exe new file mode 100644 index 00000000..a2be5eab Binary files /dev/null and b/extensions/fablabchemnitz/papercraft_unfold/unfold/unfold_nolabels.exe differ diff --git a/extensions/fablabchemnitz/paperfold/paperfold.inx b/extensions/fablabchemnitz/paperfold/paperfold.inx new file mode 100644 index 00000000..fbcf899c --- /dev/null +++ b/extensions/fablabchemnitz/paperfold/paperfold.inx @@ -0,0 +1,108 @@ + + + Paperfold + fablabchemnitz.de.paperfold + + + + /your/beautiful/3dmodel/file + 200 + 1.0 + 3 + + + + + false + false + false + false + false + false + false + true + 0.0 + + + + + + + + false + ./inkscape_export/ + + + + + 15 + false + true + true + + + + + + false + 255 + 1943148287 + 3422552319 + 879076607 + + + + + + + false + + + + + + + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ../000_about_fablabchemnitz.svg + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/paperfold/paperfold.py b/extensions/fablabchemnitz/paperfold/paperfold.py new file mode 100644 index 00000000..1026981b --- /dev/null +++ b/extensions/fablabchemnitz/paperfold/paperfold.py @@ -0,0 +1,981 @@ +#!/usr/bin/env python3 +import math +import inkex +from inkex import Transform, TextElement, Tspan, Color, Circle, PathElement, CubicSuperPath +import tempfile +import os +import random +import numpy as np +import openmesh as om +import networkx as nx +from lxml import etree +import copy + +""" +Extension for InkScape 1.0 + +Paperfold is another flattener for triangle mesh files, heavily based on paperfoldmodels by Felix Scholz aka felixfeliz. + +Author: Mario Voigt / FabLab Chemnitz +Mail: mario.voigt@stadtfabrikanten.org +Date: 13.09.2020 +Last patch: 10.05.2021 +License: GNU GPL v3 + +To run this you need to install OpenMesh with python pip. + +The algorithm of paperfoldmodels consists of three steps: + - Find a minimum spanning tree of the dual graph of the mesh. + - Unfold the dual graph. + - Remove self-intersections by adding additional cuts along edges. + +Reference: The code is mostly based on the algorithm presented in a by Straub and Prautzsch (https://geom.ivd.kit.edu/downloads/proj-paper-models_cut_out_sheets.pdf). + +Module licenses +- paperfoldmodels (https://github.com/felixfeliz/paperfoldmodels) - MIT License + +possible import file types -> https://www.graphics.rwth-aachen.de/media/openmesh_static/Documentations/OpenMesh-8.0-Documentation/a04096.html + +todo: +- option to render all triangles in a detached way (overlapping lines/independent) + merge coplanar adjacent triangles to polygons +- write tab and slot generator (like joinery/polyhedra extension) +- fstl preview +- fix line: dualGraph.add_edge(face1.idx(), face2.idx(), idx=edge.idx(), weight=edgeweight) # #might fail without throwing any error (silent aborts) ... +- option to set fill color per face +- add some way to merge coplanar triangles (tri-faces) to polygons and keep those polygons (facets) intact. At the moment facets are getting destroyed. Not good for some papercrafts +""" + +class Paperfold(inkex.EffectExtension): + + angleRangeCalculated = False #set to true after first calculation iteration (needed globally) + minAngle = 0 + minAngle = 0 + angleRange = 0 + + # Compute the third point of a triangle when two points and all edge lengths are given + def getThirdPoint(self, v0, v1, l01, l12, l20): + v2rotx = (l01 ** 2 + l20 ** 2 - l12 ** 2) / (2 * l01) + v2roty0 = np.sqrt((l01 + l20 + l12) * (l01 + l20 - l12) * (l01 - l20 + l12) * (-l01 + l20 + l12)) / (2 * l01) + + v2roty1 = - v2roty0 + + theta = np.arctan2(v1[1] - v0[1], v1[0] - v0[0]) + + v2trans0 = np.array( + [v2rotx * np.cos(theta) - v2roty0 * np.sin(theta), v2rotx * np.sin(theta) + v2roty0 * np.cos(theta), 0]) + v2trans1 = np.array( + [v2rotx * np.cos(theta) - v2roty1 * np.sin(theta), v2rotx * np.sin(theta) + v2roty1 * np.cos(theta), 0]) + return [v2trans0 + v0, v2trans1 + v0] + + + # Check if two lines intersect + + + def lineIntersection(self, v1, v2, v3, v4, epsilon): + d = (v4[1] - v3[1]) * (v2[0] - v1[0]) - (v4[0] - v3[0]) * (v2[1] - v1[1]) + u = (v4[0] - v3[0]) * (v1[1] - v3[1]) - (v4[1] - v3[1]) * (v1[0] - v3[0]) + v = (v2[0] - v1[0]) * (v1[1] - v3[1]) - (v2[1] - v1[1]) * (v1[0] - v3[0]) + if d < 0: + u, v, d = -u, -v, -d + return ((0 + epsilon) <= u <= (d - epsilon)) and ((0 + epsilon) <= v <= (d - epsilon)) + + # Check if a point lies inside a triangle + + + def pointInTriangle(self, A, B, C, P, epsilon): + v0 = [C[0] - A[0], C[1] - A[1]] + v1 = [B[0] - A[0], B[1] - A[1]] + v2 = [P[0] - A[0], P[1] - A[1]] + cross = lambda u, v: u[0] * v[1] - u[1] * v[0] + u = cross(v2, v0) + v = cross(v1, v2) + d = cross(v1, v0) + if d < 0: + u, v, d = -u, -v, -d + return u >= (0 + epsilon) and v >= (0 + epsilon) and (u + v) <= (d - epsilon) + + + # Check if two triangles intersect + + + def triangleIntersection(self, t1, t2, epsilon): + if self.lineIntersection(t1[0], t1[1], t2[0], t2[1], epsilon): return True + if self.lineIntersection(t1[0], t1[1], t2[0], t2[2], epsilon): return True + if self.lineIntersection(t1[0], t1[1], t2[1], t2[2], epsilon): return True + if self.lineIntersection(t1[0], t1[2], t2[0], t2[1], epsilon): return True + if self.lineIntersection(t1[0], t1[2], t2[0], t2[2], epsilon): return True + if self.lineIntersection(t1[0], t1[2], t2[1], t2[2], epsilon): return True + if self.lineIntersection(t1[1], t1[2], t2[0], t2[1], epsilon): return True + if self.lineIntersection(t1[1], t1[2], t2[0], t2[2], epsilon): return True + if self.lineIntersection(t1[1], t1[2], t2[1], t2[2], epsilon): return True + inTri = True + inTri = inTri and self.pointInTriangle(t1[0], t1[1], t1[2], t2[0], epsilon) + inTri = inTri and self.pointInTriangle(t1[0], t1[1], t1[2], t2[1], epsilon) + inTri = inTri and self.pointInTriangle(t1[0], t1[1], t1[2], t2[2], epsilon) + if inTri == True: return True + inTri = True + inTri = inTri and self.pointInTriangle(t2[0], t2[1], t2[2], t1[0], epsilon) + inTri = inTri and self.pointInTriangle(t2[0], t2[1], t2[2], t1[1], epsilon) + inTri = inTri and self.pointInTriangle(t2[0], t2[1], t2[2], t1[2], epsilon) + if inTri == True: return True + return False + + + # Functions for visualisation and output + + + def addVisualisationData(self, mesh, unfoldedMesh, originalHalfedges, unfoldedHalfedges, glueNumber, dihedralAngles): + for i in range(3): + dihedralAngles[unfoldedMesh.edge_handle(unfoldedHalfedges[i]).idx()] = round(math.degrees(mesh.calc_dihedral_angle(originalHalfedges[i])), self.options.roundingDigits) + # Information, which edges belong together + glueNumber[unfoldedMesh.edge_handle(unfoldedHalfedges[i]).idx()] = mesh.edge_handle(originalHalfedges[i]).idx() + + # Function that unwinds a spanning tree + def unfoldSpanningTree(self, mesh, spanningTree): + try: + unfoldedMesh = om.TriMesh() # the unfolded mesh + + numFaces = mesh.n_faces() + sizeTree = spanningTree.number_of_edges() + numUnfoldedEdges = 3 * numFaces - sizeTree + + isFoldingEdge = np.zeros(numUnfoldedEdges, dtype=bool) # Indicates whether an edge is folded or cut + glueNumber = np.empty(numUnfoldedEdges, dtype=int) # Saves with which edge is glued together + dihedralAngles = np.empty(numUnfoldedEdges, dtype=float) # Valley folding or mountain folding + connections = np.empty(numFaces, dtype=int) # Saves which original triangle belongs to the unrolled one + + # Select the first triangle as desired + startingNode = list(spanningTree.nodes())[0] + startingTriangle = mesh.face_handle(startingNode) + + # We unwind the first triangle + + # All half edges of the first triangle + firstHalfEdge = mesh.halfedge_handle(startingTriangle) + secondHalfEdge = mesh.next_halfedge_handle(firstHalfEdge) + thirdHalfEdge = mesh.next_halfedge_handle(secondHalfEdge) + originalHalfEdges = [firstHalfEdge, secondHalfEdge, thirdHalfEdge] + + # Calculate the lengths of the edges, this will determine the shape of the triangle (congruence) + edgelengths = [mesh.calc_edge_length(firstHalfEdge), mesh.calc_edge_length(secondHalfEdge), + mesh.calc_edge_length(thirdHalfEdge)] + + # The first two points + firstUnfoldedPoint = np.array([0, 0, 0]) + secondUnfoldedPoint = np.array([edgelengths[0], 0, 0]) + + # We calculate the third point of the triangle from the first two. There are two possibilities + [thirdUnfolded0, thirdUnfolded1] = self.getThirdPoint(firstUnfoldedPoint, secondUnfoldedPoint, edgelengths[0], + edgelengths[1], + edgelengths[2]) + if thirdUnfolded0[1] > 0: + thirdUnfoldedPoint = thirdUnfolded0 + else: + thirdUnfoldePoint = thirdUnfolded1 + + # Add the new corners to the unwound net + firstUnfoldedVertex = unfoldedMesh.add_vertex(secondUnfoldedPoint) + secondUnfoldedVertex = unfoldedMesh.add_vertex(thirdUnfoldedPoint) + thirdUnfoldedVertex = unfoldedMesh.add_vertex(firstUnfoldedPoint) + + #firstUnfoldedVertex = unfoldedMesh.add_vertex(firstUnfoldedPoint) + #secondUnfoldedVertex = unfoldedMesh.add_vertex(secondUnfoldedPoint) + #thirdUnfoldedVertex = unfoldedMesh.add_vertex(thirdUnfoldedPoint) + + # Create the page + unfoldedFace = unfoldedMesh.add_face(firstUnfoldedVertex, secondUnfoldedVertex, thirdUnfoldedVertex) + + # Memory properties of the surface and edges + # The half edges in unrolled mesh + firstUnfoldedHalfEdge = unfoldedMesh.opposite_halfedge_handle(unfoldedMesh.halfedge_handle(firstUnfoldedVertex)) + secondUnfoldedHalfEdge = unfoldedMesh.next_halfedge_handle(firstUnfoldedHalfEdge) + thirdUnfoldedHalfEdge = unfoldedMesh.next_halfedge_handle(secondUnfoldedHalfEdge) + + unfoldedHalfEdges = [firstUnfoldedHalfEdge, secondUnfoldedHalfEdge, thirdUnfoldedHalfEdge] + + # Associated triangle in 3D mesh + connections[unfoldedFace.idx()] = startingTriangle.idx() + # Folding direction and adhesive number + self.addVisualisationData(mesh, unfoldedMesh, originalHalfEdges, unfoldedHalfEdges, glueNumber, dihedralAngles) + + if self.angleRangeCalculated is False: + self.minAngle = min(dihedralAngles) + self.maxAngle = max(dihedralAngles) + #sometimes weird large value are returned, like -34345645435464565453356788761029782 + if self.minAngle < -180.0: + self.minAngle = -180.0 + if self.maxAngle > 180.0: + self.maxAngle = 180.0 + self.angleRange = self.maxAngle - self.minAngle + #self.msg(minAngle) + #self.msg(maxAngle) + #self.msg(angleRange) + self.angleRangeCalculated = True + + halfEdgeConnections = {firstHalfEdge.idx(): firstUnfoldedHalfEdge.idx(), + secondHalfEdge.idx(): secondUnfoldedHalfEdge.idx(), + thirdHalfEdge.idx(): thirdUnfoldedHalfEdge.idx()} + + # We walk through the tree + for dualEdge in nx.dfs_edges(spanningTree, source=startingNode): + foldingEdge = mesh.edge_handle(spanningTree[dualEdge[0]][dualEdge[1]]['idx']) + # Find the corresponding half edge in the output triangle + foldingHalfEdge = mesh.halfedge_handle(foldingEdge, 0) + if not (mesh.face_handle(foldingHalfEdge).idx() == dualEdge[0]): + foldingHalfEdge = mesh.halfedge_handle(foldingEdge, 1) + + # Find the corresponding unwound half edge + unfoldedLastHalfEdge = unfoldedMesh.halfedge_handle(halfEdgeConnections[foldingHalfEdge.idx()]) + + # Find the point in the unrolled triangle that is not on the folding edge + oppositeUnfoldedVertex = unfoldedMesh.to_vertex_handle(unfoldedMesh.next_halfedge_handle(unfoldedLastHalfEdge)) + + # We turn the half edges over to lie in the new triangle + foldingHalfEdge = mesh.opposite_halfedge_handle(foldingHalfEdge) + unfoldedLastHalfEdge = unfoldedMesh.opposite_halfedge_handle(unfoldedLastHalfEdge) + + # The two corners of the folding edge + unfoldedFromVertex = unfoldedMesh.from_vertex_handle(unfoldedLastHalfEdge) + unfoldedToVertex = unfoldedMesh.to_vertex_handle(unfoldedLastHalfEdge) + + # Calculate the edge lengths in the new triangle + secondHalfEdgeInFace = mesh.next_halfedge_handle(foldingHalfEdge) + thirdHalfEdgeInFace = mesh.next_halfedge_handle(secondHalfEdgeInFace) + + originalHalfEdges = [foldingHalfEdge, secondHalfEdgeInFace, thirdHalfEdgeInFace] + + edgelengths = [mesh.calc_edge_length(foldingHalfEdge), mesh.calc_edge_length(secondHalfEdgeInFace), + mesh.calc_edge_length(thirdHalfEdgeInFace)] + + # We calculate the two possibilities for the third point in the triangle + [newUnfoldedVertex0, newUnfoldedVertex1] = self.getThirdPoint(unfoldedMesh.point(unfoldedFromVertex), + unfoldedMesh.point(unfoldedToVertex), edgelengths[0], + edgelengths[1], edgelengths[2]) + + + newUnfoldedVertex = unfoldedMesh.add_vertex(newUnfoldedVertex0) + + # Make the face + newface = unfoldedMesh.add_face(unfoldedFromVertex, unfoldedToVertex, newUnfoldedVertex) + + secondUnfoldedHalfEdge = unfoldedMesh.next_halfedge_handle(unfoldedLastHalfEdge) + thirdUnfoldedHalfEdge = unfoldedMesh.next_halfedge_handle(secondUnfoldedHalfEdge) + unfoldedHalfEdges = [unfoldedLastHalfEdge, secondUnfoldedHalfEdge, thirdUnfoldedHalfEdge] + + # Saving the information about edges and page + # Dotted one's in the output + unfoldedLastEdge = unfoldedMesh.edge_handle(unfoldedLastHalfEdge) + isFoldingEdge[unfoldedLastEdge.idx()] = True + + # Gluing number and folding direction + self.addVisualisationData(mesh, unfoldedMesh, originalHalfEdges, unfoldedHalfEdges, glueNumber, dihedralAngles) + + # Related page + connections[newface.idx()] = dualEdge[1] + + # Identify the half edges + for i in range(3): + halfEdgeConnections[originalHalfEdges[i].idx()] = unfoldedHalfEdges[i].idx() + + return [unfoldedMesh, isFoldingEdge, connections, glueNumber, dihedralAngles] + except Exception as e: + inkex.utils.debug("Error: model could not be unfolded. Check for:") + inkex.utils.debug(" - watertight model / intact hull") + inkex.utils.debug(" - duplicated edges or faces") + inkex.utils.debug(" - detached faces or holes") + inkex.utils.debug(" - missing units") + inkex.utils.debug(" - missing coordinate system") + inkex.utils.debug(" - multiple bodies in one file") + inkex.utils.debug("error was: " + str(e)) + exit(1) + + + def unfold(self, mesh): + # Calculate the number of surfaces, edges and corners, as well as the length of the longest shortest edge + numEdges = mesh.n_edges() + numVertices = mesh.n_vertices() + numFaces = mesh.n_faces() + + if numFaces > self.options.maxNumFaces: + inkex.utils.debug("Aborted. Target STL file has " + str(numFaces) + " faces, but only " + str( self.options.maxNumFaces) + " are allowed.") + exit(1) + + if self.options.printStats is True: + inkex.utils.debug("Input STL mesh stats:") + inkex.utils.debug("* Number of edges: " + str(numEdges)) + inkex.utils.debug("* Number of vertices: " + str(numVertices)) + inkex.utils.debug("* Number of faces: " + str(numFaces)) + inkex.utils.debug("-----------------------------------------------------------") + + # Generate the dual graph of the mesh and calculate the weights + dualGraph = nx.Graph() + + # For the weights: calculate the longest and shortest edge of the triangle + minLength = 1000 + maxLength = 0 + for edge in mesh.edges(): + edgelength = mesh.calc_edge_length(edge) + if edgelength < minLength: + minLength = edgelength + if edgelength > maxLength: + maxLength = edgelength + + # All edges in the net + for edge in mesh.edges(): + #inkex.utils.debug("edge.idx = " + str(edge.idx())) + + # The two sides adjacent to the edge + face1 = mesh.face_handle(mesh.halfedge_handle(edge, 0)) + face2 = mesh.face_handle(mesh.halfedge_handle(edge, 1)) + + # The weight + edgeweight = 1.0 - (mesh.calc_edge_length(edge) - minLength) / (maxLength - minLength) + + if self.options.experimentalWeights is True: + if round(math.degrees(mesh.calc_dihedral_angle(edge)), self.options.roundingDigits) > 0: + edgeweight = 1.0 - (mesh.calc_edge_length(edge) - minLength) / (maxLength - minLength) + if round(math.degrees(mesh.calc_dihedral_angle(edge)), self.options.roundingDigits) < 0: + edgeweight = -(1.0 - (mesh.calc_edge_length(edge) - minLength) / (maxLength - minLength)) + if round(math.degrees(mesh.calc_dihedral_angle(edge)), self.options.roundingDigits) == 0: + edgeweight = 0.0 + + #inkex.utils.debug("edgeweight = " + str(edgeweight)) + # Calculate the centres of the pages (only necessary for visualisation) + center1 = (0, 0) + for vertex in mesh.fv(face1): + center1 = center1 + 0.3333333333333333 * np.array([mesh.point(vertex)[0], mesh.point(vertex)[2]]) + center2 = (0, 0) + for vertex in mesh.fv(face2): + center2 = center2 + 0.3333333333333333 * np.array([mesh.point(vertex)[0], mesh.point(vertex)[2]]) + + # Add the new nodes and edge to the dual graph + dualGraph.add_node(face1.idx(), pos=center1) + dualGraph.add_node(face2.idx(), pos=center2) + dualGraph.add_edge(face1.idx(), face2.idx(), idx=edge.idx(), weight=edgeweight) # #might fail without throwing any error ... + + # Calculate the minimum spanning tree + spanningTree = nx.minimum_spanning_tree(dualGraph) + + # Unfold the tree + fullUnfolding = self.unfoldSpanningTree(mesh, spanningTree) + [unfoldedMesh, isFoldingEdge, connections, glueNumber, dihedralAngles] = fullUnfolding + + + # Resolve the intersections + # Find all intersections + epsilon = 1E-12 # Accuracy + faceIntersections = [] + for face1 in unfoldedMesh.faces(): + for face2 in unfoldedMesh.faces(): + if face2.idx() < face1.idx(): # so that we do not double check the couples + # Get the triangle faces + triangle1 = [] + triangle2 = [] + for halfedge in unfoldedMesh.fh(face1): + triangle1.append(unfoldedMesh.point(unfoldedMesh.from_vertex_handle(halfedge))) + for halfedge in unfoldedMesh.fh(face2): + triangle2.append(unfoldedMesh.point(unfoldedMesh.from_vertex_handle(halfedge))) + if self.triangleIntersection(triangle1, triangle2, epsilon): + faceIntersections.append([connections[face1.idx()], connections[face2.idx()]]) + + # Find the paths + # We find the minimum number of cuts to resolve any self-intersection + + # Search all paths between overlapping triangles + paths = [] + for intersection in faceIntersections: + paths.append( + nx.algorithms.shortest_paths.shortest_path(spanningTree, source=intersection[0], target=intersection[1])) + + # Find all edges in all threads + edgepaths = [] + for path in paths: + edgepath = [] + for i in range(len(path) - 1): + edgepath.append((path[i], path[i + 1])) + edgepaths.append(edgepath) + + # List of all edges in all paths + allEdgesInPaths = list(set().union(*edgepaths)) + + # Count how often each edge occurs + numEdgesInPaths = [] + for edge in allEdgesInPaths: + num = 0 + for path in edgepaths: + if edge in path: + num = num + 1 + numEdgesInPaths.append(num) + + S = [] + C = [] + + while len(C) != len(paths): + # Calculate the weights to decide which edge to cut + cutWeights = np.empty(len(allEdgesInPaths)) + for i in range(len(allEdgesInPaths)): + currentEdge = allEdgesInPaths[i] + + # Count how many of the paths in which the edge occurs have already been cut + numInC = 0 + for path in C: + if currentEdge in path: + numInC = numInC + 1 + + # Determine the weight + if (numEdgesInPaths[i] - numInC) > 0: + cutWeights[i] = 1 / (numEdgesInPaths[i] - numInC) + else: + cutWeights[i] = 1000 # 1000 = infinite + # Find the edge with the least weight + minimalIndex = np.argmin(cutWeights) + S.append(allEdgesInPaths[minimalIndex]) + # Find all paths where the edge occurs and add them to C + for path in edgepaths: + if allEdgesInPaths[minimalIndex] in path and not path in C: + C.append(path) + + # Now we remove the cut edges from the minimum spanning tree + spanningTree.remove_edges_from(S) + + # Find the cohesive components + connectedComponents = nx.algorithms.components.connected_components(spanningTree) + connectedComponentList = list(connectedComponents) + + # Unfolding of the components + unfoldings = [] + for component in connectedComponentList: + unfoldings.append(self.unfoldSpanningTree(mesh, spanningTree.subgraph(component))) + + + return fullUnfolding, unfoldings + + + def findBoundingBox(self, mesh): + firstpoint = mesh.point(mesh.vertex_handle(0)) + xmin = firstpoint[0] + xmax = firstpoint[0] + ymin = firstpoint[1] + ymax = firstpoint[1] + for vertex in mesh.vertices(): + coordinates = mesh.point(vertex) + if (coordinates[0] < xmin): + xmin = coordinates[0] + if (coordinates[0] > xmax): + xmax = coordinates[0] + if (coordinates[1] < ymin): + ymin = coordinates[1] + if (coordinates[1] > ymax): + ymax = coordinates[1] + boxSize = np.maximum(np.abs(xmax - xmin), np.abs(ymax - ymin)) + + return [xmin, ymin, boxSize] + + + def writeSVG(self, unfolding, size, randomColorSet): + mesh = unfolding[0] + isFoldingEdge = unfolding[1] + glueNumber = unfolding[3] + dihedralAngles = unfolding[4] + + #statistic values + gluePairs = 0 + cuts = 0 + coplanarEdges = 0 + mountainFolds = 0 + valleyFolds = 0 + + # Calculate the bounding box + [xmin, ymin, boxSize] = self.findBoundingBox(unfolding[0]) + + if size > 0: + boxSize = size + + strokewidth = boxSize * self.options.fontSize / 8000 + dashLength = boxSize * self.options.fontSize / 2000 + spaceLength = boxSize * self.options.fontSize / 800 + textDistance = boxSize * self.options.fontSize / 800 + textStrokeWidth = boxSize * self.options.fontSize / 3000 + fontsize = boxSize * self.options.fontSize / 1000 + + # Grouping + uniqueMainId = self.svg.get_unique_id("") + + paperfoldPageGroup = self.document.getroot().add(inkex.Group(id=uniqueMainId + "-paperfold-page")) + + textGroup = inkex.Group(id=uniqueMainId + "-text") + edgesGroup = inkex.Group(id=uniqueMainId + "-edges") + paperfoldPageGroup.add(textGroup) + paperfoldPageGroup.add(edgesGroup) + + textFacesGroup = inkex.Group(id=uniqueMainId + "-textFaces") + textEdgesGroup = inkex.Group(id=uniqueMainId + "-textEdges") + textGroup.add(textFacesGroup) + textGroup.add(textEdgesGroup) + + #we could write the unfolded mesh as a 2D stl file to disk if we like: + if self.options.writeTwoDSTL is True: + if not os.path.exists(self.options.TwoDSTLdir): + inkex.utils.debug("Export location for 2D STL unfoldings does not exist. Please select a another dir and try again.") + exit(1) + else: + om.write_mesh(os.path.join(self.options.TwoDSTLdir, uniqueMainId + "-paperfold-page.stl"), mesh) + + + ######################################################### + # Nmbering triangle faces with circle around + ######################################################### + if self.options.printTriangleNumbers is True: + for face in mesh.faces(): + centroid = mesh.calc_face_centroid(face) + textFaceGroup = inkex.Group(id=uniqueMainId + "-textFace-" + str(face.idx())) + + circle = textFaceGroup.add(Circle(cx="{:0.6f}".format(centroid[0]), cy="{:0.6f}".format(centroid[1]), r="{:0.6f}".format(fontsize))) + circle.set('id', uniqueMainId + "-textFaceCricle-" + str(face.idx())) + circle.set("style", "stroke:#000000;stroke-width:{:0.6f}".format(strokewidth/2) + ";fill:none") + + text = textFaceGroup.add(TextElement(id=uniqueMainId + "-textFaceNumber-" + str(face.idx()))) + text.set("x", "{:0.6f}".format(centroid[0])) + text.set("y", "{:0.6f}".format(centroid[1] + fontsize / 3)) + text.set("font-size", "{:0.6f}".format(fontsize)) + text.set("style", "stroke-width {:0.6f}".format(textStrokeWidth) + ";text-anchor:middle;text-align:center") + + tspan = text.add(Tspan(id=uniqueMainId + "-textFaceNumberTspan-" + str(face.idx()))) + tspan.set("x", "{:0.6f}".format(centroid[0])) + tspan.set("y", "{:0.6f}".format(centroid[1] + fontsize / 3)) + tspan.set("style", "stroke-width {:0.6f}".format(textStrokeWidth) + ";text-anchor:middle;text-align:center") + tspan.text = str(face.idx()) + textFacesGroup.append(textFaceGroup) + + ######################################################### + # Nmbering triangle edges and style them according to their type + ######################################################### + # Go over all edges of the grid + for edge in mesh.edges(): + # The two endpoints + he = mesh.halfedge_handle(edge, 0) + vertex0 = mesh.point(mesh.from_vertex_handle(he)) + vertex1 = mesh.point(mesh.to_vertex_handle(he)) + + # Write a straight line between the two corners + line = edgesGroup.add(PathElement()) + line.set('d', "M {:0.6f},{:0.6f} {:0.6f},{:0.6f}".format(vertex0[0], vertex0[1], vertex1[0], vertex1[1])) + # Colour depending on folding direction + lineStyle = {"fill": "none"} + + lineStyle.update({"stroke": self.options.colorCutEdges}) + line.set("id", uniqueMainId + "-cut-edge-" + str(edge.idx())) + + lineStyle.update({"stroke-width": "{:0.6f}".format(strokewidth)}) + lineStyle.update({"stroke-linecap":"butt"}) + lineStyle.update({"stroke-linejoin":"miter"}) + lineStyle.update({"stroke-miterlimit":"4"}) + + dihedralAngle = dihedralAngles[edge.idx()] + + # Dotted lines for folding edges + if isFoldingEdge[edge.idx()]: + if self.options.dashes is True: + lineStyle.update({"stroke-dasharray":"{:0.6f}, {:0.6f}".format(dashLength, spaceLength)}) + if dihedralAngle > 0: + lineStyle.update({"stroke": self.options.colorMountainFolds}) + line.set("id", uniqueMainId + "-mountain-fold-" + str(edge.idx())) + mountainFolds += 1 + if dihedralAngle < 0: + lineStyle.update({"stroke": self.options.colorValleyFolds}) + line.set("id", uniqueMainId + "-valley-fold-" + str(edge.idx())) + valleyFolds += 1 + if dihedralAngle == 0: + lineStyle.update({"stroke": self.options.colorCoplanarEdges}) + line.set("id", uniqueMainId + "-coplanar-edge-" + str(edge.idx())) + if self.options.importCoplanarEdges is False: + line.delete() + coplanarEdges += 1 + else: + lineStyle.update({"stroke-dasharray":"none"}) + + # The number of the edge to be glued + if not isFoldingEdge[edge.idx()]: + if self.options.separateGluePairsByColor is True: + lineStyle.update({"stroke": randomColorSet[glueNumber[edge.idx()]]}) + gluePairs += 1 + + lineStyle.update({"stroke-dashoffset":"0.0"}) + lineStyle.update({"stroke-opacity":"1.0"}) + + if self.options.edgeStyle == "saturationsForAngles": + if dihedralAngle != 0: #we dont want to apply HSL adjustments for zero angle lines because they would be invisible then + hslColor = inkex.Color(lineStyle.get('stroke')).to_hsl() + newSaturation = abs(dihedralAngle / self.angleRange) * 100 #percentage values + hslColor.saturation = newSaturation + lineStyle.update({"stroke":hslColor.to_rgb()}) + + elif self.options.edgeStyle == "opacitiesForAngles": + if dihedralAngle != 0: #we dont want to apply opacity adjustments for zero angle lines because they would be invisible then + opacity = abs(dihedralAngle / 180) + lineStyle.update({"stroke-opacity": "{:0.6f}".format(opacity)}) + + line.style = lineStyle + + ######################################################### + # Textual things + ######################################################### + halfEdge = mesh.halfedge_handle(edge, 0) # Find halfedge in the face + if mesh.face_handle(halfEdge).idx() == -1: + halfEdge = mesh.opposite_halfedge_handle(halfEdge) + vector = mesh.calc_edge_vector(halfEdge) + vector = vector / np.linalg.norm(vector) # normalize + midPoint = 0.5 * ( + mesh.point(mesh.from_vertex_handle(halfEdge)) + mesh.point(mesh.to_vertex_handle(halfEdge))) + rotatedVector = np.array([-vector[1], vector[0], 0]) + angle = np.arctan2(vector[1], vector[0]) + position = midPoint + textDistance * rotatedVector + if self.options.flipLabels is True: + position = midPoint - textDistance * rotatedVector + rotation = 180 / np.pi * angle + if self.options.flipLabels is True: + rotation += 180 + + text = textEdgesGroup.add(TextElement(id=uniqueMainId + "-edgeNumber-" + str(edge.idx()))) + text.set("x", "{:0.6f}".format(position[0])) + text.set("y", "{:0.6f}".format(position[1])) + text.set("font-size", "{:0.6f}".format(fontsize)) + text.set("style", "stroke-width {:0.6f}".format(textStrokeWidth) + ";text-anchor:middle;text-align:center") + text.set("transform", "rotate({:0.6f} {:0.6f} {:0.6f})".format(rotation, position[0], position[1])) + + tspan = text.add(Tspan()) + tspan.set("x", "{:0.6f}".format(position[0])) + tspan.set("y", "{:0.6f}".format(position[1])) + tspan.set("style", "stroke-width {:0.6f}".format(textStrokeWidth) + ";text-anchor:middle;text-align:center") + tspanText = [] + if self.options.printGluePairNumbers is True and not isFoldingEdge[edge.idx()]: + tspanText.append(str(glueNumber[edge.idx()])) + if self.options.printAngles is True and dihedralAngle != 0.0: + tspanText.append("{:0.2f}°".format(dihedralAngle)) + if self.options.printLengths is True: + printUnit = True + if printUnit is False: + unitToPrint = self.svg.unit + else: + unitToPrint = "" + tspanText.append("{:0.2f} {}".format(self.options.scalefactor * math.hypot(vertex1[0] - vertex0[0], vertex1[1] - vertex0[1]), unitToPrint)) + tspan.text = " | ".join(tspanText) + + if tspan.text == "": #if no text we remove again to clean up + text.delete() + tspan.delete() + + ''' + merge cutting edges to single contour. code ripped off from "join path" extension + ''' + if self.options.merge_cut_lines is True: + cutEdges = [] + + #find all cutting edges - they have to be sorted to build up a clean continuous line + for edge in edgesGroup: + edge_id = edge.get('id') + if "cut-edge-" in edge_id: + cutEdges.append(edge) + + #find the cutting edge which starts at the previous cutting edge end point + paths = {p.get('id'): self.getPartsFromCubicSuper(CubicSuperPath(p.get('d'))) for p in cutEdges } + pathIds = [p.get('id') for p in cutEdges] + + startPathId = pathIds[0] + pathIds = self.getArrangedIds(paths, startPathId) + + newParts = [] + firstElem = None + for key in pathIds: + parts = paths[key] + # ~ parts = getPartsFromCubicSuper(cspath) + start = parts[0][0][0] + elem = self.svg.getElementById(key) + + if(len(newParts) == 0): + newParts += parts[:] + firstElem = elem + else: + if(self.vectCmpWithMargin(start, newParts[-1][-1][-1], margin = .01)): + newParts[-1] += parts[0] + else: + newSeg = [newParts[-1][-1][-1], newParts[-1][-1][-1], start, start] + newParts[-1].append(newSeg) + newParts[-1] += parts[0] + + if(len(parts) > 1): + newParts += parts[1:] + + parent = elem.getparent() + parent.remove(elem) + + newElem = copy.copy(firstElem) + oldId = firstElem.get('id') + newElem.set('d', CubicSuperPath(self.getCubicSuperFromParts(newParts))) + newElem.set('id', oldId + '_joined') + parent.append(newElem) #insert at the end + + if len(textFacesGroup) == 0: + textFacesGroup.delete() #delete if empty set + + if len(textEdgesGroup) == 0: + textEdgesGroup.delete() #delete if empty set + + if len(textGroup) == 0: + textGroup.delete() #delete if empty set + + if self.options.printStats is True: + inkex.utils.debug(" * Number of cuts: " + str(cuts)) + inkex.utils.debug(" * Number of coplanar edges: " + str(coplanarEdges)) + inkex.utils.debug(" * Number of mountain folds: " + str(mountainFolds)) + inkex.utils.debug(" * Number of valley folds: " + str(valleyFolds)) + inkex.utils.debug(" * Number of glue pairs: {:0.0f}".format(gluePairs / 2)) + inkex.utils.debug(" * min angle: {:0.2f}".format(self.minAngle)) + inkex.utils.debug(" * max angle: {:0.2f}".format(self.maxAngle)) + inkex.utils.debug(" * Edge angle range: {:0.2f}".format(self.angleRange)) + + return paperfoldPageGroup + + + def floatCmpWithMargin(self, float1, float2, margin): + return abs(float1 - float2) < margin + + + def vectCmpWithMargin(self, vect1, vect2, margin): + return all(self.floatCmpWithMargin(vect2[i], vect1[i], margin) for i in range(0, len(vect1))) + + + def getPartsFromCubicSuper(self, cspath): + parts = [] + for subpath in cspath: + part = [] + prevBezPt = None + for i, bezierPt in enumerate(subpath): + if(prevBezPt != None): + seg = [prevBezPt[1], prevBezPt[2], bezierPt[0], bezierPt[1]] + part.append(seg) + prevBezPt = bezierPt + parts.append(part) + return parts + + + def getCubicSuperFromParts(self, parts): + cbsuper = [] + for part in parts: + subpath = [] + lastPt = None + pt = None + for seg in part: + if(pt == None): + ptLeft = seg[0] + pt = seg[0] + ptRight = seg[1] + subpath.append([ptLeft, pt, ptRight]) + ptLeft = seg[2] + pt = seg[3] + subpath.append([ptLeft, pt, pt]) + cbsuper.append(subpath) + return cbsuper + + + def getArrangedIds(self, pathMap, startPathId): + nextPathId = startPathId + orderPathIds = [nextPathId] + + #Arrange in order + while(len(orderPathIds) < len(pathMap)): + minDist = 9e+100 #A large float + closestId = None + np = pathMap[nextPathId] + npPts = [np[-1][-1][-1]] + if(len(orderPathIds) == 1):#compare both the ends for the first path + npPts.append(np[0][0][0]) + + for key in pathMap: + if(key in orderPathIds): + continue + parts = pathMap[key] + start = parts[0][0][0] + end = parts[-1][-1][-1] + + for i, npPt in enumerate(npPts): + dist = abs(start[0] - npPt[0]) + abs(start[1] - npPt[1]) + if(dist < minDist): + minDist = dist + closestId = key + dist = abs(end[0] - npPt[0]) + abs(end[1] - npPt[1]) + if(dist < minDist): + minDist = dist + pathMap[key] = [[[pts for pts in reversed(seg)] for seg in \ + reversed(part)] for part in reversed(parts)] + closestId = key + + #If start point of the first path is closer reverse its direction + if(i > 0 and closestId == key): + pathMap[nextPathId] = [[[pts for pts in reversed(seg)] for seg in \ + reversed(part)] for part in reversed(np)] + + orderPathIds.append(closestId) + nextPathId = closestId + return orderPathIds + + + def add_arguments(self, pars): + pars.add_argument("--tab") + + #Input + pars.add_argument("--inputfile") + pars.add_argument("--maxNumFaces", type=int, default=200, help="If the STL file has too much detail it contains a large number of faces. This will make unfolding extremely slow. So we can limit it.") + pars.add_argument("--scalefactor", type=float, default=1.0, help="Manual scale factor") + pars.add_argument("--roundingDigits", type=int, default=3, help="Digits for rounding") + + #Output + pars.add_argument("--printGluePairNumbers", type=inkex.Boolean, default=False, help="Print glue pair numbers on cut edges") + pars.add_argument("--printAngles", type=inkex.Boolean, default=False, help="Print folding angles on edges") + pars.add_argument("--printLengths", type=inkex.Boolean, default=False, help="Print lengths on edges") + pars.add_argument("--printTriangleNumbers", type=inkex.Boolean, default=False, help="Print triangle numbers on faces") + pars.add_argument("--importCoplanarEdges", type=inkex.Boolean, default=False, help="Import coplanar edges") + pars.add_argument("--experimentalWeights", type=inkex.Boolean, default=False, help="Mess around with algorithm") + pars.add_argument("--printStats", type=inkex.Boolean, default=False, help="Show some unfold statistics") + pars.add_argument("--resizetoimport", type=inkex.Boolean, default=True, help="Resize the canvas to the imported drawing's bounding box") + pars.add_argument("--extraborder", type=float, default=0.0) + pars.add_argument("--extraborderUnits") + pars.add_argument("--writeTwoDSTL", type=inkex.Boolean, default=False, help="Write 2D STL unfoldings") + pars.add_argument("--TwoDSTLdir", default="./inkscape_export/", help="Location to save exported 2D STL") + + #Style + pars.add_argument("--fontSize", type=int, default=15, help="Label font size (%)") + pars.add_argument("--flipLabels", type=inkex.Boolean, default=False, help="Flip labels") + pars.add_argument("--dashes", type=inkex.Boolean, default=True, help="Dashes for cut/coplanar edges") + pars.add_argument("--merge_cut_lines", type=inkex.Boolean, default=True, help="Merge cut lines") + pars.add_argument("--edgeStyle", help="Adjust color saturation or opacity for folding edges. The larger the angle the darker the color") + pars.add_argument("--separateGluePairsByColor", type=inkex.Boolean, default=False, help="Separate glue pairs by color") + pars.add_argument("--colorCutEdges", type=Color, default='255', help="Cut edges") + pars.add_argument("--colorCoplanarEdges", type=Color, default='1943148287', help="Coplanar edges") + pars.add_argument("--colorValleyFolds", type=Color, default='3422552319', help="Valley fold edges") + pars.add_argument("--colorMountainFolds", type=Color, default='879076607', help="Mountain fold edges") + + #Post Processing + pars.add_argument("--joineryMode", type=inkex.Boolean, default=False, help="Enable joinery mode") + pars.add_argument("--origamiSimulatorMode", type=inkex.Boolean, default=False, help="Enable origami simulator mode") + + + def effect(self): + if not os.path.exists(self.options.inputfile): + inkex.utils.debug("The input file does not exist. Please select a proper file and try again.") + exit(1) + mesh = om.read_trimesh(self.options.inputfile) + #mesh = om.read_polymesh(self.options.inputfile) #we must work with triangles instead of polygons because the algorithm works with that ONLY + + fullUnfolded, unfoldedComponents = self.unfold(mesh) + unfoldComponentCount = len(unfoldedComponents) + + #if len(unfoldedComponents) == 0: + # inkex.utils.debug("Error: no components were unfolded.") + # exit(1) + + if self.options.printStats is True: + inkex.utils.debug("Unfolding components: {:0.0f}".format(unfoldComponentCount)) + + # Compute maxSize of the components + # All components must be scaled to the same size as the largest component + maxSize = 0 + for unfolding in unfoldedComponents: + [xmin, ymin, boxSize] = self.findBoundingBox(unfolding[0]) + if boxSize > maxSize: + maxSize = boxSize + + xSpacing = maxSize / unfoldComponentCount * 0.1 # 10% spacing between each component; calculated by max box size + + ######################################################### + # mode config for joinery: + ######################################################### + if self.options.joineryMode is True: + self.options.separateGluePairsByColor = True #we need random colors in this mode + + + ######################################################### + # mode config for origami simulator: + ######################################################### + ''' + required style for Origami Simulator: + colors: + - #ff0000 (red) - mountain folds + - #0000ff (blue) - valley folds + - #000000 (black) - boundary cuts (for both the outline of the pattern and any internal holes) + - #ffff00 (yellow) - coplonar triangle edges ("facet creases") (no support for polygons > 3 edges) + - #00ff00 (green) - thin slits + - #ff00ff (magenta) - undriven creases (swing freely) + + opacity: + - final fold angle of a mountain or valley fold is set by its opacity. Any fold angle between 0° and 180° may be used. For example: + - 1.0 = 180° (fully folded) + - 0.5 = 90° + - 0 = 0° (flat) + ''' + if self.options.origamiSimulatorMode is True: + self.options.joineryMode = True #we set to true even if false because we need the same flat structure for origami simulator + self.options.separateGluePairsByColor = False #we need to have no weird random colors in this mode + self.options.edgeStyle = "opacitiesForAngles" #highly important for simulation + self.options.dashes = False + self.options.printGluePairNumbers = False + self.options.printAngles = False + self.options.printLengths = False + self.options.importCoplanarEdges = True + self.options.colorCutEdges = "#000000" #black + self.options.colorCoplanarEdges = "#ffff00" #yellow + self.options.colorMountainFolds = "#ff0000" #red + self.options.colorValleyFolds = "#0000ff" #blue + + #generate random colors; used to identify glue tab pairs + randomColorSet = [] + if self.options.separateGluePairsByColor: + while len(randomColorSet) < len(mesh.edges()): + r = lambda: random.randint(0,255) + newColor = '#%02X%02X%02X' % (r(),r(),r()) + if newColor not in randomColorSet: + randomColorSet.append(newColor) + + # Create a new container group to attach all paperfolds + paperfoldMainGroup = self.document.getroot().add(inkex.Group(id=self.svg.get_unique_id("paperfold-"))) #make a new group at root level + for i in range(len(unfoldedComponents)): + if self.options.printStats is True: + inkex.utils.debug("-----------------------------------------------------------") + inkex.utils.debug("Unfolding component nr.: {:0.0f}".format(i)) + paperfoldPageGroup = self.writeSVG(unfoldedComponents[i], maxSize, randomColorSet) + #translate the groups next to each other to remove overlappings + if i != 0: + previous_bbox = paperfoldMainGroup[i-1].bounding_box() + this_bbox = paperfoldPageGroup.bounding_box() + paperfoldPageGroup.set("transform", "translate({:0.6f}, 0.0)".format(previous_bbox.left + previous_bbox.width - this_bbox.left + xSpacing)) + paperfoldMainGroup.append(paperfoldPageGroup) + + + #apply scale factor + translation_matrix = [[self.options.scalefactor, 0.0, 0.0], [0.0, self.options.scalefactor, 0.0]] + paperfoldMainGroup.transform = Transform(translation_matrix) * paperfoldMainGroup.transform + #paperfoldMainGroup.set('transform', 'scale(%f,%f)' % (self.options.scalefactor, self.options.scalefactor)) + + #adjust canvas to the inserted unfolding + if self.options.resizetoimport: + bbox = paperfoldMainGroup.bounding_box() + namedView = self.document.getroot().find(inkex.addNS('namedview', 'sodipodi')) + root = self.svg.getElement('//svg:svg'); + offset = self.svg.unittouu(str(self.options.extraborder) + self.options.extraborderUnits) + root.set('viewBox', '%f %f %f %f' % (bbox.left - offset, bbox.top - offset, bbox.width + 2 * offset, bbox.height + 2 * offset)) + root.set('width', "{:0.6f}{}".format(bbox.width + 2 * offset, self.svg.unit)) + root.set('height', "{:0.6f}{}".format(bbox.height + 2 * offset, self.svg.unit)) + + #if set, we move all edges (path elements) to the top level + if self.options.joineryMode is True: + for paperfoldPage in paperfoldMainGroup.getchildren(): + for child in paperfoldPage: + if "-edges" in child.get('id'): + for edge in child: + edgeTransform = edge.composed_transform() + self.document.getroot().append(edge) + edge.transform = edgeTransform + + +if __name__ == '__main__': + Paperfold().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/parabola/parabola.inx b/extensions/fablabchemnitz/parabola/parabola.inx new file mode 100644 index 00000000..2708e9a4 --- /dev/null +++ b/extensions/fablabchemnitz/parabola/parabola.inx @@ -0,0 +1,36 @@ + + + Parabola + fablabchemnitz.de.parabola + + + 120 + 120 + 25 + + + + + + + + + true + true + true + true + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/parabola/parabola.py b/extensions/fablabchemnitz/parabola/parabola.py new file mode 100644 index 00000000..65129bdd --- /dev/null +++ b/extensions/fablabchemnitz/parabola/parabola.py @@ -0,0 +1,240 @@ +#!/usr/bin/env python3 +# coding=utf-8 +# +# 2/27/2021 - v.1.1.0 +# Copyright (C) 2021 Reginald Waters opensourcebear@nthebare.com +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +""" +This extension renders a wireframe shape and then draws lines to form a parabola +shape. + +The height and width are independently variable. The number of lines will change +the density of the end product. +""" +import inkex + +from inkex import turtle as pturtle + +class Parabola(inkex.GenerateExtension): + + container_label = 'Parabola' + def add_arguments(self, pars): + pars.add_argument("--height", type=int, default=300, help="Shape Height") + pars.add_argument("--width", type=int, default=300, help="Shape Width") + pars.add_argument("--seg_count", type=int, default=10, help="Number of line segments") + pars.add_argument("--shape", default="square") + pars.add_argument("--tab", default="common") + pars.add_argument("--c1", default="true") + pars.add_argument("--c2", default="false") + pars.add_argument("--c3", default="false") + pars.add_argument("--c4", default="false") + + def generate(self): + # Let's simplify the variable names + ht = int(self.options.height) + wt = int(self.options.width) + sc = int(self.options.seg_count) + shape = self.options.shape + c1 = self.options.c1 + c2 = self.options.c2 + c3 = self.options.c3 + c4 = self.options.c4 + + point = self.svg.namedview.center + style = inkex.Style({ + 'stroke-linejoin': 'miter', 'stroke-width': str(self.svg.unittouu('1px')), + 'stroke-opacity': '1.0', 'fill-opacity': '1.0', + 'stroke': '#000000', 'stroke-linecap': 'butt', + 'fill': 'none' + }) + + # Setting the amount to move across the horizontal and vertical + increaseht = (ht / sc) + increasewt = (wt / sc) + + tur = pturtle.pTurtle() + + tur.pu() # Pen up + tur.setpos(point) # start in the center + + if shape == "cross": + # We draw the cross shape and store the 4 points + # Can this be looped? + # Should I store the coordinates in an array/list? + tur.forward((ht / 2)) + toppoint = tur.getpos() + if c3 == 'true' or c4 == 'true': + tur.pd() + tur.backward((ht / 2)) + tur.pu() + if c1 == 'true' or c2 == 'true': + tur.pd() + tur.backward((ht / 2)) + bottompoint = tur.getpos() + tur.pu() + tur.setpos(point) + tur.right(90) + tur.forward((wt / 2)) + rightpoint = tur.getpos() + if c3 == 'true' or c2 == 'true': + tur.pd() + tur.backward((wt / 2)) + tur.pu() + if c1 == 'true' or c4 == 'true': + tur.pd() + tur.backward((wt / 2)) + leftpoint = tur.getpos() + + while sc > 0: + if c1 == 'true': + # Drawing the SE Corner based on SW coordinates + # We always draw this corner + tur.pu() + tur.setpos((bottompoint[0], bottompoint[1] - ( (increaseht / 2) * sc ) )) + tur.pd() + tur.setpos((bottompoint[0] + ( (increasewt / 2) * sc ), bottompoint[1] - (ht / 2) )) + + if c2 == 'true': # Drawing the SW Corner based on SE Coordinates + tur.pu() + tur.setpos((bottompoint[0], bottompoint[1] - ( (increaseht / 2) * sc ) )) + tur.pd() + tur.setpos((bottompoint[0] - ( (increasewt / 2) * sc ), bottompoint[1] - (ht / 2) )) + + if c3 == 'true': # Drawing the NW Corner based on NE Coordinates + tur.pu() + tur.setpos((toppoint[0], toppoint[1] + ( (increaseht / 2) * sc ) )) + tur.pd() + tur.setpos((toppoint[0] - ( (increasewt / 2) * sc ), toppoint[1] + (ht / 2) )) + + if c4 == 'true': # Drawing the NE Corner based on NW Coordinates + tur.pu() + tur.setpos((toppoint[0], toppoint[1] + ( (increaseht / 2) * sc ) )) + tur.pd() + tur.setpos((toppoint[0] + ( (increasewt / 2) * sc ), toppoint[1] + (ht / 2) )) + + sc = sc - 1 + + if shape == "triangle": + # We draw the triangle and store the 3 corner points + # Loopable? + tur.backward((ht / 2)) + tur.right(90) + tur.forward((wt /2)) + cornera = tur.getpos() + if c3 == 'true' or c2 == 'true': + tur.pd() + tur.backward((wt)) + cornerb = tur.getpos() + tur.pu() + if c2 == 'true' or c1 == 'true': + tur.pd() + tur.setpos((point[0], (cornera[1] - ht) )) + cornerc = tur.getpos() + tur.pu() + if c1 == 'true' or c3 == 'true': + tur.pd() + tur.setpos(cornera) + +# So.. The math below took a lot of trial and error to figure out... +# I probably need to take some geography classes... + + while sc > 0: + if c1 == 'true': + tur.pu() + tur.setpos(( (cornerb[0] + ((increasewt / 2) * (sc)) - (wt / 2)), cornerb[1] + (increaseht * sc) - ht )) + tur.pd() + tur.setpos(( (cornera[0] + (increasewt / 2) * (sc)), cornera[1] - (increaseht * sc) )) + + if c2 == 'true': + tur.pu() + tur.setpos((cornerb[0] - (increasewt * sc ) , cornerb[1] )) + tur.pd() + tur.setpos(( (cornerb[0] + ((increasewt / 2) * sc) - (wt / 2)), cornerb[1] + (increaseht * sc) - ht )) + + if c3 == 'true': + tur.pu() + tur.setpos((cornera[0] + (increasewt * sc ) , cornera[1] )) + tur.pd() + tur.setpos(( (cornera[0] - ((increasewt / 2) * sc) + (wt / 2)), cornera[1] + (increaseht * sc) - ht )) + + sc = sc - 1 + + + if shape == "square": + # We draw out the square shape and store the coordinates for each corner + # Can this be looped? + tur.right(90) + tur.forward((wt / 2)) + tur.right(90) + tur.forward((ht / 2)) + swcorner = tur.getpos() + if c4 == 'true' or c3 == 'true': # We only draw the 2 lines that are part of these corners + tur.pd() # Pen Down + tur.right(90) + tur.forward(wt) + secorner = tur.getpos() + tur.pu() + if c3 == 'true' or c2 == 'true': # We only draw the 2 lines that are part of these corners + tur.pd() + tur.right(90) + tur.forward(ht) + necorner = tur.getpos() + tur.pu() + if c1 == 'true' or c2 == 'true': # We only draw the 2 lines that are part of these corners + tur.pd() + tur.right(90) + tur.forward(wt) + nwcorner = tur.getpos() + tur.right(90) + tur.pu() + if c4 == 'true' or c1 == 'true': # We only draw the 2 lines that are part of these corners + tur.pd() + tur.forward(ht) + + while sc > 0: + if c1 == 'true': + # Drawing the NW Corner based on SW coordinates + # We always draw this corner + tur.pu() + tur.setpos((swcorner[0], swcorner[1] - ( increaseht * sc ) )) + tur.pd() + tur.setpos((swcorner[0] + ( increasewt * sc ), swcorner[1] - ht)) + + if c2 == 'true': # Drawing the NE Corner based on SE Coordinates + tur.pu() + tur.setpos((secorner[0], secorner[1] - ( increaseht * sc ) )) + tur.pd() + tur.setpos((secorner[0] - ( increasewt * sc ), secorner[1] - ht)) + + if c3 == 'true': # Drawing the SE Corner based on NE Coordinates + tur.pu() + tur.setpos((necorner[0], necorner[1] + ( increaseht * sc ) )) + tur.pd() + tur.setpos((necorner[0] - ( increasewt * sc ), necorner[1] + ht)) + + if c4 == 'true': # Drawing the SW Corner based on NW Coordinates + tur.pu() + tur.setpos((nwcorner[0], nwcorner[1] + ( increaseht * sc ) )) + tur.pd() + tur.setpos((nwcorner[0] + ( increasewt * sc ), nwcorner[1] + ht)) + + sc = sc - 1 + + return inkex.PathElement(d=tur.getPath(), style=str(style)) + +if __name__ == "__main__": + Parabola().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/path_intersections/path_intersections.inx b/extensions/fablabchemnitz/path_intersections/path_intersections.inx new file mode 100644 index 00000000..d9b28bbe --- /dev/null +++ b/extensions/fablabchemnitz/path_intersections/path_intersections.inx @@ -0,0 +1,18 @@ + + + Path Intersections + fablabchemnitz.de.path_intersections + + 4012452351 + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/path_intersections/path_intersections.py b/extensions/fablabchemnitz/path_intersections/path_intersections.py new file mode 100644 index 00000000..8ac50f86 --- /dev/null +++ b/extensions/fablabchemnitz/path_intersections/path_intersections.py @@ -0,0 +1,423 @@ +#!/usr/bin/env python3 + +# This file is part of Precut. +# +# Precut is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# Precut is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Precut. If not, see . + +# please, stick to pep8 formatting for this file + +# seems to be lost in year 2016 https://wiki.inkscape.org/wiki/index.php?title=Inkscape_Extensions&oldid=99881 + +""" +Migrator: Mario Voigt / FabLab Chemnitz +Mail: mario.voigt@stadtfabrikanten.org +Date: 13.08.2020 + +This plugin - initially called "Precut" - was found deeply on web and was nearly lost in translation. Ported to Python 3.0 for InkScape 1.0. This tool finds path intersections within the complete SVG document. Intersections are going to be marked with little squares. +""" + +""" +What do we want to check? +========================= + + * any text objects that are not converted to a path? + * can be implemented as tag blacklist + * any outlines? they need to be converted to paths + * check for crossing paths + * this is the hardest + * for lines, this is easy, and can, for example, be done with shapely: + + >>> from shapely.geometry import LineString + >>> l1 = LineString([(0, 0), (1, 1)]) + >>> l2 = LineString([(0, 1), (1, 0)]) + >>> l1.intersects(l2) + True + >>> p = l1.intersection(l2) + >>> p.x + 0.5 + >>> p.y + 0.5 + * check for self-intersection, too (=> line.is_simple) + * need to split each complex subpath into its segments + * then, when doing intersections, remove the `boundary` + from the intersection set, because two adjacent + segments from a subpath always intersect in their boundary + * handle the commands M, Z, L, C, Q, A (parsed via simplepath) + * M: moveto + * Z: closepath (straight closing line) + * L: lineto + * C: curveto (cubic bezier) + * Q: curveto (quadratic bezier) + * A: elliptical arc (circles, ellipsis) + * paths need to have a minimum distance to other paths + * if two paths are connected ("T-junction"), this junction needs to be + exempt from the distance check. +""" + +from lxml import etree +import inkex +from inkex import bezier +from inkex.paths import Path +from inkex import Color +import sys +import logging + +from shapely.geometry import LineString, MultiLineString, Point, MultiPoint, GeometryCollection +from shapely import speedups + +if speedups.available: + speedups.enable() + +logger = logging.getLogger(__name__) + +def take_N(seq, n): + """ + split ``seq`` into slices of length ``n``. the total + length of ``seq` must be a multiple of ``n``. + """ + if len(seq) % n != 0: + raise ValueError("len=%d, n=%d, (%s)" % (len(seq), n, seq)) + sub = [] + for elem in seq: + sub.append(elem) + if len(sub) == n: + yield sub + sub = [] + + +def linear_interp(a, b, t): + """ + linearly interpolate between ``a`` and ``b``. ``t`` must be a + a float between 0 and 1. + """ + return (1 - t) * a + t * b + + +def sample(start, stop, num): + """ + interpolate between start and stop, and yield ``num`` samples + """ + if num == 0: + return + delta = 1.0 / num + t = 0 + for i in range(num): + yield linear_interp(start, stop, t) + t += delta + + +class CheckerResult(object): + + def __init__(self, msg, elem, extra=None, max_len=50): + self.msg = msg + self.elem = elem + self.extra = extra + self.max_len = max_len + + def fmt(self, s): + s = ", ".join(["%s: %s" % (k, v) for k, v in s.items()]) + if len(s) > self.max_len: + return s[:50] + u"…" + return s + + def __unicode__(self): + msg, elem, extra = self.msg, self.elem, self.extra + if extra: + return "%s: %s (%s)" % (msg, elem.get("id"), self.fmt(extra)) + else: + return "%s: %s" % (msg, elem.get("id")) + + def __repr__(self): + return "" % self.msg + + +class Checker(object): + def __call__(self, elem): + """ + run a check on ``elem`` and yield (elem, message) tuples + for each failed check + """ + raise NotImplementedError("please implement __call__") + + def collect(self): + """ + run a second stage check on aggregated data + """ + return [] + + +class StyleChecker(Checker): + def __call__(self, elem): + style = elem.get("style") + if style is None: + return + parsed = dict(inkex.Style.parse_str(style)) + if "stroke" in parsed and parsed["stroke"] != "none": + yield CheckerResult("element with stroke found", elem) + + +class ElemBlacklistChecker(Checker): + blacklist = ["text"] + + def __call__(self, elem): + _, tag = elem.tag.rsplit("}", 1) + if tag in self.blacklist: + yield CheckerResult("'%s' element found in document" % tag, elem) + + +class Subpath(object): + def __init__(self): + self.points = [] + self.cursor = None + + def __len__(self): + return len(self.points) + + @property + def last_point(self): + if self.points: + return self.points[-1] + + @property + def first_point(self): + if self.points: + return self.points[0] + + def moveto(self, point): + assert len(self) == 0, "moveto may only be called at the beginning of a subpath" + self.points.append(point) + self.cursor = point + + def lineto(self, point): + self.points.append(point) + self.cursor = point + + def curveto(self, points): + for p in self.approx_curve([self.cursor] + points): + self.lineto(p) + + def closepath(self): + self.lineto(self.first_point) + + def add_points(self, points): + self.points.extend(points) + self.cursor = points[-1] + + def as_linestring(self): + return LineString(self.points) + + def approx_curve(self, points): + for four in take_N(points, 4): + # TODO: automatically set number of samples depending on length + for t in sample(0, 1, 50): + yield bezier.bezierpointatt(four, t) + + +class IntersectionChecker(Checker): + def __init__(self): + self.paths = [] + + def __call__(self, elem): + # logger.debug(elem.attrib) + path = elem.get("d") + if path is None: + return [] + parsed = Path(path).to_arrays() + self.paths.append((parsed, elem)) + # logger.debug(parsed) + return [] + + def fixVHbehaviour(self, elem): + raw = Path(elem.get("d")).to_arrays() + subpaths, prev = [], 0 + for i in range(len(raw)): # Breaks compound paths into simple paths + if raw[i][0] == 'M' and i != 0: + subpaths.append(raw[prev:i]) + prev = i + subpaths.append(raw[prev:]) + seg = [] + for simpath in subpaths: + if simpath[-1][0] == 'Z': + simpath[-1][0] = 'L' + if simpath[-2][0] == 'L': simpath[-1][1] = simpath[0][1] + else: simpath.pop() + for i in range(len(simpath)): + if simpath[i][0] == 'V': # vertical and horizontal lines only have one point in args, but 2 are required + #inkex.utils.debug(simpath[i][0]) + simpath[i][0]='L' #overwrite V with regular L command + add=simpath[i-1][1][0] #read the X value from previous segment + simpath[i][1].append(simpath[i][1][0]) #add the second (missing) argument by taking argument from previous segment + simpath[i][1][0]=add #replace with recent X after Y was appended + if simpath[i][0] == 'H': # vertical and horizontal lines only have one point in args, but 2 are required + #inkex.utils.debug(simpath[i][0]) + simpath[i][0]='L' #overwrite H with regular L command + simpath[i][1].append(simpath[i-1][1][1]) #add the second (missing) argument by taking argument from previous segment + #inkex.utils.debug(simpath[i]) + seg.append(simpath[i]) + elem.set("d", Path(seg)) + return seg + + def get_line_strings(self): + # logger.debug("paths: %s", self.paths) + for path, elem in self.paths: + path = self.fixVHbehaviour(elem) + logger.debug("new path, %s", elem.get("id")) + current_subpath = Subpath() + for cmd, coords in path: + logger.debug(" new command: %s", cmd) + if cmd != "A": + points = list(take_N(coords, n=2)) + else: + points = list(take_N(coords, n=7)) + logger.debug(" points: %s", points) + if cmd == "M": + # M starts a new subpath + if len(current_subpath) > 1: + yield current_subpath, elem + current_subpath = Subpath() + current_subpath.moveto(points[0]) + # more than one point means the rest of the points are to + # be treated as if cmd was L: + # http://www.w3.org/TR/SVG/paths.html#PathDataMovetoCommands + if len(points) > 1: + points = points[1:] + cmd = "L" + if cmd == "L": + current_subpath.add_points(points) + if cmd == "Z": + current_subpath.closepath() + if cmd == "C": + current_subpath.curveto(points) + if cmd == "Q": + logger.warning("quadratic beziers are not supported yet") + # current_subpath.moveto(points[-1]) + if cmd == "A": + logger.warning("elliptic arcs are not supported yet") + if len(current_subpath) > 1: + yield current_subpath, elem + current_subpath = Subpath() + + def collect(self): + return self.check_intersections() + + def check_intersections(self): + checks_done = MultiLineString() + for subpath, elem in self.get_line_strings(): + line = subpath.as_linestring() + if not line.is_simple: + # TODO: find location of self-intersection and introduce some + # tolerance + # checks_done = checks_done.union(line) + yield CheckerResult("self-intersection found", elem) + # continue + if checks_done.intersects(line): + intersection = checks_done.intersection(line) + yield CheckerResult("intersection found", elem, extra={"intersection": intersection}) + checks_done = checks_done.union(line) + + +class ErrorVisualization(object): + def __init__(self, svg, effect, color, group_id="precut_errors"): + self.svg = svg + self.color = color + + g = svg.find(".//%s[@id='%s']" % (inkex.addNS("g", "svg"), group_id)) + if g is not None: + self.g = g + else: + parent = svg + attrs = {"id": group_id, "style": "opacity:.5", inkex.addNS("label", "inkscape"): "Precut Errors"} + self.g = etree.SubElement(parent, inkex.addNS("g", "svg"), attrs) + + def fmt_point(self, point): + return "%s %s" % point + + def convert(self, geom): + """ + convert a shapely geometry to SVG + """ + + def vis_line_string(geom): + path = [] + point_iter = iter(geom.coords) + head = next(point_iter) + tail = list(point_iter) + path.append("M%s" % self.fmt_point(head)) + for point in tail: + path.append("L%s" % self.fmt_point(point)) + attrs = {"d": " ".join(path), "style": "stroke:%s;stroke-width:5px;" % self.color} + etree.SubElement(self.g, inkex.addNS("path", "svg"), attrs) + + def vis_point(geom): + x, y = geom.x, geom.y + x1, y1 = x - 5, y - 5 + x2, y2 = x - 5, y + 5 + x3, y3 = x + 5, y + 5 + x4, y4 = x + 5, y - 5 + vis_line_string(LineString([(x1, y1), (x2, y2), (x3, y3), (x4, y4), (x1, y1)])) + + def vis_geom_collection(geom): + for g in geom.geoms: + self.convert(g) + + converters = { + LineString: vis_line_string, + Point: vis_point, + MultiLineString: vis_geom_collection, + MultiPoint: vis_geom_collection, + GeometryCollection: vis_geom_collection, + } + converters[geom.__class__](geom) + + def add_error(self, geom): + self.convert(geom) + + +class PathIntersections(inkex.Effect): + def __init__(self, *args, **kwargs): + self.check_result = [] + self.checkers = [ElemBlacklistChecker(), StyleChecker(), IntersectionChecker()] + inkex.Effect.__init__(self, *args, **kwargs) + self.arg_parser.add_argument("--color", type=Color, default='4012452351', help="Error highlight color") + + def walk(self, elem): + if elem.get("id") == "precut_errors": + return + for child in elem.iterchildren(): + self.visit(child) + self.walk(child) + + def visit(self, elem): + logger.debug("visiting %s", elem) + for checker in self.checkers: + self.check_result.extend(checker(elem)) + + def effect(self): + svg = self.document.getroot() + self.walk(svg) + vis = ErrorVisualization(svg, self, color=self.options.color) + # additional "collect" pass for "global" analysis + for checker in self.checkers: + self.check_result.extend(checker.collect()) + for res in self.check_result: + #print >>sys.stderr, unicode(res).encode("utf8") + #print(sys.stderr, str(res.encode("utf8"))) + if res.extra and "intersection" in res.extra: + # TODO: add visualization for other kinds of errors + vis.add_error(res.extra["intersection"]) + + +if __name__ == "__main__": + logging.basicConfig(stream=sys.stderr, level=logging.WARNING, format="%(levelname)s %(message)s") + PathIntersections().run() diff --git a/extensions/fablabchemnitz/pathops/pathops.inx b/extensions/fablabchemnitz/pathops/pathops.inx new file mode 100644 index 00000000..9da7fd5e --- /dev/null +++ b/extensions/fablabchemnitz/pathops/pathops.inx @@ -0,0 +1,30 @@ + + + PathOps Custom + fablabchemnitz.de.pathops + + + + + + + + + + 500 + true + true + false + + all + + + + + + Apply Inkscape path operations to multiple objects. + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/pathops/pathops.py b/extensions/fablabchemnitz/pathops/pathops.py new file mode 100644 index 00000000..16488a9e --- /dev/null +++ b/extensions/fablabchemnitz/pathops/pathops.py @@ -0,0 +1,404 @@ +#!/usr/bin/env python3 +"""pathops.py - Inkscape extension to apply multiple path operations + +This extension takes a selection of path and a group of paths, or several +paths, and applies a path operation with the top-most path in the z-order, and +each selected path or each child of a selected group underneath. + +Copyright (C) 2014 Ryan Lerch (multiple difference) + 2016 Maren Hachmann + (refactoring, extend to multibool) + 2017 su_v + Rewrite to support large selections (process in chunks), to + improve performance (support groups, z-sort ids with python + instead of external query), and to extend GUI options. + 2020 Maren Hachmann + Update to make it work with Inkscape 1.0's new inx scheme, + extensions API and command line API. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +""" +# pylint: disable=too-many-ancestors + +# standard library +import os +from shutil import copy2 +from subprocess import Popen, PIPE +import time +from lxml import etree + +# local library +import inkex +import inkex.command + +__version__ = '1.1' + + +# Global "constants" +SVG_SHAPES = ('rect', 'circle', 'ellipse', 'line', 'polyline', 'polygon') + + +# ----- general helper functions + +def timed(f): + """Minimalistic timer for functions.""" + # pylint: disable=invalid-name + start = time.time() + ret = f() + elapsed = time.time() - start + return ret, elapsed + +def get_inkscape_version(): + ink = inkex.command.INKSCAPE_EXECUTABLE_NAME + ink_version = inkex.command.call(ink, '--version').decode("utf-8") + pos = ink_version.find("Inkscape ") + if pos != -1: + pos += 9 + else: + return None + v_num = ink_version[pos:pos+3] + return(v_num) + +# ----- SVG element helper functions + +def get_defs(node): + """Find in children of *node*, return first one found.""" + path = '/svg:svg//svg:defs' + try: + return node.xpath(path, namespaces=inkex.NSS)[0] + except IndexError: + return etree.SubElement(node, inkex.addNS('defs', 'svg')) + + +def is_group(node): + """Check node for group tag.""" + return node.tag == inkex.addNS('g', 'svg') + + +def is_path(node): + """Check node for path tag.""" + return node.tag == inkex.addNS('path', 'svg') + + +def is_basic_shape(node): + """Check node for SVG basic shape tag.""" + return node.tag in (inkex.addNS(tag, 'svg') for tag in SVG_SHAPES) + + +def is_custom_shape(node): + """Check node for Inkscape custom shape type.""" + return inkex.addNS('type', 'sodipodi') in node.attrib + + +def is_shape(node): + """Check node for SVG basic shape tag or Inkscape custom shape type.""" + return is_basic_shape(node) or is_custom_shape(node) + + +def has_path_effect(node): + """Check node for Inkscape path-effect attribute.""" + return inkex.addNS('path-effect', 'inkscape') in node.attrib + + +def is_modifiable_path(node): + """Check node for editable path data.""" + return is_path(node) and not (has_path_effect(node) or + is_custom_shape(node)) + + +def is_image(node): + """Check node for image tag.""" + return node.tag == inkex.addNS('image', 'svg') + + +def is_text(node): + """Check node for text tag.""" + return node.tag == inkex.addNS('text', 'svg') + + +def does_pathops(node): + """Check whether node is supported by Inkscape path operations.""" + return (is_path(node) or + is_shape(node) or + is_text(node)) + + +# ----- list processing helper functions + +def recurse_selection(node, id_list, level=0, current=0): + """Recursively process selection, add checked elements to id list.""" + current += 1 + if not level or current <= level: + if is_group(node): + for child in node: + id_list = recurse_selection(child, id_list, level, current) + if does_pathops(node): + id_list.append(node.get('id')) + return id_list + + +def z_sort(node, alist): + """Return new list sorted in document order (depth-first traversal).""" + ordered = [] + id_list = list(alist) + count = len(id_list) + for element in node.iter(): + element_id = element.get('id') + if element_id is not None and element_id in id_list: + id_list.remove(element_id) + ordered.append(element_id) + count -= 1 + if not count: + break + return ordered + + +def z_iter(node, alist): + """Return iterator over ids in document order (depth-first traversal).""" + id_list = list(alist) + for element in node.iter(): + element_id = element.get('id') + if element_id is not None and element_id in id_list: + id_list.remove(element_id) + yield element_id + + +def chunks(alist, max_len): + """Chunk a list into sublists of max_len length.""" + for i in range(0, len(alist), max_len): + yield alist[i:i+max_len] + + +# ----- process external command, files + +# def run(cmd_format, stdin_str=None, verbose=False): +# """Run command""" +# if verbose: +# inkex.utils.debug(cmd_format) +# out = err = None +# myproc = Popen(cmd_format, shell=False, +# stdin=PIPE, stdout=PIPE, stderr=PIPE) +# out, err = myproc.communicate(stdin_str) +# if myproc.returncode == 0: +# return out +# elif err is not None: +# inkex.errormsg(err) + + +# ----- PathOps() class, methods + +class PathOps(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument("--ink_verb", default="SelectionDiff", help="Inkscape verb for path op") + pars.add_argument("--max_ops", type=int, default=500, help="Max ops per external run") + pars.add_argument("--recursive_sel", type=inkex.Boolean, help="Recurse beyond one group level") + pars.add_argument("--keep_top", type=inkex.Boolean, help="Keep top element when done") + pars.add_argument("--dry_run", type=inkex.Boolean, default=False, help="Dry-run without exec") + + def get_selected_ids(self): + """Return a list of valid ids for inkscape path operations.""" + id_list = [] + if len(self.svg.selected) == 0: + pass + else: + # level = 0: unlimited recursion into groups + # level = 1: process top-level groups only + level = 0 if self.options.recursive_sel else 1 + for node in self.svg.selected.values(): + recurse_selection(node, id_list, level) + if len(id_list) < 2: + inkex.errormsg("This extension requires at least 2 elements " + + "of type path, shape or text. " + + "The elements can be part of selected groups, " + + "or directly selected.") + return None + else: + return id_list + + def get_sorted_ids(self): + """Return id of top-most object, and a list with z-sorted ids.""" + top_path = None + sorted_ids = None + id_list = self.get_selected_ids() + if id_list is not None: + sorted_ids = list(z_iter(self.document.getroot(), id_list)) + top_path = sorted_ids.pop() + return (top_path, sorted_ids) + + + def run_pathops(self, svgfile, top_path, id_list, ink_verb, dry_run=False): + """Run path ops with top_path on a list of other object ids.""" + # build list with command line arguments + ink_version = get_inkscape_version() + # Version-dependent. This one is for Inkscape 1.1 (else it crashes, see https://gitlab.com/inkscape/inbox/-/issues/4905) + extra_param = "--batch-process" + actions_list = [] + for node_id in id_list: + actions_list.append("select-by-id:" + top_path) + actions_list.append("EditDuplicate") + actions_list.append("select-by-id:" + node_id) + actions_list.append(ink_verb) + actions_list.append("EditDeselect") + actions_list.append("FileSave") + if ink_version == "1.0": + actions_list.append("FileQuit") + extra_param = "--with-gui" + actions = ";".join(actions_list) + + # process command list + if dry_run: + inkex.utils.debug(" ".join(["inkscape", extra_param, "--actions=" + "\"" + actions + "\"", svgfile])) + else: + inkex.command.inkscape(svgfile, extra_param, actions=actions) + + def loop_pathops(self, top_path, other_paths): + """Loop through selected items and run external command(s).""" + # init variables + count = 0 + max_ops = self.options.max_ops or 500 + ink_verb = self.options.ink_verb or "SelectionDiff" + dry_run = self.options.dry_run + tempfile = self.options.input_file + "-pathops.svg" + # prepare + if dry_run: + inkex.utils.debug("# Top object id: {}".format(top_path)) + inkex.utils.debug("# Other objects total: {}".format(len(other_paths))) + else: + # we need to do this because command line Inkscape with gui + # gives lots of info dialogs when the file extension isn't 'svg' + # so the inkscape() call cannot open the file without user + # interaction, and fails in the end when trying to save + copy2(self.options.input_file, tempfile) + # loop through sorted id list, process in chunks + for chunk in chunks(other_paths, max_ops): + count += 1 + if dry_run: + inkex.utils.debug("\n# Processing {}. chunk ".format(count) + + "with {} objects ...".format(len(chunk))) + self.run_pathops(tempfile, top_path, chunk, ink_verb, dry_run) + # finish up + if dry_run: + inkex.utils.debug("\n# {} chunks processed, ".format(count) + + "with {} total objects.".format(len(other_paths))) + else: + # replace current document with content of temp copy file + self.document = inkex.load_svg(tempfile) + # update self.svg + self.svg = self.document.getroot() + + # optionally delete top-most element when done + if not self.options.keep_top: + top_node = self.svg.getElementById(top_path) + if top_node is not None: + top_node.delete() + # purge missing tagrefs (see below) + self.update_tagrefs() + # clean up + self.cleanup(tempfile) + + def cleanup(self, tempfile): + """Clean up tempfile.""" + try: + os.remove(tempfile) + except Exception: # pylint: disable=broad-except + pass + + def effect(self): + """Main entry point to process current document.""" + if self.has_tagrefs(): + # unsafe to use with extensions ... + inkex.utils.errormsg("This document uses Inkscape selection sets. " + + "Modifying the content with a PathOps extension " + + "may cause Inkscape to crash on reload or close. " + + "Please delete the selection sets, " + + "save the document under a new name and " + + "try again in a new Inkscape session.") + else: + # process selection + top_path, other_paths = self.get_sorted_ids() + if top_path is None or other_paths is None: + return + else: + self.loop_pathops(top_path, other_paths) + + # ----- workaround to avoid crash on quit + + # If selection set tagrefs have been deleted as a result of the + # extension's modifications of the drawing content, inkscape will + # crash when closing the document window later on unless the tagrefs + # are checked and cleaned up manually by the extension script. + + # NOTE: crash on reload in the main process (after the extension has + # finished) still happens if Selection Sets dialog was actually + # opened and used in the current session ... the extension could + # create fake (invisible) objects which reuse the ids? + # No, fake placeholder elements do not prevent the crash on reload + # if the dialog was opened before. + + # TODO: these checks (and the purging of obsolete tagrefs) probably + # should be applied in Effect() itself, instead of relying on + # workarounds in derived classes that modify drawing content. + + def has_tagrefs(self): + """Check whether document has selection sets with tagrefs.""" + defs = get_defs(self.document.getroot()) + inkscape_tagrefs = defs.findall( + "inkscape:tag/inkscape:tagref", namespaces=inkex.NSS) + return len(inkscape_tagrefs) > 0 + + def update_tagrefs(self, mode='purge'): + """Check tagrefs for deleted objects.""" + defs = get_defs(self.document.getroot()) + inkscape_tagrefs = defs.findall( + "inkscape:tag/inkscape:tagref", namespaces=inkex.NSS) + if len(inkscape_tagrefs) > 0: + for tagref in inkscape_tagrefs: + href = tagref.get(inkex.addNS('href', 'xlink'))[1:] + if self.svg.getElementById(href) is None: + if mode == 'purge': + tagref.delete() + elif mode == 'placeholder': + temp = etree.Element(inkex.addNS('path', 'svg')) + temp.set('id', href) + temp.set('d', 'M 0,0 Z') + self.document.getroot().append(temp) + + # ----- workaround to fix Effect() performance with large selections + + def collect_ids(self, doc=None): + """Iterate all elements, build id dicts (doc_ids, selected).""" + doc = self.document if doc is None else doc + id_list = list(self.options.ids) + for node in doc.getroot().iter(tag=etree.Element): + if 'id' in node.attrib: + node_id = node.get('id') + self.doc_ids[node_id] = 1 + if node_id in id_list: + self.svg.selected[node_id] = node + id_list.remove(node_id) + + def getselected(self): + """Overload Effect() method.""" + self.collect_ids() + + def getdocids(self): + """Overload Effect() method.""" + pass + + +if __name__ == '__main__': + PathOps().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/pathops/pathops_combine.inx b/extensions/fablabchemnitz/pathops/pathops_combine.inx new file mode 100644 index 00000000..f4c1221b --- /dev/null +++ b/extensions/fablabchemnitz/pathops/pathops_combine.inx @@ -0,0 +1,18 @@ + + + Combine + fablabchemnitz.de.pathops_combine + SelectionCombine + + all + + + + + + Apply Inkscape 'Combine' path operation to multiple objects. + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/pathops/pathops_cutpath.inx b/extensions/fablabchemnitz/pathops/pathops_cutpath.inx new file mode 100644 index 00000000..576cceda --- /dev/null +++ b/extensions/fablabchemnitz/pathops/pathops_cutpath.inx @@ -0,0 +1,18 @@ + + + Cut Path + fablabchemnitz.de.pathops_cutpath + SelectionCutPath + + all + + + + + + Apply Inkscape 'Cut Path' path operation to multiple objects. + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/pathops/pathops_difference.inx b/extensions/fablabchemnitz/pathops/pathops_difference.inx new file mode 100644 index 00000000..92b67c1f --- /dev/null +++ b/extensions/fablabchemnitz/pathops/pathops_difference.inx @@ -0,0 +1,18 @@ + + + Difference + fablabchemnitz.de.pathops_difference + SelectionDiff + + all + + + + + + Apply Inkscape 'Difference' path operation to multiple objects. + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/pathops/pathops_division.inx b/extensions/fablabchemnitz/pathops/pathops_division.inx new file mode 100644 index 00000000..3edc9c14 --- /dev/null +++ b/extensions/fablabchemnitz/pathops/pathops_division.inx @@ -0,0 +1,18 @@ + + + Division + fablabchemnitz.de.pathops_division + SelectionDivide + + all + + + + + + Apply Inkscape 'Division' path operation to multiple objects. + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/pathops/pathops_exclusion.inx b/extensions/fablabchemnitz/pathops/pathops_exclusion.inx new file mode 100644 index 00000000..4db9b482 --- /dev/null +++ b/extensions/fablabchemnitz/pathops/pathops_exclusion.inx @@ -0,0 +1,18 @@ + + + Exclusion + fablabchemnitz.de.pathops_exclusion + SelectionSymDiff + + all + + + + + + Apply Inkscape 'Exclusion' path operation to multiple objects. + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/pathops/pathops_intersection.inx b/extensions/fablabchemnitz/pathops/pathops_intersection.inx new file mode 100644 index 00000000..402a6beb --- /dev/null +++ b/extensions/fablabchemnitz/pathops/pathops_intersection.inx @@ -0,0 +1,18 @@ + + + Intersection + fablabchemnitz.de.pathops_intersect + SelectionIntersect + + all + + + + + + Apply Inkscape 'Intersection' path operation to multiple objects. + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/pathops/pathops_union.inx b/extensions/fablabchemnitz/pathops/pathops_union.inx new file mode 100644 index 00000000..0d9c9315 --- /dev/null +++ b/extensions/fablabchemnitz/pathops/pathops_union.inx @@ -0,0 +1,18 @@ + + + Union + fablabchemnitz.depath_union + SelectionUnion + + all + + + + + + Apply Inkscape 'Union' path operation to multiple objects. + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/paths_to_openscad/paths_to_openscad.inx b/extensions/fablabchemnitz/paths_to_openscad/paths_to_openscad.inx new file mode 100644 index 00000000..49922eb3 --- /dev/null +++ b/extensions/fablabchemnitz/paths_to_openscad/paths_to_openscad.inx @@ -0,0 +1,95 @@ + + + Paths To OpenSCAD + fablabchemnitz.de.paths_to_openscad + + + {NAME}.scad + 5.0 + true + false + false + false + false + + + 0.2 + 0 + + + + + + + + + 1.0 + 100.0 + + + + + + + false + + + + + openscad "{NAME}.scad" + openscad "{NAME}.scad" -o "{NAME}.stl" + cura "{NAME}.stl" & + + + + + + + + + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/paths_to_openscad/paths_to_openscad.py b/extensions/fablabchemnitz/paths_to_openscad/paths_to_openscad.py new file mode 100644 index 00000000..7fe932ee --- /dev/null +++ b/extensions/fablabchemnitz/paths_to_openscad/paths_to_openscad.py @@ -0,0 +1,1461 @@ +#!/usr/bin/env python3 +# +# paths2openscad.py +# +# This is an Inkscape extension to output paths to extruded OpenSCAD polygons +# The Inkscape objects must first be converted to paths (Path > Object to +# Path). Some paths may not work well -- the paths have to be polygons. As +# such, paths derived from text may meet with mixed results. + +# Written by Daniel C. Newman ( dan dot newman at mtbaldy dot us ) +# +# 2020-06-18 +# Updated by Sillyfrog (https://github.com/sillyfrog) to support +# Inkscape v1.0 (exclusively, prior versions) are no longer supported). +# Updated to run under python3 now python2 is end of life. +# +# 10 June 2012 +# +# 15 June 2012 +# Updated by Dan Newman to handle a single level of polygon nesting. +# This is sufficient to handle most fonts. +# If you want to nest two polygons, combine them into a single path +# within Inkscape with "Path > Combine Path". +# +# 15 August 2014 +# Updated by Josef Skladanka to automatically set extruded heights +# +# 2017-03-11, juergen@fabmail.org +# 0.12 parse svg width="400mm" correctly. Came out downscaled by 3... +# +# 2017-04-08, juergen@fabmail.org +# 0.13 allow letter 'a' prefix on zsize values for anti-matter. +# All anti-matter objects are subtracted from all normal objects. +# raise: Offset along Z axis, to make cut-outs and balconies. +# Refactored object_merge_extrusion_values() from convertPath(). +# Inheriting extrusion values from enclosing groups. +# +# 2017-04-10, juergen@fabmail.org +# 0.14 Started merging V7 outline mode by Neon22. +# (http://www.thingiverse.com/thing:1065500) +# Toplevel object from http://www.thingiverse.com/thing:1286041 +# is already included. +# +# 2017-04-16, juergen@fabmail.org +# 0.15 Fixed https://github.com/fablabnbg/inkscape-paths2openscad/ +# issues/1#issuecomment-294257592 +# Line width of V7 code became a minimum line width, +# rendering is now based on stroke-width +# Refactored LengthWithUnit() from getLength() +# Finished merge with v7 code. +# Subpath in subpath are now handled very nicely. +# Added msg_extrude_by_hull_and_paths() outline mode with nested paths. +# +# 2017-06-12, juergen@fabmail.org +# 0.16 Feature added: scale: XXX to taper the object while extruding. + +# 2017-06-15, juergen@fabmail.org +# 0.17 scale is now centered on each path. and supports an optional second +# value for explicit Y scaling. Renamed the autoheight command line +# option to 'parsedesc' with default true. Renamed dict auto to +# extrusion. Rephrased all prose to refer to extrusion syntax rather +# than auto zsize. +# 2017-06-18, juergen@fabmail.org +# 0.18 pep8 relaxed. all hard 80 cols line breaks removed. +# Refactored the commands into a separate tab in the inx. +# Added 'View in OpenSCAD' feature with pidfile for single instance. +# +# 2017-08-10, juergen@fabmail.org +# 0.19 fix style="" elements. +# +# 2017-11-14, juergen@fabmail.org +# 0.20 do not traverse into objects with style="display:none" +# some precondition checks had 'pass' but should have 'continue'. +# +# 2018-01-21, juergen@fabmail.org +# 0.21 start a new openscad instance if the command has changed. +# +# 2018-01-27, juergen@fabmail.org +# 0.22 command comparison fixed. do not use 0.21 ! +# +# 2018-02-18, juergen@fabmail.org +# 0.23 fixed rect with x=0 not rendered. +# FIXME: should really use inksvg.py here too! +# +# 2018.09-09, juergen@fabmail.org +# 0.24 merged module feature, renamed Height,Raise to Zsize,Zoffset +# +# 2019-01-18, juergen@fabmail.org +# 0.25 Allow Depth,Offset instead of Zsize,Zoffset +# Simplify the syntax description page. +# Added parameter line_width_scale. +# Added parameter chamfer, and module chamfer_sphere for doing minkowski +# +# 2020-03-12, juergen@fabmail.org +# 0.26 DEB: relax dependency on 'openscad' to 'openscad | bash' +# +# 2020-04-05, juergen@fabmail.org +# 0.27 Make pep8 happy again. Give proper error message, when file was not saved. +# +# CAUTION: keep the version number in sync with paths2openscad.inx about page + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +import os +import sys +import os.path +import inkex +import inkex.paths +import inkex.bezier +from inkex.transforms import Transform +import re +import time +import string +import tempfile +import gettext +import subprocess + +VERSION = "0.27" # CAUTION: Keep in sync with all *.inx files +DEFAULT_WIDTH = 100 +DEFAULT_HEIGHT = 100 +# Parse all these as 56.7 mm zsize: +# "path1234_56_7_mm", "pat1234____57.7mm", "path1234_57.7__mm" +# +# The verbs Height and Raise are deprecated. Use Zsize and Zoffset, (or Depth and Offset) instead. +RE_AUTO_ZSIZE_ID = re.compile(r".*?_+([aA]?\d+(?:[_\.]\d+)?)_*mm$") +RE_AUTO_ZSIZE_DESC = re.compile( + r"^(?:[Hh]eight|[Dd]epth|[Zz]-?size):\s*([aA]?\d+(?:\.\d+)?) ?mm$", re.MULTILINE +) +RE_AUTO_SCALE_DESC = re.compile( + r"^(?:sc|[Ss]cale|[Tt]aper):\s*(\d+(?:\.\d+)?(?: ?, ?\d+(?:\.\d+)?)?) ?%$", + re.MULTILINE, +) +RE_AUTO_ZOFFSET_DESC = re.compile( + r"^(?:[Rr]aise|[Zz]-?offset|[Oo]ffset):\s*(\d+(?:\.\d+)?) ?mm$", re.MULTILINE +) +DESC_TAGS = ["desc", inkex.addNS("desc", "svg")] + +# CAUTION: keep these defaults in sync with paths2openscad.inx +INX_SCADVIEW = os.getenv("INX_SCADVIEW", "openscad \"{NAME}.scad\"") +INX_SCAD2STL = os.getenv("INX_SCAD2STL", "openscad \"{NAME}.scad\" -o \"{NAME}.stl\"") +INX_STL_POSTPROCESSING = os.getenv("INX_STL_POSTPROCESSING", "cura \"{NAME}.stl\" &") + + +def IsProcessRunning(pid): + """ + Windows code from https://stackoverflow.com/questions/7647167/check-if-a-process-is-running-in-python-in-linux-unix + """ + sys_platform = sys.platform.lower() + if sys_platform.startswith("win"): + with subprocess.Popen(r'tasklist.exe /NH /FI "PID eq %d"' % (pid), shell=True, stdout=subprocess.PIPE) as ps: + output = ps.stdout.read() + ps.wait() + if str(pid) in output: + return True + return False + else: + # OSX sys_platform.startswith('darwin'): + # and Linux + try: + os.kill(pid, 0) + return True + except OSError: + return False + + +def parseLengthWithUnits(str, default_unit="px"): + """ + Parse an SVG value which may or may not have units attached + This version is greatly simplified in that it only allows: no units, + units of px, and units of %. Everything else, it returns None for. + There is a more general routine to consider in scour.py if more + generality is ever needed. + With inkscape 0.91 we need other units too: e.g. svg:width="400mm" + """ + + u = default_unit + s = str.strip() + if s[-2:] in ("px", "pt", "pc", "mm", "cm", "in", "ft"): + u = s[-2:] + s = s[:-2] + elif s[-1:] in ("m", "%"): + u = s[-1:] + s = s[:-1] + + try: + v = float(s) + except Exception: + return None, None + + return v, u + + +def pointInBBox(pt, bbox): + """ + Determine if the point pt=[x, y] lies on or within the bounding + box bbox=[xmin, xmax, ymin, ymax]. + """ + + # if ( x < xmin ) or ( x > xmax ) or ( y < ymin ) or ( y > ymax ) + if (pt[0] < bbox[0]) or (pt[0] > bbox[1]) or (pt[1] < bbox[2]) or (pt[1] > bbox[3]): + return False + else: + return True + + +def bboxInBBox(bbox1, bbox2): + """ + Determine if the bounding box bbox1 lies on or within the + bounding box bbox2. NOTE: we do not test for strict enclosure. + + Structure of the bounding boxes is + + bbox1 = [ xmin1, xmax1, ymin1, ymax1 ] + bbox2 = [ xmin2, xmax2, ymin2, ymax2 ] + """ + + # if ( xmin1 < xmin2 ) or ( xmax1 > xmax2 ) or + # ( ymin1 < ymin2 ) or ( ymax1 > ymax2 ) + + if ( + (bbox1[0] < bbox2[0]) + or (bbox1[1] > bbox2[1]) + or (bbox1[2] < bbox2[2]) + or (bbox1[3] > bbox2[3]) + ): + return False + else: + return True + + +def pointInPoly(p, poly, bbox=None): + """ + Use a ray casting algorithm to see if the point p = [x, y] lies within + the polygon poly = [[x1,y1],[x2,y2],...]. Returns True if the point + is within poly, lies on an edge of poly, or is a vertex of poly. + """ + + if (p is None) or (poly is None): + return False + + # Check to see if the point lies outside the polygon's bounding box + if bbox is not None: + if not pointInBBox(p, bbox): + return False + + # Check to see if the point is a vertex + if p in poly: + return True + + # Handle a boundary case associated with the point + # lying on a horizontal edge of the polygon + x = p[0] + y = p[1] + p1 = poly[0] + p2 = poly[1] + for i in range(len(poly)): + if i != 0: + p1 = poly[i - 1] + p2 = poly[i] + if ( + (y == p1[1]) + and (p1[1] == p2[1]) + and (x > min(p1[0], p2[0])) + and (x < max(p1[0], p2[0])) + ): + return True + + n = len(poly) + inside = False + + p1_x, p1_y = poly[0] + for i in range(n + 1): + p2_x, p2_y = poly[i % n] + if y > min(p1_y, p2_y): + if y <= max(p1_y, p2_y): + if x <= max(p1_x, p2_x): + if p1_y != p2_y: + intersect = p1_x + (y - p1_y) * (p2_x - p1_x) / (p2_y - p1_y) + if x <= intersect: + inside = not inside + else: + inside = not inside + p1_x, p1_y = p2_x, p2_y + + return inside + + +def polyInPoly(poly1, bbox1, poly2, bbox2): + """ + Determine if polygon poly2 = [[x1,y1],[x2,y2],...] + contains polygon poly1. + + The bounding box information, bbox=[xmin, xmax, ymin, ymax] + is optional. When supplied it can be used to perform rejections. + Note that one bounding box containing another is not sufficient + to imply that one polygon contains another. It's necessary, but + not sufficient. + """ + + # See if poly1's bboundin box is NOT contained by poly2's bounding box + # if it isn't, then poly1 cannot be contained by poly2. + + if (bbox1 is not None) and (bbox2 is not None): + if not bboxInBBox(bbox1, bbox2): + return False + + # To see if poly1 is contained by poly2, we need to ensure that each + # vertex of poly1 lies on or within poly2 + + for p in poly1: + if not pointInPoly(p, poly2, bbox2): + return False + + # Looks like poly1 is contained on or in Poly2 + + return True + + +def subdivideCubicPath(sp, flat, i=1): + """ + [ Lifted from eggbot.py with impunity ] + + Break up a bezier curve into smaller curves, each of which + is approximately a straight line within a given tolerance + (the "smoothness" defined by [flat]). + + This is a modified version of cspsubdiv.cspsubdiv(): rewritten + because recursion-depth errors on complicated line segments + could occur with cspsubdiv.cspsubdiv(). + """ + + while True: + while True: + if i >= len(sp): + return + + p0 = sp[i - 1][1] + p1 = sp[i - 1][2] + p2 = sp[i][0] + p3 = sp[i][1] + + b = (p0, p1, p2, p3) + + if inkex.bezier.maxdist(b) > flat: + break + + i += 1 + + one, two = inkex.bezier.beziersplitatt(b, 0.5) + sp[i - 1][2] = one[1] + sp[i][0] = two[2] + p = [one[2], one[3], two[1]] + sp[i:1] = [p] + + +def msg_linear_extrude(id, prefix): + msg = ( + " translate (%s_%d_center) linear_extrude(height=h, convexity=10, scale=0.01*s)\n" + + " translate (-%s_%d_center) polygon(%s_%d_points);\n" + ) + return msg % (id, prefix, id, prefix, id, prefix) + + +def msg_linear_extrude_by_paths(id, prefix): + msg = ( + " translate (%s_%d_center) linear_extrude(height=h, convexity=10, scale=0.01*s)\n" + + " translate (-%s_%d_center) polygon(%s_%d_points, %s_%d_paths);\n" + ) + return msg % (id, prefix, id, prefix, id, prefix, id, prefix) + + +def msg_extrude_by_hull(id, prefix): + msg = ( + " for (t = [0: len(%s_%d_points)-2]) {\n" % (id, prefix) + + " hull() {\n" + + " translate(%s_%d_points[t]) \n" % (id, prefix) + + " cylinder(h=h, r=w/2, $fn=res);\n" + + " translate(%s_%d_points[t + 1]) \n" % (id, prefix) + + " cylinder(h=h, r=w/2, $fn=res);\n" + + " }\n" + + " }\n" + ) + return msg + + +def msg_extrude_by_hull_and_paths(id, prefix): + msg = ( + " for (p = [0: len(%s_%d_paths)-1]) {\n" % (id, prefix) + + " pp = %s_%d_paths[p];\n" % (id, prefix) + + " for (t = [0: len(pp)-2]) {\n" + + " hull() {\n" + + " translate(%s_%d_points[pp[t]])\n" % (id, prefix) + + " cylinder(h=h, r=w/2, $fn=res);\n" + + " translate(%s_%d_points[pp[t+1]])\n" % (id, prefix) + + " cylinder(h=h, r=w/2, $fn=res);\n" + + " }\n" + + " }\n" + + " }\n" + ) + return msg + + +class PathsToOpenSCAD(inkex.EffectExtension): + + def add_arguments(self, pars): + inkex.localization.localize() # does not help for localizing my *.inx file + + pars.add_argument( "--tab", default="splash", help="The active tab when Apply was pressed", ) + pars.add_argument( "--smoothness", type=float, default=float(0.2), help="Curve smoothing (less for more)", ) + pars.add_argument( "--chamfer", type=float, default=float(1.), help="Add a chamfer radius, displacing all object walls outwards [mm]", ) + pars.add_argument( "--chamfer_fn", type=int, default=int(4), help="Chamfer precision ($fn when generating the minkowski sphere)", ) + pars.add_argument( "--zsize", default="5", help="Depth (Z-size) [mm]", ) + pars.add_argument( "--min_line_width", type=float, default=float(1), help="Line width for non closed curves [mm]", ) + pars.add_argument( "--line_width_scale_perc", type=float, default=float(1), help="Percentage of SVG line width. Use e.g. 26.46 to compensate a px/mm confusion. Default: 100 [%]", ) + pars.add_argument( "--line_fn", type=int, default=int(4), help="Line width precision ($fn when constructing hull)", ) + pars.add_argument( "--force_line", type=inkex.utils.Boolean, default=False, help="Force outline mode.", ) + pars.add_argument( "--fname", default="{NAME}.scad", help="openSCAD output file derived from the svg file name.", ) + pars.add_argument( "--parsedesc", type=inkex.utils.Boolean, default=True, help="Parse zsize and other parameters from object descriptions", ) + pars.add_argument( "--scadview", type=inkex.utils.Boolean, default=False, help="Open the file with openscad ( details see --scadviewcmd option )", ) + pars.add_argument( "--scadviewcmd", default=INX_SCADVIEW, help="Command used start an openscad viewer. Use {SCAD} for the openSCAD input.", ) + pars.add_argument( "--scad2stl", type=inkex.utils.Boolean, default=False, help="Also convert to STL ( details see --scad2stlcmd option )", ) + pars.add_argument( "--scad2stlcmd", default=INX_SCAD2STL, help="Command used to convert to STL. You can use {NAME}.scad for the openSCAD file to read and " + + "{NAME}.stl for the STL file to write.", ) + pars.add_argument( "--stlpost", type=inkex.utils.Boolean, default=False, help="Start e.g. a slicer. This implies the --scad2stl option. ( see --stlpostcmd )", ) + pars.add_argument( "--stlpostcmd", default=INX_STL_POSTPROCESSING, help="Command used for post processing an STL file (typically a slicer). You can use {NAME}.stl for the STL file.", ) + pars.add_argument( "--stlmodule", type=inkex.utils.Boolean, default=False, help="Output configured to comment out final rendering line, to create a module file for import.", ) + + self.userunitsx = 1.0 # Move to pure userunits per mm for v1.0 + self.userunitsy = 1.0 + self.px_used = False # raw px unit depends on correct dpi. + self.cx = float(DEFAULT_WIDTH) / 2.0 + self.cy = float(DEFAULT_HEIGHT) / 2.0 + self.xmin, self.xmax = (1.0E70, -1.0E70) + self.ymin, self.ymax = (1.0E70, -1.0E70) + + # Dictionary of paths we will construct. It's keyed by the SVG node + # it came from. Such keying isn't too useful in this specific case, + # but it can be useful in other applications when you actually want + # to go back and update the SVG document + self.paths = {} + + # Output file handling + self.call_list = [] + self.call_list_neg = [] # anti-matter (holes via difference) + self.pathid = int(0) + + # Output file + self.outfile = None + + # For handling an SVG viewbox attribute, we will need to know the + # values of the document's width and height attributes as well + # as establishing a transform from the viewbox to the display. + + self.docWidth = float(DEFAULT_WIDTH) + self.docHeight = float(DEFAULT_HEIGHT) + self.docTransform = Transform(None) + + # Dictionary of warnings issued. This to prevent from warning + # multiple times about the same problem + self.warnings = {} + + def getLength(self, name, default): + + """ + Get the attribute with name "name" and default value "default" + Parse the attribute into a value and associated units. Then, accept + units of cm, ft, in, m, mm, pc, or pt. Convert to pixels. + + Note that SVG defines 90 px = 1 in = 25.4 mm. + Note: Since inkscape 0.92 we use the CSS standard of 96 px = 1 in. + """ + str = self.document.getroot().get(name) + if str: + return self.LengthWithUnit(str) + else: + # No width specified; assume the default value + return float(default) + + def LengthWithUnit(self, strn, default_unit="px"): + v, u = parseLengthWithUnits(strn, default_unit) + if v is None: + # Couldn't parse the value + return None + elif u == "mm": + return float(v) * (self.userunitsx) + elif u == "cm": + return float(v) * (self.userunitsx * 10.0) + elif u == "m": + return float(v) * (self.userunitsx * 1000.0) + elif u == "in": + return float(v) * self.userunitsx * 25.4 + elif u == "ft": + return float(v) * 12.0 * self.userunitsx * 25.4 + elif u == "pt": + # Use modern "Postscript" points of 72 pt = 1 in instead + # of the traditional 72.27 pt = 1 in + return float(v) * (self.userunitsx * 25.4 / 72.0) + elif u == "pc": + return float(v) * (self.userunitsx * 25.4 / 6.0) + elif u == "px": + self.px_used = True + return float(v) + else: + # Unsupported units + return None + + def getDocProps(self): + """ + Get the document's height and width attributes from the tag. + Use a default value in case the property is not present or is + expressed in units of percentages. + """ + self.inkscape_version = self.document.getroot().get( + "{http://www.inkscape.org/namespaces/inkscape}version" + ) + sodipodi_docname = self.document.getroot().get( + "{http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd}docname" + ) + if sodipodi_docname is None: + sodipodi_docname = "inkscape" + # the document was not saved. We can assume it is v1 inkscape + self.basename = re.sub(r"\.SVG", "", sodipodi_docname, flags=re.I) + self.docHeight = self.getLength("height", DEFAULT_HEIGHT) + self.docWidth = self.getLength("width", DEFAULT_WIDTH) + + if (self.docHeight is None) or (self.docWidth is None): + return False + else: + return True + + def handleViewBox(self): + """ + Set up the document-wide transform in the event that the document has + an SVG viewbox, which it should as of v1.0 + For details, see https://wiki.inkscape.org/wiki/index.php/Units_In_Inkscape + """ + + if self.getDocProps(): + viewbox = self.document.getroot().get("viewBox") + if viewbox: + vinfo = viewbox.strip().replace(",", " ").split() + vinfo = [float(i) for i in vinfo] + unitsx = abs(vinfo[0] - vinfo[2]) + # unitsy = abs(vinfo[1] - vinfo[3]) + self.userunitsx = self.docWidth / unitsx + # The above wiki page suggests that x and y scaling maybe different + # however in practice they are not + self.userunitsy = self.userunitsx + self.docTransform = Transform( + "scale(%f,%f)" % (self.userunitsx, self.userunitsy) + ) + + def getPathVertices(self, path, node=None, transform=None): + """ + Decompose the path data from an SVG element into individual + subpaths, each subpath consisting of absolute move to and line + to coordinates. Place these coordinates into a list of polygon + vertices. + """ + if not path: + # Path must have been devoid of any real content + return None + + # Get a cubic super path + p = inkex.paths.CubicSuperPath(path) + if (not p) or (len(p) == 0): + # Probably never happens, but... + return None + + if transform: + p = p.transform(transform) + + # Now traverse the cubic super path + subpath_list = [] + subpath_vertices = [] + + sp_xmin = None + sp_xmax = None + sp_ymin = None + sp_ymax = None + for sp in p: + + # We've started a new subpath + # See if there is a prior subpath and whether we should keep it + if len(subpath_vertices): + subpath_list.append( + [subpath_vertices, [sp_xmin, sp_xmax, sp_ymin, sp_ymax]] + ) + + subpath_vertices = [] + subdivideCubicPath(sp, float(self.options.smoothness)) + + # Note the first point of the subpath + first_point = sp[0][1] + subpath_vertices.append(first_point) + sp_xmin = first_point[0] + sp_xmax = first_point[0] + sp_ymin = first_point[1] + sp_ymax = first_point[1] + + n = len(sp) + + # Traverse each point of the subpath + for csp in sp[1:n]: + + # Append the vertex to our list of vertices + pt = csp[1] + subpath_vertices.append(pt) + + # Track the bounding box of this subpath + if pt[0] < sp_xmin: + sp_xmin = pt[0] + elif pt[0] > sp_xmax: + sp_xmax = pt[0] + if pt[1] < sp_ymin: + sp_ymin = pt[1] + elif pt[1] > sp_ymax: + sp_ymax = pt[1] + + # Track the bounding box of the overall drawing + # This is used for centering the polygons in OpenSCAD around the + # (x,y) origin + if sp_xmin < self.xmin: + self.xmin = sp_xmin + if sp_xmax > self.xmax: + self.xmax = sp_xmax + if sp_ymin < self.ymin: + self.ymin = sp_ymin + if sp_ymax > self.ymax: + self.ymax = sp_ymax + + # Handle the final subpath + if len(subpath_vertices): + subpath_list.append( + [subpath_vertices, [sp_xmin, sp_xmax, sp_ymin, sp_ymax]] + ) + + if len(subpath_list) > 0: + self.paths[node] = subpath_list + + def getPathStyle(self, node): + style = node.get("style", "") + # .get default is not reliable, ensure value is a string + if not style: + style = "" + ret = {} + # fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:10;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1 + for elem in style.split(";"): + if len(elem): + try: + (key, val) = elem.strip().split(":") + except Exception: + inkex.errormsg( + "unparsable element '{1}' in style '{0}'".format(elem, style) + ) + ret[key] = val + return ret + + def convertPath(self, node): + def object_merge_extrusion_values(extrusion, node): + + """ Parser for description and ID fields for extrusion parameters. + This recurse into parents, to inherit values from enclosing + groups. + """ + p = node.getparent() + if p is not None and p.tag in (inkex.addNS("g", "svg"), "g"): + object_merge_extrusion_values(extrusion, p) + + # let the node override inherited values + rawid = node.get("id", "") + if rawid is not None: + zsize = RE_AUTO_ZSIZE_ID.findall(rawid) + if zsize: + extrusion["zsize"] = zsize[-1].replace("_", ".") + # let description contents override id contents. + for tagname in DESC_TAGS: + desc_node = node.find("./%s" % tagname) + if desc_node is not None: + zsize = RE_AUTO_ZSIZE_DESC.findall(desc_node.text) + if zsize: + extrusion["zsize"] = zsize[-1] + zscale = RE_AUTO_SCALE_DESC.findall(desc_node.text) + if zscale: + if "," in zscale[-1]: + extrusion["scale"] = "[" + zscale[-1] + "]" + else: + extrusion["scale"] = zscale[-1] + zoffset = RE_AUTO_ZOFFSET_DESC.findall(desc_node.text) + if zoffset: + extrusion["zoffset"] = zoffset[-1] + if extrusion["zsize"][0] in ("a", "A"): + extrusion["neg"] = True + extrusion["zsize"] = extrusion["zsize"][1:] + # END object_merge_extrusion_values + + path = self.paths[node] + if (path is None) or (len(path) == 0): + return + + # Determine which polys contain which + + contains = [[] for i in range(len(path))] + contained_by = [[] for i in range(len(path))] + + for i in range(0, len(path)): + for j in range(i + 1, len(path)): + if polyInPoly(path[j][0], path[j][1], path[i][0], path[i][1]): + # subpath i contains subpath j + contains[i].append(j) + # subpath j is contained in subpath i + contained_by[j].append(i) + elif polyInPoly(path[i][0], path[i][1], path[j][0], path[j][1]): + # subpath j contains subpath i + contains[j].append(i) + # subpath i is contained in subpath j + contained_by[i].append(j) + + # Generate an OpenSCAD module for this path + rawid = node.get("id", "") + if (rawid is None) or (rawid == ""): + id = str(self.pathid) + "x" + rawid = id + self.pathid += 1 + else: + id = re.sub("[^A-Za-z0-9_]+", "", rawid) + + style = self.getPathStyle(node) + stroke_width = style.get("stroke-width", "1") + + # FIXME: works with document units == 'mm', but otherwise untested.. + stroke_width_mm = self.LengthWithUnit(stroke_width, default_unit="mm") + stroke_width_mm = str(stroke_width_mm * self.userunitsx) # px to mm + fill_color = style.get("fill", "#FFF") + if fill_color == "none": + filled = False + else: + filled = True + if filled is False and style.get("stroke", "none") == "none": + inkex.errormsg( + "WARNING: " + rawid + " has fill:none and stroke:none, object ignored." + ) + return + + # #### global data for msg_*() functions. #### + # fold subpaths into a single list of points and index paths. + prefix = 0 + for i in range(0, len(path)): + # Skip this subpath if it is contained by another one + if len(contained_by[i]) != 0: + continue + subpath = path[i][0] + bbox = path[i][1] # [xmin, xmax, ymin, ymax] + + # + polycenter = ( + id + + "_" + + str(prefix) + + "_center = [%f,%f]" + % ( + (bbox[0] + bbox[1]) * .5 - self.cx, + (bbox[2] + bbox[3]) * .5 - self.cy, + ) + ) + polypoints = id + "_" + str(prefix) + "_points = [" + # polypaths = [[0,1,2], [3,4,5]] # this path is two triangle + polypaths = id + "_" + str(prefix) + "_paths = [[" + if len(contains[i]) == 0: + # This subpath does not contain any subpaths + for point in subpath: + polypoints += "[%f,%f]," % ( + (point[0] - self.cx), + (point[1] - self.cy), + ) + polypoints = polypoints[:-1] + polypoints += "];\n" + self.outfile.write(polycenter + ";\n") + self.outfile.write(polypoints) + prefix += 1 + else: + # This subpath contains other subpaths + # collect all points into polypoints + # also collect the indices into polypaths + for point in subpath: + polypoints += "[%f,%f]," % ( + (point[0] - self.cx), + (point[1] - self.cy), + ) + count = len(subpath) + for k in range(0, count): + polypaths += "%d," % (k) + polypaths = polypaths[:-1] + "],\n\t\t\t\t[" + # The nested paths + for j in contains[i]: + for point in path[j][0]: + polypoints += "[%f,%f]," % ( + (point[0] - self.cx), + (point[1] - self.cy), + ) + for k in range(count, count + len(path[j][0])): + polypaths += "%d," % k + count += len(path[j][0]) + polypaths = polypaths[:-1] + "],\n\t\t\t\t[" + polypoints = polypoints[:-1] + polypoints += "];\n" + polypaths = polypaths[:-7] + "];\n" + # write the polys and paths + self.outfile.write(polycenter + ";\n") + self.outfile.write(polypoints) + self.outfile.write(polypaths) + prefix += 1 + # #### end global data for msg_*() functions. #### + + self.outfile.write("module poly_" + id + "(h, w, s, res=line_fn)\n{\n") + # Element is transformed to correct size, so scale is now just for the user to + # tweak after the fact + self.outfile.write(" scale([custom_scale_x, -custom_scale_y, 1]) union()\n {\n") + + # And add the call to the call list + # Z-size is set by the overall module parameter + # unless an extrusion zsize is parsed from the description or ID. + extrusion = {"zsize": "h", "zoffset": "0", "scale": 100.0, "neg": False} + if self.options.parsedesc is True: + object_merge_extrusion_values(extrusion, node) + + call_item = "translate ([0,0,%s]) poly_%s(%s, min_line_mm(%s), %s);\n" % ( + extrusion["zoffset"], + id, + extrusion["zsize"], + stroke_width_mm, + extrusion["scale"], + ) + + if extrusion["neg"]: + self.call_list_neg.append(call_item) + else: + self.call_list.append(call_item) + + prefix = 0 + for i in range(0, len(path)): + + # Skip this subpath if it is contained by another one + if len(contained_by[i]) != 0: + continue + + subpath = path[i][0] + bbox = path[i][1] + + if filled and not self.options.force_line: + + if len(contains[i]) == 0: + # This subpath does not contain any subpaths + poly = msg_linear_extrude(id, prefix) + else: + # This subpath contains other subpaths + poly = msg_linear_extrude_by_paths(id, prefix) + + else: # filled == False -> outline mode + + if len(contains[i]) == 0: + # This subpath does not contain any subpaths + poly = msg_extrude_by_hull(id, prefix) + else: + # This subpath contains other subpaths + poly = msg_extrude_by_hull_and_paths(id, prefix) + + self.outfile.write(poly) + prefix += 1 + + # End the module + self.outfile.write(" }\n}\n") + + def recursivelyTraverseSvg( + self, aNodeList, matCurrent=Transform(None), parent_visibility="visible" + ): + + """ + [ This too is largely lifted from eggbot.py ] + + Recursively walk the SVG document, building polygon vertex lists + for each graphical element we support. + + Rendered SVG elements: + , , , , , , + + Supported SVG elements: + , + + Ignored SVG elements: + , , , , , + processing directives + + All other SVG elements trigger an error (including ) + """ + + for node in aNodeList: + + # Ignore invisible nodes + v = node.get("visibility", parent_visibility) + if v == "inherit": + v = parent_visibility + if v == "hidden" or v == "collapse": + continue + + s = node.get("style", "") + if s == "display:none": + continue + + # First apply the current matrix transform to this node's transform + matNew = matCurrent * Transform(node.get("transform")) + + if node.tag == inkex.addNS("g", "svg") or node.tag == "g": + + self.recursivelyTraverseSvg(node, matNew, v) + + elif node.tag == inkex.addNS("use", "svg") or node.tag == "use": + + # A element refers to another SVG element via an + # xlink:href="#blah" attribute. We will handle the element by + # doing an XPath search through the document, looking for the + # element with the matching id="blah" attribute. We then + # recursively process that element after applying any necessary + # (x,y) translation. + # + # Notes: + # 1. We ignore the height and width attributes as they do not + # apply to path-like elements, and + # 2. Even if the use element has visibility="hidden", SVG + # still calls for processing the referenced element. The + # referenced element is hidden only if its visibility is + # "inherit" or "hidden". + + refid = node.get(inkex.addNS("href", "xlink")) + if not refid: + continue + + # [1:] to ignore leading '#' in reference + path = '//*[@id="%s"]' % refid[1:] + refnode = node.xpath(path) + if refnode: + x = float(node.get("x", "0")) + y = float(node.get("y", "0")) + # Note: the transform has already been applied + if (x != 0) or (y != 0): + matNew2 = matNew * Transform("translate(%f,%f)" % (x, y)) + else: + matNew2 = matNew + v = node.get("visibility", v) + self.recursivelyTraverseSvg(refnode, matNew2, v) + + elif node.tag == inkex.addNS("path", "svg"): + + path_data = node.get("d") + if path_data: + self.getPathVertices(path_data, node, matNew) + + elif node.tag == inkex.addNS("rect", "svg") or node.tag == "rect": + + # Manually transform + # + # + # + # into + # + # + # + # I.e., explicitly draw three sides of the rectangle and the + # fourth side implicitly + + # Create a path with the outline of the rectangle + x = float(node.get("x")) + y = float(node.get("y")) + w = float(node.get("width", "0")) + h = float(node.get("height", "0")) + a = [] + a.append(["M", [x, y]]) + a.append(["l", [w, 0]]) + a.append(["l", [0, h]]) + a.append(["l", [-w, 0]]) + a.append(["Z", []]) + self.getPathVertices(a, node, matNew) + + elif node.tag == inkex.addNS("line", "svg") or node.tag == "line": + + # Convert + # + # + + x1 = float(node.get("x1")) + y1 = float(node.get("y1")) + x2 = float(node.get("x2")) + y2 = float(node.get("y2")) + if (not x1) or (not y1) or (not x2) or (not y2): + continue + a = [] + a.append(["M", [x1, y1]]) + a.append(["L", [x2, y2]]) + self.getPathVertices(a, node, matNew) + + elif node.TAG in ["polygon", "polyline"]: + + # Convert + # + # + # + # to + # + # + # + # Note: we ignore polylines with no points + + pl = node.get("points", "").strip() + if not pl: + continue + + pa = pl.split() + d = "".join( + [ + "M " + pa[i] if i == 0 else " L " + pa[i] + for i in range(0, len(pa)) + ] + ) + d = [] + first = True + for part in pl.split(): + x, y = part.split(",") + coords = [float(x), float(y)] + if first: + d.append(["M", coords]) + first = False + else: + d.append(["L", coords]) + if node.TAG == "polygon": + d.append(["Z", []]) + self.getPathVertices(d, node, matNew) + + elif ( + node.tag == inkex.addNS("ellipse", "svg") + or node.tag == "ellipse" + or node.tag == inkex.addNS("circle", "svg") + or node.tag == "circle" + ): + + # Convert circles and ellipses to a path with two 180 degree + # arcs. In general (an ellipse), we convert + # + # + # + # to + # + # + # + # where + # + # X1 = CX - RX + # X2 = CX + RX + # + # Note: ellipses or circles with a radius attribute of value 0 + # are ignored + + if node.tag == inkex.addNS("ellipse", "svg") or node.tag == "ellipse": + rx = float(node.get("rx", "0")) + ry = float(node.get("ry", "0")) + else: + rx = float(node.get("r", "0")) + ry = rx + if rx == 0 or ry == 0: + continue + + cx = float(node.get("cx", "0")) + cy = float(node.get("cy", "0")) + x1 = cx - rx + x2 = cx + rx + d = [ + ["M", (x1, cy)], + ["A", (rx, ry, 0, 1, 0, x2, cy)], + ["A", (rx, ry, 0, 1, 0, x1, cy)], + ] + self.getPathVertices(d, node, matNew) + + elif node.tag == inkex.addNS("pattern", "svg") or node.tag == "pattern": + pass + + elif node.tag == inkex.addNS("metadata", "svg") or node.tag == "metadata": + pass + + elif node.tag == inkex.addNS("defs", "svg") or node.tag == "defs": + pass + + elif node.tag == inkex.addNS("desc", "svg") or node.tag == "desc": + pass + + elif ( + node.tag == inkex.addNS("namedview", "sodipodi") + or node.tag == "namedview" + ): + pass + + elif node.tag == inkex.addNS("eggbot", "svg") or node.tag == "eggbot": + pass + + elif node.tag == inkex.addNS("text", "svg") or node.tag == "text": + texts = [] + plaintext = "" + for tnode in node.iterfind(".//"): # all subtree + if tnode is not None and tnode.text is not None: + texts.append(tnode.text) + if len(texts): + plaintext = "', '".join(texts).encode("latin-1") + inkex.errormsg('Warning: text "%s"' % plaintext) + inkex.errormsg( + "Warning: unable to draw text, please convert it to a path first." + ) + + elif node.tag == inkex.addNS("title", "svg") or node.tag == "title": + pass + + elif node.tag == inkex.addNS("image", "svg") or node.tag == "image": + if "image" not in self.warnings: + inkex.errormsg( + gettext.gettext( + "Warning: unable to draw bitmap images; please convert them to line art first. " + 'Consider using the "Trace bitmap..." tool of the "Path" menu. Mac users please ' + "note that some X11 settings may cause cut-and-paste operations to paste in bitmap copies." + ) + ) + self.warnings["image"] = 1 + + elif node.tag == inkex.addNS("pattern", "svg") or node.tag == "pattern": + pass + + elif ( + node.tag == inkex.addNS("radialGradient", "svg") + or node.tag == "radialGradient" + ): + # Similar to pattern + pass + + elif ( + node.tag == inkex.addNS("linearGradient", "svg") + or node.tag == "linearGradient" + ): + # Similar in pattern + pass + + elif node.tag == inkex.addNS("style", "svg") or node.tag == "style": + # This is a reference to an external style sheet and not the + # value of a style attribute to be inherited by child elements + pass + + elif node.tag == inkex.addNS("cursor", "svg") or node.tag == "cursor": + pass + + elif ( + node.tag == inkex.addNS("color-profile", "svg") + or node.tag == "color-profile" + ): + # Gamma curves, color temp, etc. are not relevant to single + # color output + pass + + elif not isinstance(node.tag, (str, bytes)): + # This is likely an XML processing instruction such as an XML + # comment. lxml uses a function reference for such node tags + # and as such the node tag is likely not a printable string. + # Further, converting it to a printable string likely won't + # be very useful. + pass + + else: + inkex.errormsg( + "Warning: unable to draw object <%s>, please convert it to a path first." + % node.tag + ) + pass + + def recursivelyGetEnclosingTransform(self, node): + # Determine the cumulative transform which node inherits from its chain of ancestors. + node = node.getparent() + if node is not None: + parent_transform = self.recursivelyGetEnclosingTransform(node) + node_transform = node.get("transform", None) + if node_transform is None: + return parent_transform + else: + tr = Transform(node_transform) + if parent_transform is None: + return tr + else: + return parent_transform * tr + else: + return self.docTransform + + def effect(self): + # Viewbox handling + self.handleViewBox() + + # First traverse the document (or selected items), reducing + # everything to line segments. If working on a selection, + # then determine the selection's bounding box in the process. + # (Actually, we just need to know its extrema on the x-axis.) + + if self.options.ids: + # Traverse the selected objects + for id in self.options.ids: + transform = self.recursivelyGetEnclosingTransform(self.svg.selected[id]) + self.recursivelyTraverseSvg([self.svg.selected[id]], transform) + else: + # Traverse the entire document building new, transformed paths + self.recursivelyTraverseSvg(self.document.getroot(), self.docTransform) + + # Determine the center of the drawing's bounding box + self.cx = self.xmin + (self.xmax - self.xmin) / 2.0 + self.cy = self.ymin + (self.ymax - self.ymin) / 2.0 + + # Determine which polygons lie entirely within other polygons + try: + self.options.fname = self.options.fname.format(**{"NAME": self.basename}) + if os.sep not in self.options.fname and "PWD" in os.environ: + # current working directory of an extension seems to be the extension dir. + # Workaround using PWD, if available... + self.options.fname = os.environ["PWD"] + "/" + self.options.fname + scad_fname = os.path.expanduser(self.options.fname) + if "/" != os.sep: + scad_fname = scad_fname.replace("/", os.sep) + self.outfile = open(scad_fname, "w") + + self.outfile.write( + "// Generated by inkscape %s + inkscape-paths2openscad %s\n" + % (self.inkscape_version, VERSION) + ) + self.outfile.write('// %s from "%s.svg"\n' % (time.ctime(), self.basename)) + + # for use in options.fname basename is derived from the sodipodi_docname by + # stripping the svg extension - or if there is no sodipodi_docname basename is 'inkscape'. + # for use in scadviewcmd, scad2stlcmd and stlpostcmd basename is rederived from + # options.fname by stripping an scad extension. + self.basename = re.sub(r"\.scad", "", scad_fname, flags=re.I) + + self.outfile.write( + """ +// Module names are of the form poly_(). As a result, +// you can associate a polygon in this OpenSCAD program with the corresponding +// SVG element in the Inkscape document by looking for the XML element with +// the attribute id=\"inkscape-path-id\". + +// fudge value is used to ensure that subtracted solids are a tad taller +// in the z dimension than the polygon being subtracted from. This helps +// keep the resulting .stl file manifold. +fudge = 0.1; +""" + ) + if self.options.chamfer < 0.001: + self.options.chamfer = None + + self.outfile.write("user_unit_scale_x = %s;\n" % (self.userunitsx)) + self.outfile.write("user_unit_scale_y = %s;\n" % (self.userunitsy)) + self.outfile.write("custom_scale_x = 1;\n") + self.outfile.write("custom_scale_y = 1;\n") + + # writeout users parameters + self.outfile.write("zsize = %s;\n" % (self.options.zsize)) + self.outfile.write("line_fn = %d;\n" % (self.options.line_fn)) + if self.options.chamfer: + self.outfile.write("chamfer = %s;\n" % (self.options.chamfer)) + self.outfile.write("chamfer_fn = %d;\n" % (self.options.chamfer_fn)) + self.outfile.write("min_line_width = %s;\n" % (self.options.min_line_width)) + self.outfile.write( + "line_width_scale = %s;\n" % (self.options.line_width_scale_perc * 0.01) + ) + self.outfile.write( + "function min_line_mm(w) = max(min_line_width, w * line_width_scale) * %g;\n\n" + % self.userunitsx + ) + + for key in self.paths: + self.outfile.write("\n") + self.convertPath(key) + + if self.options.chamfer: + self.outfile.write( + """ +module chamfer_sphere(rad=chamfer, res=chamfer_fn) +{ + if(res <= 4) + { + // octaeder: 3 sided faces = 8 + polyhedron( + points = [ [.0, .0, rad], [.0, .0, -rad], [ rad, .0, .0], [-rad, .0, .0], [.0, rad, .0], [.0, -rad, .0] ], + faces = [ [4, 2, 0], [3, 4, 0], [5, 3, 0], [2, 5, 0], [5, 2, 1], [3, 5, 1], [4, 3, 1], [2 , 4, 1] ]); + } + else + { + sphere(r=rad, center=true, $fn=res); + } +} +""" + ) + + # Come up with a name for the module based on the file name. + name = os.path.splitext(os.path.basename(self.options.fname))[0] + # Remove all punctuation except underscore. + badchars = string.punctuation.replace("_", "") + " " + name = re.sub("[" + badchars + "]", "_", name) + + self.outfile.write("\nmodule %s(h)\n{\n" % name) + mi = "" + if self.options.chamfer: + mi = " " + self.outfile.write(" minkowski()\n {\n") + + # Now output the list of modules to call + self.outfile.write( + "%s difference()\n%s {\n%s union()\n%s {\n" % (mi, mi, mi, mi) + ) + for call in self.call_list: + self.outfile.write("%s %s" % (mi, call)) + self.outfile.write("%s }\n%s union()\n%s {\n" % (mi, mi, mi)) + for call in self.call_list_neg: + self.outfile.write("%s %s" % (mi, call)) + self.outfile.write("%s }\n%s }\n" % (mi, mi)) + if self.options.chamfer: + self.outfile.write(" chamfer_sphere();\n }\n") + + # The module that calls all the other ones. + if self.options.stlmodule is True: + self.outfile.write("}\n\n//%s(zsize);\n" % (name)) + else: + self.outfile.write("}\n\n%s(zsize);\n" % (name)) + + except IOError as e: + inkex.errormsg("Unable to write file " + self.options.fname) + inkex.errormsg("ERROR: " + str(e)) + + self.outfile.close() + + ################################################################ + # Call OpenSCAD + ################################################################ + if self.options.scadview is True: + pidfile = os.path.join(tempfile.gettempdir(), "paths2openscad.pid") + running = False + cmd = self.options.scadviewcmd.format(**{"SCAD": scad_fname, "NAME": self.basename}) + try: + with open(pidfile) as pfile: + m = re.match(r"(\d+)\s+(.*)", pfile.read()) + oldpid = int(m.group(1)) + oldcmd = m.group(2) + # print >> sys.stderr, "pid {1} seen in {0}".format(pidfile, oldpid) + # print >> sys.stderr, "cmd {0}, oldcmd {1}".format(cmd, oldcmd) + if cmd == oldcmd: + # we found a pidfile and the cmd in there is still identical. + # If we change the filename in the inkscape extension gui, the cmd differs, and + # the still running openscad would not pick up our changes. + # If the command is identical, we check if the pid in the pidfile is alive. + # If so, we assume, the still running openscad will pick up the changes. + # + # WARNING: too much magic here. We cannot really test, if the last assumption holds. + # Comment out the next line to always start a new instance of openscad. + running = IsProcessRunning(oldpid) + # print >> sys.stderr, "running {0}".format(running) + except Exception: + pass + if not running: + try: + tty = open("/dev/tty", "w") + except Exception: + tty = subprocess.PIPE + try: + with subprocess.Popen(cmd, shell=True, stdin=tty, stdout=tty, stderr=tty) as proc: + proc.wait() + except OSError as e: + raise OSError("%s failed: errno=%d %s" % (cmd, e.errno, e.strerror)) + try: + with open(pidfile, "w") as pfile: + pfile.write(str(proc.pid) + "\n" + cmd + "\n") + except Exception: + pass + else: + # BUG alert: + # If user changes the file viewed in openscad (save with different name, re-open that name + # without closing openscad, again, the still running openscad does not + # pick up the changes. and we have no way to tell the difference if it did. + pass + + ################################################################ + # Call OpenSCAD to STL conversion + ################################################################ + if self.options.scad2stl is True or self.options.stlpost is True: + stl_fname = self.basename + ".stl" + scad2stlcmd = self.options.scad2stlcmd.format(**{"SCAD": scad_fname, "STL": stl_fname, "NAME": self.basename}) + try: + os.unlink(stl_fname) + except Exception: + pass + + with subprocess.Popen(scad2stlcmd, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) as proc: + proc.wait() + stdout, stderr = proc.communicate() + len = -1 + try: + len = os.path.getsize(stl_fname) + except Exception: + pass + if len < 1000: + inkex.errormsg("CMD: {} WARNING: {} is very small: {} bytes.".format(scad2stlcmd, stl_fname, len)) + inkex.errormsg("= " * 24) + inkex.errormsg("STDOUT:\n{}".format(stdout)) + inkex.errormsg("= " * 24) + inkex.errormsg("STDERR:\n{}".format(stderr)) + inkex.errormsg("= " * 24) + if len <= 0: # something is wrong. better stop here + self.options.stlpost = False + + ################################################################ + # Call OpenSCAD post processing + ################################################################ + if self.options.stlpost is True: + stlpostcmd = self.options.stlpostcmd.format( + **{"STL": self.basename + ".stl", "NAME": self.basename} + ) + try: + tty = open("/dev/tty", "w") + except Exception: + tty = subprocess.PIPE + + try: + with subprocess.Popen(stlpostcmd, shell=True, stdin=tty, stdout=tty, stderr=tty) as proc: + proc.wait() + stdout, stderr = proc.communicate() + if stdout or stderr: + inkex.errormsg("CMD: {}".format(stlpostcmd)) + inkex.errormsg("= " * 24) + if stdout: + inkex.errormsg("STDOUT: {}".format(stdout)) + inkex.errormsg("= " * 24) + if stderr: + inkex.errormsg("STDERR: {}".format(stderr)) + inkex.errormsg("= " * 24) + except OSError as e: + raise OSError("%s failed: errno=%d %s" % (stlpostcmd, e.errno, e.strerror)) + +if __name__ == '__main__': + PathsToOpenSCAD().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/perspective_grid/perspective_grid.inx b/extensions/fablabchemnitz/perspective_grid/perspective_grid.inx new file mode 100644 index 00000000..41403d80 --- /dev/null +++ b/extensions/fablabchemnitz/perspective_grid/perspective_grid.inx @@ -0,0 +1,32 @@ + + + Perspective Grid + fablabchemnitz.de.perspective_grid + + + + + + + + 500 + 300 + 150 + -100.0 + 600 + 10 + 3 + 2 + 255 + + all + + + + + + + + diff --git a/extensions/fablabchemnitz/perspective_grid/perspective_grid.py b/extensions/fablabchemnitz/perspective_grid/perspective_grid.py new file mode 100644 index 00000000..456b7868 --- /dev/null +++ b/extensions/fablabchemnitz/perspective_grid/perspective_grid.py @@ -0,0 +1,270 @@ +#!/usr/bin/env python3 +''' +Copyright (C) 2013 Carl Sorensen carl.d.sorensen@gmail.com +Derived from grid_cartesian.py copyright (C) 2007 John Beard john.j.beard@gmail.com + + +##This extension allows you to draw a two-point perspective grid in Inkscape. +##There is a wide range of options including subdivision, subsubdivions +##and angles of the triangular axes. +##Custom line widths are also possible. +##All elements are grouped with similar elements (eg all x-subdivs) + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +''' + +import inkex +from math import * +from lxml import etree + +def draw_SVG_line(x1, y1, x2, y2, width, stroke, name, parent): + style = { 'stroke': stroke, 'stroke-width':str(width), 'fill': 'none' } + line_attribs = {'style':str(inkex.Style(style)), + inkex.addNS('label','inkscape'):name, + 'd':'M '+str(x1)+','+str(y1)+' L '+str(x2)+','+str(y2)} + etree.SubElement(parent, inkex.addNS('path','svg'), line_attribs ) + +def draw_SVG_rect(x,y,w,h, width, stroke, fill, name, parent): + style = { 'stroke': stroke, 'stroke-width':str(width), 'fill':fill} + rect_attribs = {'style':str(inkex.Style(style)), + inkex.addNS('label','inkscape'):name, + 'x':str(x), 'y':str(y), 'width':str(w), 'height':str(h)} + etree.SubElement(parent, inkex.addNS('rect','svg'), rect_attribs ) + +def colorString(pickerColor): + longcolor = int(pickerColor) + if longcolor < 0: + longcolor = longcolor & 0xFFFFFFFF + return '#' + format(longcolor >> 8, '06X') + +class PerspectiveGrid(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument("--size_unit", default="", help="Units for geometry") + pars.add_argument("--width", type=int, default=500, help="Width of grid window") + pars.add_argument("--height", type=int, default=300, help="Height of grid window") + pars.add_argument("--p_divs", type=int, default=10, help="Number of divisions in perspective angle") + pars.add_argument("--horizon", type=float, default=150, help="Y coordinate of horizon") + pars.add_argument("--left_x", type=float, default=-250, help="X coordinate of left perspective point") + pars.add_argument("--right_x", type=float, default=750, help="X coordinate of right perspective point") + pars.add_argument("--div_th", type=float, default=2, help="Grid division line thickness") + pars.add_argument("--div_color", type=int, help="Grid division line color") + pars.add_argument("--border_th", type=float, default=3, help="Border Line thickness") + + def EdgePoints(self,x0, y0, theta): + # find the intersection points of the line with the extended + # grid bounding box. + # Note that y is positive DOWN, not up + # Grid bounding box goes from (0,0) to (self.xmax, self.ymax) + theta_r = radians(theta) + if theta_r == 0: + return [[0,y0],[self.xmax,y0], + [-100, self.ymax], [self.xmax+100,0]] + r_bot = (self.ymax-y0)/sin(theta_r) + r_top = -y0/sin(theta_r) + r_left = -x0/cos(theta_r) + r_right = (self.xmax-x0)/cos(theta_r) + return [[0,y0+r_left*sin(theta_r)], # left + [self.xmax, y0+r_right*sin(theta_r)], # right + [x0+r_bot*cos(theta_r), self.ymax], #bottom + [x0+r_top*cos(theta_r), 0]] #top + + def trimmed_coords(self, x1, y1, theta): + #find the start and end coordinates for a grid line + #starting at (x1, y1) with an angle of theta + border_points = self.EdgePoints(x1, y1, theta) + left = 0 + right = 1 + top = 3 + bottom = 2 + x=0 + y=1 + if theta > 0: + if border_points[left][y] < 0: + start_x = border_points[top][x] + start_y = border_points[top][y] + else: + start_x = border_points[left][x] + start_y = border_points[left][y] + if border_points[right][y] > self.ymax: + end_x = border_points[bottom][x] + end_y = border_points[bottom][y] + else: + end_x = border_points[right][x] + end_y = border_points[right][y] + else: + if border_points[left][y] > self.ymax: + start_x = border_points[bottom][x] + start_y = border_points[bottom][y] + else: + start_x = border_points[left][x] + start_y = border_points[left][y] + if border_points[right][y] < 0: + end_x = border_points[top][x] + end_y = border_points[top][y] + else: + end_x = border_points[right][x] + end_y = border_points[right][y] + return [[start_x,start_y],[end_x, end_y]] + + def drawAngledGridLine (self, x1, y1, theta, thickness, color, + label, groupName): + end_points = self.trimmed_coords(x1, y1, theta) + x_start = end_points[0][0] + y_start = end_points[0][1] + x_end = end_points[1][0] + y_end = end_points[1][1] + + if (x_start >= 0 and x_start <= self.xmax and + y_start >= 0 and y_start <= self.ymax and + x_end >= 0 and x_end <= self.xmax and + y_end >= 0 and y_end <= self.ymax): + draw_SVG_line(x_start, y_start, + x_end, y_end, + thickness, colorString(color), label, groupName) + + def perspective_intersection(self, left_theta, right_theta): + if right_theta == 0 or left_theta == 0 or left_theta == right_theta: + return -100 # outside of bounding box + r=(self.right_x - self.left_x)/(sin(right_theta)/tan(left_theta)-cos(right_theta)) + y_int = self.horizon + r*sin(right_theta) + if y_int < 0 or y_int > self.ymax : + return -100 #above or below bounding box + return self.right_x + r*cos(right_theta) + + def effect(self): + + #find the pixel dimensions of the overall grid + self.ymax = self.svg.unittouu(str(self.options.height)+self.options.size_unit) + self.xmax = self.svg.unittouu(str(self.options.width)+self.options.size_unit) + self.horizon = self.svg.unittouu(str(self.options.horizon)+self.options.size_unit) + self.left_x = self.svg.unittouu(str(self.options.left_x)+self.options.size_unit) + self.right_x = self.svg.unittouu(str(self.options.right_x)+self.options.size_unit) + + + # Embed grid in group + #Put in in the centre of the current view + t = 'translate(' + str( self.svg.namedview.center[0]- self.xmax/2.0) + ',' + \ + str( self.svg.namedview.center[1]- self.ymax/2.0) + ')' + g_attribs = {inkex.addNS('label','inkscape'):'Grid_Perspective:Size' + \ + str( self.xmax)+'x'+str(self.ymax) + + ':Horizon'+str(self.horizon) + + ':LeftX'+str(self.left_x) + + ':RightX'+str(self.right_x), + 'transform':t } + grid = etree.SubElement(self.svg.get_current_layer(), 'g', g_attribs) + + #Group for vertical gridlines + g_attribs = {inkex.addNS('label','inkscape'):'VerticalGridlines'} + gv = etree.SubElement(grid, 'g', g_attribs) + + #Group for left point gridlines + g_attribs = {inkex.addNS('label','inkscape'):'LeftPointGridlines'} + glp = etree.SubElement(grid, 'g', g_attribs) + + #Group for right point gridlines + g_attribs = {inkex.addNS('label','inkscape'):'RightPointGridlines'} + grp = etree.SubElement(grid, 'g', g_attribs) + + draw_SVG_rect(0, 0, self.xmax, self.ymax, self.options.border_th, + colorString(self.options.div_color), 'none', + 'Border', grid) #border rectangle + + + # Calculate the extreme angles for the left and right points + if self.horizon < 0 : + left_theta_min = atan((self.horizon-0)/(0-self.right_x)) + left_theta_max = atan((self.ymax - self.horizon)/ + (0-self.left_x)) + right_theta_min = atan((0-self.horizon)/ + (self.left_x-self.xmax)) + right_theta_max = atan((self.horizon - self.ymax)/ + (self.right_x - self.xmax )) + elif self.horizon < self.ymax : + left_theta_min = atan((self.horizon-0)/(self.left_x-0)) + left_theta_max = atan((self.ymax - self.horizon)/ + (0-self.left_x)) + right_theta_min = atan((self.horizon-0)/ + (self.right_x-self.xmax)) + right_theta_max = atan((self.horizon - self.ymax)/ + (self.right_x - self.xmax )) + else: + left_theta_min = atan((self.horizon-0)/(self.left_x-0)) + left_theta_max = atan((self.ymax - self.horizon)/ + (0-self.right_x)) + right_theta_min = atan((self.horizon-0)/ + (self.right_x-self.xmax)) + right_theta_max = atan((self.horizon - self.ymax)/ + (self.left_x - self.xmax )) + + left_dtheta = (left_theta_max - left_theta_min)/float(self.options.p_divs) + + right_dtheta = (right_theta_max - right_theta_min)/float(self.options.p_divs) + mid_index = self.options.p_divs/2 + left_mid_theta = left_theta_min + mid_index * left_dtheta + right_mid_theta = right_theta_min + mid_index * right_dtheta + + + #DO THE PERSPECTIVE DIVISONS======================================== + for i in range(0,self.options.p_divs+1): + left_theta = left_theta_min + i * left_dtheta + right_theta = right_theta_min + i * right_dtheta + self.drawAngledGridLine(self.left_x, self.horizon, + degrees(left_theta), + self.options.div_th, + self.options.div_color, + 'LeftDivPersp'+str(i), + glp) + self.drawAngledGridLine(self.right_x, self.horizon, + degrees(right_theta), + self.options.div_th, + self.options.div_color, + 'RightDivPersp'+str(i), + grp) + intersection = self.perspective_intersection(left_theta, + right_theta_max - i * right_dtheta) + if intersection > 0 and intersection < self.xmax: + draw_SVG_line(intersection, 0, + intersection, self.ymax, + self.options.div_th, + colorString(self.options.div_color), + 'VerticalDiv'+str(i), gv) + comment = """ + intersection = self.perspective_intersection(left_theta, right_mid_theta) + if intersection > 0 and intersection < self.xmax: + draw_SVG_line(intersection, 0, + intersection, self.ymax, + self.options.div_th, + colorString(self.options.div_color), + 'VerticalDiv'+str(i), gv) + intersection = self.perspective_intersection(left_theta, right_theta) + if intersection > 0 and intersection < self.xmax: + draw_SVG_line(intersection, 0, + intersection, self.ymax, + self.options.div_th, + colorString(self.options.div_color), + 'VerticalDiv'+str(i), gv) + """ + + intersection = self.perspective_intersection(left_mid_theta, right_mid_theta) + if intersection > 0 and intersection < self.xmax: + draw_SVG_line(intersection, 0, + intersection, self.ymax, + self.options.div_th, + colorString(self.options.div_color), + 'VerticalDiv'+str(i), gv) + +if __name__ == '__main__': + PerspectiveGrid().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/piano_scale/piano_scale.inx b/extensions/fablabchemnitz/piano_scale/piano_scale.inx new file mode 100644 index 00000000..0d699e6d --- /dev/null +++ b/extensions/fablabchemnitz/piano_scale/piano_scale.inx @@ -0,0 +1,46 @@ + + + Piano Scale + fablabchemnitz.de.piano_scale + C1 + B2 + C1 + + + 2212221 + + + + + + + + + + + + + + + + + + + + + + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/piano_scale/piano_scale.py b/extensions/fablabchemnitz/piano_scale/piano_scale.py new file mode 100644 index 00000000..23d4a016 --- /dev/null +++ b/extensions/fablabchemnitz/piano_scale/piano_scale.py @@ -0,0 +1,331 @@ +#!/usr/bin/env python3 + +''' +svgPianoScale.py +Inkscape generator plugin for automatic creation schemes of musical scales and chords. + +Copyright (C) 2011 Iljin Alexender + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +''' + +__version__ = "1.0.1" +# Original by Alexander Iljin +# Some mods to 0.91 by Neon22 2016 + +import inkex +import re +import math +from datetime import * +from lxml import etree + +notes = ('C', 'C#', 'D', 'D#', 'E', 'F', 'F#', 'G', 'G#', 'A', 'A#', 'B') +keys_color = ('W', 'B', 'W', 'B', 'W', 'W', 'B', 'W', 'B', 'W', 'B', 'W') # 12 notes +keys = {'C':'W', 'C#':'B', 'D':'W', 'D#':'B', 'E':'W', 'F':'W', 'F#':'B', 'G':'W', + 'G#':'B', 'A':'W', 'A#':'B', 'B':'W' } +keys_numbers = {'C':'0', 'C#':'0', 'D':'1', 'D#':'1', 'E':'2', 'F':'3', 'F#':'3', 'G':'4', + 'G#':'4', 'A':'5', 'A#':'5', 'B':'6' } +keys_order = {'C':'0', 'C#':'1', 'D':'2', 'D#':'3', 'E':'4', 'F':'5', 'F#':'6', 'G':'7', + 'G#':'8', 'A':'9', 'A#':'10', 'B':'11' } + +intervals = ("2212221", "2122212", "1222122", "2221221", "2212212", "2122122", "1221222") + +# Drawing style +White = '#ffffff' +Black = '#000000' +Marker_color = '#b3b3b3' # Ellipse fill color + +helpSheets = [["Ionian (major) scale", "2212221"], + ["Dorian scale", "2122212"], + ["Phrygian scale", "1222122"], + ["Lydian scale", "2221221"], + ["Mixolydian scale", "2212212"], + ["Aeolian (natural minor) scale", "2122122"], + ["Locrian scale", "1221222"] + ] + +def keyNumberFromNote(note): + """ Given a note such as C1 or C#1 where: + - the 1 defines the octave (starts from 1) + - the # defines note is sharp + return the notes numeric value, from 0 + """ + note = note.upper().strip() + octave = 1 + if '#' in note : # sharp + if (len(note) > 2) and note[2].isdigit(): + octave = int(note[2]) + note = note[0:2] + else: + if (len(note) > 1) and note[1].isdigit(): + octave = int(note[1]) + note = note[0] + return int(keys_order[note])+(octave-1)*12 + +def whiteKeyCountInRange(firstNote, lastNote): + """ Count the White notes between + - used by createPiano + """ + count = 0 + for key in range(firstNote, lastNote+1): + if keys_color[key%12] == "W": + count += 1 + return count + +def colorFromKey(keyNumber): + """ Return B or W based on key. Use octaves + - used by create_markers + """ + return keys_color[keyNumber%12] + +class PianoScale(inkex.EffectExtension): + marker_radius_factor = 0.42 # position marker in X on piano key + marker_y_offset_factor = 0.92 # position marker in Y + + def add_arguments(self, pars): + pars.add_argument("--firstNote", default="C1") + pars.add_argument("--lastNote", default="B2") + pars.add_argument("--tab") + pars.add_argument("--intervals") + pars.add_argument("--keynote") + pars.add_argument("--scale", type=int) + pars.add_argument("--helpSheet", type=int) + + def calculate_size_and_positions(self): + " Determine page size and define key dimensions " + self.doc_width = self.svg.unittouu(self.document.getroot().get('width')) + self.doc_height = self.svg.unittouu(self.document.getroot().get('height')) + # Size of the keys + self.black_key_width = self.svg.unittouu('3.6 mm'); + self.white_key_width = self.svg.unittouu('6 mm'); + self.black_key_height = self.svg.unittouu('18 mm'); + self.white_key_height = self.svg.unittouu('30 mm'); + + def createBlackKey(self, parent, number): + """ Insert Black key into scene + - number times width is X position + """ + key_atts = {'x':str(self.white_key_width * number + self.white_key_width - self.black_key_width/2), + 'y':'0.0', + 'width':str(self.black_key_width), + 'height':str(self.black_key_height), + 'ry':str(self.svg.unittouu('0.7 mm')), + 'style':'fill:%s;stroke:%s;stroke-width:%s;stroke-opacity:1;fill-opacity:1' %(Black, Black, self.svg.unittouu('0.1 mm')) } + white_key = etree.SubElement(parent, 'rect', key_atts) + + def createWhiteKey(self, parent, number): + """ Insert White key into scene + - number times width is X position + """ + key_atts = {'x':str(self.white_key_width * number), + 'y':'0.0', + 'width':str(self.white_key_width), + 'height':str(self.white_key_height), + 'ry':str(self.svg.unittouu('0.7 mm')), + 'style':'fill:%s;stroke:%s;stroke-width:%s;stroke-opacity:1;fill-opacity:1' % (White, Black, self.svg.unittouu('0.25 mm'))} + white_key = etree.SubElement(parent, 'rect', key_atts) + + def createKeyByNumber(self, parent, keyNumber): + """ Use Keynumber to detrmine octave and position within + - draw correct key on basis of note in octave sequence. + """ + octave = math.floor(keyNumber / 12) + 1 + note = keyNumber % 12 + key = int(keys_numbers[notes[note]]) + if keys_color[note] == "W": + self.createWhiteKey(parent, key+7*(octave-1)) + else: + self.createBlackKey(parent, key+7*(octave-1)) + + def createKeyInRange(self, parent, firstKeyNum, lastKeyNum): + """ Draw keys in a range + - do it twice so Black keys are drawn over White ones + """ + for key in range(firstKeyNum, lastKeyNum+1): + if keys_color[key % 12] == 'W': + self.createKeyByNumber(parent, key) + for key in range(firstKeyNum, lastKeyNum+1): + if keys_color[key % 12] == 'B': + self.createKeyByNumber(parent, key) + + def createPiano(self, parent): + """ Draw keys defined by options + - add Piano 'box' above + """ + firstKeyNumber = keyNumberFromNote(self.options.firstNote) + lastKeyNumber = keyNumberFromNote(self.options.lastNote) + self.createKeyInRange(parent, firstKeyNumber, lastKeyNumber) + # Draw the Piano box above keys + rectBump = (self.white_key_width - self.black_key_width/2) + rectBump = self.svg.unittouu('1 mm') + rect_x1 = self.white_key_width * (whiteKeyCountInRange(0, firstKeyNumber)-1)- rectBump + rect_y1 = self.svg.unittouu('-3 mm') + rect_width = self.white_key_width * (whiteKeyCountInRange(firstKeyNumber, lastKeyNumber)) + rectBump*2 + rect_height = self.svg.unittouu('4 mm') + rect_atts = {'x':str(rect_x1), + 'y':str(rect_y1), + 'width':str(rect_width), + 'height':str(rect_height), + 'ry':str(0), + 'style':'fill:%s;stroke:none;fill-opacity:1' %(White) } + rect = etree.SubElement(parent, 'rect', rect_atts) + path_atts = {'style':'fill:%s;stroke:%s;stroke-width:%s;stroke-opacity:1' %(White, Black, self.svg.unittouu('0.25 mm')), + 'd':'m %s,%s l 0,%s %s,0 0, %s' % (rect_x1, rect_y1, rect_height, rect_width, -rect_height) } + path = etree.SubElement(parent, 'path', path_atts) + + def createMarkerAt(self, parent, x, y, radius, markerText): + " Draw a Marker at position x,y " + markerGroup = etree.SubElement(parent, 'g') + # should replace with svg:circle + ellipce_atts = { + inkex.addNS('cx','sodipodi'):str(x), + inkex.addNS('cy','sodipodi'):str(y), + inkex.addNS('rx','sodipodi'):str(radius), + inkex.addNS('ry','sodipodi'):str(radius), + inkex.addNS('type','sodipodi'):'arc', + 'd':'m %s,%s a %s,%s 0 1 1 %s,0 %s,%s 0 1 1 %s,0 z' %(x+radius, y, x, y, -radius*2, x, y, radius*2), + 'style':'fill:%s;stroke:%s;stroke-width:%s;stroke-opacity:1;fill-opacity:1' %(Marker_color, Black, self.svg.unittouu('0.125 mm'))} + ellipse = etree.SubElement(markerGroup, 'path', ellipce_atts) + # draw the text + textstyle = {'font-size': '4px', + 'font-family': 'arial', + 'text-anchor': 'middle', + 'text-align': 'center', + 'fill': Black } + text_atts = {'style':str(inkex.Style(textstyle)), + 'x': str(x), + 'y': str(y + radius*0.5) } + text = etree.SubElement(markerGroup, 'text', text_atts) + text.text = str(markerText) + + def createMarkerOnWhite(self, parent, whiteNumber, markerText): + " Position Marker on White key " + radius = self.white_key_width * self.marker_radius_factor + center_x = self.white_key_width * (whiteNumber + 0.5) + center_y = self.white_key_height * self.marker_y_offset_factor - radius + self.createMarkerAt(parent, center_x, center_y, radius, markerText) + + def createMarkerOnBlack(self, parent, whiteNumber, markerText): + " Position Marker on Black key " + radius = self.white_key_width * self.marker_radius_factor + center_x = self.white_key_width * (whiteNumber + 1) + center_y = self.black_key_height * self.marker_y_offset_factor - radius + self.createMarkerAt(parent, center_x, center_y, radius, markerText) + + def createMarkers(self, parent, keyNumberList, markerTextList): + current=0 + for key in keyNumberList: + octave = math.floor(key/12) + if colorFromKey(key) == "W": + self.createMarkerOnWhite(parent, int(keys_numbers[notes[key%12]])+(octave)*7, markerTextList[current]) + else: + self.createMarkerOnBlack(parent, int(keys_numbers[notes[key%12]])+(octave)*7, markerTextList[current]) + current += 1; + + def createMarkersFromIntervals(self, parent, intervals): + """ Check intervals. + Then gather keys which need markers + and the text for each one. + Make markers. + """ + # Check intervals are well defined and markers are legit. + intervalSumm = sum([int(i) for i in intervals]) + if intervalSumm != 12: + inkex.debug("Warning! Scale must have 12 half-tones. But %d defined."%(intervalSumm)) + + firstKeyNum = keyNumberFromNote(self.options.firstNote) + lastKeyNum = keyNumberFromNote(self.options.lastNote) + + markedKeys = () + markerText = () + if keyNumberFromNote(self.options.keynote) in range(firstKeyNum, lastKeyNum+1): + currentKey = keyNumberFromNote(self.options.keynote) + markedKeys = (currentKey,) + markerText = ('1',) + currentInterval = 0 + for key in range(keyNumberFromNote(self.options.keynote), lastKeyNum+1): + if key - currentKey == int(intervals[currentInterval]): + markedKeys += (key,) + currentInterval += 1 + markerText += (str(currentInterval+1),) + if currentInterval == len(intervals): + currentInterval = 0 + currentKey = key + # + currentKey = keyNumberFromNote(self.options.keynote) + currentInterval = len(intervals)-1 + for key in range(keyNumberFromNote(self.options.keynote), firstKeyNum-1, -1): + if currentKey - key == int(intervals[currentInterval]): + markedKeys += (key,) + markerText += (str(currentInterval+1),) + currentInterval -= 1 + if currentInterval == -1: + currentInterval = len(intervals)-1 + currentKey = key + # make the markers + self.createMarkers(parent, markedKeys, markerText) + + def createHelpSheet(self, parent, title, intervals): + """ Draw big text Label and draw 12 different scales + """ + textstyle = {'font-size': '22px', + 'font-family': 'arial', + 'text-anchor': 'middle', + 'text-align': 'center', + 'fill': Black } + text_atts = {'style':str(inkex.Style(textstyle)), + 'x': str( self.doc_width/2 ), + 'y': str( self.black_key_height) } + text = etree.SubElement(parent, 'text', text_atts) + text.text = title + # + for i in range(0, 12): + # override the ui input value for each note in the scale + self.options.keynote = notes[i] + # calculate the piano position on the page + if keys_color[i] == "W": + t = 'translate(%s,%s)' % (self.doc_width/2, + self.doc_height - self.white_key_height*1.5 + - (self.white_key_height + self.svg.unittouu('7 mm')) * int(keys_numbers[self.options.keynote]) ) + else: # Black key + t = 'translate(%s,%s)' % (self.svg.unittouu('7 mm'), + self.doc_height- self.white_key_height*1.5 + - (self.white_key_height+self.svg.unittouu('7 mm')) * int(keys_numbers[self.options.keynote]) - self.white_key_height*0.5 ) + group = etree.SubElement(parent, 'g', { 'transform':t}) + # Create a piano using that keynote in the Scale (defined in intervals) + self.createPiano(group) + self.createMarkersFromIntervals(group, intervals) + + def effect(self): + self.calculate_size_and_positions() + parent = self.document.getroot() + if str(self.options.tab) == "scale": + t = 'translate(%s,%s)' % (self.svg.namedview.center[0], self.svg.namedview.center[1]) + group = etree.SubElement(parent, 'g', { 'transform':t}) + self.createPiano(group) + self.createMarkersFromIntervals(group, intervals[self.options.scale]) + elif str(self.options.tab) == "helpSheet": + t = 'translate(%s,%s)' % (self.svg.unittouu('5 mm'), self.svg.unittouu('5 mm')) + group = etree.SubElement(parent, 'g', { 'transform':t}) + scale_index = self.options.helpSheet + self.createHelpSheet(group, helpSheets[scale_index][0], helpSheets[scale_index][1]) + else: # direct intervals + t = 'translate(%s,%s)' % (self.svg.namedview.center[0], self.svg.namedview.center[1]) + group = etree.SubElement(parent, 'g', { 'transform':t}) + self.createPiano(group) + self.createMarkersFromIntervals(group, self.options.intervals) + +if __name__ == '__main__': + PianoScale().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/pixel2svg/pixel2svg.inx b/extensions/fablabchemnitz/pixel2svg/pixel2svg.inx new file mode 100644 index 00000000..66cece0b --- /dev/null +++ b/extensions/fablabchemnitz/pixel2svg/pixel2svg.inx @@ -0,0 +1,44 @@ + + + Pixel2SVG + fablabchemnitz.de.pixel2svg + + + 5 + true + false + + + true + false + false + 256 + + + + + + + + FFFFFF + + + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/pixel2svg/pixel2svg.py b/extensions/fablabchemnitz/pixel2svg/pixel2svg.py new file mode 100644 index 00000000..7f54de85 --- /dev/null +++ b/extensions/fablabchemnitz/pixel2svg/pixel2svg.py @@ -0,0 +1,283 @@ +#!/usr/bin/env python3 +""" +Pixel2SVG - Convert the pixels of bitmap images to SVG rects + +Idea and original implementation as standalone script: +Copyright (C) 2011 Florian Berger +Homepage: + +Rewritten as Inkscape extension: +Copyright (C) 2012 ~suv + +'getFilePath()' is based on code from 'extractimages.py': +Copyright (C) 2005 Aaron Spike, aaron@ekips.org + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +""" + +import os +import sys +import base64 +from io import StringIO, BytesIO +import urllib.request as urllib +import inkex +from PIL import Image +from lxml import etree + +DEBUG = False + +# int r = ( hexcolor >> 16 ) & 0xFF; +# int g = ( hexcolor >> 8 ) & 0xFF; +# int b = hexcolor & 0xFF; +# int hexcolor = (r << 16) + (g << 8) + b; + +def hex_to_int_color(v): + if (v[0] == '#'): + v = v[1:] + assert(len(v) == 6) + return int(v[:2], 16), int(v[2:4], 16), int(v[4:6], 16) + +class Pixel2SVG(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument("-s", "--squaresize", type=int, default="5", help="Width and height of vector squares in pixels") + pars.add_argument("--transparency", type=inkex.Boolean, default=True, help="Convert transparency to 'fill-opacity'") + pars.add_argument("--overlap", type=inkex.Boolean, default=False, help="Overlap vector squares by 1px") + pars.add_argument("--offset_image", type=inkex.Boolean, default=True, help="Offset traced image") + pars.add_argument("--delete_image", type=inkex.Boolean, default=False, help="Delete bitmap image") + pars.add_argument("--maxsize", type=int, default="256", help="Max. image size (width or height)") + pars.add_argument("--verbose", type=inkex.Boolean, default=False) + pars.add_argument("--color_mode", default="all", help="Which colors to trace.") + pars.add_argument("--color", default="FFFFFF", help="Special color") + pars.add_argument("--tab") + + def checkImagePath(self, node): + """Embed the data of the selected Image Tag element""" + xlink = node.get('xlink:href') + if xlink and xlink[:5] == 'data:': + # No need, data alread embedded + return + + url = urllib.urlparse(xlink) + href = urllib.url2pathname(url.path) + + # Primary location always the filename itself. + path = self.absolute_href(href or '') + + # Backup directory where we can find the image + if not os.path.isfile(path): + path = node.get('sodipodi:absref', path) + + if not os.path.isfile(path): + inkex.errormsg('File not found "{}". Unable to embed image.').format(path) + return + + if (os.path.isfile(path)): + return path + + def drawFilledRect(self, parent, svgpx): + """ + Draw rect based on ((x, y), (width,height), ((r,g,b),a)), add to parent + """ + style = {} + pos = svgpx[0] + dim = svgpx[1] + rgb = svgpx[2][0] + alpha = svgpx[2][1] + + style['stroke'] = 'none' + + if len(rgb) == 3: + # fill: rgb tuple + style['fill'] = '#%02x%02x%02x' % (rgb[0], rgb[1], rgb[2]) + elif len(rgb) == 1: + # fill: color name, or 'none' + style['fill'] = rgb[0] + else: + # fill: 'Unset' (no fill defined) + pass + + if alpha < 255: + # only write 'fill-opacity' for non-default value + style['fill-opacity'] = '%s' % round(alpha/255.0, 8) + + rect_attribs = {'x': str(pos[0]), + 'y': str(pos[1]), + 'width': str(dim[0]), + 'height': str(dim[1]), + 'style': str(inkex.Style(style)), } + + rect = etree.SubElement(parent, inkex.addNS('rect', 'svg'), rect_attribs) + + return rect + + def vectorizeImage(self, node): + """ + Parse RGBA values of linked bitmap image, create a group and + draw the rectangles (SVG pixels) inside the new group + """ + self.path = self.checkImagePath(node) # This also ensures the file exists + if self.path is None: # check if image is embedded or linked + image_string = node.get('{http://www.w3.org/1999/xlink}href') + # find comma position + i = 0 + while i < 40: + if image_string[i] == ',': + break + i = i + 1 + image = Image.open(BytesIO(base64.b64decode(image_string[i + 1:len(image_string)]))) + else: + image = Image.open(self.path) + + if image: + # init, set limit (default: 256) + pixel2svg_max = self.options.maxsize + + if self.options.verbose: + inkex.utils.debug("ID: %s" % node.get('id')) + inkex.utils.debug("Image size:\t%dx%d" % image.size) + inkex.utils.debug("Image format:\t%s" % image.format) + inkex.utils.debug("Image mode:\t%s" % image.mode) + inkex.utils.debug("Image info:\t%s" % image.info) + + if (image.mode == 'P' and 'transparency' in image.info): + inkex.utils.debug( + "Note: paletted image with an alpha channel is handled badly with " + + "current PIL:\n" + + "") + elif not image.mode in ('RGBA', 'LA'): + inkex.utils.debug("No alpha channel or transparency found") + + image = image.convert("RGBA") + (width, height) = image.size + + if width <= pixel2svg_max and height <= pixel2svg_max: + + # color trace modes + trace_color = [] + if self.options.color: + trace_color = hex_to_int_color(self.options.color) + + # get RGBA data + rgba_values = list(image.getdata()) + + # create group + nodeParent = node.getparent() + nodeIndex = nodeParent.index(node) + pixel2svg_group = etree.Element(inkex.addNS('g', 'svg')) + pixel2svg_group.set('id', "%s_pixel2svg" % node.get('id')) + nodeParent.insert(nodeIndex+1, pixel2svg_group) + + # move group beside original image + if self.options.offset_image: + pixel2svg_offset = width + else: + pixel2svg_offset = 0.0 + pixel2svg_translate = ('translate(%s, %s)' % + (float(node.get('x') or 0.0) + pixel2svg_offset, + node.get('y') or 0.0)) + pixel2svg_group.set('transform', pixel2svg_translate) + + # draw bbox rectangle at the bottom of group + pixel2svg_bbox_fill = ('none', ) + pixel2svg_bbox_alpha = 255 + pixel2svg_bbox = ((0, 0), + (width * self.options.squaresize, + height * self.options.squaresize), + (pixel2svg_bbox_fill, pixel2svg_bbox_alpha)) + self.drawFilledRect(pixel2svg_group, pixel2svg_bbox) + + # reverse list (performance), pop last one instead of first + rgba_values.reverse() + # loop through pixels (per row) + rowcount = 0 + while rowcount < height: + colcount = 0 + while colcount < width: + rgba_tuple = rgba_values.pop() + # Omit transparent pixels + if rgba_tuple[3] > 0: + # color options + do_trace = True + if (self.options.color_mode != "all"): + if (trace_color == rgba_tuple[:3]): + # colors match + if (self.options.color_mode == "other"): + do_trace = False + else: + # colors don't match + if (self.options.color_mode == "this"): + do_trace = False + if do_trace: + # position + svgpx_x = colcount * self.options.squaresize + svgpx_y = rowcount * self.options.squaresize + # dimension + overlap + svgpx_size = self.options.squaresize + self.options.overlap + # get color, ignore alpha + svgpx_rgb = rgba_tuple[:3] + svgpx_a = 255 + # transparency + if self.options.transparency: + svgpx_a = rgba_tuple[3] + svgpx = ((svgpx_x, svgpx_y), + (svgpx_size, svgpx_size), + (svgpx_rgb, svgpx_a) + ) + # draw square in group + self.drawFilledRect(pixel2svg_group, svgpx) + colcount = colcount + 1 + rowcount = rowcount + 1 + + # all done + if DEBUG: + inkex.utils.debug("All rects drawn.") + + if self.options.delete_image: + nodeParent.remove(node) + + else: + # bail out with larger images + inkex.errormsg( + "Bailing out: this extension is not intended for large images.\n" + + "The current limit is %spx for either dimension of the bitmap image." + % pixel2svg_max) + sys.exit(0) + + # clean-up? + if DEBUG: + inkex.utils.debug("Done.") + + else: + inkex.errormsg("Bailing out: No supported image file or data found") + sys.exit(1) + + def effect(self): + """ + Pixel2SVG - Convert the pixels of bitmap images to SVG rects + """ + found_image = False + if (self.options.ids): + for node in self.svg.selected.values(): + if node.tag == inkex.addNS('image', 'svg'): + found_image = True + self.vectorizeImage(node) + + if not found_image: + inkex.errormsg("Please select one or more bitmap image(s) for Pixel2SVG") + sys.exit(0) + +if __name__ == '__main__': + Pixel2SVG().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/playing_cards/playing_cards.inx b/extensions/fablabchemnitz/playing_cards/playing_cards.inx new file mode 100755 index 00000000..4e8a729c --- /dev/null +++ b/extensions/fablabchemnitz/playing_cards/playing_cards.inx @@ -0,0 +1,131 @@ + + + Playing Cards + fablabchemnitz.de.playing_cards + + + + + + 2.5 + + + + + + + + + + 3.5 + + + + + + + + + + 1 + + + + + + + + + + + + 0 + + + + + + + + + + 5 + + + + + + + + + + 1 + + + + + + + + + + 5 + + + + + + + + + + 0 + + + + + + + + + + + + + + + + true + + + + 5 + + + + + + + + + true + true + true + true + true + false + true + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/playing_cards/playing_cards.py b/extensions/fablabchemnitz/playing_cards/playing_cards.py new file mode 100755 index 00000000..2642442e --- /dev/null +++ b/extensions/fablabchemnitz/playing_cards/playing_cards.py @@ -0,0 +1,862 @@ +from math import ceil, floor +from lxml import etree +import re +import inkex + + +# Constants +# ========= + + +# A unit is represented as a conversion factor relative to the pixel unit. The +# keys must be identical to the optiongroup options defined in the .inx file. +UNITS = { + "px": 1.0, + "pt": 96.0 / 72.0, + "in": 96.0, + "cm": 96.0 / 2.54, + "mm": 96.0 / 25.4 +} + +# EPSILON is used as a threshold by the rounding functions +EPSILON = 1e-3 + +# FOLD_LINE_TYPES defines the accepted values for horizontal and vertical +# fold lines that can be set on the command line. +NO_FOLD_LINE = "NoFoldLine" +HORIZONTAL_FOLD_LINE = "HorizontalFoldLine" +VERTICAL_FOLD_LINE = "VerticalFoldLine" +FOLD_LINE_TYPES = [NO_FOLD_LINE, HORIZONTAL_FOLD_LINE, VERTICAL_FOLD_LINE] + + +# Functions that change positions in some way +# =========================================== + + +def round_up(value, grid_size): + """ + Return the smallest grid point that is greater or equal to the value. + + :type value: float + :type grid_size: float + :rtype: float + """ + try: + return ceil(value / grid_size - EPSILON) * grid_size + except ZeroDivisionError: + return value + + +def round_down(value, grid_size): + """ + Return the greatest grid point that is less or equal to the value. + + :type value: float + :type grid_size: float + :rtype: float + """ + try: + return floor(value / grid_size + EPSILON) * grid_size + except ZeroDivisionError: + return value + + +def mirror_at(value, at): + """ + Reflect the value at a given point. + + :type value: float + :type at: float + :rtype: float + """ + return 2.0 * at - value + + +# Functions related to quantities and units +# ========================================= + + +def convert_unit(source_unit, target_unit): + """ + Returns a factor that converts from one unit to another. + + :type source_unit: str | float + :type target_unit: str | float + :rtype: float + """ + + # If the units are the same the conversion factor is obviously 1 + if source_unit == target_unit: + return 1.0 + + # If the unit is given as a float nothing needs to be done. Otherwise we + # try to find the unit and its float value in the dictionary of valid + # units. + if not isinstance(source_unit, float): + if source_unit not in UNITS.keys(): + raise ValueError("unexpected unit \"" + source_unit + "\"") + source_unit = UNITS[source_unit] + if not isinstance(target_unit, float): + if target_unit not in UNITS.keys(): + raise ValueError("unexpected unit \"" + target_unit + "\"") + target_unit = UNITS[target_unit] + + return source_unit / target_unit + + +def make_quantity(magnitude, unit): + """ + Create a quantity from a magnitude and a unit. + + :type magnitude: float + :type unit: str + """ + return "{0}{1}".format(magnitude, unit) + + +def split_quantity(quantity): + """ + Split a quantity into its magnitude and unit and return them as a tuple. + + :type quantity: str + :rtype: (float, str) | (float, NoneType) + """ + + # Matches a floating point number optionally followed by letters. The + # floating point number is the magnitude and the letters are the unit. + pattern = re.compile(r'(?P[+-]?(\d+(\.\d*)?|\.\d+)([eE][+-]?\d+)?)' + r'(?P[a-zA-Z]+)?') + match = re.match(pattern, quantity) + if match: + return (float(match.group("magnitude")), match.group("unit")) + else: + return (0, None) + + +def convert_quantity(quantity, target_unit): + """ + Convert the unit of a quantity to another unit. + + :type quantity: str + :type taget_unit: str | float + :rtype: str + """ + return "{0}{1}".format(convert_magnitude(quantity, target_unit), target_unit) + + +def convert_magnitude(quantity, target_unit): + """ + Convert the unit of a quantity to another unit and return only the new magnitude. + + :type quantity: str + :type target_unit: str | float + :rtype: float + """ + magnitude, source_unit = split_quantity(quantity) + new_magnitude = magnitude * convert_unit(source_unit, target_unit) + return new_magnitude + + +# Functions related to the placement of cards +# =========================================== + + +def calculate_positions_without_fold_line(page_size, margin_size, card_size, + bleed_size, grid_size, min_spacing, + grid_aligned): + """ + Position cards along one direction of the page without a fold line. + + The calculated positions are the positions of the right edges or bottom + edges of the cards. The other edges and the positions of the bleeds can be + easily derived by adding card_size, -bleed_size, and card_size+bleed_size. + + All sizes and spacings must be given as magnitudes, i.e. without units. + Their units are assumed to be identical but can be arbitrary. + + :param page_size: The width or height of the page. + :type page_size: float + :param margin_size: The empty margin of the page. Nothing will be placed in + the margin except for the frame. + :type margin_size: float + :param card_size: The width or height of each card. + :type card_size: float + :param bleed_size: The bleed around each card. This can be zero. + :type bleed_size: float + :param grid_size: The size of the alignment grid. The value is ignored if + grid_aligned is False. + :type grid_size: float + :param min_spacing: The minimum distance between two cards. + :type min_spacing: float + :param grid_aligned: Whether or not the beginning of a card should be on a + grid point. + :type grid_aligned: bool + :return: A list containing the beginnings of each card + :rtype: [float] + """ + # The bleed of the first card begins where the page margin ends. The card + # is then moved to the next grid point if grid_aligned is True. + card_begin = margin_size + bleed_size + if grid_aligned: + card_begin = round_up(card_begin, grid_size) + card_end = card_begin + card_size + + # There are to bleeds between the end of the first card and the beginning + # of the next. The spacing between two cards is two bleeds or min_spacing, + # whichever is greater. If grid_aligned is True the next card is moved even + # farther away so that it begins at the next grid point. + spacing = max(min_spacing, 2.0 * bleed_size) + if grid_aligned: + spacing = round_up(card_end + spacing, grid_size) - card_end + + # We add cards and spacings until we run out of enough empty space. + cards = [] + remaining = 0 + while True: + card_end = card_begin + card_size + next_remaining = page_size - margin_size - card_end - bleed_size + if next_remaining < 0: + break + remaining = next_remaining + cards.append(card_begin) + card_begin = card_end + spacing + + # Shift everything towards the center of the page. + shift = remaining / 2.0 + if grid_aligned: + shift = round_down(shift, grid_size) + cards = [card + shift for card in cards] + + return cards + + +def calculate_positions_with_fold_line(page_size, margin_size, card_size, + bleed_size, grid_size, min_spacing, + min_fold_line_spacing, grid_aligned): + """ + Position the cards along one direction of the page with a central fold line. + + The calculated positions are the positions of the right edges or bottom + edges of the cards. The other edges and the positions of the bleeds can be + easily derived by adding card_size, -bleed_size, and card_size+bleed_size. + + All sizes and spacings must be given as magnitudes, i.e. without units. + Their units are assumed to be identical but can be arbitrary. + + :param page_size: The width or height of the page. + :type page_size: float + :param margin_size: The empty margin of the page. Nothing will be placed in + the margin. + :type margin_size: float + :param card_size: The width or height of each card. + :type card_size: float + :param bleed_size: The bleed around each card. This can be zero. + :type bleed_size: float + :param grid_size: The size of the alignment grid. The value is ignored if + grid_aligned is False. + :type grid_size: float + :param min_spacing: The minimum distance between two cards. + :type min_spacing: float + :param min_fold_line_spacing: The minimum distance between a card and the + fold line. + :type min_fold_line_spacing: float + :param grid_aligned: Whether or not the beginning of a card should be on a + grid point. + :type grid_aligned: bool + :return: A tuple with a list containing the beginnings of each card and the + position of the fold line. + :rtype: ([float], float) + """ + # The spacing between the two central cards at the fold line must be at + # at least 2*bleed_size or 2*min_fold_line_spacing or min_spacing, + # whichever is the greatest. + central_spacing = max(2.0 * min_fold_line_spacing, + max(min_spacing, 2.0 * bleed_size)) + + # First we assume that the fold line is at the center of the page. This + # might change a bit later if we want grid alignment. We then place the + # first card before the fold line so that there is an empty space of + # central_spacing/2 between the card and the fold line. + card_begin = (page_size - central_spacing) / 2.0 - card_size + if grid_aligned: + card_begin = round_down(card_begin, grid_size) + card_end = card_begin + card_size + + # The card on the other side can be placed by mirroring the first card at + # the fold line. But this card is not neccessarily grid aligned. We fix that + # by increasing the central spacing so that the first card on the other side + # of the fold line is also grid aligned. + if grid_aligned: + central_spacing = round_up( + card_end + central_spacing, grid_size) - card_end + + # The fold line should not be at the center of the page but in the middle + # between the two central cards. If we don't use grid alignment then this + # is also the center of the page. + fold_line = card_end + central_spacing / 2.0 + + # The spacing between all remaining cards might be different because we + # don't use min_fold_line_spacing. But the calculation remains the same as + # for the two central cards. + spacing = max(min_spacing, 2.0 * bleed_size) + if grid_aligned: + spacing = round_up(card_end + spacing, grid_size) - card_end + + # Now that we have calculated all spacings we start adding cards to both + # sides of the fold line beginning at the center and moving outwards. + cards = [] + while True: + if card_begin < margin_size: + break + cards.append(card_begin) + cards.append(mirror_at(card_end, fold_line)) + card_begin -= card_size + spacing + card_end = card_begin + card_size + + # We sort the positions of the cards so that the positions start with the + # lowest and end with the highest value. + cards.sort() + + return (cards, fold_line) + + +class PlayingCardsExtension(inkex.EffectExtension): + """ + Implements the interface for Inkscape addons. + + An instance of this class is created in main(). __init__() sets up the + OptionParser provided by the base class to recognize all needed command + line parameters. Then in main() inkex.Effect.run() is called which then + parses the command line and calls effect(). This is where we do our work. + """ + + # Constants passed from the command line + PAGE_WIDTH = None + PAGE_HEIGHT = None + CARD_WIDTH = None + CARD_HEIGHT = None + BLEED_SIZE = None + MIN_CARD_SPACING = None + CROP_MARK_SPACING = None + MIN_FOLD_LINE_SPACING = None + PAGE_MARGIN = None + GRID_SIZE = None + ALIGN_TO_GRID = None + FOLD_LINE_TYPE = None + FRAME_SPACING = None + DRAW_GUIDES = None + DRAW_CARDS = None + DRAW_BLEEDS = None + DRAW_CROP_LINES = None + DRAW_FOLD_LINE = None + DRAW_PAGE_MARGIN = None + DRAW_FRAME = None + + USER_UNIT = None # The unit used in the document + horizontal_card_positions = None # Calculated horizontal positions + vertical_card_positions = None # Calculated vertical positions + fold_line_position = None # Calculated position of the fold line + + def add_arguments(self, pars): + """ + Initialize the OptionParser with recognized parameters. + + The option names must be identical to those defined in the .inx file. + The option values are later used to initialize the class constants. + """ + pars.add_argument("--pageName", type=str) + + pars.add_argument("--cardWidth", type=float) + pars.add_argument("--cardWidthUnit", choices=UNITS.keys()) + + pars.add_argument("--cardHeight", type=float) + pars.add_argument("--cardHeightUnit", choices=UNITS.keys()) + + pars.add_argument("--bleedSize", type=float, action="store") + pars.add_argument("--bleedSizeUnit", choices=UNITS.keys()) + + pars.add_argument("--minCardSpacing", type=float) + pars.add_argument("--minCardSpacingUnit", choices=UNITS.keys()) + + pars.add_argument("--cropMarkSpacing", type=float) + pars.add_argument("--cropMarkSpacingUnit", choices=UNITS.keys()) + + pars.add_argument("--minFoldLineSpacing", type=float) + pars.add_argument("--minFoldLineSpacingUnit", choices=UNITS.keys()) + + pars.add_argument("--pageMargin", type=float) + pars.add_argument("--pageMarginUnit", choices=UNITS.keys()) + + pars.add_argument("--frameSpacing", type=float) + pars.add_argument("--frameSpacingUnit", choices=UNITS.keys()) + + pars.add_argument("--gridSize", type=float) + pars.add_argument("--gridSizeUnit", choices=UNITS.keys()) + + pars.add_argument("--gridAligned", type=inkex.Boolean) + pars.add_argument("--foldLineType", choices=FOLD_LINE_TYPES) + pars.add_argument("--drawGuides", type=inkex.Boolean) + pars.add_argument("--drawCards", type=inkex.Boolean) + pars.add_argument("--drawBleeds", type=inkex.Boolean) + pars.add_argument("--drawCropLines", type=inkex.Boolean) + pars.add_argument("--drawFoldLine", type=inkex.Boolean) + pars.add_argument("--drawPageMargin", type=inkex.Boolean) + pars.add_argument("--drawFrame", type=inkex.Boolean) + + def init_user_unit(self): + """ + Determine the user unit from the document contents. + """ + root = self.document.getroot() + view_box = root.get("viewBox") + + # If the document has a valid viewBox we try to derive the user unit + # from that. + valid_view_box = view_box and len(view_box.split()) == 4 + if valid_view_box: + view_box = root.get("viewBox").split() + view_box_width, view_box_width_unit = split_quantity(view_box[2]) + # If the viewBox has a unit use that. + if view_box_width_unit: + self.USER_UNIT = view_box_width_unit + # If the viewBox has no unit derive the unit from the ratio between + # the document width and the viewBox width. + else: + document_width, document_width_unit = split_quantity( + self.document_width()) + self.USER_UNIT = document_width / view_box_width + if document_width_unit: + self.USER_UNIT *= UNITS[document_width_unit] + # If the document has no valid viewBox we try to derive the user unit + # from the document width. + else: + document_width, document_width_unit = split_quantity( + self.document_width()) + if document_width_unit: + self.USER_UNIT = UNITS[document_width_unit] + else: + # This might be problematic because v0.91 uses 90dpi and v0.92 + # uses 96dpi + self.USER_UNIT = UNITS["px"] + + def init_constants(self): + """ + Initialize the class constants from the OptionParser values and the + document contents. + + This converts all quantities from the unit given on the command line to + the user unit. + """ + + self.PAGE_WIDTH = self.to_user_unit(self.document_width()) + self.PAGE_HEIGHT = self.to_user_unit(self.document_height()) + self.CARD_WIDTH = self.to_user_unit( + make_quantity(self.options.cardWidth, + self.options.cardWidthUnit)) + self.CARD_HEIGHT = self.to_user_unit( + make_quantity(self.options.cardHeight, + self.options.cardHeightUnit)) + self.BLEED_SIZE = self.to_user_unit( + make_quantity(self.options.bleedSize, + self.options.bleedSizeUnit)) + self.GRID_SIZE = self.to_user_unit( + make_quantity(self.options.gridSize, + self.options.gridSizeUnit)) + self.MIN_CARD_SPACING = self.to_user_unit( + make_quantity(self.options.minCardSpacing, + self.options.minCardSpacingUnit)) + self.CROP_MARK_SPACING = self.to_user_unit( + make_quantity(self.options.cropMarkSpacing, + self.options.cropMarkSpacingUnit)) + self.MIN_FOLD_LINE_SPACING = self.to_user_unit( + make_quantity(self.options.minFoldLineSpacing, + self.options.minFoldLineSpacingUnit)) + self.PAGE_MARGIN = self.to_user_unit( + make_quantity(self.options.pageMargin, + self.options.pageMarginUnit)) + self.FRAME_SPACING = self.to_user_unit( + make_quantity(self.options.frameSpacing, + self.options.frameSpacingUnit)) + self.ALIGN_TO_GRID = self.options.gridAligned + self.FOLD_LINE_TYPE = self.options.foldLineType + self.DRAW_GUIDES = self.options.drawGuides + self.DRAW_CARDS = self.options.drawCards + self.DRAW_BLEEDS = self.options.drawBleeds + self.DRAW_CROP_LINES = self.options.drawCropLines + self.DRAW_FOLD_LINE = self.options.drawFoldLine + self.DRAW_PAGE_MARGIN = self.options.drawPageMargin + self.DRAW_FRAME = self.options.drawFrame + + def effect(self): + self.init_user_unit() + self.init_constants() + + self.calculate_positions() + + # Create one layer for the things that we want to print and another + # layer for things that we don't want to print but are useful while + # working on the cards. + non_printing_layer = self.create_layer("(template) non printing") + printing_layer = self.create_layer("(template) printing") + + if self.DRAW_GUIDES: + self.create_guides() + + if self.DRAW_CARDS: + self.create_cards(non_printing_layer) + + if self.DRAW_BLEEDS: + self.create_bleeds(non_printing_layer) + + if self.DRAW_CROP_LINES: + self.create_crop_lines(printing_layer) + + if self.DRAW_FOLD_LINE: + self.create_fold_line(printing_layer) + + if self.DRAW_PAGE_MARGIN: + self.create_margin(non_printing_layer) + + if self.DRAW_FRAME: + self.create_frame(printing_layer) + + def to_user_unit(self, quantity): + """ + Convert a quantity to the user unit and return its magnitude. + + :type quantity: str + :rtype: float + """ + return convert_magnitude(quantity, self.USER_UNIT) + + def document_width(self): + """ + Return the document width. + + The width is read from the document. It may or may not contain a unit. + """ + return self.document.getroot().get("width") + + def document_height(self): + """ + Return the document height. + + The height is read from the document. It may or may not contain a unit. + """ + return self.document.getroot().get("height") + + def calculate_positions(self): + """ + Calculate the horizontal and vertical positions of all cards. + + The results are stored in self.horizontal_card_positions, + self.vertical_card_positions, and self.fold_line_position. + """ + if self.FOLD_LINE_TYPE == VERTICAL_FOLD_LINE: + self.horizontal_card_positions, self.fold_line_position = \ + calculate_positions_with_fold_line( + self.PAGE_WIDTH, + self.PAGE_MARGIN, + self.CARD_WIDTH, + self.BLEED_SIZE, + self.GRID_SIZE, + self.MIN_CARD_SPACING, + self.MIN_FOLD_LINE_SPACING, + self.ALIGN_TO_GRID) + else: + self.horizontal_card_positions = \ + calculate_positions_without_fold_line( + self.PAGE_WIDTH, + self.PAGE_MARGIN, + self.CARD_WIDTH, + self.BLEED_SIZE, + self.GRID_SIZE, + self.MIN_CARD_SPACING, + self.ALIGN_TO_GRID) + + if self.FOLD_LINE_TYPE == HORIZONTAL_FOLD_LINE: + self.vertical_card_positions, self.fold_line_position = \ + calculate_positions_with_fold_line( + self.PAGE_HEIGHT, + self.PAGE_MARGIN, + self.CARD_HEIGHT, + self.BLEED_SIZE, + self.GRID_SIZE, + self.MIN_CARD_SPACING, + self.MIN_FOLD_LINE_SPACING, + self.ALIGN_TO_GRID) + else: + self.vertical_card_positions = \ + calculate_positions_without_fold_line( + self.PAGE_HEIGHT, + self.PAGE_MARGIN, + self.CARD_HEIGHT, + self.BLEED_SIZE, + self.GRID_SIZE, + self.MIN_CARD_SPACING, + self.ALIGN_TO_GRID) + + # Functions related to the structure of the document + # ================================================== + + def create_group(self, parent, label): + """ + Create a new group in the svg document. + + :type parent: lxml.etree._Element + :type label: str + :rtype: lxml.etree._Element + """ + group = etree.SubElement(parent, "g") + group.set(inkex.addNS("label", "inkscape"), label) + return group + + def create_layer(self, label, is_visible=True, is_locked=True): + """ + Create a new layer in the svg document. + + :type label: str + :rtype: lxml.etree._Element + """ + layer = self.create_group(self.document.getroot(), label) + layer.set(inkex.addNS("groupmode", "inkscape"), "layer") + # The Inkscape y-axis runs from bottom to top, the SVG y-axis runs from + # top to bottom. Therefore we need to transform all y coordinates. + layer.set( + "transform", "matrix(1 0 0 -1 0 {0})".format(self.PAGE_HEIGHT)) + + # Don't show the layer contents + if not is_visible: + layer.set("style", "display:none") + + # Lock the layer + if is_locked: + layer.set(inkex.addNS("insensitive", "sodipodi"), "true") + + return layer + + # Functions related to the contents of the document + # ================================================= + + def create_guide(self, x, y, orientation): + """ + Create an arbitrary guide. + + :type x: float + :type y: float + :type orientation: str + """ + view = self.document.getroot().find(inkex.addNS("namedview", "sodipodi")) + guide = etree.SubElement(view, inkex.addNS("guide", "sodipodi")) + guide.set("orientation", orientation) + guide.set("position", "{0},{1}".format(x, y)) + + def create_horizontal_guide(self, y): + """ + Create a horizontal guide. + """ + self.create_guide(0, y, "0,1") + + def create_vertical_guide(self, x): + """ + Create a vertical guide. + """ + self.create_guide(x, 0, "1,0") + + def create_guides(self): + """ + Create guides at all sides of all cards and bleeds. + """ + for x in self.horizontal_card_positions: + self.create_vertical_guide(x) + self.create_vertical_guide(x + self.CARD_WIDTH) + if self.BLEED_SIZE > 0: + self.create_vertical_guide(x - self.BLEED_SIZE) + self.create_vertical_guide(x + self.CARD_WIDTH + self.BLEED_SIZE) + + for y in self.vertical_card_positions: + self.create_horizontal_guide(y) + self.create_horizontal_guide(y + self.CARD_HEIGHT) + if self.BLEED_SIZE > 0: + self.create_horizontal_guide(y - self.BLEED_SIZE) + self.create_horizontal_guide(y + self.CARD_HEIGHT + self.BLEED_SIZE) + + def create_bleeds(self, parent): + """ + Creates a rectangle for each bleed. + + :type parent: lxml.etree._Element + """ + if self.BLEED_SIZE <= 0: + return + + attributes = {"x": str(-self.BLEED_SIZE), + "y": str(-self.BLEED_SIZE), + "width": str(self.CARD_WIDTH + 2.0 * self.BLEED_SIZE), + "height": str(self.CARD_HEIGHT + 2.0 * self.BLEED_SIZE), + "stroke": "black", + "stroke-width": str(self.to_user_unit("0.25pt")), + "fill": "none"} + + for y in self.vertical_card_positions: + for x in self.horizontal_card_positions: + attributes["transform"] = "translate({0},{1})".format(x, y) + etree.SubElement(parent, "rect", attributes) + + def create_cards(self, parent): + """ + Create a rectangle for each card. + + :type parent: lxml.etree._Element + """ + attributes = {"x": str(0), + "y": str(0), + "width": str(self.CARD_WIDTH), + "height": str(self.CARD_HEIGHT), + "stroke": "black", + "stroke-width": str(self.to_user_unit("0.25pt")), + "fill": "none"} + + for y in self.vertical_card_positions: + for x in self.horizontal_card_positions: + attributes["transform"] = "translate({0},{1})".format(x, y) + etree.SubElement(parent, "rect", attributes) + + def create_fold_line(self, parent): + """ + Create a horizontal or vertical fold line. + + :type parent: lxml.etree._Element + """ + attributes = {"stroke": "black", + "stroke-width": str(self.to_user_unit("0.25pt")), + "fill": "none"} + + if self.FOLD_LINE_TYPE == HORIZONTAL_FOLD_LINE: + attributes["d"] = "M 0,{0} H {1}".format( + self.fold_line_position, self.PAGE_WIDTH) + elif self.FOLD_LINE_TYPE == VERTICAL_FOLD_LINE: + attributes["d"] = "M {0},0 V {1}".format( + self.fold_line_position, self.PAGE_HEIGHT) + else: + return + + etree.SubElement(parent, "path", attributes) + + def create_crop_lines(self, parent): + """ + Create horizontal and vertical crop lines. + + :type parent: lxml.etree._Element + """ + attributes = {"stroke": "black", + "stroke-width": str(self.to_user_unit("0.25pt")), + "fill": "none"} + + # (begin, end) pairs for vertical crop line between bleeds + pairs = [] + begin = 0 + for y in self.vertical_card_positions: + end = y - self.BLEED_SIZE - self.CROP_MARK_SPACING + # Only add lines if they fit between two bleeds + if end - begin >= EPSILON: + pairs.append((begin, end)) + begin = end + self.CARD_HEIGHT \ + + 2.0 * self.BLEED_SIZE \ + + 2.0 * self.CROP_MARK_SPACING + pairs.append((begin, self.PAGE_HEIGHT)) + + # One crop line consists of many short strokes + attributes["d"] = " ".join(["M 0,{0} 0,{1}".format(begin, end) + for (begin, end) in pairs]) + + # Shifted copies of the crop line + for x in self.horizontal_card_positions: + attributes["transform"] = "translate({0},0)".format(x) + etree.SubElement(parent, "path", attributes) + attributes["transform"] = "translate({0},0)".format( + x + self.CARD_WIDTH) + etree.SubElement(parent, "path", attributes) + + # (begin, end) pairs for horizontal crop line between bleeds + pairs = [] + begin = 0 + for x in self.horizontal_card_positions: + end = x - self.BLEED_SIZE - self.CROP_MARK_SPACING + # Only add lines if they fit between two bleeds + if end - begin >= EPSILON: + pairs.append((begin, end)) + begin = end + self.CARD_WIDTH \ + + 2.0 * self.BLEED_SIZE \ + + 2.0 * self.CROP_MARK_SPACING + pairs.append((begin, self.PAGE_WIDTH)) + + # One crop line consists of many short strokes + attributes["d"] = " ".join(["M {0},0 {1},0".format(begin, end) + for (begin, end) in pairs]) + + # Shifted copies of the crop line + for y in self.vertical_card_positions: + attributes["transform"] = "translate(0,{0})".format(y) + etree.SubElement(parent, "path", attributes) + attributes["transform"] = "translate(0,{0})".format( + y + self.CARD_HEIGHT) + etree.SubElement(parent, "path", attributes) + + def create_margin(self, parent): + """ + Create a rectangle for the page margin. + + :type parent: lxml.etree._Element + """ + if self.PAGE_MARGIN <= 0: + return + + attributes = {"x": str(self.PAGE_MARGIN), + "y": str(self.PAGE_MARGIN), + "width": str(self.PAGE_WIDTH - 2.0 * self.PAGE_MARGIN), + "height": str(self.PAGE_HEIGHT - 2.0 * self.PAGE_MARGIN), + "stroke": "black", + "stroke-width": str(self.to_user_unit("0.25pt")), + "stroke-dasharray": "0.5,0.5", + "fill": "none"} + + etree.SubElement(parent, "rect", attributes) + + def create_frame(self, parent): + """ + Create a frame around the cards. + """ + + # If we don't have any cards we can't draw a frame around them + if len(self.horizontal_card_positions) == 0 or \ + len(self.vertical_card_positions) == 0: + return + + XMIN = min(self.horizontal_card_positions) + XMAX = max(self.horizontal_card_positions) + YMIN = min(self.vertical_card_positions) + YMAX = max(self.vertical_card_positions) + + LEFT = XMIN - self.FRAME_SPACING + BOTTOM = YMIN - self.FRAME_SPACING + WIDTH = XMAX - XMIN + self.CARD_WIDTH + 2 * self.FRAME_SPACING + HEIGHT = YMAX - YMIN + self.CARD_HEIGHT + 2 * self.FRAME_SPACING + + attributes = {"x": str(LEFT), + "y": str(BOTTOM), + "width": str(WIDTH), + "height": str(HEIGHT), + "stroke": "black", + "stroke-width": str(self.to_user_unit("0.25pt")), + "fill": "none"} + + etree.SubElement(parent, "rect", attributes) + + +def main(): + PlayingCardsExtension().run() + + +if __name__ == '__main__': + main() diff --git a/extensions/fablabchemnitz/polygen/.gitattributes b/extensions/fablabchemnitz/polygen/.gitattributes new file mode 100644 index 00000000..dfe07704 --- /dev/null +++ b/extensions/fablabchemnitz/polygen/.gitattributes @@ -0,0 +1,2 @@ +# Auto detect text files and perform LF normalization +* text=auto diff --git a/extensions/fablabchemnitz/polygen/polygen.inx b/extensions/fablabchemnitz/polygen/polygen.inx new file mode 100644 index 00000000..a6814ba1 --- /dev/null +++ b/extensions/fablabchemnitz/polygen/polygen.inx @@ -0,0 +1,44 @@ + + + Polygen + fablabchemnitz.de.polygen + + + + 6 + 45.0 + 0.4 + 0.1 + + + + + + + + + + + + + false + false + 4278190335 + 65535 + + + + + + + all + + + + + + + + diff --git a/extensions/fablabchemnitz/polygen/polygen.py b/extensions/fablabchemnitz/polygen/polygen.py new file mode 100644 index 00000000..6cef3bea --- /dev/null +++ b/extensions/fablabchemnitz/polygen/polygen.py @@ -0,0 +1,692 @@ +#!/usr/bin/env python3 +# # +# Copyright (C) [2021] [Joseph Zakar], [observing@gmail.com] +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +""" +Given the number of polygon sides, an outline to be generated perpendicular to +each side, and a straight line whose distance is the radius of the revolved +outline, this program generates (1) a paper model of one of the n sides with tabs +to assemble into a full 3D model; (2) the top and bottom lids for the generated +model; and (3) wrappers to cover each side of the generated model. +""" + +import inkex +from inkex import Color +from lxml import etree +import math +import copy +import inspect + +class pathStruct(object): + def __init__(self): + self.id="path0000" + self.path=[] + self.enclosed=False + self.style = None + def __str__(self): + return self.path + +class pnPoint(object): + # This class came from https://github.com/JoJocoder/PNPOLY + def __init__(self,p): + self.p=p + def __str__(self): + return self.p + def InPolygon(self,polygon,BoundCheck=False): + inside=False + if BoundCheck: + minX=polygon[0][0] + maxX=polygon[0][0] + minY=polygon[0][1] + maxY=polygon[0][1] + for p in polygon: + minX=min(p[0],minX) + maxX=max(p[0],maxX) + minY=min(p[1],minY) + maxY=max(p[1],maxY) + if self.p[0]maxX or self.p[1]maxY: + return False + j=len(polygon)-1 + for i in range(len(polygon)): + if ((polygon[i][1]>self.p[1])!=(polygon[j][1]>self.p[1]) and (self.p[0]<(polygon[j][0]-polygon[i][0])*(self.p[1]-polygon[i][1])/( polygon[j][1] - polygon[i][1] ) + polygon[i][0])): + inside =not inside + j=i + return inside + +class Polygen(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument("--usermenu") + pars.add_argument("--polysides", type=int, default=6, help="Number of Polygon Sides") + pars.add_argument("--tabangle", type=float, default=45.0, help="Angle of tab edges in degrees") + pars.add_argument("--tabheight", type=float, default=0.4,help="Height of tab in dimensional units") + pars.add_argument("--dashlength", type=float, default=0.1,help="Length of dashline in dimentional units (zero for solid line)") + pars.add_argument("--unit", default="in", help="Dimensional units of selected paths") + pars.add_argument("--generate_decorative_wrapper", type=inkex.Boolean, default=False, help="Generate decorative wrapper") + pars.add_argument("--cosmetic_dash_style", type=inkex.Boolean, default=False, help="Cosmetic dash lines") + pars.add_argument("--color_solid", type=Color, default='4278190335', help="Solid line color") + pars.add_argument("--color_dash", type=Color, default='65535', help="Solid line dash") + + + #draw SVG line segment(s) between the given (raw) points + def drawline(self, dstr, name, parent, sstr=None): + line_style = {'stroke':'{}','stroke-width':'1','fill':'none'.format(self.options.color_solid)} + if sstr == None: + stylestr = str(inkex.Style(line_style)) + else: + stylestr = sstr + el = parent.add(inkex.PathElement()) + el.path = dstr + el.style = sstr + el.label = name + + def makepoly(self, toplength, numpoly): + r = toplength/(2*math.sin(math.pi/numpoly)) + pstr = '' + for ppoint in range(0,numpoly): + xn = r*math.cos(2*math.pi*ppoint/numpoly) + yn = r*math.sin(2*math.pi*ppoint/numpoly) + if ppoint == 0: + pstr = 'M ' + else: + pstr += ' L ' + pstr += str(xn) + ',' + str(yn) + pstr = pstr + ' Z' + return pstr + + def insidePath(self, path, p): + point = pnPoint((p.x, p.y)) + pverts = [] + for pnum in path: + pverts.append((pnum.x, pnum.y)) + isInside = point.InPolygon(pverts, True) + return isInside # True if point p is inside path + + def makescore(self, pt1, pt2, dashlength): + # Draws a dashed line of dashlength between two points + # Dash = dashlength (in inches) space followed by dashlength mark + # if dashlength is zero, we want a solid line + apt1 = inkex.paths.Line(0.0,0.0) + apt2 = inkex.paths.Line(0.0,0.0) + ddash = '' + if math.isclose(dashlength, 0.0): + #inkex.utils.debug("Draw solid dashline") + ddash = ' M '+str(pt1.x)+','+str(pt1.y)+' L '+str(pt2.x)+','+str(pt2.y) + else: + if math.isclose(pt1.y, pt2.y): + #inkex.utils.debug("Draw horizontal dashline") + if pt1.x < pt2.x: + xcushion = pt2.x - dashlength + xpt = pt1.x + ypt = pt1.y + else: + xcushion = pt1.x - dashlength + xpt = pt2.x + ypt = pt2.y + ddash = '' + done = False + while not(done): + if (xpt + dashlength*2) <= xcushion: + xpt = xpt + dashlength + ddash = ddash + ' M ' + str(xpt) + ',' + str(ypt) + xpt = xpt + dashlength + ddash = ddash + ' L ' + str(xpt) + ',' + str(ypt) + else: + done = True + elif math.isclose(pt1.x, pt2.x): + #inkex.utils.debug("Draw vertical dashline") + if pt1.y < pt2.y: + ycushion = pt2.y - dashlength + xpt = pt1.x + ypt = pt1.y + else: + ycushion = pt1.y - dashlength + xpt = pt2.x + ypt = pt2.y + ddash = '' + done = False + while not(done): + if(ypt + dashlength*2) <= ycushion: + ypt = ypt + dashlength + ddash = ddash + ' M ' + str(xpt) + ',' + str(ypt) + ypt = ypt + dashlength + ddash = ddash + ' L ' + str(xpt) + ',' + str(ypt) + else: + done = True + else: + #inkex.utils.debug("Draw sloping dashline") + if pt1.y > pt2.y: + apt1.x = pt1.x + apt1.y = pt1.y + apt2.x = pt2.x + apt2.y = pt2.y + else: + apt1.x = pt2.x + apt1.y = pt2.y + apt2.x = pt1.x + apt2.y = pt1.y + m = (apt1.y-apt2.y)/(apt1.x-apt2.x) + theta = math.atan(m) + msign = (m>0) - (m<0) + ycushion = apt2.y + dashlength*math.sin(theta) + xcushion = apt2.x + msign*dashlength*math.cos(theta) + ddash = '' + xpt = apt1.x + ypt = apt1.y + done = False + while not(done): + nypt = ypt - dashlength*2*math.sin(theta) + nxpt = xpt - msign*dashlength*2*math.cos(theta) + if (nypt >= ycushion) and (((m<0) and (nxpt <= xcushion)) or ((m>0) and (nxpt >= xcushion))): + # move to end of space / beginning of mark + xpt = xpt - msign*dashlength*math.cos(theta) + ypt = ypt - msign*dashlength*math.sin(theta) + ddash = ddash + ' M ' + str(xpt) + ',' + str(ypt) + # draw the mark + xpt = xpt - msign*dashlength*math.cos(theta) + ypt = ypt - msign*dashlength*math.sin(theta) + ddash = ddash + ' L ' + str(xpt) + ',' + str(ypt) + else: + done = True + return ddash + + def detectIntersect(self, x1, y1, x2, y2, x3, y3, x4, y4): + td = (x1-x2)*(y3-y4)-(y1-y2)*(x3-x4) + if td == 0: + # These line segments are parallel + return False + t = ((x1-x3)*(y3-y4)-(y1-y3)*(x3-x4))/td + if (0.0 <= t) and (t <= 1.0): + return True + else: + return False + + def makeTab(self, tpath, pt1, pt2, tabht, taba): + # tpath - the pathstructure containing pt1 and pt2 + # pt1, pt2 - the two points where the tab will be inserted + # tabht - the height of the tab + # taba - the angle of the tab sides + # returns the two tab points in order of closest to pt1 + tpt1 = inkex.paths.Line(0.0,0.0) + tpt2 = inkex.paths.Line(0.0,0.0) + currTabHt = tabht + currTabAngle = taba + testAngle = 1.0 + testHt = currTabHt * 0.001 + adjustTab = 0 + tabDone = False + while not tabDone: + # Let's find out the orientation of the tab + if math.isclose(pt1.x, pt2.x): + # It's vertical. Let's try the right side + if pt1.y < pt2.y: + tpt1.x = pt1.x + testHt + tpt2.x = pt2.x + testHt + tpt1.y = pt1.y + testHt/math.tan(math.radians(testAngle)) + tpt2.y = pt2.y - testHt/math.tan(math.radians(testAngle)) + pnpt1 = inkex.paths.Move(tpt1.x, tpt1.y) + pnpt2 = inkex.paths.Move(tpt2.x, tpt2.y) + if ((not tpath.enclosed) and (self.insidePath(tpath.path, pnpt1) or self.insidePath(tpath.path, pnpt2))) or \ + (tpath.enclosed and ((not self.insidePath(tpath.path, pnpt1)) and (not self.insidePath(tpath.path, pnpt2)))): + tpt1.x = pt1.x - currTabHt + tpt2.x = pt2.x - currTabHt + else: + tpt1.x = pt1.x + currTabHt + tpt2.x = pt2.x + currTabHt + tpt1.y = pt1.y + currTabHt/math.tan(math.radians(currTabAngle)) + tpt2.y = pt2.y - currTabHt/math.tan(math.radians(currTabAngle)) + else: # pt2.y < pt1.y + tpt1.x = pt1.x + testHt + tpt2.x = pt2.x + testHt + tpt1.y = pt1.y - testHt/math.tan(math.radians(testAngle)) + tpt2.y = pt2.y + testHt/math.tan(math.radians(testAngle)) + pnpt1 = inkex.paths.Move(tpt1.x, tpt1.y) + pnpt2 = inkex.paths.Move(tpt2.x, tpt2.y) + if ((not tpath.enclosed) and (self.insidePath(tpath.path, pnpt1) or self.insidePath(tpath.path, pnpt2))) or \ + (tpath.enclosed and ((not self.insidePath(tpath.path, pnpt1)) and (not self.insidePath(tpath.path, pnpt2)))): + tpt1.x = pt1.x - currTabHt + tpt2.x = pt2.x - currTabHt + else: + tpt1.x = pt1.x + currTabHt + tpt2.x = pt2.x + currTabHt + tpt1.y = pt1.y - currTabHt/math.tan(math.radians(currTabAngle)) + tpt2.y = pt2.y + currTabHt/math.tan(math.radians(currTabAngle)) + elif math.isclose(pt1.y, pt2.y): + # It's horizontal. Let's try the top + if pt1.x < pt2.x: + tpt1.y = pt1.y - testHt + tpt2.y = pt2.y - testHt + tpt1.x = pt1.x + testHt/math.tan(math.radians(testAngle)) + tpt2.x = pt2.x - testHt/math.tan(math.radians(testAngle)) + pnpt1 = inkex.paths.Move(tpt1.x, tpt1.y) + pnpt2 = inkex.paths.Move(tpt2.x, tpt2.y) + if ((not tpath.enclosed) and (self.insidePath(tpath.path, pnpt1) or self.insidePath(tpath.path, pnpt2))) or \ + (tpath.enclosed and ((not self.insidePath(tpath.path, pnpt1)) and (not self.insidePath(tpath.path, pnpt2)))): + tpt1.y = pt1.y + currTabHt + tpt2.y = pt2.y + currTabHt + else: + tpt1.y = pt1.y - currTabHt + tpt2.y = pt2.y - currTabHt + tpt1.x = pt1.x + currTabHt/math.tan(math.radians(currTabAngle)) + tpt2.x = pt2.x - currTabHt/math.tan(math.radians(currTabAngle)) + else: # pt2.x < pt1.x + tpt1.y = pt1.y - testHt + tpt2.y = pt2.y - testHt + tpt1.x = pt1.x - testHt/math.tan(math.radians(testAngle)) + tpt2.x = pt2.x + testHt/math.tan(math.radians(testAngle)) + pnpt1 = inkex.paths.Move(tpt1.x, tpt1.y) + pnpt2 = inkex.paths.Move(tpt2.x, tpt2.y) + if ((not tpath.enclosed) and (self.insidePath(tpath.path, pnpt1) or self.insidePath(tpath.path, pnpt2))) or \ + (tpath.enclosed and ((not self.insidePath(tpath.path, pnpt1)) and (not self.insidePath(tpath.path, pnpt2)))): + tpt1.y = pt1.y + currTabHt + tpt2.y = pt2.y + currTabHt + else: + tpt1.y = pt1.y - currTabHt + tpt2.y = pt2.y - currTabHt + tpt1.x = pt1.x - currTabHt/math.tan(math.radians(currTabAngle)) + tpt2.x = pt2.x + currTabHt/math.tan(math.radians(currTabAngle)) + + else: # the orientation is neither horizontal nor vertical + # Let's get the slope of the line between the points + # Because Inkscape's origin is in the upper-left corner, + # a positive slope (/) will yield a negative value + slope = (pt2.y - pt1.y)/(pt2.x - pt1.x) + # Let's get the angle to the horizontal + theta = math.degrees(math.atan(slope)) + # Let's construct a horizontal tab + seglength = math.sqrt((pt1.x-pt2.x)**2 +(pt1.y-pt2.y)**2) + if slope < 0.0: + if pt1.x < pt2.x: + tpt1.y = pt1.y - testHt + tpt2.y = pt2.y - testHt + tpt1.x = pt1.x + testHt/math.tan(math.radians(testAngle)) + tpt2.x = pt2.x - testHt/math.tan(math.radians(testAngle)) + tl1 = [('M', [pt1.x,pt1.y])] + tl1 += [('L', [tpt1.x, tpt1.y])] + ele1 = inkex.Path(tl1) + tl2 = [('M', [pt1.x,pt1.y])] + tl2 += [('L', [tpt2.x, tpt2.y])] + ele2 = inkex.Path(tl2) + thetal1 = ele1.rotate(theta, [pt1.x,pt1.y]) + thetal2 = ele2.rotate(theta, [pt2.x,pt2.y]) + tpt1.x = thetal1[1].x + tpt1.y = thetal1[1].y + tpt2.x = thetal2[1].x + tpt2.y = thetal2[1].y + pnpt1 = inkex.paths.Move(tpt1.x, tpt1.y) + pnpt2 = inkex.paths.Move(tpt2.x, tpt2.y) + if ((not tpath.enclosed) and (self.insidePath(tpath.path, pnpt1) or self.insidePath(tpath.path, pnpt2))) or \ + (tpath.enclosed and ((not self.insidePath(tpath.path, pnpt1)) and (not self.insidePath(tpath.path, pnpt2)))): + tpt1.y = pt1.y + currTabHt + tpt2.y = pt2.y + currTabHt + else: + tpt1.y = pt1.y - currTabHt + tpt2.y = pt2.y - currTabHt + tpt1.x = pt1.x + currTabHt/math.tan(math.radians(currTabAngle)) + tpt2.x = pt2.x - currTabHt/math.tan(math.radians(currTabAngle)) + tl1 = [('M', [pt1.x,pt1.y])] + tl1 += [('L', [tpt1.x, tpt1.y])] + ele1 = inkex.Path(tl1) + tl2 = [('M', [pt1.x,pt1.y])] + tl2 += [('L', [tpt2.x, tpt2.y])] + ele2 = inkex.Path(tl2) + thetal1 = ele1.rotate(theta, [pt1.x,pt1.y]) + thetal2 = ele2.rotate(theta, [pt2.x,pt2.y]) + tpt1.x = thetal1[1].x + tpt1.y = thetal1[1].y + tpt2.x = thetal2[1].x + tpt2.y = thetal2[1].y + else: # pt1.x > pt2.x + tpt1.y = pt1.y - testHt + tpt2.y = pt2.y - testHt + tpt1.x = pt1.x - testHt/math.tan(math.radians(testAngle)) + tpt2.x = pt2.x + testHt/math.tan(math.radians(testAngle)) + tl1 = [('M', [pt1.x,pt1.y])] + tl1 += [('L', [tpt1.x, tpt1.y])] + ele1 = inkex.Path(tl1) + tl2 = [('M', [pt1.x,pt1.y])] + tl2 += [('L', [tpt2.x, tpt2.y])] + ele2 = inkex.Path(tl2) + thetal1 = ele1.rotate(theta, [pt1.x,pt1.y]) + thetal2 = ele2.rotate(theta, [pt2.x,pt2.y]) + tpt1.x = thetal1[1].x + tpt1.y = thetal1[1].y + tpt2.x = thetal2[1].x + tpt2.y = thetal2[1].y + pnpt1 = inkex.paths.Move(tpt1.x, tpt1.y) + pnpt2 = inkex.paths.Move(tpt2.x, tpt2.y) + if ((not tpath.enclosed) and (self.insidePath(tpath.path, pnpt1) or self.insidePath(tpath.path, pnpt2))) or \ + (tpath.enclosed and ((not self.insidePath(tpath.path, pnpt1)) and (not self.insidePath(tpath.path, pnpt2)))): + tpt1.y = pt1.y + currTabHt + tpt2.y = pt2.y + currTabHt + else: + tpt1.y = pt1.y - currTabHt + tpt2.y = pt2.y - currTabHt + tpt1.x = pt1.x - currTabHt/math.tan(math.radians(currTabAngle)) + tpt2.x = pt2.x + currTabHt/math.tan(math.radians(currTabAngle)) + tl1 = [('M', [pt1.x,pt1.y])] + tl1 += [('L', [tpt1.x, tpt1.y])] + ele1 = inkex.Path(tl1) + tl2 = [('M', [pt1.x,pt1.y])] + tl2 += [('L', [tpt2.x, tpt2.y])] + ele2 = inkex.Path(tl2) + thetal1 = ele1.rotate(theta, [pt1.x,pt1.y]) + thetal2 = ele2.rotate(theta, [pt2.x,pt2.y]) + tpt1.x = thetal1[1].x + tpt1.y = thetal1[1].y + tpt2.x = thetal2[1].x + tpt2.y = thetal2[1].y + else: # slope > 0.0 + if pt1.x < pt2.x: + tpt1.y = pt1.y - testHt + tpt2.y = pt2.y - testHt + tpt1.x = pt1.x + testHt/math.tan(math.radians(testAngle)) + tpt2.x = pt2.x - testHt/math.tan(math.radians(testAngle)) + tl1 = [('M', [pt1.x,pt1.y])] + tl1 += [('L', [tpt1.x, tpt1.y])] + ele1 = inkex.Path(tl1) + tl2 = [('M', [pt1.x,pt1.y])] + tl2 += [('L', [tpt2.x, tpt2.y])] + ele2 = inkex.Path(tl2) + thetal1 = ele1.rotate(theta, [pt1.x,pt1.y]) + thetal2 = ele2.rotate(theta, [pt2.x,pt2.y]) + tpt1.x = thetal1[1].x + tpt1.y = thetal1[1].y + tpt2.x = thetal2[1].x + tpt2.y = thetal2[1].y + pnpt1 = inkex.paths.Move(tpt1.x, tpt1.y) + pnpt2 = inkex.paths.Move(tpt2.x, tpt2.y) + if ((not tpath.enclosed) and (self.insidePath(tpath.path, pnpt1) or self.insidePath(tpath.path, pnpt2))) or \ + (tpath.enclosed and ((not self.insidePath(tpath.path, pnpt1)) and (not self.insidePath(tpath.path, pnpt2)))): + tpt1.y = pt1.y + currTabHt + tpt2.y = pt2.y + currTabHt + else: + tpt1.y = pt1.y - currTabHt + tpt2.y = pt2.y - currTabHt + tpt1.x = pt1.x + currTabHt/math.tan(math.radians(currTabAngle)) + tpt2.x = pt2.x - currTabHt/math.tan(math.radians(currTabAngle)) + tl1 = [('M', [pt1.x,pt1.y])] + tl1 += [('L', [tpt1.x, tpt1.y])] + ele1 = inkex.Path(tl1) + tl2 = [('M', [pt1.x,pt1.y])] + tl2 += [('L', [tpt2.x, tpt2.y])] + ele2 = inkex.Path(tl2) + thetal1 = ele1.rotate(theta, [pt1.x,pt1.y]) + thetal2 = ele2.rotate(theta, [pt2.x,pt2.y]) + tpt1.x = thetal1[1].x + tpt1.y = thetal1[1].y + tpt2.x = thetal2[1].x + tpt2.y = thetal2[1].y + else: # pt1.x > pt2.x + tpt1.y = pt1.y - testHt + tpt2.y = pt2.y - testHt + tpt1.x = pt1.x - testHt/math.tan(math.radians(testAngle)) + tpt2.x = pt2.x + testHt/math.tan(math.radians(testAngle)) + tl1 = [('M', [pt1.x,pt1.y])] + tl1 += [('L', [tpt1.x, tpt1.y])] + ele1 = inkex.Path(tl1) + tl2 = [('M', [pt1.x,pt1.y])] + tl2 += [('L', [tpt2.x, tpt2.y])] + ele2 = inkex.Path(tl2) + thetal1 = ele1.rotate(theta, [pt1.x,pt1.y]) + thetal2 = ele2.rotate(theta, [pt2.x,pt2.y]) + tpt1.x = thetal1[1].x + tpt1.y = thetal1[1].y + tpt2.x = thetal2[1].x + tpt2.y = thetal2[1].y + pnpt1 = inkex.paths.Move(tpt1.x, tpt1.y) + pnpt2 = inkex.paths.Move(tpt2.x, tpt2.y) + if ((not tpath.enclosed) and (self.insidePath(tpath.path, pnpt1) or self.insidePath(tpath.path, pnpt2))) or \ + (tpath.enclosed and ((not self.insidePath(tpath.path, pnpt1)) and (not self.insidePath(tpath.path, pnpt2)))): + tpt1.y = pt1.y + currTabHt + tpt2.y = pt2.y + currTabHt + else: + tpt1.y = pt1.y - currTabHt + tpt2.y = pt2.y - currTabHt + tpt1.x = pt1.x - currTabHt/math.tan(math.radians(currTabAngle)) + tpt2.x = pt2.x + currTabHt/math.tan(math.radians(currTabAngle)) + tl1 = [('M', [pt1.x,pt1.y])] + tl1 += [('L', [tpt1.x, tpt1.y])] + ele1 = inkex.Path(tl1) + tl2 = [('M', [pt1.x,pt1.y])] + tl2 += [('L', [tpt2.x, tpt2.y])] + ele2 = inkex.Path(tl2) + thetal1 = ele1.rotate(theta, [pt1.x,pt1.y]) + thetal2 = ele2.rotate(theta, [pt2.x,pt2.y]) + tpt1.x = thetal1[1].x + tpt1.y = thetal1[1].y + tpt2.x = thetal2[1].x + tpt2.y = thetal2[1].y + # Check to see if any tabs intersect each other + if self.detectIntersect(pt1.x, pt1.y, tpt1.x, tpt1.y, pt2.x, pt2.y, tpt2.x, tpt2.y): + # Found an intersection. + if adjustTab == 0: + # Try increasing the tab angle in one-degree increments + currTabAngle = currTabAngle + 1.0 + if currTabAngle > 88.0: # We're not increasing the tab angle above 89 degrees + adjustTab = 1 + currTabAngle = taba + if adjustTab == 1: + # So, try reducing the tab height in 20% increments instead + currTabHt = currTabHt - tabht*0.2 # Could this lead to a zero tab_height? + if currTabHt <= 0.0: + # Give up + currTabHt = tabht + adjustTab = 2 + if adjustTab == 2: + tabDone = True # Just show the failure + else: + tabDone = True + + return tpt1,tpt2 + + + def effect(self): + scale = self.svg.unittouu('1'+self.options.unit) + layer = self.svg.get_current_layer() + polysides = int(self.options.polysides) + tab_angle = float(self.options.tabangle) + tab_height = float(self.options.tabheight) * scale + dashlength = float(self.options.dashlength) * scale + npaths = [] + elems = [] + sstr = None + radpath = 0 # Initial assumption is that first path is the radius + outlpath = 1 # and second path is the outline + yorient = True # assuming we are revolving around the Y axis + for selem in self.svg.selection.filter(inkex.PathElement): + elems.append(selem) + if len(elems) == 0: + raise inkex.AbortExtension("ERROR: Nothing selected") + elif len(elems) != 2: + raise inkex.AbortExtension("ERROR: Select only the outline and its radius line\n"\ + +"Nothing more or less.") + for elem in elems: # for each path + escale = 1.0 + if 'transform' in elem.attrib: + transforms = elem.attrib['transform'].split() + for tf in transforms: + if tf.startswith('scale'): + escale = float(tf.split('(')[1].split(')')[0]) + last_letter = 'Z' + + parent = elem.getparent() + #if parent != self.svg.root: + # elem.path.transform = elem.path.transform(parent.composed_transform()) + elementPath = elem.path.to_non_shorthand().to_absolute() + + for ptoken in elementPath: # For each point in the path + ptx2 = None + pty2 = None + if ptoken.letter == 'M': # Starting point + # Hold this point in case we receive a Z + ptx1 = mx = ptoken.x * escale + pty1 = my = ptoken.y * escale + ''' + Assign a structure to the new path. We assume that there is + only one path and, therefore, it isn't enclosed by a + sub-path. However, we'll suffix the ID, if we find a + sub-path. + ''' + npath = pathStruct() + npath.enclosed = False + npath.id = elem.get_id() + if 'style' in elem.attrib: + npath.style = elem.attrib['style'] + if not math.isclose(escale, 1.0): + lsstr = npath.style.split(';') + for stoken in range(len(lsstr)): + if lsstr[stoken].startswith('stroke-width'): + swt = lsstr[stoken].split(':')[1] + swf = str(float(swt)*escale) + lsstr[stoken] = lsstr[stoken].replace(swt, swf) + if lsstr[stoken].startswith('stroke-miterlimit'): + swt = lsstr[stoken].split(':')[1] + swf = str(float(swt)*escale) + lsstr[stoken] = lsstr[stoken].replace(swt, swf) + npath.style = ";".join(lsstr) + npath.path.append(inkex.paths.Move(ptx1,pty1)) + else: + if last_letter != 'M': + ptx1 = ptx2 + pty1 = pty2 + if ptoken.letter == 'L': + ptx2 = ptoken.x * escale + pty2 = ptoken.y * escale + elif ptoken.letter == 'H': + ptx2 = ptoken.x * escale + pty2 = pty1 + elif ptoken.letter == 'V': + ptx2 = ptx1 + pty2 = ptoken.y * escale + elif ptoken.letter == 'Z': + raise inkex.AbortExtension("ERROR: Paths must be open") + else: + raise inkex.AbortExtension("ERROR: Unrecognized path command {0}. Please convert to polyline before!".format(ptoken.letter)) + npath.path.append(inkex.paths.Line(ptx2,pty2)) + last_letter = ptoken.letter + npaths.append(npath) + + # Let's validate the input + if len(npaths[1].path) == 2: + # Our initial assumption was wrong + radpath = 1 + outlpath = 0 + if math.isclose(npaths[radpath].path[0].y,npaths[radpath].path[1].y): + # Guessed wrong. For now, we're just going to abort + # TODO: Support revolving around the X axis + raise inkex.AbortExtension("ERROR: This extension can only revolve about the Y axis") + ''' + The model will be open at the top and the bottom, so we have to calculate + the size of the polygons that will cover them. We were given the number + of sides. + ''' + dscore = '' # Used for building dashlines for model + dwscore = '' # Used for building dashlines for wrapper + if yorient: + # Make sure the outline's points are ordered in ascending Y + if npaths[outlpath].path[0].y < npaths[outlpath].path[0].y: + npaths[outlpath].path.reverse() + # construct the side panel + xpos = ypos = 0.0 + lhs = [] # Left hand side of panel + rhs = [] # Right hand side of panel + for npoint in range(len(npaths[outlpath].path)): + pr = abs(npaths[radpath].path[0].x - npaths[outlpath].path[npoint].x) + pwidth = 2.0*pr*math.tan(math.pi/polysides) + pR = pr/math.cos(math.pi/polysides) + if npoint == 0: + topR = pR + topw = pwidth + lhs.append(inkex.paths.Move(xpos - pwidth/2,ypos)) + rhs.append(inkex.paths.Line(xpos + pwidth/2,ypos)) + else: + seglength = math.sqrt((npaths[outlpath].path[npoint-1].x - npaths[outlpath].path[npoint].x)**2 + \ + (npaths[outlpath].path[npoint-1].y - npaths[outlpath].path[npoint].y)**2) + ypos += seglength + lhs.append(inkex.paths.Line(xpos - pwidth/2,ypos)) + rhs.append(inkex.paths.Line(xpos + pwidth/2,ypos)) + if npoint == len(npaths[outlpath].path)-1: + bottomR = pR + bottomw = pwidth + # Put score marks across the panel + for pcnt in range(len(lhs)): + if (pcnt != 0) and (pcnt != (len(lhs)-1)): + dscore += self.makescore(lhs[pcnt], rhs[pcnt], dashlength) + dwscore = dscore # wrapper only needs these scorelines + + rhs.reverse() # Reverse the order so we can + cpath = pathStruct() + cpath.enclosed = False + cpath.id = 'panel' + cpath.path = lhs + rhs + # add tabs to panel + dprop = '' # Used for building the main path + dwrap = '' + for ptn in range(len(cpath.path)): + if ptn == 0: + dprop = 'M '+str(cpath.path[ptn].x)+','+str(cpath.path[ptn].y) + dwrap = 'M '+str(cpath.path[ptn].x)+','+str(cpath.path[ptn].y) + else: + if ptn > (len(npaths[outlpath].path)-1): + dscore += self.makescore(cpath.path[ptn-1], cpath.path[ptn],dashlength) + tabpt1, tabpt2 = self.makeTab(cpath, cpath.path[ptn-1], cpath.path[ptn], tab_height, tab_angle) + dprop += ' L '+str(tabpt1.x)+','+str(tabpt1.y) + dprop += ' L '+str(tabpt2.x)+','+str(tabpt2.y) + dprop += ' L '+str(cpath.path[ptn].x)+','+str(cpath.path[ptn].y) + dwrap += ' L '+str(cpath.path[ptn].x)+','+str(cpath.path[ptn].y) + if ptn == len(cpath.path)-1: + tabpt1, tabpt2 = self.makeTab(cpath, cpath.path[ptn], cpath.path[0], tab_height, tab_angle) + dprop += ' L '+str(tabpt1.x)+','+str(tabpt1.y) + dprop += ' L '+str(tabpt2.x)+','+str(tabpt2.y) + dprop += 'Z' + dscore += self.makescore(cpath.path[ptn], cpath.path[0],dashlength) + dwrap += 'Z ' + if npaths[outlpath].style != None: + lsstr = npaths[outlpath].style.split(';') + for stoken in range(len(lsstr)): + if lsstr[stoken].startswith('fill'): + swt = lsstr[stoken].split(':')[1] + swf = '#eeeeee' + lsstr[stoken] = lsstr[stoken].replace(swt, swf) + else: + lsstr.append("\'fill\':\'#eeeeee\'") + sstr = ";".join(lsstr) + # lump together all the score lines + groupm = inkex.elements._groups.Group() + groupm.label = 'group0ms' + self.drawline(dprop,'model',groupm,sstr+';stroke:{}'.format(self.options.color_solid)) # Output the model + + dscore_style = sstr+';stroke:{}'.format(self.options.color_dash) + if self.options.cosmetic_dash_style is True: + dscore_style += ';stroke-dasharray:{}'.format(3, 3) + self.drawline(dscore[1:],'mscore',groupm,dscore_style) # Output the scorelines separately + layer.append(groupm) + groupw = inkex.elements._groups.Group() + groupw.label = 'group0ws' + if self.options.generate_decorative_wrapper is True: + self.drawline(dwrap,'wrapper',groupw,sstr) # Output the model + self.drawline(dwscore[1:],'wscore',groupw,sstr) # Output the scorelines separately + layer.append(groupw) + + # Finally, generate the top and bottom polygons + self.drawline(self.makepoly(topw, polysides),npaths[outlpath].id+"lid1",layer,sstr+';stroke:{}'.format(self.options.color_solid)) + self.drawline(self.makepoly(bottomw, polysides),npaths[outlpath].id+"lid2",layer,sstr+';stroke:{}'.format(self.options.color_solid)) + + +if __name__ == '__main__': + Polygen().run() diff --git a/extensions/fablabchemnitz/polygon_side/polygon_side.inx b/extensions/fablabchemnitz/polygon_side/polygon_side.inx new file mode 100755 index 00000000..52df43c0 --- /dev/null +++ b/extensions/fablabchemnitz/polygon_side/polygon_side.inx @@ -0,0 +1,22 @@ + + + Polygon Side + fablabchemnitz.de.polygon_side + 3 + 25 + + + + + + path + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/polygon_side/polygon_side.py b/extensions/fablabchemnitz/polygon_side/polygon_side.py new file mode 100644 index 00000000..95209aaf --- /dev/null +++ b/extensions/fablabchemnitz/polygon_side/polygon_side.py @@ -0,0 +1,118 @@ +#!/usr/bin/env python3 +# +# Copyright (C) [2021] [Matt Cottam], [mpcottam@raincloud.co.uk] +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# +# Create a Polygon given a number of sides and side length. +# + +import math +import inkex +from inkex import PathElement +from inkex import units +import re + +# Formula to find the circumradius ( centre to apex ) required to create +# for a given number of sectors to return desired side length + +def radius_from_side_and_sectors(side_length, sectors, found_units, unit_choice): + conversions = { + 'in': 96.0, + 'pt': 1.3333333333333333, + 'px': 1.0, + 'mm': 3.779527559055118, + 'cm': 37.79527559055118, + 'm': 3779.527559055118, + 'km': 3779527.559055118, + 'Q': 0.94488188976378, + 'pc': 16.0, + 'yd': 3456.0, + 'ft': 1152.0, + '': 1.0, # Default px + } + + # Try to convert from detected units into pixels + + if unit_choice == 2: + try: + pixel_conversion_factor = conversions[found_units] + except: + pixel_conversion_factor = 1 + + else: + pixel_conversion_factor = 1 + + radius = (side_length / (2 * (math.sin(math.pi / sectors)))) / pixel_conversion_factor + + path = svg_poly(0, 0, radius, sectors) + + return path + + +# All points of a regular polygon lie on a circle +# Calculate points on circle for given number of sides + +def svg_poly(cx, cy, radius, sectors): + x_start = cx + y_start = cy - radius + + angle = 0 + + y_start = cy / 2 + (radius * (math.sin(angle))) + x_start = cx / 2 + (radius * (math.cos(angle))) + + path = f'M {x_start} {y_start}' + + for sector in range(1, sectors + 1): + angle = (sector * math.pi) / (sectors / 2) + + y = cy / 2 + (radius * (math.sin(angle))) + x = cx / 2 + (radius * (math.cos(angle))) + + path = path + f' L {x} {y} ' + + x_start = x + y_start = y + + return path + ' z' + + +class makepoly(inkex.GenerateExtension): + + def add_arguments(self, pars): + pars.add_argument("--number_of_sides", type=int, dest="sectors", default=6) + pars.add_argument("--length_of_sides", type=float, dest="side_length", default=25) + pars.add_argument("--unit_choice", type=int, dest="unit_choice", default=25) + + container_label = 'Side Poly' + + def generate(self): + found_units = self.svg.unit + + path = radius_from_side_and_sectors(self.options.side_length, self.options.sectors, found_units, + self.options.unit_choice) + + style = {'stroke': '#000000', 'fill': 'none', 'stroke-width': str(self.svg.unittouu('1px'))} + poly_path = PathElement() + poly_path.style = style + poly_path.path = path + + yield poly_path + + +if __name__ == '__main__': + makepoly().run() diff --git a/extensions/fablabchemnitz/polyhedra/polyhedra.inx b/extensions/fablabchemnitz/polyhedra/polyhedra.inx new file mode 100644 index 00000000..c094a39b --- /dev/null +++ b/extensions/fablabchemnitz/polyhedra/polyhedra.inx @@ -0,0 +1,67 @@ + + + Polyhedra + fablabchemnitz.de.polyhedra + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100.0 + + + + + + + + + + + + + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/polyhedra/polyhedra.py b/extensions/fablabchemnitz/polyhedra/polyhedra.py new file mode 100644 index 00000000..21eb39a7 --- /dev/null +++ b/extensions/fablabchemnitz/polyhedra/polyhedra.py @@ -0,0 +1,228 @@ +#!/usr/bin/env python3 +''' +Copyright (C) 2010 Jonathan Manton (jmanton @ illinois.edu) +Copyright (C) 2007 Aaron Spike (aaron @ ekips.org) +Copyright (C) 2007 Tavmjong Bah (tavmjong @ free.fr) + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +''' + +# this program is loosely based on the gear extension for inkscape + +import inkex +from polyhedrondata import angleOverride, polyhedronData +from math import * +from lxml import etree + +def points_to_svgd(p): + f = p[0] + p = p[1:] + svgd = 'M%.3f,%.3f' % f + for x in p: + svgd += 'L%.3f,%.3f' % x + return svgd + +# these are designed to be 100px wide - they have to be scaled +no_tab = { 'cut' : ['m 0,0 100,0'], 'perf' : []} + +notab = {0 : no_tab} +simpletab = {0: {'cut': ['m 0,0 20,19 60,0 l 20,-19'], 'perf' : ['m 0,0 100,0']}} +# tab array - 0 = slot/tab, 1 = two tabs, 2 = single tab (alternate tab and nothing), 3 = none +tabStyle = [{ \ + 50 : {'cut': ['m 0,0 35,0 0,2 -6,0 c 0,0 1,8 6,12 8,6 22,6 30,0 5,-4 6,-12 6,-12 l -6,0 0,-2 35,0'], 'perf' : ['M 42,0 58,0']}, \ + 24 : {'cut': ['m 0,0 55,0 0,2 -6,0 c 0,0 1,3 6,6 8,3 19,6 27,8 5,-4 9,-14 9,-14 l -6,0 0,-2 15,0'], 'perf' : ['M 62,0 78,0']}, \ + 18 : {'cut' : ['m 0,0 65,0 0,2 -6,0 c 0,0 1,3 6,6 8,2 11,2 19,3 5,-4 9,-10 7,-9 l -6,0 0,-2 15,0'], 'perf' : ['m 72,0 6,0']}, \ + 6 : {'cut': ['m 0,0 70,0 2,7 10,1 5,-6 -2,0 0,-2 15,0'], 'perf' : ['m 74,0 7,0']}, + 0 : { 'cut' : ['m 0,0 100,0'], 'perf' : []}}, simpletab, simpletab, notab] +slotStyle = [{\ + 50: {'cut': ['m 0,0 20,19 60,0 l 20,-19','m 28,-3 4,5 36,0 4,-5'], 'perf' : ['M 0,0 28,0','M 100,0 72,0']}, \ + 24 : {'cut': ['M 100,0 90,18 30,11 20,0 0,0', 'm 92,-3 -4,5 -36,0 -4,-5'], 'perf' : ['M 100,0 92,0', 'M 20,0 48,0']}, \ + 18 : {'cut' : ['M 100,0 90,16 40,9 35,0 0,0', 'm 92,-3 -4,5 -26,0 -4,-5'], 'perf' : ['M 100,0 92,0', 'M 35,0 58,0']}, \ + 6 : {'cut' : ['M 100,0 98,10 88,9 84,2 86,2 86,0 0,0'], 'perf' : ['m 96,0 -6,0']}, + 0 : { 'cut' : ['m 0,0 100,0'], 'perf' : [] }}, simpletab, notab, notab] + + +class Polyhedra(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument("-p", "--poly", default='Cube', help="Polygon net to render") + pars.add_argument("-s", "--size", type=float, default=100.0, help="Size of first edge") + pars.add_argument("-u", "--unit", default= 'mm', help="Units") + pars.add_argument("-t", "--tabs", type=int, default=0, help="Tab style") + + def get_tab(self, limitAngle): + return(self.get_connector('tab', limitAngle)) + + def get_slot(self, limitAngle): + return(self.get_connector('slot', limitAngle)) + + def get_connector(self, type, limitAngle): + if(self.options.tabs == 1): # two tabs + return(self.gen_tab(limitAngle/2)) + + if(self.options.tabs == 2): # one tab + if(type == 'tab'): + return(self.gen_tab(limitAngle)) + else: + return(no_tab) + + if(self.options.tabs == 3): # no tabs or slots + return(no_tab) + + # otherwise, get stuff from the array of specially modified tab/slots + + if(type == 'tab'): + source = tabStyle + else: + source = slotStyle + + cuttable = source[self.options.tabs].keys() + sorted(cuttable) # sorts in-place. Ugh. + reversed(cuttable) # in-place. Ugh. + for angle in cuttable: + if(limitAngle >= angle): + return(source[self.options.tabs][angle]) + + def gen_tab(self, theta_degrees): + theta = radians(min(theta_degrees,90)) + minOffset = 8 + tabAngle = radians(40) + minTabLength = 40 + tabHeight = 19 # must be >= minOffset + tabWidth = 100 + + # determine if we need to sqash down side of tab by limit angle + bX = minOffset * cos(theta) / sin(theta) + aX = bX - (minOffset * cos(tabAngle) / sin(tabAngle)) + if(theta >= tabAngle): + tab_cut = [(0,0), (tabHeight/sin(tabAngle) * cos(tabAngle), tabHeight)] + tab_perf = [(0,0), (tabWidth,0)] + else: + if (aX > (tabWidth - minTabLength)): # too stubby, don't put a tab + return(no_tab) + tab_cut = [(0,0), (aX,0), (bX, minOffset)] + tab_perf = [(aX,0), (tabWidth,0)] + + # now see if we also have to squash the other side of the tab - this happens + # for very small angles where the tab height on the far side would still be + # too high and would intersect with the other tab + + # first, find where the tab would intersect the limit angle if we just put + # out a line of infinite length at the tab angle. + bmult = tabWidth / (cos(theta) * sin(tabAngle) / sin(theta) + cos(tabAngle)) + tiY = bmult * sin(tabAngle) + + # now see if that intersection is too low. If so, limit the tab's height + tiY = min(tiY, tabHeight) + tab_cut.append((tabWidth - tiY / sin(tabAngle) * cos(tabAngle), tiY)) + tab_cut.append((tabWidth, 0)) + + return({'cut' : [points_to_svgd(tab_cut)], 'perf' : [points_to_svgd(tab_perf)]}) + + def effect(self): + poly = self.options.poly + size = self.svg.unittouu(str(self.options.size) + self.options.unit) + + eC = polyhedronData[poly]['edgeCoordinates'] + iEI = polyhedronData[poly]['insideEdgeIndices'] + oEI = polyhedronData[poly]['outsideEdgeIndices'] + oED = polyhedronData[poly]['outsideEdgeDegrees'] + sidelen = sqrt((eC[oEI[0][0]-1][0] - eC[oEI[0][1]-1][0])**2 + (eC[oEI[0][0]-1][1] - eC[oEI[0][1]-1][1])**2) + scale = size / sidelen + + # Translate group, Rotate path. + t = 'translate(' + str( self.svg.namedview.center[0] ) + ',' + str( self.svg.namedview.center[1] ) + ')' + g_attribs = {inkex.addNS('label','inkscape'):'Polygon ' + str( poly ), 'transform':t } + g = etree.SubElement(self.svg.get_current_layer(), 'g', g_attribs) + + gsub_attribs = {inkex.addNS('label','inkscape'):'Polygon ' + str( poly ) + 'border' } + gsub = etree.SubElement(g, 'g', gsub_attribs) + + # Create SVG Path + cutStyle = { 'stroke': '#0000FF', 'stroke-width': '1px', 'fill': 'none' } + perfStyle = { 'stroke': '#FF0000', 'stroke-width': '1px', 'fill': 'none' } + textStyle = { + 'font-size': str( size/4 ), + 'font-family': 'arial', + 'text-anchor': 'middle', + 'text-align': 'center', + 'fill': '#222' + } + + numOEI = len(oEI) + for edgeIndex in range(numOEI): + eX1 = eC[oEI[edgeIndex][0]-1][0] + eY1 = eC[oEI[edgeIndex][0]-1][1] + eX2 = eC[oEI[edgeIndex][1]-1][0] + eY2 = eC[oEI[edgeIndex][1]-1][1] + + origin = (eX1 * scale, eY1 * scale) + edgelen = sqrt((eX1 - eX2)**2 + (eY1 - eY2)**2) + edgesize = size * (edgelen / sidelen) + + + prevAngle = (oED[(edgeIndex - 1) % numOEI] + 180 - oED[edgeIndex]) % 360 + nextAngle = (oED[edgeIndex] + 180 - oED[(edgeIndex + 1) % numOEI]) % 360 + if str(angleOverride) in poly: + if angleOverride[poly].has_key('prev'): + if angleOverride[poly]['prev'].has_key(edgeIndex): + prevAngle = angleOverride[poly]['prev'][edgeIndex] + if angleOverride[poly].has_key('next'): + if angleOverride[poly]['next'].has_key(edgeIndex): + nextAngle = angleOverride[poly]['next'][edgeIndex] + trans = 'translate(' + str(origin[0]) + ',' + str(origin[1]) + ') rotate(' + str(oED[edgeIndex] ) + ') scale(' + str(edgesize/100.0) + ')' + + limitAngle = min(prevAngle, nextAngle) + tab = self.get_tab(limitAngle) + slot = self.get_slot(limitAngle) + + # the "special" tabs are all skewed one way or the other, to + # make room for tight turns. This determines if it is the previous + # or next angle that is the tight one, and flips the tab or slot if + # needed. + + if(nextAngle == limitAngle): + trans += ' translate(100.0, 0) scale(-1,1)' + + tab_group_attribs = {inkex.addNS('label','inkscape'):'tab', 'transform': trans } + tab_group = etree.SubElement(gsub, 'g', tab_group_attribs) + midX = (eX2 - eX1)/2 + eX1 + midY = (eY2 - eY1)/2 + eY1 + text_attrib = {'style': str(inkex.Style(textStyle)), 'x' : str(midX * scale), 'y' : str(midY * scale) } + # etree.SubElement(gsub, 'text', text_attrib).text = str(edgeIndex) + if ((edgeIndex % 2) == 0): + edgetype = tab + else: + edgetype = slot + + for path in edgetype['cut']: + gear_attribs = {'style':str(inkex.Style(cutStyle)), 'd':path} + gear = etree.SubElement(tab_group, inkex.addNS('path','svg'), gear_attribs ) + + for path in edgetype['perf']: + gear_attribs = {'style':str(inkex.Style(perfStyle)), 'd':path} + gear = etree.SubElement(tab_group, inkex.addNS('path','svg'), gear_attribs ) + + gsub_attribs = {inkex.addNS('label','inkscape'):'Polygon ' + str( poly ) + 'inside' } + gsub = etree.SubElement(g, 'g', gsub_attribs) + + for edge in iEI: + points = [(eC[edge[0]-1][0] * scale, eC[edge[0]-1][1] * scale), (eC[edge[1]-1][0] * scale, eC[edge[1]-1][1] * scale)] + path = points_to_svgd( points ) + perf_attribs = {'style':str(inkex.Style(perfStyle)), 'd':path} + gear = etree.SubElement(gsub, inkex.addNS('path','svg'), perf_attribs ) + +if __name__ == '__main__': + Polyhedra().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/polyhedra/polyhedrondata.py b/extensions/fablabchemnitz/polyhedra/polyhedrondata.py new file mode 100644 index 00000000..248cdd8f --- /dev/null +++ b/extensions/fablabchemnitz/polyhedra/polyhedrondata.py @@ -0,0 +1,1429 @@ +#!/usr/bin/env python3 +# Copyright (C) 2010 Jonathan Manton (jmanton @ illinois.edu) + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +# net data produced with Mathematica using the notebook at https://github.com/vmario89/fablab-polyhedra/tree/master/autonets +# angle overrides manually produced, with help from debugging mode on net generation that also outputs the vertex number of the outer edges of the nets. + +angleOverride = {\ + 'SnubCube' : {'prev' : {19 : 24., 38 : 24.}, 'next' : {16 : 24., 35 : 24.}}, \ + 'SnubDodecahedron' : {'prev' : {10 : 24., 17 : 24., 21 : 24. , 28 : 24., 32: 24., 39: 24. , 43 : 24., 50 : 24., 54 : 24., 69 : 24., 76 : 24., 80 : 24., 87 : 24., 91 : 24., 98 : 24., 102 : 24., 109 : 24., 113 : 24.}, \ + 'next' : {7 : 24., 14 : 24., 18 : 24., 25 : 24. , 29 : 24., 36 : 24. , 40 : 24., 47 : 24., 51 : 24., 66 : 24., 73 : 24., 77 : 24., 84 : 24., 88 : 24., 95 : 24., 99 : 24., 106 : 24., 110 : 24.}},\ + 'GreatRhombicosidodecahedron' : {'prev' : {16: 18., 25: 18., 46: 18., 55: 18., 68: 18., 77: 18., 90: 18., 99: 18., 112: 18., 136: 18., 145: 18., 166: 18., 175: 18., 188: 18., 197: 18., 210: 18., 219: 18., 232: 18. }, \ + 'next' : {13 : 18., 22: 18., 43: 18., 52: 18., 65: 18., 74: 18., 87: 18., 96: 18., 109: 18., 133: 18., 142: 18., 163: 18., 172: 18., 185: 18., 194: 18., 207: 18., 216: 18., 229: 18.}}, \ + 'SmallRhombicosidodecahedron' : {'prev' : {10 : 24., 11 : 24., 24 : 24., 25 : 24., 35 : 24., 36 : 24., 46 : 24., 47: 24., 59 : 24., 73: 24., 74: 24., 84: 24., 85: 24., 95: 24., 96: 24., 106: 24., 107: 24. }, \ + 'next' : {6: 24. , 7 : 24., 20 : 24. , 21 : 24., 31 : 24., 32 : 24., 42 : 24., 43 : 24., 56 : 24., 69 : 24., 70: 24., 80: 24., 81: 24., 91:24., 92: 24., 102: 24., 103: 24. }}, \ + 'TruncatedIcosahedron' : {'prev' : {8 : 24., 12 : 24., 22: 24., 26: 24., 33: 24., 37: 24., 44: 24., 48: 24., 55: 24., 67: 24., 71: 24., 78: 24., 82: 24., 89: 24., 93: 24., 100: 24., 104: 24., 114: 24.}, \ + 'next' : {5 : 24., 9 : 24., 19: 24., 23: 24., 30: 24., 34: 24., 41: 24., 45: 24., 52: 24., 64: 24., 68: 24., 75: 24., 79: 24., 86: 24., 90: 24., 97: 24., 101: 24., 111: 24. }}, \ + 'DeltoidalHexecontahedron' : {'prev' : {6: 24., 44: 24., 56: 24., 68: 24., 80: 24., 92: 24., 104: 24., 116: 24.}, \ + 'next' : {3: 24., 41: 24., 53: 24., 65: 24., 77: 24., 89: 24., 101: 24., 113: 24.}}, \ + 'PentagonalIcositetrahedron' : {'prev' : {16: 24., 22: 24.}, \ + 'next' : {13: 24., 19: 24.}}, \ + 'PentagonalHexecontahedron' : {'prev' : {10: 12., 28: 12., 65: 12., 83: 12., 101: 12., 119: 12., 156: 12., 174: 12.}, \ + 'next' : {7: 12., 25: 12., 62: 12., 80: 12., 98: 12., 116: 12., 153: 12., 171: 12.}}, \ + 'PentakisDodecahedron' : {'prev' : {4: 18., 25: 18., 31: 18., 37: 18., 43: 18., 48: 18., 54: 18., 60: 18.}, \ + 'next' : {1: 18., 22: 18., 28: 18., 34: 18., 40: 18., 45: 18., 51: 18., 57: 18. }} \ +} + + +polyhedronData = \ +{'Cube' : {'edgeCoordinates' : [[0., 1.], [0., 2.], [1., 0.], [1., \ +1.], [1., 2.], [1., 3.], [2., 0.], [2., 1.], [2., 2.], [2., 3.], [3., \ +1.], [3., 2.], [4., 1.], [4., 2.]], 'outsideEdgeIndices' : [[1, 2], \ +[2, 5], [5, 6], [6, 10], [10, 9], [9, 12], [12, 14], [14, 13], [13, \ +11], [11, 8], [8, 7], [7, 3], [3, 4], [4, 1]], 'outsideEdgeDegrees' : \ +[90., 0., 90., 0., -90., 0., 0., -90., 180., 180., -90., 180., 90., \ +180.], 'insideEdgeIndices' : [[4, 5], [4, 8], [5, 9], [8, 9], [11, \ +12]]}, 'Dodecahedron' : {'edgeCoordinates' : [[2.11803, 0.], \ +[4.73607, 0.], [5.73607, 0.], [6.3541, 0.], [7.3541, 0.], [1.30902, \ +0.587785], [2.92705, 0.587785], [0.809017, 0.951057], [3.42705, \ +0.951057], [4.42705, 0.951057], [6.04508, 0.951057], [7.66312, \ +0.951057], [0., 1.53884], [1.61803, 1.53884], [2.61803, 1.53884], \ +[4.23607, 1.53884], [5.23607, 1.53884], [6.8541, 1.53884], [7.8541, \ +1.53884], [0.309017, 2.4899], [1.30902, 2.4899], [2.92705, 2.4899], \ +[3.92705, 2.4899], [5.54508, 2.4899], [6.54508, 2.4899], [8.16312, \ +2.4899], [0.5, 3.07768], [2.11803, 3.07768], [3.73607, 3.07768], \ +[4.73607, 3.07768], [7.3541, 3.07768], [5.23607, 3.44095], [6.8541, \ +3.44095], [0.809017, 4.02874], [1.80902, 4.02874], [2.42705, \ +4.02874], [3.42705, 4.02874], [6.04508, 4.02874]], \ +'outsideEdgeIndices' : [[13, 20], [20, 21], [21, 27], [27, 34], [34, \ +35], [35, 28], [28, 36], [36, 37], [37, 29], [29, 22], [22, 23], [23, \ +30], [30, 24], [24, 32], [32, 38], [38, 33], [33, 25], [25, 31], [31, \ +26], [26, 19], [19, 18], [18, 12], [12, 5], [5, 4], [4, 11], [11, 3], \ +[3, 2], [2, 10], [10, 17], [17, 16], [16, 9], [9, 15], [15, 7], [7, \ +1], [1, 6], [6, 14], [14, 8], [8, 13]], 'outsideEdgeDegrees' : [72., \ +0., 144., 72., 0., -72., 72., 0., -72., -144., 0., 36., -36., 108., \ +36., -36., -108., 36., -36., -108., 180., -36., -108., 180., 108., \ +-108., 180., 108., 36., 180., -144., 144., -72., -144., 144., 72., \ +-144., 144.], 'insideEdgeIndices' : [[11, 17], [11, 18], [14, 15], \ +[14, 21], [15, 22], [16, 23], [17, 24], [18, 25], [21, 28], [22, 28], \ +[24, 25]]}, 'Icosahedron' : {'edgeCoordinates' : [[1., 0.], [2., 0.], \ +[3., 0.], [4., 0.], [5., 0.], [0.5, 0.866025], [1.5, 0.866025], [2.5, \ +0.866025], [3.5, 0.866025], [4.5, 0.866025], [5.5, 0.866025], [0., \ +1.73205], [1., 1.73205], [2., 1.73205], [3., 1.73205], [4., 1.73205], \ +[5., 1.73205], [0.5, 2.59808], [1.5, 2.59808], [2.5, 2.59808], [3.5, \ +2.59808], [4.5, 2.59808]], 'outsideEdgeIndices' : [[12, 18], [18, \ +13], [13, 19], [19, 14], [14, 20], [20, 15], [15, 21], [21, 16], [16, \ +22], [22, 17], [17, 11], [11, 5], [5, 10], [10, 4], [4, 9], [9, 3], \ +[3, 8], [8, 2], [2, 7], [7, 1], [1, 6], [6, 12]], \ +'outsideEdgeDegrees' : [60., -60., 60., -60., 60., -60., 60., -60., \ +60., -60., -60., -120., 120., -120., 120., -120., 120., -120., 120., \ +-120., 120., 120.], 'insideEdgeIndices' : [[6, 7], [6, 13], [7, 8], \ +[7, 13], [7, 14], [8, 9], [8, 14], [8, 15], [9, 10], [9, 15], [9, \ +16], [10, 11], [10, 16], [10, 17], [12, 13], [13, 14], [14, 15], [15, \ +16], [16, 17]]}, 'Octahedron' : {'edgeCoordinates' : [[2., 0.], [0.5, \ +0.866025], [1.5, 0.866025], [2.5, 0.866025], [3.5, 0.866025], [0., \ +1.73205], [1., 1.73205], [2., 1.73205], [3., 1.73205], [1.5, \ +2.59808]], 'outsideEdgeIndices' : [[6, 7], [7, 10], [10, 8], [8, 9], \ +[9, 5], [5, 4], [4, 1], [1, 3], [3, 2], [2, 6]], 'outsideEdgeDegrees' \ +: [0., 60., -60., 0., -60., 180., -120., 120., 180., 120.], \ +'insideEdgeIndices' : [[2, 7], [3, 4], [3, 7], [3, 8], [4, 8], [4, \ +9], [7, 8]]}, 'Tetrahedron' : {'edgeCoordinates' : [[0., 0.], [0.5, \ +0.866025], [1., 0.], [1., 1.73205], [1.5, 0.866025], [2., 0.]], \ +'outsideEdgeIndices' : [[1, 2], [2, 4], [4, 5], [5, 6], [6, 3], [3, \ +1]], 'outsideEdgeDegrees' : [60., 60., -60., -60., 180., 180.], \ +'insideEdgeIndices' : [[2, 3], [2, 5], [3, 5]]}, 'Cuboctahedron' : \ +{'edgeCoordinates' : [[0., 1.86603], [0., 2.86603], [0.5, 1.], \ +[0.866025, 2.36603], [0.866025, 3.36603], [1.36603, 0.5], [1.36603, \ +1.5], [1.86603, 2.36603], [1.86603, 3.36603], [2.23205, 0.], \ +[2.23205, 1.], [2.73205, 1.86603], [2.73205, 2.86603], [3.23205, 0.], \ +[3.23205, 1.], [3.59808, 2.36603], [4.09808, 0.5], [4.09808, 1.5], \ +[4.59808, 2.36603], [4.9641, 1.], [5.4641, 1.86603], [5.9641, 1.]], \ +'outsideEdgeIndices' : [[1, 4], [4, 2], [2, 5], [5, 9], [9, 13], [13, \ +8], [8, 12], [12, 16], [16, 19], [19, 21], [21, 22], [22, 20], [20, \ +18], [18, 15], [15, 17], [17, 14], [14, 10], [10, 6], [6, 11], [11, \ +7], [7, 3], [3, 1]], 'outsideEdgeDegrees' : [30., 150., 30., 0., \ +-30., -150., -30., 30., 0., -30., -60., 180., 150., -150., -30., \ +-150., 180., 150., 30., 150., -150., 120.], 'insideEdgeIndices' : \ +[[4, 5], [4, 7], [4, 8], [7, 8], [8, 9], [10, 11], [11, 12], [11, \ +15], [12, 15], [14, 15], [16, 18], [18, 19], [20, 21]]}, \ +'GreatRhombicosidodecahedron' : {'edgeCoordinates' : [[0., 5.63692], \ +[0.309017, 4.68586], [0.309017, 6.58797], [0.618034, 8.04179], \ +[0.618034, 10.7738], [1.11803, 4.09808], [1.11803, 7.17576], \ +[1.11803, 8.90781], [1.11803, 9.90781], [1.11803, 11.6399], [2.11803, \ +3.44371], [2.11803, 4.09808], [2.11803, 7.17576], [2.11803, 8.90781], \ +[2.11803, 9.90781], [2.11803, 11.6399], [2.36603, 9.08063], [2.61803, \ +2.57768], [2.61803, 8.04179], [2.61803, 10.7738], [2.67504, 8.12957], \ +[2.67504, 10.0317], [2.92705, 4.68586], [2.92705, 6.58797], [2.98406, \ +3.94371], [2.98406, 6.67576], [2.98406, 12.1399], [3.23607, 5.63692], \ +[3.48406, 3.07768], [3.48406, 4.80973], [3.48406, 5.80973], [3.48406, \ +7.54179], [3.48406, 10.6195], [3.48406, 11.2738], [4.48406, 3.07768], \ +[4.48406, 4.80973], [4.48406, 5.80973], [4.48406, 7.54179], [4.48406, \ +10.6195], [4.73205, 5.63692], [4.73205, 13.1787], [4.98406, 3.94371], \ +[4.98406, 6.67576], [5.04107, 4.68586], [5.04107, 6.58797], [5.04107, \ +12.2276], [5.04107, 14.1298], [5.29308, 8.12957], [5.29308, 10.0317], \ +[5.35008, 8.04179], [5.35008, 10.7738], [5.60209, 9.08063], [5.85008, \ +4.09808], [5.85008, 7.17576], [5.85008, 8.90781], [5.85008, 9.90781], \ +[5.85008, 11.6399], [5.85008, 14.7175], [6.85008, 3.44371], [6.85008, \ +4.09808], [6.85008, 7.17576], [6.85008, 8.90781], [6.85008, 9.90781], \ +[6.85008, 11.6399], [6.85008, 14.7175], [7.09808, 9.08063], [7.35008, \ +2.57768], [7.35008, 8.04179], [7.35008, 10.7738], [7.40709, 8.12957], \ +[7.40709, 10.0317], [7.6591, 4.68586], [7.6591, 6.58797], [7.6591, \ +12.2276], [7.6591, 14.1298], [7.71611, 3.94371], [7.71611, 6.67576], \ +[7.71611, 12.1399], [7.96812, 5.63692], [7.96812, 13.1787], [8.21611, \ +3.07768], [8.21611, 4.80973], [8.21611, 5.80973], [8.21611, 7.54179], \ +[8.21611, 10.6195], [8.21611, 11.2738], [9.21611, 3.07768], [9.21611, \ +4.80973], [9.21611, 5.80973], [9.21611, 7.54179], [9.21611, 10.6195], \ +[9.4641, 5.63692], [9.71611, 3.94371], [9.71611, 6.67576], [9.77312, \ +4.68586], [9.77312, 6.58797], [10.0251, 8.12957], [10.0251, 10.0317], \ +[10.0821, 8.04179], [10.0821, 10.7738], [10.3341, 9.08063], [10.5821, \ +4.09808], [10.5821, 7.17576], [10.5821, 8.90781], [10.5821, 9.90781], \ +[10.5821, 11.6399], [11.5821, 3.44371], [11.5821, 4.09808], [11.5821, \ +7.17576], [11.5821, 8.90781], [11.5821, 9.90781], [11.5821, 11.6399], \ +[11.8301, 9.08063], [12.0821, 2.57768], [12.0821, 8.04179], [12.0821, \ +10.7738], [12.1391, 8.12957], [12.1391, 10.0317], [12.3912, 4.68586], \ +[12.3912, 6.58797], [12.4482, 3.94371], [12.4482, 6.67576], [12.4482, \ +12.1399], [12.7002, 5.63692], [12.9482, 3.07768], [12.9482, 4.80973], \ +[12.9482, 5.80973], [12.9482, 7.54179], [12.9482, 10.6195], [12.9482, \ +11.2738], [13.9482, 3.07768], [13.9482, 4.80973], [13.9482, 5.80973], \ +[13.9482, 7.54179], [13.9482, 10.6195], [14.1962, 5.63692], [14.4482, \ +3.94371], [14.4482, 6.67576], [14.5052, 4.68586], [14.5052, 6.58797], \ +[14.7572, 8.12957], [14.7572, 10.0317], [14.8142, 8.04179], [14.8142, \ +10.7738], [15.0662, 9.08063], [15.3142, 4.09808], [15.3142, 7.17576], \ +[15.3142, 8.90781], [15.3142, 9.90781], [15.3142, 11.6399], [16.3142, \ +3.44371], [16.3142, 4.09808], [16.3142, 7.17576], [16.3142, 8.90781], \ +[16.3142, 9.90781], [16.3142, 11.6399], [16.5622, 1.53884], [16.5622, \ +9.08063], [16.8142, 2.57768], [16.8142, 8.04179], [16.8142, 10.7738], \ +[16.8712, 0.587785], [16.8712, 2.4899], [16.8712, 8.12957], [16.8712, \ +10.0317], [17.1232, 4.68586], [17.1232, 6.58797], [17.1802, 3.94371], \ +[17.1802, 6.67576], [17.1802, 12.1399], [17.4322, 5.63692], [17.6802, \ +0.], [17.6802, 3.07768], [17.6802, 4.80973], [17.6802, 5.80973], \ +[17.6802, 7.54179], [17.6802, 10.6195], [17.6802, 11.2738], [18.6802, \ +0.], [18.6802, 3.07768], [18.6802, 4.80973], [18.6802, 5.80973], \ +[18.6802, 7.54179], [18.6802, 10.6195], [18.9282, 5.63692], [19.1802, \ +3.94371], [19.1802, 6.67576], [19.2372, 4.68586], [19.2372, 6.58797], \ +[19.4892, 0.587785], [19.4892, 2.4899], [19.4892, 8.12957], [19.4892, \ +10.0317], [19.5462, 8.04179], [19.5462, 10.7738], [19.7982, 1.53884], \ +[19.7982, 9.08063], [20.0462, 4.09808], [20.0462, 7.17576], [20.0462, \ +8.90781], [20.0462, 9.90781], [20.0462, 11.6399], [21.0462, 3.44371], \ +[21.0462, 4.09808], [21.0462, 7.17576], [21.0462, 8.90781], [21.0462, \ +9.90781], [21.0462, 11.6399], [21.2942, 9.08063], [21.5462, 2.57768], \ +[21.5462, 8.04179], [21.5462, 10.7738], [21.6032, 8.12957], [21.6032, \ +10.0317], [21.8553, 4.68586], [21.8553, 6.58797], [21.9123, 3.94371], \ +[21.9123, 6.67576], [21.9123, 12.1399], [22.1643, 5.63692], [22.4123, \ +3.07768], [22.4123, 4.80973], [22.4123, 5.80973], [22.4123, 7.54179], \ +[22.4123, 10.6195], [22.4123, 11.2738], [23.4123, 3.07768], [23.4123, \ +4.80973], [23.4123, 5.80973], [23.4123, 7.54179], [23.4123, 10.6195], \ +[23.9123, 3.94371], [23.9123, 6.67576], [24.2213, 8.12957], [24.2213, \ +10.0317], [24.2783, 8.04179], [24.5303, 9.08063], [24.7783, \ +7.17576]], 'outsideEdgeIndices' : [[1, 3], [3, 7], [7, 4], [4, 8], \ +[8, 9], [9, 5], [5, 10], [10, 16], [16, 27], [27, 34], [34, 20], [20, \ +15], [15, 14], [14, 19], [19, 32], [32, 21], [21, 17], [17, 22], [22, \ +33], [33, 39], [39, 49], [49, 52], [52, 48], [48, 38], [38, 50], [50, \ +55], [55, 56], [56, 51], [51, 57], [57, 46], [46, 41], [41, 47], [47, \ +58], [58, 65], [65, 75], [75, 80], [80, 74], [74, 64], [64, 78], [78, \ +86], [86, 69], [69, 63], [63, 62], [62, 68], [68, 84], [84, 70], [70, \ +66], [66, 71], [71, 85], [85, 91], [91, 98], [98, 101], [101, 97], \ +[97, 90], [90, 99], [99, 104], [104, 105], [105, 100], [100, 106], \ +[106, 112], [112, 123], [123, 130], [130, 116], [116, 111], [111, \ +110], [110, 115], [115, 128], [128, 117], [117, 113], [113, 118], \ +[118, 129], [129, 135], [135, 142], [142, 145], [145, 141], [141, \ +134], [134, 143], [143, 148], [148, 149], [149, 144], [144, 150], \ +[150, 156], [156, 170], [170, 178], [178, 161], [161, 155], [155, \ +154], [154, 160], [160, 176], [176, 164], [164, 158], [158, 165], \ +[165, 177], [177, 184], [184, 193], [193, 197], [197, 192], [192, \ +183], [183, 194], [194, 200], [200, 201], [201, 195], [195, 202], \ +[202, 208], [208, 219], [219, 226], [226, 212], [212, 207], [207, \ +206], [206, 211], [211, 224], [224, 213], [213, 209], [209, 214], \ +[214, 225], [225, 231], [231, 235], [235, 237], [237, 234], [234, \ +230], [230, 236], [236, 238], [238, 233], [233, 229], [229, 228], \ +[228, 232], [232, 227], [227, 221], [221, 210], [210, 203], [203, \ +217], [217, 222], [222, 223], [223, 218], [218, 205], [205, 216], \ +[216, 220], [220, 215], [215, 204], [204, 198], [198, 188], [188, \ +185], [185, 189], [189, 199], [199, 187], [187, 182], [182, 181], \ +[181, 186], [186, 180], [180, 191], [191, 196], [196, 190], [190, \ +179], [179, 172], [172, 162], [162, 157], [157, 163], [163, 173], \ +[173, 159], [159, 151], [151, 168], [168, 174], [174, 175], [175, \ +169], [169, 153], [153, 167], [167, 171], [171, 166], [166, 152], \ +[152, 146], [146, 139], [139, 136], [136, 140], [140, 147], [147, \ +138], [138, 133], [133, 132], [132, 137], [137, 131], [131, 125], \ +[125, 114], [114, 107], [107, 121], [121, 126], [126, 127], [127, \ +122], [122, 109], [109, 120], [120, 124], [124, 119], [119, 108], \ +[108, 102], [102, 95], [95, 92], [92, 96], [96, 103], [103, 94], [94, \ +89], [89, 88], [88, 93], [93, 87], [87, 81], [81, 67], [67, 59], [59, \ +76], [76, 82], [82, 83], [83, 77], [77, 61], [61, 73], [73, 79], [79, \ +72], [72, 60], [60, 53], [53, 44], [44, 40], [40, 45], [45, 54], [54, \ +43], [43, 37], [37, 36], [36, 42], [42, 35], [35, 29], [29, 18], [18, \ +11], [11, 25], [25, 30], [30, 31], [31, 26], [26, 13], [13, 24], [24, \ +28], [28, 23], [23, 12], [12, 6], [6, 2], [2, 1]], \ +'outsideEdgeDegrees' : [72., 36., 120., 60., 90., 120., 60., 0., 30., \ +-60., -150., -120., -90., -60., -30., 144., 108., 72., 36., 0., -36., \ +-72., -108., -144., 30., 60., 90., 120., 60., 144., 108., 72., 36., \ +0., -36., -72., -108., -144., 30., -60., -150., -120., -90., -60., \ +-30., 144., 108., 72., 36., 0., -36., -72., -108., -144., 30., 60., \ +90., 120., 60., 0., 30., -60., -150., -120., -90., -60., -30., 144., \ +108., 72., 36., 0., -36., -72., -108., -144., 30., 60., 90., 120., \ +60., 0., 30., -60., -150., -120., -90., -60., -30., 144., 108., 72., \ +36., 0., -36., -72., -108., -144., 30., 60., 90., 120., 60., 0., 30., \ +-60., -150., -120., -90., -60., -30., 144., 108., 72., 36., 0., -36., \ +-72., -108., -144., 30., -60., -150., -120., -90., -60., -120., 180., \ +-150., 120., 30., 60., 90., 120., 150., -36., -72., -108., -144., \ +180., 144., 108., 72., 36., -150., -120., -90., -60., -120., -36., \ +-72., -108., -144., 180., 144., 108., 72., 36., -150., 120., 30., \ +60., 90., 120., 150., -36., -72., -108., -144., 180., 144., 108., \ +72., 36., -150., -120., -90., -60., -120., 180., -150., 120., 30., \ +60., 90., 120., 150., -36., -72., -108., -144., 180., 144., 108., \ +72., 36., -150., -120., -90., -60., -120., 180., -150., 120., 30., \ +60., 90., 120., 150., -36., -72., -108., -144., 180., 144., 108., \ +72., 36., -150., -120., -90., -60., -120., 180., -150., 120., 30., \ +60., 90., 120., 150., -36., -72., -108., -144., 180., 144., 108.], \ +'insideEdgeIndices' : [[7, 13], [8, 14], [9, 15], [13, 19], [16, 20], \ +[25, 29], [26, 32], [30, 36], [31, 37], [32, 38], [38, 43], [50, 54], \ +[54, 61], [55, 62], [56, 63], [57, 64], [61, 68], [64, 69], [76, 81], \ +[77, 84], [82, 88], [83, 89], [84, 90], [90, 94], [99, 103], [103, \ +109], [104, 110], [105, 111], [109, 115], [112, 116], [121, 125], \ +[122, 128], [126, 132], [127, 133], [128, 134], [134, 138], [143, \ +147], [147, 153], [148, 154], [149, 155], [153, 160], [156, 161], \ +[168, 173], [169, 176], [173, 180], [174, 181], [175, 182], [176, \ +183], [183, 187], [194, 199], [199, 205], [200, 206], [201, 207], \ +[205, 211], [208, 212], [217, 221], [218, 224], [222, 228], [223, \ +229], [224, 230], [230, 233]]}, 'GreatRhombicuboctahedron' : \ +{'edgeCoordinates' : [[0., 4.12132], [0., 5.12132], [0.707107, \ +2.41421], [0.707107, 3.41421], [0.707107, 5.82843], [0.707107, \ +6.82843], [1.70711, 2.41421], [1.70711, 3.41421], [1.70711, 5.82843], \ +[1.70711, 6.82843], [1.91421, 3.25529], [1.91421, 5.98735], [2.41421, \ +2.38927], [2.41421, 4.12132], [2.41421, 5.12132], [2.41421, 6.85337], \ +[3.41421, 0.707107], [3.41421, 1.70711], [3.41421, 2.38927], \ +[3.41421, 4.12132], [3.41421, 5.12132], [3.41421, 6.85337], [3.41421, \ +7.53553], [3.41421, 8.53553], [3.91421, 3.25529], [3.91421, 5.98735], \ +[4.12132, 0.], [4.12132, 2.41421], [4.12132, 3.41421], [4.12132, \ +5.82843], [4.12132, 6.82843], [4.12132, 9.24264], [5.12132, 0.], \ +[5.12132, 2.41421], [5.12132, 3.41421], [5.12132, 5.82843], [5.12132, \ +6.82843], [5.12132, 9.24264], [5.32843, 3.25529], [5.32843, 5.98735], \ +[5.82843, 0.707107], [5.82843, 1.70711], [5.82843, 2.38927], \ +[5.82843, 4.12132], [5.82843, 5.12132], [5.82843, 6.85337], [5.82843, \ +7.53553], [5.82843, 8.53553], [6.82843, 2.38927], [6.82843, 4.12132], \ +[6.82843, 5.12132], [6.82843, 6.85337], [7.32843, 3.25529], [7.32843, \ +5.98735], [7.53553, 2.41421], [7.53553, 3.41421], [7.53553, 5.82843], \ +[7.53553, 6.82843], [8.53553, 2.41421], [8.53553, 3.41421], [8.53553, \ +5.82843], [8.53553, 6.82843], [8.74264, 3.25529], [8.74264, 5.98735], \ +[9.24264, 2.38927], [9.24264, 4.12132], [9.24264, 5.12132], [9.24264, \ +6.85337], [10.2426, 2.38927], [10.2426, 4.12132], [10.2426, 5.12132], \ +[10.2426, 6.85337], [10.7426, 3.25529], [10.7426, 5.98735], [10.9497, \ +2.41421], [10.9497, 3.41421], [10.9497, 5.82843], [10.9497, 6.82843], \ +[11.9497, 2.41421], [11.9497, 3.41421], [11.9497, 5.82843], [11.9497, \ +6.82843], [12.1569, 3.25529], [12.1569, 5.98735], [12.6569, 2.38927], \ +[12.6569, 4.12132], [12.6569, 5.12132], [12.6569, 6.85337], [13.6569, \ +2.38927], [13.6569, 4.12132], [13.6569, 5.12132], [13.6569, 6.85337], \ +[14.1569, 3.25529], [14.1569, 5.98735]], 'outsideEdgeIndices' : [[1, \ +2], [2, 5], [5, 6], [6, 10], [10, 9], [9, 15], [15, 12], [12, 16], \ +[16, 22], [22, 26], [26, 21], [21, 30], [30, 31], [31, 23], [23, 24], \ +[24, 32], [32, 38], [38, 48], [48, 47], [47, 37], [37, 36], [36, 45], \ +[45, 40], [40, 46], [46, 52], [52, 54], [54, 51], [51, 57], [57, 58], \ +[58, 62], [62, 61], [61, 67], [67, 64], [64, 68], [68, 72], [72, 74], \ +[74, 71], [71, 77], [77, 78], [78, 82], [82, 81], [81, 87], [87, 84], \ +[84, 88], [88, 92], [92, 94], [94, 91], [91, 90], [90, 93], [93, 89], \ +[89, 85], [85, 83], [83, 86], [86, 80], [80, 79], [79, 75], [75, 76], \ +[76, 70], [70, 73], [73, 69], [69, 65], [65, 63], [63, 66], [66, 60], \ +[60, 59], [59, 55], [55, 56], [56, 50], [50, 53], [53, 49], [49, 43], \ +[43, 39], [39, 44], [44, 35], [35, 34], [34, 42], [42, 41], [41, 33], \ +[33, 27], [27, 17], [17, 18], [18, 28], [28, 29], [29, 20], [20, 25], \ +[25, 19], [19, 13], [13, 11], [11, 14], [14, 8], [8, 7], [7, 3], [3, \ +4], [4, 1]], 'outsideEdgeDegrees' : [90., 45., 90., 0., -90., -45., \ +120., 60., 0., -60., -120., 45., 90., 135., 90., 45., 0., -45., -90., \ +-135., -90., -45., 120., 60., 0., -60., -120., 45., 90., 0., -90., \ +-45., 120., 60., 0., -60., -120., 45., 90., 0., -90., -45., 120., \ +60., 0., -60., -120., -90., -60., -120., 180., 120., 60., -135., \ +-90., 180., 90., 135., -60., -120., 180., 120., 60., -135., -90., \ +180., 90., 135., -60., -120., 180., 120., 60., -135., -90., -45., \ +-90., -135., 180., 135., 90., 45., 90., 135., -60., -120., 180., \ +120., 60., -135., -90., 180., 90., 135.], 'insideEdgeIndices' : [[4, \ +8], [5, 9], [14, 15], [14, 20], [15, 21], [20, 21], [28, 34], [29, \ +35], [30, 36], [31, 37], [44, 45], [44, 50], [45, 51], [50, 51], [56, \ +60], [57, 61], [66, 67], [66, 70], [67, 71], [70, 71], [76, 80], [77, \ +81], [86, 87], [86, 90], [87, 91]]}, 'Icosidodecahedron' : \ +{'edgeCoordinates' : [[0., 2.20071], [0.379874, 3.36984], [0.587785, \ +1.39169], [0.78661, 4.28339], [0.994522, 2.30524], [1.12302, \ +2.70071], [1.33093, 0.722562], [1.3744, 5.0924], [1.78113, 4.17886], \ +[1.98904, 2.20071], [1.98904, 3.20071], [2.19696, 1.22256], [2.19696, \ +4.17886], [2.32545, 0.], [2.53336, 0.978148], [2.60369, 5.0924], \ +[2.9401, 1.89169], [2.9401, 3.50973], [3.27651, 0.309017], [3.52789, \ +2.70071], [3.59821, 4.98787], [3.80613, 4.00973], [3.93462, 1.78716], \ +[3.93462, 3.61426], [4.14253, 0.809017], [4.27103, 2.03158], \ +[4.54927, 4.67886], [4.92914, 3.50973], [5.13706, 1.53158], [5.13706, \ +2.53158], [5.54379, 1.61803], [5.7517, 4.42327], [5.8802, 3.20071], \ +[6.15844, 0.553432], [6.15844, 3.50973], [6.49485, 5.0924], [6.53831, \ +1.72256], [6.74623, 1.36245], [6.74623, 2.70071], [7.15296, \ +0.448903], [7.15296, 3.61426], [7.36087, 4.5924], [7.36087, 5.5924], \ +[7.48937, 2.03158], [7.74075, 4.42327], [8.14748, 0.553432], \ +[8.14748, 3.50973], [8.3554, 1.53158], [8.3554, 2.53158], [8.48389, \ +5.0924], [8.76213, 1.61803], [9.09854, 3.20071], [9.14201, 3.61426], \ +[9.34992, 0.809017], [9.34992, 4.5924], [9.75665, 1.72256], [9.96457, \ +2.70071], [10.0931, 3.92327]], 'outsideEdgeIndices' : [[1, 5], [5, \ +10], [10, 6], [6, 2], [2, 4], [4, 8], [8, 9], [9, 11], [11, 13], [13, \ +16], [16, 21], [21, 27], [27, 22], [22, 18], [18, 24], [24, 28], [28, \ +33], [33, 39], [39, 35], [35, 32], [32, 36], [36, 43], [43, 42], [42, \ +41], [41, 45], [45, 50], [50, 55], [55, 58], [58, 53], [53, 47], [47, \ +52], [52, 57], [57, 56], [56, 54], [54, 51], [51, 49], [49, 48], [48, \ +46], [46, 40], [40, 34], [34, 38], [38, 44], [44, 37], [37, 31], [31, \ +30], [30, 29], [29, 26], [26, 20], [20, 23], [23, 25], [25, 19], [19, \ +14], [14, 15], [15, 17], [17, 12], [12, 7], [7, 3], [3, 1]], \ +'outsideEdgeDegrees' : [6., -6., 150., 138., 66., 54., -66., -78., \ +78., 66., -6., -18., -138., -150., 6., -6., -18., -30., 126., 114., \ +42., 30., -90., -102., 54., 42., -30., -42., -162., -174., -18., \ +-30., -102., -114., 126., 114., -90., -102., -174., 174., 54., 42., \ +-162., -174., 114., -90., 150., 138., -66., -78., -150., -162., 78., \ +66., -138., -150., 138., 126.], 'insideEdgeIndices' : [[3, 5], [4, \ +9], [6, 11], [10, 11], [10, 12], [10, 17], [11, 18], [13, 18], [15, \ +19], [17, 20], [17, 23], [18, 20], [20, 24], [21, 22], [26, 30], [28, \ +30], [30, 33], [35, 41], [36, 42], [37, 39], [38, 40], [39, 41], [39, \ +44], [41, 47], [44, 48], [44, 49], [45, 47], [47, 49], [49, 52], [51, \ +56], [53, 55]]}, 'SmallRhombicosidodecahedron' : {'edgeCoordinates' : \ +[[0., 5.31473], [0.172816, 2.4487], [0.172816, 3.4487], [0.587785, \ +4.50571], [0.587785, 6.12374], [0.672816, 1.58268], [0.672816, \ +4.31473], [0.672816, 6.31473], [1.17282, 2.4487], [1.17282, 3.4487], \ +[1.17282, 7.18075], [1.53884, 1.08268], [1.53884, 4.81473], [1.53884, \ +5.81473], [2.03884, 1.9487], [2.03884, 3.9487], [2.03884, 6.68075], \ +[2.12387, 2.13968], [2.12387, 3.75772], [2.53884, 4.81473], [2.53884, \ +5.81473], [2.71166, 2.9487], [2.73205, 5.31473], [2.90487, 2.4487], \ +[2.90487, 3.4487], [3.31984, 4.50571], [3.31984, 6.12374], [3.40487, \ +1.58268], [3.40487, 4.31473], [3.40487, 6.31473], [3.90487, 2.4487], \ +[3.90487, 3.4487], [3.90487, 7.18075], [4.11278, 8.1589], [4.27089, \ +1.08268], [4.27089, 4.81473], [4.27089, 5.81473], [4.77089, 1.9487], \ +[4.77089, 3.9487], [4.77089, 6.68075], [4.85592, 2.13968], [4.85592, \ +3.75772], [5.1073, 8.26343], [5.27089, 4.81473], [5.27089, 5.81473], \ +[5.44371, 2.9487], [5.4641, 5.31473], [5.51404, 7.34988], [5.63692, \ +2.4487], [5.63692, 3.4487], [6.05189, 4.50571], [6.05189, 6.12374], \ +[6.13692, 1.58268], [6.13692, 4.31473], [6.13692, 6.31473], [6.63692, \ +2.4487], [6.63692, 3.4487], [6.63692, 7.18075], [7.00294, 1.08268], \ +[7.00294, 4.81473], [7.00294, 5.81473], [7.50294, 1.9487], [7.50294, \ +3.9487], [7.50294, 6.68075], [7.58797, 2.13968], [7.58797, 3.75772], \ +[8.00294, 4.81473], [8.00294, 5.81473], [8.17576, 2.9487], [8.19615, \ +5.31473], [8.36897, 2.4487], [8.36897, 3.4487], [8.78394, 4.50571], \ +[8.78394, 6.12374], [8.86897, 1.58268], [8.86897, 4.31473], [8.86897, \ +6.31473], [9.36897, 2.4487], [9.36897, 3.4487], [9.36897, 7.18075], \ +[9.73499, 1.08268], [9.73499, 4.81473], [9.73499, 5.81473], [10.235, \ +1.9487], [10.235, 3.9487], [10.235, 6.68075], [10.32, 2.13968], \ +[10.32, 3.75772], [10.735, 4.81473], [10.735, 5.81473], [10.8579, \ +0.913545], [10.9078, 2.9487], [10.9282, 5.31473], [11.101, 2.4487], \ +[11.101, 3.4487], [11.2646, 0.], [11.516, 4.50571], [11.516, \ +6.12374], [11.601, 1.58268], [11.601, 4.31473], [11.601, 6.31473], \ +[12.101, 2.4487], [12.101, 3.4487], [12.101, 7.18075], [12.2591, \ +0.104528], [12.467, 1.08268], [12.467, 4.81473], [12.467, 5.81473], \ +[12.967, 1.9487], [12.967, 3.9487], [12.967, 6.68075], [13.0521, \ +2.13968], [13.0521, 3.75772], [13.467, 4.81473], [13.467, 5.81473], \ +[13.6399, 2.9487], [13.8331, 3.4487], [14.3331, 4.31473]], \ +'outsideEdgeIndices' : [[1, 5], [5, 14], [14, 8], [8, 11], [11, 17], \ +[17, 21], [21, 20], [20, 29], [29, 36], [36, 26], [26, 23], [23, 27], \ +[27, 37], [37, 30], [30, 33], [33, 34], [34, 43], [43, 48], [48, 40], \ +[40, 45], [45, 44], [44, 54], [54, 60], [60, 51], [51, 47], [47, 52], \ +[52, 61], [61, 55], [55, 58], [58, 64], [64, 68], [68, 67], [67, 76], \ +[76, 82], [82, 73], [73, 70], [70, 74], [74, 83], [83, 77], [77, 80], \ +[80, 86], [86, 90], [90, 89], [89, 100], [100, 107], [107, 97], [97, \ +93], [93, 98], [98, 108], [108, 101], [101, 104], [104, 111], [111, \ +115], [115, 114], [114, 118], [118, 117], [117, 110], [110, 103], \ +[103, 113], [113, 116], [116, 112], [112, 102], [102, 109], [109, \ +106], [106, 105], [105, 96], [96, 91], [91, 99], [99, 94], [94, 95], \ +[95, 85], [85, 79], [79, 88], [88, 92], [92, 87], [87, 78], [78, 84], \ +[84, 81], [81, 75], [75, 71], [71, 72], [72, 63], [63, 57], [57, 66], \ +[66, 69], [69, 65], [65, 56], [56, 62], [62, 59], [59, 53], [53, 49], \ +[49, 50], [50, 39], [39, 32], [32, 42], [42, 46], [46, 41], [41, 31], \ +[31, 38], [38, 35], [35, 28], [28, 24], [24, 25], [25, 16], [16, 10], \ +[10, 19], [19, 22], [22, 18], [18, 9], [9, 15], [15, 12], [12, 6], \ +[6, 2], [2, 3], [3, 7], [7, 13], [13, 4], [4, 1]], \ +'outsideEdgeDegrees' : [54., -18., 150., 60., -30., -60., -90., -30., \ +30., -162., 126., 54., -18., 150., 60., 78., 6., -66., -138., -60., \ +-90., -30., 30., -162., 126., 54., -18., 150., 60., -30., -60., -90., \ +-30., 30., -162., 126., 54., -18., 150., 60., -30., -60., -90., -30., \ +30., -162., 126., 54., -18., 150., 60., -30., -60., -90., -30., \ +-120., 150., -150., 18., -54., -126., 162., -30., -120., -102., \ +-174., 114., 42., 120., 90., 150., -150., 18., -54., -126., 162., \ +-30., -120., 150., 120., 90., 150., -150., 18., -54., -126., 162., \ +-30., -120., 150., 120., 90., 150., -150., 18., -54., -126., 162., \ +-30., -120., 150., 120., 90., 150., -150., 18., -54., -126., 162., \ +-30., -120., 150., 120., 90., 60., 30., -162., 126.], \ +'insideEdgeIndices' : [[2, 9], [3, 10], [6, 9], [7, 10], [9, 10], \ +[13, 14], [13, 16], [13, 20], [14, 17], [14, 21], [16, 20], [24, 31], \ +[25, 29], [25, 32], [28, 31], [29, 32], [31, 32], [33, 40], [36, 37], \ +[36, 39], [36, 44], [37, 40], [37, 45], [39, 44], [49, 56], [50, 54], \ +[50, 57], [53, 56], [54, 57], [56, 57], [60, 61], [60, 63], [60, 67], \ +[61, 64], [61, 68], [63, 67], [71, 78], [72, 76], [72, 79], [75, 78], \ +[76, 79], [78, 79], [82, 83], [82, 85], [82, 89], [83, 86], [83, 90], \ +[85, 89], [94, 102], [95, 100], [95, 103], [99, 102], [99, 106], \ +[100, 103], [102, 103], [107, 108], [107, 110], [107, 114], [108, \ +111], [108, 115], [110, 114]]}, 'SmallRhombicuboctahedron' : \ +{'edgeCoordinates' : [[0., 1.], [0., 2.], [0., 3.], [0., 4.], [1., \ +1.], [1., 2.], [1., 3.], [1., 4.], [1.5, 1.13397], [1.5, 3.86603], \ +[2., 0.], [2., 1.], [2., 2.], [2., 3.], [2., 4.], [2., 5.], [3., 0.], \ +[3., 1.], [3., 2.], [3., 3.], [3., 4.], [3., 5.], [3.5, 1.13397], \ +[3.5, 3.86603], [4., 1.], [4., 2.], [4., 3.], [4., 4.], [5., 1.], \ +[5., 2.], [5., 3.], [5., 4.], [5.5, 1.13397], [5.5, 3.86603], [6., \ +1.], [6., 2.], [6., 3.], [6., 4.], [7., 1.], [7., 2.], [7., 3.], [7., \ +4.], [7.5, 1.13397], [7.5, 3.86603], [8., 2.], [8., 3.]], \ +'outsideEdgeIndices' : [[1, 2], [2, 3], [3, 4], [4, 8], [8, 7], [7, \ +10], [10, 14], [14, 15], [15, 16], [16, 22], [22, 21], [21, 20], [20, \ +24], [24, 27], [27, 28], [28, 32], [32, 31], [31, 34], [34, 37], [37, \ +38], [38, 42], [42, 41], [41, 44], [44, 46], [46, 45], [45, 43], [43, \ +40], [40, 39], [39, 35], [35, 36], [36, 33], [33, 30], [30, 29], [29, \ +25], [25, 26], [26, 23], [23, 19], [19, 18], [18, 17], [17, 11], [11, \ +12], [12, 13], [13, 9], [9, 6], [6, 5], [5, 1]], 'outsideEdgeDegrees' \ +: [90., 90., 90., 0., -90., 60., -60., 90., 90., 0., -90., -90., 60., \ +-60., 90., 0., -90., 60., -60., 90., 0., -90., 60., -60., -90., \ +-120., 120., -90., 180., 90., -120., 120., -90., 180., 90., -120., \ +120., -90., -90., 180., 90., 90., -120., 120., -90., 180.], \ +'insideEdgeIndices' : [[2, 6], [3, 7], [6, 7], [6, 13], [7, 14], [12, \ +18], [13, 14], [13, 19], [14, 20], [15, 21], [19, 20], [19, 26], [20, \ +27], [26, 27], [26, 30], [27, 31], [30, 31], [30, 36], [31, 37], [36, \ +37], [36, 40], [37, 41], [40, 41], [40, 45], [41, 46]]}, 'SnubCube' : \ +{'edgeCoordinates' : [[0., 2.23205], [0., 3.23205], [0.866025, \ +1.73205], [0.866025, 2.73205], [1.36603, 0.866025], [1.36603, \ +3.59808], [1.86603, 1.73205], [1.86603, 2.73205], [1.86603, 3.73205], \ +[2.73205, 1.23205], [2.73205, 2.23205], [2.73205, 3.23205], [3.23205, \ +1.36603], [3.23205, 4.09808], [3.23205, 5.09808], [3.73205, 2.23205], \ +[3.73205, 3.23205], [3.73205, 4.23205], [4.09808, 4.59808], [4.09808, \ +5.59808], [4.23205, 1.36603], [4.59808, 1.73205], [4.59808, 2.73205], \ +[4.59808, 3.73205], [4.59808, 6.4641], [5.09808, 0.866025], [5.09808, \ +1.86603], [5.09808, 4.59808], [5.09808, 5.59808], [5.59808, 0.], \ +[5.59808, 2.73205], [5.59808, 3.73205], [5.59808, 4.73205], [5.9641, \ +5.09808], [6.09808, 0.866025], [6.09808, 1.86603], [6.4641, 2.23205], \ +[6.4641, 3.23205], [6.4641, 4.23205], [6.9641, 1.36603], [6.9641, \ +2.36603], [6.9641, 5.09808], [7.4641, 3.23205], [7.4641, 4.23205], \ +[8.33013, 2.73205], [8.33013, 3.73205]], 'outsideEdgeIndices' : [[1, \ +2], [2, 4], [4, 6], [6, 8], [8, 9], [9, 12], [12, 14], [14, 17], [17, \ +18], [18, 24], [24, 19], [19, 15], [15, 20], [20, 25], [25, 29], [29, \ +34], [34, 28], [28, 32], [32, 33], [33, 39], [39, 42], [42, 44], [44, \ +46], [46, 45], [45, 43], [43, 41], [41, 38], [38, 37], [37, 31], [31, \ +36], [36, 40], [40, 35], [35, 30], [30, 26], [26, 21], [21, 27], [27, \ +23], [23, 22], [22, 16], [16, 13], [13, 11], [11, 10], [10, 7], [7, \ +5], [5, 3], [3, 1]], 'outsideEdgeDegrees' : [90., -30., 60., -60., \ +90., -30., 60., -60., 90., -30., 120., 150., 30., 60., -60., -30., \ +-150., -60., 90., -30., 60., -60., -30., -90., 150., -120., 120., \ +-90., 150., -60., -30., -150., -120., 120., 150., 30., 120., -90., \ +150., -120., 120., -90., 150., -120., 120., 150.], \ +'insideEdgeIndices' : [[1, 4], [3, 4], [3, 7], [4, 8], [7, 8], [7, \ +11], [8, 11], [8, 12], [11, 12], [11, 16], [12, 17], [16, 17], [16, \ +23], [17, 23], [17, 24], [19, 20], [19, 28], [20, 29], [23, 24], [23, \ +31], [24, 28], [24, 32], [26, 27], [26, 35], [27, 31], [27, 36], [28, \ +29], [31, 32], [31, 38], [32, 38], [32, 39], [35, 36], [38, 39], [38, \ +43], [39, 44], [43, 44], [43, 46]]}, 'SnubDodecahedron' : \ +{'edgeCoordinates' : [[0., 8.41355], [0.406737, 7.5], [0.743145, \ +9.08268], [1.40126, 7.60453], [1.60917, 8.58268], [1.60917, 9.58268], \ +[2.4752, 7.08268], [2.4752, 8.08268], [2.4752, 9.08268], [2.4752, \ +10.0827], [2.4752, 11.0827], [2.59808, 8.91355], [3.00481, 8.], \ +[3.34122, 6.58268], [3.34122, 7.58268], [3.34122, 9.58268], [3.34122, \ +10.5827], [3.54913, 11.5608], [3.99933, 8.10453], [4.20725, 5.08268], \ +[4.20725, 6.08268], [4.20725, 7.08268], [4.20725, 8.08268], [4.20725, \ +9.08268], [4.20725, 10.0827], [4.33013, 6.91355], [4.54365, 11.6654], \ +[4.73686, 6.], [4.95039, 10.7518], [5.07327, 4.58268], [5.07327, \ +5.58268], [5.07327, 7.58268], [5.07327, 8.58268], [5.07327, 9.58268], \ +[5.07327, 10.5827], [5.07327, 11.5827], [5.28118, 9.56082], [5.73139, \ +6.10453], [5.9393, 3.08268], [5.9393, 4.08268], [5.9393, 5.08268], \ +[5.9393, 6.08268], [5.9393, 7.08268], [5.9393, 8.08268], [5.9393, \ +10.0827], [5.9393, 11.0827], [6.06218, 4.91355], [6.27571, 9.66535], \ +[6.46891, 4.], [6.68244, 8.75181], [6.80532, 2.58268], [6.80532, \ +3.58268], [6.80532, 5.58268], [6.80532, 6.58268], [6.80532, 7.58268], \ +[6.80532, 8.58268], [6.80532, 9.58268], [6.80532, 10.5827], [7.01323, \ +7.56082], [7.46344, 4.10453], [7.67135, 1.08268], [7.67135, 2.08268], \ +[7.67135, 3.08268], [7.67135, 4.08268], [7.67135, 5.08268], [7.67135, \ +6.08268], [7.67135, 8.08268], [7.67135, 9.08268], [7.79423, 2.91355], \ +[8.00776, 7.66535], [8.20097, 2.], [8.41449, 6.75181], [8.53737, \ +0.582676], [8.53737, 1.58268], [8.53737, 3.58268], [8.53737, \ +4.58268], [8.53737, 5.58268], [8.53737, 6.58268], [8.53737, 7.58268], \ +[8.53737, 8.58268], [8.74529, 5.56082], [9.19549, 2.10453], [9.4034, \ +0.0826761], [9.4034, 1.08268], [9.4034, 2.08268], [9.4034, 3.08268], \ +[9.4034, 4.08268], [9.4034, 6.08268], [9.4034, 7.08268], [9.52628, \ +0.913545], [9.73981, 5.66535], [9.93302, 0.], [10.1465, 4.75181], \ +[10.2694, 1.58268], [10.2694, 2.58268], [10.2694, 3.58268], [10.2694, \ +4.58268], [10.2694, 5.58268], [10.2694, 6.58268], [10.4773, 3.56082], \ +[10.9275, 0.104528], [11.1354, 1.08268], [11.1354, 2.08268], \ +[11.1354, 4.08268], [11.1354, 5.08268], [11.4719, 3.66535], [11.8786, \ +2.75181], [12.0015, 0.582676], [12.0015, 1.58268], [12.0015, \ +2.58268], [12.0015, 3.58268], [12.0015, 4.58268], [12.8675, 2.08268], \ +[12.8675, 3.08268], [13.0754, 4.06082], [13.7335, 2.58268], [14.0699, \ +4.16535], [14.4767, 3.25181]], 'outsideEdgeIndices' : [[1, 3], [3, \ +6], [6, 10], [10, 11], [11, 17], [17, 18], [18, 27], [27, 29], [29, \ +25], [25, 35], [35, 36], [36, 46], [46, 58], [58, 45], [45, 34], [34, \ +33], [33, 37], [37, 48], [48, 50], [50, 44], [44, 56], [56, 57], [57, \ +68], [68, 80], [80, 67], [67, 55], [55, 54], [54, 59], [59, 70], [70, \ +72], [72, 66], [66, 78], [78, 79], [79, 89], [89, 99], [99, 88], [88, \ +77], [77, 76], [76, 81], [81, 91], [91, 93], [93, 87], [87, 97], [97, \ +98], [98, 105], [105, 112], [112, 104], [104, 96], [96, 95], [95, \ +100], [100, 106], [106, 107], [107, 103], [103, 110], [110, 111], \ +[111, 114], [114, 115], [115, 117], [117, 118], [118, 116], [116, \ +113], [113, 109], [109, 108], [108, 102], [102, 101], [101, 92], [92, \ +90], [90, 94], [94, 84], [84, 83], [83, 73], [73, 61], [61, 74], [74, \ +85], [85, 86], [86, 82], [82, 71], [71, 69], [69, 75], [75, 63], [63, \ +62], [62, 51], [51, 39], [39, 52], [52, 64], [64, 65], [65, 60], [60, \ +49], [49, 47], [47, 53], [53, 41], [41, 40], [40, 30], [30, 20], [20, \ +31], [31, 42], [42, 43], [43, 38], [38, 28], [28, 26], [26, 32], [32, \ +22], [22, 21], [21, 14], [14, 7], [7, 15], [15, 23], [23, 24], [24, \ +19], [19, 13], [13, 12], [12, 16], [16, 9], [9, 8], [8, 5], [5, 4], \ +[4, 2], [2, 1]], 'outsideEdgeDegrees' : [42., 30., 30., 90., -30., \ +78., 6., -66., -138., 30., 90., -30., -30., -150., -150., -90., 78., \ +6., -66., -138., 30., 90., -30., -30., -150., -150., -90., 78., 6., \ +-66., -138., 30., 90., -30., -30., -150., -150., -90., 78., 6., -66., \ +-138., 30., 90., -30., -30., -150., -150., -90., 78., 6., -66., \ +-138., 30., 90., -30., 78., 6., -66., -138., -150., -150., -90., \ +150., -102., -174., 114., 42., -150., -90., 150., 150., 30., 30., \ +90., -102., -174., 114., 42., -150., -90., 150., 150., 30., 30., 90., \ +-102., -174., 114., 42., -150., -90., 150., 150., 30., 30., 90., \ +-102., -174., 114., 42., -150., -90., 150., 150., 30., 30., 90., \ +-102., -174., 114., 42., -150., -90., 150., -102., -174., 114.], \ +'insideEdgeIndices' : [[3, 5], [5, 6], [5, 9], [6, 9], [9, 10], [10, \ +16], [10, 17], [14, 15], [14, 22], [15, 22], [16, 17], [16, 24], [16, \ +25], [17, 25], [22, 23], [23, 32], [23, 33], [24, 25], [24, 33], [24, \ +34], [25, 34], [30, 31], [30, 41], [31, 41], [32, 33], [32, 43], [32, \ +44], [33, 44], [34, 35], [35, 45], [35, 46], [41, 42], [42, 53], [42, \ +54], [43, 44], [43, 54], [43, 55], [44, 55], [45, 46], [51, 52], [51, \ +63], [52, 63], [53, 54], [53, 65], [53, 66], [54, 66], [55, 56], [56, \ +67], [56, 68], [63, 64], [64, 75], [64, 76], [65, 66], [65, 76], [65, \ +77], [66, 77], [67, 68], [73, 74], [73, 84], [74, 84], [75, 76], [75, \ +86], [75, 87], [76, 87], [77, 78], [78, 88], [78, 89], [84, 85], [85, \ +94], [85, 95], [86, 87], [86, 95], [86, 96], [87, 96], [88, 89], [94, \ +95], [94, 102], [94, 103], [95, 103], [96, 97], [97, 104], [97, 105], \ +[102, 103], [102, 109], [103, 109], [104, 105], [109, 110], [110, \ +113], [110, 114], [113, 114], [114, 116]]}, 'TruncatedCube' : \ +{'edgeCoordinates' : [[0., 3.12132], [0., 4.12132], [0.707107, \ +2.41421], [0.707107, 4.82843], [1.70711, 2.41421], [1.70711, \ +4.82843], [2.15539, 2.15539], [2.15539, 5.08725], [2.41421, \ +0.707107], [2.41421, 1.70711], [2.41421, 3.12132], [2.41421, \ +4.12132], [2.41421, 5.53553], [2.41421, 6.53553], [3.12132, 0.], \ +[3.12132, 2.41421], [3.12132, 4.82843], [3.12132, 7.24264], [4.12132, \ +0.], [4.12132, 2.41421], [4.12132, 4.82843], [4.12132, 7.24264], \ +[4.82843, 0.707107], [4.82843, 1.70711], [4.82843, 3.12132], \ +[4.82843, 4.12132], [4.82843, 5.53553], [4.82843, 6.53553], [5.08725, \ +2.15539], [5.08725, 5.08725], [5.53553, 2.41421], [5.53553, 4.82843], \ +[6.53553, 2.41421], [6.53553, 4.82843], [7.24264, 3.12132], [7.24264, \ +4.12132], [7.50146, 2.15539], [7.50146, 5.08725], [7.94975, 2.41421], \ +[7.94975, 4.82843], [8.94975, 2.41421], [8.94975, 4.82843], [9.65685, \ +3.12132], [9.65685, 4.12132], [9.91567, 2.15539], [9.91567, \ +5.08725]], 'outsideEdgeIndices' : [[1, 2], [2, 4], [4, 6], [6, 12], \ +[12, 8], [8, 17], [17, 13], [13, 14], [14, 18], [18, 22], [22, 28], \ +[28, 27], [27, 21], [21, 30], [30, 26], [26, 32], [32, 34], [34, 38], \ +[38, 36], [36, 40], [40, 42], [42, 46], [46, 44], [44, 43], [43, 45], \ +[45, 41], [41, 39], [39, 35], [35, 37], [37, 33], [33, 31], [31, 25], \ +[25, 29], [29, 20], [20, 24], [24, 23], [23, 19], [19, 15], [15, 9], \ +[9, 10], [10, 16], [16, 7], [7, 11], [11, 5], [5, 3], [3, 1]], \ +'outsideEdgeDegrees' : [90., 45., 0., -45., 105., -15., 135., 90., \ +45., 0., -45., -90., -135., 15., -105., 45., 0., 15., -105., 45., 0., \ +15., -105., -90., -75., 165., 180., 135., -75., 165., 180., 135., \ +-75., 165., -45., -90., -135., 180., 135., 90., 45., -165., 75., \ +-135., 180., 135.], 'insideEdgeIndices' : [[11, 12], [11, 16], [12, \ +17], [16, 20], [17, 21], [20, 25], [21, 26], [25, 26], [33, 35], [34, \ +36], [35, 36], [41, 43], [42, 44]]}, 'TruncatedDodecahedron' : \ +{'edgeCoordinates' : [[10.5902, 0.], [11.5902, 0.], [9.78115, \ +0.587785], [12.3992, 0.587785], [13.3773, 0.795697], [8.16312, \ +1.2606], [9.47214, 1.53884], [12.7082, 1.53884], [7.66312, 2.12663], \ +[8.66312, 2.12663], [13.5172, 2.12663], [14.5172, 2.12663], [9.78115, \ +2.4899], [12.3992, 2.4899], [9.67662, 2.67095], [12.5037, 2.67095], \ +[6.8541, 2.71441], [9.47214, 2.71441], [12.7082, 2.71441], [15.3262, \ +2.71441], [10.5902, 3.07768], [11.5902, 3.07768], [6.54508, 3.66547], \ +[9.78115, 3.66547], [12.3992, 3.66547], [15.6353, 3.66547], [6.8541, \ +4.61653], [9.47214, 4.61653], [12.7082, 4.61653], [15.3262, 4.61653], \ +[7.66312, 5.20431], [8.66312, 5.20431], [13.5172, 5.20431], [14.5172, \ +5.20431], [8.80301, 5.35967], [13.3773, 5.35967], [8.78115, 5.56758], \ +[9.78115, 5.56758], [12.3992, 5.56758], [13.3992, 5.56758], [15.4308, \ +5.61105], [4.14961, 6.1119], [7.97214, 6.15537], [10.5902, 6.15537], \ +[11.5902, 6.15537], [14.2082, 6.15537], [6.99399, 6.36328], [2.23607, \ +6.51864], [3.23607, 6.51864], [5.8541, 6.51864], [6.8541, 6.51864], \ +[11.0902, 7.02139], [1.42705, 7.10642], [4.04508, 7.10642], [5.04508, \ +7.10642], [7.66312, 7.10642], [10.8992, 7.10642], [11.2812, 7.10642], \ +[14.5172, 7.10642], [1.11803, 8.05748], [4.3541, 8.05748], [4.73607, \ +8.05748], [7.97214, 8.05748], [10.5902, 8.05748], [11.5902, 8.05748], \ +[14.2082, 8.05748], [4.54508, 8.14251], [8.78115, 8.64527], [9.78115, \ +8.64527], [12.3992, 8.64527], [13.3992, 8.64527], [8.64127, 8.80062], \ +[1.42705, 9.00854], [4.04508, 9.00854], [5.04508, 9.00854], [7.66312, \ +9.00854], [11.4856, 9.052], [0.204489, 9.55286], [2.23607, 9.59632], \ +[3.23607, 9.59632], [5.8541, 9.59632], [6.8541, 9.59632], [2.25792, \ +9.80423], [6.83225, 9.80423], [1.11803, 9.95959], [2.11803, 9.95959], \ +[6.97214, 9.95959], [7.97214, 9.95959], [0.309017, 10.5474], \ +[2.92705, 10.5474], [6.16312, 10.5474], [8.78115, 10.5474], [0., \ +11.4984], [3.23607, 11.4984], [5.8541, 11.4984], [9.09017, 11.4984], \ +[4.04508, 12.0862], [5.04508, 12.0862], [0.309017, 12.4495], \ +[2.92705, 12.4495], [6.16312, 12.4495], [8.78115, 12.4495], [3.13154, \ +12.493], [5.95863, 12.493], [3.23607, 12.674], [5.8541, 12.674], \ +[1.11803, 13.0373], [2.11803, 13.0373], [6.97214, 13.0373], [7.97214, \ +13.0373], [2.92705, 13.6251], [6.16312, 13.6251], [7.47214, 13.9033], \ +[2.25792, 14.3682], [3.23607, 14.5761], [5.8541, 14.5761], [4.04508, \ +15.1639], [5.04508, 15.1639]], 'outsideEdgeIndices' : [[93, 99], [99, \ +107], [107, 108], [108, 100], [100, 94], [94, 103], [103, 97], [97, \ +105], [105, 111], [111, 114], [114, 115], [115, 117], [117, 118], \ +[118, 116], [116, 112], [112, 106], [106, 98], [98, 104], [104, 95], \ +[95, 101], [101, 109], [109, 113], [113, 110], [110, 102], [102, 96], \ +[96, 92], [92, 88], [88, 87], [87, 91], [91, 84], [84, 81], [81, 82], \ +[82, 76], [76, 72], [72, 63], [63, 68], [68, 69], [69, 64], [64, 57], \ +[57, 44], [44, 52], [52, 45], [45, 58], [58, 65], [65, 77], [77, 70], \ +[70, 71], [71, 66], [66, 59], [59, 46], [46, 40], [40, 39], [39, 36], \ +[36, 29], [29, 33], [33, 34], [34, 41], [41, 30], [30, 26], [26, 20], \ +[20, 12], [12, 11], [11, 19], [19, 25], [25, 16], [16, 22], [22, 14], \ +[14, 8], [8, 5], [5, 4], [4, 2], [2, 1], [1, 3], [3, 7], [7, 13], \ +[13, 21], [21, 15], [15, 24], [24, 18], [18, 10], [10, 6], [6, 9], \ +[9, 17], [17, 23], [23, 27], [27, 31], [31, 32], [32, 28], [28, 35], \ +[35, 38], [38, 37], [37, 43], [43, 47], [47, 56], [56, 51], [51, 50], \ +[50, 55], [55, 62], [62, 75], [75, 67], [67, 74], [74, 61], [61, 54], \ +[54, 42], [42, 49], [49, 48], [48, 53], [53, 60], [60, 73], [73, 79], \ +[79, 80], [80, 83], [83, 90], [90, 86], [86, 85], [85, 78], [78, 89], \ +[89, 93]], 'outsideEdgeDegrees' : [72., 36., 0., -36., -72., 96., \ +-24., 144., 108., 132., 12., 36., 0., -36., -72., -108., -144., 24., \ +-96., 72., 36., 60., -60., -36., -72., -108., -144., 180., 144., \ +-48., -168., 0., -36., -12., -132., 36., 0., -36., -72., -108., 60., \ +-60., 108., 72., 96., -24., 0., -36., -72., -108., -144., 180., -12., \ +-132., 36., 0., 24., -96., -72., -108., -144., 180., 144., 108., \ +-84., 156., -36., -72., -48., -168., -144., 180., 144., 108., 72., \ +36., -156., 84., -108., -144., -120., 120., 144., 108., 72., 36., 0., \ +-36., 132., 12., 180., 144., 168., 48., -144., 180., 144., 108., 72., \ +-120., 120., -72., -108., -84., 156., 180., 144., 108., 72., 36., 0., \ +168., 48., -144., 180., -156., 84., 108.], 'insideEdgeIndices' : [[4, \ +8], [9, 10], [21, 22], [21, 24], [22, 25], [24, 28], [25, 29], [28, \ +38], [29, 39], [30, 34], [38, 44], [39, 45], [43, 56], [44, 45], [49, \ +54], [56, 63], [63, 76], [65, 70], [74, 75], [74, 80], [75, 81], [80, \ +90], [81, 91], [85, 89], [90, 94], [91, 95], [94, 97], [95, 98], [97, \ +98], [109, 110], [111, 115]]}, 'TruncatedIcosahedron' : \ +{'edgeCoordinates' : [[2.5, 0.], [1.69098, 0.587785], [3.30902, \ +0.587785], [2., 1.53884], [3., 1.53884], [5., 1.53884], [6., \ +1.53884], [8., 1.53884], [9., 1.53884], [11., 1.53884], [12., \ +1.53884], [14., 1.53884], [15., 1.53884], [1.5, 2.40487], [3.5, \ +2.40487], [4.5, 2.40487], [6.5, 2.40487], [7.5, 2.40487], [9.5, \ +2.40487], [10.5, 2.40487], [12.5, 2.40487], [13.5, 2.40487], [15.5, \ +2.40487], [1., 2.59808], [4., 2.59808], [7., 2.59808], [10., \ +2.59808], [13., 2.59808], [0.190983, 3.18586], [1.80902, 3.18586], \ +[3.19098, 3.18586], [4.80902, 3.18586], [6.19098, 3.18586], [7.80902, \ +3.18586], [9.19098, 3.18586], [10.809, 3.18586], [12.191, 3.18586], \ +[13.809, 3.18586], [2., 3.27089], [3., 3.27089], [5., 3.27089], [6., \ +3.27089], [8., 3.27089], [9., 3.27089], [11., 3.27089], [12., \ +3.27089], [14., 3.27089], [15., 3.27089], [0.5, 4.13692], [1.5, \ +4.13692], [3.5, 4.13692], [4.5, 4.13692], [6.5, 4.13692], [7.5, \ +4.13692], [9.5, 4.13692], [10.5, 4.13692], [12.5, 4.13692], [13.5, \ +4.13692], [15.5, 4.13692], [0., 5.00294], [2., 5.00294], [3., \ +5.00294], [5., 5.00294], [6., 5.00294], [8., 5.00294], [9., 5.00294], \ +[11., 5.00294], [12., 5.00294], [14., 5.00294], [15., 5.00294], [0.5, \ +5.86897], [1.5, 5.86897], [3.5, 5.86897], [4.5, 5.86897], [6.5, \ +5.86897], [7.5, 5.86897], [9.5, 5.86897], [10.5, 5.86897], [12.5, \ +5.86897], [13.5, 5.86897], [1.69098, 5.954], [3.30902, 5.954], \ +[4.69098, 5.954], [6.30902, 5.954], [7.69098, 5.954], [9.30902, \ +5.954], [10.691, 5.954], [12.309, 5.954], [13.691, 5.954], [15.309, \ +5.954], [2.5, 6.54179], [5.5, 6.54179], [8.5, 6.54179], [11.5, \ +6.54179], [14.5, 6.54179], [0., 6.73499], [2., 6.73499], [3., \ +6.73499], [5., 6.73499], [6., 6.73499], [8., 6.73499], [9., 6.73499], \ +[11., 6.73499], [12., 6.73499], [14., 6.73499], [0.5, 7.60102], [1.5, \ +7.60102], [3.5, 7.60102], [4.5, 7.60102], [6.5, 7.60102], [7.5, \ +7.60102], [9.5, 7.60102], [10.5, 7.60102], [12.5, 7.60102], [13.5, \ +7.60102], [3.19098, 8.55208], [4.80902, 8.55208], [4., 9.13986]], \ +'outsideEdgeIndices' : [[60, 71], [71, 96], [96, 106], [106, 107], \ +[107, 97], [97, 72], [72, 61], [61, 81], [81, 91], [91, 82], [82, \ +62], [62, 73], [73, 98], [98, 108], [108, 116], [116, 118], [118, \ +117], [117, 109], [109, 99], [99, 74], [74, 63], [63, 83], [83, 92], \ +[92, 84], [84, 64], [64, 75], [75, 100], [100, 110], [110, 111], \ +[111, 101], [101, 76], [76, 65], [65, 85], [85, 93], [93, 86], [86, \ +66], [66, 77], [77, 102], [102, 112], [112, 113], [113, 103], [103, \ +78], [78, 67], [67, 87], [87, 94], [94, 88], [88, 68], [68, 79], [79, \ +104], [104, 114], [114, 115], [115, 105], [105, 80], [80, 69], [69, \ +89], [89, 95], [95, 90], [90, 70], [70, 59], [59, 48], [48, 23], [23, \ +13], [13, 12], [12, 22], [22, 47], [47, 58], [58, 38], [38, 28], [28, \ +37], [37, 57], [57, 46], [46, 21], [21, 11], [11, 10], [10, 20], [20, \ +45], [45, 56], [56, 36], [36, 27], [27, 35], [35, 55], [55, 44], [44, \ +19], [19, 9], [9, 8], [8, 18], [18, 43], [43, 54], [54, 34], [34, \ +26], [26, 33], [33, 53], [53, 42], [42, 17], [17, 7], [7, 6], [6, \ +16], [16, 41], [41, 52], [52, 32], [32, 25], [25, 31], [31, 51], [51, \ +40], [40, 15], [15, 5], [5, 3], [3, 1], [1, 2], [2, 4], [4, 14], [14, \ +39], [39, 50], [50, 30], [30, 24], [24, 29], [29, 49], [49, 60]], \ +'outsideEdgeDegrees' : [60., 120., 60., 0., -60., -120., -60., 108., \ +36., -36., -108., 60., 120., 60., 108., 36., -36., -108., -60., \ +-120., -60., 108., 36., -36., -108., 60., 120., 60., 0., -60., -120., \ +-60., 108., 36., -36., -108., 60., 120., 60., 0., -60., -120., -60., \ +108., 36., -36., -108., 60., 120., 60., 0., -60., -120., -60., 108., \ +36., -36., -108., -60., -120., -60., -120., 180., 120., 60., 120., \ +-72., -144., 144., 72., -120., -60., -120., 180., 120., 60., 120., \ +-72., -144., 144., 72., -120., -60., -120., 180., 120., 60., 120., \ +-72., -144., 144., 72., -120., -60., -120., 180., 120., 60., 120., \ +-72., -144., 144., 72., -120., -60., -120., -72., -144., 144., 72., \ +120., 60., 120., -72., -144., 144., 72., 120.], 'insideEdgeIndices' : \ +[[4, 5], [39, 40], [41, 42], [43, 44], [45, 46], [47, 48], [49, 50], \ +[50, 61], [51, 52], [51, 62], [52, 63], [53, 54], [53, 64], [54, 65], \ +[55, 56], [55, 66], [56, 67], [57, 58], [57, 68], [58, 69], [61, 62], \ +[63, 64], [65, 66], [67, 68], [69, 70], [71, 72], [73, 74], [75, 76], \ +[77, 78], [79, 80], [108, 109]]}, 'TruncatedOctahedron' : \ +{'edgeCoordinates' : [[0., 2.59808], [0.5, 1.73205], [0.5, 3.4641], \ +[0.5, 4.4641], [1.5, 1.73205], [1.5, 3.4641], [1.5, 4.4641], [2., \ +1.59808], [2., 2.59808], [2., 4.33013], [3., 0.866025], [3., \ +1.59808], [3., 2.59808], [3., 4.33013], [3.5, 0.], [3.5, 1.73205], \ +[3.5, 3.4641], [3.5, 4.4641], [4.5, 0.], [4.5, 1.73205], [4.5, \ +3.4641], [4.5, 4.4641], [4.5, 5.19615], [5., 0.866025], [5., \ +1.59808], [5., 2.59808], [5., 4.33013], [5., 6.06218], [6., 1.59808], \ +[6., 2.59808], [6., 4.33013], [6., 6.06218], [6.5, 1.73205], [6.5, \ +3.4641], [6.5, 4.4641], [6.5, 5.19615], [7.5, 1.73205], [7.5, \ +3.4641], [7.5, 4.4641], [8., 1.59808], [8., 2.59808], [8., 4.33013], \ +[9., 1.59808], [9., 2.59808], [9., 4.33013], [9.5, 3.4641]], \ +'outsideEdgeIndices' : [[1, 3], [3, 4], [4, 7], [7, 6], [6, 10], [10, \ +14], [14, 17], [17, 18], [18, 22], [22, 21], [21, 27], [27, 23], [23, \ +28], [28, 32], [32, 36], [36, 31], [31, 34], [34, 35], [35, 39], [39, \ +38], [38, 42], [42, 45], [45, 46], [46, 44], [44, 43], [43, 40], [40, \ +41], [41, 37], [37, 33], [33, 30], [30, 29], [29, 25], [25, 26], [26, \ +20], [20, 24], [24, 19], [19, 15], [15, 11], [11, 16], [16, 13], [13, \ +12], [12, 8], [8, 9], [9, 5], [5, 2], [2, 1]], 'outsideEdgeDegrees' : \ +[60., 90., 0., -90., 60., 0., -60., 90., 0., -90., 60., 120., 60., \ +0., -60., -120., -60., 90., 0., -90., 60., 0., -60., -120., -90., \ +180., 90., -120., 180., 120., -90., 180., 90., -120., -60., -120., \ +180., 120., 60., 120., -90., 180., 90., -120., 180., 120.], \ +'insideEdgeIndices' : [[3, 6], [6, 9], [9, 13], [13, 17], [16, 20], \ +[17, 21], [21, 26], [26, 30], [27, 31], [30, 34], [34, 38], [38, 41], \ +[41, 44]]}, 'TruncatedTetrahedron' : {'edgeCoordinates' : [[0., \ +1.73205], [0.5, 0.866025], [0.5, 2.59808], [1., 0.], [1.5, 0.866025], \ +[1.5, 2.59808], [2., 0.], [2., 1.73205], [2.5, 2.59808], [3., 0.], \ +[3., 1.73205], [3.5, 0.866025], [3.5, 2.59808], [4., 0.], [4.5, \ +0.866025], [4.5, 2.59808], [5., 0.], [5., 1.73205], [5.5, 2.59808], \ +[6., 0.], [6., 1.73205], [6.5, 0.866025]], 'outsideEdgeIndices' : \ +[[1, 3], [3, 6], [6, 8], [8, 9], [9, 11], [11, 13], [13, 16], [16, \ +18], [18, 19], [19, 21], [21, 22], [22, 20], [20, 17], [17, 15], [15, \ +14], [14, 12], [12, 10], [10, 7], [7, 5], [5, 4], [4, 2], [2, 1]], \ +'outsideEdgeDegrees' : [60., 0., -60., 60., -60., 60., 0., -60., 60., \ +-60., -60., -120., 180., 120., -120., 120., -120., 180., 120., -120., \ +120., 120.], 'insideEdgeIndices' : [[2, 5], [5, 8], [8, 11], [11, \ +12], [12, 15], [15, 18], [18, 21]]}, 'DeltoidalHexecontahedron' : \ +{'edgeCoordinates' : [[0., 5.24151], [0.24835, 4.27284], [0.597438, \ +3.33575], [0.735523, 5.91901], [1.44482, 2.13209], [1.53837, \ +6.51519], [1.5881, 3.1994], [1.69317, 1.16342], [1.71721, 4.73332], \ +[2.04226, 0.226332], [2.14857, 3.25565], [2.18034, 2.80959], \ +[2.33226, 7.75479], [2.44369, 6.09045], [2.58061, 6.78612], [2.84461, \ +6.28852], [2.98319, 3.40577], [3.03292, 0.0899751], [3.06779, \ +8.43229], [3.09238, 3.58615], [3.16203, 1.6239], [3.24828, 4.57393], \ +[3.29918, 5.57263], [3.50745, 5.53976], [3.87064, 9.02847], [3.88851, \ +2.98103], [4.03243, 0.0588187], [4.04947, 7.24659], [4.48084, \ +5.76892], [4.53325, 0.924372], [4.6931, 1.46451], [4.744, 2.46321], \ +[4.75401, 4.25401], [4.77595, 8.60372], [4.8697, 2.29393], [5.04412, \ +5.76577], [5.11805, 1.32526], [5.42464, 6.09943], [5.46714, \ +0.388167], [5.58054, 7.0872], [5.60522, 2.97143], [5.63144, 8.0859], \ +[6.01488, 5.52573], [6.26323, 4.55706], [6.40807, 3.56761], [6.4578, \ +0.25181], [6.58691, 1.78573], [6.61232, 3.61997], [6.75041, 6.20323], \ +[7.24269, 6.47701], [7.31339, 3.14286], [7.45731, 0.220653], \ +[7.60298, 3.48362], [7.73209, 5.01754], [7.75298, 2.79065], [7.95813, \ +1.08621], [8.20626, 6.74445], [8.36491, 1.99973], [8.60249, 3.45246], \ +[8.79511, 3.36669], [8.89816, 6.02245], [9.10331, 4.31801], [9.48701, \ +2.6447], [9.51009, 5.23154], [10.2512, 1.99967], [10.5073, 5.30593], \ +[10.519, 7.9539], [10.5406, 3.76695], [10.9049, 7.03133], [11.1488, \ +8.73065], [11.1812, 2.3672], [11.2381, 6.57715], [11.5068, 5.27478], \ +[11.5803, 1.36702], [11.6419, 2.69135], [11.857, 9.43668], [11.8855, \ +4.93896], [11.8885, 2.31834], [11.9528, 4.37971], [12.0022, 5.93212], \ +[12.2722, 0.645027], [12.2917, 7.6994], [12.2953, 3.23187], [12.3019, \ +3.44262], [12.8142, 9.14734], [12.9322, 6.29966], [13.0364, 0.], \ +[13.2925, 3.30626], [13.3258, 1.76728], [13.4216, 4.84018], [13.7356, \ +8.75869], [13.8183, 6.76319], [13.8297, 7.76313], [13.8958, 6.5671], \ +[13.9664, 0.367534], [14.204, 7.51842], [14.292, 3.27511], [14.4846, \ +3.18934], [14.4985, 7.99861], [14.5877, 5.8451], [14.738, 2.38004], \ +[14.7928, 4.14066], [14.8525, 0.831067], [14.8639, 1.831], [15.1765, \ +2.46734], [15.1996, 5.05419], [15.2067, 8.70463], [15.3519, 5.20008], \ +[15.6413, 6.96736], [15.9407, 1.82232], [16.1639, 8.41529], [16.1969, \ +5.12858], [16.2302, 3.5896], [16.2819, 5.56761], [16.7527, 5.03753], \ +[16.8707, 2.18985], [17.0853, 8.02664], [17.1679, 6.03114], [17.1793, \ +7.03108], [17.6741, 4.64888], [17.7568, 2.65338], [17.7682, \ +3.65332]], 'outsideEdgeIndices' : [[1, 4], [4, 6], [6, 14], [14, 23], \ +[23, 22], [22, 24], [24, 16], [16, 28], [28, 15], [15, 13], [13, 19], \ +[19, 25], [25, 34], [34, 42], [42, 40], [40, 38], [38, 29], [29, 33], \ +[33, 36], [36, 43], [43, 49], [49, 54], [54, 50], [50, 57], [57, 61], \ +[61, 64], [64, 66], [66, 73], [73, 79], [79, 90], [90, 77], [77, 80], \ +[80, 72], [72, 82], [82, 69], [69, 67], [67, 70], [70, 76], [76, 85], \ +[85, 91], [91, 93], [93, 92], [92, 86], [86, 94], [94, 96], [96, \ +109], [109, 99], [99, 107], [107, 111], [111, 117], [117, 119], [119, \ +118], [118, 114], [114, 108], [108, 100], [100, 106], [106, 112], \ +[112, 113], [113, 115], [115, 120], [120, 122], [122, 121], [121, \ +116], [116, 110], [110, 105], [105, 98], [98, 102], [102, 97], [97, \ +101], [101, 89], [89, 104], [104, 103], [103, 95], [95, 87], [87, \ +81], [81, 74], [74, 78], [78, 83], [83, 88], [88, 84], [84, 75], [75, \ +68], [68, 71], [71, 65], [65, 63], [63, 60], [60, 62], [62, 59], [59, \ +53], [53, 48], [48, 44], [44, 45], [45, 51], [51, 47], [47, 55], [55, \ +58], [58, 56], [56, 52], [52, 46], [46, 39], [39, 37], [37, 35], [35, \ +41], [41, 32], [32, 31], [31, 21], [21, 30], [30, 27], [27, 18], [18, \ +10], [10, 8], [8, 5], [5, 12], [12, 17], [17, 26], [26, 20], [20, \ +11], [11, 9], [9, 7], [7, 3], [3, 2], [2, 1]], 'outsideEdgeDegrees' : \ +[42.6486, 36.5969, -25.1345, -31.1861, -92.9175, 74.9792, 131.517, \ +38.4907, -162.594, 104.38, 42.6486, 36.5969, -25.1345, -31.1861, \ +-92.9175, -98.9692, -160.7, -79.778, 79.137, -13.8888, 42.6486, \ +-50.3773, 108.538, 15.5119, -46.2194, -52.2711, 4.26627, -1.78542, \ +-63.5167, 17.4057, 176.321, 83.2949, 139.832, 46.8064, -154.278, \ +112.696, 50.9643, 44.9126, -16.8187, -22.8704, -84.6017, -90.6534, \ +-152.385, 15.5119, 72.0493, -20.9766, 137.938, 44.9126, -16.8187, \ +-22.8704, -84.6017, -90.6534, -152.385, -158.436, 139.832, -52.2711, \ +4.26627, -88.7596, 70.1555, -22.8704, -84.6017, -90.6534, -152.385, \ +-158.436, 139.832, 133.781, 72.0493, -120.054, -63.5167, -156.543, \ +2.37247, -90.6534, -152.385, -158.436, 139.832, 133.781, 72.0493, \ +65.9976, 4.26627, 172.163, -131.3, 135.674, -65.4105, -158.436, \ +139.832, 133.781, 72.0493, -120.054, 178.215, 172.163, 110.432, \ +-81.6718, -25.1345, -118.16, 40.7548, -52.2711, -114.002, -120.054, \ +178.215, 172.163, 110.432, 104.38, 42.6486, -149.455, -92.9175, \ +174.057, -27.0283, -120.054, 178.215, 172.163, 110.432, 104.38, \ +42.6486, 36.5969, -25.1345, 142.762, -160.7, 106.274, -94.8113, \ +172.163, 110.432, 104.38], 'insideEdgeIndices' : [[2, 9], [4, 9], [8, \ +21], [9, 14], [9, 22], [12, 21], [18, 21], [19, 28], [20, 22], [21, \ +26], [22, 33], [24, 29], [26, 32], [26, 33], [28, 29], [28, 34], [28, \ +40], [33, 41], [33, 44], [37, 47], [41, 45], [41, 47], [43, 44], [44, \ +54], [46, 47], [47, 56], [53, 54], [54, 61], [54, 62], [62, 64], [62, \ +68], [63, 68], [66, 68], [68, 79], [70, 82], [78, 89], [79, 84], [80, \ +86], [81, 89], [82, 85], [82, 86], [82, 93], [86, 90], [88, 89], [88, \ +90], [88, 97], [89, 95], [90, 100], [90, 102], [94, 100], [100, 109], \ +[102, 106], [102, 113], [105, 113], [109, 111], [109, 114], [109, \ +119], [113, 116], [113, 122]]}, 'DeltoidalIcositetrahedron' : \ +{'edgeCoordinates' : [[0., 2.83078], [0.0111126, 3.07792], [0.289775, \ +1.57078], [0.412803, 4.30683], [0.753236, 0.982143], [0.927224, \ +4.85149], [0.996875, 2.90978], [1.49376, 2.04196], [1.56964, 3.7295], \ +[1.91007, 0.404813], [2.1312, 5.32267], [2.15291, 0.357629], \ +[2.22076, 1.35532], [2.35533, 4.34811], [2.3773, 5.34787], [2.50958, \ +2.84176], [3.15199, 1.71976], [3.2501, 3.90157], [3.44177, 0.459757], \ +[3.65179, 5.13048], [3.71356, 3.31293], [3.93769, 2.33837], [4.09193, \ +0.832016], [4.83245, 1.89183], [4.91469, 2.12514], [4.96458, \ +1.88284], [5.00241, 3.41506], [5.5548, 0.732533], [5.91156, 2.20414], \ +[6.14858, 0.275679], [6.26557, 3.13938], [6.57284, 4.93183], \ +[6.60628, 1.48485], [6.80446, 3.65985], [7.39468, 2.50954], [7.41174, \ +0.], [7.47959, 0.997696], [7.65874, 0.0138732], [7.75144, 3.98115], \ +[7.86502, 4.97467], [8.10544, 4.91639], [8.29286, 1.57958], [8.44615, \ +3.26186], [8.88308, 0.42927], [8.90266, 2.37214], [9.23455, 4.28655], \ +[9.42197, 0.949744], [9.67049, 3.67725], [9.87966, 2.15891], \ +[9.90211, 2.40528]], 'outsideEdgeIndices' : [[1, 7], [7, 2], [2, 4], \ +[4, 9], [9, 6], [6, 11], [11, 14], [14, 15], [15, 20], [20, 18], [18, \ +16], [16, 21], [21, 27], [27, 31], [31, 35], [35, 34], [34, 32], [32, \ +40], [40, 39], [39, 41], [41, 46], [46, 43], [43, 48], [48, 50], [50, \ +45], [45, 49], [49, 47], [47, 42], [42, 44], [44, 38], [38, 37], [37, \ +36], [36, 30], [30, 33], [33, 28], [28, 26], [26, 29], [29, 25], [25, \ +22], [22, 24], [24, 23], [23, 17], [17, 19], [19, 12], [12, 13], [13, \ +10], [10, 5], [5, 8], [8, 3], [3, 1]], 'outsideEdgeDegrees' : \ +[4.53063, 170.32, 71.8991, -26.522, 119.794, 21.3727, -77.0483, \ +88.7412, -9.67985, -108.101, -124.943, 21.3727, 4.53063, -12.3115, \ +-29.1536, 117.162, 100.32, 1.89899, -96.5221, 69.2675, -29.1536, \ +-127.575, 18.7411, -79.68, -178.101, -12.3115, -110.733, 150.846, \ +-62.8378, -161.259, 100.32, -93.8904, 167.689, 69.2675, -144.417, \ +117.162, 18.7411, -175.469, 167.689, -26.522, -124.943, 136.636, \ +-77.0483, -175.469, 86.1096, -108.101, 153.478, 55.057, -158.627, \ +102.952], 'insideEdgeIndices' : [[7, 8], [7, 9], [8, 13], [8, 16], \ +[9, 14], [9, 16], [13, 17], [14, 18], [16, 17], [17, 22], [21, 22], \ +[25, 27], [29, 31], [29, 33], [33, 35], [33, 37], [34, 39], [35, 42], \ +[35, 43], [37, 42], [39, 43], [42, 45], [43, 45]]}, \ +'DisdyakisDodecahedron' : {'edgeCoordinates' : [[0., 2.57676], \ +[0.085127, 2.06871], [0.191077, 3.90076], [0.314609, 4.13055], \ +[0.697332, 0.879308], [0.88902, 0.702332], [0.995539, 2.48241], \ +[1.31356, 5.02024], [1.42548, 3.38527], [1.69629, 1.769], [1.78429, \ +5.22948], [1.9414, 4.2419], [2.12342, 0.186845], [2.46326, 1.12733], \ +[2.60372, 2.75187], [2.63664, 0.142471], [2.923, 4.05092], [3.11408, \ +5.37491], [3.32899, 1.62784], [3.8732, 3.17364], [3.9412, 0.438438], \ +[4.14179, 2.21038], [4.16042, 0.579887], [4.96769, 1.64656], \ +[5.13875, 2.13246], [5.17776, 3.4696], [5.2812, 1.63741], [6.02492, \ +0.525498], [6.13856, 2.15213], [6.23552, 0.37151], [6.46284, \ +3.09809], [6.91602, 1.5232], [7.349, 5.25137], [7.46257, 3.91849], \ +[7.5206, 0.], [7.70558, 2.60304], [7.7511, 0.973074], [8.03554, \ +0.0143809], [8.45363, 4.05193], [8.55417, 1.56895], [8.66804, \ +5.02867], [8.91874, 3.16668], [9.12577, 4.79235], [9.29532, 2.24029], \ +[9.29789, 0.457034], [9.49957, 0.622536], [10.0712, 3.84594], \ +[10.1801, 1.77422], [10.1811, 3.60933], [10.2947, 2.27646]], \ +'outsideEdgeIndices' : [[1, 3], [3, 9], [9, 4], [4, 8], [8, 12], [12, \ +11], [11, 18], [18, 17], [17, 15], [15, 20], [20, 26], [26, 31], [31, \ +36], [36, 34], [34, 33], [33, 41], [41, 39], [39, 43], [43, 47], [47, \ +42], [42, 49], [49, 50], [50, 44], [44, 48], [48, 46], [46, 40], [40, \ +45], [45, 38], [38, 37], [37, 35], [35, 30], [30, 32], [32, 28], [28, \ +27], [27, 29], [29, 25], [25, 22], [22, 24], [24, 23], [23, 19], [19, \ +21], [21, 16], [16, 14], [14, 13], [13, 6], [6, 10], [10, 5], [5, 2], \ +[2, 7], [7, 1]], 'outsideEdgeDegrees' : [81.7878, -22.6655, 146.142, \ +41.689, -51.109, 99.0392, 6.24114, -98.2122, -103.808, 18.3785, \ +12.7824, -16.1242, -21.7203, 100.466, 94.8703, -9.58298, -102.381, \ +47.7672, -45.0309, -149.484, 19.3237, -85.1297, -177.928, -27.7795, \ +-120.578, 134.969, -56.223, -160.676, 106.526, -103.326, 163.876, \ +59.4224, -131.77, 123.777, 30.9789, -178.873, 175.531, -34.3208, \ +-127.119, 128.428, -62.7643, -167.218, 99.9844, -109.867, 157.335, \ +52.8812, -138.311, 117.236, 24.4377, 174.586], 'insideEdgeIndices' : \ +[[3, 7], [4, 12], [5, 7], [6, 14], [7, 9], [7, 10], [7, 15], [9, 12], \ +[9, 15], [10, 14], [10, 15], [12, 15], [12, 17], [12, 18], [14, 15], \ +[14, 19], [14, 21], [15, 19], [15, 22], [19, 22], [20, 22], [22, 23], \ +[22, 26], [25, 26], [26, 29], [28, 29], [29, 31], [29, 32], [29, 36], \ +[30, 37], [32, 36], [32, 37], [33, 39], [34, 39], [36, 37], [36, 39], \ +[36, 40], [36, 42], [36, 44], [37, 40], [37, 45], [39, 42], [39, 47], \ +[40, 44], [42, 44], [44, 46], [44, 49]]}, 'DisdyakisTriacontahedron' \ +: {'edgeCoordinates' : [[0., 5.2298], [0.104202, 6.22435], [0.243333, \ +7.21463], [0.600263, 1.88276], [0.704465, 2.87731], [0.843596, \ +3.86759], [0.843794, 4.69313], [1.19178, 7.53157], [1.44406, \ +1.34609], [1.66335, 6.03321], [1.70595, 4.18648], [1.79204, 4.18453], \ +[2.15079, 7.81495], [2.26361, 2.68617], [2.30621, 0.839446], \ +[2.68608, 4.49496], [2.75105, 4.46791], [2.79812, 7.16203], [2.83199, \ +7.08285], [2.90232, 8.15658], [3.04145, 9.14686], [3.10267, 5.40405], \ +[3.14409, 1.38531], [3.43225, 3.73582], [3.48473, 6.39758], [3.48701, \ +6.32724], [3.89546, 1.04331], [3.96224, 1.96031], [3.9899, 9.4638], \ +[3.99966, 2.03787], [4.08727, 2.98021], [4.13879, 3.02814], [4.46147, \ +7.96544], [4.48473, 6.39479], [4.56323, 4.82593], [4.73925, \ +0.506645], [4.9489, 9.74718], [5.08724, 3.34509], [5.4842, 6.42719], \ +[5.55881, 1.84672], [5.60141, 0.], [5.63011, 9.01508], [5.90079, \ +7.33628], [6.02394, 3.69521], [6.04624, 3.62846], [6.12814, 4.68976], \ +[6.19729, 5.68737], [6.26727, 5.68004], [6.28513, 8.25947], [6.43928, \ +0.545861], [6.86773, 3.15854], [6.92284, 3.09236], [7.10748, \ +2.10956], [7.11821, 6.25599], [7.25743, 1.12087], [7.68729, 4.49862], \ +[7.72989, 2.6519], [8.08927, 6.01713], [8.56776, 3.19776], [9.05132, \ +5.74426], [9.23596, 4.76145], [9.38592, 3.77276], [9.45508, 3.78575], \ +[9.84873, 6.34769], [10.4261, 3.5469], [10.6669, 6.9227], [10.6898, \ +2.76459], [10.7744, 5.07862], [10.8744, 1.78178], [11.0935, \ +0.806084], [11.405, 3.34236], [11.4872, 3.36802], [11.5463, 6.4467], \ +[12.0646, 0.56723], [12.2351, 3.94789], [12.3053, 3.94303], [12.3393, \ +4.94245], [12.4085, 5.94006], [12.4129, 2.09895], [12.7445, 7.54828], \ +[13.0434, 0.36269], [13.0806, 8.4901], [13.1848, 3.46703], [13.2168, \ +6.57443], [13.2312, 6.64331], [13.4497, 9.41951], [13.6629, 1.1477], \ +[13.9081, 4.86143], [14.0469, 2.96039], [14.0804, 3.02227], [14.2023, \ +6.40445], [14.2544, 1.95402], [14.2651, 2.03947], [14.4462, 9.50352], \ +[14.4842, 1.06377], [14.5506, 7.93617], [14.8779, 3.62571], [15.1811, \ +6.19991], [15.2498, 6.21533], [15.4344, 5.23253], [15.445, 9.55242], \ +[15.4553, 0.824915], [15.6535, 4.25683], [15.696, 4.20071], [15.8006, \ +6.98492], [15.8036, 2.35663], [15.872, 7.03303], [15.934, 8.68017], \ +[16.3921, 7.79125], [16.4341, 0.620376], [16.6246, 4.01797], [16.698, \ +3.97288], [16.8685, 7.11704], [16.9729, 5.54969], [17.0536, 1.40539], \ +[17.187, 3.10063], [17.6034, 3.81343], [17.6451, 2.21171], [17.8673, \ +7.16594], [18.2229, 4.59844], [18.3563, 6.29369], [18.8144, \ +5.40477]], 'outsideEdgeIndices' : [[1, 2], [2, 3], [3, 8], [8, 13], \ +[13, 19], [19, 26], [26, 34], [34, 25], [25, 33], [33, 18], [18, 20], \ +[20, 21], [21, 29], [29, 37], [37, 42], [42, 49], [49, 43], [43, 39], \ +[39, 35], [35, 47], [47, 46], [46, 48], [48, 56], [56, 54], [54, 58], \ +[58, 60], [60, 64], [64, 66], [66, 73], [73, 78], [78, 88], [88, 84], \ +[84, 91], [91, 85], [85, 96], [96, 80], [80, 82], [82, 86], [86, 94], \ +[94, 101], [101, 108], [108, 109], [109, 105], [105, 98], [98, 100], \ +[100, 99], [99, 114], [114, 107], [107, 113], [113, 119], [119, 121], \ +[121, 122], [122, 120], [120, 117], [117, 111], [111, 103], [103, \ +97], [97, 104], [104, 106], [106, 112], [112, 116], [116, 118], [118, \ +115], [115, 110], [110, 102], [102, 95], [95, 93], [93, 90], [90, \ +83], [83, 89], [89, 79], [79, 92], [92, 87], [87, 81], [81, 74], [74, \ +70], [70, 69], [69, 67], [67, 72], [72, 76], [76, 77], [77, 75], [75, \ +68], [68, 71], [71, 65], [65, 63], [63, 61], [61, 62], [62, 59], [59, \ +57], [57, 51], [51, 44], [44, 38], [38, 45], [45, 40], [40, 52], [52, \ +53], [53, 55], [55, 50], [50, 41], [41, 36], [36, 27], [27, 30], [30, \ +32], [32, 24], [24, 31], [31, 14], [14, 28], [28, 23], [23, 15], [15, \ +9], [9, 4], [4, 5], [5, 6], [6, 12], [12, 17], [17, 22], [22, 16], \ +[16, 10], [10, 11], [11, 7], [7, 1]], 'outsideEdgeDegrees' : \ +[84.0188, 82.0024, 18.4783, 16.4619, -47.0623, -49.0787, 3.87299, \ +179.84, 58.0781, -154.219, 84.0188, 82.0024, 18.4783, 16.4619, \ +-47.0623, -49.0787, -112.603, -114.619, -119.905, 27.7973, -93.9648, \ +82.0024, -39.7597, 107.943, -13.819, -15.8353, 37.1163, 35.0999, \ +-28.4242, -30.4406, -35.7269, 111.976, -9.78616, 166.181, 44.419, \ +-167.878, 70.3597, 68.3433, 4.81911, 2.80272, -60.7214, -62.7378, \ +-126.262, -128.278, -75.3267, 100.64, -21.1216, 126.581, 4.81911, \ +2.80272, -60.7214, -62.7378, -126.262, -128.278, 168.197, 166.181, \ +-140.867, 35.0999, -86.6621, 61.0406, -60.7214, -62.7378, -126.262, \ +-128.278, 168.197, 166.181, 102.657, 100.64, 153.592, -30.4406, \ +-152.203, -4.49992, -126.262, -128.278, 168.197, 166.181, 102.657, \ +100.64, 37.1163, 35.0999, 88.0516, -95.9812, 142.257, -70.0405, \ +168.197, 166.181, 102.657, -81.3759, -144.9, -146.916, 149.559, \ +147.543, -159.505, 16.4619, -105.3, 42.4026, -79.3595, -81.3759, \ +-144.9, -146.916, 149.559, 147.543, 84.0188, 82.0024, 134.954, \ +-49.0787, -170.841, -23.138, -144.9, -146.916, 149.559, 147.543, \ +84.0188, 82.0024, 18.4783, 16.4619, 69.4135, -114.619, 123.619, \ +-88.6785, 149.559, 147.543], 'insideEdgeIndices' : [[1, 10], [2, 10], \ +[3, 10], [4, 14], [5, 14], [6, 14], [7, 10], [8, 10], [9, 14], [10, \ +13], [10, 19], [10, 22], [10, 26], [12, 14], [14, 15], [14, 17], [14, \ +23], [14, 24], [17, 24], [17, 35], [20, 33], [21, 33], [22, 26], [22, \ +35], [24, 35], [26, 35], [27, 40], [29, 33], [30, 40], [32, 35], [32, \ +38], [32, 40], [33, 34], [33, 37], [33, 39], [33, 42], [33, 43], [33, \ +49], [34, 35], [34, 39], [35, 38], [35, 44], [35, 46], [36, 40], [38, \ +40], [40, 41], [40, 50], [40, 53], [40, 55], [44, 46], [44, 56], [46, \ +56], [51, 56], [56, 57], [56, 58], [56, 59], [56, 60], [56, 61], [56, \ +62], [60, 61], [60, 68], [61, 68], [63, 68], [64, 68], [65, 68], [66, \ +68], [67, 79], [68, 73], [68, 77], [68, 78], [69, 79], [70, 79], [72, \ +79], [74, 79], [76, 79], [76, 83], [76, 88], [77, 78], [77, 88], [79, \ +81], [79, 83], [79, 87], [82, 96], [83, 88], [86, 96], [88, 90], [88, \ +91], [88, 97], [88, 98], [88, 100], [88, 103], [90, 97], [90, 106], \ +[91, 96], [91, 98], [93, 106], [94, 96], [95, 106], [96, 98], [96, \ +101], [96, 105], [96, 108], [96, 109], [97, 106], [100, 103], [100, \ +114], [102, 106], [103, 114], [106, 110], [106, 115], [106, 116], \ +[106, 118], [111, 114], [113, 114], [114, 117], [114, 119], [114, \ +120], [114, 121], [114, 122]]}, 'PentagonalHexecontahedron' : \ +{'edgeCoordinates' : [[0., 3.61618], [0.169343, 8.16626], [0.173198, \ +5.37131], [0.342541, 9.92139], [0.470873, 2.73398], [0.555895, \ +4.44744], [0.640216, 7.28406], [0.725238, 8.99751], [0.807422, \ +6.14446], [0.976765, 10.6945], [1.47087, 2.73319], [1.64022, \ +7.28326], [1.78829, 5.94978], [1.95763, 10.4999], [2.02544, 1.90105], \ +[2.19479, 6.45112], [2.29729, 4.27559], [2.46663, 8.82567], [2.47478, \ +6.01642], [2.66415, 11.2075], [3.02076, 1.99767], [3.19011, 6.54774], \ +[3.39989, 6.39612], [3.40493, 2.92093], [3.57428, 7.47101], [3.59775, \ +7.37635], [3.62139, 10.9182], [3.81769, 9.9377], [3.97312, 4.77916], \ +[4.06955, 4.76454], [4.13738, 1.71513], [4.14246, 9.32923], [4.17098, \ +5.75939], [4.38611, 3.11405], [4.43658, 9.75451], [4.55545, 7.66412], \ +[4.60825, 0.832933], [4.60978, 11.5096], [4.67851, 4.07034], \ +[4.69327, 2.54639], [4.84786, 8.62042], [4.89495, 3.20596], [4.89899, \ +4.20595], [4.90746, 8.87231], [4.99248, 10.5858], [5.244, 12.2828], \ +[5.60825, 0.832137], [5.78272, 4.67396], [5.78979, 6.4238], [5.82903, \ +8.81353], [5.90746, 8.87151], [6.16282, 0.], [6.22487, 12.0881], \ +[6.43467, 2.37454], [6.46203, 8.03937], [6.61216, 4.11537], [6.66263, \ +4.19883], [6.73387, 10.4139], [6.93139, 12.7958], [7.15814, \ +0.0966189], [7.40317, 5.74632], [7.45735, 8.13599], [7.49656, \ +4.75069], [7.53727, 4.49507], [7.53964, 6.42241], [7.54231, 1.01988], \ +[7.84152, 9.05926], [7.88863, 12.5065], [8.01192, 7.30386], [8.08493, \ +11.526], [8.1105, 2.87811], [8.2371, 6.29819], [8.24115, 7.29818], \ +[8.27895, 9.59251], [8.30836, 3.85834], [8.41857, 4.36353], [8.52349, \ +1.213], [8.81589, 2.16929], [8.9504, 3.92436], [9.00944, 11.1448], \ +[9.10929, 10.1498], [9.12487, 7.76619], [9.50498, 3.09223], [9.77682, \ +5.46677], [9.95431, 7.2076], [10.5003, 3.18885], [10.8794, 7.58729], \ +[10.8845, 4.11211], [10.9451, 7.65938], [11.2375, 8.61567], [11.4527, \ +5.97033], [11.6505, 6.95056], [11.8656, 4.30522], [12.158, 5.26152], \ +[12.2187, 8.80879], [12.2237, 5.3336], [12.6029, 9.73205], [13.1488, \ +5.7133], [13.3263, 7.45413], [13.5982, 9.82867], [13.9783, 5.15471], \ +[13.9939, 2.77112], [14.0937, 1.77611], [14.1528, 8.99653], [14.2873, \ +10.7516], [14.5797, 11.7079], [14.6846, 8.55737], [14.7948, 9.06256], \ +[14.8242, 3.32838], [14.862, 5.62272], [14.8661, 6.62271], [14.9927, \ +10.0428], [15.0182, 1.39494], [15.0912, 5.61704], [15.2145, 0.4144], \ +[15.2616, 3.86164], [15.5609, 11.901], [15.5635, 6.49849], [15.5659, \ +8.42583], [15.6066, 8.1702], [15.6458, 4.7849], [15.7, 7.17458], \ +[15.945, 12.8243], [16.1718, 0.1251], [16.3693, 2.50698], [16.4405, \ +8.72207], [16.491, 8.80553], [16.6411, 4.88152], [16.6685, 10.5464], \ +[16.8783, 0.832791], [16.9403, 12.9209], [17.1957, 4.04939], \ +[17.2741, 4.10736], [17.3134, 6.4971], [17.3204, 8.24694], [17.4949, \ +12.0888], [17.8592, 0.638114], [18.1107, 2.33514], [18.1957, \ +4.04859], [18.2042, 8.71494], [18.2082, 9.71493], [18.2553, 4.30048], \ +[18.4099, 10.3745], [18.4246, 8.85056], [18.4934, 1.41126], [18.4949, \ +12.088], [18.5477, 5.25677], [18.6666, 3.16639], [18.7171, 9.80685], \ +[18.9322, 7.16151], [18.9607, 3.59166], [18.9658, 11.2058], [19.0336, \ +8.15635], [19.13, 8.14174], [19.2855, 2.98319], [19.4818, 2.00265], \ +[19.5054, 5.54455], [19.5289, 5.44989], [19.6982, 9.99997], [19.7033, \ +6.52478], [19.9131, 6.37315], [20.0824, 10.9232], [20.439, 1.71335], \ +[20.6284, 6.90448], [20.6365, 4.09523], [20.8059, 8.6453], [20.9084, \ +6.46977], [21.0777, 11.0198], [21.1455, 2.42104], [21.3149, 6.97112], \ +[21.4629, 5.63764], [21.6323, 10.1877], [22.1264, 2.22636], [22.2957, \ +6.77644], [22.3779, 3.92339], [22.4629, 5.63684], [22.5473, 8.47346], \ +[22.6323, 10.1869], [22.7606, 2.99951], [22.93, 7.54959], [22.9338, \ +4.75464], [23.1032, 9.30471]], 'outsideEdgeIndices' : [[1, 6], [6, \ +3], [3, 9], [9, 13], [13, 17], [17, 19], [19, 23], [23, 26], [26, \ +36], [36, 25], [25, 22], [22, 16], [16, 12], [12, 7], [7, 2], [2, 8], \ +[8, 4], [4, 10], [10, 14], [14, 20], [20, 27], [27, 28], [28, 18], \ +[18, 32], [32, 41], [41, 50], [50, 55], [55, 51], [51, 44], [44, 35], \ +[35, 45], [45, 38], [38, 46], [46, 53], [53, 59], [59, 68], [68, 70], \ +[70, 80], [80, 81], [81, 74], [74, 58], [58, 67], [67, 62], [62, 69], \ +[69, 65], [65, 49], [49, 61], [61, 72], [72, 73], [73, 82], [82, 85], \ +[85, 87], [87, 92], [92, 89], [89, 90], [90, 95], [95, 97], [97, \ +100], [100, 104], [104, 99], [99, 107], [107, 120], [120, 126], [126, \ +135], [135, 127], [127, 119], [119, 108], [108, 112], [112, 105], \ +[105, 106], [106, 117], [117, 123], [123, 131], [131, 136], [136, \ +146], [146, 152], [152, 143], [143, 129], [129, 141], [141, 140], \ +[140, 153], [153, 150], [150, 154], [154, 144], [144, 149], [149, \ +159], [159, 162], [162, 168], [168, 172], [172, 178], [178, 182], \ +[182, 177], [177, 180], [180, 174], [174, 170], [170, 166], [166, \ +164], [164, 160], [160, 157], [157, 147], [147, 158], [158, 161], \ +[161, 167], [167, 171], [171, 176], [176, 181], [181, 175], [175, \ +179], [179, 173], [173, 169], [169, 163], [163, 156], [156, 155], \ +[155, 165], [165, 151], [151, 142], [142, 133], [133, 128], [128, \ +132], [132, 139], [139, 148], [148, 138], [138, 145], [145, 137], \ +[137, 130], [130, 124], [124, 115], [115, 113], [113, 103], [103, \ +102], [102, 109], [109, 125], [125, 116], [116, 121], [121, 114], \ +[114, 118], [118, 134], [134, 122], [122, 111], [111, 110], [110, \ +101], [101, 98], [98, 96], [96, 91], [91, 94], [94, 93], [93, 88], \ +[88, 86], [86, 83], [83, 79], [79, 84], [84, 76], [76, 63], [63, 57], \ +[57, 48], [48, 56], [56, 64], [64, 75], [75, 71], [71, 78], [78, 77], \ +[77, 66], [66, 60], [60, 52], [52, 47], [47, 37], [37, 31], [31, 40], \ +[40, 54], [54, 42], [42, 43], [43, 30], [30, 33], [33, 29], [29, 39], \ +[39, 34], [34, 24], [24, 21], [21, 15], [15, 11], [11, 5], [5, 1]], \ +'outsideEdgeDegrees' : [56.2276, 112.501, 50.6375, -11.2259, \ +-73.0893, 84.1783, 22.3149, 78.5881, 16.7248, -168.865, -112.592, \ +-174.455, 123.681, 179.954, 118.091, 56.2276, 112.501, 50.6375, \ +-11.2259, 45.0474, -16.816, -78.6794, -140.543, 16.7248, -45.1386, \ +11.1346, -50.7287, 123.681, 179.954, 118.091, 56.2276, 112.501, \ +50.6375, -11.2259, 45.0474, -16.816, -78.6794, -22.4062, -84.2695, \ +-146.133, 152.004, -50.7287, -112.592, -56.3189, -118.182, 179.954, \ +-22.7781, 33.4952, 89.7684, 27.905, -33.9583, 22.3149, -39.5485, \ +134.861, 72.998, 11.1346, 67.4079, 5.54451, -56.3189, -118.182, \ +39.0853, -22.7781, 33.4952, -28.3682, 146.042, -157.685, 140.452, \ +78.5881, 134.861, 72.998, 11.1346, 67.4079, 5.54451, -56.3189, \ +-0.0456262, -61.909, -123.772, 174.364, -28.3682, -90.2316, -33.9583, \ +-95.8217, 78.5881, 134.861, 72.998, 11.1346, 67.4079, 5.54451, \ +-56.3189, -0.0456262, -61.909, -123.772, -67.4991, -129.363, 168.774, \ +106.911, -95.8217, -157.685, -101.412, -163.275, 11.1346, 67.4079, \ +5.54451, -56.3189, -0.0456262, -61.909, -123.772, -67.4991, -129.363, \ +168.774, -134.953, 163.184, 101.321, 39.4572, -163.275, 134.861, \ +-168.865, 129.271, -56.3189, -0.0456262, -61.909, -123.772, -67.4991, \ +-129.363, 168.774, -134.953, 163.184, 101.321, 157.594, 95.7305, \ +33.8671, -27.9963, 129.271, 67.4079, 123.681, 61.8178, -0.0456262, \ +157.222, -146.505, -90.2316, -152.095, 146.042, -157.685, 140.452, \ +-45.1386, -107.002, -168.865, -112.592, -174.455, 123.681, 61.8178, \ +-140.915, 157.222, -146.505, 151.632, -33.9583, 22.3149, -39.5485, \ +-101.412, -45.1386, -107.002, -168.865, -112.592, -174.455, 123.681, \ +179.954, 118.091, 56.2276, -5.63576, 151.632, 89.7684, 146.042, \ +84.1783, -101.412, -45.1386, -107.002, -168.865, -112.592, -174.455, \ +123.681, 179.954, 118.091], 'insideEdgeIndices' : [[6, 17], [8, 18], \ +[11, 17], [12, 18], [14, 18], [17, 24], [17, 29], [18, 25], [23, 33], \ +[33, 49], [36, 41], [36, 49], [43, 48], [45, 58], [47, 54], [48, 49], \ +[49, 55], [51, 58], [53, 58], [54, 56], [54, 66], [54, 71], [55, 62], \ +[58, 70], [61, 63], [72, 84], [84, 85], [84, 88], [84, 91], [91, 92], \ +[92, 99], [95, 99], [98, 99], [99, 111], [112, 129], [113, 125], \ +[117, 129], [120, 122], [121, 128], [125, 130], [125, 132], [125, \ +138], [127, 129], [128, 134], [129, 136], [134, 135], [134, 147], \ +[134, 150], [135, 140], [142, 147], [150, 160], [154, 166], [158, \ +165], [159, 166], [165, 169], [165, 171], [165, 175], [166, 172], \ +[166, 177]]}, 'PentagonalIcositetrahedron' : {'edgeCoordinates' : \ +[[0., 4.35723], [0.394152, 2.18944], [0.430299, 5.25992], [0.638786, \ +3.58785], [1.4608, 0.808884], [1.60521, 3.8448], [1.8137, 2.17273], \ +[1.84984, 5.24321], [2.18817, 7.17717], [2.21608, 5.12629], [2.244, \ +3.07542], [2.32771, 5.7644], [2.34838, 2.82554], [2.44667, 1.83038], \ +[2.47589, 5.40966], [2.62746, 0.], [3.05021, 7.684], [3.21042, \ +3.33237], [3.38274, 4.31741], [3.39121, 1.50199], [3.48951, \ +0.506832], [3.69969, 6.12918], [3.87201, 7.11422], [4.34917, \ +4.57436], [4.37708, 2.52349], [4.43405, 0.178442], [4.52149, 5.5594], \ +[4.61501, 2.22151], [4.74332, 2.40657], [4.77946, 5.47705], [4.83843, \ +7.37118], [4.98795, 3.80498], [5.1285, 0.897986], [5.74528, 6.27892], \ +[5.95438, 4.06193], [6.16286, 2.38986], [6.19901, 5.46034], [6.42084, \ +2.3075], [6.56525, 5.34342], [6.59316, 3.29255], [7.11787, 6.09878], \ +[7.24264, 1.73773], [7.55959, 3.5495], [7.6984, 4.80326], [7.73191, \ +4.53454], [8.46643, 2.45725], [8.48984, 6.46356], [8.69833, 4.79149], \ +[8.72625, 2.74061], [8.92014, 7.36625], [9.09248, 2.6237], [9.12863, \ +5.69418], [9.14005, 2.24221], [9.33712, 4.02211], [9.72058, \ +0.946689], [9.92007, 7.35448], [10.3035, 4.27906], [10.5006, \ +6.05896], [10.512, 2.60699], [10.5482, 5.67747], [10.7205, 0.934917], \ +[10.7224, 6.02015], [10.9423, 3.50967], [11.1253, 3.70928], [11.1508, \ +1.8376], [11.7083, 7.04165], [11.8891, 5.21127], [11.9423, 3.4979], \ +[11.9874, 4.21611], [12.5228, 2.20238], [12.6528, 6.71326], [12.7511, \ +5.7181], [13.3283, 3.74991], [13.5729, 5.14832]], \ +'outsideEdgeIndices' : [[1, 3], [3, 8], [8, 6], [6, 10], [10, 19], \ +[19, 15], [15, 22], [22, 12], [12, 9], [9, 17], [17, 23], [23, 31], \ +[31, 34], [34, 27], [27, 24], [24, 30], [30, 37], [37, 35], [35, 39], \ +[39, 45], [45, 48], [48, 44], [44, 41], [41, 47], [47, 50], [50, 56], \ +[56, 58], [58, 52], [52, 60], [60, 67], [67, 62], [62, 66], [66, 71], \ +[71, 72], [72, 74], [74, 73], [73, 69], [69, 64], [64, 57], [57, 63], \ +[63, 68], [68, 70], [70, 65], [65, 61], [61, 55], [55, 53], [53, 59], \ +[59, 51], [51, 54], [54, 49], [49, 43], [43, 46], [46, 42], [42, 38], \ +[38, 40], [40, 36], [36, 29], [29, 32], [32, 25], [25, 20], [20, 28], \ +[28, 33], [33, 26], [26, 21], [21, 16], [16, 5], [5, 14], [14, 13], \ +[13, 18], [18, 11], [11, 7], [7, 2], [2, 4], [4, 1]], \ +'outsideEdgeDegrees' : [64.5134, -0.674489, -99.9228, 64.5134, \ +-34.7349, 129.701, 30.4531, -165.111, 95.641, 30.4531, -34.7349, \ +14.8893, -50.2986, -149.547, -99.9228, 64.5134, -0.674489, -99.9228, \ +64.5134, -34.7349, 14.8893, 179.326, 114.138, 14.8893, 64.5134, \ +-0.674489, -65.8624, -165.111, -0.674489, -19.1711, 145.265, 46.0168, \ +-19.1711, -84.359, -34.7349, -99.9228, 160.829, -149.547, 145.265, \ +-50.2986, -0.674489, -65.8624, -165.111, -115.487, 179.326, 114.138, \ +14.8893, 179.326, 80.0772, -115.487, 145.265, -50.2986, -149.547, \ +145.265, 80.0772, -115.487, 179.326, 80.0772, -115.487, -133.983, \ +30.4531, -68.7952, -133.983, 160.829, -149.547, 145.265, 46.0168, \ +95.641, 30.4531, -165.111, -115.487, 179.326, 80.0772, 129.701], \ +'insideEdgeIndices' : [[4, 6], [6, 11], [14, 20], [18, 19], [18, 25], \ +[19, 24], [20, 21], [22, 23], [22, 27], [24, 32], [32, 35], [35, 40], \ +[40, 43], [43, 45], [47, 52], [48, 52], [48, 54], [54, 57], [57, 60], \ +[59, 63], [59, 65], [67, 69], [67, 72]]}, 'PentakisDodecahedron' : \ +{'edgeCoordinates' : [[0., 3.34303], [0.26284, 2.24678], [0.695721, \ +1.61552], [0.924979, 3.98745], [0.934661, 2.98749], [0.958561, \ +0.519262], [1.35498, 4.62068], [1.37947, 2.09187], [1.61782, \ +3.52442], [1.6207, 2.25993], [1.63038, 1.25998], [1.86226, 3.36107], \ +[2.07519, 0.364349], [2.27996, 5.26509], [2.28964, 4.26514], [2.5483, \ +2.6335], [2.55798, 1.63355], [2.62653, 1.34765], [2.82082, 0.537294], \ +[2.97568, 3.53757], [3.21724, 4.63871], [3.22012, 3.37421], [3.36391, \ +3.63066], [3.48296, 2.27796], [3.49264, 1.27801], [3.77418, 2.23756], \ +[3.93745, 0.382381], [4.15478, 3.01867], [4.43632, 3.97823], \ +[4.48879, 1.36568], [4.59959, 2.12305], [5.15093, 3.10635], [5.31421, \ +1.25117], [5.59574, 2.21072], [5.71429, 4.37323], [5.97906, \ +0.871881], [6.14447, 3.33122], [6.26756, 2.95143], [6.38661, \ +1.59874], [6.41135, 3.20787], [6.52776, 5.1537], [6.5304, 1.85518], \ +[6.69288, 4.16743], [6.69368, 0.], [6.97521, 0.959552], [7.20222, \ +2.59589], [7.48375, 3.55544], [7.50131, 3.84892], [7.55107, 4.68075], \ +[7.64703, 1.70027], [7.76608, 0.347571], [7.8334, 1.47288], [8.19837, \ +2.68356], [8.31478, 4.62939], [8.36165, 0.828385], [8.47805, \ +2.77421], [8.4799, 3.64312], [8.64318, 1.78794], [9.27077, 3.03113], \ +[9.33809, 4.15644], [9.43405, 1.17596], [9.50137, 2.30127]], \ +'outsideEdgeIndices' : [[1, 4], [4, 12], [12, 15], [15, 9], [9, 7], \ +[7, 14], [14, 21], [21, 20], [20, 16], [16, 22], [22, 28], [28, 23], \ +[23, 29], [29, 32], [32, 38], [38, 46], [46, 40], [40, 43], [43, 37], \ +[37, 35], [35, 41], [41, 49], [49, 47], [47, 57], [57, 48], [48, 54], \ +[54, 60], [60, 59], [59, 53], [53, 58], [58, 56], [56, 62], [62, 61], \ +[61, 55], [55, 50], [50, 45], [45, 52], [52, 51], [51, 44], [44, 36], \ +[36, 42], [42, 34], [34, 39], [39, 33], [33, 31], [31, 24], [24, 25], \ +[25, 26], [26, 30], [30, 27], [27, 19], [19, 17], [17, 11], [11, 18], \ +[18, 13], [13, 6], [6, 3], [3, 10], [10, 5], [5, 8], [8, 2], [2, 1]], \ +'outsideEdgeDegrees' : [34.8641, -33.7546, 64.6986, -132.208, \ +103.483, 34.8641, -33.7546, -102.373, -115.301, 47.7922, -20.8265, \ +142.267, 17.9577, -50.661, -7.89843, -20.8265, 142.267, 73.6484, \ +-123.258, 112.433, 43.8139, -24.8048, -93.4235, 5.02965, 168.123, \ +43.8139, -24.8048, -93.4235, -162.042, -63.5891, 99.5045, -24.8048, \ +-93.4235, -162.042, 129.339, -132.208, 30.8858, -93.4235, -162.042, \ +129.339, 60.7203, 159.173, -37.7329, -162.042, 129.339, 172.102, \ +-89.4452, 73.6484, -50.661, -119.28, 172.102, 103.483, -158.064, \ +5.02965, -119.28, 172.102, 103.483, 34.8641, 133.317, -63.5891, \ +172.102, 103.483], 'insideEdgeIndices' : [[1, 5], [2, 5], [3, 11], \ +[4, 5], [5, 12], [6, 11], [7, 15], [10, 11], [10, 12], [10, 16], [10, \ +17], [11, 13], [12, 16], [12, 20], [14, 15], [15, 20], [15, 21], [16, \ +17], [16, 24], [17, 24], [17, 25], [19, 25], [22, 24], [24, 28], [25, \ +27], [25, 30], [28, 29], [28, 31], [28, 32], [31, 32], [31, 34], [32, \ +34], [33, 34], [34, 38], [35, 43], [36, 45], [38, 42], [40, 47], [41, \ +43], [42, 45], [42, 46], [42, 50], [43, 47], [43, 49], [44, 45], [45, \ +51], [46, 47], [46, 50], [46, 53], [47, 53], [50, 53], [50, 58], [53, \ +57], [54, 57], [55, 58], [57, 59], [57, 60], [58, 61], [58, 62]]}, \ +'RhombicDodecahedron' : {'edgeCoordinates' : [[0.272166, 2.11695], \ +[0., 1.1547], [0.816497, 0.57735], [1.08866, 1.5396], [1.08866, \ +2.6943], [1.36083, 0.57735], [1.90516, 2.11695], [2.17732, 0.], \ +[2.17732, 1.1547], [2.44949, 2.11695], [2.99382, 0.57735], [3.26599, \ +1.5396], [3.26599, 2.6943], [3.53815, 0.57735], [4.08248, 2.11695], \ +[4.35465, 0.], [4.35465, 1.1547], [4.62681, 2.11695], [5.17115, \ +0.57735], [5.44331, 1.5396], [5.44331, 2.6943], [5.71548, 0.57735], \ +[6.25981, 2.11695], [6.53197, 0.], [6.53197, 1.1547], [7.34847, \ +0.57735]], 'outsideEdgeIndices' : [[2, 1], [1, 5], [5, 7], [7, 9], \ +[9, 10], [10, 13], [13, 15], [15, 17], [17, 18], [18, 21], [21, 23], \ +[23, 25], [25, 26], [26, 24], [24, 22], [22, 20], [20, 19], [19, 16], \ +[16, 14], [14, 12], [12, 11], [11, 8], [8, 6], [6, 4], [4, 3], [3, \ +2]], 'outsideEdgeDegrees' : [74.2068, 35.2644, -35.2644, -74.2068, \ +74.2068, 35.2644, -35.2644, -74.2068, 74.2068, 35.2644, -35.2644, \ +-74.2068, -35.2644, -144.736, 144.736, 105.793, -105.793, -144.736, \ +144.736, 105.793, -105.793, -144.736, 144.736, 105.793, -105.793, \ +144.736], 'insideEdgeIndices' : [[1, 4], [4, 7], [6, 9], [9, 11], \ +[10, 12], [12, 15], [14, 17], [17, 19], [18, 20], [20, 23], [22, \ +25]]}, 'RhombicTriacontahedron' : {'edgeCoordinates' : [[0.0898056, \ +3.04338], [5.64274, 4.03934], [5.64274, 0.995959], [5.64274, \ +2.04742], [5.64274, 2.04742], [6.49339, 1.52169], [6.49339, 4.56507], \ +[1.79111, 3.04338], [1.79111, 0.], [9.40456, 0.995959], [9.40456, \ +2.04742], [7.52365, 0.995959], [7.52365, 2.04742], [8.46411, \ +2.51765], [8.46411, 3.56911], [8.46411, 0.525731], [7.52365, \ +4.03934], [7.52365, 2.04742], [10.2552, 1.52169], [6.58319, 2.51765], \ +[6.58319, 3.56911], [6.58319, 0.525731], [9.31476, 3.04338], \ +[9.31476, 0.], [8.3743, 1.52169], [8.3743, 4.56507], [3.76183, \ +0.995959], [3.76183, 2.04742], [7.43385, 3.04338], [7.43385, 0.], \ +[4.70228, 2.51765], [4.70228, 3.56911], [4.70228, 0.525731], \ +[3.76183, 4.03934], [3.76183, 2.04742], [4.61248, 1.52169], [4.61248, \ +4.56507], [2.82137, 2.51765], [2.82137, 3.56911], [2.82137, \ +0.525731], [5.55293, 3.04338], [5.55293, 0.], [0., 4.03934], [0., \ +2.04742], [3.67202, 3.04338], [3.67202, 0.], [1.88091, 4.03934], \ +[1.88091, 0.995959], [1.88091, 2.04742], [1.88091, 2.04742], \ +[1.03026, 1.52169], [1.97072, 3.04338], [2.91117, 1.52169], [3.85163, \ +3.04338], [4.79209, 1.52169], [5.73254, 3.04338], [6.673, 1.52169], \ +[7.61346, 3.04338], [8.55391, 1.52169], [0.940456, 2.51765], \ +[0.940456, 3.56911], [0.940456, 0.525731], [0.850651, 1.52169], \ +[0.850651, 4.56507], [2.73156, 1.52169], [2.73156, 4.56507]], \ +'outsideEdgeIndices' : [[44, 1], [1, 43], [43, 64], [64, 61], [61, \ +8], [8, 49], [49, 52], [52, 47], [47, 66], [66, 39], [39, 45], [45, \ +28], [28, 54], [54, 34], [34, 37], [37, 32], [32, 41], [41, 4], [4, \ +56], [56, 2], [2, 7], [7, 21], [21, 29], [29, 13], [13, 58], [58, \ +17], [17, 26], [26, 15], [15, 23], [23, 11], [11, 19], [19, 10], [10, \ +24], [24, 16], [16, 59], [59, 14], [14, 25], [25, 12], [12, 30], [30, \ +22], [22, 57], [57, 20], [20, 6], [6, 3], [3, 42], [42, 33], [33, \ +55], [55, 31], [31, 36], [36, 27], [27, 46], [46, 40], [40, 53], [53, \ +38], [38, 65], [65, 48], [48, 9], [9, 62], [62, 51], [51, 60], [60, \ +63], [63, 44]], 'outsideEdgeDegrees' : [84.8476, 95.1524, 31.7175, \ +-84.8476, -31.7175, -84.8476, 84.8476, 95.1524, 31.7175, -84.8476, \ +-31.7175, -84.8476, 84.8476, 95.1524, 31.7175, -84.8476, -31.7175, \ +-84.8476, 84.8476, 95.1524, 31.7175, -84.8476, -31.7175, -84.8476, \ +84.8476, 95.1524, 31.7175, -84.8476, -31.7175, -84.8476, -31.7175, \ +-148.283, -95.1524, 148.283, 84.8476, 95.1524, -95.1524, -148.283, \ +-95.1524, 148.283, 84.8476, 95.1524, -95.1524, -148.283, -95.1524, \ +148.283, 84.8476, 95.1524, -95.1524, -148.283, -95.1524, 148.283, \ +84.8476, 95.1524, -95.1524, -148.283, -95.1524, 148.283, 84.8476, \ +95.1524, -95.1524, 148.283], 'insideEdgeIndices' : [[1, 60], [1, 61], \ +[3, 55], [4, 6], [4, 55], [8, 60], [10, 59], [11, 59], [12, 57], [13, \ +25], [13, 57], [14, 23], [14, 58], [15, 58], [20, 29], [20, 56], [21, \ +56], [27, 53], [28, 36], [28, 53], [31, 41], [31, 54], [32, 54], [38, \ +45], [38, 52], [39, 52], [48, 51], [49, 51], [49, 65]]}, \ +'SmallTriakisOctahedron' : {'edgeCoordinates' : [[0., 1.51832], \ +[1.70711, 1.51832], [2.70711, 0.997316], [2.70711, 2.03933], \ +[3.70711, 1.51832], [3.70711, 4.55496], [0.853553, 2.03933], \ +[5.41421, 1.51832], [0.926777, 3.03664], [1.85355, 1.51832], \ +[2.78033, 3.03664], [2.78033, 0.], [4.63388, 3.03664], [5.56066, \ +1.51832], [0.78033, 3.03664], [1.78033, 2.51564], [3.56066, 1.51832], \ +[3.56066, 4.55496], [4.56066, 2.03933], [2.63388, 3.03664], [2.63388, \ +0.], [3.63388, 3.55765], [3.63388, 2.51564], [3.63388, 3.55765], \ +[4.48744, 3.03664], [5.48744, 2.51564], [6.34099, 3.03664]], \ +'outsideEdgeIndices' : [[1, 15], [15, 7], [7, 9], [9, 20], [20, 4], \ +[4, 11], [11, 18], [18, 22], [22, 6], [6, 25], [25, 19], [19, 13], \ +[13, 27], [27, 14], [14, 26], [26, 8], [8, 5], [5, 23], [23, 17], \ +[17, 12], [12, 3], [3, 21], [21, 10], [10, 16], [16, 2], [2, 1]], \ +'outsideEdgeDegrees' : [62.7994, -85.8009, 85.8009, 0., -85.8009, \ +85.8009, 62.7994, -85.8009, 85.8009, -62.7994, -85.8009, 85.8009, 0., \ +-117.201, 94.1991, -94.1991, 180., 94.1991, -94.1991, -117.201, \ +94.1991, -94.1991, 117.201, 94.1991, -94.1991, 180.], \ +'insideEdgeIndices' : [[1, 7], [2, 7], [2, 9], [3, 10], [3, 17], [4, \ +10], [4, 17], [5, 19], [5, 25], [8, 13], [8, 19], [9, 16], [10, 17], \ +[10, 20], [11, 17], [11, 22], [11, 23], [11, 25], [13, 26], [16, 20], \ +[22, 25], [23, 25], [26, 27]]}, 'TetrakisHexahedron' : \ +{'edgeCoordinates' : [[0., 2.44849], [0.578072, 3.64999], [0.959843, \ +0.707993], [0.960697, 2.72609], [1.12983, 1.74049], [1.53791, \ +1.9095], [1.83637, 3.209], [1.84046, 4.54233], [1.92054, 0.985593], \ +[2.08968, 0.], [2.41358, 2.39241], [2.49776, 0.169003], [2.58376, \ +3.87337], [2.79621, 1.4685], [3.15689, 1.72346], [3.16098, 3.05678], \ +[3.16598, 4.68641], [3.45645, 3.3851], [3.90429, 2.38783], [4.48151, \ +1.57124], [4.48651, 3.20087], [4.77698, 1.89956], [5.3592, 2.71259], \ +[5.74748, 3.63413], [6.1025, 2.04364], [6.31817, 2.4291]], \ +'outsideEdgeIndices' : [[1, 2], [2, 7], [7, 8], [8, 17], [17, 18], \ +[18, 13], [13, 16], [16, 21], [21, 24], [24, 26], [26, 23], [23, 25], \ +[25, 22], [22, 19], [19, 20], [20, 15], [15, 11], [11, 14], [14, 12], \ +[12, 9], [9, 10], [10, 3], [3, 6], [6, 4], [4, 5], [5, 1]], \ +'outsideEdgeDegrees' : [64.3067, -19.3139, 89.8242, 6.20355, \ +-77.4171, 150.773, -54.7449, 6.20355, 18.9623, -64.6583, 163.531, \ +-41.9861, -173.796, 150.773, -54.7449, 173.445, 138.014, -67.5036, \ +-102.935, 125.255, -80.2624, 147.927, 64.3067, 125.255, -80.2624, \ +147.927], 'insideEdgeIndices' : [[1, 4], [2, 4], [3, 9], [4, 7], [6, \ +7], [6, 9], [6, 11], [6, 14], [7, 11], [7, 13], [7, 16], [8, 13], [9, \ +14], [11, 16], [13, 17], [15, 16], [15, 19], [16, 19], [19, 21], [21, \ +22], [21, 23], [22, 23], [23, 24]]}, 'TriakisIcosahedron' : \ +{'edgeCoordinates' : [[0., 1.50693], [8.8695, 1.50693], [8.8695, \ +4.52078], [4.43475, 3.01385], [4.43475, 0.], [5.29656, 3.52109], \ +[5.29656, 2.50661], [6.15836, 3.01385], [6.15836, 0.], [4.38446, \ +3.01385], [4.38446, 0.], [7.95741, 2.01417], [7.95741, 0.999684], \ +[7.07046, 3.52109], [7.07046, 2.50661], [6.18351, 2.01417], [6.18351, \ +0.999684], [9.70616, 3.01385], [4.40961, 2.01417], [4.40961, \ +0.999684], [8.81921, 1.50693], [8.81921, 4.52078], [3.52265, \ +3.52109], [3.52265, 2.50661], [7.04531, 1.50693], [7.04531, 4.52078], \ +[2.6357, 2.01417], [2.6357, 0.999684], [5.27141, 1.50693], [5.27141, \ +4.52078], [8.84436, 3.52109], [8.84436, 2.50661], [0.88695, 3.01385], \ +[0.88695, 0.], [1.7739, 1.50693], [1.7739, 4.52078], [3.5478, \ +1.50693], [3.5478, 4.52078], [5.3217, 1.50693], [5.3217, 4.52078], \ +[7.0956, 1.50693], [7.0956, 4.52078], [7.93226, 3.01385], [7.93226, \ +0.], [1.74875, 3.52109], [1.74875, 2.50661], [2.61056, 3.01385], \ +[2.61056, 0.], [0.861803, 2.01417], [0.861803, 0.999684], [1.72361, \ +1.50693], [1.72361, 4.52078], [3.49751, 1.50693], [3.49751, 4.52078], \ +[0.836656, 3.01385], [0.836656, 0.], [7.98255, 3.01385], [7.98255, \ +0.], [6.20865, 3.01385], [6.20865, 0.], [2.66085, 3.01385], [2.66085, \ +0.]], 'outsideEdgeIndices' : [[1, 55], [55, 49], [49, 33], [33, 52], \ +[52, 45], [45, 36], [36, 47], [47, 27], [27, 61], [61, 54], [54, 23], \ +[23, 38], [38, 10], [10, 19], [19, 4], [4, 30], [30, 6], [6, 40], \ +[40, 8], [8, 16], [16, 59], [59, 26], [26, 14], [14, 42], [42, 43], \ +[43, 12], [12, 57], [57, 22], [22, 31], [31, 3], [3, 18], [18, 2], \ +[2, 32], [32, 21], [21, 58], [58, 13], [13, 44], [44, 41], [41, 15], \ +[15, 25], [25, 60], [60, 17], [17, 9], [9, 39], [39, 7], [7, 29], \ +[29, 5], [5, 20], [20, 11], [11, 37], [37, 24], [24, 53], [53, 62], \ +[62, 28], [28, 48], [48, 35], [35, 46], [46, 51], [51, 34], [34, 50], \ +[50, 56], [56, 1]], 'outsideEdgeDegrees' : [60.9606, -88.559, 88.559, \ +60.9606, -88.559, 88.559, -60.9606, -88.559, 88.559, 60.9606, \ +-88.559, 88.559, -60.9606, -88.559, 88.559, 60.9606, -88.559, 88.559, \ +-60.9606, -88.559, 88.559, 60.9606, -88.559, 88.559, -60.9606, \ +-88.559, 88.559, 60.9606, -88.559, 88.559, -60.9606, -119.039, \ +91.441, -91.441, -119.039, 91.441, -91.441, 119.039, 91.441, -91.441, \ +-119.039, 91.441, -91.441, 119.039, 91.441, -91.441, -119.039, \ +91.441, -91.441, 119.039, 91.441, -91.441, -119.039, 91.441, -91.441, \ +119.039, 91.441, -91.441, -119.039, 91.441, -91.441, 119.039], \ +'insideEdgeIndices' : [[1, 49], [1, 50], [1, 51], [4, 6], [4, 7], [4, \ +8], [4, 29], [6, 8], [7, 8], [8, 39], [10, 23], [10, 24], [10, 37], \ +[10, 61], [12, 21], [12, 41], [13, 21], [13, 41], [14, 43], [14, 59], \ +[15, 43], [15, 59], [16, 25], [16, 39], [17, 25], [17, 39], [18, 31], \ +[18, 32], [18, 57], [19, 29], [19, 37], [20, 29], [20, 37], [21, 41], \ +[21, 57], [23, 61], [24, 61], [25, 39], [25, 59], [27, 35], [27, 53], \ +[28, 35], [28, 53], [29, 37], [31, 57], [32, 57], [33, 45], [33, 46], \ +[33, 47], [33, 51], [35, 47], [35, 53], [41, 43], [43, 59], [45, 47], \ +[46, 47], [49, 51], [50, 51], [53, 61]]}, 'TriakisTetrahedron' : \ +{'edgeCoordinates' : [[0., 0.606607], [0.977366, 0.818161], [1.01852, \ +2.14208], [1.16255, 1.80087], [1.55235, 0.], [1.8107, 0.265391], \ +[1.99588, 1.24809], [1.99588, 2.35364], [2.18107, 0.265391], \ +[2.18107, 3.33634], [2.82922, 1.80087], [3.0144, 0.818161], [3.19959, \ +1.80087], [3.84774, 0.265391]], 'outsideEdgeIndices' : [[1, 4], [4, \ +8], [8, 3], [3, 10], [10, 11], [11, 12], [12, 13], [13, 14], [14, 9], \ +[9, 7], [7, 6], [6, 2], [2, 5], [5, 1]], 'outsideEdgeDegrees' : \ +[45.7708, 33.5573, -167.787, 45.7708, -67.1146, -79.3281, 79.3281, \ +-67.1146, 180., 100.672, -100.672, 146.443, -54.9012, 158.656], \ +'insideEdgeIndices' : [[1, 2], [2, 4], [4, 6], [4, 7], [4, 11], [7, \ +11], [8, 10], [8, 11], [9, 11], [9, 12], [12, 14]]}, \ +'MathematicaPolyhedron' : {'edgeCoordinates' : [[0., 0.5], [0., 1.5], \ +[0., 2.5], [0., 3.5], [0.866025, 1.], [0.866025, 2.], [0.866025, 3.], \ +[1.73205, 0.5], [1.73205, 1.5], [1.73205, 2.5], [2.59808, 0.], \ +[2.59808, 1.], [2.59808, 2.], [2.59808, 3.], [2.59808, 4.], [2.59808, \ +5.], [3.4641, 2.5], [3.4641, 3.5], [3.4641, 4.5], [4.33013, 2.], \ +[4.33013, 3.], [4.33013, 4.], [5.19615, 1.5], [5.19615, 2.5], \ +[5.19615, 3.5], [5.19615, 4.5], [5.19615, 5.5], [5.19615, 6.5], \ +[6.06218, 4.], [6.06218, 5.], [6.06218, 6.], [6.9282, 3.5], [6.9282, \ +4.5], [6.9282, 5.5], [7.79423, 3.], [7.79423, 4.], [7.79423, 5.], \ +[7.79423, 6.], [7.79423, 7.], [7.79423, 8.], [8.66025, 5.5], \ +[8.66025, 6.5], [8.66025, 7.5], [9.52628, 5.], [9.52628, 6.], \ +[9.52628, 7.], [10.3923, 4.5], [10.3923, 5.5], [10.3923, 6.5], \ +[10.3923, 7.5], [10.3923, 8.5], [10.3923, 9.5], [11.2583, 7.], \ +[11.2583, 8.], [11.2583, 9.], [12.1244, 6.5], [12.1244, 7.5], \ +[12.1244, 8.5], [12.9904, 6.], [12.9904, 7.], [12.9904, 8.], \ +[12.9904, 9.]], 'outsideEdgeIndices' : [[1, 2], [2, 3], [3, 4], [4, \ +7], [7, 6], [6, 10], [10, 14], [14, 15], [15, 16], [16, 19], [19, \ +18], [18, 22], [22, 26], [26, 27], [27, 28], [28, 31], [31, 30], [30, \ +34], [34, 38], [38, 39], [39, 40], [40, 43], [43, 42], [42, 46], [46, \ +50], [50, 51], [51, 52], [52, 55], [55, 54], [54, 58], [58, 62], [62, \ +61], [61, 60], [60, 59], [59, 56], [56, 57], [57, 53], [53, 49], [49, \ +48], [48, 47], [47, 44], [44, 45], [45, 41], [41, 37], [37, 36], [36, \ +35], [35, 32], [32, 33], [33, 29], [29, 25], [25, 24], [24, 23], [23, \ +20], [20, 21], [21, 17], [17, 13], [13, 12], [12, 11], [11, 8], [8, \ +9], [9, 5], [5, 1]], 'outsideEdgeDegrees' : [90., 90., 90., -30., \ +-90., 30., 30., 90., 90., -30., -90., 30., 30., 90., 90., -30., -90., \ +30., 30., 90., 90., -30., -90., 30., 30., 90., 90., -30., -90., 30., \ +30., -90., -90., -90., 150., 90., -150., -150., -90., -90., 150., \ +90., -150., -150., -90., -90., 150., 90., -150., -150., -90., -90., \ +150., 90., -150., -150., -90., -90., 150., 90., -150., -150.], \ +'insideEdgeIndices' : [[2, 5], [2, 6], [3, 6], [3, 7], [5, 6], [6, \ +9], [8, 12], [9, 10], [9, 12], [9, 13], [10, 13], [13, 14], [14, 17], \ +[14, 18], [15, 18], [15, 19], [17, 18], [18, 21], [20, 24], [21, 22], \ +[21, 24], [21, 25], [22, 25], [25, 26], [26, 29], [26, 30], [27, 30], \ +[27, 31], [29, 30], [30, 33], [32, 36], [33, 34], [33, 36], [33, 37], \ +[34, 37], [37, 38], [38, 41], [38, 42], [39, 42], [39, 43], [41, 42], \ +[42, 45], [44, 48], [45, 46], [45, 48], [45, 49], [46, 49], [49, 50], \ +[50, 53], [50, 54], [51, 54], [51, 55], [53, 54], [54, 57], [56, 60], \ +[57, 58], [57, 60], [57, 61], [58, 61]]}, 'ElongatedDodecahedron' : \ +{'edgeCoordinates' : [[1.13364, 0.963525], [1.13364, 2.96353], \ +[0.267617, 1.46353], [0.267617, 2.46353], [1.99967, 1.46353], \ +[1.99967, 2.46353], [2.86569, 0.963525], [2.86569, 2.96353], \ +[3.73172, 1.46353], [3.73172, 2.46353], [4.59774, 0.963525], \ +[4.59774, 2.96353], [5.46377, 1.46353], [5.46377, 2.46353], [6.32979, \ +0.963525], [6.32979, 2.96353], [7.19582, 1.46353], [7.19582, \ +2.46353], [6.06218, 3.92705], [5.19615, 3.42705], [4.33013, 3.92705], \ +[3.4641, 3.42705], [2.59808, 3.92705], [1.73205, 3.42705], [1.40126, \ +0.], [0., 3.42705], [2.26728, 0.5], [3.13331, 0.], [3.99933, 0.5], \ +[4.86536, 0.], [5.73139, 0.5], [6.59741, 0.], [7.46344, 0.5], \ +[0.866025, 3.92705]], 'outsideEdgeIndices' : [[26, 34], [34, 2], [2, \ +6], [6, 24], [24, 23], [23, 8], [8, 10], [10, 22], [22, 21], [21, \ +12], [12, 14], [14, 20], [20, 19], [19, 16], [16, 18], [18, 17], [17, \ +33], [33, 32], [32, 15], [15, 13], [13, 31], [31, 30], [30, 11], [11, \ +9], [9, 29], [29, 28], [28, 7], [7, 5], [5, 27], [27, 25], [25, 1], \ +[1, 3], [3, 4], [4, 26]], 'outsideEdgeDegrees' : [30., -74.4775, \ +-30., 105.522, 30., -74.4775, -30., 105.522, 30., -74.4775, -30., \ +105.522, 30., -74.4775, -30., -90., -74.4775, -150., 105.522, 150., \ +-74.4775, -150., 105.522, 150., -74.4775, -150., 105.522, 150., \ +-74.4775, -150., 105.522, 150., 90., 105.522], 'insideEdgeIndices' : \ +[[1, 5], [2, 4], [5, 6], [6, 8], [7, 9], [9, 10], [10, 12], [11, 13], \ +[13, 14], [14, 16], [15, 17]]}} + +# for poly in polyhedronData.keys(): + # print poly + # print '<_option value="' + poly + '">' + poly + '' diff --git a/extensions/fablabchemnitz/primitive/primitive b/extensions/fablabchemnitz/primitive/primitive new file mode 100755 index 00000000..ddd54d85 Binary files /dev/null and b/extensions/fablabchemnitz/primitive/primitive differ diff --git a/extensions/fablabchemnitz/primitive/primitive.exe b/extensions/fablabchemnitz/primitive/primitive.exe new file mode 100644 index 00000000..9eb92597 Binary files /dev/null and b/extensions/fablabchemnitz/primitive/primitive.exe differ diff --git a/extensions/fablabchemnitz/primitive/primitive.inx b/extensions/fablabchemnitz/primitive/primitive.inx new file mode 100644 index 00000000..f6f8bcc8 --- /dev/null +++ b/extensions/fablabchemnitz/primitive/primitive.inx @@ -0,0 +1,72 @@ + + + Primitive (Michael Fogleman) + fablabchemnitz.de.primitive + + + + + false + true + 100 + + + + + + + + + + + + 0 + 256 + 1024 + 128 + true + 255 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ../000_about_fablabchemnitz.svg + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/primitive/primitive.py b/extensions/fablabchemnitz/primitive/primitive.py new file mode 100644 index 00000000..5d9b702e --- /dev/null +++ b/extensions/fablabchemnitz/primitive/primitive.py @@ -0,0 +1,195 @@ +#!/usr/bin/env python3 + +import sys +import inkex +import os +import base64 +import urllib.request as urllib +from PIL import Image +from io import BytesIO +from lxml import etree +from inkex import Color + +""" +Extension for InkScape 1.X +Features + - Primitive - Reproducing images with geometric primitives written in Go. + +Author: Mario Voigt / FabLab Chemnitz +Mail: mario.voigt@stadtfabrikanten.org +Date: 21.08.2020 +Last patch: 23.08.2020 +License: GNU GPL v3 + +Used version of Primitive: https://github.com/fogleman/primitive/commit/0373c216458be1c4b40655b796a3aefedf8b7d23 +""" + +class Primitive (inkex.EffectExtension): + + def rgbToHex(self, pickerColor): + longcolor = int(pickerColor) + if longcolor < 0: + longcolor = longcolor & 0xFFFFFFFF + return '#' + format(longcolor >> 8, '06X') + + def checkImagePath(self, node): + xlink = node.get('xlink:href') + if xlink and xlink[:5] == 'data:': + # No need, data alread embedded + return + + url = urllib.urlparse(xlink) + href = urllib.url2pathname(url.path) + + # Primary location always the filename itself. + path = self.absolute_href(href or '') + + # Backup directory where we can find the image + if not os.path.isfile(path): + path = node.get('sodipodi:absref', path) + + if not os.path.isfile(path): + inkex.errormsg('File not found "{}". Unable to embed image.').format(path) + return + + if (os.path.isfile(path)): + return path + + def add_arguments(self, pars): + pars.add_argument("--tab") + pars.add_argument("--keeporiginal", type=inkex.Boolean, default=False, help="Keep original image on canvas") + pars.add_argument("--cliprect", type=inkex.Boolean, default=True, help="Draw clipping rectangle") + pars.add_argument("--n", type=int, default=100, help="Number of shapes") + pars.add_argument("--m", default=1, help="Mode") + pars.add_argument("--rep", type=int, default=0,help="Extra shapes/iteration") + pars.add_argument("--r", type=int, default=256, help="Resize to size before processing (px)") + pars.add_argument("--s", type=int, default=1024, help="Output image size (px)") + pars.add_argument("--a", type=int, default=128, help="Color alpha") + pars.add_argument("--bg_enabled", type=inkex.Boolean, default=True, help="Use average starting background color") + pars.add_argument("--bg", type=Color, default=255, help="Starting background color") + pars.add_argument("--j", type=int, default=0, help="Number of parallel workers") + + def effect(self): + + # internal overwrite for scale: + self.options.scale = 1.0 + + if (self.options.ids): + for node in self.svg.selected.values(): + if node.tag == inkex.addNS('image', 'svg'): + self.path = self.checkImagePath(node) # This also ensures the file exists + if self.path is None: # check if image is embedded or linked + image_string = node.get('{http://www.w3.org/1999/xlink}href') + # find comma position + i = 0 + while i < 40: + if image_string[i] == ',': + break + i = i + 1 + image = Image.open(BytesIO(base64.b64decode(image_string[i + 1:len(image_string)]))) + else: + image = Image.open(self.path) + + if node.get('width')[-1].isdigit() is False or node.get('height')[-1].isdigit() is False: + inkex.utils.debug("Image seems to have some weird dimensions in XML structure. Please remove units from width and height attributes at ") + return + + parent = node.getparent() + if parent is not None and parent != self.document.getroot(): + tpc = parent.composed_transform() + x_offset = tpc.e + y_offset = tpc.f + else: + x_offset = 0.0 + y_offset = 0.0 + + # Write the embedded or linked image to temporary directory + if os.name == "nt": + exportfile = "Primitive.png" + else: + exportfile = "/tmp/Primitive.png" + + if image.mode != 'RGB': + image = image.convert('RGB') + image.save(exportfile, "png") + + ## Build up Primitive command according to your settings from extension GUI + if os.name == "nt": + command = "primitive" + else: + command = "./primitive" + command += " -m " + str(self.options.m) + command += " -rep " + str(self.options.rep) + command += " -r " + str(self.options.r) + command += " -s " + str(self.options.s) + command += " -a " + str(self.options.a) + if not self.options.bg_enabled: + command += " -bg " + self.rgbToHex(self.options.bg) + command += " -j " + str(self.options.j) + command += " -i " + exportfile + command += " -o " + exportfile + ".svg" + command += " -n " + str(self.options.n) + + #inkex.utils.debug(command) + + # Create the vector new SVG file + with os.popen(command, "r") as proc: + result = proc.read() + #inkex.utils.debug(result) + + # proceed if new SVG file was successfully created + doc = None + if os.path.exists(exportfile + ".svg"): + # Delete the temporary png file again because we do not need it anymore + if os.path.exists(exportfile): + os.remove(exportfile) + + # new parse the SVG file and insert it as new group into the current document tree + doc = etree.parse(exportfile + ".svg").getroot() + newGroup = self.document.getroot().add(inkex.Group()) + newGroup.attrib['transform'] = "matrix({:0.6f}, 0, 0, {:0.6f}, {:0.6f}, {:0.6f})".format( + float(node.get('width')) / float(doc.get('width')), + float(node.get('height')) / float(doc.get('height')), + float(node.get('x')) + x_offset, + float(node.get('y')) + y_offset + ) + newGroup.append(doc) + + # Delete the temporary svg file + if os.path.exists(exportfile + ".svg"): + try: + os.remove(exportfile + ".svg") + except: + pass + + else: + inkex.utils.debug("Error while creating output file! :-( The \"primitive\" executable seems to be missing, has no exec permissions or platform is imcompatible.") + exit(1) + #remove the old image or not + if self.options.keeporiginal is not True: + node.delete() + + # create clip path to remove the stuffy surroundings + if self.options.cliprect: + path = '//svg:defs' + defslist = self.document.getroot().xpath(path, namespaces=inkex.NSS) + if len(defslist) > 0: + defs = defslist[0] + clipPathData = {inkex.addNS('label', 'inkscape'):'imagetracerClipPath', 'clipPathUnits':'userSpaceOnUse', 'id':'imagetracerClipPath'} + clipPath = etree.SubElement(defs, 'clipPath', clipPathData) + #inkex.utils.debug(image.width) + clipBox = { + 'x':str(0), + 'y':str(0), + 'width':str(doc.get('width')), + 'height':str(doc.get('height')), + 'style':'fill:#000000; stroke:none; fill-opacity:1;' + } + etree.SubElement(clipPath, 'rect', clipBox) + #etree.SubElement(newGroup, 'g', {inkex.addNS('label','inkscape'):'imagetracerjs', 'clip-path':"url(#imagetracerClipPath)"}) + newGroup.getchildren()[0].set('clip-path','url(#imagetracerClipPath)') + else: + inkex.utils.debug("No image found for tracing. Please select an image first.") + +if __name__ == '__main__': + Primitive().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/printing_marks_dotted/printing_marks_dotted.inx b/extensions/fablabchemnitz/printing_marks_dotted/printing_marks_dotted.inx new file mode 100644 index 00000000..e91aa098 --- /dev/null +++ b/extensions/fablabchemnitz/printing_marks_dotted/printing_marks_dotted.inx @@ -0,0 +1,46 @@ + + + Printing Marks Dotted + fablabchemnitz.de.printing_marks_dotted + + + true + false + false + true + false + true + false + + + + + + + + + + + + + + 5 + + 5 + 5 + 5 + 5 + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/printing_marks_dotted/printing_marks_dotted.py b/extensions/fablabchemnitz/printing_marks_dotted/printing_marks_dotted.py new file mode 100644 index 00000000..06b62d8e --- /dev/null +++ b/extensions/fablabchemnitz/printing_marks_dotted/printing_marks_dotted.py @@ -0,0 +1,475 @@ +#!/usr/bin/env python3 +''' +This extension allows you to draw crop, registration and other +printing marks in Inkscape. + +Authors: + Nicolas Dufour - Association Inkscape-fr + Aurelio A. Heckert + +Copyright (C) 2008 Authors + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +''' + +from subprocess import Popen, PIPE, STDOUT +import math +import inkex +from lxml import etree + +class PrintingMarksDotted(inkex.EffectExtension): + + # Default parameters + stroke_width = 0.25 + + def add_arguments(self, pars): + pars.add_argument("--where_to_crop", default=True, help="Apply crop marks to...") + pars.add_argument("--crop_marks", type=inkex.Boolean, default=True, help="Draw crop Marks?") + pars.add_argument("--dotted_crop_marks", type=inkex.Boolean, default=True, help="Draw dotted crop Marks?") + pars.add_argument("--bleed_marks", type=inkex.Boolean, default=False, help="Draw Bleed Marks?") + pars.add_argument("--registration_marks", type=inkex.Boolean, default=False, help="Draw Registration Marks?") + pars.add_argument("--star_target", type=inkex.Boolean, default=False, help="Draw Star Target?") + pars.add_argument("--colour_bars", type=inkex.Boolean, default=False, help="Draw Colour Bars?") + pars.add_argument("--page_info", type=inkex.Boolean, default=False, help="Draw Page Information?") + pars.add_argument("--unit",default="px", help="Draw measurment") + pars.add_argument("--crop_offset", type=float, default=0, help="Offset") + pars.add_argument("--bleed_top", type=float, default=0, help="Bleed Top Size") + pars.add_argument("--bleed_bottom", type=float, default=0, help="Bleed Bottom Size") + pars.add_argument("--bleed_left", type=float, default=0, help="Bleed Left Size") + pars.add_argument("--bleed_right",type=float, default=0, help="Bleed Right Size") + pars.add_argument("--tab", help="The selected UI-tab when OK was pressed") + + def addMarker(self): + svg = self.document.getroot() + xpathStr = '//marker[@id="scissorsCroper"]' + maskElement = svg.xpath(xpathStr, namespaces=inkex.NSS) + if maskElement == []: + xpathStr = '//svg:defs' + defs = svg.xpath(xpathStr, namespaces=inkex.NSS) + line_attribs = {'markerWidth': "8.2212915", + 'markerHeight': "4.8983894", + 'orient': "auto", + 'id':"scissorsCroper"} + markerElement = etree.SubElement(defs[0],inkex.addNS('marker','svg'), line_attribs) + line_attribs = {'style': "fill:#000000;stroke:#ffffff;stroke-width:0.2;stroke-miterlimit:4;stroke-opacity:1", + 'id': "scissorsCroperPath", + 'd': "m -3.09375,-2.59375 c -0.2875213,-0.019086 -0.5530997,0.080418 -0.78125,0.25 -0.2281503,0.1695818 -0.4212781,0.4427198 -0.4375,0.75 -0.014236,0.2696628 0.032949,0.4281517 0.09375,0.53125 0.011692,0.019827 0.022314,0.017924 0.03125,0.03125 -0.074992,0.019409 -0.1886388,0.0360237 -0.34375,0.0625 -0.3217609,0.0549221 -0.7596575,0.13825127 -1.21875,0.375 l -3.03125,-1.125 c -0.2710413,-0.1042898 -0.5662791,-0.1829987 -0.875,-0.15625 -0.3087209,0.026749 -0.621076,0.1687088 -0.84375,0.4375 a 0.20792008,0.20792008 0 0 0 -0.03125,0.03125 0.20792008,0.20792008 0 0 0 -0.03125,0.0625 0.20792008,0.20792008 0 0 0 0,0.0625 0.20792008,0.20792008 0 0 0 0.03125,0.0625 0.20792008,0.20792008 0 0 0 0.03125,0.03125 0.20792008,0.20792008 0 0 0 0.09375,0.0625 l 2.9375,1.15625 -2.96875,1.125 a 0.20792008,0.20792008 0 0 0 -0.09375,0.0625 0.20792008,0.20792008 0 0 0 -0.03125,0.03125 0.20792008,0.20792008 0 0 0 -0.03125,0.0625 0.20792008,0.20792008 0 0 0 0,0.0625 0.20792008,0.20792008 0 0 0 0.03125,0.0625 0.20792008,0.20792008 0 0 0 0.03125,0.03125 C -10.094168,1.9539272 -9.4699318,1.9749423 -9,1.84375 L -5.71875,0.6875 c 0.481754,0.20541523 0.912658,0.3186677 1.1875,0.375 0.1483249,0.030401 0.2392409,0.045912 0.3125,0.0625 0.03663,0.00829 0.024599,-0.00324 0.03125,0 -0.0079,0.02335 -0.010635,0.041757 -0.03125,0.09375 -0.053917,0.1359822 -0.1506131,0.3500538 -0.09375,0.625 0.074929,0.3622982 0.3561361,0.6217769 0.65625,0.75 0.3001139,0.1282231 0.6300895,0.1440646 0.9375,0.03125 0.6444683,-0.175589 0.9014775,-0.9349259 0.625,-1.5 C -2.2324842,0.83910622 -2.4880622,0.66240891 -2.75,0.5625 -3.0119378,0.46259109 -3.2717529,0.42256233 -3.53125,0.4375 c -0.2805605,0.0161501 -0.5796777,0.0351178 -0.8125,-0.03125 -0.1944918,-0.0554414 -0.3308104,-0.18103045 -0.46875,-0.375 0.1925418,-0.25215792 0.4169804,-0.350782 0.71875,-0.375 0.3394341,-0.0272407 0.7247815,0.0434012 1.0625,0 0.010025,-6.5986e-4 0.021283,9.2632e-4 0.03125,0 0.5937358,-0.0551819 1.1050788,-0.57908524 1.0625,-1.1875 -0.00523,-0.6217326 -0.5853909,-1.0659264 -1.15625,-1.0625 z M -2.9375,-1.875 c 0.1401777,0.04894 0.2268596,0.139783 0.25,0.25 a 0.20792008,0.20792008 0 0 0 0.03125,0.03125 c 0.046997,0.1597651 -0.018243,0.2935457 -0.15625,0.40625 -0.1380068,0.1127043 -0.3531142,0.176154 -0.5,0.125 -0.1652738,-0.046651 -0.2408416,-0.1796945 -0.25,-0.34375 -0.00916,-0.1640555 0.046643,-0.3414062 0.21875,-0.4375 0.104863,-0.058549 0.2664752,-0.08005 0.40625,-0.03125 z m -0.21875,3.03125 c 0.2392165,0.047351 0.4697735,0.2941069 0.4375,0.53125 -0.010405,0.1211995 -0.066062,0.2235316 -0.1875,0.28125 C -3.0276883,2.0264684 -3.2009829,2.0387215 -3.3125,2 A 0.20792008,0.20792008 0 0 0 -3.34375,2 C -3.6474031,1.9320987 -3.710744,1.2999504 -3.40625,1.1875 a 0.20792008,0.20792008 0 0 0 0.03125,0 c 0.072689,-0.036572 0.1390112,-0.047034 0.21875,-0.03125 z"} + pathElement = etree.SubElement(markerElement, inkex.addNS('path','svg'), line_attribs) + + def draw_crop_line(self, x1, y1, x2, y2, name, parent): + if self.options.dotted_crop_marks == True: + self.addMarker() + style = { 'stroke': '#FFFFFF', 'stroke-width': str(self.stroke_width), + 'fill': 'none'} + else: + style = { 'stroke': '#000000', 'stroke-width': str(self.stroke_width), + 'fill': 'none'} + line_attribs = {'style': str(inkex.Style(style)), + 'id': name, + 'd': 'M '+str(x1)+','+str(y1)+' L '+str(x2)+','+str(y2)} + etree.SubElement(parent, 'path', line_attribs) + if self.options.dotted_crop_marks == True: + style = { 'stroke': '#000000', 'stroke-width': str(self.stroke_width), + 'fill': 'none' , 'marker-end':'url(#scissorsCroper)', + 'stroke-dasharray' :'0.5,0.25', 'stroke-miterlimit':"4"} + + line_attribs = {'style': str(inkex.Style(style)), + 'id': name + "_dotted", + 'd': 'M '+str(x1)+','+str(y1)+' L '+str(x2)+','+str(y2)} + etree.SubElement(parent, 'path', line_attribs) + + def draw_bleed_line(self, x1, y1, x2, y2, name, parent): + style = { 'stroke': '#000000', 'stroke-width': str(self.stroke_width), + 'fill': 'none', + 'stroke-miterlimit': '4', 'stroke-dasharray': '4, 2, 1, 2', + 'stroke-dashoffset': '0' } + line_attribs = {'style': str(inkex.Style(style)), + 'id': name, + 'd': 'M '+str(x1)+','+str(y1)+' L '+str(x2)+','+str(y2)} + etree.SubElement(parent, 'path', line_attribs) + + def draw_reg_circles(self, cx, cy, r, name, colours, parent): + for i in range(len(colours)): + style = {'stroke':colours[i], 'stroke-width':str(r / len(colours)), + 'fill':'none'} + circle_attribs = {'style':str(inkex.Style(style)), + inkex.addNS('label','inkscape'):name, + 'cx':str(cx), 'cy':str(cy), + 'r':str((r / len(colours)) * (i + 0.5))} + etree.SubElement(parent, inkex.addNS('circle','svg'), + circle_attribs) + + def draw_registration_marks(self, cx, cy, rotate, name, parent): + colours = ['#000000','#00ffff','#ff00ff','#ffff00','#000000'] + g = etree.SubElement(parent, 'g', { 'id': name }) + for i in range(len(colours)): + style = {'fill':colours[i], 'fill-opacity':'1', 'stroke':'none'} + r = (self.mark_size/2) + step = r + stroke = r / len(colours) + regoffset = stroke * i + regmark_attribs = {'style': str(inkex.Style(style)), + 'd': 'm' +\ + ' '+str(-regoffset)+','+str(r) +\ + ' '+str(-stroke) +',0' +\ + ' '+str(step) +','+str(-r) +\ + ' '+str(-step) +','+str(-r) +\ + ' '+str(stroke) +',0' +\ + ' '+str(step) +','+str(r) +\ + ' '+str(-step) +','+str(r) +\ + ' z', + 'transform': 'translate('+str(cx)+','+str(cy)+ \ + ') rotate('+str(rotate)+')'} + etree.SubElement(g, 'path', regmark_attribs) + + def draw_star_target(self, cx, cy, name, parent): + r = (self.mark_size/2) + style = {'fill':'#000 device-cmyk(1,1,1,1)', 'fill-opacity':'1', 'stroke':'none'} + d = ' M 0,0' + i = 0 + while i < ( 2 * math.pi ): + i += math.pi / 16 + d += ' L 0,0 ' +\ + ' L '+ str(math.sin(i)*r) +','+ str(math.cos(i)*r) +\ + ' L '+ str(math.sin(i+0.09)*r) +','+ str(math.cos(i+0.09)*r) + regmark_attribs = {'style':str(inkex.Style(style)), + inkex.addNS('label','inkscape'):name, + 'transform':'translate('+str(cx)+','+str(cy)+')', + 'd':d} + etree.SubElement(parent, inkex.addNS('path','svg'), + regmark_attribs) + + def draw_coluor_bars(self, cx, cy, rotate, name, parent): + g = etree.SubElement(parent, 'g', { + 'id':name, + 'transform':'translate('+str(cx)+','+str(cy)+\ + ') rotate('+str(rotate)+')' }) + l = min( self.mark_size / 3, max(self.area_w,self.area_h) / 45 ) + for bar in [{'c':'*', 'stroke':'#000', 'x':0, 'y':-(l+1)}, + {'c':'r', 'stroke':'#0FF', 'x':0, 'y':0}, + {'c':'g', 'stroke':'#F0F', 'x':(l*11)+1, 'y':-(l+1)}, + {'c':'b', 'stroke':'#FF0', 'x':(l*11)+1, 'y':0} + ]: + i = 0 + while i <= 1: + cr = '255' + cg = '255' + cb = '255' + if bar['c'] == 'r' or bar['c'] == '*' : cr = str(255*i) + if bar['c'] == 'g' or bar['c'] == '*' : cg = str(255*i) + if bar['c'] == 'b' or bar['c'] == '*' : cb = str(255*i) + r_att = {'fill':'rgb('+cr+','+cg+','+cb+')', + 'stroke':bar['stroke'], + 'stroke-width':'0.5', + 'x':str((l*i*10)+bar['x']), 'y':str(bar['y']), + 'width':str(l), 'height':str(l)} + r = etree.SubElement(g, 'rect', r_att) + i += 0.1 + + def get_selection_area(self): + scale = self.svg.unittouu('1px') # convert to document units + sel_area = {} + min_x, min_y, max_x, max_y = False, False, False, False + for id in self.options.ids: + sel_area[id] = {} + for att in [ "x", "y", "width", "height" ]: + args = [ "inkscape", "-I", id, "--query-"+att, self.options.input_file ] + sel_area[id][att] = scale* \ + float(Popen(args, stdout=PIPE, stderr=PIPE).communicate()[0]) + current_min_x = sel_area[id]["x"] + current_min_y = sel_area[id]["y"] + current_max_x = sel_area[id]["x"] + \ + sel_area[id]["width"] + current_max_y = sel_area[id]["y"] + \ + sel_area[id]["height"] + if not min_x: min_x = current_min_x + if not min_y: min_y = current_min_y + if not max_x: max_x = current_max_x + if not max_y: max_y = current_max_y + if current_min_x < min_x: min_x = current_min_x + if current_min_y < min_y: min_y = current_min_y + if current_max_x > max_x: max_x = current_max_x + if current_max_y > max_y: max_y = current_max_y + #inkex.errormsg( '>> '+ id + + # ' min_x:'+ str(min_x) + + # ' min_y:'+ str(min_y) + + # ' max_x:'+ str(max_x) + + # ' max_y:'+ str(max_y) ) + self.area_x1 = min_x + self.area_y1 = min_y + self.area_x2 = max_x + self.area_y2 = max_y + self.area_w = max_x - min_x + self.area_h = max_y - min_y + + def effect(self): + self.mark_size = self.svg.unittouu('1cm') + self.min_mark_margin = self.svg.unittouu('3mm') + + if self.options.where_to_crop == 'selection' : + self.get_selection_area() + #inkex.errormsg('Sory, the crop to selection is a TODO feature') + #exit(1) + else : + svg = self.document.getroot() + self.area_w = self.svg.unittouu(svg.get('width')) + self.area_h = self.svg.unittouu(svg.attrib['height']) + self.area_x1 = 0 + self.area_y1 = 0 + self.area_x2 = self.area_w + self.area_y2 = self.area_h + + # Get SVG document dimensions + # self.width must be replaced by self.area_x2. same to others. + svg = self.document.getroot() + #self.width = width = self.svg.unittouu(svg.get('width')) + #self.height = height = self.svg.unittouu(svg.attrib['height']) + + # Convert parameters to user unit + offset = self.svg.unittouu(str(self.options.crop_offset) + \ + self.options.unit) + bt = self.svg.unittouu(str(self.options.bleed_top) + self.options.unit) + bb = self.svg.unittouu(str(self.options.bleed_bottom) + self.options.unit) + bl = self.svg.unittouu(str(self.options.bleed_left) + self.options.unit) + br = self.svg.unittouu(str(self.options.bleed_right) + self.options.unit) + # Bleed margin + if bt < offset : bmt = 0 + else : bmt = bt - offset + if bb < offset : bmb = 0 + else : bmb = bb - offset + if bl < offset : bml = 0 + else : bml = bl - offset + if br < offset : bmr = 0 + else : bmr = br - offset + + # Define the new document limits + offset_left = self.area_x1 - offset + offset_right = self.area_x2 + offset + offset_top = self.area_y1 - offset + offset_bottom = self.area_y2 + offset + + # Get middle positions + middle_vertical = self.area_y1 + ( self.area_h / 2 ) + middle_horizontal = self.area_x1 + ( self.area_w / 2 ) + + # Test if printing-marks layer existis + layer = self.document.xpath( + '//*[@id="printing-marks" and @inkscape:groupmode="layer"]', + namespaces=inkex.NSS) + if layer: svg.remove(layer[0]) # remove if it existis + # Create a new layer + layer = etree.SubElement(svg, 'g') + layer.set('id', 'printing-marks') + layer.set(inkex.addNS('label', 'inkscape'), 'Printing Marks') + layer.set(inkex.addNS('groupmode', 'inkscape'), 'layer') + layer.set(inkex.addNS('insensitive', 'sodipodi'), 'true') + + # Crop Mark + if self.options.crop_marks == True: + # Create a group for Crop Mark + g_attribs = {inkex.addNS('label','inkscape'):'CropMarks', + 'id':'CropMarks'} + g_crops = etree.SubElement(layer, 'g', g_attribs) + + # Top left Mark + self.draw_crop_line(self.area_x1, offset_top, + self.area_x1, offset_top - self.mark_size, + 'cropTL1', g_crops) + self.draw_crop_line(offset_left, self.area_y1, + offset_left - self.mark_size, self.area_y1, + 'cropTL2', g_crops) + + # Top right Mark + self.draw_crop_line(self.area_x2, offset_top, + self.area_x2, offset_top - self.mark_size, + 'cropTR1', g_crops) + self.draw_crop_line(offset_right, self.area_y1, + offset_right + self.mark_size, self.area_y1, + 'cropTR2', g_crops) + + # Bottom left Mark + self.draw_crop_line(self.area_x1, offset_bottom, + self.area_x1, offset_bottom + self.mark_size, + 'cropBL1', g_crops) + self.draw_crop_line(offset_left, self.area_y2, + offset_left - self.mark_size, self.area_y2, + 'cropBL2', g_crops) + + # Bottom right Mark + self.draw_crop_line(self.area_x2, offset_bottom, + self.area_x2, offset_bottom + self.mark_size, + 'cropBR1', g_crops) + self.draw_crop_line(offset_right, self.area_y2, + offset_right + self.mark_size, self.area_y2, + 'cropBR2', g_crops) + + # Bleed Mark + if self.options.bleed_marks == True: + # Create a group for Bleed Mark + g_attribs = {inkex.addNS('label','inkscape'):'BleedMarks', + 'id':'BleedMarks'} + g_bleed = etree.SubElement(layer, 'g', g_attribs) + + # Top left Mark + self.draw_bleed_line(self.area_x1 - bl, offset_top - bmt, + self.area_x1 - bl, offset_top - bmt - self.mark_size, + 'bleedTL1', g_bleed) + self.draw_bleed_line(offset_left - bml, self.area_y1 - bt, + offset_left - bml - self.mark_size, self.area_y1 - bt, + 'bleedTL2', g_bleed) + + # Top right Mark + self.draw_bleed_line(self.area_x2 + br, offset_top - bmt, + self.area_x2 + br, offset_top - bmt - self.mark_size, + 'bleedTR1', g_bleed) + self.draw_bleed_line(offset_right + bmr, self.area_y1 - bt, + offset_right + bmr + self.mark_size, self.area_y1 - bt, + 'bleedTR2', g_bleed) + + # Bottom left Mark + self.draw_bleed_line(self.area_x1 - bl, offset_bottom + bmb, + self.area_x1 - bl, offset_bottom + bmb + self.mark_size, + 'bleedBL1', g_bleed) + self.draw_bleed_line(offset_left - bml, self.area_y2 + bb, + offset_left - bml - self.mark_size, self.area_y2 + bb, + 'bleedBL2', g_bleed) + + # Bottom right Mark + self.draw_bleed_line(self.area_x2 + br, offset_bottom + bmb, + self.area_x2 + br, offset_bottom + bmb + self.mark_size, + 'bleedBR1', g_bleed) + self.draw_bleed_line(offset_right + bmr, self.area_y2 + bb, + offset_right + bmr + self.mark_size, self.area_y2 + bb, + 'bleedBR2', g_bleed) + + # Registration Mark + if self.options.registration_marks == True: + # Create a group for Registration Mark + g_attribs = {inkex.addNS('label','inkscape'):'RegistrationMarks', + 'id':'RegistrationMarks'} + g_center = etree.SubElement(layer, 'g', g_attribs) + + # Left Mark + cx = max( bml + offset, self.min_mark_margin ) + self.draw_registration_marks(self.area_x1 - cx - (self.mark_size/2), + middle_vertical - self.mark_size*1.5, + '0', 'regMarkL', g_center) + + # Right Mark + cx = max( bmr + offset, self.min_mark_margin ) + self.draw_registration_marks(self.area_x2 + cx + (self.mark_size/2), + middle_vertical - self.mark_size*1.5, + '180', 'regMarkR', g_center) + + # Top Mark + cy = max( bmt + offset, self.min_mark_margin ) + self.draw_registration_marks(middle_horizontal, + self.area_y1 - cy - (self.mark_size/2), + '90', 'regMarkT', g_center) + + # Bottom Mark + cy = max( bmb + offset, self.min_mark_margin ) + self.draw_registration_marks(middle_horizontal, + self.area_y2 + cy + (self.mark_size/2), + '-90', 'regMarkB', g_center) + + # Star Target + if self.options.star_target == True: + # Create a group for Star Target + g_attribs = {inkex.addNS('label','inkscape'):'StarTarget', + 'id':'StarTarget'} + g_center = etree.SubElement(layer, 'g', g_attribs) + + if self.area_h < self.area_w : + # Left Star + cx = max( bml + offset, self.min_mark_margin ) + self.draw_star_target(self.area_x1 - cx - (self.mark_size/2), + middle_vertical, + 'starTargetL', g_center) + # Right Star + cx = max( bmr + offset, self.min_mark_margin ) + self.draw_star_target(self.area_x2 + cx + (self.mark_size/2), + middle_vertical, + 'starTargetR', g_center) + else : + # Top Star + cy = max( bmt + offset, self.min_mark_margin ) + self.draw_star_target(middle_horizontal - self.mark_size*1.5, + self.area_y1 - cy - (self.mark_size/2), + 'starTargetT', g_center) + # Bottom Star + cy = max( bmb + offset, self.min_mark_margin ) + self.draw_star_target(middle_horizontal - self.mark_size*1.5, + self.area_y2 + cy + (self.mark_size/2), + 'starTargetB', g_center) + + + # Colour Bars + if self.options.colour_bars == True: + # Create a group for Colour Bars + g_attribs = {inkex.addNS('label','inkscape'):'ColourBars', + 'id':'PrintingColourBars'} + g_center = etree.SubElement(layer, 'g', g_attribs) + + if self.area_h > self.area_w : + # Left Bars + cx = max( bml + offset, self.min_mark_margin ) + self.draw_coluor_bars(self.area_x1 - cx - (self.mark_size/2), + middle_vertical + self.mark_size, + 90, + 'PrintingColourBarsL', g_center) + # Right Bars + cx = max( bmr + offset, self.min_mark_margin ) + self.draw_coluor_bars(self.area_x2 + cx + (self.mark_size/2), + middle_vertical + self.mark_size, + 90, + 'PrintingColourBarsR', g_center) + else : + # Top Bars + cy = max( bmt + offset, self.min_mark_margin ) + self.draw_coluor_bars(middle_horizontal + self.mark_size, + self.area_y1 - cy - (self.mark_size/2), + 0, + 'PrintingColourBarsT', g_center) + # Bottom Bars + cy = max( bmb + offset, self.min_mark_margin ) + self.draw_coluor_bars(middle_horizontal + self.mark_size, + self.area_y2 + cy + (self.mark_size/2), + 0, + 'PrintingColourBarsB', g_center) + + + # Page Information + if self.options.page_info == True: + # Create a group for Page Information + g_attribs = {inkex.addNS('label','inkscape'):'PageInformation', + 'id':'PageInformation'} + g_pag_info = etree.SubElement(layer, 'g', g_attribs) + y_margin = max( bmb + offset, self.min_mark_margin ) + txt_attribs = { + 'style': 'font-size:12px;font-style:normal;font-weight:normal;fill:#000000;font-family:Bitstream Vera Sans,sans-serif;text-anchor:middle;text-align:center', + 'x': str(middle_horizontal), + 'y': str(self.area_y2+y_margin+self.mark_size+20) + } + txt = etree.SubElement(g_pag_info, 'text', txt_attribs) + txt.text = 'Page size: ' +\ + str(round(self.svg.uutounit(self.area_w,self.options.unit),2)) +\ + 'x' +\ + str(round(self.svg.uutounit(self.area_h,self.options.unit),2)) +\ + ' ' + self.options.unit + + +if __name__ == '__main__': + PrintingMarksDotted().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/purge_duplicate_path_nodes/purge_duplicate_path_nodes.inx b/extensions/fablabchemnitz/purge_duplicate_path_nodes/purge_duplicate_path_nodes.inx new file mode 100644 index 00000000..970d39e8 --- /dev/null +++ b/extensions/fablabchemnitz/purge_duplicate_path_nodes/purge_duplicate_path_nodes.inx @@ -0,0 +1,22 @@ + + + Purge Duplicate Path Nodes + fablabchemnitz.de.purge_duplicate_path_nodes + + false + 0.01 + false + 0.01 + + + path + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/purge_duplicate_path_nodes/purge_duplicate_path_nodes.py b/extensions/fablabchemnitz/purge_duplicate_path_nodes/purge_duplicate_path_nodes.py new file mode 100644 index 00000000..7403ed53 --- /dev/null +++ b/extensions/fablabchemnitz/purge_duplicate_path_nodes/purge_duplicate_path_nodes.py @@ -0,0 +1,101 @@ +#!/usr/bin/env python +# coding=utf-8 +# +# Copyright (C) 2020 Ellen Wasboe, ellen@wasbo.net +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +""" +Remove duplicate nodes or join nodes with distance less than specified. +Optionally join start node with end node of each subpath if distance less than specified. +""" + +import inkex +from inkex import bezier, PathElement, CubicSuperPath + +class PurgeDuplicatePathNodes(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument("--minlength", default="0") + pars.add_argument("--minUse", type=inkex.Boolean, default=False) + pars.add_argument("--maxdist", default="0") + pars.add_argument("--joinEnd", type=inkex.Boolean, default=False) + + """Remove duplicate nodes""" + def effect(self): + for id, elem in self.svg.selected.items(): + minlength=float(self.options.minlength) + maxdist=float(self.options.maxdist) + if self.options.minUse == False: + minlength=0 + if self.options.joinEnd == False: + maxdist=-1 + + #register which subpaths are closed + dList=str(elem.path).upper().split(' M') + closed=[""] + l=0 + for sub in dList: + if dList[l].find("Z") > -1: + closed.append(" Z ") + else: + closed.append("") + l+=1 + closed.pop(0) + + new = [] + s=0 + for sub in elem.path.to_superpath(): + new.append([sub[0]]) + i = 1 + while i <= len(sub) - 1: + length = bezier.cspseglength(new[-1][-1], sub[i]) #curve length + if length >= minlength: + new[-1].append(sub[i]) + else: + #average last node xy with this node xy and set this further node to last + new[-1][-1][1][0]= 0.5*(new[-1][-1][1][0]+sub[i][1][0]) + new[-1][-1][1][1]= 0.5*(new[-1][-1][1][1]+sub[i][1][1]) + new[-1][-1][-1]=sub[i][-1] + i += 1 + + if maxdist > -1: + #calculate distance between first and last node + #if <= maxdist set closed[i] to "Z " + last=new[-1][-1] + length = bezier.cspseglength(new[-1][-1], sub[0]) + if length <= maxdist: + newStartEnd=[0.5*(new[-1][-1][-1][0]+new[0][0][0][0]),0.5*(new[-1][-1][-1][1]+new[0][0][0][1])] + new[0][0][0]=newStartEnd + new[0][0][1]=newStartEnd + new[-1][-1][1]=newStartEnd + new[-1][-1][2]=newStartEnd + closed[s]=" Z " + s+=1 + + elem.path = CubicSuperPath(new).to_path(curves_only=True) + + #reset z to the originally closed paths (z lost in cubicsuperpath) + temppath=str(elem.path.to_absolute()).split('M ') + temppath.pop(0) + newPath='' + l=0 + for sub in temppath: + newPath=newPath+'M '+temppath[l]+closed[l] + l+=1 + elem.path=newPath + +if __name__ == '__main__': + PurgeDuplicatePathNodes().run() + diff --git a/extensions/fablabchemnitz/purge_duplicate_path_segments/purge_duplicate_path_segments.inx b/extensions/fablabchemnitz/purge_duplicate_path_segments/purge_duplicate_path_segments.inx new file mode 100644 index 00000000..c1a8eed1 --- /dev/null +++ b/extensions/fablabchemnitz/purge_duplicate_path_segments/purge_duplicate_path_segments.inx @@ -0,0 +1,16 @@ + + + Purge Duplicate Path Segments + fablabchemnitz.de.purge_duplicate_path_segments + + path + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/purge_duplicate_path_segments/purge_duplicate_path_segments.py b/extensions/fablabchemnitz/purge_duplicate_path_segments/purge_duplicate_path_segments.py new file mode 100644 index 00000000..76efcfce --- /dev/null +++ b/extensions/fablabchemnitz/purge_duplicate_path_segments/purge_duplicate_path_segments.py @@ -0,0 +1,123 @@ +#!/usr/bin/env python3 +''' +Copyright (C) 2010 David Turner + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin St Fifth Floor, Boston, MA 02139 +''' +import inkex +from inkex import paths +from collections import defaultdict + +class FixedRadiusSearch(): + def __init__(self, r=0.1): + self.r = r + self.seen = defaultdict(list) + + def round(self, f): + return int(round(f/self.r)) + + def bin(self, p): + return (self.round(p[0]), self.round(p[1])) + + def test(self, p, q): + return abs(self.round(p[0] - q[0])) <= 1 and abs(self.round(p[1] - q[1])) <= 1 + + def search(self, p): + b = self.bin(p) + for i in range(b[0]-1, b[0]+2): + for j in range(b[1]-1, b[1]+2): + for q in self.seen[(i, j)]: + if self.test(p, q): + return q + return None + + def add(self, p): + self.seen[self.bin(p)].append(p) + + def get_or_add(self, p): + result = self.search(p) + if result == None: + self.add(p) + return p + return result + +class PurgeDuplicatePathSegments(inkex.EffectExtension): + + def effect(self): + seenSegments = set() + coordsCache = FixedRadiusSearch() + + for element in self.svg.selected.values(): + if element.tag == inkex.addNS('path','svg'): + d = element.get('d') + path = paths.CubicSuperPath(d).to_path().to_arrays() + newPath = [] + start = prev = None + pathclosed = True + + for i in range(0, len(path)): + command = path[i][0] + coords = path[i][1] + + newCoords = [] + for x, y in zip(*[iter(coords)]*2): + newCoords.extend(list(coordsCache.get_or_add((x, y)))) + coords = newCoords + tcoords = tuple(coords) + + if command == 'M': + #remove this M command and it's point, if the next dataset conaints an M command too. + # Like "M 49.8584,109.276 M ..." which creates just a single point but not a valid path + if i+1 != len(path) and path[i][0] == path[i+1][0]: + continue + newPath.append([command, coords]) + start = prev = tcoords + pathclosed = True + elif command == 'L': + if ('L', prev, tcoords) in seenSegments or \ + ('L', tcoords, prev) in seenSegments: + newPath.append(['M', coords]) + pathclosed = False + else: + newPath.append([command, coords]) + seenSegments.add(('L', prev, tcoords)) + prev = tcoords + elif command == 'Z': + if ('L', prev, start) in seenSegments or \ + ('L', start, prev) in seenSegments: + newPath.append(['M', start]) + else: + if pathclosed: + newPath.append([command, coords]) + else: + newPath.append(['L', start]) + seenSegments.add(('L', prev, start)) + prev = start + elif command == 'C': + if ('C', prev, tcoords) in seenSegments or \ + ('C', tcoords[4:], (tcoords[2:4], tcoords[0:2], prev)) in seenSegments: + newPath.append(['M', coords[4:]]) + else: + newPath.append(['C', coords]) + seenSegments.add(('C', prev, tcoords)) + prev = tcoords[4:] + else: + newPath.append([command, coords]) + while len(newPath) and newPath[-1][0] == 'M': + newPath = newPath[:-1] + element.set('d',str(paths.Path(newPath))) + +if __name__ == '__main__': + PurgeDuplicatePathSegments().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/purge_pointy_paths/purge_pointy_paths.inx b/extensions/fablabchemnitz/purge_pointy_paths/purge_pointy_paths.inx new file mode 100644 index 00000000..66f529eb --- /dev/null +++ b/extensions/fablabchemnitz/purge_pointy_paths/purge_pointy_paths.inx @@ -0,0 +1,16 @@ + + + Purge Pointy Paths + fablabchemnitz.de.purge_pointy_paths + + path + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/purge_pointy_paths/purge_pointy_paths.py b/extensions/fablabchemnitz/purge_pointy_paths/purge_pointy_paths.py new file mode 100644 index 00000000..b5f7a188 --- /dev/null +++ b/extensions/fablabchemnitz/purge_pointy_paths/purge_pointy_paths.py @@ -0,0 +1,49 @@ +#!/usr/bin/env python3 + +""" +This filter deletes paths which render as point only + +More usesless and/or redundant filters for removing duplicate nodes and segments are provided by the following extension: +- https://stadtfabrikanten.org/display/IFM/Purge+Duplicate+Path+Segments +- https://stadtfabrikanten.org/display/IFM/Purge+Duplicate+Path+Nodes + +Extension for InkScape 1.X +Author: Mario Voigt / FabLab Chemnitz +Mail: mario.voigt@stadtfabrikanten.org +Date: 21.04.2021 +Last patch: 21.04.2021 +License: GNU GPL v3 +""" + +import inkex +from lxml import etree + +class PurgePointyPaths(inkex.EffectExtension): + + def effect(self): + if len(self.svg.selected) > 0: + for element in self.svg.selected.values(): + if isinstance(element, inkex.PathElement): + p = element.path + commandsCoords = p.to_arrays() + # "m 45.250809,91.692739" - this path contains onyl one command - a single point + if len(commandsCoords) == 1: + element.delete() + # "m 45.250809,91.692739 z" - this path contains two commands, but only one coordinate. + # It's a single point, the path is closed by a Z command + elif len(commandsCoords) == 2 and commandsCoords[0][1] == commandsCoords[1][1]: + element.delete() + # "m 45.250809,91.692739 l 45.250809,91.692739" - this path contains two commands, + # but the first and second coordinate are the same. It will render as point + elif len(commandsCoords) == 2 and commandsCoords[-1][0] == 'Z': + element.delete() + # "m 45.250809,91.692739 l 45.250809,91.692739 z" - this path contains three commands, + # but the first and second coordinate are the same. It will render as point, the path is closed by a Z command + elif len(commandsCoords) == 3 and commandsCoords[0][1] == commandsCoords[1][1] and commandsCoords[2][1] == 'Z': + element.delete() + else: + inkex.errormsg('Please select some objects first.') + return + +if __name__ == '__main__': + PurgePointyPaths().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/quick_joint/quick_joint.inx b/extensions/fablabchemnitz/quick_joint/quick_joint.inx new file mode 100644 index 00000000..8a80e327 --- /dev/null +++ b/extensions/fablabchemnitz/quick_joint/quick_joint.inx @@ -0,0 +1,38 @@ + + + Quick Joint + fablabchemnitz.de.quick_joint + + + + + 0 + 1 + + + 1 + + + 3.0 + 0.14 + + + + + + + + false + false + + path + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/quick_joint/quick_joint.py b/extensions/fablabchemnitz/quick_joint/quick_joint.py new file mode 100644 index 00000000..9c02aa66 --- /dev/null +++ b/extensions/fablabchemnitz/quick_joint/quick_joint.py @@ -0,0 +1,310 @@ + +#!/usr/bin/env python +''' +Copyright (C) 2017 Jarrett Rainier jrainier@gmail.com + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +''' +import inkex, cmath +from inkex.paths import Path, ZoneClose, Move +from lxml import etree + +debugEn = False +def debugMsg(input): + if debugEn: + inkex.utils.debug(input) + +def linesNumber(path): + retval = -1 + for elem in path: + debugMsg('linesNumber') + debugMsg(elem) + retval = retval + 1 + debugMsg('Number of lines : ' + str(retval)) + return retval + +def to_complex(point): + c = None + try: + c = complex(point.x, point.y) + except Exception as e: + pass + if c is not None: + return c + else: + inkex.utils.debug("The selection seems not be be a usable polypath. QuickJoint does not operate on curves. Try to flatten bezier curves or splitting up the path.") + exit(1) + + +class QuickJoint(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument('-s', '--side', type=int, default=0, help='Object face to tabify') + pars.add_argument('-n', '--numtabs', type=int, default=1, help='Number of tabs to add') + pars.add_argument('-l', '--numslots', type=int, default=1, help='Number of slots to add') + pars.add_argument('-t', '--thickness', type=float, default=3.0, help='Material thickness') + pars.add_argument('-k', '--kerf', type=float, default=0.14, help='Measured kerf of cutter') + pars.add_argument('-u', '--units', default='mm', help='Measurement units') + pars.add_argument('-e', '--edgefeatures', type=inkex.Boolean, default=False, help='Allow tabs to go right to edges') + pars.add_argument('-f', '--flipside', type=inkex.Boolean, default=False, help='Flip side of lines that tabs are drawn onto') + pars.add_argument('-a', '--activetab', default='', help='Tab or slot menus') + + def to_complex(self, command, line): + debugMsg('To complex: ' + command + ' ' + str(line)) + + return complex(line[0], line[1]) + + def get_length(self, line): + polR, polPhi = cmath.polar(line) + return polR + + def draw_parallel(self, start, guideLine, stepDistance): + polR, polPhi = cmath.polar(guideLine) + polR = stepDistance + return (cmath.rect(polR, polPhi) + start) + + def draw_perpendicular(self, start, guideLine, stepDistance, invert = False): + polR, polPhi = cmath.polar(guideLine) + polR = stepDistance + debugMsg(polPhi) + if invert: + polPhi += (cmath.pi / 2) + else: + polPhi -= (cmath.pi / 2) + debugMsg(polPhi) + debugMsg(cmath.rect(polR, polPhi)) + return (cmath.rect(polR, polPhi) + start) + + def draw_box(self, start, guideLine, xDistance, yDistance, kerf): + polR, polPhi = cmath.polar(guideLine) + + #Kerf expansion + if self.flipside: + start -= cmath.rect(kerf / 2, polPhi) + start -= cmath.rect(kerf / 2, polPhi + (cmath.pi / 2)) + else: + start -= cmath.rect(kerf / 2, polPhi) + start -= cmath.rect(kerf / 2, polPhi - (cmath.pi / 2)) + + lines = [] + lines.append(['M', [start.real, start.imag]]) + + #Horizontal + polR = xDistance + move = cmath.rect(polR + kerf, polPhi) + start + lines.append(['L', [move.real, move.imag]]) + start = move + + #Vertical + polR = yDistance + if self.flipside: + polPhi += (cmath.pi / 2) + else: + polPhi -= (cmath.pi / 2) + move = cmath.rect(polR + kerf, polPhi) + start + lines.append(['L', [move.real, move.imag]]) + start = move + + #Horizontal + polR = xDistance + if self.flipside: + polPhi += (cmath.pi / 2) + else: + polPhi -= (cmath.pi / 2) + move = cmath.rect(polR + kerf, polPhi) + start + lines.append(['L', [move.real, move.imag]]) + start = move + + lines.append(['Z', []]) + + return lines + + def draw_tabs(self, path, line): + #Male tab creation + start = to_complex(path[line]) + + closePath = False + #Line is between last and first (closed) nodes + end = None + if isinstance(path[line+1], ZoneClose): + end = to_complex(path[0]) + closePath = True + else: + end = to_complex(path[line+1]) + + debugMsg('start') + debugMsg(start) + debugMsg('end') + debugMsg(end) + + debugMsg('5-') + + if self.edgefeatures: + segCount = (self.numtabs * 2) - 1 + drawValley = False + else: + segCount = (self.numtabs * 2) + drawValley = False + + distance = end - start + debugMsg('distance ' + str(distance)) + debugMsg('segCount ' + str(segCount)) + + try: + if self.edgefeatures: + segLength = self.get_length(distance) / segCount + else: + segLength = self.get_length(distance) / (segCount + 1) + except: + debugMsg('in except') + segLength = self.get_length(distance) + + debugMsg('segLength - ' + str(segLength)) + newLines = [] + + # when handling firlt line need to set M back + if isinstance(path[line], Move): + newLines.append(['M', [start.real, start.imag]]) + + if self.edgefeatures == False: + newLines.append(['L', [start.real, start.imag]]) + start = self.draw_parallel(start, distance, segLength) + newLines.append(['L', [start.real, start.imag]]) + debugMsg('Initial - ' + str(start)) + + + for i in range(segCount): + if drawValley == True: + #Vertical + start = self.draw_perpendicular(start, distance, self.thickness, self.flipside) + newLines.append(['L', [start.real, start.imag]]) + debugMsg('ValleyV - ' + str(start)) + drawValley = False + #Horizontal + start = self.draw_parallel(start, distance, segLength) + newLines.append(['L', [start.real, start.imag]]) + debugMsg('ValleyH - ' + str(start)) + else: + #Vertical + start = self.draw_perpendicular(start, distance, self.thickness, not self.flipside) + newLines.append(['L', [start.real, start.imag]]) + debugMsg('HillV - ' + str(start)) + drawValley = True + #Horizontal + start = self.draw_parallel(start, distance, segLength) + newLines.append(['L', [start.real, start.imag]]) + debugMsg('HillH - ' + str(start)) + + if self.edgefeatures == True: + start = self.draw_perpendicular(start, distance, self.thickness, self.flipside) + newLines.append(['L', [start.real, start.imag]]) + debugMsg('Final - ' + str(start)) + + if closePath: + newLines.append(['Z', []]) + return newLines + + + def draw_slots(self, path): + #Female slot creation + + start = to_complex(path[0]) + end = to_complex(path[1]) + + if self.edgefeatures: + segCount = (self.numslots * 2) - 1 + else: + segCount = (self.numslots * 2) + + distance = end - start + debugMsg('distance ' + str(distance)) + debugMsg('segCount ' + str(segCount)) + + try: + if self.edgefeatures: + segLength = self.get_length(distance) / segCount + else: + segLength = self.get_length(distance) / (segCount + 1) + except: + segLength = self.get_length(distance) + + debugMsg('segLength - ' + str(segLength)) + newLines = [] + + line_style = str(inkex.Style({ 'stroke': '#000000', 'fill': 'none', 'stroke-width': str(self.svg.unittouu('0.1mm')) })) + + for i in range(segCount): + if (self.edgefeatures and (i % 2) == 0) or (not self.edgefeatures and (i % 2)): + newLines = self.draw_box(start, distance, segLength, self.thickness, self.kerf) + debugMsg(newLines) + + slot_id = self.svg.get_unique_id('slot') + g = etree.SubElement(self.svg.get_current_layer(), 'g', {'id':slot_id}) + + line_atts = { 'style':line_style, 'id':slot_id+'-inner-close-tab', 'd':str(Path(newLines)) } + etree.SubElement(g, inkex.addNS('path','svg'), line_atts ) + + #Find next point + polR, polPhi = cmath.polar(distance) + polR = segLength + start = cmath.rect(polR, polPhi) + start + + def effect(self): + self.side = self.options.side + self.numtabs = self.options.numtabs + self.numslots = self.options.numslots + self.thickness = self.svg.unittouu(str(self.options.thickness) + self.options.units) + self.kerf = self.svg.unittouu(str(self.options.kerf) + self.options.units) + self.units = self.options.units + self.edgefeatures = self.options.edgefeatures + self.flipside = self.options.flipside + self.activetab = self.options.activetab + + for id, node in self.svg.selected.items(): + debugMsg(node) + debugMsg('1') + if node.tag == inkex.addNS('path','svg'): + p = list(node.path.to_superpath().to_segments()) + debugMsg('2') + debugMsg(p) + + lines = linesNumber(p) + lineNum = self.side % lines + debugMsg(lineNum) + + newPath = [] + if self.activetab == 'tabpage': + newPath = self.draw_tabs(p, lineNum) + debugMsg('2') + debugMsg(p[:lineNum]) + debugMsg('3') + debugMsg(newPath) + debugMsg('4') + debugMsg( p[lineNum + 1:]) + finalPath = p[:lineNum] + newPath + p[lineNum + 1:] + + debugMsg(finalPath) + + node.set('d',str(Path(finalPath))) + elif self.activetab == 'slotpage': + newPath = self.draw_slots(p) + +if __name__ == '__main__': + QuickJoint().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/ratchet/ratchet.inx b/extensions/fablabchemnitz/ratchet/ratchet.inx new file mode 100644 index 00000000..9ec3e615 --- /dev/null +++ b/extensions/fablabchemnitz/ratchet/ratchet.inx @@ -0,0 +1,55 @@ + + + + Ratchet + fablabchemnitz.de.ratchet + 12 + true + 1.000 + 30.000 + 28.000 + + + + + + + + + + + + path + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/ratchet/ratchet.py b/extensions/fablabchemnitz/ratchet/ratchet.py new file mode 100644 index 00000000..8de9a9ee --- /dev/null +++ b/extensions/fablabchemnitz/ratchet/ratchet.py @@ -0,0 +1,114 @@ +#!/usr/bin/env python3 +# +# Copyright (C) 2016 Kie Brooks +# Distributed under GPLv3 or later. +# draw_ratchet +# version 0.1 +# +# This file is part of draw_ratchet +# +# draw_ratchet is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +# +# description : +# draw ratchet gears to arbitrary sizes and precision +# +# I am not an engineer, I am sure this little program could be improved or made much more complex, +# it may contain horrible flaws but it fills my current need and should be easy to improve on. +# Alternatively pay me some money and I might do it for you ;P +# +# This program is used by inkscape. +# It can be found in the menu : extensions -> render -> ratchet +# see file draw_ratch.inx +# (directory ~/.config/inkscape/extensions/) + +import inkex +import math +from lxml import etree + +def draw_SVG_circle(parent, r, cx, cy, name, style): + " structure an SVG circle entity under parent " + circ_attribs = {'style': str(inkex.Style(style)), + 'cx': str(cx), 'cy': str(cy), + 'r': str(r), + inkex.addNS('label','inkscape'): name} + circle = etree.SubElement(parent, inkex.addNS('circle','svg'), circ_attribs ) + +class Ratchet(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument("--centre_hole", type=inkex.Boolean, default=True, help="Show or not") + pars.add_argument("--teeth", type=int, default=12, help="Number of teeth around outside") + pars.add_argument("--centre_hole_diam", type=float, default=1, help="Dia of central hole") + pars.add_argument("--diam_in", type=float, default=28, help="Inner diamter of the Ratchet") + pars.add_argument("--diam_out", type=float, default=30, help="Outer diamter of the Ratchet") + pars.add_argument('--vtooth_shape', default='straight', help="Shape of tooth") + pars.add_argument('--htooth_shape', default='curve', help="Shape of tooth") + + def effect(self): + Line_style = {'stroke':'#000000','stroke-width':self.svg.unittouu(str(0.1) + "mm"),'fill':'none'} + # sort out the options + teeth = self.options.teeth + diam_in = self.options.diam_in + diam_out = self.options.diam_out + vtooth_shape = self.options.vtooth_shape + htooth_shape = self.options.htooth_shape + # Create group center of view + t = 'translate(%s,%s)' % (self.svg.namedview.center[0], self.svg.namedview.center[1]) + grp_attribs = {inkex.addNS('label','inkscape'):'Ratchet', 'transform':t} + grp = etree.SubElement(self.svg.get_current_layer(), 'g', grp_attribs) + # + # Central hole (at origin) + if self.options.centre_hole: + draw_SVG_circle(grp, self.options.centre_hole_diam, 0,0, 'Central_hole', Line_style) + #Polygon drawing + # + # L - line : x posn, y posn + # A - arc : radius x, radius y, x-axis rotation, large arc flag, sweep flag + # Points on the ratchet + # b + # |\ + # | \ |\ + # \ | \ | \ + # \ | \| \ + # a c \ + path = "M%s %s " %(diam_in,0) + for i in range(teeth): + angle = math.radians(i * 360/ teeth) + x_a = diam_in * math.cos(angle) + y_a = diam_in * math.sin(angle) + x_b = diam_out * math.cos(angle) + y_b = diam_out * math.sin(angle) + if vtooth_shape == "straight": + path += ' L %s %s ' %(x_b, y_b) + else: + path += " A %s,%s 0 0 0 %s %s" % (diam_in, diam_in, x_b, y_b) + # + angle_next = math.radians((i+1) * 360 / teeth) + x_c = diam_in * math.cos(angle_next) + y_c = diam_in * math.sin(angle_next) + if htooth_shape == "straight": + path += ' L %s %s ' %(x_c, y_c) + else: # Arc + path += " A %s,%s 0 0 1 %s %s" % (diam_in, diam_in, x_c, y_c) + # close path + path += 'z' + # draw it + line_attribs = {'style' : str(inkex.Style(Line_style)), inkex.addNS('label','inkscape') : 'Cone' } + line_attribs['d'] = path + etree.SubElement(grp, inkex.addNS('path','svg'), line_attribs ) + +if __name__ == "__main__": + Ratchet().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/remove_duplicate_guides/remove_duplicate_guides.inx b/extensions/fablabchemnitz/remove_duplicate_guides/remove_duplicate_guides.inx new file mode 100644 index 00000000..518bd5af --- /dev/null +++ b/extensions/fablabchemnitz/remove_duplicate_guides/remove_duplicate_guides.inx @@ -0,0 +1,16 @@ + + + Remove Duplicate Guides + fablabchemnitz.remove_duplicate_guides + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/remove_duplicate_guides/remove_duplicate_guides.py b/extensions/fablabchemnitz/remove_duplicate_guides/remove_duplicate_guides.py new file mode 100644 index 00000000..1d23c9e2 --- /dev/null +++ b/extensions/fablabchemnitz/remove_duplicate_guides/remove_duplicate_guides.py @@ -0,0 +1,130 @@ +#!/usr/bin/env python3 + + +# Copyright 2016 Luke Phillips (lukerazor@hotmail.com) +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +#along with this program; if not, write to the Free Software +#Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +# Extension dirs +# linux:~/.config/inkscape/extensions +# windows: [Drive]:\Program Files\Inkscape\share\extensions + +import inkex +import math +inkex.NSS[u'cs'] = u'http://www.razorfoss.org/tuckboxextension/' + +def printDebug(string): + inkex.utils.debug( _(str(string)) ) + +def isAlmost0(num): + return (abs(num) < 0.000001) + +def formatFloat(f): + if f == None: + return "None" + + return "{:.3f}".format(f) + +class Point(): + def __init__(self, x, y): + self.x = x + self.y = y + + def rotate(self, angle, origin): + """ + Rotate a point counterclockwise by a given angle around a given origin. + + The angle should be given in degrees. + """ + rads = math.radians(angle) + newX = origin.x + math.cos(rads) * (self.x - origin.x) - math.sin(rads) * (self.y - origin.y) + newY = origin.y + math.sin(rads) * (self.x - origin.x) + math.cos(rads) * (self.y - origin.y) + + return Point(newX, newY) + + def add(self, point): + return Point(self.x + point.x, self.y + point.y) + + @staticmethod + def parsePoint(pointString): + x, y = map(lambda v: float(v), pointString.split(",")) + return Point(x, y) + + @staticmethod + def parse(pointString, orientationString=None): + p1 = Point.parsePoint(pointString) + p = Point(p1.x, p1.y) + + if orientationString != None: + po = Point.parsePoint(orientationString) + p = p1.add(po.rotate(270, Point(0, 0))) + + return p + +class GuideDefiniton(): + def __init__(self, xmlNode): + self.node = xmlNode + self.id = self.node.attrib["id"] + + self.p1 = Point.parse(self.node.attrib["position"]) + self.p2 = Point.parse(self.node.attrib["position"], self.node.attrib["orientation"]) + + # calculate the slope and y intercept + self.slope = None # default to vertical line + self.yIntercept = None + self.xIntercept = self.p1.x + + if not isAlmost0(self.p1.x - self.p2.x): # not vertical + self.slope = (self.p2.y - self.p1.y)/(self.p2.x - self.p1.x) + + self.yIntercept = self.p1.y - (self.slope*self.p1.x) + if not isAlmost0(self.slope): # horizontal + self.xIntercept = -(self.yIntercept)/self.slope + else: + self.slope=0 + self.xIntercept = None + + #printDebug(self.toString()) + + def interceptSerial(self): + s = "{},{}".format(formatFloat(self.xIntercept), formatFloat(self.yIntercept)) + return s + + def toString(self): + #return "{} - p1:({}, {}) p2:({}, {}) - {}, {}, {}".format(self.id, self.p1.x, self.p1.y, self.p2.x, self.p2.y, self.slope, self.xIntercept, self.yIntercept) + return "{} - {}".format(self.id, self.interceptSerial()) + +class RemoveDuplicateGuides(inkex.EffectExtension): + + def effect(self): + # enumerate all guides + guideNodes = list(map(lambda n: GuideDefiniton(n), self.document.xpath('//sodipodi:guide',namespaces=inkex.NSS))) + + # sort guides into match xy intercept groups + groups = {} + for guide in guideNodes: + serial = guide.interceptSerial() + if serial not in groups: + groups[serial] = [] + + groups[serial].append(guide) + + + # now remove all the excess guides + for serial in groups: + for guide in groups[serial][1:]: # keep the first member of group + guide.node.delete() + +if __name__ == '__main__': + effect = RemoveDuplicateGuides().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/remove_empty_groups/remove_empty_groups.inx b/extensions/fablabchemnitz/remove_empty_groups/remove_empty_groups.inx new file mode 100644 index 00000000..82e1e250 --- /dev/null +++ b/extensions/fablabchemnitz/remove_empty_groups/remove_empty_groups.inx @@ -0,0 +1,16 @@ + + + Remove Empty Groups + fablabchemnitz.de.remove_empty_groups + + path + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/remove_empty_groups/remove_empty_groups.py b/extensions/fablabchemnitz/remove_empty_groups/remove_empty_groups.py new file mode 100644 index 00000000..651c8ed3 --- /dev/null +++ b/extensions/fablabchemnitz/remove_empty_groups/remove_empty_groups.py @@ -0,0 +1,36 @@ +#!/usr/bin/env python3 + +import inkex + +""" +Extension for InkScape 1.0 + +This extension is totally minimal. It will just clean the whole document from groups without content (dangling groups). That usually happens if you have a group but remove it's paths for example. The group will possibly stay in the XML tree. This also applies for layers because layers are just special types of groups. This effect applies to the whole document ONLY! + +Author: Mario Voigt / FabLab Chemnitz +Mail: mario.voigt@stadtfabrikanten.org +Date: 19.08.2020 +Last Patch: 01.04.2021 +License: GNU GPL v3 +""" + +class RemoveEmptyGroups(inkex.EffectExtension): + + def effect(self): + while True: + groups = self.document.xpath('//svg:g',namespaces=inkex.NSS) + oldLen = len(groups) + #leave the loop if there are no groups at all + if len(groups) == 0: + break + #loop trough groups. we have minimum of one to check for emptyness + for group in groups: + if len(group.getchildren()) == 0 and group.getparent() is not None: + group.getparent().remove(group) #deletes the deepest empty group + continue #we found minimum of one element to delete. so we should run another cycle to check if the parent of this group is empty after deletion + newLen = len(self.document.xpath('//svg:g',namespaces=inkex.NSS)) + if newLen == oldLen: #found no more empty groups. Leaving the loop + break + +if __name__ == '__main__': + RemoveEmptyGroups().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/remove_obsolete_attributes/remove_obsolete_attributes.inx b/extensions/fablabchemnitz/remove_obsolete_attributes/remove_obsolete_attributes.inx new file mode 100644 index 00000000..60350069 --- /dev/null +++ b/extensions/fablabchemnitz/remove_obsolete_attributes/remove_obsolete_attributes.inx @@ -0,0 +1,20 @@ + + + Remove Obsolete Attributes + fablabchemnitz.de.remove_obsolete_attributes + + true + true + true + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/remove_obsolete_attributes/remove_obsolete_attributes.py b/extensions/fablabchemnitz/remove_obsolete_attributes/remove_obsolete_attributes.py new file mode 100644 index 00000000..9010bff7 --- /dev/null +++ b/extensions/fablabchemnitz/remove_obsolete_attributes/remove_obsolete_attributes.py @@ -0,0 +1,44 @@ +#!/usr/bin/env python3 + +""" +Removes attributes sodipodi:absref, sodipodi:docbase and sodipodi:docname from all elements that contain them. + +full names of attributes +sodipodi:absref +{http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd}absref +sodipodi:docbase +{http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd}docbase +sodipodi:docname +{http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd}docname + +element.attrib.pop("{http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd}absref", None) +""" + +import inkex +import sys + +class RemoveObsoleteAttributes(inkex.EffectExtension): + def __init__(self): + inkex.Effect.__init__(self) + self.arg_parser.add_argument("-a", "--removeAbsref", type=inkex.Boolean, default=True, help="Remove sodipodi:absref") + self.arg_parser.add_argument("-b", "--removeDocbase", type=inkex.Boolean, default=True, help="Remove sodipodi:docbase") + self.arg_parser.add_argument("-n", "--removeDocname", type=inkex.Boolean, default=True, help="Remove sodipodi:docname") + + def effect(self): + if self.options.removeAbsref: + elements = self.document.xpath("//*[@sodipodi:absref]", namespaces=inkex.NSS) + for element in elements: + element.attrib.pop("{http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd}absref", None) + + if self.options.removeDocbase: + elements = self.document.xpath("//*[@sodipodi:docbase]", namespaces=inkex.NSS) + for element in elements: + element.attrib.pop("{http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd}docbase", None) + + if self.options.removeDocname: + elements = self.document.xpath("//*[@sodipodi:docname]", namespaces=inkex.NSS) + for element in elements: + element.attrib.pop("{http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd}docname", None) + +if __name__ == "__main__": + RemoveObsoleteAttributes().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/render_silhouette_regmarks/render_silhouette_regmarks.inx b/extensions/fablabchemnitz/render_silhouette_regmarks/render_silhouette_regmarks.inx new file mode 100644 index 00000000..f4d52efa --- /dev/null +++ b/extensions/fablabchemnitz/render_silhouette_regmarks/render_silhouette_regmarks.inx @@ -0,0 +1,20 @@ + + + Silhouette Cameo Registration Marks + fablabchemnitz.de.silhouette_cameo_registration_marks + 180 + 230 + 15 + 20 + + + all + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/render_silhouette_regmarks/render_silhouette_regmarks.py b/extensions/fablabchemnitz/render_silhouette_regmarks/render_silhouette_regmarks.py new file mode 100644 index 00000000..6ce61535 --- /dev/null +++ b/extensions/fablabchemnitz/render_silhouette_regmarks/render_silhouette_regmarks.py @@ -0,0 +1,101 @@ +# +# Copyright (C) 2021 miLORD1337 +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA. +# +""" +Base module for rendering regmarks for Silhouette CAMEO products in Inkscape. +""" + +import inkex +from lxml import etree + +SVG_URI = u'http://www.w3.org/2000/svg' + +class SilhouetteCameoRegistrationMarks(inkex.EffectExtension): + + def add_arguments(self, pars): + # Define string option "--what" with "-w" shortcut and default value "World". + # Layer name static, since self.document.getroot() not available on initialization + self.layername = 'silhouette-regmark' + + # Parse arguments + pars.add_argument("-X", "--reg-x", "--regwidth", type = float, dest = "regwidth", default = 180.0, help="X mark distance [mm]") + pars.add_argument("-Y", "--reg-y", "--reglength", type = float, dest = "reglength", default = 230.0, help="Y mark distance [mm]") + pars.add_argument("--rego-x", "--regoriginx", type = float, dest = "regoriginx", default = 15.0, help="X mark origin from left [mm]") + pars.add_argument("--rego-y", "--regoriginy", type = float, dest = "regoriginy", default = 20.0, help="X mark origin from top [mm]") + + #SVG rect element generation routine + def drawRect(self, size, pos, name): + x, y = pos + w, h = size + rect = etree.Element('{%s}rect' % SVG_URI) + rect.set('x', str(x)) + rect.set('y', str(y)) + rect.set('id', name) + rect.set('width', str(w)) + rect.set('height', str(h)) + rect.set('style', 'fill: black;') + return rect + + #SVG line element generation routine + def drawLine(self, posStart, posEnd, name): + x1, y1 = posStart + x2, y2, = posEnd + line = etree.Element('{%s}line' % SVG_URI) + line.set('x1', str(x1)) + line.set('y1', str(y1)) + line.set('x2', str(x2)) + line.set('y2', str(y2)) + line.set('id', name) + line.set('style', 'stroke: black; stroke-width: 0.5;') + return line + + def effect(self): + svg = self.document.getroot() + + # Create a new layer. + layer = etree.SubElement(svg, 'g') + layer.set(inkex.addNS('label', 'inkscape'), self.layername) + layer.set(inkex.addNS('groupmode', 'inkscape'), 'layer') + + # Create square in top left corner + layer.append(self.drawRect((5,5), (self.options.regoriginx,self.options.regoriginy), 'TopLeft')) + + # Create group for top right corner + topRight = etree.Element('{%s}g' % SVG_URI) + topRight.set('id', 'TopRight') + topRight.set('style', 'fill: black;') + + # Create horizontal and vertical lines in group + topRight.append(self.drawLine((self.options.regwidth-20,self.options.regoriginy), (self.options.regwidth,self.options.regoriginy), 'Horizontal')) + topRight.append(self.drawLine((self.options.regwidth,self.options.regoriginy), (self.options.regwidth,self.options.regoriginy + 20), 'Vertical')) + layer.append(topRight) + + # Create group for top right corner + bottomLeft = etree.Element('{%s}g' % SVG_URI) + bottomLeft.set('id', 'BottomLeft') + bottomLeft.set('style', 'fill: black;') + + # Create horizontal and vertical lines in group + bottomLeft.append(self.drawLine((self.options.regoriginx,self.options.reglength), (self.options.regoriginx+20,self.options.reglength), 'Horizontal')) + bottomLeft.append(self.drawLine((self.options.regoriginx,self.options.reglength), (self.options.regoriginx,self.options.reglength - 20), 'Vertical')) + layer.append(bottomLeft) + + #Lock layer + layer.set(inkex.addNS('insensitive', 'sodipodi'), 'true') + +if __name__ == '__main__': + SilhouetteCameoRegistrationMarks().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/replace_color_and_alpha/replace_color_and_alpha.inx b/extensions/fablabchemnitz/replace_color_and_alpha/replace_color_and_alpha.inx new file mode 100644 index 00000000..cfa67187 --- /dev/null +++ b/extensions/fablabchemnitz/replace_color_and_alpha/replace_color_and_alpha.inx @@ -0,0 +1,18 @@ + + + Replace Color And Alpha + fablabchemnitz.de.replace_color_and_alpha + 000000 + 000000 + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/replace_color_and_alpha/replace_color_and_alpha.py b/extensions/fablabchemnitz/replace_color_and_alpha/replace_color_and_alpha.py new file mode 100644 index 00000000..72fd742b --- /dev/null +++ b/extensions/fablabchemnitz/replace_color_and_alpha/replace_color_and_alpha.py @@ -0,0 +1,81 @@ +#!/usr/bin/env python3 +''' +This extension replace color and alpha from full inkscape document. + +Copyright (C) 2012 Jabiertxo Arraiza, jabier.arraiza@marker.es + +Version 0.2 + +TODO: +Comment Better!!! + +CHANGE LOG +0.1 Start 16/08/2012 + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +''' + +import inkex +import sys +import re +from lxml import etree + +class ReplaceColorAndAlpha(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument("--from_color", default="000000", help="Replace color") + pars.add_argument("--to_color", default="000000", help="By color + Alpha") + + def effect(self): + saveout = sys.stdout + sys.stdout = sys.stderr + fr = self.options.from_color.strip('"').strip('#').lower() + try: + alphaFr = str(float(int(self.options.from_color.strip('"').strip('#').lower()[-2:], 16))/255.0) + except: + pass + to = self.options.to_color.strip('"').strip('#').lower() + try: + alphaTo = str(float(int(self.options.to_color.strip('"').strip('#').lower()[-2:], 16))/255.0) + except: + pass + svg = self.document.getroot() + for element in svg.iter("*"): + style = element.get('style') + if style: + if (style.lower().find('fill:#'+fr[:6]) != -1 and len(fr) == 6) or (style.lower().find('fill-opacity:'+alphaFr[:4]) != -1 and len(fr)==8 and style.lower().find('fill:#'+fr[:6]) != -1): + style = re.sub('fill-opacity:.*?(;|$)', + '\\1', + style) + style = re.sub('fill:#.*?(;|$)', + 'fill:#' + to[:6] + '\\1', + style) + + style = style + ";fill-opacity:" + alphaTo + element.set('style',style) + + if (style.lower().find('stroke:#'+fr[:6]) != -1 and len(fr) == 6) or (style.lower().find('stroke:#'+fr[:6]) != -1 and style.lower().find('stroke-opacity:'+alphaFr[:4]) != -1 and len(fr)==8): + style = re.sub('stroke-opacity:.*?(;|$)', + '\\1', + style) + style = re.sub(r'stroke:#.*?(;|$)', + 'stroke:#' + to[:6] + '\\1', + style) + style = style + ";stroke-opacity:" + alphaTo + element.set('style',style) + sys.stdout = saveout + +if __name__ == '__main__': + ReplaceColorAndAlpha().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/reverse_order_of_subpaths/reverse_order_of_subpaths.inx b/extensions/fablabchemnitz/reverse_order_of_subpaths/reverse_order_of_subpaths.inx new file mode 100644 index 00000000..6354f821 --- /dev/null +++ b/extensions/fablabchemnitz/reverse_order_of_subpaths/reverse_order_of_subpaths.inx @@ -0,0 +1,17 @@ + + + Reverse Order Of Subpaths + fablabchemnitz.de.reverse_order_of_subpaths + + + path + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/reverse_order_of_subpaths/reverse_order_of_subpaths.py b/extensions/fablabchemnitz/reverse_order_of_subpaths/reverse_order_of_subpaths.py new file mode 100644 index 00000000..6fe2817d --- /dev/null +++ b/extensions/fablabchemnitz/reverse_order_of_subpaths/reverse_order_of_subpaths.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python3 +# +# Copyright (C) Ellen Wasbo, cutlings.wasbo.net 2021 +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +import inkex +from inkex import PathElement, CubicSuperPath + +class ReverseOrderOfSubpaths(inkex.EffectExtension): + + def reverse(self, element): + if element.tag == inkex.addNS('path','svg'): + new = [] + sub = element.path.to_superpath() + i = 0 + while i < len(sub): + new.append(sub[-1-i]) + i += 1 + element.path = CubicSuperPath(new).to_path(curves_only=True) + elif element.tag == inkex.addNS('g','svg'): + for child in element.getchildren(): + self.reverse(child) + + def effect(self): + """Reverse order of subpaths (combined paths) without reversing node-order or order of paths""" + if not self.svg.selected: + raise inkex.AbortExtension("Please select an object.") + for element in self.svg.selection.values(): + self.reverse(element) + +if __name__ == '__main__': + ReverseOrderOfSubpaths().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/robot_boxes/robot_boxes.inx b/extensions/fablabchemnitz/robot_boxes/robot_boxes.inx new file mode 100644 index 00000000..d2a1aefd --- /dev/null +++ b/extensions/fablabchemnitz/robot_boxes/robot_boxes.inx @@ -0,0 +1,38 @@ + + + Robot Boxes + fablabchemnitz.de.robot_boxes + 62.0 + 38.0 + 23.0 + 1.0 + 1.0 + 5.0 + 5.0 + + + + + + + + + + + + + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/robot_boxes/robot_boxes.py b/extensions/fablabchemnitz/robot_boxes/robot_boxes.py new file mode 100644 index 00000000..ffd51a7f --- /dev/null +++ b/extensions/fablabchemnitz/robot_boxes/robot_boxes.py @@ -0,0 +1,357 @@ +#!/usr/bin/env python3 +''' +Draw box with given width, height and depth. + +Use "Extensions / Modify Path / Convert to dashes" to convert dashed bend lines to CNC-friendly style. + +Copyright (C) 2015 Anton Moiseev (1i7.livejournal.com) + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +''' + +import inkex +from lxml import etree +from inkex.paths import Path +from inkex.styles import Style + +def dirtyFormat(path): + return str(path).replace('[','').replace(']','').replace(',','').replace('\'','') + +class RobotBoxes(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument("-x", "--width", type=float, default=62.0, help="The Box Width - in the X dimension") + pars.add_argument("-y", "--height", type=float, default=38.0, help="The Box Height - in the Y dimension") + pars.add_argument("-z", "--depth", type=float, default=23.0, help="The Box Depth - in the Z dimension") + pars.add_argument("-p", "--thickness", type=float, default=1.0, help="Paper thickness - important for thick carton") + pars.add_argument("-c", "--crampheight", type=float, default=1.0, help="Cramp ear height - render cramping ears and slots on the left and right walls (0 for no cramp)") + pars.add_argument("-d", "--dashwidth", type=float, default=5.0, help="Bend line dash width") + pars.add_argument("-s", "--dashstep", type=float, default=5.0, help="Bend line dash step") + pars.add_argument("-b", "--bendsurface", default="inner", help="Bend line surface (innder or outer) - depends on the way you will make actual bends") + pars.add_argument("-u", "--unit", default="mm", help="The unit of dimensions") + + def effect(self): + width = self.svg.unittouu( str(self.options.width) + self.options.unit ) + height = self.svg.unittouu( str(self.options.height) + self.options.unit ) + depth = self.svg.unittouu( str(self.options.depth) + self.options.unit ) + thickness = self.svg.unittouu( str(self.options.thickness) + self.options.unit ) + crampheight = self.svg.unittouu( str(self.options.crampheight) + self.options.unit ) + dashwidth = self.svg.unittouu( str(self.options.dashwidth) + self.options.unit ) + dashstep = self.svg.unittouu( str(self.options.dashstep) + self.options.unit ) + bendsurface = self.options.bendsurface + + # bend correction: it makes sense when compose the box whether the bend line would + # lay on the inner or outer surface of the thick carton + bcorr = 0 + if bendsurface == "inner": + bcorr = 0 + elif bendsurface == "outer": + bcorr = thickness + else :# "middle" + bcorr = thickness/2 + + # small ears (to be hidden inside the box borders) length + ear1 = height / 2 - bcorr*2 + + # slot width - make slots a bit thiner than ears (thickness) + slot_width_factor = 0.8 + slot_width = thickness * slot_width_factor + + # big ears skew = ~25 degrees + # skew_shift = depth*2/3 * tg(25) + skew_shift = depth*2/3 * 0.47 + + # render 2 cramps as 1/5 of box height with same (1/5 of height) step + cramp_width = height/5 + + # Generate box points + # Details on the shape here: + # https://github.com/1i7/metalrobot/blob/master/inkscape/extensions/robotbox-devel/draft1.svg + # https://github.com/1i7/metalrobot/blob/master/inkscape/extensions/robotbox-devel/draft2.svg + + # points for straight lines of the left bound + left_points = [ + # start from left bottom "ear" and go left and up + # ear 1 + 0,0, -ear1,0, + -ear1,depth, 0,depth, + # ear 2 + 0,depth+bcorr*2, -((thickness-bcorr)+slot_width+bcorr),depth+bcorr*2, -((thickness-bcorr)+slot_width+bcorr)-(depth+bcorr*2),depth+bcorr*2, + -((thickness-bcorr)+slot_width+bcorr)-(depth+bcorr*2)-(bcorr+slot_width+thickness+bcorr),depth+bcorr*2, + -((thickness-bcorr)+slot_width+bcorr)-(depth+bcorr*2)-(bcorr+slot_width+thickness+bcorr)-(bcorr+depth),depth+bcorr*2 + ] + + # render cramping ears if set + if crampheight > 0: + left_cramp_x = -((thickness-bcorr)+slot_width+bcorr)-(depth+bcorr*2)-(bcorr+slot_width+thickness+bcorr)-(bcorr+depth) + + left_points += [ + # left cramp ear1 + left_cramp_x,(depth+bcorr*2)+cramp_width, left_cramp_x-crampheight,(depth+bcorr*2)+cramp_width+thickness, + left_cramp_x-crampheight,(depth+bcorr*2)+cramp_width*2-thickness, left_cramp_x,(depth+bcorr*2)+cramp_width*2, + + # left cramp ear2 + left_cramp_x,(depth+bcorr*2)+cramp_width*3, left_cramp_x-crampheight,(depth+bcorr*2)+cramp_width*3+thickness, + left_cramp_x-crampheight,(depth+bcorr*2)+cramp_width*4-thickness, left_cramp_x,(depth+bcorr*2)+cramp_width*4 + ] + + + left_points += [ + # ear 2 finish + -((thickness-bcorr)+slot_width+bcorr)-(depth+bcorr*2)-(bcorr+slot_width+thickness+bcorr)-(bcorr+depth),(depth+bcorr*2)+height, + -((thickness-bcorr)+slot_width+bcorr)-(depth+bcorr*2)-(bcorr+slot_width+thickness+bcorr),(depth+bcorr*2)+height, + -((thickness-bcorr)+slot_width+bcorr)-(depth+bcorr*2),(depth+bcorr*2)+height, + -((thickness-bcorr)+slot_width+bcorr),(depth+bcorr*2)+height, 0,(depth+bcorr*2)+height, + # ear 3 + 0,(depth+bcorr*2)+(height+bcorr*2), -ear1,(depth+bcorr*2)+(height+bcorr*2), + -ear1,(depth+bcorr*2)+(height+bcorr*2)+depth, 0,(depth+bcorr*2)+(height+bcorr*2)+depth, bcorr+thickness+(thickness-bcorr),(depth+bcorr*2)+(height+bcorr*2)+depth, + # ear 4 + (bcorr+thickness+(thickness-bcorr)),(depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2), (bcorr+thickness+(thickness-bcorr))-depth*2/3,(depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2)+skew_shift, + (bcorr+thickness+(thickness-bcorr))-depth*2/3,(depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2)+height-skew_shift, (bcorr+thickness+(thickness-bcorr)),(depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2)+height + ] + + + # points for straight lines of the right bound + right_base_x = bcorr+thickness+width+thickness+bcorr + right_points = [ + # ear 7 + right_base_x-(bcorr+thickness+(thickness-bcorr)),(depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2)+height, right_base_x-(bcorr+thickness+(thickness-bcorr))+depth*2/3,(depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2)+height-skew_shift, + right_base_x-(bcorr+thickness+(thickness-bcorr))+depth*2/3,(depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2)+skew_shift, right_base_x-(bcorr+thickness+(thickness-bcorr)),(depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2), + # ear 8 + right_base_x-(bcorr+thickness+(thickness-bcorr)),(depth+bcorr*2)+(height+bcorr*2)+depth, right_base_x,(depth+bcorr*2)+(height+bcorr*2)+depth, right_base_x+ear1,(depth+bcorr*2)+(height+bcorr*2)+depth, + right_base_x+ear1,(depth+bcorr*2)+(height+bcorr*2), right_base_x,(depth+bcorr*2)+(height+bcorr*2), + # ear 9 + right_base_x,(depth+bcorr*2)+height, right_base_x+((thickness-bcorr)+slot_width+bcorr),(depth+bcorr*2)+height, + right_base_x+((thickness-bcorr)+slot_width+bcorr)+(depth+bcorr*2),(depth+bcorr*2)+height, + right_base_x+((thickness-bcorr)+slot_width+bcorr)+(depth+bcorr*2)+(bcorr+slot_width+thickness+bcorr),(depth+bcorr*2)+height, + right_base_x+((thickness-bcorr)+slot_width+bcorr)+(depth+bcorr*2)+(bcorr+slot_width+thickness+bcorr)+(bcorr+depth),(depth+bcorr*2)+height + ] + + # render cramping ears if set + if crampheight > 0: + right_cramp_x = right_base_x+((thickness-bcorr)+slot_width+bcorr)+(depth+bcorr*2)+(bcorr+slot_width+thickness+bcorr)+(bcorr+depth) + right_points += [ + # right cramp ear1 + right_cramp_x,(depth+bcorr*2)+height-cramp_width, right_cramp_x+crampheight,(depth+bcorr*2)+height-cramp_width-thickness, + right_cramp_x+crampheight,(depth+bcorr*2)+height-cramp_width*2+thickness, right_cramp_x,(depth+bcorr*2)+height-cramp_width*2, + + # right cramp ear2 + right_cramp_x,(depth+bcorr*2)+height-cramp_width*3, right_cramp_x+crampheight,(depth+bcorr*2)+height-cramp_width*3-thickness, + right_cramp_x+crampheight,(depth+bcorr*2)+height-cramp_width*4+thickness, right_cramp_x,(depth+bcorr*2)+height-cramp_width*4 + ] + + right_points += [ + # ear 9 finish + right_base_x+((thickness-bcorr)+slot_width+bcorr)+(depth+bcorr*2)+(bcorr+slot_width+thickness+bcorr)+(bcorr+depth),(depth+bcorr*2), + right_base_x+((thickness-bcorr)+slot_width+bcorr)+(depth+bcorr*2)+(bcorr+slot_width+thickness+bcorr),(depth+bcorr*2), + right_base_x+((thickness-bcorr)+slot_width+bcorr)+(depth+bcorr*2),(depth+bcorr*2), + right_base_x+((thickness-bcorr)+slot_width+bcorr),(depth+bcorr*2), right_base_x,(depth+bcorr*2), + # ear 10 + right_base_x,depth, right_base_x+ear1,depth, + right_base_x+ear1,0, right_base_x,0 + ] + + + bound_points = [ + [ 'M', left_points ], + # ear 5: manual shape (drawn for 62x38x23 box), converted to proportion based on depth value + # m 0,0 c -39.88719,-0.7697 -90.44391,-0.7593 -73.26685,35.3985 11.37507,22.1855 33.21015,45.182 73.26685,46.0975 z + [ 'L', [ + (bcorr+thickness+(thickness-bcorr)),(depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2)+(height+thickness+bcorr*2), + -(bcorr+(thickness-bcorr)),(depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2)+(height+thickness+bcorr*2) + ] ], + [ 'C', [ +# -39.88719, (depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2)+(height+bcorr*2)-0.7697, +# -90.44391, (depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2)+(height+bcorr*2)-0.7593, +# -73.26685, (depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2)+(height+bcorr*2)+35.3985, +# -73.26685+11.37507, (depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2)+(height+bcorr*2)+35.3985+22.1855, +# -73.26685+33.21015, (depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2)+(height+bcorr*2)+35.3985+45.182, + + -(bcorr+(thickness-bcorr))-depth/2, (depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2)+(height+thickness+bcorr*2), + -(bcorr+(thickness-bcorr))-depth/10*11, (depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2)+(height+thickness+bcorr*2), + -(bcorr+(thickness-bcorr))-depth/8*7, (depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2)+(height+thickness+bcorr*2)+depth/16*7, + -(bcorr+(thickness-bcorr))-depth/8*6, (depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2)+(height+thickness+bcorr*2)+depth/16*11, + -(bcorr+(thickness-bcorr))-depth/2, (depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2)+(height+thickness+bcorr*2)+depth, + -(bcorr+(thickness-bcorr)), (depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2)+(height+thickness+bcorr*2)+depth + ] ], + # now go to the right and go down in reverse order + # ear 6: manual shape (drawn for 62x38x23 box), converted to proportion based on depth value + [ 'L', [ + right_base_x+(bcorr+(thickness-bcorr)),(depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2)+(height+thickness+bcorr*2)+depth + ] ], + [ 'C', [ + right_base_x+(bcorr+(thickness-bcorr))+depth/2, (depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2)+(height+thickness+bcorr*2)+depth, + right_base_x+(bcorr+(thickness-bcorr))+depth/8*6, (depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2)+(height+thickness+bcorr*2)+depth/16*11, + right_base_x+(bcorr+(thickness-bcorr))+depth/8*7, (depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2)+(height+thickness+bcorr*2)+depth/16*7, + right_base_x+(bcorr+(thickness-bcorr))+depth/10*11, (depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2)+(height+thickness+bcorr*2), + right_base_x+(bcorr+(thickness-bcorr))+depth/2, (depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2)+(height+thickness+bcorr*2), + right_base_x+(bcorr+(thickness-bcorr)), (depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2)+(height+thickness+bcorr*2) + ] ], + [ 'L', [ + right_base_x-(bcorr+thickness+(thickness-bcorr)),(depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2)+(height+thickness+bcorr*2) + ] ], + # ear 7 + [ 'L', right_points ], + [ 'Z', [] ] + ] + + # render slots for cramp ears + # slot for left cramp ear1 + slot_l1 = [ [ 'M', [ + bcorr,(depth+bcorr*2)+cramp_width, bcorr+thickness,(depth+bcorr*2)+cramp_width, + bcorr+thickness,(depth+bcorr*2)+cramp_width*2, bcorr,(depth+bcorr*2)+cramp_width*2 + ] ], + [ 'Z', [] ] + ] + + # slot for left cramp ear2 + slot_l2 = [ [ 'M', [ + bcorr,(depth+bcorr*2)+cramp_width*3, bcorr+thickness,(depth+bcorr*2)+cramp_width*3, + bcorr+thickness,(depth+bcorr*2)+cramp_width*4, bcorr,(depth+bcorr*2)+cramp_width*4 + ] ], + [ 'Z', [] ] + ] + + # slot for right cramp ear1 + slot_r1 = [ [ 'M', [ + right_base_x-bcorr,(depth+bcorr*2)+height-cramp_width, right_base_x-(bcorr+thickness),(depth+bcorr*2)+height-cramp_width, + right_base_x-(bcorr+thickness),(depth+bcorr*2)+height-cramp_width*2, right_base_x-bcorr,(depth+bcorr*2)+height-cramp_width*2 + ] ], + [ 'Z', [] ] + ] + + # slot for right cramp ear2 + slot_r2 = [ [ 'M', [ + right_base_x-bcorr,(depth+bcorr*2)+height-cramp_width*3, right_base_x-(bcorr+thickness),(depth+bcorr*2)+height-cramp_width*3, + right_base_x-(bcorr+thickness),(depth+bcorr*2)+height-cramp_width*4, right_base_x-bcorr,(depth+bcorr*2)+height-cramp_width*4 + ] ], + [ 'Z', [] ] + ] + + # vertical bends + # left + # isinstance(item[1], (list, tuple)): self.append(PathCommand.letter_to_class(item[0])(*item[1])) + bend_line_vl1 = [ [ 'M', [ 0, 0, 0, depth ] ] ] + bend_line_vl2 = [ [ 'M', [ + -((thickness-bcorr)+slot_width+bcorr),(depth+bcorr*2), + -((thickness-bcorr)+slot_width+bcorr),(depth+bcorr*2)+height ] ] ] + bend_line_vl3 = [ [ 'M', [ + 0, (depth+bcorr*2)+(height+bcorr*2), + 0, (depth+bcorr*2)+(height+bcorr*2)+depth ] ] ] + bend_line_vl4 = [ [ 'M', [ + (bcorr+thickness+(thickness-bcorr)),(depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2), + (bcorr+thickness+(thickness-bcorr)),(depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2)+height ] ] ] + bend_line_vl5 = [ [ 'M', [ + -(bcorr+(thickness-bcorr)), (depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2)+(height+thickness+bcorr*2), + -(bcorr+(thickness-bcorr)), (depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2)+(height+thickness+bcorr*2)+depth ] ] ] + + + bend_line_vl6 = [ [ 'M', [ -((thickness-bcorr)+slot_width+bcorr)-(depth+bcorr*2), (depth+bcorr*2), + -((thickness-bcorr)+slot_width+bcorr)-(depth+bcorr*2), (depth+bcorr*2)+height ] ] ] + bend_line_vl7 = [ [ 'M', [ -((thickness-bcorr)+slot_width+bcorr)-(depth+bcorr*2)-(bcorr+slot_width+thickness+bcorr), (depth+bcorr*2), + -((thickness-bcorr)+slot_width+bcorr)-(depth+bcorr*2)-(bcorr+slot_width+thickness+bcorr), (depth+bcorr*2)+height ] ] ] + + # right + bend_line_vr1 = [ [ 'M', [ + right_base_x, 0, + right_base_x, depth ] ] ] + bend_line_vr2 = [ [ 'M', [ + right_base_x+((thickness-bcorr)+slot_width+bcorr),(depth+bcorr*2), + right_base_x+((thickness-bcorr)+slot_width+bcorr),(depth+bcorr*2)+height ] ] ] + bend_line_vr3 = [ [ 'M', [ + right_base_x, (depth+bcorr*2)+(height+bcorr*2), + right_base_x, (depth+bcorr*2)+(height+bcorr*2)+depth ] ] ] + bend_line_vr4 = [ [ 'M', [ + right_base_x-(bcorr+thickness+(thickness-bcorr)),(depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2), + right_base_x-(bcorr+thickness+(thickness-bcorr)),(depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2)+height ] ] ] + bend_line_vr5 = [ [ 'M', [ + right_base_x+(bcorr+(thickness-bcorr)), (depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2)+(height+thickness+bcorr*2), + right_base_x+(bcorr+(thickness-bcorr)), (depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2)+(height+thickness+bcorr*2)+depth ] ] ] + + + bend_line_vr6 = [ [ 'M', [ + right_base_x+((thickness-bcorr)+slot_width+bcorr)+(depth+bcorr*2), (depth+bcorr*2), + right_base_x+((thickness-bcorr)+slot_width+bcorr)+(depth+bcorr*2), (depth+bcorr*2)+height ] ] ] + bend_line_vr7 = [ [ 'M', [ + right_base_x+((thickness-bcorr)+slot_width+bcorr)+(depth+bcorr*2)+(bcorr+slot_width+thickness+bcorr), (depth+bcorr*2), + right_base_x+((thickness-bcorr)+slot_width+bcorr)+(depth+bcorr*2)+(bcorr+slot_width+thickness+bcorr), (depth+bcorr*2)+height ] ] ] + + # horizontal bends + bend_line_h1 = [ [ 'M', [ + 0,depth+bcorr, + right_base_x, depth+bcorr ] ] ] + bend_line_h2 = [ [ 'M', [ + 0,(depth+bcorr*2)+height+bcorr, + right_base_x, (depth+bcorr*2)+height+bcorr ] ] ] + bend_line_h3 = [ [ 'M', [ + (bcorr+thickness+(thickness-bcorr)), (depth+bcorr*2)+(height+bcorr*2)+depth+bcorr, + right_base_x-(bcorr+thickness+(thickness-bcorr)), (depth+bcorr*2)+(height+bcorr*2)+depth+bcorr ] ] ] + bend_line_h4 = [ [ 'M', [ + (bcorr+thickness+(thickness-bcorr)), (depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2)+height+thickness+bcorr, + right_base_x-(bcorr+thickness+(thickness-bcorr)), (depth+bcorr*2)+(height+bcorr*2)+(depth+bcorr*2)+height+thickness+bcorr ] ] ] + + + # Embed drawing in group to make animation easier: + # Translate group + t = 'translate(' + str( self.svg.namedview.center[0] ) + ',' + str( self.svg.namedview.center[1] ) + ')' + g_attribs = {inkex.addNS('label','inkscape'):'RobotBox', 'transform':t } + g = etree.SubElement(self.svg.get_current_layer(), 'g', g_attribs) + + # Create SVG Path for box bounds + style = { 'stroke': '#000000', 'fill': 'none', 'stroke-width':'0.1' } + etree.SubElement(g, inkex.addNS('path','svg'), {'style':str(inkex.Style(style)), 'd':dirtyFormat(bound_points)} ) + + # Create SVG paths for crmap slots if set + # render slots for cramp ears + if crampheight > 0: + etree.SubElement(g, inkex.addNS('path','svg'), {'style':str(inkex.Style(style)), 'd':dirtyFormat(slot_l1)} ) + etree.SubElement(g, inkex.addNS('path','svg'), {'style':str(inkex.Style(style)), 'd':dirtyFormat(slot_l2)} ) + etree.SubElement(g, inkex.addNS('path','svg'), {'style':str(inkex.Style(style)), 'd':dirtyFormat(slot_r1)} ) + etree.SubElement(g, inkex.addNS('path','svg'), {'style':str(inkex.Style(style)), 'd':dirtyFormat(slot_r2)} ) + + # Create SVG Paths for bend lines + # draw bend lines with blue + style = { 'stroke': '#44aaff', 'fill': 'none', 'stroke-width':'0.1', + #'stroke-dasharray': str(dashwidth) + ',' + str(dashstep), + # positive dash offset moves dash backward + #'stroke-dashoffset': str(dashwidth) + } + + # left + etree.SubElement(g, inkex.addNS('path','svg'), {'style':str(inkex.Style(style)), 'd':dirtyFormat(bend_line_vl1)} ) + etree.SubElement(g, inkex.addNS('path','svg'), {'style':str(inkex.Style(style)), 'd':dirtyFormat(bend_line_vl2)} ) + etree.SubElement(g, inkex.addNS('path','svg'), {'style':str(inkex.Style(style)), 'd':dirtyFormat(bend_line_vl3)} ) + etree.SubElement(g, inkex.addNS('path','svg'), {'style':str(inkex.Style(style)), 'd':dirtyFormat(bend_line_vl4)} ) + etree.SubElement(g, inkex.addNS('path','svg'), {'style':str(inkex.Style(style)), 'd':dirtyFormat(bend_line_vl5)} ) + etree.SubElement(g, inkex.addNS('path','svg'), {'style':str(inkex.Style(style)), 'd':dirtyFormat(bend_line_vl6)} ) + etree.SubElement(g, inkex.addNS('path','svg'), {'style':str(inkex.Style(style)), 'd':dirtyFormat(bend_line_vl7)} ) + + # right + etree.SubElement(g, inkex.addNS('path','svg'), {'style':str(inkex.Style(style)), 'd':dirtyFormat(bend_line_vr1)} ) + etree.SubElement(g, inkex.addNS('path','svg'), {'style':str(inkex.Style(style)), 'd':dirtyFormat(bend_line_vr2)} ) + etree.SubElement(g, inkex.addNS('path','svg'), {'style':str(inkex.Style(style)), 'd':dirtyFormat(bend_line_vr3)} ) + etree.SubElement(g, inkex.addNS('path','svg'), {'style':str(inkex.Style(style)), 'd':dirtyFormat(bend_line_vr4)} ) + etree.SubElement(g, inkex.addNS('path','svg'), {'style':str(inkex.Style(style)), 'd':dirtyFormat(bend_line_vr5)} ) + etree.SubElement(g, inkex.addNS('path','svg'), {'style':str(inkex.Style(style)), 'd':dirtyFormat(bend_line_vr6)} ) + etree.SubElement(g, inkex.addNS('path','svg'), {'style':str(inkex.Style(style)), 'd':dirtyFormat(bend_line_vr7)} ) + + # horizontal + etree.SubElement(g, inkex.addNS('path','svg'), {'style':str(inkex.Style(style)), 'd':dirtyFormat(bend_line_h1)} ) + etree.SubElement(g, inkex.addNS('path','svg'), {'style':str(inkex.Style(style)), 'd':dirtyFormat(bend_line_h2)} ) + etree.SubElement(g, inkex.addNS('path','svg'), {'style':str(inkex.Style(style)), 'd':dirtyFormat(bend_line_h3)} ) + etree.SubElement(g, inkex.addNS('path','svg'), {'style':str(inkex.Style(style)), 'd':dirtyFormat(bend_line_h4)} ) + +if __name__ == '__main__': + RobotBoxes().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/roland_cutstudio_eps_export/roland_cutstudio_eps_export.inx b/extensions/fablabchemnitz/roland_cutstudio_eps_export/roland_cutstudio_eps_export.inx new file mode 100644 index 00000000..09ab8ecf --- /dev/null +++ b/extensions/fablabchemnitz/roland_cutstudio_eps_export/roland_cutstudio_eps_export.inx @@ -0,0 +1,15 @@ + + + Roland CutStudio *.eps Export + fablabchemnitz.de.roland_cutstudio_eps_export + + .eps + application/postscript + Roland CutStudio compatible (*.eps) + Desktop Cutting Plotter + true + + + diff --git a/extensions/fablabchemnitz/roland_cutstudio_eps_export/roland_cutstudio_eps_export.py b/extensions/fablabchemnitz/roland_cutstudio_eps_export/roland_cutstudio_eps_export.py new file mode 100644 index 00000000..a48d4b92 --- /dev/null +++ b/extensions/fablabchemnitz/roland_cutstudio_eps_export/roland_cutstudio_eps_export.py @@ -0,0 +1,262 @@ +#!/usr/bin/env python3 +# SPDX-License-Identifier: GPL-2.0-or-later +''' +Roland CutStudio export script +Copyright (C) 2014 - 2020 Max Gaukler + +skeleton based on visicut Inkscape Plugin : +Copyright (C) 2012 Thomas Oster, thomas.oster@rwth-aachen.de + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +''' + +import sys +import os +import shutil +import numpy +from functools import reduce +import inkex +import inkex.command +from inkex.command import inkscape + +def message(s): + sys.stderr.write(s+"\n") +def debug(s): + message(s) + +# header +# for debugging purposes you can open the resulting EPS file in Inkscape, +# select all, ungroup multiple times +# --> now you can view the exported lines in inkscape +prefix=""" +%!PS-Adobe-3.0 EPSF-3.0 +%%LanguageLevel: 2 +%%BoundingBox -10000 -10000 10000 10000 +%%EndComments +%%BeginSetup +%%EndSetup +%%BeginProlog +% This code (until EndProlog) is from an inkscape-exported EPS, copyright unknown, see cairo-library +save +50 dict begin +/q { gsave } bind def +/Q { grestore } bind def +/cm { 6 array astore concat } bind def +/w { setlinewidth } bind def +/J { setlinecap } bind def +/j { setlinejoin } bind def +/M { setmiterlimit } bind def +/d { setdash } bind def +/m { moveto } bind def +/l { lineto } bind def +/c { curveto } bind def +/h { closepath } bind def +/re { exch dup neg 3 1 roll 5 3 roll moveto 0 rlineto + 0 exch rlineto 0 rlineto closepath } bind def +/S { stroke } bind def +/f { fill } bind def +/f* { eofill } bind def +/n { newpath } bind def +/W { clip } bind def +/W* { eoclip } bind def +/BT { } bind def +/ET { } bind def +/pdfmark where { pop globaldict /?pdfmark /exec load put } + { globaldict begin /?pdfmark /pop load def /pdfmark + /cleartomark load def end } ifelse +/BDC { mark 3 1 roll /BDC pdfmark } bind def +/EMC { mark /EMC pdfmark } bind def +/cairo_store_point { /cairo_point_y exch def /cairo_point_x exch def } def +/Tj { show currentpoint cairo_store_point } bind def +/TJ { + { + dup + type /stringtype eq + { show } { -0.001 mul 0 cairo_font_matrix dtransform rmoveto } ifelse + } forall + currentpoint cairo_store_point +} bind def +/cairo_selectfont { cairo_font_matrix aload pop pop pop 0 0 6 array astore + cairo_font exch selectfont cairo_point_x cairo_point_y moveto } bind def +/Tf { pop /cairo_font exch def /cairo_font_matrix where + { pop cairo_selectfont } if } bind def +/Td { matrix translate cairo_font_matrix matrix concatmatrix dup + /cairo_font_matrix exch def dup 4 get exch 5 get cairo_store_point + /cairo_font where { pop cairo_selectfont } if } bind def +/Tm { 2 copy 8 2 roll 6 array astore /cairo_font_matrix exch def + cairo_store_point /cairo_font where { pop cairo_selectfont } if } bind def +/g { setgray } bind def +/rg { setrgbcolor } bind def +/d1 { setcachedevice } bind def +%%EndProlog +%%Page: 1 1 +%%BeginPageSetup +%%PageBoundingBox: -10000 -10000 10000 10000 +%%EndPageSetup +% This is a severely crippled fucked-up pseudo-postscript for importing in Roland CutStudio +% Do not even try to open it with something else +% FIXME opening with inkscape currently does not show any objects, although it worked some time in the past + +% Inkscape header, not used by cutstudio +% Start +q -10000 -10000 10000 10000 rectclip q + +0 g +0.286645 w +0 J +0 j +[] 0.0 d +4 M q +% Cutstudio Start +""" +postfix=""" +% Cutstudio End + +%this is necessary for CutStudio so that the last line isnt skipped: +0 0 m + +% Inkscape footer +S Q +Q Q +showpage +%%Trailer +end restore +%%EOF +""" + +class RolandCutStudioEPSExport(inkex.OutputExtension): + + def save(self, stream): + def outputFromStack(stack, n, transformCoordinates=True): + arr=stack[-(n+1):-1] + if transformCoordinates: + arrTransformed=[] + for i in range(n//2): + arrTransformed+=transform(arr[2*i], arr[2*i+1]) + return output(arrTransformed+[stack[-1]]) + else: + return output(arr+[stack[-1]]) + + def transform(x, y): + #debug("trafo from: {} {}".format(x, y)) + p=numpy.array([[float(x),float(y),1]]).transpose() + multiply = lambda a, b: numpy.matmul(a, b) + # concatenate transformations by multiplying: new = transformation x previousTransformtaion + m=reduce(multiply, scalingStack[::-1]) + m=m.transpose() + #debug("with {}".format(m)) + pnew = numpy.matmul(m, p) + x=float(pnew[0]) + y=float(pnew[1]) + #debug("to: {} {}".format(x, y)) + return [x, y] + + def toString(v): + """ + like str(), but gives the exact same output for floats across python2 and python3 + """ + if isinstance(v, (type(float()), type(int()))): + return repr(v) + else: + return str(v) + def outputMoveto(x, y): + [xx, yy]=transform(x, y) + return output([toString(xx), toString(yy), "m"]) + + def outputLineto(x, y): + [xx, yy]=transform(x, y) + return output([toString(xx), toString(yy), "l"]) + + def output(array): + array=list(map(toString, array)) + output=" ".join(array) + #debug("OUTPUT: "+output) + return output + "\n" + + filename = self.options.input_file + shutil.copyfile(filename, filename + ".filtered.svg") + + actions_list=[] + actions_list.append("export-text-to-path") + actions_list.append("export-ignore-filters") + actions_list.append("export-area-drawing") + actions_list.append("export-filename:{}".format(filename + ".inkscape.eps")) + actions_list.append("export-do") + actions = ";".join(actions_list) + cli_output = inkscape(filename + ".filtered.svg", actions=actions) #process recent file + if len(cli_output) > 0: + self.msg("Inkscape returned the following output when trying to run the file export; the file export may still have worked:") + self.msg(cli_output) + + inkscape_eps_file = filename + ".inkscape.eps" + assert os.path.exists(inkscape_eps_file), 'EPS conversion failed: command did not create result file: ' + '"' + '" "'.join(cmd) + '"' + stack=[] + scalingStack=[numpy.identity(3)] + lastMoveCoordinates=None + outputStr=prefix + inputFile=open(inkscape_eps_file) + for line in inputFile.readlines(): + line=line.strip() + if line.startswith("%"): + # comment line + continue + if line.endswith("re W n"): + continue # ignore clipping rectangle + #debug(line) + for item in line.split(" "): + item=item.strip() + if item=="": + continue + #debug("INPUT: " + item.__repr__()) + stack.append(item) + if item=="h": # close path + assert lastMoveCoordinates, "closed path before first moveto" + outputStr += outputLineto(float(lastMoveCoordinates[0]), float(lastMoveCoordinates[1])) + elif item == "c": # bezier curveto + outputStr += outputFromStack(stack, 6) + stack=[] + elif item=="re": # rectangle + x=float(stack[-5]) + y=float(stack[-4]) + dx=float(stack[-3]) + dy=float(stack[-2]) + outputStr += outputMoveto(x, y) + outputStr += outputLineto(x+dx, y) + outputStr += outputLineto(x+dx, y+dy) + outputStr += outputLineto(x, y+dy) + outputStr += outputLineto(x, y) + elif item=="cm": # matrix transformation + newTrafo=numpy.array([[float(stack[-7]), float(stack[-6]), 0], [float(stack[-5]), float(stack[-4]), 0], [float(stack[-3]), float(stack[-2]), 1]]) + #debug("applying trafo "+str(newTrafo)) + scalingStack[-1] = numpy.matmul(scalingStack[-1], newTrafo) + elif item=="q": # save graphics state to stack + scalingStack.append(numpy.identity(3)) + elif item=="Q": # pop graphics state from stack + scalingStack.pop() + elif item in ["m", "l"]: + if item=="m": # moveto + lastMoveCoordinates=stack[-3:-1] + elif item=="l": # lineto + pass + outputStr += outputFromStack(stack, 2) + stack=[] + else: + pass # do nothing + outputStr += postfix + inputFile.close() + stream.write(outputStr.encode('utf-8')) + +if __name__ == '__main__': + RolandCutStudioEPSExport().run() diff --git a/extensions/fablabchemnitz/rotations/rotate_helper.py b/extensions/fablabchemnitz/rotations/rotate_helper.py new file mode 100644 index 00000000..776755b9 --- /dev/null +++ b/extensions/fablabchemnitz/rotations/rotate_helper.py @@ -0,0 +1,59 @@ +#! /usr/bin/env python3 +''' +Copyright (C) 2019 Grant Patterson + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +''' + +from math import copysign, cos, pi, sin +from inkex import Transform + +STEPS = 360 + +def rotate_matrix(node, a): + bbox = node.bounding_box() + cx = bbox.center_x / 2.0 + cy = bbox.center_y / 2.0 + return Transform([[cos(a), -sin(a), cx], [sin(a), cos(a), cy]]) * Transform([[1, 0, -cx], [0, 1, -cy]]) + +def optimal_rotations(node): + step = pi / float(STEPS) + bbox = node.bounding_box() + min_width = bbox.right - bbox.left + min_width_angle = None + min_bbox_area = min_width * (bbox.bottom - bbox.top) + min_bbox_area_angle = None + + for i in range(STEPS): + angle = -pi/2.0 + i*step + rotated = node.bounding_box(rotate_matrix(node, angle)) + + width = rotated.width + height = rotated.height + bbox_area = width * height + + if width < min_width: + min_width = width + min_width_angle = angle + if bbox_area < min_bbox_area: + if width > height: + # To keep results similar to min_width_angle, rotate by an + # additional 90 degrees which doesn't affect bbox area. + angle -= copysign(pi/2.0, angle) + + min_bbox_area = bbox_area + min_bbox_area_angle = angle + + return min_width_angle, min_bbox_area_angle \ No newline at end of file diff --git a/extensions/fablabchemnitz/rotations/rotations_find_all_optimal.inx b/extensions/fablabchemnitz/rotations/rotations_find_all_optimal.inx new file mode 100644 index 00000000..490c1b29 --- /dev/null +++ b/extensions/fablabchemnitz/rotations/rotations_find_all_optimal.inx @@ -0,0 +1,16 @@ + + + Rotations - Find All Optimal + fablabchemnitz.de.rotations_find_all_optimal + + all + + + + + + + + diff --git a/extensions/fablabchemnitz/rotations/rotations_find_all_optimal.py b/extensions/fablabchemnitz/rotations/rotations_find_all_optimal.py new file mode 100644 index 00000000..d6a181a9 --- /dev/null +++ b/extensions/fablabchemnitz/rotations/rotations_find_all_optimal.py @@ -0,0 +1,69 @@ +#! /usr/bin/env python3 +''' +Copyright (C) 2019 Grant Patterson + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +''' + +import gettext +import sys +import inkex +import rotate_helper +from inkex import Transform +import copy + +debug = False + +error = lambda msg: inkex.errormsg(gettext.gettext(msg)) +if debug: + stderr = lambda msg: sys.stderr.write(msg + '\n') +else: + stderr = lambda msg: None + +class RotationsFindAllOptimal(inkex.EffectExtension): + + def effect(self): + + def duplicateNodes(aList): + clones={} + for id,node in aList.items(): + clone=copy.deepcopy(node) + #!!!--> should it be given an id? + #seems to work without this!?! + myid = node.tag.split('}')[-1] + clone.set("id", self.svg.get_unique_id(myid)) + node.getparent().append(clone) + clones[clone.get("id")]=clone + return(clones) + + for nid, node in self.svg.selected.items(): + # set() removes duplicates + angles = set( + # and remove Nones + [x for x in rotate_helper.optimal_rotations(node) + if x is not None]) + # Go backwards so we know if we need to duplicate the node for + # multiple rotations. (We don't want to rotate the main node + # before duplicating it.) + for i, angle in reversed(list(enumerate(angles))): + if i > 0: + # Rotate a duplicate of the node + rotate_node = list(duplicateNodes({nid: node}).items())[0][1] + else: + rotate_node = node + rotate_node.transform = rotate_helper.rotate_matrix(rotate_node, angle) * rotate_node.transform + +if __name__ == '__main__': + RotationsFindAllOptimal().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/rotations/rotations_minimum_bounding_box_area.inx b/extensions/fablabchemnitz/rotations/rotations_minimum_bounding_box_area.inx new file mode 100644 index 00000000..124443fa --- /dev/null +++ b/extensions/fablabchemnitz/rotations/rotations_minimum_bounding_box_area.inx @@ -0,0 +1,16 @@ + + + Rotations - Minimum Bounding Box Area + fablabchemnitz.de.rotations_minimum_bounding_box_area + + all + + + + + + + + diff --git a/extensions/fablabchemnitz/rotations/rotations_minimum_bounding_box_area.py b/extensions/fablabchemnitz/rotations/rotations_minimum_bounding_box_area.py new file mode 100644 index 00000000..f4ce1ff3 --- /dev/null +++ b/extensions/fablabchemnitz/rotations/rotations_minimum_bounding_box_area.py @@ -0,0 +1,43 @@ +#! /usr/bin/env python3 +''' +Copyright (C) 2019 Grant Patterson + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +''' + +import gettext +import sys +import inkex +import rotate_helper +from inkex import Transform + +debug = False + +error = lambda msg: inkex.errormsg(gettext.gettext(msg)) +if debug: + stderr = lambda msg: sys.stderr.write(msg + '\n') +else: + stderr = lambda msg: None + +class RotationsMinimumBoundingBoxArea(inkex.EffectExtension): + + def effect(self): + for node in self.svg.selected.values(): + min_bbox_angle = rotate_helper.optimal_rotations(node)[1] + if min_bbox_angle is not None: + node.transform = Transform(rotate_helper.rotate_matrix(node, min_bbox_angle)) * node.transform + +if __name__ == '__main__': + RotationsMinimumBoundingBoxArea().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/rotations/rotations_minimum_width.inx b/extensions/fablabchemnitz/rotations/rotations_minimum_width.inx new file mode 100644 index 00000000..a215ae3e --- /dev/null +++ b/extensions/fablabchemnitz/rotations/rotations_minimum_width.inx @@ -0,0 +1,16 @@ + + + Rotations - Minimum Width + fablabchemnitz.de.rotations_minimum_width + + all + + + + + + + + diff --git a/extensions/fablabchemnitz/rotations/rotations_minimum_width.py b/extensions/fablabchemnitz/rotations/rotations_minimum_width.py new file mode 100644 index 00000000..be4aaed7 --- /dev/null +++ b/extensions/fablabchemnitz/rotations/rotations_minimum_width.py @@ -0,0 +1,43 @@ +#! /usr/bin/env python3 +''' +Copyright (C) 2019 Grant Patterson + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +''' + +import gettext +import sys +import inkex +import rotate_helper +from inkex import Transform + +debug = False + +error = lambda msg: inkex.errormsg(gettext.gettext(msg)) +if debug: + stderr = lambda msg: sys.stderr.write(msg + '\n') +else: + stderr = lambda msg: None + +class RotationsMinimumWidth(inkex.EffectExtension): + + def effect(self): + for node in self.svg.selected.values(): + min_width_angle = rotate_helper.optimal_rotations(node)[0] + if min_width_angle is not None: + node.transform = rotate_helper.rotate_matrix(node, min_width_angle) * node.transform + +if __name__ == '__main__': + RotationsMinimumWidth().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/round_corners/round_corners.inx b/extensions/fablabchemnitz/round_corners/round_corners.inx new file mode 100644 index 00000000..84f37725 --- /dev/null +++ b/extensions/fablabchemnitz/round_corners/round_corners.inx @@ -0,0 +1,35 @@ + + + Round Corners + fablabchemnitz.de.round_corners + 2.0 + + + + + + + path + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/round_corners/round_corners.py b/extensions/fablabchemnitz/round_corners/round_corners.py new file mode 100644 index 00000000..e597e663 --- /dev/null +++ b/extensions/fablabchemnitz/round_corners/round_corners.py @@ -0,0 +1,520 @@ +#!/usr/bin/env python3 +# coding=utf-8 +# +# Copyright (C) 2020 Juergen Weigert, jnweiger@gmail.com +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# v0.1, 2020-11-08, jw - initial draught, finding and printing selected nodes to the terminal... +# v0.2, 2020-11-08, jw - duplicate the selected nodes in their superpaths, write them back. +# v0.3, 2020-11-21, jw - find "meta-handles" +# v0.4, 2020-11-26, jw - alpha and trim math added. trimming with a striaght line implemented, needs fixes. +# Option 'cut' added. +# v0.5, 2020-11-28, jw - Cut operation looks correct. Dummy midpoint for large arcs added, looks wrong, of course. +# v1.0, 2020-11-30, jw - Code completed. Bot cut and arc work fine. +# v1.1, 2020-12-07, jw - Replaced boolean 'cut' with a method selector 'arc'/'line'. Added round_corners_092.inx +# and started backport in round_corners.py -- attempting to run the same code everywhere. +# v1.2, 2020-12-08, jw - Backporting continued: option parser hack added. Started effect_wrapper() to prepare self.svg +# v1.3, 2020-12-12, jw - minimalistic compatibility layer for inkscape 0.92.4 done. It now works in both, 1.0 and 0.92! +# v1.4, 2020-12-15, jw - find_roundable_nodes() added for auto selecting nodes, if none were selected. +# And fix https://github.com/jnweiger/inkscape-round-corners/issues/2 +# 2021-01-15, Mario Voigt - removed oboslete InkScape 0.92.* stuff +# +# Bad side-effect: As the node count increases during operation, the list of +# selected nodes is incorrect afterwards. We have no way to give inkscape an update. +# +""" +Rounded Corners + +This extension operates on selected sharp corner nodes and converts them to a fillet (bevel,chamfer). +An arc shaped path segment with the given radius is inserted smoothly. +The fitted arc is approximated by a bezier spline, as we are doing path operations here. +When the sides at the corner are straight lines, the operation never move the sides, it just shortens them to fit the arc. +When the sides are curved, the arc is placed on the tanget line, and the curve may thus change in shape. + +Selected smooth nodes are skipped. +Cases with insufficient space (180deg turn or too short segments/handles) are warned about. + +References: + - https://gitlab.com/inkscape/extensions/-/wikis/home + - https://gitlab.com/inkscape/extras/extensions-tutorials/-/blob/master/My-First-Effect-Extension.md + - https://gitlab.com/inkscape/extensions/-/wikis/uploads/25063b4ae6c3396fcda428105c5cff89/template_effect.zip + - https://inkscape-extensions-guide.readthedocs.io/en/latest/_modules/inkex/elements.html#ShapeElement.get_path + - https://inkscape.gitlab.io/extensions/documentation/_modules/inkex/paths.html#CubicSuperPath.to_path + + - https://stackoverflow.com/questions/734076/how-to-best-approximate-a-geometrical-arc-with-a-bezier-curve + - https://hansmuller-flex.blogspot.com/2011/10/more-about-approximating-circular-arcs.html + - https://itc.ktu.lt/index.php/ITC/article/download/11812/6479 (Riskus' PDF) + +The algorithm of arc_bezier_handles() is based on the approach described in: +A. Riškus, "Approximation of a Cubic Bezier Curve by Circular Arcs and Vice Versa," +Information Technology and Control, 35(4), 2006 pp. 371-378. +""" + +import inkex +import sys, math, pprint, copy + +__version__ = '1.4' # Keep in sync with round_corners.inx line 16 +debug = False # True: babble on controlling tty + +max_trim_factor = 0.90 # 0.5: can cut half of a segment length or handle length away for rounding a corner +max_trim_factor_single = 0.98 # 0.98: we can eat up almost everything, as there are no neighbouring trims to be expected. + +class RoundCorners(inkex.EffectExtension): + + def add_arguments(self, pars): # an __init__ in disguise ... + try: + self.tty = open("/dev/tty", 'w') + except: + try: + self.tty = open("CON:", 'w') # windows. Does this work??? + except: + self.tty = open(os.devnull, 'w') # '/dev/null' for POSIX, 'nul' for Windows. + if debug: print("RoundedCorners ...", file=self.tty) + self.nodes_inserted = {} + self.eps = 0.00001 # avoid division by zero + self.radius = None + self.max_trim_factor = max_trim_factor + + self.skipped_degenerated = 0 # not a useful corner (e.g. 180deg corner) + self.skipped_small_count = 0 # not enough room for arc + self.skipped_small_len = 1e99 # record the shortest handle (or segment) when skipping. + + pars.add_argument("--radius", type=float, default=2.0, help="Radius [mm] to round selected vertices. Default: 2") + pars.add_argument("--method", type=str, default="arc", help="operation: one of 'arc' (default), 'line'") + + + def effect(self): + if debug: + # SvgInputMixin __init__: "id:subpath:position of selected nodes, if any" + print(self.options.selected_nodes, file=self.tty) + + self.radius = math.fabs(self.options.radius) + self.cut = False + if self.options.method in ('line'): + self.cut = True + if len(self.options.selected_nodes) < 1: + # find selected objects and construct a list of selected_nodes for them... + for p in self.options.ids: + self.options.selected_nodes.extend(self.find_roundable_nodes(p)) + if len(self.options.selected_nodes) < 1: + raise inkex.AbortExtension("Could not find nodes inside a path. No path objects selected?") + + if len(self.options.selected_nodes) == 1: + # when we only trim one node, we can eat up almost everything, + # no need to leave room for rounding neighbour nodes. + self.max_trim_factor = max_trim_factor_single + + for node in sorted(self.options.selected_nodes): + ## we walk through the list sorted, so that node indices are processed within a subpath in ascending numeric order. + ## that makes adjusting index offsets after node inserts easier. + ss = self.round_corner(node) + + + def find_roundable_nodes(self, path_id): + """ select all nodes of all (sub)paths. except for + - the last (one or two) nodes of a closed path (which coindide with the first node) + - the first and last node of an open path (which cannot be smoothed) + """ + ret = [] + elem = self.svg.getElementById(path_id) + if elem.tag != '{'+elem.nsmap['svg']+'}path': + return ret # ellipse never works. + try: + csp = elem.path.to_superpath() + except: + return ret + + for sp_idx in range(0, len(csp)): + sp = csp[sp_idx] + if len(sp) < 3: + continue # subpaths of 2 or less nodes are ignored + if self.very_close(sp[0], sp[-1]): + idx_s = 0 # closed paths count from 0 to either n-1 or n-2 + idx_e = len(sp) - 1 + if self.very_close_xy(sp[-2][1], sp[-1][1]): + idx_e = len(sp) - 2 + else: + idx_s = 1 # open paths count from 1 to either n-1 + idx_e = len(sp) - 1 + for idx in range(idx_s, idx_e): + ret.append("%s:%d:%d" % (path_id, sp_idx, idx)) + + if debug: + print("find_roundable_nodes: ", self.options.selected_nodes, file=sys.stderr) + return ret + + + def very_close(self, n1, n2): + "deep compare. all elements in sub arrays are compared for (very close) numerical equality" + return self.very_close_xy(n1[0], n2[0]) and self.very_close_xy(n1[1], n2[1]) and self.very_close_xy(n1[2], n2[2]) + + + def very_close_xy(self, p1, p2): + "one 2 element array is compared for (very close) numerical equality" + eps = 1e-9 + return abs(p1[0]-p2[0]) < eps and abs(p1[1]-p2[1]) < eps + + + def round_corner(self, node_id): + """ round the corner at (adjusted) node_idx of subpath + Side_effect: store (or increment) in self.inserted["pathname:subpath"] how many points were inserted in that subpath. + the adjusted node_idx is computed by adding that number (if exists) to the value of the node_id before doing any manipulation + """ + s = node_id.split(":") + path_id = s[0] + subpath_idx = int(s[1]) + subpath_id = s[0] + ':' + s[1] + idx_adjust = self.nodes_inserted.get(subpath_id, 0) + node_idx = int(s[2]) + idx_adjust + + elem = self.svg.getElementById(path_id) + if elem is None: + print("selected_node %s not found in svg document" % node_id, file=sys.stderr) + return None + + elem.apply_transform() # modifies path inplace? -- We save later back to the same element. Maybe we should not? + path = elem.path + s = path.to_superpath() + sp = s[subpath_idx] + + ## call the actual path manipulator, record how many nodes were inserted. + orig_len = len(sp) + sp = self.subpath_round_corner(sp, node_idx) + idx_adjust += len(sp) - orig_len + + # convert the superpath back to a normal path + s[subpath_idx] = sp + elem.set_path(s.to_path(curves_only=False)) + self.nodes_inserted[subpath_id] = idx_adjust + + + # If we picked up the 'd' attribute of a non-path (e.g. star), we must make sure the object now becomes a path. + # Otherwise inkscape uses the sodipodi data and ignores our changed 'd' attribute. + if '{'+elem.nsmap['sodipodi']+'}type' in elem.attrib: + del(elem.attrib['{'+elem.nsmap['sodipodi']+'}type']) + + # Debugging is no longer available or not yet implemented? This explodes, although it is + # documented in https://inkscape.gitlab.io/extensions/documentation/inkex.command.html + # inkex.command.write_svg(self.svg, "/tmp/seen.svg") + # - AttributeError: module 'inkex' has no attribute 'command' + # But hey, we can always resort to good old ET.dump(self.document) ... + + + def super_node(self, sp, node_idx): + """ In case of node_idx 0, we need to use either the last, the second-last or the third last node as a previous node. + For a closed subpath, the last node and the first node are identical. Then, the second last node may be still at the + same location if it has a handle. If so, we take the third last instead. Gah. It has a certain logic... + + In case of the node_idx being the last node, we already know that the subpath is not closed, + we use 0 as the next node. + + The direction sn.prev.dir does not really point to the coordinate of the previous node, but to the end of the + next-handle of the prvious node. This is the same when there are straight lines. The absence of handles is + denoted by having the same coordinates for handle and node. + Same for next.dir, it points to the next.prev handle. + + The exact implementation here is: + - sn.next.handle is set to a relative vector that is the tangent of the curve towards the next point. + we implement four cases: + - if neither node nor next have handles, the connection is a straight line, and next.handle points + in the direction of the next node itself. + - if the curve between node and next is defined by two handles, then sn.next.handle is in the direction of the + nodes own handle, + - if the curve between node and next is defined one handle at the node itself, then sn.next.handle is in the + direction of the nodes own handle, + - if the curve between node and next is defined one handle at the next node, then sn.next.handle is in the + direction from the node to the end of that other handle. + - when trimming back later, we move along that tangent, instead of following the curve. + That is an approximation when the segment is curved, and exact when it is straight. + (Finding exact candidate points on curved lines that have tangents with the desired circle + is beyond me today. Multiple candidates may exist. Any volunteers?) + """ + + prev_idx = node_idx - 1 + sp_node_idx_ = copy.deepcopy(sp[node_idx]) # if this wraps around, at node_idx=0, we may need to tweak the prev handle + if node_idx == 0: + prev_idx = len(sp) - 1 + if self.very_close(sp_node_idx_, sp[prev_idx]): + prev_idx = prev_idx - 1 # skip one node, it is the 'close marker' + if self.very_close_xy(sp_node_idx_[1], sp[prev_idx][1]): + # still no distance, skip more. Needed for https://github.com/jnweiger/inkscape-round-corners/issues/2 + sp_node_idx_[0] = sp[prev_idx][0] # this sp_node_idx_ must acts as if its prev handle is that one. + prev_idx = prev_idx - 1 + else: + self.skipped_degenerated += 1 # path ends here. + return None, None + + # if debug: pprint.pprint({'node_idx': node_idx, 'len(sp)':len(sp), 'sp': sp}, stream=self.tty) + if node_idx == len(sp)-1: + self.skipped_degenerated += 1 # path ends here. On a closed loop, we can never select the last point. + return None, None + + next_idx = node_idx + 1 + if next_idx >= len(sp): next_idx = 0 + t = sp_node_idx_ + p = sp[prev_idx] + n = sp[next_idx] + dir1 = [ p[2][0] - t[1][0], p[2][1] - t[1][1] ] # direction to the previous node (rel coords) + dir2 = [ n[0][0] - t[1][0], n[0][1] - t[1][1] ] # direction to the next node (rel coords) + dist1 = math.sqrt(dir1[0]*dir1[0] + dir1[1]*dir1[1]) # distance to the previous node + dist2 = math.sqrt(dir2[0]*dir2[0] + dir2[1]*dir2[1]) # distance to the next node + handle1 = [ t[0][0] - t[1][0], t[0][1] - t[1][1] ] # handle towards previous node (rel coords) + handle2 = [ t[2][0] - t[1][0], t[2][1] - t[1][1] ] # handle towards next node (rel coords) + if self.very_close_xy(handle1, [ 0, 0 ]): handle1 = dir1 + if self.very_close_xy(handle2, [ 0, 0 ]): handle2 = dir2 + + prev = { 'idx': prev_idx, 'dir':dir1, 'handle':handle1 } + next = { 'idx': next_idx, 'dir':dir2, 'handle':handle2 } + sn = { 'idx': node_idx, 'prev': prev, 'next': next, 'x': t[1][0], 'y': t[1][1] } + + if dist1 < self.radius: + if debug: + print("subpath node_idx=%d, dist to prev(%d) is smaller than radius: %g < %g" % + (node_idx, prev_idx, dist1, self.radius), file=sys.stderr) + pprint.pprint(sn, stream=sys.stderr) + if self.skipped_small_len > dist1: self.skipped_small_len = dist1 + self.skipped_small_count += 1 + return None, None + + if dist2 < self.radius: + if debug: + print("subpath node_idx=%d, dist to next(%d) is smaller than radius: %g < %g" % + (node_idx, next_idx, dist2, self.radius), file=sys.stderr) + pprint.pprint(sn, stream=sys.stderr) + if self.skipped_small_len > dist2: self.skipped_small_len = dist2 + self.skipped_small_count += 1 + return None, None + + len_h1 = math.sqrt(handle1[0]*handle1[0] + handle1[1]*handle1[1]) + len_h2 = math.sqrt(handle2[0]*handle2[0] + handle2[1]*handle2[1]) + prev['hlen'] = len_h1 + next['hlen'] = len_h2 + + if len_h1 < self.radius: + if debug: + print("subpath node_idx=%d, handle to prev(%d) is shorter than radius: %g < %g" % + (node_idx, prev_idx, len_h1, self.radius), file=sys.stderr) + pprint.pprint(sn, stream=sys.stderr) + if self.skipped_small_len > len_h1: self.skipped_small_len = len_h1 + self.skipped_small_count += 1 + return None, None + if len_h2 < self.radius: + if debug: + print("subpath node_idx=%d, handle to next(%d) is shorter than radius: %g < %g" % + (node_idx, next_idx, len_h2, self.radius), file=sys.stderr) + pprint.pprint(sn, stream=sys.stderr) + if self.skipped_small_len > len_h2: self.skipped_small_len = len_h2 + self.skipped_small_count += 1 + return None, None + + if len_h1 > dist1: # shorten that handle to dist1, avoid overshooting the point + handle1[0] = handle1[0] * dist1 / len_h1 + handle1[1] = handle1[1] * dist1 / len_h1 + prev['hlen'] = dist1 + if len_h2 > dist2: # shorten that handle to dist2, avoid overshooting the point + handle2[0] = handle2[0] * dist2 / len_h2 + handle2[1] = handle2[1] * dist2 / len_h2 + next['hlen'] = dist2 + + return sn, sp_node_idx_ + + + def arc_c_m_from_super_node(self, s): + """ + Given the supernode s and the radius self.radius, we compute and return two points: + c, the center of the arc and m, the midpoint of the arc. + + Method used: + - construct the ray c_m_vec that runs though the original point p=[x,y] through c and m. + - next.trim_pt, [x,y] and c form a rectangular triangle. Thus we can + compute cdist as the length of the hypothenuses under trim and radius. + - c is then cdist away from [x,y] along the vector c_m_vec. + - m is closer to [x,y] than c by exactly radius. + """ + + a = [ s['prev']['trim_pt'][0] - s['x'], s['prev']['trim_pt'][1] - s['y'] ] + b = [ s['next']['trim_pt'][0] - s['x'], s['next']['trim_pt'][1] - s['y'] ] + + c_m_vec = [ a[0] + b[0], + a[1] + b[1] ] + l = math.sqrt( c_m_vec[0]*c_m_vec[0] + c_m_vec[1]*c_m_vec[1] ) + + cdist = math.sqrt( self.radius*self.radius + s['trim']*s['trim'] ) # distance [x,y] to circle center c. + + c = [ s['x'] + cdist * c_m_vec[0] / l, # circle center + s['y'] + cdist * c_m_vec[1] / l ] + + m = [ s['x'] + (cdist-self.radius) * c_m_vec[0] / l, # spline midpoint + s['y'] + (cdist-self.radius) * c_m_vec[1] / l ] + + return (c, m) + + + def arc_bezier_handles(self, p1, p4, c): + """ + Compute the control points p2 and p3 between points p1 and p4, so that the cubic bezier spline + defined by p1,p2,p3,p2 approximates an arc around center c + + Algorithm based on Aleksas Riškus and Hans Muller. Sorry Pomax, saw your works too, but did not use any. + """ + x1,y1 = p1 + x4,y4 = p4 + xc,yc = c + + ax = x1 - xc + ay = y1 - yc + bx = x4 - xc + by = y4 - yc + q1 = ax * ax + ay * ay + q2 = q1 + ax * bx + ay * by + k2 = 4./3. * (math.sqrt(2 * q1 * q2) - q2) / (ax * by - ay * bx) + + x2 = xc + ax - k2 * ay + y2 = yc + ay + k2 * ax + x3 = xc + bx + k2 * by + y3 = yc + by - k2 * bx + + return ([x2, y2], [x3, y3]) + + + def subpath_round_corner(self, sp, node_idx): + sn, sp_node_idx_ = self.super_node(sp, node_idx) + if sn is None: return sp # do nothing. stderr messages are already printed. + + # The angle to be rounded is now between the vectors a and b + # + a = sn['prev']['handle'] + b = sn['next']['handle'] + a_len = sn['prev']['hlen'] + b_len = sn['next']['hlen'] + try: + # From https://de.wikipedia.org/wiki/Schnittwinkel_(Geometrie) + # Wikipedia has an abs() in the formula, which extracts the smaller of the two angles. + # We don't want that. We need to distinguish betwenn spitzwingklig and stumpfwinklig. + # + alpha = math.acos( (a[0]*b[0]+a[1]*b[1]) / ( math.sqrt(a[0]*a[0]+a[1]*a[1]) * math.sqrt(b[0]*b[0]+b[1]*b[1]) ) ) + except: + # Division by 0 error means path folds back on itself here. No space to apply a radius between the segments. + self.skipped_degenerated += 1 + return sp + + sn['alpha'] = math.degrees(alpha) + + # find the amount to trim back both sides so that a circle of radius self.radius would perfectly fit. + if alpha < self.eps: + # path folds back on itself here. No space to apply a radius between the segments. + self.skipped_degenerated += 1 + return sp + if abs(alpha - math.pi) < self.eps: + # stretched. radius won't be visible, that is just fine. No need to warn about that. + return sp + trim = self.radius / math.tan(0.5 * alpha) + sn['trim'] = trim + if trim < 0.0: + print("Error: at node_idx=%d: angle=%g°, trim is negative: %g" % (node_idx, math.degrees(alpha), trim), file=sys.stderr) + return sp + + # a_len points to the previous node. There we can always allow max_trim_factor_single, as the trim was either already done, + # or will not be done. Only at b_len we need to reserve space for the next trim. + # FIXME: also allow max_trim_factor_single at b_len, when we find that the very next node will not be rounded. + # + available_len = min(max_trim_factor_single*a_len, self.max_trim_factor*b_len) + if trim > available_len: + if debug: + if trim > max_trim_factor_single*a_len: + print("Skipping where hlen_a %g * max_trim %g < needed_trim %g" % (a_len, max_trim_factor_single, trim), file=self.tty) + if trim > self.max_trim_factor*b_len: + print("Skipping where hlen_b %g * max_trim %g < needed_trim %g" % (b_len, self.max_trim_factor, trim), file=self.tty) + pprint.pprint(sn, stream=self.tty) + if self.skipped_small_len > available_len: + self.skipped_small_len = available_len + self.skipped_small_count += 1 + return sp + trim_pt_p = [ sn['x'] + a[0] * trim / a_len, sn['y'] + a[1] * trim / a_len ] + trim_pt_n = [ sn['x'] + b[0] * trim / b_len, sn['y'] + b[1] * trim / b_len ] + sn['prev']['trim_pt'] = trim_pt_p + sn['next']['trim_pt'] = trim_pt_n + + if debug: + pprint.pprint(sn, stream=self.tty) + pprint.pprint(self.cut, stream=self.tty) + # We replace the node_idx node by two nodes node_a, node_b. + # We need an extra middle node node_m if alpha < 90° -- alpha is the angle between the tangents, + # as the arc spans the remainder to complete 180° an arc with more than 90° needs the midpoint. + + # We preserve the endpoints of the two outside handles if they are non-0-length. + # We know that such handles are long enough (because of the above max_trim_factor checks) + # to not flip around when applying the trim. + # But we move the endpoints of 0-length outside handles with the point when trimming, + # so that they don't end up on the inside. + prev_handle = sp_node_idx_[0][:] + next_handle = sp_node_idx_[2][:] + if self.very_close_xy(prev_handle, sp_node_idx_[1]): prev_handle = trim_pt_p[:] + if self.very_close_xy(next_handle, sp_node_idx_[1]): next_handle = trim_pt_n[:] + + p1 = trim_pt_p[:] + p7 = trim_pt_n[:] + arc_c, p4 = self.arc_c_m_from_super_node(sn) + node_a = [ prev_handle, p1[:], p1[:] ] # deep copy, as we may want to modify the second handle later + node_b = [ p7[:], p7[:], next_handle ] # deep copy, as we may want to modify the first handle later + + if alpha >= 0.5*math.pi or self.cut: + if self.cut == False: + # p3,p4,p5 do not exist, we need no midpoint + p2, p6 = self.arc_bezier_handles(p1, p7, arc_c) + node_a[2] = p2 + node_b[0] = p6 + if node_idx == 0: + # use prev idx to know about the extra skip. +1 for the node here, +1 for inclusive. + # CAUTION: Keep in sync below + sp = [node_a] + [node_b] + sp[1:sn['prev']['idx']+2] + else: + sp = sp[:node_idx] + [node_a] + [node_b] + sp[node_idx+1:] + else: + p2, p3 = self.arc_bezier_handles(p1, p4, arc_c) + p5, p6 = self.arc_bezier_handles(p4, p7, arc_c) + node_m = [ p3, p4, p5 ] + node_a[2] = p2 + node_b[0] = p6 + if node_idx == 0: + # use prev idx to know about the extra skip. +1 for the node here, +1 for inclusive. + # CAUTION: Keep in sync above + sp = [node_a] + [node_m] + [node_b] + sp[1:sn['prev']['idx']+2] + else: + sp = sp[:node_idx] + [node_a] + [node_m] + [node_b] + sp[node_idx+1:] + + # A closed path is formed by making the last node indentical to the first node. + # So, if we trim at the first node, then duplicte that trim on the last node, to keep the loop closed. + if node_idx == 0: + sp[-1][0] = sp[0][0][:] + sp[-1][1] = sp[0][1][:] + sp[-1][2] = sp[0][2][:] + + return sp + + + def clean_up(self): # __fini__ + if self.tty is not None: + self.tty.close() + super(RoundCorners, self).clean_up() + if self.skipped_degenerated: + print("Warning: Skipped %d degenerated nodes (180° turn or end of path?).\n" % self.skipped_degenerated, file=sys.stderr) + if self.skipped_small_count: + print("Warning: Skipped %d nodes with not enough space (Value %g is too small. Try again with a smaller radius or only one node selected).\n" % (self.skipped_small_count, self.skipped_small_len), file=sys.stderr) + + +if __name__ == '__main__': + RoundCorners().run() diff --git a/extensions/fablabchemnitz/rounder/rounder.inx b/extensions/fablabchemnitz/rounder/rounder.inx new file mode 100644 index 00000000..0a29353e --- /dev/null +++ b/extensions/fablabchemnitz/rounder/rounder.inx @@ -0,0 +1,30 @@ + + + Rounder + fablabchemnitz.de.rounder + 2 + true + false + true + false + false + false + false + false + false + false + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/rounder/rounder.py b/extensions/fablabchemnitz/rounder/rounder.py new file mode 100644 index 00000000..b5bb2c9e --- /dev/null +++ b/extensions/fablabchemnitz/rounder/rounder.py @@ -0,0 +1,165 @@ +#! /usr/bin/python +''' +Rounder 0.4 +Based in deprecated "Path Rounder 0.2" +Based in radiusrand script from Aaron Spike and make it by Jabier Arraiza, +jabier.arraiza@marker.es +Copyright (C) 2005 Aaron Spike, aaron@ekips.org + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +''' +import random +import math +import inkex +from inkex.paths import Path, CubicSuperPath +import re + +class Rounder(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument("--precision", type=int, default=3, help="Precision") + pars.add_argument("--ctrl", type=inkex.Boolean, default = False, help="Round element handles") + pars.add_argument("--along", type=inkex.Boolean, default = True, help="Move handles following element movement") + pars.add_argument("--half", type=inkex.Boolean, default = False, help="Allow round to half if nearest") + pars.add_argument("--paths", type=inkex.Boolean, default = True, help="Affect to paths") + pars.add_argument("--widthheight", type=inkex.Boolean, default = False, help="Affect to width and height of objects") + pars.add_argument("--position", type=inkex.Boolean, default = False, help="Affect to position of objects") + pars.add_argument("--strokewidth", type=inkex.Boolean, default = False, help="Affect to stroke width of objects") + pars.add_argument("--opacity", type=inkex.Boolean, default = False, help="Affect to global opacity of objects") + pars.add_argument("--strokeopacity", type=inkex.Boolean, default = False, help="Affect to stroke opcacity of objects") + pars.add_argument("--fillopacity", type=inkex.Boolean, default = False, help="Affect to fill opcacity of objects") + + def roundFloat(self, n): + if self.options.half: + if self.options.precision == 0: + return str(round(n * 2) / 2) + else: + return str(round(n * (self.options.precision) * 10 * 2) / ((self.options.precision) * 10 * 2)) + else: + return str(round(n, self.options.precision)) + + def roundit(self, p): + x = self.roundFloat(p[0]) + y = self.roundFloat(p[1]) + return [float(x) - p[0], float(y) - p[1]] + + def path_round_it(self,element): + if element.tag == inkex.addNS('path','svg'): + d = element.get('d') + p = CubicSuperPath(d) + for subpath in p: + for csp in subpath: + delta = self.roundit(csp[1]) + if self.options.along: + csp[0][0]+=delta[0] + csp[0][1]+=delta[1] + csp[1][0]+=delta[0] + csp[1][1]+=delta[1] + if self.options.along: + csp[2][0]+=delta[0] + csp[2][1]+=delta[1] + if self.options.ctrl: + delta = self.roundit(csp[0]) + csp[0][0]+=delta[0] + csp[0][1]+=delta[1] + delta = self.roundit(csp[2]) + csp[2][0]+=delta[0] + csp[2][1]+=delta[1] + element.set('d',str(Path(p))) + elif element.tag == inkex.addNS('g','svg'): + for e in element: + self.path_round_it(e) + + def roundStroke(self,matchobj): + return 'stroke-width:' + self.roundFloat(float( re.sub(r'[a-zA-Z]', "", matchobj.group(1)))) + matchobj.group(2); + + def roundOpacity(self,matchobj): + return matchobj.group(1) + matchobj.group(2) + self.roundFloat(float( matchobj.group(3))) + matchobj.group(4); + + def roundWHXY(self,matchobj): + return matchobj.group(1) + self.roundFloat(float( matchobj.group(2))) + matchobj.group(3); + + + def stroke_round_it(self, element): + if element.tag == inkex.addNS('g','svg'): + for e in element: + self.stroke_round_it(e) + else: + style = element.get('style') + if style: + style = re.sub('stroke-width:(.*?)(;|$)',self.roundStroke, style) + element.set('style',style) + def opacity_round_it(self, element, typeOpacity): + if element.tag == inkex.addNS('g','svg'): + for e in element: + self.opacity_round_it(e, typeOpacity) + else: + style = element.get('style') + if style: + style = re.sub('(^|;)(' + typeOpacity + ':)(.*?)(;|$)',self.roundOpacity, style) + element.set('style',style) + + def widthheight_round_it(self, element): + if element.tag == inkex.addNS('g','svg'): + for e in element: + self.widthheight_round_it(e) + else: + width = element.get('width') + if width: + width = re.sub('^(\-|)([0-9]+\.[0-9]+)(.*?)$',self.roundWHXY, width) + element.set('width',width) + height = element.get('height') + if height: + height = re.sub('^(\-|)([0-9]+\.[0-9]+)(.*?)$',self.roundWHXY, height) + element.set('height',height) + + def position_round_it(self, element): + if element.tag == inkex.addNS('g','svg'): + for e in element: + self.position_round_it(e) + else: + x = element.get('x') + if x: + x = re.sub('^(\-|)([0-9]+\.[0-9]+)(.*?)$',self.roundWHXY, x) + element.set('x', x) + y = element.get('y') + if y: + y = re.sub('^(\-|)([0-9]+\.[0-9]+)(.*?)$',self.roundWHXY, y) + element.set('y', y) + + def effect(self): + + if len(self.svg.selected) > 0: + for element in self.svg.selection.values(): + if self.options.paths: + self.path_round_it(element) + if self.options.strokewidth: + self.stroke_round_it(element) + if self.options.widthheight: + self.widthheight_round_it(element) + if self.options.position: + self.position_round_it(element) + if self.options.opacity: + self.opacity_round_it(element, "opacity") + if self.options.strokeopacity: + self.opacity_round_it(element, "stroke-opacity") + if self.options.fillopacity: + self.opacity_round_it(element, "fill-opacity") + else: + self.msg('Please select some paths first.') + return + +if __name__ == '__main__': + Rounder().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/scale_to_path_length/scale_to_path_length.inx b/extensions/fablabchemnitz/scale_to_path_length/scale_to_path_length.inx new file mode 100644 index 00000000..913203a0 --- /dev/null +++ b/extensions/fablabchemnitz/scale_to_path_length/scale_to_path_length.inx @@ -0,0 +1,37 @@ + + + Scale To Path Length + fablabchemnitz.de.scale_to_path_length + + + + + + + + 1 + 5 + false + 100.000 + + + + + + + + + + + + path + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/scale_to_path_length/scale_to_path_length.py b/extensions/fablabchemnitz/scale_to_path_length/scale_to_path_length.py new file mode 100644 index 00000000..4300491d --- /dev/null +++ b/extensions/fablabchemnitz/scale_to_path_length/scale_to_path_length.py @@ -0,0 +1,123 @@ +#!/usr/bin/env python3 + +''' +Inkscape extension to copy length of the source path to the selected +destination path(s) + +Copyright (C) 2018 Shrinivas Kulkarni + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +''' + +import inkex + +from inkex import bezier, Path, CubicSuperPath, PathElement + +class ScaleToPathLength(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument('--scale', type = float, default = '1', help = 'Additionally scale the length by') + pars.add_argument('--scaleFrom', default = 'center', help = 'Scale Path From') + pars.add_argument('--precision', type = int, default = '5', help = 'Number of significant digits') + pars.add_argument("--override_selection", type = inkex.Boolean, default = False, help = "Use a custom length instead using the length of the first object in selection") + pars.add_argument("--custom_length", type = float, default = 100.000, help = "Custom length") + pars.add_argument("--unit", default = "mm", help = "Units") + + def scaleCubicSuper(self, cspath, scaleFactor, scaleFrom): + bbox = Path(cspath).bounding_box() + + if(scaleFrom == 'topLeft'): + oldOrigin= [bbox.left, bbox.bottom] + elif(scaleFrom == 'topRight'): + oldOrigin= [bbox.right, bbox.bottom] + elif(scaleFrom == 'bottomLeft'): + oldOrigin= [bbox.left, bbox.top] + elif(scaleFrom == 'bottomRight'): + oldOrigin= [bbox.right, bbox.top] + else: #if(scaleFrom == 'center'): + oldOrigin= [bbox.left + (bbox.right - bbox.left) / 2., bbox.bottom + (bbox.top - bbox.bottom) / 2.] + + newOrigin = [oldOrigin[0] * scaleFactor , oldOrigin[1] * scaleFactor ] + + for subpath in cspath: + for bezierPt in subpath: + for i in range(0, len(bezierPt)): + + bezierPt[i] = [bezierPt[i][0] * scaleFactor, + bezierPt[i][1] * scaleFactor] + + bezierPt[i][0] += (oldOrigin[0] - newOrigin[0]) + bezierPt[i][1] += (oldOrigin[1] - newOrigin[1]) + + def getPartsFromCubicSuper(self, cspath): + parts = [] + for subpath in cspath: + part = [] + prevBezPt = None + for i, bezierPt in enumerate(subpath): + if(prevBezPt != None): + seg = [prevBezPt[1], prevBezPt[2], bezierPt[0], bezierPt[1]] + part.append(seg) + prevBezPt = bezierPt + parts.append(part) + return parts + + def getLength(self, cspath, tolerance): + parts = self.getPartsFromCubicSuper(cspath) + curveLen = 0 + for i, part in enumerate(parts): + for j, seg in enumerate(part): + curveLen += bezier.bezierlength((seg[0], seg[1], seg[2], seg[3]), tolerance = tolerance) + return curveLen + + def effect(self): + scale = self.options.scale + scaleFrom = self.options.scaleFrom + tolerance = 10 ** (-1 * self.options.precision) + selections = self.svg.selected + pathNodes = self.svg.selection.filter(PathElement).values() + + paths = [(pathNode.get('id'), CubicSuperPath(pathNode.get('d'))) for pathNode in pathNodes] + + if self.options.override_selection is False: + if(len(paths) > 1): + srcPath = paths[-1][1] + srclen = self.getLength(srcPath, tolerance) + paths = paths[:len(paths)-1] + for key, cspath in paths: + curveLen = self.getLength(cspath, tolerance) + + self.scaleCubicSuper(cspath, scaleFactor = scale * (srclen / curveLen), scaleFrom = scaleFrom) + try: #we wrap this in try-except because if the elements are within groups it will cause errors + selections[key].set('d', CubicSuperPath(cspath)) + except: + pass + else: + inkex.errormsg("Please select at least two paths, with the path whose length is to be copied at the top. You may have to convert the shape to path with path->Object to Path.") + else: + if(len(paths) > 0): + srclen = self.svg.unittouu(str(self.options.custom_length) + self.options.unit) + for key, cspath in paths: + curveLen = self.getLength(cspath, tolerance) + + self.scaleCubicSuper(cspath, scaleFactor = scale * (srclen / curveLen), scaleFrom = scaleFrom) + try: #we wrap this in try-except because if the elements are within groups it will cause errors + selections[key].set('d', CubicSuperPath(cspath)) + except: + pass + else: + inkex.errormsg("Please select at least one path. You may have to convert the shape to path with path->Object to Path.") +if __name__ == '__main__': + ScaleToPathLength().run() diff --git a/extensions/fablabchemnitz/scale_to_real/scale_to_real.inx b/extensions/fablabchemnitz/scale_to_real/scale_to_real.inx new file mode 100644 index 00000000..b505d135 --- /dev/null +++ b/extensions/fablabchemnitz/scale_to_real/scale_to_real.inx @@ -0,0 +1,92 @@ + + + Scale To Real + fablabchemnitz.de.scale_to_real + + + + 100.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 45 + + true + + + + + + + + + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/scale_to_real/scale_to_real.py b/extensions/fablabchemnitz/scale_to_real/scale_to_real.py new file mode 100644 index 00000000..78c76570 --- /dev/null +++ b/extensions/fablabchemnitz/scale_to_real/scale_to_real.py @@ -0,0 +1,242 @@ +""" +Copyright (C) 2015 Maren Hachmann, marenhachmann@yahoo.com +Copyright (C) 2010 Blair Bonnett, blair.bonnett@gmail.com (parts from multiscale extension) +Copyright (C) 2005 Aaron Spike, aaron@ekips.org (parts from perspective extension) +Copyright (C) 2015 Giacomo Mirabassi, giacomo@mirabassi.it (parts from jpeg export extension) +Copyright (C) 2016 Neon22 @github (scale ruler) +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with this program. If not, see . +""" + +import math +import inkex +from inkex import Transform +from inkex.paths import CubicSuperPath +from lxml import etree + +### Scale Ruler +# inches = [1, 2, 4, 8, 16, 24, 32, 48, 64, 96, 128] +# metric = [1,2,5,10,20,50,100,200,250,500,1000,1250,2500] + +# TODO: +# - maybe turn dropdown for choosing scale type (metric/imperial/custom) into radio buttons? +# - scale font size +# - scale box-height better for small boxes +# - add ruler into current layer +# - add magnification e.g. 2:1 for small drawings + +class ScaleToReal(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument('--tab') + pars.add_argument('--length', type=float, default=100.0, help='Length of scaling path in real-world units') + pars.add_argument('--unit', default='cm', help='Real-world unit') + pars.add_argument('--showscale', default='false', help='Show Scale Ruler') + pars.add_argument('--choosescale', default='all', help='Choose Scale') + pars.add_argument('--metric', default='1', help='Common metric scales') + pars.add_argument('--imperial',default='1', help='Common imperial scales') + pars.add_argument('--custom_scale', type=float, default=45, help='Custom scale') + pars.add_argument('--unitlength', type=int, default='1', help='Length of scale ruler') + + def calc_scale_center(self, p1x, p1y, p2x, p2y): + """ Use straight line as scaling center. + - determine which point is center on basis of quadrant the line is in. + - approx this by using center of line + 0,0 corresponds to UL corner of page + """ + scale_center = (0,0) # resulting scaling point + # calc page center + pagecenter_x = self.svg.unittouu(self.document.getroot().get('width'))/2 + pagecenter_y = self.svg.unittouu(self.document.getroot().get('height'))/2 + # calc minmax of straightline ref points + minx = min(p1x, p2x) + maxx = max(p1x, p2x) + miny = min(p1y, p2y) + maxy = max(p1y, p2y) + # simplifiy calc by using center of line to determine quadrant + line_x = p1x + (p2x - p1x)/2 + line_y = p1y + (p2y - p1y)/2 + # determine quadrant + if line_x < pagecenter_x: + # Left hand side + if line_y < pagecenter_y: + scale_center = (minx,miny) # UL + else: + scale_center = (minx,maxy) # LL + else: # Right hand side + if line_y < pagecenter_y: + scale_center = (maxx,miny) # UR + else: + scale_center = (maxx,maxy) # LR + #inkex.debug("%s %s,%s" % (scale_center, pagecenter_x*2, pagecenter_y*2)) + return scale_center + + def create_ruler(self, parent, width, pos, value, drawing_scale): + """ Draw Scale ruler + - Position above user's straightline. + - Ruler shows two units together. First one cut into 5 + - pos is a tuple e.g. (0,0) + + TODO: + - Fix font size for large and small rulers + - Fix line width for large and small rulers + """ + " Ruler is always 2 units long with 5 divs in the left half " + # Draw two boxes next to each other. Top half of right half of ruler is filled black + line_width = self.svg.unittouu('0.25 mm') + box_height = max(width/15, self.svg.unittouu('2 mm')) + font_height = 8 + White = '#ffffff' + Black = '#000000' + t = 'translate' + str(pos) + + # create clip in order to get an exact ruler width (without the outer half of the stroke) + path = '//svg:defs' + defslist = self.document.getroot().xpath(path, namespaces=inkex.NSS) + if len(defslist) > 0: + defs = defslist[0] + + clipPathData = {inkex.addNS('label', 'inkscape'):'rulerClipPath', 'clipPathUnits':'userSpaceOnUse', 'id':'rulerClipPath'} + clipPath = etree.SubElement(defs, 'clipPath', clipPathData) + clipBox = {'x':str(-width), 'y':'0.0', + 'width':str(width*2), 'height':str(box_height), + 'style':'fill:%s; stroke:none; fill-opacity:1;' % (Black)} + + etree.SubElement(clipPath, 'rect', clipBox) + + # create groups for scale rule and ruler + scale_group = etree.SubElement(parent, 'g', {inkex.addNS('label','inkscape'):'scale_group', 'transform':t}) + ruler_group = etree.SubElement(scale_group, 'g', {inkex.addNS('label','inkscape'):'ruler', 'clip-path':"url(#rulerClipPath)"}) + + # box for right half of ruler + boxR = {'x':'0.0', 'y':'0.0', + 'width':str(width), 'height':str(box_height), + 'style':'fill:%s; stroke:%s; stroke-width:%s; stroke-opacity:1; fill-opacity:1;' % (White, Black, line_width)} + etree.SubElement(ruler_group, 'rect', boxR) + # top half black + boxRf = {'x':'0.0', 'y':'0.0', + 'width':str(width), 'height':str(box_height/2), + 'style':'fill:%s; stroke:none; fill-opacity:1;' % (Black)} + etree.SubElement(ruler_group, 'rect', boxRf) + # Left half of ruler + boxL = {'x':str(-width), 'y':'0.0', + 'width':str(width), 'height':str(box_height), + 'style':'fill:%s; stroke:%s; stroke-width:%s; stroke-opacity:1; fill-opacity:1;' % (White, Black, line_width)} + etree.SubElement(ruler_group, 'rect', boxL) + # staggered black fills on left half + start = -width + for i in range(5): + boxRf = {'x':str(start), 'y':str((i+1)%2 * box_height/2), + 'width':str(width/5), 'height':str(box_height/2), + 'style':'fill:%s; stroke:none; fill-opacity:1;' % (Black)} + etree.SubElement(ruler_group, 'rect', boxRf) + start += width/5 + # text + textstyle = {'font-size': str(font_height)+ " px", + 'font-family': 'sans-serif', + 'text-anchor': 'middle', + 'text-align': 'center', + 'fill': Black } + text_atts = {'style': str(inkex.Style(textstyle)), + 'x': '0', 'y': str(-font_height/2) } + text = etree.SubElement(scale_group, 'text', text_atts) + text.text = "0" + text_atts = {'style': str(inkex.Style(textstyle)), + 'x': str(width), 'y': str(-font_height/2) } + text = etree.SubElement(scale_group, 'text', text_atts) + text.text = str(value) + + text_atts = {'style':str(inkex.Style(textstyle)), + 'x': str(-width), 'y': str(-font_height/2) } + text = etree.SubElement(scale_group, 'text', text_atts) + text.text = str(value) + # Scale note + text_atts = {'style':str(inkex.Style(textstyle)), + 'x': '0', 'y': str(-font_height*2.5) } + text = etree.SubElement(scale_group, 'text', text_atts) + text.text = "Scale 1:" + str(drawing_scale) + " (" + self.options.unit + ")" + + + def effect(self): + if len(self.options.ids) != 2: + inkex.errormsg("This extension requires two selected objects. The first selected object must be the straight line with two nodes.") + exit() + + # drawing that will be scaled is selected second, must be a single object + scalepath = self.svg.selected[self.options.ids[0]] + drawing = self.svg.selected[self.options.ids[1]] + + if scalepath.tag != inkex.addNS('path','svg'): + inkex.errormsg("The first selected object is not a path.\nPlease select a straight line with two nodes instead.") + exit() + + # apply its transforms to the scaling path, so we get the correct coordinates to calculate path length + scalepath.apply_transform() + + path = CubicSuperPath(scalepath.get('d')) + if len(path) < 1 or len(path[0]) < 2: + inkex.errormsg("This extension requires that the first selected path be two nodes long.") + exit() + + # calculate path length + p1_x = path[0][0][1][0] + p1_y = path[0][0][1][1] + p2_x = path[0][1][1][0] + p2_y = path[0][1][1][1] + + p_length = self.svg.unittouu(str(distance((p1_x, p1_y),(p2_x, p2_y))) + self.svg.unit) + + # Find Drawing Scale + if self.options.choosescale == 'metric': + drawing_scale = int(self.options.metric) + elif self.options.choosescale == 'imperial': + drawing_scale = int(self.options.imperial) + elif self.options.choosescale == 'custom': + drawing_scale = self.options.custom_scale + + # calculate scaling center + center = self.calc_scale_center(p1_x, p1_y, p2_x, p2_y) + + # calculate scaling factor + target_length = self.svg.unittouu(str(self.options.length) + self.options.unit) + factor = (target_length / p_length) / drawing_scale + # inkex.debug("%s, %s %s" % (target_length, p_length, factor)) + + # Add scale ruler + if self.options.showscale == "true": + dist = int(self.options.unitlength) + + ruler_length = self.svg.unittouu(str(dist) + self.options.unit) / drawing_scale + ruler_pos = (p1_x + (p2_x - p1_x)/2, (p1_y + (p2_y - p1_y)/2) - self.svg.unittouu('4 mm')) + + # TODO: add into current layer instead + self.create_ruler(self.document.getroot(), ruler_length, ruler_pos, dist, drawing_scale) + + # Get drawing and current transformations + for obj in (scalepath, drawing): + # Scale both objects about the center, first translate back to origin + scale_matrix = [[1, 0.0, -center[0]], [0.0, 1, -center[1]]] + obj.transform = Transform(scale_matrix) * obj.transform + # Then scale + scale_matrix = [[factor, 0.0, 0.0], [0.0, factor, 0.0]] + obj.transform = Transform(scale_matrix) * obj.transform + # Then translate back to original scale center location + scale_matrix = [[1, 0.0, center[0]], [0.0, 1, center[1]]] + obj.transform = Transform(scale_matrix) * obj.transform + +# Helper function +def distance(xy0, xy1): + x0, y0 = xy0 + x1, y1 = xy1 + return math.sqrt((x0-x1)*(x0-x1) + (y0-y1)*(y0-y1)) + +if __name__ == '__main__': + ScaleToReal().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/scale_to_size/scale_to_size.inx b/extensions/fablabchemnitz/scale_to_size/scale_to_size.inx new file mode 100644 index 00000000..b94a0528 --- /dev/null +++ b/extensions/fablabchemnitz/scale_to_size/scale_to_size.inx @@ -0,0 +1,31 @@ + + + Scale To Size + fablabchemnitz.de.scale_to_size + + + + + + + + + 10.0 + + + + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/scale_to_size/scale_to_size.py b/extensions/fablabchemnitz/scale_to_size/scale_to_size.py new file mode 100644 index 00000000..9bd63980 --- /dev/null +++ b/extensions/fablabchemnitz/scale_to_size/scale_to_size.py @@ -0,0 +1,67 @@ +#!/usr/bin/env python3 + +# Author: Mario Voigt / FabLab Chemnitz +# Mail: mario.voigt@stadtfabrikanten.org +# Date: 04.08.2020 +# License: GNU GPL v3 + +import inkex +from inkex.paths import CubicSuperPath, Path +from inkex import Transform +from lxml import etree +from inkex.styles import Style + +# This extension can scale any object or path on X, Y or both axes. This addon is kind of obsolete because you can do the same from transforms menu + +class ScaleToSize(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument('--unit') + pars.add_argument("--expected_size", type=float, default=1.0, help="The expected size of the object") + pars.add_argument("--scale_type", default="Horizontal", help="Scale type (Uniform, Horizontal, Vertical)") + pars.add_argument("--description") + + def effect(self): + unit_factor = 1.0 / self.svg.uutounit(1.0,self.options.unit) + for id, node in self.svg.selected.items(): + + #get recent XY coordinates (top left corner of the bounding box) + bbox = node.bounding_box() + new_horiz_scale = self.options.expected_size * unit_factor / bbox.width + new_vert_scale = self.options.expected_size * unit_factor / bbox.height + + if self.options.scale_type == "Horizontal": + translation_matrix = [[new_horiz_scale, 0.0, 0.0], [0.0, 1.0, 0.0]] + elif self.options.scale_type == "Vertical": + translation_matrix = [[1.0, 0.0, 0.0], [0.0, new_vert_scale, 0.0]] + else: #Uniform + translation_matrix = [[new_horiz_scale, 0.0, 0.0], [0.0, new_vert_scale, 0.0]] + node.transform = Transform(translation_matrix) * node.transform + + # now that the node moved we need to get the nodes XY coordinates again to fix them + bbox_new = node.bounding_box() + + #inkex.utils.debug(cx) + #inkex.utils.debug(cy) + #inkex.utils.debug(cx_new) + #inkex.utils.debug(cy_new) + + # We remove the transformation attribute from SVG XML tree in case it's regular path. In case the node is an object like arc,circle, ellipse or star we have the attribute "sodipodi:type". Then we do not play with it's path because the size transformation will not apply (this code block is ugly) + if node.get ('sodipodi:type') is None and 'd' in node.attrib: + #inkex.utils.debug("it's a path!") + d = node.get('d') + p = CubicSuperPath(d) + transf = Transform(node.get("transform", None)) + if 'transform' in node.attrib: + del node.attrib['transform'] + p = Path(p).to_absolute().transform(transf, True) + node.set('d', Path(CubicSuperPath(p).to_path())) + #else: + #inkex.utils.debug("it's an object!") + + #we perform second translation to reset the center of the path + translation_matrix = [[1.0, 0.0, bbox.left - bbox_new.left + (bbox.width - bbox_new.width)/2], [0.0, 1.0, bbox.top - bbox_new.top + (bbox.height - bbox_new.height)/2]] + node.transform = Transform(translation_matrix) * node.transform + +if __name__ == '__main__': + ScaleToSize().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/set_view_box/set_view_box.inx b/extensions/fablabchemnitz/set_view_box/set_view_box.inx new file mode 100644 index 00000000..79139495 --- /dev/null +++ b/extensions/fablabchemnitz/set_view_box/set_view_box.inx @@ -0,0 +1,16 @@ + + + Set View Box + fablabchemnitz.de.set_view_box + + rect + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/set_view_box/set_view_box.py b/extensions/fablabchemnitz/set_view_box/set_view_box.py new file mode 100644 index 00000000..2d754c3d --- /dev/null +++ b/extensions/fablabchemnitz/set_view_box/set_view_box.py @@ -0,0 +1,69 @@ +#!/usr/bin/env python3 + +# Copyright (c) 2012 Stuart Pernsteiner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED +# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +import sys +import inkex +from inkex import Transform + +class SetViewBox(inkex.EffectExtension): + + def effect(self): + if len(self.svg.selected) != 1: + sys.exit("Error: You must select exactly one rectangle") + if list(self.svg.selected.items())[0][1].tag != inkex.addNS('rect','svg'): + sys.exit("Error: You must select exactly one rectangle") + + sel = None + for pathId in self.svg.selected: + sel = self.svg.selected[pathId] + + mat = [[1,0,0],[0,1,0]] + cur = sel + while cur is not None: + curMat = Transform(cur.get('transform')) + mat = Transform(curMat) * Transform(mat) + cur = cur.getparent() + + [x,y,w,h] = map(lambda attr: float(sel.get(attr)), + ['x','y','width','height']) + + (x1,y1) = transformPoint(mat, (x,y)) + (x2,y2) = transformPoint(mat, (x+w,y+h)) + + ww = x2-x1 + hh = y2-y1 + + root = self.svg.getElement('//svg:svg'); + root.set('viewBox', '%f %f %f %f' % (x1,y1,ww,hh)) + root.set('width', str(ww)) + root.set('height', str(hh)) + +def transformPoint(mat, pt): + pt2 = [pt[0], pt[1]] + Transform(mat).apply_to_point(pt2) + return (pt2[0], pt2[1]) + +if __name__ == '__main__': + SetViewBox().run() diff --git a/extensions/fablabchemnitz/shape_recognition/shape_recognition.inx b/extensions/fablabchemnitz/shape_recognition/shape_recognition.inx new file mode 100644 index 00000000..cfa3cf2b --- /dev/null +++ b/extensions/fablabchemnitz/shape_recognition/shape_recognition.inx @@ -0,0 +1,52 @@ + + + Shape Recognition + fablabchemnitz.de.shape_recognition + + + + false + true + + + + true + 10.0 + 0.2 + + true + + + + true + 0.500 + 0.48 + 0.50 + + + true + 0.3 + 0.025 + + + true + true + true + true + + + + path + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/shape_recognition/shape_recognition.py b/extensions/fablabchemnitz/shape_recognition/shape_recognition.py new file mode 100644 index 00000000..c5481332 --- /dev/null +++ b/extensions/fablabchemnitz/shape_recognition/shape_recognition.py @@ -0,0 +1,836 @@ +#!/usr/bin/env python +''' +Copyright (C) 2017 , Pierre-Antoine Delsart + +This file is part of InkscapeShapeReco. + +InkscapeShapeReco is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with InkscapeShapeReco; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + + +Quick description: +This extension uses all selected path, ignoring all other selected objects. +It tries to regularize hand drawn paths BY : + - evaluating if the path is a full circle or ellipse + - else finding sequences of aligned points and replacing them by a simple segment. + - changing the segments angles to the closest remarkable angle (pi/2, pi/3, pi/6, etc...) + - eqalizing all segments lengths which are close to each other + - replacing 4 segments paths by a rectangle object if this makes sens (giving the correct rotation to the rectangle). + +Requires numpy. + +''' + +import sys +sys.path.append('/usr/share/inkscape/extensions') +import inkex +import gettext +_ = gettext.gettext + +# ************************************************************* +# debugging +def void(*l): + pass +def debug_on(*l): + sys.stderr.write(' '.join(str(i) for i in l) +'\n') +debug = void +#debug = debug_on + +from shaperrec import geometric +from shaperrec import internal +from shaperrec import groups +from shaperrec import manipulation +from shaperrec import extenders +from shaperrec import miscellaneous + +import numpy +numpy.set_printoptions(precision=3) + +class PreProcess(): + + def removeSmallEdge(paths, wTot, hTot): + """Remove small Path objects which stand between 2 Segments (or at the ends of the sequence). + Small means the bbox of the path is less then 5% of the mean of the 2 segments.""" + if len(paths)<2: + return + def getdiag(points): + xmin, ymin, w, h = geometric.computeBox(points) + return numpy.sqrt(w**2+h**2), w, h + removeSeg=[] + def remove(p): + removeSeg.append(p) + if hasattr(p, "__next__") : p.next.prev = p.prev + if p.prev: p.prev.next = p.__next__ if hasattr(p, "__next__") else None + p.effectiveNPoints =0 + debug(' --> remove !', p, p.length, len(p.points)) + for p in paths: + if len(p.points)==0 : + remove(p) + continue + # select only path between 2 segments + next, prev = p.__next__ if hasattr(p, "__next__") else None, p.prev + if next is None: next = prev + if prev is None: prev = next + if not (False if next == None else next.isSegment()) or not (False if prev == None else prev.isSegment()) : continue + #diag = getdiag(p.points) + diag, w, h = getdiag(p.points) + + debug(p, p.pointN, ' removing edge diag = ', diag, p.length, ' l=', next.length+prev.length, 'totDim ', (wTot, hTot)) + debug( ' ---> ', prev, next) + + #t TODO: his needs to be parameterized + # remove last or first very small in anycase + doRemove = prev==next and (diag < 0.05*(wTot+hTot)*0.5 ) + if not doRemove: + # check if this small + isLarge = diag > (next.length+prev.length)*0.1 # check size relative to neighbour + isLarge = isLarge or w > 0.2*wTot or h > 0.2*hTot # check size w.r.t total size + + # is it the small side of a long rectangle ? + dd = prev.distanceTo(next.pointN) + rect = abs(prev.unitv.dot(next.unitv))>0.98 and diag > dd*0.5 + doRemove = not( isLarge or rect ) + + if doRemove: + remove(p) + + if next != prev: + prev.setIntersectWithNext(next) + debug('removed Segments ', removeSeg) + for p in removeSeg: + paths.remove(p) + + def prepareParrallelize( segs): + """Group Segment by their angles (segments are grouped together if their deltAangle is within 0.15 rad) + The 'newAngle' member of segments in a group are then set to the mean angle of the group (where angles are all + considered in [-pi, pi]) + + segs : list of segments + """ + + angles = numpy.array([s.angle for s in segs ]) + angles[numpy.where(angles<0)] += geometric._pi # we care about direction, not angle orientation + clList = miscellaneous.clusterValues(angles, 0.30, refScaleAbs='abs')#was 15 + + pi = numpy.pi + for cl in clList: + anglecount = {} + for angle in angles[list(cl)]: + # #angleDeg = int(angle * 360.0 / (2.0*pi)) + if not angle in anglecount: + anglecount[angle] = 1 + else: + anglecount[angle] += 1 + + anglecount = {k: v for k, v in sorted(list(anglecount.items()), key=lambda item: item[1], reverse=True)} + meanA = anglecount.popitem()[0]#.items()[1]#sorted(anglecount.items(), key = lambda kv:(kv[1], kv[0]), reverse=True)[1][1] + #meanA = float(meanA) * (2.0*pi) / 360.0 + #meanA = angles[list(cl)].mean() + for i in cl: + seg = segs[i] + seg.newAngle = meanA if seg.angle>=0. else meanA-geometric._pi + + + def prepareDistanceEqualization(segs, relDelta=0.1): + """ Input segments are grouped according to their length : + - for each length L, find all other lengths within L*relDelta. of L. + - Find the larger of such subgroup. + - repeat the procedure on remaining lengths until none is left. + Each length in a group is set to the mean length of the group + + segs : a list of segments + relDelta : float, minimum relative distance. + """ + + lengths = numpy.array( [x.tempLength() for x in segs] ) + clusters = miscellaneous.clusterValues(lengths, relDelta) + + if len(clusters)==1: + # deal with special case with low num of segments + # --> don't let a single segment alone + if len(clusters[0])+1==len(segs): + clusters[0]=list(range(len(segs))) # all + + allDist = [] + for cl in clusters: + dmean = sum( lengths[i] for i in cl ) / len(cl) + allDist.append(dmean) + for i in cl: + segs[i].setNewLength(dmean) + debug( i, ' set newLength ', dmean, segs[i].length, segs[i].dumpShort()) + + return allDist + + + def prepareRadiusEqualization(circles, otherDists, relSize=0.2): + """group circles radius and distances into cluster. + Then set circles radius according to the mean of the clusters they belong to.""" + ncircles = len(circles) + lengths = numpy.array( [c.radius for c in circles]+otherDists ) + indices = numpy.array( list(range(ncircles+len(otherDists))) ) + clusters = miscellaneous.clusterValues(numpy.stack([ lengths, indices ], 1 ), relSize, refScaleAbs='local' ) + + debug('prepareRadiusEqualization radius ', repr(lengths)) + debug('prepareRadiusEqualization clusters ', clusters) + allDist = [] + for cl in clusters: + dmean = sum( lengths[i] for i in cl ) / len(cl) + #print cl , dmean , + allDist.append(dmean) + if len(cl)==1: + continue + for i in cl: + if i< ncircles: + circles[i].radius = dmean + debug(' post radius ', [c.radius for c in circles] ) + return allDist + + + def centerCircOnSeg(circles, segments, relSize=0.18): + """ move centers of circles onto the segments if close enough""" + for circ in circles: + circ.moved = False + for seg in segments: + for circ in circles: + d = seg.distanceTo(circ.center) + #debug( ' ', seg.projectPoint(circ.center)) + if d < circ.radius*relSize and not circ.moved : + circ.center = seg.projectPoint(circ.center) + circ.moved = True + + + def adjustToKnownAngle( paths): + """ Check current angle against remarkable angles. If close enough, change it + paths : a list of segments""" + for seg in paths: + a = seg.tempAngle() + i = (abs(geometric.vec_in_mPi_pPi(geometric.knownAngle - a) )).argmin() + seg.newAngle = geometric.knownAngle[i] + debug( ' Known angle ', seg, seg.tempAngle(), ' -> ', geometric.knownAngle[i]) + ## if abs(geometric.knownAngle[i] - a) < 0.08: + +class PostProcess(): + def mergeConsecutiveParralels(segments, options): + ignoreNext=False + newList=[] + for s in segments: + if ignoreNext: + ignoreNext=False + continue + if not s.isSegment(): + newList.append(s) + continue + if not hasattr(s, "__next__"): + newList.append(s) + continue + if not s.next.isSegment(): + newList.append(s) + continue + d = geometric.closeAngleAbs(s.angle, s.next.angle) + if d < options.segAngleMergePara: + debug("merging ", s.angle, s.next.angle ) + snew = s.mergedWithNext(doRefit=False) + ignoreNext=True + newList.append(snew) + else: + debug("notmerging ", s.angle, s.next.angle ) + newList.append(s) + if len(segments)>len(newList): + debug("merged parallel ", segments, '-->', newList) + return newList + + def uniformizeShapes(pathGroupList, options): + allSegs = [ p for g in pathGroupList for p in g.listOfPaths if p.isSegment() ] + + if options.doParrallelize: + PreProcess.prepareParrallelize(allSegs) + if options.doKnownAngle: + PreProcess.adjustToKnownAngle(allSegs) + + adjustAng = options.doKnownAngle or options.doParrallelize + + allShapeDist = [] + for g in [ group for group in pathGroupList if not isinstance(group, groups.Circle)]: + # first pass : independently per path + if adjustAng: + manipulation.adjustAllAngles(g.listOfPaths) + g.listOfPaths[:] = PostProcess.mergeConsecutiveParralels(g.listOfPaths, options) + if options.doEqualizeDist: + allShapeDist=allShapeDist + PreProcess.prepareDistanceEqualization([p for p in g.listOfPaths if p.isSegment()], options.shapeDistLocal ) ##0.30 + manipulation.adjustAllDistances([p for p in g.listOfPaths if p.isSegment()]) #findme was group.li.. + + ## # then 2nd global pass, with tighter criteria + if options.doEqualizeDist: + allShapeDist=PreProcess.prepareDistanceEqualization(allSegs, options.shapeDistGlobal) ##0.08 + for g in [ group for group in pathGroupList if not isinstance(group, groups.Circle)]: + manipulation.adjustAllDistances([p for p in g.listOfPaths if p.isSegment()]) + + #TODO: I think this is supposed to close thje paths and it is failing + for g in pathGroupList: + if g.isClosing and not isinstance(g, groups.Circle): + debug('Closing intersec ', g.listOfPaths[0].point1, g.listOfPaths[0].pointN ) + g.listOfPaths[-1].setIntersectWithNext(g.listOfPaths[0]) + + + circles=[ group for group in pathGroupList if isinstance(group, groups.Circle)] + if options.doEqualizeRadius: + PreProcess.prepareRadiusEqualization(circles, allShapeDist) + if options.doCenterCircOnSeg: + PreProcess.centerCircOnSeg(circles, allSegs) + + pathGroupList = [manipulation.toRemarkableShape(g) for g in pathGroupList] + return pathGroupList + +class FitShapes(): + def checkForCircle(points, tangents): + """Determine if the points and their tangents represent a circle + + The difficulty is to be able to recognize ellipse while avoiding paths small fluctuations a + nd false positive due to badly drawn rectangle or non-convex closed curves. + + Method : we consider angle of tangent as function of lenght on path. + For circles these are : angle = c1 x lenght + c0. (c1 ~1) + + We calculate dadl = d(angle)/d(length) and compare to c1. + We use 3 criteria : + * num(dadl > 6) : number of sharp angles + * length(dadl<0.3)/totalLength : lengths of straight lines within the path. + * totalLength/(2pi x radius) : fraction of lenght vs a plain circle + + Still failing to recognize elongated ellipses... + + """ + if len(points)<10: + return False, 0 + + if all(points[0]==points[-1]): # last exactly equals the first. + # Ignore last point for this check + points = points[:-1] + tangents = tangents[:-1] + #print 'Removed last ', points + xmin, ymin, w, h = geometric.computeBox( points) + diag2=(w*w+h*h) + + diag = numpy.sqrt(diag2)*0.5 + norms = numpy.sqrt(numpy.sum( tangents**2, 1 )) + + angles = numpy.arctan2( tangents[:, 1], tangents[:, 0] ) + #debug( 'angle = ', repr(angles)) + N = len(angles) + + deltas = points[1:] - points[:-1] + deltasD = numpy.concatenate([ [geometric.D(points[0], points[-1])/diag], numpy.sqrt(numpy.sum( deltas**2, 1 )) / diag] ) + + # locate and avoid the point when swicthing + # from -pi to +pi. The point is around the minimum + imin = numpy.argmin(angles) + debug(' imin ', imin) + angles = numpy.roll(angles, -imin) + deltasD = numpy.roll(deltasD, -imin) + n=int(N*0.1) + # avoid fluctuations by removing points around the min + angles=angles[n:-n] + deltasD=deltasD[n:-n] + deltasD = deltasD.cumsum() + N = len(angles) + + # smooth angles to avoid artificial bumps + angles = manipulation.smoothArray(angles, n=max(int(N*0.03), 2) ) + + deltaA = angles[1:] - angles[:-1] + deltasDD = (deltasD[1:] -deltasD[:-1]) + deltasDD[numpy.where(deltasDD==0.)] = 1e-5*deltasD[0] + dAdD = abs(deltaA/deltasDD) + belowT, count = True, 0 + for v in dAdD: + if v>6 and belowT: + count+=1 + belowT = False + belowT= (v<6) + + temp = (deltasD, angles, tangents, dAdD ) + fracStraight = numpy.sum(deltasDD[numpy.where(dAdD<0.3)])/(deltasD[-1]-deltasD[0]) + curveLength = deltasD[-1]/3.14 + #print "SSS ",count , fracStraight + if curveLength> 1.4 or fracStraight>0.4 or count > 6: + isCircle =False + else: + isCircle= (count < 4 and fracStraight<=0.3) or \ + (fracStraight<=0.1 and count<5) + + if not isCircle: + return False, 0 + + # It's a circle ! + radius = points - numpy.array([xmin+w*0.5, ymin+h*0.5]) + radius_n = numpy.sqrt(numpy.sum( radius**2, 1 )) # normalize + + mini = numpy.argmin(radius_n) + rmin = radius_n[mini] + maxi = numpy.argmax(radius_n) + rmax = radius_n[maxi] + # void points around maxi and mini to make sure the 2nd max is found + # on the "other" side + n = len(radius_n) + radius_n[maxi]=0 + radius_n[mini]=0 + for i in range(1, int(n/8+1)): + radius_n[(maxi+i)%n]=0 + radius_n[(maxi-i)%n]=0 + radius_n[(mini+i)%n]=0 + radius_n[(mini-i)%n]=0 + radius_n_2 = [ r for r in radius_n if r>0] + rmax_2 = max(radius_n_2) + rmin_2 = min(radius_n_2) # not good !! + anglemax = numpy.arccos( radius[maxi][0]/rmax)*numpy.sign(radius[maxi][1]) + return True, (xmin+w*0.5, ymin+h*0.5, 0.5*(rmin+rmin_2), 0.5*(rmax+rmax_2), anglemax) + + + def checkForArcs(points, tangents): + """Determine if the points and their tangents represent a circle + + The difficulty is to be able to recognize ellipse while avoiding paths small fluctuations a + nd false positive due to badly drawn rectangle or non-convex closed curves. + + Method : we consider angle of tangent as function of lenght on path. + For circles these are : angle = c1 x lenght + c0. (c1 ~1) + + We calculate dadl = d(angle)/d(length) and compare to c1. + We use 3 criteria : + * num(dadl > 6) : number of sharp angles + * length(dadl<0.3)/totalLength : lengths of straight lines within the path. + * totalLength/(2pi x radius) : fraction of lenght vs a plain circle + + Still failing to recognize elongated ellipses... + + """ + if len(points)<10: + return False, 0 + + if all(points[0]==points[-1]): # last exactly equals the first. + # Ignore last point for this check + points = points[:-1] + tangents = tangents[:-1] + print(('Removed last ', points)) + xmin, ymin, w, h = geometric.computeBox( points) + diag2=(w*w+h*h) + + diag = numpy.sqrt(diag2)*0.5 + norms = numpy.sqrt(numpy.sum( tangents**2, 1 )) + + angles = numpy.arctan2( tangents[:, 1], tangents[:, 0] ) + #debug( 'angle = ', repr(angles)) + N = len(angles) + + deltas = points[1:] - points[:-1] + deltasD = numpy.concatenate([ [geometric.D(points[0], points[-1])/diag], numpy.sqrt(numpy.sum( deltas**2, 1 )) / diag] ) + + # locate and avoid the point when swicthing + # from -pi to +pi. The point is around the minimum + imin = numpy.argmin(angles) + debug(' imin ', imin) + angles = numpy.roll(angles, -imin) + deltasD = numpy.roll(deltasD, -imin) + n=int(N*0.1) + # avoid fluctuations by removing points around the min + angles=angles[n:-n] + deltasD=deltasD[n:-n] + deltasD = deltasD.cumsum() + N = len(angles) + + # smooth angles to avoid artificial bumps + angles = manipulation.smoothArray(angles, n=max(int(N*0.03), 2) ) + + deltaA = angles[1:] - angles[:-1] + deltasDD = (deltasD[1:] -deltasD[:-1]) + deltasDD[numpy.where(deltasDD==0.)] = 1e-5*deltasD[0] + dAdD = abs(deltaA/deltasDD) + belowT, count = True, 0 + + + self.temp = (deltasD, angles, tangents, dAdD ) + #TODO: Loop over deltasDD searching for curved segments, no sharp bumps and a curve of at least 1/4 pi + curveStart = 0 + curveToTest= numpy.array([deltasDD[curveStart]]); + dAdDd = numpy.array([dAdD[curveStart]]) + v = dAdD[curveStart] + belowT= (v<6) + for i in range(1, deltasDD.size): + curveToTest = numpy.append(curveToTest, deltasDD[i]) + dAdDd = numpy.append(dAdDd, dAdD[i]) + fracStraight = numpy.sum(curveToTest[numpy.where(dAdDd<0.3)])/(deltasD[i]-deltasD[curveStart]) + curveLength = (deltasD[i]-deltasD[curveStart])/3.14 + + v = dAdD[i] + if v>6 and belowT: + count+=1 + belowT = False + belowT= (v<6) + inkex.debug("SSS "+str(count) +":"+ str(fracStraight)) + if curveLength> 1.4 or fracStraight>0.4 or count > 8: + inkex.debug("curveLengtha:" + str(curveLength) +"fracStraight:"+str(fracStraight)+"count:"+str(count)) + isArc=False + curveStart=int(i) + curveToTest= numpy.array([deltasDD[curveStart]]); + v = dAdD[curveStart] + dAdDd = numpy.array([dAdD[curveStart]]) + belowT= (v<6) + count = 0 + continue + else: + inkex.debug("curveLengthb:" + str(curveLength) +"fracStraight:"+str(fracStraight)+"count:"+str(count)) + isArc= (count < 4 and fracStraight<=0.3) or \ + (fracStraight<=0.1 and count<5) + + if not isArc: + return False, 0 + + # It's a circle ! + radius = points - numpy.array([xmin+w*0.5, ymin+h*0.5]) + radius_n = numpy.sqrt(numpy.sum( radius**2, 1 )) # normalize + + mini = numpy.argmin(radius_n) + rmin = radius_n[mini] + maxi = numpy.argmax(radius_n) + rmax = radius_n[maxi] + # void points around maxi and mini to make sure the 2nd max is found + # on the "other" side + n = len(radius_n) + radius_n[maxi]=0 + radius_n[mini]=0 + for i in range(1, int(n/8+1)): + radius_n[(maxi+i)%n]=0 + radius_n[(maxi-i)%n]=0 + radius_n[(mini+i)%n]=0 + radius_n[(mini-i)%n]=0 + radius_n_2 = [ r for r in radius_n if r>0] + rmax_2 = max(radius_n_2) + rmin_2 = min(radius_n_2) # not good !! + anglemax = numpy.arccos( radius[maxi][0]/rmax)*numpy.sign(radius[maxi][1]) + return True, (xmin+w*0.5, ymin+h*0.5, 0.5*(rmin+rmin_2), 0.5*(rmax+rmax_2), anglemax) + + + + + def tangentEnvelop(svgCommandsList, refNode, options): + a, svgCommandsList = geometric.toArray(svgCommandsList) + tangents = manipulation.buildTangents(a) + + newSegs = [ internal.Segment.fromCenterAndDir( p, t ) for (p, t) in zip(a, tangents) ] + debug("build envelop ", newSegs[0].point1, newSegs[0].pointN) + clustersInd = manipulation.clusterAngles( [s.angle for s in newSegs] ) + debug("build envelop cluster: ", clustersInd) + + return TangentEnvelop( newSegs, svgCommandsList, refNode) + + def isClosing(wTot, hTot, d): + aR = min(wTot/hTot, hTot/wTot) + maxDim = max(wTot, hTot) + # was 0.2 + return aR*0.5 > d/maxDim + + + def curvedFromTangents(svgCommandsList, refNode, x, y, wTot, hTot, d, isClosing, sourcepoints, tangents, options): + +# debug('isClosing ', isClosing, maxDim, d) + + # global quantities : + hasArcs = False + res = () + # Check if circle ----------------------- + if isClosing: + if len(sourcepoints)<9: + return groups.PathGroup.toSegments(sourcepoints, svgCommandsList, refNode, isClosing=True) + isCircle, res = FitShapes.checkForCircle( sourcepoints, tangents) + debug("Is Circle = ", isCircle ) + if isCircle: + x, y, rmin, rmax, angle = res + debug("Circle -> ", rmin, rmax, angle ) + if rmin/rmax>0.7: + circ = groups.Circle((x, y), 0.5*(rmin+rmax), refNode ) + else: + circ = groups.Circle((x, y), rmin, refNode, rmax=rmax, angle=angle) + circ.points = sourcepoints + return circ + #else: + # hasArcs, res = FitShapes.checkForArcs( sourcepoints, tangents) + #else: + #hasArcs, res = FitShapes.checkForArcs( sourcepoints, tangents) + # ----------------------- + if hasArcs: + x, y, rmin, rmax, angle = res + debug("Circle -> ", rmin, rmax, angle ) + if rmin/rmax>0.7: + circ = groups.Circle((x, y), 0.5*(rmin+rmax), refNode ) + else: + circ = groups.Circle((x, y), rmin, refNode, rmax=rmax, angle=angle) + circ.points = sourcepoints + return circ + return None + + def segsFromTangents(svgCommandsList, refNode, options): + """Finds segments part in a list of points represented by svgCommandsList. + + The method is to build the (averaged) tangent vectors to the curve. + Aligned points will have tangent with similar angle, so we cluster consecutive angles together + to define segments. + Then we extend segments to connected points not already part of other segments. + Then we merge consecutive segments with similar angles. + + """ + sourcepoints, svgCommandsList = geometric.toArray(svgCommandsList) + + d = geometric.D(sourcepoints[0], sourcepoints[-1]) + x, y, wTot, hTot = geometric.computeBox(sourcepoints) + if wTot == 0: wTot = 0.001 + if hTot == 0: hTot = 0.001 + if d==0: + # then we remove the last point to avoid null distance + # in other calculations + sourcepoints = sourcepoints[:-1] + svgCommandsList = svgCommandsList[:-1] + + isClosing = FitShapes.isClosing(wTot, hTot, d) + + if len(sourcepoints) < 4: + return groups.PathGroup.toSegments(sourcepoints, svgCommandsList, refNode, isClosing=isClosing) + + tangents = manipulation.buildTangents(sourcepoints, isClosing=isClosing) + + aCurvedSegment = FitShapes.curvedFromTangents(svgCommandsList, refNode, x, y, wTot, hTot, d, isClosing, sourcepoints, tangents, options) + + if not aCurvedSegment == None: + return aCurvedSegment + + # cluster points by angle of their tangents ------------- + tgSegs = [ internal.Segment.fromCenterAndDir( p, t ) for (p, t) in zip(sourcepoints, tangents) ] + clustersInd = sorted(manipulation.clusterAngles( [s.angle for s in tgSegs] )) + debug("build envelop cluster: ", clustersInd) + + # build Segments from clusters + newSegs = [] + for imin, imax in clustersInd: + if imin+1< imax: # consider clusters with more than 3 points + seg = manipulation.fitSingleSegment(sourcepoints[imin:imax+1]) + elif imin+1==imax: # 2 point path : we build a segment + seg = internal.Segment.from2Points(sourcepoints[imin], sourcepoints[imax], sourcepoints[imin:imax+1]) + else: + seg = internal.Path( sourcepoints[imin:imax+1] ) + seg.sourcepoints = sourcepoints + newSegs.append( seg ) + manipulation.resetPrevNextSegment( newSegs ) + debug(newSegs) + # ----------------------- + + + # ----------------------- + # Merge consecutive Path objects + updatedSegs=[] + def toMerge(p): + l=[p] + setattr(p, 'merged', True) + if hasattr(p, "__next__") and not p.next.isSegment(): + l += toMerge(p.next) + return l + + for i, seg in enumerate(newSegs[:-1]): + if seg.isSegment(): + updatedSegs.append( seg) + continue + if hasattr(seg, 'merged'): continue + mergeList = toMerge(seg) + debug('merging ', mergeList) + p = internal.Path(numpy.concatenate([ p.points for p in mergeList]) ) + debug('merged == ', p.points) + updatedSegs.append(p) + + if not hasattr(newSegs[-1], 'merged'): updatedSegs.append( newSegs[-1]) + debug("merged path", updatedSegs) + newSegs = manipulation.resetPrevNextSegment( updatedSegs ) + + + # Extend segments ----------------------------------- + if options.segExtensionEnable: + newSegs = extenders.SegmentExtender.extendSegments( newSegs, options.segExtensionDtoSeg, options.segExtensionQual ) + debug("extended segs", newSegs) + newSegs = manipulation.resetPrevNextSegment( newSegs ) + debug("extended segs", newSegs) + + # ---------------------------------------- + + + # --------------------------------------- + # merge consecutive segments with close angle + updatedSegs=[] + + if options.segAngleMergeEnable: + newSegs = miscellaneous.mergeConsecutiveCloseAngles( newSegs, mangle=options.segAngleMergeTol1 ) + newSegs=manipulation.resetPrevNextSegment(newSegs) + debug(' __ 2nd angle merge') + newSegs = miscellaneous.mergeConsecutiveCloseAngles( newSegs, mangle=options.segAngleMergeTol2 ) # 2nd pass + newSegs=manipulation.resetPrevNextSegment(newSegs) + debug('after merge ', len(newSegs), newSegs) + # Check if first and last also have close angles. + if isClosing and len(newSegs)>2 : + first, last = newSegs[0], newSegs[-1] + if first.isSegment() and last.isSegment(): + if geometric.closeAngleAbs( first.angle, last.angle) < 0.1: + # force merge + points= numpy.concatenate( [ last.points, first.points] ) + newseg = manipulation.fitSingleSegment(points) + newseg.next = first.__next__ if hasattr(first, "__next__") else None + last.prev.next = None + newSegs[0]=newseg + newSegs.pop() + + # ----------------------------------------------------- + # remove negligible Path/Segments between 2 large Segments + if options.segRemoveSmallEdge: + PreProcess.removeSmallEdge(newSegs, wTot, hTot) + newSegs=manipulation.resetPrevNextSegment(newSegs) + + debug('after remove small ', len(newSegs), newSegs) + # ----------------------------------------------------- + + # ----------------------------------------------------- + # Extend segments to their intersections + for p in newSegs: + if p.isSegment() and hasattr(p, "__next__"): + p.setIntersectWithNext() + # ----------------------------------------------------- + + return groups.PathGroup(newSegs, svgCommandsList, refNode, isClosing) + + + + +# ************************************************************* +# The inkscape extension +# ************************************************************* +class ShapeRecognition(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument("--title") + pars.add_argument("--keepOrigin", dest="keepOrigin", default=False, type=inkex.Boolean, help="Do not replace path") + pars.add_argument("--MainTabs") + pars.add_argument("--segExtensionDtoSeg", dest="segExtensionDtoSeg", default=0.03, type=float, help="max distance from point to segment") + pars.add_argument("--segExtensionQual", dest="segExtensionQual", default=0.5, type=float, help="segment extension fit quality") + pars.add_argument("--segExtensionEnable", dest="segExtensionEnable", default=True, type=inkex.Boolean, help="Enable segment extension") + pars.add_argument("--segAngleMergeEnable", dest="segAngleMergeEnable", default=True, type=inkex.Boolean, help="Enable merging of almost aligned consecutive segments") + pars.add_argument("--segAngleMergeTol1", dest="segAngleMergeTol1", default=0.2, type=float, help="merging with tollarance 1") + pars.add_argument("--segAngleMergeTol2", dest="segAngleMergeTol2", default=0.35, type=float, help="merging with tollarance 2") + pars.add_argument("--segAngleMergePara", dest="segAngleMergePara", default=0.001, type=float, help="merge lines as parralels if they fit") + pars.add_argument("--segRemoveSmallEdge", dest="segRemoveSmallEdge", default=True, type=inkex.Boolean, help="Enable removing very small segments") + pars.add_argument("--doUniformization", dest="doUniformization", default=True, type=inkex.Boolean, help="Preform angles and distances uniformization") + for opt in ["doParrallelize", "doKnownAngle", "doEqualizeDist", "doEqualizeRadius", "doCenterCircOnSeg"]: + pars.add_argument( "--"+opt, dest=opt, default=True, type=inkex.Boolean, help=opt) + pars.add_argument("--shapeDistLocal", dest="shapeDistLocal", default=0.3, type=float, help="Pthe percentage of difference at which we make lengths equal, locally") + pars.add_argument("--shapeDistGlobal", dest="shapeDistGlobal", default=0.025, type=float, help="Pthe percentage of difference at which we make lengths equal, globally") + + + + def effect(self): + + rej='{http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd}type' + paths = [] + for id, node in list(self.svg.selected.items()): + if node.tag == '{http://www.w3.org/2000/svg}path' and rej not in list(node.keys()): + paths.append(node) + + shapes = self.extractShapes(paths) + # add new shapes in SVG document + self.addShapesToDoc( shapes ) + + def extractShapesFromID( self, *nids, **options ): + """for debugging purpose """ + eList = [] + for nid in nids: + el = self.getElementById(nid) + if el is None: + print(("Cant find ", nid)) + return + eList.append(el) + class tmp: + pass + + self.options = self.OptionParser.parse_args()[0] + self.options._update_careful(options) + nodes=self.extractShapes(eList) + self.shape = nodes[0] + + + def buildShape(self, node): + def rotationAngle(tr): + if tr and tr.startswith('rotate'): + # retrieve the angle : + return float(tr[7:-1].split(',')) + else: + return 0. + + if node.tag.endswith('path'): + g = FitShapes.segsFromTangents(node.path.to_arrays(), node, self.options) + elif node.tag.endswith('rect'): + tr = node.get('transform', None) + if tr and tr.startswith('matrix'): + return None # can't deal with scaling + recSize = numpy.array([node.get('width'), node.get('height')]) + recCenter = numpy.array([node.get('x'), node.get('y')]) + recSize/2 + angle=rotationAngle(tr) + g = groups.Rectangle( recSize, recCenter, 0, [], node) + elif node.tag.endswith('circle'): + g = groups.Circle(node.get('cx'), node.get('cy'), node.get('r'), [], node ) + elif node.tag.endswith('ellipse'): + if tr and tr.startswith('matrix'): + return None # can't deal with scaling + angle=rotationAngle(tr) + rx = node.get('rx') + ry = node.get('ry') + g = groups.Circle(node.get('cx'), node.get('cy'), ry, rmax=rx, angle=angle, refNode=node) + + return g + + def extractShapes( self, nodes ): + """The main function. + nodes : a list of nodes""" + analyzedNodes = [] + + # convert nodes to list of segments (groups.PathGroup) or Circle + for n in nodes : + g = self.buildShape(n) + if g : + analyzedNodes.append( g ) + + # uniformize shapes + if self.options.doUniformization: + analyzedNodes = PostProcess.uniformizeShapes(analyzedNodes, self.options) + + return analyzedNodes + + def addShapesToDoc(self, pathGroupList): + for group in pathGroupList: + + debug("final ", group.listOfPaths, group.refNode ) + debug("final-style ", group.refNode.get('style')) + # change to Rectangle if possible : + finalshape = manipulation.toRemarkableShape( group ) + ele = group.addToNode( group.refNode) + group.setNodeStyle(ele, group.refNode) + if not self.options.keepOrigin: + group.refNode.xpath('..')[0].remove(group.refNode) + + + +if __name__ == '__main__': + ShapeRecognition().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/shape_recognition/shaperrec/extenders.py b/extensions/fablabchemnitz/shape_recognition/shaperrec/extenders.py new file mode 100644 index 00000000..29c7712e --- /dev/null +++ b/extensions/fablabchemnitz/shape_recognition/shaperrec/extenders.py @@ -0,0 +1,130 @@ +import numpy +import sys +from shaperrec import manipulation + +# ************************************************************* +# debugging +def void(*l): + pass +def debug_on(*l): + sys.stderr.write(' '.join(str(i) for i in l) +'\n') +debug = void +#debug = debug_on + +##************************************** +## +class SegmentExtender: + """Extend Segments part of a list of Path by aggregating points from neighbouring Path objects. + + There are 2 concrete subclasses for extending forward and backward (due to technical reasons). + """ + + def __init__(self, relD, fitQ): + self.relD = relD + self.fitQ = fitQ + + def nextPaths(self, seg): + pL = [] + p = self.getNext(seg) # prev or next + while p : + if p.isSegment(): break + if p.mergedObj is None: break + pL.append(p) + p = self.getNext(p) + if pL==[]: + return [] + return pL + + def extend(self, seg): + nextPathL = self.nextPaths(seg) + debug('extend ', self.extDir, seg, nextPathL, seg.length, len(nextPathL)) + if nextPathL==[]: return seg + pointsToTest = numpy.concatenate( [p.points for p in nextPathL] ) + mergeD = seg.length*self.relD + #print seg.point1 , seg.pointN, pointsToTest + pointsToFit, addedPoints = self.pointsToFit(seg, pointsToTest, mergeD) + if len(pointsToFit)==0: + return seg + newseg = manipulation.fitSingleSegment(pointsToFit) + if newseg.quality()>self.fitQ: # fit failed + return seg + debug( ' EXTENDING ! ', len(seg.points), len(addedPoints) ) + self.removePath(seg, newseg, nextPathL, addedPoints ) + newseg.points = pointsToFit + seg.mergedObj= newseg + newseg.sourcepoints = seg.sourcepoints + + return newseg + + @staticmethod + def extendSegments(segmentList, relD=0.03, qual=0.5): + """Perform Segment extension from list of Path segmentList + returns the updated list of Path objects""" + fwdExt = FwdExtender(relD, qual) + bwdExt = BwdExtender(relD, qual) + # tag all objects with an attribute pointing to the extended object + for seg in segmentList: + seg.mergedObj = seg # by default the extended object is self + # extend each segments, starting by the longest + for seg in sorted(segmentList, key = lambda s : s.length, reverse=True): + if seg.isSegment(): + newseg=fwdExt.extend(seg) + seg.mergedObj = bwdExt.extend(newseg) + # the extension procedure has marked as None the mergedObj + # which have been swallowed by an extension. + # filter them out : + updatedSegs=[seg.mergedObj for seg in segmentList if seg.mergedObj] + return updatedSegs + + +class FwdExtender(SegmentExtender): + extDir='Fwd' + def getNext(self, seg): + return seg.__next__ if hasattr(seg, "__next__") else None + def pointsToFit(self, seg, pointsToTest, mergeD): + distancesToLine =abs(seg.a*pointsToTest[:, 0]+seg.b*pointsToTest[:, 1]+seg.c) + goodInd=len(pointsToTest) + for i, d in reversed(list(enumerate(distancesToLine))): + if dnexp: + np = int(deltaD[ind]/medDelta) + pL = [a[ind]] + #print i,'=',ind,'adding ', np,' _ ', deltaD[ind], a[ind], a[ind+1] + for j in range(np-1): + f = float(j+1)/np + #print '------> ', (1-f)*a[ind]+f*a[ind+1] + pL.append( (1-f)*a[ind]+f*a[ind+1] ) + newpoints[ind] = pL + else: + newpoints[ind]=[a[ind]] + if(D(a[0], a[-1])/sizeC > 0.005 ) : + newpoints[-1]=[a[-1]] + + points = numpy.concatenate([p for p in newpoints if p!=None] ) +# ## print ' medDelta ', medDelta, deltaD[sortedDind[-1]] +# ## print len(a) ,' ------> ', len(points) + + rel_norms = numpy.sqrt(numpy.sum( deltas**2, 1 )) / sizeC + keep = numpy.concatenate([numpy.where( rel_norms >0.005 )[0], numpy.array([len(a)-1])]) + + #return a[keep] , [ parsedList[i] for i in keep] + #print len(a),' ',len(points) + return points, [] + +rotMat = numpy.array( [[1, -1], [1, 1]] )/numpy.sqrt(2) +unrotMat = numpy.array( [[1, 1], [-1, 1]] )/numpy.sqrt(2) + +def setupKnownAngles(): + pi = numpy.pi + #l = [ i*pi/8 for i in range(0, 9)] +[ i*pi/6 for i in [1,2,4,5,] ] + l = [ i*pi/8 for i in range(0, 9)] +[ i*pi/6 for i in [1, 2, 4, 5,] ] + [i*pi/12 for i in (1, 5, 7, 11)] + knownAngle = numpy.array( l ) + return numpy.concatenate( [-knownAngle[:0:-1], knownAngle ]) +knownAngle = setupKnownAngles() + +_twopi = 2*numpy.pi +_pi = numpy.pi + +def deltaAngle(a1, a2): + d = a1 - a2 + return d if d > -_pi else d+_twopi + +def closeAngleAbs(a1, a2): + d = abs(a1 - a2 ) + return min( abs(d-_pi), abs( _twopi - d), d) + +def deltaAngleAbs(a1, a2): + return abs(in_mPi_pPi(a1 - a2 )) + +def in_mPi_pPi(a): + if(a>_pi): return a-_twopi + if(a<-_pi): return a+_twopi + return a +vec_in_mPi_pPi = numpy.vectorize(in_mPi_pPi) + +def D2(p1, p2): + return ((p1-p2)**2).sum() + +def D(p1, p2): + return numpy.sqrt(D2(p1, p2) ) + +def norm(p): + return numpy.sqrt( (p**2).sum() ) + +def computeBox(a): + """returns the bounding box enclosing the array of points a + in the form (x,y, width, height) """ + + xmin, ymin = a[:, 0].min(), a[:, 1].min() + xmax, ymax = a[:, 0].max(), a[:, 1].max() + return xmin, ymin, xmax-xmin, ymax-ymin + +def dirAndLength(p1, p2): + #l = max(D(p1, p2) ,1e-4) + l = D(p1, p2) + uv = (p1-p2)/l + return l, uv + +def length(p1, p2): + return numpy.sqrt( D2(p1, p2) ) + +def barycenter(points): + """ + """ + return points.sum(axis=0)/len(points) \ No newline at end of file diff --git a/extensions/fablabchemnitz/shape_recognition/shaperrec/groups.py b/extensions/fablabchemnitz/shape_recognition/shaperrec/groups.py new file mode 100644 index 00000000..4016f234 --- /dev/null +++ b/extensions/fablabchemnitz/shape_recognition/shaperrec/groups.py @@ -0,0 +1,278 @@ +import numpy +import sys +import inkex +from lxml import etree +from shaperrec import geometric +from shaperrec import miscellaneous +from shaperrec import internal +from shaperrec import manipulation + +# ************************************************************* +# debugging +def void(*l): + pass +def debug_on(*l): + sys.stderr.write(' '.join(str(i) for i in l) +'\n') +debug = void +#debug = debug_on + +# ************************************************************* +# ************************************************************* +# Groups of Path +# +class PathGroup(object): + """A group of Path representing one SVG node. + - a list of Path + - a list of SVG commands describe the full node (=SVG path element) + - a reference to the inkscape node object + + """ + listOfPaths = [] + refSVGPathList = [] + isClosing = False + refNode = None + + def __init__(self, listOfPaths, refSVGPathList, refNode=None, isClosing=False): + self.refNode = refNode + self.listOfPaths = listOfPaths + self.refSVGPathList = refSVGPathList + self.isClosing=isClosing + + def addToNode(self, node): + newList = miscellaneous.reformatList( self.listOfPaths) + ele = miscellaneous.addPath( newList, node) + debug("PathGroup ", newList) + return ele + + def setNodeStyle(self, ele, node): + style = node.get('style') + cssClass = node.get('class') + debug("style ", style) + debug("class ", cssClass) + if style == None and cssClass == None : + style = 'fill:none; stroke:red; stroke-width:1' + + if not cssClass == None: + ele.set('class', cssClass) + if not style == None: + ele.set('style', style) + + @staticmethod + def toSegments(points, refSVGPathList, refNode, isClosing=False): + """ + """ + segs = [ internal.Segment.from2Points(p, points[i+1], points[i:i+2] ) for (i, p) in enumerate(points[:-1]) ] + manipulation.resetPrevNextSegment(segs) + return PathGroup( segs, refSVGPathList, refNode, isClosing) + +class TangentEnvelop(PathGroup): + """Specialization where the Path objects are all Segments and represent tangents to a curve """ + def addToNode(self, node): + newList = [ ] + for s in self.listOfPaths: + newList += s.asSVGCommand(firstP=True) + debug("TangentEnvelop ", newList) + ele = miscellaneous.addPath( newList, node) + return ele + + def setNodeStyle(self, ele, node): + style = node.get('style')+';marker-end:url(#Arrow1Lend)' + ele.set('style', style) + + +class Circle(PathGroup): + """Specialization where the list of Path objects + is to be replaced by a Circle specified by a center and a radius. + + If an other radius 'rmax' is given than the object represents an ellipse. + """ + isClosing= True + def __init__(self, center, rad, refNode=None, rmax=None, angle=0.): + self.listOfPaths = [] + self.refNode = refNode + self.center = numpy.array(center) + self.radius = rad + if rmax: + self.type ='ellipse' + else: + self.type = 'circle' + self.rmax = rmax + self.angle = angle + + def addToNode(self, refnode): + """Add a node in the xml structure corresponding to this rect + refnode : xml node used as a reference, new point will be inserted a same level""" + ele = etree.Element('{http://www.w3.org/2000/svg}'+self.type) + + ele.set('cx', str(self.center[0])) + ele.set('cy', str(self.center[1])) + if self.rmax: + ele.set('ry', str(self.radius)) + ele.set('rx', str(self.rmax)) + ele.set('transform', 'rotate(%3.2f,%f,%f)'%(numpy.degrees(self.angle), self.center[0], self.center[1])) + else: + ele.set('r', str(self.radius)) + refnode.xpath('..')[0].append(ele) + return ele + + +class Rectangle(PathGroup): + """Specialization where the list of Path objects + is to be replaced by a Rectangle specified by a center and size (w,h) and a rotation angle. + + """ + def __init__(self, center, size, angle, listOfPaths, refNode=None): + self.listOfPaths = listOfPaths + self.refNode = refNode + self.center = center + self.size = size + self.bbox = size + self.angle = angle + pos = self.center - numpy.array( size )/2 + if angle != 0. : + cosa = numpy.cos(angle) + sina = numpy.sin(angle) + self.rotMat = numpy.matrix( [ [ cosa, sina], [-sina, cosa] ] ) + self.rotMatstr = 'matrix(%1.7f,%1.7f,%1.7f,%1.7f,0,0)'%(cosa, sina, -sina, cosa) + + + #debug(' !!!!! Rotated rectangle !!', self.size, self.bbox, ' angles ', a, self.angle ,' center',self.center) + else : + self.rotMatstr = None + self.pos = pos + debug(' !!!!! Rectangle !!', self.size, self.bbox, ' angles ', self.angle, ' center', self.center) + + def addToNode(self, refnode): + """Add a node in the xml structure corresponding to this rect + refnode : xml node used as a reference, new point will be inserted a same level""" + ele = etree.Element('{http://www.w3.org/2000/svg}rect') + self.fill(ele) + refnode.xpath('..')[0].append(ele) + return ele + + def fill(self, ele): + w, h = self.size + ele.set('width', str(w)) + ele.set('height', str(h)) + w, h = self.bbox + ele.set('x', str(self.pos[0])) + ele.set('y', str(self.pos[1])) + if self.rotMatstr: + ele.set('transform', 'rotate(%3.2f,%f,%f)'%(numpy.degrees(self.angle), self.center[0], self.center[1])) + #ele.set('transform', self.rotMatstr) + + @staticmethod + def isRectangle( pathGroup): + """Check if the segments in pathGroups can form a rectangle. + Returns a Rectangle or None""" + #print 'xxxxxxxx isRectangle',pathGroups + if isinstance(pathGroup, Circle ): return None + segmentList = [p for p in pathGroup.listOfPaths if p.isSegment() ]#or p.effectiveNPoints >0] + if len(segmentList) != 4: + debug( 'rectangle Failed at length ', len(segmentList)) + return None + a, b, c, d = segmentList + + if geometric.length(a.point1, d.pointN)> 0.2*(a.length+d.length)*0.5: + debug('rectangle test failed closing ', geometric.length(a.point1, d.pointN), a.length, d.length) + return None + + Aac, Abd = geometric.closeAngleAbs(a.angle, c.angle), geometric.closeAngleAbs(b.angle, d.angle) + if min(Aac, Abd) > 0.07 or max(Aac, Abd) >0.27 : + debug( 'rectangle Failed at angles', Aac, Abd) + return None + notsimilarL = lambda d1, d2: abs(d1-d2)>0.20*min(d1, d2) + + pi, twopi = numpy.pi, 2*numpy.pi + angles = numpy.array( [p.angle for p in segmentList] ) + minAngleInd = numpy.argmin( numpy.minimum( abs(angles), abs( abs(angles)-pi), abs( abs(angles)-twopi) ) ) + rotAngle = angles[minAngleInd] + width = (segmentList[minAngleInd].length + segmentList[(minAngleInd+2)%4].length)*0.5 + height = (segmentList[(minAngleInd+1)%4].length + segmentList[(minAngleInd+3)%4].length)*0.5 + # set rectangle center as the bbox center + x, y, w, h = geometric.computeBox( numpy.concatenate( [ p.points for p in segmentList]) ) + r = Rectangle( numpy.array( [x+w/2, y+h/2]), (width, height), rotAngle, pathGroup.listOfPaths, pathGroup.refNode) + + debug( ' found a rectangle !! ', a.length, b.length, c.length, d.length ) + return r + + +class CurveGroup(PathGroup): + """Specialization where the list of Path objects + is to be replaced by a Rectangle specified by a center and size (w,h) and a rotation angle. + + """ + def __init__(self, center, size, angle, listOfPaths, refNode=None): + self.listOfPaths = listOfPaths + self.refNode = refNode + self.center = center + self.size = size + self.bbox = size + self.angle = angle + pos = self.center - numpy.array( size )/2 + if angle != 0. : + cosa = numpy.cos(angle) + sina = numpy.sin(angle) + self.rotMat = numpy.matrix( [ [ cosa, sina], [-sina, cosa] ] ) + self.rotMatstr = 'matrix(%1.7f,%1.7f,%1.7f,%1.7f,0,0)'%(cosa, sina, -sina, cosa) + + + #debug(' !!!!! Rotated rectangle !!', self.size, self.bbox, ' angles ', a, self.angle ,' center',self.center) + else : + self.rotMatstr = None + self.pos = pos + debug(' !!!!! Rectangle !!', self.size, self.bbox, ' angles ', self.angle, ' center', self.center) + + def addToNode(self, refnode): + """Add a node in the xml structure corresponding to this rect + refnode : xml node used as a reference, new point will be inserted a same level""" + ele = etree.Element('{http://www.w3.org/2000/svg}rect') + self.fill(ele) + refnode.xpath('..')[0].append(ele) + return ele + +# def fill(self, ele): +# w, h = self.size +# ele.set('width', str(w)) +# ele.set('height', str(h)) +# w, h = self.bbox +# ele.set('x', str(self.pos[0])) +# ele.set('y', str(self.pos[1])) +# if self.rotMatstr: +# ele.set('transform', 'rotate(%3.2f,%f,%f)'%(numpy.degrees(self.angle), self.center[0], self.center[1])) +# #ele.set('transform', self.rotMatstr) + + @staticmethod + def isCurvedSegment( pathGroup): + """Check if the segments in pathGroups can form a rectangle. + Returns a Rectangle or None""" + #print 'xxxxxxxx isRectangle',pathGroups + if isinstance(pathGroup, Circle ): return None + segmentList = [p for p in pathGroup.listOfPaths if p.isSegment() ]#or p.effectiveNPoints >0] + if len(segmentList) != 4: + debug( 'rectangle Failed at length ', len(segmentList)) + return None + a, b, c, d = segmentList + + if geometric.length(a.point1, d.pointN)> 0.2*(a.length+d.length)*0.5: + debug('rectangle test failed closing ', geometric.length(a.point1, d.pointN), a.length, d.length) + return None + + Aac, Abd = geometric.closeAngleAbs(a.angle, c.angle), geometric.closeAngleAbs(b.angle, d.angle) + if min(Aac, Abd) > 0.07 or max(Aac, Abd) >0.27 : + debug( 'rectangle Failed at angles', Aac, Abd) + return None + notsimilarL = lambda d1, d2: abs(d1-d2)>0.20*min(d1, d2) + + pi, twopi = numpy.pi, 2*numpy.pi + angles = numpy.array( [p.angle for p in segmentList] ) + minAngleInd = numpy.argmin( numpy.minimum( abs(angles), abs( abs(angles)-pi), abs( abs(angles)-twopi) ) ) + rotAngle = angles[minAngleInd] + width = (segmentList[minAngleInd].length + segmentList[(minAngleInd+2)%4].length)*0.5 + height = (segmentList[(minAngleInd+1)%4].length + segmentList[(minAngleInd+3)%4].length)*0.5 + # set rectangle center as the bbox center + x, y, w, h = geometric.computeBox( numpy.concatenate( [ p.points for p in segmentList]) ) + r = Rectangle( numpy.array( [x+w/2, y+h/2]), (width, height), rotAngle, pathGroup.listOfPaths, pathGroup.refNode) + + debug( ' found a rectangle !! ', a.length, b.length, c.length, d.length ) + return r diff --git a/extensions/fablabchemnitz/shape_recognition/shaperrec/internal.py b/extensions/fablabchemnitz/shape_recognition/shaperrec/internal.py new file mode 100644 index 00000000..edd99407 --- /dev/null +++ b/extensions/fablabchemnitz/shape_recognition/shaperrec/internal.py @@ -0,0 +1,351 @@ +import numpy +import sys +from shaperrec import geometric +from shaperrec import miscellaneous + +# ************************************************************* +# debugging +def void(*l): + pass +def debug_on(*l): + sys.stderr.write(' '.join(str(i) for i in l) +'\n') +debug = void +#debug = debug_on + +# ************************************************************* +# Internal Objects +class Path(object): + """Private representation of a sequence of points. + A SVG node of type 'path' is splitted in several of these Path objects. + """ + next = None # next Path in the sequence of path corresponding to a SVG node + prev = None # previous Path in the sequence of path corresponding to a SVG node + sourcepoints = None # the full list of points from which this path is a subset + + normalv = None # normal vector to this Path + + def __init__(self, points): + """points an array of points """ + self.points = points + self.init() + + def init(self): + self.effectiveNPoints = len(self.points) + if self.effectiveNPoints>1: + self.length, self.univ = geometric.dirAndLength(self.points[0], self.points[-1]) + else: + self.length, self.univ = 0, numpy.array([0, 0]) + if self.effectiveNPoints>0: + self.pointN=self.points[-1] + self.point1=self.points[0] + + def isSegment(self): + return False + + def quality(self): + return 1000 + + def dump(self): + n = len(self.points) + if n>0: + return 'path at '+str(self.points[0])+ ' to '+ str(self.points[-1])+' npoints=%d / %d (eff)'%(n, self.effectiveNPoints) + else: + return 'path Void !' + + def setNewLength(self, l): + self.newLength = l + + def removeLastPoints(self, n): + self.points = self.points[:-n] + self.init() + def removeFirstPoints(self, n): + self.points = self.points[n:] + self.init() + + def costheta(self, seg): + return self.unitv.dot(seg.unitv) + + def translate(self, tr): + """Translate this path by tr""" + self.points = self.points + tr + + def asSVGCommand(self, firstP=False): + svgCommands = [] + com = 'M' if firstP else 'L' + for p in self.points: + svgCommands.append( [com, [p[0], p[1]] ] ) + com='L' + return svgCommands + + + def setIntersectWithNext(self, next=None): + pass + + def mergedWithNext(self, newPath=None): + """ Returns the combination of self and self.next. + sourcepoints has to be set + """ + if newPath is None: newPath = Path( numpy.concatenate([self.points, self.next.points]) ) + + newPath.sourcepoints = self.sourcepoints + newPath.prev = self.prev + if self.prev : newPath.prev.next = newPath + newPath.next = self.next.__next__ + if newPath.__next__: + newPath.next.prev = newPath + return newPath + +# ************************************************************* +# +class Segment(Path): + """ A segment. Defined by its line equation ax+by+c=0 and the points from orignal paths + it is ensured that a**2+b**2 = 1 + """ + QUALITYCUT = 0.9 + + newAngle = None # temporary angle set during the "parralelization" step + newLength = None # temporary lenght set during the "parralelization" step + + # Segment Builders + @staticmethod + def from2Points( p1, p2, refPoints = None): + dirV = p2-p1 + center = 0.5*(p2+p1) + return Segment.fromCenterAndDir(center, dirV, refPoints) + + @staticmethod + def fromCenterAndDir( center, dirV, refPoints=None): + b = dirV[0] + a = -dirV[1] + c = - (a*center[0]+b*center[1]) + + if refPoints is None: + refPoints = numpy.array([ center-0.5*dirV, center+0.5*dirV] ) + s = Segment( a, b, c, refPoints) + return s + + + def __init__(self, a,b,c, points, doinit=True): + """a,b,c: the line parameters. + points : the array of 2D points represented by this Segment + doinit : if true will compute additionnal parameters to this Segment (first/last points, unit vector,...) + """ + self.a = a + self.b = b + self.c = c + + self.points = points + d = numpy.sqrt(a**2+b**2) + if d != 1. : + self.a /= d + self.b /= d + self.c /= d + + if doinit : + self.init() + + + def init(self): + a, b, c = self.a, self.b, self.c + x, y = self.points[0] + self.point1 = numpy.array( [ b*(x*b-y*a) - c*a, a*(y*a-x*b) - c*b ] ) + x, y = self.points[-1] + self.pointN = numpy.array( [ b*(x*b-y*a) - c*a, a*(y*a-x*b) - c*b ] ) + uv = self.computeDirLength() + self.distancesToLine = self.computeDistancesToLine(self.points) + self.normalv = numpy.array( [ a, b ]) + + self.angle = numpy.arccos( uv[0] )*numpy.sign(uv[1] ) + + + def computeDirLength(self): + """re-compute and set unit vector and length """ + self.length, uv = geometric.dirAndLength(self.pointN, self.point1) + self.unitv = uv + return uv + + def isSegment(self): + return True + + def recomputeEndPoints(self): + a, b, c = self.a, self.b, self.c + x, y = self.points[0] + self.point1 = numpy.array( [ b*(x*b-y*a) - c*a, a*(y*a-x*b) - c*b ] ) + x, y = self.points[-1] + + self.pointN = numpy.array( [ b*(x*b-y*a) - c*a, a*(y*a-x*b) - c*b ] ) + + self.length = numpy.sqrt( geometric.D2(self.pointN, self.point1) ) + + def projectPoint(self, p): + """ return the point projection of p onto this segment""" + a, b, c = self.a, self.b, self.c + x, y = p + return numpy.array( [ b*(x*b-y*a) - c*a, a*(y*a-x*b) - c*b ] ) + + + def intersect(self, seg): + """Returns the intersection of this line with the line seg""" + nu, nv = self.normalv, seg.normalv + u = numpy.array([[-self.c], [-seg.c]]) + doRotation = min(nu.min(), nv.min()) <1e-4 + if doRotation: + # rotate to avoid numerical issues + nu = numpy.array(geometric.rotMat.dot(nu))[0] + nv = numpy.array(geometric.rotMat.dot(nv))[0] + m = numpy.matrix( (nu, nv) ) + + i = (m**-1).dot(u) + i=numpy.array( i).swapaxes(0, 1)[0] + debug(' intersection ', nu, nv, self.angle, seg.angle, ' --> ', i) + if doRotation: + i = geometric.unrotMat.dot(i).A1 + debug(' ', i) + + + return i + + def setIntersectWithNext(self, next=None): + """Modify self such as self.pointN is the intersection with next segment """ + if next is None: + next = self.__next__ + if next and next.isSegment(): + if abs(self.normalv.dot(next.unitv)) < 1e-3: + return + debug(' Intersect', self, next, ' from ', self.point1, self.pointN, ' to ', next.point1, next.pointN,) + inter = self.intersect(next) + debug(' --> ', inter, ' d=', geometric.D(self.pointN, inter) ) + next.point1 = inter + self.pointN = inter + self.computeDirLength() + next.computeDirLength() + + def computeDistancesToLine(self, points): + """points: array of points. + returns the array of distances to this segment""" + return abs(self.a*points[:, 0]+self.b*points[:, 1]+self.c) + + + def distanceTo(self, point): + return abs(self.a*point[0]+self.b*point[1]+self.c) + + def inverse(self): + """swap all x and y values. """ + def inv(v): + v[0], v[1] = v[1], v[0] + for v in [self.point1, self.pointN, self.unitv, self.normalv]: + inv(v) + + self.points = numpy.roll(self.points, 1, axis=1) + self.a, self.b = self.b, self.a + self.angle = numpy.arccos( self.unitv[0] )*numpy.sign(self.unitv[1] ) + return + + def dumpShort(self): + return 'seg '+' '+str(self.point1 )+'to '+str(self.pointN)+ ' npoints=%d | angle,offset=(%.2f,%.2f )'%(len(self.points), self.angle, self.c)+' ', self.normalv + + def dump(self): + v = self.variance() + n = len(self.points) + return 'seg '+str(self.point1 )+' , '+str(self.pointN)+ ' v/l=%.2f / %.2f = %.2f r*numpy.sqrt(n)=%.2f npoints=%d | angle,offset=(%.2f,%.2f )'%(v, self.length, v/self.length, v/self.length*numpy.sqrt(n), n, self.angle, self.c) + + def variance(self): + d = self.distancesToLine + return numpy.sqrt( (d**2).sum()/len(d) ) + + def quality(self): + n = len(self.points) + return min(self.variance()/self.length*numpy.sqrt(n), 1000) + + def formatedSegment(self, firstP=False): + return self.asSVGCommand(firstP) + + def asSVGCommand(self, firstP=False): + + if firstP: + segment = [ ['M', [self.point1[0], self.point1[1] ] ], + ['L', [self.pointN[0], self.pointN[1] ] ] + ] + else: + segment = [ ['L', [self.pointN[0], self.pointN[1] ] ] ] + #debug("Segment, format : ", segment) + return segment + + def replaceInList(self, startPos, fullList): + code0 = fullList[startPos][0] + segment = [ [code0, [self.point1[0], self.point1[1] ] ], + ['L', [self.pointN[0], self.pointN[1] ] ] + ] + l = fullList[:startPos]+segment+fullList[startPos+len(self.points):] + return l + + + + + def mergedWithNext(self, doRefit=True): + """ Returns the combination of self and self.next. + sourcepoints has to be set + """ + spoints = numpy.concatenate([self.points, self.next.points]) + + if doRefit: + newSeg = fitSingleSegment(spoints) + else: + newSeg = Segment.fromCenterAndDir(geometric.barycenter(spoints), self.unitv, spoints) + + newSeg = Path.mergedWithNext(self, newSeg) + return newSeg + + + + def center(self): + return 0.5*(self.point1+self.pointN) + + def box(self): + return geometric.computeBox(self.points) + + + def translate(self, tr): + """Translate this segment by tr """ + c = self.c -self.a*tr[0] -self.b*tr[1] + self.c =c + self.pointN = self.pointN+tr + self.point1 = self.point1+tr + self.points +=tr + + def adjustToNewAngle(self): + """reset all parameters so that self.angle is change to self.newAngle """ + + self.a, self.b, self.c = miscellaneous.parametersFromPointAngle( 0.5*(self.point1+self.pointN), self.newAngle) + + #print 'adjustToNewAngle ', self, self.angle, self.newAngle + self.angle = self.newAngle + self.normalv = numpy.array( [ self.a, self.b ]) + self.unitv = numpy.array( [ self.b, -self.a ]) + if abs(self.angle) > numpy.pi/2 : + if self.b > 0: self.unitv *= -1 + elif self.b<0 : self.unitv *= -1 + + self.point1 = self.projectPoint(self.point1) # reset point1 + if not hasattr(self, "__next__") or not self.next.isSegment(): + # move the last point (no intersect with next) + + pN = self.projectPoint(self.pointN) + dirN = pN - self.point1 + lN = geometric.length(pN, self.point1) + self.pointN = dirN/lN*self.length + self.point1 + #print ' ... adjusting last seg angle ',p.dump() , ' normalv=', p.normalv, 'unitv ', p.unitv + else: + self.setIntersectWithNext() + + def adjustToNewDistance(self): + self.pointN = self.newLength* self.unitv + self.point1 + self.length = self.newLength + + def tempLength(self): + if self.newLength : return self.newLength + else : return self.length + + def tempAngle(self): + if self.newAngle: return self.newAngle + return self.angle \ No newline at end of file diff --git a/extensions/fablabchemnitz/shape_recognition/shaperrec/manipulation.py b/extensions/fablabchemnitz/shape_recognition/shaperrec/manipulation.py new file mode 100644 index 00000000..e2c6b9d6 --- /dev/null +++ b/extensions/fablabchemnitz/shape_recognition/shaperrec/manipulation.py @@ -0,0 +1,187 @@ +import numpy +import sys +from shaperrec import groups +from shaperrec import geometric +from shaperrec import internal + +# ************************************************************* +# debugging +def void(*l): + pass +def debug_on(*l): + sys.stderr.write(' '.join(str(i) for i in l) +'\n') +debug = void +#debug = debug_on + +# ************************************************************* +# Object manipulation functions + +def toRemarkableShape( group ): + """Test if PathGroup instance 'group' looks like a remarkable shape (ex: Rectangle). + if so returns a new shape instance else returns group unchanged""" + r = groups.Rectangle.isRectangle( group ) + if r : return r + return group + + +def resetPrevNextSegment(segs): + for i, seg in enumerate(segs[:-1]): + s = segs[i+1] + seg.next = s + s.prev = seg + return segs + + +def fitSingleSegment(a): + xmin, ymin, w, h = geometric.computeBox(a) + inverse = w ', tangents ) + + if averaged: + # average over neighbours + avTan = numpy.array(tangents) + avTan[:-1] += tangents[1:] + avTan[1:] += tangents[:-1] + if isClosing: + tangents[0]+=tangents[-1] + tangents[1]+=tangents[0] + avTan *= 1./3 + if not isClosing: + avTan[0] *=1.5 + avTan[-1] *=1.5 + + return avTan + + +def clusterAngles(array, dAng=0.15): + """Cluster together consecutive angles with similar values (within 'dAng'). + array : flat array of angles + returns [ ..., (indi_0, indi_1),...] where each tuple are indices of cluster i + """ + N = len(array) + + closebyAng = numpy.zeros( (N, 4), dtype=int) + + for i, a in enumerate(array): + cb = closebyAng[i] + cb[0] =i + cb[2]=i + cb[3]=i + c=i-1 + # find number of angles within dAng in nearby positions + while c>-1: # indices below i + d=geometric.closeAngleAbs(a, array[c]) + if d>dAng: + break + cb[1]+=1 + cb[2]=c + c-=1 + c=i+1 + while cdAng: + break + cb[1]+=1 + cb[3]=c + c+=1 + closebyAng= closebyAng[numpy.argsort(closebyAng[:, 1]) ] + + clusteredPos = numpy.zeros(N, dtype=int) + clusters = [] + for cb in reversed(closebyAng): + if clusteredPos[cb[0]]==1: + continue + # try to build a cluster + minI = cb[2] + while clusteredPos[minI]==1: + minI+=1 + maxI = cb[3] + while clusteredPos[maxI]==1: + maxI-=1 + for i in range(minI, maxI+1): + clusteredPos[i] = 1 + clusters.append( (minI, maxI) ) + + return clusters + + + + +def adjustAllAngles(paths): + for p in paths: + if p.isSegment() and p.newAngle is not None: + p.adjustToNewAngle() + # next translate to fit end points + tr = numpy.zeros(2) + for p in paths[1:]: + if p.isSegment() and p.prev.isSegment(): + tr = p.prev.pointN - p.point1 + debug(' translating ', p, ' prev is', p.prev, ' ', tr, ) + p.translate(tr) + +def adjustAllDistances(paths): + for p in paths: + if p.isSegment() and p.newLength is not None: + p.adjustToNewDistance() + # next translate to fit end points + tr = numpy.zeros(2) + for p in paths[1:]: + if p.isSegment() and p.prev.isSegment(): + tr = p.prev.pointN - p.point1 + p.translate(tr) diff --git a/extensions/fablabchemnitz/shape_recognition/shaperrec/miscellaneous.py b/extensions/fablabchemnitz/shape_recognition/shaperrec/miscellaneous.py new file mode 100644 index 00000000..3949c411 --- /dev/null +++ b/extensions/fablabchemnitz/shape_recognition/shaperrec/miscellaneous.py @@ -0,0 +1,209 @@ +import sys +import inkex +from inkex import Path +import numpy +from shaperrec import manipulation +from lxml import etree + + + +# ************************************************************* +# debugging +def void(*l): + pass +def debug_on(*l): + sys.stderr.write(' '.join(str(i) for i in l) +'\n') +debug = void +#debug = debug_on + +errwrite = void + + +# miscellaneous helper functions to sort + +# merge consecutive segments with close angle + +def mergeConsecutiveCloseAngles( segList , mangle =0.25 , q=0.5): + + def toMerge(seg): + l=[seg] + setattr(seg, 'merged', True) + if hasattr(seg, "__next__") and seg.next.isSegment() : + debug('merging segs ', seg.angle, ' with : ', seg.next.point1, seg.next.pointN, ' ang=', seg.next.angle) + if geometric.deltaAngleAbs( seg.angle, seg.next.angle) < mangle: + l += toMerge(seg.next) + return l + + updatedSegs = [] + for i, seg in enumerate(segList[:-1]): + if not seg.isSegment() : + updatedSegs.append(seg) + continue + if hasattr(seg, 'merged'): + continue + debug(i, ' inspect merge : ', seg.point1, '-', seg.pointN, seg.angle, ' q=', seg.quality()) + mList = toMerge(seg) + debug(' --> tomerge ', len(mList)) + if len(mList)<2: + delattr(seg, 'merged') + updatedSegs.append(seg) + continue + points= numpy.concatenate( [p.points for p in mList] ) + newseg = fitSingleSegment(points) + if newseg.quality()>q: + delattr(seg, 'merged') + updatedSegs.append(seg) + continue + for p in mList: + setattr(seg, 'merged', True) + newseg.sourcepoints = seg.sourcepoints + debug(' --> post merge qual = ', newseg.quality(), seg.pointN, ' --> ', newseg.pointN, newseg.angle) + newseg.prev = mList[0].prev + newseg.next = mList[-1].__next__ + updatedSegs.append(newseg) + if not hasattr(segList[-1], 'merged') : updatedSegs.append( segList[-1]) + return updatedSegs + + + + +def parametersFromPointAngle(point, angle): + unitv = numpy.array([ numpy.cos(angle), numpy.sin(angle) ]) + ortangle = angle+numpy.pi/2 + normal = numpy.array([ numpy.cos(ortangle), numpy.sin(ortangle) ]) + genOffset = -normal.dot(point) + a, b = normal + return a, b, genOffset + + + +def addPath(newList, refnode): + """Add a node in the xml structure corresponding to the content of newList + newList : list of Segment or Path + refnode : xml node used as a reference, new point will be inserted a same level""" + ele = etree.Element('{http://www.w3.org/2000/svg}path') + errwrite("newList = " + str(newList) + "\n") + ele.set('d', str(Path(newList))) + refnode.xpath('..')[0].append(ele) + return ele + +def reformatList( listOfPaths): + """ Returns a SVG paths list (same format as simplepath.parsePath) from a list of Path objects + - Segments in paths are added in the new list + - simple Path are retrieved from the original refSVGPathList and put in the new list (thus preserving original bezier curves) + """ + newList = [] + first = True + for seg in listOfPaths: + newList += seg.asSVGCommand(first) + first = False + return newList + + +def clusterValues( values, relS=0.1 , refScaleAbs='range' ): + """form clusters of similar quantities from input 'values'. + Clustered values are not necessarily contiguous in the input array. + Clusters size (that is max-min) is < relS*cluster_average """ + if len(values)==0: + return [] + if len(values.shape)==1: + sortedV = numpy.stack([ values, numpy.arange(len(values))], 1) + else: + # Assume value.shape = (N,2) and index are ok + sortedV = values + sortedV = sortedV[ numpy.argsort(sortedV[:, 0]) ] + + sortedVV = sortedV[:, 0] + refScale = sortedVV[-1]-sortedVV[0] + #sortedVV += 2*min(sortedVV)) # shift to avoid numerical issues around 0 + + #print sortedVV + class Cluster: + def __init__(self, delta, sum, indices): + self.delta = delta + self.sum = sum + self.N=len(indices) + self.indices = indices + def size(self): + return self.delta/refScale + + def combine(self, c): + #print ' combine ', self.indices[0], c.indices[-1], ' -> ', sortedVV[c.indices[-1]] - sortedVV[self.indices[0]] + newC = Cluster(sortedVV[c.indices[-1]] - sortedVV[self.indices[0]], + self.sum+c.sum, + self.indices+c.indices) + return newC + + def originIndices(self): + return tuple(int(sortedV[i][1]) for i in self.indices) + + def size_local(self): + return self.delta / sum( sortedVV[i] for i in self.indices) *len(self.indices) + def size_range(self): + return self.delta/refScale + def size_abs(self): + return self.delta + + if refScaleAbs=='range': + Cluster.size = size_range + elif refScaleAbs=='local': + Cluster.size = size_local + elif refScaleAbs=='abs': + Cluster.size = size_abs + + class ClusterPair: + next=None + prev=None + def __init__(self, c1, c2 ): + self.c1=c1 + self.c2=c2 + self.refresh() + def refresh(self): + self.potentialC =self.c1.combine(self.c2) + self.size = self.potentialC.size() + def setC1(self, c1): + self.c1=c1 + self.refresh() + def setC2(self, c2): + self.c2=c2 + self.refresh() + + #ave = 0.5*(sortedVV[1:,0]+sortedV[:-1,0]) + #deltaR = (sortedV[1:,0]-sortedV[:-1,0])/ave + + cList = [Cluster(0, v, (i,)) for (i, v) in enumerate(sortedVV) ] + cpList = [ ClusterPair( c, cList[i+1] ) for (i, c) in enumerate(cList[:-1]) ] + manipulation.resetPrevNextSegment( cpList ) + + #print cpList + def reduceCL( cList ): + if len(cList)<=1: + return cList + cp = min(cList, key=lambda cp:cp.size) + #print '==', cp.size , relS, cp.c1.indices , cp.c2.indices, cp.potentialC.indices + + while cp.size < relS: + if hasattr(cp, "__next__"): + cp.next.setC1(cp.potentialC) + cp.next.prev = cp.prev + if cp.prev: + cp.prev.setC2(cp.potentialC) + cp.prev.next = cp.__next__ if hasattr(cp, "__next__") else None + cList.remove(cp) + if len(cList)<2: + break + cp = min(cList, key=lambda cp:cp.size) + #print ' -----> ', [ (cp.c1.indices , cp.c2.indices) for cp in cList] + return cList + + cpList = reduceCL(cpList) + if len(cpList)==1: + cp = cpList[0] + if cp.potentialC.size()0: + if lArgs==1: + if type(args[0])==XY: + self.co=args[0].co + else: + self.co=[args[0],args[0]] + if lArgs>1: + self.co=[args[0],args[1]] + def __add__(self,xy): + self.co = [self.co[0] + xy.co[0],self.co[1] + xy.co[1]] + return self + def __sub__(self,xy): + self.co=[self.co[0] - xy.co[0], self.co[1] - xy.co[1]] + return self + def __eq__(self, xy): + return (self.co[0] == xy.x and self.co[1] == xy.y) + + def sub(self,xy): + self.__sub__(xy) + return self + def mul(self,xy): + if type(xy)==XY: + co=[self.co[0] * xy.co[0],self.co[1] * xy.co[1]] + else: + co=[self.co[0] * xy,self.co[1] * xy] + self.co = co + return self + + def div(self,xy): + if type(xy)==XY: + co=[self.co[0] / xy.co[0], self.co[1] / xy.co[1]] + else: + co=[self.co[0] / xy, self.co[1] / xy] + self.co = co + return self + + def vlength(self): + #return math.sqrt((self.co[0]*self.co[0])+(self.co[1]*self.co[1])) + return triHipo(self.co[0], self.co[1]) + + def rot(self,ang): + x,y,sa,ca= (self.co[0], self.co[1], math.sin(ang), math.cos(ang)) + self.co=[ca * x - sa * y, sa * x + ca * y] + return self + + def Rot(self,p,r): + self.co=[math.cos(r)*p, math.sin(r)*p] + return self + + def rotate(self,rot,cX=0.0,cY=0.0): + cosRot = math.cos(rot) + px = cX + (self.x-cX) * cosRot - (self.y-cY) * math.sin(rot) + py = cY + (self.x-cX) * math.sin(rot) + (self.y-cY) * cosRot + self.co = [px,py] + return self + + def rotateD(self,rot,cX=0.0,cY=0.0): + self.rotate(_rads(rot),cX,cY) + return self + + def VDist(self,V2): + tmp = XY(self.co[0],self.co[1]) + tmp = tmp.sub(V2) + return tmp.vlength() + + def st(self): + return str(self.co[0])+','+str(self.co[1]) + + @property + def x(self): + return self.co[0] + + @property + def sx(self): + return str(self.co[0]) + + @property + def y(self): + return self.co[1] + + @property + def sy(self): + return str(self.co[1]) + + def hipo(self,xy): + #return math.sqrt(math.pow(self.x-xy.x,2) + math.pow(self.y-xy.y,2) ) + return triHipo(self.x-xy.x, self.y-xy.y) + def angBetween2Lines(self,p1,p2): # pC punto comun + return math.atan2(self.y - p1.y, self.x - p1.x) - math.atan2(self.y - p2.y, self.x - p2.x) + def getAngle(self,b): + return math.atan2(b.y - self.y, b.x - self.x) + def getAngleD(self,b): + return math.degrees(math.atan2(b.y - self.y, b.x - self.x)) + # translada un punto hacia otro + def atPercent(self, p2, percent): + self.co = [(p2.x - self.x) * percent + self.x,(p2.y-self.y) * percent + self.y] + return self + + def atMid(self, p2): + return self.atPercent(p2,0.5) + +# ________________________________________________________________ +# ________________________________________________________________ +# ________________________________________________________________ +class bezpnt(object): + def __init__(self,pfixed=None,pprev=None,pnext=None): + if isinstance(pfixed, list): + self.fixed = XY(pfixed[0],pfixed[1]) + else: + self.fixed = pfixed + if isinstance(pprev, list): + self.prev = XY(pprev[0],pprev[1]) + else: + self.prev = pprev + if isinstance(pnext, list): + self.next = XY(pnext[0],pnext[1]) + else: + self.next = pnext + return + + def translate(self,x,y): + self.fixed + XY(x,y) + if self.prev!=None:self.prev + XY(x,y) + if self.next!=None:self.next + XY(x,y) + return self + + def scale(self,x=1.0,y=1.0): + self.fixed.scale(x,y) + if self.prev!=None:self.prev.scale(x,y) + if self.next!=None:self.next.scale(x,y) + return self + + def rotate(self,rot,cX=0.0,cY=0.0): + self.fixed.rotate(rot,cX,cY) + if self.prev!=None:self.prev.rotate(rot,cX,cY) + if self.next!=None:self.next.rotate(rot,cX,cY) + return sel + + def skew(self,rotx,roty,cX=0.0,cY=0.0): + self.fixed.skew(rotx,roty,cX,cY) + if self.prev!=None:self.prev.skew(rotx,roty,cX,cY) + if self.next!=None:self.next.skew(rotx,roty,cX,cY) + return self + def copy(self,bez2): + try: + self.fixed=XY().copy(bez2.fixed) + self.prev = None if bez2.prev == None else XY().copy(bez2.prev) + self.next = None if bez2.next == None else XY().copy(bez2.next) + except Exception: + gimp.message(str(Exception)) + return self + def arrXY(self): + pts=[] + if self.prev == None: + pts+=self.fixed.arrXY(1) + else: + pts+=self.prev.arrXY(1) + pts+=self.fixed.arrXY(1) + if self.next==None: + pts+=self.fixed.arrXY(1) + else: + pts+=self.next.arrXY(1) + return pts + def Prev(self): + p = self.prev + if p==None: p=self.fixed + return p + def Next(self): + p = self.next + if p==None: p=self.fixed + return p + def Fixed(self): + return self.fixed + def flip(self): + p=self.prev + n=self.next + self.prev=n + self.next=p + +def createSmallArcBez(r, a1, a2,rot): + a = (a2 - a1) * 0.5 + p4 = XY(r * math.cos(a), r * math.sin(a)) + p1 = XY(p4.x, -p4.y) + k = 0.5522847498 + f = k * math.tan(a) + p2 = XY(p1.x + f * p4.y, p1.y + f * p4.x) + p3 = XY(p2.x,-p2.y) + ar = a + a1 + P1 = XY(r * math.cos(a1), r * math.sin(a1)).rotate(rot) + P2 = XY(p2.x, p2.y).rotate(ar).rotate(rot) + P3 = XY(p3.x, p3.y).rotate(ar).rotate(rot) + P4 = XY(r * math.cos(a2),r * math.sin(a2)).rotate(rot) + B1=bezpnt(P1,None,P2) + B2=bezpnt(P4,P3) + return [B1,B2] + +def createArcBez(rad, sAng, eAng): + EPSILON = 0.0000000001 + bezs =[] + if eAng < sAng: + eAng += 360.0 + sAng = _rads(sAng) + eAng = _rads(eAng) + rot = sAng + sAng = _rads(0) + eAng = eAng - rot + pi2 = math.pi * 2 + sAng, eAng = (sAng % pi2, eAng % pi2) + pi_2 = math.pi * 0.5 + sign = 1 if (sAng < eAng) else -1 + a1 = sAng + totAng = min(math.pi * 2, abs(eAng - sAng)) + while (totAng > EPSILON): + a2 = a1 + sign * min(totAng, pi_2) + bezs.extend(createSmallArcBez(rad, a1, a2,rot)) + totAng = totAng - abs(a2 - a1) + a1 = a2 + return bezs + +def bezs2XYList(arc1, transform = None): + pnts=[] + bezs=[] + for aa in arc1: + if aa.prev is not None: + bezs.append(XY(aa.prev)) + bezs.append(XY(aa.fixed)) + + if aa.next is not None: + bezs.append(XY(aa.next)) + + for i in range(len(bezs)): + v = bezs[i] + if transform: + v = v + transform + if i == 0: + pnts.append(v) + else: + v2=pnts[-1] + if (v2.x != v.x or v2.y != v.y): + pnts.append(XY(v)) + a=len(pnts) + return pnts + +def XYList(lst, rot = 0.0, add = None): + verts=[] + for nn in range(len(lst)): + v = lst[nn] + if rot != 0.0: v = v.rotate(rot) + if add: v = v + add + verts.append([v.x,v.y]) + return verts + +def XYListSt(lst, rot = 0.0, add = None): + D2 = "" + for nn in range(len(lst)): + v = lst[nn] + if rot != 0.0: v = v.rotate(rot) + if add: v = v + add + D2 += "%s%s " % (tern(nn==1,"C",""), v.st()) + return D2 + +# circle by quadrants, A: 0>90, B: 90>180, C: 180>270, D: 270>360 +def circQ(p,r,abcd="ABCD",inverse=0,xtra=None): + aa = r * 0.551915024494 + parts={ + 'A':[XY(0,-r),XY(aa,-r), XY(r, -aa),XY(r,0)], + 'B':[XY(r,0), XY(r, aa), XY(aa, r),XY(0,r)], + 'C':[XY(0,r), XY(-aa,r), XY(-r, aa),XY(-r,0)], + 'D':[XY(-r,0),XY(-r,-aa),XY(-aa,-r),XY(0,-r)]} + pA = [XY(p)+N for N in parts[abcd[0]]] + for aa in abcd[1:]: + pA = pA + [XY(p)+N for N in parts[aa][1:]] + if inverse==1: pA.reverse() + listA = XYList(pA) + if xtra: + for n in xtra: + listA[n].extend(xtra[n]) + return listA + +def circleInCircle(c1,r1,c2,r2): + return tern((r1 > (c1.hipo(c2) + r2)),True,False) + +def polar2cartesian(cX, cY, rad, ang): + return XY(cX + (rad * math.cos(ang)), cY + (rad * math.sin(ang))) + +def setArc(x, y, rad, ang1, ang2, first): + start = polar2cartesian(x, y, rad, ang2) + end = polar2cartesian(x, y, rad, ang1) + arcSweep = "0" if (ang2 - ang1 <= 180) else "1" + d = " A%f,%f 0 %s 0 %s" % (rad, rad, arcSweep, end.st()) + if first == 1: + d = "M" + start.st() + " " + d + return d + +def setArcs(x, y, rad, ang1, ang2, first): + if ang2 < ang1: + m = setArc(x, y, rad, 0, _rads(ang2), first) + m = m +" "+ setArc(x, y, rad, _rads(ang1), _rads(360), 0) + else: + m = setArc(x, y, rad, _rads(ang1), _rads(ang2), first) + return m + +def addChild(padre, type, props): + hijo = etree.SubElement(padre, inkex.addNS(type,'svg')) + for n in props: + hijo.set(n,props[n]) + return hijo + +def svgCircle(padre, r, cx, cy): + return addChild(padre,'circle' ,{'r':str(r), 'cx': str(cx), 'cy': str(cy)}) + +def circleInscribedInTri(p1,p2,p3): + d1, d2, d3 = [n.vlength() for n in [XY(p3)-p2, XY(p1)-p3, XY(p2)-p1]] + p = d1 + d2 + d3 + centro = XY( (p1.x*d1 + p2.x*d2 + p3.x*d3) / p, (p1.y*d1 + p2.y*d2 + p3.y*d3) / p) + p = p / 2.0 + radius = math.sqrt(p * (p - d1) * (p - d2) * (p - d3))/p + return (radius, centro.x, centro.y) + +def TriInscribedInCircle(p1,p2,p3): + x12, x13, x31, x21 = (p1.x - p2.x, p1.x - p3.x, p3.x - p1.x, p2.x - p1.x) + y12, y13, y31, y21 = (p1.y - p2.y, p1.y - p3.y, p3.y - p1.y, p2.y - p1.y) + sx13 = pow2(p1.x) - pow2(p3.x) + sy13 = pow2(p1.y) - pow2(p3.y) + sx21 = pow2(p2.x) - pow2(p1.x) + sy21 = pow2(p2.y) - pow2(p1.y) + f = (sx13*x12 + sy13*x12 + sx21*x13 + sy21*x13) / (2 * (y31*x12 - y21*x13)) + g = (sx13*y12 + sy13*y12 + sx21*y13 + sy21*y13) / (2 * (x31*y12 - x21*y13)) + c = - pow2(p1.x) - pow2(p1.y) - 2*g*p1.x - 2*f*p1.y + r = math.sqrt(pow2(-g) + pow2(-f) - c) + return (r, -g, -f) + +# 243 \ No newline at end of file diff --git a/extensions/fablabchemnitz/shapes/shapes.inx b/extensions/fablabchemnitz/shapes/shapes.inx new file mode 100644 index 00000000..e46b33ba --- /dev/null +++ b/extensions/fablabchemnitz/shapes/shapes.inx @@ -0,0 +1,197 @@ + + + Shapes + fablabchemnitz.de.shapes + + + + + + + + + + + + + + + + + + + + + + + false + 20 + + + + + + + + + + + + + + + + + 20 + + + + + + + + + + + + + + 2.0 + 0.0 + 0.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + false + false + + + + + + + 20.0 + 40.0 + 10.0 + + + + + + + + + + 0.0 + + + + + + + + + + + + + + 3 + + + + + + + + + + + + + + + + + 0.00 + false + + 10 + 6 + + + + + 0.0 + + + + + + + + + + + + + false + false + + false + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/shapes/shapes.py b/extensions/fablabchemnitz/shapes/shapes.py new file mode 100644 index 00000000..19894eb7 --- /dev/null +++ b/extensions/fablabchemnitz/shapes/shapes.py @@ -0,0 +1,766 @@ +#!/usr/bin/env python +''' +shapes_1.py + +Copyright (C) 2015 - 2020 Paco Garcia, www.arakne.es + +2017_07_30: added crossed corners + copy class of original object if exists +2017_08_09: rombus moved to From corners tab +2017_08_17: join circles not need boolen operations now + join circles added Oval +2017_08_25: fixed error in objects without style + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +----------------------- +''' +import locale, os, sys, tempfile, webbrowser, math, simplepath +from lxml import etree + +try: + from subprocess import Popen, PIPE + bsubprocess = True +except: + bsubprocess = False + +import inkex +from inkex.transforms import BoundingBox + +from arakne_xy import * + +defStyle = [['stroke-width','0.5'],['fill','#f0ff00'],['stroke','#ff0000']] + +locale.setlocale(locale.LC_ALL, '') + +# ####################################################3 + +def calcCircle(pt1, pt2, pt3): + D_a = XY(pt2)-pt1 + D_b = XY(pt3)-pt2 + m_C = XY() + Min = 0.000000001 + + m_dRadius= 0 + + if (abs(D_a.x) <= Min and abs(D_b.y) <= Min): + m_C= XY(0.5*(pt2.x + pt3.x), 0.5*(pt1.y + pt2.y)) + m_dRadius= vlength(m_C,pt1) # calc. radius + + aSlope = D_a.y / D_a.x + + if D_b.x == 0: + bSlope = D_b.y + else: + bSlope = D_b.y / D_b.x + if (abs(aSlope-bSlope) <= Min): # checking if given points are colinear. + return [-1,-1,-1] + # calc center + m_Cx= (aSlope * bSlope * (pt1.y - pt3.y) + bSlope * ( pt1.x + pt2.x ) - aSlope * ( pt2.x + pt3.x ) )/( 2 * ( bSlope - aSlope) ) + m_Cy = -1*(m_Cx - (pt1.x + pt2.x) / 2 ) / aSlope + (pt1.y + pt2.y)/2 + v1 = XY(m_Cx,m_Cy).VDist(pt2) + return {'c':XY(m_Cx,m_Cy),'r':v1} + +# ####################################################3 + +class Shapes(inkex.Effect): + def addOpt(self, name, Type=str, Default=""): + self.arg_parser.add_argument("--" + name, action="store", type=Type, dest=name, default=Default, help="") + + def __init__(self): + inkex.Effect.__init__(self) + #sOP = self.OptionParser + sOP = self.arg_parser + for n in ["tab","chamfertype","midtype","objid","tab_from_bb"] : self.addOpt(n) + for n in ["size","midsize","incdec","spikesep","spikeheight","joinradius","objsize","reducey"] : self.addOpt(n, float, 0.0) + for n in ["arrowWidth","fntsize"] : self.addOpt(n, float, 10.0) + for n in ["tritype", "spikestype","spikesdir","spikesdirt","spikesdirr","spikesdirb","spikesdirl","unit"] : self.addOpt(n) + self.addOpt("spikesize", float, "2.0") + self.addOpt("arrowtype") + self.addOpt("headWidth",float,"20.0") + self.addOpt("headHeight",float,"40.0") + for n in ["squareselection", "trihside","trivside","copyfill", "fromCornersInv", "deleteorigin"] : self.addOpt(n, inkex.Boolean, "false") + sOP.add_argument("--joincirctype", action="store", type=str, dest="joincirctype", default="", help="" ) + + # para from nodes + for n in ["obj","posh","posv"] : self.addOpt(n) + sOP.add_argument("--maxdecimals", action="store", type=int, dest="maxdecimals", default="6", help="" ) + + for n in ["ordery", "rotpath"] : self.addOpt(n, inkex.Boolean, "false") + + def getU(self, val): + return self.svg.unittouu(str(val)+self.options.unit) + + def addEle(self, ele, parent, props): + #elem = inkex.etree.SubElement(parent, ele) + elem = etree.SubElement(parent, ele) + for n in props: elem.set(n,props[n]) + return elem + + def chStyles(self,node,sty): + style = dict(inkex.Style.parse_str(node.get('style'))) + for m in list(style): + sys.stderr.write(m) + for n in sty: + if n[0] in style: style.pop(n[0], None) + if n[1]!="": style[n[0]]=n[1] + node.set('style',inkex.Style(style)) + + # def unit2uu(self, val): + # if hasattr(self,"unittouu") is True: + # return self.svg.unittouu(val) + # else: + # return inkex.unittouu(val) + + # def u2uu(self,value): + # if hasattr(inkex, 'unittouu'): + # v = inkex.unittouu(value) + # else: + # v = self.unittouu(value) + # return v + + def limits(self, node): + s = node.bounding_box() + incdec = self.getU(self.options.incdec) + l,r,t,b,an,al = (s.left-incdec, s.right+incdec, s.top-incdec, s.bottom+incdec, s.width+incdec*2, s.height+incdec*2) + return (l,r,t,b,an,al) + + def copyProp(self, orig, dest, prop): + if orig.get(prop): + dest.set(prop, orig.get(prop)) + + def estilo(self, nn, orig, style=defStyle): + if self.options.copyfill: + self.copyProp(orig, nn, 'style') + self.copyProp(orig, nn, 'class') + else: + self.chStyles(nn,style) + + def circleABCD(self,p,r,abcd="ABCD",inverse=False,xtra=None): + aa = r * 0.551915024494 + parts={ + 'A':[XY(0,-r),XY(aa,-r), XY(r, -aa),XY(r,0)], + 'B':[XY(r,0), XY(r, aa), XY(aa, r),XY(0,r)], + 'C':[XY(0,r), XY(-aa,r), XY(-r, aa),XY(-r,0)], + 'D':[XY(-r,0),XY(-r,-aa),XY(-aa,-r),XY(0,-r)]} + pA = [XY(p)+N for N in parts[abcd[0]]] + for aa in abcd[1:]: + pA = pA + [XY(p)+N for N in parts[aa][1:]] + if inverse==True: pA.reverse() + listA = XYList(pA) + if xtra: + for n in xtra: + listA[n].extend(xtra[n]) + return listA + + # def getMed(self, id): + # #query inkscape about the bounding box of obj + # q = {'width':0,'height':0} + # file = self.args[-1] + # scale = self.unittouu('1px') # convert to document units + # for query in q.keys(): + # ss = 'inkscape --query-%s --query-id=%s "%s"' % (query,id,file) + # if bsubprocess: + # info('bsubprocess') + # p = Popen(ss, shell=True, stdout=PIPE, stderr=PIPE) + # rc = p.wait() + # aaa = p.stdout.read() + # q[query] = aaa + # err = p.stderr.read() + # else: + # f,err = os.popen3(ss)[1:] + # q[query] = scale * float(f.read()) + # f.close() + # err.close() + # return q + + def pillows(self, type, a, node, l, t, r, b, cX, cY): + pts = [] + if type=="pillowrect": cnrs=[XY(l,t), XY(r,t), XY(r,b), XY(l,b)] + if type=="pillowrombus": cnrs=[XY(l,t+cY), XY(l+cX,t), XY(r,t+cY), XY(r-cX,b)] + aa = a + for n in range(0,len(cnrs)-1): + pts.append(cnrs[n]) + pts.append(XY(cnrs[n]).atMid(cnrs[n+1]) + XY(0,aa).rot(cnrs[n].getAngle(cnrs[n+1]))) + n=len(cnrs)-1 + pts.append(cnrs[n]) + + pM = XY(cnrs[n]).atMid(cnrs[0]) + XY(0,aa).rot(cnrs[n].getAngle(cnrs[0])) + pts.append(pM) + + s = '' + + for n in range(0,int(len(pts)/2)-1): + nnA = calcCircle(pts[n*2], pts[n*2+1], pts[n*2 + 2]) + s = s + ' ' + setArc(nnA['c'].x, nnA['c'].y, nnA['r'], nnA['c'].getAngle(pts[n*2+2]), nnA['c'].getAngle(pts[n*2]), 1 if n==0 else 0) + n = len(pts) + nnA = calcCircle(pts[n-2], pts[n-1], pts[0]) + s = s + ' ' + setArc(nnA['c'].x, nnA['c'].y, nnA['r'], nnA['c'].getAngle(pts[0]), nnA['c'].getAngle(pts[n-2]), 0) + shp = addChild(node.getparent(), 'path',{'d': s+" Z"}) + self.estilo(shp,node) + + def draw(self, node, sh='rombus'): + if (node.tag == inkex.addNS('text','svg')): + return + sO = self.options + l, r, t, b, an, al = self.limits(node) + sqSel = sO.squareselection + tInv = sO.fromCornersInv + copyfill = sO.copyfill + deleteorigin = sO.deleteorigin + + side = min(al,an) + if sqSel: + incx=(an-side)/2.0 + l,r,an =(l+incx,r-incx,side) + incy=(al-side)/2.0 + t +=incy + b -=incy + al = side + cX, cY = (an/2.0,al/2.0) + sub_bb = sO.tab_from_bb + pp = node.getparent() + varBez = 0.551915024494 + + a = self.getU(sO.size) if sub_bb=="chamfer" else self.getU(sO.midsize) + + a_2, a2 = (a / 2.0,a * 2.0) + dS = "m %sz" + pnts = [[l+cX,t],[cX,cY],[-cX,cY],[-cX,-cY]] + aa = a * varBez + chtype = sO.chamfertype + midtype = sO.midtype + + an2, al2 = ((an-a)/2.0,(al-a)/2.0) + tritype = sO.tritype + if sh == 'bbox': + if midtype=="rombus" and a>0: pnts=[[l+cX - a_2,t],[a,0],[an2,al2],[0,a],[-an2,al2],[-a,0],[-an2,-al2],[0,-a]] + if (sub_bb=='mid'): + if midtype=="chamfer": + if tInv==False: + pnts=[[l+a,t],[an - a2,0],[a,a],[0,al-a2],[-a,a],[-(an - a2),0],[-a,-a],[0,-(al-a2)]] + else: + pnts=[[l,t],[a,0],[-a,a],[an-a,0," z m"],[a,0],[0,a],[a,al," z m"],[0,-a],[-a,a],[-an+a,0," z m"],[-a,-a],[0,a]] + if midtype=="cross": + pnts=[[l+an2,t],[a,0],[0,al2],[an2,0],[0,a],[-an2,0],[0,al2],[-a,0],[0,-al2],[-an2,0],[0,-a],[an2,0]] + if midtype=="starcenter": + pnts=[[l+cX,t],[a_2,al2], [an2,a_2], [-an2,a_2],[-a_2,al2],[-a_2,-al2],[-an2,-a_2],[an2,-a_2]] + + if midtype=="pillowrombus": + self.pillows(midtype, a, node, l, t, r, b, cX, cY) + pnts = [] + if deleteorigin: node.delete() + + if (sub_bb=='chamfer'): + if chtype=="chamfer": + if tInv==False: + pnts=[[l+a,t],[an - a2,0],[a,a],[0,al-a2],[-a,a],[-(an - a2),0],[-a,-a],[0,-(al-a2)]] + else: + pnts=[[l,t],[a,0],[-a,a],[an-a,0," z m"],[a,0],[0,a],[a,al," z m"],[0,-a],[-a,a],[-an+a,0," z m"],[-a,-a],[0,a]] + if chtype=="round": + if tInv==False: + pnts = circQ(XY(l,t),a,"B",0,{1:"C"}) + circQ(XY(l,b),a,"A",0,{0:"L",1:"C"}) + circQ(XY(r,b),a,"D",0,{0:"L",1:"C"}) + circQ(XY(r,t),a,"C",0,{0:"L",1:"C"}) + else: + pnts=[[l,t],[a,0],[0,aa,"c "],[-aa,a],[-a,a],[an-a,0,"z m "],[a,0],[0,a],[-aa,0," c"],[-a,-aa],[-a,-a], + [a,al-a,"z m "],[0,a],[-a,0],[0,-aa,"c "],[aa,-a],[a,-a],[-an,0,"z m "],[0,a],[a,0],[0,-aa,"c "],[-aa,-a],[-a,-a]] + if chtype=="roundinv": + pnts=[[l,t],[a,0],[0,aa,"c "],[-aa,a],[-a,a],[an-a,0,"z m "],[a,0],[0,a],[-aa,0," c"],[-a,-aa],[-a,-a], + [a,al-a,"z m "],[0,a],[-a,0],[0,-aa,"c "],[aa,-a],[a,-a],[-an,0,"z m "],[0,a],[a,0],[0,-aa,"c "],[-aa,-a],[-a,-a]] + if chtype=="rect": + pnts=[[l+a,t],[an - a2,0],[0,a],[a,0],[0,al-a2],[-a,0],[0,a],[-(an-a2),0],[0,-a],[-a,0],[0,-(al-a2)],[a,0]] + if chtype=="starcorners": + pnts=[[l,t],[cX,al2],[cX,-al2],[-an2,cY],[an2,cY],[-cX,-al2],[-cX,al2],[an2,-cY]] + if chtype=="crosscornersquad": + pnts=[[l-a,t],[0,-a],[a,0],[0,al+a*2],[-a,0],[0,-a],[an+a*2,0],[0,a],[-a,0],[0,-al-a*2],[a,0],[0,a]] + if chtype=="crosscornerstri": + pnts=[[l-a,t], [a,-a], [0,al+a*2], [-a,-a], [an+a*2,0], [-a,a], [0,-al-a*2],[a,a]] + if chtype=="crosscornersround": + dS = "M %sZ" + aa2 = a_2 * varBez + p1 = circQ(XY(r + a_2, t - a_2),a_2,"DAB",1) + p2 = circQ(XY(r + a_2, b + a_2),a_2,"ABC",1) + p3 = circQ(XY(l - a_2, b + a_2),a_2,"BCD",1) + p4 = circQ(XY(l - a_2, t - a_2),a_2,"CDA",1) + pnts = p1 + [[r,t],[r,b+a_2-aa2]] + p2 + [[r+a_2-aa2,b],[l-a_2+aa2,b]] + p3 + [[l,b+a_2-aa],[l,t-a_2+aa]] + p4 + pnts[1].append(" C") + + if chtype=="pillowrect": + pts = [] + self.pillows(chtype, a, node, l, t, r, b, cX, cY) + pnts = [] + dS = "M %sZ" + if deleteorigin: node.delete() + if chtype == "spiralrect": + An, Al = (an, al) + pnts = [[l,t], [An,0], [0,Al], [-An,0], [0,-Al+a]] + An = An - a + Al = Al - a*2 + tot = min(An//a,Al//a) // 2 + 1 + + for n in range(0,int(tot)): + pnts.append([An,0]) + An = An-a + if Al>a: + pnts.append([0,Al]) + Al=Al-a + else: + break + if An>a: + pnts.extend([[-An,0]]) + An = An-a + else: + break + if Al>0: + pnts.extend([[0, -Al]]) + Al=Al-a + else: + break + + # ________________ + # ______________ | + # | __________ | | + # | |____________| | + # |________________| + + defStyle = [['stroke-width','2.5'],['fill','none'],['stroke','#ff0000']] + dS = "m %s" + + if (sub_bb=='spikes'): pnts = self.triSpikes(sO, an, al, l, t) + + if sub_bb=='arrow': + pnts = self.drawArrow(sO, an, al, l, t) + if sO.arrowtype=="arrowstick": + dS = "m %s" + + if sub_bb=='triangles': + trihside, trivside=(sO.trihside, sO.trivside) + if tritype=="isosceles": pnts=[[l+cX,t],[cX,al],[-an,0]] + if tritype=="equi": + sqrt3 = 1.7320508075 + height = sqrt3/2 * side + tcx, tcy = ((an - side)/2.0, (al - height)/2.0) + pnts=[[cX+l,t+tcy],[an/2.0-tcx,height],[-side,0]] + if tritype=="rect": + x1 = l + tern(not trivside and trihside,an,0) + x2 = tern(not trivside and trihside,0,an) + x3 = tern(trivside and trihside,0,-an) + pnts=[[x1,t], [x2,tern(not trivside,al,0)], [x3,tern(not trivside,0,al)]] + # ####################################### + if tritype=="circi" or tritype=="circe" or tritype=="trii": + # get verts + pnts = [] + if node.get('d'): + p = node.path.to_superpath().to_path().to_arrays() + vs=[] + for cmd, params in p: + if cmd != 'Z' and cmd != 'z': + vs.append(XY(params[-2],params[-1])) + if len(vs)>2: + if tritype == "trii": + p1 = XY(vs[0]) + (XY(vs[1])-vs[0]).div(2) + p2 = XY(vs[1]) + (XY(vs[2])-vs[1]).div(2) + p3 = XY(vs[2]) + (XY(vs[0])-vs[2]).div(2) + pnts = [p3.co,(p1-p3).co,((p2-p1)-p3).co] + if tritype == "circi" or tritype == "circe": + if tritype == "circi": + rad, px, py = circleInscribedInTri(vs[0], vs[1], vs[2]) + if tritype == "circe": + rad, px, py = TriInscribedInCircle(vs[0], vs[1], vs[2]) + nn = svgCircle(node.getparent(), rad, px, py) + self.estilo(nn,node) + pnts=[] + if deleteorigin: node.delete() + if sh=='nodes': + # get verts + obj, posh, posv, objS, oY =(sO.obj, int(sO.posh), int(sO.posv), sO.objsize, sO.ordery) + reducey = sO.reducey + o2 = objS/2 + pnts = [] + orderY = [] + if node.get('d'): + p = node.path.to_arrays() + vs = [] + minY, maxY, prevX, prevY = (100000.0, -100000.0, 0, 0) + for cmd, params in p: + if cmd != 'Z' and cmd != 'z': + posY = prevY + posX = prevX + posY = params[-1] + if cmd in ['h','H']: + posY = prevY + posX = params[-1] + elif cmd not in ['v','V','h','H']: + posX = params[-2] + vs.append(XY(posX, posY)) + prevX, prevY, minY, maxY = (posX, posY, min(posY, minY), max(posY, maxY)) + objs = [] + dist = maxY - minY + grp = addChild(node.getparent(), 'g',{}) + self.copyProp(node, grp, 'transform') + self.estilo(grp,node) + + if obj == "obj": + oi = sO.objid + este = self.svg.getElementById('%s' % oi) + if este == None: + obj='c' + else: + l1, r1, t1, b1, an1, al1 = self.limits(este) + w2, h2 = (an1/2 , al1/2) + for n in range(0,len(vs)): + if obj == "number": + nn = self.addTxt(grp, str(vs[n].x), str(vs[n].y), str(n)) + if obj=="obj": + if este != None: + reduce = (100 - (reducey * ((maxY - vs[n].y) / dist)))/100 + px = str(vs[n].x / reduce - l1 - w2 + w2 * posh) + py = str(vs[n].y / reduce - t1 - h2 + h2 * posv) + nn = addChild(grp,'use',{inkex.addNS('href',"xlink"):"#"+oi,'x':px,'y':py, "transform":"scale(%f)" % (reduce)}) + else: + obj='c' + reduce = (o2 / 100 * reducey) * (maxY - vs[n].y) / dist + O2 = o2 - reduce + if obj=="c": + pxy = vs[n] + XY(posh, posv).mul(O2) + nn = svgCircle(grp, O2, pxy.x, pxy.y) + if obj=="s": + pxy = vs[n] - XY(O2) + XY(O2 * posh, O2 * posv) + nn = addChild(grp,'rect',{'height':str(O2*2), 'width':str(O2*2), 'x':str(pxy.x), 'y':str(pxy.y)}) + if obj=="number": + nn = self.addTxt(grp, str(vs[n].x), str(vs[n].y), str(n)) + if obj=="coords": + maxDec=sO.maxdecimals + nn = self.addTxt(grp, str(vs[n].x), str(vs[n].y), str(round(vs[n].x, maxDec)) + "," + str(round(vs[n].y, maxDec))) + orderY.append([vs[n].y,nn]) + #self.estilo(nn,node) + if sO.ordery: + def myFunc(e): + return e[0] + orderY.sort(key=myFunc) + for item in orderY: + grp.append( item[1]) + if deleteorigin: node.delete() + # ##############################3 + + d = "" + if len(pnts)>0: + for n in pnts: + ss = "" if len(n)<3 else n[2] + d += "%s%s,%s " % (ss, str(n[0]),str(n[1])) + nn = self.addEle('path',pp, {'d':dS % (d)}) + self.estilo(nn,node) + if deleteorigin: node.delete() + + def makeRel(self,arr): + b = arr[:] + for n in range(1,len(arr)): + s = b[n] + for i in range(0,n): + s = s - arr[i] + b[n] = s + return b + + def circle(self,p,r): + varBez = 0.551915024494 + dS = "m %s" + aa = r * varBez + d="" + pnts=[[p.x - r,p.y],[0,aa,"c "],[r - aa,r],[r,r],[aa,0,"c "],[r,-r+aa],[r,-r],[0,-aa,"c "],[-r+aa,-r],[-r,-r],[-aa,0,"c "],[-r,r-aa],[-r, r]] + for n in pnts: + ss = "" if len(n)<3 else n[2] + d += "%s%s,%s " % (ss, str(n[0]),str(n[1])) + return d + + def addTxt(self, node, x, y, text, dy = 0): + new2 = self.addEle(inkex.addNS('text','svg'), node,{'x':str(x),'y':str(y)}) + new = etree.SubElement(new2, inkex.addNS('tspan','svg'), {inkex.addNS('role','sodipodi'): 'line'}) + new.set('style','text-align:center; vertical-align:bottom; font-size:%s; fill-opacity:1.0; stroke:none; font-weight:normal; font-style:normal; fill:#000000' % self.options.fntsize) + new.set('dy', str(dy)) + new.text = str(text) + return new2 + + def circsCone(self, sels, sh='rombus'): + sO = self.options + copyfill = sO.copyfill + deleteorigin = sO.deleteorigin + joincirctype = sO.joincirctype + r2 = sO.joinradius + cssEmpty = [['stroke-width','0.5'],['fill','none'],['stroke','#ff0000']] + + strEmpty = 'stroke-width:0.02; fill:none; stroke:#000000; stroke-dasharray:0.5,0.2; stroke-dashoffset:0;' + + for nodos in range(len(sels)-1): + node = sels[nodos] + node2 = sels[nodos+1] + lA, rA, tA, bA, anA, alA = self.limits(node) + lB, rB, tB, bB, anB, alB = self.limits(node2) + rA, cY = (anA/2.0,alA/2.0) + rB, cY2 = (anB/2.0,alB/2.0) + + PtA = XY(lA + rA, tA + cY) + PtB = XY(lB + rB, tB + cY2) + + if (circleInCircle(PtA,rA,PtB,rB) or circleInCircle(PtB,rB,PtA,rA)): + pass + else: + pp = node.getparent() + rotAB = XY(PtB).getAngle(PtA) + dist = PtA.hipo(PtB) + if joincirctype=='trapecio': + # alineamos las esferas en Y + rDif = rA - rB + Axis = XY(-rDif,0) + #D2 = math.sqrt((dist*dist) - (rDif*rDif)) / dist + D2 = triCat(dist, rDif) / dist + P1 = XY(Axis).mul(rA / dist) + P2 = XY(-dist,0) + XY(Axis).mul(rB / dist) + r = P1.VDist(P2) + Rot1 = XY(P2.x,rB * D2).getAngleD(XY(P2.x + r, rA * D2)) + aBez=createArcBez(rA,-90 -Rot1, -270 + Rot1) + curva1a = bezs2XYList(aBez) + d = XYListSt(curva1a, rotAB, PtA) + + pnts2 = bezs2XYList(createArcBez(rB, 90 + Rot1, 270 - Rot1),XY(-dist,0)) + d2 = XYListSt(pnts2, rotAB, PtA) + nn = self.addEle('path',pp, {'d':"M%s L%sZ" % (d,d2)}) + self.estilo(nn,node) + # ################## B L O B ############## + if joincirctype=='blob': + if ((r2==0) and (dist<(rA+rB))): + r2 = dist - rB + if (r2 > 0): + rad1 = rA + r2 + rad2 = rB + r2 + a = ( pow2(dist) - pow2(rB+r2) + pow2(rA+r2))/(dist*2) + else: + r2 = dist - rA - rB + rad1 = dist - rB + rad2 = dist - rA + a = (pow2(dist-rB) - pow2(dist-rA) + pow2(dist))/(dist*2); + # alineamos las esferas en Y + + rt = math.atan2(PtB.y - PtA.y, PtB.x - PtA.x) + # # distancia del centro 1 a la interseccion de los circulos + x = (dist * dist - rad2 * rad2 + rad1 * rad1) / (dist*2) + if (rad1 * rad1 - x * x) > 0 : + #catB = math.sqrt(rad1 * rad1 - x * x) + catB = triCat(rad1, x) + + rt = math.degrees(XY(0,0).getAngle(XY(-x, -catB))) + rt2 = math.degrees(XY(0,0).getAngle(XY(-(dist - x), -catB))) + + curva1 = bezs2XYList(createArcBez(rA, rt, -rt)) + curva1.reverse() + curva2 = bezs2XYList(createArcBez(r2, -180 + rt, -rt2),XY(-x, -catB)) + curva3 = bezs2XYList(createArcBez(rB, rt2+180,180-rt2),XY(-dist, 0)) + curva3.reverse() + curva4 = bezs2XYList(createArcBez(r2, rt2, 180 - rt),XY(-x, catB)) + + curva1= curva1+curva2[1:]+curva3[1:]+curva4[1:] + sCurva1 = XYListSt(curva1, rotAB, PtA) + + nn = self.addEle('path',pp,{'d':"M %s" % (sCurva1)}) + self.estilo(nn,node) +# ################################################ +# ################## O V A L ##################### +# ################################################ + if joincirctype=='oval': + minR2 = dist + min(rA,rB) + if r2 < minR2: + r2 = minR2 + info('Changed radius to '+str(minR2)) + rad1 = r2 - rA + rad2 = r2 - rB + a = ( pow2(dist) - pow2(rB+r2) + pow2(rA+r2))/(dist*2) + + rt = math.atan2(PtB.y - PtA.y, PtB.x - PtA.x) + D = dist #XY(PtA).sub(PtB).vlength() # distancia entre los centros + # distancia del centro 1 a la interseccion de los circulos + x = (D*D - rad2 * rad2 + rad1 * rad1) / (D*2) + # catB = math.sqrt(rad1 * rad1 - x * x) + catB = triCat(rad1, x) + + rotAB=XY(PtB).getAngle(PtA) + rot1 = math.degrees(XY(0,0).getAngle(XY(-x,-catB))) + 180.0 + curva1 = bezs2XYList(createArcBez(rA, -rot1, rot1)) + curva1.reverse() + #rot2 = math.degrees(XY(-dist,0).getAngle(XY(-x,-catB))) +180.0 + rot2 = XY(-dist,0).getAngleD(XY(-x,-catB)) +180.0 + curva2 = bezs2XYList(createArcBez(r2, -rot2,-rot1),XY(-x,catB)) + curva2.reverse() + curva3 = bezs2XYList(createArcBez(rB, rot2,-rot2),XY(-dist,0)) + curva3.reverse() + curva4 = bezs2XYList(createArcBez(r2, rot1,rot2),XY(-x,-catB)) + curva4.reverse() + curva1= curva1+curva2[1:]+curva3[1:]+curva4[1:] #+curva3[1:]+curva4[1:] + sCurva1 = XYListSt(curva1, rotAB, PtA) + # curva1 + nn = self.addEle('path',pp,{'d':"M %sZ" % (sCurva1),'style':'stroke-width:0.02;fill:#cc0000;stroke:#000000;'}) + self.estilo(nn,node) + if deleteorigin: node.delete() + + def drawArrow(self, sO, an, al, l, t): + arrowType = sO.arrowtype + headH, headW, arrowW = (self.getU(sO.headHeight), self.getU(sO.headWidth), self.getU(sO.arrowWidth)) + hw2=headW/2.0 + cX = an/2.0 + if arrowType=="arrowfilled": + pnts=[[l+cX,t],[hw2,headH],[-(headW-arrowW)/2.0,0],[0,al-headH],[-arrowW,0],[0,-(al-headH)],[-(headW-arrowW)/2.0,0]] + else: + #dS = "m %s" + pnts=[[l+cX,t],[0,al],[-hw2,-al+headH,"m "],[hw2,-headH],[hw2,headH]] + return pnts + + def triSpikes(self, sO, an, al, l, t): + spktype, spikesdir, sh, ssep = (sO.spikestype, sO.spikesdir, sO.spikeheight, self.getU(sO.spikesep)) + ss = self.getU(sO.spikesize) + anX, anY = (int( (an + ssep) / (ss * 2 + ssep)), int( (al+ssep) / (ss * 2 + ssep))) + iniX, iniY = (((an+ssep) - (anX * (ss * 2 + ssep))) / 2.0, ((al+ssep) - (anY * (ss * 2 + ssep))) / 2.0) + if spktype=="trirect" or spktype=="squ": + anX, anY = ( int((an + ssep) / (ss + ssep)), int((al + ssep) / (ss + ssep)) ) + iniX, iniY = (((an + ssep) - (anX * (ss + ssep))) / 2.0, ((al + ssep) - (anY * (ss + ssep))) / 2.0) + dir = 1 + pnts = [[l,t],[iniX,0]] + + if spikesdir=='ins': dir = -1.0 + #if spktype=="tri" or spktype=="trirect" or spktype=="squ": + if spktype in ["tri", "trirect", "squ"]: + sDir = sO.spikesdirt # --------------------------------TOP--------------------- + if sDir=='pre': sDir = spikesdir + if sDir=='non': + pnts = [[l,t],[an,0]] + else : + dirT = 1 + if sDir=='ins': dirT = -1.0 + for n in range(anX): + if sDir=='alt' : dirT = 1 if n % 2 == 1 else -1 + if spktype=="tri": pnts.extend([[ss,-sh*dirT],[ss,sh*dirT]]) + if spktype=="trirect": pnts.extend([[0,-sh*dirT],[ss,sh*dirT]]) + if spktype=="squ": pnts.extend([[0,-sh*dirT],[ss,0],[0,sh*dirT]]) + if ssep != 0 and n < (anX-1): pnts.append([ssep,0]) + pnts.append([iniX,0]) + sDir = sO.spikesdirr # ---------------------------------RIGHT------------------- + if sDir == 'pre' : sDir = spikesdir + if sDir == 'non' : + pnts.append([0,al]) + else : + pnts.append([0,iniY]) + dirR = -1.0 if sDir=='ins' else 1.0 + for n in range(anY): + if sDir == 'alt' : dirR = 1 if n % 2 == 1 else -1 + if spktype=="tri": pnts.extend([[sh*dirR,ss],[-sh * dirR,ss]]) + if spktype=="trirect": pnts.extend([[sh*dirR,0],[-sh * dirR,ss]]) + if spktype=="squ": pnts.extend([[sh*dirR,0],[0,ss],[-sh * dirR,0]]) + if ssep != 0 and n < (anY-1): pnts.append([0, ssep]) + pnts.append([0,iniY]) + sDir = sO.spikesdirb # -------------------------------BOTTOM-------------------- + if sDir == 'pre' : sDir = spikesdir + if sDir == 'non' : + pnts.append([-an,0]) + else : + pnts.append([-iniX,0]) + dirB = -1.0 if sDir=='ins' else 1.0 + for n in range(anX): + if sDir == 'alt' : dirB = 1 if n % 2 == 1 else -1 + if spktype=="tri": pnts.extend([[-ss,sh*dirB],[-ss,-sh*dirB]]) + if spktype=="trirect": pnts.extend([[0,sh*dirB],[-ss,-sh*dirB]]) + if spktype=="squ": pnts.extend([[0,sh*dirB],[-ss,0],[0,-sh*dirB]]) + if ssep != 0 and n < (anX-1): pnts.append([-ssep,0]) + pnts.append([-iniX,0]) + sDir = sO.spikesdirl # --------------------------------------LEFT--------------- + if sDir == 'pre' : sDir = spikesdir + if sDir != 'non' : + pnts.append([0,-iniY]) + dirL = -1.0 if sDir=='ins' else 1.0 + #sDir = sO.spikesdir + for n in range(anY): + if sDir == 'alt' : dirL = 1 if n % 2 == 1 else -1 + #pnts.extend([[-sh*dirL,-ss],[sh*dirL,-ss]]) + if spktype=="tri": pnts.extend([[-sh*dirL,-ss],[sh*dirL,-ss]]) + if spktype=="trirect": pnts.extend([[-sh*dirL,0], [sh*dirL,-ss]]) + if spktype=="squ": pnts.extend([[-sh*dirL,0], [0,-ss],[sh * dirL,0]]) + if ssep != 0 and n < (anY-1): pnts.append([0, -ssep]) + ########################################### + varBez = 0.551915024494 + if spktype in ["rnd", "wav"]: + dif, difh, dBez, dBezh = (ss-(ss*varBez), sh-(sh*varBez), ss*varBez, sh*varBez) + sDir = sO.spikesdirt # --------------------------------TOP--------------------- + if sDir=='pre': sDir = spikesdir + if sDir=='non': + pnts = [[l,t],[an,0],[0,iniY]] + else : + dirT = -1.0 if sDir=='ins' else 1.0 + for n in range(anX): + if sDir=='alt' : dirT = 1 if n % 2 == 1 else -1 + if spktype == "rnd": pnts.extend([[0,-dBezh*dirT," c"],[dif,-sh*dirT],[ss,-sh*dirT],[dBez,0], [ss,difh*dirT],[ss,sh*dirT]]) #fijo + if spktype == "wav": pnts.extend([[0,-dBezh*dirT," c"],[dif,-sh*dirT],[ss,-sh*dirT],[0,dBezh*dirT],[dBez,sh*dirT],[ss,sh*dirT]]) #fijo + if ssep!=0 and n < (anX-1): pnts.append([ssep,0,' l']) + pnts.extend([[iniX,0,' l'],[0,iniY]]) + sDir = sO.spikesdirr # ---------------------------------RIGHT------------------- + if sDir == 'pre' : sDir = spikesdir + if sDir == 'non' : + pnts.extend([[0,al - iniY],[-iniX,0]]) + else : + dirR = -1.0 if sDir=='ins' else 1.0 + for n in range(anY): + if sDir == 'alt' : dirR = 1 if n % 2 == 1 else -1 + if spktype == "rnd": pnts.extend([[dBezh*dirR,0," c"],[sh*dirR,dif],[sh*dirR,ss], [0,dBez] ,[-difh*dirR,ss], [-sh*dirR,ss]]) #fijo + if spktype == "wav": pnts.extend([[dBezh*dirR,0," c"],[sh*dirR,dif],[sh*dirR,ss], [-dBezh*dirR,0],[-sh*dirR,dBez], [-sh*dirR,ss]]) #fijo + if ssep!=0 and n < (anY-1): pnts.append([0, ssep,' l']) + pnts.extend([[0,iniY,' l'],[-iniX,0]]) + sDir = sO.spikesdirb # -------------------------------BOTTOM-------------------- + if sDir == 'pre' : sDir = spikesdir + if sDir == 'non' : + pnts.extend([[-an + iniX,0],[0,-iniY]]) + else : + dirB = -1.0 if sDir=='ins' else 1.0 + for n in range(anX): + if sDir == 'alt' : dirB = 1 if n % 2 == 1 else -1 + if spktype == "rnd": pnts.extend([[0,dBezh*dirB," c"],[-dif,sh*dirB],[-ss,sh*dirB],[-dBez,0],[-ss,-difh * dirB],[-ss,-sh * dirB]]) #fijo + if spktype == "wav": pnts.extend([[0,dBezh*dirB," c"],[-dif,sh*dirB],[-ss,sh*dirB],[0,-dBezh*dirB],[-dif, -sh*dirB],[-ss,-sh * dirB]]) #fijo + if ssep!=0 and n < (anX-1): pnts.append([-ssep,0,' l']) + pnts.extend([[-iniX,0,' l'],[0,-iniY]]) + sDir = sO.spikesdirl # --------------------------------------LEFT--------------- + if sDir == 'pre' : sDir = spikesdir + if sDir != 'non' : + dirL = -1.0 if sDir=='ins' else 1.0 + for n in range(anY): + if sDir == 'alt' : dirL = 1 if n % 2 == 1 else -1 + if spktype=="rnd": pnts.extend([[-dBezh*dirL,0," c"],[-sh*dirL,-dif],[-sh*dirL,-ss],[0,-dBez],[difh * dirL,-ss],[sh * dirL,-ss]]) #fijo + if spktype=="wav": pnts.extend([[-dBezh*dirL,0," c"],[-sh*dirL,-dif],[-sh*dirL,-ss],[dBezh*dirL,0],[sh*dirL,-dBez],[sh * dirL,-ss]]) #fijo + if ssep!=0 and n < (anY-1): pnts.append([0, -ssep,' l']) + return pnts # 805 + + def draw_shapes(self): + sels = [] + for id, node in self.svg.selected.items(): sels.append(node) + tab = str(self.options.tab) + if tab != 'extra': + for node in sels: + self.draw(node, tab) + else: + Type = str(self.options.joincirctype) + if len(sels)<2: + inkex.errormsg('Select at least two objects') + else: + self.circsCone(sels, Type) + + def loc_str(self, str): + return locale.format("%.f", float(str), 0) + + def effect(self): + slices = self.draw_shapes() + +if __name__ == "__main__": + Shapes().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/sheet_metal_conus/sheet_metal_conus.inx b/extensions/fablabchemnitz/sheet_metal_conus/sheet_metal_conus.inx new file mode 100644 index 00000000..ee2195b2 --- /dev/null +++ b/extensions/fablabchemnitz/sheet_metal_conus/sheet_metal_conus.inx @@ -0,0 +1,32 @@ + + + Sheet Metal Conus + fablabchemnitz.de.sheet_metal_conus + + + + + + + + 300.0 + 100.0 + 200.0 + 0.4 + false + + 255 + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/sheet_metal_conus/sheet_metal_conus.py b/extensions/fablabchemnitz/sheet_metal_conus/sheet_metal_conus.py new file mode 100644 index 00000000..29999940 --- /dev/null +++ b/extensions/fablabchemnitz/sheet_metal_conus/sheet_metal_conus.py @@ -0,0 +1,430 @@ +#!/usr/bin/env python3 + +# Distributed under the terms of the GNU Lesser General Public License v3.0 + +import math +import inkex +from copy import deepcopy +from lxml import etree +from inkex.transforms import Transform +from inkex import Color + +# Helper functions +def calc_angle_between_points(p1, p2): + xDiff = p2[0] - p1[0] + yDiff = p2[1] - p1[1] + return math.degrees(math.atan2(yDiff, xDiff)) + +def calc_dist_between_points(p1, p2): + xDiff = p2[0] - p1[0] + yDiff = p2[1] - p1[1] + return math.sqrt(yDiff*yDiff + xDiff*xDiff) + +def normalize(p1, p2): + " p1,p2 defines a vector return normalized " + xDiff = p2[0] - p1[0] + yDiff = p2[1] - p1[1] + magn = calc_dist_between_points(p1,p2) + return (xDiff/magn, yDiff/magn) + +def polar_to_cartesian(cx, cy, radius, angle_degrees): + " So we can make arcs in the 'A' svg syntax. " + angle_radians = math.radians(angle_degrees) + return [ + cx + (radius * math.cos(angle_radians)), + cy + (radius * math.sin(angle_radians)) + ] + +def point_on_circle(radius, angle): + " return xy coord of the point at distance radius from origin at angle " + x = radius * math.cos(angle) + y = radius * math.sin(angle) + return [x, y] + +class SheetMetalConus(inkex.EffectExtension): + """ Program to unfold a frustum of a cone or a cone + (if parameter diaCut=0) and generate a sheet cutting layout + or flat pattern projection that can be rolled or bend up into a (truncated) cone shape. + """ + color_marker_dim = '#703cd6' # purple + color_marker_chords = '#9d2222' # red + color_marker_base = '#36ba36' # green + # Arrowed lines + dimline_style = {'stroke' : '#000000', + 'stroke-width' : '0.75px', + 'fill' : 'none', + 'marker-start' : 'url(#ArrowDIN-start)', + 'marker-end' : 'url(#ArrowDIN-end)' } + + def add_arguments(self, pars): + pars.add_argument('-b', '--diaBase', type = float, dest = 'diaBase', default = 300.0, help = 'The diameter of the cones base.') + pars.add_argument('-c', '--diaCut', type = float, default = 100.0, help = 'The diameter of cones cut (0.0 if cone is not cut.') + pars.add_argument('-l', '--heightCone', type = float, default = 200.0, help = 'The height of the (cut) cone.') + pars.add_argument('-u', '--units', default = 'mm', help = 'The units in which the cone values are given. mm or in for real objects') + pars.add_argument('-w', '--strokeWidth', type = float, default = 0.3, help = 'The line thickness in given unit. For laser cutting it should be rather small.') + pars.add_argument('-f', '--strokeColour', type=Color, default = 255, help = 'The line colour.') + pars.add_argument('-d', '--verbose', type = inkex.Boolean, default = False, help = 'Enable verbose output of calculated parameters. Used for debugging or is someone needs the calculated values.') + + # Marker arrows + def makeMarkerstyle(self, name, rotate): + " Markers added to defs for reuse " + defs = self.svg.getElement('/svg:svg//svg:defs') + if defs == None: + defs = etree.SubElement(self.document.getroot(),inkex.addNS('defs','svg')) + marker = etree.SubElement(defs ,inkex.addNS('marker','svg')) + marker.set('id', name) + marker.set('orient', 'auto') + marker.set('refX', '0.0') + marker.set('refY', '0.0') + marker.set('style', 'overflow:visible') + marker.set(inkex.addNS('stockid','inkscape'), name) + + arrow = etree.Element("path") + # definition of arrows in beautiful DIN-shapes: + if name.startswith('ArrowDIN-'): + if rotate: + arrow.set('d', 'M 8,0 -8,2.11 -8,-2.11 z') + else: + arrow.set('d', 'M -8,0 8,-2.11 8,2.11 z') + if name.startswith('ArrowDINout-'): + if rotate: + arrow.set('d', 'M 0,0 16,2.11 16,0.5 26,0.5 26,-0.5 16,-0.5 16,-2.11 z') + else: + arrow.set('d', 'M 0,0 -16,2.11 -16,0.5 -26,0.5 -26,-0.5 -16,-0.5 -16,-2.11 z') + arrow.set('style', 'fill:#000000;stroke:none') + marker.append(arrow) + + def set_arrow_dir(self, option, style): + if option=='inside': + # inside + self.arrowlen = 6.0 + style['marker-start'] = 'url(#ArrowDIN-start)' + style['marker-end'] = 'url(#ArrowDIN-end)' + self.makeMarkerstyle('ArrowDIN-start', False) + self.makeMarkerstyle('ArrowDIN-end', True) + else: + # outside + self.arrowlen = 0 + style['marker-start'] = 'url(#ArrowDINout-start)' + style['marker-end'] = 'url(#ArrowDINout-end)' + self.makeMarkerstyle('ArrowDINout-start', False) + self.makeMarkerstyle('ArrowDINout-end', True) + + def drawDimArc(self, center, start, end, radius, style, parent, gap=0, lowside=True): + " just the arrowed arc line " + angle = abs(end-start) + # inside or outside + inside = True + critical_length = 35 + dist = calc_dist_between_points(point_on_circle(radius, start), point_on_circle(radius, end)) + if angle < 45 and dist > critical_length: inside = False + # change start and end angles to make room for arrow markers + arrow_angle = math.degrees(math.sin(self.arrowlen/radius)) + if lowside: + start += arrow_angle + angle -= arrow_angle + anglefac = 1 + else: + start -= arrow_angle + angle -= arrow_angle + anglefac = -1 + # + if gap == 0: + line_attribs = {'style' : str(inkex.Style(style)), + 'd' : self.build_arc(center, start, angle*anglefac, radius, lowside) } + ell = etree.SubElement(parent, inkex.addNS('path','svg'), line_attribs ) + else: # leave a gap for label + gap_angle = math.degrees(math.sin(gap/radius)) + startstyle = deepcopy(style) + startstyle['marker-start'] = None + line_attribs = {'style' : str(inkex.Style(startstyle)), + 'd' : self.build_arc(center, start, angle*anglefac/2-gap_angle/2*anglefac, radius, lowside) } + ell = etree.SubElement(parent, inkex.addNS('path','svg'), line_attribs ) + endstyle = deepcopy(style) + endstyle['marker-end'] = None + line_attribs = {'style' : str(inkex.Style(endstyle)), + 'd' : self.build_arc(center, angle/2*anglefac+gap_angle/2*anglefac, angle*anglefac, radius, lowside) } + etree.SubElement(parent, inkex.addNS('path','svg'), line_attribs ) + # return pos in center of gap (or arc) + textposangle = angle/2*anglefac + return (point_on_circle(radius, math.radians(textposangle))) + + def drawDimension(self, a, b, style, parent): + " draw arrowed dimensions using markers " + # draw arrows as inside or outside dimension + critical_length = 35. + if calc_dist_between_points(a,b) > critical_length: + self.set_arrow_dir('inside', style) + else: + self.set_arrow_dir('outside', style) + attribs = {'style' : str(inkex.Style(style))} + # account for length change so arrows fit + norm = normalize(a, b) + dim_start_x = a[0] + self.arrowlen*norm[0] + dim_start_y = a[1] + self.arrowlen*norm[1] + dim_end_x = b[0] - self.arrowlen*norm[0] + dim_end_y = b[1] - self.arrowlen*norm[1] + # + attribs['d'] = 'M %f,%f %f,%f' % (dim_start_x, dim_start_y, dim_end_x, dim_end_y) + dimline = etree.SubElement(parent, inkex.addNS('path', 'svg'), attribs) + return dimline + + def calculateCone(self, dictCone): + """ Calculates all relevant values in order to construct a cone. + These values are: + - short radius + - long radius + - angle of cone layout + - chord of base diameter + - chord of cut diameter + - coordinates of points A, B, C and D + """ + dBase = dictCone['diaBase'] + dCut = dictCone['diaCut'] + hCone = dictCone['heightCone'] + base = dBase - dCut + # radius from top of cone to cut + if dCut > 0: + shortRadius = math.sqrt( dCut*dCut/4 + (dCut*hCone)/base * (dCut*hCone)/base ) + else: + shortRadius=0.0 + dictCone['shortRadius'] = shortRadius + ## radius from top of cone to base of cone + longRadius=math.sqrt( dBase*dBase/4 + (dBase*hCone)/base * (dBase*hCone)/base ) + dictCone['longRadius'] = longRadius + + ## angle of circle sector + angle=(math.pi * dBase) / longRadius + dictCone['angle'] = angle + # chord is the straight line between the 2 endpoints of an arc. + # Not used directly, but available in verbose output. + chordBase = longRadius * math.sqrt( 2* (1-math.cos(angle)) ) + dictCone['chordBase'] = chordBase + chordCut = shortRadius * math.sqrt( 2* (1-math.cos(angle)) ) + dictCone['chordCut'] = chordCut + + # calculate coordinates of points A, B, C and D + # center M is at (0,0) and points A and B are on the x-axis: + ptA = (shortRadius, 0.0) + ptB = (longRadius, 0.0) + # we can calculate points C and D with the given radii and the calculated angle + ptC=(longRadius * math.cos(angle), longRadius * math.sin(angle)) + ptD=(shortRadius * math.cos(angle), shortRadius * math.sin(angle)) + dictCone['ptA'] = ptA + dictCone['ptB'] = ptB + dictCone['ptC'] = ptC + dictCone['ptD'] = ptD + + def effect(self): + """ Effect behaviour. + - Overrides base class' method and draws rolled out sheet metal cone into SVG document. + """ + # calc scene scale + convFactor = self.svg.unittouu("1" + self.options.units) + # Store all the relevants values in a dictionary for easy access + dictCone={'diaBase': self.options.diaBase, + 'diaCut': self.options.diaCut, + 'heightCone': self.options.heightCone } + # Get all values needed in order to draw cone layout: + self.calculateCone(dictCone) + + # Draw the cone layout: + # Make top level group + t = 'translate(%s,%s)' % (self.svg.namedview.center[0], self.svg.namedview.center[1]) + grp_attribs = {inkex.addNS('label','inkscape'):'Sheet Metal Conus Group', 'transform':t} + grp = etree.SubElement(self.svg.get_current_layer(), 'g', grp_attribs) + + linestyle = { 'stroke' : self.options.strokeColour, 'fill' : 'none', + 'stroke-width': str(self.svg.unittouu(str(self.options.strokeWidth) + self.options.units)) } + line_attribs = {'style' : str(inkex.Style(linestyle)), inkex.addNS('label','inkscape') : 'Cone' } + + # Connect the points into a single path of lines and arcs + zeroCenter=(0.0, 0.0) + angle = math.degrees(dictCone['angle']) + path = "" + path += self.build_line(dictCone['ptA'][0], dictCone['ptA'][1], dictCone['ptB'][0], dictCone['ptB'][1], convFactor) # A,B + path += " " + self.build_arc(zeroCenter[0], zeroCenter[1], 0.0, angle, dictCone.get('longRadius')*convFactor) + path += " " + self.build_line(dictCone['ptC'][0], dictCone['ptC'][1],dictCone['ptD'][0], dictCone['ptD'][1], convFactor) # C,D + path += self.build_arc(zeroCenter[0], zeroCenter[1], 0.0, angle, dictCone['shortRadius']*convFactor) + line_attribs['d'] = path + ell = etree.SubElement(grp, inkex.addNS('path','svg'), line_attribs ) + + # Draw Dimensions Markup + if self.options.verbose == True: + grp_attribs = {inkex.addNS('label','inkscape'):'markup'} + markup_group = etree.SubElement(grp, 'g', grp_attribs) + self.beVerbose(dictCone, convFactor, markup_group) + + def build_arc(self, x, y, start_angle, end_angle, radius, reverse=True, swap=False): + # Not using internal arc rep - instead construct path A in svg style directly + # so we can append lines to make single path + start = polar_to_cartesian(x, y, radius, end_angle) + end = polar_to_cartesian(x, y, radius, start_angle) + arc_flag = 0 if reverse else 1 + sweep = 0 if (end_angle-start_angle) <=180 else 1 + if swap: sweep = 1-sweep + path = 'M %s,%s' % (start[0], start[1]) + path += " A %s,%s 0 %d %d %s %s" % (radius, radius, sweep, arc_flag, end[0], end[1]) + return path + + def build_line(self, x1, y1, x2, y2, unitFactor): + path = 'M %s,%s L %s,%s' % (x1*unitFactor, y1*unitFactor, x2*unitFactor, y2*unitFactor) + return path + + def beVerbose(self, dictCone, unitFactor, parent): + """ Verbose output of calculated values. + Can be used for debugging purposes or if calculated values needed. + """ + # unpack + base_dia = dictCone['diaBase'] + cut_dia = dictCone['diaCut'] + cone_height = dictCone['heightCone'] + shortradius = dictCone['shortRadius'] + longradius = dictCone['longRadius'] + angle = dictCone['angle'] + chord_base = dictCone['chordBase'] + chord_cut = dictCone['chordCut'] + ptA = dictCone['ptA'] + ptB = dictCone['ptB'] + ptC = dictCone['ptC'] + ptD = dictCone['ptD'] + + # styles for markup + stroke_width = max(0.1, self.svg.unittouu(str(self.options.strokeWidth/2) + self.options.units)) + line_style = { 'stroke': self.color_marker_dim, 'stroke-width': str(stroke_width), 'fill':'none' } + arrow_style = self.dimline_style + font_height = min(32, max( 8, int(self.svg.unittouu(str(longradius/40) + self.options.units)))) + text_style = { 'font-size': str(font_height), + 'font-family': 'arial', + 'text-anchor': 'middle', + 'text-align': 'center', + 'fill': self.color_marker_dim } + # verbose message for debug window + msg = "Base diameter: " + str(base_dia) + "Cut diameter: " + str(cut_dia) + \ + "\nCone height: " + str(cone_height) + "\nShort radius: " + str(shortradius) + \ + "\nLong radius: " + str(longradius) + "\nAngle of circle sector: " + str(angle) + \ + " radians (= " + str(math.degrees(angle)) + " degrees)" + \ + "\nChord length of base arc: " + str(chord_base) + \ + "\nChord length of cut arc: " + str(chord_cut) + #inkex.utils.debug( msg) + + # Mark center + marker_length = max(5, longradius* unitFactor/100) + line_attribs = {'style' : str(inkex.Style(line_style)), + inkex.addNS('label','inkscape') : 'center', + 'd' : 'M -{0},-{0} L {0},{0}'.format(marker_length)} + line = etree.SubElement(parent, inkex.addNS('path','svg'), line_attribs) + line_attribs = {'style' : str(inkex.Style(line_style)), + inkex.addNS('label','inkscape') : 'center', + 'd' : 'M -{0},{0} L {0},-{0}'.format(marker_length)} + line = etree.SubElement(parent, inkex.addNS('path','svg'), line_attribs) + # Draw tick marks + line_attribs = {'style' : str(inkex.Style(line_style)), 'd' : 'M 0,-3 L 0,-30'} + line = etree.SubElement(parent, inkex.addNS('path','svg'), line_attribs) + if cut_dia != 0: + line_attribs = {'style' : str(inkex.Style(line_style)), 'd' : 'M {0},-3 L {0},-30'.format(shortradius * unitFactor)} + line = etree.SubElement(parent, inkex.addNS('path','svg'), line_attribs) + line_attribs = {'style' : str(inkex.Style(line_style)), 'd' : 'M {0},-3 L {0},-30'.format(longradius * unitFactor)} + line = etree.SubElement(parent, inkex.addNS('path','svg'), line_attribs) + # span line + arrow_style['stroke'] = self.color_marker_dim + self.drawDimension((0,-10), (shortradius * unitFactor, -10), arrow_style, parent) + self.drawDimension((shortradius * unitFactor,-10), (longradius * unitFactor, -10), arrow_style, parent) + # labels for short, long radii + if cut_dia >= 0.001: + text_atts = {'style':str(inkex.Style(text_style)), + 'x': str(shortradius*unitFactor/2), + 'y': str(-15) } + text = etree.SubElement(parent, 'text', text_atts) + text.text = "%4.3f" %(shortradius) + text_atts = {'style':str(inkex.Style(text_style)), + 'x': str((shortradius + (longradius-shortradius)/2)*unitFactor), + 'y': str(-15) } + text = etree.SubElement(parent, 'text', text_atts) + text.text = "%4.3f" %(longradius) + # Draw angle + lowside = math.degrees(angle) < 180 + value = math.degrees(angle) if lowside else 360-math.degrees(angle) + # radial limit lines + line_attribs = {'style' : str(inkex.Style(line_style)), 'd' : 'M 3,0 L %4.2f,0' % (ptA[0]*unitFactor*0.8)} + line = etree.SubElement(parent, inkex.addNS('path','svg'), line_attribs) + line_attribs = {'style' : str(inkex.Style(line_style)), 'd' : 'M %4.2f,%4.2f L %4.2f,%4.2f' % (ptD[0]*unitFactor*0.02, ptD[1]*unitFactor*0.02,ptD[0]*unitFactor*0.8, ptD[1]*unitFactor*0.8)} + line = etree.SubElement(parent, inkex.addNS('path','svg'), line_attribs) + # arc + arc_rad = ptA[0]*unitFactor*0.50 + gap = self.svg.unittouu(str(font_height*2)+"pt") + textpos = self.drawDimArc(0, 0, value, arc_rad, arrow_style, parent, gap, lowside) + # angle label + textpos[1] += font_height/4 if lowside else font_height/2 + text_atts = {'style':str(inkex.Style(text_style)), + 'x': str(textpos[0]), + 'y': str(textpos[1]) } + text = etree.SubElement(parent, 'text', text_atts) + text.text = "%4.2f deg" %(value) + # chord lines + dash_style = deepcopy(arrow_style) + dash_style['stroke'] = self.color_marker_chords + dash_style['stroke-dasharray'] = '4, 2, 1, 2' + line = self.drawDimension((ptA[0]*unitFactor, ptA[1]*unitFactor), (ptD[0]*unitFactor, ptD[1]*unitFactor), dash_style, parent) + line = self.drawDimension((ptB[0]*unitFactor, ptB[1]*unitFactor), (ptC[0]*unitFactor, ptC[1]*unitFactor), dash_style, parent) + # chord labels + centerx = ptB[0]*unitFactor + (ptC[0]-ptB[0])*unitFactor/2 + centery = ptB[1]*unitFactor + (ptC[1]-ptB[1])*unitFactor/2 + line_angle = calc_angle_between_points(ptC, ptB) + ypos = centery+font_height+2 if line_angle<0 else centery-2 + text_style['fill'] = self.color_marker_chords + text_atts = {'style':str(inkex.Style(text_style)), + 'transform': 'rotate(%f)' % (line_angle) } + text = etree.SubElement(parent, 'text', text_atts) + scale_matrix = [[1, 0.0, centerx], [0.0, 1, ypos]] # needs cos,sin corrections + text.transform = Transform(scale_matrix) * text.transform + text.text = "%4.2f" % (chord_base) + if cut_dia >= 0.001: + centerx = ptA[0]*unitFactor + (ptD[0]-ptA[0])*unitFactor/2 + centery = ptA[1]*unitFactor + (ptD[1]-ptA[1])*unitFactor/2 + xpos = centerx - font_height*math.sin(math.radians(abs(line_angle))) + ypos = centery-2 if line_angle>0 else centery+font_height+2 + text = etree.SubElement(parent, 'text', text_atts) + scale_matrix = [[1, 0.0, centerx], [0.0, 1, ypos]] + text.transform = Transform(scale_matrix) * text.transform + text.text = "%4.2f" % (chord_cut) + # frustum lines + frustrum_repos = [[1, 0.0, 1], [0.0, 1, math.sqrt(pow(shortradius*unitFactor,2)-pow(cut_dia*unitFactor/2,2))]] + text_style['fill'] = self.color_marker_base + line_style['stroke'] = self.color_marker_base + arrow_style['stroke'] = self.color_marker_base + line_attribs = {'style': str(inkex.Style(line_style)), + 'd': 'M %f,%f L %f,%f %f,%f %f,%f z' %(-cut_dia/2*unitFactor,0, cut_dia/2*unitFactor,0, base_dia/2*unitFactor,cone_height*unitFactor, -base_dia/2*unitFactor,cone_height*unitFactor)} + line = etree.SubElement(parent, inkex.addNS('path','svg'), line_attribs) + line.transform = Transform(frustrum_repos) * line.transform + # ticks + line_attribs = {'style': str(inkex.Style(line_style)), + 'd': 'M %f,%f L %f,%f' %(-(5+cut_dia/2*unitFactor),0, -(5+base_dia/2*unitFactor),0 )} + line = etree.SubElement(parent, inkex.addNS('path','svg'), line_attribs) + line.transform = Transform(frustrum_repos) * line.transform + # + line = self.drawDimension((-base_dia/2*unitFactor,0), (-base_dia/2*unitFactor,cone_height*unitFactor), arrow_style, parent) + line.transform = Transform(frustrum_repos) * line.transform + # frustum text + text_atts = {'style':str(inkex.Style(text_style)), + 'x': str(-(18+base_dia/2*unitFactor)), + 'y': str(cone_height*unitFactor/2) } + text = etree.SubElement(parent, 'text', text_atts) + text.text = "%4.3f" %(cone_height) + text.transform = Transform(frustrum_repos) * text.transform + if cut_dia >= 0.001: + text_atts = {'style':str(inkex.Style(text_style)), + 'x': '0', + 'y': str(font_height) } + text = etree.SubElement(parent, 'text', text_atts) + text.text = "%4.3f" %(cut_dia) + text.transform = Transform(frustrum_repos) * text.transform + text_atts = {'style':str(inkex.Style(text_style)), + 'x': '0', + 'y': str(cone_height*unitFactor+font_height) } + text = etree.SubElement(parent, 'text', text_atts) + text.text = "%4.3f" %(base_dia) + text.transform = Transform(frustrum_repos) * text.transform + +if __name__ == '__main__': + SheetMetalConus().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/sheriff_star/sheriff_star.inx b/extensions/fablabchemnitz/sheriff_star/sheriff_star.inx new file mode 100644 index 00000000..b210a26b --- /dev/null +++ b/extensions/fablabchemnitz/sheriff_star/sheriff_star.inx @@ -0,0 +1,33 @@ + + + Sheriff Star + fablabchemnitz.de.sheriff_star + + + 6 + 10 + 58 + false + + + + + + + path + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/sheriff_star/sheriff_star.py b/extensions/fablabchemnitz/sheriff_star/sheriff_star.py new file mode 100644 index 00000000..d21aab71 --- /dev/null +++ b/extensions/fablabchemnitz/sheriff_star/sheriff_star.py @@ -0,0 +1,148 @@ +#!/usr/bin/env python3 +""" +Sheriff Star +Create n-pointed sheriff star. +""" +import inkex +from math import * +from lxml import etree + +def addPathCommand(a, cmd): + for x in cmd: + a.append(str(x)) + +class SheriffStar(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument('--tab') + pars.add_argument('--points', type=int, default=5, help='Number of points (or sides)') + pars.add_argument('--star_tip_ratio', type=float, default=10, help='Star tip circle % (star tip circle radius as a percentage of the outer radius)') + pars.add_argument('--inner_ratio', type=float, default=58, help='Inner circle % (inner radius as a percentage of the outer radius)') + pars.add_argument('--show_inner_circle', type=inkex.Boolean, default=False, help='Show inner circle') + + def effect(self): + layer = self.svg.get_current_layer(); + + if len(self.svg.selected) == 0: + inkex.errormsg('Please select a circle or ellipse.') + exit() + + numValid = 0 + for id, obj in self.svg.selected.items(): + cx,cy, rx,ry = 0,0, 0,0 + style = '' + isValid = False + if obj.tag == inkex.addNS('circle','svg'): + isValid = True + cx = float(obj.get('cx')) + cy = float(obj.get('cy')) + rx = float(obj.get('r')) + ry = rx + elif obj.tag == inkex.addNS('ellipse', 'svg'): + isValid = True + cx = float(obj.get('cx')) + cy = float(obj.get('cy')) + rx = float(obj.get('rx')) + ry = float(obj.get('ry')) + elif obj.tag == inkex.addNS('path', 'svg'): + if obj.get(inkex.addNS('type', 'sodipodi')) == 'arc': + isValid = True + cx = float(obj.get(inkex.addNS('cx', 'sodipodi'))) + cy = float(obj.get(inkex.addNS('cy', 'sodipodi'))) + rx = float(obj.get(inkex.addNS('rx', 'sodipodi'))) + ry = float(obj.get(inkex.addNS('ry', 'sodipodi'))) + + if not isValid: + continue; + + numValid += 1 + style = obj.get('style') + transform = obj.get('transform') + isEllipse = False + if rx != ry: + isEllipse = True + + skip = 1 + sides = self.options.points + innerRatio = float(self.options.inner_ratio) / 100.0 + starTipRatio = float(self.options.star_tip_ratio) / 100.0 + showInnerCircle = self.options.show_inner_circle + + if showInnerCircle: + if not isEllipse: + cin =etree.SubElement(layer, inkex.addNS('circle','svg')) + cin.set('r', str(rx * innerRatio)) + else: + cin =etree.SubElement(layer, inkex.addNS('ellipse','svg')) + cin.set('rx', str(rx * innerRatio)) + cin.set('ry', str(ry * innerRatio)) + cin.set('cx', str(cx)) + cin.set('cy', str(cy)) + cin.set('style', style) + if transform: + cin.set('transform', transform) + + tau = 2*pi + origin = -(tau / 4) + out_pts = [] + in_pts = [] + for i in range(sides): + # Outer points (on outer circle) + theta = (i * (tau / sides)) + px = cx + rx * cos(origin + theta) + py = cy + ry * sin(origin + theta) + out_pts.append([px, py]) + + # Inner points (on inner circle) + theta = ((i + (skip / 2.0)) * (tau / sides)) + px = cx + rx * innerRatio * cos(origin + theta) + py = cy + ry * innerRatio * sin(origin + theta) + in_pts.append([px, py]) + + # Add circles at each star tip. + for pt in out_pts: + cin =etree.SubElement(layer, inkex.addNS('circle','svg')) + cin.set('r', str(rx * starTipRatio)) + cin.set('cx', str(pt[0])) + cin.set('cy', str(pt[1])) + cin.set('style', style) + if transform: + cin.set('transform', transform) + + pts = [] + pt_done = {} + for i in range(sides): + if i in pt_done: + continue; + + p1 = out_pts[i] + addPathCommand(pts, ['M', p1[0], p1[1]]) + + pt_done[i] = True + start_index = i + curr = start_index + next = (curr + skip) % sides + while next != start_index: + p = out_pts[next] + pt_done[next] = True + + addPathCommand(pts, ['L', in_pts[curr][0], in_pts[curr][1]]) + addPathCommand(pts, ['L', p[0], p[1]]) + + curr = next + next = (curr + skip) % sides + addPathCommand(pts, ['L', in_pts[curr][0], in_pts[curr][1]]) + addPathCommand(pts, ['z']) + + # Create star polygon as a single path. + l1 =etree.SubElement(layer, inkex.addNS('path','svg')) + l1.set('style', style) + if transform: + l1.set('transform', transform) + l1.set('d', ' '.join(pts)) + + if numValid == 0: + inkex.errormsg('Selection must contain a circle or ellipse.') + +if __name__ == '__main__': + SheriffStar().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/shirt_waist/sewing_patterns.py b/extensions/fablabchemnitz/shirt_waist/sewing_patterns.py new file mode 100644 index 00000000..068346e6 --- /dev/null +++ b/extensions/fablabchemnitz/shirt_waist/sewing_patterns.py @@ -0,0 +1,820 @@ +#!/usr/bin/env python3 +# +# sewing_patterns.py +# Inkscape extension-Effects-Sewing Patterns +# Copyright (C) 2010, 2011, 2012 Susan Spencer, Steve Conklin < www.taumeta.org > +# +# This program is free software:you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. Attribution must be given in +# all derived works. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see < http://www.gnu.org/licenses/ > + +import subprocess, math, inkex, gettext +from lxml import etree + +def debug(errmsg, file = 'bell'): + #audio files directory: /usr/share/sounds/ubuntu/stereo + sounds(file) + inkex.errormsg(gettext.gettext(errmsg)) + +def sounds(file): + subprocess.call(['/usr/bin/canberra-gtk-play', '--id', file ]) + +#--- +class Point(): + '''Python object class to create variables that represent a named Cartesian point. + Accepts id, x, y. Returns object with .id, .x, .y attributes. + Example: a5 = Point('a5', 10.0, 15.32) returns variable a5 where a5.id = 'a5', a5.x = 10.0, a5.y = 15.32xt + If called with no parameters the defaults are id = '', x = 0, y = 0 + The python object's id attribute enables it to be represented on the canvas as an svg object with the same id. + ''' + def __init__(self, id = '', x = 0.0, y = 0.0): #if no parameters are passed in then the default values id = '', x = 0, y = 0 are used + self.id = id + self.x = x + self.y = y + self.y = y + +def patternPointXY(parent, id, x, y): + '''Accepts parent, id, x, y. Returns object of class Point. Calls addPoint() & addText() to create a pattern point on canvas.''' + # create python variable + pnt = Point(id, x, y) + # create svg circle red 5px radius + addCircle(parent, id, x, y, radius = 5, fill = 'red', stroke = 'red', stroke_width = '1', reference = 'true') + #draw label 8px right and 8px above circle + addText(parent, id + '_text', x + 8, y-8, id, fontsize = '30', textalign = 'left', textanchor = 'left', reference = 'true') #the id is used for two things here: the text object's id and the text object's content. + return pnt # return python variable for use in remainder of pattern + +def patternPoint(parent, id, pnt): + """Wrapper for patternPointXY. Accepts a Point object instead of X & Y values.""" + return patternPointXY(parent, id, pnt.x, pnt.y) + +def controlPointXY(parent, id, x, y): + '''Accepts parent, id, x, y. Returns object of class Point. Calls addPoint() & addText() to create a pattern point with label on canvas.''' + # create python variable + pnt = Point(id, x, y) + # create unfilled grey circle 5px radius + addCircle(parent, id, x, y, radius = 5, fill = 'none', stroke = 'gray', stroke_width = '1', reference = 'true') + #draw label 8px right and 8px above circle + addText(parent, id + '_text', x + 8, y-8, id, fontsize = '30', textalign = 'left', textanchor = 'left', reference = 'true') #the id is used twice: the text object id and the text object content. + return pnt # return python variable for use in remainder of pattern + +def controlPoint(parent, id, pnt): + """Wrapper for controlPointXY. Accepts a Point object instead of X & Y values.""" + return controlPointXY(parent, id, pnt.x, pnt.y) + +def pointList( * args): + """Accepts list of args. Returns array of args.""" + list = [] + for arg in args: + list.append(arg) + return list + +#---tests for position--- +def isRight(pnt1, pnt2): + '''returns 1 if pnt2 is to the right of pnt1''' + right = 0 + if pnt2.x > pnt1.x: + right = 1 + return right + +def isLeft(pnt1, pnt2): + '''returns 1 if pnt2 is to the left of pnt1''' + left = 0 + if pnt2.x < pnt1.x: + left = 1 + return left + +def isAbove(pnt1, pnt2): + '''returns 1 if pnt2 is above pnt1''' + up = 0 + if pnt2.y < pnt1.y: + up = 1 + return up + +def isBelow(pnt1, pnt2): + '''returns 1 if pnt2 is below pnt1''' + down = 0 + if pnt2.y > pnt1.y: + down = 1 + return down + +def lowest(pnts): + """Accepts array pnts[]. Returns lowest point in array.""" + low = Point('', pnts[0].x, pnts[0].y) + for item in pnts: + if isBelow(low, item): #if item is below current low + updatePoint('', low, item) + return low + +def highest(pnts): + """Accepts array pnts[]. Returns highest point in array.""" + high = Point('', pnts[0].x, pnts[0].y) + for item in pnts: + if isAbove(high, item): #if item is above current high + updatePoint(high, item) + return high + +def leftmost(pnts): + """Accepts array pnts[]. Returns leftmost point in array.""" + left = Point('', pnts[0].x, pnts[0].y) + for item in pnts: + if isLeft(left, item): + updatePoint(left, item) + return left + +def rightmost(pnts): + """Accepts array pnts[]. Returns rightmost point in array.""" + right = Point('', pnts[0].x, pnts[0].y) + for item in pnts: + if isRight(right, item): + updatePoint(right, item) + return right + +#---functions to calculate points. These functions do not create SVG objects--- + +def updatePoint(p1, p2): + '''Accepts p1 and p2 of class Point. Updates p1 with x & y values from p2''' + p1.x = p2.x + p1.y = p2.y + return + +def right(p1, n): + '''Accepts point p1 and float n. Returns (x,y) to the right of p1 at (p1.x + n, p1.y)''' + return Point('', p1.x + n, p1.y) + +def left(p1, n): + '''Accepts point p1 and float n. Returns p2 to the left of p1 at (p1.x-n, p1.y)''' + return Point('', p1.x-n, p1.y) + +def up(p1, n): + '''Accepts point p1 and float n. Returns p2 above p1 at (p1.x, p1.y-n)''' + return Point('', p1.x, p1.y-n) + +def down(p1, n): + '''Accepts point p1 and float n. Returns p2 below p1 at (p1.x, p1.y + n)''' + return Point('', p1.x, p1.y + n) + +def symmetric(p1, p2, type = 'vertical'): + """ + Accepts p1 and p2 of class Point, and optional type is either 'vertical' or 'horizontal with default 'vertical'. + Returns p3 of class Point as "mirror image" of p1 relative to p2 + If type == 'vertical': pnt is on opposite side of vertical line x = p2.x from p1 + If type == 'horizontal': pnt is on opposite side of horizontal line y = p2.y from p1 + """ + p3 = Point() + dx = p2.x - p1.x + dy = p2.y - p1.y + if (type == 'vertical'): + p3.x = p2.x + dx + p3.y = p1.y + elif (type == 'horizontal'): + p3.x = p1.x + p3.y = p2.y + dy + return p3 + +def polar(p1, length, angle): + ''' + Adapted from http://www.teacherschoice.com.au/maths_library/coordinates/polar_-_rectangular_conversion.htm + Accepts p1 as type Point, length as float, angle as float. angle is in radians + Returns p2 as type Point, calculated at length and angle from p1, + Angles start at position 3:00 and move clockwise due to y increasing downwards on Cairo Canvas + ''' + id = '' + r = length + x = p1.x + (r * math.cos(angle)) + y = p1.y + (r * math.sin(angle)) + p2 = Point(id, x, y) + return p2 + +def midPoint(p1, p2, n = 0.5): + '''Accepts points p1 & p2, and n where 0 < n < 1. Returns point p3 as midpoint b/w p1 & p2''' + p3 = Point('', (p1.x + p2.x) * n, (p1.y + p2.y) * n) + return p3 + + +#---measurements +def distance(p1, p2): + '''Accepts two points p1 & p2. Returns the distance between p1 & p2.''' + return ( ((p2.x-p1.x) ** 2) + ((p2.y-p1.y) ** 2) ) ** 0.5 + +def angleOfDegree(degree): + '''Accepts degree. Returns radians.''' + return degree * math.pi/180.0 + +def angleOfLine(p1, p2): + """ Accepts points p1 & p2. Returns the angle of the vector between them. Uses atan2.""" + return math.atan2(p2.y-p1.y, p2.x-p1.x) + +def angleOfVector(p1, v, p2): + '''Accepts three points o1, v, and p2. Returns radians of the angle formed between the three points.''' + return abs(angleOfLine(v, p1)-angleOfLine(v, p2)) + +def slopeOfLine(p1, p2): + """ Accepts two point objects and returns the slope """ + if ((p2.x-p1.x) != 0): + m = (p2.y-p1.y)/(p2.x-p1.x) + else: + #TODO: better error handling here + debug('Vertical Line in slopeOfLine') + m = None + return m + +def slopeOfAngle(radians): + ''' + Accepts angle (radians) + Returns the slope as tangent radians + ''' + #get tangent of radians + return math.tan(radians) + +#---intersections & extensions + +def extendLine(p1, p2, length, rotation=0): + """ + Accepts two directed points of a line, and a length to extend the line + Finds point along line at length from p2 in direction p1->p2 + """ + return onLineAtLength(p2, p1, -length) + +def onLineAtLength(p1, p2, length, rotation=0): + """ + Accepts points p1 and p2, distance, and an optional rotation angle. + Returns coordinate pair on the line at length measured from p1 towards p2 + If length is negative, will return a coordinate pair at length measured + from p1 in opposite direction from p2. + The result is optionally rotated about the first point by the rotation angle in degrees + """ + lineangle = angleOfLine(p1, p2) + angle = lineangle + rotation * (math.pi/180) + x = (length * math.cos(angle)) + p1.x + y = (length * math.sin(angle)) + p1.y + return Point('', x, y) + +def onLineAtX(p1, p2, x): + #on line p1-p2, given x find y + if (p1.x == p2.x):# vertical line + raise ValueError('Points form a vertical line, infinite answers possible') + return None + else: + m = (p2.y - p1.y)/(p2.x - p1.x) + b = p2.y - (m * p2.x) + return Point('', x, (m * x) + b) + +def onLineAtY(p1, p2, y): + #on line p1-p2, find x given y + if (p1.y == p2.y): #if horizontal line + raise ValueError('Points form a horizontal line, infinite answers possible') + return None + elif (p1.x == p2.x): # if vertical line + return Point('', p1.x, y) + else: + m = (p1.y - p2.y)/(p1.x - p2.x) + b = p2.y - (m * p2.x) + return Point('', (y - b)/m, y) + +def intersectLines(p1, p2, p3, p4): + """ + Find intersection between two lines. Accepts p1, p2, p3, p4 as class Point. Returns p5 as class Point + Intersection does not have to be within the supplied line segments + """ + x, y = 0.0, 0.0 + if (p1.x == p2.x): #if 1st line vertical, use slope of 2nd line + x = p1.x + m2 = slopeOfLine(p3, p4) + b2 = p3.y-m2 * p3.x + y = m2 * x + b2 + elif (p3.x == p4.x): #if 2nd line vertical, use slope of 1st line + x = p3.x + m1 = slopeOfLine(p1, p2) + b1 = p1.y-m1 * p1.x + y = m1 * x + b1 + else: #otherwise use ratio of difference between points + m1 = (p2.y-p1.y)/(p2.x-p1.x) + m2 = (p4.y-p3.y)/(p4.x-p3.x) + b1 = p1.y-m1 * p1.x + b2 = p3.y-m2 * p3.x + #if (abs(b1-b2) < 0.01) and (m1 == m2): + #x = p1.x + #else: + #x = (b2-b1)/(m1-m2) + if (m1 == m2): + #TODO: better error handling here + debug(' ** ** * Parallel lines in intersectLines ** ** * ') + else: + x = (b2-b1)/(m1-m2) + y = (m1 * x) + b1 # arbitrary choice, could have used m2 & b2 + p5 = Point("", x, y) + return p5 + +def intersectLineRay(P1, P2, R1, angle): + ''' + Accepts two points defining a line, and a point and angle defining a ray. + Returns point where they intersect. + ''' + #define a line R1-R2 by finding point R2 along ray 25 pixels (arbitary) from R1 + R2 = polar(R1, 1 * 25, angle) + pnt = intersectLines(P1, P2, R1, R2) + return pnt + +def onRayAtX(P, angle, x): + ''' + Accepts point P and angle of line. + Returns point along ray at x + ''' + #convert degrees to slope + m = slopeOfAngle(angle) + #solve for y + #(P.y - y)/(P.x - x) = m + y = P.y - m * (P.x - x) + return Point('', x, y) + +def onRayAtY(P, angle, y): + ''' + Accepts point P and angle of line. + Returns point along ray at y + ''' + #convert degrees to slope + m = slopeOfAngle(angle) + #solve for x + #(P.y - y)/(P.x - x) = m + x = P.x - (P.y - y)/m + return Point('', x, y) + +def intersectCircles(C1, r1, C2, r2): + """ + Accepts C1, r1, C2, r2 where C1 & C2 are center points of each circle, and r1 & r2 are the radius of each circle. + Returns an array of points of intersection. + """ + x0, y0 = C1.x, C1.y + x1, y1 = C2.x, C2.y + d = distance(C1, C2) # distance b/w circle centers + dx, dy = (x1-x0), (y1-y0) # negate y b/c canvas increases top to bottom + pnts = [] + if (d == 0): + #intersections = 0 + #TODO: better error handling here + debug('center of both circles are the same in intersectCircles()') + debug('C1 = ', C1.x, C1.y, 'radius1 = ', r1) + debug('C2 = ', C2.x, C2.y, 'radius1 = ', r2) + return + elif (d < abs(r1-r2)): + #intersections = 0 + #TODO: better error handling here + debug('one circle is within the other in intersectCircles()') + debug('d = ', d) + debug('r1 - r2 = ', (r1-r2)) + debug('d < abs(r1 - r2) ?', (d < abs(r1-r2))) + debug('C1 = ', C1.x, C1.y, 'radius1 = ', r1) + debug('C2 = ', C2.x, C2.y, 'radius1 = ', r2) + return + elif (d > (r1 + r2)): + #intersections = 0 + #TODO: better error handling here + debug('circles do not intersect in intersectCircles()') + debug('d = ', d) + debug('r1 + r2 = ', (r1 + r2)) + debug('d > abs(r1 + r2) ?', (d > abs(r1 + r2))) + debug('C1 = ', C1.x, C1.y, 'radius1 = ', r1) + debug('C2 = ', C2.x, C2.y, 'radius1 = ', r2) + # TODO:possible kluge -check if this is acceptable using a small margin of error between r1 & r2 (0.5 * CM)?: + #r2 = d-r1 + return + else: + #intersections = 2 or intersections = 1 + a = ((r1 * r1)-(r2 * r2) + (d * d))/(2.0 * d) + x2 = x0 + (dx * a/d) + y2 = y0 + (dy * a/d) + h = math.sqrt((r1 * r1)-(a * a)) + rx = -dy * (h/d) + ry = dx * (h/d) + X1 = x2 + rx + Y1 = y2 + ry + X2 = x2-rx + Y2 = y2-ry + pnts.append(Point("", X1, Y1)) + pnts.append(Point("", X2, Y2)) + return pnts + +def onCircleAtX(C, r, x): + """ + Finds points on circle where p.x=x + Accepts C as an object of class Point or xy coords for the center of the circle, + r as the radius, and x to find the points on the circle + Returns an array P + Based on paulbourke.net/geometry/sphereline/sphere_line_intersection.py + """ + #print 'C =', C.x, C.y + #print 'r =', r + #print 'x =', x + P = [] + if abs(x - C.x) > r: + print('abs(x - C.x) > r ...', abs(x - C.x), ' > ', r) + print('x is outside radius of circle in intersections.onCircleAtX()') + else: + translated_x = x - C.x # center of translated circle is (0, 0) as translated_x is the difference b/w C.x & x + translated_y1 = abs(math.sqrt(r**2 - translated_x**2)) + translated_y2 = -(translated_y1) + y1 = translated_y1 + C.y # translate back to C.y + y2 = translated_y2 + C.y # translate back to C.y + P.append(Point('', x, y1)) + P.append(Point('', x, y2)) + return P + +def onCircleAtY(C, r, y): + """ + Finds points one or two points on circle where P.y=y + Accepts C of class Point or coords as circle center, r of type float as radius, and y of type float) + Returns an array P + Based on paulbourke.net/geometry/sphereline/sphere_line_intersection.py + """ + #print('C =', C.x, C.y) + #print('r =', r) + #print('x = ', y)) + P = [] + if abs(y - C.y) > r: + print('abs(y - C.y) > r ...', abs(y - C.y), ' > ', r) + print('y is outside radius in onCircleAtY() -- no intersection') + else: + translated_y = y - C.y + translated_x1 = abs(math.sqrt(r**2 - translated_y**2)) + translated_x2 = -translated_x1 + x1 = translated_x1 + C.x + x2 = translated_x2 + C.x + P.append(Point('', x1, y)) + P.append(Point('', x2, y)) + return P + +def intersectLineCircle(P1, P2, C, r): + """ + Finds intersection of a line segment and a circle. + Accepts circle center point object C, radius r, and two line point objects P1 & P2 + Returns an array P with up to two coordinate pairs as P.intersections P[0] & P[1] + Based on paulbourke.net/geometry/sphereline/sphere_line_intersection.py + """ + + #print('C =', C.x, C.y) + #print('P1 =', P1.x, P1.y) + #print('P2 =', P2.x, P2.y) + #print('r =', r, 'pts', ', ', r / CM, 'cm') + + p1, p2 = Point('', '', ''), Point('', '', '') + P = [] + + if P1.x == P2.x: #vertical line + if abs(P1.x - C.x) > r: + print('no intersections for vertical line P1', P1.name, P1.x, P1.y, ', P2', P2.name, P2.x, P2.y, ', and Circle', C.name, C.x, C.y, ', radius', r) + return None + else: + #print('Vertical line') + p1.x = P1.x + p2.x = P1.x + p1.y = C.y + sqrt(r**2 - (P1.x - C.x)**2) + p2.y = C.y - sqrt(r**2 - (P1.x - C.x)**2) + elif P1.y == P2.y: #horizontal line + if abs(P1.y-C.y) > r: + print('no intersections for horizontal line P1', P1.name, P1.x, P1.y, ', P2', P2.name, P2.x, P2.y, ', and Circle', C.name, C.x, C.y, ', radius', r) + return None + else: + #print('Horizontal line') + p1.y = P1.y + p2.y = P1.y + p1.x = C.x + sqrt(r**2 - (P1.y - C.y)**2) + p2.x = C.x - sqrt(r**2 - (P1.y - C.y)**2) + else: + a = (P2.x - P1.x)**2 + (P2.y - P1.y)**2 + b = 2.0 * ((P2.x - P1.x) * (P1.x - C.x)) + ((P2.y - P1.y) * (P1.y - C.y)) + c = C.x**2 + C.y**2 + P1.x**2 + P1.y**2 - (2.0 * (C.x * P1.x + C.y * P1.y)) - r**2 + i = b**2 - 4.0 * a * c + if i < 0.0: + print('no intersections b/w line', P1.name, P1.x, P1.y, '--', P2.name, P2.x, P2.y, 'and Circle', C.name, C.x, C.y, 'with radius', r) + return None + elif i == 0.0: + # one intersection + #print('one intersection') + mu = -b/(2.0 * a) + p1.x, p1.y = P1.x + mu * (P2.x - P1.x), P1.y + mu * (P2.y - P1.y) + elif i > 0.0: + # two intersections + #print('two intersections') + # first intersection + mu1 = (-b + math.sqrt(i)) / (2.0*a) + p1.x, p1.y = P1.x + mu1 * (P2.x - P1.x), P1.y + mu1 * (P2.y - P1.y) + # second intersection + mu2 = (-b - math.sqrt(i)) / (2.0*a) + p2.x, p2.y = P1.x + mu2 * (P2.x - P1.x), P1.y + mu2 * (P2.y - P1.y) + P.append(p1) + P.append(p2) + return P + +def intersectChordCircle(C, r, P, chord_length): + ''' Accepts center of circle, radius of circle, a point on the circle, and chord length. + Returns an array of two points on the circle at chord_length distance away from original point''' + d = chord_length + # point on circle given chordlength & starting point = 2 * asin(d/2r) + d_div_2r = d/(2.0 * r) + angle = 2 * asin(d_div_2r) + pnts = [] + pnts.append(polar(C, r, angle)) + pnts.append(polar(C, r, - angle)) + return pnts + +def intersectLineCurve(P1, P2, curve, n = 100): + ''' + Accepts two points of a line P1 & P2, and an array of connected bezier curves [P11, C11, C12, P12, C21, C22, P22, C31, C32, P32, ...] + Returns an array points_found[] of point objects where line intersected with the curve, and tangents_found[] of tangent angle at that point + ''' + # get polar equation for line for P1-P2 + # point furthest away from 1st point in curve[] is the fixed point & sets the direction of the angle towards the curve + #if distance(P1, curve[0]) > = distance(P2, curve[0] ): + # fixed_pnt = P1 + # angle = angleOfLine(P1, P2) + #else: + # fixed_pnt = P2 + # angle = angleOfLine(P2, P1) + #debug('intersectLineCurve...') + #debug('....P1 = ' + P1.id + ' ' + str(P1.x) + ', ' + str(P1.y)) + #debug('....P2 = ' + P2.id + ' ' + str(P2.x) + ', ' + str(P2.y)) + #for pnt in curve: + #debug( '....curve = ' + pnt.id + ' ' + str(pnt.x) + ', ' + str(pnt.y)) + fixed_pnt = P1 + angle = angleOfLine(P1, P2) + intersections = 0 + points_found = [] + tangents_found = [] + pnt = Point() + j = 0 + while j <= len(curve) -4: # for each bezier curve in curveArray + intersection_estimate = intersectLines(P1, P2, curve[j], curve[j + 3]) # is there an intersection? + if intersection_estimate != None or intersection_estimate != '': + interpolatedPoints = interpolateCurve(curve[j], curve[j + 1], curve[j + 2], curve[j + 3], n) #interpolate this bezier curve, n = 100 + k = 0 + while k < len(interpolatedPoints)-1: + length = distance(fixed_pnt, interpolatedPoints[k]) + pnt_on_line = polar(fixed_pnt, length, angle) + range = distance(interpolatedPoints[k], interpolatedPoints[k + 1]) # TODO:improve margin of error + length = distance(pnt_on_line, interpolatedPoints[k]) + #debug(str(k) + 'pntOnCurve = ' + \ + # str(interpolatedPoints[k].x) + ', ' + str(interpolatedPoints[k].y) + \ + # 'intersectLineAtLength = ' + str(pnt_on_line.x) + ', ' + str( pnt_on_line.y)\ + # + 'length = ' + str(length) + 'range = ' + str(range)) + if ( length <= range): + #debug('its close enough!') + if k > 1: + if (interpolatedPoints[k-1] not in points_found) and (interpolatedPoints[k-2] not in points_found): + points_found.append(interpolatedPoints[k]) + tangents_found.append(angleOfLine(interpolatedPoints[k-1], interpolatedPoints[k + 1])) + intersections += 1 + elif k == 1: + if (curve[0] not in intersections): + points_found.append(interpolatedPoints[1]) + tangents_found.append(angleOfLine(curve[0], interpolatedPoints[2])) + intersections += 1 + else: + intersections.append(curve[0]) + tangents_found.append(angleOfLine(curve[0], curve[1])) + k += 1 + j += 3 # skip j up to P3 of the current curve to be used as P0 start of next curve + if intersections == 0: + #TODO: better error handling here + debug('no intersections found in intersectLineCurve(' + P1.id + ', ' + P2.id + ' and curve') + #return points_found, tangents_found + return points_found + +def interpolateCurve(P0, C1, C2, P1, t = 100): + ''' + Accepts curve points P0, C1, C2, P1 & number of interpolations t + Returns array of interpolated points of class Point + Adapted from http://www.planetclegg.com/projects/WarpingTextToSplines.htm + ''' + # calculate coefficients for two knot points P0 & P1 ; C1 & C2 are the controlpoints. + # x coefficients + A = P1.x-(3 * C2.x) + (3 * C1.x)-P0.x + B = (3 * C2.x)-(6 * C1.x) + (3 * P0.x) + C = (3 * C1.x)-(3 * P0.x) + D = P0.x + # y coefficients + E = P1.y-(3 * C2.y) + (3 * C1.y)-P0.y + F = (3 * C2.y)-(6 * C1.y) + (3 * P0.y) + G = (3 * C1.y)-(3 * P0.y) + H = P0.y + # calculate interpolated points + interpolatedPoints = [] + maxPoint = float(t) + i = 0 + while ( i <= t): + j = i/maxPoint # j can't be an integer, i/t is an integer..always 0. + x = A * (j ** 3) + B * (j ** 2) + C * j + D + y = E * (j ** 3) + F * (j ** 2) + G * j + H + interpolatedPoints.append(Point('', x, y)) + i += 1 + return interpolatedPoints + +#---rotations +def slashAndSpread(pivot, angle, *args): + """ + Accepts pivot point, angle of rotation, and the points to be rotated. + Accepts positive & negative angles. + """ + if (angle == 0.0): + print('Angle = 0 -- Slash and Spread not possible') + else: + list = [] + for arg in args: + list.append(arg) + i = 0 + for pnt in list: + length = distance(pivot, pnt) + rotated_pnt = polar(pivot, length, angleOfLine(pivot, pnt) + angle) # if angle > 0 spread clockwise. if angle < 0 spread counterclockwise + updatePoint(pnt, rotated_pnt) + return + +#---darts +def foldDart(dart, inside_pnt, seam_allowance): + ''' + Accepts dart, and the nearest point in the direction dart will be folded + Returns dart.m, dart.oc, dart.ic, dart.angle + dart.m = middle dart leg at seamline (to be included in seamline path) + dart.oc = inside dart leg at cuttingline (to be included in dartline path) + dart.oc = outside dart leg at cuttingline (to be included in dartline path) + ''' + mid_pnt = midPoint(dart.i, dart.o) + dart_length = distance(dart, dart.i) + i_angle = angleOfLine(dart, dart.i) + c_angle = angleOfLine(dart, inside_pnt) + dart_angle = abs(angleOfVector(dart.i, dart, dart.o)) + dart_half_angle = dart_angle/2.0 + + #determine which direction the dart will be folded + #if ((dart.i.x > dart.x) and (dart.i.y > dart.y)) or ((dart.i.x < dart.x) and (dart.i.y > dart.y)): + #x & y vectors not the same sign + #dart_half_angle = -dart_half_angle + if i_angle > c_angle: + dart_half_angle = -dart_half_angle + elif dart_angle < c_angle: + #dart straddles 0 angle + dart_half_angle = -dart_half_angle + + fold_angle = i_angle + dart_half_angle + fold_pnt = intersectLineRay(dart.i, inside_pnt, dart, fold_angle) + dart.m = onLineAtLength(dart, mid_pnt, distance(dart, fold_pnt)) #dart midpoint at seamline + dart.oc = polar(dart, distance(dart, dart.o) + seam_allowance, angleOfLine(dart, dart.o)) #dart outside leg at cuttingline + dart.ic = extendLine(dart, dart.i, seam_allowance) #dart inside leg at cuttingline + #create or update dart.angles + dart.angle = angleOfVector(dart.i, dart, dart.o) + return + +#---base, pattern & patternpiece groups +def base(parent, id): + '''Create a base group to contain all patterns, parent should be the document''' + newBase = addGroup(parent, id) + newBase.set(inkex.addNS('label', 'inkscape'), id) + newBase.set(inkex.addNS('groupmode', 'inkscape'), 'layer') + return newBase + +def pattern(parent, id): + '''Create a pattern group to hold a single pattern, parent should be the base group''' + newPattern = addGroup(parent, id) + newPattern.set(inkex.addNS('label', 'inkscape'), id) + newPattern.set(inkex.addNS('groupmode', 'inkscape'), 'layer') + return newPattern + +def patternPiece(parent, id, name, fabric = 2, interfacing = 0, lining = 0): + '''Create a pattern piece group to hold a single pattern piece, parent should be a pattern group''' + newPatternPiece = addGroup(parent, id) + newPatternPiece.set(inkex.addNS('label', 'inkscape'), name) + newPatternPiece.set(inkex.addNS('groupmode', 'inkscape'), 'layer') + return newPatternPiece + +#---svg + +def addCircle(parent, id, x, y, radius = 5, fill = 'red', stroke = 'red', stroke_width = '1', reference = 'false'): + '''create & write a circle to canvas & set it's attributes''' + circ = etree.SubElement(parent, inkex.addNS('circle', 'svg')) + circ.set('id', id) + circ.set('cx', str(x)) + circ.set('cy', str(y)) + circ.set('r', str(radius)) + circ.set('fill', fill) + circ.set('stroke', stroke) + circ.set('stroke-width', stroke_width) + if reference == 'true': + circ.attrib['reference'] = 'true' + return + +def addSquare(parent, id, w, h, x, y, reference='false'): + # create & write a square element, set its attributes + square = etree.SubElement(parent, inkex.addNS('rect', 'svg')) + square.set('id', id) + square.set('width', str(w)) + square.set('height', str(h)) + square.set('x', str(x)) + square.set('y', str(y)) + square.set('stroke', 'none') + square.set('fill', '#000000') + square.set('stroke-width', '1') + if (reference == 'true'): + square.attrib['reference'] = 'true' + return + +def addText(parent, id, x, y, text, fontsize = '12', textalign = 'left', textanchor = 'left', reference = 'false'): + '''Create a text element, set its attributes, then write to canvas. + The text element is different than other elements -- > Set attributes first then write to canvas using append method. + There is no etree.SubElement() method for creating a text element & placing it into the document in one step. + Use inkex's etree.Element() method to create an unattached text svg object, + then use a document object's append() method to place it on the document canvas''' + #create a text element with inkex's Element() + txt = etree.Element(inkex.addNS('text', 'svg')) + #set attributes of the text element + txt.set('id', id) + txt.set('x', str(x)) + txt.set('y', str(y)) + txt.text = text + style = {'text-align':textalign, 'text-anchor':textanchor, 'font-size':fontsize} + txt.set('style', str(inkex.Style(style))) + if reference == 'true': + txt.attrib['reference'] = 'true' + #txt.setAttribute('reference', 'true') #alternative syntax + #add to canvas in the parent group + parent.append(txt) + return + +def addLayer(parent, id): + '''Create & write an inkscape group-layer to canvas''' + new_layer = etree.SubElement(parent, 'g') + new_layer.set('id', id) + new_layer.set(inkex.addNS('groupmode', 'inkscape'), 'layer') + new_layer.set(inkex.addNS('label', 'inkscape'), '%s layer' % (id)) + return new_layer + +def addGroup(parent, id): + '''Create & write an svg group to canvas''' + new_layer = etree.SubElement(parent, 'g') + new_layer.set('id', id) + return new_layer + +def addPath(parent, id, path_str, path_type): + '''Accepts parent, id, path string, path type. Creates attribute dictionary. Creates & writes path.''' + reference = 'false' + if path_type == 'seamline': + path_style = {'stroke':'green', 'stroke-width':'4', 'fill':'none', 'opacity':'1', 'stroke-dasharray':'15, 5', 'stroke-dashoffset':'0'} + elif path_type == 'cuttingline': + path_style = {'stroke':'green', 'stroke-width':'4', 'fill':'none', 'opacity':'1'} + elif path_type == 'gridline': + path_style = {'stroke':'gray', 'stroke-width':'4', 'fill':'none', 'opacity':'1', 'stroke-dasharray':'6, 6', 'stroke-dashoffset':'0'} + reference = 'true' + elif path_type == 'dartline': + path_style = {'stroke':'gray', 'stroke-width':'4', 'fill':'none', 'opacity':'1'} + elif path_type == 'grainline': + path_style = {'stroke':'DimGray', 'stroke-width':'3', 'fill':'none', 'opacity':'1', \ + 'marker-start':'url(#ArrowStart)', 'marker-end':'url(#ArrowEnd)'} + elif path_type == 'slashline': + path_style = {'stroke':'green', 'stroke-width':'4', 'fill':'none', 'opacity':'1'} + svg_path = etree.SubElement(parent, inkex.addNS('path', 'svg')) + svg_path.set('id', id) + svg_path.set('d', path_str) + svg_path.set('style', str(inkex.Style(path_style))) + if reference == 'true': + svg_path.attrib['reference'] = 'true' + return svg_path + +def formatPath( * args): + """ + Accepts a series of pseudo svg path arguments 'M', 'L', 'C' , and point objects. + Returns path_string which is a string formatted for use as the 'd' path attribute in an svg object. + """ + tokens = [] # initialize an empty array + # put all the parameters in * args into the array + for arg in args: + tokens.append(arg) + com = ', ' + path_string = '' + i = 0 + while (i < len(tokens)): + cmd = tokens[i] + if (cmd == 'M') or (cmd == 'L'): + path_string += " %s %g %g" % (cmd, tokens[i + 1].x, tokens[i + 1].y) + i = i + 2 + elif (cmd == 'C'): + path_string += " %s %g %g %g %g %g %g" % (cmd, tokens[i + 1].x, \ + tokens[i + 1].y, tokens[i + 2].x, tokens[i + 2].y, tokens[i + 3].x, tokens[i + 3].y) + i = i + 4 + return path_string + +def addDefs(doc): + '''Add defs group with markers to the document''' + defs = etree.SubElement(doc, inkex.addNS('defs', 'svg')) + #add start arrow + marker = etree.SubElement(defs, 'marker', {'id':'ArrowStart', 'orient':'auto', 'refX':'0.0', 'refY':'0.0', 'style':'overflow:visible'}) + etree.SubElement(marker, 'path', {'d':'M 0, 0 L 0, 5 L -20, 0 L 0, -5 z', 'style':'fill:DimGray; stroke:DimGray; stroke-width:0.5'}) + #add end arrow + marker = etree.SubElement(defs, 'marker', {'id':'ArrowEnd', 'orient':'auto', 'refX':'0.0', 'refY':'0.0', 'style':'overflow:visible'}) + etree.SubElement(marker, 'path', {'d':'M 0, 0 L 0, 5 L 20, 0 L 0, -5 z', 'style':'fill:DimGray; stroke:DimGray; stroke-width:0.5'}) \ No newline at end of file diff --git a/extensions/fablabchemnitz/shirt_waist/shirt_waist.inx b/extensions/fablabchemnitz/shirt_waist/shirt_waist.inx new file mode 100644 index 00000000..ef766036 --- /dev/null +++ b/extensions/fablabchemnitz/shirt_waist/shirt_waist.inx @@ -0,0 +1,33 @@ + + + Shirt Waist (Sara May Allington) + fablabchemnitz.de.shirt_waist + + + + + 15.0 + 15.5 + 13.5 + 39.0 + 25.0 + 15.0 + 13.5 + 7.75 + 10.75 + 20.00 + 9.50 + 12.50 + 8.00 + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/shirt_waist/shirt_waist.py b/extensions/fablabchemnitz/shirt_waist/shirt_waist.py new file mode 100644 index 00000000..37944a8c --- /dev/null +++ b/extensions/fablabchemnitz/shirt_waist/shirt_waist.py @@ -0,0 +1,459 @@ +#!/usr/bin/env python3 +# +# shirt_waist_allington.py +# Inkscape extension-Effects-Sewing Patterns-Shirt Waist Allington +# Copyright (C) 2010, 2011, 2012 Susan Spencer, Steve Conklin + +''' +Licensing paragraph: + +1. CODE LICENSE: GPL 2.0+ +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +2. PATTERN LICENSE: CC BY-NC 3.0 +The output of this code is a pattern and is considered a +visual artwork. The pattern is licensed under +Attribution-NonCommercial 3.0 (CC BY-NC 3.0) + +Items made from the pattern may be sold; +the pattern may not be sold. + +End of Licensing paragraph. +''' + +import math, inkex +from sewing_patterns import * + +class ShirtWaist(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument('--m_unit', default = 'Inches', help = 'Centimeters or Inches?') + pars.add_argument('--m_front_waist_length', type = float, default = '15.0', help = 'Front Waist Length') + pars.add_argument('--m_back_waist_length', type = float, default = '15.5', help = 'Back Waist Length') + pars.add_argument('--m_neck_circumference', type = float, default = '13.5', help = 'Neck Circumference') + pars.add_argument('--m_bust_circumference', type = float, default = '39.0', help = 'Bust Circumference') + pars.add_argument('--m_waist_circumference', type = float, default = '25.0', help = 'Waist Circumference') + pars.add_argument('--m_armscye_circumference', type = float, default = '15.0', help = 'Armscye circumference') + pars.add_argument('--m_across_back', type = float, default = '13.5', help = 'Across Back') + pars.add_argument('--m_shoulder', type = float, default = '6.5', help = 'Shoulder') + pars.add_argument('--m_side', type = float, default = '7.75', help = 'Side') + pars.add_argument('--m_upper_front_height', type = float, default = '10.75', help = 'Upper Front Height') + pars.add_argument('--m_overarm_length', type = float, default = '20.00', help = 'Overarm Length') + pars.add_argument('--m_elbow_height', type = float, default = '9.50', help = 'Elbow Height - from wrist to elbow') + pars.add_argument('--m_elbow_circumference', type = float, default = '12.50', help = 'Elbow Circumference - arm bent') + pars.add_argument('--m_hand_circumference', type = float, default = '8.00', help = 'Hand Circumference') + + def effect(self): + + def printPoint(pnt): + debug(' %s = %f, %f')%pnt.id, pnt.x, pnt.y + + INCH_to_PX = 96.0 #inkscape 1.0 uses 96 pixels per 1 inch + CM_to_INCH = 1/2.54 + CM_to_PX = CM_to_INCH*INCH_to_PX + CM = CM_to_PX # CM - shorthand when using centimeters + IN = INCH_to_PX # IN - shorthand when using inches + + #all measurements must be converted to px + munit = self.options.m_unit + if munit == 'Centimeters': + MEASUREMENT_CONVERSION = CM + else: + MEASUREMENT_CONVERSION = IN + + #convert measurements + front_waist_length = self.options.m_front_waist_length * MEASUREMENT_CONVERSION + neck_circumference = self.options.m_neck_circumference * MEASUREMENT_CONVERSION + bust_circumference = self.options.m_bust_circumference * MEASUREMENT_CONVERSION + waist_circumference = self.options.m_waist_circumference * MEASUREMENT_CONVERSION + armscye_circumference = self.options.m_armscye_circumference * MEASUREMENT_CONVERSION + across_back = self.options.m_across_back * MEASUREMENT_CONVERSION + shoulder = self.options.m_shoulder * MEASUREMENT_CONVERSION + side = self.options.m_side * MEASUREMENT_CONVERSION + upper_front_height = self.options.m_upper_front_height * MEASUREMENT_CONVERSION + overarm_length = self.options.m_overarm_length * MEASUREMENT_CONVERSION + elbow_height = self.options.m_elbow_height * MEASUREMENT_CONVERSION + elbow_circumference = self.options.m_elbow_circumference * MEASUREMENT_CONVERSION + hand_circumference = self.options.m_hand_circumference * MEASUREMENT_CONVERSION + + #constants + ANGLE90 = angleOfDegree(90) + ANGLE180 = angleOfDegree(180) + SEAM_ALLOWANCE = (5/8.0)*IN + BORDER = 1*IN + NOTE_HEIGHT = 1*IN + + #get the document, set initial width & height + doc = self.document.getroot() # self.document is the canvas seen in Inkscape + #add defs group with markers to document + addDefs(doc) + + #width_orig = inkex.unittouu(doc.get('width')) + #height_orig = inkex.unittouu(doc.get('height')) + #doc_width = 4*BORDER+4*SEAM_ALLOWANCE + bust_circumference/2.0 + #doc_height = 2*BORDER+3*SEAM_ALLOWANCE+(upper_front_height+side) + #doc.set('width', str(doc_width)) #temporary document width, doc is resized near end of pattern file + #doc.set('height', str(doc_height)) #temporary document height, doc is resized near end of pattern file + + + #create a base group in the document to hold all patterns + pattern_base = base(doc, 'pattern_base') + #create a pattern group for each pattern, put pattern group in base group - there can be multiple patterns + bodice = pattern(pattern_base, 'bodice') + # create a group for each pattern piece, put pattern piece group in pattern group + A = patternPiece(bodice, 'A', 'bodice_front', fabric = 2, interfacing = 0, lining = 0) + B = patternPiece(bodice, 'B', 'bodice_back', fabric = 2, interfacing = 0, lining = 0) + C = patternPiece(bodice, 'C', 'bodice_sleeve', fabric = 2, interfacing = 0, lining = 0) + D = patternPiece(bodice, 'D', 'bodice_cuff', fabric = 2, interfacing = 0, lining = 0) + + #pattern notes + notes = [] + notes.append('Define Seam Allowances: Select File/Inkscape Preferences/Steps and set Outset to 56.25px (5/8" seam allowance)') + notes.append('Create Seam Allowances: Press CTRL-F, type "cuttingline" in the ID field, click the Find button, press CTRL-)') + notes.append('Remove Points & Gridlines: Press CTRL-F, type "reference" in the Attribute field, click Find button, press DELETE') + notes.append('Print: Save as a PDF file, open PDF with PDF viewer (Adobe, Evince, Okular, xPDF), print from Print Preview option') + + #pattern points + b1 = patternPointXY(B, 'b1', 0, 0) #B + b2 = patternPoint(B, 'b2', down(b1, front_waist_length)) #A + b3 = patternPoint(B, 'b3', up(b2, side)) #C + a1 = patternPoint(A, 'a1', left(b3, bust_circumference/2.0)) #D + b4 = patternPoint(B, 'b4', left(b3, across_back/2.0)) #E + b5 = patternPoint(B, 'b5', up(b4, armscye_circumference/3.0)) #F + b6 = patternPoint(B, 'b6', up(b1, 0.5*IN)) #G + b7 = patternPoint(B, 'b7', left(b6, 1.5*IN)) #H + b8 = patternPoint(B, 'b8', onLineAtLength(b5, b7, -0.5*IN)) #I + a2 = patternPoint(A, 'a2', left(b4, armscye_circumference/4.0)) #J + a3 = patternPoint(A, 'a3', midPoint(a2, b4)) #K + a4 = patternPoint(A, 'a4', up(a2, 2.5*IN)) #L + a5 = patternPoint(A, 'a5', up(b5, 1.5*IN)) #M + a6 = patternPoint(A, 'a6', left(a5, 2*IN)) #N + a7 = patternPoint(A, 'a7', left(a6, distance(b7, b8))) #O + a8 = patternPointXY(A, 'a8', a7.x, b3.y - (upper_front_height - distance(b1, b7))) #P + a9 = patternPoint(A, 'a9', down(a8, neck_circumference/4.0)) #Q + a10 = patternPoint(A, 'a10', up(a9, 0.5*IN)) #R + a11 = patternPoint(A, 'a11', left(a10, (neck_circumference/6.0)+0.25*IN )) #S + b9 = patternPoint(B, 'b9', midPoint(a3, b4)) #T on back bodice B + a12 = patternPoint(A, 'a12', b9) #T on front bodice A + b10 = patternPoint(B, 'b10', down(b9, side)) #U + b11 = patternPoint(B , 'b11', right(b10, 1*IN)) #V + a13 = patternPoint(A, 'a13', left(b10, 1*IN)) #W + a14 = patternPoint(A, 'a14', onLineAtLength(a11, a1, front_waist_length)) #X + a15 = patternPoint(A, 'a15', down(a8, distance(a8, a14))) #Y - new point at front waist + b12 = patternPoint(B, 'b12', up(b4, distance(b5, b4)/3.0)) #Z - new point at back armscye + #temporary armscye curve from a3 to b12 to find top point of side seam + length = distance(a3, b12)/3.0 + temp_b12_c1 = right(a3, length) #don't create an svg controlpoint circle for this point + temp_b12_c2 = down(b12, length) #or for this point + #find top point of side seam with intersection of side and armscye curve, save to two points a16 and b13 + curve1 = pointList(a3, temp_b12_c1, temp_b12_c2, b12) + intersections = intersectLineCurve(b10, b9, curve1) #this line is directional from b10 to b9 + b13 = patternPoint(B, 'b13', intersections[0]) # AA on bodice back B -use 1st intersection found, in this case there's only one intersection + a16 = patternPoint(A, 'a16', b13) #AA on bodice back A + + #front control points - path runs counterclockwise from front neck center a11 + #front neck control points from a8 to a11 + length = distance(a8, a11)/3.0 + a11.c2 = controlPoint(A, 'a11.c2', right(a11, 1.5*length)) + a11.c1 = controlPoint(A, 'a11.c1', polar(a8, length, angleOfLine(a8, a11.c2))) + #front waist control points from a14 to a15 + length = distance(a14, a15)/3.0 + a15.c1 = controlPoint(A, 'a15.c1', polar(a14, length, angleOfLine(a14, a11)+ANGLE90)) #control handle line is perpendicular to line a14-a11 + a15.c2 = controlPoint(A, 'a15.c2', left(a15, length)) + #front waist control points from a15 to a13 + length = distance(a15, a13)/3.0 + a13.c1 = controlPoint(A, 'a13.c1', right(a15, 1.5*length)) + a13.c2 = controlPoint(A, 'a13.c2', polar(a13, length, angleOfLine(a13, a13.c1))) #second control aimed at first control point + #front side control points from a13 to a12 + length = distance(a13, a12)/3.0 + a12.c1 = controlPoint(A, 'a12.c1', up(a13, length)) + a12.c2 = controlPoint(A, 'a12.c2', down(a12, length)) + #front armscye control points from a16 to a3 to a4 to 16 + length1 = distance(a16, a3)/3.0 + length2 = distance(a3, a4)/3.0 + length3 = distance(a4, a6)/3.0 + angle1 = angleOfLine(a16, a3) + angle2 = ANGLE180 + angle3 = (angle1+angle2)/2.0 + a3.c1 = controlPoint(A, 'a3.c1', polar(a16, length1, angle1)) + a3.c2 = controlPoint(A, 'a3.c2', polar(a3, length1, angle3-ANGLE180)) + a4.c1 = controlPoint(A, 'a4.c1', polar(a3, length2, angle3)) + angle4 = angleOfLine(a3, a6) + angle5 = angleOfLine(a4, a6) + angle6 = (angle4+angle5)/2.0 + a4.c2 = controlPoint(A, 'a4.c2', polar(a4, 1.5*length2, angle6-ANGLE180)) + a6.c1 = controlPoint(A, 'a6.c1', polar(a4, length3, angle6)) + a6.c2 = controlPoint(A, 'a6.c2', polar(a6, length3/2.0, angleOfLine(a8, a6)+ANGLE90)) + + #back control points - path runs clockwise from back nape b1 + #back neck control points from b7 to b1 + length = distance(b7, b1)/3.0 + b1.c1 = controlPoint(B, 'b1.c1', down(b7, length/2.0)) #short control point handle + b1.c2 = controlPoint(B, 'b1.c2', left(b1, length*2)) #long control point handle + #back side control points from b11 to b9 + length = distance(b11, b9)/3.0 + b9.c1 = controlPoint(B, 'b9.c1', up(b11, length)) + b9.c2 = controlPoint(B, 'b9.c2', down(b9, length)) + #back armscye points from b13 to b12 to b8 + length1 = distance(b13, b12)/3.0 + length2 = distance(b12, b8)/3.0 + angle1 = angleOfLine(b13, b8) + b12.c1 = controlPoint(B, 'b12.c1', polar(b13, length1, angleOfLine(a3.c1, a16))) + b12.c2 = controlPoint(B, 'b12.c2', polar(b12, length1, angle1-ANGLE180)) + b8.c1 = controlPoint(B, 'b8.c1', polar(b12, length2, angle1)) + b8.c2 = controlPoint(B, 'b8.c2', polar(b8, length2/2.0, angleOfLine(b7, b8)-ANGLE90)) + + #sleeve C + c1 = patternPointXY(C, 'c1', 0.0, 0.0) #A + c2 = patternPoint(C, 'c2', down(c1, overarm_length)) #B + c3 = patternPoint(C, 'c3', up(c2, elbow_height)) #C + c4 = patternPoint(C, 'c4', right(c2, 1*IN)) #D + c5 = patternPoint(C, 'c5', right(c3, 0.5*IN)) #E + c6 = patternPoint(C, 'c6', left(c1, 1*IN)) #F + c7 = patternPoint(C, 'c7', right(c4, 1*IN)) #G + c8 = patternPoint(C, 'c8', right(c7, hand_circumference+2*IN)) #H + c9 = patternPoint(C, 'c9', right(c8, 1*IN)) #I + c10 = patternPoint(C, 'c10', right(c5, 1*IN) )#J + c11 = patternPoint(C, 'c11', right(c10, elbow_circumference)) #K + c12 = patternPoint(C, 'c12', right(c11, 0.5*IN)) #L + c13 = patternPoint(C, 'c13', right(c1, armscye_circumference)) #M + c14 = patternPoint(C, 'c14', right(c13, 2*IN)) #N + c15 = patternPoint(C, 'c15', up(c1, 2.5*IN)) #O + c16 = patternPoint(C, 'c16', right(c1, 1.5*IN)) #P + c17 = patternPoint(C, 'c17', left(c13, 3*IN)) #Q + c18 = patternPointXY(C, 'c18', c16.x, c15.y) #R + c19 = patternPointXY(C, 'c19', c17.x, c15.y) #S + c20 = patternPoint(C, 'c20', midPoint(c16, c17)) #T + c21 = patternPoint(C, 'c21', up(c20, distance(c20, c18))) #U - above T + c22 = patternPoint(C, 'c22', down(midPoint(c7, c8), 0.75*IN)) #V - was U + c23 = patternPoint(C, 'c23', right(c4, distance(c4, c8)*3/5.0)) #W + c24 = patternPoint(C, 'c24', up(c23, distance(c4, c3)/3.0)) #X - was V + c25 = patternPoint(C, 'c25', down(c23, 0.75*IN)) #Y - new point + # sleeve C control points + # sleevecap c6 to c18 to c21 to c19 to c13 to c14 + length1 = distance(c6, c18)/3.0 + length2 = distance(c18, c21)/3.0 + c21.c2 = controlPoint(C, 'c21.c2', left(c21, length2)) + c21.c1 = controlPoint(C, 'c21.c1', polar(c18, length2, angleOfLine(c18, c21.c2))) + angle = angleOfLine(c6, c18)+angleOfVector(c18, c6, c1)/2.0 + c18.c1 = controlPoint(C, 'c18.c1', polar(c6, length1, angle)) + c18.c2 = controlPoint(C, 'c18.c2', polar(c18, length1, angleOfLine(c21.c1, c18))) + length1 = distance(c21, c19)/3.0 + length2 = distance(c19, c13)/3.0 + length3 = distance(c13, c14)/3.0 + c19.c1 = controlPoint(C, 'c19.c1', right(c21, length1)) + c19.c2 = controlPoint(C, 'c19.c2', polar(c19, length1, angleOfLine(c19, c19.c1))) + c13.c1 = controlPoint(C, 'c13.c1', polar(c19, length2, angleOfLine(c19.c2, c19))) + angle1 = angleOfLine(c13.c1, c13)/2.0 + c13.c2 = controlPoint(C, 'c13.c2', polar(c13, length2, angle1+ANGLE180)) + c14.c1 = controlPoint(C, 'c14.c1', polar(c13, length3, angle1)) + c14.c2 = controlPoint(C, 'c14.c2', polar(c14, length3, angleOfLine(c18.c1, c6))) + # c14 to c12 + length = distance(c14, c12)/3.0 + c12.c2 = controlPoint(C, 'c12.c2', polar(c12, length, angleOfLine(c9, c12))) + c12.c1 = controlPoint(C, 'c12.c1', polar(c14, length, angleOfLine(c14, c12.c2))) + # c9 to c25 + length = distance(c9, c25)/3.0 + c25.c2 = controlPoint(C, 'c25.c2', right(c25, length)) + c25.c1 = controlPoint(C, 'c25.c1', polar(c9, length, angleOfLine(c9, c25.c2))) + #c22 to c4 + length = distance(c22, c4)/3.0 + c4.c1 = controlPoint(C, 'c4.c1', left(c22, length)) + c4.c2 = controlPoint(C, 'c4.c2', polar(c4, length, angleOfLine(c4, c4.c1))) + #c5 to c6 + length = distance(c5, c6)/3.0 + c6.c1 = controlPoint(C, 'c6.c1', polar(c5, length, angleOfLine(c4, c5))) + c6.c2 = controlPoint(C, 'c6.c2', polar(c6, length, angleOfLine(c6, c6.c1))) + + + #cuff D + d1 = patternPointXY(D, 'd1', 0, 0) + d2 = patternPoint(D, 'd2', right(d1, hand_circumference+2*IN)) + d3 = patternPoint(D, 'd3', down(d2, 3*IN)) + d4 = patternPoint(D, 'd4', up(d3, 0.75*IN)) + d5 = patternPoint(D, 'd5', left(d3, 1*IN)) + d6 = patternPoint(D, 'd6', down(d1, 3*IN)) + d7 = patternPoint(D, 'd7', right(d6, 1*IN)) + d8 = patternPoint(D, 'd8', up(d6, 0.75*IN)) + length1 = 0.7*distance(d1, d6) + length2 = 0.75*IN + d9 = patternPointXY(D, 'd9', d1.x+0.5*IN, d1.y+length1) + d10 = patternPoint(D, 'd10', right(d9, length2)) + d11 = patternPointXY(D, 'd11', d2.x-0.5*IN, d2.y+length1) + d12 = patternPoint(D, 'd12', left(d11, length2)) + #cuff D control points + length = distance(d4, d5)/3.0 + d5.c1 = controlPoint(D, 'd5.c1', down(d4, length)) + d5.c2 = controlPoint(D, 'd5.c2', right(d5, length)) + d8.c1 = controlPoint(D, 'd8.c1', left(d7, length)) + d8.c2 = controlPoint(D, 'd8.c2', down(d8, length)) + + # all points are defined, now create paths with them... + # pattern marks, labels, grainlines, seamlines, cuttinglines, darts, etc. + + #bodice front A + #letter + pnt1 = Point('', a8.x, a6.c1.y) + addText(A, 'A_letter', pnt1.x, pnt1.y, 'A', fontsize = '72') + #label + pnt2 = down(pnt1, 0.5*IN) + addText(A, 'A_label', pnt2.x, pnt2.y, 'Bodice Front', fontsize = '48') + #label + pnt3 = down(pnt2, 0.5*IN) + addText(A, 'A_fabric', pnt3.x, pnt3.y, 'Cut 2 of fabric', fontsize = '38') + #grainline points + aG1 = down(a11, front_waist_length/3.0) + aG2 = polar(aG1, front_waist_length/2.0, angleOfLine(a11, a14)) + path_str = formatPath('M', aG1, 'L', aG2) + A_grainline = addPath(A, 'A_grainline', path_str, 'grainline') + # gridline - helpful for troubleshooting during design phase + path_str = formatPath('M', a1, 'L', a3, 'M', a4, 'L', a2, 'M', a8, 'L', a15, 'M', a11, 'L', a10, 'M', a7, 'L', a5) + A_gridline = addPath(A, 'A_gridline', path_str, 'gridline') + #seamline & cuttingline + path_str = formatPath('M', a11, 'L', a14, 'C', a15.c1, a15.c2, a15, 'C', a13.c1, a13.c2, a13, 'C', a12.c1, a12.c2, a12) + path_str = path_str+formatPath('L', a16, 'C', a3.c1, a3.c2, a3, 'C', a4.c1, a4.c2, a4, 'C', a6.c1, a6.c2, a6, 'L', a8, 'C', a11.c1, a11.c2, a11) + A_seamline = addPath(A, 'A_seamline', path_str, 'seamline') + A_cuttingline = addPath(A, 'A_cuttingline', path_str, 'cuttingline') + + #bodice back B + #letter + pnt1 = Point('', b8.x*2/3.0, b8.c2.y) + addText(B, 'B_letter', pnt1.x, pnt1.y, 'B', fontsize = '72') # + #label + pnt2 = down(pnt1, 0.5*IN) + addText(B, 'B_name', pnt2.x, pnt2.y, 'Bodice Back', fontsize = '48') + #label + pnt3 = down(pnt2, 0.5*IN) + addText(B, 'B_fabric', pnt3.x, pnt3.y, 'Cut 2 of fabric', fontsize = '38') + #grainline points + bG1 = down(b7, front_waist_length/3.0) + bG2 = down(bG1, front_waist_length/2.0) + path_str = formatPath('M', bG1, 'L', bG2) + B_grainline = addPath(B, 'B_grainline', path_str, 'grainline') + # gridline + path_str = formatPath('M', b1, 'L', b2, 'M', b11, 'L', b9, 'M', b9, 'L', b10, 'M', b7, 'L', b6, 'L', b1, 'M', b11, 'L', b10) + B_gridline = addPath(B, 'B_gridline', path_str, 'gridline') + #seamline & cuttingline + path_str = formatPath('M', b1, 'L', b2, 'L', b11, 'C', b9.c1, b9.c2, b9, 'L', b13, 'C', b12.c1, b12.c2, b12, 'C', b8.c1, b8.c2, b8, 'L', b7, 'C', b1.c1, b1.c2, b1) + B_seamline = addPath(B, 'B_seamline', path_str, 'seamline') + B_cuttingline = addPath(B, 'B_cuttingline', path_str, 'cuttingline') + + #bodice sleeve C + #letter + pnt1 = Point('', c19.c1.x, c12.c1.y) + addText(C, 'C_letter', pnt1.x, pnt1.y, 'C', fontsize = '72') # + #label + pnt2 = down(pnt1, 0.5*IN) + addText(C, 'C_name', pnt2.x, pnt2.y, 'Bodice Sleeve', fontsize = '48') + #label + pnt3 = down(pnt2, 0.5*IN) + addText(C, 'C_fabric', pnt3.x, pnt3.y, 'Cut 2 of fabric', fontsize = '38') + #grainline points + cG1 = c20 + cG2 = down(cG1, overarm_length/2.0) + path_str = formatPath('M', cG1, 'L', cG2) + C_grainline = addPath(C, 'C_grainline', path_str, 'grainline') + # gridline + path_str = formatPath('M', c15, 'L', c2, 'M', c15, 'L', c19, 'M', c2, 'L', c9, 'M', c3, 'L', c12, 'M', c6, 'L', c14, 'M', c18, 'L', c16, 'M', c19, 'L', c17) + C_gridline = addPath(C, 'C_gridline', path_str, 'gridline') + # slashline + path_str = formatPath('M', c24, 'L', c25) + C_slashline = addPath(C, 'C_slashline', path_str, 'slashline') + #seamline & cuttingline + path_str = formatPath('M', c6, 'C', c18.c1, c18.c2, c18, 'C', c21.c1, c21.c2, c21, 'C', c19.c1, c19.c2, c19, 'C', c13.c1, c13.c2, c13, 'C', c14.c1, c14.c2, c14) + path_str += formatPath('C', c12.c1, c12.c2, c12, 'L', c9, 'C', c25.c1, c25.c2, c25, 'L', c22, 'C', c4.c1, c4.c2, c4, 'L', c5, 'C', c6.c1, c6.c2, c6) + C_seamline = addPath(C, 'C_seamline', path_str, 'seamline') + C_cuttingline = addPath(C, 'C_cuttingline', path_str, 'cuttingline') + + #bodice cuff D + #letter + pnt1 = Point('', d7.x, d6.y/4.0) + addText(D, 'D_letter', pnt1.x, pnt1.y, 'D', fontsize = '38') # + #label + pnt2 = right(pnt1, 1*IN) + addText(D, 'C_name', pnt2.x, pnt2.y, 'Bodice Sleeve Cuff', fontsize = '30') + #label + pnt3 = right(pnt2, 4*IN) + addText(D, 'C_fabric', pnt3.x, pnt3.y, 'Cut 2 of fabric', fontsize = '24') + pnt3 = down(pnt3, 0.3*IN) + addText(D, 'C_finterfacing', pnt3.x, pnt3.y, 'Cut 2 of interfacing', fontsize = '24') + #grainline points + pnt1 = midPoint(d1, d6) + dG1 = right(pnt1, distance(d1, d2)/4.0) + dG2 = right(dG1, distance(d1, d2)/2.0) + path_str = formatPath('M', dG1, 'L', dG2) + D_grainline = addPath(D, 'D_grainline', path_str, 'grainline') + # gridline + path_str = formatPath('M', d1, 'L', d2, 'L', d4, 'L', d5, 'L', d7, 'L', d8, 'L', d1) + D_gridline = addPath(D, 'D_gridline', path_str, 'gridline') + # slashline + path_str = formatPath('M', d9, 'L', d10, 'M', d11, 'L', d12) + D_slashline = addPath(D, 'D_slashline', path_str, 'slashline') + #seamline & cuttingline + path_str = formatPath('M', d1, 'L', d2, 'L', d4, 'C', d5.c1, d5.c2, d5, 'L', d7, 'C', d8.c1, d8.c2, d8, 'L', d1) + D_seamline = addPath(D, 'D_seamline', path_str, 'seamline') + D_cuttingline = addPath(D, 'D_cuttingline', path_str, 'cuttingline') + + #layout patterns on document in rows + dx = BORDER+SEAM_ALLOWANCE #left border, allow width for seam allowance + dy = BORDER+NOTE_HEIGHT+2*SEAM_ALLOWANCE # print pattern under the note header, allow height for seam allowance plus extra space + pattern_buffer = 3*SEAM_ALLOWANCE #between any two patterns need 2 seam allowances plus additional space + # first row + pattern_offset = dx + row_offset = dy + #layout bodice front A + adx = pattern_offset-a14.x #left border offset dx, translate leftmost A point a14 to this offset + ady = row_offset-a8.y #upper height offset dy, translate highest A point a8 + A.set('transform', 'translate('+str(adx)+' '+str(ady)+')') + pattern_offset = adx+a12.x+pattern_buffer + #layout bodice front B + bdx = pattern_offset-b9.x #translate leftmost B point + bdy = row_offset-b6.y #translate highest B point + B.set('transform', 'translate('+str(bdx)+' '+str(bdy)+')') + + #2nd row + pattern_offset = dx + row_offset = ady+a15.y+pattern_offset # row_offset + lowest point from previous row, plus pattern_offset + #layout sleeve C + cdx = pattern_offset-c6.x + cdy = row_offset-c21.y + C.set('transform', 'translate('+str(cdx)+' '+str(cdy)+')') + pattern_offset = cdx+c14.x+pattern_buffer + #layout cuff D + ddx = pattern_offset-d1.x + ddy = row_offset-d1.y + D.set('transform', 'translate('+str(ddx)+' '+str(ddy)+')') + #3rd row, use this to calculate document height + row_offset = cdy+c25.y + + #resize document to fit pattern piece layout + width = ddx+d2.x # use pattern piece that appears farthest to the right in Inkscape canvas + doc_width = width+2*SEAM_ALLOWANCE+2*BORDER + doc_height = row_offset+SEAM_ALLOWANCE+BORDER + root = self.svg.getElement('//svg:svg'); + root.set('viewBox', '%f %f %f %f' % (0,0,doc_width,doc_height)) + root.set('width', str(doc_width)) + root.set('height', str(doc_height)) + + #Place notes on document after pattern pieces are transformed so that notes are centered on correct width + x = doc_width/2.0 + y = BORDER + i = 0 + for item in notes: + addText(bodice, 'note'+str(i), x, y, item, fontsize = '28', textalign = 'center', textanchor = 'middle', reference = 'false') + y = y+0.33*IN + +if __name__ == '__main__': + ShirtWaist().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/show_path_coordinates/show_path_coordinates.inx b/extensions/fablabchemnitz/show_path_coordinates/show_path_coordinates.inx new file mode 100644 index 00000000..95028e3b --- /dev/null +++ b/extensions/fablabchemnitz/show_path_coordinates/show_path_coordinates.inx @@ -0,0 +1,16 @@ + + + Show Path Coordinates + fablabchemnitz.de.show_path_coordinates + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/show_path_coordinates/show_path_coordinates.py b/extensions/fablabchemnitz/show_path_coordinates/show_path_coordinates.py new file mode 100644 index 00000000..a3abc905 --- /dev/null +++ b/extensions/fablabchemnitz/show_path_coordinates/show_path_coordinates.py @@ -0,0 +1,42 @@ +#!/usr/bin/env python3 +# +# curve xy co-ordinate export +# Authors: +# Jean Moreno +# John Cliff +# Neon22 +# Jens N. Lallensack +# Mario Voigt +# +# Copyright (C) 2011 Jean Moreno +# Copyright (C) 2011 John Cliff +# Copyright (C) 2011 Neon22 +# Copyright (C) 2019 Jens N. Lallensack +# Copyright (C) 2021 Mario Voigt + +# Released under GNU GPL v3, see https://www.gnu.org/licenses/gpl-3.0.en.html for details. +# +import inkex +import sys +from inkex.paths import CubicSuperPath +from inkex import transforms + +class ShowPathCoordinates(inkex.EffectExtension): + + def effect(self): + if len(self.svg.selected) > 0: + output_all = output_nodes = "" + for node in self.svg.selection.filter(inkex.PathElement): + node.apply_transform() + p = CubicSuperPath(node.get('d')) + for subpath in p: + for csp in subpath: + output_nodes += str(csp[1][0]) + "\t" + str(csp[1][1]) + "\n" + output_nodes += "\n" + sys.stderr.write(output_nodes.strip()) + else: + inkex.errormsg('Please select some paths first.') + return + +if __name__ == '__main__': + ShowPathCoordinates().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/simple_frame/simple_frame.inx b/extensions/fablabchemnitz/simple_frame/simple_frame.inx new file mode 100644 index 00000000..1bac3c30 --- /dev/null +++ b/extensions/fablabchemnitz/simple_frame/simple_frame.inx @@ -0,0 +1,23 @@ + + + Simple Frame + fablabchemnitz.de.simple_frame + + + + 100.0 + 150.0 + 10.0 + 20.0 + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/simple_frame/simple_frame.py b/extensions/fablabchemnitz/simple_frame/simple_frame.py new file mode 100644 index 00000000..3514a33e --- /dev/null +++ b/extensions/fablabchemnitz/simple_frame/simple_frame.py @@ -0,0 +1,272 @@ +#! /usr/bin/env python3 +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# + +__version__ = "0.1" + +import inkex +import math + +class GenerateFrame(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument("--width", type=float, default=100.0, help="Inner width") + pars.add_argument("--height", type=float, default=150.0, help="Inner height") + pars.add_argument("--depth", type=float, default=10.0, help="Frame depth") + pars.add_argument("--border", type=float, default=20.0, help="Frame border width") + pars.add_argument("--unit", default="mm", help="Unit of measure") + + def effect(self): + center_x = self.svg.unittouu(self.document.getroot().get('width'))/2 + center_y = self.svg.unittouu(self.document.getroot().get('height'))/2 + + _width = self.svg.unittouu(str(self.options.width) + self.options.unit) + _height = self.svg.unittouu(str(self.options.height) + self.options.unit) + _depth = self.svg.unittouu(str(self.options.depth) + self.options.unit) + + _border = self.svg.unittouu(str(self.options.border) + self.options.unit) + _border_hyp = math.sqrt(2 * _border * _border) + + id_frame = self.svg.get_unique_id('papercraft-frame') + group = self.svg.get_current_layer().add(inkex.Group(id=id_frame)) + id_score = self.svg.get_unique_id('papercraft-scores') + score_group = group.add(inkex.Group(id=id_score)) + cut_line = {'stroke': '#FF0000', 'fill': 'none', 'stroke-width': str(self.svg.unittouu('1px'))} + safe_line = {'stroke': '#0000FF', 'fill': 'none', 'stroke-width': str(self.svg.unittouu('1px'))} + valley_score_line = {'stroke': '#00FF00', 'fill': 'none', 'stroke-width': str(self.svg.unittouu('1px')), 'stroke-dasharray': '1.05999995,0.52999997,0.26499999,0.52999997'} + mountain_score_line = {'stroke': '#00FF00', 'fill': 'none', 'stroke-width': str(self.svg.unittouu('1px')), 'stroke-dasharray': '5,5'} + + # line.path --> M = absolute coordinates + # line.path --> l = draws a line from the current point to the specified relative coordinates + # line.path --> c = draws a beizer curve from the current point to the specified coordinates + # line.path --> q = draw an arc from the current point to the specified coordinates using a point as reference + # line.path --> Z = close path + + # outer profile (cut) + line = group.add(inkex.PathElement(id=id_frame + '-outer-profile')) + line.path = [ + # top-left + ['M', [0, 2 * (_border+_depth)]], + ['l', [_border+_depth+_border,0]], + ['l', [0,-_depth]], + ['l', [_depth,0]], + ['l', [_border,-_border]], + ['l', [0,-_depth]], + ['l', [-_border,-_border]], + ['l', [_width+2*_border,0]], + + # top-right + ['l', [-_border,_border]], + ['l', [0,_depth]], + ['l', [_border,_border]], + ['l', [_depth,0]], + ['l', [0,_depth]], + ['l', [_border+_depth+_border,0]], + ['l', [0,_height+2*_border]], + + # bottom-right + ['l', [-(_border+_depth+_border),0]], + ['l', [0,_depth]], + ['l', [-_depth,0]], + ['l', [-_border,_border]], + ['l', [0,_depth]], + ['l', [_border,_border]], + ['l', [-(_width+2*_border),0]], + + # bottom-left + ['l', [_border,-_border]], + ['l', [0,-_depth]], + ['l', [-_border,-_border]], + ['l', [-_depth,0]], + ['l', [0,-_depth]], + ['l', [-(_border+_depth+_border),0]], + + ['Z', []] + ] + line.style = cut_line + + line = group.add(inkex.PathElement(id=id_frame + '-inner-profile')) + line.path = [ + ['M', [2*_depth+3*_border, 2*_depth+3*_border]], + ['l', [_width,0]], + ['l', [0,_height]], + ['l', [-_width,0]], + ['Z', []] + ] + line.style = safe_line + + # score lines -- vertical + _top_edge = 2 *_border+2*_depth + line = score_group.add(inkex.PathElement(id=id_score + '-score-1')) + line.path = [ + ['M', [_border, _top_edge]], + ['l', [0, _height+2*_border]], + ] + line.style = valley_score_line + + line = score_group.add(inkex.PathElement(id=id_score + '-score-2')) + line.path = [ + ['M', [_border+_depth, _top_edge]], + ['l', [0, _height+2*_border]], + ] + line.style = valley_score_line + + line = score_group.add(inkex.PathElement(id=id_score + '-score-3')) + line.path = [ + ['M', [_border+_depth+_border, _top_edge]], + ['l', [0, _height+2*_border]], + ] + line.style = valley_score_line + + line = score_group.add(inkex.PathElement(id=id_score + '-score-4')) + line.path = [ + ['M', [2*(_border+_depth), _top_edge-_depth]], + ['l', [0, _height+2*_border+2*_depth]], + ] + line.style = valley_score_line + + _right_side = _width+4*_border+2*_depth + + line = score_group.add(inkex.PathElement(id=id_score + '-score-5')) + line.path = [ + ['M', [_right_side, _top_edge-_depth]], + ['l', [0, _height+2*_border+2*_depth]], + ] + line.style = valley_score_line + + line = score_group.add(inkex.PathElement(id=id_score + '-score-6')) + line.path = [ + ['M', [_right_side+_depth, _top_edge]], + ['l', [0, _height+2*_border]], + ] + line.style = valley_score_line + + line = score_group.add(inkex.PathElement(id=id_score + '-score-7')) + line.path = [ + ['M', [_right_side+_border+_depth, _top_edge]], + ['l', [0, _height+2*_border]], + ] + line.style = valley_score_line + + line = score_group.add(inkex.PathElement(id=id_score + '-score-8')) + line.path = [ + ['M', [_right_side+_border+_depth+_depth, _top_edge]], + ['l', [0, _height+2*_border]], + ] + line.style = valley_score_line + + # corners + _o1_x = 2*_border + _depth + _o1_y = _o1_x + _depth + + line = score_group.add(inkex.PathElement(id=id_score + '-score-22')) + line.path = [ + ['M', [_o1_x+_depth, _o1_y]], + ['l', [-_depth,-_depth]], + ] + line.style = mountain_score_line + + _o2_x = _o1_x + _width + 2*_border + 2*_depth + _o2_y = _o1_y + + line = score_group.add(inkex.PathElement(id=id_score + '-score-24')) + line.path = [ + ['M', [_o2_x-_depth, _o2_y]], + ['l', [_depth,-_depth]], + ] + line.style = mountain_score_line + + _o3_x = _o1_x + _o3_y = _o1_y + _height + 2*_border + + line = score_group.add(inkex.PathElement(id=id_score + '-score-26')) + line.path = [ + ['M', [_o3_x + _depth, _o3_y]], + ['l', [-_depth,_depth]], + ] + line.style = mountain_score_line + + _o4_x = _o2_x + _o4_y = _o3_y + + line = score_group.add(inkex.PathElement(id=id_score + '-score-28')) + line.path = [ + ['M', [_o4_x - _depth, _o4_y]], + ['l', [_depth,_depth]], + ] + line.style = mountain_score_line + + # horizontals + line = score_group.add(inkex.PathElement(id=id_score + '-score-31')) + line.path = [ + ['M', [2*_border+_depth, 2*_border+2*_depth]], + ['l', [_width+2*_border+2*_depth,0]], + ] + line.style = valley_score_line + + line = score_group.add(inkex.PathElement(id=id_score + '-score-32')) + line.path = [ + ['M', [2*_border+2*_depth, 2*_border+_depth]], + ['l', [_width+2*_border,0]], + ] + line.style = valley_score_line + + line = score_group.add(inkex.PathElement(id=id_score + '-score-33')) + line.path = [ + ['M', [3*_border+2*_depth, _border+_depth]], + ['l', [_width,0]], + ] + line.style = valley_score_line + + line = score_group.add(inkex.PathElement(id=id_score + '-score-34')) + line.path = [ + ['M', [3*_border+2*_depth, _border]], + ['l', [_width,0]], + ] + line.style = valley_score_line + + _bottom = _height + 4*_border+2*_depth + + line = score_group.add(inkex.PathElement(id=id_score + '-score-35')) + line.path = [ + ['M', [2*_border+_depth, _bottom]], + ['l', [_width+2*_border+2*_depth,0]], + ] + line.style = valley_score_line + + line = score_group.add(inkex.PathElement(id=id_score + '-score-36')) + line.path = [ + ['M', [2*_border+2*_depth, _bottom+_depth]], + ['l', [_width+2*_border,0]], + ] + line.style = valley_score_line + + line = score_group.add(inkex.PathElement(id=id_score + '-score-37')) + line.path = [ + ['M', [3*_border+2*_depth, _bottom+_border+_depth]], + ['l', [_width,0]], + ] + line.style = valley_score_line + + line = score_group.add(inkex.PathElement(id=id_score + '-score-38')) + line.path = [ + ['M', [3*_border+2*_depth, _bottom+_border+2*_depth]], + ['l', [_width,0]], + ] + line.style = valley_score_line + +if __name__ == '__main__': + GenerateFrame().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/simpleinkscape/inkscape-simpleinkscape/simple/ui/menus.xml b/extensions/fablabchemnitz/simpleinkscape/inkscape-simpleinkscape/simple/ui/menus.xml new file mode 100644 index 00000000..fd11f443 --- /dev/null +++ b/extensions/fablabchemnitz/simpleinkscape/inkscape-simpleinkscape/simple/ui/menus.xml @@ -0,0 +1,328 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + /--> + + + + + + + + + + + + + + + + + + + /--> + + + + + diff --git a/extensions/fablabchemnitz/simpleinkscape/inkscape-simpleinkscape/simple/ui/toolbar-commands.ui b/extensions/fablabchemnitz/simpleinkscape/inkscape-simpleinkscape/simple/ui/toolbar-commands.ui new file mode 100644 index 00000000..7e651837 --- /dev/null +++ b/extensions/fablabchemnitz/simpleinkscape/inkscape-simpleinkscape/simple/ui/toolbar-commands.ui @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extensions/fablabchemnitz/simpleinkscape/inkscape-simpleinkscape/simple/ui/toolbar-tool.ui b/extensions/fablabchemnitz/simpleinkscape/inkscape-simpleinkscape/simple/ui/toolbar-tool.ui new file mode 100644 index 00000000..dc11514a --- /dev/null +++ b/extensions/fablabchemnitz/simpleinkscape/inkscape-simpleinkscape/simple/ui/toolbar-tool.ui @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extensions/fablabchemnitz/simpleinkscape/simpleinkscape.inx b/extensions/fablabchemnitz/simpleinkscape/simpleinkscape.inx new file mode 100644 index 00000000..edd18aab --- /dev/null +++ b/extensions/fablabchemnitz/simpleinkscape/simpleinkscape.inx @@ -0,0 +1,36 @@ + + + Simple Inkscape (Interface) + fablabchemnitz.de.simpleinkscape + + + + + + + + + all + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/simpleinkscape/simpleinkscape.py b/extensions/fablabchemnitz/simpleinkscape/simpleinkscape.py new file mode 100644 index 00000000..7f91d925 --- /dev/null +++ b/extensions/fablabchemnitz/simpleinkscape/simpleinkscape.py @@ -0,0 +1,93 @@ +#!/usr/bin/python3 +#-*- coding: utf-8 -*- + +# Simple Inkscape Version 0.1 + +# The purpose of this Inkscape extension is to provide a easy method to change the interface. +# The needed .xml and .ui files are provided in the zip file. +# These filese are moved into the .config/inkscape-simpleinkscape folder on first run. +# There are two option: default and simple. + +# This program has been released under the Gnu Public Licence version 2. It is free for everyone to use, copy and change. +# A copy of the GPLv2 licence has added to this program. + +import inkex +import shutil +import os +import platform +import subprocess + +#profiles = ['default', 'simple', 'lasercutter'] +profiles = ['default', 'simple'] +#folders = ['extensions','icons', 'keys', 'palettes', 'templates', 'ui'] +folders = ['ui'] + +def log (msg =''): + inkex.errormsg(msg) + +def debug (msg=''): + inkex.errormsg("DEBUG : " + msg) + pass + +class simpleinkscape(inkex.Effect): + + def __init__(self): + inkex.Effect.__init__(self) + self.arg_parser.add_argument("--interfaceVersion", type=str) + + def effect(self): + log ('\n*** Simple Inkscape ***\n') + + # Determine the platform, only continue on linux or windows + platfrm = platform.system() + if platfrm == 'Linux': sep = '/' + elif platfrm == 'Windows': sep = "\\" + else: + log ('\nError!\n\nThis extension works only on Linux and Windows.\nOther OSes have not been tested and will not work.\n\nExiting.') + exit() + + interfaceVersion = str(self.options.interfaceVersion).lower() + log ('Inkscape interface will be switched to : ' + interfaceVersion + '\n') + + # Set all folder paths and names + userfolder = subprocess.run(['inkscape', '--user-data-directory'], capture_output=True, text=True).stdout[0:-1]+sep + profilefolder = userfolder[:-1] + '-simpleinkscape' + sep + + # Create ProfileFolder and copy profiles from extensions folder on first run. + if not os.path.isdir (profilefolder): + log ('profile folder not existing. Creating it ...') + os.mkdir(profilefolder) + + extension_dir = os.path.abspath(os.path.join(os.path.abspath(os.path.dirname(__file__)))) #go up to main dir /home//.config/inkscape/extensions/mightyscape-1.X/ + simpleinkscapefolder = extension_dir + sep + 'inkscape-simpleinkscape' + sep + + if os.path.isdir(simpleinkscapefolder): + shutil.copytree(simpleinkscapefolder, profilefolder, dirs_exist_ok=True) + + # Check if profile for chosen interface version exists. + if os.path.isdir (profilefolder + interfaceVersion) == False: + log ('Error!\n\nThe chosen profile folder does not exist in ' + profilefolder) + log ('User interface has not been changed.\n\nExiting.') + exit() + + # Go through list of folders and if they exist in the profile: replace contents + log ('Installing folders:') + for folder in folders: + # Folder exists inside profile? + if os.path.isdir (profilefolder + interfaceVersion + sep + folder): + # Delete folder from userfolder and replace by the one in profile + shutil.rmtree(userfolder + folder, ignore_errors=True) + os.mkdir(userfolder + folder) + log (' ' + userfolder + folder + sep) + shutil.copytree( profilefolder + interfaceVersion + sep + folder + sep, userfolder+folder+sep, dirs_exist_ok=True) + + log('\nSucces!\n\nThe Inkscape interface has been set to ' + interfaceVersion) + log('The changes will become visible after restarting inkscape') + log('\n*** End ***') + exit() + + +if __name__ == "__main__": + myExt = simpleinkscape() + myExt.run() + diff --git a/extensions/fablabchemnitz/sine_and_lace/sine_and_lace.inx b/extensions/fablabchemnitz/sine_and_lace/sine_and_lace.inx new file mode 100644 index 00000000..a80f7a3c --- /dev/null +++ b/extensions/fablabchemnitz/sine_and_lace/sine_and_lace.inx @@ -0,0 +1,47 @@ + + + Sine And Lace + fablabchemnitz.de.sine_and_lace + + + 3200 + 100 + 10 + 0 + 0 + 2 + 1000 + 0 + 500 + true + false + + + + + + + path + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/sine_and_lace/sine_and_lace.py b/extensions/fablabchemnitz/sine_and_lace/sine_and_lace.py new file mode 100644 index 00000000..85d0b72d --- /dev/null +++ b/extensions/fablabchemnitz/sine_and_lace/sine_and_lace.py @@ -0,0 +1,332 @@ +#!/usr/bin/env python3 + +# eggbot_sineandlace.py +# +# Generate sinusoidal and "lace" curves. The curves are described in SVG +# along with the data necessary to regenerate them. The same data can be +# used to generate new curves which are bounded by a pair of previously +# generated curves. + +# Written by Daniel C. Newman for the Eggbot Project +# dan newman @ mtbaldy us +# Last updated 28 November 2010 +# 15 October 2010 + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +from math import pi, cos, sin + +from lxml import etree +import inkex +from inkex.paths import Path + +VERSION = 1 + + +def parseDesc(str): + """ + Create a dictionary from string description + """ + + if str is None: + return {} + else: + return dict([tok.split(':') for tok in str.split(';') if len(tok)]) + + +def formatDesc(d): + """ + Format an inline name1:value1;name2:value2;... style attribute value + from a dictionary + """ + + return ';'.join([atr + ':' + str(val) for atr, val in d.iteritems()]) + + +def drawSine(cycles=8, rn=0, rm=0, nPoints=50, offset=None, + height=200, width=3200, rescale=0.98, bound1='', bound2='', fun='sine', spline=True): + """ + cycles + Number of periods to plot within the rectangle of width 'width' + + rn, rm + Start the function (on the left edge) at the value x = 2 * pi * rn / rm. + When rm = 0, function is started at x = 0. + + nPoints + The number of points to sample the function at. Since the function is + approximated using Bezier cubic splines, this isn't the number of points + to plot. + + offset + (x, y) coordinate of the lower left corner of the bounding rectangle + in which to plot the function. + + height, width + The height and width of the rectangle in which to plot the function. + Ignored when bounding functions, bound1 and bound2, are supplied. + + rescale + Multiplicative Y-scaling factor by which to rescale the plotted function + so that it does not fully reach the vertical limits of its bounds. This + aids in Eggbot plots by preventing lines from touching and overlapping. + + bound1, bound2 + Descriptions of upper and lower bounding functions by which to limit the + vertical range of the function to be plotted. + + fun + May be either 'sine' or 'lace'. + """ + + """ + A complicated way of plotting y = sin(x) + + Complicated because we wish to generate the sine wave using a + parametric representation. For plotting a single sine wave in + Cartesian coordinates, this is overkill. However, it's useful + for when we want to compress and expand the amplitude of the + sine wave in accord with upper and lower boundaries which themselves + are functions. By parameterizing everything in sight with the + same parameter s and restricting s to the range [0, 1], our life + is made much easier. + """ + if offset is None: + offset = [0, 0] + + bounded = False + + if bound1 and bound2: + + func = parseDesc(bound1) + if len(func) == 0: + return None, None + m1 = int(func['rm']) + if m1 == 0: + x_min1 = 0.0 + else: + x_min1 = 2 * pi * float(func['rn']) / float(m1) + x_max1 = x_min1 + 2 * pi * float(func['cycles']) + y_min1 = -1.0 + y_max1 = 1.0 + y_scale1 = float(func['height']) / (y_max1 - y_min1) + y_offset1 = float(func['y']) + Y1s = lambda s: y_offset1 - y_scale1 * sin(x_min1 + (x_max1 - x_min1) * s) + + func = parseDesc(bound2) + if len(func) == 0: + return None, None + m2 = int(func['rm']) + if m2 == 0: + x_min2 = 0.0 + else: + x_min2 = 2 * pi * float(func['rn']) / float(m2) + x_max2 = x_min2 + 2 * pi * float(func['cycles']) + y_min2 = -1.0 + y_max2 = 1.0 + y_scale2 = float(func['height']) / (y_max2 - y_min2) + y_offset2 = float(func['y']) + Y2s = lambda s: y_offset2 - y_scale2 * sin(x_min2 + (x_max2 - x_min2) * s) + + bounded = True + + rescale = float(rescale) + x_offset = float(offset[0]) + y_offset = float(offset[1]) + + # Each cycle is 2pi + r = 2 * pi * float(cycles) + if (int(rm) == 0) or (int(rn) == 0): + x_min = 0.0 + else: + x_min = 2 * pi * float(rn) / float(rm) + x_max = x_min + r + x_scale = float(width) / r # width / ( x_max - x_min ) + + y_min = -1.0 + y_max = 1.0 + y_scale = float(height) / (y_max - y_min) + + # Our parametric equations which map the results to our drawing window + # Note the "-y_scale" that's because in SVG, the y-axis runs "backwards" + if not fun: + fun = 'sine' + fun = fun.lower() + if fun == 'sine': + Xs = lambda s: x_offset + x_scale * (x_max - x_min) * s + Ys = lambda s: y_offset - y_scale * sin(x_min + (x_max - x_min) * s) + dYdXs = lambda s: -y_scale * cos(x_min + (x_max - x_min) * s) / x_scale + elif fun == 'lace': + Xs = lambda s: x_offset + x_scale * ((x_max - x_min) * s + 2 * sin(2 * s * (x_max - x_min) + pi)) + dXs = lambda s: x_scale * (x_max - x_min) * (1.0 + 4.0 * cos(2 * s * (x_max - x_min) + pi)) + Ys = lambda s: y_offset - y_scale * sin(x_min + (x_max - x_min) * s) + dYs = lambda s: -y_scale * cos(x_min + (x_max - x_min) * s) * (x_max - x_min) + dYdXs = lambda s: dYs(s) / dXs(s) + else: + inkex.errormsg('Unknown function {0} specified'.format(fun)) + return + + # Derivatives: remember the chain rule.... + # dXs = lambda s: x_scale * ( x_max - x_min ) + # dYs = lambda s: -y_scale * cos( x_min + ( x_max - x_min ) * s ) * ( x_max - x_min ) + + # x_third is 1/3 the step size + nPoints = int(nPoints) + + # x_third is 1/3 the step size; note that Xs(1) - Xs(0) = x_scale * ( x_max - x_min ) + x_third = (Xs(1.0) - Xs(0.0)) / float(3 * (nPoints - 1)) + + if bounded: + y_upper = Y2s(0.0) + y_lower = Y1s(0.0) + y_offset = 0.5 * (y_upper + y_lower) + y_upper = y_offset + rescale * (y_upper - y_offset) + y_lower = y_offset + rescale * (y_lower - y_offset) + y_scale = (y_upper - y_lower) / (y_max - y_min) + + x1 = Xs(0.0) + y1 = Ys(0.0) + dx1 = 1.0 + dy1 = dYdXs(0.0) + + # Starting point in the path is ( x, sin(x) ) + path_data = [] + path_data.append(['M', [x1, y1]]) + + for i in range(1, nPoints): + + s = float(i) / float(nPoints - 1) + if bounded: + y_upper = Y2s(s) + y_lower = Y1s(s) + y_offset = 0.5 * (y_upper + y_lower) + y_upper = y_offset + rescale * (y_upper - y_offset) + y_lower = y_offset + rescale * (y_lower - y_offset) + y_scale = (y_upper - y_lower) / (y_max - y_min) + + x2 = Xs(s) + y2 = Ys(s) + dx2 = 1.0 + dy2 = dYdXs(s) + if dy2 > 10.0: + dy2 = 10.0 + elif dy2 < -10.0: + dy2 = -10.0 + + # Add another segment to the plot + if spline: + path_data.append(['C', + [x1 + (dx1 * x_third), + y1 + (dy1 * x_third), + x2 - (dx2 * x_third), + y2 - (dy2 * x_third), + x2, y2]]) + else: + path_data.append(['L', [x1, y1]]) + path_data.append(['L', [x2, y2]]) + x1 = x2 + y1 = y2 + dx1 = dx2 + dy1 = dy2 + + path_desc = \ + 'version:{0:d};style:linear;function:sin(x);'.format(VERSION) + \ + 'cycles:{0:f};rn:{1:d};rm:{2:d};points:{3:d};'.format(cycles, rn, rm, nPoints) + \ + 'width:{0:d};height:{1:d};x:{2:d};y:{3:d}'.format(width, height, offset[0], offset[1]) + + return path_data, path_desc + + +class SineAndLace(inkex.EffectExtension): + nsURI = 'http://sample.com/ns' + nsPrefix = 'doof' + + def add_arguments(self, pars): + pars.add_argument("--tab", help="The active tab when Apply was pressed") + pars.add_argument('--fCycles', type=float, default=10.0, help='Number of cycles (periods)') + pars.add_argument('--nrN', type=int, default=0, help='Start x at 2 * pi * n / m') + pars.add_argument('--nrM', type=int, default=0, help='Start x at 2 * pi * n / m') + pars.add_argument('--fRecess', type=float, default=2.0, help='Recede from envelope by factor') + pars.add_argument("--nSamples", type=int, default=50.0, help="Number of points to sample") + pars.add_argument("--nWidth", type=int, default=3200, help="Width in pixels") + pars.add_argument("--nHeight", type=int, default=100, help="Height in pixels") + pars.add_argument("--nOffsetX", type=int, default=0, help="Starting x coordinate (pixels)") + pars.add_argument("--nOffsetY", type=int, default=400, help="Starting y coordinate (pixels)") + pars.add_argument('--bLace', type=inkex.Boolean, default=False, help='Lace') + pars.add_argument('--bSpline', type=inkex.Boolean, default=True, help='Spline') + + self.recess = 0.95 + + def effect(self): + + inkex.NSS[self.nsPrefix] = self.nsURI + + if self.options.bLace: + func = 'lace' + else: + func = 'sine' + + f_recess = 1.0 + if self.options.fRecess > 0.0: + f_recess = 1.0 - self.options.fRecess / 100.0 + if f_recess <= 0.0: + f_recess = 0.0 + + if self.options.ids: + if len(self.options.ids) == 2: + desc1 = self.selected[self.options.ids[0]].get(inkex.addNS('desc', self.nsPrefix)) + desc2 = self.selected[self.options.ids[1]].get(inkex.addNS('desc', self.nsPrefix)) + if (not desc1) or (not desc2): + inkex.errormsg('Selected objects do not smell right') + return + path_data, path_desc = drawSine(self.options.fCycles, + self.options.nrN, + self.options.nrM, + self.options.nSamples, + [self.options.nOffsetX, self.options.nOffsetY], + self.options.nHeight, + self.options.nWidth, + f_recess, + desc1, desc2, func, self.options.bSpline) + else: + inkex.errormsg('Exactly two objects must be selected') + return + else: + self.document.getroot().set(inkex.addNS(self.nsPrefix, 'xmlns'), self.nsURI) + + path_data, path_desc = drawSine(self.options.fCycles, + self.options.nrN, + self.options.nrM, + self.options.nSamples, + [self.options.nOffsetX, self.options.nOffsetY], + self.options.nHeight, + self.options.nWidth, + f_recess, + '', + '', + func, + self.options.bSpline) + + style = {'stroke': 'black', 'stroke-width': '1', 'fill': 'none'} + path_attrs = { + 'style': str(inkex.Style(style)), + 'd': str(Path(path_data)), + inkex.addNS('desc', self.nsPrefix): path_desc} + newpath = etree.SubElement(self.document.getroot(), + inkex.addNS('path', 'svg'), path_attrs, nsmap=inkex.NSS) + + +if __name__ == '__main__': + SineAndLace().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/slic3r_stl_input/slic3r_stl_input.inx b/extensions/fablabchemnitz/slic3r_stl_input/slic3r_stl_input.inx new file mode 100644 index 00000000..4642ce13 --- /dev/null +++ b/extensions/fablabchemnitz/slic3r_stl_input/slic3r_stl_input.inx @@ -0,0 +1,123 @@ + + + Slic3r STL Input + fablabchemnitz.de.slic3r_stl_input + + + + /path/to/slic3r/v1.3.1-dev + + /your/object/file.stl + 200 + 1.000 + + + + 1.0 + 0.0 + 0.0 + 0.0 + false + false + + + + + true + 0.0 + + + + + + + + false + false + + + + + + + + false + 1943148287 + 0.0 + 1.0 + + + + + + + + + true + 879076607 + + + + + 1.0 + 1.0 + + + + + + + + 0.0 + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ../000_about_fablabchemnitz.svg + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/slic3r_stl_input/slic3r_stl_input.py b/extensions/fablabchemnitz/slic3r_stl_input/slic3r_stl_input.py new file mode 100644 index 00000000..782e0cc5 --- /dev/null +++ b/extensions/fablabchemnitz/slic3r_stl_input/slic3r_stl_input.py @@ -0,0 +1,419 @@ +#!/usr/bin/env python3 +''' +(C) 2018 Juergen Weigert , distribute under GPLv2 or ask + +This is an input extension for inkscape to read STL files. + +Requires: (python-lxml | python3-lxml), slic3r +For optional(!) rotation support: + Requires: (python-numpy-stl | python3-numpy-stl) + If you get ImportError: cannot import name 'mesh' + although an stl module is installed, then you have the wrong stl module. + Try 'pip3 uninstall stl; pip3 install numpy-stl' + +2018-12-22 jw, v0.1 Initial draught + v0.1 First working standalone tool. +2018-12-26 jw, v0.3 Mesh rotation support via numpy-stl. Fully optional. + v0.4 Works fine as an inkscape input extension under Linux. +2019-03-01 jw, v0.5 numbers and center option added. +2019-07-17 jw, v0.6 fixed ry rotation. + +2021-05-14 - Mario Voigt: + - changed extension to support ply,off,obj,stl by using OpenMesh + - moved extension to sub menu structure (allows preview) + - added different options + +#Notes + * requires exactly Slic3r-1.3.1-dev + -> https://dl.slic3r.org/dev/linux/ + -> https://dl.slic3r.org/dev/win/ + * Notes to other Slic3r forks + * does not work with Slic3r PE (Prusa Edition) (no export-svg option) + * does not work with PrusaSlicer (no export-svg option) + * does not work with IceSL slicer (https://icesl.loria.fr; no command line options) + +#ToDos + * use svg_pathstats(path_d): to compute bounding boxes. + * fix bbox calc in Linux systems: ValueError: b'/tmp/.mount_Slic3rQi5kIt/AppRun: line 65: 10415 Segmentation fault + (core dumped) LD_LIBRARY_PATH="$DIR/usr/lib:${LD_LIBRARY_PATH}" "${DIR}/usr/bin/perl-local" -I"${DIR}/usr/lib/local-lib/lib/perl5" + "${DIR}/usr/bin/slic3r.pl" --gui "$@"\n' + * add some algorithm to handle fill handling for alternating paths. Issue at the moment: Imagine a char "A" in 3D. + It conatains an outline and a line path. Because those two paths are not combined both get filled but they do not render the char A correctly + +''' +import sys +import os +import re +import subprocess +from lxml import etree +from subprocess import Popen, PIPE +import inkex +from inkex import Color, Transform +import tempfile +import openmesh as om + + +sys_platform = sys.platform.lower() +if sys_platform.startswith('win'): + slic3r = 'slic3r-console.exe' +elif sys_platform.startswith('darwin'): + slic3r = 'slic3r' +else: # Linux + slic3r = os.environ['HOME']+ '/Downloads/Slic3r-1.3.1-dev-x86_64.AppImage' + if not os.path.exists(slic3r): + slic3r = 'slic3r' + +class SlicerSTLInput(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument('--tab') + + #Processor + pars.add_argument('--slic3r_cmd', default="slic3r", help="Command to invoke slic3r.") + + #Input + pars.add_argument('--inputfile', help='Input file (OBJ/OFF/PLY/STL)') + pars.add_argument('--scalefactor', type=float, default=1.0, help='Scale the model to custom size') + pars.add_argument("--max_num_faces", type=int, default=200, help="If the STL file has too much detail it contains a large number of faces. This will make processing extremely slow. So we can limit it.") + pars.add_argument('--layer_height', type=float, default=1.000, help='slic3r layer height, probably in mm. Default: per slic3r config') + + #Transforms + pars.add_argument('--rx', type=float, default=None, help='Rotate STL object around X-Axis before importing.') + pars.add_argument('--ry', type=float, default=None, help='Rotate STL object around Y-Axis before importing.') + pars.add_argument('--rz', type=float, default=None, help='Rotate STL object around Z-Axis before importing.') + pars.add_argument('--mirrorx', type=inkex.Boolean, default=False, help='Mirror X') + pars.add_argument('--mirrory', type=inkex.Boolean, default=False, help='Mirror Y') + + #Output + pars.add_argument('--numbers', type=inkex.Boolean, default=False, help='Add layer numbers.') + pars.add_argument('--center', type=inkex.Boolean, default=False, help='Add center marks.') + pars.add_argument("--resizetoimport", type=inkex.Boolean, default=True, help="Resize the canvas to the imported drawing's bounding box") + pars.add_argument("--extraborder", type=float, default=0.0) + pars.add_argument("--extraborder_units") + + #Style + pars.add_argument("--use_fill_color", type=inkex.Boolean, default=False, help="Use fill color") + pars.add_argument("--fill_color", type=Color, default='1943148287', help="Fill color") + pars.add_argument("--min_fill_opacity", type=float, default=0.0, help="Min fill opacity") + pars.add_argument("--max_fill_opacity", type=float, default=1.0, help="Max fill opacity") + pars.add_argument("--diffuse_fill_opacity", default="regular", help="Diffuse fill opacity per layer") + + pars.add_argument("--use_stroke_color", type=inkex.Boolean, default=True, help="Use stroke color") + pars.add_argument('--stroke_color', type=Color, default='879076607', help="Stroke color") + + pars.add_argument("--min_stroke_width", type=float, default=1.0, help="Min stroke width") + pars.add_argument("--max_stroke_width", type=float, default=1.0, help="Max stroke width") + pars.add_argument("--diffuse_stroke_width", default="regular", help="Diffuse stroke width per layer") + + pars.add_argument("--min_stroke_opacity", type=float, default=0.0, help="Min stroke opacity") + pars.add_argument("--max_stroke_opacity", type=float, default=1.0, help="Max stroke opacity") + pars.add_argument("--diffuse_stroke_opacity", default="regular", help="Diffuse stroke opacity per layer") + + def effect(self): + args = self.options + + if args.min_fill_opacity > args.max_fill_opacity: + inkex.utils.debug("Min fill opacity may not be larger than max fill opacity. Adjust and try again!") + exit(1) + if args.min_stroke_width > args.max_stroke_width: + inkex.utils.debug("Min stroke width may not be larger than max stroke width. Adjust and try again!") + exit(1) + if args.min_stroke_opacity > args.max_stroke_opacity: + inkex.utils.debug("Min stroke opacity may not be larger than max stroke opacity. Adjust and try again!") + exit(1) + + ############################################# + # test slic3r command + ############################################# + if sys_platform.startswith('win'): + # assert we run the commandline version of slic3r + args.slic3r_cmd = re.sub('slic3r(\.exe)?$', 'slic3r-console.exe', args.slic3r_cmd, flags=re.I) + cmd = [args.slic3r_cmd, '--version'] + try: + proc = subprocess.Popen(cmd, shell=False, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + except OSError as e: + hint="Maybe use --slic3r-cmd option?" + inkex.utils.debug("{0}\nCommand failed: errno={1} {2}\n\n{3}".format(' '.join(cmd), e.errno, e.strerror, hint), file=sys.stderr) + sys.exit(1) + stdout, stderr = proc.communicate() + + ############################################# + # prepare STL input (also accept and convert obj, stl, ply, off) + ############################################# + outputfilebase = os.path.splitext(os.path.basename(args.inputfile))[0] + converted_inputfile = os.path.join(tempfile.gettempdir(), outputfilebase + ".stl") + if not os.path.exists(args.inputfile): + inkex.utils.debug("The input file does not exist.") + exit(1) + input_mesh = om.read_trimesh(args.inputfile) + if input_mesh.n_faces() > args.max_num_faces: + inkex.utils.debug("Aborted. Target STL file has " + str(input_mesh.n_faces()) + " faces, but only " + str(args.max_num_faces) + " are allowed.") + exit(1) + om.write_mesh(converted_inputfile, input_mesh) #read + convert, might throw errors; warning. output is ASCII but cannot controlled to be set to binary because om.Options() is not available in python binding yet + if not os.path.exists(converted_inputfile): + inkex.utils.debug("The converted input file does not exist.") + exit(1) + args.inputfile = converted_inputfile #overwrite + + ############################################# + # create the layer slices + ############################################# + svgfile = re.sub('\.stl', '.svg', args.inputfile, flags=re.IGNORECASE) + # option --layer-height does not work. We use --scale instead... + scale = 1.0 / args.layer_height + cmd = [ + args.slic3r_cmd, + '--no-gui', + '--scale', str(scale), + '--rotate-x', str(args.rx), + '--rotate-y', str(args.ry), + '--rotate', str(args.rz), + '--first-layer-height', '0.1mm', + '--export-svg', '-o', svgfile, args.inputfile] + + def scale_points(pts, scale): + """ str='276.422496,309.4 260.209984,309.4 260.209984,209.03 276.422496,209.03' """ + return re.sub('\d*\.\d*', lambda x: str(float(x.group(0))*scale), pts) + + ## CAUTION: keep svg_pathstats() in sync with inkscape-centerlinetrace + def svg_pathstats(path_d): + """ calculate statistics from an svg path: + length (measuring bezier splines as straight lines through the handles). + points (all, including duplicates) + segments (number of not-connected!) path segments. + simple bounding box (ignoring curves of splines, but inclding handles.) + """ + xmin = 1e99 + ymin = 1e99 + xmax = -1e99 + ymax = -1e99 + p_points = 0 + p_length = 0 + p_segments = 0 + + path_d = path_d.lower() + for p in path_d.split('m'): + + pp = re.sub('[cl,]', ' ', p) + pp,closed = re.subn('z\s*$','',pp) + xy = pp.split() + if len(xy) < 2: + # inkex.utils.debug(len(pp)) + # inkex.utils.debug("short path error") + continue + x0 = float(xy[0]) + y0 = float(xy[1]) + if x0 > xmax: xmax = x0 + if x0 < xmin: xmin = x0 + if y0 > ymax: ymax = y0 + if y0 < ymin: ymin = y0 + + p_points += 1 + x = xy[2::2] + y = xy[3::2] + if len(x): + p_segments += 1 + if closed: + x.extend(x0) + y.extend(y0) + + for i in range(len(x)): + p_points += 1 + dx = float(x[i]) - x0 + dy = float(y[i]) - y0 + p_length += math.sqrt( dx * dx + dy * dy ) + x0,y0 = float(x[i]),float(y[i]) + if x0 > xmax: xmax = x0 + if x0 < xmin: xmin = x0 + if y0 > ymax: ymax = y0 + if y0 < ymin: ymin = y0 + + return { 'points':p_points, 'segments':p_segments, 'length':p_length, 'bbox': (xmin,ymin, xmax, ymax) } + + + def bbox_info(slic3r, file): + cmd = [ slic3r, '--no-gui', '--info', file ] + p = Popen(cmd, stdout=PIPE, stderr=PIPE) + out, err = p.communicate() + if len(err) > 0: + raise ValueError(err) + + bb = {} + for l in out.decode().split("\n"): + m = re.match('((min|max)_[xyz])\s*=\s*(.*)', l) + if m: bb[m.group(1)] = float(m.group(3)) + if (len(bb) != 6): + raise ValueError("slic3r --info did not return 6 elements for bbox") + return bb + + if args.center is True: + bb = bbox_info(args.slic3r_cmd, args.inputfile) + # Ouch: bbox info gives us stl coordinates. slic3r translates them into svg px using 75dpi. + cx = (-bb['min_x'] + bb['max_x']) * 0.5 * 1/scale * 25.4 / 75 + cy = (-bb['min_y'] + bb['max_y']) * 0.5 * 1/scale * 25.4 / 75 + + try: + proc = subprocess.Popen(cmd, shell=False, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + except OSError as e: + raise OSError("{0}\nCommand failed: errno={1} {2}".format(' '.join(cmd), e.errno, e.strerror)) + stdout, stderr = proc.communicate() + + if not b'Done.' in stdout: + inkex.utils.debug("Command failed: {0}".format(' '.join(cmd))) + inkex.utils.debug("OUT: " + str(stdout)) + inkex.utils.debug("ERR: " + str(stderr)) + sys.exit(1) + + # slic3r produces correct svg files, but with polygons instead of paths, and with undefined strokes. + # When opened with inkscape, most lines are invisible and polygons cannot be edited. + # To fix these issues, we postprocess the svg file: + # * replace polygon nodes with corresponding path nodes. + # * replace style attribute in polygon nodes with one that has a black stroke + + stream = open(svgfile, 'r') + p = etree.XMLParser(huge_tree=True) + doc = etree.parse(stream, parser=p) + stream.close() + + ## To change the document units to mm, insert directly after the root node: + # e.tag = '{http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd}namedview' + # e.attrib['id'] = "base" + # e.attrib['{http://www.inkscape.org/namespaces/inkscape}document-units'] = "mm" + + totalPolygoncount = 0 + for e in doc.iterfind('//{*}polygon'): + totalPolygoncount += 1 + + polygoncount = 0 + + if args.use_fill_color is False: + fill = "none" + else: + fill = args.fill_color + + for e in doc.iterfind('//{*}polygon'): + polygoncount += 1 + + if args.diffuse_fill_opacity == "front_to_back": + fill_opacity = (args.max_fill_opacity - (polygoncount / totalPolygoncount) * (args.max_fill_opacity - args.min_fill_opacity)) + args.min_fill_opacity + elif args.diffuse_fill_opacity == "back_to_front": + fill_opacity = ((polygoncount / totalPolygoncount) * (args.max_fill_opacity - args.min_fill_opacity)) + args.min_fill_opacity + elif args.diffuse_fill_opacity == "no_diffuse": + fill_opacity = args.max_fill_opacity + else: + inkex.utils.debug("Error: unkown diffuse fill opacity option") + exit(1) + + if args.diffuse_stroke_width == "front_to_back": + stroke_width = (args.max_stroke_width - (polygoncount / totalPolygoncount) * (args.max_stroke_width - args.min_stroke_width)) + args.min_stroke_width + elif args.diffuse_stroke_width == "back_to_front": + stroke_width = ((polygoncount / totalPolygoncount) * (args.max_stroke_width - args.min_stroke_width)) + args.min_stroke_width + elif args.diffuse_stroke_width == "no_diffuse": + stroke_width = args.max_stroke_width + else: + inkex.utils.debug("Error: unkown diffuse fill opacity option") + exit(1) + + if args.diffuse_stroke_opacity == "front_to_back": + stroke_opacity = (args.max_stroke_opacity - (polygoncount / totalPolygoncount) * (args.max_stroke_opacity - args.min_stroke_opacity)) + args.min_stroke_opacity + elif args.diffuse_stroke_opacity == "back_to_front": + stroke_opacity = ((polygoncount / totalPolygoncount) * (args.max_stroke_opacity - args.min_stroke_opacity)) + args.min_stroke_opacity + elif args.diffuse_stroke_opacity == "no_diffuse": + stroke_opacity = args.max_stroke_opacity + else: + inkex.utils.debug("Error: unkown diffuse fill opacity option") + exit(1) + + if args.use_stroke_color is False: + stroke = "" + else: + stroke = "stroke:{}".format(args.stroke_color) + # e.tag = '{http://www.w3.org/2000/svg}polygon' + # e.attrib = {'{http://slic3r.org/namespaces/slic3r}type': 'contour', 'points': '276.422496,309.4 260.209984,309.4 260.209984,209.03 276.422496,209.03', 'style': 'fill: white'} + e.tag = re.sub('polygon$', 'path', e.tag) + e.attrib['id'] = 'polygon%d' % polygoncount + e.attrib['{http://www.inkscape.org/namespaces/inkscape}connector-curvature'] = '0' + e.attrib['style'] = 'fill:{};fill-opacity:{};{};stroke-opacity:{};stroke-width:{}'.format(fill, fill_opacity, stroke, stroke_opacity, stroke_width) + e.attrib['d'] = 'M ' + re.sub(' ', ' L ', scale_points(e.attrib['points'], 1/scale)) + ' Z' + + if args.mirrorx is True: + mx = -1 + else: + mx = +1 + if args.mirrory is True: + my = -1 + else: + my = +1 + + if args.mirrorx is True or args.mirrory is True: + e.attrib['transform'] = 'scale({},{})'.format(mx, my) + del e.attrib['points'] + if e.attrib.get('{http://slic3r.org/namespaces/slic3r}type') == 'contour': + # remove contour, but keep all slic3r:type='hole', whatever it is worth later. + del e.attrib['{http://slic3r.org/namespaces/slic3r}type'] + + layercount = 0 + for e in doc.iterfind('//{*}g'): + if e.attrib['{http://slic3r.org/namespaces/slic3r}z'] and e.attrib['id']: + e.attrib['{http://www.inkscape.org/namespaces/inkscape}label'] = e.attrib['id'] + ' slic3r:z=' + e.attrib['{http://slic3r.org/namespaces/slic3r}z'] + del e.attrib['{http://slic3r.org/namespaces/slic3r}z'] + # for some fun with our inkscape-paths2openscad extension, add sibling to e: + # Depth: 1mm\nOffset: 31mm + desc = etree.Element('{http://www.w3.org/2000/svg}desc') + desc.attrib['id'] = 'descl'+str(layercount) + desc.text = "Depth: %.2fmm\nRaise: %.2fmm\n" % (1/scale, layercount/scale) + e.append(desc) + layercount+=1 + if args.numbers is True: + num = etree.Element('{http://www.w3.org/2000/svg}text') + num.attrib['id'] = 'textnum'+str(layercount) + num.attrib['x'] = str(layercount*2) + num.attrib['y'] = str(layercount*4+10) + num.attrib['style'] = 'fill:#00FF00;fill-opacity:1;stroke:#00FF00;font-family:FreeSans;font-size:10pt;stroke-opacity:1;stroke-width:0.1' + num.text = "%d" % layercount + e.append(num) + if args.center is True: + cc = etree.Element('{http://www.w3.org/2000/svg}path') + cc.attrib['id'] = 'ccross'+str(layercount) + cc.attrib['style'] = 'fill:none;fill-opacity:1;stroke:#0000FF;font-family:FreeSans;font-size:10pt;stroke-opacity:1;stroke-width:0.1' + cc.attrib['d'] = 'M %s,%s v 10 M %s,%s h 10 M %s,%s h 4' % (cx, cy-5, cx-5, cy, cx-2, cy+5) + e.append(cc) + + etree.cleanup_namespaces(doc.getroot(), top_nsmap={ + 'inkscape': 'http://www.inkscape.org/namespaces/inkscape', + 'sodipodi': 'http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd'}) + + #inkex.utils.debug("{0}: {1} polygons in {2} layers converted to paths.".format(svgfile, polygoncount, layercount)) + + if layercount == 0: + inkex.utils.debug("No layers imported. Try to lower your layer height") + exit(1) + #inkex.utils.debug(totalPolygoncount) + if totalPolygoncount == 0: + inkex.utils.debug("No polygons imported (empty groups). Try to lower your layer height") + exit(1) + + stl_group = self.document.getroot().add(inkex.Group(id=self.svg.get_unique_id("slic3r-stl-input-"))) #make a new group at root level + for element in doc.getroot().iter("{http://www.w3.org/2000/svg}g"): + stl_group.append(element) + + #apply scale factor + translation_matrix = [[args.scalefactor, 0.0, 0.0], [0.0, args.scalefactor, 0.0]] + stl_group.transform = Transform(translation_matrix) * stl_group.transform + + #adjust canvas to the inserted unfolding + if args.resizetoimport: + bbox = stl_group.bounding_box() #seems the bbox is not calculated if only one element is in the group. Thats a bug of Inkscape! + if bbox is not None: + namedView = self.document.getroot().find(inkex.addNS('namedview', 'sodipodi')) + root = self.svg.getElement('//svg:svg'); + offset = self.svg.unittouu(str(args.extraborder) + args.extraborder_units) + root.set('viewBox', '%f %f %f %f' % (bbox.left - offset, bbox.top - offset, bbox.width + 2 * offset, bbox.height + 2 * offset)) + root.set('width', "{:0.6f}{}".format(bbox.width + 2 * offset, self.svg.unit)) + root.set('height', "{:0.6f}{}".format(bbox.height + 2 * offset, self.svg.unit)) + else: + inkex.utils.debug("Error resizing to canvas.") + + +if __name__ == '__main__': + SlicerSTLInput().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/slider_electrodes/slider_electrodes.inx b/extensions/fablabchemnitz/slider_electrodes/slider_electrodes.inx new file mode 100644 index 00000000..d813155c --- /dev/null +++ b/extensions/fablabchemnitz/slider_electrodes/slider_electrodes.inx @@ -0,0 +1,18 @@ + + + Slider Electrodes + fablabchemnitz.de.slider_electrodes + 5 + 5 + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/slider_electrodes/slider_electrodes.py b/extensions/fablabchemnitz/slider_electrodes/slider_electrodes.py new file mode 100644 index 00000000..6478101c --- /dev/null +++ b/extensions/fablabchemnitz/slider_electrodes/slider_electrodes.py @@ -0,0 +1,56 @@ +#!/usr/bin/env python3 +from io import StringIO +import inkex +from lxml import etree + +class SliderElectrodes(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument("-c", "--count", type=int, default=5, help="Number of electrodes") + pars.add_argument("-s", "--spikes", type=int, default=5, help="Number of spikes") + + def genPathString(self, bounds, spikeWidth, first=False, last=False): + s = StringIO() + cx = bounds[0] + cy = bounds[1] + stepx = spikeWidth + stepy = (bounds[3] - bounds[1]) / (2.0 * self.options.spikes) + s.write(" M %f, %f " % (bounds[0], bounds[1])) + if first: + s.write(" L %f, %f " % (bounds[0], bounds[3])) + else: + for i in range(self.options.spikes): + s.write(" L %f, %f " % (bounds[0] + stepx, bounds[1] + (2 * i + 1) * stepy)) + s.write(" L %f, %f " % (bounds[0], bounds[1] + (2 * i + 2) * stepy)) + if last: + s.write(" L %f, %f " % (bounds[2], bounds[3])) + s.write(" L %f, %f " % (bounds[2], bounds[1])) + else: + s.write(" L %f, %f " % (bounds[2] - stepx, bounds[3])) + for i in range(self.options.spikes): + s.write(" L %f, %f " % (bounds[2], bounds[3] - (2 * i + 1) * stepy)) + s.write(" L %f, %f " % (bounds[2] - stepx, bounds[3] - (2 * i + 2) * stepy)) + s.write(" Z ") + return s.getvalue() + + def effect(self): + svg = self.document.getroot() + width = self.svg.unittouu(self.document.getroot().get('width')) + height = self.svg.unittouu(self.document.getroot().get('height')) + + group = etree.SubElement(self.svg.get_current_layer(), 'g', {inkex.addNS('label', 'inkscape') : 'Slider electrodes'}) + + eWidth = width / self.options.count + spikeWidth = 0.6 * eWidth + + for eid in range(self.options.count): + if eid == 0: + path = self.genPathString((eid * eWidth, 0, (eid + 1) * eWidth + 0.4 * spikeWidth, height), spikeWidth, first=True) + elif eid == self.options.count - 1: + path = self.genPathString((eid * eWidth - 0.4 * spikeWidth, 0, (eid + 1) * eWidth, height), spikeWidth, last=True) + else: + path = self.genPathString((eid * eWidth - 0.4 * spikeWidth, 0, (eid + 1) * eWidth + 0.4 * spikeWidth, height), spikeWidth) + e = etree.SubElement(group, inkex.addNS('path', 'svg'), {'style':str(inkex.Style({'stroke':'none','fill' :'#000000'})),'d' : path}) + +if __name__ == '__main__': + effect = SliderElectrodes().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/snap_object_points/snap_object_points.inx b/extensions/fablabchemnitz/snap_object_points/snap_object_points.inx new file mode 100644 index 00000000..8fb65b63 --- /dev/null +++ b/extensions/fablabchemnitz/snap_object_points/snap_object_points.inx @@ -0,0 +1,21 @@ + + + Snap Object Points + fablabchemnitz.de.snap_object_points + 25 + true + true + false + + + path + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/snap_object_points/snap_object_points.py b/extensions/fablabchemnitz/snap_object_points/snap_object_points.py new file mode 100644 index 00000000..bde40dc0 --- /dev/null +++ b/extensions/fablabchemnitz/snap_object_points/snap_object_points.py @@ -0,0 +1,136 @@ +#!/usr/bin/env python3 + +''' +Copyright (C) 2020 Scott Pakin, scott-ink@pakin.org + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301, USA. + +''' + +from collections import defaultdict +import inkex +from inkex.paths import Arc, Curve, Horz, Line, Move, Quadratic, Smooth, TepidQuadratic, Vert, ZoneClose + + +class SnapObjectPoints(inkex.EffectExtension): + "Snap the points on multiple paths towards each other." + + def add_arguments(self, pars): + pars.add_argument('--max_dist', type=float, default=25.0, help='Maximum distance to be considered a "nearby" point') + pars.add_argument('--controls', type=inkex.Boolean, default=True, help='Snap control points') + pars.add_argument('--ends', type=inkex.Boolean, default=True, help='Snap endpoints') + pars.add_argument('--first_only', type=inkex.Boolean, default=True, help='Modify only the first selected path') + + def _bin_points(self): + "Associate each path ID with a list of control points and a list of endpoints." + cpoints = defaultdict(list) + epoints = defaultdict(list) + for node in self.svg.selection.filter(inkex.PathElement).values(): + for cmd in node.path.to_absolute().proxy_iterator(): + pid = node.get_id() + cpoints[pid].extend(cmd.control_points) + epoints[pid].append(cmd.end_point) + return cpoints, epoints + + def _find_nearest(self, pid, x0, y0, other_points): + '''Find the nearest neighbor to a given point, and return the midpoint + of the given point and its neighbor.''' + max_dist2 = self.options.max_dist**2 # Work with squares instead of wasting time on square roots. + bx, by = x0, y0 # Best new point + best_dist2 = max_dist2 # Minimal distance observed from (x0, y0) + for k, pts in other_points.items(): + if k == pid: + continue # Don't compare to our own points. + for vec in pts: + x1, y1 = vec.x, vec.y + dist2 = (x1 - x0)**2 + (y1 - y0)**2 # Squared distance + if dist2 > best_dist2: + continue # Not the nearest point + best_dist2 = dist2 + bx, by = x1, y1 + return (x0 + bx)/2, (y0 + by)/2 + + def _simplify_paths(self): + 'Make all commands absolute, and replace Vert and Horz commands with Line.' + for node in self.svg.selection.filter(inkex.PathElement).values(): + path = node.path.to_absolute() + new_path = [] + prev = inkex.Vector2d() + prev_prev = inkex.Vector2d() + first = inkex.Vector2d() + for i, cmd in enumerate(path): + if i == 0: + first = cmd.end_point(first, prev) + prev, prev_prev = first, first + if isinstance(cmd, Vert): + cmd = cmd.to_line(prev) + elif isinstance(cmd, Horz): + cmd = cmd.to_line(prev) + new_path.append(cmd) + if isinstance(cmd, (Curve, Quadratic, Smooth, TepidQuadratic)): + prev_prev = list(cmd.control_points(first, prev, prev_prev))[-2] + prev = cmd.end_point(first, prev) + node.path = new_path + + def effect(self): + """Snap control points to other objects' control points and endpoints + to other objects' endpoints.""" + # This function uses an O(n^2) algorithm, which shouldn't be too slow + # for typical point counts. + # + # As a preprocessing step, we first simplify the paths to reduce the + # number of special cases we'll need to deal with. Then, we associate + # each path with all of its control points and endpoints. + if len(self.svg.selection.filter(inkex.PathElement)) < 2: + raise inkex.utils.AbortExtension(_('Snap Object Points requires that at least two paths be selected.')) + self._simplify_paths() + cpoints, epoints = self._bin_points() + + + + # Process in turn each command on each path. + for node in self.svg.selection.filter(inkex.PathElement).values(): + pid = node.get_id() + path = node.path + new_path = [] + for cmd in path: + args = cmd.args + new_args = list(args) + na = len(args) + if isinstance(cmd, (Curve, Line, Move, Quadratic, Smooth, TepidQuadratic)): + # Zero or more control points followed by an endpoint. + if self.options.controls: + for i in range(0, na - 2, 2): + new_args[i], new_args[i + 1] = self._find_nearest(pid, args[i], args[i + 1], cpoints) + if self.options.ends: + new_args[na - 2], new_args[na - 1] = self._find_nearest(pid, args[na - 2], args[na - 1], epoints) + elif isinstance(cmd, ZoneClose): + # No arguments at all. + pass + elif isinstance(cmd, Arc): + # Non-coordinates followed by an endpoint. + if self.options.ends: + new_args[na - 2], new_args[na - 1] = self._find_nearest(pid, args[na - 2], args[na - 1], epoints) + else: + # Unexpected command. + inkex.errormsg(_('Unexpected path command "%s"' % cmd.name)) + new_path.append(cmd.__class__(*new_args)) + node.path = new_path + if self.options.first_only: + break + +if __name__ == '__main__': + SnapObjectPoints().run() diff --git a/extensions/fablabchemnitz/source_code_text/source_code_text.inx b/extensions/fablabchemnitz/source_code_text/source_code_text.inx new file mode 100644 index 00000000..693dac30 --- /dev/null +++ b/extensions/fablabchemnitz/source_code_text/source_code_text.inx @@ -0,0 +1,22 @@ + + + Source Code Text + fablabchemnitz.de.source_code_text + C:\Users\ + py + 0 + 1 + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/source_code_text/source_code_text.py b/extensions/fablabchemnitz/source_code_text/source_code_text.py new file mode 100644 index 00000000..548375b9 --- /dev/null +++ b/extensions/fablabchemnitz/source_code_text/source_code_text.py @@ -0,0 +1,72 @@ +#!/usr/bin/env python3 + +import os +import re +import random +import inkex +from lxml import etree + +class SourceCodeText(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument("--directory", default='~/', help="Default directory") + pars.add_argument("--pattern", default='py', help="File extension pattern") + pars.add_argument("--wordsperpara", type=int, default=0, help="Maximum words per paragraph") + pars.add_argument("--numparas", type=int, default=1, help="Number of paragraphs") + + def text_generation(self): + #Get all the matching files. Then yield words one at a time. This can take a while if there are a lot of files, but shouldn't be too bad. + matcher = re.compile('.+\.{}$'.format(self.options.pattern)) + matched_files = [] + for root, _, names in os.walk(os.path.expanduser(self.options.directory)): + for name in names: + if matcher.match(name): + matched_files.append(os.path.join(root, name)) + + random.shuffle(matched_files) + for path in matched_files: + file = open(path) + for word in file.read().split(): + yield word + file.close() + def add_text(self, node): + #Add the text to the node + word_generator = self.text_generation() + for _ in range(self.options.numparas): + words = [] + para = etree.SubElement(node, inkex.addNS('flowPara','svg')) + if self.options.wordsperpara: + try: + for _, word in zip(range(self.options.wordsperpara), word_generator): + words.append(word_generator.next()) + except: + pass + else: + words = word_generator + + if words: + para.text = ' '.join(words) + etree.SubElement(node, inkex.addNS('flowPara','svg')) + else: + break + + def effect(self): + found=0 + for id, node in self.svg.selected.items(): + if node.tag == inkex.addNS('flowRoot','svg'): + found+=1 + if found==1: + self.addText(node) + if not found: + #inkex.debug('No "flowRoot" elements selected. Unable to add text.') + svg=self.document.getroot() + gattribs = {inkex.addNS('label','inkscape'):'lorem ipsum',inkex.addNS('groupmode','inkscape'):'layer'} + g=etree.SubElement(svg,inkex.addNS('g','svg'),gattribs) + flowRoot=etree.SubElement(g,inkex.addNS('flowRoot','svg'),{inkex.addNS('space','xml'):'preserve'}) + flowRegion=etree.SubElement(flowRoot,inkex.addNS('flowRegion','svg')) + rattribs = {'x':'0','y':'0','width':svg.get('width'),'height':svg.get('height')} + rect=etree.SubElement(flowRegion,inkex.addNS('rect','svg'),rattribs) + self.add_text(flowRoot) + +if __name__ == '__main__': + SourceCodeText().run() diff --git a/extensions/fablabchemnitz/spirograph/inkscapeMadeEasy/inkscapeMadeEasy_Base.py b/extensions/fablabchemnitz/spirograph/inkscapeMadeEasy/inkscapeMadeEasy_Base.py new file mode 100644 index 00000000..efeeb980 --- /dev/null +++ b/extensions/fablabchemnitz/spirograph/inkscapeMadeEasy/inkscapeMadeEasy_Base.py @@ -0,0 +1,1307 @@ +#!/usr/bin/python + +# ----------------------------------------------------------------------------- +# +# inkscapeMadeEasy: - Helper module that extends Aaron Spike's inkex.py module, +# focusing productivity in inkscape extension development +# +# Copyright (C) 2016 by Fernando Moura +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +# ----------------------------------------------------------------------------- + +import math +import os +import re +import sys +from copy import deepcopy + +import numpy as np +from lxml import etree + +import inkex + + +class inkscapeMadeEasy(inkex.Effect): + + def __init__(self): + inkex.Effect.__init__(self) + self.inkscapeResolution_dpi = 96.0 # number of pixels per inch + + resolution_in = self.inkscapeResolution_dpi + resolution_mm = self.inkscapeResolution_dpi / 25.4 + + self.unitsDict = {'mm': resolution_mm, # 25.4mm per inch + 'cm': resolution_mm * 10.0, # 1cm = 10mm + 'm': resolution_mm * 1.0e3, # 1m = 1000mm + 'km': resolution_mm * 1.0e6, # 1km = 1e6mm + 'in': resolution_in, # 1in = 96px + 'ft': resolution_in * 12.0, # foot = 12*in + 'yd': resolution_in * 12.0 * 3.0, # yard = 3*ft + 'pt': resolution_in / 72.0, # point 1pt = 1/72th of an inch + 'px': 1.0, 'pc': resolution_in / 6.0} # picas 1pc = 1/6th of and inch + + self.blankSVG = """ + + + + + + + image/svg+xml + + + + + + + + """ + # --------------------------------------------- + def bool(self,valueStr): + """ + ArgParser function to turn a boolean string into a python boolean + + :param valueStr: string representing a boolean. Valid values: 'true','false' with any letter capitalization + :type valueStr: string + + :returns: boolean value + :rtype: bool + + .. note:: This function was copied from inkex.utils.py to avoid having to import inkex.py in your project just to use inkex.Boolean in ``arg_parser.add_argument``. You can pass this function in ``arg_parser.add_argument`` method when dealing with boolean values. See :ref:`minimalExample` section for a good example. + + **Example** + + In your ``__init__`` function, ``arg_parser.add_argument`` requires a callable to convert string to bool when dealing with bool variables. See :ref:`minimalExample` section for a good example. + + >>> self.arg_parser.add_argument("--boolVariable", type=self.bool, dest="boolVariable", default=False) + + """ + if valueStr.upper() == 'TRUE': + return True + elif valueStr.upper() == 'FALSE': + return False + return None + + # --------------------------------------------- + def displayMsg(self, msg): + """Display a message to the user. + + :param msg: message + :type msg: string + + :returns: nothing + :rtype: - + + """ + sys.stderr.write(msg + '\n') + + # --------------------------------------------- + def getBasicLatexPackagesFile(self): + """Return the full path of the ``basicLatexPackages.tex`` file with commonly used Latex packages + + The default contents of the ``basicLatexPackages.tex`` is:: + + \\usepackage{amsmath,amsthm,amsbsy,amsfonts,amssymb} + \\usepackage[per=slash]{siunitx} + \\usepackage{steinmetz} + + :returns: Full path of the file with commonly used Latex packages + :rtype: string + + .. note:: You can add other packages to the file ``basicLatexPackages.tex``. + + """ + directory = os.getcwd() + return os.path.abspath(directory + '/../inkscapeMadeEasy/basicLatexPackages.tex') + + # --------------------------------------------- + def Dump(self, obj, file='./dump_file.txt', mode='w'): + """Function to easily output the result of ``str(obj)`` to a file + + :param obj: python object to sent to a file. Any object can be used, as long as ``str(obj)`` is implemented (see ``__str__()`` metaclass definition of your object) + :param file: file path. Default: ``./dump_file.txt`` + :param mode: writing mode of the file Default: ``w`` (write) + :type obj: any + :type file: string + :type mode: string + :returns: nothing + :rtype: - + + .. note:: This function was created to help debugging the code while it is running under inkscape. Since inkscape does not possess a terminal as today (2016), this function overcomes partially the issue of sending things to stdout by dumping result of the function ``str(obj)`` in a text file. + + **Example** + + >>> vector1=[1,2,3,4,5,6] + >>> self.Dump(vector1,file='~/temporary.txt',mode='w') # writes the list to a file + >>> vector2=[7,8,9,10] + >>> self.Dump(vector2,file='~/temporary.txt',mode='a') # append the list to a file + """ + with open(file, mode) as file: + file.write(str(obj) + '\n') + + # --------------------------------------------- + def removeElement(self, element): + """Remove one element (can be a gropu) of the document. + + If the parent of the removed element is a group and has no other children, then the parent group is also removed. + + :param element: inkscape element object to be removed. If the element is a group, then all its chidren are also removed. + :type element: inkscape element object + :returns: nothing + :rtype: - + + **Example** + + >>> rootLayer = self.document.getroot() # retrieves the root layer of the file + >>> groupA = self.createGroup(rootLayer,label='temp') # creates a group inside rootLayer + >>> line1 = inkDraw.line.relCoords(groupA, [[5,0]],[0,0]) # creates a line in groupA + >>> line2 = inkDraw.line.relCoords(rootLayer, [[5,0]],[0,0]) # creates a line in rootLayer + >>> line3 = inkDraw.line.relCoords(groupA, [[15,0]],[10,0]) # creates a line in groupA + >>> self.removeElement(line1) # removes line 1 + >>> self.removeElement(line2) # removes line 2 + >>> self.removeElement(line3) # removes line 3. Also removes groupA since this group has no other children + >>> groupB = self.createGroup(rootLayer,label='temp1') # creates a group inside rootLayer + >>> line4 = inkDraw.line.relCoords(groupB, [[5,0]],[0,0]) # creates a line in groupB + >>> self.removeElement(groupB) # removes group B and all its children + """ + + parent = element.getparent() + + parent.remove(element) + + if parent.tag == 'g' and len(parent.getchildren()) == 0: # if object's parent is a group and has no other children, remove parent too + temp = parent.getparent() + if temp is not None: + temp.remove(parent) + + # --------------------------------------------- + def importSVG(self, parent, fileIn, createGroup=True): + """ Import SVG file into the current document + + This function will all unify the defs node via :meth:`unifyDefs` + + :param parent: parent element where all contents will be placed + :param fileIn: SVG file path + :param createGroup: create a group containing all imported elements. (Default: True) + :type parent: inkscape element object + :type fileIn: string + :type createGroup: bool + :returns: imported element objects. If createGroup==True, returns the group. Otherwise returns a list with all imported elements + :rtype: inkscape element object or list of objects + + **Example** + + >>> rootLayer = self.document.getroot() # retrieves the root layer of the file + >>> imported1 = self.importSVG(rootLayer,'/path/to/file1.svg',True) # import contents of the file and group them. imported1 is the group element + >>> imported2 = self.importSVG(rootLayer,'/path/to/file2.svg',False) # import contents of the file. imported2 is a list of the imported elements + + """ + documentIn = etree.parse(fileIn, parser=etree.XMLParser(huge_tree=True)).getroot() + + if createGroup: + group = self.createGroup(parent, label='importedSVG') + for elem in documentIn: + if elem.tag != inkex.addNS('namedview', 'sodipodi') and elem.tag != inkex.addNS('metadata', 'svg'): + group.append(elem) + self.unifyDefs() + return group + else: + listElements=[] + for elem in documentIn: + if elem.tag != inkex.addNS('namedview', 'sodipodi') and elem.tag != inkex.addNS('metadata', 'svg'): + parent.append(elem) + if elem.tag != inkex.addNS('defs', 'svg'): + listElements.append(elem) + self.unifyDefs() + return listElements + + # --------------------------------------------- + def exportSVG(self, element, fileOut): + """ Export the element (or list of elements) in a new svgfile. + + This function will export the element (or list of elements) to a new SVG file. If a list of elements is passed as argument, all elements in the list will be exported to the same file. + + :param element: element or list of elements to be exported + :param fileOut: file path, including the extension. + :type element: inkscape element object or list of inkscape element objects + :type file: string + :returns: nothing + :rtype: - + + .. note:: Currently (2020), all the defs of the original file will be copied to the new file. Therefore you might want to run the vacuum tool to cleanup the new SVG file ``File > Clean um document`` + + **Example** + + >>> rootLayer = self.document.getroot() # retrieves the root layer of the file + >>> groupA = self.createGroup(rootLayer,label='temp') # creates a group inside rootLayer + >>> groupB = self.createGroup(rootLayer,label='child') # creates a group inside groupA + >>> line1 = inkDraw.line.relCoords(groupA, [[10,0]],[0,0]) # creates a line in groupA + >>> line2 = inkDraw.line.relCoords(groupB, [[20,0]],[0,0]) # creates a line in groupB + >>> self.exportSVG(line1,'path/to/file1.svg') # exports only line1 + >>> self.exportSVG(groupA,'path/to/file2.svg') # exports groupA (and all elements it contais) + >>> self.exportSVG([groupA,groupB],'path/to/file3.svg') # exports groupA and groupB (and all elements they contain) to the same file + + """ + document = etree.fromstring(self.blankSVG.encode('ascii')) + + elem_tmp = deepcopy(element) + # add definitions + defs_tmp = deepcopy(self.getDefinitions()) + document.append(defs_tmp) + + # add elements + if isinstance(elem_tmp, list): + for e in elem_tmp: + document.append(e) + else: + document.append(elem_tmp) + + et = etree.ElementTree(document) + et.write(fileOut, pretty_print=True) + + # --------------------------------------------- + def uniqueIdNumber(self, prefix_id): + """ Generate an unique element ID number with a given prefix ID by adding a numeric suffix + + This function is used to generate a valid unique ID by concatenating a given prefix with a numeric suffix. The overall format is ``prefix-%05d``. + + This function makes sure the ID is unique by checking in ``doc_ids`` member. This function is specially useful for creating an unique ID for markers and other elements in defs. + + :param prefix_id: prefix of the ID + :type prefix_id: string + :returns: the unique ID + :rtype: string + + .. note:: This function has been adapted from inkex.py. However it uses an incremental number method + + **Example** + + >>> a=self.uniqueIdNumber('myName') # a=myName-00001 + >>> b=self.uniqueIdNumber('myName') # b=myName-00002, because myName-00001 is already in use + >>> c=self.uniqueIdNumber('myName') # c=myName-00003, because myName-00001 and myName-00002 are already in use + >>> d=self.uniqueIdNumber('myNameX') # d=myNameX-00001 + + + """ + numberID = 1 + new_id = prefix_id + '-%05d' % numberID + while new_id in self.get_ids(): + numberID += 1 + new_id = prefix_id + '-%05d' % numberID + self.svg.get_ids().add(new_id) + + return new_id + + # --------------------------------------------- + def getDefinitions(self): + """ Return the element of the svg file. + + This function returns the principal element of the current svg file. + + if no can be found, a new empty is created + + :returns: the defs element + :rtype: inkscape element object + + """ + defs = self.getElemFromXpath('/svg:svg//svg:defs') + if defs is None: + defs = etree.SubElement(self.document.getroot(), inkex.addNS('defs', 'svg')) + + return defs + + # --------------------------------------------- + def unifyDefs(self): + """Unify all nodes in a single node. + + :returns: None + :rtype: - + + .. warning:: This function does not check whether the ids are unique! + """ + root = self.getElemFromXpath('/svg:svg') + mainDef = self.getDefinitions() + + for d in root.findall('.//svg:defs', namespaces=inkex.NSS): + if d != mainDef: + for child in d: + mainDef.append(child) + if child.tag == inkex.addNS('g', 'svg') or child.tag == 'g': + self.ungroup(child) + d.getparent().remove(d) + + # --------------------------------------------- + def getDefsByTag(self, tag='marker'): + """ Return a list of elements in of a given a tag. + + :param tag: tag of the element + :type tag: string + + :returns: a list with the def elements + :rtype: list of inkscape elements + + """ + + return self.getDefinitions().findall('.//svg:%s' % tag, namespaces=inkex.NSS) + + # --------------------------------------------- + def getDefsById(self,id): + """ Return a list of elements in of a given (part of) the id + + :param id: (part of the id of the element) + :type tag: string + + :returns: a list with the def elements + :rtype: list of inkscape elements + + """ + + return self.getDefinitions().xpath('./*[contains(@id,"%s")]' % id) + + # --------------------------------------------- + def getElemFromXpath(self, xpath): + """ Return the element from the xml, given its xpath + + :param xpath: xpath of the element to be searched + :type xpath: string + :returns: inkscape element object + :rtype: inkscape element object + + **Example** + + >>> name = self.getElemFromXpath('/svg:svg//svg:defs') # returns the list of definitions of the document + + """ + return self.svg.getElement(xpath) + + # --------------------------------------------- + def getElemAttrib(self, elem, attribName): + """ Return the atribute of one element, given the atribute name + + :param elem: element under consideration + :param attribName: attribute to be searched. Format: namespace:attrName + :type elem: inkscape element object + :type attribName: string + :returns: attribute + :rtype: string + + **Example** + + >>> elem= self.getElemFromXpath('/svg:svg') # first get the element. In this example, the entire document + >>> docNAme = self.getElemAttrib(elem,'sodipodi:docname') # now get the name of the document, an attribute of svg:svg + """ + # splits namespace and attrib name + atribList = attribName.split(':') + + if len(atribList) == 1: # if has no namespace + attrib = attribName + else: # if has namespace + namespace = inkex.NSS[atribList[0]] + attrib = '{%s}' % namespace + atribList[1] + + return elem.attrib[attrib] + + # --------------------------------------------- + def getDocumentScaleFactor(self): + """Return the scale factor of the document. + + The scale factor is defined as + + .. math:: S=\\frac{\\text{document width}}{\\text{viewbox width}} + + **Example** + + >>> scale = self.getDocumentScaleFactor() + """ + + try: + elem = self.getElemFromXpath('/svg:svg') + width = float(self.getElemAttrib(elem, 'width').replace(self.documentUnit, '')) + + viewBox = self.getElemFromXpath('/svg:svg') + viewBox_width = float(self.getElemAttrib(viewBox, 'viewBox').split(' ')[2]) + + doc_scale = viewBox_width / width + except: + doc_scale = 1.0 + + return doc_scale + + # --------------------------------------------- + def getDocumentName(self): + """Return the name of the document + + :returns: fileName + :rtype: string + + **Example** + + >>> name = self.getDocumentName() + + """ + elem = self.getElemFromXpath('/svg:svg') + try: + fileName = self.getElemAttrib(elem, 'sodipodi:docname') + except: + fileName = None + return fileName + + # --------------------------------------------- + def getDocumentUnit(self): + """Return the unit of the document + + :returns: unit string code. See table below + :rtype: string + + **Units** + + The list of available units are: + + ================== ============ ============= + Name string code relation + ================== ============ ============= + millimetre mm 1in = 25.4mm + centimetre cm 1cm = 10mm + metre m 1m = 100cm + kilometre km 1km = 1000m + inch in 1in = 96px + foot ft 1ft = 12in + yard yd 1yd = 3ft + point pt 1in = 72pt + pixel px + pica pc 1in = 6pc + ================== ============ ============= + + **Example** + + >>> docunit = self.getDocumentUnit() #returns 'cm', 'mm', etc. + """ + elem = self.getElemFromXpath('/svg:svg/sodipodi:namedview') + try: + unit = self.getElemAttrib(elem, 'inkscape:document-units') + except: + unit = 'px' + return unit + + # --------------------------------------------- + def getcurrentLayer(self): + """Return the current layer of the document + + :returns: Name of the current layer + :rtype: string + + **Example** + + >>> name = self.getcurrentLayer() + """ + return self.svg.get_current_layer() + + # --------------------------------------------- + def abs2relPath(self, element): + abspath = self.getElemAttrib(element, 'sodipodi:absref') + fileName = os.path.basename(abspath) + + # removes sodipodi:absref attribute + namespace = inkex.NSS['sodipodi'] + attrib = '{%s}' % namespace + 'absref' + + element.attrib.pop(attrib, None) + + # adds sodipodi:relref + attrib = '{%s}' % namespace + 'relref' + element.set(attrib, fileName) + + # --------------------------------------------- + def unit2userUnit(self, value, unit_in): + """Convert a value from given unit to inkscape's default unit (px) + + :param value: value to be converted + :param unit_in: input unit string code. See table below + :type value: float + :type unit_in: string + :returns: converted value + :rtype: float + + **Units** + + The list of available units are: + + ================== ============ ============= + Name string code relation + ================== ============ ============= + millimetre mm 1in = 25.4mm + centimetre cm 1cm = 10mm + metre m 1m = 100cm + kilometre km 1km = 1000m + inch in 1in = 96px + foot ft 1ft = 12in + yard yd 1yd = 3ft + point pt 1in = 72pt + pixel px + pica pc 1in = 6pc + ================== ============ ============= + + **Example** + + >>> x_cm = 5.0 + >>> x_px = self.unit2userUnit(x_cm,'cm') # converts 5.0cm -> 188.97px + """ + + return value * self.unitsDict[unit_in.lower()] + + # --------------------------------------------- + def userUnit2unit(self, value, unit_out): + """Convert a value from inkscape's default unit (px) to specified unit + + :param value: value to be converted + :param unit_out: output unit string code. See table below + :type value: float + :type unit_out: string + :returns: converted value + :rtype: float + + **Units** + + The list of available units are: + + ================== ============ ============= + Name string code relation + ================== ============ ============= + millimetre mm 1in = 25.4mm + centimetre cm 1cm = 10mm + metre m 1m = 100cm + kilometre km 1km = 1000m + inch in 1in = 96px + foot ft 1ft = 12in + yard yd 1yd = 3ft + point pt 1in = 72pt + pixel px + pica pc 1in = 6pc + ================== ============ ============= + + **Example** + + >>> x_px = 5.0 + >>> x_cm = self.userUnit2unit(x_px,'cm') # converts 5.0px -> 0.1322cm + """ + return value / float(self.unitsDict[unit_out.lower()]) + + # --------------------------------------------- + def unit2unit(self, value, unit_in, unit_out): + """Convert a value from one unit to another unit + + :param value: value to be converted + :param unit_in: input unit string code. See table below + :param unit_out: output unit string code. See table below + :type value: float + :type unit_in: string + :type unit_out: string + :returns: converted value + :rtype: float + + **Units** + + The list of available units are: + + ================== ============ ============= + Name string code relation + ================== ============ ============= + millimetre mm 1in = 25.4mm + centimetre cm 1cm = 10mm + metre m 1m = 100cm + kilometre km 1km = 1000m + inch in 1in = 96px + foot ft 1ft = 12in + yard yd 1yd = 3ft + point pt 1in = 72pt + pixel px + pica pc 1in = 6pc + ================== ============ ============= + + **Example** + + >>> x_in = 5.0 + >>> x_cm = self.unit2unit(x_in,'in','cm') # converts 5.0in -> 12.7cm + """ + return value * self.unitsDict[unit_in.lower()] / float(self.unitsDict[unit_out.lower()]) + + # --------------------------------------------- + def createGroup(self, parent, label=None): + """Create a new empty group of elements. + + This function creates a new empty group of elements. To create new elements inside this groups you must create them informing the group as the parent element. + + :param parent: parent object of the group. It can be another group or the root element + :param label: label of the group. Default: ``None``. + The label does not have to be unique + :type parent: inkscape element object + :type label: string + :returns: the group object + :rtype: group element + + **Example** + + >>> rootLayer = self.document.getroot() # retrieves the root layer of the file + >>> groupA = self.createGroup(rootLayer,label='temp') # creates a group inside rootLayer + >>> groupB = self.createGroup(groupA,label='child') # creates a group inside groupA + >>> line1 = inkDraw.line.relCoords(groupA, [[10,0]],[0,0]) # creates a line in groupA + >>> line2 = inkDraw.line.relCoords(groupB, [[20,0]],[0,0]) # creates a line in groupB + + """ + if label is not None: + g_attribs = {inkex.addNS('label', 'inkscape'): label} + group = etree.SubElement(parent, 'g', g_attribs) + else: + group = etree.SubElement(parent, 'g') + + return group + + # --------------------------------------------- + def ungroup(self, group): + """Ungroup elements + + The new parent element of the ungrouped elements will be the parent of the removed group. See example below + + :param group: group to be removed + :type group: group element + :returns: list of the elements previously contained in the group + :rtype: list of inkscape object elements + + **Example** + + + >>> rootLayer = self.document.getroot() # retrieves the root layer of the file + >>> groupA = self.createGroup(rootLayer,label='temp') # creates a group inside rootLayer + >>> groupB = self.createGroup(groupA,label='temp') # creates a group inside groupA + >>> line1 = inkDraw.line.relCoords(groupA, [[10,0]],[0,0]) # creates a line in groupA + >>> line2 = inkDraw.line.relCoords(groupB, [[20,0]],[0,0]) # creates a line in groupB + >>> line3 = inkDraw.line.relCoords(groupB, [[30,0]],[0,0]) # creates a line in groupB + >>> # at this point, the file struct is: rootLayer[groupA[ line1, groupB[ line2, line3 ] ]] + >>> elemList = self.ungroup(groupB) # ungroup line2 and line3. elemList is a list containing line2 and line3 elements. + >>> # now the file struct is: rootLayer[groupA[ line1, line2, line3 ]] + """ + + if group.tag == 'g' or group.tag == inkex.addNS('g', 'svg'): # if object is a group + parent = group.getparent() + + listElem=[] + if parent is not None: + for child in group: + parent.append(child) + listElem.append(child) + + self.removeElement(group) + + return listElem + + # --------------------------------------------- + def getTransformMatrix(self, element): + """Return the transformation attribute of the given element and the resulting 3x3 transformation matrix (numpy Array) + + This function is used to extract the transformation operator of a given element. + + :param element: element object with the transformation matrix + :type element: inkscape element object + :returns: list [transfAttrib, transfMatrix] + + - transfAttrib: string containing all transformations as it is in the file + - transfMatrix: numpy array with the resulting 3x3 transformation matrix + :rtype: tuple + + .. note :: If the element does not have any transformation attribute, this function returns: + - transfAttrib='' (empty string) + - transfMatrix= 3x3 identity matrix + """ + + transfAttrib = '' + transfMatrix = np.eye(3) + + if 'transform' in element.attrib: + transfAttrib = element.attrib['transform'] + + if not transfAttrib: + return transfAttrib, transfMatrix + + # split operation into several strings + listOperations = [e + ')' for e in transfAttrib.replace(',', ' ').split(')') if e != ""] + + for operation in listOperations: + if 'translate' in operation: + data = re.compile(r"translate\((.*?\S)\)").match(operation.lstrip()).group(1).split() # retrieves x and y values + x = float(data[0]) + y = float(data[1]) + mat = np.array([[1, 0, x], [0, 1, y], [0, 0, 1]]) + transfMatrix = np.dot(transfMatrix, mat) + + if 'scale' in operation: + data = re.compile(r"scale\((.*?\S)\)").match(operation.lstrip()).group(1).split() # retrieves x and y values + scalex = float(data[0]) + if len(data) == 2: + scaley = float(data[1]) + else: + scaley = scalex + mat = np.diag([scalex, scaley, 1]) + transfMatrix = np.dot(transfMatrix, mat) + + if 'rotate' in operation: + data = re.compile(r"rotate\((.*?\S)\)").match(operation.lstrip()).group(1).split() # retrieves x and y values + angleRad = -float(data[0]) * np.pi / 180.0 # negative angle because inkscape is upside down =( + matRot = np.array([[np.cos(angleRad), np.sin(angleRad), 0], [-np.sin(angleRad), np.cos(angleRad), 0], [0, 0, 1]]) + if len(data) == 3: # must translate before and after rotation + x = float(data[1]) + y = float(data[2]) + matBefore = np.array([[1, 0, x], [0, 1, y], [0, 0, 1]]) # translation before rotation + matAfter = np.array([[1, 0, -x], [0, 1, -y], [0, 0, 1]]) # translation after rotation + matRot = np.dot(matBefore, matRot) + matRot = np.dot(matRot, matAfter) + + transfMatrix = np.dot(transfMatrix, matRot) + + if 'skewX' in operation: + data = re.compile(r"skewX\((.*?\S)\)").match(operation.lstrip()).group(1).split() # retrieves x and y values + angleRad = float(data[0]) * np.pi / 180.0 + mat = np.array([[1, np.tan(angleRad), 0], [0, 1, 0], [0, 0, 1]]) + transfMatrix = np.dot(transfMatrix, mat) + + if 'skewY' in operation: + data = re.compile(r"skewY\((.*?\S)\)").match(operation.lstrip()).group(1).split() # retrieves x and y values + angleRad = float(data[0]) * np.pi / 180.0 + mat = np.array([[1, 0, 0], [np.tan(angleRad), 1, 0], [0, 0, 1]]) + transfMatrix = np.dot(transfMatrix, mat) + + if 'matrix' in operation: + data = re.compile(r"matrix\((.*?\S)\)").match(operation.lstrip()).group(1).split() # retrieves x and y values + a = float(data[0]) + b = float(data[1]) + c = float(data[2]) + d = float(data[3]) + e = float(data[4]) + f = float(data[5]) + mat = np.array([[a, c, e], [b, d, f], [0, 0, 1]]) + transfMatrix = np.dot(transfMatrix, mat) + + return transfAttrib, transfMatrix + + # --------------------------------------------- + def rotateElement(self, element, center, angleDeg): + """apply a rotation to the element using the transformation matrix attribute. + + It is possible to rotate isolated elements or groups. + + :param element: element object to be rotated + :param center: center point of rotation + :param angleDeg: angle of rotation in degrees, counter-clockwise direction + :type element: inkscape element object + :type center: list + :type angleDeg: float + :returns: nothing + :rtype: - + + **Example** + + >>> rootLayer = self.document.getroot() # retrieves the root layer of the file + >>> groupA = self.createGroup(rootLayer,label='temp') # creates a group inside rootLayer + >>> line1 = inkDraw.line.relCoords(groupA, [[5,0]],[0,0]) # creates a line in groupA + >>> line2 = inkDraw.line.relCoords(rootLayer, [[5,0]],[0,0]) # creates a line in rootLayer + >>> self.rotateElement(line2,[0,0],120) # rotates line2 120 degrees around center x=0,y=0 + >>> self.rotateElement(groupA,[1,1],-90) # rotates groupA -90 degrees around center x=1,y=1 + """ + transfString = '' + + if angleDeg == 0: + return + + if 'transform' in element.attrib: + transfString = element.attrib['transform'] + + # if transform attribute is present, we must add the new rotation + if transfString: + newTransform = 'rotate(%f %f %f) %s' % (-angleDeg, center[0], center[1], transfString) # negative angle bc inkscape is upside down + else: # if no transform attribute was found + newTransform = 'rotate(%f %f %f)' % (-angleDeg, center[0], center[1]) # negative angle bc inkscape is upside down + + element.attrib['transform'] = newTransform + + def copyElement(self, element, newParent, distance=None, angleDeg=None): + """Copy one element to the same parent or other parent group. + + It is possible to copy elements isolated or entire groups. + + :param element: element object to be copied + :param newParent: New parent object. Can be another group or the same group + :param distance: moving distance of the new copy. The coordinates are relative to the original position. If ``None``, then the copy is placed at the same position + :param angleDeg: angle of rotation in degrees, counter-clockwise direction + :type element: inkscape element object + :type newParent: inkscape element object + :type distance: list + :type angleDeg: float + :returns: new element + :rtype: inkscape element object + + **Example** + + >>> rootLayer = self.document.getroot() # retrieves the root layer of the file + >>> groupA = self.createGroup(rootLayer,label='temp') # creates a group inside rootLayer + >>> line1 = inkDraw.line.relCoords(groupA, [[5,0]],[0,0]) # creates a line in groupA + >>> line2 = inkDraw.line.relCoords(rootLayer, [[5,0]],[0,0]) # creates a line in rootLayer + >>> self.copyElement(line2,groupA) # create a copy of line2 in groupA + >>> self.moveElement(groupA,[10,-10]) # moves line2 DeltaX=10, DdeltaY=-10 + """ + newElem = deepcopy(element) + newParent.append(newElem) + + if distance is not None: + self.moveElement(newElem, distance) + + if angleDeg is not None: + self.rotateElement(newElem, self.getCenter(newElem), angleDeg) + + return newElem + + # --------------------------------------------- + def moveElement(self, element, distance): + """Move the element using the transformation attribute. + + It is possible to move elements isolated or entire groups. + + :param element: element object to be moved + :param distance: moving distance. The coordinates are relative to the original position. + :type element: inkscape element object + :type distance: tuple + :returns: nothing + :rtype: - + + **Example** + + >>> rootLayer = self.document.getroot() # retrieves the root layer of the file + >>> groupA = self.createGroup(rootLayer,label='temp') # creates a group inside rootLayer + >>> line1 = inkDraw.line.relCoords(groupA, [[5,0]],[0,0]) # creates a line in groupA + >>> line2 = inkDraw.line.relCoords(rootLayer, [[5,0]],[0,0]) # creates a line in rootLayer + >>> self.moveElement(line2,[10,10]) # moves line2 DeltaX=10, DdeltaY=10 + >>> self.moveElement(groupA,[10,-10]) # moves line2 DeltaX=10, DdeltaY=-10 + """ + + if distance[0] == 0 and distance[1] == 0: + return + + transfString = '' + + if 'transform' in element.attrib: + transfString = element.attrib['transform'] + + # if transform attribute is present, we must add the new translation + if transfString: + newTransform = 'translate(%f %f) %s ' % (distance[0], distance[1], transfString) + else: # if no transform attribute was found + newTransform = 'translate(%f %f)' % (distance[0], distance[1]) + + element.attrib['transform'] = newTransform + + # --------------------------------------------- + def scaleElement(self, element, scaleX=1.0, scaleY=None, center=None): + """Scale the element using the transformation attribute. + + It is possible to scale elements isolated or entire groups. + + :param element: element object to be scaled + :param scaleX: scaling factor in X direction. Default=1.0 + :param scaleY: scaling factor in Y direction. Default=``None``. If scaleY=``None``, then scaleY=scaleX is assumed (default behavior) + :param center: center point considered as the origin for the scaling. Default=``None``. If ``None``, the origin is adopted + :type element: inkscape element object + :type scaleX: float + :type scaleX: float + :type center: list + :returns: nothing + :rtype: - + + **Example** + + >>> rootLayer = self.document.getroot() # retrieves the root layer of the file + >>> groupA = self.createGroup(rootLayer,label='temp') # creates a group inside rootLayer + >>> circ1 = centerRadius(groupA,centerPoint=[0,0],radius=1.0) # creates a line in groupA + >>> circ2 = centerRadius(rootLayer,centerPoint=[0,0],radius=1.0) # creates a line in rootLayer + >>> self.scaleElement(circ1,2.0) # scales x2 in both X and Y directions + >>> self.scaleElement(circ1,2.0,3.0) # scales x2 in X and x3 in Y + >>> self.scaleElement(groupA,0.5) # scales x0.5 the group in both X and Y directions + """ + if center is not None: + self.moveElement(element, [-center[0], -center[1]]) + + transfString = '' + + if 'transform' in element.attrib: + transfString = element.attrib['transform'] + + # if transform attribute is present, we must add the new translation + if transfString: + if scaleY is not None: + newTransform = 'scale(%f %f) %s ' % (scaleX, scaleY, transfString) + else: + newTransform = 'scale(%f) %s' % (scaleX, transfString) + else: # if no transform attribute was found + if scaleY is not None: + newTransform = 'scale(%f %f)' % (scaleX, scaleY) + else: + newTransform = 'scale(%f)' % scaleX + + element.attrib['transform'] = newTransform + + if center is not None: + self.moveElement(element, [center[0], center[1]]) + + # --------------------------------------------- + def findMarker(self, markerName): + """Search for markerName definition in the document. + + :param markerName: name of the marker + :type markerName: string + :returns: True if markerName is in the document. False otherwise + :rtype: bool + """ + list = self.getDefsByTag(tag='marker') + for m in list: + if m.get('id') == markerName: + return True + + return False + + # --------------------------------------------- + def getPoints(self, element): + """Returns a list of points of the element. + + This function works on paths, texts or groups. In the case of a group, the function will include recursively all its components. + + :param element: element object + :type element: inkscape element object + :returns: array of points + :rtype: numpy array + + .. note:: This function will apply any transformation stored in transform attribute, + that is, it will compute the resulting coordinates of each object + + **Example** + + >>> rootLayer = self.document.getroot() # retrieves the root layer of the file + >>> line1 = inkDraw.line.relCoords(rootLayer, [[5,0],[0,6]],[0,0]) # creates a line in groupA, using relative coordinates + >>> list = self.getPoints(line1) # list = [[0.0, 0.0], [5.0, 0.0], [5.0, 6.0]] + + """ + + # stores the list of coordinates + listCoords = [] + + # check if element is valid. 'path', 'text' and 'g' are valid + accepted_strings = set([inkex.addNS('path', 'svg'), inkex.addNS('text', 'svg'), 'g', inkex.addNS('g', 'svg'), 'path', 'use', inkex.addNS('use', 'svg')]) + if element.tag not in accepted_strings: + return listCoords + + if element.tag in [inkex.addNS('path', 'svg'), 'path']: # if object is path + + # adds special character between letters and splits. the first regular expression excludes e and E bc they are used to represent scientific notation =S + dString = re.sub('([a-df-zA-DF-Z])+?', r'#\1#', element.attrib['d']).replace('z', '').replace('Z', '').replace(',', ' ').split('#') + + dString = [i.lstrip() for i in dString] # removes leading spaces from strings + dString = list(filter(None, dString)) # removes empty elements + Xcurrent = 0 + Ycurrent = 0 + + while len(dString) > 0: + commandType = dString[0] + argument = [float(x) for x in dString[1].split()] # extracts arguments from M command and converts to float + del dString[0] + del dString[0] + + if commandType in 'mMlLtT': # extracts points from command 'move to' M/m or 'line to' l/L or 'smooth quadratic Bezier curveto't/T + X = argument[0::2] # 2 parameters per segment, x is 1st + Y = argument[1::2] # 2 parameters per segment, y is 2nd + + if commandType in 'hH': # extracts points from command 'horizontal line' h/H + X = argument + Y = [Ycurrent] * len(X) + + if commandType in 'vV': # extracts points from command 'vertical line' v/V + Y = argument + X = [Xcurrent] * len(Y) + + if commandType in 'cC': # extracts points from command 'Bezier Curve' c/C + X = argument[4::6] # 6 parameters per segment, x is 5th + Y = argument[5::6] # 6 parameters per segment, y is 6th + + if commandType in 'sSqQ': # extracts points from command 'quadratic Bezier Curve' q/Q or 'smooth curveto' s/S + X = argument[2::4] # 4 parameters per segment, x is 3rd + Y = argument[3::4] # 4 parameters per segment, y is 4th + + if commandType in 'aA': # extracts points from command 'arc' a/A + X = argument[5::7] # 7 parameters per segment, x is 6th + Y = argument[6::7] # 7 parameters per segment, y is 7th + + if commandType in 'h': # if h + for i in range(0, len(X)): # convert to abs coordinates + if i == 0: + X[i] = X[i] + Xcurrent + else: + X[i] = X[i] + X[i - 1] + + if commandType in 'v': # if v + for i in range(0, len(Y)): # convert to abs coordinates + if i == 0: + Y[i] = Y[i] + Ycurrent + else: + Y[i] = Y[i] + Y[i - 1] + + if commandType in 'mltcsqa': # if m or l + for i in range(0, len(X)): # convert to abs coordinates + if i == 0: + X[i] = X[i] + Xcurrent + Y[i] = Y[i] + Ycurrent + else: + X[i] = X[i] + X[i - 1] + Y[i] = Y[i] + Y[i - 1] + + coords = zip(X, Y) + listCoords.extend(coords) + Xcurrent = X[-1] + Ycurrent = Y[-1] + + if element.tag in ['text', inkex.addNS('text', 'svg')]: # if object is a text + x = float(element.attrib['x']) + y = float(element.attrib['y']) + coords = [[x, y]] + listCoords.extend(coords) + + if element.tag in ['g', inkex.addNS('g', 'svg')]: # if object is a group + for obj in element.iterchildren("*"): + if obj != element and obj.tag not in [ 'defs', inkex.addNS('defs', 'svg')]: + listPoints = self.getPoints(obj) + listCoords.extend(listPoints) + + if element.tag in ['use', inkex.addNS('use', 'svg')]: # if object is a use + listCoordsTemp = [] + x = float(element.attrib['x']) + y = float(element.attrib['y']) + link = self.getElemAttrib(element, 'xlink:href').replace('#','') + elemLink = self.getElementById(link) + for obj in elemLink.iter(): + if obj != elemLink: + listPoints = self.getPoints(obj) + listCoordsTemp.extend(listPoints) + + #apply translation + listCoords=[[coord[0]+x,coord[1]+y] for coord in listCoordsTemp] + + + # apply transformation + if len(listCoords)>0: + + # creates numpy array with the points to be transformed + transfMat = self.getTransformMatrix(element)[1] + + coordsNP = np.hstack((np.array(listCoords), np.ones([len(listCoords), 1]))).transpose() + + coordsTransformed = np.dot(transfMat, coordsNP) + coordsTransformed = np.delete(coordsTransformed, 2, 0).transpose() # remove last line, transposes and converts to list of lists + + else: + coordsTransformed = np.array([]) + + return coordsTransformed + + # --------------------------------------------- + def getBoundingBox(self, element): + """Return the bounding Box of the element. + + This function works on paths, texts or groups. In the case of a group, the function will consider recursively all its components + + :param element: element object + :type element: inkscape element object + :returns: two lists: [xMin,yMin] and [xMax,yMax] + :rtype: list + + .. note:: This function will appply any transformation stored in transform attribute, + that is, it will compute the resulting coordinates of each object + + **Example** + + >>> rootLayer = self.document.getroot() # retrieves the root layer of the file + >>> line1 = inkDraw.line.relCoords(rootLayer, [[5,0],[0,6]],[0,0]) # creates a line in groupA + >>> BboxMin,BboxMax = self.getBoundingBox(line1) # gets BboxMin = [0.0, 0.0] and BboxMax = [5.0, 6.0] + + """ + coords = self.getPoints(element) + coordsNP = np.array(coords) + + bboxMax = np.max(coordsNP, 0) + bboxMin = np.min(coordsNP, 0) + return bboxMin.tolist(), bboxMax.tolist() + + # --------------------------------------------- + def getCenter(self, element): + """Return the center coordinates of the bounding Box of the element. + + This function works on paths, texts or groups. In the case of a group, the function will consider recursively all its components + + :param element: element object + :type element: inkscape element object + :returns: list: [xCenter, yCenter] + :rtype: list + + .. note:: This function will apply any transformation stored in transform attribute, + that is, it will compute the resulting coordinates of each object + + **Example** + + >>> rootLayer = self.document.getroot() # retrieves the root layer of the file + >>> line1 = inkDraw.line.relCoords(rootLayer, [[5,0],[0,6]],[0,0]) # creates a line in groupA + >>> Center = self.getCenter(line1) # gets Center = [2.5, 3.0] + + """ + + bboxMin, bboxMax = self.getBoundingBox(element) + + bboxCenter = np.array([(bboxMax[0] + bboxMin[0]) / 2, (bboxMax[1] + bboxMin[1]) / 2]) + + return bboxCenter + + def getSegmentFromPoints(self, pointList, normalDirection='R'): + """Given two points of a straight line segment, returns the parameters of that segment: + + length, angle (in radians), tangent unitary vector and normal unitary vector + + :param pointList: start and end coordinates [ Pstart, Pend ] + :param normalDirection: + + - 'R': normal vector points to the right of the tangent vector (Default) + - 'L': normal vector points to the left of the tangent vector + + :type pointList: list of points + :type normalDirection: string + + :returns: list: [length, theta, t_versor,n_versor] + :rtype: list + + **Example** + + >>> segmentParam = getSegmentFromPoints([[1,1],[2,2]],'R') # returns [1.4142, 0.78540, [0.7071,0.7071], [0.7071,-0.7071] ] + >>> segmentParam = getSegmentFromPoints([[1,1],[2,2]],'L') # returns [1.4142, 0.78540, [0.7071,0.7071], [-0.7071,0.7071] ] + """ + + # tangent versor (pointing P2) + P1 = np.array(pointList[0]) + P2 = np.array(pointList[1]) + + t_vector = P2 - P1 + length = np.linalg.norm(t_vector) + t_versor = t_vector / length + + # normal vector: counter-clockwise with respect to tangent vector + if normalDirection in 'rR': + n_versor = np.array([t_versor[1], -t_versor[0]]) + if normalDirection in 'lL': + n_versor = np.array([-t_versor[1], t_versor[0]]) + + # angle + theta = math.atan2(t_versor[1], t_versor[0]) + + return [length, theta, t_versor, n_versor] + + def getSegmentParameters(self, element, normalDirection='R'): + """Given a path segment composed by only two points, returns the parameters of that segment: + + length, angle (in radians), start point, end point, tangent unitary vector and normal unitary vector + + This function works with paths only. + + - If the element is not a path, the function returns an empty list + - If the path element has more than two points, the function returns an empty list + + :param element: path element object + :param normalDirection: + + - 'R': normal vector points to the right of the tangent vector (Default) + - 'L': normal vector points to the left of the tangent vector + + :type element: inkscape element object + :type normalDirection: string + + :returns: list: [Pstart,Pend,length, theta, t_versor,n_versor] + :rtype: list + + .. note:: This function will apply any transformation stored in transform attribute, + that is, it will compute the resulting coordinates of each object + + **Example** + + >>> rootLayer = self.document.getroot() # retrieves the root layer of the file + >>> line1 = inkDraw.line.absCoords(rootLayer, [[1,1],[2,2]]) # creates a line in groupA + >>> segementList = getSegmentParameters(line1,'R') # returns [[1,1], [2,2],1.4142, 0.78540, [0.7071,0.7071], [0.7071,-0.7071] ] + + """ + + # check if element is valid. 'path' + accepted_strings = set([inkex.addNS('path', 'svg'), 'path']) + if element.tag not in accepted_strings: + return [] + + listPoints = self.getPoints(element) + if len(listPoints) > 2: # if the path has more than two points + return [] + + data = self.getSegmentFromPoints(listPoints, normalDirection) + + return listPoints + data + + + diff --git a/extensions/fablabchemnitz/spirograph/inkscapeMadeEasy/inkscapeMadeEasy_Draw.py b/extensions/fablabchemnitz/spirograph/inkscapeMadeEasy/inkscapeMadeEasy_Draw.py new file mode 100644 index 00000000..664b6324 --- /dev/null +++ b/extensions/fablabchemnitz/spirograph/inkscapeMadeEasy/inkscapeMadeEasy_Draw.py @@ -0,0 +1,2231 @@ +#!/usr/bin/python + +# -------------------------------------------------------------------------------------- +# +# inkscapeMadeEasy: - Helper module that extends Aaron Spike's inkex.py module, +# focusing productivity in inkscape extension development +# +# Copyright (C) 2016 by Fernando Moura +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +# -------------------------------------------------------------------------------------- + +# Please uncomment (remove the # character) in the following line to disable LaTeX support via textext extension. +useLatex=False + + +import os +import sys + +try: + useLatex +except NameError: + useLatex = True +else: + useLatex = False + +import math + +import numpy as np + +import inkex +from lxml import etree +import re + +if useLatex: + sys.path.append('../textext') + import textext.base as textext + +import tempfile +import copy + +def displayMsg(msg): + """Display a message to the user. + + :param msg: message + :type msg: string + + :returns: nothing + :rtype: - + + .. note:: Identical function has been also defined inside :meth:`inkscapeMadeEasy_Base.inkscapeMadeEasy` class + + """ + sys.stderr.write(msg + '\n') + + +def Dump(obj, file='./dump_file.txt', mode='w'): + """Function to easily output the result of ``str(obj)`` to a file + + :param obj: python object to sent to a file. Any object can be used, as long as ``str(obj)`` is implemented (see ``__str__()`` metaclass definition of your object) + :param file: file path. Default: ``./dump_file.txt`` + :param mode: writing mode of the file Default: ``w`` (write) + :type obj: any + :type file: string + :type mode: string + :returns: nothing + :rtype: - + + .. note:: Identical function has been also defined inside :meth:`inkscapeMadeEasy_Base.inkscapeMadeEasy` class + + This function was created to help debugging the code while it is running under inkscape. Since inkscape does not possess a terminal as today (2016), + this function overcomes partially the issue of sending things to stdout by dumping result of the function ``str()`` in a text file. + + **Example** + + >>> vector1=[1,2,3,4,5,6] + >>> inkDraw.Dump(vector1,file='~/temporary.txt',mode='w') # writes the list to a file + >>> vector2=[7,8,9,10] + >>> inkDraw.Dump(vector2,file='~/temporary.txt',mode='a') # append the list to a file + """ + + with open(file, mode) as file: + file.write(str(obj) + '\n') + + +def circle3Points(P1, P2, P3): + """Find the center and radius of a circle based on 3 points on the circle. + + Returns [None,None] either if the points are aligned and no (finite radius) circle can be defined or if two of the points are coincident. + + :param P1,P2,P3: points [x,y] + + .. warning:: Keep in mind that Inkscape's y axis is upside down! + :type P1,P2,P3: list + + :returns: [center, radius] + :rtype: [numpy array, float] + + """ + # check if points are aligned + v1 = np.array(P1) - np.array(P2) + v2 = np.array(P1) - np.array(P3) + + if np.sqrt((v1[0] ** 2 + v1[1] ** 2))==0 or np.sqrt((v2[0] ** 2 + v2[1] ** 2))==0: + displayMsg('Error: Two of the points are coincident. Aborting it...') + return [None, None] + + v1 = v1 / np.sqrt((v1[0] ** 2 + v1[1] ** 2)) + v2 = v2 / np.sqrt((v2[0] ** 2 + v2[1] ** 2)) + cosTheta = v1.dot(v2) + + if abs(cosTheta) > 0.99999: + displayMsg('Error: The 3 points are collinear (or very close). Aborting it...') + return [None, None] + + # find the center + A = np.array([[-2 * P1[0], -2 * P1[1], 1], [-2 * P2[0], -2 * P2[1], 1], [-2 * P3[0], - 2 * P3[1], 1]]) + b = np.array([-P1[0] ** 2 - P1[1] ** 2, -P2[0] ** 2 - P2[1] ** 2, -P3[0] ** 2 - P3[1] ** 2]) + x = np.linalg.solve(A, b) + center = np.array([x[0], x[1]]) + radius = np.sqrt(x[0] ** 2 + x[1] ** 2 - x[2]) + return [center, radius] + +class color(): + """ + This class manipulates color information, generating a string in inkscape's expected format ``#RRGGBB`` + + .. note:: This class contains only static methods so that your plugin class don't have to inherit it. + + .. warning:: alpha channel is not implemented yet. Assume alpha=1.0 + + """ + + @staticmethod + def defined(colorName): + """ Return the color string representing a predefined color name + + :param colorName: prededined color name. See figure below + :type colorName: string + :returns: string representing the color in inkscape's expected format ``#RRGGBB`` + :rtype: string + + **Available pre defined colors** + + .. image:: ../imagesDocs/Default_colors.png + :width: 400px + + **Example** + + >>> colorString = inkDraw.color.defined('red') # returns #ff0000 representing red color + + """ + if colorName not in ['Dred', 'red', 'Lred', 'Dblue', 'blue', 'Lblue', 'Dgreen', 'green', 'Lgreen', 'Dyellow', 'yellow', 'Lyellow', 'Dmagen', + 'magen', 'Lmagen', 'black', 'white']: + sys.exit("InkscapeDraw.color.defined() : Error. color -->" + colorName + "<-- not defined") + + if colorName == 'Dred': + return '#800000' + if colorName == 'red': + return '#FF0000' + if colorName == 'Lred': + return '#FF8181' + + if colorName == 'Dblue': + return '#000080' + if colorName == 'blue': + return '#0000FF' + if colorName == 'Lblue': + return '#8181FF' + + if colorName == 'Dgreen': + return '#008000' + if colorName == 'green': + return '#00FF00' + if colorName == 'Lgreen': + return '#81FF81' + + if colorName == 'black': + return '#000000' + if colorName == 'white': + return '#FFFFFF' + + if colorName == 'Dyellow': + return '#808000' + if colorName == 'yellow': + return '#FFFF00' + if colorName == 'Lyellow': + return '#FFFF81' + + if colorName == 'Dmagen': + return '#800080' + if colorName == 'magen': + return '#FF00FF' + if colorName == 'Lmagen': + return '#FF81FF' + + @staticmethod + def RGB(RGBlist): + """ return a string representing a color specified by RGB level in the range 0-255 + + :param RGBlist: list containing RGB levels in the range 0-225 each + :type RGBlist: list of ints + :returns: string representing the color in inkscape's expected format ``#RRGGBB`` + :rtype: string + + **Example** + + >>> colorString = inkDraw.color.RGB([120,80,0]) # returns a string representing the color R=120, G=80, B=0 + + """ + RGBhex = [''] * 3 + for i in range(3): + if RGBlist[i] > 255: + RGBlist[i] = 255 + + if RGBlist[i] < 0: + RGBlist[i] = 0 + + if RGBlist[i] < 16: + RGBhex[i] = '0' + hex(int(RGBlist[i]))[2:].upper() + + else: + RGBhex[i] = hex(int(RGBlist[i]))[2:].upper() + + return '#' + '%s%s%s' % (RGBhex[0], RGBhex[1], RGBhex[2]) + + @staticmethod + def rgb(RGBlist): + """ Return a string representing a color specified by RGB level in the range 0.0-1.0 + + :param RGBlist: list containing RGB levels in the range 0.0-1.0 each + :type RGBlist: list of floats + :returns: string representing the color in inkscape's expected format ``#RRGGBB`` + :rtype: string + + **Example** + + >>> colorString = color.rgb([0.5,0.8,0.0]) # returns a string representing the color R=127, G=204, B=0 + + """ + RGBhex = [''] * 3 + for i in range(3): + if RGBlist[i] >= 1.0: + RGBlist[i] = 1.0 + + if RGBlist[i] <= 0.0: + RGBlist[i] = 0 + + if RGBlist[i]*255 < 16: + RGBhex[i] = '0' + hex(int(RGBlist[i]*255))[2:].upper() + + else: + RGBhex[i] = hex(int(RGBlist[i]*255))[2:].upper() + + return '#' + '%s%s%s' % (RGBhex[0], RGBhex[1], RGBhex[2]) + + # --------------------------------------------- + @staticmethod + def gray(percentage): + """ Return a string representing a gray color based on white percentage between 0.0 (black) and 1.0 (white) + + - if percentage is higher than 1.0, percentage is truncated to 1.0 (white) + - if percentage is lower than 0.0, percentage is truncated to 0.0 (black) + + :param percentage: value between 0.0 (black) and 1.0 (white) + :type percentage: float + :returns: string representing the color in inkscape's expected format ``#RRGGBB`` + :rtype: string + + **Example** + + >>> colorString = color.gray(0.6) # returns a string representing the gray level with 60% of white + + """ + RGBLevel = 255 * percentage + + if RGBLevel > 255: + RGBLevel = 255 + if RGBLevel < 0.0: + RGBLevel = 0 + + return color.RGB([RGBLevel] * 3) + + # --------------------------------------------- + @staticmethod + def colorPickerToRGBalpha(colorPickerString): + """ Function that converts the string returned by the widget 'color' in the .inx file into 2 strings, + one representing the color in format ``#RRGGBB`` and the other representing the alpha channel ``AA`` + + .. hint:: you probably don't need to use this function. Consider using the method :meth:`color.parseColorPicker` + + :param colorPickerString: string returned by 'color' widget + :type colorPickerString: string + :returns: a list of strings: [color,alpha] + - color: string in ``#RRGGBB`` format + - alpha: string in ``AA`` format + :rtype: list + + + .. note:: For more information on this widget, see `this `_. + + **Usage** + + 1- You must have one parameter of the type 'color' in your inx file:: + + + + 2- Parse it as a string in your .py file:: + + self.OptionParser.add_argument("--myColorPicker", type=str, dest="myColorPickerVar", default='#000000') + + 3- call this function to convert self.options.myColorPickerVar into two strings + - #RRGGBB with RGB values in hex + - AA with alpha value in hex + + **Example** + + Let your .inx file contain a widget of type 'color' with the name myColorPicker:: + + + + Then in the .py file + + >>> import inkscapeMadeEasy.inkscapeMadeEasy_Base as inkBase + >>> import inkscapeMadeEasy.inkscapeMadeEasy_Draw as inkDraw + >>> import inkscapeMadeEasy.inkscapeMadeEasy_Plot as inkPlot + >>> + >>> class myExtension(inkBase.inkscapeMadeEasy): + >>> def __init__(self): + >>> inkBase.inkscapeMadeEasy.__init__(self) + >>> self.OptionParser.add_argument("--myColorPicker", type=str, dest="myColorPickerVar", default='#000000') # parses the input parameter + >>> + >>> def effect(self): + >>> color,alpha = inkDraw.color.colorPickerToRGBalpha(self.options.myColorPickerVar) # returns the string representing the selected color and alpha channel + + """ + # [2:] removes the 0x , zfill adds the leading zeros, upper: uppercase + colorHex = hex(int(colorPickerString) & 0xffffffff)[2:].zfill(8).upper() + RGB = '#' + colorHex[0:6] + alpha = colorHex[6:] + return [RGB, alpha] + + # --------------------------------------------- + @staticmethod + def parseColorPicker(stringColorOption, stringColorPicker): + """ Function that converts the string returned by the widgets 'color' and 'optiongroup' in the .inx file into 2 strings, + one representing the color in format ``#RRGGBB`` and the other representing the alpha channel ``AA`` + + You must have in your .inx both 'optiongroup' and 'color' widgets as defined below. You don't have to have all the color options presented in the example. + That is the most complete example, considering the default colors in color.defined method. + + + :param stringColorOption: string returned by 'optiongroup' widget + :type stringColorOption: string + :param stringColorPicker: string returned by 'color' widget + :type stringColorPicker: string + :returns: a list of strings: [color,alpha] + - color: string in ``#RRGGBB`` format + - alpha: string in ``AA`` format + :rtype: list + + .. note:: For more information on this widget, see `this link `_ + + **Example** + + It works in the following manner: The user select in the optiongroup list the desired color. All pre defined colors in inkscapeMadeEasy are listed there. + There is also a 'my default color' option where you can set your preferred default color and an 'use color picker' option to activate the color picker widget. + Keep in mind that the selected color in the color picker widget will be considered **ONLY** if 'use color picker' option is selected. + + a) Example with full form of ``color`` widget. In this example a ``use color picker`` is selected from the optiongroup widget. Therefore the color picker widget will have effect + + .. image:: ../imagesDocs/colorPicker02.png + :width: 400px + + b) Example with compact form of ``color`` widget. In this example a color is selected from the optiongroup widget. Therefore the color picker widget will have no effect + + .. image:: ../imagesDocs/colorPicker01.png + :width: 400px + + Bellow is the template 'color' widget with name 'myColorPicker' and an 'optiongroup' with the name 'myColorOption' for the .inx file:: + + + <_option value="#FF0022">my default color <--you can set your pre define color in the form #RRGGBB + <_option value="none">none <-- no color + <_option value="black">black + <_option value="red">red + <_option value="blue">blue + <_option value="yellow">yellow + <_option value="green">green <-- these are all standardized colors in inkscapeMadeEasy_Draw.color class! + <_option value="magen">magenta + <_option value="white">white + <_option value="Lred">Lred + <_option value="Lblue">Lblue + <_option value="Lyellow">Lyellow + <_option value="Lgreen">Lgreen + <_option value="Lmagen">Lmagenta + <_option value="Dred">Dred + <_option value="Dblue">Dblue + <_option value="Dyellow">Dyellow + <_option value="Dgreen">Dgreen + <_option value="Dmagen">Dmagenta + <_option value="picker">use color picker <-- indicate that the color must be taken from the colorPicker attribute + + + + Then in the .py file + + >>> import inkscapeMadeEasy.inkscapeMadeEasy_Base as inkBase + >>> import inkscapeMadeEasy.inkscapeMadeEasy_Draw as inkDraw + >>> import inkscapeMadeEasy.inkscapeMadeEasy_Plot as inkPlot + >>> + >>> class myExtension(inkBase.inkscapeMadeEasy): + >>> def __init__(self): + >>> inkBase.inkscapeMadeEasy.__init__(self) + >>> self.OptionParser.add_argument("--myColorPicker", type=str, dest="myColorPickerVar", default='0') # parses the input parameters + >>> self.OptionParser.add_argument("--myColorOption", type=str, dest="myColorOptionVar", default='black') # parses the input parameter + >>> + >>> def effect(self): + >>> so = self.options + >>> [RGBstring,alpha] = inkDraw.color.parseColorPicker(so.myColorOptionVar,so.myColorPickerVar) + + """ + alphaString = 'FF' + if stringColorOption.startswith("#"): + return [stringColorOption, alphaString] + else: + if stringColorOption == 'none': + colorString = 'none' + else: + if stringColorOption == 'picker': + [colorString, alphaString] = color.colorPickerToRGBalpha(stringColorPicker) + else: + colorString = color.defined(stringColorOption) + return [colorString, alphaString] + + +class marker(): + """ + Class to manipulate markers. + + This class is used to create new custom markers. Markers can be used with the :meth:`inkscapeMadeEasy_Draw.lineStyle` class to define line types that include start, mid and end markers + + The base method of this class is :meth:`marker.createMarker` that can create custom markers. There are also other methods that simplify the creation of commonly used markers. The implemented predefined markers are presented in the figure below. + + .. image:: ../imagesDocs/marker_predefined.png + :width: 400px + + .. note:: This class contains only static methods so that your plugin class don't have to inherit it. + + """ + + # --------------------------------------------- + @staticmethod + def createMarker(ExtensionBaseObj, nameID, markerPath, RenameMode=0, strokeColor=color.defined('black'), fillColor=color.defined('black'), + lineWidth=1.0, markerTransform=None): + """Create a custom line marker + + :param ExtensionBaseObj: Most of the times you have to pass 'self' when calling from inside your plugin class. See example below + :param nameID: nameID of the marker + :param markerPath: Path definition. Must follow 'd' attribute format. See `this link `_ for further information + :param RenameMode: Renaming behavior mode + + - 0: (default) do not rename the marker. If nameID is already taken, the marker will not be modified. + - 1: overwrite marker definition if nameID is already taken + + .. Warning:: when a marker is created using RenameMode=1, any marker with the same name will disapear from inkscape's canvas. This is an inkscape issue. Save the document and reload it, everything should be fine. + - 2: Create a new unique nameID, adding a suffix number (Please refer to :meth:`inkscapeMadeEasy_Base.inkscapeMadeEasy.uniqueIdNumber()` + :param strokeColor: Stroke color in the format ``#RRGGBB`` (hexadecimal), or ``None`` for no color. Default: color.defined('black'). See :meth:`inkscapeMadeEasy_Draw.color` for functions to create color strings + :param fillColor: Filling color in the format ``#RRGGBB`` (hexadecimal), or ``None`` for no color. Default: color.defined('black'). See :meth:`inkscapeMadeEasy_Draw.color` for functions to create color strings + :param lineWidth: Line width of the marker. Default: 1.0 + :param markerTransform: custom transform applied to marker's path. Default: ``None`` + + .. note:: The transform must follow 'transform' attribute format. See `this link `_ for further information + + :type ExtensionBaseObj: inkscapeMadeEasy object + :type nameID: string + :type markerPath: string + :type RenameMode: int + :type strokeColor: string + :type fillColor: string + :type lineWidth: float + :type markerTransform: string + + :returns: NameID of the new marker + :rtype: string + + **System of coordinates** + + The system of coordinates of the marker depends on the point under consideration. The following figure presents the coordinate system for all cases + + .. image:: ../imagesDocs/marker_Orientation.png + :width: 600px + + **Example** + + >>> nameID='myMarker' + >>> markerPath='M 3,0 L 0,1 L 0,-1 z' # defines a path forming an triangle with vertices (3,0) (0,1) (0,-1) + >>> strokeColor=inkDraw.color.defined('red') + >>> fillColor=None + >>> RenameMode=1 + >>> width=1 + >>> markerTransform=None + >>> markerID=inkDraw.marker.createMarker(self,nameID,markerPath,RenameMode,strokeColor,fillColor,width,markerTransform) + >>> myLineStyle = inkDraw.lineStyle.set(1.0, markerEnd=markerID,lineColor=inkDraw.color.defined('black')) # see lineStyle class for further information on this function + >>> + >>> #tries to make another marker with the same nameID, changing RenameMode + >>> strokeColor=inkDraw.color.defined('blue') + >>> RenameMode=0 + >>> markerID=inkDraw.marker.createMarker(self,nameID,RenameMode,scale,strokeColor,fillColor) # this will not modify the marker + >>> RenameMode=1 + >>> markerID=inkDraw.marker.createMarker(self,nameID,RenameMode,scale,strokeColor,fillColor) # modifies the marker 'myMarker' + >>> RenameMode=2 + >>> markerID=inkDraw.marker.createMarker(self,nameID,RenameMode,scale,strokeColor,fillColor) # creates a new marker with nameID='myMarker-0001' + + .. note:: In the future, path definition and transformation will be modified to make it easier to design custom markers. =) + """ + + if RenameMode == 0 and ExtensionBaseObj.findMarker(nameID): + return nameID + + if RenameMode == 2: + numberID = 1 + new_id = nameID + '_n%05d' % numberID + while new_id in ExtensionBaseObj.svg.get_ids(): + numberID += 1 + new_id = nameID + '_n%05d' % numberID + ExtensionBaseObj.svg.get_ids().add(nameID) + nameID = new_id + + if RenameMode == 1 and ExtensionBaseObj.findMarker(nameID): + defs = ExtensionBaseObj.getDefinitions() + for obj in defs.iter(): + if obj.get('id') == nameID: + defs.remove(obj) + + # creates a new marker + marker_attribs = {inkex.addNS('stockid', 'inkscape'): nameID, 'orient': 'auto', 'refY': '0.0', 'refX': '0.0', 'id': nameID, + 'style': 'overflow:visible'} + + newMarker = etree.SubElement(ExtensionBaseObj.getDefinitions(), 'marker', marker_attribs) + + if fillColor is None: + fillColor = 'none' + if strokeColor is None: + strokeColor = 'none' + + marker_style = {'fill-rule': 'evenodd', 'fill': fillColor, 'stroke': strokeColor, 'stroke-width': str(lineWidth)} + + marker_lineline_attribs = {'d': markerPath, 'style': str(inkex.Style(marker_style))} + + if markerTransform: + marker_lineline_attribs['transform'] = markerTransform + + etree.SubElement(newMarker, 'path', marker_lineline_attribs) + + ExtensionBaseObj.svg.get_ids().add(nameID) + + return nameID + + # --------------------------------------------- + @staticmethod + def createDotMarker(ExtensionBaseObj, nameID, RenameMode=0, scale=0.4, strokeColor=color.defined('black'), fillColor=color.defined('black')): + """Create circular dot markers, exactly like inkscape default dotS dotM or dotL markers. + + .. image:: ../imagesDocs/marker_predefined_dot.png + :width: 300px + :align: center + + :param ExtensionBaseObj: Most of the times you have to pass 'self' when calling from inside your plugin class. See example below + :param nameID: nameID of the marker + :param RenameMode: Renaming behavior mode + + - 0: (default) do not rename the marker. If nameID is already taken, the marker will not be modified. + - 1: overwrite marker definition if nameID is already taken + + .. Warning:: when a marker is created using RenameMode=1, any marker with the same name will disapear from inkscape's canvas. This is an inkscape issue. Save the document and reload it, everything should be fine. + - 2: Create a new unique nameID, adding a suffix number (Please refer to :meth:`inkscapeMadeEasy_Base.inkscapeMadeEasy.uniqueIdNumber()` + :param scale: Scale factor of the marker. To exactly copy inkscape sizes dotS/M/L, use 0.2, 0.4 and 0.8 respectively. Default: 0.4 + :param strokeColor: Stroke color in the format ``#RRGGBB`` (hexadecimal), or ``None`` for no color. Default: color.defined('black'). See :meth:`inkscapeMadeEasy_Draw.color` for functions to create color strings + :param fillColor: Filling color in the format ``#RRGGBB`` (hexadecimal), or ``None`` for no color. Default: color.defined('black'). See :meth:`inkscapeMadeEasy_Draw.color` for functions to create color strings + :type ExtensionBaseObj: inkscapeMadeEasy object + :type nameID: string + :type RenameMode: int + :type scale: float + :type strokeColor: string + :type fillColor: string + + :returns: NameID of the new marker + :rtype: string + + **Example** + + >>> myMarker=inkDraw.marker.createDotMarker(self,nameID='myDotMarkerA',RenameMode=1,scale=0.5,strokeColor=inkDraw.color.defined('red'),fillColor=None) + >>> myLineStyle = inkDraw.lineStyle.set(1.0, markerEnd=myMarker,lineColor=inkDraw.color.defined('black')) # see lineStyle class for further information on this function + """ + + markerPath = 'M -2.5,-1.0 C -2.5,1.7600000 -4.7400000,4.0 -7.5,4.0 C -10.260000,4.0 -12.5,1.7600000 -12.5,-1.0 C -12.5,-3.7600000 -10.260000,-6.0 -7.5,-6.0 C -4.7400000,-6.0 -2.5,-3.7600000 -2.5,-1.0 z ' + width = 1.0 + markerTransform = 'scale(' + str(scale) + ') translate(7.4, 1)' + return marker.createMarker(ExtensionBaseObj, nameID, markerPath, RenameMode, strokeColor, fillColor, width, markerTransform) + + # --------------------------------------------- + @staticmethod + def createCrossMarker(ExtensionBaseObj, nameID, RenameMode=0, scale=0.4, strokeColor=color.defined('black')): + """Create a cross marker + + .. image:: ../imagesDocs/marker_predefined_cross.png + :width: 300px + :align: center + + :param ExtensionBaseObj: Most of the times you have to pass 'self' when calling from inside your plugin class. See example below + :param nameID: nameID of the marker + :param RenameMode: Renaming behavior mode + + - 0: (default) do not rename the marker. If nameID is already taken, the marker will not be modified. + - 1: overwrite marker definition if nameID is already taken + + .. Warning:: when a marker is created using RenameMode=1, any marker with the same name will disapear from inkscape's canvas. This is an inkscape issue. Save the document and reload it, everything should be fine. + - 2: Create a new unique nameID, adding a suffix number (Please refer to :meth:`inkscapeMadeEasy_Base.inkscapeMadeEasy.uniqueIdNumber()` + :param scale: Scale of the marker. Default: 0.4 + :param strokeColor: Stroke color in the format ``#RRGGBB`` (hexadecimal), or ``None`` for no color. Default: color.defined('black'). See :meth:`inkscapeMadeEasy_Draw.color` for functions to create color strings + :type ExtensionBaseObj: inkscapeMadeEasy object + :type nameID: string + :type RenameMode: int + :type scale: float + :type strokeColor: string + + :returns: NameID of the new marker + :rtype: string + + **Example** + + >>> myMarker=inkDraw.marker.createCrossMarker(self,nameID='myDotMarkerA',RenameMode=1,scale=0.5,strokeColor=inkDraw.color.defined('red')) + >>> myLineStyle = inkDraw.lineStyle.set(1.0, markerEnd=myMarker,lineColor=inkDraw.color.defined('black')) # see lineStyle class for further information on this function + """ + + markerPath = 'M -4,4 L 4,-4 M 4,4 L -4,-4' + markerTransform = 'scale(' + str(scale) + ')' + width = 1.0 + return marker.createMarker(ExtensionBaseObj, nameID, markerPath, RenameMode, strokeColor, None, width, markerTransform) + + # --------------------------------------------- + @staticmethod + def createArrow1Marker(ExtensionBaseObj, nameID, RenameMode=0, scale=0.4, strokeColor=color.defined('black'), fillColor=color.defined('black')): + """Create arrow markers (both start and end markers) + + .. image:: ../imagesDocs/marker_predefined_arrow.png + :width: 300px + :align: center + + :param ExtensionBaseObj: Most of the times you have to pass 'self' when calling from inside your plugin class. See example below + :param nameID: nameID of the marker. + + .. note:: Start and End markers will have 'Start' and 'End' suffixes respectively + + :param RenameMode: Renaming behavior mode + + - 0: (default) do not rename the marker. If nameID is already taken, the marker will not be modified. + - 1: overwrite marker definition if nameID is already taken + + .. Warning:: when a marker is created using RenameMode=1, any marker with the same name will disapear from inkscape's canvas. This is an inkscape issue. Save the document and reload it, everything should be fine. + - 2: Create a new unique nameID, adding a suffix number (Please refer to :meth:`inkscapeMadeEasy_Base.inkscapeMadeEasy.uniqueIdNumber()` + + :param scale: scale of the marker. Default: 0.4 + :param strokeColor: Stroke color in the format ``#RRGGBB`` (hexadecimal), or ``None`` for no color. Default: color.defined('black'). See :meth:`inkscapeMadeEasy_Draw.color` for functions to create color strings + :param fillColor: Filling color in the format ``#RRGGBB`` (hexadecimal), or ``None`` for no color. Default: color.defined('black'). See :meth:`inkscapeMadeEasy_Draw.color` for functions to create color strings + :type ExtensionBaseObj: inkscapeMadeEasy object + :type nameID: string + :type RenameMode: int + :type scale: float + :type strokeColor: string + :type fillColor: string + + :returns: a list of strings: [startArrowMarker,endArrowMarker] + - startArrowMarker: nameID of start marker + - endArrowMarker: nameID of end marker + :rtype: list + + **Example** + + >>> StartArrowMarker,EndArrowMarker=inkDraw.marker.createArrow1Marker(self,nameID='myArrow',RenameMode=1,scale=0.5,strokeColor=inkDraw.color.defined('red'),fillColor=None) + >>> myLineStyle = inkDraw.lineStyle.set(1.0, markerStart=StartArrowMarker,markerEnd=EndArrowMarker,lineColor='#000000') # see lineStyle class for further information on this function + """ + + # transform="scale(0.8) rotate(180) translate(12.5,0)" /> + # transform="scale(0.4) rotate(180) translate(10,0)" /> + # transform="scale(0.2) rotate(180) translate(6,0)" /> + # translation=12.5-17.5/(scale*10) + # linear regression from data of small medium and large + translation = 10.17 * scale + 4.75 + width = 1.0 + + markerPath = 'M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z ' + markerTransform = 'scale(' + str(scale) + ') rotate(0) translate(' + str(translation) + ',0)' + nameStart = marker.createMarker(ExtensionBaseObj, nameID + 'Start', markerPath, RenameMode, strokeColor, fillColor, width, markerTransform) + markerTransform = 'scale(' + str(scale) + ') rotate(180) translate(' + str(translation) + ',0)' + nameEnd = marker.createMarker(ExtensionBaseObj, nameID + 'End', markerPath, RenameMode, strokeColor, fillColor, width, markerTransform) + + return [nameStart, nameEnd] + + # --------------------------------------------- + @staticmethod + def createElipsisMarker(ExtensionBaseObj, nameID, RenameMode=0, scale=1.0, fillColor=color.defined('black')): + """Create ellipsis markers, both start and end markers. + + .. image:: ../imagesDocs/marker_predefined_elipsis.png + :width: 300px + :align: center + + .. note:: These markers differ from inkscape's default ellipsis since these markers are made such that the diameter of the dots are equal to the line width. + + :param ExtensionBaseObj: Most of the times you have to pass 'self' when calling from inside your plugin class. See example below + :param nameID: nameID of the marker. Start and End markers will have 'Start' and 'End' suffix respectively + :param RenameMode: Renaming behavior mode + + - 0: (default) do not rename the marker. If nameID is already taken, the marker will not be modified. + - 1: overwrite marker definition if nameID is already taken + + .. Warning:: when a marker is created using RenameMode=1, any marker with the same name will disapear from inkscape's canvas. This is an inkscape issue. Save the document and reload it, everything should be fine. + - 2: Create a new unique nameID, adding a suffix number (Please refer to :meth:`inkscapeMadeEasy_Base.inkscapeMadeEasy.uniqueIdNumber()` + :param scale: Scale of the marker. Default 1.0 + :param fillColor: Filling color in the format ``#RRGGBB`` (hexadecimal), or ``None`` for no color. Default: color.defined('black'). See :meth:`inkscapeMadeEasy_Draw.color` for functions to create color strings + :type ExtensionBaseObj: inkscapeMadeEasy object + :type nameID: string + :type RenameMode: int + :type scale: float + :type fillColor: string + + :returns: a list of strings: [startInfMarker,endInfMarker] + - startInfMarker: nameID of start marker + - endInfMarker: nameID of end marker + :rtype: list + + **Example** + + >>> startInfMarker,endInfMarker=inkDraw.marker.createElipsisMarker(self,nameID='myInfMarker',RenameMode=1,scale=1.0,fillColor='#00FF00') + >>> myLineStyle = inkDraw.lineStyle.set(1.0, markerStart=startInfMarker,markerEnd=endInfMarker,lineColor='#000000') # see lineStyle class for further information on this function + """ + + # build path for 3 circles + markerPath = '' + radius = scale / 2.0 + + for i in range(3): + + prefix = 'M %f %f ' % (i * 2 + radius, 0) + arcStringA = 'a %f %f 0 1 1 %f %f ' % (radius, radius, -2 * radius, 0) + arcStringB = 'a %f %f 0 1 1 %f %f ' % (radius, radius, 2 * radius, 0) + + markerPath = markerPath + prefix + arcStringA + arcStringB + 'z ' + + if scale != 1.0: + markerTransform = 'translate(' + str(-6.0 * scale) + ', 0) scale(' + str(scale) + ')' + else: + markerTransform = 'translate(' + str(-6.0 * scale) + ', 0)' + + width = 1.0 + # add small line segment + + nameStart = marker.createMarker(ExtensionBaseObj, nameID + 'Start', markerPath, RenameMode, None, fillColor, width, markerTransform) + + if scale != 1.0: + markerTransform = 'translate(' + str(2.0 * scale) + ', 0) scale(' + str(scale) + ')' + else: + markerTransform = 'translate(' + str(2.0 * scale) + ', 0)' + + nameEnd = marker.createMarker(ExtensionBaseObj, nameID + 'End', markerPath, RenameMode, None, fillColor, width, markerTransform) + + return [nameStart, nameEnd] + + +class lineStyle(): + """ + Class to manipulate line styles. + + This class is used to define line styles. It is capable of setting stroke and filling colors, line width, linejoin and linecap, markers (start, mid, and end) and stroke dash array + + The base method of this class is :meth:`lineStyle.set` that can create custom line types. + + .. note:: This class contains only static methods so that your plugin class don't have to inherit it. + + """ + + # --------------------------------------------- + @staticmethod + def set(lineWidth=1.0, lineColor=color.defined('black'), fillColor=None, lineJoin='round', lineCap='round', markerStart=None, markerMid=None, + markerEnd=None, strokeDashArray=None): + """ Create a new line style + + :param lineWidth: Line width. Default: 1.0 + :param lineColor: Color in the format ``#RRGGBB`` (hexadecimal), or ``None`` for no color. Default: color.defined('black') + :param fillColor: Color in the format ``#RRGGBB`` (hexadecimal), or ``None`` for no color. Default: ``None`` + :param lineJoin: Shape of the lines at the joints. Valid values 'miter', 'round', 'bevel'. See image below. Default: round. + :param lineCap: Shape of the lines at the ends. Valid values 'butt', 'square', 'round'. See image below. Default: round + :param markerStart: Marker at the start node. Default: ``None`` + :param markerMid: Marker at the mid nodes. Default: ``None`` + :param markerEnd: Marker at the end node. Default: ``None`` + :param strokeDashArray: Dashed line pattern definition. Default: ``None``. See `this link `_ for further information + + :type lineWidth: float + :type lineColor: string + :type fillColor: string + :type lineJoin: string + :type lineCap: string + :type markerStart: string + :type markerMid: string + :type markerEnd: string + :type strokeDashArray: string + + :returns: line definition following the provided specifications + :rtype: string + + **Line node types** + + .. image:: ../imagesDocs/line_nodes.png + :width: 600px + + **Example** + + >>> # creates a line style using a dot marker at its end node + >>> myMarker=inkDraw.marker.createDotMarker(self,nameID='myMarker',RenameMode=1,scale=0.5,strokeColor=color.defined('red'),fillColor=None) # see marker class for further information on this function + >>> myLineStyle = inkDraw.lineStyle.set(lineWidth=1.0, markerEnd=myMarker,lineColor=inkDraw.color.defined('black'),fillColor=inkDraw.color('red')) + >>> + >>> # creates a line style with dashed line (5 units dash , 10 units space + >>> myDashedStyle = inkDraw.lineStyle.set(lineWidth=1.0,lineColor=inkDraw.color.defined('black'),fillColor=inkDraw.color,strokeDashArray='5,10') + >>> # creates a line style with a more complex pattern (5 units dash , 10 units space, 2 units dash, 3 units space + >>> myDashedStyle = inkDraw.lineStyle.set(lineWidth=1.0,lineColor=inkDraw.color.defined('black'),fillColor=inkDraw.color,strokeDashArray='5,10,2,3') + """ + + if not fillColor: + fillColor = 'none' + if not lineColor: + lineColor = 'none' + if not strokeDashArray: + strokeDashArray = 'none' + + # dictionary with the styles + lineStyle = {'stroke': lineColor, 'stroke-width': str(lineWidth), 'stroke-dasharray': strokeDashArray, 'fill': fillColor} + + # Endpoint and junctions + lineStyle['stroke-linecap'] = lineCap + lineStyle['stroke-linejoin'] = lineJoin + + # add markers if needed + if markerStart: + lineStyle['marker-start'] = 'url(#' + markerStart + ')' + + if markerMid: + lineStyle['marker-mid'] = 'url(#' + markerMid + ')' + + if markerEnd: + lineStyle['marker-end'] = 'url(#' + markerEnd + ')' + + return lineStyle + + # --------------------------------------------- + @staticmethod + def setSimpleBlack(lineWidth=1.0): + """Define a standard black line style. + + The only adjustable parameter is its width. The fixed parameters are: lineColor=black, fillColor=None, lineJoin='round', lineCap='round', no markers, no dash pattern + + :param lineWidth: line width. Default: 1.0 + :type lineWidth: float + + :returns: line definition following the provided specifications + :rtype: string + + **Example** + + >>> mySimpleStyle = inkDraw.lineStyle.setSimpleBlack(lineWidth=2.0) + + """ + return lineStyle.set(lineWidth) + + +class textStyle(): + """ + Class to create text styles. + + This class is used to define text styles. It is capable of setting font size, justification, text color, font family, font style, font weight, line spacing, letter spacing and word spacing + + .. note:: This class contains only static methods so that your plugin class don't have to inherit it. + + """ + + # --------------------------------------------- + @staticmethod + def set(fontSize=10, justification='left', textColor=color.defined('black'), fontFamily='Sans', fontStyle='normal', fontWeight='normal', + lineSpacing='100%', letterSpacing='0px', wordSpacing='0px'): + """Define a new text style + + :param fontSize: Size of the font in px. Default: 10 + :param justification: Text justification. ``left``, ``right``, ``center``. Default: ``left`` + :param textColor: Color in the format ``#RRGGBB`` (hexadecimal), or ``None`` for no color. Default: color.defined('black') + :param fontFamily: Font family name. Default ``Sans`` + + .. warning:: This method does NOT verify whether the font family is installed in your machine or not. + + :param fontStyle: ``normal`` or ``italic``. Default: ``normal`` + :param fontWeight: ``normal`` or ``bold``. Default: ``normal`` + :param lineSpacing: Spacing between lines in percentage. Default: ``100%`` + :param letterSpacing: Extra space between letters. Format: ``_px``. Default: ``0px`` + :param wordSpacing: Extra space between words. Format: ``_px``. Default: ``0px`` + + :type fontSize: float + :type justification: string + :type textColor: string + :type fontFamily: string + :type fontStyle: string + :type fontWeight: string + :type lineSpacing: string + :type letterSpacing: string + :type wordSpacing: string + + :returns: text style definition following the provided specifications + :rtype: string + + **Example** + + >>> myTextStyle=inkDraw.textStyle.set(fontSize=10, justification='left', textColor=color.defined('black'), fontFamily='Sans', + >>> fontStyle='normal', fontWeight='normal', lineSpacing='100%', letterSpacing='0px', wordSpacing='0px') + """ + + if not textColor: + textColor = 'none' + + if justification == 'left': + justification = 'start' + anchor = 'start' + if justification == 'right': + justification = 'end' + anchor = 'end' + if justification == 'center': + anchor = 'middle' + + textStyle = {'font-size': str(fontSize) + 'px', 'font-style': fontStyle, 'font-weight': fontWeight, 'text-align': justification, + # start, center, end + 'line-height': lineSpacing, 'letter-spacing': letterSpacing, 'word-spacing': wordSpacing, 'text-anchor': anchor, + # start, middle, end + 'fill': textColor, 'fill-opacity': '1', 'stroke': 'none', 'font-family': fontFamily} + + return textStyle + + # --------------------------------------------- + @staticmethod + def setSimpleBlack(fontSize=10, justification='left'): + """Define a standard black text style + + The only adjustable parameter are font size and justification. The fixed parameters are: textColor=color.defined('black'), fontFamily='Sans', + fontStyle='normal', fontWeight='normal', lineSpacing='100%', letterSpacing='0px', wordSpacing='0px. + + :param fontSize: Size of the font in px. Default: 10 + :param justification: Text justification. ``left``, ``right``, ``center``. Default: ``left`` + + :type fontSize: float + :type justification: string + + :returns: text style definition following the provided specifications + :rtype: string + + **Example** + + >>> mySimpleStyle = inkDraw.textStyle.setSimpleBlack(fontSize=20,justification='center') + + """ + return textStyle.set(fontSize, justification) + + # --------------------------------------------- + @staticmethod + def setSimpleColor(fontSize=10, justification='left', textColor=color.defined('black')): + """Define a standard colored text style + + The only adjustable parameter are font size, justification and textColor. The fixed parameters are: fontFamily='Sans', fontStyle='normal', + fontWeight='normal', lineSpacing='100%', letterSpacing='0px', wordSpacing='0px. + + :param fontSize: Size of the font in px. Default: 10 + :param justification: Text justification. ``left``, ``right``, ``center``. Default: ``left`` + :param textColor: Color in the format ``#RRGGBB`` (hexadecimal), or ``None`` for no color. Default: color.defined('black') + + :type fontSize: float + :type justification: string + :type textColor: string + + :returns: text style definition following the provided specifications + :rtype: string + + **Example** + + >>> mySimpleStyle = inkDraw.textStyle.setSimpleColor(fontSize=20,justification='center',textColor=inkDraw.color.gray(0.5)) + """ + return textStyle.set(fontSize, justification, textColor) + + +class text(): + """ Class for writing texts. + + This class allows the cration of regular inkscape's text elements or LaTeX text. For the later, TexText is incorporated here. + + .. note:: This class contains only static methods so that your plugin class don't have to inherit it. + + .. warning:: LaTeX support is an optional feature, **enabled by default**. Please refer to :ref:`disableLatexSupport` on how to disable it. + + """ + + @staticmethod + def write(ExtensionBaseObj, text, coords, parent, textStyle=textStyle.setSimpleBlack(fontSize=10, justification='left'), fontSize=None, + justification=None, angleDeg=0.0): + """Add a text line to the document + + :param ExtensionBaseObj: Most of the times you have to pass 'self' when calling from inside your plugin class. See example below + :param text: Text contents. Use \\\\n in the string to start a new line + :param coords: Position [x,y] + :param parent: Parent object + :param textStyle: Text style to be used. See class ``textStyle``. Default: textStyle.setSimpleBlack(fontSize=10,justification='left') + :param fontSize: Size of the font in px. + - ``None``: Uses fontSize of textStyle argument (Default) + - number: takes precedence over the size on textStyle + :param justification: Text justification. ``left``, ``right``, ``center`` + - ``None``: Uses justification of textStyle argument (Default) + - ``left``, ``right``, ``center``: takes precedence over the justification set on textStyle + :param angleDeg: Angle of the text, counterclockwise, in degrees. Default: 0 + + :type ExtensionBaseObj: inkscapeMadeEasy object + :type text: string + :type coords: list + :type parent: inkscape element object + :type textStyle: textStyle object + :type fontSize: float + :type justification: string + :type angleDeg: float + + :returns: the new text object + :rtype: text Object + + **Example** + + >>> root_layer = self.document.getroot() # retrieves the root layer of the document + >>> mySimpleStyle = inkDraw.textStyle.setSimpleBlack(fontSize=20,justification='center') # creates a simple text style. + >>> + >>> #adds a two-line text, at the point x=5.0,y=6.0 + >>> # L1: 'foo bar who-hoo!' + >>> # L2: 'second line!' + >>> myText='foo bar who-hoo!\\nsecond line!' + >>> inkDraw.text.write(self, text=myText, coords=[5.0,6.0], parent=root_layer, textStyle=mySimpleStyle, fontSize=None, justification=None, angleDeg=0.0) + >>> + >>> # creates a group in root-layer and add text to it + >>> myGroup = self.createGroup(root_layer,'textGroup') + >>> #adds a text 'foo bar', rotated 45 degrees, at the point x=0,y=0, overriding justification of mySimpleStyle + >>> inkDraw.text.write(self, text='foo bar', coords=[0.0,0.0], parent=myGroup, textStyle=mySimpleStyle, fontSize=None, justification='left', angleDeg=45.0) + + """ + + if justification == 'left': + textStyle['text-align'] = 'start' + textStyle['text-anchor'] = 'start' + if justification == 'right': + textStyle['text-align'] = 'end' + textStyle['text-anchor'] = 'end' + if justification == 'center': + textStyle['text-align'] = 'center' + textStyle['text-anchor'] = 'middle' + + if fontSize: + textStyle['font-size'] = str(fontSize) + 'px' + + AttribsText = {inkex.addNS('space', 'xml'): "preserve", 'style': str(inkex.Style(textStyle)), 'x': str(coords[0]), 'y': str(coords[1]), + inkex.addNS('linespacing', 'sodipodi'): textStyle['line-height']} + + # textObj = etree.SubElement(parent, inkex.addNS('text','svg'), AttribsText ) + + textObj = etree.Element(inkex.addNS('text', 'svg'), AttribsText) + parent.append(textObj) + + AttribsLineText = {inkex.addNS('role', 'sodipodi'): "line", 'x': str(coords[0]), 'y': str(coords[1])} + + textLines = text.split('\\n') + + for n in range(len(textLines)): + myTspan = etree.SubElement(textObj, inkex.addNS('tspan', 'svg'), AttribsLineText) + myTspan.text = textLines[n] + + if angleDeg != 0: + ExtensionBaseObj.rotateElement(textObj, center=coords, angleDeg=angleDeg) # negative angle bc inkscape is upside down + + return textObj + + # --------------------------------------------- + @staticmethod + def latex(ExtensionBaseObj, parent, LaTeXtext, position, fontSize=10, refPoint='cc', textColor=color.defined('black'), LatexCommands=' ', + angleDeg=0, preambleFile=None): + """Creates text element using LaTeX. You can use any LaTeX contents here. + + .. note:: LaTeX support is an optional feature that requires a few extra packages to be installed outside inkscape. **It is enabled by default**. + Please refer to :ref:`disableLatexSupport` on how to disable it. If disabled, this function will still work, internally calling the :meth:`text.write`. + + :param ExtensionBaseObj: Most of the times you have to pass 'self' when calling from inside your plugin class. See example below + :param parent: parent object + :param LaTeXtext: Contents of the text. Can contain any latex command + :param position: Position of the reference point [x,y] + :param fontSize: Size of the font. Assume any capitql letter of ``\\normalsize`` will have this size. Default: 10 + :param refPoint: Text reference Point. See figure below for options. Default: ``cc`` + :param textColor: Color in the format ``#RRGGBB`` (hexadecimal), or ``None`` for no color. Default: color.defined('black') + :param LatexCommands: Commands to be included before LaTeXtext (default: ' '). If LaTeX support is disabled, this parameter has no effect. + :param angleDeg: Angle of the text, counterclockwise, in degrees. Default: 0 + :param preambleFile: Optional preamble file to be included. Default: None. If LaTeX support is disabled, this parameter has no effect. + + :type ExtensionBaseObj: inkscapeMadeEasy object + :type parent: inkscape element object + :type LaTeXtext: string + :type position: list + :type fontSize: float + :type refPoint: string + :type textColor: string + :type LatexCommands: string + :type angleDeg: float + :type preambleFile: string + + :returns: the new text object + :rtype: text Object + + .. note:: This function does not use ``textStyle`` class elements. + + **Reference point options** + + .. image:: ../imagesDocs/LaTeX_reference_Point.png + :width: 300px + + **Standard Preamble file** + + When a preamble file is not provided, inkscapeMadeEasy assumes a standard preamble file located at ``./textextLib/basicLatexPackages.tex``. By default, its contents is:: + + \\usepackage{amsmath,amsthm,amsbsy,amsfonts,amssymb} + \\usepackage[per=slash]{siunitx} + \\usepackage{steinmetz} + \\usepackage[utf8]{inputenc} + + You will need these packages installed. This file can be modified to include extra default packages and/or commands. + + **LaTeX .tex document structure** + + LaTeX .tex document have the following structure. Note that LatexCommands lies within document environment:: + + \\documentclass[landscape,a0]{article} + + [contents of Preamble file] + + \\pagestyle{empty} + + \\begin{document} + \\noindent + + [contents of LatexCommands] + + [contens of LaTeXtext] + + \\end{document} + + + **Example** + + >>> root_layer = self.document.getroot() # retrieves the root layer of the document + >>> customCommand = r'\\newcommand{\\fooBar}{\\textbf{Foo Bar Function! WhooHoo!}}' # do not forget the r to avoid backslash escape. + >>> inkDraw.text.latex(self, root_layer,r'This is one equation \\begin{align} x=y^2\\end{align} And this is my \\fooBar{}', + >>> position=[0.0,0.0], fontSize=10, refPoint='cc', textColor=inkDraw.color.defined('black'), LatexCommands=customCommand, angleDeg=0, preambleFile=None) + """ + newTmp = True + + # write an empty svg file. + + if not LaTeXtext: # check whether text is empty + return 0 + + if useLatex: # set useLatex=False to replace latex by an standard text (much faster for debugging =) ) + + if newTmp: + tmpf = tempfile.NamedTemporaryFile(mode='w', prefix='temp_svg_inkscapeMadeEasy_Draw_', suffix='.svg', delete=False) + tempFilePath = tmpf.name + tmpf.write(ExtensionBaseObj.blankSVG) + tmpf.close() + else: + tempDir = tempfile.gettempdir() + tempFilePath = tempDir + '/temp_svg_inkscapeMadeEasy_Draw.txt' + Dump(ExtensionBaseObj.blankSVG, tempFilePath, 'w') + + # return + # temp instance for determining font height. Draws a F letter just to find the height of the font + if False: # turning off this part of the code. + texTemp = textext.TexText() # start textText (awesome extension! =] ) + texTemp.run([r'--text=' + 'F', '--scale-factor=1', tempFilePath], output=os.devnull) + + for child in texTemp.document.getroot(): + if child.typename == 'TexTextElement': + groupLatex = child + + BboxMin, BboxMax = ExtensionBaseObj.getBoundingBox(groupLatex) + Height0 = BboxMax[1] - BboxMin[1] + + scale = ExtensionBaseObj.getDocumentScaleFactor() + ExtensionBaseObj.displayMsg('H0=%f\nscaleFactor=%f' % (Height0,scale )) + + else: + # running the code above, we get a 'F' with height of 6.76, with scale 1.0 from textext. This will be used to scale the text accordingly to fit user specification 'fontSize' + # Height0 = 6.76 + Height0 = 9.041644 + + scale = fontSize / Height0 + + tex = textext.TexText() # start textText (awesome extension! =] ) + + if preambleFile: + tex.run([r'--text=' + LatexCommands + LaTeXtext, '--scale-factor=1', '--preamble-file=' + preambleFile, tempFilePath], + output=os.devnull) # in case we want to save the svg file with the text element, uncomment the fllowing line. # tex.document.write(tempFilePath) + else: + tex.run( + [r'--text=' + LatexCommands + LaTeXtext, '--scale-factor=1', '--preamble-file=' + ExtensionBaseObj.getBasicLatexPackagesFile(), + tempFilePath], output=os.devnull) + + if newTmp: + os.unlink(tmpf.name) + + for child in tex.document.getroot(): + if child.typename == 'TexTextElement': + groupLatex = child + + # change color + for obj in groupLatex.iter(): + oldStyle = obj.get('style') + if oldStyle is not None: + newStyle = re.sub('fill:#[0-9a-fA-F]+', 'fill:' + textColor, oldStyle) + newStyle = re.sub('stroke:#[0-9a-fA-F]+', 'stroke:' + textColor, newStyle) + + obj.set('style', newStyle) + + ExtensionBaseObj.scaleElement(groupLatex, scaleX=scale, scaleY=scale) # scale to fit font size + else: + if refPoint[1] == 'l': + justification = 'left' + + if refPoint[1] == 'c': + justification = 'center' + + if refPoint[1] == 'r': + justification = 'right' + + mytextStyle = textStyle.setSimpleColor(fontSize=fontSize / 0.76, justification='left', textColor=textColor) + groupLatex = text.write(ExtensionBaseObj, LaTeXtext, [0, 0], parent, textStyle=mytextStyle, fontSize=fontSize / 0.76, + justification=justification, angleDeg=0.0) # attention! keep angleDeg=0.0 here bc it will be rotated below + + parent.append(groupLatex) + + BboxMin, BboxMax = ExtensionBaseObj.getBoundingBox(groupLatex) + + if useLatex: # set useLatex=False to replace latex by an standard text (much faster for debugging =) ) + if refPoint[0] == 't': + refPointY = BboxMin[1] # BboxMin bc inkscape is upside down + + if refPoint[0] == 'c': + refPointY = (BboxMax[1] + BboxMin[1]) / 2.0 + + if refPoint[0] == 'b': + refPointY = BboxMax[1] # BboxMax bc inkscape is upside down + + if refPoint[1] == 'l': + refPointX = BboxMin[0] + + if refPoint[1] == 'c': + refPointX = (BboxMax[0] + BboxMin[0]) / 2.0 + + if refPoint[1] == 'r': + refPointX = BboxMax[0] + else: + refPointX = BboxMin[0] + if refPoint[0] == 't': + refPointY = BboxMin[1] - fontSize # BboxMin bc inkscape is upside down + + if refPoint[0] == 'c': + refPointY = BboxMin[1] - fontSize / 2.0 # BboxMin bc inkscape is upside down + + if refPoint[0] == 'b': + refPointY = BboxMax[1] # BboxMax bc inkscape is upside down + + ExtensionBaseObj.moveElement(groupLatex, [-refPointX, -refPointY]) # move to origin + ExtensionBaseObj.moveElement(groupLatex, [position[0], position[1]]) + if angleDeg != 0: + ExtensionBaseObj.rotateElement(groupLatex, center=[position[0], position[1]], angleDeg=angleDeg) + + return groupLatex + + +class cubicBezier(): + """ This is a class with different methods for drawing cubic bezier lines. + + .. note:: This class contains only static methods so that your plugin class don't have to inherit it. + """ + + @staticmethod + def addNode(NodeList, coord=[0, 0], cPbefore=[-1, 0], cPafter=[1, 0], typeNode='corner', flagAbsCoords=True): + """Add a new node to the list of nodes of the cubic bezier line. + + .. important:: This function does not draw the curve. To draw the curve see :meth:`cubicBezier.draw` method. + + :param NodeList: Lst of nodes that will receive (append) the new node. + :param coord: List with the coordinates of the node + :param cPbefore: List with the coordinates of the control point before the node. + :param cPafter: List with the coordinates of the control point after the node. Used only if 'typeNode' is 'smooth' or 'corner' + :param typeNode: type of node to be added. See image below + + - ``corner``: Node without smoothness constraint. The bezier curve can have a sharp edge at this node + + - ``smooth``: Node with smoothness constraint. The bezier curve will be smooth at this node. If the control points do not form a straight line, then they are modified to form a straight line. See image below + + - ``symmetric``: same as ``smooth``, but the control points are forced to be symmetric with respect to the node. + + :param flagAbsCoords: Indicate absolute or relative coordinates. See section below on how reference system works. + .. warning:: All nodes in a given list must be defined in the same reference system (absolute or relative). + + :type NodeList: list + :type coord: list [x,y] + :type cPbefore: list [x,y] + :type cPafter: list [x,y] + :type typeNode: string + :type flagAbsCoords: bool + + :returns: None + :rtype: - + + **Node Types** + + The image below presents the types of nodes + + .. image:: ../imagesDocs/bezier_nodeTypes.png + :width: 500px + + **Smoothing control nodes** + + Image below present the process of smoothing control nodes not completely aligned when ``smooth`` is selected. + + .. image:: ../imagesDocs/bezier_smoothProcess.png + :width: 500px + + **Absolute and relative coordinate systems** + + Cubic bezier curves are composed by segments which are defined by 4 coordinates, two node coordinates and two control points. + + .. image:: ../imagesDocs/bezier_definitions.png + :width: 500px + + In absolute coordinate system, all node and control point locations are specified using the origin as reference. + In relative coordinate system, control point localizations are specified using its node as reference, and each node + use the previous node as reference (the first node use the origin as reference). See image below. + + .. warning:: Keep in mind that Inkscape's y axis is upside down! + + .. image:: ../imagesDocs/bezier_references.png + :width: 700px + + **Example** + + .. note:: In the following example, the control point before the first node and after the last node are important when the bezier curve must be closed. See method ``draw`` + + .. image:: ../imagesDocs/bezier_example.png + :width: 400px + + >>> # create a list of nodes using absolute coordinate system + >>> nodeListABS=[] + >>> inkDraw.cubicBezier.addNode(nodeListABS, coord=[4,4], cPbefore=[6,6], cPafter=[2,6], typeNode='corner', flagAbsCoords=True) + >>> inkDraw.cubicBezier.addNode(nodeListABS, coord=[8,12], cPbefore=[4,12], cPafter=[10,12], typeNode='smooth', flagAbsCoords=True) + >>> inkDraw.cubicBezier.addNode(nodeListABS, coord=[12,8], cPbefore=[8,8], cPafter=[12,10], typeNode='corner', flagAbsCoords=True) + >>> inkDraw.cubicBezier.addNode(nodeListABS, coord=[16,8], cPbefore=[14,10], cPafter=None, typeNode='symmetric', flagAbsCoords=True) + >>> inkDraw.cubicBezier.addNode(nodeListABS, coord=[12,4], cPbefore=[16,4], cPafter=[10,6], typeNode='corner', flagAbsCoords=True) + + >>> # create a list of nodes using relative coordinate system + >>> nodeListREL=[] + >>> inkDraw.cubicBezier.addNode(nodeListREL, coord=[4, 4], cPbefore=[2,2], cPafter=[-2,2], typeNode='corner', flagAbsCoords=False) + >>> inkDraw.cubicBezier.addNode(nodeListREL, coord=[4, 8], cPbefore=[-4,0], cPafter=[2,0], typeNode='smooth', flagAbsCoords=False) + >>> inkDraw.cubicBezier.addNode(nodeListREL, coord=[4, -4], cPbefore=[-4,0], cPafter=[0,2], typeNode='corner', flagAbsCoords=False) + >>> inkDraw.cubicBezier.addNode(nodeListREL, coord=[4, 0], cPbefore=[-2,2], cPafter=None, typeNode='symmetric', flagAbsCoords=False) + >>> inkDraw.cubicBezier.addNode(nodeListREL, coord=[-4,-4], cPbefore=[4,0], cPafter=[-2,2], typeNode='corner', flagAbsCoords=False) + + """ + + if typeNode.lower() == 'symmetric': + typeNodeSodipodi = 'z' + + if typeNode.lower() == 'smooth': + typeNodeSodipodi = 's' + + if typeNode.lower() == 'corner': + typeNodeSodipodi = 'c' + + if typeNodeSodipodi.lower() == 'c': # corner + NodeList.append({'node': coord, 'cPoint_before': cPbefore, 'cPoint_after': cPafter, 'type': typeNodeSodipodi, 'absCoords': flagAbsCoords}) + + if typeNodeSodipodi.lower() == 'z': # symmetric + if flagAbsCoords: + deltaX = coord[0] - cPbefore[0] + deltaY = coord[1] - cPbefore[1] + NodeList.append( + {'node': coord, 'cPoint_before': cPbefore, 'cPoint_after': [coord[0] + deltaX, coord[1] + deltaY], 'type': typeNodeSodipodi, + 'absCoords': flagAbsCoords}) + else: + NodeList.append({'node': coord, 'cPoint_before': cPbefore, 'cPoint_after': [-cPbefore[0], -cPbefore[1]], 'type': typeNodeSodipodi, + 'absCoords': flagAbsCoords}) + + if typeNodeSodipodi.lower() == 's': # smooth + + # projects the directions of the control points to a commom direction, perpendicular to both + delta1 = np.array(cPbefore) + delta2 = np.array(cPafter) + + if abs(delta1.dot(delta2)) < 1.0: + + if flagAbsCoords: + delta1 -= np.array(coord) + delta2 -= np.array(coord) + + # https://math.stackexchange.com/questions/2285965/how-to-find-the-vector-formula-for-the-bisector-of-given-two-vectors + bisectorVector = np.linalg.norm(delta2) * delta1 + np.linalg.norm(delta1) * delta2 + tangentVersor = np.array([-bisectorVector[1], bisectorVector[0]]) + tangentVersor /= np.linalg.norm(tangentVersor) + + cPbeforeNew = np.linalg.norm(delta1) * tangentVersor + cPafterNew = np.linalg.norm(delta2) * tangentVersor + + if flagAbsCoords: + cPbeforeNew += np.array(coord) + cPafterNew += np.array(coord) + + NodeList.append({'node': coord, 'cPoint_before': cPbeforeNew.tolist(), 'cPoint_after': cPafterNew.tolist(), 'type': typeNodeSodipodi, + 'absCoords': flagAbsCoords}) + else: + NodeList.append( + {'node': coord, 'cPoint_before': cPbefore, 'cPoint_after': cPafter, 'type': typeNodeSodipodi, 'absCoords': flagAbsCoords}) + + @staticmethod + def draw(parent, NodeList, offset=np.array([0, 0]), label='none', lineStyle=lineStyle.setSimpleBlack(), closePath=False): + """draws the bezier line, given a list of nodes, built using :meth:`cubicBezier.addNode` method + + + :param parent: parent object + :param NodeList: list of nodes. See :`cubicBezier.addNode` method + :param offset: offset coords. Default [0,0] + :param label: label of the line. Default 'none' + :param lineStyle: line style to be used. See :class:`lineStyle` class. Default: lineStyle=lineStyle.setSimpleBlack() + :param closePath: Connects the first point to the last. Default: False + + :type parent: inkscape element object + :type NodeList: list of nodes + :type offset: list + :type label: string + :type lineStyle: lineStyle object + :type closePath: bool + + :returns: the new line object + :rtype: line Object + + **Example** + + .. note:: In the following example, the control point before the first node and after the last node are important + when the bezier curve must be closed. + + .. image:: ../imagesDocs/bezier_example.png + :width: 400px + + >>> root_layer = self.document.getroot() # retrieves the root layer of the document + >>> myLineStyle = set(lineWidth=1.0, lineColor=color.defined('red')) + + >>> # create a list of nodes using absolute coordinate system + >>> nodeListABS=[] + >>> inkDraw.cubicBezier.addNode(nodeListABS, coord=[4,4], cPbefore=[6,6], cPafter=[2,6], typeNode='corner', flagAbsCoords=True) + >>> inkDraw.cubicBezier.addNode(nodeListABS, coord=[8,12], cPbefore=[4,12], cPafter=[10,12], typeNode='smooth', flagAbsCoords=True) + >>> inkDraw.cubicBezier.addNode(nodeListABS, coord=[12,8], cPbefore=[8,8], cPafter=[12,10], typeNode='corner', flagAbsCoords=True) + >>> inkDraw.cubicBezier.addNode(nodeListABS, coord=[16,8], cPbefore=[14,10], cPafter=None, typeNode='symmetric', flagAbsCoords=True) + >>> inkDraw.cubicBezier.addNode(nodeListABS, coord=[12,4], cPbefore=[16,4], cPafter=[10,6], typeNode='corner', flagAbsCoords=True) + + >>> # create a list of nodes using relative coordinate system + >>> nodeListREL=[] + >>> inkDraw.cubicBezier.addNode(nodeListREL, coord=[4, 4], cPbefore=[2,2], cPafter=[-2,2], typeNode='corner', flagAbsCoords=False) + >>> inkDraw.cubicBezier.addNode(nodeListREL, coord=[4, 8], cPbefore=[-4,0], cPafter=[2,0], typeNode='smooth', flagAbsCoords=False) + >>> inkDraw.cubicBezier.addNode(nodeListREL, coord=[4, -4], cPbefore=[-4,0], cPafter=[0,2], typeNode='corner', flagAbsCoords=False) + >>> inkDraw.cubicBezier.addNode(nodeListREL, coord=[4, 0], cPbefore=[-2,2], cPafter=None, typeNode='symmetric', flagAbsCoords=False) + >>> inkDraw.cubicBezier.addNode(nodeListREL, coord=[-4,-4], cPbefore=[4,0], cPafter=[-2,2], typeNode='corner', flagAbsCoords=False) + + >>> C1 = inkDraw.cubicBezier.draw(root_layer,nodeListABS, offset=[0, 0],closePath=False) + >>> C2 = inkDraw.cubicBezier.draw(root_layer,nodeListABS, offset=[0, 0],closePath=True) + >>> C3 = inkDraw.cubicBezier.draw(root_layer,nodeListREL, offset=[0, 0],closePath=False) + >>> C4 = inkDraw.cubicBezier.draw(root_layer,nodeListREL, offset=[0, 0],closePath=True) + + Result of the example + + .. image:: ../imagesDocs/bezier_example_draw.png + :width: 800px + + """ + + # first node + if NodeList[0]['absCoords']: + string_coords = 'M %f,%f ' % (NodeList[0]['node'][0] + offset[0], NodeList[0]['node'][0] + offset[1]) + else: + string_coords = 'M %f,%f ' % (NodeList[0]['node'][0] + offset[0], NodeList[0]['node'][0] + offset[1]) + + string_nodeTypes = '' + Ptotal = np.zeros(2) + for i in range(len(NodeList) - 1): + currNode = NodeList[i] + nextNode = NodeList[i + 1] + + if currNode['absCoords']: + bezier = 'C %f,%f ' % (currNode['cPoint_after'][0] + offset[0], currNode['cPoint_after'][1] + offset[1]) # first control point + bezier += '%f,%f ' % (nextNode['cPoint_before'][0] + offset[0], nextNode['cPoint_before'][1] + offset[1]) # second control point + bezier += '%f,%f ' % (nextNode['node'][0] + offset[0], nextNode['node'][1] + offset[1]) # second node + else: + bezier = 'c %f,%f ' % (currNode['cPoint_after'][0], currNode['cPoint_after'][1]) # first control point + bezier += '%f,%f ' % ( + nextNode['cPoint_before'][0] + nextNode['node'][0], nextNode['cPoint_before'][1] + nextNode['node'][1]) # second control point + bezier += '%f,%f ' % (nextNode['node'][0], nextNode['node'][1]) # second node + Ptotal += np.array(currNode['node']) + + string_nodeTypes += currNode['type'] + string_coords = string_coords + bezier + + if closePath: + currNode = NodeList[-1] + nextNode = copy.deepcopy(NodeList[0]) + + if currNode['absCoords']: + bezier = 'C %f,%f ' % (currNode['cPoint_after'][0] + offset[0], currNode['cPoint_after'][1] + offset[1]) # first control point + bezier += '%f,%f ' % (nextNode['cPoint_before'][0] + offset[0], nextNode['cPoint_before'][1] + offset[1]) # second control point + bezier += '%f,%f ' % (nextNode['node'][0] + offset[0], nextNode['node'][1] + offset[1]) # second node + else: + # writes the coordinates of the first node, relative to the last node. + Ptotal += np.array(currNode['node']) + nextNode['node'][0] = NodeList[0]['node'][0] - Ptotal[0] + nextNode['node'][1] = NodeList[0]['node'][1] - Ptotal[1] + + bezier = 'c %f,%f ' % (currNode['cPoint_after'][0], currNode['cPoint_after'][1]) # first control point + bezier += '%f,%f ' % ( + nextNode['cPoint_before'][0] + nextNode['node'][0], nextNode['cPoint_before'][1] + nextNode['node'][1]) # second control point + bezier += '%f,%f ' % (nextNode['node'][0], nextNode['node'][1]) # second node + + string_nodeTypes += currNode['type'] + nextNode['type'] + string_coords = string_coords + bezier + ' Z' + else: + string_nodeTypes += currNode['type'] + + # M = move, L = line, H = horizontal line, V = vertical line, C = curve, S = smooth curve, + # Q = quadratic Bezier curve, T = smooth quadratic Bezier curve, A = elliptical Arc,Z = closepath + Attribs = {inkex.addNS('label', 'inkscape'): label, 'style': str(inkex.Style(lineStyle)), 'd': string_coords, + inkex.addNS('nodetypes', 'sodipodi'): string_nodeTypes} + + return etree.SubElement(parent, inkex.addNS('path', 'svg'), Attribs) + + +class line(): + """ class with methods for drawing lines (paths). + + .. note:: This class contains only static methods so that your plugin class don't have to inherit it. + """ + + @staticmethod + def absCoords(parent, coordsList, offset=[0, 0], label='none', lineStyle=lineStyle.setSimpleBlack(), closePath=False): + """Draw a (poly)line based on a list of absolute coordinates + + + :param parent: Parent object + :param coordsList: List with coords x and y. ex: [[x1,y1], ..., [xN,yN]] + + .. warning:: Keep in mind that Inkscape's y axis is upside down! + + :param offset: Offset coords. Default [0,0] + :param label: Label of the line. Default 'none' + :param lineStyle: Line style to be used. See :class:`lineStyle` class. Default: lineStyle=lineStyle.setSimpleBlack() + :param closePath: Connects the first point to the last. Default: False + + :type parent: inkscape element object + :type coordsList: list of list + :type offset: list + :type label: string + :type lineStyle: lineStyle object + :type closePath: bool + + :returns: the new line object + :rtype: line Object + + **Example** + + .. image:: ../imagesDocs/lineExample.png + :width: 250px + + >>> root_layer = self.document.getroot() # retrieves the root layer of the document + >>> myLineStyle = inkDraw.lineStyle.set(lineWidth=1.0, lineColor=color.defined('red')) + >>> + >>> # creates a polyline passing through points (0,0) (0,1) (1,1) (1,2) (2,2), and using absolute coordinates + >>> coords=[ [0,0], [0,1], [1,1], [1,2], [2,2] ] + >>> inkDraw.line.absCoords(root_layer, coordsList=coords, offset=[0, 0], label='fooBarLine', lineStyle=myLineStyle) + >>> + >>> # creates the same polyline translated to point (5,6). Note we just have to change the offset + >>> inkDraw.line.absCoords(root_layer, coordsList=coords, offset=[5, 6], label='fooBarLine', lineStyle=myLineStyle) + """ + + # string with coordinates + string_coords = '' + + for point in coordsList: + string_coords = string_coords + ' ' + str(point[0] + offset[0]) + ',' + str(point[1] + offset[1]) + + if closePath: + string_coords += ' Z' + + # M = move, L = line, H = horizontal line, V = vertical line, C = curve, S = smooth curve, + # Q = quadratic Bezier curve, T = smooth quadratic Bezier curve, A = elliptical Arc,Z = closepath + Attribs = {inkex.addNS('label', 'inkscape'): label, 'style': str(inkex.Style(lineStyle)), 'd': 'M ' + string_coords} + + return etree.SubElement(parent, inkex.addNS('path', 'svg'), Attribs) + + # --------------------------------------------- + @staticmethod + def relCoords(parent, coordsList, offset=[0, 0], label='none', lineStyle=lineStyle.setSimpleBlack(), closePath=False): + """Draw a (poly)line based on a list of relative coordinates + + :param parent: Parent object + :param coordsList: List with distances dx and dy for all points. ex [[dx1,dy1], ..., [dxN,dyN]] + + .. warning:: Keep in mind that Inkscape's y axis is upside down! + + :param offset: Offset coords. Default [0,0] + :param label: Label of the line. Default 'none' + :param lineStyle: Line style to be used. See :class:`lineStyle` class. Default: lineStyle=lineStyle.setSimpleBlack() + :param closePath: Connects the first point to the last. Default: False + + :type parent: inkscape element object + :type coordsList: list of list + :type offset: list + :type label: string + :type lineStyle: lineStyle object + :type closePath: bool + + :returns: the new line object + :rtype: line Object + + **Example** + + .. image:: ../imagesDocs/lineExample.png + :width: 250px + + >>> root_layer = self.document.getroot() # retrieves the root layer of the document + >>> myLineStyle = inkDraw.lineStyle.setSimpleBlack(lineWidth=1.0) + >>> + >>> # creates a polyline passing through points (0,0) (0,1) (1,1) (1,2) (2,2) using relative coordinates + >>> coords=[ [0,1], [1,0], [0,1], [1,0] ] + >>> inkDraw.line.relCoords(root_layer, coordsList=coords, offset=[0, 0], label='fooBarLine', lineStyle=myLineStyle) + >>> + >>> # creates the same polyline translated to point (5,6) + >>> inkDraw.line.relCoords(root_layer, coordsList=coords, offset=[5, 6], label='fooBarLine', lineStyle=myLineStyle) + """ + + # string with coordinates + string_coords = '' + for dist in coordsList: + string_coords = string_coords + ' ' + str(dist[0]) + ',' + str(dist[1]) + + if closePath: + string_coords += ' Z' + + # M = move, L = line, H = horizontal line, V = vertical line, C = curve, S = smooth curve, + # Q = quadratic Bezier curve, T = smooth quadratic Bezier curve, A = elliptical Arc,Z = closepath + Attribs = {inkex.addNS('label', 'inkscape'): label, 'style': str(inkex.Style(lineStyle)), + 'd': 'm ' + str(offset[0]) + ' ' + str(offset[1]) + string_coords} + + return etree.SubElement(parent, inkex.addNS('path', 'svg'), Attribs) + + +class arc(): + """ Class with methods for drawing arcs. + + .. note:: This class contains only static methods so that your plugin class don't have to inherit it. + """ + + @staticmethod + def startEndRadius(parent, Pstart, Pend, radius, offset=[0, 0], label='arc', lineStyle=lineStyle.setSimpleBlack(), flagRightOf=True, + arcType='open', largeArc=False): + """Draw a circle arc from ``Pstart`` to ``Pend`` with a given radius + + .. image:: ../imagesDocs/arc_startEndRadius.png + :width: 80px + + :param parent: Parent object + :param Pstart: Start coordinate [x,y] + + .. warning:: Keep in mind that Inkscape's y axis is upside down! + + :param Pend: End coordinate [x,y] + :param radius: Arc radius + :param offset: Extra offset coords [x,y]. Default [0,0] + :param label: Label of the line. Default 'arc' + :param lineStyle: Line style to be used. See :class:`lineStyle` class. Default: lineStyle=lineStyle.setSimpleBlack() + :param flagRightOf: Sets the side of the vector Pend-Pstart which the arc must be drawn. See image below + + - True: Draws the arc to the right (Default) + - False: Draws the arc to the left + + :param arcType: type of arc. Valid values: 'open', 'slice', 'chord'. See image below. Default: 'open' + + :param largeArc: Sets the largest arc to be drawn. See image below + + - True: Draws the largest arc + - False: Draws the smallest arc (Default) + + :type parent: inkscape element object + :type Pstart: list + :type Pend: list + :type radius: float + :type offset: list + :type label: string + :type lineStyle: lineStyle object + :type flagRightOf: bool + :type arcType: string + :type largeArc: bool + + :returns: the new arc object + :rtype: line Object + + **Arc options** + + .. image:: ../imagesDocs/arc_startEndRadius_flags.png + :width: 800px + + **Example** + + >>> root_layer = self.document.getroot() # retrieves the root layer of the document + >>> + >>> P1=[10.0,0.0] + >>> P2=[20.0,10.0] + >>> R=15.0 + >>> myLineStyle=inkDraw.lineStyle.setSimpleBlack() + >>> + >>> #draws an open arc + >>> inkDraw.arc.startEndRadius(parent=root_layer, Pstart=P1, Pend=P2, radius=R, offset=[25,0], label='arc1', lineStyle=myLineStyle, arcType='open') + >>> + >>> #draws a closed (slice) arc + >>> inkDraw.arc.startEndRadius(parent=root_layer, Pstart=P1, Pend=P2, radius=R, offset=[25,20], label='arc2', lineStyle=myLineStyle, arcType='slice') + >>> + >>> #draws an open arc to the right + >>> inkDraw.arc.startEndRadius(parent=root_layer, Pstart=P1, Pend=P2, radius=R, offset=[0,0], label='arc', lineStyle=myLineStyle, flagRightOf=True, largeArc=True) + """ + + # finds the center point using some linear algebra + StartVector = np.array(Pstart) + EndVector = np.array(Pend) + + DistVector = EndVector - StartVector + Dist = np.linalg.norm(DistVector) # distance between start and end + if Dist > 2.0 * radius: + return None + + if (flagRightOf and largeArc) or (not flagRightOf and not largeArc): + RadiusDirection = np.array([-DistVector[1], DistVector[0]]) # perpendicular to DistVector + else: + RadiusDirection = np.array([DistVector[1], -DistVector[0]]) # perpendicular to DistVector + + RadiusDirection = RadiusDirection / np.linalg.norm(RadiusDirection) # normalize RadiusDirection + CenterPoint = StartVector + DistVector / 2.0 + RadiusDirection * math.sqrt(radius ** 2.0 - (Dist / 2.0) ** 2.0) + + # computes the starting angle and ending angle + temp = StartVector - CenterPoint + AngStart = math.atan2(temp[1], temp[0]) + temp = EndVector - CenterPoint + AngEnd = math.atan2(temp[1], temp[0]) + + if flagRightOf: # inkscape does not follow svg path format to create arcs. It uses sodipodi which is weird =S + sodipodiAngleStart = str(AngEnd) + sodipodiAngleEnd = str(AngStart) + else: + sodipodiAngleStart = str(AngStart) + sodipodiAngleEnd = str(AngEnd) + + # arc instructions + if largeArc: + largeArcFlag = 1 + else: + largeArcFlag = 0 + if flagRightOf: + sweepFlag = 0 + else: + sweepFlag = 1 + arcString = ' a %f,%f 0 %d %d %f,%f' % (radius, radius, largeArcFlag, sweepFlag, EndVector[0] - StartVector[0], EndVector[1] - StartVector[1]) + if arcType.lower() == 'slice': + arcString = arcString + ' L ' + str(CenterPoint[0] + offset[0]) + ' ' + str(CenterPoint[1] + offset[1]) + ' z' + if arcType.lower() == 'chord': + arcString = arcString + ' z' + + # M = moveto,L = lineto,H = horizontal lineto,V = vertical lineto,C = curveto,S = smooth curveto,Q = quadratic Bezier curve,T = smooth quadratic Bezier curveto,A = elliptical Arc,Z = closepath + Attribs = {inkex.addNS('label', 'inkscape'): label, 'style': str(inkex.Style(lineStyle)), inkex.addNS('type', 'sodipodi'): 'arc', + inkex.addNS('rx', 'sodipodi'): str(radius), inkex.addNS('ry', 'sodipodi'): str(radius), + inkex.addNS('cx', 'sodipodi'): str(CenterPoint[0] + offset[0]), inkex.addNS('cy', 'sodipodi'): str(CenterPoint[1] + offset[1]), + inkex.addNS('start', 'sodipodi'): sodipodiAngleStart, inkex.addNS('end', 'sodipodi'): sodipodiAngleEnd, + 'd': 'M ' + str(offset[0] + StartVector[0]) + ' ' + str(offset[1] + StartVector[1]) + arcString} + if arcType.lower() == 'open': + Attribs[inkex.addNS('arc-type', 'sodipodi')] = 'arc' + else: + Attribs[inkex.addNS('arc-type', 'sodipodi')] = arcType.lower() + + return etree.SubElement(parent, inkex.addNS('path', 'svg'), Attribs) + + # --------------------------------------------- + @staticmethod + def centerAngStartAngEnd(parent, centerPoint, radius, angStart, angEnd, offset=[0, 0], label='arc', lineStyle=lineStyle.setSimpleBlack(), + arcType='open', largeArc=False): + """Draw a circle arc given its center and start and end angles + + .. image:: ../imagesDocs/arc_centerAngStartAngEnd.png + :width: 200px + + + :param parent: parent object + :param centerPoint: center coordinate [x,y] + + .. warning:: Keep in mind that Inkscape's y axis is upside down! + + :param radius: Arc radius + :param angStart: Start angle in degrees + :param angEnd: End angle in degrees + :param offset: Extra offset coords [x,y] + :param label: Label of the line. Default 'arc' + :param lineStyle: Line style to be used. See :class:`lineStyle` class. Default: lineStyle=lineStyle.setSimpleBlack() + :param arcType: Type of arc. Valid values: 'open', 'slice', 'chord'. See image below. Default: 'open' + :param largeArc: Sets the largest arc to be drawn. See image below + + - True: Draws the largest arc + - False: Draws the smallest arc (Default) + + :type parent: inkscape element object + :type centerPoint: list + :type radius: float + :type angStart: float + :type angEnd: float + :type offset: list + :type label: string + :type lineStyle: lineStyle object + :type arcType: string + :type largeArc: bool + + :returns: the new arc object + :rtype: line Object + + **Arc options** + + .. image:: ../imagesDocs/arc_centerAngStartAngEnd_flags.png + :width: 700px + + **Example** + + >>> root_layer = self.document.getroot() # retrieves the root layer of the document + >>> myLineStyle = inkDraw.lineStyle.setSimpleBlack() + >>> + >>> #draws the shortest arc + >>> inkDraw.arc.centerAngStartAngEnd(parent=root_layer, centerPoint=[0,0], radius=15.0, angStart=-10, angEnd=90, + >>> offset=[0,0], label='arc1', lineStyle=myLineStyle, arcType='open',largeArc=False) + >>> #draws the longest arc + >>> inkDraw.arc.centerAngStartAngEnd(parent=root_layer, centerPoint=[0,0], radius=15.0, angStart=-10, angEnd=90, + >>> offset=[30,0], label='arc1', lineStyle=myLineStyle, arcType='open',largeArc=True) + """ + + Pstart = [radius * math.cos(math.radians(angStart)), radius * math.sin(math.radians(angStart))] + Pend = [radius * math.cos(math.radians(angEnd)), radius * math.sin(math.radians(angEnd))] + + pos = [centerPoint[0] + offset[0], centerPoint[1] + offset[1]] + + if abs(angEnd - angStart) <= 180: + flagRight = largeArc + else: + flagRight = not largeArc + + return arc.startEndRadius(parent, Pstart, Pend, radius, pos, label, lineStyle, flagRight, arcType, largeArc) + + # --------------------------------------------- + @staticmethod + def threePoints(parent, Pstart, Pmid, Pend, offset=[0, 0], label='arc', lineStyle=lineStyle.setSimpleBlack(), arcType='open'): + """Draw a circle arc given 3 points + + .. image:: ../imagesDocs/arc_3points.png + :width: 120px + + + :param parent: parent object + :param Pstart: Start coordinate [x,y] + + .. warning:: Keep in mind that Inkscape's y axis is upside down! + + :param Pmid: Mid coordinate [x,y] + :param Pend: End coordinate [x,y] + :param offset: Extra offset coords [x,y] + :param label: Label of the line. Default 'arc' + :param lineStyle: Line style to be used. See :class:`lineStyle` class. Default: lineStyle=lineStyle.setSimpleBlack() + :param arcType: Type of arc. Valid values: 'open', 'slice', 'chord'. See image below. Default: 'open' + + :type parent: inkscape element object + :type Pstart: list + :type Pmid: list + :type Pend: list + :type offset: list + :type label: string + :type lineStyle: lineStyle object + :type arcType: string + + :returns: the new arc object + :rtype: line Object + + **Arc options** + + .. image:: ../imagesDocs/arc_type_flags.png + :width: 400px + + **Example** + + >>> root_layer = self.document.getroot() # retrieves the root layer of the document + >>> myLineStyle = inkDraw.lineStyle.setSimpleBlack() + >>> + >>> P1=[10.0,0.0] + >>> P2=[20.0,10.0] + >>> P3=[50.0,30.0] + >>> + >>> #draws an open arc + >>> inkDraw.arc.threePoints(parent=root_layer, Pstart=P1, Pmid=P3, Pend=P3, offset=[25,0], label='arc1', lineStyle=myLineStyle, arcType='open') + """ + + [center,radius] = circle3Points(Pstart, Pmid, Pend) + + if center is None: + return + vStart=np.array(Pstart) + vEnd=np.array(Pend) + vMid=np.array(Pmid) + + # find side + DistVector = vEnd-vStart + NormalLeftVector = np.array([DistVector[1],-DistVector[0]]) + MidVector = vMid - vStart + CenterVector = center - vStart + + # check if MidVector and CenterVector are pointing to the same side of DistVector + if np.dot(CenterVector,NormalLeftVector)*np.dot(MidVector,NormalLeftVector)>0: + largeArc = True + else: + largeArc = False + + angStart = math.atan2(Pstart[1]-center[1], Pstart[0]-center[0]) + angEnd = math.atan2(Pend[1]-center[1], Pend[0]-center[0]) + + angles = np.unwrap([angStart, angEnd])*180/np.pi + angStart=angles[0] + angEnd=angles[1] + + if angEnd - angStart>0: + return arc.centerAngStartAngEnd(parent, center, radius, angStart, angEnd, offset, label,lineStyle,arcType,largeArc) + else: + return arc.centerAngStartAngEnd(parent, center, radius, angEnd, angStart, offset, label,lineStyle,arcType,largeArc) + + +class circle(): + """ Class with methods for drawing circles. + + .. note:: This class contains only static methods so that your plugin class don't have to inherit it. + """ + + @staticmethod + def centerRadius(parent, centerPoint, radius, offset=[0, 0], label='circle', lineStyle=lineStyle.setSimpleBlack()): + """Draw a circle given its center point and radius + + :param parent: Parent object + :param centerPoint: Center coordinate [x,y] + + .. warning:: Keep in mind that Inkscape's y axis is upside down! + + :param radius: Circle's radius + :param offset: Extra offset coords [x,y] + :param label: Label of the line. Default 'circle' + :param lineStyle: Line style to be used. See :class:`lineStyle` class. Default: lineStyle=lineStyle.setSimpleBlack() + + :type parent: inkscape element object + :type centerPoint: list + :type radius: float + :type offset: list + :type label: string + :type lineStyle: lineStyle object + + :returns: the new circle object + :rtype: line Object + + **Example** + + >>> root_layer = self.document.getroot() # retrieves the root layer of the document + >>> myLineStyle = inkDraw.lineStyle.setSimpleBlack() + >>> + >>> inkDraw.circle.centerRadius(parent=root_layer, centerPoint=[0,0], radius=15.0, offset=[5,1], label='circle1', lineStyle=myLineStyle) + """ + + # arc instructions + arcStringA = ' a %f,%f 0 1 1 %f,%f' % (radius, radius, -2 * radius, 0) + arcStringB = ' a %f,%f 0 1 1 %f,%f' % (radius, radius, 2 * radius, 0) + + # M = moveto,L = lineto,H = horizontal lineto,V = vertical lineto,C = curveto,S = smooth curveto,Q = quadratic Bezier curve,T = smooth quadratic Bezier curveto,A = elliptical Arc,Z = closepath + Attribs = {inkex.addNS('label', 'inkscape'): label, 'style': str(inkex.Style(lineStyle)), inkex.addNS('type', 'sodipodi'): 'arc', + inkex.addNS('rx', 'sodipodi'): str(radius), inkex.addNS('ry', 'sodipodi'): str(radius), + inkex.addNS('cx', 'sodipodi'): str(centerPoint[0] + offset[0]), inkex.addNS('cy', 'sodipodi'): str(centerPoint[1] + offset[1]), + inkex.addNS('start', 'sodipodi'): '0', inkex.addNS('end', 'sodipodi'): str(2 * math.pi), + 'd': 'M ' + str(centerPoint[0] + offset[0] + radius) + ' ' + str( + centerPoint[1] + offset[1]) + arcStringA + ' ' + arcStringB + ' z'} + + return etree.SubElement(parent, inkex.addNS('path', 'svg'), Attribs) + + # --------------------------------------------- + @staticmethod + def threePoints(parent, P1, P2, P3, offset=[0, 0], label='circle', lineStyle=lineStyle.setSimpleBlack()): + """Draw a circle given 3 poins on the circle. + + The function checks if the 3 points are aligned. In this case, no circle is drawn. + + :param parent: parent object + :param P1: point coordinates [x,y] + :param P2: point coordinates [x,y] + :param P3: point coordinates [x,y] + + .. warning:: Keep in mind that Inkscape's y axis is upside down! + + :param offset: Extra offset coords [x,y] + :param label: Label of the line. Default 'arc' + :param lineStyle: Line style to be used. See :class:`lineStyle` class. Default: lineStyle=lineStyle.setSimpleBlack() + + :type parent: inkscape element object + :type P1: list + :type P2: list + :type P3: list + :type offset: list + :type label: string + :type lineStyle: lineStyle object + + :returns: the new circle object + :rtype: line Object + + **Example** + + >>> root_layer = self.document.getroot() # retrieves the root layer of the document + >>> myLineStyle = inkDraw.lineStyle.setSimpleBlack() + >>> + >>> inkDraw.circle.threePoints(parent=root_layer, P1=[0,0], P2=[30,40], P3=[-20,20], offset=[0,0], label='circle1', lineStyle=myLineStyle) + + .. image:: ../imagesDocs/circle_3P.png + :width: 200px + + """ + + [center,radius] = circle3Points(P1, P2, P3) + + return circle.centerRadius(parent, center, radius, offset, label, lineStyle) + +class rectangle(): + """ Class with methods for drawing rectangles. + + .. note:: This class contains only static methods so that your plugin class don't have to inherit it. + """ + + @staticmethod + def widthHeightCenter(parent, centerPoint, width, height, radiusX=None, radiusY=None, offset=[0, 0], label='rectangle', + lineStyle=lineStyle.setSimpleBlack()): + """Draw a rectangle given its center point and dimensions + + :param parent: Parent object + :param centerPoint: Center coordinate [x,y] + + .. warning:: Keep in mind that Inkscape's y axis is upside down! + + :param width: Dimension in X direction + :param height: Dimension in Y direction + :param radiusX: Rounding radius in X direction. If this value is ``None``, the rectangle will have sharp corners. Default: None + :param radiusY: Rounding radius in Y direction. + - If ``None``, then radiusX will also be used in Y direction. + - If ``None`` and radiusX is also ``None``, then the rectangle will have sharp corners. Default: None + :param offset: Extra offset coords [x,y] + :param label: Label of the line. Default 'circle' + :param lineStyle: Line style to be used. See :class:`lineStyle` class. Default: lineStyle=lineStyle.setSimpleBlack() + + :type parent: inkscape element object + :type centerPoint: list + :type width: float + :type height: float + :type radiusX: float + :type radiusY: float + :type offset: list + :type label: string + :type lineStyle: lineStyle object + + :returns: the new rectangle object + :rtype: rectangle Object + + **Example** + + >>> root_layer = self.document.getroot() # retrieves the root layer of the document + >>> myLineStyle=inkDraw.lineStyle.setSimpleBlack() + >>> + >>> #draws a 50x60 rectangle with radiusX=2.0 and radiusY=3.0 + >>> inkDraw.rectangle.widthHeightCenter(parent=root_layer, centerPoint=[0,0], width=50, height=60, radiusX=2.0,radiusY=3.0, offset=[0,0], label='rect1', lineStyle=myLineStyle) + """ + x = centerPoint[0] - width / 2.0 + offset[0] + y = centerPoint[1] - height / 2.0 + offset[1] + + Attribs = {inkex.addNS('label', 'inkscape'): label, 'style': str(inkex.Style(lineStyle)), 'width': str(width), 'height': str(height), + 'x': str(x), 'y': str(y), 'rx': str(radiusX), 'ry': str(radiusY)} + + if radiusX and radiusX > 0.0: + Attribs['rx'] = str(radiusX) + if radiusY is None: + Attribs['ry'] = str(radiusX) + else: + if radiusY > 0.0: + Attribs['ry'] = str(radiusY) + + return etree.SubElement(parent, inkex.addNS('rect', 'svg'), Attribs) + + @staticmethod + def corners(parent, corner1, corner2, radiusX=None, radiusY=None, offset=[0, 0], label='rectangle', lineStyle=lineStyle.setSimpleBlack()): + """Draw a rectangle given the coordinates of two oposite corners + + :param parent: Parent object + :param corner1: Coordinates of corner 1 [x,y] + + .. warning:: Keep in mind that Inkscape's y axis is upside down! + + :param corner2: Coordinates of corner 2 [x,y] + :param radiusX: Rounding radius in X direction. If this value is ``None``, the rectangle will have sharp corners. Default: None + :param radiusY: Rounding radius in Y direction. If this value is ``None``, then radiusX will also be used in Y direction. If radiusX is also ``None``, then the rectangle will have sharp corners. Default: None + :param offset: Extra offset coords [x,y] + :param label: Label of the line. Default 'circle' + :param lineStyle: Line style to be used. See :class:`lineStyle` class. Default: lineStyle=lineStyle.setSimpleBlack() + + :type parent: inkscape element object + :type corner1: list + :type corner2: list + :type radiusX: float + :type radiusY: float + :type offset: list + :type label: string + :type lineStyle: lineStyle object + + :returns: the new rectangle object + :rtype: rectangle Object + + **Example** + + >>> root_layer = self.document.getroot() # retrieves the root layer of the document + >>> myLineStyle=inkDraw.lineStyle.setSimpleBlack() + >>> + >>> #draws a rectangle with corners C1=[1,5] and C2=[6,10], with radiusX=2.0 and radiusY=3.0 + >>> inkDraw.rectangle.corners(parent=root_layer, corner1=[1,5], corner2=[6,10], radiusX=2.0,radiusY=3.0, offset=[0,0], label='rect1', lineStyle=myLineStyle) + """ + x = (corner1[0] + corner2[0]) / 2.0 + y = (corner1[1] + corner2[1]) / 2.0 + + width = abs(corner1[0] - corner2[0]) + height = abs(corner1[1] - corner2[1]) + + return rectangle.widthHeightCenter(parent, [x, y], width, height, radiusX, radiusY, offset, label, lineStyle) + + +class ellipse(): + """ Class with methods for drawing ellipses. + + .. note:: This class contains only static methods so that your plugin class don't have to inherit it. + """ + + @staticmethod + def centerRadius(parent, centerPoint, radiusX, radiusY, offset=[0, 0], label='circle', lineStyle=lineStyle.setSimpleBlack()): + """Draw an ellipse given its center point and radii + + :param parent: Parent object + :param centerPoint: Center coordinate [x,y] + + .. warning:: Keep in mind that Inkscape's y axis is upside down! + + :param radiusX: Ellipse's radius in x direction + :param radiusY: Ellipse's radius in y direction + :param offset: Extra offset coords [x,y] + :param label: Label of the line. Default 'circle' + :param lineStyle: Line style to be used. See :class:`lineStyle` class. Default: lineStyle=lineStyle.setSimpleBlack() + + :type parent: inkscape element object + :type centerPoint: list + :type radiusX: float + :type radiusY: float + :type offset: list + :type label: string + :type lineStyle: lineStyle object + + :returns: the new ellipse object + :rtype: line Object + + **Example** + + >>> root_layer = self.document.getroot() # retrieves the root layer of the document + >>> myLineStyle=inkDraw.lineStyle.setSimpleBlack() + >>> + >>> #draws the shortest arc + >>> inkDraw.ellipse.centerRadius(parent=root_layer, centerPoint=[0,0], radiusX=15.0, radiusY=25.0, offset=[5,1], label='circle1', lineStyle=myLineStyle) + """ + + # arc instructions + arcStringA = ' a %f,%f 0 1 1 %f,%f' % (radiusX, radiusY, -2 * radiusX, 0) + arcStringB = ' a %f,%f 0 1 1 %f,%f' % (radiusX, radiusY, 2 * radiusX, 0) + + # M = moveto,L = lineto,H = horizontal lineto,V = vertical lineto,C = curveto,S = smooth curveto,Q = quadratic Bezier curve,T = smooth quadratic Bezier curveto,A = elliptical Arc,Z = closepath + Attribs = {inkex.addNS('label', 'inkscape'): label, 'style': str(inkex.Style(lineStyle)), inkex.addNS('type', 'sodipodi'): 'arc', + inkex.addNS('rx', 'sodipodi'): str(radiusX), inkex.addNS('ry', 'sodipodi'): str(radiusY), + inkex.addNS('cx', 'sodipodi'): str(centerPoint[0] + offset[0]), inkex.addNS('cy', 'sodipodi'): str(centerPoint[1] + offset[1]), + inkex.addNS('start', 'sodipodi'): '0', inkex.addNS('end', 'sodipodi'): str(2 * math.pi), + 'd': 'M ' + str(centerPoint[0] + offset[0] + radiusX) + ' ' + str( + centerPoint[1] + offset[1]) + arcStringA + ' ' + arcStringB + ' z'} + + return etree.SubElement(parent, inkex.addNS('path', 'svg'), Attribs) diff --git a/extensions/fablabchemnitz/spirograph/inkscapeMadeEasy/inkscapeMadeEasy_Plot.py b/extensions/fablabchemnitz/spirograph/inkscapeMadeEasy/inkscapeMadeEasy_Plot.py new file mode 100644 index 00000000..5818dad9 --- /dev/null +++ b/extensions/fablabchemnitz/spirograph/inkscapeMadeEasy/inkscapeMadeEasy_Plot.py @@ -0,0 +1,1632 @@ +#!/usr/bin/python + +# -------------------------------------------------------------------------------------- +# +# inkscapeMadeEasy: - Helper module that extends Aaron Spike's inkex.py module, +# focusing productivity in inkscape extension development +# +# Copyright (C) 2016 by Fernando Moura +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +# -------------------------------------------------------------------------------------- + +import math +import sys + +import inkscapeMadeEasy.inkscapeMadeEasy_Draw as inkDraw + + +def displayMsg(msg): + """Display a message to the user. + + :param msg: message + :type msg: string + + :returns: nothing + :rtype: - + + .. note:: Identical function has been also defined inside :meth:`inkscapeMadeEasy_Base.inkscapeMadeEasy` class + + """ + sys.stderr.write(msg + '\n') + + +def Dump(obj, file='./dump_file.txt', mode='w'): + """Function to easily output the result of ``str(obj)`` to a file + + :param obj: python object to sent to a file. Any object can be used, as long as ``str(obj)`` is implemented (see ``__str__()`` metaclass definition of your object) + :param file: file path. Default: ``./dump_file.txt`` + :param mode: writing mode of the file Default: ``w`` (write) + :type obj: any + :type file: string + :type mode: string + :returns: nothing + :rtype: - + + .. note:: Identical function has been also defined inside :meth:`inkscapeMadeEasy_Base.inkscapeMadeEasy` class + + This function was created to help debugging the code while it is running under inkscape. Since inkscape does not possess a terminal as today (2016), + this function overcomes partially the issue of sending things to stdout by dumping result of the function ``str()`` in a text file. + + **Example** + + >>> vector1=[1,2,3,4,5,6] + >>> inkPlot.Dump(vector1,file='~/temporary.txt',mode='w') # writes the list to a file + >>> vector2=[7,8,9,10] + >>> inkPlot.Dump(vector2,file='~/temporary.txt',mode='a') # append the list to a file + """ + + with open(file, mode) as file: + file.write(str(obj) + '\n') + + +def generateListOfTicksLinear(axisLimits, axisOrigin, tickStep): + """Defines list of ticks in a linear plot + + .. note:: Internal function. + """ + + # make the list of ticks, symmetrically to the origin + listTicksPositive = [axisOrigin] + while listTicksPositive[-1] < axisLimits[1]: + listTicksPositive.append(listTicksPositive[-1] + tickStep) + + listTicksNegative = [axisOrigin] + + while listTicksNegative[-1] > axisLimits[0]: + listTicksNegative.append(listTicksNegative[-1] - tickStep) + + listTicks = listTicksPositive + listTicksNegative[1:] + return listTicks + + +def generateListOfTicksLog10(axisLimits): + """Defines list of ticks in a log10 plot + + .. note:: Internal function. + """ + + # make the list of ticks, symmetrically to the origin + listTicks = [axisLimits[0]] + while listTicks[-1] < axisLimits[1]: + listTicks.append(listTicks[-1] * 10) + return listTicks + + +def findOrigin(axisLimits, flagLog10, scale): + """ retrieves the position of the origin. In case of logarithmic scale, it will be axisLimits[0] + + .. note:: Internal function. + """ + if flagLog10: + axisOrigin = math.log10(axisLimits[0]) * scale + else: + if axisLimits[0] <= 0.0 and axisLimits[1] >= 0.0: + axisOrigin = 0.0 + else: + if axisLimits[1] < 0: + axisOrigin = axisLimits[1] * scale + else: + axisOrigin = axisLimits[0] * scale + + return axisOrigin + + +def getPositionAndText(value, scale, flagLog10, axisUnitFactor): + """given a value, its scale, and some flags, finds it position in the diagram and the text to be shown + + .. note:: Internal function.""" + if flagLog10: + pos = math.log10(value) * scale + else: + pos = value * scale + # try to simplify number + if int(value) - value == 0: + valStr = str(int(round(value, 3))) + else: + valStr = str(round(value, 3)) + + # option to add extra factor to the axis ticks + if flagLog10: + exponent = str(int(math.log10(value))) + if axisUnitFactor: + if inkDraw.useLatex: + Text = '10^{' + exponent + '}' + axisUnitFactor + '' + else: + Text = '10^' + exponent + '' + axisUnitFactor + '' + else: + if inkDraw.useLatex: + Text = '10^{' + exponent + '}' + else: + Text = '10^' + exponent + '' + else: + if axisUnitFactor: + if value == 0: + Text = '0' + if value == 1: + Text = axisUnitFactor + if value == -1: + Text = '-' + axisUnitFactor + if value != 0 and value != 1 and value != -1: + Text = valStr + axisUnitFactor + else: + Text = valStr + + if inkDraw.useLatex: + Text = '$' + Text + '$' + + return [pos, Text] + + +class axis(): + """ This class has member functions to create customizable plot axes. + + .. note:: This class contains only static methods so that your plugin class don't have to inherit it. + + .. note:: This class can use LaTeX to render text if LaTeX support is enabled. LaTeX support is an optional feature that requires a few extra packages to be installed outside inkscape. **It is enabled by default**. + Please refer to :ref:`disableLatexSupport` on how to disable it. If disabled, this function will still work, internally calling the :meth:`inkscapeMadeEasy_Draw.text.write` to generate text. + """ + + @staticmethod + def cartesian(ExtensionBaseObj, parent, xLim, yLim, position=[0, 0], xLabel='', yLabel='', xlog10scale=False, ylog10scale=False, xTicks=True, + yTicks=True, xTickStep=1.0, yTickStep=1.0, xScale=20, yScale=20, xAxisUnitFactor='', yAxisUnitFactor='', xGrid=False, yGrid=False, + forceTextSize=0, forceLineWidth=0, drawAxis=True, ExtraLengthAxisX=0.0, ExtraLengthAxisY=0.0): + """Creates the axes of a cartesian plot + + .. note:: This method uses LaTeX in labels and tick marks if LaTeX support is enabled. This is an optional feature, **enabled by default**. Please refer to :ref:`disableLatexSupport` on how to disable it. + + :param ExtensionBaseObj: Most of the times you have to pass 'self' when calling from inside your plugin class. See example below + :param parent: Parent object + :param xLim: Limits of the X axis [x_min,x_max]. If the axis is in log10 scale, then the limits will be rounded to complete one decade. + :param yLim: Limits of the Y axis [y_min,y_max]. If the axis is in log10 scale, then the limits will be rounded to complete one decade. + :param position: Position of the plot. It is defined at the point where x and y axis cross [x0,y0]. The point where the axis cross depend on the limits. + + - If xLimits comprises the origin x=0, then the Y axis crosses the X axis at x=0. + - If xLimits contains only negative numbers, then the Y axis crosses the X axis at x_max. + - If xLimits contains only positive numbers, then the Y axis crosses the X axis at x_min. + + - The same rule applies to y direction. + :param xLabel: Label of the X axis. Default: '' + + The text can contain any LaTeX command. If you want to write mathematical text, you can enclose it between dollar signs $...$. If LaTeX support is disabled, do not use $. + + :param yLabel: Label of the Y axis. Default: '' + + The text can contain any LaTeX command. If you want to write mathematical text, you can enclose it between dollar signs $...$. If LaTeX support is disabled, do not use $. + + :param xlog10scale: Sets X axis to log10 scale if True. Default: False + :param ylog10scale: Sets Y axis to log10 scale if True. Default: False + :param xTicks: Adds axis ticks to the X axis if True. Default: True + :param yTicks: Adds axis ticks to the Y axis if True. Default: True + :param xTickStep: Value interval between two consecutive ticks on X axis. (Not used if X axis is in log10 scale). Default:1.0 + :param yTickStep: Value interval between two consecutive ticks on Y axis. (Not used if Y axis is in log10 scale). Default:1.0 + :param xScale: Distance between each xTickStep in svg units. Default: 20 + + - If axis is linear, then xScale is the size in svg units of each tick + - If axis is log10, the xScale is the size in svg units of one decade + + :param yScale: Distance between each yTickStep in svg units. Default: 20 + + - If axis is linear, then yScale is the size in svg units of each tick + - If axis is log10, the yScale is the size in svg units of one decade + + :param xAxisUnitFactor: Extra text to be added to the ticks in X axis. Default: '' + + This is useful when we want to represent interval with different units. example pi, 2pi 3pi, etc. + The text can be any LaTeX text. Keep in mind that this text will be inserted within a mathematical environment $...$, therefore no $ is needed here. + :param yAxisUnitFactor: Extra text to be added to the ticks in Y axis. Default: '' + + This is useful when we want to represent interval with different units. example pi, 2pi 3pi, etc. + The text can be any LaTeX text. Keep in mind that this text will be inserted within a mathematical environment $...$, therefore no $ is needed here. + + :param xGrid: Adds grid lines to X axis if True. Default: False + :param yGrid: Adds grid lines to Y axis if True. Default: False + :param forceTextSize: Size of the text. If this parameter is 0.0 then the method will compute an appropriate size. Default: 0.0 + :param forceLineWidth: Width of the lines. If this parameter is 0.0 then the method will compute an appropriate size. Default: 0.0 + + :param drawAxis: Control flag of the axis method + + - True: draws axis normally + - False: returns the limits and origin position without drawing the axis itself + + :param ExtraLengthAxisX: Extra length near the arrow pointer of X axis. Default 0.0 + :param ExtraLengthAxisY: Extra length near the arrow pointer of Y axis. Default 0.0 + + :type ExtensionBaseObj: inkscapeMadeEasy object + :type parent: inkscape element object + :type xLim: list + :type yLim: list + :type position: list + :type xLabel: string + :type yLabel: string + :type xlog10scale: bool + :type ylog10scale: bool + :type xTicks: bool + :type yTicks: bool + :type xTickStep: float + :type yTickStep: float + :type xScale: float + :type yScale: float + :type xAxisUnitFactor: string + :type yAxisUnitFactor: string + :type xGrid: bool + :type yGrid: bool + :type forceTextSize: float + :type forceLineWidth: float + :type drawAxis: bool + :type ExtraLengthAxisX: float + :type ExtraLengthAxisY: float + + :returns: [GroupPlot, outputLimits, axisOrigin] + + - GroupPlot: the axis area object (if drawAxis=False, this output is ``None``) + - outputLimits: a list with tuples:[(x_min,xPos_min),(x_max,xPos_max),(y_min,yPos_min),(y_max,yPos_max)] + + - x_min, x_max, y_min, y_max: The limits of the axis object + - xPos_min, xPos_max, yPos_min, yPos_max: The positions of the limits of the axis object, considering the scaling and units + - axisOrigin [X0,Y0]: A list with the coordinates of the point where the axes cross. + :rtype: list + + **Examples** + + >>> root_layer = self.document.getroot() # retrieves the root layer of the document + >>> + >>> inkPlot.axis.cartesian(ExtensionBaseObj, parent=root_layer, xLim=[0,3], yLim=[0,2], position=[0, 0], + >>> xLabel='my label $x$', yLabel='my label $y$', xlog10scale=False, ylog10scale=False, + >>> xTicks=True, yTicks=True, xTickStep=0.5, yTickStep=1.0, xScale=50, yScale=60, + >>> xAxisUnitFactor='', yAxisUnitFactor='', xGrid=True, yGrid=True, forceTextSize=0, forceLineWidth=0, + >>> drawAxis=True, ExtraLengthAxisX=20.0, ExtraLengthAxisY=10.0) + + The images below show the cartesian plane of the example above, together with other variations. + + .. image:: ../imagesDocs/plot_axisCartesianParameters_01.png + :width: 800px + + """ + if drawAxis: + GroupPlot = ExtensionBaseObj.createGroup(parent, 'Plot') + + # sets the scale scaleX and scaleY stores the size of one unit in both axis (linear axis) or the size of a decade in log plots + if xlog10scale: + scaleX = xScale + else: + scaleX = xScale / float(xTickStep) + + if ylog10scale: + scaleY = -yScale + else: + scaleY = -yScale / float(yTickStep) # negative bc inkscape is upside down + + # font size and other text parameters + if forceTextSize == 0: + textSize = 0.25 * min(xScale, yScale) + else: + textSize = forceTextSize + + textSizeSmall = 0.8 * textSize # font size for axis ticks + + text_offset = textSize # base space for text positioning + ExtraSpaceArrowX = (2.0 + ExtraLengthAxisX) * text_offset # extra space for drawing arrow on axis + ExtraSpaceArrowY = (3.0 + ExtraLengthAxisY) * text_offset # extra space for drawing arrow on axis + lenghtTicks = textSize / 2.0 # length of the ticks + + # create styles + if forceLineWidth == 0: + lineWidth = min(xScale, yScale) / 35.0 + else: + lineWidth = forceLineWidth + + lineWidthGrid = 0.7 * lineWidth + lineWidthGridFine = lineWidthGrid / 2.0 + + nameMarkerArrowAxis = inkDraw.marker.createArrow1Marker(ExtensionBaseObj, 'ArrowAxis', RenameMode=1, scale=0.4) + lineStyleAxis = inkDraw.lineStyle.set(lineWidth, lineColor=inkDraw.color.gray(0.3), markerEnd=nameMarkerArrowAxis[1]) + lineStyleTicks = inkDraw.lineStyle.set(lineWidth, lineColor=inkDraw.color.gray(0.3)) + lineStyleGrid = inkDraw.lineStyle.set(lineWidthGrid, lineColor=inkDraw.color.gray(0.7)) + lineStyleGridFine = inkDraw.lineStyle.set(lineWidthGridFine, lineColor=inkDraw.color.gray(0.7)) + + textStyleLarge = inkDraw.textStyle.setSimpleBlack(textSize) + textStyleSmall = inkDraw.textStyle.setSimpleBlack(textSizeSmall, 'center') + + # check if limits are valid + if xLim[0] >= xLim[1]: + sys.stderr.write('Error: xLim is invalid.') + return 0 + if yLim[0] >= yLim[1]: + sys.stderr.write('Error: yLim is invalid.') + return 0 + # check if the limits are valid for logarithmic scales. + if xlog10scale: + if xLim[0] <= 0 or xLim[1] <= 0: + sys.stderr.write('Error: xLim is invalid in logarithmic scale') + return 0 + else: + xmin = pow(10, math.floor(math.log10(xLim[0]))) + xmax = pow(10, math.ceil(math.log10(xLim[1]))) + xLimits = [xmin, xmax] + else: + xLimits = xLim + + if ylog10scale: + if yLim[0] <= 0 or yLim[1] <= 0: + sys.stderr.write('Error: yLim is invalid in logarithmic scale') + return 0 + else: + ymin = pow(10, math.floor(math.log10(yLim[0]))) + ymax = pow(10, math.ceil(math.log10(yLim[1]))) + yLimits = [ymin, ymax] + else: + yLimits = yLim + + # finds the position of the Origin of axis + axisOrigin = [0.0, 0.0] + + axisOrigin[0] = findOrigin(xLimits, xlog10scale, scaleX) + axisOrigin[1] = findOrigin(yLimits, ylog10scale, scaleY) + + # computes the positions of the limits on svg, considering the scale + + if xlog10scale: # convert limits to position in diagram, including scaling factor + xLimitsPos = [math.log10(x) * scaleX for x in xLimits] + else: + xLimitsPos = [x * scaleX for x in xLimits] + + if ylog10scale: # convert limits to position in diagram, including scaling factor + yLimitsPos = [math.log10(y) * scaleY for y in yLimits] + else: + yLimitsPos = [y * scaleY for y in yLimits] + + # build the list of tuples with the limits of the plotting area + outputLimits = list(zip([xLimits[0], xLimits[1], yLimits[0], yLimits[1]], + [xLimitsPos[0] - axisOrigin[0] + position[0], xLimitsPos[1] - axisOrigin[0] + position[0], + yLimitsPos[0] - axisOrigin[1] + position[1], yLimitsPos[1] - axisOrigin[1] + position[1]])) + if not drawAxis: + return [None, outputLimits, axisOrigin] + + # axis ticks + groupTicks = ExtensionBaseObj.createGroup(GroupPlot, 'Ticks') + + if xTicks or xGrid: + + if xlog10scale: + listTicks = generateListOfTicksLog10(xLimits) + else: + listTicks = generateListOfTicksLinear(xLimits, axisOrigin[0] / scaleX, xTickStep) + for x in listTicks: + + if x <= xLimits[1] and x >= xLimits[0]: + + # get position, considering the scale and its text + [posX, xText] = getPositionAndText(x, scaleX, xlog10scale, xAxisUnitFactor) + + if xGrid and posX != axisOrigin[0]: # grid lines. Do not draw if grid line is over the axis + inkDraw.line.absCoords(groupTicks, [[posX, yLimitsPos[0]], [posX, yLimitsPos[1]]], [0, 0], lineStyle=lineStyleGrid) + + # intermediate grid lines in case of logarithmic scale + if xGrid and xlog10scale and x < xLimits[1]: + for i in range(2, 10): + aditionalStep = math.log10(i) * scaleX + inkDraw.line.absCoords(groupTicks, [[posX + aditionalStep, yLimitsPos[0]], [posX + aditionalStep, yLimitsPos[1]]], [0, 0], + lineStyle=lineStyleGridFine) + + # tick + if xTicks: + if posX != axisOrigin[0]: # don't draw if in the origin + inkDraw.line.relCoords(groupTicks, [[0, lenghtTicks]], [posX, axisOrigin[1] - lenghtTicks / 2.0], + lineStyle=lineStyleTicks) + + # sets justification + # inkDraw.text.write(ExtensionBaseObj,'orig='+str(axisOrigin),[axisOrigin[0]+10,axisOrigin[1]-30],groupTicks,fontSize=7) + # inkDraw.text.write(ExtensionBaseObj,'xlim='+str(xLimitsPos),[axisOrigin[0]+10,axisOrigin[1]-20],groupTicks,fontSize=7) + # inkDraw.text.write(ExtensionBaseObj,'ylim='+str(yLimitsPos),[axisOrigin[0]+10,axisOrigin[1]-10],groupTicks,fontSize=7) + + if axisOrigin[1] == yLimitsPos[0]: + justif = 'tc' + offsetX = 0 + offsetY = text_offset / 2.0 # inkDraw.circle.centerRadius(groupTicks, axisOrigin, 10, [0,0]) + + if axisOrigin[1] != yLimitsPos[0] and axisOrigin[1] != yLimitsPos[1]: + justif = 'tr' + offsetX = -text_offset / 4.0 + offsetY = text_offset / 2.0 + # inkDraw.circle.centerRadius(groupTicks, axisOrigin, 10, [0,0]) + # inkDraw.text.write(ExtensionBaseObj,str(axisOrigin[1]),[axisOrigin[0]+10,axisOrigin[1]+10],groupTicks,fontSize=7) + # inkDraw.text.write(ExtensionBaseObj,str(yLimitsPos[0]),[axisOrigin[0]+10,axisOrigin[1]+20],groupTicks,fontSize=7) + if posX == axisOrigin[0]: + if posX == xLimitsPos[1]: + justif = 'tr' + offsetX = -text_offset / 4.0 + else: + justif = 'tl' + offsetX = +text_offset / 4.0 + + if axisOrigin[1] == yLimitsPos[1]: + justif = 'bc' + offsetX = 0 + offsetY = -text_offset / 2.0 + # inkDraw.circle.centerRadius(groupTicks,axisOrigin, 10, [0,0]) + if posX == axisOrigin[0]: + if posX == xLimitsPos[1]: + justif = 'br' + offsetX = -text_offset / 4.0 + else: + justif = 'bl' + offsetX = +text_offset / 4.0 + + # value + if xTicks: + inkDraw.text.latex(ExtensionBaseObj, groupTicks, xText, [posX + offsetX, axisOrigin[1] + offsetY], textSizeSmall, + refPoint=justif) + + if yTicks or yGrid: + # approximate limits to multiples of 10 + if ylog10scale: + listTicks = generateListOfTicksLog10(yLimits) + else: + listTicks = generateListOfTicksLinear(yLimits, axisOrigin[1] / scaleY, yTickStep) + + for y in listTicks: + if y <= yLimits[1] and y >= yLimits[0]: + + # get position, considering the scale and its text + [posY, yText] = getPositionAndText(y, abs(scaleY), ylog10scale, yAxisUnitFactor) + posY = -posY + + if yGrid and posY != axisOrigin[1]: # grid lines. Do not draw if grid line is over the axis + inkDraw.line.absCoords(groupTicks, [[xLimitsPos[0], posY], [xLimitsPos[1], posY]], [0, 0], lineStyle=lineStyleGrid) + + # intermediate grid lines in case of logarithmic scale + if yGrid and ylog10scale and y < yLimits[1]: + for i in range(2, 10): + aditionalStep = math.log10(i) * scaleY + inkDraw.line.absCoords(groupTicks, [[xLimitsPos[0], posY + aditionalStep], [xLimitsPos[1], posY + aditionalStep]], [0, 0], + lineStyle=lineStyleGridFine) + + # tick + if yTicks: + if posY != axisOrigin[1]: # don't draw if in the origin + inkDraw.line.relCoords(groupTicks, [[lenghtTicks, 0]], [axisOrigin[0] - lenghtTicks / 2.0, posY], + lineStyle=lineStyleTicks) + + # sets justification + # inkDraw.text.write(ExtensionBaseObj,'orig='+str(axisOrigin),[axisOrigin[0]+10,axisOrigin[1]-30],groupTicks,fontSize=7) + # inkDraw.text.write(ExtensionBaseObj,'xlim='+str(xLimitsPos),[axisOrigin[0]+10,axisOrigin[1]-20],groupTicks,fontSize=7) + # inkDraw.text.write(ExtensionBaseObj,'ylim='+str(yLimitsPos),[axisOrigin[0]+10,axisOrigin[1]-10],groupTicks,fontSize=7) + + if axisOrigin[0] == xLimitsPos[0]: + justif = 'cr' + offsetX = -text_offset / 2.0 + offsetY = 0 # inkDraw.circle.centerRadius(groupTicks,axisOrigin, 10, [0,0],'trash') + + if axisOrigin[0] != xLimitsPos[0] and axisOrigin[0] != xLimitsPos[1]: + justif = 'tr' + offsetX = -text_offset / 2.0 + offsetY = text_offset / 4.0 + # inkDraw.circle.centerRadius(groupTicks,axisOrigin, 10, [0,0]) + # inkDraw.text.write(ExtensionBaseObj,str(axisOrigin[0]),[axisOrigin[0]+10,axisOrigin[1]+10],groupTicks,fontSize=7) + # inkDraw.text.write(ExtensionBaseObj,str(yLimitsPos[0]*scaleX),[axisOrigin[0]+10,axisOrigin[1]+20],groupTicks,fontSize=7) + if posY == axisOrigin[1]: + if posY == yLimitsPos[1]: + justif = 'tr' + offsetY = text_offset / 4.0 + else: + justif = 'br' + offsetY = -text_offset / 4.0 + + if axisOrigin[0] == xLimitsPos[1]: + justif = 'cl' + offsetX = text_offset / 2.0 + offsetY = 0 + # inkDraw.circle.centerRadius(groupTicks,axisOrigin, 10, [0,0]) + if posY == axisOrigin[1]: + if posY == yLimitsPos[1]: + justif = 'tl' + offsetY = text_offset / 4.0 + else: + justif = 'bl' + offsetY = -text_offset / 4.0 + + # value + if yTicks: + inkDraw.text.latex(ExtensionBaseObj, groupTicks, yText, [axisOrigin[0] + offsetX, (posY + offsetY)], textSizeSmall, + refPoint=justif) + + ExtensionBaseObj.moveElement(GroupPlot, [position[0] - axisOrigin[0], position[1] - axisOrigin[1]]) + + # draw axis in the end so it stays on top of other objects + GroupAxis = ExtensionBaseObj.createGroup(GroupPlot, 'Axis') + + inkDraw.line.absCoords(GroupAxis, [[xLimitsPos[0], 0], [xLimitsPos[1] + ExtraSpaceArrowX, 0]], [0, axisOrigin[1]], 'Xaxis', + lineStyle=lineStyleAxis) + if xLabel: # axis labels + inkDraw.text.latex(ExtensionBaseObj, GroupAxis, xLabel, + [xLimitsPos[1] + ExtraSpaceArrowX - text_offset / 3, axisOrigin[1] + text_offset / 2.0], textSize, refPoint='tl') + + inkDraw.line.absCoords(GroupAxis, [[0, yLimitsPos[0]], [0, yLimitsPos[1] - ExtraSpaceArrowY]], [axisOrigin[0], 0], 'Yaxis', + lineStyle=lineStyleAxis) + if yLabel: # axis labels + inkDraw.text.latex(ExtensionBaseObj, GroupAxis, yLabel, [axisOrigin[0] + text_offset / 2.0, (yLimitsPos[1] - ExtraSpaceArrowY)], textSize, + refPoint='tl') + + return [GroupPlot, outputLimits, axisOrigin] + + @staticmethod + def polar(ExtensionBaseObj, parent, rLim, tLim=[0.0, 360.0], position=[0.0, 0.0], rLabel='', rlog10scale=False, rTicks=True, tTicks=True, + rTickStep=1.0, tTickStep=45.0, rScale=20, rAxisUnitFactor='', rGrid=False, tGrid=False, forceTextSize=0, forceLineWidth=0, + drawAxis=True, ExtraLengthAxisR=0.0): + """Creates the axes of a polar plot + + .. note:: This method uses LaTeX in labels and tick marks if LaTeX support is enabled. This is an optional feature, **enabled by default**. + Please refer to :ref:`disableLatexSupport` on how to disable it. + + :param ExtensionBaseObj: Most of the times you have to pass 'self' when calling from inside your plugin class. See example below + :param parent: Parent object + :param rLim: Limits of the R axis [r_min,r_max]. If the axis is in log10 scale, then the limits will be rounded to complete one decade. + :param tLim: Limits of the theta axis [t_min,t_max]. Values in degrees. Default: [0,360] + :param position: Position of the center [x0,y0]. + + :param rLabel: Label of the R axis. Default: '' + + The text can contain any LaTeX command. If you want to write mathematical text, you can enclose it between dollar signs $...$. If LaTeX support is disabled, do not use $. + + :param rlog10scale: Sets R axis to log10 scale if True. Default: False + + - If rlog10scale=True, then the lower limit of rLim must be >=1 + + :param rTicks: Adds axis ticks to the R axis if True. Default: True + :param tTicks: Adds axis ticks to the theta axis if True. Default: True + :param rTickStep: Value interval between two consecutive ticks on R axis. (Not used if R axis is in log10 scale). Default:1.0 + :param tTickStep: Value interval between two consecutive ticks on theta axis. Default:45.0 + :param rScale: Distance between each rTickStep in svg units. Default: 20 + + - If axis is linear, then rScale is the size in svg units of each tick + - If axis is log10, the rScale is the size in svg units of one decade + + :param rAxisUnitFactor: Extra text to be added to the ticks in R axis. Default: '' + + This is useful when we want to represent interval with different units. example pi, 2pi 3pi, etc. + The text can be any LaTeX text. Keep in mind that this text will be inserted within a mathematical environment $...$, therefore no $ is needed here. + + :param rGrid: Adds grid lines to R axis if true. Default: False + :param tGrid: Adds grid lines to theta axis if true. Default: False + :param forceTextSize: Size of the text. If this parameter is 0.0 then the method will compute an appropriate size. Default: 0.0 + :param forceLineWidth: Width of the lines. If this parameter is 0.0 then the method will compute an appropriate size. Default: 0.0 + + :param drawAxis: Control flag of the axis method + + - True: draws axis normally + - False: returns the limits and origin position without drawing the axis itself + + :param ExtraLengthAxisR: Extra length between the R axis and its label. Default 0.0 + + :type ExtensionBaseObj: inkscapeMadeEasy object + :type parent: inkscape element object + :type rLim: list + :type tLim: list + :type position: list + :type rLabel: string + :type rlog10scale: bool + :type rTicks: bool + :type tTicks: bool + :type rTickStep: float + :type tTickStep: float + :type rScale: float + :type rAxisUnitFactor: string + :type rGrid: bool + :type tGrid: bool + :type forceTextSize: float + :type forceLineWidth: float + :type drawAxis: bool + :type ExtraLengthAxisR: float + + :returns: [GroupPlot, outputRLimits, axisOrigin] + + - GroupPlot: the axis area object (if drawAxis=False, this output is ``None``) + - outputRLimits: a list with tuples:[(r_min,rPos_min),(r_max,rPos_max)] + + - r_min, r_max : The limits of the axis object + - rPos_min, rPos_max : The positions of the limits of the axis object, considering the scaling and units + - axisOrigin [X0,Y0] : A list with the coordinates of the point where the axes cross. + :rtype: list + + **Examples** + + >>> root_layer = self.document.getroot() # retrieves the root layer of the document + >>> + >>> inkPlot.axis.cartesian(self, parent=root_layer, rLim=[0, 3], tLim=[0, 150], position=[0.0, 0.0], rLabel='my radius', + >>> rlog10scale=False, rTicks=True, tTicks=True, rTickStep=1.0, tTickStep=30.0, rScale=50, + >>> rAxisUnitFactor='', rGrid=True, tGrid=True, forceTextSize=0, forceLineWidth=0, + >>> drawAxis=True, ExtraLengthAxisR=10.0) + + The images below show the cartesian plane of the example above, together with other variations. + + .. image:: ../imagesDocs/plot_axisPolarParameters_01.png + :width: 800px + """ + + if drawAxis: + GroupPlot = ExtensionBaseObj.createGroup(parent, 'Plot') + + # sets the scale scaleX and scaleY stores the size of one unit in both axis (linear axis) or the size of a decade in log plots + if rlog10scale: + scaleR = rScale + else: + scaleR = rScale / float(rTickStep) + + # font size and other text parameters + if forceTextSize == 0: + textSize = 0.2 * rScale + else: + textSize = forceTextSize + + textSizeSmall = 0.8 * textSize # font size for axis ticks + + text_offset = textSize # base space for text positioning + ExtraSpaceArrowR = (2.0 + ExtraLengthAxisR) * text_offset # extra space for drawing arrow on axis + lenghtTicks = textSize / 2.0 # length of the ticks + + # create styles + if forceLineWidth == 0: + lineWidth = rScale / 30.0 + else: + lineWidth = forceLineWidth + + lineWidthGrid = 0.7 * lineWidth + lineWidthGridFine = lineWidthGrid / 2.0 + + # nameTickerArrowAxis = inkDraw.marker.createArrow1Marker(ExtensionBaseObj, 'ArrowAxis', RenameMode=1, scale=0.4) + lineStyleAxis = inkDraw.lineStyle.set(lineWidth, lineColor=inkDraw.color.gray(0.3)) + lineStyleTicks = inkDraw.lineStyle.set(lineWidth, lineColor=inkDraw.color.gray(0.3)) + lineStyleGrid = inkDraw.lineStyle.set(lineWidthGrid, lineColor=inkDraw.color.gray(0.7)) + lineStyleGridFine = inkDraw.lineStyle.set(lineWidthGridFine, lineColor=inkDraw.color.gray(0.7)) + + textStyleLarge = inkDraw.textStyle.setSimpleBlack(textSize) + textStyleSmall = inkDraw.textStyle.setSimpleBlack(textSizeSmall, 'center') + + # check if limits are valid + if rLim[0] < 0.0 or rLim[0] >= rLim[1]: + sys.stderr.write('Error: rLim is invalid') + return 0 + if tLim[0] >= tLim[1]: + sys.stderr.write('Error: tLim is invalid') + return 0 + # check if the limits are valid for logarithmic scales. + if rlog10scale: + if rLim[0] < 1 or rLim[1] < 1: + sys.stderr.write('Error: rLim is invalid in logarithmic scale') + return 0 + else: + rmin = pow(10, math.floor(math.log10(rLim[0]))) + rmax = pow(10, math.ceil(math.log10(rLim[1]))) + rLimits = [rmin, rmax] + else: + rLimits = rLim + + tLimits = tLim + + if abs(tLimits[1] - tLimits[0]) > 360: + tLimits = [0, 360] + + if abs(tLimits[1] - tLimits[0]) > 180: + largeArc = True + else: + largeArc = False + + # finds the position of the Origin of axis + axisOrigin = [0.0, 0.0] + axisOrigin[0] = findOrigin(rLimits, rlog10scale, scaleR) + axisOrigin[1] = findOrigin(tLimits, False, 1.0) + + # computes the positions of the limits on svg, considering the scale + + if rlog10scale: # convert limits to position in diagram, including scaling factor + rLimitsPos = [math.log10(x) * scaleR for x in rLimits] + else: + rLimitsPos = [x * scaleR for x in rLimits] + + # build the list of tuples with the limits of the plotting area + outputLimits = list(zip([rLimits[0], rLimits[1]], [rLimitsPos[0] - axisOrigin[0] + position[0], rLimitsPos[1] - axisOrigin[0] + position[0]])) + + if not drawAxis: + return [None, outputLimits, [0, 0]] + + # axis ticks + groupTicks = ExtensionBaseObj.createGroup(GroupPlot, 'Ticks') + + if rTicks or rGrid: + + if rlog10scale: + listTicks = generateListOfTicksLog10(rLimits) + else: + listTicks = generateListOfTicksLinear(rLimits, axisOrigin[0] / scaleR, rTickStep) + for r in listTicks: + + if r <= rLimits[1] and r >= rLimits[0]: + + # get position, considering the scale and its text + [posR, rText] = getPositionAndText(r, scaleR, rlog10scale, rAxisUnitFactor) + + if rGrid and posR > 0.0 and r > rLimits[0] and r < rLimits[1]: # grid lines. + if tLimits[1] - tLimits[0] < 360: + inkDraw.arc.centerAngStartAngEnd(groupTicks, [0, 0], posR, -tLimits[1], -tLimits[0], [0, 0], lineStyle=lineStyleGrid, + largeArc=largeArc) # negative angles bc inkscape is upside down + else: + inkDraw.circle.centerRadius(groupTicks, [0, 0], posR, offset=[0, 0], lineStyle=lineStyleGrid) + + # intermediate grid lines in case of logarithmic scale + if rGrid and rlog10scale and r < rLimits[1]: + for i in range(2, 10): + aditionalStep = math.log10(i) * scaleR + if tLimits[1] - tLimits[0] < 360: + inkDraw.arc.centerAngStartAngEnd(groupTicks, [0, 0], posR + aditionalStep, -tLimits[1], -tLimits[0], [0, 0], + lineStyle=lineStyleGridFine, + largeArc=largeArc) # negative angles bc inkscape is upside down + else: + inkDraw.circle.centerRadius(groupTicks, [0, 0], posR + aditionalStep, offset=[0, 0], lineStyle=lineStyleGridFine) + + # tick + if rTicks and posR > 0.0: + inkDraw.arc.centerAngStartAngEnd(groupTicks, [0, 0], posR, -tLimits[0] - math.degrees(lenghtTicks / float(posR * 2)), + -tLimits[0] + math.degrees(lenghtTicks / float(posR * 2)), [0, 0], lineStyle=lineStyleTicks, + largeArc=False) + if rTicks and posR == 0.0: + inkDraw.line.relCoords(groupTicks, [[0, lenghtTicks]], [0, - lenghtTicks / 2.0], lineStyle=lineStyleTicks) + + # sets justification + # inkDraw.text.write(ExtensionBaseObj,'orig='+str(axisOrigin),[axisOrigin[0]+10,axisOrigin[1]-30],groupTicks,fontSize=7) + # inkDraw.text.write(ExtensionBaseObj,'xlim='+str(xLimitsPos),[axisOrigin[0]+10,axisOrigin[1]-20],groupTicks,fontSize=7) + # inkDraw.text.write(ExtensionBaseObj,'ylim='+str(yLimitsPos),[axisOrigin[0]+10,axisOrigin[1]-10],groupTicks,fontSize=7) + + if posR == 0: + justif = 'cc' + offsetX = 0 + offsetY = text_offset * 1.2 + posX = posR * math.cos(math.radians(-tLimits[0])) + offsetX + posY = posR * math.sin(math.radians(-tLimits[0])) + offsetY + else: + offsetT = text_offset * 1.2 + if tLimits[1] - tLimits[0] > 340: + offsetR = text_offset / 2.0 + else: + offsetR = 0 + justif = 'cc' + posX = (posR + offsetR) * math.cos(math.radians(-tLimits[0])) + offsetT * math.sin(math.radians(tLimits[0])) + posY = (posR + offsetR) * math.sin(math.radians(-tLimits[0])) + offsetT * math.cos(math.radians(-tLimits[0])) + # value + # inkDraw.circle.centerRadius(groupTicks,[posX,posY], 1) + if rTicks: + inkDraw.text.latex(ExtensionBaseObj, groupTicks, rText, [posX, posY], textSizeSmall, refPoint=justif) + + if tTicks or tGrid: + + listTicks = generateListOfTicksLinear(tLimits, axisOrigin[1], tTickStep) + for t in listTicks: + if t <= tLimits[1] and t >= tLimits[0]: + c = math.cos(math.radians(-t)) # negative angles bc inkscape is upside down + s = math.sin(math.radians(-t)) # negative angles bc inkscape is upside down + # get position, considering the scale and its text + if inkDraw.useLatex: + tText = '$' + str(t) + '$' + else: + tText = str(t) + + if (tGrid and t > tLimits[0] and t < tLimits[1]) or (tGrid and t == tLimits[0] and tLimits[1] - tLimits[0] >= 360): + if rLimitsPos[0] == 0: # if rmin is zero, then make the lines to reach the center + if not rlog10scale: + P1 = [(rLimitsPos[0] + scaleR * rTickStep / 2) * c, (rLimitsPos[0] + scaleR * rTickStep / 2) * s] + else: + P1 = [(rLimitsPos[0] + 0.3 * scaleR) * c, (rLimitsPos[0] + 0.3 * scaleR) * s] + else: + P1 = [rLimitsPos[0] * c, rLimitsPos[0] * s] + P2 = [rLimitsPos[1] * c, rLimitsPos[1] * s] + inkDraw.line.absCoords(groupTicks, [P1, P2], [0, 0], lineStyle=lineStyleGrid) + + # tick + if (tTicks and t != tLimits[1]) or (tTicks and t == tLimits[1] and tLimits[1] - tLimits[0] < 360): + P1 = [(rLimitsPos[1] - lenghtTicks / 2.0) * c, (rLimitsPos[1] - lenghtTicks / 2.0) * s] + inkDraw.line.relCoords(groupTicks, [[lenghtTicks * c, lenghtTicks * s]], P1, lineStyle=lineStyleTicks) + + if c > 1.0e-4: + justif = 'cl' + else: + if c < -1.0e-4: + justif = 'cr' + else: + justif = 'cc' + + offsetR = text_offset + posX = (rLimitsPos[1] + offsetR) * c + posY = (rLimitsPos[1] + offsetR) * s + # value + if (tTicks and t != tLimits[1]) or (tTicks and t == tLimits[1] and tLimits[1] - tLimits[0] < 360): + inkDraw.text.latex(ExtensionBaseObj, groupTicks, tText, [posX, posY], textSizeSmall, refPoint=justif) + + ExtensionBaseObj.moveElement(GroupPlot, position) + + # draw axis in the end so it stays on top of other objects + GroupAxis = ExtensionBaseObj.createGroup(GroupPlot, 'Axis') + + c0 = math.cos(math.radians(-tLimits[0])) # negative angles bc inkscape is upside down + s0 = math.sin(math.radians(-tLimits[0])) # negative angles bc inkscape is upside down + c1 = math.cos(math.radians(-tLimits[1])) # negative angles bc inkscape is upside down + s1 = math.sin(math.radians(-tLimits[1])) # negative angles bc inkscape is upside down + P1 = [rLimitsPos[0] * c0, rLimitsPos[0] * s0] + P2 = [rLimitsPos[1] * c0, rLimitsPos[1] * s0] + P3 = [rLimitsPos[1] * c1, rLimitsPos[1] * s1] + P4 = [rLimitsPos[0] * c1, rLimitsPos[0] * s1] + if tLimits[1] - tLimits[0] < 360: + inkDraw.line.absCoords(GroupAxis, [P1, P2], [0, 0], lineStyle=lineStyleAxis) + inkDraw.line.absCoords(GroupAxis, [P3, P4], [0, 0], lineStyle=lineStyleAxis) + else: + if rTicks: + inkDraw.line.absCoords(GroupAxis, [P1, P2], [0, 0], lineStyle=lineStyleAxis) + + if tLimits[1] - tLimits[0] < 360: + if rLimitsPos[0] > 0: + inkDraw.arc.startEndRadius(GroupAxis, P1, P4, rLimitsPos[0], offset=[0, 0], lineStyle=lineStyleAxis, flagRightOf=True, arcType='open', + largeArc=largeArc) + inkDraw.arc.startEndRadius(GroupAxis, P2, P3, rLimitsPos[1], offset=[0, 0], lineStyle=lineStyleAxis, flagRightOf=True, arcType='open', + largeArc=largeArc) + else: + if rLimitsPos[0] > 0: + inkDraw.circle.centerRadius(GroupAxis, [0, 0], rLimitsPos[0], offset=[0, 0], lineStyle=lineStyleAxis) + inkDraw.circle.centerRadius(GroupAxis, [0, 0], rLimitsPos[1], offset=[0, 0], lineStyle=lineStyleAxis) + + if rLabel: # axis labels + c0 = math.cos(math.radians(-tLimits[0]) + text_offset / rLimitsPos[1]) # negative angles bc inkscape is upside down + s0 = math.sin(math.radians(-tLimits[0]) + text_offset / rLimitsPos[1]) # negative angles bc inkscape is upside down + posText = [(rLimitsPos[1] + ExtraSpaceArrowR) * c0, (rLimitsPos[1] + ExtraSpaceArrowR) * s0] + inkDraw.text.latex(ExtensionBaseObj, GroupAxis, rLabel, posText, textSize, refPoint='cl') + + return [GroupPlot, outputLimits, [0, 0]] + + +class plot(): + """ This class has member functions to create plots. + + .. note:: This class contains only static methods so that your plugin class don't have to inherit it. + + .. note:: This class uses LaTeX in labels and tick marks if LaTeX support is enabled. This is an optional feature, **enabled by default**. + Please refer to :ref:`disableLatexSupport` on how to disable it. If disabled, this function will still work, internally calling the :meth:`inkscapeMadeEasy_Draw.text.write` to generate text. + """ + + @staticmethod + def cartesian(ExtensionBaseObj, parent, xData, yData, position=[0, 0], xLabel='', yLabel='', xlog10scale=False, ylog10scale=False, xTicks=True, + yTicks=True, xTickStep=1.0, yTickStep=1.0, xScale=20, yScale=20, xExtraText='', yExtraText='', xGrid=False, yGrid=False, + generalAspectFactorAxis=1.0, lineStylePlot=inkDraw.lineStyle.setSimpleBlack(), forceXlim=None, forceYlim=None, drawAxis=True, + ExtraLengthAxisX=0.0, ExtraLengthAxisY=0.0): + """Create a cartesian Plot + + .. note:: This method uses LaTeX in labels and tick marks if LaTeX support is enabled. This is an optional feature, **enabled by default**. Please refer to :ref:`disableLatexSupport` on how to disable it. + + :param ExtensionBaseObj: Most of the times you have to pass 'self' when calling from inside your plugin class. See example below + :param parent: Parent object + :param xData: List of x data + :param yData: List of y data + :param position: Position of the plot. It is defined at the point where x and y axis cross [x0,y0]. The point where the axis cross depend on the limits. + + - If xLimits comprises the origin x=0, then the Y axis crosses the X axis at x=0. + - If xLimits contains only negative numbers, then the Y axis crosses the X axis at x_max. + - If xLimits contains only positive numbers, then the Y axis crosses the X axis at x_min. + + - The same rule applies to y direction. + :param xLabel: Label of the X axis. Default: '' + + The text can contain any LaTeX command. If you want to write mathematical text, you can enclose it between dollar signs $...$. If LaTeX support is disabled, do not use $. + + :param yLabel: Label of the Y axis. Default: '' + + The text can contain any LaTeX command. If you want to write mathematical text, you can enclose it between dollar signs $...$. If LaTeX support is disabled, do not use $. + + :param xlog10scale: Sets X axis to log10 scale if True. Default: False + :param ylog10scale: Sets Y axis to log10 scale if True. Default: False + :param xTicks: Adds axis ticks to the X axis if True. Default: True + :param yTicks: Adds axis ticks to the Y axis if True. Default: True + :param xTickStep: Value interval between two consecutive ticks on X axis. (Not used if X axis is in log10 scale). Default:1.0 + :param yTickStep: Value interval between two consecutive ticks on Y axis. (Not used if Y axis is in log10 scale). Default:1.0 + :param xScale: Distance between each xTickStep in svg units. Default: 20 + + - If axis is linear, then xScale is the size in svg units of each tick + - If axis is log10, the xScale is the size in svg units of one decade + + :param yScale: Distance between each yTickStep in svg units. Default: 20 + + - If axis is linear, then yScale is the size in svg units of each tick + - If axis is log10, the yScale is the size in svg units of one decade + + :param xExtraText: Extra text to be added to the ticks in X axis. Default: '' + + This is useful when we want to represent interval with different units. example pi, 2pi 3pi, etc. + The text can be any LaTeX text. Keep in mind that this text will be inserted within a mathematical environment $...$, therefore no $ is needed here. + :param yExtraText: Extra text to be added to the ticks in Y axis. Default: '' + + This is useful when we want to represent interval with different units. example pi, 2pi 3pi, etc. + The text can be any LaTeX text. Keep in mind that this text will be inserted within a mathematical environment $...$, therefore no $ is needed here. + + :param xGrid: Adds grid lines to X axis if True. Default: False + :param yGrid: Adds grid lines to Y axis if True. Default: False + :param generalAspectFactorAxis: Regulates the general aspect ratio between grid lines, text and Ticks separations. Default: 1.0 + + :param lineStylePlot: Line style to be used to plot the data. See class ``inkscapeMadeEasy_Draw.lineStyle``. Default: lineStylePlot=inkDraw.lineStyle.setSimpleBlack() + :param forceXlim: Forces limits of X axis to these limits. These limits affect the axis only, that is, all xData is plotted despite of these limits. + + - if forceXlim=None Limits will be defined by the limits of xData (Default) + - if forceXlim=[xMin,xMax] then these limits will be used. + + .. note:: for logarithmic scale, the limits are always adjusted to complete the decade. Usually you don't need this for logarithmic scale + + :param forceYlim: Forces limits of Y axis to these limits. These limits affect the axis only, that is, all yData is plotted despite of these limits. + + - if forceYlim=None Limits will be defined by the limits of yData (Default) + - if forceYlim=[yMin,yMax] then these limits will be used. + + .. note:: for logarithmic scale, the limits are always adjusted to complete the decade. Usually you don't need this for logarithmic scale + + :param drawAxis: Control flag of the axis method + + - True: draws axis normally + - False: returns the limits and origin position without drawing the axis itself + + :param ExtraLengthAxisX: Extra length near the arrow pointer of X axis. Default 0.0 + :param ExtraLengthAxisY: Extra length near the arrow pointer of Y axis. Default 0.0 + + :type ExtensionBaseObj: inkscapeMadeEasy object + :type parent: inkscape element object + :type xData: list + :type yData: list + :type position: list + :type xLabel: string + :type yLabel: string + :type xlog10scale: bool + :type ylog10scale: bool + :type xTicks: bool + :type yTicks: bool + :type xTickStep: float + :type yTickStep: float + :type xScale: float + :type yScale: float + :type xExtraText: string + :type yExtraText: string + :type xGrid: bool + :type yGrid: bool + :type generalAspectFactorAxis: float + :type lineStylePlot: lineStyle object + :type forceXlim: list + :type forceYlim: list + :type drawAxis: bool + :type ExtraLengthAxisX: float + :type ExtraLengthAxisY: float + + :returns: [GroupPlot, outputLimits, axisOrigin] + + - GroupPlot: the plot object + - outputLimits: a list with tuples:[(x_min,xPos_min),(x_max,xPos_max),(y_min,yPos_min),(y_max,yPos_max)] + + - x_min, x_max, y_min, y_max: The limits of the axis object + - xPos_min, xPos_max, yPos_min, yPos_max: The positions of the limits of the axis object, considering the scaling and units + - axisOrigin [X0,Y0]: A list with the coordinates of the point where the axes cross. + :rtype: list + + .. important:: If any of the axis are log10, then the method ignores any pairs of (x,y) data with invalid coordinates, that is, if xData and/or yData is less than or equal to 0.0 (they would result in complex log10... =P ). The method will create a text object alongside your plot warning this. + + .. note:: If any of the axis are linear, the method will ignore any value greater than 10.000 (in absolute value). This avoids plotting very large numbers. The method will create a text object alongside your plot warning this. + + **Example** + + >>> root_layer = self.document.getroot() # retrieves the root layer of the document + >>> xData=[-1,-0.5,0,0.5,1.0,1.5,2] + >>> yData=[x*x for x in xData] # computes y=x*x + >>> #create a lineStyle for the plot + >>> myMarkerDot=inkDraw.marker.createDotMarker(self,'DotM',RenameMode=2,scale=0.3, + >>> strokeColor=inkDraw.color.defined('black'),fillColor=inkDraw.color.defined('black')) + >>> lineStyleDiscrete = inkDraw.lineStyle.set(lineWidth=1.0, markerStart=myMarkerDot,markerMid=myMarkerDot,markerEnd=myMarkerDot) + >>> + >>> inkPlot.plot.cartesian(self,root_layer,xData,yData,position=[0,0], + >>> xLabel='my $x$ data',yLabel='$y(x)$',xlog10scale=False,ylog10scale=False, + >>> xTicks=True,yTicks=True,xTickStep=0.5,yTickStep=2.0, + >>> xScale=20,yScale=10,xExtraText='a',yExtraText='', + >>> xGrid=True,yGrid=True,generalAspectFactorAxis=1.0,lineStylePlot=lineStyleDiscrete, + >>> forceXlim=None,forceYlim=None,drawAxis=True) + + The image below present the plot above with a few argument variations. + + .. image:: ../imagesDocs/plot_plotCartesianParameters_01.png + :width: 800px + + """ + + textSize = generalAspectFactorAxis * 0.25 * min(xScale, yScale) + lineWidthAxis = generalAspectFactorAxis * min(xScale, yScale) / 35.0 + + yDataTemp = [] + xDataTemp = [] + flagShowedError = False + if xlog10scale: # remove invalid pairs of coordinates for log plot (less than or equal to 0.0) + for i in range(len(xData)): + if xData[i] > 0.0: + yDataTemp.append(yData[i]) + xDataTemp.append(xData[i]) + else: + if not flagShowedError: + inkDraw.text.write(ExtensionBaseObj, + 'Error: The point (%f,%f)\n is invalid in logarithmic scale. Ignoring it...' % (xData[i], yData[i]), + [position[0], position[1] + 2 * textSize], parent, fontSize=textSize / 2.0) + inkDraw.text.write(ExtensionBaseObj, ' Please check your graph', [position[0], position[1] + 2.5 * textSize], parent, + fontSize=textSize / 2.0) + flagShowedError = True + else: # remove invalid pairs of coordinates for linear plot (larger than +-10k ) + for i in range(len(xData)): + if abs(xData[i]) <= 1.0e4: + yDataTemp.append(yData[i]) + xDataTemp.append(xData[i]) + else: + if not flagShowedError: + inkDraw.text.write(ExtensionBaseObj, 'Error: The point (%f,%f)\n is too large. Ignoring it...' % (xData[i], yData[i]), + [position[0], position[1] + 2 * textSize], parent, fontSize=textSize / 2.0) + inkDraw.text.write(ExtensionBaseObj, ' Please check your graph', [position[0], position[1] + 2.5 * textSize], parent, + fontSize=textSize / 2.0) + flagShowedError = True + + yData = yDataTemp + xData = xDataTemp + + yDataTemp = [] + xDataTemp = [] + flagShowedError = False + if ylog10scale: # remove invalid pairs of coordinates for log plot (less than or equal to 0.0) + for i in range(len(yData)): + if yData[i] > 0.0: + yDataTemp.append(yData[i]) + xDataTemp.append(xData[i]) + else: + if not flagShowedError: + inkDraw.text.write(ExtensionBaseObj, + 'Error: The point (%f,%f)\n is invalid in logarithmic scale. Ignoring it...' % (xData[i], yData[i]), + [position[0], position[1] + 2 * textSize], parent, fontSize=textSize / 2.0) + inkDraw.text.write(ExtensionBaseObj, ' Please check your graph', [position[0], position[1] + 2.5 * textSize], parent, + fontSize=textSize / 2.0) + flagShowedError = True + else: # remove invalid pairs of coordinates for linear plot (larger than +-10k ) + for i in range(len(yData)): + if abs(yData[i]) <= 1.0e4: + yDataTemp.append(yData[i]) + xDataTemp.append(xData[i]) + else: + if not flagShowedError: + inkDraw.text.write(ExtensionBaseObj, 'Error: The point (%f,%f)\n is too large. Ignoring it...' % (xData[i], yData[i]), + [position[0], position[1] + 2 * textSize], parent, fontSize=textSize / 2.0) + inkDraw.text.write(ExtensionBaseObj, ' Please check your graph', [position[0], position[1] + 2.5 * textSize], parent, + fontSize=textSize / 2.0) + flagShowedError = True + + yData = yDataTemp + xData = xDataTemp + + if forceXlim is not None: + Xlimits = forceXlim + else: + Xlimits = [min(xData), max(xData)] + if forceYlim is not None: + Ylimits = forceYlim + else: + Ylimits = [min(yData), max(yData)] # min<->max inverted bc inkscape is upside down + + if Ylimits[0] == Ylimits[1]: + if Ylimits[0] > 0: + Ylimits[0] = 0 + if Ylimits[0] == 0: + Ylimits[1] = 1 + if Ylimits[0] < 0: + Ylimits[1] = 0 + + if Xlimits[0] == Xlimits[1]: + if Xlimits[0] > 0: + Xlimits[0] = 0 + if Xlimits[0] == 0: + Xlimits[1] = 1 + if Xlimits[0] < 0: + Xlimits[1] = 0 + + # draw axis + axisGroup = ExtensionBaseObj.createGroup(parent, 'PlotData') + + [axisObj, limits, origin] = axis.cartesian(ExtensionBaseObj, axisGroup, Xlimits, Ylimits, position, xLabel=xLabel, yLabel=yLabel, + xlog10scale=xlog10scale, ylog10scale=ylog10scale, xTicks=xTicks, yTicks=yTicks, + xTickStep=xTickStep, yTickStep=yTickStep, xScale=xScale, yScale=yScale, xAxisUnitFactor=xExtraText, + yAxisUnitFactor=yExtraText, xGrid=xGrid, yGrid=yGrid, forceTextSize=textSize, + forceLineWidth=lineWidthAxis, drawAxis=drawAxis, ExtraLengthAxisX=ExtraLengthAxisX, + ExtraLengthAxisY=ExtraLengthAxisY) + + # scales data and convert to logarithmic scale if needed. Also subtracts the origin point of the axis to move the plot to the correct position + if xlog10scale: + xData = [math.log10(x) * xScale - origin[0] for x in xData] + else: + xData = [x * (xScale / xTickStep) - origin[0] for x in xData] + + if ylog10scale: + yData = [-math.log10(y) * yScale - origin[1] for y in yData] + else: + yData = [-y * (yScale / yTickStep) - origin[1] for y in yData] # negative bc inkscape is upside down + + coords = zip(xData, yData) + + inkDraw.line.absCoords(axisGroup, coords, position, lineStyle=lineStylePlot) + + return [axisGroup, limits, origin] + + @staticmethod + def polar(ExtensionBaseObj, parent, rData, tData, position=[0, 0], rLabel='', rlog10scale=False, rTicks=True, tTicks=True, rTickStep=1.0, + tTickStep=45.0, rScale=20, rExtraText='', rGrid=False, tGrid=False, generalAspectFactorAxis=1.0, + lineStylePlot=inkDraw.lineStyle.setSimpleBlack(), forceRlim=None, forceTlim=None, drawAxis=True, ExtraLengthAxisR=0.0): + """Create a polar Plot + + .. note:: This method uses LaTeX in labels and tick marks if LaTeX support is enabled. This is an optional feature, **enabled by default**. Please refer to :ref:`disableLatexSupport` on how to disable it. + + :param ExtensionBaseObj: Most of the times you have to pass 'self' when calling from inside your plugin class. See example below + :param parent: Parent object + :param rData: List of R data + :param tData: List of Theta data + :param position: Position of the plot [x0,y0]. It is defined at the center point + + :param rLabel: Label of the R axis. Default: '' + + The text can contain any LaTeX command. If you want to write mathematical text, you can enclose it between dollar signs $...$. If LaTeX support is disabled, do not use $. + + :param rlog10scale: Sets R axis to log10 scale if True. Default: False + :param rTicks: Adds axis ticks to the R axis if True. Default: True + :param tTicks: Adds axis ticks to the Theta axis if True. Default: True + :param rTickStep: Value interval between two consecutive ticks on R axis. (Not used if R axis is in log10 scale). Default:1.0 + :param tTickStep: Value interval between two consecutive ticks on Theta axis. + :param rScale: Distance between each rTickStep in svg units. Default: 20 + + - If axis is linear, then rScale is the size in svg units of each tick + - If axis is log10, the rScale is the size in svg units of one decade + + :param rExtraText: Extra text to be added to the ticks in R axis. Default: '' + + This is useful when we want to represent interval with different units. example pi, 2pi 3pi, etc. + The text can be any LaTeX text. Keep in mind that this text will be inserted within a mathematical environment $...$, therefore no $ is needed here. + + :param rGrid: Adds grid lines to R axis if True. Default: False + :param tGrid: Adds grid lines to Theta axis if True. Default: False + :param generalAspectFactorAxis: Regulates the general aspect ratio between grid lines, text and Ticks separations. Default: 1.0 + + :param lineStylePlot: Line style to be used to plot the data. See class ``inkscapeMadeEasy_Draw.lineStyle``. Default: lineStylePlot=inkDraw.lineStyle.setSimpleBlack() + :param forceRlim: Forces limits of R axis to these limits. These limits affect the axis only, that is, all rData is plotted despite of these limits. + + - if forceRlim=None Limits will be defined by the limits of rData (Default) + - if forceRlim=[rMin,rMax] then these limits will be used. + + .. note:: for logarithmic scale, the limits are always adjusted to complete the decade. Usually you don't need this for logarithmic scale + + :param forceTlim: Forces limits of Theta axis to these limits. These limits affect the axis only, that is, all tData is plotted despite of these limits. + + - if forceTlim=None Limits will be defined by min and max of tData (Default) + - if forceTlim=[tMin,tMax] then these limits will be used. + + :param drawAxis: Control flag of the axis method + + - True: draws axis normally + - False: returns the limits and origin position without drawing the axis itself + + :param ExtraLengthAxisR: Extra length near the arrow pointer of R axis. Default 0.0 + + :type ExtensionBaseObj: inkscapeMadeEasy object + :type parent: inkscape element object + :type rData: list + :type tData: list + :type position: list + :type rLabel: string + :type rlog10scale: bool + :type rTicks: bool + :type tTicks: bool + :type rTickStep: float + :type tTickStep: float + :type rScale: float + :type rExtraText: string + :type rGrid: bool + :type tGrid: bool + :type generalAspectFactorAxis: float + :type lineStylePlot: lineStyle object + :type forceRlim: list + :type forceTlim: list + :type drawAxis: bool + :type ExtraLengthAxisR: float + + :returns: [GroupPlot, outputLimits, axisOrigin] + + - GroupPlot: the plot object + - outputLimits: a list with tuples:[(x_min,xPos_min),(x_max,xPos_max),(y_min,yPos_min),(y_max,yPos_max)] + + - x_min, x_max, y_min, y_max: The limits of the axis object + - xPos_min, xPos_max, yPos_min, yPos_max: The positions of the limits of the axis object, considering the scaling and units + - axisOrigin [X0,Y0]: A list with the coordinates of the point where the axes cross. + :rtype: list + + .. important:: If any of the axis are log10, then the method ignores any pairs of (x,y) data with invalid coordinates, that is, if rData and/or tData is less than or equal to 0.0 (they would result in complex log10... =P ). The method will create a text object alongside your plot warning this. + + .. note:: If any of the axis are linear, the method will ignore any value greater than 10.000 (in absolute value). This avoids plotting very large numbers. The method will create a text object alongside your plot warning this. + + **Example** + + >>> root_layer = self.document.getroot() # retrieves the root layer of the document + >>> rData=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10,11,12] + >>> tData=[30*x for x in range(12)] + >>> + >>> myMarkerDot=inkDraw.marker.createDotMarker(self,'DotM',RenameMode=2,scale=0.3, + >>> strokeColor=inkDraw.color.defined('black'),fillColor=inkDraw.color.defined('black')) + >>> lineStyleDiscrete = inkDraw.lineStyle.set(lineWidth=1.0,linecolor=inkDraw.color.defined('red'), + >>> markerStart=myMarkerDot,markerMid=myMarkerDot,markerEnd=myMarkerDot) + >>> + >>> inkPlot.plot.polar(self,root_layer,rData,tData,position=[0,0], + >>> rLabel='my $R$ data',rlog10scale=False, + >>> rTicks=True,tTicks=True,rTickStep=2,tTickStep=30, + >>> rScale=20,rExtraText='a', + >>> rGrid=True,tGrid=True,generalAspectFactorAxis=1.0,lineStylePlot=lineStyleDiscrete, + >>> forceRlim=None,forceTlim=None,drawAxis=True) + >>> + >>> # another spiral, comprising two turns + >>> tData=[2*x for x in range(360)] + >>> rData=[x/180.0 for x in tData] + >>> + >>> inkPlot.plot.polar(self,root_layer,rData,tData,position=[0,0], + >>> rLabel='my $R$ data',rlog10scale=False, + >>> rTicks=True,tTicks=True,rTickStep=2,tTickStep=30, + >>> rScale=20,rExtraText='', + >>> rGrid=True,tGrid=True,generalAspectFactorAxis=1.0, + >>> forceRlim=None,forceTlim=None,drawAxis=True) + + The image below present the plot above with a few argument variations. + + .. image:: ../imagesDocs/plot_plotPolarParameters_01.png + :width: 900px + + """ + + textSize = generalAspectFactorAxis * 0.25 * rScale + lineWidthAxis = generalAspectFactorAxis * rScale / 35.0 + + tDataTemp = [] + rDataTemp = [] + flagShowedError = False + if rlog10scale: # remove invalid pairs of coordinates for log plot (less than or equal to 0.0) + for i in range(len(rData)): + if rData[i] >= 1.0: + tDataTemp.append(tData[i]) + rDataTemp.append(rData[i]) + else: + if not flagShowedError: + inkDraw.text.write(ExtensionBaseObj, + 'Error: The point (%f,%f)\n is invalid in logarithmic scale. Ignoring it...' % (rData[i], tData[i]), + [position[0], position[1] + 2 * textSize], parent, fontSize=textSize / 2.0) + inkDraw.text.write(ExtensionBaseObj, ' Please check your graph', [position[0], position[1] + 2.5 * textSize], parent, + fontSize=textSize / 2.0) + flagShowedError = True + else: # remove invalid pairs of coordinates for linear plot (larger than +-10k ) + for i in range(len(rData)): + if abs(rData[i]) <= 1.0e4: + tDataTemp.append(tData[i]) + rDataTemp.append(rData[i]) + else: + if not flagShowedError: + inkDraw.text.write(ExtensionBaseObj, 'Error: The point (%f,%f)\n is too large. Ignoring it...' % (rData[i], tData[i]), + [position[0], position[1] + 2 * textSize], parent, fontSize=textSize / 2.0) + inkDraw.text.write(ExtensionBaseObj, ' Please check your graph', [position[0], position[1] + 2.5 * textSize], parent, + fontSize=textSize / 2.0) + flagShowedError = True + + tData = tDataTemp + rData = rDataTemp + + if forceRlim is not None: + Rlimits = forceRlim + else: + Rlimits = [min(rData), max(rData)] + if forceTlim is not None: + Tlimits = forceTlim + else: + Tlimits = [min(tData), max(tData)] # min<->max inverted bc inkscape is upside down + + if Tlimits[0] == Tlimits[1]: + if Tlimits[0] > 0: + Tlimits[0] = 0 + if Tlimits[0] == 0: + Tlimits[1] = 360 + if Tlimits[0] < 0: + Tlimits[1] = 0 + + if Rlimits[0] == Rlimits[1]: + if Rlimits[0] > 0: + Rlimits[0] = 0 + if Rlimits[0] == 0: + Rlimits[1] = 1 + if Rlimits[0] < 0: + Rlimits[1] = 0 + + # draw axis + axisGroup = ExtensionBaseObj.createGroup(parent, 'PlotData') + + [axisObj, limits, origin] = axis.polar(ExtensionBaseObj, axisGroup, Rlimits, Tlimits, position, rLabel=rLabel, rlog10scale=rlog10scale, + rTicks=rTicks, tTicks=tTicks, rTickStep=rTickStep, tTickStep=tTickStep, rScale=rScale, + rAxisUnitFactor=rExtraText, rGrid=rGrid, tGrid=tGrid, forceTextSize=textSize, + forceLineWidth=lineWidthAxis, drawAxis=drawAxis, ExtraLengthAxisR=ExtraLengthAxisR) + + # scales data and convert to logarithmic scale if needed. Also subtracts the origin point of the axis to move the plot to the correct position + nPoints = min(len(rData), len(tData)) + xData = [] + yData = [] + if rlog10scale: + for i in range(nPoints): + xData.append(math.log10(rData[i]) * math.cos(math.radians(-tData[i])) * rScale) # negative theta bc inkscape is upside down + yData.append(math.log10(rData[i]) * math.sin(math.radians(-tData[i])) * rScale) # negative theta bc inkscape is upside down + else: + for i in range(nPoints): + xData.append(rData[i] * math.cos(math.radians(-tData[i])) * (rScale / rTickStep)) # negative theta bc inkscape is upside down + yData.append(rData[i] * math.sin(math.radians(-tData[i])) * (rScale / rTickStep)) # negative theta bc inkscape is upside down + + coords = zip(xData, yData) + + inkDraw.line.absCoords(axisGroup, coords, position, lineStyle=lineStylePlot) + + return [axisGroup, limits, origin] + + @staticmethod + def stem(ExtensionBaseObj, parent, xData, yData, position=[0, 0], xLabel='', yLabel='', ylog10scale=False, xTicks=True, yTicks=True, + xTickStep=1.0, yTickStep=1.0, xScale=20, yScale=20, xExtraText='', yExtraText='', xGrid=False, yGrid=False, generalAspectFactorAxis=1.0, + lineStylePlot=inkDraw.lineStyle.setSimpleBlack(), forceXlim=None, forceYlim=None, drawAxis=True, ExtraLengthAxisX=0.0, + ExtraLengthAxisY=0.0): + """Create a cartesian stem plot + + .. note:: This method uses LaTeX in labels and tick marks if LaTeX support is enabled. This is an optional feature, **enabled by default**. Please refer to :ref:`disableLatexSupport` on how to disable it. + + :param ExtensionBaseObj: Most of the times you have to pass 'self' when calling from inside your plugin class. See example below + :param parent: Parent object + :param xData: List of x data + :param yData: List of y data + :param position: Position of the plot. It is defined at the point where x and y axis cross [x0,y0]. The point where the axis cross depend on the limits. + + - If xLimits comprises the origin x=0, then the Y axis crosses the X axis at x=0. + - If xLimits contains only negative numbers, then the Y axis crosses the X axis at x_max. + - If xLimits contains only positive numbers, then the Y axis crosses the X axis at x_min. + + - The same rule applies to y direction. + :param xLabel: Label of the X axis. Default: '' + + The text can contain any LaTeX command. If you want to write mathematical text, you can enclose it between dollar signs $...$. If LaTeX support is disabled, do not use $. + + :param yLabel: Label of the Y axis. Default: '' + + The text can contain any LaTeX command. If you want to write mathematical text, you can enclose it between dollar signs $...$. If LaTeX support is disabled, do not use $. + + :param ylog10scale: Sets Y axis to log10 scale if True. Default: False + :param xTicks: Adds axis ticks to the X axis if True. Default: True + :param yTicks: Adds axis ticks to the Y axis if True. Default: True + :param xTickStep: Value interval between two consecutive ticks on X axis. (Not used if X axis is in log10 scale). Default:1.0 + :param yTickStep: Value interval between two consecutive ticks on Y axis. (Not used if Y axis is in log10 scale). Default:1.0 + :param xScale: Distance between each xTickStep in svg units. Default: 20 + + - If axis is linear, then xScale is the size in svg units of each tick + - If axis is log10, the xScale is the size in svg units of one decade + + :param yScale: Distance between each yTickStep in svg units. Default: 20 + + - If axis is linear, then yScale is the size in svg units of each tick + - If axis is log10, the yScale is the size in svg units of one decade + + :param xExtraText: Extra text to be added to the ticks in X axis. Default: '' + + This is useful when we want to represent interval with different units. example pi, 2pi 3pi, etc. + The text can be any LaTeX text. Keep in mind that this text will be inserted within a mathematical environment $...$, therefore no $ is needed here. + :param yExtraText: Extra text to be added to the ticks in Y axis. Default: '' + + This is useful when we want to represent interval with different units. example pi, 2pi 3pi, etc. + The text can be any LaTeX text. Keep in mind that this text will be inserted within a mathematical environment $...$, therefore no $ is needed here. + + :param xGrid: Adds grid lines to X axis if True. Default: False + :param yGrid: Adds grid lines to Y axis if True. Default: False + :param generalAspectFactorAxis: Regulates the general aspect ratio between grid lines, text and Ticks separations. Default: 1.0 + + :param lineStylePlot: Line style to be used to plot the data. See class ``inkscapeMadeEasy_Draw.lineStyle``. Default: lineStylePlot=inkDraw.lineStyle.setSimpleBlack() + :param forceXlim: Forces limits of X axis to these limits. These limits affect the axis only, that is, all xData is plotted despite of these limits. + + - if forceXlim=None Limits will be defined by the limits of xData (Default) + - if forceXlim=[xMin,xMax] then these limits will be used. + + .. note:: for logarithmic scale, the limits are always adjusted to complete the decade. Usually you don't need this for logarithmic scale + + :param forceYlim: Forces limits of Y axis to these limits. These limits affect the axis only, that is, all yData is plotted despite of these limits. + + - if forceYlim=None Limits will be defined by the limits of yData (Default) + - if forceYlim=[yMin,yMax] then these limits will be used. + + .. note:: for logarithmic scale, the limits are always adjusted to complete the decade. Usually you don't need this for logarithmic scale + + :param drawAxis: Control flag of the axis method + + - True: draws axis normally + - False: returns the limits and origin position without drawing the axis itself + + :param ExtraLengthAxisX: Extra length near the arrow pointer of X axis. Default 0.0 + :param ExtraLengthAxisY: Extra length near the arrow pointer of Y axis. Default 0.0 + + :type ExtensionBaseObj: inkscapeMadeEasy object + :type parent: inkscape element object + :type xData: list + :type yData: list + :type position: list + :type xLabel: string + :type yLabel: string + :type ylog10scale: bool + :type xTicks: bool + :type yTicks: bool + :type xTickStep: float + :type yTickStep: float + :type xScale: float + :type yScale: float + :type xExtraText: string + :type yExtraText: string + :type xGrid: bool + :type yGrid: bool + :type generalAspectFactorAxis: float + :type lineStylePlot: lineStyle object + :type forceXlim: list + :type forceYlim: list + :type drawAxis: bool + :type ExtraLengthAxisX: float + :type ExtraLengthAxisY: float + + :returns: [GroupPlot, outputLimits, axisOrigin] + + - GroupPlot: the plot object + - outputLimits: a list with tuples:[(x_min,xPos_min),(x_max,xPos_max),(y_min,yPos_min),(y_max,yPos_max)] + + - x_min, x_max, y_min, y_max: The limits of the axis object + - xPos_min, xPos_max, yPos_min, yPos_max: The positions of the limits of the axis object, considering the scaling and units + - axisOrigin [X0,Y0]: A list with the coordinates of the point where the axes cross. + :rtype: list + + .. important:: If any of the axis are log10, then the method ignores any pairs of (x,y) data with invalid coordinates, that is, if xData and/or yData is less than or equal to 0.0 (they would result in complex log10... =P ). The method will create a text object alongside your plot warning this. + + .. note:: If any of the axis are linear, the method will ignore any value greater than 10.000 (in absolute value). This avoids plotting very large numbers. The method will create a text object alongside your plot warning this. + + **Example** + + >>> oot_layer = self.document.getroot() # retrieves the root layer of the document + >>> xData=[-1,-0.5,0,0.5,1.0,1.5,2] + >>> yData=[x*x for x in xData] # computes y=x*x + >>> + >>> # creates a line style with a dot marker for the stem plot + >>> myMarkerDot=inkDraw.marker.createDotMarker(self,'DotMDiscreteTime',RenameMode=2,scale=0.3, + >>> strokeColor=inkDraw.color.defined('black'),fillColor=inkDraw.color.defined('red')) + >>> lineStyleDiscrete = inkDraw.lineStyle.set(lineWidth=1.0, markerEnd=myMarkerDot) + >>> + >>> inkPlot.plot.stem(self,root_layer,xData,yData,position=[0,0], + >>> xLabel='my $x$ data',yLabel='$y(x)$',ylog10scale=False, + >>> xTicks=True,yTicks=True,xTickStep=0.5,yTickStep=2.0, + >>> xScale=20,yScale=20,xExtraText='a',yExtraText='', + >>> xGrid=True,yGrid=True,generalAspectFactorAxis=1.0,lineStylePlot=lineStyleDiscrete, + >>> forceXlim=None,forceYlim=None,drawAxis=True) + + The image below present the plot above. + + .. image:: ../imagesDocs/plot_plotStemParameters_01.png + :width: 400px + + """ + + textSize = generalAspectFactorAxis * 0.25 * min(xScale, yScale) + lineWidthAxis = generalAspectFactorAxis * min(xScale, yScale) / 35.0 + + yDataTemp = [] + xDataTemp = [] + flagShowedError = False + + # remove invalid pairs of coordinates for linear plot (larger than +-10k ) + for i in range(len(xData)): + if abs(xData[i]) <= 1.0e4: + yDataTemp.append(yData[i]) + xDataTemp.append(xData[i]) + else: + if not flagShowedError: + inkDraw.text.write(ExtensionBaseObj, 'Error: The point (%f,%f)\n is too large. Ignoring it...' % (xData[i], yData[i]), + [position[0], position[1] + 2 * textSize], parent, fontSize=textSize / 2.0) + inkDraw.text.write(ExtensionBaseObj, ' Please check your graph', [position[0], position[1] + 2.5 * textSize], parent, + fontSize=textSize / 2.0) + flagShowedError = True + + yData = yDataTemp + xData = xDataTemp + + yDataTemp = [] + xDataTemp = [] + flagShowedError = False + if ylog10scale: # remove invalid pairs of coordinates for log plot (less than or equal to 0.0) + for i in range(len(yData)): + if yData[i] > 0.0: + yDataTemp.append(yData[i]) + xDataTemp.append(xData[i]) + else: + if not flagShowedError: + inkDraw.text.write(ExtensionBaseObj, + 'Error: The point (%f,%f)\n is invalid in logarithmic scale. Ignoring it...' % (xData[i], yData[i]), + [position[0], position[1] + 2 * textSize], parent, fontSize=textSize / 2.0) + inkDraw.text.write(ExtensionBaseObj, ' Please check your graph', [position[0], position[1] + 2.5 * textSize], parent, + fontSize=textSize / 2.0) + flagShowedError = True + else: # remove invalid pairs of coordinates for linear plot (larger than +-10k ) + for i in range(len(yData)): + if abs(yData[i]) <= 1.0e4: + yDataTemp.append(yData[i]) + xDataTemp.append(xData[i]) + else: + if not flagShowedError: + inkDraw.text.write(ExtensionBaseObj, 'Error: The point (%f,%f)\n is too large. Ignoring it...' % (xData[i], yData[i]), + [position[0], position[1] + 2 * textSize], parent, fontSize=textSize / 2.0) + inkDraw.text.write(ExtensionBaseObj, ' Please check your graph', [position[0], position[1] + 2.5 * textSize], parent, + fontSize=textSize / 2.0) + flagShowedError = True + + yData = yDataTemp + xData = xDataTemp + + if forceXlim: + Xlimits = forceXlim + else: + Xlimits = [min(xData), max(xData)] + if forceYlim: + Ylimits = forceYlim + else: + Ylimits = [min(yData), max(yData)] # min<->max inverted bc inkscape is upside down + + if Ylimits[0] == Ylimits[1]: + if Ylimits[0] > 0: + Ylimits[0] = 0 + if Ylimits[0] == 0: + Ylimits[1] = 1 + if Ylimits[0] < 0: + Ylimits[1] = 0 + + if Xlimits[0] == Xlimits[1]: + if Xlimits[0] > 0: + Xlimits[0] = 0 + if Xlimits[0] == 0: + Xlimits[1] = 1 + if Xlimits[0] < 0: + Xlimits[1] = 0 + + # draw axis + axisGroup = ExtensionBaseObj.createGroup(parent, 'PlotData') + + [axisObj, limits, origin] = axis.cartesian(ExtensionBaseObj, axisGroup, Xlimits, Ylimits, position, xLabel=xLabel, yLabel=yLabel, + xlog10scale=False, ylog10scale=ylog10scale, xTicks=xTicks, yTicks=yTicks, xTickStep=xTickStep, + yTickStep=yTickStep, xScale=xScale, yScale=yScale, xAxisUnitFactor=xExtraText, + yAxisUnitFactor=yExtraText, xGrid=xGrid, yGrid=yGrid, forceTextSize=textSize, + forceLineWidth=lineWidthAxis, drawAxis=drawAxis, ExtraLengthAxisX=ExtraLengthAxisX, + ExtraLengthAxisY=ExtraLengthAxisY) + + # scales data and convert to logarithmic scale if needed. Also subtracts the origin point of the axis to move the plot to the correct position + xData = [x * (xScale / xTickStep) - origin[0] for x in xData] + + if ylog10scale: + yData = [-math.log10(y) * yScale - origin[1] for y in yData] + else: + yData = [-y * (yScale / yTickStep) - origin[1] for y in yData] # negative bc inkscape is upside down + + stemGroup = ExtensionBaseObj.createGroup(axisGroup, 'StemGroup') + + for i in range(len(xData)): + inkDraw.line.relCoords(stemGroup, [[0, yData[i]]], [xData[i] + position[0], 0 + position[1]], lineStyle=lineStylePlot) + + return [axisGroup, limits, origin] diff --git a/extensions/fablabchemnitz/spirograph/spirograph.inx b/extensions/fablabchemnitz/spirograph/spirograph.inx new file mode 100644 index 00000000..abcc4134 --- /dev/null +++ b/extensions/fablabchemnitz/spirograph/spirograph.inx @@ -0,0 +1,30 @@ + + + SpiroGraph + fablabchemnitz.de.spirograph + + + + + + 10 + 5 + 2 + + + 1 + false + false + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/spirograph/spirograph.py b/extensions/fablabchemnitz/spirograph/spirograph.py new file mode 100644 index 00000000..4b1b6c75 --- /dev/null +++ b/extensions/fablabchemnitz/spirograph/spirograph.py @@ -0,0 +1,248 @@ +#!/usr/bin/python + +import math +import os +import numpy as np +import scipy.signal as scipySignal + +import inkscapeMadeEasy.inkscapeMadeEasy_Base as inkBase +import inkscapeMadeEasy.inkscapeMadeEasy_Draw as inkDraw +import inkscapeMadeEasy.inkscapeMadeEasy_Plot as inkPlot + + +# least common multiplier +def myLcm(x, y): + return x * y / math.gcd(int(x), int(y)) + + +# --------------------------------------------- +# noinspection PyAttributeOutsideInit +class Spirograph(inkBase.inkscapeMadeEasy): + def __init__(self): + inkBase.inkscapeMadeEasy.__init__(self) + + self.arg_parser.add_argument("--curveType", type=str, dest="curveType", default='resistor') + self.arg_parser.add_argument("--radius_R", type=float, dest="radius_R", default=10.0) + self.arg_parser.add_argument("--radius_r", type=float, dest="radius_r", default=5.0) + self.arg_parser.add_argument("--detailLevel", type=float, dest="detailLevel", default=1.0) + self.arg_parser.add_argument("--adaptiveTheta", type=self.bool, dest="adaptiveTheta", default=False) + self.arg_parser.add_argument("--pencil_distance", type=float, dest="pencil_distance", default=1.0) + self.arg_parser.add_argument("--drawBaseCircles", type=self.bool, dest="drawBaseCircles", default=False) + self.arg_parser.add_argument("--animate", type=self.bool, dest="animate", default=False) + self.arg_parser.add_argument("--directory", type=str, dest="directory", default='./') + + def effect(self): + so = self.options + + # sets the position to the viewport center, round to next 10. + position = [self.svg.namedview.center[0], self.svg.namedview.center[1]] + position[0] = int(math.ceil(position[0] / 10.0)) * 10 + position[1] = int(math.ceil(position[1] / 10.0)) * 10 + + root_layer = self.document.getroot() + group = self.createGroup(root_layer, 'Spiro') + + # curve parameters + R = so.radius_R + r = so.radius_r + d = so.pencil_distance + finalTheta = 2 * np.pi * myLcm(abs(r), R) / R + + if 'hypo' in so.curveType.lower(): + typeCurve = 'hypo' + if 'epi' in so.curveType.lower(): + typeCurve = 'epi' + + # markers and linestyles + Lgray = inkDraw.color.gray(0.8) + Dgray = inkDraw.color.gray(0.3) + # wheel + markerCenterDisk = inkDraw.marker.createDotMarker(self, nameID='diskCenter', scale=0.3, RenameMode=1, strokeColor=Dgray, + fillColor=inkDraw.color.defined('white')) + markerPen = inkDraw.marker.createDotMarker(self, nameID='diskPen', scale=0.3, RenameMode=1, strokeColor=Dgray, + fillColor=inkDraw.color.defined('white')) + [startArrowMarker, endArrowMarker] = inkDraw.marker.createArrow1Marker(self, nameID='arrowRot', RenameMode=1, scale=0.3, strokeColor=Dgray, + fillColor=Dgray) + + if typeCurve == 'hypo': + self.lineStyleArrow = inkDraw.lineStyle.set(lineWidth=r / 40, lineColor=Dgray, markerStart=startArrowMarker, markerEnd=None) + else: + self.lineStyleArrow = inkDraw.lineStyle.set(lineWidth=r / 40, lineColor=Dgray, markerStart=None, markerEnd=endArrowMarker) + + self.lineStyleARM = inkDraw.lineStyle.set(lineWidth=r / 40, lineColor=Dgray, markerStart=markerCenterDisk, markerEnd=markerPen) + self.lineStyleDisk = inkDraw.lineStyle.set(lineWidth=r / 40, lineColor=None, fillColor=Lgray) + + # curve + self.lineStyleCurve = inkDraw.lineStyle.set(lineWidth=0.8, lineColor=inkDraw.color.defined('red'), markerStart=None, markerEnd=None, + markerMid=None) + self.lineStyleCurve2 = inkDraw.lineStyle.set(lineWidth=0.8, lineColor=inkDraw.color.defined('Dgreen'), markerStart=None, markerEnd=None, + markerMid=None) + self.lineStyleCurve3 = inkDraw.lineStyle.set(lineWidth=0.8, lineColor=inkDraw.color.defined('blue'), markerStart=None, markerEnd=None, + markerMid=None) + + self.lineStylePre = inkDraw.lineStyle.set(lineWidth=1, lineColor=inkDraw.color.defined('red')) + self.constructionLine = inkDraw.lineStyle.set(lineWidth=0.5, lineColor=Dgray) + + # draft Points + if so.adaptiveTheta: + nPrePoints = 10 * so.detailLevel # number of pre points per turn + thetasDraft = np.linspace(0, finalTheta, int(nPrePoints * finalTheta / (2 * np.pi))) + + [pointsDraft, _, curvatureDraft] = self.calcCurve__trochoid(typeCurve, R, r, d, thetasDraft) + + # find sampling points based on local curvature + nSamples = np.ones(curvatureDraft.shape)*min(2,so.detailLevel) + detailFactor=5 + # treshold normalized curvatures + nSamples[curvatureDraft>0.8] *=detailFactor + detailFactor = 2.5 + # check if vector changed direction abuptly + for i,p in enumerate(pointsDraft): + if i==0: + v1=pointsDraft[i+1]-pointsDraft[i] + v2=pointsDraft[i]-pointsDraft[-1] + elif i < len(pointsDraft)-1: + v1=pointsDraft[i+1]-pointsDraft[i] + v2=pointsDraft[i]-pointsDraft[i-1] + else: + v1=pointsDraft[0]-pointsDraft[i] + v2=pointsDraft[i]-pointsDraft[i-1] + + v1=v1/np.linalg.norm(v1) + v2=v2/np.linalg.norm(v2) + if np.dot(v1,v2)<0.5: + nSamples[i] *=detailFactor + + thetasFinal = np.array([]) + for i in range(len(nSamples) - 1): + thetasFinal = np.append(thetasFinal, np.linspace(thetasDraft[i], thetasDraft[i + 1], int(nSamples[i]), endpoint=False)) + + thetasFinal = np.append(thetasFinal, finalTheta) + # filter the sampled angles to have a smooth transition. + Ntaps = 5 + gaussWindow = scipySignal.gaussian(Ntaps, std=5) + gaussWindow = gaussWindow / np.sum(gaussWindow) + + # inkPlot.plot.cartesian(self, root_layer, np.arange(thetasFinal.shape[0]), thetasFinal * 180 / np.pi, position, xTicks=False, yTicks=True, xTickStep=thetasFinal.shape[0]/10, yTickStep=120.0, xScale=10, yScale=10,xGrid=True, yGrid=True, forceXlim=None, forceYlim=None) + thetasFinal = scipySignal.filtfilt(gaussWindow, np.array([1]), thetasFinal) + + # inkPlot.plot.cartesian(self, root_layer, np.arange(thetasFinal.shape[0]), thetasFinal * 180 / np.pi, position, xTicks=False, yTicks=True,xTickStep=thetasFinal.shape[0]/10, yTickStep=120.0, xScale=10, yScale=10, xGrid=True, yGrid=True, forceXlim=None, forceYlim=None,drawAxis=False) + else: + nPrePoints = 20 * so.detailLevel # number of pre points per turn + thetasFinal = np.linspace(0, finalTheta, int(nPrePoints * finalTheta / (2 * np.pi))) + + # final shape + [PointsFinal, CentersFinal, curvatureFinal] = self.calcCurve__trochoid(typeCurve, R, r, d, thetasFinal) + [PointsFinal2, CentersFinal2, curvatureFinal2] = self.calcCurve__trochoid(typeCurve, R, r, -d, thetasFinal) + [PointsFinal3, CentersFinal3, curvatureFinal3] = self.calcCurve__trochoid(typeCurve, R, r, r, thetasFinal) + + if so.animate: + animGroup = self.createGroup(group, 'Anim') + + circle_R = inkDraw.circle.centerRadius(parent=animGroup, centerPoint=[0, 0], radius=R, offset=position, lineStyle=self.constructionLine) + + # draw planetary wheel + wheelGroup = self.createGroup(animGroup, 'Anim') + circle_r = inkDraw.circle.centerRadius(wheelGroup, centerPoint=CentersFinal[0], radius=r, offset=position, lineStyle=self.lineStyleDisk) + arms1 = inkDraw.line.absCoords(wheelGroup, coordsList=[CentersFinal[0], PointsFinal[0]], offset=position, lineStyle=self.lineStyleARM) + arms2 = inkDraw.line.absCoords(wheelGroup, coordsList=[CentersFinal2[0], PointsFinal2[0]], offset=position, lineStyle=self.lineStyleARM) + arms3 = inkDraw.line.absCoords(wheelGroup, coordsList=[CentersFinal3[0], PointsFinal3[0]], offset=position, lineStyle=self.lineStyleARM) + + arc1 = inkDraw.arc.centerAngStartAngEnd(wheelGroup, centerPoint=CentersFinal[0], radius=r * 0.6, angStart=40, angEnd=80, offset=position, + lineStyle=self.lineStyleArrow) + arc2 = inkDraw.arc.centerAngStartAngEnd(wheelGroup, centerPoint=CentersFinal[0], radius=r * 0.6, angStart=160, angEnd=200, + offset=position, lineStyle=self.lineStyleArrow) + arc3 = inkDraw.arc.centerAngStartAngEnd(wheelGroup, centerPoint=CentersFinal[0], radius=r * 0.6, angStart=280, angEnd=320, + offset=position, lineStyle=self.lineStyleArrow) + + self.exportSVG(animGroup, os.path.join(so.directory,'outSVG_%1.5d.svg' % 0)) + + for i in range(1, len(thetasFinal)): + + self.moveElement(wheelGroup, [CentersFinal[i][0] - CentersFinal[i - 1][0], CentersFinal[i][1] - CentersFinal[i - 1][1]]) + if typeCurve == 'hypo': + self.rotateElement(wheelGroup, [position[0] + CentersFinal[i][0], position[1] + CentersFinal[i][1]], + (thetasFinal[i] - thetasFinal[i - 1]) * (R - r) / r * 180 / np.pi) + else: + self.rotateElement(wheelGroup, [position[0] + CentersFinal[i][0], position[1] + CentersFinal[i][1]], + - (thetasFinal[i] - thetasFinal[i - 1]) * (R + r) / r * 180 / np.pi) + + curve1 = inkDraw.line.absCoords(parent=animGroup, coordsList=PointsFinal[:i + 1], offset=position, lineStyle=self.lineStyleCurve, + closePath=False) + curve2 = inkDraw.line.absCoords(parent=animGroup, coordsList=PointsFinal2[:i + 1], offset=position, lineStyle=self.lineStyleCurve2, + closePath=False) + curve3 = inkDraw.line.absCoords(parent=animGroup, coordsList=PointsFinal3[:i + 1], offset=position, lineStyle=self.lineStyleCurve3, + closePath=False) + + self.exportSVG(animGroup, os.path.join(so.directory , 'outSVG_%1.5d.svg' % i)) + + self.removeElement(curve1) + self.removeElement(curve2) + self.removeElement(curve3) + self.removeElement(animGroup) + else: + if so.drawBaseCircles: + inkDraw.circle.centerRadius(parent=group, centerPoint=position, radius=R, offset=[0, 0], lineStyle=self.constructionLine) + + if typeCurve == 'hypo': + inkDraw.circle.centerRadius(parent=group, centerPoint=position, radius=r, offset=[R - r, 0], lineStyle=self.constructionLine) + if typeCurve == 'epi': + inkDraw.circle.centerRadius(parent=group, centerPoint=position, radius=r, offset=[R + r, 0], lineStyle=self.constructionLine) + + inkDraw.line.absCoords(group, PointsFinal, position, 'spiro', self.lineStyleCurve, closePath=True) + + # plot curvatures + if False: + inkPlot.plot.polar(self, group, curvatureFinal, thetasFinal * 180 / np.pi, [position[0] + 3 * R, position[1]], rTicks=False, + tTicks=False, rTickStep=0.2, tTickStep=45.0, rScale=20, rGrid=True, tGrid=True, lineStylePlot=self.lineStyleCurve, + forceRlim=[0.0, 1.0]) + + return + + # typeCurve: 'hypo', 'epi' + def calcCurve__trochoid(self, typeCurve, R, r, d, thetas): + j = complex(0, 1) + if typeCurve.lower() == 'hypo': + # https://www.mathcurve.com/courbes2d.gb/hypotrochoid/hypotrochoid.shtml + P_complex = (R - r) * np.exp(j * thetas) + d * np.exp(-j * thetas * (R - r) / r) + dP_complex = (R - r) * j * np.exp(j * thetas) + d * (-j) * (R - r) / r * np.exp(-j * thetas * (R - r) / r) + ddP_complex = (R - r) * (-1) * np.exp(j * thetas) + d * (-1) * ((R - r) / r) ** 2 * np.exp(-j * thetas * (R - r) / r) + centerGear = (R - r) * np.exp(j * thetas) + if typeCurve.lower() == 'epi': + # https://www.mathcurve.com/courbes2d.gb/epitrochoid/epitrochoid.shtml + P_complex = (R + r) * np.exp(j * thetas) - d * np.exp(j * thetas * (R + r) / r) + dP_complex = (R + r) * j * np.exp(j * thetas) - d * j * (R + r) / r * np.exp(j * thetas * (R + r) / r) + ddP_complex = (R + r) * (-1) * np.exp(j * thetas) - d * (-1) * ((R + r) / r) ** 2 * np.exp(j * thetas * (R + r) / r) + centerGear = (R + r) * np.exp(j * thetas) + + with np.errstate(divide='ignore', invalid='ignore'): + curvature = np.divide(abs(dP_complex.real * ddP_complex.imag - dP_complex.imag * ddP_complex.real), + (dP_complex.real ** 2 + dP_complex.imag ** 2) ** (2 / 3)) + + # remove Nan=0/0 + np.nan_to_num(curvature, copy=False) + + # remove values too large + curvature[curvature > 10 * np.mean(curvature)] = 0.0 + + # self.Dump(curvature, '/home/fernando/lixo.txt', 'w') + # normalize curvature + curvature = self._normalizeCurvatures(curvature, 0.0, 1.0) + + Points = np.column_stack((P_complex.real, P_complex.imag)) + Centers = np.column_stack((centerGear.real, centerGear.imag)) + + return [Points, Centers, curvature] + + def _normalizeCurvatures(self, curvatures, normMin=0.0, normMax=1.0): + y1 = normMin + y2 = normMax + x1 = np.min(curvatures) + x2 = np.max(curvatures) + alpha = (y2 - y1) / (x2 - x1) + return alpha * (curvatures - x1) + y1 + + +if __name__ == '__main__': + sp = Spirograph() + sp.run() diff --git a/extensions/fablabchemnitz/split_and_break_bezier_at_t/split_and_break_bezier_at_t.inx b/extensions/fablabchemnitz/split_and_break_bezier_at_t/split_and_break_bezier_at_t.inx new file mode 100644 index 00000000..7cfcf9e3 --- /dev/null +++ b/extensions/fablabchemnitz/split_and_break_bezier_at_t/split_and_break_bezier_at_t.inx @@ -0,0 +1,65 @@ + + + Split And Break Bezier At t + fablabchemnitz.de.split_and_break_bezier_at_t + + + + + + + + + + + + + + + + 0.5000 + 0.5000 + true + true + false + + + + + + + + + + + + + + + + + + + + + + + + + + ../000_about_fablabchemnitz.svg + + + + path + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/split_and_break_bezier_at_t/split_and_break_bezier_at_t.py b/extensions/fablabchemnitz/split_and_break_bezier_at_t/split_and_break_bezier_at_t.py new file mode 100644 index 00000000..541b70f9 --- /dev/null +++ b/extensions/fablabchemnitz/split_and_break_bezier_at_t/split_and_break_bezier_at_t.py @@ -0,0 +1,157 @@ +#!/usr/bin/env python3 + +""" +Extension for InkScape 1.0 + +Author: Mario Voigt / FabLab Chemnitz +Mail: mario.voigt@stadtfabrikanten.org +Date: 01.06.2021 +Last patch: 02.06.2021 +License: GNU GPL v3 + +Splits a path at value t=0..1 (t=0.5 means 50%) or at a defined length with unit. +Applies independently for each sub path in selection. Use 'Path > Reverse' to change the cutting direction. + +""" + +import copy +import inkex +from inkex import bezier, CubicSuperPath, PathElement, Path +from inkex.bezier import csplength + +class SplitAndBreakBezierAtT(inkex.EffectExtension): + + def breakContours(self, element, breakelements = None): + ''' this does the same as "CTRL + SHIFT + K" ''' + if breakelements == None: + breakelements = [] + if element.tag == inkex.addNS('path','svg'): + parent = element.getparent() + idx = parent.index(element) + idSuffix = 0 + raw = element.path.to_arrays() + subPaths, prev = [], 0 + for i in range(len(raw)): #breaks compound paths into sub paths + if raw[i][0] == 'M' and i != 0: + subPaths.append(raw[prev:i]) + prev = i + subPaths.append(raw[prev:]) + for subpath in subPaths: + replacedelement = copy.copy(element) + oldId = replacedelement.get('id') + csp = CubicSuperPath(subpath) + if len(subpath) > 1 and csp[0][0] != csp[0][1]: #avoids pointy paths like M "31.4794 57.6024 Z" + replacedelement.set('d', csp) + replacedelement.set('id', oldId + str(idSuffix)) + parent.insert(idx, replacedelement) + idSuffix += 1 + breakelements.append(replacedelement) + parent.remove(element) + for child in element.getchildren(): + self.breakContours(child, breakelements) + return breakelements + + def add_arguments(self, pars): + pars.add_argument('--tab') + pars.add_argument('--split_select', default="t") + pars.add_argument('--unit', default="mm") + pars.add_argument('--target_length', type=float, default=0.5) + pars.add_argument('--target_t', type=float, default=0.5) + pars.add_argument('--keep_start', type=inkex.Boolean, default=True) + pars.add_argument('--keep_end', type=inkex.Boolean, default=True) + pars.add_argument('--keep_seg', type=inkex.Boolean, default=False) + + def effect(self): + #if self.options.split_select == "t" and self.options.target_t == 0.0: + # inkex.utils.debug("You have seleted 'percentage (t)' but your t parameter is 0.0. It would simply result in element deletion!") + # return + #if self.options.split_select == "t" and self.options.target_t == 1.0: + # inkex.utils.debug("You have seleted 'percentage (t)' but your t parameter is 1.0. It would'nt exist any trim result!") + # return + + breakApartElements = None + for element in self.svg.selection.filter(PathElement): + breakApartElements = self.breakContours(element, breakApartElements) + + if breakApartElements is not None: + for element in breakApartElements: + csp = element.path.to_superpath() + slengths, totalLength = csplength(csp) + if totalLength == 0: + inkex.utils.debug("{} is invalid: zero length (path d='{}'). Skipping ...".format(element.get('id'), element.path)) + continue + if self.options.split_select == "t": + length_at_target_t = self.options.target_t * totalLength + elif self.options.split_select == "length": + length_at_target_t = self.svg.unittouu(str(self.options.target_length) + self.options.unit) + if length_at_target_t > totalLength: + inkex.utils.debug("Entered length is larger than length of {}. Skipping ...".format(element.get('id'))) + continue + self.options.target_t = length_at_target_t / totalLength #override + + new = [] + keep = [] #some copy for the segment where the split applies + lengthSum = 0 + segOfTOccurence = None + for seg in csp: + new.append([seg[0][:]]) + for i in range(1,len(seg)): + aSeg = seg[i][0] + segLength = bezier.cspseglength(new[-1][-1], seg[i]) + lengthSum += segLength + current_t = lengthSum / totalLength + #insert a new breaking node in case we are at the desired t parameter + if current_t >= self.options.target_t: + if segOfTOccurence is None: + segOfTOccurence = i + t_dist = 1 - ((lengthSum - length_at_target_t) / segLength) + result = bezier.cspbezsplitatlength(new[-1][-1], seg[i], t_dist) + better_result = [[list(el) for el in elements] for elements in result] + new[-1][-1], nxt, seg[i] = better_result + new[-1].append(nxt[:]) + if self.options.keep_start is True and self.options.keep_end is False: + if segOfTOccurence == 1: + keep.append([seg[i-1][0], seg[i-1][0], seg[i-1][0]]) + else: + keep.append([seg[i-1][1], seg[i-1][1], seg[i-1][1]]) + keep.append([better_result[0][2], nxt[0], nxt[1]]) + elif self.options.keep_start is False and self.options.keep_end is True: + keep.append([better_result[0][2], nxt[0], nxt[1]]) + keep.append([better_result[1][2], better_result[2][0], seg[i][1]]) + elif self.options.keep_start is True and self.options.keep_end is True: + if segOfTOccurence == 1: + keep.append([seg[i-1][0], seg[i-1][0], seg[i-1][0]]) + else: + keep.append([seg[i-1][1], seg[i-1][1], seg[i-1][1]]) + keep.append([seg[i-1][2], aSeg, seg[i][1]]) + + new[-1].append(seg[i]) + + if self.options.keep_seg is False: + newpath = CubicSuperPath(new).to_path(curves_only=True).to_arrays() + #insert the splitting at the occurence (we add "m 0,0") to break the path + newpath.insert(segOfTOccurence + 1, ['m', [0, 0]]) + element.path = Path(newpath) + breakAparts = self.breakContours(element) + + if len(breakAparts) > 0: + pathStart = breakAparts[0] + if len(breakAparts) > 1: + pathEnd = breakAparts[1] + if self.options.keep_start is False and len(breakAparts) > 0: + pathStart.delete() + if self.options.keep_end is False and len(breakAparts) > 1: + pathEnd.delete() + + else: + element.path = CubicSuperPath(keep) + + #print the breaking point coordinate + #for step, (x, y) in enumerate(breakAparts[1].path.end_points): + # self.msg("x={},y={}".format(x, y)) + # break + else: + inkex.utils.debug("Selection seems to be empty!") + return +if __name__ == '__main__': + SplitAndBreakBezierAtT().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/split_bezier/split_bezier.inx b/extensions/fablabchemnitz/split_bezier/split_bezier.inx new file mode 100644 index 00000000..0df02156 --- /dev/null +++ b/extensions/fablabchemnitz/split_bezier/split_bezier.inx @@ -0,0 +1,35 @@ + + + Split Bezier (Subdivide Path) + fablabchemnitz.de.split_bezier + + + 10 + + + + + + + + + + 5 + true + + + + + + + path + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/split_bezier/split_bezier.py b/extensions/fablabchemnitz/split_bezier/split_bezier.py new file mode 100644 index 00000000..016d80e5 --- /dev/null +++ b/extensions/fablabchemnitz/split_bezier/split_bezier.py @@ -0,0 +1,167 @@ +#!/usr/bin/env python3 + +''' +Inkscape extension to subdivide the selected bezier paths based on max length value or count + +Copyright (C) 2018 Shrinivas Kulkarni + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +''' + +import inkex +from inkex import bezier +from inkex.paths import CubicSuperPath +import copy +from math import ceil + +DEF_ERR_MARGIN = 0.0001 + +def getPartsFromCubicSuper(cspath): + parts = [] + for subpath in cspath: + part = [] + prevBezPt = None + for i, bezierPt in enumerate(subpath): + if(prevBezPt != None): + seg = [prevBezPt[1], prevBezPt[2], bezierPt[0], bezierPt[1]] + part.append(seg) + prevBezPt = bezierPt + parts.append(part) + return parts + +def getCubicSuperFromParts(parts): + cbsuper = [] + for part in parts: + subpath = [] + lastPt = None + pt = None + for seg in part: + if(pt == None): + ptLeft = seg[0] + pt = seg[0] + ptRight = seg[1] + subpath.append([ptLeft, pt, ptRight]) + ptLeft = seg[2] + pt = seg[3] + subpath.append([ptLeft, pt, pt]) + cbsuper.append(subpath) + return cbsuper + +def floatCmpWithMargin(float1, float2, margin = DEF_ERR_MARGIN): + return abs(float1 - float2) < margin + + +class SplitBezier(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument('--maxLength', type = float, default = '10', help = 'Maximum Length of New Segments') + pars.add_argument('--unit', default = 'mm', help = 'Unit of Measurement') + pars.add_argument('--precision', type = int, default = '5', help = 'Number of significant digits') + pars.add_argument("--tab", default="sampling", help="Tab") + pars.add_argument("--separateSegs", type=inkex.Boolean, default=True) + + def effect(self): + + maxL = None + separateSegs = self.options.separateSegs + + if(self.options.unit != 'perc' and self.options.unit != 'count'): + maxL = self.options.maxLength * self.svg.unittouu('1'+self.options.unit) + + # ~ inkex.errormsg(str(maxL)) + tolerance = 10 ** (-1 * self.options.precision) + + selections = self.svg.selected + pathNodes = self.document.xpath('//svg:path',namespaces=inkex.NSS) + + paths = [(pathNode.get('id'), CubicSuperPath(pathNode.get('d'))) for pathNode in pathNodes] + + if(len(paths) > 0): + for key, cspath in paths: + parts = getPartsFromCubicSuper(cspath) + partsSplit = False + try: + for i, part in enumerate(parts): + + newSegs = [] + for j, seg in enumerate(part): + segL = bezier.bezierlength((seg[0], seg[1], seg[2], seg[3]), tolerance = tolerance) + + if(maxL != None): + divL = maxL + elif(self.options.unit == 'perc'): + divL = segL * self.options.maxLength / 100 + else: + divL = segL / ceil(self.options.maxLength) + + if(segL > divL): + + coveredL = 0 + s = seg + s1 = None + s2 = DEF_ERR_MARGIN #Just in case + + while(not floatCmpWithMargin(segL, coveredL)): + if(s == seg): + sL = segL + else: + sL = bezier.bezierlength((s[0], s[1], s[2], s[3]), tolerance = tolerance) + + if(floatCmpWithMargin(segL, coveredL + divL)): + s2 = s + break + else: + if(segL > (coveredL + divL)): + t1L = divL + else: + t1L = segL - coveredL + + t1 = bezier.beziertatlength((s[0], s[1], s[2], s[3]), l = t1L / sL , tolerance = tolerance) + s1, s2 = bezier.beziersplitatt((s[0], s[1], s[2], s[3]), t1) + coveredL += t1L + newSegs.append(s1) + s = s2 + newSegs.append(s2) + else: + newSegs.append(seg) + + if(len(newSegs) > len(part)): + parts[i] = newSegs + partsSplit = True + + if(partsSplit or separateSegs): + elem = selections[key] + if(separateSegs): + parent = elem.getparent() + idx = parent.index(elem) + parent.remove(elem) + allSegs = [seg for part in parts for seg in part] + idSuffix = 0 + for seg in allSegs: + cspath = getCubicSuperFromParts([[seg]]) + newElem = copy.copy(elem) + oldId = newElem.get('id') + newElem.set('d', CubicSuperPath(cspath)) + newElem.set('id', oldId + str(idSuffix).zfill(5)) + parent.insert(idx, newElem) + idSuffix += 1 + else: + cspath = getCubicSuperFromParts(parts) + elem.set('d', CubicSuperPath(cspath)) + except: + pass + +if __name__ == '__main__': + SplitBezier().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/sprocket/sprocket.inx b/extensions/fablabchemnitz/sprocket/sprocket.inx new file mode 100644 index 00000000..cb57768b --- /dev/null +++ b/extensions/fablabchemnitz/sprocket/sprocket.inx @@ -0,0 +1,32 @@ + + + Sprocket + fablabchemnitz.de.sprocket + 24 + + + + + + + + + + + + + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/sprocket/sprocket.py b/extensions/fablabchemnitz/sprocket/sprocket.py new file mode 100644 index 00000000..9691394f --- /dev/null +++ b/extensions/fablabchemnitz/sprocket/sprocket.py @@ -0,0 +1,245 @@ +#!/usr/bin/env python3 +''' +Copyright (C) 2013 Matthew Dockrey (gfish @ cyphertext.net) + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +Based on gears.py by Aaron Spike and Tavmjong Bah +''' + +import inkex +from math import * +from lxml import etree + +def rotate(p, t): + return (p[0] * cos(t) - p[1] * sin(t), p[0] * sin(t) + p[1] * cos(t)) + +def SVG_move(p, t): + pp = rotate(p, t) + return 'M ' + str(pp[0]) + ',' + str(pp[1]) + '\n' + +def SVG_line(p, t): + pp = rotate(p, t) + return 'L ' + str(pp[0]) + ',' + str(pp[1]) + '\n' + +def SVG_circle(p, r, sweep, t): + pp = rotate(p, t) + return 'A ' + str(r) + ',' + str(r) + ' 0 0,' + str(sweep) + ' ' + str(pp[0]) + ',' + str(pp[1]) + '\n' + +def SVG_curve(p, c1, c2, t): + pp = rotate(p, t) + c1p = rotate(c1, t) + c2p = rotate(c2, t) + return 'C ' + str(pp[0]) + ',' + str(pp[1]) + ' ' + str(c1p[0]) + ',' + str(c1p[1]) + ' ' + str(c2p[0]) + ',' + str(c2p[1]) + '\n' + +def SVG_curve2(p1, c11, c12, p2, c21, c22, t): + p1p = rotate(p1, t) + c11p = rotate(c11, t) + c12p = rotate(c12, t) + p2p = rotate(p2, t) + c21p = rotate(c21, t) + c22p = rotate(c22, t) + return 'C ' + str(p1p[0]) + ',' + str(p1p[1]) + ' ' + str(c11p[0]) + ',' + str(c11p[1]) + ' ' + str(c12p[0]) + ',' + str(c12p[1]) + ' ' + str(p2p[0]) + ',' + str(p2p[1]) + ' ' + str(c21p[0]) + ',' + str(c21p[1]) + ' ' + str(c22p[0]) + ',' + str(c22p[1]) + '\n' + +def SVG_close(): + return 'Z\n' + +class Sprocket(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument("-t", "--teeth", type=int, default=24, help="Number of teeth") + pars.add_argument("-s", "--size", default="ANSI #40", help="Chain size (common values ANSI #35, ANSI #40, ANSI #60)") + + def get_pitch(self, size): + return self.svg.unittouu({ + 'ANSI #25': '6.35mm', + 'ANSI #35': '9.53mm', + 'ANSI #40': '12.70mm', + 'ANSI #41': '12.70mm', + 'ANSI #50': '15.88mm', + 'ANSI #60': '19.05mm', + 'ANSI #80': '25.40mm', + 'ANSI #100': '31.75mm', + 'ANSI #120': '38.10mm', + 'ANSI #140': '44.45mm', + 'ANSI #160': '50.80mm', + 'ANSI #180': '57.15mm', + 'ANSI #200': '63.50mm', + 'ANSI #240': '76.20mm' + }[size]) + + def get_roller_diameter(self, size): + return self.svg.unittouu({ + 'ANSI #25': '3.30mm', + 'ANSI #35': '5.08mm', + 'ANSI #40': '7.77mm', + 'ANSI #41': '7.92mm', + 'ANSI #50': '10.16mm', + 'ANSI #60': '11.91mm', + 'ANSI #80': '15.88mm', + 'ANSI #100': '19.05mm', + 'ANSI #120': '22.23mm', + 'ANSI #140': '25.40mm', + 'ANSI #160': '28.58mm', + 'ANSI #180': '37.08mm', + 'ANSI #200': '39.67mm', + 'ANSI #240': '47.63mm' + }[size]) + + def invertX(self, p): + return (-p[0], p[1]) + + def effect(self): + size = self.options.size + + P = self.get_pitch(size) + N = self.options.teeth + PD = P / sin(pi / N) + PR = PD / 2 + + # Equations taken from + # http://www.gearseds.com/files/design_draw_sprocket_5.pdf + # Also referenced: + # http://en.wikipedia.org/wiki/Roller_chain (of course) + # and + # Chains for Power Transmission and Material Handling: + # Design and Applications Handbook + # American Chain Association, 1982 + + Dr = self.get_roller_diameter(size) + Ds = 1.0005 * Dr + self.svg.unittouu('0.003in') + R = Ds / 2 # seating curve radius + A = radians(35 + 60 / N) + B = radians(18 - 56 / N) + ac = 0.8 * Dr + M = ac * cos(A) + T = ac * sin(A) + E = 1.3025 * Dr + self.svg.unittouu('0.0015in') # transition radius + ab = 1.4 * Dr + W = ab * cos(pi / N) + V = ab * sin(pi / N) + F = Dr * (0.8 * cos(radians(18 - 56 / N)) + 1.4 * cos(radians(17 - 64 / N)) - 1.3025) - self.svg.unittouu('0.0015in') # topping curve radius + + svg = "" + + t_inc = 2.0 * pi / float(N) + thetas = [(x * t_inc) for x in range(N)] + + for theta in thetas: + # Seating curve center + seatC = (0, -PR) + + # Transitional curve center + c = (M, -PR - T) + + # Calculate line cx, angle A from x axis + # Y = mX + b + cx_m = -tan(A) # Negative because we're in -Y space + cx_b = c[1] - cx_m * c[0] + + # Calculate intersection of cx with circle S to get point x + # http://math.stackexchange.com/questions/228841/how-do-i-calculate-the-intersections-of-a-straight-line-and-a-circle + qA = cx_m * cx_m + 1 + qB = 2 * (cx_m * cx_b - cx_m * seatC[1] - seatC[0]) + qC = seatC[1] * seatC[1] - R * R + seatC[0] * seatC[0] - 2 * cx_b * seatC[1] + cx_b * cx_b + cx_X = (-qB - sqrt(qB * qB - 4 * qA * qC)) / (2 * qA) + + # Seating curve/Transitional curve junction + x = (cx_X, cx_m * cx_X + cx_b) + + # Calculate line cy, angle B past cx + cy_m = -tan(A - B) + cy_b = c[1] - cy_m * c[0] + + # Calculate point y (E along cy from c) + # http://www.physicsforums.com/showthread.php?t=419561 + yX = c[0] - E / sqrt(1 + cy_m * cy_m) + + # Transitional curve/Tangent line junction + y = (yX, cy_m * yX + cy_b) + + # Solve for circle T with radius E which passes through x and y + # http://mathforum.org/library/drmath/view/53027.html + # http://stackoverflow.com/questions/12264841/determine-circle-center-based-on-two-points-radius-known-with-solve-optim + z = ((x[0] + y[0]) / 2, (x[1] + y[1]) / 2) + x_diff = y[0] - x[0] + y_diff = y[1] - x[1] + q = sqrt(x_diff * x_diff + y_diff * y_diff) + tX = z[0] + sqrt(E * E - (q / 2) * (q / 2)) * (x[1] - y[1]) / q + tY = z[1] + sqrt(E * E - (q / 2) * (q / 2)) * (y[0] - x[0]) / q + + # Transitional curve center + tranC = (tX, tY) + + # Tangent line -- tangent to transitional curve at point y + tanl_m = -(tranC[0] - y[0]) / (tranC[1] - y[1]) + tanl_b = -y[0] * tanl_m + y[1] + t_off = (y[0] - 10, tanl_m * (y[0] - 10) + tanl_b) + + # Topping curve center + topC = (-W, -PR + V) + + # Adjust F to force topping curve tangent to tangent line + F = abs(topC[1] - tanl_m * topC[0] - tanl_b) / sqrt(tanl_m * tanl_m + 1) * 1.0001 # Final fudge needed to overcome numerical instability + + # Find intersection point between topping curve and tangent line + ttA = tanl_m * tanl_m + 1 + ttB = 2 * (tanl_m * tanl_b - tanl_m * topC[1] - topC[0]) + ttC = topC[1] * topC[1] - F * F + topC[0] * topC[0] - 2 * tanl_b * topC[1] + tanl_b * tanl_b + tanl_X = (-ttB - sqrt(ttB * ttB - 4 * ttA * ttC)) / (2 * ttA) + + # Tagent line/Topping curve junction + tanl = (tanl_X, tanl_m * tanl_X + tanl_b) + + # Calculate tip line, angle t_inc/2 from Y axis + tip_m = -tan(pi / 2 + t_inc / 2) # Negative because we're in -Y space + tip_b = 0 + + # Calculate intersection of tip line with topping curve + tA = tip_m * tip_m + 1 + tB = 2 * (tip_m * tip_b - tip_m * topC[1] - topC[0]) + tC = topC[1] * topC[1] - F * F + topC[0] * topC[0] - 2 * tip_b * topC[1] + tip_b * tip_b + tip_X = (-tB - sqrt(tB * tB - 4 * tA * tC)) / (2 * tA) + + # Topping curve top + tip = (tip_X, tip_m * tip_X + tip_b) + + # Set initial location if needed + if (theta == 0): + svg += SVG_move(tip, theta) + + svg += SVG_circle(tanl, F, 1, theta) # Topping curve left + svg += SVG_line(y, theta) # Tangent line left + svg += SVG_circle(x, E, 0, theta) # Transitional curve left + svg += SVG_circle(self.invertX(x), R, 0, theta) # Seating curve + svg += SVG_circle(self.invertX(y), E, 0, theta) # Transitionl curve right + svg += SVG_line(self.invertX(tanl), theta) # Tangent line right + svg += SVG_circle(self.invertX(tip), F, 1, theta) # Topping curve right + + svg += SVG_close() + + # Insert as a new element + sprocket_style = { 'stroke': '#000000', + 'stroke-width': self.svg.unittouu(str(0.1) + "mm"), + 'fill': 'none' + } + g_attribs = {inkex.addNS('label','inkscape'): 'Sprocket ' + size + "-" + str(N), + 'transform': 'translate(' + str(self.svg.namedview.center[0]) + ',' + str(self.svg.namedview.center[1]) + ')', + 'style' : str(inkex.Style(sprocket_style)), + 'd' : svg } + g = etree.SubElement(self.svg.get_current_layer(), inkex.addNS('path','svg'), g_attribs) + +if __name__ == '__main__': + Sprocket().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/starshine/starshine.inx b/extensions/fablabchemnitz/starshine/starshine.inx new file mode 100644 index 00000000..db0e3027 --- /dev/null +++ b/extensions/fablabchemnitz/starshine/starshine.inx @@ -0,0 +1,24 @@ + + + Starshine + fablabchemnitz.de.starshine + 10 + 10 + + 350 + 350 + + 4 + 10 + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/starshine/starshine.py b/extensions/fablabchemnitz/starshine/starshine.py new file mode 100644 index 00000000..948a4dc7 --- /dev/null +++ b/extensions/fablabchemnitz/starshine/starshine.py @@ -0,0 +1,105 @@ +#!/usr/bin/env python3 +# +# Copyright (C) 2021 Stefan Benediktsson +# +# GNU Affero General Public License v3.0 +# Permissions of this strongest copyleft license are +# conditioned on making available complete source code +# of licensed works and modifications, which include +# larger works using a licensed work, under the same +# license. Copyright and license notices must be preserved. +# Contributors provide an express grant of patent rights. +# When a modified version is used to provide a service +# over a network, the complete source code of the modified +# version must be made available. +# +""" +Generate a Starshine as SVG. +""" + +import random +from math import acos, cos, radians, sin, sqrt, tan + +import inkex + + + +def points_to_svgd(p): + """ + p: list of 2 tuples (x, y coordinates) + """ + f = p[0] + p = p[1:] + svgd = 'M{:.3f},{:.3f}'.format(f[0], f[1]) + for x in p: + svgd += 'L{:.3f},{:.3f}'.format(x[0], x[1]) + svgd +='Z' + return svgd + +def checkSize(a, b): + if a >= b: + return b, a + else: + return a, b + +class Starshine(inkex.GenerateExtension): + container_label = 'Rendered Starshine' + def add_arguments(self, pars): + + pars.add_argument("--r1", type=int, default=20, help="Inner Radius min") + pars.add_argument("--r2", type=int, default=20, help="Inner Radius max") + pars.add_argument("--R1", type=int, default=350, help="Outer Radius min") + pars.add_argument("--R2", type=int, default=350, help="Outer Radius min") + pars.add_argument("--a1", type=int, default=5, help="Angle min") + pars.add_argument("--a2", type=int, default=7, help="Angle max") + + + + def generate(self): + r1 = self.options.r1 + r2 = self.options.r2 + R1 = self.options.R1 + R2 = self.options.R2 + a1 = self.options.a1 + a2 = self.options.a2 + + + # generate points: list of (x, y) pairs + + r1, r2 = checkSize(r1, r2) + R1, R2 = checkSize(R1, R2) + a1, a2 = checkSize(a1, a2) + a = 0 + + style = {'stroke': '#000000', 'fill': '#000000', 'stroke-width': str(self.svg.unittouu('1px'))} + + points = [] + + while a < 360: + dI = random.randint(r1,r2) + dO = random.randint(R1,R2) + ad = random.randint(a1,a2) + + x00 = cos(radians(a)) * dI + y00 = sin(radians(a)) * dI + + x10 = cos(radians(a+ad/2)) * dO + y10 = sin(radians(a+ad/2)) * dO + + x01 = cos(radians(a+ad)) * dI + y01 = sin(radians(a+ad)) * dI + + points.append((x00, y00)) + points.append((x10, y10)) + points.append((x01, y01)) + + a = a+ad + + path = points_to_svgd(points) + + yield inkex.PathElement(style=str(inkex.Style(style)), d=str(path)) + + +if __name__ == '__main__': + Starshine().run() + diff --git a/extensions/fablabchemnitz/streaks/streaks.inx b/extensions/fablabchemnitz/streaks/streaks.inx new file mode 100644 index 00000000..12dac5bd --- /dev/null +++ b/extensions/fablabchemnitz/streaks/streaks.inx @@ -0,0 +1,42 @@ + + + Streaks + fablabchemnitz.de.streaks + + + + 255 + + 2 + + + 2 + 50 + true + + true + 500 + 500 + + + 8 + true + true + true + true + 100 + + + + + all + + + + + + + + diff --git a/extensions/fablabchemnitz/streaks/streaks.py b/extensions/fablabchemnitz/streaks/streaks.py new file mode 100644 index 00000000..806e3e0f --- /dev/null +++ b/extensions/fablabchemnitz/streaks/streaks.py @@ -0,0 +1,157 @@ +#! /usr/bin/env python3 +import random +rr = random.randint(1,10) +import inkex +from lxml import etree + +class Streaks(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument('--blur', type = int, default = 2) + pars.add_argument('--linno', type = int, default = 50) + pars.add_argument('--xrand', type = inkex.Boolean, default = True) + pars.add_argument('--pagep', type = inkex.Boolean, default = True) + pars.add_argument('--cusx', type = int, default = 500) + pars.add_argument('--cusy', type = int, default = 500) + pars.add_argument('--segLen', type = int, default = 8) + pars.add_argument('--yrand', type = inkex.Boolean, default = True) + pars.add_argument('--dashp', type = inkex.Boolean, default = True) + pars.add_argument('--blankp', type = inkex.Boolean, default = True) + pars.add_argument('--dotp', type = inkex.Boolean, default = True) + pars.add_argument('--dots', type = int, default = 100) + pars.add_argument('--strokeColour', default = 255) + pars.add_argument('--strokeWidth', type = int, default = 2) + pars.add_argument("--Nmain", default='title') + + def effect(self): + blur = int(self.options.blur) + linno = int(self.options.linno) + xrand = bool(self.options.xrand) + pagep = bool(self.options.pagep) + cusx = int(self.options.cusx) + cusy = int(self.options.cusy) + segLen = int(self.options.segLen) + yrand = bool(self.options.yrand) + dashp = bool(self.options.dashp) + blankp = bool(self.options.blankp) + dotp = bool(self.options.dotp) + dots = int(self.options.dots) + strokeColour = int(self.options.strokeColour) + strokeWidth = int(self.options.strokeWidth) + + # Get access to main SVG document element and get its dimensions. + svg = self.document.getroot() + + if pagep : + try : + width = self.svg.unittouu(svg.get('width')) + height = self.svg.unittouu(svg.attrib['height']) + except AttributeError : + width = self.unittouu(svg.get('width')) + height = self.unittouu(svg.attrib['height']) +# inkex.errormsg("Page size %d %d" % (width, height)) + else : + width = cusx + height = cusy + + + # Find defs node. + for child in svg : + if -1 != child.tag.find("defs") : + break + else: + inkex.errormsg("No defs child found") + defs = child + + if blur : + filter = etree.SubElement(defs, "filter") + filter.set(inkex.addNS('collect', 'inkscape'), 'always') + filname = self.svg.get_unique_id('filter') + filter.set('id' , filname) + + finfo = etree.SubElement(filter, 'feGaussianBlur') + finfo.set(inkex.addNS('collect', 'inkscape'), 'always') + finfo.set('stdDeviation', str(blur)) + + """ Debug + for i in range(len(svg)) : + k = svg[i].attrib + for ky in k : + inkex.errormsg(ky) + + # Clean any old layers + flag = False + for i in range(len(svg)) : + dic = svg[i].attrib + for key in dic: + if -1 != key.find("label") : + if 'Streak Layer' == dic[key] : + del svg[i] + flag = True + if flag : + inkex.errormsg("Found old Streak layer") + else: + inkex.errormsg("Clean") + """ + # Create a new layer. + layer = etree.SubElement(svg, 'g') + layer.set(inkex.addNS('label', 'inkscape'), 'Streak Layer') + layer.set(inkex.addNS('groupmode', 'inkscape'), 'layer') + + # Create path element + path = etree.Element(inkex.addNS('path','svg')) + + alpha = strokeColour & 255 + color = (strokeColour >> 8) & int('ffffff', 16) + style = { + 'stroke' : '#%06X' % color, + 'stroke-width' : str(strokeWidth), + } + #inkex.errormsg("Colour %s" % strokeColour) + + if blur : style['filter'] = 'url(#' + filname +')' + + + path.set('style', str(inkex.Style(style))) + + pathstring = '' + seglim = int(height / segLen) + ditlen = int(height / dots) + + xco = 0 + while xco < width : + y = 0 + flag = random.randint(0, 2) + while y < height : + if yrand : + yinc = random.randint(1, seglim) + else : + yinc = seglim + if flag == 1 and dashp: #Draw dash + pathstring += ' M '+str(xco)+','+str(y)+' L '+str(xco)+','+str(min(y + yinc, height)) + y += yinc + ditlen + elif flag == 2 and dotp: #Draw dots + ylim = min(y + yinc, height) + while y < ylim : + pathstring += ' M '+str(xco)+','+str(y)+' L '+str(xco)+','+str(min(y + ditlen, height)) + y += 2*ditlen + elif flag == 0 and blankp : + y += yinc #Adding blank space + elif not (dashp or dotp or blankp) : #Squiggle if user turns them off + sdit = str(2*ditlen)+' ' + pathstring += ' M '+str(xco)+','+str(y)+' q '+ 2*sdit + '0 ' +sdit + for i in range(int(height/(2*ditlen))) : + pathstring += 't 0 '+sdit + y = height + flag = (flag + 1)%3 + if xrand : + xco += random.randint(0, int(2 * width / linno)) + else : + xco += width / linno + path.set('d', pathstring) + + # Connect elements together. + layer.append(path) + +if __name__ == '__main__': + Streaks().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/strip_line/.gitignore b/extensions/fablabchemnitz/strip_line/.gitignore new file mode 100644 index 00000000..32247bd0 --- /dev/null +++ b/extensions/fablabchemnitz/strip_line/.gitignore @@ -0,0 +1 @@ +/log.txt diff --git a/extensions/fablabchemnitz/strip_line/geometry/Circle.py b/extensions/fablabchemnitz/strip_line/geometry/Circle.py new file mode 100644 index 00000000..b3514555 --- /dev/null +++ b/extensions/fablabchemnitz/strip_line/geometry/Circle.py @@ -0,0 +1,27 @@ +#!/usr/bin/env python3 + +import math +import inkex +from lxml import etree + +class Circle(): + def __init__(self,_c,_r): + self.radius=_r + self.center=_c + + def __str__(self): + return "Circle: center:"+str(self.center)+" radius:"+str(self.radius)+"\n" + + def __repr__(self): + return "Circle: center"+str(self.center)+" radius:"+str(self.radius)+"\n" + + def isHit(p): + distance=(center-p).length() + if(distance0): + return True + return False#Counterclockwise + + def circumcircle(self): + #Find the length of each side + ab=(self.a-self.b).length() + bc=(self.b-self.c).length() + ca=(self.c-self.a).length() + s=(ab+bc+ca)/2.0; + area=math.sqrt(s*(s-ab)*(s-bc)*(s-ca)); + maxlength=0 + if(maxlength + + Strip Line + fablabchemnitz.de.strip_line + 10 + log.txt + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/strip_line/strip_line.py b/extensions/fablabchemnitz/strip_line/strip_line.py new file mode 100644 index 00000000..03d1f727 --- /dev/null +++ b/extensions/fablabchemnitz/strip_line/strip_line.py @@ -0,0 +1,234 @@ +#!/usr/bin/env python3 + +import math +import codecs +import inkex +from inkex.paths import Path +from geometry.Circle import Circle +from geometry.Vertex import Vertex +from geometry.Triangle import Triangle +from geometry.Plus import Plus +from geometry.Minus import Minus +from lxml import etree + +ALL=".//" + +def fixTo360(radian): + if radian <0: + return math.pi*2.0+radian + return radian + +def widenDir(start,end): + d21x = end.x - start.x; + d21y = end.y - start.y; + return fixTo360(-math.atan2(d21x, d21y)); + +def lineDir(start,end): + d21x = end.x - start.x; + d21y = end.y - start.y; + #inkex.errormsg("d21y "+str(d21y)+" d21x "+str(d21x)+" d21y/d21x"+str(d21y/d21x)) + rad=math.atan2(d21y, d21x); + #inkex.errormsg(u"Line direction"+str(math.degrees(rad))) + return fixTo360(rad) + +#radianmath.pi/2.0: #I want you to be +-90 (forward direction) + return invert(radian) + return radian + +def fixOver90(radian): + if math.fabs(radian)0: + radY=invert(radY) + + lineRad=lineDir(start,end) + + printRadian(fp,u"lineRad:",lineRad) + adjustedRad=radY + printRadian(fp,u"diffRad:",diffRad) + squareRad=lineDir(start,end) + #printRadian(u"squareRad",squareRad) + printRadian(fp,u"Drawing angle after conversion:",radY) + v.set(LEFT) + #1〜√2 I want you to be in the range + coef=(1+0.41421356237*math.fabs(math.sin(diffRad*0.5))) + fp.write("coef="+str(coef)) + v.x*=coef + v.rotate(adjustedRad) + flag = False + outVertexArray.append([start+v,flag]) + v.set(RIGHT) + v.x*=coef + v.rotate(adjustedRad) + flag = True + outVertexArray.append([start+v,flag]) + lastRad=originalRad + lastUsedRad=adjustedRad + fp.write("\n") + #The last round + fp.write(str(i)+u"Th vertex") + adjustedRad=originalRad + printRadian(fp,u"Last drawing angle:",originalRad) + v.set(LEFT) + v.rotate(adjustedRad) + flag = False# if originalRad< 0 else False + outVertexArray.append([end+v,flag]) + v.set(RIGHT) + v.rotate(adjustedRad) + flag = True# if originalRad< 0 else False + outVertexArray.append([end+v,flag]) + fp.close() + return outVertexArray + +class StripLine(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument("--linewidth", type=int, default="10", help="Line thickness") + pars.add_argument("--logfilename", default="10", help="Log file name") + + def effect(self): + linewidth=self.options.linewidth + # Get the main root element SVG + svg = self.document.getroot() + pathlist = svg.findall(ALL+"{"+inkex.NSS['svg']+"}path") + + for path in pathlist: + if path == None: + inkex.errormsg("Please write the path! !") + #Get vertex coordinates of path + vals=path.path.to_arrays() + bone=[] + for cmd,vert in vals: + #Sometimes there is an empty, so countermeasures against it + if len(vert) != 0: + bone.append(Vertex(vert[0],vert[1])) + + if len(bone) != 0: + outVertexArray=stripline(bone,linewidth,self.options.logfilename) + + pointer=0 + for t in range(len(outVertexArray)-2): + tri=Triangle(outVertexArray[pointer][0],outVertexArray[pointer+1][0],outVertexArray[pointer+2][0]) + + stripstr=tri.toSVG() + color2="blue" + if outVertexArray[pointer][1]: + color="blue" + else: + color="red" + pointer+=1 + attributes={"points":stripstr, + "style":"fill:"+color2+";stroke:"+color2+";stroke-width:"+str(linewidth/3),"fill-opacity":"0.5"} + pth =etree.Element("polygon",attributes) + svg.append(pth) + pointer=0 + #Draw a point indicating +- + for t in range(len(outVertexArray)): + + if outVertexArray[pointer][1]: + point=Plus(outVertexArray[pointer][0].x,outVertexArray[pointer][0].y,linewidth/3) + color="blue" + else: + point=Minus(outVertexArray[pointer][0].x,outVertexArray[pointer][0].y,linewidth/3) + color="red" + if pointer==0: + color="#6f0018"#Dark red + point.appendToSVG(color,svg) + #svg.append(Circle.toSVG(outVertexArray[pointer][0].x,outVertexArray[pointer][0].y,linewidth/3,color,0)) + pointer+=1 + pointer=0 + pathstr="M " + for t in range(len(outVertexArray)): + pathstr+=str(outVertexArray[pointer][0].x)+" "+str(outVertexArray[pointer][0].y)+" " + pointer+=1 + + att3={"d":pathstr,"r":"1","fill":"none","stroke-width":"1","stroke":"white"} + pt=etree.Element("path",att3) + +if __name__ == '__main__': + StripLine().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/stroke_color_as_fill/stroke_color_as_fill.inx b/extensions/fablabchemnitz/stroke_color_as_fill/stroke_color_as_fill.inx new file mode 100644 index 00000000..b8163d88 --- /dev/null +++ b/extensions/fablabchemnitz/stroke_color_as_fill/stroke_color_as_fill.inx @@ -0,0 +1,34 @@ + + + Stroke Color As Fill + fablabchemnitz.de.stroke_color_as_fill + + + + + + + + true + true + true + true + + + + + + + + + all + + + + + + + + diff --git a/extensions/fablabchemnitz/stroke_color_as_fill/stroke_color_as_fill.py b/extensions/fablabchemnitz/stroke_color_as_fill/stroke_color_as_fill.py new file mode 100644 index 00000000..ad7fccf5 --- /dev/null +++ b/extensions/fablabchemnitz/stroke_color_as_fill/stroke_color_as_fill.py @@ -0,0 +1,111 @@ +#!/usr/bin/env python3 +''' +This extension set the stroke of selected elements as fill color and fill opacity (and optional inversed) + +Copyright (C) 2016 Jabiertxo Arraiza, jabier.arraiza@marker.es + +Version 0.2 + + +CHANGE LOG +0.2 Added features done by suv in his swamp color extension https://gitlab.com/su-v/inx-modifycolor/ +0.1 Start 25/11/2016 + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +''' + +import inkex +import sys +import re +from lxml import etree + +class StrokeColorAsFill(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument("--tab", help="The selected UI-tab") + pars.add_argument("--fill_stroke_mode", default="fillstroke", help="Exchange mode fill, stroke") + pars.add_argument("--fill_stroke_copy_alpha", type=inkex.Boolean, default=True, help="Copy alpha") + pars.add_argument("--fill_stroke_copy_none", type=inkex.Boolean, default=True, help="Copy 'None' property") + pars.add_argument("--fill_stroke_copy_unset", type=inkex.Boolean, default=True, help="Copy 'Unset' property") + pars.add_argument("--fill_stroke_convert_unset", type=inkex.Boolean, default=True, help="Convert 'Unset' property") + pars.add_argument("--nodash", type=inkex.Boolean, default="false", help="Fix dash-stroke to alow no line only markers") + + def color_swapper(self, element): + if element.tag == inkex.addNS('g', 'svg'): + for e in element: + self.color_swaper(e) + else: + style = element.get('style') + if style: + fill = re.search('fill:(.*?)(;|$)', style) + if fill is not None: + style = style.replace(fill.group(),'') + fill = fill.group(1) + stroke = re.search('stroke:(.*?)(;|$)', style) + if stroke is not None: + style = style.replace(stroke.group(),'') + stroke = stroke.group(1) + fill_opacity = re.search('fill-opacity:(.*?)(;|$)', style) + if fill_opacity is not None: + style = style.replace(fill_opacity.group(),'') + fill_opacity = fill_opacity.group() + stroke_opacity = re.search('stroke-opacity:(.*?)(;|$)', style) + if stroke_opacity is not None: + style = style.replace(stroke_opacity.group(),'') + stroke_opacity = stroke_opacity.group() + if 'fill' in self.options.fill_stroke_mode: + if self.options.fill_stroke_copy_none or fill != 'none': + if fill is None: + if self.options.fill_stroke_convert_unset: + style += ';stroke:black' + else: + style += ';stroke:' + fill + if self.options.fill_stroke_copy_alpha and fill_opacity is not None: + style += ';stroke-opacity:' + fill_opacity + if 'stroke' in self.options.fill_stroke_mode: + if self.options.fill_stroke_copy_none or stroke != 'none': + if stroke is None: + if self.options.fill_stroke_convert_unset: + style += ';fill:none' + else: + style += ';fill:' + stroke + if self.options.fill_stroke_copy_alpha and stroke_opacity is not None: + style += ';fill-opacity:' + stroke_opacity + if self.options.fill_stroke_mode == 'fill': + if fill is not None: + style += ';fill:' + fill + if fill_opacity is not None: + style += ';fill-opacity:' + fill_opacity + if self.options.fill_stroke_mode == 'stroke': + if stroke is not None: + style += ';stroke:' + stroke + if stroke_opacity is not None: + style += ';stroke-opacity:' + stroke_opacity + if self.options.nodash: + style = re.sub('stroke-dasharray:.*?(;|$)', '', style) + style = re.sub('stroke-dashoffset:.*?(;|$)', '', style) + style = re.sub('$', ';stroke-dasharray:0, 11;stroke-dashoffset:10$', style) + element.set('style',style) + + def effect(self): + saveout = sys.stdout + sys.stdout = sys.stderr + svg = self.document.getroot() + for id, element in self.svg.selected.items(): + self.color_swapper(element) + sys.stdout = saveout + +if __name__ == '__main__': + StrokeColorAsFill().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/styles_to_layers/styles_to_layers.inx b/extensions/fablabchemnitz/styles_to_layers/styles_to_layers.inx new file mode 100644 index 00000000..c480fe8b --- /dev/null +++ b/extensions/fablabchemnitz/styles_to_layers/styles_to_layers.inx @@ -0,0 +1,66 @@ + + + Styles To Layers + fablabchemnitz.de.styles_to_layers + + + + + + + + + + + + + + + + + 1 + 1 + false + true + false + false + + + + + + + + + + + + + + + + + + + + + + + + + + ../000_about_fablabchemnitz.svg + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/styles_to_layers/styles_to_layers.py b/extensions/fablabchemnitz/styles_to_layers/styles_to_layers.py new file mode 100644 index 00000000..cc055605 --- /dev/null +++ b/extensions/fablabchemnitz/styles_to_layers/styles_to_layers.py @@ -0,0 +1,298 @@ +#!/usr/bin/env python3 + +""" +Extension for InkScape 1.0 +Features + - filters the current selection or the whole document for fill or stroke style. Each style will be put onto it's own layer. This way you can devide elements by their colors. + +Author: Mario Voigt / FabLab Chemnitz +Mail: mario.voigt@stadtfabrikanten.org +Date: 19.08.2020 +Last patch: 11.04.2021 +License: GNU GPL v3 +""" +import inkex +import re +import sys +from lxml import etree +import math +from operator import itemgetter +from inkex.colors import Color + +sys.path.append("../remove_empty_groups") +sys.path.append("../apply_transformations") + +class StylesToLayers(inkex.EffectExtension): + + def findLayer(self, layerName): + svg_layers = self.document.xpath('//svg:g[@inkscape:groupmode="layer"]', namespaces=inkex.NSS) + for layer in svg_layers: + #self.msg(str(layer.get('inkscape:label')) + " == " + layerName) + if layer.get('inkscape:label') == layerName: + return layer + return None + + def createLayer(self, layerNodeList, layerName): + svg = self.document.xpath('//svg:svg',namespaces=inkex.NSS)[0] + for layer in layerNodeList: + #self.msg(str(layer[0].get('inkscape:label')) + " == " + layerName) + if layer[0].get('inkscape:label') == layerName: + return layer[0] #already exists. Do not create duplicate + layer = etree.SubElement(svg, 'g') + layer.set(inkex.addNS('label', 'inkscape'), '%s' % layerName) + layer.set(inkex.addNS('groupmode', 'inkscape'), 'layer') + return layer + + def add_arguments(self, pars): + pars.add_argument("--tab") + pars.add_argument("--apply_transformations", type=inkex.Boolean, default=False, help="Run 'Apply Transformations' extension before running vpype. Helps avoiding geometry shifting") + pars.add_argument("--separateby", default = "stroke", help = "Separate by") + pars.add_argument("--parsecolors",default = "hexval", help = "Sort colors by") + pars.add_argument("--subdividethreshold", type=int, default = 1, help = "Threshold for splitting into sub layers") + pars.add_argument("--decimals", type=int, default = 1, help = "Decimal tolerance") + pars.add_argument("--cleanup", type=inkex.Boolean, default = True, help = "Decimal tolerance") + pars.add_argument("--put_unfiltered", type=inkex.Boolean, default = False, help = "Put unfiltered elements to a separate layer") + pars.add_argument("--show_info", type=inkex.Boolean, default = False, help = "Show elements which have no style attributes to filter") + + def effect(self): + + def colorsort(stroke_value): #this function applies to stroke or fill (hex colors) + if self.options.parsecolors == "hexval": + return float(int(stroke_value[1:], 16)) + elif self.options.parsecolors == "hue": + return float(Color(stroke_value).to_hsl()[0]) + elif self.options.parsecolors == "saturation": + return float(Color(stroke_value).to_hsl()[1]) + elif self.options.parsecolors == "luminance": + return float(Color(stroke_value).to_hsl()[2]) + return None + + applyTransformationsAvailable = False # at first we apply external extension + try: + import apply_transformations + applyTransformationsAvailable = True + except Exception as e: + # self.msg(e) + self.msg("Calling 'Apply Transformations' extension failed. Maybe the extension is not installed. You can download it from official InkScape Gallery. Skipping ...") + + layer_name = None + layerNodeList = [] #list with layer, neutral_value, element and self.options.separateby type + selected = [] #list of items to parse + + if len(self.svg.selected) == 0: + for element in self.document.getroot().iter("*"): + selected.append(element) + else: + selected = self.svg.selected.values() + + for element in selected: + + # additional option to apply transformations. As we clear up some groups to form new layers, we might lose translations, rotations, etc. + if self.options.apply_transformations is True and applyTransformationsAvailable is True: + apply_transformations.ApplyTransformations().recursiveFuseTransform(element) + + if isinstance(element, inkex.ShapeElement): # Elements which have a visible representation on the canvas (even without a style attribute but by their type); if we do not use that ifInstance Filter we provokate unkown InkScape fatal crashes + + style = element.get('style') + if style is not None: + #if no style attributes or stroke/fill are set as extra attribute + stroke = element.get('stroke') + stroke_width = element.get('stroke-width') + stroke_opacity = element.get('stroke-opacity') + fill = element.get('fill') + fill_opacity = element.get('fill-opacity') + + # possible values for fill are #HEXCOLOR (like #000000), color name (like purple, black, red) or gradients (URLs) + + neutral_value = None #we will use this value to slice the filter result into sub layers (threshold) + + if fill is not None: + style = 'fill:'+ fill + ";" + if stroke is not None: + style = style + 'stroke:' + stroke + ";" + + #we don't want to destroy elements with gradients (they contain svg:stop elements which have a style too) and we don't want to mess with tspans (text) + #the Styles to Layers extension still might brick the gradients (some tests failed) + if style and element.tag != inkex.addNS('stop','svg') and element.tag != inkex.addNS('tspan','svg'): + + if self.options.separateby == "stroke": + stroke = re.search('(;|^)stroke:(.*?)(;|$)', style) + if stroke is not None: + stroke = stroke[0] + stroke_value = stroke.split("stroke:")[1].split(";")[0] + if stroke_value != "none": + stroke_converted = str(Color(stroke_value).to_rgb()) #the color can be hex code or clear name. we handle both the same + neutral_value = colorsort(stroke_converted) + layer_name = "stroke-" + self.options.parsecolors + "-" + stroke_converted + else: + layer_name = "stroke-" + self.options.parsecolors + "-none" + + elif self.options.separateby == "stroke_width": + stroke_width = re.search('stroke-width:(.*?)(;|$)', style) + if stroke_width is not None: + stroke_width = stroke_width[0] + neutral_value = self.svg.unittouu(stroke_width.split("stroke-width:")[1].split(";")[0]) + layer_name = stroke_width + else: + layer_name = "stroke-width-none" + + elif self.options.separateby == "stroke_hairline": + stroke_hairline = re.search('-inkscape-stroke:hairline(;|$)', style) + if stroke_hairline is not None: + neutral_value = 1 + layer_name = "stroke-hairline-yes" + else: + neutral_value = 0 + layer_name = "stroke-hairline-no" + + elif self.options.separateby == "stroke_opacity": + stroke_opacity = re.search('stroke-opacity:(.*?)(;|$)', style) + if stroke_opacity is not None: + stroke_opacity = stroke_opacity[0] + neutral_value = float(stroke_opacity.split("stroke-opacity:")[1].split(";")[0]) + layer_name = stroke_opacity + else: + layer_name = "stroke-opacity-none" + + elif self.options.separateby == "fill": + fill = re.search('fill:(.*?)(;|$)', style) + if fill is not None: + fill = fill[0] + fill_value = fill.split("fill:")[1].split(";")[0] + #check if the fill color is a real color or a gradient. if it's a gradient we skip the element + if fill_value != "none" and "url" not in fill_value: + fill_converted = str(Color(fill_value).to_rgb()) #the color can be hex code or clear name. we handle both the same + neutral_value = colorsort(fill_converted) + layer_name = "fill-" + self.options.parsecolors + "-" + fill_converted + elif "url" in fill_value: #okay we found a gradient. we put it to some group + layer_name = "fill-" + self.options.parsecolors + "-gradient" + else: + layer_name = "fill-" + self.options.parsecolors + "-none" + + elif self.options.separateby == "fill_opacity": + fill_opacity = re.search('fill-opacity:(.*?)(;|$)', style) + if fill_opacity is not None: + fill_opacity = fill_opacity[0] + neutral_value = float(fill_opacity.split("fill-opacity:")[1].split(";")[0]) + layer_name = fill_opacity + else: + layer_name = "fill-opacity-none" + + else: + self.msg("No proper option selected.") + exit(1) + + if neutral_value is not None: #apply decimals filter + neutral_value = float(round(neutral_value, self.options.decimals)) + if layer_name is not None: + layer_name = layer_name.split(";")[0] #cut off existing semicolons to avoid duplicated layers with/without semicolon + currentLayer = self.findLayer(layer_name) + if currentLayer is None: #layer does not exist, so create a new one + layerNodeList.append([self.createLayer(layerNodeList, layer_name), neutral_value, element, self.options.separateby]) + else: + layerNodeList.append([currentLayer, neutral_value, element, self.options.separateby]) #layer is existent. append items to this later + elif layer_name is None and self.options.put_unfiltered: + layer_name = 'without-' + self.options.separateby + '-in-style-attribute' + else: #if no style attribute in element and not a group + if isinstance(element, inkex.Group) is False: + if self.options.show_info: + self.msg(element.get('id') + ' has no style attribute') + if self.options.put_unfiltered: + layer_name = 'without-style-attribute' + currentLayer = self.findLayer(layer_name) + + if currentLayer is None: #layer does not exist, so create a new one + layerNodeList.append([self.createLayer(layerNodeList, layer_name), None, element, None]) + else: + layerNodeList.append([currentLayer, None, element, None]) #layer is existent. append items to this later + + contentlength = 0 #some counter to track if there are layers inside or if it is just a list with empty children + for layerNode in layerNodeList: + try: #some nasty workaround. Make better code + layerNode[0].append(layerNode[2]) #append element to created layer + if layerNode[1] is not None: contentlength += 1 #for each found layer we increment +1 + except: + continue + + # we do some cosmetics with layers. Sometimes it can happen that one layer includes another. We don't want that. We move all layers to the top level + for newLayerNode in layerNodeList: + self.document.getroot().append(newLayerNode[0]) + + + # Additionally if threshold was defined re-arrange the previously created layers by putting them into sub layers + if self.options.subdividethreshold > 1 and contentlength > 0: #check if we need to subdivide and if there are items we could rearrange into sub layers + + #disabled sorting because it can return NoneType values which will kill the algorithm + #layerNodeList.sort(key=itemgetter(1)) #sort by neutral values from min to max to put them with ease into parent layers + + topLevelLayerNodeList = [] #list with new layers and sub layers (mapping) + minmax_range = [] + for layerNode in layerNodeList: + if layerNode[1] is not None: + if layerNode[1] not in minmax_range: + minmax_range.append(layerNode[1]) #get neutral_value + + if len(minmax_range) >= 3: #if there are less than 3 distinct values a sub-layering will make no sense + #adjust the subdividethreshold if there are less layers than division threshold value dictates + if len(minmax_range) - 1 < self.options.subdividethreshold: + self.options.subdividethreshold = len(minmax_range)-1 + #calculate the sub layer slices (sub ranges) + minval = min(minmax_range) + maxval = max(minmax_range) + sliceinterval = (maxval - minval) / self.options.subdividethreshold + + #self.msg("neutral values (sorted) = " + str(minmax_range)) + #self.msg("min neutral_value = " + str(minval)) + #self.msg("max neutral_value = " + str(maxval)) + #self.msg("slice value (divide step size) = " + str(sliceinterval)) + #self.msg("subdivides (parent layers) = " + str(self.options.subdividethreshold)) + + for layerNode in layerNodeList: + for x in range(0, self.options.subdividethreshold): #loop through the sorted neutral_values and determine to which layer they should belong + + if layerNode[1] is None: + layer_name = str(layerNode[3]) + "#parent:unfilterable" + currentLayer = self.findLayer(layer_name) + if currentLayer is None: #layer does not exist, so create a new one + topLevelLayerNodeList.append([self.createLayer(topLevelLayerNodeList, layer_name), layerNode[0]]) + else: + topLevelLayerNodeList.append([currentLayer, layerNode[0]]) #layer is existent. append items to this later + break + else: + layer_name = str(layerNode[3]) + "#parent" + str(x+1) + currentLayer = self.findLayer(layer_name) + #value example for arranging: + #min neutral_value = 0.07 + #max neutral_value = 2.50 + #slice value = 0.81 + #subdivides = 3 + # + #that finally should generate: + # layer #1: (from 0.07) to (0.07 + 0.81 = 0.88) + # layer #2: (from 0.88) to (0.88 + 0.81 = 1.69) + # layer #3: (from 1.69) to (1.69 + 0.81 = 2.50) + # + #now check layerNode[1] (neutral_value) and sort it into the correct layer + if (layerNode[1] >= minval + sliceinterval * x) and (layerNode[1] <= minval + sliceinterval + sliceinterval * x): + if currentLayer is None: #layer does not exist, so create a new one + topLevelLayerNodeList.append([self.createLayer(topLevelLayerNodeList, layer_name), layerNode[0]]) + else: + topLevelLayerNodeList.append([currentLayer, layerNode[0]]) #layer is existent. append items to this later + break + + #finally append the sublayers to the slices + #for layer in topLevelLayerNodeList: + #self.msg(layer[0].get('inkscape:label')) + #self.msg(layer[1]) + for newLayerNode in topLevelLayerNodeList: + newLayerNode[0].append(newLayerNode[1]) #append newlayer to layer + + if self.options.cleanup == True: + try: + import remove_empty_groups + remove_empty_groups.RemoveEmptyGroups.effect(self) + except: + self.msg("Calling 'Remove Empty Groups' extension failed. Maybe the extension is not installed. You can download it from official InkScape Gallery. Skipping ...") + +if __name__ == '__main__': + StylesToLayers().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/sudoku/qqwing b/extensions/fablabchemnitz/sudoku/qqwing new file mode 100644 index 00000000..f76e0c27 --- /dev/null +++ b/extensions/fablabchemnitz/sudoku/qqwing @@ -0,0 +1,210 @@ +#! /bin/bash + +# qqwing - temporary wrapper script for .libs/qqwing +# Generated by libtool (GNU libtool) 2.4.2 Debian-2.4.2-1.10ubuntu1 +# +# The qqwing program cannot be directly executed until all the libtool +# libraries that it depends on are installed. +# +# This wrapper script should never be moved out of the build directory. +# If it is, it will not operate correctly. + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='s/\([`"$\\]\)/\\\1/g' + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +relink_command="" + +# This environment variable determines our operation mode. +if test "$libtool_install_magic" = "%%%MAGIC variable%%%"; then + # install mode needs the following variables: + generated_by_libtool_version='2.4.2' + notinst_deplibs=' ./libqqwing.la' +else + # When we are sourced in execute mode, $file and $ECHO are already set. + if test "$libtool_execute_magic" != "%%%MAGIC variable%%%"; then + file="$0" + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' +} + ECHO="printf %s\\n" + fi + +# Very basic option parsing. These options are (a) specific to +# the libtool wrapper, (b) are identical between the wrapper +# /script/ and the wrapper /executable/ which is used only on +# windows platforms, and (c) all begin with the string --lt- +# (application programs are unlikely to have options which match +# this pattern). +# +# There are only two supported options: --lt-debug and +# --lt-dump-script. There is, deliberately, no --lt-help. +# +# The first argument to this parsing function should be the +# script's ./libtool value, followed by no. +lt_option_debug= +func_parse_lt_options () +{ + lt_script_arg0=$0 + shift + for lt_opt + do + case "$lt_opt" in + --lt-debug) lt_option_debug=1 ;; + --lt-dump-script) + lt_dump_D=`$ECHO "X$lt_script_arg0" | /usr/bin/sed -e 's/^X//' -e 's%/[^/]*$%%'` + test "X$lt_dump_D" = "X$lt_script_arg0" && lt_dump_D=. + lt_dump_F=`$ECHO "X$lt_script_arg0" | /usr/bin/sed -e 's/^X//' -e 's%^.*/%%'` + cat "$lt_dump_D/$lt_dump_F" + exit 0 + ;; + --lt-*) + $ECHO "Unrecognized --lt- option: '$lt_opt'" 1>&2 + exit 1 + ;; + esac + done + + # Print the debug banner immediately: + if test -n "$lt_option_debug"; then + echo "qqwing:qqwing:${LINENO}: libtool wrapper (GNU libtool) 2.4.2 Debian-2.4.2-1.10ubuntu1" 1>&2 + fi +} + +# Used when --lt-debug. Prints its arguments to stdout +# (redirection is the responsibility of the caller) +func_lt_dump_args () +{ + lt_dump_args_N=1; + for lt_arg + do + $ECHO "qqwing:qqwing:${LINENO}: newargv[$lt_dump_args_N]: $lt_arg" + lt_dump_args_N=`expr $lt_dump_args_N + 1` + done +} + +# Core function for launching the target application +func_exec_program_core () +{ + + if test -n "$lt_option_debug"; then + $ECHO "qqwing:qqwing:${LINENO}: newargv[0]: $progdir/$program" 1>&2 + func_lt_dump_args ${1+"$@"} 1>&2 + fi + exec "$progdir/$program" ${1+"$@"} + + $ECHO "$0: cannot exec $program $*" 1>&2 + exit 1 +} + +# A function to encapsulate launching the target application +# Strips options in the --lt-* namespace from $@ and +# launches target application with the remaining arguments. +func_exec_program () +{ + case " $* " in + *\ --lt-*) + for lt_wr_arg + do + case $lt_wr_arg in + --lt-*) ;; + *) set x "$@" "$lt_wr_arg"; shift;; + esac + shift + done ;; + esac + func_exec_program_core ${1+"$@"} +} + + # Parse options + func_parse_lt_options "$0" ${1+"$@"} + + # Find the directory that this script lives in. + thisdir=`$ECHO "$file" | /usr/bin/sed 's%/[^/]*$%%'` + test "x$thisdir" = "x$file" && thisdir=. + + # Follow symbolic links until we get to the real thisdir. + file=`ls -ld "$file" | /usr/bin/sed -n 's/.*-> //p'` + while test -n "$file"; do + destdir=`$ECHO "$file" | /usr/bin/sed 's%/[^/]*$%%'` + + # If there was a directory component, then change thisdir. + if test "x$destdir" != "x$file"; then + case "$destdir" in + [\\/]* | [A-Za-z]:[\\/]*) thisdir="$destdir" ;; + *) thisdir="$thisdir/$destdir" ;; + esac + fi + + file=`$ECHO "$file" | /usr/bin/sed 's%^.*/%%'` + file=`ls -ld "$thisdir/$file" | /usr/bin/sed -n 's/.*-> //p'` + done + + # Usually 'no', except on cygwin/mingw when embedded into + # the cwrapper. + WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=no + if test "$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR" = "yes"; then + # special case for '.' + if test "$thisdir" = "."; then + thisdir=`pwd` + fi + # remove .libs from thisdir + case "$thisdir" in + *[\\/].libs ) thisdir=`$ECHO "$thisdir" | /usr/bin/sed 's%[\\/][^\\/]*$%%'` ;; + .libs ) thisdir=. ;; + esac + fi + + # Try to get the absolute directory name. + absdir=`cd "$thisdir" && pwd` + test -n "$absdir" && thisdir="$absdir" + + program='qqwing' + progdir="$thisdir/.libs" + + + if test -f "$progdir/$program"; then + # Add our own library path to LD_LIBRARY_PATH + LD_LIBRARY_PATH="/home/tomate/qqwing-1.3.4/.libs:$LD_LIBRARY_PATH" + + # Some systems cannot cope with colon-terminated LD_LIBRARY_PATH + # The second colon is a workaround for a bug in BeOS R4 sed + LD_LIBRARY_PATH=`$ECHO "$LD_LIBRARY_PATH" | /usr/bin/sed 's/::*$//'` + + export LD_LIBRARY_PATH + + if test "$libtool_execute_magic" != "%%%MAGIC variable%%%"; then + # Run the actual program with our arguments. + func_exec_program ${1+"$@"} + fi + else + # The program doesn't exist. + $ECHO "$0: error: \`$progdir/$program' does not exist" 1>&2 + $ECHO "This script is just a wrapper for $program." 1>&2 + $ECHO "See the libtool documentation for more information." 1>&2 + exit 1 + fi +fi diff --git a/extensions/fablabchemnitz/sudoku/qqwing.exe b/extensions/fablabchemnitz/sudoku/qqwing.exe new file mode 100644 index 00000000..b39426ad Binary files /dev/null and b/extensions/fablabchemnitz/sudoku/qqwing.exe differ diff --git a/extensions/fablabchemnitz/sudoku/sudoku.inx b/extensions/fablabchemnitz/sudoku/sudoku.inx new file mode 100644 index 00000000..256bea9a --- /dev/null +++ b/extensions/fablabchemnitz/sudoku/sudoku.inx @@ -0,0 +1,47 @@ + + + Sudoku + fablabchemnitz.de.sudoku + + + + + + + + + + + 1 + 1 + + + + + + + + + 6 + 1 + + + 255 + 4243148799 + 2290779647 + 3298820351 + 1923076095 + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/sudoku/sudoku.py b/extensions/fablabchemnitz/sudoku/sudoku.py new file mode 100644 index 00000000..6df2673d --- /dev/null +++ b/extensions/fablabchemnitz/sudoku/sudoku.py @@ -0,0 +1,111 @@ +#!/usr/bin/env python3 + +''' +render_sudoku.py +A sudoku generator plugin for Inkscape, but also can be used as a standalone +command line application. + +Copyright (C) 2011 Chris Savery + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +''' + +__version__ = "0.1" + +import inkex +import subprocess +from lxml import etree +from inkex import Color + +class Sudoku(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument("--tab") + pars.add_argument("--difficulty",default="mixed", help='How difficult to make puzzles.') + pars.add_argument("--rows", type=int, default=1, help='Number of puzzle rows.') + pars.add_argument("--cols", type=int, default=1, help='Number of puzzle columns.') + pars.add_argument("--puzzle_size", type=int, default=6, help='The width & height of each puzzle.') + pars.add_argument("--puzzle_gap", type=int, default=1, help='The space between puzzles.') + pars.add_argument("--color_text", type=Color, default=255, help='Color for given numbers.') + pars.add_argument("--color_bkgnd", type=Color, default=4243148799, help='Color for the puzzle background.') + pars.add_argument("--color_puzzle",type=Color, default=2290779647, help='Border color for the puzzles.') + pars.add_argument("--color_boxes", type=Color, default=3298820351, help='Border color for puzzle boxes.') + pars.add_argument("--color_cells", type=Color, default=1923076095, help='Border color for the puzzle cells.') + pars.add_argument("--units", help="The unit of the dimensions") + + def draw_grid(self, g_puz, x, y): + bkgnd_style = {'stroke':'none', 'stroke-width':'2', 'fill':self.options.color_bkgnd } + puzzle_style = {'stroke':self.options.color_puzzle, 'stroke-width':'2', 'fill':'none' } + boxes_style = {'stroke':self.options.color_boxes, 'stroke-width':'2', 'fill':'none' } + cells_style = {'stroke':self.options.color_cells, 'stroke-width':'1', 'fill':'none' } + g = etree.SubElement(g_puz, 'g') + self.draw_rect(g, bkgnd_style, self.left+x, self.top+y, self.size, self.size) + self.draw_rect(g, cells_style, self.left+x+self.size/9, self.top+y, self.size/9, self.size) + self.draw_rect(g, cells_style, self.left+x+self.size/3+self.size/9, self.top+y, self.size/9, self.size) + self.draw_rect(g, cells_style, self.left+x+2*self.size/3+self.size/9, self.top+y, self.size/9, self.size) + self.draw_rect(g, cells_style, self.left+x, self.top+y+self.size/9, self.size, self.size/9) + self.draw_rect(g, cells_style, self.left+x, self.top+y+self.size/3+self.size/9, self.size, self.size/9) + self.draw_rect(g, cells_style, self.left+x, self.top+y+2*self.size/3+self.size/9, self.size, self.size/9) + self.draw_rect(g, boxes_style, self.left+x+self.size/3, self.top+y, self.size/3, self.size) + self.draw_rect(g, boxes_style, self.left+x, self.top+y+self.size/3, self.size, self.size/3) + self.draw_rect(g, puzzle_style, self.left+x, self.top+y, self.size, self.size) + + def draw_rect(self, g, style, x, y, w, h): + attribs = {'style':str(inkex.Style(style)), 'x':str(x), 'y':str(y), 'height':str(h), 'width':str(w) } + etree.SubElement(g, inkex.addNS('rect','svg'), attribs) + + def fill_puzzle(self, g_puz, x, y, data): + cellsize = self.size / 9 + txtsize = self.size / 12 + offset = (cellsize + txtsize)/2.25 + g = etree.SubElement(g_puz, 'g') + text_style = {'font-size':str(txtsize), + 'fill':self.options.color_text, + 'font-family':'arial', + 'text-anchor':'middle', 'text-align':'center' } + #inkex.utils.debug(len(data)) + for n in range(len(data)): + #inkex.utils.debug(str(n)) + #inkex.utils.debug("data["+str(n)+"]="+str(data[n])) + if str(data[n]) in "123456789": + attribs = {'style': str(inkex.Style(text_style)), + 'x': str(self.left + x + n%9 * cellsize + cellsize/2 ), 'y': str(self.top + y + n//9 * cellsize + offset ) } + etree.SubElement(g, 'text', attribs).text = str(data[n]) + + + def effect(self): + args = ["qqwing", "--one-line", "--generate", str(self.options.rows * self.options.cols)] + if self.options.difficulty != 'mixed': + args.extend(["--difficulty", self.options.difficulty]) + data = subprocess.Popen(args, stdout=subprocess.PIPE).communicate()[0].splitlines() + #inkex.utils.debug(data) + + parent = self.document.getroot() + self.doc_w = self.svg.unittouu(parent.get('width')) + self.doc_h = self.svg.unittouu(parent.get('height')) + self.size = self.svg.unittouu(str(self.options.puzzle_size) + self.options.units) + self.gap = self.svg.unittouu(str(self.options.puzzle_gap) + self.options.units) + self.shift = self.size + self.gap + self.left = (self.doc_w - (self.options.cols * self.shift - self.gap))/2 + self.top = (self.doc_h - (self.options.rows * self.shift - self.gap))/2 + self.sudoku_g = etree.SubElement(parent, 'g', {'id':'sudoku'}) + for row in range(0, self.options.rows): + for col in range(0, self.options.cols): + g = etree.SubElement(self.sudoku_g, 'g', {'id':'puzzle_'+str(col)+str(row)}) + self.draw_grid(g, col*self.shift, row*self.shift) + self.fill_puzzle(g, col*self.shift, row*self.shift, data[col+row*self.options.cols].decode('UTF-8')) + +if __name__ == '__main__': + Sudoku().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/sundial_declining/sundial_declining.inx b/extensions/fablabchemnitz/sundial_declining/sundial_declining.inx new file mode 100644 index 00000000..8baaf0b8 --- /dev/null +++ b/extensions/fablabchemnitz/sundial_declining/sundial_declining.inx @@ -0,0 +1,45 @@ + + + Sundial Declining + fablabchemnitz.de.sundial_declining + + + + 50 + 16 + 0 + false + + + + 40 + 40 + + 0 + + + + + + + + + + + + + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/sundial_declining/sundial_declining.py b/extensions/fablabchemnitz/sundial_declining/sundial_declining.py new file mode 100644 index 00000000..7ed7c5a3 --- /dev/null +++ b/extensions/fablabchemnitz/sundial_declining/sundial_declining.py @@ -0,0 +1,328 @@ +#!/usr/bin/python3 + +# -------------------------------------------------------------------------------------- +#http://astrodinamica.altervista.org/ESU/sundial/Condensed-vector-theory.pdf +#https://www.helios-sonnenuhren.de/sites/default/files/upload/the_calculation_of_declining_and_inclining_sundials_an_unusual_approach.pdf +# -------------------------------------------------------------------------------------- + +from __future__ import division +import inkex +from datetime import datetime, time, timedelta +from math import * +from lxml import etree + +class sundialDeclining(inkex.EffectExtension): + + def add_arguments(self, pars): + pars.add_argument("--latitude", type=float, dest="latitude", default="50.3515") + pars.add_argument("--longitude", type=float, dest="longitude", default="15.7512") + pars.add_argument("--timezone", type=int, dest="timezone", default="0") + pars.add_argument("--summer_time", type=inkex.Boolean, dest="summer_time", default='False') + pars.add_argument("--gnom", type=float, dest="gnom", default="30") + pars.add_argument("--decl", type=float, dest="decl", default="0") + pars.add_argument("--incl", type=float, dest="incl", default="0") + pars.add_argument("--DL", type=float, dest="DL", default="0") + pars.add_argument("--tab") + + def effect(self): + def draw_SVG_line(x1, y1, x2, y2, width, stroke, name, parent): + style = { 'stroke': stroke, 'stroke-width':str(width), 'fill': 'none' } + line_attribs = {'style':str(inkex.Style(style)), + inkex.addNS('label','inkscape'):name, + 'd':'M '+str(x1)+','+str(y1)+' L '+str(x2)+','+str(y2)} + etree.SubElement(parent, inkex.addNS('path','svg'), line_attribs ) + + def draw_SVG_circle(cx, cy, r, width, stroke, fill, name, parent): + style = { 'stroke': stroke, 'stroke-width':str(width), 'fill':fill} + circle_attribs = {'style':str(inkex.Style(style)), + inkex.addNS('label','inkscape'):name, + 'cx':str(cx), 'cy':str(cy), 'r':str(r)} + etree.SubElement(parent, inkex.addNS('circle','svg'), circle_attribs ) + + def draw_SVG_tri(x1, y1, x2, y2, x3, y3, width, stroke, name, parent): + style = { 'stroke': stroke, 'stroke-width':str(width), 'fill': 'none' } + tri_attribs = {'style':str(inkex.Style(style)), + inkex.addNS('label','inkscape'):name, + 'd':'M '+str(x1)+','+str(y1)+ + ' L '+str(x2)+','+str(y2)+ + ' L '+str(x3)+','+str(y3)+ + ' L '+str(x1)+','+str(y1)+' z'} + etree.SubElement(parent, inkex.addNS('path','svg'), tri_attribs ) + + def draw_SVG_rect(x, y, w, h, width, fill, name, parent): + style = { 'stroke': '#000000', 'stroke-width':str(width), 'fill':fill} + rect_attribs = {'style':str(inkex.Style(style)), + inkex.addNS('label','inkscape'):name, + 'x':str(x), 'y':str(y), 'width':str(w), 'height':str(h)} + etree.SubElement(parent, inkex.addNS('rect','svg'), rect_attribs ) + + def draw_SVG_polyline(DP, width, colour, fill, name, parent): + style = { 'stroke': colour, 'stroke-width': str(width), 'fill':fill} + polyline_attribs = {'style':str(inkex.Style(style)), + inkex.addNS('label','inkscape'):name, + 'd':'M' +str(DP)} + etree.SubElement(parent, inkex.addNS('path','svg'), polyline_attribs ) + + def draw_SVG_text(x, y, textvalue, font, text_size, parent): + text = etree.Element(inkex.addNS('text','svg')) + text.set('x', str(x)) + text.set('y', str(y)) + style = {'text-align' : 'center', 'font-family': str(font) ,'text-anchor': 'middle', 'alignment-baseline' : 'center', 'font-size' : str(text_size), 'vertical-align' : 'middle'} + text.set('style', str(inkex.Style(style))) + text.text = textvalue + parent.append(text) + + so = self.options + parent = self.svg.get_current_layer() + + border=5 + widthgrid = 200 + heightgrid = 150 + + # Grid + Gx=15 + Gy=9 + + # Get SVG document dimensions + svg = self.document.getroot() + width = self.svg.unittouu(svg.get('width')) + height = self.svg.unittouu(svg.attrib['height']) + + # Embed grid in group + #Put in in the centre of the current view + #t = 'translate(' + str( self.view_center[0]- width/2.0) + ',' + str( self.view_center[1]- height/2.0) + ')' + #t = 'translate(0,' + str(height) + ') rotate(-180,0,0)' + t = 'translate(' + str(width/2) + ',' + str(border) + ')' + #t = 'translate(0 ,0)' + + g_attribs = {inkex.addNS('label','inkscape'):'SunDial_Lat:' + str( so.latitude )+';Long:'+str( so.longitude ),'transform':t} + grid = etree.SubElement(self.svg.get_current_layer(), 'g', g_attribs) + + #Group for x gridlines + g_attribs = {inkex.addNS('label','inkscape'):'XGridlines'} + glx = etree.SubElement(grid, 'g', g_attribs) + + #Group for y gridlines + g_attribs = {inkex.addNS('label','inkscape'):'YGridlines'} + gly = etree.SubElement(grid, 'g', g_attribs) + + #Group for Hour lines vertical SunDial + g_attribs = {inkex.addNS('label','inkscape'):'VerticalHourLines'} + vhl = etree.SubElement(grid, 'g', g_attribs) + + #Group for Nodus vertical SunDial + g_attribs = {inkex.addNS('label','inkscape'):'Nodus'} + nod = etree.SubElement(grid, 'g', g_attribs) + + #Group for zodiac line + g_attribs = {inkex.addNS('label','inkscape'):'Line of zodiac'} + loz = etree.SubElement(grid, 'g', g_attribs) + +# ----------Grid and border------------------------------------------------------------------ + # Border + draw_SVG_rect(-width/2+border, -0, width-2*border, heightgrid, 0.8, 'none', 'Border', grid) #border rectangle + + # XGridLine + for i in range(Gx): #x divisons + distX=widthgrid/(Gx-1) + draw_SVG_line(distX*i-width/2+border, heightgrid, distX*i-width/2+border, 0, 0.1, '#0000FF', 'X'+str(i), glx) + + # YGridLine + for i in range(Gy): #y divisons + distY=heightgrid/(Gy-1) + draw_SVG_line(-width/2+border, distY*i, width/2-border, distY*i, 0.1, '#0000FF', 'Y'+str(i), gly) + +# ---------------------------------------------------------------------------- + Time = [4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20] + T = {} # + T_rad = {} # + + # Line of zodiac + if so.DL == 0: + D = [] + if so.DL == 3: + D = [-23.44, 0.0001, 23.44] + if so.DL == 7: + D = [-23.44, -20.15, -11.47, 0.0001, 11.47, 20.15, 23.44] #https://www.mysundial.ca/tsp/the_zodiac.html + + D_rad = {} + + W = so.decl*pi/180 # Declination of wall in radian https://www.mysundial.ca/tsp/vertical_declining_sundial.html + R = so.incl*pi/180 # Inclination of wall in radian + L = so.latitude*pi/180 # Latitude in radian + + #Text + textvalue='Sundials for Latitude: %s; Wall azimuth: %s; Wall inclination: %s --- (c)2019 Tomas Urban ' % (so.latitude, round(W*180/pi,2), round(R*180/pi,2)) + draw_SVG_text(0, heightgrid+4, textvalue, 'san-serif', 4, gly) + +# ----------Gnomon ---------------------------------------------------------------------------- + Xf =-so.gnom*(sin(W)*cos(L))/(cos(R)*cos(W)*cos(L)-sin(R)*sin(L)) + Zf = so.gnom*((sin(R)*cos(W)*cos(L))+(cos(R)*sin(L)))/(cos(R)*cos(W)*cos(L)-sin(R)*sin(L)) + g = asin(cos(R)*cos(W)*cos(L)-sin(R)*sin(L)) + f = atan(-sin(W)*cos(L)/(sin(R)*cos(W)*cos(L)+cos(R)*sin(L))) + P = -so.gnom/(cos(R)*cos(W)*cos(L)-sin(R)*sin(L)) + + #Text + #textvalue='Xf: %s; Zf: %s; g: %s; P: %s; f: %s' % (round(Xf,2), round(Zf,2), round(g*180/pi,2), round(P,2), round(f*180/pi,2)) + #draw_SVG_text(0, 120, textvalue, 'san-serif', 4, gly) + #textvalue='G*cos(f): %s; G*sin(f): %s; g: %s; P: %s; f: %s' % (round(so.gnom*cos(f),2), round(so.gnom*sin(f),2), round(so.gnom*180/pi,2), round(P,2), round(f*180/pi,2)) + #draw_SVG_text(0, 125, textvalue, 'san-serif', 4, gly) + + # Horizont line + draw_SVG_line(-width/2+border, Zf, width/2-border, Zf, 0.5, '#000000', 'Horizont line', nod) + + # Nodus + a = (0,0) + b = (-Xf, Zf) + c = (-Xf+so.gnom*cos(f),Zf+so.gnom*sin(f)) + draw_SVG_tri(a[0], a[1], b[0], b[1], c[0], c[1], 0.35, '#FF00FF', 'Nodus', nod) + draw_SVG_circle(-Xf,Zf, 2, 0.3, '#000000', '#0000FF', 'Nodus', nod) + +# --------- Line of zodiac ---------------------------------------------------------------------- + A = -cos(R)*sin(W) + B = -cos(R)*cos(W) + C = sin(R) + #textvalue='A: %s; B: %s; C: %s' % (A, B, C) + #draw_SVG_text(0, 125, textvalue, 'san-serif', 4, gly) + + for i in range(len(D)): + D_rad[i]= D[i]*pi/180 + DP='' + for ii in range(len(Time)): + T[ii]=(Time[ii]-12)*15 + T_rad[ii]=T[ii]*pi/180 + AzSun = atan(sin(T_rad[ii])/(sin(L)*cos(T_rad[ii]) - tan(D_rad[i])*cos(L))) + AltSun = asin(sin(D_rad[i])*sin(L) + cos(D_rad[i])*cos(L)*cos(T_rad[ii])) + + if T[ii] < 0: + if AzSun > 0: + AzSun=AzSun+pi + else: + AzSun = AzSun+2*pi + else: + if AzSun >= 0: + AzSun=AzSun + else: + AzSun = AzSun+pi + + #Text + #textvalue='AzSun: %s; AltSun: %s; T: %s' % (round(AzSun*180/pi,2), round(AltSun*180/pi,2), Time[ii]) + #draw_SVG_text(200, 220+5*ii+100*i, textvalue, 'san-serif', 4, gly) + + X0= -cos(AltSun)*sin(AzSun) + Y0= -cos(AltSun)*cos(AzSun) + Z0= sin(AltSun) + + X1=X0*cos(W)-Y0*sin(W) + Y1=X0*sin(W)+Y0*cos(W) + Z1=Z0 + + X2=X1 + Y2=Y1*cos(R)-Z1*sin(R) + Z2=Y1*sin(R)+Z1*cos(R) + + X3=so.gnom*X2/Y2 + Z3=-so.gnom*Z2/Y2 + p1= X0*A+Y0*B+Z0*C + + Xe = X3 - Xf + Ze = Z3 + Zf + + if p1 >0: + DP = DP +' '+str(Xe)+', '+str(Ze) + + # draw polyline + draw_SVG_polyline(DP, 0.5,'#FF0000', 'none', 'Zodiac line '+str(i+1), loz) + +# --------- Time Line ---------------------------------------------------------------------- + ALFA= atan(widthgrid/(2*heightgrid)) # Line for help + + for i in range(len(Time)): + T[i]=(Time[i]-12)*15 + T_rad[i]=T[i]*pi/180 + TL='' + + D = [-23.44, -20.15, -11.47, 0.0001, 11.47, 20.15, 23.44] + for ii in range(len(D)): + D_rad[ii]= D[ii]*pi/180 + TL= '0, 0' + + AzSun = atan(sin(T_rad[i])/(sin(L)*cos(T_rad[i]) - tan(D_rad[ii])*cos(L))) + AltSun = asin(sin(D_rad[ii])*sin(L) + cos(D_rad[ii])*cos(L)*cos(T_rad[i])) + + if T[i] < 0: + if AzSun > 0: + AzSun=AzSun+pi + else: + AzSun = AzSun+2*pi + else: + if AzSun >= 0: + AzSun=AzSun + else: + AzSun = AzSun+pi + + X0= -cos(AltSun)*sin(AzSun) + Y0= -cos(AltSun)*cos(AzSun) + Z0= sin(AltSun) + + X1=X0*cos(W)-Y0*sin(W) + Y1=X0*sin(W)+Y0*cos(W) + Z1=Z0 + + X2=X1 + Y2=Y1*cos(R)-Z1*sin(R) + Z2=Y1*sin(R)+Z1*cos(R) + + X3=so.gnom*X2/Y2 + Z3=so.gnom*Z2/Y2 + + Xe = X3 - Xf + Ze = -Z3 + Zf + + if Ze == 0: + Ze = 0.0001 + + SG = atan(Xe/Ze) + #Xe = so.gnom /((cos(R)/tan(AzSun-W))+(sin(R)*tan(AltSun)/sin(AzSun-W))) - Xf + #Ze = -so.gnom *((tan(R)-(tan(AltSun)/cos(AzSun-W)))/(1+(tan(R)*tan(AltSun))/cos(AzSun-W))) + Zf + p1= X0*A+Y0*B+Z0*C + + if p1 >=0: + #if SG <= pi and SG >=-pi: + TL = TL +' '+str(Xe)+', '+str(Ze) + else: + Xe=-Xe + Ze=-Ze + TL = TL +' '+str(Xe)+', '+str(Ze) + + if T[i] < 0: + if SG >= 0: + SG = SG-pi + else: + SG = SG + else: + if SG >= 0: + SG = SG + else: + SG = SG+pi + + if SG >= (-pi) and SG < -ALFA: + draw_SVG_text(-widthgrid/2+5, -widthgrid/(2*tan(SG)), str(Time[i]), 'Algerian', 8, vhl) + + if SG > (-ALFA) and SG < ALFA: + draw_SVG_text(heightgrid*tan(SG), heightgrid-5, str(Time[i]), 'Algerian',8, vhl) + + if SG > ALFA and SG <= (pi): + if Time[i] == 12: #workaround because y coordinate gets extreme values like "-816561967659768448.0000" + draw_SVG_text(0, heightgrid-5, str(Time[i]), 'Algerian',8, vhl) + else: + draw_SVG_text(widthgrid/2-8, widthgrid/(2*tan(SG)), str(Time[i]), 'Algerian',8, vhl) + #Text + #textvalue='Xe: %s; Ze: %s; T: %s; SG: %s' % (round(Xe,2), round(Ze,2), Time[i], SG*180/pi) + #draw_SVG_text(0, 220+5*i, textvalue, 'san-serif', 4, gly) + + # draw polyline + draw_SVG_polyline(TL, 0.5,'#008000', 'none', 'Time line '+str(Time[i]), loz) + +if __name__ == '__main__': + sundialDeclining().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/svg2shenzhen/svg2shenzhen/bitmap2component.exe b/extensions/fablabchemnitz/svg2shenzhen/svg2shenzhen/bitmap2component.exe new file mode 100755 index 00000000..287edc67 Binary files /dev/null and b/extensions/fablabchemnitz/svg2shenzhen/svg2shenzhen/bitmap2component.exe differ diff --git a/extensions/fablabchemnitz/svg2shenzhen/svg2shenzhen/bitmap2component_linux64 b/extensions/fablabchemnitz/svg2shenzhen/svg2shenzhen/bitmap2component_linux64 new file mode 100755 index 00000000..57eca0d6 Binary files /dev/null and b/extensions/fablabchemnitz/svg2shenzhen/svg2shenzhen/bitmap2component_linux64 differ diff --git a/extensions/fablabchemnitz/svg2shenzhen/svg2shenzhen/bitmap2component_osx b/extensions/fablabchemnitz/svg2shenzhen/svg2shenzhen/bitmap2component_osx new file mode 100755 index 00000000..569806f8 Binary files /dev/null and b/extensions/fablabchemnitz/svg2shenzhen/svg2shenzhen/bitmap2component_osx differ diff --git a/extensions/fablabchemnitz/svg2shenzhen/svg2shenzhen/export.py b/extensions/fablabchemnitz/svg2shenzhen/svg2shenzhen/export.py new file mode 100644 index 00000000..f2247744 --- /dev/null +++ b/extensions/fablabchemnitz/svg2shenzhen/svg2shenzhen/export.py @@ -0,0 +1,750 @@ +#! /usr/bin/env python + +import inkex +import os +import subprocess +import tempfile +import shutil +import copy +import platform +import webbrowser +import hashlib +import xml.etree.ElementTree as ET +import pickle +from copy import deepcopy +from inkex import bezier +from inkex.transforms import Transform +from pathlib import Path + + +homePath = str() +homePath = Path.home() + +EXPORT_PNG_MAX_PROCESSES = 3 +EXPORT_KICAD_MAX_PROCESSES = 2 + +PCB_HEADER = ''' +(kicad_pcb (version 4) (host pcbnew 4.0.7) + + (general + (links 0) + (no_connects 0) + (area 77.052499 41.877835 92.193313 53.630501) + (thickness 1.6) + (drawings 8) + (tracks 0) + (zones 0) + (modules 1) + (nets 1) + ) + + (page A4) + (layers + (0 F.Cu signal) + (31 B.Cu signal) + (32 B.Adhes user) + (33 F.Adhes user) + (34 B.Paste user) + (35 F.Paste user) + (36 B.SilkS user) + (37 F.SilkS user) + (38 B.Mask user) + (39 F.Mask user) + (40 Dwgs.User user) + (41 Cmts.User user) + (42 Eco1.User user) + (43 Eco2.User user) + (44 Edge.Cuts user) + (45 Margin user) + (46 B.CrtYd user) + (47 F.CrtYd user) + (48 B.Fab user) + (49 F.Fab user) + ) + + (setup + (last_trace_width 0.25) + (trace_clearance 0.2) + (zone_clearance 0.508) + (zone_45_only no) + (trace_min 0.2) + (segment_width 0.2) + (edge_width 0.15) + (via_size 0.6) + (via_drill 0.4) + (via_min_size 0.4) + (via_min_drill 0.3) + (uvia_size 0.3) + (uvia_drill 0.1) + (uvias_allowed no) + (uvia_min_size 0.2) + (uvia_min_drill 0.1) + (pcb_text_width 0.3) + (pcb_text_size 1.5 1.5) + (mod_edge_width 0.15) + (mod_text_size 1 1) + (mod_text_width 0.15) + (pad_size 1.524 1.524) + (pad_drill 0.762) + (pad_to_mask_clearance 0.2) + (aux_axis_origin 0 0) + (visible_elements FFFFFF7F) + (pcbplotparams + (layerselection 0x010f0_80000001) + (usegerberextensions false) + (excludeedgelayer true) + (linewidth 0.100000) + (plotframeref false) + (viasonmask false) + (mode 1) + (useauxorigin false) + (hpglpennumber 1) + (hpglpenspeed 20) + (hpglpendiameter 15) + (hpglpenoverlay 2) + (psnegative false) + (psa4output false) + (plotreference true) + (plotvalue true) + (plotinvisibletext false) + (padsonsilk false) + (subtractmaskfromsilk false) + (outputformat 1) + (mirror false) + (drillshape 1) + (scaleselection 1) + (outputdirectory gerbers/)) + ) + + (net 0 "") + + (net_class Default "This is the default net class." + (clearance 0.2) + (trace_width 0.25) + (via_dia 0.6) + (via_drill 0.4) + (uvia_dia 0.3) + (uvia_drill 0.1) + ) +''' + +PCB_FOOTER = ''' +) +''' + +PCB_LIB_TABLE = ''' +(fp_lib_table + (lib (name "{name}")(type KiCad)(uri "$(KIPRJMOD)/{folder}")(options "")(descr "")) +) +''' + +PCB_PROJECT_FILE = ''' +update=2018 March 15, Thursday 14:41:19 +version=1 +last_client=kicad +[pcbnew] +version=1 +LastNetListRead= +UseCmpFile=1 +PadDrill=0.600000000000 +PadDrillOvalY=0.600000000000 +PadSizeH=1.500000000000 +PadSizeV=1.500000000000 +PcbTextSizeV=1.500000000000 +PcbTextSizeH=1.500000000000 +PcbTextThickness=0.300000000000 +ModuleTextSizeV=1.000000000000 +ModuleTextSizeH=1.000000000000 +ModuleTextSizeThickness=0.150000000000 +SolderMaskClearance=0.000000000000 +SolderMaskMinWidth=0.000000000000 +DrawSegmentWidth=0.200000000000 +BoardOutlineThickness=0.100000000000 +ModuleOutlineThickness=0.150000000000 +[cvpcb] +version=1 +NetIExt=net +[general] +version=1 +[eeschema] +version=1 +LibDir= +[eeschema/libraries] +LibName1=power +LibName2=device +LibName3=transistors +LibName4=conn +LibName5=linear +LibName6=regul +LibName7=74xx +LibName8=cmos4000 +LibName9=adc-dac +LibName10=memory +LibName11=xilinx +LibName12=microcontrollers +LibName13=dsp +LibName14=microchip +LibName15=analog_switches +LibName16=motorola +LibName17=texas +LibName18=intel +LibName19=audio +LibName20=interface +LibName21=digital-audio +LibName22=philips +LibName23=display +LibName24=cypress +LibName25=siliconi +LibName26=opto +LibName27=atmel +LibName28=contrib +LibName29=valves +''' + +MODULE_INVIS_REF_HEADER = ''' +(fp_text reference Ref** (at 0 0) (layer F.SilkS) hide +(effects (font (size 1.27 1.27) (thickness 0.15))) +) +(fp_text value Val** (at 0 0) (layer F.SilkS) hide +(effects (font (size 1.27 1.27) (thickness 0.15))) +) +''' + +IDENTITY_MATRIX = [[1.0,0.0,0.0],[0.0,1.0,0.0]] + + +LIBRARY_TABLE_FILE = "fp-lib-table" +EXPORT_IMAGE_FOLDER = "images" +EXPORT_CACHE_FOLDER = ".svg2shenzhen-cache" + + +class Svg2ShenzhenExport(inkex.Effect): + def __init__(self): + """init the effect library and get options from gui""" + inkex.Effect.__init__(self) + self.doc_width = 0 + self.doc_height = 0 + + self.bb_width_center = 0 + self.bb_height_center = 0 + self.bb_scaling_w = 0 + self.bb_scaling_h = 0 + + self.layer_map = { + #'inkscape-name' : 'kicad-name', + 'F.Cu' : 'F.Cu', + 'B.Cu' : 'B.Cu', + 'B.Adhes' : 'B.Adhes', + 'F.Adhes' : 'F.Adhes', + 'B.Paste' : 'B.Paste', + 'F.Paste' : 'F.Paste', + 'B.SilkS' : 'B.SilkS', + 'F.SilkS' : 'F.SilkS', + 'B.Mask' : 'B.Mask', + 'F.Mask' : 'F.Mask', + 'Dwgs.User' : 'Dwgs.User', + 'Cmts.User' : 'Cmts.User', + 'Eco1.User' : 'Eco1.User', + 'Eco2.User' : 'Eco2.User', + 'Margin' : 'Margin', + 'B.CrtYd' : 'B.CrtYd', + 'F.CrtYd' : 'F.CrtYd', + 'B.Fab' : 'B.Fab', + 'F.Fab' : 'F.Fab', + # The following layers are here for backward compatibility: + 'B.Silk' : 'B.SilkS', + 'F.Silk' : 'F.SilkS', + # 'Edge.Cuts' : "Edge.Cuts" + } + + def add_arguments(self, pars): + pars.add_argument("--path", default=homePath) + pars.add_argument('-f', '--filetype', default='jpeg', help='Exported file type') + pars.add_argument("--crop", type=inkex.Boolean, default=False) + pars.add_argument("--dpi", type=int, default=600) + pars.add_argument("--threshold", type=float, default=128.0) + pars.add_argument("--openfactory", type=inkex.Boolean, default="true") + pars.add_argument("--openkicad", type=inkex.Boolean, default="true") + pars.add_argument("--autoflatten", type=inkex.Boolean, default="true") + pars.add_argument("--debug", type=inkex.Boolean, default=False) + + def coordToKicad(self,XYCoord): + return [ + (XYCoord[0]-self.bb_width_center)/self.bb_scaling_w, + (XYCoord[1]-self.bb_height_center)/self.bb_scaling_h, + ] + + def setInkscapeScaling(self): + root = self.document.getroot() + height = float(root.get('height').replace("mm", "")) + width = float(root.get('width').replace("mm", "")) + + self.doc_width = width + self.doc_height = height + + viewbox = root.attrib['viewBox'].split(' ') + viewbox_h = float(viewbox[-1]) + viewbox_w = float(viewbox[-2]) + + self.bb_width_center = viewbox_w/2 + self.bb_height_center = viewbox_h/2 + self.bb_scaling_w = viewbox_w/width + self.bb_scaling_h = viewbox_h/height + + def setDocumentSquare(self): + root = self.document.getroot() + height = float(root.attrib['height'].replace("mm", "")) + width = float(root.attrib['width'].replace("mm", "")) + + if (width > height): + root.attrib['height'] = str(width) + "mm" + root.attrib['viewBox'] = "0 0 %f %f" % (width, width) + else: + root.attrib['width'] = str(height) + "mm" + root.attrib['viewBox'] = "0 0 %f %f" % (height, height) + + def findLayer(self, layerName, contains=False): + svg_layers = self.document.xpath('//svg:g[@inkscape:groupmode="layer"]', namespaces=inkex.NSS) + for layer in svg_layers: + label_attrib_name = "{%s}label" % layer.nsmap['inkscape'] + if label_attrib_name not in layer.attrib: + continue + if ((layer.attrib[label_attrib_name] == layerName) and (contains == False)): + return layer + elif ((layerName in layer.attrib[label_attrib_name]) and (contains == True)): + return layer + + return False + + def effect(self): + # self.setDocumentSquare() + self.setInkscapeScaling() + self.processAutoMasks() + self.processExportLayer() + if (self.options.openfactory): + webbrowser.open("https://www.pcbway.com/setinvite.aspx?inviteid=54747", new = 2) + + def processAutoMasks(self): + self.processAutoMaskFromTo("F.Cu", "F.Mask-auto") + self.processAutoMaskFromTo("B.Cu", "B.Mask-auto") + + def processAutoMaskFromTo(self, from_layer, to_layer): + copper_layer = self.findLayer(from_layer, False) + cpmask_layer = self.findLayer(to_layer, True) + # copper_layer = cpmask_layer + if (copper_layer != False and cpmask_layer != False): + for node in cpmask_layer.xpath("*", namespaces=inkex.NSS): + cpmask_layer.remove(node) + for node in copper_layer.xpath("*", namespaces=inkex.NSS): + cpmask_layer.append(deepcopy(node)) + + + def processExportLayer(self): + options = self.options + + if os.path.dirname(os.getcwd()) == options.path: + inkex.errormsg('EXPORT ERROR! Please Select A Directory To Export To!') + exit() + else: + output_path = os.path.expanduser(options.path) + + curfile = self.options.input_file + layers = self.get_layers(curfile) + name = self.get_name() + kicad_pcb_file = "{}.kicad_pcb".format(name) + library_folder = "{}.pretty".format(name) + kicad_project_file = "{}.pro".format(name) + kicad_mod_file = "{}.kicad_mod".format(name) + kicad_mod_files = [] + + cache_folder_path = os.path.join(output_path, EXPORT_CACHE_FOLDER) + + if options.filetype == "png": + image_folder_path = output_path + else: + image_folder_path = os.path.join(cache_folder_path, EXPORT_IMAGE_FOLDER) + + if options.filetype == "kicad_pcb": + library_folder_path = os.path.join(output_path, library_folder) + else: + library_folder_path = os.path.join(cache_folder_path, library_folder) + + if not os.path.exists(output_path): + os.makedirs(output_path) + if not os.path.exists(library_folder_path): + os.makedirs(library_folder_path) + if not os.path.exists(image_folder_path): + os.makedirs(image_folder_path) + if not os.path.exists(cache_folder_path): + os.makedirs(cache_folder_path) + + kicad_pcb_path = os.path.join(output_path, kicad_pcb_file ) + kicad_lib_path = os.path.join(output_path, LIBRARY_TABLE_FILE) + kicad_pro_path = os.path.join(output_path, kicad_project_file ) + kicad_mod_path = os.path.join(output_path, kicad_mod_file) + + options_path = os.path.join(cache_folder_path, 'export_options.pickle') + + curr_options = { + 'dpi': options.dpi, + 'path': options.path, + 'crop': options.crop, + 'filetype': options.filetype, + 'threshold': options.threshold + } + + if os.path.exists(options_path): + with open(options_path, 'rb') as f: + prev_options = pickle.load(f) + ignore_hashes = prev_options != curr_options + else: + ignore_hashes = True + + with open(options_path, 'wb') as f: + pickle.dump(curr_options, f) + + layer_arguments = [] + temp_svg_paths = [] + for (layer_id, layer_label, layer_type) in layers: + if layer_type == "fixed": + continue + show_layer_ids = [layer[0] for layer in layers if layer[2] == "fixed" or layer[0] == layer_id] + invert = "true" + + if ("-auto" in layer_label): + layer_label = layer_label.replace("-auto", "") + + if ("-invert" in layer_label): + layer_label = layer_label.replace("-invert", "") + invert = "false" + hash_sum_path = os.path.join(cache_folder_path, '{}-{}-{}-{}.hash'.format(layer_id, layer_label, layer_type, invert)) + + prev_hash_sum = None + if os.path.exists(hash_sum_path): + with open(hash_sum_path, 'r') as f: + prev_hash_sum = f.read() + + # generate unique filename each layer + temp_name = next(tempfile._get_candidate_names()) + ".svg" + layer_dest_svg_path = os.path.join(cache_folder_path, temp_name) + hash_sum = self.export_layers(layer_dest_svg_path, show_layer_ids) + temp_svg_paths.append(layer_dest_svg_path) + + layer_dest_png_path = os.path.join(image_folder_path, "%s_%s.png" % (layer_label, layer_id)) + layer_dest_kicad_path = os.path.join(library_folder_path, "%s_%s.kicad_mod" % (layer_label, layer_id)) + kicad_mod_files.append(layer_dest_kicad_path) + + + if ignore_hashes or hash_sum != prev_hash_sum or not os.path.exists(layer_dest_kicad_path): + with open(hash_sum_path, 'w') as f: + f.write(hash_sum) + layer_arguments.append((layer_dest_svg_path, layer_dest_png_path, layer_dest_kicad_path, layer_label, invert)) + + + for i in range(0, len(layer_arguments), EXPORT_PNG_MAX_PROCESSES): + processes = [] + for layer_dest_svg_path, layer_dest_png_path, _, _, _ in layer_arguments[i:i+EXPORT_PNG_MAX_PROCESSES]: + #export layer to png + p = self.exportToPng(layer_dest_svg_path, layer_dest_png_path) + processes.append(p) + for p in processes: + p.communicate() + + for layer_dest_svg_path in temp_svg_paths: + os.remove(layer_dest_svg_path) + + if options.filetype == "kicad_pcb" or options.filetype == "kicad_module": + for i in range(0, len(layer_arguments), EXPORT_KICAD_MAX_PROCESSES): + processes = [] + for _, layer_dest_png_path, layer_dest_kicad_path, layer_label, invert in layer_arguments[i:i+EXPORT_KICAD_MAX_PROCESSES]: + #export layer png to kicad + p = self.exportToKicad(layer_dest_png_path, layer_dest_kicad_path, layer_label, invert) + processes.append(p) + for p in processes: + p.communicate() + else: + return + + kicad_edgecut_string = self.exportEdgeCut(kicad_mod = options.filetype == "kicad_module") + kicad_drill_string = self.exportDrill(kicad_mod = options.filetype == "kicad_module") + + if options.filetype == "kicad_pcb": + kicad_modules_string = "" + for kicad_file in kicad_mod_files: + with open(kicad_file, 'r') as f: + kicad_modules_string += f.read() + + with open(kicad_pcb_path, 'w') as f: + f.write(PCB_HEADER) + f.write(kicad_modules_string) + f.write(kicad_edgecut_string) + f.write(kicad_drill_string) + f.write(PCB_FOOTER) + + with open(kicad_lib_path, 'w') as f: + f.write(PCB_LIB_TABLE.format(name=name, folder=library_folder)) + + with open(kicad_pro_path, 'w') as f: + f.write(PCB_PROJECT_FILE) + + if (options.openkicad): + self.openKicad(kicad_pcb_path).communicate() + + elif options.filetype == "kicad_module": + kicad_modules_string = '(module "{}" (layer F.Cu)'.format(name) + kicad_modules_string += MODULE_INVIS_REF_HEADER + for kicad_file in kicad_mod_files: + with open(kicad_file, 'r') as f: + mod = f.readlines()[8:-1] + kicad_modules_string += "".join(mod) + kicad_modules_string += kicad_edgecut_string + kicad_modules_string += kicad_drill_string + kicad_modules_string += ")" + with open(kicad_mod_path, 'w') as f: + f.write(kicad_modules_string) + + + def export_layers(self, dest, show): + """ + Export selected layers of SVG to the file `dest`. + :arg str dest: path to export SVG file. + :arg list hide: layers to hide. each element is a string. + :arg list show: layers to show. each element is a string. + """ + doc = copy.deepcopy(self.document) + root = doc.getroot() + for layer in doc.xpath('//svg:g[@inkscape:groupmode="layer"]', namespaces=inkex.NSS): + id = layer.attrib["id"] + if id in show: + layer.attrib['style'] = 'display:inline' + else: + root.remove(layer) + + # remove the namedview for the hash as it changes based on user zoom/scroll + namedview = doc.find('sodipodi:namedview', namespaces=inkex.NSS) + root.remove(namedview) + + doc.write(dest) + + # returns a hash of the exported layer contents which can be used to + # detect changes + return hashlib.md5(ET.tostring(root)).hexdigest() + + def get_name(self): + root = self.document.getroot() + docname = root.get('{http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd}docname') + if docname is None: + return 'drawing' + return os.path.splitext(docname)[0] + + def get_layers(self, src): + svg_layers = self.document.xpath('//svg:g[@inkscape:groupmode="layer"]', namespaces=inkex.NSS) + layers = [] + + for layer in svg_layers: + label_attrib_name = "{%s}label" % layer.nsmap['inkscape'] + if label_attrib_name not in layer.attrib: + continue + + layer_id = layer.attrib["id"] + layer_label = layer.attrib[label_attrib_name] + + layer_label_name = layer_label.replace("-invert", "") + layer_label_name = layer_label_name.replace("-auto", "") + + if layer_label_name in self.layer_map.keys(): + layer_type = "export" + layer_label = layer_label + elif layer_label.lower().startswith("[fixed] "): + layer_type = "fixed" + layer_label = layer_label[8:] + else: + continue + + layers.append([layer_id, layer_label, layer_type]) + + return layers + + def openKicad(self, kicad_file_path): + platform_system = platform.system() + + if (platform_system == 'Darwin'): + command = "open %s" % (kicad_file_path) + elif (platform_system == 'Linux'): + command = "xdg-open %s" % (kicad_file_path) + else: + command = "start %s" % (kicad_file_path) + + return subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + + + + def exportToKicad(self, png_path, output_path, layer_type, invert = "true"): + plugin_path = os.path.dirname(os.path.abspath(__file__)) + + platform_system = platform.system() + + if (platform_system == 'Darwin'): + bitmap2component_exe = os.path.join(plugin_path, 'bitmap2component_osx') + elif (platform_system == 'Linux'): + bitmap2component_exe = os.path.join(plugin_path, 'bitmap2component_linux64') + else: + bitmap2component_exe = os.path.join(plugin_path, 'bitmap2component.exe') + + layer_name = self.layer_map[layer_type] + command = "\"%s\" \"%s\" \"%s\" %s %s %s %s" % (bitmap2component_exe, png_path, output_path, layer_name, invert , str(int(self.options.dpi)) , str(int(self.options.threshold))) + if (self.options.debug): + inkex.utils.debug(command) + return subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + + + def exportToPng(self, svg_path, output_path): + area_param = '-D' if self.options.crop else '-C' + command = "inkscape %s -d %s -o \"%s\" \"%s\"" % (area_param, self.options.dpi, output_path, svg_path) + if (self.options.debug): + inkex.utils.debug(command) + return subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + + + def exportEdgeCut(self, kicad_mod=False): + x0 = 0 + y0 = 0 + mirror = 1.0 + + line_type = "fp_line" if kicad_mod else "gr_line" + + kicad_edgecut_string = "" + + i = 0 + layerPath = '//svg:g[@inkscape:groupmode="layer"]' + + if (self.options.autoflatten): + self.flatten_bezier() + + for layer in self.document.getroot().xpath(layerPath, namespaces=inkex.NSS): + i += 1 + + label_attrib_name = "{%s}label" % layer.nsmap['inkscape'] + if label_attrib_name not in layer.attrib: + continue + + layer_name = (layer.attrib[label_attrib_name]) + + if layer_name != "Edge.Cuts": + continue + + layer_trans = layer.get('transform') + if layer_trans: + layer_m = Transform(layer_trans).matrix + else: + layer_m = IDENTITY_MATRIX + + nodePath = ('//svg:g[@inkscape:groupmode="layer"][%d]/descendant::svg:path') % i + for node in self.document.getroot().xpath(nodePath, namespaces=inkex.NSS): + p = node.path.to_arrays() + + points = [] + if p: + #sanity check + if p[0][0] == 'M': + t = node.get('transform') + if t: + trans = (Transform(layer_m)*Transform(t)).matrix + else: + trans = layer_m + + for path in p: + if path[0] != "Z": + x = (path[1][0]) + y = (path[1][1]) + xy = Transform(trans).apply_to_point([x,y]) + points.append(self.coordToKicad([(xy[0]-x0), xy[1]*mirror-y0])) + + points_count = len(points) + points.append(points[0]) + + for x in range (0, points_count): + kicad_edgecut_string = kicad_edgecut_string + ("(%s (start %f %f) (end %f %f) (layer Edge.Cuts) (width 0.1))\n" % (line_type, points[x][0],points[x][1],points[x+1][0],points[x+1][1])) + + return kicad_edgecut_string + + def exportDrill(self, kicad_mod=False): + self.setInkscapeScaling() + + kicad_drill_string = "" + + i = 0 + + if kicad_mod: + pad_template = "(pad {n} thru_hole circle (at {x} {y}) (size {d} {d}) (drill {d}) (layers *.Cu *.Mask))\n" + else: + pad_template = """ + (module Wire_Pads:SolderWirePad_single_0-8mmDrill (layer F.Cu) (tedit 0) (tstamp 5ABD66D0) + (at {x} {y}) + (pad {n} thru_hole circle (at 0 0) (size {d} {d}) (drill {d}) (layers *.Cu *.Mask)) + ) + """ + + layerPath = '//svg:g[@inkscape:groupmode="layer"][@inkscape:label="Drill"]' + + for layer in self.document.getroot().xpath(layerPath, namespaces=inkex.NSS): + + layer_trans = layer.get('transform') + if layer_trans: + layer_m = Transform(layer_trans).matrix + else: + layer_m = IDENTITY_MATRIX + + nodePath = 'descendant::svg:circle' + + count = 0 + for node in layer.xpath(nodePath, namespaces=inkex.NSS): + count = count + 1 + cx = float(node.get('cx')) + cy = float(node.get('cy')) + + radius = float(node.get('r')) + drill_size = radius * 2 + + t = node.get('transform') + + if t: + m = Transform(t).matrix + trans = (Transform(layer_m)*Transform(m)).matrix + else: + trans = layer_m + + pt = Transform(trans).apply_to_point([cx, cy]) + padCoord = self.coordToKicad(pt) + + kicad_drill_string += pad_template.format(x=padCoord[0], y=padCoord[1], n=count, d=drill_size) + + return kicad_drill_string + + def flatten_bezier(self): + layerPath = '//svg:g[@inkscape:groupmode="layer"][@inkscape:label="Edge.Cuts"]' + for layer in self.document.getroot().xpath(layerPath, namespaces=inkex.NSS): + nodePath = 'descendant::svg:path' + for node in layer.xpath(nodePath, namespaces=inkex.NSS): + if node.tag == inkex.addNS('path','svg'): + d = node.get('d') + p = inkex.Path(d).to_superpath() + bezier.cspsubdiv(p, 0.01) + np = [] + for sp in p: + first = True + for csp in sp: + cmd = 'L' + if first: + cmd = 'M' + first = False + np.append([cmd, [csp[1][0], csp[1][1]]]) + node.set('d', str(inkex.Path(np))) + +def _main(): + e = Svg2ShenzhenExport() + e.run() + exit() + +if __name__ == "__main__": + _main() \ No newline at end of file diff --git a/extensions/fablabchemnitz/svg2shenzhen/svg2shenzhen/prepare.py b/extensions/fablabchemnitz/svg2shenzhen/svg2shenzhen/prepare.py new file mode 100644 index 00000000..10d3d2ba --- /dev/null +++ b/extensions/fablabchemnitz/svg2shenzhen/svg2shenzhen/prepare.py @@ -0,0 +1,321 @@ +#! /usr/bin/env python + +import warnings +import sys +sys.path.append('/usr/share/inkscape/extensions') +import inkex +import os +import subprocess +import tempfile +import shutil +import copy + +from simplestyle import * +from copy import deepcopy +from io import BytesIO +from lxml import etree + +identity_m = [[1.0,0.0,0.0],[0.0,1.0,0.0]] + +kicadLayers = { + "layerDrill" : "Drill", + "layerDwgs_user" : "Dwgs.User", + "layerF_Silks" : "F.SilkS", + "layerF_Paste" : "F.Paste", + "layerF_mask" : "F.Mask", + "layerF_cu" : "F.Cu", + "layerB_silks" : "B.SilkS", + "layerB_paste" : "B.Paste", + "layerB_mask" : "B.Mask", + "layerB_cu" : "B.Cu", + "layerEdge_Cuts" : "Edge.Cuts", + "layerF_Adhes" : "F.Adhes", + "layerB_Adhes" : "B.Adhes", + "layerCmts_User" : "Cmts.User", + "layerEco1_User" : "Eco1.User", + "layerEco2_User" : "Eco2.User", + "layerMargin" : "Margin", + "layerB_CrtYd" : "B.CrtYd", + "layerF_CrtYd" : "F.CrtYd", + "layerB_Fab" : "B.Fab", + "layerF_Fab" : "F.Fab" +} +kicadLayersSelected = {} + +class Svg2ShenzhenPrepare(inkex.Effect): + def __init__(self): + """init the effect library and get options from gui""" + inkex.Effect.__init__(self) + + self.bb_width_center = 0 + self.bb_height_center = 0 + self.bb_scaling_h = 0 + self.bb_scaling_w = 0 + + + def add_arguments(self, pars): + pars.add_argument("--docwidth", type=float, default=0.0) + pars.add_argument("--docheight", type=float, default=0.0) + pars.add_argument("--name") + pars.add_argument("--docGrid") + # Prepare the Arguments for all of the Layers + for key, value in kicadLayers.items(): + argumentKey = "--" + key + pars.add_argument(argumentKey) + + + def coordToKicad(self,XYCoord): + return [ + (XYCoord[0]-self.bb_width_center)/self.bb_scaling_w, + (XYCoord[1]-self.bb_height_center)/self.bb_scaling_h, + ] + + def setInkscapeScaling(self): + + root = self.document.getroot() + height = float(root.get('height').replace("mm", "")) + width = float(root.get('width').replace("mm", "")) + root.attrib['viewBox'] = "0 0 " + str(width) + " " + str(height) + viewbox = root.attrib['viewBox'].split(' ') + viewbox_h = float(viewbox[-1]) + viewbox_w = float(viewbox[-2]) + + self.doc_width = width + self.doc_height = height + self.bb_width_center = viewbox_w/2 + self.bb_height_center = viewbox_h/2 + self.bb_scaling_h = viewbox_h/height + self.bb_scaling_w = viewbox_w/width + + + def setDocumentSquare(self, width, height): + root = self.document.getroot() + root.attrib['width'] = str(width) + "mm" + root.attrib['height'] = str(height) + "mm" + root.attrib['viewBox'] = "0 0 %f %f" % (width, width) + + + def createLayer(self, layer_name): + svg = self.document.xpath('//svg:svg',namespaces=inkex.NSS)[0] + layer = etree.SubElement(svg, 'g') + layer.set(inkex.addNS('label', 'inkscape'), '%s' % layer_name) + layer.set(inkex.addNS('groupmode', 'inkscape'), 'layer') + return layer + + def createWhitebg(self): + rect = etree.Element(inkex.addNS('rect','svg')) + rect.set('x', "0") + rect.set('y', "0") + rect.set('width', str(self.doc_width/self.bb_scaling_w)) + rect.set('height', str(self.doc_height/self.bb_scaling_h)) + style = {'fill' : '#FFFFFF', 'fill-opacity' : '1', 'stroke': 'none'} + rect.set('style', str(inkex.Style(style))) + return rect + + def findLayer(self, layerName): + svg_layers = self.document.xpath('//svg:g[@inkscape:groupmode="layer"]', namespaces=inkex.NSS) + for layer in svg_layers: + label_attrib_name = "{%s}label" % layer.nsmap['inkscape'] + if label_attrib_name not in layer.attrib: + continue + if (layer.attrib[label_attrib_name] == layerName): + return layer + return False + + def addStamp(self,layer, textStr): + + # Create text element + text = etree.Element(inkex.addNS('text','svg')) + text.text = str(textStr) + + # Set text position to center of document. + text.set('x', str(self.doc_width / 2)) + text.set('y', str(self.doc_height / 2)) + + # Center text horizontally with CSS style. + style = {'text-align' : 'center', 'text-anchor': 'middle'} + text.set('style', str(inkex.Style(style))) + + # Connect elements together. + layer.append(text) + + + def prepareDocument(self, options): + svg_layers = self.document.xpath('//svg:g[@inkscape:groupmode="layer"]', namespaces=inkex.NSS) + layers = [] + + root = self.document.getroot() + + #remove "Layer 1" + for layer in svg_layers: + label_attrib_name = "{%s}label" % layer.nsmap['inkscape'] + if label_attrib_name not in layer.attrib: + continue + if (layer.attrib[label_attrib_name] == "Layer 1"): + root.remove(layer) + + for layer in svg_layers: + label_attrib_name = "{%s}label" % layer.nsmap['inkscape'] + if label_attrib_name not in layer.attrib: + continue + layer_label = layer.attrib[label_attrib_name] + layers.append(layer_label) + + if ("[fixed] BG" not in layers): + white_layer = self.createLayer("[fixed] BG") + white_layer.set(inkex.addNS('insensitive', 'sodipodi'), 'true') + rect = self.createWhitebg() + white_layer.append(rect) + + # Create the Selected Layers + kicadLayersArray = list(kicadLayers.items()); + + for key, value in reversed(kicadLayersArray): + disabledValue = '%s-disabled' % (value) + selectedValue = getattr(options, key) + if selectedValue == "true" and value not in layers and disabledValue not in layers: + self.createLayer(value) + + + def setDocumentGrid(self): + doc_view = self.document.xpath('//sodipodi:namedview',namespaces=inkex.NSS)[0] + doc_view.attrib['borderlayer'] = "true" + doc_view.attrib['showgrid'] = "true" + + grid = etree.Element(inkex.addNS('grid','inkscape')) + grid.set('spacingx', '2.54') + grid.set('spacingy', '2.54') + grid.set('empspacing', '1') + grid.set('type', 'xygrid') + grid.set('units', 'mm') + + doc_view.append(grid) + + def setDefaultUnits(self): + # just a convenience so that when you draw you will use mm by default + namedview = self.document.find('sodipodi:namedview', namespaces=inkex.NSS) + namedview.attrib['{http://www.inkscape.org/namespaces/inkscape}document-units'] = 'mm' + + def effect(self): + self.setDocumentSquare(self.options.docwidth, self.options.docheight) + self.setInkscapeScaling() + self.prepareDocument(self.options) + if self.options.docGrid == "true": + self.setDocumentGrid() + self.setDefaultUnits() + #warnings.warn(getattr(self.options, "layerF_Silk")) + + def prepareLogo(self, lyr): + logo_xml = """ + + + + + + + + + + + + + + + + + """ + logo_file_obj = BytesIO((logo_xml)) + new_obj = (etree.parse(logo_file_obj)).getroot() + # lyr = self.findLayer("F.Cu") + lyr.append(new_obj) + + + def export_layers(self, dest, show): + """ + Export selected layers of SVG to the file `dest`. + :arg str dest: path to export SVG file. + :arg list hide: layers to hide. each element is a string. + :arg list show: layers to show. each element is a string. + """ + doc = copy.deepcopy(self.document) + for layer in doc.xpath('//svg:g[@inkscape:groupmode="layer"]', namespaces=inkex.NSS): + layer.attrib['style'] = 'display:none' + id = layer.attrib["id"] + if id in show: + layer.attrib['style'] = 'display:inline' + + doc.write(dest) + + def get_layers(self, src): + svg_layers = self.document.xpath('//svg:g[@inkscape:groupmode="layer"]', namespaces=inkex.NSS) + layers = [] + + for layer in svg_layers: + label_attrib_name = "{%s}label" % layer.nsmap['inkscape'] + if label_attrib_name not in layer.attrib: + continue + + layer_id = layer.attrib["id"] + layer_label = layer.attrib[label_attrib_name] + + layer_label_name = layer_label + inkex.debug(layer_label_name) + + if layer_label_name in self.layer_map.iterkeys(): + layer_type = "export" + layer_label = layer_label_name + elif layer_label.lower().startswith("[fixed] "): + layer_type = "fixed" + layer_label = layer_label[8:] + else: + continue + + layers.append([layer_id, layer_label, layer_type]) + + return layers + + +def _main(): + e = Svg2ShenzhenPrepare() + e.run() + exit() + +if __name__ == "__main__": + _main() \ No newline at end of file diff --git a/extensions/fablabchemnitz/svg2shenzhen/svg2shenzhen_export.inx b/extensions/fablabchemnitz/svg2shenzhen/svg2shenzhen_export.inx new file mode 100644 index 00000000..a4b27aea --- /dev/null +++ b/extensions/fablabchemnitz/svg2shenzhen/svg2shenzhen_export.inx @@ -0,0 +1,29 @@ + + + Export Kicad + fablabchemnitz.de.svg2shenzhen_export + + ~/ + + + + + + 5 + 600 + true + false + true + false + + all + + + + + + + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/svg2shenzhen/svg2shenzhen_prepare.inx b/extensions/fablabchemnitz/svg2shenzhen/svg2shenzhen_prepare.inx new file mode 100644 index 00000000..fa03c683 --- /dev/null +++ b/extensions/fablabchemnitz/svg2shenzhen/svg2shenzhen_prepare.inx @@ -0,0 +1,19 @@ + + + Prepare Document + fablabchemnitz.de.svg2shenzhen_prepare + + 100 + 100 + + all + + + + + + + + diff --git a/extensions/fablabchemnitz/svgo_output/node.exe b/extensions/fablabchemnitz/svgo_output/node.exe new file mode 100644 index 00000000..a57ccd90 Binary files /dev/null and b/extensions/fablabchemnitz/svgo_output/node.exe differ diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/.bin/svgo b/extensions/fablabchemnitz/svgo_output/node_modules/.bin/svgo new file mode 100644 index 00000000..7cb09bc7 Binary files /dev/null and b/extensions/fablabchemnitz/svgo_output/node_modules/.bin/svgo differ diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/minimist/.travis.yml b/extensions/fablabchemnitz/svgo_output/node_modules/minimist/.travis.yml new file mode 100644 index 00000000..74c57bf1 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/minimist/.travis.yml @@ -0,0 +1,8 @@ +language: node_js +node_js: + - "0.8" + - "0.10" + - "0.12" + - "iojs" +before_install: + - npm install -g npm@~1.4.6 diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/minimist/LICENSE b/extensions/fablabchemnitz/svgo_output/node_modules/minimist/LICENSE new file mode 100644 index 00000000..ee27ba4b --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/minimist/LICENSE @@ -0,0 +1,18 @@ +This software is released under the MIT license: + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/minimist/example/parse.js b/extensions/fablabchemnitz/svgo_output/node_modules/minimist/example/parse.js new file mode 100644 index 00000000..abff3e8e --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/minimist/example/parse.js @@ -0,0 +1,2 @@ +var argv = require('../')(process.argv.slice(2)); +console.dir(argv); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/minimist/index.js b/extensions/fablabchemnitz/svgo_output/node_modules/minimist/index.js new file mode 100644 index 00000000..bf96360b --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/minimist/index.js @@ -0,0 +1,224 @@ +module.exports = function (args, opts) { + if (!opts) opts = {}; + + var flags = { bools : {}, strings : {}, unknownFn: null }; + + if (typeof opts['unknown'] === 'function') { + flags.unknownFn = opts['unknown']; + } + + if (typeof opts['boolean'] === 'boolean' && opts['boolean']) { + flags.allBools = true; + } else { + [].concat(opts['boolean']).filter(Boolean).forEach(function (key) { + flags.bools[key] = true; + }); + } + + var aliases = {}; + Object.keys(opts.alias || {}).forEach(function (key) { + aliases[key] = [].concat(opts.alias[key]); + aliases[key].forEach(function (x) { + aliases[x] = [key].concat(aliases[key].filter(function (y) { + return x !== y; + })); + }); + }); + + [].concat(opts.string).filter(Boolean).forEach(function (key) { + flags.strings[key] = true; + if (aliases[key]) { + flags.strings[aliases[key]] = true; + } + }); + + var defaults = opts['default'] || {}; + + var argv = { _ : [] }; + Object.keys(flags.bools).forEach(function (key) { + setArg(key, defaults[key] === undefined ? false : defaults[key]); + }); + + var notFlags = []; + + if (args.indexOf('--') !== -1) { + notFlags = args.slice(args.indexOf('--')+1); + args = args.slice(0, args.indexOf('--')); + } + + function argDefined(key, arg) { + return (flags.allBools && /^--[^=]+$/.test(arg)) || + flags.strings[key] || flags.bools[key] || aliases[key]; + } + + function setArg (key, val, arg) { + if (arg && flags.unknownFn && !argDefined(key, arg)) { + if (flags.unknownFn(arg) === false) return; + } + + var value = !flags.strings[key] && isNumber(val) + ? Number(val) : val + ; + setKey(argv, key.split('.'), value); + + (aliases[key] || []).forEach(function (x) { + setKey(argv, x.split('.'), value); + }); + } + + function setKey (obj, keys, value) { + var o = obj; + keys.slice(0,-1).forEach(function (key) { + if (o[key] === undefined) o[key] = {}; + o = o[key]; + }); + + var key = keys[keys.length - 1]; + if (o[key] === undefined || flags.bools[key] || typeof o[key] === 'boolean') { + o[key] = value; + } + else if (Array.isArray(o[key])) { + o[key].push(value); + } + else { + o[key] = [ o[key], value ]; + } + } + + for (var i = 0; i < args.length; i++) { + var arg = args[i]; + + if (/^--.+=/.test(arg)) { + // Using [\s\S] instead of . because js doesn't support the + // 'dotall' regex modifier. See: + // http://stackoverflow.com/a/1068308/13216 + var m = arg.match(/^--([^=]+)=([\s\S]*)$/); + var key = m[1]; + var value = m[2]; + if (flags.bools[key]) { + value = value !== 'false'; + } + setArg(key, value, arg); + } + else if (/^--no-.+/.test(arg)) { + var key = arg.match(/^--no-(.+)/)[1]; + setArg(key, false, arg); + } + else if (/^--.+/.test(arg)) { + var key = arg.match(/^--(.+)/)[1]; + var next = args[i + 1]; + if (next !== undefined && !/^-/.test(next) + && !flags.bools[key] + && !flags.allBools + && (aliases[key] ? !flags.bools[aliases[key]] : true)) { + setArg(key, next, arg); + i++; + } + else if (/^(true|false)$/.test(next)) { + setArg(key, next === 'true', arg); + i++; + } + else { + setArg(key, flags.strings[key] ? '' : true, arg); + } + } + else if (/^-[^-]+/.test(arg)) { + var letters = arg.slice(1,-1).split(''); + + var broken = false; + for (var j = 0; j < letters.length; j++) { + var next = arg.slice(j+2); + + if (next === '-') { + setArg(letters[j], next, arg) + continue; + } + + if (/[A-Za-z]/.test(letters[j]) + && /-?\d+(\.\d*)?(e-?\d+)?$/.test(next)) { + setArg(letters[j], next, arg); + broken = true; + break; + } + + if (letters[j+1] && letters[j+1].match(/\W/)) { + setArg(letters[j], arg.slice(j+2), arg); + broken = true; + break; + } + else { + setArg(letters[j], flags.strings[letters[j]] ? '' : true, arg); + } + } + + var key = arg.slice(-1)[0]; + if (!broken && key !== '-') { + if (args[i+1] && !/^(-|--)[^-]/.test(args[i+1]) + && !flags.bools[key] + && (aliases[key] ? !flags.bools[aliases[key]] : true)) { + setArg(key, args[i+1], arg); + i++; + } + else if (args[i+1] && /true|false/.test(args[i+1])) { + setArg(key, args[i+1] === 'true', arg); + i++; + } + else { + setArg(key, flags.strings[key] ? '' : true, arg); + } + } + } + else { + if (!flags.unknownFn || flags.unknownFn(arg) !== false) { + argv._.push( + flags.strings['_'] || !isNumber(arg) ? arg : Number(arg) + ); + } + if (opts.stopEarly) { + argv._.push.apply(argv._, args.slice(i + 1)); + break; + } + } + } + + Object.keys(defaults).forEach(function (key) { + if (!hasKey(argv, key.split('.'))) { + setKey(argv, key.split('.'), defaults[key]); + + (aliases[key] || []).forEach(function (x) { + setKey(argv, x.split('.'), defaults[key]); + }); + } + }); + + if (opts['--']) { + argv['--'] = new Array(); + notFlags.forEach(function(key) { + argv['--'].push(key); + }); + } + else { + notFlags.forEach(function(key) { + argv._.push(key); + }); + } + + return argv; +}; + +function hasKey (obj, keys) { + var o = obj; + keys.slice(0,-1).forEach(function (key) { + o = (o[key] || {}); + }); + + var key = keys[keys.length - 1]; + return key in o; +} + +function isNumber (x) { + if (typeof x === 'number') return true; + if (/^0x[0-9a-f]+$/i.test(x)) return true; + return /^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(x); +} + diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/minimist/package.json b/extensions/fablabchemnitz/svgo_output/node_modules/minimist/package.json new file mode 100644 index 00000000..5cf8061c --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/minimist/package.json @@ -0,0 +1,71 @@ +{ + "name": "minimist", + "version": "1.1.2", + "description": "parse argument options", + "main": "index.js", + "devDependencies": { + "covert": "^1.0.0", + "tap": "~0.4.0", + "tape": "^3.5.0" + }, + "scripts": { + "test": "tap test/*.js", + "coverage": "covert test/*.js" + }, + "testling": { + "files": "test/*.js", + "browsers": [ + "ie/6..latest", + "ff/5", + "firefox/latest", + "chrome/10", + "chrome/latest", + "safari/5.1", + "safari/latest", + "opera/12" + ] + }, + "repository": { + "type": "git", + "url": "git://github.com/substack/minimist.git" + }, + "homepage": "https://github.com/substack/minimist", + "keywords": [ + "argv", + "getopt", + "parser", + "optimist" + ], + "author": { + "name": "James Halliday", + "email": "mail@substack.net", + "url": "http://substack.net" + }, + "license": "MIT", + "gitHead": "a8e2fe153a22dad7a0da67fd6465fab4cfa63e37", + "bugs": { + "url": "https://github.com/substack/minimist/issues" + }, + "_id": "minimist@1.1.2", + "_shasum": "af960b80caf71b38236352af7fef10a8efceeae3", + "_from": "minimist@>=1.1.2 <2.0.0", + "_npmVersion": "3.1.2", + "_nodeVersion": "2.0.0", + "_npmUser": { + "name": "substack", + "email": "substack@gmail.com" + }, + "dist": { + "shasum": "af960b80caf71b38236352af7fef10a8efceeae3", + "tarball": "http://registry.npmjs.org/minimist/-/minimist-1.1.2.tgz" + }, + "maintainers": [ + { + "name": "substack", + "email": "mail@substack.net" + } + ], + "directories": {}, + "_resolved": "https://registry.npmjs.org/minimist/-/minimist-1.1.2.tgz", + "readme": "ERROR: No README data found!" +} diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/minimist/readme.markdown b/extensions/fablabchemnitz/svgo_output/node_modules/minimist/readme.markdown new file mode 100644 index 00000000..30a74cf8 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/minimist/readme.markdown @@ -0,0 +1,91 @@ +# minimist + +parse argument options + +This module is the guts of optimist's argument parser without all the +fanciful decoration. + +[![browser support](https://ci.testling.com/substack/minimist.png)](http://ci.testling.com/substack/minimist) + +[![build status](https://secure.travis-ci.org/substack/minimist.png)](http://travis-ci.org/substack/minimist) + +# example + +``` js +var argv = require('minimist')(process.argv.slice(2)); +console.dir(argv); +``` + +``` +$ node example/parse.js -a beep -b boop +{ _: [], a: 'beep', b: 'boop' } +``` + +``` +$ node example/parse.js -x 3 -y 4 -n5 -abc --beep=boop foo bar baz +{ _: [ 'foo', 'bar', 'baz' ], + x: 3, + y: 4, + n: 5, + a: true, + b: true, + c: true, + beep: 'boop' } +``` + +# methods + +``` js +var parseArgs = require('minimist') +``` + +## var argv = parseArgs(args, opts={}) + +Return an argument object `argv` populated with the array arguments from `args`. + +`argv._` contains all the arguments that didn't have an option associated with +them. + +Numeric-looking arguments will be returned as numbers unless `opts.string` or +`opts.boolean` is set for that argument name. + +Any arguments after `'--'` will not be parsed and will end up in `argv._`. + +options can be: + +* `opts.string` - a string or array of strings argument names to always treat as +strings +* `opts.boolean` - a boolean, string or array of strings to always treat as +booleans. if `true` will treat all double hyphenated arguments without equal signs +as boolean (e.g. affects `--foo`, not `-f` or `--foo=bar`) +* `opts.alias` - an object mapping string names to strings or arrays of string +argument names to use as aliases +* `opts.default` - an object mapping string argument names to default values +* `opts.stopEarly` - when true, populate `argv._` with everything after the +first non-option +* `opts['--']` - when true, populate `argv._` with everything before the `--` +and `argv['--']` with everything after the `--`. Here's an example: +* `opts.unknown` - a function which is invoked with a command line parameter not +defined in the `opts` configuration object. If the function returns `false`, the +unknown option is not added to `argv`. + +``` +> require('./')('one two three -- four five --six'.split(' '), { '--': true }) +{ _: [ 'one', 'two', 'three' ], + '--': [ 'four', 'five', '--six' ] } +``` + +Note that with `opts['--']` set, parsing for arguments still stops after the +`--`. + +# install + +With [npm](https://npmjs.org) do: + +``` +npm install minimist +``` + +# license + +MIT diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/minimist/test/all_bool.js b/extensions/fablabchemnitz/svgo_output/node_modules/minimist/test/all_bool.js new file mode 100644 index 00000000..ac835483 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/minimist/test/all_bool.js @@ -0,0 +1,32 @@ +var parse = require('../'); +var test = require('tape'); + +test('flag boolean true (default all --args to boolean)', function (t) { + var argv = parse(['moo', '--honk', 'cow'], { + boolean: true + }); + + t.deepEqual(argv, { + honk: true, + _: ['moo', 'cow'] + }); + + t.deepEqual(typeof argv.honk, 'boolean'); + t.end(); +}); + +test('flag boolean true only affects double hyphen arguments without equals signs', function (t) { + var argv = parse(['moo', '--honk', 'cow', '-p', '55', '--tacos=good'], { + boolean: true + }); + + t.deepEqual(argv, { + honk: true, + tacos: 'good', + p: 55, + _: ['moo', 'cow'] + }); + + t.deepEqual(typeof argv.honk, 'boolean'); + t.end(); +}); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/minimist/test/bool.js b/extensions/fablabchemnitz/svgo_output/node_modules/minimist/test/bool.js new file mode 100644 index 00000000..5792f884 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/minimist/test/bool.js @@ -0,0 +1,143 @@ +var parse = require('../'); +var test = require('tape'); + +test('flag boolean default false', function (t) { + var argv = parse(['moo'], { + boolean: ['t', 'verbose'], + default: { verbose: false, t: false } + }); + + t.deepEqual(argv, { + verbose: false, + t: false, + _: ['moo'] + }); + + t.deepEqual(typeof argv.verbose, 'boolean'); + t.deepEqual(typeof argv.t, 'boolean'); + t.end(); + +}); + +test('boolean groups', function (t) { + var argv = parse([ '-x', '-z', 'one', 'two', 'three' ], { + boolean: ['x','y','z'] + }); + + t.deepEqual(argv, { + x : true, + y : false, + z : true, + _ : [ 'one', 'two', 'three' ] + }); + + t.deepEqual(typeof argv.x, 'boolean'); + t.deepEqual(typeof argv.y, 'boolean'); + t.deepEqual(typeof argv.z, 'boolean'); + t.end(); +}); +test('boolean and alias with chainable api', function (t) { + var aliased = [ '-h', 'derp' ]; + var regular = [ '--herp', 'derp' ]; + var opts = { + herp: { alias: 'h', boolean: true } + }; + var aliasedArgv = parse(aliased, { + boolean: 'herp', + alias: { h: 'herp' } + }); + var propertyArgv = parse(regular, { + boolean: 'herp', + alias: { h: 'herp' } + }); + var expected = { + herp: true, + h: true, + '_': [ 'derp' ] + }; + + t.same(aliasedArgv, expected); + t.same(propertyArgv, expected); + t.end(); +}); + +test('boolean and alias with options hash', function (t) { + var aliased = [ '-h', 'derp' ]; + var regular = [ '--herp', 'derp' ]; + var opts = { + alias: { 'h': 'herp' }, + boolean: 'herp' + }; + var aliasedArgv = parse(aliased, opts); + var propertyArgv = parse(regular, opts); + var expected = { + herp: true, + h: true, + '_': [ 'derp' ] + }; + t.same(aliasedArgv, expected); + t.same(propertyArgv, expected); + t.end(); +}); + +test('boolean and alias using explicit true', function (t) { + var aliased = [ '-h', 'true' ]; + var regular = [ '--herp', 'true' ]; + var opts = { + alias: { h: 'herp' }, + boolean: 'h' + }; + var aliasedArgv = parse(aliased, opts); + var propertyArgv = parse(regular, opts); + var expected = { + herp: true, + h: true, + '_': [ ] + }; + + t.same(aliasedArgv, expected); + t.same(propertyArgv, expected); + t.end(); +}); + +// regression, see https://github.com/substack/node-optimist/issues/71 +test('boolean and --x=true', function(t) { + var parsed = parse(['--boool', '--other=true'], { + boolean: 'boool' + }); + + t.same(parsed.boool, true); + t.same(parsed.other, 'true'); + + parsed = parse(['--boool', '--other=false'], { + boolean: 'boool' + }); + + t.same(parsed.boool, true); + t.same(parsed.other, 'false'); + t.end(); +}); + +test('boolean --boool=true', function (t) { + var parsed = parse(['--boool=true'], { + default: { + boool: false + }, + boolean: ['boool'] + }); + + t.same(parsed.boool, true); + t.end(); +}); + +test('boolean --boool=false', function (t) { + var parsed = parse(['--boool=false'], { + default: { + boool: true + }, + boolean: ['boool'] + }); + + t.same(parsed.boool, false); + t.end(); +}); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/minimist/test/dash.js b/extensions/fablabchemnitz/svgo_output/node_modules/minimist/test/dash.js new file mode 100644 index 00000000..5a4fa5be --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/minimist/test/dash.js @@ -0,0 +1,31 @@ +var parse = require('../'); +var test = require('tape'); + +test('-', function (t) { + t.plan(5); + t.deepEqual(parse([ '-n', '-' ]), { n: '-', _: [] }); + t.deepEqual(parse([ '-' ]), { _: [ '-' ] }); + t.deepEqual(parse([ '-f-' ]), { f: '-', _: [] }); + t.deepEqual( + parse([ '-b', '-' ], { boolean: 'b' }), + { b: true, _: [ '-' ] } + ); + t.deepEqual( + parse([ '-s', '-' ], { string: 's' }), + { s: '-', _: [] } + ); +}); + +test('-a -- b', function (t) { + t.plan(3); + t.deepEqual(parse([ '-a', '--', 'b' ]), { a: true, _: [ 'b' ] }); + t.deepEqual(parse([ '--a', '--', 'b' ]), { a: true, _: [ 'b' ] }); + t.deepEqual(parse([ '--a', '--', 'b' ]), { a: true, _: [ 'b' ] }); +}); + +test('move arguments after the -- into their own `--` array', function(t) { + t.plan(1); + t.deepEqual( + parse([ '--name', 'John', 'before', '--', 'after' ], { '--': true }), + { name: 'John', _: [ 'before' ], '--': [ 'after' ] }); +}); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/minimist/test/default_bool.js b/extensions/fablabchemnitz/svgo_output/node_modules/minimist/test/default_bool.js new file mode 100644 index 00000000..780a3112 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/minimist/test/default_bool.js @@ -0,0 +1,35 @@ +var test = require('tape'); +var parse = require('../'); + +test('boolean default true', function (t) { + var argv = parse([], { + boolean: 'sometrue', + default: { sometrue: true } + }); + t.equal(argv.sometrue, true); + t.end(); +}); + +test('boolean default false', function (t) { + var argv = parse([], { + boolean: 'somefalse', + default: { somefalse: false } + }); + t.equal(argv.somefalse, false); + t.end(); +}); + +test('boolean default to null', function (t) { + var argv = parse([], { + boolean: 'maybe', + default: { maybe: null } + }); + t.equal(argv.maybe, null); + var argv = parse(['--maybe'], { + boolean: 'maybe', + default: { maybe: null } + }); + t.equal(argv.maybe, true); + t.end(); + +}) diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/minimist/test/dotted.js b/extensions/fablabchemnitz/svgo_output/node_modules/minimist/test/dotted.js new file mode 100644 index 00000000..d8b3e856 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/minimist/test/dotted.js @@ -0,0 +1,22 @@ +var parse = require('../'); +var test = require('tape'); + +test('dotted alias', function (t) { + var argv = parse(['--a.b', '22'], {default: {'a.b': 11}, alias: {'a.b': 'aa.bb'}}); + t.equal(argv.a.b, 22); + t.equal(argv.aa.bb, 22); + t.end(); +}); + +test('dotted default', function (t) { + var argv = parse('', {default: {'a.b': 11}, alias: {'a.b': 'aa.bb'}}); + t.equal(argv.a.b, 11); + t.equal(argv.aa.bb, 11); + t.end(); +}); + +test('dotted default with no alias', function (t) { + var argv = parse('', {default: {'a.b': 11}}); + t.equal(argv.a.b, 11); + t.end(); +}); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/minimist/test/long.js b/extensions/fablabchemnitz/svgo_output/node_modules/minimist/test/long.js new file mode 100644 index 00000000..5d3a1e09 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/minimist/test/long.js @@ -0,0 +1,31 @@ +var test = require('tape'); +var parse = require('../'); + +test('long opts', function (t) { + t.deepEqual( + parse([ '--bool' ]), + { bool : true, _ : [] }, + 'long boolean' + ); + t.deepEqual( + parse([ '--pow', 'xixxle' ]), + { pow : 'xixxle', _ : [] }, + 'long capture sp' + ); + t.deepEqual( + parse([ '--pow=xixxle' ]), + { pow : 'xixxle', _ : [] }, + 'long capture eq' + ); + t.deepEqual( + parse([ '--host', 'localhost', '--port', '555' ]), + { host : 'localhost', port : 555, _ : [] }, + 'long captures sp' + ); + t.deepEqual( + parse([ '--host=localhost', '--port=555' ]), + { host : 'localhost', port : 555, _ : [] }, + 'long captures eq' + ); + t.end(); +}); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/minimist/test/num.js b/extensions/fablabchemnitz/svgo_output/node_modules/minimist/test/num.js new file mode 100644 index 00000000..2cc77f4d --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/minimist/test/num.js @@ -0,0 +1,36 @@ +var parse = require('../'); +var test = require('tape'); + +test('nums', function (t) { + var argv = parse([ + '-x', '1234', + '-y', '5.67', + '-z', '1e7', + '-w', '10f', + '--hex', '0xdeadbeef', + '789' + ]); + t.deepEqual(argv, { + x : 1234, + y : 5.67, + z : 1e7, + w : '10f', + hex : 0xdeadbeef, + _ : [ 789 ] + }); + t.deepEqual(typeof argv.x, 'number'); + t.deepEqual(typeof argv.y, 'number'); + t.deepEqual(typeof argv.z, 'number'); + t.deepEqual(typeof argv.w, 'string'); + t.deepEqual(typeof argv.hex, 'number'); + t.deepEqual(typeof argv._[0], 'number'); + t.end(); +}); + +test('already a number', function (t) { + var argv = parse([ '-x', 1234, 789 ]); + t.deepEqual(argv, { x : 1234, _ : [ 789 ] }); + t.deepEqual(typeof argv.x, 'number'); + t.deepEqual(typeof argv._[0], 'number'); + t.end(); +}); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/minimist/test/parse.js b/extensions/fablabchemnitz/svgo_output/node_modules/minimist/test/parse.js new file mode 100644 index 00000000..7b4a2a17 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/minimist/test/parse.js @@ -0,0 +1,197 @@ +var parse = require('../'); +var test = require('tape'); + +test('parse args', function (t) { + t.deepEqual( + parse([ '--no-moo' ]), + { moo : false, _ : [] }, + 'no' + ); + t.deepEqual( + parse([ '-v', 'a', '-v', 'b', '-v', 'c' ]), + { v : ['a','b','c'], _ : [] }, + 'multi' + ); + t.end(); +}); + +test('comprehensive', function (t) { + t.deepEqual( + parse([ + '--name=meowmers', 'bare', '-cats', 'woo', + '-h', 'awesome', '--multi=quux', + '--key', 'value', + '-b', '--bool', '--no-meep', '--multi=baz', + '--', '--not-a-flag', 'eek' + ]), + { + c : true, + a : true, + t : true, + s : 'woo', + h : 'awesome', + b : true, + bool : true, + key : 'value', + multi : [ 'quux', 'baz' ], + meep : false, + name : 'meowmers', + _ : [ 'bare', '--not-a-flag', 'eek' ] + } + ); + t.end(); +}); + +test('flag boolean', function (t) { + var argv = parse([ '-t', 'moo' ], { boolean: 't' }); + t.deepEqual(argv, { t : true, _ : [ 'moo' ] }); + t.deepEqual(typeof argv.t, 'boolean'); + t.end(); +}); + +test('flag boolean value', function (t) { + var argv = parse(['--verbose', 'false', 'moo', '-t', 'true'], { + boolean: [ 't', 'verbose' ], + default: { verbose: true } + }); + + t.deepEqual(argv, { + verbose: false, + t: true, + _: ['moo'] + }); + + t.deepEqual(typeof argv.verbose, 'boolean'); + t.deepEqual(typeof argv.t, 'boolean'); + t.end(); +}); + +test('newlines in params' , function (t) { + var args = parse([ '-s', "X\nX" ]) + t.deepEqual(args, { _ : [], s : "X\nX" }); + + // reproduce in bash: + // VALUE="new + // line" + // node program.js --s="$VALUE" + args = parse([ "--s=X\nX" ]) + t.deepEqual(args, { _ : [], s : "X\nX" }); + t.end(); +}); + +test('strings' , function (t) { + var s = parse([ '-s', '0001234' ], { string: 's' }).s; + t.equal(s, '0001234'); + t.equal(typeof s, 'string'); + + var x = parse([ '-x', '56' ], { string: 'x' }).x; + t.equal(x, '56'); + t.equal(typeof x, 'string'); + t.end(); +}); + +test('stringArgs', function (t) { + var s = parse([ ' ', ' ' ], { string: '_' })._; + t.same(s.length, 2); + t.same(typeof s[0], 'string'); + t.same(s[0], ' '); + t.same(typeof s[1], 'string'); + t.same(s[1], ' '); + t.end(); +}); + +test('empty strings', function(t) { + var s = parse([ '-s' ], { string: 's' }).s; + t.equal(s, ''); + t.equal(typeof s, 'string'); + + var str = parse([ '--str' ], { string: 'str' }).str; + t.equal(str, ''); + t.equal(typeof str, 'string'); + + var letters = parse([ '-art' ], { + string: [ 'a', 't' ] + }); + + t.equal(letters.a, ''); + t.equal(letters.r, true); + t.equal(letters.t, ''); + + t.end(); +}); + + +test('string and alias', function(t) { + var x = parse([ '--str', '000123' ], { + string: 's', + alias: { s: 'str' } + }); + + t.equal(x.str, '000123'); + t.equal(typeof x.str, 'string'); + t.equal(x.s, '000123'); + t.equal(typeof x.s, 'string'); + + var y = parse([ '-s', '000123' ], { + string: 'str', + alias: { str: 's' } + }); + + t.equal(y.str, '000123'); + t.equal(typeof y.str, 'string'); + t.equal(y.s, '000123'); + t.equal(typeof y.s, 'string'); + t.end(); +}); + +test('slashBreak', function (t) { + t.same( + parse([ '-I/foo/bar/baz' ]), + { I : '/foo/bar/baz', _ : [] } + ); + t.same( + parse([ '-xyz/foo/bar/baz' ]), + { x : true, y : true, z : '/foo/bar/baz', _ : [] } + ); + t.end(); +}); + +test('alias', function (t) { + var argv = parse([ '-f', '11', '--zoom', '55' ], { + alias: { z: 'zoom' } + }); + t.equal(argv.zoom, 55); + t.equal(argv.z, argv.zoom); + t.equal(argv.f, 11); + t.end(); +}); + +test('multiAlias', function (t) { + var argv = parse([ '-f', '11', '--zoom', '55' ], { + alias: { z: [ 'zm', 'zoom' ] } + }); + t.equal(argv.zoom, 55); + t.equal(argv.z, argv.zoom); + t.equal(argv.z, argv.zm); + t.equal(argv.f, 11); + t.end(); +}); + +test('nested dotted objects', function (t) { + var argv = parse([ + '--foo.bar', '3', '--foo.baz', '4', + '--foo.quux.quibble', '5', '--foo.quux.o_O', + '--beep.boop' + ]); + + t.same(argv.foo, { + bar : 3, + baz : 4, + quux : { + quibble : 5, + o_O : true + } + }); + t.same(argv.beep, { boop : true }); + t.end(); +}); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/minimist/test/parse_modified.js b/extensions/fablabchemnitz/svgo_output/node_modules/minimist/test/parse_modified.js new file mode 100644 index 00000000..ab620dc5 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/minimist/test/parse_modified.js @@ -0,0 +1,9 @@ +var parse = require('../'); +var test = require('tape'); + +test('parse with modifier functions' , function (t) { + t.plan(1); + + var argv = parse([ '-b', '123' ], { boolean: 'b' }); + t.deepEqual(argv, { b: true, _: [123] }); +}); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/minimist/test/short.js b/extensions/fablabchemnitz/svgo_output/node_modules/minimist/test/short.js new file mode 100644 index 00000000..d513a1c2 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/minimist/test/short.js @@ -0,0 +1,67 @@ +var parse = require('../'); +var test = require('tape'); + +test('numeric short args', function (t) { + t.plan(2); + t.deepEqual(parse([ '-n123' ]), { n: 123, _: [] }); + t.deepEqual( + parse([ '-123', '456' ]), + { 1: true, 2: true, 3: 456, _: [] } + ); +}); + +test('short', function (t) { + t.deepEqual( + parse([ '-b' ]), + { b : true, _ : [] }, + 'short boolean' + ); + t.deepEqual( + parse([ 'foo', 'bar', 'baz' ]), + { _ : [ 'foo', 'bar', 'baz' ] }, + 'bare' + ); + t.deepEqual( + parse([ '-cats' ]), + { c : true, a : true, t : true, s : true, _ : [] }, + 'group' + ); + t.deepEqual( + parse([ '-cats', 'meow' ]), + { c : true, a : true, t : true, s : 'meow', _ : [] }, + 'short group next' + ); + t.deepEqual( + parse([ '-h', 'localhost' ]), + { h : 'localhost', _ : [] }, + 'short capture' + ); + t.deepEqual( + parse([ '-h', 'localhost', '-p', '555' ]), + { h : 'localhost', p : 555, _ : [] }, + 'short captures' + ); + t.end(); +}); + +test('mixed short bool and capture', function (t) { + t.same( + parse([ '-h', 'localhost', '-fp', '555', 'script.js' ]), + { + f : true, p : 555, h : 'localhost', + _ : [ 'script.js' ] + } + ); + t.end(); +}); + +test('short and long', function (t) { + t.deepEqual( + parse([ '-h', 'localhost', '-fp', '555', 'script.js' ]), + { + f : true, p : 555, h : 'localhost', + _ : [ 'script.js' ] + } + ); + t.end(); +}); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/minimist/test/stop_early.js b/extensions/fablabchemnitz/svgo_output/node_modules/minimist/test/stop_early.js new file mode 100644 index 00000000..bdf9fbcb --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/minimist/test/stop_early.js @@ -0,0 +1,15 @@ +var parse = require('../'); +var test = require('tape'); + +test('stops parsing on the first non-option when stopEarly is set', function (t) { + var argv = parse(['--aaa', 'bbb', 'ccc', '--ddd'], { + stopEarly: true + }); + + t.deepEqual(argv, { + aaa: 'bbb', + _: ['ccc', '--ddd'] + }); + + t.end(); +}); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/minimist/test/unknown.js b/extensions/fablabchemnitz/svgo_output/node_modules/minimist/test/unknown.js new file mode 100644 index 00000000..462a36bd --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/minimist/test/unknown.js @@ -0,0 +1,102 @@ +var parse = require('../'); +var test = require('tape'); + +test('boolean and alias is not unknown', function (t) { + var unknown = []; + function unknownFn(arg) { + unknown.push(arg); + return false; + } + var aliased = [ '-h', 'true', '--derp', 'true' ]; + var regular = [ '--herp', 'true', '-d', 'true' ]; + var opts = { + alias: { h: 'herp' }, + boolean: 'h', + unknown: unknownFn + }; + var aliasedArgv = parse(aliased, opts); + var propertyArgv = parse(regular, opts); + + t.same(unknown, ['--derp', '-d']); + t.end(); +}); + +test('flag boolean true any double hyphen argument is not unknown', function (t) { + var unknown = []; + function unknownFn(arg) { + unknown.push(arg); + return false; + } + var argv = parse(['--honk', '--tacos=good', 'cow', '-p', '55'], { + boolean: true, + unknown: unknownFn + }); + t.same(unknown, ['--tacos=good', 'cow', '-p']); + t.same(argv, { + honk: true, + _: [] + }); + t.end(); +}); + +test('string and alias is not unknown', function (t) { + var unknown = []; + function unknownFn(arg) { + unknown.push(arg); + return false; + } + var aliased = [ '-h', 'hello', '--derp', 'goodbye' ]; + var regular = [ '--herp', 'hello', '-d', 'moon' ]; + var opts = { + alias: { h: 'herp' }, + string: 'h', + unknown: unknownFn + }; + var aliasedArgv = parse(aliased, opts); + var propertyArgv = parse(regular, opts); + + t.same(unknown, ['--derp', '-d']); + t.end(); +}); + +test('default and alias is not unknown', function (t) { + var unknown = []; + function unknownFn(arg) { + unknown.push(arg); + return false; + } + var aliased = [ '-h', 'hello' ]; + var regular = [ '--herp', 'hello' ]; + var opts = { + default: { 'h': 'bar' }, + alias: { 'h': 'herp' }, + unknown: unknownFn + }; + var aliasedArgv = parse(aliased, opts); + var propertyArgv = parse(regular, opts); + + t.same(unknown, []); + t.end(); + unknownFn(); // exercise fn for 100% coverage +}); + +test('value following -- is not unknown', function (t) { + var unknown = []; + function unknownFn(arg) { + unknown.push(arg); + return false; + } + var aliased = [ '--bad', '--', 'good', 'arg' ]; + var opts = { + '--': true, + unknown: unknownFn + }; + var argv = parse(aliased, opts); + + t.same(unknown, ['--bad']); + t.same(argv, { + '--': ['good', 'arg'], + '_': [] + }) + t.end(); +}); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/minimist/test/whitespace.js b/extensions/fablabchemnitz/svgo_output/node_modules/minimist/test/whitespace.js new file mode 100644 index 00000000..8a52a58c --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/minimist/test/whitespace.js @@ -0,0 +1,8 @@ +var parse = require('../'); +var test = require('tape'); + +test('whitespace should be whitespace' , function (t) { + t.plan(1); + var x = parse([ '-x', '\t' ]).x; + t.equal(x, '\t'); +}); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/.npmignore b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/.npmignore new file mode 100644 index 00000000..f9af41d7 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/.npmignore @@ -0,0 +1,10 @@ +docs +examples +test +.editorconfig +.jshintignore +.jshintrc +.travis.yml +lcov.info +logo.svg +CHANGELOG.MD diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/.svgo.yml b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/.svgo.yml new file mode 100644 index 00000000..697aefb4 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/.svgo.yml @@ -0,0 +1,53 @@ +# replace default config +# full: true + +plugins: + + # - name + # + # or: + # - name: false + # - name: true + # + # or: + # - name: + # param1: 1 + # param2: 2 + + - removeDoctype + - removeXMLProcInst + - removeComments + - removeMetadata + - removeEditorsNSData + - cleanupAttrs + - convertStyleToAttrs + - cleanupIDs + - removeRasterImages + - removeUselessDefs + - cleanupNumericValues + - cleanupListOfValues + - convertColors + - removeUnknownsAndDefaults + - removeNonInheritableGroupAttrs + - removeUselessStrokeAndFill + - removeViewBox + - cleanupEnableBackground + - removeHiddenElems + - removeEmptyText + - convertShapeToPath + - moveElemsAttrsToGroup + - moveGroupAttrsToElems + - collapseGroups + - convertPathData + - convertTransform + - removeEmptyAttrs + - removeEmptyContainers + - mergePaths + - removeUnusedNS + - transformsWithOnePath + - sortAttrs + - removeTitle + - removeDesc + - removeDimensions + - removeAttrs + - addClassesToSVGElement diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/CHANGELOG.md b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/CHANGELOG.md new file mode 100644 index 00000000..3a606ac5 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/CHANGELOG.md @@ -0,0 +1,335 @@ +### [ [>](https://github.com/svg/svgo/tree/v0.5.3) ] 0.5.3 / 21.06.2015 +* Fixed breaking related to rounding functions in “[convertTransform](https://github.com/svg/svgo/blob/master/plugins/convertTransform.js)â€. +* Fixed a bug with ID in animations not being worked on by “[cleanupIDs](https://github.com/svg/svgo/blob/master/plugins/cleanupIDs.js)â€. +* Fixed a bug with quoted reference in `url()`. +* Now, if there are several same IDs in the document, then the first one is used and others are being removed. +* New command-line option `--show-plugins` displaying list of plugins. +* Two new optional plugins: “[removeDimensions](removeDimensions.js)†(removes `width` and `height` if there is `viewBox`) and “[removeAttrsPlugin](removeAttrsPlugin.js)†(by @bennyschudel). + +### [ [>](https://github.com/svg/svgo/tree/v0.5.2) ] 0.5.2 / 24.05.2015 +* Introduced new `transformPrecision` option for better image quality (defaults to 5) in “[convertTransform](https://github.com/svg/svgo/blob/master/plugins/convertTransform.js)†and “[convertPathData](https://github.com/svg/svgo/blob/master/plugins/convertPathData.js)†(for the purpose of applying transformations) plugins. +* Matrix transformations now can be decomposed into a combination of few simple transforms like `translate`, `rotate`, `scale`. +* Arcs (paths `arcto` command) are now correctly being transformed into another arcs without being converting to Bezier curves. +* Fixed an issue with “[mergePaths](https://github.com/svg/svgo/blob/master/plugins/mergePaths.js)†failing to detect paths intersection in some cases. +* Fixed a bug with “[removeUnknownsAndDefaults](https://github.com/svg/svgo/blob/master/plugins/removeUnknownsAndDefaults.js)†removing some paths, which was introduced in [v0.5.1](https://github.com/svg/svgo/tree/v0.5.1). +* Fixed a bug with transformation having `rotate()` with optional parameters. +* Patterns with inherited attributes are no longer being removed. +* Styles are no longer being removed from `` (by @dennari). +* SVGO no longer breaks during parsing. +* Added `clone()` method to JSAPI (by @jakearchibald) + +### [ [>](https://github.com/svg/svgo/tree/v0.5.1) ] 0.5.1 / 30.03.2015 +* added new command-line option to set precision in floating point numbers. +* fixed all known image-disruptive bugs +* Notably [mergePaths](https://github.com/svg/svgo/blob/master/plugins/mergePaths.js) plugin now checks for possible intersections to avoid side-effects +* new plugin [removeUselessDefs](https://github.com/svg/svgo/blob/master/plugins/removeUselessDefs.js) to remove elements in ```` and similar non-rendering elements without an ``id`` and thus cannot be used +* fix for ``--multipass`` command line option (by @dfilatov) +* improved [cleanupEnableBackground](https://github.com/svg/svgo/blob/master/plugins/cleanupEnableBackground.js) and [convertColors](https://github.com/svg/svgo/blob/master/plugins/convertColors.js) plugins (by @YetiOr) +* new plugin for image manipulation [cleanupListOfValues](https://github.com/svg/svgo/blob/master/plugins/cleanupListOfValues.js) (by @kiyopikko) +* fixed fail on comments after closing root ```` tag +* updated parsing to account meaningful spaces in ```` +* ``data-*`` attributes are now preserved in [removeUnknownsAndDefaults](https://github.com/svg/svgo/blob/master/plugins/removeUnknownsAndDefaults.js) +* prevented plugins from failing in ```` +* [cleanupNumericValues](https://github.com/svg/svgo/blob/master/plugins/cleanupNumericValues.js) plugin now converts other units to pixels (if it's better) +* [removeUselessStrokeAndFill](https://github.com/svg/svgo/blob/master/plugins/removeUselessStrokeAndFill.js) plugin is enabled again with correct work in case of inherited attributes +* fixed fail on images with incorrect paths like ```` +* svgo now understands if an input is a folder (remember, you can set output to folder as well) +* added support for some properties from SVG 2 like ``vector-effect="non-scaling-stroke"`` +* removed option to remove an ``id`` on root ```` tag in [removeUnknownsAndDefaults](https://github.com/svg/svgo/blob/master/plugins/removeUnknownsAndDefaults.js) since it's already being done in [cleanupIDs](https://github.com/svg/svgo/blob/master/plugins/cleanupIDs.js) + +### [ [>](https://github.com/svg/svgo/tree/v0.5.0) ] 0.5.0 / 05.11.2014 +* added ``--multipass`` command line option which repeatedly applies optimizations like collapsing groups (by @dfilatov) +* exposed JSAPI as a factory method (by @mistakster) +* added removeDesc plugin (by @dwabyick), disabled by default +* [removeUselessStrokeAndFill](https://github.com/svg/svgo/blob/master/plugins/removeUselessStrokeAndFill.js) plugin is disabled by default since it's unable to check inherited properties +* transformations now apply to paths with arcs in [plugins/convertPathData](https://github.com/svg/svgo/blob/master/plugins/convertPathData.js) +* a lot of bug fixes mostly related to transformations + +### [ [>](https://github.com/svg/svgo/tree/v0.4.5) ] 0.4.5 / 02.08.2014 +* significally improved plugin [plugins/convertPathData](https://github.com/svg/svgo/blob/master/plugins/convertPathData.js): + - Now data is being written relative or absolute whichever is shorter. You can turn it off by setting ``utilizeAbsolute`` to ``false``. + - Smarter rounding: values like 2.499 now rounds to 2.5. Rounding now takes in account accumulutive error meaning that points will not be misplaced due to rounding more than it neccessary. + - Fixed couple bugs. +* ``--output`` option now can be a folder along with ``--folder``, thanks to @mako-taco. +* [plugins/cleanupIDs](https://github.com/svg/svgo/blob/master/plugins/cleanupIDs.js) now have ``prefix`` option in case you want to combine multiple svg later (by @DanielMazurkiewicz). +* Quotes now being escaped in attributes (by @ditesh). +* Minor bugfixes. + +### [ [>](https://github.com/svg/svgo/tree/v0.4.4) ] 0.4.4 / 14.01.2014 +* new plugin [plugins/removeTitle](https://github.com/svg/svgo/blob/master/plugins/removeTitle.js) (disabled by default, close [#159](https://github.com/svg/svgo/issues/159)) +* plugins/convertPathData: skip data concatenation for z instruction in collapseRepeated +* plugins/removeUnknownsAndDefaults: do not remove overriden attributes with default values (fix [#161](https://github.com/svg/svgo/issues/161) and [#168](https://github.com/svg/svgo/issues/168)) +* plugins/removeViewBox: disable by default (fix [#139](https://github.com/svg/svgo/issues/139)) +* update README with [gulp task](https://github.com/ben-eb/gulp-svgmin) + +### [ [>](https://github.com/svg/svgo/tree/v0.4.3) ] 0.4.3 / 02.01.2014 +* new plugin [plugins/convertShapeToPath](https://github.com/svg/svgo/blob/master/plugins/convertShapeToPath.js) (close [#96](https://github.com/svg/svgo/issues/96)) +* update sax version to fix [#140](https://github.com/svg/svgo/issues/140) +* update deps + +### [ [>](https://github.com/svg/svgo/tree/v0.4.2) ] 0.4.2 / 19.12.2013 +* add `lcov.info` to npmignore +* fix `js-yaml` version to suppress deprecation warning in stdout + +### [ [>](https://github.com/svg/svgo/tree/v0.4.1) ] 0.4.1 / 18.11.2013 +* node >=0.8.0 + +### [ [>](https://github.com/svg/svgo/tree/v0.4.0) ] 0.4.0 / 18.11.2013 +* merge almost all pull-requests +* update dependencies + +### [ [>](https://github.com/svg/svgo/tree/v0.3.7) ] 0.3.7 / 24.06.2013 +* do not remove `result` attribute from filter primitives (fix [#122](https://github.com/svg/svgo/issues/122)) +* plugins/cleanupAttrs: replace newline with space when needed (fix [#119](https://github.com/svg/svgo/issues/119)) +* lib/coa: look for config file in current folder +* lib/coa: always traverse all files in the given folder +* deprecate svgo-grunt in favor of [grunt-svgmin](https://github.com/sindresorhus/grunt-svgmin) +* re-enable node-coveralls + +### [ [>](https://github.com/svg/svgo/tree/v0.3.6) ] 0.3.6 / 06.06.2013 +* plugins/removeNonInheritableGroupAttrs: more attrs groups to exclude (fix [#116](https://github.com/svg/svgo/issues/116) & [#118](https://github.com/svg/svgo/issues/118)) +* lib/coa: optimize folder file by file (temp fix [#114](https://github.com/svg/svgo/issues/114)) +* `.jshintrc`: JSHint 2.0 +* temporarily disable node-coveralls + +### [ [>](https://github.com/svg/svgo/tree/v0.3.5) ] 0.3.5 / 07.05.2013 +* plugins/transformsWithOnePath: fix curves bounding box calculation +* plugins/transformsWithOnePath: fix possible c+t or q+s bug + + +### [ [>](https://github.com/svg/svgo/tree/v0.3.4) ] 0.3.4 / 06.05.2013 +* plugins/convertPathData: fix m->M bug in some cases +* plugins/transformsWithOnePath: fix last point calculation for C/S/Q/T +* plugins/mergePaths: add space delimiter between z and m + +### [ [>](https://github.com/svg/svgo/tree/v0.3.3) ] 0.3.3 / 05.05.2013 +* plugins/convertPathData: convert very first m to M, fix applyTransforms with translate() (fix [#112](https://github.com/svg/svgo/issues/112)) +* plugins/transformsWithOnePath: fix real width/height rounding; fix scale transform origin; reorder transforms +* plugins/transformsWithOnePath: ability to set new width or height independently with auto rescaling + +### [ [>](https://github.com/svg/svgo/tree/v0.3.2) ] 0.3.2 / 03.05.2013 +* new plugin [plugins/sortAttrs](https://github.com/svg/svgo/blob/master/plugins/sortAttrs.js) +* plugins/transformsWithOnePath: buggy hcrop (fix [#111](https://github.com/svg/svgo/issues/111)) +* Impossible to set output presision to 0 (no fractional part) (fix [#110](https://github.com/svg/svgo/issues/110)) +* Istanbul + coveralls.io +* update README with NPM version from badge.fury.io +* update README with dependency status from gemnasium.com +* npmignore unneeded files +* reoptimized project logo + +### [ [>](https://github.com/svg/svgo/tree/v0.3.1) ] 0.3.1 / 15.04.2013 +* plugins/transformsWithOnePath: resize SVG and automatically rescale inner Path +* better errors handling + +### [ [>](https://github.com/svg/svgo/tree/v0.3.0) ] 0.3.0 / 12.04.2013 +* global refactoring: getting rid of the many dependencies +* new plugin [plugins/mergePaths](https://github.com/svg/svgo/blob/master/plugins/mergePaths.js) +* new plugin [plugins/transformsWithOnePath](https://github.com/svg/svgo/blob/master/plugins/transformsWithOnePath.js) (renamed and featured `cropAndCenterAlongPath`) +* config: replace default config with `full: true` +* coa: JSON string as value of `--config` +* coa: different types of Data URI strings (close [#105](https://github.com/svg/svgo/issues/105)) +* plugins/_transforms: allow spaces at the beginning of transform +* Travis CI: Nodejs 0.10 & 0.11 +* `node.extend` → `whet.extend` +* update `.gitignore` +* update docs + +### [ [>](https://github.com/svg/svgo/tree/v0.2.4) ] 0.2.4 / 05.04.2013 +* new plugin [plugins/cropAndCenterAlongPath](https://github.com/svg/svgo/blob/master/plugins/cropAndCenterAlongPath.js) for the [Fontello](https://github.com/fontello) project + +### [ [>](https://github.com/svg/svgo/tree/v0.2.3) ] 0.2.3 / 22.02.2013 +* new plugin [plugins/removeNonInheritableGroupAttrs](https://github.com/svg/svgo/blob/master/plugins/removeNonInheritableGroupAttrs.js) (fix [#101](https://github.com/svg/svgo/issues/101)) +* new plugin [plugins/removeRasterImages](https://github.com/svg/svgo/blob/master/plugins/removeRasterImages.js) (close [#98](https://github.com/svg/svgo/issues/98)) +* plugins/convertTransform: bug with trailing spaces in transform value string (fix [#103](https://github.com/svg/svgo/issues/103)) + +### [ [>](https://github.com/svg/svgo/tree/v0.2.2) ] 0.2.2 / 09.02.2013 +* plugins/convertTransforms: wrong translate() shorthand (fix [#94](https://github.com/svg/svgo/issues/94)) +* [yaml.js](https://github.com/jeremyfa/yaml.js) → [js-yaml](https://github.com/nodeca/js-yaml) +* update outdated deps + +### [ [>](https://github.com/svg/svgo/tree/v0.2.1) ] 0.2.1 / 18.01.2013 +* plugins/moveElemsAttrsToGroup + plugins/moveGroupAttrsToElems: move or just leave transform attr from Group to the inner Path Elems (close [#86](https://github.com/svg/svgo/issues/86)) +* plugins/removeViewBox: doesn't catch floating-point numbers (fix [#88](https://github.com/svg/svgo/issues/88)) +* plugins/cleanupEnableBackground: doesn't catch floating-point numbers (fix [#89](https://github.com/svg/svgo/issues/89)) +* plugins/cleanupNumericValues: wrong floating-point numbers regexp (fix [#92](https://github.com/svg/svgo/issues/92)) +* SVG file generated by fontcustom.com not properly compressed (fix [#90](https://github.com/svg/svgo/issues/90)) +* `README.ru.md`: ÑÑ‚Ð¸Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ñ€ÑƒÑÑкого Ñзыка, улучшение Ñзыковых конÑтрукций, правка ошибок (close [#91](https://github.com/svg/svgo/issues/91)) +* minor JSHint warning fix + +### [ [>](https://github.com/svg/svgo/tree/v0.2.0) ] 0.2.0 / 23.12.2012 +* plugins/convertPathData: apply transforms to Path pata (close [#33](https://github.com/svg/svgo/issues/33)) +* plugins/convertPathData: `-1.816-9.278.682-13.604` parsing error (fix [#85](https://github.com/svg/svgo/issues/85)) +* plugins/convertTransform: `translate(10, 0)` eq `translate(10)`, but not `translate(10, 10)` eq `translate(10)` (fix [#83](https://github.com/svg/svgo/issues/83)) +* run plugins/cleanupIDs before plugins/collapseGroups (fix [#84](https://github.com/svg/svgo/issues/84)) +* update `.gitignore` + +### [ [>](https://github.com/svg/svgo/tree/v0.1.9) ] 0.1.9 / 17.12.2012 +* plugins/cleanupIDs: renamed from removeUnusedIDs; minify used IDs (fix [#7](https://github.com/svg/svgo/issues/7)) +* lib/svgo/js2svg: restore HTML entities back (fix [#80](https://github.com/svg/svgo/issues/80) + [#81](https://github.com/svg/svgo/issues/81)) +* plugins/removeDoctype: do not remove if custom XML entities presents (fix [#77](https://github.com/svg/svgo/issues/77)) +* lib/svgo/coa: refactoring, colors and fix [#70](https://github.com/svg/svgo/issues/70) +* lib/svgo: store elapsed time in result object +* usage examples with SVGZ (close [#18](https://github.com/svg/svgo/issues/18)) +* more optimized logo +* update `.gitignore` + +### [ [>](https://github.com/svg/svgo/tree/v0.1.8) ] 0.1.8 / 11.12.2012 +* new plugin [plugins/removeUselessStrokeAndFill](https://github.com/svg/svgo/blob/master/plugins/removeUselessStrokeAndFill.js) (close [#75](https://github.com/svg/svgo/issues/75)) +* new plugin [plugins/removeUnusedIDs](https://github.com/svg/svgo/blob/master/plugins/removeUnusedIDs.js) (close [#76](https://github.com/svg/svgo/issues/76)) +* plugins/convertPathData: wrong M interpretation in some cases (fix [#73](https://github.com/svg/svgo/issues/73)) +* plugins/cleanupAttrs: use `isElem()` API +* `.travis.yml`: check all branches + + +### [ [>](https://github.com/svg/svgo/tree/v0.1.7) ] 0.1.7 / 08.12.2012 +* plugins/convertPathData: incorrect interpretation of `z + m` (fix [#69](https://github.com/svg/svgo/issues/69)) +* plugins/convertTransform: do a more accurate floating numbers rounding in `matrixToTransform()` (fix [#68](https://github.com/svg/svgo/issues/68)) + +### [ [>](https://github.com/svg/svgo/tree/v0.1.6) ] 0.1.6 / 07.12.2012 +* plugins/convertPathData: collapse repeated instructions only after curveSmoothShorthands (fix [#64](https://github.com/svg/svgo/issues/64)) +* lib/svgo/coa: handle 'there is nothing to optimize' case and display a message about it (fix [#61](https://github.com/svg/svgo/issues/61)) +* plugins/cleanupSVGElem: delete as useless artefact + + +### [ [>](https://github.com/svg/svgo/tree/v0.1.5) ] 0.1.5 / 06.12.2012 +* E-notated numbers in paths not recognised (fix [#63](https://github.com/svg/svgo/issues/63)) +* update README with `svgo-grunt` and `svgo-osx-folder-action` +* fix `mocha-as-promised` plug in node 0.6 + +### [ [>](https://github.com/svg/svgo/tree/v0.1.4) ] 0.1.4 / 05.12.2012 +* plugins/_collections: more defaults +* `README.ru.md` +* `docs/how-it-works/ru.md` +* mocha + mocha-as-promised + chai + chai-as-promised + should + istanbul = <3 +* update dependencies semvers in `package.json` +* `v0.1.x` and `v0.2.x` milestones + +### [ [>](https://github.com/svg/svgo/tree/v0.1.3) ] 0.1.3 / 30.11.2012 +* new plugin [plugins/cleanupNumericValues](https://github.com/svg/svgo/blob/master/plugins/cleanupNumericValues.js) (close [#8](https://github.com/svg/svgo/issues/8)) +* plugins/removeDefaultPx functionality now included in plugins/removeUnknownsAndDefaults +* plugins/removeUnknownsAndDefaults: refactoring and picking up the complete elems+attrs collection (close [#59](https://github.com/svg/svgo/issues/59)) +* plugins/convertTransform: error in matrices multiplication (fix [#58](https://github.com/svg/svgo/issues/58)) +* plugins/convertTransform: mark translate() and scale() as useless only with one param (fix [#57](https://github.com/svg/svgo/issues/57)) +* plugins/convertPathData: drastic speed improvement with huge Path data +* plugins/convertPathData: fix the very first Mm with multiple points (fix [#56](https://github.com/svg/svgo/issues/56)) +* plugins/moveElemsAttrsToGroup: additional check for transform attr +* brand-new project `logo.svg` +* `.travis.yml`: build only master branch +* global `'use strict'` +* `.jshintignore` +* README and CHANGELOG: minor corrections + +### [ [>](https://github.com/svg/svgo/tree/v0.1.2) ] 0.1.2 / 24.11.2012 +* lib/svgo/svg2js: correct 'onerror' failure (fix [#51](https://github.com/svg/svgo/issues/51)) +* config: disable sax-js position tracking by default (fix [#52](https://github.com/svg/svgo/issues/52)) +* lib/svgo: rename 'startBytes' to 'inBytes' and 'endBytes' to 'outBytes' (close [#53](https://github.com/svg/svgo/issues/53)) +* plugins/removeUnknownsAndDefaults: remove SVG id attr (close [#54](https://github.com/svg/svgo/issues/54)) + +### [ [>](https://github.com/svg/svgo/tree/v0.1.1) ] 0.1.1 / 23.11.2012 +* plugins/moveElemsAttrsToGroup: fix inheitable only attrs array (fix [#47](https://github.com/svg/svgo/issues/47)) +* plugins/removeEmptyContainers: do not remove an empty 'svg' element (fix [#48](https://github.com/svg/svgo/issues/48)) +* plugins/removeDefaultPx: should also understand a floating-numbers too (fix [#49](https://github.com/svg/svgo/issues/49)) +* plugins/removeUnknownsAndDefaults: merge multiple groupDefaults attrs (close [#50](https://github.com/svg/svgo/issues/50)) + +### [ [>](https://github.com/svg/svgo/tree/v0.1.0) ] 0.1.0 / 22.11.2012 +* new plugin [plugins/removeUnknownsAndDefaults](https://github.com/svg/svgo/blob/master/plugins/removeUnknownsAndDefaults.js) (close [#6](https://github.com/svg/svgo/issues/6)) +* plugins/convertPathData: convert straight curves into lines segments (close [#17](https://github.com/svg/svgo/issues/17)); remove an absolute coords conversions +* plugins/convertPathData: convert quadratic Bézier curveto into smooth shorthand (close [#31](https://github.com/svg/svgo/issues/31)) +* plugins/convertPathData: convert curveto into smooth shorthand (close [#30](https://github.com/svg/svgo/issues/30)) +* lib/svgo: global API refactoring (close [#37](https://github.com/svg/svgo/issues/37)) +* lib/svgo: fatal and stupid error in stream chunks concatenation (fix [#40](https://github.com/svg/svgo/issues/40)) +* lib/coa: batch folder optimization (close [#29](https://github.com/svg/svgo/issues/29)) +* lib/coa: support arguments as aliases to `--input` and `--output` (close [#28](https://github.com/svg/svgo/issues/28)) +* project logo by [Egor Bolhshakov](http://xizzzy.ru/) +* move modules to `./lib/svgo/` +* rename and convert `config.json` to `.svgo.yml` +* add [./docs/](https://github.com/svg/svgo/tree/master/docs) +* plugins/convertPathData: don't remove first `M` even if it's `0,0` +* plugins/convertPathData: stronger defense from infinite loop +* plugins/moveElemsAttrsToGroup: should affect only inheritable attributes (fix [#46](https://github.com/svg/svgo/issues/46))* +* plugins/removeComments: ignore comments which starts with '!' (close [#43](https://github.com/svg/svgo/issues/43)) +* config: `cleanupAttrs` should be before `convertStyleToAttrs` (fix [#44](https://github.com/svg/svgo/issues/44))* +* lib/svgo/jsAPI: add `eachAttr()` optional context param +* temporarily remove PhantomJS and `--test` (close [#38](https://github.com/svg/svgo/issues/38)) +* q@0.8.10 compatibility: 'end is deprecated, use done instead' fix +* add [Istanbul](https://github.com/gotwarlost/istanbul) code coverage +* update dependencies versions and gitignore +* README: add TODO section with versions milestones +* update README with License section +* update LICENSE with russian translation +* `.editorconfig`: 2 spaces for YAML + +### [ [>](https://github.com/svg/svgo/tree/v0.0.9) ] 0.0.9 / 29.10.2012 +* [plugins how-to](https://github.com/svg/svgo/tree/master/plugins#readme) (close [#27](https://github.com/svg/svgo/issues/27)) +* allow any plugin of any type to go in any order (close [#14](https://github.com/svg/svgo/issues/14)) +* allow to do a multiple optimizations with one init (close [#25](https://github.com/svg/svgo/issues/25)) +* plugins/convertPathData: global refactoring +* plugins/convertPathData: do all the tricks with absolute coords too (fix [#22](https://github.com/svg/svgo/issues/22)) +* plugins/convertPathData: accumulation of rounding errors (fix [#23](https://github.com/svg/svgo/issues/23)) +* plugins/convertPathData: prevent an infinity loop on invalid path data (fix [#26](https://github.com/svg/svgo/issues/26)) +* plugins/convertPathData: do not remove very first M from the path data (fix [#24](https://github.com/svg/svgo/issues/24)) +* plugins/convertPathData: optimize path data in <glyph> and <missing-glyph> (close [#20](https://github.com/svg/svgo/issues/20)) +* plugins/convertTransform: add patternTransform attribute to the process (close [#15](https://github.com/svg/svgo/issues/15)) +* plugins/convertTransform: Firefox: removing extra space in front of negative number is alowed only in path data, but not in transform (fix [#12](https://github.com/svg/svgo/issues/12)) +* plugins/removeXMLProcInst: remove only 'xml' but not 'xml-stylesheet' (fix [#21](https://github.com/svg/svgo/issues/15)) +* plugins/collapseGroups: merge split-level transforms (fix [#13](https://github.com/svg/svgo/issues/13)) +* jsdoc corrections + +### [ [>](https://github.com/svg/svgo/tree/v0.0.8) ] 0.0.8 / 20.10.2012 +* new plugin [convertTransform](plugins/convertTransform.js) (close [#5](https://github.com/svg/svgo/issues/5)) +* new plugin [removeUnusedNS](plugins/removeUnusedNS.js) +* plugins/convertPathData: remove useless segments +* plugins/convertPathData: a lot of refactoring +* plugins/convertPathData: round numbers before conditions because of exponential notation (fix [#3](https://github.com/svg/svgo/issues/3)) +* plugins/moveElemsAttrsToGroup: merge split-level transforms instead of replacing (fix [#10](https://github.com/svg/svgo/issues/10)) +* lib/svg2js: catch and output xml parser errors (fix [#4](https://github.com/svg/svgo/issues/4)) +* lib/coa: open file for writing only when we are ready (fix [#2](https://github.com/svg/svgo/issues/2)) +* lib/tools: node.extend module +* lib/plugins: refactoring +* lib/js2svg: refactoring +* lib/jsAPI: simplification and refactoring +* absolute urls in README +* update .editorconfig +* update .travis.yml with nodejs 0.9 + +### [ [>](https://github.com/svg/svgo/tree/v0.0.7) ] 0.0.7 / 14.10.2012 +* new plugin [convertPathData](plugins/convertPathData.js) +* --input data now can be a Data URI base64 string +* --output data now can be a Data URI base64 string with --datauri flag +* Travis CI +* JSHint corrections + .jshintrc +* [.editorconfig](http://editorconfig.org/) +* display time spent on optimization +* .svgo → config.json +* lib/phantom_wrapper.js → lib/phantom.js + +### [ [>](https://github.com/svg/svgo/tree/v0.0.6) ] 0.0.6 / 04.10.2012 +* add --test option to make a visual comparison of two files (PhantomJS pre-required) +* update README and CHANGELOG with the correct relative urls + +### [ [>](https://github.com/svg/svgo/tree/v0.0.5) ] 0.0.5 / 03.10.2012 +* every plugin now has [at least one test](plugins) +* removeViewBox, cleanupEnableBackground, removeEditorsNSData, convertStyleToAttrs and collapseGroups plugins fixes +* new --pretty option for the pretty printed SVG +* lib/config refactoring + +### [ [>](https://github.com/svg/svgo/tree/v0.0.4) ] 0.0.4 / 30.09.2012 +* new plugin [removeViewBox](plugins/removeViewBox.js) +* new plugin [cleanupEnableBackground](plugins/cleanupEnableBackground.js) +* display useful info after successful optimization +* 'npm test' with 'spec' mocha output by default + +### [ [>](https://github.com/svg/svgo/tree/v0.0.3) ] 0.0.3 / 29.09.2012 +* plugins/collapseGroups bugfix +* plugins/moveElemsAttrsToGroup bugfix +* svgo now display --help if running w/o arguments +* massive jsdoc updates +* plugins engine main filter function optimization + +### [ [>](https://github.com/svg/svgo/tree/v0.0.2) ] 0.0.2 / 28.09.2012 +* add --disable and --enable command line options +* add an empty values rejecting to coa.js +* update README + +### [ [>](https://github.com/svg/svgo/tree/v0.0.1) ] 0.0.1 / 27.09.2012 +* initial public version diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/LICENSE b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/LICENSE new file mode 100644 index 00000000..4c51fac2 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/LICENSE @@ -0,0 +1,55 @@ +The MIT License + +Copyright © 2012 Kir Belevich + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +Ð›Ð¸Ñ†ÐµÐ½Ð·Ð¸Ñ MIT + +Copyright © 2012 Кир Белевич + +Ð”Ð°Ð½Ð½Ð°Ñ Ð»Ð¸Ñ†ÐµÐ½Ð·Ð¸Ñ Ñ€Ð°Ð·Ñ€ÐµÑˆÐ°ÐµÑ‚ лицам, получившим копию данного +программного обеÑÐ¿ÐµÑ‡ÐµÐ½Ð¸Ñ Ð¸ ÑопутÑтвующей документации +(в дальнейшем именуемыми «Программное ОбеÑпечение»), безвозмездно +иÑпользовать Программное ОбеÑпечение без ограничений, Ð²ÐºÐ»ÑŽÑ‡Ð°Ñ +неограниченное право на иÑпользование, копирование, изменение, +добавление, публикацию, раÑпроÑтранение, Ñублицензирование +и/или продажу копий Программного ОбеÑпечениÑ, также как и лицам, +которым предоÑтавлÑетÑÑ Ð´Ð°Ð½Ð½Ð¾Ðµ Программное ОбеÑпечение, +при Ñоблюдении Ñледующих уÑловий: + +Указанное выше уведомление об авторÑком праве и данные уÑÐ»Ð¾Ð²Ð¸Ñ +должны быть включены во вÑе копии или значимые чаÑти данного +Программного ОбеÑпечениÑ. + +ДÐÐÐОЕ ПРОГРÐММÐОЕ ОБЕСПЕЧЕÐИЕ ПРЕДОСТÐВЛЯЕТСЯ «КÐК ЕСТЬ», +БЕЗ КÐКИХ-ЛИБО ГÐРÐÐТИЙ, ЯВÐО ВЫРÐЖЕÐÐЫХ ИЛИ ПОДРÐЗУМЕВÐЕМЫХ, +ВКЛЮЧÐЯ, ÐО ÐЕ ОГРÐÐИЧИВÐЯСЬ ГÐРÐÐТИЯМИ ТОВÐРÐОЙ ПРИГОДÐОСТИ, +СООТВЕТСТВИЯ ПО ЕГО КОÐКРЕТÐОМУ ÐÐЗÐÐЧЕÐИЮ И ОТСУТСТВИЯ ÐÐРУШЕÐИЙ +ПРÐÐ’. ÐИ Ð’ КÐКОМ СЛУЧÐЕ ÐВТОРЫ ИЛИ ПРÐВООБЛÐДÐТЕЛИ ÐЕ ÐЕСУТ +ОТВЕТСТВЕÐÐОСТИ ПО ИСКÐÐœ О ВОЗМЕЩЕÐИИ УЩЕРБÐ, УБЫТКОВ ИЛИ ДРУГИХ +ТРЕБОВÐÐИЙ ПО ДЕЙСТВУЮЩИМ КОÐТРÐКТÐÐœ, ДЕЛИКТÐÐœ ИЛИ ИÐОМУ, +ВОЗÐИКШИМ ИЗ, ИМЕЮЩИМ ПРИЧИÐОЙ ИЛИ СВЯЗÐÐÐЫМ С ПРОГРÐММÐЫМ +ОБЕСПЕЧЕÐИЕМ ИЛИ ИСПОЛЬЗОВÐÐИЕМ ПРОГРÐММÐОГО ОБЕСПЕЧЕÐИЯ +ИЛИ ИÐЫМИ ДЕЙСТВИЯМИ С ПРОГРÐММÐЫМ ОБЕСПЕЧЕÐИЕМ. diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/Makefile b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/Makefile new file mode 100644 index 00000000..650288bd --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/Makefile @@ -0,0 +1,21 @@ +test: + @NODE_ENV=test ./node_modules/.bin/mocha + +lib-cov: + @./node_modules/.bin/istanbul instrument --output lib-cov --no-compact --variable global.__coverage__ lib + +coverage: lib-cov + @COVERAGE=1 ISTANBUL_REPORTERS=text-summary ./node_modules/.bin/mocha --reporter mocha-istanbul + @rm -rf lib-cov + +coveralls: lib-cov + @COVERAGE=1 ISTANBUL_REPORTERS=lcovonly ./node_modules/.bin/mocha --reporter mocha-istanbul + @cat lcov.info | ./node_modules/.bin/coveralls + @rm -rf lib-cov lcov.info + +travis: jshint test coveralls + +jshint: + @jshint --show-non-errors . + +.PHONY: test diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/README.md b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/README.md new file mode 100644 index 00000000..ee54b8bc --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/README.md @@ -0,0 +1,146 @@ +**english** | [руÑÑкий](https://github.com/svg/svgo/blob/master/README.ru.md) +- - - + +logo + +## SVGO [![NPM version](https://badge.fury.io/js/svgo.svg)](https://npmjs.org/package/svgo) [![Dependency Status](https://gemnasium.com/svg/svgo.png)](https://gemnasium.com/svg/svgo) [![Build Status](https://secure.travis-ci.org/svg/svgo.svg)](https://travis-ci.org/svg/svgo) [![Coverage Status](https://img.shields.io/coveralls/svg/svgo.svg)](https://coveralls.io/r/svg/svgo?branch=master) + +**SVG O**ptimizer is a Nodejs-based tool for optimizing SVG vector graphics files. +![](https://mc.yandex.ru/watch/18431326) + +## Why? + +SVG files, especially exported from various editors, usually contains a lot of redundant and useless information such as editor metadata, comments, hidden elements, default or non-optimal values and other stuff that can be safely removed or converted without affecting SVG rendering result. + +## What it can do + +SVGO has a plugin-based architecture, so almost every optimization is a separate plugin. + +Today we have: + +* [ [ cleanupAttrs](https://github.com/svg/svgo/blob/master/plugins/cleanupAttrs.js) ] cleanup attributes from newlines, trailing and repeating spaces +* [ [ removeDoctype](https://github.com/svg/svgo/blob/master/plugins/removeDoctype.js) ] remove doctype declaration +* [ [ removeXMLProcInst](https://github.com/svg/svgo/blob/master/plugins/removeXMLProcInst.js) ] remove XML processing instructions +* [ [ removeComments](https://github.com/svg/svgo/blob/master/plugins/removeComments.js) ] remove comments +* [ [ removeMetadata](https://github.com/svg/svgo/blob/master/plugins/removeMetadata.js) ] remove `` +* [ [ removeTitle](https://github.com/svg/svgo/blob/master/plugins/removeTitle.js) ] remove `` (disabled by default) +* [ [ removeDesc](https://github.com/svg/svgo/blob/master/plugins/removeDesc.js) ] remove `<desc>` (only non-meaningful by default) +* [ [ removeUselessDefs](https://github.com/svg/svgo/blob/master/plugins/removeUselessDefs.js) ] remove elements of `<defs>` without `id` +* [ [ removeEditorsNSData](https://github.com/svg/svgo/blob/master/plugins/removeEditorsNSData.js) ] remove editors namespaces, elements and attributes +* [ [ removeEmptyAttrs](https://github.com/svg/svgo/blob/master/plugins/removeEmptyAttrs.js) ] remove empty attributes +* [ [ removeHiddenElems](https://github.com/svg/svgo/blob/master/plugins/removeHiddenElems.js) ] remove hidden elements +* [ [ removeEmptyText](https://github.com/svg/svgo/blob/master/plugins/removeEmptyText.js) ] remove empty Text elements +* [ [ removeEmptyContainers](https://github.com/svg/svgo/blob/master/plugins/removeEmptyContainers.js) ] remove empty Container elements +* [ [ removeViewBox](https://github.com/svg/svgo/blob/master/plugins/removeViewBox.js) ] remove `viewBox` attribute when possible (disabled by default) +* [ [ cleanUpEnableBackground](https://github.com/svg/svgo/blob/master/plugins/cleanupEnableBackground.js) ] remove or cleanup `enable-background` attribute when possible +* [ [ convertTyleToAttrs](https://github.com/svg/svgo/blob/master/plugins/convertStyleToAttrs.js) ] convert styles into attributes +* [ [ convertColors](https://github.com/svg/svgo/blob/master/plugins/convertColors.js) ] convert colors (from `rgb()` to `#rrggbb`, from `#rrggbb` to `#rgb`) +* [ [ convertPathData](https://github.com/svg/svgo/blob/master/plugins/convertPathData.js) ] convert Path data to relative or absolute whichever is shorter, convert one segment to another, trim useless delimiters, smart rounding and much more +* [ [ convertTransform](https://github.com/svg/svgo/blob/master/plugins/convertTransform.js) ] collapse multiple transforms into one, convert matrices to the short aliases and much more +* [ [ removeUnknownsAndDefaults](https://github.com/svg/svgo/blob/master/plugins/removeUnknownsAndDefaults.js) ] remove unknown elements content and attributes, remove attrs with default values +* [ [ removeNonInheritableGroupAttrs](https://github.com/svg/svgo/blob/master/plugins/removeNonInheritableGroupAttrs.js) ] remove non-inheritable group's "presentation" attributes +* [ [ removeUselessStrokeAndFill](https://github.com/svg/svgo/blob/master/plugins/removeUselessStrokeAndFill.js) ] remove useless stroke and fill attrs +* [ [ removeUnusedNS](https://github.com/svg/svgo/blob/master/plugins/removeUnusedNS.js) ] remove unused namespaces declaration +* [ [ cleanupIDs](https://github.com/svg/svgo/blob/master/plugins/cleanupIDs.js) ] remove unused and minify used IDs +* [ [ cleanupNumericValues](https://github.com/svg/svgo/blob/master/plugins/cleanupNumericValues.js) ] round numeric values to the fixed precision, remove default 'px' units +* [ [ moveElemsAttrsToGroup](https://github.com/svg/svgo/blob/master/plugins/moveElemsAttrsToGroup.js) ] move elements attributes to the existing group wrapper +* [ [ moveGroupAttrsToElems](https://github.com/svg/svgo/blob/master/plugins/moveGroupAttrsToElems.js) ] move some group attributes to the content elements +* [ [ collapseGroups](https://github.com/svg/svgo/blob/master/plugins/collapseGroups.js) ] collapse useless groups +* [ [ removeRasterImages](https://github.com/svg/svgo/blob/master/plugins/removeRasterImages.js) ] remove raster images (disabled by default) +* [ [ mergePaths](https://github.com/svg/svgo/blob/master/plugins/mergePaths.js) ] merge multiple Paths into one +* [ [ convertShapeToPath](https://github.com/svg/svgo/blob/master/plugins/convertShapeToPath.js) ] convert some basic shapes to path +* [ [ sortAttrs](https://github.com/svg/svgo/blob/master/plugins/sortAttrs.js) ] sort element attributes for epic readability (disabled by default) +* [ [ transformsWithOnePath](https://github.com/svg/svgo/blob/master/plugins/transformsWithOnePath.js) ] apply transforms, crop by real width, center vertical alignment and resize SVG with one Path inside (disabled by default) +* [ [ removeDimensions](https://github.com/svg/svgo/blob/master/plugins/removeDimensions.js) ] remove width/height attributes if viewBox is present (disabled by default) +* [ [ removeAttrs](https://github.com/svg/svgo/blob/master/plugins/removeAttrs.js) ] remove attributes by pattern (disabled by default) +* [ [ addClassesToSVGElement](https://github.com/svg/svgo/blob/master/plugins/addClassesToSVGElement.js) ] add classnames to an outer `<svg>` element (disabled by default) + +Want to know how it works and how to write your own plugin? [Of course you want to](https://github.com/svg/svgo/blob/master/docs/how-it-works/en.md). + + +## How to use + +```sh +$ [sudo] npm install -g svgo +``` + +``` +Usage: + svgo [OPTIONS] [ARGS] + +Options: + -h, --help : Help + -v, --version : Version + -i INPUT, --input=INPUT : Input file, "-" for STDIN + -s STRING, --string=STRING : Input SVG data string + -f FOLDER, --folder=FOLDER : Input folder, optimize and rewrite all *.svg files + -o OUTPUT, --output=OUTPUT : Output file or folder (by default the same as the input), "-" for STDOUT + -p PRECISION, --precision=PRECISION : Set number of digits in the fractional part, overrides plugins params + --config=CONFIG : Config file to extend or replace default + --disable=DISABLE : Disable plugin by name + --enable=ENABLE : Enable plugin by name + --datauri=DATAURI : Output as Data URI string (base64, URI encoded or unencoded) + --pretty : Make SVG pretty printed + --show-plugins : Show available plugins and exit + +Arguments: + INPUT : Alias to --input + OUTPUT : Alias to --output +``` + +* with files: + + $ svgo test.svg + + or: + + $ svgo test.svg test.min.svg + +* with STDIN / STDOUT: + + $ cat test.svg | svgo -i - -o - > test.min.svg + +* with folder + + $ svgo -f ../path/to/folder/with/svg/files + + or: + + $ svgo -f ../path/to/folder/with/svg/files -o ../path/to/folder/with/svg/output + +* with strings: + + $ svgo -s '<svg version="1.1">test</svg>' -o test.min.svg + + or even with Data URI base64: + + $ svgo -s 'data:image/svg+xml;base64,…' -o test.min.svg + +* with SVGZ: + + from `.svgz` to `.svg`: + + $ gunzip -c test.svgz | svgo -i - -o test.min.svg + + from `.svg` to `.svgz`: + + $ svgo test.svg -o - | gzip -cfq9 > test.svgz + +* with GUI – [svgo-gui](https://github.com/svg/svgo-gui) +* as a web app - [SVGOMG](https://jakearchibald.github.io/svgomg/) +* as a Nodejs module – [examples](https://github.com/svg/svgo/tree/master/examples) +* as a Grunt task – [grunt-svgmin](https://github.com/sindresorhus/grunt-svgmin) +* as a Gulp task – [gulp-svgmin](https://github.com/ben-eb/gulp-svgmin) +* as a Mimosa module – [mimosa-minify-svg](https://github.com/dbashford/mimosa-minify-svg) +* as an OSX Folder Action – [svgo-osx-folder-action](https://github.com/svg/svgo-osx-folder-action) +* as a webpack loader – [image-webpack-loader](https://github.com/tcoopman/image-webpack-loader) + +## Donate + +BTC `1zVZYqRSzQ4aaL27rp3PLwFFSXpfs5H8r` + +## License and copyrights + +This software is released under the terms of the [MIT license](https://github.com/svg/svgo/blob/master/LICENSE). + +Logo by [Yegor Bolshakov](http://xizzzy.ru/). diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/README.ru.md b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/README.ru.md new file mode 100644 index 00000000..92a76042 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/README.ru.md @@ -0,0 +1,145 @@ +[english](https://github.com/svg/svgo/blob/master/README.md) | **руÑÑкий** +- - - + +<img src="https://svg.github.io/svgo-logo.svg" width="200" height="200" alt="logo"/> + +## SVGO [![NPM version](https://badge.fury.io/js/svgo.svg)](https://npmjs.org/package/svgo) [![Dependency Status](https://gemnasium.com/svg/svgo.png)](https://gemnasium.com/svg/svgo) [![Build Status](https://secure.travis-ci.org/svg/svgo.svg)](https://travis-ci.org/svg/svgo) [![Coverage Status](https://img.shields.io/coveralls/svg/svgo.svg)](https://coveralls.io/r/svg/svgo?branch=master) + +**SVG** **O**ptimizer – Ñто инÑтрумент Ð´Ð»Ñ Ð¾Ð¿Ñ‚Ð¸Ð¼Ð¸Ð·Ð°Ñ†Ð¸Ð¸ векторной графики в формате SVG, напиÑанный на Node.js. +![](https://mc.yandex.ru/watch/18431326) + +## Зачем? + +SVG-файлы, оÑобенно – ÑкÑпортированные из различных редакторов, Ñодержат много избыточной и беÑполезной информации, комментариев, Ñкрытых Ñлементов, неоптимальные или Ñтандартные Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¸ другой муÑор, удаление которого безопаÑно и не влиÑет на конечный результат отриÑовки. + +## ВозможноÑти + +SVGO имеет раÑширÑемую архитектуру, в которой почти ÐºÐ°Ð¶Ð´Ð°Ñ Ð¾Ð¿Ñ‚Ð¸Ð¼Ð¸Ð·Ð°Ñ†Ð¸Ñ ÑвлÑетÑÑ Ð¾Ñ‚Ð´ÐµÐ»ÑŒÐ½Ñ‹Ð¼ раÑширением. + +Ð¡ÐµÐ³Ð¾Ð´Ð½Ñ Ñƒ Ð½Ð°Ñ ÐµÑÑ‚ÑŒ: + +* [ [ cleanupAttrs](https://github.com/svg/svgo/blob/master/plugins/cleanupAttrs.js) ] удаление переноÑов Ñтрок и лишних пробелов +* [ [ removeDoctype](https://github.com/svg/svgo/blob/master/plugins/removeDoctype.js) ] удаление doctype +* [ [ removeXMLProcInst](https://github.com/svg/svgo/blob/master/plugins/removeXMLProcInst.js) ] удаление XML-инÑтрукций +* [ [ removeComments](https://github.com/svg/svgo/blob/master/plugins/removeComments.js) ] удаление комментариев +* [ [ removeMetadata](https://github.com/svg/svgo/blob/master/plugins/removeMetadata.js) ] удаление `<metadata>` +* [ [ removeTitle](https://github.com/svg/svgo/blob/master/plugins/removeTitle.js) ] удаление `<title>` (отключена по умолчанию) +* [ [ removeDesc](https://github.com/svg/svgo/blob/master/plugins/removeDesc.js) ] удаление `<desc>` (по умолчанию только незначимых) +* [ [ removeUselessDefs](https://github.com/svg/svgo/blob/master/plugins/removeUselessDefs.js) ] удаление Ñлементов в `<defs>` без `id` +* [ [ removeEditorsNSData](https://github.com/svg/svgo/blob/master/plugins/removeEditorsNSData.js) ] удаление проÑтранÑтв имён различных редакторов, их Ñлементов и атрибутов +* [ [ removeEmptyAttrs](https://github.com/svg/svgo/blob/master/plugins/removeEmptyAttrs.js) ] удаление пуÑÑ‚Ñ‹Ñ… атрибутов +* [ [ removeHiddenElems](https://github.com/svg/svgo/blob/master/plugins/removeHiddenElems.js) ] удаление Ñкрытых Ñлементов +* [ [ removeEmptyText](https://github.com/svg/svgo/blob/master/plugins/removeEmptyText.js) ] удаление пуÑÑ‚Ñ‹Ñ… текÑтовых Ñлементов +* [ [ removeEmptyContainers](https://github.com/svg/svgo/blob/master/plugins/removeEmptyContainers.js) ] удаление пуÑÑ‚Ñ‹Ñ… Ñлементов-контейнеров +* [ [ removeViewBox](https://github.com/svg/svgo/blob/master/plugins/removeViewBox.js) ] удаление атрибута `viewBox`, когда Ñто возможно +* [ [ cleanupEnableBackground](https://github.com/svg/svgo/blob/master/plugins/cleanupEnableBackground.js) ] удаление или Ð¾Ð¿Ñ‚Ð¸Ð¼Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð° `enable-background`, когда Ñто возможно +* [ [ convertStyleToAttrs](https://github.com/svg/svgo/blob/master/plugins/convertStyleToAttrs.js) ] конвертирование Ñтилей в атрибуте `style` в отдельные svg-атрибуты +* [ [ convertColors](https://github.com/svg/svgo/blob/master/plugins/convertColors.js) ] конвертирование цветовых значений: из `rgb()` в `#rrggbb`, из `#rrggbb` в `#rgb` +* [ [ convertPathData](https://github.com/svg/svgo/blob/master/plugins/convertPathData.js) ] конвертирование данных Path в отноÑительные или абÑолютные координаты, ÑÐ¼Ð¾Ñ‚Ñ€Ñ Ñ‡Ñ‚Ð¾ короче, конвертирование одних типов Ñегментов в другие, удаление ненужных разделителей, умное округление и тому подобное +* [ [ convertTransform](https://github.com/svg/svgo/blob/master/plugins/convertTransform.js) ] Ñхлопывание неÑкольких транÑформаций в одну, конвертирование матриц в короткие алиаÑÑ‹ и многое другое +* [ [ removeUnknownsAndDefaults](https://github.com/svg/svgo/blob/master/plugins/removeUnknownsAndDefaults.js) ] удаление неизвеÑтных Ñлементов, контента и атрибутов +* [ [ removeNonInheritableGroupAttrs](https://github.com/svg/svgo/blob/master/plugins/removeNonInheritableGroupAttrs.js) ] удаление ненаÑледуемых "презентационных" атрибутов групп +* [ [ removeUselessStrokeAndFill](https://github.com/svg/svgo/blob/master/plugins/removeUselessStrokeAndFill.js) ] удаление неиÑпользуемых атрибутов stroke-* и fill-* +* [ [ removeUnusedNS](https://github.com/svg/svgo/blob/master/plugins/removeUnusedNS.js) ] удаление деклараций неиÑпользуемых проÑтранÑтв имён +* [ [ cleanupIDs](https://github.com/svg/svgo/blob/master/plugins/cleanupIDs.js) ] удаление неиÑпользуемых и Ñокращение иÑпользуемых ID +* [ [ cleanupNumericValues](https://github.com/svg/svgo/blob/master/plugins/cleanupNumericValues.js) ] округление дробных чиÑел до заданной точноÑти, удаление `px` как единицы Ð¸Ð·Ð¼ÐµÑ€ÐµÐ½Ð¸Ñ Ð¿Ð¾-умолчанию +* [ [ moveElemsAttrsToGroup](https://github.com/svg/svgo/blob/master/plugins/moveElemsAttrsToGroup.js) ] перемещение Ñовпадающих атрибутов у вÑех Ñлементов внутри группы `<g>` +* [ [ moveGroupAttrsToElems](https://github.com/svg/svgo/blob/master/plugins/moveGroupAttrsToElems.js) ] перемещение некоторых атрибутов группы на Ñлементы внутри +* [ [ collapseGroups](https://github.com/svg/svgo/blob/master/plugins/collapseGroups.js) ] Ñхлопывание беÑполезных групп `<g>` +* [ [ removeRasterImage](https://github.com/svg/svgo/blob/master/plugins/removeRasterImages.js) ] удаление раÑтровых изображений (выключено по умолчанию) +* [ [ mergePaths](https://github.com/svg/svgo/blob/master/plugins/mergePaths.js) ] Ñклеивание неÑкольких Path в одну кривую +* [ [ convertShapeToPath](https://github.com/svg/svgo/blob/master/plugins/convertShapeToPath.js) ] конвертирование проÑÑ‚Ñ‹Ñ… форм в Path +* [ [ sortAttrs](https://github.com/svg/svgo/blob/master/plugins/sortAttrs.js) ] Ñортировка атрибутов Ñлементов Ð´Ð»Ñ ÑƒÐ´Ð¾Ð±Ð¾Ñ‡Ð¸Ñ‚Ð°ÐµÐ¼Ð¾Ñти (выключено по умолчанию) +* [ [ transformsWithOnePath](https://github.com/svg/svgo/blob/master/plugins/transformsWithOnePath.js) ] применение транÑформаций, обрезка по реальной ширине, вертикальное выравнивание по центру и изменение размеров SVG Ñ Ð¾Ð´Ð½Ð¸Ð¼ Path внутри +* [ [ removeDimensions](https://github.com/svg/svgo/blob/master/plugins/removeDimensions.js) ] удалÑет атрибуты width/height при наличии viewBox (выключено по умолчанию) +* [ [ removeAttrs](https://github.com/svg/svgo/blob/master/plugins/removeAttrs.js) ] удалÑет атрибуты по указанному паттерну (выключено по умолчанию) +* [ [ addClassesToSVGElement](https://github.com/svg/svgo/blob/master/plugins/addClassesToSVGElement.js) ] добавлÑет имена клаÑÑов корневому Ñлементу `<svg>` (выключено по умолчанию) + +Хотите узнать, как Ñто работает и как напиÑать Ñвой плагин? [Конечно же, да!](https://github.com/svg/svgo/blob/master/docs/how-it-works/ru.md). + + +## Как иÑпользовать + +```sh +$ [sudo] npm install -g svgo +``` + +``` +Выполнение: + svgo [OPTIONS] [ARGS] + +Параметры: + -h, --help : Помощь + -v, --version : ВерÑÐ¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹ + -i INPUT, --input=INPUT : Входной файл, "-" Ð´Ð»Ñ STDIN + -s STRING, --string=STRING : Ð’Ñ…Ð¾Ð´Ð½Ð°Ñ Ñтрока SVG + -f FOLDER, --folder=FOLDER : Ð’Ñ…Ð¾Ð´Ð½Ð°Ñ Ð¿Ð°Ð¿ÐºÐ°, оптимизирует и перезапиÑывает вÑе файлы *.svg + -o OUTPUT, --output=OUTPUT : Выходной файл или папка (Ñовпадает Ñ входным по умолчанию), "-" Ð´Ð»Ñ STDOUT + -p PRECISION, --precision=PRECISION : ЧиÑло цифр поÑле запÑтой, переопределÑет параметры плагинов + --config=CONFIG : Файл конфигурации Ð´Ð»Ñ Ñ€Ð°ÑÑˆÐ¸Ñ€ÐµÐ½Ð¸Ñ Ð¸ замены наÑтроек + --disable=DISABLE : Выключение плагина по имени + --enable=ENABLE : Включение плагина по имени + --datauri=DATAURI : Результат в виде Ñтроки Data URI (base64, URI encoded или unencoded) + --pretty : Удобочитаемое форматирование SVG + --show-plugins : доÑтупные плагины + +Ðргументы: + INPUT : Ðналогично --input + OUTPUT : Ðналогично --output +``` + +* Ñ Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸: + + $ svgo test.svg + + или: + + $ svgo test.svg test.min.svg + +* Ñо STDIN / STDOUT: + + $ cat test.svg | svgo -i - -o - > test.min.svg + +* Ñ Ð¿Ð°Ð¿ÐºÐ°Ð¼Ð¸ + + $ svgo -f ../path/to/folder/with/svg/files + + или: + + $ svgo -f ../path/to/folder/with/svg/files -o ../path/to/folder/with/svg/output + +* Ñо Ñтроками: + + $ svgo -s '<svg version="1.1">test</svg>' -o test.min.svg + + или даже Ñ Data URI base64: + + $ svgo -s 'data:image/svg+xml;base64,…' -o test.min.svg + +* Ñ SVGZ: + + из `.svgz` в `.svg`: + + $ gunzip -c test.svgz | svgo -i - -o test.min.svg + + из `.svg` в `.svgz`: + + $ svgo test.svg -o - | gzip -cfq9 > test.svgz + +* Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ GUI – [svgo-gui](https://github.com/svg/svgo-gui) +* в виде веб-Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ - [SVGOMG](https://jakearchibald.github.io/svgomg/) +* как модуль Node.js – [examples](https://github.com/svg/svgo/tree/master/examples) +* как таÑк Ð´Ð»Ñ Grunt – [grunt-svgmin](https://github.com/sindresorhus/grunt-svgmin) +* как таÑк Ð´Ð»Ñ Gulp – [gulp-svgmin](https://github.com/ben-eb/gulp-svgmin) +* как таÑк Ð´Ð»Ñ Mimosa – [mimosa-minify-svg](https://github.com/dbashford/mimosa-minify-svg) +* как дейÑтвие папки в OSX – [svgo-osx-folder-action](https://github.com/svg/svgo-osx-folder-action) + +## ÐŸÐ¾Ð¶ÐµÑ€Ñ‚Ð²Ð¾Ð²Ð°Ð½Ð¸Ñ + +BTC `1zVZYqRSzQ4aaL27rp3PLwFFSXpfs5H8r` + +## Ð›Ð¸Ñ†ÐµÐ½Ð·Ð¸Ñ Ð¸ копирайты + +Данное программное обеÑпечение выпуÑкаетÑÑ Ð¿Ð¾Ð´ [лицензией MIT](https://github.com/svg/svgo/blob/master/LICENSE). + +Логотип – [Егор Большаков](http://xizzzy.ru/). diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/bin/svgo b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/bin/svgo new file mode 100644 index 00000000..2fd77c02 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/bin/svgo @@ -0,0 +1,3 @@ +#!/usr/bin/env node + +require('../lib/svgo/coa').run(); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/lib/svgo.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/lib/svgo.js new file mode 100644 index 00000000..5824fc89 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/lib/svgo.js @@ -0,0 +1,81 @@ +'use strict'; + +/** + * SVGO is a Nodejs-based tool for optimizing SVG vector graphics files. + * + * @see https://github.com/svg/svgo + * + * @author Kir Belevich <kir@soulshine.in> (https://github.com/deepsweet) + * @copyright © 2012 Kir Belevich + * @license MIT https://raw.githubusercontent.com/svg/svgo/master/LICENSE + */ + +var CONFIG = require('./svgo/config'), + SVG2JS = require('./svgo/svg2js'), + PLUGINS = require('./svgo/plugins'), + JSAPI = require('./svgo/jsAPI.js'), + JS2SVG = require('./svgo/js2svg'); + +var SVGO = module.exports = function(config) { + + this.config = CONFIG(config); + +}; + +SVGO.prototype.optimize = function(svgstr, callback) { + + var _this = this, + config = this.config, + maxPassCount = config.multipass ? 10 : 1, + counter = 0, + prevResultSize = Number.POSITIVE_INFINITY, + optimizeOnceCallback = function(svgjs) { + + if (svgjs.error) { + callback(svgjs); + return; + } + + if (++counter < maxPassCount && svgjs.data.length < prevResultSize) { + prevResultSize = svgjs.data.length; + _this._optimizeOnce(svgjs.data, optimizeOnceCallback); + } else { + callback(svgjs); + } + + }; + + _this._optimizeOnce(svgstr, optimizeOnceCallback); + +}; + +SVGO.prototype._optimizeOnce = function(svgstr, callback) { + + var config = this.config; + + SVG2JS(svgstr, function(svgjs) { + + if (svgjs.error) { + callback(svgjs); + return; + } + + svgjs = PLUGINS(svgjs, config.plugins); + + callback(JS2SVG(svgjs, config.js2svg)); + + }); + +}; + +/** + * The factory that creates a content item with the helper methods. + * + * @param {Object} data which passed to jsAPI constructor + * @returns {JSAPI} content item + */ +SVGO.prototype.createContentItem = function(data) { + + return new JSAPI(data); + +}; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/lib/svgo/coa.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/lib/svgo/coa.js new file mode 100644 index 00000000..5baf7e37 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/lib/svgo/coa.js @@ -0,0 +1,547 @@ +/* jshint quotmark: false */ +'use strict'; + +require('colors'); + +var FS = require('fs'), + PATH = require('path'), + SVGO = require('../svgo'), + YAML = require('js-yaml'), + PKG = require('../../package.json'), + mkdirp = require('mkdirp'), + encodeSVGDatauri = require('./tools').encodeSVGDatauri, + decodeSVGDatauri = require('./tools').decodeSVGDatauri, + regSVGFile = /\.svg$/; + +/** + * Command-Option-Argument. + * + * @see https://github.com/veged/coa + */ +module.exports = require('coa').Cmd() + .helpful() + .name(PKG.name) + .title(PKG.description) + .opt() + .name('version').title('Version') + .short('v').long('version') + .only() + .flag() + .act(function() { + return PKG.version; + }) + .end() + .opt() + .name('input').title('Input file, "-" for STDIN') + .short('i').long('input') + .val(function(val) { + return val || this.reject("Option '--input' must have a value."); + }) + .end() + .opt() + .name('string').title('Input SVG data string') + .short('s').long('string') + .end() + .opt() + .name('folder').title('Input folder, optimize and rewrite all *.svg files') + .short('f').long('folder') + .val(function(val) { + return val || this.reject("Option '--folder' must have a value."); + }) + .end() + .opt() + .name('output').title('Output file or folder (by default the same as the input), "-" for STDOUT') + .short('o').long('output') + .val(function(val) { + return val || this.reject("Option '--output' must have a value."); + }) + .end() + .opt() + .name('precision').title('Set number of digits in the fractional part, overrides plugins params') + .short('p').long('precision') + .val(function(val) { + return !isNaN(val) ? val : this.reject("Option '--precision' must be an integer number"); + }) + .end() + .opt() + .name('config').title('Config file to extend or replace default') + .long('config') + .val(function(val) { + return val || this.reject("Option '--config' must have a value."); + }) + .end() + .opt() + .name('disable').title('Disable plugin by name') + .long('disable') + .arr() + .val(function(val) { + return val || this.reject("Option '--disable' must have a value."); + }) + .end() + .opt() + .name('enable').title('Enable plugin by name') + .long('enable') + .arr() + .val(function(val) { + return val || this.reject("Option '--enable' must have a value."); + }) + .end() + .opt() + .name('datauri').title('Output as Data URI string (base64, URI encoded or unencoded)') + .long('datauri') + .val(function(val) { + return val || this.reject("Option '--datauri' must have one of the following values: 'base64', 'enc' or 'unenc'"); + }) + .end() + .opt() + .name('multipass').title('Enable multipass') + .long('multipass') + .flag() + .end() + .opt() + .name('pretty').title('Make SVG pretty printed') + .long('pretty') + .flag() + .end() + .opt() + .name('show-plugins').title('Show available plugins and exit') + .long('show-plugins') + .flag() + .end() + .arg() + .name('input').title('Alias to --input') + .end() + .arg() + .name('output').title('Alias to --output') + .end() + .act(function(opts, args) { + + var input = args && args.input ? args.input : opts.input, + output = args && args.output ? args.output : opts.output, + config = {}; + + // --show-plugins + if (opts['show-plugins']) { + + showAvailablePlugins(); + process.exit(0); + + } + + // w/o anything + if ( + (!input || input === '-') && + !opts.string && + !opts.stdin && + !opts.folder && + process.stdin.isTTY + ) return this.usage(); + + + // --config + if (opts.config) { + + // string + if (opts.config.charAt(0) === '{') { + config = JSON.parse(opts.config); + + // external file + } else { + var configPath = PATH.resolve(opts.config); + try { + // require() adds some weird output on YML files + config = JSON.parse(FS.readFileSync(configPath, 'utf8')); + } catch (err) { + if (err.code === 'ENOENT') { + console.error('Error: couldn\'t find config file \'' + opts.config + '\'.'); + return; + } else if (err.code === 'EISDIR') { + console.error('Error: directory \'' + opts.config + '\' is not a config file.'); + return; + } + config = YAML.safeLoad(FS.readFileSync(configPath, 'utf8')); + + if (!config || Array.isArray(config)) { + console.error('Error: invalid config file \'' + opts.config + '\'.'); + return; + } + } + } + + } + + // --precision + if (opts.precision) { + config.floatPrecision = Math.max(0, parseInt(opts.precision)); + } + + // --disable + if (opts.disable) { + config = changePluginsState(opts.disable, false, config); + } + + // --enable + if (opts.enable) { + config = changePluginsState(opts.enable, true, config); + } + + // --multipass + if (opts.multipass) { + + config.multipass = true; + + } + + // --pretty + if (opts.pretty) { + + config.js2svg = config.js2svg || {}; + config.js2svg.pretty = true; + + } + + // --output + if (opts.output) { + config.output = opts.output; + } + + // --folder + if (opts.folder) { + optimizeFolder(opts.folder, config, output); + + return; + } + + // --input + if (input) { + + // STDIN + if (input === '-') { + + var data = ''; + + process.stdin.pause(); + + process.stdin + .on('data', function(chunk) { + data += chunk; + }) + .once('end', function() { + optimizeFromString(data, config, opts.datauri, input, output); + }) + .resume(); + + // file + } else { + + FS.readFile(input, 'utf8', function(err, data) { + if (err) { + if (err.code === 'EISDIR') + optimizeFolder(input, config, output); + else if (err.code === 'ENOENT') + console.error('Error: no such file or directory \'' + input + '\'.'); + else + console.error(err); + return; + } + optimizeFromString(data, config, opts.datauri, input, output); + }); + + } + + // --string + } else if (opts.string) { + + opts.string = decodeSVGDatauri(opts.string); + + optimizeFromString(opts.string, config, opts.datauri, input, output); + + } + + }); + +function optimizeFromString(svgstr, config, datauri, input, output) { + + var startTime = Date.now(config), + time, + inBytes = Buffer.byteLength(svgstr, 'utf8'), + outBytes, + svgo = new SVGO(config); + + svgo.optimize(svgstr, function(result) { + + if (result.error) { + console.error(result.error); + return; + } + + if (datauri) { + result.data = encodeSVGDatauri(result.data, datauri); + } + + outBytes = Buffer.byteLength(result.data, 'utf8'); + time = Date.now() - startTime; + + // stdout + if (output === '-' || (input === '-' && !output)) { + + process.stdout.write(result.data + '\n'); + + // file + } else { + + // overwrite input file if there is no output + if (!output && input) { + output = input; + } + + console.log('\r'); + + saveFileAndPrintInfo(result.data, output, inBytes, outBytes, time); + + } + + }); + +} + +function saveFileAndPrintInfo(data, path, inBytes, outBytes, time) { + + FS.writeFile(path, data, 'utf8', function() { + + // print time info + printTimeInfo(time); + + // print optimization profit info + printProfitInfo(inBytes, outBytes); + + }); + +} + +function printTimeInfo(time) { + + console.log('Done in ' + time + ' ms!'); + +} + +function printProfitInfo(inBytes, outBytes) { + + var profitPercents = 100 - outBytes * 100 / inBytes; + + console.log( + (Math.round((inBytes / 1024) * 1000) / 1000) + ' KiB' + + (profitPercents < 0 ? ' + ' : ' - ') + + String(Math.abs((Math.round(profitPercents * 10) / 10)) + '%').green + ' = ' + + (Math.round((outBytes / 1024) * 1000) / 1000) + ' KiB\n' + ); + +} + +/** + * Change plugins state by names array. + * + * @param {Array} names plugins names + * @param {Boolean} state active state + * @param {Object} config original config + * @return {Object} changed config + */ +function changePluginsState(names, state, config) { + + // extend config + if (config && config.plugins) { + + names.forEach(function(name) { + + var matched, + key; + + config.plugins.forEach(function(plugin) { + + // get plugin name + if (typeof plugin === 'object') { + key = Object.keys(plugin)[0]; + } else { + key = plugin; + } + + // if there are such plugin name + if (key === name) { + // do not replace plugin's params with true + if (typeof plugin[key] !== 'object' || !state) { + plugin[key] = state; + } + + // mark it as matched + matched = true; + } + + }); + + // if not matched and current config is not full + if (!matched && !config.full) { + + var obj = {}; + + obj[name] = state; + + // push new plugin Object + config.plugins.push(obj); + + matched = true; + + } + + }); + + // just push + } else { + + config = { plugins: [] }; + + names.forEach(function(name) { + var obj = {}; + + obj[name] = state; + + config.plugins.push(obj); + }); + + } + + return config; + +} + +function optimizeFolder(dir, config, output) { + + var svgo = new SVGO(config); + + console.log('Processing directory \'' + dir + '\':\n'); + + // absoluted folder path + var path = PATH.resolve(dir); + + // list folder content + FS.readdir(path, function(err, files) { + + if (err) { + console.error(err); + return; + } + + if (!files.length) { + console.log('Directory \'' + dir + '\' is empty.'); + return; + } + + var i = 0, + found = false; + + function optimizeFile(file) { + + // absoluted file path + var filepath = PATH.resolve(path, file); + var outfilepath = output ? PATH.resolve(output, file) : filepath; + + // check if file name matches *.svg + if (regSVGFile.test(filepath)) { + + found = true; + FS.readFile(filepath, 'utf8', function(err, data) { + + if (err) { + console.error(err); + return; + } + + var startTime = Date.now(), + time, + inBytes = Buffer.byteLength(data, 'utf8'), + outBytes; + + svgo.optimize(data, function(result) { + + if (result.error) { + console.error(result.error); + return; + } + + outBytes = Buffer.byteLength(result.data, 'utf8'); + time = Date.now() - startTime; + + writeOutput(); + + function writeOutput() { + FS.writeFile(outfilepath, result.data, 'utf8', report); + } + + function report(err) { + + if (err) { + if (err.code === 'ENOENT') { + mkdirp(output, writeOutput); + return; + } else if (err.code === 'ENOTDIR') { + console.error('Error: output \'' + output + '\' is not a directory.'); + return; + } + console.error(err); + return; + } + + console.log(file + ':'); + + // print time info + printTimeInfo(time); + + // print optimization profit info + printProfitInfo(inBytes, outBytes); + + //move on to the next file + if (++i < files.length) { + optimizeFile(files[i]); + } + + } + + }); + + }); + + } + //move on to the next file + else if (++i < files.length) { + optimizeFile(files[i]); + } else if (!found) { + console.log('No SVG files have been found.'); + } + + + } + + optimizeFile(files[i]); + + }); + +} + + +var showAvailablePlugins = function () { + + var svgo = new SVGO(); + + console.log('Currently available plugins:'); + + svgo.config.plugins.forEach(function (plugins) { + + plugins.forEach(function (plugin) { + + console.log(' [ ' + plugin.name.green + ' ] ' + plugin.description); + + }); + + }); + + //console.log(JSON.stringify(svgo, null, 4)); +}; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/lib/svgo/config.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/lib/svgo/config.js new file mode 100644 index 00000000..f3c34efc --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/lib/svgo/config.js @@ -0,0 +1,224 @@ +'use strict'; + +var FS = require('fs'); +var yaml = require('js-yaml'); + +var EXTEND = require('whet.extend'); + +/** + * Read and/or extend/replace default config file, + * prepare and optimize plugins array. + * + * @param {Object} [config] input config + * @return {Object} output config + */ +module.exports = function(config) { + + var defaults; + + if (config && config.full) { + + defaults = config; + + if (defaults.plugins) { + defaults.plugins = preparePluginsArray(defaults.plugins); + defaults.plugins = optimizePluginsArray(defaults.plugins); + } + + defaults.multipass = config.multipass; + + } else { + + defaults = EXTEND({}, yaml.safeLoad(FS.readFileSync(__dirname + '/../../.svgo.yml', 'utf8'))); + + defaults.plugins = preparePluginsArray(defaults.plugins); + + if (config) { + defaults = extendConfig(defaults, config); + defaults.multipass = config.multipass; + + if ('floatPrecision' in config) { + defaults.plugins.forEach(function(plugin) { + if (plugin.params && ('floatPrecision' in plugin.params)) { + plugin.params.floatPrecision = config.floatPrecision; + } + }); + } + } + + defaults.plugins = optimizePluginsArray(defaults.plugins); + + } + + return defaults; + +}; + +/** + * Require() all plugins in array. + * + * @param {Array} plugins input plugins array + * @return {Array} input plugins array of arrays + */ +function preparePluginsArray(plugins) { + + var plugin, + key; + + return plugins.map(function(item) { + + // {} + if (typeof item === 'object') { + + key = Object.keys(item)[0]; + + // custom + if (typeof item[key] === 'object' && item[key].fn && typeof item[key].fn === 'function') { + plugin = setupCustomPlugin(key, item[key]); + + } else { + + plugin = EXTEND({}, require('../../plugins/' + key)); + + // name: {} + if (typeof item[key] === 'object') { + plugin.params = EXTEND({}, plugin.params || {}, item[key]); + plugin.active = true; + + // name: false + } else if (item[key] === false) { + plugin.active = false; + + // name: true + } else if (item[key] === true) { + plugin.active = true; + } + + plugin.name = key; + } + + // name + } else { + + plugin = EXTEND({}, require('../../plugins/' + item)); + plugin.name = item; + + } + + return plugin; + + }); + +} + +/** + * Extend plugins with the custom config object. + * + * @param {Array} plugins input plugins + * @param {Object} config config + * @return {Array} output plugins + */ +function extendConfig(defaults, config) { + + var key; + + // plugins + if (config.plugins) { + + config.plugins.forEach(function(item) { + + // {} + if (typeof item === 'object') { + + key = Object.keys(item)[0]; + + // custom + if (typeof item[key] === 'object' && item[key].fn && typeof item[key].fn === 'function') { + defaults.plugins.push(setupCustomPlugin(key, item[key])); + + } else { + defaults.plugins.forEach(function(plugin) { + + if (plugin.name === key) { + // name: {} + if (typeof item[key] === 'object') { + plugin.params = EXTEND({}, plugin.params || {}, item[key]); + plugin.active = true; + + // name: false + } else if (item[key] === false) { + plugin.active = false; + + // name: true + } else if (item[key] === true) { + plugin.active = true; + } + } + }); + } + + } + + }); + + } + + // svg2js + if (config.svg2js) { + defaults.svg2js = config.svg2js; + } + + // js2svg + if (config.js2svg) { + defaults.js2svg = config.js2svg; + } + + return defaults; + +} + +/** + * Setup and enable a custom plugin + * + * @param {String} plugin name + * @param {Object} custom plugin + * @return {Array} enabled plugin + */ +function setupCustomPlugin(name, plugin) { + plugin.active = true; + plugin.params = EXTEND({}, plugin.params || {}); + plugin.name = name; + + return plugin; +} + +/** + * Try to group sequential elements of plugins array. + * + * @param {Object} plugins input plugins + * @return {Array} output plugins + */ +function optimizePluginsArray(plugins) { + + var prev; + + plugins = plugins.map(function(item) { + return [item]; + }); + + plugins = plugins.filter(function(item) { + + if (prev && item[0].type === prev[0].type) { + prev.push(item[0]); + return false; + } + + prev = item; + + return true; + + }); + + return plugins; + +} diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/lib/svgo/js2svg.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/lib/svgo/js2svg.js new file mode 100644 index 00000000..4e992de9 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/lib/svgo/js2svg.js @@ -0,0 +1,325 @@ +'use strict'; + +var EXTEND = require('whet.extend'), + textElem = require('../../plugins/_collections.js').elemsGroups.textContent.concat('title'); + +var defaults = { + doctypeStart: '<!DOCTYPE', + doctypeEnd: '>', + procInstStart: '<?', + procInstEnd: '?>', + tagOpenStart: '<', + tagOpenEnd: '>', + tagCloseStart: '</', + tagCloseEnd: '>', + tagShortStart: '<', + tagShortEnd: '/>', + attrStart: '="', + attrEnd: '"', + commentStart: '<!--', + commentEnd: '-->', + cdataStart: '<![CDATA[', + cdataEnd: ']]>', + textStart: '', + textEnd: '', + indent: ' ', + regEntities: /[&'"<>]/g, + regValEntities: /[&"<>]/g, + encodeEntity: encodeEntity, + pretty: false +}; + +var entities = { + '&': '&', + '\'': ''', + '"': '"', + '>': '>', + '<': '<', + }; + +/** + * Convert SVG-as-JS object to SVG (XML) string. + * + * @param {Object} data input data + * @param {Object} config config + * + * @return {Object} output data + */ +module.exports = function(data, config) { + + return new JS2SVG(config).convert(data); + +}; + +function JS2SVG(config) { + + if (config) { + this.config = EXTEND(true, {}, defaults, config); + } else { + this.config = defaults; + } + + if (this.config.pretty) { + this.config.doctypeEnd += '\n'; + this.config.procInstEnd += '\n'; + this.config.commentEnd += '\n'; + this.config.cdataEnd += '\n'; + this.config.tagShortEnd += '\n'; + this.config.tagOpenEnd += '\n'; + this.config.tagCloseEnd += '\n'; + this.config.textEnd += '\n'; + } + + this.indentLevel = 0; + this.textContext = null; + +} + +function encodeEntity(char) { + return entities[char]; +} + +/** + * Start conversion. + * + * @param {Object} data input data + * + * @return {String} + */ +JS2SVG.prototype.convert = function(data) { + + var svg = ''; + + if (data.content) { + + this.indentLevel++; + + data.content.forEach(function(item) { + + if (item.elem) { + svg += this.createElem(item); + } else if (item.text) { + svg += this.createText(item.text); + } else if (item.doctype) { + svg += this.createDoctype(item.doctype); + } else if (item.processinginstruction) { + svg += this.createProcInst(item.processinginstruction); + } else if (item.comment) { + svg += this.createComment(item.comment); + } else if (item.cdata) { + svg += this.createCDATA(item.cdata); + } + + }, this); + + } + + this.indentLevel--; + + return { + data: svg, + info: { + width: this.width, + height: this.height + } + }; + +}; + +/** + * Create indent string in accordance with the current node level. + * + * @return {String} + */ +JS2SVG.prototype.createIndent = function() { + + var indent = ''; + + if (this.config.pretty && !this.textContext) { + for (var i = 1; i < this.indentLevel; i++) { + indent += this.config.indent; + } + } + + return indent; + +}; + +/** + * Create doctype tag. + * + * @param {String} doctype doctype body string + * + * @return {String} + */ +JS2SVG.prototype.createDoctype = function(doctype) { + + return this.config.doctypeStart + + doctype + + this.config.doctypeEnd; + +}; + +/** + * Create XML Processing Instruction tag. + * + * @param {Object} instruction instruction object + * + * @return {String} + */ +JS2SVG.prototype.createProcInst = function(instruction) { + + return this.config.procInstStart + + instruction.name + + ' ' + + instruction.body + + this.config.procInstEnd; + +}; + +/** + * Create comment tag. + * + * @param {String} comment comment body + * + * @return {String} + */ +JS2SVG.prototype.createComment = function(comment) { + + return this.config.commentStart + + comment + + this.config.commentEnd; + +}; + +/** + * Create CDATA section. + * + * @param {String} cdata CDATA body + * + * @return {String} + */ +JS2SVG.prototype.createCDATA = function(cdata) { + + return this.config.cdataStart + + cdata + + this.config.cdataEnd; + +}; + +/** + * Create element tag. + * + * @param {Object} data element object + * + * @return {String} + */ +JS2SVG.prototype.createElem = function(data) { + + // beautiful injection for obtaining SVG information :) + if ( + data.isElem('svg') && + data.hasAttr('width') && + data.hasAttr('height') + ) { + this.width = data.attr('width').value; + this.height = data.attr('height').value; + } + + // empty element and short tag + if (data.isEmpty()) { + + return this.createIndent() + + this.config.tagShortStart + + data.elem + + this.createAttrs(data) + + this.config.tagShortEnd; + + // non-empty element + } else { + var tagOpenStart = this.config.tagOpenStart, + tagOpenEnd = this.config.tagOpenEnd, + tagCloseStart = this.config.tagCloseStart, + tagCloseEnd = this.config.tagCloseEnd, + openIndent = this.createIndent(), + textIndent = '', + processedData = '', + dataEnd = ''; + + if (this.textContext) { + tagOpenStart = defaults.tagOpenStart; + tagOpenEnd = defaults.tagOpenEnd; + tagCloseStart = defaults.tagCloseStart; + tagCloseEnd = defaults.tagCloseEnd; + openIndent = ''; + } else if (data.isElem(textElem)) { + if (this.config.pretty) { + textIndent += openIndent + this.config.indent; + } + this.textContext = data; + } + + processedData += this.convert(data).data; + + if (this.textContext == data) { + this.textContext = null; + if (this.config.pretty) dataEnd = '\n'; + } + + return openIndent + + tagOpenStart + + data.elem + + this.createAttrs(data) + + tagOpenEnd + + textIndent + + processedData + + dataEnd + + this.createIndent() + + tagCloseStart + + data.elem + + tagCloseEnd; + + } + +}; + +/** + * Create element attributes. + * + * @param {Object} elem attributes object + * + * @return {String} + */ +JS2SVG.prototype.createAttrs = function(elem) { + + var attrs = ''; + + elem.eachAttr(function(attr) { + + attrs += ' ' + + attr.name + + this.config.attrStart + + String(attr.value).replace(this.config.regValEntities, this.config.encodeEntity) + + this.config.attrEnd; + + }, this); + + return attrs; + +}; + +/** + * Create text node. + * + * @param {String} text text + * + * @return {String} + */ +JS2SVG.prototype.createText = function(text) { + + return this.createIndent() + + this.config.textStart + + text.replace(this.config.regEntities, this.config.encodeEntity) + + (this.textContext ? '' : this.config.textEnd); + +}; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/lib/svgo/jsAPI.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/lib/svgo/jsAPI.js new file mode 100644 index 00000000..6355b902 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/lib/svgo/jsAPI.js @@ -0,0 +1,256 @@ +'use strict'; + +var EXTEND = require('whet.extend'); + +var JSAPI = module.exports = function(data, parentNode) { + EXTEND(this, data); + if (parentNode) { + Object.defineProperty(this, 'parentNode', { + writable: true, + value: parentNode + }); + } +}; + +/** + * Perform a deep clone of this node. + * + * @return {Object} element + */ +JSAPI.prototype.clone = function() { + var node = this; + var nodeData = {}; + + Object.keys(node).forEach(function(key) { + if (key != 'content') { + nodeData[key] = node[key]; + } + }); + + // Deep-clone node data + // This is still faster than using EXTEND(true…) + nodeData = JSON.parse(JSON.stringify(nodeData)); + + // parentNode gets set to a proper object by the parent clone, + // but it needs to be true/false now to do the right thing + // in the constructor. + var clonedNode = new JSAPI(nodeData, !!node.parentNode); + + if (node.content) { + clonedNode.content = node.content.map(function(childNode) { + var clonedChild = childNode.clone(); + clonedChild.parentNode = clonedNode; + return clonedChild; + }); + } + + return clonedNode; +}; + +/** + * Determine if item is an element + * (any, with a specific name or in a names array). + * + * @param {String|Array} [param] element name or names arrays + * @return {Boolean} + */ +JSAPI.prototype.isElem = function(param) { + + if (!param) return !!this.elem; + + if (Array.isArray(param)) return !!this.elem && (param.indexOf(this.elem) > -1); + + return !!this.elem && this.elem === param; + +}; + +/** + * Renames an element + * + * @param {String} name new element name + * @return {Object} element + */ +JSAPI.prototype.renameElem = function(name) { + + if (typeof name == 'string' && name != '') + this.elem = this.local = name; + + return this; + +}; + +/** + * Determine if element is empty. + * + * @return {Boolean} + */ + JSAPI.prototype.isEmpty = function() { + + return !this.content || !this.content.length; + +}; + +/** + * Changes content by removing elements and/or adding new elements. + * + * @param {Number} start Index at which to start changing the content. + * @param {Number} n Number of elements to remove. + * @param {Array|Object} [insertion] Elements to add to the content. + * @return {Array} Removed elements. + */ + JSAPI.prototype.spliceContent = function(start, n, insertion) { + + if (arguments.length < 2) return []; + + if (!Array.isArray(insertion)) + insertion = Array.apply(null, arguments).slice(2); + + insertion.forEach(function(inner) { inner.parentNode = this }, this); + + return this.content.splice.apply(this.content, [start, n].concat(insertion)); + + +}; + +/** + * Determine if element has an attribute + * (any, or by name or by name + value). + * + * @param {String} [name] attribute name + * @param {String} [val] attribute value (will be toString()'ed) + * @return {Boolean} + */ + JSAPI.prototype.hasAttr = function(name, val) { + + if (!this.attrs || !Object.keys(this.attrs).length) return false; + + if (!arguments.length) return !!this.attrs; + + if (val !== undefined) return !!this.attrs[name] && this.attrs[name].value === val.toString(); + + return !!this.attrs[name]; + +}; + +/** + * Get a specific attribute from an element + * (by name or name + value). + * + * @param {String} name attribute name + * @param {String} [val] attribute value (will be toString()'ed) + * @return {Object|Undefined} + */ + JSAPI.prototype.attr = function(name, val) { + + if (!this.hasAttr() || !arguments.length) return undefined; + + if (val !== undefined) return this.hasAttr(name, val) ? this.attrs[name] : undefined; + + return this.attrs[name]; + +}; + +/** + * Get computed attribute value from an element + * + * @param {String} name attribute name + * @return {Object|Undefined} + */ + JSAPI.prototype.computedAttr = function(name, val) { + /* jshint eqnull: true */ + if (!arguments.length) return; + + for (var elem = this; elem && (!elem.hasAttr(name) || !elem.attr(name).value); elem = elem.parentNode); + + if (val != null) { + return elem ? elem.hasAttr(name, val) : false; + } else if (elem && elem.hasAttr(name)) { + return elem.attrs[name].value; + } + +}; + +/** + * Remove a specific attribute. + * + * @param {String|Array} name attribute name + * @param {String} [val] attribute value + * @return {Boolean} + */ + JSAPI.prototype.removeAttr = function(name, val, recursive) { + + if (!arguments.length) return false; + + if (Array.isArray(name)) name.forEach(this.removeAttr, this); + + if (!this.hasAttr(name)) return false; + + if (!recursive && val && this.attrs[name].value !== val) return false; + + delete this.attrs[name]; + + if (!Object.keys(this.attrs).length) delete this.attrs; + + return true; + +}; + +/** + * Add attribute. + * + * @param {Object} attr attribute object + * @return {Object} created attribute + */ + JSAPI.prototype.addAttr = function(attr) { + + if (!attr || + (attr && attr.name === undefined) || + (attr && attr.value === undefined) || + (attr && attr.prefix === undefined) || + (attr && attr.local === undefined) + ) return false; + + this.attrs = this.attrs || {}; + this.attrs[attr.name] = attr; + + return this.attrs[attr.name]; + +}; + +/** + * Iterates over all attributes. + * + * @param {Function} callback callback + * @param {Object} [context] callback context + * @return {Boolean} false if there are no any attributes + */ + JSAPI.prototype.eachAttr = function(callback, context) { + + if (!this.hasAttr()) return false; + + for (var name in this.attrs) { + callback.call(context, this.attrs[name]); + } + + return true; + +}; + +/** + * Tests whether some attribute passes the test. + * + * @param {Function} callback callback + * @param {Object} [context] callback context + * @return {Boolean} false if there are no any attributes + */ + JSAPI.prototype.someAttr = function(callback, context) { + + if (!this.hasAttr()) return false; + + for (var name in this.attrs) { + if (callback.call(context, this.attrs[name])) return true; + } + + return false; + +}; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/lib/svgo/plugins.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/lib/svgo/plugins.js new file mode 100644 index 00000000..dad3ace0 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/lib/svgo/plugins.js @@ -0,0 +1,98 @@ +'use strict'; + +/** + * Plugins engine. + * + * @module plugins + * + * @param {Object} data input data + * @param {Object} plugins plugins object from config + * @return {Object} output data + */ +module.exports = function(data, plugins) { + + plugins.forEach(function(group) { + + switch(group[0].type) { + case 'perItem': + data = perItem(data, group); + break; + case 'perItemReverse': + data = perItem(data, group, true); + break; + case 'full': + data = full(data, group); + break; + } + + }); + + return data; + +}; + +/** + * Direct or reverse per-item loop. + * + * @param {Object} data input data + * @param {Array} plugins plugins list to process + * @param {Boolean} [reverse] reverse pass? + * @return {Object} output data + */ +function perItem(data, plugins, reverse) { + + function monkeys(items) { + + items.content = items.content.filter(function(item) { + + // reverse pass + if (reverse && item.content && item.elem != 'foreignObject') { + monkeys(item); + } + + // main filter + var filter = true; + + for (var i = 0; filter && i < plugins.length; i++) { + var plugin = plugins[i]; + + if (plugin.active && plugin.fn(item, plugin.params) === false) { + filter = false; + } + } + + // direct pass + if (!reverse && item.content && item.elem != 'foreignObject') { + monkeys(item); + } + + return filter; + + }); + + return items; + + } + + return monkeys(data); + +} + +/** + * "Full" plugins. + * + * @param {Object} data input data + * @param {Array} plugins plugins list to process + * @return {Object} output data + */ +function full(data, plugins) { + + plugins.forEach(function(plugin) { + if (plugin.active) { + data = plugin.fn(data, plugin.params); + } + }); + + return data; + +} diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/lib/svgo/svg2js.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/lib/svgo/svg2js.js new file mode 100644 index 00000000..b9709a06 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/lib/svgo/svg2js.js @@ -0,0 +1,162 @@ +'use strict'; + +var SAX = require('sax'), + JSAPI = require('./jsAPI'); + +var config = { + strict: true, + trim: false, + normalize: true, + lowercase: true, + xmlns: true, + position: false +}; + +/** + * Convert SVG (XML) string to SVG-as-JS object. + * + * @param {String} data input data + * @param {Function} callback + */ +module.exports = function(data, callback) { + + var sax = SAX.parser(config.strict, config), + root = new JSAPI({ elem: '#document' }), + current = root, + stack = [root], + textContext = null; + + function pushToContent(content) { + + content = new JSAPI(content, current); + + (current.content = current.content || []).push(content); + + return content; + + } + + sax.ondoctype = function(doctype) { + + pushToContent({ + doctype: doctype + }); + + }; + + sax.onprocessinginstruction = function(data) { + + pushToContent({ + processinginstruction: data + }); + + }; + + sax.oncomment = function(comment) { + + pushToContent({ + comment: comment.trim() + }); + + }; + + sax.oncdata = function(cdata) { + + pushToContent({ + cdata: cdata + }); + + }; + + sax.onopentag = function(data) { + + var elem = { + elem: data.name, + prefix: data.prefix, + local: data.local + }; + + if (Object.keys(data.attributes).length) { + elem.attrs = {}; + + for (var name in data.attributes) { + elem.attrs[name] = { + name: name, + value: data.attributes[name].value, + prefix: data.attributes[name].prefix, + local: data.attributes[name].local + }; + } + } + + elem = pushToContent(elem); + current = elem; + + // Save info about <text> tag to prevent trimming of meaningful whitespace + if (data.name == 'text' && !data.prefix) { + textContext = current; + } + + stack.push(elem); + + }; + + sax.ontext = function(text) { + + if (/\S/.test(text) || textContext) { + + if (!textContext) + text = text.trim(); + + pushToContent({ + text: text + }); + + } + + }; + + sax.onclosetag = function() { + + var last = stack.pop(); + + // Trim text inside <text> tag. + if (last == textContext) { + trim(textContext); + textContext = null; + } + current = stack[stack.length - 1]; + + }; + + sax.onerror = function(e) { + + callback({ error: 'Error in parsing: ' + e.message }); + + }; + + sax.onend = function() { + + if (!this.error) callback(root); + + }; + + sax.write(data).close(); + + function trim(elem) { + if (!elem.content) return elem; + + var start = elem.content[0], + end = elem.content[elem.content.length - 1]; + + while (start && start.content && !start.text) start = start.content[0]; + if (start && start.text) start.text = start.text.replace(/^\s+/, ''); + + while (end && end.content && !end.text) end = end.content[end.content.length - 1]; + if (end && end.text) end.text = end.text.replace(/\s+$/, ''); + + return elem; + + } + +}; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/lib/svgo/tools.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/lib/svgo/tools.js new file mode 100644 index 00000000..3f215bf0 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/lib/svgo/tools.js @@ -0,0 +1,142 @@ +'use strict'; + +/** + * Encode plain SVG data string into Data URI string. + * + * @param {String} str input string + * @param {String} type Data URI type + * @return {String} output string + */ +exports.encodeSVGDatauri = function(str, type) { + + var prefix = 'data:image/svg+xml'; + + // base64 + if (!type || type === 'base64') { + + prefix += ';base64,'; + + str = prefix + new Buffer(str).toString('base64'); + + // URI encoded + } else if (type === 'enc') { + + str = prefix + ',' + encodeURIComponent(str); + + // unencoded + } else if (type === 'unenc') { + + str = prefix + ',' + str; + + } + + return str; + +}; + +/** + * Decode SVG Data URI string into plain SVG string. + * + * @param {string} str input string + * @return {String} output string + */ +exports.decodeSVGDatauri = function(str) { + + var prefix = 'data:image/svg+xml'; + + // base64 + if (str.substring(0, 26) === (prefix + ';base64,')) { + + str = new Buffer(str.substring(26), 'base64').toString('utf8'); + + // URI encoded + } else if (str.substring(0, 20) === (prefix + ',%')) { + + str = decodeURIComponent(str.substring(19)); + + // unencoded + } else if (str.substring(0, 20) === (prefix + ',<')) { + + str = str.substring(19); + + } + + return str; + +}; + +exports.intersectArrays = function(a, b) { + return a.filter(function(n) { + return b.indexOf(n) > -1; + }); +}; + +exports.cleanupOutData = function(data, params) { + + var str = '', + delimiter, + prev; + + data.forEach(function(item, i) { + + // space delimiter by default + delimiter = ' '; + + // no extra space in front of first number + if (i === 0) { + delimiter = ''; + } + + // no extra space in front of negative number or + // in front of a floating number if a previous number is floating too + if ( + params.negativeExtraSpace && + (item < 0 || + (item > 0 && item < 1 && prev % 1 !== 0) + ) + ) { + delimiter = ''; + } + + // save prev item value + prev = item; + + // remove floating-point numbers leading zeros + // 0.5 → .5 + // -0.5 → -.5 + if (params.leadingZero) { + item = removeLeadingZero(item); + } + + str += delimiter + item; + + }); + + return str; + +}; + +/** + * Remove floating-point numbers leading zero. + * + * @example + * 0.5 → .5 + * + * @example + * -0.5 → -.5 + * + * @param {Float} num input number + * + * @return {String} output number as string + */ +var removeLeadingZero = exports.removeLeadingZero = function(num) { + + if (num > 0 && num < 1) { + num = ('' + num).slice(1); + } else if (num < 0 && num > -1) { + num = '-' + ('' + num).slice(2); + } + + return num; + +}; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/.bin/js-yaml b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/.bin/js-yaml new file mode 100644 index 00000000..233e5522 Binary files /dev/null and b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/.bin/js-yaml differ diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/.bin/mkdirp b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/.bin/mkdirp new file mode 100644 index 00000000..2da13ce3 Binary files /dev/null and b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/.bin/mkdirp differ diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/.npmignore b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/.npmignore new file mode 100644 index 00000000..7d47fc04 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/.npmignore @@ -0,0 +1,6 @@ +.idea +*.iml +node_modules/ +!node_modules/coa*.js +lib-cov/ +html-report/ diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/.travis.yml b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/.travis.yml new file mode 100644 index 00000000..51b4fe68 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/.travis.yml @@ -0,0 +1,9 @@ +language: node_js + +node_js: + - "0.10" + - "0.11" + +matrix: + allow_failures: + - node_js: 0.11 diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/GNUmakefile b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/GNUmakefile new file mode 100644 index 00000000..51db7b68 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/GNUmakefile @@ -0,0 +1,34 @@ +BIN = ./node_modules/.bin + +.PHONY: all +all: lib + +lib: $(foreach s,$(wildcard src/*.coffee),$(patsubst src/%.coffee,lib/%.js,$s)) + +lib-cov: clean-coverage lib + $(BIN)/istanbul instrument --output lib-cov --no-compact --variable global.__coverage__ lib + +lib/%.js: src/%.coffee + $(BIN)/coffee -cb -o $(@D) $< + +.PHONY: test +test: lib + $(BIN)/mocha + +.PHONY: coverage +coverage: lib-cov + COVER=1 $(BIN)/mocha --reporter mocha-istanbul + @echo + @echo Open html-report/index.html file in your browser + +.PHONY: watch +watch: + $(BIN)/coffee --watch --bare --output lib src/*.coffee + +.PHONY: clean +clean: clean-coverage + +.PHONY: clean-coverage +clean-coverage: + -rm -rf lib-cov + -rm -rf html-report diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/README.md b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/README.md new file mode 100644 index 00000000..fc1b0a9f --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/README.md @@ -0,0 +1,322 @@ +# Command-Option-Argument +[![build status](https://secure.travis-ci.org/veged/coa.png)](http://travis-ci.org/veged/coa) + +## What is it? + +COA is a parser for command line options that aim to get maximum profit from formalization your program API. +Once you write definition in terms of commands, options and arguments you automaticaly get: + +* Command line help text +* Program API for use COA-based programs as modules +* Shell completion + +### Other features + +* Rich types for options and arguments, such as arrays, boolean flags and required +* Commands can be async throught using promising (powered by [Q](https://github.com/kriskowal/q)) +* Easy submoduling some existing commands to new top-level one +* Combined validation and complex parsing of values + +### TODO + +* Localization +* Shell-mode +* Configs + * Aliases + * Defaults + +## Examples + +````javascript +require('coa').Cmd() // main (top level) command declaration + .name(process.argv[1]) // set top level command name from program name + .title('My awesome command line util') // title for use in text messages + .helpful() // make command "helpful", i.e. options -h --help with usage message + .opt() // add some option + .name('version') // name for use in API + .title('Version') // title for use in text messages + .short('v') // short key: -v + .long('version') // long key: --version + .flag() // for options without value + .act(function(opts) { // add action for option + // return message as result of action + return JSON.parse(require('fs').readFileSync(__dirname + '/package.json')) + .version; + }) + .end() // end option chain and return to main command + .cmd().name('subcommand').apply(require('./subcommand').COA).end() // load subcommand from module + .cmd() // inplace subcommand declaration + .name('othercommand').title('Awesome other subcommand').helpful() + .opt() + .name('input').title('input file, required') + .short('i').long('input') + .val(function(v) { // validator function, also for translate simple values + return require('fs').createReadStream(v) }) + .req() // make option required + .end() // end option chain and return to command + .end() // end subcommand chain and return to parent command + .run(process.argv.slice(2)); // parse and run on process.argv +```` + +````javascript +// subcommand.js +exports.COA = function() { + this + .title('Awesome subcommand').helpful() + .opt() + .name('output').title('output file') + .short('o').long('output') + .output() // use default preset for "output" option declaration + .end() +}; +```` + +## API reference + +### Cmd +Command is a top level entity. Commands may have options and arguments. + +#### Cmd.api +Returns object containing all its subcommands as methods to use from other programs.<br> +**@returns** *{Object}* + +#### Cmd.name +Set a canonical command identifier to be used anywhere in the API.<br> +**@param** *String* `_name` command name<br> +**@returns** *COA.Cmd* `this` instance (for chainability) + +#### Cmd.title +Set a long description for command to be used anywhere in text messages.<br> +**@param** *String* `_title` command title<br> +**@returns** *COA.Cmd* `this` instance (for chainability) + +#### Cmd.cmd +Create new or add existing subcommand for current command.<br> +**@param** *COA.Cmd* `[cmd]` existing command instance<br> +**@returns** *COA.Cmd* new or added subcommand instance + +#### Cmd.opt +Create option for current command.<br> +**@returns** *COA.Opt* `new` option instance + +#### Cmd.arg +Create argument for current command.<br> +**@returns** *COA.Opt* `new` argument instance + +#### Cmd.act +Add (or set) action for current command.<br> +**@param** *Function* `act` action function, + invoked in the context of command instance + and has the parameters:<br> + - *Object* `opts` parsed options<br> + - *Array* `args` parsed arguments<br> + - *Object* `res` actions result accumulator<br> + It can return rejected promise by Cmd.reject (in case of error) + or any other value treated as result.<br> +**@param** *{Boolean}* [force=false] flag for set action instead add to existings<br> +**@returns** *COA.Cmd* `this` instance (for chainability) + +#### Cmd.apply +Apply function with arguments in context of command instance.<br> +**@param** *Function* `fn`<br> +**@param** *Array* `args`<br> +**@returns** *COA.Cmd* `this` instance (for chainability) + +#### Cmd.comp +Set custom additional completion for current command.<br> +**@param** *Function* `fn` completion generation function, + invoked in the context of command instance. + Accepts parameters:<br> + - *Object* `opts` completion options<br> + It can return promise or any other value treated as result.<br> +**@returns** *COA.Cmd* `this` instance (for chainability) + +#### Cmd.helpful +Make command "helpful", i.e. add -h --help flags for print usage.<br> +**@returns** *COA.Cmd* `this` instance (for chainability) + +#### Cmd.completable +Adds shell completion to command, adds "completion" subcommand, that makes all the magic.<br> +Must be called only on root command.<br> +**@returns** *COA.Cmd* `this` instance (for chainability) + +#### Cmd.usage +Build full usage text for current command instance.<br> +**@returns** *String* `usage` text + +#### Cmd.run +Parse arguments from simple format like NodeJS process.argv +and run ahead current program, i.e. call process.exit when all actions done.<br> +**@param** *Array* `argv`<br> +**@returns** *COA.Cmd* `this` instance (for chainability) + +#### Cmd.invoke +Invoke specified (or current) command using provided options and arguments.<br> +**@param** *String|Array* `cmds` subcommand to invoke (optional)<br> +**@param** *Object* `opts` command options (optional)<br> +**@param** *Object* `args` command arguments (optional)<br> +**@returns** *Q.Promise* + +#### Cmd.reject +Return reject of actions results promise.<br> +Use in .act() for return with error.<br> +**@param** *Object* `reason` reject reason<br> + You can customize toString() method and exitCode property + of reason object.<br> +**@returns** *Q.promise* rejected promise + +#### Cmd.end +Finish chain for current subcommand and return parent command instance.<br> +**@returns** *COA.Cmd* `parent` command + +### Opt +Option is a named entity. Options may have short and long keys for use from command line.<br> +**@namespace**<br> +**@class** Presents option + +#### Opt.name +Set a canonical option identifier to be used anywhere in the API.<br> +**@param** *String* `_name` option name<br> +**@returns** *COA.Opt* `this` instance (for chainability) + +#### Opt.title +Set a long description for option to be used anywhere in text messages.<br> +**@param** *String* `_title` option title<br> +**@returns** *COA.Opt* `this` instance (for chainability) + +#### Opt.short +Set a short key for option to be used with one hyphen from command line.<br> +**@param** *String* `_short`<br> +**@returns** *COA.Opt* `this` instance (for chainability) + +#### Opt.long +Set a short key for option to be used with double hyphens from command line.<br> +**@param** *String* `_long`<br> +**@returns** *COA.Opt* `this` instance (for chainability) + +#### Opt.flag +Make an option boolean, i.e. option without value.<br> +**@returns** *COA.Opt* `this` instance (for chainability) + +#### Opt.arr +Makes an option accepts multiple values.<br> +Otherwise, the value will be used by the latter passed.<br> +**@returns** *COA.Opt* `this` instance (for chainability) + +#### Opt.req +Makes an option req.<br> +**@returns** *COA.Opt* `this` instance (for chainability) + +#### Opt.only +Makes an option to act as a command, +i.e. program will exit just after option action.<br> +**@returns** *COA.Opt* `this` instance (for chainability) + +#### Opt.val +Set a validation (or value) function for argument.<br> +Value from command line passes through before becoming available from API.<br> +Using for validation and convertion simple types to any values.<br> +**@param** *Function* `_val` validating function, + invoked in the context of option instance + and has one parameter with value from command line<br> +**@returns** *COA.Opt* `this` instance (for chainability) + +#### Opt.def +Set a default value for option. +Default value passed through validation function as ordinary value.<br> +**@param** *Object* `_def`<br> +**@returns** *COA.Opt* `this` instance (for chainability) + +#### Opt.input +Make option value inputting stream. +It's add useful validation and shortcut for STDIN. +**@returns** *{COA.Opt}* `this` instance (for chainability) + +#### Opt.output +Make option value outputing stream.<br> +It's add useful validation and shortcut for STDOUT.<br> +**@returns** *COA.Opt* `this` instance (for chainability) + +#### Opt.act +Add action for current option command. +This action is performed if the current option +is present in parsed options (with any value).<br> +**@param** *Function* `act` action function, + invoked in the context of command instance + and has the parameters:<br> + - *Object* `opts` parsed options<br> + - *Array* `args` parsed arguments<br> + - *Object* `res` actions result accumulator<br> + It can return rejected promise by Cmd.reject (in case of error) + or any other value treated as result.<br> +**@returns** *COA.Opt* `this` instance (for chainability) + +#### Opt.comp +Set custom additional completion for current option.<br> +**@param** *Function* `fn` completion generation function, + invoked in the context of command instance. + Accepts parameters:<br> + - *Object* `opts` completion options<br> + It can return promise or any other value treated as result.<br> +**@returns** *COA.Opt* `this` instance (for chainability) + +#### Opt.end +Finish chain for current option and return parent command instance.<br> +**@returns** *COA.Cmd* `parent` command + + +### Arg +Argument is a unnamed entity.<br> +From command line arguments passed as list of unnamed values. + +#### Arg.name +Set a canonical argument identifier to be used anywhere in text messages.<br> +**@param** *String* `_name` argument name<br> +**@returns** *COA.Arg* `this` instance (for chainability) + +#### Arg.title +Set a long description for argument to be used anywhere in text messages.<br> +**@param** *String* `_title` argument title<br> +**@returns** *COA.Arg* `this` instance (for chainability) + +#### Arg.arr +Makes an argument accepts multiple values.<br> +Otherwise, the value will be used by the latter passed.<br> +**@returns** *COA.Arg* `this` instance (for chainability) + +#### Arg.req +Makes an argument req.<br> +**@returns** *COA.Arg* `this` instance (for chainability) + +#### Arg.val +Set a validation (or value) function for argument.<br> +Value from command line passes through before becoming available from API.<br> +Using for validation and convertion simple types to any values.<br> +**@param** *Function* `_val` validating function, + invoked in the context of argument instance + and has one parameter with value from command line<br> +**@returns** *COA.Arg* `this` instance (for chainability) + +#### Arg.def +Set a default value for argument. +Default value passed through validation function as ordinary value.<br> +**@param** *Object* `_def`<br> +**@returns** *COA.Arg* `this` instance (for chainability) + +#### Arg.output +Make argument value outputing stream.<br> +It's add useful validation and shortcut for STDOUT.<br> +**@returns** *COA.Arg* `this` instance (for chainability) + +#### Arg.comp +Set custom additional completion for current argument.<br> +**@param** *Function* `fn` completion generation function, + invoked in the context of command instance. + Accepts parameters:<br> + - *Object* `opts` completion options<br> + It can return promise or any other value treated as result.<br> +**@returns** *COA.Arg* `this` instance (for chainability) + +#### Arg.end +Finish chain for current option and return parent command instance.<br> +**@returns** *COA.Cmd* `parent` command diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/README.ru.md b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/README.ru.md new file mode 100644 index 00000000..54a8bafe --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/README.ru.md @@ -0,0 +1,316 @@ +# Command-Option-Argument +[![build status](https://secure.travis-ci.org/veged/coa.png)](http://travis-ci.org/veged/coa) + +## Что Ñто? + +COA — парÑер параметров командной Ñтроки, позволÑющий извлечь макÑимум пользы от формального API вашей программы. +Как только вы опишете определение в терминах команд, параметров и аргументов, вы автоматичеÑки получите: + +* Справку Ð´Ð»Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¹ Ñтроки +* API Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹ как Ð¼Ð¾Ð´ÑƒÐ»Ñ Ð² COA-ÑовмеÑтимых программах +* Ðвтодополнение Ð´Ð»Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¹ Ñтроки + +### Прочие возможноÑти + +* Широкий выбор наÑтроек Ð´Ð»Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð² и аргументов, Ð²ÐºÐ»ÑŽÑ‡Ð°Ñ Ð¼Ð½Ð¾Ð¶ÐµÑтвенные значениÑ, логичеÑкие Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¸ обÑзательноÑÑ‚ÑŒ параметров +* ВозможноÑÑ‚ÑŒ аÑинхронного иÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð¿Ñ€Ð¾Ð¼Ð¸ÑÑ‹ (иÑпользуетÑÑ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐ° [Q](https://github.com/kriskowal/q)) +* ПроÑтота иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑущеÑтвующих команд как подмодулей Ð´Ð»Ñ Ð½Ð¾Ð²Ñ‹Ñ… команд +* ÐšÐ¾Ð¼Ð±Ð¸Ð½Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ð°Ñ Ð²Ð°Ð»Ð¸Ð´Ð°Ñ†Ð¸Ñ Ð¸ анализ Ñложных значений + +## Примеры + +````javascript +require('coa').Cmd() // Ð´ÐµÐºÐ»Ð°Ñ€Ð°Ñ†Ð¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ‹ верхнего ÑƒÑ€Ð¾Ð²Ð½Ñ + .name(process.argv[1]) // Ð¸Ð¼Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ‹ верхнего уровнÑ, берем из имени программы + .title('Жутко Ð¿Ð¾Ð»ÐµÐ·Ð½Ð°Ñ ÑƒÑ‚Ð¸Ð»Ð¸Ñ‚Ð° Ð´Ð»Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¹ Ñтроки') // название Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² Ñправке и ÑообщениÑÑ… + .helpful() // добавлÑем поддержку Ñправки командной Ñтроки (-h, --help) + .opt() // добавлÑем параметр + .name('version') // Ð¸Ð¼Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² API + .title('Version') // текÑÑ‚ Ð´Ð»Ñ Ð²Ñ‹Ð²Ð¾Ð´Ð° в ÑообщениÑÑ… + .short('v') // короткое Ð¸Ð¼Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°: -v + .long('version') // длинное Ð¸Ð¼Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°: --version + .flag() // параметр не требует ввода Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ + .act(function(opts) { // дейÑÑ‚Ð²Ð¸Ñ Ð¿Ñ€Ð¸ вызове аргумента + // результатом ÑвлÑетÑÑ Ð²Ñ‹Ð²Ð¾Ð´ текÑтового ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ + return JSON.parse(require('fs').readFileSync(__dirname + '/package.json')) + .version; + }) + .end() // завершаем определение параметра и возвращаемÑÑ Ðº определению верхнего ÑƒÑ€Ð¾Ð²Ð½Ñ + .cmd().name('subcommand').apply(require('./subcommand').COA).end() // загрузка подкоманды из Ð¼Ð¾Ð´ÑƒÐ»Ñ + .cmd() // добавлÑем еще одну подкоманду + .name('othercommand').title('Еще одна Ð¿Ð¾Ð»ÐµÐ·Ð½Ð°Ñ Ð¿Ð¾Ð´Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð°').helpful() + .opt() + .name('input').title('input file, required') + .short('i').long('input') + .val(function(v) { // функциÑ-валидатор, также может иÑпользоватьÑÑ Ð´Ð»Ñ Ñ‚Ñ€Ð°Ð½Ñформации значений параметров + return require('fs').createReadStream(v) }) + .req() // параметр ÑвлÑетÑÑ Ð¾Ð±Ñзательным + .end() // завершаем определение параметра и возвращаемÑÑ Ðº определению команды + .end() // завершаем определение подкоманды и возвращаемÑÑ Ðº определению команды верхнего ÑƒÑ€Ð¾Ð²Ð½Ñ + .run(process.argv.slice(2)); // разбираем process.argv и запуÑкаем +```` + +````javascript +// subcommand.js +exports.COA = function() { + this + .title('ÐŸÐ¾Ð»ÐµÐ·Ð½Ð°Ñ Ð¿Ð¾Ð´Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð°').helpful() + .opt() + .name('output').title('output file') + .short('o').long('output') + .output() // иÑпользовать Ñтандартную наÑтройку Ð´Ð»Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° вывода + .end() +}; +```` + +## API + +### Cmd +Команда — ÑущноÑÑ‚ÑŒ верхнего уровнÑ. У команды могут быть определены параметры и аргументы. + +#### Cmd.api +Возвращает объект, который можно иÑпользовать в других программах. Подкоманды ÑвлÑÑŽÑ‚ÑÑ Ð¼ÐµÑ‚Ð¾Ð´Ð°Ð¼Ð¸ Ñтого объекта.<br> +**@returns** *{Object}* + +#### Cmd.name +ОпределÑет каноничеÑкий идентификатор команды, иÑпользуемый в вызовах API.<br> +**@param** *String* `_name` Ð¸Ð¼Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ‹<br> +**@returns** *COA.Cmd* `this` ÑкземплÑÑ€ команды (Ð´Ð»Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¸ цепочки методов) + +#### Cmd.title +ОпределÑет название команды, иÑпользуемый в текÑтовых ÑообщениÑÑ….<br> +**@param** *String* `_title` название команды<br> +**@returns** *COA.Cmd* `this` ÑкземплÑÑ€ команды (Ð´Ð»Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¸ цепочки методов) + +#### Cmd.cmd +Создает новую подкоманду или добавлÑет ранее определенную подкоманду к текущей команде.<br> +**@param** *COA.Cmd* `[cmd]` ÑкземплÑÑ€ ранее определенной подкоманды<br> +**@returns** *COA.Cmd* ÑкземплÑÑ€ новой или ранее определенной подкоманды + +#### Cmd.opt +Создает параметр Ð´Ð»Ñ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ¹ команды.<br> +**@returns** *COA.Opt* `new` ÑкземплÑÑ€ параметра + +#### Cmd.arg +Создает аргумент Ð´Ð»Ñ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ¹ команды.<br> +**@returns** *COA.Opt* `new` ÑкземплÑÑ€ аргумента + +#### Cmd.act +ДобавлÑет (или Ñоздает) дейÑтвие Ð´Ð»Ñ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ¹ команды.<br> +**@param** *Function* `act` функциÑ, + выполнÑÐµÐ¼Ð°Ñ Ð² контекÑте ÑкземплÑра текущей команды + и Ð¿Ñ€Ð¸Ð½Ð¸Ð¼Ð°ÑŽÑ‰Ð°Ñ Ñледующие параметры:<br> + - *Object* `opts` параметры команды<br> + - *Array* `args` аргументы команды<br> + - *Object* `res` объект-аккумулÑтор результатов<br> + Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ Ð¼Ð¾Ð¶ÐµÑ‚ вернуть проваленный Ð¿Ñ€Ð¾Ð¼Ð¸Ñ Ð¸Ð· Cmd.reject (в Ñлучае ошибки) + или любое другое значение, раÑÑматриваемое как результат.<br> +**@param** *{Boolean}* [force=false] флаг, назначающий немедленное иÑполнение вмеÑто Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ðº ÑпиÑку ÑущеÑтвующих дейÑтвий<br> +**@returns** *COA.Cmd* `this` ÑкземплÑÑ€ команды (Ð´Ð»Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¸ цепочки методов) + +#### Cmd.apply +ИÑполнÑет функцию Ñ Ð¿ÐµÑ€ÐµÐ´Ð°Ð½Ð½Ñ‹Ð¼Ð¸ аргументами в контекÑте ÑкземплÑра текущей команды.<br> +**@param** *Function* `fn`<br> +**@param** *Array* `args`<br> +**@returns** *COA.Cmd* `this` ÑкземплÑÑ€ команды (Ð´Ð»Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¸ цепочки методов) + +#### Cmd.comp +Ðазначает каÑтомную функцию Ð°Ð²Ñ‚Ð¾Ð´Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ¹ команды.<br> +**@param** *Function* `fn` функциÑ-генератор автодополнениÑ, + иÑполнÑÐµÐ¼Ð°Ñ Ð² контекÑте текущей команды. + Принимает параметры:<br> + - *Object* `opts` параметры<br> + Может возвращать Ð¿Ñ€Ð¾Ð¼Ð¸Ñ Ð¸Ð»Ð¸ любое другое значение, раÑÑматриваемое как результат иÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ‹.<br> +**@returns** *COA.Cmd* `this` ÑкземплÑÑ€ команды (Ð´Ð»Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¸ цепочки методов) + +#### Cmd.helpful +Ставит флаг поддержки Ñправки командной Ñтроки, Ñ‚.е. вызов команды Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°Ð¼Ð¸ -h --help выводит Ñправку по работе Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹.<br> +**@returns** *COA.Cmd* `this` ÑкземплÑÑ€ команды (Ð´Ð»Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¸ цепочки методов) + +#### Cmd.completable +ДобавлÑет поддержку Ð°Ð²Ñ‚Ð¾Ð´Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¹ Ñтроки. ДобавлÑетÑÑ Ð¿Ð¾Ð´ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° "completion", ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ñет вÑе необходимые дейÑтвиÑ.<br> +Может быть добавлен только Ð´Ð»Ñ Ð³Ð»Ð°Ð²Ð½Ð¾Ð¹ команды.<br> +**@returns** *COA.Cmd* `this` ÑкземплÑÑ€ команды (Ð´Ð»Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¸ цепочки методов) + +#### Cmd.usage +Возвращает текÑÑ‚ Ñправки по иÑпользованию команды Ð´Ð»Ñ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ³Ð¾ ÑкземплÑра.<br> +**@returns** *String* `usage` ТекÑÑ‚ Ñправки по иÑпользованию + +#### Cmd.run +Разбирает аргументы из значениÑ, возвращаемого NodeJS process.argv, +и запуÑкает текущую программу, Ñ‚.е. вызывает process.exit поÑле Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ +вÑех дейÑтвий.<br> +**@param** *Array* `argv`<br> +**@returns** *COA.Cmd* `this` ÑкземплÑÑ€ команды (Ð´Ð»Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¸ цепочки методов) + +#### Cmd.invoke +ИÑполнÑет переданную (или текущую) команду Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ñ‹Ð¼Ð¸ параметрами и аргументами.<br> +**@param** *String|Array* `cmds` подкоманда Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ (необÑзательно)<br> +**@param** *Object* `opts` параметры, передаваемые команде (необÑзательно)<br> +**@param** *Object* `args` аргументы, передаваемые команде (необÑзательно)<br> +**@returns** *Q.Promise* + +#### Cmd.reject +Проваливает промиÑÑ‹, возращенные в дейÑтвиÑÑ….<br> +ИÑпользуетÑÑ Ð² .act() Ð´Ð»Ñ Ð²Ð¾Ð·Ð²Ñ€Ð°Ñ‚Ð° Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ¾Ð¹.<br> +**@param** *Object* `reason` причина провала<br> + Ð’Ñ‹ можете определить метод toString() и ÑвойÑтво toString() + объекта причины провала.<br> +**@returns** *Q.promise* проваленный Ð¿Ñ€Ð¾Ð¼Ð¸Ñ + +#### Cmd.end +Завершает цепочку методов текущей подкоманды и возвращает ÑкземплÑÑ€ родительÑкой команды.<br> +**@returns** *COA.Cmd* `parent` родительÑÐºÐ°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° + +### Opt +Параметр â€”Â Ð¸Ð¼ÐµÐ½Ð¾Ð²Ð°Ð½Ð½Ð°Ñ ÑущноÑÑ‚ÑŒ. У параметра может быть определено короткое или длинное Ð¸Ð¼Ñ Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð· командной Ñтроки.<br> +**@namespace**<br> +**@class** Переданный параметр + +#### Opt.name +ОпределÑет каноничеÑкий идентификатор параметра, иÑпользуемый в вызовах API.<br> +**@param** *String* `_name` Ð¸Ð¼Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°<br> +**@returns** *COA.Opt* `this` ÑкземплÑÑ€ параметра (Ð´Ð»Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¸ цепочки методов) + +#### Opt.title +ОпределÑет опиÑание Ð´Ð»Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°, иÑпользуемое в текÑтовых ÑообщениÑÑ….<br> +**@param** *String* `_title` название параметра<br> +**@returns** *COA.Opt* `this` ÑкземплÑÑ€ параметра (Ð´Ð»Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¸ цепочки методов) + +#### Opt.short +Ðазначает ключ Ð´Ð»Ñ ÐºÐ¾Ñ€Ð¾Ñ‚ÐºÐ¾Ð³Ð¾ имени параметра, передаваемого из командной Ñтроки Ñ Ð¾Ð´Ð¸Ð½Ð°Ñ€Ð½Ñ‹Ð¼ дефиÑом (например, `-v`).<br> +**@param** *String* `_short`<br> +**@returns** *COA.Opt* `this` ÑкземплÑÑ€ параметра (Ð´Ð»Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¸ цепочки методов) + +#### Opt.long +Ðазначает ключ Ð´Ð»Ñ Ð´Ð»Ð¸Ð½Ð½Ð¾Ð³Ð¾ имени параметра, передаваемого из командной Ñтроки Ñ Ð´Ð²Ð¾Ð¹Ð½Ñ‹Ð¼ дефиÑом (например, `--version`).<br> +**@param** *String* `_long`<br> +**@returns** *COA.Opt* `this` ÑкземплÑÑ€ параметра (Ð´Ð»Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¸ цепочки методов) + +#### Opt.flag +Помечает параметр как логичеÑкий, Ñ‚.е. параметр не имеющий значениÑ.<br> +**@returns** *COA.Opt* `this` ÑкземплÑÑ€ параметра (Ð´Ð»Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¸ цепочки методов) + +#### Opt.arr +Помечает параметр как принимающий множеÑтвенные значениÑ.<br> +Иначе будет иÑпользовано поÑледнее переданное значение параметра.<br> +**@returns** *COA.Opt* `this` ÑкземплÑÑ€ параметра (Ð´Ð»Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¸ цепочки методов) + +#### Opt.req +Помечает параметр как обÑзательный.<br> +**@returns** *COA.Opt* `this` ÑкземплÑÑ€ параметра (Ð´Ð»Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¸ цепочки методов) + +#### Opt.only +Интерпретирует параметр как команду, +Ñ‚.е. программа будет завершена Ñразу поÑле Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°.<br> +**@returns** *COA.Opt* `this` ÑкземплÑÑ€ параметра (Ð´Ð»Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¸ цепочки методов) + +#### Opt.val +Ðазначает функцию валидации (или транÑформации значениÑ) Ð´Ð»Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°.<br> +Значение, полученное из командной Ñтроки, передаетÑÑ Ð² функцию-валидатор прежде чем оно Ñтанет доÑтупно из API.<br> +ИÑпользуетÑÑ Ð´Ð»Ñ Ð²Ð°Ð»Ð¸Ð´Ð°Ñ†Ð¸Ð¸ и транÑформации введенных данных.<br> +**@param** *Function* `_val` Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð²Ð°Ð»Ð¸Ð´Ð°Ñ†Ð¸Ð¸, + иÑполнÑÐµÐ¼Ð°Ñ Ð² контекÑте ÑкземплÑра параметра + и Ð¿Ñ€Ð¸Ð½Ð¸Ð¼Ð°ÑŽÑ‰Ð°Ñ Ð² качеÑтве единÑтвенного параметра значение, полученное + из командной Ñтроки<br> +**@returns** *COA.Opt* `this` ÑкземплÑÑ€ параметра (Ð´Ð»Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¸ цепочки методов) + +#### Opt.def +Ðазначает значение параметра по умолчанию. Это значение также передаетÑÑ +в функцию валидации как обычное значение.<br> +**@param** *Object* `_def`<br> +**@returns** *COA.Opt* `this` ÑкземплÑÑ€ параметра (Ð´Ð»Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¸ цепочки методов) + +#### Opt.input +Помечает параметр как принимающий ввод пользователÑ. <br> +ПозволÑет иÑпользовать валидацию Ð´Ð»Ñ STDIN.<br> +**@returns** *{COA.Opt}* `this` ÑкземплÑÑ€ параметра (Ð´Ð»Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¸ цепочки методов) + +#### Opt.output +Помечает параметр как вывод.<br> +ПозволÑет иÑпользовать валидацию Ð´Ð»Ñ STDOUT.<br> +**@returns** *COA.Opt* `this` ÑкземплÑÑ€ параметра (Ð´Ð»Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¸ цепочки методов) + +#### Opt.act +ДобавлÑет (или Ñоздает) дейÑтвие Ð´Ð»Ñ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ³Ð¾ параметра команды. +Это дейÑтвие будет выполнено, еÑли текущий параметр еÑÑ‚ÑŒ +в ÑпиÑке полученных параметров (Ñ Ð»ÑŽÐ±Ñ‹Ð¼ значением).<br> +**@param** *Function* `act` функциÑ, выполнÑÐµÐ¼Ð°Ñ Ð² контекÑте + ÑкземплÑра текущей команды и Ð¿Ñ€Ð¸Ð½Ð¸Ð¼Ð°ÑŽÑ‰Ð°Ñ Ñледующие параметры:<br> + - *Object* `opts` параметры команды<br> + - *Array* `args` аргументы команды<br> + - *Object* `res` объект-аккумулÑтор результатов<br> + Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ Ð¼Ð¾Ð¶ÐµÑ‚ вернуть проваленный Ð¿Ñ€Ð¾Ð¼Ð¸Ñ Ð¸Ð· Cmd.reject (в Ñлучае ошибки) + или любое другое значение, раÑÑматриваемое как результат.<br> +**@returns** *COA.Opt* `this` ÑкземплÑÑ€ параметра (Ð´Ð»Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¸ цепочки методов) + +#### Opt.comp +Ðазначает каÑтомную функцию Ð°Ð²Ñ‚Ð¾Ð´Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ¹ команды.<br> +**@param** *Function* `fn` функциÑ-генератор автодоплнениÑ, иÑполнÑÐµÐ¼Ð°Ñ Ð² + контекÑте ÑкземплÑра команды. + Принимает параметры:<br> + - *Object* `opts` параметры автодополнениÑ<br> + Может возвращать Ð¿Ñ€Ð¾Ð¼Ð¸Ñ Ð¸Ð»Ð¸ любое другое значение, раÑÑматриваемое как результат иÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ‹.<br> +**@returns** *COA.Opt* `this` ÑкземплÑÑ€ параметра (Ð´Ð»Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¸ цепочки методов) + +#### Opt.end +Завершает цепочку методов текущего параметра и возвращает ÑкземплÑÑ€ родительÑкой команды.<br> +**@returns** *COA.Cmd* `parent` родительÑÐºÐ°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° + + +### Arg +Ðргумент — Ð½ÐµÐ¸Ð¼ÐµÐ½Ð¾Ð²Ð°Ð½Ð½Ð°Ñ ÑущноÑÑ‚ÑŒ.<br> +Ðргументы передаютÑÑ Ð¸Ð· командной Ñтроки как ÑпиÑок неименованных значений. + +#### Arg.name +ОпределÑет каноничеÑкий идентификатор аргумента, иÑпользуемый в вызовах API.<br> +**@param** *String* `_name` Ð¸Ð¼Ñ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ð°<br> +**@returns** *COA.Arg* `this` ÑкземплÑÑ€ аргумента (Ð´Ð»Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¸ цепочки методов) + +#### Arg.title +ОпределÑет опиÑание Ð´Ð»Ñ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ð°, иÑпользуемое в текÑтовых ÑообщениÑÑ….<br> +**@param** *String* `_title` опиÑание аргумента<br> +**@returns** *COA.Arg* `this` ÑкземплÑÑ€ аргумента (Ð´Ð»Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¸ цепочки методов) + +#### Arg.arr +Помечает аргумент как принимающий множеÑтвенные значениÑ.<br> +Иначе будет иÑпользовано поÑледнее переданное значение аргумента.<br> +**@returns** *COA.Arg* `this` ÑкземплÑÑ€ аргумента (Ð´Ð»Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¸ цепочки методов) + +#### Arg.req +Помечает аргумент как обÑзательный.<br> +**@returns** *COA.Arg* `this` ÑкземплÑÑ€ аргумента (Ð´Ð»Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¸ цепочки методов) + +#### Arg.val +Ðазначает функцию валидации (или транÑформации значениÑ) Ð´Ð»Ñ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ð°.<br> +Значение, полученное из командной Ñтроки, передаетÑÑ Ð² функцию-валидатор прежде чем оно Ñтанет доÑтупно из API.<br> +ИÑпользуетÑÑ Ð´Ð»Ñ Ð²Ð°Ð»Ð¸Ð´Ð°Ñ†Ð¸Ð¸ и транÑформации введенных данных.<br> +**@param** *Function* `_val` Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð²Ð°Ð»Ð¸Ð´Ð°Ñ†Ð¸Ð¸, + иÑполнÑÐµÐ¼Ð°Ñ Ð² контекÑте ÑкземплÑра аргумента + и Ð¿Ñ€Ð¸Ð½Ð¸Ð¼Ð°ÑŽÑ‰Ð°Ñ Ð² качеÑтве единÑтвенного параметра значение, полученное + из командной Ñтроки<br> +**@returns** *COA.Opt* `this` ÑкземплÑÑ€ аргумента (Ð´Ð»Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¸ цепочки методов) + +#### Arg.def +Ðазначает дефолтное значение Ð´Ð»Ñ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ð°. Дефолтное значение передаетÑÑ +в функцию валидации как обычное значение.<br> +**@param** *Object* `_def`<br> +**@returns** *COA.Arg* `this` ÑкземплÑÑ€ аргумента (Ð´Ð»Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¸ цепочки методов) + +#### Arg.output +Помечает параметр как вывод.<br> +ПозволÑет назначить валидацию Ð´Ð»Ñ STDOUT.<br> +**@returns** *COA.Arg* `this` ÑкземплÑÑ€ аргумента (Ð´Ð»Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¸ цепочки методов) + +#### Arg.comp +Ðазначает каÑтомную функцию Ð°Ð²Ñ‚Ð¾Ð´Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ³Ð¾ аргумента.<br> +**@param** *Function* `fn` функциÑ-генератор автодоплнениÑ, + иÑполнÑÐµÐ¼Ð°Ñ Ð² контекÑте текущей команды. + Принимает параметры:<br> + - *Object* `opts` параметры +Может возвращать Ð¿Ñ€Ð¾Ð¼Ð¸Ñ Ð¸Ð»Ð¸ любое другое значение, раÑÑматриваемое как результат иÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ‹.<br> +**@returns** *COA.Arg* `this` ÑкземплÑÑ€ аргумента (Ð´Ð»Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¸ цепочки методов) + +#### Arg.end +Завершает цепочку методов текущего аргумента и возвращает ÑкземплÑÑ€ родительÑкой команды.<br> +**@returns** *COA.Cmd* `parent` родительÑÐºÐ°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/index.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/index.js new file mode 100644 index 00000000..76c1c3a3 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/index.js @@ -0,0 +1 @@ +module.exports = require(process.env.COVER? './lib-cov' : './lib'); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/lib/arg.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/lib/arg.js new file mode 100644 index 00000000..4444a8a5 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/lib/arg.js @@ -0,0 +1,175 @@ +// Generated by CoffeeScript 1.6.3 +var Arg, Cmd, Color, Opt; + +Color = require('./color').Color; + +Cmd = require('./cmd').Cmd; + +Opt = require('./opt').Opt; + +/** +Argument + +Unnamed entity. From command line arguments passed as list of unnamed values. +@namespace +@class Presents argument +*/ + + +exports.Arg = Arg = (function() { + /** + @constructs + @param {COA.Cmd} cmd parent command + */ + + function Arg(_cmd) { + this._cmd = _cmd; + this._cmd._args.push(this); + } + + /** + Set a canonical argument identifier to be used anywhere in text messages. + @param {String} _name argument name + @returns {COA.Arg} this instance (for chainability) + */ + + + Arg.prototype.name = Opt.prototype.name; + + /** + Set a long description for argument to be used anywhere in text messages. + @param {String} _title argument title + @returns {COA.Arg} this instance (for chainability) + */ + + + Arg.prototype.title = Cmd.prototype.title; + + /** + Makes an argument accepts multiple values. + Otherwise, the value will be used by the latter passed. + @returns {COA.Arg} this instance (for chainability) + */ + + + Arg.prototype.arr = Opt.prototype.arr; + + /** + Makes an argument required. + @returns {COA.Arg} this instance (for chainability) + */ + + + Arg.prototype.req = Opt.prototype.req; + + /** + Set a validation (or value) function for argument. + Value from command line passes through before becoming available from API. + Using for validation and convertion simple types to any values. + @param {Function} _val validating function, + invoked in the context of argument instance + and has one parameter with value from command line + @returns {COA.Arg} this instance (for chainability) + */ + + + Arg.prototype.val = Opt.prototype.val; + + /** + Set a default value for argument. + Default value passed through validation function as ordinary value. + @param {Object} _def + @returns {COA.Arg} this instance (for chainability) + */ + + + Arg.prototype.def = Opt.prototype.def; + + /** + Set custom additional completion for current argument. + @param {Function} completion generation function, + invoked in the context of argument instance. + Accepts parameters: + - {Object} opts completion options + It can return promise or any other value treated as result. + @returns {COA.Arg} this instance (for chainability) + */ + + + Arg.prototype.comp = Cmd.prototype.comp; + + /** + Make argument value inputting stream. + It's add useful validation and shortcut for STDIN. + @returns {COA.Arg} this instance (for chainability) + */ + + + Arg.prototype.input = Opt.prototype.input; + + /** + Make argument value outputing stream. + It's add useful validation and shortcut for STDOUT. + @returns {COA.Arg} this instance (for chainability) + */ + + + Arg.prototype.output = Opt.prototype.output; + + Arg.prototype._parse = function(arg, args) { + return this._saveVal(args, arg); + }; + + Arg.prototype._saveVal = Opt.prototype._saveVal; + + Arg.prototype._checkParsed = function(opts, args) { + return !args.hasOwnProperty(this._name); + }; + + Arg.prototype._usage = function() { + var res; + res = []; + res.push(Color('lpurple', this._name.toUpperCase()), ' : ', this._title); + if (this._req) { + res.push(' ', Color('lred', '(required)')); + } + return res.join(''); + }; + + Arg.prototype._requiredText = function() { + return 'Missing required argument:\n ' + this._usage(); + }; + + /** + Return rejected promise with error code. + Use in .val() for return with error. + @param {Object} reject reason + You can customize toString() method and exitCode property + of reason object. + @returns {Q.promise} rejected promise + */ + + + Arg.prototype.reject = Cmd.prototype.reject; + + /** + Finish chain for current option and return parent command instance. + @returns {COA.Cmd} parent command + */ + + + Arg.prototype.end = Cmd.prototype.end; + + /** + Apply function with arguments in context of arg instance. + @param {Function} fn + @param {Array} args + @returns {COA.Arg} this instance (for chainability) + */ + + + Arg.prototype.apply = Cmd.prototype.apply; + + return Arg; + +})(); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/lib/cmd.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/lib/cmd.js new file mode 100644 index 00000000..b53c2541 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/lib/cmd.js @@ -0,0 +1,605 @@ +// Generated by CoffeeScript 1.6.3 +var Cmd, Color, PATH, Q, UTIL, + __slice = [].slice; + +UTIL = require('util'); + +PATH = require('path'); + +Color = require('./color').Color; + +Q = require('q'); + +/** +Command + +Top level entity. Commands may have options and arguments. +@namespace +@class Presents command +*/ + + +exports.Cmd = Cmd = (function() { + /** + @constructs + @param {COA.Cmd} [cmd] parent command + */ + + function Cmd(cmd) { + if (!(this instanceof Cmd)) { + return new Cmd(cmd); + } + this._parent(cmd); + this._cmds = []; + this._cmdsByName = {}; + this._opts = []; + this._optsByKey = {}; + this._args = []; + this._ext = false; + } + + Cmd.get = function(propertyName, func) { + return Object.defineProperty(this.prototype, propertyName, { + configurable: true, + enumerable: true, + get: func + }); + }; + + /** + Returns object containing all its subcommands as methods + to use from other programs. + @returns {Object} + */ + + + Cmd.get('api', function() { + var c, _fn, + _this = this; + if (!this._api) { + this._api = function() { + return _this.invoke.apply(_this, arguments); + }; + } + _fn = function(c) { + return _this._api[c] = _this._cmdsByName[c].api; + }; + for (c in this._cmdsByName) { + _fn(c); + } + return this._api; + }); + + Cmd.prototype._parent = function(cmd) { + this._cmd = cmd || this; + if (cmd) { + cmd._cmds.push(this); + if (this._name) { + this._cmd._cmdsByName[this._name] = this; + } + } + return this; + }; + + /** + Set a canonical command identifier to be used anywhere in the API. + @param {String} _name command name + @returns {COA.Cmd} this instance (for chainability) + */ + + + Cmd.prototype.name = function(_name) { + this._name = _name; + if (this._cmd !== this) { + this._cmd._cmdsByName[_name] = this; + } + return this; + }; + + /** + Set a long description for command to be used anywhere in text messages. + @param {String} _title command title + @returns {COA.Cmd} this instance (for chainability) + */ + + + Cmd.prototype.title = function(_title) { + this._title = _title; + return this; + }; + + /** + Create new or add existing subcommand for current command. + @param {COA.Cmd} [cmd] existing command instance + @returns {COA.Cmd} new subcommand instance + */ + + + Cmd.prototype.cmd = function(cmd) { + if (cmd) { + return cmd._parent(this); + } else { + return new Cmd(this); + } + }; + + /** + Create option for current command. + @returns {COA.Opt} new option instance + */ + + + Cmd.prototype.opt = function() { + return new (require('./opt').Opt)(this); + }; + + /** + Create argument for current command. + @returns {COA.Opt} new argument instance + */ + + + Cmd.prototype.arg = function() { + return new (require('./arg').Arg)(this); + }; + + /** + Add (or set) action for current command. + @param {Function} act action function, + invoked in the context of command instance + and has the parameters: + - {Object} opts parsed options + - {Array} args parsed arguments + - {Object} res actions result accumulator + It can return rejected promise by Cmd.reject (in case of error) + or any other value treated as result. + @param {Boolean} [force=false] flag for set action instead add to existings + @returns {COA.Cmd} this instance (for chainability) + */ + + + Cmd.prototype.act = function(act, force) { + if (!act) { + return this; + } + if (!force && this._act) { + this._act.push(act); + } else { + this._act = [act]; + } + return this; + }; + + /** + Set custom additional completion for current command. + @param {Function} completion generation function, + invoked in the context of command instance. + Accepts parameters: + - {Object} opts completion options + It can return promise or any other value treated as result. + @returns {COA.Cmd} this instance (for chainability) + */ + + + Cmd.prototype.comp = function(_comp) { + this._comp = _comp; + return this; + }; + + /** + Apply function with arguments in context of command instance. + @param {Function} fn + @param {Array} args + @returns {COA.Cmd} this instance (for chainability) + */ + + + Cmd.prototype.apply = function() { + var args, fn; + fn = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : []; + fn.apply(this, args); + return this; + }; + + /** + Make command "helpful", i.e. add -h --help flags for print usage. + @returns {COA.Cmd} this instance (for chainability) + */ + + + Cmd.prototype.helpful = function() { + return this.opt().name('help').title('Help').short('h').long('help').flag().only().act(function() { + return this.usage(); + }).end(); + }; + + /** + Adds shell completion to command, adds "completion" subcommand, + that makes all the magic. + Must be called only on root command. + @returns {COA.Cmd} this instance (for chainability) + */ + + + Cmd.prototype.completable = function() { + return this.cmd().name('completion').apply(require('./completion')).end(); + }; + + /** + Allow command to be extendable by external node.js modules. + @param {String} [pattern] Pattern of node.js module to find subcommands at. + @returns {COA.Cmd} this instance (for chainability) + */ + + + Cmd.prototype.extendable = function(pattern) { + this._ext = pattern || true; + return this; + }; + + Cmd.prototype._exit = function(msg, code) { + return process.once('exit', function() { + if (msg) { + console.error(msg); + } + return process.exit(code || 0); + }); + }; + + /** + Build full usage text for current command instance. + @returns {String} usage text + */ + + + Cmd.prototype.usage = function() { + var res; + res = []; + if (this._title) { + res.push(this._fullTitle()); + } + res.push('', 'Usage:'); + if (this._cmds.length) { + res.push(['', '', Color('lred', this._fullName()), Color('lblue', 'COMMAND'), Color('lgreen', '[OPTIONS]'), Color('lpurple', '[ARGS]')].join(' ')); + } + if (this._opts.length + this._args.length) { + res.push(['', '', Color('lred', this._fullName()), Color('lgreen', '[OPTIONS]'), Color('lpurple', '[ARGS]')].join(' ')); + } + res.push(this._usages(this._cmds, 'Commands'), this._usages(this._opts, 'Options'), this._usages(this._args, 'Arguments')); + return res.join('\n'); + }; + + Cmd.prototype._usage = function() { + return Color('lblue', this._name) + ' : ' + this._title; + }; + + Cmd.prototype._usages = function(os, title) { + var o, res, _i, _len; + if (!os.length) { + return; + } + res = ['', title + ':']; + for (_i = 0, _len = os.length; _i < _len; _i++) { + o = os[_i]; + res.push(' ' + o._usage()); + } + return res.join('\n'); + }; + + Cmd.prototype._fullTitle = function() { + return (this._cmd === this ? '' : this._cmd._fullTitle() + '\n') + this._title; + }; + + Cmd.prototype._fullName = function() { + return (this._cmd === this ? '' : this._cmd._fullName() + ' ') + PATH.basename(this._name); + }; + + Cmd.prototype._ejectOpt = function(opts, opt) { + var pos; + if ((pos = opts.indexOf(opt)) >= 0) { + if (opts[pos]._arr) { + return opts[pos]; + } else { + return opts.splice(pos, 1)[0]; + } + } + }; + + Cmd.prototype._checkRequired = function(opts, args) { + var all, i; + if (!(this._opts.filter(function(o) { + return o._only && o._name in opts; + })).length) { + all = this._opts.concat(this._args); + while (i = all.shift()) { + if (i._req && i._checkParsed(opts, args)) { + return this.reject(i._requiredText()); + } + } + } + }; + + Cmd.prototype._parseCmd = function(argv, unparsed) { + var c, cmd, cmdDesc, e, i, optSeen, pkg; + if (unparsed == null) { + unparsed = []; + } + argv = argv.concat(); + optSeen = false; + while (i = argv.shift()) { + if (!i.indexOf('-')) { + optSeen = true; + } + if (!optSeen && /^\w[\w-_]*$/.test(i)) { + cmd = this._cmdsByName[i]; + if (!cmd && this._ext) { + if (typeof this._ext === 'string') { + if (~this._ext.indexOf('%s')) { + pkg = UTIL.format(this._ext, i); + } else { + pkg = this._ext + i; + } + } else if (this._ext === true) { + pkg = i; + c = this; + while (true) { + pkg = c._name + '-' + pkg; + if (c._cmd === c) { + break; + } + c = c._cmd; + } + } + try { + cmdDesc = require(pkg); + } catch (_error) { + e = _error; + } + if (cmdDesc) { + if (typeof cmdDesc === 'function') { + this.cmd().name(i).apply(cmdDesc).end(); + } else if (typeof cmdDesc === 'object') { + this.cmd(cmdDesc); + cmdDesc.name(i); + } else { + throw new Error('Error: Unsupported command declaration type, ' + 'should be function or COA.Cmd() object'); + } + cmd = this._cmdsByName[i]; + } + } + if (cmd) { + return cmd._parseCmd(argv, unparsed); + } + } + unparsed.push(i); + } + return { + cmd: this, + argv: unparsed + }; + }; + + Cmd.prototype._parseOptsAndArgs = function(argv) { + var a, arg, args, i, m, nonParsedArgs, nonParsedOpts, opt, opts, res; + opts = {}; + args = {}; + nonParsedOpts = this._opts.concat(); + nonParsedArgs = this._args.concat(); + while (i = argv.shift()) { + if (i !== '--' && !i.indexOf('-')) { + if (m = i.match(/^(--\w[\w-_]*)=(.*)$/)) { + i = m[1]; + if (!this._optsByKey[i]._flag) { + argv.unshift(m[2]); + } + } + if (opt = this._ejectOpt(nonParsedOpts, this._optsByKey[i])) { + if (Q.isRejected(res = opt._parse(argv, opts))) { + return res; + } + } else { + return this.reject("Unknown option: " + i); + } + } else { + if (i === '--') { + i = argv.splice(0); + } + i = Array.isArray(i) ? i : [i]; + while (a = i.shift()) { + if (arg = nonParsedArgs.shift()) { + if (arg._arr) { + nonParsedArgs.unshift(arg); + } + if (Q.isRejected(res = arg._parse(a, args))) { + return res; + } + } else { + return this.reject("Unknown argument: " + a); + } + } + } + } + return { + opts: this._setDefaults(opts, nonParsedOpts), + args: this._setDefaults(args, nonParsedArgs) + }; + }; + + Cmd.prototype._setDefaults = function(params, desc) { + var i, _i, _len; + for (_i = 0, _len = desc.length; _i < _len; _i++) { + i = desc[_i]; + if (!(i._name in params) && '_def' in i) { + i._saveVal(params, i._def); + } + } + return params; + }; + + Cmd.prototype._processParams = function(params, desc) { + var i, n, notExists, res, v, vals, _i, _j, _len, _len1; + notExists = []; + for (_i = 0, _len = desc.length; _i < _len; _i++) { + i = desc[_i]; + n = i._name; + if (!(n in params)) { + notExists.push(i); + continue; + } + vals = params[n]; + delete params[n]; + if (!Array.isArray(vals)) { + vals = [vals]; + } + for (_j = 0, _len1 = vals.length; _j < _len1; _j++) { + v = vals[_j]; + if (Q.isRejected(res = i._saveVal(params, v))) { + return res; + } + } + } + return this._setDefaults(params, notExists); + }; + + Cmd.prototype._parseArr = function(argv) { + return Q.when(this._parseCmd(argv), function(p) { + return Q.when(p.cmd._parseOptsAndArgs(p.argv), function(r) { + return { + cmd: p.cmd, + opts: r.opts, + args: r.args + }; + }); + }); + }; + + Cmd.prototype._do = function(input) { + var _this = this; + return Q.when(input, function(input) { + var cmd; + cmd = input.cmd; + return [_this._checkRequired].concat(cmd._act || []).reduce(function(res, act) { + return Q.when(res, function(res) { + return act.call(cmd, input.opts, input.args, res); + }); + }, void 0); + }); + }; + + /** + Parse arguments from simple format like NodeJS process.argv + and run ahead current program, i.e. call process.exit when all actions done. + @param {Array} argv + @returns {COA.Cmd} this instance (for chainability) + */ + + + Cmd.prototype.run = function(argv) { + var cb, + _this = this; + if (argv == null) { + argv = process.argv.slice(2); + } + cb = function(code) { + return function(res) { + var _ref, _ref1; + if (res) { + return _this._exit((_ref = res.stack) != null ? _ref : res.toString(), (_ref1 = res.exitCode) != null ? _ref1 : code); + } else { + return _this._exit(); + } + }; + }; + Q.when(this["do"](argv), cb(0), cb(1)).done(); + return this; + }; + + /** + Convenient function to run command from tests. + @param {Array} argv + @returns {Q.Promise} + */ + + + Cmd.prototype["do"] = function(argv) { + return this._do(this._parseArr(argv || [])); + }; + + /** + Invoke specified (or current) command using provided + options and arguments. + @param {String|Array} cmds subcommand to invoke (optional) + @param {Object} opts command options (optional) + @param {Object} args command arguments (optional) + @returns {Q.Promise} + */ + + + Cmd.prototype.invoke = function(cmds, opts, args) { + var _this = this; + if (cmds == null) { + cmds = []; + } + if (opts == null) { + opts = {}; + } + if (args == null) { + args = {}; + } + if (typeof cmds === 'string') { + cmds = cmds.split(' '); + } + if (arguments.length < 3) { + if (!Array.isArray(cmds)) { + args = opts; + opts = cmds; + cmds = []; + } + } + return Q.when(this._parseCmd(cmds), function(p) { + if (p.argv.length) { + return _this.reject("Unknown command: " + cmds.join(' ')); + } + return Q.all([_this._processParams(opts, _this._opts), _this._processParams(args, _this._args)]).spread(function(opts, args) { + return _this._do({ + cmd: p.cmd, + opts: opts, + args: args + }).fail(function(res) { + if (res && res.exitCode === 0) { + return res.toString(); + } else { + return _this.reject(res); + } + }); + }); + }); + }; + + /** + Return reject of actions results promise with error code. + Use in .act() for return with error. + @param {Object} reject reason + You can customize toString() method and exitCode property + of reason object. + @returns {Q.promise} rejected promise + */ + + + Cmd.prototype.reject = function(reason) { + return Q.reject(reason); + }; + + /** + Finish chain for current subcommand and return parent command instance. + @returns {COA.Cmd} parent command + */ + + + Cmd.prototype.end = function() { + return this._cmd; + }; + + return Cmd; + +})(); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/lib/color.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/lib/color.js new file mode 100644 index 00000000..7271c8c8 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/lib/color.js @@ -0,0 +1,25 @@ +// Generated by CoffeeScript 1.6.3 +var colors; + +colors = { + black: '30', + dgray: '1;30', + red: '31', + lred: '1;31', + green: '32', + lgreen: '1;32', + brown: '33', + yellow: '1;33', + blue: '34', + lblue: '1;34', + purple: '35', + lpurple: '1;35', + cyan: '36', + lcyan: '1;36', + lgray: '37', + white: '1;37' +}; + +exports.Color = function(c, str) { + return ['\x1B[', colors[c], 'm', str, '\x1B[m'].join(''); +}; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/lib/completion.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/lib/completion.js new file mode 100644 index 00000000..a4b1edcb --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/lib/completion.js @@ -0,0 +1,134 @@ +// Generated by CoffeeScript 1.6.3 +/** +Most of the code adopted from the npm package shell completion code. +See https://github.com/isaacs/npm/blob/master/lib/completion.js +*/ + +var Q, complete, dumpScript, escape, getOpts, unescape; + +Q = require('q'); + +escape = require('./shell').escape; + +unescape = require('./shell').unescape; + +module.exports = function() { + return this.title('Shell completion').helpful().arg().name('raw').title('Completion words').arr().end().act(function(opts, args) { + var argv, cmd, e, _ref; + if (process.platform === 'win32') { + e = new Error('shell completion not supported on windows'); + e.code = 'ENOTSUP'; + e.errno = require('constants').ENOTSUP; + return this.reject(e); + } + if ((process.env.COMP_CWORD == null) || (process.env.COMP_LINE == null) || (process.env.COMP_POINT == null)) { + return dumpScript(this._cmd._name); + } + console.error('COMP_LINE: %s', process.env.COMP_LINE); + console.error('COMP_CWORD: %s', process.env.COMP_CWORD); + console.error('COMP_POINT: %s', process.env.COMP_POINT); + console.error('args: %j', args.raw); + opts = getOpts(args.raw); + _ref = this._cmd._parseCmd(opts.partialWords), cmd = _ref.cmd, argv = _ref.argv; + return Q.when(complete(cmd, opts), function(compls) { + console.error('filtered: %j', compls); + return console.log(compls.map(escape).join('\n')); + }); + }); +}; + +dumpScript = function(name) { + var defer, fs, path; + fs = require('fs'); + path = require('path'); + defer = Q.defer(); + fs.readFile(path.resolve(__dirname, 'completion.sh'), 'utf8', function(err, d) { + var onError; + if (err) { + return defer.reject(err); + } + d = d.replace(/{{cmd}}/g, path.basename(name)).replace(/^\#\!.*?\n/, ''); + onError = function(err) { + if (err.errno === require('constants').EPIPE) { + process.stdout.removeListener('error', onError); + return defer.resolve(); + } else { + return defer.reject(err); + } + }; + process.stdout.on('error', onError); + return process.stdout.write(d, function() { + return defer.resolve(); + }); + }); + return defer.promise; +}; + +getOpts = function(argv) { + var i, line, partialLine, partialWord, partialWords, point, w, word, words; + line = process.env.COMP_LINE; + w = +process.env.COMP_CWORD; + point = +process.env.COMP_POINT; + words = argv.map(unescape); + word = words[w]; + partialLine = line.substr(0, point); + partialWords = words.slice(0, w); + partialWord = argv[w] || ''; + i = partialWord.length; + while (partialWord.substr(0, i) !== partialLine.substr(-1 * i) && i > 0) { + i--; + } + partialWord = unescape(partialWord.substr(0, i)); + if (partialWord) { + partialWords.push(partialWord); + } + return { + line: line, + w: w, + point: point, + words: words, + word: word, + partialLine: partialLine, + partialWords: partialWords, + partialWord: partialWord + }; +}; + +complete = function(cmd, opts) { + var compls, m, o, opt, optPrefix, optWord; + compls = []; + if (opts.partialWord.indexOf('-')) { + compls = Object.keys(cmd._cmdsByName); + } else { + if (m = opts.partialWord.match(/^(--\w[\w-_]*)=(.*)$/)) { + optWord = m[1]; + optPrefix = optWord + '='; + } else { + compls = Object.keys(cmd._optsByKey); + } + } + if (!(o = opts.partialWords[opts.w - 1]).indexOf('-')) { + optWord = o; + } + if (optWord && (opt = cmd._optsByKey[optWord])) { + if (!opt._flag && opt._comp) { + compls = Q.join(compls, Q.when(opt._comp(opts), function(c, o) { + return c.concat(o.map(function(v) { + return (optPrefix || '') + v; + })); + })); + } + } + if (cmd._comp) { + compls = Q.join(compls, Q.when(cmd._comp(opts)), function(c, o) { + return c.concat(o); + }); + } + return Q.when(compls, function(compls) { + console.error('partialWord: %s', opts.partialWord); + console.error('compls: %j', compls); + return compls.filter(function(c) { + return c.indexOf(opts.partialWord) === 0; + }); + }); +}; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/lib/completion.sh b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/lib/completion.sh new file mode 100644 index 00000000..6d15c871 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/lib/completion.sh @@ -0,0 +1,43 @@ +#!/usr/bin/env bash +###-begin-{{cmd}}-completion-### +# +# {{cmd}} command completion script +# +# Installation: {{cmd}} completion >> ~/.bashrc (or ~/.zshrc) +# Or, maybe: {{cmd}} completion > /usr/local/etc/bash_completion.d/{{cmd}} +# + +COMP_WORDBREAKS=${COMP_WORDBREAKS/=/} +COMP_WORDBREAKS=${COMP_WORDBREAKS/@/} +export COMP_WORDBREAKS + +if complete &>/dev/null; then + _{{cmd}}_completion () { + local si="$IFS" + IFS=$'\n' COMPREPLY=($(COMP_CWORD="$COMP_CWORD" \ + COMP_LINE="$COMP_LINE" \ + COMP_POINT="$COMP_POINT" \ + {{cmd}} completion -- "${COMP_WORDS[@]}" \ + 2>/dev/null)) || return $? + IFS="$si" + } + complete -F _{{cmd}}_completion {{cmd}} +elif compctl &>/dev/null; then + _{{cmd}}_completion () { + local cword line point words si + read -Ac words + read -cn cword + let cword-=1 + read -l line + read -ln point + si="$IFS" + IFS=$'\n' reply=($(COMP_CWORD="$cword" \ + COMP_LINE="$line" \ + COMP_POINT="$point" \ + {{cmd}} completion -- "${words[@]}" \ + 2>/dev/null)) || return $? + IFS="$si" + } + compctl -K _{{cmd}}_completion {{cmd}} +fi +###-end-{{cmd}}-completion-### diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/lib/index.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/lib/index.js new file mode 100644 index 00000000..05b89221 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/lib/index.js @@ -0,0 +1,10 @@ +// Generated by CoffeeScript 1.6.3 +exports.Cmd = require('./cmd').Cmd; + +exports.Opt = require('./cmd').Opt; + +exports.Arg = require('./cmd').Arg; + +exports.shell = require('./shell'); + +exports.require = require; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/lib/opt.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/lib/opt.js new file mode 100644 index 00000000..9aaca543 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/lib/opt.js @@ -0,0 +1,338 @@ +// Generated by CoffeeScript 1.6.3 +var Cmd, Color, Opt, Q, fs; + +fs = require('fs'); + +Q = require('q'); + +Color = require('./color').Color; + +Cmd = require('./cmd').Cmd; + +/** +Option + +Named entity. Options may have short and long keys for use from command line. +@namespace +@class Presents option +*/ + + +exports.Opt = Opt = (function() { + /** + @constructs + @param {COA.Cmd} cmd parent command + */ + + function Opt(_cmd) { + this._cmd = _cmd; + this._cmd._opts.push(this); + } + + /** + Set a canonical option identifier to be used anywhere in the API. + @param {String} _name option name + @returns {COA.Opt} this instance (for chainability) + */ + + + Opt.prototype.name = function(_name) { + this._name = _name; + return this; + }; + + /** + Set a long description for option to be used anywhere in text messages. + @param {String} _title option title + @returns {COA.Opt} this instance (for chainability) + */ + + + Opt.prototype.title = Cmd.prototype.title; + + /** + Set a short key for option to be used with one hyphen from command line. + @param {String} _short + @returns {COA.Opt} this instance (for chainability) + */ + + + Opt.prototype.short = function(_short) { + this._short = _short; + return this._cmd._optsByKey['-' + _short] = this; + }; + + /** + Set a short key for option to be used with double hyphens from command line. + @param {String} _long + @returns {COA.Opt} this instance (for chainability) + */ + + + Opt.prototype.long = function(_long) { + this._long = _long; + return this._cmd._optsByKey['--' + _long] = this; + }; + + /** + Make an option boolean, i.e. option without value. + @returns {COA.Opt} this instance (for chainability) + */ + + + Opt.prototype.flag = function() { + this._flag = true; + return this; + }; + + /** + Makes an option accepts multiple values. + Otherwise, the value will be used by the latter passed. + @returns {COA.Opt} this instance (for chainability) + */ + + + Opt.prototype.arr = function() { + this._arr = true; + return this; + }; + + /** + Makes an option required. + @returns {COA.Opt} this instance (for chainability) + */ + + + Opt.prototype.req = function() { + this._req = true; + return this; + }; + + /** + Makes an option to act as a command, + i.e. program will exit just after option action. + @returns {COA.Opt} this instance (for chainability) + */ + + + Opt.prototype.only = function() { + this._only = true; + return this; + }; + + /** + Set a validation (or value) function for option. + Value from command line passes through before becoming available from API. + Using for validation and convertion simple types to any values. + @param {Function} _val validating function, + invoked in the context of option instance + and has one parameter with value from command line + @returns {COA.Opt} this instance (for chainability) + */ + + + Opt.prototype.val = function(_val) { + this._val = _val; + return this; + }; + + /** + Set a default value for option. + Default value passed through validation function as ordinary value. + @param {Object} _def + @returns {COA.Opt} this instance (for chainability) + */ + + + Opt.prototype.def = function(_def) { + this._def = _def; + return this; + }; + + /** + Make option value inputting stream. + It's add useful validation and shortcut for STDIN. + @returns {COA.Opt} this instance (for chainability) + */ + + + Opt.prototype.input = function() { + process.stdin.pause(); + return this.def(process.stdin).val(function(v) { + var s; + if (typeof v === 'string') { + if (v === '-') { + return process.stdin; + } else { + s = fs.createReadStream(v, { + encoding: 'utf8' + }); + s.pause(); + return s; + } + } else { + return v; + } + }); + }; + + /** + Make option value outputing stream. + It's add useful validation and shortcut for STDOUT. + @returns {COA.Opt} this instance (for chainability) + */ + + + Opt.prototype.output = function() { + return this.def(process.stdout).val(function(v) { + if (typeof v === 'string') { + if (v === '-') { + return process.stdout; + } else { + return fs.createWriteStream(v, { + encoding: 'utf8' + }); + } + } else { + return v; + } + }); + }; + + /** + Add action for current option command. + This action is performed if the current option + is present in parsed options (with any value). + @param {Function} act action function, + invoked in the context of command instance + and has the parameters: + - {Object} opts parsed options + - {Array} args parsed arguments + - {Object} res actions result accumulator + It can return rejected promise by Cmd.reject (in case of error) + or any other value treated as result. + @returns {COA.Opt} this instance (for chainability) + */ + + + Opt.prototype.act = function(act) { + var name, opt; + opt = this; + name = this._name; + this._cmd.act(function(opts) { + var res, + _this = this; + if (name in opts) { + res = act.apply(this, arguments); + if (opt._only) { + return Q.when(res, function(res) { + return _this.reject({ + toString: function() { + return res.toString(); + }, + exitCode: 0 + }); + }); + } else { + return res; + } + } + }); + return this; + }; + + /** + Set custom additional completion for current option. + @param {Function} completion generation function, + invoked in the context of option instance. + Accepts parameters: + - {Object} opts completion options + It can return promise or any other value treated as result. + @returns {COA.Opt} this instance (for chainability) + */ + + + Opt.prototype.comp = Cmd.prototype.comp; + + Opt.prototype._saveVal = function(opts, val) { + var _name; + if (this._val) { + val = this._val(val); + } + if (this._arr) { + (opts[_name = this._name] || (opts[_name] = [])).push(val); + } else { + opts[this._name] = val; + } + return val; + }; + + Opt.prototype._parse = function(argv, opts) { + return this._saveVal(opts, this._flag ? true : argv.shift()); + }; + + Opt.prototype._checkParsed = function(opts, args) { + return !opts.hasOwnProperty(this._name); + }; + + Opt.prototype._usage = function() { + var nameStr, res; + res = []; + nameStr = this._name.toUpperCase(); + if (this._short) { + res.push('-', Color('lgreen', this._short)); + if (!this._flag) { + res.push(' ' + nameStr); + } + res.push(', '); + } + if (this._long) { + res.push('--', Color('green', this._long)); + if (!this._flag) { + res.push('=' + nameStr); + } + } + res.push(' : ', this._title); + if (this._req) { + res.push(' ', Color('lred', '(required)')); + } + return res.join(''); + }; + + Opt.prototype._requiredText = function() { + return 'Missing required option:\n ' + this._usage(); + }; + + /** + Return rejected promise with error code. + Use in .val() for return with error. + @param {Object} reject reason + You can customize toString() method and exitCode property + of reason object. + @returns {Q.promise} rejected promise + */ + + + Opt.prototype.reject = Cmd.prototype.reject; + + /** + Finish chain for current option and return parent command instance. + @returns {COA.Cmd} parent command + */ + + + Opt.prototype.end = Cmd.prototype.end; + + /** + Apply function with arguments in context of option instance. + @param {Function} fn + @param {Array} args + @returns {COA.Opt} this instance (for chainability) + */ + + + Opt.prototype.apply = Cmd.prototype.apply; + + return Opt; + +})(); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/lib/shell.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/lib/shell.js new file mode 100644 index 00000000..f3d49662 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/lib/shell.js @@ -0,0 +1,14 @@ +// Generated by CoffeeScript 1.6.3 +exports.unescape = function(w) { + w = w.charAt(0) === '"' ? w.replace(/^"|([^\\])"$/g, '$1') : w.replace(/\\ /g, ' '); + return w.replace(/\\("|'|\$|`|\\)/g, '$1'); +}; + +exports.escape = function(w) { + w = w.replace(/(["'$`\\])/g, '\\$1'); + if (w.match(/\s+/)) { + return '"' + w + '"'; + } else { + return w; + } +}; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/node_modules/q/CHANGES.md b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/node_modules/q/CHANGES.md new file mode 100644 index 00000000..cd351fdb --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/node_modules/q/CHANGES.md @@ -0,0 +1,786 @@ + +## 1.4.1 + + - Address an issue that prevented Q from being used as a `<script>` for + Firefox add-ons. Q can now be used in any environment that provides `window` + or `self` globals, favoring `window` since add-ons have an an immutable + `self` that is distinct from `window`. + +## 1.4.0 + + - Add `noConflict` support for use in `<script>` (@jahnjw). + +## 1.3.0 + + - Add tracking for unhandled and handled rejections in Node.js (@benjamingr). + +## 1.2.1 + + - Fix Node.js environment detection for modern Browserify (@kahnjw). + +## 1.2.0 + + - Added Q.any(promisesArray) method (@vergara). + Returns a promise fulfilled with the value of the first resolved promise in + promisesArray. If all promises in promisesArray are rejected, it returns + a rejected promise. + +## 1.1.2 + + - Removed extraneous files from the npm package by using the "files" + whitelist in package.json instead of the .npmignore blacklist. + (@anton-rudeshko) + +## 1.1.1 + + - Fix a pair of regressions in bootstrapping, one which precluded + WebWorker support, and another that precluded support in + ``<script>`` usage outright. #607 + +## 1.1.0 + + - Adds support for enabling long stack traces in node.js by setting + environment variable `Q_DEBUG=1`. + - Introduces the `tap` method to promises, which will see a value + pass through without alteration. + - Use instanceof to recognize own promise instances as opposed to + thenables. + - Construct timeout errors with `code === ETIMEDOUT` (Kornel LesiÅ„ski) + - More descriminant CommonJS module environment detection. + - Dropped continuous integration for Node.js 0.6 and 0.8 because of + changes to npm that preclude the use of new `^` version predicate + operator in any transitive dependency. + - Users can now override `Q.nextTick`. + +## 1.0.1 + + - Adds support for `Q.Promise`, which implements common usage of the + ES6 `Promise` constructor and its methods. `Promise` does not have + a valid promise constructor and a proper implementation awaits + version 2 of Q. + - Removes the console stopgap for a promise inspector. This no longer + works with any degree of reliability. + - Fixes support for content security policies that forbid eval. Now + using the `StopIteration` global to distinguish SpiderMonkey + generators from ES6 generators, assuming that they will never + coexist. + +## 1.0.0 + +:cake: This is all but a re-release of version 0.9, which has settled +into a gentle maintenance mode and rightly deserves an official 1.0. +An ambitious 2.0 release is already around the corner, but 0.9/1.0 +have been distributed far and wide and demand long term support. + + - Q will now attempt to post a debug message in browsers regardless + of whether window.Touch is defined. Chrome at least now has this + property regardless of whether touch is supported by the underlying + hardware. + - Remove deprecation warning from `promise.valueOf`. The function is + called by the browser in various ways so there is no way to + distinguish usage that should be migrated from usage that cannot be + altered. + +## 0.9.7 + + - :warning: `q.min.js` is no longer checked-in. It is however still + created by Grunt and NPM. + - Fixes a bug that inhibited `Q.async` with implementations of the new + ES6 generators. + - Fixes a bug with `nextTick` affecting Safari 6.0.5 the first time a + page loads when an `iframe` is involved. + - Introduces `passByCopy`, `join`, and `race`. + - Shows stack traces or error messages on the console, instead of + `Error` objects. + - Elimintates wrapper methods for improved performance. + - `Q.all` now propagates progress notifications of the form you might + expect of ES6 iterations, `{value, index}` where the `value` is the + progress notification from the promise at `index`. + +## 0.9.6 + + - Fixes a bug in recognizing the difference between compatible Q + promises, and Q promises from before the implementation of "inspect". + The latter are now coerced. + - Fixes an infinite asynchronous coercion cycle introduced by former + solution, in two independently sufficient ways. 1.) All promises + returned by makePromise now implement "inspect", albeit a default + that reports that the promise has an "unknown" state. 2.) The + implementation of "then/when" is now in "then" instead of "when", so + that the responsibility to "coerce" the given promise rests solely in + the "when" method and the "then" method may assume that "this" is a + promise of the right type. + - Refactors `nextTick` to use an unrolled microtask within Q regardless + of how new ticks a requested. #316 @rkatic + +## 0.9.5 + + - Introduces `inspect` for getting the state of a promise as + `{state: "fulfilled" | "rejected" | "pending", value | reason}`. + - Introduces `allSettled` which produces an array of promises states + for the input promises once they have all "settled". This is in + accordance with a discussion on Promises/A+ that "settled" refers to + a promise that is "fulfilled" or "rejected". "resolved" refers to a + deferred promise that has been "resolved" to another promise, + "sealing its fate" to the fate of the successor promise. + - Long stack traces are now off by default. Set `Q.longStackSupport` + to true to enable long stack traces. + - Long stack traces can now follow the entire asynchronous history of a + promise, not just a single jump. + - Introduces `spawn` for an immediately invoked asychronous generator. + @jlongster + - Support for *experimental* synonyms `mapply`, `mcall`, `nmapply`, + `nmcall` for method invocation. + +## 0.9.4 + + - `isPromise` and `isPromiseAlike` now always returns a boolean + (even for falsy values). #284 @lfac-pt + - Support for ES6 Generators in `async` #288 @andywingo + - Clear duplicate promise rejections from dispatch methods #238 @SLaks + - Unhandled rejection API #296 @domenic + `stopUnhandledRejectionTracking`, `getUnhandledReasons`, + `resetUnhandledRejections`. + +## 0.9.3 + + - Add the ability to give `Q.timeout`'s errors a custom error message. #270 + @jgrenon + - Fix Q's call-stack busting behavior in Node.js 0.10, by switching from + `process.nextTick` to `setImmediate`. #254 #259 + - Fix Q's behavior when used with the Mocha test runner in the browser, since + Mocha introduces a fake `process` global without a `nextTick` property. #267 + - Fix some, but not all, cases wherein Q would give false positives in its + unhandled rejection detection (#252). A fix for other cases (#238) is + hopefully coming soon. + - Made `Q.promise` throw early if given a non-function. + +## 0.9.2 + + - Pass through progress notifications when using `timeout`. #229 @omares + - Pass through progress notifications when using `delay`. + - Fix `nbind` to actually bind the `thisArg`. #232 @davidpadbury + +## 0.9.1 + + - Made the AMD detection compatible with the RequireJS optimizer's `namespace` + option. #225 @terinjokes + - Fix side effects from `valueOf`, and thus from `isFulfilled`, `isRejected`, + and `isPending`. #226 @benjamn + +## 0.9.0 + +This release removes many layers of deprecated methods and brings Q closer to +alignment with Mark Miller’s TC39 [strawman][] for concurrency. At the same +time, it fixes many bugs and adds a few features around error handling. Finally, +it comes with an updated and comprehensive [API Reference][]. + +[strawman]: http://wiki.ecmascript.org/doku.php?id=strawman:concurrency +[API Reference]: https://github.com/kriskowal/q/wiki/API-Reference + +### API Cleanup + +The following deprecated or undocumented methods have been removed. +Their replacements are listed here: + +<table> + <thead> + <tr> + <th>0.8.x method</th> + <th>0.9 replacement</th> + </tr> + </thead> + <tbody> + <tr> + <td><code>Q.ref</code></td> + <td><code>Q</code></td> + </tr> + <tr> + <td><code>call</code>, <code>apply</code>, <code>bind</code> (*)</td> + <td><code>fcall</code>/<code>invoke</code>, <code>fapply</code>/<code>post</code>, <code>fbind</code></td> + </tr> + <tr> + <td><code>ncall</code>, <code>napply</code> (*)</td> + <td><code>nfcall</code>/<code>ninvoke</code>, <code>nfapply</code>/<code>npost</code></td> + </tr> + <tr> + <td><code>end</code></td> + <td><code>done</code></td> + </tr> + <tr> + <td><code>put</code></td> + <td><code>set</code></td> + </tr> + <tr> + <td><code>node</code></td> + <td><code>nbind</code></td> + </tr> + <tr> + <td><code>nend</code></td> + <td><code>nodeify</code></td> + </tr> + <tr> + <td><code>isResolved</code></td> + <td><code>isPending</code></td> + </tr> + <tr> + <td><code>deferred.node</code></td> + <td><code>deferred.makeNodeResolver</code></td> + </tr> + <tr> + <td><code>Method</code>, <code>sender</code></td> + <td><code>dispatcher</code></td> + </tr> + <tr> + <td><code>send</code></td> + <td><code>dispatch</code></td> + </tr> + <tr> + <td><code>view</code>, <code>viewInfo</code></td> + <td>(none)</td> + </tr> + </tbody> +</table> + + +(*) Use of ``thisp`` is discouraged. For calling methods, use ``post`` or +``invoke``. + +### Alignment with the Concurrency Strawman + +- Q now exports a `Q(value)` function, an alias for `resolve`. + `Q.call`, `Q.apply`, and `Q.bind` were removed to make room for the + same methods on the function prototype. +- `invoke` has been aliased to `send` in all its forms. +- `post` with no method name acts like `fapply`. + +### Error Handling + +- Long stack traces can be turned off by setting `Q.stackJumpLimit` to zero. + In the future, this property will be used to fine tune how many stack jumps + are retained in long stack traces; for now, anything nonzero is treated as + one (since Q only tracks one stack jump at the moment, see #144). #168 +- In Node.js, if there are unhandled rejections when the process exits, they + are output to the console. #115 + +### Other + +- `delete` and `set` (née `put`) no longer have a fulfillment value. +- Q promises are no longer frozen, which + [helps with performance](http://code.google.com/p/v8/issues/detail?id=1858). +- `thenReject` is now included, as a counterpart to `thenResolve`. +- The included browser `nextTick` shim is now faster. #195 @rkatic. + +### Bug Fixes + +- Q now works in Internet Explorer 10. #186 @ForbesLindesay +- `fbind` no longer hard-binds the returned function's `this` to `undefined`. + #202 +- `Q.reject` no longer leaks memory. #148 +- `npost` with no arguments now works. #207 +- `allResolved` now works with non-Q promises ("thenables"). #179 +- `keys` behavior is now correct even in browsers without native + `Object.keys`. #192 @rkatic +- `isRejected` and the `exception` property now work correctly if the + rejection reason is falsy. #198 + +### Internals and Advanced + +- The internal interface for a promise now uses + `dispatchPromise(resolve, op, operands)` instead of `sendPromise(op, + resolve, ...operands)`, which reduces the cases where Q needs to do + argument slicing. +- The internal protocol uses different operands. "put" is now "set". + "del" is now "delete". "view" and "viewInfo" have been removed. +- `Q.fulfill` has been added. It is distinct from `Q.resolve` in that + it does not pass promises through, nor coerces promises from other + systems. The promise becomes the fulfillment value. This is only + recommended for use when trying to fulfill a promise with an object that has + a `then` function that is at the same time not a promise. + +## 0.8.12 +- Treat foreign promises as unresolved in `Q.isFulfilled`; this lets `Q.all` + work on arrays containing foreign promises. #154 +- Fix minor incompliances with the [Promises/A+ spec][] and [test suite][]. #157 + #158 + +[Promises/A+ spec]: http://promises-aplus.github.com/promises-spec/ +[test suite]: https://github.com/promises-aplus/promises-tests + +## 0.8.11 + + - Added ``nfcall``, ``nfapply``, and ``nfbind`` as ``thisp``-less versions of + ``ncall``, ``napply``, and ``nbind``. The latter are now deprecated. #142 + - Long stack traces no longer cause linearly-growing memory usage when chaining + promises together. #111 + - Inspecting ``error.stack`` in a rejection handler will now give a long stack + trace. #103 + - Fixed ``Q.timeout`` to clear its timeout handle when the promise is rejected; + previously, it kept the event loop alive until the timeout period expired. + #145 @dfilatov + - Added `q/queue` module, which exports an infinite promise queue + constructor. + +## 0.8.10 + + - Added ``done`` as a replacement for ``end``, taking the usual fulfillment, + rejection, and progress handlers. It's essentially equivalent to + ``then(f, r, p).end()``. + - Added ``Q.onerror``, a settable error trap that you can use to get full stack + traces for uncaught errors. #94 + - Added ``thenResolve`` as a shortcut for returning a constant value once a + promise is fulfilled. #108 @ForbesLindesay + - Various tweaks to progress notification, including propagation and + transformation of progress values and only forwarding a single progress + object. + - Renamed ``nend`` to ``nodeify``. It no longer returns an always-fulfilled + promise when a Node callback is passed. + - ``deferred.resolve`` and ``deferred.reject`` no longer (sometimes) return + ``deferred.promise``. + - Fixed stack traces getting mangled if they hit ``end`` twice. #116 #121 @ef4 + - Fixed ``ninvoke`` and ``npost`` to work on promises for objects with Node + methods. #134 + - Fixed accidental coercion of objects with nontrivial ``valueOf`` methods, + like ``Date``s, by the promise's ``valueOf`` method. #135 + - Fixed ``spread`` not calling the passed rejection handler if given a rejected + promise. + +## 0.8.9 + + - Added ``nend`` + - Added preliminary progress notification support, via + ``promise.then(onFulfilled, onRejected, onProgress)``, + ``promise.progress(onProgress)``, and ``deferred.notify(...progressData)``. + - Made ``put`` and ``del`` return the object acted upon for easier chaining. + #84 + - Fixed coercion cycles with cooperating promises. #106 + +## 0.8.7 + + - Support [Montage Require](http://github.com/kriskowal/mr) + +## 0.8.6 + + - Fixed ``npost`` and ``ninvoke`` to pass the correct ``thisp``. #74 + - Fixed various cases involving unorthodox rejection reasons. #73 #90 + @ef4 + - Fixed double-resolving of misbehaved custom promises. #75 + - Sped up ``Q.all`` for arrays contain already-resolved promises or scalar + values. @ForbesLindesay + - Made stack trace filtering work when concatenating assets. #93 @ef4 + - Added warnings for deprecated methods. @ForbesLindesay + - Added ``.npmignore`` file so that dependent packages get a slimmer + ``node_modules`` directory. + +## 0.8.5 + + - Added preliminary support for long traces (@domenic) + - Added ``fapply``, ``fcall``, ``fbind`` for non-thisp + promised function calls. + - Added ``return`` for async generators, where generators + are implemented. + - Rejected promises now have an "exception" property. If an object + isRejected(object), then object.valueOf().exception will + be the wrapped error. + - Added Jasmine specifications + - Support Internet Explorers 7–9 (with multiple bug fixes @domenic) + - Support Firefox 12 + - Support Safari 5.1.5 + - Support Chrome 18 + +## 0.8.4 + + - WARNING: ``promise.timeout`` is now rejected with an ``Error`` object + and the message now includes the duration of the timeout in + miliseconds. This doesn't constitute (in my opinion) a + backward-incompatibility since it is a change of an undocumented and + unspecified public behavior, but if you happened to depend on the + exception being a string, you will need to revise your code. + - Added ``deferred.makeNodeResolver()`` to replace the more cryptic + ``deferred.node()`` method. + - Added experimental ``Q.promise(maker(resolve, reject))`` to make a + promise inside a callback, such that thrown exceptions in the + callback are converted and the resolver and rejecter are arguments. + This is a shorthand for making a deferred directly and inspired by + @gozala’s stream constructor pattern and the Microsoft Windows Metro + Promise constructor interface. + - Added experimental ``Q.begin()`` that is intended to kick off chains + of ``.then`` so that each of these can be reordered without having to + edit the new and former first step. + +## 0.8.3 + + - Added ``isFulfilled``, ``isRejected``, and ``isResolved`` + to the promise prototype. + - Added ``allResolved`` for waiting for every promise to either be + fulfilled or rejected, without propagating an error. @utvara #53 + - Added ``Q.bind`` as a method to transform functions that + return and throw into promise-returning functions. See + [an example](https://gist.github.com/1782808). @domenic + - Renamed ``node`` export to ``nbind``, and added ``napply`` to + complete the set. ``node`` remains as deprecated. @domenic #58 + - Renamed ``Method`` export to ``sender``. ``Method`` + remains as deprecated and will be removed in the next + major version since I expect it has very little usage. + - Added browser console message indicating a live list of + unhandled errors. + - Added support for ``msSetImmediate`` (IE10) or ``setImmediate`` + (available via [polyfill](https://github.com/NobleJS/setImmediate)) + as a browser-side ``nextTick`` implementation. #44 #50 #59 + - Stopped using the event-queue dependency, which was in place for + Narwhal support: now directly using ``process.nextTick``. + - WARNING: EXPERIMENTAL: added ``finally`` alias for ``fin``, ``catch`` + alias for ``fail``, ``try`` alias for ``call``, and ``delete`` alias + for ``del``. These properties are enquoted in the library for + cross-browser compatibility, but may be used as property names in + modern engines. + +## 0.8.2 + + - Deprecated ``ref`` in favor of ``resolve`` as recommended by + @domenic. + - Update event-queue dependency. + +## 0.8.1 + + - Fixed Opera bug. #35 @cadorn + - Fixed ``Q.all([])`` #32 @domenic + +## 0.8.0 + + - WARNING: ``enqueue`` removed. Use ``nextTick`` instead. + This is more consistent with NodeJS and (subjectively) + more explicit and intuitive. + - WARNING: ``def`` removed. Use ``master`` instead. The + term ``def`` was too confusing to new users. + - WARNING: ``spy`` removed in favor of ``fin``. + - WARNING: ``wait`` removed. Do ``all(args).get(0)`` instead. + - WARNING: ``join`` removed. Do ``all(args).spread(callback)`` instead. + - WARNING: Removed the ``Q`` function module.exports alias + for ``Q.ref``. It conflicts with ``Q.apply`` in weird + ways, making it uncallable. + - Revised ``delay`` so that it accepts both ``(value, + timeout)`` and ``(timeout)`` variations based on + arguments length. + - Added ``ref().spread(cb(...args))``, a variant of + ``then`` that spreads an array across multiple arguments. + Useful with ``all()``. + - Added ``defer().node()`` Node callback generator. The + callback accepts ``(error, value)`` or ``(error, + ...values)``. For multiple value arguments, the + fulfillment value is an array, useful in conjunction with + ``spread``. + - Added ``node`` and ``ncall``, both with the signature + ``(fun, thisp_opt, ...args)``. The former is a decorator + and the latter calls immediately. ``node`` optional + binds and partially applies. ``ncall`` can bind and pass + arguments. + +## 0.7.2 + + - Fixed thenable promise assimilation. + +## 0.7.1 + + - Stopped shimming ``Array.prototype.reduce``. The + enumerable property has bad side-effects. Libraries that + depend on this (for example, QQ) will need to be revised. + +## 0.7.0 - BACKWARD INCOMPATIBILITY + + - WARNING: Removed ``report`` and ``asap`` + - WARNING: The ``callback`` argument of the ``fin`` + function no longer receives any arguments. Thus, it can + be used to call functions that should not receive + arguments on resolution. Use ``when``, ``then``, or + ``fail`` if you need a value. + - IMPORTANT: Fixed a bug in the use of ``MessageChannel`` + for ``nextTick``. + - Renamed ``enqueue`` to ``nextTick``. + - Added experimental ``view`` and ``viewInfo`` for creating + views of promises either when or before they're + fulfilled. + - Shims are now externally applied so subsequent scripts or + dependees can use them. + - Improved minification results. + - Improved readability. + +## 0.6.0 - BACKWARD INCOMPATIBILITY + + - WARNING: In practice, the implementation of ``spy`` and + the name ``fin`` were useful. I've removed the old + ``fin`` implementation and renamed/aliased ``spy``. + - The "q" module now exports its ``ref`` function as a "Q" + constructor, with module systems that support exports + assignment including NodeJS, RequireJS, and when used as + a ``<script>`` tag. Notably, strictly compliant CommonJS + does not support this, but UncommonJS does. + - Added ``async`` decorator for generators that use yield + to "trampoline" promises. In engines that support + generators (SpiderMonkey), this will greatly reduce the + need for nested callbacks. + - Made ``when`` chainable. + - Made ``all`` chainable. + +## 0.5.3 + + - Added ``all`` and refactored ``join`` and ``wait`` to use + it. All of these will now reject at the earliest + rejection. + +## 0.5.2 + + - Minor improvement to ``spy``; now waits for resolution of + callback promise. + +## 0.5.1 + + - Made most Q API methods chainable on promise objects, and + turned the previous promise-methods of ``join``, + ``wait``, and ``report`` into Q API methods. + - Added ``apply`` and ``call`` to the Q API, and ``apply`` + as a promise handler. + - Added ``fail``, ``fin``, and ``spy`` to Q and the promise + prototype for convenience when observing rejection, + fulfillment and rejection, or just observing without + affecting the resolution. + - Renamed ``def`` (although ``def`` remains shimmed until + the next major release) to ``master``. + - Switched to using ``MessageChannel`` for next tick task + enqueue in browsers that support it. + +## 0.5.0 - MINOR BACKWARD INCOMPATIBILITY + + - Exceptions are no longer reported when consumed. + - Removed ``error`` from the API. Since exceptions are + getting consumed, throwing them in an errback causes the + exception to silently disappear. Use ``end``. + - Added ``end`` as both an API method and a promise-chain + ending method. It causes propagated rejections to be + thrown, which allows Node to write stack traces and + emit ``uncaughtException`` events, and browsers to + likewise emit ``onerror`` and log to the console. + - Added ``join`` and ``wait`` as promise chain functions, + so you can wait for variadic promises, returning your own + promise back, or join variadic promises, resolving with a + callback that receives variadic fulfillment values. + +## 0.4.4 + + - ``end`` no longer returns a promise. It is the end of the + promise chain. + - Stopped reporting thrown exceptions in ``when`` callbacks + and errbacks. These must be explicitly reported through + ``.end()``, ``.then(null, Q.error)``, or some other + mechanism. + - Added ``report`` as an API method, which can be used as + an errback to report and propagate an error. + - Added ``report`` as a promise-chain method, so an error + can be reported if it passes such a gate. + +## 0.4.3 + + - Fixed ``<script>`` support that regressed with 0.4.2 + because of "use strict" in the module system + multi-plexer. + +## 0.4.2 + + - Added support for RequireJS (jburke) + +## 0.4.1 + + - Added an "end" method to the promise prototype, + as a shorthand for waiting for the promise to + be resolved gracefully, and failing to do so, + to dump an error message. + +## 0.4.0 - BACKWARD INCOMPATIBLE* + + - *Removed the utility modules. NPM and Node no longer + expose any module except the main module. These have + been moved and merged into the "qq" package. + - *In a non-CommonJS browser, q.js can be used as a script. + It now creates a Q global variable. + - Fixed thenable assimilation. + - Fixed some issues with asap, when it resolves to + undefined, or throws an exception. + +## 0.3.0 - BACKWARD-INCOMPATIBLE + + - The `post` method has been reverted to its original + signature, as provided in Tyler Close's `ref_send` API. + That is, `post` accepts two arguments, the second of + which is an arbitrary object, but usually invocation + arguments as an `Array`. To provide variadic arguments + to `post`, there is a new `invoke` function that posts + the variadic arguments to the value given in the first + argument. + - The `defined` method has been moved from `q` to `q/util` + since it gets no use in practice but is still + theoretically useful. + - The `Promise` constructor has been renamed to + `makePromise` to be consistent with the convention that + functions that do not require the `new` keyword to be + used as constructors have camelCase names. + - The `isResolved` function has been renamed to + `isFulfilled`. There is a new `isResolved` function that + indicates whether a value is not a promise or, if it is a + promise, whether it has been either fulfilled or + rejected. The code has been revised to reflect this + nuance in terminology. + +## 0.2.10 + + - Added `join` to `"q/util"` for variadically joining + multiple promises. + +## 0.2.9 + + - The future-compatible `invoke` method has been added, + to replace `post`, since `post` will become backward- + incompatible in the next major release. + - Exceptions thrown in the callbacks of a `when` call are + now emitted to Node's `"uncaughtException"` `process` + event in addition to being returned as a rejection reason. + +## 0.2.8 + + - Exceptions thrown in the callbacks of a `when` call + are now consumed, warned, and transformed into + rejections of the promise returned by `when`. + +## 0.2.7 + + - Fixed a minor bug in thenable assimilation, regressed + because of the change in the forwarding protocol. + - Fixed behavior of "q/util" `deep` method on dates and + other primitives. Github issue #11. + +## 0.2.6 + + - Thenables (objects with a "then" method) are accepted + and provided, bringing this implementation of Q + into conformance with Promises/A, B, and D. + - Added `makePromise`, to replace the `Promise` function + eventually. + - Rejections are now also duck-typed. A rejection is a + promise with a valueOf method that returns a rejection + descriptor. A rejection descriptor has a + "promiseRejected" property equal to "true" and a + "reason" property corresponding to the rejection reason. + - Altered the `makePromise` API such that the `fallback` + method no longer receives a superfluous `resolved` method + after the `operator`. The fallback method is responsible + only for returning a resolution. This breaks an + undocumented API, so third-party API's depending on the + previous undocumented behavior may break. + +## 0.2.5 + + - Changed promises into a duck-type such that multiple + instances of the Q module can exchange promise objects. + A promise is now defined as "an object that implements the + `promiseSend(op, resolved, ...)` method and `valueOf`". + - Exceptions in promises are now captured and returned + as rejections. + +## 0.2.4 + + - Fixed bug in `ref` that prevented `del` messages from + being received (gozala) + - Fixed a conflict with FireFox 4; constructor property + is now read-only. + +## 0.2.3 + + - Added `keys` message to promises and to the promise API. + +## 0.2.2 + + - Added boilerplate to `q/queue` and `q/util`. + - Fixed missing dependency to `q/queue`. + +## 0.2.1 + + - The `resolve` and `reject` methods of `defer` objects now + return the resolution promise for convenience. + - Added `q/util`, which provides `step`, `delay`, `shallow`, + `deep`, and three reduction orders. + - Added `q/queue` module for a promise `Queue`. + - Added `q-comm` to the list of compatible libraries. + - Deprecated `defined` from `q`, with intent to move it to + `q/util`. + +## 0.2.0 - BACKWARD INCOMPATIBLE + + - Changed post(ref, name, args) to variadic + post(ref, name, ...args). BACKWARD INCOMPATIBLE + - Added a def(value) method to annotate an object as being + necessarily a local value that cannot be serialized, such + that inter-process/worker/vat promise communication + libraries will send messages to it, but never send it + back. + - Added a send(value, op, ...args) method to the public API, for + forwarding messages to a value or promise in a future turn. + +## 0.1.9 + + - Added isRejected() for testing whether a value is a rejected + promise. isResolved() retains the behavior of stating + that rejected promises are not resolved. + +## 0.1.8 + + - Fixed isResolved(null) and isResolved(undefined) [issue #9] + - Fixed a problem with the Object.create shim + +## 0.1.7 + + - shimmed ES5 Object.create in addition to Object.freeze + for compatibility on non-ES5 engines (gozala) + +## 0.1.6 + + - Q.isResolved added + - promise.valueOf() now returns the value of resolved + and near values + - asap retried + - promises are frozen when possible + +## 0.1.5 + + - fixed dependency list for Teleport (gozala) + - all unit tests now pass (gozala) + +## 0.1.4 + + - added support for Teleport as an engine (gozala) + - simplified and updated methods for getting internal + print and enqueue functions universally (gozala) + +## 0.1.3 + + - fixed erroneous link to the q module in package.json + +## 0.1.2 + + - restructured for overlay style package compatibility + +## 0.1.0 + + - removed asap because it was broken, probably down to the + philosophy. + +## 0.0.3 + + - removed q-util + - fixed asap so it returns a value if completed + +## 0.0.2 + + - added q-util + +## 0.0.1 + + - initial version diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/node_modules/q/LICENSE b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/node_modules/q/LICENSE new file mode 100644 index 00000000..8a706b59 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/node_modules/q/LICENSE @@ -0,0 +1,18 @@ +Copyright 2009–2014 Kristopher Michael Kowal. All rights reserved. +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/node_modules/q/README.md b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/node_modules/q/README.md new file mode 100644 index 00000000..9065bfa7 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/node_modules/q/README.md @@ -0,0 +1,881 @@ +[![Build Status](https://secure.travis-ci.org/kriskowal/q.png?branch=master)](http://travis-ci.org/kriskowal/q) + +<a href="http://promises-aplus.github.com/promises-spec"> + <img src="http://kriskowal.github.io/q/q.png" + align="right" alt="Q logo" /> +</a> + +*This is Q version 1, from the `v1` branch in Git. This documentation applies to +the latest of both the version 1 and version 0.9 release trains. These releases +are stable. There will be no further releases of 0.9 after 0.9.7 which is nearly +equivalent to version 1.0.0. All further releases of `q@~1.0` will be backward +compatible. The version 2 release train introduces significant and +backward-incompatible changes and is experimental at this time.* + +If a function cannot return a value or throw an exception without +blocking, it can return a promise instead. A promise is an object +that represents the return value or the thrown exception that the +function may eventually provide. A promise can also be used as a +proxy for a [remote object][Q-Connection] to overcome latency. + +[Q-Connection]: https://github.com/kriskowal/q-connection + +On the first pass, promises can mitigate the “[Pyramid of +Doom][POD]â€: the situation where code marches to the right faster +than it marches forward. + +[POD]: http://calculist.org/blog/2011/12/14/why-coroutines-wont-work-on-the-web/ + +```javascript +step1(function (value1) { + step2(value1, function(value2) { + step3(value2, function(value3) { + step4(value3, function(value4) { + // Do something with value4 + }); + }); + }); +}); +``` + +With a promise library, you can flatten the pyramid. + +```javascript +Q.fcall(promisedStep1) +.then(promisedStep2) +.then(promisedStep3) +.then(promisedStep4) +.then(function (value4) { + // Do something with value4 +}) +.catch(function (error) { + // Handle any error from all above steps +}) +.done(); +``` + +With this approach, you also get implicit error propagation, just like `try`, +`catch`, and `finally`. An error in `promisedStep1` will flow all the way to +the `catch` function, where it’s caught and handled. (Here `promisedStepN` is +a version of `stepN` that returns a promise.) + +The callback approach is called an “inversion of controlâ€. +A function that accepts a callback instead of a return value +is saying, “Don’t call me, I’ll call you.â€. Promises +[un-invert][IOC] the inversion, cleanly separating the input +arguments from control flow arguments. This simplifies the +use and creation of API’s, particularly variadic, +rest and spread arguments. + +[IOC]: http://www.slideshare.net/domenicdenicola/callbacks-promises-and-coroutines-oh-my-the-evolution-of-asynchronicity-in-javascript + + +## Getting Started + +The Q module can be loaded as: + +- A ``<script>`` tag (creating a ``Q`` global variable): ~2.5 KB minified and + gzipped. +- A Node.js and CommonJS module, available in [npm](https://npmjs.org/) as + the [q](https://npmjs.org/package/q) package +- An AMD module +- A [component](https://github.com/component/component) as ``microjs/q`` +- Using [bower](http://bower.io/) as `q#1.0.1` +- Using [NuGet](http://nuget.org/) as [Q](https://nuget.org/packages/q) + +Q can exchange promises with jQuery, Dojo, When.js, WinJS, and more. + +## Resources + +Our [wiki][] contains a number of useful resources, including: + +- A method-by-method [Q API reference][reference]. +- A growing [examples gallery][examples], showing how Q can be used to make + everything better. From XHR to database access to accessing the Flickr API, + Q is there for you. +- There are many libraries that produce and consume Q promises for everything + from file system/database access or RPC to templating. For a list of some of + the more popular ones, see [Libraries][]. +- If you want materials that introduce the promise concept generally, and the + below tutorial isn't doing it for you, check out our collection of + [presentations, blog posts, and podcasts][resources]. +- A guide for those [coming from jQuery's `$.Deferred`][jquery]. + +We'd also love to have you join the Q-Continuum [mailing list][]. + +[wiki]: https://github.com/kriskowal/q/wiki +[reference]: https://github.com/kriskowal/q/wiki/API-Reference +[examples]: https://github.com/kriskowal/q/wiki/Examples-Gallery +[Libraries]: https://github.com/kriskowal/q/wiki/Libraries +[resources]: https://github.com/kriskowal/q/wiki/General-Promise-Resources +[jquery]: https://github.com/kriskowal/q/wiki/Coming-from-jQuery +[mailing list]: https://groups.google.com/forum/#!forum/q-continuum + + +## Tutorial + +Promises have a ``then`` method, which you can use to get the eventual +return value (fulfillment) or thrown exception (rejection). + +```javascript +promiseMeSomething() +.then(function (value) { +}, function (reason) { +}); +``` + +If ``promiseMeSomething`` returns a promise that gets fulfilled later +with a return value, the first function (the fulfillment handler) will be +called with the value. However, if the ``promiseMeSomething`` function +gets rejected later by a thrown exception, the second function (the +rejection handler) will be called with the exception. + +Note that resolution of a promise is always asynchronous: that is, the +fulfillment or rejection handler will always be called in the next turn of the +event loop (i.e. `process.nextTick` in Node). This gives you a nice +guarantee when mentally tracing the flow of your code, namely that +``then`` will always return before either handler is executed. + +In this tutorial, we begin with how to consume and work with promises. We'll +talk about how to create them, and thus create functions like +`promiseMeSomething` that return promises, [below](#the-beginning). + + +### Propagation + +The ``then`` method returns a promise, which in this example, I’m +assigning to ``outputPromise``. + +```javascript +var outputPromise = getInputPromise() +.then(function (input) { +}, function (reason) { +}); +``` + +The ``outputPromise`` variable becomes a new promise for the return +value of either handler. Since a function can only either return a +value or throw an exception, only one handler will ever be called and it +will be responsible for resolving ``outputPromise``. + +- If you return a value in a handler, ``outputPromise`` will get + fulfilled. + +- If you throw an exception in a handler, ``outputPromise`` will get + rejected. + +- If you return a **promise** in a handler, ``outputPromise`` will + “become†that promise. Being able to become a new promise is useful + for managing delays, combining results, or recovering from errors. + +If the ``getInputPromise()`` promise gets rejected and you omit the +rejection handler, the **error** will go to ``outputPromise``: + +```javascript +var outputPromise = getInputPromise() +.then(function (value) { +}); +``` + +If the input promise gets fulfilled and you omit the fulfillment handler, the +**value** will go to ``outputPromise``: + +```javascript +var outputPromise = getInputPromise() +.then(null, function (error) { +}); +``` + +Q promises provide a ``fail`` shorthand for ``then`` when you are only +interested in handling the error: + +```javascript +var outputPromise = getInputPromise() +.fail(function (error) { +}); +``` + +If you are writing JavaScript for modern engines only or using +CoffeeScript, you may use `catch` instead of `fail`. + +Promises also have a ``fin`` function that is like a ``finally`` clause. +The final handler gets called, with no arguments, when the promise +returned by ``getInputPromise()`` either returns a value or throws an +error. The value returned or error thrown by ``getInputPromise()`` +passes directly to ``outputPromise`` unless the final handler fails, and +may be delayed if the final handler returns a promise. + +```javascript +var outputPromise = getInputPromise() +.fin(function () { + // close files, database connections, stop servers, conclude tests +}); +``` + +- If the handler returns a value, the value is ignored +- If the handler throws an error, the error passes to ``outputPromise`` +- If the handler returns a promise, ``outputPromise`` gets postponed. The + eventual value or error has the same effect as an immediate return + value or thrown error: a value would be ignored, an error would be + forwarded. + +If you are writing JavaScript for modern engines only or using +CoffeeScript, you may use `finally` instead of `fin`. + +### Chaining + +There are two ways to chain promises. You can chain promises either +inside or outside handlers. The next two examples are equivalent. + +```javascript +return getUsername() +.then(function (username) { + return getUser(username) + .then(function (user) { + // if we get here without an error, + // the value returned here + // or the exception thrown here + // resolves the promise returned + // by the first line + }) +}); +``` + +```javascript +return getUsername() +.then(function (username) { + return getUser(username); +}) +.then(function (user) { + // if we get here without an error, + // the value returned here + // or the exception thrown here + // resolves the promise returned + // by the first line +}); +``` + +The only difference is nesting. It’s useful to nest handlers if you +need to capture multiple input values in your closure. + +```javascript +function authenticate() { + return getUsername() + .then(function (username) { + return getUser(username); + }) + // chained because we will not need the user name in the next event + .then(function (user) { + return getPassword() + // nested because we need both user and password next + .then(function (password) { + if (user.passwordHash !== hash(password)) { + throw new Error("Can't authenticate"); + } + }); + }); +} +``` + + +### Combination + +You can turn an array of promises into a promise for the whole, +fulfilled array using ``all``. + +```javascript +return Q.all([ + eventualAdd(2, 2), + eventualAdd(10, 20) +]); +``` + +If you have a promise for an array, you can use ``spread`` as a +replacement for ``then``. The ``spread`` function “spreads†the +values over the arguments of the fulfillment handler. The rejection handler +will get called at the first sign of failure. That is, whichever of +the received promises fails first gets handled by the rejection handler. + +```javascript +function eventualAdd(a, b) { + return Q.spread([a, b], function (a, b) { + return a + b; + }) +} +``` + +But ``spread`` calls ``all`` initially, so you can skip it in chains. + +```javascript +return getUsername() +.then(function (username) { + return [username, getUser(username)]; +}) +.spread(function (username, user) { +}); +``` + +The ``all`` function returns a promise for an array of values. When this +promise is fulfilled, the array contains the fulfillment values of the original +promises, in the same order as those promises. If one of the given promises +is rejected, the returned promise is immediately rejected, not waiting for the +rest of the batch. If you want to wait for all of the promises to either be +fulfilled or rejected, you can use ``allSettled``. + +```javascript +Q.allSettled(promises) +.then(function (results) { + results.forEach(function (result) { + if (result.state === "fulfilled") { + var value = result.value; + } else { + var reason = result.reason; + } + }); +}); +``` + +The ``any`` function accepts an array of promises and returns a promise that is +fulfilled by the first given promise to be fulfilled, or rejected if all of the +given promises are rejected. + +```javascript +Q.any(promises) +.then(function (first) { + // Any of the promises was fulfilled. +}, function (error) { + // All of the promises were rejected. +}); +``` + +### Sequences + +If you have a number of promise-producing functions that need +to be run sequentially, you can of course do so manually: + +```javascript +return foo(initialVal).then(bar).then(baz).then(qux); +``` + +However, if you want to run a dynamically constructed sequence of +functions, you'll want something like this: + +```javascript +var funcs = [foo, bar, baz, qux]; + +var result = Q(initialVal); +funcs.forEach(function (f) { + result = result.then(f); +}); +return result; +``` + +You can make this slightly more compact using `reduce`: + +```javascript +return funcs.reduce(function (soFar, f) { + return soFar.then(f); +}, Q(initialVal)); +``` + +Or, you could use the ultra-compact version: + +```javascript +return funcs.reduce(Q.when, Q(initialVal)); +``` + +### Handling Errors + +One sometimes-unintuive aspect of promises is that if you throw an +exception in the fulfillment handler, it will not be caught by the error +handler. + +```javascript +return foo() +.then(function (value) { + throw new Error("Can't bar."); +}, function (error) { + // We only get here if "foo" fails +}); +``` + +To see why this is, consider the parallel between promises and +``try``/``catch``. We are ``try``-ing to execute ``foo()``: the error +handler represents a ``catch`` for ``foo()``, while the fulfillment handler +represents code that happens *after* the ``try``/``catch`` block. +That code then needs its own ``try``/``catch`` block. + +In terms of promises, this means chaining your rejection handler: + +```javascript +return foo() +.then(function (value) { + throw new Error("Can't bar."); +}) +.fail(function (error) { + // We get here with either foo's error or bar's error +}); +``` + +### Progress Notification + +It's possible for promises to report their progress, e.g. for tasks that take a +long time like a file upload. Not all promises will implement progress +notifications, but for those that do, you can consume the progress values using +a third parameter to ``then``: + +```javascript +return uploadFile() +.then(function () { + // Success uploading the file +}, function (err) { + // There was an error, and we get the reason for error +}, function (progress) { + // We get notified of the upload's progress as it is executed +}); +``` + +Like `fail`, Q also provides a shorthand for progress callbacks +called `progress`: + +```javascript +return uploadFile().progress(function (progress) { + // We get notified of the upload's progress +}); +``` + +### The End + +When you get to the end of a chain of promises, you should either +return the last promise or end the chain. Since handlers catch +errors, it’s an unfortunate pattern that the exceptions can go +unobserved. + +So, either return it, + +```javascript +return foo() +.then(function () { + return "bar"; +}); +``` + +Or, end it. + +```javascript +foo() +.then(function () { + return "bar"; +}) +.done(); +``` + +Ending a promise chain makes sure that, if an error doesn’t get +handled before the end, it will get rethrown and reported. + +This is a stopgap. We are exploring ways to make unhandled errors +visible without any explicit handling. + + +### The Beginning + +Everything above assumes you get a promise from somewhere else. This +is the common case. Every once in a while, you will need to create a +promise from scratch. + +#### Using ``Q.fcall`` + +You can create a promise from a value using ``Q.fcall``. This returns a +promise for 10. + +```javascript +return Q.fcall(function () { + return 10; +}); +``` + +You can also use ``fcall`` to get a promise for an exception. + +```javascript +return Q.fcall(function () { + throw new Error("Can't do it"); +}); +``` + +As the name implies, ``fcall`` can call functions, or even promised +functions. This uses the ``eventualAdd`` function above to add two +numbers. + +```javascript +return Q.fcall(eventualAdd, 2, 2); +``` + + +#### Using Deferreds + +If you have to interface with asynchronous functions that are callback-based +instead of promise-based, Q provides a few shortcuts (like ``Q.nfcall`` and +friends). But much of the time, the solution will be to use *deferreds*. + +```javascript +var deferred = Q.defer(); +FS.readFile("foo.txt", "utf-8", function (error, text) { + if (error) { + deferred.reject(new Error(error)); + } else { + deferred.resolve(text); + } +}); +return deferred.promise; +``` + +Note that a deferred can be resolved with a value or a promise. The +``reject`` function is a shorthand for resolving with a rejected +promise. + +```javascript +// this: +deferred.reject(new Error("Can't do it")); + +// is shorthand for: +var rejection = Q.fcall(function () { + throw new Error("Can't do it"); +}); +deferred.resolve(rejection); +``` + +This is a simplified implementation of ``Q.delay``. + +```javascript +function delay(ms) { + var deferred = Q.defer(); + setTimeout(deferred.resolve, ms); + return deferred.promise; +} +``` + +This is a simplified implementation of ``Q.timeout`` + +```javascript +function timeout(promise, ms) { + var deferred = Q.defer(); + Q.when(promise, deferred.resolve); + delay(ms).then(function () { + deferred.reject(new Error("Timed out")); + }); + return deferred.promise; +} +``` + +Finally, you can send a progress notification to the promise with +``deferred.notify``. + +For illustration, this is a wrapper for XML HTTP requests in the browser. Note +that a more [thorough][XHR] implementation would be in order in practice. + +[XHR]: https://github.com/montagejs/mr/blob/71e8df99bb4f0584985accd6f2801ef3015b9763/browser.js#L29-L73 + +```javascript +function requestOkText(url) { + var request = new XMLHttpRequest(); + var deferred = Q.defer(); + + request.open("GET", url, true); + request.onload = onload; + request.onerror = onerror; + request.onprogress = onprogress; + request.send(); + + function onload() { + if (request.status === 200) { + deferred.resolve(request.responseText); + } else { + deferred.reject(new Error("Status code was " + request.status)); + } + } + + function onerror() { + deferred.reject(new Error("Can't XHR " + JSON.stringify(url))); + } + + function onprogress(event) { + deferred.notify(event.loaded / event.total); + } + + return deferred.promise; +} +``` + +Below is an example of how to use this ``requestOkText`` function: + +```javascript +requestOkText("http://localhost:3000") +.then(function (responseText) { + // If the HTTP response returns 200 OK, log the response text. + console.log(responseText); +}, function (error) { + // If there's an error or a non-200 status code, log the error. + console.error(error); +}, function (progress) { + // Log the progress as it comes in. + console.log("Request progress: " + Math.round(progress * 100) + "%"); +}); +``` + +#### Using `Q.Promise` + +This is an alternative promise-creation API that has the same power as +the deferred concept, but without introducing another conceptual entity. + +Rewriting the `requestOkText` example above using `Q.Promise`: + +```javascript +function requestOkText(url) { + return Q.Promise(function(resolve, reject, notify) { + var request = new XMLHttpRequest(); + + request.open("GET", url, true); + request.onload = onload; + request.onerror = onerror; + request.onprogress = onprogress; + request.send(); + + function onload() { + if (request.status === 200) { + resolve(request.responseText); + } else { + reject(new Error("Status code was " + request.status)); + } + } + + function onerror() { + reject(new Error("Can't XHR " + JSON.stringify(url))); + } + + function onprogress(event) { + notify(event.loaded / event.total); + } + }); +} +``` + +If `requestOkText` were to throw an exception, the returned promise would be +rejected with that thrown exception as the rejection reason. + +### The Middle + +If you are using a function that may return a promise, but just might +return a value if it doesn’t need to defer, you can use the “static†+methods of the Q library. + +The ``when`` function is the static equivalent for ``then``. + +```javascript +return Q.when(valueOrPromise, function (value) { +}, function (error) { +}); +``` + +All of the other methods on a promise have static analogs with the +same name. + +The following are equivalent: + +```javascript +return Q.all([a, b]); +``` + +```javascript +return Q.fcall(function () { + return [a, b]; +}) +.all(); +``` + +When working with promises provided by other libraries, you should +convert it to a Q promise. Not all promise libraries make the same +guarantees as Q and certainly don’t provide all of the same methods. +Most libraries only provide a partially functional ``then`` method. +This thankfully is all we need to turn them into vibrant Q promises. + +```javascript +return Q($.ajax(...)) +.then(function () { +}); +``` + +If there is any chance that the promise you receive is not a Q promise +as provided by your library, you should wrap it using a Q function. +You can even use ``Q.invoke`` as a shorthand. + +```javascript +return Q.invoke($, 'ajax', ...) +.then(function () { +}); +``` + + +### Over the Wire + +A promise can serve as a proxy for another object, even a remote +object. There are methods that allow you to optimistically manipulate +properties or call functions. All of these interactions return +promises, so they can be chained. + +``` +direct manipulation using a promise as a proxy +-------------------------- ------------------------------- +value.foo promise.get("foo") +value.foo = value promise.put("foo", value) +delete value.foo promise.del("foo") +value.foo(...args) promise.post("foo", [args]) +value.foo(...args) promise.invoke("foo", ...args) +value(...args) promise.fapply([args]) +value(...args) promise.fcall(...args) +``` + +If the promise is a proxy for a remote object, you can shave +round-trips by using these functions instead of ``then``. To take +advantage of promises for remote objects, check out [Q-Connection][]. + +[Q-Connection]: https://github.com/kriskowal/q-connection + +Even in the case of non-remote objects, these methods can be used as +shorthand for particularly-simple fulfillment handlers. For example, you +can replace + +```javascript +return Q.fcall(function () { + return [{ foo: "bar" }, { foo: "baz" }]; +}) +.then(function (value) { + return value[0].foo; +}); +``` + +with + +```javascript +return Q.fcall(function () { + return [{ foo: "bar" }, { foo: "baz" }]; +}) +.get(0) +.get("foo"); +``` + + +### Adapting Node + +If you're working with functions that make use of the Node.js callback pattern, +where callbacks are in the form of `function(err, result)`, Q provides a few +useful utility functions for converting between them. The most straightforward +are probably `Q.nfcall` and `Q.nfapply` ("Node function call/apply") for calling +Node.js-style functions and getting back a promise: + +```javascript +return Q.nfcall(FS.readFile, "foo.txt", "utf-8"); +return Q.nfapply(FS.readFile, ["foo.txt", "utf-8"]); +``` + +If you are working with methods, instead of simple functions, you can easily +run in to the usual problems where passing a method to another function—like +`Q.nfcall`—"un-binds" the method from its owner. To avoid this, you can either +use `Function.prototype.bind` or some nice shortcut methods we provide: + +```javascript +return Q.ninvoke(redisClient, "get", "user:1:id"); +return Q.npost(redisClient, "get", ["user:1:id"]); +``` + +You can also create reusable wrappers with `Q.denodeify` or `Q.nbind`: + +```javascript +var readFile = Q.denodeify(FS.readFile); +return readFile("foo.txt", "utf-8"); + +var redisClientGet = Q.nbind(redisClient.get, redisClient); +return redisClientGet("user:1:id"); +``` + +Finally, if you're working with raw deferred objects, there is a +`makeNodeResolver` method on deferreds that can be handy: + +```javascript +var deferred = Q.defer(); +FS.readFile("foo.txt", "utf-8", deferred.makeNodeResolver()); +return deferred.promise; +``` + +### Long Stack Traces + +Q comes with optional support for “long stack traces,†wherein the `stack` +property of `Error` rejection reasons is rewritten to be traced along +asynchronous jumps instead of stopping at the most recent one. As an example: + +```js +function theDepthsOfMyProgram() { + Q.delay(100).done(function explode() { + throw new Error("boo!"); + }); +} + +theDepthsOfMyProgram(); +``` + +usually would give a rather unhelpful stack trace looking something like + +``` +Error: boo! + at explode (/path/to/test.js:3:11) + at _fulfilled (/path/to/test.js:q:54) + at resolvedValue.promiseDispatch.done (/path/to/q.js:823:30) + at makePromise.promise.promiseDispatch (/path/to/q.js:496:13) + at pending (/path/to/q.js:397:39) + at process.startup.processNextTick.process._tickCallback (node.js:244:9) +``` + +But, if you turn this feature on by setting + +```js +Q.longStackSupport = true; +``` + +then the above code gives a nice stack trace to the tune of + +``` +Error: boo! + at explode (/path/to/test.js:3:11) +From previous event: + at theDepthsOfMyProgram (/path/to/test.js:2:16) + at Object.<anonymous> (/path/to/test.js:7:1) +``` + +Note how you can see the function that triggered the async operation in the +stack trace! This is very helpful for debugging, as otherwise you end up getting +only the first line, plus a bunch of Q internals, with no sign of where the +operation started. + +In node.js, this feature can also be enabled through the Q_DEBUG environment +variable: + +``` +Q_DEBUG=1 node server.js +``` + +This will enable long stack support in every instance of Q. + +This feature does come with somewhat-serious performance and memory overhead, +however. If you're working with lots of promises, or trying to scale a server +to many users, you should probably keep it off. But in development, go for it! + +## Tests + +You can view the results of the Q test suite [in your browser][tests]! + +[tests]: https://rawgithub.com/kriskowal/q/v1/spec/q-spec.html + +## License + +Copyright 2009–2015 Kristopher Michael Kowal and contributors +MIT License (enclosed) + diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/node_modules/q/package.json b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/node_modules/q/package.json new file mode 100644 index 00000000..8099f2ef --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/node_modules/q/package.json @@ -0,0 +1,120 @@ +{ + "name": "q", + "version": "1.4.1", + "description": "A library for promises (CommonJS/Promises/A,B,D)", + "homepage": "https://github.com/kriskowal/q", + "author": { + "name": "Kris Kowal", + "email": "kris@cixar.com", + "url": "https://github.com/kriskowal" + }, + "keywords": [ + "q", + "promise", + "promises", + "promises-a", + "promises-aplus", + "deferred", + "future", + "async", + "flow control", + "fluent", + "browser", + "node" + ], + "contributors": [ + { + "name": "Kris Kowal", + "email": "kris@cixar.com", + "url": "https://github.com/kriskowal" + }, + { + "name": "Irakli Gozalishvili", + "email": "rfobic@gmail.com", + "url": "http://jeditoolkit.com" + }, + { + "name": "Domenic Denicola", + "email": "domenic@domenicdenicola.com", + "url": "http://domenicdenicola.com" + } + ], + "bugs": { + "url": "http://github.com/kriskowal/q/issues" + }, + "license": { + "type": "MIT", + "url": "http://github.com/kriskowal/q/raw/master/LICENSE" + }, + "main": "q.js", + "files": [ + "LICENSE", + "q.js", + "queue.js" + ], + "repository": { + "type": "git", + "url": "git://github.com/kriskowal/q.git" + }, + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + }, + "dependencies": {}, + "devDependencies": { + "cover": "*", + "grunt": "~0.4.1", + "grunt-cli": "~0.1.9", + "grunt-contrib-uglify": "~0.9.1", + "jasmine-node": "1.11.0", + "jshint": "~2.1.9", + "matcha": "~0.2.0", + "opener": "*", + "promises-aplus-tests": "1.x" + }, + "scripts": { + "test": "jasmine-node spec && promises-aplus-tests spec/aplus-adapter", + "test-browser": "opener spec/q-spec.html", + "benchmark": "matcha", + "lint": "jshint q.js", + "cover": "cover run jasmine-node spec && cover report html && opener cover_html/index.html", + "minify": "grunt", + "prepublish": "grunt" + }, + "overlay": { + "teleport": { + "dependencies": { + "system": ">=0.0.4" + } + } + }, + "directories": { + "test": "./spec" + }, + "gitHead": "d373079d3620152e3d60e82f27265a09ee0e81bd", + "_id": "q@1.4.1", + "_shasum": "55705bcd93c5f3673530c2c2cbc0c2b3addc286e", + "_from": "q@>=1.1.2 <2.0.0", + "_npmVersion": "2.8.3", + "_nodeVersion": "1.8.1", + "_npmUser": { + "name": "kriskowal", + "email": "kris.kowal@cixar.com" + }, + "maintainers": [ + { + "name": "kriskowal", + "email": "kris.kowal@cixar.com" + }, + { + "name": "domenic", + "email": "domenic@domenicdenicola.com" + } + ], + "dist": { + "shasum": "55705bcd93c5f3673530c2c2cbc0c2b3addc286e", + "tarball": "http://registry.npmjs.org/q/-/q-1.4.1.tgz" + }, + "_resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", + "readme": "ERROR: No README data found!" +} diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/node_modules/q/q.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/node_modules/q/q.js new file mode 100644 index 00000000..cf5339e3 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/node_modules/q/q.js @@ -0,0 +1,2048 @@ +// vim:ts=4:sts=4:sw=4: +/*! + * + * Copyright 2009-2012 Kris Kowal under the terms of the MIT + * license found at http://github.com/kriskowal/q/raw/master/LICENSE + * + * With parts by Tyler Close + * Copyright 2007-2009 Tyler Close under the terms of the MIT X license found + * at http://www.opensource.org/licenses/mit-license.html + * Forked at ref_send.js version: 2009-05-11 + * + * With parts by Mark Miller + * Copyright (C) 2011 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +(function (definition) { + "use strict"; + + // This file will function properly as a <script> tag, or a module + // using CommonJS and NodeJS or RequireJS module formats. In + // Common/Node/RequireJS, the module exports the Q API and when + // executed as a simple <script>, it creates a Q global instead. + + // Montage Require + if (typeof bootstrap === "function") { + bootstrap("promise", definition); + + // CommonJS + } else if (typeof exports === "object" && typeof module === "object") { + module.exports = definition(); + + // RequireJS + } else if (typeof define === "function" && define.amd) { + define(definition); + + // SES (Secure EcmaScript) + } else if (typeof ses !== "undefined") { + if (!ses.ok()) { + return; + } else { + ses.makeQ = definition; + } + + // <script> + } else if (typeof window !== "undefined" || typeof self !== "undefined") { + // Prefer window over self for add-on scripts. Use self for + // non-windowed contexts. + var global = typeof window !== "undefined" ? window : self; + + // Get the `window` object, save the previous Q global + // and initialize Q as a global. + var previousQ = global.Q; + global.Q = definition(); + + // Add a noConflict function so Q can be removed from the + // global namespace. + global.Q.noConflict = function () { + global.Q = previousQ; + return this; + }; + + } else { + throw new Error("This environment was not anticipated by Q. Please file a bug."); + } + +})(function () { +"use strict"; + +var hasStacks = false; +try { + throw new Error(); +} catch (e) { + hasStacks = !!e.stack; +} + +// All code after this point will be filtered from stack traces reported +// by Q. +var qStartingLine = captureLine(); +var qFileName; + +// shims + +// used for fallback in "allResolved" +var noop = function () {}; + +// Use the fastest possible means to execute a task in a future turn +// of the event loop. +var nextTick =(function () { + // linked list of tasks (single, with head node) + var head = {task: void 0, next: null}; + var tail = head; + var flushing = false; + var requestTick = void 0; + var isNodeJS = false; + // queue for late tasks, used by unhandled rejection tracking + var laterQueue = []; + + function flush() { + /* jshint loopfunc: true */ + var task, domain; + + while (head.next) { + head = head.next; + task = head.task; + head.task = void 0; + domain = head.domain; + + if (domain) { + head.domain = void 0; + domain.enter(); + } + runSingle(task, domain); + + } + while (laterQueue.length) { + task = laterQueue.pop(); + runSingle(task); + } + flushing = false; + } + // runs a single function in the async queue + function runSingle(task, domain) { + try { + task(); + + } catch (e) { + if (isNodeJS) { + // In node, uncaught exceptions are considered fatal errors. + // Re-throw them synchronously to interrupt flushing! + + // Ensure continuation if the uncaught exception is suppressed + // listening "uncaughtException" events (as domains does). + // Continue in next event to avoid tick recursion. + if (domain) { + domain.exit(); + } + setTimeout(flush, 0); + if (domain) { + domain.enter(); + } + + throw e; + + } else { + // In browsers, uncaught exceptions are not fatal. + // Re-throw them asynchronously to avoid slow-downs. + setTimeout(function () { + throw e; + }, 0); + } + } + + if (domain) { + domain.exit(); + } + } + + nextTick = function (task) { + tail = tail.next = { + task: task, + domain: isNodeJS && process.domain, + next: null + }; + + if (!flushing) { + flushing = true; + requestTick(); + } + }; + + if (typeof process === "object" && + process.toString() === "[object process]" && process.nextTick) { + // Ensure Q is in a real Node environment, with a `process.nextTick`. + // To see through fake Node environments: + // * Mocha test runner - exposes a `process` global without a `nextTick` + // * Browserify - exposes a `process.nexTick` function that uses + // `setTimeout`. In this case `setImmediate` is preferred because + // it is faster. Browserify's `process.toString()` yields + // "[object Object]", while in a real Node environment + // `process.nextTick()` yields "[object process]". + isNodeJS = true; + + requestTick = function () { + process.nextTick(flush); + }; + + } else if (typeof setImmediate === "function") { + // In IE10, Node.js 0.9+, or https://github.com/NobleJS/setImmediate + if (typeof window !== "undefined") { + requestTick = setImmediate.bind(window, flush); + } else { + requestTick = function () { + setImmediate(flush); + }; + } + + } else if (typeof MessageChannel !== "undefined") { + // modern browsers + // http://www.nonblocking.io/2011/06/windownexttick.html + var channel = new MessageChannel(); + // At least Safari Version 6.0.5 (8536.30.1) intermittently cannot create + // working message ports the first time a page loads. + channel.port1.onmessage = function () { + requestTick = requestPortTick; + channel.port1.onmessage = flush; + flush(); + }; + var requestPortTick = function () { + // Opera requires us to provide a message payload, regardless of + // whether we use it. + channel.port2.postMessage(0); + }; + requestTick = function () { + setTimeout(flush, 0); + requestPortTick(); + }; + + } else { + // old browsers + requestTick = function () { + setTimeout(flush, 0); + }; + } + // runs a task after all other tasks have been run + // this is useful for unhandled rejection tracking that needs to happen + // after all `then`d tasks have been run. + nextTick.runAfter = function (task) { + laterQueue.push(task); + if (!flushing) { + flushing = true; + requestTick(); + } + }; + return nextTick; +})(); + +// Attempt to make generics safe in the face of downstream +// modifications. +// There is no situation where this is necessary. +// If you need a security guarantee, these primordials need to be +// deeply frozen anyway, and if you don’t need a security guarantee, +// this is just plain paranoid. +// However, this **might** have the nice side-effect of reducing the size of +// the minified code by reducing x.call() to merely x() +// See Mark Miller’s explanation of what this does. +// http://wiki.ecmascript.org/doku.php?id=conventions:safe_meta_programming +var call = Function.call; +function uncurryThis(f) { + return function () { + return call.apply(f, arguments); + }; +} +// This is equivalent, but slower: +// uncurryThis = Function_bind.bind(Function_bind.call); +// http://jsperf.com/uncurrythis + +var array_slice = uncurryThis(Array.prototype.slice); + +var array_reduce = uncurryThis( + Array.prototype.reduce || function (callback, basis) { + var index = 0, + length = this.length; + // concerning the initial value, if one is not provided + if (arguments.length === 1) { + // seek to the first value in the array, accounting + // for the possibility that is is a sparse array + do { + if (index in this) { + basis = this[index++]; + break; + } + if (++index >= length) { + throw new TypeError(); + } + } while (1); + } + // reduce + for (; index < length; index++) { + // account for the possibility that the array is sparse + if (index in this) { + basis = callback(basis, this[index], index); + } + } + return basis; + } +); + +var array_indexOf = uncurryThis( + Array.prototype.indexOf || function (value) { + // not a very good shim, but good enough for our one use of it + for (var i = 0; i < this.length; i++) { + if (this[i] === value) { + return i; + } + } + return -1; + } +); + +var array_map = uncurryThis( + Array.prototype.map || function (callback, thisp) { + var self = this; + var collect = []; + array_reduce(self, function (undefined, value, index) { + collect.push(callback.call(thisp, value, index, self)); + }, void 0); + return collect; + } +); + +var object_create = Object.create || function (prototype) { + function Type() { } + Type.prototype = prototype; + return new Type(); +}; + +var object_hasOwnProperty = uncurryThis(Object.prototype.hasOwnProperty); + +var object_keys = Object.keys || function (object) { + var keys = []; + for (var key in object) { + if (object_hasOwnProperty(object, key)) { + keys.push(key); + } + } + return keys; +}; + +var object_toString = uncurryThis(Object.prototype.toString); + +function isObject(value) { + return value === Object(value); +} + +// generator related shims + +// FIXME: Remove this function once ES6 generators are in SpiderMonkey. +function isStopIteration(exception) { + return ( + object_toString(exception) === "[object StopIteration]" || + exception instanceof QReturnValue + ); +} + +// FIXME: Remove this helper and Q.return once ES6 generators are in +// SpiderMonkey. +var QReturnValue; +if (typeof ReturnValue !== "undefined") { + QReturnValue = ReturnValue; +} else { + QReturnValue = function (value) { + this.value = value; + }; +} + +// long stack traces + +var STACK_JUMP_SEPARATOR = "From previous event:"; + +function makeStackTraceLong(error, promise) { + // If possible, transform the error stack trace by removing Node and Q + // cruft, then concatenating with the stack trace of `promise`. See #57. + if (hasStacks && + promise.stack && + typeof error === "object" && + error !== null && + error.stack && + error.stack.indexOf(STACK_JUMP_SEPARATOR) === -1 + ) { + var stacks = []; + for (var p = promise; !!p; p = p.source) { + if (p.stack) { + stacks.unshift(p.stack); + } + } + stacks.unshift(error.stack); + + var concatedStacks = stacks.join("\n" + STACK_JUMP_SEPARATOR + "\n"); + error.stack = filterStackString(concatedStacks); + } +} + +function filterStackString(stackString) { + var lines = stackString.split("\n"); + var desiredLines = []; + for (var i = 0; i < lines.length; ++i) { + var line = lines[i]; + + if (!isInternalFrame(line) && !isNodeFrame(line) && line) { + desiredLines.push(line); + } + } + return desiredLines.join("\n"); +} + +function isNodeFrame(stackLine) { + return stackLine.indexOf("(module.js:") !== -1 || + stackLine.indexOf("(node.js:") !== -1; +} + +function getFileNameAndLineNumber(stackLine) { + // Named functions: "at functionName (filename:lineNumber:columnNumber)" + // In IE10 function name can have spaces ("Anonymous function") O_o + var attempt1 = /at .+ \((.+):(\d+):(?:\d+)\)$/.exec(stackLine); + if (attempt1) { + return [attempt1[1], Number(attempt1[2])]; + } + + // Anonymous functions: "at filename:lineNumber:columnNumber" + var attempt2 = /at ([^ ]+):(\d+):(?:\d+)$/.exec(stackLine); + if (attempt2) { + return [attempt2[1], Number(attempt2[2])]; + } + + // Firefox style: "function@filename:lineNumber or @filename:lineNumber" + var attempt3 = /.*@(.+):(\d+)$/.exec(stackLine); + if (attempt3) { + return [attempt3[1], Number(attempt3[2])]; + } +} + +function isInternalFrame(stackLine) { + var fileNameAndLineNumber = getFileNameAndLineNumber(stackLine); + + if (!fileNameAndLineNumber) { + return false; + } + + var fileName = fileNameAndLineNumber[0]; + var lineNumber = fileNameAndLineNumber[1]; + + return fileName === qFileName && + lineNumber >= qStartingLine && + lineNumber <= qEndingLine; +} + +// discover own file name and line number range for filtering stack +// traces +function captureLine() { + if (!hasStacks) { + return; + } + + try { + throw new Error(); + } catch (e) { + var lines = e.stack.split("\n"); + var firstLine = lines[0].indexOf("@") > 0 ? lines[1] : lines[2]; + var fileNameAndLineNumber = getFileNameAndLineNumber(firstLine); + if (!fileNameAndLineNumber) { + return; + } + + qFileName = fileNameAndLineNumber[0]; + return fileNameAndLineNumber[1]; + } +} + +function deprecate(callback, name, alternative) { + return function () { + if (typeof console !== "undefined" && + typeof console.warn === "function") { + console.warn(name + " is deprecated, use " + alternative + + " instead.", new Error("").stack); + } + return callback.apply(callback, arguments); + }; +} + +// end of shims +// beginning of real work + +/** + * Constructs a promise for an immediate reference, passes promises through, or + * coerces promises from different systems. + * @param value immediate reference or promise + */ +function Q(value) { + // If the object is already a Promise, return it directly. This enables + // the resolve function to both be used to created references from objects, + // but to tolerably coerce non-promises to promises. + if (value instanceof Promise) { + return value; + } + + // assimilate thenables + if (isPromiseAlike(value)) { + return coerce(value); + } else { + return fulfill(value); + } +} +Q.resolve = Q; + +/** + * Performs a task in a future turn of the event loop. + * @param {Function} task + */ +Q.nextTick = nextTick; + +/** + * Controls whether or not long stack traces will be on + */ +Q.longStackSupport = false; + +// enable long stacks if Q_DEBUG is set +if (typeof process === "object" && process && process.env && process.env.Q_DEBUG) { + Q.longStackSupport = true; +} + +/** + * Constructs a {promise, resolve, reject} object. + * + * `resolve` is a callback to invoke with a more resolved value for the + * promise. To fulfill the promise, invoke `resolve` with any value that is + * not a thenable. To reject the promise, invoke `resolve` with a rejected + * thenable, or invoke `reject` with the reason directly. To resolve the + * promise to another thenable, thus putting it in the same state, invoke + * `resolve` with that other thenable. + */ +Q.defer = defer; +function defer() { + // if "messages" is an "Array", that indicates that the promise has not yet + // been resolved. If it is "undefined", it has been resolved. Each + // element of the messages array is itself an array of complete arguments to + // forward to the resolved promise. We coerce the resolution value to a + // promise using the `resolve` function because it handles both fully + // non-thenable values and other thenables gracefully. + var messages = [], progressListeners = [], resolvedPromise; + + var deferred = object_create(defer.prototype); + var promise = object_create(Promise.prototype); + + promise.promiseDispatch = function (resolve, op, operands) { + var args = array_slice(arguments); + if (messages) { + messages.push(args); + if (op === "when" && operands[1]) { // progress operand + progressListeners.push(operands[1]); + } + } else { + Q.nextTick(function () { + resolvedPromise.promiseDispatch.apply(resolvedPromise, args); + }); + } + }; + + // XXX deprecated + promise.valueOf = function () { + if (messages) { + return promise; + } + var nearerValue = nearer(resolvedPromise); + if (isPromise(nearerValue)) { + resolvedPromise = nearerValue; // shorten chain + } + return nearerValue; + }; + + promise.inspect = function () { + if (!resolvedPromise) { + return { state: "pending" }; + } + return resolvedPromise.inspect(); + }; + + if (Q.longStackSupport && hasStacks) { + try { + throw new Error(); + } catch (e) { + // NOTE: don't try to use `Error.captureStackTrace` or transfer the + // accessor around; that causes memory leaks as per GH-111. Just + // reify the stack trace as a string ASAP. + // + // At the same time, cut off the first line; it's always just + // "[object Promise]\n", as per the `toString`. + promise.stack = e.stack.substring(e.stack.indexOf("\n") + 1); + } + } + + // NOTE: we do the checks for `resolvedPromise` in each method, instead of + // consolidating them into `become`, since otherwise we'd create new + // promises with the lines `become(whatever(value))`. See e.g. GH-252. + + function become(newPromise) { + resolvedPromise = newPromise; + promise.source = newPromise; + + array_reduce(messages, function (undefined, message) { + Q.nextTick(function () { + newPromise.promiseDispatch.apply(newPromise, message); + }); + }, void 0); + + messages = void 0; + progressListeners = void 0; + } + + deferred.promise = promise; + deferred.resolve = function (value) { + if (resolvedPromise) { + return; + } + + become(Q(value)); + }; + + deferred.fulfill = function (value) { + if (resolvedPromise) { + return; + } + + become(fulfill(value)); + }; + deferred.reject = function (reason) { + if (resolvedPromise) { + return; + } + + become(reject(reason)); + }; + deferred.notify = function (progress) { + if (resolvedPromise) { + return; + } + + array_reduce(progressListeners, function (undefined, progressListener) { + Q.nextTick(function () { + progressListener(progress); + }); + }, void 0); + }; + + return deferred; +} + +/** + * Creates a Node-style callback that will resolve or reject the deferred + * promise. + * @returns a nodeback + */ +defer.prototype.makeNodeResolver = function () { + var self = this; + return function (error, value) { + if (error) { + self.reject(error); + } else if (arguments.length > 2) { + self.resolve(array_slice(arguments, 1)); + } else { + self.resolve(value); + } + }; +}; + +/** + * @param resolver {Function} a function that returns nothing and accepts + * the resolve, reject, and notify functions for a deferred. + * @returns a promise that may be resolved with the given resolve and reject + * functions, or rejected by a thrown exception in resolver + */ +Q.Promise = promise; // ES6 +Q.promise = promise; +function promise(resolver) { + if (typeof resolver !== "function") { + throw new TypeError("resolver must be a function."); + } + var deferred = defer(); + try { + resolver(deferred.resolve, deferred.reject, deferred.notify); + } catch (reason) { + deferred.reject(reason); + } + return deferred.promise; +} + +promise.race = race; // ES6 +promise.all = all; // ES6 +promise.reject = reject; // ES6 +promise.resolve = Q; // ES6 + +// XXX experimental. This method is a way to denote that a local value is +// serializable and should be immediately dispatched to a remote upon request, +// instead of passing a reference. +Q.passByCopy = function (object) { + //freeze(object); + //passByCopies.set(object, true); + return object; +}; + +Promise.prototype.passByCopy = function () { + //freeze(object); + //passByCopies.set(object, true); + return this; +}; + +/** + * If two promises eventually fulfill to the same value, promises that value, + * but otherwise rejects. + * @param x {Any*} + * @param y {Any*} + * @returns {Any*} a promise for x and y if they are the same, but a rejection + * otherwise. + * + */ +Q.join = function (x, y) { + return Q(x).join(y); +}; + +Promise.prototype.join = function (that) { + return Q([this, that]).spread(function (x, y) { + if (x === y) { + // TODO: "===" should be Object.is or equiv + return x; + } else { + throw new Error("Can't join: not the same: " + x + " " + y); + } + }); +}; + +/** + * Returns a promise for the first of an array of promises to become settled. + * @param answers {Array[Any*]} promises to race + * @returns {Any*} the first promise to be settled + */ +Q.race = race; +function race(answerPs) { + return promise(function (resolve, reject) { + // Switch to this once we can assume at least ES5 + // answerPs.forEach(function (answerP) { + // Q(answerP).then(resolve, reject); + // }); + // Use this in the meantime + for (var i = 0, len = answerPs.length; i < len; i++) { + Q(answerPs[i]).then(resolve, reject); + } + }); +} + +Promise.prototype.race = function () { + return this.then(Q.race); +}; + +/** + * Constructs a Promise with a promise descriptor object and optional fallback + * function. The descriptor contains methods like when(rejected), get(name), + * set(name, value), post(name, args), and delete(name), which all + * return either a value, a promise for a value, or a rejection. The fallback + * accepts the operation name, a resolver, and any further arguments that would + * have been forwarded to the appropriate method above had a method been + * provided with the proper name. The API makes no guarantees about the nature + * of the returned object, apart from that it is usable whereever promises are + * bought and sold. + */ +Q.makePromise = Promise; +function Promise(descriptor, fallback, inspect) { + if (fallback === void 0) { + fallback = function (op) { + return reject(new Error( + "Promise does not support operation: " + op + )); + }; + } + if (inspect === void 0) { + inspect = function () { + return {state: "unknown"}; + }; + } + + var promise = object_create(Promise.prototype); + + promise.promiseDispatch = function (resolve, op, args) { + var result; + try { + if (descriptor[op]) { + result = descriptor[op].apply(promise, args); + } else { + result = fallback.call(promise, op, args); + } + } catch (exception) { + result = reject(exception); + } + if (resolve) { + resolve(result); + } + }; + + promise.inspect = inspect; + + // XXX deprecated `valueOf` and `exception` support + if (inspect) { + var inspected = inspect(); + if (inspected.state === "rejected") { + promise.exception = inspected.reason; + } + + promise.valueOf = function () { + var inspected = inspect(); + if (inspected.state === "pending" || + inspected.state === "rejected") { + return promise; + } + return inspected.value; + }; + } + + return promise; +} + +Promise.prototype.toString = function () { + return "[object Promise]"; +}; + +Promise.prototype.then = function (fulfilled, rejected, progressed) { + var self = this; + var deferred = defer(); + var done = false; // ensure the untrusted promise makes at most a + // single call to one of the callbacks + + function _fulfilled(value) { + try { + return typeof fulfilled === "function" ? fulfilled(value) : value; + } catch (exception) { + return reject(exception); + } + } + + function _rejected(exception) { + if (typeof rejected === "function") { + makeStackTraceLong(exception, self); + try { + return rejected(exception); + } catch (newException) { + return reject(newException); + } + } + return reject(exception); + } + + function _progressed(value) { + return typeof progressed === "function" ? progressed(value) : value; + } + + Q.nextTick(function () { + self.promiseDispatch(function (value) { + if (done) { + return; + } + done = true; + + deferred.resolve(_fulfilled(value)); + }, "when", [function (exception) { + if (done) { + return; + } + done = true; + + deferred.resolve(_rejected(exception)); + }]); + }); + + // Progress propagator need to be attached in the current tick. + self.promiseDispatch(void 0, "when", [void 0, function (value) { + var newValue; + var threw = false; + try { + newValue = _progressed(value); + } catch (e) { + threw = true; + if (Q.onerror) { + Q.onerror(e); + } else { + throw e; + } + } + + if (!threw) { + deferred.notify(newValue); + } + }]); + + return deferred.promise; +}; + +Q.tap = function (promise, callback) { + return Q(promise).tap(callback); +}; + +/** + * Works almost like "finally", but not called for rejections. + * Original resolution value is passed through callback unaffected. + * Callback may return a promise that will be awaited for. + * @param {Function} callback + * @returns {Q.Promise} + * @example + * doSomething() + * .then(...) + * .tap(console.log) + * .then(...); + */ +Promise.prototype.tap = function (callback) { + callback = Q(callback); + + return this.then(function (value) { + return callback.fcall(value).thenResolve(value); + }); +}; + +/** + * Registers an observer on a promise. + * + * Guarantees: + * + * 1. that fulfilled and rejected will be called only once. + * 2. that either the fulfilled callback or the rejected callback will be + * called, but not both. + * 3. that fulfilled and rejected will not be called in this turn. + * + * @param value promise or immediate reference to observe + * @param fulfilled function to be called with the fulfilled value + * @param rejected function to be called with the rejection exception + * @param progressed function to be called on any progress notifications + * @return promise for the return value from the invoked callback + */ +Q.when = when; +function when(value, fulfilled, rejected, progressed) { + return Q(value).then(fulfilled, rejected, progressed); +} + +Promise.prototype.thenResolve = function (value) { + return this.then(function () { return value; }); +}; + +Q.thenResolve = function (promise, value) { + return Q(promise).thenResolve(value); +}; + +Promise.prototype.thenReject = function (reason) { + return this.then(function () { throw reason; }); +}; + +Q.thenReject = function (promise, reason) { + return Q(promise).thenReject(reason); +}; + +/** + * If an object is not a promise, it is as "near" as possible. + * If a promise is rejected, it is as "near" as possible too. + * If it’s a fulfilled promise, the fulfillment value is nearer. + * If it’s a deferred promise and the deferred has been resolved, the + * resolution is "nearer". + * @param object + * @returns most resolved (nearest) form of the object + */ + +// XXX should we re-do this? +Q.nearer = nearer; +function nearer(value) { + if (isPromise(value)) { + var inspected = value.inspect(); + if (inspected.state === "fulfilled") { + return inspected.value; + } + } + return value; +} + +/** + * @returns whether the given object is a promise. + * Otherwise it is a fulfilled value. + */ +Q.isPromise = isPromise; +function isPromise(object) { + return object instanceof Promise; +} + +Q.isPromiseAlike = isPromiseAlike; +function isPromiseAlike(object) { + return isObject(object) && typeof object.then === "function"; +} + +/** + * @returns whether the given object is a pending promise, meaning not + * fulfilled or rejected. + */ +Q.isPending = isPending; +function isPending(object) { + return isPromise(object) && object.inspect().state === "pending"; +} + +Promise.prototype.isPending = function () { + return this.inspect().state === "pending"; +}; + +/** + * @returns whether the given object is a value or fulfilled + * promise. + */ +Q.isFulfilled = isFulfilled; +function isFulfilled(object) { + return !isPromise(object) || object.inspect().state === "fulfilled"; +} + +Promise.prototype.isFulfilled = function () { + return this.inspect().state === "fulfilled"; +}; + +/** + * @returns whether the given object is a rejected promise. + */ +Q.isRejected = isRejected; +function isRejected(object) { + return isPromise(object) && object.inspect().state === "rejected"; +} + +Promise.prototype.isRejected = function () { + return this.inspect().state === "rejected"; +}; + +//// BEGIN UNHANDLED REJECTION TRACKING + +// This promise library consumes exceptions thrown in handlers so they can be +// handled by a subsequent promise. The exceptions get added to this array when +// they are created, and removed when they are handled. Note that in ES6 or +// shimmed environments, this would naturally be a `Set`. +var unhandledReasons = []; +var unhandledRejections = []; +var reportedUnhandledRejections = []; +var trackUnhandledRejections = true; + +function resetUnhandledRejections() { + unhandledReasons.length = 0; + unhandledRejections.length = 0; + + if (!trackUnhandledRejections) { + trackUnhandledRejections = true; + } +} + +function trackRejection(promise, reason) { + if (!trackUnhandledRejections) { + return; + } + if (typeof process === "object" && typeof process.emit === "function") { + Q.nextTick.runAfter(function () { + if (array_indexOf(unhandledRejections, promise) !== -1) { + process.emit("unhandledRejection", reason, promise); + reportedUnhandledRejections.push(promise); + } + }); + } + + unhandledRejections.push(promise); + if (reason && typeof reason.stack !== "undefined") { + unhandledReasons.push(reason.stack); + } else { + unhandledReasons.push("(no stack) " + reason); + } +} + +function untrackRejection(promise) { + if (!trackUnhandledRejections) { + return; + } + + var at = array_indexOf(unhandledRejections, promise); + if (at !== -1) { + if (typeof process === "object" && typeof process.emit === "function") { + Q.nextTick.runAfter(function () { + var atReport = array_indexOf(reportedUnhandledRejections, promise); + if (atReport !== -1) { + process.emit("rejectionHandled", unhandledReasons[at], promise); + reportedUnhandledRejections.splice(atReport, 1); + } + }); + } + unhandledRejections.splice(at, 1); + unhandledReasons.splice(at, 1); + } +} + +Q.resetUnhandledRejections = resetUnhandledRejections; + +Q.getUnhandledReasons = function () { + // Make a copy so that consumers can't interfere with our internal state. + return unhandledReasons.slice(); +}; + +Q.stopUnhandledRejectionTracking = function () { + resetUnhandledRejections(); + trackUnhandledRejections = false; +}; + +resetUnhandledRejections(); + +//// END UNHANDLED REJECTION TRACKING + +/** + * Constructs a rejected promise. + * @param reason value describing the failure + */ +Q.reject = reject; +function reject(reason) { + var rejection = Promise({ + "when": function (rejected) { + // note that the error has been handled + if (rejected) { + untrackRejection(this); + } + return rejected ? rejected(reason) : this; + } + }, function fallback() { + return this; + }, function inspect() { + return { state: "rejected", reason: reason }; + }); + + // Note that the reason has not been handled. + trackRejection(rejection, reason); + + return rejection; +} + +/** + * Constructs a fulfilled promise for an immediate reference. + * @param value immediate reference + */ +Q.fulfill = fulfill; +function fulfill(value) { + return Promise({ + "when": function () { + return value; + }, + "get": function (name) { + return value[name]; + }, + "set": function (name, rhs) { + value[name] = rhs; + }, + "delete": function (name) { + delete value[name]; + }, + "post": function (name, args) { + // Mark Miller proposes that post with no name should apply a + // promised function. + if (name === null || name === void 0) { + return value.apply(void 0, args); + } else { + return value[name].apply(value, args); + } + }, + "apply": function (thisp, args) { + return value.apply(thisp, args); + }, + "keys": function () { + return object_keys(value); + } + }, void 0, function inspect() { + return { state: "fulfilled", value: value }; + }); +} + +/** + * Converts thenables to Q promises. + * @param promise thenable promise + * @returns a Q promise + */ +function coerce(promise) { + var deferred = defer(); + Q.nextTick(function () { + try { + promise.then(deferred.resolve, deferred.reject, deferred.notify); + } catch (exception) { + deferred.reject(exception); + } + }); + return deferred.promise; +} + +/** + * Annotates an object such that it will never be + * transferred away from this process over any promise + * communication channel. + * @param object + * @returns promise a wrapping of that object that + * additionally responds to the "isDef" message + * without a rejection. + */ +Q.master = master; +function master(object) { + return Promise({ + "isDef": function () {} + }, function fallback(op, args) { + return dispatch(object, op, args); + }, function () { + return Q(object).inspect(); + }); +} + +/** + * Spreads the values of a promised array of arguments into the + * fulfillment callback. + * @param fulfilled callback that receives variadic arguments from the + * promised array + * @param rejected callback that receives the exception if the promise + * is rejected. + * @returns a promise for the return value or thrown exception of + * either callback. + */ +Q.spread = spread; +function spread(value, fulfilled, rejected) { + return Q(value).spread(fulfilled, rejected); +} + +Promise.prototype.spread = function (fulfilled, rejected) { + return this.all().then(function (array) { + return fulfilled.apply(void 0, array); + }, rejected); +}; + +/** + * The async function is a decorator for generator functions, turning + * them into asynchronous generators. Although generators are only part + * of the newest ECMAScript 6 drafts, this code does not cause syntax + * errors in older engines. This code should continue to work and will + * in fact improve over time as the language improves. + * + * ES6 generators are currently part of V8 version 3.19 with the + * --harmony-generators runtime flag enabled. SpiderMonkey has had them + * for longer, but under an older Python-inspired form. This function + * works on both kinds of generators. + * + * Decorates a generator function such that: + * - it may yield promises + * - execution will continue when that promise is fulfilled + * - the value of the yield expression will be the fulfilled value + * - it returns a promise for the return value (when the generator + * stops iterating) + * - the decorated function returns a promise for the return value + * of the generator or the first rejected promise among those + * yielded. + * - if an error is thrown in the generator, it propagates through + * every following yield until it is caught, or until it escapes + * the generator function altogether, and is translated into a + * rejection for the promise returned by the decorated generator. + */ +Q.async = async; +function async(makeGenerator) { + return function () { + // when verb is "send", arg is a value + // when verb is "throw", arg is an exception + function continuer(verb, arg) { + var result; + + // Until V8 3.19 / Chromium 29 is released, SpiderMonkey is the only + // engine that has a deployed base of browsers that support generators. + // However, SM's generators use the Python-inspired semantics of + // outdated ES6 drafts. We would like to support ES6, but we'd also + // like to make it possible to use generators in deployed browsers, so + // we also support Python-style generators. At some point we can remove + // this block. + + if (typeof StopIteration === "undefined") { + // ES6 Generators + try { + result = generator[verb](arg); + } catch (exception) { + return reject(exception); + } + if (result.done) { + return Q(result.value); + } else { + return when(result.value, callback, errback); + } + } else { + // SpiderMonkey Generators + // FIXME: Remove this case when SM does ES6 generators. + try { + result = generator[verb](arg); + } catch (exception) { + if (isStopIteration(exception)) { + return Q(exception.value); + } else { + return reject(exception); + } + } + return when(result, callback, errback); + } + } + var generator = makeGenerator.apply(this, arguments); + var callback = continuer.bind(continuer, "next"); + var errback = continuer.bind(continuer, "throw"); + return callback(); + }; +} + +/** + * The spawn function is a small wrapper around async that immediately + * calls the generator and also ends the promise chain, so that any + * unhandled errors are thrown instead of forwarded to the error + * handler. This is useful because it's extremely common to run + * generators at the top-level to work with libraries. + */ +Q.spawn = spawn; +function spawn(makeGenerator) { + Q.done(Q.async(makeGenerator)()); +} + +// FIXME: Remove this interface once ES6 generators are in SpiderMonkey. +/** + * Throws a ReturnValue exception to stop an asynchronous generator. + * + * This interface is a stop-gap measure to support generator return + * values in older Firefox/SpiderMonkey. In browsers that support ES6 + * generators like Chromium 29, just use "return" in your generator + * functions. + * + * @param value the return value for the surrounding generator + * @throws ReturnValue exception with the value. + * @example + * // ES6 style + * Q.async(function* () { + * var foo = yield getFooPromise(); + * var bar = yield getBarPromise(); + * return foo + bar; + * }) + * // Older SpiderMonkey style + * Q.async(function () { + * var foo = yield getFooPromise(); + * var bar = yield getBarPromise(); + * Q.return(foo + bar); + * }) + */ +Q["return"] = _return; +function _return(value) { + throw new QReturnValue(value); +} + +/** + * The promised function decorator ensures that any promise arguments + * are settled and passed as values (`this` is also settled and passed + * as a value). It will also ensure that the result of a function is + * always a promise. + * + * @example + * var add = Q.promised(function (a, b) { + * return a + b; + * }); + * add(Q(a), Q(B)); + * + * @param {function} callback The function to decorate + * @returns {function} a function that has been decorated. + */ +Q.promised = promised; +function promised(callback) { + return function () { + return spread([this, all(arguments)], function (self, args) { + return callback.apply(self, args); + }); + }; +} + +/** + * sends a message to a value in a future turn + * @param object* the recipient + * @param op the name of the message operation, e.g., "when", + * @param args further arguments to be forwarded to the operation + * @returns result {Promise} a promise for the result of the operation + */ +Q.dispatch = dispatch; +function dispatch(object, op, args) { + return Q(object).dispatch(op, args); +} + +Promise.prototype.dispatch = function (op, args) { + var self = this; + var deferred = defer(); + Q.nextTick(function () { + self.promiseDispatch(deferred.resolve, op, args); + }); + return deferred.promise; +}; + +/** + * Gets the value of a property in a future turn. + * @param object promise or immediate reference for target object + * @param name name of property to get + * @return promise for the property value + */ +Q.get = function (object, key) { + return Q(object).dispatch("get", [key]); +}; + +Promise.prototype.get = function (key) { + return this.dispatch("get", [key]); +}; + +/** + * Sets the value of a property in a future turn. + * @param object promise or immediate reference for object object + * @param name name of property to set + * @param value new value of property + * @return promise for the return value + */ +Q.set = function (object, key, value) { + return Q(object).dispatch("set", [key, value]); +}; + +Promise.prototype.set = function (key, value) { + return this.dispatch("set", [key, value]); +}; + +/** + * Deletes a property in a future turn. + * @param object promise or immediate reference for target object + * @param name name of property to delete + * @return promise for the return value + */ +Q.del = // XXX legacy +Q["delete"] = function (object, key) { + return Q(object).dispatch("delete", [key]); +}; + +Promise.prototype.del = // XXX legacy +Promise.prototype["delete"] = function (key) { + return this.dispatch("delete", [key]); +}; + +/** + * Invokes a method in a future turn. + * @param object promise or immediate reference for target object + * @param name name of method to invoke + * @param value a value to post, typically an array of + * invocation arguments for promises that + * are ultimately backed with `resolve` values, + * as opposed to those backed with URLs + * wherein the posted value can be any + * JSON serializable object. + * @return promise for the return value + */ +// bound locally because it is used by other methods +Q.mapply = // XXX As proposed by "Redsandro" +Q.post = function (object, name, args) { + return Q(object).dispatch("post", [name, args]); +}; + +Promise.prototype.mapply = // XXX As proposed by "Redsandro" +Promise.prototype.post = function (name, args) { + return this.dispatch("post", [name, args]); +}; + +/** + * Invokes a method in a future turn. + * @param object promise or immediate reference for target object + * @param name name of method to invoke + * @param ...args array of invocation arguments + * @return promise for the return value + */ +Q.send = // XXX Mark Miller's proposed parlance +Q.mcall = // XXX As proposed by "Redsandro" +Q.invoke = function (object, name /*...args*/) { + return Q(object).dispatch("post", [name, array_slice(arguments, 2)]); +}; + +Promise.prototype.send = // XXX Mark Miller's proposed parlance +Promise.prototype.mcall = // XXX As proposed by "Redsandro" +Promise.prototype.invoke = function (name /*...args*/) { + return this.dispatch("post", [name, array_slice(arguments, 1)]); +}; + +/** + * Applies the promised function in a future turn. + * @param object promise or immediate reference for target function + * @param args array of application arguments + */ +Q.fapply = function (object, args) { + return Q(object).dispatch("apply", [void 0, args]); +}; + +Promise.prototype.fapply = function (args) { + return this.dispatch("apply", [void 0, args]); +}; + +/** + * Calls the promised function in a future turn. + * @param object promise or immediate reference for target function + * @param ...args array of application arguments + */ +Q["try"] = +Q.fcall = function (object /* ...args*/) { + return Q(object).dispatch("apply", [void 0, array_slice(arguments, 1)]); +}; + +Promise.prototype.fcall = function (/*...args*/) { + return this.dispatch("apply", [void 0, array_slice(arguments)]); +}; + +/** + * Binds the promised function, transforming return values into a fulfilled + * promise and thrown errors into a rejected one. + * @param object promise or immediate reference for target function + * @param ...args array of application arguments + */ +Q.fbind = function (object /*...args*/) { + var promise = Q(object); + var args = array_slice(arguments, 1); + return function fbound() { + return promise.dispatch("apply", [ + this, + args.concat(array_slice(arguments)) + ]); + }; +}; +Promise.prototype.fbind = function (/*...args*/) { + var promise = this; + var args = array_slice(arguments); + return function fbound() { + return promise.dispatch("apply", [ + this, + args.concat(array_slice(arguments)) + ]); + }; +}; + +/** + * Requests the names of the owned properties of a promised + * object in a future turn. + * @param object promise or immediate reference for target object + * @return promise for the keys of the eventually settled object + */ +Q.keys = function (object) { + return Q(object).dispatch("keys", []); +}; + +Promise.prototype.keys = function () { + return this.dispatch("keys", []); +}; + +/** + * Turns an array of promises into a promise for an array. If any of + * the promises gets rejected, the whole array is rejected immediately. + * @param {Array*} an array (or promise for an array) of values (or + * promises for values) + * @returns a promise for an array of the corresponding values + */ +// By Mark Miller +// http://wiki.ecmascript.org/doku.php?id=strawman:concurrency&rev=1308776521#allfulfilled +Q.all = all; +function all(promises) { + return when(promises, function (promises) { + var pendingCount = 0; + var deferred = defer(); + array_reduce(promises, function (undefined, promise, index) { + var snapshot; + if ( + isPromise(promise) && + (snapshot = promise.inspect()).state === "fulfilled" + ) { + promises[index] = snapshot.value; + } else { + ++pendingCount; + when( + promise, + function (value) { + promises[index] = value; + if (--pendingCount === 0) { + deferred.resolve(promises); + } + }, + deferred.reject, + function (progress) { + deferred.notify({ index: index, value: progress }); + } + ); + } + }, void 0); + if (pendingCount === 0) { + deferred.resolve(promises); + } + return deferred.promise; + }); +} + +Promise.prototype.all = function () { + return all(this); +}; + +/** + * Returns the first resolved promise of an array. Prior rejected promises are + * ignored. Rejects only if all promises are rejected. + * @param {Array*} an array containing values or promises for values + * @returns a promise fulfilled with the value of the first resolved promise, + * or a rejected promise if all promises are rejected. + */ +Q.any = any; + +function any(promises) { + if (promises.length === 0) { + return Q.resolve(); + } + + var deferred = Q.defer(); + var pendingCount = 0; + array_reduce(promises, function (prev, current, index) { + var promise = promises[index]; + + pendingCount++; + + when(promise, onFulfilled, onRejected, onProgress); + function onFulfilled(result) { + deferred.resolve(result); + } + function onRejected() { + pendingCount--; + if (pendingCount === 0) { + deferred.reject(new Error( + "Can't get fulfillment value from any promise, all " + + "promises were rejected." + )); + } + } + function onProgress(progress) { + deferred.notify({ + index: index, + value: progress + }); + } + }, undefined); + + return deferred.promise; +} + +Promise.prototype.any = function () { + return any(this); +}; + +/** + * Waits for all promises to be settled, either fulfilled or + * rejected. This is distinct from `all` since that would stop + * waiting at the first rejection. The promise returned by + * `allResolved` will never be rejected. + * @param promises a promise for an array (or an array) of promises + * (or values) + * @return a promise for an array of promises + */ +Q.allResolved = deprecate(allResolved, "allResolved", "allSettled"); +function allResolved(promises) { + return when(promises, function (promises) { + promises = array_map(promises, Q); + return when(all(array_map(promises, function (promise) { + return when(promise, noop, noop); + })), function () { + return promises; + }); + }); +} + +Promise.prototype.allResolved = function () { + return allResolved(this); +}; + +/** + * @see Promise#allSettled + */ +Q.allSettled = allSettled; +function allSettled(promises) { + return Q(promises).allSettled(); +} + +/** + * Turns an array of promises into a promise for an array of their states (as + * returned by `inspect`) when they have all settled. + * @param {Array[Any*]} values an array (or promise for an array) of values (or + * promises for values) + * @returns {Array[State]} an array of states for the respective values. + */ +Promise.prototype.allSettled = function () { + return this.then(function (promises) { + return all(array_map(promises, function (promise) { + promise = Q(promise); + function regardless() { + return promise.inspect(); + } + return promise.then(regardless, regardless); + })); + }); +}; + +/** + * Captures the failure of a promise, giving an oportunity to recover + * with a callback. If the given promise is fulfilled, the returned + * promise is fulfilled. + * @param {Any*} promise for something + * @param {Function} callback to fulfill the returned promise if the + * given promise is rejected + * @returns a promise for the return value of the callback + */ +Q.fail = // XXX legacy +Q["catch"] = function (object, rejected) { + return Q(object).then(void 0, rejected); +}; + +Promise.prototype.fail = // XXX legacy +Promise.prototype["catch"] = function (rejected) { + return this.then(void 0, rejected); +}; + +/** + * Attaches a listener that can respond to progress notifications from a + * promise's originating deferred. This listener receives the exact arguments + * passed to ``deferred.notify``. + * @param {Any*} promise for something + * @param {Function} callback to receive any progress notifications + * @returns the given promise, unchanged + */ +Q.progress = progress; +function progress(object, progressed) { + return Q(object).then(void 0, void 0, progressed); +} + +Promise.prototype.progress = function (progressed) { + return this.then(void 0, void 0, progressed); +}; + +/** + * Provides an opportunity to observe the settling of a promise, + * regardless of whether the promise is fulfilled or rejected. Forwards + * the resolution to the returned promise when the callback is done. + * The callback can return a promise to defer completion. + * @param {Any*} promise + * @param {Function} callback to observe the resolution of the given + * promise, takes no arguments. + * @returns a promise for the resolution of the given promise when + * ``fin`` is done. + */ +Q.fin = // XXX legacy +Q["finally"] = function (object, callback) { + return Q(object)["finally"](callback); +}; + +Promise.prototype.fin = // XXX legacy +Promise.prototype["finally"] = function (callback) { + callback = Q(callback); + return this.then(function (value) { + return callback.fcall().then(function () { + return value; + }); + }, function (reason) { + // TODO attempt to recycle the rejection with "this". + return callback.fcall().then(function () { + throw reason; + }); + }); +}; + +/** + * Terminates a chain of promises, forcing rejections to be + * thrown as exceptions. + * @param {Any*} promise at the end of a chain of promises + * @returns nothing + */ +Q.done = function (object, fulfilled, rejected, progress) { + return Q(object).done(fulfilled, rejected, progress); +}; + +Promise.prototype.done = function (fulfilled, rejected, progress) { + var onUnhandledError = function (error) { + // forward to a future turn so that ``when`` + // does not catch it and turn it into a rejection. + Q.nextTick(function () { + makeStackTraceLong(error, promise); + if (Q.onerror) { + Q.onerror(error); + } else { + throw error; + } + }); + }; + + // Avoid unnecessary `nextTick`ing via an unnecessary `when`. + var promise = fulfilled || rejected || progress ? + this.then(fulfilled, rejected, progress) : + this; + + if (typeof process === "object" && process && process.domain) { + onUnhandledError = process.domain.bind(onUnhandledError); + } + + promise.then(void 0, onUnhandledError); +}; + +/** + * Causes a promise to be rejected if it does not get fulfilled before + * some milliseconds time out. + * @param {Any*} promise + * @param {Number} milliseconds timeout + * @param {Any*} custom error message or Error object (optional) + * @returns a promise for the resolution of the given promise if it is + * fulfilled before the timeout, otherwise rejected. + */ +Q.timeout = function (object, ms, error) { + return Q(object).timeout(ms, error); +}; + +Promise.prototype.timeout = function (ms, error) { + var deferred = defer(); + var timeoutId = setTimeout(function () { + if (!error || "string" === typeof error) { + error = new Error(error || "Timed out after " + ms + " ms"); + error.code = "ETIMEDOUT"; + } + deferred.reject(error); + }, ms); + + this.then(function (value) { + clearTimeout(timeoutId); + deferred.resolve(value); + }, function (exception) { + clearTimeout(timeoutId); + deferred.reject(exception); + }, deferred.notify); + + return deferred.promise; +}; + +/** + * Returns a promise for the given value (or promised value), some + * milliseconds after it resolved. Passes rejections immediately. + * @param {Any*} promise + * @param {Number} milliseconds + * @returns a promise for the resolution of the given promise after milliseconds + * time has elapsed since the resolution of the given promise. + * If the given promise rejects, that is passed immediately. + */ +Q.delay = function (object, timeout) { + if (timeout === void 0) { + timeout = object; + object = void 0; + } + return Q(object).delay(timeout); +}; + +Promise.prototype.delay = function (timeout) { + return this.then(function (value) { + var deferred = defer(); + setTimeout(function () { + deferred.resolve(value); + }, timeout); + return deferred.promise; + }); +}; + +/** + * Passes a continuation to a Node function, which is called with the given + * arguments provided as an array, and returns a promise. + * + * Q.nfapply(FS.readFile, [__filename]) + * .then(function (content) { + * }) + * + */ +Q.nfapply = function (callback, args) { + return Q(callback).nfapply(args); +}; + +Promise.prototype.nfapply = function (args) { + var deferred = defer(); + var nodeArgs = array_slice(args); + nodeArgs.push(deferred.makeNodeResolver()); + this.fapply(nodeArgs).fail(deferred.reject); + return deferred.promise; +}; + +/** + * Passes a continuation to a Node function, which is called with the given + * arguments provided individually, and returns a promise. + * @example + * Q.nfcall(FS.readFile, __filename) + * .then(function (content) { + * }) + * + */ +Q.nfcall = function (callback /*...args*/) { + var args = array_slice(arguments, 1); + return Q(callback).nfapply(args); +}; + +Promise.prototype.nfcall = function (/*...args*/) { + var nodeArgs = array_slice(arguments); + var deferred = defer(); + nodeArgs.push(deferred.makeNodeResolver()); + this.fapply(nodeArgs).fail(deferred.reject); + return deferred.promise; +}; + +/** + * Wraps a NodeJS continuation passing function and returns an equivalent + * version that returns a promise. + * @example + * Q.nfbind(FS.readFile, __filename)("utf-8") + * .then(console.log) + * .done() + */ +Q.nfbind = +Q.denodeify = function (callback /*...args*/) { + var baseArgs = array_slice(arguments, 1); + return function () { + var nodeArgs = baseArgs.concat(array_slice(arguments)); + var deferred = defer(); + nodeArgs.push(deferred.makeNodeResolver()); + Q(callback).fapply(nodeArgs).fail(deferred.reject); + return deferred.promise; + }; +}; + +Promise.prototype.nfbind = +Promise.prototype.denodeify = function (/*...args*/) { + var args = array_slice(arguments); + args.unshift(this); + return Q.denodeify.apply(void 0, args); +}; + +Q.nbind = function (callback, thisp /*...args*/) { + var baseArgs = array_slice(arguments, 2); + return function () { + var nodeArgs = baseArgs.concat(array_slice(arguments)); + var deferred = defer(); + nodeArgs.push(deferred.makeNodeResolver()); + function bound() { + return callback.apply(thisp, arguments); + } + Q(bound).fapply(nodeArgs).fail(deferred.reject); + return deferred.promise; + }; +}; + +Promise.prototype.nbind = function (/*thisp, ...args*/) { + var args = array_slice(arguments, 0); + args.unshift(this); + return Q.nbind.apply(void 0, args); +}; + +/** + * Calls a method of a Node-style object that accepts a Node-style + * callback with a given array of arguments, plus a provided callback. + * @param object an object that has the named method + * @param {String} name name of the method of object + * @param {Array} args arguments to pass to the method; the callback + * will be provided by Q and appended to these arguments. + * @returns a promise for the value or error + */ +Q.nmapply = // XXX As proposed by "Redsandro" +Q.npost = function (object, name, args) { + return Q(object).npost(name, args); +}; + +Promise.prototype.nmapply = // XXX As proposed by "Redsandro" +Promise.prototype.npost = function (name, args) { + var nodeArgs = array_slice(args || []); + var deferred = defer(); + nodeArgs.push(deferred.makeNodeResolver()); + this.dispatch("post", [name, nodeArgs]).fail(deferred.reject); + return deferred.promise; +}; + +/** + * Calls a method of a Node-style object that accepts a Node-style + * callback, forwarding the given variadic arguments, plus a provided + * callback argument. + * @param object an object that has the named method + * @param {String} name name of the method of object + * @param ...args arguments to pass to the method; the callback will + * be provided by Q and appended to these arguments. + * @returns a promise for the value or error + */ +Q.nsend = // XXX Based on Mark Miller's proposed "send" +Q.nmcall = // XXX Based on "Redsandro's" proposal +Q.ninvoke = function (object, name /*...args*/) { + var nodeArgs = array_slice(arguments, 2); + var deferred = defer(); + nodeArgs.push(deferred.makeNodeResolver()); + Q(object).dispatch("post", [name, nodeArgs]).fail(deferred.reject); + return deferred.promise; +}; + +Promise.prototype.nsend = // XXX Based on Mark Miller's proposed "send" +Promise.prototype.nmcall = // XXX Based on "Redsandro's" proposal +Promise.prototype.ninvoke = function (name /*...args*/) { + var nodeArgs = array_slice(arguments, 1); + var deferred = defer(); + nodeArgs.push(deferred.makeNodeResolver()); + this.dispatch("post", [name, nodeArgs]).fail(deferred.reject); + return deferred.promise; +}; + +/** + * If a function would like to support both Node continuation-passing-style and + * promise-returning-style, it can end its internal promise chain with + * `nodeify(nodeback)`, forwarding the optional nodeback argument. If the user + * elects to use a nodeback, the result will be sent there. If they do not + * pass a nodeback, they will receive the result promise. + * @param object a result (or a promise for a result) + * @param {Function} nodeback a Node.js-style callback + * @returns either the promise or nothing + */ +Q.nodeify = nodeify; +function nodeify(object, nodeback) { + return Q(object).nodeify(nodeback); +} + +Promise.prototype.nodeify = function (nodeback) { + if (nodeback) { + this.then(function (value) { + Q.nextTick(function () { + nodeback(null, value); + }); + }, function (error) { + Q.nextTick(function () { + nodeback(error); + }); + }); + } else { + return this; + } +}; + +Q.noConflict = function() { + throw new Error("Q.noConflict only works when Q is used as a global"); +}; + +// All code before this point will be filtered from stack traces. +var qEndingLine = captureLine(); + +return Q; + +}); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/node_modules/q/queue.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/node_modules/q/queue.js new file mode 100644 index 00000000..1505fd0b --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/node_modules/q/queue.js @@ -0,0 +1,35 @@ + +var Q = require("./q"); + +module.exports = Queue; +function Queue() { + var ends = Q.defer(); + var closed = Q.defer(); + return { + put: function (value) { + var next = Q.defer(); + ends.resolve({ + head: value, + tail: next.promise + }); + ends.resolve = next.resolve; + }, + get: function () { + var result = ends.promise.get("head"); + ends.promise = ends.promise.get("tail"); + return result.fail(function (error) { + closed.resolve(error); + throw error; + }); + }, + closed: closed.promise, + close: function (error) { + error = error || new Error("Can't get value from closed queue"); + var end = {head: Q.reject(error)}; + end.tail = end; + ends.resolve(end); + return closed.promise; + } + }; +} + diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/package.json b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/package.json new file mode 100644 index 00000000..6cd6881c --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/package.json @@ -0,0 +1,76 @@ +{ + "name": "coa", + "description": "Command-Option-Argument: Yet another parser for command line options.", + "version": "1.0.1", + "homepage": "http://github.com/veged/coa", + "author": { + "name": "Sergey Berezhnoy", + "email": "veged@ya.ru", + "url": "http://github.com/veged" + }, + "maintainers": [ + { + "name": "veged", + "email": "veged@mail.ru" + }, + { + "name": "arikon", + "email": "peimei@ya.ru" + } + ], + "contributors": [ + { + "name": "Sergey Belov", + "email": "peimei@ya.ru", + "url": "http://github.com/arikon" + } + ], + "repository": { + "type": "git", + "url": "git://github.com/veged/coa.git" + }, + "directories": { + "lib": "./lib" + }, + "dependencies": { + "q": "^1.1.2" + }, + "devDependencies": { + "coffee-script": "~1.6.3", + "istanbul": "~0.1.40", + "mocha-istanbul": "*", + "mocha": "~1.21.4", + "chai": "~1.7.2" + }, + "scripts": { + "test": "make test", + "coverage": "make coverage" + }, + "engines": { + "node": ">= 0.8.0" + }, + "licenses": [ + { + "type": "MIT" + } + ], + "optionalDependencies": {}, + "gitHead": "ec694e82e7fb2c79fc114c9b23625a90c57e81fe", + "bugs": { + "url": "https://github.com/veged/coa/issues" + }, + "_id": "coa@1.0.1", + "_shasum": "7f959346cfc8719e3f7233cd6852854a7c67d8a3", + "_from": "coa@>=1.0.1 <1.1.0", + "_npmVersion": "2.0.0-alpha-5", + "_npmUser": { + "name": "veged", + "email": "veged@ya.ru" + }, + "dist": { + "shasum": "7f959346cfc8719e3f7233cd6852854a7c67d8a3", + "tarball": "http://registry.npmjs.org/coa/-/coa-1.0.1.tgz" + }, + "_resolved": "https://registry.npmjs.org/coa/-/coa-1.0.1.tgz", + "readme": "ERROR: No README data found!" +} diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/src/arg.coffee b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/src/arg.coffee new file mode 100644 index 00000000..da57dff0 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/src/arg.coffee @@ -0,0 +1,130 @@ +Color = require('./color').Color +Cmd = require('./cmd').Cmd +Opt = require('./opt').Opt + +###* +Argument + +Unnamed entity. From command line arguments passed as list of unnamed values. +@namespace +@class Presents argument +### +exports.Arg = class Arg + + ###* + @constructs + @param {COA.Cmd} cmd parent command + ### + constructor: (@_cmd) -> @_cmd._args.push @ + + ###* + Set a canonical argument identifier to be used anywhere in text messages. + @param {String} _name argument name + @returns {COA.Arg} this instance (for chainability) + ### + name: Opt::name + + ###* + Set a long description for argument to be used anywhere in text messages. + @param {String} _title argument title + @returns {COA.Arg} this instance (for chainability) + ### + title: Cmd::title + + ###* + Makes an argument accepts multiple values. + Otherwise, the value will be used by the latter passed. + @returns {COA.Arg} this instance (for chainability) + ### + arr: Opt::arr + + ###* + Makes an argument required. + @returns {COA.Arg} this instance (for chainability) + ### + req: Opt::req + + ###* + Set a validation (or value) function for argument. + Value from command line passes through before becoming available from API. + Using for validation and convertion simple types to any values. + @param {Function} _val validating function, + invoked in the context of argument instance + and has one parameter with value from command line + @returns {COA.Arg} this instance (for chainability) + ### + val: Opt::val + + ###* + Set a default value for argument. + Default value passed through validation function as ordinary value. + @param {Object} _def + @returns {COA.Arg} this instance (for chainability) + ### + def: Opt::def + + ###* + Set custom additional completion for current argument. + @param {Function} completion generation function, + invoked in the context of argument instance. + Accepts parameters: + - {Object} opts completion options + It can return promise or any other value treated as result. + @returns {COA.Arg} this instance (for chainability) + ### + comp: Cmd::comp + + ###* + Make argument value inputting stream. + It's add useful validation and shortcut for STDIN. + @returns {COA.Arg} this instance (for chainability) + ### + input: Opt::input + + ###* + Make argument value outputing stream. + It's add useful validation and shortcut for STDOUT. + @returns {COA.Arg} this instance (for chainability) + ### + output: Opt::output + + _parse: (arg, args) -> + @_saveVal(args, arg) + + _saveVal: Opt::_saveVal + + _checkParsed: (opts, args) -> not args.hasOwnProperty(@_name) + + _usage: -> + res = [] + + res.push Color('lpurple', @_name.toUpperCase()), ' : ', @_title + if @_req then res.push ' ', Color('lred', '(required)') + + res.join '' + + _requiredText: -> 'Missing required argument:\n ' + @_usage() + + ###* + Return rejected promise with error code. + Use in .val() for return with error. + @param {Object} reject reason + You can customize toString() method and exitCode property + of reason object. + @returns {Q.promise} rejected promise + ### + reject: Cmd::reject + + ###* + Finish chain for current option and return parent command instance. + @returns {COA.Cmd} parent command + ### + end: Cmd::end + + ###* + Apply function with arguments in context of arg instance. + @param {Function} fn + @param {Array} args + @returns {COA.Arg} this instance (for chainability) + ### + apply: Cmd::apply diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/src/cmd.coffee b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/src/cmd.coffee new file mode 100644 index 00000000..bde16248 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/src/cmd.coffee @@ -0,0 +1,456 @@ +UTIL = require 'util' +PATH = require 'path' +Color = require('./color').Color +Q = require('q') + +#inspect = require('eyes').inspector { maxLength: 99999, stream: process.stderr } + +###* +Command + +Top level entity. Commands may have options and arguments. +@namespace +@class Presents command +### +exports.Cmd = class Cmd + + ###* + @constructs + @param {COA.Cmd} [cmd] parent command + ### + constructor: (cmd) -> + if this not instanceof Cmd + return new Cmd cmd + + @_parent cmd + + @_cmds = [] + @_cmdsByName = {} + + @_opts = [] + @_optsByKey = {} + + @_args = [] + + @_ext = false + + @get: (propertyName, func) -> + Object.defineProperty @::, propertyName, + configurable: true + enumerable: true + get: func + + ###* + Returns object containing all its subcommands as methods + to use from other programs. + @returns {Object} + ### + @get 'api', () -> + if not @_api + @_api = => @invoke.apply @, arguments + for c of @_cmdsByName + do (c) => + @_api[c] = @_cmdsByName[c].api + @_api + + _parent: (cmd) -> + @_cmd = cmd or this + if cmd + cmd._cmds.push @ + if @_name then @_cmd._cmdsByName[@_name] = @ + @ + + ###* + Set a canonical command identifier to be used anywhere in the API. + @param {String} _name command name + @returns {COA.Cmd} this instance (for chainability) + ### + name: (@_name) -> + if @_cmd isnt @ then @_cmd._cmdsByName[_name] = @ + @ + + ###* + Set a long description for command to be used anywhere in text messages. + @param {String} _title command title + @returns {COA.Cmd} this instance (for chainability) + ### + title: (@_title) -> @ + + ###* + Create new or add existing subcommand for current command. + @param {COA.Cmd} [cmd] existing command instance + @returns {COA.Cmd} new subcommand instance + ### + cmd: (cmd) -> + if cmd then cmd._parent @ + else new Cmd @ + + ###* + Create option for current command. + @returns {COA.Opt} new option instance + ### + opt: -> new (require('./opt').Opt) @ + + ###* + Create argument for current command. + @returns {COA.Opt} new argument instance + ### + arg: -> new (require('./arg').Arg) @ + + ###* + Add (or set) action for current command. + @param {Function} act action function, + invoked in the context of command instance + and has the parameters: + - {Object} opts parsed options + - {Array} args parsed arguments + - {Object} res actions result accumulator + It can return rejected promise by Cmd.reject (in case of error) + or any other value treated as result. + @param {Boolean} [force=false] flag for set action instead add to existings + @returns {COA.Cmd} this instance (for chainability) + ### + act: (act, force) -> + return @ unless act + + if not force and @_act + @_act.push act + else + @_act = [act] + + @ + + ###* + Set custom additional completion for current command. + @param {Function} completion generation function, + invoked in the context of command instance. + Accepts parameters: + - {Object} opts completion options + It can return promise or any other value treated as result. + @returns {COA.Cmd} this instance (for chainability) + ### + comp: (@_comp) -> @ + + ###* + Apply function with arguments in context of command instance. + @param {Function} fn + @param {Array} args + @returns {COA.Cmd} this instance (for chainability) + ### + apply: (fn, args...) -> + fn.apply this, args + @ + + ###* + Make command "helpful", i.e. add -h --help flags for print usage. + @returns {COA.Cmd} this instance (for chainability) + ### + helpful: -> + @opt() + .name('help').title('Help') + .short('h').long('help') + .flag() + .only() + .act -> + return @usage() + .end() + + ###* + Adds shell completion to command, adds "completion" subcommand, + that makes all the magic. + Must be called only on root command. + @returns {COA.Cmd} this instance (for chainability) + ### + completable: -> + @cmd() + .name('completion') + .apply(require './completion') + .end() + + ###* + Allow command to be extendable by external node.js modules. + @param {String} [pattern] Pattern of node.js module to find subcommands at. + @returns {COA.Cmd} this instance (for chainability) + ### + extendable: (pattern) -> + @_ext = pattern or true + @ + + _exit: (msg, code) -> + process.once 'exit', -> + if msg then console.error msg + process.exit code or 0 + + ###* + Build full usage text for current command instance. + @returns {String} usage text + ### + usage: -> + res = [] + + if @_title then res.push @_fullTitle() + + res.push('', 'Usage:') + + if @_cmds.length then res.push(['', '', + Color('lred', @_fullName()), + Color('lblue', 'COMMAND'), + Color('lgreen', '[OPTIONS]'), + Color('lpurple', '[ARGS]')].join ' ') + + if @_opts.length + @_args.length then res.push(['', '', + Color('lred', @_fullName()), + Color('lgreen', '[OPTIONS]'), + Color('lpurple', '[ARGS]')].join ' ') + + res.push( + @_usages(@_cmds, 'Commands'), + @_usages(@_opts, 'Options'), + @_usages(@_args, 'Arguments')) + + res.join '\n' + + _usage: -> + Color('lblue', @_name) + ' : ' + @_title + + _usages: (os, title) -> + unless os.length then return + res = ['', title + ':'] + for o in os + res.push ' ' + o._usage() + res.join '\n' + + _fullTitle: -> + (if @_cmd is this then '' else @_cmd._fullTitle() + '\n') + @_title + + _fullName: -> + (if this._cmd is this then '' else @_cmd._fullName() + ' ') + PATH.basename(@_name) + + _ejectOpt: (opts, opt) -> + if (pos = opts.indexOf(opt)) >= 0 + if opts[pos]._arr + opts[pos] + else + opts.splice(pos, 1)[0] + + _checkRequired: (opts, args) -> + if not (@_opts.filter (o) -> o._only and o._name of opts).length + all = @_opts.concat @_args + while i = all.shift() + if i._req and i._checkParsed opts, args + return @reject i._requiredText() + + _parseCmd: (argv, unparsed = []) -> + argv = argv.concat() + optSeen = false + while i = argv.shift() + if not i.indexOf '-' + optSeen = true + if not optSeen and /^\w[\w-_]*$/.test(i) + cmd = @_cmdsByName[i] + + if not cmd and @_ext + # construct package name to require + if typeof @_ext is 'string' + if ~@_ext.indexOf('%s') + # use formatted string + pkg = UTIL.format(@_ext, i) + else + # just append subcommand name to the prefix + pkg = @_ext + i + else if @_ext is true + # use default scheme: <command>-<subcommand>-<subcommand> and so on + pkg = i + c = @ + loop + pkg = c._name + '-' + pkg + if c._cmd is c then break + c = c._cmd + + try + cmdDesc = require(pkg) + catch e + + if cmdDesc + if typeof cmdDesc == 'function' + # set create subcommand, set its name and apply imported function + @cmd() + .name(i) + .apply(cmdDesc) + .end() + else if typeof cmdDesc == 'object' + # register subcommand + @cmd(cmdDesc) + # set command name + cmdDesc.name(i) + else + throw new Error 'Error: Unsupported command declaration type, ' + + 'should be function or COA.Cmd() object' + cmd = @_cmdsByName[i] + if cmd + return cmd._parseCmd argv, unparsed + + unparsed.push i + + { cmd: @, argv: unparsed } + + _parseOptsAndArgs: (argv) -> + opts = {} + args = {} + + nonParsedOpts = @_opts.concat() + nonParsedArgs = @_args.concat() + + while i = argv.shift() + # opt + if i isnt '--' and not i.indexOf '-' + + if m = i.match /^(--\w[\w-_]*)=(.*)$/ + i = m[1] + + # suppress 'unknown argument' error for flag options with values + if not @_optsByKey[i]._flag + argv.unshift m[2] + + if opt = @_ejectOpt nonParsedOpts, @_optsByKey[i] + if Q.isRejected(res = opt._parse argv, opts) + return res + else + return @reject "Unknown option: #{ i }" + + # arg + else + if i is '--' + i = argv.splice(0) + + i = if Array.isArray(i) then i else [i] + + while a = i.shift() + if arg = nonParsedArgs.shift() + if arg._arr then nonParsedArgs.unshift arg + if Q.isRejected(res = arg._parse a, args) + return res + else + return @reject "Unknown argument: #{ a }" + + # set defaults + { + opts: @_setDefaults(opts, nonParsedOpts), + args: @_setDefaults(args, nonParsedArgs) + } + + _setDefaults: (params, desc) -> + for i in desc + if i._name not of params and '_def' of i + i._saveVal params, i._def + params + + _processParams: (params, desc) -> + notExists = [] + for i in desc + n = i._name + if n not of params + notExists.push i + continue + + vals = params[n] + delete params[n] + if not Array.isArray vals + vals = [vals] + + for v in vals + if Q.isRejected(res = i._saveVal(params, v)) + return res + + # set defaults + @_setDefaults params, notExists + + _parseArr: (argv) -> + Q.when @_parseCmd(argv), (p) -> + Q.when p.cmd._parseOptsAndArgs(p.argv), (r) -> + { cmd: p.cmd, opts: r.opts, args: r.args } + + _do: (input) -> + Q.when input, (input) => + cmd = input.cmd + [@_checkRequired].concat(cmd._act or []).reduce( + (res, act) -> + Q.when res, (res) -> + act.call( + cmd + input.opts + input.args + res) + undefined + ) + + ###* + Parse arguments from simple format like NodeJS process.argv + and run ahead current program, i.e. call process.exit when all actions done. + @param {Array} argv + @returns {COA.Cmd} this instance (for chainability) + ### + run: (argv = process.argv.slice(2)) -> + cb = (code) => (res) => + if res + @_exit res.stack ? res.toString(), res.exitCode ? code + else + @_exit() + Q.when(@do(argv), cb(0), cb(1)).done() + @ + + ###* + Convenient function to run command from tests. + @param {Array} argv + @returns {Q.Promise} + ### + do: (argv) -> + @_do(@_parseArr argv || []) + + ###* + Invoke specified (or current) command using provided + options and arguments. + @param {String|Array} cmds subcommand to invoke (optional) + @param {Object} opts command options (optional) + @param {Object} args command arguments (optional) + @returns {Q.Promise} + ### + invoke: (cmds = [], opts = {}, args = {}) -> + if typeof cmds == 'string' + cmds = cmds.split(' ') + + if arguments.length < 3 + if not Array.isArray cmds + args = opts + opts = cmds + cmds = [] + + Q.when @_parseCmd(cmds), (p) => + if p.argv.length + return @reject "Unknown command: " + cmds.join ' ' + + Q.all([@_processParams(opts, @_opts), @_processParams(args, @_args)]) + .spread (opts, args) => + @_do({ cmd: p.cmd, opts: opts, args: args }) + # catch fails from .only() options + .fail (res) => + if res and res.exitCode is 0 + res.toString() + else + @reject(res) + + ###* + Return reject of actions results promise with error code. + Use in .act() for return with error. + @param {Object} reject reason + You can customize toString() method and exitCode property + of reason object. + @returns {Q.promise} rejected promise + ### + reject: (reason) -> Q.reject(reason) + + ###* + Finish chain for current subcommand and return parent command instance. + @returns {COA.Cmd} parent command + ### + end: -> @_cmd diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/src/color.coffee b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/src/color.coffee new file mode 100644 index 00000000..f07a3a57 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/src/color.coffee @@ -0,0 +1,25 @@ +colors = + black: '30' + dgray: '1;30' + red: '31' + lred: '1;31' + green: '32' + lgreen: '1;32' + brown: '33' + yellow: '1;33' + blue: '34' + lblue: '1;34' + purple: '35' + lpurple: '1;35' + cyan: '36' + lcyan: '1;36' + lgray: '37' + white: '1;37' + +exports.Color = (c, str) -> + # Use \x1B instead of \033 because of CoffeeScript 1.3.x compilation error + [ + '\x1B[', colors[c], 'm' + str + '\x1B[m' + ].join '' diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/src/completion.coffee b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/src/completion.coffee new file mode 100644 index 00000000..2c1e358d --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/src/completion.coffee @@ -0,0 +1,156 @@ +###* +Most of the code adopted from the npm package shell completion code. +See https://github.com/isaacs/npm/blob/master/lib/completion.js +### + +Q = require 'q' +escape = require('./shell').escape +unescape = require('./shell').unescape + +module.exports = -> + @title('Shell completion') + .helpful() + .arg() + .name('raw') + .title('Completion words') + .arr() + .end() + .act (opts, args) -> + if process.platform == 'win32' + e = new Error 'shell completion not supported on windows' + e.code = 'ENOTSUP' + e.errno = require('constants').ENOTSUP + return @reject(e) + + # if the COMP_* isn't in the env, then just dump the script + if !process.env.COMP_CWORD? or !process.env.COMP_LINE? or !process.env.COMP_POINT? + return dumpScript(@_cmd._name) + + console.error 'COMP_LINE: %s', process.env.COMP_LINE + console.error 'COMP_CWORD: %s', process.env.COMP_CWORD + console.error 'COMP_POINT: %s', process.env.COMP_POINT + console.error 'args: %j', args.raw + + # completion opts + opts = getOpts args.raw + + # cmd + { cmd, argv } = @_cmd._parseCmd opts.partialWords + Q.when complete(cmd, opts), (compls) -> + console.error 'filtered: %j', compls + console.log compls.map(escape).join('\n') + + +dumpScript = (name) -> + fs = require 'fs' + path = require 'path' + defer = Q.defer() + + fs.readFile path.resolve(__dirname, 'completion.sh'), 'utf8', (err, d) -> + if err then return defer.reject err + d = d.replace(/{{cmd}}/g, path.basename name).replace(/^\#\!.*?\n/, '') + + onError = (err) -> + # Darwin is a real dick sometimes. + # + # This is necessary because the "source" or "." program in + # bash on OS X closes its file argument before reading + # from it, meaning that you get exactly 1 write, which will + # work most of the time, and will always raise an EPIPE. + # + # Really, one should not be tossing away EPIPE errors, or any + # errors, so casually. But, without this, `. <(cmd completion)` + # can never ever work on OS X. + if err.errno == require('constants').EPIPE + process.stdout.removeListener 'error', onError + defer.resolve() + else + defer.reject(err) + + process.stdout.on 'error', onError + process.stdout.write d, -> defer.resolve() + + defer.promise + + +getOpts = (argv) -> + # get the partial line and partial word, if the point isn't at the end + # ie, tabbing at: cmd foo b|ar + line = process.env.COMP_LINE + w = +process.env.COMP_CWORD + point = +process.env.COMP_POINT + words = argv.map unescape + word = words[w] + partialLine = line.substr 0, point + partialWords = words.slice 0, w + + # figure out where in that last word the point is + partialWord = argv[w] or '' + i = partialWord.length + while partialWord.substr(0, i) isnt partialLine.substr(-1 * i) and i > 0 + i-- + partialWord = unescape partialWord.substr 0, i + if partialWord then partialWords.push partialWord + + { + line: line + w: w + point: point + words: words + word: word + partialLine: partialLine + partialWords: partialWords + partialWord: partialWord + } + + +complete = (cmd, opts) -> + compls = [] + + # complete on cmds + if opts.partialWord.indexOf('-') + compls = Object.keys(cmd._cmdsByName) + # Complete on required opts without '-' in last partial word + # (if required not already specified) + # + # Commented out because of uselessness: + # -b, --block suggest results in '-' on cmd line; + # next completion suggest all options, because of '-' + #.concat Object.keys(cmd._optsByKey).filter (v) -> cmd._optsByKey[v]._req + else + # complete on opt values: --opt=| case + if m = opts.partialWord.match /^(--\w[\w-_]*)=(.*)$/ + optWord = m[1] + optPrefix = optWord + '=' + else + # complete on opts + # don't complete on opts in case of --opt=val completion + # TODO: don't complete on opts in case of unknown arg after commands + # TODO: complete only on opts with arr() or not already used + # TODO: complete only on full opts? + compls = Object.keys cmd._optsByKey + + # complete on opt values: next arg case + if not (o = opts.partialWords[opts.w - 1]).indexOf '-' + optWord = o + + # complete on opt values: completion + if optWord and opt = cmd._optsByKey[optWord] + if not opt._flag and opt._comp + compls = Q.join compls, Q.when opt._comp(opts), (c, o) -> + c.concat o.map (v) -> (optPrefix or '') + v + + # TODO: complete on args values (context aware, custom completion?) + + # custom completion on cmds + if cmd._comp + compls = Q.join compls, Q.when(cmd._comp(opts)), (c, o) -> + c.concat o + + # TODO: context aware custom completion on cmds, opts and args + # (can depend on already entered values, especially options) + + Q.when compls, (compls) -> + console.error 'partialWord: %s', opts.partialWord + console.error 'compls: %j', compls + compls.filter (c) -> c.indexOf(opts.partialWord) is 0 diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/src/index.coffee b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/src/index.coffee new file mode 100644 index 00000000..ae594be3 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/src/index.coffee @@ -0,0 +1,5 @@ +exports.Cmd = require('./cmd').Cmd +exports.Opt = require('./cmd').Opt +exports.Arg = require('./cmd').Arg +exports.shell = require('./shell') +exports.require = require; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/src/opt.coffee b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/src/opt.coffee new file mode 100644 index 00000000..466383df --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/src/opt.coffee @@ -0,0 +1,243 @@ +fs = require 'fs' +Q = require 'q' +Color = require('./color').Color +Cmd = require('./cmd').Cmd + +###* +Option + +Named entity. Options may have short and long keys for use from command line. +@namespace +@class Presents option +### +exports.Opt = class Opt + + ###* + @constructs + @param {COA.Cmd} cmd parent command + ### + constructor: (@_cmd) -> @_cmd._opts.push @ + + ###* + Set a canonical option identifier to be used anywhere in the API. + @param {String} _name option name + @returns {COA.Opt} this instance (for chainability) + ### + name: (@_name) -> @ + + ###* + Set a long description for option to be used anywhere in text messages. + @param {String} _title option title + @returns {COA.Opt} this instance (for chainability) + ### + title: Cmd::title + + ###* + Set a short key for option to be used with one hyphen from command line. + @param {String} _short + @returns {COA.Opt} this instance (for chainability) + ### + short: (@_short) -> @_cmd._optsByKey['-' + _short] = @ + + ###* + Set a short key for option to be used with double hyphens from command line. + @param {String} _long + @returns {COA.Opt} this instance (for chainability) + ### + long: (@_long) -> @_cmd._optsByKey['--' + _long] = @ + + ###* + Make an option boolean, i.e. option without value. + @returns {COA.Opt} this instance (for chainability) + ### + flag: () -> + @_flag = true + @ + + ###* + Makes an option accepts multiple values. + Otherwise, the value will be used by the latter passed. + @returns {COA.Opt} this instance (for chainability) + ### + arr: -> + @_arr = true + @ + + ###* + Makes an option required. + @returns {COA.Opt} this instance (for chainability) + ### + req: -> + @_req = true + @ + + ###* + Makes an option to act as a command, + i.e. program will exit just after option action. + @returns {COA.Opt} this instance (for chainability) + ### + only: -> + @_only = true + @ + + ###* + Set a validation (or value) function for option. + Value from command line passes through before becoming available from API. + Using for validation and convertion simple types to any values. + @param {Function} _val validating function, + invoked in the context of option instance + and has one parameter with value from command line + @returns {COA.Opt} this instance (for chainability) + ### + val: (@_val) -> @ + + ###* + Set a default value for option. + Default value passed through validation function as ordinary value. + @param {Object} _def + @returns {COA.Opt} this instance (for chainability) + ### + def: (@_def) -> @ + + ###* + Make option value inputting stream. + It's add useful validation and shortcut for STDIN. + @returns {COA.Opt} this instance (for chainability) + ### + input: -> + # XXX: hack to workaround a bug in node 0.6.x, + # see https://github.com/joyent/node/issues/2130 + process.stdin.pause(); + + @ + .def(process.stdin) + .val (v) -> + if typeof v is 'string' + if v is '-' + process.stdin + else + s = fs.createReadStream v, { encoding: 'utf8' } + s.pause() + s + else v + + ###* + Make option value outputing stream. + It's add useful validation and shortcut for STDOUT. + @returns {COA.Opt} this instance (for chainability) + ### + output: -> + @ + .def(process.stdout) + .val (v) -> + if typeof v is 'string' + if v is '-' + process.stdout + else + fs.createWriteStream v, { encoding: 'utf8' } + else v + + ###* + Add action for current option command. + This action is performed if the current option + is present in parsed options (with any value). + @param {Function} act action function, + invoked in the context of command instance + and has the parameters: + - {Object} opts parsed options + - {Array} args parsed arguments + - {Object} res actions result accumulator + It can return rejected promise by Cmd.reject (in case of error) + or any other value treated as result. + @returns {COA.Opt} this instance (for chainability) + ### + act: (act) -> + opt = @ + name = @_name + @_cmd.act (opts) -> + if name of opts + res = act.apply @, arguments + if opt._only + Q.when res, (res) => + @reject { + toString: -> res.toString() + exitCode: 0 + } + else + res + @ + + ###* + Set custom additional completion for current option. + @param {Function} completion generation function, + invoked in the context of option instance. + Accepts parameters: + - {Object} opts completion options + It can return promise or any other value treated as result. + @returns {COA.Opt} this instance (for chainability) + ### + comp: Cmd::comp + + _saveVal: (opts, val) -> + if @_val then val = @_val val + if @_arr + (opts[@_name] or= []).push val + else + opts[@_name] = val + val + + _parse: (argv, opts) -> + @_saveVal( + opts, + if @_flag + true + else + argv.shift() + ) + + _checkParsed: (opts, args) -> not opts.hasOwnProperty @_name + + _usage: -> + res = [] + nameStr = @_name.toUpperCase() + + if @_short + res.push '-', Color 'lgreen', @_short + unless @_flag then res.push ' ' + nameStr + res.push ', ' + + if @_long + res.push '--', Color 'green', @_long + unless @_flag then res.push '=' + nameStr + + res.push ' : ', @_title + + if @_req then res.push ' ', Color('lred', '(required)') + + res.join '' + + _requiredText: -> 'Missing required option:\n ' + @_usage() + + ###* + Return rejected promise with error code. + Use in .val() for return with error. + @param {Object} reject reason + You can customize toString() method and exitCode property + of reason object. + @returns {Q.promise} rejected promise + ### + reject: Cmd::reject + + ###* + Finish chain for current option and return parent command instance. + @returns {COA.Cmd} parent command + ### + end: Cmd::end + + ###* + Apply function with arguments in context of option instance. + @param {Function} fn + @param {Array} args + @returns {COA.Opt} this instance (for chainability) + ### + apply: Cmd::apply diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/src/shell.coffee b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/src/shell.coffee new file mode 100644 index 00000000..efad108d --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/src/shell.coffee @@ -0,0 +1,10 @@ +exports.unescape = (w) -> + w = if w.charAt(0) is '"' + w.replace(/^"|([^\\])"$/g, '$1') + else + w.replace(/\\ /g, ' ') + w.replace(/\\("|'|\$|`|\\)/g, '$1') + +exports.escape = (w) -> + w = w.replace(/(["'$`\\])/g,'\\$1') + if w.match(/\s+/) then '"' + w + '"' else w diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/test/coa.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/test/coa.js new file mode 100644 index 00000000..4277321a --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/test/coa.js @@ -0,0 +1,496 @@ +var assert = require('chai').assert, + COA = require('..'); + +/** + * Mocha BDD interface. + */ +/** @name describe @function */ +/** @name it @function */ +/** @name before @function */ +/** @name after @function */ +/** @name beforeEach @function */ +/** @name afterEach @function */ + +describe('Opt', function() { + + describe('Unknown option', function() { + + var cmd = COA.Cmd(); + + it('should fail', function() { + return cmd.do(['-a']) + .then(assert.fail, emptyFn); + }); + + }); + + describe('Short options', function() { + + var cmd = COA.Cmd() + .opt() + .name('a') + .short('a') + .end() + .opt() + .name('b') + .short('b') + .end() + .act(function(opts) { + return opts; + }); + + it('should return passed values', function() { + return cmd.do(['-a', 'a', '-b', 'b']) + .then(function(res) { + assert.deepEqual(res, { a: 'a', b: 'b' }); + }); + }); + + }); + + describe('Long options', function() { + + var cmd = COA.Cmd() + .opt() + .name('long1') + .long('long1') + .end() + .opt() + .name('long2') + .long('long2') + .end() + .act(function(opts) { + return opts; + }); + + it('should return passed values', function() { + return cmd.do(['--long1', 'long value', '--long2=another long value']) + .then(function(res) { + assert.deepEqual(res, { long1: 'long value', long2: 'another long value' }); + }); + }); + + }); + + describe('Array option', function() { + + var cmd = COA.Cmd() + .opt() + .name('a') + .short('a') + .arr() + .end() + .act(function(opts) { + return opts; + }); + + it('should return array of passed values', function() { + return cmd.do(['-a', '1', '-a', '2']) + .then(function(res) { + assert.deepEqual(res, { a: ['1', '2'] }); + }); + }); + + }); + + describe('Required option', function() { + + var cmd = COA.Cmd() + .opt() + .name('a') + .short('a') + .req() + .end() + .act(function(opts) { + return opts; + }); + + it('should fail if not specified', function() { + return cmd.do() + .then(assert.fail, emptyFn); + }); + + it('should return passed value if specified', function() { + return cmd.do(['-a', 'test']) + .then(function(opts) { + assert.equal(opts.a, 'test'); + }); + }); + + }); + + describe('Option with default value', function() { + + var cmd = COA.Cmd() + .opt() + .name('a') + .short('a') + .def('aaa') + .end() + .act(function(opts) { + return opts; + }); + + it('should return default value if not specified', function() { + return cmd.do() + .then(function(opts) { + assert.equal(opts.a, 'aaa'); + }); + }); + + it('should return passed value if specified', function() { + return cmd.do(['-a', 'test']) + .then(function(opts) { + assert.equal(opts.a, 'test'); + }); + }); + + }); + + describe('Validated / transformed option', function() { + + var cmd = COA.Cmd() + .opt() + .name('a') + .short('a') + .val(function(v) { + if (v === 'invalid') return this.reject('fail'); + return { value: v }; + }) + .end() + .act(function(opts) { + return opts; + }); + + it('should fail if custom checks suppose to do so', function() { + return cmd.do(['-a', 'invalid']) + .then(assert.fail, emptyFn); + }); + + it('should return transformed value', function() { + return cmd.do(['-a', 'test']) + .then(function(opts) { + assert.deepEqual(opts.a, { value: 'test' }); + }); + }); + + }); + + describe('Only option (--version case)', function() { + + var ver = require('../package.json').version, + cmd = COA.Cmd() + .opt() + .name('version') + .long('version') + .flag() + .only() + .act(function() { + return ver; + }) + .end() + .opt() + .name('req') + .short('r') + .req() + .end(); + + it('should process the only() option', function() { + return cmd.do(['--version']) + .then(assert.fail, function(res) { + assert.equal(res, ver); + }); + }); + + }); + + it('input()'); + it('output()'); + +}); + +describe('Arg', function() { + + describe('Unknown arg', function() { + + var cmd = COA.Cmd(); + + it('should fail', function() { + return cmd.do(['test']) + .then(assert.fail, emptyFn); + }); + + }); + + describe('Unknown arg after known', function() { + + var cmd = COA.Cmd() + .arg() + .name('a') + .end(); + + it('should fail', function() { + return cmd.do(['test', 'unknown']) + .then(assert.fail, emptyFn); + }); + + }); + + describe('Array arg', function() { + + var cmd = COA.Cmd() + .arg() + .name('a') + .arr() + .end() + .act(function(opts, args) { + return args; + }); + + it('should return array of passed values', function() { + return cmd.do(['value 1', 'value 2']) + .then(function(args) { + assert.deepEqual(args, { a: ['value 1', 'value 2'] }); + }); + }); + + }); + + describe('Required arg', function() { + + var cmd = COA.Cmd() + .arg() + .name('a') + .req() + .end() + .act(function(opts, args) { + return args; + }); + + it('should fail if not specified', function() { + return cmd.do() + .then(assert.fail, emptyFn); + }); + + it('should return passed value if specified', function() { + return cmd.do(['value']) + .then(function(args) { + assert.equal(args.a, 'value'); + }); + }); + + }); + + describe('Args after options', function() { + + var cmd = COA.Cmd() + .opt() + .name('opt') + .long('opt') + .end() + .arg() + .name('arg1') + .end() + .arg() + .name('arg2') + .arr() + .end() + .act(function(opts, args) { + return { opts: opts, args: args }; + }); + + it('should return passed values', function() { + return cmd.do(['--opt', 'value', 'value', 'value 1', 'value 2']) + .then(function(o) { + assert.deepEqual(o, { + opts: { opt: 'value' }, + args: { + arg1: 'value', + arg2: ['value 1', 'value 2'] + } + }); + }); + }); + + }); + + describe('Raw args', function() { + + var cmd = COA.Cmd() + .arg() + .name('raw') + .arr() + .end() + .act(function(opts, args) { + return args; + }); + + it('should return passed arg values', function() { + return cmd.do(['--', 'raw', 'arg', 'values']) + .then(function(args) { + assert.deepEqual(args, { raw: ['raw', 'arg', 'values'] }); + }); + }); + + }); + +}); + +describe('Cmd', function() { + + var doTest = function(o) { + assert.deepEqual(o, { + opts: { opt: 'value' }, + args: { + arg1: 'value', + arg2: ['value 1', 'value 2'] + } + }); + }, + + invokeOpts = { opt: 'value' }, + invokeArgs = { + arg1: 'value', + arg2: ['value 1', 'value 2'] + }; + + describe('Subcommand', function() { + + var cmd = COA.Cmd() + .cmd() + .name('command') + .opt() + .name('opt') + .long('opt') + .end() + .arg() + .name('arg1') + .end() + .arg() + .name('arg2') + .arr() + .end() + .act(function(opts, args) { + return { opts: opts, args: args }; + }) + .end(); + + describe('when specified on command line', function() { + + it('should be invoked and accept passed opts and args', function() { + return cmd.do(['command', '--opt', 'value', 'value', 'value 1', 'value 2']) + .then(doTest); + }); + + }); + + describe('when invoked using api', function() { + + it('should be invoked and accept passed opts and args', function() { + return cmd.api.command(invokeOpts, invokeArgs) + .then(doTest); + }); + + }); + + describe('when invoked using invoke()', function() { + + it('should be invoked and accept passed opts and args', function() { + return cmd.invoke('command', invokeOpts, invokeArgs) + .then(doTest); + }); + + }); + + describe('when unexisting command invoked using invoke()', function() { + + it('should fail', function() { + return cmd.invoke('unexistent') + .then(assert.fail, emptyFn); + }); + + }); + + }); + + describe('External subcommand', function() { + + describe('default scheme: cmd.extendable()', function() { + + describe('when described as a function', function() { + var cmd = COA.Cmd() + .name('coa') + .extendable(); + + it('should be invoked and accept passed opts and args', function() { + return cmd.do(['test', '--opt', 'value', 'value', 'value 1', 'value 2']) + .then(doTest); + }); + }); + + describe('when described as an COA.Cmd() object', function() { + var cmd = COA.Cmd() + .name('coa') + .extendable(); + + it('should be invoked and accept passed opts and args', function() { + return cmd.do(['test-obj', '--opt', 'value', 'value', 'value 1', 'value 2']) + .then(doTest); + }); + }); + + describe('2nd level subcommand', function() { + var cmd = COA.Cmd() + .name('coa') + .cmd() + .name('test') + .extendable() + .end(); + + it('should be invoked and accept passed opts and args', function() { + return cmd.do(['test', 'obj', '--opt', 'value', 'value', 'value 1', 'value 2']) + .then(doTest); + }); + }); + + }); + + describe("common prefix: cmd.extendable('coa-')", function() { + + describe('when described as a function', function() { + var cmd = COA.Cmd() + .name('coa') + .extendable('coa-'); + + it('should be invoked and accept passed opts and args', function() { + return cmd.do(['test', '--opt', 'value', 'value', 'value 1', 'value 2']) + .then(doTest); + }); + }); + + }); + + describe("format string: cmd.extendable('coa-%s')", function() { + + describe('when described as a function', function() { + var cmd = COA.Cmd() + .name('coa') + .extendable('coa-%s'); + + it('should be invoked and accept passed opts and args', function() { + return cmd.do(['test', '--opt', 'value', 'value', 'value 1', 'value 2']) + .then(doTest); + }); + }); + + }); + + }); + + it('helpful(), name(), title()'); + +}); + +function emptyFn() { + // empty function +} diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/test/mocha.opts b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/test/mocha.opts new file mode 100644 index 00000000..78e17754 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/test/mocha.opts @@ -0,0 +1,2 @@ +--reporter spec +--timeout 20 diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/test/shell-test.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/test/shell-test.js new file mode 100644 index 00000000..7291a53d --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/test/shell-test.js @@ -0,0 +1,60 @@ +var assert = require('chai').assert, + shell = require('..').shell; + +/** + * Mocha BDD interface. + */ +/** @name describe @function */ +/** @name it @function */ +/** @name before @function */ +/** @name after @function */ +/** @name beforeEach @function */ +/** @name afterEach @function */ + +describe('shell', function() { + + describe('escape()', function() { + + var escape = shell.escape; + + it('Should wrap values with spaces in double quotes', function() { + assert.equal(escape('asd abc'), '"asd abc"'); + }); + + it('Should escape double quote "', function() { + assert.equal(escape('"asd'), '\\"asd'); + }); + + it("Should escape single quote '", function() { + assert.equal(escape("'asd"), "\\'asd"); + }); + + it('Should escape backslash \\', function() { + assert.equal(escape('\\asd'), '\\\\asd'); + }); + + it('Should escape dollar $', function() { + assert.equal(escape('$asd'), '\\$asd'); + }); + + it('Should escape backtick `', function() { + assert.equal(escape('`asd'), '\\`asd'); + }); + + }); + + describe('unescape()', function() { + + var unescape = shell.unescape; + + it('Should strip double quotes at the both ends', function() { + assert.equal(unescape('"asd"'), 'asd'); + }); + + it('Should not strip escaped double quotes at the both ends', function() { + assert.equal(unescape('\\"asd\\"'), '"asd"'); + }); + + }); + +}); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/tests/api-h.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/tests/api-h.js new file mode 100644 index 00000000..c343fa06 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/tests/api-h.js @@ -0,0 +1,9 @@ +require('..').Cmd() + .name('bla') + .title('Bla bla bla') + .helpful() + .invoke({ help: true }) + .then(function(res) { + console.log(res); + }) + .done(); // Q.done() diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/tests/h.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/tests/h.js new file mode 100644 index 00000000..b8e2c768 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/coa/tests/h.js @@ -0,0 +1,6 @@ +var argv = process.argv.slice(2); +require('..').Cmd() + .name('bla') + .title('Bla bla bla') + .helpful() + .run(argv.length? argv : ['-h']); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/colors/LICENSE b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/colors/LICENSE new file mode 100644 index 00000000..3de4e33b --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/colors/LICENSE @@ -0,0 +1,23 @@ +Original Library + - Copyright (c) Marak Squires + +Additional Functionality + - Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. \ No newline at end of file diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/colors/ReadMe.md b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/colors/ReadMe.md new file mode 100644 index 00000000..0326aab3 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/colors/ReadMe.md @@ -0,0 +1,178 @@ +# colors.js [![Build Status](https://travis-ci.org/Marak/colors.js.svg?branch=master)](https://travis-ci.org/Marak/colors.js) + +## get color and style in your node.js console + +![Demo](https://raw.githubusercontent.com/Marak/colors.js/master/screenshots/colors.png) + +## Installation + + npm install colors + +## colors and styles! + +### text colors + + - black + - red + - green + - yellow + - blue + - magenta + - cyan + - white + - gray + - grey + +### background colors + + - bgBlack + - bgRed + - bgGreen + - bgYellow + - bgBlue + - bgMagenta + - bgCyan + - bgWhite + +### styles + + - reset + - bold + - dim + - italic + - underline + - inverse + - hidden + - strikethrough + +### extras + + - rainbow + - zebra + - america + - trap + - random + + +## Usage + +By popular demand, `colors` now ships with two types of usages! + +The super nifty way + +```js +var colors = require('colors'); + +console.log('hello'.green); // outputs green text +console.log('i like cake and pies'.underline.red) // outputs red underlined text +console.log('inverse the color'.inverse); // inverses the color +console.log('OMG Rainbows!'.rainbow); // rainbow +console.log('Run the trap'.trap); // Drops the bass + +``` + +or a slightly less nifty way which doesn't extend `String.prototype` + +```js +var colors = require('colors/safe'); + +console.log(colors.green('hello')); // outputs green text +console.log(colors.red.underline('i like cake and pies')) // outputs red underlined text +console.log(colors.inverse('inverse the color')); // inverses the color +console.log(colors.rainbow('OMG Rainbows!')); // rainbow +console.log(colors.trap('Run the trap')); // Drops the bass + +``` + +I prefer the first way. Some people seem to be afraid of extending `String.prototype` and prefer the second way. + +If you are writing good code you will never have an issue with the first approach. If you really don't want to touch `String.prototype`, the second usage will not touch `String` native object. + +## Disabling Colors + +To disable colors you can pass the following arguments in the command line to your application: + +```bash +node myapp.js --no-color +``` + +## Console.log [string substitution](http://nodejs.org/docs/latest/api/console.html#console_console_log_data) + +```js +var name = 'Marak'; +console.log(colors.green('Hello %s'), name); +// outputs -> 'Hello Marak' +``` + +## Custom themes + +### Using standard API + +```js + +var colors = require('colors'); + +colors.setTheme({ + silly: 'rainbow', + input: 'grey', + verbose: 'cyan', + prompt: 'grey', + info: 'green', + data: 'grey', + help: 'cyan', + warn: 'yellow', + debug: 'blue', + error: 'red' +}); + +// outputs red text +console.log("this is an error".error); + +// outputs yellow text +console.log("this is a warning".warn); +``` + +### Using string safe API + +```js +var colors = require('colors/safe'); + +// set single property +var error = colors.red; +error('this is red'); + +// set theme +colors.setTheme({ + silly: 'rainbow', + input: 'grey', + verbose: 'cyan', + prompt: 'grey', + info: 'green', + data: 'grey', + help: 'cyan', + warn: 'yellow', + debug: 'blue', + error: 'red' +}); + +// outputs red text +console.log(colors.error("this is an error")); + +// outputs yellow text +console.log(colors.warn("this is a warning")); + +``` + +You can also combine them: + +```javascript +var colors = require('colors'); + +colors.setTheme({ + custom: ['red', 'underline'] +}); + +console.log('test'.custom); +``` + +*Protip: There is a secret undocumented style in `colors`. If you find the style you can summon him.* diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/colors/examples/normal-usage.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/colors/examples/normal-usage.js new file mode 100644 index 00000000..2818741e --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/colors/examples/normal-usage.js @@ -0,0 +1,74 @@ +var colors = require('../lib/index'); + +console.log("First some yellow text".yellow); + +console.log("Underline that text".yellow.underline); + +console.log("Make it bold and red".red.bold); + +console.log(("Double Raindows All Day Long").rainbow) + +console.log("Drop the bass".trap) + +console.log("DROP THE RAINBOW BASS".trap.rainbow) + + +console.log('Chains are also cool.'.bold.italic.underline.red); // styles not widely supported + +console.log('So '.green + 'are'.underline + ' ' + 'inverse'.inverse + ' styles! '.yellow.bold); // styles not widely supported +console.log("Zebras are so fun!".zebra); + +// +// Remark: .strikethrough may not work with Mac OS Terminal App +// +console.log("This is " + "not".strikethrough + " fun."); + +console.log('Background color attack!'.black.bgWhite) +console.log('Use random styles on everything!'.random) +console.log('America, Heck Yeah!'.america) + + +console.log('Setting themes is useful') + +// +// Custom themes +// +console.log('Generic logging theme as JSON'.green.bold.underline); +// Load theme with JSON literal +colors.setTheme({ + silly: 'rainbow', + input: 'grey', + verbose: 'cyan', + prompt: 'grey', + info: 'green', + data: 'grey', + help: 'cyan', + warn: 'yellow', + debug: 'blue', + error: 'red' +}); + +// outputs red text +console.log("this is an error".error); + +// outputs yellow text +console.log("this is a warning".warn); + +// outputs grey text +console.log("this is an input".input); + +console.log('Generic logging theme as file'.green.bold.underline); + +// Load a theme from file +colors.setTheme(__dirname + '/../themes/generic-logging.js'); + +// outputs red text +console.log("this is an error".error); + +// outputs yellow text +console.log("this is a warning".warn); + +// outputs grey text +console.log("this is an input".input); + +//console.log("Don't summon".zalgo) \ No newline at end of file diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/colors/examples/safe-string.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/colors/examples/safe-string.js new file mode 100644 index 00000000..111b363a --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/colors/examples/safe-string.js @@ -0,0 +1,76 @@ +var colors = require('../safe'); + +console.log(colors.yellow("First some yellow text")); + +console.log(colors.yellow.underline("Underline that text")); + +console.log(colors.red.bold("Make it bold and red")); + +console.log(colors.rainbow("Double Raindows All Day Long")) + +console.log(colors.trap("Drop the bass")) + +console.log(colors.rainbow(colors.trap("DROP THE RAINBOW BASS"))); + +console.log(colors.bold.italic.underline.red('Chains are also cool.')); // styles not widely supported + + +console.log(colors.green('So ') + colors.underline('are') + ' ' + colors.inverse('inverse') + colors.yellow.bold(' styles! ')); // styles not widely supported + +console.log(colors.zebra("Zebras are so fun!")); + +console.log("This is " + colors.strikethrough("not") + " fun."); + + +console.log(colors.black.bgWhite('Background color attack!')); +console.log(colors.random('Use random styles on everything!')) +console.log(colors.america('America, Heck Yeah!')); + +console.log('Setting themes is useful') + +// +// Custom themes +// +//console.log('Generic logging theme as JSON'.green.bold.underline); +// Load theme with JSON literal +colors.setTheme({ + silly: 'rainbow', + input: 'grey', + verbose: 'cyan', + prompt: 'grey', + info: 'green', + data: 'grey', + help: 'cyan', + warn: 'yellow', + debug: 'blue', + error: 'red' +}); + +// outputs red text +console.log(colors.error("this is an error")); + +// outputs yellow text +console.log(colors.warn("this is a warning")); + +// outputs grey text +console.log(colors.input("this is an input")); + + +// console.log('Generic logging theme as file'.green.bold.underline); + +// Load a theme from file +colors.setTheme(__dirname + '/../themes/generic-logging.js'); + +// outputs red text +console.log(colors.error("this is an error")); + +// outputs yellow text +console.log(colors.warn("this is a warning")); + +// outputs grey text +console.log(colors.input("this is an input")); + +// console.log(colors.zalgo("Don't summon him")) + + + diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/colors/lib/colors.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/colors/lib/colors.js new file mode 100644 index 00000000..790ffd43 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/colors/lib/colors.js @@ -0,0 +1,187 @@ +/* + +The MIT License (MIT) + +Original Library + - Copyright (c) Marak Squires + +Additional functionality + - Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +*/ + +var colors = {}; +module['exports'] = colors; + +colors.themes = {}; + +var ansiStyles = colors.styles = require('./styles'); +var defineProps = Object.defineProperties; + +colors.supportsColor = require('./system/supports-colors'); + +if (typeof colors.enabled === "undefined") { + colors.enabled = colors.supportsColor; +} + +colors.stripColors = colors.strip = function(str){ + return ("" + str).replace(/\x1B\[\d+m/g, ''); +}; + + +var stylize = colors.stylize = function stylize (str, style) { + if (!colors.enabled) { + return str+''; + } + + return ansiStyles[style].open + str + ansiStyles[style].close; +} + +var matchOperatorsRe = /[|\\{}()[\]^$+*?.]/g; +var escapeStringRegexp = function (str) { + if (typeof str !== 'string') { + throw new TypeError('Expected a string'); + } + return str.replace(matchOperatorsRe, '\\$&'); +} + +function build(_styles) { + var builder = function builder() { + return applyStyle.apply(builder, arguments); + }; + builder._styles = _styles; + // __proto__ is used because we must return a function, but there is + // no way to create a function with a different prototype. + builder.__proto__ = proto; + return builder; +} + +var styles = (function () { + var ret = {}; + ansiStyles.grey = ansiStyles.gray; + Object.keys(ansiStyles).forEach(function (key) { + ansiStyles[key].closeRe = new RegExp(escapeStringRegexp(ansiStyles[key].close), 'g'); + ret[key] = { + get: function () { + return build(this._styles.concat(key)); + } + }; + }); + return ret; +})(); + +var proto = defineProps(function colors() {}, styles); + +function applyStyle() { + var args = arguments; + var argsLen = args.length; + var str = argsLen !== 0 && String(arguments[0]); + if (argsLen > 1) { + for (var a = 1; a < argsLen; a++) { + str += ' ' + args[a]; + } + } + + if (!colors.enabled || !str) { + return str; + } + + var nestedStyles = this._styles; + + var i = nestedStyles.length; + while (i--) { + var code = ansiStyles[nestedStyles[i]]; + str = code.open + str.replace(code.closeRe, code.open) + code.close; + } + + return str; +} + +function applyTheme (theme) { + for (var style in theme) { + (function(style){ + colors[style] = function(str){ + if (typeof theme[style] === 'object'){ + var out = str; + for (var i in theme[style]){ + out = colors[theme[style][i]](out); + } + return out; + } + return colors[theme[style]](str); + }; + })(style) + } +} + +colors.setTheme = function (theme) { + if (typeof theme === 'string') { + try { + colors.themes[theme] = require(theme); + applyTheme(colors.themes[theme]); + return colors.themes[theme]; + } catch (err) { + console.log(err); + return err; + } + } else { + applyTheme(theme); + } +}; + +function init() { + var ret = {}; + Object.keys(styles).forEach(function (name) { + ret[name] = { + get: function () { + return build([name]); + } + }; + }); + return ret; +} + +var sequencer = function sequencer (map, str) { + var exploded = str.split(""), i = 0; + exploded = exploded.map(map); + return exploded.join(""); +}; + +// custom formatter methods +colors.trap = require('./custom/trap'); +colors.zalgo = require('./custom/zalgo'); + +// maps +colors.maps = {}; +colors.maps.america = require('./maps/america'); +colors.maps.zebra = require('./maps/zebra'); +colors.maps.rainbow = require('./maps/rainbow'); +colors.maps.random = require('./maps/random') + +for (var map in colors.maps) { + (function(map){ + colors[map] = function (str) { + return sequencer(colors.maps[map], str); + } + })(map) +} + +defineProps(colors, init()); \ No newline at end of file diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/colors/lib/custom/trap.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/colors/lib/custom/trap.js new file mode 100644 index 00000000..3f091437 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/colors/lib/custom/trap.js @@ -0,0 +1,45 @@ +module['exports'] = function runTheTrap (text, options) { + var result = ""; + text = text || "Run the trap, drop the bass"; + text = text.split(''); + var trap = { + a: ["\u0040", "\u0104", "\u023a", "\u0245", "\u0394", "\u039b", "\u0414"], + b: ["\u00df", "\u0181", "\u0243", "\u026e", "\u03b2", "\u0e3f"], + c: ["\u00a9", "\u023b", "\u03fe"], + d: ["\u00d0", "\u018a", "\u0500" , "\u0501" ,"\u0502", "\u0503"], + e: ["\u00cb", "\u0115", "\u018e", "\u0258", "\u03a3", "\u03be", "\u04bc", "\u0a6c"], + f: ["\u04fa"], + g: ["\u0262"], + h: ["\u0126", "\u0195", "\u04a2", "\u04ba", "\u04c7", "\u050a"], + i: ["\u0f0f"], + j: ["\u0134"], + k: ["\u0138", "\u04a0", "\u04c3", "\u051e"], + l: ["\u0139"], + m: ["\u028d", "\u04cd", "\u04ce", "\u0520", "\u0521", "\u0d69"], + n: ["\u00d1", "\u014b", "\u019d", "\u0376", "\u03a0", "\u048a"], + o: ["\u00d8", "\u00f5", "\u00f8", "\u01fe", "\u0298", "\u047a", "\u05dd", "\u06dd", "\u0e4f"], + p: ["\u01f7", "\u048e"], + q: ["\u09cd"], + r: ["\u00ae", "\u01a6", "\u0210", "\u024c", "\u0280", "\u042f"], + s: ["\u00a7", "\u03de", "\u03df", "\u03e8"], + t: ["\u0141", "\u0166", "\u0373"], + u: ["\u01b1", "\u054d"], + v: ["\u05d8"], + w: ["\u0428", "\u0460", "\u047c", "\u0d70"], + x: ["\u04b2", "\u04fe", "\u04fc", "\u04fd"], + y: ["\u00a5", "\u04b0", "\u04cb"], + z: ["\u01b5", "\u0240"] + } + text.forEach(function(c){ + c = c.toLowerCase(); + var chars = trap[c] || [" "]; + var rand = Math.floor(Math.random() * chars.length); + if (typeof trap[c] !== "undefined") { + result += trap[c][rand]; + } else { + result += c; + } + }); + return result; + +} diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/colors/lib/custom/zalgo.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/colors/lib/custom/zalgo.js new file mode 100644 index 00000000..1538c3b4 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/colors/lib/custom/zalgo.js @@ -0,0 +1,104 @@ +// please no +module['exports'] = function zalgo(text, options) { + text = text || " he is here "; + var soul = { + "up" : [ + 'Ì', 'ÌŽ', 'Ì„', 'Ì…', + 'Ì¿', 'Ì‘', '̆', 'Ì', + 'Í’', 'Í—', 'Í‘', '̇', + '̈', 'ÌŠ', 'Í‚', 'Ì“', + '̈', 'ÍŠ', 'Í‹', 'ÍŒ', + '̃', 'Ì‚', 'ÌŒ', 'Í', + 'Ì€', 'Ì', 'Ì‹', 'Ì', + 'Ì’', 'Ì“', 'Ì”', '̽', + '̉', 'Í£', 'ͤ', 'Í¥', + 'ͦ', 'ͧ', 'ͨ', 'Í©', + 'ͪ', 'Í«', 'ͬ', 'Í­', + 'Í®', 'ͯ', '̾', 'Í›', + '͆', 'Ìš' + ], + "down" : [ + 'Ì–', 'Ì—', '̘', 'Ì™', + 'Ìœ', 'Ì', 'Ìž', 'ÌŸ', + 'Ì ', '̤', 'Ì¥', '̦', + 'Ì©', '̪', 'Ì«', '̬', + 'Ì­', 'Ì®', '̯', 'Ì°', + '̱', '̲', '̳', '̹', + '̺', 'Ì»', '̼', 'Í…', + '͇', '͈', '͉', 'Í', + 'ÍŽ', 'Í“', 'Í”', 'Í•', + 'Í–', 'Í™', 'Íš', 'Ì£' + ], + "mid" : [ + 'Ì•', 'Ì›', 'Ì€', 'Ì', + '͘', 'Ì¡', 'Ì¢', '̧', + '̨', 'Ì´', '̵', '̶', + 'Íœ', 'Í', 'Íž', + 'ÍŸ', 'Í ', 'Í¢', '̸', + 'Ì·', 'Í¡', ' Ò‰' + ] + }, + all = [].concat(soul.up, soul.down, soul.mid), + zalgo = {}; + + function randomNumber(range) { + var r = Math.floor(Math.random() * range); + return r; + } + + function is_char(character) { + var bool = false; + all.filter(function (i) { + bool = (i === character); + }); + return bool; + } + + + function heComes(text, options) { + var result = '', counts, l; + options = options || {}; + options["up"] = typeof options["up"] !== 'undefined' ? options["up"] : true; + options["mid"] = typeof options["mid"] !== 'undefined' ? options["mid"] : true; + options["down"] = typeof options["down"] !== 'undefined' ? options["down"] : true; + options["size"] = typeof options["size"] !== 'undefined' ? options["size"] : "maxi"; + text = text.split(''); + for (l in text) { + if (is_char(l)) { + continue; + } + result = result + text[l]; + counts = {"up" : 0, "down" : 0, "mid" : 0}; + switch (options.size) { + case 'mini': + counts.up = randomNumber(8); + counts.mid = randomNumber(2); + counts.down = randomNumber(8); + break; + case 'maxi': + counts.up = randomNumber(16) + 3; + counts.mid = randomNumber(4) + 1; + counts.down = randomNumber(64) + 3; + break; + default: + counts.up = randomNumber(8) + 1; + counts.mid = randomNumber(6) / 2; + counts.down = randomNumber(8) + 1; + break; + } + + var arr = ["up", "mid", "down"]; + for (var d in arr) { + var index = arr[d]; + for (var i = 0 ; i <= counts[index]; i++) { + if (options[index]) { + result = result + soul[index][randomNumber(soul[index].length)]; + } + } + } + } + return result; + } + // don't summon him + return heComes(text, options); +} diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/colors/lib/extendStringPrototype.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/colors/lib/extendStringPrototype.js new file mode 100644 index 00000000..67374a1c --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/colors/lib/extendStringPrototype.js @@ -0,0 +1,113 @@ +var colors = require('./colors'); + +module['exports'] = function () { + + // + // Extends prototype of native string object to allow for "foo".red syntax + // + var addProperty = function (color, func) { + String.prototype.__defineGetter__(color, func); + }; + + var sequencer = function sequencer (map, str) { + return function () { + var exploded = this.split(""), i = 0; + exploded = exploded.map(map); + return exploded.join(""); + } + }; + + addProperty('strip', function () { + return colors.strip(this); + }); + + addProperty('stripColors', function () { + return colors.strip(this); + }); + + addProperty("trap", function(){ + return colors.trap(this); + }); + + addProperty("zalgo", function(){ + return colors.zalgo(this); + }); + + addProperty("zebra", function(){ + return colors.zebra(this); + }); + + addProperty("rainbow", function(){ + return colors.rainbow(this); + }); + + addProperty("random", function(){ + return colors.random(this); + }); + + addProperty("america", function(){ + return colors.america(this); + }); + + // + // Iterate through all default styles and colors + // + var x = Object.keys(colors.styles); + x.forEach(function (style) { + addProperty(style, function () { + return colors.stylize(this, style); + }); + }); + + function applyTheme(theme) { + // + // Remark: This is a list of methods that exist + // on String that you should not overwrite. + // + var stringPrototypeBlacklist = [ + '__defineGetter__', '__defineSetter__', '__lookupGetter__', '__lookupSetter__', 'charAt', 'constructor', + 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', 'toLocaleString', 'toString', 'valueOf', 'charCodeAt', + 'indexOf', 'lastIndexof', 'length', 'localeCompare', 'match', 'replace', 'search', 'slice', 'split', 'substring', + 'toLocaleLowerCase', 'toLocaleUpperCase', 'toLowerCase', 'toUpperCase', 'trim', 'trimLeft', 'trimRight' + ]; + + Object.keys(theme).forEach(function (prop) { + if (stringPrototypeBlacklist.indexOf(prop) !== -1) { + console.log('warn: '.red + ('String.prototype' + prop).magenta + ' is probably something you don\'t want to override. Ignoring style name'); + } + else { + if (typeof(theme[prop]) === 'string') { + colors[prop] = colors[theme[prop]]; + addProperty(prop, function () { + return colors[theme[prop]](this); + }); + } + else { + addProperty(prop, function () { + var ret = this; + for (var t = 0; t < theme[prop].length; t++) { + ret = colors[theme[prop][t]](ret); + } + return ret; + }); + } + } + }); + } + + colors.setTheme = function (theme) { + if (typeof theme === 'string') { + try { + colors.themes[theme] = require(theme); + applyTheme(colors.themes[theme]); + return colors.themes[theme]; + } catch (err) { + console.log(err); + return err; + } + } else { + applyTheme(theme); + } + }; + +}; \ No newline at end of file diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/colors/lib/index.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/colors/lib/index.js new file mode 100644 index 00000000..fd0956d0 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/colors/lib/index.js @@ -0,0 +1,12 @@ +var colors = require('./colors'); +module['exports'] = colors; + +// Remark: By default, colors will add style properties to String.prototype +// +// If you don't wish to extend String.prototype you can do this instead and native String will not be touched +// +// var colors = require('colors/safe); +// colors.red("foo") +// +// +require('./extendStringPrototype')(); \ No newline at end of file diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/colors/lib/maps/america.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/colors/lib/maps/america.js new file mode 100644 index 00000000..a07d8327 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/colors/lib/maps/america.js @@ -0,0 +1,12 @@ +var colors = require('../colors'); + +module['exports'] = (function() { + return function (letter, i, exploded) { + if(letter === " ") return letter; + switch(i%3) { + case 0: return colors.red(letter); + case 1: return colors.white(letter) + case 2: return colors.blue(letter) + } + } +})(); \ No newline at end of file diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/colors/lib/maps/rainbow.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/colors/lib/maps/rainbow.js new file mode 100644 index 00000000..a7ce24e6 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/colors/lib/maps/rainbow.js @@ -0,0 +1,13 @@ +var colors = require('../colors'); + +module['exports'] = (function () { + var rainbowColors = ['red', 'yellow', 'green', 'blue', 'magenta']; //RoY G BiV + return function (letter, i, exploded) { + if (letter === " ") { + return letter; + } else { + return colors[rainbowColors[i++ % rainbowColors.length]](letter); + } + }; +})(); + diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/colors/lib/maps/random.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/colors/lib/maps/random.js new file mode 100644 index 00000000..5cd101fa --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/colors/lib/maps/random.js @@ -0,0 +1,8 @@ +var colors = require('../colors'); + +module['exports'] = (function () { + var available = ['underline', 'inverse', 'grey', 'yellow', 'red', 'green', 'blue', 'white', 'cyan', 'magenta']; + return function(letter, i, exploded) { + return letter === " " ? letter : colors[available[Math.round(Math.random() * (available.length - 1))]](letter); + }; +})(); \ No newline at end of file diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/colors/lib/maps/zebra.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/colors/lib/maps/zebra.js new file mode 100644 index 00000000..bf7dcdea --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/colors/lib/maps/zebra.js @@ -0,0 +1,5 @@ +var colors = require('../colors'); + +module['exports'] = function (letter, i, exploded) { + return i % 2 === 0 ? letter : colors.inverse(letter); +}; \ No newline at end of file diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/colors/lib/styles.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/colors/lib/styles.js new file mode 100644 index 00000000..067d5907 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/colors/lib/styles.js @@ -0,0 +1,77 @@ +/* +The MIT License (MIT) + +Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +*/ + +var styles = {}; +module['exports'] = styles; + +var codes = { + reset: [0, 0], + + bold: [1, 22], + dim: [2, 22], + italic: [3, 23], + underline: [4, 24], + inverse: [7, 27], + hidden: [8, 28], + strikethrough: [9, 29], + + black: [30, 39], + red: [31, 39], + green: [32, 39], + yellow: [33, 39], + blue: [34, 39], + magenta: [35, 39], + cyan: [36, 39], + white: [37, 39], + gray: [90, 39], + grey: [90, 39], + + bgBlack: [40, 49], + bgRed: [41, 49], + bgGreen: [42, 49], + bgYellow: [43, 49], + bgBlue: [44, 49], + bgMagenta: [45, 49], + bgCyan: [46, 49], + bgWhite: [47, 49], + + // legacy styles for colors pre v1.0.0 + blackBG: [40, 49], + redBG: [41, 49], + greenBG: [42, 49], + yellowBG: [43, 49], + blueBG: [44, 49], + magentaBG: [45, 49], + cyanBG: [46, 49], + whiteBG: [47, 49] + +}; + +Object.keys(codes).forEach(function (key) { + var val = codes[key]; + var style = styles[key] = []; + style.open = '\u001b[' + val[0] + 'm'; + style.close = '\u001b[' + val[1] + 'm'; +}); \ No newline at end of file diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/colors/lib/system/supports-colors.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/colors/lib/system/supports-colors.js new file mode 100644 index 00000000..3e008aa9 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/colors/lib/system/supports-colors.js @@ -0,0 +1,61 @@ +/* +The MIT License (MIT) + +Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +*/ + +var argv = process.argv; + +module.exports = (function () { + if (argv.indexOf('--no-color') !== -1 || + argv.indexOf('--color=false') !== -1) { + return false; + } + + if (argv.indexOf('--color') !== -1 || + argv.indexOf('--color=true') !== -1 || + argv.indexOf('--color=always') !== -1) { + return true; + } + + if (process.stdout && !process.stdout.isTTY) { + return false; + } + + if (process.platform === 'win32') { + return true; + } + + if ('COLORTERM' in process.env) { + return true; + } + + if (process.env.TERM === 'dumb') { + return false; + } + + if (/^screen|^xterm|^vt100|color|ansi|cygwin|linux/i.test(process.env.TERM)) { + return true; + } + + return false; +})(); \ No newline at end of file diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/colors/package.json b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/colors/package.json new file mode 100644 index 00000000..3407b561 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/colors/package.json @@ -0,0 +1,59 @@ +{ + "name": "colors", + "description": "get colors in your node.js console", + "version": "1.1.2", + "author": { + "name": "Marak Squires" + }, + "homepage": "https://github.com/Marak/colors.js", + "bugs": { + "url": "https://github.com/Marak/colors.js/issues" + }, + "keywords": [ + "ansi", + "terminal", + "colors" + ], + "repository": { + "type": "git", + "url": "http://github.com/Marak/colors.js.git" + }, + "license": "MIT", + "scripts": { + "test": "node tests/basic-test.js && node tests/safe-test.js" + }, + "engines": { + "node": ">=0.1.90" + }, + "main": "lib", + "files": [ + "examples", + "lib", + "LICENSE", + "safe.js", + "themes" + ], + "gitHead": "8bf2ad9fa695dcb30b7e9fd83691b139fd6655c4", + "_id": "colors@1.1.2", + "_shasum": "168a4701756b6a7f51a12ce0c97bfa28c084ed63", + "_from": "colors@>=1.1.2 <1.2.0", + "_npmVersion": "2.1.8", + "_nodeVersion": "0.11.13", + "_npmUser": { + "name": "marak", + "email": "marak.squires@gmail.com" + }, + "maintainers": [ + { + "name": "marak", + "email": "marak.squires@gmail.com" + } + ], + "dist": { + "shasum": "168a4701756b6a7f51a12ce0c97bfa28c084ed63", + "tarball": "http://registry.npmjs.org/colors/-/colors-1.1.2.tgz" + }, + "directories": {}, + "_resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "readme": "ERROR: No README data found!" +} diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/colors/safe.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/colors/safe.js new file mode 100644 index 00000000..a6a1f3ab --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/colors/safe.js @@ -0,0 +1,9 @@ +// +// Remark: Requiring this file will use the "safe" colors API which will not touch String.prototype +// +// var colors = require('colors/safe); +// colors.red("foo") +// +// +var colors = require('./lib/colors'); +module['exports'] = colors; \ No newline at end of file diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/colors/themes/generic-logging.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/colors/themes/generic-logging.js new file mode 100644 index 00000000..571972c1 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/colors/themes/generic-logging.js @@ -0,0 +1,12 @@ +module['exports'] = { + silly: 'rainbow', + input: 'grey', + verbose: 'cyan', + prompt: 'grey', + info: 'green', + data: 'grey', + help: 'cyan', + warn: 'yellow', + debug: 'blue', + error: 'red' +}; \ No newline at end of file diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/CHANGELOG.md b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/CHANGELOG.md new file mode 100644 index 00000000..f057ec33 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/CHANGELOG.md @@ -0,0 +1,299 @@ +3.3.1 / 2015-05-13 +------------------ + +- Added `.sortKeys` dumper option, thanks to @rjmunro. +- Fixed astral characters support, #191. + + +3.3.0 / 2015-04-26 +------------------ + +- Significantly improved long strings formatting in dumper, thanks to @isaacs. +- Strip BOM if exists. + + +3.2.7 / 2015-02-19 +------------------ + +- Maintenance release. +- Updated dependencies. +- HISTORY.md -> CHANGELOG.md + + +3.2.6 / 2015-02-07 +------------------ + +- Fixed encoding of UTF-16 surrogate pairs. (e.g. "\U0001F431" CAT FACE). +- Fixed demo dates dump (#113, thanks to @Hypercubed). + + +3.2.5 / 2014-12-28 +------------------ + +- Fixed resolving of all built-in types on empty nodes. +- Fixed invalid warning on empty lines within quoted scalars and flow collections. +- Fixed bug: Tag on an empty node didn't resolve in some cases. + + +3.2.4 / 2014-12-19 +------------------ + +- Fixed resolving of !!null tag on an empty node. + + +3.2.3 / 2014-11-08 +------------------ + +- Implemented dumping of objects with circular and cross references. +- Partially fixed aliasing of constructed objects. (see issue #141 for details) + + +3.2.2 / 2014-09-07 +------------------ + +- Fixed infinite loop on unindented block scalars. +- Rewritten base64 encode/decode in binary type, to keep code licence clear. + + +3.2.1 / 2014-08-24 +------------------ + +- Nothig new. Just fix npm publish error. + + +3.2.0 / 2014-08-24 +------------------ + +- Added input piping support to CLI. +- Fixed typo, that could cause hand on initial indent (#139). + + +3.1.0 / 2014-07-07 +------------------ + +- 1.5x-2x speed boost. +- Removed deprecated `require('xxx.yml')` support. +- Significant code cleanup and refactoring. +- Internal API changed. If you used custom types - see updated examples. + Others are not affected. +- Even if the input string has no trailing line break character, + it will be parsed as if it has one. +- Added benchmark scripts. +- Moved bower files to /dist folder +- Bugfixes. + + +3.0.2 / 2014-02-27 +------------------ + +- Fixed bug: "constructor" string parsed as `null`. + + +3.0.1 / 2013-12-22 +------------------ + +- Fixed parsing of literal scalars. (issue #108) +- Prevented adding unnecessary spaces in object dumps. (issue #68) +- Fixed dumping of objects with very long (> 1024 in length) keys. + + +3.0.0 / 2013-12-16 +------------------ + +- Refactored code. Changed API for custom types. +- Removed output colors in CLI, dump json by default. +- Removed big dependencies from browser version (esprima, buffer) + - load `esprima` manually, if !!js/function needed + - !!bin now returns Array in browser +- AMD support. +- Don't quote dumped strings because of `-` & `?` (if not first char). +- __Deprecated__ loading yaml files via `require()`, as not recommended + behaviour for node. + + +2.1.3 / 2013-10-16 +------------------ + +- Fix wrong loading of empty block scalars. + + +2.1.2 / 2013-10-07 +------------------ + +- Fix unwanted line breaks in folded scalars. + + +2.1.1 / 2013-10-02 +------------------ + +- Dumper now respects deprecated booleans syntax from YAML 1.0/1.1 +- Fixed reader bug in JSON-like sequences/mappings. + + +2.1.0 / 2013-06-05 +------------------ + +- Add standard YAML schemas: Failsafe (`FAILSAFE_SCHEMA`), + JSON (`JSON_SCHEMA`) and Core (`CORE_SCHEMA`). +- Rename `DEFAULT_SCHEMA` to `DEFAULT_FULL_SCHEMA` + and `SAFE_SCHEMA` to `DEFAULT_SAFE_SCHEMA`. +- Bug fix: export `NIL` constant from the public interface. +- Add `skipInvalid` dumper option. +- Use `safeLoad` for `require` extension. + + +2.0.5 / 2013-04-26 +------------------ + +- Close security issue in !!js/function constructor. + Big thanks to @nealpoole for security audit. + + +2.0.4 / 2013-04-08 +------------------ + +- Updated .npmignore to reduce package size + + +2.0.3 / 2013-02-26 +------------------ + +- Fixed dumping of empty arrays ans objects. ([] and {} instead of null) + + +2.0.2 / 2013-02-15 +------------------ + +- Fixed input validation: tabs are printable characters. + + +2.0.1 / 2013-02-09 +------------------ + +- Fixed error, when options not passed to function cass + + +2.0.0 / 2013-02-09 +------------------ + +- Full rewrite. New architecture. Fast one-stage parsing. +- Changed custom types API. +- Added YAML dumper. + + +1.0.3 / 2012-11-05 +------------------ + +- Fixed utf-8 files loading. + + +1.0.2 / 2012-08-02 +------------------ + +- Pull out hand-written shims. Use ES5-Shims for old browsers support. See #44. +- Fix timstamps incorectly parsed in local time when no time part specified. + + +1.0.1 / 2012-07-07 +------------------ + +- Fixes `TypeError: 'undefined' is not an object` under Safari. Thanks Phuong. +- Fix timestamps incorrectly parsed in local time. Thanks @caolan. Closes #46. + + +1.0.0 / 2012-07-01 +------------------ + +- `y`, `yes`, `n`, `no`, `on`, `off` are not converted to Booleans anymore. + Fixes #42. +- `require(filename)` now returns a single document and throws an Error if + file contains more than one document. +- CLI was merged back from js-yaml.bin + + +0.3.7 / 2012-02-28 +------------------ + +- Fix export of `addConstructor()`. Closes #39. + + +0.3.6 / 2012-02-22 +------------------ + +- Removed AMD parts - too buggy to use. Need help to rewrite from scratch +- Removed YUI compressor warning (renamed `double` variable). Closes #40. + + +0.3.5 / 2012-01-10 +------------------ + +- Workagound for .npmignore fuckup under windows. Thanks to airportyh. + + +0.3.4 / 2011-12-24 +------------------ + +- Fixes str[] for oldIEs support. +- Adds better has change support for browserified demo. +- improves compact output of Error. Closes #33. + + +0.3.3 / 2011-12-20 +------------------ + +- jsyaml executable moved to separate module. +- adds `compact` stringification of Errors. + + +0.3.2 / 2011-12-16 +------------------ + +- Fixes ug with block style scalars. Closes #26. +- All sources are passing JSLint now. +- Fixes bug in Safari. Closes #28. +- Fixes bug in Opers. Closes #29. +- Improves browser support. Closes #20. +- Added jsyaml executable. +- Added !!js/function support. Closes #12. + + +0.3.1 / 2011-11-18 +------------------ + +- Added AMD support for browserified version. +- Wrapped browserified js-yaml into closure. +- Fixed the resolvement of non-specific tags. Closes #17. +- Added permalinks for online demo YAML snippets. Now we have YPaste service, lol. +- Added !!js/regexp and !!js/undefined types. Partially solves #12. +- Fixed !!set mapping. +- Fixed month parse in dates. Closes #19. + + +0.3.0 / 2011-11-09 +------------------ + +- Removed JS.Class dependency. Closes #3. +- Added browserified version. Closes #13. +- Added live demo of browserified version. +- Ported some of the PyYAML tests. See #14. +- Fixed timestamp bug when fraction was given. + + +0.2.2 / 2011-11-06 +------------------ + +- Fixed crash on docs without ---. Closes #8. +- Fixed miltiline string parse +- Fixed tests/comments for using array as key + + +0.2.1 / 2011-11-02 +------------------ + +- Fixed short file read (<4k). Closes #9. + + +0.2.0 / 2011-11-02 +------------------ + +- First public release diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/LICENSE b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/LICENSE new file mode 100644 index 00000000..09d3a29e --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/LICENSE @@ -0,0 +1,21 @@ +(The MIT License) + +Copyright (C) 2011-2015 by Vitaly Puzrin + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/README.md b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/README.md new file mode 100644 index 00000000..8ad571f1 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/README.md @@ -0,0 +1,290 @@ +JS-YAML - YAML 1.2 parser and serializer for JavaScript +======================================================= + +[![Build Status](https://travis-ci.org/nodeca/js-yaml.svg?branch=master)](https://travis-ci.org/nodeca/js-yaml) +[![NPM version](https://img.shields.io/npm/v/js-yaml.svg)](https://www.npmjs.org/package/js-yaml) + +[Online Demo](http://nodeca.github.com/js-yaml/) + + +This is an implementation of [YAML](http://yaml.org/), a human friendly data +serialization language. Started as [PyYAML](http://pyyaml.org/) port, it was +completely rewritten from scratch. Now it's very fast, and supports 1.2 spec. + + +Installation +------------ + +### YAML module for node.js + +``` +npm install js-yaml +``` + + +### CLI executable + +If you want to inspect your YAML files from CLI, install js-yaml globally: + +``` +npm install -g js-yaml +``` + +#### Usage + +``` +usage: js-yaml [-h] [-v] [-c] [-t] file + +Positional arguments: + file File with YAML document(s) + +Optional arguments: + -h, --help Show this help message and exit. + -v, --version Show program's version number and exit. + -c, --compact Display errors in compact mode + -t, --trace Show stack trace on error +``` + + +### Bundled YAML library for browsers + +``` html +<!-- esprima required only for !!js/function --> +<script src="esprima.js"></script> +<script src="js-yaml.min.js"></script> +<script type="text/javascript"> +var doc = jsyaml.load('greeting: hello\nname: world'); +</script> +``` + +Browser support was done mostly for online demo. If you find any errors - feel +free to send pull requests with fixes. Also note, that IE and other old browsers +needs [es5-shims](https://github.com/kriskowal/es5-shim) to operate. + +Notes: + +1. We have no resourses to support browserified version. Don't expect it to be + well tested. Don't expect fast fixes if something goes wrong there. +2. `!!js/function` in browser bundle will not work by default. If you really need + it - load `esprima` parser first (via amd or directly). +3. `!!bin` in browser will return `Array`, because browsers do not support + node.js `Buffer` and adding Buffer shims is completely useless on practice. + + +API +--- + +Here we cover the most 'useful' methods. If you need advanced details (creating +your own tags), see [wiki](https://github.com/nodeca/js-yaml/wiki) and +[examples](https://github.com/nodeca/js-yaml/tree/master/examples) for more +info. + +``` javascript +yaml = require('js-yaml'); +fs = require('fs'); + +// Get document, or throw exception on error +try { + var doc = yaml.safeLoad(fs.readFileSync('/home/ixti/example.yml', 'utf8')); + console.log(doc); +} catch (e) { + console.log(e); +} +``` + + +### safeLoad (string [ , options ]) + +**Recommended loading way.** Parses `string` as single YAML document. Returns a JavaScript +object or throws `YAMLException` on error. By default, does not support regexps, +functions and undefined. This method is safe for untrusted data. + +options: + +- `filename` _(default: null)_ - string to be used as a file path in + error/warning messages. +- `onWarning` _(default: null)_ - function to call on warning messages. + Loader will throw on warnings if this function is not provided. +- `schema` _(default: `DEFAULT_SAFE_SCHEMA`)_ - specifies a schema to use. + - `FAILSAFE_SCHEMA` - only strings, arrays and plain objects: + http://www.yaml.org/spec/1.2/spec.html#id2802346 + - `JSON_SCHEMA` - all JSON-supported types: + http://www.yaml.org/spec/1.2/spec.html#id2803231 + - `CORE_SCHEMA` - same as `JSON_SCHEMA`: + http://www.yaml.org/spec/1.2/spec.html#id2804923 + - `DEFAULT_SAFE_SCHEMA` - all supported YAML types, without unsafe ones + (`!!js/undefined`, `!!js/regexp` and `!!js/function`): + http://yaml.org/type/ + - `DEFAULT_FULL_SCHEMA` - all supported YAML types. + +NOTE: This function **does not** understand multi-document sources, it throws +exception on those. + +NOTE: JS-YAML **does not** support schema-specific tag resolution restrictions. +So, JSON schema is not as strict as defined in the YAML specification. +It allows numbers in any notaion, use `Null` and `NULL` as `null`, etc. +Core schema also has no such restrictions. It allows binary notation for integers. + + +### load (string [ , options ]) + +**Use with care with untrusted sources**. The same as `safeLoad()` but uses +`DEFAULT_FULL_SCHEMA` by default - adds some JavaScript-specific types: +`!!js/function`, `!!js/regexp` and `!!js/undefined`. For untrusted sources you +must additionally validate object structure, to avoid injections: + +``` javascript +var untrusted_code = '"toString": !<tag:yaml.org,2002:js/function> "function (){very_evil_thing();}"'; + +// I'm just converting that string, what could possibly go wrong? +require('js-yaml').load(untrusted_code) + '' +``` + + +### safeLoadAll (string, iterator [ , options ]) + +Same as `safeLoad()`, but understands multi-document sources and apply +`iterator` to each document. + +``` javascript +var yaml = require('js-yaml'); + +yaml.safeLoadAll(data, function (doc) { + console.log(doc); +}); +``` + + +### loadAll (string, iterator [ , options ]) + +Same as `safeLoadAll()` but uses `DEFAULT_FULL_SCHEMA` by default. + + +### safeDump (object [ , options ]) + +Serializes `object` as YAML document. Uses `DEFAULT_SAFE_SCHEMA`, so it will +throw exception if you try to dump regexps or functions. However, you can +disable exceptions by `skipInvalid` option. + +options: + +- `indent` _(default: 2)_ - indentation width to use (in spaces). +- `skipInvalid` _(default: false)_ - do not throw on invalid types (like function + in the safe schema) and skip pairs and single values with such types. +- `flowLevel` (default: -1) - specifies level of nesting, when to switch from + block to flow style for collections. -1 means block style everwhere +- `styles` - "tag" => "style" map. Each tag may have own set of styles. +- `schema` _(default: `DEFAULT_SAFE_SCHEMA`)_ specifies a schema to use. +- `sortKeys` _(default: `false`)_ - if `true`, sort keys when dumping YAML. If a + function, use the function to sort the keys. + +styles: + +``` none +!!null + "canonical" => "~" + +!!int + "binary" => "0b1", "0b101010", "0b1110001111010" + "octal" => "01", "052", "016172" + "decimal" => "1", "42", "7290" + "hexadecimal" => "0x1", "0x2A", "0x1C7A" + +!!null, !!bool, !!float + "lowercase" => "null", "true", "false", ".nan", '.inf' + "uppercase" => "NULL", "TRUE", "FALSE", ".NAN", '.INF' + "camelcase" => "Null", "True", "False", ".NaN", '.Inf' +``` + +By default, !!int uses `decimal`, and !!null, !!bool, !!float use `lowercase`. + + + +### dump (object [ , options ]) + +Same as `safeDump()` but without limits (uses `DEFAULT_FULL_SCHEMA` by default). + + +Supported YAML types +-------------------- + +The list of standard YAML tags and corresponding JavaScipt types. See also +[YAML tag discussion](http://pyyaml.org/wiki/YAMLTagDiscussion) and +[YAML types repository](http://yaml.org/type/). + +``` +!!null '' # null +!!bool 'yes' # bool +!!int '3...' # number +!!float '3.14...' # number +!!binary '...base64...' # buffer +!!timestamp 'YYYY-...' # date +!!omap [ ... ] # array of key-value pairs +!!pairs [ ... ] # array or array pairs +!!set { ... } # array of objects with given keys and null values +!!str '...' # string +!!seq [ ... ] # array +!!map { ... } # object +``` + +**JavaScript-specific tags** + +``` +!!js/regexp /pattern/gim # RegExp +!!js/undefined '' # Undefined +!!js/function 'function () {...}' # Function +``` + +Caveats +------- + +Note, that you use arrays or objects as key in JS-YAML. JS do not allows objects +or array as keys, and stringifies (by calling .toString method) them at the +moment of adding them. + +``` yaml +--- +? [ foo, bar ] +: - baz +? { foo: bar } +: - baz + - baz +``` + +``` javascript +{ "foo,bar": ["baz"], "[object Object]": ["baz", "baz"] } +``` + +Also, reading of properties on implicit block mapping keys is not supported yet. +So, the following YAML document cannot be loaded. + +``` yaml +&anchor foo: + foo: bar + *anchor: duplicate key + baz: bat + *anchor: duplicate key +``` + + +Breaking changes in 2.x.x -> 3.x.x +---------------------------------- + +If your have not used __custom__ tags or loader classes and not loaded yaml +files via `require()` - no changes needed. Just upgrade library. + +In other case, you should: + +1. Replace all occurences of `require('xxxx.yml')` by `fs.readFileSync()` + + `yaml.safeLoad()`. +2. rewrite your custom tags constructors and custom loader + classes, to conform new API. See + [examples](https://github.com/nodeca/js-yaml/tree/master/examples) and + [wiki](https://github.com/nodeca/js-yaml/wiki) for details. + + +License +------- + +View the [LICENSE](https://github.com/nodeca/js-yaml/blob/master/LICENSE) file +(MIT). diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/bin/js-yaml.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/bin/js-yaml.js new file mode 100644 index 00000000..e6029d64 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/bin/js-yaml.js @@ -0,0 +1,142 @@ +#!/usr/bin/env node + + +'use strict'; + +/*eslint-disable no-console*/ + + +// stdlib +var fs = require('fs'); + + +// 3rd-party +var argparse = require('argparse'); + + +// internal +var yaml = require('..'); + + +//////////////////////////////////////////////////////////////////////////////// + + +var cli = new argparse.ArgumentParser({ + prog: 'js-yaml', + version: require('../package.json').version, + addHelp: true +}); + + +cli.addArgument([ '-c', '--compact' ], { + help: 'Display errors in compact mode', + action: 'storeTrue' +}); + + +// deprecated (not needed after we removed output colors) +// option suppressed, but not completely removed for compatibility +cli.addArgument([ '-j', '--to-json' ], { + help: argparse.Const.SUPPRESS, + dest: 'json', + action: 'storeTrue' +}); + + +cli.addArgument([ '-t', '--trace' ], { + help: 'Show stack trace on error', + action: 'storeTrue' +}); + +cli.addArgument([ 'file' ], { + help: 'File to read, utf-8 encoded without BOM', + nargs: '?', + defaultValue: '-' +}); + + +//////////////////////////////////////////////////////////////////////////////// + + +var options = cli.parseArgs(); + + +//////////////////////////////////////////////////////////////////////////////// + +function readFile(filename, encoding, callback) { + if (options.file === '-') { + // read from stdin + + var chunks = []; + + process.stdin.on('data', function (chunk) { + chunks.push(chunk); + }); + + process.stdin.on('end', function () { + return callback(null, Buffer.concat(chunks).toString(encoding)); + }); + } else { + fs.readFile(filename, encoding, callback); + } +} + +readFile(options.file, 'utf8', function (error, input) { + var output, isYaml; + + if (error) { + if (error.code === 'ENOENT') { + console.error('File not found: ' + options.file); + process.exit(2); + } + + console.error( + options.trace && error.stack || + error.message || + String(error)); + + process.exit(1); + } + + try { + output = JSON.parse(input); + isYaml = false; + } catch (error) { + if (error instanceof SyntaxError) { + try { + output = []; + yaml.loadAll(input, function (doc) { output.push(doc); }, {}); + isYaml = true; + + if (0 === output.length) { + output = null; + } else if (1 === output.length) { + output = output[0]; + } + } catch (error) { + if (options.trace && error.stack) { + console.error(error.stack); + } else { + console.error(error.toString(options.compact)); + } + + process.exit(1); + } + } else { + console.error( + options.trace && error.stack || + error.message || + String(error)); + + process.exit(1); + } + } + + if (isYaml) { + console.log(JSON.stringify(output, null, ' ')); + } else { + console.log(yaml.dump(output)); + } + + process.exit(0); +}); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/bower.json b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/bower.json new file mode 100644 index 00000000..010912f1 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/bower.json @@ -0,0 +1,23 @@ + +{ + "name": "js-yaml", + "main": "dist/js-yaml.js", + "homepage": "https://github.com/nodeca/js-yaml", + "authors": [ "Dervus Grim <dervus.grim@gmail.com>", + "Vitaly Puzrin <vitaly@rcdesign.ru>", + "Aleksey V Zapparov <ixti@member.fsf.org>", + "Martin Grenfell <martin.grenfell@gmail.com>" ], + "description": "YAML 1.2 parser and serializer", + "keywords": ["yaml", "parser", "serializer", "pyyaml"], + "license": "MIT", + "ignore": [ + "**/.*", + "node_modules", + "benchmark", + "bower_components", + "test", + "Makefile", + "index*", + "package.json" + ] +} diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/dist/js-yaml.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/dist/js-yaml.js new file mode 100644 index 00000000..21ce73c5 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/dist/js-yaml.js @@ -0,0 +1,3960 @@ +/* js-yaml 3.3.1 https://github.com/nodeca/js-yaml */(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.jsyaml = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){ +'use strict'; + + +var loader = require('./js-yaml/loader'); +var dumper = require('./js-yaml/dumper'); + + +function deprecated(name) { + return function () { + throw new Error('Function ' + name + ' is deprecated and cannot be used.'); + }; +} + + +module.exports.Type = require('./js-yaml/type'); +module.exports.Schema = require('./js-yaml/schema'); +module.exports.FAILSAFE_SCHEMA = require('./js-yaml/schema/failsafe'); +module.exports.JSON_SCHEMA = require('./js-yaml/schema/json'); +module.exports.CORE_SCHEMA = require('./js-yaml/schema/core'); +module.exports.DEFAULT_SAFE_SCHEMA = require('./js-yaml/schema/default_safe'); +module.exports.DEFAULT_FULL_SCHEMA = require('./js-yaml/schema/default_full'); +module.exports.load = loader.load; +module.exports.loadAll = loader.loadAll; +module.exports.safeLoad = loader.safeLoad; +module.exports.safeLoadAll = loader.safeLoadAll; +module.exports.dump = dumper.dump; +module.exports.safeDump = dumper.safeDump; +module.exports.YAMLException = require('./js-yaml/exception'); + +// Deprecared schema names from JS-YAML 2.0.x +module.exports.MINIMAL_SCHEMA = require('./js-yaml/schema/failsafe'); +module.exports.SAFE_SCHEMA = require('./js-yaml/schema/default_safe'); +module.exports.DEFAULT_SCHEMA = require('./js-yaml/schema/default_full'); + +// Deprecated functions from JS-YAML 1.x.x +module.exports.scan = deprecated('scan'); +module.exports.parse = deprecated('parse'); +module.exports.compose = deprecated('compose'); +module.exports.addConstructor = deprecated('addConstructor'); + +},{"./js-yaml/dumper":3,"./js-yaml/exception":4,"./js-yaml/loader":5,"./js-yaml/schema":7,"./js-yaml/schema/core":8,"./js-yaml/schema/default_full":9,"./js-yaml/schema/default_safe":10,"./js-yaml/schema/failsafe":11,"./js-yaml/schema/json":12,"./js-yaml/type":13}],2:[function(require,module,exports){ +'use strict'; + + +function isNothing(subject) { + return (typeof subject === 'undefined') || (null === subject); +} + + +function isObject(subject) { + return (typeof subject === 'object') && (null !== subject); +} + + +function toArray(sequence) { + if (Array.isArray(sequence)) { + return sequence; + } else if (isNothing(sequence)) { + return []; + } + return [ sequence ]; +} + + +function extend(target, source) { + var index, length, key, sourceKeys; + + if (source) { + sourceKeys = Object.keys(source); + + for (index = 0, length = sourceKeys.length; index < length; index += 1) { + key = sourceKeys[index]; + target[key] = source[key]; + } + } + + return target; +} + + +function repeat(string, count) { + var result = '', cycle; + + for (cycle = 0; cycle < count; cycle += 1) { + result += string; + } + + return result; +} + + +function isNegativeZero(number) { + return (0 === number) && (Number.NEGATIVE_INFINITY === 1 / number); +} + + +module.exports.isNothing = isNothing; +module.exports.isObject = isObject; +module.exports.toArray = toArray; +module.exports.repeat = repeat; +module.exports.isNegativeZero = isNegativeZero; +module.exports.extend = extend; + +},{}],3:[function(require,module,exports){ +'use strict'; + +/*eslint-disable no-use-before-define*/ + +var common = require('./common'); +var YAMLException = require('./exception'); +var DEFAULT_FULL_SCHEMA = require('./schema/default_full'); +var DEFAULT_SAFE_SCHEMA = require('./schema/default_safe'); + +var _toString = Object.prototype.toString; +var _hasOwnProperty = Object.prototype.hasOwnProperty; + +var CHAR_TAB = 0x09; /* Tab */ +var CHAR_LINE_FEED = 0x0A; /* LF */ +var CHAR_CARRIAGE_RETURN = 0x0D; /* CR */ +var CHAR_SPACE = 0x20; /* Space */ +var CHAR_EXCLAMATION = 0x21; /* ! */ +var CHAR_DOUBLE_QUOTE = 0x22; /* " */ +var CHAR_SHARP = 0x23; /* # */ +var CHAR_PERCENT = 0x25; /* % */ +var CHAR_AMPERSAND = 0x26; /* & */ +var CHAR_SINGLE_QUOTE = 0x27; /* ' */ +var CHAR_ASTERISK = 0x2A; /* * */ +var CHAR_COMMA = 0x2C; /* , */ +var CHAR_MINUS = 0x2D; /* - */ +var CHAR_COLON = 0x3A; /* : */ +var CHAR_GREATER_THAN = 0x3E; /* > */ +var CHAR_QUESTION = 0x3F; /* ? */ +var CHAR_COMMERCIAL_AT = 0x40; /* @ */ +var CHAR_LEFT_SQUARE_BRACKET = 0x5B; /* [ */ +var CHAR_RIGHT_SQUARE_BRACKET = 0x5D; /* ] */ +var CHAR_GRAVE_ACCENT = 0x60; /* ` */ +var CHAR_LEFT_CURLY_BRACKET = 0x7B; /* { */ +var CHAR_VERTICAL_LINE = 0x7C; /* | */ +var CHAR_RIGHT_CURLY_BRACKET = 0x7D; /* } */ + +var ESCAPE_SEQUENCES = {}; + +ESCAPE_SEQUENCES[0x00] = '\\0'; +ESCAPE_SEQUENCES[0x07] = '\\a'; +ESCAPE_SEQUENCES[0x08] = '\\b'; +ESCAPE_SEQUENCES[0x09] = '\\t'; +ESCAPE_SEQUENCES[0x0A] = '\\n'; +ESCAPE_SEQUENCES[0x0B] = '\\v'; +ESCAPE_SEQUENCES[0x0C] = '\\f'; +ESCAPE_SEQUENCES[0x0D] = '\\r'; +ESCAPE_SEQUENCES[0x1B] = '\\e'; +ESCAPE_SEQUENCES[0x22] = '\\"'; +ESCAPE_SEQUENCES[0x5C] = '\\\\'; +ESCAPE_SEQUENCES[0x85] = '\\N'; +ESCAPE_SEQUENCES[0xA0] = '\\_'; +ESCAPE_SEQUENCES[0x2028] = '\\L'; +ESCAPE_SEQUENCES[0x2029] = '\\P'; + +var DEPRECATED_BOOLEANS_SYNTAX = [ + 'y', 'Y', 'yes', 'Yes', 'YES', 'on', 'On', 'ON', + 'n', 'N', 'no', 'No', 'NO', 'off', 'Off', 'OFF' +]; + +function compileStyleMap(schema, map) { + var result, keys, index, length, tag, style, type; + + if (null === map) { + return {}; + } + + result = {}; + keys = Object.keys(map); + + for (index = 0, length = keys.length; index < length; index += 1) { + tag = keys[index]; + style = String(map[tag]); + + if ('!!' === tag.slice(0, 2)) { + tag = 'tag:yaml.org,2002:' + tag.slice(2); + } + + type = schema.compiledTypeMap[tag]; + + if (type && _hasOwnProperty.call(type.styleAliases, style)) { + style = type.styleAliases[style]; + } + + result[tag] = style; + } + + return result; +} + +function encodeHex(character) { + var string, handle, length; + + string = character.toString(16).toUpperCase(); + + if (character <= 0xFF) { + handle = 'x'; + length = 2; + } else if (character <= 0xFFFF) { + handle = 'u'; + length = 4; + } else if (character <= 0xFFFFFFFF) { + handle = 'U'; + length = 8; + } else { + throw new YAMLException('code point within a string may not be greater than 0xFFFFFFFF'); + } + + return '\\' + handle + common.repeat('0', length - string.length) + string; +} + +function State(options) { + this.schema = options['schema'] || DEFAULT_FULL_SCHEMA; + this.indent = Math.max(1, (options['indent'] || 2)); + this.skipInvalid = options['skipInvalid'] || false; + this.flowLevel = (common.isNothing(options['flowLevel']) ? -1 : options['flowLevel']); + this.styleMap = compileStyleMap(this.schema, options['styles'] || null); + this.sortKeys = options['sortKeys'] || false; + + this.implicitTypes = this.schema.compiledImplicit; + this.explicitTypes = this.schema.compiledExplicit; + + this.tag = null; + this.result = ''; + + this.duplicates = []; + this.usedDuplicates = null; +} + +function indentString(string, spaces) { + var ind = common.repeat(' ', spaces), + position = 0, + next = -1, + result = '', + line, + length = string.length; + + while (position < length) { + next = string.indexOf('\n', position); + if (next === -1) { + line = string.slice(position); + position = length; + } else { + line = string.slice(position, next + 1); + position = next + 1; + } + if (line.length && line !== '\n') { + result += ind; + } + result += line; + } + + return result; +} + +function generateNextLine(state, level) { + return '\n' + common.repeat(' ', state.indent * level); +} + +function testImplicitResolving(state, str) { + var index, length, type; + + for (index = 0, length = state.implicitTypes.length; index < length; index += 1) { + type = state.implicitTypes[index]; + + if (type.resolve(str)) { + return true; + } + } + + return false; +} + +function StringBuilder(source) { + this.source = source; + this.result = ''; + this.checkpoint = 0; +} + +StringBuilder.prototype.takeUpTo = function (position) { + var er; + + if (position < this.checkpoint) { + er = new Error('position should be > checkpoint'); + er.position = position; + er.checkpoint = this.checkpoint; + throw er; + } + + this.result += this.source.slice(this.checkpoint, position); + this.checkpoint = position; + return this; +}; + +StringBuilder.prototype.escapeChar = function () { + var character, esc; + + character = this.source.charCodeAt(this.checkpoint); + esc = ESCAPE_SEQUENCES[character] || encodeHex(character); + this.result += esc; + this.checkpoint += 1; + + return this; +}; + +StringBuilder.prototype.finish = function () { + if (this.source.length > this.checkpoint) { + this.takeUpTo(this.source.length); + } +}; + +function writeScalar(state, object, level) { + var simple, first, spaceWrap, folded, literal, single, double, + sawLineFeed, linePosition, longestLine, indent, max, character, + position, escapeSeq, hexEsc, previous, lineLength, modifier, + trailingLineBreaks, result; + + if (0 === object.length) { + state.dump = "''"; + return; + } + + if (-1 !== DEPRECATED_BOOLEANS_SYNTAX.indexOf(object)) { + state.dump = "'" + object + "'"; + return; + } + + simple = true; + first = object.length ? object.charCodeAt(0) : 0; + spaceWrap = (CHAR_SPACE === first || + CHAR_SPACE === object.charCodeAt(object.length - 1)); + + // Simplified check for restricted first characters + // http://www.yaml.org/spec/1.2/spec.html#ns-plain-first%28c%29 + if (CHAR_MINUS === first || + CHAR_QUESTION === first || + CHAR_COMMERCIAL_AT === first || + CHAR_GRAVE_ACCENT === first) { + simple = false; + } + + // can only use > and | if not wrapped in spaces. + if (spaceWrap) { + simple = false; + folded = false; + literal = false; + } else { + folded = true; + literal = true; + } + + single = true; + double = new StringBuilder(object); + + sawLineFeed = false; + linePosition = 0; + longestLine = 0; + + indent = state.indent * level; + max = 80; + if (indent < 40) { + max -= indent; + } else { + max = 40; + } + + for (position = 0; position < object.length; position++) { + character = object.charCodeAt(position); + if (simple) { + // Characters that can never appear in the simple scalar + if (!simpleChar(character)) { + simple = false; + } else { + // Still simple. If we make it all the way through like + // this, then we can just dump the string as-is. + continue; + } + } + + if (single && character === CHAR_SINGLE_QUOTE) { + single = false; + } + + escapeSeq = ESCAPE_SEQUENCES[character]; + hexEsc = needsHexEscape(character); + + if (!escapeSeq && !hexEsc) { + continue; + } + + if (character !== CHAR_LINE_FEED && + character !== CHAR_DOUBLE_QUOTE && + character !== CHAR_SINGLE_QUOTE) { + folded = false; + literal = false; + } else if (character === CHAR_LINE_FEED) { + sawLineFeed = true; + single = false; + if (position > 0) { + previous = object.charCodeAt(position - 1); + if (previous === CHAR_SPACE) { + literal = false; + folded = false; + } + } + if (folded) { + lineLength = position - linePosition; + linePosition = position; + if (lineLength > longestLine) { + longestLine = lineLength; + } + } + } + + if (character !== CHAR_DOUBLE_QUOTE) { + single = false; + } + + double.takeUpTo(position); + double.escapeChar(); + } + + if (simple && testImplicitResolving(state, object)) { + simple = false; + } + + modifier = ''; + if (folded || literal) { + trailingLineBreaks = 0; + if (object.charCodeAt(object.length - 1) === CHAR_LINE_FEED) { + trailingLineBreaks += 1; + if (object.charCodeAt(object.length - 2) === CHAR_LINE_FEED) { + trailingLineBreaks += 1; + } + } + + if (trailingLineBreaks === 0) { + modifier = '-'; + } else if (trailingLineBreaks === 2) { + modifier = '+'; + } + } + + if (literal && longestLine < max) { + folded = false; + } + + // If it's literally one line, then don't bother with the literal. + // We may still want to do a fold, though, if it's a super long line. + if (!sawLineFeed) { + literal = false; + } + + if (simple) { + state.dump = object; + } else if (single) { + state.dump = '\'' + object + '\''; + } else if (folded) { + result = fold(object, max); + state.dump = '>' + modifier + '\n' + indentString(result, indent); + } else if (literal) { + if (!modifier) { + object = object.replace(/\n$/, ''); + } + state.dump = '|' + modifier + '\n' + indentString(object, indent); + } else if (double) { + double.finish(); + state.dump = '"' + double.result + '"'; + } else { + throw new Error('Failed to dump scalar value'); + } + + return; +} + +// The `trailing` var is a regexp match of any trailing `\n` characters. +// +// There are three cases we care about: +// +// 1. One trailing `\n` on the string. Just use `|` or `>`. +// This is the assumed default. (trailing = null) +// 2. No trailing `\n` on the string. Use `|-` or `>-` to "chomp" the end. +// 3. More than one trailing `\n` on the string. Use `|+` or `>+`. +// +// In the case of `>+`, these line breaks are *not* doubled (like the line +// breaks within the string), so it's important to only end with the exact +// same number as we started. +function fold(object, max) { + var result = '', + position = 0, + length = object.length, + trailing = /\n+$/.exec(object), + newLine; + + if (trailing) { + length = trailing.index + 1; + } + + while (position < length) { + newLine = object.indexOf('\n', position); + if (newLine > length || newLine === -1) { + if (result) { + result += '\n\n'; + } + result += foldLine(object.slice(position, length), max); + position = length; + } else { + if (result) { + result += '\n\n'; + } + result += foldLine(object.slice(position, newLine), max); + position = newLine + 1; + } + } + if (trailing && trailing[0] !== '\n') { + result += trailing[0]; + } + + return result; +} + +function foldLine(line, max) { + if (line === '') { + return line; + } + + var foldRe = /[^\s] [^\s]/g, + result = '', + prevMatch = 0, + foldStart = 0, + match = foldRe.exec(line), + index, + foldEnd, + folded; + + while (match) { + index = match.index; + + // when we cross the max len, if the previous match would've + // been ok, use that one, and carry on. If there was no previous + // match on this fold section, then just have a long line. + if (index - foldStart > max) { + if (prevMatch !== foldStart) { + foldEnd = prevMatch; + } else { + foldEnd = index; + } + + if (result) { + result += '\n'; + } + folded = line.slice(foldStart, foldEnd); + result += folded; + foldStart = foldEnd + 1; + } + prevMatch = index + 1; + match = foldRe.exec(line); + } + + if (result) { + result += '\n'; + } + + // if we end up with one last word at the end, then the last bit might + // be slightly bigger than we wanted, because we exited out of the loop. + if (foldStart !== prevMatch && line.length - foldStart > max) { + result += line.slice(foldStart, prevMatch) + '\n' + + line.slice(prevMatch + 1); + } else { + result += line.slice(foldStart); + } + + return result; +} + +// Returns true if character can be found in a simple scalar +function simpleChar(character) { + return CHAR_TAB !== character && + CHAR_LINE_FEED !== character && + CHAR_CARRIAGE_RETURN !== character && + CHAR_COMMA !== character && + CHAR_LEFT_SQUARE_BRACKET !== character && + CHAR_RIGHT_SQUARE_BRACKET !== character && + CHAR_LEFT_CURLY_BRACKET !== character && + CHAR_RIGHT_CURLY_BRACKET !== character && + CHAR_SHARP !== character && + CHAR_AMPERSAND !== character && + CHAR_ASTERISK !== character && + CHAR_EXCLAMATION !== character && + CHAR_VERTICAL_LINE !== character && + CHAR_GREATER_THAN !== character && + CHAR_SINGLE_QUOTE !== character && + CHAR_DOUBLE_QUOTE !== character && + CHAR_PERCENT !== character && + CHAR_COLON !== character && + !ESCAPE_SEQUENCES[character] && + !needsHexEscape(character); +} + +// Returns true if the character code needs to be escaped. +function needsHexEscape(character) { + return !((0x00020 <= character && character <= 0x00007E) || + (0x00085 === character) || + (0x000A0 <= character && character <= 0x00D7FF) || + (0x0E000 <= character && character <= 0x00FFFD) || + (0x10000 <= character && character <= 0x10FFFF)); +} + +function writeFlowSequence(state, level, object) { + var _result = '', + _tag = state.tag, + index, + length; + + for (index = 0, length = object.length; index < length; index += 1) { + // Write only valid elements. + if (writeNode(state, level, object[index], false, false)) { + if (0 !== index) { + _result += ', '; + } + _result += state.dump; + } + } + + state.tag = _tag; + state.dump = '[' + _result + ']'; +} + +function writeBlockSequence(state, level, object, compact) { + var _result = '', + _tag = state.tag, + index, + length; + + for (index = 0, length = object.length; index < length; index += 1) { + // Write only valid elements. + if (writeNode(state, level + 1, object[index], true, true)) { + if (!compact || 0 !== index) { + _result += generateNextLine(state, level); + } + _result += '- ' + state.dump; + } + } + + state.tag = _tag; + state.dump = _result || '[]'; // Empty sequence if no valid values. +} + +function writeFlowMapping(state, level, object) { + var _result = '', + _tag = state.tag, + objectKeyList = Object.keys(object), + index, + length, + objectKey, + objectValue, + pairBuffer; + + for (index = 0, length = objectKeyList.length; index < length; index += 1) { + pairBuffer = ''; + + if (0 !== index) { + pairBuffer += ', '; + } + + objectKey = objectKeyList[index]; + objectValue = object[objectKey]; + + if (!writeNode(state, level, objectKey, false, false)) { + continue; // Skip this pair because of invalid key; + } + + if (state.dump.length > 1024) { + pairBuffer += '? '; + } + + pairBuffer += state.dump + ': '; + + if (!writeNode(state, level, objectValue, false, false)) { + continue; // Skip this pair because of invalid value. + } + + pairBuffer += state.dump; + + // Both key and value are valid. + _result += pairBuffer; + } + + state.tag = _tag; + state.dump = '{' + _result + '}'; +} + +function writeBlockMapping(state, level, object, compact) { + var _result = '', + _tag = state.tag, + objectKeyList = Object.keys(object), + index, + length, + objectKey, + objectValue, + explicitPair, + pairBuffer; + + // Allow sorting keys so that the output file is deterministic + if (state.sortKeys === true) { + // Default sorting + objectKeyList.sort(); + } else if (typeof state.sortKeys === 'function') { + // Custom sort function + objectKeyList.sort(state.sortKeys); + } else if (state.sortKeys) { + // Something is wrong + throw new YAMLException('sortKeys must be a boolean or a function'); + } + + for (index = 0, length = objectKeyList.length; index < length; index += 1) { + pairBuffer = ''; + + if (!compact || 0 !== index) { + pairBuffer += generateNextLine(state, level); + } + + objectKey = objectKeyList[index]; + objectValue = object[objectKey]; + + if (!writeNode(state, level + 1, objectKey, true, true)) { + continue; // Skip this pair because of invalid key. + } + + explicitPair = (null !== state.tag && '?' !== state.tag) || + (state.dump && state.dump.length > 1024); + + if (explicitPair) { + if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) { + pairBuffer += '?'; + } else { + pairBuffer += '? '; + } + } + + pairBuffer += state.dump; + + if (explicitPair) { + pairBuffer += generateNextLine(state, level); + } + + if (!writeNode(state, level + 1, objectValue, true, explicitPair)) { + continue; // Skip this pair because of invalid value. + } + + if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) { + pairBuffer += ':'; + } else { + pairBuffer += ': '; + } + + pairBuffer += state.dump; + + // Both key and value are valid. + _result += pairBuffer; + } + + state.tag = _tag; + state.dump = _result || '{}'; // Empty mapping if no valid pairs. +} + +function detectType(state, object, explicit) { + var _result, typeList, index, length, type, style; + + typeList = explicit ? state.explicitTypes : state.implicitTypes; + + for (index = 0, length = typeList.length; index < length; index += 1) { + type = typeList[index]; + + if ((type.instanceOf || type.predicate) && + (!type.instanceOf || (('object' === typeof object) && (object instanceof type.instanceOf))) && + (!type.predicate || type.predicate(object))) { + + state.tag = explicit ? type.tag : '?'; + + if (type.represent) { + style = state.styleMap[type.tag] || type.defaultStyle; + + if ('[object Function]' === _toString.call(type.represent)) { + _result = type.represent(object, style); + } else if (_hasOwnProperty.call(type.represent, style)) { + _result = type.represent[style](object, style); + } else { + throw new YAMLException('!<' + type.tag + '> tag resolver accepts not "' + style + '" style'); + } + + state.dump = _result; + } + + return true; + } + } + + return false; +} + +// Serializes `object` and writes it to global `result`. +// Returns true on success, or false on invalid object. +// +function writeNode(state, level, object, block, compact) { + state.tag = null; + state.dump = object; + + if (!detectType(state, object, false)) { + detectType(state, object, true); + } + + var type = _toString.call(state.dump); + + if (block) { + block = (0 > state.flowLevel || state.flowLevel > level); + } + + if ((null !== state.tag && '?' !== state.tag) || (2 !== state.indent && level > 0)) { + compact = false; + } + + var objectOrArray = '[object Object]' === type || '[object Array]' === type, + duplicateIndex, + duplicate; + + if (objectOrArray) { + duplicateIndex = state.duplicates.indexOf(object); + duplicate = duplicateIndex !== -1; + } + + if (duplicate && state.usedDuplicates[duplicateIndex]) { + state.dump = '*ref_' + duplicateIndex; + } else { + if (objectOrArray && duplicate && !state.usedDuplicates[duplicateIndex]) { + state.usedDuplicates[duplicateIndex] = true; + } + if ('[object Object]' === type) { + if (block && (0 !== Object.keys(state.dump).length)) { + writeBlockMapping(state, level, state.dump, compact); + if (duplicate) { + state.dump = '&ref_' + duplicateIndex + (0 === level ? '\n' : '') + state.dump; + } + } else { + writeFlowMapping(state, level, state.dump); + if (duplicate) { + state.dump = '&ref_' + duplicateIndex + ' ' + state.dump; + } + } + } else if ('[object Array]' === type) { + if (block && (0 !== state.dump.length)) { + writeBlockSequence(state, level, state.dump, compact); + if (duplicate) { + state.dump = '&ref_' + duplicateIndex + (0 === level ? '\n' : '') + state.dump; + } + } else { + writeFlowSequence(state, level, state.dump); + if (duplicate) { + state.dump = '&ref_' + duplicateIndex + ' ' + state.dump; + } + } + } else if ('[object String]' === type) { + if ('?' !== state.tag) { + writeScalar(state, state.dump, level); + } + } else { + if (state.skipInvalid) { + return false; + } + throw new YAMLException('unacceptable kind of an object to dump ' + type); + } + + if (null !== state.tag && '?' !== state.tag) { + state.dump = '!<' + state.tag + '> ' + state.dump; + } + } + + return true; +} + +function getDuplicateReferences(object, state) { + var objects = [], + duplicatesIndexes = [], + index, + length; + + inspectNode(object, objects, duplicatesIndexes); + + for (index = 0, length = duplicatesIndexes.length; index < length; index += 1) { + state.duplicates.push(objects[duplicatesIndexes[index]]); + } + state.usedDuplicates = new Array(length); +} + +function inspectNode(object, objects, duplicatesIndexes) { + var type = _toString.call(object), + objectKeyList, + index, + length; + + if (null !== object && 'object' === typeof object) { + index = objects.indexOf(object); + if (-1 !== index) { + if (-1 === duplicatesIndexes.indexOf(index)) { + duplicatesIndexes.push(index); + } + } else { + objects.push(object); + + if (Array.isArray(object)) { + for (index = 0, length = object.length; index < length; index += 1) { + inspectNode(object[index], objects, duplicatesIndexes); + } + } else { + objectKeyList = Object.keys(object); + + for (index = 0, length = objectKeyList.length; index < length; index += 1) { + inspectNode(object[objectKeyList[index]], objects, duplicatesIndexes); + } + } + } + } +} + +function dump(input, options) { + options = options || {}; + + var state = new State(options); + + getDuplicateReferences(input, state); + + if (writeNode(state, 0, input, true, true)) { + return state.dump + '\n'; + } + return ''; +} + +function safeDump(input, options) { + return dump(input, common.extend({ schema: DEFAULT_SAFE_SCHEMA }, options)); +} + +module.exports.dump = dump; +module.exports.safeDump = safeDump; + +},{"./common":2,"./exception":4,"./schema/default_full":9,"./schema/default_safe":10}],4:[function(require,module,exports){ +'use strict'; + + +function YAMLException(reason, mark) { + this.name = 'YAMLException'; + this.reason = reason; + this.mark = mark; + this.message = this.toString(false); +} + + +YAMLException.prototype.toString = function toString(compact) { + var result; + + result = 'JS-YAML: ' + (this.reason || '(unknown reason)'); + + if (!compact && this.mark) { + result += ' ' + this.mark.toString(); + } + + return result; +}; + + +module.exports = YAMLException; + +},{}],5:[function(require,module,exports){ +'use strict'; + +/*eslint-disable max-len,no-use-before-define*/ + +var common = require('./common'); +var YAMLException = require('./exception'); +var Mark = require('./mark'); +var DEFAULT_SAFE_SCHEMA = require('./schema/default_safe'); +var DEFAULT_FULL_SCHEMA = require('./schema/default_full'); + + +var _hasOwnProperty = Object.prototype.hasOwnProperty; + + +var CONTEXT_FLOW_IN = 1; +var CONTEXT_FLOW_OUT = 2; +var CONTEXT_BLOCK_IN = 3; +var CONTEXT_BLOCK_OUT = 4; + + +var CHOMPING_CLIP = 1; +var CHOMPING_STRIP = 2; +var CHOMPING_KEEP = 3; + + +var PATTERN_NON_PRINTABLE = /[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/; +var PATTERN_NON_ASCII_LINE_BREAKS = /[\x85\u2028\u2029]/; +var PATTERN_FLOW_INDICATORS = /[,\[\]\{\}]/; +var PATTERN_TAG_HANDLE = /^(?:!|!!|![a-z\-]+!)$/i; +var PATTERN_TAG_URI = /^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i; + + +function is_EOL(c) { + return (c === 0x0A/* LF */) || (c === 0x0D/* CR */); +} + +function is_WHITE_SPACE(c) { + return (c === 0x09/* Tab */) || (c === 0x20/* Space */); +} + +function is_WS_OR_EOL(c) { + return (c === 0x09/* Tab */) || + (c === 0x20/* Space */) || + (c === 0x0A/* LF */) || + (c === 0x0D/* CR */); +} + +function is_FLOW_INDICATOR(c) { + return 0x2C/* , */ === c || + 0x5B/* [ */ === c || + 0x5D/* ] */ === c || + 0x7B/* { */ === c || + 0x7D/* } */ === c; +} + +function fromHexCode(c) { + var lc; + + if ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) { + return c - 0x30; + } + + /*eslint-disable no-bitwise*/ + lc = c | 0x20; + + if ((0x61/* a */ <= lc) && (lc <= 0x66/* f */)) { + return lc - 0x61 + 10; + } + + return -1; +} + +function escapedHexLen(c) { + if (c === 0x78/* x */) { return 2; } + if (c === 0x75/* u */) { return 4; } + if (c === 0x55/* U */) { return 8; } + return 0; +} + +function fromDecimalCode(c) { + if ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) { + return c - 0x30; + } + + return -1; +} + +function simpleEscapeSequence(c) { + return (c === 0x30/* 0 */) ? '\x00' : + (c === 0x61/* a */) ? '\x07' : + (c === 0x62/* b */) ? '\x08' : + (c === 0x74/* t */) ? '\x09' : + (c === 0x09/* Tab */) ? '\x09' : + (c === 0x6E/* n */) ? '\x0A' : + (c === 0x76/* v */) ? '\x0B' : + (c === 0x66/* f */) ? '\x0C' : + (c === 0x72/* r */) ? '\x0D' : + (c === 0x65/* e */) ? '\x1B' : + (c === 0x20/* Space */) ? ' ' : + (c === 0x22/* " */) ? '\x22' : + (c === 0x2F/* / */) ? '/' : + (c === 0x5C/* \ */) ? '\x5C' : + (c === 0x4E/* N */) ? '\x85' : + (c === 0x5F/* _ */) ? '\xA0' : + (c === 0x4C/* L */) ? '\u2028' : + (c === 0x50/* P */) ? '\u2029' : ''; +} + +function charFromCodepoint(c) { + if (c <= 0xFFFF) { + return String.fromCharCode(c); + } + // Encode UTF-16 surrogate pair + // https://en.wikipedia.org/wiki/UTF-16#Code_points_U.2B010000_to_U.2B10FFFF + return String.fromCharCode(((c - 0x010000) >> 10) + 0xD800, + ((c - 0x010000) & 0x03FF) + 0xDC00); +} + +var simpleEscapeCheck = new Array(256); // integer, for fast access +var simpleEscapeMap = new Array(256); +for (var i = 0; i < 256; i++) { + simpleEscapeCheck[i] = simpleEscapeSequence(i) ? 1 : 0; + simpleEscapeMap[i] = simpleEscapeSequence(i); +} + + +function State(input, options) { + this.input = input; + + this.filename = options['filename'] || null; + this.schema = options['schema'] || DEFAULT_FULL_SCHEMA; + this.onWarning = options['onWarning'] || null; + this.legacy = options['legacy'] || false; + + this.implicitTypes = this.schema.compiledImplicit; + this.typeMap = this.schema.compiledTypeMap; + + this.length = input.length; + this.position = 0; + this.line = 0; + this.lineStart = 0; + this.lineIndent = 0; + + this.documents = []; + + /* + this.version; + this.checkLineBreaks; + this.tagMap; + this.anchorMap; + this.tag; + this.anchor; + this.kind; + this.result;*/ + +} + + +function generateError(state, message) { + return new YAMLException( + message, + new Mark(state.filename, state.input, state.position, state.line, (state.position - state.lineStart))); +} + +function throwError(state, message) { + throw generateError(state, message); +} + +function throwWarning(state, message) { + var error = generateError(state, message); + + if (state.onWarning) { + state.onWarning.call(null, error); + } else { + throw error; + } +} + + +var directiveHandlers = { + + YAML: function handleYamlDirective(state, name, args) { + + var match, major, minor; + + if (null !== state.version) { + throwError(state, 'duplication of %YAML directive'); + } + + if (1 !== args.length) { + throwError(state, 'YAML directive accepts exactly one argument'); + } + + match = /^([0-9]+)\.([0-9]+)$/.exec(args[0]); + + if (null === match) { + throwError(state, 'ill-formed argument of the YAML directive'); + } + + major = parseInt(match[1], 10); + minor = parseInt(match[2], 10); + + if (1 !== major) { + throwError(state, 'unacceptable YAML version of the document'); + } + + state.version = args[0]; + state.checkLineBreaks = (minor < 2); + + if (1 !== minor && 2 !== minor) { + throwWarning(state, 'unsupported YAML version of the document'); + } + }, + + TAG: function handleTagDirective(state, name, args) { + + var handle, prefix; + + if (2 !== args.length) { + throwError(state, 'TAG directive accepts exactly two arguments'); + } + + handle = args[0]; + prefix = args[1]; + + if (!PATTERN_TAG_HANDLE.test(handle)) { + throwError(state, 'ill-formed tag handle (first argument) of the TAG directive'); + } + + if (_hasOwnProperty.call(state.tagMap, handle)) { + throwError(state, 'there is a previously declared suffix for "' + handle + '" tag handle'); + } + + if (!PATTERN_TAG_URI.test(prefix)) { + throwError(state, 'ill-formed tag prefix (second argument) of the TAG directive'); + } + + state.tagMap[handle] = prefix; + } +}; + + +function captureSegment(state, start, end, checkJson) { + var _position, _length, _character, _result; + + if (start < end) { + _result = state.input.slice(start, end); + + if (checkJson) { + for (_position = 0, _length = _result.length; + _position < _length; + _position += 1) { + _character = _result.charCodeAt(_position); + if (!(0x09 === _character || + 0x20 <= _character && _character <= 0x10FFFF)) { + throwError(state, 'expected valid JSON character'); + } + } + } + + state.result += _result; + } +} + +function mergeMappings(state, destination, source) { + var sourceKeys, key, index, quantity; + + if (!common.isObject(source)) { + throwError(state, 'cannot merge mappings; the provided source object is unacceptable'); + } + + sourceKeys = Object.keys(source); + + for (index = 0, quantity = sourceKeys.length; index < quantity; index += 1) { + key = sourceKeys[index]; + + if (!_hasOwnProperty.call(destination, key)) { + destination[key] = source[key]; + } + } +} + +function storeMappingPair(state, _result, keyTag, keyNode, valueNode) { + var index, quantity; + + keyNode = String(keyNode); + + if (null === _result) { + _result = {}; + } + + if ('tag:yaml.org,2002:merge' === keyTag) { + if (Array.isArray(valueNode)) { + for (index = 0, quantity = valueNode.length; index < quantity; index += 1) { + mergeMappings(state, _result, valueNode[index]); + } + } else { + mergeMappings(state, _result, valueNode); + } + } else { + _result[keyNode] = valueNode; + } + + return _result; +} + +function readLineBreak(state) { + var ch; + + ch = state.input.charCodeAt(state.position); + + if (0x0A/* LF */ === ch) { + state.position++; + } else if (0x0D/* CR */ === ch) { + state.position++; + if (0x0A/* LF */ === state.input.charCodeAt(state.position)) { + state.position++; + } + } else { + throwError(state, 'a line break is expected'); + } + + state.line += 1; + state.lineStart = state.position; +} + +function skipSeparationSpace(state, allowComments, checkIndent) { + var lineBreaks = 0, + ch = state.input.charCodeAt(state.position); + + while (0 !== ch) { + while (is_WHITE_SPACE(ch)) { + ch = state.input.charCodeAt(++state.position); + } + + if (allowComments && 0x23/* # */ === ch) { + do { + ch = state.input.charCodeAt(++state.position); + } while (ch !== 0x0A/* LF */ && ch !== 0x0D/* CR */ && 0 !== ch); + } + + if (is_EOL(ch)) { + readLineBreak(state); + + ch = state.input.charCodeAt(state.position); + lineBreaks++; + state.lineIndent = 0; + + while (0x20/* Space */ === ch) { + state.lineIndent++; + ch = state.input.charCodeAt(++state.position); + } + } else { + break; + } + } + + if (-1 !== checkIndent && 0 !== lineBreaks && state.lineIndent < checkIndent) { + throwWarning(state, 'deficient indentation'); + } + + return lineBreaks; +} + +function testDocumentSeparator(state) { + var _position = state.position, + ch; + + ch = state.input.charCodeAt(_position); + + // Condition state.position === state.lineStart is tested + // in parent on each call, for efficiency. No needs to test here again. + if ((0x2D/* - */ === ch || 0x2E/* . */ === ch) && + state.input.charCodeAt(_position + 1) === ch && + state.input.charCodeAt(_position + 2) === ch) { + + _position += 3; + + ch = state.input.charCodeAt(_position); + + if (ch === 0 || is_WS_OR_EOL(ch)) { + return true; + } + } + + return false; +} + +function writeFoldedLines(state, count) { + if (1 === count) { + state.result += ' '; + } else if (count > 1) { + state.result += common.repeat('\n', count - 1); + } +} + + +function readPlainScalar(state, nodeIndent, withinFlowCollection) { + var preceding, + following, + captureStart, + captureEnd, + hasPendingContent, + _line, + _lineStart, + _lineIndent, + _kind = state.kind, + _result = state.result, + ch; + + ch = state.input.charCodeAt(state.position); + + if (is_WS_OR_EOL(ch) || + is_FLOW_INDICATOR(ch) || + 0x23/* # */ === ch || + 0x26/* & */ === ch || + 0x2A/* * */ === ch || + 0x21/* ! */ === ch || + 0x7C/* | */ === ch || + 0x3E/* > */ === ch || + 0x27/* ' */ === ch || + 0x22/* " */ === ch || + 0x25/* % */ === ch || + 0x40/* @ */ === ch || + 0x60/* ` */ === ch) { + return false; + } + + if (0x3F/* ? */ === ch || 0x2D/* - */ === ch) { + following = state.input.charCodeAt(state.position + 1); + + if (is_WS_OR_EOL(following) || + withinFlowCollection && is_FLOW_INDICATOR(following)) { + return false; + } + } + + state.kind = 'scalar'; + state.result = ''; + captureStart = captureEnd = state.position; + hasPendingContent = false; + + while (0 !== ch) { + if (0x3A/* : */ === ch) { + following = state.input.charCodeAt(state.position + 1); + + if (is_WS_OR_EOL(following) || + withinFlowCollection && is_FLOW_INDICATOR(following)) { + break; + } + + } else if (0x23/* # */ === ch) { + preceding = state.input.charCodeAt(state.position - 1); + + if (is_WS_OR_EOL(preceding)) { + break; + } + + } else if ((state.position === state.lineStart && testDocumentSeparator(state)) || + withinFlowCollection && is_FLOW_INDICATOR(ch)) { + break; + + } else if (is_EOL(ch)) { + _line = state.line; + _lineStart = state.lineStart; + _lineIndent = state.lineIndent; + skipSeparationSpace(state, false, -1); + + if (state.lineIndent >= nodeIndent) { + hasPendingContent = true; + ch = state.input.charCodeAt(state.position); + continue; + } else { + state.position = captureEnd; + state.line = _line; + state.lineStart = _lineStart; + state.lineIndent = _lineIndent; + break; + } + } + + if (hasPendingContent) { + captureSegment(state, captureStart, captureEnd, false); + writeFoldedLines(state, state.line - _line); + captureStart = captureEnd = state.position; + hasPendingContent = false; + } + + if (!is_WHITE_SPACE(ch)) { + captureEnd = state.position + 1; + } + + ch = state.input.charCodeAt(++state.position); + } + + captureSegment(state, captureStart, captureEnd, false); + + if (state.result) { + return true; + } + + state.kind = _kind; + state.result = _result; + return false; +} + +function readSingleQuotedScalar(state, nodeIndent) { + var ch, + captureStart, captureEnd; + + ch = state.input.charCodeAt(state.position); + + if (0x27/* ' */ !== ch) { + return false; + } + + state.kind = 'scalar'; + state.result = ''; + state.position++; + captureStart = captureEnd = state.position; + + while (0 !== (ch = state.input.charCodeAt(state.position))) { + if (0x27/* ' */ === ch) { + captureSegment(state, captureStart, state.position, true); + ch = state.input.charCodeAt(++state.position); + + if (0x27/* ' */ === ch) { + captureStart = captureEnd = state.position; + state.position++; + } else { + return true; + } + + } else if (is_EOL(ch)) { + captureSegment(state, captureStart, captureEnd, true); + writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent)); + captureStart = captureEnd = state.position; + + } else if (state.position === state.lineStart && testDocumentSeparator(state)) { + throwError(state, 'unexpected end of the document within a single quoted scalar'); + + } else { + state.position++; + captureEnd = state.position; + } + } + + throwError(state, 'unexpected end of the stream within a single quoted scalar'); +} + +function readDoubleQuotedScalar(state, nodeIndent) { + var captureStart, + captureEnd, + hexLength, + hexResult, + tmp, tmpEsc, + ch; + + ch = state.input.charCodeAt(state.position); + + if (0x22/* " */ !== ch) { + return false; + } + + state.kind = 'scalar'; + state.result = ''; + state.position++; + captureStart = captureEnd = state.position; + + while (0 !== (ch = state.input.charCodeAt(state.position))) { + if (0x22/* " */ === ch) { + captureSegment(state, captureStart, state.position, true); + state.position++; + return true; + + } else if (0x5C/* \ */ === ch) { + captureSegment(state, captureStart, state.position, true); + ch = state.input.charCodeAt(++state.position); + + if (is_EOL(ch)) { + skipSeparationSpace(state, false, nodeIndent); + + // TODO: rework to inline fn with no type cast? + } else if (ch < 256 && simpleEscapeCheck[ch]) { + state.result += simpleEscapeMap[ch]; + state.position++; + + } else if ((tmp = escapedHexLen(ch)) > 0) { + hexLength = tmp; + hexResult = 0; + + for (; hexLength > 0; hexLength--) { + ch = state.input.charCodeAt(++state.position); + + if ((tmp = fromHexCode(ch)) >= 0) { + hexResult = (hexResult << 4) + tmp; + + } else { + throwError(state, 'expected hexadecimal character'); + } + } + + state.result += charFromCodepoint(hexResult); + + state.position++; + + } else { + throwError(state, 'unknown escape sequence'); + } + + captureStart = captureEnd = state.position; + + } else if (is_EOL(ch)) { + captureSegment(state, captureStart, captureEnd, true); + writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent)); + captureStart = captureEnd = state.position; + + } else if (state.position === state.lineStart && testDocumentSeparator(state)) { + throwError(state, 'unexpected end of the document within a double quoted scalar'); + + } else { + state.position++; + captureEnd = state.position; + } + } + + throwError(state, 'unexpected end of the stream within a double quoted scalar'); +} + +function readFlowCollection(state, nodeIndent) { + var readNext = true, + _line, + _tag = state.tag, + _result, + _anchor = state.anchor, + following, + terminator, + isPair, + isExplicitPair, + isMapping, + keyNode, + keyTag, + valueNode, + ch; + + ch = state.input.charCodeAt(state.position); + + if (ch === 0x5B/* [ */) { + terminator = 0x5D;/* ] */ + isMapping = false; + _result = []; + } else if (ch === 0x7B/* { */) { + terminator = 0x7D;/* } */ + isMapping = true; + _result = {}; + } else { + return false; + } + + if (null !== state.anchor) { + state.anchorMap[state.anchor] = _result; + } + + ch = state.input.charCodeAt(++state.position); + + while (0 !== ch) { + skipSeparationSpace(state, true, nodeIndent); + + ch = state.input.charCodeAt(state.position); + + if (ch === terminator) { + state.position++; + state.tag = _tag; + state.anchor = _anchor; + state.kind = isMapping ? 'mapping' : 'sequence'; + state.result = _result; + return true; + } else if (!readNext) { + throwError(state, 'missed comma between flow collection entries'); + } + + keyTag = keyNode = valueNode = null; + isPair = isExplicitPair = false; + + if (0x3F/* ? */ === ch) { + following = state.input.charCodeAt(state.position + 1); + + if (is_WS_OR_EOL(following)) { + isPair = isExplicitPair = true; + state.position++; + skipSeparationSpace(state, true, nodeIndent); + } + } + + _line = state.line; + composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true); + keyTag = state.tag; + keyNode = state.result; + skipSeparationSpace(state, true, nodeIndent); + + ch = state.input.charCodeAt(state.position); + + if ((isExplicitPair || state.line === _line) && 0x3A/* : */ === ch) { + isPair = true; + ch = state.input.charCodeAt(++state.position); + skipSeparationSpace(state, true, nodeIndent); + composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true); + valueNode = state.result; + } + + if (isMapping) { + storeMappingPair(state, _result, keyTag, keyNode, valueNode); + } else if (isPair) { + _result.push(storeMappingPair(state, null, keyTag, keyNode, valueNode)); + } else { + _result.push(keyNode); + } + + skipSeparationSpace(state, true, nodeIndent); + + ch = state.input.charCodeAt(state.position); + + if (0x2C/* , */ === ch) { + readNext = true; + ch = state.input.charCodeAt(++state.position); + } else { + readNext = false; + } + } + + throwError(state, 'unexpected end of the stream within a flow collection'); +} + +function readBlockScalar(state, nodeIndent) { + var captureStart, + folding, + chomping = CHOMPING_CLIP, + detectedIndent = false, + textIndent = nodeIndent, + emptyLines = 0, + atMoreIndented = false, + tmp, + ch; + + ch = state.input.charCodeAt(state.position); + + if (ch === 0x7C/* | */) { + folding = false; + } else if (ch === 0x3E/* > */) { + folding = true; + } else { + return false; + } + + state.kind = 'scalar'; + state.result = ''; + + while (0 !== ch) { + ch = state.input.charCodeAt(++state.position); + + if (0x2B/* + */ === ch || 0x2D/* - */ === ch) { + if (CHOMPING_CLIP === chomping) { + chomping = (0x2B/* + */ === ch) ? CHOMPING_KEEP : CHOMPING_STRIP; + } else { + throwError(state, 'repeat of a chomping mode identifier'); + } + + } else if ((tmp = fromDecimalCode(ch)) >= 0) { + if (tmp === 0) { + throwError(state, 'bad explicit indentation width of a block scalar; it cannot be less than one'); + } else if (!detectedIndent) { + textIndent = nodeIndent + tmp - 1; + detectedIndent = true; + } else { + throwError(state, 'repeat of an indentation width identifier'); + } + + } else { + break; + } + } + + if (is_WHITE_SPACE(ch)) { + do { ch = state.input.charCodeAt(++state.position); } + while (is_WHITE_SPACE(ch)); + + if (0x23/* # */ === ch) { + do { ch = state.input.charCodeAt(++state.position); } + while (!is_EOL(ch) && (0 !== ch)); + } + } + + while (0 !== ch) { + readLineBreak(state); + state.lineIndent = 0; + + ch = state.input.charCodeAt(state.position); + + while ((!detectedIndent || state.lineIndent < textIndent) && + (0x20/* Space */ === ch)) { + state.lineIndent++; + ch = state.input.charCodeAt(++state.position); + } + + if (!detectedIndent && state.lineIndent > textIndent) { + textIndent = state.lineIndent; + } + + if (is_EOL(ch)) { + emptyLines++; + continue; + } + + // End of the scalar. + if (state.lineIndent < textIndent) { + + // Perform the chomping. + if (chomping === CHOMPING_KEEP) { + state.result += common.repeat('\n', emptyLines); + } else if (chomping === CHOMPING_CLIP) { + if (detectedIndent) { // i.e. only if the scalar is not empty. + state.result += '\n'; + } + } + + // Break this `while` cycle and go to the funciton's epilogue. + break; + } + + // Folded style: use fancy rules to handle line breaks. + if (folding) { + + // Lines starting with white space characters (more-indented lines) are not folded. + if (is_WHITE_SPACE(ch)) { + atMoreIndented = true; + state.result += common.repeat('\n', emptyLines + 1); + + // End of more-indented block. + } else if (atMoreIndented) { + atMoreIndented = false; + state.result += common.repeat('\n', emptyLines + 1); + + // Just one line break - perceive as the same line. + } else if (0 === emptyLines) { + if (detectedIndent) { // i.e. only if we have already read some scalar content. + state.result += ' '; + } + + // Several line breaks - perceive as different lines. + } else { + state.result += common.repeat('\n', emptyLines); + } + + // Literal style: just add exact number of line breaks between content lines. + } else if (detectedIndent) { + // If current line isn't the first one - count line break from the last content line. + state.result += common.repeat('\n', emptyLines + 1); + } else { + // In case of the first content line - count only empty lines. + } + + detectedIndent = true; + emptyLines = 0; + captureStart = state.position; + + while (!is_EOL(ch) && (0 !== ch)) { + ch = state.input.charCodeAt(++state.position); + } + + captureSegment(state, captureStart, state.position, false); + } + + return true; +} + +function readBlockSequence(state, nodeIndent) { + var _line, + _tag = state.tag, + _anchor = state.anchor, + _result = [], + following, + detected = false, + ch; + + if (null !== state.anchor) { + state.anchorMap[state.anchor] = _result; + } + + ch = state.input.charCodeAt(state.position); + + while (0 !== ch) { + + if (0x2D/* - */ !== ch) { + break; + } + + following = state.input.charCodeAt(state.position + 1); + + if (!is_WS_OR_EOL(following)) { + break; + } + + detected = true; + state.position++; + + if (skipSeparationSpace(state, true, -1)) { + if (state.lineIndent <= nodeIndent) { + _result.push(null); + ch = state.input.charCodeAt(state.position); + continue; + } + } + + _line = state.line; + composeNode(state, nodeIndent, CONTEXT_BLOCK_IN, false, true); + _result.push(state.result); + skipSeparationSpace(state, true, -1); + + ch = state.input.charCodeAt(state.position); + + if ((state.line === _line || state.lineIndent > nodeIndent) && (0 !== ch)) { + throwError(state, 'bad indentation of a sequence entry'); + } else if (state.lineIndent < nodeIndent) { + break; + } + } + + if (detected) { + state.tag = _tag; + state.anchor = _anchor; + state.kind = 'sequence'; + state.result = _result; + return true; + } + return false; +} + +function readBlockMapping(state, nodeIndent, flowIndent) { + var following, + allowCompact, + _line, + _tag = state.tag, + _anchor = state.anchor, + _result = {}, + keyTag = null, + keyNode = null, + valueNode = null, + atExplicitKey = false, + detected = false, + ch; + + if (null !== state.anchor) { + state.anchorMap[state.anchor] = _result; + } + + ch = state.input.charCodeAt(state.position); + + while (0 !== ch) { + following = state.input.charCodeAt(state.position + 1); + _line = state.line; // Save the current line. + + // + // Explicit notation case. There are two separate blocks: + // first for the key (denoted by "?") and second for the value (denoted by ":") + // + if ((0x3F/* ? */ === ch || 0x3A/* : */ === ch) && is_WS_OR_EOL(following)) { + + if (0x3F/* ? */ === ch) { + if (atExplicitKey) { + storeMappingPair(state, _result, keyTag, keyNode, null); + keyTag = keyNode = valueNode = null; + } + + detected = true; + atExplicitKey = true; + allowCompact = true; + + } else if (atExplicitKey) { + // i.e. 0x3A/* : */ === character after the explicit key. + atExplicitKey = false; + allowCompact = true; + + } else { + throwError(state, 'incomplete explicit mapping pair; a key node is missed'); + } + + state.position += 1; + ch = following; + + // + // Implicit notation case. Flow-style node as the key first, then ":", and the value. + // + } else if (composeNode(state, flowIndent, CONTEXT_FLOW_OUT, false, true)) { + + if (state.line === _line) { + ch = state.input.charCodeAt(state.position); + + while (is_WHITE_SPACE(ch)) { + ch = state.input.charCodeAt(++state.position); + } + + if (0x3A/* : */ === ch) { + ch = state.input.charCodeAt(++state.position); + + if (!is_WS_OR_EOL(ch)) { + throwError(state, 'a whitespace character is expected after the key-value separator within a block mapping'); + } + + if (atExplicitKey) { + storeMappingPair(state, _result, keyTag, keyNode, null); + keyTag = keyNode = valueNode = null; + } + + detected = true; + atExplicitKey = false; + allowCompact = false; + keyTag = state.tag; + keyNode = state.result; + + } else if (detected) { + throwError(state, 'can not read an implicit mapping pair; a colon is missed'); + + } else { + state.tag = _tag; + state.anchor = _anchor; + return true; // Keep the result of `composeNode`. + } + + } else if (detected) { + throwError(state, 'can not read a block mapping entry; a multiline key may not be an implicit key'); + + } else { + state.tag = _tag; + state.anchor = _anchor; + return true; // Keep the result of `composeNode`. + } + + } else { + break; // Reading is done. Go to the epilogue. + } + + // + // Common reading code for both explicit and implicit notations. + // + if (state.line === _line || state.lineIndent > nodeIndent) { + if (composeNode(state, nodeIndent, CONTEXT_BLOCK_OUT, true, allowCompact)) { + if (atExplicitKey) { + keyNode = state.result; + } else { + valueNode = state.result; + } + } + + if (!atExplicitKey) { + storeMappingPair(state, _result, keyTag, keyNode, valueNode); + keyTag = keyNode = valueNode = null; + } + + skipSeparationSpace(state, true, -1); + ch = state.input.charCodeAt(state.position); + } + + if (state.lineIndent > nodeIndent && (0 !== ch)) { + throwError(state, 'bad indentation of a mapping entry'); + } else if (state.lineIndent < nodeIndent) { + break; + } + } + + // + // Epilogue. + // + + // Special case: last mapping's node contains only the key in explicit notation. + if (atExplicitKey) { + storeMappingPair(state, _result, keyTag, keyNode, null); + } + + // Expose the resulting mapping. + if (detected) { + state.tag = _tag; + state.anchor = _anchor; + state.kind = 'mapping'; + state.result = _result; + } + + return detected; +} + +function readTagProperty(state) { + var _position, + isVerbatim = false, + isNamed = false, + tagHandle, + tagName, + ch; + + ch = state.input.charCodeAt(state.position); + + if (0x21/* ! */ !== ch) { + return false; + } + + if (null !== state.tag) { + throwError(state, 'duplication of a tag property'); + } + + ch = state.input.charCodeAt(++state.position); + + if (0x3C/* < */ === ch) { + isVerbatim = true; + ch = state.input.charCodeAt(++state.position); + + } else if (0x21/* ! */ === ch) { + isNamed = true; + tagHandle = '!!'; + ch = state.input.charCodeAt(++state.position); + + } else { + tagHandle = '!'; + } + + _position = state.position; + + if (isVerbatim) { + do { ch = state.input.charCodeAt(++state.position); } + while (0 !== ch && 0x3E/* > */ !== ch); + + if (state.position < state.length) { + tagName = state.input.slice(_position, state.position); + ch = state.input.charCodeAt(++state.position); + } else { + throwError(state, 'unexpected end of the stream within a verbatim tag'); + } + } else { + while (0 !== ch && !is_WS_OR_EOL(ch)) { + + if (0x21/* ! */ === ch) { + if (!isNamed) { + tagHandle = state.input.slice(_position - 1, state.position + 1); + + if (!PATTERN_TAG_HANDLE.test(tagHandle)) { + throwError(state, 'named tag handle cannot contain such characters'); + } + + isNamed = true; + _position = state.position + 1; + } else { + throwError(state, 'tag suffix cannot contain exclamation marks'); + } + } + + ch = state.input.charCodeAt(++state.position); + } + + tagName = state.input.slice(_position, state.position); + + if (PATTERN_FLOW_INDICATORS.test(tagName)) { + throwError(state, 'tag suffix cannot contain flow indicator characters'); + } + } + + if (tagName && !PATTERN_TAG_URI.test(tagName)) { + throwError(state, 'tag name cannot contain such characters: ' + tagName); + } + + if (isVerbatim) { + state.tag = tagName; + + } else if (_hasOwnProperty.call(state.tagMap, tagHandle)) { + state.tag = state.tagMap[tagHandle] + tagName; + + } else if ('!' === tagHandle) { + state.tag = '!' + tagName; + + } else if ('!!' === tagHandle) { + state.tag = 'tag:yaml.org,2002:' + tagName; + + } else { + throwError(state, 'undeclared tag handle "' + tagHandle + '"'); + } + + return true; +} + +function readAnchorProperty(state) { + var _position, + ch; + + ch = state.input.charCodeAt(state.position); + + if (0x26/* & */ !== ch) { + return false; + } + + if (null !== state.anchor) { + throwError(state, 'duplication of an anchor property'); + } + + ch = state.input.charCodeAt(++state.position); + _position = state.position; + + while (0 !== ch && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) { + ch = state.input.charCodeAt(++state.position); + } + + if (state.position === _position) { + throwError(state, 'name of an anchor node must contain at least one character'); + } + + state.anchor = state.input.slice(_position, state.position); + return true; +} + +function readAlias(state) { + var _position, alias, + len = state.length, + input = state.input, + ch; + + ch = state.input.charCodeAt(state.position); + + if (0x2A/* * */ !== ch) { + return false; + } + + ch = state.input.charCodeAt(++state.position); + _position = state.position; + + while (0 !== ch && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) { + ch = state.input.charCodeAt(++state.position); + } + + if (state.position === _position) { + throwError(state, 'name of an alias node must contain at least one character'); + } + + alias = state.input.slice(_position, state.position); + + if (!state.anchorMap.hasOwnProperty(alias)) { + throwError(state, 'unidentified alias "' + alias + '"'); + } + + state.result = state.anchorMap[alias]; + skipSeparationSpace(state, true, -1); + return true; +} + +function composeNode(state, parentIndent, nodeContext, allowToSeek, allowCompact) { + var allowBlockStyles, + allowBlockScalars, + allowBlockCollections, + indentStatus = 1, // 1: this>parent, 0: this=parent, -1: this<parent + atNewLine = false, + hasContent = false, + typeIndex, + typeQuantity, + type, + flowIndent, + blockIndent, + _result; + + state.tag = null; + state.anchor = null; + state.kind = null; + state.result = null; + + allowBlockStyles = allowBlockScalars = allowBlockCollections = + CONTEXT_BLOCK_OUT === nodeContext || + CONTEXT_BLOCK_IN === nodeContext; + + if (allowToSeek) { + if (skipSeparationSpace(state, true, -1)) { + atNewLine = true; + + if (state.lineIndent > parentIndent) { + indentStatus = 1; + } else if (state.lineIndent === parentIndent) { + indentStatus = 0; + } else if (state.lineIndent < parentIndent) { + indentStatus = -1; + } + } + } + + if (1 === indentStatus) { + while (readTagProperty(state) || readAnchorProperty(state)) { + if (skipSeparationSpace(state, true, -1)) { + atNewLine = true; + allowBlockCollections = allowBlockStyles; + + if (state.lineIndent > parentIndent) { + indentStatus = 1; + } else if (state.lineIndent === parentIndent) { + indentStatus = 0; + } else if (state.lineIndent < parentIndent) { + indentStatus = -1; + } + } else { + allowBlockCollections = false; + } + } + } + + if (allowBlockCollections) { + allowBlockCollections = atNewLine || allowCompact; + } + + if (1 === indentStatus || CONTEXT_BLOCK_OUT === nodeContext) { + if (CONTEXT_FLOW_IN === nodeContext || CONTEXT_FLOW_OUT === nodeContext) { + flowIndent = parentIndent; + } else { + flowIndent = parentIndent + 1; + } + + blockIndent = state.position - state.lineStart; + + if (1 === indentStatus) { + if (allowBlockCollections && + (readBlockSequence(state, blockIndent) || + readBlockMapping(state, blockIndent, flowIndent)) || + readFlowCollection(state, flowIndent)) { + hasContent = true; + } else { + if ((allowBlockScalars && readBlockScalar(state, flowIndent)) || + readSingleQuotedScalar(state, flowIndent) || + readDoubleQuotedScalar(state, flowIndent)) { + hasContent = true; + + } else if (readAlias(state)) { + hasContent = true; + + if (null !== state.tag || null !== state.anchor) { + throwError(state, 'alias node should not have any properties'); + } + + } else if (readPlainScalar(state, flowIndent, CONTEXT_FLOW_IN === nodeContext)) { + hasContent = true; + + if (null === state.tag) { + state.tag = '?'; + } + } + + if (null !== state.anchor) { + state.anchorMap[state.anchor] = state.result; + } + } + } else if (0 === indentStatus) { + // Special case: block sequences are allowed to have same indentation level as the parent. + // http://www.yaml.org/spec/1.2/spec.html#id2799784 + hasContent = allowBlockCollections && readBlockSequence(state, blockIndent); + } + } + + if (null !== state.tag && '!' !== state.tag) { + if ('?' === state.tag) { + for (typeIndex = 0, typeQuantity = state.implicitTypes.length; + typeIndex < typeQuantity; + typeIndex += 1) { + type = state.implicitTypes[typeIndex]; + + // Implicit resolving is not allowed for non-scalar types, and '?' + // non-specific tag is only assigned to plain scalars. So, it isn't + // needed to check for 'kind' conformity. + + if (type.resolve(state.result)) { // `state.result` updated in resolver if matched + state.result = type.construct(state.result); + state.tag = type.tag; + if (null !== state.anchor) { + state.anchorMap[state.anchor] = state.result; + } + break; + } + } + } else if (_hasOwnProperty.call(state.typeMap, state.tag)) { + type = state.typeMap[state.tag]; + + if (null !== state.result && type.kind !== state.kind) { + throwError(state, 'unacceptable node kind for !<' + state.tag + '> tag; it should be "' + type.kind + '", not "' + state.kind + '"'); + } + + if (!type.resolve(state.result)) { // `state.result` updated in resolver if matched + throwError(state, 'cannot resolve a node with !<' + state.tag + '> explicit tag'); + } else { + state.result = type.construct(state.result); + if (null !== state.anchor) { + state.anchorMap[state.anchor] = state.result; + } + } + } else { + throwWarning(state, 'unknown tag !<' + state.tag + '>'); + } + } + + return null !== state.tag || null !== state.anchor || hasContent; +} + +function readDocument(state) { + var documentStart = state.position, + _position, + directiveName, + directiveArgs, + hasDirectives = false, + ch; + + state.version = null; + state.checkLineBreaks = state.legacy; + state.tagMap = {}; + state.anchorMap = {}; + + while (0 !== (ch = state.input.charCodeAt(state.position))) { + skipSeparationSpace(state, true, -1); + + ch = state.input.charCodeAt(state.position); + + if (state.lineIndent > 0 || 0x25/* % */ !== ch) { + break; + } + + hasDirectives = true; + ch = state.input.charCodeAt(++state.position); + _position = state.position; + + while (0 !== ch && !is_WS_OR_EOL(ch)) { + ch = state.input.charCodeAt(++state.position); + } + + directiveName = state.input.slice(_position, state.position); + directiveArgs = []; + + if (directiveName.length < 1) { + throwError(state, 'directive name must not be less than one character in length'); + } + + while (0 !== ch) { + while (is_WHITE_SPACE(ch)) { + ch = state.input.charCodeAt(++state.position); + } + + if (0x23/* # */ === ch) { + do { ch = state.input.charCodeAt(++state.position); } + while (0 !== ch && !is_EOL(ch)); + break; + } + + if (is_EOL(ch)) { + break; + } + + _position = state.position; + + while (0 !== ch && !is_WS_OR_EOL(ch)) { + ch = state.input.charCodeAt(++state.position); + } + + directiveArgs.push(state.input.slice(_position, state.position)); + } + + if (0 !== ch) { + readLineBreak(state); + } + + if (_hasOwnProperty.call(directiveHandlers, directiveName)) { + directiveHandlers[directiveName](state, directiveName, directiveArgs); + } else { + throwWarning(state, 'unknown document directive "' + directiveName + '"'); + } + } + + skipSeparationSpace(state, true, -1); + + if (0 === state.lineIndent && + 0x2D/* - */ === state.input.charCodeAt(state.position) && + 0x2D/* - */ === state.input.charCodeAt(state.position + 1) && + 0x2D/* - */ === state.input.charCodeAt(state.position + 2)) { + state.position += 3; + skipSeparationSpace(state, true, -1); + + } else if (hasDirectives) { + throwError(state, 'directives end mark is expected'); + } + + composeNode(state, state.lineIndent - 1, CONTEXT_BLOCK_OUT, false, true); + skipSeparationSpace(state, true, -1); + + if (state.checkLineBreaks && + PATTERN_NON_ASCII_LINE_BREAKS.test(state.input.slice(documentStart, state.position))) { + throwWarning(state, 'non-ASCII line breaks are interpreted as content'); + } + + state.documents.push(state.result); + + if (state.position === state.lineStart && testDocumentSeparator(state)) { + + if (0x2E/* . */ === state.input.charCodeAt(state.position)) { + state.position += 3; + skipSeparationSpace(state, true, -1); + } + return; + } + + if (state.position < (state.length - 1)) { + throwError(state, 'end of the stream or a document separator is expected'); + } else { + return; + } +} + + +function loadDocuments(input, options) { + input = String(input); + options = options || {}; + + if (input.length !== 0) { + + // Add tailing `\n` if not exists + if (0x0A/* LF */ !== input.charCodeAt(input.length - 1) && + 0x0D/* CR */ !== input.charCodeAt(input.length - 1)) { + input += '\n'; + } + + // Strip BOM + if (input.charCodeAt(0) === 0xFEFF) { + input = input.slice(1); + } + } + + var state = new State(input, options); + + if (PATTERN_NON_PRINTABLE.test(state.input)) { + throwError(state, 'the stream contains non-printable characters'); + } + + // Use 0 as string terminator. That significantly simplifies bounds check. + state.input += '\0'; + + while (0x20/* Space */ === state.input.charCodeAt(state.position)) { + state.lineIndent += 1; + state.position += 1; + } + + while (state.position < (state.length - 1)) { + readDocument(state); + } + + return state.documents; +} + + +function loadAll(input, iterator, options) { + var documents = loadDocuments(input, options), index, length; + + for (index = 0, length = documents.length; index < length; index += 1) { + iterator(documents[index]); + } +} + + +function load(input, options) { + var documents = loadDocuments(input, options), index, length; + + if (0 === documents.length) { + /*eslint-disable no-undefined*/ + return undefined; + } else if (1 === documents.length) { + return documents[0]; + } + throw new YAMLException('expected a single document in the stream, but found more'); +} + + +function safeLoadAll(input, output, options) { + loadAll(input, output, common.extend({ schema: DEFAULT_SAFE_SCHEMA }, options)); +} + + +function safeLoad(input, options) { + return load(input, common.extend({ schema: DEFAULT_SAFE_SCHEMA }, options)); +} + + +module.exports.loadAll = loadAll; +module.exports.load = load; +module.exports.safeLoadAll = safeLoadAll; +module.exports.safeLoad = safeLoad; + +},{"./common":2,"./exception":4,"./mark":6,"./schema/default_full":9,"./schema/default_safe":10}],6:[function(require,module,exports){ +'use strict'; + + +var common = require('./common'); + + +function Mark(name, buffer, position, line, column) { + this.name = name; + this.buffer = buffer; + this.position = position; + this.line = line; + this.column = column; +} + + +Mark.prototype.getSnippet = function getSnippet(indent, maxLength) { + var head, start, tail, end, snippet; + + if (!this.buffer) { + return null; + } + + indent = indent || 4; + maxLength = maxLength || 75; + + head = ''; + start = this.position; + + while (start > 0 && -1 === '\x00\r\n\x85\u2028\u2029'.indexOf(this.buffer.charAt(start - 1))) { + start -= 1; + if (this.position - start > (maxLength / 2 - 1)) { + head = ' ... '; + start += 5; + break; + } + } + + tail = ''; + end = this.position; + + while (end < this.buffer.length && -1 === '\x00\r\n\x85\u2028\u2029'.indexOf(this.buffer.charAt(end))) { + end += 1; + if (end - this.position > (maxLength / 2 - 1)) { + tail = ' ... '; + end -= 5; + break; + } + } + + snippet = this.buffer.slice(start, end); + + return common.repeat(' ', indent) + head + snippet + tail + '\n' + + common.repeat(' ', indent + this.position - start + head.length) + '^'; +}; + + +Mark.prototype.toString = function toString(compact) { + var snippet, where = ''; + + if (this.name) { + where += 'in "' + this.name + '" '; + } + + where += 'at line ' + (this.line + 1) + ', column ' + (this.column + 1); + + if (!compact) { + snippet = this.getSnippet(); + + if (snippet) { + where += ':\n' + snippet; + } + } + + return where; +}; + + +module.exports = Mark; + +},{"./common":2}],7:[function(require,module,exports){ +'use strict'; + +/*eslint-disable max-len*/ + +var common = require('./common'); +var YAMLException = require('./exception'); +var Type = require('./type'); + + +function compileList(schema, name, result) { + var exclude = []; + + schema.include.forEach(function (includedSchema) { + result = compileList(includedSchema, name, result); + }); + + schema[name].forEach(function (currentType) { + result.forEach(function (previousType, previousIndex) { + if (previousType.tag === currentType.tag) { + exclude.push(previousIndex); + } + }); + + result.push(currentType); + }); + + return result.filter(function (type, index) { + return -1 === exclude.indexOf(index); + }); +} + + +function compileMap(/* lists... */) { + var result = {}, index, length; + + function collectType(type) { + result[type.tag] = type; + } + + for (index = 0, length = arguments.length; index < length; index += 1) { + arguments[index].forEach(collectType); + } + + return result; +} + + +function Schema(definition) { + this.include = definition.include || []; + this.implicit = definition.implicit || []; + this.explicit = definition.explicit || []; + + this.implicit.forEach(function (type) { + if (type.loadKind && 'scalar' !== type.loadKind) { + throw new YAMLException('There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.'); + } + }); + + this.compiledImplicit = compileList(this, 'implicit', []); + this.compiledExplicit = compileList(this, 'explicit', []); + this.compiledTypeMap = compileMap(this.compiledImplicit, this.compiledExplicit); +} + + +Schema.DEFAULT = null; + + +Schema.create = function createSchema() { + var schemas, types; + + switch (arguments.length) { + case 1: + schemas = Schema.DEFAULT; + types = arguments[0]; + break; + + case 2: + schemas = arguments[0]; + types = arguments[1]; + break; + + default: + throw new YAMLException('Wrong number of arguments for Schema.create function'); + } + + schemas = common.toArray(schemas); + types = common.toArray(types); + + if (!schemas.every(function (schema) { return schema instanceof Schema; })) { + throw new YAMLException('Specified list of super schemas (or a single Schema object) contains a non-Schema object.'); + } + + if (!types.every(function (type) { return type instanceof Type; })) { + throw new YAMLException('Specified list of YAML types (or a single Type object) contains a non-Type object.'); + } + + return new Schema({ + include: schemas, + explicit: types + }); +}; + + +module.exports = Schema; + +},{"./common":2,"./exception":4,"./type":13}],8:[function(require,module,exports){ +// Standard YAML's Core schema. +// http://www.yaml.org/spec/1.2/spec.html#id2804923 +// +// NOTE: JS-YAML does not support schema-specific tag resolution restrictions. +// So, Core schema has no distinctions from JSON schema is JS-YAML. + + +'use strict'; + + +var Schema = require('../schema'); + + +module.exports = new Schema({ + include: [ + require('./json') + ] +}); + +},{"../schema":7,"./json":12}],9:[function(require,module,exports){ +// JS-YAML's default schema for `load` function. +// It is not described in the YAML specification. +// +// This schema is based on JS-YAML's default safe schema and includes +// JavaScript-specific types: !!js/undefined, !!js/regexp and !!js/function. +// +// Also this schema is used as default base schema at `Schema.create` function. + + +'use strict'; + + +var Schema = require('../schema'); + + +module.exports = Schema.DEFAULT = new Schema({ + include: [ + require('./default_safe') + ], + explicit: [ + require('../type/js/undefined'), + require('../type/js/regexp'), + require('../type/js/function') + ] +}); + +},{"../schema":7,"../type/js/function":18,"../type/js/regexp":19,"../type/js/undefined":20,"./default_safe":10}],10:[function(require,module,exports){ +// JS-YAML's default schema for `safeLoad` function. +// It is not described in the YAML specification. +// +// This schema is based on standard YAML's Core schema and includes most of +// extra types described at YAML tag repository. (http://yaml.org/type/) + + +'use strict'; + + +var Schema = require('../schema'); + + +module.exports = new Schema({ + include: [ + require('./core') + ], + implicit: [ + require('../type/timestamp'), + require('../type/merge') + ], + explicit: [ + require('../type/binary'), + require('../type/omap'), + require('../type/pairs'), + require('../type/set') + ] +}); + +},{"../schema":7,"../type/binary":14,"../type/merge":22,"../type/omap":24,"../type/pairs":25,"../type/set":27,"../type/timestamp":29,"./core":8}],11:[function(require,module,exports){ +// Standard YAML's Failsafe schema. +// http://www.yaml.org/spec/1.2/spec.html#id2802346 + + +'use strict'; + + +var Schema = require('../schema'); + + +module.exports = new Schema({ + explicit: [ + require('../type/str'), + require('../type/seq'), + require('../type/map') + ] +}); + +},{"../schema":7,"../type/map":21,"../type/seq":26,"../type/str":28}],12:[function(require,module,exports){ +// Standard YAML's JSON schema. +// http://www.yaml.org/spec/1.2/spec.html#id2803231 +// +// NOTE: JS-YAML does not support schema-specific tag resolution restrictions. +// So, this schema is not such strict as defined in the YAML specification. +// It allows numbers in binary notaion, use `Null` and `NULL` as `null`, etc. + + +'use strict'; + + +var Schema = require('../schema'); + + +module.exports = new Schema({ + include: [ + require('./failsafe') + ], + implicit: [ + require('../type/null'), + require('../type/bool'), + require('../type/int'), + require('../type/float') + ] +}); + +},{"../schema":7,"../type/bool":15,"../type/float":16,"../type/int":17,"../type/null":23,"./failsafe":11}],13:[function(require,module,exports){ +'use strict'; + +var YAMLException = require('./exception'); + +var TYPE_CONSTRUCTOR_OPTIONS = [ + 'kind', + 'resolve', + 'construct', + 'instanceOf', + 'predicate', + 'represent', + 'defaultStyle', + 'styleAliases' +]; + +var YAML_NODE_KINDS = [ + 'scalar', + 'sequence', + 'mapping' +]; + +function compileStyleAliases(map) { + var result = {}; + + if (null !== map) { + Object.keys(map).forEach(function (style) { + map[style].forEach(function (alias) { + result[String(alias)] = style; + }); + }); + } + + return result; +} + +function Type(tag, options) { + options = options || {}; + + Object.keys(options).forEach(function (name) { + if (-1 === TYPE_CONSTRUCTOR_OPTIONS.indexOf(name)) { + throw new YAMLException('Unknown option "' + name + '" is met in definition of "' + tag + '" YAML type.'); + } + }); + + // TODO: Add tag format check. + this.tag = tag; + this.kind = options['kind'] || null; + this.resolve = options['resolve'] || function () { return true; }; + this.construct = options['construct'] || function (data) { return data; }; + this.instanceOf = options['instanceOf'] || null; + this.predicate = options['predicate'] || null; + this.represent = options['represent'] || null; + this.defaultStyle = options['defaultStyle'] || null; + this.styleAliases = compileStyleAliases(options['styleAliases'] || null); + + if (-1 === YAML_NODE_KINDS.indexOf(this.kind)) { + throw new YAMLException('Unknown kind "' + this.kind + '" is specified for "' + tag + '" YAML type.'); + } +} + +module.exports = Type; + +},{"./exception":4}],14:[function(require,module,exports){ +'use strict'; + +/*eslint-disable no-bitwise*/ + +// A trick for browserified version. +// Since we make browserifier to ignore `buffer` module, NodeBuffer will be undefined +var NodeBuffer = require('buffer').Buffer; +var Type = require('../type'); + + +// [ 64, 65, 66 ] -> [ padding, CR, LF ] +var BASE64_MAP = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r'; + + +function resolveYamlBinary(data) { + if (null === data) { + return false; + } + + var code, idx, bitlen = 0, len = 0, max = data.length, map = BASE64_MAP; + + // Convert one by one. + for (idx = 0; idx < max; idx++) { + code = map.indexOf(data.charAt(idx)); + + // Skip CR/LF + if (code > 64) { continue; } + + // Fail on illegal characters + if (code < 0) { return false; } + + bitlen += 6; + } + + // If there are any bits left, source was corrupted + return (bitlen % 8) === 0; +} + +function constructYamlBinary(data) { + var code, idx, tailbits, + input = data.replace(/[\r\n=]/g, ''), // remove CR/LF & padding to simplify scan + max = input.length, + map = BASE64_MAP, + bits = 0, + result = []; + + // Collect by 6*4 bits (3 bytes) + + for (idx = 0; idx < max; idx++) { + if ((idx % 4 === 0) && idx) { + result.push((bits >> 16) & 0xFF); + result.push((bits >> 8) & 0xFF); + result.push(bits & 0xFF); + } + + bits = (bits << 6) | map.indexOf(input.charAt(idx)); + } + + // Dump tail + + tailbits = (max % 4) * 6; + + if (tailbits === 0) { + result.push((bits >> 16) & 0xFF); + result.push((bits >> 8) & 0xFF); + result.push(bits & 0xFF); + } else if (tailbits === 18) { + result.push((bits >> 10) & 0xFF); + result.push((bits >> 2) & 0xFF); + } else if (tailbits === 12) { + result.push((bits >> 4) & 0xFF); + } + + // Wrap into Buffer for NodeJS and leave Array for browser + if (NodeBuffer) { + return new NodeBuffer(result); + } + + return result; +} + +function representYamlBinary(object /*, style*/) { + var result = '', bits = 0, idx, tail, + max = object.length, + map = BASE64_MAP; + + // Convert every three bytes to 4 ASCII characters. + + for (idx = 0; idx < max; idx++) { + if ((idx % 3 === 0) && idx) { + result += map[(bits >> 18) & 0x3F]; + result += map[(bits >> 12) & 0x3F]; + result += map[(bits >> 6) & 0x3F]; + result += map[bits & 0x3F]; + } + + bits = (bits << 8) + object[idx]; + } + + // Dump tail + + tail = max % 3; + + if (tail === 0) { + result += map[(bits >> 18) & 0x3F]; + result += map[(bits >> 12) & 0x3F]; + result += map[(bits >> 6) & 0x3F]; + result += map[bits & 0x3F]; + } else if (tail === 2) { + result += map[(bits >> 10) & 0x3F]; + result += map[(bits >> 4) & 0x3F]; + result += map[(bits << 2) & 0x3F]; + result += map[64]; + } else if (tail === 1) { + result += map[(bits >> 2) & 0x3F]; + result += map[(bits << 4) & 0x3F]; + result += map[64]; + result += map[64]; + } + + return result; +} + +function isBinary(object) { + return NodeBuffer && NodeBuffer.isBuffer(object); +} + +module.exports = new Type('tag:yaml.org,2002:binary', { + kind: 'scalar', + resolve: resolveYamlBinary, + construct: constructYamlBinary, + predicate: isBinary, + represent: representYamlBinary +}); + +},{"../type":13,"buffer":30}],15:[function(require,module,exports){ +'use strict'; + +var Type = require('../type'); + +function resolveYamlBoolean(data) { + if (null === data) { + return false; + } + + var max = data.length; + + return (max === 4 && (data === 'true' || data === 'True' || data === 'TRUE')) || + (max === 5 && (data === 'false' || data === 'False' || data === 'FALSE')); +} + +function constructYamlBoolean(data) { + return data === 'true' || + data === 'True' || + data === 'TRUE'; +} + +function isBoolean(object) { + return '[object Boolean]' === Object.prototype.toString.call(object); +} + +module.exports = new Type('tag:yaml.org,2002:bool', { + kind: 'scalar', + resolve: resolveYamlBoolean, + construct: constructYamlBoolean, + predicate: isBoolean, + represent: { + lowercase: function (object) { return object ? 'true' : 'false'; }, + uppercase: function (object) { return object ? 'TRUE' : 'FALSE'; }, + camelcase: function (object) { return object ? 'True' : 'False'; } + }, + defaultStyle: 'lowercase' +}); + +},{"../type":13}],16:[function(require,module,exports){ +'use strict'; + +var common = require('../common'); +var Type = require('../type'); + +var YAML_FLOAT_PATTERN = new RegExp( + '^(?:[-+]?(?:[0-9][0-9_]*)\\.[0-9_]*(?:[eE][-+][0-9]+)?' + + '|\\.[0-9_]+(?:[eE][-+][0-9]+)?' + + '|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*' + + '|[-+]?\\.(?:inf|Inf|INF)' + + '|\\.(?:nan|NaN|NAN))$'); + +function resolveYamlFloat(data) { + if (null === data) { + return false; + } + + var value, sign, base, digits; + + if (!YAML_FLOAT_PATTERN.test(data)) { + return false; + } + return true; +} + +function constructYamlFloat(data) { + var value, sign, base, digits; + + value = data.replace(/_/g, '').toLowerCase(); + sign = '-' === value[0] ? -1 : 1; + digits = []; + + if (0 <= '+-'.indexOf(value[0])) { + value = value.slice(1); + } + + if ('.inf' === value) { + return (1 === sign) ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY; + + } else if ('.nan' === value) { + return NaN; + + } else if (0 <= value.indexOf(':')) { + value.split(':').forEach(function (v) { + digits.unshift(parseFloat(v, 10)); + }); + + value = 0.0; + base = 1; + + digits.forEach(function (d) { + value += d * base; + base *= 60; + }); + + return sign * value; + + } + return sign * parseFloat(value, 10); +} + +function representYamlFloat(object, style) { + if (isNaN(object)) { + switch (style) { + case 'lowercase': + return '.nan'; + case 'uppercase': + return '.NAN'; + case 'camelcase': + return '.NaN'; + } + } else if (Number.POSITIVE_INFINITY === object) { + switch (style) { + case 'lowercase': + return '.inf'; + case 'uppercase': + return '.INF'; + case 'camelcase': + return '.Inf'; + } + } else if (Number.NEGATIVE_INFINITY === object) { + switch (style) { + case 'lowercase': + return '-.inf'; + case 'uppercase': + return '-.INF'; + case 'camelcase': + return '-.Inf'; + } + } else if (common.isNegativeZero(object)) { + return '-0.0'; + } + return object.toString(10); +} + +function isFloat(object) { + return ('[object Number]' === Object.prototype.toString.call(object)) && + (0 !== object % 1 || common.isNegativeZero(object)); +} + +module.exports = new Type('tag:yaml.org,2002:float', { + kind: 'scalar', + resolve: resolveYamlFloat, + construct: constructYamlFloat, + predicate: isFloat, + represent: representYamlFloat, + defaultStyle: 'lowercase' +}); + +},{"../common":2,"../type":13}],17:[function(require,module,exports){ +'use strict'; + +var common = require('../common'); +var Type = require('../type'); + +function isHexCode(c) { + return ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) || + ((0x41/* A */ <= c) && (c <= 0x46/* F */)) || + ((0x61/* a */ <= c) && (c <= 0x66/* f */)); +} + +function isOctCode(c) { + return ((0x30/* 0 */ <= c) && (c <= 0x37/* 7 */)); +} + +function isDecCode(c) { + return ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)); +} + +function resolveYamlInteger(data) { + if (null === data) { + return false; + } + + var max = data.length, + index = 0, + hasDigits = false, + ch; + + if (!max) { return false; } + + ch = data[index]; + + // sign + if (ch === '-' || ch === '+') { + ch = data[++index]; + } + + if (ch === '0') { + // 0 + if (index + 1 === max) { return true; } + ch = data[++index]; + + // base 2, base 8, base 16 + + if (ch === 'b') { + // base 2 + index++; + + for (; index < max; index++) { + ch = data[index]; + if (ch === '_') { continue; } + if (ch !== '0' && ch !== '1') { + return false; + } + hasDigits = true; + } + return hasDigits; + } + + + if (ch === 'x') { + // base 16 + index++; + + for (; index < max; index++) { + ch = data[index]; + if (ch === '_') { continue; } + if (!isHexCode(data.charCodeAt(index))) { + return false; + } + hasDigits = true; + } + return hasDigits; + } + + // base 8 + for (; index < max; index++) { + ch = data[index]; + if (ch === '_') { continue; } + if (!isOctCode(data.charCodeAt(index))) { + return false; + } + hasDigits = true; + } + return hasDigits; + } + + // base 10 (except 0) or base 60 + + for (; index < max; index++) { + ch = data[index]; + if (ch === '_') { continue; } + if (ch === ':') { break; } + if (!isDecCode(data.charCodeAt(index))) { + return false; + } + hasDigits = true; + } + + if (!hasDigits) { return false; } + + // if !base60 - done; + if (ch !== ':') { return true; } + + // base60 almost not used, no needs to optimize + return /^(:[0-5]?[0-9])+$/.test(data.slice(index)); +} + +function constructYamlInteger(data) { + var value = data, sign = 1, ch, base, digits = []; + + if (value.indexOf('_') !== -1) { + value = value.replace(/_/g, ''); + } + + ch = value[0]; + + if (ch === '-' || ch === '+') { + if (ch === '-') { sign = -1; } + value = value.slice(1); + ch = value[0]; + } + + if ('0' === value) { + return 0; + } + + if (ch === '0') { + if (value[1] === 'b') { + return sign * parseInt(value.slice(2), 2); + } + if (value[1] === 'x') { + return sign * parseInt(value, 16); + } + return sign * parseInt(value, 8); + + } + + if (value.indexOf(':') !== -1) { + value.split(':').forEach(function (v) { + digits.unshift(parseInt(v, 10)); + }); + + value = 0; + base = 1; + + digits.forEach(function (d) { + value += (d * base); + base *= 60; + }); + + return sign * value; + + } + + return sign * parseInt(value, 10); +} + +function isInteger(object) { + return ('[object Number]' === Object.prototype.toString.call(object)) && + (0 === object % 1 && !common.isNegativeZero(object)); +} + +module.exports = new Type('tag:yaml.org,2002:int', { + kind: 'scalar', + resolve: resolveYamlInteger, + construct: constructYamlInteger, + predicate: isInteger, + represent: { + binary: function (object) { return '0b' + object.toString(2); }, + octal: function (object) { return '0' + object.toString(8); }, + decimal: function (object) { return object.toString(10); }, + hexadecimal: function (object) { return '0x' + object.toString(16).toUpperCase(); } + }, + defaultStyle: 'decimal', + styleAliases: { + binary: [ 2, 'bin' ], + octal: [ 8, 'oct' ], + decimal: [ 10, 'dec' ], + hexadecimal: [ 16, 'hex' ] + } +}); + +},{"../common":2,"../type":13}],18:[function(require,module,exports){ +'use strict'; + +var esprima; + +// Browserified version does not have esprima +// +// 1. For node.js just require module as deps +// 2. For browser try to require mudule via external AMD system. +// If not found - try to fallback to window.esprima. If not +// found too - then fail to parse. +// +try { + esprima = require('esprima'); +} catch (_) { + /*global window */ + if (typeof window !== 'undefined') { esprima = window.esprima; } +} + +var Type = require('../../type'); + +function resolveJavascriptFunction(data) { + if (null === data) { + return false; + } + + try { + var source = '(' + data + ')', + ast = esprima.parse(source, { range: true }), + params = [], + body; + + if ('Program' !== ast.type || + 1 !== ast.body.length || + 'ExpressionStatement' !== ast.body[0].type || + 'FunctionExpression' !== ast.body[0].expression.type) { + return false; + } + + return true; + } catch (err) { + return false; + } +} + +function constructJavascriptFunction(data) { + /*jslint evil:true*/ + + var source = '(' + data + ')', + ast = esprima.parse(source, { range: true }), + params = [], + body; + + if ('Program' !== ast.type || + 1 !== ast.body.length || + 'ExpressionStatement' !== ast.body[0].type || + 'FunctionExpression' !== ast.body[0].expression.type) { + throw new Error('Failed to resolve function'); + } + + ast.body[0].expression.params.forEach(function (param) { + params.push(param.name); + }); + + body = ast.body[0].expression.body.range; + + // Esprima's ranges include the first '{' and the last '}' characters on + // function expressions. So cut them out. + /*eslint-disable no-new-func*/ + return new Function(params, source.slice(body[0] + 1, body[1] - 1)); +} + +function representJavascriptFunction(object /*, style*/) { + return object.toString(); +} + +function isFunction(object) { + return '[object Function]' === Object.prototype.toString.call(object); +} + +module.exports = new Type('tag:yaml.org,2002:js/function', { + kind: 'scalar', + resolve: resolveJavascriptFunction, + construct: constructJavascriptFunction, + predicate: isFunction, + represent: representJavascriptFunction +}); + +},{"../../type":13,"esprima":"esprima"}],19:[function(require,module,exports){ +'use strict'; + +var Type = require('../../type'); + +function resolveJavascriptRegExp(data) { + if (null === data) { + return false; + } + + if (0 === data.length) { + return false; + } + + var regexp = data, + tail = /\/([gim]*)$/.exec(data), + modifiers = ''; + + // if regexp starts with '/' it can have modifiers and must be properly closed + // `/foo/gim` - modifiers tail can be maximum 3 chars + if ('/' === regexp[0]) { + if (tail) { + modifiers = tail[1]; + } + + if (modifiers.length > 3) { return false; } + // if expression starts with /, is should be properly terminated + if (regexp[regexp.length - modifiers.length - 1] !== '/') { return false; } + + regexp = regexp.slice(1, regexp.length - modifiers.length - 1); + } + + try { + var dummy = new RegExp(regexp, modifiers); + return true; + } catch (error) { + return false; + } +} + +function constructJavascriptRegExp(data) { + var regexp = data, + tail = /\/([gim]*)$/.exec(data), + modifiers = ''; + + // `/foo/gim` - tail can be maximum 4 chars + if ('/' === regexp[0]) { + if (tail) { + modifiers = tail[1]; + } + regexp = regexp.slice(1, regexp.length - modifiers.length - 1); + } + + return new RegExp(regexp, modifiers); +} + +function representJavascriptRegExp(object /*, style*/) { + var result = '/' + object.source + '/'; + + if (object.global) { + result += 'g'; + } + + if (object.multiline) { + result += 'm'; + } + + if (object.ignoreCase) { + result += 'i'; + } + + return result; +} + +function isRegExp(object) { + return '[object RegExp]' === Object.prototype.toString.call(object); +} + +module.exports = new Type('tag:yaml.org,2002:js/regexp', { + kind: 'scalar', + resolve: resolveJavascriptRegExp, + construct: constructJavascriptRegExp, + predicate: isRegExp, + represent: representJavascriptRegExp +}); + +},{"../../type":13}],20:[function(require,module,exports){ +'use strict'; + +var Type = require('../../type'); + +function resolveJavascriptUndefined() { + return true; +} + +function constructJavascriptUndefined() { + /*eslint-disable no-undefined*/ + return undefined; +} + +function representJavascriptUndefined() { + return ''; +} + +function isUndefined(object) { + return 'undefined' === typeof object; +} + +module.exports = new Type('tag:yaml.org,2002:js/undefined', { + kind: 'scalar', + resolve: resolveJavascriptUndefined, + construct: constructJavascriptUndefined, + predicate: isUndefined, + represent: representJavascriptUndefined +}); + +},{"../../type":13}],21:[function(require,module,exports){ +'use strict'; + +var Type = require('../type'); + +module.exports = new Type('tag:yaml.org,2002:map', { + kind: 'mapping', + construct: function (data) { return null !== data ? data : {}; } +}); + +},{"../type":13}],22:[function(require,module,exports){ +'use strict'; + +var Type = require('../type'); + +function resolveYamlMerge(data) { + return '<<' === data || null === data; +} + +module.exports = new Type('tag:yaml.org,2002:merge', { + kind: 'scalar', + resolve: resolveYamlMerge +}); + +},{"../type":13}],23:[function(require,module,exports){ +'use strict'; + +var Type = require('../type'); + +function resolveYamlNull(data) { + if (null === data) { + return true; + } + + var max = data.length; + + return (max === 1 && data === '~') || + (max === 4 && (data === 'null' || data === 'Null' || data === 'NULL')); +} + +function constructYamlNull() { + return null; +} + +function isNull(object) { + return null === object; +} + +module.exports = new Type('tag:yaml.org,2002:null', { + kind: 'scalar', + resolve: resolveYamlNull, + construct: constructYamlNull, + predicate: isNull, + represent: { + canonical: function () { return '~'; }, + lowercase: function () { return 'null'; }, + uppercase: function () { return 'NULL'; }, + camelcase: function () { return 'Null'; } + }, + defaultStyle: 'lowercase' +}); + +},{"../type":13}],24:[function(require,module,exports){ +'use strict'; + +var Type = require('../type'); + +var _hasOwnProperty = Object.prototype.hasOwnProperty; +var _toString = Object.prototype.toString; + +function resolveYamlOmap(data) { + if (null === data) { + return true; + } + + var objectKeys = [], index, length, pair, pairKey, pairHasKey, + object = data; + + for (index = 0, length = object.length; index < length; index += 1) { + pair = object[index]; + pairHasKey = false; + + if ('[object Object]' !== _toString.call(pair)) { + return false; + } + + for (pairKey in pair) { + if (_hasOwnProperty.call(pair, pairKey)) { + if (!pairHasKey) { + pairHasKey = true; + } else { + return false; + } + } + } + + if (!pairHasKey) { + return false; + } + + if (-1 === objectKeys.indexOf(pairKey)) { + objectKeys.push(pairKey); + } else { + return false; + } + } + + return true; +} + +function constructYamlOmap(data) { + return null !== data ? data : []; +} + +module.exports = new Type('tag:yaml.org,2002:omap', { + kind: 'sequence', + resolve: resolveYamlOmap, + construct: constructYamlOmap +}); + +},{"../type":13}],25:[function(require,module,exports){ +'use strict'; + +var Type = require('../type'); + +var _toString = Object.prototype.toString; + +function resolveYamlPairs(data) { + if (null === data) { + return true; + } + + var index, length, pair, keys, result, + object = data; + + result = new Array(object.length); + + for (index = 0, length = object.length; index < length; index += 1) { + pair = object[index]; + + if ('[object Object]' !== _toString.call(pair)) { + return false; + } + + keys = Object.keys(pair); + + if (1 !== keys.length) { + return false; + } + + result[index] = [ keys[0], pair[keys[0]] ]; + } + + return true; +} + +function constructYamlPairs(data) { + if (null === data) { + return []; + } + + var index, length, pair, keys, result, + object = data; + + result = new Array(object.length); + + for (index = 0, length = object.length; index < length; index += 1) { + pair = object[index]; + + keys = Object.keys(pair); + + result[index] = [ keys[0], pair[keys[0]] ]; + } + + return result; +} + +module.exports = new Type('tag:yaml.org,2002:pairs', { + kind: 'sequence', + resolve: resolveYamlPairs, + construct: constructYamlPairs +}); + +},{"../type":13}],26:[function(require,module,exports){ +'use strict'; + +var Type = require('../type'); + +module.exports = new Type('tag:yaml.org,2002:seq', { + kind: 'sequence', + construct: function (data) { return null !== data ? data : []; } +}); + +},{"../type":13}],27:[function(require,module,exports){ +'use strict'; + +var Type = require('../type'); + +var _hasOwnProperty = Object.prototype.hasOwnProperty; + +function resolveYamlSet(data) { + if (null === data) { + return true; + } + + var key, object = data; + + for (key in object) { + if (_hasOwnProperty.call(object, key)) { + if (null !== object[key]) { + return false; + } + } + } + + return true; +} + +function constructYamlSet(data) { + return null !== data ? data : {}; +} + +module.exports = new Type('tag:yaml.org,2002:set', { + kind: 'mapping', + resolve: resolveYamlSet, + construct: constructYamlSet +}); + +},{"../type":13}],28:[function(require,module,exports){ +'use strict'; + +var Type = require('../type'); + +module.exports = new Type('tag:yaml.org,2002:str', { + kind: 'scalar', + construct: function (data) { return null !== data ? data : ''; } +}); + +},{"../type":13}],29:[function(require,module,exports){ +'use strict'; + +var Type = require('../type'); + +var YAML_TIMESTAMP_REGEXP = new RegExp( + '^([0-9][0-9][0-9][0-9])' + // [1] year + '-([0-9][0-9]?)' + // [2] month + '-([0-9][0-9]?)' + // [3] day + '(?:(?:[Tt]|[ \\t]+)' + // ... + '([0-9][0-9]?)' + // [4] hour + ':([0-9][0-9])' + // [5] minute + ':([0-9][0-9])' + // [6] second + '(?:\\.([0-9]*))?' + // [7] fraction + '(?:[ \\t]*(Z|([-+])([0-9][0-9]?)' + // [8] tz [9] tz_sign [10] tz_hour + '(?::([0-9][0-9]))?))?)?$'); // [11] tz_minute + +function resolveYamlTimestamp(data) { + if (null === data) { + return false; + } + + var match, year, month, day, hour, minute, second, fraction = 0, + delta = null, tz_hour, tz_minute, date; + + match = YAML_TIMESTAMP_REGEXP.exec(data); + + if (null === match) { + return false; + } + + return true; +} + +function constructYamlTimestamp(data) { + var match, year, month, day, hour, minute, second, fraction = 0, + delta = null, tz_hour, tz_minute, date; + + match = YAML_TIMESTAMP_REGEXP.exec(data); + + if (null === match) { + throw new Error('Date resolve error'); + } + + // match: [1] year [2] month [3] day + + year = +(match[1]); + month = +(match[2]) - 1; // JS month starts with 0 + day = +(match[3]); + + if (!match[4]) { // no hour + return new Date(Date.UTC(year, month, day)); + } + + // match: [4] hour [5] minute [6] second [7] fraction + + hour = +(match[4]); + minute = +(match[5]); + second = +(match[6]); + + if (match[7]) { + fraction = match[7].slice(0, 3); + while (fraction.length < 3) { // milli-seconds + fraction += '0'; + } + fraction = +fraction; + } + + // match: [8] tz [9] tz_sign [10] tz_hour [11] tz_minute + + if (match[9]) { + tz_hour = +(match[10]); + tz_minute = +(match[11] || 0); + delta = (tz_hour * 60 + tz_minute) * 60000; // delta in mili-seconds + if ('-' === match[9]) { + delta = -delta; + } + } + + date = new Date(Date.UTC(year, month, day, hour, minute, second, fraction)); + + if (delta) { + date.setTime(date.getTime() - delta); + } + + return date; +} + +function representYamlTimestamp(object /*, style*/) { + return object.toISOString(); +} + +module.exports = new Type('tag:yaml.org,2002:timestamp', { + kind: 'scalar', + resolve: resolveYamlTimestamp, + construct: constructYamlTimestamp, + instanceOf: Date, + represent: representYamlTimestamp +}); + +},{"../type":13}],30:[function(require,module,exports){ + +},{}],"/":[function(require,module,exports){ +'use strict'; + + +var yaml = require('./lib/js-yaml.js'); + + +module.exports = yaml; + +},{"./lib/js-yaml.js":1}]},{},[])("/") +}); \ No newline at end of file diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/examples/custom_types.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/examples/custom_types.js new file mode 100644 index 00000000..b5c7b9f7 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/examples/custom_types.js @@ -0,0 +1,103 @@ +'use strict'; + +/*eslint-disable no-console*/ + +var fs = require('fs'); +var path = require('path'); +var util = require('util'); +var yaml = require('../lib/js-yaml'); + + +// Let's define a couple of classes. + +function Point(x, y, z) { + this.klass = 'Point'; + this.x = x; + this.y = y; + this.z = z; +} + + +function Space(height, width, points) { + if (points) { + if (!points.every(function (point) { return point instanceof Point; })) { + throw new Error('A non-Point inside a points array!'); + } + } + + this.klass = 'Space'; + this.height = height; + this.width = width; + this.points = points; +} + + +// Then define YAML types to load and dump our Point/Space objects. + +var PointYamlType = new yaml.Type('!point', { + // Loader must parse sequence nodes only for this type (i.e. arrays in JS terminology). + // Other available kinds are 'scalar' (string) and 'mapping' (object). + // http://www.yaml.org/spec/1.2/spec.html#kind// + kind: 'sequence', + + // Loader must check if the input object is suitable for this type. + resolve: function (data) { + // `data` may be either: + // - Null in case of an "empty node" (http://www.yaml.org/spec/1.2/spec.html#id2786563) + // - Array since we specified `kind` to 'sequence' + return data !== null && data.length === 3; + }, + + // If a node is resolved, use it to create a Point instance. + construct: function (data) { + return new Point(data[0], data[1], data[2]); + }, + + // Dumper must process instances of Point by rules of this YAML type. + instanceOf: Point, + + // Dumper must represent Point objects as three-element sequence in YAML. + represent: function (point) { + return [ point.x, point.y, point.z ]; + } +}); + + +var SpaceYamlType = new yaml.Type('!space', { + kind: 'mapping', + construct: function (data) { + data = data || {}; // in case of empty node + return new Space(data.height || 0, data.width || 0, data.points || []); + }, + instanceOf: Space + // `represent` is omitted here. So, Space objects will be dumped as is. + // That is regular mapping with three key-value pairs but with !space tag. +}); + + +// After our types are defined, it's time to join them into a schema. + +var SPACE_SCHEMA = yaml.Schema.create([ SpaceYamlType, PointYamlType ]); + +// do not execute the following if file is required (http://stackoverflow.com/a/6398335) +if (require.main === module) { + + // And read a document using that schema. + fs.readFile(path.join(__dirname, 'custom_types.yml'), 'utf8', function (error, data) { + var loaded; + + if (!error) { + loaded = yaml.load(data, { schema: SPACE_SCHEMA }); + console.log(util.inspect(loaded, false, 20, true)); + } else { + console.error(error.stack || error.message || String(error)); + } + }); +} + +// There are some exports to play with this example interactively. +module.exports.Point = Point; +module.exports.Space = Space; +module.exports.PointYamlType = PointYamlType; +module.exports.SpaceYamlType = SpaceYamlType; +module.exports.SPACE_SCHEMA = SPACE_SCHEMA; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/examples/custom_types.yml b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/examples/custom_types.yml new file mode 100644 index 00000000..f10d4e25 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/examples/custom_types.yml @@ -0,0 +1,18 @@ +subject: Custom types in JS-YAML +spaces: +- !space + height: 1000 + width: 1000 + points: + - !point [ 10, 43, 23 ] + - !point [ 165, 0, 50 ] + - !point [ 100, 100, 100 ] + +- !space + height: 64 + width: 128 + points: + - !point [ 12, 43, 0 ] + - !point [ 1, 4, 90 ] + +- !space # An empty space diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/examples/dumper.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/examples/dumper.js new file mode 100644 index 00000000..d2379495 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/examples/dumper.js @@ -0,0 +1,32 @@ +'use strict'; + +/*eslint-disable no-console*/ + +var yaml = require('../lib/js-yaml'); +var object = require('./dumper.json'); + + +console.log(yaml.dump(object, { + flowLevel: 3, + styles: { + '!!int' : 'hexadecimal', + '!!null' : 'camelcase' + } +})); + + +// Output: +//============================================================================== +// name: Wizzard +// level: 0x11 +// sanity: Null +// inventory: +// - name: Hat +// features: [magic, pointed] +// traits: {} +// - name: Staff +// features: [] +// traits: {damage: 0xA} +// - name: Cloak +// features: [old] +// traits: {defence: 0x0, comfort: 0x3} diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/examples/dumper.json b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/examples/dumper.json new file mode 100644 index 00000000..9f54c053 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/examples/dumper.json @@ -0,0 +1,22 @@ +{ + "name" : "Wizzard", + "level" : 17, + "sanity" : null, + "inventory" : [ + { + "name" : "Hat", + "features" : [ "magic", "pointed" ], + "traits" : {} + }, + { + "name" : "Staff", + "features" : [], + "traits" : { "damage" : 10 } + }, + { + "name" : "Cloak", + "features" : [ "old" ], + "traits" : { "defence" : 0, "comfort" : 3 } + } + ] +} diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/examples/sample_document.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/examples/sample_document.js new file mode 100644 index 00000000..3204fa50 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/examples/sample_document.js @@ -0,0 +1,19 @@ +'use strict'; + +/*eslint-disable no-console*/ + +var fs = require('fs'); +var path = require('path'); +var util = require('util'); +var yaml = require('../lib/js-yaml'); + + +try { + var filename = path.join(__dirname, 'sample_document.yml'), + contents = fs.readFileSync(filename, 'utf8'), + data = yaml.load(contents); + + console.log(util.inspect(data, false, 10, true)); +} catch (err) { + console.log(err.stack || String(err)); +} diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/examples/sample_document.yml b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/examples/sample_document.yml new file mode 100644 index 00000000..4479ee9c --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/examples/sample_document.yml @@ -0,0 +1,197 @@ +--- +# Collection Types ############################################################# +################################################################################ + +# http://yaml.org/type/map.html -----------------------------------------------# + +map: + # Unordered set of key: value pairs. + Block style: !!map + Clark : Evans + Ingy : döt Net + Oren : Ben-Kiki + Flow style: !!map { Clark: Evans, Ingy: döt Net, Oren: Ben-Kiki } + +# http://yaml.org/type/omap.html ----------------------------------------------# + +omap: + # Explicitly typed ordered map (dictionary). + Bestiary: !!omap + - aardvark: African pig-like ant eater. Ugly. + - anteater: South-American ant eater. Two species. + - anaconda: South-American constrictor snake. Scaly. + # Etc. + # Flow style + Numbers: !!omap [ one: 1, two: 2, three : 3 ] + +# http://yaml.org/type/pairs.html ---------------------------------------------# + +pairs: + # Explicitly typed pairs. + Block tasks: !!pairs + - meeting: with team. + - meeting: with boss. + - break: lunch. + - meeting: with client. + Flow tasks: !!pairs [ meeting: with team, meeting: with boss ] + +# http://yaml.org/type/set.html -----------------------------------------------# + +set: + # Explicitly typed set. + baseball players: !!set + ? Mark McGwire + ? Sammy Sosa + ? Ken Griffey + # Flow style + baseball teams: !!set { Boston Red Sox, Detroit Tigers, New York Yankees } + +# http://yaml.org/type/seq.html -----------------------------------------------# + +seq: + # Ordered sequence of nodes + Block style: !!seq + - Mercury # Rotates - no light/dark sides. + - Venus # Deadliest. Aptly named. + - Earth # Mostly dirt. + - Mars # Seems empty. + - Jupiter # The king. + - Saturn # Pretty. + - Uranus # Where the sun hardly shines. + - Neptune # Boring. No rings. + - Pluto # You call this a planet? + Flow style: !!seq [ Mercury, Venus, Earth, Mars, # Rocks + Jupiter, Saturn, Uranus, Neptune, # Gas + Pluto ] # Overrated + + +# Scalar Types ################################################################# +################################################################################ + +# http://yaml.org/type/binary.html --------------------------------------------# + +binary: + canonical: !!binary "\ + R0lGODlhDAAMAIQAAP//9/X17unp5WZmZgAAAOfn515eXvPz7Y6OjuDg4J+fn5\ + OTk6enp56enmlpaWNjY6Ojo4SEhP/++f/++f/++f/++f/++f/++f/++f/++f/+\ + +f/++f/++f/++f/++f/++SH+Dk1hZGUgd2l0aCBHSU1QACwAAAAADAAMAAAFLC\ + AgjoEwnuNAFOhpEMTRiggcz4BNJHrv/zCFcLiwMWYNG84BwwEeECcgggoBADs=" + generic: !!binary | + R0lGODlhDAAMAIQAAP//9/X17unp5WZmZgAAAOfn515eXvPz7Y6OjuDg4J+fn5 + OTk6enp56enmlpaWNjY6Ojo4SEhP/++f/++f/++f/++f/++f/++f/++f/++f/+ + +f/++f/++f/++f/++f/++SH+Dk1hZGUgd2l0aCBHSU1QACwAAAAADAAMAAAFLC + AgjoEwnuNAFOhpEMTRiggcz4BNJHrv/zCFcLiwMWYNG84BwwEeECcgggoBADs= + description: + The binary value above is a tiny arrow encoded as a gif image. + +# http://yaml.org/type/bool.html ----------------------------------------------# + +bool: + - true + - True + - TRUE + - false + - False + - FALSE + +# http://yaml.org/type/float.html ---------------------------------------------# + +float: + canonical: 6.8523015e+5 + exponentioal: 685.230_15e+03 + fixed: 685_230.15 + sexagesimal: 190:20:30.15 + negative infinity: -.inf + not a number: .NaN + +# http://yaml.org/type/int.html -----------------------------------------------# + +int: + canonical: 685230 + decimal: +685_230 + octal: 02472256 + hexadecimal: 0x_0A_74_AE + binary: 0b1010_0111_0100_1010_1110 + sexagesimal: 190:20:30 + +# http://yaml.org/type/merge.html ---------------------------------------------# + +merge: + - &CENTER { x: 1, y: 2 } + - &LEFT { x: 0, y: 2 } + - &BIG { r: 10 } + - &SMALL { r: 1 } + + # All the following maps are equal: + + - # Explicit keys + x: 1 + y: 2 + r: 10 + label: nothing + + - # Merge one map + << : *CENTER + r: 10 + label: center + + - # Merge multiple maps + << : [ *CENTER, *BIG ] + label: center/big + + - # Override + << : [ *BIG, *LEFT, *SMALL ] + x: 1 + label: big/left/small + +# http://yaml.org/type/null.html ----------------------------------------------# + +null: + # This mapping has four keys, + # one has a value. + empty: + canonical: ~ + english: null + ~: null key + # This sequence has five + # entries, two have values. + sparse: + - ~ + - 2nd entry + - + - 4th entry + - Null + +# http://yaml.org/type/str.html -----------------------------------------------# + +string: abcd + +# http://yaml.org/type/timestamp.html -----------------------------------------# + +timestamp: + canonical: 2001-12-15T02:59:43.1Z + valid iso8601: 2001-12-14t21:59:43.10-05:00 + space separated: 2001-12-14 21:59:43.10 -5 + no time zone (Z): 2001-12-15 2:59:43.10 + date (00:00:00Z): 2002-12-14 + + +# JavaScript Specific Types #################################################### +################################################################################ + +# https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/RegExp + +regexp: + simple: !!js/regexp foobar + modifiers: !!js/regexp /foobar/mi + +# https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/undefined + +undefined: !!js/undefined ~ + +# https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function + +function: !!js/function > + function foobar() { + return 'Wow! JS-YAML Rocks!'; + } diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/index.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/index.js new file mode 100644 index 00000000..13744352 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/index.js @@ -0,0 +1,7 @@ +'use strict'; + + +var yaml = require('./lib/js-yaml.js'); + + +module.exports = yaml; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml.js new file mode 100644 index 00000000..842104ec --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml.js @@ -0,0 +1,39 @@ +'use strict'; + + +var loader = require('./js-yaml/loader'); +var dumper = require('./js-yaml/dumper'); + + +function deprecated(name) { + return function () { + throw new Error('Function ' + name + ' is deprecated and cannot be used.'); + }; +} + + +module.exports.Type = require('./js-yaml/type'); +module.exports.Schema = require('./js-yaml/schema'); +module.exports.FAILSAFE_SCHEMA = require('./js-yaml/schema/failsafe'); +module.exports.JSON_SCHEMA = require('./js-yaml/schema/json'); +module.exports.CORE_SCHEMA = require('./js-yaml/schema/core'); +module.exports.DEFAULT_SAFE_SCHEMA = require('./js-yaml/schema/default_safe'); +module.exports.DEFAULT_FULL_SCHEMA = require('./js-yaml/schema/default_full'); +module.exports.load = loader.load; +module.exports.loadAll = loader.loadAll; +module.exports.safeLoad = loader.safeLoad; +module.exports.safeLoadAll = loader.safeLoadAll; +module.exports.dump = dumper.dump; +module.exports.safeDump = dumper.safeDump; +module.exports.YAMLException = require('./js-yaml/exception'); + +// Deprecared schema names from JS-YAML 2.0.x +module.exports.MINIMAL_SCHEMA = require('./js-yaml/schema/failsafe'); +module.exports.SAFE_SCHEMA = require('./js-yaml/schema/default_safe'); +module.exports.DEFAULT_SCHEMA = require('./js-yaml/schema/default_full'); + +// Deprecated functions from JS-YAML 1.x.x +module.exports.scan = deprecated('scan'); +module.exports.parse = deprecated('parse'); +module.exports.compose = deprecated('compose'); +module.exports.addConstructor = deprecated('addConstructor'); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/common.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/common.js new file mode 100644 index 00000000..197eb248 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/common.js @@ -0,0 +1,61 @@ +'use strict'; + + +function isNothing(subject) { + return (typeof subject === 'undefined') || (null === subject); +} + + +function isObject(subject) { + return (typeof subject === 'object') && (null !== subject); +} + + +function toArray(sequence) { + if (Array.isArray(sequence)) { + return sequence; + } else if (isNothing(sequence)) { + return []; + } + return [ sequence ]; +} + + +function extend(target, source) { + var index, length, key, sourceKeys; + + if (source) { + sourceKeys = Object.keys(source); + + for (index = 0, length = sourceKeys.length; index < length; index += 1) { + key = sourceKeys[index]; + target[key] = source[key]; + } + } + + return target; +} + + +function repeat(string, count) { + var result = '', cycle; + + for (cycle = 0; cycle < count; cycle += 1) { + result += string; + } + + return result; +} + + +function isNegativeZero(number) { + return (0 === number) && (Number.NEGATIVE_INFINITY === 1 / number); +} + + +module.exports.isNothing = isNothing; +module.exports.isObject = isObject; +module.exports.toArray = toArray; +module.exports.repeat = repeat; +module.exports.isNegativeZero = isNegativeZero; +module.exports.extend = extend; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/dumper.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/dumper.js new file mode 100644 index 00000000..fabc0c3c --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/dumper.js @@ -0,0 +1,842 @@ +'use strict'; + +/*eslint-disable no-use-before-define*/ + +var common = require('./common'); +var YAMLException = require('./exception'); +var DEFAULT_FULL_SCHEMA = require('./schema/default_full'); +var DEFAULT_SAFE_SCHEMA = require('./schema/default_safe'); + +var _toString = Object.prototype.toString; +var _hasOwnProperty = Object.prototype.hasOwnProperty; + +var CHAR_TAB = 0x09; /* Tab */ +var CHAR_LINE_FEED = 0x0A; /* LF */ +var CHAR_CARRIAGE_RETURN = 0x0D; /* CR */ +var CHAR_SPACE = 0x20; /* Space */ +var CHAR_EXCLAMATION = 0x21; /* ! */ +var CHAR_DOUBLE_QUOTE = 0x22; /* " */ +var CHAR_SHARP = 0x23; /* # */ +var CHAR_PERCENT = 0x25; /* % */ +var CHAR_AMPERSAND = 0x26; /* & */ +var CHAR_SINGLE_QUOTE = 0x27; /* ' */ +var CHAR_ASTERISK = 0x2A; /* * */ +var CHAR_COMMA = 0x2C; /* , */ +var CHAR_MINUS = 0x2D; /* - */ +var CHAR_COLON = 0x3A; /* : */ +var CHAR_GREATER_THAN = 0x3E; /* > */ +var CHAR_QUESTION = 0x3F; /* ? */ +var CHAR_COMMERCIAL_AT = 0x40; /* @ */ +var CHAR_LEFT_SQUARE_BRACKET = 0x5B; /* [ */ +var CHAR_RIGHT_SQUARE_BRACKET = 0x5D; /* ] */ +var CHAR_GRAVE_ACCENT = 0x60; /* ` */ +var CHAR_LEFT_CURLY_BRACKET = 0x7B; /* { */ +var CHAR_VERTICAL_LINE = 0x7C; /* | */ +var CHAR_RIGHT_CURLY_BRACKET = 0x7D; /* } */ + +var ESCAPE_SEQUENCES = {}; + +ESCAPE_SEQUENCES[0x00] = '\\0'; +ESCAPE_SEQUENCES[0x07] = '\\a'; +ESCAPE_SEQUENCES[0x08] = '\\b'; +ESCAPE_SEQUENCES[0x09] = '\\t'; +ESCAPE_SEQUENCES[0x0A] = '\\n'; +ESCAPE_SEQUENCES[0x0B] = '\\v'; +ESCAPE_SEQUENCES[0x0C] = '\\f'; +ESCAPE_SEQUENCES[0x0D] = '\\r'; +ESCAPE_SEQUENCES[0x1B] = '\\e'; +ESCAPE_SEQUENCES[0x22] = '\\"'; +ESCAPE_SEQUENCES[0x5C] = '\\\\'; +ESCAPE_SEQUENCES[0x85] = '\\N'; +ESCAPE_SEQUENCES[0xA0] = '\\_'; +ESCAPE_SEQUENCES[0x2028] = '\\L'; +ESCAPE_SEQUENCES[0x2029] = '\\P'; + +var DEPRECATED_BOOLEANS_SYNTAX = [ + 'y', 'Y', 'yes', 'Yes', 'YES', 'on', 'On', 'ON', + 'n', 'N', 'no', 'No', 'NO', 'off', 'Off', 'OFF' +]; + +function compileStyleMap(schema, map) { + var result, keys, index, length, tag, style, type; + + if (null === map) { + return {}; + } + + result = {}; + keys = Object.keys(map); + + for (index = 0, length = keys.length; index < length; index += 1) { + tag = keys[index]; + style = String(map[tag]); + + if ('!!' === tag.slice(0, 2)) { + tag = 'tag:yaml.org,2002:' + tag.slice(2); + } + + type = schema.compiledTypeMap[tag]; + + if (type && _hasOwnProperty.call(type.styleAliases, style)) { + style = type.styleAliases[style]; + } + + result[tag] = style; + } + + return result; +} + +function encodeHex(character) { + var string, handle, length; + + string = character.toString(16).toUpperCase(); + + if (character <= 0xFF) { + handle = 'x'; + length = 2; + } else if (character <= 0xFFFF) { + handle = 'u'; + length = 4; + } else if (character <= 0xFFFFFFFF) { + handle = 'U'; + length = 8; + } else { + throw new YAMLException('code point within a string may not be greater than 0xFFFFFFFF'); + } + + return '\\' + handle + common.repeat('0', length - string.length) + string; +} + +function State(options) { + this.schema = options['schema'] || DEFAULT_FULL_SCHEMA; + this.indent = Math.max(1, (options['indent'] || 2)); + this.skipInvalid = options['skipInvalid'] || false; + this.flowLevel = (common.isNothing(options['flowLevel']) ? -1 : options['flowLevel']); + this.styleMap = compileStyleMap(this.schema, options['styles'] || null); + this.sortKeys = options['sortKeys'] || false; + + this.implicitTypes = this.schema.compiledImplicit; + this.explicitTypes = this.schema.compiledExplicit; + + this.tag = null; + this.result = ''; + + this.duplicates = []; + this.usedDuplicates = null; +} + +function indentString(string, spaces) { + var ind = common.repeat(' ', spaces), + position = 0, + next = -1, + result = '', + line, + length = string.length; + + while (position < length) { + next = string.indexOf('\n', position); + if (next === -1) { + line = string.slice(position); + position = length; + } else { + line = string.slice(position, next + 1); + position = next + 1; + } + if (line.length && line !== '\n') { + result += ind; + } + result += line; + } + + return result; +} + +function generateNextLine(state, level) { + return '\n' + common.repeat(' ', state.indent * level); +} + +function testImplicitResolving(state, str) { + var index, length, type; + + for (index = 0, length = state.implicitTypes.length; index < length; index += 1) { + type = state.implicitTypes[index]; + + if (type.resolve(str)) { + return true; + } + } + + return false; +} + +function StringBuilder(source) { + this.source = source; + this.result = ''; + this.checkpoint = 0; +} + +StringBuilder.prototype.takeUpTo = function (position) { + var er; + + if (position < this.checkpoint) { + er = new Error('position should be > checkpoint'); + er.position = position; + er.checkpoint = this.checkpoint; + throw er; + } + + this.result += this.source.slice(this.checkpoint, position); + this.checkpoint = position; + return this; +}; + +StringBuilder.prototype.escapeChar = function () { + var character, esc; + + character = this.source.charCodeAt(this.checkpoint); + esc = ESCAPE_SEQUENCES[character] || encodeHex(character); + this.result += esc; + this.checkpoint += 1; + + return this; +}; + +StringBuilder.prototype.finish = function () { + if (this.source.length > this.checkpoint) { + this.takeUpTo(this.source.length); + } +}; + +function writeScalar(state, object, level) { + var simple, first, spaceWrap, folded, literal, single, double, + sawLineFeed, linePosition, longestLine, indent, max, character, + position, escapeSeq, hexEsc, previous, lineLength, modifier, + trailingLineBreaks, result; + + if (0 === object.length) { + state.dump = "''"; + return; + } + + if (-1 !== DEPRECATED_BOOLEANS_SYNTAX.indexOf(object)) { + state.dump = "'" + object + "'"; + return; + } + + simple = true; + first = object.length ? object.charCodeAt(0) : 0; + spaceWrap = (CHAR_SPACE === first || + CHAR_SPACE === object.charCodeAt(object.length - 1)); + + // Simplified check for restricted first characters + // http://www.yaml.org/spec/1.2/spec.html#ns-plain-first%28c%29 + if (CHAR_MINUS === first || + CHAR_QUESTION === first || + CHAR_COMMERCIAL_AT === first || + CHAR_GRAVE_ACCENT === first) { + simple = false; + } + + // can only use > and | if not wrapped in spaces. + if (spaceWrap) { + simple = false; + folded = false; + literal = false; + } else { + folded = true; + literal = true; + } + + single = true; + double = new StringBuilder(object); + + sawLineFeed = false; + linePosition = 0; + longestLine = 0; + + indent = state.indent * level; + max = 80; + if (indent < 40) { + max -= indent; + } else { + max = 40; + } + + for (position = 0; position < object.length; position++) { + character = object.charCodeAt(position); + if (simple) { + // Characters that can never appear in the simple scalar + if (!simpleChar(character)) { + simple = false; + } else { + // Still simple. If we make it all the way through like + // this, then we can just dump the string as-is. + continue; + } + } + + if (single && character === CHAR_SINGLE_QUOTE) { + single = false; + } + + escapeSeq = ESCAPE_SEQUENCES[character]; + hexEsc = needsHexEscape(character); + + if (!escapeSeq && !hexEsc) { + continue; + } + + if (character !== CHAR_LINE_FEED && + character !== CHAR_DOUBLE_QUOTE && + character !== CHAR_SINGLE_QUOTE) { + folded = false; + literal = false; + } else if (character === CHAR_LINE_FEED) { + sawLineFeed = true; + single = false; + if (position > 0) { + previous = object.charCodeAt(position - 1); + if (previous === CHAR_SPACE) { + literal = false; + folded = false; + } + } + if (folded) { + lineLength = position - linePosition; + linePosition = position; + if (lineLength > longestLine) { + longestLine = lineLength; + } + } + } + + if (character !== CHAR_DOUBLE_QUOTE) { + single = false; + } + + double.takeUpTo(position); + double.escapeChar(); + } + + if (simple && testImplicitResolving(state, object)) { + simple = false; + } + + modifier = ''; + if (folded || literal) { + trailingLineBreaks = 0; + if (object.charCodeAt(object.length - 1) === CHAR_LINE_FEED) { + trailingLineBreaks += 1; + if (object.charCodeAt(object.length - 2) === CHAR_LINE_FEED) { + trailingLineBreaks += 1; + } + } + + if (trailingLineBreaks === 0) { + modifier = '-'; + } else if (trailingLineBreaks === 2) { + modifier = '+'; + } + } + + if (literal && longestLine < max) { + folded = false; + } + + // If it's literally one line, then don't bother with the literal. + // We may still want to do a fold, though, if it's a super long line. + if (!sawLineFeed) { + literal = false; + } + + if (simple) { + state.dump = object; + } else if (single) { + state.dump = '\'' + object + '\''; + } else if (folded) { + result = fold(object, max); + state.dump = '>' + modifier + '\n' + indentString(result, indent); + } else if (literal) { + if (!modifier) { + object = object.replace(/\n$/, ''); + } + state.dump = '|' + modifier + '\n' + indentString(object, indent); + } else if (double) { + double.finish(); + state.dump = '"' + double.result + '"'; + } else { + throw new Error('Failed to dump scalar value'); + } + + return; +} + +// The `trailing` var is a regexp match of any trailing `\n` characters. +// +// There are three cases we care about: +// +// 1. One trailing `\n` on the string. Just use `|` or `>`. +// This is the assumed default. (trailing = null) +// 2. No trailing `\n` on the string. Use `|-` or `>-` to "chomp" the end. +// 3. More than one trailing `\n` on the string. Use `|+` or `>+`. +// +// In the case of `>+`, these line breaks are *not* doubled (like the line +// breaks within the string), so it's important to only end with the exact +// same number as we started. +function fold(object, max) { + var result = '', + position = 0, + length = object.length, + trailing = /\n+$/.exec(object), + newLine; + + if (trailing) { + length = trailing.index + 1; + } + + while (position < length) { + newLine = object.indexOf('\n', position); + if (newLine > length || newLine === -1) { + if (result) { + result += '\n\n'; + } + result += foldLine(object.slice(position, length), max); + position = length; + } else { + if (result) { + result += '\n\n'; + } + result += foldLine(object.slice(position, newLine), max); + position = newLine + 1; + } + } + if (trailing && trailing[0] !== '\n') { + result += trailing[0]; + } + + return result; +} + +function foldLine(line, max) { + if (line === '') { + return line; + } + + var foldRe = /[^\s] [^\s]/g, + result = '', + prevMatch = 0, + foldStart = 0, + match = foldRe.exec(line), + index, + foldEnd, + folded; + + while (match) { + index = match.index; + + // when we cross the max len, if the previous match would've + // been ok, use that one, and carry on. If there was no previous + // match on this fold section, then just have a long line. + if (index - foldStart > max) { + if (prevMatch !== foldStart) { + foldEnd = prevMatch; + } else { + foldEnd = index; + } + + if (result) { + result += '\n'; + } + folded = line.slice(foldStart, foldEnd); + result += folded; + foldStart = foldEnd + 1; + } + prevMatch = index + 1; + match = foldRe.exec(line); + } + + if (result) { + result += '\n'; + } + + // if we end up with one last word at the end, then the last bit might + // be slightly bigger than we wanted, because we exited out of the loop. + if (foldStart !== prevMatch && line.length - foldStart > max) { + result += line.slice(foldStart, prevMatch) + '\n' + + line.slice(prevMatch + 1); + } else { + result += line.slice(foldStart); + } + + return result; +} + +// Returns true if character can be found in a simple scalar +function simpleChar(character) { + return CHAR_TAB !== character && + CHAR_LINE_FEED !== character && + CHAR_CARRIAGE_RETURN !== character && + CHAR_COMMA !== character && + CHAR_LEFT_SQUARE_BRACKET !== character && + CHAR_RIGHT_SQUARE_BRACKET !== character && + CHAR_LEFT_CURLY_BRACKET !== character && + CHAR_RIGHT_CURLY_BRACKET !== character && + CHAR_SHARP !== character && + CHAR_AMPERSAND !== character && + CHAR_ASTERISK !== character && + CHAR_EXCLAMATION !== character && + CHAR_VERTICAL_LINE !== character && + CHAR_GREATER_THAN !== character && + CHAR_SINGLE_QUOTE !== character && + CHAR_DOUBLE_QUOTE !== character && + CHAR_PERCENT !== character && + CHAR_COLON !== character && + !ESCAPE_SEQUENCES[character] && + !needsHexEscape(character); +} + +// Returns true if the character code needs to be escaped. +function needsHexEscape(character) { + return !((0x00020 <= character && character <= 0x00007E) || + (0x00085 === character) || + (0x000A0 <= character && character <= 0x00D7FF) || + (0x0E000 <= character && character <= 0x00FFFD) || + (0x10000 <= character && character <= 0x10FFFF)); +} + +function writeFlowSequence(state, level, object) { + var _result = '', + _tag = state.tag, + index, + length; + + for (index = 0, length = object.length; index < length; index += 1) { + // Write only valid elements. + if (writeNode(state, level, object[index], false, false)) { + if (0 !== index) { + _result += ', '; + } + _result += state.dump; + } + } + + state.tag = _tag; + state.dump = '[' + _result + ']'; +} + +function writeBlockSequence(state, level, object, compact) { + var _result = '', + _tag = state.tag, + index, + length; + + for (index = 0, length = object.length; index < length; index += 1) { + // Write only valid elements. + if (writeNode(state, level + 1, object[index], true, true)) { + if (!compact || 0 !== index) { + _result += generateNextLine(state, level); + } + _result += '- ' + state.dump; + } + } + + state.tag = _tag; + state.dump = _result || '[]'; // Empty sequence if no valid values. +} + +function writeFlowMapping(state, level, object) { + var _result = '', + _tag = state.tag, + objectKeyList = Object.keys(object), + index, + length, + objectKey, + objectValue, + pairBuffer; + + for (index = 0, length = objectKeyList.length; index < length; index += 1) { + pairBuffer = ''; + + if (0 !== index) { + pairBuffer += ', '; + } + + objectKey = objectKeyList[index]; + objectValue = object[objectKey]; + + if (!writeNode(state, level, objectKey, false, false)) { + continue; // Skip this pair because of invalid key; + } + + if (state.dump.length > 1024) { + pairBuffer += '? '; + } + + pairBuffer += state.dump + ': '; + + if (!writeNode(state, level, objectValue, false, false)) { + continue; // Skip this pair because of invalid value. + } + + pairBuffer += state.dump; + + // Both key and value are valid. + _result += pairBuffer; + } + + state.tag = _tag; + state.dump = '{' + _result + '}'; +} + +function writeBlockMapping(state, level, object, compact) { + var _result = '', + _tag = state.tag, + objectKeyList = Object.keys(object), + index, + length, + objectKey, + objectValue, + explicitPair, + pairBuffer; + + // Allow sorting keys so that the output file is deterministic + if (state.sortKeys === true) { + // Default sorting + objectKeyList.sort(); + } else if (typeof state.sortKeys === 'function') { + // Custom sort function + objectKeyList.sort(state.sortKeys); + } else if (state.sortKeys) { + // Something is wrong + throw new YAMLException('sortKeys must be a boolean or a function'); + } + + for (index = 0, length = objectKeyList.length; index < length; index += 1) { + pairBuffer = ''; + + if (!compact || 0 !== index) { + pairBuffer += generateNextLine(state, level); + } + + objectKey = objectKeyList[index]; + objectValue = object[objectKey]; + + if (!writeNode(state, level + 1, objectKey, true, true)) { + continue; // Skip this pair because of invalid key. + } + + explicitPair = (null !== state.tag && '?' !== state.tag) || + (state.dump && state.dump.length > 1024); + + if (explicitPair) { + if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) { + pairBuffer += '?'; + } else { + pairBuffer += '? '; + } + } + + pairBuffer += state.dump; + + if (explicitPair) { + pairBuffer += generateNextLine(state, level); + } + + if (!writeNode(state, level + 1, objectValue, true, explicitPair)) { + continue; // Skip this pair because of invalid value. + } + + if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) { + pairBuffer += ':'; + } else { + pairBuffer += ': '; + } + + pairBuffer += state.dump; + + // Both key and value are valid. + _result += pairBuffer; + } + + state.tag = _tag; + state.dump = _result || '{}'; // Empty mapping if no valid pairs. +} + +function detectType(state, object, explicit) { + var _result, typeList, index, length, type, style; + + typeList = explicit ? state.explicitTypes : state.implicitTypes; + + for (index = 0, length = typeList.length; index < length; index += 1) { + type = typeList[index]; + + if ((type.instanceOf || type.predicate) && + (!type.instanceOf || (('object' === typeof object) && (object instanceof type.instanceOf))) && + (!type.predicate || type.predicate(object))) { + + state.tag = explicit ? type.tag : '?'; + + if (type.represent) { + style = state.styleMap[type.tag] || type.defaultStyle; + + if ('[object Function]' === _toString.call(type.represent)) { + _result = type.represent(object, style); + } else if (_hasOwnProperty.call(type.represent, style)) { + _result = type.represent[style](object, style); + } else { + throw new YAMLException('!<' + type.tag + '> tag resolver accepts not "' + style + '" style'); + } + + state.dump = _result; + } + + return true; + } + } + + return false; +} + +// Serializes `object` and writes it to global `result`. +// Returns true on success, or false on invalid object. +// +function writeNode(state, level, object, block, compact) { + state.tag = null; + state.dump = object; + + if (!detectType(state, object, false)) { + detectType(state, object, true); + } + + var type = _toString.call(state.dump); + + if (block) { + block = (0 > state.flowLevel || state.flowLevel > level); + } + + if ((null !== state.tag && '?' !== state.tag) || (2 !== state.indent && level > 0)) { + compact = false; + } + + var objectOrArray = '[object Object]' === type || '[object Array]' === type, + duplicateIndex, + duplicate; + + if (objectOrArray) { + duplicateIndex = state.duplicates.indexOf(object); + duplicate = duplicateIndex !== -1; + } + + if (duplicate && state.usedDuplicates[duplicateIndex]) { + state.dump = '*ref_' + duplicateIndex; + } else { + if (objectOrArray && duplicate && !state.usedDuplicates[duplicateIndex]) { + state.usedDuplicates[duplicateIndex] = true; + } + if ('[object Object]' === type) { + if (block && (0 !== Object.keys(state.dump).length)) { + writeBlockMapping(state, level, state.dump, compact); + if (duplicate) { + state.dump = '&ref_' + duplicateIndex + (0 === level ? '\n' : '') + state.dump; + } + } else { + writeFlowMapping(state, level, state.dump); + if (duplicate) { + state.dump = '&ref_' + duplicateIndex + ' ' + state.dump; + } + } + } else if ('[object Array]' === type) { + if (block && (0 !== state.dump.length)) { + writeBlockSequence(state, level, state.dump, compact); + if (duplicate) { + state.dump = '&ref_' + duplicateIndex + (0 === level ? '\n' : '') + state.dump; + } + } else { + writeFlowSequence(state, level, state.dump); + if (duplicate) { + state.dump = '&ref_' + duplicateIndex + ' ' + state.dump; + } + } + } else if ('[object String]' === type) { + if ('?' !== state.tag) { + writeScalar(state, state.dump, level); + } + } else { + if (state.skipInvalid) { + return false; + } + throw new YAMLException('unacceptable kind of an object to dump ' + type); + } + + if (null !== state.tag && '?' !== state.tag) { + state.dump = '!<' + state.tag + '> ' + state.dump; + } + } + + return true; +} + +function getDuplicateReferences(object, state) { + var objects = [], + duplicatesIndexes = [], + index, + length; + + inspectNode(object, objects, duplicatesIndexes); + + for (index = 0, length = duplicatesIndexes.length; index < length; index += 1) { + state.duplicates.push(objects[duplicatesIndexes[index]]); + } + state.usedDuplicates = new Array(length); +} + +function inspectNode(object, objects, duplicatesIndexes) { + var type = _toString.call(object), + objectKeyList, + index, + length; + + if (null !== object && 'object' === typeof object) { + index = objects.indexOf(object); + if (-1 !== index) { + if (-1 === duplicatesIndexes.indexOf(index)) { + duplicatesIndexes.push(index); + } + } else { + objects.push(object); + + if (Array.isArray(object)) { + for (index = 0, length = object.length; index < length; index += 1) { + inspectNode(object[index], objects, duplicatesIndexes); + } + } else { + objectKeyList = Object.keys(object); + + for (index = 0, length = objectKeyList.length; index < length; index += 1) { + inspectNode(object[objectKeyList[index]], objects, duplicatesIndexes); + } + } + } + } +} + +function dump(input, options) { + options = options || {}; + + var state = new State(options); + + getDuplicateReferences(input, state); + + if (writeNode(state, 0, input, true, true)) { + return state.dump + '\n'; + } + return ''; +} + +function safeDump(input, options) { + return dump(input, common.extend({ schema: DEFAULT_SAFE_SCHEMA }, options)); +} + +module.exports.dump = dump; +module.exports.safeDump = safeDump; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/exception.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/exception.js new file mode 100644 index 00000000..479ba887 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/exception.js @@ -0,0 +1,25 @@ +'use strict'; + + +function YAMLException(reason, mark) { + this.name = 'YAMLException'; + this.reason = reason; + this.mark = mark; + this.message = this.toString(false); +} + + +YAMLException.prototype.toString = function toString(compact) { + var result; + + result = 'JS-YAML: ' + (this.reason || '(unknown reason)'); + + if (!compact && this.mark) { + result += ' ' + this.mark.toString(); + } + + return result; +}; + + +module.exports = YAMLException; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/loader.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/loader.js new file mode 100644 index 00000000..1012ff56 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/loader.js @@ -0,0 +1,1586 @@ +'use strict'; + +/*eslint-disable max-len,no-use-before-define*/ + +var common = require('./common'); +var YAMLException = require('./exception'); +var Mark = require('./mark'); +var DEFAULT_SAFE_SCHEMA = require('./schema/default_safe'); +var DEFAULT_FULL_SCHEMA = require('./schema/default_full'); + + +var _hasOwnProperty = Object.prototype.hasOwnProperty; + + +var CONTEXT_FLOW_IN = 1; +var CONTEXT_FLOW_OUT = 2; +var CONTEXT_BLOCK_IN = 3; +var CONTEXT_BLOCK_OUT = 4; + + +var CHOMPING_CLIP = 1; +var CHOMPING_STRIP = 2; +var CHOMPING_KEEP = 3; + + +var PATTERN_NON_PRINTABLE = /[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/; +var PATTERN_NON_ASCII_LINE_BREAKS = /[\x85\u2028\u2029]/; +var PATTERN_FLOW_INDICATORS = /[,\[\]\{\}]/; +var PATTERN_TAG_HANDLE = /^(?:!|!!|![a-z\-]+!)$/i; +var PATTERN_TAG_URI = /^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i; + + +function is_EOL(c) { + return (c === 0x0A/* LF */) || (c === 0x0D/* CR */); +} + +function is_WHITE_SPACE(c) { + return (c === 0x09/* Tab */) || (c === 0x20/* Space */); +} + +function is_WS_OR_EOL(c) { + return (c === 0x09/* Tab */) || + (c === 0x20/* Space */) || + (c === 0x0A/* LF */) || + (c === 0x0D/* CR */); +} + +function is_FLOW_INDICATOR(c) { + return 0x2C/* , */ === c || + 0x5B/* [ */ === c || + 0x5D/* ] */ === c || + 0x7B/* { */ === c || + 0x7D/* } */ === c; +} + +function fromHexCode(c) { + var lc; + + if ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) { + return c - 0x30; + } + + /*eslint-disable no-bitwise*/ + lc = c | 0x20; + + if ((0x61/* a */ <= lc) && (lc <= 0x66/* f */)) { + return lc - 0x61 + 10; + } + + return -1; +} + +function escapedHexLen(c) { + if (c === 0x78/* x */) { return 2; } + if (c === 0x75/* u */) { return 4; } + if (c === 0x55/* U */) { return 8; } + return 0; +} + +function fromDecimalCode(c) { + if ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) { + return c - 0x30; + } + + return -1; +} + +function simpleEscapeSequence(c) { + return (c === 0x30/* 0 */) ? '\x00' : + (c === 0x61/* a */) ? '\x07' : + (c === 0x62/* b */) ? '\x08' : + (c === 0x74/* t */) ? '\x09' : + (c === 0x09/* Tab */) ? '\x09' : + (c === 0x6E/* n */) ? '\x0A' : + (c === 0x76/* v */) ? '\x0B' : + (c === 0x66/* f */) ? '\x0C' : + (c === 0x72/* r */) ? '\x0D' : + (c === 0x65/* e */) ? '\x1B' : + (c === 0x20/* Space */) ? ' ' : + (c === 0x22/* " */) ? '\x22' : + (c === 0x2F/* / */) ? '/' : + (c === 0x5C/* \ */) ? '\x5C' : + (c === 0x4E/* N */) ? '\x85' : + (c === 0x5F/* _ */) ? '\xA0' : + (c === 0x4C/* L */) ? '\u2028' : + (c === 0x50/* P */) ? '\u2029' : ''; +} + +function charFromCodepoint(c) { + if (c <= 0xFFFF) { + return String.fromCharCode(c); + } + // Encode UTF-16 surrogate pair + // https://en.wikipedia.org/wiki/UTF-16#Code_points_U.2B010000_to_U.2B10FFFF + return String.fromCharCode(((c - 0x010000) >> 10) + 0xD800, + ((c - 0x010000) & 0x03FF) + 0xDC00); +} + +var simpleEscapeCheck = new Array(256); // integer, for fast access +var simpleEscapeMap = new Array(256); +for (var i = 0; i < 256; i++) { + simpleEscapeCheck[i] = simpleEscapeSequence(i) ? 1 : 0; + simpleEscapeMap[i] = simpleEscapeSequence(i); +} + + +function State(input, options) { + this.input = input; + + this.filename = options['filename'] || null; + this.schema = options['schema'] || DEFAULT_FULL_SCHEMA; + this.onWarning = options['onWarning'] || null; + this.legacy = options['legacy'] || false; + + this.implicitTypes = this.schema.compiledImplicit; + this.typeMap = this.schema.compiledTypeMap; + + this.length = input.length; + this.position = 0; + this.line = 0; + this.lineStart = 0; + this.lineIndent = 0; + + this.documents = []; + + /* + this.version; + this.checkLineBreaks; + this.tagMap; + this.anchorMap; + this.tag; + this.anchor; + this.kind; + this.result;*/ + +} + + +function generateError(state, message) { + return new YAMLException( + message, + new Mark(state.filename, state.input, state.position, state.line, (state.position - state.lineStart))); +} + +function throwError(state, message) { + throw generateError(state, message); +} + +function throwWarning(state, message) { + var error = generateError(state, message); + + if (state.onWarning) { + state.onWarning.call(null, error); + } else { + throw error; + } +} + + +var directiveHandlers = { + + YAML: function handleYamlDirective(state, name, args) { + + var match, major, minor; + + if (null !== state.version) { + throwError(state, 'duplication of %YAML directive'); + } + + if (1 !== args.length) { + throwError(state, 'YAML directive accepts exactly one argument'); + } + + match = /^([0-9]+)\.([0-9]+)$/.exec(args[0]); + + if (null === match) { + throwError(state, 'ill-formed argument of the YAML directive'); + } + + major = parseInt(match[1], 10); + minor = parseInt(match[2], 10); + + if (1 !== major) { + throwError(state, 'unacceptable YAML version of the document'); + } + + state.version = args[0]; + state.checkLineBreaks = (minor < 2); + + if (1 !== minor && 2 !== minor) { + throwWarning(state, 'unsupported YAML version of the document'); + } + }, + + TAG: function handleTagDirective(state, name, args) { + + var handle, prefix; + + if (2 !== args.length) { + throwError(state, 'TAG directive accepts exactly two arguments'); + } + + handle = args[0]; + prefix = args[1]; + + if (!PATTERN_TAG_HANDLE.test(handle)) { + throwError(state, 'ill-formed tag handle (first argument) of the TAG directive'); + } + + if (_hasOwnProperty.call(state.tagMap, handle)) { + throwError(state, 'there is a previously declared suffix for "' + handle + '" tag handle'); + } + + if (!PATTERN_TAG_URI.test(prefix)) { + throwError(state, 'ill-formed tag prefix (second argument) of the TAG directive'); + } + + state.tagMap[handle] = prefix; + } +}; + + +function captureSegment(state, start, end, checkJson) { + var _position, _length, _character, _result; + + if (start < end) { + _result = state.input.slice(start, end); + + if (checkJson) { + for (_position = 0, _length = _result.length; + _position < _length; + _position += 1) { + _character = _result.charCodeAt(_position); + if (!(0x09 === _character || + 0x20 <= _character && _character <= 0x10FFFF)) { + throwError(state, 'expected valid JSON character'); + } + } + } + + state.result += _result; + } +} + +function mergeMappings(state, destination, source) { + var sourceKeys, key, index, quantity; + + if (!common.isObject(source)) { + throwError(state, 'cannot merge mappings; the provided source object is unacceptable'); + } + + sourceKeys = Object.keys(source); + + for (index = 0, quantity = sourceKeys.length; index < quantity; index += 1) { + key = sourceKeys[index]; + + if (!_hasOwnProperty.call(destination, key)) { + destination[key] = source[key]; + } + } +} + +function storeMappingPair(state, _result, keyTag, keyNode, valueNode) { + var index, quantity; + + keyNode = String(keyNode); + + if (null === _result) { + _result = {}; + } + + if ('tag:yaml.org,2002:merge' === keyTag) { + if (Array.isArray(valueNode)) { + for (index = 0, quantity = valueNode.length; index < quantity; index += 1) { + mergeMappings(state, _result, valueNode[index]); + } + } else { + mergeMappings(state, _result, valueNode); + } + } else { + _result[keyNode] = valueNode; + } + + return _result; +} + +function readLineBreak(state) { + var ch; + + ch = state.input.charCodeAt(state.position); + + if (0x0A/* LF */ === ch) { + state.position++; + } else if (0x0D/* CR */ === ch) { + state.position++; + if (0x0A/* LF */ === state.input.charCodeAt(state.position)) { + state.position++; + } + } else { + throwError(state, 'a line break is expected'); + } + + state.line += 1; + state.lineStart = state.position; +} + +function skipSeparationSpace(state, allowComments, checkIndent) { + var lineBreaks = 0, + ch = state.input.charCodeAt(state.position); + + while (0 !== ch) { + while (is_WHITE_SPACE(ch)) { + ch = state.input.charCodeAt(++state.position); + } + + if (allowComments && 0x23/* # */ === ch) { + do { + ch = state.input.charCodeAt(++state.position); + } while (ch !== 0x0A/* LF */ && ch !== 0x0D/* CR */ && 0 !== ch); + } + + if (is_EOL(ch)) { + readLineBreak(state); + + ch = state.input.charCodeAt(state.position); + lineBreaks++; + state.lineIndent = 0; + + while (0x20/* Space */ === ch) { + state.lineIndent++; + ch = state.input.charCodeAt(++state.position); + } + } else { + break; + } + } + + if (-1 !== checkIndent && 0 !== lineBreaks && state.lineIndent < checkIndent) { + throwWarning(state, 'deficient indentation'); + } + + return lineBreaks; +} + +function testDocumentSeparator(state) { + var _position = state.position, + ch; + + ch = state.input.charCodeAt(_position); + + // Condition state.position === state.lineStart is tested + // in parent on each call, for efficiency. No needs to test here again. + if ((0x2D/* - */ === ch || 0x2E/* . */ === ch) && + state.input.charCodeAt(_position + 1) === ch && + state.input.charCodeAt(_position + 2) === ch) { + + _position += 3; + + ch = state.input.charCodeAt(_position); + + if (ch === 0 || is_WS_OR_EOL(ch)) { + return true; + } + } + + return false; +} + +function writeFoldedLines(state, count) { + if (1 === count) { + state.result += ' '; + } else if (count > 1) { + state.result += common.repeat('\n', count - 1); + } +} + + +function readPlainScalar(state, nodeIndent, withinFlowCollection) { + var preceding, + following, + captureStart, + captureEnd, + hasPendingContent, + _line, + _lineStart, + _lineIndent, + _kind = state.kind, + _result = state.result, + ch; + + ch = state.input.charCodeAt(state.position); + + if (is_WS_OR_EOL(ch) || + is_FLOW_INDICATOR(ch) || + 0x23/* # */ === ch || + 0x26/* & */ === ch || + 0x2A/* * */ === ch || + 0x21/* ! */ === ch || + 0x7C/* | */ === ch || + 0x3E/* > */ === ch || + 0x27/* ' */ === ch || + 0x22/* " */ === ch || + 0x25/* % */ === ch || + 0x40/* @ */ === ch || + 0x60/* ` */ === ch) { + return false; + } + + if (0x3F/* ? */ === ch || 0x2D/* - */ === ch) { + following = state.input.charCodeAt(state.position + 1); + + if (is_WS_OR_EOL(following) || + withinFlowCollection && is_FLOW_INDICATOR(following)) { + return false; + } + } + + state.kind = 'scalar'; + state.result = ''; + captureStart = captureEnd = state.position; + hasPendingContent = false; + + while (0 !== ch) { + if (0x3A/* : */ === ch) { + following = state.input.charCodeAt(state.position + 1); + + if (is_WS_OR_EOL(following) || + withinFlowCollection && is_FLOW_INDICATOR(following)) { + break; + } + + } else if (0x23/* # */ === ch) { + preceding = state.input.charCodeAt(state.position - 1); + + if (is_WS_OR_EOL(preceding)) { + break; + } + + } else if ((state.position === state.lineStart && testDocumentSeparator(state)) || + withinFlowCollection && is_FLOW_INDICATOR(ch)) { + break; + + } else if (is_EOL(ch)) { + _line = state.line; + _lineStart = state.lineStart; + _lineIndent = state.lineIndent; + skipSeparationSpace(state, false, -1); + + if (state.lineIndent >= nodeIndent) { + hasPendingContent = true; + ch = state.input.charCodeAt(state.position); + continue; + } else { + state.position = captureEnd; + state.line = _line; + state.lineStart = _lineStart; + state.lineIndent = _lineIndent; + break; + } + } + + if (hasPendingContent) { + captureSegment(state, captureStart, captureEnd, false); + writeFoldedLines(state, state.line - _line); + captureStart = captureEnd = state.position; + hasPendingContent = false; + } + + if (!is_WHITE_SPACE(ch)) { + captureEnd = state.position + 1; + } + + ch = state.input.charCodeAt(++state.position); + } + + captureSegment(state, captureStart, captureEnd, false); + + if (state.result) { + return true; + } + + state.kind = _kind; + state.result = _result; + return false; +} + +function readSingleQuotedScalar(state, nodeIndent) { + var ch, + captureStart, captureEnd; + + ch = state.input.charCodeAt(state.position); + + if (0x27/* ' */ !== ch) { + return false; + } + + state.kind = 'scalar'; + state.result = ''; + state.position++; + captureStart = captureEnd = state.position; + + while (0 !== (ch = state.input.charCodeAt(state.position))) { + if (0x27/* ' */ === ch) { + captureSegment(state, captureStart, state.position, true); + ch = state.input.charCodeAt(++state.position); + + if (0x27/* ' */ === ch) { + captureStart = captureEnd = state.position; + state.position++; + } else { + return true; + } + + } else if (is_EOL(ch)) { + captureSegment(state, captureStart, captureEnd, true); + writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent)); + captureStart = captureEnd = state.position; + + } else if (state.position === state.lineStart && testDocumentSeparator(state)) { + throwError(state, 'unexpected end of the document within a single quoted scalar'); + + } else { + state.position++; + captureEnd = state.position; + } + } + + throwError(state, 'unexpected end of the stream within a single quoted scalar'); +} + +function readDoubleQuotedScalar(state, nodeIndent) { + var captureStart, + captureEnd, + hexLength, + hexResult, + tmp, tmpEsc, + ch; + + ch = state.input.charCodeAt(state.position); + + if (0x22/* " */ !== ch) { + return false; + } + + state.kind = 'scalar'; + state.result = ''; + state.position++; + captureStart = captureEnd = state.position; + + while (0 !== (ch = state.input.charCodeAt(state.position))) { + if (0x22/* " */ === ch) { + captureSegment(state, captureStart, state.position, true); + state.position++; + return true; + + } else if (0x5C/* \ */ === ch) { + captureSegment(state, captureStart, state.position, true); + ch = state.input.charCodeAt(++state.position); + + if (is_EOL(ch)) { + skipSeparationSpace(state, false, nodeIndent); + + // TODO: rework to inline fn with no type cast? + } else if (ch < 256 && simpleEscapeCheck[ch]) { + state.result += simpleEscapeMap[ch]; + state.position++; + + } else if ((tmp = escapedHexLen(ch)) > 0) { + hexLength = tmp; + hexResult = 0; + + for (; hexLength > 0; hexLength--) { + ch = state.input.charCodeAt(++state.position); + + if ((tmp = fromHexCode(ch)) >= 0) { + hexResult = (hexResult << 4) + tmp; + + } else { + throwError(state, 'expected hexadecimal character'); + } + } + + state.result += charFromCodepoint(hexResult); + + state.position++; + + } else { + throwError(state, 'unknown escape sequence'); + } + + captureStart = captureEnd = state.position; + + } else if (is_EOL(ch)) { + captureSegment(state, captureStart, captureEnd, true); + writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent)); + captureStart = captureEnd = state.position; + + } else if (state.position === state.lineStart && testDocumentSeparator(state)) { + throwError(state, 'unexpected end of the document within a double quoted scalar'); + + } else { + state.position++; + captureEnd = state.position; + } + } + + throwError(state, 'unexpected end of the stream within a double quoted scalar'); +} + +function readFlowCollection(state, nodeIndent) { + var readNext = true, + _line, + _tag = state.tag, + _result, + _anchor = state.anchor, + following, + terminator, + isPair, + isExplicitPair, + isMapping, + keyNode, + keyTag, + valueNode, + ch; + + ch = state.input.charCodeAt(state.position); + + if (ch === 0x5B/* [ */) { + terminator = 0x5D;/* ] */ + isMapping = false; + _result = []; + } else if (ch === 0x7B/* { */) { + terminator = 0x7D;/* } */ + isMapping = true; + _result = {}; + } else { + return false; + } + + if (null !== state.anchor) { + state.anchorMap[state.anchor] = _result; + } + + ch = state.input.charCodeAt(++state.position); + + while (0 !== ch) { + skipSeparationSpace(state, true, nodeIndent); + + ch = state.input.charCodeAt(state.position); + + if (ch === terminator) { + state.position++; + state.tag = _tag; + state.anchor = _anchor; + state.kind = isMapping ? 'mapping' : 'sequence'; + state.result = _result; + return true; + } else if (!readNext) { + throwError(state, 'missed comma between flow collection entries'); + } + + keyTag = keyNode = valueNode = null; + isPair = isExplicitPair = false; + + if (0x3F/* ? */ === ch) { + following = state.input.charCodeAt(state.position + 1); + + if (is_WS_OR_EOL(following)) { + isPair = isExplicitPair = true; + state.position++; + skipSeparationSpace(state, true, nodeIndent); + } + } + + _line = state.line; + composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true); + keyTag = state.tag; + keyNode = state.result; + skipSeparationSpace(state, true, nodeIndent); + + ch = state.input.charCodeAt(state.position); + + if ((isExplicitPair || state.line === _line) && 0x3A/* : */ === ch) { + isPair = true; + ch = state.input.charCodeAt(++state.position); + skipSeparationSpace(state, true, nodeIndent); + composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true); + valueNode = state.result; + } + + if (isMapping) { + storeMappingPair(state, _result, keyTag, keyNode, valueNode); + } else if (isPair) { + _result.push(storeMappingPair(state, null, keyTag, keyNode, valueNode)); + } else { + _result.push(keyNode); + } + + skipSeparationSpace(state, true, nodeIndent); + + ch = state.input.charCodeAt(state.position); + + if (0x2C/* , */ === ch) { + readNext = true; + ch = state.input.charCodeAt(++state.position); + } else { + readNext = false; + } + } + + throwError(state, 'unexpected end of the stream within a flow collection'); +} + +function readBlockScalar(state, nodeIndent) { + var captureStart, + folding, + chomping = CHOMPING_CLIP, + detectedIndent = false, + textIndent = nodeIndent, + emptyLines = 0, + atMoreIndented = false, + tmp, + ch; + + ch = state.input.charCodeAt(state.position); + + if (ch === 0x7C/* | */) { + folding = false; + } else if (ch === 0x3E/* > */) { + folding = true; + } else { + return false; + } + + state.kind = 'scalar'; + state.result = ''; + + while (0 !== ch) { + ch = state.input.charCodeAt(++state.position); + + if (0x2B/* + */ === ch || 0x2D/* - */ === ch) { + if (CHOMPING_CLIP === chomping) { + chomping = (0x2B/* + */ === ch) ? CHOMPING_KEEP : CHOMPING_STRIP; + } else { + throwError(state, 'repeat of a chomping mode identifier'); + } + + } else if ((tmp = fromDecimalCode(ch)) >= 0) { + if (tmp === 0) { + throwError(state, 'bad explicit indentation width of a block scalar; it cannot be less than one'); + } else if (!detectedIndent) { + textIndent = nodeIndent + tmp - 1; + detectedIndent = true; + } else { + throwError(state, 'repeat of an indentation width identifier'); + } + + } else { + break; + } + } + + if (is_WHITE_SPACE(ch)) { + do { ch = state.input.charCodeAt(++state.position); } + while (is_WHITE_SPACE(ch)); + + if (0x23/* # */ === ch) { + do { ch = state.input.charCodeAt(++state.position); } + while (!is_EOL(ch) && (0 !== ch)); + } + } + + while (0 !== ch) { + readLineBreak(state); + state.lineIndent = 0; + + ch = state.input.charCodeAt(state.position); + + while ((!detectedIndent || state.lineIndent < textIndent) && + (0x20/* Space */ === ch)) { + state.lineIndent++; + ch = state.input.charCodeAt(++state.position); + } + + if (!detectedIndent && state.lineIndent > textIndent) { + textIndent = state.lineIndent; + } + + if (is_EOL(ch)) { + emptyLines++; + continue; + } + + // End of the scalar. + if (state.lineIndent < textIndent) { + + // Perform the chomping. + if (chomping === CHOMPING_KEEP) { + state.result += common.repeat('\n', emptyLines); + } else if (chomping === CHOMPING_CLIP) { + if (detectedIndent) { // i.e. only if the scalar is not empty. + state.result += '\n'; + } + } + + // Break this `while` cycle and go to the funciton's epilogue. + break; + } + + // Folded style: use fancy rules to handle line breaks. + if (folding) { + + // Lines starting with white space characters (more-indented lines) are not folded. + if (is_WHITE_SPACE(ch)) { + atMoreIndented = true; + state.result += common.repeat('\n', emptyLines + 1); + + // End of more-indented block. + } else if (atMoreIndented) { + atMoreIndented = false; + state.result += common.repeat('\n', emptyLines + 1); + + // Just one line break - perceive as the same line. + } else if (0 === emptyLines) { + if (detectedIndent) { // i.e. only if we have already read some scalar content. + state.result += ' '; + } + + // Several line breaks - perceive as different lines. + } else { + state.result += common.repeat('\n', emptyLines); + } + + // Literal style: just add exact number of line breaks between content lines. + } else if (detectedIndent) { + // If current line isn't the first one - count line break from the last content line. + state.result += common.repeat('\n', emptyLines + 1); + } else { + // In case of the first content line - count only empty lines. + } + + detectedIndent = true; + emptyLines = 0; + captureStart = state.position; + + while (!is_EOL(ch) && (0 !== ch)) { + ch = state.input.charCodeAt(++state.position); + } + + captureSegment(state, captureStart, state.position, false); + } + + return true; +} + +function readBlockSequence(state, nodeIndent) { + var _line, + _tag = state.tag, + _anchor = state.anchor, + _result = [], + following, + detected = false, + ch; + + if (null !== state.anchor) { + state.anchorMap[state.anchor] = _result; + } + + ch = state.input.charCodeAt(state.position); + + while (0 !== ch) { + + if (0x2D/* - */ !== ch) { + break; + } + + following = state.input.charCodeAt(state.position + 1); + + if (!is_WS_OR_EOL(following)) { + break; + } + + detected = true; + state.position++; + + if (skipSeparationSpace(state, true, -1)) { + if (state.lineIndent <= nodeIndent) { + _result.push(null); + ch = state.input.charCodeAt(state.position); + continue; + } + } + + _line = state.line; + composeNode(state, nodeIndent, CONTEXT_BLOCK_IN, false, true); + _result.push(state.result); + skipSeparationSpace(state, true, -1); + + ch = state.input.charCodeAt(state.position); + + if ((state.line === _line || state.lineIndent > nodeIndent) && (0 !== ch)) { + throwError(state, 'bad indentation of a sequence entry'); + } else if (state.lineIndent < nodeIndent) { + break; + } + } + + if (detected) { + state.tag = _tag; + state.anchor = _anchor; + state.kind = 'sequence'; + state.result = _result; + return true; + } + return false; +} + +function readBlockMapping(state, nodeIndent, flowIndent) { + var following, + allowCompact, + _line, + _tag = state.tag, + _anchor = state.anchor, + _result = {}, + keyTag = null, + keyNode = null, + valueNode = null, + atExplicitKey = false, + detected = false, + ch; + + if (null !== state.anchor) { + state.anchorMap[state.anchor] = _result; + } + + ch = state.input.charCodeAt(state.position); + + while (0 !== ch) { + following = state.input.charCodeAt(state.position + 1); + _line = state.line; // Save the current line. + + // + // Explicit notation case. There are two separate blocks: + // first for the key (denoted by "?") and second for the value (denoted by ":") + // + if ((0x3F/* ? */ === ch || 0x3A/* : */ === ch) && is_WS_OR_EOL(following)) { + + if (0x3F/* ? */ === ch) { + if (atExplicitKey) { + storeMappingPair(state, _result, keyTag, keyNode, null); + keyTag = keyNode = valueNode = null; + } + + detected = true; + atExplicitKey = true; + allowCompact = true; + + } else if (atExplicitKey) { + // i.e. 0x3A/* : */ === character after the explicit key. + atExplicitKey = false; + allowCompact = true; + + } else { + throwError(state, 'incomplete explicit mapping pair; a key node is missed'); + } + + state.position += 1; + ch = following; + + // + // Implicit notation case. Flow-style node as the key first, then ":", and the value. + // + } else if (composeNode(state, flowIndent, CONTEXT_FLOW_OUT, false, true)) { + + if (state.line === _line) { + ch = state.input.charCodeAt(state.position); + + while (is_WHITE_SPACE(ch)) { + ch = state.input.charCodeAt(++state.position); + } + + if (0x3A/* : */ === ch) { + ch = state.input.charCodeAt(++state.position); + + if (!is_WS_OR_EOL(ch)) { + throwError(state, 'a whitespace character is expected after the key-value separator within a block mapping'); + } + + if (atExplicitKey) { + storeMappingPair(state, _result, keyTag, keyNode, null); + keyTag = keyNode = valueNode = null; + } + + detected = true; + atExplicitKey = false; + allowCompact = false; + keyTag = state.tag; + keyNode = state.result; + + } else if (detected) { + throwError(state, 'can not read an implicit mapping pair; a colon is missed'); + + } else { + state.tag = _tag; + state.anchor = _anchor; + return true; // Keep the result of `composeNode`. + } + + } else if (detected) { + throwError(state, 'can not read a block mapping entry; a multiline key may not be an implicit key'); + + } else { + state.tag = _tag; + state.anchor = _anchor; + return true; // Keep the result of `composeNode`. + } + + } else { + break; // Reading is done. Go to the epilogue. + } + + // + // Common reading code for both explicit and implicit notations. + // + if (state.line === _line || state.lineIndent > nodeIndent) { + if (composeNode(state, nodeIndent, CONTEXT_BLOCK_OUT, true, allowCompact)) { + if (atExplicitKey) { + keyNode = state.result; + } else { + valueNode = state.result; + } + } + + if (!atExplicitKey) { + storeMappingPair(state, _result, keyTag, keyNode, valueNode); + keyTag = keyNode = valueNode = null; + } + + skipSeparationSpace(state, true, -1); + ch = state.input.charCodeAt(state.position); + } + + if (state.lineIndent > nodeIndent && (0 !== ch)) { + throwError(state, 'bad indentation of a mapping entry'); + } else if (state.lineIndent < nodeIndent) { + break; + } + } + + // + // Epilogue. + // + + // Special case: last mapping's node contains only the key in explicit notation. + if (atExplicitKey) { + storeMappingPair(state, _result, keyTag, keyNode, null); + } + + // Expose the resulting mapping. + if (detected) { + state.tag = _tag; + state.anchor = _anchor; + state.kind = 'mapping'; + state.result = _result; + } + + return detected; +} + +function readTagProperty(state) { + var _position, + isVerbatim = false, + isNamed = false, + tagHandle, + tagName, + ch; + + ch = state.input.charCodeAt(state.position); + + if (0x21/* ! */ !== ch) { + return false; + } + + if (null !== state.tag) { + throwError(state, 'duplication of a tag property'); + } + + ch = state.input.charCodeAt(++state.position); + + if (0x3C/* < */ === ch) { + isVerbatim = true; + ch = state.input.charCodeAt(++state.position); + + } else if (0x21/* ! */ === ch) { + isNamed = true; + tagHandle = '!!'; + ch = state.input.charCodeAt(++state.position); + + } else { + tagHandle = '!'; + } + + _position = state.position; + + if (isVerbatim) { + do { ch = state.input.charCodeAt(++state.position); } + while (0 !== ch && 0x3E/* > */ !== ch); + + if (state.position < state.length) { + tagName = state.input.slice(_position, state.position); + ch = state.input.charCodeAt(++state.position); + } else { + throwError(state, 'unexpected end of the stream within a verbatim tag'); + } + } else { + while (0 !== ch && !is_WS_OR_EOL(ch)) { + + if (0x21/* ! */ === ch) { + if (!isNamed) { + tagHandle = state.input.slice(_position - 1, state.position + 1); + + if (!PATTERN_TAG_HANDLE.test(tagHandle)) { + throwError(state, 'named tag handle cannot contain such characters'); + } + + isNamed = true; + _position = state.position + 1; + } else { + throwError(state, 'tag suffix cannot contain exclamation marks'); + } + } + + ch = state.input.charCodeAt(++state.position); + } + + tagName = state.input.slice(_position, state.position); + + if (PATTERN_FLOW_INDICATORS.test(tagName)) { + throwError(state, 'tag suffix cannot contain flow indicator characters'); + } + } + + if (tagName && !PATTERN_TAG_URI.test(tagName)) { + throwError(state, 'tag name cannot contain such characters: ' + tagName); + } + + if (isVerbatim) { + state.tag = tagName; + + } else if (_hasOwnProperty.call(state.tagMap, tagHandle)) { + state.tag = state.tagMap[tagHandle] + tagName; + + } else if ('!' === tagHandle) { + state.tag = '!' + tagName; + + } else if ('!!' === tagHandle) { + state.tag = 'tag:yaml.org,2002:' + tagName; + + } else { + throwError(state, 'undeclared tag handle "' + tagHandle + '"'); + } + + return true; +} + +function readAnchorProperty(state) { + var _position, + ch; + + ch = state.input.charCodeAt(state.position); + + if (0x26/* & */ !== ch) { + return false; + } + + if (null !== state.anchor) { + throwError(state, 'duplication of an anchor property'); + } + + ch = state.input.charCodeAt(++state.position); + _position = state.position; + + while (0 !== ch && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) { + ch = state.input.charCodeAt(++state.position); + } + + if (state.position === _position) { + throwError(state, 'name of an anchor node must contain at least one character'); + } + + state.anchor = state.input.slice(_position, state.position); + return true; +} + +function readAlias(state) { + var _position, alias, + len = state.length, + input = state.input, + ch; + + ch = state.input.charCodeAt(state.position); + + if (0x2A/* * */ !== ch) { + return false; + } + + ch = state.input.charCodeAt(++state.position); + _position = state.position; + + while (0 !== ch && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) { + ch = state.input.charCodeAt(++state.position); + } + + if (state.position === _position) { + throwError(state, 'name of an alias node must contain at least one character'); + } + + alias = state.input.slice(_position, state.position); + + if (!state.anchorMap.hasOwnProperty(alias)) { + throwError(state, 'unidentified alias "' + alias + '"'); + } + + state.result = state.anchorMap[alias]; + skipSeparationSpace(state, true, -1); + return true; +} + +function composeNode(state, parentIndent, nodeContext, allowToSeek, allowCompact) { + var allowBlockStyles, + allowBlockScalars, + allowBlockCollections, + indentStatus = 1, // 1: this>parent, 0: this=parent, -1: this<parent + atNewLine = false, + hasContent = false, + typeIndex, + typeQuantity, + type, + flowIndent, + blockIndent, + _result; + + state.tag = null; + state.anchor = null; + state.kind = null; + state.result = null; + + allowBlockStyles = allowBlockScalars = allowBlockCollections = + CONTEXT_BLOCK_OUT === nodeContext || + CONTEXT_BLOCK_IN === nodeContext; + + if (allowToSeek) { + if (skipSeparationSpace(state, true, -1)) { + atNewLine = true; + + if (state.lineIndent > parentIndent) { + indentStatus = 1; + } else if (state.lineIndent === parentIndent) { + indentStatus = 0; + } else if (state.lineIndent < parentIndent) { + indentStatus = -1; + } + } + } + + if (1 === indentStatus) { + while (readTagProperty(state) || readAnchorProperty(state)) { + if (skipSeparationSpace(state, true, -1)) { + atNewLine = true; + allowBlockCollections = allowBlockStyles; + + if (state.lineIndent > parentIndent) { + indentStatus = 1; + } else if (state.lineIndent === parentIndent) { + indentStatus = 0; + } else if (state.lineIndent < parentIndent) { + indentStatus = -1; + } + } else { + allowBlockCollections = false; + } + } + } + + if (allowBlockCollections) { + allowBlockCollections = atNewLine || allowCompact; + } + + if (1 === indentStatus || CONTEXT_BLOCK_OUT === nodeContext) { + if (CONTEXT_FLOW_IN === nodeContext || CONTEXT_FLOW_OUT === nodeContext) { + flowIndent = parentIndent; + } else { + flowIndent = parentIndent + 1; + } + + blockIndent = state.position - state.lineStart; + + if (1 === indentStatus) { + if (allowBlockCollections && + (readBlockSequence(state, blockIndent) || + readBlockMapping(state, blockIndent, flowIndent)) || + readFlowCollection(state, flowIndent)) { + hasContent = true; + } else { + if ((allowBlockScalars && readBlockScalar(state, flowIndent)) || + readSingleQuotedScalar(state, flowIndent) || + readDoubleQuotedScalar(state, flowIndent)) { + hasContent = true; + + } else if (readAlias(state)) { + hasContent = true; + + if (null !== state.tag || null !== state.anchor) { + throwError(state, 'alias node should not have any properties'); + } + + } else if (readPlainScalar(state, flowIndent, CONTEXT_FLOW_IN === nodeContext)) { + hasContent = true; + + if (null === state.tag) { + state.tag = '?'; + } + } + + if (null !== state.anchor) { + state.anchorMap[state.anchor] = state.result; + } + } + } else if (0 === indentStatus) { + // Special case: block sequences are allowed to have same indentation level as the parent. + // http://www.yaml.org/spec/1.2/spec.html#id2799784 + hasContent = allowBlockCollections && readBlockSequence(state, blockIndent); + } + } + + if (null !== state.tag && '!' !== state.tag) { + if ('?' === state.tag) { + for (typeIndex = 0, typeQuantity = state.implicitTypes.length; + typeIndex < typeQuantity; + typeIndex += 1) { + type = state.implicitTypes[typeIndex]; + + // Implicit resolving is not allowed for non-scalar types, and '?' + // non-specific tag is only assigned to plain scalars. So, it isn't + // needed to check for 'kind' conformity. + + if (type.resolve(state.result)) { // `state.result` updated in resolver if matched + state.result = type.construct(state.result); + state.tag = type.tag; + if (null !== state.anchor) { + state.anchorMap[state.anchor] = state.result; + } + break; + } + } + } else if (_hasOwnProperty.call(state.typeMap, state.tag)) { + type = state.typeMap[state.tag]; + + if (null !== state.result && type.kind !== state.kind) { + throwError(state, 'unacceptable node kind for !<' + state.tag + '> tag; it should be "' + type.kind + '", not "' + state.kind + '"'); + } + + if (!type.resolve(state.result)) { // `state.result` updated in resolver if matched + throwError(state, 'cannot resolve a node with !<' + state.tag + '> explicit tag'); + } else { + state.result = type.construct(state.result); + if (null !== state.anchor) { + state.anchorMap[state.anchor] = state.result; + } + } + } else { + throwWarning(state, 'unknown tag !<' + state.tag + '>'); + } + } + + return null !== state.tag || null !== state.anchor || hasContent; +} + +function readDocument(state) { + var documentStart = state.position, + _position, + directiveName, + directiveArgs, + hasDirectives = false, + ch; + + state.version = null; + state.checkLineBreaks = state.legacy; + state.tagMap = {}; + state.anchorMap = {}; + + while (0 !== (ch = state.input.charCodeAt(state.position))) { + skipSeparationSpace(state, true, -1); + + ch = state.input.charCodeAt(state.position); + + if (state.lineIndent > 0 || 0x25/* % */ !== ch) { + break; + } + + hasDirectives = true; + ch = state.input.charCodeAt(++state.position); + _position = state.position; + + while (0 !== ch && !is_WS_OR_EOL(ch)) { + ch = state.input.charCodeAt(++state.position); + } + + directiveName = state.input.slice(_position, state.position); + directiveArgs = []; + + if (directiveName.length < 1) { + throwError(state, 'directive name must not be less than one character in length'); + } + + while (0 !== ch) { + while (is_WHITE_SPACE(ch)) { + ch = state.input.charCodeAt(++state.position); + } + + if (0x23/* # */ === ch) { + do { ch = state.input.charCodeAt(++state.position); } + while (0 !== ch && !is_EOL(ch)); + break; + } + + if (is_EOL(ch)) { + break; + } + + _position = state.position; + + while (0 !== ch && !is_WS_OR_EOL(ch)) { + ch = state.input.charCodeAt(++state.position); + } + + directiveArgs.push(state.input.slice(_position, state.position)); + } + + if (0 !== ch) { + readLineBreak(state); + } + + if (_hasOwnProperty.call(directiveHandlers, directiveName)) { + directiveHandlers[directiveName](state, directiveName, directiveArgs); + } else { + throwWarning(state, 'unknown document directive "' + directiveName + '"'); + } + } + + skipSeparationSpace(state, true, -1); + + if (0 === state.lineIndent && + 0x2D/* - */ === state.input.charCodeAt(state.position) && + 0x2D/* - */ === state.input.charCodeAt(state.position + 1) && + 0x2D/* - */ === state.input.charCodeAt(state.position + 2)) { + state.position += 3; + skipSeparationSpace(state, true, -1); + + } else if (hasDirectives) { + throwError(state, 'directives end mark is expected'); + } + + composeNode(state, state.lineIndent - 1, CONTEXT_BLOCK_OUT, false, true); + skipSeparationSpace(state, true, -1); + + if (state.checkLineBreaks && + PATTERN_NON_ASCII_LINE_BREAKS.test(state.input.slice(documentStart, state.position))) { + throwWarning(state, 'non-ASCII line breaks are interpreted as content'); + } + + state.documents.push(state.result); + + if (state.position === state.lineStart && testDocumentSeparator(state)) { + + if (0x2E/* . */ === state.input.charCodeAt(state.position)) { + state.position += 3; + skipSeparationSpace(state, true, -1); + } + return; + } + + if (state.position < (state.length - 1)) { + throwError(state, 'end of the stream or a document separator is expected'); + } else { + return; + } +} + + +function loadDocuments(input, options) { + input = String(input); + options = options || {}; + + if (input.length !== 0) { + + // Add tailing `\n` if not exists + if (0x0A/* LF */ !== input.charCodeAt(input.length - 1) && + 0x0D/* CR */ !== input.charCodeAt(input.length - 1)) { + input += '\n'; + } + + // Strip BOM + if (input.charCodeAt(0) === 0xFEFF) { + input = input.slice(1); + } + } + + var state = new State(input, options); + + if (PATTERN_NON_PRINTABLE.test(state.input)) { + throwError(state, 'the stream contains non-printable characters'); + } + + // Use 0 as string terminator. That significantly simplifies bounds check. + state.input += '\0'; + + while (0x20/* Space */ === state.input.charCodeAt(state.position)) { + state.lineIndent += 1; + state.position += 1; + } + + while (state.position < (state.length - 1)) { + readDocument(state); + } + + return state.documents; +} + + +function loadAll(input, iterator, options) { + var documents = loadDocuments(input, options), index, length; + + for (index = 0, length = documents.length; index < length; index += 1) { + iterator(documents[index]); + } +} + + +function load(input, options) { + var documents = loadDocuments(input, options), index, length; + + if (0 === documents.length) { + /*eslint-disable no-undefined*/ + return undefined; + } else if (1 === documents.length) { + return documents[0]; + } + throw new YAMLException('expected a single document in the stream, but found more'); +} + + +function safeLoadAll(input, output, options) { + loadAll(input, output, common.extend({ schema: DEFAULT_SAFE_SCHEMA }, options)); +} + + +function safeLoad(input, options) { + return load(input, common.extend({ schema: DEFAULT_SAFE_SCHEMA }, options)); +} + + +module.exports.loadAll = loadAll; +module.exports.load = load; +module.exports.safeLoadAll = safeLoadAll; +module.exports.safeLoad = safeLoad; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/mark.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/mark.js new file mode 100644 index 00000000..bfe279ba --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/mark.js @@ -0,0 +1,78 @@ +'use strict'; + + +var common = require('./common'); + + +function Mark(name, buffer, position, line, column) { + this.name = name; + this.buffer = buffer; + this.position = position; + this.line = line; + this.column = column; +} + + +Mark.prototype.getSnippet = function getSnippet(indent, maxLength) { + var head, start, tail, end, snippet; + + if (!this.buffer) { + return null; + } + + indent = indent || 4; + maxLength = maxLength || 75; + + head = ''; + start = this.position; + + while (start > 0 && -1 === '\x00\r\n\x85\u2028\u2029'.indexOf(this.buffer.charAt(start - 1))) { + start -= 1; + if (this.position - start > (maxLength / 2 - 1)) { + head = ' ... '; + start += 5; + break; + } + } + + tail = ''; + end = this.position; + + while (end < this.buffer.length && -1 === '\x00\r\n\x85\u2028\u2029'.indexOf(this.buffer.charAt(end))) { + end += 1; + if (end - this.position > (maxLength / 2 - 1)) { + tail = ' ... '; + end -= 5; + break; + } + } + + snippet = this.buffer.slice(start, end); + + return common.repeat(' ', indent) + head + snippet + tail + '\n' + + common.repeat(' ', indent + this.position - start + head.length) + '^'; +}; + + +Mark.prototype.toString = function toString(compact) { + var snippet, where = ''; + + if (this.name) { + where += 'in "' + this.name + '" '; + } + + where += 'at line ' + (this.line + 1) + ', column ' + (this.column + 1); + + if (!compact) { + snippet = this.getSnippet(); + + if (snippet) { + where += ':\n' + snippet; + } + } + + return where; +}; + + +module.exports = Mark; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/schema.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/schema.js new file mode 100644 index 00000000..984e2904 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/schema.js @@ -0,0 +1,104 @@ +'use strict'; + +/*eslint-disable max-len*/ + +var common = require('./common'); +var YAMLException = require('./exception'); +var Type = require('./type'); + + +function compileList(schema, name, result) { + var exclude = []; + + schema.include.forEach(function (includedSchema) { + result = compileList(includedSchema, name, result); + }); + + schema[name].forEach(function (currentType) { + result.forEach(function (previousType, previousIndex) { + if (previousType.tag === currentType.tag) { + exclude.push(previousIndex); + } + }); + + result.push(currentType); + }); + + return result.filter(function (type, index) { + return -1 === exclude.indexOf(index); + }); +} + + +function compileMap(/* lists... */) { + var result = {}, index, length; + + function collectType(type) { + result[type.tag] = type; + } + + for (index = 0, length = arguments.length; index < length; index += 1) { + arguments[index].forEach(collectType); + } + + return result; +} + + +function Schema(definition) { + this.include = definition.include || []; + this.implicit = definition.implicit || []; + this.explicit = definition.explicit || []; + + this.implicit.forEach(function (type) { + if (type.loadKind && 'scalar' !== type.loadKind) { + throw new YAMLException('There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.'); + } + }); + + this.compiledImplicit = compileList(this, 'implicit', []); + this.compiledExplicit = compileList(this, 'explicit', []); + this.compiledTypeMap = compileMap(this.compiledImplicit, this.compiledExplicit); +} + + +Schema.DEFAULT = null; + + +Schema.create = function createSchema() { + var schemas, types; + + switch (arguments.length) { + case 1: + schemas = Schema.DEFAULT; + types = arguments[0]; + break; + + case 2: + schemas = arguments[0]; + types = arguments[1]; + break; + + default: + throw new YAMLException('Wrong number of arguments for Schema.create function'); + } + + schemas = common.toArray(schemas); + types = common.toArray(types); + + if (!schemas.every(function (schema) { return schema instanceof Schema; })) { + throw new YAMLException('Specified list of super schemas (or a single Schema object) contains a non-Schema object.'); + } + + if (!types.every(function (type) { return type instanceof Type; })) { + throw new YAMLException('Specified list of YAML types (or a single Type object) contains a non-Type object.'); + } + + return new Schema({ + include: schemas, + explicit: types + }); +}; + + +module.exports = Schema; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/schema/core.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/schema/core.js new file mode 100644 index 00000000..206daab5 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/schema/core.js @@ -0,0 +1,18 @@ +// Standard YAML's Core schema. +// http://www.yaml.org/spec/1.2/spec.html#id2804923 +// +// NOTE: JS-YAML does not support schema-specific tag resolution restrictions. +// So, Core schema has no distinctions from JSON schema is JS-YAML. + + +'use strict'; + + +var Schema = require('../schema'); + + +module.exports = new Schema({ + include: [ + require('./json') + ] +}); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/schema/default_full.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/schema/default_full.js new file mode 100644 index 00000000..a55ef42a --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/schema/default_full.js @@ -0,0 +1,25 @@ +// JS-YAML's default schema for `load` function. +// It is not described in the YAML specification. +// +// This schema is based on JS-YAML's default safe schema and includes +// JavaScript-specific types: !!js/undefined, !!js/regexp and !!js/function. +// +// Also this schema is used as default base schema at `Schema.create` function. + + +'use strict'; + + +var Schema = require('../schema'); + + +module.exports = Schema.DEFAULT = new Schema({ + include: [ + require('./default_safe') + ], + explicit: [ + require('../type/js/undefined'), + require('../type/js/regexp'), + require('../type/js/function') + ] +}); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/schema/default_safe.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/schema/default_safe.js new file mode 100644 index 00000000..11d89bbf --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/schema/default_safe.js @@ -0,0 +1,28 @@ +// JS-YAML's default schema for `safeLoad` function. +// It is not described in the YAML specification. +// +// This schema is based on standard YAML's Core schema and includes most of +// extra types described at YAML tag repository. (http://yaml.org/type/) + + +'use strict'; + + +var Schema = require('../schema'); + + +module.exports = new Schema({ + include: [ + require('./core') + ], + implicit: [ + require('../type/timestamp'), + require('../type/merge') + ], + explicit: [ + require('../type/binary'), + require('../type/omap'), + require('../type/pairs'), + require('../type/set') + ] +}); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/schema/failsafe.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/schema/failsafe.js new file mode 100644 index 00000000..b7a33eb7 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/schema/failsafe.js @@ -0,0 +1,17 @@ +// Standard YAML's Failsafe schema. +// http://www.yaml.org/spec/1.2/spec.html#id2802346 + + +'use strict'; + + +var Schema = require('../schema'); + + +module.exports = new Schema({ + explicit: [ + require('../type/str'), + require('../type/seq'), + require('../type/map') + ] +}); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/schema/json.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/schema/json.js new file mode 100644 index 00000000..5be3dbf8 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/schema/json.js @@ -0,0 +1,25 @@ +// Standard YAML's JSON schema. +// http://www.yaml.org/spec/1.2/spec.html#id2803231 +// +// NOTE: JS-YAML does not support schema-specific tag resolution restrictions. +// So, this schema is not such strict as defined in the YAML specification. +// It allows numbers in binary notaion, use `Null` and `NULL` as `null`, etc. + + +'use strict'; + + +var Schema = require('../schema'); + + +module.exports = new Schema({ + include: [ + require('./failsafe') + ], + implicit: [ + require('../type/null'), + require('../type/bool'), + require('../type/int'), + require('../type/float') + ] +}); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/type.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/type.js new file mode 100644 index 00000000..5e3176ce --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/type.js @@ -0,0 +1,61 @@ +'use strict'; + +var YAMLException = require('./exception'); + +var TYPE_CONSTRUCTOR_OPTIONS = [ + 'kind', + 'resolve', + 'construct', + 'instanceOf', + 'predicate', + 'represent', + 'defaultStyle', + 'styleAliases' +]; + +var YAML_NODE_KINDS = [ + 'scalar', + 'sequence', + 'mapping' +]; + +function compileStyleAliases(map) { + var result = {}; + + if (null !== map) { + Object.keys(map).forEach(function (style) { + map[style].forEach(function (alias) { + result[String(alias)] = style; + }); + }); + } + + return result; +} + +function Type(tag, options) { + options = options || {}; + + Object.keys(options).forEach(function (name) { + if (-1 === TYPE_CONSTRUCTOR_OPTIONS.indexOf(name)) { + throw new YAMLException('Unknown option "' + name + '" is met in definition of "' + tag + '" YAML type.'); + } + }); + + // TODO: Add tag format check. + this.tag = tag; + this.kind = options['kind'] || null; + this.resolve = options['resolve'] || function () { return true; }; + this.construct = options['construct'] || function (data) { return data; }; + this.instanceOf = options['instanceOf'] || null; + this.predicate = options['predicate'] || null; + this.represent = options['represent'] || null; + this.defaultStyle = options['defaultStyle'] || null; + this.styleAliases = compileStyleAliases(options['styleAliases'] || null); + + if (-1 === YAML_NODE_KINDS.indexOf(this.kind)) { + throw new YAMLException('Unknown kind "' + this.kind + '" is specified for "' + tag + '" YAML type.'); + } +} + +module.exports = Type; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/type/binary.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/type/binary.js new file mode 100644 index 00000000..122155c7 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/type/binary.js @@ -0,0 +1,134 @@ +'use strict'; + +/*eslint-disable no-bitwise*/ + +// A trick for browserified version. +// Since we make browserifier to ignore `buffer` module, NodeBuffer will be undefined +var NodeBuffer = require('buffer').Buffer; +var Type = require('../type'); + + +// [ 64, 65, 66 ] -> [ padding, CR, LF ] +var BASE64_MAP = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r'; + + +function resolveYamlBinary(data) { + if (null === data) { + return false; + } + + var code, idx, bitlen = 0, len = 0, max = data.length, map = BASE64_MAP; + + // Convert one by one. + for (idx = 0; idx < max; idx++) { + code = map.indexOf(data.charAt(idx)); + + // Skip CR/LF + if (code > 64) { continue; } + + // Fail on illegal characters + if (code < 0) { return false; } + + bitlen += 6; + } + + // If there are any bits left, source was corrupted + return (bitlen % 8) === 0; +} + +function constructYamlBinary(data) { + var code, idx, tailbits, + input = data.replace(/[\r\n=]/g, ''), // remove CR/LF & padding to simplify scan + max = input.length, + map = BASE64_MAP, + bits = 0, + result = []; + + // Collect by 6*4 bits (3 bytes) + + for (idx = 0; idx < max; idx++) { + if ((idx % 4 === 0) && idx) { + result.push((bits >> 16) & 0xFF); + result.push((bits >> 8) & 0xFF); + result.push(bits & 0xFF); + } + + bits = (bits << 6) | map.indexOf(input.charAt(idx)); + } + + // Dump tail + + tailbits = (max % 4) * 6; + + if (tailbits === 0) { + result.push((bits >> 16) & 0xFF); + result.push((bits >> 8) & 0xFF); + result.push(bits & 0xFF); + } else if (tailbits === 18) { + result.push((bits >> 10) & 0xFF); + result.push((bits >> 2) & 0xFF); + } else if (tailbits === 12) { + result.push((bits >> 4) & 0xFF); + } + + // Wrap into Buffer for NodeJS and leave Array for browser + if (NodeBuffer) { + return new NodeBuffer(result); + } + + return result; +} + +function representYamlBinary(object /*, style*/) { + var result = '', bits = 0, idx, tail, + max = object.length, + map = BASE64_MAP; + + // Convert every three bytes to 4 ASCII characters. + + for (idx = 0; idx < max; idx++) { + if ((idx % 3 === 0) && idx) { + result += map[(bits >> 18) & 0x3F]; + result += map[(bits >> 12) & 0x3F]; + result += map[(bits >> 6) & 0x3F]; + result += map[bits & 0x3F]; + } + + bits = (bits << 8) + object[idx]; + } + + // Dump tail + + tail = max % 3; + + if (tail === 0) { + result += map[(bits >> 18) & 0x3F]; + result += map[(bits >> 12) & 0x3F]; + result += map[(bits >> 6) & 0x3F]; + result += map[bits & 0x3F]; + } else if (tail === 2) { + result += map[(bits >> 10) & 0x3F]; + result += map[(bits >> 4) & 0x3F]; + result += map[(bits << 2) & 0x3F]; + result += map[64]; + } else if (tail === 1) { + result += map[(bits >> 2) & 0x3F]; + result += map[(bits << 4) & 0x3F]; + result += map[64]; + result += map[64]; + } + + return result; +} + +function isBinary(object) { + return NodeBuffer && NodeBuffer.isBuffer(object); +} + +module.exports = new Type('tag:yaml.org,2002:binary', { + kind: 'scalar', + resolve: resolveYamlBinary, + construct: constructYamlBinary, + predicate: isBinary, + represent: representYamlBinary +}); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/type/bool.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/type/bool.js new file mode 100644 index 00000000..5c2a304d --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/type/bool.js @@ -0,0 +1,37 @@ +'use strict'; + +var Type = require('../type'); + +function resolveYamlBoolean(data) { + if (null === data) { + return false; + } + + var max = data.length; + + return (max === 4 && (data === 'true' || data === 'True' || data === 'TRUE')) || + (max === 5 && (data === 'false' || data === 'False' || data === 'FALSE')); +} + +function constructYamlBoolean(data) { + return data === 'true' || + data === 'True' || + data === 'TRUE'; +} + +function isBoolean(object) { + return '[object Boolean]' === Object.prototype.toString.call(object); +} + +module.exports = new Type('tag:yaml.org,2002:bool', { + kind: 'scalar', + resolve: resolveYamlBoolean, + construct: constructYamlBoolean, + predicate: isBoolean, + represent: { + lowercase: function (object) { return object ? 'true' : 'false'; }, + uppercase: function (object) { return object ? 'TRUE' : 'FALSE'; }, + camelcase: function (object) { return object ? 'True' : 'False'; } + }, + defaultStyle: 'lowercase' +}); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/type/float.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/type/float.js new file mode 100644 index 00000000..67c9c21f --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/type/float.js @@ -0,0 +1,108 @@ +'use strict'; + +var common = require('../common'); +var Type = require('../type'); + +var YAML_FLOAT_PATTERN = new RegExp( + '^(?:[-+]?(?:[0-9][0-9_]*)\\.[0-9_]*(?:[eE][-+][0-9]+)?' + + '|\\.[0-9_]+(?:[eE][-+][0-9]+)?' + + '|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*' + + '|[-+]?\\.(?:inf|Inf|INF)' + + '|\\.(?:nan|NaN|NAN))$'); + +function resolveYamlFloat(data) { + if (null === data) { + return false; + } + + var value, sign, base, digits; + + if (!YAML_FLOAT_PATTERN.test(data)) { + return false; + } + return true; +} + +function constructYamlFloat(data) { + var value, sign, base, digits; + + value = data.replace(/_/g, '').toLowerCase(); + sign = '-' === value[0] ? -1 : 1; + digits = []; + + if (0 <= '+-'.indexOf(value[0])) { + value = value.slice(1); + } + + if ('.inf' === value) { + return (1 === sign) ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY; + + } else if ('.nan' === value) { + return NaN; + + } else if (0 <= value.indexOf(':')) { + value.split(':').forEach(function (v) { + digits.unshift(parseFloat(v, 10)); + }); + + value = 0.0; + base = 1; + + digits.forEach(function (d) { + value += d * base; + base *= 60; + }); + + return sign * value; + + } + return sign * parseFloat(value, 10); +} + +function representYamlFloat(object, style) { + if (isNaN(object)) { + switch (style) { + case 'lowercase': + return '.nan'; + case 'uppercase': + return '.NAN'; + case 'camelcase': + return '.NaN'; + } + } else if (Number.POSITIVE_INFINITY === object) { + switch (style) { + case 'lowercase': + return '.inf'; + case 'uppercase': + return '.INF'; + case 'camelcase': + return '.Inf'; + } + } else if (Number.NEGATIVE_INFINITY === object) { + switch (style) { + case 'lowercase': + return '-.inf'; + case 'uppercase': + return '-.INF'; + case 'camelcase': + return '-.Inf'; + } + } else if (common.isNegativeZero(object)) { + return '-0.0'; + } + return object.toString(10); +} + +function isFloat(object) { + return ('[object Number]' === Object.prototype.toString.call(object)) && + (0 !== object % 1 || common.isNegativeZero(object)); +} + +module.exports = new Type('tag:yaml.org,2002:float', { + kind: 'scalar', + resolve: resolveYamlFloat, + construct: constructYamlFloat, + predicate: isFloat, + represent: representYamlFloat, + defaultStyle: 'lowercase' +}); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/type/int.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/type/int.js new file mode 100644 index 00000000..800f1060 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/type/int.js @@ -0,0 +1,183 @@ +'use strict'; + +var common = require('../common'); +var Type = require('../type'); + +function isHexCode(c) { + return ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) || + ((0x41/* A */ <= c) && (c <= 0x46/* F */)) || + ((0x61/* a */ <= c) && (c <= 0x66/* f */)); +} + +function isOctCode(c) { + return ((0x30/* 0 */ <= c) && (c <= 0x37/* 7 */)); +} + +function isDecCode(c) { + return ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)); +} + +function resolveYamlInteger(data) { + if (null === data) { + return false; + } + + var max = data.length, + index = 0, + hasDigits = false, + ch; + + if (!max) { return false; } + + ch = data[index]; + + // sign + if (ch === '-' || ch === '+') { + ch = data[++index]; + } + + if (ch === '0') { + // 0 + if (index + 1 === max) { return true; } + ch = data[++index]; + + // base 2, base 8, base 16 + + if (ch === 'b') { + // base 2 + index++; + + for (; index < max; index++) { + ch = data[index]; + if (ch === '_') { continue; } + if (ch !== '0' && ch !== '1') { + return false; + } + hasDigits = true; + } + return hasDigits; + } + + + if (ch === 'x') { + // base 16 + index++; + + for (; index < max; index++) { + ch = data[index]; + if (ch === '_') { continue; } + if (!isHexCode(data.charCodeAt(index))) { + return false; + } + hasDigits = true; + } + return hasDigits; + } + + // base 8 + for (; index < max; index++) { + ch = data[index]; + if (ch === '_') { continue; } + if (!isOctCode(data.charCodeAt(index))) { + return false; + } + hasDigits = true; + } + return hasDigits; + } + + // base 10 (except 0) or base 60 + + for (; index < max; index++) { + ch = data[index]; + if (ch === '_') { continue; } + if (ch === ':') { break; } + if (!isDecCode(data.charCodeAt(index))) { + return false; + } + hasDigits = true; + } + + if (!hasDigits) { return false; } + + // if !base60 - done; + if (ch !== ':') { return true; } + + // base60 almost not used, no needs to optimize + return /^(:[0-5]?[0-9])+$/.test(data.slice(index)); +} + +function constructYamlInteger(data) { + var value = data, sign = 1, ch, base, digits = []; + + if (value.indexOf('_') !== -1) { + value = value.replace(/_/g, ''); + } + + ch = value[0]; + + if (ch === '-' || ch === '+') { + if (ch === '-') { sign = -1; } + value = value.slice(1); + ch = value[0]; + } + + if ('0' === value) { + return 0; + } + + if (ch === '0') { + if (value[1] === 'b') { + return sign * parseInt(value.slice(2), 2); + } + if (value[1] === 'x') { + return sign * parseInt(value, 16); + } + return sign * parseInt(value, 8); + + } + + if (value.indexOf(':') !== -1) { + value.split(':').forEach(function (v) { + digits.unshift(parseInt(v, 10)); + }); + + value = 0; + base = 1; + + digits.forEach(function (d) { + value += (d * base); + base *= 60; + }); + + return sign * value; + + } + + return sign * parseInt(value, 10); +} + +function isInteger(object) { + return ('[object Number]' === Object.prototype.toString.call(object)) && + (0 === object % 1 && !common.isNegativeZero(object)); +} + +module.exports = new Type('tag:yaml.org,2002:int', { + kind: 'scalar', + resolve: resolveYamlInteger, + construct: constructYamlInteger, + predicate: isInteger, + represent: { + binary: function (object) { return '0b' + object.toString(2); }, + octal: function (object) { return '0' + object.toString(8); }, + decimal: function (object) { return object.toString(10); }, + hexadecimal: function (object) { return '0x' + object.toString(16).toUpperCase(); } + }, + defaultStyle: 'decimal', + styleAliases: { + binary: [ 2, 'bin' ], + octal: [ 8, 'oct' ], + decimal: [ 10, 'dec' ], + hexadecimal: [ 16, 'hex' ] + } +}); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/type/js/function.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/type/js/function.js new file mode 100644 index 00000000..4061c43a --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/type/js/function.js @@ -0,0 +1,86 @@ +'use strict'; + +var esprima; + +// Browserified version does not have esprima +// +// 1. For node.js just require module as deps +// 2. For browser try to require mudule via external AMD system. +// If not found - try to fallback to window.esprima. If not +// found too - then fail to parse. +// +try { + esprima = require('esprima'); +} catch (_) { + /*global window */ + if (typeof window !== 'undefined') { esprima = window.esprima; } +} + +var Type = require('../../type'); + +function resolveJavascriptFunction(data) { + if (null === data) { + return false; + } + + try { + var source = '(' + data + ')', + ast = esprima.parse(source, { range: true }), + params = [], + body; + + if ('Program' !== ast.type || + 1 !== ast.body.length || + 'ExpressionStatement' !== ast.body[0].type || + 'FunctionExpression' !== ast.body[0].expression.type) { + return false; + } + + return true; + } catch (err) { + return false; + } +} + +function constructJavascriptFunction(data) { + /*jslint evil:true*/ + + var source = '(' + data + ')', + ast = esprima.parse(source, { range: true }), + params = [], + body; + + if ('Program' !== ast.type || + 1 !== ast.body.length || + 'ExpressionStatement' !== ast.body[0].type || + 'FunctionExpression' !== ast.body[0].expression.type) { + throw new Error('Failed to resolve function'); + } + + ast.body[0].expression.params.forEach(function (param) { + params.push(param.name); + }); + + body = ast.body[0].expression.body.range; + + // Esprima's ranges include the first '{' and the last '}' characters on + // function expressions. So cut them out. + /*eslint-disable no-new-func*/ + return new Function(params, source.slice(body[0] + 1, body[1] - 1)); +} + +function representJavascriptFunction(object /*, style*/) { + return object.toString(); +} + +function isFunction(object) { + return '[object Function]' === Object.prototype.toString.call(object); +} + +module.exports = new Type('tag:yaml.org,2002:js/function', { + kind: 'scalar', + resolve: resolveJavascriptFunction, + construct: constructJavascriptFunction, + predicate: isFunction, + represent: representJavascriptFunction +}); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/type/js/regexp.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/type/js/regexp.js new file mode 100644 index 00000000..07ef5218 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/type/js/regexp.js @@ -0,0 +1,84 @@ +'use strict'; + +var Type = require('../../type'); + +function resolveJavascriptRegExp(data) { + if (null === data) { + return false; + } + + if (0 === data.length) { + return false; + } + + var regexp = data, + tail = /\/([gim]*)$/.exec(data), + modifiers = ''; + + // if regexp starts with '/' it can have modifiers and must be properly closed + // `/foo/gim` - modifiers tail can be maximum 3 chars + if ('/' === regexp[0]) { + if (tail) { + modifiers = tail[1]; + } + + if (modifiers.length > 3) { return false; } + // if expression starts with /, is should be properly terminated + if (regexp[regexp.length - modifiers.length - 1] !== '/') { return false; } + + regexp = regexp.slice(1, regexp.length - modifiers.length - 1); + } + + try { + var dummy = new RegExp(regexp, modifiers); + return true; + } catch (error) { + return false; + } +} + +function constructJavascriptRegExp(data) { + var regexp = data, + tail = /\/([gim]*)$/.exec(data), + modifiers = ''; + + // `/foo/gim` - tail can be maximum 4 chars + if ('/' === regexp[0]) { + if (tail) { + modifiers = tail[1]; + } + regexp = regexp.slice(1, regexp.length - modifiers.length - 1); + } + + return new RegExp(regexp, modifiers); +} + +function representJavascriptRegExp(object /*, style*/) { + var result = '/' + object.source + '/'; + + if (object.global) { + result += 'g'; + } + + if (object.multiline) { + result += 'm'; + } + + if (object.ignoreCase) { + result += 'i'; + } + + return result; +} + +function isRegExp(object) { + return '[object RegExp]' === Object.prototype.toString.call(object); +} + +module.exports = new Type('tag:yaml.org,2002:js/regexp', { + kind: 'scalar', + resolve: resolveJavascriptRegExp, + construct: constructJavascriptRegExp, + predicate: isRegExp, + represent: representJavascriptRegExp +}); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/type/js/undefined.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/type/js/undefined.js new file mode 100644 index 00000000..562753c2 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/type/js/undefined.js @@ -0,0 +1,28 @@ +'use strict'; + +var Type = require('../../type'); + +function resolveJavascriptUndefined() { + return true; +} + +function constructJavascriptUndefined() { + /*eslint-disable no-undefined*/ + return undefined; +} + +function representJavascriptUndefined() { + return ''; +} + +function isUndefined(object) { + return 'undefined' === typeof object; +} + +module.exports = new Type('tag:yaml.org,2002:js/undefined', { + kind: 'scalar', + resolve: resolveJavascriptUndefined, + construct: constructJavascriptUndefined, + predicate: isUndefined, + represent: representJavascriptUndefined +}); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/type/map.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/type/map.js new file mode 100644 index 00000000..dab9838c --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/type/map.js @@ -0,0 +1,8 @@ +'use strict'; + +var Type = require('../type'); + +module.exports = new Type('tag:yaml.org,2002:map', { + kind: 'mapping', + construct: function (data) { return null !== data ? data : {}; } +}); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/type/merge.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/type/merge.js new file mode 100644 index 00000000..29fa3827 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/type/merge.js @@ -0,0 +1,12 @@ +'use strict'; + +var Type = require('../type'); + +function resolveYamlMerge(data) { + return '<<' === data || null === data; +} + +module.exports = new Type('tag:yaml.org,2002:merge', { + kind: 'scalar', + resolve: resolveYamlMerge +}); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/type/null.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/type/null.js new file mode 100644 index 00000000..34740556 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/type/null.js @@ -0,0 +1,36 @@ +'use strict'; + +var Type = require('../type'); + +function resolveYamlNull(data) { + if (null === data) { + return true; + } + + var max = data.length; + + return (max === 1 && data === '~') || + (max === 4 && (data === 'null' || data === 'Null' || data === 'NULL')); +} + +function constructYamlNull() { + return null; +} + +function isNull(object) { + return null === object; +} + +module.exports = new Type('tag:yaml.org,2002:null', { + kind: 'scalar', + resolve: resolveYamlNull, + construct: constructYamlNull, + predicate: isNull, + represent: { + canonical: function () { return '~'; }, + lowercase: function () { return 'null'; }, + uppercase: function () { return 'NULL'; }, + camelcase: function () { return 'Null'; } + }, + defaultStyle: 'lowercase' +}); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/type/omap.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/type/omap.js new file mode 100644 index 00000000..f956459a --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/type/omap.js @@ -0,0 +1,56 @@ +'use strict'; + +var Type = require('../type'); + +var _hasOwnProperty = Object.prototype.hasOwnProperty; +var _toString = Object.prototype.toString; + +function resolveYamlOmap(data) { + if (null === data) { + return true; + } + + var objectKeys = [], index, length, pair, pairKey, pairHasKey, + object = data; + + for (index = 0, length = object.length; index < length; index += 1) { + pair = object[index]; + pairHasKey = false; + + if ('[object Object]' !== _toString.call(pair)) { + return false; + } + + for (pairKey in pair) { + if (_hasOwnProperty.call(pair, pairKey)) { + if (!pairHasKey) { + pairHasKey = true; + } else { + return false; + } + } + } + + if (!pairHasKey) { + return false; + } + + if (-1 === objectKeys.indexOf(pairKey)) { + objectKeys.push(pairKey); + } else { + return false; + } + } + + return true; +} + +function constructYamlOmap(data) { + return null !== data ? data : []; +} + +module.exports = new Type('tag:yaml.org,2002:omap', { + kind: 'sequence', + resolve: resolveYamlOmap, + construct: constructYamlOmap +}); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/type/pairs.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/type/pairs.js new file mode 100644 index 00000000..02a0af6b --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/type/pairs.js @@ -0,0 +1,61 @@ +'use strict'; + +var Type = require('../type'); + +var _toString = Object.prototype.toString; + +function resolveYamlPairs(data) { + if (null === data) { + return true; + } + + var index, length, pair, keys, result, + object = data; + + result = new Array(object.length); + + for (index = 0, length = object.length; index < length; index += 1) { + pair = object[index]; + + if ('[object Object]' !== _toString.call(pair)) { + return false; + } + + keys = Object.keys(pair); + + if (1 !== keys.length) { + return false; + } + + result[index] = [ keys[0], pair[keys[0]] ]; + } + + return true; +} + +function constructYamlPairs(data) { + if (null === data) { + return []; + } + + var index, length, pair, keys, result, + object = data; + + result = new Array(object.length); + + for (index = 0, length = object.length; index < length; index += 1) { + pair = object[index]; + + keys = Object.keys(pair); + + result[index] = [ keys[0], pair[keys[0]] ]; + } + + return result; +} + +module.exports = new Type('tag:yaml.org,2002:pairs', { + kind: 'sequence', + resolve: resolveYamlPairs, + construct: constructYamlPairs +}); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/type/seq.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/type/seq.js new file mode 100644 index 00000000..5b860a26 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/type/seq.js @@ -0,0 +1,8 @@ +'use strict'; + +var Type = require('../type'); + +module.exports = new Type('tag:yaml.org,2002:seq', { + kind: 'sequence', + construct: function (data) { return null !== data ? data : []; } +}); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/type/set.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/type/set.js new file mode 100644 index 00000000..64d29e9b --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/type/set.js @@ -0,0 +1,33 @@ +'use strict'; + +var Type = require('../type'); + +var _hasOwnProperty = Object.prototype.hasOwnProperty; + +function resolveYamlSet(data) { + if (null === data) { + return true; + } + + var key, object = data; + + for (key in object) { + if (_hasOwnProperty.call(object, key)) { + if (null !== object[key]) { + return false; + } + } + } + + return true; +} + +function constructYamlSet(data) { + return null !== data ? data : {}; +} + +module.exports = new Type('tag:yaml.org,2002:set', { + kind: 'mapping', + resolve: resolveYamlSet, + construct: constructYamlSet +}); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/type/str.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/type/str.js new file mode 100644 index 00000000..8b5284fe --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/type/str.js @@ -0,0 +1,8 @@ +'use strict'; + +var Type = require('../type'); + +module.exports = new Type('tag:yaml.org,2002:str', { + kind: 'scalar', + construct: function (data) { return null !== data ? data : ''; } +}); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/type/timestamp.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/type/timestamp.js new file mode 100644 index 00000000..dc8cf15a --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/lib/js-yaml/type/timestamp.js @@ -0,0 +1,98 @@ +'use strict'; + +var Type = require('../type'); + +var YAML_TIMESTAMP_REGEXP = new RegExp( + '^([0-9][0-9][0-9][0-9])' + // [1] year + '-([0-9][0-9]?)' + // [2] month + '-([0-9][0-9]?)' + // [3] day + '(?:(?:[Tt]|[ \\t]+)' + // ... + '([0-9][0-9]?)' + // [4] hour + ':([0-9][0-9])' + // [5] minute + ':([0-9][0-9])' + // [6] second + '(?:\\.([0-9]*))?' + // [7] fraction + '(?:[ \\t]*(Z|([-+])([0-9][0-9]?)' + // [8] tz [9] tz_sign [10] tz_hour + '(?::([0-9][0-9]))?))?)?$'); // [11] tz_minute + +function resolveYamlTimestamp(data) { + if (null === data) { + return false; + } + + var match, year, month, day, hour, minute, second, fraction = 0, + delta = null, tz_hour, tz_minute, date; + + match = YAML_TIMESTAMP_REGEXP.exec(data); + + if (null === match) { + return false; + } + + return true; +} + +function constructYamlTimestamp(data) { + var match, year, month, day, hour, minute, second, fraction = 0, + delta = null, tz_hour, tz_minute, date; + + match = YAML_TIMESTAMP_REGEXP.exec(data); + + if (null === match) { + throw new Error('Date resolve error'); + } + + // match: [1] year [2] month [3] day + + year = +(match[1]); + month = +(match[2]) - 1; // JS month starts with 0 + day = +(match[3]); + + if (!match[4]) { // no hour + return new Date(Date.UTC(year, month, day)); + } + + // match: [4] hour [5] minute [6] second [7] fraction + + hour = +(match[4]); + minute = +(match[5]); + second = +(match[6]); + + if (match[7]) { + fraction = match[7].slice(0, 3); + while (fraction.length < 3) { // milli-seconds + fraction += '0'; + } + fraction = +fraction; + } + + // match: [8] tz [9] tz_sign [10] tz_hour [11] tz_minute + + if (match[9]) { + tz_hour = +(match[10]); + tz_minute = +(match[11] || 0); + delta = (tz_hour * 60 + tz_minute) * 60000; // delta in mili-seconds + if ('-' === match[9]) { + delta = -delta; + } + } + + date = new Date(Date.UTC(year, month, day, hour, minute, second, fraction)); + + if (delta) { + date.setTime(date.getTime() - delta); + } + + return date; +} + +function representYamlTimestamp(object /*, style*/) { + return object.toISOString(); +} + +module.exports = new Type('tag:yaml.org,2002:timestamp', { + kind: 'scalar', + resolve: resolveYamlTimestamp, + construct: constructYamlTimestamp, + instanceOf: Date, + represent: representYamlTimestamp +}); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/.bin/esparse b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/.bin/esparse new file mode 100644 index 00000000..efad1e92 Binary files /dev/null and b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/.bin/esparse differ diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/.bin/esvalidate b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/.bin/esvalidate new file mode 100644 index 00000000..a485acc5 Binary files /dev/null and b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/.bin/esvalidate differ diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/CHANGELOG.md b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/CHANGELOG.md new file mode 100644 index 00000000..661e75d7 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/CHANGELOG.md @@ -0,0 +1,136 @@ +1.0.2 / 2015-03-22 +------------------ + +* Relaxed lodash version dependency. + + +1.0.1 / 2015-02-20 +------------------ + +* Changed dependencies to be compatible with ancient nodejs. + + +1.0.0 / 2015-02-19 +------------------ + +* Maintenance release. +* Replaced `underscore` with `lodash`. +* Bumped version to 1.0.0 to better reflect semver meaning. +* HISTORY.md -> CHANGELOG.md + + +0.1.16 / 2013-12-01 +------------------- + +* Maintenance release. Updated dependencies and docs. + + +0.1.15 / 2013-05-13 +------------------- + +* Fixed #55, @trebor89 + + +0.1.14 / 2013-05-12 +------------------- + +* Fixed #62, @maxtaco + + +0.1.13 / 2013-04-08 +------------------- + +* Added `.npmignore` to reduce package size + + +0.1.12 / 2013-02-10 +------------------- + +* Fixed conflictHandler (#46), @hpaulj + + +0.1.11 / 2013-02-07 +------------------- + +* Multiple bugfixes, @hpaulj +* Added 70+ tests (ported from python), @hpaulj +* Added conflictHandler, @applepicke +* Added fromfilePrefixChar, @hpaulj + + +0.1.10 / 2012-12-30 +------------------- + +* Added [mutual exclusion](http://docs.python.org/dev/library/argparse.html#mutual-exclusion) + support, thanks to @hpaulj +* Fixed options check for `storeConst` & `appendConst` actions, thanks to @hpaulj + + +0.1.9 / 2012-12-27 +------------------ + +* Fixed option dest interferens with other options (issue #23), thanks to @hpaulj +* Fixed default value behavior with `*` positionals, thanks to @hpaulj +* Improve `getDefault()` behavior, thanks to @hpaulj +* Imrove negative argument parsing, thanks to @hpaulj + + +0.1.8 / 2012-12-01 +------------------ + +* Fixed parser parents (issue #19), thanks to @hpaulj +* Fixed negative argument parse (issue #20), thanks to @hpaulj + + +0.1.7 / 2012-10-14 +------------------ + +* Fixed 'choices' argument parse (issue #16) +* Fixed stderr output (issue #15) + + +0.1.6 / 2012-09-09 +------------------ + +* Fixed check for conflict of options (thanks to @tomxtobin) + + +0.1.5 / 2012-09-03 +------------------ + +* Fix parser #setDefaults method (thanks to @tomxtobin) + + +0.1.4 / 2012-07-30 +------------------ + +* Fixed pseudo-argument support (thanks to @CGamesPlay) +* Fixed addHelp default (should be true), if not set (thanks to @benblank) + + +0.1.3 / 2012-06-27 +------------------ + +* Fixed formatter api name: Formatter -> HelpFormatter + + +0.1.2 / 2012-05-29 +------------------ + +* Added basic tests +* Removed excess whitespace in help +* Fixed error reporting, when parcer with subcommands + called with empty arguments + + +0.1.1 / 2012-05-23 +------------------ + +* Fixed line wrapping in help formatter +* Added better error reporting on invalid arguments + + +0.1.0 / 2012-05-16 +------------------ + +* First release. diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/LICENSE b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/LICENSE new file mode 100644 index 00000000..1afdae55 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/LICENSE @@ -0,0 +1,21 @@ +(The MIT License) + +Copyright (C) 2012 by Vitaly Puzrin + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/README.md b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/README.md new file mode 100644 index 00000000..72e42616 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/README.md @@ -0,0 +1,243 @@ +argparse +======== + +[![Build Status](https://secure.travis-ci.org/nodeca/argparse.png?branch=master)](http://travis-ci.org/nodeca/argparse) +[![NPM version](https://img.shields.io/npm/v/argparse.svg)](https://www.npmjs.org/package/argparse) + +CLI arguments parser for node.js. Javascript port of python's +[argparse](http://docs.python.org/dev/library/argparse.html) module +(original version 3.2). That's a full port, except some very rare options, +recorded in issue tracker. + +**NB. Difference with original.** + +- Method names changed to camelCase. See [generated docs](http://nodeca.github.com/argparse/). +- Use `defaultValue` instead of `default`. + + +Example +======= + +test.js file: + +```javascript +#!/usr/bin/env node +'use strict'; + +var ArgumentParser = require('../lib/argparse').ArgumentParser; +var parser = new ArgumentParser({ + version: '0.0.1', + addHelp:true, + description: 'Argparse example' +}); +parser.addArgument( + [ '-f', '--foo' ], + { + help: 'foo bar' + } +); +parser.addArgument( + [ '-b', '--bar' ], + { + help: 'bar foo' + } +); +var args = parser.parseArgs(); +console.dir(args); +``` + +Display help: + +``` +$ ./test.js -h +usage: example.js [-h] [-v] [-f FOO] [-b BAR] + +Argparse example + +Optional arguments: + -h, --help Show this help message and exit. + -v, --version Show program's version number and exit. + -f FOO, --foo FOO foo bar + -b BAR, --bar BAR bar foo +``` + +Parse arguments: + +``` +$ ./test.js -f=3 --bar=4 +{ foo: '3', bar: '4' } +``` + +More [examples](https://github.com/nodeca/argparse/tree/master/examples). + + +ArgumentParser objects +====================== + +``` +new ArgumentParser({paramters hash}); +``` + +Creates a new ArgumentParser object. + +**Supported params:** + +- ```description``` - Text to display before the argument help. +- ```epilog``` - Text to display after the argument help. +- ```addHelp``` - Add a -h/–help option to the parser. (default: true) +- ```argumentDefault``` - Set the global default value for arguments. (default: null) +- ```parents``` - A list of ArgumentParser objects whose arguments should also be included. +- ```prefixChars``` - The set of characters that prefix optional arguments. (default: ‘-‘) +- ```formatterClass``` - A class for customizing the help output. +- ```prog``` - The name of the program (default: `path.basename(process.argv[1])`) +- ```usage``` - The string describing the program usage (default: generated) +- ```conflictHandler``` - Usually unnecessary, defines strategy for resolving conflicting optionals. + +**Not supportied yet** + +- ```fromfilePrefixChars``` - The set of characters that prefix files from which additional arguments should be read. + + +Details in [original ArgumentParser guide](http://docs.python.org/dev/library/argparse.html#argumentparser-objects) + + +addArgument() method +==================== + +``` +ArgumentParser.addArgument([names or flags], {options}) +``` + +Defines how a single command-line argument should be parsed. + +- ```name or flags``` - Either a name or a list of option strings, e.g. foo or -f, --foo. + +Options: + +- ```action``` - The basic type of action to be taken when this argument is encountered at the command line. +- ```nargs```- The number of command-line arguments that should be consumed. +- ```constant``` - A constant value required by some action and nargs selections. +- ```defaultValue``` - The value produced if the argument is absent from the command line. +- ```type``` - The type to which the command-line argument should be converted. +- ```choices``` - A container of the allowable values for the argument. +- ```required``` - Whether or not the command-line option may be omitted (optionals only). +- ```help``` - A brief description of what the argument does. +- ```metavar``` - A name for the argument in usage messages. +- ```dest``` - The name of the attribute to be added to the object returned by parseArgs(). + +Details in [original add_argument guide](http://docs.python.org/dev/library/argparse.html#the-add-argument-method) + + +Action (some details) +================ + +ArgumentParser objects associate command-line arguments with actions. +These actions can do just about anything with the command-line arguments associated +with them, though most actions simply add an attribute to the object returned by +parseArgs(). The action keyword argument specifies how the command-line arguments +should be handled. The supported actions are: + +- ```store``` - Just stores the argument’s value. This is the default action. +- ```storeConst``` - Stores value, specified by the const keyword argument. + (Note that the const keyword argument defaults to the rather unhelpful None.) + The 'storeConst' action is most commonly used with optional arguments, that + specify some sort of flag. +- ```storeTrue``` and ```storeFalse``` - Stores values True and False + respectively. These are special cases of 'storeConst'. +- ```append``` - Stores a list, and appends each argument value to the list. + This is useful to allow an option to be specified multiple times. +- ```appendConst``` - Stores a list, and appends value, specified by the + const keyword argument to the list. (Note, that the const keyword argument defaults + is None.) The 'appendConst' action is typically used when multiple arguments need + to store constants to the same list. +- ```count``` - Counts the number of times a keyword argument occurs. For example, + used for increasing verbosity levels. +- ```help``` - Prints a complete help message for all the options in the current + parser and then exits. By default a help action is automatically added to the parser. + See ArgumentParser for details of how the output is created. +- ```version``` - Prints version information and exit. Expects a `version=` + keyword argument in the addArgument() call. + +Details in [original action guide](http://docs.python.org/dev/library/argparse.html#action) + + +Sub-commands +============ + +ArgumentParser.addSubparsers() + +Many programs split their functionality into a number of sub-commands, for +example, the svn program can invoke sub-commands like `svn checkout`, `svn update`, +and `svn commit`. Splitting up functionality this way can be a particularly good +idea when a program performs several different functions which require different +kinds of command-line arguments. `ArgumentParser` supports creation of such +sub-commands with `addSubparsers()` method. The `addSubparsers()` method is +normally called with no arguments and returns an special action object. +This object has a single method `addParser()`, which takes a command name and +any `ArgumentParser` constructor arguments, and returns an `ArgumentParser` object +that can be modified as usual. + +Example: + +sub_commands.js +```javascript +#!/usr/bin/env node +'use strict'; + +var ArgumentParser = require('../lib/argparse').ArgumentParser; +var parser = new ArgumentParser({ + version: '0.0.1', + addHelp:true, + description: 'Argparse examples: sub-commands', +}); + +var subparsers = parser.addSubparsers({ + title:'subcommands', + dest:"subcommand_name" +}); + +var bar = subparsers.addParser('c1', {addHelp:true}); +bar.addArgument( + [ '-f', '--foo' ], + { + action: 'store', + help: 'foo3 bar3' + } +); +var bar = subparsers.addParser( + 'c2', + {aliases:['co'], addHelp:true} +); +bar.addArgument( + [ '-b', '--bar' ], + { + action: 'store', + type: 'int', + help: 'foo3 bar3' + } +); + +var args = parser.parseArgs(); +console.dir(args); + +``` + +Details in [original sub-commands guide](http://docs.python.org/dev/library/argparse.html#sub-commands) + + +Contributors +============ + +- [Eugene Shkuropat](https://github.com/shkuropat) +- [Paul Jacobson](https://github.com/hpaulj) + +[others](https://github.com/nodeca/argparse/graphs/contributors) + +License +======= + +Copyright (c) 2012 [Vitaly Puzrin](https://github.com/puzrin). +Released under the MIT license. See +[LICENSE](https://github.com/nodeca/argparse/blob/master/LICENSE) for details. + + diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/examples/arguments.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/examples/arguments.js new file mode 100644 index 00000000..5b090fa2 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/examples/arguments.js @@ -0,0 +1,36 @@ +#!/usr/bin/env node +'use strict'; + +var ArgumentParser = require('../lib/argparse').ArgumentParser; +var parser = new ArgumentParser({ + version: '0.0.1', + addHelp: true, + description: 'Argparse examples: arguments' +}); +parser.addArgument( + [ '-f', '--foo' ], + { + help: 'foo bar' + } +); +parser.addArgument( + [ '-b', '--bar' ], + { + help: 'bar foo' + } +); + + +parser.printHelp(); +console.log('-----------'); + +var args; +args = parser.parseArgs('-f 1 -b2'.split(' ')); +console.dir(args); +console.log('-----------'); +args = parser.parseArgs('-f=3 --bar=4'.split(' ')); +console.dir(args); +console.log('-----------'); +args = parser.parseArgs('--foo 5 --bar 6'.split(' ')); +console.dir(args); +console.log('-----------'); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/examples/choice.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/examples/choice.js new file mode 100644 index 00000000..2616fa4d --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/examples/choice.js @@ -0,0 +1,22 @@ +#!/usr/bin/env node +'use strict'; + +var ArgumentParser = require('../lib/argparse').ArgumentParser; +var parser = new ArgumentParser({ + version: '0.0.1', + addHelp: true, + description: 'Argparse examples: choice' +}); + +parser.addArgument(['foo'], {choices: 'abc'}); + +parser.printHelp(); +console.log('-----------'); + +var args; +args = parser.parseArgs(['c']); +console.dir(args); +console.log('-----------'); +parser.parseArgs(['X']); +console.dir(args); + diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/examples/constants.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/examples/constants.js new file mode 100644 index 00000000..172a4f3d --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/examples/constants.js @@ -0,0 +1,59 @@ +#!/usr/bin/env node +'use strict'; + +var ArgumentParser = require('../lib/argparse').ArgumentParser; +var parser = new ArgumentParser({ + version: '0.0.1', + addHelp: true, + description: 'Argparse examples: constant' +}); + +parser.addArgument( + [ '-a'], + { + action: 'storeConst', + dest: 'answer', + help: 'store constant', + constant: 42 + } +); +parser.addArgument( + [ '--str' ], + { + action: 'appendConst', + dest: 'types', + help: 'append constant "str" to types', + constant: 'str' + } +); +parser.addArgument( + [ '--int' ], + { + action: 'appendConst', + dest: 'types', + help: 'append constant "int" to types', + constant: 'int' + } +); + +parser.addArgument( + [ '--true' ], + { + action: 'storeTrue', + help: 'store true constant' + } +); +parser.addArgument( + [ '--false' ], + { + action: 'storeFalse', + help: 'store false constant' + } +); + +parser.printHelp(); +console.log('-----------'); + +var args; +args = parser.parseArgs('-a --str --int --true'.split(' ')); +console.dir(args); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/examples/help.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/examples/help.js new file mode 100644 index 00000000..7eb95553 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/examples/help.js @@ -0,0 +1,13 @@ +#!/usr/bin/env node +'use strict'; + +var ArgumentParser = require('../lib/argparse').ArgumentParser; +var parser = new ArgumentParser({ + version: '0.0.1', + addHelp: true, + description: 'Argparse examples: help', + epilog: 'help epilog', + prog: 'help_example_prog', + usage: 'Usage %(prog)s <agrs>' +}); +parser.printHelp(); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/examples/nargs.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/examples/nargs.js new file mode 100644 index 00000000..74f376be --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/examples/nargs.js @@ -0,0 +1,33 @@ +#!/usr/bin/env node +'use strict'; + +var ArgumentParser = require('../lib/argparse').ArgumentParser; +var parser = new ArgumentParser({ + version: '0.0.1', + addHelp: true, + description: 'Argparse examples: nargs' +}); +parser.addArgument( + [ '-f', '--foo' ], + { + help: 'foo bar', + nargs: 1 + } +); +parser.addArgument( + [ '-b', '--bar' ], + { + help: 'bar foo', + nargs: '*' + } +); + +parser.printHelp(); +console.log('-----------'); + +var args; +args = parser.parseArgs('--foo a --bar c d'.split(' ')); +console.dir(args); +console.log('-----------'); +args = parser.parseArgs('--bar b c f --foo a'.split(' ')); +console.dir(args); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/examples/parents.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/examples/parents.js new file mode 100644 index 00000000..dfe89686 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/examples/parents.js @@ -0,0 +1,28 @@ +#!/usr/bin/env node +'use strict'; + +var ArgumentParser = require('../lib/argparse').ArgumentParser; + +var args; +var parent_parser = new ArgumentParser({ addHelp: false }); +// note addHelp:false to prevent duplication of the -h option +parent_parser.addArgument( + ['--parent'], + { type: 'int', description: 'parent' } +); + +var foo_parser = new ArgumentParser({ + parents: [ parent_parser ], + description: 'child1' +}); +foo_parser.addArgument(['foo']); +args = foo_parser.parseArgs(['--parent', '2', 'XXX']); +console.log(args); + +var bar_parser = new ArgumentParser({ + parents: [ parent_parser ], + description: 'child2' +}); +bar_parser.addArgument(['--bar']); +args = bar_parser.parseArgs(['--bar', 'YYY']); +console.log(args); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/examples/prefix_chars.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/examples/prefix_chars.js new file mode 100644 index 00000000..430d5e18 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/examples/prefix_chars.js @@ -0,0 +1,23 @@ +#!/usr/bin/env node +'use strict'; + +var ArgumentParser = require('../lib/argparse').ArgumentParser; +var parser = new ArgumentParser({ + version: '0.0.1', + addHelp: true, + description: 'Argparse examples: prefix_chars', + prefixChars: '-+' +}); +parser.addArgument(['+f', '++foo']); +parser.addArgument(['++bar'], {action: 'storeTrue'}); + +parser.printHelp(); +console.log('-----------'); + +var args; +args = parser.parseArgs(['+f', '1']); +console.dir(args); +args = parser.parseArgs(['++bar']); +console.dir(args); +args = parser.parseArgs(['++foo', '2', '++bar']); +console.dir(args); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/examples/sub_commands.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/examples/sub_commands.js new file mode 100644 index 00000000..df9c4944 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/examples/sub_commands.js @@ -0,0 +1,49 @@ +#!/usr/bin/env node +'use strict'; + +var ArgumentParser = require('../lib/argparse').ArgumentParser; +var parser = new ArgumentParser({ + version: '0.0.1', + addHelp: true, + description: 'Argparse examples: sub-commands' +}); + +var subparsers = parser.addSubparsers({ + title: 'subcommands', + dest: "subcommand_name" +}); + +var bar = subparsers.addParser('c1', {addHelp: true, help: 'c1 help'}); +bar.addArgument( + [ '-f', '--foo' ], + { + action: 'store', + help: 'foo3 bar3' + } +); +var bar = subparsers.addParser( + 'c2', + {aliases: ['co'], addHelp: true, help: 'c2 help'} +); +bar.addArgument( + [ '-b', '--bar' ], + { + action: 'store', + type: 'int', + help: 'foo3 bar3' + } +); +parser.printHelp(); +console.log('-----------'); + +var args; +args = parser.parseArgs('c1 -f 2'.split(' ')); +console.dir(args); +console.log('-----------'); +args = parser.parseArgs('c2 -b 1'.split(' ')); +console.dir(args); +console.log('-----------'); +args = parser.parseArgs('co -b 1'.split(' ')); +console.dir(args); +console.log('-----------'); +parser.parseArgs(['c1', '-h']); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/examples/sum.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/examples/sum.js new file mode 100644 index 00000000..4532800a --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/examples/sum.js @@ -0,0 +1,35 @@ +#!/usr/bin/env node + +'use strict'; + + +var ArgumentParser = require('../lib/argparse').ArgumentParser; +var parser = new ArgumentParser({ description: 'Process some integers.' }); + + +function sum(arr) { + return arr.reduce(function (a, b) { + return a + b; + }, 0); +} +function max(arr) { + return Math.max.apply(Math, arr); +} + + +parser.addArgument(['integers'], { + metavar: 'N', + type: 'int', + nargs: '+', + help: 'an integer for the accumulator' +}); +parser.addArgument(['--sum'], { + dest: 'accumulate', + action: 'storeConst', + constant: sum, + defaultValue: max, + help: 'sum the integers (default: find the max)' +}); + +var args = parser.parseArgs('--sum 1 2 -1'.split(' ')); +console.log(args.accumulate(args.integers)); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/examples/testformatters.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/examples/testformatters.js new file mode 100644 index 00000000..1c03cdc8 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/examples/testformatters.js @@ -0,0 +1,270 @@ +'use strict'; + +var a, group, parser, helptext; + +var assert = require('assert'); + + +var print = function () { + return console.log.apply(console, arguments); + }; +// print = function () {}; + +var argparse = require('argparse'); + +print("TEST argparse.ArgumentDefaultsHelpFormatter"); + +parser = new argparse.ArgumentParser({ + debug: true, + formatterClass: argparse.ArgumentDefaultsHelpFormatter, + description: 'description' +}); + +parser.addArgument(['--foo'], { + help: 'foo help - oh and by the way, %(defaultValue)s' +}); + +parser.addArgument(['--bar'], { + action: 'storeTrue', + help: 'bar help' +}); + +parser.addArgument(['spam'], { + help: 'spam help' +}); + +parser.addArgument(['badger'], { + nargs: '?', + defaultValue: 'wooden', + help: 'badger help' +}); + +group = parser.addArgumentGroup({ + title: 'title', + description: 'group description' +}); + +group.addArgument(['--baz'], { + type: 'int', + defaultValue: 42, + help: 'baz help' +}); + +helptext = parser.formatHelp(); +print(helptext); +// test selected clips +assert(helptext.match(/badger help \(default: wooden\)/)); +assert(helptext.match(/foo help - oh and by the way, null/)); +assert(helptext.match(/bar help \(default: false\)/)); +assert(helptext.match(/title:\n {2}group description/)); // test indent +assert(helptext.match(/baz help \(default: 42\)/im)); + +/* +usage: PROG [-h] [--foo FOO] [--bar] [--baz BAZ] spam [badger] + +description + +positional arguments: + spam spam help + badger badger help (default: wooden) + +optional arguments: + -h, --help show this help message and exit + --foo FOO foo help - oh and by the way, null + --bar bar help (default: false) + +title: + group description + + --baz BAZ baz help (default: 42) +*/ + +print("TEST argparse.RawDescriptionHelpFormatter"); + +parser = new argparse.ArgumentParser({ + debug: true, + prog: 'PROG', + formatterClass: argparse.RawDescriptionHelpFormatter, + description: 'Keep the formatting\n' + + ' exactly as it is written\n' + + '\n' + + 'here\n' +}); + +a = parser.addArgument(['--foo'], { + help: ' foo help should not\n' + + ' retain this odd formatting' +}); + +parser.addArgument(['spam'], { + 'help': 'spam help' +}); + +group = parser.addArgumentGroup({ + title: 'title', + description: ' This text\n' + + ' should be indented\n' + + ' exactly like it is here\n' +}); + +group.addArgument(['--bar'], { + help: 'bar help' +}); + +helptext = parser.formatHelp(); +print(helptext); +// test selected clips +assert(helptext.match(parser.description)); +assert.equal(helptext.match(a.help), null); +assert(helptext.match(/foo help should not retain this odd formatting/)); + +/* +class TestHelpRawDescription(HelpTestCase): + """Test the RawTextHelpFormatter""" +.... + +usage: PROG [-h] [--foo FOO] [--bar BAR] spam + +Keep the formatting + exactly as it is written + +here + +positional arguments: + spam spam help + +optional arguments: + -h, --help show this help message and exit + --foo FOO foo help should not retain this odd formatting + +title: + This text + should be indented + exactly like it is here + + --bar BAR bar help +*/ + + +print("TEST argparse.RawTextHelpFormatter"); + +parser = new argparse.ArgumentParser({ + debug: true, + prog: 'PROG', + formatterClass: argparse.RawTextHelpFormatter, + description: 'Keep the formatting\n' + + ' exactly as it is written\n' + + '\n' + + 'here\n' +}); + +parser.addArgument(['--baz'], { + help: ' baz help should also\n' + + 'appear as given here' +}); + +a = parser.addArgument(['--foo'], { + help: ' foo help should also\n' + + 'appear as given here' +}); + +parser.addArgument(['spam'], { + 'help': 'spam help' +}); + +group = parser.addArgumentGroup({ + title: 'title', + description: ' This text\n' + + ' should be indented\n' + + ' exactly like it is here\n' +}); + +group.addArgument(['--bar'], { + help: 'bar help' +}); + +helptext = parser.formatHelp(); +print(helptext); +// test selected clips +assert(helptext.match(parser.description)); +assert(helptext.match(/( {14})appear as given here/gm)); + +/* +class TestHelpRawText(HelpTestCase): + """Test the RawTextHelpFormatter""" + +usage: PROG [-h] [--foo FOO] [--bar BAR] spam + +Keep the formatting + exactly as it is written + +here + +positional arguments: + spam spam help + +optional arguments: + -h, --help show this help message and exit + --foo FOO foo help should also + appear as given here + +title: + This text + should be indented + exactly like it is here + + --bar BAR bar help +*/ + + +print("TEST metavar as a tuple"); + +parser = new argparse.ArgumentParser({ + prog: 'PROG' +}); + +parser.addArgument(['-w'], { + help: 'w', + nargs: '+', + metavar: ['W1', 'W2'] +}); + +parser.addArgument(['-x'], { + help: 'x', + nargs: '*', + metavar: ['X1', 'X2'] +}); + +parser.addArgument(['-y'], { + help: 'y', + nargs: 3, + metavar: ['Y1', 'Y2', 'Y3'] +}); + +parser.addArgument(['-z'], { + help: 'z', + nargs: '?', + metavar: ['Z1'] +}); + +helptext = parser.formatHelp(); +print(helptext); +var ustring = 'PROG [-h] [-w W1 [W2 ...]] [-x [X1 [X2 ...]]] [-y Y1 Y2 Y3] [-z [Z1]]'; +ustring = ustring.replace(/\[/g, '\\[').replace(/\]/g, '\\]'); +// print(ustring) +assert(helptext.match(new RegExp(ustring))); + +/* +class TestHelpTupleMetavar(HelpTestCase): + """Test specifying metavar as a tuple""" + +usage: PROG [-h] [-w W1 [W2 ...]] [-x [X1 [X2 ...]]] [-y Y1 Y2 Y3] [-z [Z1]] + +optional arguments: + -h, --help show this help message and exit + -w W1 [W2 ...] w + -x [X1 [X2 ...]] x + -y Y1 Y2 Y3 y + -z [Z1] z +*/ + diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/index.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/index.js new file mode 100644 index 00000000..3b6eea01 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/index.js @@ -0,0 +1 @@ +module.exports = require('./lib/argparse'); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/lib/action.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/lib/action.js new file mode 100644 index 00000000..6f7e9a56 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/lib/action.js @@ -0,0 +1,146 @@ +/** + * class Action + * + * Base class for all actions + * Do not call in your code, use this class only for inherits your own action + * + * Information about how to convert command line strings to Javascript objects. + * Action objects are used by an ArgumentParser to represent the information + * needed to parse a single argument from one or more strings from the command + * line. The keyword arguments to the Action constructor are also all attributes + * of Action instances. + * + * #####Alowed keywords: + * + * - `store` + * - `storeConstant` + * - `storeTrue` + * - `storeFalse` + * - `append` + * - `appendConstant` + * - `count` + * - `help` + * - `version` + * + * Information about action options see [[Action.new]] + * + * See also [original guide](http://docs.python.org/dev/library/argparse.html#action) + * + **/ + +'use strict'; + + +// Constants +var $$ = require('./const'); + + +/** + * new Action(options) + * + * Base class for all actions. Used only for inherits + * + * + * ##### Options: + * + * - `optionStrings` A list of command-line option strings for the action. + * - `dest` Attribute to hold the created object(s) + * - `nargs` The number of command-line arguments that should be consumed. + * By default, one argument will be consumed and a single value will be + * produced. + * - `constant` Default value for an action with no value. + * - `defaultValue` The value to be produced if the option is not specified. + * - `type` Cast to 'string'|'int'|'float'|'complex'|function (string). If + * None, 'string'. + * - `choices` The choices available. + * - `required` True if the action must always be specified at the command + * line. + * - `help` The help describing the argument. + * - `metavar` The name to be used for the option's argument with the help + * string. If None, the 'dest' value will be used as the name. + * + * ##### nargs supported values: + * + * - `N` (an integer) consumes N arguments (and produces a list) + * - `?` consumes zero or one arguments + * - `*` consumes zero or more arguments (and produces a list) + * - `+` consumes one or more arguments (and produces a list) + * + * Note: that the difference between the default and nargs=1 is that with the + * default, a single value will be produced, while with nargs=1, a list + * containing a single value will be produced. + **/ +var Action = module.exports = function Action(options) { + options = options || {}; + this.optionStrings = options.optionStrings || []; + this.dest = options.dest; + this.nargs = options.nargs !== undefined ? options.nargs : null; + this.constant = options.constant !== undefined ? options.constant : null; + this.defaultValue = options.defaultValue; + this.type = options.type !== undefined ? options.type : null; + this.choices = options.choices !== undefined ? options.choices : null; + this.required = options.required !== undefined ? options.required: false; + this.help = options.help !== undefined ? options.help : null; + this.metavar = options.metavar !== undefined ? options.metavar : null; + + if (!(this.optionStrings instanceof Array)) { + throw new Error('optionStrings should be an array'); + } + if (this.required !== undefined && typeof(this.required) !== 'boolean') { + throw new Error('required should be a boolean'); + } +}; + +/** + * Action#getName -> String + * + * Tells action name + **/ +Action.prototype.getName = function () { + if (this.optionStrings.length > 0) { + return this.optionStrings.join('/'); + } else if (this.metavar !== null && this.metavar !== $$.SUPPRESS) { + return this.metavar; + } else if (this.dest !== undefined && this.dest !== $$.SUPPRESS) { + return this.dest; + } + return null; +}; + +/** + * Action#isOptional -> Boolean + * + * Return true if optional + **/ +Action.prototype.isOptional = function () { + return !this.isPositional(); +}; + +/** + * Action#isPositional -> Boolean + * + * Return true if positional + **/ +Action.prototype.isPositional = function () { + return (this.optionStrings.length === 0); +}; + +/** + * Action#call(parser, namespace, values, optionString) -> Void + * - parser (ArgumentParser): current parser + * - namespace (Namespace): namespace for output data + * - values (Array): parsed values + * - optionString (Array): input option string(not parsed) + * + * Call the action. Should be implemented in inherited classes + * + * ##### Example + * + * ActionCount.prototype.call = function (parser, namespace, values, optionString) { + * namespace.set(this.dest, (namespace[this.dest] || 0) + 1); + * }; + * + **/ +Action.prototype.call = function () { + throw new Error('.call() not defined');// Not Implemented error +}; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/lib/action/append.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/lib/action/append.js new file mode 100644 index 00000000..48c6dbe3 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/lib/action/append.js @@ -0,0 +1,55 @@ +/*:nodoc:* + * class ActionAppend + * + * This action stores a list, and appends each argument value to the list. + * This is useful to allow an option to be specified multiple times. + * This class inherided from [[Action]] + * + **/ + +'use strict'; + +var util = require('util'); + +var Action = require('../action'); + +// Constants +var $$ = require('../const'); + +/*:nodoc:* + * new ActionAppend(options) + * - options (object): options hash see [[Action.new]] + * + * Note: options.nargs should be optional for constants + * and more then zero for other + **/ +var ActionAppend = module.exports = function ActionAppend(options) { + options = options || {}; + if (this.nargs <= 0) { + throw new Error('nargs for append actions must be > 0; if arg ' + + 'strings are not supplying the value to append, ' + + 'the append const action may be more appropriate'); + } + if (!!this.constant && this.nargs !== $$.OPTIONAL) { + throw new Error('nargs must be OPTIONAL to supply const'); + } + Action.call(this, options); +}; +util.inherits(ActionAppend, Action); + +/*:nodoc:* + * ActionAppend#call(parser, namespace, values, optionString) -> Void + * - parser (ArgumentParser): current parser + * - namespace (Namespace): namespace for output data + * - values (Array): parsed values + * - optionString (Array): input option string(not parsed) + * + * Call the action. Save result in namespace object + **/ +ActionAppend.prototype.call = function (parser, namespace, values) { + var items = [].concat(namespace[this.dest] || []); // or _.clone + items.push(values); + namespace.set(this.dest, items); +}; + + diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/lib/action/append/constant.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/lib/action/append/constant.js new file mode 100644 index 00000000..90747abb --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/lib/action/append/constant.js @@ -0,0 +1,47 @@ +/*:nodoc:* + * class ActionAppendConstant + * + * This stores a list, and appends the value specified by + * the const keyword argument to the list. + * (Note that the const keyword argument defaults to null.) + * The 'appendConst' action is typically useful when multiple + * arguments need to store constants to the same list. + * + * This class inherited from [[Action]] + **/ + +'use strict'; + +var util = require('util'); + +var Action = require('../../action'); + +/*:nodoc:* + * new ActionAppendConstant(options) + * - options (object): options hash see [[Action.new]] + * + **/ +var ActionAppendConstant = module.exports = function ActionAppendConstant(options) { + options = options || {}; + options.nargs = 0; + if (options.constant === undefined) { + throw new Error('constant option is required for appendAction'); + } + Action.call(this, options); +}; +util.inherits(ActionAppendConstant, Action); + +/*:nodoc:* + * ActionAppendConstant#call(parser, namespace, values, optionString) -> Void + * - parser (ArgumentParser): current parser + * - namespace (Namespace): namespace for output data + * - values (Array): parsed values + * - optionString (Array): input option string(not parsed) + * + * Call the action. Save result in namespace object + **/ +ActionAppendConstant.prototype.call = function (parser, namespace) { + var items = [].concat(namespace[this.dest] || []); + items.push(this.constant); + namespace.set(this.dest, items); +}; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/lib/action/count.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/lib/action/count.js new file mode 100644 index 00000000..d6a5899d --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/lib/action/count.js @@ -0,0 +1,40 @@ +/*:nodoc:* + * class ActionCount + * + * This counts the number of times a keyword argument occurs. + * For example, this is useful for increasing verbosity levels + * + * This class inherided from [[Action]] + * + **/ +'use strict'; + +var util = require('util'); + +var Action = require('../action'); + +/*:nodoc:* + * new ActionCount(options) + * - options (object): options hash see [[Action.new]] + * + **/ +var ActionCount = module.exports = function ActionCount(options) { + options = options || {}; + options.nargs = 0; + + Action.call(this, options); +}; +util.inherits(ActionCount, Action); + +/*:nodoc:* + * ActionCount#call(parser, namespace, values, optionString) -> Void + * - parser (ArgumentParser): current parser + * - namespace (Namespace): namespace for output data + * - values (Array): parsed values + * - optionString (Array): input option string(not parsed) + * + * Call the action. Save result in namespace object + **/ +ActionCount.prototype.call = function (parser, namespace) { + namespace.set(this.dest, (namespace[this.dest] || 0) + 1); +}; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/lib/action/help.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/lib/action/help.js new file mode 100644 index 00000000..7f7b4e2d --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/lib/action/help.js @@ -0,0 +1,48 @@ +/*:nodoc:* + * class ActionHelp + * + * Support action for printing help + * This class inherided from [[Action]] + **/ +'use strict'; + +var util = require('util'); + +var Action = require('../action'); + +// Constants +var $$ = require('../const'); + +/*:nodoc:* + * new ActionHelp(options) + * - options (object): options hash see [[Action.new]] + * + **/ +var ActionHelp = module.exports = function ActionHelp(options) { + options = options || {}; + if (options.defaultValue !== null) { + options.defaultValue = options.defaultValue; + } + else { + options.defaultValue = $$.SUPPRESS; + } + options.dest = (options.dest !== null ? options.dest: $$.SUPPRESS); + options.nargs = 0; + Action.call(this, options); + +}; +util.inherits(ActionHelp, Action); + +/*:nodoc:* + * ActionHelp#call(parser, namespace, values, optionString) + * - parser (ArgumentParser): current parser + * - namespace (Namespace): namespace for output data + * - values (Array): parsed values + * - optionString (Array): input option string(not parsed) + * + * Print help and exit + **/ +ActionHelp.prototype.call = function (parser) { + parser.printHelp(); + parser.exit(); +}; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/lib/action/store.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/lib/action/store.js new file mode 100644 index 00000000..8ebc9748 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/lib/action/store.js @@ -0,0 +1,50 @@ +/*:nodoc:* + * class ActionStore + * + * This action just stores the argument’s value. This is the default action. + * + * This class inherited from [[Action]] + * + **/ +'use strict'; + +var util = require('util'); + +var Action = require('../action'); + +// Constants +var $$ = require('../const'); + + +/*:nodoc:* + * new ActionStore(options) + * - options (object): options hash see [[Action.new]] + * + **/ +var ActionStore = module.exports = function ActionStore(options) { + options = options || {}; + if (this.nargs <= 0) { + throw new Error('nargs for store actions must be > 0; if you ' + + 'have nothing to store, actions such as store ' + + 'true or store const may be more appropriate'); + + } + if (this.constant !== undefined && this.nargs !== $$.OPTIONAL) { + throw new Error('nargs must be OPTIONAL to supply const'); + } + Action.call(this, options); +}; +util.inherits(ActionStore, Action); + +/*:nodoc:* + * ActionStore#call(parser, namespace, values, optionString) -> Void + * - parser (ArgumentParser): current parser + * - namespace (Namespace): namespace for output data + * - values (Array): parsed values + * - optionString (Array): input option string(not parsed) + * + * Call the action. Save result in namespace object + **/ +ActionStore.prototype.call = function (parser, namespace, values) { + namespace.set(this.dest, values); +}; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/lib/action/store/constant.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/lib/action/store/constant.js new file mode 100644 index 00000000..8410fcf7 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/lib/action/store/constant.js @@ -0,0 +1,43 @@ +/*:nodoc:* + * class ActionStoreConstant + * + * This action stores the value specified by the const keyword argument. + * (Note that the const keyword argument defaults to the rather unhelpful null.) + * The 'store_const' action is most commonly used with optional + * arguments that specify some sort of flag. + * + * This class inherited from [[Action]] + **/ +'use strict'; + +var util = require('util'); + +var Action = require('../../action'); + +/*:nodoc:* + * new ActionStoreConstant(options) + * - options (object): options hash see [[Action.new]] + * + **/ +var ActionStoreConstant = module.exports = function ActionStoreConstant(options) { + options = options || {}; + options.nargs = 0; + if (options.constant === undefined) { + throw new Error('constant option is required for storeAction'); + } + Action.call(this, options); +}; +util.inherits(ActionStoreConstant, Action); + +/*:nodoc:* + * ActionStoreConstant#call(parser, namespace, values, optionString) -> Void + * - parser (ArgumentParser): current parser + * - namespace (Namespace): namespace for output data + * - values (Array): parsed values + * - optionString (Array): input option string(not parsed) + * + * Call the action. Save result in namespace object + **/ +ActionStoreConstant.prototype.call = function (parser, namespace) { + namespace.set(this.dest, this.constant); +}; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/lib/action/store/false.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/lib/action/store/false.js new file mode 100644 index 00000000..66417bf6 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/lib/action/store/false.js @@ -0,0 +1,27 @@ +/*:nodoc:* + * class ActionStoreFalse + * + * This action store the values False respectively. + * This is special cases of 'storeConst' + * + * This class inherited from [[Action]] + **/ + +'use strict'; + +var util = require('util'); + +var ActionStoreConstant = require('./constant'); + +/*:nodoc:* + * new ActionStoreFalse(options) + * - options (object): hash of options see [[Action.new]] + * + **/ +var ActionStoreFalse = module.exports = function ActionStoreFalse(options) { + options = options || {}; + options.constant = false; + options.defaultValue = options.defaultValue !== null ? options.defaultValue: true; + ActionStoreConstant.call(this, options); +}; +util.inherits(ActionStoreFalse, ActionStoreConstant); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/lib/action/store/true.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/lib/action/store/true.js new file mode 100644 index 00000000..43ec7086 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/lib/action/store/true.js @@ -0,0 +1,26 @@ +/*:nodoc:* + * class ActionStoreTrue + * + * This action store the values True respectively. + * This isspecial cases of 'storeConst' + * + * This class inherited from [[Action]] + **/ +'use strict'; + +var util = require('util'); + +var ActionStoreConstant = require('./constant'); + +/*:nodoc:* + * new ActionStoreTrue(options) + * - options (object): options hash see [[Action.new]] + * + **/ +var ActionStoreTrue = module.exports = function ActionStoreTrue(options) { + options = options || {}; + options.constant = true; + options.defaultValue = options.defaultValue !== null ? options.defaultValue: false; + ActionStoreConstant.call(this, options); +}; +util.inherits(ActionStoreTrue, ActionStoreConstant); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/lib/action/subparsers.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/lib/action/subparsers.js new file mode 100644 index 00000000..257714d4 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/lib/action/subparsers.js @@ -0,0 +1,148 @@ +/** internal + * class ActionSubparsers + * + * Support the creation of such sub-commands with the addSubparsers() + * + * This class inherited from [[Action]] + **/ +'use strict'; + +var util = require('util'); +var format = require('util').format; +var _ = require('lodash'); + + +var Action = require('../action'); + +// Constants +var $$ = require('../const'); + +// Errors +var argumentErrorHelper = require('../argument/error'); + + +/*:nodoc:* + * new ChoicesPseudoAction(name, help) + * + * Create pseudo action for correct help text + * + **/ +var ChoicesPseudoAction = function (name, help) { + var options = { + optionStrings: [], + dest: name, + help: help + }; + + Action.call(this, options); +}; +util.inherits(ChoicesPseudoAction, Action); + +/** + * new ActionSubparsers(options) + * - options (object): options hash see [[Action.new]] + * + **/ +var ActionSubparsers = module.exports = function ActionSubparsers(options) { + options = options || {}; + options.dest = options.dest || $$.SUPPRESS; + options.nargs = $$.PARSER; + + this.debug = (options.debug === true); + + this._progPrefix = options.prog; + this._parserClass = options.parserClass; + this._nameParserMap = {}; + this._choicesActions = []; + + options.choices = this._nameParserMap; + Action.call(this, options); +}; +util.inherits(ActionSubparsers, Action); + +/*:nodoc:* + * ActionSubparsers#addParser(name, options) -> ArgumentParser + * - name (string): sub-command name + * - options (object): see [[ArgumentParser.new]] + * + * Note: + * addParser supports an additional aliases option, + * which allows multiple strings to refer to the same subparser. + * This example, like svn, aliases co as a shorthand for checkout + * + **/ +ActionSubparsers.prototype.addParser = function (name, options) { + var parser; + + var self = this; + + options = options || {}; + + options.debug = (this.debug === true); + + // set program from the existing prefix + if (!options.prog) { + options.prog = this._progPrefix + ' ' + name; + } + + var aliases = options.aliases || []; + + // create a pseudo-action to hold the choice help + if (!!options.help || _.isString(options.help)) { + var help = options.help; + delete options.help; + + var choiceAction = new ChoicesPseudoAction(name, help); + this._choicesActions.push(choiceAction); + } + + // create the parser and add it to the map + parser = new this._parserClass(options); + this._nameParserMap[name] = parser; + + // make parser available under aliases also + aliases.forEach(function (alias) { + self._nameParserMap[alias] = parser; + }); + + return parser; +}; + +ActionSubparsers.prototype._getSubactions = function () { + return this._choicesActions; +}; + +/*:nodoc:* + * ActionSubparsers#call(parser, namespace, values, optionString) -> Void + * - parser (ArgumentParser): current parser + * - namespace (Namespace): namespace for output data + * - values (Array): parsed values + * - optionString (Array): input option string(not parsed) + * + * Call the action. Parse input aguments + **/ +ActionSubparsers.prototype.call = function (parser, namespace, values) { + var parserName = values[0]; + var argStrings = values.slice(1); + + // set the parser name if requested + if (this.dest !== $$.SUPPRESS) { + namespace[this.dest] = parserName; + } + + // select the parser + if (!!this._nameParserMap[parserName]) { + parser = this._nameParserMap[parserName]; + } else { + throw argumentErrorHelper(format( + 'Unknown parser "%s" (choices: [%s]).', + parserName, + _.keys(this._nameParserMap).join(', ') + )); + } + + // parse all the remaining options into the namespace + parser.parseArgs(argStrings, namespace); +}; + + diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/lib/action/version.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/lib/action/version.js new file mode 100644 index 00000000..a17877c0 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/lib/action/version.js @@ -0,0 +1,50 @@ +/*:nodoc:* + * class ActionVersion + * + * Support action for printing program version + * This class inherited from [[Action]] + **/ +'use strict'; + +var util = require('util'); + +var Action = require('../action'); + +// +// Constants +// +var $$ = require('../const'); + +/*:nodoc:* + * new ActionVersion(options) + * - options (object): options hash see [[Action.new]] + * + **/ +var ActionVersion = module.exports = function ActionVersion(options) { + options = options || {}; + options.defaultValue = (!!options.defaultValue ? options.defaultValue: $$.SUPPRESS); + options.dest = (options.dest || $$.SUPPRESS); + options.nargs = 0; + this.version = options.version; + Action.call(this, options); +}; +util.inherits(ActionVersion, Action); + +/*:nodoc:* + * ActionVersion#call(parser, namespace, values, optionString) -> Void + * - parser (ArgumentParser): current parser + * - namespace (Namespace): namespace for output data + * - values (Array): parsed values + * - optionString (Array): input option string(not parsed) + * + * Print version and exit + **/ +ActionVersion.prototype.call = function (parser) { + var version = this.version || parser.version; + var formatter = parser._getFormatter(); + formatter.addText(version); + parser.exit(0, formatter.formatHelp()); +}; + + + diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/lib/action_container.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/lib/action_container.js new file mode 100644 index 00000000..043ead41 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/lib/action_container.js @@ -0,0 +1,479 @@ +/** internal + * class ActionContainer + * + * Action container. Parent for [[ArgumentParser]] and [[ArgumentGroup]] + **/ + +'use strict'; + +var format = require('util').format; +var _ = require('lodash'); + +// Constants +var $$ = require('./const'); + +//Actions +var ActionHelp = require('./action/help'); +var ActionAppend = require('./action/append'); +var ActionAppendConstant = require('./action/append/constant'); +var ActionCount = require('./action/count'); +var ActionStore = require('./action/store'); +var ActionStoreConstant = require('./action/store/constant'); +var ActionStoreTrue = require('./action/store/true'); +var ActionStoreFalse = require('./action/store/false'); +var ActionVersion = require('./action/version'); +var ActionSubparsers = require('./action/subparsers'); + +// Errors +var argumentErrorHelper = require('./argument/error'); + + + +/** + * new ActionContainer(options) + * + * Action container. Parent for [[ArgumentParser]] and [[ArgumentGroup]] + * + * ##### Options: + * + * - `description` -- A description of what the program does + * - `prefixChars` -- Characters that prefix optional arguments + * - `argumentDefault` -- The default value for all arguments + * - `conflictHandler` -- The conflict handler to use for duplicate arguments + **/ +var ActionContainer = module.exports = function ActionContainer(options) { + options = options || {}; + + this.description = options.description; + this.argumentDefault = options.argumentDefault; + this.prefixChars = options.prefixChars || ''; + this.conflictHandler = options.conflictHandler; + + // set up registries + this._registries = {}; + + // register actions + this.register('action', null, ActionStore); + this.register('action', 'store', ActionStore); + this.register('action', 'storeConst', ActionStoreConstant); + this.register('action', 'storeTrue', ActionStoreTrue); + this.register('action', 'storeFalse', ActionStoreFalse); + this.register('action', 'append', ActionAppend); + this.register('action', 'appendConst', ActionAppendConstant); + this.register('action', 'count', ActionCount); + this.register('action', 'help', ActionHelp); + this.register('action', 'version', ActionVersion); + this.register('action', 'parsers', ActionSubparsers); + + // raise an exception if the conflict handler is invalid + this._getHandler(); + + // action storage + this._actions = []; + this._optionStringActions = {}; + + // groups + this._actionGroups = []; + this._mutuallyExclusiveGroups = []; + + // defaults storage + this._defaults = {}; + + // determines whether an "option" looks like a negative number + // -1, -1.5 -5e+4 + this._regexpNegativeNumber = new RegExp('^[-]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?$'); + + // whether or not there are any optionals that look like negative + // numbers -- uses a list so it can be shared and edited + this._hasNegativeNumberOptionals = []; +}; + +// Groups must be required, then ActionContainer already defined +var ArgumentGroup = require('./argument/group'); +var MutuallyExclusiveGroup = require('./argument/exclusive'); + +// +// Registration methods +// + +/** + * ActionContainer#register(registryName, value, object) -> Void + * - registryName (String) : object type action|type + * - value (string) : keyword + * - object (Object|Function) : handler + * + * Register handlers + **/ +ActionContainer.prototype.register = function (registryName, value, object) { + this._registries[registryName] = this._registries[registryName] || {}; + this._registries[registryName][value] = object; +}; + +ActionContainer.prototype._registryGet = function (registryName, value, defaultValue) { + if (3 > arguments.length) { + defaultValue = null; + } + return this._registries[registryName][value] || defaultValue; +}; + +// +// Namespace default accessor methods +// + +/** + * ActionContainer#setDefaults(options) -> Void + * - options (object):hash of options see [[Action.new]] + * + * Set defaults + **/ +ActionContainer.prototype.setDefaults = function (options) { + options = options || {}; + for (var property in options) { + this._defaults[property] = options[property]; + } + + // if these defaults match any existing arguments, replace the previous + // default on the object with the new one + this._actions.forEach(function (action) { + if (action.dest in options) { + action.defaultValue = options[action.dest]; + } + }); +}; + +/** + * ActionContainer#getDefault(dest) -> Mixed + * - dest (string): action destination + * + * Return action default value + **/ +ActionContainer.prototype.getDefault = function (dest) { + var result = (_.has(this._defaults, dest)) ? this._defaults[dest] : null; + + this._actions.forEach(function (action) { + if (action.dest === dest && _.has(action, 'defaultValue')) { + result = action.defaultValue; + } + }); + + return result; +}; +// +// Adding argument actions +// + +/** + * ActionContainer#addArgument(args, options) -> Object + * - args (Array): array of argument keys + * - options (Object): action objects see [[Action.new]] + * + * #### Examples + * - addArgument([-f, --foo], {action:'store', defaultValue=1, ...}) + * - addArgument(['bar'], action: 'store', nargs:1, ...}) + **/ +ActionContainer.prototype.addArgument = function (args, options) { + args = args; + options = options || {}; + + if (!_.isArray(args)) { + throw new TypeError('addArgument first argument should be an array'); + } + if (!_.isObject(options) || _.isArray(options)) { + throw new TypeError('addArgument second argument should be a hash'); + } + + // if no positional args are supplied or only one is supplied and + // it doesn't look like an option string, parse a positional argument + if (!args || args.length === 1 && this.prefixChars.indexOf(args[0][0]) < 0) { + if (args && !!options.dest) { + throw new Error('dest supplied twice for positional argument'); + } + options = this._getPositional(args, options); + + // otherwise, we're adding an optional argument + } else { + options = this._getOptional(args, options); + } + + // if no default was supplied, use the parser-level default + if (_.isUndefined(options.defaultValue)) { + var dest = options.dest; + if (_.has(this._defaults, dest)) { + options.defaultValue = this._defaults[dest]; + } else if (!_.isUndefined(this.argumentDefault)) { + options.defaultValue = this.argumentDefault; + } + } + + // create the action object, and add it to the parser + var ActionClass = this._popActionClass(options); + if (! _.isFunction(ActionClass)) { + throw new Error(format('Unknown action "%s".', ActionClass)); + } + var action = new ActionClass(options); + + // throw an error if the action type is not callable + var typeFunction = this._registryGet('type', action.type, action.type); + if (!_.isFunction(typeFunction)) { + throw new Error(format('"%s" is not callable', typeFunction)); + } + + return this._addAction(action); +}; + +/** + * ActionContainer#addArgumentGroup(options) -> ArgumentGroup + * - options (Object): hash of options see [[ArgumentGroup.new]] + * + * Create new arguments groups + **/ +ActionContainer.prototype.addArgumentGroup = function (options) { + var group = new ArgumentGroup(this, options); + this._actionGroups.push(group); + return group; +}; + +/** + * ActionContainer#addMutuallyExclusiveGroup(options) -> ArgumentGroup + * - options (Object): {required: false} + * + * Create new mutual exclusive groups + **/ +ActionContainer.prototype.addMutuallyExclusiveGroup = function (options) { + var group = new MutuallyExclusiveGroup(this, options); + this._mutuallyExclusiveGroups.push(group); + return group; +}; + +ActionContainer.prototype._addAction = function (action) { + var self = this; + + // resolve any conflicts + this._checkConflict(action); + + // add to actions list + this._actions.push(action); + action.container = this; + + // index the action by any option strings it has + action.optionStrings.forEach(function (optionString) { + self._optionStringActions[optionString] = action; + }); + + // set the flag if any option strings look like negative numbers + action.optionStrings.forEach(function (optionString) { + if (optionString.match(self._regexpNegativeNumber)) { + if (!_.any(self._hasNegativeNumberOptionals)) { + self._hasNegativeNumberOptionals.push(true); + } + } + }); + + // return the created action + return action; +}; + +ActionContainer.prototype._removeAction = function (action) { + var actionIndex = this._actions.indexOf(action); + if (actionIndex >= 0) { + this._actions.splice(actionIndex, 1); + } +}; + +ActionContainer.prototype._addContainerActions = function (container) { + // collect groups by titles + var titleGroupMap = {}; + this._actionGroups.forEach(function (group) { + if (titleGroupMap[group.title]) { + throw new Error(format('Cannot merge actions - two groups are named "%s".', group.title)); + } + titleGroupMap[group.title] = group; + }); + + // map each action to its group + var groupMap = {}; + function actionHash(action) { + // unique (hopefully?) string suitable as dictionary key + return action.getName(); + } + container._actionGroups.forEach(function (group) { + // if a group with the title exists, use that, otherwise + // create a new group matching the container's group + if (!titleGroupMap[group.title]) { + titleGroupMap[group.title] = this.addArgumentGroup({ + title: group.title, + description: group.description + }); + } + + // map the actions to their new group + group._groupActions.forEach(function (action) { + groupMap[actionHash(action)] = titleGroupMap[group.title]; + }); + }, this); + + // add container's mutually exclusive groups + // NOTE: if add_mutually_exclusive_group ever gains title= and + // description= then this code will need to be expanded as above + var mutexGroup; + container._mutuallyExclusiveGroups.forEach(function (group) { + mutexGroup = this.addMutuallyExclusiveGroup({ + required: group.required + }); + // map the actions to their new mutex group + group._groupActions.forEach(function (action) { + groupMap[actionHash(action)] = mutexGroup; + }); + }, this); // forEach takes a 'this' argument + + // add all actions to this container or their group + container._actions.forEach(function (action) { + var key = actionHash(action); + if (!!groupMap[key]) { + groupMap[key]._addAction(action); + } + else + { + this._addAction(action); + } + }); +}; + +ActionContainer.prototype._getPositional = function (dest, options) { + if (_.isArray(dest)) { + dest = _.first(dest); + } + // make sure required is not specified + if (options.required) { + throw new Error('"required" is an invalid argument for positionals.'); + } + + // mark positional arguments as required if at least one is + // always required + if (options.nargs !== $$.OPTIONAL && options.nargs !== $$.ZERO_OR_MORE) { + options.required = true; + } + if (options.nargs === $$.ZERO_OR_MORE && options.defaultValue === undefined) { + options.required = true; + } + + // return the keyword arguments with no option strings + options.dest = dest; + options.optionStrings = []; + return options; +}; + +ActionContainer.prototype._getOptional = function (args, options) { + var prefixChars = this.prefixChars; + var optionStrings = []; + var optionStringsLong = []; + + // determine short and long option strings + args.forEach(function (optionString) { + // error on strings that don't start with an appropriate prefix + if (prefixChars.indexOf(optionString[0]) < 0) { + throw new Error(format('Invalid option string "%s": must start with a "%s".', + optionString, + prefixChars + )); + } + + // strings starting with two prefix characters are long options + optionStrings.push(optionString); + if (optionString.length > 1 && prefixChars.indexOf(optionString[1]) >= 0) { + optionStringsLong.push(optionString); + } + }); + + // infer dest, '--foo-bar' -> 'foo_bar' and '-x' -> 'x' + var dest = options.dest || null; + delete options.dest; + + if (!dest) { + var optionStringDest = optionStringsLong.length ? optionStringsLong[0] :optionStrings[0]; + dest = _.trim(optionStringDest, this.prefixChars); + + if (dest.length === 0) { + throw new Error( + format('dest= is required for options like "%s"', optionStrings.join(', ')) + ); + } + dest = dest.replace(/-/g, '_'); + } + + // return the updated keyword arguments + options.dest = dest; + options.optionStrings = optionStrings; + + return options; +}; + +ActionContainer.prototype._popActionClass = function (options, defaultValue) { + defaultValue = defaultValue || null; + + var action = (options.action || defaultValue); + delete options.action; + + var actionClass = this._registryGet('action', action, action); + return actionClass; +}; + +ActionContainer.prototype._getHandler = function () { + var handlerString = this.conflictHandler; + var handlerFuncName = "_handleConflict" + _.capitalize(handlerString); + var func = this[handlerFuncName]; + if (typeof func === 'undefined') { + var msg = "invalid conflict resolution value: " + handlerString; + throw new Error(msg); + } else { + return func; + } +}; + +ActionContainer.prototype._checkConflict = function (action) { + var optionStringActions = this._optionStringActions; + var conflictOptionals = []; + + // find all options that conflict with this option + // collect pairs, the string, and an existing action that it conflicts with + action.optionStrings.forEach(function (optionString) { + var conflOptional = optionStringActions[optionString]; + if (typeof conflOptional !== 'undefined') { + conflictOptionals.push([optionString, conflOptional]); + } + }); + + if (conflictOptionals.length > 0) { + var conflictHandler = this._getHandler(); + conflictHandler.call(this, action, conflictOptionals); + } +}; + +ActionContainer.prototype._handleConflictError = function (action, conflOptionals) { + var conflicts = _.map(conflOptionals, function (pair) {return pair[0]; }); + conflicts = conflicts.join(', '); + throw argumentErrorHelper( + action, + format('Conflicting option string(s): %s', conflicts) + ); +}; + +ActionContainer.prototype._handleConflictResolve = function (action, conflOptionals) { + // remove all conflicting options + var self = this; + conflOptionals.forEach(function (pair) { + var optionString = pair[0]; + var conflictingAction = pair[1]; + // remove the conflicting option string + var i = conflictingAction.optionStrings.indexOf(optionString); + if (i >= 0) { + conflictingAction.optionStrings.splice(i, 1); + } + delete self._optionStringActions[optionString]; + // if the option now has no option string, remove it from the + // container holding it + if (conflictingAction.optionStrings.length === 0) { + conflictingAction.container._removeAction(conflictingAction); + } + }); +}; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/lib/argparse.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/lib/argparse.js new file mode 100644 index 00000000..f2a2c51d --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/lib/argparse.js @@ -0,0 +1,14 @@ +'use strict'; + +module.exports.ArgumentParser = require('./argument_parser.js'); +module.exports.Namespace = require('./namespace'); +module.exports.Action = require('./action'); +module.exports.HelpFormatter = require('./help/formatter.js'); +module.exports.Const = require('./const.js'); + +module.exports.ArgumentDefaultsHelpFormatter = + require('./help/added_formatters.js').ArgumentDefaultsHelpFormatter; +module.exports.RawDescriptionHelpFormatter = + require('./help/added_formatters.js').RawDescriptionHelpFormatter; +module.exports.RawTextHelpFormatter = + require('./help/added_formatters.js').RawTextHelpFormatter; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/lib/argument/error.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/lib/argument/error.js new file mode 100644 index 00000000..c8a02a08 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/lib/argument/error.js @@ -0,0 +1,50 @@ +'use strict'; + + +var format = require('util').format; + + +var ERR_CODE = 'ARGError'; + +/*:nodoc:* + * argumentError(argument, message) -> TypeError + * - argument (Object): action with broken argument + * - message (String): error message + * + * Error format helper. An error from creating or using an argument + * (optional or positional). The string value of this exception + * is the message, augmented with information + * about the argument that caused it. + * + * #####Example + * + * var argumentErrorHelper = require('./argument/error'); + * if (conflictOptionals.length > 0) { + * throw argumentErrorHelper( + * action, + * format('Conflicting option string(s): %s', conflictOptionals.join(', ')) + * ); + * } + * + **/ +module.exports = function (argument, message) { + var argumentName = null; + var errMessage; + var err; + + if (argument.getName) { + argumentName = argument.getName(); + } else { + argumentName = '' + argument; + } + + if (!argumentName) { + errMessage = message; + } else { + errMessage = format('argument "%s": %s', argumentName, message); + } + + err = new TypeError(errMessage); + err.code = ERR_CODE; + return err; +}; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/lib/argument/exclusive.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/lib/argument/exclusive.js new file mode 100644 index 00000000..8287e00d --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/lib/argument/exclusive.js @@ -0,0 +1,54 @@ +/** internal + * class MutuallyExclusiveGroup + * + * Group arguments. + * By default, ArgumentParser groups command-line arguments + * into “positional arguments†and “optional arguments†+ * when displaying help messages. When there is a better + * conceptual grouping of arguments than this default one, + * appropriate groups can be created using the addArgumentGroup() method + * + * This class inherited from [[ArgumentContainer]] + **/ +'use strict'; + +var util = require('util'); + +var ArgumentGroup = require('./group'); + +/** + * new MutuallyExclusiveGroup(container, options) + * - container (object): main container + * - options (object): options.required -> true/false + * + * `required` could be an argument itself, but making it a property of + * the options argument is more consistent with the JS adaptation of the Python) + **/ +var MutuallyExclusiveGroup = module.exports = function MutuallyExclusiveGroup(container, options) { + var required; + options = options || {}; + required = options.required || false; + ArgumentGroup.call(this, container); + this.required = required; + +}; +util.inherits(MutuallyExclusiveGroup, ArgumentGroup); + + +MutuallyExclusiveGroup.prototype._addAction = function (action) { + var msg; + if (action.required) { + msg = 'mutually exclusive arguments must be optional'; + throw new Error(msg); + } + action = this._container._addAction(action); + this._groupActions.push(action); + return action; +}; + + +MutuallyExclusiveGroup.prototype._removeAction = function (action) { + this._container._removeAction(action); + this._groupActions.remove(action); +}; + diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/lib/argument/group.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/lib/argument/group.js new file mode 100644 index 00000000..58b271f2 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/lib/argument/group.js @@ -0,0 +1,75 @@ +/** internal + * class ArgumentGroup + * + * Group arguments. + * By default, ArgumentParser groups command-line arguments + * into “positional arguments†and “optional arguments†+ * when displaying help messages. When there is a better + * conceptual grouping of arguments than this default one, + * appropriate groups can be created using the addArgumentGroup() method + * + * This class inherited from [[ArgumentContainer]] + **/ +'use strict'; + +var util = require('util'); + +var ActionContainer = require('../action_container'); + + +/** + * new ArgumentGroup(container, options) + * - container (object): main container + * - options (object): hash of group options + * + * #### options + * - **prefixChars** group name prefix + * - **argumentDefault** default argument value + * - **title** group title + * - **description** group description + * + **/ +var ArgumentGroup = module.exports = function ArgumentGroup(container, options) { + + options = options || {}; + + // add any missing keyword arguments by checking the container + options.conflictHandler = (options.conflictHandler || container.conflictHandler); + options.prefixChars = (options.prefixChars || container.prefixChars); + options.argumentDefault = (options.argumentDefault || container.argumentDefault); + + ActionContainer.call(this, options); + + // group attributes + this.title = options.title; + this._groupActions = []; + + // share most attributes with the container + this._container = container; + this._registries = container._registries; + this._actions = container._actions; + this._optionStringActions = container._optionStringActions; + this._defaults = container._defaults; + this._hasNegativeNumberOptionals = container._hasNegativeNumberOptionals; + this._mutuallyExclusiveGroups = container._mutuallyExclusiveGroups; +}; +util.inherits(ArgumentGroup, ActionContainer); + + +ArgumentGroup.prototype._addAction = function (action) { + // Parent add action + action = ActionContainer.prototype._addAction.call(this, action); + this._groupActions.push(action); + return action; +}; + + +ArgumentGroup.prototype._removeAction = function (action) { + // Parent remove action + ActionContainer.prototype._removeAction.call(this, action); + var actionIndex = this._groupActions.indexOf(action); + if (actionIndex >= 0) { + this._groupActions.splice(actionIndex, 1); + } +}; + diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/lib/argument_parser.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/lib/argument_parser.js new file mode 100644 index 00000000..2b4cee39 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/lib/argument_parser.js @@ -0,0 +1,1168 @@ +/** + * class ArgumentParser + * + * Object for parsing command line strings into js objects. + * + * Inherited from [[ActionContainer]] + **/ +'use strict'; + +var util = require('util'); +var format = require('util').format; +var Path = require('path'); + +var _ = require('lodash'); +var sprintf = require('sprintf-js').sprintf; + +// Constants +var $$ = require('./const'); + +var ActionContainer = require('./action_container'); + +// Errors +var argumentErrorHelper = require('./argument/error'); + +var HelpFormatter = require('./help/formatter'); + +var Namespace = require('./namespace'); + + +/** + * new ArgumentParser(options) + * + * Create a new ArgumentParser object. + * + * ##### Options: + * - `prog` The name of the program (default: Path.basename(process.argv[1])) + * - `usage` A usage message (default: auto-generated from arguments) + * - `description` A description of what the program does + * - `epilog` Text following the argument descriptions + * - `parents` Parsers whose arguments should be copied into this one + * - `formatterClass` HelpFormatter class for printing help messages + * - `prefixChars` Characters that prefix optional arguments + * - `fromfilePrefixChars` Characters that prefix files containing additional arguments + * - `argumentDefault` The default value for all arguments + * - `addHelp` Add a -h/-help option + * - `conflictHandler` Specifies how to handle conflicting argument names + * - `debug` Enable debug mode. Argument errors throw exception in + * debug mode and process.exit in normal. Used for development and + * testing (default: false) + * + * See also [original guide][1] + * + * [1]:http://docs.python.org/dev/library/argparse.html#argumentparser-objects + **/ +var ArgumentParser = module.exports = function ArgumentParser(options) { + var self = this; + options = options || {}; + + options.description = (options.description || null); + options.argumentDefault = (options.argumentDefault || null); + options.prefixChars = (options.prefixChars || '-'); + options.conflictHandler = (options.conflictHandler || 'error'); + ActionContainer.call(this, options); + + options.addHelp = (options.addHelp === undefined || !!options.addHelp); + options.parents = (options.parents || []); + // default program name + options.prog = (options.prog || Path.basename(process.argv[1])); + this.prog = options.prog; + this.usage = options.usage; + this.epilog = options.epilog; + this.version = options.version; + + this.debug = (options.debug === true); + + this.formatterClass = (options.formatterClass || HelpFormatter); + this.fromfilePrefixChars = options.fromfilePrefixChars || null; + this._positionals = this.addArgumentGroup({title: 'Positional arguments'}); + this._optionals = this.addArgumentGroup({title: 'Optional arguments'}); + this._subparsers = null; + + // register types + var FUNCTION_IDENTITY = function (o) { + return o; + }; + this.register('type', 'auto', FUNCTION_IDENTITY); + this.register('type', null, FUNCTION_IDENTITY); + this.register('type', 'int', function (x) { + var result = parseInt(x, 10); + if (isNaN(result)) { + throw new Error(x + ' is not a valid integer.'); + } + return result; + }); + this.register('type', 'float', function (x) { + var result = parseFloat(x); + if (isNaN(result)) { + throw new Error(x + ' is not a valid float.'); + } + return result; + }); + this.register('type', 'string', function (x) { + return '' + x; + }); + + // add help and version arguments if necessary + var defaultPrefix = (this.prefixChars.indexOf('-') > -1) ? '-' : this.prefixChars[0]; + if (options.addHelp) { + this.addArgument( + [defaultPrefix + 'h', defaultPrefix + defaultPrefix + 'help'], + { + action: 'help', + defaultValue: $$.SUPPRESS, + help: 'Show this help message and exit.' + } + ); + } + if (this.version !== undefined) { + this.addArgument( + [defaultPrefix + 'v', defaultPrefix + defaultPrefix + 'version'], + { + action: 'version', + version: this.version, + defaultValue: $$.SUPPRESS, + help: "Show program's version number and exit." + } + ); + } + + // add parent arguments and defaults + options.parents.forEach(function (parent) { + self._addContainerActions(parent); + if (parent._defaults !== undefined) { + for (var defaultKey in parent._defaults) { + if (parent._defaults.hasOwnProperty(defaultKey)) { + self._defaults[defaultKey] = parent._defaults[defaultKey]; + } + } + } + }); + +}; +util.inherits(ArgumentParser, ActionContainer); + +/** + * ArgumentParser#addSubparsers(options) -> [[ActionSubparsers]] + * - options (object): hash of options see [[ActionSubparsers.new]] + * + * See also [subcommands][1] + * + * [1]:http://docs.python.org/dev/library/argparse.html#sub-commands + **/ +ArgumentParser.prototype.addSubparsers = function (options) { + if (!!this._subparsers) { + this.error('Cannot have multiple subparser arguments.'); + } + + options = options || {}; + options.debug = (this.debug === true); + options.optionStrings = []; + options.parserClass = (options.parserClass || ArgumentParser); + + + if (!!options.title || !!options.description) { + + this._subparsers = this.addArgumentGroup({ + title: (options.title || 'subcommands'), + description: options.description + }); + delete options.title; + delete options.description; + + } else { + this._subparsers = this._positionals; + } + + // prog defaults to the usage message of this parser, skipping + // optional arguments and with no "usage:" prefix + if (!options.prog) { + var formatter = this._getFormatter(); + var positionals = this._getPositionalActions(); + var groups = this._mutuallyExclusiveGroups; + formatter.addUsage(this.usage, positionals, groups, ''); + options.prog = _.trim(formatter.formatHelp()); + } + + // create the parsers action and add it to the positionals list + var ParsersClass = this._popActionClass(options, 'parsers'); + var action = new ParsersClass(options); + this._subparsers._addAction(action); + + // return the created parsers action + return action; +}; + +ArgumentParser.prototype._addAction = function (action) { + if (action.isOptional()) { + this._optionals._addAction(action); + } else { + this._positionals._addAction(action); + } + return action; +}; + +ArgumentParser.prototype._getOptionalActions = function () { + return this._actions.filter(function (action) { + return action.isOptional(); + }); +}; + +ArgumentParser.prototype._getPositionalActions = function () { + return this._actions.filter(function (action) { + return action.isPositional(); + }); +}; + + +/** + * ArgumentParser#parseArgs(args, namespace) -> Namespace|Object + * - args (array): input elements + * - namespace (Namespace|Object): result object + * + * Parsed args and throws error if some arguments are not recognized + * + * See also [original guide][1] + * + * [1]:http://docs.python.org/dev/library/argparse.html#the-parse-args-method + **/ +ArgumentParser.prototype.parseArgs = function (args, namespace) { + var argv; + var result = this.parseKnownArgs(args, namespace); + + args = result[0]; + argv = result[1]; + if (argv && argv.length > 0) { + this.error( + format('Unrecognized arguments: %s.', argv.join(' ')) + ); + } + return args; +}; + +/** + * ArgumentParser#parseKnownArgs(args, namespace) -> array + * - args (array): input options + * - namespace (Namespace|Object): result object + * + * Parse known arguments and return tuple of result object + * and unknown args + * + * See also [original guide][1] + * + * [1]:http://docs.python.org/dev/library/argparse.html#partial-parsing + **/ +ArgumentParser.prototype.parseKnownArgs = function (args, namespace) { + var self = this; + + // args default to the system args + args = args || process.argv.slice(2); + + // default Namespace built from parser defaults + namespace = namespace || new Namespace(); + + self._actions.forEach(function (action) { + if (action.dest !== $$.SUPPRESS) { + if (!_.has(namespace, action.dest)) { + if (action.defaultValue !== $$.SUPPRESS) { + var defaultValue = action.defaultValue; + if (_.isString(action.defaultValue)) { + defaultValue = self._getValue(action, defaultValue); + } + namespace[action.dest] = defaultValue; + } + } + } + }); + + _.keys(self._defaults).forEach(function (dest) { + namespace[dest] = self._defaults[dest]; + }); + + // parse the arguments and exit if there are any errors + try { + var res = this._parseKnownArgs(args, namespace); + + namespace = res[0]; + args = res[1]; + if (_.has(namespace, $$._UNRECOGNIZED_ARGS_ATTR)) { + args = _.union(args, namespace[$$._UNRECOGNIZED_ARGS_ATTR]); + delete namespace[$$._UNRECOGNIZED_ARGS_ATTR]; + } + return [namespace, args]; + } catch (e) { + this.error(e); + } +}; + +ArgumentParser.prototype._parseKnownArgs = function (argStrings, namespace) { + var self = this; + + var extras = []; + + // replace arg strings that are file references + if (this.fromfilePrefixChars !== null) { + argStrings = this._readArgsFromFiles(argStrings); + } + // map all mutually exclusive arguments to the other arguments + // they can't occur with + // Python has 'conflicts = action_conflicts.setdefault(mutex_action, [])' + // though I can't conceive of a way in which an action could be a member + // of two different mutually exclusive groups. + + function actionHash(action) { + // some sort of hashable key for this action + // action itself cannot be a key in actionConflicts + // I think getName() (join of optionStrings) is unique enough + return action.getName(); + } + + var conflicts, key; + var actionConflicts = {}; + + this._mutuallyExclusiveGroups.forEach(function (mutexGroup) { + mutexGroup._groupActions.forEach(function (mutexAction, i, groupActions) { + key = actionHash(mutexAction); + if (!_.has(actionConflicts, key)) { + actionConflicts[key] = []; + } + conflicts = actionConflicts[key]; + conflicts.push.apply(conflicts, groupActions.slice(0, i)); + conflicts.push.apply(conflicts, groupActions.slice(i + 1)); + }); + }); + + // find all option indices, and determine the arg_string_pattern + // which has an 'O' if there is an option at an index, + // an 'A' if there is an argument, or a '-' if there is a '--' + var optionStringIndices = {}; + + var argStringPatternParts = []; + + argStrings.forEach(function (argString, argStringIndex) { + if (argString === '--') { + argStringPatternParts.push('-'); + while (argStringIndex < argStrings.length) { + argStringPatternParts.push('A'); + argStringIndex++; + } + } + // otherwise, add the arg to the arg strings + // and note the index if it was an option + else { + var pattern; + var optionTuple = self._parseOptional(argString); + if (!optionTuple) { + pattern = 'A'; + } + else { + optionStringIndices[argStringIndex] = optionTuple; + pattern = 'O'; + } + argStringPatternParts.push(pattern); + } + }); + var argStringsPattern = argStringPatternParts.join(''); + + var seenActions = []; + var seenNonDefaultActions = []; + + + function takeAction(action, argumentStrings, optionString) { + seenActions.push(action); + var argumentValues = self._getValues(action, argumentStrings); + + // error if this argument is not allowed with other previously + // seen arguments, assuming that actions that use the default + // value don't really count as "present" + if (argumentValues !== action.defaultValue) { + seenNonDefaultActions.push(action); + if (!!actionConflicts[actionHash(action)]) { + actionConflicts[actionHash(action)].forEach(function (actionConflict) { + if (seenNonDefaultActions.indexOf(actionConflict) >= 0) { + throw argumentErrorHelper( + action, + format('Not allowed with argument "%s".', actionConflict.getName()) + ); + } + }); + } + } + + if (argumentValues !== $$.SUPPRESS) { + action.call(self, namespace, argumentValues, optionString); + } + } + + function consumeOptional(startIndex) { + // get the optional identified at this index + var optionTuple = optionStringIndices[startIndex]; + var action = optionTuple[0]; + var optionString = optionTuple[1]; + var explicitArg = optionTuple[2]; + + // identify additional optionals in the same arg string + // (e.g. -xyz is the same as -x -y -z if no args are required) + var actionTuples = []; + + var args, argCount, start, stop; + + while (true) { + if (!action) { + extras.push(argStrings[startIndex]); + return startIndex + 1; + } + if (!!explicitArg) { + argCount = self._matchArgument(action, 'A'); + + // if the action is a single-dash option and takes no + // arguments, try to parse more single-dash options out + // of the tail of the option string + var chars = self.prefixChars; + if (argCount === 0 && chars.indexOf(optionString[1]) < 0) { + actionTuples.push([action, [], optionString]); + optionString = optionString[0] + explicitArg[0]; + var newExplicitArg = explicitArg.slice(1) || null; + var optionalsMap = self._optionStringActions; + + if (_.keys(optionalsMap).indexOf(optionString) >= 0) { + action = optionalsMap[optionString]; + explicitArg = newExplicitArg; + } + else { + var msg = 'ignored explicit argument %r'; + throw argumentErrorHelper(action, msg); + } + } + // if the action expect exactly one argument, we've + // successfully matched the option; exit the loop + else if (argCount === 1) { + stop = startIndex + 1; + args = [explicitArg]; + actionTuples.push([action, args, optionString]); + break; + } + // error if a double-dash option did not use the + // explicit argument + else { + var message = 'ignored explicit argument %r'; + throw argumentErrorHelper(action, sprintf(message, explicitArg)); + } + } + // if there is no explicit argument, try to match the + // optional's string arguments with the following strings + // if successful, exit the loop + else { + + start = startIndex + 1; + var selectedPatterns = argStringsPattern.substr(start); + + argCount = self._matchArgument(action, selectedPatterns); + stop = start + argCount; + + + args = argStrings.slice(start, stop); + + actionTuples.push([action, args, optionString]); + break; + } + + } + + // add the Optional to the list and return the index at which + // the Optional's string args stopped + if (actionTuples.length < 1) { + throw new Error('length should be > 0'); + } + for (var i = 0; i < actionTuples.length; i++) { + takeAction.apply(self, actionTuples[i]); + } + return stop; + } + + // the list of Positionals left to be parsed; this is modified + // by consume_positionals() + var positionals = self._getPositionalActions(); + + function consumePositionals(startIndex) { + // match as many Positionals as possible + var selectedPattern = argStringsPattern.substr(startIndex); + var argCounts = self._matchArgumentsPartial(positionals, selectedPattern); + + // slice off the appropriate arg strings for each Positional + // and add the Positional and its args to the list + _.zip(positionals, argCounts).forEach(function (item) { + var action = item[0]; + var argCount = item[1]; + if (argCount === undefined) { + return; + } + var args = argStrings.slice(startIndex, startIndex + argCount); + + startIndex += argCount; + takeAction(action, args); + }); + + // slice off the Positionals that we just parsed and return the + // index at which the Positionals' string args stopped + positionals = positionals.slice(argCounts.length); + return startIndex; + } + + // consume Positionals and Optionals alternately, until we have + // passed the last option string + var startIndex = 0; + var position; + + var maxOptionStringIndex = -1; + + Object.keys(optionStringIndices).forEach(function (position) { + maxOptionStringIndex = Math.max(maxOptionStringIndex, parseInt(position, 10)); + }); + + var positionalsEndIndex, nextOptionStringIndex; + + while (startIndex <= maxOptionStringIndex) { + // consume any Positionals preceding the next option + nextOptionStringIndex = null; + for (position in optionStringIndices) { + if (!optionStringIndices.hasOwnProperty(position)) { continue; } + + position = parseInt(position, 10); + if (position >= startIndex) { + if (nextOptionStringIndex !== null) { + nextOptionStringIndex = Math.min(nextOptionStringIndex, position); + } + else { + nextOptionStringIndex = position; + } + } + } + + if (startIndex !== nextOptionStringIndex) { + positionalsEndIndex = consumePositionals(startIndex); + // only try to parse the next optional if we didn't consume + // the option string during the positionals parsing + if (positionalsEndIndex > startIndex) { + startIndex = positionalsEndIndex; + continue; + } + else { + startIndex = positionalsEndIndex; + } + } + + // if we consumed all the positionals we could and we're not + // at the index of an option string, there were extra arguments + if (!optionStringIndices[startIndex]) { + var strings = argStrings.slice(startIndex, nextOptionStringIndex); + extras = extras.concat(strings); + startIndex = nextOptionStringIndex; + } + // consume the next optional and any arguments for it + startIndex = consumeOptional(startIndex); + } + + // consume any positionals following the last Optional + var stopIndex = consumePositionals(startIndex); + + // if we didn't consume all the argument strings, there were extras + extras = extras.concat(argStrings.slice(stopIndex)); + + // if we didn't use all the Positional objects, there were too few + // arg strings supplied. + if (positionals.length > 0) { + self.error('too few arguments'); + } + + // make sure all required actions were present + self._actions.forEach(function (action) { + if (action.required) { + if (_.indexOf(seenActions, action) < 0) { + self.error(format('Argument "%s" is required', action.getName())); + } + } + }); + + // make sure all required groups have one option present + var actionUsed = false; + self._mutuallyExclusiveGroups.forEach(function (group) { + if (group.required) { + actionUsed = _.any(group._groupActions, function (action) { + return _.contains(seenNonDefaultActions, action); + }); + + // if no actions were used, report the error + if (!actionUsed) { + var names = []; + group._groupActions.forEach(function (action) { + if (action.help !== $$.SUPPRESS) { + names.push(action.getName()); + } + }); + names = names.join(' '); + var msg = 'one of the arguments ' + names + ' is required'; + self.error(msg); + } + } + }); + + // return the updated namespace and the extra arguments + return [namespace, extras]; +}; + +ArgumentParser.prototype._readArgsFromFiles = function (argStrings) { + // expand arguments referencing files + var _this = this; + var fs = require('fs'); + var newArgStrings = []; + argStrings.forEach(function (argString) { + if (_this.fromfilePrefixChars.indexOf(argString[0]) < 0) { + // for regular arguments, just add them back into the list + newArgStrings.push(argString); + } else { + // replace arguments referencing files with the file content + try { + var argstrs = []; + var filename = argString.slice(1); + var content = fs.readFileSync(filename, 'utf8'); + content = content.trim().split('\n'); + content.forEach(function (argLine) { + _this.convertArgLineToArgs(argLine).forEach(function (arg) { + argstrs.push(arg); + }); + argstrs = _this._readArgsFromFiles(argstrs); + }); + newArgStrings.push.apply(newArgStrings, argstrs); + } catch (error) { + return _this.error(error.message); + } + } + }); + return newArgStrings; +}; + +ArgumentParser.prototype.convertArgLineToArgs = function (argLine) { + return [argLine]; +}; + +ArgumentParser.prototype._matchArgument = function (action, regexpArgStrings) { + + // match the pattern for this action to the arg strings + var regexpNargs = new RegExp('^' + this._getNargsPattern(action)); + var matches = regexpArgStrings.match(regexpNargs); + var message; + + // throw an exception if we weren't able to find a match + if (!matches) { + switch (action.nargs) { + case undefined: + case null: + message = 'Expected one argument.'; + break; + case $$.OPTIONAL: + message = 'Expected at most one argument.'; + break; + case $$.ONE_OR_MORE: + message = 'Expected at least one argument.'; + break; + default: + message = 'Expected %s argument(s)'; + } + + throw argumentErrorHelper( + action, + format(message, action.nargs) + ); + } + // return the number of arguments matched + return matches[1].length; +}; + +ArgumentParser.prototype._matchArgumentsPartial = function (actions, regexpArgStrings) { + // progressively shorten the actions list by slicing off the + // final actions until we find a match + var self = this; + var result = []; + var actionSlice, pattern, matches; + var i, j; + + var getLength = function (string) { + return string.length; + }; + + for (i = actions.length; i > 0; i--) { + pattern = ''; + actionSlice = actions.slice(0, i); + for (j = 0; j < actionSlice.length; j++) { + pattern += self._getNargsPattern(actionSlice[j]); + } + + pattern = new RegExp('^' + pattern); + matches = regexpArgStrings.match(pattern); + + if (matches && matches.length > 0) { + // need only groups + matches = matches.splice(1); + result = result.concat(matches.map(getLength)); + break; + } + } + + // return the list of arg string counts + return result; +}; + +ArgumentParser.prototype._parseOptional = function (argString) { + var action, optionString, argExplicit, optionTuples; + + // if it's an empty string, it was meant to be a positional + if (!argString) { + return null; + } + + // if it doesn't start with a prefix, it was meant to be positional + if (this.prefixChars.indexOf(argString[0]) < 0) { + return null; + } + + // if the option string is present in the parser, return the action + if (!!this._optionStringActions[argString]) { + return [this._optionStringActions[argString], argString, null]; + } + + // if it's just a single character, it was meant to be positional + if (argString.length === 1) { + return null; + } + + // if the option string before the "=" is present, return the action + if (argString.indexOf('=') >= 0) { + var argStringSplit = argString.split('='); + optionString = argStringSplit[0]; + argExplicit = argStringSplit[1]; + + if (!!this._optionStringActions[optionString]) { + action = this._optionStringActions[optionString]; + return [action, optionString, argExplicit]; + } + } + + // search through all possible prefixes of the option string + // and all actions in the parser for possible interpretations + optionTuples = this._getOptionTuples(argString); + + // if multiple actions match, the option string was ambiguous + if (optionTuples.length > 1) { + var optionStrings = optionTuples.map(function (optionTuple) { + return optionTuple[1]; + }); + this.error(format( + 'Ambiguous option: "%s" could match %s.', + argString, optionStrings.join(', ') + )); + // if exactly one action matched, this segmentation is good, + // so return the parsed action + } else if (optionTuples.length === 1) { + return optionTuples[0]; + } + + // if it was not found as an option, but it looks like a negative + // number, it was meant to be positional + // unless there are negative-number-like options + if (argString.match(this._regexpNegativeNumber)) { + if (!_.any(this._hasNegativeNumberOptionals)) { + return null; + } + } + // if it contains a space, it was meant to be a positional + if (argString.search(' ') >= 0) { + return null; + } + + // it was meant to be an optional but there is no such option + // in this parser (though it might be a valid option in a subparser) + return [null, argString, null]; +}; + +ArgumentParser.prototype._getOptionTuples = function (optionString) { + var result = []; + var chars = this.prefixChars; + var optionPrefix; + var argExplicit; + var action; + var actionOptionString; + + // option strings starting with two prefix characters are only split at + // the '=' + if (chars.indexOf(optionString[0]) >= 0 && chars.indexOf(optionString[1]) >= 0) { + if (optionString.indexOf('=') >= 0) { + var optionStringSplit = optionString.split('=', 1); + + optionPrefix = optionStringSplit[0]; + argExplicit = optionStringSplit[1]; + } else { + optionPrefix = optionString; + argExplicit = null; + } + + for (actionOptionString in this._optionStringActions) { + if (actionOptionString.substr(0, optionPrefix.length) === optionPrefix) { + action = this._optionStringActions[actionOptionString]; + result.push([action, actionOptionString, argExplicit]); + } + } + + // single character options can be concatenated with their arguments + // but multiple character options always have to have their argument + // separate + } else if (chars.indexOf(optionString[0]) >= 0 && chars.indexOf(optionString[1]) < 0) { + optionPrefix = optionString; + argExplicit = null; + var optionPrefixShort = optionString.substr(0, 2); + var argExplicitShort = optionString.substr(2); + + for (actionOptionString in this._optionStringActions) { + action = this._optionStringActions[actionOptionString]; + if (actionOptionString === optionPrefixShort) { + result.push([action, actionOptionString, argExplicitShort]); + } else if (actionOptionString.substr(0, optionPrefix.length) === optionPrefix) { + result.push([action, actionOptionString, argExplicit]); + } + } + + // shouldn't ever get here + } else { + throw new Error(format('Unexpected option string: %s.', optionString)); + } + // return the collected option tuples + return result; +}; + +ArgumentParser.prototype._getNargsPattern = function (action) { + // in all examples below, we have to allow for '--' args + // which are represented as '-' in the pattern + var regexpNargs; + + switch (action.nargs) { + // the default (null) is assumed to be a single argument + case undefined: + case null: + regexpNargs = '(-*A-*)'; + break; + // allow zero or more arguments + case $$.OPTIONAL: + regexpNargs = '(-*A?-*)'; + break; + // allow zero or more arguments + case $$.ZERO_OR_MORE: + regexpNargs = '(-*[A-]*)'; + break; + // allow one or more arguments + case $$.ONE_OR_MORE: + regexpNargs = '(-*A[A-]*)'; + break; + // allow any number of options or arguments + case $$.REMAINDER: + regexpNargs = '([-AO]*)'; + break; + // allow one argument followed by any number of options or arguments + case $$.PARSER: + regexpNargs = '(-*A[-AO]*)'; + break; + // all others should be integers + default: + regexpNargs = '(-*' + _.repeat('-*A', action.nargs) + '-*)'; + } + + // if this is an optional action, -- is not allowed + if (action.isOptional()) { + regexpNargs = regexpNargs.replace(/-\*/g, ''); + regexpNargs = regexpNargs.replace(/-/g, ''); + } + + // return the pattern + return regexpNargs; +}; + +// +// Value conversion methods +// + +ArgumentParser.prototype._getValues = function (action, argStrings) { + var self = this; + + // for everything but PARSER args, strip out '--' + if (action.nargs !== $$.PARSER && action.nargs !== $$.REMAINDER) { + argStrings = argStrings.filter(function (arrayElement) { + return arrayElement !== '--'; + }); + } + + var value, argString; + + // optional argument produces a default when not present + if (argStrings.length === 0 && action.nargs === $$.OPTIONAL) { + + value = (action.isOptional()) ? action.constant: action.defaultValue; + + if (typeof(value) === 'string') { + value = this._getValue(action, value); + this._checkValue(action, value); + } + + // when nargs='*' on a positional, if there were no command-line + // args, use the default if it is anything other than None + } else if (argStrings.length === 0 && action.nargs === $$.ZERO_OR_MORE && + action.optionStrings.length === 0) { + + value = (action.defaultValue || argStrings); + this._checkValue(action, value); + + // single argument or optional argument produces a single value + } else if (argStrings.length === 1 && + (!action.nargs || action.nargs === $$.OPTIONAL)) { + + argString = argStrings[0]; + value = this._getValue(action, argString); + this._checkValue(action, value); + + // REMAINDER arguments convert all values, checking none + } else if (action.nargs === $$.REMAINDER) { + value = argStrings.map(function (v) { + return self._getValue(action, v); + }); + + // PARSER arguments convert all values, but check only the first + } else if (action.nargs === $$.PARSER) { + value = argStrings.map(function (v) { + return self._getValue(action, v); + }); + this._checkValue(action, value[0]); + + // all other types of nargs produce a list + } else { + value = argStrings.map(function (v) { + return self._getValue(action, v); + }); + value.forEach(function (v) { + self._checkValue(action, v); + }); + } + + // return the converted value + return value; +}; + +ArgumentParser.prototype._getValue = function (action, argString) { + var result; + + var typeFunction = this._registryGet('type', action.type, action.type); + if (!_.isFunction(typeFunction)) { + var message = format('%s is not callable', typeFunction); + throw argumentErrorHelper(action, message); + } + + // convert the value to the appropriate type + try { + result = typeFunction(argString); + + // ArgumentTypeErrors indicate errors + // If action.type is not a registered string, it is a function + // Try to deduce its name for inclusion in the error message + // Failing that, include the error message it raised. + } catch (e) { + var name = null; + if (_.isString(action.type)) { + name = action.type; + } else { + name = action.type.name || action.type.displayName || '<function>'; + } + var msg = format('Invalid %s value: %s', name, argString); + if (name === '<function>') {msg += '\n' + e.message; } + throw argumentErrorHelper(action, msg); + } + // return the converted value + return result; +}; + +ArgumentParser.prototype._checkValue = function (action, value) { + // converted value must be one of the choices (if specified) + var choices = action.choices; + if (!!choices) { + // choise for argument can by array or string + if ((_.isString(choices) || _.isArray(choices)) && + choices.indexOf(value) !== -1) { + return; + } + // choise for subparsers can by only hash + if (_.isObject(choices) && !_.isArray(choices) && choices[value]) { + return; + } + + if (_.isString(choices)) { + choices = choices.split('').join(', '); + } + else if (_.isArray(choices)) { + choices = choices.join(', '); + } + else { + choices = _.keys(choices).join(', '); + } + var message = format('Invalid choice: %s (choose from [%s])', value, choices); + throw argumentErrorHelper(action, message); + } +}; + +// +// Help formatting methods +// + +/** + * ArgumentParser#formatUsage -> string + * + * Return usage string + * + * See also [original guide][1] + * + * [1]:http://docs.python.org/dev/library/argparse.html#printing-help + **/ +ArgumentParser.prototype.formatUsage = function () { + var formatter = this._getFormatter(); + formatter.addUsage(this.usage, this._actions, this._mutuallyExclusiveGroups); + return formatter.formatHelp(); +}; + +/** + * ArgumentParser#formatHelp -> string + * + * Return help + * + * See also [original guide][1] + * + * [1]:http://docs.python.org/dev/library/argparse.html#printing-help + **/ +ArgumentParser.prototype.formatHelp = function () { + var formatter = this._getFormatter(); + + // usage + formatter.addUsage(this.usage, this._actions, this._mutuallyExclusiveGroups); + + // description + formatter.addText(this.description); + + // positionals, optionals and user-defined groups + this._actionGroups.forEach(function (actionGroup) { + formatter.startSection(actionGroup.title); + formatter.addText(actionGroup.description); + formatter.addArguments(actionGroup._groupActions); + formatter.endSection(); + }); + + // epilog + formatter.addText(this.epilog); + + // determine help from format above + return formatter.formatHelp(); +}; + +ArgumentParser.prototype._getFormatter = function () { + var FormatterClass = this.formatterClass; + var formatter = new FormatterClass({prog: this.prog}); + return formatter; +}; + +// +// Print functions +// + +/** + * ArgumentParser#printUsage() -> Void + * + * Print usage + * + * See also [original guide][1] + * + * [1]:http://docs.python.org/dev/library/argparse.html#printing-help + **/ +ArgumentParser.prototype.printUsage = function () { + this._printMessage(this.formatUsage()); +}; + +/** + * ArgumentParser#printHelp() -> Void + * + * Print help + * + * See also [original guide][1] + * + * [1]:http://docs.python.org/dev/library/argparse.html#printing-help + **/ +ArgumentParser.prototype.printHelp = function () { + this._printMessage(this.formatHelp()); +}; + +ArgumentParser.prototype._printMessage = function (message, stream) { + if (!stream) { + stream = process.stdout; + } + if (message) { + stream.write('' + message); + } +}; + +// +// Exit functions +// + +/** + * ArgumentParser#exit(status=0, message) -> Void + * - status (int): exit status + * - message (string): message + * + * Print message in stderr/stdout and exit program + **/ +ArgumentParser.prototype.exit = function (status, message) { + if (!!message) { + if (status === 0) { + this._printMessage(message); + } + else { + this._printMessage(message, process.stderr); + } + } + + process.exit(status); +}; + +/** + * ArgumentParser#error(message) -> Void + * - err (Error|string): message + * + * Error method Prints a usage message incorporating the message to stderr and + * exits. If you override this in a subclass, + * it should not return -- it should + * either exit or throw an exception. + * + **/ +ArgumentParser.prototype.error = function (err) { + var message; + if (err instanceof Error) { + if (this.debug === true) { + throw err; + } + message = err.message; + } + else { + message = err; + } + var msg = format('%s: error: %s', this.prog, message) + $$.EOL; + + if (this.debug === true) { + throw new Error(msg); + } + + this.printUsage(process.stderr); + + return this.exit(2, msg); +}; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/lib/const.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/lib/const.js new file mode 100644 index 00000000..de831ba4 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/lib/const.js @@ -0,0 +1,18 @@ +// +// Constants +// +module.exports.EOL = '\n'; + +module.exports.SUPPRESS = '==SUPPRESS=='; + +module.exports.OPTIONAL = '?'; + +module.exports.ZERO_OR_MORE = '*'; + +module.exports.ONE_OR_MORE = '+'; + +module.exports.PARSER = 'A...'; + +module.exports.REMAINDER = '...'; + +module.exports._UNRECOGNIZED_ARGS_ATTR = '_unrecognized_args'; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/lib/help/added_formatters.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/lib/help/added_formatters.js new file mode 100644 index 00000000..3c99c4a1 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/lib/help/added_formatters.js @@ -0,0 +1,88 @@ +'use strict'; + +var util = require('util'); +var _ = require('lodash'); + + +// Constants +var $$ = require('../const'); + +var HelpFormatter = require('./formatter.js'); + +/** + * new RawDescriptionHelpFormatter(options) + * new ArgumentParser({formatterClass: argparse.RawDescriptionHelpFormatter, ...}) + * + * Help message formatter which adds default values to argument help. + * + * Only the name of this class is considered a public API. All the methods + * provided by the class are considered an implementation detail. + **/ + +var ArgumentDefaultsHelpFormatter = function ArgumentDefaultsHelpFormatter(options) { + HelpFormatter.call(this, options); +}; + +util.inherits(ArgumentDefaultsHelpFormatter, HelpFormatter); + +ArgumentDefaultsHelpFormatter.prototype._getHelpString = function (action) { + var help = action.help; + if (action.help.indexOf('%(defaultValue)s') === -1) { + if (action.defaultValue !== $$.SUPPRESS) { + var defaulting_nargs = [$$.OPTIONAL, $$.ZERO_OR_MORE]; + if (action.isOptional() || (defaulting_nargs.indexOf(action.nargs) >= 0)) { + help += ' (default: %(defaultValue)s)'; + } + } + } + return help; +}; + +module.exports.ArgumentDefaultsHelpFormatter = ArgumentDefaultsHelpFormatter; + +/** + * new RawDescriptionHelpFormatter(options) + * new ArgumentParser({formatterClass: argparse.RawDescriptionHelpFormatter, ...}) + * + * Help message formatter which retains any formatting in descriptions. + * + * Only the name of this class is considered a public API. All the methods + * provided by the class are considered an implementation detail. + **/ + +var RawDescriptionHelpFormatter = function RawDescriptionHelpFormatter(options) { + HelpFormatter.call(this, options); +}; + +util.inherits(RawDescriptionHelpFormatter, HelpFormatter); + +RawDescriptionHelpFormatter.prototype._fillText = function (text, width, indent) { + var lines = text.split('\n'); + lines = lines.map(function (line) { + return _.trimRight(indent + line); + }); + return lines.join('\n'); +}; +module.exports.RawDescriptionHelpFormatter = RawDescriptionHelpFormatter; + +/** + * new RawTextHelpFormatter(options) + * new ArgumentParser({formatterClass: argparse.RawTextHelpFormatter, ...}) + * + * Help message formatter which retains formatting of all help text. + * + * Only the name of this class is considered a public API. All the methods + * provided by the class are considered an implementation detail. + **/ + +var RawTextHelpFormatter = function RawTextHelpFormatter(options) { + RawDescriptionHelpFormatter.call(this, options); +}; + +util.inherits(RawTextHelpFormatter, RawDescriptionHelpFormatter); + +RawTextHelpFormatter.prototype._splitLines = function (text) { + return text.split('\n'); +}; + +module.exports.RawTextHelpFormatter = RawTextHelpFormatter; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/lib/help/formatter.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/lib/help/formatter.js new file mode 100644 index 00000000..e050728e --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/lib/help/formatter.js @@ -0,0 +1,798 @@ +/** + * class HelpFormatter + * + * Formatter for generating usage messages and argument help strings. Only the + * name of this class is considered a public API. All the methods provided by + * the class are considered an implementation detail. + * + * Do not call in your code, use this class only for inherits your own forvatter + * + * ToDo add [additonal formatters][1] + * + * [1]:http://docs.python.org/dev/library/argparse.html#formatter-class + **/ +'use strict'; + +var _ = require('lodash'); +var sprintf = require('sprintf-js').sprintf; + +// Constants +var $$ = require('../const'); + + +/*:nodoc:* internal + * new Support(parent, heding) + * - parent (object): parent section + * - heading (string): header string + * + **/ +function Section(parent, heading) { + this._parent = parent; + this._heading = heading; + this._items = []; +} + +/*:nodoc:* internal + * Section#addItem(callback) -> Void + * - callback (array): tuple with function and args + * + * Add function for single element + **/ +Section.prototype.addItem = function (callback) { + this._items.push(callback); +}; + +/*:nodoc:* internal + * Section#formatHelp(formatter) -> string + * - formatter (HelpFormatter): current formatter + * + * Form help section string + * + **/ +Section.prototype.formatHelp = function (formatter) { + var itemHelp, heading; + + // format the indented section + if (!!this._parent) { + formatter._indent(); + } + + itemHelp = this._items.map(function (item) { + var obj, func, args; + + obj = formatter; + func = item[0]; + args = item[1]; + return func.apply(obj, args); + }); + itemHelp = formatter._joinParts(itemHelp); + + if (!!this._parent) { + formatter._dedent(); + } + + // return nothing if the section was empty + if (!itemHelp) { + return ''; + } + + // add the heading if the section was non-empty + heading = ''; + if (!!this._heading && this._heading !== $$.SUPPRESS) { + var currentIndent = formatter.currentIndent; + heading = _.repeat(' ', currentIndent) + this._heading + ':' + $$.EOL; + } + + // join the section-initialize newline, the heading and the help + return formatter._joinParts([$$.EOL, heading, itemHelp, $$.EOL]); +}; + +/** + * new HelpFormatter(options) + * + * #### Options: + * - `prog`: program name + * - `indentIncriment`: indent step, default value 2 + * - `maxHelpPosition`: max help position, default value = 24 + * - `width`: line width + * + **/ +var HelpFormatter = module.exports = function HelpFormatter(options) { + options = options || {}; + + this._prog = options.prog; + + this._maxHelpPosition = options.maxHelpPosition || 24; + this._width = (options.width || ((process.env.COLUMNS || 80) - 2)); + + this._currentIndent = 0; + this._indentIncriment = options.indentIncriment || 2; + this._level = 0; + this._actionMaxLength = 0; + + this._rootSection = new Section(null); + this._currentSection = this._rootSection; + + this._whitespaceMatcher = new RegExp('\\s+', 'g'); + this._longBreakMatcher = new RegExp($$.EOL + $$.EOL + $$.EOL + '+', 'g'); +}; + +HelpFormatter.prototype._indent = function () { + this._currentIndent += this._indentIncriment; + this._level += 1; +}; + +HelpFormatter.prototype._dedent = function () { + this._currentIndent -= this._indentIncriment; + this._level -= 1; + if (this._currentIndent < 0) { + throw new Error('Indent decreased below 0.'); + } +}; + +HelpFormatter.prototype._addItem = function (func, args) { + this._currentSection.addItem([func, args]); +}; + +// +// Message building methods +// + +/** + * HelpFormatter#startSection(heading) -> Void + * - heading (string): header string + * + * Start new help section + * + * See alse [code example][1] + * + * ##### Example + * + * formatter.startSection(actionGroup.title); + * formatter.addText(actionGroup.description); + * formatter.addArguments(actionGroup._groupActions); + * formatter.endSection(); + * + **/ +HelpFormatter.prototype.startSection = function (heading) { + this._indent(); + var section = new Section(this._currentSection, heading); + var func = section.formatHelp.bind(section); + this._addItem(func, [this]); + this._currentSection = section; +}; + +/** + * HelpFormatter#endSection -> Void + * + * End help section + * + * ##### Example + * + * formatter.startSection(actionGroup.title); + * formatter.addText(actionGroup.description); + * formatter.addArguments(actionGroup._groupActions); + * formatter.endSection(); + **/ +HelpFormatter.prototype.endSection = function () { + this._currentSection = this._currentSection._parent; + this._dedent(); +}; + +/** + * HelpFormatter#addText(text) -> Void + * - text (string): plain text + * + * Add plain text into current section + * + * ##### Example + * + * formatter.startSection(actionGroup.title); + * formatter.addText(actionGroup.description); + * formatter.addArguments(actionGroup._groupActions); + * formatter.endSection(); + * + **/ +HelpFormatter.prototype.addText = function (text) { + if (!!text && text !== $$.SUPPRESS) { + this._addItem(this._formatText, [text]); + } +}; + +/** + * HelpFormatter#addUsage(usage, actions, groups, prefix) -> Void + * - usage (string): usage text + * - actions (array): actions list + * - groups (array): groups list + * - prefix (string): usage prefix + * + * Add usage data into current section + * + * ##### Example + * + * formatter.addUsage(this.usage, this._actions, []); + * return formatter.formatHelp(); + * + **/ +HelpFormatter.prototype.addUsage = function (usage, actions, groups, prefix) { + if (usage !== $$.SUPPRESS) { + this._addItem(this._formatUsage, [usage, actions, groups, prefix]); + } +}; + +/** + * HelpFormatter#addArgument(action) -> Void + * - action (object): action + * + * Add argument into current section + * + * Single variant of [[HelpFormatter#addArguments]] + **/ +HelpFormatter.prototype.addArgument = function (action) { + if (action.help !== $$.SUPPRESS) { + var self = this; + + // find all invocations + var invocations = [this._formatActionInvocation(action)]; + var invocationLength = invocations[0].length; + + var actionLength; + + if (!!action._getSubactions) { + this._indent(); + action._getSubactions().forEach(function (subaction) { + + var invocationNew = self._formatActionInvocation(subaction); + invocations.push(invocationNew); + invocationLength = Math.max(invocationLength, invocationNew.length); + + }); + this._dedent(); + } + + // update the maximum item length + actionLength = invocationLength + this._currentIndent; + this._actionMaxLength = Math.max(this._actionMaxLength, actionLength); + + // add the item to the list + this._addItem(this._formatAction, [action]); + } +}; + +/** + * HelpFormatter#addArguments(actions) -> Void + * - actions (array): actions list + * + * Mass add arguments into current section + * + * ##### Example + * + * formatter.startSection(actionGroup.title); + * formatter.addText(actionGroup.description); + * formatter.addArguments(actionGroup._groupActions); + * formatter.endSection(); + * + **/ +HelpFormatter.prototype.addArguments = function (actions) { + var self = this; + actions.forEach(function (action) { + self.addArgument(action); + }); +}; + +// +// Help-formatting methods +// + +/** + * HelpFormatter#formatHelp -> string + * + * Format help + * + * ##### Example + * + * formatter.addText(this.epilog); + * return formatter.formatHelp(); + * + **/ +HelpFormatter.prototype.formatHelp = function () { + var help = this._rootSection.formatHelp(this); + if (help) { + help = help.replace(this._longBreakMatcher, $$.EOL + $$.EOL); + help = _.trim(help, $$.EOL) + $$.EOL; + } + return help; +}; + +HelpFormatter.prototype._joinParts = function (partStrings) { + return partStrings.filter(function (part) { + return (!!part && part !== $$.SUPPRESS); + }).join(''); +}; + +HelpFormatter.prototype._formatUsage = function (usage, actions, groups, prefix) { + if (!prefix && !_.isString(prefix)) { + prefix = 'usage: '; + } + + actions = actions || []; + groups = groups || []; + + + // if usage is specified, use that + if (usage) { + usage = sprintf(usage, {prog: this._prog}); + + // if no optionals or positionals are available, usage is just prog + } else if (!usage && actions.length === 0) { + usage = this._prog; + + // if optionals and positionals are available, calculate usage + } else if (!usage) { + var prog = this._prog; + var optionals = []; + var positionals = []; + var actionUsage; + var textWidth; + + // split optionals from positionals + actions.forEach(function (action) { + if (action.isOptional()) { + optionals.push(action); + } else { + positionals.push(action); + } + }); + + // build full usage string + actionUsage = this._formatActionsUsage([].concat(optionals, positionals), groups); + usage = [prog, actionUsage].join(' '); + + // wrap the usage parts if it's too long + textWidth = this._width - this._currentIndent; + if ((prefix.length + usage.length) > textWidth) { + + // break usage into wrappable parts + var regexpPart = new RegExp('\\(.*?\\)+|\\[.*?\\]+|\\S+', 'g'); + var optionalUsage = this._formatActionsUsage(optionals, groups); + var positionalUsage = this._formatActionsUsage(positionals, groups); + + + var optionalParts = optionalUsage.match(regexpPart); + var positionalParts = positionalUsage.match(regexpPart) || []; + + if (optionalParts.join(' ') !== optionalUsage) { + throw new Error('assert "optionalParts.join(\' \') === optionalUsage"'); + } + if (positionalParts.join(' ') !== positionalUsage) { + throw new Error('assert "positionalParts.join(\' \') === positionalUsage"'); + } + + // helper for wrapping lines + var _getLines = function (parts, indent, prefix) { + var lines = []; + var line = []; + + var lineLength = !!prefix ? prefix.length - 1: indent.length - 1; + + parts.forEach(function (part) { + if (lineLength + 1 + part.length > textWidth) { + lines.push(indent + line.join(' ')); + line = []; + lineLength = indent.length - 1; + } + line.push(part); + lineLength += part.length + 1; + }); + + if (line) { + lines.push(indent + line.join(' ')); + } + if (prefix) { + lines[0] = lines[0].substr(indent.length); + } + return lines; + }; + + var lines, indent, parts; + // if prog is short, follow it with optionals or positionals + if (prefix.length + prog.length <= 0.75 * textWidth) { + indent = _.repeat(' ', (prefix.length + prog.length + 1)); + if (optionalParts) { + lines = [].concat( + _getLines([prog].concat(optionalParts), indent, prefix), + _getLines(positionalParts, indent) + ); + } else if (positionalParts) { + lines = _getLines([prog].concat(positionalParts), indent, prefix); + } else { + lines = [prog]; + } + + // if prog is long, put it on its own line + } else { + indent = _.repeat(' ', prefix.length); + parts = optionalParts + positionalParts; + lines = _getLines(parts, indent); + if (lines.length > 1) { + lines = [].concat( + _getLines(optionalParts, indent), + _getLines(positionalParts, indent) + ); + } + lines = [prog] + lines; + } + // join lines into usage + usage = lines.join($$.EOL); + } + } + + // prefix with 'usage:' + return prefix + usage + $$.EOL + $$.EOL; +}; + +HelpFormatter.prototype._formatActionsUsage = function (actions, groups) { + // find group indices and identify actions in groups + var groupActions = []; + var inserts = []; + var self = this; + + groups.forEach(function (group) { + var end; + var i; + + var start = actions.indexOf(group._groupActions[0]); + if (start >= 0) { + end = start + group._groupActions.length; + + //if (actions.slice(start, end) === group._groupActions) { + if (_.isEqual(actions.slice(start, end), group._groupActions)) { + group._groupActions.forEach(function (action) { + groupActions.push(action); + }); + + if (!group.required) { + if (!!inserts[start]) { + inserts[start] += ' ['; + } + else { + inserts[start] = '['; + } + inserts[end] = ']'; + } else { + if (!!inserts[start]) { + inserts[start] += ' ('; + } + else { + inserts[start] = '('; + } + inserts[end] = ')'; + } + for (i = start + 1; i < end; i += 1) { + inserts[i] = '|'; + } + } + } + }); + + // collect all actions format strings + var parts = []; + + actions.forEach(function (action, actionIndex) { + var part; + var optionString; + var argsDefault; + var argsString; + + // suppressed arguments are marked with None + // remove | separators for suppressed arguments + if (action.help === $$.SUPPRESS) { + parts.push(null); + if (inserts[actionIndex] === '|') { + inserts.splice(actionIndex, actionIndex); + } else if (inserts[actionIndex + 1] === '|') { + inserts.splice(actionIndex + 1, actionIndex + 1); + } + + // produce all arg strings + } else if (!action.isOptional()) { + part = self._formatArgs(action, action.dest); + + // if it's in a group, strip the outer [] + if (groupActions.indexOf(action) >= 0) { + if (part[0] === '[' && part[part.length - 1] === ']') { + part = part.slice(1, -1); + } + } + // add the action string to the list + parts.push(part); + + // produce the first way to invoke the option in brackets + } else { + optionString = action.optionStrings[0]; + + // if the Optional doesn't take a value, format is: -s or --long + if (action.nargs === 0) { + part = '' + optionString; + + // if the Optional takes a value, format is: -s ARGS or --long ARGS + } else { + argsDefault = action.dest.toUpperCase(); + argsString = self._formatArgs(action, argsDefault); + part = optionString + ' ' + argsString; + } + // make it look optional if it's not required or in a group + if (!action.required && groupActions.indexOf(action) < 0) { + part = '[' + part + ']'; + } + // add the action string to the list + parts.push(part); + } + }); + + // insert things at the necessary indices + for (var i = inserts.length - 1; i >= 0; --i) { + if (inserts[i] !== null) { + parts.splice(i, 0, inserts[i]); + } + } + + // join all the action items with spaces + var text = parts.filter(function (part) { + return !!part; + }).join(' '); + + // clean up separators for mutually exclusive groups + text = text.replace(/([\[(]) /g, '$1'); // remove spaces + text = text.replace(/ ([\])])/g, '$1'); + text = text.replace(/\[ *\]/g, ''); // remove empty groups + text = text.replace(/\( *\)/g, ''); + text = text.replace(/\(([^|]*)\)/g, '$1'); // remove () from single action groups + + text = _.trim(text); + + // return the text + return text; +}; + +HelpFormatter.prototype._formatText = function (text) { + text = sprintf(text, {prog: this._prog}); + var textWidth = this._width - this._currentIndent; + var indentIncriment = _.repeat(' ', this._currentIndent); + return this._fillText(text, textWidth, indentIncriment) + $$.EOL + $$.EOL; +}; + +HelpFormatter.prototype._formatAction = function (action) { + var self = this; + + var helpText; + var helpLines; + var parts; + var indentFirst; + + // determine the required width and the entry label + var helpPosition = Math.min(this._actionMaxLength + 2, this._maxHelpPosition); + var helpWidth = this._width - helpPosition; + var actionWidth = helpPosition - this._currentIndent - 2; + var actionHeader = this._formatActionInvocation(action); + + // no help; start on same line and add a final newline + if (!action.help) { + actionHeader = _.repeat(' ', this._currentIndent) + actionHeader + $$.EOL; + + // short action name; start on the same line and pad two spaces + } else if (actionHeader.length <= actionWidth) { + actionHeader = _.repeat(' ', this._currentIndent) + + actionHeader + + ' ' + + _.repeat(' ', actionWidth - actionHeader.length); + indentFirst = 0; + + // long action name; start on the next line + } else { + actionHeader = _.repeat(' ', this._currentIndent) + actionHeader + $$.EOL; + indentFirst = helpPosition; + } + + // collect the pieces of the action help + parts = [actionHeader]; + + // if there was help for the action, add lines of help text + if (!!action.help) { + helpText = this._expandHelp(action); + helpLines = this._splitLines(helpText, helpWidth); + parts.push(_.repeat(' ', indentFirst) + helpLines[0] + $$.EOL); + helpLines.slice(1).forEach(function (line) { + parts.push(_.repeat(' ', helpPosition) + line + $$.EOL); + }); + + // or add a newline if the description doesn't end with one + } else if (actionHeader.charAt(actionHeader.length - 1) !== $$.EOL) { + parts.push($$.EOL); + } + // if there are any sub-actions, add their help as well + if (!!action._getSubactions) { + this._indent(); + action._getSubactions().forEach(function (subaction) { + parts.push(self._formatAction(subaction)); + }); + this._dedent(); + } + // return a single string + return this._joinParts(parts); +}; + +HelpFormatter.prototype._formatActionInvocation = function (action) { + if (!action.isOptional()) { + var format_func = this._metavarFormatter(action, action.dest); + var metavars = format_func(1); + return metavars[0]; + } else { + var parts = []; + var argsDefault; + var argsString; + + // if the Optional doesn't take a value, format is: -s, --long + if (action.nargs === 0) { + parts = parts.concat(action.optionStrings); + + // if the Optional takes a value, format is: -s ARGS, --long ARGS + } else { + argsDefault = action.dest.toUpperCase(); + argsString = this._formatArgs(action, argsDefault); + action.optionStrings.forEach(function (optionString) { + parts.push(optionString + ' ' + argsString); + }); + } + return parts.join(', '); + } +}; + +HelpFormatter.prototype._metavarFormatter = function (action, metavarDefault) { + var result; + + if (!!action.metavar || action.metavar === '') { + result = action.metavar; + } else if (!!action.choices) { + var choices = action.choices; + + if (_.isString(choices)) { + choices = choices.split('').join(', '); + } else if (_.isArray(choices)) { + choices = choices.join(','); + } + else + { + choices = _.keys(choices).join(','); + } + result = '{' + choices + '}'; + } else { + result = metavarDefault; + } + + return function (size) { + if (Array.isArray(result)) { + return result; + } else { + var metavars = []; + for (var i = 0; i < size; i += 1) { + metavars.push(result); + } + return metavars; + } + }; +}; + +HelpFormatter.prototype._formatArgs = function (action, metavarDefault) { + var result; + var metavars; + + var buildMetavar = this._metavarFormatter(action, metavarDefault); + + switch (action.nargs) { + case undefined: + case null: + metavars = buildMetavar(1); + result = '' + metavars[0]; + break; + case $$.OPTIONAL: + metavars = buildMetavar(1); + result = '[' + metavars[0] + ']'; + break; + case $$.ZERO_OR_MORE: + metavars = buildMetavar(2); + result = '[' + metavars[0] + ' [' + metavars[1] + ' ...]]'; + break; + case $$.ONE_OR_MORE: + metavars = buildMetavar(2); + result = '' + metavars[0] + ' [' + metavars[1] + ' ...]'; + break; + case $$.REMAINDER: + result = '...'; + break; + case $$.PARSER: + metavars = buildMetavar(1); + result = metavars[0] + ' ...'; + break; + default: + metavars = buildMetavar(action.nargs); + result = metavars.join(' '); + } + return result; +}; + +HelpFormatter.prototype._expandHelp = function (action) { + var params = { prog: this._prog }; + + Object.keys(action).forEach(function (actionProperty) { + var actionValue = action[actionProperty]; + + if (actionValue !== $$.SUPPRESS) { + params[actionProperty] = actionValue; + } + }); + + if (!!params.choices) { + if (_.isString(params.choices)) { + params.choices = params.choices.split('').join(', '); + } + else if (_.isArray(params.choices)) { + params.choices = params.choices.join(', '); + } + else { + params.choices = _.keys(params.choices).join(', '); + } + } + + return sprintf(this._getHelpString(action), params); +}; + +HelpFormatter.prototype._splitLines = function (text, width) { + var lines = []; + var delimiters = [" ", ".", ",", "!", "?"]; + var re = new RegExp('[' + delimiters.join('') + '][^' + delimiters.join('') + ']*$'); + + text = text.replace(/[\n\|\t]/g, ' '); + + text = _.trim(text); + text = text.replace(this._whitespaceMatcher, ' '); + + // Wraps the single paragraph in text (a string) so every line + // is at most width characters long. + text.split($$.EOL).forEach(function (line) { + if (width >= line.length) { + lines.push(line); + return; + } + + var wrapStart = 0; + var wrapEnd = width; + var delimiterIndex = 0; + while (wrapEnd <= line.length) { + if (wrapEnd !== line.length && delimiters.indexOf(line[wrapEnd] < -1)) { + delimiterIndex = (re.exec(line.substring(wrapStart, wrapEnd)) || {}).index; + wrapEnd = wrapStart + delimiterIndex + 1; + } + lines.push(line.substring(wrapStart, wrapEnd)); + wrapStart = wrapEnd; + wrapEnd += width; + } + if (wrapStart < line.length) { + lines.push(line.substring(wrapStart, wrapEnd)); + } + }); + + return lines; +}; + +HelpFormatter.prototype._fillText = function (text, width, indent) { + var lines = this._splitLines(text, width); + lines = lines.map(function (line) { + return indent + line; + }); + return lines.join($$.EOL); +}; + +HelpFormatter.prototype._getHelpString = function (action) { + return action.help; +}; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/lib/namespace.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/lib/namespace.js new file mode 100644 index 00000000..2f1f8f4d --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/lib/namespace.js @@ -0,0 +1,77 @@ +/** + * class Namespace + * + * Simple object for storing attributes. Implements equality by attribute names + * and values, and provides a simple string representation. + * + * See also [original guide][1] + * + * [1]:http://docs.python.org/dev/library/argparse.html#the-namespace-object + **/ +'use strict'; + +var _ = require('lodash'); + +/** + * new Namespace(options) + * - options(object): predefined propertis for result object + * + **/ +var Namespace = module.exports = function Namespace(options) { + _.extend(this, options); +}; + +/** + * Namespace#isset(key) -> Boolean + * - key (string|number): property name + * + * Tells whenever `namespace` contains given `key` or not. + **/ +Namespace.prototype.isset = function (key) { + return _.has(this, key); +}; + +/** + * Namespace#set(key, value) -> self + * -key (string|number|object): propery name + * -value (mixed): new property value + * + * Set the property named key with value. + * If key object then set all key properties to namespace object + **/ +Namespace.prototype.set = function (key, value) { + if (typeof (key) === 'object') { + _.extend(this, key); + } else { + this[key] = value; + } + return this; +}; + +/** + * Namespace#get(key, defaultValue) -> mixed + * - key (string|number): property name + * - defaultValue (mixed): default value + * + * Return the property key or defaulValue if not set + **/ +Namespace.prototype.get = function (key, defaultValue) { + return !this[key] ? defaultValue: this[key]; +}; + +/** + * Namespace#unset(key, defaultValue) -> mixed + * - key (string|number): property name + * - defaultValue (mixed): default value + * + * Return data[key](and delete it) or defaultValue + **/ +Namespace.prototype.unset = function (key, defaultValue) { + var value = this[key]; + if (value !== null) { + delete this[key]; + return value; + } else { + return defaultValue; + } +}; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/LICENSE b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/LICENSE new file mode 100644 index 00000000..9cd87e5d --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/LICENSE @@ -0,0 +1,22 @@ +Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/> +Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors <http://underscorejs.org/> + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/README.md b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/README.md new file mode 100644 index 00000000..189265e7 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/README.md @@ -0,0 +1,121 @@ +# lodash v3.10.0 + +The [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash](https://lodash.com/) exported as [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) modules. + +Generated using [lodash-cli](https://www.npmjs.com/package/lodash-cli): +```bash +$ lodash modularize modern exports=node -o ./ +$ lodash modern -d -o ./index.js +``` + +## Installation + +Using npm: + +```bash +$ {sudo -H} npm i -g npm +$ npm i --save lodash +``` + +In Node.js/io.js: + +```js +// load the modern build +var _ = require('lodash'); +// or a method category +var array = require('lodash/array'); +// or a method (great for smaller builds with browserify/webpack) +var chunk = require('lodash/array/chunk'); +``` + +See the [package source](https://github.com/lodash/lodash/tree/3.10.0-npm) for more details. + +**Note:**<br> +Don’t assign values to the [special variable](http://nodejs.org/api/repl.html#repl_repl_features) `_` when in the REPL.<br> +Install [n_](https://www.npmjs.com/package/n_) for a REPL that includes lodash by default. + +## Module formats + +lodash is also available in a variety of other builds & module formats. + + * npm packages for [modern](https://www.npmjs.com/package/lodash), [compatibility](https://www.npmjs.com/package/lodash-compat), & [per method](https://www.npmjs.com/browse/keyword/lodash-modularized) builds + * AMD modules for [modern](https://github.com/lodash/lodash/tree/3.10.0-amd) & [compatibility](https://github.com/lodash/lodash-compat/tree/3.10.0-amd) builds + * ES modules for the [modern](https://github.com/lodash/lodash/tree/3.10.0-es) build + +## Further Reading + + * [API Documentation](https://lodash.com/docs) + * [Build Differences](https://github.com/lodash/lodash/wiki/Build-Differences) + * [Changelog](https://github.com/lodash/lodash/wiki/Changelog) + * [Roadmap](https://github.com/lodash/lodash/wiki/Roadmap) + * [More Resources](https://github.com/lodash/lodash/wiki/Resources) + +## Features + + * ~100% [code coverage](https://coveralls.io/r/lodash) + * Follows [semantic versioning](http://semver.org/) for releases + * [Lazily evaluated](http://filimanjaro.com/blog/2014/introducing-lazy-evaluation/) chaining + * [_(…)](https://lodash.com/docs#_) supports implicit chaining + * [_.ary](https://lodash.com/docs#ary) & [_.rearg](https://lodash.com/docs#rearg) to change function argument limits & order + * [_.at](https://lodash.com/docs#at) for cherry-picking collection values + * [_.attempt](https://lodash.com/docs#attempt) to execute functions which may error without a try-catch + * [_.before](https://lodash.com/docs#before) to complement [_.after](https://lodash.com/docs#after) + * [_.bindKey](https://lodash.com/docs#bindKey) for binding [*“lazyâ€*](http://michaux.ca/articles/lazy-function-definition-pattern) defined methods + * [_.chunk](https://lodash.com/docs#chunk) for splitting an array into chunks of a given size + * [_.clone](https://lodash.com/docs#clone) supports shallow cloning of `Date` & `RegExp` objects + * [_.cloneDeep](https://lodash.com/docs#cloneDeep) for deep cloning arrays & objects + * [_.curry](https://lodash.com/docs#curry) & [_.curryRight](https://lodash.com/docs#curryRight) for creating [curried](http://hughfdjackson.com/javascript/why-curry-helps/) functions + * [_.debounce](https://lodash.com/docs#debounce) & [_.throttle](https://lodash.com/docs#throttle) are cancelable & accept options for more control + * [_.defaultsDeep](https://lodash.com/docs#defaultsDeep) for recursively assigning default properties + * [_.fill](https://lodash.com/docs#fill) to fill arrays with values + * [_.findKey](https://lodash.com/docs#findKey) for finding keys + * [_.flow](https://lodash.com/docs#flow) to complement [_.flowRight](https://lodash.com/docs#flowRight) (a.k.a `_.compose`) + * [_.forEach](https://lodash.com/docs#forEach) supports exiting early + * [_.forIn](https://lodash.com/docs#forIn) for iterating all enumerable properties + * [_.forOwn](https://lodash.com/docs#forOwn) for iterating own properties + * [_.get](https://lodash.com/docs#get) & [_.set](https://lodash.com/docs#set) for deep property getting & setting + * [_.gt](https://lodash.com/docs#gt), [_.gte](https://lodash.com/docs#gte), [_.lt](https://lodash.com/docs#lt), & [_.lte](https://lodash.com/docs#lte) relational methods + * [_.inRange](https://lodash.com/docs#inRange) for checking whether a number is within a given range + * [_.isNative](https://lodash.com/docs#isNative) to check for native functions + * [_.isPlainObject](https://lodash.com/docs#isPlainObject) & [_.toPlainObject](https://lodash.com/docs#toPlainObject) to check for & convert to `Object` objects + * [_.isTypedArray](https://lodash.com/docs#isTypedArray) to check for typed arrays + * [_.mapKeys](https://lodash.com/docs#mapKeys) for mapping keys to an object + * [_.matches](https://lodash.com/docs#matches) supports deep object comparisons + * [_.matchesProperty](https://lodash.com/docs#matchesProperty) to complement [_.matches](https://lodash.com/docs#matches) & [_.property](https://lodash.com/docs#property) + * [_.merge](https://lodash.com/docs#merge) for a deep [_.extend](https://lodash.com/docs#extend) + * [_.method](https://lodash.com/docs#method) & [_.methodOf](https://lodash.com/docs#methodOf) to create functions that invoke methods + * [_.modArgs](https://lodash.com/docs#modArgs) for more advanced functional composition + * [_.parseInt](https://lodash.com/docs#parseInt) for consistent cross-environment behavior + * [_.pull](https://lodash.com/docs#pull), [_.pullAt](https://lodash.com/docs#pullAt), & [_.remove](https://lodash.com/docs#remove) for mutating arrays + * [_.random](https://lodash.com/docs#random) supports returning floating-point numbers + * [_.restParam](https://lodash.com/docs#restParam) & [_.spread](https://lodash.com/docs#spread) for applying rest parameters & spreading arguments to functions + * [_.runInContext](https://lodash.com/docs#runInContext) for collisionless mixins & easier mocking + * [_.slice](https://lodash.com/docs#slice) for creating subsets of array-like values + * [_.sortByAll](https://lodash.com/docs#sortByAll) & [_.sortByOrder](https://lodash.com/docs#sortByOrder) for sorting by multiple properties & orders + * [_.support](https://lodash.com/docs#support) for flagging environment features + * [_.template](https://lodash.com/docs#template) supports [*“importsâ€*](https://lodash.com/docs#templateSettings-imports) options & [ES template delimiters](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-template-literal-lexical-components) + * [_.transform](https://lodash.com/docs#transform) as a powerful alternative to [_.reduce](https://lodash.com/docs#reduce) for transforming objects + * [_.unzipWith](https://lodash.com/docs#unzipWith) & [_.zipWith](https://lodash.com/docs#zipWith) to specify how grouped values should be combined + * [_.valuesIn](https://lodash.com/docs#valuesIn) for getting values of all enumerable properties + * [_.xor](https://lodash.com/docs#xor) to complement [_.difference](https://lodash.com/docs#difference), [_.intersection](https://lodash.com/docs#intersection), & [_.union](https://lodash.com/docs#union) + * [_.add](https://lodash.com/docs#add), [_.round](https://lodash.com/docs#round), [_.sum](https://lodash.com/docs#sum), & + [more](https://lodash.com/docs "_.ceil & _.floor") math methods + * [_.bind](https://lodash.com/docs#bind), [_.curry](https://lodash.com/docs#curry), [_.partial](https://lodash.com/docs#partial), & + [more](https://lodash.com/docs "_.bindKey, _.curryRight, _.partialRight") support customizable argument placeholders + * [_.capitalize](https://lodash.com/docs#capitalize), [_.trim](https://lodash.com/docs#trim), & + [more](https://lodash.com/docs "_.camelCase, _.deburr, _.endsWith, _.escapeRegExp, _.kebabCase, _.pad, _.padLeft, _.padRight, _.repeat, _.snakeCase, _.startCase, _.startsWith, _.trimLeft, _.trimRight, _.trunc, _.words") string methods + * [_.clone](https://lodash.com/docs#clone), [_.isEqual](https://lodash.com/docs#isEqual), & + [more](https://lodash.com/docs "_.assign, _.cloneDeep, _.merge") accept customizer callbacks + * [_.dropWhile](https://lodash.com/docs#dropWhile), [_.takeWhile](https://lodash.com/docs#takeWhile), & + [more](https://lodash.com/docs "_.drop, _.dropRight, _.dropRightWhile, _.take, _.takeRight, _.takeRightWhile") to complement [_.first](https://lodash.com/docs#first), [_.initial](https://lodash.com/docs#initial), [_.last](https://lodash.com/docs#last), & [_.rest](https://lodash.com/docs#rest) + * [_.findLast](https://lodash.com/docs#findLast), [_.findLastKey](https://lodash.com/docs#findLastKey), & + [more](https://lodash.com/docs "_.curryRight, _.dropRight, _.dropRightWhile, _.flowRight, _.forEachRight, _.forInRight, _.forOwnRight, _.padRight, partialRight, _.takeRight, _.trimRight, _.takeRightWhile") right-associative methods + * [_.includes](https://lodash.com/docs#includes), [_.toArray](https://lodash.com/docs#toArray), & + [more](https://lodash.com/docs "_.at, _.countBy, _.every, _.filter, _.find, _.findLast, _.findWhere, _.forEach, _.forEachRight, _.groupBy, _.indexBy, _.invoke, _.map, _.max, _.min, _.partition, _.pluck, _.reduce, _.reduceRight, _.reject, _.shuffle, _.size, _.some, _.sortBy, _.sortByAll, _.sortByOrder, _.sum, _.where") accept strings + * [_#commit](https://lodash.com/docs#prototype-commit) & [_#plant](https://lodash.com/docs#prototype-plant) for working with chain sequences + * [_#thru](https://lodash.com/docs#thru) to pass values thru a chain sequence + +## Support + +Tested in Chrome 42-43, Firefox 37-38, IE 6-11, MS Edge, Opera 28-29, Safari 5-8, ChakraNode 0.12.2, io.js 2.3.1, Node.js 0.8.28, 0.10.38, & 0.12.5, PhantomJS 1.9.8, RingoJS 0.11, & Rhino 1.7.6. +Automated [browser](https://saucelabs.com/u/lodash) & [CI](https://travis-ci.org/lodash/lodash/) test runs are available. Special thanks to [Sauce Labs](https://saucelabs.com/) for providing automated browser testing. diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array.js new file mode 100644 index 00000000..e5121fa5 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array.js @@ -0,0 +1,44 @@ +module.exports = { + 'chunk': require('./array/chunk'), + 'compact': require('./array/compact'), + 'difference': require('./array/difference'), + 'drop': require('./array/drop'), + 'dropRight': require('./array/dropRight'), + 'dropRightWhile': require('./array/dropRightWhile'), + 'dropWhile': require('./array/dropWhile'), + 'fill': require('./array/fill'), + 'findIndex': require('./array/findIndex'), + 'findLastIndex': require('./array/findLastIndex'), + 'first': require('./array/first'), + 'flatten': require('./array/flatten'), + 'flattenDeep': require('./array/flattenDeep'), + 'head': require('./array/head'), + 'indexOf': require('./array/indexOf'), + 'initial': require('./array/initial'), + 'intersection': require('./array/intersection'), + 'last': require('./array/last'), + 'lastIndexOf': require('./array/lastIndexOf'), + 'object': require('./array/object'), + 'pull': require('./array/pull'), + 'pullAt': require('./array/pullAt'), + 'remove': require('./array/remove'), + 'rest': require('./array/rest'), + 'slice': require('./array/slice'), + 'sortedIndex': require('./array/sortedIndex'), + 'sortedLastIndex': require('./array/sortedLastIndex'), + 'tail': require('./array/tail'), + 'take': require('./array/take'), + 'takeRight': require('./array/takeRight'), + 'takeRightWhile': require('./array/takeRightWhile'), + 'takeWhile': require('./array/takeWhile'), + 'union': require('./array/union'), + 'uniq': require('./array/uniq'), + 'unique': require('./array/unique'), + 'unzip': require('./array/unzip'), + 'unzipWith': require('./array/unzipWith'), + 'without': require('./array/without'), + 'xor': require('./array/xor'), + 'zip': require('./array/zip'), + 'zipObject': require('./array/zipObject'), + 'zipWith': require('./array/zipWith') +}; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/chunk.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/chunk.js new file mode 100644 index 00000000..c8be1fb0 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/chunk.js @@ -0,0 +1,46 @@ +var baseSlice = require('../internal/baseSlice'), + isIterateeCall = require('../internal/isIterateeCall'); + +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeCeil = Math.ceil, + nativeFloor = Math.floor, + nativeMax = Math.max; + +/** + * Creates an array of elements split into groups the length of `size`. + * If `collection` can't be split evenly, the final chunk will be the remaining + * elements. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to process. + * @param {number} [size=1] The length of each chunk. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Array} Returns the new array containing chunks. + * @example + * + * _.chunk(['a', 'b', 'c', 'd'], 2); + * // => [['a', 'b'], ['c', 'd']] + * + * _.chunk(['a', 'b', 'c', 'd'], 3); + * // => [['a', 'b', 'c'], ['d']] + */ +function chunk(array, size, guard) { + if (guard ? isIterateeCall(array, size, guard) : size == null) { + size = 1; + } else { + size = nativeMax(nativeFloor(size) || 1, 1); + } + var index = 0, + length = array ? array.length : 0, + resIndex = -1, + result = Array(nativeCeil(length / size)); + + while (index < length) { + result[++resIndex] = baseSlice(array, index, (index += size)); + } + return result; +} + +module.exports = chunk; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/compact.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/compact.js new file mode 100644 index 00000000..1dc1c55e --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/compact.js @@ -0,0 +1,30 @@ +/** + * Creates an array with all falsey values removed. The values `false`, `null`, + * `0`, `""`, `undefined`, and `NaN` are falsey. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to compact. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.compact([0, 1, false, 2, '', 3]); + * // => [1, 2, 3] + */ +function compact(array) { + var index = -1, + length = array ? array.length : 0, + resIndex = -1, + result = []; + + while (++index < length) { + var value = array[index]; + if (value) { + result[++resIndex] = value; + } + } + return result; +} + +module.exports = compact; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/difference.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/difference.js new file mode 100644 index 00000000..128932a1 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/difference.js @@ -0,0 +1,29 @@ +var baseDifference = require('../internal/baseDifference'), + baseFlatten = require('../internal/baseFlatten'), + isArrayLike = require('../internal/isArrayLike'), + isObjectLike = require('../internal/isObjectLike'), + restParam = require('../function/restParam'); + +/** + * Creates an array of unique `array` values not included in the other + * provided arrays using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The arrays of values to exclude. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.difference([1, 2, 3], [4, 2]); + * // => [1, 3] + */ +var difference = restParam(function(array, values) { + return (isObjectLike(array) && isArrayLike(array)) + ? baseDifference(array, baseFlatten(values, false, true)) + : []; +}); + +module.exports = difference; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/drop.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/drop.js new file mode 100644 index 00000000..039a0b5f --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/drop.js @@ -0,0 +1,39 @@ +var baseSlice = require('../internal/baseSlice'), + isIterateeCall = require('../internal/isIterateeCall'); + +/** + * Creates a slice of `array` with `n` elements dropped from the beginning. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to drop. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.drop([1, 2, 3]); + * // => [2, 3] + * + * _.drop([1, 2, 3], 2); + * // => [3] + * + * _.drop([1, 2, 3], 5); + * // => [] + * + * _.drop([1, 2, 3], 0); + * // => [1, 2, 3] + */ +function drop(array, n, guard) { + var length = array ? array.length : 0; + if (!length) { + return []; + } + if (guard ? isIterateeCall(array, n, guard) : n == null) { + n = 1; + } + return baseSlice(array, n < 0 ? 0 : n); +} + +module.exports = drop; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/dropRight.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/dropRight.js new file mode 100644 index 00000000..14b5eb6f --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/dropRight.js @@ -0,0 +1,40 @@ +var baseSlice = require('../internal/baseSlice'), + isIterateeCall = require('../internal/isIterateeCall'); + +/** + * Creates a slice of `array` with `n` elements dropped from the end. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to drop. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.dropRight([1, 2, 3]); + * // => [1, 2] + * + * _.dropRight([1, 2, 3], 2); + * // => [1] + * + * _.dropRight([1, 2, 3], 5); + * // => [] + * + * _.dropRight([1, 2, 3], 0); + * // => [1, 2, 3] + */ +function dropRight(array, n, guard) { + var length = array ? array.length : 0; + if (!length) { + return []; + } + if (guard ? isIterateeCall(array, n, guard) : n == null) { + n = 1; + } + n = length - (+n || 0); + return baseSlice(array, 0, n < 0 ? 0 : n); +} + +module.exports = dropRight; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/dropRightWhile.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/dropRightWhile.js new file mode 100644 index 00000000..be158bd5 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/dropRightWhile.js @@ -0,0 +1,59 @@ +var baseCallback = require('../internal/baseCallback'), + baseWhile = require('../internal/baseWhile'); + +/** + * Creates a slice of `array` excluding elements dropped from the end. + * Elements are dropped until `predicate` returns falsey. The predicate is + * bound to `thisArg` and invoked with three arguments: (value, index, array). + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that match the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.dropRightWhile([1, 2, 3], function(n) { + * return n > 1; + * }); + * // => [1] + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * // using the `_.matches` callback shorthand + * _.pluck(_.dropRightWhile(users, { 'user': 'pebbles', 'active': false }), 'user'); + * // => ['barney', 'fred'] + * + * // using the `_.matchesProperty` callback shorthand + * _.pluck(_.dropRightWhile(users, 'active', false), 'user'); + * // => ['barney'] + * + * // using the `_.property` callback shorthand + * _.pluck(_.dropRightWhile(users, 'active'), 'user'); + * // => ['barney', 'fred', 'pebbles'] + */ +function dropRightWhile(array, predicate, thisArg) { + return (array && array.length) + ? baseWhile(array, baseCallback(predicate, thisArg, 3), true, true) + : []; +} + +module.exports = dropRightWhile; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/dropWhile.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/dropWhile.js new file mode 100644 index 00000000..d9eabae9 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/dropWhile.js @@ -0,0 +1,59 @@ +var baseCallback = require('../internal/baseCallback'), + baseWhile = require('../internal/baseWhile'); + +/** + * Creates a slice of `array` excluding elements dropped from the beginning. + * Elements are dropped until `predicate` returns falsey. The predicate is + * bound to `thisArg` and invoked with three arguments: (value, index, array). + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.dropWhile([1, 2, 3], function(n) { + * return n < 3; + * }); + * // => [3] + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * // using the `_.matches` callback shorthand + * _.pluck(_.dropWhile(users, { 'user': 'barney', 'active': false }), 'user'); + * // => ['fred', 'pebbles'] + * + * // using the `_.matchesProperty` callback shorthand + * _.pluck(_.dropWhile(users, 'active', false), 'user'); + * // => ['pebbles'] + * + * // using the `_.property` callback shorthand + * _.pluck(_.dropWhile(users, 'active'), 'user'); + * // => ['barney', 'fred', 'pebbles'] + */ +function dropWhile(array, predicate, thisArg) { + return (array && array.length) + ? baseWhile(array, baseCallback(predicate, thisArg, 3), true) + : []; +} + +module.exports = dropWhile; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/fill.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/fill.js new file mode 100644 index 00000000..2c8f6da7 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/fill.js @@ -0,0 +1,44 @@ +var baseFill = require('../internal/baseFill'), + isIterateeCall = require('../internal/isIterateeCall'); + +/** + * Fills elements of `array` with `value` from `start` up to, but not + * including, `end`. + * + * **Note:** This method mutates `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to fill. + * @param {*} value The value to fill `array` with. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns `array`. + * @example + * + * var array = [1, 2, 3]; + * + * _.fill(array, 'a'); + * console.log(array); + * // => ['a', 'a', 'a'] + * + * _.fill(Array(3), 2); + * // => [2, 2, 2] + * + * _.fill([4, 6, 8], '*', 1, 2); + * // => [4, '*', 8] + */ +function fill(array, value, start, end) { + var length = array ? array.length : 0; + if (!length) { + return []; + } + if (start && typeof start != 'number' && isIterateeCall(array, value, start)) { + start = 0; + end = length; + } + return baseFill(array, value, start, end); +} + +module.exports = fill; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/findIndex.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/findIndex.js new file mode 100644 index 00000000..2a6b8e14 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/findIndex.js @@ -0,0 +1,53 @@ +var createFindIndex = require('../internal/createFindIndex'); + +/** + * This method is like `_.find` except that it returns the index of the first + * element `predicate` returns truthy for instead of the element itself. + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to search. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.findIndex(users, function(chr) { + * return chr.user == 'barney'; + * }); + * // => 0 + * + * // using the `_.matches` callback shorthand + * _.findIndex(users, { 'user': 'fred', 'active': false }); + * // => 1 + * + * // using the `_.matchesProperty` callback shorthand + * _.findIndex(users, 'active', false); + * // => 0 + * + * // using the `_.property` callback shorthand + * _.findIndex(users, 'active'); + * // => 2 + */ +var findIndex = createFindIndex(); + +module.exports = findIndex; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/findLastIndex.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/findLastIndex.js new file mode 100644 index 00000000..d6d8eca6 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/findLastIndex.js @@ -0,0 +1,53 @@ +var createFindIndex = require('../internal/createFindIndex'); + +/** + * This method is like `_.findIndex` except that it iterates over elements + * of `collection` from right to left. + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to search. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * _.findLastIndex(users, function(chr) { + * return chr.user == 'pebbles'; + * }); + * // => 2 + * + * // using the `_.matches` callback shorthand + * _.findLastIndex(users, { 'user': 'barney', 'active': true }); + * // => 0 + * + * // using the `_.matchesProperty` callback shorthand + * _.findLastIndex(users, 'active', false); + * // => 2 + * + * // using the `_.property` callback shorthand + * _.findLastIndex(users, 'active'); + * // => 0 + */ +var findLastIndex = createFindIndex(true); + +module.exports = findLastIndex; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/first.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/first.js new file mode 100644 index 00000000..b3b9c79c --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/first.js @@ -0,0 +1,22 @@ +/** + * Gets the first element of `array`. + * + * @static + * @memberOf _ + * @alias head + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the first element of `array`. + * @example + * + * _.first([1, 2, 3]); + * // => 1 + * + * _.first([]); + * // => undefined + */ +function first(array) { + return array ? array[0] : undefined; +} + +module.exports = first; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/flatten.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/flatten.js new file mode 100644 index 00000000..65bbeefb --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/flatten.js @@ -0,0 +1,32 @@ +var baseFlatten = require('../internal/baseFlatten'), + isIterateeCall = require('../internal/isIterateeCall'); + +/** + * Flattens a nested array. If `isDeep` is `true` the array is recursively + * flattened, otherwise it is only flattened a single level. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to flatten. + * @param {boolean} [isDeep] Specify a deep flatten. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, 3, [4]]]); + * // => [1, 2, 3, [4]] + * + * // using `isDeep` + * _.flatten([1, [2, 3, [4]]], true); + * // => [1, 2, 3, 4] + */ +function flatten(array, isDeep, guard) { + var length = array ? array.length : 0; + if (guard && isIterateeCall(array, isDeep, guard)) { + isDeep = false; + } + return length ? baseFlatten(array, isDeep) : []; +} + +module.exports = flatten; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/flattenDeep.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/flattenDeep.js new file mode 100644 index 00000000..9f775feb --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/flattenDeep.js @@ -0,0 +1,21 @@ +var baseFlatten = require('../internal/baseFlatten'); + +/** + * Recursively flattens a nested array. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to recursively flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flattenDeep([1, [2, 3, [4]]]); + * // => [1, 2, 3, 4] + */ +function flattenDeep(array) { + var length = array ? array.length : 0; + return length ? baseFlatten(array, true) : []; +} + +module.exports = flattenDeep; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/head.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/head.js new file mode 100644 index 00000000..1961b08c --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/head.js @@ -0,0 +1 @@ +module.exports = require('./first'); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/indexOf.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/indexOf.js new file mode 100644 index 00000000..bad31076 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/indexOf.js @@ -0,0 +1,53 @@ +var baseIndexOf = require('../internal/baseIndexOf'), + binaryIndex = require('../internal/binaryIndex'); + +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * Gets the index at which the first occurrence of `value` is found in `array` + * using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons. If `fromIndex` is negative, it is used as the offset + * from the end of `array`. If `array` is sorted providing `true` for `fromIndex` + * performs a faster binary search. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to search. + * @param {*} value The value to search for. + * @param {boolean|number} [fromIndex=0] The index to search from or `true` + * to perform a binary search on a sorted array. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.indexOf([1, 2, 1, 2], 2); + * // => 1 + * + * // using `fromIndex` + * _.indexOf([1, 2, 1, 2], 2, 2); + * // => 3 + * + * // performing a binary search + * _.indexOf([1, 1, 2, 2], 2, true); + * // => 2 + */ +function indexOf(array, value, fromIndex) { + var length = array ? array.length : 0; + if (!length) { + return -1; + } + if (typeof fromIndex == 'number') { + fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : fromIndex; + } else if (fromIndex) { + var index = binaryIndex(array, value); + if (index < length && + (value === value ? (value === array[index]) : (array[index] !== array[index]))) { + return index; + } + return -1; + } + return baseIndexOf(array, value, fromIndex || 0); +} + +module.exports = indexOf; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/initial.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/initial.js new file mode 100644 index 00000000..59b7a7d9 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/initial.js @@ -0,0 +1,20 @@ +var dropRight = require('./dropRight'); + +/** + * Gets all but the last element of `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.initial([1, 2, 3]); + * // => [1, 2] + */ +function initial(array) { + return dropRight(array, 1); +} + +module.exports = initial; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/intersection.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/intersection.js new file mode 100644 index 00000000..f218432c --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/intersection.js @@ -0,0 +1,58 @@ +var baseIndexOf = require('../internal/baseIndexOf'), + cacheIndexOf = require('../internal/cacheIndexOf'), + createCache = require('../internal/createCache'), + isArrayLike = require('../internal/isArrayLike'), + restParam = require('../function/restParam'); + +/** + * Creates an array of unique values that are included in all of the provided + * arrays using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of shared values. + * @example + * _.intersection([1, 2], [4, 2], [2, 1]); + * // => [2] + */ +var intersection = restParam(function(arrays) { + var othLength = arrays.length, + othIndex = othLength, + caches = Array(length), + indexOf = baseIndexOf, + isCommon = true, + result = []; + + while (othIndex--) { + var value = arrays[othIndex] = isArrayLike(value = arrays[othIndex]) ? value : []; + caches[othIndex] = (isCommon && value.length >= 120) ? createCache(othIndex && value) : null; + } + var array = arrays[0], + index = -1, + length = array ? array.length : 0, + seen = caches[0]; + + outer: + while (++index < length) { + value = array[index]; + if ((seen ? cacheIndexOf(seen, value) : indexOf(result, value, 0)) < 0) { + var othIndex = othLength; + while (--othIndex) { + var cache = caches[othIndex]; + if ((cache ? cacheIndexOf(cache, value) : indexOf(arrays[othIndex], value, 0)) < 0) { + continue outer; + } + } + if (seen) { + seen.push(value); + } + result.push(value); + } + } + return result; +}); + +module.exports = intersection; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/last.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/last.js new file mode 100644 index 00000000..299af314 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/last.js @@ -0,0 +1,19 @@ +/** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ +function last(array) { + var length = array ? array.length : 0; + return length ? array[length - 1] : undefined; +} + +module.exports = last; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/lastIndexOf.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/lastIndexOf.js new file mode 100644 index 00000000..02b80626 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/lastIndexOf.js @@ -0,0 +1,60 @@ +var binaryIndex = require('../internal/binaryIndex'), + indexOfNaN = require('../internal/indexOfNaN'); + +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max, + nativeMin = Math.min; + +/** + * This method is like `_.indexOf` except that it iterates over elements of + * `array` from right to left. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to search. + * @param {*} value The value to search for. + * @param {boolean|number} [fromIndex=array.length-1] The index to search from + * or `true` to perform a binary search on a sorted array. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.lastIndexOf([1, 2, 1, 2], 2); + * // => 3 + * + * // using `fromIndex` + * _.lastIndexOf([1, 2, 1, 2], 2, 2); + * // => 1 + * + * // performing a binary search + * _.lastIndexOf([1, 1, 2, 2], 2, true); + * // => 3 + */ +function lastIndexOf(array, value, fromIndex) { + var length = array ? array.length : 0; + if (!length) { + return -1; + } + var index = length; + if (typeof fromIndex == 'number') { + index = (fromIndex < 0 ? nativeMax(length + fromIndex, 0) : nativeMin(fromIndex || 0, length - 1)) + 1; + } else if (fromIndex) { + index = binaryIndex(array, value, true) - 1; + var other = array[index]; + if (value === value ? (value === other) : (other !== other)) { + return index; + } + return -1; + } + if (value !== value) { + return indexOfNaN(array, index, true); + } + while (index--) { + if (array[index] === value) { + return index; + } + } + return -1; +} + +module.exports = lastIndexOf; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/object.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/object.js new file mode 100644 index 00000000..f4a34531 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/object.js @@ -0,0 +1 @@ +module.exports = require('./zipObject'); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/pull.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/pull.js new file mode 100644 index 00000000..7bcbb4a6 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/pull.js @@ -0,0 +1,52 @@ +var baseIndexOf = require('../internal/baseIndexOf'); + +/** Used for native method references. */ +var arrayProto = Array.prototype; + +/** Native method references. */ +var splice = arrayProto.splice; + +/** + * Removes all provided values from `array` using + * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons. + * + * **Note:** Unlike `_.without`, this method mutates `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to modify. + * @param {...*} [values] The values to remove. + * @returns {Array} Returns `array`. + * @example + * + * var array = [1, 2, 3, 1, 2, 3]; + * + * _.pull(array, 2, 3); + * console.log(array); + * // => [1, 1] + */ +function pull() { + var args = arguments, + array = args[0]; + + if (!(array && array.length)) { + return array; + } + var index = 0, + indexOf = baseIndexOf, + length = args.length; + + while (++index < length) { + var fromIndex = 0, + value = args[index]; + + while ((fromIndex = indexOf(array, value, fromIndex)) > -1) { + splice.call(array, fromIndex, 1); + } + } + return array; +} + +module.exports = pull; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/pullAt.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/pullAt.js new file mode 100644 index 00000000..4ca2476f --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/pullAt.js @@ -0,0 +1,40 @@ +var baseAt = require('../internal/baseAt'), + baseCompareAscending = require('../internal/baseCompareAscending'), + baseFlatten = require('../internal/baseFlatten'), + basePullAt = require('../internal/basePullAt'), + restParam = require('../function/restParam'); + +/** + * Removes elements from `array` corresponding to the given indexes and returns + * an array of the removed elements. Indexes may be specified as an array of + * indexes or as individual arguments. + * + * **Note:** Unlike `_.at`, this method mutates `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to modify. + * @param {...(number|number[])} [indexes] The indexes of elements to remove, + * specified as individual indexes or arrays of indexes. + * @returns {Array} Returns the new array of removed elements. + * @example + * + * var array = [5, 10, 15, 20]; + * var evens = _.pullAt(array, 1, 3); + * + * console.log(array); + * // => [5, 15] + * + * console.log(evens); + * // => [10, 20] + */ +var pullAt = restParam(function(array, indexes) { + indexes = baseFlatten(indexes); + + var result = baseAt(array, indexes); + basePullAt(array, indexes.sort(baseCompareAscending)); + return result; +}); + +module.exports = pullAt; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/remove.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/remove.js new file mode 100644 index 00000000..0cf979bd --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/remove.js @@ -0,0 +1,64 @@ +var baseCallback = require('../internal/baseCallback'), + basePullAt = require('../internal/basePullAt'); + +/** + * Removes all elements from `array` that `predicate` returns truthy for + * and returns an array of the removed elements. The predicate is bound to + * `thisArg` and invoked with three arguments: (value, index, array). + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * **Note:** Unlike `_.filter`, this method mutates `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to modify. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {Array} Returns the new array of removed elements. + * @example + * + * var array = [1, 2, 3, 4]; + * var evens = _.remove(array, function(n) { + * return n % 2 == 0; + * }); + * + * console.log(array); + * // => [1, 3] + * + * console.log(evens); + * // => [2, 4] + */ +function remove(array, predicate, thisArg) { + var result = []; + if (!(array && array.length)) { + return result; + } + var index = -1, + indexes = [], + length = array.length; + + predicate = baseCallback(predicate, thisArg, 3); + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result.push(value); + indexes.push(index); + } + } + basePullAt(array, indexes); + return result; +} + +module.exports = remove; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/rest.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/rest.js new file mode 100644 index 00000000..9bfb734f --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/rest.js @@ -0,0 +1,21 @@ +var drop = require('./drop'); + +/** + * Gets all but the first element of `array`. + * + * @static + * @memberOf _ + * @alias tail + * @category Array + * @param {Array} array The array to query. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.rest([1, 2, 3]); + * // => [2, 3] + */ +function rest(array) { + return drop(array, 1); +} + +module.exports = rest; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/slice.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/slice.js new file mode 100644 index 00000000..48ef1a1a --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/slice.js @@ -0,0 +1,30 @@ +var baseSlice = require('../internal/baseSlice'), + isIterateeCall = require('../internal/isIterateeCall'); + +/** + * Creates a slice of `array` from `start` up to, but not including, `end`. + * + * **Note:** This method is used instead of `Array#slice` to support node + * lists in IE < 9 and to ensure dense arrays are returned. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ +function slice(array, start, end) { + var length = array ? array.length : 0; + if (!length) { + return []; + } + if (end && typeof end != 'number' && isIterateeCall(array, start, end)) { + start = 0; + end = length; + } + return baseSlice(array, start, end); +} + +module.exports = slice; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/sortedIndex.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/sortedIndex.js new file mode 100644 index 00000000..51d150e3 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/sortedIndex.js @@ -0,0 +1,53 @@ +var createSortedIndex = require('../internal/createSortedIndex'); + +/** + * Uses a binary search to determine the lowest index at which `value` should + * be inserted into `array` in order to maintain its sort order. If an iteratee + * function is provided it is invoked for `value` and each element of `array` + * to compute their sort ranking. The iteratee is bound to `thisArg` and + * invoked with one argument; (value). + * + * If a property name is provided for `iteratee` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `iteratee` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function|Object|string} [iteratee=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * _.sortedIndex([30, 50], 40); + * // => 1 + * + * _.sortedIndex([4, 4, 5, 5], 5); + * // => 2 + * + * var dict = { 'data': { 'thirty': 30, 'forty': 40, 'fifty': 50 } }; + * + * // using an iteratee function + * _.sortedIndex(['thirty', 'fifty'], 'forty', function(word) { + * return this.data[word]; + * }, dict); + * // => 1 + * + * // using the `_.property` callback shorthand + * _.sortedIndex([{ 'x': 30 }, { 'x': 50 }], { 'x': 40 }, 'x'); + * // => 1 + */ +var sortedIndex = createSortedIndex(); + +module.exports = sortedIndex; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/sortedLastIndex.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/sortedLastIndex.js new file mode 100644 index 00000000..81a4a868 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/sortedLastIndex.js @@ -0,0 +1,25 @@ +var createSortedIndex = require('../internal/createSortedIndex'); + +/** + * This method is like `_.sortedIndex` except that it returns the highest + * index at which `value` should be inserted into `array` in order to + * maintain its sort order. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function|Object|string} [iteratee=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * _.sortedLastIndex([4, 4, 5, 5], 5); + * // => 4 + */ +var sortedLastIndex = createSortedIndex(true); + +module.exports = sortedLastIndex; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/tail.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/tail.js new file mode 100644 index 00000000..c5dfe779 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/tail.js @@ -0,0 +1 @@ +module.exports = require('./rest'); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/take.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/take.js new file mode 100644 index 00000000..875917a7 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/take.js @@ -0,0 +1,39 @@ +var baseSlice = require('../internal/baseSlice'), + isIterateeCall = require('../internal/isIterateeCall'); + +/** + * Creates a slice of `array` with `n` elements taken from the beginning. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to take. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.take([1, 2, 3]); + * // => [1] + * + * _.take([1, 2, 3], 2); + * // => [1, 2] + * + * _.take([1, 2, 3], 5); + * // => [1, 2, 3] + * + * _.take([1, 2, 3], 0); + * // => [] + */ +function take(array, n, guard) { + var length = array ? array.length : 0; + if (!length) { + return []; + } + if (guard ? isIterateeCall(array, n, guard) : n == null) { + n = 1; + } + return baseSlice(array, 0, n < 0 ? 0 : n); +} + +module.exports = take; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/takeRight.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/takeRight.js new file mode 100644 index 00000000..6e89c874 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/takeRight.js @@ -0,0 +1,40 @@ +var baseSlice = require('../internal/baseSlice'), + isIterateeCall = require('../internal/isIterateeCall'); + +/** + * Creates a slice of `array` with `n` elements taken from the end. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to take. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.takeRight([1, 2, 3]); + * // => [3] + * + * _.takeRight([1, 2, 3], 2); + * // => [2, 3] + * + * _.takeRight([1, 2, 3], 5); + * // => [1, 2, 3] + * + * _.takeRight([1, 2, 3], 0); + * // => [] + */ +function takeRight(array, n, guard) { + var length = array ? array.length : 0; + if (!length) { + return []; + } + if (guard ? isIterateeCall(array, n, guard) : n == null) { + n = 1; + } + n = length - (+n || 0); + return baseSlice(array, n < 0 ? 0 : n); +} + +module.exports = takeRight; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/takeRightWhile.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/takeRightWhile.js new file mode 100644 index 00000000..5464d13b --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/takeRightWhile.js @@ -0,0 +1,59 @@ +var baseCallback = require('../internal/baseCallback'), + baseWhile = require('../internal/baseWhile'); + +/** + * Creates a slice of `array` with elements taken from the end. Elements are + * taken until `predicate` returns falsey. The predicate is bound to `thisArg` + * and invoked with three arguments: (value, index, array). + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.takeRightWhile([1, 2, 3], function(n) { + * return n > 1; + * }); + * // => [2, 3] + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * // using the `_.matches` callback shorthand + * _.pluck(_.takeRightWhile(users, { 'user': 'pebbles', 'active': false }), 'user'); + * // => ['pebbles'] + * + * // using the `_.matchesProperty` callback shorthand + * _.pluck(_.takeRightWhile(users, 'active', false), 'user'); + * // => ['fred', 'pebbles'] + * + * // using the `_.property` callback shorthand + * _.pluck(_.takeRightWhile(users, 'active'), 'user'); + * // => [] + */ +function takeRightWhile(array, predicate, thisArg) { + return (array && array.length) + ? baseWhile(array, baseCallback(predicate, thisArg, 3), false, true) + : []; +} + +module.exports = takeRightWhile; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/takeWhile.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/takeWhile.js new file mode 100644 index 00000000..f7e28a1d --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/takeWhile.js @@ -0,0 +1,59 @@ +var baseCallback = require('../internal/baseCallback'), + baseWhile = require('../internal/baseWhile'); + +/** + * Creates a slice of `array` with elements taken from the beginning. Elements + * are taken until `predicate` returns falsey. The predicate is bound to + * `thisArg` and invoked with three arguments: (value, index, array). + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.takeWhile([1, 2, 3], function(n) { + * return n < 3; + * }); + * // => [1, 2] + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false}, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * // using the `_.matches` callback shorthand + * _.pluck(_.takeWhile(users, { 'user': 'barney', 'active': false }), 'user'); + * // => ['barney'] + * + * // using the `_.matchesProperty` callback shorthand + * _.pluck(_.takeWhile(users, 'active', false), 'user'); + * // => ['barney', 'fred'] + * + * // using the `_.property` callback shorthand + * _.pluck(_.takeWhile(users, 'active'), 'user'); + * // => [] + */ +function takeWhile(array, predicate, thisArg) { + return (array && array.length) + ? baseWhile(array, baseCallback(predicate, thisArg, 3)) + : []; +} + +module.exports = takeWhile; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/union.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/union.js new file mode 100644 index 00000000..53cefe43 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/union.js @@ -0,0 +1,24 @@ +var baseFlatten = require('../internal/baseFlatten'), + baseUniq = require('../internal/baseUniq'), + restParam = require('../function/restParam'); + +/** + * Creates an array of unique values, in order, from all of the provided arrays + * using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.union([1, 2], [4, 2], [2, 1]); + * // => [1, 2, 4] + */ +var union = restParam(function(arrays) { + return baseUniq(baseFlatten(arrays, false, true)); +}); + +module.exports = union; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/uniq.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/uniq.js new file mode 100644 index 00000000..f81a2b96 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/uniq.js @@ -0,0 +1,71 @@ +var baseCallback = require('../internal/baseCallback'), + baseUniq = require('../internal/baseUniq'), + isIterateeCall = require('../internal/isIterateeCall'), + sortedUniq = require('../internal/sortedUniq'); + +/** + * Creates a duplicate-free version of an array, using + * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons, in which only the first occurence of each element + * is kept. Providing `true` for `isSorted` performs a faster search algorithm + * for sorted arrays. If an iteratee function is provided it is invoked for + * each element in the array to generate the criterion by which uniqueness + * is computed. The `iteratee` is bound to `thisArg` and invoked with three + * arguments: (value, index, array). + * + * If a property name is provided for `iteratee` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `iteratee` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @alias unique + * @category Array + * @param {Array} array The array to inspect. + * @param {boolean} [isSorted] Specify the array is sorted. + * @param {Function|Object|string} [iteratee] The function invoked per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Array} Returns the new duplicate-value-free array. + * @example + * + * _.uniq([2, 1, 2]); + * // => [2, 1] + * + * // using `isSorted` + * _.uniq([1, 1, 2], true); + * // => [1, 2] + * + * // using an iteratee function + * _.uniq([1, 2.5, 1.5, 2], function(n) { + * return this.floor(n); + * }, Math); + * // => [1, 2.5] + * + * // using the `_.property` callback shorthand + * _.uniq([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }, { 'x': 2 }] + */ +function uniq(array, isSorted, iteratee, thisArg) { + var length = array ? array.length : 0; + if (!length) { + return []; + } + if (isSorted != null && typeof isSorted != 'boolean') { + thisArg = iteratee; + iteratee = isIterateeCall(array, isSorted, thisArg) ? undefined : isSorted; + isSorted = false; + } + iteratee = iteratee == null ? iteratee : baseCallback(iteratee, thisArg, 3); + return (isSorted) + ? sortedUniq(array, iteratee) + : baseUniq(array, iteratee); +} + +module.exports = uniq; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/unique.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/unique.js new file mode 100644 index 00000000..396de1b8 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/unique.js @@ -0,0 +1 @@ +module.exports = require('./uniq'); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/unzip.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/unzip.js new file mode 100644 index 00000000..0a539fa6 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/unzip.js @@ -0,0 +1,47 @@ +var arrayFilter = require('../internal/arrayFilter'), + arrayMap = require('../internal/arrayMap'), + baseProperty = require('../internal/baseProperty'), + isArrayLike = require('../internal/isArrayLike'); + +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * This method is like `_.zip` except that it accepts an array of grouped + * elements and creates an array regrouping the elements to their pre-zip + * configuration. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array of grouped elements to process. + * @returns {Array} Returns the new array of regrouped elements. + * @example + * + * var zipped = _.zip(['fred', 'barney'], [30, 40], [true, false]); + * // => [['fred', 30, true], ['barney', 40, false]] + * + * _.unzip(zipped); + * // => [['fred', 'barney'], [30, 40], [true, false]] + */ +function unzip(array) { + if (!(array && array.length)) { + return []; + } + var index = -1, + length = 0; + + array = arrayFilter(array, function(group) { + if (isArrayLike(group)) { + length = nativeMax(group.length, length); + return true; + } + }); + var result = Array(length); + while (++index < length) { + result[index] = arrayMap(array, baseProperty(index)); + } + return result; +} + +module.exports = unzip; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/unzipWith.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/unzipWith.js new file mode 100644 index 00000000..324a2b1d --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/unzipWith.js @@ -0,0 +1,41 @@ +var arrayMap = require('../internal/arrayMap'), + arrayReduce = require('../internal/arrayReduce'), + bindCallback = require('../internal/bindCallback'), + unzip = require('./unzip'); + +/** + * This method is like `_.unzip` except that it accepts an iteratee to specify + * how regrouped values should be combined. The `iteratee` is bound to `thisArg` + * and invoked with four arguments: (accumulator, value, index, group). + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array of grouped elements to process. + * @param {Function} [iteratee] The function to combine regrouped values. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Array} Returns the new array of regrouped elements. + * @example + * + * var zipped = _.zip([1, 2], [10, 20], [100, 200]); + * // => [[1, 10, 100], [2, 20, 200]] + * + * _.unzipWith(zipped, _.add); + * // => [3, 30, 300] + */ +function unzipWith(array, iteratee, thisArg) { + var length = array ? array.length : 0; + if (!length) { + return []; + } + var result = unzip(array); + if (iteratee == null) { + return result; + } + iteratee = bindCallback(iteratee, thisArg, 4); + return arrayMap(result, function(group) { + return arrayReduce(group, iteratee, undefined, true); + }); +} + +module.exports = unzipWith; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/without.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/without.js new file mode 100644 index 00000000..2ac3d117 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/without.js @@ -0,0 +1,27 @@ +var baseDifference = require('../internal/baseDifference'), + isArrayLike = require('../internal/isArrayLike'), + restParam = require('../function/restParam'); + +/** + * Creates an array excluding all provided values using + * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to filter. + * @param {...*} [values] The values to exclude. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.without([1, 2, 1, 3], 1, 2); + * // => [3] + */ +var without = restParam(function(array, values) { + return isArrayLike(array) + ? baseDifference(array, values) + : []; +}); + +module.exports = without; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/xor.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/xor.js new file mode 100644 index 00000000..04ef32ae --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/xor.js @@ -0,0 +1,35 @@ +var arrayPush = require('../internal/arrayPush'), + baseDifference = require('../internal/baseDifference'), + baseUniq = require('../internal/baseUniq'), + isArrayLike = require('../internal/isArrayLike'); + +/** + * Creates an array of unique values that is the [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference) + * of the provided arrays. + * + * @static + * @memberOf _ + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of values. + * @example + * + * _.xor([1, 2], [4, 2]); + * // => [1, 4] + */ +function xor() { + var index = -1, + length = arguments.length; + + while (++index < length) { + var array = arguments[index]; + if (isArrayLike(array)) { + var result = result + ? arrayPush(baseDifference(result, array), baseDifference(array, result)) + : array; + } + } + return result ? baseUniq(result) : []; +} + +module.exports = xor; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/zip.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/zip.js new file mode 100644 index 00000000..53a6f699 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/zip.js @@ -0,0 +1,21 @@ +var restParam = require('../function/restParam'), + unzip = require('./unzip'); + +/** + * Creates an array of grouped elements, the first of which contains the first + * elements of the given arrays, the second of which contains the second elements + * of the given arrays, and so on. + * + * @static + * @memberOf _ + * @category Array + * @param {...Array} [arrays] The arrays to process. + * @returns {Array} Returns the new array of grouped elements. + * @example + * + * _.zip(['fred', 'barney'], [30, 40], [true, false]); + * // => [['fred', 30, true], ['barney', 40, false]] + */ +var zip = restParam(unzip); + +module.exports = zip; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/zipObject.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/zipObject.js new file mode 100644 index 00000000..dec7a211 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/zipObject.js @@ -0,0 +1,43 @@ +var isArray = require('../lang/isArray'); + +/** + * The inverse of `_.pairs`; this method returns an object composed from arrays + * of property names and values. Provide either a single two dimensional array, + * e.g. `[[key1, value1], [key2, value2]]` or two arrays, one of property names + * and one of corresponding values. + * + * @static + * @memberOf _ + * @alias object + * @category Array + * @param {Array} props The property names. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObject([['fred', 30], ['barney', 40]]); + * // => { 'fred': 30, 'barney': 40 } + * + * _.zipObject(['fred', 'barney'], [30, 40]); + * // => { 'fred': 30, 'barney': 40 } + */ +function zipObject(props, values) { + var index = -1, + length = props ? props.length : 0, + result = {}; + + if (length && !values && !isArray(props[0])) { + values = []; + } + while (++index < length) { + var key = props[index]; + if (values) { + result[key] = values[index]; + } else if (key) { + result[key[0]] = key[1]; + } + } + return result; +} + +module.exports = zipObject; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/zipWith.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/zipWith.js new file mode 100644 index 00000000..ad103742 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/array/zipWith.js @@ -0,0 +1,36 @@ +var restParam = require('../function/restParam'), + unzipWith = require('./unzipWith'); + +/** + * This method is like `_.zip` except that it accepts an iteratee to specify + * how grouped values should be combined. The `iteratee` is bound to `thisArg` + * and invoked with four arguments: (accumulator, value, index, group). + * + * @static + * @memberOf _ + * @category Array + * @param {...Array} [arrays] The arrays to process. + * @param {Function} [iteratee] The function to combine grouped values. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Array} Returns the new array of grouped elements. + * @example + * + * _.zipWith([1, 2], [10, 20], [100, 200], _.add); + * // => [111, 222] + */ +var zipWith = restParam(function(arrays) { + var length = arrays.length, + iteratee = length > 2 ? arrays[length - 2] : undefined, + thisArg = length > 1 ? arrays[length - 1] : undefined; + + if (length > 2 && typeof iteratee == 'function') { + length -= 2; + } else { + iteratee = (length > 1 && typeof thisArg == 'function') ? (--length, thisArg) : undefined; + thisArg = undefined; + } + arrays.length = length; + return unzipWith(arrays, iteratee, thisArg); +}); + +module.exports = zipWith; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/chain.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/chain.js new file mode 100644 index 00000000..6439627f --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/chain.js @@ -0,0 +1,16 @@ +module.exports = { + 'chain': require('./chain/chain'), + 'commit': require('./chain/commit'), + 'concat': require('./chain/concat'), + 'lodash': require('./chain/lodash'), + 'plant': require('./chain/plant'), + 'reverse': require('./chain/reverse'), + 'run': require('./chain/run'), + 'tap': require('./chain/tap'), + 'thru': require('./chain/thru'), + 'toJSON': require('./chain/toJSON'), + 'toString': require('./chain/toString'), + 'value': require('./chain/value'), + 'valueOf': require('./chain/valueOf'), + 'wrapperChain': require('./chain/wrapperChain') +}; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/chain/chain.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/chain/chain.js new file mode 100644 index 00000000..453ba1eb --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/chain/chain.js @@ -0,0 +1,35 @@ +var lodash = require('./lodash'); + +/** + * Creates a `lodash` object that wraps `value` with explicit method + * chaining enabled. + * + * @static + * @memberOf _ + * @category Chain + * @param {*} value The value to wrap. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 }, + * { 'user': 'pebbles', 'age': 1 } + * ]; + * + * var youngest = _.chain(users) + * .sortBy('age') + * .map(function(chr) { + * return chr.user + ' is ' + chr.age; + * }) + * .first() + * .value(); + * // => 'pebbles is 1' + */ +function chain(value) { + var result = lodash(value); + result.__chain__ = true; + return result; +} + +module.exports = chain; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/chain/commit.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/chain/commit.js new file mode 100644 index 00000000..c732d1bf --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/chain/commit.js @@ -0,0 +1 @@ +module.exports = require('./wrapperCommit'); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/chain/concat.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/chain/concat.js new file mode 100644 index 00000000..90607d1e --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/chain/concat.js @@ -0,0 +1 @@ +module.exports = require('./wrapperConcat'); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/chain/lodash.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/chain/lodash.js new file mode 100644 index 00000000..1c3467ef --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/chain/lodash.js @@ -0,0 +1,125 @@ +var LazyWrapper = require('../internal/LazyWrapper'), + LodashWrapper = require('../internal/LodashWrapper'), + baseLodash = require('../internal/baseLodash'), + isArray = require('../lang/isArray'), + isObjectLike = require('../internal/isObjectLike'), + wrapperClone = require('../internal/wrapperClone'); + +/** Used for native method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Creates a `lodash` object which wraps `value` to enable implicit chaining. + * Methods that operate on and return arrays, collections, and functions can + * be chained together. Methods that retrieve a single value or may return a + * primitive value will automatically end the chain returning the unwrapped + * value. Explicit chaining may be enabled using `_.chain`. The execution of + * chained methods is lazy, that is, execution is deferred until `_#value` + * is implicitly or explicitly called. + * + * Lazy evaluation allows several methods to support shortcut fusion. Shortcut + * fusion is an optimization strategy which merge iteratee calls; this can help + * to avoid the creation of intermediate data structures and greatly reduce the + * number of iteratee executions. + * + * Chaining is supported in custom builds as long as the `_#value` method is + * directly or indirectly included in the build. + * + * In addition to lodash methods, wrappers have `Array` and `String` methods. + * + * The wrapper `Array` methods are: + * `concat`, `join`, `pop`, `push`, `reverse`, `shift`, `slice`, `sort`, + * `splice`, and `unshift` + * + * The wrapper `String` methods are: + * `replace` and `split` + * + * The wrapper methods that support shortcut fusion are: + * `compact`, `drop`, `dropRight`, `dropRightWhile`, `dropWhile`, `filter`, + * `first`, `initial`, `last`, `map`, `pluck`, `reject`, `rest`, `reverse`, + * `slice`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, `toArray`, + * and `where` + * + * The chainable wrapper methods are: + * `after`, `ary`, `assign`, `at`, `before`, `bind`, `bindAll`, `bindKey`, + * `callback`, `chain`, `chunk`, `commit`, `compact`, `concat`, `constant`, + * `countBy`, `create`, `curry`, `debounce`, `defaults`, `defaultsDeep`, + * `defer`, `delay`, `difference`, `drop`, `dropRight`, `dropRightWhile`, + * `dropWhile`, `fill`, `filter`, `flatten`, `flattenDeep`, `flow`, `flowRight`, + * `forEach`, `forEachRight`, `forIn`, `forInRight`, `forOwn`, `forOwnRight`, + * `functions`, `groupBy`, `indexBy`, `initial`, `intersection`, `invert`, + * `invoke`, `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, + * `matchesProperty`, `memoize`, `merge`, `method`, `methodOf`, `mixin`, + * `modArgs`, `negate`, `omit`, `once`, `pairs`, `partial`, `partialRight`, + * `partition`, `pick`, `plant`, `pluck`, `property`, `propertyOf`, `pull`, + * `pullAt`, `push`, `range`, `rearg`, `reject`, `remove`, `rest`, `restParam`, + * `reverse`, `set`, `shuffle`, `slice`, `sort`, `sortBy`, `sortByAll`, + * `sortByOrder`, `splice`, `spread`, `take`, `takeRight`, `takeRightWhile`, + * `takeWhile`, `tap`, `throttle`, `thru`, `times`, `toArray`, `toPlainObject`, + * `transform`, `union`, `uniq`, `unshift`, `unzip`, `unzipWith`, `values`, + * `valuesIn`, `where`, `without`, `wrap`, `xor`, `zip`, `zipObject`, `zipWith` + * + * The wrapper methods that are **not** chainable by default are: + * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clone`, `cloneDeep`, + * `deburr`, `endsWith`, `escape`, `escapeRegExp`, `every`, `find`, `findIndex`, + * `findKey`, `findLast`, `findLastIndex`, `findLastKey`, `findWhere`, `first`, + * `floor`, `get`, `gt`, `gte`, `has`, `identity`, `includes`, `indexOf`, + * `inRange`, `isArguments`, `isArray`, `isBoolean`, `isDate`, `isElement`, + * `isEmpty`, `isEqual`, `isError`, `isFinite` `isFunction`, `isMatch`, + * `isNative`, `isNaN`, `isNull`, `isNumber`, `isObject`, `isPlainObject`, + * `isRegExp`, `isString`, `isUndefined`, `isTypedArray`, `join`, `kebabCase`, + * `last`, `lastIndexOf`, `lt`, `lte`, `max`, `min`, `noConflict`, `noop`, + * `now`, `pad`, `padLeft`, `padRight`, `parseInt`, `pop`, `random`, `reduce`, + * `reduceRight`, `repeat`, `result`, `round`, `runInContext`, `shift`, `size`, + * `snakeCase`, `some`, `sortedIndex`, `sortedLastIndex`, `startCase`, + * `startsWith`, `sum`, `template`, `trim`, `trimLeft`, `trimRight`, `trunc`, + * `unescape`, `uniqueId`, `value`, and `words` + * + * The wrapper method `sample` will return a wrapped value when `n` is provided, + * otherwise an unwrapped value is returned. + * + * @name _ + * @constructor + * @category Chain + * @param {*} value The value to wrap in a `lodash` instance. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var wrapped = _([1, 2, 3]); + * + * // returns an unwrapped value + * wrapped.reduce(function(total, n) { + * return total + n; + * }); + * // => 6 + * + * // returns a wrapped value + * var squares = wrapped.map(function(n) { + * return n * n; + * }); + * + * _.isArray(squares); + * // => false + * + * _.isArray(squares.value()); + * // => true + */ +function lodash(value) { + if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) { + if (value instanceof LodashWrapper) { + return value; + } + if (hasOwnProperty.call(value, '__chain__') && hasOwnProperty.call(value, '__wrapped__')) { + return wrapperClone(value); + } + } + return new LodashWrapper(value); +} + +// Ensure wrappers are instances of `baseLodash`. +lodash.prototype = baseLodash.prototype; + +module.exports = lodash; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/chain/plant.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/chain/plant.js new file mode 100644 index 00000000..04099f23 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/chain/plant.js @@ -0,0 +1 @@ +module.exports = require('./wrapperPlant'); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/chain/reverse.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/chain/reverse.js new file mode 100644 index 00000000..f72a64a1 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/chain/reverse.js @@ -0,0 +1 @@ +module.exports = require('./wrapperReverse'); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/chain/run.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/chain/run.js new file mode 100644 index 00000000..5e751a2c --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/chain/run.js @@ -0,0 +1 @@ +module.exports = require('./wrapperValue'); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/chain/tap.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/chain/tap.js new file mode 100644 index 00000000..3d0257ec --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/chain/tap.js @@ -0,0 +1,29 @@ +/** + * This method invokes `interceptor` and returns `value`. The interceptor is + * bound to `thisArg` and invoked with one argument; (value). The purpose of + * this method is to "tap into" a method chain in order to perform operations + * on intermediate results within the chain. + * + * @static + * @memberOf _ + * @category Chain + * @param {*} value The value to provide to `interceptor`. + * @param {Function} interceptor The function to invoke. + * @param {*} [thisArg] The `this` binding of `interceptor`. + * @returns {*} Returns `value`. + * @example + * + * _([1, 2, 3]) + * .tap(function(array) { + * array.pop(); + * }) + * .reverse() + * .value(); + * // => [2, 1] + */ +function tap(value, interceptor, thisArg) { + interceptor.call(thisArg, value); + return value; +} + +module.exports = tap; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/chain/thru.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/chain/thru.js new file mode 100644 index 00000000..a7157803 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/chain/thru.js @@ -0,0 +1,26 @@ +/** + * This method is like `_.tap` except that it returns the result of `interceptor`. + * + * @static + * @memberOf _ + * @category Chain + * @param {*} value The value to provide to `interceptor`. + * @param {Function} interceptor The function to invoke. + * @param {*} [thisArg] The `this` binding of `interceptor`. + * @returns {*} Returns the result of `interceptor`. + * @example + * + * _(' abc ') + * .chain() + * .trim() + * .thru(function(value) { + * return [value]; + * }) + * .value(); + * // => ['abc'] + */ +function thru(value, interceptor, thisArg) { + return interceptor.call(thisArg, value); +} + +module.exports = thru; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/chain/toJSON.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/chain/toJSON.js new file mode 100644 index 00000000..5e751a2c --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/chain/toJSON.js @@ -0,0 +1 @@ +module.exports = require('./wrapperValue'); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/chain/toString.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/chain/toString.js new file mode 100644 index 00000000..c7bcbf9a --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/chain/toString.js @@ -0,0 +1 @@ +module.exports = require('./wrapperToString'); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/chain/value.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/chain/value.js new file mode 100644 index 00000000..5e751a2c --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/chain/value.js @@ -0,0 +1 @@ +module.exports = require('./wrapperValue'); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/chain/valueOf.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/chain/valueOf.js new file mode 100644 index 00000000..5e751a2c --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/chain/valueOf.js @@ -0,0 +1 @@ +module.exports = require('./wrapperValue'); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/chain/wrapperChain.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/chain/wrapperChain.js new file mode 100644 index 00000000..38234819 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/chain/wrapperChain.js @@ -0,0 +1,32 @@ +var chain = require('./chain'); + +/** + * Enables explicit method chaining on the wrapper object. + * + * @name chain + * @memberOf _ + * @category Chain + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 } + * ]; + * + * // without explicit chaining + * _(users).first(); + * // => { 'user': 'barney', 'age': 36 } + * + * // with explicit chaining + * _(users).chain() + * .first() + * .pick('user') + * .value(); + * // => { 'user': 'barney' } + */ +function wrapperChain() { + return chain(this); +} + +module.exports = wrapperChain; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/chain/wrapperCommit.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/chain/wrapperCommit.js new file mode 100644 index 00000000..c3d28980 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/chain/wrapperCommit.js @@ -0,0 +1,32 @@ +var LodashWrapper = require('../internal/LodashWrapper'); + +/** + * Executes the chained sequence and returns the wrapped result. + * + * @name commit + * @memberOf _ + * @category Chain + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var array = [1, 2]; + * var wrapped = _(array).push(3); + * + * console.log(array); + * // => [1, 2] + * + * wrapped = wrapped.commit(); + * console.log(array); + * // => [1, 2, 3] + * + * wrapped.last(); + * // => 3 + * + * console.log(array); + * // => [1, 2, 3] + */ +function wrapperCommit() { + return new LodashWrapper(this.value(), this.__chain__); +} + +module.exports = wrapperCommit; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/chain/wrapperConcat.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/chain/wrapperConcat.js new file mode 100644 index 00000000..799156cd --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/chain/wrapperConcat.js @@ -0,0 +1,34 @@ +var arrayConcat = require('../internal/arrayConcat'), + baseFlatten = require('../internal/baseFlatten'), + isArray = require('../lang/isArray'), + restParam = require('../function/restParam'), + toObject = require('../internal/toObject'); + +/** + * Creates a new array joining a wrapped array with any additional arrays + * and/or values. + * + * @name concat + * @memberOf _ + * @category Chain + * @param {...*} [values] The values to concatenate. + * @returns {Array} Returns the new concatenated array. + * @example + * + * var array = [1]; + * var wrapped = _(array).concat(2, [3], [[4]]); + * + * console.log(wrapped.value()); + * // => [1, 2, 3, [4]] + * + * console.log(array); + * // => [1] + */ +var wrapperConcat = restParam(function(values) { + values = baseFlatten(values); + return this.thru(function(array) { + return arrayConcat(isArray(array) ? array : [toObject(array)], values); + }); +}); + +module.exports = wrapperConcat; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/chain/wrapperPlant.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/chain/wrapperPlant.js new file mode 100644 index 00000000..234fe41f --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/chain/wrapperPlant.js @@ -0,0 +1,45 @@ +var baseLodash = require('../internal/baseLodash'), + wrapperClone = require('../internal/wrapperClone'); + +/** + * Creates a clone of the chained sequence planting `value` as the wrapped value. + * + * @name plant + * @memberOf _ + * @category Chain + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var array = [1, 2]; + * var wrapped = _(array).map(function(value) { + * return Math.pow(value, 2); + * }); + * + * var other = [3, 4]; + * var otherWrapped = wrapped.plant(other); + * + * otherWrapped.value(); + * // => [9, 16] + * + * wrapped.value(); + * // => [1, 4] + */ +function wrapperPlant(value) { + var result, + parent = this; + + while (parent instanceof baseLodash) { + var clone = wrapperClone(parent); + if (result) { + previous.__wrapped__ = clone; + } else { + result = clone; + } + var previous = clone; + parent = parent.__wrapped__; + } + previous.__wrapped__ = value; + return result; +} + +module.exports = wrapperPlant; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/chain/wrapperReverse.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/chain/wrapperReverse.js new file mode 100644 index 00000000..f2b3d19c --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/chain/wrapperReverse.js @@ -0,0 +1,43 @@ +var LazyWrapper = require('../internal/LazyWrapper'), + LodashWrapper = require('../internal/LodashWrapper'), + thru = require('./thru'); + +/** + * Reverses the wrapped array so the first element becomes the last, the + * second element becomes the second to last, and so on. + * + * **Note:** This method mutates the wrapped array. + * + * @name reverse + * @memberOf _ + * @category Chain + * @returns {Object} Returns the new reversed `lodash` wrapper instance. + * @example + * + * var array = [1, 2, 3]; + * + * _(array).reverse().value() + * // => [3, 2, 1] + * + * console.log(array); + * // => [3, 2, 1] + */ +function wrapperReverse() { + var value = this.__wrapped__; + + var interceptor = function(value) { + return (wrapped && wrapped.__dir__ < 0) ? value : value.reverse(); + }; + if (value instanceof LazyWrapper) { + var wrapped = value; + if (this.__actions__.length) { + wrapped = new LazyWrapper(this); + } + wrapped = wrapped.reverse(); + wrapped.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined }); + return new LodashWrapper(wrapped, this.__chain__); + } + return this.thru(interceptor); +} + +module.exports = wrapperReverse; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/chain/wrapperToString.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/chain/wrapperToString.js new file mode 100644 index 00000000..db975a5a --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/chain/wrapperToString.js @@ -0,0 +1,17 @@ +/** + * Produces the result of coercing the unwrapped value to a string. + * + * @name toString + * @memberOf _ + * @category Chain + * @returns {string} Returns the coerced string value. + * @example + * + * _([1, 2, 3]).toString(); + * // => '1,2,3' + */ +function wrapperToString() { + return (this.value() + ''); +} + +module.exports = wrapperToString; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/chain/wrapperValue.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/chain/wrapperValue.js new file mode 100644 index 00000000..2734e41c --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/chain/wrapperValue.js @@ -0,0 +1,20 @@ +var baseWrapperValue = require('../internal/baseWrapperValue'); + +/** + * Executes the chained sequence to extract the unwrapped value. + * + * @name value + * @memberOf _ + * @alias run, toJSON, valueOf + * @category Chain + * @returns {*} Returns the resolved unwrapped value. + * @example + * + * _([1, 2, 3]).value(); + * // => [1, 2, 3] + */ +function wrapperValue() { + return baseWrapperValue(this.__wrapped__, this.__actions__); +} + +module.exports = wrapperValue; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection.js new file mode 100644 index 00000000..03388571 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection.js @@ -0,0 +1,44 @@ +module.exports = { + 'all': require('./collection/all'), + 'any': require('./collection/any'), + 'at': require('./collection/at'), + 'collect': require('./collection/collect'), + 'contains': require('./collection/contains'), + 'countBy': require('./collection/countBy'), + 'detect': require('./collection/detect'), + 'each': require('./collection/each'), + 'eachRight': require('./collection/eachRight'), + 'every': require('./collection/every'), + 'filter': require('./collection/filter'), + 'find': require('./collection/find'), + 'findLast': require('./collection/findLast'), + 'findWhere': require('./collection/findWhere'), + 'foldl': require('./collection/foldl'), + 'foldr': require('./collection/foldr'), + 'forEach': require('./collection/forEach'), + 'forEachRight': require('./collection/forEachRight'), + 'groupBy': require('./collection/groupBy'), + 'include': require('./collection/include'), + 'includes': require('./collection/includes'), + 'indexBy': require('./collection/indexBy'), + 'inject': require('./collection/inject'), + 'invoke': require('./collection/invoke'), + 'map': require('./collection/map'), + 'max': require('./math/max'), + 'min': require('./math/min'), + 'partition': require('./collection/partition'), + 'pluck': require('./collection/pluck'), + 'reduce': require('./collection/reduce'), + 'reduceRight': require('./collection/reduceRight'), + 'reject': require('./collection/reject'), + 'sample': require('./collection/sample'), + 'select': require('./collection/select'), + 'shuffle': require('./collection/shuffle'), + 'size': require('./collection/size'), + 'some': require('./collection/some'), + 'sortBy': require('./collection/sortBy'), + 'sortByAll': require('./collection/sortByAll'), + 'sortByOrder': require('./collection/sortByOrder'), + 'sum': require('./math/sum'), + 'where': require('./collection/where') +}; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/all.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/all.js new file mode 100644 index 00000000..d0839f77 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/all.js @@ -0,0 +1 @@ +module.exports = require('./every'); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/any.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/any.js new file mode 100644 index 00000000..900ac25e --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/any.js @@ -0,0 +1 @@ +module.exports = require('./some'); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/at.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/at.js new file mode 100644 index 00000000..29236e57 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/at.js @@ -0,0 +1,29 @@ +var baseAt = require('../internal/baseAt'), + baseFlatten = require('../internal/baseFlatten'), + restParam = require('../function/restParam'); + +/** + * Creates an array of elements corresponding to the given keys, or indexes, + * of `collection`. Keys may be specified as individual arguments or as arrays + * of keys. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {...(number|number[]|string|string[])} [props] The property names + * or indexes of elements to pick, specified individually or in arrays. + * @returns {Array} Returns the new array of picked elements. + * @example + * + * _.at(['a', 'b', 'c'], [0, 2]); + * // => ['a', 'c'] + * + * _.at(['barney', 'fred', 'pebbles'], 0, 2); + * // => ['barney', 'pebbles'] + */ +var at = restParam(function(collection, props) { + return baseAt(collection, baseFlatten(props)); +}); + +module.exports = at; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/collect.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/collect.js new file mode 100644 index 00000000..0d1e1abf --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/collect.js @@ -0,0 +1 @@ +module.exports = require('./map'); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/contains.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/contains.js new file mode 100644 index 00000000..594722af --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/contains.js @@ -0,0 +1 @@ +module.exports = require('./includes'); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/countBy.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/countBy.js new file mode 100644 index 00000000..e97dbb74 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/countBy.js @@ -0,0 +1,54 @@ +var createAggregator = require('../internal/createAggregator'); + +/** Used for native method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Creates an object composed of keys generated from the results of running + * each element of `collection` through `iteratee`. The corresponding value + * of each key is the number of times the key was returned by `iteratee`. + * The `iteratee` is bound to `thisArg` and invoked with three arguments: + * (value, index|key, collection). + * + * If a property name is provided for `iteratee` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `iteratee` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [iteratee=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * _.countBy([4.3, 6.1, 6.4], function(n) { + * return Math.floor(n); + * }); + * // => { '4': 1, '6': 2 } + * + * _.countBy([4.3, 6.1, 6.4], function(n) { + * return this.floor(n); + * }, Math); + * // => { '4': 1, '6': 2 } + * + * _.countBy(['one', 'two', 'three'], 'length'); + * // => { '3': 2, '5': 1 } + */ +var countBy = createAggregator(function(result, value, key) { + hasOwnProperty.call(result, key) ? ++result[key] : (result[key] = 1); +}); + +module.exports = countBy; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/detect.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/detect.js new file mode 100644 index 00000000..2fb6303e --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/detect.js @@ -0,0 +1 @@ +module.exports = require('./find'); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/each.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/each.js new file mode 100644 index 00000000..8800f420 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/each.js @@ -0,0 +1 @@ +module.exports = require('./forEach'); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/eachRight.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/eachRight.js new file mode 100644 index 00000000..3252b2ab --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/eachRight.js @@ -0,0 +1 @@ +module.exports = require('./forEachRight'); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/every.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/every.js new file mode 100644 index 00000000..5a2d0f5d --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/every.js @@ -0,0 +1,66 @@ +var arrayEvery = require('../internal/arrayEvery'), + baseCallback = require('../internal/baseCallback'), + baseEvery = require('../internal/baseEvery'), + isArray = require('../lang/isArray'), + isIterateeCall = require('../internal/isIterateeCall'); + +/** + * Checks if `predicate` returns truthy for **all** elements of `collection`. + * The predicate is bound to `thisArg` and invoked with three arguments: + * (value, index|key, collection). + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @alias all + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false`. + * @example + * + * _.every([true, 1, null, 'yes'], Boolean); + * // => false + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false } + * ]; + * + * // using the `_.matches` callback shorthand + * _.every(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // using the `_.matchesProperty` callback shorthand + * _.every(users, 'active', false); + * // => true + * + * // using the `_.property` callback shorthand + * _.every(users, 'active'); + * // => false + */ +function every(collection, predicate, thisArg) { + var func = isArray(collection) ? arrayEvery : baseEvery; + if (thisArg && isIterateeCall(collection, predicate, thisArg)) { + predicate = undefined; + } + if (typeof predicate != 'function' || thisArg !== undefined) { + predicate = baseCallback(predicate, thisArg, 3); + } + return func(collection, predicate); +} + +module.exports = every; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/filter.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/filter.js new file mode 100644 index 00000000..7620aa76 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/filter.js @@ -0,0 +1,61 @@ +var arrayFilter = require('../internal/arrayFilter'), + baseCallback = require('../internal/baseCallback'), + baseFilter = require('../internal/baseFilter'), + isArray = require('../lang/isArray'); + +/** + * Iterates over elements of `collection`, returning an array of all elements + * `predicate` returns truthy for. The predicate is bound to `thisArg` and + * invoked with three arguments: (value, index|key, collection). + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @alias select + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {Array} Returns the new filtered array. + * @example + * + * _.filter([4, 5, 6], function(n) { + * return n % 2 == 0; + * }); + * // => [4, 6] + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * // using the `_.matches` callback shorthand + * _.pluck(_.filter(users, { 'age': 36, 'active': true }), 'user'); + * // => ['barney'] + * + * // using the `_.matchesProperty` callback shorthand + * _.pluck(_.filter(users, 'active', false), 'user'); + * // => ['fred'] + * + * // using the `_.property` callback shorthand + * _.pluck(_.filter(users, 'active'), 'user'); + * // => ['barney'] + */ +function filter(collection, predicate, thisArg) { + var func = isArray(collection) ? arrayFilter : baseFilter; + predicate = baseCallback(predicate, thisArg, 3); + return func(collection, predicate); +} + +module.exports = filter; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/find.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/find.js new file mode 100644 index 00000000..7358cfe8 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/find.js @@ -0,0 +1,56 @@ +var baseEach = require('../internal/baseEach'), + createFind = require('../internal/createFind'); + +/** + * Iterates over elements of `collection`, returning the first element + * `predicate` returns truthy for. The predicate is bound to `thisArg` and + * invoked with three arguments: (value, index|key, collection). + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @alias detect + * @category Collection + * @param {Array|Object|string} collection The collection to search. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false }, + * { 'user': 'pebbles', 'age': 1, 'active': true } + * ]; + * + * _.result(_.find(users, function(chr) { + * return chr.age < 40; + * }), 'user'); + * // => 'barney' + * + * // using the `_.matches` callback shorthand + * _.result(_.find(users, { 'age': 1, 'active': true }), 'user'); + * // => 'pebbles' + * + * // using the `_.matchesProperty` callback shorthand + * _.result(_.find(users, 'active', false), 'user'); + * // => 'fred' + * + * // using the `_.property` callback shorthand + * _.result(_.find(users, 'active'), 'user'); + * // => 'barney' + */ +var find = createFind(baseEach); + +module.exports = find; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/findLast.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/findLast.js new file mode 100644 index 00000000..75dbadca --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/findLast.js @@ -0,0 +1,25 @@ +var baseEachRight = require('../internal/baseEachRight'), + createFind = require('../internal/createFind'); + +/** + * This method is like `_.find` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to search. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * _.findLast([1, 2, 3, 4], function(n) { + * return n % 2 == 1; + * }); + * // => 3 + */ +var findLast = createFind(baseEachRight, true); + +module.exports = findLast; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/findWhere.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/findWhere.js new file mode 100644 index 00000000..2d620655 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/findWhere.js @@ -0,0 +1,37 @@ +var baseMatches = require('../internal/baseMatches'), + find = require('./find'); + +/** + * Performs a deep comparison between each element in `collection` and the + * source object, returning the first element that has equivalent property + * values. + * + * **Note:** This method supports comparing arrays, booleans, `Date` objects, + * numbers, `Object` objects, regexes, and strings. Objects are compared by + * their own, not inherited, enumerable properties. For comparing a single + * own or inherited property value see `_.matchesProperty`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to search. + * @param {Object} source The object of property values to match. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.result(_.findWhere(users, { 'age': 36, 'active': true }), 'user'); + * // => 'barney' + * + * _.result(_.findWhere(users, { 'age': 40, 'active': false }), 'user'); + * // => 'fred' + */ +function findWhere(collection, source) { + return find(collection, baseMatches(source)); +} + +module.exports = findWhere; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/foldl.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/foldl.js new file mode 100644 index 00000000..26f53cf7 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/foldl.js @@ -0,0 +1 @@ +module.exports = require('./reduce'); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/foldr.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/foldr.js new file mode 100644 index 00000000..8fb199ed --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/foldr.js @@ -0,0 +1 @@ +module.exports = require('./reduceRight'); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/forEach.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/forEach.js new file mode 100644 index 00000000..05a8e214 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/forEach.js @@ -0,0 +1,37 @@ +var arrayEach = require('../internal/arrayEach'), + baseEach = require('../internal/baseEach'), + createForEach = require('../internal/createForEach'); + +/** + * Iterates over elements of `collection` invoking `iteratee` for each element. + * The `iteratee` is bound to `thisArg` and invoked with three arguments: + * (value, index|key, collection). Iteratee functions may exit iteration early + * by explicitly returning `false`. + * + * **Note:** As with other "Collections" methods, objects with a "length" property + * are iterated like arrays. To avoid this behavior `_.forIn` or `_.forOwn` + * may be used for object iteration. + * + * @static + * @memberOf _ + * @alias each + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Array|Object|string} Returns `collection`. + * @example + * + * _([1, 2]).forEach(function(n) { + * console.log(n); + * }).value(); + * // => logs each value from left to right and returns the array + * + * _.forEach({ 'a': 1, 'b': 2 }, function(n, key) { + * console.log(n, key); + * }); + * // => logs each value-key pair and returns the object (iteration order is not guaranteed) + */ +var forEach = createForEach(arrayEach, baseEach); + +module.exports = forEach; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/forEachRight.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/forEachRight.js new file mode 100644 index 00000000..34997110 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/forEachRight.js @@ -0,0 +1,26 @@ +var arrayEachRight = require('../internal/arrayEachRight'), + baseEachRight = require('../internal/baseEachRight'), + createForEach = require('../internal/createForEach'); + +/** + * This method is like `_.forEach` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @alias eachRight + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Array|Object|string} Returns `collection`. + * @example + * + * _([1, 2]).forEachRight(function(n) { + * console.log(n); + * }).value(); + * // => logs each value from right to left and returns the array + */ +var forEachRight = createForEach(arrayEachRight, baseEachRight); + +module.exports = forEachRight; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/groupBy.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/groupBy.js new file mode 100644 index 00000000..a925c894 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/groupBy.js @@ -0,0 +1,59 @@ +var createAggregator = require('../internal/createAggregator'); + +/** Used for native method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Creates an object composed of keys generated from the results of running + * each element of `collection` through `iteratee`. The corresponding value + * of each key is an array of the elements responsible for generating the key. + * The `iteratee` is bound to `thisArg` and invoked with three arguments: + * (value, index|key, collection). + * + * If a property name is provided for `iteratee` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `iteratee` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [iteratee=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * _.groupBy([4.2, 6.1, 6.4], function(n) { + * return Math.floor(n); + * }); + * // => { '4': [4.2], '6': [6.1, 6.4] } + * + * _.groupBy([4.2, 6.1, 6.4], function(n) { + * return this.floor(n); + * }, Math); + * // => { '4': [4.2], '6': [6.1, 6.4] } + * + * // using the `_.property` callback shorthand + * _.groupBy(['one', 'two', 'three'], 'length'); + * // => { '3': ['one', 'two'], '5': ['three'] } + */ +var groupBy = createAggregator(function(result, value, key) { + if (hasOwnProperty.call(result, key)) { + result[key].push(value); + } else { + result[key] = [value]; + } +}); + +module.exports = groupBy; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/include.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/include.js new file mode 100644 index 00000000..594722af --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/include.js @@ -0,0 +1 @@ +module.exports = require('./includes'); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/includes.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/includes.js new file mode 100644 index 00000000..482e42d1 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/includes.js @@ -0,0 +1,57 @@ +var baseIndexOf = require('../internal/baseIndexOf'), + getLength = require('../internal/getLength'), + isArray = require('../lang/isArray'), + isIterateeCall = require('../internal/isIterateeCall'), + isLength = require('../internal/isLength'), + isString = require('../lang/isString'), + values = require('../object/values'); + +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * Checks if `value` is in `collection` using + * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons. If `fromIndex` is negative, it is used as the offset + * from the end of `collection`. + * + * @static + * @memberOf _ + * @alias contains, include + * @category Collection + * @param {Array|Object|string} collection The collection to search. + * @param {*} target The value to search for. + * @param {number} [fromIndex=0] The index to search from. + * @param- {Object} [guard] Enables use as a callback for functions like `_.reduce`. + * @returns {boolean} Returns `true` if a matching element is found, else `false`. + * @example + * + * _.includes([1, 2, 3], 1); + * // => true + * + * _.includes([1, 2, 3], 1, 2); + * // => false + * + * _.includes({ 'user': 'fred', 'age': 40 }, 'fred'); + * // => true + * + * _.includes('pebbles', 'eb'); + * // => true + */ +function includes(collection, target, fromIndex, guard) { + var length = collection ? getLength(collection) : 0; + if (!isLength(length)) { + collection = values(collection); + length = collection.length; + } + if (typeof fromIndex != 'number' || (guard && isIterateeCall(target, fromIndex, guard))) { + fromIndex = 0; + } else { + fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : (fromIndex || 0); + } + return (typeof collection == 'string' || !isArray(collection) && isString(collection)) + ? (fromIndex <= length && collection.indexOf(target, fromIndex) > -1) + : (!!length && baseIndexOf(collection, target, fromIndex) > -1); +} + +module.exports = includes; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/indexBy.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/indexBy.js new file mode 100644 index 00000000..34a941e7 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/indexBy.js @@ -0,0 +1,53 @@ +var createAggregator = require('../internal/createAggregator'); + +/** + * Creates an object composed of keys generated from the results of running + * each element of `collection` through `iteratee`. The corresponding value + * of each key is the last element responsible for generating the key. The + * iteratee function is bound to `thisArg` and invoked with three arguments: + * (value, index|key, collection). + * + * If a property name is provided for `iteratee` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `iteratee` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [iteratee=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * var keyData = [ + * { 'dir': 'left', 'code': 97 }, + * { 'dir': 'right', 'code': 100 } + * ]; + * + * _.indexBy(keyData, 'dir'); + * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } } + * + * _.indexBy(keyData, function(object) { + * return String.fromCharCode(object.code); + * }); + * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } } + * + * _.indexBy(keyData, function(object) { + * return this.fromCharCode(object.code); + * }, String); + * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } } + */ +var indexBy = createAggregator(function(result, value, key) { + result[key] = value; +}); + +module.exports = indexBy; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/inject.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/inject.js new file mode 100644 index 00000000..26f53cf7 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/inject.js @@ -0,0 +1 @@ +module.exports = require('./reduce'); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/invoke.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/invoke.js new file mode 100644 index 00000000..a1f8a201 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/invoke.js @@ -0,0 +1,42 @@ +var baseEach = require('../internal/baseEach'), + invokePath = require('../internal/invokePath'), + isArrayLike = require('../internal/isArrayLike'), + isKey = require('../internal/isKey'), + restParam = require('../function/restParam'); + +/** + * Invokes the method at `path` of each element in `collection`, returning + * an array of the results of each invoked method. Any additional arguments + * are provided to each invoked method. If `methodName` is a function it is + * invoked for, and `this` bound to, each element in `collection`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Array|Function|string} path The path of the method to invoke or + * the function invoked per iteration. + * @param {...*} [args] The arguments to invoke the method with. + * @returns {Array} Returns the array of results. + * @example + * + * _.invoke([[5, 1, 7], [3, 2, 1]], 'sort'); + * // => [[1, 5, 7], [1, 2, 3]] + * + * _.invoke([123, 456], String.prototype.split, ''); + * // => [['1', '2', '3'], ['4', '5', '6']] + */ +var invoke = restParam(function(collection, path, args) { + var index = -1, + isFunc = typeof path == 'function', + isProp = isKey(path), + result = isArrayLike(collection) ? Array(collection.length) : []; + + baseEach(collection, function(value) { + var func = isFunc ? path : ((isProp && value != null) ? value[path] : undefined); + result[++index] = func ? func.apply(value, args) : invokePath(value, path, args); + }); + return result; +}); + +module.exports = invoke; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/map.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/map.js new file mode 100644 index 00000000..5381110d --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/map.js @@ -0,0 +1,68 @@ +var arrayMap = require('../internal/arrayMap'), + baseCallback = require('../internal/baseCallback'), + baseMap = require('../internal/baseMap'), + isArray = require('../lang/isArray'); + +/** + * Creates an array of values by running each element in `collection` through + * `iteratee`. The `iteratee` is bound to `thisArg` and invoked with three + * arguments: (value, index|key, collection). + * + * If a property name is provided for `iteratee` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `iteratee` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. + * + * The guarded methods are: + * `ary`, `callback`, `chunk`, `clone`, `create`, `curry`, `curryRight`, + * `drop`, `dropRight`, `every`, `fill`, `flatten`, `invert`, `max`, `min`, + * `parseInt`, `slice`, `sortBy`, `take`, `takeRight`, `template`, `trim`, + * `trimLeft`, `trimRight`, `trunc`, `random`, `range`, `sample`, `some`, + * `sum`, `uniq`, and `words` + * + * @static + * @memberOf _ + * @alias collect + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [iteratee=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Array} Returns the new mapped array. + * @example + * + * function timesThree(n) { + * return n * 3; + * } + * + * _.map([1, 2], timesThree); + * // => [3, 6] + * + * _.map({ 'a': 1, 'b': 2 }, timesThree); + * // => [3, 6] (iteration order is not guaranteed) + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * // using the `_.property` callback shorthand + * _.map(users, 'user'); + * // => ['barney', 'fred'] + */ +function map(collection, iteratee, thisArg) { + var func = isArray(collection) ? arrayMap : baseMap; + iteratee = baseCallback(iteratee, thisArg, 3); + return func(collection, iteratee); +} + +module.exports = map; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/max.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/max.js new file mode 100644 index 00000000..bb1d213c --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/max.js @@ -0,0 +1 @@ +module.exports = require('../math/max'); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/min.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/min.js new file mode 100644 index 00000000..eef13d02 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/min.js @@ -0,0 +1 @@ +module.exports = require('../math/min'); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/partition.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/partition.js new file mode 100644 index 00000000..ee35f27d --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/partition.js @@ -0,0 +1,66 @@ +var createAggregator = require('../internal/createAggregator'); + +/** + * Creates an array of elements split into two groups, the first of which + * contains elements `predicate` returns truthy for, while the second of which + * contains elements `predicate` returns falsey for. The predicate is bound + * to `thisArg` and invoked with three arguments: (value, index|key, collection). + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {Array} Returns the array of grouped elements. + * @example + * + * _.partition([1, 2, 3], function(n) { + * return n % 2; + * }); + * // => [[1, 3], [2]] + * + * _.partition([1.2, 2.3, 3.4], function(n) { + * return this.floor(n) % 2; + * }, Math); + * // => [[1.2, 3.4], [2.3]] + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false }, + * { 'user': 'fred', 'age': 40, 'active': true }, + * { 'user': 'pebbles', 'age': 1, 'active': false } + * ]; + * + * var mapper = function(array) { + * return _.pluck(array, 'user'); + * }; + * + * // using the `_.matches` callback shorthand + * _.map(_.partition(users, { 'age': 1, 'active': false }), mapper); + * // => [['pebbles'], ['barney', 'fred']] + * + * // using the `_.matchesProperty` callback shorthand + * _.map(_.partition(users, 'active', false), mapper); + * // => [['barney', 'pebbles'], ['fred']] + * + * // using the `_.property` callback shorthand + * _.map(_.partition(users, 'active'), mapper); + * // => [['fred'], ['barney', 'pebbles']] + */ +var partition = createAggregator(function(result, value, key) { + result[key ? 0 : 1].push(value); +}, function() { return [[], []]; }); + +module.exports = partition; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/pluck.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/pluck.js new file mode 100644 index 00000000..5ee1ec84 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/pluck.js @@ -0,0 +1,31 @@ +var map = require('./map'), + property = require('../utility/property'); + +/** + * Gets the property value of `path` from all elements in `collection`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Array|string} path The path of the property to pluck. + * @returns {Array} Returns the property values. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 } + * ]; + * + * _.pluck(users, 'user'); + * // => ['barney', 'fred'] + * + * var userIndex = _.indexBy(users, 'user'); + * _.pluck(userIndex, 'age'); + * // => [36, 40] (iteration order is not guaranteed) + */ +function pluck(collection, path) { + return map(collection, property(path)); +} + +module.exports = pluck; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/reduce.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/reduce.js new file mode 100644 index 00000000..5d5e8c91 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/reduce.js @@ -0,0 +1,44 @@ +var arrayReduce = require('../internal/arrayReduce'), + baseEach = require('../internal/baseEach'), + createReduce = require('../internal/createReduce'); + +/** + * Reduces `collection` to a value which is the accumulated result of running + * each element in `collection` through `iteratee`, where each successive + * invocation is supplied the return value of the previous. If `accumulator` + * is not provided the first element of `collection` is used as the initial + * value. The `iteratee` is bound to `thisArg` and invoked with four arguments: + * (accumulator, value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.reduce`, `_.reduceRight`, and `_.transform`. + * + * The guarded methods are: + * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `sortByAll`, + * and `sortByOrder` + * + * @static + * @memberOf _ + * @alias foldl, inject + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {*} Returns the accumulated value. + * @example + * + * _.reduce([1, 2], function(total, n) { + * return total + n; + * }); + * // => 3 + * + * _.reduce({ 'a': 1, 'b': 2 }, function(result, n, key) { + * result[key] = n * 3; + * return result; + * }, {}); + * // => { 'a': 3, 'b': 6 } (iteration order is not guaranteed) + */ +var reduce = createReduce(arrayReduce, baseEach); + +module.exports = reduce; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/reduceRight.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/reduceRight.js new file mode 100644 index 00000000..5a5753b9 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/reduceRight.js @@ -0,0 +1,29 @@ +var arrayReduceRight = require('../internal/arrayReduceRight'), + baseEachRight = require('../internal/baseEachRight'), + createReduce = require('../internal/createReduce'); + +/** + * This method is like `_.reduce` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @alias foldr + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {*} Returns the accumulated value. + * @example + * + * var array = [[0, 1], [2, 3], [4, 5]]; + * + * _.reduceRight(array, function(flattened, other) { + * return flattened.concat(other); + * }, []); + * // => [4, 5, 2, 3, 0, 1] + */ +var reduceRight = createReduce(arrayReduceRight, baseEachRight); + +module.exports = reduceRight; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/reject.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/reject.js new file mode 100644 index 00000000..55924539 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/reject.js @@ -0,0 +1,50 @@ +var arrayFilter = require('../internal/arrayFilter'), + baseCallback = require('../internal/baseCallback'), + baseFilter = require('../internal/baseFilter'), + isArray = require('../lang/isArray'); + +/** + * The opposite of `_.filter`; this method returns the elements of `collection` + * that `predicate` does **not** return truthy for. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {Array} Returns the new filtered array. + * @example + * + * _.reject([1, 2, 3, 4], function(n) { + * return n % 2 == 0; + * }); + * // => [1, 3] + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false }, + * { 'user': 'fred', 'age': 40, 'active': true } + * ]; + * + * // using the `_.matches` callback shorthand + * _.pluck(_.reject(users, { 'age': 40, 'active': true }), 'user'); + * // => ['barney'] + * + * // using the `_.matchesProperty` callback shorthand + * _.pluck(_.reject(users, 'active', false), 'user'); + * // => ['fred'] + * + * // using the `_.property` callback shorthand + * _.pluck(_.reject(users, 'active'), 'user'); + * // => ['barney'] + */ +function reject(collection, predicate, thisArg) { + var func = isArray(collection) ? arrayFilter : baseFilter; + predicate = baseCallback(predicate, thisArg, 3); + return func(collection, function(value, index, collection) { + return !predicate(value, index, collection); + }); +} + +module.exports = reject; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/sample.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/sample.js new file mode 100644 index 00000000..8e015330 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/sample.js @@ -0,0 +1,50 @@ +var baseRandom = require('../internal/baseRandom'), + isIterateeCall = require('../internal/isIterateeCall'), + toArray = require('../lang/toArray'), + toIterable = require('../internal/toIterable'); + +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeMin = Math.min; + +/** + * Gets a random element or `n` random elements from a collection. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to sample. + * @param {number} [n] The number of elements to sample. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {*} Returns the random sample(s). + * @example + * + * _.sample([1, 2, 3, 4]); + * // => 2 + * + * _.sample([1, 2, 3, 4], 2); + * // => [3, 1] + */ +function sample(collection, n, guard) { + if (guard ? isIterateeCall(collection, n, guard) : n == null) { + collection = toIterable(collection); + var length = collection.length; + return length > 0 ? collection[baseRandom(0, length - 1)] : undefined; + } + var index = -1, + result = toArray(collection), + length = result.length, + lastIndex = length - 1; + + n = nativeMin(n < 0 ? 0 : (+n || 0), length); + while (++index < n) { + var rand = baseRandom(index, lastIndex), + value = result[rand]; + + result[rand] = result[index]; + result[index] = value; + } + result.length = n; + return result; +} + +module.exports = sample; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/select.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/select.js new file mode 100644 index 00000000..ade80f6f --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/select.js @@ -0,0 +1 @@ +module.exports = require('./filter'); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/shuffle.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/shuffle.js new file mode 100644 index 00000000..949689c5 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/shuffle.js @@ -0,0 +1,24 @@ +var sample = require('./sample'); + +/** Used as references for `-Infinity` and `Infinity`. */ +var POSITIVE_INFINITY = Number.POSITIVE_INFINITY; + +/** + * Creates an array of shuffled values, using a version of the + * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle). + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to shuffle. + * @returns {Array} Returns the new shuffled array. + * @example + * + * _.shuffle([1, 2, 3, 4]); + * // => [4, 1, 3, 2] + */ +function shuffle(collection) { + return sample(collection, POSITIVE_INFINITY); +} + +module.exports = shuffle; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/size.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/size.js new file mode 100644 index 00000000..78dcf4ce --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/size.js @@ -0,0 +1,30 @@ +var getLength = require('../internal/getLength'), + isLength = require('../internal/isLength'), + keys = require('../object/keys'); + +/** + * Gets the size of `collection` by returning its length for array-like + * values or the number of own enumerable properties for objects. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @returns {number} Returns the size of `collection`. + * @example + * + * _.size([1, 2, 3]); + * // => 3 + * + * _.size({ 'a': 1, 'b': 2 }); + * // => 2 + * + * _.size('pebbles'); + * // => 7 + */ +function size(collection) { + var length = collection ? getLength(collection) : 0; + return isLength(length) ? length : keys(collection).length; +} + +module.exports = size; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/some.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/some.js new file mode 100644 index 00000000..d0b09a47 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/some.js @@ -0,0 +1,67 @@ +var arraySome = require('../internal/arraySome'), + baseCallback = require('../internal/baseCallback'), + baseSome = require('../internal/baseSome'), + isArray = require('../lang/isArray'), + isIterateeCall = require('../internal/isIterateeCall'); + +/** + * Checks if `predicate` returns truthy for **any** element of `collection`. + * The function returns as soon as it finds a passing value and does not iterate + * over the entire collection. The predicate is bound to `thisArg` and invoked + * with three arguments: (value, index|key, collection). + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @alias any + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + * @example + * + * _.some([null, 0, 'yes', false], Boolean); + * // => true + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false } + * ]; + * + * // using the `_.matches` callback shorthand + * _.some(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // using the `_.matchesProperty` callback shorthand + * _.some(users, 'active', false); + * // => true + * + * // using the `_.property` callback shorthand + * _.some(users, 'active'); + * // => true + */ +function some(collection, predicate, thisArg) { + var func = isArray(collection) ? arraySome : baseSome; + if (thisArg && isIterateeCall(collection, predicate, thisArg)) { + predicate = undefined; + } + if (typeof predicate != 'function' || thisArg !== undefined) { + predicate = baseCallback(predicate, thisArg, 3); + } + return func(collection, predicate); +} + +module.exports = some; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/sortBy.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/sortBy.js new file mode 100644 index 00000000..4401c777 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/sortBy.js @@ -0,0 +1,71 @@ +var baseCallback = require('../internal/baseCallback'), + baseMap = require('../internal/baseMap'), + baseSortBy = require('../internal/baseSortBy'), + compareAscending = require('../internal/compareAscending'), + isIterateeCall = require('../internal/isIterateeCall'); + +/** + * Creates an array of elements, sorted in ascending order by the results of + * running each element in a collection through `iteratee`. This method performs + * a stable sort, that is, it preserves the original sort order of equal elements. + * The `iteratee` is bound to `thisArg` and invoked with three arguments: + * (value, index|key, collection). + * + * If a property name is provided for `iteratee` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `iteratee` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [iteratee=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Array} Returns the new sorted array. + * @example + * + * _.sortBy([1, 2, 3], function(n) { + * return Math.sin(n); + * }); + * // => [3, 1, 2] + * + * _.sortBy([1, 2, 3], function(n) { + * return this.sin(n); + * }, Math); + * // => [3, 1, 2] + * + * var users = [ + * { 'user': 'fred' }, + * { 'user': 'pebbles' }, + * { 'user': 'barney' } + * ]; + * + * // using the `_.property` callback shorthand + * _.pluck(_.sortBy(users, 'user'), 'user'); + * // => ['barney', 'fred', 'pebbles'] + */ +function sortBy(collection, iteratee, thisArg) { + if (collection == null) { + return []; + } + if (thisArg && isIterateeCall(collection, iteratee, thisArg)) { + iteratee = undefined; + } + var index = -1; + iteratee = baseCallback(iteratee, thisArg, 3); + + var result = baseMap(collection, function(value, key, collection) { + return { 'criteria': iteratee(value, key, collection), 'index': ++index, 'value': value }; + }); + return baseSortBy(result, compareAscending); +} + +module.exports = sortBy; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/sortByAll.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/sortByAll.js new file mode 100644 index 00000000..4766c209 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/sortByAll.js @@ -0,0 +1,52 @@ +var baseFlatten = require('../internal/baseFlatten'), + baseSortByOrder = require('../internal/baseSortByOrder'), + isIterateeCall = require('../internal/isIterateeCall'), + restParam = require('../function/restParam'); + +/** + * This method is like `_.sortBy` except that it can sort by multiple iteratees + * or property names. + * + * If a property name is provided for an iteratee the created `_.property` + * style callback returns the property value of the given element. + * + * If an object is provided for an iteratee the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {...(Function|Function[]|Object|Object[]|string|string[])} iteratees + * The iteratees to sort by, specified as individual values or arrays of values. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 42 }, + * { 'user': 'barney', 'age': 34 } + * ]; + * + * _.map(_.sortByAll(users, ['user', 'age']), _.values); + * // => [['barney', 34], ['barney', 36], ['fred', 42], ['fred', 48]] + * + * _.map(_.sortByAll(users, 'user', function(chr) { + * return Math.floor(chr.age / 10); + * }), _.values); + * // => [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 42]] + */ +var sortByAll = restParam(function(collection, iteratees) { + if (collection == null) { + return []; + } + var guard = iteratees[2]; + if (guard && isIterateeCall(iteratees[0], iteratees[1], guard)) { + iteratees.length = 1; + } + return baseSortByOrder(collection, baseFlatten(iteratees), []); +}); + +module.exports = sortByAll; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/sortByOrder.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/sortByOrder.js new file mode 100644 index 00000000..8b4fc196 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/sortByOrder.js @@ -0,0 +1,55 @@ +var baseSortByOrder = require('../internal/baseSortByOrder'), + isArray = require('../lang/isArray'), + isIterateeCall = require('../internal/isIterateeCall'); + +/** + * This method is like `_.sortByAll` except that it allows specifying the + * sort orders of the iteratees to sort by. If `orders` is unspecified, all + * values are sorted in ascending order. Otherwise, a value is sorted in + * ascending order if its corresponding order is "asc", and descending if "desc". + * + * If a property name is provided for an iteratee the created `_.property` + * style callback returns the property value of the given element. + * + * If an object is provided for an iteratee the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. + * @param {boolean[]} [orders] The sort orders of `iteratees`. + * @param- {Object} [guard] Enables use as a callback for functions like `_.reduce`. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 34 }, + * { 'user': 'fred', 'age': 42 }, + * { 'user': 'barney', 'age': 36 } + * ]; + * + * // sort by `user` in ascending order and by `age` in descending order + * _.map(_.sortByOrder(users, ['user', 'age'], ['asc', 'desc']), _.values); + * // => [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 42]] + */ +function sortByOrder(collection, iteratees, orders, guard) { + if (collection == null) { + return []; + } + if (guard && isIterateeCall(iteratees, orders, guard)) { + orders = undefined; + } + if (!isArray(iteratees)) { + iteratees = iteratees == null ? [] : [iteratees]; + } + if (!isArray(orders)) { + orders = orders == null ? [] : [orders]; + } + return baseSortByOrder(collection, iteratees, orders); +} + +module.exports = sortByOrder; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/sum.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/sum.js new file mode 100644 index 00000000..a2e93808 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/sum.js @@ -0,0 +1 @@ +module.exports = require('../math/sum'); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/where.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/where.js new file mode 100644 index 00000000..f603bf8c --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/collection/where.js @@ -0,0 +1,37 @@ +var baseMatches = require('../internal/baseMatches'), + filter = require('./filter'); + +/** + * Performs a deep comparison between each element in `collection` and the + * source object, returning an array of all elements that have equivalent + * property values. + * + * **Note:** This method supports comparing arrays, booleans, `Date` objects, + * numbers, `Object` objects, regexes, and strings. Objects are compared by + * their own, not inherited, enumerable properties. For comparing a single + * own or inherited property value see `_.matchesProperty`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to search. + * @param {Object} source The object of property values to match. + * @returns {Array} Returns the new filtered array. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false, 'pets': ['hoppy'] }, + * { 'user': 'fred', 'age': 40, 'active': true, 'pets': ['baby puss', 'dino'] } + * ]; + * + * _.pluck(_.where(users, { 'age': 36, 'active': false }), 'user'); + * // => ['barney'] + * + * _.pluck(_.where(users, { 'pets': ['dino'] }), 'user'); + * // => ['fred'] + */ +function where(collection, source) { + return filter(collection, baseMatches(source)); +} + +module.exports = where; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/date.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/date.js new file mode 100644 index 00000000..195366e7 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/date.js @@ -0,0 +1,3 @@ +module.exports = { + 'now': require('./date/now') +}; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/date/now.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/date/now.js new file mode 100644 index 00000000..ffe3060e --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/date/now.js @@ -0,0 +1,24 @@ +var getNative = require('../internal/getNative'); + +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeNow = getNative(Date, 'now'); + +/** + * Gets the number of milliseconds that have elapsed since the Unix epoch + * (1 January 1970 00:00:00 UTC). + * + * @static + * @memberOf _ + * @category Date + * @example + * + * _.defer(function(stamp) { + * console.log(_.now() - stamp); + * }, _.now()); + * // => logs the number of milliseconds it took for the deferred function to be invoked + */ +var now = nativeNow || function() { + return new Date().getTime(); +}; + +module.exports = now; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function.js new file mode 100644 index 00000000..71f8ebeb --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function.js @@ -0,0 +1,28 @@ +module.exports = { + 'after': require('./function/after'), + 'ary': require('./function/ary'), + 'backflow': require('./function/backflow'), + 'before': require('./function/before'), + 'bind': require('./function/bind'), + 'bindAll': require('./function/bindAll'), + 'bindKey': require('./function/bindKey'), + 'compose': require('./function/compose'), + 'curry': require('./function/curry'), + 'curryRight': require('./function/curryRight'), + 'debounce': require('./function/debounce'), + 'defer': require('./function/defer'), + 'delay': require('./function/delay'), + 'flow': require('./function/flow'), + 'flowRight': require('./function/flowRight'), + 'memoize': require('./function/memoize'), + 'modArgs': require('./function/modArgs'), + 'negate': require('./function/negate'), + 'once': require('./function/once'), + 'partial': require('./function/partial'), + 'partialRight': require('./function/partialRight'), + 'rearg': require('./function/rearg'), + 'restParam': require('./function/restParam'), + 'spread': require('./function/spread'), + 'throttle': require('./function/throttle'), + 'wrap': require('./function/wrap') +}; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/after.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/after.js new file mode 100644 index 00000000..e6a5de40 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/after.js @@ -0,0 +1,48 @@ +/** Used as the `TypeError` message for "Functions" methods. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeIsFinite = global.isFinite; + +/** + * The opposite of `_.before`; this method creates a function that invokes + * `func` once it is called `n` or more times. + * + * @static + * @memberOf _ + * @category Function + * @param {number} n The number of calls before `func` is invoked. + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * var saves = ['profile', 'settings']; + * + * var done = _.after(saves.length, function() { + * console.log('done saving!'); + * }); + * + * _.forEach(saves, function(type) { + * asyncSave({ 'type': type, 'complete': done }); + * }); + * // => logs 'done saving!' after the two async saves have completed + */ +function after(n, func) { + if (typeof func != 'function') { + if (typeof n == 'function') { + var temp = n; + n = func; + func = temp; + } else { + throw new TypeError(FUNC_ERROR_TEXT); + } + } + n = nativeIsFinite(n = +n) ? n : 0; + return function() { + if (--n < 1) { + return func.apply(this, arguments); + } + }; +} + +module.exports = after; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/ary.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/ary.js new file mode 100644 index 00000000..53a6913e --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/ary.js @@ -0,0 +1,34 @@ +var createWrapper = require('../internal/createWrapper'), + isIterateeCall = require('../internal/isIterateeCall'); + +/** Used to compose bitmasks for wrapper metadata. */ +var ARY_FLAG = 128; + +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * Creates a function that accepts up to `n` arguments ignoring any + * additional arguments. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to cap arguments for. + * @param {number} [n=func.length] The arity cap. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Function} Returns the new function. + * @example + * + * _.map(['6', '8', '10'], _.ary(parseInt, 1)); + * // => [6, 8, 10] + */ +function ary(func, n, guard) { + if (guard && isIterateeCall(func, n, guard)) { + n = undefined; + } + n = (func && n == null) ? func.length : nativeMax(+n || 0, 0); + return createWrapper(func, ARY_FLAG, undefined, undefined, undefined, undefined, n); +} + +module.exports = ary; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/backflow.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/backflow.js new file mode 100644 index 00000000..1954e942 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/backflow.js @@ -0,0 +1 @@ +module.exports = require('./flowRight'); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/before.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/before.js new file mode 100644 index 00000000..dd1d03bc --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/before.js @@ -0,0 +1,42 @@ +/** Used as the `TypeError` message for "Functions" methods. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** + * Creates a function that invokes `func`, with the `this` binding and arguments + * of the created function, while it is called less than `n` times. Subsequent + * calls to the created function return the result of the last `func` invocation. + * + * @static + * @memberOf _ + * @category Function + * @param {number} n The number of calls at which `func` is no longer invoked. + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * jQuery('#add').on('click', _.before(5, addContactToList)); + * // => allows adding up to 4 contacts to the list + */ +function before(n, func) { + var result; + if (typeof func != 'function') { + if (typeof n == 'function') { + var temp = n; + n = func; + func = temp; + } else { + throw new TypeError(FUNC_ERROR_TEXT); + } + } + return function() { + if (--n > 0) { + result = func.apply(this, arguments); + } + if (n <= 1) { + func = undefined; + } + return result; + }; +} + +module.exports = before; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/bind.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/bind.js new file mode 100644 index 00000000..0de126ae --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/bind.js @@ -0,0 +1,56 @@ +var createWrapper = require('../internal/createWrapper'), + replaceHolders = require('../internal/replaceHolders'), + restParam = require('./restParam'); + +/** Used to compose bitmasks for wrapper metadata. */ +var BIND_FLAG = 1, + PARTIAL_FLAG = 32; + +/** + * Creates a function that invokes `func` with the `this` binding of `thisArg` + * and prepends any additional `_.bind` arguments to those provided to the + * bound function. + * + * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds, + * may be used as a placeholder for partially applied arguments. + * + * **Note:** Unlike native `Function#bind` this method does not set the "length" + * property of bound functions. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to bind. + * @param {*} thisArg The `this` binding of `func`. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new bound function. + * @example + * + * var greet = function(greeting, punctuation) { + * return greeting + ' ' + this.user + punctuation; + * }; + * + * var object = { 'user': 'fred' }; + * + * var bound = _.bind(greet, object, 'hi'); + * bound('!'); + * // => 'hi fred!' + * + * // using placeholders + * var bound = _.bind(greet, object, _, '!'); + * bound('hi'); + * // => 'hi fred!' + */ +var bind = restParam(function(func, thisArg, partials) { + var bitmask = BIND_FLAG; + if (partials.length) { + var holders = replaceHolders(partials, bind.placeholder); + bitmask |= PARTIAL_FLAG; + } + return createWrapper(func, bitmask, thisArg, partials, holders); +}); + +// Assign default placeholders. +bind.placeholder = {}; + +module.exports = bind; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/bindAll.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/bindAll.js new file mode 100644 index 00000000..a09e9485 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/bindAll.js @@ -0,0 +1,50 @@ +var baseFlatten = require('../internal/baseFlatten'), + createWrapper = require('../internal/createWrapper'), + functions = require('../object/functions'), + restParam = require('./restParam'); + +/** Used to compose bitmasks for wrapper metadata. */ +var BIND_FLAG = 1; + +/** + * Binds methods of an object to the object itself, overwriting the existing + * method. Method names may be specified as individual arguments or as arrays + * of method names. If no method names are provided all enumerable function + * properties, own and inherited, of `object` are bound. + * + * **Note:** This method does not set the "length" property of bound functions. + * + * @static + * @memberOf _ + * @category Function + * @param {Object} object The object to bind and assign the bound methods to. + * @param {...(string|string[])} [methodNames] The object method names to bind, + * specified as individual method names or arrays of method names. + * @returns {Object} Returns `object`. + * @example + * + * var view = { + * 'label': 'docs', + * 'onClick': function() { + * console.log('clicked ' + this.label); + * } + * }; + * + * _.bindAll(view); + * jQuery('#docs').on('click', view.onClick); + * // => logs 'clicked docs' when the element is clicked + */ +var bindAll = restParam(function(object, methodNames) { + methodNames = methodNames.length ? baseFlatten(methodNames) : functions(object); + + var index = -1, + length = methodNames.length; + + while (++index < length) { + var key = methodNames[index]; + object[key] = createWrapper(object[key], BIND_FLAG, object); + } + return object; +}); + +module.exports = bindAll; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/bindKey.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/bindKey.js new file mode 100644 index 00000000..b787fe70 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/bindKey.js @@ -0,0 +1,66 @@ +var createWrapper = require('../internal/createWrapper'), + replaceHolders = require('../internal/replaceHolders'), + restParam = require('./restParam'); + +/** Used to compose bitmasks for wrapper metadata. */ +var BIND_FLAG = 1, + BIND_KEY_FLAG = 2, + PARTIAL_FLAG = 32; + +/** + * Creates a function that invokes the method at `object[key]` and prepends + * any additional `_.bindKey` arguments to those provided to the bound function. + * + * This method differs from `_.bind` by allowing bound functions to reference + * methods that may be redefined or don't yet exist. + * See [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern) + * for more details. + * + * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for partially applied arguments. + * + * @static + * @memberOf _ + * @category Function + * @param {Object} object The object the method belongs to. + * @param {string} key The key of the method. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new bound function. + * @example + * + * var object = { + * 'user': 'fred', + * 'greet': function(greeting, punctuation) { + * return greeting + ' ' + this.user + punctuation; + * } + * }; + * + * var bound = _.bindKey(object, 'greet', 'hi'); + * bound('!'); + * // => 'hi fred!' + * + * object.greet = function(greeting, punctuation) { + * return greeting + 'ya ' + this.user + punctuation; + * }; + * + * bound('!'); + * // => 'hiya fred!' + * + * // using placeholders + * var bound = _.bindKey(object, 'greet', _, '!'); + * bound('hi'); + * // => 'hiya fred!' + */ +var bindKey = restParam(function(object, key, partials) { + var bitmask = BIND_FLAG | BIND_KEY_FLAG; + if (partials.length) { + var holders = replaceHolders(partials, bindKey.placeholder); + bitmask |= PARTIAL_FLAG; + } + return createWrapper(key, bitmask, object, partials, holders); +}); + +// Assign default placeholders. +bindKey.placeholder = {}; + +module.exports = bindKey; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/compose.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/compose.js new file mode 100644 index 00000000..1954e942 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/compose.js @@ -0,0 +1 @@ +module.exports = require('./flowRight'); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/curry.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/curry.js new file mode 100644 index 00000000..b7db3fda --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/curry.js @@ -0,0 +1,51 @@ +var createCurry = require('../internal/createCurry'); + +/** Used to compose bitmasks for wrapper metadata. */ +var CURRY_FLAG = 8; + +/** + * Creates a function that accepts one or more arguments of `func` that when + * called either invokes `func` returning its result, if all `func` arguments + * have been provided, or returns a function that accepts one or more of the + * remaining `func` arguments, and so on. The arity of `func` may be specified + * if `func.length` is not sufficient. + * + * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds, + * may be used as a placeholder for provided arguments. + * + * **Note:** This method does not set the "length" property of curried functions. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to curry. + * @param {number} [arity=func.length] The arity of `func`. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Function} Returns the new curried function. + * @example + * + * var abc = function(a, b, c) { + * return [a, b, c]; + * }; + * + * var curried = _.curry(abc); + * + * curried(1)(2)(3); + * // => [1, 2, 3] + * + * curried(1, 2)(3); + * // => [1, 2, 3] + * + * curried(1, 2, 3); + * // => [1, 2, 3] + * + * // using placeholders + * curried(1)(_, 3)(2); + * // => [1, 2, 3] + */ +var curry = createCurry(CURRY_FLAG); + +// Assign default placeholders. +curry.placeholder = {}; + +module.exports = curry; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/curryRight.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/curryRight.js new file mode 100644 index 00000000..11c54039 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/curryRight.js @@ -0,0 +1,48 @@ +var createCurry = require('../internal/createCurry'); + +/** Used to compose bitmasks for wrapper metadata. */ +var CURRY_RIGHT_FLAG = 16; + +/** + * This method is like `_.curry` except that arguments are applied to `func` + * in the manner of `_.partialRight` instead of `_.partial`. + * + * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for provided arguments. + * + * **Note:** This method does not set the "length" property of curried functions. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to curry. + * @param {number} [arity=func.length] The arity of `func`. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Function} Returns the new curried function. + * @example + * + * var abc = function(a, b, c) { + * return [a, b, c]; + * }; + * + * var curried = _.curryRight(abc); + * + * curried(3)(2)(1); + * // => [1, 2, 3] + * + * curried(2, 3)(1); + * // => [1, 2, 3] + * + * curried(1, 2, 3); + * // => [1, 2, 3] + * + * // using placeholders + * curried(3)(1, _)(2); + * // => [1, 2, 3] + */ +var curryRight = createCurry(CURRY_RIGHT_FLAG); + +// Assign default placeholders. +curryRight.placeholder = {}; + +module.exports = curryRight; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/debounce.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/debounce.js new file mode 100644 index 00000000..caf2a69d --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/debounce.js @@ -0,0 +1,181 @@ +var isObject = require('../lang/isObject'), + now = require('../date/now'); + +/** Used as the `TypeError` message for "Functions" methods. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * Creates a debounced function that delays invoking `func` until after `wait` + * milliseconds have elapsed since the last time the debounced function was + * invoked. The debounced function comes with a `cancel` method to cancel + * delayed invocations. Provide an options object to indicate that `func` + * should be invoked on the leading and/or trailing edge of the `wait` timeout. + * Subsequent calls to the debounced function return the result of the last + * `func` invocation. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is invoked + * on the trailing edge of the timeout only if the the debounced function is + * invoked more than once during the `wait` timeout. + * + * See [David Corbacho's article](http://drupalmotion.com/article/debounce-and-throttle-visual-explanation) + * for details over the differences between `_.debounce` and `_.throttle`. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to debounce. + * @param {number} [wait=0] The number of milliseconds to delay. + * @param {Object} [options] The options object. + * @param {boolean} [options.leading=false] Specify invoking on the leading + * edge of the timeout. + * @param {number} [options.maxWait] The maximum time `func` is allowed to be + * delayed before it is invoked. + * @param {boolean} [options.trailing=true] Specify invoking on the trailing + * edge of the timeout. + * @returns {Function} Returns the new debounced function. + * @example + * + * // avoid costly calculations while the window size is in flux + * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); + * + * // invoke `sendMail` when the click event is fired, debouncing subsequent calls + * jQuery('#postbox').on('click', _.debounce(sendMail, 300, { + * 'leading': true, + * 'trailing': false + * })); + * + * // ensure `batchLog` is invoked once after 1 second of debounced calls + * var source = new EventSource('/stream'); + * jQuery(source).on('message', _.debounce(batchLog, 250, { + * 'maxWait': 1000 + * })); + * + * // cancel a debounced call + * var todoChanges = _.debounce(batchLog, 1000); + * Object.observe(models.todo, todoChanges); + * + * Object.observe(models, function(changes) { + * if (_.find(changes, { 'user': 'todo', 'type': 'delete'})) { + * todoChanges.cancel(); + * } + * }, ['delete']); + * + * // ...at some point `models.todo` is changed + * models.todo.completed = true; + * + * // ...before 1 second has passed `models.todo` is deleted + * // which cancels the debounced `todoChanges` call + * delete models.todo; + */ +function debounce(func, wait, options) { + var args, + maxTimeoutId, + result, + stamp, + thisArg, + timeoutId, + trailingCall, + lastCalled = 0, + maxWait = false, + trailing = true; + + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + wait = wait < 0 ? 0 : (+wait || 0); + if (options === true) { + var leading = true; + trailing = false; + } else if (isObject(options)) { + leading = !!options.leading; + maxWait = 'maxWait' in options && nativeMax(+options.maxWait || 0, wait); + trailing = 'trailing' in options ? !!options.trailing : trailing; + } + + function cancel() { + if (timeoutId) { + clearTimeout(timeoutId); + } + if (maxTimeoutId) { + clearTimeout(maxTimeoutId); + } + lastCalled = 0; + maxTimeoutId = timeoutId = trailingCall = undefined; + } + + function complete(isCalled, id) { + if (id) { + clearTimeout(id); + } + maxTimeoutId = timeoutId = trailingCall = undefined; + if (isCalled) { + lastCalled = now(); + result = func.apply(thisArg, args); + if (!timeoutId && !maxTimeoutId) { + args = thisArg = undefined; + } + } + } + + function delayed() { + var remaining = wait - (now() - stamp); + if (remaining <= 0 || remaining > wait) { + complete(trailingCall, maxTimeoutId); + } else { + timeoutId = setTimeout(delayed, remaining); + } + } + + function maxDelayed() { + complete(trailing, timeoutId); + } + + function debounced() { + args = arguments; + stamp = now(); + thisArg = this; + trailingCall = trailing && (timeoutId || !leading); + + if (maxWait === false) { + var leadingCall = leading && !timeoutId; + } else { + if (!maxTimeoutId && !leading) { + lastCalled = stamp; + } + var remaining = maxWait - (stamp - lastCalled), + isCalled = remaining <= 0 || remaining > maxWait; + + if (isCalled) { + if (maxTimeoutId) { + maxTimeoutId = clearTimeout(maxTimeoutId); + } + lastCalled = stamp; + result = func.apply(thisArg, args); + } + else if (!maxTimeoutId) { + maxTimeoutId = setTimeout(maxDelayed, remaining); + } + } + if (isCalled && timeoutId) { + timeoutId = clearTimeout(timeoutId); + } + else if (!timeoutId && wait !== maxWait) { + timeoutId = setTimeout(delayed, wait); + } + if (leadingCall) { + isCalled = true; + result = func.apply(thisArg, args); + } + if (isCalled && !timeoutId && !maxTimeoutId) { + args = thisArg = undefined; + } + return result; + } + debounced.cancel = cancel; + return debounced; +} + +module.exports = debounce; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/defer.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/defer.js new file mode 100644 index 00000000..369790ce --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/defer.js @@ -0,0 +1,25 @@ +var baseDelay = require('../internal/baseDelay'), + restParam = require('./restParam'); + +/** + * Defers invoking the `func` until the current call stack has cleared. Any + * additional arguments are provided to `func` when it is invoked. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to defer. + * @param {...*} [args] The arguments to invoke the function with. + * @returns {number} Returns the timer id. + * @example + * + * _.defer(function(text) { + * console.log(text); + * }, 'deferred'); + * // logs 'deferred' after one or more milliseconds + */ +var defer = restParam(function(func, args) { + return baseDelay(func, 1, args); +}); + +module.exports = defer; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/delay.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/delay.js new file mode 100644 index 00000000..955b059e --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/delay.js @@ -0,0 +1,26 @@ +var baseDelay = require('../internal/baseDelay'), + restParam = require('./restParam'); + +/** + * Invokes `func` after `wait` milliseconds. Any additional arguments are + * provided to `func` when it is invoked. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @param {...*} [args] The arguments to invoke the function with. + * @returns {number} Returns the timer id. + * @example + * + * _.delay(function(text) { + * console.log(text); + * }, 1000, 'later'); + * // => logs 'later' after one second + */ +var delay = restParam(function(func, wait, args) { + return baseDelay(func, wait, args); +}); + +module.exports = delay; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/flow.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/flow.js new file mode 100644 index 00000000..a435a3d8 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/flow.js @@ -0,0 +1,25 @@ +var createFlow = require('../internal/createFlow'); + +/** + * Creates a function that returns the result of invoking the provided + * functions with the `this` binding of the created function, where each + * successive invocation is supplied the return value of the previous. + * + * @static + * @memberOf _ + * @category Function + * @param {...Function} [funcs] Functions to invoke. + * @returns {Function} Returns the new function. + * @example + * + * function square(n) { + * return n * n; + * } + * + * var addSquare = _.flow(_.add, square); + * addSquare(1, 2); + * // => 9 + */ +var flow = createFlow(); + +module.exports = flow; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/flowRight.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/flowRight.js new file mode 100644 index 00000000..23b9d76b --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/flowRight.js @@ -0,0 +1,25 @@ +var createFlow = require('../internal/createFlow'); + +/** + * This method is like `_.flow` except that it creates a function that + * invokes the provided functions from right to left. + * + * @static + * @memberOf _ + * @alias backflow, compose + * @category Function + * @param {...Function} [funcs] Functions to invoke. + * @returns {Function} Returns the new function. + * @example + * + * function square(n) { + * return n * n; + * } + * + * var addSquare = _.flowRight(square, _.add); + * addSquare(1, 2); + * // => 9 + */ +var flowRight = createFlow(true); + +module.exports = flowRight; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/memoize.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/memoize.js new file mode 100644 index 00000000..f3b8d699 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/memoize.js @@ -0,0 +1,80 @@ +var MapCache = require('../internal/MapCache'); + +/** Used as the `TypeError` message for "Functions" methods. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** + * Creates a function that memoizes the result of `func`. If `resolver` is + * provided it determines the cache key for storing the result based on the + * arguments provided to the memoized function. By default, the first argument + * provided to the memoized function is coerced to a string and used as the + * cache key. The `func` is invoked with the `this` binding of the memoized + * function. + * + * **Note:** The cache is exposed as the `cache` property on the memoized + * function. Its creation may be customized by replacing the `_.memoize.Cache` + * constructor with one whose instances implement the [`Map`](http://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-map-prototype-object) + * method interface of `get`, `has`, and `set`. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to have its output memoized. + * @param {Function} [resolver] The function to resolve the cache key. + * @returns {Function} Returns the new memoizing function. + * @example + * + * var upperCase = _.memoize(function(string) { + * return string.toUpperCase(); + * }); + * + * upperCase('fred'); + * // => 'FRED' + * + * // modifying the result cache + * upperCase.cache.set('fred', 'BARNEY'); + * upperCase('fred'); + * // => 'BARNEY' + * + * // replacing `_.memoize.Cache` + * var object = { 'user': 'fred' }; + * var other = { 'user': 'barney' }; + * var identity = _.memoize(_.identity); + * + * identity(object); + * // => { 'user': 'fred' } + * identity(other); + * // => { 'user': 'fred' } + * + * _.memoize.Cache = WeakMap; + * var identity = _.memoize(_.identity); + * + * identity(object); + * // => { 'user': 'fred' } + * identity(other); + * // => { 'user': 'barney' } + */ +function memoize(func, resolver) { + if (typeof func != 'function' || (resolver && typeof resolver != 'function')) { + throw new TypeError(FUNC_ERROR_TEXT); + } + var memoized = function() { + var args = arguments, + key = resolver ? resolver.apply(this, args) : args[0], + cache = memoized.cache; + + if (cache.has(key)) { + return cache.get(key); + } + var result = func.apply(this, args); + memoized.cache = cache.set(key, result); + return result; + }; + memoized.cache = new memoize.Cache; + return memoized; +} + +// Assign cache to `_.memoize`. +memoize.Cache = MapCache; + +module.exports = memoize; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/modArgs.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/modArgs.js new file mode 100644 index 00000000..49b9b5e6 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/modArgs.js @@ -0,0 +1,58 @@ +var arrayEvery = require('../internal/arrayEvery'), + baseFlatten = require('../internal/baseFlatten'), + baseIsFunction = require('../internal/baseIsFunction'), + restParam = require('./restParam'); + +/** Used as the `TypeError` message for "Functions" methods. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeMin = Math.min; + +/** + * Creates a function that runs each argument through a corresponding + * transform function. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to wrap. + * @param {...(Function|Function[])} [transforms] The functions to transform + * arguments, specified as individual functions or arrays of functions. + * @returns {Function} Returns the new function. + * @example + * + * function doubled(n) { + * return n * 2; + * } + * + * function square(n) { + * return n * n; + * } + * + * var modded = _.modArgs(function(x, y) { + * return [x, y]; + * }, square, doubled); + * + * modded(1, 2); + * // => [1, 4] + * + * modded(5, 10); + * // => [25, 20] + */ +var modArgs = restParam(function(func, transforms) { + transforms = baseFlatten(transforms); + if (typeof func != 'function' || !arrayEvery(transforms, baseIsFunction)) { + throw new TypeError(FUNC_ERROR_TEXT); + } + var length = transforms.length; + return restParam(function(args) { + var index = nativeMin(args.length, length); + while (index--) { + args[index] = transforms[index](args[index]); + } + return func.apply(this, args); + }); +}); + +module.exports = modArgs; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/negate.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/negate.js new file mode 100644 index 00000000..82479390 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/negate.js @@ -0,0 +1,32 @@ +/** Used as the `TypeError` message for "Functions" methods. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** + * Creates a function that negates the result of the predicate `func`. The + * `func` predicate is invoked with the `this` binding and arguments of the + * created function. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} predicate The predicate to negate. + * @returns {Function} Returns the new function. + * @example + * + * function isEven(n) { + * return n % 2 == 0; + * } + * + * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven)); + * // => [1, 3, 5] + */ +function negate(predicate) { + if (typeof predicate != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return function() { + return !predicate.apply(this, arguments); + }; +} + +module.exports = negate; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/once.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/once.js new file mode 100644 index 00000000..0b5bd853 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/once.js @@ -0,0 +1,24 @@ +var before = require('./before'); + +/** + * Creates a function that is restricted to invoking `func` once. Repeat calls + * to the function return the value of the first call. The `func` is invoked + * with the `this` binding and arguments of the created function. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * var initialize = _.once(createApplication); + * initialize(); + * initialize(); + * // `initialize` invokes `createApplication` once + */ +function once(func) { + return before(2, func); +} + +module.exports = once; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/partial.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/partial.js new file mode 100644 index 00000000..fb1d04fb --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/partial.js @@ -0,0 +1,43 @@ +var createPartial = require('../internal/createPartial'); + +/** Used to compose bitmasks for wrapper metadata. */ +var PARTIAL_FLAG = 32; + +/** + * Creates a function that invokes `func` with `partial` arguments prepended + * to those provided to the new function. This method is like `_.bind` except + * it does **not** alter the `this` binding. + * + * The `_.partial.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for partially applied arguments. + * + * **Note:** This method does not set the "length" property of partially + * applied functions. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to partially apply arguments to. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new partially applied function. + * @example + * + * var greet = function(greeting, name) { + * return greeting + ' ' + name; + * }; + * + * var sayHelloTo = _.partial(greet, 'hello'); + * sayHelloTo('fred'); + * // => 'hello fred' + * + * // using placeholders + * var greetFred = _.partial(greet, _, 'fred'); + * greetFred('hi'); + * // => 'hi fred' + */ +var partial = createPartial(PARTIAL_FLAG); + +// Assign default placeholders. +partial.placeholder = {}; + +module.exports = partial; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/partialRight.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/partialRight.js new file mode 100644 index 00000000..634e6a4c --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/partialRight.js @@ -0,0 +1,42 @@ +var createPartial = require('../internal/createPartial'); + +/** Used to compose bitmasks for wrapper metadata. */ +var PARTIAL_RIGHT_FLAG = 64; + +/** + * This method is like `_.partial` except that partially applied arguments + * are appended to those provided to the new function. + * + * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for partially applied arguments. + * + * **Note:** This method does not set the "length" property of partially + * applied functions. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to partially apply arguments to. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new partially applied function. + * @example + * + * var greet = function(greeting, name) { + * return greeting + ' ' + name; + * }; + * + * var greetFred = _.partialRight(greet, 'fred'); + * greetFred('hi'); + * // => 'hi fred' + * + * // using placeholders + * var sayHelloTo = _.partialRight(greet, 'hello', _); + * sayHelloTo('fred'); + * // => 'hello fred' + */ +var partialRight = createPartial(PARTIAL_RIGHT_FLAG); + +// Assign default placeholders. +partialRight.placeholder = {}; + +module.exports = partialRight; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/rearg.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/rearg.js new file mode 100644 index 00000000..f2bd9c41 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/rearg.js @@ -0,0 +1,40 @@ +var baseFlatten = require('../internal/baseFlatten'), + createWrapper = require('../internal/createWrapper'), + restParam = require('./restParam'); + +/** Used to compose bitmasks for wrapper metadata. */ +var REARG_FLAG = 256; + +/** + * Creates a function that invokes `func` with arguments arranged according + * to the specified indexes where the argument value at the first index is + * provided as the first argument, the argument value at the second index is + * provided as the second argument, and so on. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to rearrange arguments for. + * @param {...(number|number[])} indexes The arranged argument indexes, + * specified as individual indexes or arrays of indexes. + * @returns {Function} Returns the new function. + * @example + * + * var rearged = _.rearg(function(a, b, c) { + * return [a, b, c]; + * }, 2, 0, 1); + * + * rearged('b', 'c', 'a') + * // => ['a', 'b', 'c'] + * + * var map = _.rearg(_.map, [1, 0]); + * map(function(n) { + * return n * 3; + * }, [1, 2, 3]); + * // => [3, 6, 9] + */ +var rearg = restParam(function(func, indexes) { + return createWrapper(func, REARG_FLAG, undefined, undefined, undefined, baseFlatten(indexes)); +}); + +module.exports = rearg; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/restParam.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/restParam.js new file mode 100644 index 00000000..3a1c1570 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/restParam.js @@ -0,0 +1,58 @@ +/** Used as the `TypeError` message for "Functions" methods. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * Creates a function that invokes `func` with the `this` binding of the + * created function and arguments from `start` and beyond provided as an array. + * + * **Note:** This method is based on the [rest parameter](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/rest_parameters). + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + * @example + * + * var say = _.restParam(function(what, names) { + * return what + ' ' + _.initial(names).join(', ') + + * (_.size(names) > 1 ? ', & ' : '') + _.last(names); + * }); + * + * say('hello', 'fred', 'barney', 'pebbles'); + * // => 'hello fred, barney, & pebbles' + */ +function restParam(func, start) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + start = nativeMax(start === undefined ? (func.length - 1) : (+start || 0), 0); + return function() { + var args = arguments, + index = -1, + length = nativeMax(args.length - start, 0), + rest = Array(length); + + while (++index < length) { + rest[index] = args[start + index]; + } + switch (start) { + case 0: return func.call(this, rest); + case 1: return func.call(this, args[0], rest); + case 2: return func.call(this, args[0], args[1], rest); + } + var otherArgs = Array(start + 1); + index = -1; + while (++index < start) { + otherArgs[index] = args[index]; + } + otherArgs[start] = rest; + return func.apply(this, otherArgs); + }; +} + +module.exports = restParam; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/spread.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/spread.js new file mode 100644 index 00000000..aad4b714 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/spread.js @@ -0,0 +1,44 @@ +/** Used as the `TypeError` message for "Functions" methods. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** + * Creates a function that invokes `func` with the `this` binding of the created + * function and an array of arguments much like [`Function#apply`](https://es5.github.io/#x15.3.4.3). + * + * **Note:** This method is based on the [spread operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator). + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to spread arguments over. + * @returns {Function} Returns the new function. + * @example + * + * var say = _.spread(function(who, what) { + * return who + ' says ' + what; + * }); + * + * say(['fred', 'hello']); + * // => 'fred says hello' + * + * // with a Promise + * var numbers = Promise.all([ + * Promise.resolve(40), + * Promise.resolve(36) + * ]); + * + * numbers.then(_.spread(function(x, y) { + * return x + y; + * })); + * // => a Promise of 76 + */ +function spread(func) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return function(array) { + return func.apply(this, array); + }; +} + +module.exports = spread; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/throttle.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/throttle.js new file mode 100644 index 00000000..1dd00eab --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/throttle.js @@ -0,0 +1,62 @@ +var debounce = require('./debounce'), + isObject = require('../lang/isObject'); + +/** Used as the `TypeError` message for "Functions" methods. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** + * Creates a throttled function that only invokes `func` at most once per + * every `wait` milliseconds. The throttled function comes with a `cancel` + * method to cancel delayed invocations. Provide an options object to indicate + * that `func` should be invoked on the leading and/or trailing edge of the + * `wait` timeout. Subsequent calls to the throttled function return the + * result of the last `func` call. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is invoked + * on the trailing edge of the timeout only if the the throttled function is + * invoked more than once during the `wait` timeout. + * + * See [David Corbacho's article](http://drupalmotion.com/article/debounce-and-throttle-visual-explanation) + * for details over the differences between `_.throttle` and `_.debounce`. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to throttle. + * @param {number} [wait=0] The number of milliseconds to throttle invocations to. + * @param {Object} [options] The options object. + * @param {boolean} [options.leading=true] Specify invoking on the leading + * edge of the timeout. + * @param {boolean} [options.trailing=true] Specify invoking on the trailing + * edge of the timeout. + * @returns {Function} Returns the new throttled function. + * @example + * + * // avoid excessively updating the position while scrolling + * jQuery(window).on('scroll', _.throttle(updatePosition, 100)); + * + * // invoke `renewToken` when the click event is fired, but not more than once every 5 minutes + * jQuery('.interactive').on('click', _.throttle(renewToken, 300000, { + * 'trailing': false + * })); + * + * // cancel a trailing throttled call + * jQuery(window).on('popstate', throttled.cancel); + */ +function throttle(func, wait, options) { + var leading = true, + trailing = true; + + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + if (options === false) { + leading = false; + } else if (isObject(options)) { + leading = 'leading' in options ? !!options.leading : leading; + trailing = 'trailing' in options ? !!options.trailing : trailing; + } + return debounce(func, wait, { 'leading': leading, 'maxWait': +wait, 'trailing': trailing }); +} + +module.exports = throttle; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/wrap.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/wrap.js new file mode 100644 index 00000000..6a33c5ec --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/function/wrap.js @@ -0,0 +1,33 @@ +var createWrapper = require('../internal/createWrapper'), + identity = require('../utility/identity'); + +/** Used to compose bitmasks for wrapper metadata. */ +var PARTIAL_FLAG = 32; + +/** + * Creates a function that provides `value` to the wrapper function as its + * first argument. Any additional arguments provided to the function are + * appended to those provided to the wrapper function. The wrapper is invoked + * with the `this` binding of the created function. + * + * @static + * @memberOf _ + * @category Function + * @param {*} value The value to wrap. + * @param {Function} wrapper The wrapper function. + * @returns {Function} Returns the new function. + * @example + * + * var p = _.wrap(_.escape, function(func, text) { + * return '<p>' + func(text) + '</p>'; + * }); + * + * p('fred, barney, & pebbles'); + * // => '<p>fred, barney, & pebbles</p>' + */ +function wrap(value, wrapper) { + wrapper = wrapper == null ? identity : wrapper; + return createWrapper(wrapper, PARTIAL_FLAG, undefined, [value], []); +} + +module.exports = wrap; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/index.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/index.js new file mode 100644 index 00000000..be768eef --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/index.js @@ -0,0 +1,12351 @@ +/** + * @license + * lodash 3.10.0 (Custom Build) <https://lodash.com/> + * Build: `lodash modern -d -o ./index.js` + * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/> + * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE> + * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license <https://lodash.com/license> + */ +;(function() { + + /** Used as a safe reference for `undefined` in pre-ES5 environments. */ + var undefined; + + /** Used as the semantic version number. */ + var VERSION = '3.10.0'; + + /** Used to compose bitmasks for wrapper metadata. */ + var BIND_FLAG = 1, + BIND_KEY_FLAG = 2, + CURRY_BOUND_FLAG = 4, + CURRY_FLAG = 8, + CURRY_RIGHT_FLAG = 16, + PARTIAL_FLAG = 32, + PARTIAL_RIGHT_FLAG = 64, + ARY_FLAG = 128, + REARG_FLAG = 256; + + /** Used as default options for `_.trunc`. */ + var DEFAULT_TRUNC_LENGTH = 30, + DEFAULT_TRUNC_OMISSION = '...'; + + /** Used to detect when a function becomes hot. */ + var HOT_COUNT = 150, + HOT_SPAN = 16; + + /** Used as the size to enable large array optimizations. */ + var LARGE_ARRAY_SIZE = 200; + + /** Used to indicate the type of lazy iteratees. */ + var LAZY_FILTER_FLAG = 1, + LAZY_MAP_FLAG = 2; + + /** Used as the `TypeError` message for "Functions" methods. */ + var FUNC_ERROR_TEXT = 'Expected a function'; + + /** Used as the internal argument placeholder. */ + var PLACEHOLDER = '__lodash_placeholder__'; + + /** `Object#toString` result references. */ + var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + mapTag = '[object Map]', + numberTag = '[object Number]', + objectTag = '[object Object]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + weakMapTag = '[object WeakMap]'; + + var arrayBufferTag = '[object ArrayBuffer]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + + /** Used to match empty string literals in compiled template source. */ + var reEmptyStringLeading = /\b__p \+= '';/g, + reEmptyStringMiddle = /\b(__p \+=) '' \+/g, + reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g; + + /** Used to match HTML entities and HTML characters. */ + var reEscapedHtml = /&(?:amp|lt|gt|quot|#39|#96);/g, + reUnescapedHtml = /[&<>"'`]/g, + reHasEscapedHtml = RegExp(reEscapedHtml.source), + reHasUnescapedHtml = RegExp(reUnescapedHtml.source); + + /** Used to match template delimiters. */ + var reEscape = /<%-([\s\S]+?)%>/g, + reEvaluate = /<%([\s\S]+?)%>/g, + reInterpolate = /<%=([\s\S]+?)%>/g; + + /** Used to match property names within property paths. */ + var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\n\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/, + rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\n\\]|\\.)*?)\2)\]/g; + + /** + * Used to match `RegExp` [syntax characters](http://ecma-international.org/ecma-262/6.0/#sec-patterns) + * and those outlined by [`EscapeRegExpPattern`](http://ecma-international.org/ecma-262/6.0/#sec-escaperegexppattern). + */ + var reRegExpChars = /^[:!,]|[\\^$.*+?()[\]{}|\/]|(^[0-9a-fA-Fnrtuvx])|([\n\r\u2028\u2029])/g, + reHasRegExpChars = RegExp(reRegExpChars.source); + + /** Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). */ + var reComboMark = /[\u0300-\u036f\ufe20-\ufe23]/g; + + /** Used to match backslashes in property paths. */ + var reEscapeChar = /\\(\\)?/g; + + /** Used to match [ES template delimiters](http://ecma-international.org/ecma-262/6.0/#sec-template-literal-lexical-components). */ + var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g; + + /** Used to match `RegExp` flags from their coerced string values. */ + var reFlags = /\w*$/; + + /** Used to detect hexadecimal string values. */ + var reHasHexPrefix = /^0[xX]/; + + /** Used to detect host constructors (Safari > 5). */ + var reIsHostCtor = /^\[object .+?Constructor\]$/; + + /** Used to detect unsigned integer values. */ + var reIsUint = /^\d+$/; + + /** Used to match latin-1 supplementary letters (excluding mathematical operators). */ + var reLatin1 = /[\xc0-\xd6\xd8-\xde\xdf-\xf6\xf8-\xff]/g; + + /** Used to ensure capturing order of template delimiters. */ + var reNoMatch = /($^)/; + + /** Used to match unescaped characters in compiled string literals. */ + var reUnescapedString = /['\n\r\u2028\u2029\\]/g; + + /** Used to match words to create compound words. */ + var reWords = (function() { + var upper = '[A-Z\\xc0-\\xd6\\xd8-\\xde]', + lower = '[a-z\\xdf-\\xf6\\xf8-\\xff]+'; + + return RegExp(upper + '+(?=' + upper + lower + ')|' + upper + '?' + lower + '|' + upper + '+|[0-9]+', 'g'); + }()); + + /** Used to assign default `context` object properties. */ + var contextProps = [ + 'Array', 'ArrayBuffer', 'Date', 'Error', 'Float32Array', 'Float64Array', + 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Math', 'Number', + 'Object', 'RegExp', 'Set', 'String', '_', 'clearTimeout', 'isFinite', + 'parseFloat', 'parseInt', 'setTimeout', 'TypeError', 'Uint8Array', + 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap' + ]; + + /** Used to make template sourceURLs easier to identify. */ + var templateCounter = -1; + + /** Used to identify `toStringTag` values of typed arrays. */ + var typedArrayTags = {}; + typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = + typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = + typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = + typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = + typedArrayTags[uint32Tag] = true; + typedArrayTags[argsTag] = typedArrayTags[arrayTag] = + typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = + typedArrayTags[dateTag] = typedArrayTags[errorTag] = + typedArrayTags[funcTag] = typedArrayTags[mapTag] = + typedArrayTags[numberTag] = typedArrayTags[objectTag] = + typedArrayTags[regexpTag] = typedArrayTags[setTag] = + typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false; + + /** Used to identify `toStringTag` values supported by `_.clone`. */ + var cloneableTags = {}; + cloneableTags[argsTag] = cloneableTags[arrayTag] = + cloneableTags[arrayBufferTag] = cloneableTags[boolTag] = + cloneableTags[dateTag] = cloneableTags[float32Tag] = + cloneableTags[float64Tag] = cloneableTags[int8Tag] = + cloneableTags[int16Tag] = cloneableTags[int32Tag] = + cloneableTags[numberTag] = cloneableTags[objectTag] = + cloneableTags[regexpTag] = cloneableTags[stringTag] = + cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = + cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true; + cloneableTags[errorTag] = cloneableTags[funcTag] = + cloneableTags[mapTag] = cloneableTags[setTag] = + cloneableTags[weakMapTag] = false; + + /** Used to map latin-1 supplementary letters to basic latin letters. */ + var deburredLetters = { + '\xc0': 'A', '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A', + '\xe0': 'a', '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a', + '\xc7': 'C', '\xe7': 'c', + '\xd0': 'D', '\xf0': 'd', + '\xc8': 'E', '\xc9': 'E', '\xca': 'E', '\xcb': 'E', + '\xe8': 'e', '\xe9': 'e', '\xea': 'e', '\xeb': 'e', + '\xcC': 'I', '\xcd': 'I', '\xce': 'I', '\xcf': 'I', + '\xeC': 'i', '\xed': 'i', '\xee': 'i', '\xef': 'i', + '\xd1': 'N', '\xf1': 'n', + '\xd2': 'O', '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O', + '\xf2': 'o', '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o', + '\xd9': 'U', '\xda': 'U', '\xdb': 'U', '\xdc': 'U', + '\xf9': 'u', '\xfa': 'u', '\xfb': 'u', '\xfc': 'u', + '\xdd': 'Y', '\xfd': 'y', '\xff': 'y', + '\xc6': 'Ae', '\xe6': 'ae', + '\xde': 'Th', '\xfe': 'th', + '\xdf': 'ss' + }; + + /** Used to map characters to HTML entities. */ + var htmlEscapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''', + '`': '`' + }; + + /** Used to map HTML entities to characters. */ + var htmlUnescapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + ''': "'", + '`': '`' + }; + + /** Used to determine if values are of the language type `Object`. */ + var objectTypes = { + 'function': true, + 'object': true + }; + + /** Used to escape characters for inclusion in compiled regexes. */ + var regexpEscapes = { + '0': 'x30', '1': 'x31', '2': 'x32', '3': 'x33', '4': 'x34', + '5': 'x35', '6': 'x36', '7': 'x37', '8': 'x38', '9': 'x39', + 'A': 'x41', 'B': 'x42', 'C': 'x43', 'D': 'x44', 'E': 'x45', 'F': 'x46', + 'a': 'x61', 'b': 'x62', 'c': 'x63', 'd': 'x64', 'e': 'x65', 'f': 'x66', + 'n': 'x6e', 'r': 'x72', 't': 'x74', 'u': 'x75', 'v': 'x76', 'x': 'x78' + }; + + /** Used to escape characters for inclusion in compiled string literals. */ + var stringEscapes = { + '\\': '\\', + "'": "'", + '\n': 'n', + '\r': 'r', + '\u2028': 'u2028', + '\u2029': 'u2029' + }; + + /** Detect free variable `exports`. */ + var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports; + + /** Detect free variable `module`. */ + var freeModule = objectTypes[typeof module] && module && !module.nodeType && module; + + /** Detect free variable `global` from Node.js. */ + var freeGlobal = freeExports && freeModule && typeof global == 'object' && global && global.Object && global; + + /** Detect free variable `self`. */ + var freeSelf = objectTypes[typeof self] && self && self.Object && self; + + /** Detect free variable `window`. */ + var freeWindow = objectTypes[typeof window] && window && window.Object && window; + + /** Detect the popular CommonJS extension `module.exports`. */ + var moduleExports = freeModule && freeModule.exports === freeExports && freeExports; + + /** + * Used as a reference to the global object. + * + * The `this` value is used if it's the global object to avoid Greasemonkey's + * restricted `window` object, otherwise the `window` object is used. + */ + var root = freeGlobal || ((freeWindow !== (this && this.window)) && freeWindow) || freeSelf || this; + + /*--------------------------------------------------------------------------*/ + + /** + * The base implementation of `compareAscending` which compares values and + * sorts them in ascending order without guaranteeing a stable sort. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {number} Returns the sort order indicator for `value`. + */ + function baseCompareAscending(value, other) { + if (value !== other) { + var valIsNull = value === null, + valIsUndef = value === undefined, + valIsReflexive = value === value; + + var othIsNull = other === null, + othIsUndef = other === undefined, + othIsReflexive = other === other; + + if ((value > other && !othIsNull) || !valIsReflexive || + (valIsNull && !othIsUndef && othIsReflexive) || + (valIsUndef && othIsReflexive)) { + return 1; + } + if ((value < other && !valIsNull) || !othIsReflexive || + (othIsNull && !valIsUndef && valIsReflexive) || + (othIsUndef && valIsReflexive)) { + return -1; + } + } + return 0; + } + + /** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for callback shorthands and `this` binding. + * + * @private + * @param {Array} array The array to search. + * @param {Function} predicate The function invoked per iteration. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseFindIndex(array, predicate, fromRight) { + var length = array.length, + index = fromRight ? length : -1; + + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; + } + + /** + * The base implementation of `_.indexOf` without support for binary searches. + * + * @private + * @param {Array} array The array to search. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseIndexOf(array, value, fromIndex) { + if (value !== value) { + return indexOfNaN(array, fromIndex); + } + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (array[index] === value) { + return index; + } + } + return -1; + } + + /** + * The base implementation of `_.isFunction` without support for environments + * with incorrect `typeof` results. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + */ + function baseIsFunction(value) { + // Avoid a Chakra JIT bug in compatibility modes of IE 11. + // See https://github.com/jashkenas/underscore/issues/1621 for more details. + return typeof value == 'function' || false; + } + + /** + * Converts `value` to a string if it's not one. An empty string is returned + * for `null` or `undefined` values. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ + function baseToString(value) { + return value == null ? '' : (value + ''); + } + + /** + * Used by `_.trim` and `_.trimLeft` to get the index of the first character + * of `string` that is not found in `chars`. + * + * @private + * @param {string} string The string to inspect. + * @param {string} chars The characters to find. + * @returns {number} Returns the index of the first character not found in `chars`. + */ + function charsLeftIndex(string, chars) { + var index = -1, + length = string.length; + + while (++index < length && chars.indexOf(string.charAt(index)) > -1) {} + return index; + } + + /** + * Used by `_.trim` and `_.trimRight` to get the index of the last character + * of `string` that is not found in `chars`. + * + * @private + * @param {string} string The string to inspect. + * @param {string} chars The characters to find. + * @returns {number} Returns the index of the last character not found in `chars`. + */ + function charsRightIndex(string, chars) { + var index = string.length; + + while (index-- && chars.indexOf(string.charAt(index)) > -1) {} + return index; + } + + /** + * Used by `_.sortBy` to compare transformed elements of a collection and stable + * sort them in ascending order. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @returns {number} Returns the sort order indicator for `object`. + */ + function compareAscending(object, other) { + return baseCompareAscending(object.criteria, other.criteria) || (object.index - other.index); + } + + /** + * Used by `_.sortByOrder` to compare multiple properties of a value to another + * and stable sort them. + * + * If `orders` is unspecified, all valuess are sorted in ascending order. Otherwise, + * a value is sorted in ascending order if its corresponding order is "asc", and + * descending if "desc". + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {boolean[]} orders The order to sort by for each property. + * @returns {number} Returns the sort order indicator for `object`. + */ + function compareMultiple(object, other, orders) { + var index = -1, + objCriteria = object.criteria, + othCriteria = other.criteria, + length = objCriteria.length, + ordersLength = orders.length; + + while (++index < length) { + var result = baseCompareAscending(objCriteria[index], othCriteria[index]); + if (result) { + if (index >= ordersLength) { + return result; + } + var order = orders[index]; + return result * ((order === 'asc' || order === true) ? 1 : -1); + } + } + // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications + // that causes it, under certain circumstances, to provide the same value for + // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 + // for more details. + // + // This also ensures a stable sort in V8 and other engines. + // See https://code.google.com/p/v8/issues/detail?id=90 for more details. + return object.index - other.index; + } + + /** + * Used by `_.deburr` to convert latin-1 supplementary letters to basic latin letters. + * + * @private + * @param {string} letter The matched letter to deburr. + * @returns {string} Returns the deburred letter. + */ + function deburrLetter(letter) { + return deburredLetters[letter]; + } + + /** + * Used by `_.escape` to convert characters to HTML entities. + * + * @private + * @param {string} chr The matched character to escape. + * @returns {string} Returns the escaped character. + */ + function escapeHtmlChar(chr) { + return htmlEscapes[chr]; + } + + /** + * Used by `_.escapeRegExp` to escape characters for inclusion in compiled regexes. + * + * @private + * @param {string} chr The matched character to escape. + * @param {string} leadingChar The capture group for a leading character. + * @param {string} whitespaceChar The capture group for a whitespace character. + * @returns {string} Returns the escaped character. + */ + function escapeRegExpChar(chr, leadingChar, whitespaceChar) { + if (leadingChar) { + chr = regexpEscapes[chr]; + } else if (whitespaceChar) { + chr = stringEscapes[chr]; + } + return '\\' + chr; + } + + /** + * Used by `_.template` to escape characters for inclusion in compiled string literals. + * + * @private + * @param {string} chr The matched character to escape. + * @returns {string} Returns the escaped character. + */ + function escapeStringChar(chr) { + return '\\' + stringEscapes[chr]; + } + + /** + * Gets the index at which the first occurrence of `NaN` is found in `array`. + * + * @private + * @param {Array} array The array to search. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched `NaN`, else `-1`. + */ + function indexOfNaN(array, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 0 : -1); + + while ((fromRight ? index-- : ++index < length)) { + var other = array[index]; + if (other !== other) { + return index; + } + } + return -1; + } + + /** + * Checks if `value` is object-like. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + */ + function isObjectLike(value) { + return !!value && typeof value == 'object'; + } + + /** + * Used by `trimmedLeftIndex` and `trimmedRightIndex` to determine if a + * character code is whitespace. + * + * @private + * @param {number} charCode The character code to inspect. + * @returns {boolean} Returns `true` if `charCode` is whitespace, else `false`. + */ + function isSpace(charCode) { + return ((charCode <= 160 && (charCode >= 9 && charCode <= 13) || charCode == 32 || charCode == 160) || charCode == 5760 || charCode == 6158 || + (charCode >= 8192 && (charCode <= 8202 || charCode == 8232 || charCode == 8233 || charCode == 8239 || charCode == 8287 || charCode == 12288 || charCode == 65279))); + } + + /** + * Replaces all `placeholder` elements in `array` with an internal placeholder + * and returns an array of their indexes. + * + * @private + * @param {Array} array The array to modify. + * @param {*} placeholder The placeholder to replace. + * @returns {Array} Returns the new array of placeholder indexes. + */ + function replaceHolders(array, placeholder) { + var index = -1, + length = array.length, + resIndex = -1, + result = []; + + while (++index < length) { + if (array[index] === placeholder) { + array[index] = PLACEHOLDER; + result[++resIndex] = index; + } + } + return result; + } + + /** + * An implementation of `_.uniq` optimized for sorted arrays without support + * for callback shorthands and `this` binding. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The function invoked per iteration. + * @returns {Array} Returns the new duplicate-value-free array. + */ + function sortedUniq(array, iteratee) { + var seen, + index = -1, + length = array.length, + resIndex = -1, + result = []; + + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value, index, array) : value; + + if (!index || seen !== computed) { + seen = computed; + result[++resIndex] = value; + } + } + return result; + } + + /** + * Used by `_.trim` and `_.trimLeft` to get the index of the first non-whitespace + * character of `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the index of the first non-whitespace character. + */ + function trimmedLeftIndex(string) { + var index = -1, + length = string.length; + + while (++index < length && isSpace(string.charCodeAt(index))) {} + return index; + } + + /** + * Used by `_.trim` and `_.trimRight` to get the index of the last non-whitespace + * character of `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the index of the last non-whitespace character. + */ + function trimmedRightIndex(string) { + var index = string.length; + + while (index-- && isSpace(string.charCodeAt(index))) {} + return index; + } + + /** + * Used by `_.unescape` to convert HTML entities to characters. + * + * @private + * @param {string} chr The matched character to unescape. + * @returns {string} Returns the unescaped character. + */ + function unescapeHtmlChar(chr) { + return htmlUnescapes[chr]; + } + + /*--------------------------------------------------------------------------*/ + + /** + * Create a new pristine `lodash` function using the given `context` object. + * + * @static + * @memberOf _ + * @category Utility + * @param {Object} [context=root] The context object. + * @returns {Function} Returns a new `lodash` function. + * @example + * + * _.mixin({ 'foo': _.constant('foo') }); + * + * var lodash = _.runInContext(); + * lodash.mixin({ 'bar': lodash.constant('bar') }); + * + * _.isFunction(_.foo); + * // => true + * _.isFunction(_.bar); + * // => false + * + * lodash.isFunction(lodash.foo); + * // => false + * lodash.isFunction(lodash.bar); + * // => true + * + * // using `context` to mock `Date#getTime` use in `_.now` + * var mock = _.runInContext({ + * 'Date': function() { + * return { 'getTime': getTimeMock }; + * } + * }); + * + * // or creating a suped-up `defer` in Node.js + * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer; + */ + function runInContext(context) { + // Avoid issues with some ES3 environments that attempt to use values, named + // after built-in constructors like `Object`, for the creation of literals. + // ES5 clears this up by stating that literals must use built-in constructors. + // See https://es5.github.io/#x11.1.5 for more details. + context = context ? _.defaults(root.Object(), context, _.pick(root, contextProps)) : root; + + /** Native constructor references. */ + var Array = context.Array, + Date = context.Date, + Error = context.Error, + Function = context.Function, + Math = context.Math, + Number = context.Number, + Object = context.Object, + RegExp = context.RegExp, + String = context.String, + TypeError = context.TypeError; + + /** Used for native method references. */ + var arrayProto = Array.prototype, + objectProto = Object.prototype, + stringProto = String.prototype; + + /** Used to resolve the decompiled source of functions. */ + var fnToString = Function.prototype.toString; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** Used to generate unique IDs. */ + var idCounter = 0; + + /** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ + var objToString = objectProto.toString; + + /** Used to restore the original `_` reference in `_.noConflict`. */ + var oldDash = root._; + + /** Used to detect if a method is native. */ + var reIsNative = RegExp('^' + + fnToString.call(hasOwnProperty).replace(/[\\^$.*+?()[\]{}|]/g, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' + ); + + /** Native method references. */ + var ArrayBuffer = context.ArrayBuffer, + clearTimeout = context.clearTimeout, + parseFloat = context.parseFloat, + pow = Math.pow, + propertyIsEnumerable = objectProto.propertyIsEnumerable, + Set = getNative(context, 'Set'), + setTimeout = context.setTimeout, + splice = arrayProto.splice, + Uint8Array = context.Uint8Array, + WeakMap = getNative(context, 'WeakMap'); + + /* Native method references for those with the same name as other `lodash` methods. */ + var nativeCeil = Math.ceil, + nativeCreate = getNative(Object, 'create'), + nativeFloor = Math.floor, + nativeIsArray = getNative(Array, 'isArray'), + nativeIsFinite = context.isFinite, + nativeKeys = getNative(Object, 'keys'), + nativeMax = Math.max, + nativeMin = Math.min, + nativeNow = getNative(Date, 'now'), + nativeParseInt = context.parseInt, + nativeRandom = Math.random; + + /** Used as references for `-Infinity` and `Infinity`. */ + var NEGATIVE_INFINITY = Number.NEGATIVE_INFINITY, + POSITIVE_INFINITY = Number.POSITIVE_INFINITY; + + /** Used as references for the maximum length and index of an array. */ + var MAX_ARRAY_LENGTH = 4294967295, + MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1, + HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1; + + /** + * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer) + * of an array-like value. + */ + var MAX_SAFE_INTEGER = 9007199254740991; + + /** Used to store function metadata. */ + var metaMap = WeakMap && new WeakMap; + + /** Used to lookup unminified function names. */ + var realNames = {}; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a `lodash` object which wraps `value` to enable implicit chaining. + * Methods that operate on and return arrays, collections, and functions can + * be chained together. Methods that retrieve a single value or may return a + * primitive value will automatically end the chain returning the unwrapped + * value. Explicit chaining may be enabled using `_.chain`. The execution of + * chained methods is lazy, that is, execution is deferred until `_#value` + * is implicitly or explicitly called. + * + * Lazy evaluation allows several methods to support shortcut fusion. Shortcut + * fusion is an optimization strategy which merge iteratee calls; this can help + * to avoid the creation of intermediate data structures and greatly reduce the + * number of iteratee executions. + * + * Chaining is supported in custom builds as long as the `_#value` method is + * directly or indirectly included in the build. + * + * In addition to lodash methods, wrappers have `Array` and `String` methods. + * + * The wrapper `Array` methods are: + * `concat`, `join`, `pop`, `push`, `reverse`, `shift`, `slice`, `sort`, + * `splice`, and `unshift` + * + * The wrapper `String` methods are: + * `replace` and `split` + * + * The wrapper methods that support shortcut fusion are: + * `compact`, `drop`, `dropRight`, `dropRightWhile`, `dropWhile`, `filter`, + * `first`, `initial`, `last`, `map`, `pluck`, `reject`, `rest`, `reverse`, + * `slice`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, `toArray`, + * and `where` + * + * The chainable wrapper methods are: + * `after`, `ary`, `assign`, `at`, `before`, `bind`, `bindAll`, `bindKey`, + * `callback`, `chain`, `chunk`, `commit`, `compact`, `concat`, `constant`, + * `countBy`, `create`, `curry`, `debounce`, `defaults`, `defaultsDeep`, + * `defer`, `delay`, `difference`, `drop`, `dropRight`, `dropRightWhile`, + * `dropWhile`, `fill`, `filter`, `flatten`, `flattenDeep`, `flow`, `flowRight`, + * `forEach`, `forEachRight`, `forIn`, `forInRight`, `forOwn`, `forOwnRight`, + * `functions`, `groupBy`, `indexBy`, `initial`, `intersection`, `invert`, + * `invoke`, `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, + * `matchesProperty`, `memoize`, `merge`, `method`, `methodOf`, `mixin`, + * `modArgs`, `negate`, `omit`, `once`, `pairs`, `partial`, `partialRight`, + * `partition`, `pick`, `plant`, `pluck`, `property`, `propertyOf`, `pull`, + * `pullAt`, `push`, `range`, `rearg`, `reject`, `remove`, `rest`, `restParam`, + * `reverse`, `set`, `shuffle`, `slice`, `sort`, `sortBy`, `sortByAll`, + * `sortByOrder`, `splice`, `spread`, `take`, `takeRight`, `takeRightWhile`, + * `takeWhile`, `tap`, `throttle`, `thru`, `times`, `toArray`, `toPlainObject`, + * `transform`, `union`, `uniq`, `unshift`, `unzip`, `unzipWith`, `values`, + * `valuesIn`, `where`, `without`, `wrap`, `xor`, `zip`, `zipObject`, `zipWith` + * + * The wrapper methods that are **not** chainable by default are: + * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clone`, `cloneDeep`, + * `deburr`, `endsWith`, `escape`, `escapeRegExp`, `every`, `find`, `findIndex`, + * `findKey`, `findLast`, `findLastIndex`, `findLastKey`, `findWhere`, `first`, + * `floor`, `get`, `gt`, `gte`, `has`, `identity`, `includes`, `indexOf`, + * `inRange`, `isArguments`, `isArray`, `isBoolean`, `isDate`, `isElement`, + * `isEmpty`, `isEqual`, `isError`, `isFinite` `isFunction`, `isMatch`, + * `isNative`, `isNaN`, `isNull`, `isNumber`, `isObject`, `isPlainObject`, + * `isRegExp`, `isString`, `isUndefined`, `isTypedArray`, `join`, `kebabCase`, + * `last`, `lastIndexOf`, `lt`, `lte`, `max`, `min`, `noConflict`, `noop`, + * `now`, `pad`, `padLeft`, `padRight`, `parseInt`, `pop`, `random`, `reduce`, + * `reduceRight`, `repeat`, `result`, `round`, `runInContext`, `shift`, `size`, + * `snakeCase`, `some`, `sortedIndex`, `sortedLastIndex`, `startCase`, + * `startsWith`, `sum`, `template`, `trim`, `trimLeft`, `trimRight`, `trunc`, + * `unescape`, `uniqueId`, `value`, and `words` + * + * The wrapper method `sample` will return a wrapped value when `n` is provided, + * otherwise an unwrapped value is returned. + * + * @name _ + * @constructor + * @category Chain + * @param {*} value The value to wrap in a `lodash` instance. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var wrapped = _([1, 2, 3]); + * + * // returns an unwrapped value + * wrapped.reduce(function(total, n) { + * return total + n; + * }); + * // => 6 + * + * // returns a wrapped value + * var squares = wrapped.map(function(n) { + * return n * n; + * }); + * + * _.isArray(squares); + * // => false + * + * _.isArray(squares.value()); + * // => true + */ + function lodash(value) { + if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) { + if (value instanceof LodashWrapper) { + return value; + } + if (hasOwnProperty.call(value, '__chain__') && hasOwnProperty.call(value, '__wrapped__')) { + return wrapperClone(value); + } + } + return new LodashWrapper(value); + } + + /** + * The function whose prototype all chaining wrappers inherit from. + * + * @private + */ + function baseLodash() { + // No operation performed. + } + + /** + * The base constructor for creating `lodash` wrapper objects. + * + * @private + * @param {*} value The value to wrap. + * @param {boolean} [chainAll] Enable chaining for all wrapper methods. + * @param {Array} [actions=[]] Actions to peform to resolve the unwrapped value. + */ + function LodashWrapper(value, chainAll, actions) { + this.__wrapped__ = value; + this.__actions__ = actions || []; + this.__chain__ = !!chainAll; + } + + /** + * An object environment feature flags. + * + * @static + * @memberOf _ + * @type Object + */ + var support = lodash.support = {}; + + /** + * By default, the template delimiters used by lodash are like those in + * embedded Ruby (ERB). Change the following template settings to use + * alternative delimiters. + * + * @static + * @memberOf _ + * @type Object + */ + lodash.templateSettings = { + + /** + * Used to detect `data` property values to be HTML-escaped. + * + * @memberOf _.templateSettings + * @type RegExp + */ + 'escape': reEscape, + + /** + * Used to detect code to be evaluated. + * + * @memberOf _.templateSettings + * @type RegExp + */ + 'evaluate': reEvaluate, + + /** + * Used to detect `data` property values to inject. + * + * @memberOf _.templateSettings + * @type RegExp + */ + 'interpolate': reInterpolate, + + /** + * Used to reference the data object in the template text. + * + * @memberOf _.templateSettings + * @type string + */ + 'variable': '', + + /** + * Used to import variables into the compiled template. + * + * @memberOf _.templateSettings + * @type Object + */ + 'imports': { + + /** + * A reference to the `lodash` function. + * + * @memberOf _.templateSettings.imports + * @type Function + */ + '_': lodash + } + }; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation. + * + * @private + * @param {*} value The value to wrap. + */ + function LazyWrapper(value) { + this.__wrapped__ = value; + this.__actions__ = []; + this.__dir__ = 1; + this.__filtered__ = false; + this.__iteratees__ = []; + this.__takeCount__ = POSITIVE_INFINITY; + this.__views__ = []; + } + + /** + * Creates a clone of the lazy wrapper object. + * + * @private + * @name clone + * @memberOf LazyWrapper + * @returns {Object} Returns the cloned `LazyWrapper` object. + */ + function lazyClone() { + var result = new LazyWrapper(this.__wrapped__); + result.__actions__ = arrayCopy(this.__actions__); + result.__dir__ = this.__dir__; + result.__filtered__ = this.__filtered__; + result.__iteratees__ = arrayCopy(this.__iteratees__); + result.__takeCount__ = this.__takeCount__; + result.__views__ = arrayCopy(this.__views__); + return result; + } + + /** + * Reverses the direction of lazy iteration. + * + * @private + * @name reverse + * @memberOf LazyWrapper + * @returns {Object} Returns the new reversed `LazyWrapper` object. + */ + function lazyReverse() { + if (this.__filtered__) { + var result = new LazyWrapper(this); + result.__dir__ = -1; + result.__filtered__ = true; + } else { + result = this.clone(); + result.__dir__ *= -1; + } + return result; + } + + /** + * Extracts the unwrapped value from its lazy wrapper. + * + * @private + * @name value + * @memberOf LazyWrapper + * @returns {*} Returns the unwrapped value. + */ + function lazyValue() { + var array = this.__wrapped__.value(), + dir = this.__dir__, + isArr = isArray(array), + isRight = dir < 0, + arrLength = isArr ? array.length : 0, + view = getView(0, arrLength, this.__views__), + start = view.start, + end = view.end, + length = end - start, + index = isRight ? end : (start - 1), + iteratees = this.__iteratees__, + iterLength = iteratees.length, + resIndex = 0, + takeCount = nativeMin(length, this.__takeCount__); + + if (!isArr || arrLength < LARGE_ARRAY_SIZE || (arrLength == length && takeCount == length)) { + return baseWrapperValue((isRight && isArr) ? array.reverse() : array, this.__actions__); + } + var result = []; + + outer: + while (length-- && resIndex < takeCount) { + index += dir; + + var iterIndex = -1, + value = array[index]; + + while (++iterIndex < iterLength) { + var data = iteratees[iterIndex], + iteratee = data.iteratee, + type = data.type, + computed = iteratee(value); + + if (type == LAZY_MAP_FLAG) { + value = computed; + } else if (!computed) { + if (type == LAZY_FILTER_FLAG) { + continue outer; + } else { + break outer; + } + } + } + result[resIndex++] = value; + } + return result; + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates a cache object to store key/value pairs. + * + * @private + * @static + * @name Cache + * @memberOf _.memoize + */ + function MapCache() { + this.__data__ = {}; + } + + /** + * Removes `key` and its value from the cache. + * + * @private + * @name delete + * @memberOf _.memoize.Cache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed successfully, else `false`. + */ + function mapDelete(key) { + return this.has(key) && delete this.__data__[key]; + } + + /** + * Gets the cached value for `key`. + * + * @private + * @name get + * @memberOf _.memoize.Cache + * @param {string} key The key of the value to get. + * @returns {*} Returns the cached value. + */ + function mapGet(key) { + return key == '__proto__' ? undefined : this.__data__[key]; + } + + /** + * Checks if a cached value for `key` exists. + * + * @private + * @name has + * @memberOf _.memoize.Cache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function mapHas(key) { + return key != '__proto__' && hasOwnProperty.call(this.__data__, key); + } + + /** + * Sets `value` to `key` of the cache. + * + * @private + * @name set + * @memberOf _.memoize.Cache + * @param {string} key The key of the value to cache. + * @param {*} value The value to cache. + * @returns {Object} Returns the cache object. + */ + function mapSet(key, value) { + if (key != '__proto__') { + this.__data__[key] = value; + } + return this; + } + + /*------------------------------------------------------------------------*/ + + /** + * + * Creates a cache object to store unique values. + * + * @private + * @param {Array} [values] The values to cache. + */ + function SetCache(values) { + var length = values ? values.length : 0; + + this.data = { 'hash': nativeCreate(null), 'set': new Set }; + while (length--) { + this.push(values[length]); + } + } + + /** + * Checks if `value` is in `cache` mimicking the return signature of + * `_.indexOf` by returning `0` if the value is found, else `-1`. + * + * @private + * @param {Object} cache The cache to search. + * @param {*} value The value to search for. + * @returns {number} Returns `0` if `value` is found, else `-1`. + */ + function cacheIndexOf(cache, value) { + var data = cache.data, + result = (typeof value == 'string' || isObject(value)) ? data.set.has(value) : data.hash[value]; + + return result ? 0 : -1; + } + + /** + * Adds `value` to the cache. + * + * @private + * @name push + * @memberOf SetCache + * @param {*} value The value to cache. + */ + function cachePush(value) { + var data = this.data; + if (typeof value == 'string' || isObject(value)) { + data.set.add(value); + } else { + data.hash[value] = true; + } + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates a new array joining `array` with `other`. + * + * @private + * @param {Array} array The array to join. + * @param {Array} other The other array to join. + * @returns {Array} Returns the new concatenated array. + */ + function arrayConcat(array, other) { + var index = -1, + length = array.length, + othIndex = -1, + othLength = other.length, + result = Array(length + othLength); + + while (++index < length) { + result[index] = array[index]; + } + while (++othIndex < othLength) { + result[index++] = other[othIndex]; + } + return result; + } + + /** + * Copies the values of `source` to `array`. + * + * @private + * @param {Array} source The array to copy values from. + * @param {Array} [array=[]] The array to copy values to. + * @returns {Array} Returns `array`. + */ + function arrayCopy(source, array) { + var index = -1, + length = source.length; + + array || (array = Array(length)); + while (++index < length) { + array[index] = source[index]; + } + return array; + } + + /** + * A specialized version of `_.forEach` for arrays without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ + function arrayEach(array, iteratee) { + var index = -1, + length = array.length; + + while (++index < length) { + if (iteratee(array[index], index, array) === false) { + break; + } + } + return array; + } + + /** + * A specialized version of `_.forEachRight` for arrays without support for + * callback shorthands and `this` binding. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ + function arrayEachRight(array, iteratee) { + var length = array.length; + + while (length--) { + if (iteratee(array[length], length, array) === false) { + break; + } + } + return array; + } + + /** + * A specialized version of `_.every` for arrays without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false`. + */ + function arrayEvery(array, predicate) { + var index = -1, + length = array.length; + + while (++index < length) { + if (!predicate(array[index], index, array)) { + return false; + } + } + return true; + } + + /** + * A specialized version of `baseExtremum` for arrays which invokes `iteratee` + * with one argument: (value). + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} comparator The function used to compare values. + * @param {*} exValue The initial extremum value. + * @returns {*} Returns the extremum value. + */ + function arrayExtremum(array, iteratee, comparator, exValue) { + var index = -1, + length = array.length, + computed = exValue, + result = computed; + + while (++index < length) { + var value = array[index], + current = +iteratee(value); + + if (comparator(current, computed)) { + computed = current; + result = value; + } + } + return result; + } + + /** + * A specialized version of `_.filter` for arrays without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ + function arrayFilter(array, predicate) { + var index = -1, + length = array.length, + resIndex = -1, + result = []; + + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[++resIndex] = value; + } + } + return result; + } + + /** + * A specialized version of `_.map` for arrays without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ + function arrayMap(array, iteratee) { + var index = -1, + length = array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; + } + + /** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ + function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; + } + return array; + } + + /** + * A specialized version of `_.reduce` for arrays without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initFromArray] Specify using the first element of `array` + * as the initial value. + * @returns {*} Returns the accumulated value. + */ + function arrayReduce(array, iteratee, accumulator, initFromArray) { + var index = -1, + length = array.length; + + if (initFromArray && length) { + accumulator = array[++index]; + } + while (++index < length) { + accumulator = iteratee(accumulator, array[index], index, array); + } + return accumulator; + } + + /** + * A specialized version of `_.reduceRight` for arrays without support for + * callback shorthands and `this` binding. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initFromArray] Specify using the last element of `array` + * as the initial value. + * @returns {*} Returns the accumulated value. + */ + function arrayReduceRight(array, iteratee, accumulator, initFromArray) { + var length = array.length; + if (initFromArray && length) { + accumulator = array[--length]; + } + while (length--) { + accumulator = iteratee(accumulator, array[length], length, array); + } + return accumulator; + } + + /** + * A specialized version of `_.some` for arrays without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ + function arraySome(array, predicate) { + var index = -1, + length = array.length; + + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; + } + + /** + * A specialized version of `_.sum` for arrays without support for callback + * shorthands and `this` binding.. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {number} Returns the sum. + */ + function arraySum(array, iteratee) { + var length = array.length, + result = 0; + + while (length--) { + result += +iteratee(array[length]) || 0; + } + return result; + } + + /** + * Used by `_.defaults` to customize its `_.assign` use. + * + * @private + * @param {*} objectValue The destination object property value. + * @param {*} sourceValue The source object property value. + * @returns {*} Returns the value to assign to the destination object. + */ + function assignDefaults(objectValue, sourceValue) { + return objectValue === undefined ? sourceValue : objectValue; + } + + /** + * Used by `_.template` to customize its `_.assign` use. + * + * **Note:** This function is like `assignDefaults` except that it ignores + * inherited property values when checking if a property is `undefined`. + * + * @private + * @param {*} objectValue The destination object property value. + * @param {*} sourceValue The source object property value. + * @param {string} key The key associated with the object and source values. + * @param {Object} object The destination object. + * @returns {*} Returns the value to assign to the destination object. + */ + function assignOwnDefaults(objectValue, sourceValue, key, object) { + return (objectValue === undefined || !hasOwnProperty.call(object, key)) + ? sourceValue + : objectValue; + } + + /** + * A specialized version of `_.assign` for customizing assigned values without + * support for argument juggling, multiple sources, and `this` binding `customizer` + * functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {Function} customizer The function to customize assigned values. + * @returns {Object} Returns `object`. + */ + function assignWith(object, source, customizer) { + var index = -1, + props = keys(source), + length = props.length; + + while (++index < length) { + var key = props[index], + value = object[key], + result = customizer(value, source[key], key, object, source); + + if ((result === result ? (result !== value) : (value === value)) || + (value === undefined && !(key in object))) { + object[key] = result; + } + } + return object; + } + + /** + * The base implementation of `_.assign` without support for argument juggling, + * multiple sources, and `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ + function baseAssign(object, source) { + return source == null + ? object + : baseCopy(source, keys(source), object); + } + + /** + * The base implementation of `_.at` without support for string collections + * and individual key arguments. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {number[]|string[]} props The property names or indexes of elements to pick. + * @returns {Array} Returns the new array of picked elements. + */ + function baseAt(collection, props) { + var index = -1, + isNil = collection == null, + isArr = !isNil && isArrayLike(collection), + length = isArr ? collection.length : 0, + propsLength = props.length, + result = Array(propsLength); + + while(++index < propsLength) { + var key = props[index]; + if (isArr) { + result[index] = isIndex(key, length) ? collection[key] : undefined; + } else { + result[index] = isNil ? undefined : collection[key]; + } + } + return result; + } + + /** + * Copies properties of `source` to `object`. + * + * @private + * @param {Object} source The object to copy properties from. + * @param {Array} props The property names to copy. + * @param {Object} [object={}] The object to copy properties to. + * @returns {Object} Returns `object`. + */ + function baseCopy(source, props, object) { + object || (object = {}); + + var index = -1, + length = props.length; + + while (++index < length) { + var key = props[index]; + object[key] = source[key]; + } + return object; + } + + /** + * The base implementation of `_.callback` which supports specifying the + * number of arguments to provide to `func`. + * + * @private + * @param {*} [func=_.identity] The value to convert to a callback. + * @param {*} [thisArg] The `this` binding of `func`. + * @param {number} [argCount] The number of arguments to provide to `func`. + * @returns {Function} Returns the callback. + */ + function baseCallback(func, thisArg, argCount) { + var type = typeof func; + if (type == 'function') { + return thisArg === undefined + ? func + : bindCallback(func, thisArg, argCount); + } + if (func == null) { + return identity; + } + if (type == 'object') { + return baseMatches(func); + } + return thisArg === undefined + ? property(func) + : baseMatchesProperty(func, thisArg); + } + + /** + * The base implementation of `_.clone` without support for argument juggling + * and `this` binding `customizer` functions. + * + * @private + * @param {*} value The value to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @param {Function} [customizer] The function to customize cloning values. + * @param {string} [key] The key of `value`. + * @param {Object} [object] The object `value` belongs to. + * @param {Array} [stackA=[]] Tracks traversed source objects. + * @param {Array} [stackB=[]] Associates clones with source counterparts. + * @returns {*} Returns the cloned value. + */ + function baseClone(value, isDeep, customizer, key, object, stackA, stackB) { + var result; + if (customizer) { + result = object ? customizer(value, key, object) : customizer(value); + } + if (result !== undefined) { + return result; + } + if (!isObject(value)) { + return value; + } + var isArr = isArray(value); + if (isArr) { + result = initCloneArray(value); + if (!isDeep) { + return arrayCopy(value, result); + } + } else { + var tag = objToString.call(value), + isFunc = tag == funcTag; + + if (tag == objectTag || tag == argsTag || (isFunc && !object)) { + result = initCloneObject(isFunc ? {} : value); + if (!isDeep) { + return baseAssign(result, value); + } + } else { + return cloneableTags[tag] + ? initCloneByTag(value, tag, isDeep) + : (object ? value : {}); + } + } + // Check for circular references and return its corresponding clone. + stackA || (stackA = []); + stackB || (stackB = []); + + var length = stackA.length; + while (length--) { + if (stackA[length] == value) { + return stackB[length]; + } + } + // Add the source value to the stack of traversed objects and associate it with its clone. + stackA.push(value); + stackB.push(result); + + // Recursively populate clone (susceptible to call stack limits). + (isArr ? arrayEach : baseForOwn)(value, function(subValue, key) { + result[key] = baseClone(subValue, isDeep, customizer, key, value, stackA, stackB); + }); + return result; + } + + /** + * The base implementation of `_.create` without support for assigning + * properties to the created object. + * + * @private + * @param {Object} prototype The object to inherit from. + * @returns {Object} Returns the new object. + */ + var baseCreate = (function() { + function object() {} + return function(prototype) { + if (isObject(prototype)) { + object.prototype = prototype; + var result = new object; + object.prototype = undefined; + } + return result || {}; + }; + }()); + + /** + * The base implementation of `_.delay` and `_.defer` which accepts an index + * of where to slice the arguments to provide to `func`. + * + * @private + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @param {Object} args The arguments provide to `func`. + * @returns {number} Returns the timer id. + */ + function baseDelay(func, wait, args) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return setTimeout(function() { func.apply(undefined, args); }, wait); + } + + /** + * The base implementation of `_.difference` which accepts a single array + * of values to exclude. + * + * @private + * @param {Array} array The array to inspect. + * @param {Array} values The values to exclude. + * @returns {Array} Returns the new array of filtered values. + */ + function baseDifference(array, values) { + var length = array ? array.length : 0, + result = []; + + if (!length) { + return result; + } + var index = -1, + indexOf = getIndexOf(), + isCommon = indexOf == baseIndexOf, + cache = (isCommon && values.length >= LARGE_ARRAY_SIZE) ? createCache(values) : null, + valuesLength = values.length; + + if (cache) { + indexOf = cacheIndexOf; + isCommon = false; + values = cache; + } + outer: + while (++index < length) { + var value = array[index]; + + if (isCommon && value === value) { + var valuesIndex = valuesLength; + while (valuesIndex--) { + if (values[valuesIndex] === value) { + continue outer; + } + } + result.push(value); + } + else if (indexOf(values, value, 0) < 0) { + result.push(value); + } + } + return result; + } + + /** + * The base implementation of `_.forEach` without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object|string} Returns `collection`. + */ + var baseEach = createBaseEach(baseForOwn); + + /** + * The base implementation of `_.forEachRight` without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object|string} Returns `collection`. + */ + var baseEachRight = createBaseEach(baseForOwnRight, true); + + /** + * The base implementation of `_.every` without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false` + */ + function baseEvery(collection, predicate) { + var result = true; + baseEach(collection, function(value, index, collection) { + result = !!predicate(value, index, collection); + return result; + }); + return result; + } + + /** + * Gets the extremum value of `collection` invoking `iteratee` for each value + * in `collection` to generate the criterion by which the value is ranked. + * The `iteratee` is invoked with three arguments: (value, index|key, collection). + * + * @private + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} comparator The function used to compare values. + * @param {*} exValue The initial extremum value. + * @returns {*} Returns the extremum value. + */ + function baseExtremum(collection, iteratee, comparator, exValue) { + var computed = exValue, + result = computed; + + baseEach(collection, function(value, index, collection) { + var current = +iteratee(value, index, collection); + if (comparator(current, computed) || (current === exValue && current === result)) { + computed = current; + result = value; + } + }); + return result; + } + + /** + * The base implementation of `_.fill` without an iteratee call guard. + * + * @private + * @param {Array} array The array to fill. + * @param {*} value The value to fill `array` with. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns `array`. + */ + function baseFill(array, value, start, end) { + var length = array.length; + + start = start == null ? 0 : (+start || 0); + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = (end === undefined || end > length) ? length : (+end || 0); + if (end < 0) { + end += length; + } + length = start > end ? 0 : (end >>> 0); + start >>>= 0; + + while (start < length) { + array[start++] = value; + } + return array; + } + + /** + * The base implementation of `_.filter` without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ + function baseFilter(collection, predicate) { + var result = []; + baseEach(collection, function(value, index, collection) { + if (predicate(value, index, collection)) { + result.push(value); + } + }); + return result; + } + + /** + * The base implementation of `_.find`, `_.findLast`, `_.findKey`, and `_.findLastKey`, + * without support for callback shorthands and `this` binding, which iterates + * over `collection` using the provided `eachFunc`. + * + * @private + * @param {Array|Object|string} collection The collection to search. + * @param {Function} predicate The function invoked per iteration. + * @param {Function} eachFunc The function to iterate over `collection`. + * @param {boolean} [retKey] Specify returning the key of the found element + * instead of the element itself. + * @returns {*} Returns the found element or its key, else `undefined`. + */ + function baseFind(collection, predicate, eachFunc, retKey) { + var result; + eachFunc(collection, function(value, key, collection) { + if (predicate(value, key, collection)) { + result = retKey ? key : value; + return false; + } + }); + return result; + } + + /** + * The base implementation of `_.flatten` with added support for restricting + * flattening and specifying the start index. + * + * @private + * @param {Array} array The array to flatten. + * @param {boolean} [isDeep] Specify a deep flatten. + * @param {boolean} [isStrict] Restrict flattening to arrays-like objects. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ + function baseFlatten(array, isDeep, isStrict, result) { + result || (result = []); + + var index = -1, + length = array.length; + + while (++index < length) { + var value = array[index]; + if (isObjectLike(value) && isArrayLike(value) && + (isStrict || isArray(value) || isArguments(value))) { + if (isDeep) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, isDeep, isStrict, result); + } else { + arrayPush(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; + } + + /** + * The base implementation of `baseForIn` and `baseForOwn` which iterates + * over `object` properties returned by `keysFunc` invoking `iteratee` for + * each property. Iteratee functions may exit iteration early by explicitly + * returning `false`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ + var baseFor = createBaseFor(); + + /** + * This function is like `baseFor` except that it iterates over properties + * in the opposite order. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ + var baseForRight = createBaseFor(true); + + /** + * The base implementation of `_.forIn` without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ + function baseForIn(object, iteratee) { + return baseFor(object, iteratee, keysIn); + } + + /** + * The base implementation of `_.forOwn` without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ + function baseForOwn(object, iteratee) { + return baseFor(object, iteratee, keys); + } + + /** + * The base implementation of `_.forOwnRight` without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ + function baseForOwnRight(object, iteratee) { + return baseForRight(object, iteratee, keys); + } + + /** + * The base implementation of `_.functions` which creates an array of + * `object` function property names filtered from those provided. + * + * @private + * @param {Object} object The object to inspect. + * @param {Array} props The property names to filter. + * @returns {Array} Returns the new array of filtered property names. + */ + function baseFunctions(object, props) { + var index = -1, + length = props.length, + resIndex = -1, + result = []; + + while (++index < length) { + var key = props[index]; + if (isFunction(object[key])) { + result[++resIndex] = key; + } + } + return result; + } + + /** + * The base implementation of `get` without support for string paths + * and default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array} path The path of the property to get. + * @param {string} [pathKey] The key representation of path. + * @returns {*} Returns the resolved value. + */ + function baseGet(object, path, pathKey) { + if (object == null) { + return; + } + if (pathKey !== undefined && pathKey in toObject(object)) { + path = [pathKey]; + } + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[path[index++]]; + } + return (index && index == length) ? object : undefined; + } + + /** + * The base implementation of `_.isEqual` without support for `this` binding + * `customizer` functions. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {Function} [customizer] The function to customize comparing values. + * @param {boolean} [isLoose] Specify performing partial comparisons. + * @param {Array} [stackA] Tracks traversed `value` objects. + * @param {Array} [stackB] Tracks traversed `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ + function baseIsEqual(value, other, customizer, isLoose, stackA, stackB) { + if (value === other) { + return true; + } + if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) { + return value !== value && other !== other; + } + return baseIsEqualDeep(value, other, baseIsEqual, customizer, isLoose, stackA, stackB); + } + + /** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Function} [customizer] The function to customize comparing objects. + * @param {boolean} [isLoose] Specify performing partial comparisons. + * @param {Array} [stackA=[]] Tracks traversed `value` objects. + * @param {Array} [stackB=[]] Tracks traversed `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function baseIsEqualDeep(object, other, equalFunc, customizer, isLoose, stackA, stackB) { + var objIsArr = isArray(object), + othIsArr = isArray(other), + objTag = arrayTag, + othTag = arrayTag; + + if (!objIsArr) { + objTag = objToString.call(object); + if (objTag == argsTag) { + objTag = objectTag; + } else if (objTag != objectTag) { + objIsArr = isTypedArray(object); + } + } + if (!othIsArr) { + othTag = objToString.call(other); + if (othTag == argsTag) { + othTag = objectTag; + } else if (othTag != objectTag) { + othIsArr = isTypedArray(other); + } + } + var objIsObj = objTag == objectTag, + othIsObj = othTag == objectTag, + isSameTag = objTag == othTag; + + if (isSameTag && !(objIsArr || objIsObj)) { + return equalByTag(object, other, objTag); + } + if (!isLoose) { + var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + return equalFunc(objIsWrapped ? object.value() : object, othIsWrapped ? other.value() : other, customizer, isLoose, stackA, stackB); + } + } + if (!isSameTag) { + return false; + } + // Assume cyclic values are equal. + // For more information on detecting circular references see https://es5.github.io/#JO. + stackA || (stackA = []); + stackB || (stackB = []); + + var length = stackA.length; + while (length--) { + if (stackA[length] == object) { + return stackB[length] == other; + } + } + // Add `object` and `other` to the stack of traversed objects. + stackA.push(object); + stackB.push(other); + + var result = (objIsArr ? equalArrays : equalObjects)(object, other, equalFunc, customizer, isLoose, stackA, stackB); + + stackA.pop(); + stackB.pop(); + + return result; + } + + /** + * The base implementation of `_.isMatch` without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Object} object The object to inspect. + * @param {Array} matchData The propery names, values, and compare flags to match. + * @param {Function} [customizer] The function to customize comparing objects. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + */ + function baseIsMatch(object, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer; + + if (object == null) { + return !length; + } + object = toObject(object); + while (index--) { + var data = matchData[index]; + if ((noCustomizer && data[2]) + ? data[1] !== object[data[0]] + : !(data[0] in object) + ) { + return false; + } + } + while (++index < length) { + data = matchData[index]; + var key = data[0], + objValue = object[key], + srcValue = data[1]; + + if (noCustomizer && data[2]) { + if (objValue === undefined && !(key in object)) { + return false; + } + } else { + var result = customizer ? customizer(objValue, srcValue, key) : undefined; + if (!(result === undefined ? baseIsEqual(srcValue, objValue, customizer, true) : result)) { + return false; + } + } + } + return true; + } + + /** + * The base implementation of `_.map` without support for callback shorthands + * and `this` binding. + * + * @private + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ + function baseMap(collection, iteratee) { + var index = -1, + result = isArrayLike(collection) ? Array(collection.length) : []; + + baseEach(collection, function(value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; + } + + /** + * The base implementation of `_.matches` which does not clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new function. + */ + function baseMatches(source) { + var matchData = getMatchData(source); + if (matchData.length == 1 && matchData[0][2]) { + var key = matchData[0][0], + value = matchData[0][1]; + + return function(object) { + if (object == null) { + return false; + } + return object[key] === value && (value !== undefined || (key in toObject(object))); + }; + } + return function(object) { + return baseIsMatch(object, matchData); + }; + } + + /** + * The base implementation of `_.matchesProperty` which does not clone `srcValue`. + * + * @private + * @param {string} path The path of the property to get. + * @param {*} srcValue The value to compare. + * @returns {Function} Returns the new function. + */ + function baseMatchesProperty(path, srcValue) { + var isArr = isArray(path), + isCommon = isKey(path) && isStrictComparable(srcValue), + pathKey = (path + ''); + + path = toPath(path); + return function(object) { + if (object == null) { + return false; + } + var key = pathKey; + object = toObject(object); + if ((isArr || !isCommon) && !(key in object)) { + object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1)); + if (object == null) { + return false; + } + key = last(path); + object = toObject(object); + } + return object[key] === srcValue + ? (srcValue !== undefined || (key in object)) + : baseIsEqual(srcValue, object[key], undefined, true); + }; + } + + /** + * The base implementation of `_.merge` without support for argument juggling, + * multiple sources, and `this` binding `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {Function} [customizer] The function to customize merged values. + * @param {Array} [stackA=[]] Tracks traversed source objects. + * @param {Array} [stackB=[]] Associates values with source counterparts. + * @returns {Object} Returns `object`. + */ + function baseMerge(object, source, customizer, stackA, stackB) { + if (!isObject(object)) { + return object; + } + var isSrcArr = isArrayLike(source) && (isArray(source) || isTypedArray(source)), + props = isSrcArr ? undefined : keys(source); + + arrayEach(props || source, function(srcValue, key) { + if (props) { + key = srcValue; + srcValue = source[key]; + } + if (isObjectLike(srcValue)) { + stackA || (stackA = []); + stackB || (stackB = []); + baseMergeDeep(object, source, key, baseMerge, customizer, stackA, stackB); + } + else { + var value = object[key], + result = customizer ? customizer(value, srcValue, key, object, source) : undefined, + isCommon = result === undefined; + + if (isCommon) { + result = srcValue; + } + if ((result !== undefined || (isSrcArr && !(key in object))) && + (isCommon || (result === result ? (result !== value) : (value === value)))) { + object[key] = result; + } + } + }); + return object; + } + + /** + * A specialized version of `baseMerge` for arrays and objects which performs + * deep merges and tracks traversed objects enabling objects with circular + * references to be merged. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {string} key The key of the value to merge. + * @param {Function} mergeFunc The function to merge values. + * @param {Function} [customizer] The function to customize merged values. + * @param {Array} [stackA=[]] Tracks traversed source objects. + * @param {Array} [stackB=[]] Associates values with source counterparts. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function baseMergeDeep(object, source, key, mergeFunc, customizer, stackA, stackB) { + var length = stackA.length, + srcValue = source[key]; + + while (length--) { + if (stackA[length] == srcValue) { + object[key] = stackB[length]; + return; + } + } + var value = object[key], + result = customizer ? customizer(value, srcValue, key, object, source) : undefined, + isCommon = result === undefined; + + if (isCommon) { + result = srcValue; + if (isArrayLike(srcValue) && (isArray(srcValue) || isTypedArray(srcValue))) { + result = isArray(value) + ? value + : (isArrayLike(value) ? arrayCopy(value) : []); + } + else if (isPlainObject(srcValue) || isArguments(srcValue)) { + result = isArguments(value) + ? toPlainObject(value) + : (isPlainObject(value) ? value : {}); + } + else { + isCommon = false; + } + } + // Add the source value to the stack of traversed objects and associate + // it with its merged value. + stackA.push(srcValue); + stackB.push(result); + + if (isCommon) { + // Recursively merge objects and arrays (susceptible to call stack limits). + object[key] = mergeFunc(result, srcValue, customizer, stackA, stackB); + } else if (result === result ? (result !== value) : (value === value)) { + object[key] = result; + } + } + + /** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new function. + */ + function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; + } + + /** + * A specialized version of `baseProperty` which supports deep paths. + * + * @private + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new function. + */ + function basePropertyDeep(path) { + var pathKey = (path + ''); + path = toPath(path); + return function(object) { + return baseGet(object, path, pathKey); + }; + } + + /** + * The base implementation of `_.pullAt` without support for individual + * index arguments and capturing the removed elements. + * + * @private + * @param {Array} array The array to modify. + * @param {number[]} indexes The indexes of elements to remove. + * @returns {Array} Returns `array`. + */ + function basePullAt(array, indexes) { + var length = array ? indexes.length : 0; + while (length--) { + var index = indexes[length]; + if (index != previous && isIndex(index)) { + var previous = index; + splice.call(array, index, 1); + } + } + return array; + } + + /** + * The base implementation of `_.random` without support for argument juggling + * and returning floating-point numbers. + * + * @private + * @param {number} min The minimum possible value. + * @param {number} max The maximum possible value. + * @returns {number} Returns the random number. + */ + function baseRandom(min, max) { + return min + nativeFloor(nativeRandom() * (max - min + 1)); + } + + /** + * The base implementation of `_.reduce` and `_.reduceRight` without support + * for callback shorthands and `this` binding, which iterates over `collection` + * using the provided `eachFunc`. + * + * @private + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} accumulator The initial value. + * @param {boolean} initFromCollection Specify using the first or last element + * of `collection` as the initial value. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the accumulated value. + */ + function baseReduce(collection, iteratee, accumulator, initFromCollection, eachFunc) { + eachFunc(collection, function(value, index, collection) { + accumulator = initFromCollection + ? (initFromCollection = false, value) + : iteratee(accumulator, value, index, collection); + }); + return accumulator; + } + + /** + * The base implementation of `setData` without support for hot loop detection. + * + * @private + * @param {Function} func The function to associate metadata with. + * @param {*} data The metadata. + * @returns {Function} Returns `func`. + */ + var baseSetData = !metaMap ? identity : function(func, data) { + metaMap.set(func, data); + return func; + }; + + /** + * The base implementation of `_.slice` without an iteratee call guard. + * + * @private + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ + function baseSlice(array, start, end) { + var index = -1, + length = array.length; + + start = start == null ? 0 : (+start || 0); + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = (end === undefined || end > length) ? length : (+end || 0); + if (end < 0) { + end += length; + } + length = start > end ? 0 : ((end - start) >>> 0); + start >>>= 0; + + var result = Array(length); + while (++index < length) { + result[index] = array[index + start]; + } + return result; + } + + /** + * The base implementation of `_.some` without support for callback shorthands + * and `this` binding. + * + * @private + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ + function baseSome(collection, predicate) { + var result; + + baseEach(collection, function(value, index, collection) { + result = predicate(value, index, collection); + return !result; + }); + return !!result; + } + + /** + * The base implementation of `_.sortBy` which uses `comparer` to define + * the sort order of `array` and replaces criteria objects with their + * corresponding values. + * + * @private + * @param {Array} array The array to sort. + * @param {Function} comparer The function to define sort order. + * @returns {Array} Returns `array`. + */ + function baseSortBy(array, comparer) { + var length = array.length; + + array.sort(comparer); + while (length--) { + array[length] = array[length].value; + } + return array; + } + + /** + * The base implementation of `_.sortByOrder` without param guards. + * + * @private + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. + * @param {boolean[]} orders The sort orders of `iteratees`. + * @returns {Array} Returns the new sorted array. + */ + function baseSortByOrder(collection, iteratees, orders) { + var callback = getCallback(), + index = -1; + + iteratees = arrayMap(iteratees, function(iteratee) { return callback(iteratee); }); + + var result = baseMap(collection, function(value) { + var criteria = arrayMap(iteratees, function(iteratee) { return iteratee(value); }); + return { 'criteria': criteria, 'index': ++index, 'value': value }; + }); + + return baseSortBy(result, function(object, other) { + return compareMultiple(object, other, orders); + }); + } + + /** + * The base implementation of `_.sum` without support for callback shorthands + * and `this` binding. + * + * @private + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {number} Returns the sum. + */ + function baseSum(collection, iteratee) { + var result = 0; + baseEach(collection, function(value, index, collection) { + result += +iteratee(value, index, collection) || 0; + }); + return result; + } + + /** + * The base implementation of `_.uniq` without support for callback shorthands + * and `this` binding. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The function invoked per iteration. + * @returns {Array} Returns the new duplicate-value-free array. + */ + function baseUniq(array, iteratee) { + var index = -1, + indexOf = getIndexOf(), + length = array.length, + isCommon = indexOf == baseIndexOf, + isLarge = isCommon && length >= LARGE_ARRAY_SIZE, + seen = isLarge ? createCache() : null, + result = []; + + if (seen) { + indexOf = cacheIndexOf; + isCommon = false; + } else { + isLarge = false; + seen = iteratee ? [] : result; + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value, index, array) : value; + + if (isCommon && value === value) { + var seenIndex = seen.length; + while (seenIndex--) { + if (seen[seenIndex] === computed) { + continue outer; + } + } + if (iteratee) { + seen.push(computed); + } + result.push(value); + } + else if (indexOf(seen, computed, 0) < 0) { + if (iteratee || isLarge) { + seen.push(computed); + } + result.push(value); + } + } + return result; + } + + /** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ + function baseValues(object, props) { + var index = -1, + length = props.length, + result = Array(length); + + while (++index < length) { + result[index] = object[props[index]]; + } + return result; + } + + /** + * The base implementation of `_.dropRightWhile`, `_.dropWhile`, `_.takeRightWhile`, + * and `_.takeWhile` without support for callback shorthands and `this` binding. + * + * @private + * @param {Array} array The array to query. + * @param {Function} predicate The function invoked per iteration. + * @param {boolean} [isDrop] Specify dropping elements instead of taking them. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the slice of `array`. + */ + function baseWhile(array, predicate, isDrop, fromRight) { + var length = array.length, + index = fromRight ? length : -1; + + while ((fromRight ? index-- : ++index < length) && predicate(array[index], index, array)) {} + return isDrop + ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length)) + : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index)); + } + + /** + * The base implementation of `wrapperValue` which returns the result of + * performing a sequence of actions on the unwrapped `value`, where each + * successive action is supplied the return value of the previous. + * + * @private + * @param {*} value The unwrapped value. + * @param {Array} actions Actions to peform to resolve the unwrapped value. + * @returns {*} Returns the resolved value. + */ + function baseWrapperValue(value, actions) { + var result = value; + if (result instanceof LazyWrapper) { + result = result.value(); + } + var index = -1, + length = actions.length; + + while (++index < length) { + var action = actions[index]; + result = action.func.apply(action.thisArg, arrayPush([result], action.args)); + } + return result; + } + + /** + * Performs a binary search of `array` to determine the index at which `value` + * should be inserted into `array` in order to maintain its sort order. + * + * @private + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {boolean} [retHighest] Specify returning the highest qualified index. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + */ + function binaryIndex(array, value, retHighest) { + var low = 0, + high = array ? array.length : low; + + if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) { + while (low < high) { + var mid = (low + high) >>> 1, + computed = array[mid]; + + if ((retHighest ? (computed <= value) : (computed < value)) && computed !== null) { + low = mid + 1; + } else { + high = mid; + } + } + return high; + } + return binaryIndexBy(array, value, identity, retHighest); + } + + /** + * This function is like `binaryIndex` except that it invokes `iteratee` for + * `value` and each element of `array` to compute their sort ranking. The + * iteratee is invoked with one argument; (value). + * + * @private + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function} iteratee The function invoked per iteration. + * @param {boolean} [retHighest] Specify returning the highest qualified index. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + */ + function binaryIndexBy(array, value, iteratee, retHighest) { + value = iteratee(value); + + var low = 0, + high = array ? array.length : 0, + valIsNaN = value !== value, + valIsNull = value === null, + valIsUndef = value === undefined; + + while (low < high) { + var mid = nativeFloor((low + high) / 2), + computed = iteratee(array[mid]), + isDef = computed !== undefined, + isReflexive = computed === computed; + + if (valIsNaN) { + var setLow = isReflexive || retHighest; + } else if (valIsNull) { + setLow = isReflexive && isDef && (retHighest || computed != null); + } else if (valIsUndef) { + setLow = isReflexive && (retHighest || isDef); + } else if (computed == null) { + setLow = false; + } else { + setLow = retHighest ? (computed <= value) : (computed < value); + } + if (setLow) { + low = mid + 1; + } else { + high = mid; + } + } + return nativeMin(high, MAX_ARRAY_INDEX); + } + + /** + * A specialized version of `baseCallback` which only supports `this` binding + * and specifying the number of arguments to provide to `func`. + * + * @private + * @param {Function} func The function to bind. + * @param {*} thisArg The `this` binding of `func`. + * @param {number} [argCount] The number of arguments to provide to `func`. + * @returns {Function} Returns the callback. + */ + function bindCallback(func, thisArg, argCount) { + if (typeof func != 'function') { + return identity; + } + if (thisArg === undefined) { + return func; + } + switch (argCount) { + case 1: return function(value) { + return func.call(thisArg, value); + }; + case 3: return function(value, index, collection) { + return func.call(thisArg, value, index, collection); + }; + case 4: return function(accumulator, value, index, collection) { + return func.call(thisArg, accumulator, value, index, collection); + }; + case 5: return function(value, other, key, object, source) { + return func.call(thisArg, value, other, key, object, source); + }; + } + return function() { + return func.apply(thisArg, arguments); + }; + } + + /** + * Creates a clone of the given array buffer. + * + * @private + * @param {ArrayBuffer} buffer The array buffer to clone. + * @returns {ArrayBuffer} Returns the cloned array buffer. + */ + function bufferClone(buffer) { + var result = new ArrayBuffer(buffer.byteLength), + view = new Uint8Array(result); + + view.set(new Uint8Array(buffer)); + return result; + } + + /** + * Creates an array that is the composition of partially applied arguments, + * placeholders, and provided arguments into a single array of arguments. + * + * @private + * @param {Array|Object} args The provided arguments. + * @param {Array} partials The arguments to prepend to those provided. + * @param {Array} holders The `partials` placeholder indexes. + * @returns {Array} Returns the new array of composed arguments. + */ + function composeArgs(args, partials, holders) { + var holdersLength = holders.length, + argsIndex = -1, + argsLength = nativeMax(args.length - holdersLength, 0), + leftIndex = -1, + leftLength = partials.length, + result = Array(leftLength + argsLength); + + while (++leftIndex < leftLength) { + result[leftIndex] = partials[leftIndex]; + } + while (++argsIndex < holdersLength) { + result[holders[argsIndex]] = args[argsIndex]; + } + while (argsLength--) { + result[leftIndex++] = args[argsIndex++]; + } + return result; + } + + /** + * This function is like `composeArgs` except that the arguments composition + * is tailored for `_.partialRight`. + * + * @private + * @param {Array|Object} args The provided arguments. + * @param {Array} partials The arguments to append to those provided. + * @param {Array} holders The `partials` placeholder indexes. + * @returns {Array} Returns the new array of composed arguments. + */ + function composeArgsRight(args, partials, holders) { + var holdersIndex = -1, + holdersLength = holders.length, + argsIndex = -1, + argsLength = nativeMax(args.length - holdersLength, 0), + rightIndex = -1, + rightLength = partials.length, + result = Array(argsLength + rightLength); + + while (++argsIndex < argsLength) { + result[argsIndex] = args[argsIndex]; + } + var offset = argsIndex; + while (++rightIndex < rightLength) { + result[offset + rightIndex] = partials[rightIndex]; + } + while (++holdersIndex < holdersLength) { + result[offset + holders[holdersIndex]] = args[argsIndex++]; + } + return result; + } + + /** + * Creates a `_.countBy`, `_.groupBy`, `_.indexBy`, or `_.partition` function. + * + * @private + * @param {Function} setter The function to set keys and values of the accumulator object. + * @param {Function} [initializer] The function to initialize the accumulator object. + * @returns {Function} Returns the new aggregator function. + */ + function createAggregator(setter, initializer) { + return function(collection, iteratee, thisArg) { + var result = initializer ? initializer() : {}; + iteratee = getCallback(iteratee, thisArg, 3); + + if (isArray(collection)) { + var index = -1, + length = collection.length; + + while (++index < length) { + var value = collection[index]; + setter(result, value, iteratee(value, index, collection), collection); + } + } else { + baseEach(collection, function(value, key, collection) { + setter(result, value, iteratee(value, key, collection), collection); + }); + } + return result; + }; + } + + /** + * Creates a `_.assign`, `_.defaults`, or `_.merge` function. + * + * @private + * @param {Function} assigner The function to assign values. + * @returns {Function} Returns the new assigner function. + */ + function createAssigner(assigner) { + return restParam(function(object, sources) { + var index = -1, + length = object == null ? 0 : sources.length, + customizer = length > 2 ? sources[length - 2] : undefined, + guard = length > 2 ? sources[2] : undefined, + thisArg = length > 1 ? sources[length - 1] : undefined; + + if (typeof customizer == 'function') { + customizer = bindCallback(customizer, thisArg, 5); + length -= 2; + } else { + customizer = typeof thisArg == 'function' ? thisArg : undefined; + length -= (customizer ? 1 : 0); + } + if (guard && isIterateeCall(sources[0], sources[1], guard)) { + customizer = length < 3 ? undefined : customizer; + length = 1; + } + while (++index < length) { + var source = sources[index]; + if (source) { + assigner(object, source, customizer); + } + } + return object; + }); + } + + /** + * Creates a `baseEach` or `baseEachRight` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ + function createBaseEach(eachFunc, fromRight) { + return function(collection, iteratee) { + var length = collection ? getLength(collection) : 0; + if (!isLength(length)) { + return eachFunc(collection, iteratee); + } + var index = fromRight ? length : -1, + iterable = toObject(collection); + + while ((fromRight ? index-- : ++index < length)) { + if (iteratee(iterable[index], index, iterable) === false) { + break; + } + } + return collection; + }; + } + + /** + * Creates a base function for `_.forIn` or `_.forInRight`. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ + function createBaseFor(fromRight) { + return function(object, iteratee, keysFunc) { + var iterable = toObject(object), + props = keysFunc(object), + length = props.length, + index = fromRight ? length : -1; + + while ((fromRight ? index-- : ++index < length)) { + var key = props[index]; + if (iteratee(iterable[key], key, iterable) === false) { + break; + } + } + return object; + }; + } + + /** + * Creates a function that wraps `func` and invokes it with the `this` + * binding of `thisArg`. + * + * @private + * @param {Function} func The function to bind. + * @param {*} [thisArg] The `this` binding of `func`. + * @returns {Function} Returns the new bound function. + */ + function createBindWrapper(func, thisArg) { + var Ctor = createCtorWrapper(func); + + function wrapper() { + var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + return fn.apply(thisArg, arguments); + } + return wrapper; + } + + /** + * Creates a `Set` cache object to optimize linear searches of large arrays. + * + * @private + * @param {Array} [values] The values to cache. + * @returns {null|Object} Returns the new cache object if `Set` is supported, else `null`. + */ + function createCache(values) { + return (nativeCreate && Set) ? new SetCache(values) : null; + } + + /** + * Creates a function that produces compound words out of the words in a + * given string. + * + * @private + * @param {Function} callback The function to combine each word. + * @returns {Function} Returns the new compounder function. + */ + function createCompounder(callback) { + return function(string) { + var index = -1, + array = words(deburr(string)), + length = array.length, + result = ''; + + while (++index < length) { + result = callback(result, array[index], index); + } + return result; + }; + } + + /** + * Creates a function that produces an instance of `Ctor` regardless of + * whether it was invoked as part of a `new` expression or by `call` or `apply`. + * + * @private + * @param {Function} Ctor The constructor to wrap. + * @returns {Function} Returns the new wrapped function. + */ + function createCtorWrapper(Ctor) { + return function() { + // Use a `switch` statement to work with class constructors. + // See http://ecma-international.org/ecma-262/6.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist + // for more details. + var args = arguments; + switch (args.length) { + case 0: return new Ctor; + case 1: return new Ctor(args[0]); + case 2: return new Ctor(args[0], args[1]); + case 3: return new Ctor(args[0], args[1], args[2]); + case 4: return new Ctor(args[0], args[1], args[2], args[3]); + case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]); + case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]); + case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]); + } + var thisBinding = baseCreate(Ctor.prototype), + result = Ctor.apply(thisBinding, args); + + // Mimic the constructor's `return` behavior. + // See https://es5.github.io/#x13.2.2 for more details. + return isObject(result) ? result : thisBinding; + }; + } + + /** + * Creates a `_.curry` or `_.curryRight` function. + * + * @private + * @param {boolean} flag The curry bit flag. + * @returns {Function} Returns the new curry function. + */ + function createCurry(flag) { + function curryFunc(func, arity, guard) { + if (guard && isIterateeCall(func, arity, guard)) { + arity = undefined; + } + var result = createWrapper(func, flag, undefined, undefined, undefined, undefined, undefined, arity); + result.placeholder = curryFunc.placeholder; + return result; + } + return curryFunc; + } + + /** + * Creates a `_.defaults` or `_.defaultsDeep` function. + * + * @private + * @param {Function} assigner The function to assign values. + * @param {Function} customizer The function to customize assigned values. + * @returns {Function} Returns the new defaults function. + */ + function createDefaults(assigner, customizer) { + return restParam(function(args) { + var object = args[0]; + if (object == null) { + return object; + } + args.push(customizer); + return assigner.apply(undefined, args); + }); + } + + /** + * Creates a `_.max` or `_.min` function. + * + * @private + * @param {Function} comparator The function used to compare values. + * @param {*} exValue The initial extremum value. + * @returns {Function} Returns the new extremum function. + */ + function createExtremum(comparator, exValue) { + return function(collection, iteratee, thisArg) { + if (thisArg && isIterateeCall(collection, iteratee, thisArg)) { + iteratee = undefined; + } + iteratee = getCallback(iteratee, thisArg, 3); + if (iteratee.length == 1) { + collection = isArray(collection) ? collection : toIterable(collection); + var result = arrayExtremum(collection, iteratee, comparator, exValue); + if (!(collection.length && result === exValue)) { + return result; + } + } + return baseExtremum(collection, iteratee, comparator, exValue); + }; + } + + /** + * Creates a `_.find` or `_.findLast` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new find function. + */ + function createFind(eachFunc, fromRight) { + return function(collection, predicate, thisArg) { + predicate = getCallback(predicate, thisArg, 3); + if (isArray(collection)) { + var index = baseFindIndex(collection, predicate, fromRight); + return index > -1 ? collection[index] : undefined; + } + return baseFind(collection, predicate, eachFunc); + }; + } + + /** + * Creates a `_.findIndex` or `_.findLastIndex` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new find function. + */ + function createFindIndex(fromRight) { + return function(array, predicate, thisArg) { + if (!(array && array.length)) { + return -1; + } + predicate = getCallback(predicate, thisArg, 3); + return baseFindIndex(array, predicate, fromRight); + }; + } + + /** + * Creates a `_.findKey` or `_.findLastKey` function. + * + * @private + * @param {Function} objectFunc The function to iterate over an object. + * @returns {Function} Returns the new find function. + */ + function createFindKey(objectFunc) { + return function(object, predicate, thisArg) { + predicate = getCallback(predicate, thisArg, 3); + return baseFind(object, predicate, objectFunc, true); + }; + } + + /** + * Creates a `_.flow` or `_.flowRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new flow function. + */ + function createFlow(fromRight) { + return function() { + var wrapper, + length = arguments.length, + index = fromRight ? length : -1, + leftIndex = 0, + funcs = Array(length); + + while ((fromRight ? index-- : ++index < length)) { + var func = funcs[leftIndex++] = arguments[index]; + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + if (!wrapper && LodashWrapper.prototype.thru && getFuncName(func) == 'wrapper') { + wrapper = new LodashWrapper([], true); + } + } + index = wrapper ? -1 : length; + while (++index < length) { + func = funcs[index]; + + var funcName = getFuncName(func), + data = funcName == 'wrapper' ? getData(func) : undefined; + + if (data && isLaziable(data[0]) && data[1] == (ARY_FLAG | CURRY_FLAG | PARTIAL_FLAG | REARG_FLAG) && !data[4].length && data[9] == 1) { + wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]); + } else { + wrapper = (func.length == 1 && isLaziable(func)) ? wrapper[funcName]() : wrapper.thru(func); + } + } + return function() { + var args = arguments, + value = args[0]; + + if (wrapper && args.length == 1 && isArray(value) && value.length >= LARGE_ARRAY_SIZE) { + return wrapper.plant(value).value(); + } + var index = 0, + result = length ? funcs[index].apply(this, args) : value; + + while (++index < length) { + result = funcs[index].call(this, result); + } + return result; + }; + }; + } + + /** + * Creates a function for `_.forEach` or `_.forEachRight`. + * + * @private + * @param {Function} arrayFunc The function to iterate over an array. + * @param {Function} eachFunc The function to iterate over a collection. + * @returns {Function} Returns the new each function. + */ + function createForEach(arrayFunc, eachFunc) { + return function(collection, iteratee, thisArg) { + return (typeof iteratee == 'function' && thisArg === undefined && isArray(collection)) + ? arrayFunc(collection, iteratee) + : eachFunc(collection, bindCallback(iteratee, thisArg, 3)); + }; + } + + /** + * Creates a function for `_.forIn` or `_.forInRight`. + * + * @private + * @param {Function} objectFunc The function to iterate over an object. + * @returns {Function} Returns the new each function. + */ + function createForIn(objectFunc) { + return function(object, iteratee, thisArg) { + if (typeof iteratee != 'function' || thisArg !== undefined) { + iteratee = bindCallback(iteratee, thisArg, 3); + } + return objectFunc(object, iteratee, keysIn); + }; + } + + /** + * Creates a function for `_.forOwn` or `_.forOwnRight`. + * + * @private + * @param {Function} objectFunc The function to iterate over an object. + * @returns {Function} Returns the new each function. + */ + function createForOwn(objectFunc) { + return function(object, iteratee, thisArg) { + if (typeof iteratee != 'function' || thisArg !== undefined) { + iteratee = bindCallback(iteratee, thisArg, 3); + } + return objectFunc(object, iteratee); + }; + } + + /** + * Creates a function for `_.mapKeys` or `_.mapValues`. + * + * @private + * @param {boolean} [isMapKeys] Specify mapping keys instead of values. + * @returns {Function} Returns the new map function. + */ + function createObjectMapper(isMapKeys) { + return function(object, iteratee, thisArg) { + var result = {}; + iteratee = getCallback(iteratee, thisArg, 3); + + baseForOwn(object, function(value, key, object) { + var mapped = iteratee(value, key, object); + key = isMapKeys ? mapped : key; + value = isMapKeys ? value : mapped; + result[key] = value; + }); + return result; + }; + } + + /** + * Creates a function for `_.padLeft` or `_.padRight`. + * + * @private + * @param {boolean} [fromRight] Specify padding from the right. + * @returns {Function} Returns the new pad function. + */ + function createPadDir(fromRight) { + return function(string, length, chars) { + string = baseToString(string); + return (fromRight ? string : '') + createPadding(string, length, chars) + (fromRight ? '' : string); + }; + } + + /** + * Creates a `_.partial` or `_.partialRight` function. + * + * @private + * @param {boolean} flag The partial bit flag. + * @returns {Function} Returns the new partial function. + */ + function createPartial(flag) { + var partialFunc = restParam(function(func, partials) { + var holders = replaceHolders(partials, partialFunc.placeholder); + return createWrapper(func, flag, undefined, partials, holders); + }); + return partialFunc; + } + + /** + * Creates a function for `_.reduce` or `_.reduceRight`. + * + * @private + * @param {Function} arrayFunc The function to iterate over an array. + * @param {Function} eachFunc The function to iterate over a collection. + * @returns {Function} Returns the new each function. + */ + function createReduce(arrayFunc, eachFunc) { + return function(collection, iteratee, accumulator, thisArg) { + var initFromArray = arguments.length < 3; + return (typeof iteratee == 'function' && thisArg === undefined && isArray(collection)) + ? arrayFunc(collection, iteratee, accumulator, initFromArray) + : baseReduce(collection, getCallback(iteratee, thisArg, 4), accumulator, initFromArray, eachFunc); + }; + } + + /** + * Creates a function that wraps `func` and invokes it with optional `this` + * binding of, partial application, and currying. + * + * @private + * @param {Function|string} func The function or method name to reference. + * @param {number} bitmask The bitmask of flags. See `createWrapper` for more details. + * @param {*} [thisArg] The `this` binding of `func`. + * @param {Array} [partials] The arguments to prepend to those provided to the new function. + * @param {Array} [holders] The `partials` placeholder indexes. + * @param {Array} [partialsRight] The arguments to append to those provided to the new function. + * @param {Array} [holdersRight] The `partialsRight` placeholder indexes. + * @param {Array} [argPos] The argument positions of the new function. + * @param {number} [ary] The arity cap of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createHybridWrapper(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) { + var isAry = bitmask & ARY_FLAG, + isBind = bitmask & BIND_FLAG, + isBindKey = bitmask & BIND_KEY_FLAG, + isCurry = bitmask & CURRY_FLAG, + isCurryBound = bitmask & CURRY_BOUND_FLAG, + isCurryRight = bitmask & CURRY_RIGHT_FLAG, + Ctor = isBindKey ? undefined : createCtorWrapper(func); + + function wrapper() { + // Avoid `arguments` object use disqualifying optimizations by + // converting it to an array before providing it to other functions. + var length = arguments.length, + index = length, + args = Array(length); + + while (index--) { + args[index] = arguments[index]; + } + if (partials) { + args = composeArgs(args, partials, holders); + } + if (partialsRight) { + args = composeArgsRight(args, partialsRight, holdersRight); + } + if (isCurry || isCurryRight) { + var placeholder = wrapper.placeholder, + argsHolders = replaceHolders(args, placeholder); + + length -= argsHolders.length; + if (length < arity) { + var newArgPos = argPos ? arrayCopy(argPos) : undefined, + newArity = nativeMax(arity - length, 0), + newsHolders = isCurry ? argsHolders : undefined, + newHoldersRight = isCurry ? undefined : argsHolders, + newPartials = isCurry ? args : undefined, + newPartialsRight = isCurry ? undefined : args; + + bitmask |= (isCurry ? PARTIAL_FLAG : PARTIAL_RIGHT_FLAG); + bitmask &= ~(isCurry ? PARTIAL_RIGHT_FLAG : PARTIAL_FLAG); + + if (!isCurryBound) { + bitmask &= ~(BIND_FLAG | BIND_KEY_FLAG); + } + var newData = [func, bitmask, thisArg, newPartials, newsHolders, newPartialsRight, newHoldersRight, newArgPos, ary, newArity], + result = createHybridWrapper.apply(undefined, newData); + + if (isLaziable(func)) { + setData(result, newData); + } + result.placeholder = placeholder; + return result; + } + } + var thisBinding = isBind ? thisArg : this, + fn = isBindKey ? thisBinding[func] : func; + + if (argPos) { + args = reorder(args, argPos); + } + if (isAry && ary < args.length) { + args.length = ary; + } + if (this && this !== root && this instanceof wrapper) { + fn = Ctor || createCtorWrapper(func); + } + return fn.apply(thisBinding, args); + } + return wrapper; + } + + /** + * Creates the padding required for `string` based on the given `length`. + * The `chars` string is truncated if the number of characters exceeds `length`. + * + * @private + * @param {string} string The string to create padding for. + * @param {number} [length=0] The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the pad for `string`. + */ + function createPadding(string, length, chars) { + var strLength = string.length; + length = +length; + + if (strLength >= length || !nativeIsFinite(length)) { + return ''; + } + var padLength = length - strLength; + chars = chars == null ? ' ' : (chars + ''); + return repeat(chars, nativeCeil(padLength / chars.length)).slice(0, padLength); + } + + /** + * Creates a function that wraps `func` and invokes it with the optional `this` + * binding of `thisArg` and the `partials` prepended to those provided to + * the wrapper. + * + * @private + * @param {Function} func The function to partially apply arguments to. + * @param {number} bitmask The bitmask of flags. See `createWrapper` for more details. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} partials The arguments to prepend to those provided to the new function. + * @returns {Function} Returns the new bound function. + */ + function createPartialWrapper(func, bitmask, thisArg, partials) { + var isBind = bitmask & BIND_FLAG, + Ctor = createCtorWrapper(func); + + function wrapper() { + // Avoid `arguments` object use disqualifying optimizations by + // converting it to an array before providing it `func`. + var argsIndex = -1, + argsLength = arguments.length, + leftIndex = -1, + leftLength = partials.length, + args = Array(leftLength + argsLength); + + while (++leftIndex < leftLength) { + args[leftIndex] = partials[leftIndex]; + } + while (argsLength--) { + args[leftIndex++] = arguments[++argsIndex]; + } + var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + return fn.apply(isBind ? thisArg : this, args); + } + return wrapper; + } + + /** + * Creates a `_.ceil`, `_.floor`, or `_.round` function. + * + * @private + * @param {string} methodName The name of the `Math` method to use when rounding. + * @returns {Function} Returns the new round function. + */ + function createRound(methodName) { + var func = Math[methodName]; + return function(number, precision) { + precision = precision === undefined ? 0 : (+precision || 0); + if (precision) { + precision = pow(10, precision); + return func(number * precision) / precision; + } + return func(number); + }; + } + + /** + * Creates a `_.sortedIndex` or `_.sortedLastIndex` function. + * + * @private + * @param {boolean} [retHighest] Specify returning the highest qualified index. + * @returns {Function} Returns the new index function. + */ + function createSortedIndex(retHighest) { + return function(array, value, iteratee, thisArg) { + var callback = getCallback(iteratee); + return (iteratee == null && callback === baseCallback) + ? binaryIndex(array, value, retHighest) + : binaryIndexBy(array, value, callback(iteratee, thisArg, 1), retHighest); + }; + } + + /** + * Creates a function that either curries or invokes `func` with optional + * `this` binding and partially applied arguments. + * + * @private + * @param {Function|string} func The function or method name to reference. + * @param {number} bitmask The bitmask of flags. + * The bitmask may be composed of the following flags: + * 1 - `_.bind` + * 2 - `_.bindKey` + * 4 - `_.curry` or `_.curryRight` of a bound function + * 8 - `_.curry` + * 16 - `_.curryRight` + * 32 - `_.partial` + * 64 - `_.partialRight` + * 128 - `_.rearg` + * 256 - `_.ary` + * @param {*} [thisArg] The `this` binding of `func`. + * @param {Array} [partials] The arguments to be partially applied. + * @param {Array} [holders] The `partials` placeholder indexes. + * @param {Array} [argPos] The argument positions of the new function. + * @param {number} [ary] The arity cap of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createWrapper(func, bitmask, thisArg, partials, holders, argPos, ary, arity) { + var isBindKey = bitmask & BIND_KEY_FLAG; + if (!isBindKey && typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + var length = partials ? partials.length : 0; + if (!length) { + bitmask &= ~(PARTIAL_FLAG | PARTIAL_RIGHT_FLAG); + partials = holders = undefined; + } + length -= (holders ? holders.length : 0); + if (bitmask & PARTIAL_RIGHT_FLAG) { + var partialsRight = partials, + holdersRight = holders; + + partials = holders = undefined; + } + var data = isBindKey ? undefined : getData(func), + newData = [func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity]; + + if (data) { + mergeData(newData, data); + bitmask = newData[1]; + arity = newData[9]; + } + newData[9] = arity == null + ? (isBindKey ? 0 : func.length) + : (nativeMax(arity - length, 0) || 0); + + if (bitmask == BIND_FLAG) { + var result = createBindWrapper(newData[0], newData[2]); + } else if ((bitmask == PARTIAL_FLAG || bitmask == (BIND_FLAG | PARTIAL_FLAG)) && !newData[4].length) { + result = createPartialWrapper.apply(undefined, newData); + } else { + result = createHybridWrapper.apply(undefined, newData); + } + var setter = data ? baseSetData : setData; + return setter(result, newData); + } + + /** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Function} [customizer] The function to customize comparing arrays. + * @param {boolean} [isLoose] Specify performing partial comparisons. + * @param {Array} [stackA] Tracks traversed `value` objects. + * @param {Array} [stackB] Tracks traversed `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ + function equalArrays(array, other, equalFunc, customizer, isLoose, stackA, stackB) { + var index = -1, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isLoose && othLength > arrLength)) { + return false; + } + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index], + result = customizer ? customizer(isLoose ? othValue : arrValue, isLoose ? arrValue : othValue, index) : undefined; + + if (result !== undefined) { + if (result) { + continue; + } + return false; + } + // Recursively compare arrays (susceptible to call stack limits). + if (isLoose) { + if (!arraySome(other, function(othValue) { + return arrValue === othValue || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB); + })) { + return false; + } + } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB))) { + return false; + } + } + return true; + } + + /** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function equalByTag(object, other, tag) { + switch (tag) { + case boolTag: + case dateTag: + // Coerce dates and booleans to numbers, dates to milliseconds and booleans + // to `1` or `0` treating invalid dates coerced to `NaN` as not equal. + return +object == +other; + + case errorTag: + return object.name == other.name && object.message == other.message; + + case numberTag: + // Treat `NaN` vs. `NaN` as equal. + return (object != +object) + ? other != +other + : object == +other; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings primitives and string + // objects as equal. See https://es5.github.io/#x15.10.6.4 for more details. + return object == (other + ''); + } + return false; + } + + /** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Function} [customizer] The function to customize comparing values. + * @param {boolean} [isLoose] Specify performing partial comparisons. + * @param {Array} [stackA] Tracks traversed `value` objects. + * @param {Array} [stackB] Tracks traversed `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function equalObjects(object, other, equalFunc, customizer, isLoose, stackA, stackB) { + var objProps = keys(object), + objLength = objProps.length, + othProps = keys(other), + othLength = othProps.length; + + if (objLength != othLength && !isLoose) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isLoose ? key in other : hasOwnProperty.call(other, key))) { + return false; + } + } + var skipCtor = isLoose; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key], + result = customizer ? customizer(isLoose ? othValue : objValue, isLoose? objValue : othValue, key) : undefined; + + // Recursively compare objects (susceptible to call stack limits). + if (!(result === undefined ? equalFunc(objValue, othValue, customizer, isLoose, stackA, stackB) : result)) { + return false; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (!skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + return false; + } + } + return true; + } + + /** + * Gets the appropriate "callback" function. If the `_.callback` method is + * customized this function returns the custom method, otherwise it returns + * the `baseCallback` function. If arguments are provided the chosen function + * is invoked with them and its result is returned. + * + * @private + * @returns {Function} Returns the chosen function or its result. + */ + function getCallback(func, thisArg, argCount) { + var result = lodash.callback || callback; + result = result === callback ? baseCallback : result; + return argCount ? result(func, thisArg, argCount) : result; + } + + /** + * Gets metadata for `func`. + * + * @private + * @param {Function} func The function to query. + * @returns {*} Returns the metadata for `func`. + */ + var getData = !metaMap ? noop : function(func) { + return metaMap.get(func); + }; + + /** + * Gets the name of `func`. + * + * @private + * @param {Function} func The function to query. + * @returns {string} Returns the function name. + */ + function getFuncName(func) { + var result = func.name, + array = realNames[result], + length = array ? array.length : 0; + + while (length--) { + var data = array[length], + otherFunc = data.func; + if (otherFunc == null || otherFunc == func) { + return data.name; + } + } + return result; + } + + /** + * Gets the appropriate "indexOf" function. If the `_.indexOf` method is + * customized this function returns the custom method, otherwise it returns + * the `baseIndexOf` function. If arguments are provided the chosen function + * is invoked with them and its result is returned. + * + * @private + * @returns {Function|number} Returns the chosen function or its result. + */ + function getIndexOf(collection, target, fromIndex) { + var result = lodash.indexOf || indexOf; + result = result === indexOf ? baseIndexOf : result; + return collection ? result(collection, target, fromIndex) : result; + } + + /** + * Gets the "length" property value of `object`. + * + * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792) + * that affects Safari on at least iOS 8.1-8.3 ARM64. + * + * @private + * @param {Object} object The object to query. + * @returns {*} Returns the "length" value. + */ + var getLength = baseProperty('length'); + + /** + * Gets the propery names, values, and compare flags of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the match data of `object`. + */ + function getMatchData(object) { + var result = pairs(object), + length = result.length; + + while (length--) { + result[length][2] = isStrictComparable(result[length][1]); + } + return result; + } + + /** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ + function getNative(object, key) { + var value = object == null ? undefined : object[key]; + return isNative(value) ? value : undefined; + } + + /** + * Gets the view, applying any `transforms` to the `start` and `end` positions. + * + * @private + * @param {number} start The start of the view. + * @param {number} end The end of the view. + * @param {Array} transforms The transformations to apply to the view. + * @returns {Object} Returns an object containing the `start` and `end` + * positions of the view. + */ + function getView(start, end, transforms) { + var index = -1, + length = transforms.length; + + while (++index < length) { + var data = transforms[index], + size = data.size; + + switch (data.type) { + case 'drop': start += size; break; + case 'dropRight': end -= size; break; + case 'take': end = nativeMin(end, start + size); break; + case 'takeRight': start = nativeMax(start, end - size); break; + } + } + return { 'start': start, 'end': end }; + } + + /** + * Initializes an array clone. + * + * @private + * @param {Array} array The array to clone. + * @returns {Array} Returns the initialized clone. + */ + function initCloneArray(array) { + var length = array.length, + result = new array.constructor(length); + + // Add array properties assigned by `RegExp#exec`. + if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) { + result.index = array.index; + result.input = array.input; + } + return result; + } + + /** + * Initializes an object clone. + * + * @private + * @param {Object} object The object to clone. + * @returns {Object} Returns the initialized clone. + */ + function initCloneObject(object) { + var Ctor = object.constructor; + if (!(typeof Ctor == 'function' && Ctor instanceof Ctor)) { + Ctor = Object; + } + return new Ctor; + } + + /** + * Initializes an object clone based on its `toStringTag`. + * + * **Note:** This function only supports cloning values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to clone. + * @param {string} tag The `toStringTag` of the object to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the initialized clone. + */ + function initCloneByTag(object, tag, isDeep) { + var Ctor = object.constructor; + switch (tag) { + case arrayBufferTag: + return bufferClone(object); + + case boolTag: + case dateTag: + return new Ctor(+object); + + case float32Tag: case float64Tag: + case int8Tag: case int16Tag: case int32Tag: + case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: + var buffer = object.buffer; + return new Ctor(isDeep ? bufferClone(buffer) : buffer, object.byteOffset, object.length); + + case numberTag: + case stringTag: + return new Ctor(object); + + case regexpTag: + var result = new Ctor(object.source, reFlags.exec(object)); + result.lastIndex = object.lastIndex; + } + return result; + } + + /** + * Invokes the method at `path` on `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the method to invoke. + * @param {Array} args The arguments to invoke the method with. + * @returns {*} Returns the result of the invoked method. + */ + function invokePath(object, path, args) { + if (object != null && !isKey(path, object)) { + path = toPath(path); + object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1)); + path = last(path); + } + var func = object == null ? object : object[path]; + return func == null ? undefined : func.apply(object, args); + } + + /** + * Checks if `value` is array-like. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + */ + function isArrayLike(value) { + return value != null && isLength(getLength(value)); + } + + /** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ + function isIndex(value, length) { + value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1; + length = length == null ? MAX_SAFE_INTEGER : length; + return value > -1 && value % 1 == 0 && value < length; + } + + /** + * Checks if the provided arguments are from an iteratee call. + * + * @private + * @param {*} value The potential iteratee value argument. + * @param {*} index The potential iteratee index or key argument. + * @param {*} object The potential iteratee object argument. + * @returns {boolean} Returns `true` if the arguments are from an iteratee call, else `false`. + */ + function isIterateeCall(value, index, object) { + if (!isObject(object)) { + return false; + } + var type = typeof index; + if (type == 'number' + ? (isArrayLike(object) && isIndex(index, object.length)) + : (type == 'string' && index in object)) { + var other = object[index]; + return value === value ? (value === other) : (other !== other); + } + return false; + } + + /** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ + function isKey(value, object) { + var type = typeof value; + if ((type == 'string' && reIsPlainProp.test(value)) || type == 'number') { + return true; + } + if (isArray(value)) { + return false; + } + var result = !reIsDeepProp.test(value); + return result || (object != null && value in toObject(object)); + } + + /** + * Checks if `func` has a lazy counterpart. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` has a lazy counterpart, else `false`. + */ + function isLaziable(func) { + var funcName = getFuncName(func); + if (!(funcName in LazyWrapper.prototype)) { + return false; + } + var other = lodash[funcName]; + if (func === other) { + return true; + } + var data = getData(other); + return !!data && func === data[0]; + } + + /** + * Checks if `value` is a valid array-like length. + * + * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength). + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + */ + function isLength(value) { + return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; + } + + /** + * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` if suitable for strict + * equality comparisons, else `false`. + */ + function isStrictComparable(value) { + return value === value && !isObject(value); + } + + /** + * Merges the function metadata of `source` into `data`. + * + * Merging metadata reduces the number of wrappers required to invoke a function. + * This is possible because methods like `_.bind`, `_.curry`, and `_.partial` + * may be applied regardless of execution order. Methods like `_.ary` and `_.rearg` + * augment function arguments, making the order in which they are executed important, + * preventing the merging of metadata. However, we make an exception for a safe + * common case where curried functions have `_.ary` and or `_.rearg` applied. + * + * @private + * @param {Array} data The destination metadata. + * @param {Array} source The source metadata. + * @returns {Array} Returns `data`. + */ + function mergeData(data, source) { + var bitmask = data[1], + srcBitmask = source[1], + newBitmask = bitmask | srcBitmask, + isCommon = newBitmask < ARY_FLAG; + + var isCombo = + (srcBitmask == ARY_FLAG && bitmask == CURRY_FLAG) || + (srcBitmask == ARY_FLAG && bitmask == REARG_FLAG && data[7].length <= source[8]) || + (srcBitmask == (ARY_FLAG | REARG_FLAG) && bitmask == CURRY_FLAG); + + // Exit early if metadata can't be merged. + if (!(isCommon || isCombo)) { + return data; + } + // Use source `thisArg` if available. + if (srcBitmask & BIND_FLAG) { + data[2] = source[2]; + // Set when currying a bound function. + newBitmask |= (bitmask & BIND_FLAG) ? 0 : CURRY_BOUND_FLAG; + } + // Compose partial arguments. + var value = source[3]; + if (value) { + var partials = data[3]; + data[3] = partials ? composeArgs(partials, value, source[4]) : arrayCopy(value); + data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : arrayCopy(source[4]); + } + // Compose partial right arguments. + value = source[5]; + if (value) { + partials = data[5]; + data[5] = partials ? composeArgsRight(partials, value, source[6]) : arrayCopy(value); + data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : arrayCopy(source[6]); + } + // Use source `argPos` if available. + value = source[7]; + if (value) { + data[7] = arrayCopy(value); + } + // Use source `ary` if it's smaller. + if (srcBitmask & ARY_FLAG) { + data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]); + } + // Use source `arity` if one is not provided. + if (data[9] == null) { + data[9] = source[9]; + } + // Use source `func` and merge bitmasks. + data[0] = source[0]; + data[1] = newBitmask; + + return data; + } + + /** + * Used by `_.defaultsDeep` to customize its `_.merge` use. + * + * @private + * @param {*} objectValue The destination object property value. + * @param {*} sourceValue The source object property value. + * @returns {*} Returns the value to assign to the destination object. + */ + function mergeDefaults(objectValue, sourceValue) { + return objectValue === undefined ? sourceValue : merge(objectValue, sourceValue, mergeDefaults); + } + + /** + * A specialized version of `_.pick` which picks `object` properties specified + * by `props`. + * + * @private + * @param {Object} object The source object. + * @param {string[]} props The property names to pick. + * @returns {Object} Returns the new object. + */ + function pickByArray(object, props) { + object = toObject(object); + + var index = -1, + length = props.length, + result = {}; + + while (++index < length) { + var key = props[index]; + if (key in object) { + result[key] = object[key]; + } + } + return result; + } + + /** + * A specialized version of `_.pick` which picks `object` properties `predicate` + * returns truthy for. + * + * @private + * @param {Object} object The source object. + * @param {Function} predicate The function invoked per iteration. + * @returns {Object} Returns the new object. + */ + function pickByCallback(object, predicate) { + var result = {}; + baseForIn(object, function(value, key, object) { + if (predicate(value, key, object)) { + result[key] = value; + } + }); + return result; + } + + /** + * Reorder `array` according to the specified indexes where the element at + * the first index is assigned as the first element, the element at + * the second index is assigned as the second element, and so on. + * + * @private + * @param {Array} array The array to reorder. + * @param {Array} indexes The arranged array indexes. + * @returns {Array} Returns `array`. + */ + function reorder(array, indexes) { + var arrLength = array.length, + length = nativeMin(indexes.length, arrLength), + oldArray = arrayCopy(array); + + while (length--) { + var index = indexes[length]; + array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined; + } + return array; + } + + /** + * Sets metadata for `func`. + * + * **Note:** If this function becomes hot, i.e. is invoked a lot in a short + * period of time, it will trip its breaker and transition to an identity function + * to avoid garbage collection pauses in V8. See [V8 issue 2070](https://code.google.com/p/v8/issues/detail?id=2070) + * for more details. + * + * @private + * @param {Function} func The function to associate metadata with. + * @param {*} data The metadata. + * @returns {Function} Returns `func`. + */ + var setData = (function() { + var count = 0, + lastCalled = 0; + + return function(key, value) { + var stamp = now(), + remaining = HOT_SPAN - (stamp - lastCalled); + + lastCalled = stamp; + if (remaining > 0) { + if (++count >= HOT_COUNT) { + return key; + } + } else { + count = 0; + } + return baseSetData(key, value); + }; + }()); + + /** + * A fallback implementation of `Object.keys` which creates an array of the + * own enumerable property names of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function shimKeys(object) { + var props = keysIn(object), + propsLength = props.length, + length = propsLength && object.length; + + var allowIndexes = !!length && isLength(length) && + (isArray(object) || isArguments(object)); + + var index = -1, + result = []; + + while (++index < propsLength) { + var key = props[index]; + if ((allowIndexes && isIndex(key, length)) || hasOwnProperty.call(object, key)) { + result.push(key); + } + } + return result; + } + + /** + * Converts `value` to an array-like object if it's not one. + * + * @private + * @param {*} value The value to process. + * @returns {Array|Object} Returns the array-like object. + */ + function toIterable(value) { + if (value == null) { + return []; + } + if (!isArrayLike(value)) { + return values(value); + } + return isObject(value) ? value : Object(value); + } + + /** + * Converts `value` to an object if it's not one. + * + * @private + * @param {*} value The value to process. + * @returns {Object} Returns the object. + */ + function toObject(value) { + return isObject(value) ? value : Object(value); + } + + /** + * Converts `value` to property path array if it's not one. + * + * @private + * @param {*} value The value to process. + * @returns {Array} Returns the property path array. + */ + function toPath(value) { + if (isArray(value)) { + return value; + } + var result = []; + baseToString(value).replace(rePropName, function(match, number, quote, string) { + result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; + } + + /** + * Creates a clone of `wrapper`. + * + * @private + * @param {Object} wrapper The wrapper to clone. + * @returns {Object} Returns the cloned wrapper. + */ + function wrapperClone(wrapper) { + return wrapper instanceof LazyWrapper + ? wrapper.clone() + : new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__, arrayCopy(wrapper.__actions__)); + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates an array of elements split into groups the length of `size`. + * If `collection` can't be split evenly, the final chunk will be the remaining + * elements. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to process. + * @param {number} [size=1] The length of each chunk. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Array} Returns the new array containing chunks. + * @example + * + * _.chunk(['a', 'b', 'c', 'd'], 2); + * // => [['a', 'b'], ['c', 'd']] + * + * _.chunk(['a', 'b', 'c', 'd'], 3); + * // => [['a', 'b', 'c'], ['d']] + */ + function chunk(array, size, guard) { + if (guard ? isIterateeCall(array, size, guard) : size == null) { + size = 1; + } else { + size = nativeMax(nativeFloor(size) || 1, 1); + } + var index = 0, + length = array ? array.length : 0, + resIndex = -1, + result = Array(nativeCeil(length / size)); + + while (index < length) { + result[++resIndex] = baseSlice(array, index, (index += size)); + } + return result; + } + + /** + * Creates an array with all falsey values removed. The values `false`, `null`, + * `0`, `""`, `undefined`, and `NaN` are falsey. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to compact. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.compact([0, 1, false, 2, '', 3]); + * // => [1, 2, 3] + */ + function compact(array) { + var index = -1, + length = array ? array.length : 0, + resIndex = -1, + result = []; + + while (++index < length) { + var value = array[index]; + if (value) { + result[++resIndex] = value; + } + } + return result; + } + + /** + * Creates an array of unique `array` values not included in the other + * provided arrays using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The arrays of values to exclude. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.difference([1, 2, 3], [4, 2]); + * // => [1, 3] + */ + var difference = restParam(function(array, values) { + return (isObjectLike(array) && isArrayLike(array)) + ? baseDifference(array, baseFlatten(values, false, true)) + : []; + }); + + /** + * Creates a slice of `array` with `n` elements dropped from the beginning. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to drop. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.drop([1, 2, 3]); + * // => [2, 3] + * + * _.drop([1, 2, 3], 2); + * // => [3] + * + * _.drop([1, 2, 3], 5); + * // => [] + * + * _.drop([1, 2, 3], 0); + * // => [1, 2, 3] + */ + function drop(array, n, guard) { + var length = array ? array.length : 0; + if (!length) { + return []; + } + if (guard ? isIterateeCall(array, n, guard) : n == null) { + n = 1; + } + return baseSlice(array, n < 0 ? 0 : n); + } + + /** + * Creates a slice of `array` with `n` elements dropped from the end. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to drop. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.dropRight([1, 2, 3]); + * // => [1, 2] + * + * _.dropRight([1, 2, 3], 2); + * // => [1] + * + * _.dropRight([1, 2, 3], 5); + * // => [] + * + * _.dropRight([1, 2, 3], 0); + * // => [1, 2, 3] + */ + function dropRight(array, n, guard) { + var length = array ? array.length : 0; + if (!length) { + return []; + } + if (guard ? isIterateeCall(array, n, guard) : n == null) { + n = 1; + } + n = length - (+n || 0); + return baseSlice(array, 0, n < 0 ? 0 : n); + } + + /** + * Creates a slice of `array` excluding elements dropped from the end. + * Elements are dropped until `predicate` returns falsey. The predicate is + * bound to `thisArg` and invoked with three arguments: (value, index, array). + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that match the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.dropRightWhile([1, 2, 3], function(n) { + * return n > 1; + * }); + * // => [1] + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * // using the `_.matches` callback shorthand + * _.pluck(_.dropRightWhile(users, { 'user': 'pebbles', 'active': false }), 'user'); + * // => ['barney', 'fred'] + * + * // using the `_.matchesProperty` callback shorthand + * _.pluck(_.dropRightWhile(users, 'active', false), 'user'); + * // => ['barney'] + * + * // using the `_.property` callback shorthand + * _.pluck(_.dropRightWhile(users, 'active'), 'user'); + * // => ['barney', 'fred', 'pebbles'] + */ + function dropRightWhile(array, predicate, thisArg) { + return (array && array.length) + ? baseWhile(array, getCallback(predicate, thisArg, 3), true, true) + : []; + } + + /** + * Creates a slice of `array` excluding elements dropped from the beginning. + * Elements are dropped until `predicate` returns falsey. The predicate is + * bound to `thisArg` and invoked with three arguments: (value, index, array). + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.dropWhile([1, 2, 3], function(n) { + * return n < 3; + * }); + * // => [3] + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * // using the `_.matches` callback shorthand + * _.pluck(_.dropWhile(users, { 'user': 'barney', 'active': false }), 'user'); + * // => ['fred', 'pebbles'] + * + * // using the `_.matchesProperty` callback shorthand + * _.pluck(_.dropWhile(users, 'active', false), 'user'); + * // => ['pebbles'] + * + * // using the `_.property` callback shorthand + * _.pluck(_.dropWhile(users, 'active'), 'user'); + * // => ['barney', 'fred', 'pebbles'] + */ + function dropWhile(array, predicate, thisArg) { + return (array && array.length) + ? baseWhile(array, getCallback(predicate, thisArg, 3), true) + : []; + } + + /** + * Fills elements of `array` with `value` from `start` up to, but not + * including, `end`. + * + * **Note:** This method mutates `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to fill. + * @param {*} value The value to fill `array` with. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns `array`. + * @example + * + * var array = [1, 2, 3]; + * + * _.fill(array, 'a'); + * console.log(array); + * // => ['a', 'a', 'a'] + * + * _.fill(Array(3), 2); + * // => [2, 2, 2] + * + * _.fill([4, 6, 8], '*', 1, 2); + * // => [4, '*', 8] + */ + function fill(array, value, start, end) { + var length = array ? array.length : 0; + if (!length) { + return []; + } + if (start && typeof start != 'number' && isIterateeCall(array, value, start)) { + start = 0; + end = length; + } + return baseFill(array, value, start, end); + } + + /** + * This method is like `_.find` except that it returns the index of the first + * element `predicate` returns truthy for instead of the element itself. + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to search. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.findIndex(users, function(chr) { + * return chr.user == 'barney'; + * }); + * // => 0 + * + * // using the `_.matches` callback shorthand + * _.findIndex(users, { 'user': 'fred', 'active': false }); + * // => 1 + * + * // using the `_.matchesProperty` callback shorthand + * _.findIndex(users, 'active', false); + * // => 0 + * + * // using the `_.property` callback shorthand + * _.findIndex(users, 'active'); + * // => 2 + */ + var findIndex = createFindIndex(); + + /** + * This method is like `_.findIndex` except that it iterates over elements + * of `collection` from right to left. + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to search. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * _.findLastIndex(users, function(chr) { + * return chr.user == 'pebbles'; + * }); + * // => 2 + * + * // using the `_.matches` callback shorthand + * _.findLastIndex(users, { 'user': 'barney', 'active': true }); + * // => 0 + * + * // using the `_.matchesProperty` callback shorthand + * _.findLastIndex(users, 'active', false); + * // => 2 + * + * // using the `_.property` callback shorthand + * _.findLastIndex(users, 'active'); + * // => 0 + */ + var findLastIndex = createFindIndex(true); + + /** + * Gets the first element of `array`. + * + * @static + * @memberOf _ + * @alias head + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the first element of `array`. + * @example + * + * _.first([1, 2, 3]); + * // => 1 + * + * _.first([]); + * // => undefined + */ + function first(array) { + return array ? array[0] : undefined; + } + + /** + * Flattens a nested array. If `isDeep` is `true` the array is recursively + * flattened, otherwise it is only flattened a single level. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to flatten. + * @param {boolean} [isDeep] Specify a deep flatten. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, 3, [4]]]); + * // => [1, 2, 3, [4]] + * + * // using `isDeep` + * _.flatten([1, [2, 3, [4]]], true); + * // => [1, 2, 3, 4] + */ + function flatten(array, isDeep, guard) { + var length = array ? array.length : 0; + if (guard && isIterateeCall(array, isDeep, guard)) { + isDeep = false; + } + return length ? baseFlatten(array, isDeep) : []; + } + + /** + * Recursively flattens a nested array. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to recursively flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flattenDeep([1, [2, 3, [4]]]); + * // => [1, 2, 3, 4] + */ + function flattenDeep(array) { + var length = array ? array.length : 0; + return length ? baseFlatten(array, true) : []; + } + + /** + * Gets the index at which the first occurrence of `value` is found in `array` + * using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons. If `fromIndex` is negative, it is used as the offset + * from the end of `array`. If `array` is sorted providing `true` for `fromIndex` + * performs a faster binary search. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to search. + * @param {*} value The value to search for. + * @param {boolean|number} [fromIndex=0] The index to search from or `true` + * to perform a binary search on a sorted array. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.indexOf([1, 2, 1, 2], 2); + * // => 1 + * + * // using `fromIndex` + * _.indexOf([1, 2, 1, 2], 2, 2); + * // => 3 + * + * // performing a binary search + * _.indexOf([1, 1, 2, 2], 2, true); + * // => 2 + */ + function indexOf(array, value, fromIndex) { + var length = array ? array.length : 0; + if (!length) { + return -1; + } + if (typeof fromIndex == 'number') { + fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : fromIndex; + } else if (fromIndex) { + var index = binaryIndex(array, value); + if (index < length && + (value === value ? (value === array[index]) : (array[index] !== array[index]))) { + return index; + } + return -1; + } + return baseIndexOf(array, value, fromIndex || 0); + } + + /** + * Gets all but the last element of `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.initial([1, 2, 3]); + * // => [1, 2] + */ + function initial(array) { + return dropRight(array, 1); + } + + /** + * Creates an array of unique values that are included in all of the provided + * arrays using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of shared values. + * @example + * _.intersection([1, 2], [4, 2], [2, 1]); + * // => [2] + */ + var intersection = restParam(function(arrays) { + var othLength = arrays.length, + othIndex = othLength, + caches = Array(length), + indexOf = getIndexOf(), + isCommon = indexOf == baseIndexOf, + result = []; + + while (othIndex--) { + var value = arrays[othIndex] = isArrayLike(value = arrays[othIndex]) ? value : []; + caches[othIndex] = (isCommon && value.length >= 120) ? createCache(othIndex && value) : null; + } + var array = arrays[0], + index = -1, + length = array ? array.length : 0, + seen = caches[0]; + + outer: + while (++index < length) { + value = array[index]; + if ((seen ? cacheIndexOf(seen, value) : indexOf(result, value, 0)) < 0) { + var othIndex = othLength; + while (--othIndex) { + var cache = caches[othIndex]; + if ((cache ? cacheIndexOf(cache, value) : indexOf(arrays[othIndex], value, 0)) < 0) { + continue outer; + } + } + if (seen) { + seen.push(value); + } + result.push(value); + } + } + return result; + }); + + /** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ + function last(array) { + var length = array ? array.length : 0; + return length ? array[length - 1] : undefined; + } + + /** + * This method is like `_.indexOf` except that it iterates over elements of + * `array` from right to left. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to search. + * @param {*} value The value to search for. + * @param {boolean|number} [fromIndex=array.length-1] The index to search from + * or `true` to perform a binary search on a sorted array. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.lastIndexOf([1, 2, 1, 2], 2); + * // => 3 + * + * // using `fromIndex` + * _.lastIndexOf([1, 2, 1, 2], 2, 2); + * // => 1 + * + * // performing a binary search + * _.lastIndexOf([1, 1, 2, 2], 2, true); + * // => 3 + */ + function lastIndexOf(array, value, fromIndex) { + var length = array ? array.length : 0; + if (!length) { + return -1; + } + var index = length; + if (typeof fromIndex == 'number') { + index = (fromIndex < 0 ? nativeMax(length + fromIndex, 0) : nativeMin(fromIndex || 0, length - 1)) + 1; + } else if (fromIndex) { + index = binaryIndex(array, value, true) - 1; + var other = array[index]; + if (value === value ? (value === other) : (other !== other)) { + return index; + } + return -1; + } + if (value !== value) { + return indexOfNaN(array, index, true); + } + while (index--) { + if (array[index] === value) { + return index; + } + } + return -1; + } + + /** + * Removes all provided values from `array` using + * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons. + * + * **Note:** Unlike `_.without`, this method mutates `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to modify. + * @param {...*} [values] The values to remove. + * @returns {Array} Returns `array`. + * @example + * + * var array = [1, 2, 3, 1, 2, 3]; + * + * _.pull(array, 2, 3); + * console.log(array); + * // => [1, 1] + */ + function pull() { + var args = arguments, + array = args[0]; + + if (!(array && array.length)) { + return array; + } + var index = 0, + indexOf = getIndexOf(), + length = args.length; + + while (++index < length) { + var fromIndex = 0, + value = args[index]; + + while ((fromIndex = indexOf(array, value, fromIndex)) > -1) { + splice.call(array, fromIndex, 1); + } + } + return array; + } + + /** + * Removes elements from `array` corresponding to the given indexes and returns + * an array of the removed elements. Indexes may be specified as an array of + * indexes or as individual arguments. + * + * **Note:** Unlike `_.at`, this method mutates `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to modify. + * @param {...(number|number[])} [indexes] The indexes of elements to remove, + * specified as individual indexes or arrays of indexes. + * @returns {Array} Returns the new array of removed elements. + * @example + * + * var array = [5, 10, 15, 20]; + * var evens = _.pullAt(array, 1, 3); + * + * console.log(array); + * // => [5, 15] + * + * console.log(evens); + * // => [10, 20] + */ + var pullAt = restParam(function(array, indexes) { + indexes = baseFlatten(indexes); + + var result = baseAt(array, indexes); + basePullAt(array, indexes.sort(baseCompareAscending)); + return result; + }); + + /** + * Removes all elements from `array` that `predicate` returns truthy for + * and returns an array of the removed elements. The predicate is bound to + * `thisArg` and invoked with three arguments: (value, index, array). + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * **Note:** Unlike `_.filter`, this method mutates `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to modify. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {Array} Returns the new array of removed elements. + * @example + * + * var array = [1, 2, 3, 4]; + * var evens = _.remove(array, function(n) { + * return n % 2 == 0; + * }); + * + * console.log(array); + * // => [1, 3] + * + * console.log(evens); + * // => [2, 4] + */ + function remove(array, predicate, thisArg) { + var result = []; + if (!(array && array.length)) { + return result; + } + var index = -1, + indexes = [], + length = array.length; + + predicate = getCallback(predicate, thisArg, 3); + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result.push(value); + indexes.push(index); + } + } + basePullAt(array, indexes); + return result; + } + + /** + * Gets all but the first element of `array`. + * + * @static + * @memberOf _ + * @alias tail + * @category Array + * @param {Array} array The array to query. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.rest([1, 2, 3]); + * // => [2, 3] + */ + function rest(array) { + return drop(array, 1); + } + + /** + * Creates a slice of `array` from `start` up to, but not including, `end`. + * + * **Note:** This method is used instead of `Array#slice` to support node + * lists in IE < 9 and to ensure dense arrays are returned. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ + function slice(array, start, end) { + var length = array ? array.length : 0; + if (!length) { + return []; + } + if (end && typeof end != 'number' && isIterateeCall(array, start, end)) { + start = 0; + end = length; + } + return baseSlice(array, start, end); + } + + /** + * Uses a binary search to determine the lowest index at which `value` should + * be inserted into `array` in order to maintain its sort order. If an iteratee + * function is provided it is invoked for `value` and each element of `array` + * to compute their sort ranking. The iteratee is bound to `thisArg` and + * invoked with one argument; (value). + * + * If a property name is provided for `iteratee` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `iteratee` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function|Object|string} [iteratee=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * _.sortedIndex([30, 50], 40); + * // => 1 + * + * _.sortedIndex([4, 4, 5, 5], 5); + * // => 2 + * + * var dict = { 'data': { 'thirty': 30, 'forty': 40, 'fifty': 50 } }; + * + * // using an iteratee function + * _.sortedIndex(['thirty', 'fifty'], 'forty', function(word) { + * return this.data[word]; + * }, dict); + * // => 1 + * + * // using the `_.property` callback shorthand + * _.sortedIndex([{ 'x': 30 }, { 'x': 50 }], { 'x': 40 }, 'x'); + * // => 1 + */ + var sortedIndex = createSortedIndex(); + + /** + * This method is like `_.sortedIndex` except that it returns the highest + * index at which `value` should be inserted into `array` in order to + * maintain its sort order. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function|Object|string} [iteratee=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * _.sortedLastIndex([4, 4, 5, 5], 5); + * // => 4 + */ + var sortedLastIndex = createSortedIndex(true); + + /** + * Creates a slice of `array` with `n` elements taken from the beginning. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to take. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.take([1, 2, 3]); + * // => [1] + * + * _.take([1, 2, 3], 2); + * // => [1, 2] + * + * _.take([1, 2, 3], 5); + * // => [1, 2, 3] + * + * _.take([1, 2, 3], 0); + * // => [] + */ + function take(array, n, guard) { + var length = array ? array.length : 0; + if (!length) { + return []; + } + if (guard ? isIterateeCall(array, n, guard) : n == null) { + n = 1; + } + return baseSlice(array, 0, n < 0 ? 0 : n); + } + + /** + * Creates a slice of `array` with `n` elements taken from the end. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to take. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.takeRight([1, 2, 3]); + * // => [3] + * + * _.takeRight([1, 2, 3], 2); + * // => [2, 3] + * + * _.takeRight([1, 2, 3], 5); + * // => [1, 2, 3] + * + * _.takeRight([1, 2, 3], 0); + * // => [] + */ + function takeRight(array, n, guard) { + var length = array ? array.length : 0; + if (!length) { + return []; + } + if (guard ? isIterateeCall(array, n, guard) : n == null) { + n = 1; + } + n = length - (+n || 0); + return baseSlice(array, n < 0 ? 0 : n); + } + + /** + * Creates a slice of `array` with elements taken from the end. Elements are + * taken until `predicate` returns falsey. The predicate is bound to `thisArg` + * and invoked with three arguments: (value, index, array). + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.takeRightWhile([1, 2, 3], function(n) { + * return n > 1; + * }); + * // => [2, 3] + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * // using the `_.matches` callback shorthand + * _.pluck(_.takeRightWhile(users, { 'user': 'pebbles', 'active': false }), 'user'); + * // => ['pebbles'] + * + * // using the `_.matchesProperty` callback shorthand + * _.pluck(_.takeRightWhile(users, 'active', false), 'user'); + * // => ['fred', 'pebbles'] + * + * // using the `_.property` callback shorthand + * _.pluck(_.takeRightWhile(users, 'active'), 'user'); + * // => [] + */ + function takeRightWhile(array, predicate, thisArg) { + return (array && array.length) + ? baseWhile(array, getCallback(predicate, thisArg, 3), false, true) + : []; + } + + /** + * Creates a slice of `array` with elements taken from the beginning. Elements + * are taken until `predicate` returns falsey. The predicate is bound to + * `thisArg` and invoked with three arguments: (value, index, array). + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.takeWhile([1, 2, 3], function(n) { + * return n < 3; + * }); + * // => [1, 2] + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false}, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * // using the `_.matches` callback shorthand + * _.pluck(_.takeWhile(users, { 'user': 'barney', 'active': false }), 'user'); + * // => ['barney'] + * + * // using the `_.matchesProperty` callback shorthand + * _.pluck(_.takeWhile(users, 'active', false), 'user'); + * // => ['barney', 'fred'] + * + * // using the `_.property` callback shorthand + * _.pluck(_.takeWhile(users, 'active'), 'user'); + * // => [] + */ + function takeWhile(array, predicate, thisArg) { + return (array && array.length) + ? baseWhile(array, getCallback(predicate, thisArg, 3)) + : []; + } + + /** + * Creates an array of unique values, in order, from all of the provided arrays + * using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.union([1, 2], [4, 2], [2, 1]); + * // => [1, 2, 4] + */ + var union = restParam(function(arrays) { + return baseUniq(baseFlatten(arrays, false, true)); + }); + + /** + * Creates a duplicate-free version of an array, using + * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons, in which only the first occurence of each element + * is kept. Providing `true` for `isSorted` performs a faster search algorithm + * for sorted arrays. If an iteratee function is provided it is invoked for + * each element in the array to generate the criterion by which uniqueness + * is computed. The `iteratee` is bound to `thisArg` and invoked with three + * arguments: (value, index, array). + * + * If a property name is provided for `iteratee` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `iteratee` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @alias unique + * @category Array + * @param {Array} array The array to inspect. + * @param {boolean} [isSorted] Specify the array is sorted. + * @param {Function|Object|string} [iteratee] The function invoked per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Array} Returns the new duplicate-value-free array. + * @example + * + * _.uniq([2, 1, 2]); + * // => [2, 1] + * + * // using `isSorted` + * _.uniq([1, 1, 2], true); + * // => [1, 2] + * + * // using an iteratee function + * _.uniq([1, 2.5, 1.5, 2], function(n) { + * return this.floor(n); + * }, Math); + * // => [1, 2.5] + * + * // using the `_.property` callback shorthand + * _.uniq([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }, { 'x': 2 }] + */ + function uniq(array, isSorted, iteratee, thisArg) { + var length = array ? array.length : 0; + if (!length) { + return []; + } + if (isSorted != null && typeof isSorted != 'boolean') { + thisArg = iteratee; + iteratee = isIterateeCall(array, isSorted, thisArg) ? undefined : isSorted; + isSorted = false; + } + var callback = getCallback(); + if (!(iteratee == null && callback === baseCallback)) { + iteratee = callback(iteratee, thisArg, 3); + } + return (isSorted && getIndexOf() == baseIndexOf) + ? sortedUniq(array, iteratee) + : baseUniq(array, iteratee); + } + + /** + * This method is like `_.zip` except that it accepts an array of grouped + * elements and creates an array regrouping the elements to their pre-zip + * configuration. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array of grouped elements to process. + * @returns {Array} Returns the new array of regrouped elements. + * @example + * + * var zipped = _.zip(['fred', 'barney'], [30, 40], [true, false]); + * // => [['fred', 30, true], ['barney', 40, false]] + * + * _.unzip(zipped); + * // => [['fred', 'barney'], [30, 40], [true, false]] + */ + function unzip(array) { + if (!(array && array.length)) { + return []; + } + var index = -1, + length = 0; + + array = arrayFilter(array, function(group) { + if (isArrayLike(group)) { + length = nativeMax(group.length, length); + return true; + } + }); + var result = Array(length); + while (++index < length) { + result[index] = arrayMap(array, baseProperty(index)); + } + return result; + } + + /** + * This method is like `_.unzip` except that it accepts an iteratee to specify + * how regrouped values should be combined. The `iteratee` is bound to `thisArg` + * and invoked with four arguments: (accumulator, value, index, group). + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array of grouped elements to process. + * @param {Function} [iteratee] The function to combine regrouped values. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Array} Returns the new array of regrouped elements. + * @example + * + * var zipped = _.zip([1, 2], [10, 20], [100, 200]); + * // => [[1, 10, 100], [2, 20, 200]] + * + * _.unzipWith(zipped, _.add); + * // => [3, 30, 300] + */ + function unzipWith(array, iteratee, thisArg) { + var length = array ? array.length : 0; + if (!length) { + return []; + } + var result = unzip(array); + if (iteratee == null) { + return result; + } + iteratee = bindCallback(iteratee, thisArg, 4); + return arrayMap(result, function(group) { + return arrayReduce(group, iteratee, undefined, true); + }); + } + + /** + * Creates an array excluding all provided values using + * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to filter. + * @param {...*} [values] The values to exclude. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.without([1, 2, 1, 3], 1, 2); + * // => [3] + */ + var without = restParam(function(array, values) { + return isArrayLike(array) + ? baseDifference(array, values) + : []; + }); + + /** + * Creates an array of unique values that is the [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference) + * of the provided arrays. + * + * @static + * @memberOf _ + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of values. + * @example + * + * _.xor([1, 2], [4, 2]); + * // => [1, 4] + */ + function xor() { + var index = -1, + length = arguments.length; + + while (++index < length) { + var array = arguments[index]; + if (isArrayLike(array)) { + var result = result + ? arrayPush(baseDifference(result, array), baseDifference(array, result)) + : array; + } + } + return result ? baseUniq(result) : []; + } + + /** + * Creates an array of grouped elements, the first of which contains the first + * elements of the given arrays, the second of which contains the second elements + * of the given arrays, and so on. + * + * @static + * @memberOf _ + * @category Array + * @param {...Array} [arrays] The arrays to process. + * @returns {Array} Returns the new array of grouped elements. + * @example + * + * _.zip(['fred', 'barney'], [30, 40], [true, false]); + * // => [['fred', 30, true], ['barney', 40, false]] + */ + var zip = restParam(unzip); + + /** + * The inverse of `_.pairs`; this method returns an object composed from arrays + * of property names and values. Provide either a single two dimensional array, + * e.g. `[[key1, value1], [key2, value2]]` or two arrays, one of property names + * and one of corresponding values. + * + * @static + * @memberOf _ + * @alias object + * @category Array + * @param {Array} props The property names. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObject([['fred', 30], ['barney', 40]]); + * // => { 'fred': 30, 'barney': 40 } + * + * _.zipObject(['fred', 'barney'], [30, 40]); + * // => { 'fred': 30, 'barney': 40 } + */ + function zipObject(props, values) { + var index = -1, + length = props ? props.length : 0, + result = {}; + + if (length && !values && !isArray(props[0])) { + values = []; + } + while (++index < length) { + var key = props[index]; + if (values) { + result[key] = values[index]; + } else if (key) { + result[key[0]] = key[1]; + } + } + return result; + } + + /** + * This method is like `_.zip` except that it accepts an iteratee to specify + * how grouped values should be combined. The `iteratee` is bound to `thisArg` + * and invoked with four arguments: (accumulator, value, index, group). + * + * @static + * @memberOf _ + * @category Array + * @param {...Array} [arrays] The arrays to process. + * @param {Function} [iteratee] The function to combine grouped values. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Array} Returns the new array of grouped elements. + * @example + * + * _.zipWith([1, 2], [10, 20], [100, 200], _.add); + * // => [111, 222] + */ + var zipWith = restParam(function(arrays) { + var length = arrays.length, + iteratee = length > 2 ? arrays[length - 2] : undefined, + thisArg = length > 1 ? arrays[length - 1] : undefined; + + if (length > 2 && typeof iteratee == 'function') { + length -= 2; + } else { + iteratee = (length > 1 && typeof thisArg == 'function') ? (--length, thisArg) : undefined; + thisArg = undefined; + } + arrays.length = length; + return unzipWith(arrays, iteratee, thisArg); + }); + + /*------------------------------------------------------------------------*/ + + /** + * Creates a `lodash` object that wraps `value` with explicit method + * chaining enabled. + * + * @static + * @memberOf _ + * @category Chain + * @param {*} value The value to wrap. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 }, + * { 'user': 'pebbles', 'age': 1 } + * ]; + * + * var youngest = _.chain(users) + * .sortBy('age') + * .map(function(chr) { + * return chr.user + ' is ' + chr.age; + * }) + * .first() + * .value(); + * // => 'pebbles is 1' + */ + function chain(value) { + var result = lodash(value); + result.__chain__ = true; + return result; + } + + /** + * This method invokes `interceptor` and returns `value`. The interceptor is + * bound to `thisArg` and invoked with one argument; (value). The purpose of + * this method is to "tap into" a method chain in order to perform operations + * on intermediate results within the chain. + * + * @static + * @memberOf _ + * @category Chain + * @param {*} value The value to provide to `interceptor`. + * @param {Function} interceptor The function to invoke. + * @param {*} [thisArg] The `this` binding of `interceptor`. + * @returns {*} Returns `value`. + * @example + * + * _([1, 2, 3]) + * .tap(function(array) { + * array.pop(); + * }) + * .reverse() + * .value(); + * // => [2, 1] + */ + function tap(value, interceptor, thisArg) { + interceptor.call(thisArg, value); + return value; + } + + /** + * This method is like `_.tap` except that it returns the result of `interceptor`. + * + * @static + * @memberOf _ + * @category Chain + * @param {*} value The value to provide to `interceptor`. + * @param {Function} interceptor The function to invoke. + * @param {*} [thisArg] The `this` binding of `interceptor`. + * @returns {*} Returns the result of `interceptor`. + * @example + * + * _(' abc ') + * .chain() + * .trim() + * .thru(function(value) { + * return [value]; + * }) + * .value(); + * // => ['abc'] + */ + function thru(value, interceptor, thisArg) { + return interceptor.call(thisArg, value); + } + + /** + * Enables explicit method chaining on the wrapper object. + * + * @name chain + * @memberOf _ + * @category Chain + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 } + * ]; + * + * // without explicit chaining + * _(users).first(); + * // => { 'user': 'barney', 'age': 36 } + * + * // with explicit chaining + * _(users).chain() + * .first() + * .pick('user') + * .value(); + * // => { 'user': 'barney' } + */ + function wrapperChain() { + return chain(this); + } + + /** + * Executes the chained sequence and returns the wrapped result. + * + * @name commit + * @memberOf _ + * @category Chain + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var array = [1, 2]; + * var wrapped = _(array).push(3); + * + * console.log(array); + * // => [1, 2] + * + * wrapped = wrapped.commit(); + * console.log(array); + * // => [1, 2, 3] + * + * wrapped.last(); + * // => 3 + * + * console.log(array); + * // => [1, 2, 3] + */ + function wrapperCommit() { + return new LodashWrapper(this.value(), this.__chain__); + } + + /** + * Creates a new array joining a wrapped array with any additional arrays + * and/or values. + * + * @name concat + * @memberOf _ + * @category Chain + * @param {...*} [values] The values to concatenate. + * @returns {Array} Returns the new concatenated array. + * @example + * + * var array = [1]; + * var wrapped = _(array).concat(2, [3], [[4]]); + * + * console.log(wrapped.value()); + * // => [1, 2, 3, [4]] + * + * console.log(array); + * // => [1] + */ + var wrapperConcat = restParam(function(values) { + values = baseFlatten(values); + return this.thru(function(array) { + return arrayConcat(isArray(array) ? array : [toObject(array)], values); + }); + }); + + /** + * Creates a clone of the chained sequence planting `value` as the wrapped value. + * + * @name plant + * @memberOf _ + * @category Chain + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var array = [1, 2]; + * var wrapped = _(array).map(function(value) { + * return Math.pow(value, 2); + * }); + * + * var other = [3, 4]; + * var otherWrapped = wrapped.plant(other); + * + * otherWrapped.value(); + * // => [9, 16] + * + * wrapped.value(); + * // => [1, 4] + */ + function wrapperPlant(value) { + var result, + parent = this; + + while (parent instanceof baseLodash) { + var clone = wrapperClone(parent); + if (result) { + previous.__wrapped__ = clone; + } else { + result = clone; + } + var previous = clone; + parent = parent.__wrapped__; + } + previous.__wrapped__ = value; + return result; + } + + /** + * Reverses the wrapped array so the first element becomes the last, the + * second element becomes the second to last, and so on. + * + * **Note:** This method mutates the wrapped array. + * + * @name reverse + * @memberOf _ + * @category Chain + * @returns {Object} Returns the new reversed `lodash` wrapper instance. + * @example + * + * var array = [1, 2, 3]; + * + * _(array).reverse().value() + * // => [3, 2, 1] + * + * console.log(array); + * // => [3, 2, 1] + */ + function wrapperReverse() { + var value = this.__wrapped__; + + var interceptor = function(value) { + return (wrapped && wrapped.__dir__ < 0) ? value : value.reverse(); + }; + if (value instanceof LazyWrapper) { + var wrapped = value; + if (this.__actions__.length) { + wrapped = new LazyWrapper(this); + } + wrapped = wrapped.reverse(); + wrapped.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined }); + return new LodashWrapper(wrapped, this.__chain__); + } + return this.thru(interceptor); + } + + /** + * Produces the result of coercing the unwrapped value to a string. + * + * @name toString + * @memberOf _ + * @category Chain + * @returns {string} Returns the coerced string value. + * @example + * + * _([1, 2, 3]).toString(); + * // => '1,2,3' + */ + function wrapperToString() { + return (this.value() + ''); + } + + /** + * Executes the chained sequence to extract the unwrapped value. + * + * @name value + * @memberOf _ + * @alias run, toJSON, valueOf + * @category Chain + * @returns {*} Returns the resolved unwrapped value. + * @example + * + * _([1, 2, 3]).value(); + * // => [1, 2, 3] + */ + function wrapperValue() { + return baseWrapperValue(this.__wrapped__, this.__actions__); + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates an array of elements corresponding to the given keys, or indexes, + * of `collection`. Keys may be specified as individual arguments or as arrays + * of keys. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {...(number|number[]|string|string[])} [props] The property names + * or indexes of elements to pick, specified individually or in arrays. + * @returns {Array} Returns the new array of picked elements. + * @example + * + * _.at(['a', 'b', 'c'], [0, 2]); + * // => ['a', 'c'] + * + * _.at(['barney', 'fred', 'pebbles'], 0, 2); + * // => ['barney', 'pebbles'] + */ + var at = restParam(function(collection, props) { + return baseAt(collection, baseFlatten(props)); + }); + + /** + * Creates an object composed of keys generated from the results of running + * each element of `collection` through `iteratee`. The corresponding value + * of each key is the number of times the key was returned by `iteratee`. + * The `iteratee` is bound to `thisArg` and invoked with three arguments: + * (value, index|key, collection). + * + * If a property name is provided for `iteratee` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `iteratee` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [iteratee=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * _.countBy([4.3, 6.1, 6.4], function(n) { + * return Math.floor(n); + * }); + * // => { '4': 1, '6': 2 } + * + * _.countBy([4.3, 6.1, 6.4], function(n) { + * return this.floor(n); + * }, Math); + * // => { '4': 1, '6': 2 } + * + * _.countBy(['one', 'two', 'three'], 'length'); + * // => { '3': 2, '5': 1 } + */ + var countBy = createAggregator(function(result, value, key) { + hasOwnProperty.call(result, key) ? ++result[key] : (result[key] = 1); + }); + + /** + * Checks if `predicate` returns truthy for **all** elements of `collection`. + * The predicate is bound to `thisArg` and invoked with three arguments: + * (value, index|key, collection). + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @alias all + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false`. + * @example + * + * _.every([true, 1, null, 'yes'], Boolean); + * // => false + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false } + * ]; + * + * // using the `_.matches` callback shorthand + * _.every(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // using the `_.matchesProperty` callback shorthand + * _.every(users, 'active', false); + * // => true + * + * // using the `_.property` callback shorthand + * _.every(users, 'active'); + * // => false + */ + function every(collection, predicate, thisArg) { + var func = isArray(collection) ? arrayEvery : baseEvery; + if (thisArg && isIterateeCall(collection, predicate, thisArg)) { + predicate = undefined; + } + if (typeof predicate != 'function' || thisArg !== undefined) { + predicate = getCallback(predicate, thisArg, 3); + } + return func(collection, predicate); + } + + /** + * Iterates over elements of `collection`, returning an array of all elements + * `predicate` returns truthy for. The predicate is bound to `thisArg` and + * invoked with three arguments: (value, index|key, collection). + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @alias select + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {Array} Returns the new filtered array. + * @example + * + * _.filter([4, 5, 6], function(n) { + * return n % 2 == 0; + * }); + * // => [4, 6] + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * // using the `_.matches` callback shorthand + * _.pluck(_.filter(users, { 'age': 36, 'active': true }), 'user'); + * // => ['barney'] + * + * // using the `_.matchesProperty` callback shorthand + * _.pluck(_.filter(users, 'active', false), 'user'); + * // => ['fred'] + * + * // using the `_.property` callback shorthand + * _.pluck(_.filter(users, 'active'), 'user'); + * // => ['barney'] + */ + function filter(collection, predicate, thisArg) { + var func = isArray(collection) ? arrayFilter : baseFilter; + predicate = getCallback(predicate, thisArg, 3); + return func(collection, predicate); + } + + /** + * Iterates over elements of `collection`, returning the first element + * `predicate` returns truthy for. The predicate is bound to `thisArg` and + * invoked with three arguments: (value, index|key, collection). + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @alias detect + * @category Collection + * @param {Array|Object|string} collection The collection to search. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false }, + * { 'user': 'pebbles', 'age': 1, 'active': true } + * ]; + * + * _.result(_.find(users, function(chr) { + * return chr.age < 40; + * }), 'user'); + * // => 'barney' + * + * // using the `_.matches` callback shorthand + * _.result(_.find(users, { 'age': 1, 'active': true }), 'user'); + * // => 'pebbles' + * + * // using the `_.matchesProperty` callback shorthand + * _.result(_.find(users, 'active', false), 'user'); + * // => 'fred' + * + * // using the `_.property` callback shorthand + * _.result(_.find(users, 'active'), 'user'); + * // => 'barney' + */ + var find = createFind(baseEach); + + /** + * This method is like `_.find` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to search. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * _.findLast([1, 2, 3, 4], function(n) { + * return n % 2 == 1; + * }); + * // => 3 + */ + var findLast = createFind(baseEachRight, true); + + /** + * Performs a deep comparison between each element in `collection` and the + * source object, returning the first element that has equivalent property + * values. + * + * **Note:** This method supports comparing arrays, booleans, `Date` objects, + * numbers, `Object` objects, regexes, and strings. Objects are compared by + * their own, not inherited, enumerable properties. For comparing a single + * own or inherited property value see `_.matchesProperty`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to search. + * @param {Object} source The object of property values to match. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.result(_.findWhere(users, { 'age': 36, 'active': true }), 'user'); + * // => 'barney' + * + * _.result(_.findWhere(users, { 'age': 40, 'active': false }), 'user'); + * // => 'fred' + */ + function findWhere(collection, source) { + return find(collection, baseMatches(source)); + } + + /** + * Iterates over elements of `collection` invoking `iteratee` for each element. + * The `iteratee` is bound to `thisArg` and invoked with three arguments: + * (value, index|key, collection). Iteratee functions may exit iteration early + * by explicitly returning `false`. + * + * **Note:** As with other "Collections" methods, objects with a "length" property + * are iterated like arrays. To avoid this behavior `_.forIn` or `_.forOwn` + * may be used for object iteration. + * + * @static + * @memberOf _ + * @alias each + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Array|Object|string} Returns `collection`. + * @example + * + * _([1, 2]).forEach(function(n) { + * console.log(n); + * }).value(); + * // => logs each value from left to right and returns the array + * + * _.forEach({ 'a': 1, 'b': 2 }, function(n, key) { + * console.log(n, key); + * }); + * // => logs each value-key pair and returns the object (iteration order is not guaranteed) + */ + var forEach = createForEach(arrayEach, baseEach); + + /** + * This method is like `_.forEach` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @alias eachRight + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Array|Object|string} Returns `collection`. + * @example + * + * _([1, 2]).forEachRight(function(n) { + * console.log(n); + * }).value(); + * // => logs each value from right to left and returns the array + */ + var forEachRight = createForEach(arrayEachRight, baseEachRight); + + /** + * Creates an object composed of keys generated from the results of running + * each element of `collection` through `iteratee`. The corresponding value + * of each key is an array of the elements responsible for generating the key. + * The `iteratee` is bound to `thisArg` and invoked with three arguments: + * (value, index|key, collection). + * + * If a property name is provided for `iteratee` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `iteratee` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [iteratee=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * _.groupBy([4.2, 6.1, 6.4], function(n) { + * return Math.floor(n); + * }); + * // => { '4': [4.2], '6': [6.1, 6.4] } + * + * _.groupBy([4.2, 6.1, 6.4], function(n) { + * return this.floor(n); + * }, Math); + * // => { '4': [4.2], '6': [6.1, 6.4] } + * + * // using the `_.property` callback shorthand + * _.groupBy(['one', 'two', 'three'], 'length'); + * // => { '3': ['one', 'two'], '5': ['three'] } + */ + var groupBy = createAggregator(function(result, value, key) { + if (hasOwnProperty.call(result, key)) { + result[key].push(value); + } else { + result[key] = [value]; + } + }); + + /** + * Checks if `value` is in `collection` using + * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons. If `fromIndex` is negative, it is used as the offset + * from the end of `collection`. + * + * @static + * @memberOf _ + * @alias contains, include + * @category Collection + * @param {Array|Object|string} collection The collection to search. + * @param {*} target The value to search for. + * @param {number} [fromIndex=0] The index to search from. + * @param- {Object} [guard] Enables use as a callback for functions like `_.reduce`. + * @returns {boolean} Returns `true` if a matching element is found, else `false`. + * @example + * + * _.includes([1, 2, 3], 1); + * // => true + * + * _.includes([1, 2, 3], 1, 2); + * // => false + * + * _.includes({ 'user': 'fred', 'age': 40 }, 'fred'); + * // => true + * + * _.includes('pebbles', 'eb'); + * // => true + */ + function includes(collection, target, fromIndex, guard) { + var length = collection ? getLength(collection) : 0; + if (!isLength(length)) { + collection = values(collection); + length = collection.length; + } + if (typeof fromIndex != 'number' || (guard && isIterateeCall(target, fromIndex, guard))) { + fromIndex = 0; + } else { + fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : (fromIndex || 0); + } + return (typeof collection == 'string' || !isArray(collection) && isString(collection)) + ? (fromIndex <= length && collection.indexOf(target, fromIndex) > -1) + : (!!length && getIndexOf(collection, target, fromIndex) > -1); + } + + /** + * Creates an object composed of keys generated from the results of running + * each element of `collection` through `iteratee`. The corresponding value + * of each key is the last element responsible for generating the key. The + * iteratee function is bound to `thisArg` and invoked with three arguments: + * (value, index|key, collection). + * + * If a property name is provided for `iteratee` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `iteratee` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [iteratee=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * var keyData = [ + * { 'dir': 'left', 'code': 97 }, + * { 'dir': 'right', 'code': 100 } + * ]; + * + * _.indexBy(keyData, 'dir'); + * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } } + * + * _.indexBy(keyData, function(object) { + * return String.fromCharCode(object.code); + * }); + * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } } + * + * _.indexBy(keyData, function(object) { + * return this.fromCharCode(object.code); + * }, String); + * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } } + */ + var indexBy = createAggregator(function(result, value, key) { + result[key] = value; + }); + + /** + * Invokes the method at `path` of each element in `collection`, returning + * an array of the results of each invoked method. Any additional arguments + * are provided to each invoked method. If `methodName` is a function it is + * invoked for, and `this` bound to, each element in `collection`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Array|Function|string} path The path of the method to invoke or + * the function invoked per iteration. + * @param {...*} [args] The arguments to invoke the method with. + * @returns {Array} Returns the array of results. + * @example + * + * _.invoke([[5, 1, 7], [3, 2, 1]], 'sort'); + * // => [[1, 5, 7], [1, 2, 3]] + * + * _.invoke([123, 456], String.prototype.split, ''); + * // => [['1', '2', '3'], ['4', '5', '6']] + */ + var invoke = restParam(function(collection, path, args) { + var index = -1, + isFunc = typeof path == 'function', + isProp = isKey(path), + result = isArrayLike(collection) ? Array(collection.length) : []; + + baseEach(collection, function(value) { + var func = isFunc ? path : ((isProp && value != null) ? value[path] : undefined); + result[++index] = func ? func.apply(value, args) : invokePath(value, path, args); + }); + return result; + }); + + /** + * Creates an array of values by running each element in `collection` through + * `iteratee`. The `iteratee` is bound to `thisArg` and invoked with three + * arguments: (value, index|key, collection). + * + * If a property name is provided for `iteratee` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `iteratee` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. + * + * The guarded methods are: + * `ary`, `callback`, `chunk`, `clone`, `create`, `curry`, `curryRight`, + * `drop`, `dropRight`, `every`, `fill`, `flatten`, `invert`, `max`, `min`, + * `parseInt`, `slice`, `sortBy`, `take`, `takeRight`, `template`, `trim`, + * `trimLeft`, `trimRight`, `trunc`, `random`, `range`, `sample`, `some`, + * `sum`, `uniq`, and `words` + * + * @static + * @memberOf _ + * @alias collect + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [iteratee=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Array} Returns the new mapped array. + * @example + * + * function timesThree(n) { + * return n * 3; + * } + * + * _.map([1, 2], timesThree); + * // => [3, 6] + * + * _.map({ 'a': 1, 'b': 2 }, timesThree); + * // => [3, 6] (iteration order is not guaranteed) + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * // using the `_.property` callback shorthand + * _.map(users, 'user'); + * // => ['barney', 'fred'] + */ + function map(collection, iteratee, thisArg) { + var func = isArray(collection) ? arrayMap : baseMap; + iteratee = getCallback(iteratee, thisArg, 3); + return func(collection, iteratee); + } + + /** + * Creates an array of elements split into two groups, the first of which + * contains elements `predicate` returns truthy for, while the second of which + * contains elements `predicate` returns falsey for. The predicate is bound + * to `thisArg` and invoked with three arguments: (value, index|key, collection). + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {Array} Returns the array of grouped elements. + * @example + * + * _.partition([1, 2, 3], function(n) { + * return n % 2; + * }); + * // => [[1, 3], [2]] + * + * _.partition([1.2, 2.3, 3.4], function(n) { + * return this.floor(n) % 2; + * }, Math); + * // => [[1.2, 3.4], [2.3]] + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false }, + * { 'user': 'fred', 'age': 40, 'active': true }, + * { 'user': 'pebbles', 'age': 1, 'active': false } + * ]; + * + * var mapper = function(array) { + * return _.pluck(array, 'user'); + * }; + * + * // using the `_.matches` callback shorthand + * _.map(_.partition(users, { 'age': 1, 'active': false }), mapper); + * // => [['pebbles'], ['barney', 'fred']] + * + * // using the `_.matchesProperty` callback shorthand + * _.map(_.partition(users, 'active', false), mapper); + * // => [['barney', 'pebbles'], ['fred']] + * + * // using the `_.property` callback shorthand + * _.map(_.partition(users, 'active'), mapper); + * // => [['fred'], ['barney', 'pebbles']] + */ + var partition = createAggregator(function(result, value, key) { + result[key ? 0 : 1].push(value); + }, function() { return [[], []]; }); + + /** + * Gets the property value of `path` from all elements in `collection`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Array|string} path The path of the property to pluck. + * @returns {Array} Returns the property values. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 } + * ]; + * + * _.pluck(users, 'user'); + * // => ['barney', 'fred'] + * + * var userIndex = _.indexBy(users, 'user'); + * _.pluck(userIndex, 'age'); + * // => [36, 40] (iteration order is not guaranteed) + */ + function pluck(collection, path) { + return map(collection, property(path)); + } + + /** + * Reduces `collection` to a value which is the accumulated result of running + * each element in `collection` through `iteratee`, where each successive + * invocation is supplied the return value of the previous. If `accumulator` + * is not provided the first element of `collection` is used as the initial + * value. The `iteratee` is bound to `thisArg` and invoked with four arguments: + * (accumulator, value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.reduce`, `_.reduceRight`, and `_.transform`. + * + * The guarded methods are: + * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `sortByAll`, + * and `sortByOrder` + * + * @static + * @memberOf _ + * @alias foldl, inject + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {*} Returns the accumulated value. + * @example + * + * _.reduce([1, 2], function(total, n) { + * return total + n; + * }); + * // => 3 + * + * _.reduce({ 'a': 1, 'b': 2 }, function(result, n, key) { + * result[key] = n * 3; + * return result; + * }, {}); + * // => { 'a': 3, 'b': 6 } (iteration order is not guaranteed) + */ + var reduce = createReduce(arrayReduce, baseEach); + + /** + * This method is like `_.reduce` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @alias foldr + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {*} Returns the accumulated value. + * @example + * + * var array = [[0, 1], [2, 3], [4, 5]]; + * + * _.reduceRight(array, function(flattened, other) { + * return flattened.concat(other); + * }, []); + * // => [4, 5, 2, 3, 0, 1] + */ + var reduceRight = createReduce(arrayReduceRight, baseEachRight); + + /** + * The opposite of `_.filter`; this method returns the elements of `collection` + * that `predicate` does **not** return truthy for. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {Array} Returns the new filtered array. + * @example + * + * _.reject([1, 2, 3, 4], function(n) { + * return n % 2 == 0; + * }); + * // => [1, 3] + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false }, + * { 'user': 'fred', 'age': 40, 'active': true } + * ]; + * + * // using the `_.matches` callback shorthand + * _.pluck(_.reject(users, { 'age': 40, 'active': true }), 'user'); + * // => ['barney'] + * + * // using the `_.matchesProperty` callback shorthand + * _.pluck(_.reject(users, 'active', false), 'user'); + * // => ['fred'] + * + * // using the `_.property` callback shorthand + * _.pluck(_.reject(users, 'active'), 'user'); + * // => ['barney'] + */ + function reject(collection, predicate, thisArg) { + var func = isArray(collection) ? arrayFilter : baseFilter; + predicate = getCallback(predicate, thisArg, 3); + return func(collection, function(value, index, collection) { + return !predicate(value, index, collection); + }); + } + + /** + * Gets a random element or `n` random elements from a collection. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to sample. + * @param {number} [n] The number of elements to sample. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {*} Returns the random sample(s). + * @example + * + * _.sample([1, 2, 3, 4]); + * // => 2 + * + * _.sample([1, 2, 3, 4], 2); + * // => [3, 1] + */ + function sample(collection, n, guard) { + if (guard ? isIterateeCall(collection, n, guard) : n == null) { + collection = toIterable(collection); + var length = collection.length; + return length > 0 ? collection[baseRandom(0, length - 1)] : undefined; + } + var index = -1, + result = toArray(collection), + length = result.length, + lastIndex = length - 1; + + n = nativeMin(n < 0 ? 0 : (+n || 0), length); + while (++index < n) { + var rand = baseRandom(index, lastIndex), + value = result[rand]; + + result[rand] = result[index]; + result[index] = value; + } + result.length = n; + return result; + } + + /** + * Creates an array of shuffled values, using a version of the + * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle). + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to shuffle. + * @returns {Array} Returns the new shuffled array. + * @example + * + * _.shuffle([1, 2, 3, 4]); + * // => [4, 1, 3, 2] + */ + function shuffle(collection) { + return sample(collection, POSITIVE_INFINITY); + } + + /** + * Gets the size of `collection` by returning its length for array-like + * values or the number of own enumerable properties for objects. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @returns {number} Returns the size of `collection`. + * @example + * + * _.size([1, 2, 3]); + * // => 3 + * + * _.size({ 'a': 1, 'b': 2 }); + * // => 2 + * + * _.size('pebbles'); + * // => 7 + */ + function size(collection) { + var length = collection ? getLength(collection) : 0; + return isLength(length) ? length : keys(collection).length; + } + + /** + * Checks if `predicate` returns truthy for **any** element of `collection`. + * The function returns as soon as it finds a passing value and does not iterate + * over the entire collection. The predicate is bound to `thisArg` and invoked + * with three arguments: (value, index|key, collection). + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @alias any + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + * @example + * + * _.some([null, 0, 'yes', false], Boolean); + * // => true + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false } + * ]; + * + * // using the `_.matches` callback shorthand + * _.some(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // using the `_.matchesProperty` callback shorthand + * _.some(users, 'active', false); + * // => true + * + * // using the `_.property` callback shorthand + * _.some(users, 'active'); + * // => true + */ + function some(collection, predicate, thisArg) { + var func = isArray(collection) ? arraySome : baseSome; + if (thisArg && isIterateeCall(collection, predicate, thisArg)) { + predicate = undefined; + } + if (typeof predicate != 'function' || thisArg !== undefined) { + predicate = getCallback(predicate, thisArg, 3); + } + return func(collection, predicate); + } + + /** + * Creates an array of elements, sorted in ascending order by the results of + * running each element in a collection through `iteratee`. This method performs + * a stable sort, that is, it preserves the original sort order of equal elements. + * The `iteratee` is bound to `thisArg` and invoked with three arguments: + * (value, index|key, collection). + * + * If a property name is provided for `iteratee` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `iteratee` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [iteratee=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Array} Returns the new sorted array. + * @example + * + * _.sortBy([1, 2, 3], function(n) { + * return Math.sin(n); + * }); + * // => [3, 1, 2] + * + * _.sortBy([1, 2, 3], function(n) { + * return this.sin(n); + * }, Math); + * // => [3, 1, 2] + * + * var users = [ + * { 'user': 'fred' }, + * { 'user': 'pebbles' }, + * { 'user': 'barney' } + * ]; + * + * // using the `_.property` callback shorthand + * _.pluck(_.sortBy(users, 'user'), 'user'); + * // => ['barney', 'fred', 'pebbles'] + */ + function sortBy(collection, iteratee, thisArg) { + if (collection == null) { + return []; + } + if (thisArg && isIterateeCall(collection, iteratee, thisArg)) { + iteratee = undefined; + } + var index = -1; + iteratee = getCallback(iteratee, thisArg, 3); + + var result = baseMap(collection, function(value, key, collection) { + return { 'criteria': iteratee(value, key, collection), 'index': ++index, 'value': value }; + }); + return baseSortBy(result, compareAscending); + } + + /** + * This method is like `_.sortBy` except that it can sort by multiple iteratees + * or property names. + * + * If a property name is provided for an iteratee the created `_.property` + * style callback returns the property value of the given element. + * + * If an object is provided for an iteratee the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {...(Function|Function[]|Object|Object[]|string|string[])} iteratees + * The iteratees to sort by, specified as individual values or arrays of values. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 42 }, + * { 'user': 'barney', 'age': 34 } + * ]; + * + * _.map(_.sortByAll(users, ['user', 'age']), _.values); + * // => [['barney', 34], ['barney', 36], ['fred', 42], ['fred', 48]] + * + * _.map(_.sortByAll(users, 'user', function(chr) { + * return Math.floor(chr.age / 10); + * }), _.values); + * // => [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 42]] + */ + var sortByAll = restParam(function(collection, iteratees) { + if (collection == null) { + return []; + } + var guard = iteratees[2]; + if (guard && isIterateeCall(iteratees[0], iteratees[1], guard)) { + iteratees.length = 1; + } + return baseSortByOrder(collection, baseFlatten(iteratees), []); + }); + + /** + * This method is like `_.sortByAll` except that it allows specifying the + * sort orders of the iteratees to sort by. If `orders` is unspecified, all + * values are sorted in ascending order. Otherwise, a value is sorted in + * ascending order if its corresponding order is "asc", and descending if "desc". + * + * If a property name is provided for an iteratee the created `_.property` + * style callback returns the property value of the given element. + * + * If an object is provided for an iteratee the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. + * @param {boolean[]} [orders] The sort orders of `iteratees`. + * @param- {Object} [guard] Enables use as a callback for functions like `_.reduce`. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 34 }, + * { 'user': 'fred', 'age': 42 }, + * { 'user': 'barney', 'age': 36 } + * ]; + * + * // sort by `user` in ascending order and by `age` in descending order + * _.map(_.sortByOrder(users, ['user', 'age'], ['asc', 'desc']), _.values); + * // => [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 42]] + */ + function sortByOrder(collection, iteratees, orders, guard) { + if (collection == null) { + return []; + } + if (guard && isIterateeCall(iteratees, orders, guard)) { + orders = undefined; + } + if (!isArray(iteratees)) { + iteratees = iteratees == null ? [] : [iteratees]; + } + if (!isArray(orders)) { + orders = orders == null ? [] : [orders]; + } + return baseSortByOrder(collection, iteratees, orders); + } + + /** + * Performs a deep comparison between each element in `collection` and the + * source object, returning an array of all elements that have equivalent + * property values. + * + * **Note:** This method supports comparing arrays, booleans, `Date` objects, + * numbers, `Object` objects, regexes, and strings. Objects are compared by + * their own, not inherited, enumerable properties. For comparing a single + * own or inherited property value see `_.matchesProperty`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to search. + * @param {Object} source The object of property values to match. + * @returns {Array} Returns the new filtered array. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false, 'pets': ['hoppy'] }, + * { 'user': 'fred', 'age': 40, 'active': true, 'pets': ['baby puss', 'dino'] } + * ]; + * + * _.pluck(_.where(users, { 'age': 36, 'active': false }), 'user'); + * // => ['barney'] + * + * _.pluck(_.where(users, { 'pets': ['dino'] }), 'user'); + * // => ['fred'] + */ + function where(collection, source) { + return filter(collection, baseMatches(source)); + } + + /*------------------------------------------------------------------------*/ + + /** + * Gets the number of milliseconds that have elapsed since the Unix epoch + * (1 January 1970 00:00:00 UTC). + * + * @static + * @memberOf _ + * @category Date + * @example + * + * _.defer(function(stamp) { + * console.log(_.now() - stamp); + * }, _.now()); + * // => logs the number of milliseconds it took for the deferred function to be invoked + */ + var now = nativeNow || function() { + return new Date().getTime(); + }; + + /*------------------------------------------------------------------------*/ + + /** + * The opposite of `_.before`; this method creates a function that invokes + * `func` once it is called `n` or more times. + * + * @static + * @memberOf _ + * @category Function + * @param {number} n The number of calls before `func` is invoked. + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * var saves = ['profile', 'settings']; + * + * var done = _.after(saves.length, function() { + * console.log('done saving!'); + * }); + * + * _.forEach(saves, function(type) { + * asyncSave({ 'type': type, 'complete': done }); + * }); + * // => logs 'done saving!' after the two async saves have completed + */ + function after(n, func) { + if (typeof func != 'function') { + if (typeof n == 'function') { + var temp = n; + n = func; + func = temp; + } else { + throw new TypeError(FUNC_ERROR_TEXT); + } + } + n = nativeIsFinite(n = +n) ? n : 0; + return function() { + if (--n < 1) { + return func.apply(this, arguments); + } + }; + } + + /** + * Creates a function that accepts up to `n` arguments ignoring any + * additional arguments. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to cap arguments for. + * @param {number} [n=func.length] The arity cap. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Function} Returns the new function. + * @example + * + * _.map(['6', '8', '10'], _.ary(parseInt, 1)); + * // => [6, 8, 10] + */ + function ary(func, n, guard) { + if (guard && isIterateeCall(func, n, guard)) { + n = undefined; + } + n = (func && n == null) ? func.length : nativeMax(+n || 0, 0); + return createWrapper(func, ARY_FLAG, undefined, undefined, undefined, undefined, n); + } + + /** + * Creates a function that invokes `func`, with the `this` binding and arguments + * of the created function, while it is called less than `n` times. Subsequent + * calls to the created function return the result of the last `func` invocation. + * + * @static + * @memberOf _ + * @category Function + * @param {number} n The number of calls at which `func` is no longer invoked. + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * jQuery('#add').on('click', _.before(5, addContactToList)); + * // => allows adding up to 4 contacts to the list + */ + function before(n, func) { + var result; + if (typeof func != 'function') { + if (typeof n == 'function') { + var temp = n; + n = func; + func = temp; + } else { + throw new TypeError(FUNC_ERROR_TEXT); + } + } + return function() { + if (--n > 0) { + result = func.apply(this, arguments); + } + if (n <= 1) { + func = undefined; + } + return result; + }; + } + + /** + * Creates a function that invokes `func` with the `this` binding of `thisArg` + * and prepends any additional `_.bind` arguments to those provided to the + * bound function. + * + * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds, + * may be used as a placeholder for partially applied arguments. + * + * **Note:** Unlike native `Function#bind` this method does not set the "length" + * property of bound functions. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to bind. + * @param {*} thisArg The `this` binding of `func`. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new bound function. + * @example + * + * var greet = function(greeting, punctuation) { + * return greeting + ' ' + this.user + punctuation; + * }; + * + * var object = { 'user': 'fred' }; + * + * var bound = _.bind(greet, object, 'hi'); + * bound('!'); + * // => 'hi fred!' + * + * // using placeholders + * var bound = _.bind(greet, object, _, '!'); + * bound('hi'); + * // => 'hi fred!' + */ + var bind = restParam(function(func, thisArg, partials) { + var bitmask = BIND_FLAG; + if (partials.length) { + var holders = replaceHolders(partials, bind.placeholder); + bitmask |= PARTIAL_FLAG; + } + return createWrapper(func, bitmask, thisArg, partials, holders); + }); + + /** + * Binds methods of an object to the object itself, overwriting the existing + * method. Method names may be specified as individual arguments or as arrays + * of method names. If no method names are provided all enumerable function + * properties, own and inherited, of `object` are bound. + * + * **Note:** This method does not set the "length" property of bound functions. + * + * @static + * @memberOf _ + * @category Function + * @param {Object} object The object to bind and assign the bound methods to. + * @param {...(string|string[])} [methodNames] The object method names to bind, + * specified as individual method names or arrays of method names. + * @returns {Object} Returns `object`. + * @example + * + * var view = { + * 'label': 'docs', + * 'onClick': function() { + * console.log('clicked ' + this.label); + * } + * }; + * + * _.bindAll(view); + * jQuery('#docs').on('click', view.onClick); + * // => logs 'clicked docs' when the element is clicked + */ + var bindAll = restParam(function(object, methodNames) { + methodNames = methodNames.length ? baseFlatten(methodNames) : functions(object); + + var index = -1, + length = methodNames.length; + + while (++index < length) { + var key = methodNames[index]; + object[key] = createWrapper(object[key], BIND_FLAG, object); + } + return object; + }); + + /** + * Creates a function that invokes the method at `object[key]` and prepends + * any additional `_.bindKey` arguments to those provided to the bound function. + * + * This method differs from `_.bind` by allowing bound functions to reference + * methods that may be redefined or don't yet exist. + * See [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern) + * for more details. + * + * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for partially applied arguments. + * + * @static + * @memberOf _ + * @category Function + * @param {Object} object The object the method belongs to. + * @param {string} key The key of the method. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new bound function. + * @example + * + * var object = { + * 'user': 'fred', + * 'greet': function(greeting, punctuation) { + * return greeting + ' ' + this.user + punctuation; + * } + * }; + * + * var bound = _.bindKey(object, 'greet', 'hi'); + * bound('!'); + * // => 'hi fred!' + * + * object.greet = function(greeting, punctuation) { + * return greeting + 'ya ' + this.user + punctuation; + * }; + * + * bound('!'); + * // => 'hiya fred!' + * + * // using placeholders + * var bound = _.bindKey(object, 'greet', _, '!'); + * bound('hi'); + * // => 'hiya fred!' + */ + var bindKey = restParam(function(object, key, partials) { + var bitmask = BIND_FLAG | BIND_KEY_FLAG; + if (partials.length) { + var holders = replaceHolders(partials, bindKey.placeholder); + bitmask |= PARTIAL_FLAG; + } + return createWrapper(key, bitmask, object, partials, holders); + }); + + /** + * Creates a function that accepts one or more arguments of `func` that when + * called either invokes `func` returning its result, if all `func` arguments + * have been provided, or returns a function that accepts one or more of the + * remaining `func` arguments, and so on. The arity of `func` may be specified + * if `func.length` is not sufficient. + * + * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds, + * may be used as a placeholder for provided arguments. + * + * **Note:** This method does not set the "length" property of curried functions. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to curry. + * @param {number} [arity=func.length] The arity of `func`. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Function} Returns the new curried function. + * @example + * + * var abc = function(a, b, c) { + * return [a, b, c]; + * }; + * + * var curried = _.curry(abc); + * + * curried(1)(2)(3); + * // => [1, 2, 3] + * + * curried(1, 2)(3); + * // => [1, 2, 3] + * + * curried(1, 2, 3); + * // => [1, 2, 3] + * + * // using placeholders + * curried(1)(_, 3)(2); + * // => [1, 2, 3] + */ + var curry = createCurry(CURRY_FLAG); + + /** + * This method is like `_.curry` except that arguments are applied to `func` + * in the manner of `_.partialRight` instead of `_.partial`. + * + * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for provided arguments. + * + * **Note:** This method does not set the "length" property of curried functions. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to curry. + * @param {number} [arity=func.length] The arity of `func`. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Function} Returns the new curried function. + * @example + * + * var abc = function(a, b, c) { + * return [a, b, c]; + * }; + * + * var curried = _.curryRight(abc); + * + * curried(3)(2)(1); + * // => [1, 2, 3] + * + * curried(2, 3)(1); + * // => [1, 2, 3] + * + * curried(1, 2, 3); + * // => [1, 2, 3] + * + * // using placeholders + * curried(3)(1, _)(2); + * // => [1, 2, 3] + */ + var curryRight = createCurry(CURRY_RIGHT_FLAG); + + /** + * Creates a debounced function that delays invoking `func` until after `wait` + * milliseconds have elapsed since the last time the debounced function was + * invoked. The debounced function comes with a `cancel` method to cancel + * delayed invocations. Provide an options object to indicate that `func` + * should be invoked on the leading and/or trailing edge of the `wait` timeout. + * Subsequent calls to the debounced function return the result of the last + * `func` invocation. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is invoked + * on the trailing edge of the timeout only if the the debounced function is + * invoked more than once during the `wait` timeout. + * + * See [David Corbacho's article](http://drupalmotion.com/article/debounce-and-throttle-visual-explanation) + * for details over the differences between `_.debounce` and `_.throttle`. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to debounce. + * @param {number} [wait=0] The number of milliseconds to delay. + * @param {Object} [options] The options object. + * @param {boolean} [options.leading=false] Specify invoking on the leading + * edge of the timeout. + * @param {number} [options.maxWait] The maximum time `func` is allowed to be + * delayed before it is invoked. + * @param {boolean} [options.trailing=true] Specify invoking on the trailing + * edge of the timeout. + * @returns {Function} Returns the new debounced function. + * @example + * + * // avoid costly calculations while the window size is in flux + * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); + * + * // invoke `sendMail` when the click event is fired, debouncing subsequent calls + * jQuery('#postbox').on('click', _.debounce(sendMail, 300, { + * 'leading': true, + * 'trailing': false + * })); + * + * // ensure `batchLog` is invoked once after 1 second of debounced calls + * var source = new EventSource('/stream'); + * jQuery(source).on('message', _.debounce(batchLog, 250, { + * 'maxWait': 1000 + * })); + * + * // cancel a debounced call + * var todoChanges = _.debounce(batchLog, 1000); + * Object.observe(models.todo, todoChanges); + * + * Object.observe(models, function(changes) { + * if (_.find(changes, { 'user': 'todo', 'type': 'delete'})) { + * todoChanges.cancel(); + * } + * }, ['delete']); + * + * // ...at some point `models.todo` is changed + * models.todo.completed = true; + * + * // ...before 1 second has passed `models.todo` is deleted + * // which cancels the debounced `todoChanges` call + * delete models.todo; + */ + function debounce(func, wait, options) { + var args, + maxTimeoutId, + result, + stamp, + thisArg, + timeoutId, + trailingCall, + lastCalled = 0, + maxWait = false, + trailing = true; + + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + wait = wait < 0 ? 0 : (+wait || 0); + if (options === true) { + var leading = true; + trailing = false; + } else if (isObject(options)) { + leading = !!options.leading; + maxWait = 'maxWait' in options && nativeMax(+options.maxWait || 0, wait); + trailing = 'trailing' in options ? !!options.trailing : trailing; + } + + function cancel() { + if (timeoutId) { + clearTimeout(timeoutId); + } + if (maxTimeoutId) { + clearTimeout(maxTimeoutId); + } + lastCalled = 0; + maxTimeoutId = timeoutId = trailingCall = undefined; + } + + function complete(isCalled, id) { + if (id) { + clearTimeout(id); + } + maxTimeoutId = timeoutId = trailingCall = undefined; + if (isCalled) { + lastCalled = now(); + result = func.apply(thisArg, args); + if (!timeoutId && !maxTimeoutId) { + args = thisArg = undefined; + } + } + } + + function delayed() { + var remaining = wait - (now() - stamp); + if (remaining <= 0 || remaining > wait) { + complete(trailingCall, maxTimeoutId); + } else { + timeoutId = setTimeout(delayed, remaining); + } + } + + function maxDelayed() { + complete(trailing, timeoutId); + } + + function debounced() { + args = arguments; + stamp = now(); + thisArg = this; + trailingCall = trailing && (timeoutId || !leading); + + if (maxWait === false) { + var leadingCall = leading && !timeoutId; + } else { + if (!maxTimeoutId && !leading) { + lastCalled = stamp; + } + var remaining = maxWait - (stamp - lastCalled), + isCalled = remaining <= 0 || remaining > maxWait; + + if (isCalled) { + if (maxTimeoutId) { + maxTimeoutId = clearTimeout(maxTimeoutId); + } + lastCalled = stamp; + result = func.apply(thisArg, args); + } + else if (!maxTimeoutId) { + maxTimeoutId = setTimeout(maxDelayed, remaining); + } + } + if (isCalled && timeoutId) { + timeoutId = clearTimeout(timeoutId); + } + else if (!timeoutId && wait !== maxWait) { + timeoutId = setTimeout(delayed, wait); + } + if (leadingCall) { + isCalled = true; + result = func.apply(thisArg, args); + } + if (isCalled && !timeoutId && !maxTimeoutId) { + args = thisArg = undefined; + } + return result; + } + debounced.cancel = cancel; + return debounced; + } + + /** + * Defers invoking the `func` until the current call stack has cleared. Any + * additional arguments are provided to `func` when it is invoked. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to defer. + * @param {...*} [args] The arguments to invoke the function with. + * @returns {number} Returns the timer id. + * @example + * + * _.defer(function(text) { + * console.log(text); + * }, 'deferred'); + * // logs 'deferred' after one or more milliseconds + */ + var defer = restParam(function(func, args) { + return baseDelay(func, 1, args); + }); + + /** + * Invokes `func` after `wait` milliseconds. Any additional arguments are + * provided to `func` when it is invoked. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @param {...*} [args] The arguments to invoke the function with. + * @returns {number} Returns the timer id. + * @example + * + * _.delay(function(text) { + * console.log(text); + * }, 1000, 'later'); + * // => logs 'later' after one second + */ + var delay = restParam(function(func, wait, args) { + return baseDelay(func, wait, args); + }); + + /** + * Creates a function that returns the result of invoking the provided + * functions with the `this` binding of the created function, where each + * successive invocation is supplied the return value of the previous. + * + * @static + * @memberOf _ + * @category Function + * @param {...Function} [funcs] Functions to invoke. + * @returns {Function} Returns the new function. + * @example + * + * function square(n) { + * return n * n; + * } + * + * var addSquare = _.flow(_.add, square); + * addSquare(1, 2); + * // => 9 + */ + var flow = createFlow(); + + /** + * This method is like `_.flow` except that it creates a function that + * invokes the provided functions from right to left. + * + * @static + * @memberOf _ + * @alias backflow, compose + * @category Function + * @param {...Function} [funcs] Functions to invoke. + * @returns {Function} Returns the new function. + * @example + * + * function square(n) { + * return n * n; + * } + * + * var addSquare = _.flowRight(square, _.add); + * addSquare(1, 2); + * // => 9 + */ + var flowRight = createFlow(true); + + /** + * Creates a function that memoizes the result of `func`. If `resolver` is + * provided it determines the cache key for storing the result based on the + * arguments provided to the memoized function. By default, the first argument + * provided to the memoized function is coerced to a string and used as the + * cache key. The `func` is invoked with the `this` binding of the memoized + * function. + * + * **Note:** The cache is exposed as the `cache` property on the memoized + * function. Its creation may be customized by replacing the `_.memoize.Cache` + * constructor with one whose instances implement the [`Map`](http://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-map-prototype-object) + * method interface of `get`, `has`, and `set`. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to have its output memoized. + * @param {Function} [resolver] The function to resolve the cache key. + * @returns {Function} Returns the new memoizing function. + * @example + * + * var upperCase = _.memoize(function(string) { + * return string.toUpperCase(); + * }); + * + * upperCase('fred'); + * // => 'FRED' + * + * // modifying the result cache + * upperCase.cache.set('fred', 'BARNEY'); + * upperCase('fred'); + * // => 'BARNEY' + * + * // replacing `_.memoize.Cache` + * var object = { 'user': 'fred' }; + * var other = { 'user': 'barney' }; + * var identity = _.memoize(_.identity); + * + * identity(object); + * // => { 'user': 'fred' } + * identity(other); + * // => { 'user': 'fred' } + * + * _.memoize.Cache = WeakMap; + * var identity = _.memoize(_.identity); + * + * identity(object); + * // => { 'user': 'fred' } + * identity(other); + * // => { 'user': 'barney' } + */ + function memoize(func, resolver) { + if (typeof func != 'function' || (resolver && typeof resolver != 'function')) { + throw new TypeError(FUNC_ERROR_TEXT); + } + var memoized = function() { + var args = arguments, + key = resolver ? resolver.apply(this, args) : args[0], + cache = memoized.cache; + + if (cache.has(key)) { + return cache.get(key); + } + var result = func.apply(this, args); + memoized.cache = cache.set(key, result); + return result; + }; + memoized.cache = new memoize.Cache; + return memoized; + } + + /** + * Creates a function that runs each argument through a corresponding + * transform function. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to wrap. + * @param {...(Function|Function[])} [transforms] The functions to transform + * arguments, specified as individual functions or arrays of functions. + * @returns {Function} Returns the new function. + * @example + * + * function doubled(n) { + * return n * 2; + * } + * + * function square(n) { + * return n * n; + * } + * + * var modded = _.modArgs(function(x, y) { + * return [x, y]; + * }, square, doubled); + * + * modded(1, 2); + * // => [1, 4] + * + * modded(5, 10); + * // => [25, 20] + */ + var modArgs = restParam(function(func, transforms) { + transforms = baseFlatten(transforms); + if (typeof func != 'function' || !arrayEvery(transforms, baseIsFunction)) { + throw new TypeError(FUNC_ERROR_TEXT); + } + var length = transforms.length; + return restParam(function(args) { + var index = nativeMin(args.length, length); + while (index--) { + args[index] = transforms[index](args[index]); + } + return func.apply(this, args); + }); + }); + + /** + * Creates a function that negates the result of the predicate `func`. The + * `func` predicate is invoked with the `this` binding and arguments of the + * created function. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} predicate The predicate to negate. + * @returns {Function} Returns the new function. + * @example + * + * function isEven(n) { + * return n % 2 == 0; + * } + * + * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven)); + * // => [1, 3, 5] + */ + function negate(predicate) { + if (typeof predicate != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return function() { + return !predicate.apply(this, arguments); + }; + } + + /** + * Creates a function that is restricted to invoking `func` once. Repeat calls + * to the function return the value of the first call. The `func` is invoked + * with the `this` binding and arguments of the created function. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * var initialize = _.once(createApplication); + * initialize(); + * initialize(); + * // `initialize` invokes `createApplication` once + */ + function once(func) { + return before(2, func); + } + + /** + * Creates a function that invokes `func` with `partial` arguments prepended + * to those provided to the new function. This method is like `_.bind` except + * it does **not** alter the `this` binding. + * + * The `_.partial.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for partially applied arguments. + * + * **Note:** This method does not set the "length" property of partially + * applied functions. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to partially apply arguments to. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new partially applied function. + * @example + * + * var greet = function(greeting, name) { + * return greeting + ' ' + name; + * }; + * + * var sayHelloTo = _.partial(greet, 'hello'); + * sayHelloTo('fred'); + * // => 'hello fred' + * + * // using placeholders + * var greetFred = _.partial(greet, _, 'fred'); + * greetFred('hi'); + * // => 'hi fred' + */ + var partial = createPartial(PARTIAL_FLAG); + + /** + * This method is like `_.partial` except that partially applied arguments + * are appended to those provided to the new function. + * + * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for partially applied arguments. + * + * **Note:** This method does not set the "length" property of partially + * applied functions. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to partially apply arguments to. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new partially applied function. + * @example + * + * var greet = function(greeting, name) { + * return greeting + ' ' + name; + * }; + * + * var greetFred = _.partialRight(greet, 'fred'); + * greetFred('hi'); + * // => 'hi fred' + * + * // using placeholders + * var sayHelloTo = _.partialRight(greet, 'hello', _); + * sayHelloTo('fred'); + * // => 'hello fred' + */ + var partialRight = createPartial(PARTIAL_RIGHT_FLAG); + + /** + * Creates a function that invokes `func` with arguments arranged according + * to the specified indexes where the argument value at the first index is + * provided as the first argument, the argument value at the second index is + * provided as the second argument, and so on. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to rearrange arguments for. + * @param {...(number|number[])} indexes The arranged argument indexes, + * specified as individual indexes or arrays of indexes. + * @returns {Function} Returns the new function. + * @example + * + * var rearged = _.rearg(function(a, b, c) { + * return [a, b, c]; + * }, 2, 0, 1); + * + * rearged('b', 'c', 'a') + * // => ['a', 'b', 'c'] + * + * var map = _.rearg(_.map, [1, 0]); + * map(function(n) { + * return n * 3; + * }, [1, 2, 3]); + * // => [3, 6, 9] + */ + var rearg = restParam(function(func, indexes) { + return createWrapper(func, REARG_FLAG, undefined, undefined, undefined, baseFlatten(indexes)); + }); + + /** + * Creates a function that invokes `func` with the `this` binding of the + * created function and arguments from `start` and beyond provided as an array. + * + * **Note:** This method is based on the [rest parameter](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/rest_parameters). + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + * @example + * + * var say = _.restParam(function(what, names) { + * return what + ' ' + _.initial(names).join(', ') + + * (_.size(names) > 1 ? ', & ' : '') + _.last(names); + * }); + * + * say('hello', 'fred', 'barney', 'pebbles'); + * // => 'hello fred, barney, & pebbles' + */ + function restParam(func, start) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + start = nativeMax(start === undefined ? (func.length - 1) : (+start || 0), 0); + return function() { + var args = arguments, + index = -1, + length = nativeMax(args.length - start, 0), + rest = Array(length); + + while (++index < length) { + rest[index] = args[start + index]; + } + switch (start) { + case 0: return func.call(this, rest); + case 1: return func.call(this, args[0], rest); + case 2: return func.call(this, args[0], args[1], rest); + } + var otherArgs = Array(start + 1); + index = -1; + while (++index < start) { + otherArgs[index] = args[index]; + } + otherArgs[start] = rest; + return func.apply(this, otherArgs); + }; + } + + /** + * Creates a function that invokes `func` with the `this` binding of the created + * function and an array of arguments much like [`Function#apply`](https://es5.github.io/#x15.3.4.3). + * + * **Note:** This method is based on the [spread operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator). + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to spread arguments over. + * @returns {Function} Returns the new function. + * @example + * + * var say = _.spread(function(who, what) { + * return who + ' says ' + what; + * }); + * + * say(['fred', 'hello']); + * // => 'fred says hello' + * + * // with a Promise + * var numbers = Promise.all([ + * Promise.resolve(40), + * Promise.resolve(36) + * ]); + * + * numbers.then(_.spread(function(x, y) { + * return x + y; + * })); + * // => a Promise of 76 + */ + function spread(func) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return function(array) { + return func.apply(this, array); + }; + } + + /** + * Creates a throttled function that only invokes `func` at most once per + * every `wait` milliseconds. The throttled function comes with a `cancel` + * method to cancel delayed invocations. Provide an options object to indicate + * that `func` should be invoked on the leading and/or trailing edge of the + * `wait` timeout. Subsequent calls to the throttled function return the + * result of the last `func` call. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is invoked + * on the trailing edge of the timeout only if the the throttled function is + * invoked more than once during the `wait` timeout. + * + * See [David Corbacho's article](http://drupalmotion.com/article/debounce-and-throttle-visual-explanation) + * for details over the differences between `_.throttle` and `_.debounce`. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to throttle. + * @param {number} [wait=0] The number of milliseconds to throttle invocations to. + * @param {Object} [options] The options object. + * @param {boolean} [options.leading=true] Specify invoking on the leading + * edge of the timeout. + * @param {boolean} [options.trailing=true] Specify invoking on the trailing + * edge of the timeout. + * @returns {Function} Returns the new throttled function. + * @example + * + * // avoid excessively updating the position while scrolling + * jQuery(window).on('scroll', _.throttle(updatePosition, 100)); + * + * // invoke `renewToken` when the click event is fired, but not more than once every 5 minutes + * jQuery('.interactive').on('click', _.throttle(renewToken, 300000, { + * 'trailing': false + * })); + * + * // cancel a trailing throttled call + * jQuery(window).on('popstate', throttled.cancel); + */ + function throttle(func, wait, options) { + var leading = true, + trailing = true; + + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + if (options === false) { + leading = false; + } else if (isObject(options)) { + leading = 'leading' in options ? !!options.leading : leading; + trailing = 'trailing' in options ? !!options.trailing : trailing; + } + return debounce(func, wait, { 'leading': leading, 'maxWait': +wait, 'trailing': trailing }); + } + + /** + * Creates a function that provides `value` to the wrapper function as its + * first argument. Any additional arguments provided to the function are + * appended to those provided to the wrapper function. The wrapper is invoked + * with the `this` binding of the created function. + * + * @static + * @memberOf _ + * @category Function + * @param {*} value The value to wrap. + * @param {Function} wrapper The wrapper function. + * @returns {Function} Returns the new function. + * @example + * + * var p = _.wrap(_.escape, function(func, text) { + * return '<p>' + func(text) + '</p>'; + * }); + * + * p('fred, barney, & pebbles'); + * // => '<p>fred, barney, & pebbles</p>' + */ + function wrap(value, wrapper) { + wrapper = wrapper == null ? identity : wrapper; + return createWrapper(wrapper, PARTIAL_FLAG, undefined, [value], []); + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates a clone of `value`. If `isDeep` is `true` nested objects are cloned, + * otherwise they are assigned by reference. If `customizer` is provided it is + * invoked to produce the cloned values. If `customizer` returns `undefined` + * cloning is handled by the method instead. The `customizer` is bound to + * `thisArg` and invoked with two argument; (value [, index|key, object]). + * + * **Note:** This method is loosely based on the + * [structured clone algorithm](http://www.w3.org/TR/html5/infrastructure.html#internal-structured-cloning-algorithm). + * The enumerable properties of `arguments` objects and objects created by + * constructors other than `Object` are cloned to plain `Object` objects. An + * empty object is returned for uncloneable values such as functions, DOM nodes, + * Maps, Sets, and WeakMaps. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @param {Function} [customizer] The function to customize cloning values. + * @param {*} [thisArg] The `this` binding of `customizer`. + * @returns {*} Returns the cloned value. + * @example + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * var shallow = _.clone(users); + * shallow[0] === users[0]; + * // => true + * + * var deep = _.clone(users, true); + * deep[0] === users[0]; + * // => false + * + * // using a customizer callback + * var el = _.clone(document.body, function(value) { + * if (_.isElement(value)) { + * return value.cloneNode(false); + * } + * }); + * + * el === document.body + * // => false + * el.nodeName + * // => BODY + * el.childNodes.length; + * // => 0 + */ + function clone(value, isDeep, customizer, thisArg) { + if (isDeep && typeof isDeep != 'boolean' && isIterateeCall(value, isDeep, customizer)) { + isDeep = false; + } + else if (typeof isDeep == 'function') { + thisArg = customizer; + customizer = isDeep; + isDeep = false; + } + return typeof customizer == 'function' + ? baseClone(value, isDeep, bindCallback(customizer, thisArg, 1)) + : baseClone(value, isDeep); + } + + /** + * Creates a deep clone of `value`. If `customizer` is provided it is invoked + * to produce the cloned values. If `customizer` returns `undefined` cloning + * is handled by the method instead. The `customizer` is bound to `thisArg` + * and invoked with two argument; (value [, index|key, object]). + * + * **Note:** This method is loosely based on the + * [structured clone algorithm](http://www.w3.org/TR/html5/infrastructure.html#internal-structured-cloning-algorithm). + * The enumerable properties of `arguments` objects and objects created by + * constructors other than `Object` are cloned to plain `Object` objects. An + * empty object is returned for uncloneable values such as functions, DOM nodes, + * Maps, Sets, and WeakMaps. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to deep clone. + * @param {Function} [customizer] The function to customize cloning values. + * @param {*} [thisArg] The `this` binding of `customizer`. + * @returns {*} Returns the deep cloned value. + * @example + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * var deep = _.cloneDeep(users); + * deep[0] === users[0]; + * // => false + * + * // using a customizer callback + * var el = _.cloneDeep(document.body, function(value) { + * if (_.isElement(value)) { + * return value.cloneNode(true); + * } + * }); + * + * el === document.body + * // => false + * el.nodeName + * // => BODY + * el.childNodes.length; + * // => 20 + */ + function cloneDeep(value, customizer, thisArg) { + return typeof customizer == 'function' + ? baseClone(value, true, bindCallback(customizer, thisArg, 1)) + : baseClone(value, true); + } + + /** + * Checks if `value` is greater than `other`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, else `false`. + * @example + * + * _.gt(3, 1); + * // => true + * + * _.gt(3, 3); + * // => false + * + * _.gt(1, 3); + * // => false + */ + function gt(value, other) { + return value > other; + } + + /** + * Checks if `value` is greater than or equal to `other`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than or equal to `other`, else `false`. + * @example + * + * _.gte(3, 1); + * // => true + * + * _.gte(3, 3); + * // => true + * + * _.gte(1, 3); + * // => false + */ + function gte(value, other) { + return value >= other; + } + + /** + * Checks if `value` is classified as an `arguments` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ + function isArguments(value) { + return isObjectLike(value) && isArrayLike(value) && + hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee'); + } + + /** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(function() { return arguments; }()); + * // => false + */ + var isArray = nativeIsArray || function(value) { + return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag; + }; + + /** + * Checks if `value` is classified as a boolean primitive or object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isBoolean(false); + * // => true + * + * _.isBoolean(null); + * // => false + */ + function isBoolean(value) { + return value === true || value === false || (isObjectLike(value) && objToString.call(value) == boolTag); + } + + /** + * Checks if `value` is classified as a `Date` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isDate(new Date); + * // => true + * + * _.isDate('Mon April 23 2012'); + * // => false + */ + function isDate(value) { + return isObjectLike(value) && objToString.call(value) == dateTag; + } + + /** + * Checks if `value` is a DOM element. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`. + * @example + * + * _.isElement(document.body); + * // => true + * + * _.isElement('<body>'); + * // => false + */ + function isElement(value) { + return !!value && value.nodeType === 1 && isObjectLike(value) && !isPlainObject(value); + } + + /** + * Checks if `value` is empty. A value is considered empty unless it is an + * `arguments` object, array, string, or jQuery-like collection with a length + * greater than `0` or an object with own enumerable properties. + * + * @static + * @memberOf _ + * @category Lang + * @param {Array|Object|string} value The value to inspect. + * @returns {boolean} Returns `true` if `value` is empty, else `false`. + * @example + * + * _.isEmpty(null); + * // => true + * + * _.isEmpty(true); + * // => true + * + * _.isEmpty(1); + * // => true + * + * _.isEmpty([1, 2, 3]); + * // => false + * + * _.isEmpty({ 'a': 1 }); + * // => false + */ + function isEmpty(value) { + if (value == null) { + return true; + } + if (isArrayLike(value) && (isArray(value) || isString(value) || isArguments(value) || + (isObjectLike(value) && isFunction(value.splice)))) { + return !value.length; + } + return !keys(value).length; + } + + /** + * Performs a deep comparison between two values to determine if they are + * equivalent. If `customizer` is provided it is invoked to compare values. + * If `customizer` returns `undefined` comparisons are handled by the method + * instead. The `customizer` is bound to `thisArg` and invoked with three + * arguments: (value, other [, index|key]). + * + * **Note:** This method supports comparing arrays, booleans, `Date` objects, + * numbers, `Object` objects, regexes, and strings. Objects are compared by + * their own, not inherited, enumerable properties. Functions and DOM nodes + * are **not** supported. Provide a customizer function to extend support + * for comparing other values. + * + * @static + * @memberOf _ + * @alias eq + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {Function} [customizer] The function to customize value comparisons. + * @param {*} [thisArg] The `this` binding of `customizer`. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'user': 'fred' }; + * var other = { 'user': 'fred' }; + * + * object == other; + * // => false + * + * _.isEqual(object, other); + * // => true + * + * // using a customizer callback + * var array = ['hello', 'goodbye']; + * var other = ['hi', 'goodbye']; + * + * _.isEqual(array, other, function(value, other) { + * if (_.every([value, other], RegExp.prototype.test, /^h(?:i|ello)$/)) { + * return true; + * } + * }); + * // => true + */ + function isEqual(value, other, customizer, thisArg) { + customizer = typeof customizer == 'function' ? bindCallback(customizer, thisArg, 3) : undefined; + var result = customizer ? customizer(value, other) : undefined; + return result === undefined ? baseIsEqual(value, other, customizer) : !!result; + } + + /** + * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`, + * `SyntaxError`, `TypeError`, or `URIError` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an error object, else `false`. + * @example + * + * _.isError(new Error); + * // => true + * + * _.isError(Error); + * // => false + */ + function isError(value) { + return isObjectLike(value) && typeof value.message == 'string' && objToString.call(value) == errorTag; + } + + /** + * Checks if `value` is a finite primitive number. + * + * **Note:** This method is based on [`Number.isFinite`](http://ecma-international.org/ecma-262/6.0/#sec-number.isfinite). + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a finite number, else `false`. + * @example + * + * _.isFinite(10); + * // => true + * + * _.isFinite('10'); + * // => false + * + * _.isFinite(true); + * // => false + * + * _.isFinite(Object(10)); + * // => false + * + * _.isFinite(Infinity); + * // => false + */ + function isFinite(value) { + return typeof value == 'number' && nativeIsFinite(value); + } + + /** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ + function isFunction(value) { + // The use of `Object#toString` avoids issues with the `typeof` operator + // in older versions of Chrome and Safari which return 'function' for regexes + // and Safari 8 equivalents which return 'object' for typed array constructors. + return isObject(value) && objToString.call(value) == funcTag; + } + + /** + * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`. + * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(1); + * // => false + */ + function isObject(value) { + // Avoid a V8 JIT bug in Chrome 19-20. + // See https://code.google.com/p/v8/issues/detail?id=2291 for more details. + var type = typeof value; + return !!value && (type == 'object' || type == 'function'); + } + + /** + * Performs a deep comparison between `object` and `source` to determine if + * `object` contains equivalent property values. If `customizer` is provided + * it is invoked to compare values. If `customizer` returns `undefined` + * comparisons are handled by the method instead. The `customizer` is bound + * to `thisArg` and invoked with three arguments: (value, other, index|key). + * + * **Note:** This method supports comparing properties of arrays, booleans, + * `Date` objects, numbers, `Object` objects, regexes, and strings. Functions + * and DOM nodes are **not** supported. Provide a customizer function to extend + * support for comparing other values. + * + * @static + * @memberOf _ + * @category Lang + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Function} [customizer] The function to customize value comparisons. + * @param {*} [thisArg] The `this` binding of `customizer`. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + * @example + * + * var object = { 'user': 'fred', 'age': 40 }; + * + * _.isMatch(object, { 'age': 40 }); + * // => true + * + * _.isMatch(object, { 'age': 36 }); + * // => false + * + * // using a customizer callback + * var object = { 'greeting': 'hello' }; + * var source = { 'greeting': 'hi' }; + * + * _.isMatch(object, source, function(value, other) { + * return _.every([value, other], RegExp.prototype.test, /^h(?:i|ello)$/) || undefined; + * }); + * // => true + */ + function isMatch(object, source, customizer, thisArg) { + customizer = typeof customizer == 'function' ? bindCallback(customizer, thisArg, 3) : undefined; + return baseIsMatch(object, getMatchData(source), customizer); + } + + /** + * Checks if `value` is `NaN`. + * + * **Note:** This method is not the same as [`isNaN`](https://es5.github.io/#x15.1.2.4) + * which returns `true` for `undefined` and other non-numeric values. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + * @example + * + * _.isNaN(NaN); + * // => true + * + * _.isNaN(new Number(NaN)); + * // => true + * + * isNaN(undefined); + * // => true + * + * _.isNaN(undefined); + * // => false + */ + function isNaN(value) { + // An `NaN` primitive is the only value that is not equal to itself. + // Perform the `toStringTag` check first to avoid errors with some host objects in IE. + return isNumber(value) && value != +value; + } + + /** + * Checks if `value` is a native function. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, else `false`. + * @example + * + * _.isNative(Array.prototype.push); + * // => true + * + * _.isNative(_); + * // => false + */ + function isNative(value) { + if (value == null) { + return false; + } + if (isFunction(value)) { + return reIsNative.test(fnToString.call(value)); + } + return isObjectLike(value) && reIsHostCtor.test(value); + } + + /** + * Checks if `value` is `null`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `null`, else `false`. + * @example + * + * _.isNull(null); + * // => true + * + * _.isNull(void 0); + * // => false + */ + function isNull(value) { + return value === null; + } + + /** + * Checks if `value` is classified as a `Number` primitive or object. + * + * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are classified + * as numbers, use the `_.isFinite` method. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isNumber(8.4); + * // => true + * + * _.isNumber(NaN); + * // => true + * + * _.isNumber('8.4'); + * // => false + */ + function isNumber(value) { + return typeof value == 'number' || (isObjectLike(value) && objToString.call(value) == numberTag); + } + + /** + * Checks if `value` is a plain object, that is, an object created by the + * `Object` constructor or one with a `[[Prototype]]` of `null`. + * + * **Note:** This method assumes objects created by the `Object` constructor + * have no inherited enumerable properties. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * _.isPlainObject(new Foo); + * // => false + * + * _.isPlainObject([1, 2, 3]); + * // => false + * + * _.isPlainObject({ 'x': 0, 'y': 0 }); + * // => true + * + * _.isPlainObject(Object.create(null)); + * // => true + */ + function isPlainObject(value) { + var Ctor; + + // Exit early for non `Object` objects. + if (!(isObjectLike(value) && objToString.call(value) == objectTag && !isArguments(value)) || + (!hasOwnProperty.call(value, 'constructor') && (Ctor = value.constructor, typeof Ctor == 'function' && !(Ctor instanceof Ctor)))) { + return false; + } + // IE < 9 iterates inherited properties before own properties. If the first + // iterated property is an object's own property then there are no inherited + // enumerable properties. + var result; + // In most environments an object's own properties are iterated before + // its inherited properties. If the last iterated property is an object's + // own property then there are no inherited enumerable properties. + baseForIn(value, function(subValue, key) { + result = key; + }); + return result === undefined || hasOwnProperty.call(value, result); + } + + /** + * Checks if `value` is classified as a `RegExp` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isRegExp(/abc/); + * // => true + * + * _.isRegExp('/abc/'); + * // => false + */ + function isRegExp(value) { + return isObject(value) && objToString.call(value) == regexpTag; + } + + /** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ + function isString(value) { + return typeof value == 'string' || (isObjectLike(value) && objToString.call(value) == stringTag); + } + + /** + * Checks if `value` is classified as a typed array. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isTypedArray(new Uint8Array); + * // => true + * + * _.isTypedArray([]); + * // => false + */ + function isTypedArray(value) { + return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[objToString.call(value)]; + } + + /** + * Checks if `value` is `undefined`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. + * @example + * + * _.isUndefined(void 0); + * // => true + * + * _.isUndefined(null); + * // => false + */ + function isUndefined(value) { + return value === undefined; + } + + /** + * Checks if `value` is less than `other`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, else `false`. + * @example + * + * _.lt(1, 3); + * // => true + * + * _.lt(3, 3); + * // => false + * + * _.lt(3, 1); + * // => false + */ + function lt(value, other) { + return value < other; + } + + /** + * Checks if `value` is less than or equal to `other`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than or equal to `other`, else `false`. + * @example + * + * _.lte(1, 3); + * // => true + * + * _.lte(3, 3); + * // => true + * + * _.lte(3, 1); + * // => false + */ + function lte(value, other) { + return value <= other; + } + + /** + * Converts `value` to an array. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to convert. + * @returns {Array} Returns the converted array. + * @example + * + * (function() { + * return _.toArray(arguments).slice(1); + * }(1, 2, 3)); + * // => [2, 3] + */ + function toArray(value) { + var length = value ? getLength(value) : 0; + if (!isLength(length)) { + return values(value); + } + if (!length) { + return []; + } + return arrayCopy(value); + } + + /** + * Converts `value` to a plain object flattening inherited enumerable + * properties of `value` to own properties of the plain object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to convert. + * @returns {Object} Returns the converted plain object. + * @example + * + * function Foo() { + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.assign({ 'a': 1 }, new Foo); + * // => { 'a': 1, 'b': 2 } + * + * _.assign({ 'a': 1 }, _.toPlainObject(new Foo)); + * // => { 'a': 1, 'b': 2, 'c': 3 } + */ + function toPlainObject(value) { + return baseCopy(value, keysIn(value)); + } + + /*------------------------------------------------------------------------*/ + + /** + * Recursively merges own enumerable properties of the source object(s), that + * don't resolve to `undefined` into the destination object. Subsequent sources + * overwrite property assignments of previous sources. If `customizer` is + * provided it is invoked to produce the merged values of the destination and + * source properties. If `customizer` returns `undefined` merging is handled + * by the method instead. The `customizer` is bound to `thisArg` and invoked + * with five arguments: (objectValue, sourceValue, key, object, source). + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @param {Function} [customizer] The function to customize assigned values. + * @param {*} [thisArg] The `this` binding of `customizer`. + * @returns {Object} Returns `object`. + * @example + * + * var users = { + * 'data': [{ 'user': 'barney' }, { 'user': 'fred' }] + * }; + * + * var ages = { + * 'data': [{ 'age': 36 }, { 'age': 40 }] + * }; + * + * _.merge(users, ages); + * // => { 'data': [{ 'user': 'barney', 'age': 36 }, { 'user': 'fred', 'age': 40 }] } + * + * // using a customizer callback + * var object = { + * 'fruits': ['apple'], + * 'vegetables': ['beet'] + * }; + * + * var other = { + * 'fruits': ['banana'], + * 'vegetables': ['carrot'] + * }; + * + * _.merge(object, other, function(a, b) { + * if (_.isArray(a)) { + * return a.concat(b); + * } + * }); + * // => { 'fruits': ['apple', 'banana'], 'vegetables': ['beet', 'carrot'] } + */ + var merge = createAssigner(baseMerge); + + /** + * Assigns own enumerable properties of source object(s) to the destination + * object. Subsequent sources overwrite property assignments of previous sources. + * If `customizer` is provided it is invoked to produce the assigned values. + * The `customizer` is bound to `thisArg` and invoked with five arguments: + * (objectValue, sourceValue, key, object, source). + * + * **Note:** This method mutates `object` and is based on + * [`Object.assign`](http://ecma-international.org/ecma-262/6.0/#sec-object.assign). + * + * @static + * @memberOf _ + * @alias extend + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @param {Function} [customizer] The function to customize assigned values. + * @param {*} [thisArg] The `this` binding of `customizer`. + * @returns {Object} Returns `object`. + * @example + * + * _.assign({ 'user': 'barney' }, { 'age': 40 }, { 'user': 'fred' }); + * // => { 'user': 'fred', 'age': 40 } + * + * // using a customizer callback + * var defaults = _.partialRight(_.assign, function(value, other) { + * return _.isUndefined(value) ? other : value; + * }); + * + * defaults({ 'user': 'barney' }, { 'age': 36 }, { 'user': 'fred' }); + * // => { 'user': 'barney', 'age': 36 } + */ + var assign = createAssigner(function(object, source, customizer) { + return customizer + ? assignWith(object, source, customizer) + : baseAssign(object, source); + }); + + /** + * Creates an object that inherits from the given `prototype` object. If a + * `properties` object is provided its own enumerable properties are assigned + * to the created object. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} prototype The object to inherit from. + * @param {Object} [properties] The properties to assign to the object. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Object} Returns the new object. + * @example + * + * function Shape() { + * this.x = 0; + * this.y = 0; + * } + * + * function Circle() { + * Shape.call(this); + * } + * + * Circle.prototype = _.create(Shape.prototype, { + * 'constructor': Circle + * }); + * + * var circle = new Circle; + * circle instanceof Circle; + * // => true + * + * circle instanceof Shape; + * // => true + */ + function create(prototype, properties, guard) { + var result = baseCreate(prototype); + if (guard && isIterateeCall(prototype, properties, guard)) { + properties = undefined; + } + return properties ? baseAssign(result, properties) : result; + } + + /** + * Assigns own enumerable properties of source object(s) to the destination + * object for all destination properties that resolve to `undefined`. Once a + * property is set, additional values of the same property are ignored. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @example + * + * _.defaults({ 'user': 'barney' }, { 'age': 36 }, { 'user': 'fred' }); + * // => { 'user': 'barney', 'age': 36 } + */ + var defaults = createDefaults(assign, assignDefaults); + + /** + * This method is like `_.defaults` except that it recursively assigns + * default properties. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @example + * + * _.defaultsDeep({ 'user': { 'name': 'barney' } }, { 'user': { 'name': 'fred', 'age': 36 } }); + * // => { 'user': { 'name': 'barney', 'age': 36 } } + * + */ + var defaultsDeep = createDefaults(merge, mergeDefaults); + + /** + * This method is like `_.find` except that it returns the key of the first + * element `predicate` returns truthy for instead of the element itself. + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to search. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {string|undefined} Returns the key of the matched element, else `undefined`. + * @example + * + * var users = { + * 'barney': { 'age': 36, 'active': true }, + * 'fred': { 'age': 40, 'active': false }, + * 'pebbles': { 'age': 1, 'active': true } + * }; + * + * _.findKey(users, function(chr) { + * return chr.age < 40; + * }); + * // => 'barney' (iteration order is not guaranteed) + * + * // using the `_.matches` callback shorthand + * _.findKey(users, { 'age': 1, 'active': true }); + * // => 'pebbles' + * + * // using the `_.matchesProperty` callback shorthand + * _.findKey(users, 'active', false); + * // => 'fred' + * + * // using the `_.property` callback shorthand + * _.findKey(users, 'active'); + * // => 'barney' + */ + var findKey = createFindKey(baseForOwn); + + /** + * This method is like `_.findKey` except that it iterates over elements of + * a collection in the opposite order. + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to search. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {string|undefined} Returns the key of the matched element, else `undefined`. + * @example + * + * var users = { + * 'barney': { 'age': 36, 'active': true }, + * 'fred': { 'age': 40, 'active': false }, + * 'pebbles': { 'age': 1, 'active': true } + * }; + * + * _.findLastKey(users, function(chr) { + * return chr.age < 40; + * }); + * // => returns `pebbles` assuming `_.findKey` returns `barney` + * + * // using the `_.matches` callback shorthand + * _.findLastKey(users, { 'age': 36, 'active': true }); + * // => 'barney' + * + * // using the `_.matchesProperty` callback shorthand + * _.findLastKey(users, 'active', false); + * // => 'fred' + * + * // using the `_.property` callback shorthand + * _.findLastKey(users, 'active'); + * // => 'pebbles' + */ + var findLastKey = createFindKey(baseForOwnRight); + + /** + * Iterates over own and inherited enumerable properties of an object invoking + * `iteratee` for each property. The `iteratee` is bound to `thisArg` and invoked + * with three arguments: (value, key, object). Iteratee functions may exit + * iteration early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Object} Returns `object`. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forIn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => logs 'a', 'b', and 'c' (iteration order is not guaranteed) + */ + var forIn = createForIn(baseFor); + + /** + * This method is like `_.forIn` except that it iterates over properties of + * `object` in the opposite order. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Object} Returns `object`. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forInRight(new Foo, function(value, key) { + * console.log(key); + * }); + * // => logs 'c', 'b', and 'a' assuming `_.forIn ` logs 'a', 'b', and 'c' + */ + var forInRight = createForIn(baseForRight); + + /** + * Iterates over own enumerable properties of an object invoking `iteratee` + * for each property. The `iteratee` is bound to `thisArg` and invoked with + * three arguments: (value, key, object). Iteratee functions may exit iteration + * early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Object} Returns `object`. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => logs 'a' and 'b' (iteration order is not guaranteed) + */ + var forOwn = createForOwn(baseForOwn); + + /** + * This method is like `_.forOwn` except that it iterates over properties of + * `object` in the opposite order. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Object} Returns `object`. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwnRight(new Foo, function(value, key) { + * console.log(key); + * }); + * // => logs 'b' and 'a' assuming `_.forOwn` logs 'a' and 'b' + */ + var forOwnRight = createForOwn(baseForOwnRight); + + /** + * Creates an array of function property names from all enumerable properties, + * own and inherited, of `object`. + * + * @static + * @memberOf _ + * @alias methods + * @category Object + * @param {Object} object The object to inspect. + * @returns {Array} Returns the new array of property names. + * @example + * + * _.functions(_); + * // => ['after', 'ary', 'assign', ...] + */ + function functions(object) { + return baseFunctions(object, keysIn(object)); + } + + /** + * Gets the property value at `path` of `object`. If the resolved value is + * `undefined` the `defaultValue` is used in its place. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned if the resolved value is `undefined`. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ + function get(object, path, defaultValue) { + var result = object == null ? undefined : baseGet(object, toPath(path), path + ''); + return result === undefined ? defaultValue : result; + } + + /** + * Checks if `path` is a direct property. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` is a direct property, else `false`. + * @example + * + * var object = { 'a': { 'b': { 'c': 3 } } }; + * + * _.has(object, 'a'); + * // => true + * + * _.has(object, 'a.b.c'); + * // => true + * + * _.has(object, ['a', 'b', 'c']); + * // => true + */ + function has(object, path) { + if (object == null) { + return false; + } + var result = hasOwnProperty.call(object, path); + if (!result && !isKey(path)) { + path = toPath(path); + object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1)); + if (object == null) { + return false; + } + path = last(path); + result = hasOwnProperty.call(object, path); + } + return result || (isLength(object.length) && isIndex(path, object.length) && + (isArray(object) || isArguments(object))); + } + + /** + * Creates an object composed of the inverted keys and values of `object`. + * If `object` contains duplicate values, subsequent values overwrite property + * assignments of previous values unless `multiValue` is `true`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to invert. + * @param {boolean} [multiValue] Allow multiple values per key. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Object} Returns the new inverted object. + * @example + * + * var object = { 'a': 1, 'b': 2, 'c': 1 }; + * + * _.invert(object); + * // => { '1': 'c', '2': 'b' } + * + * // with `multiValue` + * _.invert(object, true); + * // => { '1': ['a', 'c'], '2': ['b'] } + */ + function invert(object, multiValue, guard) { + if (guard && isIterateeCall(object, multiValue, guard)) { + multiValue = undefined; + } + var index = -1, + props = keys(object), + length = props.length, + result = {}; + + while (++index < length) { + var key = props[index], + value = object[key]; + + if (multiValue) { + if (hasOwnProperty.call(result, value)) { + result[value].push(key); + } else { + result[value] = [key]; + } + } + else { + result[value] = key; + } + } + return result; + } + + /** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/6.0/#sec-object.keys) + * for more details. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ + var keys = !nativeKeys ? shimKeys : function(object) { + var Ctor = object == null ? undefined : object.constructor; + if ((typeof Ctor == 'function' && Ctor.prototype === object) || + (typeof object != 'function' && isArrayLike(object))) { + return shimKeys(object); + } + return isObject(object) ? nativeKeys(object) : []; + }; + + /** + * Creates an array of the own and inherited enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keysIn(new Foo); + * // => ['a', 'b', 'c'] (iteration order is not guaranteed) + */ + function keysIn(object) { + if (object == null) { + return []; + } + if (!isObject(object)) { + object = Object(object); + } + var length = object.length; + length = (length && isLength(length) && + (isArray(object) || isArguments(object)) && length) || 0; + + var Ctor = object.constructor, + index = -1, + isProto = typeof Ctor == 'function' && Ctor.prototype === object, + result = Array(length), + skipIndexes = length > 0; + + while (++index < length) { + result[index] = (index + ''); + } + for (var key in object) { + if (!(skipIndexes && isIndex(key, length)) && + !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { + result.push(key); + } + } + return result; + } + + /** + * The opposite of `_.mapValues`; this method creates an object with the + * same values as `object` and keys generated by running each own enumerable + * property of `object` through `iteratee`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function|Object|string} [iteratee=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Object} Returns the new mapped object. + * @example + * + * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) { + * return key + value; + * }); + * // => { 'a1': 1, 'b2': 2 } + */ + var mapKeys = createObjectMapper(true); + + /** + * Creates an object with the same keys as `object` and values generated by + * running each own enumerable property of `object` through `iteratee`. The + * iteratee function is bound to `thisArg` and invoked with three arguments: + * (value, key, object). + * + * If a property name is provided for `iteratee` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `iteratee` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function|Object|string} [iteratee=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Object} Returns the new mapped object. + * @example + * + * _.mapValues({ 'a': 1, 'b': 2 }, function(n) { + * return n * 3; + * }); + * // => { 'a': 3, 'b': 6 } + * + * var users = { + * 'fred': { 'user': 'fred', 'age': 40 }, + * 'pebbles': { 'user': 'pebbles', 'age': 1 } + * }; + * + * // using the `_.property` callback shorthand + * _.mapValues(users, 'age'); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + */ + var mapValues = createObjectMapper(); + + /** + * The opposite of `_.pick`; this method creates an object composed of the + * own and inherited enumerable properties of `object` that are not omitted. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {Function|...(string|string[])} [predicate] The function invoked per + * iteration or property names to omit, specified as individual property + * names or arrays of property names. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'user': 'fred', 'age': 40 }; + * + * _.omit(object, 'age'); + * // => { 'user': 'fred' } + * + * _.omit(object, _.isNumber); + * // => { 'user': 'fred' } + */ + var omit = restParam(function(object, props) { + if (object == null) { + return {}; + } + if (typeof props[0] != 'function') { + var props = arrayMap(baseFlatten(props), String); + return pickByArray(object, baseDifference(keysIn(object), props)); + } + var predicate = bindCallback(props[0], props[1], 3); + return pickByCallback(object, function(value, key, object) { + return !predicate(value, key, object); + }); + }); + + /** + * Creates a two dimensional array of the key-value pairs for `object`, + * e.g. `[[key1, value1], [key2, value2]]`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the new array of key-value pairs. + * @example + * + * _.pairs({ 'barney': 36, 'fred': 40 }); + * // => [['barney', 36], ['fred', 40]] (iteration order is not guaranteed) + */ + function pairs(object) { + object = toObject(object); + + var index = -1, + props = keys(object), + length = props.length, + result = Array(length); + + while (++index < length) { + var key = props[index]; + result[index] = [key, object[key]]; + } + return result; + } + + /** + * Creates an object composed of the picked `object` properties. Property + * names may be specified as individual arguments or as arrays of property + * names. If `predicate` is provided it is invoked for each property of `object` + * picking the properties `predicate` returns truthy for. The predicate is + * bound to `thisArg` and invoked with three arguments: (value, key, object). + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {Function|...(string|string[])} [predicate] The function invoked per + * iteration or property names to pick, specified as individual property + * names or arrays of property names. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'user': 'fred', 'age': 40 }; + * + * _.pick(object, 'user'); + * // => { 'user': 'fred' } + * + * _.pick(object, _.isString); + * // => { 'user': 'fred' } + */ + var pick = restParam(function(object, props) { + if (object == null) { + return {}; + } + return typeof props[0] == 'function' + ? pickByCallback(object, bindCallback(props[0], props[1], 3)) + : pickByArray(object, baseFlatten(props)); + }); + + /** + * This method is like `_.get` except that if the resolved value is a function + * it is invoked with the `this` binding of its parent object and its result + * is returned. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to resolve. + * @param {*} [defaultValue] The value returned if the resolved value is `undefined`. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] }; + * + * _.result(object, 'a[0].b.c1'); + * // => 3 + * + * _.result(object, 'a[0].b.c2'); + * // => 4 + * + * _.result(object, 'a.b.c', 'default'); + * // => 'default' + * + * _.result(object, 'a.b.c', _.constant('default')); + * // => 'default' + */ + function result(object, path, defaultValue) { + var result = object == null ? undefined : object[path]; + if (result === undefined) { + if (object != null && !isKey(path, object)) { + path = toPath(path); + object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1)); + result = object == null ? undefined : object[last(path)]; + } + result = result === undefined ? defaultValue : result; + } + return isFunction(result) ? result.call(object) : result; + } + + /** + * Sets the property value of `path` on `object`. If a portion of `path` + * does not exist it is created. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to augment. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @returns {Object} Returns `object`. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.set(object, 'a[0].b.c', 4); + * console.log(object.a[0].b.c); + * // => 4 + * + * _.set(object, 'x[0].y.z', 5); + * console.log(object.x[0].y.z); + * // => 5 + */ + function set(object, path, value) { + if (object == null) { + return object; + } + var pathKey = (path + ''); + path = (object[pathKey] != null || isKey(path, object)) ? [pathKey] : toPath(path); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = path[index]; + if (isObject(nested)) { + if (index == lastIndex) { + nested[key] = value; + } else if (nested[key] == null) { + nested[key] = isIndex(path[index + 1]) ? [] : {}; + } + } + nested = nested[key]; + } + return object; + } + + /** + * An alternative to `_.reduce`; this method transforms `object` to a new + * `accumulator` object which is the result of running each of its own enumerable + * properties through `iteratee`, with each invocation potentially mutating + * the `accumulator` object. The `iteratee` is bound to `thisArg` and invoked + * with four arguments: (accumulator, value, key, object). Iteratee functions + * may exit iteration early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @category Object + * @param {Array|Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The custom accumulator value. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {*} Returns the accumulated value. + * @example + * + * _.transform([2, 3, 4], function(result, n) { + * result.push(n *= n); + * return n % 2 == 0; + * }); + * // => [4, 9] + * + * _.transform({ 'a': 1, 'b': 2 }, function(result, n, key) { + * result[key] = n * 3; + * }); + * // => { 'a': 3, 'b': 6 } + */ + function transform(object, iteratee, accumulator, thisArg) { + var isArr = isArray(object) || isTypedArray(object); + iteratee = getCallback(iteratee, thisArg, 4); + + if (accumulator == null) { + if (isArr || isObject(object)) { + var Ctor = object.constructor; + if (isArr) { + accumulator = isArray(object) ? new Ctor : []; + } else { + accumulator = baseCreate(isFunction(Ctor) ? Ctor.prototype : undefined); + } + } else { + accumulator = {}; + } + } + (isArr ? arrayEach : baseForOwn)(object, function(value, index, object) { + return iteratee(accumulator, value, index, object); + }); + return accumulator; + } + + /** + * Creates an array of the own enumerable property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ + function values(object) { + return baseValues(object, keys(object)); + } + + /** + * Creates an array of the own and inherited enumerable property values + * of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.valuesIn(new Foo); + * // => [1, 2, 3] (iteration order is not guaranteed) + */ + function valuesIn(object) { + return baseValues(object, keysIn(object)); + } + + /*------------------------------------------------------------------------*/ + + /** + * Checks if `n` is between `start` and up to but not including, `end`. If + * `end` is not specified it is set to `start` with `start` then set to `0`. + * + * @static + * @memberOf _ + * @category Number + * @param {number} n The number to check. + * @param {number} [start=0] The start of the range. + * @param {number} end The end of the range. + * @returns {boolean} Returns `true` if `n` is in the range, else `false`. + * @example + * + * _.inRange(3, 2, 4); + * // => true + * + * _.inRange(4, 8); + * // => true + * + * _.inRange(4, 2); + * // => false + * + * _.inRange(2, 2); + * // => false + * + * _.inRange(1.2, 2); + * // => true + * + * _.inRange(5.2, 4); + * // => false + */ + function inRange(value, start, end) { + start = +start || 0; + if (end === undefined) { + end = start; + start = 0; + } else { + end = +end || 0; + } + return value >= nativeMin(start, end) && value < nativeMax(start, end); + } + + /** + * Produces a random number between `min` and `max` (inclusive). If only one + * argument is provided a number between `0` and the given number is returned. + * If `floating` is `true`, or either `min` or `max` are floats, a floating-point + * number is returned instead of an integer. + * + * @static + * @memberOf _ + * @category Number + * @param {number} [min=0] The minimum possible value. + * @param {number} [max=1] The maximum possible value. + * @param {boolean} [floating] Specify returning a floating-point number. + * @returns {number} Returns the random number. + * @example + * + * _.random(0, 5); + * // => an integer between 0 and 5 + * + * _.random(5); + * // => also an integer between 0 and 5 + * + * _.random(5, true); + * // => a floating-point number between 0 and 5 + * + * _.random(1.2, 5.2); + * // => a floating-point number between 1.2 and 5.2 + */ + function random(min, max, floating) { + if (floating && isIterateeCall(min, max, floating)) { + max = floating = undefined; + } + var noMin = min == null, + noMax = max == null; + + if (floating == null) { + if (noMax && typeof min == 'boolean') { + floating = min; + min = 1; + } + else if (typeof max == 'boolean') { + floating = max; + noMax = true; + } + } + if (noMin && noMax) { + max = 1; + noMax = false; + } + min = +min || 0; + if (noMax) { + max = min; + min = 0; + } else { + max = +max || 0; + } + if (floating || min % 1 || max % 1) { + var rand = nativeRandom(); + return nativeMin(min + (rand * (max - min + parseFloat('1e-' + ((rand + '').length - 1)))), max); + } + return baseRandom(min, max); + } + + /*------------------------------------------------------------------------*/ + + /** + * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase). + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the camel cased string. + * @example + * + * _.camelCase('Foo Bar'); + * // => 'fooBar' + * + * _.camelCase('--foo-bar'); + * // => 'fooBar' + * + * _.camelCase('__foo_bar__'); + * // => 'fooBar' + */ + var camelCase = createCompounder(function(result, word, index) { + word = word.toLowerCase(); + return result + (index ? (word.charAt(0).toUpperCase() + word.slice(1)) : word); + }); + + /** + * Capitalizes the first character of `string`. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to capitalize. + * @returns {string} Returns the capitalized string. + * @example + * + * _.capitalize('fred'); + * // => 'Fred' + */ + function capitalize(string) { + string = baseToString(string); + return string && (string.charAt(0).toUpperCase() + string.slice(1)); + } + + /** + * Deburrs `string` by converting [latin-1 supplementary letters](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table) + * to basic latin letters and removing [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to deburr. + * @returns {string} Returns the deburred string. + * @example + * + * _.deburr('déjà vu'); + * // => 'deja vu' + */ + function deburr(string) { + string = baseToString(string); + return string && string.replace(reLatin1, deburrLetter).replace(reComboMark, ''); + } + + /** + * Checks if `string` ends with the given target string. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to search. + * @param {string} [target] The string to search for. + * @param {number} [position=string.length] The position to search from. + * @returns {boolean} Returns `true` if `string` ends with `target`, else `false`. + * @example + * + * _.endsWith('abc', 'c'); + * // => true + * + * _.endsWith('abc', 'b'); + * // => false + * + * _.endsWith('abc', 'b', 2); + * // => true + */ + function endsWith(string, target, position) { + string = baseToString(string); + target = (target + ''); + + var length = string.length; + position = position === undefined + ? length + : nativeMin(position < 0 ? 0 : (+position || 0), length); + + position -= target.length; + return position >= 0 && string.indexOf(target, position) == position; + } + + /** + * Converts the characters "&", "<", ">", '"', "'", and "\`", in `string` to + * their corresponding HTML entities. + * + * **Note:** No other characters are escaped. To escape additional characters + * use a third-party library like [_he_](https://mths.be/he). + * + * Though the ">" character is escaped for symmetry, characters like + * ">" and "/" don't need escaping in HTML and have no special meaning + * unless they're part of a tag or unquoted attribute value. + * See [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands) + * (under "semi-related fun fact") for more details. + * + * Backticks are escaped because in Internet Explorer < 9, they can break out + * of attribute values or HTML comments. See [#59](https://html5sec.org/#59), + * [#102](https://html5sec.org/#102), [#108](https://html5sec.org/#108), and + * [#133](https://html5sec.org/#133) of the [HTML5 Security Cheatsheet](https://html5sec.org/) + * for more details. + * + * When working with HTML you should always [quote attribute values](http://wonko.com/post/html-escaping) + * to reduce XSS vectors. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to escape. + * @returns {string} Returns the escaped string. + * @example + * + * _.escape('fred, barney, & pebbles'); + * // => 'fred, barney, & pebbles' + */ + function escape(string) { + // Reset `lastIndex` because in IE < 9 `String#replace` does not. + string = baseToString(string); + return (string && reHasUnescapedHtml.test(string)) + ? string.replace(reUnescapedHtml, escapeHtmlChar) + : string; + } + + /** + * Escapes the `RegExp` special characters "\", "/", "^", "$", ".", "|", "?", + * "*", "+", "(", ")", "[", "]", "{" and "}" in `string`. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to escape. + * @returns {string} Returns the escaped string. + * @example + * + * _.escapeRegExp('[lodash](https://lodash.com/)'); + * // => '\[lodash\]\(https:\/\/lodash\.com\/\)' + */ + function escapeRegExp(string) { + string = baseToString(string); + return (string && reHasRegExpChars.test(string)) + ? string.replace(reRegExpChars, escapeRegExpChar) + : (string || '(?:)'); + } + + /** + * Converts `string` to [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles). + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the kebab cased string. + * @example + * + * _.kebabCase('Foo Bar'); + * // => 'foo-bar' + * + * _.kebabCase('fooBar'); + * // => 'foo-bar' + * + * _.kebabCase('__foo_bar__'); + * // => 'foo-bar' + */ + var kebabCase = createCompounder(function(result, word, index) { + return result + (index ? '-' : '') + word.toLowerCase(); + }); + + /** + * Pads `string` on the left and right sides if it's shorter than `length`. + * Padding characters are truncated if they can't be evenly divided by `length`. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to pad. + * @param {number} [length=0] The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padded string. + * @example + * + * _.pad('abc', 8); + * // => ' abc ' + * + * _.pad('abc', 8, '_-'); + * // => '_-abc_-_' + * + * _.pad('abc', 3); + * // => 'abc' + */ + function pad(string, length, chars) { + string = baseToString(string); + length = +length; + + var strLength = string.length; + if (strLength >= length || !nativeIsFinite(length)) { + return string; + } + var mid = (length - strLength) / 2, + leftLength = nativeFloor(mid), + rightLength = nativeCeil(mid); + + chars = createPadding('', rightLength, chars); + return chars.slice(0, leftLength) + string + chars; + } + + /** + * Pads `string` on the left side if it's shorter than `length`. Padding + * characters are truncated if they exceed `length`. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to pad. + * @param {number} [length=0] The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padded string. + * @example + * + * _.padLeft('abc', 6); + * // => ' abc' + * + * _.padLeft('abc', 6, '_-'); + * // => '_-_abc' + * + * _.padLeft('abc', 3); + * // => 'abc' + */ + var padLeft = createPadDir(); + + /** + * Pads `string` on the right side if it's shorter than `length`. Padding + * characters are truncated if they exceed `length`. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to pad. + * @param {number} [length=0] The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padded string. + * @example + * + * _.padRight('abc', 6); + * // => 'abc ' + * + * _.padRight('abc', 6, '_-'); + * // => 'abc_-_' + * + * _.padRight('abc', 3); + * // => 'abc' + */ + var padRight = createPadDir(true); + + /** + * Converts `string` to an integer of the specified radix. If `radix` is + * `undefined` or `0`, a `radix` of `10` is used unless `value` is a hexadecimal, + * in which case a `radix` of `16` is used. + * + * **Note:** This method aligns with the [ES5 implementation](https://es5.github.io/#E) + * of `parseInt`. + * + * @static + * @memberOf _ + * @category String + * @param {string} string The string to convert. + * @param {number} [radix] The radix to interpret `value` by. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {number} Returns the converted integer. + * @example + * + * _.parseInt('08'); + * // => 8 + * + * _.map(['6', '08', '10'], _.parseInt); + * // => [6, 8, 10] + */ + function parseInt(string, radix, guard) { + // Firefox < 21 and Opera < 15 follow ES3 for `parseInt`. + // Chrome fails to trim leading <BOM> whitespace characters. + // See https://code.google.com/p/v8/issues/detail?id=3109 for more details. + if (guard ? isIterateeCall(string, radix, guard) : radix == null) { + radix = 0; + } else if (radix) { + radix = +radix; + } + string = trim(string); + return nativeParseInt(string, radix || (reHasHexPrefix.test(string) ? 16 : 10)); + } + + /** + * Repeats the given string `n` times. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to repeat. + * @param {number} [n=0] The number of times to repeat the string. + * @returns {string} Returns the repeated string. + * @example + * + * _.repeat('*', 3); + * // => '***' + * + * _.repeat('abc', 2); + * // => 'abcabc' + * + * _.repeat('abc', 0); + * // => '' + */ + function repeat(string, n) { + var result = ''; + string = baseToString(string); + n = +n; + if (n < 1 || !string || !nativeIsFinite(n)) { + return result; + } + // Leverage the exponentiation by squaring algorithm for a faster repeat. + // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details. + do { + if (n % 2) { + result += string; + } + n = nativeFloor(n / 2); + string += string; + } while (n); + + return result; + } + + /** + * Converts `string` to [snake case](https://en.wikipedia.org/wiki/Snake_case). + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the snake cased string. + * @example + * + * _.snakeCase('Foo Bar'); + * // => 'foo_bar' + * + * _.snakeCase('fooBar'); + * // => 'foo_bar' + * + * _.snakeCase('--foo-bar'); + * // => 'foo_bar' + */ + var snakeCase = createCompounder(function(result, word, index) { + return result + (index ? '_' : '') + word.toLowerCase(); + }); + + /** + * Converts `string` to [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage). + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the start cased string. + * @example + * + * _.startCase('--foo-bar'); + * // => 'Foo Bar' + * + * _.startCase('fooBar'); + * // => 'Foo Bar' + * + * _.startCase('__foo_bar__'); + * // => 'Foo Bar' + */ + var startCase = createCompounder(function(result, word, index) { + return result + (index ? ' ' : '') + (word.charAt(0).toUpperCase() + word.slice(1)); + }); + + /** + * Checks if `string` starts with the given target string. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to search. + * @param {string} [target] The string to search for. + * @param {number} [position=0] The position to search from. + * @returns {boolean} Returns `true` if `string` starts with `target`, else `false`. + * @example + * + * _.startsWith('abc', 'a'); + * // => true + * + * _.startsWith('abc', 'b'); + * // => false + * + * _.startsWith('abc', 'b', 1); + * // => true + */ + function startsWith(string, target, position) { + string = baseToString(string); + position = position == null + ? 0 + : nativeMin(position < 0 ? 0 : (+position || 0), string.length); + + return string.lastIndexOf(target, position) == position; + } + + /** + * Creates a compiled template function that can interpolate data properties + * in "interpolate" delimiters, HTML-escape interpolated data properties in + * "escape" delimiters, and execute JavaScript in "evaluate" delimiters. Data + * properties may be accessed as free variables in the template. If a setting + * object is provided it takes precedence over `_.templateSettings` values. + * + * **Note:** In the development build `_.template` utilizes + * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl) + * for easier debugging. + * + * For more information on precompiling templates see + * [lodash's custom builds documentation](https://lodash.com/custom-builds). + * + * For more information on Chrome extension sandboxes see + * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval). + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The template string. + * @param {Object} [options] The options object. + * @param {RegExp} [options.escape] The HTML "escape" delimiter. + * @param {RegExp} [options.evaluate] The "evaluate" delimiter. + * @param {Object} [options.imports] An object to import into the template as free variables. + * @param {RegExp} [options.interpolate] The "interpolate" delimiter. + * @param {string} [options.sourceURL] The sourceURL of the template's compiled source. + * @param {string} [options.variable] The data object variable name. + * @param- {Object} [otherOptions] Enables the legacy `options` param signature. + * @returns {Function} Returns the compiled template function. + * @example + * + * // using the "interpolate" delimiter to create a compiled template + * var compiled = _.template('hello <%= user %>!'); + * compiled({ 'user': 'fred' }); + * // => 'hello fred!' + * + * // using the HTML "escape" delimiter to escape data property values + * var compiled = _.template('<b><%- value %></b>'); + * compiled({ 'value': '<script>' }); + * // => '<b><script></b>' + * + * // using the "evaluate" delimiter to execute JavaScript and generate HTML + * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>'); + * compiled({ 'users': ['fred', 'barney'] }); + * // => '<li>fred</li><li>barney</li>' + * + * // using the internal `print` function in "evaluate" delimiters + * var compiled = _.template('<% print("hello " + user); %>!'); + * compiled({ 'user': 'barney' }); + * // => 'hello barney!' + * + * // using the ES delimiter as an alternative to the default "interpolate" delimiter + * var compiled = _.template('hello ${ user }!'); + * compiled({ 'user': 'pebbles' }); + * // => 'hello pebbles!' + * + * // using custom template delimiters + * _.templateSettings.interpolate = /{{([\s\S]+?)}}/g; + * var compiled = _.template('hello {{ user }}!'); + * compiled({ 'user': 'mustache' }); + * // => 'hello mustache!' + * + * // using backslashes to treat delimiters as plain text + * var compiled = _.template('<%= "\\<%- value %\\>" %>'); + * compiled({ 'value': 'ignored' }); + * // => '<%- value %>' + * + * // using the `imports` option to import `jQuery` as `jq` + * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>'; + * var compiled = _.template(text, { 'imports': { 'jq': jQuery } }); + * compiled({ 'users': ['fred', 'barney'] }); + * // => '<li>fred</li><li>barney</li>' + * + * // using the `sourceURL` option to specify a custom sourceURL for the template + * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' }); + * compiled(data); + * // => find the source of "greeting.jst" under the Sources tab or Resources panel of the web inspector + * + * // using the `variable` option to ensure a with-statement isn't used in the compiled template + * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' }); + * compiled.source; + * // => function(data) { + * // var __t, __p = ''; + * // __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!'; + * // return __p; + * // } + * + * // using the `source` property to inline compiled templates for meaningful + * // line numbers in error messages and a stack trace + * fs.writeFileSync(path.join(cwd, 'jst.js'), '\ + * var JST = {\ + * "main": ' + _.template(mainText).source + '\ + * };\ + * '); + */ + function template(string, options, otherOptions) { + // Based on John Resig's `tmpl` implementation (http://ejohn.org/blog/javascript-micro-templating/) + // and Laura Doktorova's doT.js (https://github.com/olado/doT). + var settings = lodash.templateSettings; + + if (otherOptions && isIterateeCall(string, options, otherOptions)) { + options = otherOptions = undefined; + } + string = baseToString(string); + options = assignWith(baseAssign({}, otherOptions || options), settings, assignOwnDefaults); + + var imports = assignWith(baseAssign({}, options.imports), settings.imports, assignOwnDefaults), + importsKeys = keys(imports), + importsValues = baseValues(imports, importsKeys); + + var isEscaping, + isEvaluating, + index = 0, + interpolate = options.interpolate || reNoMatch, + source = "__p += '"; + + // Compile the regexp to match each delimiter. + var reDelimiters = RegExp( + (options.escape || reNoMatch).source + '|' + + interpolate.source + '|' + + (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' + + (options.evaluate || reNoMatch).source + '|$' + , 'g'); + + // Use a sourceURL for easier debugging. + var sourceURL = '//# sourceURL=' + + ('sourceURL' in options + ? options.sourceURL + : ('lodash.templateSources[' + (++templateCounter) + ']') + ) + '\n'; + + string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) { + interpolateValue || (interpolateValue = esTemplateValue); + + // Escape characters that can't be included in string literals. + source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar); + + // Replace delimiters with snippets. + if (escapeValue) { + isEscaping = true; + source += "' +\n__e(" + escapeValue + ") +\n'"; + } + if (evaluateValue) { + isEvaluating = true; + source += "';\n" + evaluateValue + ";\n__p += '"; + } + if (interpolateValue) { + source += "' +\n((__t = (" + interpolateValue + ")) == null ? '' : __t) +\n'"; + } + index = offset + match.length; + + // The JS engine embedded in Adobe products requires returning the `match` + // string in order to produce the correct `offset` value. + return match; + }); + + source += "';\n"; + + // If `variable` is not specified wrap a with-statement around the generated + // code to add the data object to the top of the scope chain. + var variable = options.variable; + if (!variable) { + source = 'with (obj) {\n' + source + '\n}\n'; + } + // Cleanup code by stripping empty strings. + source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source) + .replace(reEmptyStringMiddle, '$1') + .replace(reEmptyStringTrailing, '$1;'); + + // Frame code as the function body. + source = 'function(' + (variable || 'obj') + ') {\n' + + (variable + ? '' + : 'obj || (obj = {});\n' + ) + + "var __t, __p = ''" + + (isEscaping + ? ', __e = _.escape' + : '' + ) + + (isEvaluating + ? ', __j = Array.prototype.join;\n' + + "function print() { __p += __j.call(arguments, '') }\n" + : ';\n' + ) + + source + + 'return __p\n}'; + + var result = attempt(function() { + return Function(importsKeys, sourceURL + 'return ' + source).apply(undefined, importsValues); + }); + + // Provide the compiled function's source by its `toString` method or + // the `source` property as a convenience for inlining compiled templates. + result.source = source; + if (isError(result)) { + throw result; + } + return result; + } + + /** + * Removes leading and trailing whitespace or specified characters from `string`. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to trim. + * @param {string} [chars=whitespace] The characters to trim. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {string} Returns the trimmed string. + * @example + * + * _.trim(' abc '); + * // => 'abc' + * + * _.trim('-_-abc-_-', '_-'); + * // => 'abc' + * + * _.map([' foo ', ' bar '], _.trim); + * // => ['foo', 'bar'] + */ + function trim(string, chars, guard) { + var value = string; + string = baseToString(string); + if (!string) { + return string; + } + if (guard ? isIterateeCall(value, chars, guard) : chars == null) { + return string.slice(trimmedLeftIndex(string), trimmedRightIndex(string) + 1); + } + chars = (chars + ''); + return string.slice(charsLeftIndex(string, chars), charsRightIndex(string, chars) + 1); + } + + /** + * Removes leading whitespace or specified characters from `string`. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to trim. + * @param {string} [chars=whitespace] The characters to trim. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {string} Returns the trimmed string. + * @example + * + * _.trimLeft(' abc '); + * // => 'abc ' + * + * _.trimLeft('-_-abc-_-', '_-'); + * // => 'abc-_-' + */ + function trimLeft(string, chars, guard) { + var value = string; + string = baseToString(string); + if (!string) { + return string; + } + if (guard ? isIterateeCall(value, chars, guard) : chars == null) { + return string.slice(trimmedLeftIndex(string)); + } + return string.slice(charsLeftIndex(string, (chars + ''))); + } + + /** + * Removes trailing whitespace or specified characters from `string`. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to trim. + * @param {string} [chars=whitespace] The characters to trim. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {string} Returns the trimmed string. + * @example + * + * _.trimRight(' abc '); + * // => ' abc' + * + * _.trimRight('-_-abc-_-', '_-'); + * // => '-_-abc' + */ + function trimRight(string, chars, guard) { + var value = string; + string = baseToString(string); + if (!string) { + return string; + } + if (guard ? isIterateeCall(value, chars, guard) : chars == null) { + return string.slice(0, trimmedRightIndex(string) + 1); + } + return string.slice(0, charsRightIndex(string, (chars + '')) + 1); + } + + /** + * Truncates `string` if it's longer than the given maximum string length. + * The last characters of the truncated string are replaced with the omission + * string which defaults to "...". + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to truncate. + * @param {Object|number} [options] The options object or maximum string length. + * @param {number} [options.length=30] The maximum string length. + * @param {string} [options.omission='...'] The string to indicate text is omitted. + * @param {RegExp|string} [options.separator] The separator pattern to truncate to. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {string} Returns the truncated string. + * @example + * + * _.trunc('hi-diddly-ho there, neighborino'); + * // => 'hi-diddly-ho there, neighbo...' + * + * _.trunc('hi-diddly-ho there, neighborino', 24); + * // => 'hi-diddly-ho there, n...' + * + * _.trunc('hi-diddly-ho there, neighborino', { + * 'length': 24, + * 'separator': ' ' + * }); + * // => 'hi-diddly-ho there,...' + * + * _.trunc('hi-diddly-ho there, neighborino', { + * 'length': 24, + * 'separator': /,? +/ + * }); + * // => 'hi-diddly-ho there...' + * + * _.trunc('hi-diddly-ho there, neighborino', { + * 'omission': ' [...]' + * }); + * // => 'hi-diddly-ho there, neig [...]' + */ + function trunc(string, options, guard) { + if (guard && isIterateeCall(string, options, guard)) { + options = undefined; + } + var length = DEFAULT_TRUNC_LENGTH, + omission = DEFAULT_TRUNC_OMISSION; + + if (options != null) { + if (isObject(options)) { + var separator = 'separator' in options ? options.separator : separator; + length = 'length' in options ? (+options.length || 0) : length; + omission = 'omission' in options ? baseToString(options.omission) : omission; + } else { + length = +options || 0; + } + } + string = baseToString(string); + if (length >= string.length) { + return string; + } + var end = length - omission.length; + if (end < 1) { + return omission; + } + var result = string.slice(0, end); + if (separator == null) { + return result + omission; + } + if (isRegExp(separator)) { + if (string.slice(end).search(separator)) { + var match, + newEnd, + substring = string.slice(0, end); + + if (!separator.global) { + separator = RegExp(separator.source, (reFlags.exec(separator) || '') + 'g'); + } + separator.lastIndex = 0; + while ((match = separator.exec(substring))) { + newEnd = match.index; + } + result = result.slice(0, newEnd == null ? end : newEnd); + } + } else if (string.indexOf(separator, end) != end) { + var index = result.lastIndexOf(separator); + if (index > -1) { + result = result.slice(0, index); + } + } + return result + omission; + } + + /** + * The inverse of `_.escape`; this method converts the HTML entities + * `&`, `<`, `>`, `"`, `'`, and ``` in `string` to their + * corresponding characters. + * + * **Note:** No other HTML entities are unescaped. To unescape additional HTML + * entities use a third-party library like [_he_](https://mths.be/he). + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to unescape. + * @returns {string} Returns the unescaped string. + * @example + * + * _.unescape('fred, barney, & pebbles'); + * // => 'fred, barney, & pebbles' + */ + function unescape(string) { + string = baseToString(string); + return (string && reHasEscapedHtml.test(string)) + ? string.replace(reEscapedHtml, unescapeHtmlChar) + : string; + } + + /** + * Splits `string` into an array of its words. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to inspect. + * @param {RegExp|string} [pattern] The pattern to match words. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Array} Returns the words of `string`. + * @example + * + * _.words('fred, barney, & pebbles'); + * // => ['fred', 'barney', 'pebbles'] + * + * _.words('fred, barney, & pebbles', /[^, ]+/g); + * // => ['fred', 'barney', '&', 'pebbles'] + */ + function words(string, pattern, guard) { + if (guard && isIterateeCall(string, pattern, guard)) { + pattern = undefined; + } + string = baseToString(string); + return string.match(pattern || reWords) || []; + } + + /*------------------------------------------------------------------------*/ + + /** + * Attempts to invoke `func`, returning either the result or the caught error + * object. Any additional arguments are provided to `func` when it is invoked. + * + * @static + * @memberOf _ + * @category Utility + * @param {Function} func The function to attempt. + * @returns {*} Returns the `func` result or error object. + * @example + * + * // avoid throwing errors for invalid selectors + * var elements = _.attempt(function(selector) { + * return document.querySelectorAll(selector); + * }, '>_>'); + * + * if (_.isError(elements)) { + * elements = []; + * } + */ + var attempt = restParam(function(func, args) { + try { + return func.apply(undefined, args); + } catch(e) { + return isError(e) ? e : new Error(e); + } + }); + + /** + * Creates a function that invokes `func` with the `this` binding of `thisArg` + * and arguments of the created function. If `func` is a property name the + * created callback returns the property value for a given element. If `func` + * is an object the created callback returns `true` for elements that contain + * the equivalent object properties, otherwise it returns `false`. + * + * @static + * @memberOf _ + * @alias iteratee + * @category Utility + * @param {*} [func=_.identity] The value to convert to a callback. + * @param {*} [thisArg] The `this` binding of `func`. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Function} Returns the callback. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 } + * ]; + * + * // wrap to create custom callback shorthands + * _.callback = _.wrap(_.callback, function(callback, func, thisArg) { + * var match = /^(.+?)__([gl]t)(.+)$/.exec(func); + * if (!match) { + * return callback(func, thisArg); + * } + * return function(object) { + * return match[2] == 'gt' + * ? object[match[1]] > match[3] + * : object[match[1]] < match[3]; + * }; + * }); + * + * _.filter(users, 'age__gt36'); + * // => [{ 'user': 'fred', 'age': 40 }] + */ + function callback(func, thisArg, guard) { + if (guard && isIterateeCall(func, thisArg, guard)) { + thisArg = undefined; + } + return isObjectLike(func) + ? matches(func) + : baseCallback(func, thisArg); + } + + /** + * Creates a function that returns `value`. + * + * @static + * @memberOf _ + * @category Utility + * @param {*} value The value to return from the new function. + * @returns {Function} Returns the new function. + * @example + * + * var object = { 'user': 'fred' }; + * var getter = _.constant(object); + * + * getter() === object; + * // => true + */ + function constant(value) { + return function() { + return value; + }; + } + + /** + * This method returns the first argument provided to it. + * + * @static + * @memberOf _ + * @category Utility + * @param {*} value Any value. + * @returns {*} Returns `value`. + * @example + * + * var object = { 'user': 'fred' }; + * + * _.identity(object) === object; + * // => true + */ + function identity(value) { + return value; + } + + /** + * Creates a function that performs a deep comparison between a given object + * and `source`, returning `true` if the given object has equivalent property + * values, else `false`. + * + * **Note:** This method supports comparing arrays, booleans, `Date` objects, + * numbers, `Object` objects, regexes, and strings. Objects are compared by + * their own, not inherited, enumerable properties. For comparing a single + * own or inherited property value see `_.matchesProperty`. + * + * @static + * @memberOf _ + * @category Utility + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new function. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.filter(users, _.matches({ 'age': 40, 'active': false })); + * // => [{ 'user': 'fred', 'age': 40, 'active': false }] + */ + function matches(source) { + return baseMatches(baseClone(source, true)); + } + + /** + * Creates a function that compares the property value of `path` on a given + * object to `value`. + * + * **Note:** This method supports comparing arrays, booleans, `Date` objects, + * numbers, `Object` objects, regexes, and strings. Objects are compared by + * their own, not inherited, enumerable properties. + * + * @static + * @memberOf _ + * @category Utility + * @param {Array|string} path The path of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new function. + * @example + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * _.find(users, _.matchesProperty('user', 'fred')); + * // => { 'user': 'fred' } + */ + function matchesProperty(path, srcValue) { + return baseMatchesProperty(path, baseClone(srcValue, true)); + } + + /** + * Creates a function that invokes the method at `path` on a given object. + * Any additional arguments are provided to the invoked method. + * + * @static + * @memberOf _ + * @category Utility + * @param {Array|string} path The path of the method to invoke. + * @param {...*} [args] The arguments to invoke the method with. + * @returns {Function} Returns the new function. + * @example + * + * var objects = [ + * { 'a': { 'b': { 'c': _.constant(2) } } }, + * { 'a': { 'b': { 'c': _.constant(1) } } } + * ]; + * + * _.map(objects, _.method('a.b.c')); + * // => [2, 1] + * + * _.invoke(_.sortBy(objects, _.method(['a', 'b', 'c'])), 'a.b.c'); + * // => [1, 2] + */ + var method = restParam(function(path, args) { + return function(object) { + return invokePath(object, path, args); + }; + }); + + /** + * The opposite of `_.method`; this method creates a function that invokes + * the method at a given path on `object`. Any additional arguments are + * provided to the invoked method. + * + * @static + * @memberOf _ + * @category Utility + * @param {Object} object The object to query. + * @param {...*} [args] The arguments to invoke the method with. + * @returns {Function} Returns the new function. + * @example + * + * var array = _.times(3, _.constant), + * object = { 'a': array, 'b': array, 'c': array }; + * + * _.map(['a[2]', 'c[0]'], _.methodOf(object)); + * // => [2, 0] + * + * _.map([['a', '2'], ['c', '0']], _.methodOf(object)); + * // => [2, 0] + */ + var methodOf = restParam(function(object, args) { + return function(path) { + return invokePath(object, path, args); + }; + }); + + /** + * Adds all own enumerable function properties of a source object to the + * destination object. If `object` is a function then methods are added to + * its prototype as well. + * + * **Note:** Use `_.runInContext` to create a pristine `lodash` function to + * avoid conflicts caused by modifying the original. + * + * @static + * @memberOf _ + * @category Utility + * @param {Function|Object} [object=lodash] The destination object. + * @param {Object} source The object of functions to add. + * @param {Object} [options] The options object. + * @param {boolean} [options.chain=true] Specify whether the functions added + * are chainable. + * @returns {Function|Object} Returns `object`. + * @example + * + * function vowels(string) { + * return _.filter(string, function(v) { + * return /[aeiou]/i.test(v); + * }); + * } + * + * _.mixin({ 'vowels': vowels }); + * _.vowels('fred'); + * // => ['e'] + * + * _('fred').vowels().value(); + * // => ['e'] + * + * _.mixin({ 'vowels': vowels }, { 'chain': false }); + * _('fred').vowels(); + * // => ['e'] + */ + function mixin(object, source, options) { + if (options == null) { + var isObj = isObject(source), + props = isObj ? keys(source) : undefined, + methodNames = (props && props.length) ? baseFunctions(source, props) : undefined; + + if (!(methodNames ? methodNames.length : isObj)) { + methodNames = false; + options = source; + source = object; + object = this; + } + } + if (!methodNames) { + methodNames = baseFunctions(source, keys(source)); + } + var chain = true, + index = -1, + isFunc = isFunction(object), + length = methodNames.length; + + if (options === false) { + chain = false; + } else if (isObject(options) && 'chain' in options) { + chain = options.chain; + } + while (++index < length) { + var methodName = methodNames[index], + func = source[methodName]; + + object[methodName] = func; + if (isFunc) { + object.prototype[methodName] = (function(func) { + return function() { + var chainAll = this.__chain__; + if (chain || chainAll) { + var result = object(this.__wrapped__), + actions = result.__actions__ = arrayCopy(this.__actions__); + + actions.push({ 'func': func, 'args': arguments, 'thisArg': object }); + result.__chain__ = chainAll; + return result; + } + return func.apply(object, arrayPush([this.value()], arguments)); + }; + }(func)); + } + } + return object; + } + + /** + * Reverts the `_` variable to its previous value and returns a reference to + * the `lodash` function. + * + * @static + * @memberOf _ + * @category Utility + * @returns {Function} Returns the `lodash` function. + * @example + * + * var lodash = _.noConflict(); + */ + function noConflict() { + root._ = oldDash; + return this; + } + + /** + * A no-operation function that returns `undefined` regardless of the + * arguments it receives. + * + * @static + * @memberOf _ + * @category Utility + * @example + * + * var object = { 'user': 'fred' }; + * + * _.noop(object) === undefined; + * // => true + */ + function noop() { + // No operation performed. + } + + /** + * Creates a function that returns the property value at `path` on a + * given object. + * + * @static + * @memberOf _ + * @category Utility + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new function. + * @example + * + * var objects = [ + * { 'a': { 'b': { 'c': 2 } } }, + * { 'a': { 'b': { 'c': 1 } } } + * ]; + * + * _.map(objects, _.property('a.b.c')); + * // => [2, 1] + * + * _.pluck(_.sortBy(objects, _.property(['a', 'b', 'c'])), 'a.b.c'); + * // => [1, 2] + */ + function property(path) { + return isKey(path) ? baseProperty(path) : basePropertyDeep(path); + } + + /** + * The opposite of `_.property`; this method creates a function that returns + * the property value at a given path on `object`. + * + * @static + * @memberOf _ + * @category Utility + * @param {Object} object The object to query. + * @returns {Function} Returns the new function. + * @example + * + * var array = [0, 1, 2], + * object = { 'a': array, 'b': array, 'c': array }; + * + * _.map(['a[2]', 'c[0]'], _.propertyOf(object)); + * // => [2, 0] + * + * _.map([['a', '2'], ['c', '0']], _.propertyOf(object)); + * // => [2, 0] + */ + function propertyOf(object) { + return function(path) { + return baseGet(object, toPath(path), path + ''); + }; + } + + /** + * Creates an array of numbers (positive and/or negative) progressing from + * `start` up to, but not including, `end`. If `end` is not specified it is + * set to `start` with `start` then set to `0`. If `end` is less than `start` + * a zero-length range is created unless a negative `step` is specified. + * + * @static + * @memberOf _ + * @category Utility + * @param {number} [start=0] The start of the range. + * @param {number} end The end of the range. + * @param {number} [step=1] The value to increment or decrement by. + * @returns {Array} Returns the new array of numbers. + * @example + * + * _.range(4); + * // => [0, 1, 2, 3] + * + * _.range(1, 5); + * // => [1, 2, 3, 4] + * + * _.range(0, 20, 5); + * // => [0, 5, 10, 15] + * + * _.range(0, -4, -1); + * // => [0, -1, -2, -3] + * + * _.range(1, 4, 0); + * // => [1, 1, 1] + * + * _.range(0); + * // => [] + */ + function range(start, end, step) { + if (step && isIterateeCall(start, end, step)) { + end = step = undefined; + } + start = +start || 0; + step = step == null ? 1 : (+step || 0); + + if (end == null) { + end = start; + start = 0; + } else { + end = +end || 0; + } + // Use `Array(length)` so engines like Chakra and V8 avoid slower modes. + // See https://youtu.be/XAqIpGU8ZZk#t=17m25s for more details. + var index = -1, + length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), + result = Array(length); + + while (++index < length) { + result[index] = start; + start += step; + } + return result; + } + + /** + * Invokes the iteratee function `n` times, returning an array of the results + * of each invocation. The `iteratee` is bound to `thisArg` and invoked with + * one argument; (index). + * + * @static + * @memberOf _ + * @category Utility + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Array} Returns the array of results. + * @example + * + * var diceRolls = _.times(3, _.partial(_.random, 1, 6, false)); + * // => [3, 6, 4] + * + * _.times(3, function(n) { + * mage.castSpell(n); + * }); + * // => invokes `mage.castSpell(n)` three times with `n` of `0`, `1`, and `2` + * + * _.times(3, function(n) { + * this.cast(n); + * }, mage); + * // => also invokes `mage.castSpell(n)` three times + */ + function times(n, iteratee, thisArg) { + n = nativeFloor(n); + + // Exit early to avoid a JSC JIT bug in Safari 8 + // where `Array(0)` is treated as `Array(1)`. + if (n < 1 || !nativeIsFinite(n)) { + return []; + } + var index = -1, + result = Array(nativeMin(n, MAX_ARRAY_LENGTH)); + + iteratee = bindCallback(iteratee, thisArg, 1); + while (++index < n) { + if (index < MAX_ARRAY_LENGTH) { + result[index] = iteratee(index); + } else { + iteratee(index); + } + } + return result; + } + + /** + * Generates a unique ID. If `prefix` is provided the ID is appended to it. + * + * @static + * @memberOf _ + * @category Utility + * @param {string} [prefix] The value to prefix the ID with. + * @returns {string} Returns the unique ID. + * @example + * + * _.uniqueId('contact_'); + * // => 'contact_104' + * + * _.uniqueId(); + * // => '105' + */ + function uniqueId(prefix) { + var id = ++idCounter; + return baseToString(prefix) + id; + } + + /*------------------------------------------------------------------------*/ + + /** + * Adds two numbers. + * + * @static + * @memberOf _ + * @category Math + * @param {number} augend The first number to add. + * @param {number} addend The second number to add. + * @returns {number} Returns the sum. + * @example + * + * _.add(6, 4); + * // => 10 + */ + function add(augend, addend) { + return (+augend || 0) + (+addend || 0); + } + + /** + * Calculates `n` rounded up to `precision`. + * + * @static + * @memberOf _ + * @category Math + * @param {number} n The number to round up. + * @param {number} [precision=0] The precision to round up to. + * @returns {number} Returns the rounded up number. + * @example + * + * _.ceil(4.006); + * // => 5 + * + * _.ceil(6.004, 2); + * // => 6.01 + * + * _.ceil(6040, -2); + * // => 6100 + */ + var ceil = createRound('ceil'); + + /** + * Calculates `n` rounded down to `precision`. + * + * @static + * @memberOf _ + * @category Math + * @param {number} n The number to round down. + * @param {number} [precision=0] The precision to round down to. + * @returns {number} Returns the rounded down number. + * @example + * + * _.floor(4.006); + * // => 4 + * + * _.floor(0.046, 2); + * // => 0.04 + * + * _.floor(4060, -2); + * // => 4000 + */ + var floor = createRound('floor'); + + /** + * Gets the maximum value of `collection`. If `collection` is empty or falsey + * `-Infinity` is returned. If an iteratee function is provided it is invoked + * for each value in `collection` to generate the criterion by which the value + * is ranked. The `iteratee` is bound to `thisArg` and invoked with three + * arguments: (value, index, collection). + * + * If a property name is provided for `iteratee` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `iteratee` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Math + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [iteratee] The function invoked per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {*} Returns the maximum value. + * @example + * + * _.max([4, 2, 8, 6]); + * // => 8 + * + * _.max([]); + * // => -Infinity + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 } + * ]; + * + * _.max(users, function(chr) { + * return chr.age; + * }); + * // => { 'user': 'fred', 'age': 40 } + * + * // using the `_.property` callback shorthand + * _.max(users, 'age'); + * // => { 'user': 'fred', 'age': 40 } + */ + var max = createExtremum(gt, NEGATIVE_INFINITY); + + /** + * Gets the minimum value of `collection`. If `collection` is empty or falsey + * `Infinity` is returned. If an iteratee function is provided it is invoked + * for each value in `collection` to generate the criterion by which the value + * is ranked. The `iteratee` is bound to `thisArg` and invoked with three + * arguments: (value, index, collection). + * + * If a property name is provided for `iteratee` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `iteratee` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Math + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [iteratee] The function invoked per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {*} Returns the minimum value. + * @example + * + * _.min([4, 2, 8, 6]); + * // => 2 + * + * _.min([]); + * // => Infinity + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 } + * ]; + * + * _.min(users, function(chr) { + * return chr.age; + * }); + * // => { 'user': 'barney', 'age': 36 } + * + * // using the `_.property` callback shorthand + * _.min(users, 'age'); + * // => { 'user': 'barney', 'age': 36 } + */ + var min = createExtremum(lt, POSITIVE_INFINITY); + + /** + * Calculates `n` rounded to `precision`. + * + * @static + * @memberOf _ + * @category Math + * @param {number} n The number to round. + * @param {number} [precision=0] The precision to round to. + * @returns {number} Returns the rounded number. + * @example + * + * _.round(4.006); + * // => 4 + * + * _.round(4.006, 2); + * // => 4.01 + * + * _.round(4060, -2); + * // => 4100 + */ + var round = createRound('round'); + + /** + * Gets the sum of the values in `collection`. + * + * @static + * @memberOf _ + * @category Math + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [iteratee] The function invoked per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {number} Returns the sum. + * @example + * + * _.sum([4, 6]); + * // => 10 + * + * _.sum({ 'a': 4, 'b': 6 }); + * // => 10 + * + * var objects = [ + * { 'n': 4 }, + * { 'n': 6 } + * ]; + * + * _.sum(objects, function(object) { + * return object.n; + * }); + * // => 10 + * + * // using the `_.property` callback shorthand + * _.sum(objects, 'n'); + * // => 10 + */ + function sum(collection, iteratee, thisArg) { + if (thisArg && isIterateeCall(collection, iteratee, thisArg)) { + iteratee = undefined; + } + iteratee = getCallback(iteratee, thisArg, 3); + return iteratee.length == 1 + ? arraySum(isArray(collection) ? collection : toIterable(collection), iteratee) + : baseSum(collection, iteratee); + } + + /*------------------------------------------------------------------------*/ + + // Ensure wrappers are instances of `baseLodash`. + lodash.prototype = baseLodash.prototype; + + LodashWrapper.prototype = baseCreate(baseLodash.prototype); + LodashWrapper.prototype.constructor = LodashWrapper; + + LazyWrapper.prototype = baseCreate(baseLodash.prototype); + LazyWrapper.prototype.constructor = LazyWrapper; + + // Add functions to the `Map` cache. + MapCache.prototype['delete'] = mapDelete; + MapCache.prototype.get = mapGet; + MapCache.prototype.has = mapHas; + MapCache.prototype.set = mapSet; + + // Add functions to the `Set` cache. + SetCache.prototype.push = cachePush; + + // Assign cache to `_.memoize`. + memoize.Cache = MapCache; + + // Add functions that return wrapped values when chaining. + lodash.after = after; + lodash.ary = ary; + lodash.assign = assign; + lodash.at = at; + lodash.before = before; + lodash.bind = bind; + lodash.bindAll = bindAll; + lodash.bindKey = bindKey; + lodash.callback = callback; + lodash.chain = chain; + lodash.chunk = chunk; + lodash.compact = compact; + lodash.constant = constant; + lodash.countBy = countBy; + lodash.create = create; + lodash.curry = curry; + lodash.curryRight = curryRight; + lodash.debounce = debounce; + lodash.defaults = defaults; + lodash.defaultsDeep = defaultsDeep; + lodash.defer = defer; + lodash.delay = delay; + lodash.difference = difference; + lodash.drop = drop; + lodash.dropRight = dropRight; + lodash.dropRightWhile = dropRightWhile; + lodash.dropWhile = dropWhile; + lodash.fill = fill; + lodash.filter = filter; + lodash.flatten = flatten; + lodash.flattenDeep = flattenDeep; + lodash.flow = flow; + lodash.flowRight = flowRight; + lodash.forEach = forEach; + lodash.forEachRight = forEachRight; + lodash.forIn = forIn; + lodash.forInRight = forInRight; + lodash.forOwn = forOwn; + lodash.forOwnRight = forOwnRight; + lodash.functions = functions; + lodash.groupBy = groupBy; + lodash.indexBy = indexBy; + lodash.initial = initial; + lodash.intersection = intersection; + lodash.invert = invert; + lodash.invoke = invoke; + lodash.keys = keys; + lodash.keysIn = keysIn; + lodash.map = map; + lodash.mapKeys = mapKeys; + lodash.mapValues = mapValues; + lodash.matches = matches; + lodash.matchesProperty = matchesProperty; + lodash.memoize = memoize; + lodash.merge = merge; + lodash.method = method; + lodash.methodOf = methodOf; + lodash.mixin = mixin; + lodash.modArgs = modArgs; + lodash.negate = negate; + lodash.omit = omit; + lodash.once = once; + lodash.pairs = pairs; + lodash.partial = partial; + lodash.partialRight = partialRight; + lodash.partition = partition; + lodash.pick = pick; + lodash.pluck = pluck; + lodash.property = property; + lodash.propertyOf = propertyOf; + lodash.pull = pull; + lodash.pullAt = pullAt; + lodash.range = range; + lodash.rearg = rearg; + lodash.reject = reject; + lodash.remove = remove; + lodash.rest = rest; + lodash.restParam = restParam; + lodash.set = set; + lodash.shuffle = shuffle; + lodash.slice = slice; + lodash.sortBy = sortBy; + lodash.sortByAll = sortByAll; + lodash.sortByOrder = sortByOrder; + lodash.spread = spread; + lodash.take = take; + lodash.takeRight = takeRight; + lodash.takeRightWhile = takeRightWhile; + lodash.takeWhile = takeWhile; + lodash.tap = tap; + lodash.throttle = throttle; + lodash.thru = thru; + lodash.times = times; + lodash.toArray = toArray; + lodash.toPlainObject = toPlainObject; + lodash.transform = transform; + lodash.union = union; + lodash.uniq = uniq; + lodash.unzip = unzip; + lodash.unzipWith = unzipWith; + lodash.values = values; + lodash.valuesIn = valuesIn; + lodash.where = where; + lodash.without = without; + lodash.wrap = wrap; + lodash.xor = xor; + lodash.zip = zip; + lodash.zipObject = zipObject; + lodash.zipWith = zipWith; + + // Add aliases. + lodash.backflow = flowRight; + lodash.collect = map; + lodash.compose = flowRight; + lodash.each = forEach; + lodash.eachRight = forEachRight; + lodash.extend = assign; + lodash.iteratee = callback; + lodash.methods = functions; + lodash.object = zipObject; + lodash.select = filter; + lodash.tail = rest; + lodash.unique = uniq; + + // Add functions to `lodash.prototype`. + mixin(lodash, lodash); + + /*------------------------------------------------------------------------*/ + + // Add functions that return unwrapped values when chaining. + lodash.add = add; + lodash.attempt = attempt; + lodash.camelCase = camelCase; + lodash.capitalize = capitalize; + lodash.ceil = ceil; + lodash.clone = clone; + lodash.cloneDeep = cloneDeep; + lodash.deburr = deburr; + lodash.endsWith = endsWith; + lodash.escape = escape; + lodash.escapeRegExp = escapeRegExp; + lodash.every = every; + lodash.find = find; + lodash.findIndex = findIndex; + lodash.findKey = findKey; + lodash.findLast = findLast; + lodash.findLastIndex = findLastIndex; + lodash.findLastKey = findLastKey; + lodash.findWhere = findWhere; + lodash.first = first; + lodash.floor = floor; + lodash.get = get; + lodash.gt = gt; + lodash.gte = gte; + lodash.has = has; + lodash.identity = identity; + lodash.includes = includes; + lodash.indexOf = indexOf; + lodash.inRange = inRange; + lodash.isArguments = isArguments; + lodash.isArray = isArray; + lodash.isBoolean = isBoolean; + lodash.isDate = isDate; + lodash.isElement = isElement; + lodash.isEmpty = isEmpty; + lodash.isEqual = isEqual; + lodash.isError = isError; + lodash.isFinite = isFinite; + lodash.isFunction = isFunction; + lodash.isMatch = isMatch; + lodash.isNaN = isNaN; + lodash.isNative = isNative; + lodash.isNull = isNull; + lodash.isNumber = isNumber; + lodash.isObject = isObject; + lodash.isPlainObject = isPlainObject; + lodash.isRegExp = isRegExp; + lodash.isString = isString; + lodash.isTypedArray = isTypedArray; + lodash.isUndefined = isUndefined; + lodash.kebabCase = kebabCase; + lodash.last = last; + lodash.lastIndexOf = lastIndexOf; + lodash.lt = lt; + lodash.lte = lte; + lodash.max = max; + lodash.min = min; + lodash.noConflict = noConflict; + lodash.noop = noop; + lodash.now = now; + lodash.pad = pad; + lodash.padLeft = padLeft; + lodash.padRight = padRight; + lodash.parseInt = parseInt; + lodash.random = random; + lodash.reduce = reduce; + lodash.reduceRight = reduceRight; + lodash.repeat = repeat; + lodash.result = result; + lodash.round = round; + lodash.runInContext = runInContext; + lodash.size = size; + lodash.snakeCase = snakeCase; + lodash.some = some; + lodash.sortedIndex = sortedIndex; + lodash.sortedLastIndex = sortedLastIndex; + lodash.startCase = startCase; + lodash.startsWith = startsWith; + lodash.sum = sum; + lodash.template = template; + lodash.trim = trim; + lodash.trimLeft = trimLeft; + lodash.trimRight = trimRight; + lodash.trunc = trunc; + lodash.unescape = unescape; + lodash.uniqueId = uniqueId; + lodash.words = words; + + // Add aliases. + lodash.all = every; + lodash.any = some; + lodash.contains = includes; + lodash.eq = isEqual; + lodash.detect = find; + lodash.foldl = reduce; + lodash.foldr = reduceRight; + lodash.head = first; + lodash.include = includes; + lodash.inject = reduce; + + mixin(lodash, (function() { + var source = {}; + baseForOwn(lodash, function(func, methodName) { + if (!lodash.prototype[methodName]) { + source[methodName] = func; + } + }); + return source; + }()), false); + + /*------------------------------------------------------------------------*/ + + // Add functions capable of returning wrapped and unwrapped values when chaining. + lodash.sample = sample; + + lodash.prototype.sample = function(n) { + if (!this.__chain__ && n == null) { + return sample(this.value()); + } + return this.thru(function(value) { + return sample(value, n); + }); + }; + + /*------------------------------------------------------------------------*/ + + /** + * The semantic version number. + * + * @static + * @memberOf _ + * @type string + */ + lodash.VERSION = VERSION; + + // Assign default placeholders. + arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) { + lodash[methodName].placeholder = lodash; + }); + + // Add `LazyWrapper` methods for `_.drop` and `_.take` variants. + arrayEach(['drop', 'take'], function(methodName, index) { + LazyWrapper.prototype[methodName] = function(n) { + var filtered = this.__filtered__; + if (filtered && !index) { + return new LazyWrapper(this); + } + n = n == null ? 1 : nativeMax(nativeFloor(n) || 0, 0); + + var result = this.clone(); + if (filtered) { + result.__takeCount__ = nativeMin(result.__takeCount__, n); + } else { + result.__views__.push({ 'size': n, 'type': methodName + (result.__dir__ < 0 ? 'Right' : '') }); + } + return result; + }; + + LazyWrapper.prototype[methodName + 'Right'] = function(n) { + return this.reverse()[methodName](n).reverse(); + }; + }); + + // Add `LazyWrapper` methods that accept an `iteratee` value. + arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) { + var type = index + 1, + isFilter = type != LAZY_MAP_FLAG; + + LazyWrapper.prototype[methodName] = function(iteratee, thisArg) { + var result = this.clone(); + result.__iteratees__.push({ 'iteratee': getCallback(iteratee, thisArg, 1), 'type': type }); + result.__filtered__ = result.__filtered__ || isFilter; + return result; + }; + }); + + // Add `LazyWrapper` methods for `_.first` and `_.last`. + arrayEach(['first', 'last'], function(methodName, index) { + var takeName = 'take' + (index ? 'Right' : ''); + + LazyWrapper.prototype[methodName] = function() { + return this[takeName](1).value()[0]; + }; + }); + + // Add `LazyWrapper` methods for `_.initial` and `_.rest`. + arrayEach(['initial', 'rest'], function(methodName, index) { + var dropName = 'drop' + (index ? '' : 'Right'); + + LazyWrapper.prototype[methodName] = function() { + return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1); + }; + }); + + // Add `LazyWrapper` methods for `_.pluck` and `_.where`. + arrayEach(['pluck', 'where'], function(methodName, index) { + var operationName = index ? 'filter' : 'map', + createCallback = index ? baseMatches : property; + + LazyWrapper.prototype[methodName] = function(value) { + return this[operationName](createCallback(value)); + }; + }); + + LazyWrapper.prototype.compact = function() { + return this.filter(identity); + }; + + LazyWrapper.prototype.reject = function(predicate, thisArg) { + predicate = getCallback(predicate, thisArg, 1); + return this.filter(function(value) { + return !predicate(value); + }); + }; + + LazyWrapper.prototype.slice = function(start, end) { + start = start == null ? 0 : (+start || 0); + + var result = this; + if (result.__filtered__ && (start > 0 || end < 0)) { + return new LazyWrapper(result); + } + if (start < 0) { + result = result.takeRight(-start); + } else if (start) { + result = result.drop(start); + } + if (end !== undefined) { + end = (+end || 0); + result = end < 0 ? result.dropRight(-end) : result.take(end - start); + } + return result; + }; + + LazyWrapper.prototype.takeRightWhile = function(predicate, thisArg) { + return this.reverse().takeWhile(predicate, thisArg).reverse(); + }; + + LazyWrapper.prototype.toArray = function() { + return this.take(POSITIVE_INFINITY); + }; + + // Add `LazyWrapper` methods to `lodash.prototype`. + baseForOwn(LazyWrapper.prototype, function(func, methodName) { + var checkIteratee = /^(?:filter|map|reject)|While$/.test(methodName), + retUnwrapped = /^(?:first|last)$/.test(methodName), + lodashFunc = lodash[retUnwrapped ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName]; + + if (!lodashFunc) { + return; + } + lodash.prototype[methodName] = function() { + var args = retUnwrapped ? [1] : arguments, + chainAll = this.__chain__, + value = this.__wrapped__, + isHybrid = !!this.__actions__.length, + isLazy = value instanceof LazyWrapper, + iteratee = args[0], + useLazy = isLazy || isArray(value); + + if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) { + // Avoid lazy use if the iteratee has a "length" value other than `1`. + isLazy = useLazy = false; + } + var interceptor = function(value) { + return (retUnwrapped && chainAll) + ? lodashFunc(value, 1)[0] + : lodashFunc.apply(undefined, arrayPush([value], args)); + }; + + var action = { 'func': thru, 'args': [interceptor], 'thisArg': undefined }, + onlyLazy = isLazy && !isHybrid; + + if (retUnwrapped && !chainAll) { + if (onlyLazy) { + value = value.clone(); + value.__actions__.push(action); + return func.call(value); + } + return lodashFunc.call(undefined, this.value())[0]; + } + if (!retUnwrapped && useLazy) { + value = onlyLazy ? value : new LazyWrapper(this); + var result = func.apply(value, args); + result.__actions__.push(action); + return new LodashWrapper(result, chainAll); + } + return this.thru(interceptor); + }; + }); + + // Add `Array` and `String` methods to `lodash.prototype`. + arrayEach(['join', 'pop', 'push', 'replace', 'shift', 'sort', 'splice', 'split', 'unshift'], function(methodName) { + var func = (/^(?:replace|split)$/.test(methodName) ? stringProto : arrayProto)[methodName], + chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru', + retUnwrapped = /^(?:join|pop|replace|shift)$/.test(methodName); + + lodash.prototype[methodName] = function() { + var args = arguments; + if (retUnwrapped && !this.__chain__) { + return func.apply(this.value(), args); + } + return this[chainName](function(value) { + return func.apply(value, args); + }); + }; + }); + + // Map minified function names to their real names. + baseForOwn(LazyWrapper.prototype, function(func, methodName) { + var lodashFunc = lodash[methodName]; + if (lodashFunc) { + var key = lodashFunc.name, + names = realNames[key] || (realNames[key] = []); + + names.push({ 'name': methodName, 'func': lodashFunc }); + } + }); + + realNames[createHybridWrapper(undefined, BIND_KEY_FLAG).name] = [{ 'name': 'wrapper', 'func': undefined }]; + + // Add functions to the lazy wrapper. + LazyWrapper.prototype.clone = lazyClone; + LazyWrapper.prototype.reverse = lazyReverse; + LazyWrapper.prototype.value = lazyValue; + + // Add chaining functions to the `lodash` wrapper. + lodash.prototype.chain = wrapperChain; + lodash.prototype.commit = wrapperCommit; + lodash.prototype.concat = wrapperConcat; + lodash.prototype.plant = wrapperPlant; + lodash.prototype.reverse = wrapperReverse; + lodash.prototype.toString = wrapperToString; + lodash.prototype.run = lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue; + + // Add function aliases to the `lodash` wrapper. + lodash.prototype.collect = lodash.prototype.map; + lodash.prototype.head = lodash.prototype.first; + lodash.prototype.select = lodash.prototype.filter; + lodash.prototype.tail = lodash.prototype.rest; + + return lodash; + } + + /*--------------------------------------------------------------------------*/ + + // Export lodash. + var _ = runInContext(); + + // Some AMD build optimizers like r.js check for condition patterns like the following: + if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) { + // Expose lodash to the global object when an AMD loader is present to avoid + // errors in cases where lodash is loaded by a script tag and not intended + // as an AMD module. See http://requirejs.org/docs/errors.html#mismatch for + // more details. + root._ = _; + + // Define as an anonymous module so, through path mapping, it can be + // referenced as the "underscore" module. + define(function() { + return _; + }); + } + // Check for `exports` after `define` in case a build optimizer adds an `exports` object. + else if (freeExports && freeModule) { + // Export for Node.js or RingoJS. + if (moduleExports) { + (freeModule.exports = _)._ = _; + } + // Export for Rhino with CommonJS support. + else { + freeExports._ = _; + } + } + else { + // Export for a browser or Rhino. + root._ = _; + } +}.call(this)); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/LazyWrapper.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/LazyWrapper.js new file mode 100644 index 00000000..d9c80804 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/LazyWrapper.js @@ -0,0 +1,26 @@ +var baseCreate = require('./baseCreate'), + baseLodash = require('./baseLodash'); + +/** Used as references for `-Infinity` and `Infinity`. */ +var POSITIVE_INFINITY = Number.POSITIVE_INFINITY; + +/** + * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation. + * + * @private + * @param {*} value The value to wrap. + */ +function LazyWrapper(value) { + this.__wrapped__ = value; + this.__actions__ = []; + this.__dir__ = 1; + this.__filtered__ = false; + this.__iteratees__ = []; + this.__takeCount__ = POSITIVE_INFINITY; + this.__views__ = []; +} + +LazyWrapper.prototype = baseCreate(baseLodash.prototype); +LazyWrapper.prototype.constructor = LazyWrapper; + +module.exports = LazyWrapper; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/LodashWrapper.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/LodashWrapper.js new file mode 100644 index 00000000..ab06bc76 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/LodashWrapper.js @@ -0,0 +1,21 @@ +var baseCreate = require('./baseCreate'), + baseLodash = require('./baseLodash'); + +/** + * The base constructor for creating `lodash` wrapper objects. + * + * @private + * @param {*} value The value to wrap. + * @param {boolean} [chainAll] Enable chaining for all wrapper methods. + * @param {Array} [actions=[]] Actions to peform to resolve the unwrapped value. + */ +function LodashWrapper(value, chainAll, actions) { + this.__wrapped__ = value; + this.__actions__ = actions || []; + this.__chain__ = !!chainAll; +} + +LodashWrapper.prototype = baseCreate(baseLodash.prototype); +LodashWrapper.prototype.constructor = LodashWrapper; + +module.exports = LodashWrapper; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/MapCache.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/MapCache.js new file mode 100644 index 00000000..1d7ab981 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/MapCache.js @@ -0,0 +1,24 @@ +var mapDelete = require('./mapDelete'), + mapGet = require('./mapGet'), + mapHas = require('./mapHas'), + mapSet = require('./mapSet'); + +/** + * Creates a cache object to store key/value pairs. + * + * @private + * @static + * @name Cache + * @memberOf _.memoize + */ +function MapCache() { + this.__data__ = {}; +} + +// Add functions to the `Map` cache. +MapCache.prototype['delete'] = mapDelete; +MapCache.prototype.get = mapGet; +MapCache.prototype.has = mapHas; +MapCache.prototype.set = mapSet; + +module.exports = MapCache; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/SetCache.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/SetCache.js new file mode 100644 index 00000000..ae29c55b --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/SetCache.js @@ -0,0 +1,29 @@ +var cachePush = require('./cachePush'), + getNative = require('./getNative'); + +/** Native method references. */ +var Set = getNative(global, 'Set'); + +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeCreate = getNative(Object, 'create'); + +/** + * + * Creates a cache object to store unique values. + * + * @private + * @param {Array} [values] The values to cache. + */ +function SetCache(values) { + var length = values ? values.length : 0; + + this.data = { 'hash': nativeCreate(null), 'set': new Set }; + while (length--) { + this.push(values[length]); + } +} + +// Add functions to the `Set` cache. +SetCache.prototype.push = cachePush; + +module.exports = SetCache; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/arrayConcat.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/arrayConcat.js new file mode 100644 index 00000000..0d131e39 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/arrayConcat.js @@ -0,0 +1,25 @@ +/** + * Creates a new array joining `array` with `other`. + * + * @private + * @param {Array} array The array to join. + * @param {Array} other The other array to join. + * @returns {Array} Returns the new concatenated array. + */ +function arrayConcat(array, other) { + var index = -1, + length = array.length, + othIndex = -1, + othLength = other.length, + result = Array(length + othLength); + + while (++index < length) { + result[index] = array[index]; + } + while (++othIndex < othLength) { + result[index++] = other[othIndex]; + } + return result; +} + +module.exports = arrayConcat; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/arrayCopy.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/arrayCopy.js new file mode 100644 index 00000000..fa7067f9 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/arrayCopy.js @@ -0,0 +1,20 @@ +/** + * Copies the values of `source` to `array`. + * + * @private + * @param {Array} source The array to copy values from. + * @param {Array} [array=[]] The array to copy values to. + * @returns {Array} Returns `array`. + */ +function arrayCopy(source, array) { + var index = -1, + length = source.length; + + array || (array = Array(length)); + while (++index < length) { + array[index] = source[index]; + } + return array; +} + +module.exports = arrayCopy; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/arrayEach.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/arrayEach.js new file mode 100644 index 00000000..0f513824 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/arrayEach.js @@ -0,0 +1,22 @@ +/** + * A specialized version of `_.forEach` for arrays without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ +function arrayEach(array, iteratee) { + var index = -1, + length = array.length; + + while (++index < length) { + if (iteratee(array[index], index, array) === false) { + break; + } + } + return array; +} + +module.exports = arrayEach; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/arrayEachRight.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/arrayEachRight.js new file mode 100644 index 00000000..367e066d --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/arrayEachRight.js @@ -0,0 +1,21 @@ +/** + * A specialized version of `_.forEachRight` for arrays without support for + * callback shorthands and `this` binding. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ +function arrayEachRight(array, iteratee) { + var length = array.length; + + while (length--) { + if (iteratee(array[length], length, array) === false) { + break; + } + } + return array; +} + +module.exports = arrayEachRight; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/arrayEvery.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/arrayEvery.js new file mode 100644 index 00000000..3fe6ed27 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/arrayEvery.js @@ -0,0 +1,23 @@ +/** + * A specialized version of `_.every` for arrays without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false`. + */ +function arrayEvery(array, predicate) { + var index = -1, + length = array.length; + + while (++index < length) { + if (!predicate(array[index], index, array)) { + return false; + } + } + return true; +} + +module.exports = arrayEvery; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/arrayExtremum.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/arrayExtremum.js new file mode 100644 index 00000000..e45badbd --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/arrayExtremum.js @@ -0,0 +1,30 @@ +/** + * A specialized version of `baseExtremum` for arrays which invokes `iteratee` + * with one argument: (value). + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} comparator The function used to compare values. + * @param {*} exValue The initial extremum value. + * @returns {*} Returns the extremum value. + */ +function arrayExtremum(array, iteratee, comparator, exValue) { + var index = -1, + length = array.length, + computed = exValue, + result = computed; + + while (++index < length) { + var value = array[index], + current = +iteratee(value); + + if (comparator(current, computed)) { + computed = current; + result = value; + } + } + return result; +} + +module.exports = arrayExtremum; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/arrayFilter.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/arrayFilter.js new file mode 100644 index 00000000..e14fe069 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/arrayFilter.js @@ -0,0 +1,25 @@ +/** + * A specialized version of `_.filter` for arrays without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function arrayFilter(array, predicate) { + var index = -1, + length = array.length, + resIndex = -1, + result = []; + + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[++resIndex] = value; + } + } + return result; +} + +module.exports = arrayFilter; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/arrayMap.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/arrayMap.js new file mode 100644 index 00000000..777c7c9f --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/arrayMap.js @@ -0,0 +1,21 @@ +/** + * A specialized version of `_.map` for arrays without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function arrayMap(array, iteratee) { + var index = -1, + length = array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; +} + +module.exports = arrayMap; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/arrayPush.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/arrayPush.js new file mode 100644 index 00000000..7d742b38 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/arrayPush.js @@ -0,0 +1,20 @@ +/** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ +function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; + } + return array; +} + +module.exports = arrayPush; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/arrayReduce.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/arrayReduce.js new file mode 100644 index 00000000..f948c8e5 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/arrayReduce.js @@ -0,0 +1,26 @@ +/** + * A specialized version of `_.reduce` for arrays without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initFromArray] Specify using the first element of `array` + * as the initial value. + * @returns {*} Returns the accumulated value. + */ +function arrayReduce(array, iteratee, accumulator, initFromArray) { + var index = -1, + length = array.length; + + if (initFromArray && length) { + accumulator = array[++index]; + } + while (++index < length) { + accumulator = iteratee(accumulator, array[index], index, array); + } + return accumulator; +} + +module.exports = arrayReduce; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/arrayReduceRight.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/arrayReduceRight.js new file mode 100644 index 00000000..d4d68dff --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/arrayReduceRight.js @@ -0,0 +1,24 @@ +/** + * A specialized version of `_.reduceRight` for arrays without support for + * callback shorthands and `this` binding. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initFromArray] Specify using the last element of `array` + * as the initial value. + * @returns {*} Returns the accumulated value. + */ +function arrayReduceRight(array, iteratee, accumulator, initFromArray) { + var length = array.length; + if (initFromArray && length) { + accumulator = array[--length]; + } + while (length--) { + accumulator = iteratee(accumulator, array[length], length, array); + } + return accumulator; +} + +module.exports = arrayReduceRight; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/arraySome.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/arraySome.js new file mode 100644 index 00000000..f7a0bb58 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/arraySome.js @@ -0,0 +1,23 @@ +/** + * A specialized version of `_.some` for arrays without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ +function arraySome(array, predicate) { + var index = -1, + length = array.length; + + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; +} + +module.exports = arraySome; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/arraySum.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/arraySum.js new file mode 100644 index 00000000..0e40c917 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/arraySum.js @@ -0,0 +1,20 @@ +/** + * A specialized version of `_.sum` for arrays without support for callback + * shorthands and `this` binding.. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {number} Returns the sum. + */ +function arraySum(array, iteratee) { + var length = array.length, + result = 0; + + while (length--) { + result += +iteratee(array[length]) || 0; + } + return result; +} + +module.exports = arraySum; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/assignDefaults.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/assignDefaults.js new file mode 100644 index 00000000..affd993a --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/assignDefaults.js @@ -0,0 +1,13 @@ +/** + * Used by `_.defaults` to customize its `_.assign` use. + * + * @private + * @param {*} objectValue The destination object property value. + * @param {*} sourceValue The source object property value. + * @returns {*} Returns the value to assign to the destination object. + */ +function assignDefaults(objectValue, sourceValue) { + return objectValue === undefined ? sourceValue : objectValue; +} + +module.exports = assignDefaults; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/assignOwnDefaults.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/assignOwnDefaults.js new file mode 100644 index 00000000..682c460d --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/assignOwnDefaults.js @@ -0,0 +1,26 @@ +/** Used for native method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Used by `_.template` to customize its `_.assign` use. + * + * **Note:** This function is like `assignDefaults` except that it ignores + * inherited property values when checking if a property is `undefined`. + * + * @private + * @param {*} objectValue The destination object property value. + * @param {*} sourceValue The source object property value. + * @param {string} key The key associated with the object and source values. + * @param {Object} object The destination object. + * @returns {*} Returns the value to assign to the destination object. + */ +function assignOwnDefaults(objectValue, sourceValue, key, object) { + return (objectValue === undefined || !hasOwnProperty.call(object, key)) + ? sourceValue + : objectValue; +} + +module.exports = assignOwnDefaults; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/assignWith.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/assignWith.js new file mode 100644 index 00000000..d2b261ad --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/assignWith.js @@ -0,0 +1,32 @@ +var keys = require('../object/keys'); + +/** + * A specialized version of `_.assign` for customizing assigned values without + * support for argument juggling, multiple sources, and `this` binding `customizer` + * functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {Function} customizer The function to customize assigned values. + * @returns {Object} Returns `object`. + */ +function assignWith(object, source, customizer) { + var index = -1, + props = keys(source), + length = props.length; + + while (++index < length) { + var key = props[index], + value = object[key], + result = customizer(value, source[key], key, object, source); + + if ((result === result ? (result !== value) : (value === value)) || + (value === undefined && !(key in object))) { + object[key] = result; + } + } + return object; +} + +module.exports = assignWith; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseAssign.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseAssign.js new file mode 100644 index 00000000..cfad6e0c --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseAssign.js @@ -0,0 +1,19 @@ +var baseCopy = require('./baseCopy'), + keys = require('../object/keys'); + +/** + * The base implementation of `_.assign` without support for argument juggling, + * multiple sources, and `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssign(object, source) { + return source == null + ? object + : baseCopy(source, keys(source), object); +} + +module.exports = baseAssign; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseAt.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseAt.js new file mode 100644 index 00000000..bbafd1d5 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseAt.js @@ -0,0 +1,32 @@ +var isArrayLike = require('./isArrayLike'), + isIndex = require('./isIndex'); + +/** + * The base implementation of `_.at` without support for string collections + * and individual key arguments. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {number[]|string[]} props The property names or indexes of elements to pick. + * @returns {Array} Returns the new array of picked elements. + */ +function baseAt(collection, props) { + var index = -1, + isNil = collection == null, + isArr = !isNil && isArrayLike(collection), + length = isArr ? collection.length : 0, + propsLength = props.length, + result = Array(propsLength); + + while(++index < propsLength) { + var key = props[index]; + if (isArr) { + result[index] = isIndex(key, length) ? collection[key] : undefined; + } else { + result[index] = isNil ? undefined : collection[key]; + } + } + return result; +} + +module.exports = baseAt; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseCallback.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseCallback.js new file mode 100644 index 00000000..67fe087c --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseCallback.js @@ -0,0 +1,35 @@ +var baseMatches = require('./baseMatches'), + baseMatchesProperty = require('./baseMatchesProperty'), + bindCallback = require('./bindCallback'), + identity = require('../utility/identity'), + property = require('../utility/property'); + +/** + * The base implementation of `_.callback` which supports specifying the + * number of arguments to provide to `func`. + * + * @private + * @param {*} [func=_.identity] The value to convert to a callback. + * @param {*} [thisArg] The `this` binding of `func`. + * @param {number} [argCount] The number of arguments to provide to `func`. + * @returns {Function} Returns the callback. + */ +function baseCallback(func, thisArg, argCount) { + var type = typeof func; + if (type == 'function') { + return thisArg === undefined + ? func + : bindCallback(func, thisArg, argCount); + } + if (func == null) { + return identity; + } + if (type == 'object') { + return baseMatches(func); + } + return thisArg === undefined + ? property(func) + : baseMatchesProperty(func, thisArg); +} + +module.exports = baseCallback; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseClone.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseClone.js new file mode 100644 index 00000000..ebd6649f --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseClone.js @@ -0,0 +1,128 @@ +var arrayCopy = require('./arrayCopy'), + arrayEach = require('./arrayEach'), + baseAssign = require('./baseAssign'), + baseForOwn = require('./baseForOwn'), + initCloneArray = require('./initCloneArray'), + initCloneByTag = require('./initCloneByTag'), + initCloneObject = require('./initCloneObject'), + isArray = require('../lang/isArray'), + isObject = require('../lang/isObject'); + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + mapTag = '[object Map]', + numberTag = '[object Number]', + objectTag = '[object Object]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + weakMapTag = '[object WeakMap]'; + +var arrayBufferTag = '[object ArrayBuffer]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + +/** Used to identify `toStringTag` values supported by `_.clone`. */ +var cloneableTags = {}; +cloneableTags[argsTag] = cloneableTags[arrayTag] = +cloneableTags[arrayBufferTag] = cloneableTags[boolTag] = +cloneableTags[dateTag] = cloneableTags[float32Tag] = +cloneableTags[float64Tag] = cloneableTags[int8Tag] = +cloneableTags[int16Tag] = cloneableTags[int32Tag] = +cloneableTags[numberTag] = cloneableTags[objectTag] = +cloneableTags[regexpTag] = cloneableTags[stringTag] = +cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = +cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true; +cloneableTags[errorTag] = cloneableTags[funcTag] = +cloneableTags[mapTag] = cloneableTags[setTag] = +cloneableTags[weakMapTag] = false; + +/** Used for native method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ +var objToString = objectProto.toString; + +/** + * The base implementation of `_.clone` without support for argument juggling + * and `this` binding `customizer` functions. + * + * @private + * @param {*} value The value to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @param {Function} [customizer] The function to customize cloning values. + * @param {string} [key] The key of `value`. + * @param {Object} [object] The object `value` belongs to. + * @param {Array} [stackA=[]] Tracks traversed source objects. + * @param {Array} [stackB=[]] Associates clones with source counterparts. + * @returns {*} Returns the cloned value. + */ +function baseClone(value, isDeep, customizer, key, object, stackA, stackB) { + var result; + if (customizer) { + result = object ? customizer(value, key, object) : customizer(value); + } + if (result !== undefined) { + return result; + } + if (!isObject(value)) { + return value; + } + var isArr = isArray(value); + if (isArr) { + result = initCloneArray(value); + if (!isDeep) { + return arrayCopy(value, result); + } + } else { + var tag = objToString.call(value), + isFunc = tag == funcTag; + + if (tag == objectTag || tag == argsTag || (isFunc && !object)) { + result = initCloneObject(isFunc ? {} : value); + if (!isDeep) { + return baseAssign(result, value); + } + } else { + return cloneableTags[tag] + ? initCloneByTag(value, tag, isDeep) + : (object ? value : {}); + } + } + // Check for circular references and return its corresponding clone. + stackA || (stackA = []); + stackB || (stackB = []); + + var length = stackA.length; + while (length--) { + if (stackA[length] == value) { + return stackB[length]; + } + } + // Add the source value to the stack of traversed objects and associate it with its clone. + stackA.push(value); + stackB.push(result); + + // Recursively populate clone (susceptible to call stack limits). + (isArr ? arrayEach : baseForOwn)(value, function(subValue, key) { + result[key] = baseClone(subValue, isDeep, customizer, key, value, stackA, stackB); + }); + return result; +} + +module.exports = baseClone; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseCompareAscending.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseCompareAscending.js new file mode 100644 index 00000000..c8259c72 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseCompareAscending.js @@ -0,0 +1,34 @@ +/** + * The base implementation of `compareAscending` which compares values and + * sorts them in ascending order without guaranteeing a stable sort. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {number} Returns the sort order indicator for `value`. + */ +function baseCompareAscending(value, other) { + if (value !== other) { + var valIsNull = value === null, + valIsUndef = value === undefined, + valIsReflexive = value === value; + + var othIsNull = other === null, + othIsUndef = other === undefined, + othIsReflexive = other === other; + + if ((value > other && !othIsNull) || !valIsReflexive || + (valIsNull && !othIsUndef && othIsReflexive) || + (valIsUndef && othIsReflexive)) { + return 1; + } + if ((value < other && !valIsNull) || !othIsReflexive || + (othIsNull && !valIsUndef && valIsReflexive) || + (othIsUndef && valIsReflexive)) { + return -1; + } + } + return 0; +} + +module.exports = baseCompareAscending; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseCopy.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseCopy.js new file mode 100644 index 00000000..15059f31 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseCopy.js @@ -0,0 +1,23 @@ +/** + * Copies properties of `source` to `object`. + * + * @private + * @param {Object} source The object to copy properties from. + * @param {Array} props The property names to copy. + * @param {Object} [object={}] The object to copy properties to. + * @returns {Object} Returns `object`. + */ +function baseCopy(source, props, object) { + object || (object = {}); + + var index = -1, + length = props.length; + + while (++index < length) { + var key = props[index]; + object[key] = source[key]; + } + return object; +} + +module.exports = baseCopy; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseCreate.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseCreate.js new file mode 100644 index 00000000..be5e1d9d --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseCreate.js @@ -0,0 +1,23 @@ +var isObject = require('../lang/isObject'); + +/** + * The base implementation of `_.create` without support for assigning + * properties to the created object. + * + * @private + * @param {Object} prototype The object to inherit from. + * @returns {Object} Returns the new object. + */ +var baseCreate = (function() { + function object() {} + return function(prototype) { + if (isObject(prototype)) { + object.prototype = prototype; + var result = new object; + object.prototype = undefined; + } + return result || {}; + }; +}()); + +module.exports = baseCreate; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseDelay.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseDelay.js new file mode 100644 index 00000000..c405c37b --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseDelay.js @@ -0,0 +1,21 @@ +/** Used as the `TypeError` message for "Functions" methods. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** + * The base implementation of `_.delay` and `_.defer` which accepts an index + * of where to slice the arguments to provide to `func`. + * + * @private + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @param {Object} args The arguments provide to `func`. + * @returns {number} Returns the timer id. + */ +function baseDelay(func, wait, args) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return setTimeout(function() { func.apply(undefined, args); }, wait); +} + +module.exports = baseDelay; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseDifference.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseDifference.js new file mode 100644 index 00000000..40da1b62 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseDifference.js @@ -0,0 +1,55 @@ +var baseIndexOf = require('./baseIndexOf'), + cacheIndexOf = require('./cacheIndexOf'), + createCache = require('./createCache'); + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** + * The base implementation of `_.difference` which accepts a single array + * of values to exclude. + * + * @private + * @param {Array} array The array to inspect. + * @param {Array} values The values to exclude. + * @returns {Array} Returns the new array of filtered values. + */ +function baseDifference(array, values) { + var length = array ? array.length : 0, + result = []; + + if (!length) { + return result; + } + var index = -1, + indexOf = baseIndexOf, + isCommon = true, + cache = (isCommon && values.length >= LARGE_ARRAY_SIZE) ? createCache(values) : null, + valuesLength = values.length; + + if (cache) { + indexOf = cacheIndexOf; + isCommon = false; + values = cache; + } + outer: + while (++index < length) { + var value = array[index]; + + if (isCommon && value === value) { + var valuesIndex = valuesLength; + while (valuesIndex--) { + if (values[valuesIndex] === value) { + continue outer; + } + } + result.push(value); + } + else if (indexOf(values, value, 0) < 0) { + result.push(value); + } + } + return result; +} + +module.exports = baseDifference; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseEach.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseEach.js new file mode 100644 index 00000000..09ef5a3a --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseEach.js @@ -0,0 +1,15 @@ +var baseForOwn = require('./baseForOwn'), + createBaseEach = require('./createBaseEach'); + +/** + * The base implementation of `_.forEach` without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object|string} Returns `collection`. + */ +var baseEach = createBaseEach(baseForOwn); + +module.exports = baseEach; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseEachRight.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseEachRight.js new file mode 100644 index 00000000..f0520a8b --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseEachRight.js @@ -0,0 +1,15 @@ +var baseForOwnRight = require('./baseForOwnRight'), + createBaseEach = require('./createBaseEach'); + +/** + * The base implementation of `_.forEachRight` without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object|string} Returns `collection`. + */ +var baseEachRight = createBaseEach(baseForOwnRight, true); + +module.exports = baseEachRight; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseEvery.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseEvery.js new file mode 100644 index 00000000..a1fc1f35 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseEvery.js @@ -0,0 +1,22 @@ +var baseEach = require('./baseEach'); + +/** + * The base implementation of `_.every` without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false` + */ +function baseEvery(collection, predicate) { + var result = true; + baseEach(collection, function(value, index, collection) { + result = !!predicate(value, index, collection); + return result; + }); + return result; +} + +module.exports = baseEvery; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseExtremum.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseExtremum.js new file mode 100644 index 00000000..b0efff6f --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseExtremum.js @@ -0,0 +1,29 @@ +var baseEach = require('./baseEach'); + +/** + * Gets the extremum value of `collection` invoking `iteratee` for each value + * in `collection` to generate the criterion by which the value is ranked. + * The `iteratee` is invoked with three arguments: (value, index|key, collection). + * + * @private + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} comparator The function used to compare values. + * @param {*} exValue The initial extremum value. + * @returns {*} Returns the extremum value. + */ +function baseExtremum(collection, iteratee, comparator, exValue) { + var computed = exValue, + result = computed; + + baseEach(collection, function(value, index, collection) { + var current = +iteratee(value, index, collection); + if (comparator(current, computed) || (current === exValue && current === result)) { + computed = current; + result = value; + } + }); + return result; +} + +module.exports = baseExtremum; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseFill.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseFill.js new file mode 100644 index 00000000..ef1a2fa1 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseFill.js @@ -0,0 +1,31 @@ +/** + * The base implementation of `_.fill` without an iteratee call guard. + * + * @private + * @param {Array} array The array to fill. + * @param {*} value The value to fill `array` with. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns `array`. + */ +function baseFill(array, value, start, end) { + var length = array.length; + + start = start == null ? 0 : (+start || 0); + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = (end === undefined || end > length) ? length : (+end || 0); + if (end < 0) { + end += length; + } + length = start > end ? 0 : (end >>> 0); + start >>>= 0; + + while (start < length) { + array[start++] = value; + } + return array; +} + +module.exports = baseFill; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseFilter.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseFilter.js new file mode 100644 index 00000000..27773a47 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseFilter.js @@ -0,0 +1,22 @@ +var baseEach = require('./baseEach'); + +/** + * The base implementation of `_.filter` without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function baseFilter(collection, predicate) { + var result = []; + baseEach(collection, function(value, index, collection) { + if (predicate(value, index, collection)) { + result.push(value); + } + }); + return result; +} + +module.exports = baseFilter; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseFind.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseFind.js new file mode 100644 index 00000000..be5848fb --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseFind.js @@ -0,0 +1,25 @@ +/** + * The base implementation of `_.find`, `_.findLast`, `_.findKey`, and `_.findLastKey`, + * without support for callback shorthands and `this` binding, which iterates + * over `collection` using the provided `eachFunc`. + * + * @private + * @param {Array|Object|string} collection The collection to search. + * @param {Function} predicate The function invoked per iteration. + * @param {Function} eachFunc The function to iterate over `collection`. + * @param {boolean} [retKey] Specify returning the key of the found element + * instead of the element itself. + * @returns {*} Returns the found element or its key, else `undefined`. + */ +function baseFind(collection, predicate, eachFunc, retKey) { + var result; + eachFunc(collection, function(value, key, collection) { + if (predicate(value, key, collection)) { + result = retKey ? key : value; + return false; + } + }); + return result; +} + +module.exports = baseFind; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseFindIndex.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseFindIndex.js new file mode 100644 index 00000000..7d4b5024 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseFindIndex.js @@ -0,0 +1,23 @@ +/** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for callback shorthands and `this` binding. + * + * @private + * @param {Array} array The array to search. + * @param {Function} predicate The function invoked per iteration. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseFindIndex(array, predicate, fromRight) { + var length = array.length, + index = fromRight ? length : -1; + + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; +} + +module.exports = baseFindIndex; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseFlatten.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseFlatten.js new file mode 100644 index 00000000..74432332 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseFlatten.js @@ -0,0 +1,41 @@ +var arrayPush = require('./arrayPush'), + isArguments = require('../lang/isArguments'), + isArray = require('../lang/isArray'), + isArrayLike = require('./isArrayLike'), + isObjectLike = require('./isObjectLike'); + +/** + * The base implementation of `_.flatten` with added support for restricting + * flattening and specifying the start index. + * + * @private + * @param {Array} array The array to flatten. + * @param {boolean} [isDeep] Specify a deep flatten. + * @param {boolean} [isStrict] Restrict flattening to arrays-like objects. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ +function baseFlatten(array, isDeep, isStrict, result) { + result || (result = []); + + var index = -1, + length = array.length; + + while (++index < length) { + var value = array[index]; + if (isObjectLike(value) && isArrayLike(value) && + (isStrict || isArray(value) || isArguments(value))) { + if (isDeep) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, isDeep, isStrict, result); + } else { + arrayPush(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; +} + +module.exports = baseFlatten; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseFor.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseFor.js new file mode 100644 index 00000000..94ee03f9 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseFor.js @@ -0,0 +1,17 @@ +var createBaseFor = require('./createBaseFor'); + +/** + * The base implementation of `baseForIn` and `baseForOwn` which iterates + * over `object` properties returned by `keysFunc` invoking `iteratee` for + * each property. Iteratee functions may exit iteration early by explicitly + * returning `false`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ +var baseFor = createBaseFor(); + +module.exports = baseFor; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseForIn.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseForIn.js new file mode 100644 index 00000000..47d622c3 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseForIn.js @@ -0,0 +1,17 @@ +var baseFor = require('./baseFor'), + keysIn = require('../object/keysIn'); + +/** + * The base implementation of `_.forIn` without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ +function baseForIn(object, iteratee) { + return baseFor(object, iteratee, keysIn); +} + +module.exports = baseForIn; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseForOwn.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseForOwn.js new file mode 100644 index 00000000..bef4d4c3 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseForOwn.js @@ -0,0 +1,17 @@ +var baseFor = require('./baseFor'), + keys = require('../object/keys'); + +/** + * The base implementation of `_.forOwn` without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ +function baseForOwn(object, iteratee) { + return baseFor(object, iteratee, keys); +} + +module.exports = baseForOwn; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseForOwnRight.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseForOwnRight.js new file mode 100644 index 00000000..bb916bc7 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseForOwnRight.js @@ -0,0 +1,17 @@ +var baseForRight = require('./baseForRight'), + keys = require('../object/keys'); + +/** + * The base implementation of `_.forOwnRight` without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ +function baseForOwnRight(object, iteratee) { + return baseForRight(object, iteratee, keys); +} + +module.exports = baseForOwnRight; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseForRight.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseForRight.js new file mode 100644 index 00000000..5ddd1913 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseForRight.js @@ -0,0 +1,15 @@ +var createBaseFor = require('./createBaseFor'); + +/** + * This function is like `baseFor` except that it iterates over properties + * in the opposite order. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ +var baseForRight = createBaseFor(true); + +module.exports = baseForRight; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseFunctions.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseFunctions.js new file mode 100644 index 00000000..d56ea9c5 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseFunctions.js @@ -0,0 +1,27 @@ +var isFunction = require('../lang/isFunction'); + +/** + * The base implementation of `_.functions` which creates an array of + * `object` function property names filtered from those provided. + * + * @private + * @param {Object} object The object to inspect. + * @param {Array} props The property names to filter. + * @returns {Array} Returns the new array of filtered property names. + */ +function baseFunctions(object, props) { + var index = -1, + length = props.length, + resIndex = -1, + result = []; + + while (++index < length) { + var key = props[index]; + if (isFunction(object[key])) { + result[++resIndex] = key; + } + } + return result; +} + +module.exports = baseFunctions; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseGet.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseGet.js new file mode 100644 index 00000000..ad9b1ee1 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseGet.js @@ -0,0 +1,29 @@ +var toObject = require('./toObject'); + +/** + * The base implementation of `get` without support for string paths + * and default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array} path The path of the property to get. + * @param {string} [pathKey] The key representation of path. + * @returns {*} Returns the resolved value. + */ +function baseGet(object, path, pathKey) { + if (object == null) { + return; + } + if (pathKey !== undefined && pathKey in toObject(object)) { + path = [pathKey]; + } + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[path[index++]]; + } + return (index && index == length) ? object : undefined; +} + +module.exports = baseGet; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseIndexOf.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseIndexOf.js new file mode 100644 index 00000000..6b479bce --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseIndexOf.js @@ -0,0 +1,27 @@ +var indexOfNaN = require('./indexOfNaN'); + +/** + * The base implementation of `_.indexOf` without support for binary searches. + * + * @private + * @param {Array} array The array to search. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseIndexOf(array, value, fromIndex) { + if (value !== value) { + return indexOfNaN(array, fromIndex); + } + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (array[index] === value) { + return index; + } + } + return -1; +} + +module.exports = baseIndexOf; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseIsEqual.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseIsEqual.js new file mode 100644 index 00000000..87e14ac5 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseIsEqual.js @@ -0,0 +1,28 @@ +var baseIsEqualDeep = require('./baseIsEqualDeep'), + isObject = require('../lang/isObject'), + isObjectLike = require('./isObjectLike'); + +/** + * The base implementation of `_.isEqual` without support for `this` binding + * `customizer` functions. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {Function} [customizer] The function to customize comparing values. + * @param {boolean} [isLoose] Specify performing partial comparisons. + * @param {Array} [stackA] Tracks traversed `value` objects. + * @param {Array} [stackB] Tracks traversed `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ +function baseIsEqual(value, other, customizer, isLoose, stackA, stackB) { + if (value === other) { + return true; + } + if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) { + return value !== value && other !== other; + } + return baseIsEqualDeep(value, other, baseIsEqual, customizer, isLoose, stackA, stackB); +} + +module.exports = baseIsEqual; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseIsEqualDeep.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseIsEqualDeep.js new file mode 100644 index 00000000..f1dbffe8 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseIsEqualDeep.js @@ -0,0 +1,102 @@ +var equalArrays = require('./equalArrays'), + equalByTag = require('./equalByTag'), + equalObjects = require('./equalObjects'), + isArray = require('../lang/isArray'), + isTypedArray = require('../lang/isTypedArray'); + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + objectTag = '[object Object]'; + +/** Used for native method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ +var objToString = objectProto.toString; + +/** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Function} [customizer] The function to customize comparing objects. + * @param {boolean} [isLoose] Specify performing partial comparisons. + * @param {Array} [stackA=[]] Tracks traversed `value` objects. + * @param {Array} [stackB=[]] Tracks traversed `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function baseIsEqualDeep(object, other, equalFunc, customizer, isLoose, stackA, stackB) { + var objIsArr = isArray(object), + othIsArr = isArray(other), + objTag = arrayTag, + othTag = arrayTag; + + if (!objIsArr) { + objTag = objToString.call(object); + if (objTag == argsTag) { + objTag = objectTag; + } else if (objTag != objectTag) { + objIsArr = isTypedArray(object); + } + } + if (!othIsArr) { + othTag = objToString.call(other); + if (othTag == argsTag) { + othTag = objectTag; + } else if (othTag != objectTag) { + othIsArr = isTypedArray(other); + } + } + var objIsObj = objTag == objectTag, + othIsObj = othTag == objectTag, + isSameTag = objTag == othTag; + + if (isSameTag && !(objIsArr || objIsObj)) { + return equalByTag(object, other, objTag); + } + if (!isLoose) { + var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + return equalFunc(objIsWrapped ? object.value() : object, othIsWrapped ? other.value() : other, customizer, isLoose, stackA, stackB); + } + } + if (!isSameTag) { + return false; + } + // Assume cyclic values are equal. + // For more information on detecting circular references see https://es5.github.io/#JO. + stackA || (stackA = []); + stackB || (stackB = []); + + var length = stackA.length; + while (length--) { + if (stackA[length] == object) { + return stackB[length] == other; + } + } + // Add `object` and `other` to the stack of traversed objects. + stackA.push(object); + stackB.push(other); + + var result = (objIsArr ? equalArrays : equalObjects)(object, other, equalFunc, customizer, isLoose, stackA, stackB); + + stackA.pop(); + stackB.pop(); + + return result; +} + +module.exports = baseIsEqualDeep; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseIsFunction.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseIsFunction.js new file mode 100644 index 00000000..cd92db30 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseIsFunction.js @@ -0,0 +1,15 @@ +/** + * The base implementation of `_.isFunction` without support for environments + * with incorrect `typeof` results. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + */ +function baseIsFunction(value) { + // Avoid a Chakra JIT bug in compatibility modes of IE 11. + // See https://github.com/jashkenas/underscore/issues/1621 for more details. + return typeof value == 'function' || false; +} + +module.exports = baseIsFunction; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseIsMatch.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseIsMatch.js new file mode 100644 index 00000000..ea48bb65 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseIsMatch.js @@ -0,0 +1,52 @@ +var baseIsEqual = require('./baseIsEqual'), + toObject = require('./toObject'); + +/** + * The base implementation of `_.isMatch` without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Object} object The object to inspect. + * @param {Array} matchData The propery names, values, and compare flags to match. + * @param {Function} [customizer] The function to customize comparing objects. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + */ +function baseIsMatch(object, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer; + + if (object == null) { + return !length; + } + object = toObject(object); + while (index--) { + var data = matchData[index]; + if ((noCustomizer && data[2]) + ? data[1] !== object[data[0]] + : !(data[0] in object) + ) { + return false; + } + } + while (++index < length) { + data = matchData[index]; + var key = data[0], + objValue = object[key], + srcValue = data[1]; + + if (noCustomizer && data[2]) { + if (objValue === undefined && !(key in object)) { + return false; + } + } else { + var result = customizer ? customizer(objValue, srcValue, key) : undefined; + if (!(result === undefined ? baseIsEqual(srcValue, objValue, customizer, true) : result)) { + return false; + } + } + } + return true; +} + +module.exports = baseIsMatch; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseLodash.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseLodash.js new file mode 100644 index 00000000..15b79d3f --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseLodash.js @@ -0,0 +1,10 @@ +/** + * The function whose prototype all chaining wrappers inherit from. + * + * @private + */ +function baseLodash() { + // No operation performed. +} + +module.exports = baseLodash; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseMap.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseMap.js new file mode 100644 index 00000000..2906b518 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseMap.js @@ -0,0 +1,23 @@ +var baseEach = require('./baseEach'), + isArrayLike = require('./isArrayLike'); + +/** + * The base implementation of `_.map` without support for callback shorthands + * and `this` binding. + * + * @private + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function baseMap(collection, iteratee) { + var index = -1, + result = isArrayLike(collection) ? Array(collection.length) : []; + + baseEach(collection, function(value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; +} + +module.exports = baseMap; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseMatches.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseMatches.js new file mode 100644 index 00000000..5f76c67d --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseMatches.js @@ -0,0 +1,30 @@ +var baseIsMatch = require('./baseIsMatch'), + getMatchData = require('./getMatchData'), + toObject = require('./toObject'); + +/** + * The base implementation of `_.matches` which does not clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new function. + */ +function baseMatches(source) { + var matchData = getMatchData(source); + if (matchData.length == 1 && matchData[0][2]) { + var key = matchData[0][0], + value = matchData[0][1]; + + return function(object) { + if (object == null) { + return false; + } + return object[key] === value && (value !== undefined || (key in toObject(object))); + }; + } + return function(object) { + return baseIsMatch(object, matchData); + }; +} + +module.exports = baseMatches; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseMatchesProperty.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseMatchesProperty.js new file mode 100644 index 00000000..8f9005ce --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseMatchesProperty.js @@ -0,0 +1,45 @@ +var baseGet = require('./baseGet'), + baseIsEqual = require('./baseIsEqual'), + baseSlice = require('./baseSlice'), + isArray = require('../lang/isArray'), + isKey = require('./isKey'), + isStrictComparable = require('./isStrictComparable'), + last = require('../array/last'), + toObject = require('./toObject'), + toPath = require('./toPath'); + +/** + * The base implementation of `_.matchesProperty` which does not clone `srcValue`. + * + * @private + * @param {string} path The path of the property to get. + * @param {*} srcValue The value to compare. + * @returns {Function} Returns the new function. + */ +function baseMatchesProperty(path, srcValue) { + var isArr = isArray(path), + isCommon = isKey(path) && isStrictComparable(srcValue), + pathKey = (path + ''); + + path = toPath(path); + return function(object) { + if (object == null) { + return false; + } + var key = pathKey; + object = toObject(object); + if ((isArr || !isCommon) && !(key in object)) { + object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1)); + if (object == null) { + return false; + } + key = last(path); + object = toObject(object); + } + return object[key] === srcValue + ? (srcValue !== undefined || (key in object)) + : baseIsEqual(srcValue, object[key], undefined, true); + }; +} + +module.exports = baseMatchesProperty; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseMerge.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseMerge.js new file mode 100644 index 00000000..ab819008 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseMerge.js @@ -0,0 +1,56 @@ +var arrayEach = require('./arrayEach'), + baseMergeDeep = require('./baseMergeDeep'), + isArray = require('../lang/isArray'), + isArrayLike = require('./isArrayLike'), + isObject = require('../lang/isObject'), + isObjectLike = require('./isObjectLike'), + isTypedArray = require('../lang/isTypedArray'), + keys = require('../object/keys'); + +/** + * The base implementation of `_.merge` without support for argument juggling, + * multiple sources, and `this` binding `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {Function} [customizer] The function to customize merged values. + * @param {Array} [stackA=[]] Tracks traversed source objects. + * @param {Array} [stackB=[]] Associates values with source counterparts. + * @returns {Object} Returns `object`. + */ +function baseMerge(object, source, customizer, stackA, stackB) { + if (!isObject(object)) { + return object; + } + var isSrcArr = isArrayLike(source) && (isArray(source) || isTypedArray(source)), + props = isSrcArr ? undefined : keys(source); + + arrayEach(props || source, function(srcValue, key) { + if (props) { + key = srcValue; + srcValue = source[key]; + } + if (isObjectLike(srcValue)) { + stackA || (stackA = []); + stackB || (stackB = []); + baseMergeDeep(object, source, key, baseMerge, customizer, stackA, stackB); + } + else { + var value = object[key], + result = customizer ? customizer(value, srcValue, key, object, source) : undefined, + isCommon = result === undefined; + + if (isCommon) { + result = srcValue; + } + if ((result !== undefined || (isSrcArr && !(key in object))) && + (isCommon || (result === result ? (result !== value) : (value === value)))) { + object[key] = result; + } + } + }); + return object; +} + +module.exports = baseMerge; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseMergeDeep.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseMergeDeep.js new file mode 100644 index 00000000..f8aeac59 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseMergeDeep.js @@ -0,0 +1,67 @@ +var arrayCopy = require('./arrayCopy'), + isArguments = require('../lang/isArguments'), + isArray = require('../lang/isArray'), + isArrayLike = require('./isArrayLike'), + isPlainObject = require('../lang/isPlainObject'), + isTypedArray = require('../lang/isTypedArray'), + toPlainObject = require('../lang/toPlainObject'); + +/** + * A specialized version of `baseMerge` for arrays and objects which performs + * deep merges and tracks traversed objects enabling objects with circular + * references to be merged. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {string} key The key of the value to merge. + * @param {Function} mergeFunc The function to merge values. + * @param {Function} [customizer] The function to customize merged values. + * @param {Array} [stackA=[]] Tracks traversed source objects. + * @param {Array} [stackB=[]] Associates values with source counterparts. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function baseMergeDeep(object, source, key, mergeFunc, customizer, stackA, stackB) { + var length = stackA.length, + srcValue = source[key]; + + while (length--) { + if (stackA[length] == srcValue) { + object[key] = stackB[length]; + return; + } + } + var value = object[key], + result = customizer ? customizer(value, srcValue, key, object, source) : undefined, + isCommon = result === undefined; + + if (isCommon) { + result = srcValue; + if (isArrayLike(srcValue) && (isArray(srcValue) || isTypedArray(srcValue))) { + result = isArray(value) + ? value + : (isArrayLike(value) ? arrayCopy(value) : []); + } + else if (isPlainObject(srcValue) || isArguments(srcValue)) { + result = isArguments(value) + ? toPlainObject(value) + : (isPlainObject(value) ? value : {}); + } + else { + isCommon = false; + } + } + // Add the source value to the stack of traversed objects and associate + // it with its merged value. + stackA.push(srcValue); + stackB.push(result); + + if (isCommon) { + // Recursively merge objects and arrays (susceptible to call stack limits). + object[key] = mergeFunc(result, srcValue, customizer, stackA, stackB); + } else if (result === result ? (result !== value) : (value === value)) { + object[key] = result; + } +} + +module.exports = baseMergeDeep; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseProperty.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseProperty.js new file mode 100644 index 00000000..e515941c --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseProperty.js @@ -0,0 +1,14 @@ +/** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new function. + */ +function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; +} + +module.exports = baseProperty; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/basePropertyDeep.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/basePropertyDeep.js new file mode 100644 index 00000000..1b6ce40a --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/basePropertyDeep.js @@ -0,0 +1,19 @@ +var baseGet = require('./baseGet'), + toPath = require('./toPath'); + +/** + * A specialized version of `baseProperty` which supports deep paths. + * + * @private + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new function. + */ +function basePropertyDeep(path) { + var pathKey = (path + ''); + path = toPath(path); + return function(object) { + return baseGet(object, path, pathKey); + }; +} + +module.exports = basePropertyDeep; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/basePullAt.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/basePullAt.js new file mode 100644 index 00000000..6c4ff842 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/basePullAt.js @@ -0,0 +1,30 @@ +var isIndex = require('./isIndex'); + +/** Used for native method references. */ +var arrayProto = Array.prototype; + +/** Native method references. */ +var splice = arrayProto.splice; + +/** + * The base implementation of `_.pullAt` without support for individual + * index arguments and capturing the removed elements. + * + * @private + * @param {Array} array The array to modify. + * @param {number[]} indexes The indexes of elements to remove. + * @returns {Array} Returns `array`. + */ +function basePullAt(array, indexes) { + var length = array ? indexes.length : 0; + while (length--) { + var index = indexes[length]; + if (index != previous && isIndex(index)) { + var previous = index; + splice.call(array, index, 1); + } + } + return array; +} + +module.exports = basePullAt; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseRandom.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseRandom.js new file mode 100644 index 00000000..fa3326cd --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseRandom.js @@ -0,0 +1,18 @@ +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeFloor = Math.floor, + nativeRandom = Math.random; + +/** + * The base implementation of `_.random` without support for argument juggling + * and returning floating-point numbers. + * + * @private + * @param {number} min The minimum possible value. + * @param {number} max The maximum possible value. + * @returns {number} Returns the random number. + */ +function baseRandom(min, max) { + return min + nativeFloor(nativeRandom() * (max - min + 1)); +} + +module.exports = baseRandom; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseReduce.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseReduce.js new file mode 100644 index 00000000..5e6ae555 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseReduce.js @@ -0,0 +1,24 @@ +/** + * The base implementation of `_.reduce` and `_.reduceRight` without support + * for callback shorthands and `this` binding, which iterates over `collection` + * using the provided `eachFunc`. + * + * @private + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} accumulator The initial value. + * @param {boolean} initFromCollection Specify using the first or last element + * of `collection` as the initial value. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the accumulated value. + */ +function baseReduce(collection, iteratee, accumulator, initFromCollection, eachFunc) { + eachFunc(collection, function(value, index, collection) { + accumulator = initFromCollection + ? (initFromCollection = false, value) + : iteratee(accumulator, value, index, collection); + }); + return accumulator; +} + +module.exports = baseReduce; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseSetData.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseSetData.js new file mode 100644 index 00000000..5c98622d --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseSetData.js @@ -0,0 +1,17 @@ +var identity = require('../utility/identity'), + metaMap = require('./metaMap'); + +/** + * The base implementation of `setData` without support for hot loop detection. + * + * @private + * @param {Function} func The function to associate metadata with. + * @param {*} data The metadata. + * @returns {Function} Returns `func`. + */ +var baseSetData = !metaMap ? identity : function(func, data) { + metaMap.set(func, data); + return func; +}; + +module.exports = baseSetData; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseSlice.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseSlice.js new file mode 100644 index 00000000..9d1012ef --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseSlice.js @@ -0,0 +1,32 @@ +/** + * The base implementation of `_.slice` without an iteratee call guard. + * + * @private + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ +function baseSlice(array, start, end) { + var index = -1, + length = array.length; + + start = start == null ? 0 : (+start || 0); + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = (end === undefined || end > length) ? length : (+end || 0); + if (end < 0) { + end += length; + } + length = start > end ? 0 : ((end - start) >>> 0); + start >>>= 0; + + var result = Array(length); + while (++index < length) { + result[index] = array[index + start]; + } + return result; +} + +module.exports = baseSlice; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseSome.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseSome.js new file mode 100644 index 00000000..39a00588 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseSome.js @@ -0,0 +1,23 @@ +var baseEach = require('./baseEach'); + +/** + * The base implementation of `_.some` without support for callback shorthands + * and `this` binding. + * + * @private + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ +function baseSome(collection, predicate) { + var result; + + baseEach(collection, function(value, index, collection) { + result = predicate(value, index, collection); + return !result; + }); + return !!result; +} + +module.exports = baseSome; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseSortBy.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseSortBy.js new file mode 100644 index 00000000..fec0afeb --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseSortBy.js @@ -0,0 +1,21 @@ +/** + * The base implementation of `_.sortBy` which uses `comparer` to define + * the sort order of `array` and replaces criteria objects with their + * corresponding values. + * + * @private + * @param {Array} array The array to sort. + * @param {Function} comparer The function to define sort order. + * @returns {Array} Returns `array`. + */ +function baseSortBy(array, comparer) { + var length = array.length; + + array.sort(comparer); + while (length--) { + array[length] = array[length].value; + } + return array; +} + +module.exports = baseSortBy; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseSortByOrder.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseSortByOrder.js new file mode 100644 index 00000000..0a9ef207 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseSortByOrder.js @@ -0,0 +1,31 @@ +var arrayMap = require('./arrayMap'), + baseCallback = require('./baseCallback'), + baseMap = require('./baseMap'), + baseSortBy = require('./baseSortBy'), + compareMultiple = require('./compareMultiple'); + +/** + * The base implementation of `_.sortByOrder` without param guards. + * + * @private + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. + * @param {boolean[]} orders The sort orders of `iteratees`. + * @returns {Array} Returns the new sorted array. + */ +function baseSortByOrder(collection, iteratees, orders) { + var index = -1; + + iteratees = arrayMap(iteratees, function(iteratee) { return baseCallback(iteratee); }); + + var result = baseMap(collection, function(value) { + var criteria = arrayMap(iteratees, function(iteratee) { return iteratee(value); }); + return { 'criteria': criteria, 'index': ++index, 'value': value }; + }); + + return baseSortBy(result, function(object, other) { + return compareMultiple(object, other, orders); + }); +} + +module.exports = baseSortByOrder; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseSum.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseSum.js new file mode 100644 index 00000000..019e5ae6 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseSum.js @@ -0,0 +1,20 @@ +var baseEach = require('./baseEach'); + +/** + * The base implementation of `_.sum` without support for callback shorthands + * and `this` binding. + * + * @private + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {number} Returns the sum. + */ +function baseSum(collection, iteratee) { + var result = 0; + baseEach(collection, function(value, index, collection) { + result += +iteratee(value, index, collection) || 0; + }); + return result; +} + +module.exports = baseSum; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseToString.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseToString.js new file mode 100644 index 00000000..b802640b --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseToString.js @@ -0,0 +1,13 @@ +/** + * Converts `value` to a string if it's not one. An empty string is returned + * for `null` or `undefined` values. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ +function baseToString(value) { + return value == null ? '' : (value + ''); +} + +module.exports = baseToString; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseUniq.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseUniq.js new file mode 100644 index 00000000..4a7c254a --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseUniq.js @@ -0,0 +1,60 @@ +var baseIndexOf = require('./baseIndexOf'), + cacheIndexOf = require('./cacheIndexOf'), + createCache = require('./createCache'); + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** + * The base implementation of `_.uniq` without support for callback shorthands + * and `this` binding. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The function invoked per iteration. + * @returns {Array} Returns the new duplicate-value-free array. + */ +function baseUniq(array, iteratee) { + var index = -1, + indexOf = baseIndexOf, + length = array.length, + isCommon = true, + isLarge = isCommon && length >= LARGE_ARRAY_SIZE, + seen = isLarge ? createCache() : null, + result = []; + + if (seen) { + indexOf = cacheIndexOf; + isCommon = false; + } else { + isLarge = false; + seen = iteratee ? [] : result; + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value, index, array) : value; + + if (isCommon && value === value) { + var seenIndex = seen.length; + while (seenIndex--) { + if (seen[seenIndex] === computed) { + continue outer; + } + } + if (iteratee) { + seen.push(computed); + } + result.push(value); + } + else if (indexOf(seen, computed, 0) < 0) { + if (iteratee || isLarge) { + seen.push(computed); + } + result.push(value); + } + } + return result; +} + +module.exports = baseUniq; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseValues.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseValues.js new file mode 100644 index 00000000..e8d3ac72 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseValues.js @@ -0,0 +1,22 @@ +/** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ +function baseValues(object, props) { + var index = -1, + length = props.length, + result = Array(length); + + while (++index < length) { + result[index] = object[props[index]]; + } + return result; +} + +module.exports = baseValues; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseWhile.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseWhile.js new file mode 100644 index 00000000..c24e9bd9 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseWhile.js @@ -0,0 +1,24 @@ +var baseSlice = require('./baseSlice'); + +/** + * The base implementation of `_.dropRightWhile`, `_.dropWhile`, `_.takeRightWhile`, + * and `_.takeWhile` without support for callback shorthands and `this` binding. + * + * @private + * @param {Array} array The array to query. + * @param {Function} predicate The function invoked per iteration. + * @param {boolean} [isDrop] Specify dropping elements instead of taking them. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the slice of `array`. + */ +function baseWhile(array, predicate, isDrop, fromRight) { + var length = array.length, + index = fromRight ? length : -1; + + while ((fromRight ? index-- : ++index < length) && predicate(array[index], index, array)) {} + return isDrop + ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length)) + : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index)); +} + +module.exports = baseWhile; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseWrapperValue.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseWrapperValue.js new file mode 100644 index 00000000..629c01fd --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/baseWrapperValue.js @@ -0,0 +1,29 @@ +var LazyWrapper = require('./LazyWrapper'), + arrayPush = require('./arrayPush'); + +/** + * The base implementation of `wrapperValue` which returns the result of + * performing a sequence of actions on the unwrapped `value`, where each + * successive action is supplied the return value of the previous. + * + * @private + * @param {*} value The unwrapped value. + * @param {Array} actions Actions to peform to resolve the unwrapped value. + * @returns {*} Returns the resolved value. + */ +function baseWrapperValue(value, actions) { + var result = value; + if (result instanceof LazyWrapper) { + result = result.value(); + } + var index = -1, + length = actions.length; + + while (++index < length) { + var action = actions[index]; + result = action.func.apply(action.thisArg, arrayPush([result], action.args)); + } + return result; +} + +module.exports = baseWrapperValue; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/binaryIndex.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/binaryIndex.js new file mode 100644 index 00000000..af419a26 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/binaryIndex.js @@ -0,0 +1,39 @@ +var binaryIndexBy = require('./binaryIndexBy'), + identity = require('../utility/identity'); + +/** Used as references for the maximum length and index of an array. */ +var MAX_ARRAY_LENGTH = 4294967295, + HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1; + +/** + * Performs a binary search of `array` to determine the index at which `value` + * should be inserted into `array` in order to maintain its sort order. + * + * @private + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {boolean} [retHighest] Specify returning the highest qualified index. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + */ +function binaryIndex(array, value, retHighest) { + var low = 0, + high = array ? array.length : low; + + if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) { + while (low < high) { + var mid = (low + high) >>> 1, + computed = array[mid]; + + if ((retHighest ? (computed <= value) : (computed < value)) && computed !== null) { + low = mid + 1; + } else { + high = mid; + } + } + return high; + } + return binaryIndexBy(array, value, identity, retHighest); +} + +module.exports = binaryIndex; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/binaryIndexBy.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/binaryIndexBy.js new file mode 100644 index 00000000..767cbd21 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/binaryIndexBy.js @@ -0,0 +1,57 @@ +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeFloor = Math.floor, + nativeMin = Math.min; + +/** Used as references for the maximum length and index of an array. */ +var MAX_ARRAY_LENGTH = 4294967295, + MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1; + +/** + * This function is like `binaryIndex` except that it invokes `iteratee` for + * `value` and each element of `array` to compute their sort ranking. The + * iteratee is invoked with one argument; (value). + * + * @private + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function} iteratee The function invoked per iteration. + * @param {boolean} [retHighest] Specify returning the highest qualified index. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + */ +function binaryIndexBy(array, value, iteratee, retHighest) { + value = iteratee(value); + + var low = 0, + high = array ? array.length : 0, + valIsNaN = value !== value, + valIsNull = value === null, + valIsUndef = value === undefined; + + while (low < high) { + var mid = nativeFloor((low + high) / 2), + computed = iteratee(array[mid]), + isDef = computed !== undefined, + isReflexive = computed === computed; + + if (valIsNaN) { + var setLow = isReflexive || retHighest; + } else if (valIsNull) { + setLow = isReflexive && isDef && (retHighest || computed != null); + } else if (valIsUndef) { + setLow = isReflexive && (retHighest || isDef); + } else if (computed == null) { + setLow = false; + } else { + setLow = retHighest ? (computed <= value) : (computed < value); + } + if (setLow) { + low = mid + 1; + } else { + high = mid; + } + } + return nativeMin(high, MAX_ARRAY_INDEX); +} + +module.exports = binaryIndexBy; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/bindCallback.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/bindCallback.js new file mode 100644 index 00000000..cdc7f49a --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/bindCallback.js @@ -0,0 +1,39 @@ +var identity = require('../utility/identity'); + +/** + * A specialized version of `baseCallback` which only supports `this` binding + * and specifying the number of arguments to provide to `func`. + * + * @private + * @param {Function} func The function to bind. + * @param {*} thisArg The `this` binding of `func`. + * @param {number} [argCount] The number of arguments to provide to `func`. + * @returns {Function} Returns the callback. + */ +function bindCallback(func, thisArg, argCount) { + if (typeof func != 'function') { + return identity; + } + if (thisArg === undefined) { + return func; + } + switch (argCount) { + case 1: return function(value) { + return func.call(thisArg, value); + }; + case 3: return function(value, index, collection) { + return func.call(thisArg, value, index, collection); + }; + case 4: return function(accumulator, value, index, collection) { + return func.call(thisArg, accumulator, value, index, collection); + }; + case 5: return function(value, other, key, object, source) { + return func.call(thisArg, value, other, key, object, source); + }; + } + return function() { + return func.apply(thisArg, arguments); + }; +} + +module.exports = bindCallback; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/bufferClone.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/bufferClone.js new file mode 100644 index 00000000..f3c12b8c --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/bufferClone.js @@ -0,0 +1,20 @@ +/** Native method references. */ +var ArrayBuffer = global.ArrayBuffer, + Uint8Array = global.Uint8Array; + +/** + * Creates a clone of the given array buffer. + * + * @private + * @param {ArrayBuffer} buffer The array buffer to clone. + * @returns {ArrayBuffer} Returns the cloned array buffer. + */ +function bufferClone(buffer) { + var result = new ArrayBuffer(buffer.byteLength), + view = new Uint8Array(result); + + view.set(new Uint8Array(buffer)); + return result; +} + +module.exports = bufferClone; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/cacheIndexOf.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/cacheIndexOf.js new file mode 100644 index 00000000..09f698ab --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/cacheIndexOf.js @@ -0,0 +1,19 @@ +var isObject = require('../lang/isObject'); + +/** + * Checks if `value` is in `cache` mimicking the return signature of + * `_.indexOf` by returning `0` if the value is found, else `-1`. + * + * @private + * @param {Object} cache The cache to search. + * @param {*} value The value to search for. + * @returns {number} Returns `0` if `value` is found, else `-1`. + */ +function cacheIndexOf(cache, value) { + var data = cache.data, + result = (typeof value == 'string' || isObject(value)) ? data.set.has(value) : data.hash[value]; + + return result ? 0 : -1; +} + +module.exports = cacheIndexOf; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/cachePush.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/cachePush.js new file mode 100644 index 00000000..ba03a152 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/cachePush.js @@ -0,0 +1,20 @@ +var isObject = require('../lang/isObject'); + +/** + * Adds `value` to the cache. + * + * @private + * @name push + * @memberOf SetCache + * @param {*} value The value to cache. + */ +function cachePush(value) { + var data = this.data; + if (typeof value == 'string' || isObject(value)) { + data.set.add(value); + } else { + data.hash[value] = true; + } +} + +module.exports = cachePush; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/charsLeftIndex.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/charsLeftIndex.js new file mode 100644 index 00000000..a6d1d81c --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/charsLeftIndex.js @@ -0,0 +1,18 @@ +/** + * Used by `_.trim` and `_.trimLeft` to get the index of the first character + * of `string` that is not found in `chars`. + * + * @private + * @param {string} string The string to inspect. + * @param {string} chars The characters to find. + * @returns {number} Returns the index of the first character not found in `chars`. + */ +function charsLeftIndex(string, chars) { + var index = -1, + length = string.length; + + while (++index < length && chars.indexOf(string.charAt(index)) > -1) {} + return index; +} + +module.exports = charsLeftIndex; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/charsRightIndex.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/charsRightIndex.js new file mode 100644 index 00000000..1251dcb2 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/charsRightIndex.js @@ -0,0 +1,17 @@ +/** + * Used by `_.trim` and `_.trimRight` to get the index of the last character + * of `string` that is not found in `chars`. + * + * @private + * @param {string} string The string to inspect. + * @param {string} chars The characters to find. + * @returns {number} Returns the index of the last character not found in `chars`. + */ +function charsRightIndex(string, chars) { + var index = string.length; + + while (index-- && chars.indexOf(string.charAt(index)) > -1) {} + return index; +} + +module.exports = charsRightIndex; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/compareAscending.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/compareAscending.js new file mode 100644 index 00000000..f17b1175 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/compareAscending.js @@ -0,0 +1,16 @@ +var baseCompareAscending = require('./baseCompareAscending'); + +/** + * Used by `_.sortBy` to compare transformed elements of a collection and stable + * sort them in ascending order. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @returns {number} Returns the sort order indicator for `object`. + */ +function compareAscending(object, other) { + return baseCompareAscending(object.criteria, other.criteria) || (object.index - other.index); +} + +module.exports = compareAscending; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/compareMultiple.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/compareMultiple.js new file mode 100644 index 00000000..b2139f77 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/compareMultiple.js @@ -0,0 +1,44 @@ +var baseCompareAscending = require('./baseCompareAscending'); + +/** + * Used by `_.sortByOrder` to compare multiple properties of a value to another + * and stable sort them. + * + * If `orders` is unspecified, all valuess are sorted in ascending order. Otherwise, + * a value is sorted in ascending order if its corresponding order is "asc", and + * descending if "desc". + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {boolean[]} orders The order to sort by for each property. + * @returns {number} Returns the sort order indicator for `object`. + */ +function compareMultiple(object, other, orders) { + var index = -1, + objCriteria = object.criteria, + othCriteria = other.criteria, + length = objCriteria.length, + ordersLength = orders.length; + + while (++index < length) { + var result = baseCompareAscending(objCriteria[index], othCriteria[index]); + if (result) { + if (index >= ordersLength) { + return result; + } + var order = orders[index]; + return result * ((order === 'asc' || order === true) ? 1 : -1); + } + } + // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications + // that causes it, under certain circumstances, to provide the same value for + // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 + // for more details. + // + // This also ensures a stable sort in V8 and other engines. + // See https://code.google.com/p/v8/issues/detail?id=90 for more details. + return object.index - other.index; +} + +module.exports = compareMultiple; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/composeArgs.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/composeArgs.js new file mode 100644 index 00000000..cd5a2fed --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/composeArgs.js @@ -0,0 +1,34 @@ +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * Creates an array that is the composition of partially applied arguments, + * placeholders, and provided arguments into a single array of arguments. + * + * @private + * @param {Array|Object} args The provided arguments. + * @param {Array} partials The arguments to prepend to those provided. + * @param {Array} holders The `partials` placeholder indexes. + * @returns {Array} Returns the new array of composed arguments. + */ +function composeArgs(args, partials, holders) { + var holdersLength = holders.length, + argsIndex = -1, + argsLength = nativeMax(args.length - holdersLength, 0), + leftIndex = -1, + leftLength = partials.length, + result = Array(leftLength + argsLength); + + while (++leftIndex < leftLength) { + result[leftIndex] = partials[leftIndex]; + } + while (++argsIndex < holdersLength) { + result[holders[argsIndex]] = args[argsIndex]; + } + while (argsLength--) { + result[leftIndex++] = args[argsIndex++]; + } + return result; +} + +module.exports = composeArgs; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/composeArgsRight.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/composeArgsRight.js new file mode 100644 index 00000000..38ab1392 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/composeArgsRight.js @@ -0,0 +1,36 @@ +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * This function is like `composeArgs` except that the arguments composition + * is tailored for `_.partialRight`. + * + * @private + * @param {Array|Object} args The provided arguments. + * @param {Array} partials The arguments to append to those provided. + * @param {Array} holders The `partials` placeholder indexes. + * @returns {Array} Returns the new array of composed arguments. + */ +function composeArgsRight(args, partials, holders) { + var holdersIndex = -1, + holdersLength = holders.length, + argsIndex = -1, + argsLength = nativeMax(args.length - holdersLength, 0), + rightIndex = -1, + rightLength = partials.length, + result = Array(argsLength + rightLength); + + while (++argsIndex < argsLength) { + result[argsIndex] = args[argsIndex]; + } + var offset = argsIndex; + while (++rightIndex < rightLength) { + result[offset + rightIndex] = partials[rightIndex]; + } + while (++holdersIndex < holdersLength) { + result[offset + holders[holdersIndex]] = args[argsIndex++]; + } + return result; +} + +module.exports = composeArgsRight; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createAggregator.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createAggregator.js new file mode 100644 index 00000000..c3d3cec6 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createAggregator.js @@ -0,0 +1,35 @@ +var baseCallback = require('./baseCallback'), + baseEach = require('./baseEach'), + isArray = require('../lang/isArray'); + +/** + * Creates a `_.countBy`, `_.groupBy`, `_.indexBy`, or `_.partition` function. + * + * @private + * @param {Function} setter The function to set keys and values of the accumulator object. + * @param {Function} [initializer] The function to initialize the accumulator object. + * @returns {Function} Returns the new aggregator function. + */ +function createAggregator(setter, initializer) { + return function(collection, iteratee, thisArg) { + var result = initializer ? initializer() : {}; + iteratee = baseCallback(iteratee, thisArg, 3); + + if (isArray(collection)) { + var index = -1, + length = collection.length; + + while (++index < length) { + var value = collection[index]; + setter(result, value, iteratee(value, index, collection), collection); + } + } else { + baseEach(collection, function(value, key, collection) { + setter(result, value, iteratee(value, key, collection), collection); + }); + } + return result; + }; +} + +module.exports = createAggregator; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createAssigner.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createAssigner.js new file mode 100644 index 00000000..ea5a5a49 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createAssigner.js @@ -0,0 +1,41 @@ +var bindCallback = require('./bindCallback'), + isIterateeCall = require('./isIterateeCall'), + restParam = require('../function/restParam'); + +/** + * Creates a `_.assign`, `_.defaults`, or `_.merge` function. + * + * @private + * @param {Function} assigner The function to assign values. + * @returns {Function} Returns the new assigner function. + */ +function createAssigner(assigner) { + return restParam(function(object, sources) { + var index = -1, + length = object == null ? 0 : sources.length, + customizer = length > 2 ? sources[length - 2] : undefined, + guard = length > 2 ? sources[2] : undefined, + thisArg = length > 1 ? sources[length - 1] : undefined; + + if (typeof customizer == 'function') { + customizer = bindCallback(customizer, thisArg, 5); + length -= 2; + } else { + customizer = typeof thisArg == 'function' ? thisArg : undefined; + length -= (customizer ? 1 : 0); + } + if (guard && isIterateeCall(sources[0], sources[1], guard)) { + customizer = length < 3 ? undefined : customizer; + length = 1; + } + while (++index < length) { + var source = sources[index]; + if (source) { + assigner(object, source, customizer); + } + } + return object; + }); +} + +module.exports = createAssigner; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createBaseEach.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createBaseEach.js new file mode 100644 index 00000000..b55c39ba --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createBaseEach.js @@ -0,0 +1,31 @@ +var getLength = require('./getLength'), + isLength = require('./isLength'), + toObject = require('./toObject'); + +/** + * Creates a `baseEach` or `baseEachRight` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseEach(eachFunc, fromRight) { + return function(collection, iteratee) { + var length = collection ? getLength(collection) : 0; + if (!isLength(length)) { + return eachFunc(collection, iteratee); + } + var index = fromRight ? length : -1, + iterable = toObject(collection); + + while ((fromRight ? index-- : ++index < length)) { + if (iteratee(iterable[index], index, iterable) === false) { + break; + } + } + return collection; + }; +} + +module.exports = createBaseEach; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createBaseFor.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createBaseFor.js new file mode 100644 index 00000000..3c2cac51 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createBaseFor.js @@ -0,0 +1,27 @@ +var toObject = require('./toObject'); + +/** + * Creates a base function for `_.forIn` or `_.forInRight`. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseFor(fromRight) { + return function(object, iteratee, keysFunc) { + var iterable = toObject(object), + props = keysFunc(object), + length = props.length, + index = fromRight ? length : -1; + + while ((fromRight ? index-- : ++index < length)) { + var key = props[index]; + if (iteratee(iterable[key], key, iterable) === false) { + break; + } + } + return object; + }; +} + +module.exports = createBaseFor; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createBindWrapper.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createBindWrapper.js new file mode 100644 index 00000000..54086ee8 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createBindWrapper.js @@ -0,0 +1,22 @@ +var createCtorWrapper = require('./createCtorWrapper'); + +/** + * Creates a function that wraps `func` and invokes it with the `this` + * binding of `thisArg`. + * + * @private + * @param {Function} func The function to bind. + * @param {*} [thisArg] The `this` binding of `func`. + * @returns {Function} Returns the new bound function. + */ +function createBindWrapper(func, thisArg) { + var Ctor = createCtorWrapper(func); + + function wrapper() { + var fn = (this && this !== global && this instanceof wrapper) ? Ctor : func; + return fn.apply(thisArg, arguments); + } + return wrapper; +} + +module.exports = createBindWrapper; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createCache.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createCache.js new file mode 100644 index 00000000..025e5662 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createCache.js @@ -0,0 +1,21 @@ +var SetCache = require('./SetCache'), + getNative = require('./getNative'); + +/** Native method references. */ +var Set = getNative(global, 'Set'); + +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeCreate = getNative(Object, 'create'); + +/** + * Creates a `Set` cache object to optimize linear searches of large arrays. + * + * @private + * @param {Array} [values] The values to cache. + * @returns {null|Object} Returns the new cache object if `Set` is supported, else `null`. + */ +function createCache(values) { + return (nativeCreate && Set) ? new SetCache(values) : null; +} + +module.exports = createCache; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createCompounder.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createCompounder.js new file mode 100644 index 00000000..4c755120 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createCompounder.js @@ -0,0 +1,26 @@ +var deburr = require('../string/deburr'), + words = require('../string/words'); + +/** + * Creates a function that produces compound words out of the words in a + * given string. + * + * @private + * @param {Function} callback The function to combine each word. + * @returns {Function} Returns the new compounder function. + */ +function createCompounder(callback) { + return function(string) { + var index = -1, + array = words(deburr(string)), + length = array.length, + result = ''; + + while (++index < length) { + result = callback(result, array[index], index); + } + return result; + }; +} + +module.exports = createCompounder; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createCtorWrapper.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createCtorWrapper.js new file mode 100644 index 00000000..ffbee803 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createCtorWrapper.js @@ -0,0 +1,37 @@ +var baseCreate = require('./baseCreate'), + isObject = require('../lang/isObject'); + +/** + * Creates a function that produces an instance of `Ctor` regardless of + * whether it was invoked as part of a `new` expression or by `call` or `apply`. + * + * @private + * @param {Function} Ctor The constructor to wrap. + * @returns {Function} Returns the new wrapped function. + */ +function createCtorWrapper(Ctor) { + return function() { + // Use a `switch` statement to work with class constructors. + // See http://ecma-international.org/ecma-262/6.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist + // for more details. + var args = arguments; + switch (args.length) { + case 0: return new Ctor; + case 1: return new Ctor(args[0]); + case 2: return new Ctor(args[0], args[1]); + case 3: return new Ctor(args[0], args[1], args[2]); + case 4: return new Ctor(args[0], args[1], args[2], args[3]); + case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]); + case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]); + case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]); + } + var thisBinding = baseCreate(Ctor.prototype), + result = Ctor.apply(thisBinding, args); + + // Mimic the constructor's `return` behavior. + // See https://es5.github.io/#x13.2.2 for more details. + return isObject(result) ? result : thisBinding; + }; +} + +module.exports = createCtorWrapper; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createCurry.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createCurry.js new file mode 100644 index 00000000..e5ced0e2 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createCurry.js @@ -0,0 +1,23 @@ +var createWrapper = require('./createWrapper'), + isIterateeCall = require('./isIterateeCall'); + +/** + * Creates a `_.curry` or `_.curryRight` function. + * + * @private + * @param {boolean} flag The curry bit flag. + * @returns {Function} Returns the new curry function. + */ +function createCurry(flag) { + function curryFunc(func, arity, guard) { + if (guard && isIterateeCall(func, arity, guard)) { + arity = undefined; + } + var result = createWrapper(func, flag, undefined, undefined, undefined, undefined, undefined, arity); + result.placeholder = curryFunc.placeholder; + return result; + } + return curryFunc; +} + +module.exports = createCurry; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createDefaults.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createDefaults.js new file mode 100644 index 00000000..5663bcb4 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createDefaults.js @@ -0,0 +1,22 @@ +var restParam = require('../function/restParam'); + +/** + * Creates a `_.defaults` or `_.defaultsDeep` function. + * + * @private + * @param {Function} assigner The function to assign values. + * @param {Function} customizer The function to customize assigned values. + * @returns {Function} Returns the new defaults function. + */ +function createDefaults(assigner, customizer) { + return restParam(function(args) { + var object = args[0]; + if (object == null) { + return object; + } + args.push(customizer); + return assigner.apply(undefined, args); + }); +} + +module.exports = createDefaults; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createExtremum.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createExtremum.js new file mode 100644 index 00000000..5c4003e5 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createExtremum.js @@ -0,0 +1,33 @@ +var arrayExtremum = require('./arrayExtremum'), + baseCallback = require('./baseCallback'), + baseExtremum = require('./baseExtremum'), + isArray = require('../lang/isArray'), + isIterateeCall = require('./isIterateeCall'), + toIterable = require('./toIterable'); + +/** + * Creates a `_.max` or `_.min` function. + * + * @private + * @param {Function} comparator The function used to compare values. + * @param {*} exValue The initial extremum value. + * @returns {Function} Returns the new extremum function. + */ +function createExtremum(comparator, exValue) { + return function(collection, iteratee, thisArg) { + if (thisArg && isIterateeCall(collection, iteratee, thisArg)) { + iteratee = undefined; + } + iteratee = baseCallback(iteratee, thisArg, 3); + if (iteratee.length == 1) { + collection = isArray(collection) ? collection : toIterable(collection); + var result = arrayExtremum(collection, iteratee, comparator, exValue); + if (!(collection.length && result === exValue)) { + return result; + } + } + return baseExtremum(collection, iteratee, comparator, exValue); + }; +} + +module.exports = createExtremum; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createFind.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createFind.js new file mode 100644 index 00000000..29bf580f --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createFind.js @@ -0,0 +1,25 @@ +var baseCallback = require('./baseCallback'), + baseFind = require('./baseFind'), + baseFindIndex = require('./baseFindIndex'), + isArray = require('../lang/isArray'); + +/** + * Creates a `_.find` or `_.findLast` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new find function. + */ +function createFind(eachFunc, fromRight) { + return function(collection, predicate, thisArg) { + predicate = baseCallback(predicate, thisArg, 3); + if (isArray(collection)) { + var index = baseFindIndex(collection, predicate, fromRight); + return index > -1 ? collection[index] : undefined; + } + return baseFind(collection, predicate, eachFunc); + }; +} + +module.exports = createFind; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createFindIndex.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createFindIndex.js new file mode 100644 index 00000000..3947bea9 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createFindIndex.js @@ -0,0 +1,21 @@ +var baseCallback = require('./baseCallback'), + baseFindIndex = require('./baseFindIndex'); + +/** + * Creates a `_.findIndex` or `_.findLastIndex` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new find function. + */ +function createFindIndex(fromRight) { + return function(array, predicate, thisArg) { + if (!(array && array.length)) { + return -1; + } + predicate = baseCallback(predicate, thisArg, 3); + return baseFindIndex(array, predicate, fromRight); + }; +} + +module.exports = createFindIndex; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createFindKey.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createFindKey.js new file mode 100644 index 00000000..0ce85e4c --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createFindKey.js @@ -0,0 +1,18 @@ +var baseCallback = require('./baseCallback'), + baseFind = require('./baseFind'); + +/** + * Creates a `_.findKey` or `_.findLastKey` function. + * + * @private + * @param {Function} objectFunc The function to iterate over an object. + * @returns {Function} Returns the new find function. + */ +function createFindKey(objectFunc) { + return function(object, predicate, thisArg) { + predicate = baseCallback(predicate, thisArg, 3); + return baseFind(object, predicate, objectFunc, true); + }; +} + +module.exports = createFindKey; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createFlow.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createFlow.js new file mode 100644 index 00000000..52ab3882 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createFlow.js @@ -0,0 +1,74 @@ +var LodashWrapper = require('./LodashWrapper'), + getData = require('./getData'), + getFuncName = require('./getFuncName'), + isArray = require('../lang/isArray'), + isLaziable = require('./isLaziable'); + +/** Used to compose bitmasks for wrapper metadata. */ +var CURRY_FLAG = 8, + PARTIAL_FLAG = 32, + ARY_FLAG = 128, + REARG_FLAG = 256; + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** Used as the `TypeError` message for "Functions" methods. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** + * Creates a `_.flow` or `_.flowRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new flow function. + */ +function createFlow(fromRight) { + return function() { + var wrapper, + length = arguments.length, + index = fromRight ? length : -1, + leftIndex = 0, + funcs = Array(length); + + while ((fromRight ? index-- : ++index < length)) { + var func = funcs[leftIndex++] = arguments[index]; + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + if (!wrapper && LodashWrapper.prototype.thru && getFuncName(func) == 'wrapper') { + wrapper = new LodashWrapper([], true); + } + } + index = wrapper ? -1 : length; + while (++index < length) { + func = funcs[index]; + + var funcName = getFuncName(func), + data = funcName == 'wrapper' ? getData(func) : undefined; + + if (data && isLaziable(data[0]) && data[1] == (ARY_FLAG | CURRY_FLAG | PARTIAL_FLAG | REARG_FLAG) && !data[4].length && data[9] == 1) { + wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]); + } else { + wrapper = (func.length == 1 && isLaziable(func)) ? wrapper[funcName]() : wrapper.thru(func); + } + } + return function() { + var args = arguments, + value = args[0]; + + if (wrapper && args.length == 1 && isArray(value) && value.length >= LARGE_ARRAY_SIZE) { + return wrapper.plant(value).value(); + } + var index = 0, + result = length ? funcs[index].apply(this, args) : value; + + while (++index < length) { + result = funcs[index].call(this, result); + } + return result; + }; + }; +} + +module.exports = createFlow; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createForEach.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createForEach.js new file mode 100644 index 00000000..2aad11c5 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createForEach.js @@ -0,0 +1,20 @@ +var bindCallback = require('./bindCallback'), + isArray = require('../lang/isArray'); + +/** + * Creates a function for `_.forEach` or `_.forEachRight`. + * + * @private + * @param {Function} arrayFunc The function to iterate over an array. + * @param {Function} eachFunc The function to iterate over a collection. + * @returns {Function} Returns the new each function. + */ +function createForEach(arrayFunc, eachFunc) { + return function(collection, iteratee, thisArg) { + return (typeof iteratee == 'function' && thisArg === undefined && isArray(collection)) + ? arrayFunc(collection, iteratee) + : eachFunc(collection, bindCallback(iteratee, thisArg, 3)); + }; +} + +module.exports = createForEach; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createForIn.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createForIn.js new file mode 100644 index 00000000..f63ffa0b --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createForIn.js @@ -0,0 +1,20 @@ +var bindCallback = require('./bindCallback'), + keysIn = require('../object/keysIn'); + +/** + * Creates a function for `_.forIn` or `_.forInRight`. + * + * @private + * @param {Function} objectFunc The function to iterate over an object. + * @returns {Function} Returns the new each function. + */ +function createForIn(objectFunc) { + return function(object, iteratee, thisArg) { + if (typeof iteratee != 'function' || thisArg !== undefined) { + iteratee = bindCallback(iteratee, thisArg, 3); + } + return objectFunc(object, iteratee, keysIn); + }; +} + +module.exports = createForIn; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createForOwn.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createForOwn.js new file mode 100644 index 00000000..b9a83c3b --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createForOwn.js @@ -0,0 +1,19 @@ +var bindCallback = require('./bindCallback'); + +/** + * Creates a function for `_.forOwn` or `_.forOwnRight`. + * + * @private + * @param {Function} objectFunc The function to iterate over an object. + * @returns {Function} Returns the new each function. + */ +function createForOwn(objectFunc) { + return function(object, iteratee, thisArg) { + if (typeof iteratee != 'function' || thisArg !== undefined) { + iteratee = bindCallback(iteratee, thisArg, 3); + } + return objectFunc(object, iteratee); + }; +} + +module.exports = createForOwn; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createHybridWrapper.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createHybridWrapper.js new file mode 100644 index 00000000..5382fa02 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createHybridWrapper.js @@ -0,0 +1,111 @@ +var arrayCopy = require('./arrayCopy'), + composeArgs = require('./composeArgs'), + composeArgsRight = require('./composeArgsRight'), + createCtorWrapper = require('./createCtorWrapper'), + isLaziable = require('./isLaziable'), + reorder = require('./reorder'), + replaceHolders = require('./replaceHolders'), + setData = require('./setData'); + +/** Used to compose bitmasks for wrapper metadata. */ +var BIND_FLAG = 1, + BIND_KEY_FLAG = 2, + CURRY_BOUND_FLAG = 4, + CURRY_FLAG = 8, + CURRY_RIGHT_FLAG = 16, + PARTIAL_FLAG = 32, + PARTIAL_RIGHT_FLAG = 64, + ARY_FLAG = 128; + +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * Creates a function that wraps `func` and invokes it with optional `this` + * binding of, partial application, and currying. + * + * @private + * @param {Function|string} func The function or method name to reference. + * @param {number} bitmask The bitmask of flags. See `createWrapper` for more details. + * @param {*} [thisArg] The `this` binding of `func`. + * @param {Array} [partials] The arguments to prepend to those provided to the new function. + * @param {Array} [holders] The `partials` placeholder indexes. + * @param {Array} [partialsRight] The arguments to append to those provided to the new function. + * @param {Array} [holdersRight] The `partialsRight` placeholder indexes. + * @param {Array} [argPos] The argument positions of the new function. + * @param {number} [ary] The arity cap of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ +function createHybridWrapper(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) { + var isAry = bitmask & ARY_FLAG, + isBind = bitmask & BIND_FLAG, + isBindKey = bitmask & BIND_KEY_FLAG, + isCurry = bitmask & CURRY_FLAG, + isCurryBound = bitmask & CURRY_BOUND_FLAG, + isCurryRight = bitmask & CURRY_RIGHT_FLAG, + Ctor = isBindKey ? undefined : createCtorWrapper(func); + + function wrapper() { + // Avoid `arguments` object use disqualifying optimizations by + // converting it to an array before providing it to other functions. + var length = arguments.length, + index = length, + args = Array(length); + + while (index--) { + args[index] = arguments[index]; + } + if (partials) { + args = composeArgs(args, partials, holders); + } + if (partialsRight) { + args = composeArgsRight(args, partialsRight, holdersRight); + } + if (isCurry || isCurryRight) { + var placeholder = wrapper.placeholder, + argsHolders = replaceHolders(args, placeholder); + + length -= argsHolders.length; + if (length < arity) { + var newArgPos = argPos ? arrayCopy(argPos) : undefined, + newArity = nativeMax(arity - length, 0), + newsHolders = isCurry ? argsHolders : undefined, + newHoldersRight = isCurry ? undefined : argsHolders, + newPartials = isCurry ? args : undefined, + newPartialsRight = isCurry ? undefined : args; + + bitmask |= (isCurry ? PARTIAL_FLAG : PARTIAL_RIGHT_FLAG); + bitmask &= ~(isCurry ? PARTIAL_RIGHT_FLAG : PARTIAL_FLAG); + + if (!isCurryBound) { + bitmask &= ~(BIND_FLAG | BIND_KEY_FLAG); + } + var newData = [func, bitmask, thisArg, newPartials, newsHolders, newPartialsRight, newHoldersRight, newArgPos, ary, newArity], + result = createHybridWrapper.apply(undefined, newData); + + if (isLaziable(func)) { + setData(result, newData); + } + result.placeholder = placeholder; + return result; + } + } + var thisBinding = isBind ? thisArg : this, + fn = isBindKey ? thisBinding[func] : func; + + if (argPos) { + args = reorder(args, argPos); + } + if (isAry && ary < args.length) { + args.length = ary; + } + if (this && this !== global && this instanceof wrapper) { + fn = Ctor || createCtorWrapper(func); + } + return fn.apply(thisBinding, args); + } + return wrapper; +} + +module.exports = createHybridWrapper; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createObjectMapper.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createObjectMapper.js new file mode 100644 index 00000000..06d6a873 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createObjectMapper.js @@ -0,0 +1,26 @@ +var baseCallback = require('./baseCallback'), + baseForOwn = require('./baseForOwn'); + +/** + * Creates a function for `_.mapKeys` or `_.mapValues`. + * + * @private + * @param {boolean} [isMapKeys] Specify mapping keys instead of values. + * @returns {Function} Returns the new map function. + */ +function createObjectMapper(isMapKeys) { + return function(object, iteratee, thisArg) { + var result = {}; + iteratee = baseCallback(iteratee, thisArg, 3); + + baseForOwn(object, function(value, key, object) { + var mapped = iteratee(value, key, object); + key = isMapKeys ? mapped : key; + value = isMapKeys ? value : mapped; + result[key] = value; + }); + return result; + }; +} + +module.exports = createObjectMapper; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createPadDir.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createPadDir.js new file mode 100644 index 00000000..da0ebf1d --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createPadDir.js @@ -0,0 +1,18 @@ +var baseToString = require('./baseToString'), + createPadding = require('./createPadding'); + +/** + * Creates a function for `_.padLeft` or `_.padRight`. + * + * @private + * @param {boolean} [fromRight] Specify padding from the right. + * @returns {Function} Returns the new pad function. + */ +function createPadDir(fromRight) { + return function(string, length, chars) { + string = baseToString(string); + return (fromRight ? string : '') + createPadding(string, length, chars) + (fromRight ? '' : string); + }; +} + +module.exports = createPadDir; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createPadding.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createPadding.js new file mode 100644 index 00000000..810dc24c --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createPadding.js @@ -0,0 +1,29 @@ +var repeat = require('../string/repeat'); + +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeCeil = Math.ceil, + nativeIsFinite = global.isFinite; + +/** + * Creates the padding required for `string` based on the given `length`. + * The `chars` string is truncated if the number of characters exceeds `length`. + * + * @private + * @param {string} string The string to create padding for. + * @param {number} [length=0] The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the pad for `string`. + */ +function createPadding(string, length, chars) { + var strLength = string.length; + length = +length; + + if (strLength >= length || !nativeIsFinite(length)) { + return ''; + } + var padLength = length - strLength; + chars = chars == null ? ' ' : (chars + ''); + return repeat(chars, nativeCeil(padLength / chars.length)).slice(0, padLength); +} + +module.exports = createPadding; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createPartial.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createPartial.js new file mode 100644 index 00000000..75332753 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createPartial.js @@ -0,0 +1,20 @@ +var createWrapper = require('./createWrapper'), + replaceHolders = require('./replaceHolders'), + restParam = require('../function/restParam'); + +/** + * Creates a `_.partial` or `_.partialRight` function. + * + * @private + * @param {boolean} flag The partial bit flag. + * @returns {Function} Returns the new partial function. + */ +function createPartial(flag) { + var partialFunc = restParam(function(func, partials) { + var holders = replaceHolders(partials, partialFunc.placeholder); + return createWrapper(func, flag, undefined, partials, holders); + }); + return partialFunc; +} + +module.exports = createPartial; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createPartialWrapper.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createPartialWrapper.js new file mode 100644 index 00000000..b19f9f0e --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createPartialWrapper.js @@ -0,0 +1,43 @@ +var createCtorWrapper = require('./createCtorWrapper'); + +/** Used to compose bitmasks for wrapper metadata. */ +var BIND_FLAG = 1; + +/** + * Creates a function that wraps `func` and invokes it with the optional `this` + * binding of `thisArg` and the `partials` prepended to those provided to + * the wrapper. + * + * @private + * @param {Function} func The function to partially apply arguments to. + * @param {number} bitmask The bitmask of flags. See `createWrapper` for more details. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} partials The arguments to prepend to those provided to the new function. + * @returns {Function} Returns the new bound function. + */ +function createPartialWrapper(func, bitmask, thisArg, partials) { + var isBind = bitmask & BIND_FLAG, + Ctor = createCtorWrapper(func); + + function wrapper() { + // Avoid `arguments` object use disqualifying optimizations by + // converting it to an array before providing it `func`. + var argsIndex = -1, + argsLength = arguments.length, + leftIndex = -1, + leftLength = partials.length, + args = Array(leftLength + argsLength); + + while (++leftIndex < leftLength) { + args[leftIndex] = partials[leftIndex]; + } + while (argsLength--) { + args[leftIndex++] = arguments[++argsIndex]; + } + var fn = (this && this !== global && this instanceof wrapper) ? Ctor : func; + return fn.apply(isBind ? thisArg : this, args); + } + return wrapper; +} + +module.exports = createPartialWrapper; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createReduce.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createReduce.js new file mode 100644 index 00000000..816f4ce7 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createReduce.js @@ -0,0 +1,22 @@ +var baseCallback = require('./baseCallback'), + baseReduce = require('./baseReduce'), + isArray = require('../lang/isArray'); + +/** + * Creates a function for `_.reduce` or `_.reduceRight`. + * + * @private + * @param {Function} arrayFunc The function to iterate over an array. + * @param {Function} eachFunc The function to iterate over a collection. + * @returns {Function} Returns the new each function. + */ +function createReduce(arrayFunc, eachFunc) { + return function(collection, iteratee, accumulator, thisArg) { + var initFromArray = arguments.length < 3; + return (typeof iteratee == 'function' && thisArg === undefined && isArray(collection)) + ? arrayFunc(collection, iteratee, accumulator, initFromArray) + : baseReduce(collection, baseCallback(iteratee, thisArg, 4), accumulator, initFromArray, eachFunc); + }; +} + +module.exports = createReduce; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createRound.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createRound.js new file mode 100644 index 00000000..21240efb --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createRound.js @@ -0,0 +1,23 @@ +/** Native method references. */ +var pow = Math.pow; + +/** + * Creates a `_.ceil`, `_.floor`, or `_.round` function. + * + * @private + * @param {string} methodName The name of the `Math` method to use when rounding. + * @returns {Function} Returns the new round function. + */ +function createRound(methodName) { + var func = Math[methodName]; + return function(number, precision) { + precision = precision === undefined ? 0 : (+precision || 0); + if (precision) { + precision = pow(10, precision); + return func(number * precision) / precision; + } + return func(number); + }; +} + +module.exports = createRound; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createSortedIndex.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createSortedIndex.js new file mode 100644 index 00000000..86c78520 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createSortedIndex.js @@ -0,0 +1,20 @@ +var baseCallback = require('./baseCallback'), + binaryIndex = require('./binaryIndex'), + binaryIndexBy = require('./binaryIndexBy'); + +/** + * Creates a `_.sortedIndex` or `_.sortedLastIndex` function. + * + * @private + * @param {boolean} [retHighest] Specify returning the highest qualified index. + * @returns {Function} Returns the new index function. + */ +function createSortedIndex(retHighest) { + return function(array, value, iteratee, thisArg) { + return iteratee == null + ? binaryIndex(array, value, retHighest) + : binaryIndexBy(array, value, baseCallback(iteratee, thisArg, 1), retHighest); + }; +} + +module.exports = createSortedIndex; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createWrapper.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createWrapper.js new file mode 100644 index 00000000..ea7a9b19 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/createWrapper.js @@ -0,0 +1,86 @@ +var baseSetData = require('./baseSetData'), + createBindWrapper = require('./createBindWrapper'), + createHybridWrapper = require('./createHybridWrapper'), + createPartialWrapper = require('./createPartialWrapper'), + getData = require('./getData'), + mergeData = require('./mergeData'), + setData = require('./setData'); + +/** Used to compose bitmasks for wrapper metadata. */ +var BIND_FLAG = 1, + BIND_KEY_FLAG = 2, + PARTIAL_FLAG = 32, + PARTIAL_RIGHT_FLAG = 64; + +/** Used as the `TypeError` message for "Functions" methods. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * Creates a function that either curries or invokes `func` with optional + * `this` binding and partially applied arguments. + * + * @private + * @param {Function|string} func The function or method name to reference. + * @param {number} bitmask The bitmask of flags. + * The bitmask may be composed of the following flags: + * 1 - `_.bind` + * 2 - `_.bindKey` + * 4 - `_.curry` or `_.curryRight` of a bound function + * 8 - `_.curry` + * 16 - `_.curryRight` + * 32 - `_.partial` + * 64 - `_.partialRight` + * 128 - `_.rearg` + * 256 - `_.ary` + * @param {*} [thisArg] The `this` binding of `func`. + * @param {Array} [partials] The arguments to be partially applied. + * @param {Array} [holders] The `partials` placeholder indexes. + * @param {Array} [argPos] The argument positions of the new function. + * @param {number} [ary] The arity cap of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ +function createWrapper(func, bitmask, thisArg, partials, holders, argPos, ary, arity) { + var isBindKey = bitmask & BIND_KEY_FLAG; + if (!isBindKey && typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + var length = partials ? partials.length : 0; + if (!length) { + bitmask &= ~(PARTIAL_FLAG | PARTIAL_RIGHT_FLAG); + partials = holders = undefined; + } + length -= (holders ? holders.length : 0); + if (bitmask & PARTIAL_RIGHT_FLAG) { + var partialsRight = partials, + holdersRight = holders; + + partials = holders = undefined; + } + var data = isBindKey ? undefined : getData(func), + newData = [func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity]; + + if (data) { + mergeData(newData, data); + bitmask = newData[1]; + arity = newData[9]; + } + newData[9] = arity == null + ? (isBindKey ? 0 : func.length) + : (nativeMax(arity - length, 0) || 0); + + if (bitmask == BIND_FLAG) { + var result = createBindWrapper(newData[0], newData[2]); + } else if ((bitmask == PARTIAL_FLAG || bitmask == (BIND_FLAG | PARTIAL_FLAG)) && !newData[4].length) { + result = createPartialWrapper.apply(undefined, newData); + } else { + result = createHybridWrapper.apply(undefined, newData); + } + var setter = data ? baseSetData : setData; + return setter(result, newData); +} + +module.exports = createWrapper; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/deburrLetter.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/deburrLetter.js new file mode 100644 index 00000000..e559dbea --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/deburrLetter.js @@ -0,0 +1,33 @@ +/** Used to map latin-1 supplementary letters to basic latin letters. */ +var deburredLetters = { + '\xc0': 'A', '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A', + '\xe0': 'a', '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a', + '\xc7': 'C', '\xe7': 'c', + '\xd0': 'D', '\xf0': 'd', + '\xc8': 'E', '\xc9': 'E', '\xca': 'E', '\xcb': 'E', + '\xe8': 'e', '\xe9': 'e', '\xea': 'e', '\xeb': 'e', + '\xcC': 'I', '\xcd': 'I', '\xce': 'I', '\xcf': 'I', + '\xeC': 'i', '\xed': 'i', '\xee': 'i', '\xef': 'i', + '\xd1': 'N', '\xf1': 'n', + '\xd2': 'O', '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O', + '\xf2': 'o', '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o', + '\xd9': 'U', '\xda': 'U', '\xdb': 'U', '\xdc': 'U', + '\xf9': 'u', '\xfa': 'u', '\xfb': 'u', '\xfc': 'u', + '\xdd': 'Y', '\xfd': 'y', '\xff': 'y', + '\xc6': 'Ae', '\xe6': 'ae', + '\xde': 'Th', '\xfe': 'th', + '\xdf': 'ss' +}; + +/** + * Used by `_.deburr` to convert latin-1 supplementary letters to basic latin letters. + * + * @private + * @param {string} letter The matched letter to deburr. + * @returns {string} Returns the deburred letter. + */ +function deburrLetter(letter) { + return deburredLetters[letter]; +} + +module.exports = deburrLetter; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/equalArrays.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/equalArrays.js new file mode 100644 index 00000000..e0bb2d32 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/equalArrays.js @@ -0,0 +1,51 @@ +var arraySome = require('./arraySome'); + +/** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Function} [customizer] The function to customize comparing arrays. + * @param {boolean} [isLoose] Specify performing partial comparisons. + * @param {Array} [stackA] Tracks traversed `value` objects. + * @param {Array} [stackB] Tracks traversed `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ +function equalArrays(array, other, equalFunc, customizer, isLoose, stackA, stackB) { + var index = -1, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isLoose && othLength > arrLength)) { + return false; + } + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index], + result = customizer ? customizer(isLoose ? othValue : arrValue, isLoose ? arrValue : othValue, index) : undefined; + + if (result !== undefined) { + if (result) { + continue; + } + return false; + } + // Recursively compare arrays (susceptible to call stack limits). + if (isLoose) { + if (!arraySome(other, function(othValue) { + return arrValue === othValue || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB); + })) { + return false; + } + } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB))) { + return false; + } + } + return true; +} + +module.exports = equalArrays; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/equalByTag.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/equalByTag.js new file mode 100644 index 00000000..d25c8e1e --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/equalByTag.js @@ -0,0 +1,48 @@ +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + stringTag = '[object String]'; + +/** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalByTag(object, other, tag) { + switch (tag) { + case boolTag: + case dateTag: + // Coerce dates and booleans to numbers, dates to milliseconds and booleans + // to `1` or `0` treating invalid dates coerced to `NaN` as not equal. + return +object == +other; + + case errorTag: + return object.name == other.name && object.message == other.message; + + case numberTag: + // Treat `NaN` vs. `NaN` as equal. + return (object != +object) + ? other != +other + : object == +other; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings primitives and string + // objects as equal. See https://es5.github.io/#x15.10.6.4 for more details. + return object == (other + ''); + } + return false; +} + +module.exports = equalByTag; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/equalObjects.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/equalObjects.js new file mode 100644 index 00000000..1297a3b2 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/equalObjects.js @@ -0,0 +1,67 @@ +var keys = require('../object/keys'); + +/** Used for native method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Function} [customizer] The function to customize comparing values. + * @param {boolean} [isLoose] Specify performing partial comparisons. + * @param {Array} [stackA] Tracks traversed `value` objects. + * @param {Array} [stackB] Tracks traversed `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalObjects(object, other, equalFunc, customizer, isLoose, stackA, stackB) { + var objProps = keys(object), + objLength = objProps.length, + othProps = keys(other), + othLength = othProps.length; + + if (objLength != othLength && !isLoose) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isLoose ? key in other : hasOwnProperty.call(other, key))) { + return false; + } + } + var skipCtor = isLoose; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key], + result = customizer ? customizer(isLoose ? othValue : objValue, isLoose? objValue : othValue, key) : undefined; + + // Recursively compare objects (susceptible to call stack limits). + if (!(result === undefined ? equalFunc(objValue, othValue, customizer, isLoose, stackA, stackB) : result)) { + return false; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (!skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + return false; + } + } + return true; +} + +module.exports = equalObjects; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/escapeHtmlChar.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/escapeHtmlChar.js new file mode 100644 index 00000000..b21e452b --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/escapeHtmlChar.js @@ -0,0 +1,22 @@ +/** Used to map characters to HTML entities. */ +var htmlEscapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''', + '`': '`' +}; + +/** + * Used by `_.escape` to convert characters to HTML entities. + * + * @private + * @param {string} chr The matched character to escape. + * @returns {string} Returns the escaped character. + */ +function escapeHtmlChar(chr) { + return htmlEscapes[chr]; +} + +module.exports = escapeHtmlChar; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/escapeRegExpChar.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/escapeRegExpChar.js new file mode 100644 index 00000000..8427de0e --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/escapeRegExpChar.js @@ -0,0 +1,38 @@ +/** Used to escape characters for inclusion in compiled regexes. */ +var regexpEscapes = { + '0': 'x30', '1': 'x31', '2': 'x32', '3': 'x33', '4': 'x34', + '5': 'x35', '6': 'x36', '7': 'x37', '8': 'x38', '9': 'x39', + 'A': 'x41', 'B': 'x42', 'C': 'x43', 'D': 'x44', 'E': 'x45', 'F': 'x46', + 'a': 'x61', 'b': 'x62', 'c': 'x63', 'd': 'x64', 'e': 'x65', 'f': 'x66', + 'n': 'x6e', 'r': 'x72', 't': 'x74', 'u': 'x75', 'v': 'x76', 'x': 'x78' +}; + +/** Used to escape characters for inclusion in compiled string literals. */ +var stringEscapes = { + '\\': '\\', + "'": "'", + '\n': 'n', + '\r': 'r', + '\u2028': 'u2028', + '\u2029': 'u2029' +}; + +/** + * Used by `_.escapeRegExp` to escape characters for inclusion in compiled regexes. + * + * @private + * @param {string} chr The matched character to escape. + * @param {string} leadingChar The capture group for a leading character. + * @param {string} whitespaceChar The capture group for a whitespace character. + * @returns {string} Returns the escaped character. + */ +function escapeRegExpChar(chr, leadingChar, whitespaceChar) { + if (leadingChar) { + chr = regexpEscapes[chr]; + } else if (whitespaceChar) { + chr = stringEscapes[chr]; + } + return '\\' + chr; +} + +module.exports = escapeRegExpChar; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/escapeStringChar.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/escapeStringChar.js new file mode 100644 index 00000000..44eca96c --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/escapeStringChar.js @@ -0,0 +1,22 @@ +/** Used to escape characters for inclusion in compiled string literals. */ +var stringEscapes = { + '\\': '\\', + "'": "'", + '\n': 'n', + '\r': 'r', + '\u2028': 'u2028', + '\u2029': 'u2029' +}; + +/** + * Used by `_.template` to escape characters for inclusion in compiled string literals. + * + * @private + * @param {string} chr The matched character to escape. + * @returns {string} Returns the escaped character. + */ +function escapeStringChar(chr) { + return '\\' + stringEscapes[chr]; +} + +module.exports = escapeStringChar; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/getData.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/getData.js new file mode 100644 index 00000000..5bb4f466 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/getData.js @@ -0,0 +1,15 @@ +var metaMap = require('./metaMap'), + noop = require('../utility/noop'); + +/** + * Gets metadata for `func`. + * + * @private + * @param {Function} func The function to query. + * @returns {*} Returns the metadata for `func`. + */ +var getData = !metaMap ? noop : function(func) { + return metaMap.get(func); +}; + +module.exports = getData; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/getFuncName.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/getFuncName.js new file mode 100644 index 00000000..2ea73a6c --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/getFuncName.js @@ -0,0 +1,25 @@ +var realNames = require('./realNames'); + +/** + * Gets the name of `func`. + * + * @private + * @param {Function} func The function to query. + * @returns {string} Returns the function name. + */ +function getFuncName(func) { + var result = func.name, + array = realNames[result], + length = array ? array.length : 0; + + while (length--) { + var data = array[length], + otherFunc = data.func; + if (otherFunc == null || otherFunc == func) { + return data.name; + } + } + return result; +} + +module.exports = getFuncName; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/getLength.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/getLength.js new file mode 100644 index 00000000..48d75ae1 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/getLength.js @@ -0,0 +1,15 @@ +var baseProperty = require('./baseProperty'); + +/** + * Gets the "length" property value of `object`. + * + * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792) + * that affects Safari on at least iOS 8.1-8.3 ARM64. + * + * @private + * @param {Object} object The object to query. + * @returns {*} Returns the "length" value. + */ +var getLength = baseProperty('length'); + +module.exports = getLength; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/getMatchData.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/getMatchData.js new file mode 100644 index 00000000..6d235b91 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/getMatchData.js @@ -0,0 +1,21 @@ +var isStrictComparable = require('./isStrictComparable'), + pairs = require('../object/pairs'); + +/** + * Gets the propery names, values, and compare flags of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the match data of `object`. + */ +function getMatchData(object) { + var result = pairs(object), + length = result.length; + + while (length--) { + result[length][2] = isStrictComparable(result[length][1]); + } + return result; +} + +module.exports = getMatchData; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/getNative.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/getNative.js new file mode 100644 index 00000000..bceb317f --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/getNative.js @@ -0,0 +1,16 @@ +var isNative = require('../lang/isNative'); + +/** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ +function getNative(object, key) { + var value = object == null ? undefined : object[key]; + return isNative(value) ? value : undefined; +} + +module.exports = getNative; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/getView.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/getView.js new file mode 100644 index 00000000..f49ec6d0 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/getView.js @@ -0,0 +1,33 @@ +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max, + nativeMin = Math.min; + +/** + * Gets the view, applying any `transforms` to the `start` and `end` positions. + * + * @private + * @param {number} start The start of the view. + * @param {number} end The end of the view. + * @param {Array} transforms The transformations to apply to the view. + * @returns {Object} Returns an object containing the `start` and `end` + * positions of the view. + */ +function getView(start, end, transforms) { + var index = -1, + length = transforms.length; + + while (++index < length) { + var data = transforms[index], + size = data.size; + + switch (data.type) { + case 'drop': start += size; break; + case 'dropRight': end -= size; break; + case 'take': end = nativeMin(end, start + size); break; + case 'takeRight': start = nativeMax(start, end - size); break; + } + } + return { 'start': start, 'end': end }; +} + +module.exports = getView; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/indexOfNaN.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/indexOfNaN.js new file mode 100644 index 00000000..05b8207d --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/indexOfNaN.js @@ -0,0 +1,23 @@ +/** + * Gets the index at which the first occurrence of `NaN` is found in `array`. + * + * @private + * @param {Array} array The array to search. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched `NaN`, else `-1`. + */ +function indexOfNaN(array, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 0 : -1); + + while ((fromRight ? index-- : ++index < length)) { + var other = array[index]; + if (other !== other) { + return index; + } + } + return -1; +} + +module.exports = indexOfNaN; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/initCloneArray.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/initCloneArray.js new file mode 100644 index 00000000..c92dfa24 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/initCloneArray.js @@ -0,0 +1,26 @@ +/** Used for native method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Initializes an array clone. + * + * @private + * @param {Array} array The array to clone. + * @returns {Array} Returns the initialized clone. + */ +function initCloneArray(array) { + var length = array.length, + result = new array.constructor(length); + + // Add array properties assigned by `RegExp#exec`. + if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) { + result.index = array.index; + result.input = array.input; + } + return result; +} + +module.exports = initCloneArray; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/initCloneByTag.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/initCloneByTag.js new file mode 100644 index 00000000..8e3afc63 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/initCloneByTag.js @@ -0,0 +1,63 @@ +var bufferClone = require('./bufferClone'); + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + stringTag = '[object String]'; + +var arrayBufferTag = '[object ArrayBuffer]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + +/** Used to match `RegExp` flags from their coerced string values. */ +var reFlags = /\w*$/; + +/** + * Initializes an object clone based on its `toStringTag`. + * + * **Note:** This function only supports cloning values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to clone. + * @param {string} tag The `toStringTag` of the object to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the initialized clone. + */ +function initCloneByTag(object, tag, isDeep) { + var Ctor = object.constructor; + switch (tag) { + case arrayBufferTag: + return bufferClone(object); + + case boolTag: + case dateTag: + return new Ctor(+object); + + case float32Tag: case float64Tag: + case int8Tag: case int16Tag: case int32Tag: + case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: + var buffer = object.buffer; + return new Ctor(isDeep ? bufferClone(buffer) : buffer, object.byteOffset, object.length); + + case numberTag: + case stringTag: + return new Ctor(object); + + case regexpTag: + var result = new Ctor(object.source, reFlags.exec(object)); + result.lastIndex = object.lastIndex; + } + return result; +} + +module.exports = initCloneByTag; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/initCloneObject.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/initCloneObject.js new file mode 100644 index 00000000..48c4a23d --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/initCloneObject.js @@ -0,0 +1,16 @@ +/** + * Initializes an object clone. + * + * @private + * @param {Object} object The object to clone. + * @returns {Object} Returns the initialized clone. + */ +function initCloneObject(object) { + var Ctor = object.constructor; + if (!(typeof Ctor == 'function' && Ctor instanceof Ctor)) { + Ctor = Object; + } + return new Ctor; +} + +module.exports = initCloneObject; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/invokePath.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/invokePath.js new file mode 100644 index 00000000..935110fd --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/invokePath.js @@ -0,0 +1,26 @@ +var baseGet = require('./baseGet'), + baseSlice = require('./baseSlice'), + isKey = require('./isKey'), + last = require('../array/last'), + toPath = require('./toPath'); + +/** + * Invokes the method at `path` on `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the method to invoke. + * @param {Array} args The arguments to invoke the method with. + * @returns {*} Returns the result of the invoked method. + */ +function invokePath(object, path, args) { + if (object != null && !isKey(path, object)) { + path = toPath(path); + object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1)); + path = last(path); + } + var func = object == null ? object : object[path]; + return func == null ? undefined : func.apply(object, args); +} + +module.exports = invokePath; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/isArrayLike.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/isArrayLike.js new file mode 100644 index 00000000..72443cde --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/isArrayLike.js @@ -0,0 +1,15 @@ +var getLength = require('./getLength'), + isLength = require('./isLength'); + +/** + * Checks if `value` is array-like. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + */ +function isArrayLike(value) { + return value != null && isLength(getLength(value)); +} + +module.exports = isArrayLike; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/isIndex.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/isIndex.js new file mode 100644 index 00000000..469164bf --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/isIndex.js @@ -0,0 +1,24 @@ +/** Used to detect unsigned integer values. */ +var reIsUint = /^\d+$/; + +/** + * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer) + * of an array-like value. + */ +var MAX_SAFE_INTEGER = 9007199254740991; + +/** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ +function isIndex(value, length) { + value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1; + length = length == null ? MAX_SAFE_INTEGER : length; + return value > -1 && value % 1 == 0 && value < length; +} + +module.exports = isIndex; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/isIterateeCall.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/isIterateeCall.js new file mode 100644 index 00000000..07490f2e --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/isIterateeCall.js @@ -0,0 +1,28 @@ +var isArrayLike = require('./isArrayLike'), + isIndex = require('./isIndex'), + isObject = require('../lang/isObject'); + +/** + * Checks if the provided arguments are from an iteratee call. + * + * @private + * @param {*} value The potential iteratee value argument. + * @param {*} index The potential iteratee index or key argument. + * @param {*} object The potential iteratee object argument. + * @returns {boolean} Returns `true` if the arguments are from an iteratee call, else `false`. + */ +function isIterateeCall(value, index, object) { + if (!isObject(object)) { + return false; + } + var type = typeof index; + if (type == 'number' + ? (isArrayLike(object) && isIndex(index, object.length)) + : (type == 'string' && index in object)) { + var other = object[index]; + return value === value ? (value === other) : (other !== other); + } + return false; +} + +module.exports = isIterateeCall; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/isKey.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/isKey.js new file mode 100644 index 00000000..44ccfd48 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/isKey.js @@ -0,0 +1,28 @@ +var isArray = require('../lang/isArray'), + toObject = require('./toObject'); + +/** Used to match property names within property paths. */ +var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\n\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/; + +/** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ +function isKey(value, object) { + var type = typeof value; + if ((type == 'string' && reIsPlainProp.test(value)) || type == 'number') { + return true; + } + if (isArray(value)) { + return false; + } + var result = !reIsDeepProp.test(value); + return result || (object != null && value in toObject(object)); +} + +module.exports = isKey; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/isLaziable.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/isLaziable.js new file mode 100644 index 00000000..a0f14702 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/isLaziable.js @@ -0,0 +1,26 @@ +var LazyWrapper = require('./LazyWrapper'), + getData = require('./getData'), + getFuncName = require('./getFuncName'), + lodash = require('../chain/lodash'); + +/** + * Checks if `func` has a lazy counterpart. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` has a lazy counterpart, else `false`. + */ +function isLaziable(func) { + var funcName = getFuncName(func); + if (!(funcName in LazyWrapper.prototype)) { + return false; + } + var other = lodash[funcName]; + if (func === other) { + return true; + } + var data = getData(other); + return !!data && func === data[0]; +} + +module.exports = isLaziable; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/isLength.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/isLength.js new file mode 100644 index 00000000..20929879 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/isLength.js @@ -0,0 +1,20 @@ +/** + * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer) + * of an array-like value. + */ +var MAX_SAFE_INTEGER = 9007199254740991; + +/** + * Checks if `value` is a valid array-like length. + * + * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength). + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + */ +function isLength(value) { + return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; +} + +module.exports = isLength; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/isObjectLike.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/isObjectLike.js new file mode 100644 index 00000000..8ca0585b --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/isObjectLike.js @@ -0,0 +1,12 @@ +/** + * Checks if `value` is object-like. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + */ +function isObjectLike(value) { + return !!value && typeof value == 'object'; +} + +module.exports = isObjectLike; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/isSpace.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/isSpace.js new file mode 100644 index 00000000..16ea6f3d --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/isSpace.js @@ -0,0 +1,14 @@ +/** + * Used by `trimmedLeftIndex` and `trimmedRightIndex` to determine if a + * character code is whitespace. + * + * @private + * @param {number} charCode The character code to inspect. + * @returns {boolean} Returns `true` if `charCode` is whitespace, else `false`. + */ +function isSpace(charCode) { + return ((charCode <= 160 && (charCode >= 9 && charCode <= 13) || charCode == 32 || charCode == 160) || charCode == 5760 || charCode == 6158 || + (charCode >= 8192 && (charCode <= 8202 || charCode == 8232 || charCode == 8233 || charCode == 8239 || charCode == 8287 || charCode == 12288 || charCode == 65279))); +} + +module.exports = isSpace; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/isStrictComparable.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/isStrictComparable.js new file mode 100644 index 00000000..0a53eba5 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/isStrictComparable.js @@ -0,0 +1,15 @@ +var isObject = require('../lang/isObject'); + +/** + * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` if suitable for strict + * equality comparisons, else `false`. + */ +function isStrictComparable(value) { + return value === value && !isObject(value); +} + +module.exports = isStrictComparable; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/lazyClone.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/lazyClone.js new file mode 100644 index 00000000..04c222b2 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/lazyClone.js @@ -0,0 +1,23 @@ +var LazyWrapper = require('./LazyWrapper'), + arrayCopy = require('./arrayCopy'); + +/** + * Creates a clone of the lazy wrapper object. + * + * @private + * @name clone + * @memberOf LazyWrapper + * @returns {Object} Returns the cloned `LazyWrapper` object. + */ +function lazyClone() { + var result = new LazyWrapper(this.__wrapped__); + result.__actions__ = arrayCopy(this.__actions__); + result.__dir__ = this.__dir__; + result.__filtered__ = this.__filtered__; + result.__iteratees__ = arrayCopy(this.__iteratees__); + result.__takeCount__ = this.__takeCount__; + result.__views__ = arrayCopy(this.__views__); + return result; +} + +module.exports = lazyClone; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/lazyReverse.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/lazyReverse.js new file mode 100644 index 00000000..c658402f --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/lazyReverse.js @@ -0,0 +1,23 @@ +var LazyWrapper = require('./LazyWrapper'); + +/** + * Reverses the direction of lazy iteration. + * + * @private + * @name reverse + * @memberOf LazyWrapper + * @returns {Object} Returns the new reversed `LazyWrapper` object. + */ +function lazyReverse() { + if (this.__filtered__) { + var result = new LazyWrapper(this); + result.__dir__ = -1; + result.__filtered__ = true; + } else { + result = this.clone(); + result.__dir__ *= -1; + } + return result; +} + +module.exports = lazyReverse; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/lazyValue.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/lazyValue.js new file mode 100644 index 00000000..44aa377e --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/lazyValue.js @@ -0,0 +1,72 @@ +var baseWrapperValue = require('./baseWrapperValue'), + getView = require('./getView'), + isArray = require('../lang/isArray'); + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** Used to indicate the type of lazy iteratees. */ +var LAZY_FILTER_FLAG = 1, + LAZY_MAP_FLAG = 2; + +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeMin = Math.min; + +/** + * Extracts the unwrapped value from its lazy wrapper. + * + * @private + * @name value + * @memberOf LazyWrapper + * @returns {*} Returns the unwrapped value. + */ +function lazyValue() { + var array = this.__wrapped__.value(), + dir = this.__dir__, + isArr = isArray(array), + isRight = dir < 0, + arrLength = isArr ? array.length : 0, + view = getView(0, arrLength, this.__views__), + start = view.start, + end = view.end, + length = end - start, + index = isRight ? end : (start - 1), + iteratees = this.__iteratees__, + iterLength = iteratees.length, + resIndex = 0, + takeCount = nativeMin(length, this.__takeCount__); + + if (!isArr || arrLength < LARGE_ARRAY_SIZE || (arrLength == length && takeCount == length)) { + return baseWrapperValue((isRight && isArr) ? array.reverse() : array, this.__actions__); + } + var result = []; + + outer: + while (length-- && resIndex < takeCount) { + index += dir; + + var iterIndex = -1, + value = array[index]; + + while (++iterIndex < iterLength) { + var data = iteratees[iterIndex], + iteratee = data.iteratee, + type = data.type, + computed = iteratee(value); + + if (type == LAZY_MAP_FLAG) { + value = computed; + } else if (!computed) { + if (type == LAZY_FILTER_FLAG) { + continue outer; + } else { + break outer; + } + } + } + result[resIndex++] = value; + } + return result; +} + +module.exports = lazyValue; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/mapDelete.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/mapDelete.js new file mode 100644 index 00000000..8b7fd535 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/mapDelete.js @@ -0,0 +1,14 @@ +/** + * Removes `key` and its value from the cache. + * + * @private + * @name delete + * @memberOf _.memoize.Cache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed successfully, else `false`. + */ +function mapDelete(key) { + return this.has(key) && delete this.__data__[key]; +} + +module.exports = mapDelete; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/mapGet.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/mapGet.js new file mode 100644 index 00000000..1f222957 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/mapGet.js @@ -0,0 +1,14 @@ +/** + * Gets the cached value for `key`. + * + * @private + * @name get + * @memberOf _.memoize.Cache + * @param {string} key The key of the value to get. + * @returns {*} Returns the cached value. + */ +function mapGet(key) { + return key == '__proto__' ? undefined : this.__data__[key]; +} + +module.exports = mapGet; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/mapHas.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/mapHas.js new file mode 100644 index 00000000..6d94ce44 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/mapHas.js @@ -0,0 +1,20 @@ +/** Used for native method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Checks if a cached value for `key` exists. + * + * @private + * @name has + * @memberOf _.memoize.Cache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function mapHas(key) { + return key != '__proto__' && hasOwnProperty.call(this.__data__, key); +} + +module.exports = mapHas; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/mapSet.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/mapSet.js new file mode 100644 index 00000000..0434c3f3 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/mapSet.js @@ -0,0 +1,18 @@ +/** + * Sets `value` to `key` of the cache. + * + * @private + * @name set + * @memberOf _.memoize.Cache + * @param {string} key The key of the value to cache. + * @param {*} value The value to cache. + * @returns {Object} Returns the cache object. + */ +function mapSet(key, value) { + if (key != '__proto__') { + this.__data__[key] = value; + } + return this; +} + +module.exports = mapSet; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/mergeData.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/mergeData.js new file mode 100644 index 00000000..29297c78 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/mergeData.js @@ -0,0 +1,89 @@ +var arrayCopy = require('./arrayCopy'), + composeArgs = require('./composeArgs'), + composeArgsRight = require('./composeArgsRight'), + replaceHolders = require('./replaceHolders'); + +/** Used to compose bitmasks for wrapper metadata. */ +var BIND_FLAG = 1, + CURRY_BOUND_FLAG = 4, + CURRY_FLAG = 8, + ARY_FLAG = 128, + REARG_FLAG = 256; + +/** Used as the internal argument placeholder. */ +var PLACEHOLDER = '__lodash_placeholder__'; + +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeMin = Math.min; + +/** + * Merges the function metadata of `source` into `data`. + * + * Merging metadata reduces the number of wrappers required to invoke a function. + * This is possible because methods like `_.bind`, `_.curry`, and `_.partial` + * may be applied regardless of execution order. Methods like `_.ary` and `_.rearg` + * augment function arguments, making the order in which they are executed important, + * preventing the merging of metadata. However, we make an exception for a safe + * common case where curried functions have `_.ary` and or `_.rearg` applied. + * + * @private + * @param {Array} data The destination metadata. + * @param {Array} source The source metadata. + * @returns {Array} Returns `data`. + */ +function mergeData(data, source) { + var bitmask = data[1], + srcBitmask = source[1], + newBitmask = bitmask | srcBitmask, + isCommon = newBitmask < ARY_FLAG; + + var isCombo = + (srcBitmask == ARY_FLAG && bitmask == CURRY_FLAG) || + (srcBitmask == ARY_FLAG && bitmask == REARG_FLAG && data[7].length <= source[8]) || + (srcBitmask == (ARY_FLAG | REARG_FLAG) && bitmask == CURRY_FLAG); + + // Exit early if metadata can't be merged. + if (!(isCommon || isCombo)) { + return data; + } + // Use source `thisArg` if available. + if (srcBitmask & BIND_FLAG) { + data[2] = source[2]; + // Set when currying a bound function. + newBitmask |= (bitmask & BIND_FLAG) ? 0 : CURRY_BOUND_FLAG; + } + // Compose partial arguments. + var value = source[3]; + if (value) { + var partials = data[3]; + data[3] = partials ? composeArgs(partials, value, source[4]) : arrayCopy(value); + data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : arrayCopy(source[4]); + } + // Compose partial right arguments. + value = source[5]; + if (value) { + partials = data[5]; + data[5] = partials ? composeArgsRight(partials, value, source[6]) : arrayCopy(value); + data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : arrayCopy(source[6]); + } + // Use source `argPos` if available. + value = source[7]; + if (value) { + data[7] = arrayCopy(value); + } + // Use source `ary` if it's smaller. + if (srcBitmask & ARY_FLAG) { + data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]); + } + // Use source `arity` if one is not provided. + if (data[9] == null) { + data[9] = source[9]; + } + // Use source `func` and merge bitmasks. + data[0] = source[0]; + data[1] = newBitmask; + + return data; +} + +module.exports = mergeData; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/mergeDefaults.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/mergeDefaults.js new file mode 100644 index 00000000..dcd967e9 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/mergeDefaults.js @@ -0,0 +1,15 @@ +var merge = require('../object/merge'); + +/** + * Used by `_.defaultsDeep` to customize its `_.merge` use. + * + * @private + * @param {*} objectValue The destination object property value. + * @param {*} sourceValue The source object property value. + * @returns {*} Returns the value to assign to the destination object. + */ +function mergeDefaults(objectValue, sourceValue) { + return objectValue === undefined ? sourceValue : merge(objectValue, sourceValue, mergeDefaults); +} + +module.exports = mergeDefaults; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/metaMap.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/metaMap.js new file mode 100644 index 00000000..59bfd5f9 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/metaMap.js @@ -0,0 +1,9 @@ +var getNative = require('./getNative'); + +/** Native method references. */ +var WeakMap = getNative(global, 'WeakMap'); + +/** Used to store function metadata. */ +var metaMap = WeakMap && new WeakMap; + +module.exports = metaMap; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/pickByArray.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/pickByArray.js new file mode 100644 index 00000000..0999d90a --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/pickByArray.js @@ -0,0 +1,28 @@ +var toObject = require('./toObject'); + +/** + * A specialized version of `_.pick` which picks `object` properties specified + * by `props`. + * + * @private + * @param {Object} object The source object. + * @param {string[]} props The property names to pick. + * @returns {Object} Returns the new object. + */ +function pickByArray(object, props) { + object = toObject(object); + + var index = -1, + length = props.length, + result = {}; + + while (++index < length) { + var key = props[index]; + if (key in object) { + result[key] = object[key]; + } + } + return result; +} + +module.exports = pickByArray; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/pickByCallback.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/pickByCallback.js new file mode 100644 index 00000000..79d3cdc8 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/pickByCallback.js @@ -0,0 +1,22 @@ +var baseForIn = require('./baseForIn'); + +/** + * A specialized version of `_.pick` which picks `object` properties `predicate` + * returns truthy for. + * + * @private + * @param {Object} object The source object. + * @param {Function} predicate The function invoked per iteration. + * @returns {Object} Returns the new object. + */ +function pickByCallback(object, predicate) { + var result = {}; + baseForIn(object, function(value, key, object) { + if (predicate(value, key, object)) { + result[key] = value; + } + }); + return result; +} + +module.exports = pickByCallback; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/reEscape.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/reEscape.js new file mode 100644 index 00000000..7f47eda6 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/reEscape.js @@ -0,0 +1,4 @@ +/** Used to match template delimiters. */ +var reEscape = /<%-([\s\S]+?)%>/g; + +module.exports = reEscape; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/reEvaluate.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/reEvaluate.js new file mode 100644 index 00000000..6adfc312 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/reEvaluate.js @@ -0,0 +1,4 @@ +/** Used to match template delimiters. */ +var reEvaluate = /<%([\s\S]+?)%>/g; + +module.exports = reEvaluate; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/reInterpolate.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/reInterpolate.js new file mode 100644 index 00000000..d02ff0b2 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/reInterpolate.js @@ -0,0 +1,4 @@ +/** Used to match template delimiters. */ +var reInterpolate = /<%=([\s\S]+?)%>/g; + +module.exports = reInterpolate; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/realNames.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/realNames.js new file mode 100644 index 00000000..aa0d5292 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/realNames.js @@ -0,0 +1,4 @@ +/** Used to lookup unminified function names. */ +var realNames = {}; + +module.exports = realNames; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/reorder.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/reorder.js new file mode 100644 index 00000000..9424927d --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/reorder.js @@ -0,0 +1,29 @@ +var arrayCopy = require('./arrayCopy'), + isIndex = require('./isIndex'); + +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeMin = Math.min; + +/** + * Reorder `array` according to the specified indexes where the element at + * the first index is assigned as the first element, the element at + * the second index is assigned as the second element, and so on. + * + * @private + * @param {Array} array The array to reorder. + * @param {Array} indexes The arranged array indexes. + * @returns {Array} Returns `array`. + */ +function reorder(array, indexes) { + var arrLength = array.length, + length = nativeMin(indexes.length, arrLength), + oldArray = arrayCopy(array); + + while (length--) { + var index = indexes[length]; + array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined; + } + return array; +} + +module.exports = reorder; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/replaceHolders.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/replaceHolders.js new file mode 100644 index 00000000..3089e75e --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/replaceHolders.js @@ -0,0 +1,28 @@ +/** Used as the internal argument placeholder. */ +var PLACEHOLDER = '__lodash_placeholder__'; + +/** + * Replaces all `placeholder` elements in `array` with an internal placeholder + * and returns an array of their indexes. + * + * @private + * @param {Array} array The array to modify. + * @param {*} placeholder The placeholder to replace. + * @returns {Array} Returns the new array of placeholder indexes. + */ +function replaceHolders(array, placeholder) { + var index = -1, + length = array.length, + resIndex = -1, + result = []; + + while (++index < length) { + if (array[index] === placeholder) { + array[index] = PLACEHOLDER; + result[++resIndex] = index; + } + } + return result; +} + +module.exports = replaceHolders; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/setData.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/setData.js new file mode 100644 index 00000000..7eb3f40b --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/setData.js @@ -0,0 +1,41 @@ +var baseSetData = require('./baseSetData'), + now = require('../date/now'); + +/** Used to detect when a function becomes hot. */ +var HOT_COUNT = 150, + HOT_SPAN = 16; + +/** + * Sets metadata for `func`. + * + * **Note:** If this function becomes hot, i.e. is invoked a lot in a short + * period of time, it will trip its breaker and transition to an identity function + * to avoid garbage collection pauses in V8. See [V8 issue 2070](https://code.google.com/p/v8/issues/detail?id=2070) + * for more details. + * + * @private + * @param {Function} func The function to associate metadata with. + * @param {*} data The metadata. + * @returns {Function} Returns `func`. + */ +var setData = (function() { + var count = 0, + lastCalled = 0; + + return function(key, value) { + var stamp = now(), + remaining = HOT_SPAN - (stamp - lastCalled); + + lastCalled = stamp; + if (remaining > 0) { + if (++count >= HOT_COUNT) { + return key; + } + } else { + count = 0; + } + return baseSetData(key, value); + }; +}()); + +module.exports = setData; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/shimKeys.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/shimKeys.js new file mode 100644 index 00000000..189e492b --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/shimKeys.js @@ -0,0 +1,41 @@ +var isArguments = require('../lang/isArguments'), + isArray = require('../lang/isArray'), + isIndex = require('./isIndex'), + isLength = require('./isLength'), + keysIn = require('../object/keysIn'); + +/** Used for native method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * A fallback implementation of `Object.keys` which creates an array of the + * own enumerable property names of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function shimKeys(object) { + var props = keysIn(object), + propsLength = props.length, + length = propsLength && object.length; + + var allowIndexes = !!length && isLength(length) && + (isArray(object) || isArguments(object)); + + var index = -1, + result = []; + + while (++index < propsLength) { + var key = props[index]; + if ((allowIndexes && isIndex(key, length)) || hasOwnProperty.call(object, key)) { + result.push(key); + } + } + return result; +} + +module.exports = shimKeys; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/sortedUniq.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/sortedUniq.js new file mode 100644 index 00000000..22887eb2 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/sortedUniq.js @@ -0,0 +1,29 @@ +/** + * An implementation of `_.uniq` optimized for sorted arrays without support + * for callback shorthands and `this` binding. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The function invoked per iteration. + * @returns {Array} Returns the new duplicate-value-free array. + */ +function sortedUniq(array, iteratee) { + var seen, + index = -1, + length = array.length, + resIndex = -1, + result = []; + + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value, index, array) : value; + + if (!index || seen !== computed) { + seen = computed; + result[++resIndex] = value; + } + } + return result; +} + +module.exports = sortedUniq; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/toIterable.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/toIterable.js new file mode 100644 index 00000000..c0a5b288 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/toIterable.js @@ -0,0 +1,22 @@ +var isArrayLike = require('./isArrayLike'), + isObject = require('../lang/isObject'), + values = require('../object/values'); + +/** + * Converts `value` to an array-like object if it's not one. + * + * @private + * @param {*} value The value to process. + * @returns {Array|Object} Returns the array-like object. + */ +function toIterable(value) { + if (value == null) { + return []; + } + if (!isArrayLike(value)) { + return values(value); + } + return isObject(value) ? value : Object(value); +} + +module.exports = toIterable; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/toObject.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/toObject.js new file mode 100644 index 00000000..da4a008d --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/toObject.js @@ -0,0 +1,14 @@ +var isObject = require('../lang/isObject'); + +/** + * Converts `value` to an object if it's not one. + * + * @private + * @param {*} value The value to process. + * @returns {Object} Returns the object. + */ +function toObject(value) { + return isObject(value) ? value : Object(value); +} + +module.exports = toObject; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/toPath.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/toPath.js new file mode 100644 index 00000000..d29f1eb5 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/toPath.js @@ -0,0 +1,28 @@ +var baseToString = require('./baseToString'), + isArray = require('../lang/isArray'); + +/** Used to match property names within property paths. */ +var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\n\\]|\\.)*?)\2)\]/g; + +/** Used to match backslashes in property paths. */ +var reEscapeChar = /\\(\\)?/g; + +/** + * Converts `value` to property path array if it's not one. + * + * @private + * @param {*} value The value to process. + * @returns {Array} Returns the property path array. + */ +function toPath(value) { + if (isArray(value)) { + return value; + } + var result = []; + baseToString(value).replace(rePropName, function(match, number, quote, string) { + result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; +} + +module.exports = toPath; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/trimmedLeftIndex.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/trimmedLeftIndex.js new file mode 100644 index 00000000..08aeb136 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/trimmedLeftIndex.js @@ -0,0 +1,19 @@ +var isSpace = require('./isSpace'); + +/** + * Used by `_.trim` and `_.trimLeft` to get the index of the first non-whitespace + * character of `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the index of the first non-whitespace character. + */ +function trimmedLeftIndex(string) { + var index = -1, + length = string.length; + + while (++index < length && isSpace(string.charCodeAt(index))) {} + return index; +} + +module.exports = trimmedLeftIndex; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/trimmedRightIndex.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/trimmedRightIndex.js new file mode 100644 index 00000000..71b9e38a --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/trimmedRightIndex.js @@ -0,0 +1,18 @@ +var isSpace = require('./isSpace'); + +/** + * Used by `_.trim` and `_.trimRight` to get the index of the last non-whitespace + * character of `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the index of the last non-whitespace character. + */ +function trimmedRightIndex(string) { + var index = string.length; + + while (index-- && isSpace(string.charCodeAt(index))) {} + return index; +} + +module.exports = trimmedRightIndex; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/unescapeHtmlChar.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/unescapeHtmlChar.js new file mode 100644 index 00000000..28b34549 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/unescapeHtmlChar.js @@ -0,0 +1,22 @@ +/** Used to map HTML entities to characters. */ +var htmlUnescapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + ''': "'", + '`': '`' +}; + +/** + * Used by `_.unescape` to convert HTML entities to characters. + * + * @private + * @param {string} chr The matched character to unescape. + * @returns {string} Returns the unescaped character. + */ +function unescapeHtmlChar(chr) { + return htmlUnescapes[chr]; +} + +module.exports = unescapeHtmlChar; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/wrapperClone.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/wrapperClone.js new file mode 100644 index 00000000..e5e10dac --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/internal/wrapperClone.js @@ -0,0 +1,18 @@ +var LazyWrapper = require('./LazyWrapper'), + LodashWrapper = require('./LodashWrapper'), + arrayCopy = require('./arrayCopy'); + +/** + * Creates a clone of `wrapper`. + * + * @private + * @param {Object} wrapper The wrapper to clone. + * @returns {Object} Returns the cloned wrapper. + */ +function wrapperClone(wrapper) { + return wrapper instanceof LazyWrapper + ? wrapper.clone() + : new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__, arrayCopy(wrapper.__actions__)); +} + +module.exports = wrapperClone; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang.js new file mode 100644 index 00000000..8f0a3643 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang.js @@ -0,0 +1,32 @@ +module.exports = { + 'clone': require('./lang/clone'), + 'cloneDeep': require('./lang/cloneDeep'), + 'eq': require('./lang/eq'), + 'gt': require('./lang/gt'), + 'gte': require('./lang/gte'), + 'isArguments': require('./lang/isArguments'), + 'isArray': require('./lang/isArray'), + 'isBoolean': require('./lang/isBoolean'), + 'isDate': require('./lang/isDate'), + 'isElement': require('./lang/isElement'), + 'isEmpty': require('./lang/isEmpty'), + 'isEqual': require('./lang/isEqual'), + 'isError': require('./lang/isError'), + 'isFinite': require('./lang/isFinite'), + 'isFunction': require('./lang/isFunction'), + 'isMatch': require('./lang/isMatch'), + 'isNaN': require('./lang/isNaN'), + 'isNative': require('./lang/isNative'), + 'isNull': require('./lang/isNull'), + 'isNumber': require('./lang/isNumber'), + 'isObject': require('./lang/isObject'), + 'isPlainObject': require('./lang/isPlainObject'), + 'isRegExp': require('./lang/isRegExp'), + 'isString': require('./lang/isString'), + 'isTypedArray': require('./lang/isTypedArray'), + 'isUndefined': require('./lang/isUndefined'), + 'lt': require('./lang/lt'), + 'lte': require('./lang/lte'), + 'toArray': require('./lang/toArray'), + 'toPlainObject': require('./lang/toPlainObject') +}; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/clone.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/clone.js new file mode 100644 index 00000000..0a972eae --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/clone.js @@ -0,0 +1,70 @@ +var baseClone = require('../internal/baseClone'), + bindCallback = require('../internal/bindCallback'), + isIterateeCall = require('../internal/isIterateeCall'); + +/** + * Creates a clone of `value`. If `isDeep` is `true` nested objects are cloned, + * otherwise they are assigned by reference. If `customizer` is provided it is + * invoked to produce the cloned values. If `customizer` returns `undefined` + * cloning is handled by the method instead. The `customizer` is bound to + * `thisArg` and invoked with two argument; (value [, index|key, object]). + * + * **Note:** This method is loosely based on the + * [structured clone algorithm](http://www.w3.org/TR/html5/infrastructure.html#internal-structured-cloning-algorithm). + * The enumerable properties of `arguments` objects and objects created by + * constructors other than `Object` are cloned to plain `Object` objects. An + * empty object is returned for uncloneable values such as functions, DOM nodes, + * Maps, Sets, and WeakMaps. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @param {Function} [customizer] The function to customize cloning values. + * @param {*} [thisArg] The `this` binding of `customizer`. + * @returns {*} Returns the cloned value. + * @example + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * var shallow = _.clone(users); + * shallow[0] === users[0]; + * // => true + * + * var deep = _.clone(users, true); + * deep[0] === users[0]; + * // => false + * + * // using a customizer callback + * var el = _.clone(document.body, function(value) { + * if (_.isElement(value)) { + * return value.cloneNode(false); + * } + * }); + * + * el === document.body + * // => false + * el.nodeName + * // => BODY + * el.childNodes.length; + * // => 0 + */ +function clone(value, isDeep, customizer, thisArg) { + if (isDeep && typeof isDeep != 'boolean' && isIterateeCall(value, isDeep, customizer)) { + isDeep = false; + } + else if (typeof isDeep == 'function') { + thisArg = customizer; + customizer = isDeep; + isDeep = false; + } + return typeof customizer == 'function' + ? baseClone(value, isDeep, bindCallback(customizer, thisArg, 1)) + : baseClone(value, isDeep); +} + +module.exports = clone; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/cloneDeep.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/cloneDeep.js new file mode 100644 index 00000000..a458141e --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/cloneDeep.js @@ -0,0 +1,55 @@ +var baseClone = require('../internal/baseClone'), + bindCallback = require('../internal/bindCallback'); + +/** + * Creates a deep clone of `value`. If `customizer` is provided it is invoked + * to produce the cloned values. If `customizer` returns `undefined` cloning + * is handled by the method instead. The `customizer` is bound to `thisArg` + * and invoked with two argument; (value [, index|key, object]). + * + * **Note:** This method is loosely based on the + * [structured clone algorithm](http://www.w3.org/TR/html5/infrastructure.html#internal-structured-cloning-algorithm). + * The enumerable properties of `arguments` objects and objects created by + * constructors other than `Object` are cloned to plain `Object` objects. An + * empty object is returned for uncloneable values such as functions, DOM nodes, + * Maps, Sets, and WeakMaps. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to deep clone. + * @param {Function} [customizer] The function to customize cloning values. + * @param {*} [thisArg] The `this` binding of `customizer`. + * @returns {*} Returns the deep cloned value. + * @example + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * var deep = _.cloneDeep(users); + * deep[0] === users[0]; + * // => false + * + * // using a customizer callback + * var el = _.cloneDeep(document.body, function(value) { + * if (_.isElement(value)) { + * return value.cloneNode(true); + * } + * }); + * + * el === document.body + * // => false + * el.nodeName + * // => BODY + * el.childNodes.length; + * // => 20 + */ +function cloneDeep(value, customizer, thisArg) { + return typeof customizer == 'function' + ? baseClone(value, true, bindCallback(customizer, thisArg, 1)) + : baseClone(value, true); +} + +module.exports = cloneDeep; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/eq.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/eq.js new file mode 100644 index 00000000..e6a5ce0c --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/eq.js @@ -0,0 +1 @@ +module.exports = require('./isEqual'); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/gt.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/gt.js new file mode 100644 index 00000000..ddaf5ea0 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/gt.js @@ -0,0 +1,25 @@ +/** + * Checks if `value` is greater than `other`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, else `false`. + * @example + * + * _.gt(3, 1); + * // => true + * + * _.gt(3, 3); + * // => false + * + * _.gt(1, 3); + * // => false + */ +function gt(value, other) { + return value > other; +} + +module.exports = gt; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/gte.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/gte.js new file mode 100644 index 00000000..4a5ffb5c --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/gte.js @@ -0,0 +1,25 @@ +/** + * Checks if `value` is greater than or equal to `other`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than or equal to `other`, else `false`. + * @example + * + * _.gte(3, 1); + * // => true + * + * _.gte(3, 3); + * // => true + * + * _.gte(1, 3); + * // => false + */ +function gte(value, other) { + return value >= other; +} + +module.exports = gte; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/isArguments.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/isArguments.js new file mode 100644 index 00000000..ce9763d2 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/isArguments.js @@ -0,0 +1,34 @@ +var isArrayLike = require('../internal/isArrayLike'), + isObjectLike = require('../internal/isObjectLike'); + +/** Used for native method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** Native method references. */ +var propertyIsEnumerable = objectProto.propertyIsEnumerable; + +/** + * Checks if `value` is classified as an `arguments` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ +function isArguments(value) { + return isObjectLike(value) && isArrayLike(value) && + hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee'); +} + +module.exports = isArguments; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/isArray.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/isArray.js new file mode 100644 index 00000000..9ab023ac --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/isArray.js @@ -0,0 +1,40 @@ +var getNative = require('../internal/getNative'), + isLength = require('../internal/isLength'), + isObjectLike = require('../internal/isObjectLike'); + +/** `Object#toString` result references. */ +var arrayTag = '[object Array]'; + +/** Used for native method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ +var objToString = objectProto.toString; + +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeIsArray = getNative(Array, 'isArray'); + +/** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(function() { return arguments; }()); + * // => false + */ +var isArray = nativeIsArray || function(value) { + return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag; +}; + +module.exports = isArray; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/isBoolean.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/isBoolean.js new file mode 100644 index 00000000..460e6c5b --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/isBoolean.js @@ -0,0 +1,35 @@ +var isObjectLike = require('../internal/isObjectLike'); + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]'; + +/** Used for native method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ +var objToString = objectProto.toString; + +/** + * Checks if `value` is classified as a boolean primitive or object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isBoolean(false); + * // => true + * + * _.isBoolean(null); + * // => false + */ +function isBoolean(value) { + return value === true || value === false || (isObjectLike(value) && objToString.call(value) == boolTag); +} + +module.exports = isBoolean; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/isDate.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/isDate.js new file mode 100644 index 00000000..29850d94 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/isDate.js @@ -0,0 +1,35 @@ +var isObjectLike = require('../internal/isObjectLike'); + +/** `Object#toString` result references. */ +var dateTag = '[object Date]'; + +/** Used for native method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ +var objToString = objectProto.toString; + +/** + * Checks if `value` is classified as a `Date` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isDate(new Date); + * // => true + * + * _.isDate('Mon April 23 2012'); + * // => false + */ +function isDate(value) { + return isObjectLike(value) && objToString.call(value) == dateTag; +} + +module.exports = isDate; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/isElement.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/isElement.js new file mode 100644 index 00000000..2e9c9704 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/isElement.js @@ -0,0 +1,24 @@ +var isObjectLike = require('../internal/isObjectLike'), + isPlainObject = require('./isPlainObject'); + +/** + * Checks if `value` is a DOM element. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`. + * @example + * + * _.isElement(document.body); + * // => true + * + * _.isElement('<body>'); + * // => false + */ +function isElement(value) { + return !!value && value.nodeType === 1 && isObjectLike(value) && !isPlainObject(value); +} + +module.exports = isElement; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/isEmpty.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/isEmpty.js new file mode 100644 index 00000000..2144afd9 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/isEmpty.js @@ -0,0 +1,47 @@ +var isArguments = require('./isArguments'), + isArray = require('./isArray'), + isArrayLike = require('../internal/isArrayLike'), + isFunction = require('./isFunction'), + isObjectLike = require('../internal/isObjectLike'), + isString = require('./isString'), + keys = require('../object/keys'); + +/** + * Checks if `value` is empty. A value is considered empty unless it is an + * `arguments` object, array, string, or jQuery-like collection with a length + * greater than `0` or an object with own enumerable properties. + * + * @static + * @memberOf _ + * @category Lang + * @param {Array|Object|string} value The value to inspect. + * @returns {boolean} Returns `true` if `value` is empty, else `false`. + * @example + * + * _.isEmpty(null); + * // => true + * + * _.isEmpty(true); + * // => true + * + * _.isEmpty(1); + * // => true + * + * _.isEmpty([1, 2, 3]); + * // => false + * + * _.isEmpty({ 'a': 1 }); + * // => false + */ +function isEmpty(value) { + if (value == null) { + return true; + } + if (isArrayLike(value) && (isArray(value) || isString(value) || isArguments(value) || + (isObjectLike(value) && isFunction(value.splice)))) { + return !value.length; + } + return !keys(value).length; +} + +module.exports = isEmpty; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/isEqual.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/isEqual.js new file mode 100644 index 00000000..f2cb5d86 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/isEqual.js @@ -0,0 +1,54 @@ +var baseIsEqual = require('../internal/baseIsEqual'), + bindCallback = require('../internal/bindCallback'); + +/** + * Performs a deep comparison between two values to determine if they are + * equivalent. If `customizer` is provided it is invoked to compare values. + * If `customizer` returns `undefined` comparisons are handled by the method + * instead. The `customizer` is bound to `thisArg` and invoked with three + * arguments: (value, other [, index|key]). + * + * **Note:** This method supports comparing arrays, booleans, `Date` objects, + * numbers, `Object` objects, regexes, and strings. Objects are compared by + * their own, not inherited, enumerable properties. Functions and DOM nodes + * are **not** supported. Provide a customizer function to extend support + * for comparing other values. + * + * @static + * @memberOf _ + * @alias eq + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {Function} [customizer] The function to customize value comparisons. + * @param {*} [thisArg] The `this` binding of `customizer`. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'user': 'fred' }; + * var other = { 'user': 'fred' }; + * + * object == other; + * // => false + * + * _.isEqual(object, other); + * // => true + * + * // using a customizer callback + * var array = ['hello', 'goodbye']; + * var other = ['hi', 'goodbye']; + * + * _.isEqual(array, other, function(value, other) { + * if (_.every([value, other], RegExp.prototype.test, /^h(?:i|ello)$/)) { + * return true; + * } + * }); + * // => true + */ +function isEqual(value, other, customizer, thisArg) { + customizer = typeof customizer == 'function' ? bindCallback(customizer, thisArg, 3) : undefined; + var result = customizer ? customizer(value, other) : undefined; + return result === undefined ? baseIsEqual(value, other, customizer) : !!result; +} + +module.exports = isEqual; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/isError.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/isError.js new file mode 100644 index 00000000..a7bb0d09 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/isError.js @@ -0,0 +1,36 @@ +var isObjectLike = require('../internal/isObjectLike'); + +/** `Object#toString` result references. */ +var errorTag = '[object Error]'; + +/** Used for native method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ +var objToString = objectProto.toString; + +/** + * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`, + * `SyntaxError`, `TypeError`, or `URIError` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an error object, else `false`. + * @example + * + * _.isError(new Error); + * // => true + * + * _.isError(Error); + * // => false + */ +function isError(value) { + return isObjectLike(value) && typeof value.message == 'string' && objToString.call(value) == errorTag; +} + +module.exports = isError; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/isFinite.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/isFinite.js new file mode 100644 index 00000000..e01a307f --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/isFinite.js @@ -0,0 +1,35 @@ +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeIsFinite = global.isFinite; + +/** + * Checks if `value` is a finite primitive number. + * + * **Note:** This method is based on [`Number.isFinite`](http://ecma-international.org/ecma-262/6.0/#sec-number.isfinite). + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a finite number, else `false`. + * @example + * + * _.isFinite(10); + * // => true + * + * _.isFinite('10'); + * // => false + * + * _.isFinite(true); + * // => false + * + * _.isFinite(Object(10)); + * // => false + * + * _.isFinite(Infinity); + * // => false + */ +function isFinite(value) { + return typeof value == 'number' && nativeIsFinite(value); +} + +module.exports = isFinite; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/isFunction.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/isFunction.js new file mode 100644 index 00000000..37e1a2d7 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/isFunction.js @@ -0,0 +1,38 @@ +var isObject = require('./isObject'); + +/** `Object#toString` result references. */ +var funcTag = '[object Function]'; + +/** Used for native method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ +var objToString = objectProto.toString; + +/** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ +function isFunction(value) { + // The use of `Object#toString` avoids issues with the `typeof` operator + // in older versions of Chrome and Safari which return 'function' for regexes + // and Safari 8 equivalents which return 'object' for typed array constructors. + return isObject(value) && objToString.call(value) == funcTag; +} + +module.exports = isFunction; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/isMatch.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/isMatch.js new file mode 100644 index 00000000..cb48436a --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/isMatch.js @@ -0,0 +1,49 @@ +var baseIsMatch = require('../internal/baseIsMatch'), + bindCallback = require('../internal/bindCallback'), + getMatchData = require('../internal/getMatchData'); + +/** + * Performs a deep comparison between `object` and `source` to determine if + * `object` contains equivalent property values. If `customizer` is provided + * it is invoked to compare values. If `customizer` returns `undefined` + * comparisons are handled by the method instead. The `customizer` is bound + * to `thisArg` and invoked with three arguments: (value, other, index|key). + * + * **Note:** This method supports comparing properties of arrays, booleans, + * `Date` objects, numbers, `Object` objects, regexes, and strings. Functions + * and DOM nodes are **not** supported. Provide a customizer function to extend + * support for comparing other values. + * + * @static + * @memberOf _ + * @category Lang + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Function} [customizer] The function to customize value comparisons. + * @param {*} [thisArg] The `this` binding of `customizer`. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + * @example + * + * var object = { 'user': 'fred', 'age': 40 }; + * + * _.isMatch(object, { 'age': 40 }); + * // => true + * + * _.isMatch(object, { 'age': 36 }); + * // => false + * + * // using a customizer callback + * var object = { 'greeting': 'hello' }; + * var source = { 'greeting': 'hi' }; + * + * _.isMatch(object, source, function(value, other) { + * return _.every([value, other], RegExp.prototype.test, /^h(?:i|ello)$/) || undefined; + * }); + * // => true + */ +function isMatch(object, source, customizer, thisArg) { + customizer = typeof customizer == 'function' ? bindCallback(customizer, thisArg, 3) : undefined; + return baseIsMatch(object, getMatchData(source), customizer); +} + +module.exports = isMatch; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/isNaN.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/isNaN.js new file mode 100644 index 00000000..cf83d566 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/isNaN.js @@ -0,0 +1,34 @@ +var isNumber = require('./isNumber'); + +/** + * Checks if `value` is `NaN`. + * + * **Note:** This method is not the same as [`isNaN`](https://es5.github.io/#x15.1.2.4) + * which returns `true` for `undefined` and other non-numeric values. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + * @example + * + * _.isNaN(NaN); + * // => true + * + * _.isNaN(new Number(NaN)); + * // => true + * + * isNaN(undefined); + * // => true + * + * _.isNaN(undefined); + * // => false + */ +function isNaN(value) { + // An `NaN` primitive is the only value that is not equal to itself. + // Perform the `toStringTag` check first to avoid errors with some host objects in IE. + return isNumber(value) && value != +value; +} + +module.exports = isNaN; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/isNative.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/isNative.js new file mode 100644 index 00000000..3ad71445 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/isNative.js @@ -0,0 +1,48 @@ +var isFunction = require('./isFunction'), + isObjectLike = require('../internal/isObjectLike'); + +/** Used to detect host constructors (Safari > 5). */ +var reIsHostCtor = /^\[object .+?Constructor\]$/; + +/** Used for native method references. */ +var objectProto = Object.prototype; + +/** Used to resolve the decompiled source of functions. */ +var fnToString = Function.prototype.toString; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** Used to detect if a method is native. */ +var reIsNative = RegExp('^' + + fnToString.call(hasOwnProperty).replace(/[\\^$.*+?()[\]{}|]/g, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' +); + +/** + * Checks if `value` is a native function. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, else `false`. + * @example + * + * _.isNative(Array.prototype.push); + * // => true + * + * _.isNative(_); + * // => false + */ +function isNative(value) { + if (value == null) { + return false; + } + if (isFunction(value)) { + return reIsNative.test(fnToString.call(value)); + } + return isObjectLike(value) && reIsHostCtor.test(value); +} + +module.exports = isNative; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/isNull.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/isNull.js new file mode 100644 index 00000000..ec66c4d8 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/isNull.js @@ -0,0 +1,21 @@ +/** + * Checks if `value` is `null`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `null`, else `false`. + * @example + * + * _.isNull(null); + * // => true + * + * _.isNull(void 0); + * // => false + */ +function isNull(value) { + return value === null; +} + +module.exports = isNull; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/isNumber.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/isNumber.js new file mode 100644 index 00000000..6764d6f9 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/isNumber.js @@ -0,0 +1,41 @@ +var isObjectLike = require('../internal/isObjectLike'); + +/** `Object#toString` result references. */ +var numberTag = '[object Number]'; + +/** Used for native method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ +var objToString = objectProto.toString; + +/** + * Checks if `value` is classified as a `Number` primitive or object. + * + * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are classified + * as numbers, use the `_.isFinite` method. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isNumber(8.4); + * // => true + * + * _.isNumber(NaN); + * // => true + * + * _.isNumber('8.4'); + * // => false + */ +function isNumber(value) { + return typeof value == 'number' || (isObjectLike(value) && objToString.call(value) == numberTag); +} + +module.exports = isNumber; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/isObject.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/isObject.js new file mode 100644 index 00000000..6db59987 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/isObject.js @@ -0,0 +1,28 @@ +/** + * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`. + * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(1); + * // => false + */ +function isObject(value) { + // Avoid a V8 JIT bug in Chrome 19-20. + // See https://code.google.com/p/v8/issues/detail?id=2291 for more details. + var type = typeof value; + return !!value && (type == 'object' || type == 'function'); +} + +module.exports = isObject; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/isPlainObject.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/isPlainObject.js new file mode 100644 index 00000000..5b34c838 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/isPlainObject.js @@ -0,0 +1,71 @@ +var baseForIn = require('../internal/baseForIn'), + isArguments = require('./isArguments'), + isObjectLike = require('../internal/isObjectLike'); + +/** `Object#toString` result references. */ +var objectTag = '[object Object]'; + +/** Used for native method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ +var objToString = objectProto.toString; + +/** + * Checks if `value` is a plain object, that is, an object created by the + * `Object` constructor or one with a `[[Prototype]]` of `null`. + * + * **Note:** This method assumes objects created by the `Object` constructor + * have no inherited enumerable properties. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * _.isPlainObject(new Foo); + * // => false + * + * _.isPlainObject([1, 2, 3]); + * // => false + * + * _.isPlainObject({ 'x': 0, 'y': 0 }); + * // => true + * + * _.isPlainObject(Object.create(null)); + * // => true + */ +function isPlainObject(value) { + var Ctor; + + // Exit early for non `Object` objects. + if (!(isObjectLike(value) && objToString.call(value) == objectTag && !isArguments(value)) || + (!hasOwnProperty.call(value, 'constructor') && (Ctor = value.constructor, typeof Ctor == 'function' && !(Ctor instanceof Ctor)))) { + return false; + } + // IE < 9 iterates inherited properties before own properties. If the first + // iterated property is an object's own property then there are no inherited + // enumerable properties. + var result; + // In most environments an object's own properties are iterated before + // its inherited properties. If the last iterated property is an object's + // own property then there are no inherited enumerable properties. + baseForIn(value, function(subValue, key) { + result = key; + }); + return result === undefined || hasOwnProperty.call(value, result); +} + +module.exports = isPlainObject; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/isRegExp.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/isRegExp.js new file mode 100644 index 00000000..f029cbdc --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/isRegExp.js @@ -0,0 +1,35 @@ +var isObject = require('./isObject'); + +/** `Object#toString` result references. */ +var regexpTag = '[object RegExp]'; + +/** Used for native method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ +var objToString = objectProto.toString; + +/** + * Checks if `value` is classified as a `RegExp` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isRegExp(/abc/); + * // => true + * + * _.isRegExp('/abc/'); + * // => false + */ +function isRegExp(value) { + return isObject(value) && objToString.call(value) == regexpTag; +} + +module.exports = isRegExp; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/isString.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/isString.js new file mode 100644 index 00000000..8b28ee19 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/isString.js @@ -0,0 +1,35 @@ +var isObjectLike = require('../internal/isObjectLike'); + +/** `Object#toString` result references. */ +var stringTag = '[object String]'; + +/** Used for native method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ +var objToString = objectProto.toString; + +/** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ +function isString(value) { + return typeof value == 'string' || (isObjectLike(value) && objToString.call(value) == stringTag); +} + +module.exports = isString; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/isTypedArray.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/isTypedArray.js new file mode 100644 index 00000000..6e8a6e03 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/isTypedArray.js @@ -0,0 +1,74 @@ +var isLength = require('../internal/isLength'), + isObjectLike = require('../internal/isObjectLike'); + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + mapTag = '[object Map]', + numberTag = '[object Number]', + objectTag = '[object Object]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + weakMapTag = '[object WeakMap]'; + +var arrayBufferTag = '[object ArrayBuffer]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + +/** Used to identify `toStringTag` values of typed arrays. */ +var typedArrayTags = {}; +typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = +typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = +typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = +typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = +typedArrayTags[uint32Tag] = true; +typedArrayTags[argsTag] = typedArrayTags[arrayTag] = +typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = +typedArrayTags[dateTag] = typedArrayTags[errorTag] = +typedArrayTags[funcTag] = typedArrayTags[mapTag] = +typedArrayTags[numberTag] = typedArrayTags[objectTag] = +typedArrayTags[regexpTag] = typedArrayTags[setTag] = +typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false; + +/** Used for native method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ +var objToString = objectProto.toString; + +/** + * Checks if `value` is classified as a typed array. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isTypedArray(new Uint8Array); + * // => true + * + * _.isTypedArray([]); + * // => false + */ +function isTypedArray(value) { + return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[objToString.call(value)]; +} + +module.exports = isTypedArray; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/isUndefined.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/isUndefined.js new file mode 100644 index 00000000..d64e560c --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/isUndefined.js @@ -0,0 +1,21 @@ +/** + * Checks if `value` is `undefined`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. + * @example + * + * _.isUndefined(void 0); + * // => true + * + * _.isUndefined(null); + * // => false + */ +function isUndefined(value) { + return value === undefined; +} + +module.exports = isUndefined; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/lt.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/lt.js new file mode 100644 index 00000000..4439870a --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/lt.js @@ -0,0 +1,25 @@ +/** + * Checks if `value` is less than `other`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, else `false`. + * @example + * + * _.lt(1, 3); + * // => true + * + * _.lt(3, 3); + * // => false + * + * _.lt(3, 1); + * // => false + */ +function lt(value, other) { + return value < other; +} + +module.exports = lt; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/lte.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/lte.js new file mode 100644 index 00000000..e2b8ab15 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/lte.js @@ -0,0 +1,25 @@ +/** + * Checks if `value` is less than or equal to `other`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than or equal to `other`, else `false`. + * @example + * + * _.lte(1, 3); + * // => true + * + * _.lte(3, 3); + * // => true + * + * _.lte(3, 1); + * // => false + */ +function lte(value, other) { + return value <= other; +} + +module.exports = lte; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/toArray.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/toArray.js new file mode 100644 index 00000000..72b0b46e --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/toArray.js @@ -0,0 +1,32 @@ +var arrayCopy = require('../internal/arrayCopy'), + getLength = require('../internal/getLength'), + isLength = require('../internal/isLength'), + values = require('../object/values'); + +/** + * Converts `value` to an array. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to convert. + * @returns {Array} Returns the converted array. + * @example + * + * (function() { + * return _.toArray(arguments).slice(1); + * }(1, 2, 3)); + * // => [2, 3] + */ +function toArray(value) { + var length = value ? getLength(value) : 0; + if (!isLength(length)) { + return values(value); + } + if (!length) { + return []; + } + return arrayCopy(value); +} + +module.exports = toArray; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/toPlainObject.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/toPlainObject.js new file mode 100644 index 00000000..6315176e --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/lang/toPlainObject.js @@ -0,0 +1,31 @@ +var baseCopy = require('../internal/baseCopy'), + keysIn = require('../object/keysIn'); + +/** + * Converts `value` to a plain object flattening inherited enumerable + * properties of `value` to own properties of the plain object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to convert. + * @returns {Object} Returns the converted plain object. + * @example + * + * function Foo() { + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.assign({ 'a': 1 }, new Foo); + * // => { 'a': 1, 'b': 2 } + * + * _.assign({ 'a': 1 }, _.toPlainObject(new Foo)); + * // => { 'a': 1, 'b': 2, 'c': 3 } + */ +function toPlainObject(value) { + return baseCopy(value, keysIn(value)); +} + +module.exports = toPlainObject; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/math.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/math.js new file mode 100644 index 00000000..21409ceb --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/math.js @@ -0,0 +1,9 @@ +module.exports = { + 'add': require('./math/add'), + 'ceil': require('./math/ceil'), + 'floor': require('./math/floor'), + 'max': require('./math/max'), + 'min': require('./math/min'), + 'round': require('./math/round'), + 'sum': require('./math/sum') +}; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/math/add.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/math/add.js new file mode 100644 index 00000000..59ced2fb --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/math/add.js @@ -0,0 +1,19 @@ +/** + * Adds two numbers. + * + * @static + * @memberOf _ + * @category Math + * @param {number} augend The first number to add. + * @param {number} addend The second number to add. + * @returns {number} Returns the sum. + * @example + * + * _.add(6, 4); + * // => 10 + */ +function add(augend, addend) { + return (+augend || 0) + (+addend || 0); +} + +module.exports = add; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/math/ceil.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/math/ceil.js new file mode 100644 index 00000000..9dbf0c26 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/math/ceil.js @@ -0,0 +1,25 @@ +var createRound = require('../internal/createRound'); + +/** + * Calculates `n` rounded up to `precision`. + * + * @static + * @memberOf _ + * @category Math + * @param {number} n The number to round up. + * @param {number} [precision=0] The precision to round up to. + * @returns {number} Returns the rounded up number. + * @example + * + * _.ceil(4.006); + * // => 5 + * + * _.ceil(6.004, 2); + * // => 6.01 + * + * _.ceil(6040, -2); + * // => 6100 + */ +var ceil = createRound('ceil'); + +module.exports = ceil; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/math/floor.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/math/floor.js new file mode 100644 index 00000000..e4dcae8b --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/math/floor.js @@ -0,0 +1,25 @@ +var createRound = require('../internal/createRound'); + +/** + * Calculates `n` rounded down to `precision`. + * + * @static + * @memberOf _ + * @category Math + * @param {number} n The number to round down. + * @param {number} [precision=0] The precision to round down to. + * @returns {number} Returns the rounded down number. + * @example + * + * _.floor(4.006); + * // => 4 + * + * _.floor(0.046, 2); + * // => 0.04 + * + * _.floor(4060, -2); + * // => 4000 + */ +var floor = createRound('floor'); + +module.exports = floor; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/math/max.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/math/max.js new file mode 100644 index 00000000..194c8006 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/math/max.js @@ -0,0 +1,56 @@ +var createExtremum = require('../internal/createExtremum'), + gt = require('../lang/gt'); + +/** Used as references for `-Infinity` and `Infinity`. */ +var NEGATIVE_INFINITY = Number.NEGATIVE_INFINITY; + +/** + * Gets the maximum value of `collection`. If `collection` is empty or falsey + * `-Infinity` is returned. If an iteratee function is provided it is invoked + * for each value in `collection` to generate the criterion by which the value + * is ranked. The `iteratee` is bound to `thisArg` and invoked with three + * arguments: (value, index, collection). + * + * If a property name is provided for `iteratee` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `iteratee` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Math + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [iteratee] The function invoked per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {*} Returns the maximum value. + * @example + * + * _.max([4, 2, 8, 6]); + * // => 8 + * + * _.max([]); + * // => -Infinity + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 } + * ]; + * + * _.max(users, function(chr) { + * return chr.age; + * }); + * // => { 'user': 'fred', 'age': 40 } + * + * // using the `_.property` callback shorthand + * _.max(users, 'age'); + * // => { 'user': 'fred', 'age': 40 } + */ +var max = createExtremum(gt, NEGATIVE_INFINITY); + +module.exports = max; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/math/min.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/math/min.js new file mode 100644 index 00000000..8a98a85a --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/math/min.js @@ -0,0 +1,56 @@ +var createExtremum = require('../internal/createExtremum'), + lt = require('../lang/lt'); + +/** Used as references for `-Infinity` and `Infinity`. */ +var POSITIVE_INFINITY = Number.POSITIVE_INFINITY; + +/** + * Gets the minimum value of `collection`. If `collection` is empty or falsey + * `Infinity` is returned. If an iteratee function is provided it is invoked + * for each value in `collection` to generate the criterion by which the value + * is ranked. The `iteratee` is bound to `thisArg` and invoked with three + * arguments: (value, index, collection). + * + * If a property name is provided for `iteratee` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `iteratee` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Math + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [iteratee] The function invoked per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {*} Returns the minimum value. + * @example + * + * _.min([4, 2, 8, 6]); + * // => 2 + * + * _.min([]); + * // => Infinity + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 } + * ]; + * + * _.min(users, function(chr) { + * return chr.age; + * }); + * // => { 'user': 'barney', 'age': 36 } + * + * // using the `_.property` callback shorthand + * _.min(users, 'age'); + * // => { 'user': 'barney', 'age': 36 } + */ +var min = createExtremum(lt, POSITIVE_INFINITY); + +module.exports = min; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/math/round.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/math/round.js new file mode 100644 index 00000000..5c69d0c1 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/math/round.js @@ -0,0 +1,25 @@ +var createRound = require('../internal/createRound'); + +/** + * Calculates `n` rounded to `precision`. + * + * @static + * @memberOf _ + * @category Math + * @param {number} n The number to round. + * @param {number} [precision=0] The precision to round to. + * @returns {number} Returns the rounded number. + * @example + * + * _.round(4.006); + * // => 4 + * + * _.round(4.006, 2); + * // => 4.01 + * + * _.round(4060, -2); + * // => 4100 + */ +var round = createRound('round'); + +module.exports = round; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/math/sum.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/math/sum.js new file mode 100644 index 00000000..114ff1b0 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/math/sum.js @@ -0,0 +1,50 @@ +var arraySum = require('../internal/arraySum'), + baseCallback = require('../internal/baseCallback'), + baseSum = require('../internal/baseSum'), + isArray = require('../lang/isArray'), + isIterateeCall = require('../internal/isIterateeCall'), + toIterable = require('../internal/toIterable'); + +/** + * Gets the sum of the values in `collection`. + * + * @static + * @memberOf _ + * @category Math + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [iteratee] The function invoked per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {number} Returns the sum. + * @example + * + * _.sum([4, 6]); + * // => 10 + * + * _.sum({ 'a': 4, 'b': 6 }); + * // => 10 + * + * var objects = [ + * { 'n': 4 }, + * { 'n': 6 } + * ]; + * + * _.sum(objects, function(object) { + * return object.n; + * }); + * // => 10 + * + * // using the `_.property` callback shorthand + * _.sum(objects, 'n'); + * // => 10 + */ +function sum(collection, iteratee, thisArg) { + if (thisArg && isIterateeCall(collection, iteratee, thisArg)) { + iteratee = undefined; + } + iteratee = baseCallback(iteratee, thisArg, 3); + return iteratee.length == 1 + ? arraySum(isArray(collection) ? collection : toIterable(collection), iteratee) + : baseSum(collection, iteratee); +} + +module.exports = sum; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/number.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/number.js new file mode 100644 index 00000000..afab9d99 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/number.js @@ -0,0 +1,4 @@ +module.exports = { + 'inRange': require('./number/inRange'), + 'random': require('./number/random') +}; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/number/inRange.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/number/inRange.js new file mode 100644 index 00000000..2ee83252 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/number/inRange.js @@ -0,0 +1,47 @@ +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max, + nativeMin = Math.min; + +/** + * Checks if `n` is between `start` and up to but not including, `end`. If + * `end` is not specified it is set to `start` with `start` then set to `0`. + * + * @static + * @memberOf _ + * @category Number + * @param {number} n The number to check. + * @param {number} [start=0] The start of the range. + * @param {number} end The end of the range. + * @returns {boolean} Returns `true` if `n` is in the range, else `false`. + * @example + * + * _.inRange(3, 2, 4); + * // => true + * + * _.inRange(4, 8); + * // => true + * + * _.inRange(4, 2); + * // => false + * + * _.inRange(2, 2); + * // => false + * + * _.inRange(1.2, 2); + * // => true + * + * _.inRange(5.2, 4); + * // => false + */ +function inRange(value, start, end) { + start = +start || 0; + if (end === undefined) { + end = start; + start = 0; + } else { + end = +end || 0; + } + return value >= nativeMin(start, end) && value < nativeMax(start, end); +} + +module.exports = inRange; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/number/random.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/number/random.js new file mode 100644 index 00000000..589d74e7 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/number/random.js @@ -0,0 +1,70 @@ +var baseRandom = require('../internal/baseRandom'), + isIterateeCall = require('../internal/isIterateeCall'); + +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeMin = Math.min, + nativeRandom = Math.random; + +/** + * Produces a random number between `min` and `max` (inclusive). If only one + * argument is provided a number between `0` and the given number is returned. + * If `floating` is `true`, or either `min` or `max` are floats, a floating-point + * number is returned instead of an integer. + * + * @static + * @memberOf _ + * @category Number + * @param {number} [min=0] The minimum possible value. + * @param {number} [max=1] The maximum possible value. + * @param {boolean} [floating] Specify returning a floating-point number. + * @returns {number} Returns the random number. + * @example + * + * _.random(0, 5); + * // => an integer between 0 and 5 + * + * _.random(5); + * // => also an integer between 0 and 5 + * + * _.random(5, true); + * // => a floating-point number between 0 and 5 + * + * _.random(1.2, 5.2); + * // => a floating-point number between 1.2 and 5.2 + */ +function random(min, max, floating) { + if (floating && isIterateeCall(min, max, floating)) { + max = floating = undefined; + } + var noMin = min == null, + noMax = max == null; + + if (floating == null) { + if (noMax && typeof min == 'boolean') { + floating = min; + min = 1; + } + else if (typeof max == 'boolean') { + floating = max; + noMax = true; + } + } + if (noMin && noMax) { + max = 1; + noMax = false; + } + min = +min || 0; + if (noMax) { + max = min; + min = 0; + } else { + max = +max || 0; + } + if (floating || min % 1 || max % 1) { + var rand = nativeRandom(); + return nativeMin(min + (rand * (max - min + parseFloat('1e-' + ((rand + '').length - 1)))), max); + } + return baseRandom(min, max); +} + +module.exports = random; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object.js new file mode 100644 index 00000000..4beb005a --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object.js @@ -0,0 +1,31 @@ +module.exports = { + 'assign': require('./object/assign'), + 'create': require('./object/create'), + 'defaults': require('./object/defaults'), + 'defaultsDeep': require('./object/defaultsDeep'), + 'extend': require('./object/extend'), + 'findKey': require('./object/findKey'), + 'findLastKey': require('./object/findLastKey'), + 'forIn': require('./object/forIn'), + 'forInRight': require('./object/forInRight'), + 'forOwn': require('./object/forOwn'), + 'forOwnRight': require('./object/forOwnRight'), + 'functions': require('./object/functions'), + 'get': require('./object/get'), + 'has': require('./object/has'), + 'invert': require('./object/invert'), + 'keys': require('./object/keys'), + 'keysIn': require('./object/keysIn'), + 'mapKeys': require('./object/mapKeys'), + 'mapValues': require('./object/mapValues'), + 'merge': require('./object/merge'), + 'methods': require('./object/methods'), + 'omit': require('./object/omit'), + 'pairs': require('./object/pairs'), + 'pick': require('./object/pick'), + 'result': require('./object/result'), + 'set': require('./object/set'), + 'transform': require('./object/transform'), + 'values': require('./object/values'), + 'valuesIn': require('./object/valuesIn') +}; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/assign.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/assign.js new file mode 100644 index 00000000..424e7edf --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/assign.js @@ -0,0 +1,43 @@ +var assignWith = require('../internal/assignWith'), + baseAssign = require('../internal/baseAssign'), + createAssigner = require('../internal/createAssigner'); + +/** + * Assigns own enumerable properties of source object(s) to the destination + * object. Subsequent sources overwrite property assignments of previous sources. + * If `customizer` is provided it is invoked to produce the assigned values. + * The `customizer` is bound to `thisArg` and invoked with five arguments: + * (objectValue, sourceValue, key, object, source). + * + * **Note:** This method mutates `object` and is based on + * [`Object.assign`](http://ecma-international.org/ecma-262/6.0/#sec-object.assign). + * + * @static + * @memberOf _ + * @alias extend + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @param {Function} [customizer] The function to customize assigned values. + * @param {*} [thisArg] The `this` binding of `customizer`. + * @returns {Object} Returns `object`. + * @example + * + * _.assign({ 'user': 'barney' }, { 'age': 40 }, { 'user': 'fred' }); + * // => { 'user': 'fred', 'age': 40 } + * + * // using a customizer callback + * var defaults = _.partialRight(_.assign, function(value, other) { + * return _.isUndefined(value) ? other : value; + * }); + * + * defaults({ 'user': 'barney' }, { 'age': 36 }, { 'user': 'fred' }); + * // => { 'user': 'barney', 'age': 36 } + */ +var assign = createAssigner(function(object, source, customizer) { + return customizer + ? assignWith(object, source, customizer) + : baseAssign(object, source); +}); + +module.exports = assign; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/create.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/create.js new file mode 100644 index 00000000..176294f3 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/create.js @@ -0,0 +1,47 @@ +var baseAssign = require('../internal/baseAssign'), + baseCreate = require('../internal/baseCreate'), + isIterateeCall = require('../internal/isIterateeCall'); + +/** + * Creates an object that inherits from the given `prototype` object. If a + * `properties` object is provided its own enumerable properties are assigned + * to the created object. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} prototype The object to inherit from. + * @param {Object} [properties] The properties to assign to the object. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Object} Returns the new object. + * @example + * + * function Shape() { + * this.x = 0; + * this.y = 0; + * } + * + * function Circle() { + * Shape.call(this); + * } + * + * Circle.prototype = _.create(Shape.prototype, { + * 'constructor': Circle + * }); + * + * var circle = new Circle; + * circle instanceof Circle; + * // => true + * + * circle instanceof Shape; + * // => true + */ +function create(prototype, properties, guard) { + var result = baseCreate(prototype); + if (guard && isIterateeCall(prototype, properties, guard)) { + properties = undefined; + } + return properties ? baseAssign(result, properties) : result; +} + +module.exports = create; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/defaults.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/defaults.js new file mode 100644 index 00000000..c05011e5 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/defaults.js @@ -0,0 +1,25 @@ +var assign = require('./assign'), + assignDefaults = require('../internal/assignDefaults'), + createDefaults = require('../internal/createDefaults'); + +/** + * Assigns own enumerable properties of source object(s) to the destination + * object for all destination properties that resolve to `undefined`. Once a + * property is set, additional values of the same property are ignored. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @example + * + * _.defaults({ 'user': 'barney' }, { 'age': 36 }, { 'user': 'fred' }); + * // => { 'user': 'barney', 'age': 36 } + */ +var defaults = createDefaults(assign, assignDefaults); + +module.exports = defaults; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/defaultsDeep.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/defaultsDeep.js new file mode 100644 index 00000000..ec6e687e --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/defaultsDeep.js @@ -0,0 +1,25 @@ +var createDefaults = require('../internal/createDefaults'), + merge = require('./merge'), + mergeDefaults = require('../internal/mergeDefaults'); + +/** + * This method is like `_.defaults` except that it recursively assigns + * default properties. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @example + * + * _.defaultsDeep({ 'user': { 'name': 'barney' } }, { 'user': { 'name': 'fred', 'age': 36 } }); + * // => { 'user': { 'name': 'barney', 'age': 36 } } + * + */ +var defaultsDeep = createDefaults(merge, mergeDefaults); + +module.exports = defaultsDeep; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/extend.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/extend.js new file mode 100644 index 00000000..dd0ca941 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/extend.js @@ -0,0 +1 @@ +module.exports = require('./assign'); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/findKey.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/findKey.js new file mode 100644 index 00000000..1359df34 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/findKey.js @@ -0,0 +1,54 @@ +var baseForOwn = require('../internal/baseForOwn'), + createFindKey = require('../internal/createFindKey'); + +/** + * This method is like `_.find` except that it returns the key of the first + * element `predicate` returns truthy for instead of the element itself. + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to search. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {string|undefined} Returns the key of the matched element, else `undefined`. + * @example + * + * var users = { + * 'barney': { 'age': 36, 'active': true }, + * 'fred': { 'age': 40, 'active': false }, + * 'pebbles': { 'age': 1, 'active': true } + * }; + * + * _.findKey(users, function(chr) { + * return chr.age < 40; + * }); + * // => 'barney' (iteration order is not guaranteed) + * + * // using the `_.matches` callback shorthand + * _.findKey(users, { 'age': 1, 'active': true }); + * // => 'pebbles' + * + * // using the `_.matchesProperty` callback shorthand + * _.findKey(users, 'active', false); + * // => 'fred' + * + * // using the `_.property` callback shorthand + * _.findKey(users, 'active'); + * // => 'barney' + */ +var findKey = createFindKey(baseForOwn); + +module.exports = findKey; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/findLastKey.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/findLastKey.js new file mode 100644 index 00000000..42893a4b --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/findLastKey.js @@ -0,0 +1,54 @@ +var baseForOwnRight = require('../internal/baseForOwnRight'), + createFindKey = require('../internal/createFindKey'); + +/** + * This method is like `_.findKey` except that it iterates over elements of + * a collection in the opposite order. + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to search. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {string|undefined} Returns the key of the matched element, else `undefined`. + * @example + * + * var users = { + * 'barney': { 'age': 36, 'active': true }, + * 'fred': { 'age': 40, 'active': false }, + * 'pebbles': { 'age': 1, 'active': true } + * }; + * + * _.findLastKey(users, function(chr) { + * return chr.age < 40; + * }); + * // => returns `pebbles` assuming `_.findKey` returns `barney` + * + * // using the `_.matches` callback shorthand + * _.findLastKey(users, { 'age': 36, 'active': true }); + * // => 'barney' + * + * // using the `_.matchesProperty` callback shorthand + * _.findLastKey(users, 'active', false); + * // => 'fred' + * + * // using the `_.property` callback shorthand + * _.findLastKey(users, 'active'); + * // => 'pebbles' + */ +var findLastKey = createFindKey(baseForOwnRight); + +module.exports = findLastKey; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/forIn.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/forIn.js new file mode 100644 index 00000000..52d34af8 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/forIn.js @@ -0,0 +1,33 @@ +var baseFor = require('../internal/baseFor'), + createForIn = require('../internal/createForIn'); + +/** + * Iterates over own and inherited enumerable properties of an object invoking + * `iteratee` for each property. The `iteratee` is bound to `thisArg` and invoked + * with three arguments: (value, key, object). Iteratee functions may exit + * iteration early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Object} Returns `object`. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forIn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => logs 'a', 'b', and 'c' (iteration order is not guaranteed) + */ +var forIn = createForIn(baseFor); + +module.exports = forIn; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/forInRight.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/forInRight.js new file mode 100644 index 00000000..6780b929 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/forInRight.js @@ -0,0 +1,31 @@ +var baseForRight = require('../internal/baseForRight'), + createForIn = require('../internal/createForIn'); + +/** + * This method is like `_.forIn` except that it iterates over properties of + * `object` in the opposite order. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Object} Returns `object`. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forInRight(new Foo, function(value, key) { + * console.log(key); + * }); + * // => logs 'c', 'b', and 'a' assuming `_.forIn ` logs 'a', 'b', and 'c' + */ +var forInRight = createForIn(baseForRight); + +module.exports = forInRight; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/forOwn.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/forOwn.js new file mode 100644 index 00000000..747bb765 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/forOwn.js @@ -0,0 +1,33 @@ +var baseForOwn = require('../internal/baseForOwn'), + createForOwn = require('../internal/createForOwn'); + +/** + * Iterates over own enumerable properties of an object invoking `iteratee` + * for each property. The `iteratee` is bound to `thisArg` and invoked with + * three arguments: (value, key, object). Iteratee functions may exit iteration + * early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Object} Returns `object`. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => logs 'a' and 'b' (iteration order is not guaranteed) + */ +var forOwn = createForOwn(baseForOwn); + +module.exports = forOwn; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/forOwnRight.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/forOwnRight.js new file mode 100644 index 00000000..8122338b --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/forOwnRight.js @@ -0,0 +1,31 @@ +var baseForOwnRight = require('../internal/baseForOwnRight'), + createForOwn = require('../internal/createForOwn'); + +/** + * This method is like `_.forOwn` except that it iterates over properties of + * `object` in the opposite order. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Object} Returns `object`. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwnRight(new Foo, function(value, key) { + * console.log(key); + * }); + * // => logs 'b' and 'a' assuming `_.forOwn` logs 'a' and 'b' + */ +var forOwnRight = createForOwn(baseForOwnRight); + +module.exports = forOwnRight; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/functions.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/functions.js new file mode 100644 index 00000000..10799bec --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/functions.js @@ -0,0 +1,23 @@ +var baseFunctions = require('../internal/baseFunctions'), + keysIn = require('./keysIn'); + +/** + * Creates an array of function property names from all enumerable properties, + * own and inherited, of `object`. + * + * @static + * @memberOf _ + * @alias methods + * @category Object + * @param {Object} object The object to inspect. + * @returns {Array} Returns the new array of property names. + * @example + * + * _.functions(_); + * // => ['after', 'ary', 'assign', ...] + */ +function functions(object) { + return baseFunctions(object, keysIn(object)); +} + +module.exports = functions; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/get.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/get.js new file mode 100644 index 00000000..0bb59b8d --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/get.js @@ -0,0 +1,33 @@ +var baseGet = require('../internal/baseGet'), + toPath = require('../internal/toPath'); + +/** + * Gets the property value at `path` of `object`. If the resolved value is + * `undefined` the `defaultValue` is used in its place. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned if the resolved value is `undefined`. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ +function get(object, path, defaultValue) { + var result = object == null ? undefined : baseGet(object, toPath(path), path + ''); + return result === undefined ? defaultValue : result; +} + +module.exports = get; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/has.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/has.js new file mode 100644 index 00000000..f356243e --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/has.js @@ -0,0 +1,57 @@ +var baseGet = require('../internal/baseGet'), + baseSlice = require('../internal/baseSlice'), + isArguments = require('../lang/isArguments'), + isArray = require('../lang/isArray'), + isIndex = require('../internal/isIndex'), + isKey = require('../internal/isKey'), + isLength = require('../internal/isLength'), + last = require('../array/last'), + toPath = require('../internal/toPath'); + +/** Used for native method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Checks if `path` is a direct property. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` is a direct property, else `false`. + * @example + * + * var object = { 'a': { 'b': { 'c': 3 } } }; + * + * _.has(object, 'a'); + * // => true + * + * _.has(object, 'a.b.c'); + * // => true + * + * _.has(object, ['a', 'b', 'c']); + * // => true + */ +function has(object, path) { + if (object == null) { + return false; + } + var result = hasOwnProperty.call(object, path); + if (!result && !isKey(path)) { + path = toPath(path); + object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1)); + if (object == null) { + return false; + } + path = last(path); + result = hasOwnProperty.call(object, path); + } + return result || (isLength(object.length) && isIndex(path, object.length) && + (isArray(object) || isArguments(object))); +} + +module.exports = has; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/invert.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/invert.js new file mode 100644 index 00000000..54fb1f1b --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/invert.js @@ -0,0 +1,60 @@ +var isIterateeCall = require('../internal/isIterateeCall'), + keys = require('./keys'); + +/** Used for native method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Creates an object composed of the inverted keys and values of `object`. + * If `object` contains duplicate values, subsequent values overwrite property + * assignments of previous values unless `multiValue` is `true`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to invert. + * @param {boolean} [multiValue] Allow multiple values per key. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Object} Returns the new inverted object. + * @example + * + * var object = { 'a': 1, 'b': 2, 'c': 1 }; + * + * _.invert(object); + * // => { '1': 'c', '2': 'b' } + * + * // with `multiValue` + * _.invert(object, true); + * // => { '1': ['a', 'c'], '2': ['b'] } + */ +function invert(object, multiValue, guard) { + if (guard && isIterateeCall(object, multiValue, guard)) { + multiValue = undefined; + } + var index = -1, + props = keys(object), + length = props.length, + result = {}; + + while (++index < length) { + var key = props[index], + value = object[key]; + + if (multiValue) { + if (hasOwnProperty.call(result, value)) { + result[value].push(key); + } else { + result[value] = [key]; + } + } + else { + result[value] = key; + } + } + return result; +} + +module.exports = invert; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/keys.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/keys.js new file mode 100644 index 00000000..4706fd61 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/keys.js @@ -0,0 +1,45 @@ +var getNative = require('../internal/getNative'), + isArrayLike = require('../internal/isArrayLike'), + isObject = require('../lang/isObject'), + shimKeys = require('../internal/shimKeys'); + +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeKeys = getNative(Object, 'keys'); + +/** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/6.0/#sec-object.keys) + * for more details. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ +var keys = !nativeKeys ? shimKeys : function(object) { + var Ctor = object == null ? undefined : object.constructor; + if ((typeof Ctor == 'function' && Ctor.prototype === object) || + (typeof object != 'function' && isArrayLike(object))) { + return shimKeys(object); + } + return isObject(object) ? nativeKeys(object) : []; +}; + +module.exports = keys; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/keysIn.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/keysIn.js new file mode 100644 index 00000000..45a85d79 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/keysIn.js @@ -0,0 +1,64 @@ +var isArguments = require('../lang/isArguments'), + isArray = require('../lang/isArray'), + isIndex = require('../internal/isIndex'), + isLength = require('../internal/isLength'), + isObject = require('../lang/isObject'); + +/** Used for native method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Creates an array of the own and inherited enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keysIn(new Foo); + * // => ['a', 'b', 'c'] (iteration order is not guaranteed) + */ +function keysIn(object) { + if (object == null) { + return []; + } + if (!isObject(object)) { + object = Object(object); + } + var length = object.length; + length = (length && isLength(length) && + (isArray(object) || isArguments(object)) && length) || 0; + + var Ctor = object.constructor, + index = -1, + isProto = typeof Ctor == 'function' && Ctor.prototype === object, + result = Array(length), + skipIndexes = length > 0; + + while (++index < length) { + result[index] = (index + ''); + } + for (var key in object) { + if (!(skipIndexes && isIndex(key, length)) && + !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { + result.push(key); + } + } + return result; +} + +module.exports = keysIn; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/mapKeys.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/mapKeys.js new file mode 100644 index 00000000..680b29b5 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/mapKeys.js @@ -0,0 +1,25 @@ +var createObjectMapper = require('../internal/createObjectMapper'); + +/** + * The opposite of `_.mapValues`; this method creates an object with the + * same values as `object` and keys generated by running each own enumerable + * property of `object` through `iteratee`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function|Object|string} [iteratee=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Object} Returns the new mapped object. + * @example + * + * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) { + * return key + value; + * }); + * // => { 'a1': 1, 'b2': 2 } + */ +var mapKeys = createObjectMapper(true); + +module.exports = mapKeys; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/mapValues.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/mapValues.js new file mode 100644 index 00000000..2afe6bac --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/mapValues.js @@ -0,0 +1,46 @@ +var createObjectMapper = require('../internal/createObjectMapper'); + +/** + * Creates an object with the same keys as `object` and values generated by + * running each own enumerable property of `object` through `iteratee`. The + * iteratee function is bound to `thisArg` and invoked with three arguments: + * (value, key, object). + * + * If a property name is provided for `iteratee` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `iteratee` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function|Object|string} [iteratee=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Object} Returns the new mapped object. + * @example + * + * _.mapValues({ 'a': 1, 'b': 2 }, function(n) { + * return n * 3; + * }); + * // => { 'a': 3, 'b': 6 } + * + * var users = { + * 'fred': { 'user': 'fred', 'age': 40 }, + * 'pebbles': { 'user': 'pebbles', 'age': 1 } + * }; + * + * // using the `_.property` callback shorthand + * _.mapValues(users, 'age'); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + */ +var mapValues = createObjectMapper(); + +module.exports = mapValues; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/merge.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/merge.js new file mode 100644 index 00000000..dc0b95ef --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/merge.js @@ -0,0 +1,54 @@ +var baseMerge = require('../internal/baseMerge'), + createAssigner = require('../internal/createAssigner'); + +/** + * Recursively merges own enumerable properties of the source object(s), that + * don't resolve to `undefined` into the destination object. Subsequent sources + * overwrite property assignments of previous sources. If `customizer` is + * provided it is invoked to produce the merged values of the destination and + * source properties. If `customizer` returns `undefined` merging is handled + * by the method instead. The `customizer` is bound to `thisArg` and invoked + * with five arguments: (objectValue, sourceValue, key, object, source). + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @param {Function} [customizer] The function to customize assigned values. + * @param {*} [thisArg] The `this` binding of `customizer`. + * @returns {Object} Returns `object`. + * @example + * + * var users = { + * 'data': [{ 'user': 'barney' }, { 'user': 'fred' }] + * }; + * + * var ages = { + * 'data': [{ 'age': 36 }, { 'age': 40 }] + * }; + * + * _.merge(users, ages); + * // => { 'data': [{ 'user': 'barney', 'age': 36 }, { 'user': 'fred', 'age': 40 }] } + * + * // using a customizer callback + * var object = { + * 'fruits': ['apple'], + * 'vegetables': ['beet'] + * }; + * + * var other = { + * 'fruits': ['banana'], + * 'vegetables': ['carrot'] + * }; + * + * _.merge(object, other, function(a, b) { + * if (_.isArray(a)) { + * return a.concat(b); + * } + * }); + * // => { 'fruits': ['apple', 'banana'], 'vegetables': ['beet', 'carrot'] } + */ +var merge = createAssigner(baseMerge); + +module.exports = merge; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/methods.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/methods.js new file mode 100644 index 00000000..8a304fee --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/methods.js @@ -0,0 +1 @@ +module.exports = require('./functions'); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/omit.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/omit.js new file mode 100644 index 00000000..fe3f4853 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/omit.js @@ -0,0 +1,47 @@ +var arrayMap = require('../internal/arrayMap'), + baseDifference = require('../internal/baseDifference'), + baseFlatten = require('../internal/baseFlatten'), + bindCallback = require('../internal/bindCallback'), + keysIn = require('./keysIn'), + pickByArray = require('../internal/pickByArray'), + pickByCallback = require('../internal/pickByCallback'), + restParam = require('../function/restParam'); + +/** + * The opposite of `_.pick`; this method creates an object composed of the + * own and inherited enumerable properties of `object` that are not omitted. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {Function|...(string|string[])} [predicate] The function invoked per + * iteration or property names to omit, specified as individual property + * names or arrays of property names. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'user': 'fred', 'age': 40 }; + * + * _.omit(object, 'age'); + * // => { 'user': 'fred' } + * + * _.omit(object, _.isNumber); + * // => { 'user': 'fred' } + */ +var omit = restParam(function(object, props) { + if (object == null) { + return {}; + } + if (typeof props[0] != 'function') { + var props = arrayMap(baseFlatten(props), String); + return pickByArray(object, baseDifference(keysIn(object), props)); + } + var predicate = bindCallback(props[0], props[1], 3); + return pickByCallback(object, function(value, key, object) { + return !predicate(value, key, object); + }); +}); + +module.exports = omit; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/pairs.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/pairs.js new file mode 100644 index 00000000..fd4644ce --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/pairs.js @@ -0,0 +1,33 @@ +var keys = require('./keys'), + toObject = require('../internal/toObject'); + +/** + * Creates a two dimensional array of the key-value pairs for `object`, + * e.g. `[[key1, value1], [key2, value2]]`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the new array of key-value pairs. + * @example + * + * _.pairs({ 'barney': 36, 'fred': 40 }); + * // => [['barney', 36], ['fred', 40]] (iteration order is not guaranteed) + */ +function pairs(object) { + object = toObject(object); + + var index = -1, + props = keys(object), + length = props.length, + result = Array(length); + + while (++index < length) { + var key = props[index]; + result[index] = [key, object[key]]; + } + return result; +} + +module.exports = pairs; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/pick.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/pick.js new file mode 100644 index 00000000..c880c319 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/pick.js @@ -0,0 +1,42 @@ +var baseFlatten = require('../internal/baseFlatten'), + bindCallback = require('../internal/bindCallback'), + pickByArray = require('../internal/pickByArray'), + pickByCallback = require('../internal/pickByCallback'), + restParam = require('../function/restParam'); + +/** + * Creates an object composed of the picked `object` properties. Property + * names may be specified as individual arguments or as arrays of property + * names. If `predicate` is provided it is invoked for each property of `object` + * picking the properties `predicate` returns truthy for. The predicate is + * bound to `thisArg` and invoked with three arguments: (value, key, object). + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {Function|...(string|string[])} [predicate] The function invoked per + * iteration or property names to pick, specified as individual property + * names or arrays of property names. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'user': 'fred', 'age': 40 }; + * + * _.pick(object, 'user'); + * // => { 'user': 'fred' } + * + * _.pick(object, _.isString); + * // => { 'user': 'fred' } + */ +var pick = restParam(function(object, props) { + if (object == null) { + return {}; + } + return typeof props[0] == 'function' + ? pickByCallback(object, bindCallback(props[0], props[1], 3)) + : pickByArray(object, baseFlatten(props)); +}); + +module.exports = pick; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/result.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/result.js new file mode 100644 index 00000000..05ca6df6 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/result.js @@ -0,0 +1,49 @@ +var baseGet = require('../internal/baseGet'), + baseSlice = require('../internal/baseSlice'), + isFunction = require('../lang/isFunction'), + isKey = require('../internal/isKey'), + last = require('../array/last'), + toPath = require('../internal/toPath'); + +/** + * This method is like `_.get` except that if the resolved value is a function + * it is invoked with the `this` binding of its parent object and its result + * is returned. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to resolve. + * @param {*} [defaultValue] The value returned if the resolved value is `undefined`. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] }; + * + * _.result(object, 'a[0].b.c1'); + * // => 3 + * + * _.result(object, 'a[0].b.c2'); + * // => 4 + * + * _.result(object, 'a.b.c', 'default'); + * // => 'default' + * + * _.result(object, 'a.b.c', _.constant('default')); + * // => 'default' + */ +function result(object, path, defaultValue) { + var result = object == null ? undefined : object[path]; + if (result === undefined) { + if (object != null && !isKey(path, object)) { + path = toPath(path); + object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1)); + result = object == null ? undefined : object[last(path)]; + } + result = result === undefined ? defaultValue : result; + } + return isFunction(result) ? result.call(object) : result; +} + +module.exports = result; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/set.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/set.js new file mode 100644 index 00000000..423faab8 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/set.js @@ -0,0 +1,55 @@ +var isIndex = require('../internal/isIndex'), + isKey = require('../internal/isKey'), + isObject = require('../lang/isObject'), + toPath = require('../internal/toPath'); + +/** + * Sets the property value of `path` on `object`. If a portion of `path` + * does not exist it is created. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to augment. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @returns {Object} Returns `object`. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.set(object, 'a[0].b.c', 4); + * console.log(object.a[0].b.c); + * // => 4 + * + * _.set(object, 'x[0].y.z', 5); + * console.log(object.x[0].y.z); + * // => 5 + */ +function set(object, path, value) { + if (object == null) { + return object; + } + var pathKey = (path + ''); + path = (object[pathKey] != null || isKey(path, object)) ? [pathKey] : toPath(path); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = path[index]; + if (isObject(nested)) { + if (index == lastIndex) { + nested[key] = value; + } else if (nested[key] == null) { + nested[key] = isIndex(path[index + 1]) ? [] : {}; + } + } + nested = nested[key]; + } + return object; +} + +module.exports = set; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/transform.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/transform.js new file mode 100644 index 00000000..9a814b14 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/transform.js @@ -0,0 +1,61 @@ +var arrayEach = require('../internal/arrayEach'), + baseCallback = require('../internal/baseCallback'), + baseCreate = require('../internal/baseCreate'), + baseForOwn = require('../internal/baseForOwn'), + isArray = require('../lang/isArray'), + isFunction = require('../lang/isFunction'), + isObject = require('../lang/isObject'), + isTypedArray = require('../lang/isTypedArray'); + +/** + * An alternative to `_.reduce`; this method transforms `object` to a new + * `accumulator` object which is the result of running each of its own enumerable + * properties through `iteratee`, with each invocation potentially mutating + * the `accumulator` object. The `iteratee` is bound to `thisArg` and invoked + * with four arguments: (accumulator, value, key, object). Iteratee functions + * may exit iteration early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @category Object + * @param {Array|Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The custom accumulator value. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {*} Returns the accumulated value. + * @example + * + * _.transform([2, 3, 4], function(result, n) { + * result.push(n *= n); + * return n % 2 == 0; + * }); + * // => [4, 9] + * + * _.transform({ 'a': 1, 'b': 2 }, function(result, n, key) { + * result[key] = n * 3; + * }); + * // => { 'a': 3, 'b': 6 } + */ +function transform(object, iteratee, accumulator, thisArg) { + var isArr = isArray(object) || isTypedArray(object); + iteratee = baseCallback(iteratee, thisArg, 4); + + if (accumulator == null) { + if (isArr || isObject(object)) { + var Ctor = object.constructor; + if (isArr) { + accumulator = isArray(object) ? new Ctor : []; + } else { + accumulator = baseCreate(isFunction(Ctor) ? Ctor.prototype : undefined); + } + } else { + accumulator = {}; + } + } + (isArr ? arrayEach : baseForOwn)(object, function(value, index, object) { + return iteratee(accumulator, value, index, object); + }); + return accumulator; +} + +module.exports = transform; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/values.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/values.js new file mode 100644 index 00000000..01715150 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/values.js @@ -0,0 +1,33 @@ +var baseValues = require('../internal/baseValues'), + keys = require('./keys'); + +/** + * Creates an array of the own enumerable property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ +function values(object) { + return baseValues(object, keys(object)); +} + +module.exports = values; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/valuesIn.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/valuesIn.js new file mode 100644 index 00000000..5f067c06 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/object/valuesIn.js @@ -0,0 +1,31 @@ +var baseValues = require('../internal/baseValues'), + keysIn = require('./keysIn'); + +/** + * Creates an array of the own and inherited enumerable property values + * of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.valuesIn(new Foo); + * // => [1, 2, 3] (iteration order is not guaranteed) + */ +function valuesIn(object) { + return baseValues(object, keysIn(object)); +} + +module.exports = valuesIn; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/package.json b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/package.json new file mode 100644 index 00000000..a883c4ec --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/package.json @@ -0,0 +1,94 @@ +{ + "name": "lodash", + "version": "3.10.0", + "description": "The modern build of lodash modular utilities.", + "homepage": "https://lodash.com/", + "icon": "https://lodash.com/icon.svg", + "license": "MIT", + "main": "index.js", + "keywords": [ + "modules", + "stdlib", + "util" + ], + "author": { + "name": "John-David Dalton", + "email": "john.david.dalton@gmail.com", + "url": "http://allyoucanleet.com/" + }, + "contributors": [ + { + "name": "John-David Dalton", + "email": "john.david.dalton@gmail.com", + "url": "http://allyoucanleet.com/" + }, + { + "name": "Benjamin Tan", + "email": "demoneaux@gmail.com", + "url": "https://d10.github.io/" + }, + { + "name": "Blaine Bublitz", + "email": "blaine@iceddev.com", + "url": "http://www.iceddev.com/" + }, + { + "name": "Kit Cambridge", + "email": "github@kitcambridge.be", + "url": "http://kitcambridge.be/" + }, + { + "name": "Mathias Bynens", + "email": "mathias@qiwi.be", + "url": "https://mathiasbynens.be/" + } + ], + "repository": { + "type": "git", + "url": "git+https://github.com/lodash/lodash.git" + }, + "scripts": { + "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\"" + }, + "bugs": { + "url": "https://github.com/lodash/lodash/issues" + }, + "_id": "lodash@3.10.0", + "_shasum": "93d51c672828a4416a12af57220ba8a8737e2fbb", + "_from": "lodash@>=3.2.0 <4.0.0", + "_npmVersion": "2.12.0", + "_nodeVersion": "0.12.5", + "_npmUser": { + "name": "jdalton", + "email": "john.david.dalton@gmail.com" + }, + "maintainers": [ + { + "name": "jdalton", + "email": "john.david.dalton@gmail.com" + }, + { + "name": "mathias", + "email": "mathias@qiwi.be" + }, + { + "name": "phated", + "email": "blaine@iceddev.com" + }, + { + "name": "kitcambridge", + "email": "github@kitcambridge.be" + }, + { + "name": "d10", + "email": "demoneaux@gmail.com" + } + ], + "dist": { + "shasum": "93d51c672828a4416a12af57220ba8a8737e2fbb", + "tarball": "http://registry.npmjs.org/lodash/-/lodash-3.10.0.tgz" + }, + "directories": {}, + "_resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.0.tgz", + "readme": "ERROR: No README data found!" +} diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string.js new file mode 100644 index 00000000..f7779453 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string.js @@ -0,0 +1,25 @@ +module.exports = { + 'camelCase': require('./string/camelCase'), + 'capitalize': require('./string/capitalize'), + 'deburr': require('./string/deburr'), + 'endsWith': require('./string/endsWith'), + 'escape': require('./string/escape'), + 'escapeRegExp': require('./string/escapeRegExp'), + 'kebabCase': require('./string/kebabCase'), + 'pad': require('./string/pad'), + 'padLeft': require('./string/padLeft'), + 'padRight': require('./string/padRight'), + 'parseInt': require('./string/parseInt'), + 'repeat': require('./string/repeat'), + 'snakeCase': require('./string/snakeCase'), + 'startCase': require('./string/startCase'), + 'startsWith': require('./string/startsWith'), + 'template': require('./string/template'), + 'templateSettings': require('./string/templateSettings'), + 'trim': require('./string/trim'), + 'trimLeft': require('./string/trimLeft'), + 'trimRight': require('./string/trimRight'), + 'trunc': require('./string/trunc'), + 'unescape': require('./string/unescape'), + 'words': require('./string/words') +}; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string/camelCase.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string/camelCase.js new file mode 100644 index 00000000..2d438f4a --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string/camelCase.js @@ -0,0 +1,27 @@ +var createCompounder = require('../internal/createCompounder'); + +/** + * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase). + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the camel cased string. + * @example + * + * _.camelCase('Foo Bar'); + * // => 'fooBar' + * + * _.camelCase('--foo-bar'); + * // => 'fooBar' + * + * _.camelCase('__foo_bar__'); + * // => 'fooBar' + */ +var camelCase = createCompounder(function(result, word, index) { + word = word.toLowerCase(); + return result + (index ? (word.charAt(0).toUpperCase() + word.slice(1)) : word); +}); + +module.exports = camelCase; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string/capitalize.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string/capitalize.js new file mode 100644 index 00000000..f9222dc2 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string/capitalize.js @@ -0,0 +1,21 @@ +var baseToString = require('../internal/baseToString'); + +/** + * Capitalizes the first character of `string`. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to capitalize. + * @returns {string} Returns the capitalized string. + * @example + * + * _.capitalize('fred'); + * // => 'Fred' + */ +function capitalize(string) { + string = baseToString(string); + return string && (string.charAt(0).toUpperCase() + string.slice(1)); +} + +module.exports = capitalize; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string/deburr.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string/deburr.js new file mode 100644 index 00000000..0bd03e62 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string/deburr.js @@ -0,0 +1,29 @@ +var baseToString = require('../internal/baseToString'), + deburrLetter = require('../internal/deburrLetter'); + +/** Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). */ +var reComboMark = /[\u0300-\u036f\ufe20-\ufe23]/g; + +/** Used to match latin-1 supplementary letters (excluding mathematical operators). */ +var reLatin1 = /[\xc0-\xd6\xd8-\xde\xdf-\xf6\xf8-\xff]/g; + +/** + * Deburrs `string` by converting [latin-1 supplementary letters](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table) + * to basic latin letters and removing [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to deburr. + * @returns {string} Returns the deburred string. + * @example + * + * _.deburr('déjà vu'); + * // => 'deja vu' + */ +function deburr(string) { + string = baseToString(string); + return string && string.replace(reLatin1, deburrLetter).replace(reComboMark, ''); +} + +module.exports = deburr; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string/endsWith.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string/endsWith.js new file mode 100644 index 00000000..26821e26 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string/endsWith.js @@ -0,0 +1,40 @@ +var baseToString = require('../internal/baseToString'); + +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeMin = Math.min; + +/** + * Checks if `string` ends with the given target string. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to search. + * @param {string} [target] The string to search for. + * @param {number} [position=string.length] The position to search from. + * @returns {boolean} Returns `true` if `string` ends with `target`, else `false`. + * @example + * + * _.endsWith('abc', 'c'); + * // => true + * + * _.endsWith('abc', 'b'); + * // => false + * + * _.endsWith('abc', 'b', 2); + * // => true + */ +function endsWith(string, target, position) { + string = baseToString(string); + target = (target + ''); + + var length = string.length; + position = position === undefined + ? length + : nativeMin(position < 0 ? 0 : (+position || 0), length); + + position -= target.length; + return position >= 0 && string.indexOf(target, position) == position; +} + +module.exports = endsWith; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string/escape.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string/escape.js new file mode 100644 index 00000000..cd08a5dd --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string/escape.js @@ -0,0 +1,48 @@ +var baseToString = require('../internal/baseToString'), + escapeHtmlChar = require('../internal/escapeHtmlChar'); + +/** Used to match HTML entities and HTML characters. */ +var reUnescapedHtml = /[&<>"'`]/g, + reHasUnescapedHtml = RegExp(reUnescapedHtml.source); + +/** + * Converts the characters "&", "<", ">", '"', "'", and "\`", in `string` to + * their corresponding HTML entities. + * + * **Note:** No other characters are escaped. To escape additional characters + * use a third-party library like [_he_](https://mths.be/he). + * + * Though the ">" character is escaped for symmetry, characters like + * ">" and "/" don't need escaping in HTML and have no special meaning + * unless they're part of a tag or unquoted attribute value. + * See [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands) + * (under "semi-related fun fact") for more details. + * + * Backticks are escaped because in Internet Explorer < 9, they can break out + * of attribute values or HTML comments. See [#59](https://html5sec.org/#59), + * [#102](https://html5sec.org/#102), [#108](https://html5sec.org/#108), and + * [#133](https://html5sec.org/#133) of the [HTML5 Security Cheatsheet](https://html5sec.org/) + * for more details. + * + * When working with HTML you should always [quote attribute values](http://wonko.com/post/html-escaping) + * to reduce XSS vectors. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to escape. + * @returns {string} Returns the escaped string. + * @example + * + * _.escape('fred, barney, & pebbles'); + * // => 'fred, barney, & pebbles' + */ +function escape(string) { + // Reset `lastIndex` because in IE < 9 `String#replace` does not. + string = baseToString(string); + return (string && reHasUnescapedHtml.test(string)) + ? string.replace(reUnescapedHtml, escapeHtmlChar) + : string; +} + +module.exports = escape; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string/escapeRegExp.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string/escapeRegExp.js new file mode 100644 index 00000000..176137ab --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string/escapeRegExp.js @@ -0,0 +1,32 @@ +var baseToString = require('../internal/baseToString'), + escapeRegExpChar = require('../internal/escapeRegExpChar'); + +/** + * Used to match `RegExp` [syntax characters](http://ecma-international.org/ecma-262/6.0/#sec-patterns) + * and those outlined by [`EscapeRegExpPattern`](http://ecma-international.org/ecma-262/6.0/#sec-escaperegexppattern). + */ +var reRegExpChars = /^[:!,]|[\\^$.*+?()[\]{}|\/]|(^[0-9a-fA-Fnrtuvx])|([\n\r\u2028\u2029])/g, + reHasRegExpChars = RegExp(reRegExpChars.source); + +/** + * Escapes the `RegExp` special characters "\", "/", "^", "$", ".", "|", "?", + * "*", "+", "(", ")", "[", "]", "{" and "}" in `string`. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to escape. + * @returns {string} Returns the escaped string. + * @example + * + * _.escapeRegExp('[lodash](https://lodash.com/)'); + * // => '\[lodash\]\(https:\/\/lodash\.com\/\)' + */ +function escapeRegExp(string) { + string = baseToString(string); + return (string && reHasRegExpChars.test(string)) + ? string.replace(reRegExpChars, escapeRegExpChar) + : (string || '(?:)'); +} + +module.exports = escapeRegExp; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string/kebabCase.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string/kebabCase.js new file mode 100644 index 00000000..d29c2f90 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string/kebabCase.js @@ -0,0 +1,26 @@ +var createCompounder = require('../internal/createCompounder'); + +/** + * Converts `string` to [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles). + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the kebab cased string. + * @example + * + * _.kebabCase('Foo Bar'); + * // => 'foo-bar' + * + * _.kebabCase('fooBar'); + * // => 'foo-bar' + * + * _.kebabCase('__foo_bar__'); + * // => 'foo-bar' + */ +var kebabCase = createCompounder(function(result, word, index) { + return result + (index ? '-' : '') + word.toLowerCase(); +}); + +module.exports = kebabCase; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string/pad.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string/pad.js new file mode 100644 index 00000000..60e523b9 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string/pad.js @@ -0,0 +1,47 @@ +var baseToString = require('../internal/baseToString'), + createPadding = require('../internal/createPadding'); + +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeCeil = Math.ceil, + nativeFloor = Math.floor, + nativeIsFinite = global.isFinite; + +/** + * Pads `string` on the left and right sides if it's shorter than `length`. + * Padding characters are truncated if they can't be evenly divided by `length`. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to pad. + * @param {number} [length=0] The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padded string. + * @example + * + * _.pad('abc', 8); + * // => ' abc ' + * + * _.pad('abc', 8, '_-'); + * // => '_-abc_-_' + * + * _.pad('abc', 3); + * // => 'abc' + */ +function pad(string, length, chars) { + string = baseToString(string); + length = +length; + + var strLength = string.length; + if (strLength >= length || !nativeIsFinite(length)) { + return string; + } + var mid = (length - strLength) / 2, + leftLength = nativeFloor(mid), + rightLength = nativeCeil(mid); + + chars = createPadding('', rightLength, chars); + return chars.slice(0, leftLength) + string + chars; +} + +module.exports = pad; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string/padLeft.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string/padLeft.js new file mode 100644 index 00000000..bb0c94d0 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string/padLeft.js @@ -0,0 +1,27 @@ +var createPadDir = require('../internal/createPadDir'); + +/** + * Pads `string` on the left side if it's shorter than `length`. Padding + * characters are truncated if they exceed `length`. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to pad. + * @param {number} [length=0] The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padded string. + * @example + * + * _.padLeft('abc', 6); + * // => ' abc' + * + * _.padLeft('abc', 6, '_-'); + * // => '_-_abc' + * + * _.padLeft('abc', 3); + * // => 'abc' + */ +var padLeft = createPadDir(); + +module.exports = padLeft; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string/padRight.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string/padRight.js new file mode 100644 index 00000000..dc12f559 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string/padRight.js @@ -0,0 +1,27 @@ +var createPadDir = require('../internal/createPadDir'); + +/** + * Pads `string` on the right side if it's shorter than `length`. Padding + * characters are truncated if they exceed `length`. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to pad. + * @param {number} [length=0] The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padded string. + * @example + * + * _.padRight('abc', 6); + * // => 'abc ' + * + * _.padRight('abc', 6, '_-'); + * // => 'abc_-_' + * + * _.padRight('abc', 3); + * // => 'abc' + */ +var padRight = createPadDir(true); + +module.exports = padRight; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string/parseInt.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string/parseInt.js new file mode 100644 index 00000000..f457711e --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string/parseInt.js @@ -0,0 +1,46 @@ +var isIterateeCall = require('../internal/isIterateeCall'), + trim = require('./trim'); + +/** Used to detect hexadecimal string values. */ +var reHasHexPrefix = /^0[xX]/; + +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeParseInt = global.parseInt; + +/** + * Converts `string` to an integer of the specified radix. If `radix` is + * `undefined` or `0`, a `radix` of `10` is used unless `value` is a hexadecimal, + * in which case a `radix` of `16` is used. + * + * **Note:** This method aligns with the [ES5 implementation](https://es5.github.io/#E) + * of `parseInt`. + * + * @static + * @memberOf _ + * @category String + * @param {string} string The string to convert. + * @param {number} [radix] The radix to interpret `value` by. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {number} Returns the converted integer. + * @example + * + * _.parseInt('08'); + * // => 8 + * + * _.map(['6', '08', '10'], _.parseInt); + * // => [6, 8, 10] + */ +function parseInt(string, radix, guard) { + // Firefox < 21 and Opera < 15 follow ES3 for `parseInt`. + // Chrome fails to trim leading <BOM> whitespace characters. + // See https://code.google.com/p/v8/issues/detail?id=3109 for more details. + if (guard ? isIterateeCall(string, radix, guard) : radix == null) { + radix = 0; + } else if (radix) { + radix = +radix; + } + string = trim(string); + return nativeParseInt(string, radix || (reHasHexPrefix.test(string) ? 16 : 10)); +} + +module.exports = parseInt; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string/repeat.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string/repeat.js new file mode 100644 index 00000000..2902123e --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string/repeat.js @@ -0,0 +1,47 @@ +var baseToString = require('../internal/baseToString'); + +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeFloor = Math.floor, + nativeIsFinite = global.isFinite; + +/** + * Repeats the given string `n` times. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to repeat. + * @param {number} [n=0] The number of times to repeat the string. + * @returns {string} Returns the repeated string. + * @example + * + * _.repeat('*', 3); + * // => '***' + * + * _.repeat('abc', 2); + * // => 'abcabc' + * + * _.repeat('abc', 0); + * // => '' + */ +function repeat(string, n) { + var result = ''; + string = baseToString(string); + n = +n; + if (n < 1 || !string || !nativeIsFinite(n)) { + return result; + } + // Leverage the exponentiation by squaring algorithm for a faster repeat. + // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details. + do { + if (n % 2) { + result += string; + } + n = nativeFloor(n / 2); + string += string; + } while (n); + + return result; +} + +module.exports = repeat; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string/snakeCase.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string/snakeCase.js new file mode 100644 index 00000000..c9ebffd9 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string/snakeCase.js @@ -0,0 +1,26 @@ +var createCompounder = require('../internal/createCompounder'); + +/** + * Converts `string` to [snake case](https://en.wikipedia.org/wiki/Snake_case). + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the snake cased string. + * @example + * + * _.snakeCase('Foo Bar'); + * // => 'foo_bar' + * + * _.snakeCase('fooBar'); + * // => 'foo_bar' + * + * _.snakeCase('--foo-bar'); + * // => 'foo_bar' + */ +var snakeCase = createCompounder(function(result, word, index) { + return result + (index ? '_' : '') + word.toLowerCase(); +}); + +module.exports = snakeCase; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string/startCase.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string/startCase.js new file mode 100644 index 00000000..740d48a5 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string/startCase.js @@ -0,0 +1,26 @@ +var createCompounder = require('../internal/createCompounder'); + +/** + * Converts `string` to [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage). + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the start cased string. + * @example + * + * _.startCase('--foo-bar'); + * // => 'Foo Bar' + * + * _.startCase('fooBar'); + * // => 'Foo Bar' + * + * _.startCase('__foo_bar__'); + * // => 'Foo Bar' + */ +var startCase = createCompounder(function(result, word, index) { + return result + (index ? ' ' : '') + (word.charAt(0).toUpperCase() + word.slice(1)); +}); + +module.exports = startCase; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string/startsWith.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string/startsWith.js new file mode 100644 index 00000000..65fae2a4 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string/startsWith.js @@ -0,0 +1,36 @@ +var baseToString = require('../internal/baseToString'); + +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeMin = Math.min; + +/** + * Checks if `string` starts with the given target string. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to search. + * @param {string} [target] The string to search for. + * @param {number} [position=0] The position to search from. + * @returns {boolean} Returns `true` if `string` starts with `target`, else `false`. + * @example + * + * _.startsWith('abc', 'a'); + * // => true + * + * _.startsWith('abc', 'b'); + * // => false + * + * _.startsWith('abc', 'b', 1); + * // => true + */ +function startsWith(string, target, position) { + string = baseToString(string); + position = position == null + ? 0 + : nativeMin(position < 0 ? 0 : (+position || 0), string.length); + + return string.lastIndexOf(target, position) == position; +} + +module.exports = startsWith; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string/template.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string/template.js new file mode 100644 index 00000000..e75e992b --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string/template.js @@ -0,0 +1,226 @@ +var assignOwnDefaults = require('../internal/assignOwnDefaults'), + assignWith = require('../internal/assignWith'), + attempt = require('../utility/attempt'), + baseAssign = require('../internal/baseAssign'), + baseToString = require('../internal/baseToString'), + baseValues = require('../internal/baseValues'), + escapeStringChar = require('../internal/escapeStringChar'), + isError = require('../lang/isError'), + isIterateeCall = require('../internal/isIterateeCall'), + keys = require('../object/keys'), + reInterpolate = require('../internal/reInterpolate'), + templateSettings = require('./templateSettings'); + +/** Used to match empty string literals in compiled template source. */ +var reEmptyStringLeading = /\b__p \+= '';/g, + reEmptyStringMiddle = /\b(__p \+=) '' \+/g, + reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g; + +/** Used to match [ES template delimiters](http://ecma-international.org/ecma-262/6.0/#sec-template-literal-lexical-components). */ +var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g; + +/** Used to ensure capturing order of template delimiters. */ +var reNoMatch = /($^)/; + +/** Used to match unescaped characters in compiled string literals. */ +var reUnescapedString = /['\n\r\u2028\u2029\\]/g; + +/** + * Creates a compiled template function that can interpolate data properties + * in "interpolate" delimiters, HTML-escape interpolated data properties in + * "escape" delimiters, and execute JavaScript in "evaluate" delimiters. Data + * properties may be accessed as free variables in the template. If a setting + * object is provided it takes precedence over `_.templateSettings` values. + * + * **Note:** In the development build `_.template` utilizes + * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl) + * for easier debugging. + * + * For more information on precompiling templates see + * [lodash's custom builds documentation](https://lodash.com/custom-builds). + * + * For more information on Chrome extension sandboxes see + * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval). + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The template string. + * @param {Object} [options] The options object. + * @param {RegExp} [options.escape] The HTML "escape" delimiter. + * @param {RegExp} [options.evaluate] The "evaluate" delimiter. + * @param {Object} [options.imports] An object to import into the template as free variables. + * @param {RegExp} [options.interpolate] The "interpolate" delimiter. + * @param {string} [options.sourceURL] The sourceURL of the template's compiled source. + * @param {string} [options.variable] The data object variable name. + * @param- {Object} [otherOptions] Enables the legacy `options` param signature. + * @returns {Function} Returns the compiled template function. + * @example + * + * // using the "interpolate" delimiter to create a compiled template + * var compiled = _.template('hello <%= user %>!'); + * compiled({ 'user': 'fred' }); + * // => 'hello fred!' + * + * // using the HTML "escape" delimiter to escape data property values + * var compiled = _.template('<b><%- value %></b>'); + * compiled({ 'value': '<script>' }); + * // => '<b><script></b>' + * + * // using the "evaluate" delimiter to execute JavaScript and generate HTML + * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>'); + * compiled({ 'users': ['fred', 'barney'] }); + * // => '<li>fred</li><li>barney</li>' + * + * // using the internal `print` function in "evaluate" delimiters + * var compiled = _.template('<% print("hello " + user); %>!'); + * compiled({ 'user': 'barney' }); + * // => 'hello barney!' + * + * // using the ES delimiter as an alternative to the default "interpolate" delimiter + * var compiled = _.template('hello ${ user }!'); + * compiled({ 'user': 'pebbles' }); + * // => 'hello pebbles!' + * + * // using custom template delimiters + * _.templateSettings.interpolate = /{{([\s\S]+?)}}/g; + * var compiled = _.template('hello {{ user }}!'); + * compiled({ 'user': 'mustache' }); + * // => 'hello mustache!' + * + * // using backslashes to treat delimiters as plain text + * var compiled = _.template('<%= "\\<%- value %\\>" %>'); + * compiled({ 'value': 'ignored' }); + * // => '<%- value %>' + * + * // using the `imports` option to import `jQuery` as `jq` + * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>'; + * var compiled = _.template(text, { 'imports': { 'jq': jQuery } }); + * compiled({ 'users': ['fred', 'barney'] }); + * // => '<li>fred</li><li>barney</li>' + * + * // using the `sourceURL` option to specify a custom sourceURL for the template + * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' }); + * compiled(data); + * // => find the source of "greeting.jst" under the Sources tab or Resources panel of the web inspector + * + * // using the `variable` option to ensure a with-statement isn't used in the compiled template + * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' }); + * compiled.source; + * // => function(data) { + * // var __t, __p = ''; + * // __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!'; + * // return __p; + * // } + * + * // using the `source` property to inline compiled templates for meaningful + * // line numbers in error messages and a stack trace + * fs.writeFileSync(path.join(cwd, 'jst.js'), '\ + * var JST = {\ + * "main": ' + _.template(mainText).source + '\ + * };\ + * '); + */ +function template(string, options, otherOptions) { + // Based on John Resig's `tmpl` implementation (http://ejohn.org/blog/javascript-micro-templating/) + // and Laura Doktorova's doT.js (https://github.com/olado/doT). + var settings = templateSettings.imports._.templateSettings || templateSettings; + + if (otherOptions && isIterateeCall(string, options, otherOptions)) { + options = otherOptions = undefined; + } + string = baseToString(string); + options = assignWith(baseAssign({}, otherOptions || options), settings, assignOwnDefaults); + + var imports = assignWith(baseAssign({}, options.imports), settings.imports, assignOwnDefaults), + importsKeys = keys(imports), + importsValues = baseValues(imports, importsKeys); + + var isEscaping, + isEvaluating, + index = 0, + interpolate = options.interpolate || reNoMatch, + source = "__p += '"; + + // Compile the regexp to match each delimiter. + var reDelimiters = RegExp( + (options.escape || reNoMatch).source + '|' + + interpolate.source + '|' + + (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' + + (options.evaluate || reNoMatch).source + '|$' + , 'g'); + + // Use a sourceURL for easier debugging. + var sourceURL = 'sourceURL' in options ? '//# sourceURL=' + options.sourceURL + '\n' : ''; + + string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) { + interpolateValue || (interpolateValue = esTemplateValue); + + // Escape characters that can't be included in string literals. + source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar); + + // Replace delimiters with snippets. + if (escapeValue) { + isEscaping = true; + source += "' +\n__e(" + escapeValue + ") +\n'"; + } + if (evaluateValue) { + isEvaluating = true; + source += "';\n" + evaluateValue + ";\n__p += '"; + } + if (interpolateValue) { + source += "' +\n((__t = (" + interpolateValue + ")) == null ? '' : __t) +\n'"; + } + index = offset + match.length; + + // The JS engine embedded in Adobe products requires returning the `match` + // string in order to produce the correct `offset` value. + return match; + }); + + source += "';\n"; + + // If `variable` is not specified wrap a with-statement around the generated + // code to add the data object to the top of the scope chain. + var variable = options.variable; + if (!variable) { + source = 'with (obj) {\n' + source + '\n}\n'; + } + // Cleanup code by stripping empty strings. + source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source) + .replace(reEmptyStringMiddle, '$1') + .replace(reEmptyStringTrailing, '$1;'); + + // Frame code as the function body. + source = 'function(' + (variable || 'obj') + ') {\n' + + (variable + ? '' + : 'obj || (obj = {});\n' + ) + + "var __t, __p = ''" + + (isEscaping + ? ', __e = _.escape' + : '' + ) + + (isEvaluating + ? ', __j = Array.prototype.join;\n' + + "function print() { __p += __j.call(arguments, '') }\n" + : ';\n' + ) + + source + + 'return __p\n}'; + + var result = attempt(function() { + return Function(importsKeys, sourceURL + 'return ' + source).apply(undefined, importsValues); + }); + + // Provide the compiled function's source by its `toString` method or + // the `source` property as a convenience for inlining compiled templates. + result.source = source; + if (isError(result)) { + throw result; + } + return result; +} + +module.exports = template; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string/templateSettings.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string/templateSettings.js new file mode 100644 index 00000000..cdcef9ba --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string/templateSettings.js @@ -0,0 +1,67 @@ +var escape = require('./escape'), + reEscape = require('../internal/reEscape'), + reEvaluate = require('../internal/reEvaluate'), + reInterpolate = require('../internal/reInterpolate'); + +/** + * By default, the template delimiters used by lodash are like those in + * embedded Ruby (ERB). Change the following template settings to use + * alternative delimiters. + * + * @static + * @memberOf _ + * @type Object + */ +var templateSettings = { + + /** + * Used to detect `data` property values to be HTML-escaped. + * + * @memberOf _.templateSettings + * @type RegExp + */ + 'escape': reEscape, + + /** + * Used to detect code to be evaluated. + * + * @memberOf _.templateSettings + * @type RegExp + */ + 'evaluate': reEvaluate, + + /** + * Used to detect `data` property values to inject. + * + * @memberOf _.templateSettings + * @type RegExp + */ + 'interpolate': reInterpolate, + + /** + * Used to reference the data object in the template text. + * + * @memberOf _.templateSettings + * @type string + */ + 'variable': '', + + /** + * Used to import variables into the compiled template. + * + * @memberOf _.templateSettings + * @type Object + */ + 'imports': { + + /** + * A reference to the `lodash` function. + * + * @memberOf _.templateSettings.imports + * @type Function + */ + '_': { 'escape': escape } + } +}; + +module.exports = templateSettings; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string/trim.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string/trim.js new file mode 100644 index 00000000..22cd38a5 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string/trim.js @@ -0,0 +1,42 @@ +var baseToString = require('../internal/baseToString'), + charsLeftIndex = require('../internal/charsLeftIndex'), + charsRightIndex = require('../internal/charsRightIndex'), + isIterateeCall = require('../internal/isIterateeCall'), + trimmedLeftIndex = require('../internal/trimmedLeftIndex'), + trimmedRightIndex = require('../internal/trimmedRightIndex'); + +/** + * Removes leading and trailing whitespace or specified characters from `string`. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to trim. + * @param {string} [chars=whitespace] The characters to trim. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {string} Returns the trimmed string. + * @example + * + * _.trim(' abc '); + * // => 'abc' + * + * _.trim('-_-abc-_-', '_-'); + * // => 'abc' + * + * _.map([' foo ', ' bar '], _.trim); + * // => ['foo', 'bar'] + */ +function trim(string, chars, guard) { + var value = string; + string = baseToString(string); + if (!string) { + return string; + } + if (guard ? isIterateeCall(value, chars, guard) : chars == null) { + return string.slice(trimmedLeftIndex(string), trimmedRightIndex(string) + 1); + } + chars = (chars + ''); + return string.slice(charsLeftIndex(string, chars), charsRightIndex(string, chars) + 1); +} + +module.exports = trim; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string/trimLeft.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string/trimLeft.js new file mode 100644 index 00000000..29299677 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string/trimLeft.js @@ -0,0 +1,36 @@ +var baseToString = require('../internal/baseToString'), + charsLeftIndex = require('../internal/charsLeftIndex'), + isIterateeCall = require('../internal/isIterateeCall'), + trimmedLeftIndex = require('../internal/trimmedLeftIndex'); + +/** + * Removes leading whitespace or specified characters from `string`. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to trim. + * @param {string} [chars=whitespace] The characters to trim. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {string} Returns the trimmed string. + * @example + * + * _.trimLeft(' abc '); + * // => 'abc ' + * + * _.trimLeft('-_-abc-_-', '_-'); + * // => 'abc-_-' + */ +function trimLeft(string, chars, guard) { + var value = string; + string = baseToString(string); + if (!string) { + return string; + } + if (guard ? isIterateeCall(value, chars, guard) : chars == null) { + return string.slice(trimmedLeftIndex(string)); + } + return string.slice(charsLeftIndex(string, (chars + ''))); +} + +module.exports = trimLeft; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string/trimRight.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string/trimRight.js new file mode 100644 index 00000000..0f9be71f --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string/trimRight.js @@ -0,0 +1,36 @@ +var baseToString = require('../internal/baseToString'), + charsRightIndex = require('../internal/charsRightIndex'), + isIterateeCall = require('../internal/isIterateeCall'), + trimmedRightIndex = require('../internal/trimmedRightIndex'); + +/** + * Removes trailing whitespace or specified characters from `string`. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to trim. + * @param {string} [chars=whitespace] The characters to trim. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {string} Returns the trimmed string. + * @example + * + * _.trimRight(' abc '); + * // => ' abc' + * + * _.trimRight('-_-abc-_-', '_-'); + * // => '-_-abc' + */ +function trimRight(string, chars, guard) { + var value = string; + string = baseToString(string); + if (!string) { + return string; + } + if (guard ? isIterateeCall(value, chars, guard) : chars == null) { + return string.slice(0, trimmedRightIndex(string) + 1); + } + return string.slice(0, charsRightIndex(string, (chars + '')) + 1); +} + +module.exports = trimRight; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string/trunc.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string/trunc.js new file mode 100644 index 00000000..29e19399 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string/trunc.js @@ -0,0 +1,105 @@ +var baseToString = require('../internal/baseToString'), + isIterateeCall = require('../internal/isIterateeCall'), + isObject = require('../lang/isObject'), + isRegExp = require('../lang/isRegExp'); + +/** Used as default options for `_.trunc`. */ +var DEFAULT_TRUNC_LENGTH = 30, + DEFAULT_TRUNC_OMISSION = '...'; + +/** Used to match `RegExp` flags from their coerced string values. */ +var reFlags = /\w*$/; + +/** + * Truncates `string` if it's longer than the given maximum string length. + * The last characters of the truncated string are replaced with the omission + * string which defaults to "...". + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to truncate. + * @param {Object|number} [options] The options object or maximum string length. + * @param {number} [options.length=30] The maximum string length. + * @param {string} [options.omission='...'] The string to indicate text is omitted. + * @param {RegExp|string} [options.separator] The separator pattern to truncate to. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {string} Returns the truncated string. + * @example + * + * _.trunc('hi-diddly-ho there, neighborino'); + * // => 'hi-diddly-ho there, neighbo...' + * + * _.trunc('hi-diddly-ho there, neighborino', 24); + * // => 'hi-diddly-ho there, n...' + * + * _.trunc('hi-diddly-ho there, neighborino', { + * 'length': 24, + * 'separator': ' ' + * }); + * // => 'hi-diddly-ho there,...' + * + * _.trunc('hi-diddly-ho there, neighborino', { + * 'length': 24, + * 'separator': /,? +/ + * }); + * // => 'hi-diddly-ho there...' + * + * _.trunc('hi-diddly-ho there, neighborino', { + * 'omission': ' [...]' + * }); + * // => 'hi-diddly-ho there, neig [...]' + */ +function trunc(string, options, guard) { + if (guard && isIterateeCall(string, options, guard)) { + options = undefined; + } + var length = DEFAULT_TRUNC_LENGTH, + omission = DEFAULT_TRUNC_OMISSION; + + if (options != null) { + if (isObject(options)) { + var separator = 'separator' in options ? options.separator : separator; + length = 'length' in options ? (+options.length || 0) : length; + omission = 'omission' in options ? baseToString(options.omission) : omission; + } else { + length = +options || 0; + } + } + string = baseToString(string); + if (length >= string.length) { + return string; + } + var end = length - omission.length; + if (end < 1) { + return omission; + } + var result = string.slice(0, end); + if (separator == null) { + return result + omission; + } + if (isRegExp(separator)) { + if (string.slice(end).search(separator)) { + var match, + newEnd, + substring = string.slice(0, end); + + if (!separator.global) { + separator = RegExp(separator.source, (reFlags.exec(separator) || '') + 'g'); + } + separator.lastIndex = 0; + while ((match = separator.exec(substring))) { + newEnd = match.index; + } + result = result.slice(0, newEnd == null ? end : newEnd); + } + } else if (string.indexOf(separator, end) != end) { + var index = result.lastIndexOf(separator); + if (index > -1) { + result = result.slice(0, index); + } + } + return result + omission; +} + +module.exports = trunc; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string/unescape.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string/unescape.js new file mode 100644 index 00000000..b0266a7a --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string/unescape.js @@ -0,0 +1,33 @@ +var baseToString = require('../internal/baseToString'), + unescapeHtmlChar = require('../internal/unescapeHtmlChar'); + +/** Used to match HTML entities and HTML characters. */ +var reEscapedHtml = /&(?:amp|lt|gt|quot|#39|#96);/g, + reHasEscapedHtml = RegExp(reEscapedHtml.source); + +/** + * The inverse of `_.escape`; this method converts the HTML entities + * `&`, `<`, `>`, `"`, `'`, and ``` in `string` to their + * corresponding characters. + * + * **Note:** No other HTML entities are unescaped. To unescape additional HTML + * entities use a third-party library like [_he_](https://mths.be/he). + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to unescape. + * @returns {string} Returns the unescaped string. + * @example + * + * _.unescape('fred, barney, & pebbles'); + * // => 'fred, barney, & pebbles' + */ +function unescape(string) { + string = baseToString(string); + return (string && reHasEscapedHtml.test(string)) + ? string.replace(reEscapedHtml, unescapeHtmlChar) + : string; +} + +module.exports = unescape; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string/words.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string/words.js new file mode 100644 index 00000000..3013ad63 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/string/words.js @@ -0,0 +1,38 @@ +var baseToString = require('../internal/baseToString'), + isIterateeCall = require('../internal/isIterateeCall'); + +/** Used to match words to create compound words. */ +var reWords = (function() { + var upper = '[A-Z\\xc0-\\xd6\\xd8-\\xde]', + lower = '[a-z\\xdf-\\xf6\\xf8-\\xff]+'; + + return RegExp(upper + '+(?=' + upper + lower + ')|' + upper + '?' + lower + '|' + upper + '+|[0-9]+', 'g'); +}()); + +/** + * Splits `string` into an array of its words. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to inspect. + * @param {RegExp|string} [pattern] The pattern to match words. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Array} Returns the words of `string`. + * @example + * + * _.words('fred, barney, & pebbles'); + * // => ['fred', 'barney', 'pebbles'] + * + * _.words('fred, barney, & pebbles', /[^, ]+/g); + * // => ['fred', 'barney', '&', 'pebbles'] + */ +function words(string, pattern, guard) { + if (guard && isIterateeCall(string, pattern, guard)) { + pattern = undefined; + } + string = baseToString(string); + return string.match(pattern || reWords) || []; +} + +module.exports = words; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/support.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/support.js new file mode 100644 index 00000000..5009c2c5 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/support.js @@ -0,0 +1,10 @@ +/** + * An object environment feature flags. + * + * @static + * @memberOf _ + * @type Object + */ +var support = {}; + +module.exports = support; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/utility.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/utility.js new file mode 100644 index 00000000..25311fae --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/utility.js @@ -0,0 +1,18 @@ +module.exports = { + 'attempt': require('./utility/attempt'), + 'callback': require('./utility/callback'), + 'constant': require('./utility/constant'), + 'identity': require('./utility/identity'), + 'iteratee': require('./utility/iteratee'), + 'matches': require('./utility/matches'), + 'matchesProperty': require('./utility/matchesProperty'), + 'method': require('./utility/method'), + 'methodOf': require('./utility/methodOf'), + 'mixin': require('./utility/mixin'), + 'noop': require('./utility/noop'), + 'property': require('./utility/property'), + 'propertyOf': require('./utility/propertyOf'), + 'range': require('./utility/range'), + 'times': require('./utility/times'), + 'uniqueId': require('./utility/uniqueId') +}; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/utility/attempt.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/utility/attempt.js new file mode 100644 index 00000000..80afe692 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/utility/attempt.js @@ -0,0 +1,32 @@ +var isError = require('../lang/isError'), + restParam = require('../function/restParam'); + +/** + * Attempts to invoke `func`, returning either the result or the caught error + * object. Any additional arguments are provided to `func` when it is invoked. + * + * @static + * @memberOf _ + * @category Utility + * @param {Function} func The function to attempt. + * @returns {*} Returns the `func` result or error object. + * @example + * + * // avoid throwing errors for invalid selectors + * var elements = _.attempt(function(selector) { + * return document.querySelectorAll(selector); + * }, '>_>'); + * + * if (_.isError(elements)) { + * elements = []; + * } + */ +var attempt = restParam(function(func, args) { + try { + return func.apply(undefined, args); + } catch(e) { + return isError(e) ? e : new Error(e); + } +}); + +module.exports = attempt; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/utility/callback.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/utility/callback.js new file mode 100644 index 00000000..21223d02 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/utility/callback.js @@ -0,0 +1,53 @@ +var baseCallback = require('../internal/baseCallback'), + isIterateeCall = require('../internal/isIterateeCall'), + isObjectLike = require('../internal/isObjectLike'), + matches = require('./matches'); + +/** + * Creates a function that invokes `func` with the `this` binding of `thisArg` + * and arguments of the created function. If `func` is a property name the + * created callback returns the property value for a given element. If `func` + * is an object the created callback returns `true` for elements that contain + * the equivalent object properties, otherwise it returns `false`. + * + * @static + * @memberOf _ + * @alias iteratee + * @category Utility + * @param {*} [func=_.identity] The value to convert to a callback. + * @param {*} [thisArg] The `this` binding of `func`. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Function} Returns the callback. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 } + * ]; + * + * // wrap to create custom callback shorthands + * _.callback = _.wrap(_.callback, function(callback, func, thisArg) { + * var match = /^(.+?)__([gl]t)(.+)$/.exec(func); + * if (!match) { + * return callback(func, thisArg); + * } + * return function(object) { + * return match[2] == 'gt' + * ? object[match[1]] > match[3] + * : object[match[1]] < match[3]; + * }; + * }); + * + * _.filter(users, 'age__gt36'); + * // => [{ 'user': 'fred', 'age': 40 }] + */ +function callback(func, thisArg, guard) { + if (guard && isIterateeCall(func, thisArg, guard)) { + thisArg = undefined; + } + return isObjectLike(func) + ? matches(func) + : baseCallback(func, thisArg); +} + +module.exports = callback; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/utility/constant.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/utility/constant.js new file mode 100644 index 00000000..6919b763 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/utility/constant.js @@ -0,0 +1,23 @@ +/** + * Creates a function that returns `value`. + * + * @static + * @memberOf _ + * @category Utility + * @param {*} value The value to return from the new function. + * @returns {Function} Returns the new function. + * @example + * + * var object = { 'user': 'fred' }; + * var getter = _.constant(object); + * + * getter() === object; + * // => true + */ +function constant(value) { + return function() { + return value; + }; +} + +module.exports = constant; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/utility/identity.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/utility/identity.js new file mode 100644 index 00000000..3a1d1d4c --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/utility/identity.js @@ -0,0 +1,20 @@ +/** + * This method returns the first argument provided to it. + * + * @static + * @memberOf _ + * @category Utility + * @param {*} value Any value. + * @returns {*} Returns `value`. + * @example + * + * var object = { 'user': 'fred' }; + * + * _.identity(object) === object; + * // => true + */ +function identity(value) { + return value; +} + +module.exports = identity; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/utility/iteratee.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/utility/iteratee.js new file mode 100644 index 00000000..fcfa2021 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/utility/iteratee.js @@ -0,0 +1 @@ +module.exports = require('./callback'); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/utility/matches.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/utility/matches.js new file mode 100644 index 00000000..a182637b --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/utility/matches.js @@ -0,0 +1,33 @@ +var baseClone = require('../internal/baseClone'), + baseMatches = require('../internal/baseMatches'); + +/** + * Creates a function that performs a deep comparison between a given object + * and `source`, returning `true` if the given object has equivalent property + * values, else `false`. + * + * **Note:** This method supports comparing arrays, booleans, `Date` objects, + * numbers, `Object` objects, regexes, and strings. Objects are compared by + * their own, not inherited, enumerable properties. For comparing a single + * own or inherited property value see `_.matchesProperty`. + * + * @static + * @memberOf _ + * @category Utility + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new function. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.filter(users, _.matches({ 'age': 40, 'active': false })); + * // => [{ 'user': 'fred', 'age': 40, 'active': false }] + */ +function matches(source) { + return baseMatches(baseClone(source, true)); +} + +module.exports = matches; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/utility/matchesProperty.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/utility/matchesProperty.js new file mode 100644 index 00000000..91e51a56 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/utility/matchesProperty.js @@ -0,0 +1,32 @@ +var baseClone = require('../internal/baseClone'), + baseMatchesProperty = require('../internal/baseMatchesProperty'); + +/** + * Creates a function that compares the property value of `path` on a given + * object to `value`. + * + * **Note:** This method supports comparing arrays, booleans, `Date` objects, + * numbers, `Object` objects, regexes, and strings. Objects are compared by + * their own, not inherited, enumerable properties. + * + * @static + * @memberOf _ + * @category Utility + * @param {Array|string} path The path of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new function. + * @example + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * _.find(users, _.matchesProperty('user', 'fred')); + * // => { 'user': 'fred' } + */ +function matchesProperty(path, srcValue) { + return baseMatchesProperty(path, baseClone(srcValue, true)); +} + +module.exports = matchesProperty; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/utility/method.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/utility/method.js new file mode 100644 index 00000000..e315b7f3 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/utility/method.js @@ -0,0 +1,33 @@ +var invokePath = require('../internal/invokePath'), + restParam = require('../function/restParam'); + +/** + * Creates a function that invokes the method at `path` on a given object. + * Any additional arguments are provided to the invoked method. + * + * @static + * @memberOf _ + * @category Utility + * @param {Array|string} path The path of the method to invoke. + * @param {...*} [args] The arguments to invoke the method with. + * @returns {Function} Returns the new function. + * @example + * + * var objects = [ + * { 'a': { 'b': { 'c': _.constant(2) } } }, + * { 'a': { 'b': { 'c': _.constant(1) } } } + * ]; + * + * _.map(objects, _.method('a.b.c')); + * // => [2, 1] + * + * _.invoke(_.sortBy(objects, _.method(['a', 'b', 'c'])), 'a.b.c'); + * // => [1, 2] + */ +var method = restParam(function(path, args) { + return function(object) { + return invokePath(object, path, args); + }; +}); + +module.exports = method; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/utility/methodOf.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/utility/methodOf.js new file mode 100644 index 00000000..f61b7822 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/utility/methodOf.js @@ -0,0 +1,32 @@ +var invokePath = require('../internal/invokePath'), + restParam = require('../function/restParam'); + +/** + * The opposite of `_.method`; this method creates a function that invokes + * the method at a given path on `object`. Any additional arguments are + * provided to the invoked method. + * + * @static + * @memberOf _ + * @category Utility + * @param {Object} object The object to query. + * @param {...*} [args] The arguments to invoke the method with. + * @returns {Function} Returns the new function. + * @example + * + * var array = _.times(3, _.constant), + * object = { 'a': array, 'b': array, 'c': array }; + * + * _.map(['a[2]', 'c[0]'], _.methodOf(object)); + * // => [2, 0] + * + * _.map([['a', '2'], ['c', '0']], _.methodOf(object)); + * // => [2, 0] + */ +var methodOf = restParam(function(object, args) { + return function(path) { + return invokePath(object, path, args); + }; +}); + +module.exports = methodOf; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/utility/mixin.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/utility/mixin.js new file mode 100644 index 00000000..5c4a372d --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/utility/mixin.js @@ -0,0 +1,82 @@ +var arrayCopy = require('../internal/arrayCopy'), + arrayPush = require('../internal/arrayPush'), + baseFunctions = require('../internal/baseFunctions'), + isFunction = require('../lang/isFunction'), + isObject = require('../lang/isObject'), + keys = require('../object/keys'); + +/** + * Adds all own enumerable function properties of a source object to the + * destination object. If `object` is a function then methods are added to + * its prototype as well. + * + * **Note:** Use `_.runInContext` to create a pristine `lodash` function to + * avoid conflicts caused by modifying the original. + * + * @static + * @memberOf _ + * @category Utility + * @param {Function|Object} [object=lodash] The destination object. + * @param {Object} source The object of functions to add. + * @param {Object} [options] The options object. + * @param {boolean} [options.chain=true] Specify whether the functions added + * are chainable. + * @returns {Function|Object} Returns `object`. + * @example + * + * function vowels(string) { + * return _.filter(string, function(v) { + * return /[aeiou]/i.test(v); + * }); + * } + * + * _.mixin({ 'vowels': vowels }); + * _.vowels('fred'); + * // => ['e'] + * + * _('fred').vowels().value(); + * // => ['e'] + * + * _.mixin({ 'vowels': vowels }, { 'chain': false }); + * _('fred').vowels(); + * // => ['e'] + */ +function mixin(object, source, options) { + var methodNames = baseFunctions(source, keys(source)); + + var chain = true, + index = -1, + isFunc = isFunction(object), + length = methodNames.length; + + if (options === false) { + chain = false; + } else if (isObject(options) && 'chain' in options) { + chain = options.chain; + } + while (++index < length) { + var methodName = methodNames[index], + func = source[methodName]; + + object[methodName] = func; + if (isFunc) { + object.prototype[methodName] = (function(func) { + return function() { + var chainAll = this.__chain__; + if (chain || chainAll) { + var result = object(this.__wrapped__), + actions = result.__actions__ = arrayCopy(this.__actions__); + + actions.push({ 'func': func, 'args': arguments, 'thisArg': object }); + result.__chain__ = chainAll; + return result; + } + return func.apply(object, arrayPush([this.value()], arguments)); + }; + }(func)); + } + } + return object; +} + +module.exports = mixin; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/utility/noop.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/utility/noop.js new file mode 100644 index 00000000..56d65134 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/utility/noop.js @@ -0,0 +1,19 @@ +/** + * A no-operation function that returns `undefined` regardless of the + * arguments it receives. + * + * @static + * @memberOf _ + * @category Utility + * @example + * + * var object = { 'user': 'fred' }; + * + * _.noop(object) === undefined; + * // => true + */ +function noop() { + // No operation performed. +} + +module.exports = noop; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/utility/property.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/utility/property.js new file mode 100644 index 00000000..ddfd5979 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/utility/property.js @@ -0,0 +1,31 @@ +var baseProperty = require('../internal/baseProperty'), + basePropertyDeep = require('../internal/basePropertyDeep'), + isKey = require('../internal/isKey'); + +/** + * Creates a function that returns the property value at `path` on a + * given object. + * + * @static + * @memberOf _ + * @category Utility + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new function. + * @example + * + * var objects = [ + * { 'a': { 'b': { 'c': 2 } } }, + * { 'a': { 'b': { 'c': 1 } } } + * ]; + * + * _.map(objects, _.property('a.b.c')); + * // => [2, 1] + * + * _.pluck(_.sortBy(objects, _.property(['a', 'b', 'c'])), 'a.b.c'); + * // => [1, 2] + */ +function property(path) { + return isKey(path) ? baseProperty(path) : basePropertyDeep(path); +} + +module.exports = property; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/utility/propertyOf.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/utility/propertyOf.js new file mode 100644 index 00000000..093c6597 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/utility/propertyOf.js @@ -0,0 +1,30 @@ +var baseGet = require('../internal/baseGet'), + toPath = require('../internal/toPath'); + +/** + * The opposite of `_.property`; this method creates a function that returns + * the property value at a given path on `object`. + * + * @static + * @memberOf _ + * @category Utility + * @param {Object} object The object to query. + * @returns {Function} Returns the new function. + * @example + * + * var array = [0, 1, 2], + * object = { 'a': array, 'b': array, 'c': array }; + * + * _.map(['a[2]', 'c[0]'], _.propertyOf(object)); + * // => [2, 0] + * + * _.map([['a', '2'], ['c', '0']], _.propertyOf(object)); + * // => [2, 0] + */ +function propertyOf(object) { + return function(path) { + return baseGet(object, toPath(path), path + ''); + }; +} + +module.exports = propertyOf; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/utility/range.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/utility/range.js new file mode 100644 index 00000000..e45254e7 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/utility/range.js @@ -0,0 +1,66 @@ +var isIterateeCall = require('../internal/isIterateeCall'); + +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeCeil = Math.ceil, + nativeMax = Math.max; + +/** + * Creates an array of numbers (positive and/or negative) progressing from + * `start` up to, but not including, `end`. If `end` is not specified it is + * set to `start` with `start` then set to `0`. If `end` is less than `start` + * a zero-length range is created unless a negative `step` is specified. + * + * @static + * @memberOf _ + * @category Utility + * @param {number} [start=0] The start of the range. + * @param {number} end The end of the range. + * @param {number} [step=1] The value to increment or decrement by. + * @returns {Array} Returns the new array of numbers. + * @example + * + * _.range(4); + * // => [0, 1, 2, 3] + * + * _.range(1, 5); + * // => [1, 2, 3, 4] + * + * _.range(0, 20, 5); + * // => [0, 5, 10, 15] + * + * _.range(0, -4, -1); + * // => [0, -1, -2, -3] + * + * _.range(1, 4, 0); + * // => [1, 1, 1] + * + * _.range(0); + * // => [] + */ +function range(start, end, step) { + if (step && isIterateeCall(start, end, step)) { + end = step = undefined; + } + start = +start || 0; + step = step == null ? 1 : (+step || 0); + + if (end == null) { + end = start; + start = 0; + } else { + end = +end || 0; + } + // Use `Array(length)` so engines like Chakra and V8 avoid slower modes. + // See https://youtu.be/XAqIpGU8ZZk#t=17m25s for more details. + var index = -1, + length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), + result = Array(length); + + while (++index < length) { + result[index] = start; + start += step; + } + return result; +} + +module.exports = range; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/utility/times.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/utility/times.js new file mode 100644 index 00000000..9a41e2fe --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/utility/times.js @@ -0,0 +1,60 @@ +var bindCallback = require('../internal/bindCallback'); + +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeFloor = Math.floor, + nativeIsFinite = global.isFinite, + nativeMin = Math.min; + +/** Used as references for the maximum length and index of an array. */ +var MAX_ARRAY_LENGTH = 4294967295; + +/** + * Invokes the iteratee function `n` times, returning an array of the results + * of each invocation. The `iteratee` is bound to `thisArg` and invoked with + * one argument; (index). + * + * @static + * @memberOf _ + * @category Utility + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Array} Returns the array of results. + * @example + * + * var diceRolls = _.times(3, _.partial(_.random, 1, 6, false)); + * // => [3, 6, 4] + * + * _.times(3, function(n) { + * mage.castSpell(n); + * }); + * // => invokes `mage.castSpell(n)` three times with `n` of `0`, `1`, and `2` + * + * _.times(3, function(n) { + * this.cast(n); + * }, mage); + * // => also invokes `mage.castSpell(n)` three times + */ +function times(n, iteratee, thisArg) { + n = nativeFloor(n); + + // Exit early to avoid a JSC JIT bug in Safari 8 + // where `Array(0)` is treated as `Array(1)`. + if (n < 1 || !nativeIsFinite(n)) { + return []; + } + var index = -1, + result = Array(nativeMin(n, MAX_ARRAY_LENGTH)); + + iteratee = bindCallback(iteratee, thisArg, 1); + while (++index < n) { + if (index < MAX_ARRAY_LENGTH) { + result[index] = iteratee(index); + } else { + iteratee(index); + } + } + return result; +} + +module.exports = times; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/utility/uniqueId.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/utility/uniqueId.js new file mode 100644 index 00000000..88e02bf3 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/lodash/utility/uniqueId.js @@ -0,0 +1,27 @@ +var baseToString = require('../internal/baseToString'); + +/** Used to generate unique IDs. */ +var idCounter = 0; + +/** + * Generates a unique ID. If `prefix` is provided the ID is appended to it. + * + * @static + * @memberOf _ + * @category Utility + * @param {string} [prefix] The value to prefix the ID with. + * @returns {string} Returns the unique ID. + * @example + * + * _.uniqueId('contact_'); + * // => 'contact_104' + * + * _.uniqueId(); + * // => '105' + */ +function uniqueId(prefix) { + var id = ++idCounter; + return baseToString(prefix) + id; +} + +module.exports = uniqueId; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/sprintf-js/.npmignore b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/sprintf-js/.npmignore new file mode 100644 index 00000000..096746c1 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/sprintf-js/.npmignore @@ -0,0 +1 @@ +/node_modules/ \ No newline at end of file diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/sprintf-js/LICENSE b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/sprintf-js/LICENSE new file mode 100644 index 00000000..663ac52e --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/sprintf-js/LICENSE @@ -0,0 +1,24 @@ +Copyright (c) 2007-2014, Alexandru Marasteanu <hello [at) alexei (dot] ro> +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: +* Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +* Neither the name of this software nor the names of its contributors may be + used to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/sprintf-js/README.md b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/sprintf-js/README.md new file mode 100644 index 00000000..83863561 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/sprintf-js/README.md @@ -0,0 +1,88 @@ +# sprintf.js +**sprintf.js** is a complete open source JavaScript sprintf implementation for the *browser* and *node.js*. + +Its prototype is simple: + + string sprintf(string format , [mixed arg1 [, mixed arg2 [ ,...]]]) + +The placeholders in the format string are marked by `%` and are followed by one or more of these elements, in this order: + +* An optional number followed by a `$` sign that selects which argument index to use for the value. If not specified, arguments will be placed in the same order as the placeholders in the input string. +* An optional `+` sign that forces to preceed the result with a plus or minus sign on numeric values. By default, only the `-` sign is used on negative numbers. +* An optional padding specifier that says what character to use for padding (if specified). Possible values are `0` or any other character precedeed by a `'` (single quote). The default is to pad with *spaces*. +* An optional `-` sign, that causes sprintf to left-align the result of this placeholder. The default is to right-align the result. +* An optional number, that says how many characters the result should have. If the value to be returned is shorter than this number, the result will be padded. When used with the `j` (JSON) type specifier, the padding length specifies the tab size used for indentation. +* An optional precision modifier, consisting of a `.` (dot) followed by a number, that says how many digits should be displayed for floating point numbers. When used with the `g` type specifier, it specifies the number of significant digits. When used on a string, it causes the result to be truncated. +* A type specifier that can be any of: + * `%` — yields a literal `%` character + * `b` — yields an integer as a binary number + * `c` — yields an integer as the character with that ASCII value + * `d` or `i` — yields an integer as a signed decimal number + * `e` — yields a float using scientific notation + * `u` — yields an integer as an unsigned decimal number + * `f` — yields a float as is; see notes on precision above + * `g` — yields a float as is; see notes on precision above + * `o` — yields an integer as an octal number + * `s` — yields a string as is + * `x` — yields an integer as a hexadecimal number (lower-case) + * `X` — yields an integer as a hexadecimal number (upper-case) + * `j` — yields a JavaScript object or array as a JSON encoded string + +## JavaScript `vsprintf` +`vsprintf` is the same as `sprintf` except that it accepts an array of arguments, rather than a variable number of arguments: + + vsprintf("The first 4 letters of the english alphabet are: %s, %s, %s and %s", ["a", "b", "c", "d"]) + +## Argument swapping +You can also swap the arguments. That is, the order of the placeholders doesn't have to match the order of the arguments. You can do that by simply indicating in the format string which arguments the placeholders refer to: + + sprintf("%2$s %3$s a %1$s", "cracker", "Polly", "wants") +And, of course, you can repeat the placeholders without having to increase the number of arguments. + +## Named arguments +Format strings may contain replacement fields rather than positional placeholders. Instead of referring to a certain argument, you can now refer to a certain key within an object. Replacement fields are surrounded by rounded parentheses - `(` and `)` - and begin with a keyword that refers to a key: + + var user = { + name: "Dolly" + } + sprintf("Hello %(name)s", user) // Hello Dolly +Keywords in replacement fields can be optionally followed by any number of keywords or indexes: + + var users = [ + {name: "Dolly"}, + {name: "Molly"}, + {name: "Polly"} + ] + sprintf("Hello %(users[0].name)s, %(users[1].name)s and %(users[2].name)s", {users: users}) // Hello Dolly, Molly and Polly +Note: mixing positional and named placeholders is not (yet) supported + +## Computed values +You can pass in a function as a dynamic value and it will be invoked (with no arguments) in order to compute the value on-the-fly. + + sprintf("Current timestamp: %d", Date.now) // Current timestamp: 1398005382890 + sprintf("Current date and time: %s", function() { return new Date().toString() }) + +# AngularJS +You can now use `sprintf` and `vsprintf` (also aliased as `fmt` and `vfmt` respectively) in your AngularJS projects. See `demo/`. + +# Installation + +## Via Bower + + bower install sprintf + +## Or as a node.js module + + npm install sprintf-js + +### Usage + + var sprintf = require("sprintf-js").sprintf, + vsprintf = require("sprintf-js").vsprintf + + sprintf("%2$s %3$s a %1$s", "cracker", "Polly", "wants") + vsprintf("The first 4 letters of the english alphabet are: %s, %s, %s and %s", ["a", "b", "c", "d"]) + +# License + +**sprintf.js** is licensed under the terms of the 3-clause BSD license. diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/sprintf-js/bower.json b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/sprintf-js/bower.json new file mode 100644 index 00000000..d90a7598 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/sprintf-js/bower.json @@ -0,0 +1,14 @@ +{ + "name": "sprintf", + "description": "JavaScript sprintf implementation", + "version": "1.0.3", + "main": "src/sprintf.js", + "license": "BSD-3-Clause-Clear", + "keywords": ["sprintf", "string", "formatting"], + "authors": ["Alexandru Marasteanu <hello@alexei.ro> (http://alexei.ro/)"], + "homepage": "https://github.com/alexei/sprintf.js", + "repository": { + "type": "git", + "url": "git://github.com/alexei/sprintf.js.git" + } +} diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/sprintf-js/demo/angular.html b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/sprintf-js/demo/angular.html new file mode 100644 index 00000000..3559efd7 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/sprintf-js/demo/angular.html @@ -0,0 +1,20 @@ +<!doctype html> +<html ng-app="app"> +<head> + <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.0-rc.3/angular.min.js"></script> + <script src="../src/sprintf.js"></script> + <script src="../src/angular-sprintf.js"></script> +</head> +<body> + <pre>{{ "%+010d"|sprintf:-123 }}</pre> + <pre>{{ "%+010d"|vsprintf:[-123] }}</pre> + <pre>{{ "%+010d"|fmt:-123 }}</pre> + <pre>{{ "%+010d"|vfmt:[-123] }}</pre> + <pre>{{ "I've got %2$d apples and %1$d oranges."|fmt:4:2 }}</pre> + <pre>{{ "I've got %(apples)d apples and %(oranges)d oranges."|fmt:{apples: 2, oranges: 4} }}</pre> + + <script> + angular.module("app", ["sprintf"]) + </script> +</body> +</html> diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/sprintf-js/dist/angular-sprintf.min.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/sprintf-js/dist/angular-sprintf.min.js new file mode 100644 index 00000000..dbaf744d --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/sprintf-js/dist/angular-sprintf.min.js @@ -0,0 +1,4 @@ +/*! sprintf-js | Alexandru Marasteanu <hello@alexei.ro> (http://alexei.ro/) | BSD-3-Clause */ + +angular.module("sprintf",[]).filter("sprintf",function(){return function(){return sprintf.apply(null,arguments)}}).filter("fmt",["$filter",function(a){return a("sprintf")}]).filter("vsprintf",function(){return function(a,b){return vsprintf(a,b)}}).filter("vfmt",["$filter",function(a){return a("vsprintf")}]); +//# sourceMappingURL=angular-sprintf.min.map \ No newline at end of file diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/sprintf-js/dist/angular-sprintf.min.js.map b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/sprintf-js/dist/angular-sprintf.min.js.map new file mode 100644 index 00000000..055964c6 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/sprintf-js/dist/angular-sprintf.min.js.map @@ -0,0 +1 @@ +{"version":3,"file":"angular-sprintf.min.js","sources":["../src/angular-sprintf.js"],"names":["angular","module","filter","sprintf","apply","arguments","$filter","format","argv","vsprintf"],"mappings":";;AAAAA,QACIC,OAAO,cACPC,OAAO,UAAW,WACd,MAAO,YACH,MAAOC,SAAQC,MAAM,KAAMC,cAGnCH,OAAO,OAAQ,UAAW,SAASI,GAC/B,MAAOA,GAAQ,cAEnBJ,OAAO,WAAY,WACf,MAAO,UAASK,EAAQC,GACpB,MAAOC,UAASF,EAAQC,MAGhCN,OAAO,QAAS,UAAW,SAASI,GAChC,MAAOA,GAAQ"} \ No newline at end of file diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/sprintf-js/dist/angular-sprintf.min.map b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/sprintf-js/dist/angular-sprintf.min.map new file mode 100644 index 00000000..055964c6 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/sprintf-js/dist/angular-sprintf.min.map @@ -0,0 +1 @@ +{"version":3,"file":"angular-sprintf.min.js","sources":["../src/angular-sprintf.js"],"names":["angular","module","filter","sprintf","apply","arguments","$filter","format","argv","vsprintf"],"mappings":";;AAAAA,QACIC,OAAO,cACPC,OAAO,UAAW,WACd,MAAO,YACH,MAAOC,SAAQC,MAAM,KAAMC,cAGnCH,OAAO,OAAQ,UAAW,SAASI,GAC/B,MAAOA,GAAQ,cAEnBJ,OAAO,WAAY,WACf,MAAO,UAASK,EAAQC,GACpB,MAAOC,UAASF,EAAQC,MAGhCN,OAAO,QAAS,UAAW,SAASI,GAChC,MAAOA,GAAQ"} \ No newline at end of file diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/sprintf-js/dist/sprintf.min.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/sprintf-js/dist/sprintf.min.js new file mode 100644 index 00000000..dc61e51a --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/sprintf-js/dist/sprintf.min.js @@ -0,0 +1,4 @@ +/*! sprintf-js | Alexandru Marasteanu <hello@alexei.ro> (http://alexei.ro/) | BSD-3-Clause */ + +!function(a){function b(){var a=arguments[0],c=b.cache;return c[a]&&c.hasOwnProperty(a)||(c[a]=b.parse(a)),b.format.call(null,c[a],arguments)}function c(a){return Object.prototype.toString.call(a).slice(8,-1).toLowerCase()}function d(a,b){return Array(b+1).join(a)}var e={not_string:/[^s]/,number:/[diefg]/,json:/[j]/,not_json:/[^j]/,text:/^[^\x25]+/,modulo:/^\x25{2}/,placeholder:/^\x25(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-gijosuxX])/,key:/^([a-z_][a-z_\d]*)/i,key_access:/^\.([a-z_][a-z_\d]*)/i,index_access:/^\[(\d+)\]/,sign:/^[\+\-]/};b.format=function(a,f){var g,h,i,j,k,l,m,n=1,o=a.length,p="",q=[],r=!0,s="";for(h=0;o>h;h++)if(p=c(a[h]),"string"===p)q[q.length]=a[h];else if("array"===p){if(j=a[h],j[2])for(g=f[n],i=0;i<j[2].length;i++){if(!g.hasOwnProperty(j[2][i]))throw new Error(b("[sprintf] property '%s' does not exist",j[2][i]));g=g[j[2][i]]}else g=j[1]?f[j[1]]:f[n++];if("function"==c(g)&&(g=g()),e.not_string.test(j[8])&&e.not_json.test(j[8])&&"number"!=c(g)&&isNaN(g))throw new TypeError(b("[sprintf] expecting number but found %s",c(g)));switch(e.number.test(j[8])&&(r=g>=0),j[8]){case"b":g=g.toString(2);break;case"c":g=String.fromCharCode(g);break;case"d":case"i":g=parseInt(g,10);break;case"j":g=JSON.stringify(g,null,j[6]?parseInt(j[6]):0);break;case"e":g=j[7]?g.toExponential(j[7]):g.toExponential();break;case"f":g=j[7]?parseFloat(g).toFixed(j[7]):parseFloat(g);break;case"g":g=j[7]?parseFloat(g).toPrecision(j[7]):parseFloat(g);break;case"o":g=g.toString(8);break;case"s":g=(g=String(g))&&j[7]?g.substring(0,j[7]):g;break;case"u":g>>>=0;break;case"x":g=g.toString(16);break;case"X":g=g.toString(16).toUpperCase()}e.json.test(j[8])?q[q.length]=g:(!e.number.test(j[8])||r&&!j[3]?s="":(s=r?"+":"-",g=g.toString().replace(e.sign,"")),l=j[4]?"0"===j[4]?"0":j[4].charAt(1):" ",m=j[6]-(s+g).length,k=j[6]&&m>0?d(l,m):"",q[q.length]=j[5]?s+g+k:"0"===l?s+k+g:k+s+g)}return q.join("")},b.cache={},b.parse=function(a){for(var b=a,c=[],d=[],f=0;b;){if(null!==(c=e.text.exec(b)))d[d.length]=c[0];else if(null!==(c=e.modulo.exec(b)))d[d.length]="%";else{if(null===(c=e.placeholder.exec(b)))throw new SyntaxError("[sprintf] unexpected placeholder");if(c[2]){f|=1;var g=[],h=c[2],i=[];if(null===(i=e.key.exec(h)))throw new SyntaxError("[sprintf] failed to parse named argument key");for(g[g.length]=i[1];""!==(h=h.substring(i[0].length));)if(null!==(i=e.key_access.exec(h)))g[g.length]=i[1];else{if(null===(i=e.index_access.exec(h)))throw new SyntaxError("[sprintf] failed to parse named argument key");g[g.length]=i[1]}c[2]=g}else f|=2;if(3===f)throw new Error("[sprintf] mixing positional and named placeholders is not (yet) supported");d[d.length]=c}b=b.substring(c[0].length)}return d};var f=function(a,c,d){return d=(c||[]).slice(0),d.splice(0,0,a),b.apply(null,d)};"undefined"!=typeof exports?(exports.sprintf=b,exports.vsprintf=f):(a.sprintf=b,a.vsprintf=f,"function"==typeof define&&define.amd&&define(function(){return{sprintf:b,vsprintf:f}}))}("undefined"==typeof window?this:window); +//# sourceMappingURL=sprintf.min.map \ No newline at end of file diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/sprintf-js/dist/sprintf.min.js.map b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/sprintf-js/dist/sprintf.min.js.map new file mode 100644 index 00000000..369dbafa --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/sprintf-js/dist/sprintf.min.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sprintf.min.js","sources":["../src/sprintf.js"],"names":["window","sprintf","key","arguments","cache","hasOwnProperty","parse","format","call","get_type","variable","Object","prototype","toString","slice","toLowerCase","str_repeat","input","multiplier","Array","join","re","not_string","number","json","not_json","text","modulo","placeholder","key_access","index_access","sign","parse_tree","argv","arg","i","k","match","pad","pad_character","pad_length","cursor","tree_length","length","node_type","output","is_positive","Error","test","isNaN","TypeError","String","fromCharCode","parseInt","JSON","stringify","toExponential","parseFloat","toFixed","substring","toUpperCase","replace","charAt","fmt","_fmt","arg_names","exec","SyntaxError","field_list","replacement_field","field_match","vsprintf","_argv","splice","apply","exports","define","amd","this"],"mappings":";;CAAA,SAAUA,GAeN,QAASC,KACL,GAAIC,GAAMC,UAAU,GAAIC,EAAQH,EAAQG,KAIxC,OAHMA,GAAMF,IAAQE,EAAMC,eAAeH,KACrCE,EAAMF,GAAOD,EAAQK,MAAMJ,IAExBD,EAAQM,OAAOC,KAAK,KAAMJ,EAAMF,GAAMC,WA4JjD,QAASM,GAASC,GACd,MAAOC,QAAOC,UAAUC,SAASL,KAAKE,GAAUI,MAAM,EAAG,IAAIC,cAGjE,QAASC,GAAWC,EAAOC,GACvB,MAAOC,OAAMD,EAAa,GAAGE,KAAKH,GApLtC,GAAII,IACAC,WAAY,OACZC,OAAQ,SACRC,KAAM,MACNC,SAAU,OACVC,KAAM,YACNC,OAAQ,WACRC,YAAa,yFACb1B,IAAK,sBACL2B,WAAY,wBACZC,aAAc,aACdC,KAAM,UAWV9B,GAAQM,OAAS,SAASyB,EAAYC,GAClC,GAAiEC,GAAkBC,EAAGC,EAAGC,EAAOC,EAAKC,EAAeC,EAAhHC,EAAS,EAAGC,EAAcV,EAAWW,OAAQC,EAAY,GAASC,KAA0DC,GAAc,EAAMf,EAAO,EAC3J,KAAKI,EAAI,EAAOO,EAAJP,EAAiBA,IAEzB,GADAS,EAAYnC,EAASuB,EAAWG,IACd,WAAdS,EACAC,EAAOA,EAAOF,QAAUX,EAAWG,OAElC,IAAkB,UAAdS,EAAuB,CAE5B,GADAP,EAAQL,EAAWG,GACfE,EAAM,GAEN,IADAH,EAAMD,EAAKQ,GACNL,EAAI,EAAGA,EAAIC,EAAM,GAAGM,OAAQP,IAAK,CAClC,IAAKF,EAAI7B,eAAegC,EAAM,GAAGD,IAC7B,KAAM,IAAIW,OAAM9C,EAAQ,yCAA0CoC,EAAM,GAAGD,IAE/EF,GAAMA,EAAIG,EAAM,GAAGD,QAIvBF,GADKG,EAAM,GACLJ,EAAKI,EAAM,IAGXJ,EAAKQ,IAOf,IAJqB,YAAjBhC,EAASyB,KACTA,EAAMA,KAGNb,EAAGC,WAAW0B,KAAKX,EAAM,KAAOhB,EAAGI,SAASuB,KAAKX,EAAM,KAAyB,UAAjB5B,EAASyB,IAAoBe,MAAMf,GAClG,KAAM,IAAIgB,WAAUjD,EAAQ,0CAA2CQ,EAASyB,IAOpF,QAJIb,EAAGE,OAAOyB,KAAKX,EAAM,MACrBS,EAAcZ,GAAO,GAGjBG,EAAM,IACV,IAAK,IACDH,EAAMA,EAAIrB,SAAS,EACvB,MACA,KAAK,IACDqB,EAAMiB,OAAOC,aAAalB,EAC9B,MACA,KAAK,IACL,IAAK,IACDA,EAAMmB,SAASnB,EAAK,GACxB,MACA,KAAK,IACDA,EAAMoB,KAAKC,UAAUrB,EAAK,KAAMG,EAAM,GAAKgB,SAAShB,EAAM,IAAM,EACpE,MACA,KAAK,IACDH,EAAMG,EAAM,GAAKH,EAAIsB,cAAcnB,EAAM,IAAMH,EAAIsB,eACvD,MACA,KAAK,IACDtB,EAAMG,EAAM,GAAKoB,WAAWvB,GAAKwB,QAAQrB,EAAM,IAAMoB,WAAWvB,EACpE,MACA,KAAK,IACDA,EAAMA,EAAIrB,SAAS,EACvB,MACA,KAAK,IACDqB,GAAQA,EAAMiB,OAAOjB,KAASG,EAAM,GAAKH,EAAIyB,UAAU,EAAGtB,EAAM,IAAMH,CAC1E,MACA,KAAK,IACDA,KAAc,CAClB,MACA,KAAK,IACDA,EAAMA,EAAIrB,SAAS,GACvB,MACA,KAAK,IACDqB,EAAMA,EAAIrB,SAAS,IAAI+C,cAG3BvC,EAAGG,KAAKwB,KAAKX,EAAM,IACnBQ,EAAOA,EAAOF,QAAUT,IAGpBb,EAAGE,OAAOyB,KAAKX,EAAM,KAASS,IAAeT,EAAM,GAKnDN,EAAO,IAJPA,EAAOe,EAAc,IAAM,IAC3BZ,EAAMA,EAAIrB,WAAWgD,QAAQxC,EAAGU,KAAM,KAK1CQ,EAAgBF,EAAM,GAAkB,MAAbA,EAAM,GAAa,IAAMA,EAAM,GAAGyB,OAAO,GAAK,IACzEtB,EAAaH,EAAM,IAAMN,EAAOG,GAAKS,OACrCL,EAAMD,EAAM,IAAMG,EAAa,EAAIxB,EAAWuB,EAAeC,GAAoB,GACjFK,EAAOA,EAAOF,QAAUN,EAAM,GAAKN,EAAOG,EAAMI,EAAyB,MAAlBC,EAAwBR,EAAOO,EAAMJ,EAAMI,EAAMP,EAAOG,GAI3H,MAAOW,GAAOzB,KAAK,KAGvBnB,EAAQG,SAERH,EAAQK,MAAQ,SAASyD,GAErB,IADA,GAAIC,GAAOD,EAAK1B,KAAYL,KAAiBiC,EAAY,EAClDD,GAAM,CACT,GAAqC,QAAhC3B,EAAQhB,EAAGK,KAAKwC,KAAKF,IACtBhC,EAAWA,EAAWW,QAAUN,EAAM,OAErC,IAAuC,QAAlCA,EAAQhB,EAAGM,OAAOuC,KAAKF,IAC7BhC,EAAWA,EAAWW,QAAU,QAE/B,CAAA,GAA4C,QAAvCN,EAAQhB,EAAGO,YAAYsC,KAAKF,IAgClC,KAAM,IAAIG,aAAY,mCA/BtB,IAAI9B,EAAM,GAAI,CACV4B,GAAa,CACb,IAAIG,MAAiBC,EAAoBhC,EAAM,GAAIiC,IACnD,IAAuD,QAAlDA,EAAcjD,EAAGnB,IAAIgE,KAAKG,IAe3B,KAAM,IAAIF,aAAY,+CAbtB,KADAC,EAAWA,EAAWzB,QAAU2B,EAAY,GACwC,MAA5ED,EAAoBA,EAAkBV,UAAUW,EAAY,GAAG3B,UACnE,GAA8D,QAAzD2B,EAAcjD,EAAGQ,WAAWqC,KAAKG,IAClCD,EAAWA,EAAWzB,QAAU2B,EAAY,OAE3C,CAAA,GAAgE,QAA3DA,EAAcjD,EAAGS,aAAaoC,KAAKG,IAIzC,KAAM,IAAIF,aAAY,+CAHtBC,GAAWA,EAAWzB,QAAU2B,EAAY,GAUxDjC,EAAM,GAAK+B,MAGXH,IAAa,CAEjB,IAAkB,IAAdA,EACA,KAAM,IAAIlB,OAAM,4EAEpBf,GAAWA,EAAWW,QAAUN,EAKpC2B,EAAOA,EAAKL,UAAUtB,EAAM,GAAGM,QAEnC,MAAOX,GAGX,IAAIuC,GAAW,SAASR,EAAK9B,EAAMuC,GAG/B,MAFAA,IAASvC,OAAYnB,MAAM,GAC3B0D,EAAMC,OAAO,EAAG,EAAGV,GACZ9D,EAAQyE,MAAM,KAAMF,GAiBR,oBAAZG,UACPA,QAAQ1E,QAAUA,EAClB0E,QAAQJ,SAAWA,IAGnBvE,EAAOC,QAAUA,EACjBD,EAAOuE,SAAWA,EAEI,kBAAXK,SAAyBA,OAAOC,KACvCD,OAAO,WACH,OACI3E,QAASA,EACTsE,SAAUA,OAKT,mBAAXvE,QAAyB8E,KAAO9E"} \ No newline at end of file diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/sprintf-js/dist/sprintf.min.map b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/sprintf-js/dist/sprintf.min.map new file mode 100644 index 00000000..ee011aaa --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/sprintf-js/dist/sprintf.min.map @@ -0,0 +1 @@ +{"version":3,"file":"sprintf.min.js","sources":["../src/sprintf.js"],"names":["window","sprintf","key","arguments","cache","hasOwnProperty","parse","format","call","get_type","variable","Object","prototype","toString","slice","toLowerCase","str_repeat","input","multiplier","Array","join","re","not_string","number","json","not_json","text","modulo","placeholder","key_access","index_access","sign","parse_tree","argv","arg","i","k","match","pad","pad_character","pad_length","cursor","tree_length","length","node_type","output","is_positive","Error","test","isNaN","TypeError","String","fromCharCode","parseInt","JSON","stringify","toExponential","parseFloat","toFixed","toPrecision","substring","toUpperCase","replace","charAt","fmt","_fmt","arg_names","exec","SyntaxError","field_list","replacement_field","field_match","vsprintf","_argv","splice","apply","exports","define","amd","this"],"mappings":";;CAAA,SAAUA,GAeN,QAASC,KACL,GAAIC,GAAMC,UAAU,GAAIC,EAAQH,EAAQG,KAIxC,OAHMA,GAAMF,IAAQE,EAAMC,eAAeH,KACrCE,EAAMF,GAAOD,EAAQK,MAAMJ,IAExBD,EAAQM,OAAOC,KAAK,KAAMJ,EAAMF,GAAMC,WA+JjD,QAASM,GAASC,GACd,MAAOC,QAAOC,UAAUC,SAASL,KAAKE,GAAUI,MAAM,EAAG,IAAIC,cAGjE,QAASC,GAAWC,EAAOC,GACvB,MAAOC,OAAMD,EAAa,GAAGE,KAAKH,GAvLtC,GAAII,IACAC,WAAY,OACZC,OAAQ,UACRC,KAAM,MACNC,SAAU,OACVC,KAAM,YACNC,OAAQ,WACRC,YAAa,yFACb1B,IAAK,sBACL2B,WAAY,wBACZC,aAAc,aACdC,KAAM,UAWV9B,GAAQM,OAAS,SAASyB,EAAYC,GAClC,GAAiEC,GAAkBC,EAAGC,EAAGC,EAAOC,EAAKC,EAAeC,EAAhHC,EAAS,EAAGC,EAAcV,EAAWW,OAAQC,EAAY,GAASC,KAA0DC,GAAc,EAAMf,EAAO,EAC3J,KAAKI,EAAI,EAAOO,EAAJP,EAAiBA,IAEzB,GADAS,EAAYnC,EAASuB,EAAWG,IACd,WAAdS,EACAC,EAAOA,EAAOF,QAAUX,EAAWG,OAElC,IAAkB,UAAdS,EAAuB,CAE5B,GADAP,EAAQL,EAAWG,GACfE,EAAM,GAEN,IADAH,EAAMD,EAAKQ,GACNL,EAAI,EAAGA,EAAIC,EAAM,GAAGM,OAAQP,IAAK,CAClC,IAAKF,EAAI7B,eAAegC,EAAM,GAAGD,IAC7B,KAAM,IAAIW,OAAM9C,EAAQ,yCAA0CoC,EAAM,GAAGD,IAE/EF,GAAMA,EAAIG,EAAM,GAAGD,QAIvBF,GADKG,EAAM,GACLJ,EAAKI,EAAM,IAGXJ,EAAKQ,IAOf,IAJqB,YAAjBhC,EAASyB,KACTA,EAAMA,KAGNb,EAAGC,WAAW0B,KAAKX,EAAM,KAAOhB,EAAGI,SAASuB,KAAKX,EAAM,KAAyB,UAAjB5B,EAASyB,IAAoBe,MAAMf,GAClG,KAAM,IAAIgB,WAAUjD,EAAQ,0CAA2CQ,EAASyB,IAOpF,QAJIb,EAAGE,OAAOyB,KAAKX,EAAM,MACrBS,EAAcZ,GAAO,GAGjBG,EAAM,IACV,IAAK,IACDH,EAAMA,EAAIrB,SAAS,EACvB,MACA,KAAK,IACDqB,EAAMiB,OAAOC,aAAalB,EAC9B,MACA,KAAK,IACL,IAAK,IACDA,EAAMmB,SAASnB,EAAK,GACxB,MACA,KAAK,IACDA,EAAMoB,KAAKC,UAAUrB,EAAK,KAAMG,EAAM,GAAKgB,SAAShB,EAAM,IAAM,EACpE,MACA,KAAK,IACDH,EAAMG,EAAM,GAAKH,EAAIsB,cAAcnB,EAAM,IAAMH,EAAIsB,eACvD,MACA,KAAK,IACDtB,EAAMG,EAAM,GAAKoB,WAAWvB,GAAKwB,QAAQrB,EAAM,IAAMoB,WAAWvB,EACpE,MACA,KAAK,IACDA,EAAMG,EAAM,GAAKoB,WAAWvB,GAAKyB,YAAYtB,EAAM,IAAMoB,WAAWvB,EACxE,MACA,KAAK,IACDA,EAAMA,EAAIrB,SAAS,EACvB,MACA,KAAK,IACDqB,GAAQA,EAAMiB,OAAOjB,KAASG,EAAM,GAAKH,EAAI0B,UAAU,EAAGvB,EAAM,IAAMH,CAC1E,MACA,KAAK,IACDA,KAAc,CAClB,MACA,KAAK,IACDA,EAAMA,EAAIrB,SAAS,GACvB,MACA,KAAK,IACDqB,EAAMA,EAAIrB,SAAS,IAAIgD,cAG3BxC,EAAGG,KAAKwB,KAAKX,EAAM,IACnBQ,EAAOA,EAAOF,QAAUT,IAGpBb,EAAGE,OAAOyB,KAAKX,EAAM,KAASS,IAAeT,EAAM,GAKnDN,EAAO,IAJPA,EAAOe,EAAc,IAAM,IAC3BZ,EAAMA,EAAIrB,WAAWiD,QAAQzC,EAAGU,KAAM,KAK1CQ,EAAgBF,EAAM,GAAkB,MAAbA,EAAM,GAAa,IAAMA,EAAM,GAAG0B,OAAO,GAAK,IACzEvB,EAAaH,EAAM,IAAMN,EAAOG,GAAKS,OACrCL,EAAMD,EAAM,IAAMG,EAAa,EAAIxB,EAAWuB,EAAeC,GAAoB,GACjFK,EAAOA,EAAOF,QAAUN,EAAM,GAAKN,EAAOG,EAAMI,EAAyB,MAAlBC,EAAwBR,EAAOO,EAAMJ,EAAMI,EAAMP,EAAOG,GAI3H,MAAOW,GAAOzB,KAAK,KAGvBnB,EAAQG,SAERH,EAAQK,MAAQ,SAAS0D,GAErB,IADA,GAAIC,GAAOD,EAAK3B,KAAYL,KAAiBkC,EAAY,EAClDD,GAAM,CACT,GAAqC,QAAhC5B,EAAQhB,EAAGK,KAAKyC,KAAKF,IACtBjC,EAAWA,EAAWW,QAAUN,EAAM,OAErC,IAAuC,QAAlCA,EAAQhB,EAAGM,OAAOwC,KAAKF,IAC7BjC,EAAWA,EAAWW,QAAU,QAE/B,CAAA,GAA4C,QAAvCN,EAAQhB,EAAGO,YAAYuC,KAAKF,IAgClC,KAAM,IAAIG,aAAY,mCA/BtB,IAAI/B,EAAM,GAAI,CACV6B,GAAa,CACb,IAAIG,MAAiBC,EAAoBjC,EAAM,GAAIkC,IACnD,IAAuD,QAAlDA,EAAclD,EAAGnB,IAAIiE,KAAKG,IAe3B,KAAM,IAAIF,aAAY,+CAbtB,KADAC,EAAWA,EAAW1B,QAAU4B,EAAY,GACwC,MAA5ED,EAAoBA,EAAkBV,UAAUW,EAAY,GAAG5B,UACnE,GAA8D,QAAzD4B,EAAclD,EAAGQ,WAAWsC,KAAKG,IAClCD,EAAWA,EAAW1B,QAAU4B,EAAY,OAE3C,CAAA,GAAgE,QAA3DA,EAAclD,EAAGS,aAAaqC,KAAKG,IAIzC,KAAM,IAAIF,aAAY,+CAHtBC,GAAWA,EAAW1B,QAAU4B,EAAY,GAUxDlC,EAAM,GAAKgC,MAGXH,IAAa,CAEjB,IAAkB,IAAdA,EACA,KAAM,IAAInB,OAAM,4EAEpBf,GAAWA,EAAWW,QAAUN,EAKpC4B,EAAOA,EAAKL,UAAUvB,EAAM,GAAGM,QAEnC,MAAOX,GAGX,IAAIwC,GAAW,SAASR,EAAK/B,EAAMwC,GAG/B,MAFAA,IAASxC,OAAYnB,MAAM,GAC3B2D,EAAMC,OAAO,EAAG,EAAGV,GACZ/D,EAAQ0E,MAAM,KAAMF,GAiBR,oBAAZG,UACPA,QAAQ3E,QAAUA,EAClB2E,QAAQJ,SAAWA,IAGnBxE,EAAOC,QAAUA,EACjBD,EAAOwE,SAAWA,EAEI,kBAAXK,SAAyBA,OAAOC,KACvCD,OAAO,WACH,OACI5E,QAASA,EACTuE,SAAUA,OAKT,mBAAXxE,QAAyB+E,KAAO/E"} \ No newline at end of file diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/sprintf-js/gruntfile.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/sprintf-js/gruntfile.js new file mode 100644 index 00000000..246e1c3b --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/sprintf-js/gruntfile.js @@ -0,0 +1,36 @@ +module.exports = function(grunt) { + grunt.initConfig({ + pkg: grunt.file.readJSON("package.json"), + + uglify: { + options: { + banner: "/*! <%= pkg.name %> | <%= pkg.author %> | <%= pkg.license %> */\n", + sourceMap: true + }, + build: { + files: [ + { + src: "src/sprintf.js", + dest: "dist/sprintf.min.js" + }, + { + src: "src/angular-sprintf.js", + dest: "dist/angular-sprintf.min.js" + } + ] + } + }, + + watch: { + js: { + files: "src/*.js", + tasks: ["uglify"] + } + } + }) + + grunt.loadNpmTasks("grunt-contrib-uglify") + grunt.loadNpmTasks("grunt-contrib-watch") + + grunt.registerTask("default", ["uglify", "watch"]) +} diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/sprintf-js/package.json b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/sprintf-js/package.json new file mode 100644 index 00000000..6e9f1d73 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/sprintf-js/package.json @@ -0,0 +1,52 @@ +{ + "name": "sprintf-js", + "version": "1.0.3", + "description": "JavaScript sprintf implementation", + "author": { + "name": "Alexandru Marasteanu", + "email": "hello@alexei.ro", + "url": "http://alexei.ro/" + }, + "main": "src/sprintf.js", + "scripts": { + "test": "mocha test/test.js" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/alexei/sprintf.js.git" + }, + "license": "BSD-3-Clause", + "devDependencies": { + "mocha": "*", + "grunt": "*", + "grunt-contrib-watch": "*", + "grunt-contrib-uglify": "*" + }, + "gitHead": "747b806c2dab5b64d5c9958c42884946a187c3b1", + "bugs": { + "url": "https://github.com/alexei/sprintf.js/issues" + }, + "homepage": "https://github.com/alexei/sprintf.js#readme", + "_id": "sprintf-js@1.0.3", + "_shasum": "04e6926f662895354f3dd015203633b857297e2c", + "_from": "sprintf-js@>=1.0.2 <1.1.0", + "_npmVersion": "2.10.1", + "_nodeVersion": "0.12.4", + "_npmUser": { + "name": "alexei", + "email": "hello@alexei.ro" + }, + "dist": { + "shasum": "04e6926f662895354f3dd015203633b857297e2c", + "tarball": "http://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" + }, + "maintainers": [ + { + "name": "alexei", + "email": "hello@alexei.ro" + } + ], + "directories": {}, + "_resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "readme": "ERROR: No README data found!" +} diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/sprintf-js/src/angular-sprintf.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/sprintf-js/src/angular-sprintf.js new file mode 100644 index 00000000..9c69123b --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/sprintf-js/src/angular-sprintf.js @@ -0,0 +1,18 @@ +angular. + module("sprintf", []). + filter("sprintf", function() { + return function() { + return sprintf.apply(null, arguments) + } + }). + filter("fmt", ["$filter", function($filter) { + return $filter("sprintf") + }]). + filter("vsprintf", function() { + return function(format, argv) { + return vsprintf(format, argv) + } + }). + filter("vfmt", ["$filter", function($filter) { + return $filter("vsprintf") + }]) diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/sprintf-js/src/sprintf.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/sprintf-js/src/sprintf.js new file mode 100644 index 00000000..c0fc7c08 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/sprintf-js/src/sprintf.js @@ -0,0 +1,208 @@ +(function(window) { + var re = { + not_string: /[^s]/, + number: /[diefg]/, + json: /[j]/, + not_json: /[^j]/, + text: /^[^\x25]+/, + modulo: /^\x25{2}/, + placeholder: /^\x25(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-gijosuxX])/, + key: /^([a-z_][a-z_\d]*)/i, + key_access: /^\.([a-z_][a-z_\d]*)/i, + index_access: /^\[(\d+)\]/, + sign: /^[\+\-]/ + } + + function sprintf() { + var key = arguments[0], cache = sprintf.cache + if (!(cache[key] && cache.hasOwnProperty(key))) { + cache[key] = sprintf.parse(key) + } + return sprintf.format.call(null, cache[key], arguments) + } + + sprintf.format = function(parse_tree, argv) { + var cursor = 1, tree_length = parse_tree.length, node_type = "", arg, output = [], i, k, match, pad, pad_character, pad_length, is_positive = true, sign = "" + for (i = 0; i < tree_length; i++) { + node_type = get_type(parse_tree[i]) + if (node_type === "string") { + output[output.length] = parse_tree[i] + } + else if (node_type === "array") { + match = parse_tree[i] // convenience purposes only + if (match[2]) { // keyword argument + arg = argv[cursor] + for (k = 0; k < match[2].length; k++) { + if (!arg.hasOwnProperty(match[2][k])) { + throw new Error(sprintf("[sprintf] property '%s' does not exist", match[2][k])) + } + arg = arg[match[2][k]] + } + } + else if (match[1]) { // positional argument (explicit) + arg = argv[match[1]] + } + else { // positional argument (implicit) + arg = argv[cursor++] + } + + if (get_type(arg) == "function") { + arg = arg() + } + + if (re.not_string.test(match[8]) && re.not_json.test(match[8]) && (get_type(arg) != "number" && isNaN(arg))) { + throw new TypeError(sprintf("[sprintf] expecting number but found %s", get_type(arg))) + } + + if (re.number.test(match[8])) { + is_positive = arg >= 0 + } + + switch (match[8]) { + case "b": + arg = arg.toString(2) + break + case "c": + arg = String.fromCharCode(arg) + break + case "d": + case "i": + arg = parseInt(arg, 10) + break + case "j": + arg = JSON.stringify(arg, null, match[6] ? parseInt(match[6]) : 0) + break + case "e": + arg = match[7] ? arg.toExponential(match[7]) : arg.toExponential() + break + case "f": + arg = match[7] ? parseFloat(arg).toFixed(match[7]) : parseFloat(arg) + break + case "g": + arg = match[7] ? parseFloat(arg).toPrecision(match[7]) : parseFloat(arg) + break + case "o": + arg = arg.toString(8) + break + case "s": + arg = ((arg = String(arg)) && match[7] ? arg.substring(0, match[7]) : arg) + break + case "u": + arg = arg >>> 0 + break + case "x": + arg = arg.toString(16) + break + case "X": + arg = arg.toString(16).toUpperCase() + break + } + if (re.json.test(match[8])) { + output[output.length] = arg + } + else { + if (re.number.test(match[8]) && (!is_positive || match[3])) { + sign = is_positive ? "+" : "-" + arg = arg.toString().replace(re.sign, "") + } + else { + sign = "" + } + pad_character = match[4] ? match[4] === "0" ? "0" : match[4].charAt(1) : " " + pad_length = match[6] - (sign + arg).length + pad = match[6] ? (pad_length > 0 ? str_repeat(pad_character, pad_length) : "") : "" + output[output.length] = match[5] ? sign + arg + pad : (pad_character === "0" ? sign + pad + arg : pad + sign + arg) + } + } + } + return output.join("") + } + + sprintf.cache = {} + + sprintf.parse = function(fmt) { + var _fmt = fmt, match = [], parse_tree = [], arg_names = 0 + while (_fmt) { + if ((match = re.text.exec(_fmt)) !== null) { + parse_tree[parse_tree.length] = match[0] + } + else if ((match = re.modulo.exec(_fmt)) !== null) { + parse_tree[parse_tree.length] = "%" + } + else if ((match = re.placeholder.exec(_fmt)) !== null) { + if (match[2]) { + arg_names |= 1 + var field_list = [], replacement_field = match[2], field_match = [] + if ((field_match = re.key.exec(replacement_field)) !== null) { + field_list[field_list.length] = field_match[1] + while ((replacement_field = replacement_field.substring(field_match[0].length)) !== "") { + if ((field_match = re.key_access.exec(replacement_field)) !== null) { + field_list[field_list.length] = field_match[1] + } + else if ((field_match = re.index_access.exec(replacement_field)) !== null) { + field_list[field_list.length] = field_match[1] + } + else { + throw new SyntaxError("[sprintf] failed to parse named argument key") + } + } + } + else { + throw new SyntaxError("[sprintf] failed to parse named argument key") + } + match[2] = field_list + } + else { + arg_names |= 2 + } + if (arg_names === 3) { + throw new Error("[sprintf] mixing positional and named placeholders is not (yet) supported") + } + parse_tree[parse_tree.length] = match + } + else { + throw new SyntaxError("[sprintf] unexpected placeholder") + } + _fmt = _fmt.substring(match[0].length) + } + return parse_tree + } + + var vsprintf = function(fmt, argv, _argv) { + _argv = (argv || []).slice(0) + _argv.splice(0, 0, fmt) + return sprintf.apply(null, _argv) + } + + /** + * helpers + */ + function get_type(variable) { + return Object.prototype.toString.call(variable).slice(8, -1).toLowerCase() + } + + function str_repeat(input, multiplier) { + return Array(multiplier + 1).join(input) + } + + /** + * export to either browser or node.js + */ + if (typeof exports !== "undefined") { + exports.sprintf = sprintf + exports.vsprintf = vsprintf + } + else { + window.sprintf = sprintf + window.vsprintf = vsprintf + + if (typeof define === "function" && define.amd) { + define(function() { + return { + sprintf: sprintf, + vsprintf: vsprintf + } + }) + } + } +})(typeof window === "undefined" ? this : window); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/sprintf-js/test/test.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/sprintf-js/test/test.js new file mode 100644 index 00000000..6f57b253 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/node_modules/sprintf-js/test/test.js @@ -0,0 +1,82 @@ +var assert = require("assert"), + sprintfjs = require("../src/sprintf.js"), + sprintf = sprintfjs.sprintf, + vsprintf = sprintfjs.vsprintf + +describe("sprintfjs", function() { + var pi = 3.141592653589793 + + it("should return formated strings for simple placeholders", function() { + assert.equal("%", sprintf("%%")) + assert.equal("10", sprintf("%b", 2)) + assert.equal("A", sprintf("%c", 65)) + assert.equal("2", sprintf("%d", 2)) + assert.equal("2", sprintf("%i", 2)) + assert.equal("2", sprintf("%d", "2")) + assert.equal("2", sprintf("%i", "2")) + assert.equal('{"foo":"bar"}', sprintf("%j", {foo: "bar"})) + assert.equal('["foo","bar"]', sprintf("%j", ["foo", "bar"])) + assert.equal("2e+0", sprintf("%e", 2)) + assert.equal("2", sprintf("%u", 2)) + assert.equal("4294967294", sprintf("%u", -2)) + assert.equal("2.2", sprintf("%f", 2.2)) + assert.equal("3.141592653589793", sprintf("%g", pi)) + assert.equal("10", sprintf("%o", 8)) + assert.equal("%s", sprintf("%s", "%s")) + assert.equal("ff", sprintf("%x", 255)) + assert.equal("FF", sprintf("%X", 255)) + assert.equal("Polly wants a cracker", sprintf("%2$s %3$s a %1$s", "cracker", "Polly", "wants")) + assert.equal("Hello world!", sprintf("Hello %(who)s!", {"who": "world"})) + }) + + it("should return formated strings for complex placeholders", function() { + // sign + assert.equal("2", sprintf("%d", 2)) + assert.equal("-2", sprintf("%d", -2)) + assert.equal("+2", sprintf("%+d", 2)) + assert.equal("-2", sprintf("%+d", -2)) + assert.equal("2", sprintf("%i", 2)) + assert.equal("-2", sprintf("%i", -2)) + assert.equal("+2", sprintf("%+i", 2)) + assert.equal("-2", sprintf("%+i", -2)) + assert.equal("2.2", sprintf("%f", 2.2)) + assert.equal("-2.2", sprintf("%f", -2.2)) + assert.equal("+2.2", sprintf("%+f", 2.2)) + assert.equal("-2.2", sprintf("%+f", -2.2)) + assert.equal("-2.3", sprintf("%+.1f", -2.34)) + assert.equal("-0.0", sprintf("%+.1f", -0.01)) + assert.equal("3.14159", sprintf("%.6g", pi)) + assert.equal("3.14", sprintf("%.3g", pi)) + assert.equal("3", sprintf("%.1g", pi)) + assert.equal("-000000123", sprintf("%+010d", -123)) + assert.equal("______-123", sprintf("%+'_10d", -123)) + assert.equal("-234.34 123.2", sprintf("%f %f", -234.34, 123.2)) + + // padding + assert.equal("-0002", sprintf("%05d", -2)) + assert.equal("-0002", sprintf("%05i", -2)) + assert.equal(" <", sprintf("%5s", "<")) + assert.equal("0000<", sprintf("%05s", "<")) + assert.equal("____<", sprintf("%'_5s", "<")) + assert.equal("> ", sprintf("%-5s", ">")) + assert.equal(">0000", sprintf("%0-5s", ">")) + assert.equal(">____", sprintf("%'_-5s", ">")) + assert.equal("xxxxxx", sprintf("%5s", "xxxxxx")) + assert.equal("1234", sprintf("%02u", 1234)) + assert.equal(" -10.235", sprintf("%8.3f", -10.23456)) + assert.equal("-12.34 xxx", sprintf("%f %s", -12.34, "xxx")) + assert.equal('{\n "foo": "bar"\n}', sprintf("%2j", {foo: "bar"})) + assert.equal('[\n "foo",\n "bar"\n]', sprintf("%2j", ["foo", "bar"])) + + // precision + assert.equal("2.3", sprintf("%.1f", 2.345)) + assert.equal("xxxxx", sprintf("%5.5s", "xxxxxx")) + assert.equal(" x", sprintf("%5.1s", "xxxxxx")) + + }) + + it("should return formated strings for callbacks", function() { + assert.equal("foobar", sprintf("%s", function() { return "foobar" })) + assert.equal(Date.now(), sprintf("%s", Date.now)) // should pass... + }) +}) diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/package.json b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/package.json new file mode 100644 index 00000000..3c1b7fd7 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/argparse/package.json @@ -0,0 +1,62 @@ +{ + "name": "argparse", + "description": "Very powerful CLI arguments parser. Native port of argparse - python's options parsing library", + "version": "1.0.2", + "keywords": [ + "cli", + "parser", + "argparse", + "option", + "args" + ], + "homepage": "https://github.com/nodeca/argparse", + "contributors": [ + { + "name": "Eugene Shkuropat" + }, + { + "name": "Paul Jacobson" + } + ], + "bugs": { + "url": "https://github.com/nodeca/argparse/issues" + }, + "license": "MIT", + "repository": { + "type": "git", + "url": "git://github.com/nodeca/argparse.git" + }, + "main": "./index.js", + "scripts": { + "test": "make test" + }, + "dependencies": { + "lodash": ">= 3.2.0 < 4.0.0", + "sprintf-js": "~1.0.2" + }, + "devDependencies": { + "mocha": "*" + }, + "gitHead": "990f1b5332e70dd3c1c437d2f4077a2b63ac9674", + "_id": "argparse@1.0.2", + "_shasum": "bcfae39059656d1973d0b9e6a1a74154b5a9a136", + "_from": "argparse@>=1.0.2 <1.1.0", + "_npmVersion": "1.4.28", + "_npmUser": { + "name": "vitaly", + "email": "vitaly@rcdesign.ru" + }, + "maintainers": [ + { + "name": "vitaly", + "email": "vitaly@rcdesign.ru" + } + ], + "dist": { + "shasum": "bcfae39059656d1973d0b9e6a1a74154b5a9a136", + "tarball": "http://registry.npmjs.org/argparse/-/argparse-1.0.2.tgz" + }, + "directories": {}, + "_resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.2.tgz", + "readme": "ERROR: No README data found!" +} diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/esprima/ChangeLog b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/esprima/ChangeLog new file mode 100644 index 00000000..72d64b5d --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/esprima/ChangeLog @@ -0,0 +1,111 @@ +2015-04-17: Version 2.2.0 + + * Support ES6 import and export declarations (issue 1000) + * Fix line terminator before arrow not recognized as error (issue 1009) + * Support ES6 destructuring (issue 1045) + * Support ES6 template literal (issue 1074) + * Fix the handling of invalid/incomplete string escape sequences (issue 1106) + * Fix ES3 static member access restriction (issue 1120) + * Support for `super` in ES6 class (issue 1147) + +2015-03-09: Version 2.1.0 + + * Support ES6 class (issue 1001) + * Support ES6 rest parameter (issue 1011) + * Expand the location of property getter, setter, and methods (issue 1029) + * Enable TryStatement transition to a single handler (issue 1031) + * Support ES6 computed property name (issue 1037) + * Tolerate unclosed block comment (issue 1041) + * Support ES6 lexical declaration (issue 1065) + +2015-02-06: Version 2.0.0 + + * Support ES6 arrow function (issue 517) + * Support ES6 Unicode code point escape (issue 521) + * Improve the speed and accuracy of comment attachment (issue 522) + * Support ES6 default parameter (issue 519) + * Support ES6 regular expression flags (issue 557) + * Fix scanning of implicit octal literals (issue 565) + * Fix the handling of automatic semicolon insertion (issue 574) + * Support ES6 method definition (issue 620) + * Support ES6 octal integer literal (issue 621) + * Support ES6 binary integer literal (issue 622) + * Support ES6 object literal property value shorthand (issue 624) + +2015-03-03: Version 1.2.5 + + * Fix scanning of implicit octal literals (issue 565) + +2015-02-05: Version 1.2.4 + + * Fix parsing of LeftHandSideExpression in ForInStatement (issue 560) + * Fix the handling of automatic semicolon insertion (issue 574) + +2015-01-18: Version 1.2.3 + + * Fix division by this (issue 616) + +2014-05-18: Version 1.2.2 + + * Fix duplicated tokens when collecting comments (issue 537) + +2014-05-04: Version 1.2.1 + + * Ensure that Program node may still have leading comments (issue 536) + +2014-04-29: Version 1.2.0 + + * Fix semicolon handling for expression statement (issue 462, 533) + * Disallow escaped characters in regular expression flags (issue 503) + * Performance improvement for location tracking (issue 520) + * Improve the speed of comment attachment (issue 522) + +2014-03-26: Version 1.1.1 + + * Fix token handling of forward slash after an array literal (issue 512) + +2014-03-23: Version 1.1.0 + + * Optionally attach comments to the owning syntax nodes (issue 197) + * Simplify binary parsing with stack-based shift reduce (issue 352) + * Always include the raw source of literals (issue 376) + * Add optional input source information (issue 386) + * Tokenizer API for pure lexical scanning (issue 398) + * Improve the web site and its online demos (issue 337, 400, 404) + * Performance improvement for location tracking (issue 417, 424) + * Support HTML comment syntax (issue 451) + * Drop support for legacy browsers (issue 474) + +2013-08-27: Version 1.0.4 + + * Minimize the payload for packages (issue 362) + * Fix missing cases on an empty switch statement (issue 436) + * Support escaped ] in regexp literal character classes (issue 442) + * Tolerate invalid left-hand side expression (issue 130) + +2013-05-17: Version 1.0.3 + + * Variable declaration needs at least one declarator (issue 391) + * Fix benchmark's variance unit conversion (issue 397) + * IE < 9: \v should be treated as vertical tab (issue 405) + * Unary expressions should always have prefix: true (issue 418) + * Catch clause should only accept an identifier (issue 423) + * Tolerate setters without parameter (issue 426) + +2012-11-02: Version 1.0.2 + + Improvement: + + * Fix esvalidate JUnit output upon a syntax error (issue 374) + +2012-10-28: Version 1.0.1 + + Improvements: + + * esvalidate understands shebang in a Unix shell script (issue 361) + * esvalidate treats fatal parsing failure as an error (issue 361) + * Reduce Node.js package via .npmignore (issue 362) + +2012-10-22: Version 1.0.0 + + Initial release. diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/esprima/LICENSE.BSD b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/esprima/LICENSE.BSD new file mode 100644 index 00000000..3e580c35 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/esprima/LICENSE.BSD @@ -0,0 +1,19 @@ +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/esprima/README.md b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/esprima/README.md new file mode 100644 index 00000000..9ba7c0f5 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/esprima/README.md @@ -0,0 +1,23 @@ +**Esprima** ([esprima.org](http://esprima.org), BSD license) is a high performance, +standard-compliant [ECMAScript](http://www.ecma-international.org/publications/standards/Ecma-262.htm) +parser written in ECMAScript (also popularly known as +[JavaScript](https://en.wikipedia.org/wiki/JavaScript). +Esprima is created and maintained by [Ariya Hidayat](https://twitter.com/ariyahidayat), +with the help of [many contributors](https://github.com/jquery/esprima/contributors). + +### Features + +- Full support for ECMAScript 5.1 ([ECMA-262](http://www.ecma-international.org/publications/standards/Ecma-262.htm)) +- Sensible [syntax tree format](https://github.com/estree/estree/blob/master/spec.md) as standardized by [EStree project](https://github.com/estree/estree) +- Optional tracking of syntax node location (index-based and line-column) +- Heavily tested (~1000 [unit tests](https://github.com/jquery/esprima/tree/master/test/fixtures) with [full code coverage](https://travis-ci.org/jquery/esprima)) +- [Partial support](https://github.com/jquery/esprima/issues/1099) for ECMAScript 6 + +Esprima serves as a **building block** for some JavaScript +language tools, from [code instrumentation](http://esprima.org/demo/functiontrace.html) +to [editor autocompletion](http://esprima.org/demo/autocomplete.html). + +Esprima runs on many popular web browsers, as well as other ECMAScript platforms such as +[Rhino](http://www.mozilla.org/rhino), [Nashorn](http://openjdk.java.net/projects/nashorn/), and [Node.js](https://npmjs.org/package/esprima). + +For more information, check the web site [esprima.org](http://esprima.org). diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/esprima/bin/esparse.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/esprima/bin/esparse.js new file mode 100644 index 00000000..56036669 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/esprima/bin/esparse.js @@ -0,0 +1,127 @@ +#!/usr/bin/env node +/* + Copyright (C) 2012 Ariya Hidayat <ariya.hidayat@gmail.com> + Copyright (C) 2011 Ariya Hidayat <ariya.hidayat@gmail.com> + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/*jslint sloppy:true node:true rhino:true */ + +var fs, esprima, fname, content, options, syntax; + +if (typeof require === 'function') { + fs = require('fs'); + esprima = require('esprima'); +} else if (typeof load === 'function') { + try { + load('esprima.js'); + } catch (e) { + load('../esprima.js'); + } +} + +// Shims to Node.js objects when running under Rhino. +if (typeof console === 'undefined' && typeof process === 'undefined') { + console = { log: print }; + fs = { readFileSync: readFile }; + process = { argv: arguments, exit: quit }; + process.argv.unshift('esparse.js'); + process.argv.unshift('rhino'); +} + +function showUsage() { + console.log('Usage:'); + console.log(' esparse [options] file.js'); + console.log(); + console.log('Available options:'); + console.log(); + console.log(' --comment Gather all line and block comments in an array'); + console.log(' --loc Include line-column location info for each syntax node'); + console.log(' --range Include index-based range for each syntax node'); + console.log(' --raw Display the raw value of literals'); + console.log(' --tokens List all tokens in an array'); + console.log(' --tolerant Tolerate errors on a best-effort basis (experimental)'); + console.log(' -v, --version Shows program version'); + console.log(); + process.exit(1); +} + +if (process.argv.length <= 2) { + showUsage(); +} + +options = {}; + +process.argv.splice(2).forEach(function (entry) { + + if (entry === '-h' || entry === '--help') { + showUsage(); + } else if (entry === '-v' || entry === '--version') { + console.log('ECMAScript Parser (using Esprima version', esprima.version, ')'); + console.log(); + process.exit(0); + } else if (entry === '--comment') { + options.comment = true; + } else if (entry === '--loc') { + options.loc = true; + } else if (entry === '--range') { + options.range = true; + } else if (entry === '--raw') { + options.raw = true; + } else if (entry === '--tokens') { + options.tokens = true; + } else if (entry === '--tolerant') { + options.tolerant = true; + } else if (entry.slice(0, 2) === '--') { + console.log('Error: unknown option ' + entry + '.'); + process.exit(1); + } else if (typeof fname === 'string') { + console.log('Error: more than one input file.'); + process.exit(1); + } else { + fname = entry; + } +}); + +if (typeof fname !== 'string') { + console.log('Error: no input file.'); + process.exit(1); +} + +// Special handling for regular expression literal since we need to +// convert it to a string literal, otherwise it will be decoded +// as object "{}" and the regular expression would be lost. +function adjustRegexLiteral(key, value) { + if (key === 'value' && value instanceof RegExp) { + value = value.toString(); + } + return value; +} + +try { + content = fs.readFileSync(fname, 'utf-8'); + syntax = esprima.parse(content, options); + console.log(JSON.stringify(syntax, adjustRegexLiteral, 4)); +} catch (e) { + console.log('Error: ' + e.message); + process.exit(1); +} diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/esprima/bin/esvalidate.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/esprima/bin/esvalidate.js new file mode 100644 index 00000000..dddd8a2a --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/esprima/bin/esvalidate.js @@ -0,0 +1,199 @@ +#!/usr/bin/env node +/* + Copyright (C) 2012 Ariya Hidayat <ariya.hidayat@gmail.com> + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/*jslint sloppy:true plusplus:true node:true rhino:true */ +/*global phantom:true */ + +var fs, system, esprima, options, fnames, count; + +if (typeof esprima === 'undefined') { + // PhantomJS can only require() relative files + if (typeof phantom === 'object') { + fs = require('fs'); + system = require('system'); + esprima = require('./esprima'); + } else if (typeof require === 'function') { + fs = require('fs'); + esprima = require('esprima'); + } else if (typeof load === 'function') { + try { + load('esprima.js'); + } catch (e) { + load('../esprima.js'); + } + } +} + +// Shims to Node.js objects when running under PhantomJS 1.7+. +if (typeof phantom === 'object') { + fs.readFileSync = fs.read; + process = { + argv: [].slice.call(system.args), + exit: phantom.exit + }; + process.argv.unshift('phantomjs'); +} + +// Shims to Node.js objects when running under Rhino. +if (typeof console === 'undefined' && typeof process === 'undefined') { + console = { log: print }; + fs = { readFileSync: readFile }; + process = { argv: arguments, exit: quit }; + process.argv.unshift('esvalidate.js'); + process.argv.unshift('rhino'); +} + +function showUsage() { + console.log('Usage:'); + console.log(' esvalidate [options] file.js'); + console.log(); + console.log('Available options:'); + console.log(); + console.log(' --format=type Set the report format, plain (default) or junit'); + console.log(' -v, --version Print program version'); + console.log(); + process.exit(1); +} + +if (process.argv.length <= 2) { + showUsage(); +} + +options = { + format: 'plain' +}; + +fnames = []; + +process.argv.splice(2).forEach(function (entry) { + + if (entry === '-h' || entry === '--help') { + showUsage(); + } else if (entry === '-v' || entry === '--version') { + console.log('ECMAScript Validator (using Esprima version', esprima.version, ')'); + console.log(); + process.exit(0); + } else if (entry.slice(0, 9) === '--format=') { + options.format = entry.slice(9); + if (options.format !== 'plain' && options.format !== 'junit') { + console.log('Error: unknown report format ' + options.format + '.'); + process.exit(1); + } + } else if (entry.slice(0, 2) === '--') { + console.log('Error: unknown option ' + entry + '.'); + process.exit(1); + } else { + fnames.push(entry); + } +}); + +if (fnames.length === 0) { + console.log('Error: no input file.'); + process.exit(1); +} + +if (options.format === 'junit') { + console.log('<?xml version="1.0" encoding="UTF-8"?>'); + console.log('<testsuites>'); +} + +count = 0; +fnames.forEach(function (fname) { + var content, timestamp, syntax, name; + try { + content = fs.readFileSync(fname, 'utf-8'); + + if (content[0] === '#' && content[1] === '!') { + content = '//' + content.substr(2, content.length); + } + + timestamp = Date.now(); + syntax = esprima.parse(content, { tolerant: true }); + + if (options.format === 'junit') { + + name = fname; + if (name.lastIndexOf('/') >= 0) { + name = name.slice(name.lastIndexOf('/') + 1); + } + + console.log('<testsuite name="' + fname + '" errors="0" ' + + ' failures="' + syntax.errors.length + '" ' + + ' tests="' + syntax.errors.length + '" ' + + ' time="' + Math.round((Date.now() - timestamp) / 1000) + + '">'); + + syntax.errors.forEach(function (error) { + var msg = error.message; + msg = msg.replace(/^Line\ [0-9]*\:\ /, ''); + console.log(' <testcase name="Line ' + error.lineNumber + ': ' + msg + '" ' + + ' time="0">'); + console.log(' <error type="SyntaxError" message="' + error.message + '">' + + error.message + '(' + name + ':' + error.lineNumber + ')' + + '</error>'); + console.log(' </testcase>'); + }); + + console.log('</testsuite>'); + + } else if (options.format === 'plain') { + + syntax.errors.forEach(function (error) { + var msg = error.message; + msg = msg.replace(/^Line\ [0-9]*\:\ /, ''); + msg = fname + ':' + error.lineNumber + ': ' + msg; + console.log(msg); + ++count; + }); + + } + } catch (e) { + ++count; + if (options.format === 'junit') { + console.log('<testsuite name="' + fname + '" errors="1" failures="0" tests="1" ' + + ' time="' + Math.round((Date.now() - timestamp) / 1000) + '">'); + console.log(' <testcase name="' + e.message + '" ' + ' time="0">'); + console.log(' <error type="ParseError" message="' + e.message + '">' + + e.message + '(' + fname + ((e.lineNumber) ? ':' + e.lineNumber : '') + + ')</error>'); + console.log(' </testcase>'); + console.log('</testsuite>'); + } else { + console.log('Error: ' + e.message); + } + } +}); + +if (options.format === 'junit') { + console.log('</testsuites>'); +} + +if (count > 0) { + process.exit(1); +} + +if (count === 0 && typeof phantom === 'object') { + process.exit(0); +} diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/esprima/esprima.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/esprima/esprima.js new file mode 100644 index 00000000..2d7fc11c --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/esprima/esprima.js @@ -0,0 +1,5321 @@ +/* + Copyright (C) 2013 Ariya Hidayat <ariya.hidayat@gmail.com> + Copyright (C) 2013 Thaddee Tyl <thaddee.tyl@gmail.com> + Copyright (C) 2013 Mathias Bynens <mathias@qiwi.be> + Copyright (C) 2012 Ariya Hidayat <ariya.hidayat@gmail.com> + Copyright (C) 2012 Mathias Bynens <mathias@qiwi.be> + Copyright (C) 2012 Joost-Wim Boekesteijn <joost-wim@boekesteijn.nl> + Copyright (C) 2012 Kris Kowal <kris.kowal@cixar.com> + Copyright (C) 2012 Yusuke Suzuki <utatane.tea@gmail.com> + Copyright (C) 2012 Arpad Borsos <arpad.borsos@googlemail.com> + Copyright (C) 2011 Ariya Hidayat <ariya.hidayat@gmail.com> + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +(function (root, factory) { + 'use strict'; + + // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, + // Rhino, and plain browser loading. + + /* istanbul ignore next */ + if (typeof define === 'function' && define.amd) { + define(['exports'], factory); + } else if (typeof exports !== 'undefined') { + factory(exports); + } else { + factory((root.esprima = {})); + } +}(this, function (exports) { + 'use strict'; + + var Token, + TokenName, + FnExprTokens, + Syntax, + PlaceHolders, + Messages, + Regex, + source, + strict, + sourceType, + index, + lineNumber, + lineStart, + hasLineTerminator, + lastIndex, + lastLineNumber, + lastLineStart, + startIndex, + startLineNumber, + startLineStart, + scanning, + length, + lookahead, + state, + extra, + isBindingElement, + isAssignmentTarget, + firstCoverInitializedNameError; + + Token = { + BooleanLiteral: 1, + EOF: 2, + Identifier: 3, + Keyword: 4, + NullLiteral: 5, + NumericLiteral: 6, + Punctuator: 7, + StringLiteral: 8, + RegularExpression: 9, + Template: 10 + }; + + TokenName = {}; + TokenName[Token.BooleanLiteral] = 'Boolean'; + TokenName[Token.EOF] = '<end>'; + TokenName[Token.Identifier] = 'Identifier'; + TokenName[Token.Keyword] = 'Keyword'; + TokenName[Token.NullLiteral] = 'Null'; + TokenName[Token.NumericLiteral] = 'Numeric'; + TokenName[Token.Punctuator] = 'Punctuator'; + TokenName[Token.StringLiteral] = 'String'; + TokenName[Token.RegularExpression] = 'RegularExpression'; + TokenName[Token.Template] = 'Template'; + + // A function following one of those tokens is an expression. + FnExprTokens = ['(', '{', '[', 'in', 'typeof', 'instanceof', 'new', + 'return', 'case', 'delete', 'throw', 'void', + // assignment operators + '=', '+=', '-=', '*=', '/=', '%=', '<<=', '>>=', '>>>=', + '&=', '|=', '^=', ',', + // binary/unary operators + '+', '-', '*', '/', '%', '++', '--', '<<', '>>', '>>>', '&', + '|', '^', '!', '~', '&&', '||', '?', ':', '===', '==', '>=', + '<=', '<', '>', '!=', '!==']; + + Syntax = { + AssignmentExpression: 'AssignmentExpression', + AssignmentPattern: 'AssignmentPattern', + ArrayExpression: 'ArrayExpression', + ArrayPattern: 'ArrayPattern', + ArrowFunctionExpression: 'ArrowFunctionExpression', + BlockStatement: 'BlockStatement', + BinaryExpression: 'BinaryExpression', + BreakStatement: 'BreakStatement', + CallExpression: 'CallExpression', + CatchClause: 'CatchClause', + ClassBody: 'ClassBody', + ClassDeclaration: 'ClassDeclaration', + ClassExpression: 'ClassExpression', + ConditionalExpression: 'ConditionalExpression', + ContinueStatement: 'ContinueStatement', + DoWhileStatement: 'DoWhileStatement', + DebuggerStatement: 'DebuggerStatement', + EmptyStatement: 'EmptyStatement', + ExportAllDeclaration: 'ExportAllDeclaration', + ExportDefaultDeclaration: 'ExportDefaultDeclaration', + ExportNamedDeclaration: 'ExportNamedDeclaration', + ExportSpecifier: 'ExportSpecifier', + ExpressionStatement: 'ExpressionStatement', + ForStatement: 'ForStatement', + ForInStatement: 'ForInStatement', + FunctionDeclaration: 'FunctionDeclaration', + FunctionExpression: 'FunctionExpression', + Identifier: 'Identifier', + IfStatement: 'IfStatement', + ImportDeclaration: 'ImportDeclaration', + ImportDefaultSpecifier: 'ImportDefaultSpecifier', + ImportNamespaceSpecifier: 'ImportNamespaceSpecifier', + ImportSpecifier: 'ImportSpecifier', + Literal: 'Literal', + LabeledStatement: 'LabeledStatement', + LogicalExpression: 'LogicalExpression', + MemberExpression: 'MemberExpression', + MethodDefinition: 'MethodDefinition', + NewExpression: 'NewExpression', + ObjectExpression: 'ObjectExpression', + ObjectPattern: 'ObjectPattern', + Program: 'Program', + Property: 'Property', + RestElement: 'RestElement', + ReturnStatement: 'ReturnStatement', + SequenceExpression: 'SequenceExpression', + SpreadElement: 'SpreadElement', + Super: 'Super', + SwitchCase: 'SwitchCase', + SwitchStatement: 'SwitchStatement', + TaggedTemplateExpression: 'TaggedTemplateExpression', + TemplateElement: 'TemplateElement', + TemplateLiteral: 'TemplateLiteral', + ThisExpression: 'ThisExpression', + ThrowStatement: 'ThrowStatement', + TryStatement: 'TryStatement', + UnaryExpression: 'UnaryExpression', + UpdateExpression: 'UpdateExpression', + VariableDeclaration: 'VariableDeclaration', + VariableDeclarator: 'VariableDeclarator', + WhileStatement: 'WhileStatement', + WithStatement: 'WithStatement' + }; + + PlaceHolders = { + ArrowParameterPlaceHolder: 'ArrowParameterPlaceHolder' + }; + + // Error messages should be identical to V8. + Messages = { + UnexpectedToken: 'Unexpected token %0', + UnexpectedNumber: 'Unexpected number', + UnexpectedString: 'Unexpected string', + UnexpectedIdentifier: 'Unexpected identifier', + UnexpectedReserved: 'Unexpected reserved word', + UnexpectedTemplate: 'Unexpected quasi %0', + UnexpectedEOS: 'Unexpected end of input', + NewlineAfterThrow: 'Illegal newline after throw', + InvalidRegExp: 'Invalid regular expression', + UnterminatedRegExp: 'Invalid regular expression: missing /', + InvalidLHSInAssignment: 'Invalid left-hand side in assignment', + InvalidLHSInForIn: 'Invalid left-hand side in for-in', + MultipleDefaultsInSwitch: 'More than one default clause in switch statement', + NoCatchOrFinally: 'Missing catch or finally after try', + UnknownLabel: 'Undefined label \'%0\'', + Redeclaration: '%0 \'%1\' has already been declared', + IllegalContinue: 'Illegal continue statement', + IllegalBreak: 'Illegal break statement', + IllegalReturn: 'Illegal return statement', + StrictModeWith: 'Strict mode code may not include a with statement', + StrictCatchVariable: 'Catch variable may not be eval or arguments in strict mode', + StrictVarName: 'Variable name may not be eval or arguments in strict mode', + StrictParamName: 'Parameter name eval or arguments is not allowed in strict mode', + StrictParamDupe: 'Strict mode function may not have duplicate parameter names', + StrictFunctionName: 'Function name may not be eval or arguments in strict mode', + StrictOctalLiteral: 'Octal literals are not allowed in strict mode.', + StrictDelete: 'Delete of an unqualified identifier in strict mode.', + StrictLHSAssignment: 'Assignment to eval or arguments is not allowed in strict mode', + StrictLHSPostfix: 'Postfix increment/decrement may not have eval or arguments operand in strict mode', + StrictLHSPrefix: 'Prefix increment/decrement may not have eval or arguments operand in strict mode', + StrictReservedWord: 'Use of future reserved word in strict mode', + TemplateOctalLiteral: 'Octal literals are not allowed in template strings.', + ParameterAfterRestParameter: 'Rest parameter must be last formal parameter', + DefaultRestParameter: 'Unexpected token =', + ObjectPatternAsRestParameter: 'Unexpected token {', + DuplicateProtoProperty: 'Duplicate __proto__ fields are not allowed in object literals', + ConstructorSpecialMethod: 'Class constructor may not be an accessor', + DuplicateConstructor: 'A class may only have one constructor', + StaticPrototype: 'Classes may not have static property named prototype', + MissingFromClause: 'Unexpected token', + NoAsAfterImportNamespace: 'Unexpected token', + InvalidModuleSpecifier: 'Unexpected token', + IllegalImportDeclaration: 'Unexpected token', + IllegalExportDeclaration: 'Unexpected token' + }; + + // See also tools/generate-unicode-regex.py. + Regex = { + NonAsciiIdentifierStart: new RegExp('[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B2\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA7AD\uA7B0\uA7B1\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB5F\uAB64\uAB65\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]'), + NonAsciiIdentifierPart: new RegExp('[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0-\u08B2\u08E4-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58\u0C59\u0C60-\u0C63\u0C66-\u0C6F\u0C81-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D01-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D57\u0D60-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19D9\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1CD0-\u1CD2\u1CD4-\u1CF6\u1CF8\u1CF9\u1D00-\u1DF5\u1DFC-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099\u309A\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA69D\uA69F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA7AD\uA7B0\uA7B1\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C4\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB5F\uAB64\uAB65\uABC0-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2D\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]') + }; + + // Ensure the condition is true, otherwise throw an error. + // This is only to have a better contract semantic, i.e. another safety net + // to catch a logic error. The condition shall be fulfilled in normal case. + // Do NOT use this to enforce a certain condition on any user input. + + function assert(condition, message) { + /* istanbul ignore if */ + if (!condition) { + throw new Error('ASSERT: ' + message); + } + } + + function isDecimalDigit(ch) { + return (ch >= 0x30 && ch <= 0x39); // 0..9 + } + + function isHexDigit(ch) { + return '0123456789abcdefABCDEF'.indexOf(ch) >= 0; + } + + function isOctalDigit(ch) { + return '01234567'.indexOf(ch) >= 0; + } + + function octalToDecimal(ch) { + // \0 is not octal escape sequence + var octal = (ch !== '0'), code = '01234567'.indexOf(ch); + + if (index < length && isOctalDigit(source[index])) { + octal = true; + code = code * 8 + '01234567'.indexOf(source[index++]); + + // 3 digits are only allowed when string starts + // with 0, 1, 2, 3 + if ('0123'.indexOf(ch) >= 0 && + index < length && + isOctalDigit(source[index])) { + code = code * 8 + '01234567'.indexOf(source[index++]); + } + } + + return { + code: code, + octal: octal + }; + } + + // 7.2 White Space + + function isWhiteSpace(ch) { + return (ch === 0x20) || (ch === 0x09) || (ch === 0x0B) || (ch === 0x0C) || (ch === 0xA0) || + (ch >= 0x1680 && [0x1680, 0x180E, 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200A, 0x202F, 0x205F, 0x3000, 0xFEFF].indexOf(ch) >= 0); + } + + // 7.3 Line Terminators + + function isLineTerminator(ch) { + return (ch === 0x0A) || (ch === 0x0D) || (ch === 0x2028) || (ch === 0x2029); + } + + // 7.6 Identifier Names and Identifiers + + function isIdentifierStart(ch) { + return (ch === 0x24) || (ch === 0x5F) || // $ (dollar) and _ (underscore) + (ch >= 0x41 && ch <= 0x5A) || // A..Z + (ch >= 0x61 && ch <= 0x7A) || // a..z + (ch === 0x5C) || // \ (backslash) + ((ch >= 0x80) && Regex.NonAsciiIdentifierStart.test(String.fromCharCode(ch))); + } + + function isIdentifierPart(ch) { + return (ch === 0x24) || (ch === 0x5F) || // $ (dollar) and _ (underscore) + (ch >= 0x41 && ch <= 0x5A) || // A..Z + (ch >= 0x61 && ch <= 0x7A) || // a..z + (ch >= 0x30 && ch <= 0x39) || // 0..9 + (ch === 0x5C) || // \ (backslash) + ((ch >= 0x80) && Regex.NonAsciiIdentifierPart.test(String.fromCharCode(ch))); + } + + // 7.6.1.2 Future Reserved Words + + function isFutureReservedWord(id) { + switch (id) { + case 'enum': + case 'export': + case 'import': + case 'super': + return true; + default: + return false; + } + } + + // 11.6.2.2 Future Reserved Words + + function isStrictModeReservedWord(id) { + switch (id) { + case 'implements': + case 'interface': + case 'package': + case 'private': + case 'protected': + case 'public': + case 'static': + case 'yield': + case 'let': + return true; + default: + return false; + } + } + + function isRestrictedWord(id) { + return id === 'eval' || id === 'arguments'; + } + + // 7.6.1.1 Keywords + + function isKeyword(id) { + + // 'const' is specialized as Keyword in V8. + // 'yield' and 'let' are for compatibility with SpiderMonkey and ES.next. + // Some others are from future reserved words. + + switch (id.length) { + case 2: + return (id === 'if') || (id === 'in') || (id === 'do'); + case 3: + return (id === 'var') || (id === 'for') || (id === 'new') || + (id === 'try') || (id === 'let'); + case 4: + return (id === 'this') || (id === 'else') || (id === 'case') || + (id === 'void') || (id === 'with') || (id === 'enum'); + case 5: + return (id === 'while') || (id === 'break') || (id === 'catch') || + (id === 'throw') || (id === 'const') || (id === 'yield') || + (id === 'class') || (id === 'super'); + case 6: + return (id === 'return') || (id === 'typeof') || (id === 'delete') || + (id === 'switch') || (id === 'export') || (id === 'import'); + case 7: + return (id === 'default') || (id === 'finally') || (id === 'extends'); + case 8: + return (id === 'function') || (id === 'continue') || (id === 'debugger'); + case 10: + return (id === 'instanceof'); + default: + return false; + } + } + + // 7.4 Comments + + function addComment(type, value, start, end, loc) { + var comment; + + assert(typeof start === 'number', 'Comment must have valid position'); + + state.lastCommentStart = start; + + comment = { + type: type, + value: value + }; + if (extra.range) { + comment.range = [start, end]; + } + if (extra.loc) { + comment.loc = loc; + } + extra.comments.push(comment); + if (extra.attachComment) { + extra.leadingComments.push(comment); + extra.trailingComments.push(comment); + } + } + + function skipSingleLineComment(offset) { + var start, loc, ch, comment; + + start = index - offset; + loc = { + start: { + line: lineNumber, + column: index - lineStart - offset + } + }; + + while (index < length) { + ch = source.charCodeAt(index); + ++index; + if (isLineTerminator(ch)) { + hasLineTerminator = true; + if (extra.comments) { + comment = source.slice(start + offset, index - 1); + loc.end = { + line: lineNumber, + column: index - lineStart - 1 + }; + addComment('Line', comment, start, index - 1, loc); + } + if (ch === 13 && source.charCodeAt(index) === 10) { + ++index; + } + ++lineNumber; + lineStart = index; + return; + } + } + + if (extra.comments) { + comment = source.slice(start + offset, index); + loc.end = { + line: lineNumber, + column: index - lineStart + }; + addComment('Line', comment, start, index, loc); + } + } + + function skipMultiLineComment() { + var start, loc, ch, comment; + + if (extra.comments) { + start = index - 2; + loc = { + start: { + line: lineNumber, + column: index - lineStart - 2 + } + }; + } + + while (index < length) { + ch = source.charCodeAt(index); + if (isLineTerminator(ch)) { + if (ch === 0x0D && source.charCodeAt(index + 1) === 0x0A) { + ++index; + } + hasLineTerminator = true; + ++lineNumber; + ++index; + lineStart = index; + } else if (ch === 0x2A) { + // Block comment ends with '*/'. + if (source.charCodeAt(index + 1) === 0x2F) { + ++index; + ++index; + if (extra.comments) { + comment = source.slice(start + 2, index - 2); + loc.end = { + line: lineNumber, + column: index - lineStart + }; + addComment('Block', comment, start, index, loc); + } + return; + } + ++index; + } else { + ++index; + } + } + + // Ran off the end of the file - the whole thing is a comment + if (extra.comments) { + loc.end = { + line: lineNumber, + column: index - lineStart + }; + comment = source.slice(start + 2, index); + addComment('Block', comment, start, index, loc); + } + tolerateUnexpectedToken(); + } + + function skipComment() { + var ch, start; + hasLineTerminator = false; + + start = (index === 0); + while (index < length) { + ch = source.charCodeAt(index); + + if (isWhiteSpace(ch)) { + ++index; + } else if (isLineTerminator(ch)) { + hasLineTerminator = true; + ++index; + if (ch === 0x0D && source.charCodeAt(index) === 0x0A) { + ++index; + } + ++lineNumber; + lineStart = index; + start = true; + } else if (ch === 0x2F) { // U+002F is '/' + ch = source.charCodeAt(index + 1); + if (ch === 0x2F) { + ++index; + ++index; + skipSingleLineComment(2); + start = true; + } else if (ch === 0x2A) { // U+002A is '*' + ++index; + ++index; + skipMultiLineComment(); + } else { + break; + } + } else if (start && ch === 0x2D) { // U+002D is '-' + // U+003E is '>' + if ((source.charCodeAt(index + 1) === 0x2D) && (source.charCodeAt(index + 2) === 0x3E)) { + // '-->' is a single-line comment + index += 3; + skipSingleLineComment(3); + } else { + break; + } + } else if (ch === 0x3C) { // U+003C is '<' + if (source.slice(index + 1, index + 4) === '!--') { + ++index; // `<` + ++index; // `!` + ++index; // `-` + ++index; // `-` + skipSingleLineComment(4); + } else { + break; + } + } else { + break; + } + } + } + + function scanHexEscape(prefix) { + var i, len, ch, code = 0; + + len = (prefix === 'u') ? 4 : 2; + for (i = 0; i < len; ++i) { + if (index < length && isHexDigit(source[index])) { + ch = source[index++]; + code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase()); + } else { + return ''; + } + } + return String.fromCharCode(code); + } + + function scanUnicodeCodePointEscape() { + var ch, code, cu1, cu2; + + ch = source[index]; + code = 0; + + // At least, one hex digit is required. + if (ch === '}') { + throwUnexpectedToken(); + } + + while (index < length) { + ch = source[index++]; + if (!isHexDigit(ch)) { + break; + } + code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase()); + } + + if (code > 0x10FFFF || ch !== '}') { + throwUnexpectedToken(); + } + + // UTF-16 Encoding + if (code <= 0xFFFF) { + return String.fromCharCode(code); + } + cu1 = ((code - 0x10000) >> 10) + 0xD800; + cu2 = ((code - 0x10000) & 1023) + 0xDC00; + return String.fromCharCode(cu1, cu2); + } + + function getEscapedIdentifier() { + var ch, id; + + ch = source.charCodeAt(index++); + id = String.fromCharCode(ch); + + // '\u' (U+005C, U+0075) denotes an escaped character. + if (ch === 0x5C) { + if (source.charCodeAt(index) !== 0x75) { + throwUnexpectedToken(); + } + ++index; + ch = scanHexEscape('u'); + if (!ch || ch === '\\' || !isIdentifierStart(ch.charCodeAt(0))) { + throwUnexpectedToken(); + } + id = ch; + } + + while (index < length) { + ch = source.charCodeAt(index); + if (!isIdentifierPart(ch)) { + break; + } + ++index; + id += String.fromCharCode(ch); + + // '\u' (U+005C, U+0075) denotes an escaped character. + if (ch === 0x5C) { + id = id.substr(0, id.length - 1); + if (source.charCodeAt(index) !== 0x75) { + throwUnexpectedToken(); + } + ++index; + ch = scanHexEscape('u'); + if (!ch || ch === '\\' || !isIdentifierPart(ch.charCodeAt(0))) { + throwUnexpectedToken(); + } + id += ch; + } + } + + return id; + } + + function getIdentifier() { + var start, ch; + + start = index++; + while (index < length) { + ch = source.charCodeAt(index); + if (ch === 0x5C) { + // Blackslash (U+005C) marks Unicode escape sequence. + index = start; + return getEscapedIdentifier(); + } + if (isIdentifierPart(ch)) { + ++index; + } else { + break; + } + } + + return source.slice(start, index); + } + + function scanIdentifier() { + var start, id, type; + + start = index; + + // Backslash (U+005C) starts an escaped character. + id = (source.charCodeAt(index) === 0x5C) ? getEscapedIdentifier() : getIdentifier(); + + // There is no keyword or literal with only one character. + // Thus, it must be an identifier. + if (id.length === 1) { + type = Token.Identifier; + } else if (isKeyword(id)) { + type = Token.Keyword; + } else if (id === 'null') { + type = Token.NullLiteral; + } else if (id === 'true' || id === 'false') { + type = Token.BooleanLiteral; + } else { + type = Token.Identifier; + } + + return { + type: type, + value: id, + lineNumber: lineNumber, + lineStart: lineStart, + start: start, + end: index + }; + } + + + // 7.7 Punctuators + + function scanPunctuator() { + var token, str; + + token = { + type: Token.Punctuator, + value: '', + lineNumber: lineNumber, + lineStart: lineStart, + start: index, + end: index + }; + + // Check for most common single-character punctuators. + str = source[index]; + switch (str) { + + case '(': + if (extra.tokenize) { + extra.openParenToken = extra.tokens.length; + } + ++index; + break; + + case '{': + if (extra.tokenize) { + extra.openCurlyToken = extra.tokens.length; + } + state.curlyStack.push('{'); + ++index; + break; + + case '.': + ++index; + if (source[index] === '.' && source[index + 1] === '.') { + // Spread operator: ... + index += 2; + str = '...'; + } + break; + + case '}': + ++index; + state.curlyStack.pop(); + break; + case ')': + case ';': + case ',': + case '[': + case ']': + case ':': + case '?': + case '~': + ++index; + break; + + default: + // 4-character punctuator. + str = source.substr(index, 4); + if (str === '>>>=') { + index += 4; + } else { + + // 3-character punctuators. + str = str.substr(0, 3); + if (str === '===' || str === '!==' || str === '>>>' || + str === '<<=' || str === '>>=') { + index += 3; + } else { + + // 2-character punctuators. + str = str.substr(0, 2); + if (str === '&&' || str === '||' || str === '==' || str === '!=' || + str === '+=' || str === '-=' || str === '*=' || str === '/=' || + str === '++' || str === '--' || str === '<<' || str === '>>' || + str === '&=' || str === '|=' || str === '^=' || str === '%=' || + str === '<=' || str === '>=' || str === '=>') { + index += 2; + } else { + + // 1-character punctuators. + str = source[index]; + if ('<>=!+-*%&|^/'.indexOf(str) >= 0) { + ++index; + } + } + } + } + } + + if (index === token.start) { + throwUnexpectedToken(); + } + + token.end = index; + token.value = str; + return token; + } + + // 7.8.3 Numeric Literals + + function scanHexLiteral(start) { + var number = ''; + + while (index < length) { + if (!isHexDigit(source[index])) { + break; + } + number += source[index++]; + } + + if (number.length === 0) { + throwUnexpectedToken(); + } + + if (isIdentifierStart(source.charCodeAt(index))) { + throwUnexpectedToken(); + } + + return { + type: Token.NumericLiteral, + value: parseInt('0x' + number, 16), + lineNumber: lineNumber, + lineStart: lineStart, + start: start, + end: index + }; + } + + function scanBinaryLiteral(start) { + var ch, number; + + number = ''; + + while (index < length) { + ch = source[index]; + if (ch !== '0' && ch !== '1') { + break; + } + number += source[index++]; + } + + if (number.length === 0) { + // only 0b or 0B + throwUnexpectedToken(); + } + + if (index < length) { + ch = source.charCodeAt(index); + /* istanbul ignore else */ + if (isIdentifierStart(ch) || isDecimalDigit(ch)) { + throwUnexpectedToken(); + } + } + + return { + type: Token.NumericLiteral, + value: parseInt(number, 2), + lineNumber: lineNumber, + lineStart: lineStart, + start: start, + end: index + }; + } + + function scanOctalLiteral(prefix, start) { + var number, octal; + + if (isOctalDigit(prefix)) { + octal = true; + number = '0' + source[index++]; + } else { + octal = false; + ++index; + number = ''; + } + + while (index < length) { + if (!isOctalDigit(source[index])) { + break; + } + number += source[index++]; + } + + if (!octal && number.length === 0) { + // only 0o or 0O + throwUnexpectedToken(); + } + + if (isIdentifierStart(source.charCodeAt(index)) || isDecimalDigit(source.charCodeAt(index))) { + throwUnexpectedToken(); + } + + return { + type: Token.NumericLiteral, + value: parseInt(number, 8), + octal: octal, + lineNumber: lineNumber, + lineStart: lineStart, + start: start, + end: index + }; + } + + function isImplicitOctalLiteral() { + var i, ch; + + // Implicit octal, unless there is a non-octal digit. + // (Annex B.1.1 on Numeric Literals) + for (i = index + 1; i < length; ++i) { + ch = source[i]; + if (ch === '8' || ch === '9') { + return false; + } + if (!isOctalDigit(ch)) { + return true; + } + } + + return true; + } + + function scanNumericLiteral() { + var number, start, ch; + + ch = source[index]; + assert(isDecimalDigit(ch.charCodeAt(0)) || (ch === '.'), + 'Numeric literal must start with a decimal digit or a decimal point'); + + start = index; + number = ''; + if (ch !== '.') { + number = source[index++]; + ch = source[index]; + + // Hex number starts with '0x'. + // Octal number starts with '0'. + // Octal number in ES6 starts with '0o'. + // Binary number in ES6 starts with '0b'. + if (number === '0') { + if (ch === 'x' || ch === 'X') { + ++index; + return scanHexLiteral(start); + } + if (ch === 'b' || ch === 'B') { + ++index; + return scanBinaryLiteral(start); + } + if (ch === 'o' || ch === 'O') { + return scanOctalLiteral(ch, start); + } + + if (isOctalDigit(ch)) { + if (isImplicitOctalLiteral()) { + return scanOctalLiteral(ch, start); + } + } + } + + while (isDecimalDigit(source.charCodeAt(index))) { + number += source[index++]; + } + ch = source[index]; + } + + if (ch === '.') { + number += source[index++]; + while (isDecimalDigit(source.charCodeAt(index))) { + number += source[index++]; + } + ch = source[index]; + } + + if (ch === 'e' || ch === 'E') { + number += source[index++]; + + ch = source[index]; + if (ch === '+' || ch === '-') { + number += source[index++]; + } + if (isDecimalDigit(source.charCodeAt(index))) { + while (isDecimalDigit(source.charCodeAt(index))) { + number += source[index++]; + } + } else { + throwUnexpectedToken(); + } + } + + if (isIdentifierStart(source.charCodeAt(index))) { + throwUnexpectedToken(); + } + + return { + type: Token.NumericLiteral, + value: parseFloat(number), + lineNumber: lineNumber, + lineStart: lineStart, + start: start, + end: index + }; + } + + // 7.8.4 String Literals + + function scanStringLiteral() { + var str = '', quote, start, ch, unescaped, octToDec, octal = false; + + quote = source[index]; + assert((quote === '\'' || quote === '"'), + 'String literal must starts with a quote'); + + start = index; + ++index; + + while (index < length) { + ch = source[index++]; + + if (ch === quote) { + quote = ''; + break; + } else if (ch === '\\') { + ch = source[index++]; + if (!ch || !isLineTerminator(ch.charCodeAt(0))) { + switch (ch) { + case 'u': + case 'x': + if (source[index] === '{') { + ++index; + str += scanUnicodeCodePointEscape(); + } else { + unescaped = scanHexEscape(ch); + if (!unescaped) { + throw throwUnexpectedToken(); + } + str += unescaped; + } + break; + case 'n': + str += '\n'; + break; + case 'r': + str += '\r'; + break; + case 't': + str += '\t'; + break; + case 'b': + str += '\b'; + break; + case 'f': + str += '\f'; + break; + case 'v': + str += '\x0B'; + break; + case '8': + case '9': + throw throwUnexpectedToken(); + + default: + if (isOctalDigit(ch)) { + octToDec = octalToDecimal(ch); + + octal = octToDec.octal || octal; + str += String.fromCharCode(octToDec.code); + } else { + str += ch; + } + break; + } + } else { + ++lineNumber; + if (ch === '\r' && source[index] === '\n') { + ++index; + } + lineStart = index; + } + } else if (isLineTerminator(ch.charCodeAt(0))) { + break; + } else { + str += ch; + } + } + + if (quote !== '') { + throwUnexpectedToken(); + } + + return { + type: Token.StringLiteral, + value: str, + octal: octal, + lineNumber: startLineNumber, + lineStart: startLineStart, + start: start, + end: index + }; + } + + function scanTemplate() { + var cooked = '', ch, start, rawOffset, terminated, head, tail, restore, unescaped; + + terminated = false; + tail = false; + start = index; + head = (source[index] === '`'); + rawOffset = 2; + + ++index; + + while (index < length) { + ch = source[index++]; + if (ch === '`') { + rawOffset = 1; + tail = true; + terminated = true; + break; + } else if (ch === '$') { + if (source[index] === '{') { + state.curlyStack.push('${'); + ++index; + terminated = true; + break; + } + cooked += ch; + } else if (ch === '\\') { + ch = source[index++]; + if (!isLineTerminator(ch.charCodeAt(0))) { + switch (ch) { + case 'n': + cooked += '\n'; + break; + case 'r': + cooked += '\r'; + break; + case 't': + cooked += '\t'; + break; + case 'u': + case 'x': + if (source[index] === '{') { + ++index; + cooked += scanUnicodeCodePointEscape(); + } else { + restore = index; + unescaped = scanHexEscape(ch); + if (unescaped) { + cooked += unescaped; + } else { + index = restore; + cooked += ch; + } + } + break; + case 'b': + cooked += '\b'; + break; + case 'f': + cooked += '\f'; + break; + case 'v': + cooked += '\v'; + break; + + default: + if (ch === '0') { + if (isDecimalDigit(source.charCodeAt(index))) { + // Illegal: \01 \02 and so on + throwError(Messages.TemplateOctalLiteral); + } + cooked += '\0'; + } else if (isOctalDigit(ch)) { + // Illegal: \1 \2 + throwError(Messages.TemplateOctalLiteral); + } else { + cooked += ch; + } + break; + } + } else { + ++lineNumber; + if (ch === '\r' && source[index] === '\n') { + ++index; + } + lineStart = index; + } + } else if (isLineTerminator(ch.charCodeAt(0))) { + ++lineNumber; + if (ch === '\r' && source[index] === '\n') { + ++index; + } + lineStart = index; + cooked += '\n'; + } else { + cooked += ch; + } + } + + if (!terminated) { + throwUnexpectedToken(); + } + + if (!head) { + state.curlyStack.pop(); + } + + return { + type: Token.Template, + value: { + cooked: cooked, + raw: source.slice(start + 1, index - rawOffset) + }, + head: head, + tail: tail, + lineNumber: lineNumber, + lineStart: lineStart, + start: start, + end: index + }; + } + + function testRegExp(pattern, flags) { + var tmp = pattern; + + if (flags.indexOf('u') >= 0) { + // Replace each astral symbol and every Unicode escape sequence + // that possibly represents an astral symbol or a paired surrogate + // with a single ASCII symbol to avoid throwing on regular + // expressions that are only valid in combination with the `/u` + // flag. + // Note: replacing with the ASCII symbol `x` might cause false + // negatives in unlikely scenarios. For example, `[\u{61}-b]` is a + // perfectly valid pattern that is equivalent to `[a-b]`, but it + // would be replaced by `[x-b]` which throws an error. + tmp = tmp + .replace(/\\u\{([0-9a-fA-F]+)\}/g, function ($0, $1) { + if (parseInt($1, 16) <= 0x10FFFF) { + return 'x'; + } + throwUnexpectedToken(null, Messages.InvalidRegExp); + }) + .replace( + /\\u([a-fA-F0-9]{4})|[\uD800-\uDBFF][\uDC00-\uDFFF]/g, + 'x' + ); + } + + // First, detect invalid regular expressions. + try { + RegExp(tmp); + } catch (e) { + throwUnexpectedToken(null, Messages.InvalidRegExp); + } + + // Return a regular expression object for this pattern-flag pair, or + // `null` in case the current environment doesn't support the flags it + // uses. + try { + return new RegExp(pattern, flags); + } catch (exception) { + return null; + } + } + + function scanRegExpBody() { + var ch, str, classMarker, terminated, body; + + ch = source[index]; + assert(ch === '/', 'Regular expression literal must start with a slash'); + str = source[index++]; + + classMarker = false; + terminated = false; + while (index < length) { + ch = source[index++]; + str += ch; + if (ch === '\\') { + ch = source[index++]; + // ECMA-262 7.8.5 + if (isLineTerminator(ch.charCodeAt(0))) { + throwUnexpectedToken(null, Messages.UnterminatedRegExp); + } + str += ch; + } else if (isLineTerminator(ch.charCodeAt(0))) { + throwUnexpectedToken(null, Messages.UnterminatedRegExp); + } else if (classMarker) { + if (ch === ']') { + classMarker = false; + } + } else { + if (ch === '/') { + terminated = true; + break; + } else if (ch === '[') { + classMarker = true; + } + } + } + + if (!terminated) { + throwUnexpectedToken(null, Messages.UnterminatedRegExp); + } + + // Exclude leading and trailing slash. + body = str.substr(1, str.length - 2); + return { + value: body, + literal: str + }; + } + + function scanRegExpFlags() { + var ch, str, flags, restore; + + str = ''; + flags = ''; + while (index < length) { + ch = source[index]; + if (!isIdentifierPart(ch.charCodeAt(0))) { + break; + } + + ++index; + if (ch === '\\' && index < length) { + ch = source[index]; + if (ch === 'u') { + ++index; + restore = index; + ch = scanHexEscape('u'); + if (ch) { + flags += ch; + for (str += '\\u'; restore < index; ++restore) { + str += source[restore]; + } + } else { + index = restore; + flags += 'u'; + str += '\\u'; + } + tolerateUnexpectedToken(); + } else { + str += '\\'; + tolerateUnexpectedToken(); + } + } else { + flags += ch; + str += ch; + } + } + + return { + value: flags, + literal: str + }; + } + + function scanRegExp() { + scanning = true; + var start, body, flags, value; + + lookahead = null; + skipComment(); + start = index; + + body = scanRegExpBody(); + flags = scanRegExpFlags(); + value = testRegExp(body.value, flags.value); + scanning = false; + if (extra.tokenize) { + return { + type: Token.RegularExpression, + value: value, + regex: { + pattern: body.value, + flags: flags.value + }, + lineNumber: lineNumber, + lineStart: lineStart, + start: start, + end: index + }; + } + + return { + literal: body.literal + flags.literal, + value: value, + regex: { + pattern: body.value, + flags: flags.value + }, + start: start, + end: index + }; + } + + function collectRegex() { + var pos, loc, regex, token; + + skipComment(); + + pos = index; + loc = { + start: { + line: lineNumber, + column: index - lineStart + } + }; + + regex = scanRegExp(); + + loc.end = { + line: lineNumber, + column: index - lineStart + }; + + /* istanbul ignore next */ + if (!extra.tokenize) { + // Pop the previous token, which is likely '/' or '/=' + if (extra.tokens.length > 0) { + token = extra.tokens[extra.tokens.length - 1]; + if (token.range[0] === pos && token.type === 'Punctuator') { + if (token.value === '/' || token.value === '/=') { + extra.tokens.pop(); + } + } + } + + extra.tokens.push({ + type: 'RegularExpression', + value: regex.literal, + regex: regex.regex, + range: [pos, index], + loc: loc + }); + } + + return regex; + } + + function isIdentifierName(token) { + return token.type === Token.Identifier || + token.type === Token.Keyword || + token.type === Token.BooleanLiteral || + token.type === Token.NullLiteral; + } + + function advanceSlash() { + var prevToken, + checkToken; + // Using the following algorithm: + // https://github.com/mozilla/sweet.js/wiki/design + prevToken = extra.tokens[extra.tokens.length - 1]; + if (!prevToken) { + // Nothing before that: it cannot be a division. + return collectRegex(); + } + if (prevToken.type === 'Punctuator') { + if (prevToken.value === ']') { + return scanPunctuator(); + } + if (prevToken.value === ')') { + checkToken = extra.tokens[extra.openParenToken - 1]; + if (checkToken && + checkToken.type === 'Keyword' && + (checkToken.value === 'if' || + checkToken.value === 'while' || + checkToken.value === 'for' || + checkToken.value === 'with')) { + return collectRegex(); + } + return scanPunctuator(); + } + if (prevToken.value === '}') { + // Dividing a function by anything makes little sense, + // but we have to check for that. + if (extra.tokens[extra.openCurlyToken - 3] && + extra.tokens[extra.openCurlyToken - 3].type === 'Keyword') { + // Anonymous function. + checkToken = extra.tokens[extra.openCurlyToken - 4]; + if (!checkToken) { + return scanPunctuator(); + } + } else if (extra.tokens[extra.openCurlyToken - 4] && + extra.tokens[extra.openCurlyToken - 4].type === 'Keyword') { + // Named function. + checkToken = extra.tokens[extra.openCurlyToken - 5]; + if (!checkToken) { + return collectRegex(); + } + } else { + return scanPunctuator(); + } + // checkToken determines whether the function is + // a declaration or an expression. + if (FnExprTokens.indexOf(checkToken.value) >= 0) { + // It is an expression. + return scanPunctuator(); + } + // It is a declaration. + return collectRegex(); + } + return collectRegex(); + } + if (prevToken.type === 'Keyword' && prevToken.value !== 'this') { + return collectRegex(); + } + return scanPunctuator(); + } + + function advance() { + var ch, token; + + if (index >= length) { + return { + type: Token.EOF, + lineNumber: lineNumber, + lineStart: lineStart, + start: index, + end: index + }; + } + + ch = source.charCodeAt(index); + + if (isIdentifierStart(ch)) { + token = scanIdentifier(); + if (strict && isStrictModeReservedWord(token.value)) { + token.type = Token.Keyword; + } + return token; + } + + // Very common: ( and ) and ; + if (ch === 0x28 || ch === 0x29 || ch === 0x3B) { + return scanPunctuator(); + } + + // String literal starts with single quote (U+0027) or double quote (U+0022). + if (ch === 0x27 || ch === 0x22) { + return scanStringLiteral(); + } + + // Dot (.) U+002E can also start a floating-point number, hence the need + // to check the next character. + if (ch === 0x2E) { + if (isDecimalDigit(source.charCodeAt(index + 1))) { + return scanNumericLiteral(); + } + return scanPunctuator(); + } + + if (isDecimalDigit(ch)) { + return scanNumericLiteral(); + } + + // Slash (/) U+002F can also start a regex. + if (extra.tokenize && ch === 0x2F) { + return advanceSlash(); + } + + // Template literals start with ` (U+0060) for template head + // or } (U+007D) for template middle or template tail. + if (ch === 0x60 || (ch === 0x7D && state.curlyStack[state.curlyStack.length - 1] === '${')) { + return scanTemplate(); + } + + return scanPunctuator(); + } + + function collectToken() { + var loc, token, value, entry; + + loc = { + start: { + line: lineNumber, + column: index - lineStart + } + }; + + token = advance(); + loc.end = { + line: lineNumber, + column: index - lineStart + }; + + if (token.type !== Token.EOF) { + value = source.slice(token.start, token.end); + entry = { + type: TokenName[token.type], + value: value, + range: [token.start, token.end], + loc: loc + }; + if (token.regex) { + entry.regex = { + pattern: token.regex.pattern, + flags: token.regex.flags + }; + } + extra.tokens.push(entry); + } + + return token; + } + + function lex() { + var token; + scanning = true; + + lastIndex = index; + lastLineNumber = lineNumber; + lastLineStart = lineStart; + + skipComment(); + + token = lookahead; + + startIndex = index; + startLineNumber = lineNumber; + startLineStart = lineStart; + + lookahead = (typeof extra.tokens !== 'undefined') ? collectToken() : advance(); + scanning = false; + return token; + } + + function peek() { + scanning = true; + + skipComment(); + + lastIndex = index; + lastLineNumber = lineNumber; + lastLineStart = lineStart; + + startIndex = index; + startLineNumber = lineNumber; + startLineStart = lineStart; + + lookahead = (typeof extra.tokens !== 'undefined') ? collectToken() : advance(); + scanning = false; + } + + function Position() { + this.line = startLineNumber; + this.column = startIndex - startLineStart; + } + + function SourceLocation() { + this.start = new Position(); + this.end = null; + } + + function WrappingSourceLocation(startToken) { + this.start = { + line: startToken.lineNumber, + column: startToken.start - startToken.lineStart + }; + this.end = null; + } + + function Node() { + if (extra.range) { + this.range = [startIndex, 0]; + } + if (extra.loc) { + this.loc = new SourceLocation(); + } + } + + function WrappingNode(startToken) { + if (extra.range) { + this.range = [startToken.start, 0]; + } + if (extra.loc) { + this.loc = new WrappingSourceLocation(startToken); + } + } + + WrappingNode.prototype = Node.prototype = { + + processComment: function () { + var lastChild, + leadingComments, + trailingComments, + bottomRight = extra.bottomRightStack, + i, + comment, + last = bottomRight[bottomRight.length - 1]; + + if (this.type === Syntax.Program) { + if (this.body.length > 0) { + return; + } + } + + if (extra.trailingComments.length > 0) { + trailingComments = []; + for (i = extra.trailingComments.length - 1; i >= 0; --i) { + comment = extra.trailingComments[i]; + if (comment.range[0] >= this.range[1]) { + trailingComments.unshift(comment); + extra.trailingComments.splice(i, 1); + } + } + extra.trailingComments = []; + } else { + if (last && last.trailingComments && last.trailingComments[0].range[0] >= this.range[1]) { + trailingComments = last.trailingComments; + delete last.trailingComments; + } + } + + // Eating the stack. + if (last) { + while (last && last.range[0] >= this.range[0]) { + lastChild = last; + last = bottomRight.pop(); + } + } + + if (lastChild) { + if (lastChild.leadingComments && lastChild.leadingComments[lastChild.leadingComments.length - 1].range[1] <= this.range[0]) { + this.leadingComments = lastChild.leadingComments; + lastChild.leadingComments = undefined; + } + } else if (extra.leadingComments.length > 0) { + leadingComments = []; + for (i = extra.leadingComments.length - 1; i >= 0; --i) { + comment = extra.leadingComments[i]; + if (comment.range[1] <= this.range[0]) { + leadingComments.unshift(comment); + extra.leadingComments.splice(i, 1); + } + } + } + + + if (leadingComments && leadingComments.length > 0) { + this.leadingComments = leadingComments; + } + if (trailingComments && trailingComments.length > 0) { + this.trailingComments = trailingComments; + } + + bottomRight.push(this); + }, + + finish: function () { + if (extra.range) { + this.range[1] = lastIndex; + } + if (extra.loc) { + this.loc.end = { + line: lastLineNumber, + column: lastIndex - lastLineStart + }; + if (extra.source) { + this.loc.source = extra.source; + } + } + + if (extra.attachComment) { + this.processComment(); + } + }, + + finishArrayExpression: function (elements) { + this.type = Syntax.ArrayExpression; + this.elements = elements; + this.finish(); + return this; + }, + + finishArrayPattern: function (elements) { + this.type = Syntax.ArrayPattern; + this.elements = elements; + this.finish(); + return this; + }, + + finishArrowFunctionExpression: function (params, defaults, body, expression) { + this.type = Syntax.ArrowFunctionExpression; + this.id = null; + this.params = params; + this.defaults = defaults; + this.body = body; + this.generator = false; + this.expression = expression; + this.finish(); + return this; + }, + + finishAssignmentExpression: function (operator, left, right) { + this.type = Syntax.AssignmentExpression; + this.operator = operator; + this.left = left; + this.right = right; + this.finish(); + return this; + }, + + finishAssignmentPattern: function (left, right) { + this.type = Syntax.AssignmentPattern; + this.left = left; + this.right = right; + this.finish(); + return this; + }, + + finishBinaryExpression: function (operator, left, right) { + this.type = (operator === '||' || operator === '&&') ? Syntax.LogicalExpression : Syntax.BinaryExpression; + this.operator = operator; + this.left = left; + this.right = right; + this.finish(); + return this; + }, + + finishBlockStatement: function (body) { + this.type = Syntax.BlockStatement; + this.body = body; + this.finish(); + return this; + }, + + finishBreakStatement: function (label) { + this.type = Syntax.BreakStatement; + this.label = label; + this.finish(); + return this; + }, + + finishCallExpression: function (callee, args) { + this.type = Syntax.CallExpression; + this.callee = callee; + this.arguments = args; + this.finish(); + return this; + }, + + finishCatchClause: function (param, body) { + this.type = Syntax.CatchClause; + this.param = param; + this.body = body; + this.finish(); + return this; + }, + + finishClassBody: function (body) { + this.type = Syntax.ClassBody; + this.body = body; + this.finish(); + return this; + }, + + finishClassDeclaration: function (id, superClass, body) { + this.type = Syntax.ClassDeclaration; + this.id = id; + this.superClass = superClass; + this.body = body; + this.finish(); + return this; + }, + + finishClassExpression: function (id, superClass, body) { + this.type = Syntax.ClassExpression; + this.id = id; + this.superClass = superClass; + this.body = body; + this.finish(); + return this; + }, + + finishConditionalExpression: function (test, consequent, alternate) { + this.type = Syntax.ConditionalExpression; + this.test = test; + this.consequent = consequent; + this.alternate = alternate; + this.finish(); + return this; + }, + + finishContinueStatement: function (label) { + this.type = Syntax.ContinueStatement; + this.label = label; + this.finish(); + return this; + }, + + finishDebuggerStatement: function () { + this.type = Syntax.DebuggerStatement; + this.finish(); + return this; + }, + + finishDoWhileStatement: function (body, test) { + this.type = Syntax.DoWhileStatement; + this.body = body; + this.test = test; + this.finish(); + return this; + }, + + finishEmptyStatement: function () { + this.type = Syntax.EmptyStatement; + this.finish(); + return this; + }, + + finishExpressionStatement: function (expression) { + this.type = Syntax.ExpressionStatement; + this.expression = expression; + this.finish(); + return this; + }, + + finishForStatement: function (init, test, update, body) { + this.type = Syntax.ForStatement; + this.init = init; + this.test = test; + this.update = update; + this.body = body; + this.finish(); + return this; + }, + + finishForInStatement: function (left, right, body) { + this.type = Syntax.ForInStatement; + this.left = left; + this.right = right; + this.body = body; + this.each = false; + this.finish(); + return this; + }, + + finishFunctionDeclaration: function (id, params, defaults, body) { + this.type = Syntax.FunctionDeclaration; + this.id = id; + this.params = params; + this.defaults = defaults; + this.body = body; + this.generator = false; + this.expression = false; + this.finish(); + return this; + }, + + finishFunctionExpression: function (id, params, defaults, body) { + this.type = Syntax.FunctionExpression; + this.id = id; + this.params = params; + this.defaults = defaults; + this.body = body; + this.generator = false; + this.expression = false; + this.finish(); + return this; + }, + + finishIdentifier: function (name) { + this.type = Syntax.Identifier; + this.name = name; + this.finish(); + return this; + }, + + finishIfStatement: function (test, consequent, alternate) { + this.type = Syntax.IfStatement; + this.test = test; + this.consequent = consequent; + this.alternate = alternate; + this.finish(); + return this; + }, + + finishLabeledStatement: function (label, body) { + this.type = Syntax.LabeledStatement; + this.label = label; + this.body = body; + this.finish(); + return this; + }, + + finishLiteral: function (token) { + this.type = Syntax.Literal; + this.value = token.value; + this.raw = source.slice(token.start, token.end); + if (token.regex) { + this.regex = token.regex; + } + this.finish(); + return this; + }, + + finishMemberExpression: function (accessor, object, property) { + this.type = Syntax.MemberExpression; + this.computed = accessor === '['; + this.object = object; + this.property = property; + this.finish(); + return this; + }, + + finishNewExpression: function (callee, args) { + this.type = Syntax.NewExpression; + this.callee = callee; + this.arguments = args; + this.finish(); + return this; + }, + + finishObjectExpression: function (properties) { + this.type = Syntax.ObjectExpression; + this.properties = properties; + this.finish(); + return this; + }, + + finishObjectPattern: function (properties) { + this.type = Syntax.ObjectPattern; + this.properties = properties; + this.finish(); + return this; + }, + + finishPostfixExpression: function (operator, argument) { + this.type = Syntax.UpdateExpression; + this.operator = operator; + this.argument = argument; + this.prefix = false; + this.finish(); + return this; + }, + + finishProgram: function (body) { + this.type = Syntax.Program; + this.body = body; + if (sourceType === 'module') { + // very restrictive for now + this.sourceType = sourceType; + } + this.finish(); + return this; + }, + + finishProperty: function (kind, key, computed, value, method, shorthand) { + this.type = Syntax.Property; + this.key = key; + this.computed = computed; + this.value = value; + this.kind = kind; + this.method = method; + this.shorthand = shorthand; + this.finish(); + return this; + }, + + finishRestElement: function (argument) { + this.type = Syntax.RestElement; + this.argument = argument; + this.finish(); + return this; + }, + + finishReturnStatement: function (argument) { + this.type = Syntax.ReturnStatement; + this.argument = argument; + this.finish(); + return this; + }, + + finishSequenceExpression: function (expressions) { + this.type = Syntax.SequenceExpression; + this.expressions = expressions; + this.finish(); + return this; + }, + + finishSpreadElement: function (argument) { + this.type = Syntax.SpreadElement; + this.argument = argument; + this.finish(); + return this; + }, + + finishSwitchCase: function (test, consequent) { + this.type = Syntax.SwitchCase; + this.test = test; + this.consequent = consequent; + this.finish(); + return this; + }, + + finishSuper: function () { + this.type = Syntax.Super; + this.finish(); + return this; + }, + + finishSwitchStatement: function (discriminant, cases) { + this.type = Syntax.SwitchStatement; + this.discriminant = discriminant; + this.cases = cases; + this.finish(); + return this; + }, + + finishTaggedTemplateExpression: function (tag, quasi) { + this.type = Syntax.TaggedTemplateExpression; + this.tag = tag; + this.quasi = quasi; + this.finish(); + return this; + }, + + finishTemplateElement: function (value, tail) { + this.type = Syntax.TemplateElement; + this.value = value; + this.tail = tail; + this.finish(); + return this; + }, + + finishTemplateLiteral: function (quasis, expressions) { + this.type = Syntax.TemplateLiteral; + this.quasis = quasis; + this.expressions = expressions; + this.finish(); + return this; + }, + + finishThisExpression: function () { + this.type = Syntax.ThisExpression; + this.finish(); + return this; + }, + + finishThrowStatement: function (argument) { + this.type = Syntax.ThrowStatement; + this.argument = argument; + this.finish(); + return this; + }, + + finishTryStatement: function (block, handler, finalizer) { + this.type = Syntax.TryStatement; + this.block = block; + this.guardedHandlers = []; + this.handlers = handler ? [ handler ] : []; + this.handler = handler; + this.finalizer = finalizer; + this.finish(); + return this; + }, + + finishUnaryExpression: function (operator, argument) { + this.type = (operator === '++' || operator === '--') ? Syntax.UpdateExpression : Syntax.UnaryExpression; + this.operator = operator; + this.argument = argument; + this.prefix = true; + this.finish(); + return this; + }, + + finishVariableDeclaration: function (declarations) { + this.type = Syntax.VariableDeclaration; + this.declarations = declarations; + this.kind = 'var'; + this.finish(); + return this; + }, + + finishLexicalDeclaration: function (declarations, kind) { + this.type = Syntax.VariableDeclaration; + this.declarations = declarations; + this.kind = kind; + this.finish(); + return this; + }, + + finishVariableDeclarator: function (id, init) { + this.type = Syntax.VariableDeclarator; + this.id = id; + this.init = init; + this.finish(); + return this; + }, + + finishWhileStatement: function (test, body) { + this.type = Syntax.WhileStatement; + this.test = test; + this.body = body; + this.finish(); + return this; + }, + + finishWithStatement: function (object, body) { + this.type = Syntax.WithStatement; + this.object = object; + this.body = body; + this.finish(); + return this; + }, + + finishExportSpecifier: function (local, exported) { + this.type = Syntax.ExportSpecifier; + this.exported = exported || local; + this.local = local; + this.finish(); + return this; + }, + + finishImportDefaultSpecifier: function (local) { + this.type = Syntax.ImportDefaultSpecifier; + this.local = local; + this.finish(); + return this; + }, + + finishImportNamespaceSpecifier: function (local) { + this.type = Syntax.ImportNamespaceSpecifier; + this.local = local; + this.finish(); + return this; + }, + + finishExportNamedDeclaration: function (declaration, specifiers, src) { + this.type = Syntax.ExportNamedDeclaration; + this.declaration = declaration; + this.specifiers = specifiers; + this.source = src; + this.finish(); + return this; + }, + + finishExportDefaultDeclaration: function (declaration) { + this.type = Syntax.ExportDefaultDeclaration; + this.declaration = declaration; + this.finish(); + return this; + }, + + finishExportAllDeclaration: function (src) { + this.type = Syntax.ExportAllDeclaration; + this.source = src; + this.finish(); + return this; + }, + + finishImportSpecifier: function (local, imported) { + this.type = Syntax.ImportSpecifier; + this.local = local || imported; + this.imported = imported; + this.finish(); + return this; + }, + + finishImportDeclaration: function (specifiers, src) { + this.type = Syntax.ImportDeclaration; + this.specifiers = specifiers; + this.source = src; + this.finish(); + return this; + } + }; + + + function recordError(error) { + var e, existing; + + for (e = 0; e < extra.errors.length; e++) { + existing = extra.errors[e]; + // Prevent duplicated error. + /* istanbul ignore next */ + if (existing.index === error.index && existing.message === error.message) { + return; + } + } + + extra.errors.push(error); + } + + function createError(line, pos, description) { + var error = new Error('Line ' + line + ': ' + description); + error.index = pos; + error.lineNumber = line; + error.column = pos - (scanning ? lineStart : lastLineStart) + 1; + error.description = description; + return error; + } + + // Throw an exception + + function throwError(messageFormat) { + var args, msg; + + args = Array.prototype.slice.call(arguments, 1); + msg = messageFormat.replace(/%(\d)/g, + function (whole, idx) { + assert(idx < args.length, 'Message reference must be in range'); + return args[idx]; + } + ); + + throw createError(lastLineNumber, lastIndex, msg); + } + + function tolerateError(messageFormat) { + var args, msg, error; + + args = Array.prototype.slice.call(arguments, 1); + /* istanbul ignore next */ + msg = messageFormat.replace(/%(\d)/g, + function (whole, idx) { + assert(idx < args.length, 'Message reference must be in range'); + return args[idx]; + } + ); + + error = createError(lineNumber, lastIndex, msg); + if (extra.errors) { + recordError(error); + } else { + throw error; + } + } + + // Throw an exception because of the token. + + function unexpectedTokenError(token, message) { + var value, msg = message || Messages.UnexpectedToken; + + if (token) { + if (!message) { + msg = (token.type === Token.EOF) ? Messages.UnexpectedEOS : + (token.type === Token.Identifier) ? Messages.UnexpectedIdentifier : + (token.type === Token.NumericLiteral) ? Messages.UnexpectedNumber : + (token.type === Token.StringLiteral) ? Messages.UnexpectedString : + (token.type === Token.Template) ? Messages.UnexpectedTemplate : + Messages.UnexpectedToken; + + if (token.type === Token.Keyword) { + if (isFutureReservedWord(token.value)) { + msg = Messages.UnexpectedReserved; + } else if (strict && isStrictModeReservedWord(token.value)) { + msg = Messages.StrictReservedWord; + } + } + } + + value = (token.type === Token.Template) ? token.value.raw : token.value; + } else { + value = 'ILLEGAL'; + } + + msg = msg.replace('%0', value); + + return (token && typeof token.lineNumber === 'number') ? + createError(token.lineNumber, token.start, msg) : + createError(scanning ? lineNumber : lastLineNumber, scanning ? index : lastIndex, msg); + } + + function throwUnexpectedToken(token, message) { + throw unexpectedTokenError(token, message); + } + + function tolerateUnexpectedToken(token, message) { + var error = unexpectedTokenError(token, message); + if (extra.errors) { + recordError(error); + } else { + throw error; + } + } + + // Expect the next token to match the specified punctuator. + // If not, an exception will be thrown. + + function expect(value) { + var token = lex(); + if (token.type !== Token.Punctuator || token.value !== value) { + throwUnexpectedToken(token); + } + } + + /** + * @name expectCommaSeparator + * @description Quietly expect a comma when in tolerant mode, otherwise delegates + * to <code>expect(value)</code> + * @since 2.0 + */ + function expectCommaSeparator() { + var token; + + if (extra.errors) { + token = lookahead; + if (token.type === Token.Punctuator && token.value === ',') { + lex(); + } else if (token.type === Token.Punctuator && token.value === ';') { + lex(); + tolerateUnexpectedToken(token); + } else { + tolerateUnexpectedToken(token, Messages.UnexpectedToken); + } + } else { + expect(','); + } + } + + // Expect the next token to match the specified keyword. + // If not, an exception will be thrown. + + function expectKeyword(keyword) { + var token = lex(); + if (token.type !== Token.Keyword || token.value !== keyword) { + throwUnexpectedToken(token); + } + } + + // Return true if the next token matches the specified punctuator. + + function match(value) { + return lookahead.type === Token.Punctuator && lookahead.value === value; + } + + // Return true if the next token matches the specified keyword + + function matchKeyword(keyword) { + return lookahead.type === Token.Keyword && lookahead.value === keyword; + } + + // Return true if the next token matches the specified contextual keyword + // (where an identifier is sometimes a keyword depending on the context) + + function matchContextualKeyword(keyword) { + return lookahead.type === Token.Identifier && lookahead.value === keyword; + } + + // Return true if the next token is an assignment operator + + function matchAssign() { + var op; + + if (lookahead.type !== Token.Punctuator) { + return false; + } + op = lookahead.value; + return op === '=' || + op === '*=' || + op === '/=' || + op === '%=' || + op === '+=' || + op === '-=' || + op === '<<=' || + op === '>>=' || + op === '>>>=' || + op === '&=' || + op === '^=' || + op === '|='; + } + + function consumeSemicolon() { + // Catch the very common case first: immediately a semicolon (U+003B). + if (source.charCodeAt(startIndex) === 0x3B || match(';')) { + lex(); + return; + } + + if (hasLineTerminator) { + return; + } + + // FIXME(ikarienator): this is seemingly an issue in the previous location info convention. + lastIndex = startIndex; + lastLineNumber = startLineNumber; + lastLineStart = startLineStart; + + if (lookahead.type !== Token.EOF && !match('}')) { + throwUnexpectedToken(lookahead); + } + } + + // Cover grammar support. + // + // When an assignment expression position starts with an left parenthesis, the determination of the type + // of the syntax is to be deferred arbitrarily long until the end of the parentheses pair (plus a lookahead) + // or the first comma. This situation also defers the determination of all the expressions nested in the pair. + // + // There are three productions that can be parsed in a parentheses pair that needs to be determined + // after the outermost pair is closed. They are: + // + // 1. AssignmentExpression + // 2. BindingElements + // 3. AssignmentTargets + // + // In order to avoid exponential backtracking, we use two flags to denote if the production can be + // binding element or assignment target. + // + // The three productions have the relationship: + // + // BindingElements ⊆ AssignmentTargets ⊆ AssignmentExpression + // + // with a single exception that CoverInitializedName when used directly in an Expression, generates + // an early error. Therefore, we need the third state, firstCoverInitializedNameError, to track the + // first usage of CoverInitializedName and report it when we reached the end of the parentheses pair. + // + // isolateCoverGrammar function runs the given parser function with a new cover grammar context, and it does not + // effect the current flags. This means the production the parser parses is only used as an expression. Therefore + // the CoverInitializedName check is conducted. + // + // inheritCoverGrammar function runs the given parse function with a new cover grammar context, and it propagates + // the flags outside of the parser. This means the production the parser parses is used as a part of a potential + // pattern. The CoverInitializedName check is deferred. + function isolateCoverGrammar(parser) { + var oldIsBindingElement = isBindingElement, + oldIsAssignmentTarget = isAssignmentTarget, + oldFirstCoverInitializedNameError = firstCoverInitializedNameError, + result; + isBindingElement = true; + isAssignmentTarget = true; + firstCoverInitializedNameError = null; + result = parser(); + if (firstCoverInitializedNameError !== null) { + throwUnexpectedToken(firstCoverInitializedNameError); + } + isBindingElement = oldIsBindingElement; + isAssignmentTarget = oldIsAssignmentTarget; + firstCoverInitializedNameError = oldFirstCoverInitializedNameError; + return result; + } + + function inheritCoverGrammar(parser) { + var oldIsBindingElement = isBindingElement, + oldIsAssignmentTarget = isAssignmentTarget, + oldFirstCoverInitializedNameError = firstCoverInitializedNameError, + result; + isBindingElement = true; + isAssignmentTarget = true; + firstCoverInitializedNameError = null; + result = parser(); + isBindingElement = isBindingElement && oldIsBindingElement; + isAssignmentTarget = isAssignmentTarget && oldIsAssignmentTarget; + firstCoverInitializedNameError = oldFirstCoverInitializedNameError || firstCoverInitializedNameError; + return result; + } + + function parseArrayPattern() { + var node = new Node(), elements = [], rest, restNode; + expect('['); + + while (!match(']')) { + if (match(',')) { + lex(); + elements.push(null); + } else { + if (match('...')) { + restNode = new Node(); + lex(); + rest = parseVariableIdentifier(); + elements.push(restNode.finishRestElement(rest)); + break; + } else { + elements.push(parsePatternWithDefault()); + } + if (!match(']')) { + expect(','); + } + } + + } + + expect(']'); + + return node.finishArrayPattern(elements); + } + + function parsePropertyPattern() { + var node = new Node(), key, computed = match('['), init; + if (lookahead.type === Token.Identifier) { + key = parseVariableIdentifier(); + if (match('=')) { + lex(); + init = parseAssignmentExpression(); + return node.finishProperty( + 'init', key, false, + new WrappingNode(key).finishAssignmentPattern(key, init), false, false); + } else if (!match(':')) { + return node.finishProperty('init', key, false, key, false, true); + } + } else { + key = parseObjectPropertyKey(); + } + expect(':'); + init = parsePatternWithDefault(); + return node.finishProperty('init', key, computed, init, false, false); + } + + function parseObjectPattern() { + var node = new Node(), properties = []; + + expect('{'); + + while (!match('}')) { + properties.push(parsePropertyPattern()); + if (!match('}')) { + expect(','); + } + } + + lex(); + + return node.finishObjectPattern(properties); + } + + function parsePattern() { + if (lookahead.type === Token.Identifier) { + return parseVariableIdentifier(); + } else if (match('[')) { + return parseArrayPattern(); + } else if (match('{')) { + return parseObjectPattern(); + } + throwUnexpectedToken(lookahead); + } + + function parsePatternWithDefault() { + var startToken = lookahead, pattern, right; + pattern = parsePattern(); + if (match('=')) { + lex(); + right = isolateCoverGrammar(parseAssignmentExpression); + pattern = new WrappingNode(startToken).finishAssignmentPattern(pattern, right); + } + return pattern; + } + + // 11.1.4 Array Initialiser + + function parseArrayInitialiser() { + var elements = [], node = new Node(), restSpread; + + expect('['); + + while (!match(']')) { + if (match(',')) { + lex(); + elements.push(null); + } else if (match('...')) { + restSpread = new Node(); + lex(); + restSpread.finishSpreadElement(inheritCoverGrammar(parseAssignmentExpression)); + + if (!match(']')) { + isAssignmentTarget = isBindingElement = false; + expect(','); + } + elements.push(restSpread); + } else { + elements.push(inheritCoverGrammar(parseAssignmentExpression)); + + if (!match(']')) { + expect(','); + } + } + } + + lex(); + + return node.finishArrayExpression(elements); + } + + // 11.1.5 Object Initialiser + + function parsePropertyFunction(node, paramInfo) { + var previousStrict, body; + + isAssignmentTarget = isBindingElement = false; + + previousStrict = strict; + body = isolateCoverGrammar(parseFunctionSourceElements); + + if (strict && paramInfo.firstRestricted) { + tolerateUnexpectedToken(paramInfo.firstRestricted, paramInfo.message); + } + if (strict && paramInfo.stricted) { + tolerateUnexpectedToken(paramInfo.stricted, paramInfo.message); + } + + strict = previousStrict; + return node.finishFunctionExpression(null, paramInfo.params, paramInfo.defaults, body); + } + + function parsePropertyMethodFunction() { + var params, method, node = new Node(); + + params = parseParams(); + method = parsePropertyFunction(node, params); + + return method; + } + + function parseObjectPropertyKey() { + var token, node = new Node(), expr; + + token = lex(); + + // Note: This function is called only from parseObjectProperty(), where + // EOF and Punctuator tokens are already filtered out. + + switch (token.type) { + case Token.StringLiteral: + case Token.NumericLiteral: + if (strict && token.octal) { + tolerateUnexpectedToken(token, Messages.StrictOctalLiteral); + } + return node.finishLiteral(token); + case Token.Identifier: + case Token.BooleanLiteral: + case Token.NullLiteral: + case Token.Keyword: + return node.finishIdentifier(token.value); + case Token.Punctuator: + if (token.value === '[') { + expr = isolateCoverGrammar(parseAssignmentExpression); + expect(']'); + return expr; + } + break; + } + throwUnexpectedToken(token); + } + + function lookaheadPropertyName() { + switch (lookahead.type) { + case Token.Identifier: + case Token.StringLiteral: + case Token.BooleanLiteral: + case Token.NullLiteral: + case Token.NumericLiteral: + case Token.Keyword: + return true; + case Token.Punctuator: + return lookahead.value === '['; + } + return false; + } + + // This function is to try to parse a MethodDefinition as defined in 14.3. But in the case of object literals, + // it might be called at a position where there is in fact a short hand identifier pattern or a data property. + // This can only be determined after we consumed up to the left parentheses. + // + // In order to avoid back tracking, it returns `null` if the position is not a MethodDefinition and the caller + // is responsible to visit other options. + function tryParseMethodDefinition(token, key, computed, node) { + var value, options, methodNode; + + if (token.type === Token.Identifier) { + // check for `get` and `set`; + + if (token.value === 'get' && lookaheadPropertyName()) { + computed = match('['); + key = parseObjectPropertyKey(); + methodNode = new Node(); + expect('('); + expect(')'); + value = parsePropertyFunction(methodNode, { + params: [], + defaults: [], + stricted: null, + firstRestricted: null, + message: null + }); + return node.finishProperty('get', key, computed, value, false, false); + } else if (token.value === 'set' && lookaheadPropertyName()) { + computed = match('['); + key = parseObjectPropertyKey(); + methodNode = new Node(); + expect('('); + + options = { + params: [], + defaultCount: 0, + defaults: [], + firstRestricted: null, + paramSet: {} + }; + if (match(')')) { + tolerateUnexpectedToken(lookahead); + } else { + parseParam(options); + if (options.defaultCount === 0) { + options.defaults = []; + } + } + expect(')'); + + value = parsePropertyFunction(methodNode, options); + return node.finishProperty('set', key, computed, value, false, false); + } + } + + if (match('(')) { + value = parsePropertyMethodFunction(); + return node.finishProperty('init', key, computed, value, true, false); + } + + // Not a MethodDefinition. + return null; + } + + function checkProto(key, computed, hasProto) { + if (computed === false && (key.type === Syntax.Identifier && key.name === '__proto__' || + key.type === Syntax.Literal && key.value === '__proto__')) { + if (hasProto.value) { + tolerateError(Messages.DuplicateProtoProperty); + } else { + hasProto.value = true; + } + } + } + + function parseObjectProperty(hasProto) { + var token = lookahead, node = new Node(), computed, key, maybeMethod, value; + + computed = match('['); + key = parseObjectPropertyKey(); + maybeMethod = tryParseMethodDefinition(token, key, computed, node); + + if (maybeMethod) { + checkProto(maybeMethod.key, maybeMethod.computed, hasProto); + // finished + return maybeMethod; + } + + // init property or short hand property. + checkProto(key, computed, hasProto); + + if (match(':')) { + lex(); + value = inheritCoverGrammar(parseAssignmentExpression); + return node.finishProperty('init', key, computed, value, false, false); + } + + if (token.type === Token.Identifier) { + if (match('=')) { + firstCoverInitializedNameError = lookahead; + lex(); + value = isolateCoverGrammar(parseAssignmentExpression); + return node.finishProperty('init', key, computed, + new WrappingNode(token).finishAssignmentPattern(key, value), false, true); + } + return node.finishProperty('init', key, computed, key, false, true); + } + + throwUnexpectedToken(lookahead); + } + + function parseObjectInitialiser() { + var properties = [], hasProto = {value: false}, node = new Node(); + + expect('{'); + + while (!match('}')) { + properties.push(parseObjectProperty(hasProto)); + + if (!match('}')) { + expectCommaSeparator(); + } + } + + expect('}'); + + return node.finishObjectExpression(properties); + } + + function reinterpretExpressionAsPattern(expr) { + var i; + switch (expr.type) { + case Syntax.Identifier: + case Syntax.MemberExpression: + case Syntax.RestElement: + case Syntax.AssignmentPattern: + break; + case Syntax.SpreadElement: + expr.type = Syntax.RestElement; + reinterpretExpressionAsPattern(expr.argument); + break; + case Syntax.ArrayExpression: + expr.type = Syntax.ArrayPattern; + for (i = 0; i < expr.elements.length; i++) { + if (expr.elements[i] !== null) { + reinterpretExpressionAsPattern(expr.elements[i]); + } + } + break; + case Syntax.ObjectExpression: + expr.type = Syntax.ObjectPattern; + for (i = 0; i < expr.properties.length; i++) { + reinterpretExpressionAsPattern(expr.properties[i].value); + } + break; + case Syntax.AssignmentExpression: + expr.type = Syntax.AssignmentPattern; + reinterpretExpressionAsPattern(expr.left); + break; + default: + // Allow other node type for tolerant parsing. + break; + } + } + + function parseTemplateElement(option) { + var node, token; + + if (lookahead.type !== Token.Template || (option.head && !lookahead.head)) { + throwUnexpectedToken(); + } + + node = new Node(); + token = lex(); + + return node.finishTemplateElement({ raw: token.value.raw, cooked: token.value.cooked }, token.tail); + } + + function parseTemplateLiteral() { + var quasi, quasis, expressions, node = new Node(); + + quasi = parseTemplateElement({ head: true }); + quasis = [ quasi ]; + expressions = []; + + while (!quasi.tail) { + expressions.push(parseExpression()); + quasi = parseTemplateElement({ head: false }); + quasis.push(quasi); + } + + return node.finishTemplateLiteral(quasis, expressions); + } + + // 11.1.6 The Grouping Operator + + function parseGroupExpression() { + var expr, expressions, startToken, i; + + expect('('); + + if (match(')')) { + lex(); + if (!match('=>')) { + expect('=>'); + } + return { + type: PlaceHolders.ArrowParameterPlaceHolder, + params: [] + }; + } + + startToken = lookahead; + if (match('...')) { + expr = parseRestElement(); + expect(')'); + if (!match('=>')) { + expect('=>'); + } + return { + type: PlaceHolders.ArrowParameterPlaceHolder, + params: [expr] + }; + } + + isBindingElement = true; + expr = inheritCoverGrammar(parseAssignmentExpression); + + if (match(',')) { + isAssignmentTarget = false; + expressions = [expr]; + + while (startIndex < length) { + if (!match(',')) { + break; + } + lex(); + + if (match('...')) { + if (!isBindingElement) { + throwUnexpectedToken(lookahead); + } + expressions.push(parseRestElement()); + expect(')'); + if (!match('=>')) { + expect('=>'); + } + isBindingElement = false; + for (i = 0; i < expressions.length; i++) { + reinterpretExpressionAsPattern(expressions[i]); + } + return { + type: PlaceHolders.ArrowParameterPlaceHolder, + params: expressions + }; + } + + expressions.push(inheritCoverGrammar(parseAssignmentExpression)); + } + + expr = new WrappingNode(startToken).finishSequenceExpression(expressions); + } + + + expect(')'); + + if (match('=>')) { + if (!isBindingElement) { + throwUnexpectedToken(lookahead); + } + + if (expr.type === Syntax.SequenceExpression) { + for (i = 0; i < expr.expressions.length; i++) { + reinterpretExpressionAsPattern(expr.expressions[i]); + } + } else { + reinterpretExpressionAsPattern(expr); + } + + expr = { + type: PlaceHolders.ArrowParameterPlaceHolder, + params: expr.type === Syntax.SequenceExpression ? expr.expressions : [expr] + }; + } + isBindingElement = false; + return expr; + } + + + // 11.1 Primary Expressions + + function parsePrimaryExpression() { + var type, token, expr, node; + + if (match('(')) { + isBindingElement = false; + return inheritCoverGrammar(parseGroupExpression); + } + + if (match('[')) { + return inheritCoverGrammar(parseArrayInitialiser); + } + + if (match('{')) { + return inheritCoverGrammar(parseObjectInitialiser); + } + + type = lookahead.type; + node = new Node(); + + if (type === Token.Identifier) { + expr = node.finishIdentifier(lex().value); + } else if (type === Token.StringLiteral || type === Token.NumericLiteral) { + isAssignmentTarget = isBindingElement = false; + if (strict && lookahead.octal) { + tolerateUnexpectedToken(lookahead, Messages.StrictOctalLiteral); + } + expr = node.finishLiteral(lex()); + } else if (type === Token.Keyword) { + isAssignmentTarget = isBindingElement = false; + if (matchKeyword('function')) { + return parseFunctionExpression(); + } + if (matchKeyword('this')) { + lex(); + return node.finishThisExpression(); + } + if (matchKeyword('class')) { + return parseClassExpression(); + } + throwUnexpectedToken(lex()); + } else if (type === Token.BooleanLiteral) { + isAssignmentTarget = isBindingElement = false; + token = lex(); + token.value = (token.value === 'true'); + expr = node.finishLiteral(token); + } else if (type === Token.NullLiteral) { + isAssignmentTarget = isBindingElement = false; + token = lex(); + token.value = null; + expr = node.finishLiteral(token); + } else if (match('/') || match('/=')) { + isAssignmentTarget = isBindingElement = false; + index = startIndex; + + if (typeof extra.tokens !== 'undefined') { + token = collectRegex(); + } else { + token = scanRegExp(); + } + lex(); + expr = node.finishLiteral(token); + } else if (type === Token.Template) { + expr = parseTemplateLiteral(); + } else { + throwUnexpectedToken(lex()); + } + + return expr; + } + + // 11.2 Left-Hand-Side Expressions + + function parseArguments() { + var args = []; + + expect('('); + + if (!match(')')) { + while (startIndex < length) { + args.push(isolateCoverGrammar(parseAssignmentExpression)); + if (match(')')) { + break; + } + expectCommaSeparator(); + } + } + + expect(')'); + + return args; + } + + function parseNonComputedProperty() { + var token, node = new Node(); + + token = lex(); + + if (!isIdentifierName(token)) { + throwUnexpectedToken(token); + } + + return node.finishIdentifier(token.value); + } + + function parseNonComputedMember() { + expect('.'); + + return parseNonComputedProperty(); + } + + function parseComputedMember() { + var expr; + + expect('['); + + expr = isolateCoverGrammar(parseExpression); + + expect(']'); + + return expr; + } + + function parseNewExpression() { + var callee, args, node = new Node(); + + expectKeyword('new'); + callee = isolateCoverGrammar(parseLeftHandSideExpression); + args = match('(') ? parseArguments() : []; + + isAssignmentTarget = isBindingElement = false; + + return node.finishNewExpression(callee, args); + } + + function parseLeftHandSideExpressionAllowCall() { + var quasi, expr, args, property, startToken, previousAllowIn = state.allowIn; + + startToken = lookahead; + state.allowIn = true; + + if (matchKeyword('super') && state.inFunctionBody) { + expr = new Node(); + lex(); + expr = expr.finishSuper(); + if (!match('(') && !match('.') && !match('[')) { + throwUnexpectedToken(lookahead); + } + } else { + expr = inheritCoverGrammar(matchKeyword('new') ? parseNewExpression : parsePrimaryExpression); + } + + for (;;) { + if (match('.')) { + isBindingElement = false; + isAssignmentTarget = true; + property = parseNonComputedMember(); + expr = new WrappingNode(startToken).finishMemberExpression('.', expr, property); + } else if (match('(')) { + isBindingElement = false; + isAssignmentTarget = false; + args = parseArguments(); + expr = new WrappingNode(startToken).finishCallExpression(expr, args); + } else if (match('[')) { + isBindingElement = false; + isAssignmentTarget = true; + property = parseComputedMember(); + expr = new WrappingNode(startToken).finishMemberExpression('[', expr, property); + } else if (lookahead.type === Token.Template && lookahead.head) { + quasi = parseTemplateLiteral(); + expr = new WrappingNode(startToken).finishTaggedTemplateExpression(expr, quasi); + } else { + break; + } + } + state.allowIn = previousAllowIn; + + return expr; + } + + function parseLeftHandSideExpression() { + var quasi, expr, property, startToken; + assert(state.allowIn, 'callee of new expression always allow in keyword.'); + + startToken = lookahead; + + if (matchKeyword('super') && state.inFunctionBody) { + expr = new Node(); + lex(); + expr = expr.finishSuper(); + if (!match('[') && !match('.')) { + throwUnexpectedToken(lookahead); + } + } else { + expr = inheritCoverGrammar(matchKeyword('new') ? parseNewExpression : parsePrimaryExpression); + } + + for (;;) { + if (match('[')) { + isBindingElement = false; + isAssignmentTarget = true; + property = parseComputedMember(); + expr = new WrappingNode(startToken).finishMemberExpression('[', expr, property); + } else if (match('.')) { + isBindingElement = false; + isAssignmentTarget = true; + property = parseNonComputedMember(); + expr = new WrappingNode(startToken).finishMemberExpression('.', expr, property); + } else if (lookahead.type === Token.Template && lookahead.head) { + quasi = parseTemplateLiteral(); + expr = new WrappingNode(startToken).finishTaggedTemplateExpression(expr, quasi); + } else { + break; + } + } + return expr; + } + + // 11.3 Postfix Expressions + + function parsePostfixExpression() { + var expr, token, startToken = lookahead; + + expr = inheritCoverGrammar(parseLeftHandSideExpressionAllowCall); + + if (!hasLineTerminator && lookahead.type === Token.Punctuator) { + if (match('++') || match('--')) { + // 11.3.1, 11.3.2 + if (strict && expr.type === Syntax.Identifier && isRestrictedWord(expr.name)) { + tolerateError(Messages.StrictLHSPostfix); + } + + if (!isAssignmentTarget) { + tolerateError(Messages.InvalidLHSInAssignment); + } + + isAssignmentTarget = isBindingElement = false; + + token = lex(); + expr = new WrappingNode(startToken).finishPostfixExpression(token.value, expr); + } + } + + return expr; + } + + // 11.4 Unary Operators + + function parseUnaryExpression() { + var token, expr, startToken; + + if (lookahead.type !== Token.Punctuator && lookahead.type !== Token.Keyword) { + expr = parsePostfixExpression(); + } else if (match('++') || match('--')) { + startToken = lookahead; + token = lex(); + expr = inheritCoverGrammar(parseUnaryExpression); + // 11.4.4, 11.4.5 + if (strict && expr.type === Syntax.Identifier && isRestrictedWord(expr.name)) { + tolerateError(Messages.StrictLHSPrefix); + } + + if (!isAssignmentTarget) { + tolerateError(Messages.InvalidLHSInAssignment); + } + expr = new WrappingNode(startToken).finishUnaryExpression(token.value, expr); + isAssignmentTarget = isBindingElement = false; + } else if (match('+') || match('-') || match('~') || match('!')) { + startToken = lookahead; + token = lex(); + expr = inheritCoverGrammar(parseUnaryExpression); + expr = new WrappingNode(startToken).finishUnaryExpression(token.value, expr); + isAssignmentTarget = isBindingElement = false; + } else if (matchKeyword('delete') || matchKeyword('void') || matchKeyword('typeof')) { + startToken = lookahead; + token = lex(); + expr = inheritCoverGrammar(parseUnaryExpression); + expr = new WrappingNode(startToken).finishUnaryExpression(token.value, expr); + if (strict && expr.operator === 'delete' && expr.argument.type === Syntax.Identifier) { + tolerateError(Messages.StrictDelete); + } + isAssignmentTarget = isBindingElement = false; + } else { + expr = parsePostfixExpression(); + } + + return expr; + } + + function binaryPrecedence(token, allowIn) { + var prec = 0; + + if (token.type !== Token.Punctuator && token.type !== Token.Keyword) { + return 0; + } + + switch (token.value) { + case '||': + prec = 1; + break; + + case '&&': + prec = 2; + break; + + case '|': + prec = 3; + break; + + case '^': + prec = 4; + break; + + case '&': + prec = 5; + break; + + case '==': + case '!=': + case '===': + case '!==': + prec = 6; + break; + + case '<': + case '>': + case '<=': + case '>=': + case 'instanceof': + prec = 7; + break; + + case 'in': + prec = allowIn ? 7 : 0; + break; + + case '<<': + case '>>': + case '>>>': + prec = 8; + break; + + case '+': + case '-': + prec = 9; + break; + + case '*': + case '/': + case '%': + prec = 11; + break; + + default: + break; + } + + return prec; + } + + // 11.5 Multiplicative Operators + // 11.6 Additive Operators + // 11.7 Bitwise Shift Operators + // 11.8 Relational Operators + // 11.9 Equality Operators + // 11.10 Binary Bitwise Operators + // 11.11 Binary Logical Operators + + function parseBinaryExpression() { + var marker, markers, expr, token, prec, stack, right, operator, left, i; + + marker = lookahead; + left = inheritCoverGrammar(parseUnaryExpression); + + token = lookahead; + prec = binaryPrecedence(token, state.allowIn); + if (prec === 0) { + return left; + } + isAssignmentTarget = isBindingElement = false; + token.prec = prec; + lex(); + + markers = [marker, lookahead]; + right = isolateCoverGrammar(parseUnaryExpression); + + stack = [left, token, right]; + + while ((prec = binaryPrecedence(lookahead, state.allowIn)) > 0) { + + // Reduce: make a binary expression from the three topmost entries. + while ((stack.length > 2) && (prec <= stack[stack.length - 2].prec)) { + right = stack.pop(); + operator = stack.pop().value; + left = stack.pop(); + markers.pop(); + expr = new WrappingNode(markers[markers.length - 1]).finishBinaryExpression(operator, left, right); + stack.push(expr); + } + + // Shift. + token = lex(); + token.prec = prec; + stack.push(token); + markers.push(lookahead); + expr = isolateCoverGrammar(parseUnaryExpression); + stack.push(expr); + } + + // Final reduce to clean-up the stack. + i = stack.length - 1; + expr = stack[i]; + markers.pop(); + while (i > 1) { + expr = new WrappingNode(markers.pop()).finishBinaryExpression(stack[i - 1].value, stack[i - 2], expr); + i -= 2; + } + + return expr; + } + + + // 11.12 Conditional Operator + + function parseConditionalExpression() { + var expr, previousAllowIn, consequent, alternate, startToken; + + startToken = lookahead; + + expr = inheritCoverGrammar(parseBinaryExpression); + if (match('?')) { + lex(); + previousAllowIn = state.allowIn; + state.allowIn = true; + consequent = isolateCoverGrammar(parseAssignmentExpression); + state.allowIn = previousAllowIn; + expect(':'); + alternate = isolateCoverGrammar(parseAssignmentExpression); + + expr = new WrappingNode(startToken).finishConditionalExpression(expr, consequent, alternate); + isAssignmentTarget = isBindingElement = false; + } + + return expr; + } + + // [ES6] 14.2 Arrow Function + + function parseConciseBody() { + if (match('{')) { + return parseFunctionSourceElements(); + } + return isolateCoverGrammar(parseAssignmentExpression); + } + + function checkPatternParam(options, param) { + var i; + switch (param.type) { + case Syntax.Identifier: + validateParam(options, param, param.name); + break; + case Syntax.RestElement: + checkPatternParam(options, param.argument); + break; + case Syntax.AssignmentPattern: + checkPatternParam(options, param.left); + break; + case Syntax.ArrayPattern: + for (i = 0; i < param.elements.length; i++) { + if (param.elements[i] !== null) { + checkPatternParam(options, param.elements[i]); + } + } + break; + default: + assert(param.type === Syntax.ObjectPattern, 'Invalid type'); + for (i = 0; i < param.properties.length; i++) { + checkPatternParam(options, param.properties[i].value); + } + break; + } + } + function reinterpretAsCoverFormalsList(expr) { + var i, len, param, params, defaults, defaultCount, options, token; + + defaults = []; + defaultCount = 0; + params = [expr]; + + switch (expr.type) { + case Syntax.Identifier: + break; + case PlaceHolders.ArrowParameterPlaceHolder: + params = expr.params; + break; + default: + return null; + } + + options = { + paramSet: {} + }; + + for (i = 0, len = params.length; i < len; i += 1) { + param = params[i]; + switch (param.type) { + case Syntax.AssignmentPattern: + params[i] = param.left; + defaults.push(param.right); + ++defaultCount; + checkPatternParam(options, param.left); + break; + default: + checkPatternParam(options, param); + params[i] = param; + defaults.push(null); + break; + } + } + + if (options.message === Messages.StrictParamDupe) { + token = strict ? options.stricted : options.firstRestricted; + throwUnexpectedToken(token, options.message); + } + + if (defaultCount === 0) { + defaults = []; + } + + return { + params: params, + defaults: defaults, + stricted: options.stricted, + firstRestricted: options.firstRestricted, + message: options.message + }; + } + + function parseArrowFunctionExpression(options, node) { + var previousStrict, body; + + if (hasLineTerminator) { + tolerateUnexpectedToken(lookahead); + } + expect('=>'); + previousStrict = strict; + + body = parseConciseBody(); + + if (strict && options.firstRestricted) { + throwUnexpectedToken(options.firstRestricted, options.message); + } + if (strict && options.stricted) { + tolerateUnexpectedToken(options.stricted, options.message); + } + + strict = previousStrict; + + return node.finishArrowFunctionExpression(options.params, options.defaults, body, body.type !== Syntax.BlockStatement); + } + + // 11.13 Assignment Operators + + function parseAssignmentExpression() { + var token, expr, right, list, startToken; + + startToken = lookahead; + token = lookahead; + + expr = parseConditionalExpression(); + + if (expr.type === PlaceHolders.ArrowParameterPlaceHolder || match('=>')) { + isAssignmentTarget = isBindingElement = false; + list = reinterpretAsCoverFormalsList(expr); + + if (list) { + firstCoverInitializedNameError = null; + return parseArrowFunctionExpression(list, new WrappingNode(startToken)); + } + + return expr; + } + + if (matchAssign()) { + if (!isAssignmentTarget) { + tolerateError(Messages.InvalidLHSInAssignment); + } + + // 11.13.1 + if (strict && expr.type === Syntax.Identifier && isRestrictedWord(expr.name)) { + tolerateUnexpectedToken(token, Messages.StrictLHSAssignment); + } + + if (!match('=')) { + isAssignmentTarget = isBindingElement = false; + } else { + reinterpretExpressionAsPattern(expr); + } + + token = lex(); + right = isolateCoverGrammar(parseAssignmentExpression); + expr = new WrappingNode(startToken).finishAssignmentExpression(token.value, expr, right); + firstCoverInitializedNameError = null; + } + + return expr; + } + + // 11.14 Comma Operator + + function parseExpression() { + var expr, startToken = lookahead, expressions; + + expr = isolateCoverGrammar(parseAssignmentExpression); + + if (match(',')) { + expressions = [expr]; + + while (startIndex < length) { + if (!match(',')) { + break; + } + lex(); + expressions.push(isolateCoverGrammar(parseAssignmentExpression)); + } + + expr = new WrappingNode(startToken).finishSequenceExpression(expressions); + } + + return expr; + } + + // 12.1 Block + + function parseStatementListItem() { + if (lookahead.type === Token.Keyword) { + switch (lookahead.value) { + case 'export': + if (sourceType !== 'module') { + tolerateUnexpectedToken(lookahead, Messages.IllegalExportDeclaration); + } + return parseExportDeclaration(); + case 'import': + if (sourceType !== 'module') { + tolerateUnexpectedToken(lookahead, Messages.IllegalImportDeclaration); + } + return parseImportDeclaration(); + case 'const': + case 'let': + return parseLexicalDeclaration({inFor: false}); + case 'function': + return parseFunctionDeclaration(new Node()); + case 'class': + return parseClassDeclaration(); + } + } + + return parseStatement(); + } + + function parseStatementList() { + var list = []; + while (startIndex < length) { + if (match('}')) { + break; + } + list.push(parseStatementListItem()); + } + + return list; + } + + function parseBlock() { + var block, node = new Node(); + + expect('{'); + + block = parseStatementList(); + + expect('}'); + + return node.finishBlockStatement(block); + } + + // 12.2 Variable Statement + + function parseVariableIdentifier() { + var token, node = new Node(); + + token = lex(); + + if (token.type !== Token.Identifier) { + if (strict && token.type === Token.Keyword && isStrictModeReservedWord(token.value)) { + tolerateUnexpectedToken(token, Messages.StrictReservedWord); + } else { + throwUnexpectedToken(token); + } + } + + return node.finishIdentifier(token.value); + } + + function parseVariableDeclaration() { + var init = null, id, node = new Node(); + + id = parsePattern(); + + // 12.2.1 + if (strict && isRestrictedWord(id.name)) { + tolerateError(Messages.StrictVarName); + } + + if (match('=')) { + lex(); + init = isolateCoverGrammar(parseAssignmentExpression); + } else if (id.type !== Syntax.Identifier) { + expect('='); + } + + return node.finishVariableDeclarator(id, init); + } + + function parseVariableDeclarationList() { + var list = []; + + do { + list.push(parseVariableDeclaration()); + if (!match(',')) { + break; + } + lex(); + } while (startIndex < length); + + return list; + } + + function parseVariableStatement(node) { + var declarations; + + expectKeyword('var'); + + declarations = parseVariableDeclarationList(); + + consumeSemicolon(); + + return node.finishVariableDeclaration(declarations); + } + + function parseLexicalBinding(kind, options) { + var init = null, id, node = new Node(); + + id = parsePattern(); + + // 12.2.1 + if (strict && id.type === Syntax.Identifier && isRestrictedWord(id.name)) { + tolerateError(Messages.StrictVarName); + } + + if (kind === 'const') { + if (!matchKeyword('in')) { + expect('='); + init = isolateCoverGrammar(parseAssignmentExpression); + } + } else if ((!options.inFor && id.type !== Syntax.Identifier) || match('=')) { + expect('='); + init = isolateCoverGrammar(parseAssignmentExpression); + } + + return node.finishVariableDeclarator(id, init); + } + + function parseBindingList(kind, options) { + var list = []; + + do { + list.push(parseLexicalBinding(kind, options)); + if (!match(',')) { + break; + } + lex(); + } while (startIndex < length); + + return list; + } + + function parseLexicalDeclaration(options) { + var kind, declarations, node = new Node(); + + kind = lex().value; + assert(kind === 'let' || kind === 'const', 'Lexical declaration must be either let or const'); + + declarations = parseBindingList(kind, options); + + consumeSemicolon(); + + return node.finishLexicalDeclaration(declarations, kind); + } + + function parseRestElement() { + var param, node = new Node(); + + lex(); + + if (match('{')) { + throwError(Messages.ObjectPatternAsRestParameter); + } + + param = parseVariableIdentifier(); + + if (match('=')) { + throwError(Messages.DefaultRestParameter); + } + + if (!match(')')) { + throwError(Messages.ParameterAfterRestParameter); + } + + return node.finishRestElement(param); + } + + // 12.3 Empty Statement + + function parseEmptyStatement(node) { + expect(';'); + return node.finishEmptyStatement(); + } + + // 12.4 Expression Statement + + function parseExpressionStatement(node) { + var expr = parseExpression(); + consumeSemicolon(); + return node.finishExpressionStatement(expr); + } + + // 12.5 If statement + + function parseIfStatement(node) { + var test, consequent, alternate; + + expectKeyword('if'); + + expect('('); + + test = parseExpression(); + + expect(')'); + + consequent = parseStatement(); + + if (matchKeyword('else')) { + lex(); + alternate = parseStatement(); + } else { + alternate = null; + } + + return node.finishIfStatement(test, consequent, alternate); + } + + // 12.6 Iteration Statements + + function parseDoWhileStatement(node) { + var body, test, oldInIteration; + + expectKeyword('do'); + + oldInIteration = state.inIteration; + state.inIteration = true; + + body = parseStatement(); + + state.inIteration = oldInIteration; + + expectKeyword('while'); + + expect('('); + + test = parseExpression(); + + expect(')'); + + if (match(';')) { + lex(); + } + + return node.finishDoWhileStatement(body, test); + } + + function parseWhileStatement(node) { + var test, body, oldInIteration; + + expectKeyword('while'); + + expect('('); + + test = parseExpression(); + + expect(')'); + + oldInIteration = state.inIteration; + state.inIteration = true; + + body = parseStatement(); + + state.inIteration = oldInIteration; + + return node.finishWhileStatement(test, body); + } + + function parseForStatement(node) { + var init, initSeq, initStartToken, test, update, left, right, kind, declarations, + body, oldInIteration, previousAllowIn = state.allowIn; + + init = test = update = null; + + expectKeyword('for'); + + expect('('); + + if (match(';')) { + lex(); + } else { + if (matchKeyword('var')) { + init = new Node(); + lex(); + + state.allowIn = false; + init = init.finishVariableDeclaration(parseVariableDeclarationList()); + state.allowIn = previousAllowIn; + + if (init.declarations.length === 1 && matchKeyword('in')) { + lex(); + left = init; + right = parseExpression(); + init = null; + } else { + expect(';'); + } + } else if (matchKeyword('const') || matchKeyword('let')) { + init = new Node(); + kind = lex().value; + + state.allowIn = false; + declarations = parseBindingList(kind, {inFor: true}); + state.allowIn = previousAllowIn; + + if (declarations.length === 1 && declarations[0].init === null && matchKeyword('in')) { + init = init.finishLexicalDeclaration(declarations, kind); + lex(); + left = init; + right = parseExpression(); + init = null; + } else { + consumeSemicolon(); + init = init.finishLexicalDeclaration(declarations, kind); + } + } else { + initStartToken = lookahead; + state.allowIn = false; + init = inheritCoverGrammar(parseAssignmentExpression); + state.allowIn = previousAllowIn; + + if (matchKeyword('in')) { + if (!isAssignmentTarget) { + tolerateError(Messages.InvalidLHSInForIn); + } + + lex(); + reinterpretExpressionAsPattern(init); + left = init; + right = parseExpression(); + init = null; + } else { + if (match(',')) { + initSeq = [init]; + while (match(',')) { + lex(); + initSeq.push(isolateCoverGrammar(parseAssignmentExpression)); + } + init = new WrappingNode(initStartToken).finishSequenceExpression(initSeq); + } + expect(';'); + } + } + } + + if (typeof left === 'undefined') { + + if (!match(';')) { + test = parseExpression(); + } + expect(';'); + + if (!match(')')) { + update = parseExpression(); + } + } + + expect(')'); + + oldInIteration = state.inIteration; + state.inIteration = true; + + body = isolateCoverGrammar(parseStatement); + + state.inIteration = oldInIteration; + + return (typeof left === 'undefined') ? + node.finishForStatement(init, test, update, body) : + node.finishForInStatement(left, right, body); + } + + // 12.7 The continue statement + + function parseContinueStatement(node) { + var label = null, key; + + expectKeyword('continue'); + + // Optimize the most common form: 'continue;'. + if (source.charCodeAt(startIndex) === 0x3B) { + lex(); + + if (!state.inIteration) { + throwError(Messages.IllegalContinue); + } + + return node.finishContinueStatement(null); + } + + if (hasLineTerminator) { + if (!state.inIteration) { + throwError(Messages.IllegalContinue); + } + + return node.finishContinueStatement(null); + } + + if (lookahead.type === Token.Identifier) { + label = parseVariableIdentifier(); + + key = '$' + label.name; + if (!Object.prototype.hasOwnProperty.call(state.labelSet, key)) { + throwError(Messages.UnknownLabel, label.name); + } + } + + consumeSemicolon(); + + if (label === null && !state.inIteration) { + throwError(Messages.IllegalContinue); + } + + return node.finishContinueStatement(label); + } + + // 12.8 The break statement + + function parseBreakStatement(node) { + var label = null, key; + + expectKeyword('break'); + + // Catch the very common case first: immediately a semicolon (U+003B). + if (source.charCodeAt(lastIndex) === 0x3B) { + lex(); + + if (!(state.inIteration || state.inSwitch)) { + throwError(Messages.IllegalBreak); + } + + return node.finishBreakStatement(null); + } + + if (hasLineTerminator) { + if (!(state.inIteration || state.inSwitch)) { + throwError(Messages.IllegalBreak); + } + + return node.finishBreakStatement(null); + } + + if (lookahead.type === Token.Identifier) { + label = parseVariableIdentifier(); + + key = '$' + label.name; + if (!Object.prototype.hasOwnProperty.call(state.labelSet, key)) { + throwError(Messages.UnknownLabel, label.name); + } + } + + consumeSemicolon(); + + if (label === null && !(state.inIteration || state.inSwitch)) { + throwError(Messages.IllegalBreak); + } + + return node.finishBreakStatement(label); + } + + // 12.9 The return statement + + function parseReturnStatement(node) { + var argument = null; + + expectKeyword('return'); + + if (!state.inFunctionBody) { + tolerateError(Messages.IllegalReturn); + } + + // 'return' followed by a space and an identifier is very common. + if (source.charCodeAt(lastIndex) === 0x20) { + if (isIdentifierStart(source.charCodeAt(lastIndex + 1))) { + argument = parseExpression(); + consumeSemicolon(); + return node.finishReturnStatement(argument); + } + } + + if (hasLineTerminator) { + // HACK + return node.finishReturnStatement(null); + } + + if (!match(';')) { + if (!match('}') && lookahead.type !== Token.EOF) { + argument = parseExpression(); + } + } + + consumeSemicolon(); + + return node.finishReturnStatement(argument); + } + + // 12.10 The with statement + + function parseWithStatement(node) { + var object, body; + + if (strict) { + tolerateError(Messages.StrictModeWith); + } + + expectKeyword('with'); + + expect('('); + + object = parseExpression(); + + expect(')'); + + body = parseStatement(); + + return node.finishWithStatement(object, body); + } + + // 12.10 The swith statement + + function parseSwitchCase() { + var test, consequent = [], statement, node = new Node(); + + if (matchKeyword('default')) { + lex(); + test = null; + } else { + expectKeyword('case'); + test = parseExpression(); + } + expect(':'); + + while (startIndex < length) { + if (match('}') || matchKeyword('default') || matchKeyword('case')) { + break; + } + statement = parseStatementListItem(); + consequent.push(statement); + } + + return node.finishSwitchCase(test, consequent); + } + + function parseSwitchStatement(node) { + var discriminant, cases, clause, oldInSwitch, defaultFound; + + expectKeyword('switch'); + + expect('('); + + discriminant = parseExpression(); + + expect(')'); + + expect('{'); + + cases = []; + + if (match('}')) { + lex(); + return node.finishSwitchStatement(discriminant, cases); + } + + oldInSwitch = state.inSwitch; + state.inSwitch = true; + defaultFound = false; + + while (startIndex < length) { + if (match('}')) { + break; + } + clause = parseSwitchCase(); + if (clause.test === null) { + if (defaultFound) { + throwError(Messages.MultipleDefaultsInSwitch); + } + defaultFound = true; + } + cases.push(clause); + } + + state.inSwitch = oldInSwitch; + + expect('}'); + + return node.finishSwitchStatement(discriminant, cases); + } + + // 12.13 The throw statement + + function parseThrowStatement(node) { + var argument; + + expectKeyword('throw'); + + if (hasLineTerminator) { + throwError(Messages.NewlineAfterThrow); + } + + argument = parseExpression(); + + consumeSemicolon(); + + return node.finishThrowStatement(argument); + } + + // 12.14 The try statement + + function parseCatchClause() { + var param, body, node = new Node(); + + expectKeyword('catch'); + + expect('('); + if (match(')')) { + throwUnexpectedToken(lookahead); + } + + param = parsePattern(); + + // 12.14.1 + if (strict && isRestrictedWord(param.name)) { + tolerateError(Messages.StrictCatchVariable); + } + + expect(')'); + body = parseBlock(); + return node.finishCatchClause(param, body); + } + + function parseTryStatement(node) { + var block, handler = null, finalizer = null; + + expectKeyword('try'); + + block = parseBlock(); + + if (matchKeyword('catch')) { + handler = parseCatchClause(); + } + + if (matchKeyword('finally')) { + lex(); + finalizer = parseBlock(); + } + + if (!handler && !finalizer) { + throwError(Messages.NoCatchOrFinally); + } + + return node.finishTryStatement(block, handler, finalizer); + } + + // 12.15 The debugger statement + + function parseDebuggerStatement(node) { + expectKeyword('debugger'); + + consumeSemicolon(); + + return node.finishDebuggerStatement(); + } + + // 12 Statements + + function parseStatement() { + var type = lookahead.type, + expr, + labeledBody, + key, + node; + + if (type === Token.EOF) { + throwUnexpectedToken(lookahead); + } + + if (type === Token.Punctuator && lookahead.value === '{') { + return parseBlock(); + } + isAssignmentTarget = isBindingElement = true; + node = new Node(); + + if (type === Token.Punctuator) { + switch (lookahead.value) { + case ';': + return parseEmptyStatement(node); + case '(': + return parseExpressionStatement(node); + default: + break; + } + } else if (type === Token.Keyword) { + switch (lookahead.value) { + case 'break': + return parseBreakStatement(node); + case 'continue': + return parseContinueStatement(node); + case 'debugger': + return parseDebuggerStatement(node); + case 'do': + return parseDoWhileStatement(node); + case 'for': + return parseForStatement(node); + case 'function': + return parseFunctionDeclaration(node); + case 'if': + return parseIfStatement(node); + case 'return': + return parseReturnStatement(node); + case 'switch': + return parseSwitchStatement(node); + case 'throw': + return parseThrowStatement(node); + case 'try': + return parseTryStatement(node); + case 'var': + return parseVariableStatement(node); + case 'while': + return parseWhileStatement(node); + case 'with': + return parseWithStatement(node); + default: + break; + } + } + + expr = parseExpression(); + + // 12.12 Labelled Statements + if ((expr.type === Syntax.Identifier) && match(':')) { + lex(); + + key = '$' + expr.name; + if (Object.prototype.hasOwnProperty.call(state.labelSet, key)) { + throwError(Messages.Redeclaration, 'Label', expr.name); + } + + state.labelSet[key] = true; + labeledBody = parseStatement(); + delete state.labelSet[key]; + return node.finishLabeledStatement(expr, labeledBody); + } + + consumeSemicolon(); + + return node.finishExpressionStatement(expr); + } + + // 13 Function Definition + + function parseFunctionSourceElements() { + var statement, body = [], token, directive, firstRestricted, + oldLabelSet, oldInIteration, oldInSwitch, oldInFunctionBody, oldParenthesisCount, + node = new Node(); + + expect('{'); + + while (startIndex < length) { + if (lookahead.type !== Token.StringLiteral) { + break; + } + token = lookahead; + + statement = parseStatementListItem(); + body.push(statement); + if (statement.expression.type !== Syntax.Literal) { + // this is not directive + break; + } + directive = source.slice(token.start + 1, token.end - 1); + if (directive === 'use strict') { + strict = true; + if (firstRestricted) { + tolerateUnexpectedToken(firstRestricted, Messages.StrictOctalLiteral); + } + } else { + if (!firstRestricted && token.octal) { + firstRestricted = token; + } + } + } + + oldLabelSet = state.labelSet; + oldInIteration = state.inIteration; + oldInSwitch = state.inSwitch; + oldInFunctionBody = state.inFunctionBody; + oldParenthesisCount = state.parenthesizedCount; + + state.labelSet = {}; + state.inIteration = false; + state.inSwitch = false; + state.inFunctionBody = true; + state.parenthesizedCount = 0; + + while (startIndex < length) { + if (match('}')) { + break; + } + body.push(parseStatementListItem()); + } + + expect('}'); + + state.labelSet = oldLabelSet; + state.inIteration = oldInIteration; + state.inSwitch = oldInSwitch; + state.inFunctionBody = oldInFunctionBody; + state.parenthesizedCount = oldParenthesisCount; + + return node.finishBlockStatement(body); + } + + function validateParam(options, param, name) { + var key = '$' + name; + if (strict) { + if (isRestrictedWord(name)) { + options.stricted = param; + options.message = Messages.StrictParamName; + } + if (Object.prototype.hasOwnProperty.call(options.paramSet, key)) { + options.stricted = param; + options.message = Messages.StrictParamDupe; + } + } else if (!options.firstRestricted) { + if (isRestrictedWord(name)) { + options.firstRestricted = param; + options.message = Messages.StrictParamName; + } else if (isStrictModeReservedWord(name)) { + options.firstRestricted = param; + options.message = Messages.StrictReservedWord; + } else if (Object.prototype.hasOwnProperty.call(options.paramSet, key)) { + options.firstRestricted = param; + options.message = Messages.StrictParamDupe; + } + } + options.paramSet[key] = true; + } + + function parseParam(options) { + var token, param, def; + + token = lookahead; + if (token.value === '...') { + param = parseRestElement(); + validateParam(options, param.argument, param.argument.name); + options.params.push(param); + options.defaults.push(null); + return false; + } + + param = parsePatternWithDefault(); + validateParam(options, token, token.value); + + if (param.type === Syntax.AssignmentPattern) { + def = param.right; + param = param.left; + ++options.defaultCount; + } + + options.params.push(param); + options.defaults.push(def); + + return !match(')'); + } + + function parseParams(firstRestricted) { + var options; + + options = { + params: [], + defaultCount: 0, + defaults: [], + firstRestricted: firstRestricted + }; + + expect('('); + + if (!match(')')) { + options.paramSet = {}; + while (startIndex < length) { + if (!parseParam(options)) { + break; + } + expect(','); + } + } + + expect(')'); + + if (options.defaultCount === 0) { + options.defaults = []; + } + + return { + params: options.params, + defaults: options.defaults, + stricted: options.stricted, + firstRestricted: options.firstRestricted, + message: options.message + }; + } + + function parseFunctionDeclaration(node, identifierIsOptional) { + var id = null, params = [], defaults = [], body, token, stricted, tmp, firstRestricted, message, previousStrict; + + expectKeyword('function'); + if (!identifierIsOptional || !match('(')) { + token = lookahead; + id = parseVariableIdentifier(); + if (strict) { + if (isRestrictedWord(token.value)) { + tolerateUnexpectedToken(token, Messages.StrictFunctionName); + } + } else { + if (isRestrictedWord(token.value)) { + firstRestricted = token; + message = Messages.StrictFunctionName; + } else if (isStrictModeReservedWord(token.value)) { + firstRestricted = token; + message = Messages.StrictReservedWord; + } + } + } + + tmp = parseParams(firstRestricted); + params = tmp.params; + defaults = tmp.defaults; + stricted = tmp.stricted; + firstRestricted = tmp.firstRestricted; + if (tmp.message) { + message = tmp.message; + } + + previousStrict = strict; + body = parseFunctionSourceElements(); + if (strict && firstRestricted) { + throwUnexpectedToken(firstRestricted, message); + } + if (strict && stricted) { + tolerateUnexpectedToken(stricted, message); + } + strict = previousStrict; + + return node.finishFunctionDeclaration(id, params, defaults, body); + } + + function parseFunctionExpression() { + var token, id = null, stricted, firstRestricted, message, tmp, + params = [], defaults = [], body, previousStrict, node = new Node(); + + expectKeyword('function'); + + if (!match('(')) { + token = lookahead; + id = parseVariableIdentifier(); + if (strict) { + if (isRestrictedWord(token.value)) { + tolerateUnexpectedToken(token, Messages.StrictFunctionName); + } + } else { + if (isRestrictedWord(token.value)) { + firstRestricted = token; + message = Messages.StrictFunctionName; + } else if (isStrictModeReservedWord(token.value)) { + firstRestricted = token; + message = Messages.StrictReservedWord; + } + } + } + + tmp = parseParams(firstRestricted); + params = tmp.params; + defaults = tmp.defaults; + stricted = tmp.stricted; + firstRestricted = tmp.firstRestricted; + if (tmp.message) { + message = tmp.message; + } + + previousStrict = strict; + body = parseFunctionSourceElements(); + if (strict && firstRestricted) { + throwUnexpectedToken(firstRestricted, message); + } + if (strict && stricted) { + tolerateUnexpectedToken(stricted, message); + } + strict = previousStrict; + + return node.finishFunctionExpression(id, params, defaults, body); + } + + + function parseClassBody() { + var classBody, token, isStatic, hasConstructor = false, body, method, computed, key; + + classBody = new Node(); + + expect('{'); + body = []; + while (!match('}')) { + if (match(';')) { + lex(); + } else { + method = new Node(); + token = lookahead; + isStatic = false; + computed = match('['); + key = parseObjectPropertyKey(); + if (key.name === 'static' && lookaheadPropertyName()) { + token = lookahead; + isStatic = true; + computed = match('['); + key = parseObjectPropertyKey(); + } + method = tryParseMethodDefinition(token, key, computed, method); + if (method) { + method['static'] = isStatic; + if (method.kind === 'init') { + method.kind = 'method'; + } + if (!isStatic) { + if (!method.computed && (method.key.name || method.key.value.toString()) === 'constructor') { + if (method.kind !== 'method' || !method.method || method.value.generator) { + throwUnexpectedToken(token, Messages.ConstructorSpecialMethod); + } + if (hasConstructor) { + throwUnexpectedToken(token, Messages.DuplicateConstructor); + } else { + hasConstructor = true; + } + method.kind = 'constructor'; + } + } else { + if (!method.computed && (method.key.name || method.key.value.toString()) === 'prototype') { + throwUnexpectedToken(token, Messages.StaticPrototype); + } + } + method.type = Syntax.MethodDefinition; + delete method.method; + delete method.shorthand; + body.push(method); + } else { + throwUnexpectedToken(lookahead); + } + } + } + lex(); + return classBody.finishClassBody(body); + } + + function parseClassDeclaration(identifierIsOptional) { + var id = null, superClass = null, classNode = new Node(), classBody, previousStrict = strict; + strict = true; + + expectKeyword('class'); + + if (!identifierIsOptional || lookahead.type === Token.Identifier) { + id = parseVariableIdentifier(); + } + + if (matchKeyword('extends')) { + lex(); + superClass = isolateCoverGrammar(parseLeftHandSideExpressionAllowCall); + } + classBody = parseClassBody(); + strict = previousStrict; + + return classNode.finishClassDeclaration(id, superClass, classBody); + } + + function parseClassExpression() { + var id = null, superClass = null, classNode = new Node(), classBody, previousStrict = strict; + strict = true; + + expectKeyword('class'); + + if (lookahead.type === Token.Identifier) { + id = parseVariableIdentifier(); + } + + if (matchKeyword('extends')) { + lex(); + superClass = isolateCoverGrammar(parseLeftHandSideExpressionAllowCall); + } + classBody = parseClassBody(); + strict = previousStrict; + + return classNode.finishClassExpression(id, superClass, classBody); + } + + // Modules grammar from: + // people.mozilla.org/~jorendorff/es6-draft.html + + function parseModuleSpecifier() { + var node = new Node(); + + if (lookahead.type !== Token.StringLiteral) { + throwError(Messages.InvalidModuleSpecifier); + } + return node.finishLiteral(lex()); + } + + function parseExportSpecifier() { + var exported, local, node = new Node(), def; + if (matchKeyword('default')) { + // export {default} from 'something'; + def = new Node(); + lex(); + local = def.finishIdentifier('default'); + } else { + local = parseVariableIdentifier(); + } + if (matchContextualKeyword('as')) { + lex(); + exported = parseNonComputedProperty(); + } + return node.finishExportSpecifier(local, exported); + } + + function parseExportNamedDeclaration(node) { + var declaration = null, + isExportFromIdentifier, + src = null, specifiers = []; + + // non-default export + if (lookahead.type === Token.Keyword) { + // covers: + // export var f = 1; + switch (lookahead.value) { + case 'let': + case 'const': + case 'var': + case 'class': + case 'function': + declaration = parseStatementListItem(); + return node.finishExportNamedDeclaration(declaration, specifiers, null); + } + } + + expect('{'); + if (!match('}')) { + do { + isExportFromIdentifier = isExportFromIdentifier || matchKeyword('default'); + specifiers.push(parseExportSpecifier()); + } while (match(',') && lex()); + } + expect('}'); + + if (matchContextualKeyword('from')) { + // covering: + // export {default} from 'foo'; + // export {foo} from 'foo'; + lex(); + src = parseModuleSpecifier(); + consumeSemicolon(); + } else if (isExportFromIdentifier) { + // covering: + // export {default}; // missing fromClause + throwError(lookahead.value ? + Messages.UnexpectedToken : Messages.MissingFromClause, lookahead.value); + } else { + // cover + // export {foo}; + consumeSemicolon(); + } + return node.finishExportNamedDeclaration(declaration, specifiers, src); + } + + function parseExportDefaultDeclaration(node) { + var declaration = null, + expression = null; + + // covers: + // export default ... + expectKeyword('default'); + + if (matchKeyword('function')) { + // covers: + // export default function foo () {} + // export default function () {} + declaration = parseFunctionDeclaration(new Node(), true); + return node.finishExportDefaultDeclaration(declaration); + } + if (matchKeyword('class')) { + declaration = parseClassDeclaration(true); + return node.finishExportDefaultDeclaration(declaration); + } + + if (matchContextualKeyword('from')) { + throwError(Messages.UnexpectedToken, lookahead.value); + } + + // covers: + // export default {}; + // export default []; + // export default (1 + 2); + if (match('{')) { + expression = parseObjectInitialiser(); + } else if (match('[')) { + expression = parseArrayInitialiser(); + } else { + expression = parseAssignmentExpression(); + } + consumeSemicolon(); + return node.finishExportDefaultDeclaration(expression); + } + + function parseExportAllDeclaration(node) { + var src; + + // covers: + // export * from 'foo'; + expect('*'); + if (!matchContextualKeyword('from')) { + throwError(lookahead.value ? + Messages.UnexpectedToken : Messages.MissingFromClause, lookahead.value); + } + lex(); + src = parseModuleSpecifier(); + consumeSemicolon(); + + return node.finishExportAllDeclaration(src); + } + + function parseExportDeclaration() { + var node = new Node(); + if (state.inFunctionBody) { + throwError(Messages.IllegalExportDeclaration); + } + + expectKeyword('export'); + + if (matchKeyword('default')) { + return parseExportDefaultDeclaration(node); + } + if (match('*')) { + return parseExportAllDeclaration(node); + } + return parseExportNamedDeclaration(node); + } + + function parseImportSpecifier() { + // import {<foo as bar>} ...; + var local, imported, node = new Node(); + + imported = parseNonComputedProperty(); + if (matchContextualKeyword('as')) { + lex(); + local = parseVariableIdentifier(); + } + + return node.finishImportSpecifier(local, imported); + } + + function parseNamedImports() { + var specifiers = []; + // {foo, bar as bas} + expect('{'); + if (!match('}')) { + do { + specifiers.push(parseImportSpecifier()); + } while (match(',') && lex()); + } + expect('}'); + return specifiers; + } + + function parseImportDefaultSpecifier() { + // import <foo> ...; + var local, node = new Node(); + + local = parseNonComputedProperty(); + + return node.finishImportDefaultSpecifier(local); + } + + function parseImportNamespaceSpecifier() { + // import <* as foo> ...; + var local, node = new Node(); + + expect('*'); + if (!matchContextualKeyword('as')) { + throwError(Messages.NoAsAfterImportNamespace); + } + lex(); + local = parseNonComputedProperty(); + + return node.finishImportNamespaceSpecifier(local); + } + + function parseImportDeclaration() { + var specifiers, src, node = new Node(); + + if (state.inFunctionBody) { + throwError(Messages.IllegalImportDeclaration); + } + + expectKeyword('import'); + specifiers = []; + + if (lookahead.type === Token.StringLiteral) { + // covers: + // import 'foo'; + src = parseModuleSpecifier(); + consumeSemicolon(); + return node.finishImportDeclaration(specifiers, src); + } + + if (!matchKeyword('default') && isIdentifierName(lookahead)) { + // covers: + // import foo + // import foo, ... + specifiers.push(parseImportDefaultSpecifier()); + if (match(',')) { + lex(); + } + } + if (match('*')) { + // covers: + // import foo, * as foo + // import * as foo + specifiers.push(parseImportNamespaceSpecifier()); + } else if (match('{')) { + // covers: + // import foo, {bar} + // import {bar} + specifiers = specifiers.concat(parseNamedImports()); + } + + if (!matchContextualKeyword('from')) { + throwError(lookahead.value ? + Messages.UnexpectedToken : Messages.MissingFromClause, lookahead.value); + } + lex(); + src = parseModuleSpecifier(); + consumeSemicolon(); + + return node.finishImportDeclaration(specifiers, src); + } + + // 14 Program + + function parseScriptBody() { + var statement, body = [], token, directive, firstRestricted; + + while (startIndex < length) { + token = lookahead; + if (token.type !== Token.StringLiteral) { + break; + } + + statement = parseStatementListItem(); + body.push(statement); + if (statement.expression.type !== Syntax.Literal) { + // this is not directive + break; + } + directive = source.slice(token.start + 1, token.end - 1); + if (directive === 'use strict') { + strict = true; + if (firstRestricted) { + tolerateUnexpectedToken(firstRestricted, Messages.StrictOctalLiteral); + } + } else { + if (!firstRestricted && token.octal) { + firstRestricted = token; + } + } + } + + while (startIndex < length) { + statement = parseStatementListItem(); + /* istanbul ignore if */ + if (typeof statement === 'undefined') { + break; + } + body.push(statement); + } + return body; + } + + function parseProgram() { + var body, node; + + peek(); + node = new Node(); + + body = parseScriptBody(); + return node.finishProgram(body); + } + + function filterTokenLocation() { + var i, entry, token, tokens = []; + + for (i = 0; i < extra.tokens.length; ++i) { + entry = extra.tokens[i]; + token = { + type: entry.type, + value: entry.value + }; + if (entry.regex) { + token.regex = { + pattern: entry.regex.pattern, + flags: entry.regex.flags + }; + } + if (extra.range) { + token.range = entry.range; + } + if (extra.loc) { + token.loc = entry.loc; + } + tokens.push(token); + } + + extra.tokens = tokens; + } + + function tokenize(code, options) { + var toString, + tokens; + + toString = String; + if (typeof code !== 'string' && !(code instanceof String)) { + code = toString(code); + } + + source = code; + index = 0; + lineNumber = (source.length > 0) ? 1 : 0; + lineStart = 0; + startIndex = index; + startLineNumber = lineNumber; + startLineStart = lineStart; + length = source.length; + lookahead = null; + state = { + allowIn: true, + labelSet: {}, + inFunctionBody: false, + inIteration: false, + inSwitch: false, + lastCommentStart: -1, + curlyStack: [] + }; + + extra = {}; + + // Options matching. + options = options || {}; + + // Of course we collect tokens here. + options.tokens = true; + extra.tokens = []; + extra.tokenize = true; + // The following two fields are necessary to compute the Regex tokens. + extra.openParenToken = -1; + extra.openCurlyToken = -1; + + extra.range = (typeof options.range === 'boolean') && options.range; + extra.loc = (typeof options.loc === 'boolean') && options.loc; + + if (typeof options.comment === 'boolean' && options.comment) { + extra.comments = []; + } + if (typeof options.tolerant === 'boolean' && options.tolerant) { + extra.errors = []; + } + + try { + peek(); + if (lookahead.type === Token.EOF) { + return extra.tokens; + } + + lex(); + while (lookahead.type !== Token.EOF) { + try { + lex(); + } catch (lexError) { + if (extra.errors) { + recordError(lexError); + // We have to break on the first error + // to avoid infinite loops. + break; + } else { + throw lexError; + } + } + } + + filterTokenLocation(); + tokens = extra.tokens; + if (typeof extra.comments !== 'undefined') { + tokens.comments = extra.comments; + } + if (typeof extra.errors !== 'undefined') { + tokens.errors = extra.errors; + } + } catch (e) { + throw e; + } finally { + extra = {}; + } + return tokens; + } + + function parse(code, options) { + var program, toString; + + toString = String; + if (typeof code !== 'string' && !(code instanceof String)) { + code = toString(code); + } + + source = code; + index = 0; + lineNumber = (source.length > 0) ? 1 : 0; + lineStart = 0; + startIndex = index; + startLineNumber = lineNumber; + startLineStart = lineStart; + length = source.length; + lookahead = null; + state = { + allowIn: true, + labelSet: {}, + inFunctionBody: false, + inIteration: false, + inSwitch: false, + lastCommentStart: -1, + curlyStack: [] + }; + sourceType = 'script'; + strict = false; + + extra = {}; + if (typeof options !== 'undefined') { + extra.range = (typeof options.range === 'boolean') && options.range; + extra.loc = (typeof options.loc === 'boolean') && options.loc; + extra.attachComment = (typeof options.attachComment === 'boolean') && options.attachComment; + + if (extra.loc && options.source !== null && options.source !== undefined) { + extra.source = toString(options.source); + } + + if (typeof options.tokens === 'boolean' && options.tokens) { + extra.tokens = []; + } + if (typeof options.comment === 'boolean' && options.comment) { + extra.comments = []; + } + if (typeof options.tolerant === 'boolean' && options.tolerant) { + extra.errors = []; + } + if (extra.attachComment) { + extra.range = true; + extra.comments = []; + extra.bottomRightStack = []; + extra.trailingComments = []; + extra.leadingComments = []; + } + if (options.sourceType === 'module') { + // very restrictive condition for now + sourceType = options.sourceType; + strict = true; + } + } + + try { + program = parseProgram(); + if (typeof extra.comments !== 'undefined') { + program.comments = extra.comments; + } + if (typeof extra.tokens !== 'undefined') { + filterTokenLocation(); + program.tokens = extra.tokens; + } + if (typeof extra.errors !== 'undefined') { + program.errors = extra.errors; + } + } catch (e) { + throw e; + } finally { + extra = {}; + } + + return program; + } + + // Sync with *.json manifests. + exports.version = '2.2.0'; + + exports.tokenize = tokenize; + + exports.parse = parse; + + // Deep copy. + /* istanbul ignore next */ + exports.Syntax = (function () { + var name, types = {}; + + if (typeof Object.create === 'function') { + types = Object.create(null); + } + + for (name in Syntax) { + if (Syntax.hasOwnProperty(name)) { + types[name] = Syntax[name]; + } + } + + if (typeof Object.freeze === 'function') { + Object.freeze(types); + } + + return types; + }()); + +})); +/* vim: set sw=4 ts=4 et tw=80 : */ diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/esprima/package.json b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/esprima/package.json new file mode 100644 index 00000000..91b79779 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/esprima/package.json @@ -0,0 +1,93 @@ +{ + "name": "esprima", + "description": "ECMAScript parsing infrastructure for multipurpose analysis", + "homepage": "http://esprima.org", + "main": "esprima.js", + "bin": { + "esparse": "./bin/esparse.js", + "esvalidate": "./bin/esvalidate.js" + }, + "version": "2.2.0", + "files": [ + "bin", + "test/run.js", + "test/runner.js", + "test/test.js", + "esprima.js" + ], + "engines": { + "node": ">=0.4.0" + }, + "author": { + "name": "Ariya Hidayat", + "email": "ariya.hidayat@gmail.com" + }, + "maintainers": [ + { + "name": "ariya", + "email": "ariya.hidayat@gmail.com" + } + ], + "repository": { + "type": "git", + "url": "https://github.com/jquery/esprima.git" + }, + "bugs": { + "url": "http://issues.esprima.org" + }, + "licenses": [ + { + "type": "BSD", + "url": "https://github.com/jquery/esprima/raw/master/LICENSE.BSD" + } + ], + "devDependencies": { + "eslint": "~0.19.0", + "jscs": "~1.12.0", + "istanbul": "~0.3.7", + "escomplex-js": "1.2.0", + "complexity-report": "~1.4.0", + "regenerate": "~0.6.2", + "unicode-7.0.0": "~0.1.5", + "json-diff": "~0.3.1", + "optimist": "~0.6.0" + }, + "keywords": [ + "ast", + "ecmascript", + "javascript", + "parser", + "syntax" + ], + "scripts": { + "generate-regex": "node tools/generate-identifier-regex.js", + "test": "node test/run.js && npm run lint && npm run coverage", + "lint": "npm run check-version && npm run eslint && npm run jscs && npm run complexity", + "check-version": "node tools/check-version.js", + "jscs": "jscs esprima.js", + "eslint": "node node_modules/eslint/bin/eslint.js esprima.js", + "complexity": "node tools/list-complexity.js && cr -s -l -w --maxcyc 17 esprima.js", + "coverage": "npm run analyze-coverage && npm run check-coverage", + "analyze-coverage": "istanbul cover test/runner.js", + "check-coverage": "istanbul check-coverage --statement 100 --branch 100 --function 100", + "benchmark": "node test/benchmarks.js", + "benchmark-quick": "node test/benchmarks.js quick" + }, + "gitHead": "deef03ca006b03912d9f74b041f9239a9045181f", + "_id": "esprima@2.2.0", + "_shasum": "4292c1d68e4173d815fa2290dc7afc96d81fcd83", + "_from": "esprima@>=2.2.0 <2.3.0", + "_npmVersion": "2.5.1", + "_nodeVersion": "0.12.0", + "_npmUser": { + "name": "ariya", + "email": "ariya.hidayat@gmail.com" + }, + "dist": { + "shasum": "4292c1d68e4173d815fa2290dc7afc96d81fcd83", + "tarball": "http://registry.npmjs.org/esprima/-/esprima-2.2.0.tgz" + }, + "directories": {}, + "_resolved": "https://registry.npmjs.org/esprima/-/esprima-2.2.0.tgz", + "readme": "ERROR: No README data found!" +} diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/esprima/test/run.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/esprima/test/run.js new file mode 100644 index 00000000..a5b919bf --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/esprima/test/run.js @@ -0,0 +1,66 @@ +/* + Copyright (C) 2012 Yusuke Suzuki <utatane.tea@gmail.com> + Copyright (C) 2012 Ariya Hidayat <ariya.hidayat@gmail.com> + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/*jslint node:true */ + +(function () { + 'use strict'; + + var child = require('child_process'), + nodejs = '"' + process.execPath + '"', + ret = 0, + suites, + index; + + suites = [ + 'runner', + 'parselibs' + ]; + + function nextTest() { + var suite = suites[index]; + + if (index < suites.length) { + child.exec(nodejs + ' ./test/' + suite + '.js', function (err, stdout, stderr) { + if (stdout) { + process.stdout.write(suite + ': ' + stdout); + } + if (stderr) { + process.stderr.write(suite + ': ' + stderr); + } + if (err) { + ret = err.code; + } + index += 1; + nextTest(); + }); + } else { + process.exit(ret); + } + } + + index = 0; + nextTest(); +}()); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/esprima/test/runner.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/esprima/test/runner.js new file mode 100644 index 00000000..7f4a1738 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/node_modules/esprima/test/runner.js @@ -0,0 +1,475 @@ +/* + Copyright (C) 2012 Ariya Hidayat <ariya.hidayat@gmail.com> + Copyright (C) 2012 Joost-Wim Boekesteijn <joost-wim@boekesteijn.nl> + Copyright (C) 2012 Yusuke Suzuki <utatane.tea@gmail.com> + Copyright (C) 2012 Arpad Borsos <arpad.borsos@googlemail.com> + Copyright (C) 2011 Ariya Hidayat <ariya.hidayat@gmail.com> + Copyright (C) 2011 Yusuke Suzuki <utatane.tea@gmail.com> + Copyright (C) 2011 Arpad Borsos <arpad.borsos@googlemail.com> + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/*jslint browser:true node:true */ +/*global esprima:true, testFixture:true */ + +var runTests; + +function NotMatchingError(expected, actual) { + 'use strict'; + Error.call(this, 'Expected '); + this.expected = expected; + this.actual = actual; +} +NotMatchingError.prototype = new Error(); + +function errorToObject(e) { + 'use strict'; + var msg = e.toString(); + + // Opera 9.64 produces an non-standard string in toString(). + if (msg.substr(0, 6) !== 'Error:') { + if (typeof e.message === 'string') { + msg = 'Error: ' + e.message; + } + } + + return { + index: e.index, + lineNumber: e.lineNumber, + column: e.column, + message: msg + }; +} + +function sortedObject(o) { + if (o === null) { + return o; + } + if (Array.isArray(o)) { + return o.map(sortedObject); + } + if (typeof o !== 'object') { + return o; + } + if (o instanceof RegExp) { + return o; + } + var keys = Object.keys(o); + var result = { + range: undefined, + loc: undefined + }; + keys.forEach(function (key) { + if (o.hasOwnProperty(key)){ + result[key] = sortedObject(o[key]); + } + }); + return result; +} + +function hasAttachedComment(syntax) { + var key; + for (key in syntax) { + if (key === 'leadingComments' || key === 'trailingComments') { + return true; + } + if (typeof syntax[key] === 'object' && syntax[key] !== null) { + if (hasAttachedComment(syntax[key])) { + return true; + } + } + } + return false; +} + +function testParse(esprima, code, syntax) { + 'use strict'; + var expected, tree, actual, options, StringObject, i, len; + + // alias, so that JSLint does not complain. + StringObject = String; + + options = { + comment: (typeof syntax.comments !== 'undefined'), + range: true, + loc: true, + tokens: (typeof syntax.tokens !== 'undefined'), + raw: true, + tolerant: (typeof syntax.errors !== 'undefined'), + source: null, + sourceType: syntax.sourceType + }; + + if (options.comment) { + options.attachComment = hasAttachedComment(syntax); + } + + if (typeof syntax.tokens !== 'undefined') { + if (syntax.tokens.length > 0) { + options.range = (typeof syntax.tokens[0].range !== 'undefined'); + options.loc = (typeof syntax.tokens[0].loc !== 'undefined'); + } + } + + if (typeof syntax.comments !== 'undefined') { + if (syntax.comments.length > 0) { + options.range = (typeof syntax.comments[0].range !== 'undefined'); + options.loc = (typeof syntax.comments[0].loc !== 'undefined'); + } + } + + if (options.loc) { + options.source = syntax.loc.source; + } + + syntax = sortedObject(syntax); + expected = JSON.stringify(syntax, null, 4); + try { + // Some variations of the options. + tree = esprima.parse(code, { tolerant: options.tolerant, sourceType: options.sourceType }); + tree = esprima.parse(code, { tolerant: options.tolerant, sourceType: options.sourceType, range: true }); + tree = esprima.parse(code, { tolerant: options.tolerant, sourceType: options.sourceType, loc: true }); + + tree = esprima.parse(code, options); + + if (options.tolerant) { + for (i = 0, len = tree.errors.length; i < len; i += 1) { + tree.errors[i] = errorToObject(tree.errors[i]); + } + } + tree = sortedObject(tree); + actual = JSON.stringify(tree, null, 4); + + // Only to ensure that there is no error when using string object. + esprima.parse(new StringObject(code), options); + + } catch (e) { + throw new NotMatchingError(expected, e.toString()); + } + if (expected !== actual) { + throw new NotMatchingError(expected, actual); + } + + function filter(key, value) { + return (key === 'loc' || key === 'range') ? undefined : value; + } + + if (options.tolerant) { + return; + } + + + // Check again without any location info. + options.range = false; + options.loc = false; + syntax = sortedObject(syntax); + expected = JSON.stringify(syntax, filter, 4); + try { + tree = esprima.parse(code, options); + + if (options.tolerant) { + for (i = 0, len = tree.errors.length; i < len; i += 1) { + tree.errors[i] = errorToObject(tree.errors[i]); + } + } + tree = sortedObject(tree); + actual = JSON.stringify(tree, filter, 4); + } catch (e) { + throw new NotMatchingError(expected, e.toString()); + } + if (expected !== actual) { + throw new NotMatchingError(expected, actual); + } +} + +function testTokenize(esprima, code, tokens) { + 'use strict'; + var options, expected, actual, tree; + + options = { + comment: true, + tolerant: true, + loc: true, + range: true + }; + + expected = JSON.stringify(tokens, null, 4); + + try { + tree = esprima.tokenize(code, options); + actual = JSON.stringify(tree, null, 4); + } catch (e) { + throw new NotMatchingError(expected, e.toString()); + } + if (expected !== actual) { + throw new NotMatchingError(expected, actual); + } +} + + +function testModule(esprima, code, exception) { + 'use strict'; + var i, options, expected, actual, err, handleInvalidRegexFlag, tokenize; + + // Different parsing options should give the same error. + options = [ + { sourceType: 'module' }, + { sourceType: 'module', comment: true }, + { sourceType: 'module', raw: true }, + { sourceType: 'module', raw: true, comment: true } + ]; + + if (!exception.message) { + exception.message = 'Error: Line 1: ' + exception.description; + } + exception.description = exception.message.replace(/Error: Line [0-9]+: /, ''); + + expected = JSON.stringify(exception); + + for (i = 0; i < options.length; i += 1) { + + try { + esprima.parse(code, options[i]); + } catch (e) { + err = errorToObject(e); + err.description = e.description; + actual = JSON.stringify(err); + } + + if (expected !== actual) { + + // Compensate for old V8 which does not handle invalid flag. + if (exception.message.indexOf('Invalid regular expression') > 0) { + if (typeof actual === 'undefined' && !handleInvalidRegexFlag) { + return; + } + } + + throw new NotMatchingError(expected, actual); + } + + } +} + +function testError(esprima, code, exception) { + 'use strict'; + var i, options, expected, actual, err, handleInvalidRegexFlag, tokenize; + + // Different parsing options should give the same error. + options = [ + {}, + { comment: true }, + { raw: true }, + { raw: true, comment: true } + ]; + + // If handleInvalidRegexFlag is true, an invalid flag in a regular expression + // will throw an exception. In some old version of V8, this is not the case + // and hence handleInvalidRegexFlag is false. + handleInvalidRegexFlag = false; + try { + 'test'.match(new RegExp('[a-z]', 'x')); + } catch (e) { + handleInvalidRegexFlag = true; + } + + exception.description = exception.message.replace(/Error: Line [0-9]+: /, ''); + + if (exception.tokenize) { + tokenize = true; + exception.tokenize = undefined; + } + expected = JSON.stringify(exception); + + for (i = 0; i < options.length; i += 1) { + + try { + if (tokenize) { + esprima.tokenize(code, options[i]); + } else { + esprima.parse(code, options[i]); + } + } catch (e) { + err = errorToObject(e); + err.description = e.description; + actual = JSON.stringify(err); + } + + if (expected !== actual) { + + // Compensate for old V8 which does not handle invalid flag. + if (exception.message.indexOf('Invalid regular expression') > 0) { + if (typeof actual === 'undefined' && !handleInvalidRegexFlag) { + return; + } + } + + throw new NotMatchingError(expected, actual); + } + + } +} + +function testAPI(esprima, code, expected) { + var result; + // API test. + expected = JSON.stringify(expected, null, 4); + try { + result = eval(code); + result = JSON.stringify(result, null, 4); + } catch (e) { + throw new NotMatchingError(expected, e.toString()); + } + if (expected !== result) { + throw new NotMatchingError(expected, result); + } +} + +function generateTestCase(esprima, testCase) { + var tree, fileName = testCase.key + ".tree.json"; + try { + tree = esprima.parse(testCase.case, {loc: true, range: true}); + tree = JSON.stringify(tree, null, 4); + } catch (e) { + if (typeof e.index === 'undefined') { + console.error("Failed to generate test result."); + throw e; + } + tree = errorToObject(e); + tree.description = e.description; + tree = JSON.stringify(tree); + fileName = testCase.key + ".failure.json"; + } + require('fs').writeFileSync(fileName, tree); + console.error("Done."); +} + +if (typeof window === 'undefined') { + (function () { + 'use strict'; + + var esprima = require('../esprima'), + vm = require('vm'), + fs = require('fs'), + diff = require('json-diff').diffString, + total = 0, + result, + failures = [], + cases = {}, + context = {source: '', result: null}, + tick = new Date(), + expected, + testCase, + header; + + function enumerateFixtures(root) { + var dirs = fs.readdirSync(root), key, kind, + kinds = ['case', 'source', 'module', 'run', 'tree', 'tokens', 'failure', 'result'], + suffices = ['js', 'js', 'json', 'js', 'json', 'json', 'json', 'json']; + + dirs.forEach(function (item) { + var i; + if (fs.statSync(root + '/' + item).isDirectory()) { + enumerateFixtures(root + '/' + item); + } else { + kind = 'case'; + key = item.slice(0, -3); + for (i = 1; i < kinds.length; i++) { + var suffix = '.' + kinds[i] + '.' + suffices[i]; + if (item.slice(-suffix.length) === suffix) { + key = item.slice(0, -suffix.length); + kind = kinds[i]; + } + } + key = root + '/' + key; + if (!cases[key]) { + total++; + cases[key] = { key: key }; + } + cases[key][kind] = fs.readFileSync(root + '/' + item, 'utf-8'); + } + }); + } + + enumerateFixtures(__dirname + '/fixtures'); + + for (var key in cases) { + if (cases.hasOwnProperty(key)) { + testCase = cases[key]; + + if (testCase.hasOwnProperty('source')) { + testCase.case = eval(testCase.source + ';source'); + } + + try { + if (testCase.hasOwnProperty('module')) { + testModule(esprima, testCase.case, JSON.parse(testCase.module)); + } else if (testCase.hasOwnProperty('tree')) { + testParse(esprima, testCase.case, JSON.parse(testCase.tree)); + } else if (testCase.hasOwnProperty('tokens')) { + testTokenize(esprima, testCase.case, JSON.parse(testCase.tokens)); + } else if (testCase.hasOwnProperty('failure')) { + testError(esprima, testCase.case, JSON.parse(testCase.failure)); + } else if (testCase.hasOwnProperty('result')) { + testAPI(esprima, testCase.run, JSON.parse(testCase.result)); + } else { + console.error('Incomplete test case:' + testCase.key + '. Generating test result...'); + generateTestCase(esprima, testCase); + } + } catch (e) { + if (!e.expected) { + throw e; + } + e.source = testCase.case || testCase.key; + failures.push(e); + } + } + } + + tick = (new Date()) - tick; + + header = total + ' tests. ' + failures.length + ' failures. ' + + tick + ' ms'; + if (failures.length) { + console.error(header); + failures.forEach(function (failure) { + try { + var expectedObject = JSON.parse(failure.expected); + var actualObject = JSON.parse(failure.actual); + + console.error(failure.source + ': Expected\n ' + + failure.expected.split('\n').join('\n ') + + '\nto match\n ' + failure.actual + '\nDiff:\n' + + diff(expectedObject, actualObject)); + } catch (ex) { + console.error(failure.source + ': Expected\n ' + + failure.expected.split('\n').join('\n ') + + '\nto match\n ' + failure.actual); + } + }); + } else { + console.log(header); + } + process.exit(failures.length === 0 ? 0 : 1); + + }()); +} diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/package.json b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/package.json new file mode 100644 index 00000000..3145b267 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/js-yaml/package.json @@ -0,0 +1,84 @@ +{ + "name": "js-yaml", + "version": "3.3.1", + "description": "YAML 1.2 parser and serializer", + "keywords": [ + "yaml", + "parser", + "serializer", + "pyyaml" + ], + "homepage": "https://github.com/nodeca/js-yaml", + "author": { + "name": "Dervus Grim", + "email": "dervus.grim@gmail.com" + }, + "contributors": [ + { + "name": "Aleksey V Zapparov", + "email": "ixti@member.fsf.org", + "url": "http://www.ixti.net/" + }, + { + "name": "Vitaly Puzrin", + "email": "vitaly@rcdesign.ru", + "url": "https://github.com/puzrin" + }, + { + "name": "Martin Grenfell", + "email": "martin.grenfell@gmail.com", + "url": "http://got-ravings.blogspot.com" + } + ], + "license": "MIT", + "repository": { + "type": "git", + "url": "git://github.com/nodeca/js-yaml.git" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + }, + "dependencies": { + "argparse": "~1.0.2", + "esprima": "~2.2.0" + }, + "devDependencies": { + "ansi": "*", + "benchmark": "*", + "eslint": "0.18.0", + "eslint-plugin-nodeca": "^1.0.3", + "istanbul": "*", + "mocha": "*" + }, + "browser": { + "buffer": false + }, + "scripts": { + "test": "make test" + }, + "gitHead": "c50f9936bd1e99d64a54d30400e377f4fda401c5", + "bugs": { + "url": "https://github.com/nodeca/js-yaml/issues" + }, + "_id": "js-yaml@3.3.1", + "_shasum": "ca1acd3423ec275d12140a7bab51db015ba0b3c0", + "_from": "js-yaml@>=3.3.1 <3.4.0", + "_npmVersion": "1.4.28", + "_npmUser": { + "name": "vitaly", + "email": "vitaly@rcdesign.ru" + }, + "maintainers": [ + { + "name": "vitaly", + "email": "vitaly@rcdesign.ru" + } + ], + "dist": { + "shasum": "ca1acd3423ec275d12140a7bab51db015ba0b3c0", + "tarball": "http://registry.npmjs.org/js-yaml/-/js-yaml-3.3.1.tgz" + }, + "directories": {}, + "_resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.3.1.tgz", + "readme": "ERROR: No README data found!" +} diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/.travis.yml b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/.travis.yml new file mode 100644 index 00000000..74c57bf1 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/.travis.yml @@ -0,0 +1,8 @@ +language: node_js +node_js: + - "0.8" + - "0.10" + - "0.12" + - "iojs" +before_install: + - npm install -g npm@~1.4.6 diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/LICENSE b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/LICENSE new file mode 100644 index 00000000..432d1aeb --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/LICENSE @@ -0,0 +1,21 @@ +Copyright 2010 James Halliday (mail@substack.net) + +This project is free software released under the MIT/X11 license: + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/bin/cmd.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/bin/cmd.js new file mode 100644 index 00000000..d95de15a --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/bin/cmd.js @@ -0,0 +1,33 @@ +#!/usr/bin/env node + +var mkdirp = require('../'); +var minimist = require('minimist'); +var fs = require('fs'); + +var argv = minimist(process.argv.slice(2), { + alias: { m: 'mode', h: 'help' }, + string: [ 'mode' ] +}); +if (argv.help) { + fs.createReadStream(__dirname + '/usage.txt').pipe(process.stdout); + return; +} + +var paths = argv._.slice(); +var mode = argv.mode ? parseInt(argv.mode, 8) : undefined; + +(function next () { + if (paths.length === 0) return; + var p = paths.shift(); + + if (mode === undefined) mkdirp(p, cb) + else mkdirp(p, mode, cb) + + function cb (err) { + if (err) { + console.error(err.message); + process.exit(1); + } + else next(); + } +})(); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/bin/usage.txt b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/bin/usage.txt new file mode 100644 index 00000000..f952aa2c --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/bin/usage.txt @@ -0,0 +1,12 @@ +usage: mkdirp [DIR1,DIR2..] {OPTIONS} + + Create each supplied directory including any necessary parent directories that + don't yet exist. + + If the directory already exists, do nothing. + +OPTIONS are: + + -m, --mode If a directory needs to be created, set the mode as an octal + permission string. + diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/examples/pow.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/examples/pow.js new file mode 100644 index 00000000..e6924212 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/examples/pow.js @@ -0,0 +1,6 @@ +var mkdirp = require('mkdirp'); + +mkdirp('/tmp/foo/bar/baz', function (err) { + if (err) console.error(err) + else console.log('pow!') +}); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/index.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/index.js new file mode 100644 index 00000000..6ce241b5 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/index.js @@ -0,0 +1,98 @@ +var path = require('path'); +var fs = require('fs'); +var _0777 = parseInt('0777', 8); + +module.exports = mkdirP.mkdirp = mkdirP.mkdirP = mkdirP; + +function mkdirP (p, opts, f, made) { + if (typeof opts === 'function') { + f = opts; + opts = {}; + } + else if (!opts || typeof opts !== 'object') { + opts = { mode: opts }; + } + + var mode = opts.mode; + var xfs = opts.fs || fs; + + if (mode === undefined) { + mode = _0777 & (~process.umask()); + } + if (!made) made = null; + + var cb = f || function () {}; + p = path.resolve(p); + + xfs.mkdir(p, mode, function (er) { + if (!er) { + made = made || p; + return cb(null, made); + } + switch (er.code) { + case 'ENOENT': + mkdirP(path.dirname(p), opts, function (er, made) { + if (er) cb(er, made); + else mkdirP(p, opts, cb, made); + }); + break; + + // In the case of any other error, just see if there's a dir + // there already. If so, then hooray! If not, then something + // is borked. + default: + xfs.stat(p, function (er2, stat) { + // if the stat fails, then that's super weird. + // let the original error be the failure reason. + if (er2 || !stat.isDirectory()) cb(er, made) + else cb(null, made); + }); + break; + } + }); +} + +mkdirP.sync = function sync (p, opts, made) { + if (!opts || typeof opts !== 'object') { + opts = { mode: opts }; + } + + var mode = opts.mode; + var xfs = opts.fs || fs; + + if (mode === undefined) { + mode = _0777 & (~process.umask()); + } + if (!made) made = null; + + p = path.resolve(p); + + try { + xfs.mkdirSync(p, mode); + made = made || p; + } + catch (err0) { + switch (err0.code) { + case 'ENOENT' : + made = sync(path.dirname(p), opts, made); + sync(p, opts, made); + break; + + // In the case of any other error, just see if there's a dir + // there already. If so, then hooray! If not, then something + // is borked. + default: + var stat; + try { + stat = xfs.statSync(p); + } + catch (err1) { + throw err0; + } + if (!stat.isDirectory()) throw err0; + break; + } + } + + return made; +}; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/node_modules/minimist/.travis.yml b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/node_modules/minimist/.travis.yml new file mode 100644 index 00000000..cc4dba29 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/node_modules/minimist/.travis.yml @@ -0,0 +1,4 @@ +language: node_js +node_js: + - "0.8" + - "0.10" diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/node_modules/minimist/LICENSE b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/node_modules/minimist/LICENSE new file mode 100644 index 00000000..ee27ba4b --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/node_modules/minimist/LICENSE @@ -0,0 +1,18 @@ +This software is released under the MIT license: + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/node_modules/minimist/example/parse.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/node_modules/minimist/example/parse.js new file mode 100644 index 00000000..abff3e8e --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/node_modules/minimist/example/parse.js @@ -0,0 +1,2 @@ +var argv = require('../')(process.argv.slice(2)); +console.dir(argv); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/node_modules/minimist/index.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/node_modules/minimist/index.js new file mode 100644 index 00000000..584f551a --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/node_modules/minimist/index.js @@ -0,0 +1,187 @@ +module.exports = function (args, opts) { + if (!opts) opts = {}; + + var flags = { bools : {}, strings : {} }; + + [].concat(opts['boolean']).filter(Boolean).forEach(function (key) { + flags.bools[key] = true; + }); + + [].concat(opts.string).filter(Boolean).forEach(function (key) { + flags.strings[key] = true; + }); + + var aliases = {}; + Object.keys(opts.alias || {}).forEach(function (key) { + aliases[key] = [].concat(opts.alias[key]); + aliases[key].forEach(function (x) { + aliases[x] = [key].concat(aliases[key].filter(function (y) { + return x !== y; + })); + }); + }); + + var defaults = opts['default'] || {}; + + var argv = { _ : [] }; + Object.keys(flags.bools).forEach(function (key) { + setArg(key, defaults[key] === undefined ? false : defaults[key]); + }); + + var notFlags = []; + + if (args.indexOf('--') !== -1) { + notFlags = args.slice(args.indexOf('--')+1); + args = args.slice(0, args.indexOf('--')); + } + + function setArg (key, val) { + var value = !flags.strings[key] && isNumber(val) + ? Number(val) : val + ; + setKey(argv, key.split('.'), value); + + (aliases[key] || []).forEach(function (x) { + setKey(argv, x.split('.'), value); + }); + } + + for (var i = 0; i < args.length; i++) { + var arg = args[i]; + + if (/^--.+=/.test(arg)) { + // Using [\s\S] instead of . because js doesn't support the + // 'dotall' regex modifier. See: + // http://stackoverflow.com/a/1068308/13216 + var m = arg.match(/^--([^=]+)=([\s\S]*)$/); + setArg(m[1], m[2]); + } + else if (/^--no-.+/.test(arg)) { + var key = arg.match(/^--no-(.+)/)[1]; + setArg(key, false); + } + else if (/^--.+/.test(arg)) { + var key = arg.match(/^--(.+)/)[1]; + var next = args[i + 1]; + if (next !== undefined && !/^-/.test(next) + && !flags.bools[key] + && (aliases[key] ? !flags.bools[aliases[key]] : true)) { + setArg(key, next); + i++; + } + else if (/^(true|false)$/.test(next)) { + setArg(key, next === 'true'); + i++; + } + else { + setArg(key, flags.strings[key] ? '' : true); + } + } + else if (/^-[^-]+/.test(arg)) { + var letters = arg.slice(1,-1).split(''); + + var broken = false; + for (var j = 0; j < letters.length; j++) { + var next = arg.slice(j+2); + + if (next === '-') { + setArg(letters[j], next) + continue; + } + + if (/[A-Za-z]/.test(letters[j]) + && /-?\d+(\.\d*)?(e-?\d+)?$/.test(next)) { + setArg(letters[j], next); + broken = true; + break; + } + + if (letters[j+1] && letters[j+1].match(/\W/)) { + setArg(letters[j], arg.slice(j+2)); + broken = true; + break; + } + else { + setArg(letters[j], flags.strings[letters[j]] ? '' : true); + } + } + + var key = arg.slice(-1)[0]; + if (!broken && key !== '-') { + if (args[i+1] && !/^(-|--)[^-]/.test(args[i+1]) + && !flags.bools[key] + && (aliases[key] ? !flags.bools[aliases[key]] : true)) { + setArg(key, args[i+1]); + i++; + } + else if (args[i+1] && /true|false/.test(args[i+1])) { + setArg(key, args[i+1] === 'true'); + i++; + } + else { + setArg(key, flags.strings[key] ? '' : true); + } + } + } + else { + argv._.push( + flags.strings['_'] || !isNumber(arg) ? arg : Number(arg) + ); + } + } + + Object.keys(defaults).forEach(function (key) { + if (!hasKey(argv, key.split('.'))) { + setKey(argv, key.split('.'), defaults[key]); + + (aliases[key] || []).forEach(function (x) { + setKey(argv, x.split('.'), defaults[key]); + }); + } + }); + + notFlags.forEach(function(key) { + argv._.push(key); + }); + + return argv; +}; + +function hasKey (obj, keys) { + var o = obj; + keys.slice(0,-1).forEach(function (key) { + o = (o[key] || {}); + }); + + var key = keys[keys.length - 1]; + return key in o; +} + +function setKey (obj, keys, value) { + var o = obj; + keys.slice(0,-1).forEach(function (key) { + if (o[key] === undefined) o[key] = {}; + o = o[key]; + }); + + var key = keys[keys.length - 1]; + if (o[key] === undefined || typeof o[key] === 'boolean') { + o[key] = value; + } + else if (Array.isArray(o[key])) { + o[key].push(value); + } + else { + o[key] = [ o[key], value ]; + } +} + +function isNumber (x) { + if (typeof x === 'number') return true; + if (/^0x[0-9a-f]+$/i.test(x)) return true; + return /^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(x); +} + +function longest (xs) { + return Math.max.apply(null, xs.map(function (x) { return x.length })); +} diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/node_modules/minimist/package.json b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/node_modules/minimist/package.json new file mode 100644 index 00000000..09e9ec44 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/node_modules/minimist/package.json @@ -0,0 +1,67 @@ +{ + "name": "minimist", + "version": "0.0.8", + "description": "parse argument options", + "main": "index.js", + "devDependencies": { + "tape": "~1.0.4", + "tap": "~0.4.0" + }, + "scripts": { + "test": "tap test/*.js" + }, + "testling": { + "files": "test/*.js", + "browsers": [ + "ie/6..latest", + "ff/5", + "firefox/latest", + "chrome/10", + "chrome/latest", + "safari/5.1", + "safari/latest", + "opera/12" + ] + }, + "repository": { + "type": "git", + "url": "git://github.com/substack/minimist.git" + }, + "homepage": "https://github.com/substack/minimist", + "keywords": [ + "argv", + "getopt", + "parser", + "optimist" + ], + "author": { + "name": "James Halliday", + "email": "mail@substack.net", + "url": "http://substack.net" + }, + "license": "MIT", + "bugs": { + "url": "https://github.com/substack/minimist/issues" + }, + "_id": "minimist@0.0.8", + "dist": { + "shasum": "857fcabfc3397d2625b8228262e86aa7a011b05d", + "tarball": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz" + }, + "_from": "minimist@0.0.8", + "_npmVersion": "1.4.3", + "_npmUser": { + "name": "substack", + "email": "mail@substack.net" + }, + "maintainers": [ + { + "name": "substack", + "email": "mail@substack.net" + } + ], + "directories": {}, + "_shasum": "857fcabfc3397d2625b8228262e86aa7a011b05d", + "_resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "readme": "ERROR: No README data found!" +} diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/node_modules/minimist/readme.markdown b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/node_modules/minimist/readme.markdown new file mode 100644 index 00000000..c2563532 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/node_modules/minimist/readme.markdown @@ -0,0 +1,73 @@ +# minimist + +parse argument options + +This module is the guts of optimist's argument parser without all the +fanciful decoration. + +[![browser support](https://ci.testling.com/substack/minimist.png)](http://ci.testling.com/substack/minimist) + +[![build status](https://secure.travis-ci.org/substack/minimist.png)](http://travis-ci.org/substack/minimist) + +# example + +``` js +var argv = require('minimist')(process.argv.slice(2)); +console.dir(argv); +``` + +``` +$ node example/parse.js -a beep -b boop +{ _: [], a: 'beep', b: 'boop' } +``` + +``` +$ node example/parse.js -x 3 -y 4 -n5 -abc --beep=boop foo bar baz +{ _: [ 'foo', 'bar', 'baz' ], + x: 3, + y: 4, + n: 5, + a: true, + b: true, + c: true, + beep: 'boop' } +``` + +# methods + +``` js +var parseArgs = require('minimist') +``` + +## var argv = parseArgs(args, opts={}) + +Return an argument object `argv` populated with the array arguments from `args`. + +`argv._` contains all the arguments that didn't have an option associated with +them. + +Numeric-looking arguments will be returned as numbers unless `opts.string` or +`opts.boolean` is set for that argument name. + +Any arguments after `'--'` will not be parsed and will end up in `argv._`. + +options can be: + +* `opts.string` - a string or array of strings argument names to always treat as +strings +* `opts.boolean` - a string or array of strings to always treat as booleans +* `opts.alias` - an object mapping string names to strings or arrays of string +argument names to use as aliases +* `opts.default` - an object mapping string argument names to default values + +# install + +With [npm](https://npmjs.org) do: + +``` +npm install minimist +``` + +# license + +MIT diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/node_modules/minimist/test/dash.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/node_modules/minimist/test/dash.js new file mode 100644 index 00000000..8b034b99 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/node_modules/minimist/test/dash.js @@ -0,0 +1,24 @@ +var parse = require('../'); +var test = require('tape'); + +test('-', function (t) { + t.plan(5); + t.deepEqual(parse([ '-n', '-' ]), { n: '-', _: [] }); + t.deepEqual(parse([ '-' ]), { _: [ '-' ] }); + t.deepEqual(parse([ '-f-' ]), { f: '-', _: [] }); + t.deepEqual( + parse([ '-b', '-' ], { boolean: 'b' }), + { b: true, _: [ '-' ] } + ); + t.deepEqual( + parse([ '-s', '-' ], { string: 's' }), + { s: '-', _: [] } + ); +}); + +test('-a -- b', function (t) { + t.plan(3); + t.deepEqual(parse([ '-a', '--', 'b' ]), { a: true, _: [ 'b' ] }); + t.deepEqual(parse([ '--a', '--', 'b' ]), { a: true, _: [ 'b' ] }); + t.deepEqual(parse([ '--a', '--', 'b' ]), { a: true, _: [ 'b' ] }); +}); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/node_modules/minimist/test/default_bool.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/node_modules/minimist/test/default_bool.js new file mode 100644 index 00000000..f0041ee4 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/node_modules/minimist/test/default_bool.js @@ -0,0 +1,20 @@ +var test = require('tape'); +var parse = require('../'); + +test('boolean default true', function (t) { + var argv = parse([], { + boolean: 'sometrue', + default: { sometrue: true } + }); + t.equal(argv.sometrue, true); + t.end(); +}); + +test('boolean default false', function (t) { + var argv = parse([], { + boolean: 'somefalse', + default: { somefalse: false } + }); + t.equal(argv.somefalse, false); + t.end(); +}); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/node_modules/minimist/test/dotted.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/node_modules/minimist/test/dotted.js new file mode 100644 index 00000000..ef0ae349 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/node_modules/minimist/test/dotted.js @@ -0,0 +1,16 @@ +var parse = require('../'); +var test = require('tape'); + +test('dotted alias', function (t) { + var argv = parse(['--a.b', '22'], {default: {'a.b': 11}, alias: {'a.b': 'aa.bb'}}); + t.equal(argv.a.b, 22); + t.equal(argv.aa.bb, 22); + t.end(); +}); + +test('dotted default', function (t) { + var argv = parse('', {default: {'a.b': 11}, alias: {'a.b': 'aa.bb'}}); + t.equal(argv.a.b, 11); + t.equal(argv.aa.bb, 11); + t.end(); +}); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/node_modules/minimist/test/long.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/node_modules/minimist/test/long.js new file mode 100644 index 00000000..5d3a1e09 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/node_modules/minimist/test/long.js @@ -0,0 +1,31 @@ +var test = require('tape'); +var parse = require('../'); + +test('long opts', function (t) { + t.deepEqual( + parse([ '--bool' ]), + { bool : true, _ : [] }, + 'long boolean' + ); + t.deepEqual( + parse([ '--pow', 'xixxle' ]), + { pow : 'xixxle', _ : [] }, + 'long capture sp' + ); + t.deepEqual( + parse([ '--pow=xixxle' ]), + { pow : 'xixxle', _ : [] }, + 'long capture eq' + ); + t.deepEqual( + parse([ '--host', 'localhost', '--port', '555' ]), + { host : 'localhost', port : 555, _ : [] }, + 'long captures sp' + ); + t.deepEqual( + parse([ '--host=localhost', '--port=555' ]), + { host : 'localhost', port : 555, _ : [] }, + 'long captures eq' + ); + t.end(); +}); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/node_modules/minimist/test/parse.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/node_modules/minimist/test/parse.js new file mode 100644 index 00000000..8a906466 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/node_modules/minimist/test/parse.js @@ -0,0 +1,318 @@ +var parse = require('../'); +var test = require('tape'); + +test('parse args', function (t) { + t.deepEqual( + parse([ '--no-moo' ]), + { moo : false, _ : [] }, + 'no' + ); + t.deepEqual( + parse([ '-v', 'a', '-v', 'b', '-v', 'c' ]), + { v : ['a','b','c'], _ : [] }, + 'multi' + ); + t.end(); +}); + +test('comprehensive', function (t) { + t.deepEqual( + parse([ + '--name=meowmers', 'bare', '-cats', 'woo', + '-h', 'awesome', '--multi=quux', + '--key', 'value', + '-b', '--bool', '--no-meep', '--multi=baz', + '--', '--not-a-flag', 'eek' + ]), + { + c : true, + a : true, + t : true, + s : 'woo', + h : 'awesome', + b : true, + bool : true, + key : 'value', + multi : [ 'quux', 'baz' ], + meep : false, + name : 'meowmers', + _ : [ 'bare', '--not-a-flag', 'eek' ] + } + ); + t.end(); +}); + +test('nums', function (t) { + var argv = parse([ + '-x', '1234', + '-y', '5.67', + '-z', '1e7', + '-w', '10f', + '--hex', '0xdeadbeef', + '789' + ]); + t.deepEqual(argv, { + x : 1234, + y : 5.67, + z : 1e7, + w : '10f', + hex : 0xdeadbeef, + _ : [ 789 ] + }); + t.deepEqual(typeof argv.x, 'number'); + t.deepEqual(typeof argv.y, 'number'); + t.deepEqual(typeof argv.z, 'number'); + t.deepEqual(typeof argv.w, 'string'); + t.deepEqual(typeof argv.hex, 'number'); + t.deepEqual(typeof argv._[0], 'number'); + t.end(); +}); + +test('flag boolean', function (t) { + var argv = parse([ '-t', 'moo' ], { boolean: 't' }); + t.deepEqual(argv, { t : true, _ : [ 'moo' ] }); + t.deepEqual(typeof argv.t, 'boolean'); + t.end(); +}); + +test('flag boolean value', function (t) { + var argv = parse(['--verbose', 'false', 'moo', '-t', 'true'], { + boolean: [ 't', 'verbose' ], + default: { verbose: true } + }); + + t.deepEqual(argv, { + verbose: false, + t: true, + _: ['moo'] + }); + + t.deepEqual(typeof argv.verbose, 'boolean'); + t.deepEqual(typeof argv.t, 'boolean'); + t.end(); +}); + +test('flag boolean default false', function (t) { + var argv = parse(['moo'], { + boolean: ['t', 'verbose'], + default: { verbose: false, t: false } + }); + + t.deepEqual(argv, { + verbose: false, + t: false, + _: ['moo'] + }); + + t.deepEqual(typeof argv.verbose, 'boolean'); + t.deepEqual(typeof argv.t, 'boolean'); + t.end(); + +}); + +test('boolean groups', function (t) { + var argv = parse([ '-x', '-z', 'one', 'two', 'three' ], { + boolean: ['x','y','z'] + }); + + t.deepEqual(argv, { + x : true, + y : false, + z : true, + _ : [ 'one', 'two', 'three' ] + }); + + t.deepEqual(typeof argv.x, 'boolean'); + t.deepEqual(typeof argv.y, 'boolean'); + t.deepEqual(typeof argv.z, 'boolean'); + t.end(); +}); + +test('newlines in params' , function (t) { + var args = parse([ '-s', "X\nX" ]) + t.deepEqual(args, { _ : [], s : "X\nX" }); + + // reproduce in bash: + // VALUE="new + // line" + // node program.js --s="$VALUE" + args = parse([ "--s=X\nX" ]) + t.deepEqual(args, { _ : [], s : "X\nX" }); + t.end(); +}); + +test('strings' , function (t) { + var s = parse([ '-s', '0001234' ], { string: 's' }).s; + t.equal(s, '0001234'); + t.equal(typeof s, 'string'); + + var x = parse([ '-x', '56' ], { string: 'x' }).x; + t.equal(x, '56'); + t.equal(typeof x, 'string'); + t.end(); +}); + +test('stringArgs', function (t) { + var s = parse([ ' ', ' ' ], { string: '_' })._; + t.same(s.length, 2); + t.same(typeof s[0], 'string'); + t.same(s[0], ' '); + t.same(typeof s[1], 'string'); + t.same(s[1], ' '); + t.end(); +}); + +test('empty strings', function(t) { + var s = parse([ '-s' ], { string: 's' }).s; + t.equal(s, ''); + t.equal(typeof s, 'string'); + + var str = parse([ '--str' ], { string: 'str' }).str; + t.equal(str, ''); + t.equal(typeof str, 'string'); + + var letters = parse([ '-art' ], { + string: [ 'a', 't' ] + }); + + t.equal(letters.a, ''); + t.equal(letters.r, true); + t.equal(letters.t, ''); + + t.end(); +}); + + +test('slashBreak', function (t) { + t.same( + parse([ '-I/foo/bar/baz' ]), + { I : '/foo/bar/baz', _ : [] } + ); + t.same( + parse([ '-xyz/foo/bar/baz' ]), + { x : true, y : true, z : '/foo/bar/baz', _ : [] } + ); + t.end(); +}); + +test('alias', function (t) { + var argv = parse([ '-f', '11', '--zoom', '55' ], { + alias: { z: 'zoom' } + }); + t.equal(argv.zoom, 55); + t.equal(argv.z, argv.zoom); + t.equal(argv.f, 11); + t.end(); +}); + +test('multiAlias', function (t) { + var argv = parse([ '-f', '11', '--zoom', '55' ], { + alias: { z: [ 'zm', 'zoom' ] } + }); + t.equal(argv.zoom, 55); + t.equal(argv.z, argv.zoom); + t.equal(argv.z, argv.zm); + t.equal(argv.f, 11); + t.end(); +}); + +test('nested dotted objects', function (t) { + var argv = parse([ + '--foo.bar', '3', '--foo.baz', '4', + '--foo.quux.quibble', '5', '--foo.quux.o_O', + '--beep.boop' + ]); + + t.same(argv.foo, { + bar : 3, + baz : 4, + quux : { + quibble : 5, + o_O : true + } + }); + t.same(argv.beep, { boop : true }); + t.end(); +}); + +test('boolean and alias with chainable api', function (t) { + var aliased = [ '-h', 'derp' ]; + var regular = [ '--herp', 'derp' ]; + var opts = { + herp: { alias: 'h', boolean: true } + }; + var aliasedArgv = parse(aliased, { + boolean: 'herp', + alias: { h: 'herp' } + }); + var propertyArgv = parse(regular, { + boolean: 'herp', + alias: { h: 'herp' } + }); + var expected = { + herp: true, + h: true, + '_': [ 'derp' ] + }; + + t.same(aliasedArgv, expected); + t.same(propertyArgv, expected); + t.end(); +}); + +test('boolean and alias with options hash', function (t) { + var aliased = [ '-h', 'derp' ]; + var regular = [ '--herp', 'derp' ]; + var opts = { + alias: { 'h': 'herp' }, + boolean: 'herp' + }; + var aliasedArgv = parse(aliased, opts); + var propertyArgv = parse(regular, opts); + var expected = { + herp: true, + h: true, + '_': [ 'derp' ] + }; + t.same(aliasedArgv, expected); + t.same(propertyArgv, expected); + t.end(); +}); + +test('boolean and alias using explicit true', function (t) { + var aliased = [ '-h', 'true' ]; + var regular = [ '--herp', 'true' ]; + var opts = { + alias: { h: 'herp' }, + boolean: 'h' + }; + var aliasedArgv = parse(aliased, opts); + var propertyArgv = parse(regular, opts); + var expected = { + herp: true, + h: true, + '_': [ ] + }; + + t.same(aliasedArgv, expected); + t.same(propertyArgv, expected); + t.end(); +}); + +// regression, see https://github.com/substack/node-optimist/issues/71 +test('boolean and --x=true', function(t) { + var parsed = parse(['--boool', '--other=true'], { + boolean: 'boool' + }); + + t.same(parsed.boool, true); + t.same(parsed.other, 'true'); + + parsed = parse(['--boool', '--other=false'], { + boolean: 'boool' + }); + + t.same(parsed.boool, true); + t.same(parsed.other, 'false'); + t.end(); +}); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/node_modules/minimist/test/parse_modified.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/node_modules/minimist/test/parse_modified.js new file mode 100644 index 00000000..21851b03 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/node_modules/minimist/test/parse_modified.js @@ -0,0 +1,9 @@ +var parse = require('../'); +var test = require('tape'); + +test('parse with modifier functions' , function (t) { + t.plan(1); + + var argv = parse([ '-b', '123' ], { boolean: 'b' }); + t.deepEqual(argv, { b: true, _: ['123'] }); +}); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/node_modules/minimist/test/short.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/node_modules/minimist/test/short.js new file mode 100644 index 00000000..d513a1c2 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/node_modules/minimist/test/short.js @@ -0,0 +1,67 @@ +var parse = require('../'); +var test = require('tape'); + +test('numeric short args', function (t) { + t.plan(2); + t.deepEqual(parse([ '-n123' ]), { n: 123, _: [] }); + t.deepEqual( + parse([ '-123', '456' ]), + { 1: true, 2: true, 3: 456, _: [] } + ); +}); + +test('short', function (t) { + t.deepEqual( + parse([ '-b' ]), + { b : true, _ : [] }, + 'short boolean' + ); + t.deepEqual( + parse([ 'foo', 'bar', 'baz' ]), + { _ : [ 'foo', 'bar', 'baz' ] }, + 'bare' + ); + t.deepEqual( + parse([ '-cats' ]), + { c : true, a : true, t : true, s : true, _ : [] }, + 'group' + ); + t.deepEqual( + parse([ '-cats', 'meow' ]), + { c : true, a : true, t : true, s : 'meow', _ : [] }, + 'short group next' + ); + t.deepEqual( + parse([ '-h', 'localhost' ]), + { h : 'localhost', _ : [] }, + 'short capture' + ); + t.deepEqual( + parse([ '-h', 'localhost', '-p', '555' ]), + { h : 'localhost', p : 555, _ : [] }, + 'short captures' + ); + t.end(); +}); + +test('mixed short bool and capture', function (t) { + t.same( + parse([ '-h', 'localhost', '-fp', '555', 'script.js' ]), + { + f : true, p : 555, h : 'localhost', + _ : [ 'script.js' ] + } + ); + t.end(); +}); + +test('short and long', function (t) { + t.deepEqual( + parse([ '-h', 'localhost', '-fp', '555', 'script.js' ]), + { + f : true, p : 555, h : 'localhost', + _ : [ 'script.js' ] + } + ); + t.end(); +}); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/node_modules/minimist/test/whitespace.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/node_modules/minimist/test/whitespace.js new file mode 100644 index 00000000..8a52a58c --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/node_modules/minimist/test/whitespace.js @@ -0,0 +1,8 @@ +var parse = require('../'); +var test = require('tape'); + +test('whitespace should be whitespace' , function (t) { + t.plan(1); + var x = parse([ '-x', '\t' ]).x; + t.equal(x, '\t'); +}); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/package.json b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/package.json new file mode 100644 index 00000000..6ce95e3c --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/package.json @@ -0,0 +1,60 @@ +{ + "name": "mkdirp", + "description": "Recursively mkdir, like `mkdir -p`", + "version": "0.5.1", + "author": { + "name": "James Halliday", + "email": "mail@substack.net", + "url": "http://substack.net" + }, + "main": "index.js", + "keywords": [ + "mkdir", + "directory" + ], + "repository": { + "type": "git", + "url": "git+https://github.com/substack/node-mkdirp.git" + }, + "scripts": { + "test": "tap test/*.js" + }, + "dependencies": { + "minimist": "0.0.8" + }, + "devDependencies": { + "tap": "1", + "mock-fs": "2 >=2.7.0" + }, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "license": "MIT", + "gitHead": "d4eff0f06093aed4f387e88e9fc301cb76beedc7", + "bugs": { + "url": "https://github.com/substack/node-mkdirp/issues" + }, + "homepage": "https://github.com/substack/node-mkdirp#readme", + "_id": "mkdirp@0.5.1", + "_shasum": "30057438eac6cf7f8c4767f38648d6697d75c903", + "_from": "mkdirp@>=0.5.1 <0.6.0", + "_npmVersion": "2.9.0", + "_nodeVersion": "2.0.0", + "_npmUser": { + "name": "substack", + "email": "substack@gmail.com" + }, + "dist": { + "shasum": "30057438eac6cf7f8c4767f38648d6697d75c903", + "tarball": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz" + }, + "maintainers": [ + { + "name": "substack", + "email": "mail@substack.net" + } + ], + "directories": {}, + "_resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "readme": "ERROR: No README data found!" +} diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/readme.markdown b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/readme.markdown new file mode 100644 index 00000000..3cc13153 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/readme.markdown @@ -0,0 +1,100 @@ +# mkdirp + +Like `mkdir -p`, but in node.js! + +[![build status](https://secure.travis-ci.org/substack/node-mkdirp.png)](http://travis-ci.org/substack/node-mkdirp) + +# example + +## pow.js + +```js +var mkdirp = require('mkdirp'); + +mkdirp('/tmp/foo/bar/baz', function (err) { + if (err) console.error(err) + else console.log('pow!') +}); +``` + +Output + +``` +pow! +``` + +And now /tmp/foo/bar/baz exists, huzzah! + +# methods + +```js +var mkdirp = require('mkdirp'); +``` + +## mkdirp(dir, opts, cb) + +Create a new directory and any necessary subdirectories at `dir` with octal +permission string `opts.mode`. If `opts` is a non-object, it will be treated as +the `opts.mode`. + +If `opts.mode` isn't specified, it defaults to `0777 & (~process.umask())`. + +`cb(err, made)` fires with the error or the first directory `made` +that had to be created, if any. + +You can optionally pass in an alternate `fs` implementation by passing in +`opts.fs`. Your implementation should have `opts.fs.mkdir(path, mode, cb)` and +`opts.fs.stat(path, cb)`. + +## mkdirp.sync(dir, opts) + +Synchronously create a new directory and any necessary subdirectories at `dir` +with octal permission string `opts.mode`. If `opts` is a non-object, it will be +treated as the `opts.mode`. + +If `opts.mode` isn't specified, it defaults to `0777 & (~process.umask())`. + +Returns the first directory that had to be created, if any. + +You can optionally pass in an alternate `fs` implementation by passing in +`opts.fs`. Your implementation should have `opts.fs.mkdirSync(path, mode)` and +`opts.fs.statSync(path)`. + +# usage + +This package also ships with a `mkdirp` command. + +``` +usage: mkdirp [DIR1,DIR2..] {OPTIONS} + + Create each supplied directory including any necessary parent directories that + don't yet exist. + + If the directory already exists, do nothing. + +OPTIONS are: + + -m, --mode If a directory needs to be created, set the mode as an octal + permission string. + +``` + +# install + +With [npm](http://npmjs.org) do: + +``` +npm install mkdirp +``` + +to get the library, or + +``` +npm install -g mkdirp +``` + +to get the command. + +# license + +MIT diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/test/chmod.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/test/chmod.js new file mode 100644 index 00000000..6a404b93 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/test/chmod.js @@ -0,0 +1,41 @@ +var mkdirp = require('../').mkdirp; +var path = require('path'); +var fs = require('fs'); +var test = require('tap').test; +var _0777 = parseInt('0777', 8); +var _0755 = parseInt('0755', 8); +var _0744 = parseInt('0744', 8); + +var ps = [ '', 'tmp' ]; + +for (var i = 0; i < 25; i++) { + var dir = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + ps.push(dir); +} + +var file = ps.join('/'); + +test('chmod-pre', function (t) { + var mode = _0744 + mkdirp(file, mode, function (er) { + t.ifError(er, 'should not error'); + fs.stat(file, function (er, stat) { + t.ifError(er, 'should exist'); + t.ok(stat && stat.isDirectory(), 'should be directory'); + t.equal(stat && stat.mode & _0777, mode, 'should be 0744'); + t.end(); + }); + }); +}); + +test('chmod', function (t) { + var mode = _0755 + mkdirp(file, mode, function (er) { + t.ifError(er, 'should not error'); + fs.stat(file, function (er, stat) { + t.ifError(er, 'should exist'); + t.ok(stat && stat.isDirectory(), 'should be directory'); + t.end(); + }); + }); +}); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/test/clobber.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/test/clobber.js new file mode 100644 index 00000000..2433b9ad --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/test/clobber.js @@ -0,0 +1,38 @@ +var mkdirp = require('../').mkdirp; +var path = require('path'); +var fs = require('fs'); +var test = require('tap').test; +var _0755 = parseInt('0755', 8); + +var ps = [ '', 'tmp' ]; + +for (var i = 0; i < 25; i++) { + var dir = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + ps.push(dir); +} + +var file = ps.join('/'); + +// a file in the way +var itw = ps.slice(0, 3).join('/'); + + +test('clobber-pre', function (t) { + console.error("about to write to "+itw) + fs.writeFileSync(itw, 'I AM IN THE WAY, THE TRUTH, AND THE LIGHT.'); + + fs.stat(itw, function (er, stat) { + t.ifError(er) + t.ok(stat && stat.isFile(), 'should be file') + t.end() + }) +}) + +test('clobber', function (t) { + t.plan(2); + mkdirp(file, _0755, function (err) { + t.ok(err); + t.equal(err.code, 'ENOTDIR'); + t.end(); + }); +}); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/test/mkdirp.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/test/mkdirp.js new file mode 100644 index 00000000..eaa8921c --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/test/mkdirp.js @@ -0,0 +1,28 @@ +var mkdirp = require('../'); +var path = require('path'); +var fs = require('fs'); +var exists = fs.exists || path.exists; +var test = require('tap').test; +var _0777 = parseInt('0777', 8); +var _0755 = parseInt('0755', 8); + +test('woo', function (t) { + t.plan(5); + var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + + var file = '/tmp/' + [x,y,z].join('/'); + + mkdirp(file, _0755, function (err) { + t.ifError(err); + exists(file, function (ex) { + t.ok(ex, 'file created'); + fs.stat(file, function (err, stat) { + t.ifError(err); + t.equal(stat.mode & _0777, _0755); + t.ok(stat.isDirectory(), 'target not a directory'); + }) + }) + }); +}); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/test/opts_fs.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/test/opts_fs.js new file mode 100644 index 00000000..97186b62 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/test/opts_fs.js @@ -0,0 +1,29 @@ +var mkdirp = require('../'); +var path = require('path'); +var test = require('tap').test; +var mockfs = require('mock-fs'); +var _0777 = parseInt('0777', 8); +var _0755 = parseInt('0755', 8); + +test('opts.fs', function (t) { + t.plan(5); + + var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + + var file = '/beep/boop/' + [x,y,z].join('/'); + var xfs = mockfs.fs(); + + mkdirp(file, { fs: xfs, mode: _0755 }, function (err) { + t.ifError(err); + xfs.exists(file, function (ex) { + t.ok(ex, 'created file'); + xfs.stat(file, function (err, stat) { + t.ifError(err); + t.equal(stat.mode & _0777, _0755); + t.ok(stat.isDirectory(), 'target not a directory'); + }); + }); + }); +}); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/test/opts_fs_sync.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/test/opts_fs_sync.js new file mode 100644 index 00000000..6c370aa6 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/test/opts_fs_sync.js @@ -0,0 +1,27 @@ +var mkdirp = require('../'); +var path = require('path'); +var test = require('tap').test; +var mockfs = require('mock-fs'); +var _0777 = parseInt('0777', 8); +var _0755 = parseInt('0755', 8); + +test('opts.fs sync', function (t) { + t.plan(4); + + var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + + var file = '/beep/boop/' + [x,y,z].join('/'); + var xfs = mockfs.fs(); + + mkdirp.sync(file, { fs: xfs, mode: _0755 }); + xfs.exists(file, function (ex) { + t.ok(ex, 'created file'); + xfs.stat(file, function (err, stat) { + t.ifError(err); + t.equal(stat.mode & _0777, _0755); + t.ok(stat.isDirectory(), 'target not a directory'); + }); + }); +}); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/test/perm.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/test/perm.js new file mode 100644 index 00000000..fbce44b8 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/test/perm.js @@ -0,0 +1,32 @@ +var mkdirp = require('../'); +var path = require('path'); +var fs = require('fs'); +var exists = fs.exists || path.exists; +var test = require('tap').test; +var _0777 = parseInt('0777', 8); +var _0755 = parseInt('0755', 8); + +test('async perm', function (t) { + t.plan(5); + var file = '/tmp/' + (Math.random() * (1<<30)).toString(16); + + mkdirp(file, _0755, function (err) { + t.ifError(err); + exists(file, function (ex) { + t.ok(ex, 'file created'); + fs.stat(file, function (err, stat) { + t.ifError(err); + t.equal(stat.mode & _0777, _0755); + t.ok(stat.isDirectory(), 'target not a directory'); + }) + }) + }); +}); + +test('async root perm', function (t) { + mkdirp('/tmp', _0755, function (err) { + if (err) t.fail(err); + t.end(); + }); + t.end(); +}); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/test/perm_sync.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/test/perm_sync.js new file mode 100644 index 00000000..398229fe --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/test/perm_sync.js @@ -0,0 +1,36 @@ +var mkdirp = require('../'); +var path = require('path'); +var fs = require('fs'); +var exists = fs.exists || path.exists; +var test = require('tap').test; +var _0777 = parseInt('0777', 8); +var _0755 = parseInt('0755', 8); + +test('sync perm', function (t) { + t.plan(4); + var file = '/tmp/' + (Math.random() * (1<<30)).toString(16) + '.json'; + + mkdirp.sync(file, _0755); + exists(file, function (ex) { + t.ok(ex, 'file created'); + fs.stat(file, function (err, stat) { + t.ifError(err); + t.equal(stat.mode & _0777, _0755); + t.ok(stat.isDirectory(), 'target not a directory'); + }); + }); +}); + +test('sync root perm', function (t) { + t.plan(3); + + var file = '/tmp'; + mkdirp.sync(file, _0755); + exists(file, function (ex) { + t.ok(ex, 'file created'); + fs.stat(file, function (err, stat) { + t.ifError(err); + t.ok(stat.isDirectory(), 'target not a directory'); + }) + }); +}); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/test/race.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/test/race.js new file mode 100644 index 00000000..b0b9e183 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/test/race.js @@ -0,0 +1,37 @@ +var mkdirp = require('../').mkdirp; +var path = require('path'); +var fs = require('fs'); +var exists = fs.exists || path.exists; +var test = require('tap').test; +var _0777 = parseInt('0777', 8); +var _0755 = parseInt('0755', 8); + +test('race', function (t) { + t.plan(10); + var ps = [ '', 'tmp' ]; + + for (var i = 0; i < 25; i++) { + var dir = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + ps.push(dir); + } + var file = ps.join('/'); + + var res = 2; + mk(file); + + mk(file); + + function mk (file, cb) { + mkdirp(file, _0755, function (err) { + t.ifError(err); + exists(file, function (ex) { + t.ok(ex, 'file created'); + fs.stat(file, function (err, stat) { + t.ifError(err); + t.equal(stat.mode & _0777, _0755); + t.ok(stat.isDirectory(), 'target not a directory'); + }); + }) + }); + } +}); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/test/rel.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/test/rel.js new file mode 100644 index 00000000..4ddb3427 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/test/rel.js @@ -0,0 +1,32 @@ +var mkdirp = require('../'); +var path = require('path'); +var fs = require('fs'); +var exists = fs.exists || path.exists; +var test = require('tap').test; +var _0777 = parseInt('0777', 8); +var _0755 = parseInt('0755', 8); + +test('rel', function (t) { + t.plan(5); + var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + + var cwd = process.cwd(); + process.chdir('/tmp'); + + var file = [x,y,z].join('/'); + + mkdirp(file, _0755, function (err) { + t.ifError(err); + exists(file, function (ex) { + t.ok(ex, 'file created'); + fs.stat(file, function (err, stat) { + t.ifError(err); + process.chdir(cwd); + t.equal(stat.mode & _0777, _0755); + t.ok(stat.isDirectory(), 'target not a directory'); + }) + }) + }); +}); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/test/return.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/test/return.js new file mode 100644 index 00000000..bce68e56 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/test/return.js @@ -0,0 +1,25 @@ +var mkdirp = require('../'); +var path = require('path'); +var fs = require('fs'); +var test = require('tap').test; + +test('return value', function (t) { + t.plan(4); + var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + + var file = '/tmp/' + [x,y,z].join('/'); + + // should return the first dir created. + // By this point, it would be profoundly surprising if /tmp didn't + // already exist, since every other test makes things in there. + mkdirp(file, function (err, made) { + t.ifError(err); + t.equal(made, '/tmp/' + x); + mkdirp(file, function (err, made) { + t.ifError(err); + t.equal(made, null); + }); + }); +}); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/test/return_sync.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/test/return_sync.js new file mode 100644 index 00000000..7c222d35 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/test/return_sync.js @@ -0,0 +1,24 @@ +var mkdirp = require('../'); +var path = require('path'); +var fs = require('fs'); +var test = require('tap').test; + +test('return value', function (t) { + t.plan(2); + var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + + var file = '/tmp/' + [x,y,z].join('/'); + + // should return the first dir created. + // By this point, it would be profoundly surprising if /tmp didn't + // already exist, since every other test makes things in there. + // Note that this will throw on failure, which will fail the test. + var made = mkdirp.sync(file); + t.equal(made, '/tmp/' + x); + + // making the same file again should have no effect. + made = mkdirp.sync(file); + t.equal(made, null); +}); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/test/root.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/test/root.js new file mode 100644 index 00000000..9e7d079d --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/test/root.js @@ -0,0 +1,19 @@ +var mkdirp = require('../'); +var path = require('path'); +var fs = require('fs'); +var test = require('tap').test; +var _0755 = parseInt('0755', 8); + +test('root', function (t) { + // '/' on unix, 'c:/' on windows. + var file = path.resolve('/'); + + mkdirp(file, _0755, function (err) { + if (err) throw err + fs.stat(file, function (er, stat) { + if (er) throw er + t.ok(stat.isDirectory(), 'target is a directory'); + t.end(); + }) + }); +}); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/test/sync.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/test/sync.js new file mode 100644 index 00000000..8c8dc938 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/test/sync.js @@ -0,0 +1,32 @@ +var mkdirp = require('../'); +var path = require('path'); +var fs = require('fs'); +var exists = fs.exists || path.exists; +var test = require('tap').test; +var _0777 = parseInt('0777', 8); +var _0755 = parseInt('0755', 8); + +test('sync', function (t) { + t.plan(4); + var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + + var file = '/tmp/' + [x,y,z].join('/'); + + try { + mkdirp.sync(file, _0755); + } catch (err) { + t.fail(err); + return t.end(); + } + + exists(file, function (ex) { + t.ok(ex, 'file created'); + fs.stat(file, function (err, stat) { + t.ifError(err); + t.equal(stat.mode & _0777, _0755); + t.ok(stat.isDirectory(), 'target not a directory'); + }); + }); +}); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/test/umask.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/test/umask.js new file mode 100644 index 00000000..2033c63a --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/test/umask.js @@ -0,0 +1,28 @@ +var mkdirp = require('../'); +var path = require('path'); +var fs = require('fs'); +var exists = fs.exists || path.exists; +var test = require('tap').test; +var _0777 = parseInt('0777', 8); +var _0755 = parseInt('0755', 8); + +test('implicit mode from umask', function (t) { + t.plan(5); + var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + + var file = '/tmp/' + [x,y,z].join('/'); + + mkdirp(file, function (err) { + t.ifError(err); + exists(file, function (ex) { + t.ok(ex, 'file created'); + fs.stat(file, function (err, stat) { + t.ifError(err); + t.equal(stat.mode & _0777, _0777 & (~process.umask())); + t.ok(stat.isDirectory(), 'target not a directory'); + }); + }) + }); +}); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/test/umask_sync.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/test/umask_sync.js new file mode 100644 index 00000000..11a76147 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/mkdirp/test/umask_sync.js @@ -0,0 +1,32 @@ +var mkdirp = require('../'); +var path = require('path'); +var fs = require('fs'); +var exists = fs.exists || path.exists; +var test = require('tap').test; +var _0777 = parseInt('0777', 8); +var _0755 = parseInt('0755', 8); + +test('umask sync modes', function (t) { + t.plan(4); + var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + + var file = '/tmp/' + [x,y,z].join('/'); + + try { + mkdirp.sync(file); + } catch (err) { + t.fail(err); + return t.end(); + } + + exists(file, function (ex) { + t.ok(ex, 'file created'); + fs.stat(file, function (err, stat) { + t.ifError(err); + t.equal(stat.mode & _0777, (_0777 & (~process.umask()))); + t.ok(stat.isDirectory(), 'target not a directory'); + }); + }); +}); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/AUTHORS b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/AUTHORS new file mode 100644 index 00000000..7145cbcd --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/AUTHORS @@ -0,0 +1,10 @@ +# contributors sorted by whether or not they're me. +Isaac Z. Schlueter <i@izs.me> +Stein Martin Hustad <stein@hustad.com> +Mikeal Rogers <mikeal.rogers@gmail.com> +Laurie Harper <laurie@holoweb.net> +Jann Horn <jann@Jann-PC.fritz.box> +Elijah Insua <tmpvar@gmail.com> +Henry Rawas <henryr@schakra.com> +Justin Makeig <jmpublic@makeig.com> +Mike Schilling <mike@emotive.com> diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/CONTRIBUTING.md b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/CONTRIBUTING.md new file mode 100644 index 00000000..86b73117 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/CONTRIBUTING.md @@ -0,0 +1,14 @@ +**NO PATCHES WITHOUT A TEST** + +**TEST MUST PASS WITH THE PATCH.** + +**TEST MUST FAIL WITHOUT THE PATCH.** + +**NO EXCEPTIONS.** + +# EVERY PULL REQUEST MUST HAVE A TEST. + +Seriously. This is a very strict rule, and I will not bend it for any +patch, no matter how minor. + +Write a test. diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/LICENSE b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/LICENSE new file mode 100644 index 00000000..19129e31 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/LICENSE-W3C.html b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/LICENSE-W3C.html new file mode 100644 index 00000000..a611e3f9 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/LICENSE-W3C.html @@ -0,0 +1,188 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><meta name="generator" content="HTML Tidy for Mac OS X (vers 31 October 2006 - Apple Inc. build 13), see www.w3.org" /><title>W3C Software Notice and License
    + + + +
    +

    + W3C + +

    + +
    + + + +
    +
    + +
    + + +
    +
    + +
    + + +
    +
    +
    + +
    +
    +

    W3C Software Notice and License

    +
    +
    +

    This work (and included software, documentation such as READMEs, or other +related items) is being provided by the copyright holders under the following +license.

    +

    License

    + +

    +By obtaining, using and/or copying this work, you (the licensee) +agree that you have read, understood, and will comply with the following +terms and conditions.

    + +

    Permission to copy, modify, and distribute this software and its +documentation, with or without modification, for any purpose and without +fee or royalty is hereby granted, provided that you include the following on +ALL copies of the software and documentation or portions thereof, including +modifications:

    + +
    • The full text of this NOTICE in a location viewable to users of the + redistributed or derivative work.
    • Any pre-existing intellectual property disclaimers, notices, or terms + and conditions. If none exist, the W3C Software Short + Notice should be included (hypertext is preferred, text is permitted) + within the body of any redistributed or derivative code.
    • Notice of any changes or modifications to the files, including the date + changes were made. (We recommend you provide URIs to the location from + which the code is derived.)
    + +

    Disclaimers

    + +

    THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS +MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT +LIMITED TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR +PURPOSE OR THAT THE USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE +ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.

    + +

    COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR +DOCUMENTATION.

    + +

    The name and trademarks of copyright holders may NOT be used in +advertising or publicity pertaining to the software without specific, written +prior permission. Title to copyright in this software and any associated +documentation will at all times remain with copyright holders.

    + +

    Notes

    + +

    This version: http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231

    + +

    This formulation of W3C's notice and license became active on December 31 +2002. This version removes the copyright ownership notice such that this +license can be used with materials other than those owned by the W3C, +reflects that ERCIM is now a host of the W3C, includes references to this +specific dated version of the license, and removes the ambiguous grant of +"use". Otherwise, this version is the same as the previous +version and is written so as to preserve the Free +Software Foundation's assessment of GPL compatibility and OSI's certification +under the Open Source +Definition.

    +
    +
    +
    +
    + + + +
    + +
    diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/README.md b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/README.md new file mode 100644 index 00000000..91a03143 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/README.md @@ -0,0 +1,220 @@ +# sax js + +A sax-style parser for XML and HTML. + +Designed with [node](http://nodejs.org/) in mind, but should work fine in +the browser or other CommonJS implementations. + +## What This Is + +* A very simple tool to parse through an XML string. +* A stepping stone to a streaming HTML parser. +* A handy way to deal with RSS and other mostly-ok-but-kinda-broken XML + docs. + +## What This Is (probably) Not + +* An HTML Parser - That's a fine goal, but this isn't it. It's just + XML. +* A DOM Builder - You can use it to build an object model out of XML, + but it doesn't do that out of the box. +* XSLT - No DOM = no querying. +* 100% Compliant with (some other SAX implementation) - Most SAX + implementations are in Java and do a lot more than this does. +* An XML Validator - It does a little validation when in strict mode, but + not much. +* A Schema-Aware XSD Thing - Schemas are an exercise in fetishistic + masochism. +* A DTD-aware Thing - Fetching DTDs is a much bigger job. + +## Regarding `Hello, world!').close(); + +// stream usage +// takes the same options as the parser +var saxStream = require("sax").createStream(strict, options) +saxStream.on("error", function (e) { + // unhandled errors will throw, since this is a proper node + // event emitter. + console.error("error!", e) + // clear the error + this._parser.error = null + this._parser.resume() +}) +saxStream.on("opentag", function (node) { + // same object as above +}) +// pipe is supported, and it's readable/writable +// same chunks coming in also go out. +fs.createReadStream("file.xml") + .pipe(saxStream) + .pipe(fs.createWriteStream("file-copy.xml")) +``` + + +## Arguments + +Pass the following arguments to the parser function. All are optional. + +`strict` - Boolean. Whether or not to be a jerk. Default: `false`. + +`opt` - Object bag of settings regarding string formatting. All default to `false`. + +Settings supported: + +* `trim` - Boolean. Whether or not to trim text and comment nodes. +* `normalize` - Boolean. If true, then turn any whitespace into a single + space. +* `lowercase` - Boolean. If true, then lowercase tag names and attribute names + in loose mode, rather than uppercasing them. +* `xmlns` - Boolean. If true, then namespaces are supported. +* `position` - Boolean. If false, then don't track line/col/position. +* `strictEntities` - Boolean. If true, only parse [predefined XML + entities](http://www.w3.org/TR/REC-xml/#sec-predefined-ent) + (`&`, `'`, `>`, `<`, and `"`) + +## Methods + +`write` - Write bytes onto the stream. You don't have to do this all at +once. You can keep writing as much as you want. + +`close` - Close the stream. Once closed, no more data may be written until +it is done processing the buffer, which is signaled by the `end` event. + +`resume` - To gracefully handle errors, assign a listener to the `error` +event. Then, when the error is taken care of, you can call `resume` to +continue parsing. Otherwise, the parser will not continue while in an error +state. + +## Members + +At all times, the parser object will have the following members: + +`line`, `column`, `position` - Indications of the position in the XML +document where the parser currently is looking. + +`startTagPosition` - Indicates the position where the current tag starts. + +`closed` - Boolean indicating whether or not the parser can be written to. +If it's `true`, then wait for the `ready` event to write again. + +`strict` - Boolean indicating whether or not the parser is a jerk. + +`opt` - Any options passed into the constructor. + +`tag` - The current tag being dealt with. + +And a bunch of other stuff that you probably shouldn't touch. + +## Events + +All events emit with a single argument. To listen to an event, assign a +function to `on`. Functions get executed in the this-context of +the parser object. The list of supported events are also in the exported +`EVENTS` array. + +When using the stream interface, assign handlers using the EventEmitter +`on` function in the normal fashion. + +`error` - Indication that something bad happened. The error will be hanging +out on `parser.error`, and must be deleted before parsing can continue. By +listening to this event, you can keep an eye on that kind of stuff. Note: +this happens *much* more in strict mode. Argument: instance of `Error`. + +`text` - Text node. Argument: string of text. + +`doctype` - The ``. Argument: +object with `name` and `body` members. Attributes are not parsed, as +processing instructions have implementation dependent semantics. + +`sgmldeclaration` - Random SGML declarations. Stuff like `` +would trigger this kind of event. This is a weird thing to support, so it +might go away at some point. SAX isn't intended to be used to parse SGML, +after all. + +`opentag` - An opening tag. Argument: object with `name` and `attributes`. +In non-strict mode, tag names are uppercased, unless the `lowercase` +option is set. If the `xmlns` option is set, then it will contain +namespace binding information on the `ns` member, and will have a +`local`, `prefix`, and `uri` member. + +`closetag` - A closing tag. In loose mode, tags are auto-closed if their +parent closes. In strict mode, well-formedness is enforced. Note that +self-closing tags will have `closeTag` emitted immediately after `openTag`. +Argument: tag name. + +`attribute` - An attribute node. Argument: object with `name` and `value`. +In non-strict mode, attribute names are uppercased, unless the `lowercase` +option is set. If the `xmlns` option is set, it will also contains namespace +information. + +`comment` - A comment node. Argument: the string of the comment. + +`opencdata` - The opening tag of a ``) of a `` tags trigger a `"script"` +event, and their contents are not checked for special xml characters. +If you pass `noscript: true`, then this behavior is suppressed. + +## Reporting Problems + +It's best to write a failing test if you find an issue. I will always +accept pull requests with failing tests if they demonstrate intended +behavior, but it is very hard to figure out what issue you're describing +without a test. Writing a test is also the best way for you yourself +to figure out if you really understand the issue you think you have with +sax-js. diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/examples/big-not-pretty.xml b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/examples/big-not-pretty.xml new file mode 100644 index 00000000..fb5265dd --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/examples/big-not-pretty.xml @@ -0,0 +1,8002 @@ + + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/examples/example.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/examples/example.js new file mode 100644 index 00000000..7b0246e9 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/examples/example.js @@ -0,0 +1,29 @@ + +var fs = require("fs"), + util = require("util"), + path = require("path"), + xml = fs.readFileSync(path.join(__dirname, "test.xml"), "utf8"), + sax = require("../lib/sax"), + strict = sax.parser(true), + loose = sax.parser(false, {trim:true}), + inspector = function (ev) { return function (data) { + console.error("%s %s %j", this.line+":"+this.column, ev, data); + }}; + +sax.EVENTS.forEach(function (ev) { + loose["on"+ev] = inspector(ev); +}); +loose.onend = function () { + console.error("end"); + console.error(loose); +}; + +// do this in random bits at a time to verify that it works. +(function () { + if (xml) { + var c = Math.ceil(Math.random() * 1000) + loose.write(xml.substr(0,c)); + xml = xml.substr(c); + process.nextTick(arguments.callee); + } else loose.close(); +})(); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/examples/get-products.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/examples/get-products.js new file mode 100644 index 00000000..9e8d74aa --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/examples/get-products.js @@ -0,0 +1,58 @@ +// pull out /GeneralSearchResponse/categories/category/items/product tags +// the rest we don't care about. + +var sax = require("../lib/sax.js") +var fs = require("fs") +var path = require("path") +var xmlFile = path.resolve(__dirname, "shopping.xml") +var util = require("util") +var http = require("http") + +fs.readFile(xmlFile, function (er, d) { + http.createServer(function (req, res) { + if (er) throw er + var xmlstr = d.toString("utf8") + + var parser = sax.parser(true) + var products = [] + var product = null + var currentTag = null + + parser.onclosetag = function (tagName) { + if (tagName === "product") { + products.push(product) + currentTag = product = null + return + } + if (currentTag && currentTag.parent) { + var p = currentTag.parent + delete currentTag.parent + currentTag = p + } + } + + parser.onopentag = function (tag) { + if (tag.name !== "product" && !product) return + if (tag.name === "product") { + product = tag + } + tag.parent = currentTag + tag.children = [] + tag.parent && tag.parent.children.push(tag) + currentTag = tag + } + + parser.ontext = function (text) { + if (currentTag) currentTag.children.push(text) + } + + parser.onend = function () { + var out = util.inspect(products, false, 3, true) + res.writeHead(200, {"content-type":"application/json"}) + res.end("{\"ok\":true}") + // res.end(JSON.stringify(products)) + } + + parser.write(xmlstr).end() + }).listen(1337) +}) diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/examples/hello-world.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/examples/hello-world.js new file mode 100644 index 00000000..cbfa5184 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/examples/hello-world.js @@ -0,0 +1,4 @@ +require("http").createServer(function (req, res) { + res.writeHead(200, {"content-type":"application/json"}) + res.end(JSON.stringify({ok: true})) +}).listen(1337) diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/examples/not-pretty.xml b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/examples/not-pretty.xml new file mode 100644 index 00000000..9592852d --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/examples/not-pretty.xml @@ -0,0 +1,8 @@ + + something blerm a bit down here diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/examples/pretty-print.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/examples/pretty-print.js new file mode 100644 index 00000000..cd6aca9e --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/examples/pretty-print.js @@ -0,0 +1,74 @@ +var sax = require("../lib/sax") + , printer = sax.createStream(false, {lowercasetags:true, trim:true}) + , fs = require("fs") + +function entity (str) { + return str.replace('"', '"') +} + +printer.tabstop = 2 +printer.level = 0 +printer.indent = function () { + print("\n") + for (var i = this.level; i > 0; i --) { + for (var j = this.tabstop; j > 0; j --) { + print(" ") + } + } +} +printer.on("opentag", function (tag) { + this.indent() + this.level ++ + print("<"+tag.name) + for (var i in tag.attributes) { + print(" "+i+"=\""+entity(tag.attributes[i])+"\"") + } + print(">") +}) + +printer.on("text", ontext) +printer.on("doctype", ontext) +function ontext (text) { + this.indent() + print(text) +} + +printer.on("closetag", function (tag) { + this.level -- + this.indent() + print("") +}) + +printer.on("cdata", function (data) { + this.indent() + print("") +}) + +printer.on("comment", function (comment) { + this.indent() + print("") +}) + +printer.on("error", function (error) { + console.error(error) + throw error +}) + +if (!process.argv[2]) { + throw new Error("Please provide an xml file to prettify\n"+ + "TODO: read from stdin or take a file") +} +var xmlfile = require("path").join(process.cwd(), process.argv[2]) +var fstr = fs.createReadStream(xmlfile, { encoding: "utf8" }) + +function print (c) { + if (!process.stdout.write(c)) { + fstr.pause() + } +} + +process.stdout.on("drain", function () { + fstr.resume() +}) + +fstr.pipe(printer) diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/examples/shopping.xml b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/examples/shopping.xml new file mode 100644 index 00000000..223c6c66 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/examples/shopping.xml @@ -0,0 +1,2 @@ + +sandbox3.1 r31.Kadu4DC.phase357782011.10.06 15:37:23 PSTp2.a121bc2aaf029435dce62011-10-21T18:38:45.982-04:00P0Y0M0DT0H0M0.169S1112You are currently using the SDC API sandbox environment! No clicks to merchant URLs from this response will be paid. Please change the host of your API requests to 'publisher.api.shopping.com' when you have finished development and testinghttp://statTest.dealtime.com/pixel/noscript?PV_EvnTyp=APPV&APPV_APITSP=10%2F21%2F11_06%3A38%3A45_PM&APPV_DSPRQSID=p2.a121bc2aaf029435dce6&APPV_IMGURL=http://img.shopping.com/sc/glb/sdc_logo_106x19.gif&APPV_LI_LNKINID=7000610&APPV_LI_SBMKYW=nikon&APPV_MTCTYP=1000&APPV_PRTID=2002&APPV_BrnID=14804http://www.shopping.com/digital-cameras/productsDigital CamerasDigital CamerasElectronicshttp://www.shopping.com/xCH-electronics-nikon~linkin_id-7000610?oq=nikonCameras and Photographyhttp://www.shopping.com/xCH-cameras_and_photography-nikon~linkin_id-7000610?oq=nikonDigital Camerashttp://www.shopping.com/digital-cameras/nikon/products?oq=nikon&linkin_id=7000610nikonnikonDigital Camerashttp://www.shopping.com/digital-cameras/nikon/products?oq=nikon&linkin_id=7000610Nikon D3100 Digital Camera14.2 Megapixel, SLR Camera, 3 in. LCD Screen, With High Definition Video, Weight: 1 lb.The Nikon D3100 digital SLR camera speaks to the growing ranks of enthusiastic D-SLR users and aspiring photographers by providing an easy-to-use and affordable entrance to the world of Nikon D-SLR’s. The 14.2-megapixel D3100 has powerful features, such as the enhanced Guide Mode that makes it easy to unleash creative potential and capture memories with still images and full HD video. Like having a personal photo tutor at your fingertips, this unique feature provides a simple graphical interface on the camera’s LCD that guides users by suggesting and/or adjusting camera settings to achieve the desired end result images. The D3100 is also the world’s first D-SLR to introduce full time auto focus (AF) in Live View and D-Movie mode to effortlessly achieve the critical focus needed when shooting Full HD 1080p video.http://di1.shopping.com/images/pi/93/bc/04/101677489-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=1http://di1.shopping.com/images/pi/93/bc/04/101677489-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=1http://di1.shopping.com/images/pi/93/bc/04/101677489-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=1http://di1.shopping.com/images/pi/93/bc/04/101677489-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=1http://di1.shopping.com/images/pi/93/bc/04/101677489-606x500-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=194.56http://img.shopping.com/sc/pr/sdc_stars_sm_4.5.gifhttp://www.shopping.com/Nikon-D3100/reviews~linkin_id-7000610429.001360.00http://www.shopping.com/Nikon-D3100/prices~linkin_id-7000610http://www.shopping.com/Nikon-D3100/info~linkin_id-7000610Nikon D3100 Digital SLR Camera with 18-55mm NIKKOR VR LensThe Nikon D3100 Digital SLR Camera is an affordable compact and lightweight photographic power-house. It features the all-purpose 18-55mm VR lens a high-resolution 14.2 MP CMOS sensor along with a feature set that's comprehensive yet easy to navigate - the intuitive onboard learn-as-you grow guide mode allows the photographer to understand what the 3100 can do quickly and easily. Capture beautiful pictures and amazing Full HD 1080p movies with sound and full-time autofocus. Availabilty: In Stock!7185Nikonhttp://di102.shopping.com/images/di/2d/5a/57/36424d5a717a366662532d61554c7767615f67-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di102.shopping.com/images/di/2d/5a/57/36424d5a717a366662532d61554c7767615f67-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di102.shopping.com/images/di/2d/5a/57/36424d5a717a366662532d61554c7767615f67-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di102.shopping.com/images/di/2d/5a/57/36424d5a717a366662532d61554c7767615f67-350x350-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1in-stockFree Shipping with Any Purchase!529.000.00799.00http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=647&BEFID=7185&aon=%5E1&MerchantID=475674&crawler_id=475674&dealId=-ZW6BMZqz6fbS-aULwga_g%3D%3D&url=http%3A%2F%2Fwww.fumfie.com%2Fproduct%2F343.5%2Fshopping-com%3F&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+D3100+Digital+SLR+Camera+with+18-55mm+NIKKOR+VR+Lens&dlprc=529.0&crn=&istrsmrc=1&isathrsl=0&AR=1&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=101677489&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=1&cid=&semid1=&semid2=&IsLps=0&CC=1&SL=1&FS=1&code=&acode=658&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=FumFiehttp://img.shopping.com/cctool/merch_logos/475674.gif866 666 91985604.27http://img.shopping.com/sc/mr/sdc_checks_45.gifhttp://www.shopping.com/xMR-store_fumfie~MRD-475674~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUSF343C5Nikon Nikon D3100 14.2MP Digital SLR Camera with 18-55mm f/3.5-5.6 AF-S DX VR, CamerasNikon D3100 14.2MP Digital SLR Camera with 18-55mm f/3.5-5.6 AF-S DX VR7185Nikonhttp://di109.shopping.com/images/di/6d/64/31/65396c443876644f7534464851664a714b6e67-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di109.shopping.com/images/di/6d/64/31/65396c443876644f7534464851664a714b6e67-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di109.shopping.com/images/di/6d/64/31/65396c443876644f7534464851664a714b6e67-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di109.shopping.com/images/di/6d/64/31/65396c443876644f7534464851664a714b6e67-385x352-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2in-stock549.000.00549.00http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=779&BEFID=7185&aon=%5E1&MerchantID=305814&crawler_id=305814&dealId=md1e9lD8vdOu4FHQfJqKng%3D%3D&url=http%3A%2F%2Fwww.electronics-expo.com%2Findex.php%3Fpage%3Ditem%26id%3DNIKD3100%26source%3DSideCar%26scpid%3D8%26scid%3Dscsho318727%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+Nikon+D3100+14.2MP+Digital+SLR+Camera+with+18-55mm+f%2F3.5-5.6+AF-S+DX+VR%2C+Cameras&dlprc=549.0&crn=&istrsmrc=1&isathrsl=0&AR=9&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=101677489&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=9&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=1&code=&acode=771&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=Electronics Expohttp://img.shopping.com/cctool/merch_logos/305814.gif1-888-707-EXPO3713.90http://img.shopping.com/sc/mr/sdc_checks_4.gifhttp://www.shopping.com/xMR-store_electronics_expo~MRD-305814~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUSNIKD3100Nikon D3100 14.2-Megapixel Digital SLR Camera With 18-55mm Zoom-Nikkor Lens, BlackSplit-second shutter response captures shots other cameras may have missed Helps eliminate the frustration of shutter delay! 14.2-megapixels for enlargements worth framing and hanging. Takes breathtaking 1080p HD movies. ISO sensitivity from 100-1600 for bright or dimly lit settings. 3.0in. color LCD for beautiful, wide-angle framing and viewing. In-camera image editing lets you retouch with no PC. Automatic scene modes include Child, Sports, Night Portrait and more. Accepts SDHC memory cards. Nikon D3100 14.2-Megapixel Digital SLR Camera With 18-55mm Zoom-Nikkor Lens, Black is one of many Digital SLR Cameras available through Office Depot. Made by Nikon.7185Nikonhttp://di109.shopping.com/images/di/79/59/75/61586e4446744359377244556a6b5932616177-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di109.shopping.com/images/di/79/59/75/61586e4446744359377244556a6b5932616177-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di109.shopping.com/images/di/79/59/75/61586e4446744359377244556a6b5932616177-250x250-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3in-stock549.990.00699.99http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=698&BEFID=7185&aon=%5E1&MerchantID=467671&crawler_id=467671&dealId=yYuaXnDFtCY7rDUjkY2aaw%3D%3D&url=http%3A%2F%2Flink.mercent.com%2Fredirect.ashx%3Fmr%3AmerchantID%3DOfficeDepot%26mr%3AtrackingCode%3DCEC9669E-6ABC-E011-9F24-0019B9C043EB%26mr%3AtargetUrl%3Dhttp%3A%2F%2Fwww.officedepot.com%2Fa%2Fproducts%2F486292%2FNikon-D3100-142-Megapixel-Digital-SLR%2F%253fcm_mmc%253dMercent-_-Shopping-_-Cameras_and_Camcorders-_-486292&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+D3100+14.2-Megapixel+Digital+SLR+Camera+With+18-55mm+Zoom-Nikkor+Lens%2C+Black&dlprc=549.99&crn=&istrsmrc=1&isathrsl=0&AR=10&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=101677489&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=10&cid=&semid1=&semid2=&IsLps=0&CC=1&SL=1&FS=1&code=&acode=690&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=Office Depothttp://img.shopping.com/cctool/merch_logos/467671.gif1-800-GO-DEPOT1352.37http://img.shopping.com/sc/mr/sdc_checks_25.gifhttp://www.shopping.com/xMR-store_office_depot_4158555~MRD-467671~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS486292Nikon® D3100™ 14.2MP Digital SLR with 18-55mm LensThe Nikon D3100 DSLR will surprise you with its simplicity and impress you with superb results.7185Nikonhttp://di103.shopping.com/images/di/52/6c/35/36553743756954597348344d475a30326c7851-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://di103.shopping.com/images/di/52/6c/35/36553743756954597348344d475a30326c7851-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://di103.shopping.com/images/di/52/6c/35/36553743756954597348344d475a30326c7851-220x220-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4in-stock549.996.05549.99http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=504&BEFID=7185&aon=%5E1&MerchantID=332477&crawler_id=332477&dealId=Rl56U7CuiTYsH4MGZ02lxQ%3D%3D&url=http%3A%2F%2Ftracking.searchmarketing.com%2Fgsic.asp%3Faid%3D903483107%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon%C2%AE+D3100%E2%84%A2+14.2MP+Digital+SLR+with+18-55mm+Lens&dlprc=549.99&crn=&istrsmrc=0&isathrsl=0&AR=11&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=101677489&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=11&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=0&code=&acode=496&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=RadioShackhttp://img.shopping.com/cctool/merch_logos/332477.gif242.25http://img.shopping.com/sc/mr/sdc_checks_25.gifhttp://www.shopping.com/xMR-store_radioshack_9689~MRD-332477~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS9614867Nikon D3100 SLR w/Nikon 18-55mm VR & 55-200mm VR Lenses14.2 Megapixels3" LCDLive ViewHD 1080p Video w/ Sound & Autofocus11-point Autofocus3 Frames per Second ShootingISO 100 to 3200 (Expand to 12800-Hi2)Self Cleaning SensorEXPEED 2, Image Processing EngineScene Recognition System7185Nikonhttp://di105.shopping.com/images/di/68/75/53/36785a4b444b614b4d544d5037316549364441-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di105.shopping.com/images/di/68/75/53/36785a4b444b614b4d544d5037316549364441-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di105.shopping.com/images/di/68/75/53/36785a4b444b614b4d544d5037316549364441-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di105.shopping.com/images/di/68/75/53/36785a4b444b614b4d544d5037316549364441-345x345-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5in-stock695.000.00695.00http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=371&BEFID=7185&aon=%5E1&MerchantID=487342&crawler_id=487342&dealId=huS6xZKDKaKMTMP71eI6DA%3D%3D&url=http%3A%2F%2Fwww.rythercamera.com%2Fcatalog%2Fproduct_info.php%3Fcsv%3Dsh%26products_id%3D32983%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+D3100+SLR+w%2FNikon+18-55mm+VR+%26+55-200mm+VR+Lenses&dlprc=695.0&crn=&istrsmrc=0&isathrsl=0&AR=15&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=101677489&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=15&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=1&code=&acode=379&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=RytherCamera.comhttp://img.shopping.com/cctool/merch_logos/487342.gif1-877-644-75930http://img.shopping.com/sc/glb/flag/US.gifUS32983Nikon COOLPIX S203 Digital Camera10 Megapixel, Ultra-Compact Camera, 2.5 in. LCD Screen, 3x Optical Zoom, With Video Capability, Weight: 0.23 lb.With 10.34 mega pixel, electronic VR vibration reduction, 5-level brightness adjustment, 3x optical zoom, and TFT LCD, Nikon Coolpix s203 fulfills all the demands of any photographer. The digital camera has an inbuilt memory of 44MB and an external memory slot made for all kinds of SD (Secure Digital) cards.http://di1.shopping.com/images/pi/c4/ef/1b/95397883-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=2http://di1.shopping.com/images/pi/c4/ef/1b/95397883-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=2http://di1.shopping.com/images/pi/c4/ef/1b/95397883-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=2http://di1.shopping.com/images/pi/c4/ef/1b/95397883-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=2http://di1.shopping.com/images/pi/c4/ef/1b/95397883-500x499-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=20139.00139.00http://www.shopping.com/Nikon-Coolpix-S203/prices~linkin_id-7000610http://www.shopping.com/Nikon-Coolpix-S203/info~linkin_id-7000610Nikon Coolpix S203 Digital Camera (Red)With 10.34 mega pixel, electronic VR vibration reduction, 5-level brightness adjustment, 3x optical zoom, and TFT LCD, Nikon Coolpix s203 fulfills all the demands of any photographer. The digital camera has an inbuilt memory of 44MB and an external memory slot made for all kinds of SD (Secure Digital) cards.7185Nikonhttp://di108.shopping.com/images/di/73/42/64/324a6e4945504d2d415f6c42414d31525a6751-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di108.shopping.com/images/di/73/42/64/324a6e4945504d2d415f6c42414d31525a6751-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di108.shopping.com/images/di/73/42/64/324a6e4945504d2d415f6c42414d31525a6751-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di108.shopping.com/images/di/73/42/64/324a6e4945504d2d415f6c42414d31525a6751-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di108.shopping.com/images/di/73/42/64/324a6e4945504d2d415f6c42414d31525a6751-500x500-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1in-stockFantastic prices with ease & comfort of Amazon.com!139.009.50139.00http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=566&BEFID=7185&aon=%5E1&MerchantID=301531&crawler_id=1903313&dealId=sBd2JnIEPM-A_lBAM1RZgQ%3D%3D&url=http%3A%2F%2Fwww.amazon.com%2Fdp%2FB002T964IM%2Fref%3Dasc_df_B002T964IM1751618%3Fsmid%3DA22UHVNXG98FAT%26tag%3Ddealtime-ce-mp01feed-20%26linkCode%3Dasn%26creative%3D395105%26creativeASIN%3DB002T964IM&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+Coolpix+S203+Digital+Camera+%28Red%29&dlprc=139.0&crn=&istrsmrc=0&isathrsl=0&AR=63&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=95397883&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=63&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=0&code=&acode=518&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=Amazon Marketplacehttp://img.shopping.com/cctool/merch_logos/301531.gif2132.73http://img.shopping.com/sc/mr/sdc_checks_25.gifhttp://www.shopping.com/xMR-store_amazon_marketplace_9689~MRD-301531~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUSB002T964IMNikon S3100 Digital Camera14.5 Megapixel, Compact Camera, 2.7 in. LCD Screen, 5x Optical Zoom, With High Definition Video, Weight: 0.23 lb.This digital camera features a wide-angle optical Zoom-NIKKOR glass lens that allows you to capture anything from landscapes to portraits to action shots. The high-definition movie mode with one-touch recording makes it easy to capture video clips.http://di1.shopping.com/images/pi/66/2d/33/106834268-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=3http://di1.shopping.com/images/pi/66/2d/33/106834268-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=3http://di1.shopping.com/images/pi/66/2d/33/106834268-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=3http://di1.shopping.com/images/pi/66/2d/33/106834268-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=3http://di1.shopping.com/images/pi/66/2d/33/106834268-507x387-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=312.00http://img.shopping.com/sc/pr/sdc_stars_sm_2.gifhttp://www.shopping.com/nikon-s3100/reviews~linkin_id-700061099.95134.95http://www.shopping.com/nikon-s3100/prices~linkin_id-7000610http://www.shopping.com/nikon-s3100/info~linkin_id-7000610CoolPix S3100 14 Megapixel Compact Digital Camera- RedNikon Coolpix S3100 - Digital camera - compact - 14.0 Mpix - optical zoom: 5 x - supported memory: SD, SDXC, SDHC - red7185Nikonhttp://di111.shopping.com/images/di/55/55/79/476f71563872302d78726b6e2d726e474e6267-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di111.shopping.com/images/di/55/55/79/476f71563872302d78726b6e2d726e474e6267-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di111.shopping.com/images/di/55/55/79/476f71563872302d78726b6e2d726e474e6267-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di111.shopping.com/images/di/55/55/79/476f71563872302d78726b6e2d726e474e6267-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1in-stockGet 30 days FREE SHIPPING w/ ShipVantage119.956.95139.95http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=578&BEFID=7185&aon=%5E1&MerchantID=485615&crawler_id=485615&dealId=UUyGoqV8r0-xrkn-rnGNbg%3D%3D&url=http%3A%2F%2Fsears.rdr.channelintelligence.com%2Fgo.asp%3FfVhzOGNRAAQIASNiE1NbQBJpFHJ3Yx0CTAICI2BbH1lEFmgKP3QvUVpEREdlfUAUHAQPLVpFTVdtJzxAHUNYW3AhQBM0QhFvEXAbYh8EAAVmDAJeU1oyGG0GcBdhGwUGCAVqYF9SO0xSN1sZdmA7dmMdBQAJB24qX1NbQxI6AjA2ME5dVFULPDsGPFcQTTdaLTA6SR0OFlQvPAwMDxYcYlxIVkcoLTcCDA%3D%3D%26nAID%3D13736960%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=CoolPix+S3100+14+Megapixel+Compact+Digital+Camera-+Red&dlprc=119.95&crn=&istrsmrc=1&isathrsl=0&AR=28&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=106834268&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=28&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=1&FS=0&code=&acode=583&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=Searshttp://img.shopping.com/cctool/merch_logos/485615.gif1-800-349-43588882.85http://img.shopping.com/sc/mr/sdc_checks_3.gifhttp://www.shopping.com/xMR-store_sears_4189479~MRD-485615~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS00337013000COOLPIX S3100 PinkNikon Coolpix S3100 - Digital camera - compact - 14.0 Mpix - optical zoom: 5 x - supported memory: SD, SDXC, SDHC - pink7185Nikonhttp://di111.shopping.com/images/di/58/38/37/4177586c573164586f4d586b34515144546f51-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di111.shopping.com/images/di/58/38/37/4177586c573164586f4d586b34515144546f51-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di111.shopping.com/images/di/58/38/37/4177586c573164586f4d586b34515144546f51-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di111.shopping.com/images/di/58/38/37/4177586c573164586f4d586b34515144546f51-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2in-stockGet 30 days FREE SHIPPING w/ ShipVantage119.956.95139.95http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=578&BEFID=7185&aon=%5E1&MerchantID=485615&crawler_id=485615&dealId=X87AwXlW1dXoMXk4QQDToQ%3D%3D&url=http%3A%2F%2Fsears.rdr.channelintelligence.com%2Fgo.asp%3FfVhzOGNRAAQIASNiE1NbQBJpFHJxYx0CTAICI2BbH1lEFmgKP3QvUVpEREdlfUAUHAQPLVpFTVdtJzxAHUNYW3AhQBM0QhFvEXAbYh8EAAVmb2JcUFxDEGsPc3QDEkFZVQ0WFhdRW0MWbgYWDlxzdGMdAVQWRi0xDAwPFhw9TSobb05eWVVYKzsLTFVVQi5RICs3SA8MU1s2MQQKD1wf%26nAID%3D13736960%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=COOLPIX+S3100+Pink&dlprc=119.95&crn=&istrsmrc=1&isathrsl=0&AR=31&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=106834268&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=31&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=1&FS=0&code=&acode=583&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=Searshttp://img.shopping.com/cctool/merch_logos/485615.gif1-800-349-43588882.85http://img.shopping.com/sc/mr/sdc_checks_3.gifhttp://www.shopping.com/xMR-store_sears_4189479~MRD-485615~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS00337015000Nikon Coolpix S3100 14.0 MP Digital Camera - SilverNikon Coolpix S3100 14.0 MP Digital Camera - Silver7185Nikonhttp://di109.shopping.com/images/di/6e/76/46/776e70664134726c413144626b736473613077-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di109.shopping.com/images/di/6e/76/46/776e70664134726c413144626b736473613077-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di109.shopping.com/images/di/6e/76/46/776e70664134726c413144626b736473613077-270x270-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3in-stock109.970.00109.97http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=803&BEFID=7185&aon=%5E&MerchantID=475774&crawler_id=475774&dealId=nvFwnpfA4rlA1Dbksdsa0w%3D%3D&url=http%3A%2F%2Fwww.thewiz.com%2Fcatalog%2Fproduct.jsp%3FmodelNo%3DS3100SILVER%26gdftrk%3DgdfV2677_a_7c996_a_7c4049_a_7c26262&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+Coolpix+S3100+14.0+MP+Digital+Camera+-+Silver&dlprc=109.97&crn=&istrsmrc=0&isathrsl=0&AR=33&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=106834268&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=33&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=1&code=&acode=797&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=TheWiz.comhttp://img.shopping.com/cctool/merch_logos/475774.gif877-542-69880http://img.shopping.com/sc/glb/flag/US.gifUS26262Nikon� COOLPIX� S3100 14MP Digital Camera (Silver)The Nikon COOLPIX S3100 is the easy way to share your life and stay connected.7185Nikonhttp://di102.shopping.com/images/di/35/47/74/614e324e6572794b7770732d5365326c2d3467-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://di102.shopping.com/images/di/35/47/74/614e324e6572794b7770732d5365326c2d3467-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://di102.shopping.com/images/di/35/47/74/614e324e6572794b7770732d5365326c2d3467-220x220-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4in-stock119.996.05119.99http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=504&BEFID=7185&aon=%5E1&MerchantID=332477&crawler_id=332477&dealId=5GtaN2NeryKwps-Se2l-4g%3D%3D&url=http%3A%2F%2Ftracking.searchmarketing.com%2Fgsic.asp%3Faid%3D848064082%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon%C3%AF%C2%BF%C2%BD+COOLPIX%C3%AF%C2%BF%C2%BD+S3100+14MP+Digital+Camera+%28Silver%29&dlprc=119.99&crn=&istrsmrc=0&isathrsl=0&AR=37&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=106834268&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=37&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=0&code=&acode=509&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=RadioShackhttp://img.shopping.com/cctool/merch_logos/332477.gif242.25http://img.shopping.com/sc/mr/sdc_checks_25.gifhttp://www.shopping.com/xMR-store_radioshack_9689~MRD-332477~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS10101095COOLPIX S3100 YellowNikon Coolpix S3100 - Digital camera - compact - 14.0 Mpix - optical zoom: 5 x - supported memory: SD, SDXC, SDHC - yellow7185Nikonhttp://di107.shopping.com/images/di/61/34/33/6d305258756c5833387a436e516a5535396a77-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di107.shopping.com/images/di/61/34/33/6d305258756c5833387a436e516a5535396a77-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di107.shopping.com/images/di/61/34/33/6d305258756c5833387a436e516a5535396a77-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di107.shopping.com/images/di/61/34/33/6d305258756c5833387a436e516a5535396a77-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5in-stockGet 30 days FREE SHIPPING w/ ShipVantage119.956.95139.95http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=578&BEFID=7185&aon=%5E1&MerchantID=485615&crawler_id=485615&dealId=a43m0RXulX38zCnQjU59jw%3D%3D&url=http%3A%2F%2Fsears.rdr.channelintelligence.com%2Fgo.asp%3FfVhzOGNRAAQIASNiE1NbQBJpFHJwYx0CTAICI2BbH1lEFmgKP3QvUVpEREdlfUAUHAQPLVpFTVdtJzxAHUNYW3AhQBM0QhFvEXAbYh8EAAVmb2JcUFxDEGoPc3QDEkFZVQ0WFhdRW0MWbgYWDlxzdGMdAVQWRi0xDAwPFhw9TSobb05eWVVYKzsLTFVVQi5RICs3SA8MU1s2MQQKD1wf%26nAID%3D13736960%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=COOLPIX+S3100+Yellow&dlprc=119.95&crn=&istrsmrc=1&isathrsl=0&AR=38&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=106834268&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=38&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=1&FS=0&code=&acode=583&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=Searshttp://img.shopping.com/cctool/merch_logos/485615.gif1-800-349-43588882.85http://img.shopping.com/sc/mr/sdc_checks_3.gifhttp://www.shopping.com/xMR-store_sears_4189479~MRD-485615~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS00337014000Nikon D90 Digital Camera12.3 Megapixel, Point and Shoot Camera, 3 in. LCD Screen, With Video Capability, Weight: 1.36 lb.Untitled Document Nikon D90 SLR Digital Camera With 28-80mm 75-300mm Lens Kit The Nikon D90 SLR Digital Camera, with its 12.3-megapixel DX-format CMOS, 3" High resolution LCD display, Scene Recognition System, Picture Control, Active D-Lighting, and one-button Live View, provides photo enthusiasts with the image quality and performance they need to pursue their own vision while still being intuitive enough for use as an everyday camera.http://di1.shopping.com/images/pi/52/fb/d3/99671132-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=4http://di1.shopping.com/images/pi/52/fb/d3/99671132-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=4http://di1.shopping.com/images/pi/52/fb/d3/99671132-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=4http://di1.shopping.com/images/pi/52/fb/d3/99671132-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=4http://di1.shopping.com/images/pi/52/fb/d3/99671132-499x255-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=475.00http://img.shopping.com/sc/pr/sdc_stars_sm_5.gifhttp://www.shopping.com/Nikon-D90-with-18-270mm-Lens/reviews~linkin_id-7000610689.002299.00http://www.shopping.com/Nikon-D90-with-18-270mm-Lens/prices~linkin_id-7000610http://www.shopping.com/Nikon-D90-with-18-270mm-Lens/info~linkin_id-7000610Nikon® D90 12.3MP Digital SLR Camera (Body Only)The Nikon D90 will make you rethink what a digital SLR camera can achieve.7185Nikonhttp://di106.shopping.com/images/di/47/55/35/4a4a6b70554178653548756a4237666b774141-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di106.shopping.com/images/di/47/55/35/4a4a6b70554178653548756a4237666b774141-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di106.shopping.com/images/di/47/55/35/4a4a6b70554178653548756a4237666b774141-220x220-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1in-stock1015.996.051015.99http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=504&BEFID=7185&aon=%5E1&MerchantID=332477&crawler_id=332477&dealId=GU5JJkpUAxe5HujB7fkwAA%3D%3D&url=http%3A%2F%2Ftracking.searchmarketing.com%2Fgsic.asp%3Faid%3D851830266%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon%C2%AE+D90+12.3MP+Digital+SLR+Camera+%28Body+Only%29&dlprc=1015.99&crn=&istrsmrc=0&isathrsl=0&AR=14&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=99671132&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=14&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=0&code=&acode=496&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=RadioShackhttp://img.shopping.com/cctool/merch_logos/332477.gif242.25http://img.shopping.com/sc/mr/sdc_checks_25.gifhttp://www.shopping.com/xMR-store_radioshack_9689~MRD-332477~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS10148659Nikon D90 SLR Digital Camera (Camera Body)The Nikon D90 SLR Digital Camera with its 12.3-megapixel DX-format CCD 3" High resolution LCD display Scene Recognition System Picture Control Active D-Lighting and one-button Live View provides photo enthusiasts with the image quality and performance they need to pursue their own vision while still being intuitive enough for use as an everyday camera. In addition the D90 introduces the D-Movie mode allowing for the first time an interchangeable lens SLR camera that is capable of recording 720p HD movie clips. Availabilty: In Stock7185Nikonhttp://di109.shopping.com/images/di/58/68/55/527553432d73704262544944666f3471667a51-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di109.shopping.com/images/di/58/68/55/527553432d73704262544944666f3471667a51-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di109.shopping.com/images/di/58/68/55/527553432d73704262544944666f3471667a51-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di109.shopping.com/images/di/58/68/55/527553432d73704262544944666f3471667a51-350x350-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2in-stockFree Shipping with Any Purchase!689.000.00900.00http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=647&BEFID=7185&aon=%5E1&MerchantID=475674&crawler_id=475674&dealId=XhURuSC-spBbTIDfo4qfzQ%3D%3D&url=http%3A%2F%2Fwww.fumfie.com%2Fproduct%2F169.5%2Fshopping-com%3F&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+D90+SLR+Digital+Camera+%28Camera+Body%29&dlprc=689.0&crn=&istrsmrc=1&isathrsl=0&AR=16&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=99671132&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=16&cid=&semid1=&semid2=&IsLps=0&CC=1&SL=1&FS=1&code=&acode=658&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=FumFiehttp://img.shopping.com/cctool/merch_logos/475674.gif866 666 91985604.27http://img.shopping.com/sc/mr/sdc_checks_45.gifhttp://www.shopping.com/xMR-store_fumfie~MRD-475674~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUSF169C5Nikon D90 SLR w/Nikon 18-105mm VR & 55-200mm VR Lenses12.3 MegapixelDX Format CMOS Sensor3" VGA LCD DisplayLive ViewSelf Cleaning SensorD-Movie ModeHigh Sensitivity (ISO 3200)4.5 fps BurstIn-Camera Image Editing7185Nikonhttp://di101.shopping.com/images/di/6f/30/50/785f584c5744627278415952793372436d7951-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di101.shopping.com/images/di/6f/30/50/785f584c5744627278415952793372436d7951-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di101.shopping.com/images/di/6f/30/50/785f584c5744627278415952793372436d7951-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di101.shopping.com/images/di/6f/30/50/785f584c5744627278415952793372436d7951-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di101.shopping.com/images/di/6f/30/50/785f584c5744627278415952793372436d7951-500x500-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3in-stock1189.000.001189.00http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=371&BEFID=7185&aon=%5E1&MerchantID=487342&crawler_id=487342&dealId=o0Px_XLWDbrxAYRy3rCmyQ%3D%3D&url=http%3A%2F%2Fwww.rythercamera.com%2Fcatalog%2Fproduct_info.php%3Fcsv%3Dsh%26products_id%3D30619%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+D90+SLR+w%2FNikon+18-105mm+VR+%26+55-200mm+VR+Lenses&dlprc=1189.0&crn=&istrsmrc=0&isathrsl=0&AR=20&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=99671132&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=20&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=1&code=&acode=379&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=RytherCamera.comhttp://img.shopping.com/cctool/merch_logos/487342.gif1-877-644-75930http://img.shopping.com/sc/glb/flag/US.gifUS30619Nikon D90 12.3 Megapixel Digital SLR Camera (Body Only)Fusing 12.3 megapixel image quality and a cinematic 24fps D-Movie Mode, the Nikon D90 exceeds the demands of passionate photographers. Coupled with Nikon's EXPEED image processing technologies and NIKKOR optics, breathtaking image fidelity is assured. Combined with fast 0.15ms power-up and split-second 65ms shooting lag, dramatic action and decisive moments are captured easily. Effective 4-frequency, ultrasonic sensor cleaning frees image degrading dust particles from the sensor's optical low pass filter.7185Nikonhttp://di110.shopping.com/images/di/34/48/67/62574a534a3873736749663842304d58497741-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://di110.shopping.com/images/di/34/48/67/62574a534a3873736749663842304d58497741-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://di110.shopping.com/images/di/34/48/67/62574a534a3873736749663842304d58497741-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4in-stockFREE FEDEX 2-3 DAY DELIVERY899.950.00899.95http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=269&BEFID=7185&aon=%5E&MerchantID=9296&crawler_id=811558&dealId=4HgbWJSJ8ssgIf8B0MXIwA%3D%3D&url=http%3A%2F%2Fwww.pcnation.com%2Foptics-gallery%2Fdetails.asp%3Faffid%3D305%26item%3D2N145P&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+D90+12.3+Megapixel+Digital+SLR+Camera+%28Body+Only%29&dlprc=899.95&crn=&istrsmrc=1&isathrsl=0&AR=21&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=99671132&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=21&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=1&code=&acode=257&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=PCNationhttp://img.shopping.com/cctool/merch_logos/9296.gif800-470-707916224.43http://img.shopping.com/sc/mr/sdc_checks_45.gifhttp://www.shopping.com/xMR-store_pcnation_9689~MRD-9296~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS2N145PNikon D90 12.3MP Digital SLR Camera (Body Only)Fusing 12.3-megapixel image quality inherited from the award-winning D300 with groundbreaking features, the D90's breathtaking, low-noise image quality is further advanced with EXPEED image processing. Split-second shutter response and continuous shooting at up to 4.5 frames-per-second provide the power to capture fast action and precise moments perfectly, while Nikon's exclusive Scene Recognition System contributes to faster 11-area autofocus performance, finer white balance detection and more. The D90 delivers the control passionate photographers demand, utilizing comprehensive exposure functions and the intelligence of 3D Color Matrix Metering II. Stunning results come to life on a 3-inch 920,000-dot color LCD monitor, providing accurate image review, Live View composition and brilliant playback of the D90's cinematic-quality 24-fps HD D-Movie mode.7185Nikonhttp://di102.shopping.com/images/di/55/4e/44/6133754d445a584f6e76445f377354494c5967-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di102.shopping.com/images/di/55/4e/44/6133754d445a584f6e76445f377354494c5967-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di102.shopping.com/images/di/55/4e/44/6133754d445a584f6e76445f377354494c5967-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di102.shopping.com/images/di/55/4e/44/6133754d445a584f6e76445f377354494c5967-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di102.shopping.com/images/di/55/4e/44/6133754d445a584f6e76445f377354494c5967-500x500-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5in-stockFantastic prices with ease & comfort of Amazon.com!780.000.00780.00http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=566&BEFID=7185&aon=%5E1&MerchantID=301531&crawler_id=1903313&dealId=UNDa3uMDZXOnvD_7sTILYg%3D%3D&url=http%3A%2F%2Fwww.amazon.com%2Fdp%2FB001ET5U92%2Fref%3Dasc_df_B001ET5U921751618%3Fsmid%3DAHF4SYKP09WBH%26tag%3Ddealtime-ce-mp01feed-20%26linkCode%3Dasn%26creative%3D395105%26creativeASIN%3DB001ET5U92&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+D90+12.3MP+Digital+SLR+Camera+%28Body+Only%29&dlprc=780.0&crn=&istrsmrc=0&isathrsl=0&AR=29&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=99671132&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=29&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=1&code=&acode=520&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=Amazon Marketplacehttp://img.shopping.com/cctool/merch_logos/301531.gif2132.73http://img.shopping.com/sc/mr/sdc_checks_25.gifhttp://www.shopping.com/xMR-store_amazon_marketplace_9689~MRD-301531~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUSB001ET5U92Nikon D90 Digital Camera with 18-105mm lens12.9 Megapixel, SLR Camera, 3 in. LCD Screen, 5.8x Optical Zoom, With Video Capability, Weight: 2.3 lb.Its 12.3 megapixel DX-format CMOS image sensor and EXPEED image processing system offer outstanding image quality across a wide ISO light sensitivity range. Live View mode lets you compose and shoot via the high-resolution 3-inch LCD monitor, and an advanced Scene Recognition System and autofocus performance help capture images with astounding accuracy. Movies can be shot in Motion JPEG format using the D-Movie function. The camera’s large image sensor ensures exceptional movie image quality and you can create dramatic effects by shooting with a wide range of interchangeable NIKKOR lenses, from wide-angle to macro to fisheye, or by adjusting the lens aperture and experimenting with depth-of-field. The D90 – designed to fuel your passion for photography.http://di1.shopping.com/images/pi/57/6a/4f/70621646-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=5http://di1.shopping.com/images/pi/57/6a/4f/70621646-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=5http://di1.shopping.com/images/pi/57/6a/4f/70621646-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=5http://di1.shopping.com/images/pi/57/6a/4f/70621646-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=5http://di1.shopping.com/images/pi/57/6a/4f/70621646-490x489-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=5324.81http://img.shopping.com/sc/pr/sdc_stars_sm_5.gifhttp://www.shopping.com/Nikon-D90-with-18-105mm-lens/reviews~linkin_id-7000610849.951599.95http://www.shopping.com/Nikon-D90-with-18-105mm-lens/prices~linkin_id-7000610http://www.shopping.com/Nikon-D90-with-18-105mm-lens/info~linkin_id-7000610Nikon D90 18-105mm VR LensThe Nikon D90 SLR Digital Camera with its 12.3-megapixel DX-format CMOS 3" High resolution LCD display Scene Recognition System Picture Control Active D-Lighting and one-button Live View prov7185Nikonhttp://di111.shopping.com/images/di/33/6f/35/6531566768674a5066684c7654314a464b5441-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di111.shopping.com/images/di/33/6f/35/6531566768674a5066684c7654314a464b5441-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di111.shopping.com/images/di/33/6f/35/6531566768674a5066684c7654314a464b5441-260x260-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1in-stock849.950.00849.95http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=419&BEFID=7185&aon=%5E1&MerchantID=9390&crawler_id=1905054&dealId=3o5e1VghgJPfhLvT1JFKTA%3D%3D&url=http%3A%2F%2Fwww.ajrichard.com%2FNikon-D90-18-105mm-VR-Lens%2Fp-292%3Frefid%3DShopping%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+D90+18-105mm+VR+Lens&dlprc=849.95&crn=&istrsmrc=0&isathrsl=0&AR=2&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=70621646&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=2&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=1&code=&acode=425&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=AJRichardhttp://img.shopping.com/cctool/merch_logos/9390.gif1-888-871-125631244.48http://img.shopping.com/sc/mr/sdc_checks_45.gifhttp://www.shopping.com/xMR-store_ajrichard~MRD-9390~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS292Nikon D90 SLR w/Nikon 18-105mm VR Lens12.3 MegapixelDX Format CMOS Sensor3" VGA LCD DisplayLive ViewSelf Cleaning SensorD-Movie ModeHigh Sensitivity (ISO 3200)4.5 fps BurstIn-Camera Image Editing7185Nikonhttp://di108.shopping.com/images/di/5f/6c/59/576a5f6a62776673536b666377556344757777-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di108.shopping.com/images/di/5f/6c/59/576a5f6a62776673536b666377556344757777-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di108.shopping.com/images/di/5f/6c/59/576a5f6a62776673536b666377556344757777-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di108.shopping.com/images/di/5f/6c/59/576a5f6a62776673536b666377556344757777-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di108.shopping.com/images/di/5f/6c/59/576a5f6a62776673536b666377556344757777-500x500-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2in-stock909.000.00909.00http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=371&BEFID=7185&aon=%5E1&MerchantID=487342&crawler_id=487342&dealId=_lYWj_jbwfsSkfcwUcDuww%3D%3D&url=http%3A%2F%2Fwww.rythercamera.com%2Fcatalog%2Fproduct_info.php%3Fcsv%3Dsh%26products_id%3D30971%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+D90+SLR+w%2FNikon+18-105mm+VR+Lens&dlprc=909.0&crn=&istrsmrc=0&isathrsl=0&AR=3&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=70621646&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=3&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=1&code=&acode=379&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=RytherCamera.comhttp://img.shopping.com/cctool/merch_logos/487342.gif1-877-644-75930http://img.shopping.com/sc/glb/flag/US.gifUS3097125448/D90 12.3 Megapixel Digital Camera 18-105mm Zoom Lens w/ 3" Screen - BlackNikon D90 - Digital camera - SLR - 12.3 Mpix - Nikon AF-S DX 18-105mm lens - optical zoom: 5.8 x - supported memory: SD, SDHC7185Nikonhttp://di110.shopping.com/images/di/31/4b/43/636c4347755776747932584b5539736b616467-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di110.shopping.com/images/di/31/4b/43/636c4347755776747932584b5539736b616467-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di110.shopping.com/images/di/31/4b/43/636c4347755776747932584b5539736b616467-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di110.shopping.com/images/di/31/4b/43/636c4347755776747932584b5539736b616467-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3in-stockGet 30 days FREE SHIPPING w/ ShipVantage1199.008.201199.00http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=578&BEFID=7185&aon=%5E1&MerchantID=485615&crawler_id=485615&dealId=1KCclCGuWvty2XKU9skadg%3D%3D&url=http%3A%2F%2Fsears.rdr.channelintelligence.com%2Fgo.asp%3FfVhzOGNRAAQIASNiE1NbQBRtFXpzYx0CTAICI2BbH1lEFmgKP3QvUVpEREdlfUAUHAQPLVpFTVdtJzxAHUNYW3AhQBM0QhFvEXAbYh8EAAVmb2JcVlhCGGkPc3QDEkFZVQ0WFhdRW0MWbgYWDlxzdGMdAVQWRi0xDAwPFhw9TSobb05eWVVYKzsLTFVVQi5RICs3SA8MU1s2MQQKD1wf%26nAID%3D13736960%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=25448%2FD90+12.3+Megapixel+Digital+Camera+18-105mm+Zoom+Lens+w%2F+3%22+Screen+-+Black&dlprc=1199.0&crn=&istrsmrc=1&isathrsl=0&AR=4&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=70621646&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=4&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=0&code=&acode=586&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=Searshttp://img.shopping.com/cctool/merch_logos/485615.gif1-800-349-43588882.85http://img.shopping.com/sc/mr/sdc_checks_3.gifhttp://www.shopping.com/xMR-store_sears_4189479~MRD-485615~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS00353197000Nikon® D90 12.3MP Digital SLR with 18-105mm LensThe Nikon D90 will make you rethink what a digital SLR camera can achieve.7185Nikonhttp://di101.shopping.com/images/di/33/2d/56/4f53665656354a6f37486c41346b4a74616e41-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://di101.shopping.com/images/di/33/2d/56/4f53665656354a6f37486c41346b4a74616e41-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://di101.shopping.com/images/di/33/2d/56/4f53665656354a6f37486c41346b4a74616e41-220x220-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4in-stock1350.996.051350.99http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=504&BEFID=7185&aon=%5E1&MerchantID=332477&crawler_id=332477&dealId=3-VOSfVV5Jo7HlA4kJtanA%3D%3D&url=http%3A%2F%2Ftracking.searchmarketing.com%2Fgsic.asp%3Faid%3D982673361%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon%C2%AE+D90+12.3MP+Digital+SLR+with+18-105mm+Lens&dlprc=1350.99&crn=&istrsmrc=0&isathrsl=0&AR=5&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=70621646&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=5&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=0&code=&acode=496&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=RadioShackhttp://img.shopping.com/cctool/merch_logos/332477.gif242.25http://img.shopping.com/sc/mr/sdc_checks_25.gifhttp://www.shopping.com/xMR-store_radioshack_9689~MRD-332477~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS11148905Nikon D90 Kit 12.3-megapixel Digital SLR with 18-105mm VR LensPhotographers, take your passion further!Now is the time for new creativity, and to rethink what a digital SLR camera can achieve. It's time for the D90, a camera with everything you would expect from Nikon's next-generation D-SLRs, and some unexpected surprises, as well. The stunning image quality is inherited from the D300, Nikon's DX-format flagship. The D90 also has Nikon's unmatched ergonomics and high performance, and now takes high-quality movies with beautifully cinematic results. The world of photography has changed, and with the D90 in your hands, it's time to make your own rules.AF-S DX NIKKOR 18-105mm f/3.5-5.6G ED VR LensWide-ratio 5.8x zoom Compact, versatile and ideal for a broad range of shooting situations, ranging from interiors and landscapes to beautiful portraits� a perfect everyday zoom. Nikon VR (Vibration Reduction) image stabilization Vibration Reduction is engineered specifically for each VR NIKKOR lens and enables handheld shooting at up to 3 shutter speeds slower than would7185Nikonhttp://di110.shopping.com/images/di/6b/51/6e/4236725334416a4e3564783568325f36333167-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di110.shopping.com/images/di/6b/51/6e/4236725334416a4e3564783568325f36333167-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di110.shopping.com/images/di/6b/51/6e/4236725334416a4e3564783568325f36333167-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di110.shopping.com/images/di/6b/51/6e/4236725334416a4e3564783568325f36333167-300x232-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5in-stockShipping Included!1050.000.001199.00http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=135&BEFID=7185&aon=%5E1&MerchantID=313162&crawler_id=313162&dealId=kQnB6rS4AjN5dx5h2_631g%3D%3D&url=http%3A%2F%2Fonecall.rdr.channelintelligence.com%2Fgo.asp%3FfVhzOGNRAAQIASNiE1pZSxNoWHFwLx8GTAICa2ZeH1sPXTZLNzRpAh1HR0BxPQEGCBJNMhFHUElsFCFCVkVTTHAcBggEHQ4aHXNpGERGH3RQODsbAgdechJtbBt8fx8JAwhtZFAzJj1oGgIWCxRlNyFOUV9UUGIxBgo0T0IyTSYqJ0RWHw4QPCIBAAQXRGMDICg6TllZVBhh%26nAID%3D13736960&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+D90+Kit+12.3-megapixel+Digital+SLR+with+18-105mm+VR+Lens&dlprc=1050.0&crn=&istrsmrc=1&isathrsl=0&AR=6&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=70621646&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=6&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=1&FS=1&code=&acode=143&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=OneCallhttp://img.shopping.com/cctool/merch_logos/313162.gif1.800.398.07661804.44http://img.shopping.com/sc/mr/sdc_checks_45.gifhttp://www.shopping.com/xMR-store_onecall_9689~MRD-313162~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS92826Price rangehttp://www.shopping.com/digital-cameras/nikon/products?oq=nikon&linkin_id=7000610$24 - $4012http://www.shopping.com/digital-cameras/nikon/products?minPrice=24&maxPrice=4012&linkin_id=7000610$4012 - $7999http://www.shopping.com/digital-cameras/nikon/products?minPrice=4012&maxPrice=7999&linkin_id=7000610Brandhttp://www.shopping.com/digital-cameras/nikon/products~all-9688-brand~MS-1?oq=nikon&linkin_id=7000610Nikonhttp://www.shopping.com/digital-cameras/nikon+brand-nikon/products~linkin_id-7000610Cranehttp://www.shopping.com/digital-cameras/nikon+9688-brand-crane/products~linkin_id-7000610Ikelitehttp://www.shopping.com/digital-cameras/nikon+ikelite/products~linkin_id-7000610Bowerhttp://www.shopping.com/digital-cameras/nikon+bower/products~linkin_id-7000610FUJIFILMhttp://www.shopping.com/digital-cameras/nikon+brand-fuji/products~linkin_id-7000610Storehttp://www.shopping.com/digital-cameras/nikon/products~all-store~MS-1?oq=nikon&linkin_id=7000610Amazon Marketplacehttp://www.shopping.com/digital-cameras/nikon+store-amazon-marketplace-9689/products~linkin_id-7000610Amazonhttp://www.shopping.com/digital-cameras/nikon+store-amazon/products~linkin_id-7000610Adoramahttp://www.shopping.com/digital-cameras/nikon+store-adorama/products~linkin_id-7000610J&R Music and Computer Worldhttp://www.shopping.com/digital-cameras/nikon+store-j-r-music-and-computer-world/products~linkin_id-7000610RytherCamera.comhttp://www.shopping.com/digital-cameras/nikon+store-rythercamera-com/products~linkin_id-7000610Resolutionhttp://www.shopping.com/digital-cameras/nikon/products~all-21885-resolution~MS-1?oq=nikon&linkin_id=7000610Under 4 Megapixelhttp://www.shopping.com/digital-cameras/nikon+under-4-megapixel/products~linkin_id-7000610At least 5 Megapixelhttp://www.shopping.com/digital-cameras/nikon+5-megapixel-digital-cameras/products~linkin_id-7000610At least 6 Megapixelhttp://www.shopping.com/digital-cameras/nikon+6-megapixel-digital-cameras/products~linkin_id-7000610At least 7 Megapixelhttp://www.shopping.com/digital-cameras/nikon+7-megapixel-digital-cameras/products~linkin_id-7000610At least 8 Megapixelhttp://www.shopping.com/digital-cameras/nikon+8-megapixel-digital-cameras/products~linkin_id-7000610Featureshttp://www.shopping.com/digital-cameras/nikon/products~all-32804-features~MS-1?oq=nikon&linkin_id=7000610Shockproofhttp://www.shopping.com/digital-cameras/nikon+32804-features-shockproof/products~linkin_id-7000610Waterproofhttp://www.shopping.com/digital-cameras/nikon+32804-features-waterproof/products~linkin_id-7000610Freezeproofhttp://www.shopping.com/digital-cameras/nikon+32804-features-freezeproof/products~linkin_id-7000610Dust proofhttp://www.shopping.com/digital-cameras/nikon+32804-features-dust-proof/products~linkin_id-7000610Image Stabilizationhttp://www.shopping.com/digital-cameras/nikon+32804-features-image-stabilization/products~linkin_id-7000610hybriddigital camerag1sonycameracanonnikonkodak digital camerakodaksony cybershotkodak easyshare digital cameranikon coolpixolympuspink digital cameracanon powershot \ No newline at end of file diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/examples/strict.dtd b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/examples/strict.dtd new file mode 100644 index 00000000..b2745594 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/examples/strict.dtd @@ -0,0 +1,870 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +%HTMLlat1; + + +%HTMLsymbol; + + +%HTMLspecial; + + + + + + + + + + + + + +]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/examples/test.html b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/examples/test.html new file mode 100644 index 00000000..61f8f1ab --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/examples/test.html @@ -0,0 +1,15 @@ + + + + + testing the parser + + + +

    hello + + + + diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/examples/test.xml b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/examples/test.xml new file mode 100644 index 00000000..801292d7 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/examples/test.xml @@ -0,0 +1,1254 @@ + + +]> + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + \ No newline at end of file diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/lib/sax.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/lib/sax.js new file mode 100644 index 00000000..fbcd3dcd --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/lib/sax.js @@ -0,0 +1,1430 @@ +// wrapper for non-node envs +;(function (sax) { + +sax.parser = function (strict, opt) { return new SAXParser(strict, opt) } +sax.SAXParser = SAXParser +sax.SAXStream = SAXStream +sax.createStream = createStream + +// When we pass the MAX_BUFFER_LENGTH position, start checking for buffer overruns. +// When we check, schedule the next check for MAX_BUFFER_LENGTH - (max(buffer lengths)), +// since that's the earliest that a buffer overrun could occur. This way, checks are +// as rare as required, but as often as necessary to ensure never crossing this bound. +// Furthermore, buffers are only tested at most once per write(), so passing a very +// large string into write() might have undesirable effects, but this is manageable by +// the caller, so it is assumed to be safe. Thus, a call to write() may, in the extreme +// edge case, result in creating at most one complete copy of the string passed in. +// Set to Infinity to have unlimited buffers. +sax.MAX_BUFFER_LENGTH = 64 * 1024 + +var buffers = [ + "comment", "sgmlDecl", "textNode", "tagName", "doctype", + "procInstName", "procInstBody", "entity", "attribName", + "attribValue", "cdata", "script" +] + +sax.EVENTS = // for discoverability. + [ "text" + , "processinginstruction" + , "sgmldeclaration" + , "doctype" + , "comment" + , "attribute" + , "opentag" + , "closetag" + , "opencdata" + , "cdata" + , "closecdata" + , "error" + , "end" + , "ready" + , "script" + , "opennamespace" + , "closenamespace" + ] + +function SAXParser (strict, opt) { + if (!(this instanceof SAXParser)) return new SAXParser(strict, opt) + + var parser = this + clearBuffers(parser) + parser.q = parser.c = "" + parser.bufferCheckPosition = sax.MAX_BUFFER_LENGTH + parser.opt = opt || {} + parser.opt.lowercase = parser.opt.lowercase || parser.opt.lowercasetags + parser.looseCase = parser.opt.lowercase ? "toLowerCase" : "toUpperCase" + parser.tags = [] + parser.closed = parser.closedRoot = parser.sawRoot = false + parser.tag = parser.error = null + parser.strict = !!strict + parser.noscript = !!(strict || parser.opt.noscript) + parser.state = S.BEGIN + parser.strictEntities = parser.opt.strictEntities + parser.ENTITIES = parser.strictEntities ? Object.create(sax.XML_ENTITIES) : Object.create(sax.ENTITIES) + parser.attribList = [] + + // namespaces form a prototype chain. + // it always points at the current tag, + // which protos to its parent tag. + if (parser.opt.xmlns) parser.ns = Object.create(rootNS) + + // mostly just for error reporting + parser.trackPosition = parser.opt.position !== false + if (parser.trackPosition) { + parser.position = parser.line = parser.column = 0 + } + emit(parser, "onready") +} + +if (!Object.create) Object.create = function (o) { + function f () { this.__proto__ = o } + f.prototype = o + return new f +} + +if (!Object.getPrototypeOf) Object.getPrototypeOf = function (o) { + return o.__proto__ +} + +if (!Object.keys) Object.keys = function (o) { + var a = [] + for (var i in o) if (o.hasOwnProperty(i)) a.push(i) + return a +} + +function checkBufferLength (parser) { + var maxAllowed = Math.max(sax.MAX_BUFFER_LENGTH, 10) + , maxActual = 0 + for (var i = 0, l = buffers.length; i < l; i ++) { + var len = parser[buffers[i]].length + if (len > maxAllowed) { + // Text/cdata nodes can get big, and since they're buffered, + // we can get here under normal conditions. + // Avoid issues by emitting the text node now, + // so at least it won't get any bigger. + switch (buffers[i]) { + case "textNode": + closeText(parser) + break + + case "cdata": + emitNode(parser, "oncdata", parser.cdata) + parser.cdata = "" + break + + case "script": + emitNode(parser, "onscript", parser.script) + parser.script = "" + break + + default: + error(parser, "Max buffer length exceeded: "+buffers[i]) + } + } + maxActual = Math.max(maxActual, len) + } + // schedule the next check for the earliest possible buffer overrun. + parser.bufferCheckPosition = (sax.MAX_BUFFER_LENGTH - maxActual) + + parser.position +} + +function clearBuffers (parser) { + for (var i = 0, l = buffers.length; i < l; i ++) { + parser[buffers[i]] = "" + } +} + +function flushBuffers (parser) { + closeText(parser) + if (parser.cdata !== "") { + emitNode(parser, "oncdata", parser.cdata) + parser.cdata = "" + } + if (parser.script !== "") { + emitNode(parser, "onscript", parser.script) + parser.script = "" + } +} + +SAXParser.prototype = + { end: function () { end(this) } + , write: write + , resume: function () { this.error = null; return this } + , close: function () { return this.write(null) } + , flush: function () { flushBuffers(this) } + } + +try { + var Stream = require("stream").Stream +} catch (ex) { + var Stream = function () {} +} + + +var streamWraps = sax.EVENTS.filter(function (ev) { + return ev !== "error" && ev !== "end" +}) + +function createStream (strict, opt) { + return new SAXStream(strict, opt) +} + +function SAXStream (strict, opt) { + if (!(this instanceof SAXStream)) return new SAXStream(strict, opt) + + Stream.apply(this) + + this._parser = new SAXParser(strict, opt) + this.writable = true + this.readable = true + + + var me = this + + this._parser.onend = function () { + me.emit("end") + } + + this._parser.onerror = function (er) { + me.emit("error", er) + + // if didn't throw, then means error was handled. + // go ahead and clear error, so we can write again. + me._parser.error = null + } + + this._decoder = null; + + streamWraps.forEach(function (ev) { + Object.defineProperty(me, "on" + ev, { + get: function () { return me._parser["on" + ev] }, + set: function (h) { + if (!h) { + me.removeAllListeners(ev) + return me._parser["on"+ev] = h + } + me.on(ev, h) + }, + enumerable: true, + configurable: false + }) + }) +} + +SAXStream.prototype = Object.create(Stream.prototype, + { constructor: { value: SAXStream } }) + +SAXStream.prototype.write = function (data) { + if (typeof Buffer === 'function' && + typeof Buffer.isBuffer === 'function' && + Buffer.isBuffer(data)) { + if (!this._decoder) { + var SD = require('string_decoder').StringDecoder + this._decoder = new SD('utf8') + } + data = this._decoder.write(data); + } + + this._parser.write(data.toString()) + this.emit("data", data) + return true +} + +SAXStream.prototype.end = function (chunk) { + if (chunk && chunk.length) this.write(chunk) + this._parser.end() + return true +} + +SAXStream.prototype.on = function (ev, handler) { + var me = this + if (!me._parser["on"+ev] && streamWraps.indexOf(ev) !== -1) { + me._parser["on"+ev] = function () { + var args = arguments.length === 1 ? [arguments[0]] + : Array.apply(null, arguments) + args.splice(0, 0, ev) + me.emit.apply(me, args) + } + } + + return Stream.prototype.on.call(me, ev, handler) +} + + + +// character classes and tokens +var whitespace = "\r\n\t " + // this really needs to be replaced with character classes. + // XML allows all manner of ridiculous numbers and digits. + , number = "0124356789" + , letter = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" + // (Letter | "_" | ":") + , quote = "'\"" + , entity = number+letter+"#" + , attribEnd = whitespace + ">" + , CDATA = "[CDATA[" + , DOCTYPE = "DOCTYPE" + , XML_NAMESPACE = "http://www.w3.org/XML/1998/namespace" + , XMLNS_NAMESPACE = "http://www.w3.org/2000/xmlns/" + , rootNS = { xml: XML_NAMESPACE, xmlns: XMLNS_NAMESPACE } + +// turn all the string character sets into character class objects. +whitespace = charClass(whitespace) +number = charClass(number) +letter = charClass(letter) + +// http://www.w3.org/TR/REC-xml/#NT-NameStartChar +// This implementation works on strings, a single character at a time +// as such, it cannot ever support astral-plane characters (10000-EFFFF) +// without a significant breaking change to either this parser, or the +// JavaScript language. Implementation of an emoji-capable xml parser +// is left as an exercise for the reader. +var nameStart = /[:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/ + +var nameBody = /[:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u00B7\u0300-\u036F\u203F-\u2040\.\d-]/ + +quote = charClass(quote) +entity = charClass(entity) +attribEnd = charClass(attribEnd) + +function charClass (str) { + return str.split("").reduce(function (s, c) { + s[c] = true + return s + }, {}) +} + +function isRegExp (c) { + return Object.prototype.toString.call(c) === '[object RegExp]' +} + +function is (charclass, c) { + return isRegExp(charclass) ? !!c.match(charclass) : charclass[c] +} + +function not (charclass, c) { + return !is(charclass, c) +} + +var S = 0 +sax.STATE = +{ BEGIN : S++ // leading byte order mark or whitespace +, BEGIN_WHITESPACE : S++ // leading whitespace +, TEXT : S++ // general stuff +, TEXT_ENTITY : S++ // & and such. +, OPEN_WAKA : S++ // < +, SGML_DECL : S++ // +, SCRIPT : S++ // " + , expect : + [ [ "opentag", { name: "xml", attributes: {}, isSelfClosing: false } ] + , [ "opentag", { name: "script", attributes: {}, isSelfClosing: false } ] + , [ "text", "hello world" ] + , [ "closetag", "script" ] + , [ "closetag", "xml" ] + ] + , strict : false + , opt : { lowercasetags: true, noscript: true } + } + ) + +require(__dirname).test + ( { xml : "" + , expect : + [ [ "opentag", { name: "xml", attributes: {}, isSelfClosing: false } ] + , [ "opentag", { name: "script", attributes: {}, isSelfClosing: false } ] + , [ "opencdata", undefined ] + , [ "cdata", "hello world" ] + , [ "closecdata", undefined ] + , [ "closetag", "script" ] + , [ "closetag", "xml" ] + ] + , strict : false + , opt : { lowercasetags: true, noscript: true } + } + ) + diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/issue-84.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/issue-84.js new file mode 100644 index 00000000..0e7ee699 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/issue-84.js @@ -0,0 +1,13 @@ +// https://github.com/isaacs/sax-js/issues/49 +require(__dirname).test + ( { xml : "body" + , expect : + [ [ "processinginstruction", { name: "has", body: "unbalanced \"quotes" } ], + [ "opentag", { name: "xml", attributes: {}, isSelfClosing: false } ] + , [ "text", "body" ] + , [ "closetag", "xml" ] + ] + , strict : false + , opt : { lowercasetags: true, noscript: true } + } + ) diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/issue-86.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/issue-86.js new file mode 100644 index 00000000..c776ad86 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/issue-86.js @@ -0,0 +1,30 @@ +require(__dirname).test + ( { xml : "abcdeabcdeabcdefgh'], + [ ['opentag', { position: 5, startTagPosition: 1 }] + , ['text', { position: 19, startTagPosition: 14 }] + , ['closetag', { position: 19, startTagPosition: 14 }] + ]); + +testPosition(['

    abcde','fgh
    '], + [ ['opentag', { position: 5, startTagPosition: 1 }] + , ['text', { position: 19, startTagPosition: 14 }] + , ['closetag', { position: 19, startTagPosition: 14 }] + ]); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/script-close-better.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/script-close-better.js new file mode 100644 index 00000000..f4887b9a --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/script-close-better.js @@ -0,0 +1,12 @@ +require(__dirname).test({ + xml : "", + expect : [ + ["opentag", {"name": "HTML","attributes": {}, isSelfClosing: false}], + ["opentag", {"name": "HEAD","attributes": {}, isSelfClosing: false}], + ["opentag", {"name": "SCRIPT","attributes": {}, isSelfClosing: false}], + ["script", "'
    foo
    ", + expect : [ + ["opentag", {"name": "HTML","attributes": {}, "isSelfClosing": false}], + ["opentag", {"name": "HEAD","attributes": {}, "isSelfClosing": false}], + ["opentag", {"name": "SCRIPT","attributes": {}, "isSelfClosing": false}], + ["script", "if (1 < 0) { console.log('elo there'); }"], + ["closetag", "SCRIPT"], + ["closetag", "HEAD"], + ["closetag", "HTML"] + ] +}); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/self-closing-child-strict.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/self-closing-child-strict.js new file mode 100644 index 00000000..3d6e9852 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/self-closing-child-strict.js @@ -0,0 +1,44 @@ + +require(__dirname).test({ + xml : + ""+ + "" + + "" + + "" + + "" + + "=(|)" + + "" + + "", + expect : [ + ["opentag", { + "name": "root", + "attributes": {}, + "isSelfClosing": false + }], + ["opentag", { + "name": "child", + "attributes": {}, + "isSelfClosing": false + }], + ["opentag", { + "name": "haha", + "attributes": {}, + "isSelfClosing": true + }], + ["closetag", "haha"], + ["closetag", "child"], + ["opentag", { + "name": "monkey", + "attributes": {}, + "isSelfClosing": false + }], + ["text", "=(|)"], + ["closetag", "monkey"], + ["closetag", "root"], + ["end"], + ["ready"] + ], + strict : true, + opt : {} +}); + diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/self-closing-child.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/self-closing-child.js new file mode 100644 index 00000000..f31c3664 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/self-closing-child.js @@ -0,0 +1,44 @@ + +require(__dirname).test({ + xml : + ""+ + "" + + "" + + "" + + "" + + "=(|)" + + "" + + "", + expect : [ + ["opentag", { + "name": "ROOT", + "attributes": {}, + "isSelfClosing": false + }], + ["opentag", { + "name": "CHILD", + "attributes": {}, + "isSelfClosing": false + }], + ["opentag", { + "name": "HAHA", + "attributes": {}, + "isSelfClosing": true + }], + ["closetag", "HAHA"], + ["closetag", "CHILD"], + ["opentag", { + "name": "MONKEY", + "attributes": {}, + "isSelfClosing": false + }], + ["text", "=(|)"], + ["closetag", "MONKEY"], + ["closetag", "ROOT"], + ["end"], + ["ready"] + ], + strict : false, + opt : {} +}); + diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/self-closing-tag.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/self-closing-tag.js new file mode 100644 index 00000000..d1d8b7c8 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/self-closing-tag.js @@ -0,0 +1,25 @@ + +require(__dirname).test({ + xml : + " "+ + " "+ + " "+ + " "+ + "=(|) "+ + ""+ + " ", + expect : [ + ["opentag", {name:"ROOT", attributes:{}, isSelfClosing: false}], + ["opentag", {name:"HAHA", attributes:{}, isSelfClosing: true}], + ["closetag", "HAHA"], + ["opentag", {name:"HAHA", attributes:{}, isSelfClosing: true}], + ["closetag", "HAHA"], + // ["opentag", {name:"HAHA", attributes:{}}], + // ["closetag", "HAHA"], + ["opentag", {name:"MONKEY", attributes:{}, isSelfClosing: false}], + ["text", "=(|)"], + ["closetag", "MONKEY"], + ["closetag", "ROOT"] + ], + opt : { trim : true } +}); \ No newline at end of file diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/stand-alone-comment.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/stand-alone-comment.js new file mode 100644 index 00000000..81ff761b --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/stand-alone-comment.js @@ -0,0 +1,11 @@ +// https://github.com/isaacs/sax-js/issues/124 +require(__dirname).test + ( { xml : "" + + , expect : + [ [ "comment", " stand alone comment " ] ] + , strict : true + , opt : {} + } + ) + diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/stray-ending.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/stray-ending.js new file mode 100644 index 00000000..bec467b2 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/stray-ending.js @@ -0,0 +1,17 @@ +// stray ending tags should just be ignored in non-strict mode. +// https://github.com/isaacs/sax-js/issues/32 +require(__dirname).test + ( { xml : + "" + , expect : + [ [ "opentag", { name: "A", attributes: {}, isSelfClosing: false } ] + , [ "opentag", { name: "B", attributes: {}, isSelfClosing: false } ] + , [ "text", "" ] + , [ "closetag", "B" ] + , [ "closetag", "A" ] + ] + , strict : false + , opt : {} + } + ) + diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/trailing-attribute-no-value.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/trailing-attribute-no-value.js new file mode 100644 index 00000000..222837f8 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/trailing-attribute-no-value.js @@ -0,0 +1,10 @@ + +require(__dirname).test({ + xml : + "", + expect : [ + ["attribute", {name:"ATTRIB", value:"attrib"}], + ["opentag", {name:"ROOT", attributes:{"ATTRIB":"attrib"}, isSelfClosing: false}] + ], + opt : { trim : true } +}); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/trailing-non-whitespace.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/trailing-non-whitespace.js new file mode 100644 index 00000000..619578b1 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/trailing-non-whitespace.js @@ -0,0 +1,18 @@ + +require(__dirname).test({ + xml : "Welcome, to monkey land", + expect : [ + ["opentag", { + "name": "SPAN", + "attributes": {}, + isSelfClosing: false + }], + ["text", "Welcome,"], + ["closetag", "SPAN"], + ["text", " to monkey land"], + ["end"], + ["ready"] + ], + strict : false, + opt : {} +}); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/unclosed-root.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/unclosed-root.js new file mode 100644 index 00000000..f4eeac61 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/unclosed-root.js @@ -0,0 +1,11 @@ +require(__dirname).test + ( { xml : "" + + , expect : + [ [ "opentag", { name: "root", attributes: {}, isSelfClosing: false } ] + , [ "error", "Unclosed root tag\nLine: 0\nColumn: 6\nChar: " ] + ] + , strict : true + , opt : {} + } + ) diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/unquoted.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/unquoted.js new file mode 100644 index 00000000..b3a9a812 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/unquoted.js @@ -0,0 +1,18 @@ +// unquoted attributes should be ok in non-strict mode +// https://github.com/isaacs/sax-js/issues/31 +require(__dirname).test + ( { xml : + "" + , expect : + [ [ "attribute", { name: "CLASS", value: "test" } ] + , [ "attribute", { name: "HELLO", value: "world" } ] + , [ "opentag", { name: "SPAN", + attributes: { CLASS: "test", HELLO: "world" }, + isSelfClosing: false } ] + , [ "closetag", "SPAN" ] + ] + , strict : false + , opt : {} + } + ) + diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/utf8-split.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/utf8-split.js new file mode 100644 index 00000000..d5318af7 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/utf8-split.js @@ -0,0 +1,34 @@ +var assert = require('assert') +var saxStream = require('../lib/sax').createStream() + +var b = new Buffer('误') + +saxStream.on('text', function(text) { + assert.equal(text, b.toString()) +}) + +saxStream.write(new Buffer('')) +saxStream.write(b.slice(0, 1)) +saxStream.write(b.slice(1)) +saxStream.write(new Buffer('')) +saxStream.write(b.slice(0, 2)) +saxStream.write(b.slice(2)) +saxStream.write(new Buffer('')) +saxStream.write(b) +saxStream.write(new Buffer('')) +saxStream.write(Buffer.concat([new Buffer(''), b.slice(0, 1)])) +saxStream.end(Buffer.concat([b.slice(1), new Buffer('')])) + +var saxStream2 = require('../lib/sax').createStream() + +saxStream2.on('text', function(text) { + assert.equal(text, '�') +}); + +saxStream2.write(new Buffer('')); +saxStream2.write(new Buffer('')); +saxStream2.write(new Buffer([0xC0])); +saxStream2.write(new Buffer('')); +saxStream2.write(Buffer.concat([new Buffer(''), b.slice(0,1)])); +saxStream2.write(new Buffer('')); +saxStream2.end(); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/xml_entities.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/xml_entities.js new file mode 100644 index 00000000..d72291fd --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/xml_entities.js @@ -0,0 +1,11 @@ +require(__dirname).test({ + opt: { strictEntities: true }, + xml: '⌋ ' + + '♠ © → & ' + + '< < < < < > ℜ ℘ €', + expect: [ + ['opentag', {'name':'R', attributes:{}, isSelfClosing: false}], + ['text', '⌋ ♠ © → & < < < < < > ℜ ℘ €'], + ['closetag', 'R'] + ] +}); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/xmlns-as-tag-name.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/xmlns-as-tag-name.js new file mode 100644 index 00000000..99142ca6 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/xmlns-as-tag-name.js @@ -0,0 +1,15 @@ + +require(__dirname).test + ( { xml : + "" + , expect : + [ [ "opentag", { name: "xmlns", uri: "", prefix: "", local: "xmlns", + attributes: {}, ns: {}, + isSelfClosing: true} + ], + ["closetag", "xmlns"] + ] + , strict : true + , opt : { xmlns: true } + } + ); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/xmlns-issue-41.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/xmlns-issue-41.js new file mode 100644 index 00000000..17ab45a0 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/xmlns-issue-41.js @@ -0,0 +1,68 @@ +var t = require(__dirname) + + , xmls = // should be the same both ways. + [ "" + , "" ] + + , ex1 = + [ [ "opennamespace" + , { prefix: "a" + , uri: "http://ATTRIBUTE" + } + ] + , [ "attribute" + , { name: "xmlns:a" + , value: "http://ATTRIBUTE" + , prefix: "xmlns" + , local: "a" + , uri: "http://www.w3.org/2000/xmlns/" + } + ] + , [ "attribute" + , { name: "a:attr" + , local: "attr" + , prefix: "a" + , uri: "http://ATTRIBUTE" + , value: "value" + } + ] + , [ "opentag" + , { name: "parent" + , uri: "" + , prefix: "" + , local: "parent" + , attributes: + { "a:attr": + { name: "a:attr" + , local: "attr" + , prefix: "a" + , uri: "http://ATTRIBUTE" + , value: "value" + } + , "xmlns:a": + { name: "xmlns:a" + , local: "a" + , prefix: "xmlns" + , uri: "http://www.w3.org/2000/xmlns/" + , value: "http://ATTRIBUTE" + } + } + , ns: {"a": "http://ATTRIBUTE"} + , isSelfClosing: true + } + ] + , ["closetag", "parent"] + , ["closenamespace", { prefix: "a", uri: "http://ATTRIBUTE" }] + ] + + // swap the order of elements 2 and 1 + , ex2 = [ex1[0], ex1[2], ex1[1]].concat(ex1.slice(3)) + , expected = [ex1, ex2] + +xmls.forEach(function (x, i) { + t.test({ xml: x + , expect: expected[i] + , strict: true + , opt: { xmlns: true } + }) +}) diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/xmlns-rebinding.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/xmlns-rebinding.js new file mode 100644 index 00000000..07e04255 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/xmlns-rebinding.js @@ -0,0 +1,63 @@ + +require(__dirname).test + ( { xml : + ""+ + ""+ + ""+ + ""+ + ""+ + "" + + , expect : + [ [ "opennamespace", { prefix: "x", uri: "x1" } ] + , [ "opennamespace", { prefix: "y", uri: "y1" } ] + , [ "attribute", { name: "xmlns:x", value: "x1", uri: "http://www.w3.org/2000/xmlns/", prefix: "xmlns", local: "x" } ] + , [ "attribute", { name: "xmlns:y", value: "y1", uri: "http://www.w3.org/2000/xmlns/", prefix: "xmlns", local: "y" } ] + , [ "attribute", { name: "x:a", value: "x1", uri: "x1", prefix: "x", local: "a" } ] + , [ "attribute", { name: "y:a", value: "y1", uri: "y1", prefix: "y", local: "a" } ] + , [ "opentag", { name: "root", uri: "", prefix: "", local: "root", + attributes: { "xmlns:x": { name: "xmlns:x", value: "x1", uri: "http://www.w3.org/2000/xmlns/", prefix: "xmlns", local: "x" } + , "xmlns:y": { name: "xmlns:y", value: "y1", uri: "http://www.w3.org/2000/xmlns/", prefix: "xmlns", local: "y" } + , "x:a": { name: "x:a", value: "x1", uri: "x1", prefix: "x", local: "a" } + , "y:a": { name: "y:a", value: "y1", uri: "y1", prefix: "y", local: "a" } }, + ns: { x: 'x1', y: 'y1' }, + isSelfClosing: false } ] + + , [ "opennamespace", { prefix: "x", uri: "x2" } ] + , [ "attribute", { name: "xmlns:x", value: "x2", uri: "http://www.w3.org/2000/xmlns/", prefix: "xmlns", local: "x" } ] + , [ "opentag", { name: "rebind", uri: "", prefix: "", local: "rebind", + attributes: { "xmlns:x": { name: "xmlns:x", value: "x2", uri: "http://www.w3.org/2000/xmlns/", prefix: "xmlns", local: "x" } }, + ns: { x: 'x2' }, + isSelfClosing: false } ] + + , [ "attribute", { name: "x:a", value: "x2", uri: "x2", prefix: "x", local: "a" } ] + , [ "attribute", { name: "y:a", value: "y1", uri: "y1", prefix: "y", local: "a" } ] + , [ "opentag", { name: "check", uri: "", prefix: "", local: "check", + attributes: { "x:a": { name: "x:a", value: "x2", uri: "x2", prefix: "x", local: "a" } + , "y:a": { name: "y:a", value: "y1", uri: "y1", prefix: "y", local: "a" } }, + ns: { x: 'x2' }, + isSelfClosing: true } ] + + , [ "closetag", "check" ] + + , [ "closetag", "rebind" ] + , [ "closenamespace", { prefix: "x", uri: "x2" } ] + + , [ "attribute", { name: "x:a", value: "x1", uri: "x1", prefix: "x", local: "a" } ] + , [ "attribute", { name: "y:a", value: "y1", uri: "y1", prefix: "y", local: "a" } ] + , [ "opentag", { name: "check", uri: "", prefix: "", local: "check", + attributes: { "x:a": { name: "x:a", value: "x1", uri: "x1", prefix: "x", local: "a" } + , "y:a": { name: "y:a", value: "y1", uri: "y1", prefix: "y", local: "a" } }, + ns: { x: 'x1', y: 'y1' }, + isSelfClosing: true } ] + , [ "closetag", "check" ] + + , [ "closetag", "root" ] + , [ "closenamespace", { prefix: "x", uri: "x1" } ] + , [ "closenamespace", { prefix: "y", uri: "y1" } ] + ] + , strict : true + , opt : { xmlns: true } + } + ) + diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/xmlns-strict.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/xmlns-strict.js new file mode 100644 index 00000000..b5e3e518 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/xmlns-strict.js @@ -0,0 +1,74 @@ + +require(__dirname).test + ( { xml : + ""+ + ""+ + ""+ + ""+ + ""+ + ""+ + ""+ + ""+ + ""+ + "" + + , expect : + [ [ "opentag", { name: "root", prefix: "", local: "root", uri: "", + attributes: {}, ns: {}, isSelfClosing: false } ] + + , [ "attribute", { name: "attr", value: "normal", prefix: "", local: "attr", uri: "" } ] + , [ "opentag", { name: "plain", prefix: "", local: "plain", uri: "", + attributes: { "attr": { name: "attr", value: "normal", uri: "", prefix: "", local: "attr", uri: "" } }, + ns: {}, isSelfClosing: true } ] + , [ "closetag", "plain" ] + + , [ "opennamespace", { prefix: "", uri: "uri:default" } ] + + , [ "attribute", { name: "xmlns", value: "uri:default", prefix: "xmlns", local: "", uri: "http://www.w3.org/2000/xmlns/" } ] + , [ "opentag", { name: "ns1", prefix: "", local: "ns1", uri: "uri:default", + attributes: { "xmlns": { name: "xmlns", value: "uri:default", prefix: "xmlns", local: "", uri: "http://www.w3.org/2000/xmlns/" } }, + ns: { "": "uri:default" }, isSelfClosing: false } ] + + , [ "attribute", { name: "attr", value: "normal", prefix: "", local: "attr", uri: "" } ] + , [ "opentag", { name: "plain", prefix: "", local: "plain", uri: "uri:default", ns: { '': 'uri:default' }, + attributes: { "attr": { name: "attr", value: "normal", prefix: "", local: "attr", uri: "" } }, + isSelfClosing: true } ] + , [ "closetag", "plain" ] + + , [ "closetag", "ns1" ] + + , [ "closenamespace", { prefix: "", uri: "uri:default" } ] + + , [ "opennamespace", { prefix: "a", uri: "uri:nsa" } ] + + , [ "attribute", { name: "xmlns:a", value: "uri:nsa", prefix: "xmlns", local: "a", uri: "http://www.w3.org/2000/xmlns/" } ] + + , [ "opentag", { name: "ns2", prefix: "", local: "ns2", uri: "", + attributes: { "xmlns:a": { name: "xmlns:a", value: "uri:nsa", prefix: "xmlns", local: "a", uri: "http://www.w3.org/2000/xmlns/" } }, + ns: { a: "uri:nsa" }, isSelfClosing: false } ] + + , [ "attribute", { name: "attr", value: "normal", prefix: "", local: "attr", uri: "" } ] + , [ "opentag", { name: "plain", prefix: "", local: "plain", uri: "", + attributes: { "attr": { name: "attr", value: "normal", prefix: "", local: "attr", uri: "" } }, + ns: { a: 'uri:nsa' }, + isSelfClosing: true } ] + , [ "closetag", "plain" ] + + , [ "attribute", { name: "a:attr", value: "namespaced", prefix: "a", local: "attr", uri: "uri:nsa" } ] + , [ "opentag", { name: "a:ns", prefix: "a", local: "ns", uri: "uri:nsa", + attributes: { "a:attr": { name: "a:attr", value: "namespaced", prefix: "a", local: "attr", uri: "uri:nsa" } }, + ns: { a: 'uri:nsa' }, + isSelfClosing: true } ] + , [ "closetag", "a:ns" ] + + , [ "closetag", "ns2" ] + + , [ "closenamespace", { prefix: "a", uri: "uri:nsa" } ] + + , [ "closetag", "root" ] + ] + , strict : true + , opt : { xmlns: true } + } + ) + diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/xmlns-unbound-element.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/xmlns-unbound-element.js new file mode 100644 index 00000000..9d031a2b --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/xmlns-unbound-element.js @@ -0,0 +1,33 @@ +require(__dirname).test( + { strict : true + , opt : { xmlns: true } + , expect : + [ [ "error", "Unbound namespace prefix: \"unbound:root\"\nLine: 0\nColumn: 15\nChar: >"] + , [ "opentag", { name: "unbound:root", uri: "unbound", prefix: "unbound", local: "root" + , attributes: {}, ns: {}, isSelfClosing: true } ] + , [ "closetag", "unbound:root" ] + ] + } +).write(""); + +require(__dirname).test( + { strict : true + , opt : { xmlns: true } + , expect : + [ [ "opennamespace", { prefix: "unbound", uri: "someuri" } ] + , [ "attribute", { name: 'xmlns:unbound', value: 'someuri' + , prefix: 'xmlns', local: 'unbound' + , uri: 'http://www.w3.org/2000/xmlns/' } ] + , [ "opentag", { name: "unbound:root", uri: "someuri", prefix: "unbound", local: "root" + , attributes: { 'xmlns:unbound': { + name: 'xmlns:unbound' + , value: 'someuri' + , prefix: 'xmlns' + , local: 'unbound' + , uri: 'http://www.w3.org/2000/xmlns/' } } + , ns: { "unbound": "someuri" }, isSelfClosing: true } ] + , [ "closetag", "unbound:root" ] + , [ "closenamespace", { prefix: 'unbound', uri: 'someuri' }] + ] + } +).write(""); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/xmlns-unbound.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/xmlns-unbound.js new file mode 100644 index 00000000..b740e261 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/xmlns-unbound.js @@ -0,0 +1,15 @@ + +require(__dirname).test( + { strict : true + , opt : { xmlns: true } + , expect : + [ ["error", "Unbound namespace prefix: \"unbound\"\nLine: 0\nColumn: 28\nChar: >"] + + , [ "attribute", { name: "unbound:attr", value: "value", uri: "unbound", prefix: "unbound", local: "attr" } ] + , [ "opentag", { name: "root", uri: "", prefix: "", local: "root", + attributes: { "unbound:attr": { name: "unbound:attr", value: "value", uri: "unbound", prefix: "unbound", local: "attr" } }, + ns: {}, isSelfClosing: true } ] + , [ "closetag", "root" ] + ] + } +).write("") diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/xmlns-xml-default-ns.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/xmlns-xml-default-ns.js new file mode 100644 index 00000000..b1984d25 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/xmlns-xml-default-ns.js @@ -0,0 +1,31 @@ +var xmlns_attr = +{ + name: "xmlns", value: "http://foo", prefix: "xmlns", + local: "", uri : "http://www.w3.org/2000/xmlns/" +}; + +var attr_attr = +{ + name: "attr", value: "bar", prefix: "", + local : "attr", uri : "" +}; + + +require(__dirname).test + ( { xml : + "" + , expect : + [ [ "opennamespace", { prefix: "", uri: "http://foo" } ] + , [ "attribute", xmlns_attr ] + , [ "attribute", attr_attr ] + , [ "opentag", { name: "elm", prefix: "", local: "elm", uri : "http://foo", + ns : { "" : "http://foo" }, + attributes: { xmlns: xmlns_attr, attr: attr_attr }, + isSelfClosing: true } ] + , [ "closetag", "elm" ] + , [ "closenamespace", { prefix: "", uri: "http://foo"} ] + ] + , strict : true + , opt : {xmlns: true} + } + ) diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/xmlns-xml-default-prefix-attribute.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/xmlns-xml-default-prefix-attribute.js new file mode 100644 index 00000000..e41f2187 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/xmlns-xml-default-prefix-attribute.js @@ -0,0 +1,36 @@ +require(__dirname).test( + { xml : "" + , expect : + [ [ "attribute" + , { name: "xml:lang" + , local: "lang" + , prefix: "xml" + , uri: "http://www.w3.org/XML/1998/namespace" + , value: "en" + } + ] + , [ "opentag" + , { name: "root" + , uri: "" + , prefix: "" + , local: "root" + , attributes: + { "xml:lang": + { name: "xml:lang" + , local: "lang" + , prefix: "xml" + , uri: "http://www.w3.org/XML/1998/namespace" + , value: "en" + } + } + , ns: {} + , isSelfClosing: true + } + ] + , ["closetag", "root"] + ] + , strict : true + , opt : { xmlns: true } + } +) + diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/xmlns-xml-default-prefix.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/xmlns-xml-default-prefix.js new file mode 100644 index 00000000..a85b4787 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/xmlns-xml-default-prefix.js @@ -0,0 +1,21 @@ +require(__dirname).test( + { xml : "" + , expect : + [ + [ "opentag" + , { name: "xml:root" + , uri: "http://www.w3.org/XML/1998/namespace" + , prefix: "xml" + , local: "root" + , attributes: {} + , ns: {} + , isSelfClosing: true + } + ] + , ["closetag", "xml:root"] + ] + , strict : true + , opt : { xmlns: true } + } +) + diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/xmlns-xml-default-redefine.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/xmlns-xml-default-redefine.js new file mode 100644 index 00000000..d35d5a0c --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/sax/test/xmlns-xml-default-redefine.js @@ -0,0 +1,41 @@ +require(__dirname).test( + { xml : "" + , expect : + [ ["error" + , "xml: prefix must be bound to http://www.w3.org/XML/1998/namespace\n" + + "Actual: ERROR\n" + + "Line: 0\nColumn: 27\nChar: '" + ] + , [ "attribute" + , { name: "xmlns:xml" + , local: "xml" + , prefix: "xmlns" + , uri: "http://www.w3.org/2000/xmlns/" + , value: "ERROR" + } + ] + , [ "opentag" + , { name: "xml:root" + , uri: "http://www.w3.org/XML/1998/namespace" + , prefix: "xml" + , local: "root" + , attributes: + { "xmlns:xml": + { name: "xmlns:xml" + , local: "xml" + , prefix: "xmlns" + , uri: "http://www.w3.org/2000/xmlns/" + , value: "ERROR" + } + } + , ns: {} + , isSelfClosing: true + } + ] + , ["closetag", "xml:root"] + ] + , strict : true + , opt : { xmlns: true } + } +) + diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/whet.extend/.npmignore b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/whet.extend/.npmignore new file mode 100644 index 00000000..5f531295 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/whet.extend/.npmignore @@ -0,0 +1,3 @@ +support +examples +*.sock diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/whet.extend/.travis.yml b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/whet.extend/.travis.yml new file mode 100644 index 00000000..de6634cf --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/whet.extend/.travis.yml @@ -0,0 +1,4 @@ +language: node_js +node_js: + - 0.6 + - 0.8 \ No newline at end of file diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/whet.extend/Cakefile b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/whet.extend/Cakefile new file mode 100644 index 00000000..2c62c155 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/whet.extend/Cakefile @@ -0,0 +1,52 @@ +fs = require 'fs' +CoffeeScript = require 'coffee-script' +{spawn, exec} = require 'child_process' + +# ANSI Terminal Colors. +enableColors = no +unless process.platform is 'win32' + enableColors = not process.env.NODE_DISABLE_COLORS + +bold = red = green = reset = '' +if enableColors + bold = '\x1B[0;1m' + red = '\x1B[0;31m' + green = '\x1B[0;32m' + reset = '\x1B[0m' + + +### +Just proc extender +### +proc_extender = (cb, proc) => + proc.stderr.on 'data', (buffer) -> console.log "#{buffer}" + # proc.stdout.on 'data', (buffer) -> console.log "#{buffer}".info + proc.on 'exit', (status) -> + process.exit(1) if status != 0 + cb() if typeof cb is 'function' + null + +# Run a CoffeeScript through our node/coffee interpreter. +run_coffee = (args, cb) => + proc_extender cb, spawn 'node', ['./node_modules/.bin/coffee'].concat(args) + +# Run a mocha tests +run_mocha = (args, cb) => + proc_extender cb, spawn 'node', ['./node_modules/.bin/mocha'].concat(args) + +# Log a message with a color. +log = (message, color, explanation) -> + console.log color + message + reset + ' ' + (explanation or '') + + +task 'build', 'build module from source', build = (cb) -> + files = fs.readdirSync 'src' + files = ('src/' + file for file in files when file.match(/\.coffee$/)) + run_coffee ['-c', '-o', 'lib/'].concat(files), cb + log ' -> build done', green + +task 'test', 'test builded module', -> + build -> + test_file = './test/extend_test.coffee' + run_mocha test_file, -> log ' -> all tests passed :)', green + diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/whet.extend/History.md b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/whet.extend/History.md new file mode 100644 index 00000000..51b6b5a2 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/whet.extend/History.md @@ -0,0 +1,28 @@ +## 0.9.9 / 2013-01-28 01:20 AM + + - Re-write tests to Mocha + - Remove 'null' and 'undefined' filter + - Fix Cakefile + +## 0.9.7 / 2012-06-21 02:54 PM + + - Rename extend.{ext} -> whet.extend.{ext} + +## 0.9.5 / 2012-05-24 07:56 PM + + - Add travis-ci tests + - fix index.js + + +## 0.9.4 / 2012-05-24 03:08 PM + + - Move .coffee to ./scr, add compiled .js version to ./lib + - Move CoffeeScript to develop dependencies + - Add Cakefile + - Doc improved + - Small fix + + +## 0.9.1 / 2012-05-17 11:05 AM + + - Initial release \ No newline at end of file diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/whet.extend/LICENSE b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/whet.extend/LICENSE new file mode 100644 index 00000000..eec600b8 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/whet.extend/LICENSE @@ -0,0 +1,22 @@ +Copyright (c) 2012 Dmitrii Karpich + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/whet.extend/Readme.md b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/whet.extend/Readme.md new file mode 100644 index 00000000..723158d0 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/whet.extend/Readme.md @@ -0,0 +1,21 @@ +[![Build Status](https://secure.travis-ci.org/Meettya/whet.extend.png)](http://travis-ci.org/Meettya/whet.extend) + +# whet.extend + +A sharped version of node.extend as port of jQuery.extend that **actually works** on node.js + + + +## Description + +Its drop-in replacement of [node.extend](https://github.com/dreamerslab/node.extend), re-factored and re-written with CoffeeScript + +I just need some more CS practice AND its fun :) + + +## Usage + +Checkout the doc from [jQuery](http://api.jquery.com/jQuery.extend/) + + + diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/whet.extend/index.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/whet.extend/index.js new file mode 100644 index 00000000..22850e05 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/whet.extend/index.js @@ -0,0 +1 @@ +module.exports = require( './lib/whet.extend' ); \ No newline at end of file diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/whet.extend/lib/whet.extend.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/whet.extend/lib/whet.extend.js new file mode 100644 index 00000000..784d85be --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/whet.extend/lib/whet.extend.js @@ -0,0 +1,104 @@ +// Generated by CoffeeScript 1.3.3 + +/* + * whet.extend v0.9.7 + * Standalone port of jQuery.extend that actually works on node.js + * https://github.com/Meettya/whet.extend + * + * Copyright 2012, Dmitrii Karpich + * Released under the MIT License +*/ + + +(function() { + var extend, _findValue, _isClass, _isOwnProp, _isPlainObj, _isPrimitiveType, _isTypeOf, _prepareClone, + __slice = [].slice; + + module.exports = extend = function() { + var args, copy, deep, name, options, target, _i, _len, _ref; + deep = arguments[0], target = arguments[1], args = 3 <= arguments.length ? __slice.call(arguments, 2) : []; + if (!_isClass(deep, 'Boolean')) { + args.unshift(target); + _ref = [deep || {}, false], target = _ref[0], deep = _ref[1]; + } + if (_isPrimitiveType(target)) { + target = {}; + } + for (_i = 0, _len = args.length; _i < _len; _i++) { + options = args[_i]; + if (options != null) { + for (name in options) { + copy = options[name]; + target[name] = _findValue(deep, copy, target[name]); + } + } + } + return target; + }; + + /* + Internal methods from now + */ + + + _isClass = function(obj, str) { + return ("[object " + str + "]") === Object.prototype.toString.call(obj); + }; + + _isOwnProp = function(obj, prop) { + return Object.prototype.hasOwnProperty.call(obj, prop); + }; + + _isTypeOf = function(obj, str) { + return str === typeof obj; + }; + + _isPlainObj = function(obj) { + var key; + if (!obj) { + return false; + } + if (obj.nodeType || obj.setInterval || !_isClass(obj, 'Object')) { + return false; + } + if (obj.constructor && !_isOwnProp(obj, 'constructor') && !_isOwnProp(obj.constructor.prototype, 'isPrototypeOf')) { + return false; + } + for (key in obj) { + key; + + } + return key === void 0 || _isOwnProp(obj, key); + }; + + _isPrimitiveType = function(obj) { + return !(_isTypeOf(obj, 'object') || _isTypeOf(obj, 'function')); + }; + + _prepareClone = function(copy, src) { + if (_isClass(copy, 'Array')) { + if (_isClass(src, 'Array')) { + return src; + } else { + return []; + } + } else { + if (_isPlainObj(src)) { + return src; + } else { + return {}; + } + } + }; + + _findValue = function(deep, copy, src) { + var clone; + if (deep && (_isClass(copy, 'Array') || _isPlainObj(copy))) { + clone = _prepareClone(copy, src); + return extend(deep, clone, copy); + } else { + return copy; + } + }; + +}).call(this); diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/whet.extend/package.json b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/whet.extend/package.json new file mode 100644 index 00000000..32b9d529 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/whet.extend/package.json @@ -0,0 +1,61 @@ +{ + "name": "whet.extend", + "version": "0.9.9", + "description": "A sharped version of port of jQuery.extend that actually works on node.js", + "keywords": [ + "extend", + "jQuery", + "jQuery extend", + "clone", + "copy", + "inherit" + ], + "author": { + "name": "Dmitrii Karpich", + "email": "meettya@gmail.com" + }, + "devDependencies": { + "should": "0.5.1", + "coffee-script": ">=1.3.3", + "chai": "~1.4.2", + "mocha": "~1.8.1" + }, + "scripts": { + "test": "cake test" + }, + "repository": { + "type": "git", + "url": "https://github.com/Meettya/whet.extend.git" + }, + "main": "index.js", + "engines": { + "node": ">=0.6.0" + }, + "license": "MIT", + "readme": "[![Build Status](https://secure.travis-ci.org/Meettya/whet.extend.png)](http://travis-ci.org/Meettya/whet.extend)\n\n# whet.extend\n\nA sharped version of node.extend as port of jQuery.extend that **actually works** on node.js\n\n\n\n## Description\n\nIts drop-in replacement of [node.extend](https://github.com/dreamerslab/node.extend), re-factored and re-written with CoffeeScript\n\nI just need some more CS practice AND its fun :)\n\n\n## Usage\n\nCheckout the doc from [jQuery](http://api.jquery.com/jQuery.extend/)\n\n\n\n", + "readmeFilename": "Readme.md", + "_id": "whet.extend@0.9.9", + "dist": { + "shasum": "f877d5bf648c97e5aa542fadc16d6a259b9c11a1", + "tarball": "http://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz" + }, + "_npmVersion": "1.1.66", + "_npmUser": { + "name": "meettya", + "email": "meettya@gmail.com" + }, + "maintainers": [ + { + "name": "meettya", + "email": "meettya@gmail.com" + } + ], + "directories": {}, + "_shasum": "f877d5bf648c97e5aa542fadc16d6a259b9c11a1", + "_resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz", + "_from": "whet.extend@>=0.9.9 <0.10.0", + "bugs": { + "url": "https://github.com/Meettya/whet.extend/issues" + }, + "homepage": "https://github.com/Meettya/whet.extend" +} diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/whet.extend/src/whet.extend.coffee b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/whet.extend/src/whet.extend.coffee new file mode 100644 index 00000000..8bcfdc49 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/whet.extend/src/whet.extend.coffee @@ -0,0 +1,68 @@ +### + * whet.extend v0.9.7 + * Standalone port of jQuery.extend that actually works on node.js + * https://github.com/Meettya/whet.extend + * + * Copyright 2012, Dmitrii Karpich + * Released under the MIT License +### + +module.exports = extend = (deep, target, args...) -> + + unless _isClass deep, 'Boolean' + args.unshift target + [ target, deep ] = [ deep or {}, false ] + + #Handle case when target is a string or something (possible in deep copy) + target = {} if _isPrimitiveType target + + for options in args when options? + for name, copy of options + target[name] = _findValue deep, copy, target[name] + + target + +### +Internal methods from now +### + +_isClass = (obj, str) -> + "[object #{str}]" is Object::toString.call obj + +_isOwnProp = (obj, prop) -> + Object::hasOwnProperty.call obj, prop + +_isTypeOf = (obj, str) -> + str is typeof obj + +_isPlainObj = (obj) -> + + return false unless obj + return false if obj.nodeType or obj.setInterval or not _isClass obj, 'Object' + + # Not own constructor property must be Object + return false if obj.constructor and + not _isOwnProp(obj, 'constructor') and + not _isOwnProp(obj.constructor::, 'isPrototypeOf') + + # Own properties are enumerated firstly, so to speed up, + # if last one is own, then all properties are own. + key for key of obj + key is undefined or _isOwnProp obj, key + +_isPrimitiveType = (obj) -> + not ( _isTypeOf(obj, 'object') or _isTypeOf(obj, 'function') ) + +_prepareClone = (copy, src) -> + if _isClass copy, 'Array' + if _isClass src, 'Array' then src else [] + else + if _isPlainObj src then src else {} + +_findValue = (deep, copy, src) -> + # if we're merging plain objects or arrays + if deep and ( _isClass(copy, 'Array') or _isPlainObj copy ) + clone = _prepareClone copy, src + extend deep, clone, copy + else + copy diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/whet.extend/test/extend_test.coffee b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/whet.extend/test/extend_test.coffee new file mode 100644 index 00000000..0d3491fe --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/whet.extend/test/extend_test.coffee @@ -0,0 +1,566 @@ +### +Test suite for node AND browser in one file +So, we are need some data from global +Its so wrong, but its OK for test +### +# resolve require from [window] or by require() +# _ = @_ ? require 'lodash' + +lib_path = GLOBAL?.lib_path || '' + +extend = require "#{lib_path}whet.extend" + +describe 'whet.extend:', -> + + str = int = arr = date = obj = deep = null + + beforeEach -> + str = 'me a test' + int = 10 + arr = [ 1, 'what', new Date( 81, 8, 4 )]; + date = new Date( 81, 4, 13 ); + + obj = + str : str + int : int + arr : arr + date : date + + deep = + ori : obj + layer : + int : 10 + str : 'str' + date : new Date( 84, 5, 12 ) + arr : [ 101, 'dude', new Date( 82, 10, 4 )] + deep : + str : obj.str + int : int + arr : obj.arr + date : new Date( 81, 7, 4 ) + + describe 'should merge string with:', -> + + it 'string', -> + ori = 'what u gonna say'; + target = extend ori, str + + ori.should.eql 'what u gonna say' + str.should.eql 'me a test' + target.should.eql + '0' : 'm', + '1' : 'e', + '2' : ' ', + '3' : 'a', + '4' : ' ', + '5' : 't', + '6' : 'e', + '7' : 's', + '8' : 't' + + it 'number', -> + ori = 'what u gonna say' + target = extend ori, int + + ori.should.eql 'what u gonna say' + int.should.eql 10 + target.should.eql {} + + it 'array', -> + ori = 'what u gonna say' + target = extend ori, arr + + ori.should.eql 'what u gonna say' + arr.should.eql [ 1, 'what', new Date( 81, 8, 4 )] + target.should.eql + '0' : 1, + '1' : 'what', + '2' : new Date( 81, 8, 4 ) + + it 'date', -> + ori = 'what u gonna say' + target = extend ori, date + + ori.should.eql 'what u gonna say' + date.should.eql new Date( 81, 4, 13 ) + target.should.eql new Date( 81, 4, 13 ) + + it 'object', -> + ori = 'what u gonna say' + target = extend ori, obj + + ori.should.eql 'what u gonna say' + obj.should.eql + str : 'me a test', + int : 10, + arr : [ 1, 'what', new Date( 81, 8, 4 )], + date : new Date( 81, 4, 13 ) + + target.should.eql + str : 'me a test', + int : 10, + arr : [ 1, 'what', new Date( 81, 8, 4 )], + date : new Date( 81, 4, 13 ) + + describe 'should merge number with:', -> + + it 'string', -> + ori = 20 + target = extend ori, str + + ori.should.eql 20 + str.should.eql 'me a test' + target.should.eql + '0' : 'm', + '1' : 'e', + '2' : ' ', + '3' : 'a', + '4' : ' ', + '5' : 't', + '6' : 'e', + '7' : 's', + '8' : 't' + + it 'number', -> + ori = 20 + target = extend ori, int + + ori.should.eql 20 + int.should.eql 10 + target.should.eql {} + + it 'array', -> + ori = 20 + target = extend ori, arr + + ori.should.eql 20 + arr.should.eql [ 1, 'what', new Date( 81, 8, 4 )] + target.should.eql + '0' : 1, + '1' : 'what', + '2' : new Date( 81, 8, 4 ) + + it 'date', -> + ori = 20 + target = extend ori, date + + ori.should.eql 20 + date.should.eql new Date( 81, 4, 13 ) + target.should.eql new Date( 81, 4, 13 ) + + it 'object', -> + ori = 20 + target = extend ori, obj + + ori.should.eql 20 + obj.should.eql + str : 'me a test', + int : 10, + arr : [ 1, 'what', new Date( 81, 8, 4 )], + date : new Date( 81, 4, 13 ) + + target.should.eql + str : 'me a test', + int : 10, + arr : [ 1, 'what', new Date( 81, 8, 4 )], + date : new Date( 81, 4, 13 ) + + describe 'should merge array with:', -> + + it 'string', -> + ori = [ 1, 2, 3, 4, 5, 6 ] + target = extend ori, str + + ori.should.eql [ 'm', 'e', ' ', 'a', ' ', 't', 'e', 's', 't' ] + str.should.eql 'me a test' + target.should.eql + '0' : 'm', + '1' : 'e', + '2' : ' ', + '3' : 'a', + '4' : ' ', + '5' : 't', + '6' : 'e', + '7' : 's', + '8' : 't' + + it 'number', -> + ori = [ 1, 2, 3, 4, 5, 6 ] + target = extend ori, int + + ori.should.eql [ 1, 2, 3, 4, 5, 6 ] + int.should.eql 10 + target.should.eql [ 1, 2, 3, 4, 5, 6 ] + + it 'array', -> + ori = [ 1, 2, 3, 4, 5, 6 ] + target = extend ori, arr + + ori.should.eql [ 1, 'what', new Date( 81, 8, 4 ), 4, 5, 6 ] + arr.should.eql [ 1, 'what', new Date( 81, 8, 4 )] + target.should.eql [ 1, 'what', new Date( 81, 8, 4 ), 4, 5, 6 ] + + it 'date', -> + ori = [ 1, 2, 3, 4, 5, 6 ] + target = extend ori, date + + ori.should.eql [ 1, 2, 3, 4, 5, 6 ] + date.should.eql new Date( 81, 4, 13 ) + target.should.eql [ 1, 2, 3, 4, 5, 6 ] + + it 'object', -> + ori = [ 1, 2, 3, 4, 5, 6 ] + target = extend ori, obj + + ori.length.should.equal 6 + ori[ 'str' ].should.eql 'me a test' + ori[ 'int' ].should.eql 10 + ori[ 'arr' ].should.eql [ 1, 'what', new Date( 81, 8, 4 )] + ori[ 'date' ].should.eql new Date( 81, 4, 13 ) + obj.should.eql + str : 'me a test', + int : 10, + arr : [ 1, 'what', new Date( 81, 8, 4 )], + date : new Date( 81, 4, 13 ) + + target.length.should.equal 6 + target[ 'str' ].should.eql 'me a test' + target[ 'int' ].should.eql 10 + target[ 'arr' ].should.eql [ 1, 'what', new Date( 81, 8, 4 )] + target[ 'date' ].should.eql new Date( 81, 4, 13 ) + + describe 'should merge date with:', -> + + it 'string', -> + ori = new Date( 81, 9, 20 ) + target = extend ori, str + + ori.should.eql + '0' : 'm', + '1' : 'e', + '2' : ' ', + '3' : 'a', + '4' : ' ', + '5' : 't', + '6' : 'e', + '7' : 's', + '8' : 't' + + str.should.eql 'me a test' + target.should.eql + '0' : 'm', + '1' : 'e', + '2' : ' ', + '3' : 'a', + '4' : ' ', + '5' : 't', + '6' : 'e', + '7' : 's', + '8' : 't' + + it 'number', -> + ori = new Date( 81, 9, 20 ) + target = extend ori, int + + ori.should.eql {} + int.should.eql 10 + target.should.eql {} + + it 'array', -> + ori = new Date( 81, 9, 20 ) + target = extend ori, arr + + ori.should.eql [ 1, 'what', new Date( 81, 8, 4 )] + int.should.eql 10 + target.should.eql [ 1, 'what', new Date( 81, 8, 4 )] + + it 'date', -> + ori = new Date( 81, 9, 20 ) + target = extend ori, date + + ori.should.eql {} + date.should.eql new Date( 81, 4, 13 ) + target.should.eql {} + + it 'object', -> + ori = new Date( 81, 9, 20 ) + target = extend ori, obj + + ori.should.eql + str : 'me a test', + int : 10, + arr : [ 1, 'what', new Date( 81, 8, 4 )], + date : new Date( 81, 4, 13 ) + + obj.should.eql + str : 'me a test', + int : 10, + arr : [ 1, 'what', new Date( 81, 8, 4 )], + date : new Date( 81, 4, 13 ) + + target.should.eql + str : 'me a test', + int : 10, + arr : [ 1, 'what', new Date( 81, 8, 4 )], + date : new Date( 81, 4, 13 ) + + describe 'should merge object with:', -> + + it 'string', -> + ori = + str : 'no shit' + int : 76 + arr : [ 1, 2, 3, 4 ] + date : new Date( 81, 7, 26 ) + + target = extend ori, str + + ori.should.eql + '0' : 'm', + '1' : 'e', + '2' : ' ', + '3' : 'a', + '4' : ' ', + '5' : 't', + '6' : 'e', + '7' : 's', + '8' : 't', + str: 'no shit', + int: 76, + arr: [ 1, 2, 3, 4 ], + date: new Date( 81, 7, 26 ) + + str.should.eql 'me a test' + target.should.eql + '0' : 'm', + '1' : 'e', + '2' : ' ', + '3' : 'a', + '4' : ' ', + '5' : 't', + '6' : 'e', + '7' : 's', + '8' : 't', + str: 'no shit', + int: 76, + arr: [ 1, 2, 3, 4 ], + date: new Date( 81, 7, 26 ) + + it 'number', -> + ori = + str : 'no shit', + int : 76, + arr : [ 1, 2, 3, 4 ], + date : new Date( 81, 7, 26 ) + + target = extend ori, int + + ori.should.eql + str : 'no shit', + int : 76, + arr : [ 1, 2, 3, 4 ], + date : new Date( 81, 7, 26 ) + + int.should.eql 10 + target.should.eql + str : 'no shit', + int : 76, + arr : [ 1, 2, 3, 4 ], + date : new Date( 81, 7, 26 ) + + it 'array', -> + ori = + str : 'no shit', + int : 76, + arr : [ 1, 2, 3, 4 ], + date : new Date( 81, 7, 26 ) + + target = extend ori, arr + + ori.should.eql + '0' : 1, + '1' : 'what', + '2' : new Date( 81, 8, 4 ), + str : 'no shit', + int : 76, + arr : [ 1, 2, 3, 4 ], + date : new Date( 81, 7, 26 ) + + arr.should.eql [ 1, 'what', new Date( 81, 8, 4 )] + target.should.eql + '0' : 1, + '1' : 'what', + '2' : new Date( 81, 8, 4 ), + str : 'no shit', + int : 76, + arr : [ 1, 2, 3, 4 ], + date : new Date( 81, 7, 26 ) + + it 'date', -> + ori = + str : 'no shit', + int : 76, + arr : [ 1, 2, 3, 4 ], + date : new Date( 81, 7, 26 ) + + target = extend ori, date + + ori.should.eql + str : 'no shit', + int : 76, + arr : [ 1, 2, 3, 4 ], + date : new Date( 81, 7, 26 ) + + date.should.eql new Date( 81, 4, 13 ) + target.should.eql + str : 'no shit', + int : 76, + arr : [ 1, 2, 3, 4 ], + date : new Date( 81, 7, 26 ) + + it 'object', -> + ori = + str : 'no shit', + int : 76, + arr : [ 1, 2, 3, 4 ], + date : new Date( 81, 7, 26 ) + + target = extend ori, obj + + ori.should.eql + str : 'me a test', + int : 10, + arr : [ 1, 'what', new Date( 81, 8, 4 )], + date : new Date( 81, 4, 13 ) + + obj.should.eql + str : 'me a test', + int : 10, + arr : [ 1, 'what', new Date( 81, 8, 4 )], + date : new Date( 81, 4, 13 ) + + target.should.eql + str : 'me a test', + int : 10, + arr : [ 1, 'what', new Date( 81, 8, 4 )], + date : new Date( 81, 4, 13 ) + + describe 'should make deep clone: ', -> + + it 'object with object', -> + ori = + str : 'no shit', + int : 76, + arr : [ 1, 2, 3, 4 ], + date : new Date( 81, 7, 26 ) + + target = extend true, ori, deep + + ori.should.eql + str : 'no shit', + int : 76, + arr : [ 1, 2, 3, 4 ], + date : new Date( 81, 7, 26 ), + ori : + str : 'me a test', + int : 10, + arr : [ 1, 'what', new Date( 81, 8, 4 )], + date : new Date( 81, 4, 13 ) + layer : + int : 10, + str : 'str', + date : new Date( 84, 5, 12 ), + arr : [ 101, 'dude', new Date( 82, 10, 4 )], + deep : + str : 'me a test', + int : 10, + arr : [ 1, 'what', new Date( 81, 8, 4 )], + date : new Date( 81, 7, 4 ) + + deep.should.eql + ori : + str : 'me a test', + int : 10, + arr : [ 1, 'what', new Date( 81, 8, 4 )], + date : new Date( 81, 4, 13 ) + layer : + int : 10, + str : 'str', + date : new Date( 84, 5, 12 ), + arr : [ 101, 'dude', new Date( 82, 10, 4 )], + deep : + str : 'me a test', + int : 10, + arr : [ 1, 'what', new Date( 81, 8, 4 )], + date : new Date( 81, 7, 4 ) + + target.should.eql + str : 'no shit', + int : 76, + arr : [ 1, 2, 3, 4 ], + date : new Date( 81, 7, 26 ), + ori : + str : 'me a test', + int : 10, + arr : [ 1, 'what', new Date( 81, 8, 4 )], + date : new Date( 81, 4, 13 ) + layer : + int : 10, + str : 'str', + date : new Date( 84, 5, 12 ), + arr : [ 101, 'dude', new Date( 82, 10, 4 )], + deep : + str : 'me a test', + int : 10, + arr : [ 1, 'what', new Date( 81, 8, 4 )], + date : new Date( 81, 7, 4 ) + + target.layer.deep = 339; + deep.should.eql + ori : + str : 'me a test', + int : 10, + arr : [ 1, 'what', new Date( 81, 8, 4 )], + date : new Date( 81, 4, 13 ) + layer : + int : 10, + str : 'str', + date : new Date( 84, 5, 12 ), + arr : [ 101, 'dude', new Date( 82, 10, 4 )], + deep : + str : 'me a test', + int : 10, + arr : [ 1, 'what', new Date( 81, 8, 4 )], + date : new Date( 81, 7, 4 ) + + ### + NEVER USE EXTEND WITH THE ABOVE SITUATION + ### + + describe 'must pass additional test: ', -> + + it 'should merge objects with \'null\' and \'undefined\'', -> + ori = + a : 10 + b : null + c : 'test data' + d : undefined + + additional = + x : 'googol' + y : 8939843 + z : null + az : undefined + + target = extend ori, additional + target.should.to.be.eql + a : 10 + b : null + c : 'test data' + d : undefined + x : 'googol' + y : 8939843 + z : null + az : undefined + + diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/whet.extend/test/mocha.opts b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/whet.extend/test/mocha.opts new file mode 100644 index 00000000..1a64c82b --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/whet.extend/test/mocha.opts @@ -0,0 +1,7 @@ +--compilers coffee:coffee-script +--require coffee-script +--require ./test/test_helper.coffee +--reporter spec +--colors +--growl +--ui bdd \ No newline at end of file diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/whet.extend/test/test_helper.coffee b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/whet.extend/test/test_helper.coffee new file mode 100644 index 00000000..da2e5176 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/node_modules/whet.extend/test/test_helper.coffee @@ -0,0 +1,11 @@ +### +global helper for chai.should() +### +chai = require 'chai' +GLOBAL.should = chai.should() +GLOBAL.expect = chai.expect # to work with 'undefined' - should cant it + +### +addon for lib_path +### +GLOBAL.lib_path = '../lib/' \ No newline at end of file diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/package.json b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/package.json new file mode 100644 index 00000000..a5e10b7b --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/package.json @@ -0,0 +1,94 @@ +{ + "name": "svgo", + "version": "0.5.3", + "description": "Nodejs-based tool for optimizing SVG vector graphics files", + "keywords": [ + "svgo", + "svg", + "optimize", + "minify" + ], + "homepage": "https://github.com/svg/svgo", + "bugs": { + "url": "https://github.com/svg/svgo/issues", + "email": "kir@soulshine.in" + }, + "author": { + "name": "Kir Belevich", + "email": "kir@soulshine.in", + "url": "https://github.com/deepsweet" + }, + "contributors": [ + { + "name": "Sergey Belov", + "email": "peimei@ya.ru", + "url": "http://github.com/arikon" + }, + { + "name": "Lev Solntsev", + "email": "lev.sun@ya.ru", + "url": "http://github.com/GreLI" + } + ], + "repository": { + "type": "git", + "url": "git://github.com/svg/svgo.git" + }, + "main": "./lib/svgo.js", + "bin": { + "svgo": "./bin/svgo" + }, + "directories": { + "bin": "./bin", + "lib": "./lib", + "example": "./examples" + }, + "scripts": { + "test": "make test" + }, + "dependencies": { + "sax": "~1.1.1", + "coa": "~1.0.1", + "js-yaml": "~3.3.1", + "colors": "~1.1.2", + "whet.extend": "~0.9.9", + "mkdirp": "~0.5.1" + }, + "devDependencies": { + "mocha": "~2.2.5", + "should": "7.0.1", + "istanbul": "~0.3.15", + "mocha-istanbul": "~0.2.0", + "coveralls": "~2.11.2" + }, + "engines": { + "node": ">=0.10.0" + }, + "license": "MIT", + "gitHead": "739a296621fd710a1773d9d8cdcdf84e5914d2fa", + "_id": "svgo@0.5.3", + "_shasum": "71d97ae51ec25b91864eb38435820b9ff37dbfb2", + "_from": "svgo@>=0.5.2 <0.6.0", + "_npmVersion": "2.5.1", + "_nodeVersion": "0.12.0", + "_npmUser": { + "name": "greli", + "email": "grelimail@gmail.com" + }, + "maintainers": [ + { + "name": "deepsweet", + "email": "kir@soulshine.in" + }, + { + "name": "greli", + "email": "grelimail@gmail.com" + } + ], + "dist": { + "shasum": "71d97ae51ec25b91864eb38435820b9ff37dbfb2", + "tarball": "http://registry.npmjs.org/svgo/-/svgo-0.5.3.tgz" + }, + "_resolved": "https://registry.npmjs.org/svgo/-/svgo-0.5.3.tgz", + "readme": "ERROR: No README data found!" +} diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/plugins/_collections.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/plugins/_collections.js new file mode 100644 index 00000000..554b156d --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/plugins/_collections.js @@ -0,0 +1,2600 @@ +'use strict'; + +// http://www.w3.org/TR/SVG/intro.html#Definitions +exports.elemsGroups = { + animation: ['animate', 'animateColor', 'animateMotion', 'animateTransform', 'set'], + descriptive: ['desc', 'metadata', 'title'], + shape: ['circle', 'ellipse', 'line', 'path', 'polygon', 'polyline', 'rect'], + structural: ['defs', 'g', 'svg', 'symbol', 'use'], + paintServer: ['solidColor', 'linearGradient', 'radialGradient', 'meshGradient', 'pattern', 'hatch'], + nonRendering: ['linearGradient', 'radialGradient', 'pattern', 'clipPath', 'mask', 'marker', 'symbol', 'filter', 'solidColor'], + container: ['a', 'defs', 'g', 'marker', 'mask', 'missing-glyph', 'pattern', 'svg', 'switch', 'symbol'], + textContent: ['altGlyph', 'altGlyphDef', 'altGlyphItem', 'glyph', 'glyphRef', 'textPath', 'text', 'tref', 'tspan'], + textContentChild: ['altGlyph', 'textPath', 'tref', 'tspan'], + lightSource: ['feDiffuseLighting', 'feSpecularLighting', 'feDistantLight', 'fePointLight', 'feSpotLight'], + filterPrimitive: ['feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap', 'feFlood', 'feGaussianBlur', 'feImage', 'feMerge', 'feMorphology', 'feOffset', 'feSpecularLighting', 'feTile', 'feTurbulence'] +}; + +exports.pathElems = ['path', 'glyph', 'missing-glyph']; + +// http://www.w3.org/TR/SVG/intro.html#Definitions +exports.attrsGroups = { + animationAddition: ['additive', 'accumulate'], + animationAttributeTarget: ['attributeType', 'attributeName'], + animationEvent: ['onbegin', 'onend', 'onrepeat', 'onload'], + animationTiming: ['begin', 'dur', 'end', 'min', 'max', 'restart', 'repeatCount', 'repeatDur', 'fill'], + animationValue: ['calcMode', 'values', 'keyTimes', 'keySplines', 'from', 'to', 'by'], + conditionalProcessing: ['requiredFeatures', 'requiredExtensions', 'systemLanguage'], + core: ['id', 'tabindex', 'xml:base', 'xml:lang', 'xml:space'], + graphicalEvent: ['onfocusin', 'onfocusout', 'onactivate', 'onclick', 'onmousedown', 'onmouseup', 'onmouseover', 'onmousemove', 'onmouseout', 'onload'], + presentation: [ + 'alignment-baseline', + 'baseline-shift', + 'buffered-rendering', + 'clip', + 'clip-path', + 'clip-rule', + 'color', + 'color-interpolation', + 'color-interpolation-filters', + 'color-profile', + 'color-rendering', + 'cursor', + 'direction', + 'display', + 'dominant-baseline', + 'enable-background', + 'fill', + 'fill-opacity', + 'fill-rule', + 'filter', + 'flood-color', + 'flood-opacity', + 'font-family', + 'font-size', + 'font-size-adjust', + 'font-stretch', + 'font-style', + 'font-variant', + 'font-weight', + 'glyph-orientation-horizontal', + 'glyph-orientation-vertical', + 'image-rendering', + 'kerning', + 'letter-spacing', + 'lighting-color', + 'marker-end', + 'marker-mid', + 'marker-start', + 'mask', + 'opacity', + 'overflow', + 'pointer-events', + 'shape-rendering', + 'solid-color', + 'solid-opacity', + 'stop-color', + 'stop-opacity', + 'stroke', + 'stroke-dasharray', + 'stroke-dashoffset', + 'stroke-linecap', + 'stroke-linejoin', + 'stroke-miterlimit', + 'stroke-opacity', + 'stroke-width', + 'paint-order', + 'text-anchor', + 'text-decoration', + 'text-overflow', + 'white-space', + 'text-rendering', + 'unicode-bidi', + 'vector-effect', + 'viewport-fill', + 'viewport-fill-opacity', + 'visibility', + 'white-space', + 'word-spacing', + 'writing-mode' + ], + xlink: ['xlink:href', 'xlink:show', 'xlink:actuate', 'xlink:type', 'xlink:role', 'xlink:arcrole', 'xlink:title'], + documentEvent: ['onunload', 'onabort', 'onerror', 'onresize', 'onscroll', 'onzoom'], + filterPrimitive: ['x', 'y', 'width', 'height', 'result'], + transferFunction: ['type', 'tableValues', 'slope', 'intercept', 'amplitude', 'exponent', 'offset'] +}; + +exports.attrsGroupsDefaults = { + core: {'xml:space': 'preserve'}, + filterPrimitive: {x: '0', y: '0', width: '100%', height: '100%'}, + presentation: { + clip: 'auto', + 'clip-path': 'none', + 'clip-rule': 'nonzero', + mask: 'none', + opacity: '1', + 'solid-color': '#000', + 'solid-opacity': '1', + 'stop-color': '#000', + 'stop-opacity': '1', + 'fill-opacity': '1', + 'fill-rule': 'nonzero', + fill: '#000', + stroke: 'none', + 'stroke-width': '1', + 'stroke-linecap': 'butt', + 'stroke-linejoin': 'miter', + 'stroke-miterlimit': '4', + 'stroke-dasharray': 'none', + 'stroke-dashoffset': '0', + 'stroke-opacity': '1', + 'paint-order': 'normal', + 'vector-effect': 'none', + 'viewport-fill': 'none', + 'viewport-fill-opacity': '1', + display: 'inline', + visibility: 'visible', + 'marker-start': 'none', + 'marker-mid': 'none', + 'marker-end': 'none', + 'color-interpolation': 'sRGB', + 'color-interpolation-filters': 'linearRGB', + 'color-rendering': 'auto', + 'shape-rendering': 'auto', + 'text-rendering': 'auto', + 'image-rendering': 'auto', + 'buffered-rendering': 'auto', + 'font-style': 'normal', + 'font-variant': 'normal', + 'font-weight': 'normal', + 'font-stretch': 'normal', + 'font-size': 'medium', + 'font-size-adjust': 'none', + kerning: 'auto', + 'letter-spacing': 'normal', + 'word-spacing': 'normal', + 'text-decoration': 'none', + 'text-anchor': 'start', + 'text-overflow': 'clip', + 'writing-mode': 'lr-tb', + 'glyph-orientation-vertical': 'auto', + 'glyph-orientation-horizontal': '0deg', + direction: 'ltr', + 'unicode-bidi': 'normal', + 'dominant-baseline': 'auto', + 'alignment-baseline': 'baseline', + 'baseline-shift': 'baseline' + }, + transferFunction: {slope: '1', intercept: '0', amplitude: '1', exponent: '1', offset: '0'} +}; + +// http://www.w3.org/TR/SVG/eltindex.html +exports.elems = { + a: { + attrsGroups: [ + 'conditionalProcessing', + 'core', + 'graphicalEvent', + 'presentation', + 'xlink' + ], + attrs: [ + 'class', + 'style', + 'externalResourcesRequired', + 'transform', + 'target' + ], + defaults: { + target: '_self' + }, + contentGroups: [ + 'animation', + 'descriptive', + 'shape', + 'structural', + 'paintServer' + ], + content: [ + 'a', + 'altGlyphDef', + 'clipPath', + 'color-profile', + 'cursor', + 'filter', + 'font', + 'font-face', + 'foreignObject', + 'image', + 'marker', + 'mask', + 'pattern', + 'script', + 'style', + 'switch', + 'text', + 'view' + ] + }, + altGlyph: { + attrsGroups: [ + 'conditionalProcessing', + 'core', + 'graphicalEvent', + 'presentation', + 'xlink' + ], + attrs: [ + 'class', + 'style', + 'externalResourcesRequired', + 'x', + 'y', + 'dx', + 'dy', + 'glyphRef', + 'format', + 'rotate' + ] + }, + altGlyphDef: { + attrsGroups: [ + 'core' + ], + content: [ + 'glyphRef' + ] + }, + altGlyphItem: { + attrsGroups: [ + 'core' + ], + content: [ + 'glyphRef', + 'altGlyphItem' + ] + }, + animate: { + attrsGroups: [ + 'conditionalProcessing', + 'core', + 'animationAddition', + 'animationAttributeTarget', + 'animationEvent', + 'animationTiming', + 'animationValue', + 'presentation', + 'xlink' + ], + attrs: [ + 'externalResourcesRequired' + ], + contentGroups: [ + 'descriptive' + ] + }, + animateColor: { + attrsGroups: [ + 'conditionalProcessing', + 'core', + 'animationEvent', + 'xlink', + 'animationAttributeTarget', + 'animationTiming', + 'animationValue', + 'animationAddition', + 'presentation' + ], + attrs: [ + 'externalResourcesRequired' + ], + contentGroups: [ + 'descriptive' + ] + }, + animateMotion: { + attrsGroups: [ + 'conditionalProcessing', + 'core', + 'animationEvent', + 'xlink', + 'animationTiming', + 'animationValue', + 'animationAddition' + ], + attrs: [ + 'externalResourcesRequired', + 'path', + 'keyPoints', + 'rotate', + 'origin' + ], + defaults: { + 'rotate': '0' + }, + contentGroups: [ + 'descriptive' + ], + content: [ + 'mpath' + ] + }, + animateTransform: { + attrsGroups: [ + 'conditionalProcessing', + 'core', + 'animationEvent', + 'xlink', + 'animationAttributeTarget', + 'animationTiming', + 'animationValue', + 'animationAddition' + ], + attrs: [ + 'externalResourcesRequired', + 'type' + ], + contentGroups: [ + 'descriptive' + ] + }, + circle: { + attrsGroups: [ + 'conditionalProcessing', + 'core', + 'graphicalEvent', + 'presentation' + ], + attrs: [ + 'class', + 'style', + 'externalResourcesRequired', + 'transform', + 'cx', + 'cy', + 'r' + ], + defaults: { + cx: '0', + cy: '0' + }, + contentGroups: [ + 'animation', + 'descriptive' + ] + }, + clipPath: { + attrsGroups: [ + 'conditionalProcessing', + 'core', + 'presentation' + ], + attrs: [ + 'class', + 'style', + 'externalResourcesRequired', + 'transform', + 'clipPathUnits' + ], + defaults: { + clipPathUnits: 'userSpaceOnUse' + }, + contentGroups: [ + 'animation', + 'descriptive', + 'shape' + ], + content: [ + 'text', + 'use' + ] + }, + 'color-profile': { + attrsGroups: [ + 'core', + 'xlink' + ], + attrs: [ + 'local', + 'name', + 'rendering-intent' + ], + defaults: { + name: 'sRGB', + 'rendering-intent': 'auto' + }, + contentGroups: [ + 'descriptive' + ] + }, + cursor: { + attrsGroups: [ + 'core', + 'conditionalProcessing', + 'xlink' + ], + attrs: [ + 'externalResourcesRequired', + 'x', + 'y' + ], + defaults: { + x: '0', + y: '0' + }, + contentGroups: [ + 'descriptive' + ] + }, + defs: { + attrsGroups: [ + 'conditionalProcessing', + 'core', + 'graphicalEvent', + 'presentation' + ], + attrs: [ + 'class', + 'style', + 'externalResourcesRequired', + 'transform' + ], + contentGroups: [ + 'animation', + 'descriptive', + 'shape', + 'structural', + 'paintServer' + ], + content: [ + 'a', + 'altGlyphDef', + 'clipPath', + 'color-profile', + 'cursor', + 'filter', + 'font', + 'font-face', + 'foreignObject', + 'image', + 'marker', + 'mask', + 'pattern', + 'script', + 'style', + 'switch', + 'text', + 'view' + ] + }, + desc: { + attrsGroups: [ + 'core' + ], + attrs: [ + 'class', + 'style' + ] + }, + ellipse: { + attrsGroups: [ + 'conditionalProcessing', + 'core', + 'graphicalEvent', + 'presentation' + ], + attrs: [ + 'class', + 'style', + 'externalResourcesRequired', + 'transform', + 'cx', + 'cy', + 'rx', + 'ry' + ], + defaults: { + cx: '0', + cy: '0' + }, + contentGroups: [ + 'animation', + 'descriptive' + ] + }, + feBlend: { + attrsGroups: [ + 'core', + 'presentation', + 'filterPrimitive' + ], + attrs: [ + 'class', + 'style', + // TODO: in - 'If no value is provided and this is the first filter primitive, + // then this filter primitive will use SourceGraphic as its input' + 'in', + 'in2', + 'mode' + ], + defaults: { + mode: 'normal' + }, + content: [ + 'animate', + 'set' + ] + }, + feColorMatrix: { + attrsGroups: [ + 'core', + 'presentation', + 'filterPrimitive' + ], + attrs: [ + 'class', + 'style', + 'in', + 'type', + 'values' + ], + defaults: { + type: 'matrix' + }, + content: [ + 'animate', + 'set' + ] + }, + feComponentTransfer: { + attrsGroups: [ + 'core', + 'presentation', + 'filterPrimitive' + ], + attrs: [ + 'class', + 'style', + 'in' + ], + content: [ + 'feFuncA', + 'feFuncB', + 'feFuncG', + 'feFuncR' + ] + }, + feComposite: { + attrsGroups: [ + 'core', + 'presentation', + 'filterPrimitive' + ], + attrs: [ + 'class', + 'style', + 'in', + 'in2', + 'operator', + 'k1', + 'k2', + 'k3', + 'k4' + ], + defaults: { + operator: 'over', + k1: '0', + k2: '0', + k3: '0', + k4: '0' + }, + content: [ + 'animate', + 'set' + ] + }, + feConvolveMatrix: { + attrsGroups: [ + 'core', + 'presentation', + 'filterPrimitive' + ], + attrs: [ + 'class', + 'style', + 'in', + 'order', + 'kernelMatrix', + // TODO: divisor - 'The default value is the sum of all values in kernelMatrix, + // with the exception that if the sum is zero, then the divisor is set to 1' + 'divisor', + 'bias', + // TODO: targetX - 'By default, the convolution matrix is centered in X over each + // pixel of the input image (i.e., targetX = floor ( orderX / 2 ))' + 'targetX', + 'targetY', + 'edgeMode', + // TODO: kernelUnitLength - 'The first number is the value. The second number + // is the value. If the value is not specified, it defaults to the same value as ' + 'kernelUnitLength', + 'preserveAlpha' + ], + defaults: { + order: '3', + bias: '0', + edgeMode: 'duplicate', + preserveAlpha: 'false' + }, + content: [ + 'animate', + 'set' + ] + }, + feDiffuseLighting: { + attrsGroups: [ + 'core', + 'presentation', + 'filterPrimitive' + ], + attrs: [ + 'class', + 'style', + 'in', + 'surfaceScale', + 'diffuseConstant', + 'kernelUnitLength' + ], + defaults: { + surfaceScale: '1', + diffuseConstant: '1' + }, + contentGroups: [ + 'descriptive' + ], + content: [ + // TODO: 'exactly one light source element, in any order' + 'feDistantLight', + 'fePointLight', + 'feSpotLight' + ] + }, + feDisplacementMap: { + attrsGroups: [ + 'core', + 'presentation', + 'filterPrimitive' + ], + attrs: [ + 'class', + 'style', + 'in', + 'in2', + 'scale', + 'xChannelSelector', + 'yChannelSelector' + ], + defaults: { + scale: '0', + xChannelSelector: 'A', + yChannelSelector: 'A' + }, + content: [ + 'animate', + 'set' + ] + }, + feDistantLight: { + attrsGroups: [ + 'core' + ], + attrs: [ + 'azimuth', + 'elevation' + ], + defaults: { + azimuth: '0', + elevation: '0' + }, + content: [ + 'animate', + 'set' + ] + }, + feFlood: { + attrsGroups: [ + 'core', + 'presentation', + 'filterPrimitive' + ], + attrs: [ + 'class', + 'style' + ], + content: [ + 'animate', + 'animateColor', + 'set' + ] + }, + feFuncA: { + attrsGroups: [ + 'core', + 'transferFunction' + ], + content: [ + 'set', + 'animate' + ] + }, + feFuncB: { + attrsGroups: [ + 'core', + 'transferFunction' + ], + content: [ + 'set', + 'animate' + ] + }, + feFuncG: { + attrsGroups: [ + 'core', + 'transferFunction' + ], + content: [ + 'set', + 'animate' + ] + }, + feFuncR: { + attrsGroups: [ + 'core', + 'transferFunction' + ], + content: [ + 'set', + 'animate' + ] + }, + feGaussianBlur: { + attrsGroups: [ + 'core', + 'presentation', + 'filterPrimitive' + ], + attrs: [ + 'class', + 'style', + 'in', + 'stdDeviation' + ], + defaults: { + stdDeviation: '0' + }, + content: [ + 'set', + 'animate' + ] + }, + feImage: { + attrsGroups: [ + 'core', + 'presentation', + 'filterPrimitive', + 'xlink' + ], + attrs: [ + 'class', + 'style', + 'externalResourcesRequired', + 'preserveAspectRatio', + 'xlink:href' + ], + defaults: { + preserveAspectRatio: 'xMidYMid meet' + }, + content: [ + 'animate', + 'animateTransform', + 'set' + ] + }, + feMerge: { + attrsGroups: [ + 'core', + 'presentation', + 'filterPrimitive' + ], + attrs: [ + 'class', + 'style' + ], + content: [ + 'feMergeNode' + ] + }, + feMergeNode: { + attrsGroups: [ + 'core' + ], + attrs: [ + 'in' + ], + content: [ + 'animate', + 'set' + ] + }, + feMorphology: { + attrsGroups: [ + 'core', + 'presentation', + 'filterPrimitive' + ], + attrs: [ + 'class', + 'style', + 'in', + 'operator', + 'radius' + ], + defaults: { + operator: 'erode', + radius: '0' + }, + content: [ + 'animate', + 'set' + ] + }, + feOffset: { + attrsGroups: [ + 'core', + 'presentation', + 'filterPrimitive' + ], + attrs: [ + 'class', + 'style', + 'in', + 'dx', + 'dy' + ], + defaults: { + dx: '0', + dy: '0' + }, + content: [ + 'animate', + 'set' + ] + }, + fePointLight: { + attrsGroups: [ + 'core' + ], + attrs: [ + 'x', + 'y', + 'z' + ], + defaults: { + x: '0', + y: '0', + z: '0' + }, + content: [ + 'animate', + 'set' + ] + }, + feSpecularLighting: { + attrsGroups: [ + 'core', + 'presentation', + 'filterPrimitive' + ], + attrs: [ + 'class', + 'style', + 'in', + 'surfaceScale', + 'specularConstant', + 'specularExponent', + 'kernelUnitLength' + ], + defaults: { + surfaceScale: '1', + specularConstant: '1', + specularExponent: '1' + }, + contentGroups: [ + 'descriptive', + // TODO: exactly one 'light source element' + 'lightSource' + ] + }, + feSpotLight: { + attrsGroups: [ + 'core' + ], + attrs: [ + 'x', + 'y', + 'z', + 'pointsAtX', + 'pointsAtY', + 'pointsAtZ', + 'specularExponent', + 'limitingConeAngle' + ], + defaults: { + x: '0', + y: '0', + z: '0', + pointsAtX: '0', + pointsAtY: '0', + pointsAtZ: '0', + specularExponent: '1' + }, + content: [ + 'animate', + 'set' + ] + }, + feTile: { + attrsGroups: [ + 'core', + 'presentation', + 'filterPrimitive' + ], + attrs: [ + 'class', + 'style', + 'in' + ], + content: [ + 'animate', + 'set' + ] + }, + feTurbulence: { + attrsGroups: [ + 'core', + 'presentation', + 'filterPrimitive' + ], + attrs: [ + 'class', + 'style', + 'baseFrequency', + 'numOctaves', + 'seed', + 'stitchTiles', + 'type' + ], + defaults: { + baseFrequency: '0', + numOctaves: '1', + seed: '0', + stitchTiles: 'noStitch', + type: 'turbulence' + }, + content: [ + 'animate', + 'set' + ] + }, + filter: { + attrsGroups: [ + 'core', + 'presentation', + 'xlink' + ], + attrs: [ + 'class', + 'style', + 'externalResourcesRequired', + 'x', + 'y', + 'width', + 'height', + 'filterRes', + 'filterUnits', + 'primitiveUnits', + 'xlink:href' + ], + defaults: { + primitiveUnits: 'userSpaceOnUse', + x: '-10%', + y: '-10%', + width: '120%', + height: '120%' + }, + contentGroups: [ + 'descriptive', + 'filterPrimitive' + ], + content: [ + 'animate', + 'set' + ] + }, + font: { + attrsGroups: [ + 'core', + 'presentation' + ], + attrs: [ + 'class', + 'style', + 'externalResourcesRequired', + 'horiz-origin-x', + 'horiz-origin-y', + 'horiz-adv-x', + 'vert-origin-x', + 'vert-origin-y', + 'vert-adv-y' + ], + defaults: { + 'horiz-origin-x': '0', + 'horiz-origin-y': '0' + }, + contentGroups: [ + 'descriptive' + ], + content: [ + 'font-face', + 'glyph', + 'hkern', + 'missing-glyph', + 'vkern' + ] + }, + 'font-face': { + attrsGroups: [ + 'core' + ], + attrs: [ + 'font-family', + 'font-style', + 'font-variant', + 'font-weight', + 'font-stretch', + 'font-size', + 'unicode-range', + 'units-per-em', + 'panose-1', + 'stemv', + 'stemh', + 'slope', + 'cap-height', + 'x-height', + 'accent-height', + 'ascent', + 'descent', + 'widths', + 'bbox', + 'ideographic', + 'alphabetic', + 'mathematical', + 'hanging', + 'v-ideographic', + 'v-alphabetic', + 'v-mathematical', + 'v-hanging', + 'underline-position', + 'underline-thickness', + 'strikethrough-position', + 'strikethrough-thickness', + 'overline-position', + 'overline-thickness' + ], + defaults: { + 'font-style': 'all', + 'font-variant': 'normal', + 'font-weight': 'all', + 'font-stretch': 'normal', + 'unicode-range': 'U+0-10FFFF', + 'units-per-em': '1000', + 'panose-1': '0 0 0 0 0 0 0 0 0 0', + 'slope': '0' + }, + contentGroups: [ + 'descriptive' + ], + content: [ + // TODO: "at most one 'font-face-src' element" + 'font-face-src' + ] + }, + // TODO: empty content + 'font-face-format': { + attrsGroups: [ + 'core' + ], + attrs: [ + 'string' + ] + }, + 'font-face-name': { + attrsGroups: [ + 'core' + ], + attrs: [ + 'name' + ] + }, + 'font-face-src': { + attrsGroups: [ + 'core' + ], + content: [ + 'font-face-name', + 'font-face-uri' + ] + }, + 'font-face-uri': { + attrsGroups: [ + 'core', + 'xlink' + ], + attrs: [ + 'xlink:href' + ], + content: [ + 'font-face-format' + ] + }, + foreignObject: { + attrsGroups: [ + 'core', + 'conditionalProcessing', + 'graphicalEvent', + 'presentation' + ], + attrs: [ + 'class', + 'style', + 'externalResourcesRequired', + 'transform', + 'x', + 'y', + 'width', + 'height' + ], + defaults: { + x: 0, + y: 0 + } + }, + g: { + attrsGroups: [ + 'conditionalProcessing', + 'core', + 'graphicalEvent', + 'presentation' + ], + attrs: [ + 'class', + 'style', + 'externalResourcesRequired', + 'transform' + ], + contentGroups: [ + 'animation', + 'descriptive', + 'shape', + 'structural', + 'paintServer' + ], + content: [ + 'a', + 'altGlyphDef', + 'clipPath', + 'color-profile', + 'cursor', + 'filter', + 'font', + 'font-face', + 'foreignObject', + 'image', + 'marker', + 'mask', + 'pattern', + 'script', + 'style', + 'switch', + 'text', + 'view' + ] + }, + glyph: { + attrsGroups: [ + 'core', + 'presentation' + ], + attrs: [ + 'class', + 'style', + 'd', + 'horiz-adv-x', + 'vert-origin-x', + 'vert-origin-y', + 'vert-adv-y', + 'unicode', + 'glyph-name', + 'orientation', + 'arabic-form', + 'lang' + ], + defaults: { + 'arabic-form': 'initial' + }, + contentGroups: [ + 'animation', + 'descriptive', + 'shape', + 'structural', + 'paintServer' + ], + content: [ + 'a', + 'altGlyphDef', + 'clipPath', + 'color-profile', + 'cursor', + 'filter', + 'font', + 'font-face', + 'foreignObject', + 'image', + 'marker', + 'mask', + 'pattern', + 'script', + 'style', + 'switch', + 'text', + 'view' + ], + }, + glyphRef: { + attrsGroups: [ + 'core', + 'presentation' + ], + attrs: [ + 'class', + 'style', + 'd', + 'horiz-adv-x', + 'vert-origin-x', + 'vert-origin-y', + 'vert-adv-y' + ], + contentGroups: [ + 'animation', + 'descriptive', + 'shape', + 'structural', + 'paintServer' + ], + content: [ + 'a', + 'altGlyphDef', + 'clipPath', + 'color-profile', + 'cursor', + 'filter', + 'font', + 'font-face', + 'foreignObject', + 'image', + 'marker', + 'mask', + 'pattern', + 'script', + 'style', + 'switch', + 'text', + 'view' + ] + }, + hatch: { + attrsGroups: [ + 'core', + 'presentation', + 'xlink' + ], + attrs: [ + 'class', + 'style', + 'x', + 'y', + 'pitch', + 'rotate', + 'hatchUnits', + 'hatchContentUnits', + 'transform' + ], + defaults: { + hatchUnits: 'objectBoundingBox', + hatchContentUnits: 'userSpaceOnUse', + x: '0', + y: '0', + pitch: '0', + rotate: '0' + }, + contentGroups: [ + 'animation', + 'descriptive' + ], + content: [ + 'hatchPath' + ] + }, + hatchPath: { + attrsGroups: [ + 'core', + 'presentation', + 'xlink' + ], + attrs: [ + 'class', + 'style', + 'd', + 'offset' + ], + defaults: { + offset: '0' + }, + contentGroups: [ + 'animation', + 'descriptive' + ] + }, + hkern: { + attrsGroups: [ + 'core' + ], + attrs: [ + 'u1', + 'g1', + 'u2', + 'g2', + 'k' + ] + }, + image: { + attrsGroups: [ + 'core', + 'conditionalProcessing', + 'graphicalEvent', + 'xlink', + 'presentation' + ], + attrs: [ + 'class', + 'style', + 'externalResourcesRequired', + 'preserveAspectRatio', + 'transform', + 'x', + 'y', + 'width', + 'height', + 'xlink:href' + ], + defaults: { + x: '0', + y: '0', + preserveAspectRatio: 'xMidYMid meet' + }, + contentGroups: [ + 'animation', + 'descriptive' + ] + }, + line: { + attrsGroups: [ + 'conditionalProcessing', + 'core', + 'graphicalEvent', + 'presentation' + ], + attrs: [ + 'class', + 'style', + 'externalResourcesRequired', + 'transform', + 'x1', + 'y1', + 'x2', + 'y2' + ], + defaults: { + x1: '0', + y1: '0', + x2: '0', + y2: '0' + }, + contentGroups: [ + 'animation', + 'descriptive' + ] + }, + linearGradient: { + attrsGroups: [ + 'core', + 'presentation', + 'xlink' + ], + attrs: [ + 'class', + 'style', + 'externalResourcesRequired', + 'x1', + 'y1', + 'x2', + 'y2', + 'gradientUnits', + 'gradientTransform', + 'spreadMethod', + 'xlink:href' + ], + defaults: { + x1: '0', + y1: '0', + x2: '100%', + y2: '0', + spreadMethod: 'pad' + }, + contentGroups: [ + 'descriptive' + ], + content: [ + 'animate', + 'animateTransform', + 'set', + 'stop' + ] + }, + marker: { + attrsGroups: [ + 'core', + 'presentation' + ], + attrs: [ + 'class', + 'style', + 'externalResourcesRequired', + 'viewBox', + 'preserveAspectRatio', + 'refX', + 'refY', + 'markerUnits', + 'markerWidth', + 'markerHeight', + 'orient' + ], + defaults: { + markerUnits: 'strokeWidth', + refX: '0', + refY: '0', + markerWidth: '3', + markerHeight: '3' + }, + contentGroups: [ + 'animation', + 'descriptive', + 'shape', + 'structural', + 'paintServer' + ], + content: [ + 'a', + 'altGlyphDef', + 'clipPath', + 'color-profile', + 'cursor', + 'filter', + 'font', + 'font-face', + 'foreignObject', + 'image', + 'marker', + 'mask', + 'pattern', + 'script', + 'style', + 'switch', + 'text', + 'view' + ] + }, + mask: { + attrsGroups: [ + 'conditionalProcessing', + 'core', + 'presentation' + ], + attrs: [ + 'class', + 'style', + 'externalResourcesRequired', + 'x', + 'y', + 'width', + 'height', + 'maskUnits', + 'maskContentUnits' + ], + defaults: { + maskUnits: 'objectBoundingBox', + maskContentUnits: 'userSpaceOnUse', + x: '-10%', + y: '-10%', + width: '120%', + height: '120%' + }, + contentGroups: [ + 'animation', + 'descriptive', + 'shape', + 'structural', + 'paintServer' + ], + content: [ + 'a', + 'altGlyphDef', + 'clipPath', + 'color-profile', + 'cursor', + 'filter', + 'font', + 'font-face', + 'foreignObject', + 'image', + 'marker', + 'mask', + 'pattern', + 'script', + 'style', + 'switch', + 'text', + 'view' + ] + }, + metadata: { + attrsGroups: [ + 'core' + ] + }, + 'missing-glyph': { + attrsGroups: [ + 'core', + 'presentation' + ], + attrs: [ + 'class', + 'style', + 'd', + 'horiz-adv-x', + 'vert-origin-x', + 'vert-origin-y', + 'vert-adv-y' + ], + contentGroups: [ + 'animation', + 'descriptive', + 'shape', + 'structural', + 'paintServer' + ], + content: [ + 'a', + 'altGlyphDef', + 'clipPath', + 'color-profile', + 'cursor', + 'filter', + 'font', + 'font-face', + 'foreignObject', + 'image', + 'marker', + 'mask', + 'pattern', + 'script', + 'style', + 'switch', + 'text', + 'view' + ] + }, + mpath: { + attrsGroups: [ + 'core', + 'xlink' + ], + attrs: [ + 'externalResourcesRequired', + 'xlink:href' + ], + contentGroups: [ + 'descriptive' + ] + }, + path: { + attrsGroups: [ + 'conditionalProcessing', + 'core', + 'graphicalEvent', + 'presentation' + ], + attrs: [ + 'class', + 'style', + 'externalResourcesRequired', + 'transform', + 'd', + 'pathLength' + ], + contentGroups: [ + 'animation', + 'descriptive' + ] + }, + pattern: { + attrsGroups: [ + 'conditionalProcessing', + 'core', + 'presentation', + 'xlink' + ], + attrs: [ + 'class', + 'style', + 'externalResourcesRequired', + 'viewBox', + 'preserveAspectRatio', + 'x', + 'y', + 'width', + 'height', + 'patternUnits', + 'patternContentUnits', + 'patternTransform', + 'xlink:href' + ], + defaults: { + patternUnits: 'objectBoundingBox', + patternContentUnits: 'userSpaceOnUse', + x: '0', + y: '0', + width: '0', + height: '0', + preserveAspectRatio: 'xMidYMid meet' + }, + contentGroups: [ + 'animation', + 'descriptive', + 'paintServer', + 'shape', + 'structural' + ], + content: [ + 'a', + 'altGlyphDef', + 'clipPath', + 'color-profile', + 'cursor', + 'filter', + 'font', + 'font-face', + 'foreignObject', + 'image', + 'marker', + 'mask', + 'pattern', + 'script', + 'style', + 'switch', + 'text', + 'view' + ] + }, + polygon: { + attrsGroups: [ + 'conditionalProcessing', + 'core', + 'graphicalEvent', + 'presentation' + ], + attrs: [ + 'class', + 'style', + 'externalResourcesRequired', + 'transform', + 'points' + ], + contentGroups: [ + 'animation', + 'descriptive' + ] + }, + polyline: { + attrsGroups: [ + 'conditionalProcessing', + 'core', + 'graphicalEvent', + 'presentation' + ], + attrs: [ + 'class', + 'style', + 'externalResourcesRequired', + 'transform', + 'points' + ], + contentGroups: [ + 'animation', + 'descriptive' + ] + }, + radialGradient: { + attrsGroups: [ + 'core', + 'presentation', + 'xlink' + ], + attrs: [ + 'class', + 'style', + 'externalResourcesRequired', + 'cx', + 'cy', + 'r', + 'fx', + 'fy', + 'fr', + 'gradientUnits', + 'gradientTransform', + 'spreadMethod', + 'xlink:href' + ], + defaults: { + gradientUnits: 'objectBoundingBox', + cx: '50%', + cy: '50%', + r: '50%' + }, + contentGroups: [ + 'descriptive' + ], + content: [ + 'animate', + 'animateTransform', + 'set', + 'stop' + ] + }, + meshGradient: { + attrsGroups: [ + 'core', + 'presentation', + 'xlink' + ], + attrs: [ + 'class', + 'style', + 'x', + 'y', + 'gradientUnits', + 'transform' + ], + contentGroups: [ + 'descriptive', + 'paintServer', + 'animation', + ], + content: [ + 'meshRow' + ] + }, + meshRow: { + attrsGroups: [ + 'core', + 'presentation' + ], + attrs: [ + 'class', + 'style' + ], + contentGroups: [ + 'descriptive' + ], + content: [ + 'meshPatch' + ] + }, + meshPatch: { + attrsGroups: [ + 'core', + 'presentation' + ], + attrs: [ + 'class', + 'style' + ], + contentGroups: [ + 'descriptive' + ], + content: [ + 'stop' + ] + }, + rect: { + attrsGroups: [ + 'conditionalProcessing', + 'core', + 'graphicalEvent', + 'presentation' + ], + attrs: [ + 'class', + 'style', + 'externalResourcesRequired', + 'transform', + 'x', + 'y', + 'width', + 'height', + 'rx', + 'ry' + ], + defaults: { + x: '0', + y: '0' + }, + contentGroups: [ + 'animation', + 'descriptive' + ] + }, + script: { + attrsGroups: [ + 'core', + 'xlink' + ], + attrs: [ + 'externalResourcesRequired', + 'type', + 'xlink:href' + ] + }, + set: { + attrsGroups: [ + 'conditionalProcessing', + 'core', + 'animation', + 'xlink', + 'animationAttributeTarget', + 'animationTiming', + ], + attrs: [ + 'externalResourcesRequired', + 'to' + ], + contentGroups: [ + 'descriptive' + ] + }, + solidColor: { + attrsGroups: [ + 'core', + 'presentation' + ], + attrs: [ + 'class', + 'style' + ], + contentGroups: [ + 'paintServer' + ] + }, + stop: { + attrsGroups: [ + 'core', + 'presentation' + ], + attrs: [ + 'class', + 'style', + 'offset', + 'path' + ], + contentGroups: [ + 'animate', + 'animateColor', + 'set' + ] + }, + style: { + attrsGroups: [ + 'core' + ], + attrs: [ + 'type', + 'media', + 'title' + ], + defaults: { + type: 'text/css' + } + }, + svg: { + attrsGroups: [ + 'conditionalProcessing', + 'core', + 'documentEvent', + 'graphicalEvent', + 'presentation' + ], + attrs: [ + 'class', + 'style', + 'x', + 'y', + 'width', + 'height', + 'viewBox', + 'preserveAspectRatio', + 'zoomAndPan', + 'version', + 'baseProfile', + 'contentScriptType', + 'contentStyleType' + ], + defaults: { + x: '0', + y: '0', + width: '100%', + height: '100%', + preserveAspectRatio: 'xMidYMid meet', + zoomAndPan: 'magnify', + version: '1.1', + baseProfile: 'none', + contentScriptType: 'application/ecmascript', + contentStyleType: 'text/css' + }, + contentGroups: [ + 'animation', + 'descriptive', + 'shape', + 'structural', + 'paintServer' + ], + content: [ + 'a', + 'altGlyphDef', + 'clipPath', + 'color-profile', + 'cursor', + 'filter', + 'font', + 'font-face', + 'foreignObject', + 'image', + 'marker', + 'mask', + 'pattern', + 'script', + 'style', + 'switch', + 'text', + 'view' + ] + }, + switch: { + attrsGroups: [ + 'conditionalProcessing', + 'core', + 'graphicalEvent', + 'presentation' + ], + attrs: [ + 'class', + 'style', + 'externalResourcesRequired', + 'transform' + ], + contentGroups: [ + 'animation', + 'descriptive', + 'shape' + ], + content: [ + 'a', + 'foreignObject', + 'g', + 'image', + 'svg', + 'switch', + 'text', + 'use' + ] + }, + symbol: { + attrsGroups: [ + 'core', + 'graphicalEvent', + 'presentation' + ], + attrs: [ + 'class', + 'style', + 'externalResourcesRequired', + 'preserveAspectRatio', + 'viewBox', + 'refX', + 'refY' + ], + defaults: { + refX: 0, + refY: 0 + }, + contentGroups: [ + 'animation', + 'descriptive', + 'shape', + 'structural', + 'paintServer' + ], + content: [ + 'a', + 'altGlyphDef', + 'clipPath', + 'color-profile', + 'cursor', + 'filter', + 'font', + 'font-face', + 'foreignObject', + 'image', + 'marker', + 'mask', + 'pattern', + 'script', + 'style', + 'switch', + 'text', + 'view' + ] + }, + text: { + attrsGroups: [ + 'conditionalProcessing', + 'core', + 'graphicalEvent', + 'presentation' + ], + attrs: [ + 'class', + 'style', + 'externalResourcesRequired', + 'transform', + 'lengthAdjust', + 'x', + 'y', + 'dx', + 'dy', + 'rotate', + 'textLength' + ], + defaults: { + x: '0', + y: '0', + lengthAdjust: 'spacing' + }, + contentGroups: [ + 'animation', + 'descriptive', + 'textContentChild' + ], + content: [ + 'a' + ] + }, + textPath: { + attrsGroups: [ + 'conditionalProcessing', + 'core', + 'graphicalEvent', + 'presentation', + 'xlink' + ], + attrs: [ + 'class', + 'style', + 'externalResourcesRequired', + 'xlink:href', + 'startOffset', + 'method', + 'spacing', + 'd' + ], + defaults: { + startOffset: '0', + method: 'align', + spacing: 'exact' + }, + contentGroups: [ + 'descriptive' + ], + content: [ + 'a', + 'altGlyph', + 'animate', + 'animateColor', + 'set', + 'tref', + 'tspan' + ] + }, + title: { + attrsGroups: [ + 'core' + ], + attrs: [ + 'class', + 'style' + ] + }, + tref: { + attrsGroups: [ + 'conditionalProcessing', + 'core', + 'graphicalEvent', + 'presentation', + 'xlink' + ], + attrs: [ + 'class', + 'style', + 'externalResourcesRequired', + 'xlink:href' + ], + contentGroups: [ + 'descriptive' + ], + content: [ + 'animate', + 'animateColor', + 'set' + ] + }, + tspan: { + attrsGroups: [ + 'conditionalProcessing', + 'core', + 'graphicalEvent', + 'presentation' + ], + attrs: [ + 'class', + 'style', + 'externalResourcesRequired', + 'x', + 'y', + 'dx', + 'dy', + 'rotate', + 'textLength', + 'lengthAdjust' + ], + contentGroups: [ + 'descriptive' + ], + content: [ + 'a', + 'altGlyph', + 'animate', + 'animateColor', + 'set', + 'tref', + 'tspan' + ] + }, + use: { + attrsGroups: [ + 'core', + 'conditionalProcessing', + 'graphicalEvent', + 'presentation', + 'xlink' + ], + attrs: [ + 'class', + 'style', + 'externalResourcesRequired', + 'transform', + 'x', + 'y', + 'width', + 'height', + 'xlink:href' + ], + defaults: { + x: '0', + y: '0' + }, + contentGroups: [ + 'animation', + 'descriptive' + ] + }, + view: { + attrsGroups: [ + 'core' + ], + attrs: [ + 'externalResourcesRequired', + 'viewBox', + 'preserveAspectRatio', + 'zoomAndPan', + 'viewTarget' + ], + contentGroups: [ + 'descriptive' + ] + }, + vkern: { + attrsGroups: [ + 'core' + ], + attrs: [ + 'u1', + 'g1', + 'u2', + 'g2', + 'k' + ] + } +}; + +// http://wiki.inkscape.org/wiki/index.php/Inkscape-specific_XML_attributes +exports.editorNamespaces = [ + 'http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd', + 'http://www.inkscape.org/namespaces/inkscape', + 'http://www.bohemiancoding.com/sketch/ns', + 'http://ns.adobe.com/AdobeIllustrator/10.0/', + 'http://ns.adobe.com/Graphs/1.0/', + 'http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/', + 'http://ns.adobe.com/Variables/1.0/', + 'http://ns.adobe.com/SaveForWeb/1.0/', + 'http://ns.adobe.com/Extensibility/1.0/', + 'http://ns.adobe.com/Flows/1.0/', + 'http://ns.adobe.com/ImageReplacement/1.0/', + 'http://ns.adobe.com/GenericCustomNamespace/1.0/', + 'http://ns.adobe.com/XPath/1.0/' +]; + +// http://www.w3.org/TR/SVG/linking.html#processingIRI +exports.referencesProps = [ + 'clip-path', + 'color-profile', + 'fill', + 'filter', + 'marker-start', + 'marker-mid', + 'marker-end', + 'mask', + 'stroke' +]; + +// http://www.w3.org/TR/SVG/styling.html#SVGStylingProperties +exports.stylingProps = [ + 'font', + 'font-family', + 'font-size', + 'font-size-adjust', + 'font-stretch', + 'font-style', + 'font-variant', + 'font-weight', + 'direction', + 'letter-spacing', + 'text-decoration', + 'unicode-bidi', + 'white-space', + 'word-spacing', + 'clip', + 'color', + 'cursor', + 'display', + 'overflow', + 'visibility', + 'clip-path', + 'clip-rule', + 'mask', + 'opacity', + 'enable-background', + 'filter', + 'flood-color', + 'flood-opacity', + 'lighting-color', + 'solid-color', + 'solid-opacity', + 'stop-color', + 'stop-opacity', + 'pointer-events', + 'buffered-rendering', + 'color-interpolation', + 'color-interpolation-filters', + 'color-profile', + 'color-rendering', + 'fill', + 'fill-opacity', + 'fill-rule', + 'image-rendering', + 'marker', + 'marker-end', + 'marker-mid', + 'marker-start', + 'shape-rendering', + 'stroke', + 'stroke-dasharray', + 'stroke-dashoffset', + 'stroke-linecap', + 'stroke-linejoin', + 'stroke-miterlimit', + 'stroke-opacity', + 'stroke-width', + 'paint-order', + 'vector-effect', + 'viewport-fill', + 'viewport-fill-opacity', + 'text-rendering', + 'alignment-baseline', + 'baseline-shift', + 'dominant-baseline', + 'glyph-orientation-horizontal', + 'glyph-orientation-vertical', + 'kerning', + 'text-anchor', + 'writing-mode' +]; + +// http://www.w3.org/TR/SVG/propidx.html +exports.inheritableAttrs = [ + 'clip-rule', + 'color', + 'color-interpolation', + 'color-interpolation-filters', + 'color-profile', + 'color-rendering', + 'cursor', + 'direction', + 'fill', + 'fill-opacity', + 'fill-rule', + 'font', + 'font-family', + 'font-size', + 'font-size-adjust', + 'font-stretch', + 'font-style', + 'font-variant', + 'font-weight', + 'glyph-orientation-horizontal', + 'glyph-orientation-vertical', + 'image-rendering', + 'kerning', + 'letter-spacing', + 'marker', + 'marker-end', + 'marker-mid', + 'marker-start', + 'pointer-events', + 'shape-rendering', + 'stroke', + 'stroke-dasharray', + 'stroke-dashoffset', + 'stroke-linecap', + 'stroke-linejoin', + 'stroke-miterlimit', + 'stroke-opacity', + 'stroke-width', + 'text-anchor', + 'text-rendering', + 'transform', + 'visibility', + 'white-space', + 'word-spacing', + 'writing-mode' +]; + +// http://www.w3.org/TR/SVG/single-page.html#types-ColorKeywords +exports.colorsNames = { + 'aliceblue': '#f0f8ff', + 'antiquewhite': '#faebd7', + 'aqua': '#0ff', + 'aquamarine': '#7fffd4', + 'azure': '#f0ffff', + 'beige': '#f5f5dc', + 'bisque': '#ffe4c4', + 'black': '#000', + 'blanchedalmond': '#ffebcd', + 'blue': '#00f', + 'blueviolet': '#8a2be2', + 'brown': '#a52a2a', + 'burlywood': '#deb887', + 'cadetblue': '#5f9ea0', + 'chartreuse': '#7fff00', + 'chocolate': '#d2691e', + 'coral': '#ff7f50', + 'cornflowerblue': '#6495ed', + 'cornsilk': '#fff8dc', + 'crimson': '#dc143c', + 'cyan': '#0ff', + 'darkblue': '#00008b', + 'darkcyan': '#008b8b', + 'darkgoldenrod': '#b8860b', + 'darkgray': '#a9a9a9', + 'darkgreen': '#006400', + 'darkkhaki': '#bdb76b', + 'darkmagenta': '#8b008b', + 'darkolivegreen': '#556b2f', + 'darkorange': '#ff8c00', + 'darkorchid': '#9932cc', + 'darkred': '#8b0000', + 'darksalmon': '#e9967a', + 'darkseagreen': '#8fbc8f', + 'darkslateblue': '#483d8b', + 'darkslategray': '#2f4f4f', + 'darkturquoise': '#00ced1', + 'darkviolet': '#9400d3', + 'deeppink': '#ff1493', + 'deepskyblue': '#00bfff', + 'dimgray': '#696969', + 'dodgerblue': '#1e90ff', + 'firebrick': '#b22222', + 'floralwhite': '#fffaf0', + 'forestgreen': '#228b22', + 'fuchsia': '#f0f', + 'gainsboro': '#dcdcdc', + 'ghostwhite': '#f8f8ff', + 'gold': '#ffd700', + 'goldenrod': '#daa520', + 'gray': '#808080', + 'green': '#008000', + 'greenyellow': '#adff2f', + 'honeydew': '#f0fff0', + 'hotpink': '#ff69b4', + 'indianred': '#cd5c5c', + 'indigo': '#4b0082', + 'ivory': '#fffff0', + 'khaki': '#f0e68c', + 'lavender': '#e6e6fa', + 'lavenderblush': '#fff0f5', + 'lawngreen': '#7cfc00', + 'lemonchiffon': '#fffacd', + 'lightblue': '#add8e6', + 'lightcoral': '#f08080', + 'lightcyan': '#e0ffff', + 'lightgoldenrodyellow': '#fafad2', + 'lightgreen': '#90ee90', + 'lightgrey': '#d3d3d3', + 'lightpink': '#ffb6c1', + 'lightsalmon': '#ffa07a', + 'lightseagreen': '#20b2aa', + 'lightskyblue': '#87cefa', + 'lightslategray': '#789', + 'lightsteelblue': '#b0c4de', + 'lightyellow': '#ffffe0', + 'lime': '#0f0', + 'limegreen': '#32cd32', + 'linen': '#faf0e6', + 'magenta': '#f0f', + 'maroon': '#800000', + 'mediumaquamarine': '#66cdaa', + 'mediumblue': '#0000cd', + 'mediumorchid': '#ba55d3', + 'mediumpurple': '#9370db', + 'mediumseagreen': '#3cb371', + 'mediumslateblue': '#7b68ee', + 'mediumspringgreen': '#00fa9a', + 'mediumturquoise': '#48d1cc', + 'mediumvioletred': '#c71585', + 'midnightblue': '#191970', + 'mintcream': '#f5fffa', + 'mistyrose': '#ffe4e1', + 'moccasin': '#ffe4b5', + 'navajowhite': '#ffdead', + 'navy': '#000080', + 'oldlace': '#fdf5e6', + 'olive': '#808000', + 'olivedrab': '#6b8e23', + 'orange': '#ffa500', + 'orangered': '#ff4500', + 'orchid': '#da70d6', + 'palegoldenrod': '#eee8aa', + 'palegreen': '#98fb98', + 'paleturquoise': '#afeeee', + 'palevioletred': '#db7093', + 'papayawhip': '#ffefd5', + 'peachpuff': '#ffdab9', + 'peru': '#cd853f', + 'pink': '#ffc0cb', + 'plum': '#dda0dd', + 'powderblue': '#b0e0e6', + 'purple': '#800080', + 'red': '#f00', + 'rosybrown': '#bc8f8f', + 'royalblue': '#4169e1', + 'saddlebrown': '#8b4513', + 'salmon': '#fa8072', + 'sandybrown': '#f4a460', + 'seagreen': '#2e8b57', + 'seashell': '#fff5ee', + 'sienna': '#a0522d', + 'silver': '#c0c0c0', + 'skyblue': '#87ceeb', + 'slateblue': '#6a5acd', + 'slategray': '#708090', + 'snow': '#fffafa', + 'springgreen': '#00ff7f', + 'steelblue': '#4682b4', + 'tan': '#d2b48c', + 'teal': '#008080', + 'thistle': '#d8bfd8', + 'tomato': '#ff6347', + 'turquoise': '#40e0d0', + 'violet': '#ee82ee', + 'wheat': '#f5deb3', + 'white': '#fff', + 'whitesmoke': '#f5f5f5', + 'yellow': '#ff0', + 'yellowgreen': '#9acd32' +}; + +exports.colorsShortNames = { + '#f0ffff': 'azure', + '#f5f5dc': 'beige', + '#ffe4c4': 'bisque', + '#a52a2a': 'brown', + '#ff7f50': 'coral', + '#ffd700': 'gold', + '#808080': 'gray', + '#008000': 'green', + '#4b0082': 'indigo', + '#fffff0': 'ivory', + '#f0e68c': 'khaki', + '#faf0e6': 'linen', + '#800000': 'maroon', + '#000080': 'navy', + '#808000': 'olive', + '#ffa500': 'orange', + '#da70d6': 'orchid', + '#cd853f': 'peru', + '#ffc0cb': 'pink', + '#dda0dd': 'plum', + '#800080': 'purple', + '#f00': 'red', + '#fa8072': 'salmon', + '#a0522d': 'sienna', + '#c0c0c0': 'silver', + '#fffafa': 'snow', + '#d2b48c': 'tan', + '#008080': 'teal', + '#ff6347': 'tomato', + '#ee82ee': 'violet', + '#f5deb3': 'wheat' +}; + +// http://www.w3.org/TR/SVG/single-page.html#types-DataTypeColor +exports.colorsProps = [ + 'color', 'fill', 'stroke', 'stop-color', 'flood-color', 'lighting-color' +]; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/plugins/_path.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/plugins/_path.js new file mode 100644 index 00000000..34c51f0c --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/plugins/_path.js @@ -0,0 +1,947 @@ +/* global a2c */ +'use strict'; + +var regPathInstructions = /([MmLlHhVvCcSsQqTtAaZz])\s*/, + regPathData = /[-+]?(?:\d*\.\d+|\d+\.?)([eE][-+]?\d+)?/g, + regNumericValues = /[-+]?(\d*\.\d+|\d+\.?)(?:[eE][-+]?\d+)?/, + transform2js = require('./_transforms').transform2js, + transformsMultiply = require('./_transforms').transformsMultiply, + transformArc = require('./_transforms').transformArc, + collections = require('./_collections.js'), + referencesProps = collections.referencesProps, + defaultStrokeWidth = collections.attrsGroupsDefaults.presentation['stroke-width'], + cleanupOutData = require('../lib/svgo/tools').cleanupOutData, + removeLeadingZero = require('../lib/svgo/tools').removeLeadingZero, + prevCtrlPoint; + +/** + * Convert path string to JS representation. + * + * @param {String} pathString input string + * @param {Object} params plugin params + * @return {Array} output array + */ +exports.path2js = function(path) { + if (path.pathJS) return path.pathJS; + + var paramsLength = { // Number of parameters of every path command + H: 1, V: 1, M: 2, L: 2, T: 2, Q: 4, S: 4, C: 6, A: 7, + h: 1, v: 1, m: 2, l: 2, t: 2, q: 4, s: 4, c: 6, a: 7 + }, + pathData = [], // JS representation of the path data + instruction, // current instruction context + startMoveto = false; + + // splitting path string into array like ['M', '10 50', 'L', '20 30'] + path.attr('d').value.split(regPathInstructions).forEach(function(data) { + if (!data) return; + if (!startMoveto) { + if (data == 'M' || data == 'm') { + startMoveto = true; + } else return; + } + + // instruction item + if (regPathInstructions.test(data)) { + instruction = data; + + // z - instruction w/o data + if (instruction == 'Z' || instruction == 'z') { + pathData.push({ + instruction: 'z' + }); + } + // data item + } else { + data = data.match(regPathData); + if (!data) return; + + data = data.map(Number); + + // Subsequent moveto pairs of coordinates are threated as implicit lineto commands + // http://www.w3.org/TR/SVG/paths.html#PathDataMovetoCommands + if (instruction == 'M' || instruction == 'm') { + pathData.push({ + instruction: pathData.length == 0 ? 'M' : instruction, + data: data.splice(0, 2) + }); + instruction = instruction == 'M' ? 'L' : 'l'; + } + + for (var pair = paramsLength[instruction]; data.length;) { + pathData.push({ + instruction: instruction, + data: data.splice(0, pair) + }); + } + } + }); + + // First moveto is actually absolute. Subsequent coordinates were separated above. + if (pathData.length && pathData[0].instruction == 'm') { + pathData[0].instruction = 'M'; + } + path.pathJS = pathData; + + return pathData; +}; + +/** + * Convert relative Path data to absolute. + * + * @param {Array} data input data + * @return {Array} output data + */ +var relative2absolute = exports.relative2absolute = function(data) { + var currentPoint = [0, 0], + subpathPoint = [0, 0], + i; + + data = data.map(function(item) { + + var instruction = item.instruction, + itemData = item.data && item.data.slice(); + + if (instruction == 'M') { + + set(currentPoint, itemData); + set(subpathPoint, itemData); + + } else if ('mlcsqt'.indexOf(instruction) > -1) { + + for (i = 0; i < itemData.length; i++) { + itemData[i] += currentPoint[i % 2]; + } + set(currentPoint, itemData); + + if (instruction == 'm') { + set(subpathPoint, itemData); + } + + } else if (instruction == 'a') { + + itemData[5] += currentPoint[0]; + itemData[6] += currentPoint[1]; + set(currentPoint, itemData); + + } else if (instruction == 'h') { + + itemData[0] += currentPoint[0]; + currentPoint[0] = itemData[0]; + + } else if (instruction == 'v') { + + itemData[0] += currentPoint[1]; + currentPoint[1] = itemData[0]; + + } else if ('MZLCSQTA'.indexOf(instruction) > -1) { + + set(currentPoint, itemData); + + } else if (instruction == 'H') { + + currentPoint[0] = itemData[0]; + + } else if (instruction == 'V') { + + currentPoint[1] = itemData[0]; + + } else if (instruction == 'z') { + + set(currentPoint, subpathPoint); + + } + + return instruction == 'z' ? + { instruction: 'z' } : + { + instruction: instruction.toUpperCase(), + data: itemData + }; + + }); + + return data; +}; + +/** + * Apply transformation(s) to the Path data. + * + * @param {Object} elem current element + * @param {Array} path input path data + * @param {Object} params whether to apply transforms to stroked lines and transform precision (used for stroke width) + * @return {Array} output path data + */ +exports.applyTransforms = function(elem, path, params) { + // if there are no 'stroke' attr and references to other objects such as + // gradiends or clip-path which are also subjects to transform. + if (!elem.hasAttr('transform') || + elem.someAttr(function(attr) { + return ~referencesProps.indexOf(attr.name) && ~attr.value.indexOf('url('); + })) + return path; + + var matrix = transformsMultiply(transform2js(elem.attr('transform').value)), + stroke = elem.computedAttr('stroke'), + transformPrecision = params.transformPrecision, + newPoint, scale; + + if (stroke && stroke.value != 'none') { + if (!params.applyTransformsStroked || + (matrix.data[0] != matrix.data[3] || matrix.data[1] != -matrix.data[2]) && + (matrix.data[0] != -matrix.data[3] || matrix.data[1] != matrix.data[2])) + return path; + + scale = +Math.sqrt(matrix.data[0] * matrix.data[0] + matrix.data[1] * matrix.data[1]).toFixed(transformPrecision); + + if (scale !== 1) { + var strokeWidth = elem.computedAttr('stroke-width') || defaultStrokeWidth; + + if (elem.hasAttr('stroke-width')) { + elem.attrs['stroke-width'].value = elem.attrs['stroke-width'].value.trim() + .replace(regNumericValues, function(num) { return removeLeadingZero(num * scale) }); + } else { + elem.addAttr({ + name: 'stroke-width', + prefix: '', + local: 'stroke-width', + value: strokeWidth.replace(regNumericValues, function(num) { return removeLeadingZero(num * scale) }) + }); + } + } + } + + path.forEach(function(pathItem) { + + if (pathItem.data) { + + // h -> l + if (pathItem.instruction === 'h') { + + pathItem.instruction = 'l'; + pathItem.data[1] = 0; + + // v -> l + } else if (pathItem.instruction === 'v') { + + pathItem.instruction = 'l'; + pathItem.data[1] = pathItem.data[0]; + pathItem.data[0] = 0; + + } + + // if there is a translate() transform + if (pathItem.instruction === 'M' && + (matrix.data[4] !== 0 || + matrix.data[5] !== 0) + ) { + + // then apply it only to the first absoluted M + newPoint = transformPoint(matrix.data, pathItem.data[0], pathItem.data[1]); + set(pathItem.data, newPoint); + set(pathItem.coords, newPoint); + + // clear translate() data from transform matrix + matrix.data[4] = 0; + matrix.data[5] = 0; + + } else { + + if (pathItem.instruction == 'a') { + + transformArc(pathItem.data, matrix.data); + + // reduce number of digits in rotation angle + if (Math.abs(pathItem.data[2]) > 80) { + var a = pathItem.data[0], + rotation = pathItem.data[2]; + pathItem.data[0] = pathItem.data[1]; + pathItem.data[1] = a; + pathItem.data[2] = rotation + (rotation > 0 ? -90 : 90); + } + + newPoint = transformPoint(matrix.data, pathItem.data[5], pathItem.data[6]); + pathItem.data[5] = newPoint[0]; + pathItem.data[6] = newPoint[1]; + + } else { + + for (var i = 0; i < pathItem.data.length; i += 2) { + newPoint = transformPoint(matrix.data, pathItem.data[i], pathItem.data[i + 1]); + pathItem.data[i] = newPoint[0]; + pathItem.data[i + 1] = newPoint[1]; + } + } + + pathItem.coords[0] = pathItem.base[0] + pathItem.data[pathItem.data.length - 2]; + pathItem.coords[1] = pathItem.base[1] + pathItem.data[pathItem.data.length - 1]; + + } + + } + + }); + + // remove transform attr + elem.removeAttr('transform'); + + return path; +}; + +/** + * Apply transform 3x3 matrix to x-y point. + * + * @param {Array} matrix transform 3x3 matrix + * @param {Array} point x-y point + * @return {Array} point with new coordinates + */ +function transformPoint(matrix, x, y) { + + return [ + matrix[0] * x + matrix[2] * y + matrix[4], + matrix[1] * x + matrix[3] * y + matrix[5] + ]; + +} + +/** + * Compute Cubic Bézie bounding box. + * + * @see http://processingjs.nihongoresources.com/bezierinfo/ + * + * @param {Float} xa + * @param {Float} ya + * @param {Float} xb + * @param {Float} yb + * @param {Float} xc + * @param {Float} yc + * @param {Float} xd + * @param {Float} yd + * + * @return {Object} + */ +exports.computeCubicBoundingBox = function(xa, ya, xb, yb, xc, yc, xd, yd) { + + var minx = Number.POSITIVE_INFINITY, + miny = Number.POSITIVE_INFINITY, + maxx = Number.NEGATIVE_INFINITY, + maxy = Number.NEGATIVE_INFINITY, + ts, + t, + x, + y, + i; + + // X + if (xa < minx) { minx = xa; } + if (xa > maxx) { maxx = xa; } + if (xd < minx) { minx= xd; } + if (xd > maxx) { maxx = xd; } + + ts = computeCubicFirstDerivativeRoots(xa, xb, xc, xd); + + for (i = 0; i < ts.length; i++) { + + t = ts[i]; + + if (t >= 0 && t <= 1) { + x = computeCubicBaseValue(t, xa, xb, xc, xd); + // y = computeCubicBaseValue(t, ya, yb, yc, yd); + + if (x < minx) { minx = x; } + if (x > maxx) { maxx = x; } + } + + } + + // Y + if (ya < miny) { miny = ya; } + if (ya > maxy) { maxy = ya; } + if (yd < miny) { miny = yd; } + if (yd > maxy) { maxy = yd; } + + ts = computeCubicFirstDerivativeRoots(ya, yb, yc, yd); + + for (i = 0; i < ts.length; i++) { + + t = ts[i]; + + if (t >= 0 && t <= 1) { + // x = computeCubicBaseValue(t, xa, xb, xc, xd); + y = computeCubicBaseValue(t, ya, yb, yc, yd); + + if (y < miny) { miny = y; } + if (y > maxy) { maxy = y; } + } + + } + + return { + minx: minx, + miny: miny, + maxx: maxx, + maxy: maxy + }; + +}; + +// compute the value for the cubic bezier function at time=t +function computeCubicBaseValue(t, a, b, c, d) { + + var mt = 1 - t; + + return mt * mt * mt * a + 3 * mt * mt * t * b + 3 * mt * t * t * c + t * t * t * d; + +} + +// compute the value for the first derivative of the cubic bezier function at time=t +function computeCubicFirstDerivativeRoots(a, b, c, d) { + + var result = [-1, -1], + tl = -a + 2 * b - c, + tr = -Math.sqrt(-a * (c - d) + b * b - b * (c + d) + c * c), + dn = -a + 3 * b - 3 * c + d; + + if (dn !== 0) { + result[0] = (tl + tr) / dn; + result[1] = (tl - tr) / dn; + } + + return result; + +} + +/** + * Compute Quadratic Bézier bounding box. + * + * @see http://processingjs.nihongoresources.com/bezierinfo/ + * + * @param {Float} xa + * @param {Float} ya + * @param {Float} xb + * @param {Float} yb + * @param {Float} xc + * @param {Float} yc + * + * @return {Object} + */ +exports.computeQuadraticBoundingBox = function(xa, ya, xb, yb, xc, yc) { + + var minx = Number.POSITIVE_INFINITY, + miny = Number.POSITIVE_INFINITY, + maxx = Number.NEGATIVE_INFINITY, + maxy = Number.NEGATIVE_INFINITY, + t, + x, + y; + + // X + if (xa < minx) { minx = xa; } + if (xa > maxx) { maxx = xa; } + if (xc < minx) { minx = xc; } + if (xc > maxx) { maxx = xc; } + + t = computeQuadraticFirstDerivativeRoot(xa, xb, xc); + + if (t >= 0 && t <= 1) { + x = computeQuadraticBaseValue(t, xa, xb, xc); + // y = computeQuadraticBaseValue(t, ya, yb, yc); + + if (x < minx) { minx = x; } + if (x > maxx) { maxx = x; } + } + + // Y + if (ya < miny) { miny = ya; } + if (ya > maxy) { maxy = ya; } + if (yc < miny) { miny = yc; } + if (yc > maxy) { maxy = yc; } + + t = computeQuadraticFirstDerivativeRoot(ya, yb, yc); + + if (t >= 0 && t <=1 ) { + // x = computeQuadraticBaseValue(t, xa, xb, xc); + y = computeQuadraticBaseValue(t, ya, yb, yc); + + if (y < miny) { miny = y; } + if (y > maxy) { maxy = y ; } + + } + + return { + minx: minx, + miny: miny, + maxx: maxx, + maxy: maxy + }; + +}; + +// compute the value for the quadratic bezier function at time=t +function computeQuadraticBaseValue(t, a, b, c) { + + var mt = 1 - t; + + return mt * mt * a + 2 * mt * t * b + t * t * c; + +} + +// compute the value for the first derivative of the quadratic bezier function at time=t +function computeQuadraticFirstDerivativeRoot(a, b, c) { + + var t = -1, + denominator = a - 2 * b + c; + + if (denominator !== 0) { + t = (a - b) / denominator; + } + + return t; + +} + +/** + * Convert path array to string. + * + * @param {Array} path input path data + * @param {Object} params plugin params + * @return {String} output path string + */ +exports.js2path = function(path, data, params) { + + path.pathJS = data; + + if (params.collapseRepeated) { + data = collapseRepeated(data); + } + + path.attr('d').value = data.reduce(function(pathString, item) { + return pathString += item.instruction + (item.data ? cleanupOutData(item.data, params) : ''); + }, ''); + +}; + +/** + * Collapse repeated instructions data + * + * @param {Array} path input path data + * @return {Array} output path data + */ +function collapseRepeated(data) { + + var prev, + prevIndex; + + // copy an array and modifieds item to keep original data untouched + data = data.reduce(function(newPath, item) { + if ( + prev && item.data && + item.instruction == prev.instruction + ) { + // concat previous data with current + if (item.instruction != 'M') { + prev = newPath[prevIndex] = { + instruction: prev.instruction, + data: prev.data.concat(item.data), + coords: item.coords, + base: prev.base + }; + } else { + prev.data = item.data; + prev.coords = item.coords; + } + } else { + newPath.push(item); + prev = item; + prevIndex = newPath.length - 1; + } + + return newPath; + }, []); + + return data; + +} + +function set(dest, source) { + dest[0] = source[source.length - 2]; + dest[1] = source[source.length - 1]; + return dest; +} + +/** + * Checks if two paths have an intersection by checking convex hulls + * collision using Gilbert-Johnson-Keerthi distance algorithm + * http://entropyinteractive.com/2011/04/gjk-algorithm/ + * + * @param {Array} path1 JS path representation + * @param {Array} path2 JS path representation + * @return {Boolean} + */ +exports.intersects = function(path1, path2) { + if (path1.length < 3 || path2.length < 3) return false; // nothing to fill + + // Collect points of every subpath. + var points1 = relative2absolute(path1).reduce(gatherPoints, []), + points2 = relative2absolute(path2).reduce(gatherPoints, []); + + // Axis-aligned bounding box check. + if (points1.maxX <= points2.minX || points2.maxX <= points1.minX || + points1.maxY <= points2.minY || points2.maxY <= points1.minY || + points1.every(function (set1) { + return points2.every(function (set2) { + return set1[set1.maxX][0] <= set2[set2.minX][0] || + set2[set2.maxX][0] <= set1[set1.minX][0] || + set1[set1.maxY][1] <= set2[set2.minY][1] || + set2[set2.maxY][1] <= set1[set1.minY][1]; + }); + }) + ) return false; + + // Get a convex hull from points of each subpath. Has the most complexity O(n·log n). + var hullNest1 = points1.map(convexHull), + hullNest2 = points2.map(convexHull); + + // Check intersection of every subpath of the first path with every subpath of the second. + return hullNest1.some(function(hull1) { + if (hull1.length < 3) return false; + + return hullNest2.some(function(hull2) { + if (hull2.length < 3) return false; + + var simplex = [getSupport(hull1, hull2, [1, 0])], // create the initial simplex + direction = minus(simplex[0]); // set the direction to point towards the origin + + var iterations = 1e4; // infinite loop protection, 10 000 iterations is more than enough + while (true) { + if (iterations-- == 0) { + console.error('Error: infinite loop while processing mergePaths plugin.'); + return true; // true is the safe value that means “do nothing with paths†+ } + // add a new point + simplex.push(getSupport(hull1, hull2, direction)); + // see if the new point was on the correct side of the origin + if (dot(direction, simplex[simplex.length - 1]) <= 0) return false; + // process the simplex + if (processSimplex(simplex, direction)) return true; + } + }); + }); + + function getSupport(a, b, direction) { + return sub(supportPoint(a, direction), supportPoint(b, minus(direction))); + } + + // Computes farthest polygon point in particular direction. + // Thanks to knowledge of min/max x and y coordinates we can choose a quadrant to search in. + // Since we're working on convex hull, the dot product is increasing until we find the farthest point. + function supportPoint(polygon, direction) { + var index = direction[1] >= 0 ? + direction[0] < 0 ? polygon.maxY : polygon.maxX : + direction[0] < 0 ? polygon.minX : polygon.minY, + max = -Infinity, + value; + while ((value = dot(polygon[index], direction)) > max) { + max = value; + index = ++index % polygon.length; + } + return polygon[(index || polygon.length) - 1]; + } +}; + +function processSimplex(simplex, direction) { + /* jshint -W004 */ + + // we only need to handle to 1-simplex and 2-simplex + if (simplex.length == 2) { // 1-simplex + var a = simplex[1], + b = simplex[0], + AO = minus(simplex[1]), + AB = sub(b, a); + // AO is in the same direction as AB + if (dot(AO, AB) > 0) { + // get the vector perpendicular to AB facing O + set(direction, orth(AB, a)); + } else { + set(direction, AO); + // only A remains in the simplex + simplex.shift(); + } + } else { // 2-simplex + var a = simplex[2], // [a, b, c] = simplex + b = simplex[1], + c = simplex[0], + AB = sub(b, a), + AC = sub(c, a), + AO = minus(a), + ACB = orth(AB, AC), // the vector perpendicular to AB facing away from C + ABC = orth(AC, AB); // the vector perpendicular to AC facing away from B + + if (dot(ACB, AO) > 0) { + if (dot(AB, AO) > 0) { // region 4 + set(direction, ACB); + simplex.shift(); // simplex = [b, a] + } else { // region 5 + set(direction, AO); + simplex.splice(0, 2); // simplex = [a] + } + } else if (dot(ABC, AO) > 0) { + if (dot(AC, AO) > 0) { // region 6 + set(direction, ABC); + simplex.splice(1, 1); // simplex = [c, a] + } else { // region 5 (again) + set(direction, AO); + simplex.splice(0, 2); // simplex = [a] + } + } else // region 7 + return true; + } + return false; +} + +function minus(v) { + return [-v[0], -v[1]]; +} + +function sub(v1, v2) { + return [v1[0] - v2[0], v1[1] - v2[1]]; +} + +function dot(v1, v2) { + return v1[0] * v2[0] + v1[1] * v2[1]; +} + +function orth(v, from) { + var o = [-v[1], v[0]]; + return dot(o, minus(from)) < 0 ? minus(o) : o; +} + +function gatherPoints(points, item, index, path) { + + var subPath = points.length && points[points.length - 1], + prev = index && path[index - 1], + basePoint = subPath.length && subPath[subPath.length - 1], + data = item.data, + ctrlPoint = basePoint; + + switch (item.instruction) { + case 'M': + points.push(subPath = []); + break; + case 'H': + addPoint(subPath, [data[0], basePoint[1]]); + break; + case 'V': + addPoint(subPath, [basePoint[0], data[0]]); + break; + case 'Q': + addPoint(subPath, data.slice(0, 2)); + prevCtrlPoint = [data[2] - data[0], data[3] - data[1]]; // Save control point for shorthand + break; + case 'T': + if (prev.instruction == 'Q' && prev.instruction == 'T') { + ctrlPoint = [basePoint[0] + prevCtrlPoint[0], basePoint[1] + prevCtrlPoint[1]]; + addPoint(subPath, ctrlPoint); + prevCtrlPoint = [data[0] - ctrlPoint[0], data[1] - ctrlPoint[1]]; + } + break; + case 'C': + // Approximate quibic Bezier curve with middle points between control points + addPoint(subPath, [.5 * (basePoint[0] + data[0]), .5 * (basePoint[1] + data[1])]); + addPoint(subPath, [.5 * (data[0] + data[2]), .5 * (data[1] + data[3])]); + addPoint(subPath, [.5 * (data[2] + data[4]), .5 * (data[3] + data[5])]); + prevCtrlPoint = [data[4] - data[2], data[5] - data[3]]; // Save control point for shorthand + break; + case 'S': + if (prev.instruction == 'C' && prev.instruction == 'S') { + addPoint(subPath, [basePoint[0] + .5 * prevCtrlPoint[0], basePoint[1] + .5 * prevCtrlPoint[1]]); + ctrlPoint = [basePoint[0] + prevCtrlPoint[0], basePoint[1] + prevCtrlPoint[1]]; + } + addPoint(subPath, [.5 * (ctrlPoint[0] + data[0]), .5 * (ctrlPoint[1]+ data[1])]); + addPoint(subPath, [.5 * (data[0] + data[2]), .5 * (data[1] + data[3])]); + prevCtrlPoint = [data[2] - data[0], data[3] - data[1]]; + break; + case 'A': + // Convert the arc to bezier curves and use the same approximation + var curves = a2c.apply(0, basePoint.concat(data)); + for (var cData; (cData = curves.splice(0,6).map(toAbsolute)).length;) { + addPoint(subPath, [.5 * (basePoint[0] + cData[0]), .5 * (basePoint[1] + cData[1])]); + addPoint(subPath, [.5 * (cData[0] + cData[2]), .5 * (cData[1] + cData[3])]); + addPoint(subPath, [.5 * (cData[2] + cData[4]), .5 * (cData[3] + cData[5])]); + if (curves.length) addPoint(subPath, basePoint = cData.slice(-2)); + } + break; + } + // Save final command coordinates + if (data && data.length >= 2) addPoint(subPath, data.slice(-2)); + return points; + + function toAbsolute(n, i) { return n + basePoint[i % 2] } + + // Writes data about the extreme points on each axle + function addPoint(path, point) { + if (!path.length || point[1] > path[path.maxY][1]) { + path.maxY = path.length; + points.maxY = points.length ? Math.max(point[1], points.maxY) : point[1]; + } + if (!path.length || point[0] > path[path.maxX][0]) { + path.maxX = path.length; + points.maxX = points.length ? Math.max(point[0], points.maxX) : point[0]; + } + if (!path.length || point[1] < path[path.minY][1]) { + path.minY = path.length; + points.minY = points.length ? Math.min(point[1], points.minY) : point[1]; + } + if (!path.length || point[0] < path[path.minX][0]) { + path.minX = path.length; + points.minX = points.length ? Math.min(point[0], points.minX) : point[0]; + } + path.push(point); + } +} + +/** + * Forms a convex hull from set of points of every subpath using monotone chain convex hull algorithm. + * http://en.wikibooks.org/wiki/Algorithm_Implementation/Geometry/Convex_hull/Monotone_chain + * + * @param points An array of [X, Y] coordinates + */ +function convexHull(points) { + /* jshint -W004 */ + + points.sort(function(a, b) { + return a[0] == b[0] ? a[1] - b[1] : a[0] - b[0]; + }); + + var lower = [], + minY = 0, + bottom = 0; + for (var i = 0; i < points.length; i++) { + while (lower.length >= 2 && cross(lower[lower.length - 2], lower[lower.length - 1], points[i]) <= 0) { + lower.pop(); + } + if (points[i][1] < points[minY][1]) { + minY = i; + bottom = lower.length; + } + lower.push(points[i]); + } + + var upper = [], + maxY = points.length - 1, + top = 0; + for (var i = points.length; i--;) { + while (upper.length >= 2 && cross(upper[upper.length - 2], upper[upper.length - 1], points[i]) <= 0) { + upper.pop(); + } + if (points[i][1] > points[maxY][1]) { + maxY = i; + top = upper.length; + } + upper.push(points[i]); + } + + // last points are equal to starting points of the other part + upper.pop(); + lower.pop(); + + var hull = lower.concat(upper); + + hull.minX = 0; // by sorting + hull.maxX = lower.length; + hull.minY = bottom; + hull.maxY = (lower.length + top) % hull.length; + + return hull; +} + +function cross(o, a, b) { + return (a[0] - o[0]) * (b[1] - o[1]) - (a[1] - o[1]) * (b[0] - o[0]); +} + +/* Based on code from Snap.svg (Apache 2 license). http://snapsvg.io/ + * Thanks to Dmitry Baranovskiy for his great work! + */ + +// jshint ignore: start +function a2c(x1, y1, rx, ry, angle, large_arc_flag, sweep_flag, x2, y2, recursive) { + // for more information of where this Math came from visit: + // http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes + var _120 = Math.PI * 120 / 180, + rad = Math.PI / 180 * (+angle || 0), + res = [], + rotateX = function(x, y, rad) { return x * Math.cos(rad) - y * Math.sin(rad) }, + rotateY = function(x, y, rad) { return x * Math.sin(rad) + y * Math.cos(rad) }; + if (!recursive) { + x1 = rotateX(x1, y1, -rad); + y1 = rotateY(x1, y1, -rad); + x2 = rotateX(x2, y2, -rad); + y2 = rotateY(x2, y2, -rad); + var x = (x1 - x2) / 2, + y = (y1 - y2) / 2; + var h = (x * x) / (rx * rx) + (y * y) / (ry * ry); + if (h > 1) { + h = Math.sqrt(h); + rx = h * rx; + ry = h * ry; + } + var rx2 = rx * rx, + ry2 = ry * ry, + k = (large_arc_flag == sweep_flag ? -1 : 1) * + Math.sqrt(Math.abs((rx2 * ry2 - rx2 * y * y - ry2 * x * x) / (rx2 * y * y + ry2 * x * x))), + cx = k * rx * y / ry + (x1 + x2) / 2, + cy = k * -ry * x / rx + (y1 + y2) / 2, + f1 = Math.asin(((y1 - cy) / ry).toFixed(9)), + f2 = Math.asin(((y2 - cy) / ry).toFixed(9)); + + f1 = x1 < cx ? Math.PI - f1 : f1; + f2 = x2 < cx ? Math.PI - f2 : f2; + f1 < 0 && (f1 = Math.PI * 2 + f1); + f2 < 0 && (f2 = Math.PI * 2 + f2); + if (sweep_flag && f1 > f2) { + f1 = f1 - Math.PI * 2; + } + if (!sweep_flag && f2 > f1) { + f2 = f2 - Math.PI * 2; + } + } else { + f1 = recursive[0]; + f2 = recursive[1]; + cx = recursive[2]; + cy = recursive[3]; + } + var df = f2 - f1; + if (Math.abs(df) > _120) { + var f2old = f2, + x2old = x2, + y2old = y2; + f2 = f1 + _120 * (sweep_flag && f2 > f1 ? 1 : -1); + x2 = cx + rx * Math.cos(f2); + y2 = cy + ry * Math.sin(f2); + res = a2c(x2, y2, rx, ry, angle, 0, sweep_flag, x2old, y2old, [f2, f2old, cx, cy]); + } + df = f2 - f1; + var c1 = Math.cos(f1), + s1 = Math.sin(f1), + c2 = Math.cos(f2), + s2 = Math.sin(f2), + t = Math.tan(df / 4), + hx = 4 / 3 * rx * t, + hy = 4 / 3 * ry * t, + m = [ + - hx * s1, hy * c1, + x2 + hx * s2 - x1, y2 - hy * c2 - y1, + x2 - x1, y2 - y1 + ]; + if (recursive) { + return m.concat(res); + } else { + res = m.concat(res); + var newres = []; + for (var i = 0, n = res.length; i < n; i++) { + newres[i] = i % 2 ? rotateY(res[i - 1], res[i], rad) : rotateX(res[i], res[i + 1], rad); + } + return newres; + } +} +// jshint ignore: end diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/plugins/_transforms.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/plugins/_transforms.js new file mode 100644 index 00000000..e251e246 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/plugins/_transforms.js @@ -0,0 +1,302 @@ +'use strict'; + +var regTransformTypes = /matrix|translate|scale|rotate|skewX|skewY/, + regTransformSplit = /\s*(matrix|translate|scale|rotate|skewX|skewY)\s*\(\s*(.+?)\s*\)[\s,]*/, + regTransformDataSplit = /[\s,]+/; + +/** + * Convert transform string to JS representation. + * + * @param {String} transformString input string + * @param {Object} params plugin params + * @return {Array} output array + */ +exports.transform2js = function(transformString) { + + // JS representation of the transform data + var transforms = [], + // current transform context + current; + + // split value into ['', 'translate', '10 50', '', 'scale', '2', '', 'rotate', '-45', ''] + transformString.split(regTransformSplit).forEach(function(item) { + + if (item) { + // if item is a translate function + if (regTransformTypes.test(item)) { + // then collect it and change current context + transforms.push(current = { name: item }); + // else if item is data + } else { + // then split it into [10, 50] and collect as context.data + current.data = item.split(regTransformDataSplit).map(Number); + } + } + + }); + + return transforms; + +}; + +/** + * Multiply transforms into one. + * + * @param {Array} input transforms array + * @return {Array} output matrix array + */ +exports.transformsMultiply = function(transforms) { + + // convert transforms objects to the matrices + transforms = transforms.map(function(transform) { + if (transform.name === 'matrix') { + return transform.data; + } + return transformToMatrix(transform); + }); + + // multiply all matrices into one + transforms = { + name: 'matrix', + data: transforms.reduce(function(a, b) { + return multiplyTransformMatrices(a, b); + }) + }; + + return transforms; + +}; + +/** + * Do math like a schoolgirl. + * + * @type {Object} + */ +var mth = exports.mth = { + + rad: function(deg) { + return deg * Math.PI / 180; + }, + + deg: function(rad) { + return rad * 180 / Math.PI; + }, + + cos: function(deg) { + return Math.cos(this.rad(deg)); + }, + + acos: function(val, floatPrecision) { + return +(this.deg(Math.acos(val)).toFixed(floatPrecision)); + }, + + sin: function(deg) { + return Math.sin(this.rad(deg)); + }, + + asin: function(val, floatPrecision) { + return +(this.deg(Math.asin(val)).toFixed(floatPrecision)); + }, + + tan: function(deg) { + return Math.tan(this.rad(deg)); + }, + + atan: function(val, floatPrecision) { + return +(this.deg(Math.atan(val)).toFixed(floatPrecision)); + } + +}; + +/** + * Decompose matrix into simple transforms. See + * http://www.maths-informatique-jeux.com/blog/frederic/?post/2013/12/01/Decomposition-of-2D-transform-matrices + * + * @param {Object} data matrix transform object + * @return {Object|Array} transforms array or original transform object + */ +exports.matrixToTransform = function(transform, params) { + var floatPrecision = params.floatPrecision, + data = transform.data, + transforms = [], + sx = +Math.sqrt(data[0] * data[0] + data[1] * data[1]).toFixed(params.transformPrecision), + sy = +((data[0] * data[3] - data[1] * data[2]) / sx).toFixed(params.transformPrecision), + colsSum = data[0] * data[2] + data[1] * data[3], + rowsSum = data[0] * data[1] + data[2] * data[3], + scaleBefore = rowsSum || +(sx == sy); + + // [..., ..., ..., ..., tx, ty] → translate(tx, ty) + if (data[4] || data[5]) { + transforms.push({ name: 'translate', data: data.slice(4, data[5] ? 6 : 5) }); + } + + // [sx, 0, tan(a)·sy, sy, 0, 0] → skewX(a)·scale(sx, sy) + if (!data[1] && data[2]) { + transforms.push({ name: 'skewX', data: [mth.atan(data[2] / sy, floatPrecision)] }); + + // [sx, sx·tan(a), 0, sy, 0, 0] → skewY(a)·scale(sx, sy) + } else if (data[1] && !data[2]) { + transforms.push({ name: 'skewY', data: [mth.atan(data[1] / data[0], floatPrecision)] }); + sx = data[0]; + sy = data[3]; + + // [sx·cos(a), sx·sin(a), sy·-sin(a), sy·cos(a), x, y] → rotate(a[, cx, cy])·(scale or skewX) or + // [sx·cos(a), sy·sin(a), sx·-sin(a), sy·cos(a), x, y] → scale(sx, sy)·rotate(a[, cx, cy]) (if !scaleBefore) + } else if (!colsSum || (sx == 1 && sy == 1) || !scaleBefore) { + if (!scaleBefore) { + sx = Math.sqrt(data[0] * data[0] + data[2] * data[2]); + sy = Math.sqrt(data[1] * data[1] + data[3] * data[3]); + transforms.push({ name: 'scale', data: [sx, sy] }); + } + var a1 = mth.acos(data[0] / sx, floatPrecision), + rotate = [a1.toFixed(floatPrecision) * (data[1] < 0 ? -1 : 1)]; + + if (rotate[0]) transforms.push({ name: 'rotate', data: rotate }); + + if (rowsSum && colsSum) transforms.push({ + name: 'skewX', + data: [mth.atan(colsSum / (sx * sx), floatPrecision)] + }); + + // rotate(a, cx, cy) can consume translate() within optional arguments cx, cy (rotation point) + if (rotate[0] && (data[4] || data[5])) { + transforms.shift(); + var cos = data[0] / sx, + sin = data[1] / (scaleBefore ? sx : sy), + x = data[4] * (scaleBefore || sy), + y = data[5] * (scaleBefore || sx), + denom = (Math.pow(1 - cos, 2) + Math.pow(sin, 2)) * (scaleBefore || sx * sy); + rotate.push(((1 - cos) * x - sin * y) / denom); + rotate.push(((1 - cos) * y + sin * x) / denom); + } + + // Too many transformations, return original matrix if it isn't just a scale/translate + } else if (data[1] || data[2]) { + return transform; + } + + if (scaleBefore && (sx != 1 || sy != 1) || !transforms.length) transforms.push({ + name: 'scale', + data: sx == sy ? [sx] : [sx, sy] + }); + + return transforms; +}; + +/** + * Convert transform to the matrix data. + * + * @param {Object} transform transform object + * @return {Array} matrix data + */ +function transformToMatrix(transform) { + + if (transform.name === 'matrix') return transform.data; + + var matrix; + + switch (transform.name) { + case 'translate': + // [1, 0, 0, 1, tx, ty] + matrix = [1, 0, 0, 1, transform.data[0], transform.data[1] || 0]; + break; + case 'scale': + // [sx, 0, 0, sy, 0, 0] + matrix = [transform.data[0], 0, 0, transform.data[1] || transform.data[0], 0, 0]; + break; + case 'rotate': + // [cos(a), sin(a), -sin(a), cos(a), x, y] + var cos = mth.cos(transform.data[0]), + sin = mth.sin(transform.data[0]), + cx = transform.data[1] || 0, + cy = transform.data[2] || 0; + + matrix = [cos, sin, -sin, cos, (1 - cos) * cx + sin * cy, (1 - cos) * cy - sin * cx]; + break; + case 'skewX': + // [1, 0, tan(a), 1, 0, 0] + matrix = [1, 0, mth.tan(transform.data[0]), 1, 0, 0]; + break; + case 'skewY': + // [1, tan(a), 0, 1, 0, 0] + matrix = [1, mth.tan(transform.data[0]), 0, 1, 0, 0]; + break; + } + + return matrix; + +} + +/** + * Applies transformation to an arc. To do so, we represent ellipse as a matrix, multiply it + * by the transformation matrix and use a singular value decomposition to represent in a form + * rotate(θ)·scale(a b)·rotate(φ). This gives us new ellipse params a, b and θ. + * SVD is being done with the formulae provided by Wolffram|Alpha (svd {{m0, m2}, {m1, m3}}) + * + * @param {Array} arc [a, b, rotation in deg] + * @param {Array} transform transformation matrix + * @return {Array} arc transformed input arc + */ +exports.transformArc = function(arc, transform) { + + var a = arc[0], + b = arc[1], + rot = arc[2] * Math.PI / 180, + cos = Math.cos(rot), + sin = Math.sin(rot), + h = Math.pow(arc[5] * cos - arc[6] * sin, 2) / (4 * a * a) + + Math.pow(arc[5] * sin + arc[6] * cos, 2) / (4 * b * b); + if (h > 1) { + h = Math.sqrt(h); + a *= h; + b *= h; + } + var ellipse = [a * cos, a * sin, -b * sin, b * cos, 0, 0], + m = multiplyTransformMatrices(transform, ellipse), + // Decompose the new ellipse matrix + lastCol = m[2] * m[2] + m[3] * m[3], + squareSum = m[0] * m[0] + m[1] * m[1] + lastCol, + root = Math.sqrt( + (Math.pow(m[0] - m[3], 2) + Math.pow(m[1] + m[2], 2)) * + (Math.pow(m[0] + m[3], 2) + Math.pow(m[1] - m[2], 2)) + ); + + if (!root) { // circle + arc[0] = arc[1] = Math.sqrt(squareSum / 2); + arc[2] = 0; + } else { + var majorAxisSqr = (squareSum + root) / 2, + minorAxisSqr = (squareSum - root) / 2, + major = Math.abs(majorAxisSqr - lastCol) > 1e-6, + sub = (major ? majorAxisSqr : minorAxisSqr) - lastCol, + rowsSum = m[0] * m[2] + m[1] * m[3], + term1 = m[0] * sub + m[2] * rowsSum, + term2 = m[1] * sub + m[3] * rowsSum; + arc[0] = Math.sqrt(majorAxisSqr); + arc[1] = Math.sqrt(minorAxisSqr); + arc[2] = ((major ? term2 < 0 : term1 > 0) ? -1 : 1) * + Math.acos((major ? term1 : term2) / Math.sqrt(term1 * term1 + term2 * term2)) * 180 / Math.PI; + } + return arc; + +}; + +/** + * Multiply transformation matrices. + * + * @param {Array} a matrix A data + * @param {Array} b matrix B data + * @return {Array} result + */ +function multiplyTransformMatrices(a, b) { + + return [ + a[0] * b[0] + a[2] * b[1], + a[1] * b[0] + a[3] * b[1], + a[0] * b[2] + a[2] * b[3], + a[1] * b[2] + a[3] * b[3], + a[0] * b[4] + a[2] * b[5] + a[4], + a[1] * b[4] + a[3] * b[5] + a[5] + ]; + +} diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/plugins/addClassesToSVGElement.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/plugins/addClassesToSVGElement.js new file mode 100644 index 00000000..51b9ee86 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/plugins/addClassesToSVGElement.js @@ -0,0 +1,40 @@ +'use strict'; + +exports.type = 'full'; + +exports.active = false; + +exports.description = 'adds classnames to an outer element'; + +/** + * Add classnames to an outer element. + * + * @author April Arcus + */ +exports.fn = function(data, params) { + + var classNames = params.classNames || [ params.className ]; + var svg = data.content[0]; + + if (svg.isElem('svg')) { + + if (svg.hasAttr('class')) { + svg.attr('class').value = + svg.attr('class').value + .split(' ') + .concat(classNames) + .join(' '); + } else { + svg.addAttr({ + name: 'class', + value: classNames.join(' '), + prefix: '', + local: 'class' + }); + } + + } + + return data; + +}; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/plugins/cleanupAttrs.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/plugins/cleanupAttrs.js new file mode 100644 index 00000000..a9e732f6 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/plugins/cleanupAttrs.js @@ -0,0 +1,56 @@ +'use strict'; + +exports.type = 'perItem'; + +exports.active = true; + +exports.description = 'cleanups attributes from newlines, trailing and repeating spaces'; + +exports.params = { + newlines: true, + trim: true, + spaces: true +}; + +var regNewlinesNeedSpace = /(\S)\n(\S)/g, + regNewlines = /\n/g, + regSpaces = /\s{2,}/g; + +/** + * Cleanup attributes values from newlines, trailing and repeating spaces. + * + * @param {Object} item current iteration item + * @param {Object} params plugin params + * @return {Boolean} if false, item will be filtered out + * + * @author Kir Belevich + */ +exports.fn = function(item, params) { + + if (item.isElem()) { + + item.eachAttr(function(attr) { + + if (params.newlines) { + // new line which requires a space instead of themselve + attr.value = attr.value.replace(regNewlinesNeedSpace, function(match, p1, p2) { + return p1 + ' ' + p2; + }); + + // simple new line + attr.value = attr.value.replace(regNewlines, ''); + } + + if (params.trim) { + attr.value = attr.value.trim(); + } + + if (params.spaces) { + attr.value = attr.value.replace(regSpaces, ' '); + } + + }); + + } + +}; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/plugins/cleanupEnableBackground.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/plugins/cleanupEnableBackground.js new file mode 100644 index 00000000..e6384ab5 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/plugins/cleanupEnableBackground.js @@ -0,0 +1,84 @@ +'use strict'; + +exports.type = 'full'; + +exports.active = true; + +exports.description = 'remove or cleanup enable-background attribute when possible'; + +/** + * Remove or cleanup enable-background attr which coincides with a width/height box. + * + * @see http://www.w3.org/TR/SVG/filters.html#EnableBackgroundProperty + * + * @example + * + * ⬇ + * + * + * @param {Object} item current iteration item + * @return {Boolean} if false, item will be filtered out + * + * @author Kir Belevich + */ +exports.fn = function(data) { + + var regEnableBackground = /^new\s0\s0\s([\-+]?\d*\.?\d+([eE][\-+]?\d+)?)\s([\-+]?\d*\.?\d+([eE][\-+]?\d+)?)$/, + hasFilter = false, + elems = ['svg', 'mask', 'pattern']; + + function checkEnableBackground(item) { + if ( + item.isElem(elems) && + item.hasAttr('enable-background') && + item.hasAttr('width') && + item.hasAttr('height') + ) { + + var match = item.attr('enable-background').value.match(regEnableBackground); + + if (match) { + if ( + item.attr('width').value === match[1] && + item.attr('height').value === match[3] + ) { + if (item.isElem('svg')) { + item.removeAttr('enable-background'); + } else { + item.attr('enable-background').value = 'new'; + } + } + } + + } + } + + function checkForFilter(item) { + if (item.isElem('filter')) { + hasFilter = true; + } + } + + function monkeys(items, fn) { + items.content.forEach(function(item) { + fn(item); + + if (item.content) { + monkeys(item, fn); + } + }); + return items; + } + + var firstStep = monkeys(data, function(item) { + checkEnableBackground(item); + if (!hasFilter) { + checkForFilter(item); + } + }); + + return hasFilter ? firstStep : monkeys(firstStep, function(item) { + //we don't need 'enable-background' if we have no filters + item.removeAttr('enable-background'); + }); +}; diff --git a/extensions/fablabchemnitz/svgo_output/node_modules/svgo/plugins/cleanupIDs.js b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/plugins/cleanupIDs.js new file mode 100644 index 00000000..f53b4ca4 --- /dev/null +++ b/extensions/fablabchemnitz/svgo_output/node_modules/svgo/plugins/cleanupIDs.js @@ -0,0 +1,209 @@ +'use strict'; + +exports.type = 'full'; + +exports.active = true; + +exports.description = 'removes unused IDs and minifies used'; + +exports.params = { + remove: true, + minify: true, + prefix: '' +}; + +var referencesProps = require('./_collections').referencesProps, + regReferencesUrl = /^url\(("|')?#(.+?)\1\)$/, + regReferencesHref = /^#(.+?)$/, + regReferencesBegin = /^(\w+?)\./, + styleOrScript = ['style', 'script'], + generateIDchars = [ + 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', + 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' + ], + maxIDindex = generateIDchars.length - 1; + +/** + * Remove unused and minify used IDs + * (only if there are no any

    3GUQKtQ"7lBc@Hjm24?k6b>pEdS]n,-5:(.gpnUa+QOeWTQV17ONSaVb;cEXVtko[jXr]rP,1+!Cleg3@6IJQp5WK=J%!5OQuD+.Yp.7.7dgS5f#`)N3SDn]BZ(BF/omJ'N6=^Z&i#".KAV5^]8sX!3W4N/X?d*'#\LHi)p0K-t3>_&mkV%%TU9I02So1a5GE7qJB\,,<9uo/,XV%Em/h$$joW3!u4]:jnlT.J`Xs__R]!OXEp_bDqTHH0/Y(/@:X(H*U_a[Z/?]^GmZ0E:f-MSX1t70G:FJ[psGt?pYnu>V@UC4!L^ejb]0QZ>X\]*^/4"#Q#n0l-m'2jJaW^g7"=9B8jDPL.;J[,2"Waqr*JrYeO1=T$>@Z#O:E5j/6Hqs/>j)j$%bRA&8Zk\fLZk[FH>L?IO!&2lpX_9457;+4*MRK7]!!$E(6!M`;:l7ro!oCB]"A$WL#.GGe>ZDsX%?M"sRP(g!"IJjh"c3"I9g9n%CAdJ2EEeF07/$mjRVF0jI0'`o(sGQq89[o16miHm'2W5mC+^6]tG)bWMs*Ji71YtI4c?@H];lJs0Wj6SWGF'D0"CB+(X3L2VE>P;m'<0:1d^WAG+>23Rg2C'6RHg\pU(8:@uZ.T2Y/j4j;&MrlV7IP-tDl\C$tOBIbK"BIheo[\Bl(!+;Zi>L?JJMU5D2'l?BD!])'qfY#"V^nH:n?[Di\T9B:?;1*W\SFfb#8,=Er]sUVqZWeL.=X16^rGl3>=7Yk;$91-qDdtN@")L3?rp`[^iB!5i0?Ppi;8$,b.!D&f\\$Z`i=Qm&uPdQ"We-J3UIjnk%0O,EE4=%'653S/=4,X6%6CYRqt'HPj*o'\T[KYq:WX+f:Q.nGAfMlGATAbe$XJs``%fVOaX.h\CY6WS/`T,Ci%><_af%72rA6.W_^p]VNq6c?TTDI]_7Uq\akETW>gr*rr/1a315mZ=)=.1PZ?['G!7ZDR=*=VBB@gQh/^W3h/Zn:=E\nLaOQn(P_2=:ZFXX=Y1n1l*]fOI]=r3FkK]]`USHjiA:-qV[uJO!Mg*gF?!@i^QIF[\S``5'a+%oi?`a0&DZ+[d4L;4[mT?qgY$&&1QG:.+G#[Ydp.[V[J'Y@k)P0)r/SQ^8J/\sOMRJ+7KXRVWBIhdD!!$ULZk[E]V$Lp,>L?KY'`\6X1h\Dn$;(T]Wk"qF@eepFnZUJRVZc"?9_Vb?-2p&e:ZGNhL-m[XYu`fs)P/q&o"u]IO[G6Mf5HqDeb07>[%-;/6`teiKDHkCuK#IaeI=J$TH.NhH;(i/D;Yubs&(IRZ:U?6g^r6hQbdi^7\RO513HT-eEi<=TT0F^4DVQj'J%eX[qrA-qIc[HJO1pjNX]R5@s*0`4p[JHul-mmtj/68,%BI4)5$QUAg(=)E-CN3P8714(/#sq4"TWM:6!M`;:dWN0Zk[FH>6+`>N.n^7Xe:??X_96=MREQdJ/J`379`&,ipg(>[YgE0Dt'X&/\_o/W::_pongF@`Nm.2Sh%PGnIHTY+-hPCP9\!.A0L$pf\i\J*tCb-F!aA3a!6AZjN./<_H/X93&5$npuLJL_oSSDk6C&;@-#u0W#RuC3Arc=$X4^3-u>:k(`8H(,Nn1PaFs2nG\!mG%Le??^A_P$4>J&fHWp:BF8jsJ*$0tW)&eJs5;'j\Kf'a0UEa8hE,\.(L-=tNl0B@ShGHZ'#A'UnV74s8Jfc"jF:T-b?94:ja!(lr6TX,;WoG.,2*N9UL'Jq28+Vs$&U6r>We&mqr)#n#m7.i8=SG*]uXi0+NRN7\E"9N-!oe`.=,)<60&q=hXQAokm?%Vg9T<)_&%U&g`F"6rILMh0qent56%0O_nADtU\^@-p[$j,Ht<_@6[Rr.nrNB6eP_ZN(FG_ZFhUnRtS^a3$SS&g<'?Pd/n`hpqroc$W/OZ^tjR^eB@C];t/]&ccf46^:HH9"+.m^_OX3$GUg!t%h@+;\44.i#H0m-acNU$#3AD%%6?(U,!,i=N_g8l^EjO=eW^=t>fUY8`pOX9&7F;L-^B)8R9W?"`dX-+#\a?RJK@U"sG_RA[N^A9nmfME@U"sG1*,+!\T[&==e9A)nMkN!YF]Tb8ouktR2fltW=Pg*]Cj4(=5EjA0!EEXGg;NlU.&-VT"O\q_k3*UotV<>%V(q+'(fN*Y:6E1L'(#+UVOU>s%kV(^-d`Wmr+B5ifdgq`E7.J/&7;k>o!ir(FJm)R6Os&Wbm_^ht:@o)Uj].(Q[,1_Ou/!-hJT%7\\2`Sd`8p"SRc:C-pa0k80dl=#0,8k&O8Ci?UWGPHMKR+L[5k0pu6pr7uAc'gK(!Idaj4ac8e"eDHYmN*BN@+kqkc6Db]KM_2>Ht:9+bWf&Cb)q/aWfuX;HuL(:+)#"pcTf!8t,C\F;'\-DcKoGmZ5)Fm_SOAoEekD`3ETMg^"<4+6r>4f6:YWq8;m2/3,?S8kGYDJC7iQ#CG4I6,0q^KUs8Oa#:MH#W:?V-\f'F6Wa+P>;)?H#F:;rOrTQH%/^rsU(.q/]atBS%$Ob'c&UgNJ,J,B4Ze0?2eje7d"7QrFJ[PF/;mjP%)cV5_n;Om^3k!^*CKd#PEAs&e%Y4._&t-Cj`"HPK_e:`hm\%r`B>tk%n=Ru2[71PKt85BT.SRI]D`p1ao0#+/M55/D++^Rdg``#gPTMR[M@PSD8iq-KFh$uYcZPY,`An/fN)f=[M9s=OD9Db`O6snUdA9#KY9]u0U29t?3TT&D@'*m7R=M[YKR[VL%G`@$BKm_AEj*C$$rD]mtrG9?M*=:qDBXo5$Da4GV]7gTBFZZEVmJTGR&isMCqiU.AG&**JDFuQ>X3Wd9cUJhgoFd28Q`Ah/MDoMm2-XE:<5lYdn(-ahHZO/^qVuPhmb@6RjT2l8mlbpbE%UGD[GYEl]G"VND20K7>_c'."SI_/Yn%B5XbTtnS)B-uol0Dc$XGiKqGe"7]$Mu$j+R81:k&IhDKiq)X7nqT:AmWGrWJ@gWMKp,XU$(\]"tga>ELJR[UNIGXk6[-&43B+[M@PSA.c6bgPTje[N^A9;JiY?fN'8UUt\N5A;@BWBG0s&/V<]J3oPlk/%cS!$(=N`eg'.NT_kLrWj`ALRXQT"(2aDhX*Via&4.tAa>_EDgM+03_g2$D5OF&X%UFdrF\VA[_`-N9/Z3#Mb:$W+nfY$7l[[$:hh(b"S;4ft6RF!@HkH(cn6j(iiVPiH!df91f[AIa5Q"n$bi_;p(l@4pk8oj2CIq7qP+%DHgq;_egpuf9]Q/H(em/^CfN8PHqTk.?`\06d-X@mC=T8_Sd4hp71%`?pmbZ_)ogJJfnDP1U*JJ-$4bGi)?%p&nF>\I@?j*&bo`0/"bJDoU0As_C#@L'f-p7FpAZ-cLImfcpRipIC&4365Cb)q/aWbOO[M@PSD++^RUtT3\Z)pP4@9^"=fN)f=63nab#2>#P75BO^PQm&[eKF'[RS,F?/YF"j5WBp7+Y4CNKnkB>$@;)E&G39V=kQ"SF:TH!)LWuekmogJW.FVc@Q6+W^j1hK_M_K:E5i.Ki;Q*WnDM]Cf[UYNbrZkPF'B]#ft!+HI4l+RhX?mHcepI*^&\`*!]Xf2nF#ZD/mj&6DVFRk5(2_3RIBTsQ5.;hjhN8u`j#uLn:KL\(UeE$i$Z:m"p[X"Gi[3b\8fD$BK7f;3Fa9R/+2eXchh1]CKi%56"dpt_&sYL)EtK?T8$Xt$F$KaL6p3_d.UuEgJ<"1RD1ie8&f$5nsKTT3+nJiKCEM==`SPW"q[3A_41d>%IJL]i&tNZ-R@N63s>7J3*,!\abN]3l=f3_m=)`M#R/^6;#o([X36h"V#>1hF&&@/DD+_81#[UNI'/Aei)>Ht<_Rs)VZ.sJn-.sAbJ9D6.i$b*sKbP&c_o6/$j99-gFs)%q/qpckbq.I=tl;ab?nl;/f/oSRXi)hm"nneh@[:UeV4+A2S\7@C#[X8lr]]]o3Z?/$1Z/Q="^2aH`[.%;0Gi:9bBYcang&[F0ciY/='^bq_1n;$o)dL$d#@+u`)dKa\X)[[]E8ff9E:K+YE9T,t`?r*@`BNM<%^bdZ%)X&IId@DH]QaZd\6oDD[;m'g\nJ9eaYpYFnIE'BSoN$?m;W$8/MNM1KGrHN(rOT;cbdYZp;&b1[_g#,p;2MV2oEU-2o:9,[_ZO5&&B!=O2?TlGJb_"p;$J3[_el[1Ge!IjkF2#b<`)Y=*mFNA6TX4aE3&O`O6s.Jo/K8@U$+>#U+k#/SlrG(!.#'/%-2IMJYcf+f&j]>Ht;$(=@ETdo#^Hn(J:@)#CI=BlLG@LMdqGK,>qZ[]%t(1jZkS_.$4Z]lK&$!$0C>qB2p;;bTkpn_Y#FDYSc[\#se_#;URNQop2J;UQ&d)ibrUOp(Jd0ghXGMbXQN\<;io2T"\&b1:,H=0ZgVB\N]hK=lf_L3fYqN0B1m6l#0Q:kriNHID)sk2,knT.h+93pjTC`F[2hK&hTSn&-l.o2*d-,hnSkMk1&7Fh.n2%A@Wc:k,369b!2$70k'c%CR#+MI[=-(#+U_`O6tD&5mALXk6Z"Mm0>9OnVXEmabmOu[R(amR5fPT7=2G,!'16!/[698MS)W+B$Rhb)=$"'6i%:Ng&[bFD6h:>IZ'<-*+*S5*-3+bYqsfN)f=P""#(Cb)q/gPQP/8@?:B@U"sG_ROd0`7p>I8[Qm*DAQ(3X#YFst:W=uH-Vi@MVXc4WL>k0KDU()6H9?t1J^2P&r0YLsB-TieUhpT7g9u9^*W[*6/;?km5D+1`9gPTje[UNGQ63sPKfN)f=P""#(Cb)q/gPQP/8@?:B@U"sG1(E!RD[MQ:k+bj_:ONDCSn_aYKjo8Z!t5T&+%.Zu2&iH7^6K+5,h]UselN!g`YqQ\eBh'"%uD"q03a;_$Yh-9%$B?8Erjg>Nt53-/XUHF4+)m;K)5DdngLr9TR^&+r4LM"8n'>StF?@kelK9P.@mkO=X]?1NrW:Vc,X9P+SI1l5`aF'Xb8s7&8"O.kauTOsj.>>TO]$O<>9(SF5l(`&dijfYL63mgkN#CSOaY*1ejY@6ADd'H(VpdQnf^a-Pi!\F?%TbG.lY3Wko%Q+Z#W-bI;<;a/?j;1\k9gVubkBlqcU]+AYq<&t=l:G])mXT+(63rusYcZPY,`An/fN)f=[M9s=OD9Db`O6snKPe]:@U$+>#U+k#)f.%5(!.X7``m-XPb>k1AXU(]6*4oO5s+B$0gO+XucbL.u)/&juPCj7f=UCP`2:*b12(nRIK$ka\n=RQ>BZ)pP4@9^"=fN)f=63nab#2>#P7C!3RMJ^>@@TsF2#cT`7K+KYBEYZ$j(>s[l\/c@)!gjB79,c.KTOq8$Y7H[7GmsH7]a8I-otYM>[).2SK_tL#^mD_hgp=U.?G#nBSiYR2F\%jj0rGk$'0^`,K1d#Q1bQ]M[8g[r+//TD":1.u9l>7'Pk9CZlNqI6sL8h^b;_$#=<\i)a9&K).j_3nD';61Hd*f[BU-ZE4BUA@fUc@U"sG_Ri]-kspWMLZMsYKBZ@fCL7R,\>isqToE#4aa`-o=3lE/ODNMfPD_7=X4_h&st.h(A!ZYEoMlL:2EZK/JX.+i))G=2TDr^\r8sJdGb_DPqL0LN?mm&l[!1\CkSB@p_Uj2Jr:K#*E<#oTpubdai#hs&*T":I^l'"8^t\T)_sQ3]_8QeB_$BY:iLtm*ToLAHbFu32+_4dh6HF8$D8iq-)1l_E[UNIGXU$)'<%Vo:[M?mqCb)q/gPTi:#U-!Y@9^"=8/?J#kUTg_D8L$rL6*'D#l4q\gA4^70D#UlL"X>!TXCW^Gq"+bg_K5_H:[a^jQX-Pi6Nq0dMS=:ac`G2SO[Fn"\X6$VPa.sU^]6b%6[=ZC'f;>BLW"97qi[89AVd#`jXS_P!PFV?=$)$J0t46.b-'?%UANY*#O]eL/iR)J_An9Ae1+dN'jKAj!#UW;"'4iORESYdUtBG!39A:JV73YSmR"Vi52YB55;56Ko`i^Gj/*>m-X7sI=2TADKu`\hW]_W01Oo_DstPioj+f)mK$!nM3lsl(^BK[?i`H-l@\K+"&NW8f5X^%cUOVk"Y_kN_0^AI_7TH6_>]cR%"h)mTMmNS]e7+dFcW4k?iTc_+MRYDn28G5"YMoEb4g;Ki28".B)rA=)'OJK0%dU9?_C(Brf\Fsa>rR@DB]OCg63s!fYcZPY,X\f#U+k#/SlrG(!.$O[aJ=3odu`@4A);ckmGlIlZJ?hG_K^NKpl<3\'jTAnCAlNM+3K%Z/W*f0#?!am_Z<.RUOI_S+-'L)e&n3Fg;mVY'C)0*9r&%O$8.Qa'.HlUCH_Bl.aPtU@GK`j*H^hn(t%!7uuMXh]B<;CMFoIXmktnH?f!k,5!3+U3BY[ic^fFf04(T4Vba\9$`BT6dkqYEc)F0WmT_9l[drbsA&3oOY24nG:UM*:FMbW4Xmj3\H?f-o1V@t8!S3d>K4dt<_=M=-6-$:)mmJjJH1:`c2L+fB4]kY3!0<\`$SPcOL?HiFKf,ds_/gEr)DBlu2(./:M3ACQk&_8!F\4c;(Zl)8e=T.lUK/4#+oKsI*sa$Cr91AefN'7bYcZPYCb)q/+bYrWKl+f;+rPuL`O95[Z)n9TKN'O>/%-27+r/hsa543GMD0(E:&s_X(A%\6#([#SfIo%F#gilbIDtdt.)U76I4GRdd>#50]n+6]jFN&cXtZ9E]XZ]MLlG9J(rjSJ2MMeP,7jWg,g&:T(5sGAFJ4_5;M-*Fnt`IaV'6qh(&3nG0Zp\`IbaO"URhTK/]j,%Qqo#HKs!0"TamWWZ!q/4Q5k6*rj@ce>M!H7B>/WYTmhXShr-dHt<_@6[S!=$Np@E]nH.1K_D8O-._b#^W)uJ%l3^20]]tDeCfhC``[EabH"/TTV]Z2,hfRe,05eYL1.!lfc0HOSM>hs$%%@q<_Z=?\&B,MhYS/-B#8fNT#;89l/XhcG@aX6ZOs'5L'P^H3iA\p3lS"&=m]IF42A=CEE@U"sG_R>?T8fmZMR$s1nFt'*Vj7AbpC21.fasI!eal@SjLaA@j-;O!=a_!D9ZkOekoODoLPP'VllK]"ffR`9P87bDi;Q06:RcK4#8*u2u[Lsh2(oNHt<_W8.o/]#f1k?u:FEL"25aNC^0pUcrD\)s;q[0&iKW\i.?EPX?cNN<4QOUd+nOKidpg)R'6UmprqWNd-6H$D,#5-'.;p(ech^\a.oLQ49h*H@q(8G=X^%W;6Y@T=3`FmU>S$+,!n[$P'H,Bkf^&?Q]`Q\dg%DuH]F\g,qOTE)(+T-4,X].bK)LieCIZQ-IB+WrbEGQ#n<6BbTIsL?.AP0??a=]>CMOl">7j3CFG"GL[N\k-D8irHZcTXb>7j1-W>=,eCb(Z;fN)f=3Lah8[M9s=OD9>``O6snUdA:^j/BifQ#7dIcr\XG9P7Ef/(1%^8!]lfl..6*\+E%n)0b+%2GDtj-i>)<^e#jQIllP4lA?O5Y2_ldLZ6PYH=6i/nJJXh*-?gAW"BV0"mC3N_"V7cF]:-[9Vt2/EfknCquHT4Ii;VVG^8LC(3KL;*6er1iX1W1"EhYH+4r7U/ZHt<_GQ5.5&hH9[cNG]#En?5o;od;l?f%j6r#/\*%5567X.qhO`?'jOYo7i0&)0L6e,`aL3:GOQcu(MJYef#ht5R`O95[&OHc&2V;&H/!@iME2KAP(mLb=[QifELfN*Y:6E1L'(#+UV&[iG/MJ^>@,(pM*D6U.p<[:&rUKY."Y@qceV^rTY$5\At_E-Y4Y[.#hcu'a6oGLQ]9!9QN-scHE#l='U$bF_K_LR^hDrpd1Pjq=?DCgN`^:XmSr0Ke?jO$hLn"'p=YMuV&K%G9kUCU\BciK\($sb66/^99:D++^Rdg``#gPTMI[M@PSD8iq-KFh%hYcZPY,X\fdX,CD!r3qq-4&\(V49L*K?*SYib"V\7,>'Gl)qC*6ZBATJ(nhrcTgI^S_g\G](Een*bcOUG8jND1oVB_'nq`(`@8JmXd)u`pccRfFKR[K3b$#SFbi^W&(:=f\?cPlh=/ui+!*Cd#;02!)ZFU)51n>$_aX1k_*Tc+`Irifc1OnGaSuij)MAYgrfs^ifN'7bYcZPYCb)q/+bYrWKl+f;+rPuL`O95[Z)n9TKN'O>/%-27,3eVuqKpf&1m`:q;dRgP[!)_.=+W'"]q_(DH-psA]nfu&rIS?M3mG:>YY40nF:ZiAbKJu^\S_CS]o$6FgBd000YZ`W?uN4Z+$Ioc[Z45;d@#d5QT]l>O7^=g-Z%Gl2?s%b3\^&430kM<\ms'Y=n#F@#[\)HYk-6R*#eJ.i9M6R^%>ab@gi#)Ks7[n#^1EO_;=T'QqT:(q(R[gf_9+hG5$s4(XHBc1TpKHqf$("K"98Gp@Wd:ZRlEo*uEkV5Qo!?29O_?q:l7_7Ul.g1Cm!1@lVj(_N)&ZppbAZ^?UdQ>BZ)pP4@9^"=fN)f=63nab#2>#P7C!3RMJ^>@@TsF2#cT`7i5+1.u/[XHuVL/\piFW/Ef)X$j-b"_LWLh4_.ilNg"M>#jOnPXQh(rSf9uIoo/m+;4!B8N2qV/I/!Ht<_lV(luZ,o;a<8rPurC69iNOQWI.qq6LRc;'H>:bi5J3.UX"T7Kn3q".ZYcT%#dJgoYjXk5tk/B5V9UPGX)r-R$qK+)J(u%jAqp(eA[X-OA."(pnI+`Z4T5,#KF"V_q9Tf2M*W;@:U=pTZeh0M69^"29s*9Q/`3ohYH4`kToZ#Qnu`l0\Ma3Z@4nSs&rh3L=$hh3PD`#j?3=63Pa^7-(cs+;mNVKKit,#YnjD>IS()?e/pqr)YM]t51S*0#1JnR+bYrL2JanP(!.Y9/%-2IMJYcf+f*h">Ht;$(1CFPXk6Zj.maLbeHXccD+1a$Ksl<.oi,V*$4FW!>8=U>B8umj_=.*ahj5aD^?J96sGmWd^terURQ3k>q#C9A7#U+k#)f.%5(!.ZW='K6uUbhX091ISO9*WV]o6BQ2?LN"_l4C*WhA@W`'Jid'P)'(AjCVd4cSOij3l"=Zg!a5g/=c,]3A&@T74,(%+[RLD=iO#g:dZIM'WE3*ahe$)"4Ya\=C,TZX2Y$CNQMdT;Oeqakttc-)p/LA]\Gr0RCR>$;m(oXQFX+bTj((#+UV&[iG/MJ^>@,(pM*D6U.p<[T9P)K5.GTOi]'r\-Y,&OlIe'T0/=P@f>T\\t*[[4[jG5-k1gDB.M=aGZXpCSj?2#ShMe4)-ais-5M0f!Nd(<"-fso8jSSUEV"l4o)'C!3,,\CTF;ZJ\Sd_"Ib2G@^KQT>?u0RmL28A,#aoS7Xk6Z"Mm0>9Ht:9+bWf6Cb)q/aW_JR8mhC3QW6)GdVkshWIQU++gR>Sfd5C9LK_IfPWb_#egXpH0M/9h"I9J@@0aEDDpI`H'kC(BZ$!!=CscS9Dpi#aWVIA&&oA9rCL`Fa`#DIb+=RDPK8nj$?W$8A0Q=k=8aoHE1.^"+PVbb6Db]Ht<_m,]<674>FBg;f@L=V'#kYP,'jonZEPCr][+CKlFEW6edZ0Y$gm45gcXK!06/NpnBEp]&rVo,T/Tg,G'"TqtlAJH"4ZK%ZMD"fE[1jY&>:$n_qj!0fKk7N?d&]@5V;*6eZVp#$\ZSJW\pmE:is.i]C^iUCV!]"S^J4DU\%5legT(63nab!o&TL7C!3RMJXZs.GK_s70k'4>$tR>X[n2n8$sB]SQ)eH'nW=0LnI!*6"*%2-g9*_Rj\OQKF`aKTY$="jp8O;\qdJB;hFFlL6sLTj),DfY[GFhcKDV)`CgS^[,tfS9*`0P(.X=3Y:Q'I6MUIi*ff<03&p3=(GC_nUX\6n;/AP!&ASh5h["/V(kV^i/NB&Si@fYg$'#a0pr>UJ"1rnr39.])cuB/d"._Qh!2IVd>+4jG3I(G@(p'k,L'.B/SFrd)nF_SF)]E&#I67:6C\o4o)3*U7)a.#9A"FW+a*$A1?jsM^\cI$C^(.>R*JC>+7Uc%4$\%V7%K-&%[iW7%N8^PW&K$7JW5GJ0^kN*gp;+"r(uDjt%.<$%!!`aWpp/e/HhZ(-Ttq!E]^fIeMVs]=`]7DnJ[s/>%_]]l7$!:Rr2A)=;l1c5o8M8-`dE&EX=GU$8#R^Q&]dX&<Yi'F`3X51V%(2m+*#aI-ch,"1CN%*,r>(pnhDsfr&M,@m)b/jD]oVK)+a!&f/souJ2m7.Q\f6.rCCNCLU_W%_!W9G,2&D:4`pcQ\$[;'N!Bo=qH:-/iZ3rCWp"+-@^'"+;@snLG0#_cTB:M!BCZG:^@*P*?Gk^n3e2bkJ^TMLk*F$+JA]<$<)aBj4$6It]"?150$!/Z6[Pu41Z,).7N]+\`?_)aTI!uph^"!Y>So04-_Y(t,g=cP[h-aHlX[n1S>Ht<_7j1-WERqTCb(Z;dV[M\B[k6BoLGssn37:r"e@)jVsoP9UU2k3oM\rt*BA7JppDeKcnT"`H5hRo_N:FC]X6B:*GZq\D4^B[_;BZe"DV/s^6OK0>lgHQCHn=Pk6ub,^#eb1\(u#pQ<)Yp&\sGlq&3S@HNX^O%)^_KXrG0sSZh"+bE(Sd'2RPXh0&5OdkNiW.Y=;mm9@)8oaU]#`Ie-[*uj1PL1bJgY%'-o@OUi(]@u(bmrcJD%pm)+o.E?kn6f%q%l\@<$/I:e[<9gSJHPZ)[G0$cOeWG[NqSW_?DN5!\tAh[FVLo%.E!>KAZ%0%kh90K"q8+)lu'S%%".W#nrL9">rKXMU_]tH?`2*eSb+bWNJfN)f=P""#(Cb)q/gPQP/8@?:B@U"sG_RP>_8i+Acuh[R"7B?^gS"P_J&If\+bYr,-#>*?(!.#'/%-2IMJYcf+f&j]>Ht;$L1"5jXk6Zj.maLb<=@Q=D+1bO1SI,Kkq?;.8]T4XEiDC>kpu!jW_cUXlTMq^l%`0o$XjafE,6eOSfL2-n4%POfXeUD02:,RN$CBkCtYr4Qs?lZn2gR2e]7tFk8>p;l5KL$>)QgPQP/VAj>%[M?n.Cb)q/gPTi:#U-"t?sBn<8/>Wd=]Ed-oVKlEbC;>=*-j>bW,oe0@\:'"U;In0[26n4i1oFR+7o@H9`1+'htN1H@\r>tgtF;blmX->1l%)qAMAYEN6drj8L45:e`cRJKYljXo9tSI`KGq'!u/jElGp`O6snKPe]:@U$+>#U+k#)f.%5(!.Y9/%-2IMJYcf+f*h">Ht;$(7@d!V&rWc\Gc6^2GpdWArcCX3lgss=L.V,)@2Nh31$&WB:aETVFM];Mo>X;naWB<8bbXng-e!@88*YC9N$9&biD\u/]hpp5qPEEJrYELJR[UNIGXk6[-&43B+[M@PSA.c6bgPTje[N^A9;JiY?fN'8U9Vnl>&&;+HF*cg;-IN]Hal@:7a/AKQR9jKgp#tl\]k?Tf,7U8U#gE$;Eoj/>roK`N:YgK`6&d,fZjsB6T&'>NVB>,f&Qt5(91g[V>(i(&1[;cX$Kj)MbLL0Ud"Qdr-"G3lM_f"`pKa.s88?[$UR;1NDV4"bD&N.Knbg7e&CoU`Kl&f7IS(]/1;p9h,u.Q?A[N^A9nmfME@U"sG_RHt<_Us/Zu;La*$0@+j3#pe[B(@PJsal>R0i8A0+39\71Fn]>h#MbOEKjt\jW_M]5u_ktH:nEuhWGj"3F3&VPf/!l]4nHK29hIq[%-a1A3Nddp66+W`Dg\TjE"'=F"M]MmjPNUY)e]27X*:U]?i*kZm"!?OI+#B*jcLV=_F^_?[2nlD^38SEM(%JT=pJY![q+Gc\>.:M;Qf!^>f?+tt'6@RXmXk6Z"Mm0EK>fO0[J?qNd/!H6B:'Sd79/7\NRj'35J_$TUL3@0puX]ngcu42NPB?aq^N'"/)BMCTsmXturqH"[F;r;6e7$7lLTf[mHd?*)C1&%E@1X8=2ho*Ir@YTmmf4=["E5n6_tSWZ2&mNmi2g)E@.+I>cMZ3f3'IO^6;8poY[B:Ocht:='Z6MK%t8Su#sRX1i5f"/B?jTa?hV+9Z1/S,_s\)QU#?j&)DsE344"@o6*XQ>oR.YoE\Z@Xj!NQlds1la0W_l!_q2fGO$;8!BE%H%I/:2MT0+!DT&W1F8#A_prSK_k"%+g0kT#4*Q=#@?lWmV>m3u;ME'Ja?b_N;p3V[p9JI`]@E649\Y]%=.%j!od^)o\4rP#,-)03A)+bWNJfN)f=Os/IYCb)q/gPQP/8CbSc@U"s'_7!fWZ)uYZKFgJM(:Ft4MI_ie5p+r?WV!=S6EMpkkUW]e=2HnJ[ZqW]%RC1h(XAl0+=n9bQ[U1C0In0QV&*YB%m#Z`rP"$su+S/mBFX-8@Z/LHo%n"s*Tjn>So3A5VjTYa5f'C,p=1[@WT@Z?KNT&`"X`3=S>L7P'p`KN[1E7?niR;*'q6Z&m=J$C*P]AF.R>@MjI>TW2*\<$W)':eUl(>/H(1NpE_\h1O%6SJ)jp74p^i5T_Hf_FA(FU0$Kq@_B14bG7d>_3tJ0t^Z@&!%^A&!nh.#NsDp!Zs8k_2[cA6-kDHpgCfBgKIc'gPQP/VAj>%[M?n.Cb)q/gPTi:#U-"t?sBn<8/>WX:/9Zg/95NDLk$&@ARP'OM,9KgF[%5sIP3W#'Q;QbK:6W'eHZ]8DZG7X;Al#Q+?&?1MuEOY(i8r]S(KI]S=3"h'P,Qf?9-qY(-4`#!SK]g[rKX5=[JG8JU_7%nr>dO>D>eB,TXM*ibuYa[VN^+pRf5gLDo+IF_@C$UU,\F!dO?.4`pT=5(;k9V+^R"/R'mDg+1LBmFY7u)#&YFCi(2EZY"'0Gq4V^:,g&#?QFg#B$DNkfKnlen5^-fL7:*dn!S?btRqDS`0m:;C-sn&)8sYJYX,p;'OSZN5OQd2H,2klokTi=*)61"=s)HUfmQ*:/=i1>Q>BZ)pQO?sBn##MJ^>@@TsF2#cV"[OY]MG]`IL*)\]bfhNC`%j9N+3CdflIk1>^70h>Bp^]?[DpY?$-ja=]#8[XM/4M^Dj=^H4fF>XBU)Y\m>@WVZ?Z<#>^qmKBq)/L[3RZKkj^0L?hp3K54L-LO,b3=.Fp/Ht<_5*]kegl4Q!)m"kfL=T*RY\&As(Fh506UaLE6k6)[;E44aGBJA#OV%+PF*R(e.>G,7IQ)]"AdQ1%[W(N]Dt`%u-b[D;0]SE:KM&P7o6('R14K!`969)!ZEh2o=VdL,f`.[#I?SF^aZqT_RN"H@WR5h8A<=ctL$De4KG!$/jphgO9S0d&?-\Vhnm1H%2AtTm"t=+b4ZA&92^go!k*?4m[N^Bdkm#n"D+1`9gPTje[UNGQ63sPKfN)f=P""#(Cb)q/gPQP/8@?:B@U"sG;PC4Als9L^#XY:Mh!4!s?(b\f8g`mW5^e6E,%%^N0!%ju--3Kqd@3kAU56m._RUd^RqCC(AO*..L@8OPeje;>ELJR[UNIGXk6[-&43B+[M@PSA.c6bgPTje[N^A9;JiY?fN'8Ur,?LQ@6O(hM74C/Q$t6B4]mjpk"/ZFc6SIsnmnjiW0.`L8K=.FSW(tdPNR;')jXH_[Zq*H$gWnEFMa9tBjDRrNi5gMnK?d8T@&Hc\"4XKi4IA1*E[XU:"W1g4-h;X/kHW!5o]*lg3*TH3Dj]INfq!$KLrii\Y>TIhh*6NAPR=](SD3($Bc5HhclI_X-.mrY:3.JId3(:P;T8Q'HNRleCXfTh-aHlX[j49>Ht<_7j1-WA`C0Cb(Z;VUALD$'kp@oA02u=.$'Ld1PIp5'`sTB4FMfn*Q!*Xgt6Tb"\JS9gC"WYi;0Tra]?0elHMg=*e)m?C:7i,t![a]k"'>q-/\:!\5/%,]TVClG7#ZEEREU5j8W.18@85:+")QA?]3^74&,uFM<"kb%0g`j)1)]^NV;P,ELE8s:0[,S0o$$)>t2B^k:kDg"a;Dc@5u^%%9cO^OoeV55'8XU$(\]"tga>ELJR[UNGICb)q/+bYqlJSiB7,$BS9`O6E3Ht;$(1CFPXj$TL>Ht:9+bWf(Cb)q/aWbOO[Zrj;Cb)q/+bYrWJSiB7+rN]he^A<2^M!K_Y8,L/G_3(P0C0Hr*be^&=OS#M*?b/*QM85<#C?BoE-$nQ33Tt5)#VVZi]rC4)jr^9CTcM6+D50*OOT-Y$65VhRo83+9$R*I._dgH@]l(*2p?;ig0t,L4$LNr?Z^d=?ScJo,R2R;%!V!$?5$[o5L?UK'V$[J\-)tK9n665WrVk)agh(S!pR`FU8!6ZQ4#(b4G,@M&s0Kfk%[:isFAgD8Z,)>6M^tEXD0dHk,Eb#D!EY93K$8%W:$E&oQNS%)*d)T]LoIZnMiBL@[+pE^e=GiOK?hn;i'&#]k\:HG7dH"/ms.g=chch-aHlX[n1S>Ht<_7j1-WERqTCb(Z;[&qbrFAZ-k>SR_U-Nl$#ZYaCj93mqFu)Fn.`IKaWC@beWd*kZmb#sk7r5h=:i3\KMrt,5Ae-*JMi:6MUB6YJDU"/t=Y;/%"*IkdW=WB-tl;p?9JR!7(T'3:,mLTiHp-HiL>fG!F6f7iatdUCVN5bDG/mDua+2/Qg5,31dbr]"nZrNQ#l.k,WIOg.SZYD@Bjc*5O?[L*-EX(ARlU45ef`SZr+U0FZu=W0>H[Fp.PXHO6hERND2lT*,*OWt&IMAAOP3:;bbkpVYQ/$XTr^!o)J%__YpeiS=7d^uj3FGi;O&oRg6S@<63/A6TX4aE3&O`O6snKPe]:@U$+>#U+k#)f.%5(!.Y9/%-2IMJYcf+f*h">Ht;$(3q+f/+nK@N*`*B":Z,`X0'6S62TtXiL[8Z==O/TTh-XFTb&R0i/LnN\o%p@q03;FjY,3&Z-aBu%#P75BN3LQ8jl[rc)#]f^KE#DC.7C>k,E_kV;Ved=^`>NmH/:Q5/R]lq[-l\,(c?:7Qm*K%6pkS3Y[opX9ad(4MLp`0;#YLhaGq'Y+>Z[#Z"W?89IIfo[]eoA32>6eEHVA]C"B1q0fj(!&r]K1<6F;mnc*V[Q]i9+OnM/0>j1CnEZaMGEn^O^TIp;"]E#i<)f)K+5S)d^57#=&130t;E*)7Y.56)^Q[U<#(/5((pC$o`+<">=-IL6`drdCc`j,D'G$)!8e3)m;RKR.e25KoXB4/qI*:nVtA>qB<@dm7le*0t_h;(G>LR1u,J+4Nn>Un@q3?!dgNk0Q:JLA%Wd!F(XYi@H6&\E:)qsE;T?uE&\rWfo$?W1RFQgJT"cOg!_r@Ir6iC\a0Z.[e)%SZK+-\=uQFWSnNWX4,,f0InNuRA6TX4aE3&O`O6s.Jo/K8@U$+>#U+k#/SlrG(!.#'/%-2IMJYcf+f&j]>Ht;$LN+ReiqtBIhP.,kcGJtg"af1J^Kh?4bhE[.qUoI?J'e;,@)5;l3pOTA&]3OY_';HF_7=Vf_aX1+_Z^FWrDVl\E[tD)k\HR/4"pq&@i3*@CNmR>o=)U4$b!kT$b(TjQ\b7qY(6c"KoTq9*GT]U`"fdimM;a*fDV+!D[Y&r.\)f99/jZAQj8O`#AqY>419P>kC0rW/mYshlII>&iV%:j-Yi2LD8l```(b40]X@6Smgq&L>%(?>/,V,>&qgf_ISABpCb(YlfN)f=[M@PS&4/q<_RfN*Y:6E1g0(#+UVLicj$Lli#dIk.Den[I53n%+9d]Tq[5d'atYHP&q@+U,k^$mH(6Z#)&[on7WglI=f>K=h7FSobY2#U:AI'S\4K_>rlG<;/mq9Fnk$?5UT>2P=D.h$J5i`RKE`gOX5Z6(+:WBOHeiRh1I/%-2IM@`*F[DB:\>EK>fcZ%T=l![:bWMBkpAa%TBp96l,]bMhTAjb1n6f3+GUrOYT7NDmNLoEh+=2L,YGetSFTJ!>KSW_]iB7=,UHgnXRq;tV=3lkO`h/?C3b:J5cP"8J0h2^*j9bepku>EK?1[UNIGXk6[-&43B4[M@PSA-fUYgPTje[N^A9;RNa2fN'7bk`8boRkBLB<8imhDXY'M=i=B>P7aZLppd6HB\Wo]a%#4:U9Y_Yl7s]pu"6$CgF\t^Hm5iRTIqXrk35uZ=B5&P-*Vnhef.1eof6&^1B%pD9,fSY$6B#on$M&%j*\qrHt;$L1"5jXk6Zj.maLb<=@Q=D+-2_gPTje[UNGQ63sPofN)f=Os)<69DVLbiEH8/*)GgY_h%!SB:ec+@Do4XXqjW(;qVCEYd:COP1[Y'`rQu6E#g"Q4/%-27&8\DVLMb#=@TsF2#l,:Q[UNI'%)KAuHe;A8/%-09KTLZqCb)q/aUm]>XS!=!lMO0-^!)[hN1Yu!HDKEG8+kqM_07WAk"<6Aa\2Upq;"fh,a%cU9S^quI@'DGlu-sg:=>=B,9__6=4gPi/!;(.<^/-O/%-2IM@`+q42A:6>EK?1[eaE@>Ht<_t&"gPTNtFB^3Cno=*"L<655g@b8E'.+DlEAXM"8Yo7`#/4T[R=U#&6@Lu"Xk6Z"6a3]l&[iG/MJYcf+f(!'>Ht;$L1"6a,A\m=(#+TW6:_j-[UNGQ63n`f&454o[M@PS&4-XGKFm_BYcZPYKFgHU+bYr$LMb#=,(pLo#U+l64)?FU'd85A63naqh-jNmXU$)'&4-XGmge*0D++^RKFgHUH$@nACb%gX+bUCnaLf?u@TsF2#U+j46J``k(#+TW63n`f&G#7nXk6[-&4-XGKTLD5D8iq-KFgHU+b[KiCb)q/+bUCn#U/9b@9^"=#U+j463nb'%blkX70k&i&4-YJGM#r4.maLbKFgJk]>M'd>7j1-+bUCnhAs$>gPQP/#U+j4o'W`afN'9H7)E/67%l<"CX>Y8IVUE[ppPtO"7_EK;rQc.TVk6)Z^tK1Y_73^)F=]QKN&P"/%-271i05%Kl'6a+bYq!#dtK&MI[X6e_@sL,(pLoa:AF.MJYd;KKe%D.2E1@6BFMUrq"#,,HMN"@1<@Q])Q%QqZ#<^[i`f=qFn]r&'SmnElH"&E5BLaOWodHcq)OiTdW6`&K274in-U\L*:'7_8H`g3$BOM84%iX,[_J7#@i+>D%8kj&0MtPF5-(G\@]>QWk5>.?t6uq\XAk5rHl0Hf3[gDeQmOhY342ZdFrqqH`uJ4mqpV/7+udP%,^dP!E'DXpd,VGDEaJ24e+<_ntCQ^WLZ'q8Bp"b<.2\'hB\+M*hUV-Hh+G0)XT2b7F=Z1)"eo5cHpHigT5R`>a>+3nC4;i6C%@omb^UF8di]bh_3k=kuNk2]O85?p9\b`_qN?rd)ja,8)]\cY.Vc(7o4O#0H.O?;5$DkJMUZ;M&XX'6G[O]sDmRt\X\P"GgGd+!"ALF:#hGgcqq+g_?g\',QE&Z7[P1NheIpR05<.>k@Oco*(U!#C(^U'`@B"RnDn@&A("99@r9"/8\kZ59[D?U$(V-E1b/.gW0\'hAY@'Xl)h22B!>A5j>:Pm.J\Oe/m7HK!!oT[S_=%f]Je@.Q*4.]>GdUdHqjK>,&'mu<-<78Nf>10PDg%+BjY;+@GRP"J'adZn5Z[r)Lc_l(ONo0>U.h'*62HH1^sm\gMVHk(R.nbmJb?RNI($\kUo.b8E`M76Z/"4nbBro_RTE7`R:X#,]:$rdo#_'<1J8JJDkZHOVcV0LncR&8!#Lc8V-C3\F=Z0>[fV)ZdB.L@(6NL2>No/g0K$G,DT)YpQu#QJ,+Xup0BcV3Y0*Y()8=LdpQbiqjXEE/#QEV!hWm-Q\s70P!n",l.fe3[]%(EWHhNo0>OE@Nt4Z*iMh,OObDea?*q)3?q@'fFa3'V.6J(C_S8@R$L=JoN8(jHk'PYgCqFRB4K;c=9s+=^hrIr6Wbqu6R;Sj*Z&#hHWL2]QT5SMOMgjX,DW!rBb6D9\b.*GCA\Mg5^p`Q0_k['.h:0SSoM(ogYNf0(Pj)5['oOJQDa0rSf>'5Eh])N`cEa9$0Yn]1\DLfplTA#c00_'L2u;385;sY9Y'udi?'eE(A`2DA*BnGT"s/WM-#`Wja_p?5jTVu0p3aX#H)1JFeR*qhC&Hp0Yj&icOUKct`7CV!tX`Q($)K`"hh2916+3/`O.nbApjp]R`URu<29PH7E'<97WqYo$[73:^V)sKad5IV'iB6m_C\rmq.f"%Dpoc)Pul+h,5T9&Y`R]$!V*dF5,gqRR<2_l]YE;=[&Utf>R\U*,55Gm2;>hA][/B+8n$/BIfjfQ@=)Yb5]3J(LrcQa5F5nq3&GF?^4cd][#'hd?94Tmf-7(-olYO24V_5(>tq7XYt8O(5Hf#P]!=%(#A.(h+G-X-:YJud&gCi]%'`jQ#9TDX/C%ih$TMdh.f['Bo^/r$LE`qMA+]hTK-T=k4ifRs??^H0eDimZbQfY[Hacc([$-\aYVon[DWI1N>IX-FR]4A(9mE2S)WHk.aVI\#N$>$j;.">./>eXRN1NT0]hYln8N`YrGhj/JP2j>DMS4IQO#>,q0`1^,HL@'Z;RhS0.JsmF6."thc4]7A5j>i.JfM[=*Jh+LAtc*;gGR:iEn/3\G3Cn#5uRgUN1YB"`p&O9_26K;V("qQFqS<=Cr]5/\/DF(Nn#_*/e'eY:)Dq3DB13f9InW:S`cga3(TMX%G"X]_gTQHq*3bVS@rXaLm#J!2JaY\ePT@\'hC#/)No2"Q#=-r:L*1^p:b=h9EaEARPfrG3ng4,TN]/MC1U6/A;/!^7%U6-mNG%OL=2"A5!)Gj2;1kj0:?WqJHdKe6XEgc)cah2saG1,)b.%aj1gW=X;H21=Z/,se7-(IU]k?'o,Z4jP2s.SKpW77[1n2ut!T22m3PW+n59j'I3.]6sO8qG,[aFAf<@-0\3qKpKLnZrD/BQPc\M?T_YkuPB\DP^S%\'hC/ajR;5.i(\U;`JE.k.OnE?^R>iGpZLYnn!!,VfMN.l:Il1\K<)(E1JL*?V%n;nq(#L>[LV\od%d.YFK10L:R71S")C!iE<\jro^q7hR$Y-]^hObG$WtaF/Aobl$VfA-MCU)FNH9UQ$(B!jXu^t:C^"J3QE?$]U^q(HfZYgPPa1*5+(;33!]2"Vr+Z4.WVIu8t>1/c,gY_n!0(ggQfI7e]>nrW>rFI);TE2LQV_n9]l.u,PmQsQ0fS5EE9CUheas2q;<=$tP!Djm5bA"!mjf?(Rc8+KthTDm.YjCIT&kIb3r:JR'h=,p?OjkV^B2*$XRVr(]NMFO2[MIeYc!p#VfFmnekgRa\V.q_k'^#p0D]L>T(]M:)Im*%#N_j#3n-V7?&:Sen?"1&MZ^!HQ\%^6\ZQ#=PBdB.L@h+G0)X`Q($Z?.VQM?T_YkuPB\DP^S%,:M#]ZmqpA25BGQ&feP$-T3H%+k0e0ps6`[,Z:t9h5H6rF"3V*8Q+`V,2/nTK7lgIN583lNbj4o)4Rgjtp0kD(?`%28rZp`(Uo\tCminN)nbOi^8NY*=kZ=j8pWVgt_u3O^7q^a^oQrI=o[df,E;TSR\Ra.0Z8_>F>"O2Hq[\I5h6PGmf;F+VFP%T$Ial/a)u)Ocje63pAJ_d@+ABSL+[mK`%U7^n^h2bsl&Jm"+/%#jJdsqAh]<5MkJ\@0ugfLNTK^;d8^Oui86N97b"/eQ%H[u@+WG_C@-%Ao?J+b(9@jTYMAL-poKd@H\V5BkT?,B>(IQ$Fk/.13*\'hDTP>/NtTRPD+U"$2d/)[/KX`Q'/Li0%nkuRc)VH[>&5AK+Ql;kJ2E)Gh"\eP2F0V30Y>6+^(j69UU'`\4fh@AmQO^F+A*UEb+^dpQV44lp0!WW3Q(>VTl!WW5?e#d^B!!$Chh+G-X!!($fX`Q&n!+7qF9"+j%!63KiF=R=k?p*7;[fQO0`m_&3.f]QW4P`W=!WW5?e#d^B!!$Chh+G-X!!($fX`Q&n!+7qF9"+j%!63KiF=R=k?p*7;[fQO0`m_&3.f]QW4P`W=!WW5?e#d^B!!$Chh+G-X!!($fX`Q&n!+7qF9"+j%!63KiF=R=k?p*7;[fQO0`m_&3.f]QW4P`W=!WW5?e#d^B!!$Chh+G-X!!($fX`Q&n!+7qF9"+j%!63KiF=R=k?p*7;[fQO0`m_&3.f]QW4P`W=!WW5?e#d^B!!$Chh+G-X!!($fX`Q&n!+7qF9"+j%!63KiF=R=k?p*7;[fQO0`m_&3.f]QW4P`W=!WW5?e#d^B!!$Chh+G-X!!($fX`Q&n!+7qF9"+j%!63KiF=R=k?p*7;[fQO0`m_&3.f]QW4P`W=!WW5?e#d^B!!$Chh+G-X!!($fX`Q&n!+7qF9"+j%!63KiF=R=k?p*7;[fQO0`m_&3.f]QW4P`W=!WW5?e#d^B!!$Chh+G-X!!($fX`Q&n!+7qF9"+j%!63KiF=R=k?p*7;[fQO0`m_&3.f]QW4P`W=!WW5?e#d^B!!$Chh+G-X!!($fXg[#eY.njUbK9FbQ8?j'Zt-'EG,mDC+sJ3TZESWJ'`ZCf4M+gg3cV7_lDq($dB.L@&J5Te&c(&B_YB:ddiq=u]1cfYW8!3i]QFfYLmRe*0)BKJ9R\QLtn]>FmkHA4qBTE\IIn^r#C*_)b)qd]EKLJD'-ekL$C3!.ZZLXj/`.>@"`(pKLCa37bD*oM;*EF%trD;dI]HniZM;jihdXQIkC$5kIARhpa'lk;@W2B?O$k^7C&6n1>0CaP!k_LMuA72LN]c-ZZZ^jPej=\//iR\Rh@H3HJf-ARjc"Q;%9R*FEZoqT@]0dB.Mk8IV6Xok!n%7iC_e0mo9aL:^=lT4O8GY*;Ke5IZShV->P%aWl0,S^#%_h;>MVcN>cbX%P%J]B[ou\s7.jf1c/>10g]=Kg&^ano3:E/G.W$PD@=>B;*Weh+G/F27f(3M_eVH3=C8Dm,[-2bus8:ALA"TD9bJ?/\9IVFfSg"^92$ij\X.ZV>W!D:*+bbS3D).jlD8n@l!NhaiLq&&J5TeOlsmOb,NP*P:J4Lrpa18o$ZB\'?:Tk]_8@,[HLZ&Q&(6PLkqSNX`Q'*&J5Te\JW_r/n2<$rjlAeX31`PCWg?h:T^f@C0=j!gTn86T]PI>?J0@!q1J70o'rGYkuJuP+sJ3m+M*hU,pFNW+sQ'B>A^WLID=Q;Y2=AMbL,FJQDLF5>1V;l>'AeIGK\$FqFJe^GQ4=ImHEMp]as#XEbsi6bJOkIe+1lsJ$A#>htpHtdH-!4O$%MkbGk0bQK,#=/U?F$c^'PqDHSn%2dfrJ@"I^@SJ1\(paK2mg6pSSrFlorDEHnr9i&\Rj+THWs5b?Z'"2G,/^+B:Xj7Lks,`S+X2>Q4q>?5H4.B_1/LsJ@>1T#N[9S.!'eS%%5:l7TT.6f].3kf>.4i&qDC$JN+sO>>dB.L@&J5Te&K)\HC:IK=.]_ZnntYc`ntn@Y^?+#<^6[kJ&%A&i^=omihYUNkqW0eB:-ZJJns15tD:s@;%pQbof<$WcmX)2"/N<$2q27Ia>K\O(n^<`4htZ?"_[#qCoO$l9+sJ3T,*s]nl`2W'a4FKi*^=g+a-Knh*noFj@cc"'COYHs/[$fdQM6`lPZ3^.OjoR/Q;e^W9",EF&J5UX`9:75Q&(6PLkq"NDDbq53a26B]?AgLS$(Z!Ech-)QIVhF/Z4W2[%(5]f!9a@V<.L+JX5t=#?sqC?$`ZD?<_;-H0fLn2njH*bBr.FNg;5dA_'on[@B:,6psF26prY>f$7GbVT9[me=?04G/`/,2mWrrtb0&+t,DZ!$4E9@ob@ARo>>D;kc,p!poD^\Gf8`grT.>u)Y<4>Y#9RY?H?aq_j!Rl3Ek)!:6psF27-*?*ek0&'^]`#9IbCG2tp3n`<8Fp?oYmjiF3D>4t1.?d#>'6:=406puKL%QrBaAH2)(fsdm@nG\2I*o2&?fc574AbF,jbDT^%P*WSD&!TkT4%lSDb"1eh$;2k-DDbpG.hN@*&WoXQ\'hBH6psF2A:/L"$[JU3=ajW,bMfb)r3/,\b#MJ[=%)E:USu#bGSS4]]BMQGMMcbZaoaMcd$C"I9,dKm;jj^k0(6kgiCGPT5V9HEr.G\Bt<9Tb.3l8gtCKZq.D'NFmhLR4R5,In8m?oWSr,$_[V+Hn4fIS,>WG`MW'ITI&^8j(,sp3@ec?e8Cl7FU6J&-'4r)NQ+q-qHIYGZ]BN23&@Yb].3e>26j);Lfn808]WH32$Ih'%f%%l,?WEq#XggjKDiF>XUSTCW$s*.fZ_f[Kcl=,6&pc3$_`.*`kj6*'c`UIRNTB_]I`D(NP(d@(]h`4c\oT.Vc0O2(*mT*,K-VFBLnOhJAo)4@D<:26..j$CsA,18i2j[h3^R+t$rbK'Mr%9[)=*3T<7_hdXo*;->;tNc;1QB`!5#_DRr_j&"&5jBD,#Tph1f?J77T*#[=AiR*C31u^$Du&&#+-4!5;4t+Q#6ba@;Z1kMpEK4)Vo/<>)o""=MT$n2df'e('#*[r>5-RgUG0I\ljQ#6a*!0a6`kuIca^j*H@YVRT+OhYItD_aFPnsbUD9)^g@&'?h(IT>t$o#^Hbo"jn2o%2tdj^"Fl!!!#->sC-kUcm3%9^FRccf@<5+9`pR+XJ>?,"3a,,@r.n,_[NZ-D`%H8%6pK!!$DAF=Z/S!!!j3\!jR+D3XrMj8@Kfl*=?MP^VYEP$a1GG56oVhkIc[j;0@3>s;-bGPPA:-nn^]FlpA,^eWk[#GrhHoM!spNR,O,;uKDh;[623;Ai@V;CbX%;E[oI;GU1m;INIpJ]Z'14k'1"lnd2-ARs^WX1EUP1`_,Q[;>RY;3`aT?HuOGCaK':1rF!"RHgdIpfQ;C!SV"'DkJr1\jfe83odX8;Tm>8C?WO)4,UA/XF1',HHGVCB"'=V7n\;hnr^5U4C#20G6?=`?t\>3"RHgdIpfQ;C!SV"'DkJr1\jfe83odX8;Tm>8C'bZ\Z9CBWu<5(?u:qY>N9qO.8Z%\t5C18I=6I"%Y2,!u74UD)g/?E":r-`MK$e.N#<&G'>$31&CTNfZ3[fQO0#3])leo0e(rG,@.*=`&L9YnfLr[_nqhMl1FkZ.Z`Y[cou(QiS=!!#*HDD`H@lq@BZ?uaH'F6jV450a-.^nipWcEU +endstream +endobj +44 0 obj +<> +stream +Gb"-Vfl'i&^-2Dg+8FZ`X5DIdW!Y91LSA>&(I>-u-/a6ms5\2'Odk+@B\:f+YF"D\__;M:0FYi5AR9GXcYD#ilrFP40FYiQ$o;A1DY44ODT+:<__;M:0I&LBuhgKKNZ[L1(pR@2S.?bu!R#;@nR\eiqTl`GWXK%)Xb-__B:W@CI.afW?!F@2O`-(krnRlrJbZgSBSPRi\Umo&QK:[jPGi__;M:0FYk3\+.c5Ab,r7I2M1k'V/.m>R'Pg@.KPeEQ$/ENPua.cL1,rac(5VqM&:sb.H1)X@>ZruBpWPH9^H>j09^mb"&]]+1.[7`=s6=%WeZh$TmQs#h2:$G@>[(8gFs%7W:9`&0LZq(.s5B>D&A!V<-\CNR%b&%e_o7u.$[E-UM-XJAr3J]j]mBWTZu0c"dbZdO_40h[r!RclJj]/Z=u3Ln!FBD>-@\ZYsH0RrY`0EXd=WdrDg?(XlZm[?8ekku()j"Y1FCKs)A0u[fTj3uqs!jS?b_/bbb@/o=l1!A-;d:!YiEmm<_rm4r_5@rZ\9aa?a(H&9'R+glPtpf2IG4-0cJ]bgiGW\F,+f&0Gp,X+T9i6(d??*=o:CLr4tW04I@`rs0EXKh.G1(NT:DYZnA:EB&_p3/>8kE/!,*h2:$G_`=7)8+c;;@(0USic#CjE"7A_i9gmchOjbli>g/%*<$.tMco?U-jQGTh**5o\d]Em3smM3SV6+IP+BX$mY8V%UXgI`"]k$f$'ss=%F^X3L$?eS_7*WtKGD*o.OSX"*nU$a]0O*,F[JU3MUedPeO.K8e<<24Gf=R>DT1QScJ^!b\/2al]+p*B3/;SM.h*<]B)WXF#\ridW!$?=B]#8(FT/%`dV1os'<&Qeh521?g7-pY4lSDF#\qr3/>8jiTe7CQL4+%>Mm9TmEB&_p3/8;h34fp;'o-iiLNE7V%VN7[[pli+E";&M%VN7[\)M?:kAUoD\,$ZJePh`N(&>njns>@,?]sLm.*iqj(9W&]Ipgcurs8YtViTc&X]&W_KMdgq>*eN#"o/JE/g@##eV#6\TlfN?R':,)C[kFR>IG,][74Q@Zu=mXNG>uZ'S+?g0W[M21Xno8W6F)Plf+Hr3-=.:9U[[DDRIMnij\5]fq.5#2J4b/Hp&,YY2'TTM%!XgBn?`%C;K=e%Ms'66?Pp<:>Mq(@lNhlK__[AFO;F:Tm%%[dJIU!`@<9CEtIC6#d`+NK8OdV@+)M'Tkr*\ODZpg_[]dmquTPq[K0"_/V/e%>N!Bs7^sCn^s'4@@*It;YY.DWQ@&e8;FRU@PS'lB;HTa38?$%,@^dO*@^fgU+sM?nfWEf.fWBsC"CeiL[j!#Bj4LKjEOV,2ALpnt_f?6+j_,FF.VPtTM5CONR<8WIPT/fWaB91pm*fna]\Ab]L[TX#Jthl&2c^isrTMcj#[MXFs.Qf>GPGS!>T('[;ZuE";&M%PQ?$D'4%fI^^'3c!:EMQLBK:GFIKW]+:QNaX.id@k!Yf?OLH&D1EAuN^QLOa84*74O7\)KmWS.h:`]%d3=F_qD0EXZ2ig3LmuoBfN^>]+qpmLN>G1F8/C`ZWj\=EB&_p3/>8sE-A8`GH9mVo"U.F8qscH=@N3LEg=dK'oV#!5Q26Ys$-MoI.lIt"X!d10/.Ck;YY##)AkDGeZc,PjHe?!giJ)&idD5jF#\qrGeo.GG%O\D01`/)Y$@H/<)obo0LX/Sj6YXMKpghSo(f`U1`_N'6ru*s"r]-hY`_NL`:WAX9R&REW$M^oS5*X8u$[oJBHaqrnSAR@W_r'nOrl38e!TRcFLG@lui86=,]4N^LESi=$M$qnNQfX-5>fAJM/D&Ng94?':jY3iH-'Z^4!:o(<'e<\9[)F`-@OWj/frT3rjfF>=%k/`$:Sb3cKoo7X22C#QpCu@jbi'Pei>hiS_Zr90.I:+%AE;da_83WIQp,u\35f,B=DEdi.'-@r7Pga-/lL6!pW$?DJWiOu#_R+tK0iUW`2K4VkgIHAVdKP.WMmb(W(^?i1drJ^_jP"QQUh3*8Hn8lW"R/<91hsVQ1i>g/%Dftgt;]7[Xrd3YVrJ[.Hk*k@o\aen=oWQm!alTZsY('4sF-X>Vj?>#=NLO#SEn@fm;dC&Bs"9iDF&Z2@lqodB,1T''Lt!(e/5fp/Xk9c.Xk9c.X[_#`Ft7_d%d.d@kO:DoSDB(YMVX0Gl:Z:NG,p`aSDB(YMShHE_`@XS%qi@$So43l7K0p(U#K.aY9I%9e.Z7E[4&uR6.!$L96Wg7+\9Nr&$]_1P8e9NKh'&n'pCLrI6XkLF&R:IGqARA9;V/%:@]"oKC&Ldr3+G"tFkmZLeeGD/D5OBX87"7Lu->6`b3n^rB_7uNO;Gi^5IW4%HI-6ZSE((VoNd(MjhA!dSD%j-$n#8)q!5rYO2kn1nj54YG1=:!tVA\hol^MMm+YJhVpn+8Vh>dCuTmhEf#+;,09*27Hr^!(H((qnEA-]gN1C+jd<6mJCV`*SN!#mXau!KS!VCV=6bUBBMl7RZlp#!=IJAQ%J%O,!r!SUu0#Q*G!>VPu+Dfr">(MGt*8,>q=5YXjJ1;T!CkDT-M4DT-K^lrNIR6ptqo]+qpm]+qpm]+qs.Lr4,LDFHtc(9h!X\6J2I*@eHHQW1%W)arF"+JT1XNr(!!Kg60XJIuTrg;&TR6[(9i))DD=g]qGm*UJ"UUl?M\iE"$%;6U]788:FE+rpd56EQ>GS4!@YQr!6&mO`$m5Xr+t5\f,_:c$0uG/=KiVQsO6b48ple,gL<$r4YEB!`"XPb\%?LP@Y-^;"mU)fn^gHd`glm,='^PfIQe1LX0+]9e-]b:hl:Kj3MI_J6ct57'.GL!?n2"9H$,"%dr0^NVBL4k*>Pb:jX/Lgq!p'Y+:>U7h]Q5+2l$5&.c4$*bkePB+iX&5t*e]p@1?ik%f\Je[M4E_**lalL.`hMXMelW1OmoI<]b,]K+hbK9l^6St:WNQ>P90L?^Rg?BP'b,[7l%&I4pY`AR5([I@'l*3oJ7*^Kj>J4;\onQ-^*]emIL0%-Sd.-<=('@?ojGgl+Iau%C]u'KL\dHDE,b8H\8^^M7/a5a;fri+XB5T723lP9>R(^\98T*ZihfL75,XE2W7^1u,,5);`qd%k=bi!'T=olPE?LllFcZOnL-#^3L%WE!L'mG0j_>Y..+4\&5qN)kluN9k_+F%?7c>@+X!&E<"cHBWSfJeMf-K>>m-'fZ]/dTD\\G$GYTln9_ZhkoO$rp`G%!W;!M6Cr,\;6q9IFfVc6_ML/!C;_?L!hZ>STK%fK^BPtBl'341pXB.E`,1T''Lt!(e/5fp/Xk9c.Xk9c.XZ2j,MVX0-3LmuI]HG,FXk9c.Xk9c.Xk9a>eDWlhJaR%#Xk9a8SAR@W_qD0Ko59giBiDRCE_[o%nO(CT#*V\QTVJn$%Nd_37unXEe#.YL?VVYp<@aEQmTnQii,=6],QIjP$g@*l,U,PLgL's^X-P>k3O<>7]\+$=]BU/*.@U`QN?8Dsk0APFgU9@=a`nX[l>p(8E]L4-[0"LoVo$q4A[#b;7T_Wg%`H6cd%V[;'2e8.28dGAX.Wok3Rlot!tFqt@+3-'Y]7Q!=MJ_gbl=OAjL+-rWIWYXVnq?rF!9mg#<`iW==aT\SW=gT"I?1+O$=\?MHSD99%cW-DXddq27"8p9#cEE7\2UQp-UgfhhdtT"J;k$`f2&Je#,oo263'r4BPp*oG=.;rOTU[rRrRmHKo#X4o04ZIdAKhnHDM.ZF#Q9='D%Ma4+<'d&4S)q[o"Ql,=ui*:FV9^^IfL6;RL`oB*!LJmeZa/;6BK_Xouh?:QO&@oOGJZX912%RL)a'3k0/L.rUXN$ZXsAWfXM-_9q)J'9#cE%A+Z@U2rcFQo:bt0_L?a+,tttCJo>'AUA*%h5987!^(9sSh"oqm1t:$*((N]9@j?._oJ5lLc_l\QplHKcVeDeag1/!n,5NU,O#0?7JnP(dlRr#*jJ5*/#(N!7q"\l>X!KA[Vf1TCKgIp*jR?2ZD27MJf>?MF4(.BO<=f[b5W%+'OcV)n>ebXreui0`QS4qbFXrfqZ(hP4g#DfM)f"]Y[88T+.dYlt&[lLX%0uTCLHDuJ^nUY2+VJI@VYV4@H1`_)=LA:7?T\G,p'2.BCOl=+)JXmmDNFN!qcdLf]F%cKF>4cfZNCsrp]b8+QS"d6Ha[jIFfUhETm]"2e%-8*ah89k/KfO#*=oWsh5Y8KCOH2P2lqb%j^kZGcSjF`@hWZ`[h=]Bg'dFiRk)tuM,8uU%e:II-%B!p:#YSc4'^SV$b&Jce,aTJI'_B#(jXM1e1m%Qd-";BnZmqloCQDaQTV-Y[lfFe3/;R";%Fc0,j\G6]W9@+84PnlOK7sKAN4o1"B=3e!oZB`I&6E6WN9,\TH_oRap>To]+qpm]+qs.Hhb/C5n%D8H;A`)LN>G1F#^cH]+qpm]+qpm]2]GkE,[eKeU+pg31RlHSAX$^7Td,,1t=jmirR@P.tOlONec<:Va*)c%S#(clY(rbqZDX&EF1MhTm"e8XcQBOE#X0fE?(3=.KR)-Zs;!;gXu4=93+#!3_'4kKsB^_LU`#?dUBTG`]%#KXmLAM'dEQ,)"Jj'^cQoapdRJJIj/CcY_n\A&3KL_#G@.n&)0+FgXjF]%8!^BrnN2NXC*_gu)IA^WOd.s8ft/RZOY^^.D9I`LQAZWGZN!;')<,_@TMOfR\A0.VT]l[=j`eT.dc=1GpEA@QFt\]%,C+TEpBAr(fT'$=5aGLV9CQN;Aj*VViDfF16J%:n;TJJO(;R_Xl(5WmC#AL7A2l'"b*$atYX#_;ib!P-C4G!Oj?%.Y$7W!*gM-BMg<@K-fc.iIZAi/2V=!8/92ABJ*J3G=oZOe!\c='e%>9@(;b34rpZpNcMT/S_f,,p$lRBW,bb#'muX=a4(9=%nI*P]3rZ,ii;+Q<:'lMLWfj3/>8`_rUu?OQ#cH0pMEZT=^O7*dZ1?YS"6-;a5o)AE#u7>n!.Hom'XQ,eW!+*B1@aYAg5%>@^nSonWa?+lmkCgE&U*fF$TmN3:cWQ!#T;<;*As>HqD;>HqD;>8>fr#D`&mDY7?(3"G-@!Y/kP@^fgU@^fgU@^fgU@^k?9mr3HNpN4Gq3/8;h34fp;'t`!XkZ1ls*TU!Tje"EN4^o!f`$?P8DmMC+Vnr!Xlo^\pWu8[/_@"Kah\`!1k?]b#>L?"n8=O[\-$9j]b7m2V/.kBe-9+/-'n`F"^=8N\CNI?8"])a]=T1$p-BnbG==T$Gi-8l"ZlqZZG5jN-$kT/*ds%aQX&qRQ0oQR@=H%gs2*s6eM?X*pXohU1oahqHV9+*&RJn\^V(@%FEn'.jkYRSYK@)Se@2gnLkppYreimRhW"M/o7!Fud3-LE/(4$cmiF79lLQYJ_@R/l&.^'PcV4ZgdK58=?m,#O+"s%?`^6e87>%6:>k(Vj@Zb8hH>p^p_YZY0P*at`q3Df.'tY3m'tY3m'tY3m'bQERlrNIR6cX)`DT-M4DT-MD&%`Rg'bQR9[plfb3d.Q4GH8*G6dgiZ`_JeMMY>M573H*\+Do(\[!ko]81=":n36G?oQ^XD$j4q)N;O>m3i&m2inZ-f9%c6b[L)3RZ@P,HDH$:%l9WMF&Wg)_Z\#?=Xb48ef$V;1i1W\FM1H'r.^$^EDKlE.bBEVqXl*utqbW"XmmW#D0*Zf\2nn2,hHISHUN\[*:IJ1+1._T/>\@hLkY.G,1)#al$ukhUj<'ST_a&[&k>#a>Q3g.;#05,V":Xa0Si)dD!]!LZ;HD;D(1%]&S%j.e1Ci9RdZ+MeB4JD[[plgm\$K"V.s@sP\JFZ-k^>sn@RNWQ%(d8Q/p8ag.sSAPd;I8$Q@Vh',t,dq42GRk?K$WMH\1OE"NRSm7&8AO=Bp5Ya^VciVjLMj^SV=geLJ[O0?60hA,\E,5urk9'N#l'bi.iVoBP:j]Zl)"-2t:i1@*JF:#6C'NaIX[2B$Hg:'"_u6#c+DXhup\$kb%i02PGEcnZmjd4q^@f)B=UX\q)p5,#"X/p8ag.sNq-7DFc:CA?W-:-crV5YFM]0MONSj9N1t=Ug[f!^en38lfS&#PmM?ALC`KbPO5ghF])@cq&gUmcsBa0mC-E`1So'62p=A%G1O`btp<>5+K<+(Uieg%s@X8_X`sB^b?C_9q%/%@j'#K'(eQAodb"Qap#;$i=+MV>6T%:OuAa`6Js8Hj1sLR#@Q]D1ALY5ItN[B00gl9MgHakg[dW5g7$sOV[qbNj">TUr%Yj/nJ!$-begQu5#EB=PGd7+m+EV.o!fWF]QaX$bOamm5b@e\(XM%(dmr>EouE-*U!N4@rVZNi#s&SK]"=em8!T]R$1bF;I<1n@,",UW9^=%j?F\XJrd(aH7o)na#ee+BqhU8FMT)ZcXoR)R9a`>JAGR9LSMZlLPVGSjh1O_iVEpI.8\#`'M+L,uY_m`O$iI=;l;I(8QPacu$-Wb)(XW-GV\^PZaO#oONF7jCWMI*^9%IF-X5n;LL_+I.Jmo\U=M(S3.*5'e/oaGjflArpJB=JRaFch2:$Gh2:$Gh2:$Gh27"X'Qu!MX5P$VlrNIRlrNIRlrNIRlrHMBs,#Qhh.ep)%D1.@G,piBJS`J\9_Up,GOu^HiHuB)0A6cnb@X"LRh'=6K20J;Pr9bSYp!iG+FQaZ?G?R4KpRgc7ZafH%-=[3jio2j/"9-tq5eiqIF1(m4(SnL4DH]@'2]TJ;?j7?IRs3<)SJYlMF#[H_Mr=IU$;P>n?k*)UW;?iV=P6+qEVcte_,"`q]:l-.ss'p/52K$DqI+_"NLB.+(4HmrsUCnIKM#^!qK&<3E=44o!dMJ_=QhciR_G/_367-i4%Tm"hEs;M;o]`gTN*Q<4k``;\_;J+0(R+aB^PnSp?Db]iE%TdV&>rn?0`g(XGD8HM"-T-;5h=7[5\Xng59O@]TE272B^1arol#Pq#S%4pG.2=i*%3_hSbSG7T#oZ943"0>F"Wmu,=oZ!.[tBOSAreSaL45tF$@`9\1sRlVK8cJ&=Fo=)Q'M::F,>m"3+"rSol#Bk!>\[,p6daB8uR#j-^\970ogqJ%CWbu'q)cnXYaPR?qert'V;9d:oX"#ISr2+,)>&DPs[#o<&U_G;7Wd6lYg%XFidR#9,V)LKh6*_N?'u5q_W@@DdCNU=,b[CFUjE:Sg_GfWh'AXfW>6UgLi`$23fC"5eO9(uk'6XBiFBY$\pJ,phS;Nm+Cs>r#Y'rFD1=.UuIhb>1r;]QbTIr:*;Hil/,"aJV_(O(1c]#87[ac7X!3IjSN!Wp*SG$HQ1Jdh>qn\F=S`&JRdjb^r8>JS7fUQo1'="hm+!diqYB3IVZTH6LV,Pk%Kl]Ug#.I#d@O<>HqD;>HqD;>HqBEd>*P6MV[R"*%gMXlrNIRlrNIRlrNIR6o;cb>HqDGQ(s&hC8g%!P+JDZQ0C8IkscEcj.E+)%tFF+r:s-5?Y4mQF54__If7HH+Bj6?e-J*$m(q;iI7Ih29S.N'jG`No+a,]aL^Q*=L$^KUu=^Dm^SQ`c'!Q&Ta_3Xd*i)@,qP50.8t/is)S[J;>>cTtc.K<)O(A-o;S?@b@31Z\S%38oXqX95;kr=q6jo=n\RR/[3ag.p9`mZ13DO$A0B;%K*f/D(FcSj.njp's'&j9IYane?I3AhRdO+P@2H)SPWWV*Bs>`A(\M4#:'pCm,*:(2Jh.WAS"eJrdoj.DuW+jo?BBO/K<9ChZ0s8oaM@,>B_0l?Fp63E"l?T?45Mrmst<.%j7._680+)5VNURPtV24G$sUejU_iTTtGak1c;bXU;c$+^AS;plgeboI)RR;[sfQ\)*8U/SN6k&s8,$RmX>7s))E$dCtJm>VU'ol3!.jCmt?RU3O!;n?L[alE96A-BR%l,[r,23@oEc"Q;.QGp[7:29P)#F*Op4e.Ps)nJh4q,2/D/:@l)%:3d``-*o+;I(HOVTY\DQu\9mrk*&qmCA396EE!YM9*WK+GaMQ,DeoV!tgH+9),tgP4r6/:Y+NO(8P3E\EnGlZp&=OR+J=5mojn85lQ.E`+9\?Rs*c.AD0A&/VYHVQ;.huuW3O@nd`NuK#g?!D&e8PqI3dLdB,6E08"HV+5"Z^q)%R(al$_#=1Y\(ofq"`tW\6Dl6NugN:g^,#/^)%,iON87'o05]DWOm?njJ!+MM+!X]1T%"8PhpB?CGIQ.!?g8Qq:i^Z7-+#CGPSQ@&1/2fgOZ3e[_hZTf>-Xo=$b(`F0kd(A?73#q`P](_>2P-U%637O@iMS;[)$#cWId%]iKQ)n$hD_J(,QJgR(3XET\lhRe.KA)YFp1G%+i>2KZ=W_m;j)GlH\O4Fm&iiTW9jV%j,s\GBYFUK-*8C#1LpbY4CE!eHo$D4GHrp$o1H(&g5e?QgXss`Qr*!Dr&&,En,/4MbH/8WMBXefBMkaVb\@"7n4LL>IjrZ?%_::7X4Ih1U'OTjEY9oF`q@>gTr.gAG\LUmK-PdR[Ru9r9,j3YiUE(KWD+FSD:7n.CCXAJ-^bMUGmBkj8o4R%&b?&*KO2p5CW=uLKmoHrHq\I7C;Z8nS'RIM.e8s_S5H;RaQ@If`m-,anYH8$)FT]5j]+qpm]+qpm]+qpm&WJ4*[n>otaP$r>Zj=`-De]lGarltl0m&MXQ_tj*^/h0Z-+kP)46qF+ABBaU$]Bh]6BJPfd$6@/ASR=6DPlod3.*3!9TVs$8Y=F6,g3&0Y?su=>=kZ,g@`>NWl+Q.g1:p6#MM^gVMdu"G)RK#l7^jefkan!+/5P"T5D#KL7q)fG0;K5_dH%-2Tj?be@,E$kN/!*[UA-Q994B\&Wj;`ft,%-'XaXXXXjIXm4`Q!FIAPPu+\*_P%J/FgQZ=8:FnRaMQ,_WPsJI?$EhJ[\4[*ZL5#$AA.'FPQN$Hl@Ad:pU>c;F.QS0QeXH_a)F"nF#\riNSsu'':K[G6#0sn<*d6IFk&FEp1!fp76p%a\Rii8UL-?]nmWi,&6&K6o'k2FO<:Vnb;/q!/Igbk<$Gm#5S!HNe0W[/USM,UD]/)8!k)/U5'?"PM5VWKX=NocEALs2"B_&:.@ThPp.o1X@/.3BOq'C!QGiuem#Za'bl5t/_s@URro+D!"g1=ct89uiJM?ZA)#(BVt-A"hqhUo,&,@Ep6O::q.'5WA%a9R#:#-k*2Z9!:g!*[^SonY'&(4*%a?F%>%LkpkAb_SZO0PI_7LaQ@kMmn<[$%W\K6D%EB+Ks4CSsbB=i?e(hO8OV<]raID\kl=%Ft7_dFt7_d+sJ4W*UHfO'>#!kPr]Q1Xk9b3Lkt9>@(.&BfW>AH.N(l*>I$?9A*s1_3k0b4%>@SMVLTZouWa,a3C9II8tccO(/#fb2Zn7);H_ON;NqWKo`;N'`jEK65OnY1sNPe`l;EB*BlK>rftU%mhm(s%<-(GoAusNb`lp9u30gM!2O:dY;2?1FlOA=RtYQQTVh&)#I)U;lMaPP<*4pZQH_N*o,q$$b_1Mam_KeZ]K^a5J'qSpBV?C&J5VgO4^SeXb_dhLkt9fZ!4J;&J5Te&^foS[plfj+sJ3TU=[G'`GS+46psF2YE.Lsh27#ELkpjn+1i9"'n$p^oZ!5V2iBs0,dR`l$*kgo@6pr7/]+qpmI2G/tfdVm`+6q7sDFHrMd]csKm8ifJpIYXX'b'O;5BqfsZ!uI0`P7(2Mo"$)_cZXWfpKaeW("!-YI$F\?jVa@M\X0$??`+F)Vu@r2&0YIj<`H\fWC&&NE5P&r7sdnpp+lk?Lo^On25O\2J03GC6>U:.kT(/=Mj(T@KeKLf:AjjL3H+59a+Z@GmSXEG,sVMUD8/"Is4`t^2.&4f0"s,I#[!pNEL(U=sRnR9$?f9QE^.n=@%o,FXJZ3iLQ*;;aH^>?@q"5DmtUXIDZVWpj^obT(t`"RjAXUoM]R1loj(#6TGX7Ik?Da?@r[\*b1r&X&b`p[7D'CO<*LI>nhH6L9da]/-t)I/BIC@^pc[n*%aQ'btpUBLNh;fh?e%DPGM?LMQg8?Xe`btHe(A0goMrCei+N$_?A9)p![7D'che*4kcg;Gq(4GYIPDnGqqCmX]d!._/ApHQY-H8*K&ok+W>'Lnfc:ro`99;-_3:\Z>Aa1@Z](Kkj5Su*=fUG\BB^pdY]M/`P!R/]B&E:;jIo!Ba<(p!L=LRCsiAhO$h(<^p[a7J"E7NmU=*[/h79hX[C+4+_t3,R5,nK:4OApJh2tEf95G+gI;VB\!Rr,SN'_T#Y_!"CsrniU(JFnF\"S#8D/"0@XaEN1.eSiH1akZ!85YgBa`uVEja,ml*@BMfT+.\@pk`;YgOHB\TR7MR0b2-d\@qCg6L54A]:?!D*V1B"BeYd*WWaiEEjASLFse]L)#;NDIn0+%1R,0$jjh)U_AK!1('RD$`nRUF?Kc(&I-:7Jh2t"6pS2nXG*af*40b=A/l8AGQa2,#'-(.\T3/fUeHkSj>$JDm'oqb'9]4&Z5?.X%Tu;Sr8q!0.--rb4Uu$tjY>Uh6:T'Kfp!!'D)fUBZDOK7!BICG/pRtba,dNf[WP,E&Q^^lWSC(E=#uXhakPUW_$@TH\D!4.Om#;1]!@"R'S:)N()E5\F+"a6J7/bCNDmGH(>KSFj+t[mi#RAi[6hbN%:$q%K3l.IP3B#rS&ooG:-g\\!9'O=2kI52_!fqP?Tjq%ZV-RLWMMdo`2XLQiSua"'PCh>n0t_(qfjs77'>6[eDimi\G(11$P7blL!I1,06,n$)Tl,Bf\"VO_5ftk@;8N>ajb&=;$bB"@15QR<9p_]!5aN@?N1BtE(mVS.OU-TP:V3qCU`Bp*SA9$]DT-M4DT-M4DT-M4DT-M4DFO3;Z!4J;Z!4J;Z!4J;Z!4J;Z!4J;Z!.gR5'Et=hQ7dAK;UuA',/$gdX26^*TbX[EQ5DplWHrNd80NOGTBqiafl9(UUY16X=O<4K*1KQKCYuH#Hd(!nm-",P&9HR5K8*NbjA7Y3bF*5(/GkpI2d-g\[^#>ZuZjKP^J^Al8"V44f(27FeKq9"';cp*T-2[K*n&;91^XGi(:5M//^Gj<-Z*8t$'2g!imt4@'@+j`JD7j[WbA]H:PX2ohS#i??R-:<5I+aL'XI?#iu4Ep`hAMelBrYa904p$S+f<@&XpZAo6G'8"E0-XbK$7<#?j!*G'X3!gV"7KelL*&-1S`?CdlTJPhfZke=qQO^g)K:Cf[M4J$60hCLOE9nF;F1\iHXJqG+a)lTVMWOef>G%OO,aA9mhs_]bhXgXfA]/qOb1e`9%tQqXKZ7C-<&NHcE&7PtbCij_`7<%XC@_?H8.Hp6>K49XK\TSs3AAk8OT4:2F=Z5Na>ac&RlWB[**E12?!-kp$Z%eK%no+gH9)JCMWIt0+PR4Cmaf7Cq[]>[Q%n'^*:/ml)92gS+F?pd"$_6a&?]>%#CV'WODqI/Z!4J;Z!4J;Z!4J;Z!4J;Z!.gR2=+B1`,u"Id>Z$l@&Z+k"d=@n(qX)qM0B]t:_)S7(GpSH%&a2=k(Z@O]75!K]Gmdo;a)2N'WQnreE9`',k<*.q,P&Y!*k4UBo1M]%9:RMK@Hq\(6#tWc./7#ge)B.mKlcsXGkqS8o2f?iQ\5RY^A?%PPYCXcMSLg.U7!`d6QBZAGYW>tHc7^R(da:G/el3%MolhMqBS$*5^817uabdA2\L)CD*cq!]G[$4pG;]X#e]I#_kKX+A\r6d!`)A@-7iP.Sr;\23$:$<="MU@,%ah'VcapH%r93m:L]en$h'I3jVJR"-N7=CiJfKmCi/k,O/tG'5Q6$8[LA?k,G07_J,ZqThd47FKEt#QaI2eVT>$BW&XJ0KMpunKfK5C&'55bVmD-dbD')@EOZG?>h89nS?E;1QCM(!&b0M(m+:9im@+CE'KpWfP:'R7A`.$*nA:O.n:`8LRd>B&lW2FoYXK=/$X+d5O8MIh]2:'KKd-^U@:FT*!@hn9,&GJk(eT$GCuF4jFb\R2'P'"aV$45nh%pdaJf"AL\c1c*Y3g=`0L;1;jTRR2"m$:SC\`Cj%rmsse02aCM[$,f/ZE"!3:<7'?$&,DDVaoXTu?h35I7CJRg5.][9@A:6I;>b8?ct154Zld.DLT@*79Z$Hq"=EPRJ:eY!^ds/F9BfheSP[uPJZJGactkk"PL[oc4F.A1*sETE6iqfsn^EP<@*``ciUA"(H-cP3:67>E[plgU[plgU[plgU[plgU[plfjH@+;HfWEf.fWEf.fWEf.fWEf.fWEf.LgD18e]@)XWDkr=H49-^ej8K_^I%G=s+0'BY&=c%JBI'B),Eq[5NT;fBsZK@EZYJnC,d;i+P/^Oo\,>#mdpjJT0WhM#(^N_LDr:CtSqU*B=Q-[MCiJlpo^7@lmr/GTPG;>QXeGDhI(7*ena6ItglLIY@/*c@q4>J99*Z#5>@00W\A1#F\#Z[KNia7.mE0"eST`qhmgh_ErHiMTl6Y)pEuQ)^Zldl$=q4UdS;2uij`(%\045YHG\G+U6CeYd^7lW+[QK>[c)HJf[2-t9*s_[<*.cq82o1+!'l`^0)3>24D+<2),N%t)T\mcrgXhH\t21/=W*MT5;q"rtJ!r9#3omGr*8'_E/Y?U1M6(maP\9N!EgEtBu3rUAC5dl4f]S%o"T[+:p:sV;fcY"q#(fG^3BngCNm\gK9P6jPGd?6O$A57(X)ot8AMYc)e&K,F`;(+kmUEa$2#m33f-)kNjgE:q_((dJ!10Xg'B_AB!I)m5de&)AZ>/tG33(XAS%F2.VUo)=g$i2?VQ"Q[q0XhG7:I.S#(,9b-1;0]2"#;`RbNr;oXl!GOMV91\e,eII#ic!btPr!CMfMD#8^&oKB&mVhl1&U@$O$L.I*1?+n08#N_(I9>)K:e0O%l^XrK"G$JE8mc;@*ak8E8g.T33[T3XBtE;GV>sJZ^ptW5L_LpTqP29,K:Q5U^b<`hJZlHbjMrhB*K;p,Qbr1X>N!ZCZQPmEGH5UJ_<8U%Dj:)R\Dmq)eqP@N`JNiFm$4J"_f=c);B[L7m!5)nM>9"dNEC"c2dE&B)*T"]+qpm]+qpm]+qpm]+qpm]+qpmd9FD(`GWY4`GWY4`GWY4`GWY4`GWY47J-H/X[[EAHE&86ePHKP^AJ+;a,YauT779)5Q;NfRifGFT76p1&]r(ubXog'q$"i%WqZf]S6S7-#%Z:*BQ!q?A[1@_/b0.FlV9$_D2l`sa67\KqnjT`8)$jdl4F>E^uYs%6"Z^tDdA(G-[u3..t99s6NcRREZO)5L\JU`K0/%,h)1:PLs#IoW[b2;@sngA]mTuL*A-d0Ob4dQn*&_YY]\Du\9[HcgqS%PB$ZnUNg5-j'a<>a6.UiZaR4d[bHJh%c.+LsAJOF.B/"K!=SUkI0aP-C_V,_tiV_r(E9,q@OM.uAlR%^c-eu4P&[lR^#;Z7DpVkHC*W^P=Cu;l+rqXZ+Y]ePpn:$uXJ&Q6sIB/j&2aH6CkAh6d?K#i/jSMuS'?5ZP5uK2CHjrJeJWq'u9N-?kaK.tAcb[<,5`1s$VJkYCL-ti^J^e3j8>_`?_70"c?rH66OBZ83U_h*6/jGatC.\VD:[NqD#>2e;g*(9DTX2gmAW+dWE.W31pT[R6QG>9`F`mYr(ej)FSQpMfBV=cfa85?3p0,2\.r4*hU^KoWK/"?Poe4>K:N=LA6k+576im181.ko**[.0t[^TPWUhE:2cn34s/ogphYB<\@SZ\#s'>fpHejT)%IbaD"J"!qXV*+$i([jTe`T7f2Gk+h2R_$uB+^$E@uM!VqU^rW;?L5;h53DhEck+4T+_KO]@)67`t/R<*#VZ"$9h5(I0@Kq&2)-Y@DNpBUCYrOlsU?ZQJ5Mp-U`^?Y.&6I1=Ah?rLJ^:"6e=E0-9=X`$F#0-"JL-I5,K`>?pJ.n48?onS62aI&#CWF-cE4e%2a6pE&K96AUl%2EO$IZKq.EdC^qtIq<<@_MHc5i!'%Aj(hRUN[7[plgU[plgU[plgU[plgU[j$-FfWEf.fWEf.fWEf.fWEf.fWEf.fWBs9+1p(ElrK-V^_8d1p%pY_YDF)Y$FE.\nh6([U*)<`Xt)$`4>5l>kusR@/CTp7&f8[^u+BC]q9Q]+Oa&g5\PE%Y9hn+k8B-c'=*W&NZ!Q5#;r`)IKdeuVA=bOe-DEXKTm((X<%Pgd6OjPqCpA%c-\B'Bh1KSbe[JhL[r-_YLd9ZcoOI,oOSpL&U-!.AlkESD\P0JV$0;rU5&!LhWU7,+JP8rDGqF<#ga/FYShOM*eSF7oPNlMm>>?\jeD5_3L&jjn!fflV%tjer\a2pK\&`HM4XbMgd1FB/AA?;#HETipR5Q4PN.LoaJZ(d6&Uu_B'RqeGG05ApXb0k-4_Zu#B6?iTJ8@U+Wo!aqiB?dr*^(9o5rPp:NTG"'O3*h/(etpRkla+?f"oV3-Xc>U6a6=CEDZZc,H8XLOAt,me&#P_T)%L8+E(&T<,uNl.a).a"%`t\=WQt!`-[g>?J&Lt]BhL[YR;7#_@;b\(GE\6b?)O;g'[C*l93)iI4aCUY6VB$l.fgQQRm3McYfL"3=Y*cH4EX@#%]?P]O>#+)Sg?ed$[Km,kW-XS\,J?CoW0%Pn)GA(6!>H;X0b7AhjB=W@hl9*71g`bL")1/9kj(+fXc[FkVraYkKCo;c*;9&[KRGoV1Y0E5[$)hX$n1sRqDE;:Bj]$a:l^*AXFr\qbX4)kk1)5@^.KPsmFM1c($pqrf+_sOim6i+IfU+9A&I/()=_GkWWLU7%]$_p9P<.dV>s37Ab(?^)6N0F87g/*R:Kahacf)sWs*eO.Xkh%Yf-9s6:og\\:B%q#.h#1UKD1N=W(bY+8'Y:5mUH)+#C*!>cp0c?6@qoLkI!4cupdYU>?;:YDPA7hET&n'oXOO*?ZOT;p?DZ6'SM#*R,lXO?P%#l.#-,hK,6XNQkEBCtjJ8,6SlOLP0Ao[*`^4-#^KpbX%@5531T;ZD"'MWl=INO?q1EZk43&cN+A9)('Z^j9N-8h#"$O+Ogm]*G%j#;XAY7RM"p)<;)K_=iH$+67cm;adJ,mg;NAB_=m2(JOJM&TY:5@ieK\O%'I#Z8)d-7M0fYYfBY$RRp*!]<\T#ADH"/(OL8a3KV?@$Jl#,CmfDZgCBV2Epj(2dif0!;h@mW#6!ngqVnmShKYu9?$tfa!pS-&qemSi,1r1[pTr_Y\ha'Y!@Z]iWpF\25Ze"W;E4BPVrn+@*Xk9c.Xk9c.Xbmn+'tY3m("!8:h2:$Gh2:$Gh2:$Gh5]DcXk9c.Xb].@lrG@D>LhN>$$A+*E;S5:h^/:@IOG`@;gIbS%I\QHH#WGYCVqij7=A+7X00@rgGdujTtI>Un6Tmlk;i25%rgL]*B88>$I2tl%Hjoo_mq:AiN.(rR^hChhVT44lj_S2ld]t:qH].sf8[DFlSXRs)"6tl@X+O@Rd9URC0,l#4HGW`lIF3eY5rqjjP8`Y1:>@)m9*jWEW^"l>"/\hREfgY#WBmRl0-[nh5?4[:SppmQSt]T#^j9=c9UFKY+il?FU>_:&$o%3putJr#jlm.5lhV)?1Wt27t:VStWi8C`!MdW37JL$tfa!pS.5TO&n*l-'T,qr&]_58.9NV.JT7HeFF%:rSAX.'tY3m'tY3m't[Jn@^fgU@^dQX!3f\4>HqD;>HqD;>HqBI*4lrt'tY4.#CtWFA9P!ea,Y[thoaBA&.,^2reiT'r>O!fK72cONKP@G]g[U$T!Lr*99&6.bT.8g\%2(5lTS*$cnPrk6AU?n_[m:R"u=88%5MZPT)IdL^0W!%!4h4foa?l*BOKIiaE1UI9H1-n$)t;4.qM#bh[Z2K'BCpuU,upP=42cIUu??!Ed:PE&HO['!dT_eU"kf\*[TVuFm5"oq&gSh"*mRAb&hop8+,r^QJ>qb&U;F_,^#HKp!]2U5q_\r11QEN[=72)_nHo-^Qr&pXK=j=iB>-2".[;\e"+VP'[N*+8XOaKAQtHHCRuit1F^W@4P.4UXh10[N;e`H(<7oUotpqY+H*=1OfV_FiDo/XDc(Gere`c8`GsGZ<3J>d)HHR#_aAjen=T^WIeEWf:F[FumEH+*`2=\-s+G`jIn'5Co=E\G=0H2C\iM7J;]'L\cI]r5srDWaeO/WtQS)UgDgIU@KW'YQ+5jlKJ-6WrMb:IoQI;NGkb^?[>R4r4qdOalB"lZ(ZX>`Fg9nV]L=YSN1[p4nd6pe>X+RW+V`K9YGZ6TR,gQhlDd'#5,o%&#erGqcdg]$dYbq&&+a/Hg5Tnna%^ta9-oghu&!(6+sl("ng9j_s5!dqeJ&Qe?=6]bY3toWR2m^a8c"WTpPe[d*-cn(3dp!D[<)YSQ_+58qVq9)FmmY*Wp]`/\(&:]KXu?k]_^OCr(#l35lL&IGH9X"k#^h$O$BA!I<7k?o9UiSTf;_HetuVnn'CE!'>qM-'V8pupXkKjKb80C'C0DRD`/2E><\)F\^I*>J,Z')Ht;das4>0&J^=C[2%H]fS:QI_;6eel.g"7/#fe^8f]qi[dnY0Hgs,hfuG27Ro_8BB:jKT?+kJX4nk9jP^a`]G5gGpFk+W!c\Lu(X58;H^O"sl5H^c)LDDlMchJ"cjsq9.75W:$6@os::h>WqfU'C*uc*`rC@mrp:s4nmh1C\>ubn#?8(]W$AL_]Pkms8-`5hS'#5pYGQl^J&-9Zg-oB9Jh7Jo$m6CR6cdY1.o:,%5+5`j]]'F_.S)=-NlF[(>QTBHbYNhsNp8[^#/h6lNIX1Cce3aa2U0`-<2:^:7Tg&A5$[)5s,Pg2G:]:3X5?Hn*@qote?hr`pT5WiYper$3WR7F4[,X)l2gp7RIg_*HZWd@@U$+>W"e"Z#PP"o"d]->,biP@D8iqm>Ht<_H5$);2pY/W6+!nS0,eQ./u>s3C02-+!_B>=40eQoqg)QU'Al7;&Jl/NkbL7=NpJ*%[dc`#$"^JM>i/h$`Lr7\>[pepp12:l)7>qP_aXM7^0-bOQtF#DV#Wr+>1qsZa+eD7"ITDVAg^N`r4?G!06p09fQ`?"d1HfaTcFlUmf2)@.`/t=u*r+eN@nl&PpoYo[iZaj*GFgnDU9sq"!]hrp]25n5nNN1t",rIdnXKK"9oZOD2a(p,*m(#+V%[Onp&gPTje[UNIGXk6[d349RVMMS\m[ac.0X5b9D>gTM,*cqG9u"neL)TVndG?;1PI[jh??rIsccr+6bmdSJ0U-AQr5J)@/j`mjB&8,ALcASSTELkpjf[-F8dVT4G@jB2GQNEZ$TbI1ka&_i1[`O6s7,-("^"`RVPKjh/0FnVm%J>eP5[?+YJZq-1KN="c!%n-`l)WghTmWiGBOeAZL,P^gR>9)U@@R;&/^moT1AbKA`%hfo+@^:iKVDWUoNGM),pW_EorX5UcF2*TN68)^5]:iE9&cSNr(TaG%+))]k"Xo(p2)sgT((;GgcFafa_*WM#b.(k95<^]>D?Q\$[D8iq5e_!p!'AJC]779Q9os(X-?sC>AecBpW_!C9F=8/\Hqd3X2rNEu;hE&/Rq-2]&uUr5SP:_XCl0ho[YQKROX@?@,fipb@6pc2B-)@I(NC-!U0#nTP`CI[,B@D%;'&r4D;[&j-(S6:=4@;B:#BF`hZHt;&2RZTl(4LK*?#2#8,,,F*D7(,5C@@`12qIRHhZgh\g>Q@eMd%1s1Lq=N+,I!]2*?;UN+gT18MpVEGEe_*j$Y+>SZZ)uYZ<(?9MEBBG7Cb$\RU7u.%Z)uU+cE@?(83;:U:8K&eMMR(ekh&p?Yc[W#bMJRl>"=YK0qQd:t_^[%.J0;s`T!VMGes#]nUJ,/!%qXS@>[UNGAfVNcjWJZLfW%;C^Z)uRlJBG.g:K9eN6tHtbWcY[L=kQ;5'b^QI=Hhi`Abic\p6d;Y?sfhslYKG3mIfc,KioE\C=;/+XgM1#;r*YSA[OhIZYU40:[M8cB!.`=5k?fQ;]Lp%^lI*X-lK4@QWqsk@Flr;1.^g)H$31&+W,-9#[M8cB!.^&=>Ht:1!!!"8goB+Dn%KUfpt25XlKqD2D>!26`D_Y2`O5gJ!!"JfgPThO!!!",j4ICK.f]PL!#rE4[X.J?B@Yp*GJ9YljkK(sKp.C2`O5gJ!!"JfgPThO!!!",j4ID/ZE7FgHd,DD@Lel/9oh;Dr:B82cPsX%ZfV@r0CXR=fn?i]FdN5;i/8qp4oT`l")#hPj$-E?;'-alU\q:dX12U9gZ4\=1O`UGN8Mjg!!&LDD8iqm>Ht:1!!'6CCb)q/gPThO!!%P/@p>5@[do&f5=G65l`BWoDk@at#CP%r#rniAT<7-$."u:E>r7#tro&;gJ)7hJHB$g,h_MndW_>AnrAJ"@^66@Ti28.%4n##iDmQVd5@H%SHi;[sg[4a8s3SJm?4?V!oQ/:T(A`ICB6*f3oq`O$i&Thifg!W'S6pNppm:$m*c>`-/miIbo]Q;U!.^?eghc=S@4Nf'6=3+aQh+tNMQ/llZd.g,U)Lm$U^TQn"`qW("rSqhdf-0lo0Q+b2e5q0mNo\[50B4/9Y:/hBE#oK2s/,R8cp*TKA,Zdu`j_l'k',)@08T.p)8=:tbI=D,X.Pbu$Mb(Eq^D0Wl;uppa\Oth00/sAr70X%A?kXL"98G;B%d(05.0Be0BESMeR2a>@U$+>fN)f=!!!##`3s,ZZ)uYZ!!!#O34;iOCod'Xf\b]Cb0QF=1qkX@_L=W9a6J--NZVbdgWC&S7uX'ToS)f[o@JsDlH^;sQ1&>F2pC_X^PmZP?b;rPjl]j%K>hc&J#3/'^3BJjqNpR+0>CE"@K,Zf]@S\LhGh8Ur"[NU'Il?7b6O9H`@m`8"hre#`m64-YMF,OYACtVn-#m@j58tf8c\nlYZ]PdXa8^d(#+U_`O95[!<<+-&)2tY`O95[!<<+-1U*uRH!C*d5(5iF)obs0+0/a(IN\#25OLVP?c(Vp=h83m1)r6%HR=[nX8@S?iT'*!q-/4Iq8DlkH1qug_XjRNOnj.qmI?O$pT@@Trj5!+=j>$J31!;fN.=B0CYLbl'hkW!!)?o[M@P3*S=Bm!!'eTfN)ghF^SDS!!!"C?sBn$J31!;fN%tP!!"p;D8ipb!!!#'EGR/6'`\46J;n&CZ)n!+!!$gTgPThO!!!",j4ICK.f]PL!#rte@Trj5!!(Y2[M@O(!!!#7`j)Yu$!,NY0MJWLs!!$EefN)f=z)ooBr>6+^(!8'9>(#'&q!!'gSX`I^Segn0DgBmo\!5KYa(#'&q!!'fH?s@Ke[b;)h!!&\/m+_-;o!du=]19QAk;bCVfV:n?]2WuiSRPg.XT/>$!:49$Z)n!+!!$g>[aeDpX*jsJ!!"LmbBmSnrg(7pp8Sp8Hq*r-!2);fX#OoGz`F2ui@9Wa4!!"DWgF<]f$31&+5]PFWES+:l!!!"V_mYH?[K6F/!)OZD6+^(!%8?3.Lt2?!!!!aES+<3fN%tP!!%no[Yhu2!WW3#:`QoD*4?R^!!%Q/YcZohXT/>$!#13*'o-W0!!!"l3,GWTCb#Jc!!'uH>K(#T!<<*"-k=u]%bhZ.87UB(A!;/E9mCb#K69l)<[5j;`^`F2sO5\X\3!<>_.gF<]f$33[j30*of3b8Y'`]oMkfH8uK_E7PC!<@9L[T+Q?JF6k7i7AkrgLP+/pZ&je'Sf>V`4_M+Bf&i/9'>R8US+Um?a?56(Df-VFF>m_lPk_mTVsd_N9m!0e#&u")Z*KuMGuKteRoP;t]KEYH$mZ*U:a2]W@]S@]rDJ-<2O\04nFnYlFb-YcZohXT5"NYcRm*jb%CbLM[1pV1EIe!%8q*X#OoG!%8;#DC_&KkBh@?!VQ">DlQlG30kM\/!3hE!'o-W0!2Y6`"TTqmCo]O3.f^t,Cb#KNq-[FG@9Wa4!!"DWgF<]f$31&+5]PFWES+:l!!!"V_mYH?[K6F/!)OZD6+^(!%8?3.Lt2?!!!!aES+<3fN%tP!!%no[Yhu2!WW3#:`QoD*4?R^!!%Q/YcZohXT/>$!#13*'o-W0!!!"l3,GWTCb#Jc!!'uH>K(#T!<<*"-k=u]%bh\$S((-eV:)1P<5pkqe@\A?E'X5Sqi^Lp,6+S^r-EqB`O:ZA[K6F/jaq=QPR=j!*4?R^!%8Y"/"fkGXl?Re!!#9ppnmR1PVR\)G/-4UDO>bAY1[=__XEke`qS([J+Z&U@9^]Z>6+_SEl#0c8d3s!%bhYcZpOqJ?B9!6UQ+J^h0Z"k.=9>PYnV)aA61,rK,29s*rLWbP4gfo[L9T[^6KiioNb!'k7->61RYD&%hC"TSNp'AEjB?#6Q$]51^IK5`0!>MWIH+TMM`D=@;DI\KbcN)\^NqFAeunAb?-$fC&!lFnKMnd>31e?s]X@LdJ2IMJ>tX&1n0Ht;,b1Ka7G1j!!#i@r0ah5'\Fk2AiobFG8F/XlA]QD<6u(s''8g8_!nB\[(*!rbo)tru!]p!#jq>Csq$i0.F3#poDX-0`iiioP*Cb#Jc?*_mTCo^ZS/%-1YZ*!$\Q*RN4Cb#JcDIZni@U$+>Y`*E6a00T/Cod&FhS62p+6==4o<#IbWr!EIAU\+daJ%!$1"XYtk)[O>Fj5$0!mr`kLVV^(loe"eOL^hWiJ(5e0C$G6+`n\(F_t/%-2,#2:U;gF?Z:!PTZ=S'bhq5TMY0En2fuA@D+!TWW0'275*9rH)aqonA1?XS;l#[8(uJeJ+/PGih7jpg\VJZf3W;of5!/,JVOc:`l:G)3g$MSll[fN%tPr%5>lgPTj%YJIYNq3;p!YFYVV4J"8*`ZI"?Qqtsbgsi(&XT/@R7,bTFGNAnZFU:8p*QY<7r&jsUriYacr5&V$F+KD+o_UY]1Y^Z=e_)`qlC<"r9Y5W9n^#b5pH$k(QQ+K>0AG$f1\o=dBi:9NhGVZ`I7YH.]1F%C]MVtEd%\gVBiXP;K.s3KJ5Shp\2:CeNl5#6R1pk807isu=Jn?^9G>)@)"!'i*D(#+U_Km7F7Q!ZQ+C'D$\!!':V@<4EqUf\f4,VpJU">gubif%oYag#%rL9/fD<1J*l-l=J;V.[s)3<$nC&k*%9[b,KJ@UU!O"rU&%D=d;NieREPrAMVZ(V6+:BA0Re7DRK&IDR8a?PSpp[b-.=P[0#(i!.\0fX4WKeXLm(KZbM32KsJP'>5=GiX]Ah6!<<[hD&)qFRs"K%BD/g=X\^q.6+_CLB?XCD7ZJ8=&I;n"[6[LT4a^%iTfEg>^fu?EbR%8,um"4W0T?9o)06*4Akc[K6G:'l9r'ca1p#E-5tIPTR>6*4Akc[b;XKBDPj1]+_ogDLlF`^J'4EnrHBI_Z,kVhr9t/hrUIar9sdV$?'[1bG5P2C]I(1\?3W'YOI)tI),L"pjn3MSc[Lb5.h[K7g4pJ$@L?,hR.J:e-3!r-WP-D(JYcT+Xe^e,47;OISjc=6nH^W,Vi7cjb.!9@,3,GXOD7)7RX\$q/GJLlc/Dhn2n/>3T\PqpkAYQ3d`7]0C7h]KM1R$U;e;b=EA/c+pbs>63BAfN)f=[M@f,Xl?Re,.?$6?sBn6-_\6^P[?tLHU(liLe/_;mtYVDeU7moi74@NE8oVl%toK)p,$/Q\SO];aNYAoJKWK4f85L`$KQdk.#/BSkqq;[&\s(qbS=3YZ!D:AQ3a2M"8GrJ)U-=\2R6AfN*"E&5%pp%a^`c(dUVSFV_!)P_nD<:6W\MRcu)1TgAj'0NqWV7;1l]Y\p?d2fp5MT%ho"!g_qIfCOit&AC?%.mq-gL]Lpn,P%N#r<7Rr(,ao;cPCSPl3b$gQ"8kLJX<7\)b*Uu$Qu;2pO4e;#.>WUKc>+4Oe]e>iQF_n0[@b?*6A,GXPo-U(I'NCbufQ;@Yc.@&.H.^Sd.J%Mhp2c.rT@69M\V*4Akc[b:_i(#')2m`)\E>Ht:AO)5VeD&'=X2Sec0^ZYQ\ao1S+n9*.WS)XIu]jJdOm/1.IJaf/pr:>U)>PVnADasN)[Ch=,IqF13pk'8e-G3bKrB1:66406$jX2JPBi_@U:N;p]IQjk5Aa)b$-]ChW^\1%75I3Stprg;l1]FNfN8JkEMq6bu^.S;Lj"L&hlXPj6A^,<%tqso`+bc9dfj%N3bf"HVi_mYH?[Yi^K(#T7;T#!`O95[!SC-!._?B@u]Zl[);"j;Y7knG+ng=+N"b]WMNmFjg2F,F,OetMcNK/=lmADj&\ZH,+j?I.MLPd%biIB>AXhXK^Rb]Ht3gIuAg=!e8$:,Io5)'$2#Vbq?#$PYt/L;(Wm2[ae,]>G9QOXl?Re,.83d!39L3m1cuD8fcY9%biIB>6+`.MJudRbGE"tU&2HLOni5ZoD#"MGa\%0XRHn7"V\UXq[VJ6l]t5A<'$4?a])#HlqL,sK3CI7[CqbrA_#5BW9.\9Q-.=OCbCo)>#b+bC%^$>^>7T(KN^PSbEe]kp(_q9NSTY4'o-W@Z)n!+=9[GoVm*:"lI]-WfN&U=$35TVYcW'UgBsd;D&%hC'sXk@!*D\"Xo-7KTD=U0A%lIN=kF7N4uBD(KXo\k)SbdN9rGO2r*=aOj2YXkEb&17!pd&THEV(b>u5IPr2#jSb,WkJ=g]rM;0+NRp#-.8C3hp=O$@_a?+JOf'$3[=bp:hLNuqDd;].GS(TGg07HKDd9O1<-b[_mYHTB=5tN>FoL`X3dGa82)L>m2dUE'p\aedp%W$`eaFT)>s85S%JAY3a4+$`T28TAc`#._Pj7X?:oR\h,uY1d#OaV<,dp\m[T18S63Uk'!@WnD[6:[K98BgM2)>X\aK!]79CYHLg"j,'o-W@Z)piJp^%207Vo,B`jS4e?sCTY>=E?Y<%re)8=K$EKO4tWOqft6WkdXa2W0Lp^k7SQ\A/]=^FO]O&$N>[+40p$rq3HBeU@0TXa^67-e811h5B\Ok66"s04%^ErTT7*2tu]:^\HnHlCb&I=[M=>0fN-bND^!jBV2fC-LM[d2X\^bM#+JYcEC^A.+1FN@U$f[>=E?Y<"-2MJ7>dc[Mdg,AV4h7LM[d2X\^b)>0/!LLOLfS:s%?jgEV*Ap"a.KWCq/%/)OAX%W55@ln-n,56&j[V-.oP>V;e;5,2[J,El,)/uc.e"dP"/q3F78=(/:KCo]O3X,(VHMSZ_&:b9'*p0_*ur33<_YcT+X'e0FB$:(lKdlI_K`LDu>,8r$,">n[CVh4pgR3YF-2c5N;<66%RA;g=i_K)Q)'4,<+/k6r"2N:+IDh'3"_P?Q)sgQ;mM1b?*5RRl)\#Qr*$8U^k(`>,@CER\.p)F?6=Ile/gO*%Y)>[T+_Nac2n-tR3F[M@O(n^pl^fN&U=$9O,^"e_*bXk6Zj/&Yq%`F2t>Cb+kN*SFKPcb0;GpsG-%^AEW%h_0FWJ6ah`bYu0n'>*caQdC8)p6;(Zlau+8%.*_#3!_L\pp0B.b,fdbBNR3IEf'D4X^F^0[jhouf;De3lb`29`"[5Aj:t`,fAGe$.89<261k*>cjP82G`[THg^7a?8ImT,'VU_M!KBhA6/S]YaUY^L8?/>2PLXb>ph,*k'G?>l1X]h:o@TGYkQXd%p.A_dr'<8Zk?DTE8.[s/3mCZY"6J,=YfN&U=$9O,^"e_*bXk6Zj/&Yq%`F2t>Cb+j#[M=\Z)nRuD&%hC'sXmFU\nOKgbK7Yo?&`Q^Ta,Bp4IMI=$rEpcG\i0L`/Ndq@G7=u)WQreJlKVMKrV_k)H-\?jmdu`)G-"D\FJMob_jp#Y8?)UFKR.du2>,Wm6`TD%N9]fVWQF[$NK9u:2OhpWcD]"!2c+,==E?YlmT:WJ5XCq@U$+>&Bf%r5<2Qlsc+M6W'>]&':=MAt=#8M\Yj-T9\U!i*4hlmD/cO,X*u07A:k@@@hY:>`e*grL])4-QGDqtpaHoN^e7'V/.N,5(U6Y4gatGQcOB$AnO]je*;Y0K\18>J]8GQg0M2Y');CZa=ro;D_Ls#=r(%_'D5Y1Eelj-AZ2oI,G5`L24DncPgq*,(W^LT*ATMoBQV4?T0A=RKFCn_PA^]grPuMq[B^+bR78ZZg1MPr0,F_7Q^P]/*UJQj#=E?YCd#3AJ25*P@U$+>&I]tLXT231AM*piHYUad;TbW2B;QKqkif6CV&.Xu_RuUYi\oLb:*8F:&iX=-J2@=fN&U=C)(NpdL*du!`7:sK(#T76@lYr.b#sBC>dh]RL=e/`S2UO4#u^?\A4dJH),3I`#%u/\QJ(Um8\g16kgqjLe);rSQ@hND?PJec@Y\5H`#HB%60H68^]DW6+QI2)R+jll'@4Mu$0E#mGj_'\HH8SD`R`qD3plD>Cg+N'F_(K>g'thrW2-iSf[O*e,4N2?&Qs\'R?%]W'l=T3l=-[JRT6_Vq+SMc/JX@r=%]NDS40=g/RhSX`'oHiCLM[d2Xk6Z/fN&"A't+k3MJ\&lCo]O3X,(W3[Yho0!e@JYXk6Zj/&Yq%`F2t>gUjT)s1l7e]ORNl^G-6;s'CBYanH!XO+6P2/4jFD/PB:HMR>!Cg\Q&0>mLM[d2Xk6Yt[M8et`jT>\Z)nRuD&%hC'sXmn<["md!8PT&@U$+>&Lfklk0kfBaJe(V&_2?2?$174W4L\dQ!@"_9KHN=P>Ec!('(F7JSeD*DOLN?r.)U:>\e_1rN#Grqn(.@GE'qXC#cP#f5ql0bG9&,J("8Cp^Qg*^W0S8D8n7,ZLRf>Hj3`Gn0t?MD,U$;/uV-mcDf4=[/0?8TDJ?8K^.oq;]d"D:uD0/+4S1=eu@R+mZ;b[l-nq5S*fLg-U1MRXn-:P0VO5U12?VlrSW(($HKT4_mYHT=EA/^W!X=fN%u[fN)f=[M@f,Xl?ReU@$c;iC[i?GFO$CLZX]o&+^UtcNXkjIk=]tN6:IUQEV1Q0D*fS0UNeE#\t8uH]EApRHMoRI;#jefN%u%(>F^``O8)q[T+-V>PV"df5XLgr5.E.]nRKNhrP[JbClciq7FMI[&C0VIIjSjpl/X#s5`cs1,V4p"pXp'Dss@ako*K!,;X(V?p]h^:T:@oH8VSH)ZnTXeLafI,-Xo][[?:FWG)La^*5?"lP:Oh>gf%%4-,OZ^Un%NpB^%9f(p$TG!W'bKo;/a3j;B:5T<5/+u]mKNIp#a(De3!,jTGlt\U+/?:Y!^Z%Ee^!OmLM%Fh8*3m3l%PX#OprLi(,>@TrlK.bIdck/9Bi%kaFK"dY)V!HdX&O*l;OLLuKt2jDO&CkH`rKMDE*KI3Z$4aAK^\K@KYo0B2rOu2[tK6d>g(5cCDhj1#2KIu\2T^k^@K%&jYBjp@HI5X-9J(%h[mokP%qtnfodhUcBjGeetPb`,NT0PbQ"_8/sXcO\u#/XDR8a?PaOCFX3oli2;ECKosWDOWXE/`[M@P3,M6%$U#9"g[UNGA=?j5oNbubD67fQF*4Akc[edSIV8/4=pq0P`UUEq6YC^W1[K<[^Co\Q1MJ\&LCo]O3X([8pKA@X=rO$96R1j29H,KEXgA4$6mltsoY4LdmF2JtTrpSQZesA2#'.2=Ab*oQSmqBq(N/XdQ_-o2`4JWbTk#>e5V$;:Ee?,$aITBEW+fj`=.Fll"Xr?#`<,6-IC2.Q^"2,AJ\SardH+[I+1lnYY,#V#0n(mqhiHs8HTC=64!/fkK.DDq$-aN4P38k\\s6N\Bmt]jL/?lkrr';cZ9DDBC9aqnAJQoXMq,W^p2a4)9YC&7(Ep:fDat:r/M0qs'lg6I\PY.hi!,OZF87>`-Xk6\L)f2Q7Co_5r[oN3n&jEl$2^NiHn^FT;/Hno$EdjkDIuD%,]-UG7bLuN7Cb<+MHt$B1o(=B%kg#?j[$mCUW8@LcQ+$E]:X5rbp-(>kZ(Pu>Dc$%HBpDA(<)lYpC?]D0=0!sS933dFlDeTAiH1!(jb6K09APt-c:9@Jb,JW(U\mt>]NY^_9)q5^_JSC1-%6_]f^\-qE)MCNf\pt,:Oi?M_gej8]Ma7!&"f?.:Ddt"^Mrs)\s=)A^:Uki"*H)Y;?"mnUf3CZ=I`7f'UR+j.c3rNm`]tfN*gK[Yhu2MRI_5Kf?E^r8.@\H,8!un;"qHc]IBF[fQ`i[6>U^c2,XQ?$ho@0[&@ijo6/\s4Xk@qiB-;k8)RLc2fdX3j5F$-h9t_W;>4C2)mRu()Bh`A7AXuZo+iKe^r?mkcef:C/o,qIHpE6f@6Y'D5sLT>5?@AYB]b9>:JYA1&P/`%r&m&^B0a1OTAQ5gfFEaEQMHB&"8^%:\]@Rpk814Mc&M1A;l5ba7J4VU9LS]8^0!Zh^/;aK4ju%3KWh/If,dWp7TWH?9*(2*R=,ID)s:R>TMLHqo*=]NHQ03VCn^+01A`e&AQs$Lg=]MC.f`e,D8iqm>9P'B.Lt2_MV(t!Y\r)oCb#Lt'&/:\`O8)q[T+=iEq,ZI(+7=M!'_j>p_]'\HmGY[7&q6Dm&`0a2(\h54.=9kFO0RTC1Gc@PFC[^D^0%-oqrGDYR[dG:eP.NYLt(En9(hoNX0u6WWkG;tF`dAXk/McXeU?`X8(Z;9/);\cQrF"<\Ck+b/cA4D.I6;HGI\WD>`q;b]u]lM83EW;H$FUn2t4Ht:1ll`_OgPTj%G\jE?Co`A/`O95[Z)n#-Jo/K8@TsusgF<]f.b``r(%TtAoc%8r/Sk/3.d+&h>SI+\QFi.su5"#qHJhR8eB`TK7m6ZmPr`u4;*FEa+]V`.Y?KWqeW$#H[Ij-j(&uD_.T1h7'rBIU8AFG-Dp6g4UMcV#6F!ZF\Z)nRuD&%hC'sXm`(>F^`"^nC9Xk6Zj/&Yq%`F2t>41)*sSDI0%g<9Bo3#Aq+g#\P>=1P.h:"cSHq`cJn3]a1utT9=*pOl;fM0D5s_@>?s5CTFUDi9XQd=Wa%S_R7pB;U'9Y^;n@?8ffsVo[QDt+-f_tkB?WAWg)Mn=9S%9]!*$7C>8;D2$ti"[kI:TEo&8P3_M>t84J*Da_l!#q8:QPIT((FGW(55:+&u7qWK)FL)u*)l;GXA^c9Io:^id7*`Ua#DM'8#t.e,P`DVo1?@Y`CoLciNqh5O_XRg#;rN]VG!c63T\S#7K#V_pK5=KY`Fh:X-%rc2:0aHW\/[ufN)gh/\7q?m4!!Q\)A*?!O``t$:("f>Ht<_-.4S!P?V"%HWnImZ\EJd^qJW@)[X*)Vr(4l9@U!9SfN)f=!+gn%[6=A]"VkE?SNlKs5EeBMdrWkGN9F`mDWA2:86VC'iqY"mO"gn^C-lVr:\PH(a&;`Cl?qu#)(ePb/(`^ZhjT@,U.CsX*/`iKX>f/Fa0Icp,V#L%[ehj=Q\o<]S:2MH)&_&jZtgOj@NV$]>T`]YB@oAu,bQV1P3%^J6,kKd"cr*:g:GLBY#8uWPt-Y^i*9Q!T[W@H`8[T.6MK;uNXV.*Z6Xg!*'DmS&m<,]d^/0r=^O#Lqk9=4QO0QtgF&<:.rdlH4fAFmS;qFnJY5nrp)>Ip21N`F$^<^VCR;[!q0o;/Tm\VdBDIo-SkXi5L4R-55m0$K&-&5;N;JebZ^SpgCM[[r^BB>?EX>55u%SbpClfdn@F:5Ht:1PVfi!cJ<`R'hTG".Lt2_@U!]S'e:D)/"Wn!.[aO<9@)Jj-5Y1ube-Op;egJn?B("?X6Wi&eEHCdnlM8#*#_[5X(kUV9s(G!CK<;Mq/0MW;BLC-?CglP\f)WW:fER!C1_ca:!F*Gl0/Li1>bd>RH:E!F<[K9:>fN)f=[M@f,Xl?Re,.?#;Mn:d_QX8#(m28b[YICRSZ%O#:(ph4^?#?q==.5\N9;p_H!EJ%0TXqa^<-qi9C9#%FRd9h"V)++2k2n7\8nM)Wo)GTCrtBL(!"!!k^>L$<3WGXrGV2uUF.Aj.k.g\jJ6sZ$D$mHj'?C>8p]U`O=lHg[LD1gT?^`/0JapdH*qQ#$_7XO^BRDEQ2SQq\c.g7!>PrD6s(:E;2pAnR^C&jmNu3@>Qhb:SCWlbVMe@u50`&(j2*U7%DY^X/Kc!#I2DpGml^*@UZVR,g'4X&Qf:,a;^2-m$2:Lj4a)@mi-[O:+%lLAF(PgPKWrqY&)jf*m%tCD33Rk4cRrbUDH;%nuObu6-7O;JI`F2t>Co]/-[TWjh$:#J:>Ht<_trViW.p%Q2)7:fqRX\sB-3aINApaai`&tSB3tS(md69XZ^F5sXa$OD[JX4%^555_P+&Mc1drj]+4koI)#[ls4fN*G>Oe97-`#LQ3Lu]Z>LJPW2?84)OJ(X;3-pMptO&B:Cr^?3NikDPmU!gE8T5El"bKn<$LUbOIcPlD_j_(^lB7AG,MY(cIDt/hLO.!_jmPj+BHXg!HlKXsBD]V$;`l?Kmd_u60nBDG#0pYg0NjbtVhK>H:m,9GeV[)'[D]PoZVn\U!O$@b\27Lf1Z&s\X*_NJT-E"/sS6GFnNhDQ>Xl?Re,.?$VYcZPYCb&mP@p?4?fN*gK[Yhu2MV(rK_Rrt8lu$0BJ^o*\,I1-)2NVl/);gq67UEb]E4:,UOCX8^CQPtko?>W/MFgY5\%?*.jYCK2BcbgisuY!pu@DJ2iU$Bqf;5i>^nnXJ,JiW%6ptoanS_j?`BZ0je)%4nbM=FCQ0:J@?&9Fi?].T.t:gs42GjJO#9/Har``]N'A6X?0A,HKob3%3egX5_h,I=DHM%gjj_ZgqUG+4f;Nm(%BHNGVptV4euM_V%&q]gnicqrUO)!Plg!--*`ZQ+YIZfZWhjE3,ni;H[ZcWSHa0^4YcT+XeOHdFfN)f=?rpiBZ)uYZLrZr]_mYHTJ6e.O`O95[+WfAf%biIB>8>IkoA!,%b%:-TdoeOd3ifi<-<3^nTLu")2)%"ek3#Y-qR%6,>_nXE8)/P7f0j(Coo>*olPi[f*M$ptO]5>gX_Ms*?Ca2YX/9MclJe(4Q-+$f`UIMr10rYW&Wk@K/.&-(_PQW_L=W5:(Xc^YL?6Y1fN&-(A$.h*SdB4mAWSW)(8>e]9.^2t^ZjCH!hl$TI@^;N@P`C*,tg+O0*8X/1r:"puK)&knm;g5jl;K::SZ70Ib*l2j0@m)LnO6GVf<1:9XNK4SYksCO[tN)-i\tlO8=uabl#TXUS$EqCb&n;#e-*!G%Um8Z`m5[n1k1H&/5Hn>7*J2LY!U(Yjh@>$J_6BN`sUq$f;Rh5Pd%:Lpm&.efN)e.[YfL9A6Z=@JDGut'e?qlfN+q1Co]OEV/.Zje_7:1@\51(@l7)PY*6bb5$RV2;sa2J`lG&MY]@*$iAmTG^>SrB)#U.&Kj3W.<*p2]nu0C5;bHpDc3=]$,ccn"VE.ph0sT8so*9K4(lks^lGQN'u'V,\iWWTB>@m8'R-8=W;tX/.mIATJ1>Q\dl67Km4)`F2t>CocR#Xk6Zj/"f55X]An8Z)t6hD&%hC'sXlua0oG]Z)rN`_7!O(D8is#1:C1&[T18S.UFl&W:&V>Q&62h0fu9[P7q\MDG^!::8k"]HBh'7PqSIPS'I?qWRSeZ>+!XfB>:ASc-<8n\kW_/%]HhI-Iq#1Y'Rl>H#fMj(Is24IReH-9OEI;s]jT37Uc.NBuQk17+c'P#Yf:[`GtZ?aLcDmqrYeJZ-k8#G#8n!F&"n='LGH3IW-4o@5fr+XYp.QQl03i]`nX@;E2p!!WOBHp_TXnY=@JJ62657E7o+)4n!lL>Y*pKAYOROSB?5%(9ks].57/\X1>c3fst,9RAi_//EC%3-7JnL<2QOu.UgZq9=mpo+!&hpPZf!:C=Bq@PR"Ws*4Akc[ON?QMJX[;V?"4LgPTje[R**b>b1c_S!;,U,dVt+Ei270`hlC*%\0B9Vt5HC[$7b$X0^DcJ(;Z5GM.Zr#U[e:3];;\01)tH]4%&hQXI;5ut:gNqaRMol^Z[1,GGIJK(mo.[[e&q^VEdsALh""64re9))\&k7`rKniiQ"neCXmigpZ,E%"M)SuC(s*S^hc0WpT/Q]1m.AUEJ/o2=.j#\m9UiS+rmUWEj*pU.q:lrHrg+W)'@Z!]GMHPb^Vq;e^1$s0n=P]4%su1g+-^N!?e6#kDt]SGis-"O+.Y;_?1!a=BNn;O]QQol9]adFn:DQ"S5tge.J<,`c"b,pf(mt9T;ekm>Li)qK'MZnU=PX@fP``eW1Ok)?iY*\n2%htRf)T^caiYK!d*C#dh;i2J+:6UbB#.4db9gLFk3l#N98L_6O6\@CDrPg=7m>]S6Gr:7f^0+,lT7ssGbODi6#N3Apb8]rI(Tt[55P>,*k/g9ceQ4E@QX;`RDquhZa\a/*bQP.L%O&T=IAaukEl#1>Coa\R[UNGQ6?WKJ/%-2IMR[)!\R8VZ[aeDd>Ht:9+Zfb6(#+U_7GP,L>d1==gM.,7!V@TIp5]a$P4;pf![qFTlLtb[_kIs_OcaWC40nogQ6p%>fF-`D#L6*#KaTCKfKV1u#C?5T:b4rZT8-j^!_]@Mf\:Tf7SsBPEcZ223AE>'#cC0?iQBS`U9Z7PkklbjM,GfpB/Aeh'7u5s-It[W"hIQ:o3O_d;83_"&4VA>>^m#&m8(lPX%S%N8Mimn:X0>oL&=iqbDnaClD1)&3C7@Il#,^cFP`r[U>>ISTU3f^"mmr`gZWRJ1uIqrlK(u0N@'&D?!YqKG#o!!o''^F3>KCeVrlse:S!'oICB9mgt)d\oum*f)m.(*i\P6+Hgb9rYPdVr][NF(;r^'SH#j&P\$C(Z[*rGf\R8VZ[ac.$>Ht:9+Zfe7(#+U_7GP,L>d1==gM.,#Xk6[-OIZF,MJ^>@,&Z%60%a3ZD7'Q.eBneACgnCL8QG]tje9D>6)_tOAKO[-9YcpI`$cU[-Kp2Pj\b510t_u$#40(O"oV=*`b#MqPC\GI1q[i"%#dn-1![Zb&7rRUIQ7dY^6QF9b5]>CUF##telUP2U?lGhYh,t/!I[ANI+UV9oFZQ"3[)Fuh,\j&eJQ\foqGO$<3AGOa^3!$I-IIVjm&`[:\uU<&c5b0dn]9FDIc4Ob11`PkbiFai,SOm?TnL?rpV#f,EKJL_>eb)%t*Hi]A]rBot'oGq!2;TL6"If148kpHf--`IM`"(,L=9"r8\ajbD0GXJ,.8R(rmeANigD5Jo0V$D.V@#>C^S0[N^Ck%+nTs/%-14_mXU%[PD["/\nf(>7j2F#&Gfu(#+VU@9^9M>8am"(5O&SChs0M/3GmS"LUiO5:Dn)b.r_q+W,P(M<.r\F_LuEK,>)X%)]?d;5iBg*_)&A#SYDE'j565YFhN5?Ed6"1NF."=S%<0rHT#LqL/otf"japeU@,>f`/-M4ae[NZ#o.i3"P_m\8#Cb)q/+_56$[V?On/(3jiX^&*4%,5M)YcZPYKTM`*gT"8XX[p(A[W93m12O";0IESH1GCWkm2K2)p>FG&09#gX)#ITXASE"DbgA/sso-6Xr_B%LXu5Gqck?$FR"9$'a62*+,bJ1mOqE*+9@F\0:'NXN8cT$,;1cNjlQ5c.sOj*L308o&u-k*@8qt:f@aBWL`ha(#+TWZ7TKh23a?7_mUcV%bo,0gWHb&l2fXsD++``QE[J09$5ms>EO)aD<6@dA_:%QVu$)Hin2m3XBqho?+>B'!9t>+e6*Zdoc9oobK_bNIoXt;7r1[;DEE%VFbs+\[&@EPYCP2"^!8mtF-q4`>,5)eJ6N8jn=(C<7'^#XGB)#=8lUG=[2#;sRrj[#i[Iaj)5hTb:c3utbp$au=/>AYFi(#+TWZ9r#([0j>WBm8310%a3ZD7+ZAPbCo0*V=Id9hQ.L$QTg_Qn,`plY'Vcm*ohHmIJ[?5>`53$eE.pn_prkSIFW(qb+X$M[UNIGXU$(\*S=E;JSdh:&%7`2[Zt9*Z)uYZKFkF!Coc^6[N_7IgWB]Sb1*Vsm&fSPp6tAul!4kmLQW89?1eBuYh;umV7_1#mo815"5<#meG3,qMrSb6=+\>b,B.7B%XRqkU:19c3<-[,G/[<"7_'.*D6(U>[nI&NSW;N,H4(Q%*Z"*hdn)i4F]d!PUB]6*#_*O(Klb,W"MJO;(\A;8GZ<%6U&"D:YTU<]XVC`,#(,t2KkJ]J+8sAh3'A=u>Lt\#e?MGeqt;dmp6j+nM8qi9cTTh_T7>uGgq3;!I.X\]nB!&lJ7&4s!Y4s[n4r^7e@*ds?EO1E8BYCF\R8VZ[M@PSD++^RlbKrD12JJh0sIcbYcS>gMJ^>@,(u&#?s>K+[MA$DfN'WWAT7H/WTUhjg^D&%ghE-Yk#(;19&p"Y,S2gSk.ntGM*6XpJh)94`S7>Z#OaL3:G&Uc%b0:3A/*I9"[\.g^m5Y(+SrUPUJd1$[iM,i1K&4972QH5HKqJ'BHLB"oTtpfcoBo2[3$5pDkJlG,]C*K1Gm"*;fcBk75If'9Fh/>N/HhUj%B?uk$+.kLuHgZ,t@BK`gL0%b"#Dlk,[ecaC/V7j$Jo,)OIe-GR0L$`VT44[s'f4djuG`"=q\2[V?Hiu>CB*[f"7N%r+rC8[YB7h\h3eLT_&a)^reu?gWD18@"*52L1,"0kn_KUVA"jg*1IpD*1VOV.>5_%U$o2%+NQfXE_tL?N)joN%ICYD_j=`C#*0bH_6XqjiQ\ML]RF>kN_QUl0J[T_K-dgO?sC0L>8ajagPTi:#U/NL[V?:g/(/^IX^&*4%,6YV`O6tDOEFr82$^Q)krdU!0%a3:X)2FWK793amB=+sh\UW9oCo\IF\[C,6YcS0SUuPie2&(BroI73`Bm8310%a3ZD,gZe[l/RN[M9s=F<#+tL19V+5/jrSm1.mn"l%2LDn_KSr>"95Knk>JKf=]e"[/TO'n.:$Um_06oF[XXeSEQ6)tjV;2K;e8T:CFXiotikYjB3V`A(IIGJTqo'C'eGlZIYcH4g_E*JW,58!ceI`Y>-&<^F5(.q8hJq[5+#je0&IWI3.g>uO`Eh!@m1#U(4Ah,[`a:J(uE8<*MQ[?oJQHhs*nV2n$^^nY_pB4#UP]m,2>1GmQJn:`9@?T8U.PeX5gi9W<\E$*L2Fo<@TsF2a?$Q-)@G5VF>.M](MkV>[UNIGXU$(\*S=C%Kl'7>(q,\;[ZtPl>NpeiqhM5q'EriPQ!S1J(:p_U>P:88T16sT.HROgXCibGPr7AVLdP9-"0;$q`aK^+6PCfLXpi.:?\H+F_slfrDAX(G0T%V>2Ha_30Ns2lbpn[S`D3a\84hZtXYP]>!_X7#4jM9WnbO,245,C4%PhXcT5IA!uq)Dg@LP\;,`[24k0S]GE6t1F4Dc&ffW,ZA/>LY/r,mGET&TMCR*n6j`>_*MF^T)dA7"5/,FqeaC(MkV>[eelGKWV@h,I"9UZ!gk!2MZ/".bIdth-jNu?s=MWec5UlCi)morKN?%1)B[;Z'rqQ>ToT(bJTL1>9/L\i_:6pG@3%\_](#+U&%^m,:'\HH&/%-14_mXU%[PD["Fd?H?Z)pRW?sAagJSiB7@TsF'Cb$<;5[R?r63D\]cJoj"_SpSV4JUG/7("'o%0H'J)TbXhs?JQ1DMi4q^B=`*_]-jaq>\fN.=R[UNI'`kf)-SH@QgYcZPY`!P2@"l%2(Xk&&?`O6tMK5F%<"h'\)>Ht;d'=O/6[ZtPl>M7nuDL]F4DSlB^=FI_4XR!,5Z,=V2?hVOGWCj0FWN,9HP00jY_mu1LQs7kOKul':=mUdoKml!Cd0E`RQf-rW'HFhC!&J[(E-6FAAlklDQR?3ZFW+kX-XjIK'[4eF_>/p:=NhJP:;!T55N4PMR\'Q9S88g$QgI^@Qa%W0lk=kI-YtTq+mEt4[aNp]*C8FP-NH=UBM%Hh*Z"B-r0d&=TIYCrpqHqp_B0M7qOsKT3aGDA1[;[pa.%*)%ed*Cq=u5i]B9f3?4>c2Mc9,l_'M'(;hFo?O2)k:n4EE1;r-qe^],"^rp"(inV;>I$SNTPrI"^:*\5.=\H%AH&(suF*O_4@[Zt9*I338U[Mohec^)EFM:bcP_YqS60!`WET'4$&r]Kaoj<(c:\;=g3N;&;]EuJD;u)6B>U4D%oh/uM*d=,m70qSLfPRH\ksVGeJq!=k-\;gX5./a%322o;>gP]6U62;H0E$5D$\FC:F>rhF&a6^Blbk=PdfqkF8uI(H#ki1!Rd`>lgDV&6Jcc*=4EGfac:g[rl?=-@Mk>J'pO,4.cX32o++/#F*^27e5QCX.I-mb7n/"=h"Fe)R2XJ'A_<$@VG2JmG@2qR[:dK7?Cb$<Ht:9+_2VGCb)q/gPQP/eq%\W[UNGQ2f'u\Cb&H![aJ71=eTtJs!qu8b$L-W8Al8mLQ/u3p=>^+%/!t@LQRo?`iqLH.1W&.Hl0tQ/\S/c?4So2oMXeW7MlZ?KfrF#"IR^ZT$hqF1:,i93q&(ft3+('$m-5JS.b)SiPU103q2_E8`kEm2Le/&4*k-oCfXl@9^9M>8akLo3bc76:cmJ[V@R6/(-/VX^&*4%,7e-YcS0SUr-SE2&Wh;knr&R0%a4%IVlKT:"]2lPb5R9F0SfFbG8r2jcO/Lk?DI`W.3Pbe;)!-Y)69[Ucfu1PTE?F^E7BnG6R;Nbfd'=HnDdl<,='OaA0Ng/,T$boJLkZ^Tc5ktK`10%a3ZD:L2i!I@X0En"fZET0K\E<1'Y]>q\&pBCtSonXcK9&=HY->$5YcS>gWXZ1N;Yh*^M@`*X#ht5R`O6t.fN'WWVl1#U(dQD8iqm>7if1.i3"P_mX:^loV:4i`XnmBO/qR_T0A6g:'q-C*U4e`d^+(&CN=3k$.*#=Kg%s)modj^7=Jh2NgE#HL-?.Irl3ZJplZMBg)>&g7o%&a6[A8p3Fne:+FB[bL#iQ:hNl*@0A)*6s)!q0T:pHZD-Ph"PpChMP(/QDV;fZn=V+ncEjO`Tu>*7otL62$0m3-+A?m9XN?KSD<6@dA_:%#!8EAB6J<*](#+U_7GP,L>d1==gSt]j>7j1mHc!4#>Ht;d)n)">[Zt9*[1g`8r[;[mH5tY,A#GF%B)>SS4PS'C@5B;?#Wt!N+Zg%CXn4C$/Y!Vp$9@'@JmNKjEr(7m3iEl/SeC`'HKj"7on%[!3$[2i%LH'c%c/6?/d`I^LN=77I;4h9]@nP^#U]dMZi;65,PnBg.-S:iTucV*1[n.`*e+%W.CbOti9XngQ958-ij%P(cjL;1n[W`1lEu(CSTkkdpr^dP6Eap-\WF>6j?nA$4%Wga\R8VZ[T,E*[N^Bd[XrA8[UNGQ2f'u\Cb*E3C+%Y7KFlR4YcZPYCb+M"D<6@dA_:%#JH"KHL#35_iNP!d]I`9m9E/_>*n\'dIh@D=]iXL9\fMkY*#J5ZHceUS5.-Rkm^(>`9kdLI[d!)0*jqCNQ$/^#@(Y$VsJ+"jL\A&:JrjSN:fdS"L\i:-pS]JV743R-\?$G8BrqIf7e5OuX0->HU^@:^Fnd1==gSt]j>ESd![N_MRYcZPYCb+M"D<6@dA_:%#!8EC\(Ub&%on%&"[UNGQ2f'u\Cb*E3C+&X]dms%CTp_\U^]4?LE8`o'A+O3*[L-3I0E.J.(`FEKi=;jaNNuDfV?p)K`<@r7/3JF;diPMp#qiKrRmD%7`oqZlS:NYb!$2^075#.dJKPiCP)Nqm5%&_8uGMM[+n^c?(p+%[$s5k^(kf!3h6)J0J>OA>S<>**V*pbkq]^N/N]NFV%ouO3@[/gm.52R^+Wp*jM@>;B+f+siTm\$Lj+;mt95pADlfb$%@)0'NXC$nNOJ#@9^9M>8akL42J?LFb+Bu8A/D8Z)uYZ`!tJD"l%2(XkF)i'r_RW.miM)gPTje[N]VA<\E$*L2GHFkRUF,Ont=A/FEjg*8-D*CUP=ia1Zd[kR-uEFg]qlqRM]VZ/]#[8iZn:IK`9qQm]_i2S@I.?kZVCG-F9(Kn\VgX\9IE#`:o;/pYWXes7j2ZiOaTR"(-QR0`5nA)>M>1Zg`VA:;HVt>_%*GK[gWB]Sb-8#%!4EVV&8Wl*'r_eR7i6!.i3"P_mX:^fN+e6YcZPYUdj!;1#%S&7@^Ta>d1==gT$gKcNh%>?9H(hge)0IjrT2c(;K@3I@_'B9WnTn.[SQC@$R3!r(b#%7gm@1;hjebrlem7c/50%a3ZD:MCcX[mkK>Ht;$NNfN'$JUG[0Pi6UCb*E3C+%Y7UqX(8fN+e;fN&H8D+-K&[Zq6/Q!mn)'.KQd4VCN#-.RE&GXup).;bpF;jo`CP[5M3Nk,o_12=*BpZ^:"laJ]dG3L7J3c@To`*:1j;'`$+C`C,P-@nJF5R7)ELh!D<6@dA_:%SO5lO*Vk9VF'!?5.UrfjCfN+e;fN-85E?estOZ%u3jaq>\fN*ZA?a_lMat=gM<)*eS.=0gk$fqhjQR:NUrPnLHKQi+l$L\9#-9N[R=ST#fPd$:gC]9BLF:'I6V$HBp"b#HtTRTm*rrg+fK)Tb@^BgG=3rSQ.T[O+[&O$hLNo;$Fa"hA>r]k8GZI?Wk@C2N4>\QXJnB>V)t_6u+8.mgZtCb)q/W=cR=X'f.oG)'qrJo,)Oo_Dg+k22fqiLq.[IcP::'LBoK&l$W0D"'p&qNn**&0q_/:bd[-e:!KT!]#"Ke/PTEV+rX]ElSn<0H*k^%?GH5>_5IjBClkdX%tm\'H(s.*/7iH.;3o#WQD;C7!J_aSh2cj7:5/b-C7:;[T,3DmHQ'&TY/L]K3ubVn$au=/>7n/h@9^"=8<'jU=p[N]8Z_RWBm8310%a3ZD+2P>V-\#8"#FdEqrN,)d>9$Uf13$F]##,4:.ok:3%O4cfm\RbFa_E8[YB7\A@l<[Poa+T4O4=4Jf`m+">-8W"l4i,ZdRN,3iPa'djo+Pfu'^P#l;Ug_&aZ)n0?a36[`)s0j]P%Is;GUA0Q9WdNX'gcPS2K%/g%p)>Jj!Igj'^_?Bf8A,G4$qZbut$U/t:os8UHaM>>@&'dogk`mA07qHB+/)\O0Jo0V$D.V@#KPY#JAC8=+SnoKHg1jJ%(]";`7)'jMn$!IWSgdiRqT+2k/EjRKleauF'6ML1/NoShKMH?ark97pj8(ODI!H=tgb$:DOELjq@t8@,T)012_\[WuVQ%ap$PBYcS2a^9F`lLI:6?bX[nGUX]bn_MR5H].i3"P_mUb"qpN]sdd)s#G3l.!bH(%/d9Og%"[ON9PUuG9lGECCb%i\05N/I'r_eR\fN*ZA?^f>B\fSJc+q't?TiYE7U;%&]#nICs$[TF19@0kTs/hsgVIMqcDD#JSO>>]c>=KF;:UH?#;XC4-=4qGUZ7YrM\$or;:V1'(ZOt)IZedXD%!1k&QNJ'p-8A1NZ'T,:_]VRQ"R^\Jj28Z*eFf3os7n@-b-:^[ZE8:0Cb$<AGa6P@U"s5@9YT,H_8tlUeP9%\R8VZ[M9t?(Ub(5MUVpdWl`ojbdJ^4$JW],gWHb&#hcr![]Sn)ToL;`lr&G[TUX:ulo?Wa5F<_`N87P2PTFsj\_+B$qk1?(Q'+H_[.(u4,PF!pqU,+ikeT4c?kdpk)Gji[<\>[PNlnT3PScbtnmVm$^&n7^of175.*b.21:G_.LMc.)D.V@#KPY#J;[,'($T,Y<\E$*L2BB#p4[?P8<'jU)@G5VF>.M](MkV>[N]8Z_R;5!K/Z-2Q^$rH^E^r.]*02eAV<3u%Q!ec)Gmns@Gsqsm^VY1@-d^T]fQbFa,9AM:X6jUdD3^i*tIqF_V#e;mX=O6S8ajaW=?:9P@7[XNe)'/Jo,)OEIgMc95d:8#]K.HH?c\CBh+*mrOp\Z?4lef>c++*ncI-o7Hi:ATDJURJ<>[Au!WYcUIZ_7"C#[PDYL6FJO`.me!(D:KWYIe-G)7C8'gD@:5+Z5GR*UHj\;;lq3:,jPI.P(rghs,`269$R`(\DOl;f@$SMtH.[8O"NQ7FGl-&;$j$qXSU!YI->Y1KCb*E3,%USf[N_M:fN&H8D+-K&[Zq6/Q!ml/Z@-.c&Q0iiX+nL"+rq*Hap$PBYcS2a^9F^FW=cbEoI6=YV2)WG@]q0@*"4Cb=4qH@Lc='Tm*FkgbsD-eCS/FeGO:0thDtl@r9@G[hQAAJfBs=ANAnV&n%=&kEVEQ(mC,j-?14:SI/>IBo8SghgMcG2Dn`q-?G(4t#!j+rED0jeK!4BV"7tu\R8VZ[M9t?(Ub&%28Ze:%W!ZDH*FDUYcS>gMNI[s;C*b"V`[j%Cb%he`,;Ws,3>&oZ+k,17MjVh9j_JX\$AddHOof!gXNC[CUQ0aZLpq?c7)s.6OsBM#tC$f.o4#)/ATnK'.`qaX1OaSILs:S?A2rD#=G[':$()Php>0K@<89=TlY$EFqAI?(MkV>[N_MrChdou5?7GVO)7=K[`Ob>Nmp:fkmo?j]-V5f[g9'7'f[iPZQNkhah;BHL0m+)nEn(l86!-cC3PpTTROiKJ83M"/@QT\qa-H0eC3b/3tS`h`O95[&N=MV(MkV>[N_MZfN*`D7CFX]/%-2IMR[)!\R8VZ[M9rC@uiQ,1:j^)^q&m2*nuR6)G+Wn4bZh/`X\VmTZ^;u6."AkSO30Dfg9&K$gSPChB1RPY#'>d^7a.`:[(/No0t?G.EcC/7@!ndYO;Y!Z<8$`4q+2A>k:jUQd8aja+n^J)`O95[D)9gFCb)q/EPo5*_6u+8.miM+gPTje[b>>tXk6Zj/)l;#jaq>\fN+e+GdOP@5E0Y+A`8W%cUP@.JkhuC0+QO;^G%l:$fa3Oc`*lMW4es%l/[XuW;u=PqgKFJI:na-fO+>!eqD]M];\kKADugFKE`34H+<"+S3?(^K8cn?_eq!<=6_74pVMTV!sX*Me_^[o$#^/3]$O1LPOO\'Wh@,'3A:;8pfu1:s)3Ka8(.@`qU7C%"2#uah4I?W?Jud\S=nK"Xc;Z=QTBbCoC0/ScGP-\k^>EJikr+#a5EY>bOEN2-2?OC:;TO#j$!1cdoYI'Ie"K6Zg0AojO`kIe-G)7C9ZNK&nd2tHN6Xgqm/VH.dL[B8eD[SK]NqpOg%<['ksalg"WI[.U`3?b]Th9l\+5,-6aj\uJTp(^/SF)/cB&#NK%fr]8M:N^FXUqM`#o:&ocVcbT'/Aa8]jhirIAPX^!m=O.pqEmFmg_)4F3_&BNQA(q:qM=:^DZu]%ooAN/iJO;WUCIQUlM\&^.ATnIFLp%tn=d'/*#A26kf#i[H:,1mfPQmo`[UUrGSe*jg:-S@d7*ik';*.uSh-BQ0>T_UZS7>3@Mm!P*IO[-@9^9M>8ajaWK""hAaPh&C<[372moB,aL5P^Z)tG>Cb)q/gPWLL>Ie-G)7C9ZNNEY$m?_a+bmf"Y[A&#h[UNIGXgSIN/%-2IMR[)!\R8VZ[M>bN4^.K)GB8?G7I7jIrGBP',@SX.[ET1YHWRVW1`7e5!UU(?QTaR0!=Zk:9[K\Z@Cq'Vbg?fe5*E5@eFY:#UKC3E&4%/NZ108Fp&\>&0<"bQ/=)rhRXuZ6jg#Cq5.ZtG,*MCYefg%9"gCtsTPd`Z=-ZEBeGY4j"4o)oW6;-NcX@C$2%.I/\m:^[ZFm[UX&WBm[VE;#@@L\4^,GOP'D-P#h^@'[>4\eL"J#sdnh[]"Pa#a$UFGA-b-)CTeu\(6Fh^-7oM!)ra0*4AVgB(QN5J/8rt.A6E"9VTegYk1AA?c`G[_X63nb%8GiA`$n=prl`/0&`A&IfsM'7,QB,^&BPmB_ff(`!3Vo#l__6u+8.oI=4['6ZA[M@PSD7/b=><16Y%`<"KYo=8pTTgn7a`"]:`(p+fU&.0n'O&R_7?DBn&;M92DBs*+OTorbG@UT8q.'YqBdpfXSt\fPj#/6@W`?5UAdc_lka(A(#YP:-9DOBPmb$c@9\l=^pZjjD8iqm>AZ1KAZ1K"h*h%U?jrYP5Js-kSE-,Up:5mN8RlBb#D%QU+RT,Ia1N7_X$L1(cqF@4HU$f7i3G"g1`i#NE>aKHDM^`=h)J^+[K53A+omllk`lFt8RS?J3PO#bk@]C;$mOr?XVslR(?j8t2=h@mf:4V>0TM(<(f/A47Br(Z4jT:hWcK5^:F5=`n'-ZA@A\fN)N=fZ/_1_R,95nTg"jTjo^gblIq+MYAEust2!A"u`7%"dT=inR/ek_N58=A!@/EK$nZ_DP)q.pr618QkS_F!ZVFZoTBRMC.Q\pWW>mp!s3YUJcAjcpI:q$5ICkcX338[kN$K[p@F4grIhq[bV-i\0s2oq0(:I41=d)f.e6o6c$[n5;-1t[?`7A`V'BukRm3NELl<-+rZ)uYZgD..s6Xa2]%Yei^Jo,)O-*a88:/:3)UKtX)?^Wk"9KH;ZZ,<.PC%l:PeM$n`NFa=)nAKQqmNPXC:!DX/c_nu=6bg"H\cHX2RoQ9*J4=n]O_;bA$/54@,M&X?OAU5'9N"*\GpL*[KN.V+"JX74n:m\/?4J5GBOO7"fPs)(,CeiYa]Y5gJO+U9YYK#0a!`:$/';N?DK-a(ZH65'U.3cqHFdXCf(Y"lc:Iqk[*Id(u]#QOLu>(%H60Qp[bVg;?&-BMc=/%-2IMR[)!\R8VZ[M>bTCb$lL/%-2IWhX!,Z)uYZ`!tJD"l%2(X[o"e:LP8:fLM/hFPPBS3p7,,q&).N2[`E2I2k`<$!>Jq_9@9[>ZmJIG6\?2_XnIGSR7&IS:OO_'q2W4@t,@cjXg'&<>^EM(mdTLEd%q<_%[lW\-9483Ok;H>g=t;e]]4Baj7f"g^IH5cT^8rFp?6o9YeX6oE4C%CXh4P\s/b;/(kfMS=>7+\LG%YSVF`"d_098:cF_'ZCG!/TU2:).uWFaVf-g2k_Dt^mci['Y+VOp4-pX%/aI,IVk.5F>C@Q70QpZ7N9E7[a$N)e-U@tP*sk.FoV]#Hr(>?+`^)m$M-gVI$Ms>,_LE:Q$i5$A#k&+Hr90S,brukaKf[HQ>9W,&@iHTQ@buTI#u1mEi5Zq0J[rFEF7Y7cpNOOD^70bY^O.!op6O\/:L8g#HVoZB1=kB78P>apISahTl0,Wc^KPmb$c@9\jT_7"C$[UNIGXZ@B/(#+U_7GP,L>d1==gPXJe[ZqN7(#+U_e^:V'fN)f=ieD=3Jo,)OWV!OckjIqU\H>[#@\^bR7P]+D)ibc2gR=iBj;_YOUJFc]<0WLqtI=koKL>a<$ZX\iWB;%L(>KTm@E"qT\FZ8moRFnsD[$C3#Jl]#Q]ntVPqD8),TM[Kilk]RM]IhnQ[)@GHkXPTaE)ua#d/3]Q_N+iUNEsC?_M?"c$$p9!4R1+*r1*.a[C:J`NfOt7q]C1fk8",Dna\Zp^HZ^Mc@c#.R"c.M_pe,.Vf0FBI^]RMg3!cE4>[S@Ic1[eh[%c)e83":LJ#b&7F`r6tqL;QiSWBT;P5nd$\h]ILu*f"_l$@RC0`pjo<]g3K:;WYVi1m/]U__@$=&qaU07jG7L;)8FLOZ4D9]$Fr+!*8!2(r`7HfBeb-TPhHSci,=t>oA6&=:g\bCY/A_^3o,Cdn`17m7L:C\Vg7e*T_=1fN'""gPTje[N]VA<\E$*L2B?t&)2tY`O95[FXV&V[M@PS\7&UP?s=MW'kof(O_M.a.tG=;hUXW.!O9+?V`3l`N!&9j0q9:(KmnIN7c#0LAOdF4+rm2EKZf96\2lhbj'WUjBEa.L15qr-==pL3$Vd-aXGhl$4*4st5iYYph)hAAQ_f00q*%oKs_T^FR>b3$i9+-UQaMRQ\S=`AX>onbOMkb6*DAY"O%6`Y?r%MA]*.s.W,DgJu.neoAH"duBM?1/%-2IMR[)!\R8VZ[M:0^3&Tjb`F[67r]!2/AJ":m>+ERq`J72A\RelF]a_l"@VKBj`fUeDHi)dGe08.bRXoI('h800N:/XR4X6_f@2S09[C3_'S0"&Kq`k&u*^+`PIeD5gGjOKME;tKmiVE(HiR^Rq_aB3>M^RHI;s3+jYE$HjkIuQR%ig3lO.:s9T"k9t.sU^MBmAe4-)e".Eqfc"IdAmRFRU.Fk0-8=kht(^bioL3G>+>`E8VQqH1DsQErT!]m-?Isk`Jg5`:7d(n`+8U^?VaPO2;RNcbd$/cb[?`?gsIQ2PtF1E';Ko4RJLJ@kqq$n0%a3ZD+,?RgPTje[UNH`-u:EB(#+VU@9^9M>8ajaBfp2^[M@PSD:P>aXk6Zj/)l;#jaq>\fN+eVfZ0\/PFbg-6B?(eQk8nZMY4T5Y?KRKDouLi:YBe#JpLAh9@3E"kS8.m[rNG-@1USc$p[&LiUjto>[5LiQ%aK#HE0m*;FPS&/;WCUPCqDB=()CfN\A2%Hf9-D)*q4cT)](XP+YmbMl)40<.<[i0d0=N%.,Kn*0/Ub085k_6V3\KM+S!7d?lf1]BiL6ZF@H\Y4GqLg$_:TR#P'jJ2J\fN+eVfZ,/iMJ^>@g;r#?3I9@Z9nmN([UNGQ2f'u\Cb*E3+q;FR%bXm!/%3tthG25@bI2.@Cb)q/gPWLL>Ie-G)7C8o(b#OkSU@4@=/R8Lp1RS>;0t!b118bUR!']jm6f7h@+XWC@CZC:dJs]g/m-=+6SIre_!!'1]fQA[Vl-0oF"e$/@KC4J`MO']3"*-r@_W28-Kc&?Qf+;56h5^^"X0u(33)_;BFEN9YPso2Y0a%0q2P?c[^)s5mil#oKOnS-a%m$]$*bD0?=I/VV6RIBm<[M%*V.0(ISmR5WnY!F:8VCVE_R=L$[PDYLdP1%H0&)8#`O;c_Coc^6[UNIGXb[q)Pmb$c@9\kK@1RS8gMDP`gf_hT8IgCNOr*&k;_Q1Ps_Z)2M/>R)fcgG4-^WZSQE'qujZ+a4VDVi).Dr&!gGjPjNEFg6Y](IMbEVV<$EpYVEp[&^*J,^[:p"OCnn"$L5S"57!R"oJ>>KI:)PD+"h!\968(WY^sR^S*IQ9l8=9%d0JV6%_FGk9Y3*r"6-0!/P\=7plVF=3:#^%Fl!/M\?pkU(CfUR,4+%%IlNiFX-7[r5!YrkU_ppnMo7<0#r8Hia)XJYci8dDNlK%h*jM\b#=]eNk%l#-P*U^A@,DR)p2T\gMDPaM(#+U_`O>&RfN)f=[Ml%ENkfI['jg@?")m)2$^^&>Tt0nl_Y9"`!j%p10T'p*Nf,TIc8uF4_$hJrk;?&%L&9>Wp"FXgin/rHC'eoZ9DobS*M*d[Uh$S=>(BcfX0$^aaa#h7N/H5CNdMphV&M`NT!N(LK4ppqh=OeC-qGNU*WaI^TZ_V\A`4m`St8BYpZ5g(CcY$au=/>EOYKO'pXACb*<0,+SeiMJ^>@,&Z%60%a3ZD+,@t4b@6LZ)n#\MKB2A/%-2IMR[)!\R8VZ[Mb(&5\`,)DcKF05i#'Zh/O=6S2+^f"Z,sm;8rQI[#2p1OIL[u)cGF2%Q"%4&8g`jZ3k3_$g&C\ZqiF@Bf!drR0.HLp:'k86]7bqB*BAKokd74.K"bJ[31CqVI\q4O?f-].sh6hC-6bGC9]$q>tp*^^,>YM)4XEX++O2:I.+a4q"U$Xi74mOE,)Ze^\rdDa_S!TAk(NM'd3o7A$sRqaJNZEpM2q*sk*15s'e#3B<'B`QH'S:S$,2rMr`CTtFc+'uO'"\t,<_0fi9k&QC,(_;?u#"BpMrGWWDnIgeo/6n^48Shj?g"i4I7.u\`St3>AS/(DZ_q-Q+esGu38%oeOXn8j&Mr)2%fMC0jGfisr)tjX+>IL+5.9k]N78N)NfmDA);ar_9h5,S1kIj[MY2'?@mbPqBo?SG0DnU2urooDjE;07Mi3'a`iU6G9,eeI,55Y8EnF\`c^peJ/JT&8N*:A+H,eS*a2QZhHTS^A#HMt.+F;A[C(MkV>[NZ0u5*4DtCo[f$%CR!cF4aM*gPTi:S?T,#YcS>gMDPb=5[ms&XWBG[fN+fm@9Z0:/%-14_R=L$[PDYLdP1%BYms3E$r@X[\?!)]HVTPQA$[28"G(\U^WFRh:U_D5ro@bXn8Tp*QBu):VG?.[ce[3>h3CIp0a^W@2Kq#`C6`?:o\D+IN'%,O_CD`EO)aD<6@dA_:%Z@G$2>[M@P3]jkOsYcUIf@9YT,I=l>dddF?A>d1==gPRfr4chLS4r+&=iG%9>K`;3[r!_nc1;4'q^B3.Z&q=+kMnT&*#LJ&:ZE,K+hat0UYe;VJe:e*?37PJ$c?J8=?m)rJQ;t_rCbNM-f9Yo1h[+9BtCd4cNg;r?D\fN+eVk^fNYUn^j/\Cs;Q4UuVnU4kdB%lI=M'@,Hh6fdNCC*?!,A\_&t;Gja7(=%o:"-ne-o!e\l\M7aW^8VkSE%S:bgk#`YI/o4)8a^RBc_Zh&-5=BJ1sr%D;YS;3$qAn_A2Kj'OjEC"M@%p?Ohr)i`!G[5PcGYZUsh@T<<"*S34o?\]++ltf<2cI=gH'kqmE<\E$*L2B?t#2@;)Xk6[M_dQcW$FU[`GM#qKfN*`D72jLL`Y.uq_+'c*ofH@o4c(Y`!GEslkkiA+&Ve90`)8fNX:E(^cbiF7nbfr@E+N`)RQ(DE?kF<@9+3V5d41*mV8UOVhq.X+\2Z2D`s,#+?h+h`Pj`"@>Ch4)dneigDEVh&0Dr;7TUVZeLDOYKG$F4)op)3A7SaE<$SMe^Lp$5M62UU>_Lf!rpd[UT>rRI-"[2W&'C9FcD2Wfp?b\W1075P^GJF)6S='`Cj?s4KSq2S^i]$&s@'OP+F3f7?NuU@bjnmbA\NH?/SpCY(EX(e[/N#:,%)Oc9iTE[6$/EMa7!bkAj:M*AGZ0EnAOVVset0H;/TJW"T+bDTke$PSAaS'P)2I5SrGZXh(7+M[W8Ajb3Ah!%^D/-SA.t@BV?@o5c3pf^#DDgT*V\82hs06UZnEm"XTenkr2pF"$-.^?_S6G(ph<<6>A7""-q2l_%r=E(29gRt*"cBQiGF;6a4lr3TE"QgI,rn/JVsmZm('G(Nu]6lf5JsO(S:L>^@nJ2nAV>7F3QMTF&S.%(sM40ocmaW!mgn-4XGEqbUm$=#08l(S*Rd/LdCW*Ul(H@$IecpSAXZhk]O]GeRYQ`&g1?))@fdD4)B(kVeJ#JYmE5(+CLrc`jC?[P$H07FkWB3t?QG'=b\luX,*N35GAHQ"4:A(^_*NO/k*.i3"P_mUbb!NZS/[T2-k>ES'c[V@5@$`+$]MR5H].i3"P_mUbb!NZS/[T2-k>ES'c[V@5@$`+$]MR5H].i3"P_mUbbai%(,7W6[P2:a^VRj_%5^0E>ROej\*7;&aL`",s5hlYX$lD;:9;e]%o7VhZ7h8>1j%&7ij,Y45]AC+$^H-T[SiT"=c^deslC*CV5>IoeCEbhR[Zq6/Q!ml/dU_!2c%U"'C4U6P.bIdth-jNu?s=MW'd6;+D:MnDl4c\'Sg7uZs&";@]j,L/p8^7NDI+l[@HCunN"X$1%&4("]GRgMHsmT^YZrs1pHr%4)An0bJM3I=gH'kqmE<\E$*L2B?b+bZp!gT"8XX[p(A[W93m12JI-#U*_!;VJ-Wf_=1RU@&t;>H/nc'>Q"KMo>qnK,iCU0&cU0B^YhqM>Na)=Fb0Nf;of77_T_V./%'h(L\"(G0[0fdMUV;0%a3ZD++^RKWG:1Wl_KI8B8NSEl#1>Cb%gX+_2VG<_\l>Z/kNPTc?ah&G%#4_nOPgTiITS(]86gQIQ?\$Ap\AMTL`E6=#UZaKJ5A;IW*m!VnaD_Y,O5j9AW=S$5PZ`0sE'ShO1._;f\fN*Y^Q^%(lASB#j,,?NhXW!)1cO/EaZo`(S(MkV>[N_N0fH[-'i!XiSRMU(6l[jT-o3FX@U$Ju(;0.=!$hYrss[g4GQtd[R,C4p=4geoOti=C#%T8pau0)=?aE^-&dD$23k]KcfP_;YJ0*,,ek(?7nHUV4=4V[us6F/E@6kHUTnS?@o_8)1$`9lA2t@;8LCd:Q/_m>_GCFJt-bedpZIk?s=MW'd8QiD+-uc_mX;.Cb*rMYcV07XUNsAO@I*q,,CuB>;[,'($T,Y<\E$*L2B@M,LN3I?>XeCoN1"aTI9)i_Ri.LE)t?W<6&0'Nr"lG?NKdKU&4GXTOUMuR$Rk@m'b?+k`2=N`;"8f:PE@G:OG=ur^Os7H;2b[LlOE9R6M(j*o3I+_@seF@%[4rr`m41T'eTu3`q%W^OI"7Z3JTL8+=NX8N8PkLMsqM"ccKdSc:!7_HQn8OVYdAEl#1>Cb%gj$/:?!NeVE$.bIdth-jNu?s=MW'd8QiD+-uc_mX:pCb*s%YcV07XUNsAO@BjekSQle:[Kf^(j8HsAZc@5RMC1@PeE#^/rg83_HLfYpuD]p$gb=-:WC]`*E;r'QkZENh84XRF;\p>SO.HlQkfTGfX[f1P@oSH5u6e>D_'Yo_>Y0/2d(h&n$r_1X!'TLFrDDa49S0oo'i]`VVjiApdb,/'=ZpF^\\^/pYldpHVYH*k4p7+YKr!1;e7pQ+$e_A@2&mLeXm^n&Srs6Cb*E3,,C@*XU+0)fN(_$D+-Ji[Zq6/Q!ml/dR`"kKQK%eX!Y`m+rpd?ap$PBYcS1F,`tN'ThfCGBH6:2U?aQqn]F&Q2mPYk>Nt(*-[q8a5OanDXquE9Z]C`)@3>*cI"QR^DCbYop"UDsoZYjRP%OoE^=>#kT(r/9m2#nrN2a-458B1a$\E9^,=/5?llNF_ClFiJO^5VLBmO&#J4mJ_og:C\fN*Y^'"/O#!4Go)^p[ujfN+g(@9^9M>8aja+jD;ZZKtFe]h6F:#D%lh"E@n#i&Y5bCDcp.c3nrBW;F$16$/mqDR;X>cT3Q&pSC)6He`(C:U,/:+-(7\PBQ'Z)7J65,\o*#KNI=X_ap_UpeDAl+befS>_6bC`8*XB[qtjjSmbrldok?sC0L>8aja+jItIm3leOSUgZiZ`Vpmh.O/rP@7[XNe)'/Jo,)O#L9bm6ZesR<_\9]^$p]o<"mYBeFM-@eQ]/)Qmn/okVE!#fs@F>3(eI]Y#ujOO"pOn.?E-Y@u%D)WX1%DjTA6do3rTW;5,e!`)nV-C1Ko)KjbH0;hC\b6=Y$i2?Aa\%u*@V<^oYWLWq0''?SOq:2T\($,76^&De3[4Z#Vb:\:Z`f3XFTq\Q[Mr%P3f'\b*L>7j1mj0<*ID8iqm>M2*a[Nb)KgM6+;\#rSEX-d`m#U,2JNY/]7gPTiZml]?^Zo`*)[I;n^7^9()[M9s=1_IE10+"+`R*D9CD-U<0gW9cU6k9V(+?V4Q5hI[$0%bBTQMd-Bm:6>/%:)Ht:^7a/">2cNF?OfjfU65FT[8C8!+RCJSR(r,.(ZIj/RE*>4E4>5pCpQV=p=<7+J+m=7KKhm@S5mL@*"jKsD^crMS&Tm=Bi?R3!*=hE]_Q=O4s<[p\;IC0j6[I:.q$hpXKO8iQ)IS2M5-*-f'GV0-i*:iT\3.)g!mou.4jn1,Ko"B5WacXDkm->URq-63\N#1UTrAS:7>EZ2&pn_f;GYMdk7@D76jSJP]jA`!%^&.$GUn!Gp3To$5)Mh"&5X_94e`R%Y,6!KUf.fb)7,e[%K"mI;'P]U'pC@LZZPi_ef9df2LM[D7ddXcgm17.;'bD22aYID%^GU7VoLkB8gn3lbWi84!FH("DV$D%Yg-M]LfpUfs$bj&oBUF)VDH)TI.EEW_4+L2ji4dTb('9X]<\Ur.o/*Hb%!s0bH"^"jZ@D;O?`Wa-FrPg:%H=hI9+)Xg1C*8n+OnH0CFtIVs_a:YHtOH[qrcXOLaAH,dJ>R=Pl?VUQChu?*1E9l^mIWG=.r`EDY(aZkWQ@//[*@1:.d579dSXJ[V!Lg8[PF!*?f^Mk#om)sMGo'R9YD:5#e\bb"&Fu(3q2@MX4DV_FWp64?DZ=2YeCGC4n*N<;H85)D2ngLd_?-:n;^#b_"*_mo_k61H*69]\9thc?FVg;hgFa_m-;a9K83XlL=\'$gL'.)]:7*f^\Mf_OoP:40BE03`S9s-:H-Cd4$)K,T6t!P\i:ng^6t3%/p,0.XrrYO#Q)lEHL7rZ.)nbbNdL?&YIhJak8i6!l]OAS@_\_@BIa&_=>7*^Q03q2U9/)ZW,$(I\Y-&sZkWSV$:7rsH%'EWg5<=j\q[Y^$ehUK>6+`R!e17,#Wt]AS#,7R_NGFdNSA2V]C-+k%,MF5L?fL8+XeqJKcPooO5%fUe\"WUd8Xf*1p28*T$Y:\*c4-GC=R.DVK/2DVEMas7J;UjP+TYPZtU;QQPWV-b"#4QKMH>aBZG)U!]iK%JD:g:=#qi>Km=gE[\(Im,^X`NR2DGa5TW[aLtqjbdX@Ab1W(GKf3lqC#h->_OK6Ti#f6jlDgC#N^Z:"7jm>ZDS6%Q*_9C"TSO\LUJ\[d;*+NogJjPKA?)'o;uuIU7F]A0)Lcq^0L#*B,sPZi%ujHOoL;bj9+s&r\t7bq4Nu"5Wg;,+/NNdGO\W7IJ.$F=p(LHKaF%Do(5c%r=NX4h$50)8nep,$nt4'@r4;oPi^9n1s@(?NcH4g\24Q7Ygcq9Xna0#7u+c?J%.m.(&Fb,M\uRh*X47mE?I'l=*S!"4OiWXNapR*\m<-D7JSWu5S$!.Yf:[]0aQeX4]aYU6$FBWE$![T]p<"or-_&Lj(!!(1OD,mC6BWL4-8>3.n'gc-P<\nu1g'Rgf\a^ut=`GhQ>;cZfhib-]^/V;Z%H?hTY5mGnpb:D(0+RGh,(H@>eIe[6l?7,N*=f)`/"a`"!nY[m!cR[Zck^logVptSj\to7_2Z7`j_ap#maDu)*sO>QIhFpQ:'YD6+5r7_hmGV7f.^]CgqGWoY?r?6)um9PNXZfd2g9?6cQAaFLC`:-:Hu0]I^8.2I.>lGEk2kERH>"Tg+3']F3jg[Q8irO?A#u/8[g[!\mT@tm+]RO3.4"r-k>(9Z2\N;,7HcpSTAn>SS-jt_83BPCg)BIOh[[McU!WZ=WBIheo[]0Pc$f1D$9pD@aJ/_'l?q[Zk]Z/BWJPu.EC%H="-NrfrYJ@Qt?YusJja.?TaHAd,;W6k;5%_PkN\')Ijm,'ME:A/mcZo$Y-;Wms=03iDq/Ld!:-?kN\eKD'Pn2+-TV#[;n@,skoQakm+0(CKO.;dEY:]4TI-Su^90R@Agq@c9?FhsE:S2Kf[r7>KcZck@\)(e\Rl?t&kKf.1VP[+6in11lEk"WR^A`(r;B@gO.PG-JPBZIZOE^+$b?VJ$MoD2;Yo5]gTri"/)/(N#J/*^FWZPn)g5<=j-&&e%X_+6.!!$%.g8]UpX_96=$C2C[C5oT#RS1XRViX_`YB1]`!*Bj`>e4"pg:IF4Pti`#?ZM^!Scg.JDfMAY37?W(#qh81.D1Z?o@(1EVp:@`D4Gk=38`ihm)SWSl2.&J8C('m68M9K<5,!s>6C743B6q%p@OEeJ`-iF#:JW[E7qDNqm*,49_S1GmH],g*=)G]AQMCThLRE7h)d7dq^,i\hjF>maXkS'^33UGcrRO(gj@FL!!(21KhF@A[DL9kZk[E]9+#N)>KshtD$9pD9N8NDdoIt-D+.[VG:9!@]e'(D`dk^k_Y0_1F3$&$p]i30WJ,3CbSta*^Uk`.4^LsT-_J5[l\'.$)WGI#E"NqQl1ef-_*tP:1FJ2=1Ma#sZAW'JBQcmPLFO!'lq@UpIG[^kWCmuph-Y9QIOUHNXYbn+rBWE"a.fb)<6)\U9/)Z=9<0:[FS@n82#Sq!!"]#BhbD>ilL[s^<7InQ/oR*e]ZFZ8;B\!@AJ*IGT>W#S4jGJHM.1("KMS9q=`u9%2ErMZ1[-`+1tM<8:R02cAKb->7;#h6/it6Jq(XmX)J!:QYoh+$lk%+5XdGC2C9%GW[]PSXQa@KE"TSP,[\9g:/(t?m%rFa>!<<,8GG2-P/(t?m%rKi^D$9n>!/nlB#Hr+7#k0GAKX=@aEOoP)]"WLeJ;tQ:?K&]JD:7dNn1#n-:V+dI]Vpp(RAkSem%g/Ab0&sM(>bCGWN=>*a5trU6$hD=nE?gpQc5Xl'f<5Xl'f<g1`\(-NA5L.T,FM-Rc\K6,6Hl.*<2jt9$A"-tZ/*X=SL[(ei)#,OT#IafMS-j&Kc\l8Lh:j1Fe>WrRlDsen=(bPT4l.Uu*ZC-LmYo:/47:34roeY'_R$`5j1j4tJ+q_>qV[rE(h"MX2m?q2mcpo^C.Xh]_^Fl4Iu*r&a*$U,&JQeT[#*l"3S_'7X6_A_d-0&8%)V,)!cFBWjqkN%aM?1Q[HS)ihr&\2u7/c#/phiJf.T9mkes-\92h[[`:IXbG%Hg+ISjm''dCRpXOcF:p.QXqg\,]*_$,MVM=M>d!co-&DQkWVRBd8g5I!"BuN[\Bl(!!$CJcrRLgD$>uN[T\&_V15#iB@XKP_[>/&41hg\]!Sq%fIE9ZcPrjQtf83lN0*nB"JXR@L&"aq*^VnIaJQX;a?M9>#H:Sr[Ndk-RgKV4?_:s*eTf:)n",rufP/I%_g,iDd661PNKc(FE^uPa2((Us'RnV.WQBq9EVn;pk^.P?9AI_Po4BkBb8Coq>skjk2f9H^3@NbfRcn@WU1D:nB\Y:XW:N't^e6].IlMEoSa1b1b5[As.d#gg(S6b-]_[6Xj6Q$l4+DKHdT3^i+sLL68mBQtmt\?g<@;W@-aXU4+sL&@D)HgX+5.''S[?q;/@qq`!!&[CnAlc:i4IF]nQkR[F>&^EZe:kmjU*c,ai\EX+6LF1Y/-]iX=>K%9rJVsZR7QS68m-+m!Q2)Y^L1K5@-6,'p`L2PtDp^Rjq"UO"1nkA1j@l"jiNnGmGH"aSp&e9pU\#aHq;[dZkWQ@5f5om/KqJ9XBoS@3MEPT!!&[:lPU's:kW/(t=B&J5g.D7,&FLg!$89AZ'(@7k(u&)oaH5S!>pNoZMG;[`G(*^0(pSjQ,P]"7kC/2L4=p^O6!fB)2'T]AuWN>3*72pW@>7ccBajh(>7GmM!-TcRjG2lR@,Fc@DG/k%1\t[cX2RXK@1qp6L(qG.-4j]j7`qST"2q_7p-=K+A%;MRGi>6sPr(4e8m^WuVca&_F&^`]n[Y8`%(-;][sgKfj\N9BhFS?,%S13a1XVBDtX%O[&g9%XI0q=kRopY\ZLC6s_p(7Lo'6aNh6+nndo;H0;6/o&@2ll&E@foZEc4[^+`HYE/1q`NNh<]eR'9cT0\83[S(V[`L[Z:L?K-LkrPhBrh&&>N)$8[[LQ-FU,C-Q=,3hh=e5rm-0V,"$L\#^\^lSS(%dl+X/+>rTN_d>FjOdkDoZ"VA^T1)+K7SUAFue(,.=I,H_N4:r\Eq.I^DuM,P[f@%Ek&=540Iq\l3]Tpj\Tm-*$+7+51Iu2?9-Ni-1;?R8Dc;Wdk4,p3p#"%]=^@)G.>#Vm(aW%g=IqF&%7`Dm?/^mI:`;1jletE*9q7)@fp#Bjr[$nOcTE&O,rp)J"?mlg>l*)2mU3YNr4[jWSmGW>N#-mN&XTQ/@6./KntPpHDRaDQF=Xf.;_LX+X/,idR[SB/T$2W;VJ.N[MfHuK%n-;i*apZH;b;J?PX^Zr]>&A/amVB?1%CIfPmH&*pAphrU]\4kN0cmO7Y?p/Vo4=LkrS+*:!!U?0u"BT*8!qIgC3#:(PC$o>JK)KV>M].mucn7)Ur9D+.YP+sJ3Tio4h9[d"=i"rDp06#Y@\g"5%0s520%6$e7)gGc:XJ,JPljJO*eOFR#6Ij8c?A?\7B0A%:)4WG]l'*jF/`_f*-d8l'ZLkpk&=6:=407)[(!J8I.Z$j<]Kp#&frg%L^')XOSMDor"H%QQGs0@SBsJ#$Ft1%pOgRcT9*f#`dG6S_ra*>&kq&J8*&Bj3_>]GYMn4qF/)NY1H2K>e-a>L?K-LkpkCCL5_P[R*AM6q"u4]B7kJ&7g@t_-kV%g^;=1h&Wu$gM1i7:Cd&?9A_MWf-u,odp$']^;W[_Hn.TQ6q"uDCYDf.K(jnY"#%@UoPfaK:E1o\(e9QALUNqZ&.oKd&_EDW'lAY\LkpkCMmm][.N=^lb=%1giLB_O4;"+(RO4ns423"VSgNX09O6c80I(ic-,=I_(*)VU(W!iT`KgAjL@i;*OPDpVOl'`]ch`\mfn/%GQYe/PbpjgN;8'7j4?o\V`J$Z613K4Da3^uraf>PSfGbCNIXDhHpMrt>5ZpugS%z!3kI-5jff,#ONSPHXQ<9^'F\`!=+4?_%GY-E+h3o*$``B#E'88;+"R8_Oz!*5V3AF;aqL[cGJK)KQ5L$F(d)X$31&+!2/2AX_93bz=?NrjQ#2csr3qX`X2WIo+Qs7%#1iqV0_/an..FDg57.5ibO*-3?urP$GTQp#b'OH&4sBu?'Y+,Be/KI'HdM1h]Ee-Ol?i$h*,m#[)&s76$AXAb__L.5ENhE2*&Y)/Bk:T\c?DBIa'b%#f$'TN6%1!N7qjX3.5rZ)88=r.g?HlsWEB^QRq@')`'"rL6CYD.ToPkd.ibn4tZbk4\pBIBY)mejfiCN<7]RJ@`^PFqKo`#nL>JO#&.W@#@2o\>dAi&knA1s\.n^^Ps2loK%!"A!7V7O&o)h_!73-5r;ij$4D=ICh?/*8of`(o%QG#i%#tU+KgR(Z.d)Y@V,!mjd8g6D-&c[@TN6%1!N949/(t=1('%h`!2pW;IfSaLg8]0tq)=2]7$cFh*";al8=u4Ai1%NsU:_N%$GHjp_J]E>I;h?CejfiCN<7]RJ@`^PFq61f4(u#$UXl0$X:q+ePZkWQl!6-ns:b0'T!7WU-6+^(!!#8AcrQD\-<-@`PmRBSa,.SrN#W4Q`k7>kE%mM1#QT"e5XMT6#QPbHY!2pZ:HG*A:u?nTkC!!!#L5[.5[KrJ0gG#d!u.2`*c!!!"$[8\sE:V/%bW)Z![WZ#P$z!2om7<@,!ez!*"KW=to1kXerkq7=)fOzTH74r:qrHfW-.X3*4-F\!!!!a_a7QZ+g_sa!!!!a_a7SX&(R1Dz!*Hqa\iC[_>//A`zYe8Js3?!TT^Wul[!!!#'][XMQzzzzzzzzz!!!",2=^\I3#`Xb~> +endstream +endobj +45 0 obj +<< /Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595 842 ] +/Resources 3 0 R +/Contents 42 0 R +/Annots 46 0 R +>> +endobj +46 0 obj +[ +47 0 R +] +endobj +47 0 obj +<< /Type /Annot +/Subtype /Link +/Rect [ 237.049 290.829 276.541 281.829 ] +/C [ 0 0 0 ] +/Border [ 0 0 0 ] +/A << /URI (../download/kabeja-latest-src.zip) +/S /URI >> +/H /I +>> +endobj +48 0 obj +<< /Length 1333 /Filter [ /ASCII85Decode /FlateDecode ] + >> +stream +GasaohijNf&:X@\U&+"+'?^II6Y(5.8THsig6m+FFZ]!_qOk`X,6s#KS?pu7s5!n^8D(WZ5Ch=sX5-RDG5(rYn_JBYpO_=Z_Lp;,CU7D$-8\&_bHOcijA?.D;2A6e4p"[koW\+9nUA)Pht`(:K!rdQJ--#gpc40+]t$M7k;d3[TKfVZR8oMchHZhjd.[>M<NNCYf>.HhJ>d&;piVU9u=XI9(QLc\2e@Y8gB'3GoSk<=FS)s("\E\.HSE-]1DjI\(nIpB`T/_jB/7j[GLC?@bJ%p&Sq/*GUHnO"uETiYF`5^<*m2#^_s'^/E_X.mTYt$CG>mc=4"qoh#>T[ISH)VEZ(P_-..oV(O8%CQL,fFS(X]?80GQ$c`FnqZ_WCsTXie,B\aH8.Y8Lo$3lAXoZ56e"Z=*aLMX8uJ5.b!#:qbnfhqs1GBhMWS1a)1H][d&qB:n3AJ'?Z5lP13ioN_q1hZr[cDK7E2')6;fiB;OaBR`db_$Z.d_jBf].C1C"tCI3HZRla_R$!RKrg?fP&4jZCs4(c8i%E@%m5:Tr#lk`bk#*4U`OJp!'85:eP$+JpZ8b!&CB4ojs>RP9O;@c^gFnbW8#_8MN?k_ML!`t$/6NW*r<8=#VEB#TS#Q+r$$>i\2F8IdN;cbTn.jN@DRSKj/"?[.q&g7kh;CUj2t\@<^>e3M4=luMA_#l,&ZO85jr?aR^TH#AQn[l-f!m@l4f3a;[R*U[hG?pe5k%k6UU(?1pHYX^#sP[m5[!UBJ8cMo#&(DlbB%ee,'(/OTX;!.:i.XR6e*jK1YU/[1+7q`"3D$r`"a&QofK%L"7;:t(IN5_$>*Tk(T]':( +endstream +endobj +49 0 obj +<< /Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595 842 ] +/Resources 3 0 R +/Contents 48 0 R +/Annots 50 0 R +>> +endobj +50 0 obj +[ +51 0 R +] +endobj +51 0 obj +<< /Type /Annot +/Subtype /Link +/Rect [ 350.272 296.655 382.258 287.655 ] +/C [ 0 0 0 ] +/Border [ 0 0 0 ] +/A << /URI (http://www.inkscape.org) +/S /URI >> +/H /I +>> +endobj +52 0 obj +<< /Length 1570 /Filter [ /ASCII85Decode /FlateDecode ] + >> +stream +Gat=+968iG&AII3E&9`11DNR`":8\[(WVRtBps4F1l&(98:i,,'VY*Va1q(@":9UABt;aGii]MDD]dV;>YR^Ie'Yr"i=,N=p*(+n_O.eQOkAck*J`U>_u#D;kkcbI@H;e.B2ZM:'JHofAr$JKHL:I8j5?;tLp>S;A`iqN\!:[:ohiL,*`3[dc6s&e*-coAAcHuLS!FS[0ObX7KR&e)TD6nHiI;h%N,,qfCMO3Rn5]Jnm`#,_oWHa.O8\6V3kDg)oH4g8j8Rs/"?dLZZ79"\WeUAV<.(Ah##-]IKBYrM]2ZpbsRNNJ2NgG<4`rC!_/q5MR]RL)LA)4fXc0LC,ICpr[d4&LU]m\LLMEMEmgX'46r'2<3G.R]ci(P2;Hq3Q,RRjih+IHc*MK@7FUGAkZ=nQS7AK\4cqsf770r?A9Tgtj`n^d^r6C9(:HQn[u`jeN!eA@S3,1l*/99iVJn2TUB3D3OgUW1L/?Diup%,2FsB;)>Q+XbI/..^tUQ$0+rdDFC9"3'64ejRICr%6Z[`Ii`FO$l>d2Bl@0[cmj4bj8o(b=/E$QW#*DicelBWPPZOT\arV:Y"Hu5eC:gA6pUg3T85D.laXH@LN,OUdU)pKElqa=J$q.lrBkl3=?8dELXBbg$VgG!k_FnW-m:?b9,(r`iibj&8Q%"fE%;]P7Bp0h]7H%).ThL,[J.D/R:UMA,c$bX5Ash5)LdOOO3CLh$?qdDaI8;ON)?*L-[(MgrlNQDgO?g'd%hP8E1B\0%a463mNJM>jiOY'3faM*)ra-k>LAV=^H:&]N*\m#P$d,NdeU.rh%>.6ACk3fdSn8_%Uoo/WO-*/Tt%%1aH@iML!q)-[NrC\J)M%H`QG[+kCeAg"Z[KHC;sXk7j%hI5q+oYo&m6aJ'5g?*W's1=&B!a44bi%uj$@'@+IU,$lVi(s[=PQOG^7Ig6b+<_?6-[$[me(VOcdWQRI3&_)Q2ujt(qHiBQ)sG1Va/SN&)6)qIEP+h'[NA[sA0SL/Q5S-*;+0m)N$8_)8!0QX*j-L&\tL;/B;$PksWcILY6i(h*2q]`Nue%/DZg-urG!pJ;Ld5^da'o[28=(/U7KgFeFVQJFJ?A8&D/aPe&Y"G"#&5ldWHlfp-l1d4GpNf6$f>ekn:nOJ=8QBY7-YE,Q!$ub"`W~> +endstream +endobj +53 0 obj +<> +stream +Gb"-VfkXR]s$-#!5N$C^HI[p[GgQnm+G_.l'G6H?,!dc;Tb>=:<)QqMdCRgR7ZG$f[GN^bo6sD_),1d2RPq>s%qs')B?p'3b;84LqB)VB%Yqs\E&aB%KY(7QiGQWnE&\gILVr(iq@`3sh:'PAW$"oJTFsPuJr3%k4]t`[#6#WFgoWOU%Yqs\E&\h4?c(X!pMdV$E&\gILVr(i3.2*WX&l/OG?<1!5LLWCdRp1I[%oQK/!JP380f>;(%I*eMmS>JE]BS?Od<(rkW.XA3.iN)r8DT!D!7Ua0&u35ShB^#ih,K9'a1NF<$J8A:sks$6"QiFG@5F"ibl`o%-6oc%>Vjs:uUFFLGN>Uh28fZLVnCin?i^\_td-fit$o$@)Lg#pMSNJ8k%''ZpeZ980WKp>2`1"occ7;eKT3+W^Q8o31PP^gKF@!F2[$V##"ad_r2$Vcp^$%`m]W)?0]nX5Lfca#ZM\?6r:"YU-[>)0-uOg'mD/c4J?AlgJYHUrJH,5i6&Xf)F9>.p1Ff0q)?'s/W=Qo?M[HOFmY,5=D-23D"D]V^Yk"RkCX6.fqO@\hc3ra:Oph44^QJME$Mu1[fPSbep)f^-($-dD.1a=r$OV92eqBltA_:0-KJhq(-n/5*c$9uFb%2t]Dnrr*@486S@,XNp9$bV`r_+/p?I3+dKabq5/_G;+#b+TGKpCa\X=XrL8U1<%<#AGP?@aEcI'DnA"<4OtTsR.@-"k*!oTBV%:2<[H:5>)NA$G`-)f.L;\PBWNatkL]=6Qm^8chW.4g#.sX=..YeHJ1%Sl9&t\a2A\oMC]Wq-?V=9bU[6j*J-?GIBsFB56!\m7qRHXLuM&([=hLWua1YjmYWet6Z3ZEp[;mVFtdY6[DX\KIt5l%O!;KlnlAk"Y/#qTX\a>T!=gr>i8]s;i0FZ)SCK/W[pi5-TJAk,KF/)eQk+Q('mD1r/eW'HX`VkbJ[rNlt7H9S*!eF[6bLf@.&C=gDE"f/pb#`:T5o4#%Tq'5)6\^2294Co6RPG^i(2qd7%OU".=+^=fN5kMu%`BC(&+_]Ono@DN7=OC7Sr)88>/^t]SMI!a"9FP?ED#mV6;OCA+p",`,L(*(r!kg+E#5,Q5L@lA^a>]UqY_>FrRbWGP5$I;+JmR[eD::Z82a3QBqVJ!3XOs;-;He8RW-S:^4/-8I>3j@nN"S5C30`Qe47Akc7I+/\aT59.sPAut:b(cXc3\3DH%Y]CWT]eoPjrOsud7Mf0_M2u)(f6H'[%?'0^HH<'0^"B!7Ak7#X^#s?"kk@4O#ZXb8IaOo+mrVVLu.^$2:*\!kJrlSGkU3l2/ic8hbX1KE?43A)2(4;O5SW:M&pii\9?aCme4$VIKrPLFTeS-rX$?i47H16%#:l^Ycfe_L[QQuCS_Ab.MFLU_(M*SHk6eEGm&J38)WRB;>@9U.I=$_#.s:N?uMV%AEs=Gg3XWj:7)H3QduTX\eV87KW59B&ZR4lgj$foMS%ESR(/J-m0B%=HSb>+S,NMfP(!kBm!n^-L/osKph$SpSWC[tS?_fG%_5e`\)M;ucVFD`O"H"Rm)_V1i!b.NT:!5*G:W)^K4f]&gQD2^9UreaqQ`iqJQ#.TL0"#_H@J;_QT9H"hJpG,=^iu9/5tC)OR'L*M'^`#Vl+_urs7\4kh!b)OY7(R>UphTC_-;?kH`mY?(Anun=C5AQ]W5rDILf+6Ur1CY*b]us(OWuq&df*Q@FkE9R!G>>M@Oo?rdd+t\$$Z]*GC/amcuR;p_P@6f*5.afhcWaJQW63@+Q\8'Pst)g&(6SWHoG>%Q-ViT`BJH:PQj#n&*AA:-cY07[U_>!)*@)!uhcCK)B!D_t4$h'HBrCE)./6D,I"rO;DLMBRtI+gL8q&C)AgD/^3)#l8i#LL&5(ZHc,?tJQCBO0,3hm(Ku0QI@q$]*0=U[r\,&SDhFG_gS*Pe?gtTib[/(%)a#sE\M"3n>G&cqUOHQssm&H.92.9Cn%J]/u_aB`rl-8,/t(*&CNZBI1OnuAjc"r2S-(7oX`*=ouRn+OQ,mg_VQi@kt:nA<;/!@:7:iBUBK(8%a^-)YVTZfqe?hWomAEf8k[#X-A%*nX53?r?Ti1.(Ye$4Bk$&,S&(mT'GJnri[nJDGhWU)E:?97qH=EOXqF`>E+R'6btpA23'B,dq_g((#2X5L$=V,/+\!lo'YnAhAPE9>/WaPV(AVJ`SlJfXS.J,=Y-HhIM1:Fq#84q26N%q4M'.kkehQ`t;p9t6p?^n4V$Yl8SN*,Ptur*M(mnTkYILD$iUfF?J[_[!q]%`#6*c#B@^L4X9o@EPd&aP.rU#9SMUZ2_8S]DO?oB0C(@DF)+!q_3H-(\5&e6GZFKe=UJ`gEdgitCP;g5[ccj=c%[g86M\c]!2KW59B&ZR3X=K')5WSqa6h23r\!HGU.DT*H&mgjUmmT/,F(h81'G:W)^N%t&*E46`bh28qiR%@h*&Q(qY,54Mq9j%h6>8gr8cZ`g=-UZjB6\`+V1ZVIO=*u"-DlAD1)t(W=ZJ(o$f*JcN9i#?p?0d42TCh^&.mAmJ3Uc`0lV>LFnm)6CI.>DjWCuqDYdeQ_IhSMgk4-%'@7f7eStEPN2/MmZfqb12_L\I'KpoEm(V;o^"5uQp8bo:^!n("Jgh!iVSnp@H?'GaIQW?3V/QQNmj>'e@7VS8T[;eWfrONYn"ck%m]A$f4!n,M;W[W*6(atLVg?l0Q$2gB`%*KaSdS1-;@hUgQ#Tp5:UQepWJ&!SjN`G#`BQYZ&cq1;F')VS%6bji%b)kU6(8U?4)KEp=E=ltQ8QJ1p$M70*9(:O+IZ,-$ie:Flbf:q#08gmhfD-FU%P#q=rSA'G@Mp5*N4Z(F8*TAftTh%a^1@IF9bKE\fXBWrX,:DFH%b2kaJt"7M]ir&VW;Sme4=JC>'/"EpsnST=GV)c.iQA^Fk/$1Og&2\-dDqe7F!"acSl7ne[7T[0q^(mY'SJ9ou]T&j@1;!#n@U'0.[c7>.ZGPnC#D<*6*9:oWDk`SG9Z:&I9fQ/&Lu_9h1Z`SHE`'mH\ZF&X6#kI?#f$'C"oIqEA6\)M;Eh.lHGmfVrRakc5&$n^mJgo\(jEOQi?8+cn,Nr/R@&:%sfB8.1GX$P+7Sr(g<):OcX*KdQ3I6$k8O\o$a@D\=6aP!FWDXj@g^EF[,FJ"iqP>Tf\_t]Be(q7&t[A=qaD\b5g]q+::oMUV:Q63pIVZAldBR[7"UR-9*-ddlacd)i`YqJ$o^k>FbgeF&1oB7jK.p<,:o8CDRGQntQK(.=G&dY9S6Ue72O$;#h9PRUOY,H]YSJ%W]bXU$:5jrpisC4FIR3o"K`Z5OO-mj6'7GUE";H.U63H_Y?ib_?\a7(hm>'*HrX-2)b9:Nd;A_?*%?-ji'1U7""/G&X#,;NL^mOr<@/,[F@I/RYpu8oFY+c(RC>NA91%,)NS%SthTDLF'pi[`iB(c%.?sMYSQr(:57M]in&Tdr%*tQshm\\b.l.DE.;WK3f6R(\^W-V8XTmB%ZKdmLr)QGgQXghT?J!C$r[('?5%sKPl(';=.S,OSTbZi_jHa&&M7&3EPf!2;Nksd6f3uPEM_MF.-KGLI/?+/id`\df[4m&.)uQJC-Y$u^q/UO$9\`SV;`7WBdG>)Z51eTg/ZsNHY;9g0'9)b\+FH(a,8BOKn%3lB)M$]?ZRP3kmd41sfFLCU>%,_UAgfe"RWG,6jrS>j_V]+dWstC^\]X,1o09f_Is70=fY=JXf^T0PT>haBNj#-B^6Q+`C?aI'rMHjK1Q5&hi?!G>6b0)^_]%#ntorKtOgrS/(->Z1Kg4Y.b#q9jZL1aBb??VT?J15&2@:JI9aB>;&R'>R0j=WY''2'f[@TuMQV,q)'kr#-1(bj!r!BW$.&G_"#6gLj$c7-F0\SEh8eBKp[;X$3_>?q`,;tHGuiB0db("SV]edCE5af@&fh5&R9Y-NtI>C$d"j`bRNGJ*rX,t*X2G@A(*/9LP)SQq8&_S=J<.q7VPnC#D<*6*9:oWDk`SKe]:<]W!pH5gm>B..3DT1Gsh``ce&G_"#6gLj$k&//oMS%Esg#)U)nt(UPG:W)^go\(jrS&^^'-a%[H"anA`8%I!H+,Os]HT3WQUDVgYQVh?%8%lPZ5JFZOapj++bZVO+I%>_MeY\-OR.X^"PJfJM1Ln_*__o:-!j*H?.glbN!MsT$kt'!YPRm_e4:3uq,]DRWfmEOkfZK//+fND1CCfI=4XJ$;Y7OY'%$#5qlqo_\$Bh\1@$t!SmD?;"K!(*=so6THt3^G&.H;/h%]i;#5rQ'ZYcdAO8B95`jX$YSi"bl$sOFJeX&m:H'HTfFWp$+@dXf0F\<@(=9-T&P$ftO;9im-\2cEh1"?)T9VqP87iKF1Br`#!m0j5^QARH&qPRE!r[e**QOFO79pE*7LV)*plrGhQ?,Rsc/Q*atGj,i;D$&$;BRq4@eIMsZ##"JPp;Gbi+`9l54\a'rTeC=taZcBNLmqhoT%K,eOL,`n=;(6ecgQb'lnL:)VW7dS8MC)nWe\Ae"455(d5j*101>IU]\,EJJJO%Y+eTPk1VuBjs!'$m$ii"Q*%_/Y2.hLa-9R)'5SMU'[!K,f)pm002pAB!oP0%&<`mt;+5Z-@@+&'(.8k]V94D>K.ST]KS'id'Sm\HfLcuY[coPQ;+1LA(]aD(2^+!V?AN8YYgQaUMf-V/)(Ja7!,UIApj/TI87l]eP"QOSSg%>T/5615f0Ir!0[e^PMlA.5ks<-=KYc5+/t,AL"97G%K/#7ifif4$?%!aljhVDEW@7?O[I5)0mQ4)*f10MOe:VWMpO$E54di/WF6Ci%=X&bm2N&OfU$=pTK^&jY(90(DXghST\*D.!F1:.HohKJ8ibl`kMD=fjE4=hE`SHE`c/Hf\^9"p4#a?Z6C<#%]>BgL,=!74BM-7E;!V'+u:(qNE]#"+Xu@VK5HB:qmIk()@@#.C4W&e9GS5,!2BSdeV;9FWO?JQL*;#j;`85qfn1S]+B+)al1@m&P5S![BjuIctqQ*N/"(ljDl9ag7[s;#$U5=NZ2OD0!BK]!3+/j2kZ5:'!%cAFGehhB?tk):A/Wg**U(tIQ4B3qJ.dr/$FYNCdg1[H!'7p0/%Y06AK"aB=0._E\=6CF?)k%6ZHELT%00$I+Y_B;gVj^ZoDFW'esd[ahVZ8b*4>d&M;Ru?l[qmdVZG/JM0WbDm\+3m!Ji/\f81uKfBMC(AW'3tIZXNTYE*YPSg'&!#kegp_r->tbR3OXJf,a?75g#C&>AATAVB=T'c-4t?E"=PgRV33#"K&PXTZG$K.uYucesl_^VYfQLOlSL@&C,b]-tB/3.(!7UnS&]9c5.$(sX3"""YbV&iWWtdjam7h_2Vt[SOD2kqGq:gI$SK[kr%='++8C25$quY\$j2roAH>^>'&YWD>,.[n39*6L("]Ga#E8pBU@-]R-V?4=AKHH)d"%*M`6g\1+AM;EiR&V5:71bAnWBlpKbtPWdjuB_,f>&2t7tIEcTLsZpKC(qI:,e5%/]D;5_S0'D!Tr54?ub_Gcrb>o8lmQuNgKu,e/^[\2#KNVqC*8]%qp;-M@WC355jL:e*p)Jf5UK82)(:<=DA[dO_OUL:qK;!P+f2`9jg^Z/3Cs8"7-FG,KgY4CBT)I:inqm-=;!4m.TtZ"5T8`2;Mp,=B\T*.Vquht'*tGq&V<]hL$^?M;;TmqC_)Ve8f\b>Q!fM0f_hs6dhoC:*KW)GELKH]bY];:N[3mDR]M2q"mjTGc44^B..3DT1Fh07a(D'6CYBU"01"\Qa'_ibl`kMRsUI/+-HnXghU*"n81r!9S1<6]8QVDn'#bqeifX8MSSg2-kdsZ3N5>%jOOP#?p`*BB00fSPAEN_hoaui8]k_JoIA'es3Cgm@-&Mm$S#bK`"*%Qh1u-4l*-LW$)\!2KU?H&"W!);foD1LmH?br+,,Cigc.=5;4Ba5sFC29u)RX:<=[Gib8Yi&_fpg"K]<8E/pM[JFYSt.QHdR:TamNel;^)4M"NBkZNG0FVJr+6.<.R+D"82@fTpdp3B5hb"8NNIoJnB&]m_t9p,_!bugokRXFekK^@SU/H>4D8T3KsESZ@E2._JaO)Cq4Z>SaR)7!;34!Gk\tkH;E:O+KjeT02#(\Ff._+/=I>I3*gSB1"tAbe"+,4mNRa)E$j$2Ul5-WBr&n,YVkjm3DH[9X:*'ES!'bDT!7Rip"a"=iEp4bb3qQ@t?T.YFN:^\)Qd!GaBL#I6UA(@*T(Z/*baCRSG5)[a&m?@g??f"fZt&&L7]VaKFE!h_^NoSLI>A,90G)*\V6cgmeZ^oX2Qm?['<[7<@FO:HjN%]=24lqDE6aO*s:L8e8DCZM-Z)(h;nQTjQ+](!_K972C]DMa<<2F)tk.Cq._ZYR[=2rhgZ%+`:_$'p;?_a,sZ&&X1X9CF(PH+6U%1+LO]>0&^2Zu)RaS="AqMfg#!-?a9-b@gOgF<_j1bt^jPs:rKibQ&#d3Bh7=)38ln:BlK,7"hej8mFpsm'Ei6II5D(?jr59-_oRtXJY#)urAt6I^!h+$K'gq.?;P!U(DJk0oN_>na8^g_$0,F0r4,)CK@W0P.9b@W\=Z2ocj4t`-Xr#d?a9seDudTh1C?%D?OKKI%j-YTPB\JK$<3[3HZeB:pmX4D"a]fejspbVK?_mD%E=>F"lITWKPd40_stXZ_hd9D"9"ger9O`_(%pt,fs#qM$D9R2#ML;IH]a!i^4T8/$]PTQi+[+ah7Ihq;:/Vc55]J([Wis[X]YtNNuS.g%7BhTp--P7@uS)Ogo\(jEOXqF`SHE`'mD1J(h;q"EOXqF`SHE`'mD1rjnQ)GG?ZoTh#hu@;oek;\u1;^(#99e'Ap"-%99m@6dCAT+MV0UQa2t-OBe78LU)''5mmL_E7PHM[!iJ2r6Pm4UIU;o?aam-"nRYfmqDupq8,.rFTn_J<8P+j<3gCH/I/kHW4f#Cmbb'u_V$_QaeJ6TT&i_"5?"_kp&Z-am4J"(aoTl>+C)I%#3H[:^sCcd_k2_X^_\YB1OLW)2[AD/4(N7q4kM6kJSiKtlcu,Qp)Wu9D:96C('2t$57[Yse##fn9R.%n5RFu7OicS>pVZ13L&m9?3Y9^5"Vg#n"hLgm-N7TR-6$3],Df_6LoTiJ6D:(cu=DA65d4*4:HZAZLC))Vp$;SajqG@o0UG'hk#N)X5So[c2p9HTbml^U"]2L.uID?(e*ULOF$4L>0Q%?3`c7"5%o"6G>q9V06g:+Cpd;Hr%:jA(Zl"m&TF'-?k3*FmY6?N1%,!.p(<;[<&G.l3PTD2Xe5.Y`N$-J`B^'rI9A&,)Zn2?][35@8+F>)?#%V?'&[aqV(QF`b^BNie&,`"gTNg8.cZH#0$G1!;W+"[<3t2gK+3E+9MSC%9?lK7'l@h9lrDX65!Zgpm7L0Wm">kGRLBjK)'s5C?"'RT$OS[.UgV6.W0'm?T9+:m'9MK]Xi2=nYl9V(3VPWMB..3DT1Fh]+nh71%t=N>B..3DT1Fh]+oN?mT,9$`n9&+DUj*C>./Mb,U*Gk^.'dX9q_@J61WMk\@iLH5T@e97Sp`,+F._(BpWHjsJ=>9WU3hM.VL`1981Iql2*_JQ]RV([))=Q).D[FKdZ[=aUUOR$B!D.#pfe_e`+^Z?MM^':8C<,Xpe_.Ko]hT-H4^Gn88DZDSK2"W2>kZ_N]qbfM+k0g#iUl'pU'6u/ZOo"RVlg7C)k#S2#l`s)0LP4=C9%NWEB&b.CF^JDME$JZ!O@2qWG53Bdm_))KeNZ"Tkh#JOU#a6,cb-0sr%cZP5X'#?hJgE5@k;5l2\;+WXIl*F%;>edAlQW21ErV*NL8T`&0j2ZYKH/LbPcm(lIQ4'J9hk^D1MD?6k,g'_`)(%blY./jF44`s"_WqdU,Qe>c*0ui&_I1[!6/+-HnXghST\)M;Eh23r,(jfcJXghST\)M;Eh28fZG:UZMA*iT&\*CY2rNLMiR&0qU8K1QI'9[>C&oejOj)J-E$6@6E/)a)HUQA/0Jdn-7P&Z;U&jS+HU,F9l(3Cm>kXZPP8njA$3hctW@N$MUQ:lUO11`a$l+iKn*0QjJ7,nV"isCO^@ZX2NTd+7XN[qdaHAZ:USu.j(7I.8js!h^j^5Up=NVI7*'=;r9aQ],(oR<0Pd[pLM0@N#6MG]U,pad<10GgmId5VcpZNo5?h]lPrH#W=e9kg5Gi+eDgp:=]M*'/kp+CHWVj[#?N'ek"!3JpU?c8]d,SR?)J.t5)V>jtjB..3DY:HJ>J9hgfU)R;VPQVtOs(Ff^bKCSoIr[,_30H_3*$l4gL]%NcqgBJ#]/7,g0ofiI\<#O;$@@q!mB$-ZqS;Vfa9^!m]n^+(p:C:MAe*'ic6"X,)-SI9*NKGJaH"TD:scoPGu.3qWT=XAH1``DqH$*=)nh;*eL>m60.-^mUBoo32Qb!<>fjWLt[_/$1:S_1CT;GJo/%L>631YJRqF23%ERHdR-6cS[^3!ZrO>)"(HupO#s(Dg-LPI5)>X.QQ?<6)\L9^&n[l7VZD:?%Kp\V9r?QaL7+;4jQb,uIF0p$.]jaML$:HHT9J$\+Ds4";5aSE$K;#ndL'g\%ds'3A(o/tl@V-0F6Nt@56StZ,ge_7e$C7fF@k#d.?,j.$5_gB6h]52g1HeB:k`WqBA;JnS7+4fb-"7%OgQ7`:0eAu38CTE2[_1O#)FW%Y]F0/V!6r/nb:Z_EQmmYt8.a1*$rK@qg:M3#!a:B4H_kT$&2daZV$l^"3G*qLQK"W^A#V_GT=2&)9+Wn9"qac=a&Kl1-&=TjLrUeqXYA*f`d7I\0,_>C/2IPD>6=!LEUT`WAjBsAM1%Bra[!IjDQ-,F4/7a-'CGUFNGL,Kt(uMV1g&W8?RaMn[JV5*73mL6AJ/oT[@/B[H]_l&+l$!L*16p@%&"0FI0*76*io)Tke&6hl9=]*Ell;!nu&c*(PcMW`2`>pZWhg\HH"4j^sLNA/^KYq6&5mph$db"s4S9$h#45[Pj)6d$,!lr6X41p`TVcK%XS:5IR>6H!0UR4H;$qmcMu[uo@)bGX2,?Z`6BrD\$jl]&`4p=%4r\Qa'_ibl`kMRsUIX4Qeqgo\(jEOXqF`SIQ_\6BClgo\(jEOXqF`SIO!mT.$i1>K"A>B..3DT1G3n$lR2.bq0&h5utW"-o#4bG33Qf.W`s:MVOakqd%?L`LI5J,9h['mCKc/A-&]O"ZO,j;D0VL`;.d&I<.d[bP0YA+6UW;p4Gd31Gqfm@/^6%Kqc3(pK2IXOUCYO,@F7gCL,J_QIAiT?+ME:%BD>eY;$1c5E@W!T?`#C:$t^DWIYmmCT;X1k8GdUNrhLsZP!9pbMFlWI2S\.OB!G)\$"%bY]i8lf1u>abuT0#,BVU%:_L3k7n\KLT-2;/\b_'O[:\;oh-s]V;fF/ZB)FIf9'Vt6mAY3&*&F?oU1j`eU!l]=]oWtBN,!n[_rRXkR,S=Cj;Uu+CTN2YZ/,2Gld?h]*<@&l-qj]-[IgPpM8F"blD98&RD`"P()N4(&7b&&ZDe2!`PC-C%ri[H6I?tC)AR%!lke$AXLimg]fWY2^)+\m6R[!ttK"H7O*:\oA;j3<8]s;,`%cg.J$qY3:1.#X_r/BQC$dWpX,ERl;t:mE-qE0@eY1L;nspi:Zr_k@o^]*Irp9(8MR7W4R0cDVr1n>UIiJp1Pgq@bL)J\^B<@U$relL[[S(B8YjfN<;j8*>sEk*/B=@_,n=5!=DmPSl(4=&lH6I-Rh3\J&W4ckbKc%f7>8HR8WDN],[p\6Es^ibl`kMRukA\6Es^ibl`kMRumGEOQhp\6Es^ibm9UG:W)^go^F(]+oN?mT/,F\6JVHGH8Q1]@@jEX!LCT6KYps9CTI?!IDI.>rpD@"a@m0nFXg9GlI'?lhOI&#nK,dK;5#hLjms@p#hlc98E?7$DF\C2EZ9U&0=&-5VfLZP6WPHEOd&%&IBF=#c87>/Ln[7T6J/=L!*ldmP?PBeL%N[S`$G%d/@X4l@[rJW&QIpHhn!h4a77YSihWA0:kKe@_eK$&[/l+[LF*,QCiopcQDiLpe_8iSidU.mJIh_;DH8lX<2pCL1a:DiPg_qT]ol%1%KAkLV,lRpb]?5HgVh)4*?PAqaC7PR`C'DZ)+Z'.?SF97_Wirr:FDW";FO7ELd*3I%@EDI$,J2^GS&uOcNJ>2$ifY)\:m+eu\ng8edF1rOnD9[:_c%\s04*I/F:=N=[@O5M/F2$pt4H)M0kC1OLIriq5[>2[!X1N.m_cq`qbIm5!Mc?;uGmdMXQ5hp;Lp*pei9tmjT)h`Q\NGq?4jqs2!1l.Q.0Z%[7)_0q3c[qWd5.FPG#$(De@/5[X0QdbtQA]W0%I7k=g+?\l&qm@i1jE$!WbI2LpZc2*aH<,71=.bGmN[(bO\'nrV?LB*pb>&.VpN[YQ`lp3kq`_*Mm;=#^k)IRl`WO(WL>ku/s<`5ke0UL4:b)EAd8;$/TJ*/TgRWaun=4Gk@JSPP#Ondu9F)*N9S'Sn;I^(RmC."b;[)$82f/&XJbkj1jUs$VTP-2XO"K_0&AqrN'!,qmVO=ghp&r:TtB4Eus.1;P92<3Rr/ZH=Pa4\6Es^ibl`kMS%F)EOXqF`SHE`'mH^mj)-a,EOXqF`SHE`'mD1r+Zi?o]i0%Dp[jS)IO^'jS9:3`1>4Ngr36kH@n%aYW+qe3cJ_Ol_84F;--+^Ce1_?34WNgB\JESqM\A>@HdEA`3;>6hVaDZdE9]4-CVgCAAcM[q5_)I..^2g!7:DiN'Wb)=6%+s*Wti&U=$A!DjN*!]>&=f.\Xl,5efb1XHe`l(*>!@6XV^f->P:U_@8b#eF`ck9Ap^://`%LtaEOF4lE)c'.iY\9D@D4H[X8dl%\NY"XF;p3Em;1.:,18/SLIO-C/?k*?[e#1dYj!\0Zd6;8R5cJAC22!ZDh=o^=-@4n]aUG)(FGcB<0=*L"!jKV["l!HbR(oqAQ[Gu67U2_3bFXmV.&K._n.tOuP;k_Un$DEctd,*U\M51:O=&/kOBRr)]2Gm,&=N#ee7FmcAJ/u7OK0B,+__6@A5F-2?os!=U&1#/kDZe'k4/W7-U2gK/4$:VZAlCGFGklaPgCSH^L0>7<=%>m0u0k3EIE;=Ytm+uph:7]'$kK>NrUrcQNFB"&U*\\fg<7V8HTP,4e/RAoCM\a*ad:4;CdNnTslr]W5/K_S&k-,p4o6=4=qR-bm&=J7SWZj`E+98khI8F)4LWNI&JGp9H+^\0c5ehQ;X!YE5mc((dTK4)i?B..;M7XLH/+-HnXghU.*I"R#Nk9c+`8\nGI98PRc41p$HSdE%]6>B"XCe]!UeGr_Wr[>M@/=qo-a&&EIP4UI^`^iG)pe<*[-A\e,-.,/Nc2_r9+1>7brjnCs((Yde3ab[:8mf^TY,rc'6?ELdjJ_pI>c`OerC\,]\Y"0PW__l.Q^_VnE0^l3D$_2N/6]IfDUj*-.[U4Noal.bo,qoi&CEk,LkHpu8a/0th0qfW^,0TS84]'sGUC(JnH9mtl%DK`MP20e;eS?X)4m3Q&ChfbN3n-f'"%d[n_tFZqlPU%q?bfOhk^R/AsFFN:A:\>.P?;hl+-3Pn6lreM@-&Z]a8T3\-B5YL-9m4"hN$HmS/-Bp;$B9;k`=L%6/h)&tD-k!L5SoiTAZ`E:$7$<*VHph4D=;T4;Kan(H^*'R5$Ln:ea;#mS0mae4MuB@(jc*'/9a@l<_;c?J1+f/7J8h.r9Zqs:&V9kC"#+0Z0utm%$6_24#7p2(qMOcQ78O%U3XrblB_5gK-20W/kJcuWdmr43R**jO:^#5DWSpQ.D1AimpT?J)N0!Z\s/$HfQ$%;0QPJA'"C6R#M<;9O]3:P/8O`2E?@Om?e#K4@Fp"ha?sl!nCBDZbJ3!:=VTck21gO\d2B#t)Rk^pIAf>/1kdJHnooTV&ER:EW"OqW(3riW;4VMYfK(;jpTP2>YGi1E/YN[%^\:#*)806FWFZum0]Emekg>VnA(-$ZA&PcVMJE%A'@JuL/d&gOFj&DMP_[nP&81%:)jN02KFeh:M,ZnBa$Dul#J8Rm9^qkHGm<_r?oZQ2lViQK*KtZ'eg]SEH>_'pp-:9WK^t*@65SosDVgp_B..3DT1Fh]+oOj/DRA;>B..3DT1Fh]@D7H,6'g]XghST\)M;Eh28gE(@G5YXghST\)M;Eh*k'7)q-[2W152f5di.)]R$LrWH`m.k.qD+/CoPp7QL51m;Z([O9A!_\Q]_SQsMpu-H/k5X*=]<6H'BZ;3Y4pZ7e>,PYm4cObss!D,/Ao(Ge6fG`+8D%/?.)qM3HF6CgKrFL+gmJS*+X7*pVD4BJYO[DCs*VsjF=,lq*FtJSbpl356:U5Fjf&E#K7(.+M6W]1TLLRaTt^#MaU8F"?g`$p+=qeo1q&]AcY:E3kX/FDHTPt\G=3H)PH'GHK`^*TMtk2>4.?'8+nNR$k9:O)q^GdF=OQg2H[_:$nPQS)48Da.,1+"QIu\'QjT/<"+';iSOt)\m<\_odO(p)?O8Gk"aUOP'6+_X.(X<(2@RAG+iDt(O.%V@PH1;[^d;*$+1i/npi0[=p@hob3/V20Yp;>0C8)]ee-XcV%Sab#s++p9lJSnWUO>T"Hi\:.:8SC%)_Q9/4JK6]MpT'UsQ)b^0m'o0^F>"oATZ]#t\@;tsTI"%CXLV/Q[gIRKGlbqGHk#t5QG\PXB>CcOTG?"TDInJddj:)t"jUJi!>STUW,/l80baZA9YdWK2k^*.3QPISC(_e$6)^i"J30l1pgN-'GjP;6;@ORR?9oVHbZP:[Uf:d^7M%+td#'r>]]MFPE(%`?13:Z6-c7G,@n+#p,K\0['9&'pN5#/bH=`m%+X[VRsO4adP$gpIf=mG8?F54>Oi$nC&7\6Es^ibl`kMS%F)EOXqF`SHE`'mH^mj)-a,EOXqF`SHE`'mD1rr]\]HA$\D5TO8Z`i\jo9$F19IYHJ\@`?Y7!l>%PA=F)KYJ'Uqq>\4Opi@rb=QUCH5j%sm+$r6bm".J[*,TI2.a60`:kk7^R9lTc+1$mOK*Wl>!TILDRO:F+JVVVO5k$S$L5M^n`qBaDS4Zi'O$/7Q1.9Z)BPP'_m;5QoZ2Io%D;f.^PW!cm@1tLE8=1<3h67'c=4Y5OY6n>M6ZE$J.hjX@$_N6n*#[`J',%SR:=M/^j,`0%[fa?K]Ga8#rX;!jlr+`c@4LV*=:V2TJRaBV@]SGYH!l$F,a_[2,L$.)1!Ecs!l`@7K=Kl\#lX?rN(e3kl(qSr>7Z7aqVg(\95s]u$ru[DBNAA1oH>29G8&8&S-Rf5JKEY9R-d^mk74#ql\/,iIK["J5(T+85)+@?j?rq%ARJ%-O1k/]Z)"u)5Q:_e4RqJ;*dHTD#mn_ZKIg73+bYP1"3?JS%o:XAZ@f$`_i<4-Ls[FYoGRbi02;(lS#@&7(,$GGGm7q[Veqi6Tls5V_j`RhgS*dR<"Z)bJZ*dm`[d;aDJ4>D]$MPl&,XXM%/'FRr[&kf\R'arS6'J$ZZ(Z.cb?LAP*/Z(E_"Uu,u?/eh590E77#=N\+-#ogJ=5mKD)0'cs:W2Z9MaaZ^MPuXNc$CrgW/.f8QtWQ"7SV+!2c&otm@XFV)=d&L0q=,i4+"E72Y3ZX^F5OZ'He_PH,-.#[Y,qnI&X0$-uN*ns4MrLhBDnQ'N_$\B?99(q1rU54OV-6GICDh+@Ios?Aj&,@AG@lYD?M];!nu'fkmlp8OnR"'n(Jk(tkMdsuA+F+m8C!Es:5W\UIn;d"iig:W1M=Zgs*e&Il^`N`2/Cd"%mP;7Y^L6pANieiQ4ZcU0,0[*'RdNdW)b)sd!nZh=KtbOpqa^6LUOLX-"hh>[W66Hg<-ggCFe";A)l:c[?YMXf2f&V`fFo9Y<&hg>[+bIEc'plb-fdP\@-Epjk@kbQ#!Gjj4`e!Nbb];C9+0=58K%KD\Hs7#Q%/gfr,4;:gLSU?1Je7Qhj)n+7nP(Ij>S%CY,['ldr6S4*PKQ#7g):CY,[#q[`$/Q#]X(iqGC3@W3G$0>IFZGlAN*Lu87#Ab!s1Seo.dmcWT+(S;B=jZ2W:J'L3kps4qMK6$Foo9S%aOZX7A?>uXW!E$mQg>;p1g;*;]IptSlksE>GCH9;:4"-7o[Wd7Jk;422YfI)]ahS];9mV+8Y;75sFHbS.X;E.ScKN&9I$Z'X.H!GG87oMSW=f7#dR'p4uiMj:gON\(rC^s5ac#eRRJM0A^lAf_X@[MdiYiKL)g*&6\OYk]\V-;ge678&WH_Sfute_dh]6?[l92GiaDE`q/(#-^k2n\Zk%Vf*pVM:_ap.DAIWtr79Wk'XukDS+u*KIkTI=mG5H^TL!H"18_j0MgL>'4>pS+Zo"p;<$S'KM(&ZMtg?6D=7E;M5%\X_S[@$^N/J'GA*#EC6kJW)WI:>uJ;9W7U;68WY:=PGJ1-lJ/^?e.j@H/+XJ(7RSHdu`5I,du,Apqno2*8`d:H]q;NL"68C8+SKM/p-Tm^`?`Z#[lNZ"h;L':!s;\GNEj`2_?\`Nhq)MU,>*&PJF>-G$gMMHTD_.:2tfQUJMa&X@A^Q7Q>crq5F2`JZtYDt32Sh\8;DnI>$@J))a6Hi7f$o\^NT08\h3f*'qMi,U''4M5(p*Fer^pM(W^Y>7;3J.#PPd6FL#-gimG^2`*YjWl;SH3h_kOBhC7n]E:H\/1&_)]4VpN%u%-.hKME/JZ5#nc'aiui5P.T1Z&l7IIOE7B]d?Ef'JeZ1HuKoIdjLbs+>O6]%&Ih1_D)Hl)e$[_-*7n5oX^#)@[W66Hg1kG/>Ih1_D<9Ko[FGEB9\3%fi!<Zpi^>IdOgnb=n"B)9]hUL7LX.^"fi'<(>+\?V\4?!TN)^)NKVBV*YHS^/JLhnIj,X]RQlCLF$CF'h+%TTj$.mj.CO+s00Ydg9?`ke;p:[,OdPt7qdTQkO$u($&SS5Gr13IL[4:s(lC]&OAst3:[iAm=t(C((<)\.7U4"T'k(2WKDD#s>Nca&6C0*T):>DUM>i0;XWdsaa2Rl.!>-C/+gToYj^T7K5kbc9MDF0bImZm`?q)1^i`9%%M,T%L0r.c:51;++Krc[BW+AAjHq\?Y^I7]!3DhC&LeH*S3LAn5O64SRBshe+3kVAO7!T".#S^$:iBl5:ofFAT?J)BQ[C"6Rm/uHk!t"jY92#:=#@h#BEUc?,TMLQZ!t[M0l-c)0k^K`@eT/bio=/L`!W``3c4!s+6Hrng%'um'bLTe0hP*&l)S1&j']=3Vk)qTlTCKHBNX-SWCb86!M9,EOpnU`bFWqM8l.Z(*m'>825LfI(aMtr9sM@\l&&@:N>HouJIfWoe9#_SY7jPcjWXZB,i-:BTTLtXLgOpQf0QD]Ih1_D<9Ko[FHP3*+)uV>Ih1_D<9Ko[?YO.;/gC6g<-ggCFe";Y,s%]jnS-#g+$B4^%e*_>B(o9XS.Ks/LOYElBSH,L31?fD20LRp5X#W>Lf_k_.K?->;<_L"c1.#?7q$<,Tf^_&'\h+"N^kZ*Yi2MA^UM#lEDE+C[bqt&cK,=BO(A/n1^AN)Og8QBiK-t87:&&^na0E@]sI""VD3g&&W>i)?Ic45EdJOi0VS6)#q^U@^#"K.l=#q+AL?4hZ'g2@>52*3C.,O3'LUe%F(32#C26&C?7Y,MTUN"QNaWsbDF?#pNCVp51/>BX<;2GNJqP#gH#(dq8Q5b%+>f_0o`+W-mGbd$4c=)1Tsi?M>GT),-H91J!d0;&Bu=N#(ikRe4QH4l&&'0YDJAMr-F_H]`2\7GqflK0O;&[JdAB%&N'oidEDuEL\!UP/"]bS6G6P6I'C:*oEmE"9od@RdAU$`5`cZXopC%BK>o95,:WuUIJ$*U_*$UM1F1;%_*:no)&*_C/#:"(KIH.THi?U.WXhgA__e.$BWi5of")Ss`F'oDW&)mkIj6.&r)kCKQ[qLa[`rPh+9+Qt.!F/B>BYFs;o:nt.s-5]-JQk@SH78-6V!AcWT-BhG308ZW6N_/C&7P,iEj:r,2#uX7)qbFT#96s+@]+,@bSjk)jQe$;aD8,;BrZOeXU:pm[I9ud:hA.QdXR3YXb9Q!WBljAp+WpT!1WK)6K'9at+`*o]D&>Q5Gac&jT$EgL9>Ih1_D<9Ko[?YMXf2f&V>[+bIEc'?ELhj'5inDP_Q"qo%Ih1_D<9Ko[?YMXf2h9n\@.hWY,tU0eLt;+Kr@LQd;s]-aRpR6krg6]]uNREn*#66q;)F>KB]Q4Q\NFg'D(h&=*lu"L0j"-$s,niHr/l[LIA<>X%U1qn0FAt&_R:J`EjF9l1W>'o^j+7g$B<5krg?tH<>>5sdrt-r59o')j_8Oti9/UnW*+G@[c\t:,`IqYp[!r\*\i4'OX$(%p$nYmt&XQ*a(f]7!g28QE&CT@d$g<+CTa0E._Ec#rAgh="1[FKb5N(jf6ClgA2h+Jr@MN*1I'absm_/%F+Hg38Mq54LZn:`&f',-9s9g8!Xs-'"p?mh)g@nN=((aaC@(iB5/dFO>K@B%9d6T#?ONSKkYMDq?q9)3A0B%:@q@/`j)GemW>mCbLqM\aSSM\jYP*DVtPWhgcQe32W?g2S+q98..3f2c73CFe";?QNHV9bQ&YY,tr53KE,n!NrP0>C@*dX^#(YH#RUX8R,K1[W66H30#cu\@.j-[V?ns9$UXpjd><$egY4,X?Zf+V3LE`m9fgpNMI:(7_nNsnqh*M@>hYC[$@cbp+>UK?iKikq"a6V^Cc`?7\D81SM9G.E?el)&SnF^,qI95)2pS";OfksFAb)HWaD85CkrB\hMR2b^E.IY<(!0>;&:KAEO$mf^"),lajp_m[)sR@pPSWZQAP3Gq?;m?I;2#@HUGfMAOnkb?5AG_rE/\N8n,Ae\`5ZpQO;>FY-#DTf2f&VDG4;>9g,Y]>[+bIEZE,f4Kbek>CA6/X^#)dR(0SnH['p'>OC7S;.P"`MuV;uWrlgZHi#iVhNNc_5bk`J`&+/](DXYb$VaO,=m.=uiI.1!s$u51/8dM1J\Q>0YF!oX?#q5T&^gMj1-.NF2mJgfD;&dga.`bkC)!85+C%a(eA!]c_PE`%`c/Wub80UCiAtDoe:TCt<*tk8Q:`FO=pPE?o_=8%R_?cBegg>6-@X[[/fCFe";NoN)4_mPbFX"V>tQ#!E>'\?AaLMNqfS)`5F[?]c3cGX[=Q)^s8q8.3):Q)!M[VT,"HFrm/lhbbsA$1,WK6'9t9*qXZ&_6Fsi$m*9@5O34-D(iV@DB'bocc-fj7gOIs7h@ol]&Bl5MuC:GjG%S`P::-]D2-dYDN64-e<239K`*@rt4.[n[*OO`Xg$U1S,9kIeO.G/s\m>k!TdC7=E5f_pH2MAlU[_P-E5jU:^cLS7jc0U@%HC.(3tr.lM>'-oPp,/2lkJ,<##H0=L=4/G:.;/Y7=OLS>j`M4#I",OYH[2oU"?lQPfZ'9A"5T)#Yddjr0K;]fga2J/27kJq3l8DN+$#j^%2>R;l_6"GugONFV:]dd2o.3UA06g9A7"5HSSVq@G87IXL]*-nkl83G6-KRK@pP\qY(`?lXBKn:h>7HlXA4D!2&\:k>?Pd:/O("!AGU-C+8EombdS>JDmZ6dl7PQ_b0+jK*GPOc5C"C&-C=:en$/(Uh++p^_3#L6("$/>HRLm7nEhQTkDilnk-,Ll%EKOjF;[@"0BQ7SCP)F7D/QPIbb*9TNif2f&V>[+bI9#n?)CFe";Y,r\aELcRWg<-ggCFe";l+"0BD<9Ko[?]c3N\__]>>8.&os[PFO0RG6i3d(sg?Qbq4ebp>&Zqb_d4hr.Tgu>>XV?*cgZJK]=]fP6d)-BP:##E!_d*FCW3esf4t&%R^EDBYr@amBm1UGID%RjAgFee0m1Yu`kJXBkh;Z*_)aqBr'NSEI2?H1V:@neNrqjDYX:Mq'*tYh`:6^[MU7F8Pl_ZQ!h0GWLfuq"Hr/Jb8dd:2BH:M+SgX@Htrfa6J4j8^Xk'ej"5ujRhBLTO3'!>fM`DHE.orEcE8j)bQ.QP=Dn%J=Ii)[0j(6r@$5^&\8#XqS7`?\6M*,Gn(pmgl2b$!-KJgT,E.9C9GS?R?Dg3%/7+kT=Ad"4kr+N2n=PF-aa#+.4rEe$l2MRKgrJi)RUT-2D;"1pucdj8hlEEt;?>V'599:Tf%K!MEIKR\C[#"_C\,).CJrc(Q&cpW0&A,/otW_Y0rDTdT[]@1-o\c2#7F6NK<.eQ-ca1"RXd='GDh?P$*4Op1eQBMhd"^b&c9ME#s_?Z`qMJ7KcJS\f[2`LhT1)F6hds$jtI*9TtJCFe";Y,tr5NAoKp>Ih1_D<9KoE?*":)qS,nX^#)@[Mj(g\[HNqjk@kbQ/aia1H)D<-EF92c$;f!fXjRWhnC%.>Hrfl'u'L@S&DD]+,WrV-Z6KVB!M3=je?#%Msl.6L:I8tHc:6:ec"BS7',(t/%-K,`9sdqhI8kEpCE.*hYO"Gf.pgkk3ZWoqC]&?GXM*l-cFi@`0MgmPSI%IL'('"1>#(]VFiQnIfAu#6s(mq#9UH_giiR3U0,PFK'g;oI9=/YVuIG)h1)VQj3>>q]C*7/4SHH+ik(8"8,V;e-cA8#'[1'bRM?F#1P.ZC[A$d6CnY683]KqP#PRQsX-PCO]j6C^VWXnVQEoMVPtT&eSQc6/AN&:+`t+#DS(EXMSD!hD?+ip.k8dbc#fOfqc^'JU[TbH0]8dpDqfZlk[$8fnd3Zi9X0X/lU(LACM8=qfp)XrL:6Hdc0AChIi&Y%6jls;JCK:^%A]r(N!frHJj['b+`&LsnN1m?X>;`[8cZXlr\U[+bIEc'pll3hQJjk@kbQ"qnjE?&U2\@.j-[L0#t#oSlr.IV&fR+eS#S4gMK=M/%E\F$`.M*M%%'esY+/?rmY-_aKjL`%ui'kGB7UfLGe0\YgNmt_.:]>U`J26lgV9,u,67+<%bs*WiAd0R'fh59RKiJ-B%GAfju:7`+(o7LMsTfu>SKu.T*Al'(84T:_Xop/h#OG"6N2m*fYHhp7l^3f;`++ksdpcr-OgpU'&W=WME">[?nn9eU;&V1;IO:EasVpLANZI:1iK!LJqL\C0LB28+-RaZ$$"PTm=k^Lp%E2TqoWg)rboibCd)/P,FAgG`(`E]mFoM[-+io5[@iq04!5n>"uH9_o27tPoXX\]Z6/ac's,*VOH*J_]1Qp5BJqUJ4BDm9f?gF:FVPnAdd3kNoN*__6oPD/([h)X\s.Ujk@kbQ"qnjE?&Ur\@-Epjk@kb<@Y/R>[+bIEc'ntNoQ'+f2e*cCS[7dScO;If*MIP&.R/*6FLhJ.f0ojsgJlZ*Bc'7)/tE_nDR5``d=(qSLr-H*j%;LOp";Qr93K(G6k/PCg_QB/F9*=p%UK0nN!sd\DK0-Y0(9(7IqiZ3B9%_ccT=(f(4;jHVi&#pU(QJ)kom#]$qGY*%^3k/@-@:qX[$*a)3M`0Vc;jn*6$pU*(AA3W]^cIEHiYY,GLhVcrN\"`$6kinC]S5d%elc"$]_0iiq84E_[b%85h)3#pPS9,\X/#T$R*N(INdN>WdL.OO$1u.X:QNn*:`t3A4WA3KE-)'s=ZD>Ih1_D3]uo/([h)X^#'jNoN+Z_R5YE/([h)X\s.Ujk@kbQ"qnjE?&Ur\@.j-[bA!'[HKWb:L)ekb9r7:L=MLZ(ZduEYVM:j.@YL`e.\plHLRUu`5bM/M>:otMpHS0`NGt)d?fjg`uD4?Ya,lnD-A6Wrm`OY\_k(DIf7EYin<5&/tW(0T0si0'VfBCU>Ye`mGaoS=89"F&B'61?8RG#%F]K+:_HtkXVJI.*Z"Xb,LKd+6m6<&W-M:238#!1q=,,m*qkHX>LnY-$Q"U.CKHDlHa\gGmR(Gsa"!rKfV0K5;"W#2+DbM_4]h,&[ncQ#!m_O/Gi##:)l:<44XBp]HFZhE!Z2(H"G@;sM)9$d;(hR.I0t6$*6N&`T"lqN/062/WKSpMrY]!LCM7X+`F@"WOWg^N4%PF*PS%S2Y)m]ZG?gfC:A'ADD:RU,SD\C5LM@s2kQ2eqHZFh\gY^j`Ejf8(UJ_B@=j[Y8_J6-[I`Gr.7gh>d5P&cecMm)pa)SQ_>OGai#b)@]TZP_^%/$S)AJ(/I@d1a4Js3"Z\OCKXa8+0Bg<-hR0WqN_>E+>P/([h)X^#'jNoN+Z_R5YEX'o7;\[ECaf2f&V>[+bIEZE,>`eA3/nS,&.RMYAYAXF5*Tmcel/A?:=9Vn+1Tt[!m&Qd)qdb,mIMS8".^NrXk>/*sOh=R,fZ>oP>XC&;-XB>=UYT)i+F2I#9r5B)QC1?ptNT0`,^#I\\4lY[V(iFI:hC"=*ML#&R:C'otl3Y2j)$!_Q/^k?Y;(\X[Q3G<#_CHSfnWQ\gggEgS'bd6@bR.C+d7TJUJqiAf0lpTiB\(,DuKEQtn5(ipYi\WZ@]lg[X0#P;`+P)k[+45hjNC%Jf-NELKC#o,[Q%i>EZc&AjqIfP&R!T>`j%c0;:UAmbS39gq?c]a%j)TPq9f3JY5Iq4:PbW-r<$KS'4'M!qL9C)NCC0N&sYeM-t\Ks;Vr'6KlZ=S#R]D)VCD3[(A:A7qk+c3$fZ9/.]0mn@mT3.R:H+^20W<,?2gh-:+5`S'%>^38^M['Y?8JKSu>_s1"/A8*QN064Lhh?D06T'[W64BXgkg.H[+bI\dD\H\[Ir->['ocY,tr5\[HMua-f&mXfhN57QRA@>UJFH0J:`#49TQHg4\QH^*'H"tmhfn(`$\#g6>WE\`D^/dpS)o&WEQ>PrSM-AlJ#SK%s=s-iuRO+iE+]C_.Q4_@a/#I[+4-&?KWGl_9g1oWW[]6sJRSI*l9g,Y]>[%Nd:[W3A.\LLigV/!&tSpsf1PP:i"K>!S434$A+'Odh6[.RL^)ZdG3Pjs0NI*@d$f74/q'U?Ec\mRk,82fNU+&5R*YRAIH/XOIG?DKQE.ijfEH3V.fBS6OTjfNm-/=s'C!lF/C%'bp)D[!Z`1_UeXN*o_$'Ajp/kPhD&DNm2;,GARTWCI@TMP:jJA#?f^EAd6#]p]P?U/B*i)qN>$WCKW7_e(J>P;KL(e9Af(eP+.j,Mkq5]V_1t\SDW5b4dhEiYnmm=&gu5Fmo"ro9]Q?]#IHk7ur]'iAFlfVC2H2X6CS\cd[65=V]tD_*4E=[Q?=#Snfk.<`]r<.Db0#b-dLMX)!K+X!t0WCFe";@hDf![FNe45jB7Hm2\>NY-"i;Y,tr5$.i5B_<0Io[?YO.CPQ]+.BTpl/([g3&Qdhse^Xmil5DVK*BcHdXf`2;XhI]eMXsl.YUlMP3EhBS6Cf3L6I6GJs,-o)8H%J];KU>Rd^3IM-:g[eQLkH'hTrE(dB>UnrHC8rZjU=0CUmM!%!]7&nhCI6sp&JL@RfUB/:h*]`CAu-hq`t?eeAAWUdB$$Z>m/7?\a*f:d(lQ;1F_d5lm?3`PI(QWe`>H.k?+/>t&GHc,4G^Y$k>U7DCKJA]DdZX&?tNP3Rj^RO9;b-fcaKU0Tb[(L/d'C0iWk5][D0>5cD)H<<>GZJ=CTC@!j$E,@JW"3n7(eSD4YOqXsD;(Q#JZ046S>@`$jMWKcZLl5nM@`?c@U:4pQi2P6W4r)UGT=E%+>:O`O.**\K6r;-aH<;!l9'1V&6qVT%&k-3XQmSh?`\Hj'k.*n9A'Y$&Yt_gmT'[c1N(n]=)Vh[SoZm;g.^_M+0(oI3fKiNM1h4;\.%q*:inZD/U\=CZVi*Jh*ZaO#V5hV^U]=`K%(d7D!#NoI,oB]SELn[(Yug;L]2`t&3M.u\lCsq"E%b;HmY*?l;6Q!&$qfO,7irL:O6d\=?&-ADSXW$L4Z+ZDcAJ,D_)kI[Df?Ldn-ZP<9RK78^g_q<+FA$U1+3G4+!6W5bFbgI*4B.ukW5+@m0"A\f)h^,DQu(c\6'M'R=;XCmB;!R`Bp1VE+#Tr[WT:)kISY#?!@FQlfc15R'Zr<`jUK;UhMnQW@H0gktcaV.cm1n5.buU&Z&s/3-8iC(p.[q&bP!01G,ABPf[@p1;TL-(`Ih?gj-p\Jm1_Tm1LAh/ecHX]6:7lm:mp<=BNh*p*?/-XCLfpQ@QD;NiUQ`$DO;H,ABVYd<0QGfWoLVW0T3u^u"H&dsFd\Frq:(c?9i_N9Y(LJ$Pg%7==Hen`tDV,rT[H/_F?Fh7Q3Rq>GZKM@S8"7Zap\DcaZDR$tsU5eG`'0nrYm8G8cD2lL&4s?7Q-FR_q-+]-)'tMOcZ#eY\;(ZEKL[3s)dk3IgTI!Ag.[s:/a#7bp5\!k\Ci%t<7b#R`Z$4e8d=(ASaS$Yjm@9AtNNt93DM>L"BWIr&OY2gs&34]KQe7P(oY&pqdARgK]i#R'ctXci(#dlh[?YMXf2f&V>[+bIEc'plb-dLM/([h)X^#)@[W66Hg<-ggCFe";Y,tr5\[HNqjk@kbQ#!E>?X(59iq"@q('K80`KJoKle!8@m5c@j/tF@B?TKW">Oe]Vm5ZT+NpdWs="P-[]N(uQ)KW(Yo,iH,g*8QPJ:&g'.qh\Y?5:_`,1&`R5q\E1I0+srn(bMb;_&U$Y?lHKI.6RY@[+X/:;3)i&Pt&jKe3@`\K4%bCqIcmirmWJ5GPpZCU]23ZT\rD(4@[2#!!2N"$rWF'ia`JV9Womd/L%pI"`d6Zd!IVl=GRc9^hG`o9OXpB0R0m6WmB[>NAI\,Xu1=<1Y_X$/C+;m^l8*HB&>MrU1EW(VfdroA]^us$KTu<@($p#%J(^$<"TubO0tB4#p+R"Nbj/I9;SCq3"MWFl'BGK?.]:"GuXlDP7gDNLEBUN$nHH6&(Y67bB=Ak;-T?ng3:fDnIFnl[a.'#N_-4V*CRgV[qLI)g;![\Ih1_D<9Ko[?YMXf2f&V>[+bI]&C'I04/s1=D\dRH:0"!#sPC25I+?E,98eS7gugm@J:]L@A]od3g]En!i=STFc89ZL$Wef5PD^4ohn)LL\C0L]j6Bsdia/;bn[r,CAX7$#QW<*\l+ASQ-$gLE?*K,0tQ'Ggf#V(8>Nf3m+=kF-sqfa*08F5*E7A'kr+4r1/pOi?d$EH"'*J9K[BY071)mh%Y$G_P-D"/l^s.8V0fJp*ZLEJ=hMUKOd]$nq2G+d7DPRPr?IGKY]rn4c-S)@iCp+:&Ka6.:qJdE^!cM!&!\+5qsK"eHbrV`pL'T=%V!@`\'fsl4ehLEa`+\\):!)NfL7&\j@TH`dl%WqV87m+@Irnng5]*l5ZT^;k?eZdL4@6DB>f#X3I'OdP_1Y]2ZR`F5L7Yl?i1YS_HCX,k.D=&S_u(1mQHd29GCLu);D?]k<@f5;>JYU'&aQq18FW,tLr`p'K1FigHDGRbW()&eYT7bn_l/CpnP(fcXt$NUU$Ln/FZJ$kNWsN(4s*.8@P:p=hu*[)@+L$JML#8BIA5PdBA`Hg_OT:T?]E*N(LU5V%`&ZecM*b>)`]hIFD,s6G/_1mh88HSZ]X*TJ>ub&c!j1p)'mclAnsW^.F4oA@.B)hOSs,lH^ns!p.)2ibIQ.3iGQpo^:MkYjCo]j6Br]jh_2Q!=_J@o=`R7E'#1c>iAWi'sf\Jk=W7`45n*Or[$oo7%q9b4OFLi?-S52p9^>`%]"r]q1RBP*FG:sZ0inm&.<+L9f0ut6r8k2j&@H)]Tm7_f2f&V>[+bIEc'plb-dLM/([h)X^#)@[W66Hg<-ggCFe";Y,tr5\[HNqjk@kbQ"qo%HQ677`8%Fit]fjD(Ik).?:_r-9'lje:(p:[NFfRs=;@qmk^O58^Jt1MjE95j3IS^0TZM'/&-JrGsPSX_n*!7Up#R4n[3.5MH2MEN.Td1VK%tf^@F?oUR1+*qWK/U.uP1g(R0'sD-mrUor4j<+KQ4=WH\C@[NOc1m^lQI^a"X/$hAT:R@ad)$*@efk0KMCCacE<1!kq0,,ZFrl"s]/'RkS_K$s+uk8OJXn(YHQd&0,*l-mM\KirNs]\1.3.n]9r4YH)c9,cr#]fp^s8>EK&))mZ54Zc^Ju??Qorean@+VT[J,GP8ZPIHSn:Pq=*CR8diQ3\;3_5\%W@GfLC=j9peNa&*BLb^iXf06h5Pg2/oXjS+9CUHuM)!AKqVNY'($fg3;7uYk4+aBu^[GLF]ZM.Z1=0^$%2/!*c(!8lRU[`1^\mngJh+3mI$h=OFk9oCMJ,Ps%JIPQ#n+qi;'3=L\4om5G2/J+K7M#jT'4qdr,4gd2HC`N5_[+bIEc'plb-dLM/([h)X^#)@[W66Hg<-ggCFe";Y,tr5\[HNqjk@kbQ"qo%Z8mBQ.qlttB2:4Y8&nfL]()JTn(BXblJh*`oT+pJ6SJC<@S.h^/FSVZ@Gj0fn-U*#TOSIhS$_j]f\DYr[P:+<%`6Oo8+%&LhcDOI1&j1=,id#P3r)n$Rj14r!dgE7nV9>4E:jW=2E^$HQAR2fj2MQPb8M/46?Fe,ld[W9W-n\cpk7u9LWV.&Z?+MH0Sin;h6N\uI\fg3/lYq0*/#U^`&f7_#J!fj;eOCG(-Kl@>bOu/86=dRr'M(`S,r[h;.cu;V#O;P`-;4ToGQ\4u^jJBr>7A;4="S2(>9e\g73`_JinU0h^/Met*'`1.d3',`-B"^aR#pcmGUDmO!pad-RjaT)Fg)Y[n7R%L<]>3HIgF[=HP>cSfBLl^1G2n_P=#Z(l+t[iM'!;kC;4MH8Bf-YSo#CuY.r9\_top57F=BjBipd\"GplY5)[anRoH+f6:O(G6%Q9BXW.']_Va[_(;-P>ic<#/F+'"gM?m31kB/S,':`]AlX(AY;mTf!rX)mE%.U9J;G^B-pE^_^r@HT!=J?%h/(<]?8c'aZ>5:3^We'#?olMAm.r6!mJMR[+bIEc'plb-dLM/([h)X^#)@[W66Hg<-ggCFe";Y,tr5\[HNqjk@kbQ"qo%M]).lD5;h'g\rEq"T+j.L==(rU]D8`7GX&'XAnkF/&V4niPe'8%QaY9o7\HbKV56n5!@_N!Z;4CMmF7SPO&arI-IUS%,4R,86tcaA_77]4o3D#YqM30TSZ:/`Ujua]'UbnL0D<:;Tc$;E8Zuo,8N2:c/W[u,EkDZ6^SuS[CZ<``"9'ZJpqccaN5lL\@%91PM]:898T8fu2p=:3es5^g['qHQ"Hn9D08Rt[FHSTA0k1XS"$sd(CEc(JpZZUG.eS2I5m8GI![r+d*^?eeYfn#6kCFe";Y,s&58i+pk86`e&d^(,d>=ChL]`##m"N'>^gM[mudL'_,5sA-tAjY4/%q+tEaYThjMiP%Ek7b#/*D)2?G^duk[PP1"M:!-8fpgWO`)8AGT,@CnpqF[i-Ur=Oq"DYIB747E,"(oEB:_/G(_%b\Wl2=l[OX'FPD5u+9[3kVU[hB:.m-SgD,j.i.l#2@V:9Ho@b`/?*)6sP-:V,pd.Z_h`9a3Y8N`SpZsba<0cLa)lu6EW37ncgYUO?R@MD+8]U'Ill,jHlnJ#S0Q82hch%YDND)GuU:T[7u5N[+bIg?[I-io\s0O)(e)F)C$mb-fbW0\9?(B!/7@>Ih3%ES"6X?!D_@,[=PrRVOG*<[5hreRd?5_rf[q[?YMXm+Q/(W.u\hp:oGu2]6u;U&QKlC*BI;'7AVa6J[9"dFcHGr!(/3e">8X@OW2Cn(#>pM1pd`.$6cgou&8CB_98T2s`k7EhP7S[T'8\/i^9FrB/Y-*h-=Qis%8Wgbc>7[+bIP.A#AD)IWATkg_#Y,tr5\[HNq2/Esfjk;2aARgma2u_j0YDZTu]D8=n`/2-CU,[5VUp+9T4cRRI/*!T>,FA@i9g_,:?qQ.^C-0O>A$]^D!fZmlch_59B=mf2;c<0pB!\hKh(759f'HeOHT%qGCd-)@G'^VeT_R5:h)j%KgpmIZf:CS.6OYGRr0>T%N0k,nlBt2#Q($69hYi;+lm1gZil3J=e[u;"NG1r;m;*,`O@;];<17$%;1G!]1[5enUCh<"rQ>X#(i!ik)2.;ip2FLKPnT^#hfNuSE4196YQnhg,R!./,BNANp%.,VV3na!qH0oE8PdTGD0bg[Z>O8#k>*s]=-mfFl8aL>Mai[("L#+N;W['L(>9jCl[+bIEc'plb-fc"#-r$FWA4g'D0:9N[FJj?&ZLYE6BnMlD3/mGaR4>f.*($"MAn$VsT-?4d`Maj4FiCE&a]K7GR0=`MX!/>5b.nehZ7DL]="![<&B^7$X.D0ETj,6cQ&uGoXdXSd_$p;Q=.9U"EHnI`A^CV3FEoekt"#*UMg0jr_p8cQ;#Me+2eB;HgmZ)NQgr>tQ$$$2,;eM5T-26#\K83";Yuf(2QXeuK`&j!b$BSO-dd+uTj/bUO_bcSr5A7>>U[8PC&7Y@G%8TmagZD=aOa6q/TL_\OM#SPlPJLcBqA!rmuh;$^#GLg8IY>3&QVbFYS(pcTLcA+=1m!M?*Ed3S^$r:2jfVe(fR.AuI9NH=+Z60!WNO+aTf5@W#XiKd=Fj:h"fln6cermsf"0E)ZMX]XA8%NM#j*:`j&r1_L.PgnN%AKtV8li#s0ir>NWk[C%NM%JiE`S-rXbt!'Q#!G"2:kmn9dXN)?u8d2/KFt>[+bI\nZ;'2.]7NY-"jf\[G+K1-)tTl87*nQX!b*[PI"!lB5q`@<6;Ig<-hRLM<"mU/?nZC*c`\PnPXA;9OmP^36Qm(,&i:/gUPJ@2BT[\_.uJ[s!gLllipV[ZEilbVg/DoC=:*`E`mOdLWCMO(Oah._g)T-Zs9>/A4M,'Fj1ZQG2O6WP'o_=kf<9VF"J<"+gb-lX&#QWL886"Kb)c\Frb$,@j>MK6C[OOCXu+i!3q?$Ka9&P.@h?56FiAemj2YH(q4F"cd"5(p\*FI#9,\H42/*oHiI!CMQ14aBp`FILP+=Wl'JQqj7,`a`eOG6t-\;`O[.FSH/A&U>:GeA>Ih1_D)IWi[W66Hg<+;*?!FkJ)Cr1">Ih1_D<9Jddb!"Z`ZYEd&0Q!p3X@D:_gI@*2$bA0ConH!UQW&SqMLXVO`)__Y+IH&%8s7::\6>II3oTIP.4LftZ^jfVQs1!FmCPJJ:E7]MGaqZl=$,Vn]B?A6QlJplNqk<65mP\TjR\k04BW4+rG=]D^9;F.kDR/];f?JC5l',tP*JH&DEc<_rq:SC5el]Rd=B7bc$td$X3E41_=o>FcFeTHH.q?7:j$gEa??D%fDMDAC2&DAEWCr`b&@?;W07KPN*i<`GfB+iWH1"rIi1bATKN_4#G2:A]4[?W-0]#7Jr`fA-C"h)dB>n]6)&g;W?5j4EKEtB,:Z^@,)'b5Z.oHQiB%7udasL`VTbY$,,duN')S70%YO]c&H%TTgKFJCOELn?rgBu_OH][WPIGB"^PQrIFd0e0'fd4bcLI;2"JG#V$UMi`(h,WS*\I-:bb&rOeFpD7GI2A4LVlqO7.a5h1A*QFP36[AcXmG%_V^<+5>nFPUMm,[E9Gb.;,Ym%&g)2XlT9O*C)3WOdQGqlPVS+jY6L>NbLX>E[-8@\XSW][0?A_l(YUCO5G%64n#W\3`ijUa"r"VN`Nj9O)4cN"$Dk_?op`g]_3CZ=/C=1PR?B"%t4uRXFOWJ`10n#6Tou?(rkX@HcqY]GKkdrNWK3U0X\*%CU^1.4B+hgMfT>#9o6?4Ofe\@2+PWg,%C6.rai_mnN*KSc>r\pu`Fssr0'n*W'\hO[,BQBMWsc)45&[U+>[+bIR[CO0nHBNSEhXHEML)BMZG$3GpTCCG[l5!a4agebbkK*&J,6g&qPd90LEC%p-J&r/(l1X-(R'7&SI`/1$bbPhpO$8jR6=3uYhI7FcPWA$\H%A^h2h*Xc7'W?%"(.#:d]Sc^a9P9VmM[?"IkTj(SZ)!\%>90H!BU,1WJdN!BQ7kS:'[3.*V)mlj?BL'S56d2V;!],B#"Q>$m\bPuK3qP3dL0a!jHY8F3'*]6tl9`\JE8+4:s0'=/VpHI+RsI_46YPtf5?#Z7rDL!lJKM:jn?m1Tr90h,8/tcXY-8F,(u!N(8VY9r7F]_)p>#mii?4g'FW8uO%qCA'M,i:_)^OLN2DH-i/E0XQ"qhe//o:%3fpH!F"]jH`$Bpi$82HhTJ@DKd1mVtTlQl0E#T;>@JM[W3=O4UfEc'plC-:Y4lB5q`cPPm#b-fcUNK@qVEJCE-/([fHk'7:[6e>A0k1[tceJB-hGAT3OUJTQCY-#^tr4BCXD<9K/>HY)5>KL,S?$'rVq9!ct[FI^tI.7uI2oTJmrQKH`0&6HbLjIAJEgOn(jUg[212^_[@2B\tBHU!aQ?&;T0Am:,q`abp+d2_cp=6L>6EB>/m?.b$;@E?Z)'t9WKN30f',^[OdHkn$J($cWQZ+euCS6_=!h$?AP0m5"SF9E:hZ)Ot^K57rK`TS#c0s+QH(hp&^D5_N0JAd4*:)[)9b!^n["@kSaQ#\>fZdT)Q^kO8oYk&\LElELRS2?19gNI@WbXt!E,cdQ^?_^7^4nT\sg)aIotj[P']:2%Z80IZ9u.VgQ\D3ntdak*A/(7rrnW9OdmVM6^r,18GY.P2R.>m0gNYdm.+ulAmH[N]OW:[BDr7nCs&/EQHl:],'ncFDIobU)k#e`m5D,f2h-*TrtM&>E,"408saA"ZEV;bI,m!:*?fW/([fWf2gog3lSL,Vn'6VD'a7?jkB!7X?@r@[[O9pW,!p8<[/s;$Y(,SJPBt(Ec!\6'1hKDb-dMY[FI6r:2t.$Bs+RC>KL,S\[K'fCX3_o@Y"e@^rJkB&P1]q`,TO1eK>e5;[>R-&=+&'.:Rl/XH:L;d!N-n:?d*;s+5/[Y\I;D)jk3#?/kuM$A@i@G=KN7f>aG*,?rfpLHrqVr?g0.Z+c_\lggMo><+R[pjrJpZl4V@a*`LN_A/-g1GbOY\k*)W[4?$'PmWKD=CShON6i?^P+YlmT[.DT2r5%_(GQ%'9m'8b#*FZTCEVjOrBM9rcX6[+,ZF4D&'tg4+omkCfn#G*8/"k\@*=+.+GYiCTF^P)qS,]k1Zia>[+bIEc#@qF`$6ob-_uHg<-ggCFe";f@4&0?$:)Hg<-ggCTFKiWp8<\[?\tDQ"qo%<`3r!K$.+3/XB/m.BX.JWh*t&[quSL``[AfEe`TTa3PCG+>jB[R!QW8^,n*(Ckf'MR)S_!cH]?-rf'G!=n\QZOAh92K6h!d)Q!l`9\8h\qL-g27+2-;U)N(1+2L]Tu);9K)J7ZgSV8WA'a-9(@7\TP1i7@7a$JK'$%)n>aQ>Io*(*&niSF)b<5.nhR#HP9]bA&l::ddo+.,Dn:S^=m`Jk/PF`C+Q%p/[L50XcPng<-ggCTHumCTGX]XZg[+X^#(i#[5h\URI0ff2f&V7LX@MPdn/BD)G?E>[*2&Y-"k`.+GYiCFbenk,tgIc*c(jf2f&VN2(1kV`YH+be(<(D)GdigSMirQ#!G*>2e1M<-)o!ogYX=e5e7%63Q7%d>YY*<:(@jkKFW+V';qi?Lbd+4t^_FCr;!M,-"^4(_t#C[+.PDn,@tF`0O,eKlt9*e5g`2A.YS"A`ke[HBNM>nr4NDHu-dg%aCjoI`A^Cg%j=h$CL-Wr+!-78n'l1=_"JE@#TuF8B_QG9",mj[JAHl7Z)]J.'desLZsC7fQGXlG'.1+aGOTk!"533Kp;`u1(baq:;tl`gD/9h%NAU,i`)/U`O]lP;?!/Z#25&"F_9*6"2Gt+,*442Vq?9TB=Ehlm>$D[0B<*BA?Wu9-:@KC2@cq.%bC%P.F`g:R?h#nA\TKTSpW./_hY\X;taCq,\3;%6fQJ8!K+*;)b'*fbV"_F;u's;Vf(X_P^"Nfo&2I'%01_heGc1nopC/AYUM:gl@Ne%f2`P>Wo;[S[?YO.'Haop]&;:Wio\t[lA\,9>Ih0\1$N\s[FGH4Ih3=r9T3L[W64B_KE#`>[,Ih22KXUa=07GRK>$a&&QtdcUT?d=%K]+X_&,J]!O:aE!G10/?pYC2"W"8QQR#&2&W)aUF:S/9N$.i*[iQQK0M&dVk(t:)_$s9ARNae,1,t%O"D&Bal_SEWpfE?Csr#2]V46[%TK#G"Lpcl<\I*6M_k-Qgdh%4>?cb+aV)8kVan;uCJp8!_^Q7_>N[7.'QS0eqD$Eb"22gG%WK28sING`$(^Y"au1pYnka=Tu_q2Nq/jY_Aa:adI38jMMVG'g-*cgYf?eM-YmjN/B@!0E]sV\%7K:]L>68!ni.Lb%6HgU-:WD3!m_N!P\#Kl:.,q+P%T8X)b:Q'`Q0@1rUd\W+'R4@0W,1[b'kR(!T>cYRb9]09k)[*.:%4aAokE'N]EU6g>b_I/E7fVX<#Iu_>M1cggZ3"e>aOnMup0?9`+79,1o8'`Qg'dA$uVV]+pD%cji4e&D4)-1sjO'[+bIEc!ZGZT5Y+Ec'plb-fcRa_Ik`^$r*/KB"-_9B%%sI3tQca_]@^/rF]>R)imN`8%o0":),6;%OD,`IEWNZMQ&^,[%Ic!]sQ4K6Ert`oAuTm'OuiB'2On$JQcQ7MOE%`(a=f#q'XM`X;Aik^q9\'NYa]-gYTB@S6]uj;^",TlH(it5EmUVF6Fpl._IbGV_PigUo"B/r[8ddkiQ)1M@RF!9n2J71^Pg2djW?HE(iAcBm>7r/n]>_)+YWmrZN+=:I4$sXT/?F#PZ^Wnc_'rd:8;u!apUV4YVd39G^'CkU^'tB1RWrC9@N:(1[&Z2g=9@igGmmhj-Q2fUb_E(0jk@kbQ#!GjQtn5(<[6Bd`Q$BqY,s=e[W65MQtn5(<\i9-Y,t0HKH3diXi>(XXfgOIC@9g@R[S"Bf2a-O6H-snn#icF\[HNqQ'c>;f2aZY!hM,,c5E(c90L?^r]3S_5<@auRkCI7aQrB7#\sH8QrD_jm*]UoNKD==o?8B24@^6Rgu_)fq5a6n(oo-KT0AD%S37ni.:m8n',1]7P!U$/aT3Bdno+*5u:7>=D"F9Q>69Z83b?;I%6a^t\_T3!U5c"pSQKV6&g&k"eR-4L%DB;EF4qNTRGn0IPLWa'gB[;r_\;uqR(+ZfKB>1VF0P*(L.1NZQd$Qp5b7qd4>!!\$]Q52;MQe2'-Qd\o0r:AL7DIU*RJBc*b-dLM/([h^1"THm>[)WjmB3Qr>Ih22>\(FS]&_Sf[?WJu`O1tH/"(0'f2e*^<\M/UU'Q?7&VUr3Pg>2bHpNFn7SHW"5nH@S6ppfAKJ=.gOdq`)/Z&MJ=TSSr7DlB7GZUQLg.51j`,I8.2s+qimn9CUp8At[rBjsBCF)om(1JXhtmrZ2,AMg6QYf;*s)QN?l0.X":%7)(^C9PJfkjW5ct,0j4LRLfT$F6ZK&ZajR0s+Cr`t07rBVUP-'c04%l:d;PZia[qiI\X%4!fOfUSV^V,(Ge^u`>f@k"!7?2rh[$oZsZh\Ih>i]DKRK[WokgjBg9;C6.9$%!.2uhuL0K7XoU7W4aO6p'jBHMYi>-P_VVK=,&d<'bYS1>]s9h,th0[f2b8XoutY2]ldBsM_BVM-g6tgRo-(?gR/_41OJha41W/bG\dBE'f,0F_5[PD(KaDA7m[^mU(A%()J>FDV9LfQB;RBFr$CS"SbZ8X84BKa-YFDZ<2@9mD`&6h`DJ=G*^"Y_VOWh\C4^jG?:5eQc#ZPWk1A0DCuq9+$I1NSlrMMmqh;P`am&A`kZ5f`]cMITItD`UE;4&1Vi<=UOSe-_=V099O?f*1X%c$=sU%.)-VZXLfmB?Nn:ZrQk.jlOs%:k0sYK$7>r8`Joo(lLFF(`+3u3G6B<1H0362H^ThD`Vn;1H`=qALi^ZR+rt:oH-:heu2AJ%V$0lDr@^*`7DOD6*LH1BjVlTSqK653#fg<8uU0q57a:KW.&`R4>K=YB.jFi;f+:0gqoGcN>@VVVQjMb7+l;$;pbeu-CG*)qk88D%5$;YfC+:jZr7OB:p5#\q!%#8mJ;C7K=6OcnEKF0%aS;[MdBDob*YA4:jQi[t3RC@:Hd9?%GL1[GM/=[Gp9-]FDU6A@C2G>FDVS(0A^\AugiI/Bh-6AuiC"3&4^+XishrA@;/Z-$mj@C@pqaXsZ_Xisf^'j6p+2U#3?DfB6q10^0KWl]'7\hq8sT!u9SghAEq=1`P4Q1i#lmS^RDSI>1>-LChRDT\1ZdVR[Y.M2,KjGQAILmV0DJ@JgbajH4?0;tkqlnQ0/N1)lK/W_cW@5U'sZ'cjhGd!.Odh)^b`TjXn%5EBcAkgdCtGI1aON8.lHW.Rs^,Yo3",[)lB1A_#=O:K05j+m[.6:V&ra=Z\Rn]WE.h`&VC/'*c6ABO5LBJMef;/(XZ"F)Dc]]MFE'l7>eA3\AufcIJ_=f%lafqM>FDT[Ah12faD>Fr10`9]Zdkr+lKu_CQnC"JLMN70b&"J&.PP'9I9edhAh12faD>Fr$CS$?2.65)SqSUeKT)-q?=E9TR_]cerRTOLqqN-ZOBh'irpYNZMk`rMYfi_9gZVjcBG`6GFU;@rb\(PUQf%Vqo;@9nKaP()8A`-VC`ha0g$Jck/3WghiCT9P\U*Jj!.*JVAl%p4G>H;lY8GO\$eQ>DRakQHnGM?-oTtHis>I&=YWLU-'\l9pN"%h2)K%%_35uMD.Y>]WV-3r?=DhBW,^_o_0-TR4D)Q=)*di/Kt"1ifKo*N1R1=[%W5Qesuu5k,!,b4DcK8Hf@Pr_nJRgiF-'UX_/"2bdp?GX:'g_G6?REMY>b#3XN+qE7C>c#fulNBu-#jFgf[Q,MeRI1M//DQ.[WWAueY4Q.`/KFZ3Nq1L"-YR^1VhCh:%1>FDVYQ.]nokn7^=)QV(_Rq=1WLb71e`bF-Z4pO!E8?fCtu>90+r&:SZgMr>HkYD7W"<&=H9LL(>frVJbmAtJIu(;p)g,@$,.*k:s)n@cU4l^Ya*h544g+'p>D`5=DYXeDe@ig*4:]NbiaA=i!E##SjIWI'.`_>(1IT$9j>252KBq_>r`2j55nd%uC%jLg;5\O%(C=jiKSjM_m6=#@YQc3d4A9R=V]],f^uEp/.%n[a0,RQrn_@X(d:DLkd`6"&QD@,qe_;,f[]8&71LV?:2?^s"SSp>Hc!Y3_fC[(<%fYO`p,8aSh"]i/NpKYk(EUG$:ShU5eAEmR)TQKmm2B*fkkDD;L>JsoS^64S,(j6:T9\hQqld[aL)e067q^hP&BV`i]H4)*pTR@Hfe!R7XZGj]nGV$KkOe]7>$nl-V-'L's\)Xj_k$-3oVM-SH3CtY%WoY"l,o9^q+nsUf/oC9FXji#'ijkF5SVuM-KhMFZN:4,YuTNrOP8CL-2R7B6#@0oqrs+B9"V]"oFf>:%)9At>45.oTaLAUB"n4NFG\6HK#?4?S^9Aqh<0]D9%'ml`So/mQL.3r2HF3\"[YjPo,?s7/j=Q^cS(aV(#g`f[&:QZ]:dFQZ);kHA"]uggIUY@/u1>?(<3\?*;>p![-AuSK]bD=RHd*I.3N.(r$\+H0-"GqR=R);`o7(gJ_Y"1t]:b_SC]#&K<97*(l>5&t`8R?a6Oc$7lX#U]s*0UkTB8+mLQ:F_\?.9@24JOV\Zb/?DLHU)>6oumBb?/#pdicT,f?dR`bEQlGXU;c=^*nK4uW!/A4`S_U8;?rY^MBY@bY="sIXe79d3^@dDl&"5++s,>,_E-e!7B'",=V"j'F@ts@!7ZRs;k2O`Ch:&tOkK$4g$7tDd(8P\Ah14<[PfsHD4%GKR,Z=jAuh$Hb%t',T$:<2MG28qAufdL6__g$YhVYZ5/r1!C:AX)tAkeNrfT/;PC=Bm&9/qQUP7=EM+UPSji#K$!ei%DK(3sqB-X4M#rn]RFk79E1__tZI*"iGRIF-$L>=p%f7%(E,MqOj)p6Q5c;jnK(L0)+gTIuZB&oIe)?rA>,T>aMd,g/;+Ccr&fOAT!,h=mT$B\[0$>N:N(Tfu>kQ*re%)?)+01Hqj?q-\>&rWs1#S/_lF+qS%]95`]`um7ifiU2BRONhnoG0Z1l"[Ak65E8>?8))YWX0!j**fue,B[PD&m9XKQ-lE&\(K$78-/$mb/)Vf/:/P0!enfIpAh12f"h+9W2)g1iR`jZbm=Ekiqr'3ar,:O1(Y6GV*,:6F40OG>i?-nm5()k!E-M+C\C4V"\C2A+],^84NeCKFLVfRslF._k97s?kR(c*Z9?qf5?*/4*jC+ph`+m8eVfT?p8?cfR-jJR::DAaPnE(&gPIk^$&d^$UkYgt^+eI'a'E?%a/mBeW(^hiuLn([e;&U_VeR+3VW@6WOXXk!(oSIH06/>6*$s@8nja76&/0GEC7"!orZd@/(UoYL>h9&V:4W1']4..j%'LJ4d[2*SW1jU5q6j7jA7hZ%.4igoQH;otV[0NL&4.Md29MO#gLT.TI^8R^mUIaluKsZ.$5sSjZ$Uu-$/cF&-mM!+IL7EZ4Of8F7nQR!D'-uAmFc_K9'=1`6GBBKl@rdLmkUA`F=@eZH21`j0^MMgGC8!$)kS.k:A]h2/ndb\10^0KbZ;WWduN,(Ch:''0mdqFVGJE<(iHMrp&&R6(acF?SroMbLO$@T#GiAB]#d5lI$a4]BiK`98SaKamgH-B]D(UNgph7D_5&oS,GW2oCj'?$D)(C?C&2TL3V:3&>Jo1W]7k;[)QDgHoJB<_)acmNn>HD2SH9/dI3nbKU*ShHD"W9]hj_F37G21OARFQk20V`P:8fR&u65gdR(ZJk,?5ITEG/7Ci.^)bZQ9U?`4i!oC.1*<"kqfd_dam?3"hd>cjK?+=*i>X@7:SMf8-;a#E9Z9OF,R^I=3,t2S%$I*%t,^H%XKmdLWQ:?bZ7GKTnoVmk`F3Ik@.n;-Kg3P(qL/8/kheq8Yh+#[1-d$c`:aF[W(WAY.KBMGnY`*oCt;.A@\903+:O\+Po.uYM9DU.R1+OB6q7FUKn%7Fl,ou%iZp^N4lBL>5i[tlbr8u@\'?-+[M9h,lgTmf(o0=Q"V!Lr9n%=gqUC#Ke='5a[4E,eM]E1I[,kU$\KgMCH010`k]Ch:'/QFkgbdqiU(.O25Q>FDU:l??dI10^0K9$(m,]#`B;A[^D^R)B?aHnA@=O3[X.iKA%"-sRB=\6kGkiR\8[ANkI\^lurf]qde97lMRFEaE9,os[Qpc>RLG:4J`fcgfmKe'_X7kAgg!L%Yu^`T'[2DbL4ZJ4+BMmS9#T-o9\]'-d_gFeEHh;%3Cs2oMDRYdP]$e,q?p\$EZL[Ep]n8H20^Um'XA&J$\EFIq(sdKmEgXsXR3M,pIqn:`JmH@1\!`5>PNgQ8n/1_kRaaQWJs1F-%hn9'Uu_WNNL57Vp2O&>M7_?eRI7K7!0Wl*>g[9tT5ePeu%T(:@CF@@D^;C4\A;6FRknJ2G"XisgXWuRP02U#3?YGp3tCpcuLX3AXA>FDV%'n_:dA]h20$%j?[PD'LBf3?1m^a@Sm<1;@mk,DoK\&8eE5/eCnFCt:g[0\j0-1FLpRhF1I,MHJ$K([P^Bl!#]F\E<2T+?oCZ*K9Gbm2\E7&ZQKDjlQ'B,?jX3T""*b0Q4/WQ@*).;AM&u<.-#$W9,jV_B;]h$AJR]4l&_WrSH':CVpEMA4Do*i541?BBJOM]JZ'T>o)9Zuaj.HR6=4@@7r+k*lUBBVr_La51J>._k-/`2+GXB)D41q50t\fA&1d(MJ%1u0bL\(l+[,otga;D4u./%SC4/V]OF3m:,ROUh6kd\6+*58s#PrQ\Wc+jVQ7EJ:mo)sl>]#Im4L;F,%`3Wq\3Y_CFe&p)5!,#^GT*&XH+$s83mh0gH,SETC*9^,L4dZjD1N,HOXQisB;D_VG6BXG)u'9n8oFMCH2lH^&96s:!>Q-9Qt6onIb@j4'"7_s2>Bm!D*N]'t&er/F&BFT,c3gu:/KlXY_Aa2_IC'?KWkr<.;raO=)>4>l`:b_HL_WNL)7t4#q>/A-Q6\$"Rf"Dh6eC.ERAW&*q?CoQtL?VunMBPp)Q.a;rPp!:hnSGWP:kP13Xanq]+J@d%G^ErLO5TR_N"'4k5Oj/Dg5W6IIZjs8nTm9?i/itL-P^+lbiU+GpPRY[UQQ%9$YZ,1G#<4U#Ls4N2kJu]%E.NEf.#b\sb"b9TmJfI:f4%GU=fe*9jK$CJ#)mkUnK]S:T"bb\u@8Q9fo%C?`n5B^tOLnPtp,LQhB0'Vi8FF(+o"%RX,Y/p'h)qcO@;'!'f^#LP)@C6.;4q@8*`BPD_BMbf6*`raM`,"IZC938EsB$,]0$S6B36LHD(&E%/5ij#I']lI:[[Y%B3?f-._'ZVWBB)=QA/37N4[e"IUY)J)Q&>)U=NW6aPk$51so(-_A`ABqf":K=0`M6BmS.NV:a1>dKi/-IGg_='.V176i?kYl'Ue$$$0'!$D[G97qo:QZT1!*^4&Xebu1j4d`_N,P)5;!`ZS$#^,514qb"[1e<0\$%$LE0IXg_p0))tn1m:m1XJT"8As@SA!KM[!huB%QMV&pgS%c;rNtIiS(K=Y^ukq0S[!;QV47+%VB0)=9R>p]6CJ_hY3G.`da*@5$tEGPM2/XY.+!T&N!l0i[)KODoC>RajOPB?)PW9,U7HG";*nOi8;CjQBh3T=2WPW<238:[V$@;=)a#^,$5V4`kZ?+K<_QOt6)HWEkVqf"(Gd(sqAT^LoVWi>7N6A@Io7W#Qrg[24JPY\U1Pp^Q.a;rFfmp:lLbq0hM1`Hi?AL,E:=sND/D,MM0`??IC;FPKH'hf>G@&n',AZ^-&Q>ienX`(YH..rkll7hir?aY$%_5AQK%BHrC.@2Vh"-/R'9I7GH/L07JCJqn'X`94kVJi6:Z'QL&V$$Dp2YVlm#YE7nl=AI)m\gc0PLU!r*U(q2paYOVGCptg$7r[>Fd]WRB=Vf9[-UM/$kMoC;XjfX3=V>MbMArAufc1#@t8(DmhE*RB=\6DkC6I6aN'2C0TN=[MSu??I60b;[;cdMp.`7dl3?ToRejA+=VfQRN6t#aXg<3aKK14Jt`".3X@ll423a&[_TZ&=6L4g$\bu@o4n\m;+'8J,\.S*,-PZq=9.]B+6[h*[NVM;#bN83Zp`+[S%PUf^0D^?%G^t.AiR+HEc)gt1#>]\L7>Hd6iam6`i?1B3Zg+[l/\hWPA!YW$PK7\Ff!YElfpa'q:/$f_*l*>W'hV'6#N5-0ct0&ZFSMR?fscse;9j[(0/qJ69;cE3,iN=10^0KEb)U^2d>[B7"T$O@qMbL10^0KFrF^KA*Xl9Q.[Wt[PD(S,dZ%b10[0qRB:QWdWJ]*I[s'S`,YDpKQU;I-?'6p[!/R4F"V^HRY;k#C:N5TDh@6K%)GW7Eu[0q5H>?oP_ns5m@W]`*N+e!(t6op1R(9E.W=&-T=I5E&[l0)eQ%)#%OC%!;OLgEXUD5'(JGYYW5`dCPY,aq/KDuu/)W\LoJ\TLr;LjV)eQ,Y8d(=N:1Ab;PsitGWfr8%7#Pd'kHn$Z=j0oNPuD9H][fDj:ILcI(XJJNL6b=KJHX4uAh12fNm(Nk?e8bSXgT_,:l2YR8ZSr9KP%7W9(X78bZ7)hOVgeTCpr%O>?t&LOL03E"%9=4PC&dBXYKWg$5SVYI,)4G8fGjQ0%KoDS@QII/S/sf3\j12$\SEEB3shX,Gq<%kWQ`SUnt4K=s,am^Vj8bB-T0\.^hCZO!><5D27F&$M8.Ti[ZE_<;%I-jP5#$2EPe4qHX@*Z?I84TM=R99G$jjB/\]WMbmL/gua,\j>@,0_s,HVS'O9<^$_CN(TIELKX3m-)G?B0o8PV4CMdb13**H+h]m/(O*Fg_6BQ;c=\HM0?&Qntf<#QuaPcZjH9lL`fKF3DGhg7aAoJ7T3'Z)??4dDK6?n9@PK>FF#6QX&NSLbA:au10`k]Cpduc)F9V.Cc/Sd'@kLO1g?5^b\@I8-#F*o,W\]L0jAKpWI\*Mh\3OJ69V6D3ZN/?+d)>O.Q,G\OpKcpGh?i?NNqB[;!&f6'TE+27/\`e^;Gp>Es'LC'iH;D%3Wn3_n-Y>A[B>JQAf.'=fJW4f>/<*-)$&On+;X29`Uo#hjrVfPIrqRZ;9+&d:qX/(&Hb-#otb@rfb/Fa::CFk9t8m^/:t*09CZk/0.7Ht0\63u6])?4FYgjCn=Nf,EW*5//(dG(21#l86DTf]k'0C+k:eS2qP=7bH?U+.b`M_c@GlbH`\BZ7O2Q75A)8XishBA@AcpbH`\BZA-M@%9Nn6=dX0A*;T=U]fE)rD,ipKBNRjNEPPSnFA+^NoD3nBW/'.D4icrS^Lq.BM=sJbT1Spmlp0LBG;48)JI0SRH@V;DMHZQ=X3bAQ_B3[PD'TX\-]OAQb=1=dEV.Q.a;r(%/Gq_Yn?sh!6PH^]'42KV*X3+ahm_Xmdtb)u)W>fcU4]mp6J'k3;\\A#0t_G*ZkdHu-2*?<^PBo?>o\.t$@OnZXp'fugTObH`\BR_$^DAh12f.@I:hbH`\BZE0`T>FDV;Rb%u3gZdj3MIkhF:X`Xj9GNZhM.s,I=)h.4j6MTfYbM`\uh\X#qfu)dHT-%0T$3/q1h[4l$?`sc'>H>G,iF_lGqXLdJK%\;P/Bb=MbF6#dV;DMHZQ=X3bAQ_B3[PD'TX\-]OAQb=1=dEV.Q.a;rFDTca_YNkQ=X3bAIXpXb%tXt.ODEdAQb=1=dCpEAh14<:2I>l>7A!-%u64JG/BgD;RkUi%X4B5iGNE`][C!mGM7+HAZNH3r)rgKX$.:_g2D^I4%f\MRc2_n:55[iu5;+eW/*/H:r%I1XaWqDt6LWGY\,I#rsN)Atad?-n5aK7Frl`p[QKR)L`B1o^8(qe^\,cH%(XYS$3P&.%W.tRB=\63AOfMk,#)DN\5KeX0f6ee]M,kAuj`6ZdmF*e6?)aZdmDRbZ;'O\m!FDVYPM%EA03,E%FKmW+V55K>O=&2XbM"qhU5SpXbLFr[[LdXeRE-k%C;>QWY/MVm5Mo\mUCFKgC4,]WMdTtpcmXB5B,3piRR'g\C3DMjp76X'jk5/)sk93_SF-9/(eTbrE+AP*iI,R"U2%!'.qMEE`Kdast6"iRF8uQY?IQEogB7+Ma5SF"00/UXs*/AQ(8h&0Dluo73`QErWtn[rs6UCn[@S?d?gIjBQ0BR3WC0Ah13Qfd]L(X0g)O6Y3^+0qP9nXcD)7XNX`*OP-Y>bZ:!?[PD'TXish@bAEtK,C)f!5c6COCahV\'QTSCi)9/rHZr1BC2rdg7EW.]6RZ.[iugacll8gg[\>k2i77[7k^BOtqf@1t-ms9b>mVrHFF9PZ*L\$Y^m%O?kc7ch"8<^fq94IMY?`i>P4R&u*TC::E#W^LB<`GB[BZISX">nr*rp`+U\4WhE((I&FKoT+aQ[CbDhF%bK:FDV;<]Mp>NP;bG-6fcrN?WSQ*uFHAnnc[/uhXVo?M&TPP?`rWNYTtLk%'Uq'X?X2U9mDLZg-=DFOg(&hf>5c6-\5%[G-tqbI^;D.6O#eXi@B2>*uFHAnnc[/uhFrb-.K#DRS9db3A"nUo>'"9[-UJ?MbB+u6]<[PD'TX`@s\10`jA:ieR"m<7U`nh/?i$;[O2X0F.P(1sV@R@:7ZM^f=,>VTGgk%rRpK;uf%J\1l3^[S5'_l&PHK[7B>07<2UkJNd9SdHRSkFqCk^\7?iHFFbm[S"']S.FNPeLuYah"sE_B%\YR"WUoAU;%=dl,ZT[Q2&4A,)aCB+Rr&!o--?k`ES0PV=V8r'%1D*e^l1t/4Ro]IHifi,X0Tn$-e'GZ3jY+)C7@$fdP4s+QJ&9-Bhbui\Ri4\4PB#2l`UY:XD+fK&8l^S_CNCRR*n%\iP][h"T9W7BNm`O:Q*eoqLa(V)ml,?C^AQ0GJQTq$F/PBPaVnkpddWcmXP]_3lnSn.@VU"]+d4jjHWP7p+7i\qDXUdRW4"C%jU9X"VFXUnRtVFM"CSoB]Id68gH!)O`5^N1T*-c)'7=pnUqZk5,\mE.hLleJOZ,n`lo?.e[PUpak%)D-@QfpX&S8C+>FDU6A@C2G>J4p?UTNA=_+XishRbA=Rp[X,R07GEY$Du.:XZ"F)]0p83)J-?4>@!JqY.=PsE:;&TS\OEsc9ccP1EZ%.#Ne\DhtlsSiBMbR42^OeS+hY=NZ8IO>>*r:epOtA>931A_Ms7:iA5+ALM*6]oIWLm&XNfi)hfN],-a."PXh'2nq%nU'hZ\%M.Y.(4>DY4>"m+EWe/r!M(B93A.%-!hpm3G%=j/RbA2o_$.JX.2'nMo9Y2kp2]mCJh3AFc#\9cMUKs^.bH!\jgm=ps#7B05@3n\72m%>FDU6A@=6t>uZYSbuS>>frD+d,Iag,&t,2jdUhPYZdh#^.kQh8.T8@d2f#G,W/4"%MV6-gA[]aDfue,R;'dtT>E)WpX0P?Vgq'd^A88PFQ^ML1%bkD8C'O0tlj=+[8(SM.q-)@9f>26dq\FK0/231l@I(:):)HUFS>P9@@02/Jur<(8okCU6\WFDV;<]Mp>%F)7`FgUC&>Wm3jbt68uFih^@ch@Sqh,fhRD!Q"t$ZTUiVof!b[R4_^Cp]gU4gLW3U:%d*46:+WM7A1N5'*#MX_*Ugr09)jBL%n2`:/+Sk'q>l@h:7>@LX"ui;mY"Tl)^`Y_[Va]WlEi)@^b!e10\UaXm4:.fP7h'(l#.,WK-Y`iEiPsm^717^ce%lPF#t="B"0>H-^d']<9Fm(X1:RP!a$dPSl0%aYY!D(S<V*14![::[M194_kHg+&XG\72o#WnNA>[^p"6#SOJ/fd^?@WsC#XQ.a;r[8Sg(,uZB[U9@^Ig^d-h?rFNW-f6a*"4`.=Rr"]OMV6ki!Q^mgO\cC&f,a/*D.*$R1CNE'Skaskr-@&Zg[Dacq*:hX40rA,cq>Hn(W2OlY5idf.X)fJ6omtmKn030rg?Pf/S_cW+!?"'M;bZ8=+ZW3%0r/hN'5MYYo$\.^<=+r`\q/EON'^g/Mm^D8pV:_fYn65Ud`ubdMS'0dHaB!\7IDe9#h9?!q^N4FH/%X9_"Sr)9+"m1fTkYlAA?,ZF]]Pea<0X`Of!Pj#/J9MuY!AU6>E)WpX3)mCQ!gRb@4V=mK0t>>=e9ASXcWN+1a?hUXk>pWQ'd[Ho6ai<#:[Y+KkerW\n%%]9WjbbbZ8>V*1!=,`N%V6Wh;ajElDj+[PD(KaD@+jZdmE8bZ85=frB)8FX:->;mY"Td4An1U!JZNe"!18V8cnPV,",eM>8C8X3)mCQ!gRbbuR21f%JAc20@!C4YNt*XfRF1Z&B;@Auj+>XfhZTn4NRKGdTX&$dV$N5(@H&I-0WG_ah=_KjS2:/3J.7\)EgkHu4,1I5p##*sqNjGE@\<=ZL;@k1%MW2StEWb>?Mc-fue,B[]2u4/$kMoC1_%cWgn*8$'r``Cc/S&bZ7*#AULb_.@[H@MoojI[b?S?Y.sE$n4II[][g3k\!r/i^\lbt_^eC;#s\IVItfo5T-&=FiUDE3h[BJ][m(Z-[r6aNghG&fO0,k-V9W;i5$R7d7NC7&?n?HWM?FUW-r"Bk&h,2C6!iA65:a[SS@fK_>-&H">R2rQUnc"-$4NW(C=V:F`7[)UeQ?CkWgn*8$'r_U2kIKfm(`f$b`&b@.eU^/,aG;s6K9R#=#b,p-.KE*b?VXSkEafDCh:&tOkIln[?GjYCc*f4XX^5R=+[8(2-Xp_/fZqDl\o\hWj*CG0j@fV10^0KbZ5t2Ch:'/8\AWCR[2/uPuFh9_,?\iXgUh<%\Te)f+=@^V9E4n@sD;,N8Og]fV_a..rqAn>Ymn5POF3b:gRHejc#=[K7#+$>E&\[APUA%OKWVQ2Z#1(V@U0SoZ2T0Z;T!BkP.$4CZbg#!u5a9O\m9TqE[6keSc=,q2WQDCG+&+oT.UC8^Om-*oEo0r3!l_)b$I@$^qTOo&'j##I)sgb3S6NDacB\87[Djksj`[?fbq5_RJU6]-Z!5f:7.lpHAen_L4ZO.g?ij_[2;*Y4WOInocFH`)RkLR=8k@1C@u5u[J!8P?E4qr`E!u(3cSs^I-0M3n;u4g%CT^NX1b8=O'%?=bDe]U=H8ZT\4(NQ+!fHnEse5c9:umkI[\7G6L8m*Fh3Ym!b[jA'%VNp(+mO:?<8BtC<@:RYt#.@jk75arrkY'I*K1p]MuWo`0EpV?FslEC@S>kF_1)8+gA?IJ5d-YM/TWECr]C>,$`1ZFP09)nNU/M]CE>qq*L<"VdADA9\PndC$rBE!]AN@oZ+tp=Ys*W,NO]'\8qDLec0"?'8=/*k_FjW%q#N&!E_T(TVel5rAc&0Zdkr+Wr*95[bRB:(-Aucg933uVE10[JMVOEk)C9)"rZ^'2nA@C2K>Etf]bZ5Zp/$mdMbA9%g*G;g\;.clNe5Z#p>AY)aA[X?uKgoXS67]0-ph4:`ghaY>mN5^EpUZ@R3stBRrNF+opAZcCcojT$+7II0qqXWu;J`bpCP5bM"2B<]<-UrLbQ_;9B@V-_?<:s-!Y'Q;0ptu&4b]gNDt-Mq(o:ui_heNhGa(fdN0HUOXYOhVn=XfcY#\fd36B?t((/HD3UKa><"S=J'fI:o9IGoHnrW8Bf/#.l=TqX`Sf&b\NKa=!!Za]nOImQYHT^4_KbdSAdB2V_8[FaVD.Ifue,r,IKrfh]\.%ARBfJrH^Fi<>P]a?KWiNeP`PN%*jZ'+B(+^9IHK$r(O_9S?NC+DtCfR5CnMBR,#QMaUE`C14R)mF#uOD;``rVG_Xo4]7(dI!Yb,X:"fNY)p*NXF5_ldmMT%]^:$I&1:@uh`HC?VHIln\9"X-N?W.:cI$5BMY2)Fob^9MSL`M_3gt;j=\'&+U"O'/O=J4MmC@2N],W_5RB>b>fkRS31Cm?D<[C%IH/[JI1>*uF8]6%:W)u)4`W>(ptbuR3$`GB+oR[D<"*OD$a8i1="L"jd@_W?e\_._XoR.F?+:TfI+Fm"hlg0MKpH_2/M/[cRBb;\&i_MN38S#sn8UW@7_[`Ye6fue+gj-iU!ajb,aZrtURAugd1Cpduc10]UZ:RKm0ZRan76:B)VQ`S/$mdEA@C2K>FDT]j'sUR[CFpp%X4?LiRM6Zr7:TZ"fZaDg3K`_8%W2[me#b-iT[W_IjiU-S100055J=>FU#o9OhOh4B%%Kse3^%9-QYH!W]$pD_pIUm;,57rX9I'H'+*g.L=p=N9-^.ad$kVAV=4nT\O,(\[7[g4%^_a0,^)Q^-+8i(("2[B"`MZOGTeDTXb@N8n[hgs5UO4]cGQL@k9H8tqZQ8K35uFLC:38d(!RERb]GBmD4-3_OFMk++B_B6->`mlQ$#sg/AWp,f5,$,g;[16f@jZY>!Q$GE1C8=<[c;jEMOcMs>1]?'rU6<^UmLt:KV,1KVLG.,PN`_XC0/JmA[X?u+`]MG=Za`AA[X?ueLn2Y:mnFDbuSbLfkOU0Ch:%1>9S#G>?O&0Ch:%)_,eOQcCp`h`P^ZhDu3CVma/[%ch,p!gY>mj)#fk_IOJG.WUM"Eo:=i).X]j=GD:;d>No0qf?2$94IdOe&cW8Dk7,D,"L'.lkH-fQXVK8sWYHR([F')Q[n?%RF)E:-_eca8<@V0a?dgV)Hm+B`2q[e35YQ+Xe06V[2@Ja\:4+hq:a)BqFU$ci:7`@pk=*%KGW$ElS!8YZ80E']/H>Do81rFPURo>PN9u)aj?I74AmT4&^kdFC^3mt6[SDnbs2priEE(B26(08H_[r68I7$$SH=@'tXi;NjM?K[4!.P8!WY0\F%Y:X@p)McO;AS&<=6(+i)bA9&I`lD,n<[3!2hb2p8rp7[6G_^J)b#c@MfeLh1Kb/6$P>8C8X3*2%N@qP;KTb$2CfRq5Aui2ZCpbcMQ,8`afkMK^>EtI3S_7cC10[bEfkPVgO0-"W`POF4aSSPD+G^-XJ%0,?Pr-c*(>R:AU^]0dB\^.Jr*Oga):5*>HXn2t6P8LjrL$6@k"Ho..Eos!aB/F25"WUA[%Nh5m6seRQM+pa>j]Sl&oh)lgOB+C)qt&MIqXCSk+1f2C?dQYtUpkA>HR4Q3o6RfiT!r+.C?\^@'Ri8"b)*]-,5:,OFGZN<``GI93tZUX.Aq7Qb(;,W+9f(/cm#r2T+[34,)_t(NYQlFcs!,@79.b+X[5#k;,(6UUP7p\$02TCeXf2rJ.H'n4"3i'4Z"f4?aXN4CeV-di"DIG0;QL5p=ZHL_'Yi.BV40rUercVm?pm>FDV5,dZ%J@[O:G10[IBAuj'WR'"S5gZAsOQ.a;P-kXd10jC'JbZ6_Z>7E0=fd\S[eRW4!Wgndrb&"J&hCr0%XfR0gn]V`SeRd'-$Xr72[G),](%cG$oTeoQs,Zo/htrc?/UZ`bD\%&Smk;Q%JP$rE4UsH7I@EmV48A@hni=g9*:;IRt*dq.#rglH5/4_Jb\^XN203(:nANuLP<[fKAdU+!bHE@acFaS"WXi?]]l@D9$&72Li$a!Lt=WfWrAAQc$"G;H%H^Bh80%d!i$k3&4X:$])B\$Ve5S4,P-4.;C&gVSZBsc4Bj(2qX$/[Be>\mlD*\n5!@"J+D1hiL=_s-Oa4]]KoP+Z^'4D:^``T=a4=#%':Ban6>F(a=.I0[r+Y&aY5ALc%>?5e-`d'O0YNsH[OF7uuKk=,$'D]p?:JtIRh(]XqFLfMHT%_Yc8S(C57Ma;.J@gH.X/D&;I22HRp7,4LPqUT_ALbUAMZfoWZGq4=/@%i=29XVW[7eMXDIX5PXHFWgV(>@.isFPFK;T=6R[NE^"qXYO+KX_(1;X3*2%RB=\6Auju>>-lBJ>8_Q:_o>T*'FF$f^rBg"V!=Xn'OWsB=ZT!`!\&u.^-C:5m%RB:L?[[OeO<^W^OR]SKlZ$ok/l.n;2U,97/$i5IRB<>=ZdhldVIlkV;DMHZQ=X3bAQ_B3[PD'TX\-]OAQb=1=dEV.Q.a;r[1cd;g'cjMJ+3EqgOAe.n9Xu>n8`Rnr5`CJ*^5#Eeo8+kRrGG(>$0HmH1A<3c!UK;R#Zg$:7kVrYHK#YS#n6bZ7O2)X;R8Ub%tXt.ODEdAQb=1=dCpEAh13QfrC:\PKS<_B6AN5kn](HSp3BD>/dsSV=<$b%rp^RB8$`Z7O2)XJ%CRRB=\6V.@$?/Bb=MbHclFCh:'/M64@kq=(k2r^s]XCPEe!,N1;)qLda>T)ML[QE1!=r7&3Y#bU>I$S+eSouV[nJ+KNjKumO=;bh:?'1oSF5iD$721AQb=1=dCpfRB=\6Auefb>?R8'=dEW%6Y3\]>FDTca_YNkQ=X3bAIXpXb&"I!>AZCj2"9M[JacjP(&ii0r'0/Tqs-HRY;VsZJ,Y2g_eX&4Ybq?E+9#VU^;8*s:3/&Cmk0AkY-3Vg&^4:AAQb=1=k;)6[PD'TX\-]OAQb=1=dEV.Q.a;rA[X'7Z^#*)Q=X3b2,n0DndOpi5<;8YB669$X:jrH6mt5SNdL+>Ou:UC:2Y%T/_9^XGpVrZ7O2)/Bb>rXspX+J>CJ-CkU^$*FCL:FmfEZ_Dg;_5Q%Lm%Ym8jbH'SRCirO`f3&CR]8a&Jb%t(]bZ:$@=dEW%ekhd:bZ8>V;DMHZQ=X3bAQ_B3[PD&moXr^HB;tBNX]C`(_H1+CdI>1@p5s<0IPJLhDhd#;6fDH&n*'31>e%%X.(m9C4A<7u6qs>jC!;R-Ff*O]6>&`jmjuoGMS;i21r2SWgsRtD_g75Kit_rA/+KhZ6c0aT;7Vj'W:M3]7e>'Zck:B\FWgk%eV$MopNCe0rFOH7Fd5cPo,H`02594Kd!OWWO$T=U%FXGN9&:hj[h:\[_-4g/Y+&-+k)3HM$+L28@5(F9g.I&ln9CJ8:)`SE/ld;$&P1Hk1iRfYA.WDN65lA-F,&mQ3J91Ug!19bp"l\9U;g+LOMm%[cbN@DC`BJ=q$n&bZ;-mCj"$>A[^='Sb3b$jK.K)MeXsZ6)+&#JgI#1aYYAV9easGM,qkMF&$ijktj%>eV;cBm5(QklC?OB#:2iN[0..GP^5uTc"pt"WZX&S>FDV%nV+]RMZV=^op2b#]&k=\:9:?S=_UaDP%Z9"?0F)5QaVX7O=OqDTh7F7(-/G+cD"L$7$))qZs\`'E\bm2=VFIc9;5F-b+)D$6ori@Cpd][HM\+b[Q8'0g-LQm=Y7HX(8]m9?o)#TXX]-#-c/mdpH")Ha4BCiS`ZVs(Dap/\udZ9Q)S0QcT_#8\C"Cc:RA3W("*D3V%?ks("%?$I\C?sDB16LZB/B9$Z<']=r6]_=%MLf+\h-ETjp0BB1RgI,9:OA/M.LtE.uoOW*2NjBYb<-jHc*%H]V]M?$*N)EVlE,>`Cp5V=8.dFAq[:#5%e'[IMN$bJ6CW_JbFFYX*Nn8PLlbtH(?)*,#dZg`1G#PkH:A\_``tt/"AW*;JjJhOJ*LE^bFof&b_]]UqRUAmgW&16U?EE;C#\9CQPo+]a8C<9_F>VLTW/1#'L][qqo?oMT9i)q_PS72eXi;NjQ.]oMSZpBPAug'\FCXL!T5C>E]+4rk[4V:*cC22m[Nb%rpB>P1%:n8`S&I.CAq][AtVDD`6JCV<3IZZI&XLB19QaUo,/R)h4dt^!+AY0>sL$F,Ma'5Bl8mo%`LEd_D_.85>)W>_l(!lg[\c\W6\3cUU01>E;K'9BC]MXD2_hm6t"M$kKYniF&WM4-Z3\IEYG^glB;bElR7+F/gnN&b=S52SlH6I[\Xj;a:IHqp4DJ*D9hGW!BA[\U?Ah13Qfo#'^XisiA,%\*Gfd^O@g,*#>OP-X'D&Fd7X&7WuCh:$^RB=\6Ah0u4=dZ>8Fd]WNA,::a!3%Cn]$M#@i=VR+j+L"QEe%`,$cNU@-%`m]X_PZ:3)DAl,+aj`Yd7^O=?^k'CW\4'8;?<&K6/bZm=:>p\,-teC<-CsY6IAkGLKdaS<,]?Ol2XMDdKXqqO.m/3T&6DDjQIjmuFm;CmpD2as@"`!nLkB;%XNNZDi,qAWh(ip5#"HW^YLDF`c4$,u(ZH;B@PBFAiuTg@3i&j`KPCPr)V0HRPaUhc4E"(MNgd^JrnHC1>FPu>p7:58_8u+g-ld)9"=)D/=ftcZVTMG98]%2;JJn]$HZHrk)`q[ZVXpL*#R#Q/JQa\Lb71Q.[Wt[PD'TX[W^rZ^'4dCh:'/0O*'PZW2EJ=ibDj[PD&a0XK;ag$415Z6L)eQ.[LCI>/210`:UhWh.KqJ:CnV&`lJm=a)WO+^khp#Y[Q$VTIIhXaS=E-im)K"^kE3-!eiB%`&+j6$c%Lb1Y4Nk]pR)lDLnA_(>@@unPZ_*3aUS!ep3!rBH>eo%@&6@qm6&76nT(2TK9C\]b12Ms>CJF,Oo[AY,TIoZf)sEJq&(&Aasl//2*"$=&cMcg]MuM"5MXN5joo=8;H==b82tP!mb"U"!&&O4>;>)P[(D#(r@ab&jZ]Y!o1aggZX,[ud8W4`<'dFWZ=)^8R'(at.j6Uq_0A?1\KqY>`hSj*nF4F]!=CFt8_IdkYPb>1>B5-Xe'n@k6\#f#riPMomIf+5`6h1b@geTTU.Xisi=b%tXt10^0KbZ;-)W7f=0A[X?uD47TlOP-X'Of@$VCh:%1>A]h2bZ8=+Z^'4D;F#9ACh:'/<\UkFfr>Hb>oE(=(;b!<"hcc8?L>/;2h1cViF_C@\6o$+f3KJI\9g.3Z1$Nirhg^L'Q,c@Z5(Ock8dYj=@Vrp!F$IKB3o.8eA[chN@,+rbi];6GLJ`l^W3fZd)`!fFd_/*S\AbQ/aAOR\4&Kc=!q0rMkFWOc0GqJ`XhirP,fmn$LnS+IkH--L!tAkl+&$F*]SfAGL6cK*iYMD>:.f7;:bStbD"&4Ndlr)DPD?Q>\A\^QosY":o<5sHgd:1=qe4q;R-lo?(8mc?qIc(+u[lINu9MZ*US%A#QEaJfsRrCn_[0iGo*NI1&9plYIB$L`K@rpZ$d*tKH@U%$pZ_SFDV%MCctPRqA]/10\U_XisfiN@;-`VV16dbZ8>V.Vs7`Q!qs'ot(fDW)@6k\#7aJh9#dn.nYK\3pL7(,FFdg[]"'4A:?[\h8/B;lKr21Lt`t*JhRgrbXcu".`)1(mTIc?T7&RMh3C^:l>HEd,80&3WobuBII/:k]aHcHHns?ThulZ+_CV#"45#8@%G3BMWe:,:.7!/F!/X+SD.R:O.(WL<&FRkX!s#G%S'=\;AZjM`\h>^rD3]VWB(EK!G6Vc6#,VB*Yd$0q=>c&9%:8>;Fm!3)rXJt+UF.?&If+6Ik10C9/G.Agq]k-m-JEnF"=7h=P=FLV70Uqaa;(Zj/)@O050k#@Ft$"H"kq(&@N)V>J`C;%hqX@-7S;@+O^WrLI?@a=&WAA>rEOEPNNZQ.hChjr_-Sp`A]h20$%j?[]72Ff3T3[^%o)-2[runXXo0-H]-j+j%/s[?ZAO0`3HZ-Hggr"Gjb(giHP4942Uk*[DOAQpVQ=Z,N/c02Rh(R,PXktsX5Q[+O!d&.SL2-58bJr**.+=U6#2T\@s`Z]oO>C%Jno3uiMp=%-W<,@ZJBb@*QDW36s7\HFh4YjW,?WsX2CrHaEp]W",Nij2pb=SZci#0\47lYS`X1CuDKd4&OmX+VL@\Zm`'TCZ:\9bOqnkFB-GpLe\>VTHNXisg+10^0KbZ8>V9s`@UU-*%gb_Dk7Ah14<72+`"Z^'2nA@!9l10\UaXkmA;Zdkr+l@R5\AueO?F\TC#=q%TVk/6TK_=1'@DW'O*f=pshnGI;Or1WlbD>;HWp^b6f5B^\LeS0bZ5/$sH+g90hR.F?+erPTab?"J3c6J&bgF%`dSo,\GJJqj-"^uFZZ_TZ5ej1T)k#FQhKh.W&"'IkiCr6l9L`U.O10LFJ%PY@o=F$GX2-EaT[KkS3*Obeu)K4#XCj0S87LBH:a71inLXmSl%bK'^]%8,6[`oK<-Qq\C42W0lik"<.TP8\GN``.G`1`bW,ku(mRdQOK9]c]7`Fb:JH`)OC7Y<9@)rPc]SfobqnQ_bjFPp(J!W\7)6T@/bZ8>V*1bZ5FDV;<]T:#MV2anCh:&t@B8Ng(qNjS=Ut2Ks>[d(TsiWXi(T0=+Ko?`-KR:Rlq1]j/]@+Pk3D[Xs4$5%A4HS+H9\*.CHBZpJN(LiA&io"8$9QH%SXaW6r*>,o$b07c!_cqFbJG'#^\4(10GA]]EqA7j"N4SW),D@NV$d`-%Z610j0_^0q>i?P]QNj@9kS2kl?`Xm.FKQ[,Jr+/II2sYnHF4QJaCJ%R?>YL?&2Cbq"Y"5>Q]h>EVBA[3>%V7(FV,!a9hkDKBGT`C18UrI?p^9LKQS^E\&YtsdZj2OZqnX/5Q%g_"2?H;K'R3;XisgXWuRP0bZ8=+ShXGdR'!Z*[ONf6Q.a;r&eRl>GBnVPU"tmkqFPLW7)*W?:7!N=sMSs`-^G'=u#uPRh>Nm&m=S2rK&kqB3YgSb+A1MLs`#)H5dLsDt>bQ?SY>[,,r,gVLpsIQ]]Z$,P1X3MMb"*:96>L5=0k37u#>(>=7k>hT#'1e2j9G^gBJGm$l0]/,P7Z1c`Lqn[nL%J;*5g*;f$_%ND.L:?q8FaQEXisgX.rLcW2U#4T10[bEfue,r0=-qsb%rr0bZ5b)_+5ln-g[+oO6SMk)]WnlgJ#iXskkn_cFFHVoEi$Xk&kMWnV,`et99nL=M0:R@:.@Vc9(p!gVueg*ul&S@3/VGE"Y0OI8K=1/SG(SV9c/8easo(JulD>&@4o%H^VDd:.pY@PY,f0Z6b"g1$M_hO5']%EuRKn;eT:m_:"Eb-QH3AuhUL;mVbBb%tXt)Ci(Yfue,rOP+BL7LT8P2-Xot,'T#-ZW0'aZkg`![;!(L6Y'r?10^0KbZ7)B[PD'TXV*BnD:OFC5c/.oX\.ZW;.m=0LS*-!RB8BlDF8V:b(cC+J(V/V[%B59ABFQm>o#Ve[/$(,lQSd\l447j$a%PmM(CLX`$3/8h)RT(LhG?l6QGq<^F*^%0L-9B4G-hH@60\hgU0tiV+V-*dr`/W-QW.=#q.8*K[/-$Apf`?]hHW88N33ekS2k.N`[tZ'-%"oFVb8n&kF,[$3"<*hX/qCX#fk7+7Lj`\`/2K0"A-='Ic@8OV!CH.i0TGqNNDULM.t^*CXhAP?9_BQ(9`W":/_i8UotXh48qa6ZWM;lsOX>n,\KQ%5t*QWN,Z;YI4)'b#RP%mCb_hA%t60mGHd,hR1thjYD9+NN;m#_jFqo3TbQmXnaRn[bl1dV-%5Z/1&$hmHHj#^un:tWQYM0E-t$e$3u[4gsI!c_HLnpZ+hVbX9&3GK3M3@JBobb]MRcKlpEX6jl,bC)S0C-159,/UJ!Xes:D(c]JX#Y4@3:WhkeIahmuUEc)6Vn$-l>&0)0jdCq[fWL#5;4POYjSTZqgfbLO_4#\AtLh>4[Z'nLOM5Hbtn9s$K)Z8=e&-tWHi"`=YDktZj9;HcZJaH0?I^:P&9X$&aMt.IrHNl89:?H3h*B0W#_%HnK*NG>m*$k!SB@S4VbA_#@eA]A[;qj"-fJ=m&LAD(N6VQ'Spi@Q';S!Y'+E.i$7nt4jURh[F=,'hkbOb#QUKQgqXAkICQM)^+i+2c0P+F->lnM6fgHSP0Y20>0kHEb,B#(S>NQa9H&'Znk!PY,LikYc@L.@?d2@Nm%/WkVS5Hd.+@0Ddsb\0s(6-%U>99.)m^[Q!80^5#0j_465>heP!rTE3!rYE2u/.[gKUuAajZ>E3!rY54G"q>A]+!>s>H2X)P+YWsKAU2)uL1ga_)/gkpQtXgZ-L_Q>kP>OCZGP_<7p>O@k\\5g%=_&\87Kj.iN>91DVj:Z@<,F#k@Qeks;Y3XtJnrr)u.+q^*.f%D?qBmSM4Sqgo5Q0?m-+D^8,K$?V-$t(&r=-ZH)S\4CUTl5#8pcK"^i6oC3uV?e+:OD]dYc!ipOc25&!`]g0IXbpY7RHY=%13E39/(+YRe"*+82H6aYon-kC"ifSXDPcN/jnp-gAJd=<9=^"S(/43/5m*6SKq>J8LG1nl'D_90,1B-/_.&M$_O>c7`F\o8?i]%a-)#YoW%i+ZSh#"o:MP`^1.2@B;p=51In'5)\gmd-A=TAG@hg]FMDZEN+R`^mCH33n"TL5TR9J,q+hS3$ap&c!p:=1T__b^_".e@%S&OY!N=cKJ[O)J#>'nnos,6J3J(j8Y@`l_)NE'WT.oUdk_p=2$/V;+$29Wp$jO?*0Lr'qemeuSPt7U>59dWTDY,)$'dCM]@%@'1K)mE:>gbOj'^XLCH.=J7:mnUmYB72kF^<.d?#$DO(-t25)uOiOSL2Wi>i.WSQd+.+$(ZHHF`QP>4F#r.blN/WXltK_QC\W_QC\W%KNCriE"o<]-\A4'lFb(2'Ki=-:bSrG.:P^-qKj,RR>MWB_bul"1GHt3=M*M""P.,UZf=TmB10C+uq&fY3^Is%CGAemTmfu'^nt,UU9$->*V36hg`=g1:"*#hHU.5(V8d@u0YrOcL"_:$h#AWB7NI*p,HlRZ1O-9hb?sdJe9'Gd4%[7Mi8=Q%!3Iq\16YAJ+^cmIW+XO)GRgT?^oO2j3T>Q]:q2"R!K'uF\*'VFTjK"@n*\dfBWT-c8:E:k0U/42E#OUL_hLbe&+LA70QM\Pu0T!RrhC5fU'D8;o'%&mbiF`#"^ls_QBKQ\.*T5BXfIO8/*)U*E'DnLoNG(s%gJcau9?LmE%R_`!T58k]oIdk[A]'uKj.7XiDu/[#P;-RlIaLR9;"!)_]:bN2CQ,p5Q5!2>HYT@jIOn0?S\t[7*2F+ITZ04\%f'+rU781jJ`C!?IJ"plc?Vr@0r:5^A,Z#P\e$*VRA/8-_$YH3m=]+N.]9K7O35[f3KDqbSL1m#:H[`FWf:>&ErW,*Q\1M>[]65O8jU0"9!2kOjg$A=WI8LE]jdOEVkA3+=pb"+ai7^,c.k7qnN/Yq)<5t'q'!Kj$nlV/Ipl?4-1l@C.,6<-.bq$7_QC\WG,;23KQ*u2X)P*DcoKl2ga_+%#e/Lr\!dI>&\[2j-"DKR(>2-cS%H/JMU>On'iGM_lOP3(.3-*Os8;mNh/ac[27o(u'TSpIhU/8fTVAT:4$MYC%]:iag$/*E>];/B>MKf\]V;Ee_o:`+@7=VDaH6.^B%lnk/,.(9"%-;kq$(@,uKutk7VLUO#PsrOPh4-@q4Yi0cHke,!*L=fKn=1S`iDYMI)\"'Rs*2:[)[X:l:dRJ9aLB";ko_n%QNP'T;g%?Tn`G)M_htbdR>1(eR+Vl5W013\U^5n==`WTGlj8I1OHfCJDoHfXegFG7cGj1.W9Qn01A!]&L)u6tZHqgg2gk8lR:ucq_jPj*`G"?@J6Vogb(j2T>D6;S6+Bq)8>#Wp&lCj>D68r_QDObkA[Ip@HGD/_QA!$X7_aSP'=S!m3Q_PiPKX^0>G/)nlN=">06.*J#hZ1qKK\RZ8eS%U_U3iIqS(%GCP798+ZlaDqKj-Cc(cM%@TX3EHPsH]Kg&6!]m]Z;65oA*hI$@NJBM"o\V2+)cE(o";!I0)n'``cCklAnbGZ6b.9OgY#lc9/Ka::*Kf5.+(J/We+"L$i=lgs>*)(D%t'K$[.;C0^QTgH1$&O+A*P&*6W2?f>@GE`0c)2PG3hEIP<-EDll=qkWhNVUT4/^r213;231+/#6H&@_/!RNDo>iY[TdhAIEp^m>D6:8>O;Jb&8i5#'lFb('lJ._LSQ3NWf:tumCh)oO2A$9X`e]bdILPa>Mja4aj7Zfk=S3:F![;?f54kG0dG,B]cOWMl.tcM\dbn0DKp*fqeqYR'5.>R.-%R4RBBSh3E1\S\(FB!TR1@J$3"TfsbmlqbaM(K95XZM[AI`^0K:Q8aAAitYc4K%LoYU^SM2'PBSpnbgS6hA^3Wh*:jO"c*d#'=g>kXT:ESLQ#^qe0,iZ0-Tp;gTZ"7V1gG,(LpEZ=HN5PJ2eT==^QZ6U"l6q_0g"f%JHDVFf+',3u;o\bS$(`5AB*NK@1dN6D:r3OU;VM(gA(q6\-e=t@c)L&VIllUtm9?s(GQ/$`@d?5%?b1fQIk3#Bdo@H0.nr8.r9$+s:1F3:db+CK6Wgds$u.kR[f\Sa(u;C@XH0R>oPpA??Q2ZEYId/l*<>3u>g=7'F@pMe5)F\T6OlN!b<;6<"MI"q!7ou\@9W2V$2X(#6SVdIM\3Pf`XU*i&oJG%'lMP,iE"oN&WC@nR*:g'Y=#;V"8-E3%6&X",@KC-13c)XuSi[lRKA>D6:8>D69uKj0Ot/Krna/)9D^=VK&tXZ")!Y(Ubpm;T+?^jB]tghO2Y>I#r4WoU9&SpC1;P4^W/8kqPHABE/)s3?eH`VG[Nd7h[(B:g^m/tFIp)pO_:>Ff%APjg-s(LMQ`jI512^&^O&%YaHH]VbkP1#&3m9q5i%!XM#[L[S>"/maZ5&E9&eVh9%'#"9V@)5&tr%$*B[8`t=$,K"5D0o_8&/]Fa>_1q_Ijs>,u1P^Qp$4/#^UX&6Id$`;[Fa':X"b"a]-[j$u3_W!J`'fgd(^(hqX&F"JAqc:oKk0dX//fBRO;l95h09;h3Utjh5/De?cLBM#oZRsCL8/s1,GT.$_Vp'NqTpNL>D69U&)gRJACUiF#hEdD<%KMTFV5BjQsp#T5gliZ\A^nU>AF'kMQCfgc_?a>8#i]5X51FR!aPYP#Xt=kPuldIQ/@^eH(7eAQTQcI\h\!iT-!_n.g$R7;@7##ND+h/thf[3fkDe$ZL7bJK[@uGiWoNgsH/OTa!k<-l2FKHauDXO`V=cQ-h<>/p^:.a-[%@*tATS`Q-'q8_R<#R_o1L`=.'!TL3)\A"!7P!0Bk#U$%+JPd#`MF^T=VY_>pqQXEN**?n;9b7\b/Ma39dE)AHf6Su`h0JAY(q_/dtnbWGMA5MIA=2@=NS)LL$J;K=_@2@/C*$[<*Ydb,#"PE4pis7?&@W]V!('J]nYB)rr1"YXlo\oJ*Vi6CX/6na0M!iNRU[a%ho=mPiraVm'?%fc%,mUp5he6obd=&\i:Tr76Ut!sJ[9q7h8YkA$)WP/K8*Ta>D6;S6+GI!E3!rY%cLHXiE!WXc\ro_'lFb(76fa3>N&W35e,A*@*iknE2u=8Z_5IVmu5O::*P20R7I^fTG9M_%tj^6*=KmjGsi]K0#=9D,i\kM64\1*qWV]J"@cdN=G(RD-fB-k'_>4jR?E+T(<3/'1s@tCcYbdSFmpJbiKT'0;],Fo&f/I2I1MH1V"$Y"+UI4hI9sm#0q>[,*SM$VhB8'XX5hhD?R:JL5VoIKSIYq*ME^A[Hjn>sK`1".E)XfW:8g:TidQog!*?'5-$UGKBcQ!Chtn8>':cX$]&u9OXW#295OHo1s"i*-``P^7@L(po`(Z]>YC4VJ%]1Cr\M7#IicO+@A)17E2)KE1/tl:TJ9gkq3#NQ>Hs%C1+;!gQ3\diT1[?'25^/Xu"\2lucVo7`W/j.5rgfm/Z&oGii,c?q7JK45d/fFS=TQYi!-\)]^hq8^D3oYB$C*mm6CqgMe_=L0C?>5=,hB'##DE(9kGCT4&2HXhq3WXnj0q.blN/MWWku>N&TrG\4Hc\CH&4"+[H1RGh3$H`_Y)ppi#M?fY^nt^j@X1S%;$9u^o^*LFq"kO;K[4irTu/hQOL*\=_H@k>pd@+g9S`NWCNr[QbQkTt#61P&6dWtfnL**H'[BM#<;rd*9TTaT8@-)/V/*5pq5+dsMe@.hWL:>U3mO5ETQ;?=Jo1=4*0jY@\-(!d44(Jb`TV`15K:"SS>Xkf:;WK&6!Eej^pci?Su*loclYKH]\^1=HmZ@k[Bb\'+Bo'Z7bVrXs#Y3W=#2CSCVJ,+3.E%k@&!jseN/`A21CF+n:8lg]T--nf*VW@F3<[@C'Y_bolH,MB6q+Ws*oBm*i(STcY%d%,BFeBfh4Fb'B.inPUAVP0nKFT[DZ;Yd@>(*.J6_H763;*uN)1iQelS_.%?Y3^P^1Zl97q0g.&0H?6O$;>5E!"6=0gQk#r&O/\/6'WD[s'fB5CF:1K6_b'RmHfR3odS$(FhMaVaH3s/He`"3.RMh2*c4P`tPDh734#+,F$6@g!i^Be%pOHosh2<=,4Z.DV/X,lp_K30T09_n;*D\4CSu/(/0f``Ynd7!CQ[XpO0gt3r7g`),!OVq5k,PDn%j1)N=#jTL6ROH]WYq>[YVJe+A),@b,Jtkl\O,GliO/n&>C^5Eph*Kj078og-)f\5a^-.blN/lI>&\2(iP`DA@%H$,WgeQ,9Z?Xhq2`+l"R&WXs%_DRCSQ2W7]kiDs#H\5g-_9#@^IX`e\7Y"+I@M^:Uf$U8"h[LR8W[rb_US1FEY:OfZ\H"!Sggkm8H5AJsc]!_MlCaOgp5+%qX3#c:3TG.4hrRS<)^88/<>RYm8Bb=]8sHE-t[tIJaObJ%48-XZQu='n'c`pFX\DHtrgD'[V_+Tea/#6]e@TKkX;;;g1dYikZ+cN37Dd45";?m_Vr]Hl/4TpnUO(-%-k2j(4I?oDHE3!rYE2u/.[gKSO[gKUu%(@,sSjg.h\5g%="6!8c<\3#UghIIT>Ep^m>;8OUD6:8>O@8dX6jl,nI]Zh?33a9Xhq2`E@^HBSN-.=aa;q>hNIWHn!?XYAnF]oo5>+BrJjD27'T+W3=`l@:aaU9bl/%O6F_%,+M*")%2c5fFb7hVl_+&p]"V\NWq"-F'bW#1HF_QiN.NIIhD,@V$%`<7'qffMPT*R7US";G>O1-H]S64do,X3i1?E&%(b8n2Z%0rr47L>c;p^.dW43K=#)^fum]dX5KBN]5QdmWda?q5fE1_5O'-KXqYagDA@&s+2Y.sXhq3WXnG/meTSIQp^">9[gKT*(q3[U=Xa*:htaAe5.(H`Bh$/CD!TD?]D988)\&is8:c'S@bmsMY+^\l'CQ9aZZX=fd>N>>/nGi=%l20.T3rT3\+WAUR^Q-&@IO)KM5`5qo(L[`T-ol1:mTP'9Chb+"rAj/?q*IUJ8q2%:F;;%J%q[UOdOrRAA7`UM?3m\C?-.Y=9Y*`(S8*$(s:*)hV8h4*\E7`"Ba6)^^<$o68lh?1tU8WWP^+4lkYhV)0D&pqCA,8A]'uKj/\=LuV@BeU\GC[gKU5":Q2d'lFb('lLE"DA@%(DA@&s&%j=Locf"%i(N't*[GNpqhu2u807c'qV%QCd(J^3b?S)r']Y<5`))g;6a3&[1/!-0W+-@Y)GKs3&$VPU40/Ur%>1B;3?.QV%Aq#Sb`l8GX_:Jko)de7%S7@3N&l2(4,$2kVFG,r-*q'4$jqia1**["]l4gY8)A5r%b(!m#)J&C4CITY],ra8N9N2GSDMhJ)b/W*U`WcKBB#!<383;GP[JGS!3SKu3"*5ea9U/H.:.3OG98N)+-AQ[_@ZJZDm@qqs3q':0iJolA&ijG8t<^m$VoRJ(+[u*]!3gDQniUU%^r6b5g9>j]5IoVDf-Gec^Ibp"bA]e)%2I@'ACfWaaK7:kjY3`X)P+YX0E4R'lFb('lFb(2&1dKKj3pL:FFq4>_H=8>D69%%,k7K9&Wh0Dsct%rAEPG##q048?P",?ct2D:Odf:dVY6)L3mN=^9$9SP^!@=&j2I;lsl?9pPrfPGM)\qI@jQsN7@*5a2_]C+fXM6JSop])6EK3?6'8$8fGE0'Xd0Z0Bo<]hUbXD`b`RSJqM<@5/ngHp"o3X4SicFDCa9C2J+1o\MF,f"La[\]Q(H+Rns!2<+?\lHrfp81QUPKJTGHh_Je)NQ`R$.blN/WXltKp'd3rSOBgl\(V1u$F^AO$F^AO'"lK,XgZ-LXoqp^>D69U!X9+C$F^AOnftUN\(V1u\m16"D!2AHXi?&bpZdE9D2)8#^JS5:-SPsachcM"FFq?\#@/lUcM&A.\apd7P^NLnLJ)5T4^GAee+sklAS"AdK:.lq/o^1`T3hQ(NuotDSZJ*mHqEa1"[N\&5nF1N1;^01Xhq3[6F^#,"@3S%6*M`RXhq3WXi<];<=f:!&-P;'-c3"BjP9%AZ("C@K=MUCeb[F9akXa,aTm=o2bIu"qr*^9B1=1kr7dbgMi0A;_ke"mcYkA$Qs9@j(I\5g%=\CF[e[gI^0#_F0)p-cDj\5g&h=9uACJfk>N+:.[/\CI(=>9,kMA'&[D>6;:n)sj>b6-1eY]3d"tmg!n[F"<_+?bYQlOq7QgYEfT`B1ga0$ROq9:o`L&W=hhIX^6D6I#3goDA<:?&-P91]^?'7$F^AO)@PM)5nF/b&-Th@#e(/M$F^o]iDr5U"@3S%_4CqAHBWEN>EAbLa_5t!A7[SG=WTb21)rDXnt1C25F$WUcTYA"R6UXTajX$M;6mPa>Omp6rq@^SbB"ulB:gg`[gI^0#_F0)Y!I_FKj078NJ2>P+:*QA#_HG[KNj.7Kj0OjE2t)eJfk>N?r)G[^"KsHd@3a_K=R0GY2nGd^/jgds7q!fTDu+0>k3I?]VFOPI-;e$CTFd'17I)H%;tk:g2b="[6_q1o4L_!2/^A[Rar#`FuWOo/Rb`0)U2V*/b(kb,)E-`23`!H,f*-pgMafq#*@;aMGhm?nDkY_3oE;3UoaTZR_lFY6VA8+e4;qur%3tN0kO@WaJ:2Pk<@=<^_9CY\Edc!&,hsm).bq$7_QA,BIpH$EqHAiSf[MDn*ZAeGQkSaIoaY=F*8W4brIeDRbhumc6E>(+6]E&6$?:J8NA[8]&c2-@Gk5Ymh!3(p0$C>>1WM!OYGXQ_R#d&3MRRo]^N(O#XLF"I'fol#nKbAI-Zg35VmT[Bo_RYi]QWmll0/lPN-i1O3_2mem;kVD>JOah'UK9Ld3GQ&a,qjFTR"Z]b&'FY"+H9Jn5CI#09-"pnR$Z'5ZWR%C&3OF'L4,p&`bHK1*kgM=?F]SI)JUsMHX1..L@Sj!]s6Vo1e40m)Lg1+B;WmTk;r7gY[a)T!(&o1,V5-\Gq@F("V9"J=2Q1%$L$/c)LcA=)M<>eDtCs[%L(1&n5sSYa0?SKD=GOdCogAR5P,N75&8k+An+\S(>!7gg.#XtfU+)n[gKSO\*ATbX$%&4FXb20_QEO$11Q#B[?iu1C-14NpY;[,4u;S9Ys,K"\(Ymt)oc\FMTt-ANC_g&ljasj"lWM@FZ\5g&hIT'j[E3&\QLKeVN>P4TbeBqp+I4Wr^(?&;@Y%be@NCC*T>c/0J)jT5fA#:C(l:oR+TT1><_ns-rP8_2mXJ]CjN,A+;0$u"WPg(*h!3i'mk+A'"5bRGNGghVI@SR);jld-W+A=:CnKEXG%9^0NLjF2If(tg-,GMf(^hQJF>r@$UHZ?&cV2%?hQVD:e`V)"e8_oa6UM(r%.6&mNTQ3Cdg/[-jTYrG33\/s[[sT%)K-ecLQ2uPgLuSqJ^OA5S>k=X<+(J*C$gR6F>90Z[/8um/_[uD[T'jD,Qmqum3\Y,W8jD*#@9u`O?r1+!&@X(_&feN63mKu-!\3TIqHO76jjSc(*pl5=LDMT0RG[8eK+(SsLD9MlLW8O[N)itqfYM&p_SX^Uk,#@VgnBdFp[%%%jFfR0*S_ea-Tal'f]9P=MIE^sAO7@tcZ\M^"S)bV'mD_U4Hnd9'?D3ShN!LVPmu_&Y<-C'Sp>hhI6qODd,"cngf;FZ4=6'$sFak!(ndTd%LA0Vo%fB;\/jZPu*PAADmGK--oS=bVJA0d30cg9Jg\qVj_+M`POmiqf<4+ZOCK/T>P'(iso4bFhsi]o8s"MN\U))2fno=e+7)/W@Xf#5Va6bi8@9\1r,>`E:Le55SeUc_Q4q6f+_YjX"RKiJW$l`L&F;MnpM!J7m`hJW^7"SD#&E&gdQb#>/B.\AX^p;"Eu`*oa!2,O[o(3/ZZ6PcuZPjfG`g-clRLCEL%MZ]k]I#m/k4A"?,#<_O&ld30[Y#7$hlLZT^35n/Tnk5aXaN\,A:f10r(&;2(h3"[o?VJ!4J@MI(4iTB9UGK4YP5Lb6F//,@_*ubmjd$uQ6b%@pCm'P_PiE"o!Gg7Cl-\5g%=\5g&h]1crb1K'-Fq>;e*@`"D@?5da.A/Jls[/:I2&l`HR]"(n_IRkKl"h',b->PeRbnOu,?O3r?E#\Ph&@e[`6A]W$d@:j?6V!WFK->VnU9TQfc.t0u`o:%72ZXllXf1:9e6$np9;86PmK/;l\Jo$Uiq/_.;VCMp\>8/=lXS-t&@Z]+=<8)ibBo]l*5$?<`#6Uips9-`G(+'mcYOf_Wq/+rnM&^TG::eKr5D69UJoId4_4]afiE!SM:UjE7SMX:45a?@;9jagK-jfN(+TMT%J$^cDme!3^K`?:SRQ-:4Gf.?%Psjp^e)%[:pb`_jp#ViEDk@2@@3C@osRTJB$#Q)=a(dcuELC?.nK6Z\4.&6.e&F<40tAjJ8.+<4\llgW2T]86Mm^d1uc5fm/$B(6nXGp\T^iW8Mf;"o1l;M.3W:J/M8l/>A#bWQalS+ps,U6lBY5?q(H&^*Q_Crdh2HH+t5(f5iu9QS3o8jaWqZ0@W2G:OMgV.@`_^>UC-?O9E^1MqF.J:%*E]Lpks3?l3])T\=J+tG#sD5_Is,4$I\B,=#`O;_RN[jlgP45J+k=UlW8j8e&?(I.Z:kerNsWM&!?@8cgH+iLiN!u$YO;jKhLQ3,Hb]/XIEl(=d17P5+8_94E=)"'5<9?7k`F0`Nub1Zl/4ILh17lV#IC'Hr=F,l1\#E+,nCAWR1djEedejAWo*#jZhZjsm`.A]R*@r^PVbKPga_)/go:n%Xhq3WXhq3S(N))>(Cdh\[gKSO[gKU50#F_;8%;R0;Rf`:GP=WO%a=W*eZH0q'NE5(BB`3#Pa;40$&I"#!JnKCaT9&/1;U\jt`++/^uf]*VHVdo9$Z.[]8>m&=/+;$I&SjuC6AM`1K`_Hd_Rg9=T?U^HVaW=%S,!5iSAF3?G!B1+`gglO_;p`L^YtT"=?D\T")?3*b'S-u?FR4)'6KkR"kogp3eGBh_;S+fFN6X16t+W'HW[-&3ME3jk2iUMsHVc!0e$dd*SOHVF(YCJgfm$Xgi798]1*gA&lu*j1^d_*F?t^=N!76%Y':BI/p11?P['_^MH:ILLgnN\:mX:,nN)^;aLro\$Cb$$1scbY885U"V.=)+!3U22Ct`Cq&NQ8]m%4hVA9,n62KZ[V/[%"5#6rM7[o+SiE"ol2V+!RN)_SDA@%h#e/MdH*7^=_QC8`XY*u9E2u>03eppn>D6:TL;S&AUUFm+oJ^'I2>4O\H:LIY*<3U#.]\>XJ*J`$uq=h"Wl)Jhkm1FP<%Uj1tU%g%2;4d1g:hnX_Bp'6LK#qUUP@IQ`NJ6&2*4Q9rs97T7UMRt6q+Zuq]GMj'+5TQbh^7j+3090S/1tI(*qg9Kd15,$g$!Fa,@rP$Y@>5S3%CZ\R$Fb%s9#@^IXU=#fiE!Q%DRC@"FV,#oDA@%(DA@&3iLnukefu7e=WK,Zh":LDU#btZ+"I*-Dgf.VV\r1MM8e#.VrlT(^A$,tao+Gm/%PQ)T9Oa%JO`?Sqr.9BejduNX:CRh7\`m.YE>pJq&S]64+I6GagK-j]GBl.7^"f5[8=D(ZR9;!AEb`Q\gO6t^&ajO/p(X.J`*r@eH-k>2,h>Dl.dfVuX0N52g\lD+WK>C="Vo='B&S.OCFsJR/p7N#WbXu,q&mf5HAh,"4?s_`\@]'-"H_1t;%NYM(85.^C!.>Jo:*TJ"4b44ZGm@c`389NUPgH,]f3),>'5eP&'lMP,iDuH,mRnH\(]a<5e'h(qr]*A;^97urq:%\MurLKb3h:6hmiB1eKQ:6r\tcCEQ9\RrC;iurOn0k'U;-.\=!_].K?*-HQ1A$>(@9a\o"8)RGl>VIfJ&Eg@6Qcf]YJ]L-3o)+H=lV[F5ds7SghQkN0`L[WgPNtek-,B(V,5>"?4#W/`a#f!(]^EuaZZnD@EbWgleA:'Rk0+jPTHX.CD:"&RN!r!!_cSH96ZC;-I]1/WUu-sjR7aPeRgs3&MMVrsO6LnB_0P^)l&H-R"4Ii7kh4g>:C"o!oL'.s'm0e@bg]n[gDq[s[mEGSqKuM=d4)nGYm14=64%8?)O+W0^LC[?DVeJ]8fBika+%eX*I#.!5.eS`Tj`qqm6D!#ZZ@9@%XL%_s6=!i[DfA_pC<8`WWUCB`rV1tcuG>nJ)5`BD'(h"m^B$G@t1b9D2:j3lE1V]:mo_9+hQtf!M+/ti*AUi^N=G%_3g7!iE"ol+6n<&lhmf-n@g=keSRDni^;bJ&UTD5U>=7Z#SIT1@.A#Dr5o\K>+0AQ.uacjae03K/V;psT)_hB,a=C!O>qtukFCR/1eL;A^?#=u<%j)u(jP'2=-Q/LS$lu#`=Dg[-j4o8EH:OKqhr[PPK4-5QQgcApef)Z";:PW!MC9.4TiUef$fgJeWki;+NdikUt^4Dt+3Ihe:"D2*&Z_k0u5J_4)kpq<+X)WaroA\C2iNpXaijAc87*c=nDriFQTc22SSTaboFOr[^W>fIWQZO.'6%PSb;OO@LBA^f"9W&%.oBd\j[r;&hf)B?a4*?>lPaDLI/sT#>@tFsY9`&cZa%W\9iKnT!Drq#6n@K(S_Bn>jI?quBGa3PbOT1?'joRgZ.J,%_[n]+;E5u3a'%^2eJ;*l9Bgdf+dp[O&fiHMNuj!A**>!lVipq8).P0'p])E1k>5pkA:ga_*Z&&PG$7C^mkiDu;+'lN\b\CHjp@c:AHC)hn29b%@:[gKUu's,9S_Q=1(s(#NDk47u:hM_CSR\RrAe43kAG)rI&2T3X;li>9Rqf_eq0-]oq>)pVO0XaJ.!q1di"dV4H^$er^s'B1D`9;,ugj2Q)V,AcR+g`Kk2L6r,`3olGB0ai0$rF]<<)DG26A@N`1@@9+&=QRP>-4V/rka^HG_&S,<^#:5Q4mL\qaW[4CUV&ff9QOCj)EtdZ$[,]=El+(>k(L-M/A).7CgL!jRQKoqFTfs++&W]j3]t_V0mq1\_^q%F1QQ@>8E9g3WT;="Z'+e!b0ju\fH"cqe6&iB6-C^3FQ',.1Z4$2(YPi1L0VAX7dDA@'>#N8_BD6:8>A]."9blVfP9\k_>UeGXghJ@plLG[c,i!,jga_)O#e(/M.X:-2>D6:8>D69U^o`W]X:=;bDSG)=9:gV1q^(jW_ic+fXd2*Am%EEDO3a/?qhK5=GbE0**9$ka%X8B711gMU(1ZFcs2@2Qj&cR7;12$:@d.Oo_FV75f7\kR[&=EI4PE!;TEDN.1L$Z\=Eut.?Nk#nPL(\ugh=$/YP9"=*p.bo[fN)k]lt*K'K0G4A!31(slL6p"61H@`!#Ek0XPdC+f(4l,Pin/^mWk(;2TJK`\BF-O;=Jnj@lT!u5X/(-0.!_;*CG*o:/CR",nB_LK+H!*^Jo1o:5Ip1@KgTaU+r^d,;1u!QfHE\;A^V5.blN/WXltK_Q=1()C4ofF>O;Yp%CZ\Rg(b:j"CDtllF;icF3jQ,**aU_0!Q[J8$fol4R?S)#m_`RGNqjoG9eIV[da[c@"@jT0FnjLUrkX8"7qc<#59-nMLqc9A0\57tZc8'Yu]4Z&0@O;f/c(0a%%\JV)nSfE/PDBjG+$#1A!U&a-du&TNUN$XQ6^iA\$nI(+pjkAIITc1(F@aOP*N4@1^<.#El$tWN&?/$9@"SCM0h1*N,MFhMZ9]JPV\Nu5*KE&/Js2YX"JuUWC#f9^a$.Kfhj^:aX?]!DOQj7s/4O[p1VlI$=tpe:3GHdn"'"@i_qfP^7tcocbVob\(6#7D3#%5$F^AOl@X&Vc#B_&X)P+YX7>-h(N't*F[^3T[gKSO[i,Y53TD=t+-oq"#^Fo>WO8VYl_r#aDKI^#;UY1g\dAbqWS1@_[ba6!7_YFf`@;C4rj=2#%#HKXq.[)U`a6bPa;\*O'*%k"H%FZWu%d0hUP1?dtd>I^81?.??FXVO6"-lTR(u=p>S1&^O:6HKH6+Ja9nFVDEp6V[Ec[>AmES\WfAa1o5(%e+"(uOah)rc"1.Aeduk5;M4:mp&[NAWTlDck5`>-Wfl]8dVI*LalN>R-@&1q#Cl[JQX#hIMOA6AfYq:P[^.Ci$JXH_rrW,ffX4)D@uaAEJ/eKJS=Rqs5>!R>%tm)_:-$)F2iX>)`[j/'^bQTWuaiR_u8ocWnnl\IW$hd(GTa4N&DRJF'=XPjglQ=8AfT)oR_7O+bth5mQ3>Uq,qIo>k\9#W5.jWQa**a$UPVS:c9%MP8h!ha5sO.1*Hj[gKV0K5dl1X)P+YX0$?ABt.idEYJQ^h9P/,ANZO-CVIncpI2Nnd`Wld;1oNo#.n-\#*9bL)B9*'J=`ag!'4/c!d)*[t6!=X[Dnc?(hna[.@n(iBLZ!pAjM"YnIr&j)HBe0/]@-$Vh5:=V<3X;J::`2(C=L062GM)8@mfcN?jq>&)]PrUuj*UJCj(lQf;V#2+HoZ7o%SD]\b&8AnIYIF(A"uOL:ElQ@*\lm)#.FY-RE/tf@4A0LdV]l?8N;lL">0hN#!!Viclj_-lppeln6&>=j8!H;`=Qi0>&j)f4:Y_p3J6=?fT6_h/sT;OrrPQEj"kf`D68r_QC8aXY-dZ_QA,.ga_+EM?pZu[gKS_$fP-M_`eiRFf5ST$F_L<>A]."?![bh>P1Co$'lGlE_Q>/?I;CHPFl_3"-#;h),qkl4Q(/`:PRJA#/m04>FE4*dI<;c*F`='c@rS_aD<\SO=[#h@>+R/\/tFEDK3Jd#GGHHdD]irZ5O!>32BuR(VIs*&Rt'TuRf[dj*9)>Y]d-F0?XHak6$_O=Pt(ta7Z;)(khqoBtfIPj/s;1,m`6X'".ga_)/go:n%XgZ*K_Q>kP>D69%!*Cf-.bsD6;K6F^%*XWGE6KTu2mSZ;*MuNsoa+9&IkK8]iI25aS4bj&3Z-Aj^'-F0/p-D0'cM?]9IILR%i8*J;R"sjdGb$e@5_(pM*G3,CYnf;-Qu_&@,-bi5Qra^#o,^)-p$k.R_Zd,A%f:rb`*M=B]9rUGRO,Ji,l5Ae6^GW6^a;3$*%T'#N8_BImX^eH`\d4USbt"X`HBm(nLOQY6`^7e%n]!#srfDCB4./8`/M%l"/Eg+h*2N<9$4/_'9t6mLK2h>'gWIS,8m7!=]LOmTqPb1eN/QWXinK%me:EA"u-r8Lr]YnD-\)e,)5Z#aG,%q!NplhlIj4A659@(KW+!k:/)6h2b.C7foUZ4R5S`Z!`%`A4lu(*7=uC2E@3:;dVsMpS(S[lrC=ILI%9R3(j]uRZVSdARE3!rY4p\WD-/@c0_Q@,N\%7B7Wrm]\\5g&h0)#a_g'kI%h"eji`qSY8X%C.#iE"o<]+AipDH-tOg'Y=#]Us/DX`1=[Wt*u8iDtS5u)`;Z,^LH%X4Lkn8`>#ZgEdEf]Nd$[-n*R5@@k1U=:U1a*Q7mgpd_k;s2>Tb^uLEY$"du%_23M3/rMo3hHDBH:95ukq9RMdYh*.nkD.&!pUjZ3h/"4If5bGmNB1B3s.b.cE^K1T]ZIEs:mm4b?@o//+^c;8J!dP7@5Dd-NBo9Y;teHt1CaJTX\-o_$/T8ja)?=_0YV&h$F0nfkh#iB^"P9gLBJoJM^j:Tk76bf158>3>+kbAT[.KRIBS0>bO_QC\WqB4QCgo:p'[2j.-Gq1oa[q^O=_QC\Wp2aD0_QC\W$?R,&eOI(!jKKk_>9,31Xhq1IiE"^l>5Shd[9d2DCQMTc]t^;a<_p!hdJd&KcO<$Qn(1Bl;YkY]_gM2^[`ls-s9lF/\.[L/'GqGU#aUV+"S9BUER5Lo6O-UXa#Ni$pes!Ve;Iqctj]Kp,\PeO#&V.8/c*\7TJ?9U)sRc0sdn:N'*Q7473:0c3#s4Xo)MBVDB3"qf"'/MO!oI4Q?#GhWt&>I-$hu:@S+1I6e0L;1c,7kVXpBR'Hh.+0eLfj^7YJl=)SD@Lh*r3sA6#9ut?;l1D4&8@MY*AdG(SJ(KJo4'(RjEI]'`h>1P8#*Le04jC6/.-YKNj.7Kj449\CFWieOB8k#e(/Mg?!H0Tq?;)m;T+F/%'EZE3!rY>mRoS,M[$SKNj]lKj078Kj3pGWeO_pLKfI:Kj078m/rCjDA@%(DA@%H3O]nYc]me8FET&I(U"TElQo>t3*#Opl`VsE>aR*G+3j29Z+/?fSP^M#'Kh_BnM&0O@om@p\@4f6amMYZS@+h@=%X$+KEcf1NjFlli)XI^%Bo@9pjL$0jAqLQE5E`tP!er2N^4]\WEV6gY^sXH**!Nq1EF';%>SkH$NhTgf/bT=AoV/PHA@6'md4son@jFS0a(OR1-X8k>UoWBPZO9RKl6=MR5/pO8F.@ug'A1aZBX!r6s;\,97kJL_dom3FG3qQ>D6;S6+Bq)pH8iD@<]6j.b5"0i$XLHaK.@UA\c5#-bR)Q8OS;2:c>1B]FrH'&N.1Db>,fV8t`^s5W/6\-b+kju;lJj=D>7He?Or+UJTN_B\s31rt\V[dbu-AX$GRJR.I&n[i5ET7$Y5P/(WA?ekl>RPd$qWmjR[gKTZj@J61YCp+c#n.D`'lI#bD"DVHc#B`,r?pCc9)]fJ2(@nN@r\PZ7mC1_Z923/H8o-74TB6>b1^mX/Kb#=,p3&E&![Q(<_?C_9-nAkR?I7%a\HG?`k$)r5+F9/)=5H9c^uYs7^s1[LI[Tuh,J$,S?V?t(60#2q#eTp`?T;KT5dgWZ8%Y`^g\AmDHpAYV-p<`$6epA!G-+7/h1Q,Ggeh:mI[:H\,iCW!X?T+Adh%`!3,PJ)&c_pKBP+2GN-kCop\003%bM7lXHLh,!1e&P3b==/>X4O7OD;OT225opu+]KI_6j[VfmVt$QbhH$3aMXc!%29^:&"!*=CRX-2(sVR79e2/_I_K`:1Dn0<4l]TP(^Dn)dI"&X%BP)e*bGL^id>JGVA'R5=^'2\dO)ZqK=\n/Wkt\2p`O9'd14kf?4"FVo_'B,_J,(kQ=.FRs(YO0YtC_o&UnXhq4:+P\I%W^,ZbX)P+F^)Cn>#"+&JKj3s8B*XiDX&m0?_QCiLkA[In_4]afiE!R"VY^\/]!S)KX)P+Fc,6[#Xhq1Y$YSW5\%3,gFh(.u>@$OQiDsklDKY$md?=`23=o9%9QOl6%kUkE^7pucbE9#hB5qX>1c*9#D0NO.BE(KGl@%%r>nrA[7Y^8sFC/AVL@%bV"i!m4Gs/=#5L_BTYrPp!.FraKu:XC0Ek4WcKa&?SI9R'j2*.T3FgqMq/$*p[L^#fllj8^DW.B_nmhfT#Ga'53:#q5h\--^0(XYp3.H:EPh/5T$mRhip\7[j=7!685G3,k)&T/>$'lMP,iDuH,R?;$pu;+4CS+i$bA%8=IKSq"k^D`'"k-9-?AX^LLlVY#UN$CM%U^@@%^?Nj*'cXW]b8X!0R"$nIV>cCs7'/pW=0f?B::pUU:`#R)m0+FlX>)(,mJ#BgW(`$_qd/Y8,;JeSct`;[f91E[p&,VSAKG-/(V5;BJjJ[aPL451$(ln6"Qdqr>G*uIQq:Jr&93"@8J?Fp5R&q\#\GT%,q(aW*s0oV?^R'cV=tl1g\phdE>lWASh4h4`/:!<#`l&%CP(>[osu3Q\6t,3X)P+Y.k64I2le^O5N%4M&(g=3uk7CNp,/k[TjLkkjS!m!B$'Qpb&%?VL'[P)t#(;4.iP3pt$NN]PCkYJZ>1VG&sl.(G`$MDb&IQ9J\T;o3FH`"'T]e$1G.PN#H7KZ,5fBFJl)T+,]"9mq3j3tgK[SR"P^J^neWc-Z_:`t5s-M5iP;4(M0.!*[4.(rD-1a.e5;<'903PQMLVSiAQ6&c=QgpNBq*oZW_T[kO-459PMs5k?Ab;9X6JBuMj\D>_*aKNj.7Kj449\CH:PX)KT.\o=]hX8ZMLiE"oN&U]7C^n/@*iknE3!rYE3&AFX)P+YX)P+YX)S\gFX^um8\!;o\5g&h38Ef?Z&b.Y#4j-[X0pp.P2YDWP-r\H#tt[UF>.UO]raNrpsB`,ef0`UR:nE*(!R&Mrb$1RZ+/Z$eFpjfJ`0L`:LM.f3=\(YIDsU/ZkBqH,*M@,2i?5e'h(j$#)l&+M^\sYJPoThoP9ng3[ph!(D$UWYEq2\2qJjg,\$&q,`si\(.o/FjVqMpiV_kPD#3(_R2%56/Vq2m40beB<7`fN&*">%=l9$:Np@]pY48!VMAW?boqp^1+r\_3H2D9WF$G^c-S*Z79!^*+cPd*qbMVg`]L\h9Je"bIh!gOWi<%!W3M^:[NauYR@U_EKipW(O.C^VWmI>!N1<:aiYs(>Q]I:R%#IgF?k>C(>I4R8lX?6oI$"DH)]-]FuhrHa[pf7V])a2)2CjG<=U&TMVn9nC[]d!6B$u3;4:Dl6EpOrjKNj#tHObdf`h:,k[HG@oPc2EOA:D69eO]rhhG&tc=0OM+?>hG1TCrpuNCVq0\(8^lM^]&;r/P#f=KWi"oE22O*P4Rk_Q+Xidb4fK"KD``\3kdr">5/?u";$q75@AYH`@$mQ;u4+R"aZBG3D;7+s\n,Z1sJ3dp^GH&,IsqX2A+cRA`J;2!:(nr)=Us+.fYkAI`CE'6c0-jfU.1palmo)_t-QVBQ,K:5&)W$i"9s]&p#S\6hJp#"rNSK7$Ne$@o_E;ikAE&#ZPBo8//&@HP/qu"`H_Fe^tZb7ubYL*U0_>8nEKgHt!?9%Jq!_";Bj0oChneA:GjQ>JAAi6RE8FP+)H$h-NugnTm:%eGK*du'od,Fd*FLZ[B'+q\pA*fdVm2`.Xhq3WXnj0q.bq$8DRC3sFV3S5j+8GkXhq3WXW7:)\5g&h!>'-+3>aU..bq$8DA@%hn,_pO"?"&up)LqZ)<"WVJg&"5_QC\W*;r.4m'A9GCYZI6k%\CG4VrUH%HrRn;!E3"%!_\0K0\T;CVY-n.-J5G00BdY&0Z`0otKQK]%mcNiF:'UP'i=8!k*r06\NXp%A;.D_!HG8:\[ZDgu3pPa%;MMP!Qgng_J1/"\&4#A;ZZ@KouTte`6/T0ZgYi@!8-Ei+^R]T2Jd\pYZ3d$37]AYW$'lFb(2(h]hga_)/ga_)/ghOD+\!e;q_QC8`Xhq1ejAncg/fD?KZftIm*R72f4'CcX3o"JW4B$:ooWVkTk38&^kDkn!=W`s"5.t9CNGpBQ&H?kM2?!7+SrW)aNY3Dr8F(-6Z?`2j5\-B4%2)FkN5+kN5N^"g#jg;Z6',IlJDEf(D`OW2R]3jcI6KTR$nY2DIX!_([81QEL,TMH.C9/+ID=2F.X$#ED4a&j?!s%'Vhst8TR?V7TqZ/LkhX9c[pKi3#`9^e_u6m+4IK6/2rXf"aEOR@]t.PDPDeTlUUT+)uC4.2s/Zc#!3h?u\s:_IX\DY6KX-UQZ5^YJJ6pmihNJtj`H[$Y`BOl`"gr^[,chMl4q<'C2kh29B5$e;,M!<]Uo7Vk!H`,5\V/2M&+1(]FkD"ch*f&\bDL52\;Gu(FGRc$%^5H9?4=YcNCKMT,H!'c?>^s^L5ut^.-"17$F^AO$F^AORP)IZ-3o1;&\6Fnrq2mVNd^7)96dg-S1cn92CNk0r4/!BQWoTKp]rS/ghCLJdQ.dt7N!icN\0\GiM&'jCNeTBq*#I6XRkDo/=b2;aqf&'I9C6R?]DTTnc[1rIMe=6fU*>hKDOAC8YkU+8'@)B@)At:H`=D:lJuI4UXc/X6SsA=WQe[fc"Pfdt$V!B4KaXKg!!t2cd.;qH/VPJms^VmPguFgi,JJIc,Xj&E-[K4aO]!tL9LIU&e35)g-:$+f;S=^9"l]c"lU\Ud5?&%C7$[gKSW_QC\W_Q>.Q\CE+ga0#4%Chn9U/-6^C"HS5nF/b&-QnoKNj.7Kj0OjE2t)eJfk>N?r)G[Kj078NJ2>P+:*QA#_HG[KNj.7?(9VaD6P8.$`?U'Gi=$A\5a(C5nF/bE"+#H.blN/C+P$B"[N\&5nF0G,2=['.bnbiKNeUG&-P91"FD?J.bs;-k>j*cq3(cM^&.Sal>HY%5QAN8]jes4"Uc*3/6P;1#RNp*+VZ(E'G1N)q'I:_&s5S8KV'^5eDs@NUd05m0cg#Vl-4?_4O)pS.A#Z3\GKq:HG?ZRB9$hFh]tIs/j0utR5=fcRIbM[pAL*c=E%3u[c69)iSibSiSf'no?=S,pjWm\=9*Hnq;A:)!OWYVE>W+j>BL%W't;`N1u)+o4?P_g4?P_g$P'W\[hZC&MMBlCLPLY?LPLY?B>NQ8ijO.kgPSg3NBMXhaqnK4Ad\Ng(S'6;LPLY?LPLY?B>Jl)D)F="cj]Q%^hbENcd*VccZ24(s5jZ\TDSh4ZepP0%M(sRH[sk.gZllj[hTDa%hB0]%hI!<_emA0`GN#WiO7b)iSibSiSi`uE4E$[XgkK61u)+o4?P_g4?P_g$dQ*0"oD=qFpgPUcALPLY?LPKNYiO7aSijN%Z:!Z6lOiRGu5OE9D@1tJ.iU?"6)7D#3OfF$D7gf@3o\?1"#G^+IXG^+HK*,[9E.rMC&%C[&_%hB0]%hB2sK#;HED=q_R(PCB0G/hG(N`Q?iSibSiSibS=`CmQ\?2@I[S"J)!rWW&TfC7i4bUrI&X]#7#W"9s_Xo6MN=WkLe,sDa)OEolafEb3hWC>bqu,II3amSTZ);L9Jb2c)?F7MUg(eX0B8hRN-EY3P6s?Q\h6>3Nq1i\_Dd9i'OLqCkZ>Nl(SP6^X74(1q.o2n]RI1D@XtU]Sf",\AP%4):0m3gKX%:@a_4AM[6TJ^'/Rh58g3r<$u\1Q/\7j[X6Z5/VDQ-:``W#L^M$O=MugZW^g.9fjO&jZ[F9^"*685OIngp@h_;f(,X*I&hUTB:a=c33c(3sPPu^hq&-`GP8LiO7aSijN=OB*k%DC]TTDQ=Qe[hZ@e\(0JId3-f,C+BW6*c-V*^'G/>a.P($KM*+F#>]sam+,obZIV9n9ac,;.Yh"/Xu[f72:mJ$AbPJ`2g7:K(:*-53m>I(GIecP58%2.OBe`Ho[5L4cmC@1nHe_mKG@@si5oUT*k\Pq#)BLF_I(i2pg)>U^XTV^mI4nN?`h!j&g(*mLdj]FUcS_L;/o$"-UNB?H!p(%uq55,DP*WAK>.@ZZ>ZtBQAU3a2W[6d'nfh8*Y.hh[d)/u2b/st_pT6RH2,mcOFe8?IO[\0V+90Z%:NGQNY.g?iBbUG6j+Eu2*r&me!^BpC!Csg@)Qbm$S3?7s]59"Et'tO?M]/Rka%E>^@G*D.+SKKOT:=K`o-hm*9sUdkj<):JOg=,mgHrs4:$'(*KP;po#Nq=&[rLa't;^$KA2:m.rHkT.rHkT.rHkTWtuM['t4peeY8ed?sacMpusjWN!,h=)M)aG"qsl/mDnhF@^gls8IllSi,T[NgLs4;,H'CltV,s?n6Qk$f'[GR"aUlb/\nVii8J*C&PQk25[(,U7cBP+c/M43&1a$p64fM$TE)o#"8e_fD/0H@4cC#:XOoeNX+ct]*WK:@5+2%0=-!!cEI-'FPk@`o<]pPe&r9;WPb^68Oc)$Coq0)c?/$E@0,,\'XE3_;'3T\,WdOt=R:(=]OKU,(@XD#AR])D4biMhB*ke>B*lP-]?`:gPXaCgPXaCgPXbN`PcW4D8gA"\4ED'ifR"2mG`C.L]h/\cCL%DLYD$S9,E+:lkY?WHqlhLRZ0T2`L_Ddo.#!U/$PN_o\3CK+G-l+'b)6H/QT@/b$SVs'pJ%7JQ(elf)(nIu8k[=r5d;/[=C,(O^DES*I:T81sO+@`cG3T5`=2d$"F8g752baXqe(iH\](#t_juMndPXah5)3p&/(b4oP7Y?Ho@4gr:tU_?Z,cCQH,T?243+)h,o\K"n8dHqlKE*e9P)07"*jokuJVUceeD=t8#C[=Vq:4k)s--Er('^am`-!IV8[8up]6rLEPotgd>Bp-DUpGks2E@(5aFHPA/4"Q:fgn:Ru">-3K308P.%UQW^qfts3n:j`K/f_OlPru*di0KO1\F!H6XeT-hDC5hoDq;7Zd@^1?3-t^EG?biJjF@C_!Mj":7"HqBa(D#1.c*"$LUD+T1<-]UEm#(o@h"GXb0DiEZi]Z!S;+6"BuFTRY=rmiMJ'*d&S9B1.L3)0eA"m!\*OT]:hb39Vi7*\r]0MP.IJb-npeoa>^QD?*dn32kCj<%?FCEATNNdQs-A@G`ATK27Q*O`Q-LBHX@aFH_YWHV^]Yh):*mg'G:E>/8cfV%uip6uE-/X/s(4NrAIeiEf]F9"&quug?>*=C$$5DC2%[tO,crUs7:,:=`VD)`-_/6Z4a!',ik!f`'*4=^GejG@R1b?Z8DM0pO*SPq%'Q$#q[!NgF]VrHe%6a*M']!V4k\4stHk>LX9bAZ<*pE$0K+HD^_m,/Cn4CV(30Cor:9BjG".g%ssP7FM:DM5?/K[3Dk_l'CfTuFVG_OXmSeq^iFr?V_kmY$NDl*1!Y#2#0(0$O=hSBR2]Yj'AXf[62qgRMKE/[/O7eh1e=q/+c++rds1'/o"pKIs*__+R9._CenQluYd,]#F_d#s?kL%JiR9IbXRl,AaP;$e=WSqGgWK92XL"AWJIJhn8d6#L9Ee87*1m3Wd>2k.Xf`<`l@/F_EFoC,Yt#2#65O_R6ECeY`>8oLSFJCcQ0s.g&"Ut=&H_s@a6a"rD89]9*.E)=]C0C',dl0rPeE*g,?OTF?Vb(Qf71LToFKKC-,Hd\J/NKCV(!t6,)_6u'#%%@AUfpE)79cLpYB,B(cc:VO"],MZ4m=M2ohLPHTmt:61&&IePqng/Od!S)lq;P=dqW9U'IdpcaIf1_*^H;n\Da"EXofp6=lO(")(OW[qs0]VW>Asst%0l$p2*n.b!*p?Rpl.>eP+E0<1,B]P2'X,bAnJhoRlA4Md_7;DPH\2_FUi?I$:hS="GaGoTBt>;LUV,TcZei.DmHgh[n5?4_Tj0@0h]$jG;n=3Rg"$1mY747B#1TN?A=rU$g1K:F9"os(AM#mXbOFP,1sVTUI(i^FVDEp3>;CuHRHIt[6rT[4iP.k45eB>4!FLgf7j2#;B1/_5LSj_.pk:4Z1O/tllc4NoHQ?qaTq=U(T66GpKpO"6/M@n^od(?JEu*B#rQq0#ktJ.GOn'Ee_IhB57F#IppC;odR=fg`U.1#J0-lD<^Q`[WO%UfX=(L%gSn?05lA>=[I",3h4ur!QTD\_s-!ochfKU[sdN1e%SN7oaLWW[<*f\YSg%DA>CV;YR-0sA:jNj-?'s]%'JrVi6:$\p?XBh3%W^g?NS7a]>=19?>-cH5r9L5=>U/o_+oeL>51Xa2ZP1g&JDc?^hq&-`GNS2`GNS2`GNS2`GNS2`GNS2`GNS2`GNS2`GNS2`GNS2`GNS2`GNS2`GNS2`GP;7[T-'\%/#Au/PQ\SQ->[SBo>TIB]LHWko#Ss3*KsqS/k8HG%'QoSZr-RrK$XFrjUgf2tt4H@l]H-IcM@,*^9[tSiI%BI^lbPMr4O?Q[ZFM"aBR3W1[g$q1U9_D=u7P];VV'7VJl=JDOZN_LY[KE!0iG+rZ6NGi,6)$&D)\0JYTr_ZQn%,,L.DE>VcE(jcNu%nC#REXZQW-PeKr3Td0KcTEeCc==I2]s/FfO+fiDW&@5V7pd'@NhP)NfL&.cc%0*'#Sjb8$&0(/>3N@h1jg0d/[k`[?GeES/Vo"Y/%'l%gVA%CPI,W)R+pA^Z*N?_Y#@=Gk![p$X#1q!=bRY3I-?X,b#oWc)<:*JGrmYVZLCWmMLaBn&F[8e()d.Te3t9,j[DdV`csPU4^G[,b_RhW.$:D;e!]1X\.G)Qp#rll<_Q_oB-;K@UtfH>$8X+jnqcWV8CK9lX)Bh1J%EHptE(o5$L2]1Z\@P\M[7/0k.U8*R8Z(3G8*s2'g]rk+VVdLY5BJpV\LTqJ(>na_U3f%.'m]"05eQQ#/V&.1iB'o\rE7M68noe.X=d?pctqc3d*_9d:"LFMgd6P.#^dI&hU*)&C):.Nh$_V*1'F#+o@W6`hq>'bd:!0P%KBH0k"a9%3uI`O/>N](G39Jd=\#fTSph?_Je1^'A:6bPCc>eD"Zal:`VP+BbTNgI.T4Y_Xt2hFd1TCbK8=G8^eMn8?r;tJCe5dM&ek%Mde4n)o,.f,SN9O'6/L!]ZFm,_.f;37\Soe22,t?!.fd0h]I?[fo\5XrN+$NB@pOM+`.>co`@?hb0Uh82]LFHqRK.sW\"&*Ob$radE?m]YJ9^``dp[!L24hHEc+2MW.2GE3PJ^I_23qj=^Si@,,f<<$?[60he.ZELqKpgWPRe*2N(aaV_R.bb-[o`(-#TbWq>HLu-(IN&)/l>4-;Ku?u.D;7K#%^&JU2YA%)E>K\4o?Z*.K)[n#aa/H"'oLCe7GG]8p-Pi@,AC"I';rA.]MQYH\GN)l7^J1mm5^];rB`])VWN-&n_/j:@!BoKn6n+&A!8t!dB==9d+]G%Rfb$_1]]8pUr0J5T97%_NI,*r-;dd>/t(1f`F1&\]UVA^dg=2ECk[EsD4,PXrD&;t^!^JpMK%;H@60Gk=N6!"6f44q*G\?39C\?39C\?39C\?39C\?39C\?39C\?39C\?39C\?39C\?39C\?39C\?39C\?2?t[YdSe@%79r84eCN@i6gN5\ej1u0=MAI](Li6b@n#Di(`XTAXT$%"(`;OndI@Ii6\R7'C]Yq1VdXm`AhfLU+,Dp5'@ZHR8e&i&fdI*U_I8]pLS,G/3d.F=67OFqLlN!=1KBN`7/5hrOE4A\Q6XN<)P(1:PT\*aR@-sji7(q,-5@OmX/4lk2W%0VC10S8TXNoM^MaeLq&IWo:)jn,*uAt'5s740WamVDPXI@.Vl([_0EW"cFLKi77%j;;.uB;_ktRfQGrj3-g+!U$Wr<-HWn=S;I/l1O@NAt;2(2(g1.g:/#tZa*tNf5?-`.s]M`iG^\K+4#M+UU`(H,Fpdu@jb'ioZ_/*Ie,To?,$]@\+3ofmlEQZ/qu*Q)j4i88Q.6#9R&\(SC=Rj8p%et[^7mD\MuY?MVe:3SgoqhP8\[ks>KZQ>W]+bto5$J4Z"+,p9Yln&&TjG1_"68DW;hq*pn-0RZ0t\+g@lMq4u`PVF/QhH?_QSOcmJS7Sq[102^*;;2?`T)a;lFM-Qdqa$Xpp6KgD=a`I3dd7XTed;ZdDt?*u"RU@YM8?qWrn]Tfr0fiHO*]<^@3l)dJ=?MtsaBC1FtG6qUtG[EKS]a%oXG6#@=r]#$=DLQX-DFc_$rXNh9ru1*k/8IfhQqO9='!P!jP%$,2Q9`7SKc[u^7@1b0!\LPDbEljMM6j7IVdaLIVZnV"MC^djMq[G2l#;@qNb,/>::rW^O=OUc8[u<2T_#:g^8-ML>?#"P;M.,*"YQcWWnSc.Z\6`8KrP#;o'@jjiEL%6I7'A_^(1!\2h>1?#!G+uL]gr@P7RA>Z+:L$qEe"a;%25\gfE32gfE32gfE32gfE32gfE32gfE32gfE32gfE32gfE32gfE32gfE32gfE32gfE32c[K)haN90MZl7M)I^\QRuak'6oQ"#fht*iV5,BN)$MXAQql'$Zt[^^e>Xl+$CW0kGe^I+n^+H4YE\1e,i&F*=C7a^MXcs2lX)I'onh#:7RSEJpMea<7`#&u2j-oSQfuiG&pdapn>?%XTTcC9WfFq&eKL%;^h'-:?%?AV&Bq("V/^2r77GofT\mSg4Rl&>44q#8Y=K@(HR/G.m!C$>Q\o)rMC^ecNRjdLf+bA[PZ2a"Q9h>OlD@%M=djQoPsE)t?29d;e5jH1UGK"fG(7D5Qs;;'D9dfk4Zd%`pWG8$HP_WP#nsrE!4C@qnImTtj:mR7S:mm%a+P,(@4(H3E:'NAoeoKKc\%Xdf3g/E#c:iZQuTV^02+=:J[.po;Ut'dMFrblcl#rte(!mWg9km1NGr!o1U)nB=TdQb?OqXghZ-a0YD4Xo2o*(a"@M<@W6<6rdPlb06YMR_R@Bjtmlk^(-?rjF%D7ki250-F&"qtTBkTX[FIs2W:7m,udq<+Ml:m)j\t(#gL%!iO^qBddF1\-\`<1`V@DqIIA6V&NeaVYS.RVj[.D24:-1'>3]aW#kg78E9mLnZieU,`VnC;m&(C,WN:S34XkKh'=oA9U1L6-aE#>Q7#^6m\c3Uk_TF)^B!*uFT5q#QB@'aUf%<$`7q'W-t):t79`b[g>P7$AXZJ7m7\P3@Z&(%>bq')&X(TpHdNN+]rf8"Lbb"JP,U4oUb]8oXa[gT`.YVT&nEEFb3fYO_jM/p%NDroeFZS+37K2!(U#W6a#]*FJZB49HA_6FZ2^a5[#[C?#q&F4K>DOkbP5dP4F"$c"_eRlQrr(96Nku44rGWkYDM4TGD3fVK9$k>^qnhWeF*o+"H5N[8OAthLH2PTY)*_pg#TAogiD^[[MAb@#87(Y08M0>O>7[?dHH'NNbQ?%<&@U$h(22hN;KnJ[K:O9_s)1-@Gu$:cP)]*kmj+DTRRkbsI7d.$[CnRl<[i)m=j55M6FQ2dQUPli2O5%mL3cVe98.o2"aXAM.HiUh@#GPEqslQl:T@;^(7g"FD5Ae_Q_b_g"?I:`@&=hPAZ4N3ktm*Qka\`Lda'SC_4NB[iA^#aD#u;gfTQNN]kT76P01:9W7rQ8hG&Y%\(/j'0`5f,7,JU9V_b%eAZqt\h6`id-Qq^sFQ:%FL)OcUgW&"f^M[&Ik>,X5k"LC?0.5b4LYe\eS'KC8'3`"*IWre64\eWKZOLoenBQ[Ba=!f>)FpJlZ1fSQ0X_FO4GELL=[WKVUl@d&AIE89mB-k21[oq:FSS_,Y`)8in%c!%6_:t=d^4rE@C,cV;a6-:Op`gK"DEs'A3`N`[5\]g!aRfE=^BT1TR&Do(o$Vr0T1[Gs@DbC1E$SMhm81^_N3.'>AA%>PgMDQ/9WgDiP\$[uc3_td=<>ckJ&D7(>,L,L_&42>HI95S(8MM&1r!U)@MJp%j.1h0po)$"T#-Zk]#TVnk/3m6@;/$4S7@4T:"G/;P5Ll`tm?B.>r0*FEa:2jpT?oOC(_b^@d@k"pI-/d5[/Q03HPX;FR%,._=+Ac&H_5\[b<#%`?$a2"05kuGaXgeUu1*KgN`6*dIfc!+@A*B:,RSHWJ(ZtUPR=\$I#+()#Si%).Cg[&(-nhX*X&M6-1Qir.LVoIV?jbKMP7_\"PU57?WRF`RSmhLPs`a]_DrZc"h4u+i%S1Gp&pg@Vl=/tC!gQ1c/h_n7;MD+`#Z_^,=(NQ%IC7Z4SQ/!A;[Qef-.&M;X]?Wd[&t"ZT3+ct'3\];[9FTbuVYpjP:[W\dO\66,`r,0O%pR.k@5eL"S"&$:AH.Wp@"BG<:W@+,mB*G9#.'d31h`nc.^3Y;^n`I_SZrkcL2nsb.Y7#^Y$/'T^7KBSH9lI%!1iX$fPKYWd$K>U="Vr.-HW1u%$b4gI3%J"Ba_a,e^WZ4eQ`/f>s?bPMP7#L!pU4AYj&3^d9$H.h-D`!MF"GH!i*.kY`saZ:]ss3.2_\g@*t9l\N4(OQ9_!A0^;6FC;5uJjiTAAo3r8"?(Z/R'h-lg&IY=T7-%gBT,q?lLZB1e!5Ja?OhBl$"tmcTJPI-Z_[s"qR^.b(P#Li%!=Gh@+LYF4]A[tdL#P4&\YU[N&?l.eQ.5q>:o%h_5s\0@F>K`?+$>"V)))$SM6VR`OoMpM@Hs(RAK"_@]g*/hs.:tpbQja^;esD$>;un=oR8aY#I:WbLYtQj:K$d[%#"*A;4cu5+24DeSk<@c^\)DKER0QX>lC+s?O_,@&$Y7`Z,.BGCY:$L&KqhS6V$0Kp%`Z3Ioc;l=uqK1JN'k#IUJ5I[2'^30E3r?$9a.OjcH4fB6+gmJMp.K7_=]5H(>mZnk!\LD%Q@cBI!3DWP<:[Z:VA&5'ARNn"!UVM(/@2D%Tr2DM(5$o++f1iMF1JT%G-s=WNBg."(J-MP)&R.H^bYe5/jd+.dIDs:hTd]AS\?(YF_*fkP\kSBr4eCrUq[<^S`HFQGc7/W7=EkgQZcQ3/-Qduf:Yd8AI>(1SX-Ae,=4coMQJ_Snce)hY!j/;=L&meJ`:TW]dLXhauuUE8VoS[L$3n*PY>=AT>V-4p\R,h*"Q7JQg0G':;@Hd.pb3Q[ugPRUC?ePfNPka4XdT6.GUg5D984==d5F-N0L#P#cY-_J2XA"'kl\'Q8&pNko=m+d*J?HW)b/jlhdKW?-08Zi#.kg^C"M/pMkq%9jQ\o'fo#pKpd8C&Fg'VfNl+gG?!-a&:Rd7=0>kO/E>ZpVSkYinuJl['Fl_N$7G1LDY8]7V<.gt&#Yk!bd+D_@bQ_ac=i#$a5`=/$Y$/YNeNotZ#'RT^SFoA@g'lnTVu_*@\^4G*1fT"':*\E8i2\Y!F0-%E[:XC0#q^9\BUsQUkI;F)@$dCC(3%kE_/IdiMcoORXl.ZtU!6IChDt`q2ep-Ddm6X/IPJRJ<4#6llYF:;?NmUd$>>a\[`T;U\gh[N&`)-^bu"8c=sGFlDoTXnl58si,5JeAZl;.UL8#=K'()<'J@M^:]p@F?+(+0elRL-Nl\-ik[XCDgS+e2>)=$m%7]j;lCbQ$#i8`*plsj*5\FeVlh029eY]!p6!KT.WWfsAGF^odCOHZel`.a5Wtah%0<)&dlH6n@>:S-h8`_C+%>(dg,)*M/Hni>r/L4\',%"[<]Ap$D_a`aX9&dTt!X62<_m4A,t`)00jug],Pjr`7I&`@d\O_d)pH,iKTcM$pYmP\$ZF'+4&V'lMj:7lK#rc>7J]fBRP"1qJPlJ?96,4/'s=(/\.[CqJ,NNPBJMsGmMmSC3/ld=fRVOeBei4+TSqV!3q,$cJZl="=rOM./%_<@TihJ(LB1QsD:$iVF>R`dVK-W5lbMi982]=C(7_NWBQhok=1o)1[9Dd-e3LY,E7G6bj`Tn'2MmaHQ8t"Nl0*2^jD2%miY1Kn'\XJLP!p!V3Z:\T)@''/5H?<'==$("RDa=Z37'Kf,Bd'b[t,(\T:T0nf7mV1o\Q&eGG6W60JpJQr8%tbps;Xu'6\E/"*NEAOE9\Las%VlELF&@s06$\U`G*8$c-s[2Ae"N[5mtJe*b^38&m!;6PK.O8"$M1tY"Q`jljBH>#L":OAXN+N(_*9/FoPNI=A,t^dB&6HEVsl^Ri([*u*5qh:q2nffT;g`o7S2C\]H)h'Ua106P4G8ThOTP[TLY_p^#Wg5n\@7^)n;>iJOE$GLr#sjgE>?3.)`t6N!(]\X*/afL@AWC8%@+W+67\m\)^Zr??o[(+1YP[-dQ-$^Jb4uV\,HDNSo$G"hP(Em$<,%HDW8(1\_qjTH00DAWb2%(X6HDk%;Hg(-G>*[+Y-1G6gC1e>raJZPM=kX"YJ#Je^Dn>/AT3fEIVb!:FGDGbc+Q*np#3d,NQ*dqqq.K;VkFX!bY8jPsrl[Rh6R]Cb$Lm>*c>9f?[i$XT_G4AH9/B+ORrcr9X!"FlWnF:53F2Xi^0\$HiRliOkc^=b,nB!##A?DeZg$M5)nRN'',CkVLO.s*UOTNu;J''Oml+%=kQjr13;I*ET!4&"#PA-Gc8$'K5'glU__of>f4O1BBklK?O[luU[-^I`*SClmqthdfC-[^[*."aj(e+Xr`(#;*K'-ohH,OrDcsDRCBm:kR#ZbDVc#r6).M6h?)CD#jk3Jka"C'G/upU5RU_&VmHk*hr[ktD-heSp[X3Uc/ihUM7ksD2f?`5NUg">;KlL>p1*)iJ3NGo9r-RncJ+Ng[+h9kFl#tflFqt4,tNqm$d+Ck#c+k"#=Hm^Ldf4SP1/B)KX#20%#4`-([V9A.rHkDRG3VRMVF$CMVF$CMVF$CMVF$CMVF$ClIkWjkAb'N.rHkT.rHkT.rHkT.rHkT.rHkTX/FTN-]T3u88g##[lY]RmZmo@U^KNJG.;8QK'\t53-a0aLMltHE*a>kkI%M/[8gAW?0$,6f=DaL/`_$]Zt)TUkHtWJV7bC"]=%bgo,?TC[hka5=UuRc!U*q>B@ju40<#,h?P[:;Q<<_QQ+_>cp`;lN,BTaEG?TPMC2LCFMpnsK?aJ[_h=&U&ZeM.d8SFULh9GIO"CJJAr(\KDfaZ:\[5nHZm$G+f!P4hI2eWE)91V6"H.;5"eq).E%;ej'q!D6uS_\/.Tp%A3Y'TRuC4QkSg6t^^hIM.j??u&p>3o:'D))KB'@=/NCWedY'LFr6k6OJd-+#m_ClcqDfBb8Fh]]A\KbfFEjrK1*Sjd[Vpl_A,8f+n\^3=X]haA)?;cg:C4;-I3IHu0J"i&kCaZpi67I'Vb+j8nl=4$I<6/Z7HZcY7oT:J`^$-1`1O5X5+<\'i`AJ7N%7?UJ9p5q>n0[b=[)9=%T>&\SImTNgF@95Hi8CFS^F\W%n6;8./D2D&M2:r:;kh;k_c"d8bK`@5_N3S0_/6W:W]E[S33j&sq89-2D02c8:SVHVq;/F?hD2o"O>I.\D;Yg>R=EHn_K]9)UR9YSgCX%d;br=A;K>)@Z)<&_tu&+,gMq]AEmqKAO(MTi,D`=E)^g!S+HkTYM_'mt0\oS)$C&a=mB^BaU^]-/6ZJ64'*nRqn8dI%b-[c4aT[c4aT[c4aT[c4aT[c4aT[c4aT[c4aT[c4aT[c4aT[c4aT[c4aT[c4`A/ob*8>EEia:Rj;^CI%C+bJ\G3sS:gIBMPSHJYq-D?K$GTq#L*(=Pi4HU$E:K4u0&8A$KtB2mTh4dF6Lpj4_@#b+>.@WdPpn+7>0Y4Ih:'0KGA;XL7WO@&GILZ3qqKY_HhK7o\beIQhYdiMh7EuI[sithgODN:Enhgf8q/FFEb2MOq!MKcGl&""\T\qT:()"=#pjf!5j>t_:KGTsPj>FE?EPiVXPbQBh"i&TeL8.Q)%(9\!VC+Xlhu.4X_uU6l49@I7om%Lif/r&ePUdP-SKms5%qoZ"?Kd2F@`0+,SdK+'e$fnVt:3.h%hIJY(NmO!34628G>AJ=U8)X^BAtI+KXodX2WDoqL(;##!6EEdEeEEdEeXTl6Lqn$iP1%l.;[c4aT[c4aT[S"MU`GP:/iO33F2f:.cr^#=?gf?(!>9,eg%C&G/KS*UpNs;DAe,t,]:3\J^!!]/p(lYi=:i@]ioEKkqdplWT.*tEQQk50u90H1^K"-W>[DXZCHPeo-LkHg"0!0#&]!&hm!;b_ALdcY5&J8^W$NaU?E&O/Y\]G2<2SDp;faL2fM1T3uL0>VIf,>pJ!aVUSL=n*&=n6"b"Q^8MHE.gMl4)Zf1r3!q#R1qCTWRsf]O-UP`n9S'2k%ouKu$.gOp@LQqa!DPIK588Xag!r?54/%09(7[8j>l"1>jQBg"4.#u#He5F9c-(UPXXh6tl-@hoi5XkCi6JafiR[+_5Z:M_P[2j$1\=1!+kGBW_*A5n,6/%.m%5*9r,PYS6m1HQaF@5U=b]rY?:Y&,!d6fR4Tb3"30I9T22T\O>9X9P>Ub0(-Cp+<'6qk,SXJ9[k/#5c8&(N%;gLQ(j7&Emj4\eaOkpV?FN-p5"(R,\+d!/q?\""g55)B0\g5q=>#8)>AReBi.VN8,M*^:l!(%*%9*r;g=P(#9&LEZu(r>!e9_TK`X&otc2=d#q`gI1)06#K1r#5e4'kSu/u[m6n_PBV_qblb"J@t#L@*a(!3NSOmr"dc)Z&DHrGR9L\+=!OekX:LSdfek'^P-X6$M$)$US2G!-EA[5qDm>GB.^4VPY\Jp95R7-HBP,H4hPP`aD-%St:UlM/eoORY6OfLG1nU![i&qiVlXTL'M2WnGWFC]6tF^&&hqAmj>LY[hZ@e[hZ@e\()//D8d?%X2&SkD8gA2D8gA2D8gA"+Dr]I/&iE1&T0+:Wu%S6EcR1-,h`Fl\FBB6QQR1V!,Z69BLqDc#XBTf$2!Pkq]ai-Ns^`_%44F"BXGRXS_KgBc3PG-0)5+fGEAE1%d4^1dUu^.(\8]fj#860K%(:XE0o&\rNQ@pL,sjV73pXph&Tgp':h2=h9a^?Kh/EMH38"^LEr1=H\A*,0[s6I:fCX([$QSjH_AJ]"-IgF'!W"TqOI'O^-1Cq2aRG64EtH3b7G,*!<(c!g=su,O,(??2p`'/#Q#WZkB;YO\tD:E%Ilt.9TG)4?0gJ=!/q=3i5&5S%/7eNEaf_rjl(cD+P3*f'o(?24cJ5Wf+CpBTWm83[gF]*T.G_^Y!a`SpPu0#0`b#DW(Bco:Es$%VU8%P3D+G*_0\\?AHLC97+H4^67'rPM[ENR;*nGhN[tZ0)JmC2oTr!e&GrI!kF3G^'0,&.*MG/1f/q7BjrGIZGKRiZYNCCS5nF#\qX]Ig#&<3loOt!2jn!_!Ja$]XJga@Ne91!^KEBkm[4gi5Dlf0Jt]pdkaoV+e*4eP0f"2j5Ue<^LNe"N')=b6c6d*]]n\F.@?PFK@;3/6R::nC:+C`/UAhTRg8t/.B*ke>B*ke>aTg'Fug(D^c#c30)hJODlfQ7[_"f3imc9;C.hq/Iko5;>R3W&O;L!$\fTRVMd)bE.9PSW,.F6?<8_1VXDXk3;6]Jg1[W#lY7G*j1t#ZQWP08K/%r!l*m;>B8$GOXlJ=ci=IFso#cLW2A2W)Y;a)2tKgjJ2J.\"A/'_7iHtiVk6a,XnNY-1q&h+,E7^b7Ec2AV7^o#_it#TWA+_gBF8;O?SpX!>1%r*@MZog-?3eTI8pN&>]E:q!'6gWCcmFpKun@SNGekhg^92++=4CT6p^D^:G,@aIsfIN@SFP*)>X,6Z8n2kXXEj*^:A%?\5B%%j4RVrLrh0q6sb\`XJLf8?W5gL:6QYh*Aa?o@;Zb0_)@QlHM72&akC)E"@ne%)Phj*9cahoF:,;c=YdpR/tnlrrMH:Y(]4JhZl3e.f";C@pu%ZUZcp/^:&4roEMpYY"kSj._@"R-:.Gc4:hPi$5aZI"kn9X#GU_.Y8:U'()U<3e,S]DN%rB*ke>;=,7@k5E5`GNS2`GN"*DC]TTDC`^D@r+TDXgkM4"`5!?dit\b:5'\aF4/Q=FNBf_@3*]J5Gu8Dr==8[l1C:fc^b::XceN3#S+TK*YdD?$+06Om8/9qWE+Oq4haV>-dVI4[@nH+j/0"X[6S/]nUTCg9V$1@r[m)R=XVe8N;iR"I),B^2rs#\9[aCTO[>6B31oN9@*\\*On9QNe4R=hN;kacF7hsaeA@"(nj'c@,\Qj>B*ke>B*ke>;=,7qfgu,ijRjTijN#%[hZ@e[hWD30t&:]KR-h\mlU&S7J^NMd*pqXC*MAXKAD!L,nrNNOJcmAT*V?Ss1qM73rD_!)e]7`>:o=`]]I=0;%r0X!'97Lk]gEM2Z8J-q"+5u@E8)$n=S?B*8LX-416n]euSM3&^!d%HW4YYSWdVa?0,u8pM`R-maV^8_%)XN@`rVQ)1Rhkk\4[>W*])&TpIfm&pKEE71D8d?%loCeV.lrBsWk8VGDqb>8&UcJ3>RoDkm3PkuQ3Oa/'6L\Zi;<+Q_/OlDkhA5Lh#YQW*!Z8E]WS+GP.tg$Bp%[.NbE_5ObPObfTMCgEk[l]>n3\9`E+OKuIoJD=oPqX,*9(3DFO/jNue(VQH31[q]]`_qmPg+OnjMs1i9/re7K!Uk;r7[K6>rgQ#;Fr;#Y)TQA%"WLin\_Y[hWD3Z"K]7Xm#Y?8ufLu"m?c)diZ<7oYYto9<9MNCroL#"6*g=TFAKo+C`$ii'#tGN@%o.l\r17*]1`>8]T>#mU7(4;n.MD)u7&3Hg#Hf;"!?ohmb-q.;c8dnOjP6%gks7$jGs]?aD=tBt[c4aT[c4`)N%t%p^hq&-`GNS2od"N]EEdEe0ub&W;/of[>NI*+`@%61Rj%#j;[/qHWq#T0[3Bj^7?Qn[kuUQLr58P1W<[#9oi=]@-_cY#Q<4"Fs7%)Are_4k,2X9&UJ4d7tMr#RZ2-GVC+lOo>@Q76=o![M"a9:r!b_7#6lRr1gG!%k1LF]uk3HjK!0Y;PC3)&(-\!?@BOn(h1H6btC-OH(a9VP!\?,Fuig.GR`.q=Mm=2no(D5FAAeUNOddT5)E(h8N8Ls]8WC2r"n<&mgi/t\HCjc8)6).GB]UMQ+)LiD*,a2TD\SS1Ab/0r7C#uBtnbdcKmbN@uN.^>cG&Zn#g(gp9B$mhAGCmICk9VT=SphJnoj'^b?$"95MT1D.F4668rd"+VnBER/iT$\bI-H#E]#PO9oZ\J&[3gVJ"S`'dBg2mNR)(+.r>H+K\Zj"Mt7JO7U(k]eaMVOOs_.0IE160ccc4Ic15nsn]AD.mk.0Zb!!%Pm/dlr*oITB4j0RBNe^*fY*(V1t)%mP'MM+II,;G?D8['IK&iJB8>6+^h\$VF/!WW3Y:0W_TZfGWW?,h/QiQ765)\84H*-m$ZX5m1#B?QM#iUUBeYMX[K6GZhInEV"TSO=S@4m=b$;:2qgl.!?5IV!TrD>"23)_j4]9n[l7XT`Q*8jiO:+O8^9+)o)e#Y1RWG;kK/TAWiq^nEg\0P'$uCM)fpKQ?s,Jh5e"&+B8t5HT2e,!IrZZ_OCUmM,V'KG8WUg2aDFta4F1:;!>ips"3ea[#J-b6Zk]eTFrOgAc9KZ-D7-87`iF1B\'dasna]u-l]Q=CA.I,0jeJ").W]jl/M#p'TFZAgF+5BA=ZHFH\$EARNR)(+g%T*SO7c9K[X/F?U#Ze/p@cgm\J80B/q&eW6CKZ97P9#>6lD$:<`D?J,%q$4L-XgAhI%X&e!0$Z]./T!AJNN>7j0],NjJe:eQKK[q=ACbTJ^0d!bl*BKA`?&+iY%9f*JcmB'LX4^#NWEp1e*:'1Ir$`i+QgMVoB?E3^rWr=*IISmHe!!"^,[Ml'G!!%Nu[+.Ph[plbu25S&kB)r!_Kf*H)DnDtXW.hsbC'ne]!!%u) +endstream +endobj +54 0 obj +<< /Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595 842 ] +/Resources 3 0 R +/Contents 52 0 R +/Annots 55 0 R +>> +endobj +55 0 obj +[ +56 0 R +] +endobj +56 0 obj +<< /Type /Annot +/Subtype /Link +/Rect [ 211.822 386.842 277.174 378.842 ] +/C [ 0 0 0 ] +/Border [ 0 0 0 ] +/A << /URI (http://downloads.sourceforge.net/kabeja/kabeja-0.3-src.zip?modtime=1165501366&big_mirror=0) +/S /URI >> +/H /I +>> +endobj +57 0 obj +<< /Length 2310 /Filter [ /ASCII85Decode /FlateDecode ] + >> +stream +Gat=-=``=U&:W67i:tEcYn5b^14AX(]C%CFa(cumWXk0o8TZ50iSe;;kIVuF@KD=K;IsY=cR<620(5er]+"!&DKjZaL-k7a4=d:rGu;NWm39!YoD?"iVZb<@o$(O'j';YP+`+rL<1afW`"sn<`Y/3'Yp'h<^i8==+^mkYl;$W^R.oS8PB17on-Y=O>r76lhlao)D*8#oMo2eS#]a&>8DUuZY71tY8Wd/3a$4Y[lUY`P8Gn/1n[d?,aGt<"`'Z]e,b.bAI!E9b,1ZQGeVO4^-&Ct;f=>RAto`tAi`lE/D+_Zpmq%PeJcu!I1h9CUqB&<<$s&W]42d`5nkpLn'IXdbqsaDDj^._R2$Gm(it[ar9O@'.C1smXNNG)RA/tg[<0UTeQuAc%;egQ0PZk+<,WL%CW?pI7m(L@CKdQAq^j9034;TahpiO(o7B33Gr6:cJO:WlG-Y]`$=\mLP&Cp99NMDRQBqr)=f:l!,)):-+nT_%5O;0@TN"?RcW?X?2XJ,sa+ZD"$_jjqZsSR)Y"2aMj'[N!J3[@Sn(jOI3NgH>VC%jqKFghZ-LZIP_]Xh@M*u[R3:oetA73$fQ)==\#Tc(GKo]l;DsO^WOYqQ!3^Q9*.mO4[!rAB8#kC[#0H'-9+t^T_Gk#sVj"k1L=Vh9?X_D>j`faoE@2[lV6S+A_%d`Ld#RN)G)VS(@GE4M>Tt:r,kC@A:L[M^XL[PbV+APHU/ZR>k.*,2?/3$/9dAn4?@YUnc=g<219Va0"]c6%dZ9EGJX7r1K+"*h%,F]r"Hm#?.Dtg$Z'mGL$inK%GHOb%Ya;R-(M62A4ZdBkiCXJZjHi5u2,NAKYciVJ=7E6gd)p]e5>9rM/[`(jF(N]F1%cEN.tjSI4,bp4i1BmJ)49V@tb]D>P5>\%U$m/Ot@A3uJ^''S^pf6U8JRE*>.Y(\UV,+Q5VDQ6)i`gFmb3YUJ^.Vc![rK.llWj"@G'Wm$Pqc<1G"1);Pf5(5uQaATX9/H!9G3D4mm?F0E15K2j3o\l?k+q$sU^uFKa@>a\G/b;UY+U\j;Y68FnsSrkC9G;9k.d9Obm-2;4X?Nq*mhP$iEb\0`2i@5'\&,EMTa^5%[X^I1ob2LcakU^"1$8A!SQf5!,E9o6j>@\*kn+YQaP;#A"5e1"!a0DV5Krj+.:g:%8DRP@pu>)g@ihrTWk7k2i0,S?2ro(7%\0-RC!JVNL9O]um=9?'EP4%KZ#nc*[\WSnqE_U`?l\j!f0QMQ);!n>;(2i2a:F/q]c!:*Rk0\a0"&`51c0Qhrr%[5YDr&qf':gibY,7B3;Wp.).pdk"n4sB=C3,!)a@AA&8H"#:.ZuX9W4Pic_%&"<7IHBIJ*Ep\?Tj?3Kb:_Ro`4"IlR[S@uCEKm=>/o^M[E_.:M?m#n/=MOAU8u52X?O%<4NtuELjP*4_l&R!F-\b61rKS4&e;0\VAtt;8P*:2%:fO+DAqHFaXIglHr$`ejOA%;Skh#RlQI=ef\CQPo$9cJ:BU^c]0RCg2Y!67?HT4,5iV3M:;fdl]3,`a0snnXoJWBbm@VZS,#SW+ZeK-E=(J]$<'$bN)V=UC%STmZ[<$ +endstream +endobj +58 0 obj +<< /Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595 842 ] +/Resources 3 0 R +/Contents 57 0 R +/Annots 59 0 R +>> +endobj +59 0 obj +[ +60 0 R +61 0 R +] +endobj +60 0 obj +<< /Type /Annot +/Subtype /Link +/Rect [ 470.239 692.055 489.742 683.055 ] +/C [ 0 0 0 ] +/Border [ 0 0 0 ] +/A << /URI (http://xml.apache.org/batik/) +/S /URI >> +/H /I +>> +endobj +61 0 obj +<< /Type /Annot +/Subtype /Link +/Rect [ 113.533 407.055 152.53 398.055 ] +/C [ 0 0 0 ] +/Border [ 0 0 0 ] +/A << /URI (processing.html) +/S /URI >> +/H /I +>> +endobj +62 0 obj +<< /Length 1590 /Filter [ /ASCII85Decode /FlateDecode ] + >> +stream +Gat%$gMYb*&:O:SkV3*IRabVFlpJ+i1lEtE7GX]RH63un[aiHn8l:G)7K7d+=&Q?f36jlZC3V^!1H[JAomCdATDY3e'KPZh2Vlp^,d\/,+tKlbjC-AT*J-fr=AoHOaL25XSgL'WfCR,NcEfijXnd9p!J"8hreO!^<3IY]Z<^qaGLetp#baoW?YfXRB,7pV(qHd!YAkLGZ;K9.AAqI[0/'H,m:"ZFie>E'29Ml=fj1,P`PiWBicLr5jh)/JqVJ';rGSoOjO@B"jIOg8&r^3o."1b0hj_WYmbj5S^`%NZhOO`9pjmY3BQ*D<41?Ld,*%?3"[-JLCfce[tU*;/6rRG9QOo]=i@)SF']U..qI);E,.1+a)OY$l_Q5.u@F-ZYCQfMt&ZAi\>%\_*SR/jVMRUH`uQ!TkV$=,ELKCT\+i>\M=@'Q3?;N-T0jg^=5'Z>#*M@6:"-kjAVd&+QmIP#L._IUqN2(D:aXNMl'Ic>8Jk=QGnsm?)nE;C8?l8Qt`g]4I]tPm/&0MU"3:k'5$:&+&$OS0Z*s<*7;5O@?#m\DS5<11mDJnf1`q>3?q.R)a+/i08\dq=ZJ1PtmlhMtjtbPuMG0O+qQm#D7+?qq#)(JABRHlEY2;"fmNfrX_16^be`"1C]hO*i!(X[2X''q\-/<4:c%5\K-7ik=ZI"+7cQD8/q-.Cut1Zdh6%UdoMoKd">=emAR.&TO"LprE+9O1.h7VY;9[8$<9^)ag_1JX5>VZ,`_0u-(M+-\s(Kn?7fsT>4q%"+c0-'/(^O=.m_dmIDiT5Ad@$9?Z2<'"GLX(@33j.gW8X/A!_1@e:5g]MIMUQ%W83j/IXI6hFX)$`X2Ja"?h-iF(p5WFsqSSk!@Qe_gl2d*fAfD3T3K-0h,3d^?h7OYoa[^p1je$"r\R3LX>.Ni1SUTZ?$H+Sj4M=2Nr6Ap8L_U'9l#29T;;'k*hC)Bd)Xa4Z;K=KEaT`48Ag[>n,PXY\`bkjM)R*BS4TAJ'/I<\8q5_@rjJHE)m75(Rq13`W/Z+kcB"cYk9N@&IY3GNId!W3,%*m#tWCMk/GmSkrXd@iHtDVTt.&bi8/=QhHUJ9Wi"l$ck\Vg\E:3V_po#LEkf*rlVl-P>E-4t\G"0XMkq*sB:s=I.TA6fN]jZtc3)C[^#pI8SPR'.sk.I2ogfQUoa-l!J.@#_1o&Wtlo6DsHsoolUD +endstream +endobj +63 0 obj +<< /Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595 842 ] +/Resources 3 0 R +/Contents 62 0 R +>> +endobj +64 0 obj +<< /Length 1990 /Filter [ /ASCII85Decode /FlateDecode ] + >> +stream +Gat=,=``=U&:W67i8dJ$`"9bSPNK]dAPZL]EQ?3Z<@7lIOMuqu=;(2P:B#U,Q`r_G\Pr=?`,^nLHXIY;]9peYPJ8G&M-]mZGPe:r8`UH;NNLQaLi<0Vk>FY,coQ>eT/]lnXkUs9PIHIlm+f&o@U"c``!-CpZJgjJ0l=n/9g"J?Mll[LoU;$[09<2Ea1"?D=r?QalEOoK]1]IF01f&^-M\NdZX"p4=3Kk!kk1)2LUHpQ#FdUt6#T\f:J0q;VEioB"Hc4@?=5[,@#],[YkalsKhn.ebA!E[;MNI\T=6Mrg&1d/_r]nDr9EqQft4;C!S!ZT5?+RoZTBe)3k=3aYnG/rS)`*O?]FPem&>0tTKOqP;/[!7T%.S$/i?"KZ0Crk#^_uU@.\&Ij]aE[fci0O%TibtNJUD@fs7KUED)=e;U'/'b;+`XA5??so1G.rV:bbX(K+=glnY])_87nq`_b<)D4\pMVS$*`XuR5B-!;iN1;@#*>C?7Xpi8OtHN!j6bN6@:q<5Qk35F5E+NeWFfL%,I,9'jbV1uMOb(u0.I8S62'4/aZjQ`RRfW9+.e'=&W17j](9QPJ(=n6E,Z@ibNE/2eaP_[!m4Ak8acW(Gnj)KISdpdNjV5V2t7Cp@hO'IV`Cq05d[UZd(C.C6H;TVQk99kmS`s&CV$G;N!&[AK/;J@\+=p,o-d,$Wq;$'$+4*N:A["F1Nmt,s@MS$+`H_-(g7NC!#bOcTobPu*fI4D[ZaJ#Y7Hd08>%kA-@DF^hg]q,di":oq^Ug9h#.nC=&%A$f3S[(l>CL4H_(m3oY_$tfe7A=q1a%l7Co1-5@1/kiFkb,R`B-fL@C^e1gW8r(M&meS4XBl>@c4(lsH@Ob@I(nNaI2]KpI0K`N4O)fO15Im9rE5Hc%53N`Z.PkNbuPg=';kMYC*Rm]^Ge8*eETWl:beYAA1Jq3'd`:<]0*'0!#kYi/DVWT)0(;lOf3KAU@G#em=S:D7$U8u3QNj>[/'RD!XaBfa[f#*<\+,c)SH"HOa)qe4<\=@CFSel)2I%eWBar?ehk@We;iuksmX>ki2lJ4^VAUnR_&OO9,q%%5)@,\nIc"r;$h#lg`!L9IHh8\.L50`Q#_LE$=(XndTIW?U44Zr./ah6H@%[eKl%',Y&IBXOLS`fmF5%10[](l6a8[KZ"SWY@bQ7AC-o(Z9`Bin..nUj^&.cJ[mJDeO_:UeTZIM1MC-F<>!8V;ogugbS=C[WSo#,gnoY6`&QSPa+SMZt6+"sGgt&)lA/_0@I\O8_BGiG>/tCR2,@g/8jE5-aHiuKpB9F(.(u*Fan7=o_]TOt%Wbi#T9[SS!][`0`iM&1fW?:p5E-cQ%98t2&%F@f=T+XPU(lC-C&Hr/CjQSuoPjTK"AA\pg3^dCA8Jm4:Xo$A06^tUYB>\llfenRc/%d]Y%O! +endstream +endobj +65 0 obj +<< /Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595 842 ] +/Resources 3 0 R +/Contents 64 0 R +/Annots 66 0 R +>> +endobj +66 0 obj +[ +67 0 R +68 0 R +69 0 R +70 0 R +71 0 R +] +endobj +67 0 obj +<< /Type /Annot +/Subtype /Link +/Rect [ 179.521 325.755 207.52 316.755 ] +/C [ 0 0 0 ] +/Border [ 0 0 0 ] +/A << /URI (http://cocoon.apache.org) +/S /URI >> +/H /I +>> +endobj +68 0 obj +<< /Type /Annot +/Subtype /Link +/Rect [ 206.473 276.255 261.967 267.255 ] +/C [ 0 0 0 ] +/Border [ 0 0 0 ] +/A << /URI (javadoc/org/kabeja/dxf/DXFDocument.html) +/S /URI >> +/H /I +>> +endobj +69 0 obj +<< /Type /Annot +/Subtype /Link +/Rect [ 100.285 242.055 122.776 233.055 ] +/C [ 0 0 0 ] +/Border [ 0 0 0 ] +/A << /URI (javadoc/org/kabeja/parser/Parser.html) +/S /URI >> +/H /I +>> +endobj +70 0 obj +<< /Type /Annot +/Subtype /Link +/Rect [ 219.526 192.555 275.02 183.555 ] +/C [ 0 0 0 ] +/Border [ 0 0 0 ] +/A << /URI (javadoc/org/kabeja/dxf/DXFDocument.html) +/S /URI >> +/H /I +>> +endobj +71 0 obj +<< /Type /Annot +/Subtype /Link +/Rect [ 100.285 170.955 150.784 161.955 ] +/C [ 0 0 0 ] +/Border [ 0 0 0 ] +/A << /URI (javadoc/org/kabeja/processing/PostProcessor.html) +/S /URI >> +/H /I +>> +endobj +72 0 obj +<< /Length 1685 /Filter [ /ASCII85Decode /FlateDecode ] + >> +stream +Gatm<968iG&AII3YWTmg#f;3i:Y^mLa.DpCkZF6mVs],!+:9hl."#-?-U53V3J%l>eW,q1`O/RnE=;mlOJI]4*`W//sgmZ$k?EQ6.1X7Hb3+n-N0FRAYmlB3gD/PV-u;o(_\$a>7WQ+I^S9s1(+J,`5e6q"&@p:c]X#Je6kUm:dOqUITl?#@Pk:F[/Hjb(.3-`!*<`rY8'5H3EmX!AmJuCS;L1=d!GKT&$F^:Ih_,^j,ok[>r\#Q=H%hE4LhRR(eJZg'0\`1V2ZY00"$+=#UP=q]]?@N?73dWPf$j&=UK7T9r5@&EAEHOH,\hJE,Cdis-\HU8Dkl($*$=h%JXmfQ?MKFpgZf?-cKtg[0l0FBSOFg#0A(+<>KfD%[D6JR!#:j0F!QEj`JkFeb'L^/iQQ^>8>/:t6:ZY._p"h2Z+OeP*5i`1L>TQSd#k)Jf1FGsSJb>J]*6;DKk+$dG(&Jk$iMd`5f"7)o=W$XuR=)Wc&LDbS[JE)cLu)M<`Pe=VLahDqIe&bSYG!5Q&B5&.`=OckEh!*)5)0!h,crGa^lYW_#6A_:PX[MPYIad3JsgftTuaqDF]fCgifORPr0l-W=8/%W-W$lN:'FhpD#2n"-(,kugb1m6r+V@-qWoQB=#0QgWLd-7l"^[&[_)1[Vbegl[LMfA7@RMS`D?nnC;`2M!!P*#.Mi5$^qcgpe].;%,lT+C_tlI;=^,#QcNOeme3jjC2F3@k_/Ha9P7pnT@h"5DZsPIYdG5\O`#B>9oW=boQ&3Y=.Gap6YU*1pB4B49??.!9m/f+XTrWo.t_l'YDiI9QJ:^Gc!CFR^3J##W2kFC;+HoW,8(hZHh6S^B]*`S&5f3g$RsER?T4:+1UW0CSKTFGCQ&VhtE+bW7`"1&@NOmX(^WVLI:#Q#MS6iER>af52K&4#L8(K2DM3]C^n9l)Qp-V)@hfb)]_`5n@cAeg\do%Jo,]nr"+@cI>24(SlAb023-lSH.-??bL6+.pgq%Y':^-j`42_f<`g6;l(7r'3\SL02VM6UcnlM/lH$,$faN"I2=3JsY^O^SHcCNbPB@@N'+JRD#P+K2qgJ+@bT$')t&+!9fIe1.!8O=1*_71Ef@2cdturfAFfli';1Q_6NEVmleTt+]@5>'V$O2pq2SqH6Ga+chUPJT`HiL[:L9^_g>N5:-<>81H]E#>D66gQg*L&"@O1npa]A%h/g2M"#b4bYd,8hCFj'?o5Sa@daX_2-ju7tDo2Hb10E0XY>6~> +endstream +endobj +73 0 obj +<< /Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595 842 ] +/Resources 3 0 R +/Contents 72 0 R +/Annots 74 0 R +>> +endobj +74 0 obj +[ +75 0 R +76 0 R +77 0 R +78 0 R +79 0 R +80 0 R +] +endobj +75 0 obj +<< /Type /Annot +/Subtype /Link +/Rect [ 259.747 698.355 315.241 689.355 ] +/C [ 0 0 0 ] +/Border [ 0 0 0 ] +/A << /URI (javadoc/org/kabeja/dxf/DXFDocument.html) +/S /URI >> +/H /I +>> +endobj +76 0 obj +<< /Type /Annot +/Subtype /Link +/Rect [ 100.285 676.755 154.267 667.755 ] +/C [ 0 0 0 ] +/Border [ 0 0 0 ] +/A << /URI (javadoc/org/kabeja/xml/SAXGenerator.html) +/S /URI >> +/H /I +>> +endobj +77 0 obj +<< /Type /Annot +/Subtype /Link +/Rect [ 100.285 605.655 137.788 596.655 ] +/C [ 0 0 0 ] +/Border [ 0 0 0 ] +/A << /URI (javadoc/org/kabeja/xml/SAXFilter.html) +/S /URI >> +/H /I +>> +endobj +78 0 obj +<< /Type /Annot +/Subtype /Link +/Rect [ 100.285 534.555 152.773 525.555 ] +/C [ 0 0 0 ] +/Border [ 0 0 0 ] +/A << /URI (javadoc/org/kabeja/xml/SAXSerializer.html) +/S /URI >> +/H /I +>> +endobj +79 0 obj +<< /Type /Annot +/Subtype /Link +/Rect [ 253.762 485.055 309.256 476.055 ] +/C [ 0 0 0 ] +/Border [ 0 0 0 ] +/A << /URI (javadoc/org/kabeja/dxf/DXFDocument.html) +/S /URI >> +/H /I +>> +endobj +80 0 obj +<< /Type /Annot +/Subtype /Link +/Rect [ 100.285 429.255 161.764 420.255 ] +/C [ 0 0 0 ] +/Border [ 0 0 0 ] +/A << /URI (javadoc/org/kabeja/io/StreamGenerator.html) +/S /URI >> +/H /I +>> +endobj +81 0 obj +<< /Length 2565 /Filter [ /ASCII85Decode /FlateDecode ] + >> +stream +Gatm>;0/Kl&q9SYT]R\%Q,nK;&6HJFQ"24?ZZil747Vb+e`@j.NGU!Z]RZ3frV@7"67iDrLt^pDDU[nM>5biIm$ku\rF5K@bXE-+J'Oq'qClDCEcL/n5"!77:4PLg7A4ea\NXItR5g86?Y26Tg&-ji%(XYm4`gE#T&]Bkc\XbmmR>2-4D1p?rd41QI%=kl;HA9slho(3r:JgiY(p\7F-Vu(S>H6-\f\EUdtic7E;s/*asSg&l!g("CAU>2E>pbDR_UMmaQh-^3]\P2;bp!]Vk+)2kE)f:bY]B%!keaqqJr0U\(+BQ*B#RuE[+b@^1TofO)"R%d9Ss45#*![Q>!5?)D'Qsrnh>d3-K=Z7PC)L@9C=GJl^Q3;^LE4\WQ(Vq2Bl-F0&7^j,rEL,!=gIp/j#h--kMioub#OnNFeX"iS8Wq&V([=UT49JOp+NXF)->QF)WF0&_(ZB'/ec(6qu)Q0j+njNC$8eAWh_BaX5^pi^"Sgp19JtK2a1JZ79lbd`_c)]1p7>t%3AGH':Va_0EG@ZEWGIsPp,bT4<8miURMt3;$&4gPa@o_gqs&R3V;j?O$LQ`_hE\NK+,%%0d>o(&l4J7[Z(j8Z]iqE5>WE>GU\jiRbk"qP)FD]/5]iL@h^1r!@d)Dk1b=a?b7ZLY_EOkf4mE0DLTm3[*djR[)qHg](_OWp8\dte%OEkg0ae\1o7\SO?O1eJYL?bck6tW-kJO.1Fh!\"E%=]%jVC7s"qb`=9NdedWIEY*Bci[AS+AF':OoE.])QhnHhePjI-PQf]RMj0(aDU;3RC"nj28chRg]GRIT(0%W:OMkrq`60`>4YrIeJeC:/#7(/--g]0q^ZO'T^G!a@D;K;?hrf,cVqhJqHt+l=&Q["YaKctpjPcIP[Bdr2R5,qhMY=-5;I7jVBL>HcTSZ*$KTL<7.a>lM-7O+0?#je/E_?:G;I=01Fr_a%+>hc&KHNoe])("=b.&,#CI]U$8u<8)9uFX]o-P*M'L)*n1o%$.>C!##mc)i.8&;>VJWq1@:F"!ais8L^*r!)449W9KG\Bs>o(1l$ir/iO6Lfo(3^o`=Jl0>`W7ek8\rM&mGl'Z=oDH"cAG_QQ2DAr!86J58U`TS`1P[i$5#1(@CE!+QjUjE;=b.IAX4HGP\lsi0[j7'7qE.lpaEnnU,%'?VZG$E&28\\V2+nL_8Wk/k'(\3A0lkpJG_r5,rN7ZsJ-PcWa`.hWqe0@!:>Dj-fNWZa*H%8X&,["t"tY%gJ0bppbVDit!E1V82D95+4`V'<"VlVP*OU&.o[]B+Y51_nkTjJ4#,T1D-8TE75ea6eIliBG6ONEiaF$i,o)#iPL6h=^141IS\Q4p=AF&Belui+F=_+njN*d%*S#^Ap[B&BeT]i+F%Q8)YLZUqZmsa)]@.7DR5/)NNds0QfOu&.(HLlIsn3d$2X#l?X%2+h)?unbUGr);a)?ScV3C]PXZ&n2$*6#4V5s[/iGpKW9=PA5V8t'Q;%NSj\Pe(_gn*Etn^?2S?H(Oh@M!GqQPcXbD`A9q%%$D+G94j\sV#@e&R?c"ZHH!M=tl:cT(3M_EE_r;_W=C[EMVRr)chJb!o8fi-D3,EbNISL*f>lH+mdJOo?H74_=-h'_)b:=B;j'>Qhe+.]a#Y3B]mN@Ja9h,LW)MI8)2/:[G\P%ATokO`G:&/aA^M8EnmY0/ +endstream +endobj +82 0 obj +<< /Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595 842 ] +/Resources 3 0 R +/Contents 81 0 R +/Annots 83 0 R +>> +endobj +83 0 obj +[ +84 0 R +] +endobj +84 0 obj +<< /Type /Annot +/Subtype /Link +/Rect [ 154.015 442.955 189.763 433.955 ] +/C [ 0 0 0 ] +/Border [ 0 0 0 ] +/A << /URI (resources/crash.svg) +/S /URI >> +/H /I +>> +endobj +85 0 obj +<< /Length 3018 /Filter [ /ASCII85Decode /FlateDecode ] + >> +stream +Gatn+>uTK;'Sc)P'u"K;:b>>+X\0"82`lC=A@q5FpO]5Ub:FqjUc[%T^G8@&#u.MmStWi2)01,s][7tY_Vt0(B/86;GGeJZpeuUol!%0^^?V.nfs\#)m?I=YWg0aTk1/Xchf`?+>[s$026PQ2f%n5ZD5URdD_KLEX/>?ZRQ.ZRZ?^,ehWUt@FZ''/;\+;V3rINn2lcOFeS1p"gJkLteXnK)VFQj1oBFBebNc9Gp?SS!RP7,X$40eo_[H;NcHhS9Rg5;D_fo)KofE)5q>Fpp@6?0$#6L5Wf\3:p4^X@>4;I>LOdtlA8,>'W^V%1i?!]+#<_)pe5">!Ba8#OXEV[r$Q^clUf!;Sm`H/G%]>rM]206_=C=:I))\.X`&"A`UsZAQU'W>!=[/65-4F:a3@gTSq/&gDdZV;o\jN*nRIKg2S@1I9O4;<%5!n8e?utFU&*_b4IdHg$K<8^&r&O3_5n(0_\AH#Qc2D/,nP@MK4-dgLF4^4>NCNl+c?_?j[gOb>c9!,X1de5K8BucUnPa?T"%LmI+('YS<8!\T&FZQ9OuOZkmK=kk2],Ri@20Iorq5itBjO63mbYAWLWme,=RLRnuu6$ES%^Ydm#mZqp7Uuc'Z7dn"1.CQ<(/kk6$K<>9;RP_BR_HKUdJ[\@C/X--9EGH.1QXF>7_70p<_codbi,9CkCC.p2@E9XE=ZOoc[?e&$H+H0A6=*=#W''QnLmd9Q"ToYU=GOIA#5=Mcl'%<&q?q^:RAm%"op!?c7d7%X!X=GHHVH:uYD(BG)W"JOLS+]'Y!=lDm:<=Ua?O&QLMgMS^Lg!5<1qgS/rB_7CXWTH-V%N):F9h/k%FOMh"GCnuN)6Ehj4A>Sae>%LGK\(X1$c5*368->(;Z:ZU`#4_j[^JZ[2`qD((u5[/=MeNI1U%rRcpg\.3!)9$E6TaM^:Ju]2nSWmS^]e:B!49.6SCITh@B9X9\>PU^pC/8mbO6!gc15M%>@&80=G7Pe2$q$Xl[>ZFaLDT(L_0aCeUqR`B&);Zq_!-:D7Y5W^!YpO*!Q[4?[&c02%3D7X\oJo,AXi<_K)D/CFRBkXcIp]0[0p)UaDO+OD6+0CJ7`+'4E(#me.r,7=\;j[^KMRR#7B*XEcl'G,-g6XCJBX?>abqr--Fq#9:-[kR!c(P'oNDdEE;n%ss?D35u!EG2>)Fm_2;.#RmJk('^.#*DP4Os+LDL@jGm^'7q.ocrB-Lnk:pQ6Uf[R]g]I:]1R-"%/iUlcTYTjC(9.7(q?s8.a8*,NW+`7TSRe18qL@eoC9@:rF,2a)i2!`Pn*9k?sQc1P>6c+r/7C2Q\&+d/(_=+RF0$3/9[BcR*lL@VRI.(8#3c#H?WC]I8,qRrC5.j6HmVo&acWW,T%scm9ZWhLg(kdYB8)V([6H"QG_$jEV8Jj[^Jb]5-'js5nM/HP(9)7CF"+bEG,O]hhG1f7[?AO$2iae>/eW&tZefW&iceSa@/8dNN916([[U;MOgPH:tckk?N[E_N8CmR$AnEGi!JF7:&LrZF""=T(IT0Kkd?h3aA2afY/,!PD0iGGg\KEQt"1kakPgq0HkBA7@s-Z>))ZXMG)XGjs&^rLck(@YT2oF1RE-KIKTj`9+\D>?rW`iiS>KWEJ$IW)t1/eG9%[p)VYZfC?!T<$.&@W;;.m[RSM&<@1]r%,,p0kAOmo?n!(NP3s%$c8@"ms3RW]G4,]Tke2&d(iR+_hl,+4,JqL[Dj.3Uahh>:&*nq,kC=:I<#toO!CXpsTCLe2uWmCC!9-6QQfHhYC(GIO1qXC"^__4%]JP.,k047nBoO0bp`a(XG6eE$)X?7>b-[h)WF0$_2gP5SCMf"7n2/-a/KIT*"qi>$4e5/1Fn__YqU(V3)dX7$A,6(PfOEWQg3U7=Gl.I)dsO=>-UZ +endstream +endobj +86 0 obj +<< /Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595 842 ] +/Resources 3 0 R +/Contents 85 0 R +>> +endobj +87 0 obj +<< /Length 2061 /Filter [ /ASCII85Decode /FlateDecode ] + >> +stream +Gatn*9lo&I&;KZM'g*fJ,6U8^^sPaPeT!dA.SVsp*\rSBd>VqQZBIu]I6j9OQ3g.LMii(;CbBq(=*U(Ig3UJ<4?M)Y<2-O]=,XZdZB/',rlN;#;/9OH[2%9gC3`bVoAm@kVba?5_YWIp\]s(]Q(%@Cr^^LG%"tOgQm_<&35pH=,2hI=r=G0S.iJ2,@[`l+4^re`qAO&eY,f1O:jV9>@CbEX/JU]n`$8Qi?uKf3>CJta6iijo/M(uOpr^'lm3WGXbCg3f#s4=oB^etdinR[J";R?GNJTr%`DYi?t?di)-ACbo#u/6TfY+!-h%qAS"$YEB,eYam3`g&n\V^UCB-Un/?KGN-]bF>XmgK)#_)=7q!;PJk7DhD7.LR2Q6pmE5,[U/?W9g0A!'^<\`lflAF.K(_Mg&o.h>9J!:ViAH=d'hsM@$$C^0HuY`l$4(h^7.M!>Q6pmE9nB&%RfWXt!g*lpMIf@#?;k6Oo6b`^L=?o&XZX_CC^LmSIXV*-[C:N8oXs'o1JRXM3oOh5q&P9JV=buo^T1DbausKYq>SY)bJ,\`?KH>3#^cqMndDC`-@(uUVu1hh,N'jZaY9AiQK7"mT#JtGeH$MMks;F6ahtG/a!9X<2*MuoXF]_r`:TnF&>"m.bB+YJ+@.SK@%X@oNohcAKjG7j1`\p,9Z2'rjl[&9PD2\j`I;FEM?p_KD#'`[4/?KFK#C*,N6CH7&*[F8_?*Y-BU*b/1*FU&nB7L5lQZ+3?JU1I^LXd.Ekh,tX`*L6A\cSgq-[Bskp]3?eJ2_uTM$>*7[iQLH+Yg7/5(rUu2p)CRqk;$ajiN9h`odVO#t4=h.$c3*Qp.G3\OSm&?,D^$!GZ1;*hLD4fK9rj!$PJbPff1PaJKu9H1YqeA7&ag9d\Em(p/BPeN/dK#0*$km<\YrK!jC(6B.JNMULNH^fg"SGdLP9nB[r+tY^N$[;h!AD8P%Dh#S_t1C2;.PB0LA^%*ZgO&Y.j@3m.Ti41maUZ7u*;TUfqAR,G`4(:eeZhisf#S2EZSq+XRg89C"slPE69D_-4IfP7T!1$!lmpW/@&)iUtlT&=epq`*U:m)\oB>-$`V+G(?/I#sm>m%'eK[>'Z9df5(]MSZTI\lR<%S&HR+I;(Eh[0)OTS9%\[W]NGU]_ITY3Po&'&cI9mSAS_@ZZsC1TsXQH*.\4;T"<+^,kNb*+s///F0.I;<]p(,h(>@Ua&"#g]tsZd\d@n"25Xc81YdLq1g>RO0c8Y4Vp>TLP)CNQ1LZr49FXVtb;9XfT)K?P:X/p/TdoP#m9D-J@+PZ<6q5EPiqsINAnaM&%Fo?SC'`"YiUt!5gc"'Cdo[B/L8`?eN]G&H]n)i$sKIkCIs$utYrrZp^lE1~> +endstream +endobj +88 0 obj +<< /Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595 842 ] +/Resources 3 0 R +/Contents 87 0 R +>> +endobj +89 0 obj +<< /Length 2581 /Filter [ /ASCII85Decode /FlateDecode ] + >> +stream +Gau0F=``U]&q9SY@&YVUSuONiqq/BGZ(7>"G.d@MWDoAmLkI$IGUNQ+NVD%CK+u9/"XoOs[3*Tpa4K-S?_BVI?/.VLr,L]JOo2JM(J/:%8SZ4N@L$=T\P?\IBkfZ:CN4)@/q1D,\3D@F;`VliCr_OIZ(>H\IU\o.VQT;4a[pOXB\Ot^B\.I2"n/Rk`J#Q2YoNO]Xjjhte?`UCZG"&[SkA>#bK&e$]+:NOhc[]s:I"%Cq@_^8ME"*U09,?QM,2]oO7ptR)e=^_G*9G:n5ZTW>Jc4BS5\K47u"hLm3IN`el@Cs3@qYs]ff,,M'eL$:(d@C&OI:'-/ltG9$ogLk51J1p!b'_+C2u_XXFZq06DOUr0,@h=*!sYb@i3cqeRFN99/a[`U$@DjqI^Da(6oL@65M7C+-W4k\d5*e7q(m8>$T5X!$8pD8\<6Ok;%N++=,?-lMd?%idX7]L2eW%&d=`6Lq@\"=$2#T^[HGD];Kfl!g^p/>8De1gP[PRCMn$N0YYh%-;r$%G=G*@KKDfAE_=&e=61RV)MZlg)f-A!7Cn?1[0#d/t'6P9nX`W"?h<5HO?rqs^dZA;Mruj3=M!0/oMq52UiU"7GS!`gc/3>9q2*mCsb2Dk928)=J#-hL'd"HMIF.=cP50Mo/D1Y)T=,"fk`-C)$A`C>;So'AFP)cF2l'N@Tf".>mZ(UnfaWZD"p!CaKl@E`Q7e%qC!qW"HFA6':r4Y'HSIR@Ng(J3-:lK.)*.9Ji9agI<=s5s+7-/(i21LdmF^RfIT9^q=QOX78J:?IfKH%Qei?B5L5@`af-iZ?Ti1R\+/DXBrY][TkZqeu$;="=kK8Ym-%[g1F?+p>;ia[%KR#FK#p.1b4/a@SJF7!DM%l+PrEU-9XEK8;Z#\F@hSBDED"I;JKDb9N(8:`fWrK^8G;]dVa,s'LY6C8>h8&V\RQ9@lST/M9%`Q)'WVL#DhWZeEmZ3_8,,)5/YGO`_1\2H2YnVg#!O,b;s:O&CM:BL5=uiW/bIi(Tfn:)i"Zc[*(;]bYoWQ>/=IU\HH9hLT/9)"UTK$4UDKr?NVZ!RkI4dY-O'X3Dp]^+Q4F0F[*HEp5DT1hCtQKP?(>'.eTNWOB?QFS3rpH/RZ36@s"bbJlhRl@T"3JSUiWXBAg/0dprLdie;"GT`hVf='&H+]NW\uT/F&`BY1OIW^X&bN'[>;6L9]p>-lW&hCB?Nncfr7oBNoq+($o(eg="fbYigKH=pTSX^388FaAcNltUG#E')\4cs(^;Rb4Q85?R:p+"q`-)6nUAA%U^AWO/DFq*eAsE$!LadIkaPh%YPM>#%."6/P''hjFD`[jBN)>'<83CI"UIrbD%IdrO%Mm(&6^4\=2@:WU$KupnD3/Y>eGoJQFi?Om?cPFJY2=ZDufAeK'k"GXhY=Vn$A&A/)RUATTn:4$]",IOX!AL8`KR82iaXU[Of/"VB;hu=H;*ajF.lS')]IT3B[YiFa`"9![At7pLtZJ=,E9RFrH'8Rb1r2oK-F%D.EBaq9k8Bl`5%&rrK?]Jsc~> +endstream +endobj +90 0 obj +<< /Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595 842 ] +/Resources 3 0 R +/Contents 89 0 R +>> +endobj +91 0 obj +<< /Length 2648 /Filter [ /ASCII85Decode /FlateDecode ] + >> +stream +Gb!;f?*E:s&UjDW&FS!VYZ<&QZK1'ug[/I.+DHuX"@[5NBSj1NPspImm.fJ)ne]WnUfYeFBQEiUD4)T'B?n_kU%J$$jPA#?QUqlDB'(aKh`e`G'M0.d(."N+@2qM619:,&!7K?tZmkDLT:XsR1SMflp@S4eB@#:3QZJ`Y:3:apTY-.X$fLHIC5lsd3$Vf*lec$k$jRoTiJYJDT6o'@LF/FB'IG=_B0r&3W:!AD`+=80?OA73XodAXui<#r$qBRdqOpsZjP(%'CYpO$khrA[cl!unfL,Z=@$##S]I%R2CKEj;N^r(0SPqoEeNEnr<)s/"aM>8,LYC#VueAfX:O&WMQ2I>ETp"lo3+W>T\]0F@,0mhKVA2fWEd_,/Qs/N--',-FO40BRGZcH6pTe>Qg6]8-R3eCKg!j[,gcJTmV"^l>EQ+KZ8BT^p\Is7QR.g\\'!M-SMGfpCGMU\LKAg5'c`Uk^2=JR&0:;%5Ke`E\B#"_i4>ZGo&purKQ]9[-DPO/fQtK=Q+mVUjJg()flr8gA(qBFu+P?PXH6PPr$VS%`\;:0?8N+g8/DRT-_Qrl2'(4F8Z<[BYKmT+3QE7:'Pi=c(%'XC#qXk5M>T;iF^V,'s?joTt0TBo%8)2%;m>4G!J`PT[3jVDm,S#/Khgm(\"!m1o,pq-uVST]Ibje9ZEb]A)/sP/X\d#WNdF@(')NafBnK;eG''`HLS[R\-nPUoV_12*`i>UNVF-ReT1`eQ"MMh+p2c":4SI.CZj/qNN;pf.D&/R`Mq)hF"*Al'T&F)'/-d/A)[,PmELn)2\=Snb=grCH'C*i.Dn@KBE3eO:dKadJR^T$;n9YlADQ@]'Rm=M7I\n&9a8SFe:!oS_b.4d9S+4+@>1jEBr3NafYjP1Y93c$Tc6H=6G?_m.h.nq3\gT@Qql>iu&IA5eDq?56Vah8:^(aF^[r\>$Pn%IiLqXd(_?o0`\*eNi?B0]CA=`F&GbucbV,&8+I]6k8PQ<()js,/aOfd<^0TFu:bb/V9S!""VQL)XK9iO5Q2YIoI_CpVWmIe"0M4`e0;)['0pr`([B)B)[F+?7/!O:E>cCjiW!1V6MQuK9Sh2[=GH^nh,eo>7>\,JLetI#",e:aen-&JE,5TDfm:K`7c'mZ!`1YAdZ^(Z!8MUufjJo,;4-BeW8.?&Fgic1*Ss50oQQ$SP8Q"D+6A7_q@9iXk.s^R.K2:BRp[[;14*^>CnmAYFM&MSAIY>m]_:BD@8Ig^gb*m=]FHhe&&T>Qdiis6PRL=jF#Sh"&\W7h2>]>^#iRa!8_c6&^k[Y0obchPMqXj,il2dqT8HKDC.p7%D)p8FG6\*_]o"%&5>#Qq9A!9gd8llYgr^^S<=oHe`HXY/<4uc@-5,TI@D^&c*N/4-P3us7I;6\O!@5am\C!RMJln0;8`hu;B^_!s/EMfCEIA%2-S+bVMGV"eCKUF?kJH:XK%^SDr_%W+'$2EUN%.BUf+4,65rL$`4S2@q*]D'X!r*;Le.P_E>TfA,B#A(nlGQA=Gn!lFLo']S4MQc#&<#t7)hkRJQUfkJ-*P><\o8\/*F6HUQ4uC]Hl!h`UO\10^KP='tBa4=WDdEVY +endstream +endobj +92 0 obj +<< /Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595 842 ] +/Resources 3 0 R +/Contents 91 0 R +>> +endobj +93 0 obj +<< /Length 3053 /Filter [ /ASCII85Decode /FlateDecode ] + >> +stream +GauHN?$"c3&UjDW@/\Ma-KZU';53oa`,_U'O^21_1in'e+:=8cQQgZ?d^&k#6%'S_.6uMPFQttVPX+YGp[%>$"[>d97am8[/cpOLd=:$DmF0[F,k?T5_!=LI*s](&m=]pJk^-BNddn,JEGp$jc\p,uMdL@20C]-_]!r%<"%"Zfs$CYNhqoIbr2:Q\e$\r9LS(mOkZpVsTU1.1Z`UcGo=;EYbETQ#S(q8EZIgY3>ZKpeZ=4PUo,PKEV!DH)3>W'cZ:`3N"S'#4@+oU1YfNSsSr*MQ:l(/[P+t0;*Ec)MES.W9OF1f-UH-Xq]Kfcg.r`e0gT_AYm>HDO/(q`Oi5*HDXEehB;A&X/[]U':3jQ10<(4M&.c'"mknLWo)31pt:&MXCR&$34R7j\@oSWMC2[o3%F>M,]VP1>I%G?p&iM1De^L.+K8T^RGb(]7:&,8F4eD=,8N7@-f^M#ej;+)6I`WH8^?!hDl![T=%S&nHn_c0DV-UpDbZ.iT<*cF+4`@/_A]hRa9J.T^p8k&LZal[7!Cj$E-.<9S#]IWSQjN*9TnOju^&eeO(=-0-?O[a`6T)_Fj9Hr)DP9^87kWfaHXV=2Qn%]ch%HpNI-NBORN,E\bQ>LkInJub&E`]H"'Fc>GZN//En[>R@:n][,+6,dPnu-6+WI62WnkQlO&)T6RH>hM&BHCh-;KG6ZZuASg6U\es`fDil4G@]Ck04@Z[%b29-V?^$XtrqHCSr9q^\5!jq]qb/"9$&auZ18(Ta6Dql9KaR[rI(DtjP3rG%B-td-lSD?f:kqp-Iu9(:uDk])LQJLPj;92@G,*Y;no=#1:ElA[$n_X243:_-'3WhKeD%,Sal:ti;>FD*6;Ra0'>ArpMlK[\6'`i#4$4'l+C7u_$.qpcQBtg3F^*X^)T>*Mt,i(\bJ:7*'_#D1@,lHrtnPHh*"J@o>??=iFFtj_5$H?5fpX[olrO3S)E`ok4u.812pA:+,C3FpHA!@gGfLe(YI*S_QrB`flmIn`9$"qe.a=T>$@-^3nE'++>9gNi,)^l2#!SSW"W+"#oGEV#=D5SX''1Bmc[!E+7/jp-gJ+?ieJUcs64(nAEf(YeZ6nH'A6M,iO64ZtB2UW9Ef:K-k2mkWb,0Z-&j)9erU:OEPgkqhpQXWBI"65D``]5?'/@-Ag.na5)`oe%XFMXOKq>lgsR3]b;:*\LtAHV3g*^VgG9u0X>ip6U`5L)FEoc9"I.if9ItI\o&l&FM+rD!/?Ko.q.Irc[fbH-rP'q\cRkTE'PkuM1#nMt',N3b/Bc6@m0HnZULDN;BgleQ:43',g>-M8m&`@,R^qu\'UT5j$#7?./CB`ufU=Aun$YK9BK4V8,VTi+a]E&iF]QRg=:([Ff&AN5aK+-37tE-II[\Xf#0]AQHi+M1dhQYKN?Q2])P]Bi"$!@4!OUCg1=V_Ubb"4486"..+iLeSG**lpPhkZ'4dg.oSH1S*D3ei9_[LZ7/`VkM\3f2n?Nc+OFB-,QPk0mU>Zg8:fROY&Fmi9D=scg]l_5^s=>5lfb$j0bb8,5LDW"1n3Ma;G+`>i?h_RPKBe%a2Xd]B;*p>2fnWG0gVB,b+^m'jfK8Z@FH8'&8@>)iaMI?#l>o2XHpCSMa>$KBDXE83%fX[ceGIl.T&"l`0e#"?;Qp%m)Fs@JK"#q5%potI!@+th.C;VY\g?0gFT[#XE$Q@N6\H&hF:T2^,Pbk--aQ@$R'j7*Ki096JF@'8B]nLFbPUU*DZ?$Ds;[<+Kl_;bm"hU=Xf4_;FlWdCAVUUH1+E52)0NFZS:-$eRhf?I)$R+?N&K^l,'IO=k65h9Ph,a]ZXs$I?%$<^0pe>XJ-nDV![PcCT&n*ljJdK=\RESrqW>!'0!9s*CZd0N@KSNN>9GYod1u0!7G*Y?&)+ZrA)C,"fYT$L]bXCQK0j0<4r[i:]<;s*L3j+I]DWnAI*N`W7ss*(`]AnjgT9WeZ#?qVj;P-@Z)>r2$_8^5oing%FlTY`B3=cM398jfE!PBbM#C:CZSO$&@c:6fS='aW9h?%T.+d8,VYn__%dqL6L>SaB;B>BoUiV*8E0SP=M<)M&,KTkMKc8I"b*@p=)N#*=0A`$k3lZCo/hS2d&`%e,jOUnqu'j1ms/[4^$XhSe:+ahY`#Clg!nVW]LB/4V(h926.0nU'RF3KT=hoT-)!Qe`SMa-UL(6mI+=&?2_Y&V#SZh*b)$'V+aE-h~> +endstream +endobj +94 0 obj +<< /Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595 842 ] +/Resources 3 0 R +/Contents 93 0 R +>> +endobj +95 0 obj +<< /Length 840 /Filter [ /ASCII85Decode /FlateDecode ] + >> +stream +Gasan9iKe#&A@sBBQA\BU.G9JgJ`Vf?"c"4V@6CLE#dQY9O\rDY2S9i-8A[rbhsJ8B5:RehsP5T,@_K,NsNl=\69uL5:HC-c7bmDmJU@LK]a(WC!/PEEN,X8Et,!XS3X`r51+:tEENT=Um49!LUZ\@Hi)4.n^kZ`?/NT%kPAH5g3+E"CQK>tQb)1<^8Nk\`h+[duS2C([?K>rf3-,@_69[%VNZ+kDg2F2Qi+*(&f0+46kYigb"97!C"^E6#SiS5S4O22WT%mb)C^ol1Jj?:OfBaoI#(#7kuij88[5AIB7&X/k-3bRH@tSsKCrmrC(Q%C%8Ng0&=s<7Df:uoCZ6t&^+F4ID0\(R\XCarB"d?;3TM7"dQ#=N@W*$_jrC#c>P3g3q,ONrT"6SrfCR8M6*?MZR]F5C(X_r`dr<2X%Fn[*`>J1V`Cj5H[44`^ei">YTHE<2-#=e9rV>~> +endstream +endobj +96 0 obj +<< /Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595 842 ] +/Resources 3 0 R +/Contents 95 0 R +>> +endobj +97 0 obj +<< /Type /Font +/Subtype /Type1 +/Name /F1 +/BaseFont /Helvetica +/Encoding /WinAnsiEncoding >> +endobj +98 0 obj +<< /Type /Font +/Subtype /Type1 +/Name /F5 +/BaseFont /Times-Roman +/Encoding /WinAnsiEncoding >> +endobj +99 0 obj +<< /Type /Font +/Subtype /Type1 +/Name /F3 +/BaseFont /Helvetica-Bold +/Encoding /WinAnsiEncoding >> +endobj +100 0 obj +<< /Type /Font +/Subtype /Type1 +/Name /F7 +/BaseFont /Times-Bold +/Encoding /WinAnsiEncoding >> +endobj +1 0 obj +<< /Type /Pages +/Count 23 +/Kids [6 0 R 8 0 R 10 0 R 12 0 R 14 0 R 19 0 R 22 0 R 30 0 R 36 0 R 45 0 R 49 0 R 54 0 R 58 0 R 63 0 R 65 0 R 73 0 R 82 0 R 86 0 R 88 0 R 90 0 R 92 0 R 94 0 R 96 0 R ] >> +endobj +2 0 obj +<< /Type /Catalog +/Pages 1 0 R + >> +endobj +3 0 obj +<< +/Font << /F1 97 0 R /F5 98 0 R /F3 99 0 R /F7 100 0 R >> +/ProcSet [ /PDF /ImageC /Text ] /XObject <> +>> +endobj +xref +0 101 +0000000000 65535 f +0000648387 00000 n +0000648599 00000 n +0000648649 00000 n +0000000015 00000 n +0000000071 00000 n +0000000274 00000 n +0000000380 00000 n +0000001978 00000 n +0000002084 00000 n +0000003058 00000 n +0000003165 00000 n +0000003424 00000 n +0000003532 00000 n +0000005537 00000 n +0000005660 00000 n +0000005687 00000 n +0000005862 00000 n +0000006847 00000 n +0000121846 00000 n +0000121954 00000 n +0000124245 00000 n +0000218851 00000 n +0000218974 00000 n +0000219022 00000 n +0000219203 00000 n +0000219379 00000 n +0000219555 00000 n +0000219744 00000 n +0000221694 00000 n +0000294242 00000 n +0000294365 00000 n +0000294392 00000 n +0000294529 00000 n +0000294597 00000 n +0000294669 00000 n +0000297217 00000 n +0000297340 00000 n +0000297388 00000 n +0000297569 00000 n +0000297748 00000 n +0000297919 00000 n +0000298100 00000 n +0000299115 00000 n +0000383556 00000 n +0000468482 00000 n +0000468605 00000 n +0000468632 00000 n +0000468819 00000 n +0000470245 00000 n +0000470368 00000 n +0000470395 00000 n +0000470572 00000 n +0000472235 00000 n +0000618123 00000 n +0000618246 00000 n +0000618273 00000 n +0000618517 00000 n +0000620920 00000 n +0000621043 00000 n +0000621077 00000 n +0000621259 00000 n +0000621427 00000 n +0000623110 00000 n +0000623218 00000 n +0000625301 00000 n +0000625424 00000 n +0000625479 00000 n +0000625656 00000 n +0000625849 00000 n +0000626040 00000 n +0000626232 00000 n +0000626434 00000 n +0000628212 00000 n +0000628335 00000 n +0000628397 00000 n +0000628590 00000 n +0000628784 00000 n +0000628975 00000 n +0000629170 00000 n +0000629363 00000 n +0000629559 00000 n +0000632217 00000 n +0000632340 00000 n +0000632367 00000 n +0000632540 00000 n +0000635651 00000 n +0000635759 00000 n +0000637913 00000 n +0000638021 00000 n +0000640695 00000 n +0000640803 00000 n +0000643544 00000 n +0000643652 00000 n +0000646798 00000 n +0000646906 00000 n +0000647838 00000 n +0000647946 00000 n +0000648054 00000 n +0000648164 00000 n +0000648277 00000 n +trailer +<< +/Size 101 +/Root 2 0 R +/Info 4 0 R +>> +startxref +648855 +%%EOF diff --git a/extensions/fablabchemnitz/dxf2papercraft/kabeja/font.xml b/extensions/fablabchemnitz/dxf2papercraft/kabeja/font.xml new file mode 100644 index 00000000..37977be4 --- /dev/null +++ b/extensions/fablabchemnitz/dxf2papercraft/kabeja/font.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extensions/fablabchemnitz/dxf2papercraft/kabeja/kabeja.exe b/extensions/fablabchemnitz/dxf2papercraft/kabeja/kabeja.exe new file mode 100644 index 00000000..2508e781 Binary files /dev/null and b/extensions/fablabchemnitz/dxf2papercraft/kabeja/kabeja.exe differ diff --git a/extensions/fablabchemnitz/dxf2papercraft/kabeja/kabeja.sh b/extensions/fablabchemnitz/dxf2papercraft/kabeja/kabeja.sh new file mode 100755 index 00000000..e0e1fdc6 --- /dev/null +++ b/extensions/fablabchemnitz/dxf2papercraft/kabeja/kabeja.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +JAVA_MEM=256m + + + +java -Xmx$JAVA_MEM -jar launcher.jar $@ diff --git a/extensions/fablabchemnitz/dxf2papercraft/kabeja/launcher.jar b/extensions/fablabchemnitz/dxf2papercraft/kabeja/launcher.jar new file mode 100644 index 00000000..72685e74 Binary files /dev/null and b/extensions/fablabchemnitz/dxf2papercraft/kabeja/launcher.jar differ diff --git a/extensions/fablabchemnitz/dxf2papercraft/kabeja/legal/LICENSE.ant-contib b/extensions/fablabchemnitz/dxf2papercraft/kabeja/legal/LICENSE.ant-contib new file mode 100644 index 00000000..4d8c2fb7 --- /dev/null +++ b/extensions/fablabchemnitz/dxf2papercraft/kabeja/legal/LICENSE.ant-contib @@ -0,0 +1,47 @@ +/* + * The Apache Software License, Version 1.1 + * + * Copyright (c) 2001-2003 Ant-Contrib project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The end-user documentation included with the redistribution, if + * any, must include the following acknowlegement: + * "This product includes software developed by the + * Ant-Contrib project (http://sourceforge.net/projects/ant-contrib)." + * Alternately, this acknowlegement may appear in the software itself, + * if and wherever such third-party acknowlegements normally appear. + * + * 4. The name Ant-Contrib must not be used to endorse or promote products + * derived from this software without prior written permission. For + * written permission, please contact + * ant-contrib-developers@lists.sourceforge.net. + * + * 5. Products derived from this software may not be called "Ant-Contrib" + * nor may "Ant-Contrib" appear in their names without prior written + * permission of the Ant-Contrib project. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE ANT-CONTRIB PROJECT OR ITS + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * ==================================================================== + */ diff --git a/extensions/fablabchemnitz/dxf2papercraft/kabeja/legal/LICENSE.batik b/extensions/fablabchemnitz/dxf2papercraft/kabeja/legal/LICENSE.batik new file mode 100644 index 00000000..3e4e3d00 --- /dev/null +++ b/extensions/fablabchemnitz/dxf2papercraft/kabeja/legal/LICENSE.batik @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. \ No newline at end of file diff --git a/extensions/fablabchemnitz/dxf2papercraft/kabeja/legal/LICENSE.js.txt b/extensions/fablabchemnitz/dxf2papercraft/kabeja/legal/LICENSE.js.txt new file mode 100644 index 00000000..a5549298 --- /dev/null +++ b/extensions/fablabchemnitz/dxf2papercraft/kabeja/legal/LICENSE.js.txt @@ -0,0 +1,584 @@ + +This distribution includes the Mozilla Rhino 1.5 release 4.1 binary +distribution without code modifications. +You can also get that distribution from the following URL: +ftp://ftp.mozilla.org/pub/js/ +Source code for Rhino is available on Mozilla web site: +http://www.mozilla.org/rhino +Rhino is licensed under the NPL (Netscape Public License) which +is duplicated below. + +============================================================================== + +AMENDMENTS + + The Netscape Public License Version 1.1 ("NPL") consists of the + Mozilla Public License Version 1.1 with the following Amendments, + including Exhibit A-Netscape Public License. Files identified with + "Exhibit A-Netscape Public License" are governed by the Netscape + Public License Version 1.1. + + Additional Terms applicable to the Netscape Public License. + I. Effect. + These additional terms described in this Netscape Public + License -- Amendments shall apply to the Mozilla Communicator + client code and to all Covered Code under this License. + + II. "Netscape's Branded Code" means Covered Code that Netscape + distributes and/or permits others to distribute under one or more + trademark(s) which are controlled by Netscape but which are not + licensed for use under this License. + + III. Netscape and logo. + This License does not grant any rights to use the trademarks + "Netscape", the "Netscape N and horizon" logo or the "Netscape + lighthouse" logo, "Netcenter", "Gecko", "Java" or "JavaScript", + "Smart Browsing" even if such marks are included in the Original + Code or Modifications. + + IV. Inability to Comply Due to Contractual Obligation. + Prior to licensing the Original Code under this License, Netscape + has licensed third party code for use in Netscape's Branded Code. + To the extent that Netscape is limited contractually from making + such third party code available under this License, Netscape may + choose to reintegrate such code into Covered Code without being + required to distribute such code in Source Code form, even if + such code would otherwise be considered "Modifications" under + this License. + + V. Use of Modifications and Covered Code by Initial Developer. + V.1. In General. + The obligations of Section 3 apply to Netscape, except to + the extent specified in this Amendment, Section V.2 and V.3. + + V.2. Other Products. + Netscape may include Covered Code in products other than the + Netscape's Branded Code which are released by Netscape + during the two (2) years following the release date of the + Original Code, without such additional products becoming + subject to the terms of this License, and may license such + additional products on different terms from those contained + in this License. + + V.3. Alternative Licensing. + Netscape may license the Source Code of Netscape's Branded + Code, including Modifications incorporated therein, without + such Netscape Branded Code becoming subject to the terms of + this License, and may license such Netscape Branded Code on + different terms from those contained in this License. + + VI. Litigation. + Notwithstanding the limitations of Section 11 above, the + provisions regarding litigation in Section 11(a), (b) and (c) of + the License shall apply to all disputes relating to this License. + + EXHIBIT A-Netscape Public License. + + "The contents of this file are subject to the Netscape Public + License Version 1.1 (the "License"); you may not use this file + except in compliance with the License. You may obtain a copy of + the License at http://www.mozilla.org/NPL/ + + Software distributed under the License is distributed on an "AS + IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or + implied. See the License for the specific language governing + rights and limitations under the License. + + The Original Code is Mozilla Communicator client code, released + March 31, 1998. + + The Initial Developer of the Original Code is Netscape + Communications Corporation. Portions created by Netscape are + Copyright (C) 1998-1999 Netscape Communications Corporation. All + Rights Reserved. + + Contributor(s): ______________________________________. + + Alternatively, the contents of this file may be used under the + terms of the _____ license (the "[___] License"), in which case + the provisions of [______] License are applicable instead of + those above. If you wish to allow use of your version of this + file only under the terms of the [____] License and not to allow + others to use your version of this file under the NPL, indicate + your decision by deleting the provisions above and replace them + with the notice and other provisions required by the [___] + License. If you do not delete the provisions above, a recipient + may use your version of this file under either the NPL or the + [___] License." + + ---------------------------------------------------------------------- + + MOZILLA PUBLIC LICENSE + Version 1.1 + + --------------- + +1. Definitions. + + 1.0.1. "Commercial Use" means distribution or otherwise making the + Covered Code available to a third party. + + 1.1. "Contributor" means each entity that creates or contributes to + the creation of Modifications. + + 1.2. "Contributor Version" means the combination of the Original + Code, prior Modifications used by a Contributor, and the Modifications + made by that particular Contributor. + + 1.3. "Covered Code" means the Original Code or Modifications or the + combination of the Original Code and Modifications, in each case + including portions thereof. + + 1.4. "Electronic Distribution Mechanism" means a mechanism generally + accepted in the software development community for the electronic + transfer of data. + + 1.5. "Executable" means Covered Code in any form other than Source + Code. + + 1.6. "Initial Developer" means the individual or entity identified + as the Initial Developer in the Source Code notice required by Exhibit + A. + + 1.7. "Larger Work" means a work which combines Covered Code or + portions thereof with code not governed by the terms of this License. + + 1.8. "License" means this document. + + 1.8.1. "Licensable" means having the right to grant, to the maximum + extent possible, whether at the time of the initial grant or + subsequently acquired, any and all of the rights conveyed herein. + + 1.9. "Modifications" means any addition to or deletion from the + substance or structure of either the Original Code or any previous + Modifications. When Covered Code is released as a series of files, a + Modification is: + A. Any addition to or deletion from the contents of a file + containing Original Code or previous Modifications. + + B. Any new file that contains any part of the Original Code or + previous Modifications. + + 1.10. "Original Code" means Source Code of computer software code + which is described in the Source Code notice required by Exhibit A as + Original Code, and which, at the time of its release under this + License is not already Covered Code governed by this License. + + 1.10.1. "Patent Claims" means any patent claim(s), now owned or + hereafter acquired, including without limitation, method, process, + and apparatus claims, in any patent Licensable by grantor. + + 1.11. "Source Code" means the preferred form of the Covered Code for + making modifications to it, including all modules it contains, plus + any associated interface definition files, scripts used to control + compilation and installation of an Executable, or source code + differential comparisons against either the Original Code or another + well known, available Covered Code of the Contributor's choice. The + Source Code can be in a compressed or archival form, provided the + appropriate decompression or de-archiving software is widely available + for no charge. + + 1.12. "You" (or "Your") means an individual or a legal entity + exercising rights under, and complying with all of the terms of, this + License or a future version of this License issued under Section 6.1. + For legal entities, "You" includes any entity which controls, is + controlled by, or is under common control with You. For purposes of + this definition, "control" means (a) the power, direct or indirect, + to cause the direction or management of such entity, whether by + contract or otherwise, or (b) ownership of more than fifty percent + (50%) of the outstanding shares or beneficial ownership of such + entity. + +2. Source Code License. + + 2.1. The Initial Developer Grant. + The Initial Developer hereby grants You a world-wide, royalty-free, + non-exclusive license, subject to third party intellectual property + claims: + (a) under intellectual property rights (other than patent or + trademark) Licensable by Initial Developer to use, reproduce, + modify, display, perform, sublicense and distribute the Original + Code (or portions thereof) with or without Modifications, and/or + as part of a Larger Work; and + + (b) under Patents Claims infringed by the making, using or + selling of Original Code, to make, have made, use, practice, + sell, and offer for sale, and/or otherwise dispose of the + Original Code (or portions thereof). + + (c) the licenses granted in this Section 2.1(a) and (b) are + effective on the date Initial Developer first distributes + Original Code under the terms of this License. + + (d) Notwithstanding Section 2.1(b) above, no patent license is + granted: 1) for code that You delete from the Original Code; 2) + separate from the Original Code; or 3) for infringements caused + by: i) the modification of the Original Code or ii) the + combination of the Original Code with other software or devices. + + 2.2. Contributor Grant. + Subject to third party intellectual property claims, each Contributor + hereby grants You a world-wide, royalty-free, non-exclusive license + + (a) under intellectual property rights (other than patent or + trademark) Licensable by Contributor, to use, reproduce, modify, + display, perform, sublicense and distribute the Modifications + created by such Contributor (or portions thereof) either on an + unmodified basis, with other Modifications, as Covered Code + and/or as part of a Larger Work; and + + (b) under Patent Claims infringed by the making, using, or + selling of Modifications made by that Contributor either alone + and/or in combination with its Contributor Version (or portions + of such combination), to make, use, sell, offer for sale, have + made, and/or otherwise dispose of: 1) Modifications made by that + Contributor (or portions thereof); and 2) the combination of + Modifications made by that Contributor with its Contributor + Version (or portions of such combination). + + (c) the licenses granted in Sections 2.2(a) and 2.2(b) are + effective on the date Contributor first makes Commercial Use of + the Covered Code. + + (d) Notwithstanding Section 2.2(b) above, no patent license is + granted: 1) for any code that Contributor has deleted from the + Contributor Version; 2) separate from the Contributor Version; + 3) for infringements caused by: i) third party modifications of + Contributor Version or ii) the combination of Modifications made + by that Contributor with other software (except as part of the + Contributor Version) or other devices; or 4) under Patent Claims + infringed by Covered Code in the absence of Modifications made by + that Contributor. + +3. Distribution Obligations. + + 3.1. Application of License. + The Modifications which You create or to which You contribute are + governed by the terms of this License, including without limitation + Section 2.2. The Source Code version of Covered Code may be + distributed only under the terms of this License or a future version + of this License released under Section 6.1, and You must include a + copy of this License with every copy of the Source Code You + distribute. You may not offer or impose any terms on any Source Code + version that alters or restricts the applicable version of this + License or the recipients' rights hereunder. However, You may include + an additional document offering the additional rights described in + Section 3.5. + + 3.2. Availability of Source Code. + Any Modification which You create or to which You contribute must be + made available in Source Code form under the terms of this License + either on the same media as an Executable version or via an accepted + Electronic Distribution Mechanism to anyone to whom you made an + Executable version available; and if made available via Electronic + Distribution Mechanism, must remain available for at least twelve (12) + months after the date it initially became available, or at least six + (6) months after a subsequent version of that particular Modification + has been made available to such recipients. You are responsible for + ensuring that the Source Code version remains available even if the + Electronic Distribution Mechanism is maintained by a third party. + + 3.3. Description of Modifications. + You must cause all Covered Code to which You contribute to contain a + file documenting the changes You made to create that Covered Code and + the date of any change. You must include a prominent statement that + the Modification is derived, directly or indirectly, from Original + Code provided by the Initial Developer and including the name of the + Initial Developer in (a) the Source Code, and (b) in any notice in an + Executable version or related documentation in which You describe the + origin or ownership of the Covered Code. + + 3.4. Intellectual Property Matters + (a) Third Party Claims. + If Contributor has knowledge that a license under a third party's + intellectual property rights is required to exercise the rights + granted by such Contributor under Sections 2.1 or 2.2, + Contributor must include a text file with the Source Code + distribution titled "LEGAL" which describes the claim and the + party making the claim in sufficient detail that a recipient will + know whom to contact. If Contributor obtains such knowledge after + the Modification is made available as described in Section 3.2, + Contributor shall promptly modify the LEGAL file in all copies + Contributor makes available thereafter and shall take other steps + (such as notifying appropriate mailing lists or newsgroups) + reasonably calculated to inform those who received the Covered + Code that new knowledge has been obtained. + + (b) Contributor APIs. + If Contributor's Modifications include an application programming + interface and Contributor has knowledge of patent licenses which + are reasonably necessary to implement that API, Contributor must + also include this information in the LEGAL file. + + (c) Representations. + Contributor represents that, except as disclosed pursuant to + Section 3.4(a) above, Contributor believes that Contributor's + Modifications are Contributor's original creation(s) and/or + Contributor has sufficient rights to grant the rights conveyed by + this License. + + 3.5. Required Notices. + You must duplicate the notice in Exhibit A in each file of the Source + Code. If it is not possible to put such notice in a particular Source + Code file due to its structure, then You must include such notice in a + location (such as a relevant directory) where a user would be likely + to look for such a notice. If You created one or more Modification(s) + You may add your name as a Contributor to the notice described in + Exhibit A. You must also duplicate this License in any documentation + for the Source Code where You describe recipients' rights or ownership + rights relating to Covered Code. You may choose to offer, and to + charge a fee for, warranty, support, indemnity or liability + obligations to one or more recipients of Covered Code. However, You + may do so only on Your own behalf, and not on behalf of the Initial + Developer or any Contributor. You must make it absolutely clear than + any such warranty, support, indemnity or liability obligation is + offered by You alone, and You hereby agree to indemnify the Initial + Developer and every Contributor for any liability incurred by the + Initial Developer or such Contributor as a result of warranty, + support, indemnity or liability terms You offer. + + 3.6. Distribution of Executable Versions. + You may distribute Covered Code in Executable form only if the + requirements of Section 3.1-3.5 have been met for that Covered Code, + and if You include a notice stating that the Source Code version of + the Covered Code is available under the terms of this License, + including a description of how and where You have fulfilled the + obligations of Section 3.2. The notice must be conspicuously included + in any notice in an Executable version, related documentation or + collateral in which You describe recipients' rights relating to the + Covered Code. You may distribute the Executable version of Covered + Code or ownership rights under a license of Your choice, which may + contain terms different from this License, provided that You are in + compliance with the terms of this License and that the license for the + Executable version does not attempt to limit or alter the recipient's + rights in the Source Code version from the rights set forth in this + License. If You distribute the Executable version under a different + license You must make it absolutely clear that any terms which differ + from this License are offered by You alone, not by the Initial + Developer or any Contributor. You hereby agree to indemnify the + Initial Developer and every Contributor for any liability incurred by + the Initial Developer or such Contributor as a result of any such + terms You offer. + + 3.7. Larger Works. + You may create a Larger Work by combining Covered Code with other code + not governed by the terms of this License and distribute the Larger + Work as a single product. In such a case, You must make sure the + requirements of this License are fulfilled for the Covered Code. + +4. Inability to Comply Due to Statute or Regulation. + + If it is impossible for You to comply with any of the terms of this + License with respect to some or all of the Covered Code due to + statute, judicial order, or regulation then You must: (a) comply with + the terms of this License to the maximum extent possible; and (b) + describe the limitations and the code they affect. Such description + must be included in the LEGAL file described in Section 3.4 and must + be included with all distributions of the Source Code. Except to the + extent prohibited by statute or regulation, such description must be + sufficiently detailed for a recipient of ordinary skill to be able to + understand it. + +5. Application of this License. + + This License applies to code to which the Initial Developer has + attached the notice in Exhibit A and to related Covered Code. + +6. Versions of the License. + + 6.1. New Versions. + Netscape Communications Corporation ("Netscape") may publish revised + and/or new versions of the License from time to time. Each version + will be given a distinguishing version number. + + 6.2. Effect of New Versions. + Once Covered Code has been published under a particular version of the + License, You may always continue to use it under the terms of that + version. You may also choose to use such Covered Code under the terms + of any subsequent version of the License published by Netscape. No one + other than Netscape has the right to modify the terms applicable to + Covered Code created under this License. + + 6.3. Derivative Works. + If You create or use a modified version of this License (which you may + only do in order to apply it to code which is not already Covered Code + governed by this License), You must (a) rename Your license so that + the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape", + "MPL", "NPL" or any confusingly similar phrase do not appear in your + license (except to note that your license differs from this License) + and (b) otherwise make it clear that Your version of the license + contains terms which differ from the Mozilla Public License and + Netscape Public License. (Filling in the name of the Initial + Developer, Original Code or Contributor in the notice described in + Exhibit A shall not of themselves be deemed to be modifications of + this License.) + +7. DISCLAIMER OF WARRANTY. + + COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF + DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. + THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE + IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, + YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE + COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER + OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF + ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. + +8. TERMINATION. + + 8.1. This License and the rights granted hereunder will terminate + automatically if You fail to comply with terms herein and fail to cure + such breach within 30 days of becoming aware of the breach. All + sublicenses to the Covered Code which are properly granted shall + survive any termination of this License. Provisions which, by their + nature, must remain in effect beyond the termination of this License + shall survive. + + 8.2. If You initiate litigation by asserting a patent infringement + claim (excluding declatory judgment actions) against Initial Developer + or a Contributor (the Initial Developer or Contributor against whom + You file such action is referred to as "Participant") alleging that: + + (a) such Participant's Contributor Version directly or indirectly + infringes any patent, then any and all rights granted by such + Participant to You under Sections 2.1 and/or 2.2 of this License + shall, upon 60 days notice from Participant terminate prospectively, + unless if within 60 days after receipt of notice You either: (i) + agree in writing to pay Participant a mutually agreeable reasonable + royalty for Your past and future use of Modifications made by such + Participant, or (ii) withdraw Your litigation claim with respect to + the Contributor Version against such Participant. If within 60 days + of notice, a reasonable royalty and payment arrangement are not + mutually agreed upon in writing by the parties or the litigation claim + is not withdrawn, the rights granted by Participant to You under + Sections 2.1 and/or 2.2 automatically terminate at the expiration of + the 60 day notice period specified above. + + (b) any software, hardware, or device, other than such Participant's + Contributor Version, directly or indirectly infringes any patent, then + any rights granted to You by such Participant under Sections 2.1(b) + and 2.2(b) are revoked effective as of the date You first made, used, + sold, distributed, or had made, Modifications made by that + Participant. + + 8.3. If You assert a patent infringement claim against Participant + alleging that such Participant's Contributor Version directly or + indirectly infringes any patent where such claim is resolved (such as + by license or settlement) prior to the initiation of patent + infringement litigation, then the reasonable value of the licenses + granted by such Participant under Sections 2.1 or 2.2 shall be taken + into account in determining the amount or value of any payment or + license. + + 8.4. In the event of termination under Sections 8.1 or 8.2 above, + all end user license agreements (excluding distributors and resellers) + which have been validly granted by You or any distributor hereunder + prior to termination shall survive termination. + +9. LIMITATION OF LIABILITY. + + UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT + (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL + DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, + OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR + ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY + CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, + WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER + COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN + INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF + LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY + RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW + PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE + EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO + THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU. + +10. U.S. GOVERNMENT END USERS. + + The Covered Code is a "commercial item," as that term is defined in + 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer + software" and "commercial computer software documentation," as such + terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 + C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), + all U.S. Government End Users acquire Covered Code with only those + rights set forth herein. + +11. MISCELLANEOUS. + + This License represents the complete agreement concerning subject + matter hereof. If any provision of this License is held to be + unenforceable, such provision shall be reformed only to the extent + necessary to make it enforceable. This License shall be governed by + California law provisions (except to the extent applicable law, if + any, provides otherwise), excluding its conflict-of-law provisions. + With respect to disputes in which at least one party is a citizen of, + or an entity chartered or registered to do business in the United + States of America, any litigation relating to this License shall be + subject to the jurisdiction of the Federal Courts of the Northern + District of California, with venue lying in Santa Clara County, + California, with the losing party responsible for costs, including + without limitation, court costs and reasonable attorneys' fees and + expenses. The application of the United Nations Convention on + Contracts for the International Sale of Goods is expressly excluded. + Any law or regulation which provides that the language of a contract + shall be construed against the drafter shall not apply to this + License. + +12. RESPONSIBILITY FOR CLAIMS. + + As between Initial Developer and the Contributors, each party is + responsible for claims and damages arising, directly or indirectly, + out of its utilization of rights under this License and You agree to + work with Initial Developer and Contributors to distribute such + responsibility on an equitable basis. Nothing herein is intended or + shall be deemed to constitute any admission of liability. + +13. MULTIPLE-LICENSED CODE. + + Initial Developer may designate portions of the Covered Code as + "Multiple-Licensed". "Multiple-Licensed" means that the Initial + Developer permits you to utilize portions of the Covered Code under + Your choice of the NPL or the alternative licenses, if any, specified + by the Initial Developer in the file described in Exhibit A. + +EXHIBIT A -Mozilla Public License. + + ``The contents of this file are subject to the Mozilla Public License + Version 1.1 (the "License"); you may not use this file except in + compliance with the License. You may obtain a copy of the License at + http://www.mozilla.org/MPL/ + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the + License for the specific language governing rights and limitations + under the License. + + The Original Code is ______________________________________. + + The Initial Developer of the Original Code is ________________________. + Portions created by ______________________ are Copyright (C) ______ + _______________________. All Rights Reserved. + + Contributor(s): ______________________________________. + + Alternatively, the contents of this file may be used under the terms + of the _____ license (the "[___] License"), in which case the + provisions of [______] License are applicable instead of those + above. If you wish to allow use of your version of this file only + under the terms of the [____] License and not to allow others to use + your version of this file under the MPL, indicate your decision by + deleting the provisions above and replace them with the notice and + other provisions required by the [___] License. If you do not delete + the provisions above, a recipient may use your version of this file + under either the MPL or the [___] License." + + [NOTE: The text of this Exhibit A may differ slightly from the text of + the notices in the Source Code files of the Original Code. You should + use the text of this Exhibit A rather than the text found in the + Original Code Source Code for Your Modifications.] + + +============================================================================== + + diff --git a/extensions/fablabchemnitz/dxf2papercraft/kabeja/legal/LICENSE.miethxml-toolkit.txt b/extensions/fablabchemnitz/dxf2papercraft/kabeja/legal/LICENSE.miethxml-toolkit.txt new file mode 100644 index 00000000..d6456956 --- /dev/null +++ b/extensions/fablabchemnitz/dxf2papercraft/kabeja/legal/LICENSE.miethxml-toolkit.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/extensions/fablabchemnitz/dxf2papercraft/kabeja/legal/LICENSE.pdf-transcoder.txt b/extensions/fablabchemnitz/dxf2papercraft/kabeja/legal/LICENSE.pdf-transcoder.txt new file mode 100644 index 00000000..3e4e3d00 --- /dev/null +++ b/extensions/fablabchemnitz/dxf2papercraft/kabeja/legal/LICENSE.pdf-transcoder.txt @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. \ No newline at end of file diff --git a/extensions/fablabchemnitz/dxf2papercraft/kabeja/legal/LICENSE.txt b/extensions/fablabchemnitz/dxf2papercraft/kabeja/legal/LICENSE.txt new file mode 100644 index 00000000..d6456956 --- /dev/null +++ b/extensions/fablabchemnitz/dxf2papercraft/kabeja/legal/LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/extensions/fablabchemnitz/dxf2papercraft/kabeja/lib/batik-all.jar b/extensions/fablabchemnitz/dxf2papercraft/kabeja/lib/batik-all.jar new file mode 100644 index 00000000..dd9588be Binary files /dev/null and b/extensions/fablabchemnitz/dxf2papercraft/kabeja/lib/batik-all.jar differ diff --git a/extensions/fablabchemnitz/dxf2papercraft/kabeja/lib/js.jar b/extensions/fablabchemnitz/dxf2papercraft/kabeja/lib/js.jar new file mode 100644 index 00000000..2b926505 Binary files /dev/null and b/extensions/fablabchemnitz/dxf2papercraft/kabeja/lib/js.jar differ diff --git a/extensions/fablabchemnitz/dxf2papercraft/kabeja/lib/kabeja-0.4.jar b/extensions/fablabchemnitz/dxf2papercraft/kabeja/lib/kabeja-0.4.jar new file mode 100644 index 00000000..49ce629f Binary files /dev/null and b/extensions/fablabchemnitz/dxf2papercraft/kabeja/lib/kabeja-0.4.jar differ diff --git a/extensions/fablabchemnitz/dxf2papercraft/kabeja/lib/kabeja-svg-0.4.jar b/extensions/fablabchemnitz/dxf2papercraft/kabeja/lib/kabeja-svg-0.4.jar new file mode 100644 index 00000000..bc6f4449 Binary files /dev/null and b/extensions/fablabchemnitz/dxf2papercraft/kabeja/lib/kabeja-svg-0.4.jar differ diff --git a/extensions/fablabchemnitz/dxf2papercraft/kabeja/lib/kabeja-xslt.jar b/extensions/fablabchemnitz/dxf2papercraft/kabeja/lib/kabeja-xslt.jar new file mode 100644 index 00000000..c9ba6556 Binary files /dev/null and b/extensions/fablabchemnitz/dxf2papercraft/kabeja/lib/kabeja-xslt.jar differ diff --git a/extensions/fablabchemnitz/dxf2papercraft/kabeja/lib/miethxml-toolkit.jar b/extensions/fablabchemnitz/dxf2papercraft/kabeja/lib/miethxml-toolkit.jar new file mode 100644 index 00000000..337ad869 Binary files /dev/null and b/extensions/fablabchemnitz/dxf2papercraft/kabeja/lib/miethxml-toolkit.jar differ diff --git a/extensions/fablabchemnitz/dxf2papercraft/kabeja/lib/miethxml-ui.jar b/extensions/fablabchemnitz/dxf2papercraft/kabeja/lib/miethxml-ui.jar new file mode 100644 index 00000000..63635306 Binary files /dev/null and b/extensions/fablabchemnitz/dxf2papercraft/kabeja/lib/miethxml-ui.jar differ diff --git a/extensions/fablabchemnitz/dxf2papercraft/kabeja/lib/nothing b/extensions/fablabchemnitz/dxf2papercraft/kabeja/lib/nothing new file mode 100644 index 00000000..e69de29b diff --git a/extensions/fablabchemnitz/dxf2papercraft/kabeja/lib/pdf-transcoder.jar b/extensions/fablabchemnitz/dxf2papercraft/kabeja/lib/pdf-transcoder.jar new file mode 100644 index 00000000..1a8666eb Binary files /dev/null and b/extensions/fablabchemnitz/dxf2papercraft/kabeja/lib/pdf-transcoder.jar differ diff --git a/extensions/fablabchemnitz/dxf2papercraft/kabeja/lib/xml-apis-ext.jar b/extensions/fablabchemnitz/dxf2papercraft/kabeja/lib/xml-apis-ext.jar new file mode 100644 index 00000000..a7869d68 Binary files /dev/null and b/extensions/fablabchemnitz/dxf2papercraft/kabeja/lib/xml-apis-ext.jar differ diff --git a/extensions/fablabchemnitz/dxf2papercraft/kabeja/lib/xml-apis.jar b/extensions/fablabchemnitz/dxf2papercraft/kabeja/lib/xml-apis.jar new file mode 100644 index 00000000..d42c0ea6 Binary files /dev/null and b/extensions/fablabchemnitz/dxf2papercraft/kabeja/lib/xml-apis.jar differ diff --git a/extensions/fablabchemnitz/dxf2papercraft/kabeja/samples/dxf/draft1.dxf b/extensions/fablabchemnitz/dxf2papercraft/kabeja/samples/dxf/draft1.dxf new file mode 100644 index 00000000..3e16efcf --- /dev/null +++ b/extensions/fablabchemnitz/dxf2papercraft/kabeja/samples/dxf/draft1.dxf @@ -0,0 +1,255532 @@ + 0 +SECTION + 2 +HEADER + 9 +$ACADVER + 1 +AC1009 + 9 +$INSBASE + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$EXTMIN + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$EXTMAX + 10 +42050.0 + 20 +29700.0 + 30 +0.0 + 9 +$LIMMIN + 10 +0.0 + 20 +0.0 + 9 +$LIMMAX + 10 +42050.0 + 20 +29700.0 + 9 +$ORTHOMODE + 70 + 0 + 9 +$REGENMODE + 70 + 1 + 9 +$FILLMODE + 70 + 1 + 9 +$QTEXTMODE + 70 + 0 + 9 +$MIRRTEXT + 70 + 1 + 9 +$DRAGMODE + 70 + 2 + 9 +$LTSCALE + 40 +1000.0 + 9 +$OSMODE + 70 + 0 + 9 +$ATTMODE + 70 + 1 + 9 +$TEXTSIZE + 40 +175.0 + 9 +$TRACEWID + 40 +1.0 + 9 +$TEXTSTYLE + 7 +STANDART + 9 +$CLAYER + 8 +0 + 9 +$CELTYPE + 6 +BYLAYER + 9 +$CECOLOR + 62 + 256 + 9 +$DIMSCALE + 40 +1.0 + 9 +$DIMASZ + 40 +1.0 + 9 +$DIMEXO + 40 +1650.0 + 9 +$DIMDLI + 40 +0.0 + 9 +$DIMRND + 40 +0.0 + 9 +$DIMDLE + 40 +150.0 + 9 +$DIMEXE + 40 +150.0 + 9 +$DIMTP + 40 +0.0 + 9 +$DIMTM + 40 +0.0 + 9 +$DIMTXT + 40 +175.0 + 9 +$DIMCEN + 40 +12.5 + 9 +$DIMTSZ + 40 +0.0 + 9 +$DIMTOL + 70 + 0 + 9 +$DIMLIM + 70 + 0 + 9 +$DIMTIH + 70 + 0 + 9 +$DIMTOH + 70 + 0 + 9 +$DIMSE1 + 70 + 1 + 9 +$DIMSE2 + 70 + 1 + 9 +$DIMTAD + 70 + 1 + 9 +$DIMZIN + 70 + 8 + 9 +$DIMBLK + 1 +MASSHILFSLINIE + 9 +$DIMASO + 70 + 1 + 9 +$DIMSHO + 70 + 0 + 9 +$DIMPOST + 1 + + 9 +$DIMAPOST + 1 + + 9 +$DIMALT + 70 + 0 + 9 +$DIMALTD + 70 + 2 + 9 +$DIMALTF + 40 +25.4 + 9 +$DIMLFAC + 40 +0.0001 + 9 +$DIMTOFL + 70 + 0 + 9 +$DIMTVP + 40 +0.0 + 9 +$DIMTIX + 70 + 0 + 9 +$DIMSOXD + 70 + 0 + 9 +$DIMSAH + 70 + 0 + 9 +$DIMBLK1 + 1 + + 9 +$DIMBLK2 + 1 + + 9 +$DIMSTYLE + 2 +ENTWURFSBEMASSUNG + 9 +$DIMCLRD + 70 + 0 + 9 +$DIMCLRE + 70 + 0 + 9 +$DIMCLRT + 70 + 0 + 9 +$DIMTFAC + 40 +1.0 + 9 +$DIMGAP + 40 +0.0 + 9 +$LUNITS + 70 + 2 + 9 +$LUPREC + 70 + 2 + 9 +$SKETCHINC + 40 +1.0 + 9 +$FILLETRAD + 40 +0.0 + 9 +$AUNITS + 70 + 0 + 9 +$AUPREC + 70 + 0 + 9 +$MENU + 1 +acad + 9 +$ELEVATION + 40 +0.0 + 9 +$PELEVATION + 40 +0.0 + 9 +$THICKNESS + 40 +0.0 + 9 +$LIMCHECK + 70 + 0 + 9 +$BLIPMODE + 70 + 1 + 9 +$CHAMFERA + 40 +0.0 + 9 +$CHAMFERB + 40 +0.0 + 9 +$SKPOLY + 70 + 0 + 9 +$TDCREATE + 40 +2450793.70898 + 9 +$TDUPDATE + 40 +2450818.501965 + 9 +$TDINDWG + 40 +1.433361 + 9 +$TDUSRTIMER + 40 +1.433361 + 9 +$USRTIMER + 70 + 1 + 9 +$ANGBASE + 50 +0.0 + 9 +$ANGDIR + 70 + 0 + 9 +$PDMODE + 70 + 0 + 9 +$PDSIZE + 40 +0.0 + 9 +$PLINEWID + 40 +0.0 + 9 +$COORDS + 70 + 2 + 9 +$SPLFRAME + 70 + 0 + 9 +$SPLINETYPE + 70 + 6 + 9 +$SPLINESEGS + 70 + 8 + 9 +$ATTDIA + 70 + 0 + 9 +$ATTREQ + 70 + 1 + 9 +$HANDLING + 70 + 1 + 9 +$HANDSEED + 5 +3861 + 9 +$SURFTAB1 + 70 + 6 + 9 +$SURFTAB2 + 70 + 6 + 9 +$SURFTYPE + 70 + 6 + 9 +$SURFU + 70 + 6 + 9 +$SURFV + 70 + 6 + 9 +$UCSNAME + 2 +WELT + 9 +$UCSORG + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSXDIR + 10 +1.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSYDIR + 10 +0.0 + 20 +1.0 + 30 +0.0 + 9 +$PUCSNAME + 2 + + 9 +$PUCSORG + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSXDIR + 10 +1.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSYDIR + 10 +0.0 + 20 +1.0 + 30 +0.0 + 9 +$USERI1 + 70 + 0 + 9 +$USERI2 + 70 + 0 + 9 +$USERI3 + 70 + 0 + 9 +$USERI4 + 70 + 0 + 9 +$USERI5 + 70 + 0 + 9 +$USERR1 + 40 +0.0 + 9 +$USERR2 + 40 +0.0 + 9 +$USERR3 + 40 +0.0 + 9 +$USERR4 + 40 +0.0 + 9 +$USERR5 + 40 +0.0 + 9 +$WORLDVIEW + 70 + 1 + 9 +$SHADEDGE + 70 + 3 + 9 +$SHADEDIF + 70 + 70 + 9 +$TILEMODE + 70 + 1 + 9 +$MAXACTVP + 70 + 16 + 9 +$PLIMCHECK + 70 + 0 + 9 +$PEXTMIN + 10 +1.000000E+020 + 20 +1.000000E+020 + 30 +1.000000E+020 + 9 +$PEXTMAX + 10 +-1.000000E+020 + 20 +-1.000000E+020 + 30 +-1.000000E+020 + 9 +$PLIMMIN + 10 +0.0 + 20 +0.0 + 9 +$PLIMMAX + 10 +12.0 + 20 +9.0 + 9 +$UNITMODE + 70 + 0 + 9 +$VISRETAIN + 70 + 0 + 9 +$PLINEGEN + 70 + 0 + 9 +$PSLTSCALE + 70 + 0 + 0 +ENDSEC + 0 +SECTION + 2 +TABLES + 0 +TABLE + 2 +VPORT + 70 + 3 + 0 +VPORT + 2 +*ACTIVE + 70 + 0 + 10 +0.0 + 20 +0.0 + 11 +1.0 + 21 +1.0 + 12 +23706.449376 + 22 +15278.084191 + 13 +0.0 + 23 +0.0 + 14 +5.0 + 24 +5.0 + 15 +10.0 + 25 +10.0 + 16 +0.0 + 26 +0.0 + 36 +1.0 + 17 +0.0 + 27 +0.0 + 37 +0.0 + 40 +30883.554814 + 41 +1.551664 + 42 +50.0 + 43 +0.0 + 44 +0.0 + 50 +0.0 + 51 +0.0 + 71 + 0 + 72 + 100 + 73 + 1 + 74 + 1 + 75 + 1 + 76 + 0 + 77 + 0 + 78 + 2 + 0 +ENDTAB + 0 +TABLE + 2 +LTYPE + 70 + 25 + 0 +LTYPE + 2 +CONTINUOUS + 70 + 0 + 3 +Solid Line + 72 + 65 + 73 + 0 + 40 +0.0 + 0 +LTYPE + 2 +RAND + 70 + 0 + 3 +__ __ . __ __ . __ __ . __ __ . __ __ . __ __ . + 72 + 65 + 73 + 6 + 40 +1.75 + 49 +0.5 + 49 +-0.25 + 49 +0.5 + 49 +-0.25 + 49 +0.0 + 49 +-0.25 + 0 +LTYPE + 2 +RAND2 + 70 + 0 + 3 +__.__.__.__.__.__.__.__.__.__.__.__.__.__.__.__ + 72 + 65 + 73 + 6 + 40 +0.875 + 49 +0.25 + 49 +-0.125 + 49 +0.25 + 49 +-0.125 + 49 +0.0 + 49 +-0.125 + 0 +LTYPE + 2 +RANDX2 + 70 + 0 + 3 +____ ____ . ____ ____ . ____ ____ . __ + 72 + 65 + 73 + 6 + 40 +3.5 + 49 +1.0 + 49 +-0.5 + 49 +1.0 + 49 +-0.5 + 49 +0.0 + 49 +-0.5 + 0 +LTYPE + 2 +MITTE + 70 + 0 + 3 +____ _ ____ _ ____ _ ____ _ ____ _ ____ _ ____ + 72 + 65 + 73 + 4 + 40 +2.0 + 49 +1.25 + 49 +-0.25 + 49 +0.25 + 49 +-0.25 + 0 +LTYPE + 2 +MITTE2 + 70 + 0 + 3 +___ _ ___ _ ___ _ ___ _ ___ _ ___ _ ___ _ ___ _ + 72 + 65 + 73 + 4 + 40 +1.125 + 49 +0.75 + 49 +-0.125 + 49 +0.125 + 49 +-0.125 + 0 +LTYPE + 2 +MITTEX2 + 70 + 0 + 3 +________ __ ________ __ ________ __ _____ + 72 + 65 + 73 + 4 + 40 +4.0 + 49 +2.5 + 49 +-0.5 + 49 +0.5 + 49 +-0.5 + 0 +LTYPE + 2 +STRICHPUNKT + 70 + 0 + 3 +__ . __ . __ . __ . __ . __ . __ . __ . __ . __ + 72 + 65 + 73 + 4 + 40 +1.0 + 49 +0.5 + 49 +-0.25 + 49 +0.0 + 49 +-0.25 + 0 +LTYPE + 2 +STRICHPUNKT2 + 70 + 0 + 3 +_._._._._._._._._._._._._._._._._._._._._._._._ + 72 + 65 + 73 + 4 + 40 +0.5 + 49 +0.25 + 49 +-0.125 + 49 +0.0 + 49 +-0.125 + 0 +LTYPE + 2 +STRICHPUNKTX2 + 70 + 0 + 3 +____ . ____ . ____ . ____ . ____ . __ + 72 + 65 + 73 + 4 + 40 +2.0 + 49 +1.0 + 49 +-0.5 + 49 +0.0 + 49 +-0.5 + 0 +LTYPE + 2 +GESTRICHELT + 70 + 0 + 3 +__ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ + 72 + 65 + 73 + 2 + 40 +0.75 + 49 +0.5 + 49 +-0.25 + 0 +LTYPE + 2 +GESTRICHELT2 + 70 + 0 + 3 +_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ + 72 + 65 + 73 + 2 + 40 +0.375 + 49 +0.25 + 49 +-0.125 + 0 +LTYPE + 2 +GESTRICHELTX2 + 70 + 0 + 3 +____ ____ ____ ____ ____ ____ ____ ____ + 72 + 65 + 73 + 2 + 40 +1.5 + 49 +1.0 + 49 +-0.5 + 0 +LTYPE + 2 +GETRENNT + 70 + 0 + 3 +____ . . ____ . . ____ . . ____ . . ____ . . __ + 72 + 65 + 73 + 6 + 40 +1.25 + 49 +0.5 + 49 +-0.25 + 49 +0.0 + 49 +-0.25 + 49 +0.0 + 49 +-0.25 + 0 +LTYPE + 2 +GETRENNT2 + 70 + 0 + 3 +__..__..__..__..__..__..__..__..__..__..__..__. + 72 + 65 + 73 + 6 + 40 +0.625 + 49 +0.25 + 49 +-0.125 + 49 +0.0 + 49 +-0.125 + 49 +0.0 + 49 +-0.125 + 0 +LTYPE + 2 +GETRENNTX2 + 70 + 0 + 3 +________ . . ________ . . ________ . . + 72 + 65 + 73 + 6 + 40 +2.5 + 49 +1.0 + 49 +-0.5 + 49 +0.0 + 49 +-0.5 + 49 +0.0 + 49 +-0.5 + 0 +LTYPE + 2 +PUNKT + 70 + 0 + 3 +. . . . . . . . . . . . . . . . . . . . . . . . + 72 + 65 + 73 + 2 + 40 +0.25 + 49 +0.0 + 49 +-0.25 + 0 +LTYPE + 2 +PUNKT2 + 70 + 0 + 3 +............................................... + 72 + 65 + 73 + 2 + 40 +0.125 + 49 +0.0 + 49 +-0.125 + 0 +LTYPE + 2 +PUNKTX2 + 70 + 0 + 3 +. . . . . . . . . . . . . . . . + 72 + 65 + 73 + 2 + 40 +0.5 + 49 +0.0 + 49 +-0.5 + 0 +LTYPE + 2 +VERDECKT + 70 + 0 + 3 +__ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ + 72 + 65 + 73 + 2 + 40 +0.375 + 49 +0.25 + 49 +-0.125 + 0 +LTYPE + 2 +VERDECKT2 + 70 + 0 + 3 +_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ + 72 + 65 + 73 + 2 + 40 +0.1875 + 49 +0.125 + 49 +-0.0625 + 0 +LTYPE + 2 +VERDECKTX2 + 70 + 0 + 3 +____ ____ ____ ____ ____ ____ ____ ____ ____ __ + 72 + 65 + 73 + 2 + 40 +0.75 + 49 +0.5 + 49 +-0.25 + 0 +LTYPE + 2 +PHANTOM + 70 + 0 + 3 +______ __ __ ______ __ __ ______ __ __ + 72 + 65 + 73 + 6 + 40 +2.5 + 49 +1.25 + 49 +-0.25 + 49 +0.25 + 49 +-0.25 + 49 +0.25 + 49 +-0.25 + 0 +LTYPE + 2 +PHANTOM2 + 70 + 0 + 3 +___ _ _ ___ _ _ ___ _ _ ___ _ _ ___ _ _ ___ _ _ + 72 + 65 + 73 + 6 + 40 +1.25 + 49 +0.625 + 49 +-0.125 + 49 +0.125 + 49 +-0.125 + 49 +0.125 + 49 +-0.125 + 0 +LTYPE + 2 +PHANTOMX2 + 70 + 0 + 3 +____________ ____ ____ ____________ + 72 + 65 + 73 + 6 + 40 +5.0 + 49 +2.5 + 49 +-0.5 + 49 +0.5 + 49 +-0.5 + 49 +0.5 + 49 +-0.5 + 0 +ENDTAB + 0 +TABLE + 2 +LAYER + 70 + 21 + 0 +LAYER + 2 +0 + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +LAYER + 2 +MAUERWERK + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +LAYER + 2 +TRENNWAENDE + 70 + 0 + 62 + 5 + 6 +CONTINUOUS + 0 +LAYER + 2 +FENSTER + 70 + 0 + 62 + 8 + 6 +CONTINUOUS + 0 +LAYER + 2 +VORSATZSCHALLE + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +LAYER + 2 +DAEMMUNG + 70 + 0 + 62 + 6 + 6 +CONTINUOUS + 0 +LAYER + 2 +BALKONE + 70 + 0 + 62 + 1 + 6 +CONTINUOUS + 0 +LAYER + 2 +SCHORNSTEINE + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +LAYER + 2 +SCHRAFFUR-MAUER + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +LAYER + 2 +SCHRAFFUR-VORMAUER + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +LAYER + 2 +SCHRAFFUR-TRENNWAND + 70 + 0 + 62 + 5 + 6 +CONTINUOUS + 0 +LAYER + 2 +SCHRAFFUR-DAEMMUNG + 70 + 0 + 62 + 6 + 6 +CONTINUOUS + 0 +LAYER + 2 +BEMASSUNG + 70 + 0 + 62 + 3 + 6 +CONTINUOUS + 0 +LAYER + 2 +DEFPOINTS + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +LAYER + 2 +TREPPE + 70 + 0 + 62 + 3 + 6 +CONTINUOUS + 0 +LAYER + 2 +SCHNITTLINIEN + 70 + 0 + 62 + 1 + 6 +STRICHPUNKT + 0 +LAYER + 2 +LEGENDE-35 + 70 + 0 + 62 + 2 + 6 +CONTINUOUS + 0 +LAYER + 2 +SPANNRICHTUNG + 70 + 0 + 62 + 2 + 6 +CONTINUOUS + 0 +LAYER + 2 +LEGENDE-70 + 70 + 0 + 62 + 1 + 6 +CONTINUOUS + 0 +LAYER + 2 +DETAILS + 70 + 0 + 62 + 1 + 6 +GESTRICHELT2 + 0 +LAYER + 2 +LEGENDE + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +ENDTAB + 0 +TABLE + 2 +STYLE + 70 + 2 + 0 +STYLE + 2 +STANDARD + 70 + 0 + 40 +175.0 + 41 +0.75 + 50 +0.0 + 71 + 0 + 42 +175.0 + 3 +C:\ACADWIN\FONTS\TXT.SHX + 4 + + 0 +STYLE + 2 +STANDART + 70 + 0 + 40 +175.0 + 41 +0.75 + 50 +0.0 + 71 + 0 + 42 +175.0 + 3 +C:\ACADWIN\FONTS\TXT.SHX + 4 + + 0 +ENDTAB + 0 +TABLE + 2 +VIEW + 70 + 0 + 0 +ENDTAB + 0 +TABLE + 2 +UCS + 70 + 2 + 0 +UCS + 2 +WELT + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 11 +1.0 + 21 +0.0 + 31 +0.0 + 12 +0.0 + 22 +1.0 + 32 +0.0 + 0 +UCS + 2 +MAUER + 70 + 0 + 10 +5000.0 + 20 +9250.0 + 30 +0.0 + 11 +1.0 + 21 +0.0 + 31 +0.0 + 12 +0.0 + 22 +1.0 + 32 +0.0 + 0 +ENDTAB + 0 +TABLE + 2 +APPID + 70 + 1 + 0 +APPID + 2 +ACAD + 70 + 0 + 0 +ENDTAB + 0 +TABLE + 2 +DIMSTYLE + 70 + 2 + 0 +DIMSTYLE + 2 +ENTWURFSBEMASSUNG + 70 + 0 + 3 + + 4 + + 5 +MASSHILFSLINIE + 6 + + 7 + + 40 +1.0 + 41 +1.0 + 42 +1650.0 + 43 +0.0 + 44 +150.0 + 45 +0.0 + 46 +150.0 + 47 +0.0 + 48 +0.0 +140 +175.0 +141 +12.5 +142 +0.0 +143 +25.4 +144 +0.0001 +145 +0.0 +146 +1.0 +147 +0.0 + 71 + 0 + 72 + 0 + 73 + 0 + 74 + 0 + 75 + 1 + 76 + 1 + 77 + 1 + 78 + 8 +170 + 0 +171 + 2 +172 + 0 +173 + 0 +174 + 1 +175 + 0 +176 + 0 +177 + 0 +178 + 0 + 0 +DIMSTYLE + 2 +ENTWURF2 + 70 + 0 + 3 + + 4 + + 5 +MASSHILFSLINIE + 6 + + 7 + + 40 +1.0 + 41 +0.0 + 42 +2150.0 + 43 +0.0 + 44 +150.0 + 45 +0.0 + 46 +150.0 + 47 +0.0 + 48 +0.0 +140 +175.0 +141 +12.5 +142 +75.0 +143 +25.4 +144 +0.0001 +145 +0.0 +146 +1.0 +147 +0.0 + 71 + 0 + 72 + 0 + 73 + 0 + 74 + 0 + 75 + 0 + 76 + 0 + 77 + 1 + 78 + 0 +170 + 0 +171 + 2 +172 + 0 +173 + 0 +174 + 1 +175 + 0 +176 + 0 +177 + 0 +178 + 0 + 0 +ENDTAB + 0 +ENDSEC + 0 +SECTION + 2 +BLOCKS + 0 +BLOCK + 8 +0 + 2 +$MODEL_SPACE + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +$MODEL_SPACE + 1 + + 0 +ENDBLK + 5 +134 + 8 +0 + 0 +BLOCK + 67 + 1 + 8 +0 + 2 +$PAPER_SPACE + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +$PAPER_SPACE + 1 + + 0 +ENDBLK + 5 +132 + 67 + 1 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X0 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X0 + 1 + + 0 +LINE + 5 +138 + 8 +0 + 62 + 0 + 10 +14875.0 + 20 +20892.766953 + 30 +0.0 + 11 +15240.0 + 21 +21257.766953 + 31 +0.0 + 0 +LINE + 5 +139 + 8 +0 + 62 + 0 + 10 +15732.233047 + 20 +21750.0 + 30 +0.0 + 11 +15865.0 + 21 +21882.766953 + 31 +0.0 + 0 +LINE + 5 +13A + 8 +0 + 62 + 0 + 10 +14875.0 + 20 +21246.320344 + 30 +0.0 + 11 +15240.0 + 21 +21611.320344 + 31 +0.0 + 0 +LINE + 5 +13B + 8 +0 + 62 + 0 + 10 +15378.679656 + 20 +21750.0 + 30 +0.0 + 11 +15743.679656 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +13C + 8 +0 + 62 + 0 + 10 +14875.0 + 20 +21599.873734 + 30 +0.0 + 11 +15390.126266 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +13D + 8 +0 + 62 + 0 + 10 +14671.572875 + 20 +21750.0 + 30 +0.0 + 11 +15036.572875 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +13E + 8 +0 + 62 + 0 + 10 +14318.019485 + 20 +21750.0 + 30 +0.0 + 11 +14683.019485 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +13F + 8 +0 + 62 + 0 + 10 +13964.466094 + 20 +21750.0 + 30 +0.0 + 11 +14329.466094 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +140 + 8 +0 + 62 + 0 + 10 +13610.912703 + 20 +21750.0 + 30 +0.0 + 11 +13975.912703 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +141 + 8 +0 + 62 + 0 + 10 +13257.359313 + 20 +21750.0 + 30 +0.0 + 11 +13622.359313 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +142 + 8 +0 + 62 + 0 + 10 +12903.805922 + 20 +21750.0 + 30 +0.0 + 11 +13268.805922 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +143 + 8 +0 + 62 + 0 + 10 +12550.252532 + 20 +21750.0 + 30 +0.0 + 11 +12915.252532 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +144 + 8 +0 + 62 + 0 + 10 +12196.699141 + 20 +21750.0 + 30 +0.0 + 11 +12561.699141 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +145 + 8 +0 + 62 + 0 + 10 +11843.145751 + 20 +21750.0 + 30 +0.0 + 11 +12208.145751 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +146 + 8 +0 + 62 + 0 + 10 +11489.59236 + 20 +21750.0 + 30 +0.0 + 11 +11854.59236 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +147 + 8 +0 + 62 + 0 + 10 +11250.0 + 20 +21863.961031 + 30 +0.0 + 11 +11501.038969 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +148 + 8 +0 + 62 + 0 + 10 +14875.0 + 20 +20539.213562 + 30 +0.0 + 11 +15240.0 + 21 +20904.213562 + 31 +0.0 + 0 +LINE + 5 +149 + 8 +0 + 62 + 0 + 10 +14875.0 + 20 +20185.660172 + 30 +0.0 + 11 +15240.0 + 21 +20550.660172 + 31 +0.0 + 0 +LINE + 5 +14A + 8 +0 + 62 + 0 + 10 +14875.0 + 20 +19832.106781 + 30 +0.0 + 11 +15240.0 + 21 +20197.106781 + 31 +0.0 + 0 +LINE + 5 +14B + 8 +0 + 62 + 0 + 10 +14875.0 + 20 +19478.553391 + 30 +0.0 + 11 +15240.0 + 21 +19843.553391 + 31 +0.0 + 0 +LINE + 5 +14C + 8 +0 + 62 + 0 + 10 +14875.0 + 20 +19125.0 + 30 +0.0 + 11 +15240.0 + 21 +19490.0 + 31 +0.0 + 0 +LINE + 5 +14D + 8 +0 + 62 + 0 + 10 +14875.0 + 20 +18771.446609 + 30 +0.0 + 11 +15240.0 + 21 +19136.446609 + 31 +0.0 + 0 +LINE + 5 +14E + 8 +0 + 62 + 0 + 10 +14875.0 + 20 +18417.893219 + 30 +0.0 + 11 +15240.0 + 21 +18782.893219 + 31 +0.0 + 0 +LINE + 5 +14F + 8 +0 + 62 + 0 + 10 +14875.0 + 20 +18064.339828 + 30 +0.0 + 11 +15240.0 + 21 +18429.339828 + 31 +0.0 + 0 +LINE + 5 +150 + 8 +0 + 62 + 0 + 10 +14875.0 + 20 +17710.786438 + 30 +0.0 + 11 +15240.0 + 21 +18075.786438 + 31 +0.0 + 0 +LINE + 5 +151 + 8 +0 + 62 + 0 + 10 +14875.0 + 20 +17357.233047 + 30 +0.0 + 11 +15240.0 + 21 +17722.233047 + 31 +0.0 + 0 +LINE + 5 +152 + 8 +0 + 62 + 0 + 10 +15121.320344 + 20 +17250.0 + 30 +0.0 + 11 +15240.0 + 21 +17368.679656 + 31 +0.0 + 0 +ENDBLK + 5 +153 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X1 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X1 + 1 + + 0 +LINE + 5 +155 + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +19856.601718 + 30 +0.0 + 11 +5365.0 + 21 +20221.601718 + 31 +0.0 + 0 +LINE + 5 +156 + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +20210.155108 + 30 +0.0 + 11 +5365.0 + 21 +20575.155108 + 31 +0.0 + 0 +LINE + 5 +157 + 8 +0 + 62 + 0 + 10 +6539.844892 + 20 +21750.0 + 30 +0.0 + 11 +6740.0 + 21 +21950.155108 + 31 +0.0 + 0 +LINE + 5 +158 + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +20563.708499 + 30 +0.0 + 11 +5365.0 + 21 +20928.708499 + 31 +0.0 + 0 +LINE + 5 +159 + 8 +0 + 62 + 0 + 10 +6186.291501 + 20 +21750.0 + 30 +0.0 + 11 +6551.291501 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +15A + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +20917.26189 + 30 +0.0 + 11 +5365.0 + 21 +21282.26189 + 31 +0.0 + 0 +LINE + 5 +15B + 8 +0 + 62 + 0 + 10 +5832.73811 + 20 +21750.0 + 30 +0.0 + 11 +6197.73811 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +15C + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +21270.81528 + 30 +0.0 + 11 +5365.0 + 21 +21635.81528 + 31 +0.0 + 0 +LINE + 5 +15D + 8 +0 + 62 + 0 + 10 +5479.18472 + 20 +21750.0 + 30 +0.0 + 11 +5844.18472 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +15E + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +21624.368671 + 30 +0.0 + 11 +5490.631329 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +15F + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +21977.922061 + 30 +0.0 + 11 +5137.077939 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +160 + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +19503.048327 + 30 +0.0 + 11 +5365.0 + 21 +19868.048327 + 31 +0.0 + 0 +LINE + 5 +161 + 8 +0 + 62 + 0 + 10 +5225.505063 + 20 +19375.0 + 30 +0.0 + 11 +5365.0 + 21 +19514.494937 + 31 +0.0 + 0 +ENDBLK + 5 +162 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X2 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X2 + 1 + + 0 +LINE + 5 +164 + 8 +0 + 62 + 0 + 10 +9721.825407 + 20 +21750.0 + 30 +0.0 + 11 +10086.825407 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +165 + 8 +0 + 62 + 0 + 10 +9368.272016 + 20 +21750.0 + 30 +0.0 + 11 +9733.272016 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +166 + 8 +0 + 62 + 0 + 10 +9014.718626 + 20 +21750.0 + 30 +0.0 + 11 +9379.718626 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +167 + 8 +0 + 62 + 0 + 10 +8661.165235 + 20 +21750.0 + 30 +0.0 + 11 +9026.165235 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +168 + 8 +0 + 62 + 0 + 10 +8500.0 + 20 +21942.388155 + 30 +0.0 + 11 +8672.611845 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +169 + 8 +0 + 62 + 0 + 10 +9750.0 + 20 +21424.621202 + 30 +0.0 + 11 +10240.0 + 21 +21914.621202 + 31 +0.0 + 0 +LINE + 5 +16A + 8 +0 + 62 + 0 + 10 +9750.0 + 20 +21071.067812 + 30 +0.0 + 11 +10115.0 + 21 +21436.067812 + 31 +0.0 + 0 +LINE + 5 +16B + 8 +0 + 62 + 0 + 10 +9907.485579 + 20 +20875.0 + 30 +0.0 + 11 +10115.0 + 21 +21082.514421 + 31 +0.0 + 0 +ENDBLK + 5 +16C + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X3 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X3 + 1 + + 0 +LINE + 5 +16E + 8 +0 + 62 + 0 + 10 +22500.0 + 20 +20739.59236 + 30 +0.0 + 11 +22865.0 + 21 +21104.59236 + 31 +0.0 + 0 +LINE + 5 +16F + 8 +0 + 62 + 0 + 10 +22500.0 + 20 +21093.145751 + 30 +0.0 + 11 +22865.0 + 21 +21458.145751 + 31 +0.0 + 0 +LINE + 5 +170 + 8 +0 + 62 + 0 + 10 +23156.854249 + 20 +21750.0 + 30 +0.0 + 11 +23365.0 + 21 +21958.145751 + 31 +0.0 + 0 +LINE + 5 +171 + 8 +0 + 62 + 0 + 10 +22500.0 + 20 +21446.699141 + 30 +0.0 + 11 +23168.300859 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +172 + 8 +0 + 62 + 0 + 10 +22449.747468 + 20 +21750.0 + 30 +0.0 + 11 +22814.747468 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +173 + 8 +0 + 62 + 0 + 10 +22096.194078 + 20 +21750.0 + 30 +0.0 + 11 +22461.194078 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +174 + 8 +0 + 62 + 0 + 10 +21742.640687 + 20 +21750.0 + 30 +0.0 + 11 +22107.640687 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +175 + 8 +0 + 62 + 0 + 10 +21389.087297 + 20 +21750.0 + 30 +0.0 + 11 +21754.087297 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +176 + 8 +0 + 62 + 0 + 10 +21035.533906 + 20 +21750.0 + 30 +0.0 + 11 +21400.533906 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +177 + 8 +0 + 62 + 0 + 10 +20681.980515 + 20 +21750.0 + 30 +0.0 + 11 +21046.980515 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +178 + 8 +0 + 62 + 0 + 10 +20328.427125 + 20 +21750.0 + 30 +0.0 + 11 +20693.427125 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +179 + 8 +0 + 62 + 0 + 10 +19974.873734 + 20 +21750.0 + 30 +0.0 + 11 +20339.873734 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +17A + 8 +0 + 62 + 0 + 10 +19750.0 + 20 +21878.679656 + 30 +0.0 + 11 +19986.320344 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +17B + 8 +0 + 62 + 0 + 10 +22500.0 + 20 +20386.038969 + 30 +0.0 + 11 +22865.0 + 21 +20751.038969 + 31 +0.0 + 0 +LINE + 5 +17C + 8 +0 + 62 + 0 + 10 +22500.0 + 20 +20032.485579 + 30 +0.0 + 11 +22865.0 + 21 +20397.485579 + 31 +0.0 + 0 +LINE + 5 +17D + 8 +0 + 62 + 0 + 10 +22500.0 + 20 +19678.932188 + 30 +0.0 + 11 +22865.0 + 21 +20043.932188 + 31 +0.0 + 0 +LINE + 5 +17E + 8 +0 + 62 + 0 + 10 +22500.0 + 20 +19325.378798 + 30 +0.0 + 11 +22865.0 + 21 +19690.378798 + 31 +0.0 + 0 +LINE + 5 +17F + 8 +0 + 62 + 0 + 10 +22500.0 + 20 +18971.825407 + 30 +0.0 + 11 +22865.0 + 21 +19336.825407 + 31 +0.0 + 0 +LINE + 5 +180 + 8 +0 + 62 + 0 + 10 +22500.0 + 20 +18618.272016 + 30 +0.0 + 11 +22865.0 + 21 +18983.272016 + 31 +0.0 + 0 +LINE + 5 +181 + 8 +0 + 62 + 0 + 10 +22500.0 + 20 +18264.718626 + 30 +0.0 + 11 +22865.0 + 21 +18629.718626 + 31 +0.0 + 0 +LINE + 5 +182 + 8 +0 + 62 + 0 + 10 +22500.0 + 20 +17911.165235 + 30 +0.0 + 11 +22865.0 + 21 +18276.165235 + 31 +0.0 + 0 +LINE + 5 +183 + 8 +0 + 62 + 0 + 10 +22500.0 + 20 +17557.611845 + 30 +0.0 + 11 +22865.0 + 21 +17922.611845 + 31 +0.0 + 0 +LINE + 5 +184 + 8 +0 + 62 + 0 + 10 +22500.0 + 20 +17204.058454 + 30 +0.0 + 11 +22865.0 + 21 +17569.058454 + 31 +0.0 + 0 +LINE + 5 +185 + 8 +0 + 62 + 0 + 10 +22774.494937 + 20 +17125.0 + 30 +0.0 + 11 +22865.0 + 21 +17215.505063 + 31 +0.0 + 0 +ENDBLK + 5 +186 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X4 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X4 + 1 + + 0 +LINE + 5 +188 + 8 +0 + 62 + 0 + 10 +26375.0 + 20 +20725.505063 + 30 +0.0 + 11 +26740.0 + 21 +21090.505063 + 31 +0.0 + 0 +LINE + 5 +189 + 8 +0 + 62 + 0 + 10 +26375.0 + 20 +21079.058454 + 30 +0.0 + 11 +26740.0 + 21 +21444.058454 + 31 +0.0 + 0 +LINE + 5 +18A + 8 +0 + 62 + 0 + 10 +26375.0 + 20 +21432.611845 + 30 +0.0 + 11 +26740.0 + 21 +21797.611845 + 31 +0.0 + 0 +LINE + 5 +18B + 8 +0 + 62 + 0 + 10 +26338.834765 + 20 +21750.0 + 30 +0.0 + 11 +26703.834765 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +18C + 8 +0 + 62 + 0 + 10 +25985.281374 + 20 +21750.0 + 30 +0.0 + 11 +26350.281374 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +18D + 8 +0 + 62 + 0 + 10 +25631.727984 + 20 +21750.0 + 30 +0.0 + 11 +25996.727984 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +18E + 8 +0 + 62 + 0 + 10 +25278.174593 + 20 +21750.0 + 30 +0.0 + 11 +25643.174593 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +18F + 8 +0 + 62 + 0 + 10 +25250.0 + 20 +22075.378798 + 30 +0.0 + 11 +25289.621202 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +190 + 8 +0 + 62 + 0 + 10 +26375.0 + 20 +20371.951673 + 30 +0.0 + 11 +26740.0 + 21 +20736.951673 + 31 +0.0 + 0 +LINE + 5 +191 + 8 +0 + 62 + 0 + 10 +26375.0 + 20 +20018.398282 + 30 +0.0 + 11 +26740.0 + 21 +20383.398282 + 31 +0.0 + 0 +LINE + 5 +192 + 8 +0 + 62 + 0 + 10 +26375.0 + 20 +19664.844892 + 30 +0.0 + 11 +26740.0 + 21 +20029.844892 + 31 +0.0 + 0 +LINE + 5 +193 + 8 +0 + 62 + 0 + 10 +26375.0 + 20 +19311.291501 + 30 +0.0 + 11 +26740.0 + 21 +19676.291501 + 31 +0.0 + 0 +LINE + 5 +194 + 8 +0 + 62 + 0 + 10 +26375.0 + 20 +18957.73811 + 30 +0.0 + 11 +26740.0 + 21 +19322.73811 + 31 +0.0 + 0 +LINE + 5 +195 + 8 +0 + 62 + 0 + 10 +26375.0 + 20 +18604.18472 + 30 +0.0 + 11 +26740.0 + 21 +18969.18472 + 31 +0.0 + 0 +LINE + 5 +196 + 8 +0 + 62 + 0 + 10 +26499.368671 + 20 +18375.0 + 30 +0.0 + 11 +26740.0 + 21 +18615.631329 + 31 +0.0 + 0 +ENDBLK + 5 +197 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X5 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X5 + 1 + + 0 +LINE + 5 +199 + 8 +0 + 62 + 0 + 10 +25163.582233 + 20 +15625.0 + 30 +0.0 + 11 +25528.582233 + 21 +15990.0 + 31 +0.0 + 0 +LINE + 5 +19A + 8 +0 + 62 + 0 + 10 +26375.0 + 20 +16836.417767 + 30 +0.0 + 11 +26740.0 + 21 +17201.417767 + 31 +0.0 + 0 +LINE + 5 +19B + 8 +0 + 62 + 0 + 10 +24810.028843 + 20 +15625.0 + 30 +0.0 + 11 +25175.028843 + 21 +15990.0 + 31 +0.0 + 0 +LINE + 5 +19C + 8 +0 + 62 + 0 + 10 +26375.0 + 20 +17189.971157 + 30 +0.0 + 11 +26740.0 + 21 +17554.971157 + 31 +0.0 + 0 +LINE + 5 +19D + 8 +0 + 62 + 0 + 10 +24456.475452 + 20 +15625.0 + 30 +0.0 + 11 +24821.475452 + 21 +15990.0 + 31 +0.0 + 0 +LINE + 5 +19E + 8 +0 + 62 + 0 + 10 +26375.0 + 20 +17543.524548 + 30 +0.0 + 11 +26571.475452 + 21 +17740.0 + 31 +0.0 + 0 +LINE + 5 +19F + 8 +0 + 62 + 0 + 10 +24102.922061 + 20 +15625.0 + 30 +0.0 + 11 +24467.922061 + 21 +15990.0 + 31 +0.0 + 0 +LINE + 5 +1A0 + 8 +0 + 62 + 0 + 10 +23749.368671 + 20 +15625.0 + 30 +0.0 + 11 +24114.368671 + 21 +15990.0 + 31 +0.0 + 0 +LINE + 5 +1A1 + 8 +0 + 62 + 0 + 10 +23395.81528 + 20 +15625.0 + 30 +0.0 + 11 +23760.81528 + 21 +15990.0 + 31 +0.0 + 0 +LINE + 5 +1A2 + 8 +0 + 62 + 0 + 10 +23042.26189 + 20 +15625.0 + 30 +0.0 + 11 +23407.26189 + 21 +15990.0 + 31 +0.0 + 0 +LINE + 5 +1A3 + 8 +0 + 62 + 0 + 10 +22688.708499 + 20 +15625.0 + 30 +0.0 + 11 +23053.708499 + 21 +15990.0 + 31 +0.0 + 0 +LINE + 5 +1A4 + 8 +0 + 62 + 0 + 10 +22335.155108 + 20 +15625.0 + 30 +0.0 + 11 +22865.0 + 21 +16154.844892 + 31 +0.0 + 0 +LINE + 5 +1A5 + 8 +0 + 62 + 0 + 10 +22250.0 + 20 +15893.398282 + 30 +0.0 + 11 +22346.601718 + 21 +15990.0 + 31 +0.0 + 0 +LINE + 5 +1A6 + 8 +0 + 62 + 0 + 10 +22500.0 + 20 +16143.398282 + 30 +0.0 + 11 +22596.601718 + 21 +16240.0 + 31 +0.0 + 0 +LINE + 5 +1A7 + 8 +0 + 62 + 0 + 10 +25517.135624 + 20 +15625.0 + 30 +0.0 + 11 +25882.135624 + 21 +15990.0 + 31 +0.0 + 0 +LINE + 5 +1A8 + 8 +0 + 62 + 0 + 10 +26375.0 + 20 +16482.864376 + 30 +0.0 + 11 +26740.0 + 21 +16847.864376 + 31 +0.0 + 0 +LINE + 5 +1A9 + 8 +0 + 62 + 0 + 10 +25870.689014 + 20 +15625.0 + 30 +0.0 + 11 +26235.689014 + 21 +15990.0 + 31 +0.0 + 0 +LINE + 5 +1AA + 8 +0 + 62 + 0 + 10 +26375.0 + 20 +16129.310986 + 30 +0.0 + 11 +26740.0 + 21 +16494.310986 + 31 +0.0 + 0 +LINE + 5 +1AB + 8 +0 + 62 + 0 + 10 +26224.242405 + 20 +15625.0 + 30 +0.0 + 11 +26740.0 + 21 +16140.757595 + 31 +0.0 + 0 +LINE + 5 +1AC + 8 +0 + 62 + 0 + 10 +26375.0 + 20 +15422.204204 + 30 +0.0 + 11 +26740.0 + 21 +15787.204204 + 31 +0.0 + 0 +LINE + 5 +1AD + 8 +0 + 62 + 0 + 10 +26375.0 + 20 +15068.650814 + 30 +0.0 + 11 +26740.0 + 21 +15433.650814 + 31 +0.0 + 0 +LINE + 5 +1AE + 8 +0 + 62 + 0 + 10 +26375.0 + 20 +14715.097423 + 30 +0.0 + 11 +26740.0 + 21 +15080.097423 + 31 +0.0 + 0 +LINE + 5 +1AF + 8 +0 + 62 + 0 + 10 +26375.0 + 20 +14361.544033 + 30 +0.0 + 11 +26740.0 + 21 +14726.544033 + 31 +0.0 + 0 +LINE + 5 +1B0 + 8 +0 + 62 + 0 + 10 +26375.0 + 20 +14007.990642 + 30 +0.0 + 11 +26740.0 + 21 +14372.990642 + 31 +0.0 + 0 +LINE + 5 +1B1 + 8 +0 + 62 + 0 + 10 +26375.0 + 20 +13654.437252 + 30 +0.0 + 11 +26740.0 + 21 +14019.437252 + 31 +0.0 + 0 +LINE + 5 +1B2 + 8 +0 + 62 + 0 + 10 +26375.0 + 20 +13300.883861 + 30 +0.0 + 11 +26740.0 + 21 +13665.883861 + 31 +0.0 + 0 +LINE + 5 +1B3 + 8 +0 + 62 + 0 + 10 +26375.0 + 20 +12947.33047 + 30 +0.0 + 11 +26740.0 + 21 +13312.33047 + 31 +0.0 + 0 +LINE + 5 +1B4 + 8 +0 + 62 + 0 + 10 +26375.0 + 20 +12593.77708 + 30 +0.0 + 11 +26740.0 + 21 +12958.77708 + 31 +0.0 + 0 +LINE + 5 +1B5 + 8 +0 + 62 + 0 + 10 +26375.0 + 20 +12240.223689 + 30 +0.0 + 11 +26740.0 + 21 +12605.223689 + 31 +0.0 + 0 +LINE + 5 +1B6 + 8 +0 + 62 + 0 + 10 +26488.329701 + 20 +12000.0 + 30 +0.0 + 11 +26740.0 + 21 +12251.670299 + 31 +0.0 + 0 +ENDBLK + 5 +1B7 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X6 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X6 + 1 + + 0 +LINE + 5 +1B9 + 8 +0 + 62 + 0 + 10 +9750.0 + 20 +18242.640687 + 30 +0.0 + 11 +10115.0 + 21 +18607.640687 + 31 +0.0 + 0 +LINE + 5 +1BA + 8 +0 + 62 + 0 + 10 +9750.0 + 20 +18596.194078 + 30 +0.0 + 11 +10115.0 + 21 +18961.194078 + 31 +0.0 + 0 +LINE + 5 +1BB + 8 +0 + 62 + 0 + 10 +9750.0 + 20 +18949.747468 + 30 +0.0 + 11 +10115.0 + 21 +19314.747468 + 31 +0.0 + 0 +LINE + 5 +1BC + 8 +0 + 62 + 0 + 10 +9750.0 + 20 +19303.300859 + 30 +0.0 + 11 +10115.0 + 21 +19668.300859 + 31 +0.0 + 0 +LINE + 5 +1BD + 8 +0 + 62 + 0 + 10 +9750.0 + 20 +19656.854249 + 30 +0.0 + 11 +10083.145751 + 21 +19990.0 + 31 +0.0 + 0 +LINE + 5 +1BE + 8 +0 + 62 + 0 + 10 +9000.0 + 20 +17139.087297 + 30 +0.0 + 11 +9100.912703 + 21 +17240.0 + 31 +0.0 + 0 +LINE + 5 +1BF + 8 +0 + 62 + 0 + 10 +9750.0 + 20 +17889.087297 + 30 +0.0 + 11 +10115.0 + 21 +18254.087297 + 31 +0.0 + 0 +LINE + 5 +1C0 + 8 +0 + 62 + 0 + 10 +9089.466094 + 20 +16875.0 + 30 +0.0 + 11 +9454.466094 + 21 +17240.0 + 31 +0.0 + 0 +LINE + 5 +1C1 + 8 +0 + 62 + 0 + 10 +9750.0 + 20 +17535.533906 + 30 +0.0 + 11 +10115.0 + 21 +17900.533906 + 31 +0.0 + 0 +LINE + 5 +1C2 + 8 +0 + 62 + 0 + 10 +9443.019485 + 20 +16875.0 + 30 +0.0 + 11 +10115.0 + 21 +17546.980515 + 31 +0.0 + 0 +LINE + 5 +1C3 + 8 +0 + 62 + 0 + 10 +9750.0 + 20 +16828.427125 + 30 +0.0 + 11 +10115.0 + 21 +17193.427125 + 31 +0.0 + 0 +LINE + 5 +1C4 + 8 +0 + 62 + 0 + 10 +9900.126266 + 20 +16625.0 + 30 +0.0 + 11 +10115.0 + 21 +16839.873734 + 31 +0.0 + 0 +ENDBLK + 5 +1C5 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X7 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X7 + 1 + + 0 +LINE + 5 +1C7 + 8 +0 + 62 + 0 + 10 +6261.038969 + 20 +16875.0 + 30 +0.0 + 11 +6626.038969 + 21 +17240.0 + 31 +0.0 + 0 +LINE + 5 +1C8 + 8 +0 + 62 + 0 + 10 +5157.485579 + 20 +16125.0 + 30 +0.0 + 11 +5365.0 + 21 +16332.514421 + 31 +0.0 + 0 +LINE + 5 +1C9 + 8 +0 + 62 + 0 + 10 +5907.485579 + 20 +16875.0 + 30 +0.0 + 11 +6272.485579 + 21 +17240.0 + 31 +0.0 + 0 +LINE + 5 +1CA + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +16321.067812 + 30 +0.0 + 11 +5365.0 + 21 +16686.067812 + 31 +0.0 + 0 +LINE + 5 +1CB + 8 +0 + 62 + 0 + 10 +5553.932188 + 20 +16875.0 + 30 +0.0 + 11 +5918.932188 + 21 +17240.0 + 31 +0.0 + 0 +LINE + 5 +1CC + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +16674.621202 + 30 +0.0 + 11 +5565.378798 + 21 +17240.0 + 31 +0.0 + 0 +LINE + 5 +1CD + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +17028.174593 + 30 +0.0 + 11 +5365.0 + 21 +17393.174593 + 31 +0.0 + 0 +LINE + 5 +1CE + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +17381.727984 + 30 +0.0 + 11 +5365.0 + 21 +17746.727984 + 31 +0.0 + 0 +LINE + 5 +1CF + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +17735.281374 + 30 +0.0 + 11 +5365.0 + 21 +18100.281374 + 31 +0.0 + 0 +LINE + 5 +1D0 + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +18088.834765 + 30 +0.0 + 11 +5151.165235 + 21 +18240.0 + 31 +0.0 + 0 +LINE + 5 +1D1 + 8 +0 + 62 + 0 + 10 +6614.59236 + 20 +16875.0 + 30 +0.0 + 11 +6979.59236 + 21 +17240.0 + 31 +0.0 + 0 +LINE + 5 +1D2 + 8 +0 + 62 + 0 + 10 +6968.145751 + 20 +16875.0 + 30 +0.0 + 11 +7333.145751 + 21 +17240.0 + 31 +0.0 + 0 +LINE + 5 +1D3 + 8 +0 + 62 + 0 + 10 +7321.699141 + 20 +16875.0 + 30 +0.0 + 11 +7686.699141 + 21 +17240.0 + 31 +0.0 + 0 +LINE + 5 +1D4 + 8 +0 + 62 + 0 + 10 +7675.252532 + 20 +16875.0 + 30 +0.0 + 11 +8040.252532 + 21 +17240.0 + 31 +0.0 + 0 +LINE + 5 +1D5 + 8 +0 + 62 + 0 + 10 +8028.805922 + 20 +16875.0 + 30 +0.0 + 11 +8115.0 + 21 +16961.194078 + 31 +0.0 + 0 +ENDBLK + 5 +1D6 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X8 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X8 + 1 + + 0 +LINE + 5 +1D8 + 8 +0 + 62 + 0 + 10 +8750.0 + 20 +9464.466094 + 30 +0.0 + 11 +8900.533906 + 21 +9615.0 + 31 +0.0 + 0 +LINE + 5 +1D9 + 8 +0 + 62 + 0 + 10 +11660.533906 + 20 +12375.0 + 30 +0.0 + 11 +12025.533906 + 21 +12740.0 + 31 +0.0 + 0 +LINE + 5 +1DA + 8 +0 + 62 + 0 + 10 +9375.0 + 20 +10089.466094 + 30 +0.0 + 11 +9740.0 + 21 +10454.466094 + 31 +0.0 + 0 +LINE + 5 +1DB + 8 +0 + 62 + 0 + 10 +9375.0 + 20 +10443.019485 + 30 +0.0 + 11 +9740.0 + 21 +10808.019485 + 31 +0.0 + 0 +LINE + 5 +1DC + 8 +0 + 62 + 0 + 10 +11306.980515 + 20 +12375.0 + 30 +0.0 + 11 +11671.980515 + 21 +12740.0 + 31 +0.0 + 0 +LINE + 5 +1DD + 8 +0 + 62 + 0 + 10 +9375.0 + 20 +10796.572875 + 30 +0.0 + 11 +9740.0 + 21 +11161.572875 + 31 +0.0 + 0 +LINE + 5 +1DE + 8 +0 + 62 + 0 + 10 +10953.427125 + 20 +12375.0 + 30 +0.0 + 11 +11318.427125 + 21 +12740.0 + 31 +0.0 + 0 +LINE + 5 +1DF + 8 +0 + 62 + 0 + 10 +9375.0 + 20 +11150.126266 + 30 +0.0 + 11 +9740.0 + 21 +11515.126266 + 31 +0.0 + 0 +LINE + 5 +1E0 + 8 +0 + 62 + 0 + 10 +10599.873734 + 20 +12375.0 + 30 +0.0 + 11 +10964.873734 + 21 +12740.0 + 31 +0.0 + 0 +LINE + 5 +1E1 + 8 +0 + 62 + 0 + 10 +9375.0 + 20 +11503.679656 + 30 +0.0 + 11 +9740.0 + 21 +11868.679656 + 31 +0.0 + 0 +LINE + 5 +1E2 + 8 +0 + 62 + 0 + 10 +10246.320344 + 20 +12375.0 + 30 +0.0 + 11 +10611.320344 + 21 +12740.0 + 31 +0.0 + 0 +LINE + 5 +1E3 + 8 +0 + 62 + 0 + 10 +9375.0 + 20 +11857.233047 + 30 +0.0 + 11 +9740.0 + 21 +12222.233047 + 31 +0.0 + 0 +LINE + 5 +1E4 + 8 +0 + 62 + 0 + 10 +9892.766953 + 20 +12375.0 + 30 +0.0 + 11 +10257.766953 + 21 +12740.0 + 31 +0.0 + 0 +LINE + 5 +1E5 + 8 +0 + 62 + 0 + 10 +9375.0 + 20 +12210.786438 + 30 +0.0 + 11 +10115.0 + 21 +12950.786438 + 31 +0.0 + 0 +LINE + 5 +1E6 + 8 +0 + 62 + 0 + 10 +9375.0 + 20 +12564.339828 + 30 +0.0 + 11 +9550.660172 + 21 +12740.0 + 31 +0.0 + 0 +LINE + 5 +1E7 + 8 +0 + 62 + 0 + 10 +9750.0 + 20 +12939.339828 + 30 +0.0 + 11 +9800.660172 + 21 +12990.0 + 31 +0.0 + 0 +LINE + 5 +1E8 + 8 +0 + 62 + 0 + 10 +8889.087297 + 20 +9250.0 + 30 +0.0 + 11 +9254.087297 + 21 +9615.0 + 31 +0.0 + 0 +LINE + 5 +1E9 + 8 +0 + 62 + 0 + 10 +12014.087297 + 20 +12375.0 + 30 +0.0 + 11 +12379.087297 + 21 +12740.0 + 31 +0.0 + 0 +LINE + 5 +1EA + 8 +0 + 62 + 0 + 10 +9375.0 + 20 +9735.912703 + 30 +0.0 + 11 +9740.0 + 21 +10100.912703 + 31 +0.0 + 0 +LINE + 5 +1EB + 8 +0 + 62 + 0 + 10 +9242.640687 + 20 +9250.0 + 30 +0.0 + 11 +9740.0 + 21 +9747.359313 + 31 +0.0 + 0 +LINE + 5 +1EC + 8 +0 + 62 + 0 + 10 +12367.640687 + 20 +12375.0 + 30 +0.0 + 11 +12615.0 + 21 +12622.359313 + 31 +0.0 + 0 +LINE + 5 +1ED + 8 +0 + 62 + 0 + 10 +9596.194078 + 20 +9250.0 + 30 +0.0 + 11 +9865.0 + 21 +9518.805922 + 31 +0.0 + 0 +ENDBLK + 5 +1EE + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X9 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X9 + 1 + + 0 +LINE + 5 +1F0 + 8 +0 + 62 + 0 + 10 +11363.961031 + 20 +9250.0 + 30 +0.0 + 11 +11728.961031 + 21 +9615.0 + 31 +0.0 + 0 +LINE + 5 +1F1 + 8 +0 + 62 + 0 + 10 +14125.0 + 20 +12011.038969 + 30 +0.0 + 11 +14490.0 + 21 +12376.038969 + 31 +0.0 + 0 +LINE + 5 +1F2 + 8 +0 + 62 + 0 + 10 +11250.0 + 20 +9489.59236 + 30 +0.0 + 11 +11375.40764 + 21 +9615.0 + 31 +0.0 + 0 +LINE + 5 +1F3 + 8 +0 + 62 + 0 + 10 +14125.0 + 20 +12364.59236 + 30 +0.0 + 11 +14490.0 + 21 +12729.59236 + 31 +0.0 + 0 +LINE + 5 +1F4 + 8 +0 + 62 + 0 + 10 +13875.0 + 20 +12468.145751 + 30 +0.0 + 11 +14490.0 + 21 +13083.145751 + 31 +0.0 + 0 +LINE + 5 +1F5 + 8 +0 + 62 + 0 + 10 +14125.0 + 20 +13071.699141 + 30 +0.0 + 11 +14490.0 + 21 +13436.699141 + 31 +0.0 + 0 +LINE + 5 +1F6 + 8 +0 + 62 + 0 + 10 +14553.300859 + 20 +13500.0 + 30 +0.0 + 11 +14615.0 + 21 +13561.699141 + 31 +0.0 + 0 +LINE + 5 +1F7 + 8 +0 + 62 + 0 + 10 +14125.0 + 20 +13425.252532 + 30 +0.0 + 11 +14564.747468 + 21 +13865.0 + 31 +0.0 + 0 +LINE + 5 +1F8 + 8 +0 + 62 + 0 + 10 +14125.0 + 20 +13778.805922 + 30 +0.0 + 11 +14211.194078 + 21 +13865.0 + 31 +0.0 + 0 +LINE + 5 +1F9 + 8 +0 + 62 + 0 + 10 +11717.514421 + 20 +9250.0 + 30 +0.0 + 11 +12082.514421 + 21 +9615.0 + 31 +0.0 + 0 +LINE + 5 +1FA + 8 +0 + 62 + 0 + 10 +14125.0 + 20 +11657.485579 + 30 +0.0 + 11 +14490.0 + 21 +12022.485579 + 31 +0.0 + 0 +LINE + 5 +1FB + 8 +0 + 62 + 0 + 10 +12071.067812 + 20 +9250.0 + 30 +0.0 + 11 +12436.067812 + 21 +9615.0 + 31 +0.0 + 0 +LINE + 5 +1FC + 8 +0 + 62 + 0 + 10 +14125.0 + 20 +11303.932188 + 30 +0.0 + 11 +14490.0 + 21 +11668.932188 + 31 +0.0 + 0 +LINE + 5 +1FD + 8 +0 + 62 + 0 + 10 +12424.621202 + 20 +9250.0 + 30 +0.0 + 11 +12789.621202 + 21 +9615.0 + 31 +0.0 + 0 +LINE + 5 +1FE + 8 +0 + 62 + 0 + 10 +14125.0 + 20 +10950.378798 + 30 +0.0 + 11 +14490.0 + 21 +11315.378798 + 31 +0.0 + 0 +LINE + 5 +1FF + 8 +0 + 62 + 0 + 10 +12778.174593 + 20 +9250.0 + 30 +0.0 + 11 +13143.174593 + 21 +9615.0 + 31 +0.0 + 0 +LINE + 5 +200 + 8 +0 + 62 + 0 + 10 +14125.0 + 20 +10596.825407 + 30 +0.0 + 11 +14490.0 + 21 +10961.825407 + 31 +0.0 + 0 +LINE + 5 +201 + 8 +0 + 62 + 0 + 10 +13131.727984 + 20 +9250.0 + 30 +0.0 + 11 +13496.727984 + 21 +9615.0 + 31 +0.0 + 0 +LINE + 5 +202 + 8 +0 + 62 + 0 + 10 +14125.0 + 20 +10243.272016 + 30 +0.0 + 11 +14490.0 + 21 +10608.272016 + 31 +0.0 + 0 +LINE + 5 +203 + 8 +0 + 62 + 0 + 10 +13485.281374 + 20 +9250.0 + 30 +0.0 + 11 +13850.281374 + 21 +9615.0 + 31 +0.0 + 0 +LINE + 5 +204 + 8 +0 + 62 + 0 + 10 +14125.0 + 20 +9889.718626 + 30 +0.0 + 11 +14490.0 + 21 +10254.718626 + 31 +0.0 + 0 +LINE + 5 +205 + 8 +0 + 62 + 0 + 10 +13838.834765 + 20 +9250.0 + 30 +0.0 + 11 +14490.0 + 21 +9901.165235 + 31 +0.0 + 0 +LINE + 5 +206 + 8 +0 + 62 + 0 + 10 +14192.388155 + 20 +9250.0 + 30 +0.0 + 11 +14557.388155 + 21 +9615.0 + 31 +0.0 + 0 +LINE + 5 +207 + 8 +0 + 62 + 0 + 10 +14545.941546 + 20 +9250.0 + 30 +0.0 + 11 +14910.941546 + 21 +9615.0 + 31 +0.0 + 0 +LINE + 5 +208 + 8 +0 + 62 + 0 + 10 +14899.494937 + 20 +9250.0 + 30 +0.0 + 11 +15264.494937 + 21 +9615.0 + 31 +0.0 + 0 +LINE + 5 +209 + 8 +0 + 62 + 0 + 10 +15253.048327 + 20 +9250.0 + 30 +0.0 + 11 +15618.048327 + 21 +9615.0 + 31 +0.0 + 0 +LINE + 5 +20A + 8 +0 + 62 + 0 + 10 +15606.601718 + 20 +9250.0 + 30 +0.0 + 11 +15971.601718 + 21 +9615.0 + 31 +0.0 + 0 +LINE + 5 +20B + 8 +0 + 62 + 0 + 10 +15960.155108 + 20 +9250.0 + 30 +0.0 + 11 +16115.0 + 21 +9404.844892 + 31 +0.0 + 0 +ENDBLK + 5 +20C + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X10 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X10 + 1 + + 0 +LINE + 5 +20E + 8 +0 + 62 + 0 + 10 +17625.0 + 20 +12329.058454 + 30 +0.0 + 11 +17990.0 + 21 +12694.058454 + 31 +0.0 + 0 +LINE + 5 +20F + 8 +0 + 62 + 0 + 10 +17625.0 + 20 +12682.611845 + 30 +0.0 + 11 +17990.0 + 21 +13047.611845 + 31 +0.0 + 0 +LINE + 5 +210 + 8 +0 + 62 + 0 + 10 +17625.0 + 20 +13036.165235 + 30 +0.0 + 11 +17990.0 + 21 +13401.165235 + 31 +0.0 + 0 +LINE + 5 +211 + 8 +0 + 62 + 0 + 10 +17625.0 + 20 +13389.718626 + 30 +0.0 + 11 +17990.0 + 21 +13754.718626 + 31 +0.0 + 0 +LINE + 5 +212 + 8 +0 + 62 + 0 + 10 +17381.727984 + 20 +13500.0 + 30 +0.0 + 11 +17746.727984 + 21 +13865.0 + 31 +0.0 + 0 +LINE + 5 +213 + 8 +0 + 62 + 0 + 10 +17028.174593 + 20 +13500.0 + 30 +0.0 + 11 +17393.174593 + 21 +13865.0 + 31 +0.0 + 0 +LINE + 5 +214 + 8 +0 + 62 + 0 + 10 +16674.621202 + 20 +13500.0 + 30 +0.0 + 11 +17039.621202 + 21 +13865.0 + 31 +0.0 + 0 +LINE + 5 +215 + 8 +0 + 62 + 0 + 10 +16321.067812 + 20 +13500.0 + 30 +0.0 + 11 +16686.067812 + 21 +13865.0 + 31 +0.0 + 0 +LINE + 5 +216 + 8 +0 + 62 + 0 + 10 +15967.514421 + 20 +13500.0 + 30 +0.0 + 11 +16332.514421 + 21 +13865.0 + 31 +0.0 + 0 +LINE + 5 +217 + 8 +0 + 62 + 0 + 10 +15613.961031 + 20 +13500.0 + 30 +0.0 + 11 +16103.961031 + 21 +13990.0 + 31 +0.0 + 0 +LINE + 5 +218 + 8 +0 + 62 + 0 + 10 +15500.0 + 20 +13739.59236 + 30 +0.0 + 11 +15625.40764 + 21 +13865.0 + 31 +0.0 + 0 +LINE + 5 +219 + 8 +0 + 62 + 0 + 10 +15750.0 + 20 +13989.59236 + 30 +0.0 + 11 +15750.40764 + 21 +13990.0 + 31 +0.0 + 0 +LINE + 5 +21A + 8 +0 + 62 + 0 + 10 +17625.0 + 20 +11975.505063 + 30 +0.0 + 11 +17990.0 + 21 +12340.505063 + 31 +0.0 + 0 +LINE + 5 +21B + 8 +0 + 62 + 0 + 10 +17625.0 + 20 +11621.951673 + 30 +0.0 + 11 +17990.0 + 21 +11986.951673 + 31 +0.0 + 0 +LINE + 5 +21C + 8 +0 + 62 + 0 + 10 +17625.0 + 20 +11268.398282 + 30 +0.0 + 11 +17990.0 + 21 +11633.398282 + 31 +0.0 + 0 +LINE + 5 +21D + 8 +0 + 62 + 0 + 10 +17625.0 + 20 +10914.844892 + 30 +0.0 + 11 +17990.0 + 21 +11279.844892 + 31 +0.0 + 0 +LINE + 5 +21E + 8 +0 + 62 + 0 + 10 +17625.0 + 20 +10561.291501 + 30 +0.0 + 11 +17990.0 + 21 +10926.291501 + 31 +0.0 + 0 +LINE + 5 +21F + 8 +0 + 62 + 0 + 10 +17625.0 + 20 +10207.73811 + 30 +0.0 + 11 +17990.0 + 21 +10572.73811 + 31 +0.0 + 0 +LINE + 5 +220 + 8 +0 + 62 + 0 + 10 +17375.0 + 20 +9604.18472 + 30 +0.0 + 11 +17385.81528 + 21 +9615.0 + 31 +0.0 + 0 +LINE + 5 +221 + 8 +0 + 62 + 0 + 10 +17625.0 + 20 +9854.18472 + 30 +0.0 + 11 +17990.0 + 21 +10219.18472 + 31 +0.0 + 0 +LINE + 5 +222 + 8 +0 + 62 + 0 + 10 +17375.0 + 20 +9250.631329 + 30 +0.0 + 11 +17990.0 + 21 +9865.631329 + 31 +0.0 + 0 +LINE + 5 +223 + 8 +0 + 62 + 0 + 10 +17727.922061 + 20 +9250.0 + 30 +0.0 + 11 +18092.922061 + 21 +9615.0 + 31 +0.0 + 0 +LINE + 5 +224 + 8 +0 + 62 + 0 + 10 +18081.475452 + 20 +9250.0 + 30 +0.0 + 11 +18446.475452 + 21 +9615.0 + 31 +0.0 + 0 +LINE + 5 +225 + 8 +0 + 62 + 0 + 10 +18435.028843 + 20 +9250.0 + 30 +0.0 + 11 +18490.0 + 21 +9304.971157 + 31 +0.0 + 0 +ENDBLK + 5 +226 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X11 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X11 + 1 + + 0 +LINE + 5 +228 + 8 +0 + 62 + 0 + 10 +20875.0 + 20 +12043.524548 + 30 +0.0 + 11 +21240.0 + 21 +12408.524548 + 31 +0.0 + 0 +LINE + 5 +229 + 8 +0 + 62 + 0 + 10 +20875.0 + 20 +12397.077939 + 30 +0.0 + 11 +21240.0 + 21 +12762.077939 + 31 +0.0 + 0 +LINE + 5 +22A + 8 +0 + 62 + 0 + 10 +20875.0 + 20 +12750.631329 + 30 +0.0 + 11 +21240.0 + 21 +13115.631329 + 31 +0.0 + 0 +LINE + 5 +22B + 8 +0 + 62 + 0 + 10 +20875.0 + 20 +13104.18472 + 30 +0.0 + 11 +21240.0 + 21 +13469.18472 + 31 +0.0 + 0 +LINE + 5 +22C + 8 +0 + 62 + 0 + 10 +20875.0 + 20 +13457.73811 + 30 +0.0 + 11 +21240.0 + 21 +13822.73811 + 31 +0.0 + 0 +LINE + 5 +22D + 8 +0 + 62 + 0 + 10 +20875.0 + 20 +13811.291501 + 30 +0.0 + 11 +21240.0 + 21 +14176.291501 + 31 +0.0 + 0 +LINE + 5 +22E + 8 +0 + 62 + 0 + 10 +20875.0 + 20 +14164.844892 + 30 +0.0 + 11 +20950.155108 + 21 +14240.0 + 31 +0.0 + 0 +LINE + 5 +22F + 8 +0 + 62 + 0 + 10 +20875.0 + 20 +11689.971157 + 30 +0.0 + 11 +21240.0 + 21 +12054.971157 + 31 +0.0 + 0 +LINE + 5 +230 + 8 +0 + 62 + 0 + 10 +20875.0 + 20 +11336.417767 + 30 +0.0 + 11 +21240.0 + 21 +11701.417767 + 31 +0.0 + 0 +LINE + 5 +231 + 8 +0 + 62 + 0 + 10 +20875.0 + 20 +10982.864376 + 30 +0.0 + 11 +21240.0 + 21 +11347.864376 + 31 +0.0 + 0 +LINE + 5 +232 + 8 +0 + 62 + 0 + 10 +20875.0 + 20 +10629.310986 + 30 +0.0 + 11 +21240.0 + 21 +10994.310986 + 31 +0.0 + 0 +LINE + 5 +233 + 8 +0 + 62 + 0 + 10 +20875.0 + 20 +10275.757595 + 30 +0.0 + 11 +21240.0 + 21 +10640.757595 + 31 +0.0 + 0 +LINE + 5 +234 + 8 +0 + 62 + 0 + 10 +20375.0 + 20 +9422.204204 + 30 +0.0 + 11 +20567.795796 + 21 +9615.0 + 31 +0.0 + 0 +LINE + 5 +235 + 8 +0 + 62 + 0 + 10 +20875.0 + 20 +9922.204204 + 30 +0.0 + 11 +21240.0 + 21 +10287.204204 + 31 +0.0 + 0 +LINE + 5 +236 + 8 +0 + 62 + 0 + 10 +20556.349186 + 20 +9250.0 + 30 +0.0 + 11 +21240.0 + 21 +9933.650814 + 31 +0.0 + 0 +LINE + 5 +237 + 8 +0 + 62 + 0 + 10 +20909.902577 + 20 +9250.0 + 30 +0.0 + 11 +21274.902577 + 21 +9615.0 + 31 +0.0 + 0 +LINE + 5 +238 + 8 +0 + 62 + 0 + 10 +21263.455967 + 20 +9250.0 + 30 +0.0 + 11 +21365.0 + 21 +9351.544033 + 31 +0.0 + 0 +ENDBLK + 5 +239 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X12 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X12 + 1 + + 0 +LINE + 5 +23B + 8 +0 + 62 + 0 + 10 +22324.116139 + 20 +9250.0 + 30 +0.0 + 11 +22689.116139 + 21 +9615.0 + 31 +0.0 + 0 +LINE + 5 +23C + 8 +0 + 62 + 0 + 10 +21970.562748 + 20 +9250.0 + 30 +0.0 + 11 +22335.562748 + 21 +9615.0 + 31 +0.0 + 0 +LINE + 5 +23D + 8 +0 + 62 + 0 + 10 +21875.0 + 20 +9507.990642 + 30 +0.0 + 11 +21982.009358 + 21 +9615.0 + 31 +0.0 + 0 +LINE + 5 +23E + 8 +0 + 62 + 0 + 10 +22677.66953 + 20 +9250.0 + 30 +0.0 + 11 +23042.66953 + 21 +9615.0 + 31 +0.0 + 0 +LINE + 5 +23F + 8 +0 + 62 + 0 + 10 +23031.22292 + 20 +9250.0 + 30 +0.0 + 11 +23240.0 + 21 +9458.77708 + 31 +0.0 + 0 +ENDBLK + 5 +240 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X13 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X13 + 1 + + 0 +LINE + 5 +242 + 8 +0 + 62 + 0 + 10 +25375.0 + 20 +9472.456736 + 30 +0.0 + 11 +25517.543264 + 21 +9615.0 + 31 +0.0 + 0 +LINE + 5 +243 + 8 +0 + 62 + 0 + 10 +25506.096654 + 20 +9250.0 + 30 +0.0 + 11 +25871.096654 + 21 +9615.0 + 31 +0.0 + 0 +LINE + 5 +244 + 8 +0 + 62 + 0 + 10 +26375.0 + 20 +10118.903346 + 30 +0.0 + 11 +26621.096654 + 21 +10365.0 + 31 +0.0 + 0 +LINE + 5 +245 + 8 +0 + 62 + 0 + 10 +25859.650045 + 20 +9250.0 + 30 +0.0 + 11 +26224.650045 + 21 +9615.0 + 31 +0.0 + 0 +LINE + 5 +246 + 8 +0 + 62 + 0 + 10 +26375.0 + 20 +9765.349955 + 30 +0.0 + 11 +26740.0 + 21 +10130.349955 + 31 +0.0 + 0 +LINE + 5 +247 + 8 +0 + 62 + 0 + 10 +26213.203436 + 20 +9250.0 + 30 +0.0 + 11 +26740.0 + 21 +9776.796564 + 31 +0.0 + 0 +LINE + 5 +248 + 8 +0 + 62 + 0 + 10 +26566.756826 + 20 +9250.0 + 30 +0.0 + 11 +26740.0 + 21 +9423.243174 + 31 +0.0 + 0 +ENDBLK + 5 +249 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X14 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X14 + 1 + + 0 +LINE + 5 +24B + 8 +0 + 62 + 0 + 10 +7121.320344 + 20 +9250.0 + 30 +0.0 + 11 +7486.320344 + 21 +9615.0 + 31 +0.0 + 0 +LINE + 5 +24C + 8 +0 + 62 + 0 + 10 +12996.320344 + 20 +15125.0 + 30 +0.0 + 11 +13361.320344 + 21 +15490.0 + 31 +0.0 + 0 +LINE + 5 +24D + 8 +0 + 62 + 0 + 10 +6767.766953 + 20 +9250.0 + 30 +0.0 + 11 +7132.766953 + 21 +9615.0 + 31 +0.0 + 0 +LINE + 5 +24E + 8 +0 + 62 + 0 + 10 +12642.766953 + 20 +15125.0 + 30 +0.0 + 11 +13007.766953 + 21 +15490.0 + 31 +0.0 + 0 +LINE + 5 +24F + 8 +0 + 62 + 0 + 10 +6414.213562 + 20 +9250.0 + 30 +0.0 + 11 +6779.213562 + 21 +9615.0 + 31 +0.0 + 0 +LINE + 5 +250 + 8 +0 + 62 + 0 + 10 +12289.213562 + 20 +15125.0 + 30 +0.0 + 11 +12654.213562 + 21 +15490.0 + 31 +0.0 + 0 +LINE + 5 +251 + 8 +0 + 62 + 0 + 10 +6060.660172 + 20 +9250.0 + 30 +0.0 + 11 +6425.660172 + 21 +9615.0 + 31 +0.0 + 0 +LINE + 5 +252 + 8 +0 + 62 + 0 + 10 +11935.660172 + 20 +15125.0 + 30 +0.0 + 11 +12300.660172 + 21 +15490.0 + 31 +0.0 + 0 +LINE + 5 +253 + 8 +0 + 62 + 0 + 10 +5707.106781 + 20 +9250.0 + 30 +0.0 + 11 +6072.106781 + 21 +9615.0 + 31 +0.0 + 0 +LINE + 5 +254 + 8 +0 + 62 + 0 + 10 +11582.106781 + 20 +15125.0 + 30 +0.0 + 11 +11947.106781 + 21 +15490.0 + 31 +0.0 + 0 +LINE + 5 +255 + 8 +0 + 62 + 0 + 10 +5353.553391 + 20 +9250.0 + 30 +0.0 + 11 +5718.553391 + 21 +9615.0 + 31 +0.0 + 0 +LINE + 5 +256 + 8 +0 + 62 + 0 + 10 +11228.553391 + 20 +15125.0 + 30 +0.0 + 11 +11593.553391 + 21 +15490.0 + 31 +0.0 + 0 +LINE + 5 +257 + 8 +0 + 62 + 0 + 10 +9978.553391 + 20 +13875.0 + 30 +0.0 + 11 +10115.0 + 21 +14011.446609 + 31 +0.0 + 0 +LINE + 5 +258 + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +9250.0 + 30 +0.0 + 11 +5365.0 + 21 +9615.0 + 31 +0.0 + 0 +LINE + 5 +259 + 8 +0 + 62 + 0 + 10 +10875.0 + 20 +15125.0 + 30 +0.0 + 11 +11240.0 + 21 +15490.0 + 31 +0.0 + 0 +LINE + 5 +25A + 8 +0 + 62 + 0 + 10 +9750.0 + 20 +14000.0 + 30 +0.0 + 11 +10115.0 + 21 +14365.0 + 31 +0.0 + 0 +LINE + 5 +25B + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +9603.553391 + 30 +0.0 + 11 +5365.0 + 21 +9968.553391 + 31 +0.0 + 0 +LINE + 5 +25C + 8 +0 + 62 + 0 + 10 +10521.446609 + 20 +15125.0 + 30 +0.0 + 11 +10886.446609 + 21 +15490.0 + 31 +0.0 + 0 +LINE + 5 +25D + 8 +0 + 62 + 0 + 10 +9521.446609 + 20 +14125.0 + 30 +0.0 + 11 +10115.0 + 21 +14718.553391 + 31 +0.0 + 0 +LINE + 5 +25E + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +9957.106781 + 30 +0.0 + 11 +5365.0 + 21 +10322.106781 + 31 +0.0 + 0 +LINE + 5 +25F + 8 +0 + 62 + 0 + 10 +10167.893219 + 20 +15125.0 + 30 +0.0 + 11 +10532.893219 + 21 +15490.0 + 31 +0.0 + 0 +LINE + 5 +260 + 8 +0 + 62 + 0 + 10 +9167.893219 + 20 +14125.0 + 30 +0.0 + 11 +9532.893219 + 21 +14490.0 + 31 +0.0 + 0 +LINE + 5 +261 + 8 +0 + 62 + 0 + 10 +9750.0 + 20 +14707.106781 + 30 +0.0 + 11 +10115.0 + 21 +15072.106781 + 31 +0.0 + 0 +LINE + 5 +262 + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +10310.660172 + 30 +0.0 + 11 +5365.0 + 21 +10675.660172 + 31 +0.0 + 0 +LINE + 5 +263 + 8 +0 + 62 + 0 + 10 +9750.0 + 20 +15060.660172 + 30 +0.0 + 11 +10179.339828 + 21 +15490.0 + 31 +0.0 + 0 +LINE + 5 +264 + 8 +0 + 62 + 0 + 10 +8814.339828 + 20 +14125.0 + 30 +0.0 + 11 +9179.339828 + 21 +14490.0 + 31 +0.0 + 0 +LINE + 5 +265 + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +10664.213562 + 30 +0.0 + 11 +5365.0 + 21 +11029.213562 + 31 +0.0 + 0 +LINE + 5 +266 + 8 +0 + 62 + 0 + 10 +9750.0 + 20 +15414.213562 + 30 +0.0 + 11 +10075.786438 + 21 +15740.0 + 31 +0.0 + 0 +LINE + 5 +267 + 8 +0 + 62 + 0 + 10 +8460.786438 + 20 +14125.0 + 30 +0.0 + 11 +8825.786438 + 21 +14490.0 + 31 +0.0 + 0 +LINE + 5 +268 + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +11017.766953 + 30 +0.0 + 11 +5365.0 + 21 +11382.766953 + 31 +0.0 + 0 +LINE + 5 +269 + 8 +0 + 62 + 0 + 10 +8107.233047 + 20 +14125.0 + 30 +0.0 + 11 +8472.233047 + 21 +14490.0 + 31 +0.0 + 0 +LINE + 5 +26A + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +11371.320344 + 30 +0.0 + 11 +5365.0 + 21 +11736.320344 + 31 +0.0 + 0 +LINE + 5 +26B + 8 +0 + 62 + 0 + 10 +7753.679656 + 20 +14125.0 + 30 +0.0 + 11 +8118.679656 + 21 +14490.0 + 31 +0.0 + 0 +LINE + 5 +26C + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +11724.873734 + 30 +0.0 + 11 +5365.0 + 21 +12089.873734 + 31 +0.0 + 0 +LINE + 5 +26D + 8 +0 + 62 + 0 + 10 +7400.126266 + 20 +14125.0 + 30 +0.0 + 11 +7765.126266 + 21 +14490.0 + 31 +0.0 + 0 +LINE + 5 +26E + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +12078.427125 + 30 +0.0 + 11 +5365.0 + 21 +12443.427125 + 31 +0.0 + 0 +LINE + 5 +26F + 8 +0 + 62 + 0 + 10 +7046.572875 + 20 +14125.0 + 30 +0.0 + 11 +7411.572875 + 21 +14490.0 + 31 +0.0 + 0 +LINE + 5 +270 + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +12431.980515 + 30 +0.0 + 11 +5365.0 + 21 +12796.980515 + 31 +0.0 + 0 +LINE + 5 +271 + 8 +0 + 62 + 0 + 10 +6693.019485 + 20 +14125.0 + 30 +0.0 + 11 +7058.019485 + 21 +14490.0 + 31 +0.0 + 0 +LINE + 5 +272 + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +12785.533906 + 30 +0.0 + 11 +5365.0 + 21 +13150.533906 + 31 +0.0 + 0 +LINE + 5 +273 + 8 +0 + 62 + 0 + 10 +6339.466094 + 20 +14125.0 + 30 +0.0 + 11 +6704.466094 + 21 +14490.0 + 31 +0.0 + 0 +LINE + 5 +274 + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +13139.087297 + 30 +0.0 + 11 +5365.0 + 21 +13504.087297 + 31 +0.0 + 0 +LINE + 5 +275 + 8 +0 + 62 + 0 + 10 +5985.912703 + 20 +14125.0 + 30 +0.0 + 11 +6350.912703 + 21 +14490.0 + 31 +0.0 + 0 +LINE + 5 +276 + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +13492.640687 + 30 +0.0 + 11 +5365.0 + 21 +13857.640687 + 31 +0.0 + 0 +LINE + 5 +277 + 8 +0 + 62 + 0 + 10 +5632.359313 + 20 +14125.0 + 30 +0.0 + 11 +5997.359313 + 21 +14490.0 + 31 +0.0 + 0 +LINE + 5 +278 + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +13846.194078 + 30 +0.0 + 11 +5643.805922 + 21 +14490.0 + 31 +0.0 + 0 +LINE + 5 +279 + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +14199.747468 + 30 +0.0 + 11 +5365.0 + 21 +14564.747468 + 31 +0.0 + 0 +LINE + 5 +27A + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +14553.300859 + 30 +0.0 + 11 +5061.699141 + 21 +14615.0 + 31 +0.0 + 0 +LINE + 5 +27B + 8 +0 + 62 + 0 + 10 +7474.873734 + 20 +9250.0 + 30 +0.0 + 11 +7740.0 + 21 +9515.126266 + 31 +0.0 + 0 +LINE + 5 +27C + 8 +0 + 62 + 0 + 10 +13349.873734 + 20 +15125.0 + 30 +0.0 + 11 +13714.873734 + 21 +15490.0 + 31 +0.0 + 0 +LINE + 5 +27D + 8 +0 + 62 + 0 + 10 +13703.427125 + 20 +15125.0 + 30 +0.0 + 11 +14068.427125 + 21 +15490.0 + 31 +0.0 + 0 +LINE + 5 +27E + 8 +0 + 62 + 0 + 10 +14056.980515 + 20 +15125.0 + 30 +0.0 + 11 +14421.980515 + 21 +15490.0 + 31 +0.0 + 0 +LINE + 5 +27F + 8 +0 + 62 + 0 + 10 +14410.533906 + 20 +15125.0 + 30 +0.0 + 11 +14775.533906 + 21 +15490.0 + 31 +0.0 + 0 +LINE + 5 +280 + 8 +0 + 62 + 0 + 10 +14764.087297 + 20 +15125.0 + 30 +0.0 + 11 +15129.087297 + 21 +15490.0 + 31 +0.0 + 0 +LINE + 5 +281 + 8 +0 + 62 + 0 + 10 +15117.640687 + 20 +15125.0 + 30 +0.0 + 11 +15482.640687 + 21 +15490.0 + 31 +0.0 + 0 +LINE + 5 +282 + 8 +0 + 62 + 0 + 10 +15750.0 + 20 +15757.359313 + 30 +0.0 + 11 +15982.640687 + 21 +15990.0 + 31 +0.0 + 0 +LINE + 5 +283 + 8 +0 + 62 + 0 + 10 +15471.194078 + 20 +15125.0 + 30 +0.0 + 11 +16336.194078 + 21 +15990.0 + 31 +0.0 + 0 +LINE + 5 +284 + 8 +0 + 62 + 0 + 10 +15750.0 + 20 +15050.252532 + 30 +0.0 + 11 +16115.0 + 21 +15415.252532 + 31 +0.0 + 0 +LINE + 5 +285 + 8 +0 + 62 + 0 + 10 +16324.747468 + 20 +15625.0 + 30 +0.0 + 11 +16365.0 + 21 +15665.252532 + 31 +0.0 + 0 +LINE + 5 +286 + 8 +0 + 62 + 0 + 10 +16053.300859 + 20 +15000.0 + 30 +0.0 + 11 +16115.0 + 21 +15061.699141 + 31 +0.0 + 0 +ENDBLK + 5 +287 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X15 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X15 + 1 + + 0 +LINE + 5 +289 + 8 +0 + 62 + 0 + 10 +9342.94193 + 20 +22255.0 + 30 +0.0 + 11 +9457.94193 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +28A + 8 +0 + 62 + 0 + 10 +9166.165235 + 20 +22255.0 + 30 +0.0 + 11 +9281.165235 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +28B + 8 +0 + 62 + 0 + 10 +8989.38854 + 20 +22255.0 + 30 +0.0 + 11 +9104.38854 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +28C + 8 +0 + 62 + 0 + 10 +8812.611845 + 20 +22255.0 + 30 +0.0 + 11 +8927.611845 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +28D + 8 +0 + 62 + 0 + 10 +8635.835149 + 20 +22255.0 + 30 +0.0 + 11 +8750.835149 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +28E + 8 +0 + 62 + 0 + 10 +8500.0 + 20 +22295.941546 + 30 +0.0 + 11 +8574.058454 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +28F + 8 +0 + 62 + 0 + 10 +9519.718626 + 20 +22255.0 + 30 +0.0 + 11 +9634.718626 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +290 + 8 +0 + 62 + 0 + 10 +9696.495321 + 20 +22255.0 + 30 +0.0 + 11 +9811.495321 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +291 + 8 +0 + 62 + 0 + 10 +9873.272016 + 20 +22255.0 + 30 +0.0 + 11 +9988.272016 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +292 + 8 +0 + 62 + 0 + 10 +10050.048712 + 20 +22255.0 + 30 +0.0 + 11 +10165.048712 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +293 + 8 +0 + 62 + 0 + 10 +10226.825407 + 20 +22255.0 + 30 +0.0 + 11 +10240.0 + 21 +22268.174593 + 31 +0.0 + 0 +ENDBLK + 5 +294 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X16 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X16 + 1 + + 0 +LINE + 5 +296 + 8 +0 + 62 + 0 + 10 +13585.582618 + 20 +22255.0 + 30 +0.0 + 11 +13700.582618 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +297 + 8 +0 + 62 + 0 + 10 +13408.805922 + 20 +22255.0 + 30 +0.0 + 11 +13523.805922 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +298 + 8 +0 + 62 + 0 + 10 +13232.029227 + 20 +22255.0 + 30 +0.0 + 11 +13347.029227 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +299 + 8 +0 + 62 + 0 + 10 +13055.252532 + 20 +22255.0 + 30 +0.0 + 11 +13170.252532 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +29A + 8 +0 + 62 + 0 + 10 +12878.475836 + 20 +22255.0 + 30 +0.0 + 11 +12993.475836 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +29B + 8 +0 + 62 + 0 + 10 +12701.699141 + 20 +22255.0 + 30 +0.0 + 11 +12816.699141 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +29C + 8 +0 + 62 + 0 + 10 +12524.922446 + 20 +22255.0 + 30 +0.0 + 11 +12639.922446 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +29D + 8 +0 + 62 + 0 + 10 +12348.145751 + 20 +22255.0 + 30 +0.0 + 11 +12463.145751 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +29E + 8 +0 + 62 + 0 + 10 +12171.369055 + 20 +22255.0 + 30 +0.0 + 11 +12286.369055 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +29F + 8 +0 + 62 + 0 + 10 +11994.59236 + 20 +22255.0 + 30 +0.0 + 11 +12109.59236 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2A0 + 8 +0 + 62 + 0 + 10 +11817.815665 + 20 +22255.0 + 30 +0.0 + 11 +11932.815665 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2A1 + 8 +0 + 62 + 0 + 10 +11641.038969 + 20 +22255.0 + 30 +0.0 + 11 +11756.038969 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2A2 + 8 +0 + 62 + 0 + 10 +11464.262274 + 20 +22255.0 + 30 +0.0 + 11 +11579.262274 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2A3 + 8 +0 + 62 + 0 + 10 +11287.485579 + 20 +22255.0 + 30 +0.0 + 11 +11402.485579 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2A4 + 8 +0 + 62 + 0 + 10 +13762.359313 + 20 +22255.0 + 30 +0.0 + 11 +13877.359313 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2A5 + 8 +0 + 62 + 0 + 10 +13939.136008 + 20 +22255.0 + 30 +0.0 + 11 +14054.136008 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2A6 + 8 +0 + 62 + 0 + 10 +14115.912703 + 20 +22255.0 + 30 +0.0 + 11 +14230.912703 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2A7 + 8 +0 + 62 + 0 + 10 +14292.689399 + 20 +22255.0 + 30 +0.0 + 11 +14407.689399 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2A8 + 8 +0 + 62 + 0 + 10 +14469.466094 + 20 +22255.0 + 30 +0.0 + 11 +14584.466094 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2A9 + 8 +0 + 62 + 0 + 10 +14646.242789 + 20 +22255.0 + 30 +0.0 + 11 +14761.242789 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2AA + 8 +0 + 62 + 0 + 10 +14823.019485 + 20 +22255.0 + 30 +0.0 + 11 +14938.019485 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2AB + 8 +0 + 62 + 0 + 10 +14999.79618 + 20 +22255.0 + 30 +0.0 + 11 +15114.79618 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2AC + 8 +0 + 62 + 0 + 10 +15176.572875 + 20 +22255.0 + 30 +0.0 + 11 +15291.572875 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2AD + 8 +0 + 62 + 0 + 10 +15353.349571 + 20 +22255.0 + 30 +0.0 + 11 +15468.349571 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2AE + 8 +0 + 62 + 0 + 10 +15530.126266 + 20 +22255.0 + 30 +0.0 + 11 +15645.126266 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2AF + 8 +0 + 62 + 0 + 10 +15706.902961 + 20 +22255.0 + 30 +0.0 + 11 +15821.902961 + 21 +22370.0 + 31 +0.0 + 0 +ENDBLK + 5 +2B0 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X17 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X17 + 1 + + 0 +LINE + 5 +2B2 + 8 +0 + 62 + 0 + 10 +17828.223305 + 20 +22255.0 + 30 +0.0 + 11 +17943.223305 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2B3 + 8 +0 + 62 + 0 + 10 +17651.446609 + 20 +22255.0 + 30 +0.0 + 11 +17766.446609 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2B4 + 8 +0 + 62 + 0 + 10 +17474.669914 + 20 +22255.0 + 30 +0.0 + 11 +17589.669914 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2B5 + 8 +0 + 62 + 0 + 10 +17297.893219 + 20 +22255.0 + 30 +0.0 + 11 +17412.893219 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2B6 + 8 +0 + 62 + 0 + 10 +17121.116524 + 20 +22255.0 + 30 +0.0 + 11 +17236.116524 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2B7 + 8 +0 + 62 + 0 + 10 +16944.339828 + 20 +22255.0 + 30 +0.0 + 11 +17059.339828 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2B8 + 8 +0 + 62 + 0 + 10 +16875.0 + 20 +22362.436867 + 30 +0.0 + 11 +16882.563133 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2B9 + 8 +0 + 62 + 0 + 10 +18005.0 + 20 +22255.0 + 30 +0.0 + 11 +18120.0 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2BA + 8 +0 + 62 + 0 + 10 +18181.776695 + 20 +22255.0 + 30 +0.0 + 11 +18296.776695 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2BB + 8 +0 + 62 + 0 + 10 +18358.553391 + 20 +22255.0 + 30 +0.0 + 11 +18473.553391 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2BC + 8 +0 + 62 + 0 + 10 +18535.330086 + 20 +22255.0 + 30 +0.0 + 11 +18650.330086 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2BD + 8 +0 + 62 + 0 + 10 +18712.106781 + 20 +22255.0 + 30 +0.0 + 11 +18740.0 + 21 +22282.893219 + 31 +0.0 + 0 +ENDBLK + 5 +2BE + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X18 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X18 + 1 + + 0 +LINE + 5 +2C0 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +19778.378413 + 30 +0.0 + 11 +4860.0 + 21 +19893.378413 + 31 +0.0 + 0 +LINE + 5 +2C1 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +19955.155108 + 30 +0.0 + 11 +4860.0 + 21 +20070.155108 + 31 +0.0 + 0 +LINE + 5 +2C2 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +20131.931804 + 30 +0.0 + 11 +4860.0 + 21 +20246.931804 + 31 +0.0 + 0 +LINE + 5 +2C3 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +20308.708499 + 30 +0.0 + 11 +4860.0 + 21 +20423.708499 + 31 +0.0 + 0 +LINE + 5 +2C4 + 8 +0 + 62 + 0 + 10 +6691.291501 + 20 +22255.0 + 30 +0.0 + 11 +6740.0 + 21 +22303.708499 + 31 +0.0 + 0 +LINE + 5 +2C5 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +20485.485194 + 30 +0.0 + 11 +4860.0 + 21 +20600.485194 + 31 +0.0 + 0 +LINE + 5 +2C6 + 8 +0 + 62 + 0 + 10 +6514.514806 + 20 +22255.0 + 30 +0.0 + 11 +6629.514806 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2C7 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +20662.26189 + 30 +0.0 + 11 +4860.0 + 21 +20777.26189 + 31 +0.0 + 0 +LINE + 5 +2C8 + 8 +0 + 62 + 0 + 10 +6337.73811 + 20 +22255.0 + 30 +0.0 + 11 +6452.73811 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2C9 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +20839.038585 + 30 +0.0 + 11 +4860.0 + 21 +20954.038585 + 31 +0.0 + 0 +LINE + 5 +2CA + 8 +0 + 62 + 0 + 10 +6160.961415 + 20 +22255.0 + 30 +0.0 + 11 +6275.961415 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2CB + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +21015.81528 + 30 +0.0 + 11 +4860.0 + 21 +21130.81528 + 31 +0.0 + 0 +LINE + 5 +2CC + 8 +0 + 62 + 0 + 10 +5984.18472 + 20 +22255.0 + 30 +0.0 + 11 +6099.18472 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2CD + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +21192.591975 + 30 +0.0 + 11 +4860.0 + 21 +21307.591975 + 31 +0.0 + 0 +LINE + 5 +2CE + 8 +0 + 62 + 0 + 10 +5807.408025 + 20 +22255.0 + 30 +0.0 + 11 +5922.408025 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2CF + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +21369.368671 + 30 +0.0 + 11 +4860.0 + 21 +21484.368671 + 31 +0.0 + 0 +LINE + 5 +2D0 + 8 +0 + 62 + 0 + 10 +5630.631329 + 20 +22255.0 + 30 +0.0 + 11 +5745.631329 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2D1 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +21546.145366 + 30 +0.0 + 11 +4860.0 + 21 +21661.145366 + 31 +0.0 + 0 +LINE + 5 +2D2 + 8 +0 + 62 + 0 + 10 +5453.854634 + 20 +22255.0 + 30 +0.0 + 11 +5568.854634 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2D3 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +21722.922061 + 30 +0.0 + 11 +4860.0 + 21 +21837.922061 + 31 +0.0 + 0 +LINE + 5 +2D4 + 8 +0 + 62 + 0 + 10 +5277.077939 + 20 +22255.0 + 30 +0.0 + 11 +5392.077939 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2D5 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +21899.698757 + 30 +0.0 + 11 +4860.0 + 21 +22014.698757 + 31 +0.0 + 0 +LINE + 5 +2D6 + 8 +0 + 62 + 0 + 10 +5100.301243 + 20 +22255.0 + 30 +0.0 + 11 +5215.301243 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2D7 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +22076.475452 + 30 +0.0 + 11 +4860.0 + 21 +22191.475452 + 31 +0.0 + 0 +LINE + 5 +2D8 + 8 +0 + 62 + 0 + 10 +4923.524548 + 20 +22255.0 + 30 +0.0 + 11 +5038.524548 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2D9 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +22253.252147 + 30 +0.0 + 11 +4861.747853 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +2DA + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +19601.601718 + 30 +0.0 + 11 +4860.0 + 21 +19716.601718 + 31 +0.0 + 0 +LINE + 5 +2DB + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +19424.825023 + 30 +0.0 + 11 +4860.0 + 21 +19539.825023 + 31 +0.0 + 0 +ENDBLK + 5 +2DC + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X19 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X19 + 1 + + 0 +LINE + 5 +2DE + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +16949.951288 + 30 +0.0 + 11 +4860.0 + 21 +17064.951288 + 31 +0.0 + 0 +LINE + 5 +2DF + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +17126.727984 + 30 +0.0 + 11 +4860.0 + 21 +17241.727984 + 31 +0.0 + 0 +LINE + 5 +2E0 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +17303.504679 + 30 +0.0 + 11 +4860.0 + 21 +17418.504679 + 31 +0.0 + 0 +LINE + 5 +2E1 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +17480.281374 + 30 +0.0 + 11 +4860.0 + 21 +17595.281374 + 31 +0.0 + 0 +LINE + 5 +2E2 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +17657.05807 + 30 +0.0 + 11 +4860.0 + 21 +17772.05807 + 31 +0.0 + 0 +LINE + 5 +2E3 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +17833.834765 + 30 +0.0 + 11 +4860.0 + 21 +17948.834765 + 31 +0.0 + 0 +LINE + 5 +2E4 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +18010.61146 + 30 +0.0 + 11 +4860.0 + 21 +18125.61146 + 31 +0.0 + 0 +LINE + 5 +2E5 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +18187.388155 + 30 +0.0 + 11 +4797.611845 + 21 +18240.0 + 31 +0.0 + 0 +LINE + 5 +2E6 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +16773.174593 + 30 +0.0 + 11 +4860.0 + 21 +16888.174593 + 31 +0.0 + 0 +LINE + 5 +2E7 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +16596.397898 + 30 +0.0 + 11 +4860.0 + 21 +16711.397898 + 31 +0.0 + 0 +LINE + 5 +2E8 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +16419.621202 + 30 +0.0 + 11 +4860.0 + 21 +16534.621202 + 31 +0.0 + 0 +LINE + 5 +2E9 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +16242.844507 + 30 +0.0 + 11 +4860.0 + 21 +16357.844507 + 31 +0.0 + 0 +LINE + 5 +2EA + 8 +0 + 62 + 0 + 10 +4803.932188 + 20 +16125.0 + 30 +0.0 + 11 +4860.0 + 21 +16181.067812 + 31 +0.0 + 0 +ENDBLK + 5 +2EB + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X20 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X20 + 1 + + 0 +LINE + 5 +2ED + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +10232.436867 + 30 +0.0 + 11 +4860.0 + 21 +10347.436867 + 31 +0.0 + 0 +LINE + 5 +2EE + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +10409.213562 + 30 +0.0 + 11 +4860.0 + 21 +10524.213562 + 31 +0.0 + 0 +LINE + 5 +2EF + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +10585.990258 + 30 +0.0 + 11 +4860.0 + 21 +10700.990258 + 31 +0.0 + 0 +LINE + 5 +2F0 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +10762.766953 + 30 +0.0 + 11 +4860.0 + 21 +10877.766953 + 31 +0.0 + 0 +LINE + 5 +2F1 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +10939.543648 + 30 +0.0 + 11 +4860.0 + 21 +11054.543648 + 31 +0.0 + 0 +LINE + 5 +2F2 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +11116.320344 + 30 +0.0 + 11 +4860.0 + 21 +11231.320344 + 31 +0.0 + 0 +LINE + 5 +2F3 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +11293.097039 + 30 +0.0 + 11 +4860.0 + 21 +11408.097039 + 31 +0.0 + 0 +LINE + 5 +2F4 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +11469.873734 + 30 +0.0 + 11 +4860.0 + 21 +11584.873734 + 31 +0.0 + 0 +LINE + 5 +2F5 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +11646.650429 + 30 +0.0 + 11 +4860.0 + 21 +11761.650429 + 31 +0.0 + 0 +LINE + 5 +2F6 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +11823.427125 + 30 +0.0 + 11 +4860.0 + 21 +11938.427125 + 31 +0.0 + 0 +LINE + 5 +2F7 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +12000.20382 + 30 +0.0 + 11 +4860.0 + 21 +12115.20382 + 31 +0.0 + 0 +LINE + 5 +2F8 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +12176.980515 + 30 +0.0 + 11 +4860.0 + 21 +12291.980515 + 31 +0.0 + 0 +LINE + 5 +2F9 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +12353.757211 + 30 +0.0 + 11 +4860.0 + 21 +12468.757211 + 31 +0.0 + 0 +LINE + 5 +2FA + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +12530.533906 + 30 +0.0 + 11 +4860.0 + 21 +12645.533906 + 31 +0.0 + 0 +LINE + 5 +2FB + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +12707.310601 + 30 +0.0 + 11 +4860.0 + 21 +12822.310601 + 31 +0.0 + 0 +LINE + 5 +2FC + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +12884.087297 + 30 +0.0 + 11 +4860.0 + 21 +12999.087297 + 31 +0.0 + 0 +LINE + 5 +2FD + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +13060.863992 + 30 +0.0 + 11 +4860.0 + 21 +13175.863992 + 31 +0.0 + 0 +LINE + 5 +2FE + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +13237.640687 + 30 +0.0 + 11 +4860.0 + 21 +13352.640687 + 31 +0.0 + 0 +LINE + 5 +2FF + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +13414.417382 + 30 +0.0 + 11 +4860.0 + 21 +13529.417382 + 31 +0.0 + 0 +LINE + 5 +300 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +13591.194078 + 30 +0.0 + 11 +4860.0 + 21 +13706.194078 + 31 +0.0 + 0 +LINE + 5 +301 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +13767.970773 + 30 +0.0 + 11 +4860.0 + 21 +13882.970773 + 31 +0.0 + 0 +LINE + 5 +302 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +13944.747468 + 30 +0.0 + 11 +4860.0 + 21 +14059.747468 + 31 +0.0 + 0 +LINE + 5 +303 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +14121.524164 + 30 +0.0 + 11 +4860.0 + 21 +14236.524164 + 31 +0.0 + 0 +LINE + 5 +304 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +14298.300859 + 30 +0.0 + 11 +4860.0 + 21 +14413.300859 + 31 +0.0 + 0 +LINE + 5 +305 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +14475.077554 + 30 +0.0 + 11 +4860.0 + 21 +14590.077554 + 31 +0.0 + 0 +LINE + 5 +306 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +10055.660172 + 30 +0.0 + 11 +4860.0 + 21 +10170.660172 + 31 +0.0 + 0 +LINE + 5 +307 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +9878.883476 + 30 +0.0 + 11 +4860.0 + 21 +9993.883476 + 31 +0.0 + 0 +LINE + 5 +308 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +9702.106781 + 30 +0.0 + 11 +4860.0 + 21 +9817.106781 + 31 +0.0 + 0 +LINE + 5 +309 + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +9525.330086 + 30 +0.0 + 11 +4860.0 + 21 +9640.330086 + 31 +0.0 + 0 +LINE + 5 +30A + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +9348.553391 + 30 +0.0 + 11 +4860.0 + 21 +9463.553391 + 31 +0.0 + 0 +LINE + 5 +30B + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +9171.776695 + 30 +0.0 + 11 +4860.0 + 21 +9286.776695 + 31 +0.0 + 0 +LINE + 5 +30C + 8 +0 + 62 + 0 + 10 +4745.0 + 20 +8995.0 + 30 +0.0 + 11 +4860.0 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +30D + 8 +0 + 62 + 0 + 10 +4921.776695 + 20 +8995.0 + 30 +0.0 + 11 +5036.776695 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +30E + 8 +0 + 62 + 0 + 10 +5098.553391 + 20 +8995.0 + 30 +0.0 + 11 +5213.553391 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +30F + 8 +0 + 62 + 0 + 10 +5275.330086 + 20 +8995.0 + 30 +0.0 + 11 +5390.330086 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +310 + 8 +0 + 62 + 0 + 10 +5452.106781 + 20 +8995.0 + 30 +0.0 + 11 +5567.106781 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +311 + 8 +0 + 62 + 0 + 10 +5628.883476 + 20 +8995.0 + 30 +0.0 + 11 +5743.883476 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +312 + 8 +0 + 62 + 0 + 10 +5805.660172 + 20 +8995.0 + 30 +0.0 + 11 +5920.660172 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +313 + 8 +0 + 62 + 0 + 10 +5982.436867 + 20 +8995.0 + 30 +0.0 + 11 +6097.436867 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +314 + 8 +0 + 62 + 0 + 10 +6159.213562 + 20 +8995.0 + 30 +0.0 + 11 +6274.213562 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +315 + 8 +0 + 62 + 0 + 10 +6335.990258 + 20 +8995.0 + 30 +0.0 + 11 +6450.990258 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +316 + 8 +0 + 62 + 0 + 10 +6512.766953 + 20 +8995.0 + 30 +0.0 + 11 +6627.766953 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +317 + 8 +0 + 62 + 0 + 10 +6689.543648 + 20 +8995.0 + 30 +0.0 + 11 +6804.543648 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +318 + 8 +0 + 62 + 0 + 10 +6866.320344 + 20 +8995.0 + 30 +0.0 + 11 +6981.320344 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +319 + 8 +0 + 62 + 0 + 10 +7043.097039 + 20 +8995.0 + 30 +0.0 + 11 +7158.097039 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +31A + 8 +0 + 62 + 0 + 10 +7219.873734 + 20 +8995.0 + 30 +0.0 + 11 +7334.873734 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +31B + 8 +0 + 62 + 0 + 10 +7396.650429 + 20 +8995.0 + 30 +0.0 + 11 +7511.650429 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +31C + 8 +0 + 62 + 0 + 10 +7573.427125 + 20 +8995.0 + 30 +0.0 + 11 +7688.427125 + 21 +9110.0 + 31 +0.0 + 0 +ENDBLK + 5 +31D + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X21 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X21 + 1 + + 0 +LINE + 5 +31F + 8 +0 + 62 + 0 + 10 +9164.417382 + 20 +8995.0 + 30 +0.0 + 11 +9279.417382 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +320 + 8 +0 + 62 + 0 + 10 +8987.640687 + 20 +8995.0 + 30 +0.0 + 11 +9102.640687 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +321 + 8 +0 + 62 + 0 + 10 +8810.863992 + 20 +8995.0 + 30 +0.0 + 11 +8925.863992 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +322 + 8 +0 + 62 + 0 + 10 +9341.194078 + 20 +8995.0 + 30 +0.0 + 11 +9456.194078 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +323 + 8 +0 + 62 + 0 + 10 +9517.970773 + 20 +8995.0 + 30 +0.0 + 11 +9632.970773 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +324 + 8 +0 + 62 + 0 + 10 +9694.747468 + 20 +8995.0 + 30 +0.0 + 11 +9809.747468 + 21 +9110.0 + 31 +0.0 + 0 +ENDBLK + 5 +325 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X22 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X22 + 1 + + 0 +LINE + 5 +327 + 8 +0 + 62 + 0 + 10 +13583.834765 + 20 +8995.0 + 30 +0.0 + 11 +13698.834765 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +328 + 8 +0 + 62 + 0 + 10 +13407.05807 + 20 +8995.0 + 30 +0.0 + 11 +13522.05807 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +329 + 8 +0 + 62 + 0 + 10 +13230.281374 + 20 +8995.0 + 30 +0.0 + 11 +13345.281374 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +32A + 8 +0 + 62 + 0 + 10 +13053.504679 + 20 +8995.0 + 30 +0.0 + 11 +13168.504679 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +32B + 8 +0 + 62 + 0 + 10 +12876.727984 + 20 +8995.0 + 30 +0.0 + 11 +12991.727984 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +32C + 8 +0 + 62 + 0 + 10 +12699.951288 + 20 +8995.0 + 30 +0.0 + 11 +12814.951288 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +32D + 8 +0 + 62 + 0 + 10 +12523.174593 + 20 +8995.0 + 30 +0.0 + 11 +12638.174593 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +32E + 8 +0 + 62 + 0 + 10 +12346.397898 + 20 +8995.0 + 30 +0.0 + 11 +12461.397898 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +32F + 8 +0 + 62 + 0 + 10 +12169.621202 + 20 +8995.0 + 30 +0.0 + 11 +12284.621202 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +330 + 8 +0 + 62 + 0 + 10 +11992.844507 + 20 +8995.0 + 30 +0.0 + 11 +12107.844507 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +331 + 8 +0 + 62 + 0 + 10 +11816.067812 + 20 +8995.0 + 30 +0.0 + 11 +11931.067812 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +332 + 8 +0 + 62 + 0 + 10 +11639.291117 + 20 +8995.0 + 30 +0.0 + 11 +11754.291117 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +333 + 8 +0 + 62 + 0 + 10 +11462.514421 + 20 +8995.0 + 30 +0.0 + 11 +11577.514421 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +334 + 8 +0 + 62 + 0 + 10 +11285.737726 + 20 +8995.0 + 30 +0.0 + 11 +11400.737726 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +335 + 8 +0 + 62 + 0 + 10 +13760.61146 + 20 +8995.0 + 30 +0.0 + 11 +13875.61146 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +336 + 8 +0 + 62 + 0 + 10 +13937.388155 + 20 +8995.0 + 30 +0.0 + 11 +14052.388155 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +337 + 8 +0 + 62 + 0 + 10 +14114.164851 + 20 +8995.0 + 30 +0.0 + 11 +14229.164851 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +338 + 8 +0 + 62 + 0 + 10 +14290.941546 + 20 +8995.0 + 30 +0.0 + 11 +14405.941546 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +339 + 8 +0 + 62 + 0 + 10 +14467.718241 + 20 +8995.0 + 30 +0.0 + 11 +14582.718241 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +33A + 8 +0 + 62 + 0 + 10 +14644.494937 + 20 +8995.0 + 30 +0.0 + 11 +14759.494937 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +33B + 8 +0 + 62 + 0 + 10 +14821.271632 + 20 +8995.0 + 30 +0.0 + 11 +14936.271632 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +33C + 8 +0 + 62 + 0 + 10 +14998.048327 + 20 +8995.0 + 30 +0.0 + 11 +15113.048327 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +33D + 8 +0 + 62 + 0 + 10 +15174.825023 + 20 +8995.0 + 30 +0.0 + 11 +15289.825023 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +33E + 8 +0 + 62 + 0 + 10 +15351.601718 + 20 +8995.0 + 30 +0.0 + 11 +15466.601718 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +33F + 8 +0 + 62 + 0 + 10 +15528.378413 + 20 +8995.0 + 30 +0.0 + 11 +15643.378413 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +340 + 8 +0 + 62 + 0 + 10 +15705.155108 + 20 +8995.0 + 30 +0.0 + 11 +15820.155108 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +341 + 8 +0 + 62 + 0 + 10 +15881.931804 + 20 +8995.0 + 30 +0.0 + 11 +15996.931804 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +342 + 8 +0 + 62 + 0 + 10 +16058.708499 + 20 +8995.0 + 30 +0.0 + 11 +16115.0 + 21 +9051.291501 + 31 +0.0 + 0 +ENDBLK + 5 +343 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X23 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X23 + 1 + + 0 +LINE + 5 +345 + 8 +0 + 62 + 0 + 10 +17826.475452 + 20 +8995.0 + 30 +0.0 + 11 +17941.475452 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +346 + 8 +0 + 62 + 0 + 10 +17649.698757 + 20 +8995.0 + 30 +0.0 + 11 +17764.698757 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +347 + 8 +0 + 62 + 0 + 10 +17472.922061 + 20 +8995.0 + 30 +0.0 + 11 +17587.922061 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +348 + 8 +0 + 62 + 0 + 10 +17375.0 + 20 +9073.854634 + 30 +0.0 + 11 +17411.145366 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +349 + 8 +0 + 62 + 0 + 10 +18003.252147 + 20 +8995.0 + 30 +0.0 + 11 +18118.252147 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +34A + 8 +0 + 62 + 0 + 10 +18180.028843 + 20 +8995.0 + 30 +0.0 + 11 +18295.028843 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +34B + 8 +0 + 62 + 0 + 10 +18356.805538 + 20 +8995.0 + 30 +0.0 + 11 +18471.805538 + 21 +9110.0 + 31 +0.0 + 0 +ENDBLK + 5 +34C + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X24 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X24 + 1 + + 0 +LINE + 5 +34E + 8 +0 + 62 + 0 + 10 +20654.902577 + 20 +8995.0 + 30 +0.0 + 11 +20769.902577 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +34F + 8 +0 + 62 + 0 + 10 +20478.125881 + 20 +8995.0 + 30 +0.0 + 11 +20593.125881 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +350 + 8 +0 + 62 + 0 + 10 +20375.0 + 20 +9068.650814 + 30 +0.0 + 11 +20416.349186 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +351 + 8 +0 + 62 + 0 + 10 +20831.679272 + 20 +8995.0 + 30 +0.0 + 11 +20946.679272 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +352 + 8 +0 + 62 + 0 + 10 +21008.455967 + 20 +8995.0 + 30 +0.0 + 11 +21123.455967 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +353 + 8 +0 + 62 + 0 + 10 +21185.232663 + 20 +8995.0 + 30 +0.0 + 11 +21300.232663 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +354 + 8 +0 + 62 + 0 + 10 +21362.009358 + 20 +8995.0 + 30 +0.0 + 11 +21365.0 + 21 +8997.990642 + 31 +0.0 + 0 +ENDBLK + 5 +355 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X25 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X25 + 1 + + 0 +LINE + 5 +357 + 8 +0 + 62 + 0 + 10 +22422.66953 + 20 +8995.0 + 30 +0.0 + 11 +22537.66953 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +358 + 8 +0 + 62 + 0 + 10 +22245.892834 + 20 +8995.0 + 30 +0.0 + 11 +22360.892834 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +359 + 8 +0 + 62 + 0 + 10 +22069.116139 + 20 +8995.0 + 30 +0.0 + 11 +22184.116139 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +35A + 8 +0 + 62 + 0 + 10 +21892.339444 + 20 +8995.0 + 30 +0.0 + 11 +22007.339444 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +35B + 8 +0 + 62 + 0 + 10 +22599.446225 + 20 +8995.0 + 30 +0.0 + 11 +22714.446225 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +35C + 8 +0 + 62 + 0 + 10 +22776.22292 + 20 +8995.0 + 30 +0.0 + 11 +22891.22292 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +35D + 8 +0 + 62 + 0 + 10 +22952.999616 + 20 +8995.0 + 30 +0.0 + 11 +23067.999616 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +35E + 8 +0 + 62 + 0 + 10 +23129.776311 + 20 +8995.0 + 30 +0.0 + 11 +23240.0 + 21 +9105.223689 + 31 +0.0 + 0 +ENDBLK + 5 +35F + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X26 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X26 + 1 + + 0 +LINE + 5 +361 + 8 +0 + 62 + 0 + 10 +21363.757211 + 20 +22255.0 + 30 +0.0 + 11 +21478.757211 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +362 + 8 +0 + 62 + 0 + 10 +21186.980515 + 20 +22255.0 + 30 +0.0 + 11 +21301.980515 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +363 + 8 +0 + 62 + 0 + 10 +21010.20382 + 20 +22255.0 + 30 +0.0 + 11 +21125.20382 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +364 + 8 +0 + 62 + 0 + 10 +20833.427125 + 20 +22255.0 + 30 +0.0 + 11 +20948.427125 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +365 + 8 +0 + 62 + 0 + 10 +20656.650429 + 20 +22255.0 + 30 +0.0 + 11 +20771.650429 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +366 + 8 +0 + 62 + 0 + 10 +20479.873734 + 20 +22255.0 + 30 +0.0 + 11 +20594.873734 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +367 + 8 +0 + 62 + 0 + 10 +20303.097039 + 20 +22255.0 + 30 +0.0 + 11 +20418.097039 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +368 + 8 +0 + 62 + 0 + 10 +20126.320344 + 20 +22255.0 + 30 +0.0 + 11 +20241.320344 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +369 + 8 +0 + 62 + 0 + 10 +19949.543648 + 20 +22255.0 + 30 +0.0 + 11 +20064.543648 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +36A + 8 +0 + 62 + 0 + 10 +19772.766953 + 20 +22255.0 + 30 +0.0 + 11 +19887.766953 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +36B + 8 +0 + 62 + 0 + 10 +21540.533906 + 20 +22255.0 + 30 +0.0 + 11 +21655.533906 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +36C + 8 +0 + 62 + 0 + 10 +21717.310601 + 20 +22255.0 + 30 +0.0 + 11 +21832.310601 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +36D + 8 +0 + 62 + 0 + 10 +21894.087297 + 20 +22255.0 + 30 +0.0 + 11 +22009.087297 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +36E + 8 +0 + 62 + 0 + 10 +22070.863992 + 20 +22255.0 + 30 +0.0 + 11 +22185.863992 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +36F + 8 +0 + 62 + 0 + 10 +22247.640687 + 20 +22255.0 + 30 +0.0 + 11 +22362.640687 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +370 + 8 +0 + 62 + 0 + 10 +22424.417382 + 20 +22255.0 + 30 +0.0 + 11 +22539.417382 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +371 + 8 +0 + 62 + 0 + 10 +22601.194078 + 20 +22255.0 + 30 +0.0 + 11 +22716.194078 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +372 + 8 +0 + 62 + 0 + 10 +22777.970773 + 20 +22255.0 + 30 +0.0 + 11 +22892.970773 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +373 + 8 +0 + 62 + 0 + 10 +22954.747468 + 20 +22255.0 + 30 +0.0 + 11 +23069.747468 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +374 + 8 +0 + 62 + 0 + 10 +23131.524164 + 20 +22255.0 + 30 +0.0 + 11 +23246.524164 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +375 + 8 +0 + 62 + 0 + 10 +23308.300859 + 20 +22255.0 + 30 +0.0 + 11 +23365.0 + 21 +22311.699141 + 31 +0.0 + 0 +ENDBLK + 5 +376 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X27 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X27 + 1 + + 0 +LINE + 5 +378 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +21230.505063 + 30 +0.0 + 11 +26995.0 + 21 +21345.505063 + 31 +0.0 + 0 +LINE + 5 +379 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +21407.281759 + 30 +0.0 + 11 +26995.0 + 21 +21522.281759 + 31 +0.0 + 0 +LINE + 5 +37A + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +21584.058454 + 30 +0.0 + 11 +26995.0 + 21 +21699.058454 + 31 +0.0 + 0 +LINE + 5 +37B + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +21760.835149 + 30 +0.0 + 11 +26995.0 + 21 +21875.835149 + 31 +0.0 + 0 +LINE + 5 +37C + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +21937.611845 + 30 +0.0 + 11 +26995.0 + 21 +22052.611845 + 31 +0.0 + 0 +LINE + 5 +37D + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +22114.38854 + 30 +0.0 + 11 +26995.0 + 21 +22229.38854 + 31 +0.0 + 0 +LINE + 5 +37E + 8 +0 + 62 + 0 + 10 +26843.834765 + 20 +22255.0 + 30 +0.0 + 11 +26958.834765 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +37F + 8 +0 + 62 + 0 + 10 +26667.05807 + 20 +22255.0 + 30 +0.0 + 11 +26782.05807 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +380 + 8 +0 + 62 + 0 + 10 +26490.281374 + 20 +22255.0 + 30 +0.0 + 11 +26605.281374 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +381 + 8 +0 + 62 + 0 + 10 +26313.504679 + 20 +22255.0 + 30 +0.0 + 11 +26428.504679 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +382 + 8 +0 + 62 + 0 + 10 +26136.727984 + 20 +22255.0 + 30 +0.0 + 11 +26251.727984 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +383 + 8 +0 + 62 + 0 + 10 +25959.951288 + 20 +22255.0 + 30 +0.0 + 11 +26074.951288 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +384 + 8 +0 + 62 + 0 + 10 +25783.174593 + 20 +22255.0 + 30 +0.0 + 11 +25898.174593 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +385 + 8 +0 + 62 + 0 + 10 +25606.397898 + 20 +22255.0 + 30 +0.0 + 11 +25721.397898 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +386 + 8 +0 + 62 + 0 + 10 +25429.621202 + 20 +22255.0 + 30 +0.0 + 11 +25544.621202 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +387 + 8 +0 + 62 + 0 + 10 +25252.844507 + 20 +22255.0 + 30 +0.0 + 11 +25367.844507 + 21 +22370.0 + 31 +0.0 + 0 +LINE + 5 +388 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +21053.728368 + 30 +0.0 + 11 +26995.0 + 21 +21168.728368 + 31 +0.0 + 0 +LINE + 5 +389 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +20876.951673 + 30 +0.0 + 11 +26995.0 + 21 +20991.951673 + 31 +0.0 + 0 +LINE + 5 +38A + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +20700.174977 + 30 +0.0 + 11 +26995.0 + 21 +20815.174977 + 31 +0.0 + 0 +LINE + 5 +38B + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +20523.398282 + 30 +0.0 + 11 +26995.0 + 21 +20638.398282 + 31 +0.0 + 0 +LINE + 5 +38C + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +20346.621587 + 30 +0.0 + 11 +26995.0 + 21 +20461.621587 + 31 +0.0 + 0 +LINE + 5 +38D + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +20169.844892 + 30 +0.0 + 11 +26995.0 + 21 +20284.844892 + 31 +0.0 + 0 +LINE + 5 +38E + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +19993.068196 + 30 +0.0 + 11 +26995.0 + 21 +20108.068196 + 31 +0.0 + 0 +LINE + 5 +38F + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +19816.291501 + 30 +0.0 + 11 +26995.0 + 21 +19931.291501 + 31 +0.0 + 0 +LINE + 5 +390 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +19639.514806 + 30 +0.0 + 11 +26995.0 + 21 +19754.514806 + 31 +0.0 + 0 +LINE + 5 +391 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +19462.73811 + 30 +0.0 + 11 +26995.0 + 21 +19577.73811 + 31 +0.0 + 0 +LINE + 5 +392 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +19285.961415 + 30 +0.0 + 11 +26995.0 + 21 +19400.961415 + 31 +0.0 + 0 +LINE + 5 +393 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +19109.18472 + 30 +0.0 + 11 +26995.0 + 21 +19224.18472 + 31 +0.0 + 0 +LINE + 5 +394 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +18932.408025 + 30 +0.0 + 11 +26995.0 + 21 +19047.408025 + 31 +0.0 + 0 +LINE + 5 +395 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +18755.631329 + 30 +0.0 + 11 +26995.0 + 21 +18870.631329 + 31 +0.0 + 0 +LINE + 5 +396 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +18578.854634 + 30 +0.0 + 11 +26995.0 + 21 +18693.854634 + 31 +0.0 + 0 +LINE + 5 +397 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +18402.077939 + 30 +0.0 + 11 +26995.0 + 21 +18517.077939 + 31 +0.0 + 0 +ENDBLK + 5 +398 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X28 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X28 + 1 + + 0 +LINE + 5 +39A + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +14866.544033 + 30 +0.0 + 11 +26995.0 + 21 +14981.544033 + 31 +0.0 + 0 +LINE + 5 +39B + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +15043.320728 + 30 +0.0 + 11 +26995.0 + 21 +15158.320728 + 31 +0.0 + 0 +LINE + 5 +39C + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +15220.097423 + 30 +0.0 + 11 +26995.0 + 21 +15335.097423 + 31 +0.0 + 0 +LINE + 5 +39D + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +15396.874119 + 30 +0.0 + 11 +26995.0 + 21 +15511.874119 + 31 +0.0 + 0 +LINE + 5 +39E + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +15573.650814 + 30 +0.0 + 11 +26995.0 + 21 +15688.650814 + 31 +0.0 + 0 +LINE + 5 +39F + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +15750.427509 + 30 +0.0 + 11 +26995.0 + 21 +15865.427509 + 31 +0.0 + 0 +LINE + 5 +3A0 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +15927.204204 + 30 +0.0 + 11 +26995.0 + 21 +16042.204204 + 31 +0.0 + 0 +LINE + 5 +3A1 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +16103.9809 + 30 +0.0 + 11 +26995.0 + 21 +16218.9809 + 31 +0.0 + 0 +LINE + 5 +3A2 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +16280.757595 + 30 +0.0 + 11 +26995.0 + 21 +16395.757595 + 31 +0.0 + 0 +LINE + 5 +3A3 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +16457.53429 + 30 +0.0 + 11 +26995.0 + 21 +16572.53429 + 31 +0.0 + 0 +LINE + 5 +3A4 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +16634.310986 + 30 +0.0 + 11 +26995.0 + 21 +16749.310986 + 31 +0.0 + 0 +LINE + 5 +3A5 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +16811.087681 + 30 +0.0 + 11 +26995.0 + 21 +16926.087681 + 31 +0.0 + 0 +LINE + 5 +3A6 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +16987.864376 + 30 +0.0 + 11 +26995.0 + 21 +17102.864376 + 31 +0.0 + 0 +LINE + 5 +3A7 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +17164.641072 + 30 +0.0 + 11 +26995.0 + 21 +17279.641072 + 31 +0.0 + 0 +LINE + 5 +3A8 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +17341.417767 + 30 +0.0 + 11 +26995.0 + 21 +17456.417767 + 31 +0.0 + 0 +LINE + 5 +3A9 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +17518.194462 + 30 +0.0 + 11 +26995.0 + 21 +17633.194462 + 31 +0.0 + 0 +LINE + 5 +3AA + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +17694.971157 + 30 +0.0 + 11 +26925.028843 + 21 +17740.0 + 31 +0.0 + 0 +LINE + 5 +3AB + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +14689.767337 + 30 +0.0 + 11 +26995.0 + 21 +14804.767337 + 31 +0.0 + 0 +LINE + 5 +3AC + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +14512.990642 + 30 +0.0 + 11 +26995.0 + 21 +14627.990642 + 31 +0.0 + 0 +LINE + 5 +3AD + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +14336.213947 + 30 +0.0 + 11 +26995.0 + 21 +14451.213947 + 31 +0.0 + 0 +LINE + 5 +3AE + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +14159.437252 + 30 +0.0 + 11 +26995.0 + 21 +14274.437252 + 31 +0.0 + 0 +LINE + 5 +3AF + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +13982.660556 + 30 +0.0 + 11 +26995.0 + 21 +14097.660556 + 31 +0.0 + 0 +LINE + 5 +3B0 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +13805.883861 + 30 +0.0 + 11 +26995.0 + 21 +13920.883861 + 31 +0.0 + 0 +LINE + 5 +3B1 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +13629.107166 + 30 +0.0 + 11 +26995.0 + 21 +13744.107166 + 31 +0.0 + 0 +LINE + 5 +3B2 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +13452.33047 + 30 +0.0 + 11 +26995.0 + 21 +13567.33047 + 31 +0.0 + 0 +LINE + 5 +3B3 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +13275.553775 + 30 +0.0 + 11 +26995.0 + 21 +13390.553775 + 31 +0.0 + 0 +LINE + 5 +3B4 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +13098.77708 + 30 +0.0 + 11 +26995.0 + 21 +13213.77708 + 31 +0.0 + 0 +LINE + 5 +3B5 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +12922.000384 + 30 +0.0 + 11 +26995.0 + 21 +13037.000384 + 31 +0.0 + 0 +LINE + 5 +3B6 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +12745.223689 + 30 +0.0 + 11 +26995.0 + 21 +12860.223689 + 31 +0.0 + 0 +LINE + 5 +3B7 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +12568.446994 + 30 +0.0 + 11 +26995.0 + 21 +12683.446994 + 31 +0.0 + 0 +LINE + 5 +3B8 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +12391.670299 + 30 +0.0 + 11 +26995.0 + 21 +12506.670299 + 31 +0.0 + 0 +LINE + 5 +3B9 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +12214.893603 + 30 +0.0 + 11 +26995.0 + 21 +12329.893603 + 31 +0.0 + 0 +LINE + 5 +3BA + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +12038.116908 + 30 +0.0 + 11 +26995.0 + 21 +12153.116908 + 31 +0.0 + 0 +ENDBLK + 5 +3BB + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X29 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X29 + 1 + + 0 +LINE + 5 +3BD + 8 +0 + 62 + 0 + 10 +25427.87335 + 20 +8995.0 + 30 +0.0 + 11 +25542.87335 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +3BE + 8 +0 + 62 + 0 + 10 +25604.650045 + 20 +8995.0 + 30 +0.0 + 11 +25719.650045 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +3BF + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +10270.349955 + 30 +0.0 + 11 +26974.650045 + 21 +10365.0 + 31 +0.0 + 0 +LINE + 5 +3C0 + 8 +0 + 62 + 0 + 10 +25781.42674 + 20 +8995.0 + 30 +0.0 + 11 +25896.42674 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +3C1 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +10093.57326 + 30 +0.0 + 11 +26995.0 + 21 +10208.57326 + 31 +0.0 + 0 +LINE + 5 +3C2 + 8 +0 + 62 + 0 + 10 +25958.203436 + 20 +8995.0 + 30 +0.0 + 11 +26073.203436 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +3C3 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +9916.796564 + 30 +0.0 + 11 +26995.0 + 21 +10031.796564 + 31 +0.0 + 0 +LINE + 5 +3C4 + 8 +0 + 62 + 0 + 10 +26134.980131 + 20 +8995.0 + 30 +0.0 + 11 +26249.980131 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +3C5 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +9740.019869 + 30 +0.0 + 11 +26995.0 + 21 +9855.019869 + 31 +0.0 + 0 +LINE + 5 +3C6 + 8 +0 + 62 + 0 + 10 +26311.756826 + 20 +8995.0 + 30 +0.0 + 11 +26426.756826 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +3C7 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +9563.243174 + 30 +0.0 + 11 +26995.0 + 21 +9678.243174 + 31 +0.0 + 0 +LINE + 5 +3C8 + 8 +0 + 62 + 0 + 10 +26488.533521 + 20 +8995.0 + 30 +0.0 + 11 +26603.533521 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +3C9 + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +9386.466479 + 30 +0.0 + 11 +26995.0 + 21 +9501.466479 + 31 +0.0 + 0 +LINE + 5 +3CA + 8 +0 + 62 + 0 + 10 +26665.310217 + 20 +8995.0 + 30 +0.0 + 11 +26780.310217 + 21 +9110.0 + 31 +0.0 + 0 +LINE + 5 +3CB + 8 +0 + 62 + 0 + 10 +26880.0 + 20 +9209.689783 + 30 +0.0 + 11 +26995.0 + 21 +9324.689783 + 31 +0.0 + 0 +LINE + 5 +3CC + 8 +0 + 62 + 0 + 10 +26842.086912 + 20 +8995.0 + 30 +0.0 + 11 +26995.0 + 21 +9147.913088 + 31 +0.0 + 0 +ENDBLK + 5 +3CD + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X30 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X30 + 1 + + 0 +LINE + 5 +3CF + 8 +0 + 62 + 0 + 10 +21332.26189 + 20 +13915.0 + 30 +0.0 + 11 +21457.26189 + 21 +14040.0 + 31 +0.0 + 0 +LINE + 5 +3D0 + 8 +0 + 62 + 0 + 10 +21240.0 + 20 +13999.514806 + 30 +0.0 + 11 +21280.485194 + 21 +14040.0 + 31 +0.0 + 0 +LINE + 5 +3D1 + 8 +0 + 62 + 0 + 10 +21509.038585 + 20 +13915.0 + 30 +0.0 + 11 +21565.0 + 21 +13970.961415 + 31 +0.0 + 0 +LINE + 5 +3D2 + 8 +0 + 62 + 0 + 10 +21371.42674 + 20 +13915.0 + 30 +0.0 + 11 +21246.42674 + 21 +14040.0 + 31 +0.0 + 0 +LINE + 5 +3D3 + 8 +0 + 62 + 0 + 10 +21548.203436 + 20 +13915.0 + 30 +0.0 + 11 +21423.203436 + 21 +14040.0 + 31 +0.0 + 0 +ENDBLK + 5 +3D4 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X31 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X31 + 1 + + 0 +LINE + 5 +3D6 + 8 +0 + 62 + 0 + 10 +22850.0 + 20 +15432.73811 + 30 +0.0 + 11 +22975.0 + 21 +15557.73811 + 31 +0.0 + 0 +LINE + 5 +3D7 + 8 +0 + 62 + 0 + 10 +22850.0 + 20 +15609.514806 + 30 +0.0 + 11 +22865.485194 + 21 +15625.0 + 31 +0.0 + 0 +LINE + 5 +3D8 + 8 +0 + 62 + 0 + 10 +22850.0 + 20 +15255.961415 + 30 +0.0 + 11 +22975.0 + 21 +15380.961415 + 31 +0.0 + 0 +LINE + 5 +3D9 + 8 +0 + 62 + 0 + 10 +22975.0 + 20 +15316.63056 + 30 +0.0 + 11 +22850.0 + 21 +15441.63056 + 31 +0.0 + 0 +LINE + 5 +3DA + 8 +0 + 62 + 0 + 10 +22889.853865 + 20 +15225.0 + 30 +0.0 + 11 +22850.0 + 21 +15264.853865 + 31 +0.0 + 0 +LINE + 5 +3DB + 8 +0 + 62 + 0 + 10 +22975.0 + 20 +15493.407256 + 30 +0.0 + 11 +22850.0 + 21 +15618.407256 + 31 +0.0 + 0 +ENDBLK + 5 +3DC + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X32 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X32 + 1 + + 0 +LINE + 5 +3DE + 8 +0 + 62 + 0 + 10 +22850.0 + 20 +12250.757595 + 30 +0.0 + 11 +22975.0 + 21 +12375.757595 + 31 +0.0 + 0 +LINE + 5 +3DF + 8 +0 + 62 + 0 + 10 +22850.0 + 20 +12427.53429 + 30 +0.0 + 11 +22975.0 + 21 +12552.53429 + 31 +0.0 + 0 +LINE + 5 +3E0 + 8 +0 + 62 + 0 + 10 +22850.0 + 20 +12604.310986 + 30 +0.0 + 11 +22975.0 + 21 +12729.310986 + 31 +0.0 + 0 +LINE + 5 +3E1 + 8 +0 + 62 + 0 + 10 +22850.0 + 20 +12781.087681 + 30 +0.0 + 11 +22975.0 + 21 +12906.087681 + 31 +0.0 + 0 +LINE + 5 +3E2 + 8 +0 + 62 + 0 + 10 +22850.0 + 20 +12957.864376 + 30 +0.0 + 11 +22975.0 + 21 +13082.864376 + 31 +0.0 + 0 +LINE + 5 +3E3 + 8 +0 + 62 + 0 + 10 +22850.0 + 20 +13134.641072 + 30 +0.0 + 11 +22975.0 + 21 +13259.641072 + 31 +0.0 + 0 +LINE + 5 +3E4 + 8 +0 + 62 + 0 + 10 +22850.0 + 20 +13311.417767 + 30 +0.0 + 11 +22975.0 + 21 +13436.417767 + 31 +0.0 + 0 +LINE + 5 +3E5 + 8 +0 + 62 + 0 + 10 +22850.0 + 20 +13488.194462 + 30 +0.0 + 11 +22975.0 + 21 +13613.194462 + 31 +0.0 + 0 +LINE + 5 +3E6 + 8 +0 + 62 + 0 + 10 +22850.0 + 20 +13664.971157 + 30 +0.0 + 11 +22975.0 + 21 +13789.971157 + 31 +0.0 + 0 +LINE + 5 +3E7 + 8 +0 + 62 + 0 + 10 +22850.0 + 20 +13841.747853 + 30 +0.0 + 11 +22975.0 + 21 +13966.747853 + 31 +0.0 + 0 +LINE + 5 +3E8 + 8 +0 + 62 + 0 + 10 +22746.475452 + 20 +13915.0 + 30 +0.0 + 11 +22975.0 + 21 +14143.524548 + 31 +0.0 + 0 +LINE + 5 +3E9 + 8 +0 + 62 + 0 + 10 +22569.698757 + 20 +13915.0 + 30 +0.0 + 11 +22694.698757 + 21 +14040.0 + 31 +0.0 + 0 +LINE + 5 +3EA + 8 +0 + 62 + 0 + 10 +22850.0 + 20 +14195.301243 + 30 +0.0 + 11 +22975.0 + 21 +14320.301243 + 31 +0.0 + 0 +LINE + 5 +3EB + 8 +0 + 62 + 0 + 10 +22450.0 + 20 +13972.077939 + 30 +0.0 + 11 +22517.922061 + 21 +14040.0 + 31 +0.0 + 0 +LINE + 5 +3EC + 8 +0 + 62 + 0 + 10 +22850.0 + 20 +12073.9809 + 30 +0.0 + 11 +22975.0 + 21 +12198.9809 + 31 +0.0 + 0 +LINE + 5 +3ED + 8 +0 + 62 + 0 + 10 +22850.0 + 20 +11897.204204 + 30 +0.0 + 11 +22975.0 + 21 +12022.204204 + 31 +0.0 + 0 +LINE + 5 +3EE + 8 +0 + 62 + 0 + 10 +22850.0 + 20 +11720.427509 + 30 +0.0 + 11 +22975.0 + 21 +11845.427509 + 31 +0.0 + 0 +LINE + 5 +3EF + 8 +0 + 62 + 0 + 10 +22850.0 + 20 +11543.650814 + 30 +0.0 + 11 +22975.0 + 21 +11668.650814 + 31 +0.0 + 0 +LINE + 5 +3F0 + 8 +0 + 62 + 0 + 10 +22850.0 + 20 +11366.874119 + 30 +0.0 + 11 +22975.0 + 21 +11491.874119 + 31 +0.0 + 0 +LINE + 5 +3F1 + 8 +0 + 62 + 0 + 10 +22850.0 + 20 +11190.097423 + 30 +0.0 + 11 +22975.0 + 21 +11315.097423 + 31 +0.0 + 0 +LINE + 5 +3F2 + 8 +0 + 62 + 0 + 10 +22850.0 + 20 +11013.320728 + 30 +0.0 + 11 +22975.0 + 21 +11138.320728 + 31 +0.0 + 0 +LINE + 5 +3F3 + 8 +0 + 62 + 0 + 10 +22850.0 + 20 +10836.544033 + 30 +0.0 + 11 +22975.0 + 21 +10961.544033 + 31 +0.0 + 0 +LINE + 5 +3F4 + 8 +0 + 62 + 0 + 10 +22850.0 + 20 +10659.767337 + 30 +0.0 + 11 +22975.0 + 21 +10784.767337 + 31 +0.0 + 0 +LINE + 5 +3F5 + 8 +0 + 62 + 0 + 10 +22850.0 + 20 +10482.990642 + 30 +0.0 + 11 +22975.0 + 21 +10607.990642 + 31 +0.0 + 0 +LINE + 5 +3F6 + 8 +0 + 62 + 0 + 10 +22850.0 + 20 +10306.213947 + 30 +0.0 + 11 +22975.0 + 21 +10431.213947 + 31 +0.0 + 0 +LINE + 5 +3F7 + 8 +0 + 62 + 0 + 10 +22850.0 + 20 +10129.437252 + 30 +0.0 + 11 +22975.0 + 21 +10254.437252 + 31 +0.0 + 0 +LINE + 5 +3F8 + 8 +0 + 62 + 0 + 10 +22850.0 + 20 +9952.660556 + 30 +0.0 + 11 +22975.0 + 21 +10077.660556 + 31 +0.0 + 0 +LINE + 5 +3F9 + 8 +0 + 62 + 0 + 10 +22850.0 + 20 +9775.883861 + 30 +0.0 + 11 +22975.0 + 21 +9900.883861 + 31 +0.0 + 0 +LINE + 5 +3FA + 8 +0 + 62 + 0 + 10 +22865.892834 + 20 +9615.0 + 30 +0.0 + 11 +22975.0 + 21 +9724.107166 + 31 +0.0 + 0 +LINE + 5 +3FB + 8 +0 + 62 + 0 + 10 +22975.0 + 20 +11604.319959 + 30 +0.0 + 11 +22850.0 + 21 +11729.319959 + 31 +0.0 + 0 +LINE + 5 +3FC + 8 +0 + 62 + 0 + 10 +22975.0 + 20 +11427.543264 + 30 +0.0 + 11 +22850.0 + 21 +11552.543264 + 31 +0.0 + 0 +LINE + 5 +3FD + 8 +0 + 62 + 0 + 10 +22975.0 + 20 +11250.766569 + 30 +0.0 + 11 +22850.0 + 21 +11375.766569 + 31 +0.0 + 0 +LINE + 5 +3FE + 8 +0 + 62 + 0 + 10 +22975.0 + 20 +11073.989873 + 30 +0.0 + 11 +22850.0 + 21 +11198.989873 + 31 +0.0 + 0 +LINE + 5 +3FF + 8 +0 + 62 + 0 + 10 +22975.0 + 20 +10897.213178 + 30 +0.0 + 11 +22850.0 + 21 +11022.213178 + 31 +0.0 + 0 +LINE + 5 +400 + 8 +0 + 62 + 0 + 10 +22975.0 + 20 +10720.436483 + 30 +0.0 + 11 +22850.0 + 21 +10845.436483 + 31 +0.0 + 0 +LINE + 5 +401 + 8 +0 + 62 + 0 + 10 +22975.0 + 20 +10543.659787 + 30 +0.0 + 11 +22850.0 + 21 +10668.659787 + 31 +0.0 + 0 +LINE + 5 +402 + 8 +0 + 62 + 0 + 10 +22975.0 + 20 +10366.883092 + 30 +0.0 + 11 +22850.0 + 21 +10491.883092 + 31 +0.0 + 0 +LINE + 5 +403 + 8 +0 + 62 + 0 + 10 +22975.0 + 20 +10190.106397 + 30 +0.0 + 11 +22850.0 + 21 +10315.106397 + 31 +0.0 + 0 +LINE + 5 +404 + 8 +0 + 62 + 0 + 10 +22975.0 + 20 +10013.329701 + 30 +0.0 + 11 +22850.0 + 21 +10138.329701 + 31 +0.0 + 0 +LINE + 5 +405 + 8 +0 + 62 + 0 + 10 +22975.0 + 20 +9836.553006 + 30 +0.0 + 11 +22850.0 + 21 +9961.553006 + 31 +0.0 + 0 +LINE + 5 +406 + 8 +0 + 62 + 0 + 10 +22975.0 + 20 +9659.776311 + 30 +0.0 + 11 +22850.0 + 21 +9784.776311 + 31 +0.0 + 0 +LINE + 5 +407 + 8 +0 + 62 + 0 + 10 +22975.0 + 20 +11781.096654 + 30 +0.0 + 11 +22850.0 + 21 +11906.096654 + 31 +0.0 + 0 +LINE + 5 +408 + 8 +0 + 62 + 0 + 10 +22975.0 + 20 +11957.87335 + 30 +0.0 + 11 +22850.0 + 21 +12082.87335 + 31 +0.0 + 0 +LINE + 5 +409 + 8 +0 + 62 + 0 + 10 +22975.0 + 20 +12134.650045 + 30 +0.0 + 11 +22850.0 + 21 +12259.650045 + 31 +0.0 + 0 +LINE + 5 +40A + 8 +0 + 62 + 0 + 10 +22975.0 + 20 +12311.42674 + 30 +0.0 + 11 +22850.0 + 21 +12436.42674 + 31 +0.0 + 0 +LINE + 5 +40B + 8 +0 + 62 + 0 + 10 +22975.0 + 20 +12488.203436 + 30 +0.0 + 11 +22850.0 + 21 +12613.203436 + 31 +0.0 + 0 +LINE + 5 +40C + 8 +0 + 62 + 0 + 10 +22975.0 + 20 +12664.980131 + 30 +0.0 + 11 +22850.0 + 21 +12789.980131 + 31 +0.0 + 0 +LINE + 5 +40D + 8 +0 + 62 + 0 + 10 +22975.0 + 20 +12841.756826 + 30 +0.0 + 11 +22850.0 + 21 +12966.756826 + 31 +0.0 + 0 +LINE + 5 +40E + 8 +0 + 62 + 0 + 10 +22975.0 + 20 +13018.533521 + 30 +0.0 + 11 +22850.0 + 21 +13143.533521 + 31 +0.0 + 0 +LINE + 5 +40F + 8 +0 + 62 + 0 + 10 +22975.0 + 20 +13195.310217 + 30 +0.0 + 11 +22850.0 + 21 +13320.310217 + 31 +0.0 + 0 +LINE + 5 +410 + 8 +0 + 62 + 0 + 10 +22975.0 + 20 +13372.086912 + 30 +0.0 + 11 +22850.0 + 21 +13497.086912 + 31 +0.0 + 0 +LINE + 5 +411 + 8 +0 + 62 + 0 + 10 +22975.0 + 20 +13548.863607 + 30 +0.0 + 11 +22850.0 + 21 +13673.863607 + 31 +0.0 + 0 +LINE + 5 +412 + 8 +0 + 62 + 0 + 10 +22608.863607 + 20 +13915.0 + 30 +0.0 + 11 +22483.863607 + 21 +14040.0 + 31 +0.0 + 0 +LINE + 5 +413 + 8 +0 + 62 + 0 + 10 +22975.0 + 20 +13725.640303 + 30 +0.0 + 11 +22850.0 + 21 +13850.640303 + 31 +0.0 + 0 +LINE + 5 +414 + 8 +0 + 62 + 0 + 10 +22785.640303 + 20 +13915.0 + 30 +0.0 + 11 +22660.640303 + 21 +14040.0 + 31 +0.0 + 0 +LINE + 5 +415 + 8 +0 + 62 + 0 + 10 +22975.0 + 20 +13902.416998 + 30 +0.0 + 11 +22837.416998 + 21 +14040.0 + 31 +0.0 + 0 +LINE + 5 +416 + 8 +0 + 62 + 0 + 10 +22975.0 + 20 +14079.193693 + 30 +0.0 + 11 +22850.0 + 21 +14204.193693 + 31 +0.0 + 0 +LINE + 5 +417 + 8 +0 + 62 + 0 + 10 +22975.0 + 20 +14255.970389 + 30 +0.0 + 11 +22890.970389 + 21 +14340.0 + 31 +0.0 + 0 +ENDBLK + 5 +418 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X33 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X33 + 1 + + 0 +LINE + 5 +41A + 8 +0 + 62 + 0 + 10 +7628.805922 + 20 +16475.0 + 30 +0.0 + 11 +7740.0 + 21 +16586.194078 + 31 +0.0 + 0 +LINE + 5 +41B + 8 +0 + 62 + 0 + 10 +7615.0 + 20 +16637.970773 + 30 +0.0 + 11 +7740.0 + 21 +16762.970773 + 31 +0.0 + 0 +LINE + 5 +41C + 8 +0 + 62 + 0 + 10 +7615.0 + 20 +16814.747468 + 30 +0.0 + 11 +7675.252532 + 21 +16875.0 + 31 +0.0 + 0 +LINE + 5 +41D + 8 +0 + 62 + 0 + 10 +7740.0 + 20 +16586.271632 + 30 +0.0 + 11 +7615.0 + 21 +16711.271632 + 31 +0.0 + 0 +LINE + 5 +41E + 8 +0 + 62 + 0 + 10 +7674.494937 + 20 +16475.0 + 30 +0.0 + 11 +7615.0 + 21 +16534.494937 + 31 +0.0 + 0 +LINE + 5 +41F + 8 +0 + 62 + 0 + 10 +7740.0 + 20 +16763.048327 + 30 +0.0 + 11 +7628.048327 + 21 +16875.0 + 31 +0.0 + 0 +ENDBLK + 5 +420 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X34 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X34 + 1 + + 0 +LINE + 5 +422 + 8 +0 + 62 + 0 + 10 +7615.0 + 20 +14870.20382 + 30 +0.0 + 11 +7740.0 + 21 +14995.20382 + 31 +0.0 + 0 +LINE + 5 +423 + 8 +0 + 62 + 0 + 10 +7615.0 + 20 +15046.980515 + 30 +0.0 + 11 +7740.0 + 21 +15171.980515 + 31 +0.0 + 0 +LINE + 5 +424 + 8 +0 + 62 + 0 + 10 +7615.0 + 20 +15223.757211 + 30 +0.0 + 11 +7740.0 + 21 +15348.757211 + 31 +0.0 + 0 +LINE + 5 +425 + 8 +0 + 62 + 0 + 10 +7615.0 + 20 +15400.533906 + 30 +0.0 + 11 +7740.0 + 21 +15525.533906 + 31 +0.0 + 0 +LINE + 5 +426 + 8 +0 + 62 + 0 + 10 +7615.0 + 20 +15577.310601 + 30 +0.0 + 11 +7627.689399 + 21 +15590.0 + 31 +0.0 + 0 +LINE + 5 +427 + 8 +0 + 62 + 0 + 10 +7615.0 + 20 +14693.427125 + 30 +0.0 + 11 +7740.0 + 21 +14818.427125 + 31 +0.0 + 0 +LINE + 5 +428 + 8 +0 + 62 + 0 + 10 +7615.0 + 20 +14516.650429 + 30 +0.0 + 11 +7740.0 + 21 +14641.650429 + 31 +0.0 + 0 +LINE + 5 +429 + 8 +0 + 62 + 0 + 10 +7740.0 + 20 +14818.504679 + 30 +0.0 + 11 +7615.0 + 21 +14943.504679 + 31 +0.0 + 0 +LINE + 5 +42A + 8 +0 + 62 + 0 + 10 +7740.0 + 20 +14641.727984 + 30 +0.0 + 11 +7615.0 + 21 +14766.727984 + 31 +0.0 + 0 +LINE + 5 +42B + 8 +0 + 62 + 0 + 10 +7714.951288 + 20 +14490.0 + 30 +0.0 + 11 +7615.0 + 21 +14589.951288 + 31 +0.0 + 0 +LINE + 5 +42C + 8 +0 + 62 + 0 + 10 +7740.0 + 20 +14995.281374 + 30 +0.0 + 11 +7615.0 + 21 +15120.281374 + 31 +0.0 + 0 +LINE + 5 +42D + 8 +0 + 62 + 0 + 10 +7740.0 + 20 +15172.05807 + 30 +0.0 + 11 +7615.0 + 21 +15297.05807 + 31 +0.0 + 0 +LINE + 5 +42E + 8 +0 + 62 + 0 + 10 +7740.0 + 20 +15348.834765 + 30 +0.0 + 11 +7615.0 + 21 +15473.834765 + 31 +0.0 + 0 +LINE + 5 +42F + 8 +0 + 62 + 0 + 10 +7740.0 + 20 +15525.61146 + 30 +0.0 + 11 +7675.61146 + 21 +15590.0 + 31 +0.0 + 0 +ENDBLK + 5 +430 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X35 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X35 + 1 + + 0 +LINE + 5 +432 + 8 +0 + 62 + 0 + 10 +11762.563133 + 20 +17250.0 + 30 +0.0 + 11 +11887.563133 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +433 + 8 +0 + 62 + 0 + 10 +11585.786438 + 20 +17250.0 + 30 +0.0 + 11 +11710.786438 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +434 + 8 +0 + 62 + 0 + 10 +11409.009742 + 20 +17250.0 + 30 +0.0 + 11 +11534.009742 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +435 + 8 +0 + 62 + 0 + 10 +11232.233047 + 20 +17250.0 + 30 +0.0 + 11 +11357.233047 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +436 + 8 +0 + 62 + 0 + 10 +11055.456352 + 20 +17250.0 + 30 +0.0 + 11 +11180.456352 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +437 + 8 +0 + 62 + 0 + 10 +10878.679656 + 20 +17250.0 + 30 +0.0 + 11 +11003.679656 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +438 + 8 +0 + 62 + 0 + 10 +10701.902961 + 20 +17250.0 + 30 +0.0 + 11 +10826.902961 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +439 + 8 +0 + 62 + 0 + 10 +10525.126266 + 20 +17250.0 + 30 +0.0 + 11 +10650.126266 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +43A + 8 +0 + 62 + 0 + 10 +10348.349571 + 20 +17250.0 + 30 +0.0 + 11 +10473.349571 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +43B + 8 +0 + 62 + 0 + 10 +10171.572875 + 20 +17250.0 + 30 +0.0 + 11 +10296.572875 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +43C + 8 +0 + 62 + 0 + 10 +10115.0 + 20 +17370.20382 + 30 +0.0 + 11 +10119.79618 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +43D + 8 +0 + 62 + 0 + 10 +11939.339828 + 20 +17250.0 + 30 +0.0 + 11 +12064.339828 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +43E + 8 +0 + 62 + 0 + 10 +12116.116524 + 20 +17250.0 + 30 +0.0 + 11 +12241.116524 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +43F + 8 +0 + 62 + 0 + 10 +12292.893219 + 20 +17250.0 + 30 +0.0 + 11 +12417.893219 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +440 + 8 +0 + 62 + 0 + 10 +12469.669914 + 20 +17250.0 + 30 +0.0 + 11 +12594.669914 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +441 + 8 +0 + 62 + 0 + 10 +12646.446609 + 20 +17250.0 + 30 +0.0 + 11 +12771.446609 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +442 + 8 +0 + 62 + 0 + 10 +12823.223305 + 20 +17250.0 + 30 +0.0 + 11 +12948.223305 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +443 + 8 +0 + 62 + 0 + 10 +13000.0 + 20 +17250.0 + 30 +0.0 + 11 +13125.0 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +444 + 8 +0 + 62 + 0 + 10 +13176.776695 + 20 +17250.0 + 30 +0.0 + 11 +13301.776695 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +445 + 8 +0 + 62 + 0 + 10 +13353.553391 + 20 +17250.0 + 30 +0.0 + 11 +13478.553391 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +446 + 8 +0 + 62 + 0 + 10 +11849.242405 + 20 +17250.0 + 30 +0.0 + 11 +11724.242405 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +447 + 8 +0 + 62 + 0 + 10 +11672.46571 + 20 +17250.0 + 30 +0.0 + 11 +11547.46571 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +448 + 8 +0 + 62 + 0 + 10 +11495.689014 + 20 +17250.0 + 30 +0.0 + 11 +11370.689014 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +449 + 8 +0 + 62 + 0 + 10 +11318.912319 + 20 +17250.0 + 30 +0.0 + 11 +11193.912319 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +44A + 8 +0 + 62 + 0 + 10 +11142.135624 + 20 +17250.0 + 30 +0.0 + 11 +11017.135624 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +44B + 8 +0 + 62 + 0 + 10 +10965.358928 + 20 +17250.0 + 30 +0.0 + 11 +10840.358928 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +44C + 8 +0 + 62 + 0 + 10 +10788.582233 + 20 +17250.0 + 30 +0.0 + 11 +10663.582233 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +44D + 8 +0 + 62 + 0 + 10 +10611.805538 + 20 +17250.0 + 30 +0.0 + 11 +10486.805538 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +44E + 8 +0 + 62 + 0 + 10 +10435.028843 + 20 +17250.0 + 30 +0.0 + 11 +10310.028843 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +44F + 8 +0 + 62 + 0 + 10 +10258.252147 + 20 +17250.0 + 30 +0.0 + 11 +10133.252147 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +450 + 8 +0 + 62 + 0 + 10 +12026.0191 + 20 +17250.0 + 30 +0.0 + 11 +11901.0191 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +451 + 8 +0 + 62 + 0 + 10 +12202.795796 + 20 +17250.0 + 30 +0.0 + 11 +12077.795796 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +452 + 8 +0 + 62 + 0 + 10 +12379.572491 + 20 +17250.0 + 30 +0.0 + 11 +12254.572491 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +453 + 8 +0 + 62 + 0 + 10 +12556.349186 + 20 +17250.0 + 30 +0.0 + 11 +12431.349186 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +454 + 8 +0 + 62 + 0 + 10 +12733.125881 + 20 +17250.0 + 30 +0.0 + 11 +12608.125881 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +455 + 8 +0 + 62 + 0 + 10 +12909.902577 + 20 +17250.0 + 30 +0.0 + 11 +12784.902577 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +456 + 8 +0 + 62 + 0 + 10 +13086.679272 + 20 +17250.0 + 30 +0.0 + 11 +12961.679272 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +457 + 8 +0 + 62 + 0 + 10 +13263.455967 + 20 +17250.0 + 30 +0.0 + 11 +13138.455967 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +458 + 8 +0 + 62 + 0 + 10 +13440.232663 + 20 +17250.0 + 30 +0.0 + 11 +13315.232663 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +459 + 8 +0 + 62 + 0 + 10 +13525.0 + 20 +17342.009358 + 30 +0.0 + 11 +13492.009358 + 21 +17375.0 + 31 +0.0 + 0 +ENDBLK + 5 +45A + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X36 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X36 + 1 + + 0 +LINE + 5 +45C + 8 +0 + 62 + 0 + 10 +14590.990258 + 20 +17250.0 + 30 +0.0 + 11 +14715.990258 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +45D + 8 +0 + 62 + 0 + 10 +14767.766953 + 20 +17250.0 + 30 +0.0 + 11 +14875.0 + 21 +17357.233047 + 31 +0.0 + 0 +LINE + 5 +45E + 8 +0 + 62 + 0 + 10 +14677.66953 + 20 +17250.0 + 30 +0.0 + 11 +14555.0 + 21 +17372.66953 + 31 +0.0 + 0 +LINE + 5 +45F + 8 +0 + 62 + 0 + 10 +14854.446225 + 20 +17250.0 + 30 +0.0 + 11 +14729.446225 + 21 +17375.0 + 31 +0.0 + 0 +ENDBLK + 5 +460 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X37 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X37 + 1 + + 0 +LINE + 5 +462 + 8 +0 + 62 + 0 + 10 +15474.873734 + 20 +17250.0 + 30 +0.0 + 11 +15599.873734 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +463 + 8 +0 + 62 + 0 + 10 +15298.097039 + 20 +17250.0 + 30 +0.0 + 11 +15423.097039 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +464 + 8 +0 + 62 + 0 + 10 +15240.0 + 20 +17368.679656 + 30 +0.0 + 11 +15246.320344 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +465 + 8 +0 + 62 + 0 + 10 +15651.650429 + 20 +17250.0 + 30 +0.0 + 11 +15776.650429 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +466 + 8 +0 + 62 + 0 + 10 +15828.427125 + 20 +17250.0 + 30 +0.0 + 11 +15953.427125 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +467 + 8 +0 + 62 + 0 + 10 +15561.553006 + 20 +17250.0 + 30 +0.0 + 11 +15436.553006 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +468 + 8 +0 + 62 + 0 + 10 +15384.776311 + 20 +17250.0 + 30 +0.0 + 11 +15259.776311 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +469 + 8 +0 + 62 + 0 + 10 +15738.329701 + 20 +17250.0 + 30 +0.0 + 11 +15613.329701 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +46A + 8 +0 + 62 + 0 + 10 +15915.106397 + 20 +17250.0 + 30 +0.0 + 11 +15790.106397 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +46B + 8 +0 + 62 + 0 + 10 +15990.0 + 20 +17351.883092 + 30 +0.0 + 11 +15966.883092 + 21 +17375.0 + 31 +0.0 + 0 +ENDBLK + 5 +46C + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X38 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X38 + 1 + + 0 +LINE + 5 +46E + 8 +0 + 62 + 0 + 10 +17065.863992 + 20 +17250.0 + 30 +0.0 + 11 +17190.863992 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +46F + 8 +0 + 62 + 0 + 10 +16889.087297 + 20 +17250.0 + 30 +0.0 + 11 +17014.087297 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +470 + 8 +0 + 62 + 0 + 10 +17242.640687 + 20 +17250.0 + 30 +0.0 + 11 +17367.640687 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +471 + 8 +0 + 62 + 0 + 10 +17419.417382 + 20 +17250.0 + 30 +0.0 + 11 +17544.417382 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +472 + 8 +0 + 62 + 0 + 10 +17596.194078 + 20 +17250.0 + 30 +0.0 + 11 +17625.0 + 21 +17278.805922 + 31 +0.0 + 0 +LINE + 5 +473 + 8 +0 + 62 + 0 + 10 +17152.543264 + 20 +17250.0 + 30 +0.0 + 11 +17027.543264 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +474 + 8 +0 + 62 + 0 + 10 +16975.766569 + 20 +17250.0 + 30 +0.0 + 11 +16875.0 + 21 +17350.766569 + 31 +0.0 + 0 +LINE + 5 +475 + 8 +0 + 62 + 0 + 10 +17329.319959 + 20 +17250.0 + 30 +0.0 + 11 +17204.319959 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +476 + 8 +0 + 62 + 0 + 10 +17506.096654 + 20 +17250.0 + 30 +0.0 + 11 +17381.096654 + 21 +17375.0 + 31 +0.0 + 0 +LINE + 5 +477 + 8 +0 + 62 + 0 + 10 +17625.0 + 20 +17307.87335 + 30 +0.0 + 11 +17557.87335 + 21 +17375.0 + 31 +0.0 + 0 +ENDBLK + 5 +478 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X39 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X39 + 1 + + 0 +LINE + 5 +47A + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +20768.13782 + 30 +0.0 + 11 +4950.0 + 21 +20768.13782 + 31 +0.0 + 0 +LINE + 5 +47B + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +20789.788455 + 30 +0.0 + 11 +4987.5 + 21 +20789.788455 + 31 +0.0 + 0 +LINE + 5 +47C + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +20811.43909 + 30 +0.0 + 11 +4950.0 + 21 +20811.43909 + 31 +0.0 + 0 +LINE + 5 +47D + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +20833.089725 + 30 +0.0 + 11 +4987.5 + 21 +20833.089725 + 31 +0.0 + 0 +LINE + 5 +47E + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +20854.74036 + 30 +0.0 + 11 +4950.0 + 21 +20854.74036 + 31 +0.0 + 0 +LINE + 5 +47F + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +20876.390995 + 30 +0.0 + 11 +4987.5 + 21 +20876.390995 + 31 +0.0 + 0 +LINE + 5 +480 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +20898.04163 + 30 +0.0 + 11 +4950.0 + 21 +20898.04163 + 31 +0.0 + 0 +LINE + 5 +481 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +20919.692265 + 30 +0.0 + 11 +4987.5 + 21 +20919.692265 + 31 +0.0 + 0 +LINE + 5 +482 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +20941.3429 + 30 +0.0 + 11 +4950.0 + 21 +20941.3429 + 31 +0.0 + 0 +LINE + 5 +483 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +20962.993535 + 30 +0.0 + 11 +4987.5 + 21 +20962.993535 + 31 +0.0 + 0 +LINE + 5 +484 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +20984.64417 + 30 +0.0 + 11 +4950.0 + 21 +20984.64417 + 31 +0.0 + 0 +LINE + 5 +485 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +21006.294805 + 30 +0.0 + 11 +4987.5 + 21 +21006.294805 + 31 +0.0 + 0 +LINE + 5 +486 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +21027.94544 + 30 +0.0 + 11 +4950.0 + 21 +21027.94544 + 31 +0.0 + 0 +LINE + 5 +487 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +21049.596075 + 30 +0.0 + 11 +4987.5 + 21 +21049.596075 + 31 +0.0 + 0 +LINE + 5 +488 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +21071.24671 + 30 +0.0 + 11 +4950.0 + 21 +21071.24671 + 31 +0.0 + 0 +LINE + 5 +489 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +21092.897345 + 30 +0.0 + 11 +4987.5 + 21 +21092.897345 + 31 +0.0 + 0 +LINE + 5 +48A + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +21114.54798 + 30 +0.0 + 11 +4950.0 + 21 +21114.54798 + 31 +0.0 + 0 +LINE + 5 +48B + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +21136.198615 + 30 +0.0 + 11 +4987.5 + 21 +21136.198615 + 31 +0.0 + 0 +LINE + 5 +48C + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +21157.84925 + 30 +0.0 + 11 +4950.0 + 21 +21157.84925 + 31 +0.0 + 0 +LINE + 5 +48D + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +21179.499885 + 30 +0.0 + 11 +4987.5 + 21 +21179.499885 + 31 +0.0 + 0 +LINE + 5 +48E + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +21201.15052 + 30 +0.0 + 11 +4950.0 + 21 +21201.15052 + 31 +0.0 + 0 +LINE + 5 +48F + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +21222.801155 + 30 +0.0 + 11 +4987.5 + 21 +21222.801155 + 31 +0.0 + 0 +LINE + 5 +490 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +21244.45179 + 30 +0.0 + 11 +4950.0 + 21 +21244.45179 + 31 +0.0 + 0 +LINE + 5 +491 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +21266.102425 + 30 +0.0 + 11 +4987.5 + 21 +21266.102425 + 31 +0.0 + 0 +LINE + 5 +492 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +21287.75306 + 30 +0.0 + 11 +4950.0 + 21 +21287.75306 + 31 +0.0 + 0 +LINE + 5 +493 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +21309.403695 + 30 +0.0 + 11 +4987.5 + 21 +21309.403695 + 31 +0.0 + 0 +LINE + 5 +494 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +21331.05433 + 30 +0.0 + 11 +4950.0 + 21 +21331.05433 + 31 +0.0 + 0 +LINE + 5 +495 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +21352.704965 + 30 +0.0 + 11 +4987.5 + 21 +21352.704965 + 31 +0.0 + 0 +LINE + 5 +496 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +21374.3556 + 30 +0.0 + 11 +4950.0 + 21 +21374.3556 + 31 +0.0 + 0 +LINE + 5 +497 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +21396.006235 + 30 +0.0 + 11 +4987.5 + 21 +21396.006235 + 31 +0.0 + 0 +LINE + 5 +498 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +21417.65687 + 30 +0.0 + 11 +4950.0 + 21 +21417.65687 + 31 +0.0 + 0 +LINE + 5 +499 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +21439.307505 + 30 +0.0 + 11 +4987.5 + 21 +21439.307505 + 31 +0.0 + 0 +LINE + 5 +49A + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +21460.95814 + 30 +0.0 + 11 +4950.0 + 21 +21460.95814 + 31 +0.0 + 0 +LINE + 5 +49B + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +21482.608775 + 30 +0.0 + 11 +4987.5 + 21 +21482.608775 + 31 +0.0 + 0 +LINE + 5 +49C + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +21504.25941 + 30 +0.0 + 11 +4950.0 + 21 +21504.25941 + 31 +0.0 + 0 +LINE + 5 +49D + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +21525.910045 + 30 +0.0 + 11 +4987.5 + 21 +21525.910045 + 31 +0.0 + 0 +LINE + 5 +49E + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +21547.56068 + 30 +0.0 + 11 +4950.0 + 21 +21547.56068 + 31 +0.0 + 0 +LINE + 5 +49F + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +21569.211315 + 30 +0.0 + 11 +4987.5 + 21 +21569.211315 + 31 +0.0 + 0 +LINE + 5 +4A0 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +21590.86195 + 30 +0.0 + 11 +4950.0 + 21 +21590.86195 + 31 +0.0 + 0 +LINE + 5 +4A1 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +21612.512585 + 30 +0.0 + 11 +4987.5 + 21 +21612.512585 + 31 +0.0 + 0 +LINE + 5 +4A2 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +21634.16322 + 30 +0.0 + 11 +4950.0 + 21 +21634.16322 + 31 +0.0 + 0 +LINE + 5 +4A3 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +21655.813855 + 30 +0.0 + 11 +4987.5 + 21 +21655.813855 + 31 +0.0 + 0 +LINE + 5 +4A4 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +21677.46449 + 30 +0.0 + 11 +4950.0 + 21 +21677.46449 + 31 +0.0 + 0 +LINE + 5 +4A5 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +21699.115125 + 30 +0.0 + 11 +4987.5 + 21 +21699.115125 + 31 +0.0 + 0 +LINE + 5 +4A6 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +21720.76576 + 30 +0.0 + 11 +4950.0 + 21 +21720.76576 + 31 +0.0 + 0 +LINE + 5 +4A7 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +21742.416395 + 30 +0.0 + 11 +4987.5 + 21 +21742.416395 + 31 +0.0 + 0 +LINE + 5 +4A8 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +21764.06703 + 30 +0.0 + 11 +4950.0 + 21 +21764.06703 + 31 +0.0 + 0 +LINE + 5 +4A9 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +21785.717665 + 30 +0.0 + 11 +4987.5 + 21 +21785.717665 + 31 +0.0 + 0 +LINE + 5 +4AA + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +21807.3683 + 30 +0.0 + 11 +4950.0 + 21 +21807.3683 + 31 +0.0 + 0 +LINE + 5 +4AB + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +21829.018935 + 30 +0.0 + 11 +4987.5 + 21 +21829.018935 + 31 +0.0 + 0 +LINE + 5 +4AC + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +21850.66957 + 30 +0.0 + 11 +4950.0 + 21 +21850.66957 + 31 +0.0 + 0 +LINE + 5 +4AD + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +21872.320205 + 30 +0.0 + 11 +4987.5 + 21 +21872.320205 + 31 +0.0 + 0 +LINE + 5 +4AE + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +21893.97084 + 30 +0.0 + 11 +4950.0 + 21 +21893.97084 + 31 +0.0 + 0 +LINE + 5 +4AF + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +21915.621475 + 30 +0.0 + 11 +4987.5 + 21 +21915.621475 + 31 +0.0 + 0 +LINE + 5 +4B0 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +21937.27211 + 30 +0.0 + 11 +4950.0 + 21 +21937.27211 + 31 +0.0 + 0 +LINE + 5 +4B1 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +21958.922745 + 30 +0.0 + 11 +4987.5 + 21 +21958.922745 + 31 +0.0 + 0 +LINE + 5 +4B2 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +21980.57338 + 30 +0.0 + 11 +4950.0 + 21 +21980.57338 + 31 +0.0 + 0 +LINE + 5 +4B3 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +22002.224015 + 30 +0.0 + 11 +4987.5 + 21 +22002.224015 + 31 +0.0 + 0 +LINE + 5 +4B4 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +22023.87465 + 30 +0.0 + 11 +4950.0 + 21 +22023.87465 + 31 +0.0 + 0 +LINE + 5 +4B5 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +22045.525285 + 30 +0.0 + 11 +4987.5 + 21 +22045.525285 + 31 +0.0 + 0 +LINE + 5 +4B6 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +22067.17592 + 30 +0.0 + 11 +4950.0 + 21 +22067.17592 + 31 +0.0 + 0 +LINE + 5 +4B7 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +22088.826555 + 30 +0.0 + 11 +4987.5 + 21 +22088.826555 + 31 +0.0 + 0 +LINE + 5 +4B8 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +22110.47719 + 30 +0.0 + 11 +4950.0 + 21 +22110.47719 + 31 +0.0 + 0 +LINE + 5 +4B9 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +22132.127825 + 30 +0.0 + 11 +4987.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +4BA + 8 +0 + 62 + 0 + 10 +5037.5 + 20 +22132.127825 + 30 +0.0 + 11 +5062.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +4BB + 8 +0 + 62 + 0 + 10 +5112.5 + 20 +22132.127825 + 30 +0.0 + 11 +5137.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +4BC + 8 +0 + 62 + 0 + 10 +5187.5 + 20 +22132.127825 + 30 +0.0 + 11 +5212.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +4BD + 8 +0 + 62 + 0 + 10 +5262.5 + 20 +22132.127825 + 30 +0.0 + 11 +5287.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +4BE + 8 +0 + 62 + 0 + 10 +5337.5 + 20 +22132.127825 + 30 +0.0 + 11 +5362.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +4BF + 8 +0 + 62 + 0 + 10 +5412.5 + 20 +22132.127825 + 30 +0.0 + 11 +5437.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +4C0 + 8 +0 + 62 + 0 + 10 +5487.5 + 20 +22132.127825 + 30 +0.0 + 11 +5512.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +4C1 + 8 +0 + 62 + 0 + 10 +5562.5 + 20 +22132.127825 + 30 +0.0 + 11 +5587.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +4C2 + 8 +0 + 62 + 0 + 10 +5637.5 + 20 +22132.127825 + 30 +0.0 + 11 +5662.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +4C3 + 8 +0 + 62 + 0 + 10 +5712.5 + 20 +22132.127825 + 30 +0.0 + 11 +5737.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +4C4 + 8 +0 + 62 + 0 + 10 +5787.5 + 20 +22132.127825 + 30 +0.0 + 11 +5812.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +4C5 + 8 +0 + 62 + 0 + 10 +5862.5 + 20 +22132.127825 + 30 +0.0 + 11 +5887.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +4C6 + 8 +0 + 62 + 0 + 10 +5937.5 + 20 +22132.127825 + 30 +0.0 + 11 +5962.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +4C7 + 8 +0 + 62 + 0 + 10 +6012.5 + 20 +22132.127825 + 30 +0.0 + 11 +6037.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +4C8 + 8 +0 + 62 + 0 + 10 +6087.5 + 20 +22132.127825 + 30 +0.0 + 11 +6112.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +4C9 + 8 +0 + 62 + 0 + 10 +6162.5 + 20 +22132.127825 + 30 +0.0 + 11 +6187.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +4CA + 8 +0 + 62 + 0 + 10 +6237.5 + 20 +22132.127825 + 30 +0.0 + 11 +6262.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +4CB + 8 +0 + 62 + 0 + 10 +6312.5 + 20 +22132.127825 + 30 +0.0 + 11 +6337.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +4CC + 8 +0 + 62 + 0 + 10 +6387.5 + 20 +22132.127825 + 30 +0.0 + 11 +6412.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +4CD + 8 +0 + 62 + 0 + 10 +6462.5 + 20 +22132.127825 + 30 +0.0 + 11 +6487.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +4CE + 8 +0 + 62 + 0 + 10 +6537.5 + 20 +22132.127825 + 30 +0.0 + 11 +6562.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +4CF + 8 +0 + 62 + 0 + 10 +6612.5 + 20 +22132.127825 + 30 +0.0 + 11 +6637.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +4D0 + 8 +0 + 62 + 0 + 10 +6687.5 + 20 +22132.127825 + 30 +0.0 + 11 +6712.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +4D1 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +22153.77846 + 30 +0.0 + 11 +4950.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +4D2 + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +22153.77846 + 30 +0.0 + 11 +5025.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +4D3 + 8 +0 + 62 + 0 + 10 +5075.0 + 20 +22153.77846 + 30 +0.0 + 11 +5100.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +4D4 + 8 +0 + 62 + 0 + 10 +5150.0 + 20 +22153.77846 + 30 +0.0 + 11 +5175.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +4D5 + 8 +0 + 62 + 0 + 10 +5225.0 + 20 +22153.77846 + 30 +0.0 + 11 +5250.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +4D6 + 8 +0 + 62 + 0 + 10 +5300.0 + 20 +22153.77846 + 30 +0.0 + 11 +5325.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +4D7 + 8 +0 + 62 + 0 + 10 +5375.0 + 20 +22153.77846 + 30 +0.0 + 11 +5400.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +4D8 + 8 +0 + 62 + 0 + 10 +5450.0 + 20 +22153.77846 + 30 +0.0 + 11 +5475.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +4D9 + 8 +0 + 62 + 0 + 10 +5525.0 + 20 +22153.77846 + 30 +0.0 + 11 +5550.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +4DA + 8 +0 + 62 + 0 + 10 +5600.0 + 20 +22153.77846 + 30 +0.0 + 11 +5625.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +4DB + 8 +0 + 62 + 0 + 10 +5675.0 + 20 +22153.77846 + 30 +0.0 + 11 +5700.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +4DC + 8 +0 + 62 + 0 + 10 +5750.0 + 20 +22153.77846 + 30 +0.0 + 11 +5775.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +4DD + 8 +0 + 62 + 0 + 10 +5825.0 + 20 +22153.77846 + 30 +0.0 + 11 +5850.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +4DE + 8 +0 + 62 + 0 + 10 +5900.0 + 20 +22153.77846 + 30 +0.0 + 11 +5925.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +4DF + 8 +0 + 62 + 0 + 10 +5975.0 + 20 +22153.77846 + 30 +0.0 + 11 +6000.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +4E0 + 8 +0 + 62 + 0 + 10 +6050.0 + 20 +22153.77846 + 30 +0.0 + 11 +6075.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +4E1 + 8 +0 + 62 + 0 + 10 +6125.0 + 20 +22153.77846 + 30 +0.0 + 11 +6150.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +4E2 + 8 +0 + 62 + 0 + 10 +6200.0 + 20 +22153.77846 + 30 +0.0 + 11 +6225.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +4E3 + 8 +0 + 62 + 0 + 10 +6275.0 + 20 +22153.77846 + 30 +0.0 + 11 +6300.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +4E4 + 8 +0 + 62 + 0 + 10 +6350.0 + 20 +22153.77846 + 30 +0.0 + 11 +6375.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +4E5 + 8 +0 + 62 + 0 + 10 +6425.0 + 20 +22153.77846 + 30 +0.0 + 11 +6450.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +4E6 + 8 +0 + 62 + 0 + 10 +6500.0 + 20 +22153.77846 + 30 +0.0 + 11 +6525.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +4E7 + 8 +0 + 62 + 0 + 10 +6575.0 + 20 +22153.77846 + 30 +0.0 + 11 +6600.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +4E8 + 8 +0 + 62 + 0 + 10 +6650.0 + 20 +22153.77846 + 30 +0.0 + 11 +6675.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +4E9 + 8 +0 + 62 + 0 + 10 +6725.0 + 20 +22153.77846 + 30 +0.0 + 11 +6750.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +4EA + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +22175.429095 + 30 +0.0 + 11 +4987.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +4EB + 8 +0 + 62 + 0 + 10 +5037.5 + 20 +22175.429095 + 30 +0.0 + 11 +5062.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +4EC + 8 +0 + 62 + 0 + 10 +5112.5 + 20 +22175.429095 + 30 +0.0 + 11 +5137.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +4ED + 8 +0 + 62 + 0 + 10 +5187.5 + 20 +22175.429095 + 30 +0.0 + 11 +5212.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +4EE + 8 +0 + 62 + 0 + 10 +5262.5 + 20 +22175.429095 + 30 +0.0 + 11 +5287.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +4EF + 8 +0 + 62 + 0 + 10 +5337.5 + 20 +22175.429095 + 30 +0.0 + 11 +5362.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +4F0 + 8 +0 + 62 + 0 + 10 +5412.5 + 20 +22175.429095 + 30 +0.0 + 11 +5437.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +4F1 + 8 +0 + 62 + 0 + 10 +5487.5 + 20 +22175.429095 + 30 +0.0 + 11 +5512.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +4F2 + 8 +0 + 62 + 0 + 10 +5562.5 + 20 +22175.429095 + 30 +0.0 + 11 +5587.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +4F3 + 8 +0 + 62 + 0 + 10 +5637.5 + 20 +22175.429095 + 30 +0.0 + 11 +5662.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +4F4 + 8 +0 + 62 + 0 + 10 +5712.5 + 20 +22175.429095 + 30 +0.0 + 11 +5737.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +4F5 + 8 +0 + 62 + 0 + 10 +5787.5 + 20 +22175.429095 + 30 +0.0 + 11 +5812.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +4F6 + 8 +0 + 62 + 0 + 10 +5862.5 + 20 +22175.429095 + 30 +0.0 + 11 +5887.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +4F7 + 8 +0 + 62 + 0 + 10 +5937.5 + 20 +22175.429095 + 30 +0.0 + 11 +5962.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +4F8 + 8 +0 + 62 + 0 + 10 +6012.5 + 20 +22175.429095 + 30 +0.0 + 11 +6037.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +4F9 + 8 +0 + 62 + 0 + 10 +6087.5 + 20 +22175.429095 + 30 +0.0 + 11 +6112.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +4FA + 8 +0 + 62 + 0 + 10 +6162.5 + 20 +22175.429095 + 30 +0.0 + 11 +6187.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +4FB + 8 +0 + 62 + 0 + 10 +6237.5 + 20 +22175.429095 + 30 +0.0 + 11 +6262.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +4FC + 8 +0 + 62 + 0 + 10 +6312.5 + 20 +22175.429095 + 30 +0.0 + 11 +6337.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +4FD + 8 +0 + 62 + 0 + 10 +6387.5 + 20 +22175.429095 + 30 +0.0 + 11 +6412.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +4FE + 8 +0 + 62 + 0 + 10 +6462.5 + 20 +22175.429095 + 30 +0.0 + 11 +6487.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +4FF + 8 +0 + 62 + 0 + 10 +6537.5 + 20 +22175.429095 + 30 +0.0 + 11 +6562.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +500 + 8 +0 + 62 + 0 + 10 +6612.5 + 20 +22175.429095 + 30 +0.0 + 11 +6637.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +501 + 8 +0 + 62 + 0 + 10 +6687.5 + 20 +22175.429095 + 30 +0.0 + 11 +6712.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +502 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +20746.487185 + 30 +0.0 + 11 +4987.5 + 21 +20746.487185 + 31 +0.0 + 0 +LINE + 5 +503 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +20724.83655 + 30 +0.0 + 11 +4950.0 + 21 +20724.83655 + 31 +0.0 + 0 +LINE + 5 +504 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +20703.185915 + 30 +0.0 + 11 +4987.5 + 21 +20703.185915 + 31 +0.0 + 0 +LINE + 5 +505 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +20681.53528 + 30 +0.0 + 11 +4950.0 + 21 +20681.53528 + 31 +0.0 + 0 +LINE + 5 +506 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +20659.884645 + 30 +0.0 + 11 +4987.5 + 21 +20659.884645 + 31 +0.0 + 0 +LINE + 5 +507 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +20638.23401 + 30 +0.0 + 11 +4950.0 + 21 +20638.23401 + 31 +0.0 + 0 +LINE + 5 +508 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +20616.583375 + 30 +0.0 + 11 +4987.5 + 21 +20616.583375 + 31 +0.0 + 0 +LINE + 5 +509 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +20594.93274 + 30 +0.0 + 11 +4950.0 + 21 +20594.93274 + 31 +0.0 + 0 +LINE + 5 +50A + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +20573.282105 + 30 +0.0 + 11 +4987.5 + 21 +20573.282105 + 31 +0.0 + 0 +LINE + 5 +50B + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +20551.63147 + 30 +0.0 + 11 +4950.0 + 21 +20551.63147 + 31 +0.0 + 0 +LINE + 5 +50C + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +20529.980835 + 30 +0.0 + 11 +4987.5 + 21 +20529.980835 + 31 +0.0 + 0 +LINE + 5 +50D + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +20508.3302 + 30 +0.0 + 11 +4950.0 + 21 +20508.3302 + 31 +0.0 + 0 +LINE + 5 +50E + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +20486.679565 + 30 +0.0 + 11 +4987.5 + 21 +20486.679565 + 31 +0.0 + 0 +LINE + 5 +50F + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +20465.02893 + 30 +0.0 + 11 +4950.0 + 21 +20465.02893 + 31 +0.0 + 0 +LINE + 5 +510 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +20443.378295 + 30 +0.0 + 11 +4987.5 + 21 +20443.378295 + 31 +0.0 + 0 +LINE + 5 +511 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +20421.72766 + 30 +0.0 + 11 +4950.0 + 21 +20421.72766 + 31 +0.0 + 0 +LINE + 5 +512 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +20400.077025 + 30 +0.0 + 11 +4987.5 + 21 +20400.077025 + 31 +0.0 + 0 +LINE + 5 +513 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +20378.42639 + 30 +0.0 + 11 +4950.0 + 21 +20378.42639 + 31 +0.0 + 0 +LINE + 5 +514 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +20356.775755 + 30 +0.0 + 11 +4987.5 + 21 +20356.775755 + 31 +0.0 + 0 +LINE + 5 +515 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +20335.12512 + 30 +0.0 + 11 +4950.0 + 21 +20335.12512 + 31 +0.0 + 0 +LINE + 5 +516 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +20313.474485 + 30 +0.0 + 11 +4987.5 + 21 +20313.474485 + 31 +0.0 + 0 +LINE + 5 +517 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +20291.82385 + 30 +0.0 + 11 +4950.0 + 21 +20291.82385 + 31 +0.0 + 0 +LINE + 5 +518 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +20270.173215 + 30 +0.0 + 11 +4987.5 + 21 +20270.173215 + 31 +0.0 + 0 +LINE + 5 +519 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +20248.52258 + 30 +0.0 + 11 +4950.0 + 21 +20248.52258 + 31 +0.0 + 0 +LINE + 5 +51A + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +20226.871945 + 30 +0.0 + 11 +4987.5 + 21 +20226.871945 + 31 +0.0 + 0 +LINE + 5 +51B + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +20205.22131 + 30 +0.0 + 11 +4950.0 + 21 +20205.22131 + 31 +0.0 + 0 +LINE + 5 +51C + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +20183.570675 + 30 +0.0 + 11 +4987.5 + 21 +20183.570675 + 31 +0.0 + 0 +LINE + 5 +51D + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +20161.92004 + 30 +0.0 + 11 +4950.0 + 21 +20161.92004 + 31 +0.0 + 0 +LINE + 5 +51E + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +20140.269405 + 30 +0.0 + 11 +4987.5 + 21 +20140.269405 + 31 +0.0 + 0 +LINE + 5 +51F + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +20118.61877 + 30 +0.0 + 11 +4950.0 + 21 +20118.61877 + 31 +0.0 + 0 +LINE + 5 +520 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +20096.968135 + 30 +0.0 + 11 +4987.5 + 21 +20096.968135 + 31 +0.0 + 0 +LINE + 5 +521 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +20075.3175 + 30 +0.0 + 11 +4950.0 + 21 +20075.3175 + 31 +0.0 + 0 +LINE + 5 +522 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +20053.666865 + 30 +0.0 + 11 +4987.5 + 21 +20053.666865 + 31 +0.0 + 0 +LINE + 5 +523 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +20032.01623 + 30 +0.0 + 11 +4950.0 + 21 +20032.01623 + 31 +0.0 + 0 +LINE + 5 +524 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +20010.365595 + 30 +0.0 + 11 +4987.5 + 21 +20010.365595 + 31 +0.0 + 0 +LINE + 5 +525 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +19988.71496 + 30 +0.0 + 11 +4950.0 + 21 +19988.71496 + 31 +0.0 + 0 +LINE + 5 +526 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +19967.064325 + 30 +0.0 + 11 +4987.5 + 21 +19967.064325 + 31 +0.0 + 0 +LINE + 5 +527 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +19945.41369 + 30 +0.0 + 11 +4950.0 + 21 +19945.41369 + 31 +0.0 + 0 +LINE + 5 +528 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +19923.763055 + 30 +0.0 + 11 +4987.5 + 21 +19923.763055 + 31 +0.0 + 0 +LINE + 5 +529 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +19902.11242 + 30 +0.0 + 11 +4950.0 + 21 +19902.11242 + 31 +0.0 + 0 +LINE + 5 +52A + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +19880.461785 + 30 +0.0 + 11 +4987.5 + 21 +19880.461785 + 31 +0.0 + 0 +LINE + 5 +52B + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +19858.81115 + 30 +0.0 + 11 +4950.0 + 21 +19858.81115 + 31 +0.0 + 0 +LINE + 5 +52C + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +19837.160515 + 30 +0.0 + 11 +4987.5 + 21 +19837.160515 + 31 +0.0 + 0 +LINE + 5 +52D + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +19815.50988 + 30 +0.0 + 11 +4950.0 + 21 +19815.50988 + 31 +0.0 + 0 +LINE + 5 +52E + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +19793.859245 + 30 +0.0 + 11 +4987.5 + 21 +19793.859245 + 31 +0.0 + 0 +LINE + 5 +52F + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +19772.20861 + 30 +0.0 + 11 +4950.0 + 21 +19772.20861 + 31 +0.0 + 0 +LINE + 5 +530 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +19750.557975 + 30 +0.0 + 11 +4987.5 + 21 +19750.557975 + 31 +0.0 + 0 +LINE + 5 +531 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +19728.90734 + 30 +0.0 + 11 +4950.0 + 21 +19728.90734 + 31 +0.0 + 0 +LINE + 5 +532 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +19707.256705 + 30 +0.0 + 11 +4987.5 + 21 +19707.256705 + 31 +0.0 + 0 +LINE + 5 +533 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +19685.60607 + 30 +0.0 + 11 +4950.0 + 21 +19685.60607 + 31 +0.0 + 0 +LINE + 5 +534 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +19663.955435 + 30 +0.0 + 11 +4987.5 + 21 +19663.955435 + 31 +0.0 + 0 +LINE + 5 +535 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +19642.3048 + 30 +0.0 + 11 +4950.0 + 21 +19642.3048 + 31 +0.0 + 0 +LINE + 5 +536 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +19620.654165 + 30 +0.0 + 11 +4987.5 + 21 +19620.654165 + 31 +0.0 + 0 +LINE + 5 +537 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +19599.00353 + 30 +0.0 + 11 +4950.0 + 21 +19599.00353 + 31 +0.0 + 0 +LINE + 5 +538 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +19577.352895 + 30 +0.0 + 11 +4987.5 + 21 +19577.352895 + 31 +0.0 + 0 +LINE + 5 +539 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +19555.70226 + 30 +0.0 + 11 +4950.0 + 21 +19555.70226 + 31 +0.0 + 0 +LINE + 5 +53A + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +19534.051625 + 30 +0.0 + 11 +4987.5 + 21 +19534.051625 + 31 +0.0 + 0 +LINE + 5 +53B + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +19512.40099 + 30 +0.0 + 11 +4950.0 + 21 +19512.40099 + 31 +0.0 + 0 +LINE + 5 +53C + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +19490.750355 + 30 +0.0 + 11 +4987.5 + 21 +19490.750355 + 31 +0.0 + 0 +LINE + 5 +53D + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +19469.09972 + 30 +0.0 + 11 +4950.0 + 21 +19469.09972 + 31 +0.0 + 0 +LINE + 5 +53E + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +19447.449085 + 30 +0.0 + 11 +4987.5 + 21 +19447.449085 + 31 +0.0 + 0 +LINE + 5 +53F + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +19425.79845 + 30 +0.0 + 11 +4950.0 + 21 +19425.79845 + 31 +0.0 + 0 +LINE + 5 +540 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +19404.147815 + 30 +0.0 + 11 +4987.5 + 21 +19404.147815 + 31 +0.0 + 0 +LINE + 5 +541 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +19382.49718 + 30 +0.0 + 11 +4950.0 + 21 +19382.49718 + 31 +0.0 + 0 +LINE + 5 +542 + 8 +0 + 62 + 0 + 10 +5037.499976 + 20 +22132.127867 + 30 +0.0 + 11 +5024.999976 + 21 +22153.778502 + 31 +0.0 + 0 +LINE + 5 +543 + 8 +0 + 62 + 0 + 10 +4999.999976 + 20 +22153.778502 + 30 +0.0 + 11 +4987.499976 + 21 +22175.429137 + 31 +0.0 + 0 +LINE + 5 +544 + 8 +0 + 62 + 0 + 10 +4999.999976 + 20 +22110.477232 + 30 +0.0 + 11 +4987.499976 + 21 +22132.127867 + 31 +0.0 + 0 +LINE + 5 +545 + 8 +0 + 62 + 0 + 10 +4962.499976 + 20 +22175.429137 + 30 +0.0 + 11 +4951.200733 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +546 + 8 +0 + 62 + 0 + 10 +4999.999976 + 20 +22067.175962 + 30 +0.0 + 11 +4987.499976 + 21 +22088.826597 + 31 +0.0 + 0 +LINE + 5 +547 + 8 +0 + 62 + 0 + 10 +4962.499976 + 20 +22132.127867 + 30 +0.0 + 11 +4949.999976 + 21 +22153.778502 + 31 +0.0 + 0 +LINE + 5 +548 + 8 +0 + 62 + 0 + 10 +4999.999976 + 20 +22023.874692 + 30 +0.0 + 11 +4987.499976 + 21 +22045.525327 + 31 +0.0 + 0 +LINE + 5 +549 + 8 +0 + 62 + 0 + 10 +4962.499976 + 20 +22088.826597 + 30 +0.0 + 11 +4949.999976 + 21 +22110.477232 + 31 +0.0 + 0 +LINE + 5 +54A + 8 +0 + 62 + 0 + 10 +4924.999976 + 20 +22153.778502 + 30 +0.0 + 11 +4920.0 + 21 +22162.438715 + 31 +0.0 + 0 +LINE + 5 +54B + 8 +0 + 62 + 0 + 10 +4999.999976 + 20 +21980.573422 + 30 +0.0 + 11 +4987.499976 + 21 +22002.224057 + 31 +0.0 + 0 +LINE + 5 +54C + 8 +0 + 62 + 0 + 10 +4962.499976 + 20 +22045.525327 + 30 +0.0 + 11 +4949.999976 + 21 +22067.175962 + 31 +0.0 + 0 +LINE + 5 +54D + 8 +0 + 62 + 0 + 10 +4924.999976 + 20 +22110.477232 + 30 +0.0 + 11 +4920.0 + 21 +22119.137445 + 31 +0.0 + 0 +LINE + 5 +54E + 8 +0 + 62 + 0 + 10 +4999.999976 + 20 +21937.272152 + 30 +0.0 + 11 +4987.499976 + 21 +21958.922787 + 31 +0.0 + 0 +LINE + 5 +54F + 8 +0 + 62 + 0 + 10 +4962.499976 + 20 +22002.224057 + 30 +0.0 + 11 +4949.999976 + 21 +22023.874692 + 31 +0.0 + 0 +LINE + 5 +550 + 8 +0 + 62 + 0 + 10 +4924.999976 + 20 +22067.175962 + 30 +0.0 + 11 +4920.0 + 21 +22075.836175 + 31 +0.0 + 0 +LINE + 5 +551 + 8 +0 + 62 + 0 + 10 +4999.999976 + 20 +21893.970881 + 30 +0.0 + 11 +4987.499976 + 21 +21915.621517 + 31 +0.0 + 0 +LINE + 5 +552 + 8 +0 + 62 + 0 + 10 +4962.499976 + 20 +21958.922787 + 30 +0.0 + 11 +4949.999976 + 21 +21980.573422 + 31 +0.0 + 0 +LINE + 5 +553 + 8 +0 + 62 + 0 + 10 +4924.999976 + 20 +22023.874692 + 30 +0.0 + 11 +4920.0 + 21 +22032.534905 + 31 +0.0 + 0 +LINE + 5 +554 + 8 +0 + 62 + 0 + 10 +4999.999976 + 20 +21850.669611 + 30 +0.0 + 11 +4987.499976 + 21 +21872.320246 + 31 +0.0 + 0 +LINE + 5 +555 + 8 +0 + 62 + 0 + 10 +4962.499976 + 20 +21915.621517 + 30 +0.0 + 11 +4949.999976 + 21 +21937.272152 + 31 +0.0 + 0 +LINE + 5 +556 + 8 +0 + 62 + 0 + 10 +4924.999976 + 20 +21980.573422 + 30 +0.0 + 11 +4920.0 + 21 +21989.233635 + 31 +0.0 + 0 +LINE + 5 +557 + 8 +0 + 62 + 0 + 10 +4999.999976 + 20 +21807.368341 + 30 +0.0 + 11 +4987.499976 + 21 +21829.018976 + 31 +0.0 + 0 +LINE + 5 +558 + 8 +0 + 62 + 0 + 10 +4962.499976 + 20 +21872.320246 + 30 +0.0 + 11 +4949.999976 + 21 +21893.970882 + 31 +0.0 + 0 +LINE + 5 +559 + 8 +0 + 62 + 0 + 10 +4924.999976 + 20 +21937.272152 + 30 +0.0 + 11 +4920.0 + 21 +21945.932365 + 31 +0.0 + 0 +LINE + 5 +55A + 8 +0 + 62 + 0 + 10 +4999.999976 + 20 +21764.067071 + 30 +0.0 + 11 +4987.499976 + 21 +21785.717706 + 31 +0.0 + 0 +LINE + 5 +55B + 8 +0 + 62 + 0 + 10 +4962.499976 + 20 +21829.018976 + 30 +0.0 + 11 +4949.999976 + 21 +21850.669611 + 31 +0.0 + 0 +LINE + 5 +55C + 8 +0 + 62 + 0 + 10 +4924.999976 + 20 +21893.970882 + 30 +0.0 + 11 +4920.0 + 21 +21902.631095 + 31 +0.0 + 0 +LINE + 5 +55D + 8 +0 + 62 + 0 + 10 +4999.999976 + 20 +21720.765801 + 30 +0.0 + 11 +4987.499976 + 21 +21742.416436 + 31 +0.0 + 0 +LINE + 5 +55E + 8 +0 + 62 + 0 + 10 +4962.499976 + 20 +21785.717706 + 30 +0.0 + 11 +4949.999976 + 21 +21807.368341 + 31 +0.0 + 0 +LINE + 5 +55F + 8 +0 + 62 + 0 + 10 +4924.999976 + 20 +21850.669611 + 30 +0.0 + 11 +4920.0 + 21 +21859.329825 + 31 +0.0 + 0 +LINE + 5 +560 + 8 +0 + 62 + 0 + 10 +4999.999976 + 20 +21677.464531 + 30 +0.0 + 11 +4987.499976 + 21 +21699.115166 + 31 +0.0 + 0 +LINE + 5 +561 + 8 +0 + 62 + 0 + 10 +4962.499976 + 20 +21742.416436 + 30 +0.0 + 11 +4949.999976 + 21 +21764.067071 + 31 +0.0 + 0 +LINE + 5 +562 + 8 +0 + 62 + 0 + 10 +4924.999976 + 20 +21807.368341 + 30 +0.0 + 11 +4920.0 + 21 +21816.028555 + 31 +0.0 + 0 +LINE + 5 +563 + 8 +0 + 62 + 0 + 10 +4999.999977 + 20 +21634.163261 + 30 +0.0 + 11 +4987.499977 + 21 +21655.813896 + 31 +0.0 + 0 +LINE + 5 +564 + 8 +0 + 62 + 0 + 10 +4962.499977 + 20 +21699.115166 + 30 +0.0 + 11 +4949.999977 + 21 +21720.765801 + 31 +0.0 + 0 +LINE + 5 +565 + 8 +0 + 62 + 0 + 10 +4924.999977 + 20 +21764.067071 + 30 +0.0 + 11 +4920.0 + 21 +21772.727285 + 31 +0.0 + 0 +LINE + 5 +566 + 8 +0 + 62 + 0 + 10 +4999.999977 + 20 +21590.86199 + 30 +0.0 + 11 +4987.499977 + 21 +21612.512626 + 31 +0.0 + 0 +LINE + 5 +567 + 8 +0 + 62 + 0 + 10 +4962.499977 + 20 +21655.813896 + 30 +0.0 + 11 +4949.999977 + 21 +21677.464531 + 31 +0.0 + 0 +LINE + 5 +568 + 8 +0 + 62 + 0 + 10 +4924.999977 + 20 +21720.765801 + 30 +0.0 + 11 +4920.0 + 21 +21729.426015 + 31 +0.0 + 0 +LINE + 5 +569 + 8 +0 + 62 + 0 + 10 +4999.999977 + 20 +21547.56072 + 30 +0.0 + 11 +4987.499977 + 21 +21569.211355 + 31 +0.0 + 0 +LINE + 5 +56A + 8 +0 + 62 + 0 + 10 +4962.499977 + 20 +21612.512626 + 30 +0.0 + 11 +4949.999977 + 21 +21634.163261 + 31 +0.0 + 0 +LINE + 5 +56B + 8 +0 + 62 + 0 + 10 +4924.999977 + 20 +21677.464531 + 30 +0.0 + 11 +4920.0 + 21 +21686.124745 + 31 +0.0 + 0 +LINE + 5 +56C + 8 +0 + 62 + 0 + 10 +4999.999977 + 20 +21504.25945 + 30 +0.0 + 11 +4987.499977 + 21 +21525.910085 + 31 +0.0 + 0 +LINE + 5 +56D + 8 +0 + 62 + 0 + 10 +4962.499977 + 20 +21569.211355 + 30 +0.0 + 11 +4949.999977 + 21 +21590.861991 + 31 +0.0 + 0 +LINE + 5 +56E + 8 +0 + 62 + 0 + 10 +4924.999977 + 20 +21634.163261 + 30 +0.0 + 11 +4920.0 + 21 +21642.823475 + 31 +0.0 + 0 +LINE + 5 +56F + 8 +0 + 62 + 0 + 10 +4999.999977 + 20 +21460.95818 + 30 +0.0 + 11 +4987.499977 + 21 +21482.608815 + 31 +0.0 + 0 +LINE + 5 +570 + 8 +0 + 62 + 0 + 10 +4962.499977 + 20 +21525.910085 + 30 +0.0 + 11 +4949.999977 + 21 +21547.56072 + 31 +0.0 + 0 +LINE + 5 +571 + 8 +0 + 62 + 0 + 10 +4924.999977 + 20 +21590.861991 + 30 +0.0 + 11 +4920.0 + 21 +21599.522205 + 31 +0.0 + 0 +LINE + 5 +572 + 8 +0 + 62 + 0 + 10 +4999.999977 + 20 +21417.65691 + 30 +0.0 + 11 +4987.499977 + 21 +21439.307545 + 31 +0.0 + 0 +LINE + 5 +573 + 8 +0 + 62 + 0 + 10 +4962.499977 + 20 +21482.608815 + 30 +0.0 + 11 +4949.999977 + 21 +21504.25945 + 31 +0.0 + 0 +LINE + 5 +574 + 8 +0 + 62 + 0 + 10 +4924.999977 + 20 +21547.56072 + 30 +0.0 + 11 +4920.0 + 21 +21556.220935 + 31 +0.0 + 0 +LINE + 5 +575 + 8 +0 + 62 + 0 + 10 +4999.999977 + 20 +21374.35564 + 30 +0.0 + 11 +4987.499977 + 21 +21396.006275 + 31 +0.0 + 0 +LINE + 5 +576 + 8 +0 + 62 + 0 + 10 +4962.499977 + 20 +21439.307545 + 30 +0.0 + 11 +4949.999977 + 21 +21460.95818 + 31 +0.0 + 0 +LINE + 5 +577 + 8 +0 + 62 + 0 + 10 +4924.999977 + 20 +21504.25945 + 30 +0.0 + 11 +4920.0 + 21 +21512.919665 + 31 +0.0 + 0 +LINE + 5 +578 + 8 +0 + 62 + 0 + 10 +4999.999977 + 20 +21331.05437 + 30 +0.0 + 11 +4987.499977 + 21 +21352.705005 + 31 +0.0 + 0 +LINE + 5 +579 + 8 +0 + 62 + 0 + 10 +4962.499977 + 20 +21396.006275 + 30 +0.0 + 11 +4949.999977 + 21 +21417.65691 + 31 +0.0 + 0 +LINE + 5 +57A + 8 +0 + 62 + 0 + 10 +4924.999977 + 20 +21460.95818 + 30 +0.0 + 11 +4920.0 + 21 +21469.618395 + 31 +0.0 + 0 +LINE + 5 +57B + 8 +0 + 62 + 0 + 10 +4999.999977 + 20 +21287.753099 + 30 +0.0 + 11 +4987.499977 + 21 +21309.403735 + 31 +0.0 + 0 +LINE + 5 +57C + 8 +0 + 62 + 0 + 10 +4962.499977 + 20 +21352.705005 + 30 +0.0 + 11 +4949.999977 + 21 +21374.35564 + 31 +0.0 + 0 +LINE + 5 +57D + 8 +0 + 62 + 0 + 10 +4924.999977 + 20 +21417.65691 + 30 +0.0 + 11 +4920.0 + 21 +21426.317125 + 31 +0.0 + 0 +LINE + 5 +57E + 8 +0 + 62 + 0 + 10 +4999.999977 + 20 +21244.451829 + 30 +0.0 + 11 +4987.499977 + 21 +21266.102464 + 31 +0.0 + 0 +LINE + 5 +57F + 8 +0 + 62 + 0 + 10 +4962.499977 + 20 +21309.403735 + 30 +0.0 + 11 +4949.999977 + 21 +21331.05437 + 31 +0.0 + 0 +LINE + 5 +580 + 8 +0 + 62 + 0 + 10 +4924.999977 + 20 +21374.35564 + 30 +0.0 + 11 +4920.0 + 21 +21383.015855 + 31 +0.0 + 0 +LINE + 5 +581 + 8 +0 + 62 + 0 + 10 +4999.999977 + 20 +21201.150559 + 30 +0.0 + 11 +4987.499977 + 21 +21222.801194 + 31 +0.0 + 0 +LINE + 5 +582 + 8 +0 + 62 + 0 + 10 +4962.499977 + 20 +21266.102464 + 30 +0.0 + 11 +4949.999977 + 21 +21287.7531 + 31 +0.0 + 0 +LINE + 5 +583 + 8 +0 + 62 + 0 + 10 +4924.999977 + 20 +21331.05437 + 30 +0.0 + 11 +4920.0 + 21 +21339.714585 + 31 +0.0 + 0 +LINE + 5 +584 + 8 +0 + 62 + 0 + 10 +4999.999977 + 20 +21157.849289 + 30 +0.0 + 11 +4987.499977 + 21 +21179.499924 + 31 +0.0 + 0 +LINE + 5 +585 + 8 +0 + 62 + 0 + 10 +4962.499977 + 20 +21222.801194 + 30 +0.0 + 11 +4949.999977 + 21 +21244.451829 + 31 +0.0 + 0 +LINE + 5 +586 + 8 +0 + 62 + 0 + 10 +4924.999977 + 20 +21287.7531 + 30 +0.0 + 11 +4920.0 + 21 +21296.413315 + 31 +0.0 + 0 +LINE + 5 +587 + 8 +0 + 62 + 0 + 10 +4999.999978 + 20 +21114.548019 + 30 +0.0 + 11 +4987.499978 + 21 +21136.198654 + 31 +0.0 + 0 +LINE + 5 +588 + 8 +0 + 62 + 0 + 10 +4962.499978 + 20 +21179.499924 + 30 +0.0 + 11 +4949.999978 + 21 +21201.150559 + 31 +0.0 + 0 +LINE + 5 +589 + 8 +0 + 62 + 0 + 10 +4924.999978 + 20 +21244.451829 + 30 +0.0 + 11 +4920.0 + 21 +21253.112045 + 31 +0.0 + 0 +LINE + 5 +58A + 8 +0 + 62 + 0 + 10 +4999.999978 + 20 +21071.246749 + 30 +0.0 + 11 +4987.499978 + 21 +21092.897384 + 31 +0.0 + 0 +LINE + 5 +58B + 8 +0 + 62 + 0 + 10 +4962.499978 + 20 +21136.198654 + 30 +0.0 + 11 +4949.999978 + 21 +21157.849289 + 31 +0.0 + 0 +LINE + 5 +58C + 8 +0 + 62 + 0 + 10 +4924.999978 + 20 +21201.150559 + 30 +0.0 + 11 +4920.0 + 21 +21209.810775 + 31 +0.0 + 0 +LINE + 5 +58D + 8 +0 + 62 + 0 + 10 +4999.999978 + 20 +21027.945479 + 30 +0.0 + 11 +4987.499978 + 21 +21049.596114 + 31 +0.0 + 0 +LINE + 5 +58E + 8 +0 + 62 + 0 + 10 +4962.499978 + 20 +21092.897384 + 30 +0.0 + 11 +4949.999978 + 21 +21114.548019 + 31 +0.0 + 0 +LINE + 5 +58F + 8 +0 + 62 + 0 + 10 +4924.999978 + 20 +21157.849289 + 30 +0.0 + 11 +4920.0 + 21 +21166.509505 + 31 +0.0 + 0 +LINE + 5 +590 + 8 +0 + 62 + 0 + 10 +4999.999978 + 20 +20984.644208 + 30 +0.0 + 11 +4987.499978 + 21 +21006.294844 + 31 +0.0 + 0 +LINE + 5 +591 + 8 +0 + 62 + 0 + 10 +4962.499978 + 20 +21049.596114 + 30 +0.0 + 11 +4949.999978 + 21 +21071.246749 + 31 +0.0 + 0 +LINE + 5 +592 + 8 +0 + 62 + 0 + 10 +4924.999978 + 20 +21114.548019 + 30 +0.0 + 11 +4920.0 + 21 +21123.208235 + 31 +0.0 + 0 +LINE + 5 +593 + 8 +0 + 62 + 0 + 10 +4999.999978 + 20 +20941.342938 + 30 +0.0 + 11 +4987.499978 + 21 +20962.993573 + 31 +0.0 + 0 +LINE + 5 +594 + 8 +0 + 62 + 0 + 10 +4962.499978 + 20 +21006.294844 + 30 +0.0 + 11 +4949.999978 + 21 +21027.945479 + 31 +0.0 + 0 +LINE + 5 +595 + 8 +0 + 62 + 0 + 10 +4924.999978 + 20 +21071.246749 + 30 +0.0 + 11 +4920.0 + 21 +21079.906965 + 31 +0.0 + 0 +LINE + 5 +596 + 8 +0 + 62 + 0 + 10 +4999.999978 + 20 +20898.041668 + 30 +0.0 + 11 +4987.499978 + 21 +20919.692303 + 31 +0.0 + 0 +LINE + 5 +597 + 8 +0 + 62 + 0 + 10 +4962.499978 + 20 +20962.993573 + 30 +0.0 + 11 +4949.999978 + 21 +20984.644209 + 31 +0.0 + 0 +LINE + 5 +598 + 8 +0 + 62 + 0 + 10 +4924.999978 + 20 +21027.945479 + 30 +0.0 + 11 +4920.0 + 21 +21036.605695 + 31 +0.0 + 0 +LINE + 5 +599 + 8 +0 + 62 + 0 + 10 +4999.999978 + 20 +20854.740398 + 30 +0.0 + 11 +4987.499978 + 21 +20876.391033 + 31 +0.0 + 0 +LINE + 5 +59A + 8 +0 + 62 + 0 + 10 +4962.499978 + 20 +20919.692303 + 30 +0.0 + 11 +4949.999978 + 21 +20941.342938 + 31 +0.0 + 0 +LINE + 5 +59B + 8 +0 + 62 + 0 + 10 +4924.999978 + 20 +20984.644209 + 30 +0.0 + 11 +4920.0 + 21 +20993.304425 + 31 +0.0 + 0 +LINE + 5 +59C + 8 +0 + 62 + 0 + 10 +4999.999978 + 20 +20811.439128 + 30 +0.0 + 11 +4987.499978 + 21 +20833.089763 + 31 +0.0 + 0 +LINE + 5 +59D + 8 +0 + 62 + 0 + 10 +4962.499978 + 20 +20876.391033 + 30 +0.0 + 11 +4949.999978 + 21 +20898.041668 + 31 +0.0 + 0 +LINE + 5 +59E + 8 +0 + 62 + 0 + 10 +4924.999978 + 20 +20941.342938 + 30 +0.0 + 11 +4920.0 + 21 +20950.003155 + 31 +0.0 + 0 +LINE + 5 +59F + 8 +0 + 62 + 0 + 10 +4999.999978 + 20 +20768.137858 + 30 +0.0 + 11 +4987.499978 + 21 +20789.788493 + 31 +0.0 + 0 +LINE + 5 +5A0 + 8 +0 + 62 + 0 + 10 +4962.499978 + 20 +20833.089763 + 30 +0.0 + 11 +4949.999978 + 21 +20854.740398 + 31 +0.0 + 0 +LINE + 5 +5A1 + 8 +0 + 62 + 0 + 10 +4924.999978 + 20 +20898.041668 + 30 +0.0 + 11 +4920.0 + 21 +20906.701885 + 31 +0.0 + 0 +LINE + 5 +5A2 + 8 +0 + 62 + 0 + 10 +4999.999978 + 20 +20724.836588 + 30 +0.0 + 11 +4987.499978 + 21 +20746.487223 + 31 +0.0 + 0 +LINE + 5 +5A3 + 8 +0 + 62 + 0 + 10 +4962.499978 + 20 +20789.788493 + 30 +0.0 + 11 +4949.999978 + 21 +20811.439128 + 31 +0.0 + 0 +LINE + 5 +5A4 + 8 +0 + 62 + 0 + 10 +4924.999978 + 20 +20854.740398 + 30 +0.0 + 11 +4920.0 + 21 +20863.400615 + 31 +0.0 + 0 +LINE + 5 +5A5 + 8 +0 + 62 + 0 + 10 +4999.999978 + 20 +20681.535317 + 30 +0.0 + 11 +4987.499978 + 21 +20703.185953 + 31 +0.0 + 0 +LINE + 5 +5A6 + 8 +0 + 62 + 0 + 10 +4962.499978 + 20 +20746.487223 + 30 +0.0 + 11 +4949.999978 + 21 +20768.137858 + 31 +0.0 + 0 +LINE + 5 +5A7 + 8 +0 + 62 + 0 + 10 +4924.999978 + 20 +20811.439128 + 30 +0.0 + 11 +4920.0 + 21 +20820.099345 + 31 +0.0 + 0 +LINE + 5 +5A8 + 8 +0 + 62 + 0 + 10 +4999.999978 + 20 +20638.234047 + 30 +0.0 + 11 +4987.499978 + 21 +20659.884682 + 31 +0.0 + 0 +LINE + 5 +5A9 + 8 +0 + 62 + 0 + 10 +4962.499978 + 20 +20703.185953 + 30 +0.0 + 11 +4949.999978 + 21 +20724.836588 + 31 +0.0 + 0 +LINE + 5 +5AA + 8 +0 + 62 + 0 + 10 +4924.999978 + 20 +20768.137858 + 30 +0.0 + 11 +4920.0 + 21 +20776.798075 + 31 +0.0 + 0 +LINE + 5 +5AB + 8 +0 + 62 + 0 + 10 +4999.999979 + 20 +20594.932777 + 30 +0.0 + 11 +4987.499979 + 21 +20616.583412 + 31 +0.0 + 0 +LINE + 5 +5AC + 8 +0 + 62 + 0 + 10 +4962.499979 + 20 +20659.884682 + 30 +0.0 + 11 +4949.999979 + 21 +20681.535318 + 31 +0.0 + 0 +LINE + 5 +5AD + 8 +0 + 62 + 0 + 10 +4924.999979 + 20 +20724.836588 + 30 +0.0 + 11 +4920.0 + 21 +20733.496805 + 31 +0.0 + 0 +LINE + 5 +5AE + 8 +0 + 62 + 0 + 10 +4999.999979 + 20 +20551.631507 + 30 +0.0 + 11 +4987.499979 + 21 +20573.282142 + 31 +0.0 + 0 +LINE + 5 +5AF + 8 +0 + 62 + 0 + 10 +4962.499979 + 20 +20616.583412 + 30 +0.0 + 11 +4949.999979 + 21 +20638.234047 + 31 +0.0 + 0 +LINE + 5 +5B0 + 8 +0 + 62 + 0 + 10 +4924.999979 + 20 +20681.535318 + 30 +0.0 + 11 +4920.0 + 21 +20690.195535 + 31 +0.0 + 0 +LINE + 5 +5B1 + 8 +0 + 62 + 0 + 10 +4999.999979 + 20 +20508.330237 + 30 +0.0 + 11 +4987.499979 + 21 +20529.980872 + 31 +0.0 + 0 +LINE + 5 +5B2 + 8 +0 + 62 + 0 + 10 +4962.499979 + 20 +20573.282142 + 30 +0.0 + 11 +4949.999979 + 21 +20594.932777 + 31 +0.0 + 0 +LINE + 5 +5B3 + 8 +0 + 62 + 0 + 10 +4924.999979 + 20 +20638.234047 + 30 +0.0 + 11 +4920.0 + 21 +20646.894265 + 31 +0.0 + 0 +LINE + 5 +5B4 + 8 +0 + 62 + 0 + 10 +4999.999979 + 20 +20465.028967 + 30 +0.0 + 11 +4987.499979 + 21 +20486.679602 + 31 +0.0 + 0 +LINE + 5 +5B5 + 8 +0 + 62 + 0 + 10 +4962.499979 + 20 +20529.980872 + 30 +0.0 + 11 +4949.999979 + 21 +20551.631507 + 31 +0.0 + 0 +LINE + 5 +5B6 + 8 +0 + 62 + 0 + 10 +4924.999979 + 20 +20594.932777 + 30 +0.0 + 11 +4920.0 + 21 +20603.592995 + 31 +0.0 + 0 +LINE + 5 +5B7 + 8 +0 + 62 + 0 + 10 +4999.999979 + 20 +20421.727697 + 30 +0.0 + 11 +4987.499979 + 21 +20443.378332 + 31 +0.0 + 0 +LINE + 5 +5B8 + 8 +0 + 62 + 0 + 10 +4962.499979 + 20 +20486.679602 + 30 +0.0 + 11 +4949.999979 + 21 +20508.330237 + 31 +0.0 + 0 +LINE + 5 +5B9 + 8 +0 + 62 + 0 + 10 +4924.999979 + 20 +20551.631507 + 30 +0.0 + 11 +4920.0 + 21 +20560.291725 + 31 +0.0 + 0 +LINE + 5 +5BA + 8 +0 + 62 + 0 + 10 +4999.999979 + 20 +20378.426426 + 30 +0.0 + 11 +4987.499979 + 21 +20400.077062 + 31 +0.0 + 0 +LINE + 5 +5BB + 8 +0 + 62 + 0 + 10 +4962.499979 + 20 +20443.378332 + 30 +0.0 + 11 +4949.999979 + 21 +20465.028967 + 31 +0.0 + 0 +LINE + 5 +5BC + 8 +0 + 62 + 0 + 10 +4924.999979 + 20 +20508.330237 + 30 +0.0 + 11 +4920.0 + 21 +20516.990455 + 31 +0.0 + 0 +LINE + 5 +5BD + 8 +0 + 62 + 0 + 10 +4999.999979 + 20 +20335.125156 + 30 +0.0 + 11 +4987.499979 + 21 +20356.775791 + 31 +0.0 + 0 +LINE + 5 +5BE + 8 +0 + 62 + 0 + 10 +4962.499979 + 20 +20400.077062 + 30 +0.0 + 11 +4949.999979 + 21 +20421.727697 + 31 +0.0 + 0 +LINE + 5 +5BF + 8 +0 + 62 + 0 + 10 +4924.999979 + 20 +20465.028967 + 30 +0.0 + 11 +4920.0 + 21 +20473.689185 + 31 +0.0 + 0 +LINE + 5 +5C0 + 8 +0 + 62 + 0 + 10 +4999.999979 + 20 +20291.823886 + 30 +0.0 + 11 +4987.499979 + 21 +20313.474521 + 31 +0.0 + 0 +LINE + 5 +5C1 + 8 +0 + 62 + 0 + 10 +4962.499979 + 20 +20356.775791 + 30 +0.0 + 11 +4949.999979 + 21 +20378.426427 + 31 +0.0 + 0 +LINE + 5 +5C2 + 8 +0 + 62 + 0 + 10 +4924.999979 + 20 +20421.727697 + 30 +0.0 + 11 +4920.0 + 21 +20430.387915 + 31 +0.0 + 0 +LINE + 5 +5C3 + 8 +0 + 62 + 0 + 10 +4999.999979 + 20 +20248.522616 + 30 +0.0 + 11 +4987.499979 + 21 +20270.173251 + 31 +0.0 + 0 +LINE + 5 +5C4 + 8 +0 + 62 + 0 + 10 +4962.499979 + 20 +20313.474521 + 30 +0.0 + 11 +4949.999979 + 21 +20335.125156 + 31 +0.0 + 0 +LINE + 5 +5C5 + 8 +0 + 62 + 0 + 10 +4924.999979 + 20 +20378.426427 + 30 +0.0 + 11 +4920.0 + 21 +20387.086645 + 31 +0.0 + 0 +LINE + 5 +5C6 + 8 +0 + 62 + 0 + 10 +4999.999979 + 20 +20205.221346 + 30 +0.0 + 11 +4987.499979 + 21 +20226.871981 + 31 +0.0 + 0 +LINE + 5 +5C7 + 8 +0 + 62 + 0 + 10 +4962.499979 + 20 +20270.173251 + 30 +0.0 + 11 +4949.999979 + 21 +20291.823886 + 31 +0.0 + 0 +LINE + 5 +5C8 + 8 +0 + 62 + 0 + 10 +4924.999979 + 20 +20335.125156 + 30 +0.0 + 11 +4920.0 + 21 +20343.785375 + 31 +0.0 + 0 +LINE + 5 +5C9 + 8 +0 + 62 + 0 + 10 +4999.999979 + 20 +20161.920076 + 30 +0.0 + 11 +4987.499979 + 21 +20183.570711 + 31 +0.0 + 0 +LINE + 5 +5CA + 8 +0 + 62 + 0 + 10 +4962.499979 + 20 +20226.871981 + 30 +0.0 + 11 +4949.999979 + 21 +20248.522616 + 31 +0.0 + 0 +LINE + 5 +5CB + 8 +0 + 62 + 0 + 10 +4924.999979 + 20 +20291.823886 + 30 +0.0 + 11 +4920.0 + 21 +20300.484105 + 31 +0.0 + 0 +LINE + 5 +5CC + 8 +0 + 62 + 0 + 10 +4999.999979 + 20 +20118.618806 + 30 +0.0 + 11 +4987.499979 + 21 +20140.269441 + 31 +0.0 + 0 +LINE + 5 +5CD + 8 +0 + 62 + 0 + 10 +4962.499979 + 20 +20183.570711 + 30 +0.0 + 11 +4949.999979 + 21 +20205.221346 + 31 +0.0 + 0 +LINE + 5 +5CE + 8 +0 + 62 + 0 + 10 +4924.999979 + 20 +20248.522616 + 30 +0.0 + 11 +4920.0 + 21 +20257.182835 + 31 +0.0 + 0 +LINE + 5 +5CF + 8 +0 + 62 + 0 + 10 +4999.99998 + 20 +20075.317535 + 30 +0.0 + 11 +4987.49998 + 21 +20096.968171 + 31 +0.0 + 0 +LINE + 5 +5D0 + 8 +0 + 62 + 0 + 10 +4962.49998 + 20 +20140.269441 + 30 +0.0 + 11 +4949.99998 + 21 +20161.920076 + 31 +0.0 + 0 +LINE + 5 +5D1 + 8 +0 + 62 + 0 + 10 +4924.99998 + 20 +20205.221346 + 30 +0.0 + 11 +4920.0 + 21 +20213.881565 + 31 +0.0 + 0 +LINE + 5 +5D2 + 8 +0 + 62 + 0 + 10 +4999.99998 + 20 +20032.016265 + 30 +0.0 + 11 +4987.49998 + 21 +20053.6669 + 31 +0.0 + 0 +LINE + 5 +5D3 + 8 +0 + 62 + 0 + 10 +4962.49998 + 20 +20096.968171 + 30 +0.0 + 11 +4949.99998 + 21 +20118.618806 + 31 +0.0 + 0 +LINE + 5 +5D4 + 8 +0 + 62 + 0 + 10 +4924.99998 + 20 +20161.920076 + 30 +0.0 + 11 +4920.0 + 21 +20170.580295 + 31 +0.0 + 0 +LINE + 5 +5D5 + 8 +0 + 62 + 0 + 10 +4999.99998 + 20 +19988.714995 + 30 +0.0 + 11 +4987.49998 + 21 +20010.36563 + 31 +0.0 + 0 +LINE + 5 +5D6 + 8 +0 + 62 + 0 + 10 +4962.49998 + 20 +20053.6669 + 30 +0.0 + 11 +4949.99998 + 21 +20075.317536 + 31 +0.0 + 0 +LINE + 5 +5D7 + 8 +0 + 62 + 0 + 10 +4924.99998 + 20 +20118.618806 + 30 +0.0 + 11 +4920.0 + 21 +20127.279025 + 31 +0.0 + 0 +LINE + 5 +5D8 + 8 +0 + 62 + 0 + 10 +4999.99998 + 20 +19945.413725 + 30 +0.0 + 11 +4987.49998 + 21 +19967.06436 + 31 +0.0 + 0 +LINE + 5 +5D9 + 8 +0 + 62 + 0 + 10 +4962.49998 + 20 +20010.36563 + 30 +0.0 + 11 +4949.99998 + 21 +20032.016265 + 31 +0.0 + 0 +LINE + 5 +5DA + 8 +0 + 62 + 0 + 10 +4924.99998 + 20 +20075.317536 + 30 +0.0 + 11 +4920.0 + 21 +20083.977755 + 31 +0.0 + 0 +LINE + 5 +5DB + 8 +0 + 62 + 0 + 10 +4999.99998 + 20 +19902.112455 + 30 +0.0 + 11 +4987.49998 + 21 +19923.76309 + 31 +0.0 + 0 +LINE + 5 +5DC + 8 +0 + 62 + 0 + 10 +4962.49998 + 20 +19967.06436 + 30 +0.0 + 11 +4949.99998 + 21 +19988.714995 + 31 +0.0 + 0 +LINE + 5 +5DD + 8 +0 + 62 + 0 + 10 +4924.99998 + 20 +20032.016265 + 30 +0.0 + 11 +4920.0 + 21 +20040.676485 + 31 +0.0 + 0 +LINE + 5 +5DE + 8 +0 + 62 + 0 + 10 +4999.99998 + 20 +19858.811185 + 30 +0.0 + 11 +4987.49998 + 21 +19880.46182 + 31 +0.0 + 0 +LINE + 5 +5DF + 8 +0 + 62 + 0 + 10 +4962.49998 + 20 +19923.76309 + 30 +0.0 + 11 +4949.99998 + 21 +19945.413725 + 31 +0.0 + 0 +LINE + 5 +5E0 + 8 +0 + 62 + 0 + 10 +4924.99998 + 20 +19988.714995 + 30 +0.0 + 11 +4920.0 + 21 +19997.375215 + 31 +0.0 + 0 +LINE + 5 +5E1 + 8 +0 + 62 + 0 + 10 +4999.99998 + 20 +19815.509915 + 30 +0.0 + 11 +4987.49998 + 21 +19837.16055 + 31 +0.0 + 0 +LINE + 5 +5E2 + 8 +0 + 62 + 0 + 10 +4962.49998 + 20 +19880.46182 + 30 +0.0 + 11 +4949.99998 + 21 +19902.112455 + 31 +0.0 + 0 +LINE + 5 +5E3 + 8 +0 + 62 + 0 + 10 +4924.99998 + 20 +19945.413725 + 30 +0.0 + 11 +4920.0 + 21 +19954.073945 + 31 +0.0 + 0 +LINE + 5 +5E4 + 8 +0 + 62 + 0 + 10 +4999.99998 + 20 +19772.208644 + 30 +0.0 + 11 +4987.49998 + 21 +19793.85928 + 31 +0.0 + 0 +LINE + 5 +5E5 + 8 +0 + 62 + 0 + 10 +4962.49998 + 20 +19837.16055 + 30 +0.0 + 11 +4949.99998 + 21 +19858.811185 + 31 +0.0 + 0 +LINE + 5 +5E6 + 8 +0 + 62 + 0 + 10 +4924.99998 + 20 +19902.112455 + 30 +0.0 + 11 +4920.0 + 21 +19910.772675 + 31 +0.0 + 0 +LINE + 5 +5E7 + 8 +0 + 62 + 0 + 10 +4999.99998 + 20 +19728.907374 + 30 +0.0 + 11 +4987.49998 + 21 +19750.558009 + 31 +0.0 + 0 +LINE + 5 +5E8 + 8 +0 + 62 + 0 + 10 +4962.49998 + 20 +19793.85928 + 30 +0.0 + 11 +4949.99998 + 21 +19815.509915 + 31 +0.0 + 0 +LINE + 5 +5E9 + 8 +0 + 62 + 0 + 10 +4924.99998 + 20 +19858.811185 + 30 +0.0 + 11 +4920.0 + 21 +19867.471405 + 31 +0.0 + 0 +LINE + 5 +5EA + 8 +0 + 62 + 0 + 10 +4999.99998 + 20 +19685.606104 + 30 +0.0 + 11 +4987.49998 + 21 +19707.256739 + 31 +0.0 + 0 +LINE + 5 +5EB + 8 +0 + 62 + 0 + 10 +4962.49998 + 20 +19750.558009 + 30 +0.0 + 11 +4949.99998 + 21 +19772.208645 + 31 +0.0 + 0 +LINE + 5 +5EC + 8 +0 + 62 + 0 + 10 +4924.99998 + 20 +19815.509915 + 30 +0.0 + 11 +4920.0 + 21 +19824.170135 + 31 +0.0 + 0 +LINE + 5 +5ED + 8 +0 + 62 + 0 + 10 +4999.99998 + 20 +19642.304834 + 30 +0.0 + 11 +4987.49998 + 21 +19663.955469 + 31 +0.0 + 0 +LINE + 5 +5EE + 8 +0 + 62 + 0 + 10 +4962.49998 + 20 +19707.256739 + 30 +0.0 + 11 +4949.99998 + 21 +19728.907374 + 31 +0.0 + 0 +LINE + 5 +5EF + 8 +0 + 62 + 0 + 10 +4924.99998 + 20 +19772.208645 + 30 +0.0 + 11 +4920.0 + 21 +19780.868865 + 31 +0.0 + 0 +LINE + 5 +5F0 + 8 +0 + 62 + 0 + 10 +4999.99998 + 20 +19599.003564 + 30 +0.0 + 11 +4987.49998 + 21 +19620.654199 + 31 +0.0 + 0 +LINE + 5 +5F1 + 8 +0 + 62 + 0 + 10 +4962.49998 + 20 +19663.955469 + 30 +0.0 + 11 +4949.99998 + 21 +19685.606104 + 31 +0.0 + 0 +LINE + 5 +5F2 + 8 +0 + 62 + 0 + 10 +4924.99998 + 20 +19728.907374 + 30 +0.0 + 11 +4920.0 + 21 +19737.567595 + 31 +0.0 + 0 +LINE + 5 +5F3 + 8 +0 + 62 + 0 + 10 +4999.99998 + 20 +19555.702294 + 30 +0.0 + 11 +4987.49998 + 21 +19577.352929 + 31 +0.0 + 0 +LINE + 5 +5F4 + 8 +0 + 62 + 0 + 10 +4962.49998 + 20 +19620.654199 + 30 +0.0 + 11 +4949.99998 + 21 +19642.304834 + 31 +0.0 + 0 +LINE + 5 +5F5 + 8 +0 + 62 + 0 + 10 +4924.99998 + 20 +19685.606104 + 30 +0.0 + 11 +4920.0 + 21 +19694.266325 + 31 +0.0 + 0 +LINE + 5 +5F6 + 8 +0 + 62 + 0 + 10 +4999.999981 + 20 +19512.401024 + 30 +0.0 + 11 +4987.499981 + 21 +19534.051659 + 31 +0.0 + 0 +LINE + 5 +5F7 + 8 +0 + 62 + 0 + 10 +4962.499981 + 20 +19577.352929 + 30 +0.0 + 11 +4949.999981 + 21 +19599.003564 + 31 +0.0 + 0 +LINE + 5 +5F8 + 8 +0 + 62 + 0 + 10 +4924.999981 + 20 +19642.304834 + 30 +0.0 + 11 +4920.0 + 21 +19650.965055 + 31 +0.0 + 0 +LINE + 5 +5F9 + 8 +0 + 62 + 0 + 10 +4999.999981 + 20 +19469.099753 + 30 +0.0 + 11 +4987.499981 + 21 +19490.750389 + 31 +0.0 + 0 +LINE + 5 +5FA + 8 +0 + 62 + 0 + 10 +4962.499981 + 20 +19534.051659 + 30 +0.0 + 11 +4949.999981 + 21 +19555.702294 + 31 +0.0 + 0 +LINE + 5 +5FB + 8 +0 + 62 + 0 + 10 +4924.999981 + 20 +19599.003564 + 30 +0.0 + 11 +4920.0 + 21 +19607.663785 + 31 +0.0 + 0 +LINE + 5 +5FC + 8 +0 + 62 + 0 + 10 +4999.999981 + 20 +19425.798483 + 30 +0.0 + 11 +4987.499981 + 21 +19447.449118 + 31 +0.0 + 0 +LINE + 5 +5FD + 8 +0 + 62 + 0 + 10 +4962.499981 + 20 +19490.750389 + 30 +0.0 + 11 +4949.999981 + 21 +19512.401024 + 31 +0.0 + 0 +LINE + 5 +5FE + 8 +0 + 62 + 0 + 10 +4924.999981 + 20 +19555.702294 + 30 +0.0 + 11 +4920.0 + 21 +19564.362515 + 31 +0.0 + 0 +LINE + 5 +5FF + 8 +0 + 62 + 0 + 10 +4999.999981 + 20 +19382.497213 + 30 +0.0 + 11 +4987.499981 + 21 +19404.147848 + 31 +0.0 + 0 +LINE + 5 +600 + 8 +0 + 62 + 0 + 10 +4962.499981 + 20 +19447.449118 + 30 +0.0 + 11 +4949.999981 + 21 +19469.099754 + 31 +0.0 + 0 +LINE + 5 +601 + 8 +0 + 62 + 0 + 10 +4924.999981 + 20 +19512.401024 + 30 +0.0 + 11 +4920.0 + 21 +19521.061245 + 31 +0.0 + 0 +LINE + 5 +602 + 8 +0 + 62 + 0 + 10 +4962.499981 + 20 +19404.147848 + 30 +0.0 + 11 +4949.999981 + 21 +19425.798483 + 31 +0.0 + 0 +LINE + 5 +603 + 8 +0 + 62 + 0 + 10 +4924.999981 + 20 +19469.099754 + 30 +0.0 + 11 +4920.0 + 21 +19477.759975 + 31 +0.0 + 0 +LINE + 5 +604 + 8 +0 + 62 + 0 + 10 +4960.82369 + 20 +19363.75 + 30 +0.0 + 11 +4949.999981 + 21 +19382.497213 + 31 +0.0 + 0 +LINE + 5 +605 + 8 +0 + 62 + 0 + 10 +4924.999981 + 20 +19425.798483 + 30 +0.0 + 11 +4920.0 + 21 +19434.458705 + 31 +0.0 + 0 +LINE + 5 +606 + 8 +0 + 62 + 0 + 10 +4924.999981 + 20 +19382.497213 + 30 +0.0 + 11 +4920.0 + 21 +19391.157435 + 31 +0.0 + 0 +LINE + 5 +607 + 8 +0 + 62 + 0 + 10 +5072.388754 + 20 +22115.0 + 30 +0.0 + 11 +5062.499975 + 21 +22132.127867 + 31 +0.0 + 0 +LINE + 5 +608 + 8 +0 + 62 + 0 + 10 +5037.499975 + 20 +22175.429137 + 30 +0.0 + 11 +5026.200733 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +609 + 8 +0 + 62 + 0 + 10 +5074.999975 + 20 +22153.778502 + 30 +0.0 + 11 +5062.499975 + 21 +22175.429137 + 31 +0.0 + 0 +LINE + 5 +60A + 8 +0 + 62 + 0 + 10 +5112.499975 + 20 +22132.127867 + 30 +0.0 + 11 +5099.999975 + 21 +22153.778502 + 31 +0.0 + 0 +LINE + 5 +60B + 8 +0 + 62 + 0 + 10 +5147.388754 + 20 +22115.0 + 30 +0.0 + 11 +5137.499975 + 21 +22132.127867 + 31 +0.0 + 0 +LINE + 5 +60C + 8 +0 + 62 + 0 + 10 +5112.499975 + 20 +22175.429137 + 30 +0.0 + 11 +5101.200732 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +60D + 8 +0 + 62 + 0 + 10 +5149.999975 + 20 +22153.778502 + 30 +0.0 + 11 +5137.499975 + 21 +22175.429137 + 31 +0.0 + 0 +LINE + 5 +60E + 8 +0 + 62 + 0 + 10 +5187.499975 + 20 +22132.127867 + 30 +0.0 + 11 +5174.999975 + 21 +22153.778502 + 31 +0.0 + 0 +LINE + 5 +60F + 8 +0 + 62 + 0 + 10 +5222.388753 + 20 +22115.0 + 30 +0.0 + 11 +5212.499975 + 21 +22132.127867 + 31 +0.0 + 0 +LINE + 5 +610 + 8 +0 + 62 + 0 + 10 +5187.499975 + 20 +22175.429137 + 30 +0.0 + 11 +5176.200732 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +611 + 8 +0 + 62 + 0 + 10 +5224.999975 + 20 +22153.778502 + 30 +0.0 + 11 +5212.499975 + 21 +22175.429137 + 31 +0.0 + 0 +LINE + 5 +612 + 8 +0 + 62 + 0 + 10 +5262.499975 + 20 +22132.127867 + 30 +0.0 + 11 +5249.999975 + 21 +22153.778502 + 31 +0.0 + 0 +LINE + 5 +613 + 8 +0 + 62 + 0 + 10 +5297.388753 + 20 +22115.0 + 30 +0.0 + 11 +5287.499975 + 21 +22132.127867 + 31 +0.0 + 0 +LINE + 5 +614 + 8 +0 + 62 + 0 + 10 +5262.499975 + 20 +22175.429137 + 30 +0.0 + 11 +5251.200732 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +615 + 8 +0 + 62 + 0 + 10 +5299.999975 + 20 +22153.778502 + 30 +0.0 + 11 +5287.499975 + 21 +22175.429137 + 31 +0.0 + 0 +LINE + 5 +616 + 8 +0 + 62 + 0 + 10 +5337.499975 + 20 +22132.127867 + 30 +0.0 + 11 +5324.999975 + 21 +22153.778502 + 31 +0.0 + 0 +LINE + 5 +617 + 8 +0 + 62 + 0 + 10 +5372.388753 + 20 +22115.0 + 30 +0.0 + 11 +5362.499974 + 21 +22132.127867 + 31 +0.0 + 0 +LINE + 5 +618 + 8 +0 + 62 + 0 + 10 +5337.499974 + 20 +22175.429137 + 30 +0.0 + 11 +5326.200731 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +619 + 8 +0 + 62 + 0 + 10 +5374.999974 + 20 +22153.778502 + 30 +0.0 + 11 +5362.499974 + 21 +22175.429137 + 31 +0.0 + 0 +LINE + 5 +61A + 8 +0 + 62 + 0 + 10 +5412.499974 + 20 +22132.127866 + 30 +0.0 + 11 +5399.999974 + 21 +22153.778502 + 31 +0.0 + 0 +LINE + 5 +61B + 8 +0 + 62 + 0 + 10 +5447.388752 + 20 +22115.0 + 30 +0.0 + 11 +5437.499974 + 21 +22132.127866 + 31 +0.0 + 0 +LINE + 5 +61C + 8 +0 + 62 + 0 + 10 +5412.499974 + 20 +22175.429137 + 30 +0.0 + 11 +5401.200731 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +61D + 8 +0 + 62 + 0 + 10 +5449.999974 + 20 +22153.778501 + 30 +0.0 + 11 +5437.499974 + 21 +22175.429137 + 31 +0.0 + 0 +LINE + 5 +61E + 8 +0 + 62 + 0 + 10 +5487.499974 + 20 +22132.127866 + 30 +0.0 + 11 +5474.999974 + 21 +22153.778501 + 31 +0.0 + 0 +LINE + 5 +61F + 8 +0 + 62 + 0 + 10 +5522.388752 + 20 +22115.0 + 30 +0.0 + 11 +5512.499974 + 21 +22132.127866 + 31 +0.0 + 0 +LINE + 5 +620 + 8 +0 + 62 + 0 + 10 +5487.499974 + 20 +22175.429136 + 30 +0.0 + 11 +5476.200731 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +621 + 8 +0 + 62 + 0 + 10 +5524.999974 + 20 +22153.778501 + 30 +0.0 + 11 +5512.499974 + 21 +22175.429136 + 31 +0.0 + 0 +LINE + 5 +622 + 8 +0 + 62 + 0 + 10 +5562.499974 + 20 +22132.127866 + 30 +0.0 + 11 +5549.999974 + 21 +22153.778501 + 31 +0.0 + 0 +LINE + 5 +623 + 8 +0 + 62 + 0 + 10 +5597.388752 + 20 +22115.0 + 30 +0.0 + 11 +5587.499974 + 21 +22132.127866 + 31 +0.0 + 0 +LINE + 5 +624 + 8 +0 + 62 + 0 + 10 +5562.499974 + 20 +22175.429136 + 30 +0.0 + 11 +5551.20073 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +625 + 8 +0 + 62 + 0 + 10 +5599.999974 + 20 +22153.778501 + 30 +0.0 + 11 +5587.499974 + 21 +22175.429136 + 31 +0.0 + 0 +LINE + 5 +626 + 8 +0 + 62 + 0 + 10 +5637.499974 + 20 +22132.127866 + 30 +0.0 + 11 +5624.999974 + 21 +22153.778501 + 31 +0.0 + 0 +LINE + 5 +627 + 8 +0 + 62 + 0 + 10 +5672.388751 + 20 +22115.0 + 30 +0.0 + 11 +5662.499973 + 21 +22132.127866 + 31 +0.0 + 0 +LINE + 5 +628 + 8 +0 + 62 + 0 + 10 +5637.499973 + 20 +22175.429136 + 30 +0.0 + 11 +5626.20073 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +629 + 8 +0 + 62 + 0 + 10 +5674.999973 + 20 +22153.778501 + 30 +0.0 + 11 +5662.499973 + 21 +22175.429136 + 31 +0.0 + 0 +LINE + 5 +62A + 8 +0 + 62 + 0 + 10 +5712.499973 + 20 +22132.127866 + 30 +0.0 + 11 +5699.999973 + 21 +22153.778501 + 31 +0.0 + 0 +LINE + 5 +62B + 8 +0 + 62 + 0 + 10 +5747.388751 + 20 +22115.0 + 30 +0.0 + 11 +5737.499973 + 21 +22132.127866 + 31 +0.0 + 0 +LINE + 5 +62C + 8 +0 + 62 + 0 + 10 +5712.499973 + 20 +22175.429136 + 30 +0.0 + 11 +5701.20073 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +62D + 8 +0 + 62 + 0 + 10 +5749.999973 + 20 +22153.778501 + 30 +0.0 + 11 +5737.499973 + 21 +22175.429136 + 31 +0.0 + 0 +LINE + 5 +62E + 8 +0 + 62 + 0 + 10 +5787.499973 + 20 +22132.127866 + 30 +0.0 + 11 +5774.999973 + 21 +22153.778501 + 31 +0.0 + 0 +LINE + 5 +62F + 8 +0 + 62 + 0 + 10 +5822.388751 + 20 +22115.0 + 30 +0.0 + 11 +5812.499973 + 21 +22132.127866 + 31 +0.0 + 0 +LINE + 5 +630 + 8 +0 + 62 + 0 + 10 +5787.499973 + 20 +22175.429136 + 30 +0.0 + 11 +5776.200729 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +631 + 8 +0 + 62 + 0 + 10 +5824.999973 + 20 +22153.778501 + 30 +0.0 + 11 +5812.499973 + 21 +22175.429136 + 31 +0.0 + 0 +LINE + 5 +632 + 8 +0 + 62 + 0 + 10 +5862.499973 + 20 +22132.127866 + 30 +0.0 + 11 +5849.999973 + 21 +22153.778501 + 31 +0.0 + 0 +LINE + 5 +633 + 8 +0 + 62 + 0 + 10 +5897.38875 + 20 +22115.0 + 30 +0.0 + 11 +5887.499973 + 21 +22132.127866 + 31 +0.0 + 0 +LINE + 5 +634 + 8 +0 + 62 + 0 + 10 +5862.499973 + 20 +22175.429136 + 30 +0.0 + 11 +5851.200729 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +635 + 8 +0 + 62 + 0 + 10 +5899.999973 + 20 +22153.778501 + 30 +0.0 + 11 +5887.499973 + 21 +22175.429136 + 31 +0.0 + 0 +LINE + 5 +636 + 8 +0 + 62 + 0 + 10 +5937.499973 + 20 +22132.127865 + 30 +0.0 + 11 +5924.999973 + 21 +22153.778501 + 31 +0.0 + 0 +LINE + 5 +637 + 8 +0 + 62 + 0 + 10 +5972.38875 + 20 +22115.0 + 30 +0.0 + 11 +5962.499972 + 21 +22132.127865 + 31 +0.0 + 0 +LINE + 5 +638 + 8 +0 + 62 + 0 + 10 +5937.499972 + 20 +22175.429136 + 30 +0.0 + 11 +5926.200729 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +639 + 8 +0 + 62 + 0 + 10 +5974.999972 + 20 +22153.7785 + 30 +0.0 + 11 +5962.499972 + 21 +22175.429136 + 31 +0.0 + 0 +LINE + 5 +63A + 8 +0 + 62 + 0 + 10 +6012.499972 + 20 +22132.127865 + 30 +0.0 + 11 +5999.999972 + 21 +22153.7785 + 31 +0.0 + 0 +LINE + 5 +63B + 8 +0 + 62 + 0 + 10 +6047.38875 + 20 +22115.0 + 30 +0.0 + 11 +6037.499972 + 21 +22132.127865 + 31 +0.0 + 0 +LINE + 5 +63C + 8 +0 + 62 + 0 + 10 +6012.499972 + 20 +22175.429135 + 30 +0.0 + 11 +6001.200728 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +63D + 8 +0 + 62 + 0 + 10 +6049.999972 + 20 +22153.7785 + 30 +0.0 + 11 +6037.499972 + 21 +22175.429135 + 31 +0.0 + 0 +LINE + 5 +63E + 8 +0 + 62 + 0 + 10 +6087.499972 + 20 +22132.127865 + 30 +0.0 + 11 +6074.999972 + 21 +22153.7785 + 31 +0.0 + 0 +LINE + 5 +63F + 8 +0 + 62 + 0 + 10 +6122.38875 + 20 +22115.0 + 30 +0.0 + 11 +6112.499972 + 21 +22132.127865 + 31 +0.0 + 0 +LINE + 5 +640 + 8 +0 + 62 + 0 + 10 +6087.499972 + 20 +22175.429135 + 30 +0.0 + 11 +6076.200728 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +641 + 8 +0 + 62 + 0 + 10 +6124.999972 + 20 +22153.7785 + 30 +0.0 + 11 +6112.499972 + 21 +22175.429135 + 31 +0.0 + 0 +LINE + 5 +642 + 8 +0 + 62 + 0 + 10 +6162.499972 + 20 +22132.127865 + 30 +0.0 + 11 +6149.999972 + 21 +22153.7785 + 31 +0.0 + 0 +LINE + 5 +643 + 8 +0 + 62 + 0 + 10 +6197.388749 + 20 +22115.0 + 30 +0.0 + 11 +6187.499972 + 21 +22132.127865 + 31 +0.0 + 0 +LINE + 5 +644 + 8 +0 + 62 + 0 + 10 +6162.499972 + 20 +22175.429135 + 30 +0.0 + 11 +6151.200728 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +645 + 8 +0 + 62 + 0 + 10 +6199.999972 + 20 +22153.7785 + 30 +0.0 + 11 +6187.499972 + 21 +22175.429135 + 31 +0.0 + 0 +LINE + 5 +646 + 8 +0 + 62 + 0 + 10 +6237.499972 + 20 +22132.127865 + 30 +0.0 + 11 +6224.999972 + 21 +22153.7785 + 31 +0.0 + 0 +LINE + 5 +647 + 8 +0 + 62 + 0 + 10 +6272.388749 + 20 +22115.0 + 30 +0.0 + 11 +6262.499971 + 21 +22132.127865 + 31 +0.0 + 0 +LINE + 5 +648 + 8 +0 + 62 + 0 + 10 +6237.499971 + 20 +22175.429135 + 30 +0.0 + 11 +6226.200727 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +649 + 8 +0 + 62 + 0 + 10 +6274.999971 + 20 +22153.7785 + 30 +0.0 + 11 +6262.499971 + 21 +22175.429135 + 31 +0.0 + 0 +LINE + 5 +64A + 8 +0 + 62 + 0 + 10 +6312.499971 + 20 +22132.127865 + 30 +0.0 + 11 +6299.999971 + 21 +22153.7785 + 31 +0.0 + 0 +LINE + 5 +64B + 8 +0 + 62 + 0 + 10 +6347.388749 + 20 +22115.0 + 30 +0.0 + 11 +6337.499971 + 21 +22132.127865 + 31 +0.0 + 0 +LINE + 5 +64C + 8 +0 + 62 + 0 + 10 +6312.499971 + 20 +22175.429135 + 30 +0.0 + 11 +6301.200727 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +64D + 8 +0 + 62 + 0 + 10 +6349.999971 + 20 +22153.7785 + 30 +0.0 + 11 +6337.499971 + 21 +22175.429135 + 31 +0.0 + 0 +LINE + 5 +64E + 8 +0 + 62 + 0 + 10 +6387.499971 + 20 +22132.127865 + 30 +0.0 + 11 +6374.999971 + 21 +22153.7785 + 31 +0.0 + 0 +LINE + 5 +64F + 8 +0 + 62 + 0 + 10 +6422.388748 + 20 +22115.0 + 30 +0.0 + 11 +6412.499971 + 21 +22132.127865 + 31 +0.0 + 0 +LINE + 5 +650 + 8 +0 + 62 + 0 + 10 +6387.499971 + 20 +22175.429135 + 30 +0.0 + 11 +6376.200727 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +651 + 8 +0 + 62 + 0 + 10 +6424.999971 + 20 +22153.7785 + 30 +0.0 + 11 +6412.499971 + 21 +22175.429135 + 31 +0.0 + 0 +LINE + 5 +652 + 8 +0 + 62 + 0 + 10 +6462.499971 + 20 +22132.127864 + 30 +0.0 + 11 +6449.999971 + 21 +22153.7785 + 31 +0.0 + 0 +LINE + 5 +653 + 8 +0 + 62 + 0 + 10 +6497.388748 + 20 +22115.0 + 30 +0.0 + 11 +6487.499971 + 21 +22132.127864 + 31 +0.0 + 0 +LINE + 5 +654 + 8 +0 + 62 + 0 + 10 +6462.499971 + 20 +22175.429135 + 30 +0.0 + 11 +6451.200726 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +655 + 8 +0 + 62 + 0 + 10 +6499.999971 + 20 +22153.778499 + 30 +0.0 + 11 +6487.499971 + 21 +22175.429135 + 31 +0.0 + 0 +LINE + 5 +656 + 8 +0 + 62 + 0 + 10 +6537.499971 + 20 +22132.127864 + 30 +0.0 + 11 +6524.999971 + 21 +22153.778499 + 31 +0.0 + 0 +LINE + 5 +657 + 8 +0 + 62 + 0 + 10 +6572.388748 + 20 +22115.0 + 30 +0.0 + 11 +6562.499971 + 21 +22132.127864 + 31 +0.0 + 0 +LINE + 5 +658 + 8 +0 + 62 + 0 + 10 +6537.499971 + 20 +22175.429134 + 30 +0.0 + 11 +6526.200726 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +659 + 8 +0 + 62 + 0 + 10 +6574.99997 + 20 +22153.778499 + 30 +0.0 + 11 +6562.49997 + 21 +22175.429134 + 31 +0.0 + 0 +LINE + 5 +65A + 8 +0 + 62 + 0 + 10 +6612.49997 + 20 +22132.127864 + 30 +0.0 + 11 +6599.99997 + 21 +22153.778499 + 31 +0.0 + 0 +LINE + 5 +65B + 8 +0 + 62 + 0 + 10 +6647.388747 + 20 +22115.0 + 30 +0.0 + 11 +6637.49997 + 21 +22132.127864 + 31 +0.0 + 0 +LINE + 5 +65C + 8 +0 + 62 + 0 + 10 +6612.49997 + 20 +22175.429134 + 30 +0.0 + 11 +6601.200726 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +65D + 8 +0 + 62 + 0 + 10 +6649.99997 + 20 +22153.778499 + 30 +0.0 + 11 +6637.49997 + 21 +22175.429134 + 31 +0.0 + 0 +LINE + 5 +65E + 8 +0 + 62 + 0 + 10 +6687.49997 + 20 +22132.127864 + 30 +0.0 + 11 +6674.99997 + 21 +22153.778499 + 31 +0.0 + 0 +LINE + 5 +65F + 8 +0 + 62 + 0 + 10 +6722.388747 + 20 +22115.0 + 30 +0.0 + 11 +6712.49997 + 21 +22132.127864 + 31 +0.0 + 0 +LINE + 5 +660 + 8 +0 + 62 + 0 + 10 +6687.49997 + 20 +22175.429134 + 30 +0.0 + 11 +6676.200725 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +661 + 8 +0 + 62 + 0 + 10 +6724.99997 + 20 +22153.778499 + 30 +0.0 + 11 +6712.49997 + 21 +22175.429134 + 31 +0.0 + 0 +LINE + 5 +662 + 8 +0 + 62 + 0 + 10 +6751.25 + 20 +22151.613383 + 30 +0.0 + 11 +6749.99997 + 21 +22153.778499 + 31 +0.0 + 0 +LINE + 5 +663 + 8 +0 + 62 + 0 + 10 +6751.25 + 20 +22194.914653 + 30 +0.0 + 11 +6751.200725 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +664 + 8 +0 + 62 + 0 + 10 +6637.500019 + 20 +22132.12787 + 30 +0.0 + 11 +6650.000019 + 21 +22153.778505 + 31 +0.0 + 0 +LINE + 5 +665 + 8 +0 + 62 + 0 + 10 +6602.611239 + 20 +22115.0 + 30 +0.0 + 11 +6612.500019 + 21 +22132.12787 + 31 +0.0 + 0 +LINE + 5 +666 + 8 +0 + 62 + 0 + 10 +6637.500019 + 20 +22175.42914 + 30 +0.0 + 11 +6648.79926 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +667 + 8 +0 + 62 + 0 + 10 +4989.176311 + 20 +19363.75 + 30 +0.0 + 11 +5000.0 + 21 +19382.49718 + 31 +0.0 + 0 +LINE + 5 +668 + 8 +0 + 62 + 0 + 10 +6600.000019 + 20 +22153.778505 + 30 +0.0 + 11 +6612.500019 + 21 +22175.42914 + 31 +0.0 + 0 +LINE + 5 +669 + 8 +0 + 62 + 0 + 10 +4987.500019 + 20 +19404.147848 + 30 +0.0 + 11 +5000.0 + 21 +19425.79845 + 31 +0.0 + 0 +LINE + 5 +66A + 8 +0 + 62 + 0 + 10 +6562.500019 + 20 +22132.12787 + 30 +0.0 + 11 +6575.000019 + 21 +22153.778505 + 31 +0.0 + 0 +LINE + 5 +66B + 8 +0 + 62 + 0 + 10 +4950.000019 + 20 +19382.497213 + 30 +0.0 + 11 +4962.500019 + 21 +19404.147848 + 31 +0.0 + 0 +LINE + 5 +66C + 8 +0 + 62 + 0 + 10 +4987.500019 + 20 +19447.449118 + 30 +0.0 + 11 +5000.0 + 21 +19469.09972 + 31 +0.0 + 0 +LINE + 5 +66D + 8 +0 + 62 + 0 + 10 +6527.611239 + 20 +22115.0 + 30 +0.0 + 11 +6537.500019 + 21 +22132.12787 + 31 +0.0 + 0 +LINE + 5 +66E + 8 +0 + 62 + 0 + 10 +6562.500019 + 20 +22175.42914 + 30 +0.0 + 11 +6573.79926 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +66F + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +19373.836925 + 30 +0.0 + 11 +4925.000019 + 21 +19382.497213 + 31 +0.0 + 0 +LINE + 5 +670 + 8 +0 + 62 + 0 + 10 +4950.000019 + 20 +19425.798483 + 30 +0.0 + 11 +4962.500019 + 21 +19447.449118 + 31 +0.0 + 0 +LINE + 5 +671 + 8 +0 + 62 + 0 + 10 +4987.500019 + 20 +19490.750389 + 30 +0.0 + 11 +5000.0 + 21 +19512.40099 + 31 +0.0 + 0 +LINE + 5 +672 + 8 +0 + 62 + 0 + 10 +6525.000019 + 20 +22153.778505 + 30 +0.0 + 11 +6537.500019 + 21 +22175.42914 + 31 +0.0 + 0 +LINE + 5 +673 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +19417.138195 + 30 +0.0 + 11 +4925.00002 + 21 +19425.798483 + 31 +0.0 + 0 +LINE + 5 +674 + 8 +0 + 62 + 0 + 10 +4950.00002 + 20 +19469.099753 + 30 +0.0 + 11 +4962.50002 + 21 +19490.750388 + 31 +0.0 + 0 +LINE + 5 +675 + 8 +0 + 62 + 0 + 10 +4987.50002 + 20 +19534.051659 + 30 +0.0 + 11 +5000.0 + 21 +19555.70226 + 31 +0.0 + 0 +LINE + 5 +676 + 8 +0 + 62 + 0 + 10 +6487.50002 + 20 +22132.12787 + 30 +0.0 + 11 +6500.00002 + 21 +22153.778505 + 31 +0.0 + 0 +LINE + 5 +677 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +19460.439465 + 30 +0.0 + 11 +4925.00002 + 21 +19469.099753 + 31 +0.0 + 0 +LINE + 5 +678 + 8 +0 + 62 + 0 + 10 +4950.00002 + 20 +19512.401024 + 30 +0.0 + 11 +4962.50002 + 21 +19534.051659 + 31 +0.0 + 0 +LINE + 5 +679 + 8 +0 + 62 + 0 + 10 +4987.50002 + 20 +19577.352929 + 30 +0.0 + 11 +5000.0 + 21 +19599.00353 + 31 +0.0 + 0 +LINE + 5 +67A + 8 +0 + 62 + 0 + 10 +6452.611239 + 20 +22115.0 + 30 +0.0 + 11 +6462.50002 + 21 +22132.12787 + 31 +0.0 + 0 +LINE + 5 +67B + 8 +0 + 62 + 0 + 10 +6487.50002 + 20 +22175.42914 + 30 +0.0 + 11 +6498.799261 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +67C + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +19503.740735 + 30 +0.0 + 11 +4925.00002 + 21 +19512.401023 + 31 +0.0 + 0 +LINE + 5 +67D + 8 +0 + 62 + 0 + 10 +4950.00002 + 20 +19555.702294 + 30 +0.0 + 11 +4962.50002 + 21 +19577.352929 + 31 +0.0 + 0 +LINE + 5 +67E + 8 +0 + 62 + 0 + 10 +4987.50002 + 20 +19620.654199 + 30 +0.0 + 11 +5000.0 + 21 +19642.3048 + 31 +0.0 + 0 +LINE + 5 +67F + 8 +0 + 62 + 0 + 10 +6450.00002 + 20 +22153.778505 + 30 +0.0 + 11 +6462.50002 + 21 +22175.42914 + 31 +0.0 + 0 +LINE + 5 +680 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +19547.042005 + 30 +0.0 + 11 +4925.00002 + 21 +19555.702294 + 31 +0.0 + 0 +LINE + 5 +681 + 8 +0 + 62 + 0 + 10 +4950.00002 + 20 +19599.003564 + 30 +0.0 + 11 +4962.50002 + 21 +19620.654199 + 31 +0.0 + 0 +LINE + 5 +682 + 8 +0 + 62 + 0 + 10 +4987.50002 + 20 +19663.955469 + 30 +0.0 + 11 +5000.0 + 21 +19685.60607 + 31 +0.0 + 0 +LINE + 5 +683 + 8 +0 + 62 + 0 + 10 +6412.50002 + 20 +22132.12787 + 30 +0.0 + 11 +6425.00002 + 21 +22153.778505 + 31 +0.0 + 0 +LINE + 5 +684 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +19590.343275 + 30 +0.0 + 11 +4925.00002 + 21 +19599.003564 + 31 +0.0 + 0 +LINE + 5 +685 + 8 +0 + 62 + 0 + 10 +4950.00002 + 20 +19642.304834 + 30 +0.0 + 11 +4962.50002 + 21 +19663.955469 + 31 +0.0 + 0 +LINE + 5 +686 + 8 +0 + 62 + 0 + 10 +4987.50002 + 20 +19707.256739 + 30 +0.0 + 11 +5000.0 + 21 +19728.90734 + 31 +0.0 + 0 +LINE + 5 +687 + 8 +0 + 62 + 0 + 10 +6377.61124 + 20 +22115.0 + 30 +0.0 + 11 +6387.50002 + 21 +22132.12787 + 31 +0.0 + 0 +LINE + 5 +688 + 8 +0 + 62 + 0 + 10 +6412.50002 + 20 +22175.42914 + 30 +0.0 + 11 +6423.799261 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +689 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +19633.644545 + 30 +0.0 + 11 +4925.00002 + 21 +19642.304834 + 31 +0.0 + 0 +LINE + 5 +68A + 8 +0 + 62 + 0 + 10 +4950.00002 + 20 +19685.606104 + 30 +0.0 + 11 +4962.50002 + 21 +19707.256739 + 31 +0.0 + 0 +LINE + 5 +68B + 8 +0 + 62 + 0 + 10 +4987.50002 + 20 +19750.558009 + 30 +0.0 + 11 +5000.0 + 21 +19772.20861 + 31 +0.0 + 0 +LINE + 5 +68C + 8 +0 + 62 + 0 + 10 +6375.00002 + 20 +22153.778505 + 30 +0.0 + 11 +6387.50002 + 21 +22175.42914 + 31 +0.0 + 0 +LINE + 5 +68D + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +19676.945815 + 30 +0.0 + 11 +4925.00002 + 21 +19685.606104 + 31 +0.0 + 0 +LINE + 5 +68E + 8 +0 + 62 + 0 + 10 +4950.00002 + 20 +19728.907374 + 30 +0.0 + 11 +4962.50002 + 21 +19750.558009 + 31 +0.0 + 0 +LINE + 5 +68F + 8 +0 + 62 + 0 + 10 +4987.50002 + 20 +19793.85928 + 30 +0.0 + 11 +5000.0 + 21 +19815.50988 + 31 +0.0 + 0 +LINE + 5 +690 + 8 +0 + 62 + 0 + 10 +6337.50002 + 20 +22132.12787 + 30 +0.0 + 11 +6350.00002 + 21 +22153.778505 + 31 +0.0 + 0 +LINE + 5 +691 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +19720.247085 + 30 +0.0 + 11 +4925.00002 + 21 +19728.907374 + 31 +0.0 + 0 +LINE + 5 +692 + 8 +0 + 62 + 0 + 10 +4950.00002 + 20 +19772.208644 + 30 +0.0 + 11 +4962.50002 + 21 +19793.859279 + 31 +0.0 + 0 +LINE + 5 +693 + 8 +0 + 62 + 0 + 10 +4987.50002 + 20 +19837.16055 + 30 +0.0 + 11 +5000.0 + 21 +19858.81115 + 31 +0.0 + 0 +LINE + 5 +694 + 8 +0 + 62 + 0 + 10 +6302.61124 + 20 +22115.0 + 30 +0.0 + 11 +6312.50002 + 21 +22132.12787 + 31 +0.0 + 0 +LINE + 5 +695 + 8 +0 + 62 + 0 + 10 +6337.50002 + 20 +22175.42914 + 30 +0.0 + 11 +6348.799261 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +696 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +19763.548355 + 30 +0.0 + 11 +4925.00002 + 21 +19772.208644 + 31 +0.0 + 0 +LINE + 5 +697 + 8 +0 + 62 + 0 + 10 +4950.00002 + 20 +19815.509915 + 30 +0.0 + 11 +4962.50002 + 21 +19837.16055 + 31 +0.0 + 0 +LINE + 5 +698 + 8 +0 + 62 + 0 + 10 +4987.50002 + 20 +19880.46182 + 30 +0.0 + 11 +5000.0 + 21 +19902.11242 + 31 +0.0 + 0 +LINE + 5 +699 + 8 +0 + 62 + 0 + 10 +6300.00002 + 20 +22153.778505 + 30 +0.0 + 11 +6312.50002 + 21 +22175.42914 + 31 +0.0 + 0 +LINE + 5 +69A + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +19806.849625 + 30 +0.0 + 11 +4925.00002 + 21 +19815.509914 + 31 +0.0 + 0 +LINE + 5 +69B + 8 +0 + 62 + 0 + 10 +4950.00002 + 20 +19858.811185 + 30 +0.0 + 11 +4962.50002 + 21 +19880.46182 + 31 +0.0 + 0 +LINE + 5 +69C + 8 +0 + 62 + 0 + 10 +4987.50002 + 20 +19923.76309 + 30 +0.0 + 11 +5000.0 + 21 +19945.41369 + 31 +0.0 + 0 +LINE + 5 +69D + 8 +0 + 62 + 0 + 10 +6262.50002 + 20 +22132.12787 + 30 +0.0 + 11 +6275.00002 + 21 +22153.778505 + 31 +0.0 + 0 +LINE + 5 +69E + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +19850.150895 + 30 +0.0 + 11 +4925.00002 + 21 +19858.811185 + 31 +0.0 + 0 +LINE + 5 +69F + 8 +0 + 62 + 0 + 10 +4950.00002 + 20 +19902.112455 + 30 +0.0 + 11 +4962.50002 + 21 +19923.76309 + 31 +0.0 + 0 +LINE + 5 +6A0 + 8 +0 + 62 + 0 + 10 +4987.50002 + 20 +19967.06436 + 30 +0.0 + 11 +5000.0 + 21 +19988.71496 + 31 +0.0 + 0 +LINE + 5 +6A1 + 8 +0 + 62 + 0 + 10 +6227.61124 + 20 +22115.0 + 30 +0.0 + 11 +6237.50002 + 21 +22132.12787 + 31 +0.0 + 0 +LINE + 5 +6A2 + 8 +0 + 62 + 0 + 10 +6262.50002 + 20 +22175.42914 + 30 +0.0 + 11 +6273.799262 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +6A3 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +19893.452165 + 30 +0.0 + 11 +4925.00002 + 21 +19902.112455 + 31 +0.0 + 0 +LINE + 5 +6A4 + 8 +0 + 62 + 0 + 10 +4950.00002 + 20 +19945.413725 + 30 +0.0 + 11 +4962.50002 + 21 +19967.06436 + 31 +0.0 + 0 +LINE + 5 +6A5 + 8 +0 + 62 + 0 + 10 +4987.50002 + 20 +20010.36563 + 30 +0.0 + 11 +5000.0 + 21 +20032.01623 + 31 +0.0 + 0 +LINE + 5 +6A6 + 8 +0 + 62 + 0 + 10 +6225.00002 + 20 +22153.778505 + 30 +0.0 + 11 +6237.50002 + 21 +22175.42914 + 31 +0.0 + 0 +LINE + 5 +6A7 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +19936.753435 + 30 +0.0 + 11 +4925.00002 + 21 +19945.413725 + 31 +0.0 + 0 +LINE + 5 +6A8 + 8 +0 + 62 + 0 + 10 +4950.00002 + 20 +19988.714995 + 30 +0.0 + 11 +4962.50002 + 21 +20010.36563 + 31 +0.0 + 0 +LINE + 5 +6A9 + 8 +0 + 62 + 0 + 10 +4987.50002 + 20 +20053.6669 + 30 +0.0 + 11 +5000.0 + 21 +20075.3175 + 31 +0.0 + 0 +LINE + 5 +6AA + 8 +0 + 62 + 0 + 10 +6187.50002 + 20 +22132.127869 + 30 +0.0 + 11 +6200.00002 + 21 +22153.778505 + 31 +0.0 + 0 +LINE + 5 +6AB + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +19980.054705 + 30 +0.0 + 11 +4925.000021 + 21 +19988.714995 + 31 +0.0 + 0 +LINE + 5 +6AC + 8 +0 + 62 + 0 + 10 +4950.000021 + 20 +20032.016265 + 30 +0.0 + 11 +4962.500021 + 21 +20053.6669 + 31 +0.0 + 0 +LINE + 5 +6AD + 8 +0 + 62 + 0 + 10 +4987.500021 + 20 +20096.968171 + 30 +0.0 + 11 +5000.0 + 21 +20118.61877 + 31 +0.0 + 0 +LINE + 5 +6AE + 8 +0 + 62 + 0 + 10 +6152.611241 + 20 +22115.0 + 30 +0.0 + 11 +6162.500021 + 21 +22132.127869 + 31 +0.0 + 0 +LINE + 5 +6AF + 8 +0 + 62 + 0 + 10 +6187.500021 + 20 +22175.42914 + 30 +0.0 + 11 +6198.799262 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +6B0 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +20023.355975 + 30 +0.0 + 11 +4925.000021 + 21 +20032.016265 + 31 +0.0 + 0 +LINE + 5 +6B1 + 8 +0 + 62 + 0 + 10 +4950.000021 + 20 +20075.317535 + 30 +0.0 + 11 +4962.500021 + 21 +20096.96817 + 31 +0.0 + 0 +LINE + 5 +6B2 + 8 +0 + 62 + 0 + 10 +4987.500021 + 20 +20140.269441 + 30 +0.0 + 11 +5000.0 + 21 +20161.92004 + 31 +0.0 + 0 +LINE + 5 +6B3 + 8 +0 + 62 + 0 + 10 +6150.000021 + 20 +22153.778504 + 30 +0.0 + 11 +6162.500021 + 21 +22175.42914 + 31 +0.0 + 0 +LINE + 5 +6B4 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +20066.657245 + 30 +0.0 + 11 +4925.000021 + 21 +20075.317535 + 31 +0.0 + 0 +LINE + 5 +6B5 + 8 +0 + 62 + 0 + 10 +4950.000021 + 20 +20118.618806 + 30 +0.0 + 11 +4962.500021 + 21 +20140.269441 + 31 +0.0 + 0 +LINE + 5 +6B6 + 8 +0 + 62 + 0 + 10 +4987.500021 + 20 +20183.570711 + 30 +0.0 + 11 +5000.0 + 21 +20205.22131 + 31 +0.0 + 0 +LINE + 5 +6B7 + 8 +0 + 62 + 0 + 10 +6112.500021 + 20 +22132.127869 + 30 +0.0 + 11 +6125.000021 + 21 +22153.778504 + 31 +0.0 + 0 +LINE + 5 +6B8 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +20109.958515 + 30 +0.0 + 11 +4925.000021 + 21 +20118.618805 + 31 +0.0 + 0 +LINE + 5 +6B9 + 8 +0 + 62 + 0 + 10 +4950.000021 + 20 +20161.920076 + 30 +0.0 + 11 +4962.500021 + 21 +20183.570711 + 31 +0.0 + 0 +LINE + 5 +6BA + 8 +0 + 62 + 0 + 10 +4987.500021 + 20 +20226.871981 + 30 +0.0 + 11 +5000.0 + 21 +20248.52258 + 31 +0.0 + 0 +LINE + 5 +6BB + 8 +0 + 62 + 0 + 10 +6077.611241 + 20 +22115.0 + 30 +0.0 + 11 +6087.500021 + 21 +22132.127869 + 31 +0.0 + 0 +LINE + 5 +6BC + 8 +0 + 62 + 0 + 10 +6112.500021 + 20 +22175.429139 + 30 +0.0 + 11 +6123.799262 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +6BD + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +20153.259785 + 30 +0.0 + 11 +4925.000021 + 21 +20161.920076 + 31 +0.0 + 0 +LINE + 5 +6BE + 8 +0 + 62 + 0 + 10 +4950.000021 + 20 +20205.221346 + 30 +0.0 + 11 +4962.500021 + 21 +20226.871981 + 31 +0.0 + 0 +LINE + 5 +6BF + 8 +0 + 62 + 0 + 10 +4987.500021 + 20 +20270.173251 + 30 +0.0 + 11 +5000.0 + 21 +20291.82385 + 31 +0.0 + 0 +LINE + 5 +6C0 + 8 +0 + 62 + 0 + 10 +6075.000021 + 20 +22153.778504 + 30 +0.0 + 11 +6087.500021 + 21 +22175.429139 + 31 +0.0 + 0 +LINE + 5 +6C1 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +20196.561055 + 30 +0.0 + 11 +4925.000021 + 21 +20205.221346 + 31 +0.0 + 0 +LINE + 5 +6C2 + 8 +0 + 62 + 0 + 10 +4950.000021 + 20 +20248.522616 + 30 +0.0 + 11 +4962.500021 + 21 +20270.173251 + 31 +0.0 + 0 +LINE + 5 +6C3 + 8 +0 + 62 + 0 + 10 +4987.500021 + 20 +20313.474521 + 30 +0.0 + 11 +5000.0 + 21 +20335.12512 + 31 +0.0 + 0 +LINE + 5 +6C4 + 8 +0 + 62 + 0 + 10 +6037.500021 + 20 +22132.127869 + 30 +0.0 + 11 +6050.000021 + 21 +22153.778504 + 31 +0.0 + 0 +LINE + 5 +6C5 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +20239.862325 + 30 +0.0 + 11 +4925.000021 + 21 +20248.522616 + 31 +0.0 + 0 +LINE + 5 +6C6 + 8 +0 + 62 + 0 + 10 +4950.000021 + 20 +20291.823886 + 30 +0.0 + 11 +4962.500021 + 21 +20313.474521 + 31 +0.0 + 0 +LINE + 5 +6C7 + 8 +0 + 62 + 0 + 10 +4987.500021 + 20 +20356.775791 + 30 +0.0 + 11 +5000.0 + 21 +20378.42639 + 31 +0.0 + 0 +LINE + 5 +6C8 + 8 +0 + 62 + 0 + 10 +6002.611241 + 20 +22115.0 + 30 +0.0 + 11 +6012.500021 + 21 +22132.127869 + 31 +0.0 + 0 +LINE + 5 +6C9 + 8 +0 + 62 + 0 + 10 +6037.500021 + 20 +22175.429139 + 30 +0.0 + 11 +6048.799263 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +6CA + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +20283.163595 + 30 +0.0 + 11 +4925.000021 + 21 +20291.823886 + 31 +0.0 + 0 +LINE + 5 +6CB + 8 +0 + 62 + 0 + 10 +4950.000021 + 20 +20335.125156 + 30 +0.0 + 11 +4962.500021 + 21 +20356.775791 + 31 +0.0 + 0 +LINE + 5 +6CC + 8 +0 + 62 + 0 + 10 +4987.500021 + 20 +20400.077062 + 30 +0.0 + 11 +5000.0 + 21 +20421.72766 + 31 +0.0 + 0 +LINE + 5 +6CD + 8 +0 + 62 + 0 + 10 +6000.000021 + 20 +22153.778504 + 30 +0.0 + 11 +6012.500021 + 21 +22175.429139 + 31 +0.0 + 0 +LINE + 5 +6CE + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +20326.464865 + 30 +0.0 + 11 +4925.000021 + 21 +20335.125156 + 31 +0.0 + 0 +LINE + 5 +6CF + 8 +0 + 62 + 0 + 10 +4950.000021 + 20 +20378.426426 + 30 +0.0 + 11 +4962.500021 + 21 +20400.077061 + 31 +0.0 + 0 +LINE + 5 +6D0 + 8 +0 + 62 + 0 + 10 +4987.500021 + 20 +20443.378332 + 30 +0.0 + 11 +5000.0 + 21 +20465.02893 + 31 +0.0 + 0 +LINE + 5 +6D1 + 8 +0 + 62 + 0 + 10 +5962.500021 + 20 +22132.127869 + 30 +0.0 + 11 +5975.000021 + 21 +22153.778504 + 31 +0.0 + 0 +LINE + 5 +6D2 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +20369.766135 + 30 +0.0 + 11 +4925.000021 + 21 +20378.426426 + 31 +0.0 + 0 +LINE + 5 +6D3 + 8 +0 + 62 + 0 + 10 +4950.000021 + 20 +20421.727697 + 30 +0.0 + 11 +4962.500021 + 21 +20443.378332 + 31 +0.0 + 0 +LINE + 5 +6D4 + 8 +0 + 62 + 0 + 10 +4987.500021 + 20 +20486.679602 + 30 +0.0 + 11 +5000.0 + 21 +20508.3302 + 31 +0.0 + 0 +LINE + 5 +6D5 + 8 +0 + 62 + 0 + 10 +5927.611242 + 20 +22115.0 + 30 +0.0 + 11 +5937.500021 + 21 +22132.127869 + 31 +0.0 + 0 +LINE + 5 +6D6 + 8 +0 + 62 + 0 + 10 +5962.500021 + 20 +22175.429139 + 30 +0.0 + 11 +5973.799263 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +6D7 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +20413.067405 + 30 +0.0 + 11 +4925.000021 + 21 +20421.727696 + 31 +0.0 + 0 +LINE + 5 +6D8 + 8 +0 + 62 + 0 + 10 +4950.000021 + 20 +20465.028967 + 30 +0.0 + 11 +4962.500021 + 21 +20486.679602 + 31 +0.0 + 0 +LINE + 5 +6D9 + 8 +0 + 62 + 0 + 10 +4987.500021 + 20 +20529.980872 + 30 +0.0 + 11 +5000.0 + 21 +20551.63147 + 31 +0.0 + 0 +LINE + 5 +6DA + 8 +0 + 62 + 0 + 10 +5925.000021 + 20 +22153.778504 + 30 +0.0 + 11 +5937.500021 + 21 +22175.429139 + 31 +0.0 + 0 +LINE + 5 +6DB + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +20456.368675 + 30 +0.0 + 11 +4925.000021 + 21 +20465.028967 + 31 +0.0 + 0 +LINE + 5 +6DC + 8 +0 + 62 + 0 + 10 +4950.000021 + 20 +20508.330237 + 30 +0.0 + 11 +4962.500021 + 21 +20529.980872 + 31 +0.0 + 0 +LINE + 5 +6DD + 8 +0 + 62 + 0 + 10 +4987.500021 + 20 +20573.282142 + 30 +0.0 + 11 +5000.0 + 21 +20594.93274 + 31 +0.0 + 0 +LINE + 5 +6DE + 8 +0 + 62 + 0 + 10 +5887.500021 + 20 +22132.127869 + 30 +0.0 + 11 +5900.000021 + 21 +22153.778504 + 31 +0.0 + 0 +LINE + 5 +6DF + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +20499.669945 + 30 +0.0 + 11 +4925.000022 + 21 +20508.330237 + 31 +0.0 + 0 +LINE + 5 +6E0 + 8 +0 + 62 + 0 + 10 +4950.000022 + 20 +20551.631507 + 30 +0.0 + 11 +4962.500022 + 21 +20573.282142 + 31 +0.0 + 0 +LINE + 5 +6E1 + 8 +0 + 62 + 0 + 10 +4987.500022 + 20 +20616.583412 + 30 +0.0 + 11 +5000.0 + 21 +20638.23401 + 31 +0.0 + 0 +LINE + 5 +6E2 + 8 +0 + 62 + 0 + 10 +5852.611242 + 20 +22115.0 + 30 +0.0 + 11 +5862.500022 + 21 +22132.127869 + 31 +0.0 + 0 +LINE + 5 +6E3 + 8 +0 + 62 + 0 + 10 +5887.500022 + 20 +22175.429139 + 30 +0.0 + 11 +5898.799263 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +6E4 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +20542.971215 + 30 +0.0 + 11 +4925.000022 + 21 +20551.631507 + 31 +0.0 + 0 +LINE + 5 +6E5 + 8 +0 + 62 + 0 + 10 +4950.000022 + 20 +20594.932777 + 30 +0.0 + 11 +4962.500022 + 21 +20616.583412 + 31 +0.0 + 0 +LINE + 5 +6E6 + 8 +0 + 62 + 0 + 10 +4987.500022 + 20 +20659.884682 + 30 +0.0 + 11 +5000.0 + 21 +20681.53528 + 31 +0.0 + 0 +LINE + 5 +6E7 + 8 +0 + 62 + 0 + 10 +5850.000022 + 20 +22153.778504 + 30 +0.0 + 11 +5862.500022 + 21 +22175.429139 + 31 +0.0 + 0 +LINE + 5 +6E8 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +20586.272485 + 30 +0.0 + 11 +4925.000022 + 21 +20594.932777 + 31 +0.0 + 0 +LINE + 5 +6E9 + 8 +0 + 62 + 0 + 10 +4950.000022 + 20 +20638.234047 + 30 +0.0 + 11 +4962.500022 + 21 +20659.884682 + 31 +0.0 + 0 +LINE + 5 +6EA + 8 +0 + 62 + 0 + 10 +4987.500022 + 20 +20703.185953 + 30 +0.0 + 11 +5000.0 + 21 +20724.83655 + 31 +0.0 + 0 +LINE + 5 +6EB + 8 +0 + 62 + 0 + 10 +5812.500022 + 20 +22132.127869 + 30 +0.0 + 11 +5825.000022 + 21 +22153.778504 + 31 +0.0 + 0 +LINE + 5 +6EC + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +20629.573755 + 30 +0.0 + 11 +4925.000022 + 21 +20638.234047 + 31 +0.0 + 0 +LINE + 5 +6ED + 8 +0 + 62 + 0 + 10 +4950.000022 + 20 +20681.535317 + 30 +0.0 + 11 +4962.500022 + 21 +20703.185952 + 31 +0.0 + 0 +LINE + 5 +6EE + 8 +0 + 62 + 0 + 10 +4987.500022 + 20 +20746.487223 + 30 +0.0 + 11 +5000.0 + 21 +20768.13782 + 31 +0.0 + 0 +LINE + 5 +6EF + 8 +0 + 62 + 0 + 10 +5777.611242 + 20 +22115.0 + 30 +0.0 + 11 +5787.500022 + 21 +22132.127869 + 31 +0.0 + 0 +LINE + 5 +6F0 + 8 +0 + 62 + 0 + 10 +5812.500022 + 20 +22175.429139 + 30 +0.0 + 11 +5823.799264 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +6F1 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +20672.875025 + 30 +0.0 + 11 +4925.000022 + 21 +20681.535317 + 31 +0.0 + 0 +LINE + 5 +6F2 + 8 +0 + 62 + 0 + 10 +4950.000022 + 20 +20724.836588 + 30 +0.0 + 11 +4962.500022 + 21 +20746.487223 + 31 +0.0 + 0 +LINE + 5 +6F3 + 8 +0 + 62 + 0 + 10 +4987.500022 + 20 +20789.788493 + 30 +0.0 + 11 +5000.0 + 21 +20811.43909 + 31 +0.0 + 0 +LINE + 5 +6F4 + 8 +0 + 62 + 0 + 10 +5775.000022 + 20 +22153.778504 + 30 +0.0 + 11 +5787.500022 + 21 +22175.429139 + 31 +0.0 + 0 +LINE + 5 +6F5 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +20716.176295 + 30 +0.0 + 11 +4925.000022 + 21 +20724.836587 + 31 +0.0 + 0 +LINE + 5 +6F6 + 8 +0 + 62 + 0 + 10 +4950.000022 + 20 +20768.137858 + 30 +0.0 + 11 +4962.500022 + 21 +20789.788493 + 31 +0.0 + 0 +LINE + 5 +6F7 + 8 +0 + 62 + 0 + 10 +4987.500022 + 20 +20833.089763 + 30 +0.0 + 11 +5000.0 + 21 +20854.74036 + 31 +0.0 + 0 +LINE + 5 +6F8 + 8 +0 + 62 + 0 + 10 +5737.500022 + 20 +22132.127869 + 30 +0.0 + 11 +5750.000022 + 21 +22153.778504 + 31 +0.0 + 0 +LINE + 5 +6F9 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +20759.477565 + 30 +0.0 + 11 +4925.000022 + 21 +20768.137858 + 31 +0.0 + 0 +LINE + 5 +6FA + 8 +0 + 62 + 0 + 10 +4950.000022 + 20 +20811.439128 + 30 +0.0 + 11 +4962.500022 + 21 +20833.089763 + 31 +0.0 + 0 +LINE + 5 +6FB + 8 +0 + 62 + 0 + 10 +4987.500022 + 20 +20876.391033 + 30 +0.0 + 11 +5000.0 + 21 +20898.04163 + 31 +0.0 + 0 +LINE + 5 +6FC + 8 +0 + 62 + 0 + 10 +5702.611243 + 20 +22115.0 + 30 +0.0 + 11 +5712.500022 + 21 +22132.127869 + 31 +0.0 + 0 +LINE + 5 +6FD + 8 +0 + 62 + 0 + 10 +5737.500022 + 20 +22175.429139 + 30 +0.0 + 11 +5748.799264 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +6FE + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +20802.778835 + 30 +0.0 + 11 +4925.000022 + 21 +20811.439128 + 31 +0.0 + 0 +LINE + 5 +6FF + 8 +0 + 62 + 0 + 10 +4950.000022 + 20 +20854.740398 + 30 +0.0 + 11 +4962.500022 + 21 +20876.391033 + 31 +0.0 + 0 +LINE + 5 +700 + 8 +0 + 62 + 0 + 10 +4987.500022 + 20 +20919.692303 + 30 +0.0 + 11 +5000.0 + 21 +20941.3429 + 31 +0.0 + 0 +LINE + 5 +701 + 8 +0 + 62 + 0 + 10 +5700.000022 + 20 +22153.778504 + 30 +0.0 + 11 +5712.500022 + 21 +22175.429139 + 31 +0.0 + 0 +LINE + 5 +702 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +20846.080105 + 30 +0.0 + 11 +4925.000022 + 21 +20854.740398 + 31 +0.0 + 0 +LINE + 5 +703 + 8 +0 + 62 + 0 + 10 +4950.000022 + 20 +20898.041668 + 30 +0.0 + 11 +4962.500022 + 21 +20919.692303 + 31 +0.0 + 0 +LINE + 5 +704 + 8 +0 + 62 + 0 + 10 +4987.500022 + 20 +20962.993573 + 30 +0.0 + 11 +5000.0 + 21 +20984.64417 + 31 +0.0 + 0 +LINE + 5 +705 + 8 +0 + 62 + 0 + 10 +5662.500022 + 20 +22132.127868 + 30 +0.0 + 11 +5675.000022 + 21 +22153.778504 + 31 +0.0 + 0 +LINE + 5 +706 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +20889.381375 + 30 +0.0 + 11 +4925.000022 + 21 +20898.041668 + 31 +0.0 + 0 +LINE + 5 +707 + 8 +0 + 62 + 0 + 10 +4950.000022 + 20 +20941.342938 + 30 +0.0 + 11 +4962.500022 + 21 +20962.993573 + 31 +0.0 + 0 +LINE + 5 +708 + 8 +0 + 62 + 0 + 10 +4987.500022 + 20 +21006.294844 + 30 +0.0 + 11 +5000.0 + 21 +21027.94544 + 31 +0.0 + 0 +LINE + 5 +709 + 8 +0 + 62 + 0 + 10 +5627.611243 + 20 +22115.0 + 30 +0.0 + 11 +5637.500022 + 21 +22132.127868 + 31 +0.0 + 0 +LINE + 5 +70A + 8 +0 + 62 + 0 + 10 +5662.500022 + 20 +22175.429139 + 30 +0.0 + 11 +5673.799264 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +70B + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +20932.682645 + 30 +0.0 + 11 +4925.000022 + 21 +20941.342938 + 31 +0.0 + 0 +LINE + 5 +70C + 8 +0 + 62 + 0 + 10 +4950.000022 + 20 +20984.644208 + 30 +0.0 + 11 +4962.500022 + 21 +21006.294843 + 31 +0.0 + 0 +LINE + 5 +70D + 8 +0 + 62 + 0 + 10 +4987.500022 + 20 +21049.596114 + 30 +0.0 + 11 +5000.0 + 21 +21071.24671 + 31 +0.0 + 0 +LINE + 5 +70E + 8 +0 + 62 + 0 + 10 +5625.000022 + 20 +22153.778503 + 30 +0.0 + 11 +5637.500022 + 21 +22175.429139 + 31 +0.0 + 0 +LINE + 5 +70F + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +20975.983915 + 30 +0.0 + 11 +4925.000022 + 21 +20984.644208 + 31 +0.0 + 0 +LINE + 5 +710 + 8 +0 + 62 + 0 + 10 +4950.000022 + 20 +21027.945479 + 30 +0.0 + 11 +4962.500022 + 21 +21049.596114 + 31 +0.0 + 0 +LINE + 5 +711 + 8 +0 + 62 + 0 + 10 +4987.500022 + 20 +21092.897384 + 30 +0.0 + 11 +5000.0 + 21 +21114.54798 + 31 +0.0 + 0 +LINE + 5 +712 + 8 +0 + 62 + 0 + 10 +5587.500022 + 20 +22132.127868 + 30 +0.0 + 11 +5600.000022 + 21 +22153.778503 + 31 +0.0 + 0 +LINE + 5 +713 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +21019.285185 + 30 +0.0 + 11 +4925.000023 + 21 +21027.945478 + 31 +0.0 + 0 +LINE + 5 +714 + 8 +0 + 62 + 0 + 10 +4950.000023 + 20 +21071.246749 + 30 +0.0 + 11 +4962.500023 + 21 +21092.897384 + 31 +0.0 + 0 +LINE + 5 +715 + 8 +0 + 62 + 0 + 10 +4987.500023 + 20 +21136.198654 + 30 +0.0 + 11 +5000.0 + 21 +21157.84925 + 31 +0.0 + 0 +LINE + 5 +716 + 8 +0 + 62 + 0 + 10 +5552.611243 + 20 +22115.0 + 30 +0.0 + 11 +5562.500023 + 21 +22132.127868 + 31 +0.0 + 0 +LINE + 5 +717 + 8 +0 + 62 + 0 + 10 +5587.500023 + 20 +22175.429138 + 30 +0.0 + 11 +5598.799265 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +718 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +21062.586455 + 30 +0.0 + 11 +4925.000023 + 21 +21071.246749 + 31 +0.0 + 0 +LINE + 5 +719 + 8 +0 + 62 + 0 + 10 +4950.000023 + 20 +21114.548019 + 30 +0.0 + 11 +4962.500023 + 21 +21136.198654 + 31 +0.0 + 0 +LINE + 5 +71A + 8 +0 + 62 + 0 + 10 +4987.500023 + 20 +21179.499924 + 30 +0.0 + 11 +5000.0 + 21 +21201.15052 + 31 +0.0 + 0 +LINE + 5 +71B + 8 +0 + 62 + 0 + 10 +5550.000023 + 20 +22153.778503 + 30 +0.0 + 11 +5562.500023 + 21 +22175.429138 + 31 +0.0 + 0 +LINE + 5 +71C + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +21105.887725 + 30 +0.0 + 11 +4925.000023 + 21 +21114.548019 + 31 +0.0 + 0 +LINE + 5 +71D + 8 +0 + 62 + 0 + 10 +4950.000023 + 20 +21157.849289 + 30 +0.0 + 11 +4962.500023 + 21 +21179.499924 + 31 +0.0 + 0 +LINE + 5 +71E + 8 +0 + 62 + 0 + 10 +4987.500023 + 20 +21222.801194 + 30 +0.0 + 11 +5000.0 + 21 +21244.45179 + 31 +0.0 + 0 +LINE + 5 +71F + 8 +0 + 62 + 0 + 10 +5512.500023 + 20 +22132.127868 + 30 +0.0 + 11 +5525.000023 + 21 +22153.778503 + 31 +0.0 + 0 +LINE + 5 +720 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +21149.188995 + 30 +0.0 + 11 +4925.000023 + 21 +21157.849289 + 31 +0.0 + 0 +LINE + 5 +721 + 8 +0 + 62 + 0 + 10 +4950.000023 + 20 +21201.150559 + 30 +0.0 + 11 +4962.500023 + 21 +21222.801194 + 31 +0.0 + 0 +LINE + 5 +722 + 8 +0 + 62 + 0 + 10 +4987.500023 + 20 +21266.102464 + 30 +0.0 + 11 +5000.0 + 21 +21287.75306 + 31 +0.0 + 0 +LINE + 5 +723 + 8 +0 + 62 + 0 + 10 +5477.611243 + 20 +22115.0 + 30 +0.0 + 11 +5487.500023 + 21 +22132.127868 + 31 +0.0 + 0 +LINE + 5 +724 + 8 +0 + 62 + 0 + 10 +5512.500023 + 20 +22175.429138 + 30 +0.0 + 11 +5523.799265 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +725 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +21192.490265 + 30 +0.0 + 11 +4925.000023 + 21 +21201.150559 + 31 +0.0 + 0 +LINE + 5 +726 + 8 +0 + 62 + 0 + 10 +4950.000023 + 20 +21244.451829 + 30 +0.0 + 11 +4962.500023 + 21 +21266.102464 + 31 +0.0 + 0 +LINE + 5 +727 + 8 +0 + 62 + 0 + 10 +4987.500023 + 20 +21309.403735 + 30 +0.0 + 11 +5000.0 + 21 +21331.05433 + 31 +0.0 + 0 +LINE + 5 +728 + 8 +0 + 62 + 0 + 10 +5475.000023 + 20 +22153.778503 + 30 +0.0 + 11 +5487.500023 + 21 +22175.429138 + 31 +0.0 + 0 +LINE + 5 +729 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +21235.791535 + 30 +0.0 + 11 +4925.000023 + 21 +21244.451829 + 31 +0.0 + 0 +LINE + 5 +72A + 8 +0 + 62 + 0 + 10 +4950.000023 + 20 +21287.753099 + 30 +0.0 + 11 +4962.500023 + 21 +21309.403734 + 31 +0.0 + 0 +LINE + 5 +72B + 8 +0 + 62 + 0 + 10 +4987.500023 + 20 +21352.705005 + 30 +0.0 + 11 +5000.0 + 21 +21374.3556 + 31 +0.0 + 0 +LINE + 5 +72C + 8 +0 + 62 + 0 + 10 +5437.500023 + 20 +22132.127868 + 30 +0.0 + 11 +5450.000023 + 21 +22153.778503 + 31 +0.0 + 0 +LINE + 5 +72D + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +21279.092805 + 30 +0.0 + 11 +4925.000023 + 21 +21287.753099 + 31 +0.0 + 0 +LINE + 5 +72E + 8 +0 + 62 + 0 + 10 +4950.000023 + 20 +21331.05437 + 30 +0.0 + 11 +4962.500023 + 21 +21352.705005 + 31 +0.0 + 0 +LINE + 5 +72F + 8 +0 + 62 + 0 + 10 +4987.500023 + 20 +21396.006275 + 30 +0.0 + 11 +5000.0 + 21 +21417.65687 + 31 +0.0 + 0 +LINE + 5 +730 + 8 +0 + 62 + 0 + 10 +5402.611244 + 20 +22115.0 + 30 +0.0 + 11 +5412.500023 + 21 +22132.127868 + 31 +0.0 + 0 +LINE + 5 +731 + 8 +0 + 62 + 0 + 10 +5437.500023 + 20 +22175.429138 + 30 +0.0 + 11 +5448.799265 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +732 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +21322.394075 + 30 +0.0 + 11 +4925.000023 + 21 +21331.054369 + 31 +0.0 + 0 +LINE + 5 +733 + 8 +0 + 62 + 0 + 10 +4950.000023 + 20 +21374.35564 + 30 +0.0 + 11 +4962.500023 + 21 +21396.006275 + 31 +0.0 + 0 +LINE + 5 +734 + 8 +0 + 62 + 0 + 10 +4987.500023 + 20 +21439.307545 + 30 +0.0 + 11 +5000.0 + 21 +21460.95814 + 31 +0.0 + 0 +LINE + 5 +735 + 8 +0 + 62 + 0 + 10 +5400.000023 + 20 +22153.778503 + 30 +0.0 + 11 +5412.500023 + 21 +22175.429138 + 31 +0.0 + 0 +LINE + 5 +736 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +21365.695345 + 30 +0.0 + 11 +4925.000023 + 21 +21374.35564 + 31 +0.0 + 0 +LINE + 5 +737 + 8 +0 + 62 + 0 + 10 +4950.000023 + 20 +21417.65691 + 30 +0.0 + 11 +4962.500023 + 21 +21439.307545 + 31 +0.0 + 0 +LINE + 5 +738 + 8 +0 + 62 + 0 + 10 +4987.500023 + 20 +21482.608815 + 30 +0.0 + 11 +5000.0 + 21 +21504.25941 + 31 +0.0 + 0 +LINE + 5 +739 + 8 +0 + 62 + 0 + 10 +5362.500023 + 20 +22132.127868 + 30 +0.0 + 11 +5375.000023 + 21 +22153.778503 + 31 +0.0 + 0 +LINE + 5 +73A + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +21408.996615 + 30 +0.0 + 11 +4925.000023 + 21 +21417.65691 + 31 +0.0 + 0 +LINE + 5 +73B + 8 +0 + 62 + 0 + 10 +4950.000023 + 20 +21460.95818 + 30 +0.0 + 11 +4962.500023 + 21 +21482.608815 + 31 +0.0 + 0 +LINE + 5 +73C + 8 +0 + 62 + 0 + 10 +4987.500023 + 20 +21525.910085 + 30 +0.0 + 11 +5000.0 + 21 +21547.56068 + 31 +0.0 + 0 +LINE + 5 +73D + 8 +0 + 62 + 0 + 10 +5327.611244 + 20 +22115.0 + 30 +0.0 + 11 +5337.500023 + 21 +22132.127868 + 31 +0.0 + 0 +LINE + 5 +73E + 8 +0 + 62 + 0 + 10 +5362.500023 + 20 +22175.429138 + 30 +0.0 + 11 +5373.799266 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +73F + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +21452.297885 + 30 +0.0 + 11 +4925.000023 + 21 +21460.95818 + 31 +0.0 + 0 +LINE + 5 +740 + 8 +0 + 62 + 0 + 10 +4950.000023 + 20 +21504.25945 + 30 +0.0 + 11 +4962.500023 + 21 +21525.910085 + 31 +0.0 + 0 +LINE + 5 +741 + 8 +0 + 62 + 0 + 10 +4987.500023 + 20 +21569.211355 + 30 +0.0 + 11 +5000.0 + 21 +21590.86195 + 31 +0.0 + 0 +LINE + 5 +742 + 8 +0 + 62 + 0 + 10 +5325.000023 + 20 +22153.778503 + 30 +0.0 + 11 +5337.500023 + 21 +22175.429138 + 31 +0.0 + 0 +LINE + 5 +743 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +21495.599155 + 30 +0.0 + 11 +4925.000023 + 21 +21504.25945 + 31 +0.0 + 0 +LINE + 5 +744 + 8 +0 + 62 + 0 + 10 +4950.000023 + 20 +21547.56072 + 30 +0.0 + 11 +4962.500023 + 21 +21569.211355 + 31 +0.0 + 0 +LINE + 5 +745 + 8 +0 + 62 + 0 + 10 +4987.500023 + 20 +21612.512625 + 30 +0.0 + 11 +5000.0 + 21 +21634.16322 + 31 +0.0 + 0 +LINE + 5 +746 + 8 +0 + 62 + 0 + 10 +5287.500023 + 20 +22132.127868 + 30 +0.0 + 11 +5300.000023 + 21 +22153.778503 + 31 +0.0 + 0 +LINE + 5 +747 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +21538.900425 + 30 +0.0 + 11 +4925.000024 + 21 +21547.56072 + 31 +0.0 + 0 +LINE + 5 +748 + 8 +0 + 62 + 0 + 10 +4950.000024 + 20 +21590.86199 + 30 +0.0 + 11 +4962.500024 + 21 +21612.512625 + 31 +0.0 + 0 +LINE + 5 +749 + 8 +0 + 62 + 0 + 10 +4987.500024 + 20 +21655.813896 + 30 +0.0 + 11 +5000.0 + 21 +21677.46449 + 31 +0.0 + 0 +LINE + 5 +74A + 8 +0 + 62 + 0 + 10 +5252.611244 + 20 +22115.0 + 30 +0.0 + 11 +5262.500024 + 21 +22132.127868 + 31 +0.0 + 0 +LINE + 5 +74B + 8 +0 + 62 + 0 + 10 +5287.500024 + 20 +22175.429138 + 30 +0.0 + 11 +5298.799266 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +74C + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +21582.201695 + 30 +0.0 + 11 +4925.000024 + 21 +21590.86199 + 31 +0.0 + 0 +LINE + 5 +74D + 8 +0 + 62 + 0 + 10 +4950.000024 + 20 +21634.16326 + 30 +0.0 + 11 +4962.500024 + 21 +21655.813896 + 31 +0.0 + 0 +LINE + 5 +74E + 8 +0 + 62 + 0 + 10 +4987.500024 + 20 +21699.115166 + 30 +0.0 + 11 +5000.0 + 21 +21720.76576 + 31 +0.0 + 0 +LINE + 5 +74F + 8 +0 + 62 + 0 + 10 +5250.000024 + 20 +22153.778503 + 30 +0.0 + 11 +5262.500024 + 21 +22175.429138 + 31 +0.0 + 0 +LINE + 5 +750 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +21625.502965 + 30 +0.0 + 11 +4925.000024 + 21 +21634.16326 + 31 +0.0 + 0 +LINE + 5 +751 + 8 +0 + 62 + 0 + 10 +4950.000024 + 20 +21677.464531 + 30 +0.0 + 11 +4962.500024 + 21 +21699.115166 + 31 +0.0 + 0 +LINE + 5 +752 + 8 +0 + 62 + 0 + 10 +4987.500024 + 20 +21742.416436 + 30 +0.0 + 11 +5000.0 + 21 +21764.06703 + 31 +0.0 + 0 +LINE + 5 +753 + 8 +0 + 62 + 0 + 10 +5212.500024 + 20 +22132.127868 + 30 +0.0 + 11 +5225.000024 + 21 +22153.778503 + 31 +0.0 + 0 +LINE + 5 +754 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +21668.804235 + 30 +0.0 + 11 +4925.000024 + 21 +21677.464531 + 31 +0.0 + 0 +LINE + 5 +755 + 8 +0 + 62 + 0 + 10 +4950.000024 + 20 +21720.765801 + 30 +0.0 + 11 +4962.500024 + 21 +21742.416436 + 31 +0.0 + 0 +LINE + 5 +756 + 8 +0 + 62 + 0 + 10 +4987.500024 + 20 +21785.717706 + 30 +0.0 + 11 +5000.0 + 21 +21807.3683 + 31 +0.0 + 0 +LINE + 5 +757 + 8 +0 + 62 + 0 + 10 +5177.611245 + 20 +22115.0 + 30 +0.0 + 11 +5187.500024 + 21 +22132.127868 + 31 +0.0 + 0 +LINE + 5 +758 + 8 +0 + 62 + 0 + 10 +5212.500024 + 20 +22175.429138 + 30 +0.0 + 11 +5223.799266 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +759 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +21712.105505 + 30 +0.0 + 11 +4925.000024 + 21 +21720.765801 + 31 +0.0 + 0 +LINE + 5 +75A + 8 +0 + 62 + 0 + 10 +4950.000024 + 20 +21764.067071 + 30 +0.0 + 11 +4962.500024 + 21 +21785.717706 + 31 +0.0 + 0 +LINE + 5 +75B + 8 +0 + 62 + 0 + 10 +4987.500024 + 20 +21829.018976 + 30 +0.0 + 11 +5000.0 + 21 +21850.66957 + 31 +0.0 + 0 +LINE + 5 +75C + 8 +0 + 62 + 0 + 10 +5175.000024 + 20 +22153.778503 + 30 +0.0 + 11 +5187.500024 + 21 +22175.429138 + 31 +0.0 + 0 +LINE + 5 +75D + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +21755.406775 + 30 +0.0 + 11 +4925.000024 + 21 +21764.067071 + 31 +0.0 + 0 +LINE + 5 +75E + 8 +0 + 62 + 0 + 10 +4950.000024 + 20 +21807.368341 + 30 +0.0 + 11 +4962.500024 + 21 +21829.018976 + 31 +0.0 + 0 +LINE + 5 +75F + 8 +0 + 62 + 0 + 10 +4987.500024 + 20 +21872.320246 + 30 +0.0 + 11 +5000.0 + 21 +21893.97084 + 31 +0.0 + 0 +LINE + 5 +760 + 8 +0 + 62 + 0 + 10 +5137.500024 + 20 +22132.127867 + 30 +0.0 + 11 +5150.000024 + 21 +22153.778503 + 31 +0.0 + 0 +LINE + 5 +761 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +21798.708045 + 30 +0.0 + 11 +4925.000024 + 21 +21807.368341 + 31 +0.0 + 0 +LINE + 5 +762 + 8 +0 + 62 + 0 + 10 +4950.000024 + 20 +21850.669611 + 30 +0.0 + 11 +4962.500024 + 21 +21872.320246 + 31 +0.0 + 0 +LINE + 5 +763 + 8 +0 + 62 + 0 + 10 +4987.500024 + 20 +21915.621516 + 30 +0.0 + 11 +5000.0 + 21 +21937.27211 + 31 +0.0 + 0 +LINE + 5 +764 + 8 +0 + 62 + 0 + 10 +5102.611245 + 20 +22115.0 + 30 +0.0 + 11 +5112.500024 + 21 +22132.127867 + 31 +0.0 + 0 +LINE + 5 +765 + 8 +0 + 62 + 0 + 10 +5137.500024 + 20 +22175.429138 + 30 +0.0 + 11 +5148.799267 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +766 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +21842.009315 + 30 +0.0 + 11 +4925.000024 + 21 +21850.669611 + 31 +0.0 + 0 +LINE + 5 +767 + 8 +0 + 62 + 0 + 10 +4950.000024 + 20 +21893.970881 + 30 +0.0 + 11 +4962.500024 + 21 +21915.621516 + 31 +0.0 + 0 +LINE + 5 +768 + 8 +0 + 62 + 0 + 10 +4987.500024 + 20 +21958.922787 + 30 +0.0 + 11 +5000.0 + 21 +21980.57338 + 31 +0.0 + 0 +LINE + 5 +769 + 8 +0 + 62 + 0 + 10 +5100.000024 + 20 +22153.778502 + 30 +0.0 + 11 +5112.500024 + 21 +22175.429138 + 31 +0.0 + 0 +LINE + 5 +76A + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +21885.310585 + 30 +0.0 + 11 +4925.000024 + 21 +21893.970881 + 31 +0.0 + 0 +LINE + 5 +76B + 8 +0 + 62 + 0 + 10 +4950.000024 + 20 +21937.272151 + 30 +0.0 + 11 +4962.500024 + 21 +21958.922787 + 31 +0.0 + 0 +LINE + 5 +76C + 8 +0 + 62 + 0 + 10 +4987.500024 + 20 +22002.224057 + 30 +0.0 + 11 +5000.0 + 21 +22023.87465 + 31 +0.0 + 0 +LINE + 5 +76D + 8 +0 + 62 + 0 + 10 +5062.500024 + 20 +22132.127867 + 30 +0.0 + 11 +5075.000024 + 21 +22153.778502 + 31 +0.0 + 0 +LINE + 5 +76E + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +21928.611855 + 30 +0.0 + 11 +4925.000024 + 21 +21937.272151 + 31 +0.0 + 0 +LINE + 5 +76F + 8 +0 + 62 + 0 + 10 +4950.000024 + 20 +21980.573422 + 30 +0.0 + 11 +4962.500024 + 21 +22002.224057 + 31 +0.0 + 0 +LINE + 5 +770 + 8 +0 + 62 + 0 + 10 +4987.500024 + 20 +22045.525327 + 30 +0.0 + 11 +5000.0 + 21 +22067.17592 + 31 +0.0 + 0 +LINE + 5 +771 + 8 +0 + 62 + 0 + 10 +5027.611245 + 20 +22115.0 + 30 +0.0 + 11 +5037.500024 + 21 +22132.127867 + 31 +0.0 + 0 +LINE + 5 +772 + 8 +0 + 62 + 0 + 10 +5062.500024 + 20 +22175.429137 + 30 +0.0 + 11 +5073.799267 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +773 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +21971.913125 + 30 +0.0 + 11 +4925.000024 + 21 +21980.573422 + 31 +0.0 + 0 +LINE + 5 +774 + 8 +0 + 62 + 0 + 10 +4950.000024 + 20 +22023.874692 + 30 +0.0 + 11 +4962.500024 + 21 +22045.525327 + 31 +0.0 + 0 +LINE + 5 +775 + 8 +0 + 62 + 0 + 10 +4987.500024 + 20 +22088.826597 + 30 +0.0 + 11 +5000.0 + 21 +22110.47719 + 31 +0.0 + 0 +LINE + 5 +776 + 8 +0 + 62 + 0 + 10 +5025.000024 + 20 +22153.778502 + 30 +0.0 + 11 +5037.500024 + 21 +22175.429137 + 31 +0.0 + 0 +LINE + 5 +777 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +22015.214395 + 30 +0.0 + 11 +4925.000024 + 21 +22023.874692 + 31 +0.0 + 0 +LINE + 5 +778 + 8 +0 + 62 + 0 + 10 +4950.000024 + 20 +22067.175962 + 30 +0.0 + 11 +4962.500024 + 21 +22088.826597 + 31 +0.0 + 0 +LINE + 5 +779 + 8 +0 + 62 + 0 + 10 +4987.500024 + 20 +22132.127867 + 30 +0.0 + 11 +5000.000024 + 21 +22153.778502 + 31 +0.0 + 0 +LINE + 5 +77A + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +22058.515665 + 30 +0.0 + 11 +4925.000024 + 21 +22067.175962 + 31 +0.0 + 0 +LINE + 5 +77B + 8 +0 + 62 + 0 + 10 +4950.000024 + 20 +22110.477232 + 30 +0.0 + 11 +4962.500024 + 21 +22132.127867 + 31 +0.0 + 0 +LINE + 5 +77C + 8 +0 + 62 + 0 + 10 +4987.500024 + 20 +22175.429137 + 30 +0.0 + 11 +4998.799267 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +77D + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +22101.816935 + 30 +0.0 + 11 +4925.000025 + 21 +22110.477232 + 31 +0.0 + 0 +LINE + 5 +77E + 8 +0 + 62 + 0 + 10 +4950.000025 + 20 +22153.778502 + 30 +0.0 + 11 +4962.500025 + 21 +22175.429137 + 31 +0.0 + 0 +LINE + 5 +77F + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +22145.118205 + 30 +0.0 + 11 +4925.000025 + 21 +22153.778502 + 31 +0.0 + 0 +LINE + 5 +780 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +22188.419475 + 30 +0.0 + 11 +4923.799268 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +781 + 8 +0 + 62 + 0 + 10 +6675.000019 + 20 +22153.778505 + 30 +0.0 + 11 +6687.500019 + 21 +22175.429141 + 31 +0.0 + 0 +LINE + 5 +782 + 8 +0 + 62 + 0 + 10 +6677.611238 + 20 +22115.0 + 30 +0.0 + 11 +6687.500019 + 21 +22132.12787 + 31 +0.0 + 0 +LINE + 5 +783 + 8 +0 + 62 + 0 + 10 +6712.500019 + 20 +22175.429141 + 30 +0.0 + 11 +6723.79926 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +784 + 8 +0 + 62 + 0 + 10 +6712.500019 + 20 +22132.12787 + 30 +0.0 + 11 +6725.000019 + 21 +22153.778506 + 31 +0.0 + 0 +LINE + 5 +785 + 8 +0 + 62 + 0 + 10 +6750.000019 + 20 +22153.778506 + 30 +0.0 + 11 +6751.25 + 21 +22155.943537 + 31 +0.0 + 0 +ENDBLK + 5 +786 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X40 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X40 + 1 + + 0 +LINE + 5 +788 + 8 +0 + 62 + 0 + 10 +8525.0 + 20 +22153.77846 + 30 +0.0 + 11 +8550.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +789 + 8 +0 + 62 + 0 + 10 +8600.0 + 20 +22153.77846 + 30 +0.0 + 11 +8625.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +78A + 8 +0 + 62 + 0 + 10 +8675.0 + 20 +22153.77846 + 30 +0.0 + 11 +8700.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +78B + 8 +0 + 62 + 0 + 10 +8750.0 + 20 +22153.77846 + 30 +0.0 + 11 +8775.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +78C + 8 +0 + 62 + 0 + 10 +8825.0 + 20 +22153.77846 + 30 +0.0 + 11 +8850.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +78D + 8 +0 + 62 + 0 + 10 +8900.0 + 20 +22153.77846 + 30 +0.0 + 11 +8925.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +78E + 8 +0 + 62 + 0 + 10 +8975.0 + 20 +22153.77846 + 30 +0.0 + 11 +9000.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +78F + 8 +0 + 62 + 0 + 10 +9050.0 + 20 +22153.77846 + 30 +0.0 + 11 +9075.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +790 + 8 +0 + 62 + 0 + 10 +9125.0 + 20 +22153.77846 + 30 +0.0 + 11 +9150.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +791 + 8 +0 + 62 + 0 + 10 +9200.0 + 20 +22153.77846 + 30 +0.0 + 11 +9225.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +792 + 8 +0 + 62 + 0 + 10 +9275.0 + 20 +22153.77846 + 30 +0.0 + 11 +9300.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +793 + 8 +0 + 62 + 0 + 10 +9350.0 + 20 +22153.77846 + 30 +0.0 + 11 +9375.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +794 + 8 +0 + 62 + 0 + 10 +9425.0 + 20 +22153.77846 + 30 +0.0 + 11 +9450.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +795 + 8 +0 + 62 + 0 + 10 +9500.0 + 20 +22153.77846 + 30 +0.0 + 11 +9525.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +796 + 8 +0 + 62 + 0 + 10 +9575.0 + 20 +22153.77846 + 30 +0.0 + 11 +9600.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +797 + 8 +0 + 62 + 0 + 10 +9650.0 + 20 +22153.77846 + 30 +0.0 + 11 +9675.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +798 + 8 +0 + 62 + 0 + 10 +9725.0 + 20 +22153.77846 + 30 +0.0 + 11 +9750.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +799 + 8 +0 + 62 + 0 + 10 +9800.0 + 20 +22153.77846 + 30 +0.0 + 11 +9825.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +79A + 8 +0 + 62 + 0 + 10 +9875.0 + 20 +22153.77846 + 30 +0.0 + 11 +9900.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +79B + 8 +0 + 62 + 0 + 10 +9950.0 + 20 +22153.77846 + 30 +0.0 + 11 +9975.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +79C + 8 +0 + 62 + 0 + 10 +10025.0 + 20 +22153.77846 + 30 +0.0 + 11 +10050.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +79D + 8 +0 + 62 + 0 + 10 +10100.0 + 20 +22153.77846 + 30 +0.0 + 11 +10125.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +79E + 8 +0 + 62 + 0 + 10 +10175.0 + 20 +22153.77846 + 30 +0.0 + 11 +10200.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +79F + 8 +0 + 62 + 0 + 10 +10250.0 + 20 +22153.77846 + 30 +0.0 + 11 +10251.25 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +7A0 + 8 +0 + 62 + 0 + 10 +8488.75 + 20 +22175.429095 + 30 +0.0 + 11 +8512.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +7A1 + 8 +0 + 62 + 0 + 10 +8562.5 + 20 +22175.429095 + 30 +0.0 + 11 +8587.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +7A2 + 8 +0 + 62 + 0 + 10 +8637.5 + 20 +22175.429095 + 30 +0.0 + 11 +8662.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +7A3 + 8 +0 + 62 + 0 + 10 +8712.5 + 20 +22175.429095 + 30 +0.0 + 11 +8737.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +7A4 + 8 +0 + 62 + 0 + 10 +8787.5 + 20 +22175.429095 + 30 +0.0 + 11 +8812.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +7A5 + 8 +0 + 62 + 0 + 10 +8862.5 + 20 +22175.429095 + 30 +0.0 + 11 +8887.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +7A6 + 8 +0 + 62 + 0 + 10 +8937.5 + 20 +22175.429095 + 30 +0.0 + 11 +8962.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +7A7 + 8 +0 + 62 + 0 + 10 +9012.5 + 20 +22175.429095 + 30 +0.0 + 11 +9037.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +7A8 + 8 +0 + 62 + 0 + 10 +9087.5 + 20 +22175.429095 + 30 +0.0 + 11 +9112.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +7A9 + 8 +0 + 62 + 0 + 10 +9162.5 + 20 +22175.429095 + 30 +0.0 + 11 +9187.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +7AA + 8 +0 + 62 + 0 + 10 +9237.5 + 20 +22175.429095 + 30 +0.0 + 11 +9262.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +7AB + 8 +0 + 62 + 0 + 10 +9312.5 + 20 +22175.429095 + 30 +0.0 + 11 +9337.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +7AC + 8 +0 + 62 + 0 + 10 +9387.5 + 20 +22175.429095 + 30 +0.0 + 11 +9412.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +7AD + 8 +0 + 62 + 0 + 10 +9462.5 + 20 +22175.429095 + 30 +0.0 + 11 +9487.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +7AE + 8 +0 + 62 + 0 + 10 +9537.5 + 20 +22175.429095 + 30 +0.0 + 11 +9562.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +7AF + 8 +0 + 62 + 0 + 10 +9612.5 + 20 +22175.429095 + 30 +0.0 + 11 +9637.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +7B0 + 8 +0 + 62 + 0 + 10 +9687.5 + 20 +22175.429095 + 30 +0.0 + 11 +9712.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +7B1 + 8 +0 + 62 + 0 + 10 +9762.5 + 20 +22175.429095 + 30 +0.0 + 11 +9787.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +7B2 + 8 +0 + 62 + 0 + 10 +9837.5 + 20 +22175.429095 + 30 +0.0 + 11 +9862.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +7B3 + 8 +0 + 62 + 0 + 10 +9912.5 + 20 +22175.429095 + 30 +0.0 + 11 +9937.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +7B4 + 8 +0 + 62 + 0 + 10 +9987.5 + 20 +22175.429095 + 30 +0.0 + 11 +10012.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +7B5 + 8 +0 + 62 + 0 + 10 +10062.5 + 20 +22175.429095 + 30 +0.0 + 11 +10087.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +7B6 + 8 +0 + 62 + 0 + 10 +10137.5 + 20 +22175.429095 + 30 +0.0 + 11 +10162.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +7B7 + 8 +0 + 62 + 0 + 10 +10212.5 + 20 +22175.429095 + 30 +0.0 + 11 +10237.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +7B8 + 8 +0 + 62 + 0 + 10 +8488.75 + 20 +22132.127825 + 30 +0.0 + 11 +8512.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +7B9 + 8 +0 + 62 + 0 + 10 +8562.5 + 20 +22132.127825 + 30 +0.0 + 11 +8587.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +7BA + 8 +0 + 62 + 0 + 10 +8637.5 + 20 +22132.127825 + 30 +0.0 + 11 +8662.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +7BB + 8 +0 + 62 + 0 + 10 +8712.5 + 20 +22132.127825 + 30 +0.0 + 11 +8737.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +7BC + 8 +0 + 62 + 0 + 10 +8787.5 + 20 +22132.127825 + 30 +0.0 + 11 +8812.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +7BD + 8 +0 + 62 + 0 + 10 +8862.5 + 20 +22132.127825 + 30 +0.0 + 11 +8887.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +7BE + 8 +0 + 62 + 0 + 10 +8937.5 + 20 +22132.127825 + 30 +0.0 + 11 +8962.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +7BF + 8 +0 + 62 + 0 + 10 +9012.5 + 20 +22132.127825 + 30 +0.0 + 11 +9037.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +7C0 + 8 +0 + 62 + 0 + 10 +9087.5 + 20 +22132.127825 + 30 +0.0 + 11 +9112.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +7C1 + 8 +0 + 62 + 0 + 10 +9162.5 + 20 +22132.127825 + 30 +0.0 + 11 +9187.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +7C2 + 8 +0 + 62 + 0 + 10 +9237.5 + 20 +22132.127825 + 30 +0.0 + 11 +9262.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +7C3 + 8 +0 + 62 + 0 + 10 +9312.5 + 20 +22132.127825 + 30 +0.0 + 11 +9337.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +7C4 + 8 +0 + 62 + 0 + 10 +9387.5 + 20 +22132.127825 + 30 +0.0 + 11 +9412.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +7C5 + 8 +0 + 62 + 0 + 10 +9462.5 + 20 +22132.127825 + 30 +0.0 + 11 +9487.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +7C6 + 8 +0 + 62 + 0 + 10 +9537.5 + 20 +22132.127825 + 30 +0.0 + 11 +9562.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +7C7 + 8 +0 + 62 + 0 + 10 +9612.5 + 20 +22132.127825 + 30 +0.0 + 11 +9637.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +7C8 + 8 +0 + 62 + 0 + 10 +9687.5 + 20 +22132.127825 + 30 +0.0 + 11 +9712.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +7C9 + 8 +0 + 62 + 0 + 10 +9762.5 + 20 +22132.127825 + 30 +0.0 + 11 +9787.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +7CA + 8 +0 + 62 + 0 + 10 +9837.5 + 20 +22132.127825 + 30 +0.0 + 11 +9862.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +7CB + 8 +0 + 62 + 0 + 10 +9912.5 + 20 +22132.127825 + 30 +0.0 + 11 +9937.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +7CC + 8 +0 + 62 + 0 + 10 +9987.5 + 20 +22132.127825 + 30 +0.0 + 11 +10012.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +7CD + 8 +0 + 62 + 0 + 10 +10062.5 + 20 +22132.127825 + 30 +0.0 + 11 +10087.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +7CE + 8 +0 + 62 + 0 + 10 +10137.5 + 20 +22132.127825 + 30 +0.0 + 11 +10162.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +7CF + 8 +0 + 62 + 0 + 10 +10212.5 + 20 +22132.127825 + 30 +0.0 + 11 +10237.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +7D0 + 8 +0 + 62 + 0 + 10 +9349.999961 + 20 +22153.778494 + 30 +0.0 + 11 +9337.499961 + 21 +22175.429129 + 31 +0.0 + 0 +LINE + 5 +7D1 + 8 +0 + 62 + 0 + 10 +9347.388735 + 20 +22115.0 + 30 +0.0 + 11 +9337.499961 + 21 +22132.127859 + 31 +0.0 + 0 +LINE + 5 +7D2 + 8 +0 + 62 + 0 + 10 +9312.499961 + 20 +22175.429129 + 30 +0.0 + 11 +9301.200714 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +7D3 + 8 +0 + 62 + 0 + 10 +9312.499961 + 20 +22132.127859 + 30 +0.0 + 11 +9299.999961 + 21 +22153.778494 + 31 +0.0 + 0 +LINE + 5 +7D4 + 8 +0 + 62 + 0 + 10 +9274.999962 + 20 +22153.778494 + 30 +0.0 + 11 +9262.499962 + 21 +22175.429129 + 31 +0.0 + 0 +LINE + 5 +7D5 + 8 +0 + 62 + 0 + 10 +9272.388736 + 20 +22115.0 + 30 +0.0 + 11 +9262.499962 + 21 +22132.127859 + 31 +0.0 + 0 +LINE + 5 +7D6 + 8 +0 + 62 + 0 + 10 +9237.499962 + 20 +22175.429129 + 30 +0.0 + 11 +9226.200714 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +7D7 + 8 +0 + 62 + 0 + 10 +9237.499962 + 20 +22132.127859 + 30 +0.0 + 11 +9224.999962 + 21 +22153.778494 + 31 +0.0 + 0 +LINE + 5 +7D8 + 8 +0 + 62 + 0 + 10 +9199.999962 + 20 +22153.778494 + 30 +0.0 + 11 +9187.499962 + 21 +22175.429129 + 31 +0.0 + 0 +LINE + 5 +7D9 + 8 +0 + 62 + 0 + 10 +9197.388736 + 20 +22115.0 + 30 +0.0 + 11 +9187.499962 + 21 +22132.127859 + 31 +0.0 + 0 +LINE + 5 +7DA + 8 +0 + 62 + 0 + 10 +9162.499962 + 20 +22175.429129 + 30 +0.0 + 11 +9151.200715 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +7DB + 8 +0 + 62 + 0 + 10 +9162.499962 + 20 +22132.127859 + 30 +0.0 + 11 +9149.999962 + 21 +22153.778494 + 31 +0.0 + 0 +LINE + 5 +7DC + 8 +0 + 62 + 0 + 10 +9124.999962 + 20 +22153.778494 + 30 +0.0 + 11 +9112.499962 + 21 +22175.42913 + 31 +0.0 + 0 +LINE + 5 +7DD + 8 +0 + 62 + 0 + 10 +9122.388736 + 20 +22115.0 + 30 +0.0 + 11 +9112.499962 + 21 +22132.127859 + 31 +0.0 + 0 +LINE + 5 +7DE + 8 +0 + 62 + 0 + 10 +9087.499962 + 20 +22175.42913 + 30 +0.0 + 11 +9076.200715 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +7DF + 8 +0 + 62 + 0 + 10 +9087.499962 + 20 +22132.127859 + 30 +0.0 + 11 +9074.999962 + 21 +22153.778495 + 31 +0.0 + 0 +LINE + 5 +7E0 + 8 +0 + 62 + 0 + 10 +9049.999962 + 20 +22153.778495 + 30 +0.0 + 11 +9037.499962 + 21 +22175.42913 + 31 +0.0 + 0 +LINE + 5 +7E1 + 8 +0 + 62 + 0 + 10 +9047.388737 + 20 +22115.0 + 30 +0.0 + 11 +9037.499962 + 21 +22132.12786 + 31 +0.0 + 0 +LINE + 5 +7E2 + 8 +0 + 62 + 0 + 10 +9012.499962 + 20 +22175.42913 + 30 +0.0 + 11 +9001.200715 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +7E3 + 8 +0 + 62 + 0 + 10 +9012.499962 + 20 +22132.12786 + 30 +0.0 + 11 +8999.999962 + 21 +22153.778495 + 31 +0.0 + 0 +LINE + 5 +7E4 + 8 +0 + 62 + 0 + 10 +8974.999963 + 20 +22153.778495 + 30 +0.0 + 11 +8962.499963 + 21 +22175.42913 + 31 +0.0 + 0 +LINE + 5 +7E5 + 8 +0 + 62 + 0 + 10 +8972.388737 + 20 +22115.0 + 30 +0.0 + 11 +8962.499963 + 21 +22132.12786 + 31 +0.0 + 0 +LINE + 5 +7E6 + 8 +0 + 62 + 0 + 10 +8937.499963 + 20 +22175.42913 + 30 +0.0 + 11 +8926.200716 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +7E7 + 8 +0 + 62 + 0 + 10 +8937.499963 + 20 +22132.12786 + 30 +0.0 + 11 +8924.999963 + 21 +22153.778495 + 31 +0.0 + 0 +LINE + 5 +7E8 + 8 +0 + 62 + 0 + 10 +8899.999963 + 20 +22153.778495 + 30 +0.0 + 11 +8887.499963 + 21 +22175.42913 + 31 +0.0 + 0 +LINE + 5 +7E9 + 8 +0 + 62 + 0 + 10 +8897.388737 + 20 +22115.0 + 30 +0.0 + 11 +8887.499963 + 21 +22132.12786 + 31 +0.0 + 0 +LINE + 5 +7EA + 8 +0 + 62 + 0 + 10 +8862.499963 + 20 +22175.42913 + 30 +0.0 + 11 +8851.200716 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +7EB + 8 +0 + 62 + 0 + 10 +8862.499963 + 20 +22132.12786 + 30 +0.0 + 11 +8849.999963 + 21 +22153.778495 + 31 +0.0 + 0 +LINE + 5 +7EC + 8 +0 + 62 + 0 + 10 +8824.999963 + 20 +22153.778495 + 30 +0.0 + 11 +8812.499963 + 21 +22175.42913 + 31 +0.0 + 0 +LINE + 5 +7ED + 8 +0 + 62 + 0 + 10 +8822.388738 + 20 +22115.0 + 30 +0.0 + 11 +8812.499963 + 21 +22132.12786 + 31 +0.0 + 0 +LINE + 5 +7EE + 8 +0 + 62 + 0 + 10 +8787.499963 + 20 +22175.42913 + 30 +0.0 + 11 +8776.200716 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +7EF + 8 +0 + 62 + 0 + 10 +8787.499963 + 20 +22132.12786 + 30 +0.0 + 11 +8774.999963 + 21 +22153.778495 + 31 +0.0 + 0 +LINE + 5 +7F0 + 8 +0 + 62 + 0 + 10 +8749.999963 + 20 +22153.778495 + 30 +0.0 + 11 +8737.499963 + 21 +22175.42913 + 31 +0.0 + 0 +LINE + 5 +7F1 + 8 +0 + 62 + 0 + 10 +8747.388738 + 20 +22115.0 + 30 +0.0 + 11 +8737.499963 + 21 +22132.12786 + 31 +0.0 + 0 +LINE + 5 +7F2 + 8 +0 + 62 + 0 + 10 +8712.499963 + 20 +22175.42913 + 30 +0.0 + 11 +8701.200717 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +7F3 + 8 +0 + 62 + 0 + 10 +8712.499963 + 20 +22132.12786 + 30 +0.0 + 11 +8699.999963 + 21 +22153.778495 + 31 +0.0 + 0 +LINE + 5 +7F4 + 8 +0 + 62 + 0 + 10 +8674.999964 + 20 +22153.778495 + 30 +0.0 + 11 +8662.499964 + 21 +22175.42913 + 31 +0.0 + 0 +LINE + 5 +7F5 + 8 +0 + 62 + 0 + 10 +8672.388738 + 20 +22115.0 + 30 +0.0 + 11 +8662.499964 + 21 +22132.12786 + 31 +0.0 + 0 +LINE + 5 +7F6 + 8 +0 + 62 + 0 + 10 +8637.499964 + 20 +22175.42913 + 30 +0.0 + 11 +8626.200717 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +7F7 + 8 +0 + 62 + 0 + 10 +8637.499964 + 20 +22132.12786 + 30 +0.0 + 11 +8624.999964 + 21 +22153.778495 + 31 +0.0 + 0 +LINE + 5 +7F8 + 8 +0 + 62 + 0 + 10 +8599.999964 + 20 +22153.778495 + 30 +0.0 + 11 +8587.499964 + 21 +22175.429131 + 31 +0.0 + 0 +LINE + 5 +7F9 + 8 +0 + 62 + 0 + 10 +8597.388739 + 20 +22115.0 + 30 +0.0 + 11 +8587.499964 + 21 +22132.12786 + 31 +0.0 + 0 +LINE + 5 +7FA + 8 +0 + 62 + 0 + 10 +8562.499964 + 20 +22175.429131 + 30 +0.0 + 11 +8551.200717 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +7FB + 8 +0 + 62 + 0 + 10 +8562.499964 + 20 +22132.12786 + 30 +0.0 + 11 +8549.999964 + 21 +22153.778496 + 31 +0.0 + 0 +LINE + 5 +7FC + 8 +0 + 62 + 0 + 10 +8524.999964 + 20 +22153.778496 + 30 +0.0 + 11 +8512.499964 + 21 +22175.429131 + 31 +0.0 + 0 +LINE + 5 +7FD + 8 +0 + 62 + 0 + 10 +8522.388739 + 20 +22115.0 + 30 +0.0 + 11 +8512.499964 + 21 +22132.127861 + 31 +0.0 + 0 +LINE + 5 +7FE + 8 +0 + 62 + 0 + 10 +9387.499961 + 20 +22132.127859 + 30 +0.0 + 11 +9374.999961 + 21 +22153.778494 + 31 +0.0 + 0 +LINE + 5 +7FF + 8 +0 + 62 + 0 + 10 +9422.388735 + 20 +22115.0 + 30 +0.0 + 11 +9412.499961 + 21 +22132.127859 + 31 +0.0 + 0 +LINE + 5 +800 + 8 +0 + 62 + 0 + 10 +9387.499961 + 20 +22175.429129 + 30 +0.0 + 11 +9376.200714 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +801 + 8 +0 + 62 + 0 + 10 +9424.999961 + 20 +22153.778494 + 30 +0.0 + 11 +9412.499961 + 21 +22175.429129 + 31 +0.0 + 0 +LINE + 5 +802 + 8 +0 + 62 + 0 + 10 +9462.499961 + 20 +22132.127859 + 30 +0.0 + 11 +9449.999961 + 21 +22153.778494 + 31 +0.0 + 0 +LINE + 5 +803 + 8 +0 + 62 + 0 + 10 +9497.388735 + 20 +22115.0 + 30 +0.0 + 11 +9487.499961 + 21 +22132.127859 + 31 +0.0 + 0 +LINE + 5 +804 + 8 +0 + 62 + 0 + 10 +9462.499961 + 20 +22175.429129 + 30 +0.0 + 11 +9451.200713 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +805 + 8 +0 + 62 + 0 + 10 +9499.999961 + 20 +22153.778494 + 30 +0.0 + 11 +9487.499961 + 21 +22175.429129 + 31 +0.0 + 0 +LINE + 5 +806 + 8 +0 + 62 + 0 + 10 +9537.499961 + 20 +22132.127859 + 30 +0.0 + 11 +9524.999961 + 21 +22153.778494 + 31 +0.0 + 0 +LINE + 5 +807 + 8 +0 + 62 + 0 + 10 +9572.388734 + 20 +22115.0 + 30 +0.0 + 11 +9562.499961 + 21 +22132.127859 + 31 +0.0 + 0 +LINE + 5 +808 + 8 +0 + 62 + 0 + 10 +9537.499961 + 20 +22175.429129 + 30 +0.0 + 11 +9526.200713 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +809 + 8 +0 + 62 + 0 + 10 +9574.999961 + 20 +22153.778494 + 30 +0.0 + 11 +9562.499961 + 21 +22175.429129 + 31 +0.0 + 0 +LINE + 5 +80A + 8 +0 + 62 + 0 + 10 +9612.499961 + 20 +22132.127858 + 30 +0.0 + 11 +9599.999961 + 21 +22153.778494 + 31 +0.0 + 0 +LINE + 5 +80B + 8 +0 + 62 + 0 + 10 +9647.388734 + 20 +22115.0 + 30 +0.0 + 11 +9637.49996 + 21 +22132.127858 + 31 +0.0 + 0 +LINE + 5 +80C + 8 +0 + 62 + 0 + 10 +9612.49996 + 20 +22175.429129 + 30 +0.0 + 11 +9601.200713 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +80D + 8 +0 + 62 + 0 + 10 +9649.99996 + 20 +22153.778493 + 30 +0.0 + 11 +9637.49996 + 21 +22175.429129 + 31 +0.0 + 0 +LINE + 5 +80E + 8 +0 + 62 + 0 + 10 +9687.49996 + 20 +22132.127858 + 30 +0.0 + 11 +9674.99996 + 21 +22153.778493 + 31 +0.0 + 0 +LINE + 5 +80F + 8 +0 + 62 + 0 + 10 +9722.388734 + 20 +22115.0 + 30 +0.0 + 11 +9712.49996 + 21 +22132.127858 + 31 +0.0 + 0 +LINE + 5 +810 + 8 +0 + 62 + 0 + 10 +9687.49996 + 20 +22175.429128 + 30 +0.0 + 11 +9676.200712 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +811 + 8 +0 + 62 + 0 + 10 +9724.99996 + 20 +22153.778493 + 30 +0.0 + 11 +9712.49996 + 21 +22175.429128 + 31 +0.0 + 0 +LINE + 5 +812 + 8 +0 + 62 + 0 + 10 +9762.49996 + 20 +22132.127858 + 30 +0.0 + 11 +9749.99996 + 21 +22153.778493 + 31 +0.0 + 0 +LINE + 5 +813 + 8 +0 + 62 + 0 + 10 +9797.388733 + 20 +22115.0 + 30 +0.0 + 11 +9787.49996 + 21 +22132.127858 + 31 +0.0 + 0 +LINE + 5 +814 + 8 +0 + 62 + 0 + 10 +9762.49996 + 20 +22175.429128 + 30 +0.0 + 11 +9751.200712 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +815 + 8 +0 + 62 + 0 + 10 +9799.99996 + 20 +22153.778493 + 30 +0.0 + 11 +9787.49996 + 21 +22175.429128 + 31 +0.0 + 0 +LINE + 5 +816 + 8 +0 + 62 + 0 + 10 +9837.49996 + 20 +22132.127858 + 30 +0.0 + 11 +9824.99996 + 21 +22153.778493 + 31 +0.0 + 0 +LINE + 5 +817 + 8 +0 + 62 + 0 + 10 +9872.388733 + 20 +22115.0 + 30 +0.0 + 11 +9862.49996 + 21 +22132.127858 + 31 +0.0 + 0 +LINE + 5 +818 + 8 +0 + 62 + 0 + 10 +9837.49996 + 20 +22175.429128 + 30 +0.0 + 11 +9826.200712 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +819 + 8 +0 + 62 + 0 + 10 +9874.99996 + 20 +22153.778493 + 30 +0.0 + 11 +9862.49996 + 21 +22175.429128 + 31 +0.0 + 0 +LINE + 5 +81A + 8 +0 + 62 + 0 + 10 +9912.49996 + 20 +22132.127858 + 30 +0.0 + 11 +9899.99996 + 21 +22153.778493 + 31 +0.0 + 0 +LINE + 5 +81B + 8 +0 + 62 + 0 + 10 +9947.388733 + 20 +22115.0 + 30 +0.0 + 11 +9937.499959 + 21 +22132.127858 + 31 +0.0 + 0 +LINE + 5 +81C + 8 +0 + 62 + 0 + 10 +9912.499959 + 20 +22175.429128 + 30 +0.0 + 11 +9901.200711 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +81D + 8 +0 + 62 + 0 + 10 +9949.999959 + 20 +22153.778493 + 30 +0.0 + 11 +9937.499959 + 21 +22175.429128 + 31 +0.0 + 0 +LINE + 5 +81E + 8 +0 + 62 + 0 + 10 +9987.499959 + 20 +22132.127858 + 30 +0.0 + 11 +9974.999959 + 21 +22153.778493 + 31 +0.0 + 0 +LINE + 5 +81F + 8 +0 + 62 + 0 + 10 +10022.388732 + 20 +22115.0 + 30 +0.0 + 11 +10012.499959 + 21 +22132.127858 + 31 +0.0 + 0 +LINE + 5 +820 + 8 +0 + 62 + 0 + 10 +9987.499959 + 20 +22175.429128 + 30 +0.0 + 11 +9976.200711 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +821 + 8 +0 + 62 + 0 + 10 +10024.999959 + 20 +22153.778493 + 30 +0.0 + 11 +10012.499959 + 21 +22175.429128 + 31 +0.0 + 0 +LINE + 5 +822 + 8 +0 + 62 + 0 + 10 +10062.499959 + 20 +22132.127858 + 30 +0.0 + 11 +10049.999959 + 21 +22153.778493 + 31 +0.0 + 0 +LINE + 5 +823 + 8 +0 + 62 + 0 + 10 +10097.388732 + 20 +22115.0 + 30 +0.0 + 11 +10087.499959 + 21 +22132.127858 + 31 +0.0 + 0 +LINE + 5 +824 + 8 +0 + 62 + 0 + 10 +10062.499959 + 20 +22175.429128 + 30 +0.0 + 11 +10051.200711 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +825 + 8 +0 + 62 + 0 + 10 +10099.999959 + 20 +22153.778493 + 30 +0.0 + 11 +10087.499959 + 21 +22175.429128 + 31 +0.0 + 0 +LINE + 5 +826 + 8 +0 + 62 + 0 + 10 +10137.499959 + 20 +22132.127857 + 30 +0.0 + 11 +10124.999959 + 21 +22153.778493 + 31 +0.0 + 0 +LINE + 5 +827 + 8 +0 + 62 + 0 + 10 +10172.388732 + 20 +22115.0 + 30 +0.0 + 11 +10162.499959 + 21 +22132.127857 + 31 +0.0 + 0 +LINE + 5 +828 + 8 +0 + 62 + 0 + 10 +10137.499959 + 20 +22175.429128 + 30 +0.0 + 11 +10126.20071 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +829 + 8 +0 + 62 + 0 + 10 +10174.999959 + 20 +22153.778492 + 30 +0.0 + 11 +10162.499959 + 21 +22175.429128 + 31 +0.0 + 0 +LINE + 5 +82A + 8 +0 + 62 + 0 + 10 +10212.499959 + 20 +22132.127857 + 30 +0.0 + 11 +10199.999959 + 21 +22153.778492 + 31 +0.0 + 0 +LINE + 5 +82B + 8 +0 + 62 + 0 + 10 +10247.388731 + 20 +22115.0 + 30 +0.0 + 11 +10237.499958 + 21 +22132.127857 + 31 +0.0 + 0 +LINE + 5 +82C + 8 +0 + 62 + 0 + 10 +10212.499958 + 20 +22175.429127 + 30 +0.0 + 11 +10201.20071 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +82D + 8 +0 + 62 + 0 + 10 +10249.999958 + 20 +22153.778492 + 30 +0.0 + 11 +10237.499958 + 21 +22175.429127 + 31 +0.0 + 0 +LINE + 5 +82E + 8 +0 + 62 + 0 + 10 +9375.00001 + 20 +22153.778511 + 30 +0.0 + 11 +9387.50001 + 21 +22175.429146 + 31 +0.0 + 0 +LINE + 5 +82F + 8 +0 + 62 + 0 + 10 +9337.50001 + 20 +22132.127875 + 30 +0.0 + 11 +9350.00001 + 21 +22153.778511 + 31 +0.0 + 0 +LINE + 5 +830 + 8 +0 + 62 + 0 + 10 +9302.611227 + 20 +22115.0 + 30 +0.0 + 11 +9312.50001 + 21 +22132.127875 + 31 +0.0 + 0 +LINE + 5 +831 + 8 +0 + 62 + 0 + 10 +9337.50001 + 20 +22175.429146 + 30 +0.0 + 11 +9348.799248 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +832 + 8 +0 + 62 + 0 + 10 +9300.00001 + 20 +22153.77851 + 30 +0.0 + 11 +9312.50001 + 21 +22175.429146 + 31 +0.0 + 0 +LINE + 5 +833 + 8 +0 + 62 + 0 + 10 +9262.50001 + 20 +22132.127875 + 30 +0.0 + 11 +9275.00001 + 21 +22153.77851 + 31 +0.0 + 0 +LINE + 5 +834 + 8 +0 + 62 + 0 + 10 +9227.611227 + 20 +22115.0 + 30 +0.0 + 11 +9237.50001 + 21 +22132.127875 + 31 +0.0 + 0 +LINE + 5 +835 + 8 +0 + 62 + 0 + 10 +9262.50001 + 20 +22175.429145 + 30 +0.0 + 11 +9273.799249 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +836 + 8 +0 + 62 + 0 + 10 +9225.000011 + 20 +22153.77851 + 30 +0.0 + 11 +9237.500011 + 21 +22175.429145 + 31 +0.0 + 0 +LINE + 5 +837 + 8 +0 + 62 + 0 + 10 +9187.500011 + 20 +22132.127875 + 30 +0.0 + 11 +9200.000011 + 21 +22153.77851 + 31 +0.0 + 0 +LINE + 5 +838 + 8 +0 + 62 + 0 + 10 +9152.611227 + 20 +22115.0 + 30 +0.0 + 11 +9162.500011 + 21 +22132.127875 + 31 +0.0 + 0 +LINE + 5 +839 + 8 +0 + 62 + 0 + 10 +9187.500011 + 20 +22175.429145 + 30 +0.0 + 11 +9198.799249 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +83A + 8 +0 + 62 + 0 + 10 +9150.000011 + 20 +22153.77851 + 30 +0.0 + 11 +9162.500011 + 21 +22175.429145 + 31 +0.0 + 0 +LINE + 5 +83B + 8 +0 + 62 + 0 + 10 +9112.500011 + 20 +22132.127875 + 30 +0.0 + 11 +9125.000011 + 21 +22153.77851 + 31 +0.0 + 0 +LINE + 5 +83C + 8 +0 + 62 + 0 + 10 +9077.611228 + 20 +22115.0 + 30 +0.0 + 11 +9087.500011 + 21 +22132.127875 + 31 +0.0 + 0 +LINE + 5 +83D + 8 +0 + 62 + 0 + 10 +9112.500011 + 20 +22175.429145 + 30 +0.0 + 11 +9123.799249 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +83E + 8 +0 + 62 + 0 + 10 +9075.000011 + 20 +22153.77851 + 30 +0.0 + 11 +9087.500011 + 21 +22175.429145 + 31 +0.0 + 0 +LINE + 5 +83F + 8 +0 + 62 + 0 + 10 +9037.500011 + 20 +22132.127875 + 30 +0.0 + 11 +9050.000011 + 21 +22153.77851 + 31 +0.0 + 0 +LINE + 5 +840 + 8 +0 + 62 + 0 + 10 +9002.611228 + 20 +22115.0 + 30 +0.0 + 11 +9012.500011 + 21 +22132.127875 + 31 +0.0 + 0 +LINE + 5 +841 + 8 +0 + 62 + 0 + 10 +9037.500011 + 20 +22175.429145 + 30 +0.0 + 11 +9048.79925 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +842 + 8 +0 + 62 + 0 + 10 +9000.000011 + 20 +22153.77851 + 30 +0.0 + 11 +9012.500011 + 21 +22175.429145 + 31 +0.0 + 0 +LINE + 5 +843 + 8 +0 + 62 + 0 + 10 +8962.500011 + 20 +22132.127875 + 30 +0.0 + 11 +8975.000011 + 21 +22153.77851 + 31 +0.0 + 0 +LINE + 5 +844 + 8 +0 + 62 + 0 + 10 +8927.611228 + 20 +22115.0 + 30 +0.0 + 11 +8937.500011 + 21 +22132.127875 + 31 +0.0 + 0 +LINE + 5 +845 + 8 +0 + 62 + 0 + 10 +8962.500011 + 20 +22175.429145 + 30 +0.0 + 11 +8973.79925 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +846 + 8 +0 + 62 + 0 + 10 +8925.000012 + 20 +22153.77851 + 30 +0.0 + 11 +8937.500012 + 21 +22175.429145 + 31 +0.0 + 0 +LINE + 5 +847 + 8 +0 + 62 + 0 + 10 +8887.500012 + 20 +22132.127875 + 30 +0.0 + 11 +8900.000012 + 21 +22153.77851 + 31 +0.0 + 0 +LINE + 5 +848 + 8 +0 + 62 + 0 + 10 +8852.611229 + 20 +22115.0 + 30 +0.0 + 11 +8862.500012 + 21 +22132.127875 + 31 +0.0 + 0 +LINE + 5 +849 + 8 +0 + 62 + 0 + 10 +8887.500012 + 20 +22175.429145 + 30 +0.0 + 11 +8898.79925 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +84A + 8 +0 + 62 + 0 + 10 +8850.000012 + 20 +22153.77851 + 30 +0.0 + 11 +8862.500012 + 21 +22175.429145 + 31 +0.0 + 0 +LINE + 5 +84B + 8 +0 + 62 + 0 + 10 +8812.500012 + 20 +22132.127874 + 30 +0.0 + 11 +8825.000012 + 21 +22153.77851 + 31 +0.0 + 0 +LINE + 5 +84C + 8 +0 + 62 + 0 + 10 +8777.611229 + 20 +22115.0 + 30 +0.0 + 11 +8787.500012 + 21 +22132.127874 + 31 +0.0 + 0 +LINE + 5 +84D + 8 +0 + 62 + 0 + 10 +8812.500012 + 20 +22175.429145 + 30 +0.0 + 11 +8823.799251 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +84E + 8 +0 + 62 + 0 + 10 +8775.000012 + 20 +22153.778509 + 30 +0.0 + 11 +8787.500012 + 21 +22175.429145 + 31 +0.0 + 0 +LINE + 5 +84F + 8 +0 + 62 + 0 + 10 +8737.500012 + 20 +22132.127874 + 30 +0.0 + 11 +8750.000012 + 21 +22153.778509 + 31 +0.0 + 0 +LINE + 5 +850 + 8 +0 + 62 + 0 + 10 +8702.611229 + 20 +22115.0 + 30 +0.0 + 11 +8712.500012 + 21 +22132.127874 + 31 +0.0 + 0 +LINE + 5 +851 + 8 +0 + 62 + 0 + 10 +8737.500012 + 20 +22175.429144 + 30 +0.0 + 11 +8748.799251 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +852 + 8 +0 + 62 + 0 + 10 +8700.000012 + 20 +22153.778509 + 30 +0.0 + 11 +8712.500012 + 21 +22175.429144 + 31 +0.0 + 0 +LINE + 5 +853 + 8 +0 + 62 + 0 + 10 +8662.500012 + 20 +22132.127874 + 30 +0.0 + 11 +8675.000012 + 21 +22153.778509 + 31 +0.0 + 0 +LINE + 5 +854 + 8 +0 + 62 + 0 + 10 +8627.61123 + 20 +22115.0 + 30 +0.0 + 11 +8637.500012 + 21 +22132.127874 + 31 +0.0 + 0 +LINE + 5 +855 + 8 +0 + 62 + 0 + 10 +8662.500012 + 20 +22175.429144 + 30 +0.0 + 11 +8673.799251 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +856 + 8 +0 + 62 + 0 + 10 +8625.000013 + 20 +22153.778509 + 30 +0.0 + 11 +8637.500013 + 21 +22175.429144 + 31 +0.0 + 0 +LINE + 5 +857 + 8 +0 + 62 + 0 + 10 +8587.500013 + 20 +22132.127874 + 30 +0.0 + 11 +8600.000013 + 21 +22153.778509 + 31 +0.0 + 0 +LINE + 5 +858 + 8 +0 + 62 + 0 + 10 +8552.61123 + 20 +22115.0 + 30 +0.0 + 11 +8562.500013 + 21 +22132.127874 + 31 +0.0 + 0 +LINE + 5 +859 + 8 +0 + 62 + 0 + 10 +8587.500013 + 20 +22175.429144 + 30 +0.0 + 11 +8598.799252 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +85A + 8 +0 + 62 + 0 + 10 +8550.000013 + 20 +22153.778509 + 30 +0.0 + 11 +8562.500013 + 21 +22175.429144 + 31 +0.0 + 0 +LINE + 5 +85B + 8 +0 + 62 + 0 + 10 +8512.500013 + 20 +22132.127874 + 30 +0.0 + 11 +8525.000013 + 21 +22153.778509 + 31 +0.0 + 0 +LINE + 5 +85C + 8 +0 + 62 + 0 + 10 +8512.500013 + 20 +22175.429144 + 30 +0.0 + 11 +8523.799252 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +85D + 8 +0 + 62 + 0 + 10 +9377.611226 + 20 +22115.0 + 30 +0.0 + 11 +9387.50001 + 21 +22132.127876 + 31 +0.0 + 0 +LINE + 5 +85E + 8 +0 + 62 + 0 + 10 +9412.50001 + 20 +22175.429146 + 30 +0.0 + 11 +9423.799248 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +85F + 8 +0 + 62 + 0 + 10 +9412.50001 + 20 +22132.127876 + 30 +0.0 + 11 +9425.00001 + 21 +22153.778511 + 31 +0.0 + 0 +LINE + 5 +860 + 8 +0 + 62 + 0 + 10 +9450.00001 + 20 +22153.778511 + 30 +0.0 + 11 +9462.50001 + 21 +22175.429146 + 31 +0.0 + 0 +LINE + 5 +861 + 8 +0 + 62 + 0 + 10 +9452.611226 + 20 +22115.0 + 30 +0.0 + 11 +9462.50001 + 21 +22132.127876 + 31 +0.0 + 0 +LINE + 5 +862 + 8 +0 + 62 + 0 + 10 +9487.50001 + 20 +22175.429146 + 30 +0.0 + 11 +9498.799248 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +863 + 8 +0 + 62 + 0 + 10 +9487.50001 + 20 +22132.127876 + 30 +0.0 + 11 +9500.00001 + 21 +22153.778511 + 31 +0.0 + 0 +LINE + 5 +864 + 8 +0 + 62 + 0 + 10 +9525.00001 + 20 +22153.778511 + 30 +0.0 + 11 +9537.50001 + 21 +22175.429146 + 31 +0.0 + 0 +LINE + 5 +865 + 8 +0 + 62 + 0 + 10 +9527.611226 + 20 +22115.0 + 30 +0.0 + 11 +9537.50001 + 21 +22132.127876 + 31 +0.0 + 0 +LINE + 5 +866 + 8 +0 + 62 + 0 + 10 +9562.50001 + 20 +22175.429146 + 30 +0.0 + 11 +9573.799247 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +867 + 8 +0 + 62 + 0 + 10 +9562.500009 + 20 +22132.127876 + 30 +0.0 + 11 +9575.000009 + 21 +22153.778511 + 31 +0.0 + 0 +LINE + 5 +868 + 8 +0 + 62 + 0 + 10 +9600.000009 + 20 +22153.778511 + 30 +0.0 + 11 +9612.500009 + 21 +22175.429146 + 31 +0.0 + 0 +LINE + 5 +869 + 8 +0 + 62 + 0 + 10 +9602.611225 + 20 +22115.0 + 30 +0.0 + 11 +9612.500009 + 21 +22132.127876 + 31 +0.0 + 0 +LINE + 5 +86A + 8 +0 + 62 + 0 + 10 +9637.500009 + 20 +22175.429146 + 30 +0.0 + 11 +9648.799247 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +86B + 8 +0 + 62 + 0 + 10 +9637.500009 + 20 +22132.127876 + 30 +0.0 + 11 +9650.000009 + 21 +22153.778511 + 31 +0.0 + 0 +LINE + 5 +86C + 8 +0 + 62 + 0 + 10 +9675.000009 + 20 +22153.778511 + 30 +0.0 + 11 +9687.500009 + 21 +22175.429146 + 31 +0.0 + 0 +LINE + 5 +86D + 8 +0 + 62 + 0 + 10 +9677.611225 + 20 +22115.0 + 30 +0.0 + 11 +9687.500009 + 21 +22132.127876 + 31 +0.0 + 0 +LINE + 5 +86E + 8 +0 + 62 + 0 + 10 +9712.500009 + 20 +22175.429146 + 30 +0.0 + 11 +9723.799247 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +86F + 8 +0 + 62 + 0 + 10 +9712.500009 + 20 +22132.127876 + 30 +0.0 + 11 +9725.000009 + 21 +22153.778511 + 31 +0.0 + 0 +LINE + 5 +870 + 8 +0 + 62 + 0 + 10 +9750.000009 + 20 +22153.778511 + 30 +0.0 + 11 +9762.500009 + 21 +22175.429146 + 31 +0.0 + 0 +LINE + 5 +871 + 8 +0 + 62 + 0 + 10 +9752.611225 + 20 +22115.0 + 30 +0.0 + 11 +9762.500009 + 21 +22132.127876 + 31 +0.0 + 0 +LINE + 5 +872 + 8 +0 + 62 + 0 + 10 +9787.500009 + 20 +22175.429146 + 30 +0.0 + 11 +9798.799246 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +873 + 8 +0 + 62 + 0 + 10 +9787.500009 + 20 +22132.127876 + 30 +0.0 + 11 +9800.000009 + 21 +22153.778511 + 31 +0.0 + 0 +LINE + 5 +874 + 8 +0 + 62 + 0 + 10 +9825.000009 + 20 +22153.778511 + 30 +0.0 + 11 +9837.500009 + 21 +22175.429147 + 31 +0.0 + 0 +LINE + 5 +875 + 8 +0 + 62 + 0 + 10 +9827.611224 + 20 +22115.0 + 30 +0.0 + 11 +9837.500009 + 21 +22132.127876 + 31 +0.0 + 0 +LINE + 5 +876 + 8 +0 + 62 + 0 + 10 +9862.500009 + 20 +22175.429147 + 30 +0.0 + 11 +9873.799246 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +877 + 8 +0 + 62 + 0 + 10 +9862.500008 + 20 +22132.127876 + 30 +0.0 + 11 +9875.000008 + 21 +22153.778512 + 31 +0.0 + 0 +LINE + 5 +878 + 8 +0 + 62 + 0 + 10 +9900.000008 + 20 +22153.778512 + 30 +0.0 + 11 +9912.500008 + 21 +22175.429147 + 31 +0.0 + 0 +LINE + 5 +879 + 8 +0 + 62 + 0 + 10 +9902.611224 + 20 +22115.0 + 30 +0.0 + 11 +9912.500008 + 21 +22132.127877 + 31 +0.0 + 0 +LINE + 5 +87A + 8 +0 + 62 + 0 + 10 +9937.500008 + 20 +22175.429147 + 30 +0.0 + 11 +9948.799246 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +87B + 8 +0 + 62 + 0 + 10 +9937.500008 + 20 +22132.127877 + 30 +0.0 + 11 +9950.000008 + 21 +22153.778512 + 31 +0.0 + 0 +LINE + 5 +87C + 8 +0 + 62 + 0 + 10 +9975.000008 + 20 +22153.778512 + 30 +0.0 + 11 +9987.500008 + 21 +22175.429147 + 31 +0.0 + 0 +LINE + 5 +87D + 8 +0 + 62 + 0 + 10 +9977.611224 + 20 +22115.0 + 30 +0.0 + 11 +9987.500008 + 21 +22132.127877 + 31 +0.0 + 0 +LINE + 5 +87E + 8 +0 + 62 + 0 + 10 +10012.500008 + 20 +22175.429147 + 30 +0.0 + 11 +10023.799245 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +87F + 8 +0 + 62 + 0 + 10 +10012.500008 + 20 +22132.127877 + 30 +0.0 + 11 +10025.000008 + 21 +22153.778512 + 31 +0.0 + 0 +LINE + 5 +880 + 8 +0 + 62 + 0 + 10 +10050.000008 + 20 +22153.778512 + 30 +0.0 + 11 +10062.500008 + 21 +22175.429147 + 31 +0.0 + 0 +LINE + 5 +881 + 8 +0 + 62 + 0 + 10 +10052.611224 + 20 +22115.0 + 30 +0.0 + 11 +10062.500008 + 21 +22132.127877 + 31 +0.0 + 0 +LINE + 5 +882 + 8 +0 + 62 + 0 + 10 +10087.500008 + 20 +22175.429147 + 30 +0.0 + 11 +10098.799245 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +883 + 8 +0 + 62 + 0 + 10 +10087.500008 + 20 +22132.127877 + 30 +0.0 + 11 +10100.000008 + 21 +22153.778512 + 31 +0.0 + 0 +LINE + 5 +884 + 8 +0 + 62 + 0 + 10 +10125.000008 + 20 +22153.778512 + 30 +0.0 + 11 +10137.500008 + 21 +22175.429147 + 31 +0.0 + 0 +LINE + 5 +885 + 8 +0 + 62 + 0 + 10 +10127.611223 + 20 +22115.0 + 30 +0.0 + 11 +10137.500008 + 21 +22132.127877 + 31 +0.0 + 0 +LINE + 5 +886 + 8 +0 + 62 + 0 + 10 +10162.500008 + 20 +22175.429147 + 30 +0.0 + 11 +10173.799245 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +887 + 8 +0 + 62 + 0 + 10 +10162.500007 + 20 +22132.127877 + 30 +0.0 + 11 +10175.000007 + 21 +22153.778512 + 31 +0.0 + 0 +LINE + 5 +888 + 8 +0 + 62 + 0 + 10 +10200.000007 + 20 +22153.778512 + 30 +0.0 + 11 +10212.500007 + 21 +22175.429147 + 31 +0.0 + 0 +LINE + 5 +889 + 8 +0 + 62 + 0 + 10 +10202.611223 + 20 +22115.0 + 30 +0.0 + 11 +10212.500007 + 21 +22132.127877 + 31 +0.0 + 0 +LINE + 5 +88A + 8 +0 + 62 + 0 + 10 +10237.500007 + 20 +22175.429147 + 30 +0.0 + 11 +10248.799244 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +88B + 8 +0 + 62 + 0 + 10 +10237.500007 + 20 +22132.127877 + 30 +0.0 + 11 +10250.000007 + 21 +22153.778512 + 31 +0.0 + 0 +ENDBLK + 5 +88C + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X41 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X41 + 1 + + 0 +LINE + 5 +88E + 8 +0 + 62 + 0 + 10 +11238.75 + 20 +22153.77846 + 30 +0.0 + 11 +11250.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +88F + 8 +0 + 62 + 0 + 10 +11300.0 + 20 +22153.77846 + 30 +0.0 + 11 +11325.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +890 + 8 +0 + 62 + 0 + 10 +11375.0 + 20 +22153.77846 + 30 +0.0 + 11 +11400.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +891 + 8 +0 + 62 + 0 + 10 +11450.0 + 20 +22153.77846 + 30 +0.0 + 11 +11475.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +892 + 8 +0 + 62 + 0 + 10 +11525.0 + 20 +22153.77846 + 30 +0.0 + 11 +11550.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +893 + 8 +0 + 62 + 0 + 10 +11600.0 + 20 +22153.77846 + 30 +0.0 + 11 +11625.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +894 + 8 +0 + 62 + 0 + 10 +11675.0 + 20 +22153.77846 + 30 +0.0 + 11 +11700.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +895 + 8 +0 + 62 + 0 + 10 +11750.0 + 20 +22153.77846 + 30 +0.0 + 11 +11775.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +896 + 8 +0 + 62 + 0 + 10 +11825.0 + 20 +22153.77846 + 30 +0.0 + 11 +11850.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +897 + 8 +0 + 62 + 0 + 10 +11900.0 + 20 +22153.77846 + 30 +0.0 + 11 +11925.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +898 + 8 +0 + 62 + 0 + 10 +11975.0 + 20 +22153.77846 + 30 +0.0 + 11 +12000.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +899 + 8 +0 + 62 + 0 + 10 +12050.0 + 20 +22153.77846 + 30 +0.0 + 11 +12075.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +89A + 8 +0 + 62 + 0 + 10 +12125.0 + 20 +22153.77846 + 30 +0.0 + 11 +12150.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +89B + 8 +0 + 62 + 0 + 10 +12200.0 + 20 +22153.77846 + 30 +0.0 + 11 +12225.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +89C + 8 +0 + 62 + 0 + 10 +12275.0 + 20 +22153.77846 + 30 +0.0 + 11 +12300.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +89D + 8 +0 + 62 + 0 + 10 +12350.0 + 20 +22153.77846 + 30 +0.0 + 11 +12375.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +89E + 8 +0 + 62 + 0 + 10 +12425.0 + 20 +22153.77846 + 30 +0.0 + 11 +12450.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +89F + 8 +0 + 62 + 0 + 10 +12500.0 + 20 +22153.77846 + 30 +0.0 + 11 +12525.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8A0 + 8 +0 + 62 + 0 + 10 +12575.0 + 20 +22153.77846 + 30 +0.0 + 11 +12600.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8A1 + 8 +0 + 62 + 0 + 10 +12650.0 + 20 +22153.77846 + 30 +0.0 + 11 +12675.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8A2 + 8 +0 + 62 + 0 + 10 +12725.0 + 20 +22153.77846 + 30 +0.0 + 11 +12750.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8A3 + 8 +0 + 62 + 0 + 10 +12800.0 + 20 +22153.77846 + 30 +0.0 + 11 +12825.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8A4 + 8 +0 + 62 + 0 + 10 +12875.0 + 20 +22153.77846 + 30 +0.0 + 11 +12900.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8A5 + 8 +0 + 62 + 0 + 10 +12950.0 + 20 +22153.77846 + 30 +0.0 + 11 +12975.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8A6 + 8 +0 + 62 + 0 + 10 +13025.0 + 20 +22153.77846 + 30 +0.0 + 11 +13050.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8A7 + 8 +0 + 62 + 0 + 10 +13100.0 + 20 +22153.77846 + 30 +0.0 + 11 +13125.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8A8 + 8 +0 + 62 + 0 + 10 +13175.0 + 20 +22153.77846 + 30 +0.0 + 11 +13200.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8A9 + 8 +0 + 62 + 0 + 10 +13250.0 + 20 +22153.77846 + 30 +0.0 + 11 +13275.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8AA + 8 +0 + 62 + 0 + 10 +13325.0 + 20 +22153.77846 + 30 +0.0 + 11 +13350.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8AB + 8 +0 + 62 + 0 + 10 +13400.0 + 20 +22153.77846 + 30 +0.0 + 11 +13425.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8AC + 8 +0 + 62 + 0 + 10 +13475.0 + 20 +22153.77846 + 30 +0.0 + 11 +13500.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8AD + 8 +0 + 62 + 0 + 10 +13550.0 + 20 +22153.77846 + 30 +0.0 + 11 +13575.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8AE + 8 +0 + 62 + 0 + 10 +13625.0 + 20 +22153.77846 + 30 +0.0 + 11 +13650.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8AF + 8 +0 + 62 + 0 + 10 +13700.0 + 20 +22153.77846 + 30 +0.0 + 11 +13725.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8B0 + 8 +0 + 62 + 0 + 10 +13775.0 + 20 +22153.77846 + 30 +0.0 + 11 +13800.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8B1 + 8 +0 + 62 + 0 + 10 +13850.0 + 20 +22153.77846 + 30 +0.0 + 11 +13875.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8B2 + 8 +0 + 62 + 0 + 10 +13925.0 + 20 +22153.77846 + 30 +0.0 + 11 +13950.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8B3 + 8 +0 + 62 + 0 + 10 +14000.0 + 20 +22153.77846 + 30 +0.0 + 11 +14025.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8B4 + 8 +0 + 62 + 0 + 10 +14075.0 + 20 +22153.77846 + 30 +0.0 + 11 +14100.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8B5 + 8 +0 + 62 + 0 + 10 +14150.0 + 20 +22153.77846 + 30 +0.0 + 11 +14175.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8B6 + 8 +0 + 62 + 0 + 10 +14225.0 + 20 +22153.77846 + 30 +0.0 + 11 +14250.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8B7 + 8 +0 + 62 + 0 + 10 +14300.0 + 20 +22153.77846 + 30 +0.0 + 11 +14325.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8B8 + 8 +0 + 62 + 0 + 10 +14375.0 + 20 +22153.77846 + 30 +0.0 + 11 +14400.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8B9 + 8 +0 + 62 + 0 + 10 +14450.0 + 20 +22153.77846 + 30 +0.0 + 11 +14475.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8BA + 8 +0 + 62 + 0 + 10 +14525.0 + 20 +22153.77846 + 30 +0.0 + 11 +14550.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8BB + 8 +0 + 62 + 0 + 10 +14600.0 + 20 +22153.77846 + 30 +0.0 + 11 +14625.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8BC + 8 +0 + 62 + 0 + 10 +14675.0 + 20 +22153.77846 + 30 +0.0 + 11 +14700.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8BD + 8 +0 + 62 + 0 + 10 +14750.0 + 20 +22153.77846 + 30 +0.0 + 11 +14775.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8BE + 8 +0 + 62 + 0 + 10 +14825.0 + 20 +22153.77846 + 30 +0.0 + 11 +14850.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8BF + 8 +0 + 62 + 0 + 10 +14900.0 + 20 +22153.77846 + 30 +0.0 + 11 +14925.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8C0 + 8 +0 + 62 + 0 + 10 +14975.0 + 20 +22153.77846 + 30 +0.0 + 11 +15000.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8C1 + 8 +0 + 62 + 0 + 10 +15050.0 + 20 +22153.77846 + 30 +0.0 + 11 +15075.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8C2 + 8 +0 + 62 + 0 + 10 +15125.0 + 20 +22153.77846 + 30 +0.0 + 11 +15150.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8C3 + 8 +0 + 62 + 0 + 10 +15200.0 + 20 +22153.77846 + 30 +0.0 + 11 +15225.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8C4 + 8 +0 + 62 + 0 + 10 +15275.0 + 20 +22153.77846 + 30 +0.0 + 11 +15300.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8C5 + 8 +0 + 62 + 0 + 10 +15350.0 + 20 +22153.77846 + 30 +0.0 + 11 +15375.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8C6 + 8 +0 + 62 + 0 + 10 +15425.0 + 20 +22153.77846 + 30 +0.0 + 11 +15450.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8C7 + 8 +0 + 62 + 0 + 10 +15500.0 + 20 +22153.77846 + 30 +0.0 + 11 +15525.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8C8 + 8 +0 + 62 + 0 + 10 +15575.0 + 20 +22153.77846 + 30 +0.0 + 11 +15600.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8C9 + 8 +0 + 62 + 0 + 10 +15650.0 + 20 +22153.77846 + 30 +0.0 + 11 +15675.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8CA + 8 +0 + 62 + 0 + 10 +15725.0 + 20 +22153.77846 + 30 +0.0 + 11 +15750.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8CB + 8 +0 + 62 + 0 + 10 +15800.0 + 20 +22153.77846 + 30 +0.0 + 11 +15825.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8CC + 8 +0 + 62 + 0 + 10 +15875.0 + 20 +22153.77846 + 30 +0.0 + 11 +15876.25 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +8CD + 8 +0 + 62 + 0 + 10 +11262.5 + 20 +22175.429095 + 30 +0.0 + 11 +11287.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8CE + 8 +0 + 62 + 0 + 10 +11337.5 + 20 +22175.429095 + 30 +0.0 + 11 +11362.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8CF + 8 +0 + 62 + 0 + 10 +11412.5 + 20 +22175.429095 + 30 +0.0 + 11 +11437.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8D0 + 8 +0 + 62 + 0 + 10 +11487.5 + 20 +22175.429095 + 30 +0.0 + 11 +11512.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8D1 + 8 +0 + 62 + 0 + 10 +11562.5 + 20 +22175.429095 + 30 +0.0 + 11 +11587.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8D2 + 8 +0 + 62 + 0 + 10 +11637.5 + 20 +22175.429095 + 30 +0.0 + 11 +11662.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8D3 + 8 +0 + 62 + 0 + 10 +11712.5 + 20 +22175.429095 + 30 +0.0 + 11 +11737.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8D4 + 8 +0 + 62 + 0 + 10 +11787.5 + 20 +22175.429095 + 30 +0.0 + 11 +11812.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8D5 + 8 +0 + 62 + 0 + 10 +11862.5 + 20 +22175.429095 + 30 +0.0 + 11 +11887.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8D6 + 8 +0 + 62 + 0 + 10 +11937.5 + 20 +22175.429095 + 30 +0.0 + 11 +11962.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8D7 + 8 +0 + 62 + 0 + 10 +12012.5 + 20 +22175.429095 + 30 +0.0 + 11 +12037.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8D8 + 8 +0 + 62 + 0 + 10 +12087.5 + 20 +22175.429095 + 30 +0.0 + 11 +12112.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8D9 + 8 +0 + 62 + 0 + 10 +12162.5 + 20 +22175.429095 + 30 +0.0 + 11 +12187.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8DA + 8 +0 + 62 + 0 + 10 +12237.5 + 20 +22175.429095 + 30 +0.0 + 11 +12262.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8DB + 8 +0 + 62 + 0 + 10 +12312.5 + 20 +22175.429095 + 30 +0.0 + 11 +12337.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8DC + 8 +0 + 62 + 0 + 10 +12387.5 + 20 +22175.429095 + 30 +0.0 + 11 +12412.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8DD + 8 +0 + 62 + 0 + 10 +12462.5 + 20 +22175.429095 + 30 +0.0 + 11 +12487.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8DE + 8 +0 + 62 + 0 + 10 +12537.5 + 20 +22175.429095 + 30 +0.0 + 11 +12562.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8DF + 8 +0 + 62 + 0 + 10 +12612.5 + 20 +22175.429095 + 30 +0.0 + 11 +12637.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8E0 + 8 +0 + 62 + 0 + 10 +12687.5 + 20 +22175.429095 + 30 +0.0 + 11 +12712.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8E1 + 8 +0 + 62 + 0 + 10 +12762.5 + 20 +22175.429095 + 30 +0.0 + 11 +12787.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8E2 + 8 +0 + 62 + 0 + 10 +12837.5 + 20 +22175.429095 + 30 +0.0 + 11 +12862.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8E3 + 8 +0 + 62 + 0 + 10 +12912.5 + 20 +22175.429095 + 30 +0.0 + 11 +12937.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8E4 + 8 +0 + 62 + 0 + 10 +12987.5 + 20 +22175.429095 + 30 +0.0 + 11 +13012.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8E5 + 8 +0 + 62 + 0 + 10 +13062.5 + 20 +22175.429095 + 30 +0.0 + 11 +13087.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8E6 + 8 +0 + 62 + 0 + 10 +13137.5 + 20 +22175.429095 + 30 +0.0 + 11 +13162.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8E7 + 8 +0 + 62 + 0 + 10 +13212.5 + 20 +22175.429095 + 30 +0.0 + 11 +13237.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8E8 + 8 +0 + 62 + 0 + 10 +13287.5 + 20 +22175.429095 + 30 +0.0 + 11 +13312.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8E9 + 8 +0 + 62 + 0 + 10 +13362.5 + 20 +22175.429095 + 30 +0.0 + 11 +13387.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8EA + 8 +0 + 62 + 0 + 10 +13437.5 + 20 +22175.429095 + 30 +0.0 + 11 +13462.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8EB + 8 +0 + 62 + 0 + 10 +13512.5 + 20 +22175.429095 + 30 +0.0 + 11 +13537.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8EC + 8 +0 + 62 + 0 + 10 +13587.5 + 20 +22175.429095 + 30 +0.0 + 11 +13612.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8ED + 8 +0 + 62 + 0 + 10 +13662.5 + 20 +22175.429095 + 30 +0.0 + 11 +13687.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8EE + 8 +0 + 62 + 0 + 10 +13737.5 + 20 +22175.429095 + 30 +0.0 + 11 +13762.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8EF + 8 +0 + 62 + 0 + 10 +13812.5 + 20 +22175.429095 + 30 +0.0 + 11 +13837.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8F0 + 8 +0 + 62 + 0 + 10 +13887.5 + 20 +22175.429095 + 30 +0.0 + 11 +13912.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8F1 + 8 +0 + 62 + 0 + 10 +13962.5 + 20 +22175.429095 + 30 +0.0 + 11 +13987.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8F2 + 8 +0 + 62 + 0 + 10 +14037.5 + 20 +22175.429095 + 30 +0.0 + 11 +14062.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8F3 + 8 +0 + 62 + 0 + 10 +14112.5 + 20 +22175.429095 + 30 +0.0 + 11 +14137.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8F4 + 8 +0 + 62 + 0 + 10 +14187.5 + 20 +22175.429095 + 30 +0.0 + 11 +14212.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8F5 + 8 +0 + 62 + 0 + 10 +14262.5 + 20 +22175.429095 + 30 +0.0 + 11 +14287.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8F6 + 8 +0 + 62 + 0 + 10 +14337.5 + 20 +22175.429095 + 30 +0.0 + 11 +14362.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8F7 + 8 +0 + 62 + 0 + 10 +14412.5 + 20 +22175.429095 + 30 +0.0 + 11 +14437.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8F8 + 8 +0 + 62 + 0 + 10 +14487.5 + 20 +22175.429095 + 30 +0.0 + 11 +14512.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8F9 + 8 +0 + 62 + 0 + 10 +14562.5 + 20 +22175.429095 + 30 +0.0 + 11 +14587.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8FA + 8 +0 + 62 + 0 + 10 +14637.5 + 20 +22175.429095 + 30 +0.0 + 11 +14662.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8FB + 8 +0 + 62 + 0 + 10 +14712.5 + 20 +22175.429095 + 30 +0.0 + 11 +14737.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8FC + 8 +0 + 62 + 0 + 10 +14787.5 + 20 +22175.429095 + 30 +0.0 + 11 +14812.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8FD + 8 +0 + 62 + 0 + 10 +14862.5 + 20 +22175.429095 + 30 +0.0 + 11 +14887.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8FE + 8 +0 + 62 + 0 + 10 +14937.5 + 20 +22175.429095 + 30 +0.0 + 11 +14962.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +8FF + 8 +0 + 62 + 0 + 10 +15012.5 + 20 +22175.429095 + 30 +0.0 + 11 +15037.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +900 + 8 +0 + 62 + 0 + 10 +15087.5 + 20 +22175.429095 + 30 +0.0 + 11 +15112.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +901 + 8 +0 + 62 + 0 + 10 +15162.5 + 20 +22175.429095 + 30 +0.0 + 11 +15187.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +902 + 8 +0 + 62 + 0 + 10 +15237.5 + 20 +22175.429095 + 30 +0.0 + 11 +15262.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +903 + 8 +0 + 62 + 0 + 10 +15312.5 + 20 +22175.429095 + 30 +0.0 + 11 +15337.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +904 + 8 +0 + 62 + 0 + 10 +15387.5 + 20 +22175.429095 + 30 +0.0 + 11 +15412.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +905 + 8 +0 + 62 + 0 + 10 +15462.5 + 20 +22175.429095 + 30 +0.0 + 11 +15487.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +906 + 8 +0 + 62 + 0 + 10 +15537.5 + 20 +22175.429095 + 30 +0.0 + 11 +15562.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +907 + 8 +0 + 62 + 0 + 10 +15612.5 + 20 +22175.429095 + 30 +0.0 + 11 +15637.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +908 + 8 +0 + 62 + 0 + 10 +15687.5 + 20 +22175.429095 + 30 +0.0 + 11 +15712.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +909 + 8 +0 + 62 + 0 + 10 +15762.5 + 20 +22175.429095 + 30 +0.0 + 11 +15787.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +90A + 8 +0 + 62 + 0 + 10 +15837.5 + 20 +22175.429095 + 30 +0.0 + 11 +15862.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +90B + 8 +0 + 62 + 0 + 10 +11262.5 + 20 +22132.127825 + 30 +0.0 + 11 +11287.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +90C + 8 +0 + 62 + 0 + 10 +11337.5 + 20 +22132.127825 + 30 +0.0 + 11 +11362.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +90D + 8 +0 + 62 + 0 + 10 +11412.5 + 20 +22132.127825 + 30 +0.0 + 11 +11437.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +90E + 8 +0 + 62 + 0 + 10 +11487.5 + 20 +22132.127825 + 30 +0.0 + 11 +11512.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +90F + 8 +0 + 62 + 0 + 10 +11562.5 + 20 +22132.127825 + 30 +0.0 + 11 +11587.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +910 + 8 +0 + 62 + 0 + 10 +11637.5 + 20 +22132.127825 + 30 +0.0 + 11 +11662.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +911 + 8 +0 + 62 + 0 + 10 +11712.5 + 20 +22132.127825 + 30 +0.0 + 11 +11737.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +912 + 8 +0 + 62 + 0 + 10 +11787.5 + 20 +22132.127825 + 30 +0.0 + 11 +11812.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +913 + 8 +0 + 62 + 0 + 10 +11862.5 + 20 +22132.127825 + 30 +0.0 + 11 +11887.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +914 + 8 +0 + 62 + 0 + 10 +11937.5 + 20 +22132.127825 + 30 +0.0 + 11 +11962.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +915 + 8 +0 + 62 + 0 + 10 +12012.5 + 20 +22132.127825 + 30 +0.0 + 11 +12037.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +916 + 8 +0 + 62 + 0 + 10 +12087.5 + 20 +22132.127825 + 30 +0.0 + 11 +12112.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +917 + 8 +0 + 62 + 0 + 10 +12162.5 + 20 +22132.127825 + 30 +0.0 + 11 +12187.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +918 + 8 +0 + 62 + 0 + 10 +12237.5 + 20 +22132.127825 + 30 +0.0 + 11 +12262.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +919 + 8 +0 + 62 + 0 + 10 +12312.5 + 20 +22132.127825 + 30 +0.0 + 11 +12337.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +91A + 8 +0 + 62 + 0 + 10 +12387.5 + 20 +22132.127825 + 30 +0.0 + 11 +12412.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +91B + 8 +0 + 62 + 0 + 10 +12462.5 + 20 +22132.127825 + 30 +0.0 + 11 +12487.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +91C + 8 +0 + 62 + 0 + 10 +12537.5 + 20 +22132.127825 + 30 +0.0 + 11 +12562.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +91D + 8 +0 + 62 + 0 + 10 +12612.5 + 20 +22132.127825 + 30 +0.0 + 11 +12637.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +91E + 8 +0 + 62 + 0 + 10 +12687.5 + 20 +22132.127825 + 30 +0.0 + 11 +12712.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +91F + 8 +0 + 62 + 0 + 10 +12762.5 + 20 +22132.127825 + 30 +0.0 + 11 +12787.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +920 + 8 +0 + 62 + 0 + 10 +12837.5 + 20 +22132.127825 + 30 +0.0 + 11 +12862.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +921 + 8 +0 + 62 + 0 + 10 +12912.5 + 20 +22132.127825 + 30 +0.0 + 11 +12937.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +922 + 8 +0 + 62 + 0 + 10 +12987.5 + 20 +22132.127825 + 30 +0.0 + 11 +13012.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +923 + 8 +0 + 62 + 0 + 10 +13062.5 + 20 +22132.127825 + 30 +0.0 + 11 +13087.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +924 + 8 +0 + 62 + 0 + 10 +13137.5 + 20 +22132.127825 + 30 +0.0 + 11 +13162.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +925 + 8 +0 + 62 + 0 + 10 +13212.5 + 20 +22132.127825 + 30 +0.0 + 11 +13237.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +926 + 8 +0 + 62 + 0 + 10 +13287.5 + 20 +22132.127825 + 30 +0.0 + 11 +13312.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +927 + 8 +0 + 62 + 0 + 10 +13362.5 + 20 +22132.127825 + 30 +0.0 + 11 +13387.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +928 + 8 +0 + 62 + 0 + 10 +13437.5 + 20 +22132.127825 + 30 +0.0 + 11 +13462.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +929 + 8 +0 + 62 + 0 + 10 +13512.5 + 20 +22132.127825 + 30 +0.0 + 11 +13537.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +92A + 8 +0 + 62 + 0 + 10 +13587.5 + 20 +22132.127825 + 30 +0.0 + 11 +13612.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +92B + 8 +0 + 62 + 0 + 10 +13662.5 + 20 +22132.127825 + 30 +0.0 + 11 +13687.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +92C + 8 +0 + 62 + 0 + 10 +13737.5 + 20 +22132.127825 + 30 +0.0 + 11 +13762.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +92D + 8 +0 + 62 + 0 + 10 +13812.5 + 20 +22132.127825 + 30 +0.0 + 11 +13837.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +92E + 8 +0 + 62 + 0 + 10 +13887.5 + 20 +22132.127825 + 30 +0.0 + 11 +13912.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +92F + 8 +0 + 62 + 0 + 10 +13962.5 + 20 +22132.127825 + 30 +0.0 + 11 +13987.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +930 + 8 +0 + 62 + 0 + 10 +14037.5 + 20 +22132.127825 + 30 +0.0 + 11 +14062.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +931 + 8 +0 + 62 + 0 + 10 +14112.5 + 20 +22132.127825 + 30 +0.0 + 11 +14137.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +932 + 8 +0 + 62 + 0 + 10 +14187.5 + 20 +22132.127825 + 30 +0.0 + 11 +14212.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +933 + 8 +0 + 62 + 0 + 10 +14262.5 + 20 +22132.127825 + 30 +0.0 + 11 +14287.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +934 + 8 +0 + 62 + 0 + 10 +14337.5 + 20 +22132.127825 + 30 +0.0 + 11 +14362.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +935 + 8 +0 + 62 + 0 + 10 +14412.5 + 20 +22132.127825 + 30 +0.0 + 11 +14437.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +936 + 8 +0 + 62 + 0 + 10 +14487.5 + 20 +22132.127825 + 30 +0.0 + 11 +14512.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +937 + 8 +0 + 62 + 0 + 10 +14562.5 + 20 +22132.127825 + 30 +0.0 + 11 +14587.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +938 + 8 +0 + 62 + 0 + 10 +14637.5 + 20 +22132.127825 + 30 +0.0 + 11 +14662.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +939 + 8 +0 + 62 + 0 + 10 +14712.5 + 20 +22132.127825 + 30 +0.0 + 11 +14737.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +93A + 8 +0 + 62 + 0 + 10 +14787.5 + 20 +22132.127825 + 30 +0.0 + 11 +14812.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +93B + 8 +0 + 62 + 0 + 10 +14862.5 + 20 +22132.127825 + 30 +0.0 + 11 +14887.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +93C + 8 +0 + 62 + 0 + 10 +14937.5 + 20 +22132.127825 + 30 +0.0 + 11 +14962.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +93D + 8 +0 + 62 + 0 + 10 +15012.5 + 20 +22132.127825 + 30 +0.0 + 11 +15037.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +93E + 8 +0 + 62 + 0 + 10 +15087.5 + 20 +22132.127825 + 30 +0.0 + 11 +15112.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +93F + 8 +0 + 62 + 0 + 10 +15162.5 + 20 +22132.127825 + 30 +0.0 + 11 +15187.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +940 + 8 +0 + 62 + 0 + 10 +15237.5 + 20 +22132.127825 + 30 +0.0 + 11 +15262.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +941 + 8 +0 + 62 + 0 + 10 +15312.5 + 20 +22132.127825 + 30 +0.0 + 11 +15337.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +942 + 8 +0 + 62 + 0 + 10 +15387.5 + 20 +22132.127825 + 30 +0.0 + 11 +15412.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +943 + 8 +0 + 62 + 0 + 10 +15462.5 + 20 +22132.127825 + 30 +0.0 + 11 +15487.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +944 + 8 +0 + 62 + 0 + 10 +15537.5 + 20 +22132.127825 + 30 +0.0 + 11 +15562.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +945 + 8 +0 + 62 + 0 + 10 +15612.5 + 20 +22132.127825 + 30 +0.0 + 11 +15637.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +946 + 8 +0 + 62 + 0 + 10 +15687.5 + 20 +22132.127825 + 30 +0.0 + 11 +15712.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +947 + 8 +0 + 62 + 0 + 10 +15762.5 + 20 +22132.127825 + 30 +0.0 + 11 +15787.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +948 + 8 +0 + 62 + 0 + 10 +15837.5 + 20 +22132.127825 + 30 +0.0 + 11 +15862.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +949 + 8 +0 + 62 + 0 + 10 +13549.999948 + 20 +22153.778486 + 30 +0.0 + 11 +13537.499948 + 21 +22175.429121 + 31 +0.0 + 0 +LINE + 5 +94A + 8 +0 + 62 + 0 + 10 +13547.388717 + 20 +22115.0 + 30 +0.0 + 11 +13537.499948 + 21 +22132.127851 + 31 +0.0 + 0 +LINE + 5 +94B + 8 +0 + 62 + 0 + 10 +13512.499948 + 20 +22175.429121 + 30 +0.0 + 11 +13501.200696 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +94C + 8 +0 + 62 + 0 + 10 +13512.499948 + 20 +22132.127851 + 30 +0.0 + 11 +13499.999948 + 21 +22153.778486 + 31 +0.0 + 0 +LINE + 5 +94D + 8 +0 + 62 + 0 + 10 +13474.999948 + 20 +22153.778486 + 30 +0.0 + 11 +13462.499948 + 21 +22175.429121 + 31 +0.0 + 0 +LINE + 5 +94E + 8 +0 + 62 + 0 + 10 +13472.388717 + 20 +22115.0 + 30 +0.0 + 11 +13462.499948 + 21 +22132.127851 + 31 +0.0 + 0 +LINE + 5 +94F + 8 +0 + 62 + 0 + 10 +13437.499948 + 20 +22175.429121 + 30 +0.0 + 11 +13426.200696 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +950 + 8 +0 + 62 + 0 + 10 +13437.499948 + 20 +22132.127851 + 30 +0.0 + 11 +13424.999948 + 21 +22153.778486 + 31 +0.0 + 0 +LINE + 5 +951 + 8 +0 + 62 + 0 + 10 +13399.999948 + 20 +22153.778486 + 30 +0.0 + 11 +13387.499948 + 21 +22175.429121 + 31 +0.0 + 0 +LINE + 5 +952 + 8 +0 + 62 + 0 + 10 +13397.388718 + 20 +22115.0 + 30 +0.0 + 11 +13387.499948 + 21 +22132.127851 + 31 +0.0 + 0 +LINE + 5 +953 + 8 +0 + 62 + 0 + 10 +13362.499948 + 20 +22175.429122 + 30 +0.0 + 11 +13351.200696 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +954 + 8 +0 + 62 + 0 + 10 +13362.499948 + 20 +22132.127851 + 30 +0.0 + 11 +13349.999948 + 21 +22153.778486 + 31 +0.0 + 0 +LINE + 5 +955 + 8 +0 + 62 + 0 + 10 +13324.999948 + 20 +22153.778487 + 30 +0.0 + 11 +13312.499948 + 21 +22175.429122 + 31 +0.0 + 0 +LINE + 5 +956 + 8 +0 + 62 + 0 + 10 +13322.388718 + 20 +22115.0 + 30 +0.0 + 11 +13312.499948 + 21 +22132.127851 + 31 +0.0 + 0 +LINE + 5 +957 + 8 +0 + 62 + 0 + 10 +13287.499948 + 20 +22175.429122 + 30 +0.0 + 11 +13276.200697 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +958 + 8 +0 + 62 + 0 + 10 +13287.499948 + 20 +22132.127852 + 30 +0.0 + 11 +13274.999948 + 21 +22153.778487 + 31 +0.0 + 0 +LINE + 5 +959 + 8 +0 + 62 + 0 + 10 +13249.999949 + 20 +22153.778487 + 30 +0.0 + 11 +13237.499949 + 21 +22175.429122 + 31 +0.0 + 0 +LINE + 5 +95A + 8 +0 + 62 + 0 + 10 +13247.388718 + 20 +22115.0 + 30 +0.0 + 11 +13237.499949 + 21 +22132.127852 + 31 +0.0 + 0 +LINE + 5 +95B + 8 +0 + 62 + 0 + 10 +13212.499949 + 20 +22175.429122 + 30 +0.0 + 11 +13201.200697 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +95C + 8 +0 + 62 + 0 + 10 +13212.499949 + 20 +22132.127852 + 30 +0.0 + 11 +13199.999949 + 21 +22153.778487 + 31 +0.0 + 0 +LINE + 5 +95D + 8 +0 + 62 + 0 + 10 +13174.999949 + 20 +22153.778487 + 30 +0.0 + 11 +13162.499949 + 21 +22175.429122 + 31 +0.0 + 0 +LINE + 5 +95E + 8 +0 + 62 + 0 + 10 +13172.388719 + 20 +22115.0 + 30 +0.0 + 11 +13162.499949 + 21 +22132.127852 + 31 +0.0 + 0 +LINE + 5 +95F + 8 +0 + 62 + 0 + 10 +13137.499949 + 20 +22175.429122 + 30 +0.0 + 11 +13126.200697 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +960 + 8 +0 + 62 + 0 + 10 +13137.499949 + 20 +22132.127852 + 30 +0.0 + 11 +13124.999949 + 21 +22153.778487 + 31 +0.0 + 0 +LINE + 5 +961 + 8 +0 + 62 + 0 + 10 +13099.999949 + 20 +22153.778487 + 30 +0.0 + 11 +13087.499949 + 21 +22175.429122 + 31 +0.0 + 0 +LINE + 5 +962 + 8 +0 + 62 + 0 + 10 +13097.388719 + 20 +22115.0 + 30 +0.0 + 11 +13087.499949 + 21 +22132.127852 + 31 +0.0 + 0 +LINE + 5 +963 + 8 +0 + 62 + 0 + 10 +13062.499949 + 20 +22175.429122 + 30 +0.0 + 11 +13051.200697 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +964 + 8 +0 + 62 + 0 + 10 +13062.499949 + 20 +22132.127852 + 30 +0.0 + 11 +13049.999949 + 21 +22153.778487 + 31 +0.0 + 0 +LINE + 5 +965 + 8 +0 + 62 + 0 + 10 +13024.999949 + 20 +22153.778487 + 30 +0.0 + 11 +13012.499949 + 21 +22175.429122 + 31 +0.0 + 0 +LINE + 5 +966 + 8 +0 + 62 + 0 + 10 +13022.388719 + 20 +22115.0 + 30 +0.0 + 11 +13012.499949 + 21 +22132.127852 + 31 +0.0 + 0 +LINE + 5 +967 + 8 +0 + 62 + 0 + 10 +12987.499949 + 20 +22175.429122 + 30 +0.0 + 11 +12976.200698 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +968 + 8 +0 + 62 + 0 + 10 +12987.499949 + 20 +22132.127852 + 30 +0.0 + 11 +12974.999949 + 21 +22153.778487 + 31 +0.0 + 0 +LINE + 5 +969 + 8 +0 + 62 + 0 + 10 +12949.99995 + 20 +22153.778487 + 30 +0.0 + 11 +12937.49995 + 21 +22175.429122 + 31 +0.0 + 0 +LINE + 5 +96A + 8 +0 + 62 + 0 + 10 +12947.38872 + 20 +22115.0 + 30 +0.0 + 11 +12937.49995 + 21 +22132.127852 + 31 +0.0 + 0 +LINE + 5 +96B + 8 +0 + 62 + 0 + 10 +12912.49995 + 20 +22175.429122 + 30 +0.0 + 11 +12901.200698 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +96C + 8 +0 + 62 + 0 + 10 +12912.49995 + 20 +22132.127852 + 30 +0.0 + 11 +12899.99995 + 21 +22153.778487 + 31 +0.0 + 0 +LINE + 5 +96D + 8 +0 + 62 + 0 + 10 +12874.99995 + 20 +22153.778487 + 30 +0.0 + 11 +12862.49995 + 21 +22175.429122 + 31 +0.0 + 0 +LINE + 5 +96E + 8 +0 + 62 + 0 + 10 +12872.38872 + 20 +22115.0 + 30 +0.0 + 11 +12862.49995 + 21 +22132.127852 + 31 +0.0 + 0 +LINE + 5 +96F + 8 +0 + 62 + 0 + 10 +12837.49995 + 20 +22175.429123 + 30 +0.0 + 11 +12826.200698 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +970 + 8 +0 + 62 + 0 + 10 +12837.49995 + 20 +22132.127852 + 30 +0.0 + 11 +12824.99995 + 21 +22153.778487 + 31 +0.0 + 0 +LINE + 5 +971 + 8 +0 + 62 + 0 + 10 +12799.99995 + 20 +22153.778488 + 30 +0.0 + 11 +12787.49995 + 21 +22175.429123 + 31 +0.0 + 0 +LINE + 5 +972 + 8 +0 + 62 + 0 + 10 +12797.38872 + 20 +22115.0 + 30 +0.0 + 11 +12787.49995 + 21 +22132.127852 + 31 +0.0 + 0 +LINE + 5 +973 + 8 +0 + 62 + 0 + 10 +12762.49995 + 20 +22175.429123 + 30 +0.0 + 11 +12751.200699 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +974 + 8 +0 + 62 + 0 + 10 +12762.49995 + 20 +22132.127853 + 30 +0.0 + 11 +12749.99995 + 21 +22153.778488 + 31 +0.0 + 0 +LINE + 5 +975 + 8 +0 + 62 + 0 + 10 +12724.99995 + 20 +22153.778488 + 30 +0.0 + 11 +12712.49995 + 21 +22175.429123 + 31 +0.0 + 0 +LINE + 5 +976 + 8 +0 + 62 + 0 + 10 +12722.388721 + 20 +22115.0 + 30 +0.0 + 11 +12712.49995 + 21 +22132.127853 + 31 +0.0 + 0 +LINE + 5 +977 + 8 +0 + 62 + 0 + 10 +12687.49995 + 20 +22175.429123 + 30 +0.0 + 11 +12676.200699 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +978 + 8 +0 + 62 + 0 + 10 +12687.49995 + 20 +22132.127853 + 30 +0.0 + 11 +12674.99995 + 21 +22153.778488 + 31 +0.0 + 0 +LINE + 5 +979 + 8 +0 + 62 + 0 + 10 +12649.999951 + 20 +22153.778488 + 30 +0.0 + 11 +12637.499951 + 21 +22175.429123 + 31 +0.0 + 0 +LINE + 5 +97A + 8 +0 + 62 + 0 + 10 +12647.388721 + 20 +22115.0 + 30 +0.0 + 11 +12637.499951 + 21 +22132.127853 + 31 +0.0 + 0 +LINE + 5 +97B + 8 +0 + 62 + 0 + 10 +12612.499951 + 20 +22175.429123 + 30 +0.0 + 11 +12601.200699 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +97C + 8 +0 + 62 + 0 + 10 +12612.499951 + 20 +22132.127853 + 30 +0.0 + 11 +12599.999951 + 21 +22153.778488 + 31 +0.0 + 0 +LINE + 5 +97D + 8 +0 + 62 + 0 + 10 +12574.999951 + 20 +22153.778488 + 30 +0.0 + 11 +12562.499951 + 21 +22175.429123 + 31 +0.0 + 0 +LINE + 5 +97E + 8 +0 + 62 + 0 + 10 +12572.388721 + 20 +22115.0 + 30 +0.0 + 11 +12562.499951 + 21 +22132.127853 + 31 +0.0 + 0 +LINE + 5 +97F + 8 +0 + 62 + 0 + 10 +12537.499951 + 20 +22175.429123 + 30 +0.0 + 11 +12526.2007 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +980 + 8 +0 + 62 + 0 + 10 +12537.499951 + 20 +22132.127853 + 30 +0.0 + 11 +12524.999951 + 21 +22153.778488 + 31 +0.0 + 0 +LINE + 5 +981 + 8 +0 + 62 + 0 + 10 +12499.999951 + 20 +22153.778488 + 30 +0.0 + 11 +12487.499951 + 21 +22175.429123 + 31 +0.0 + 0 +LINE + 5 +982 + 8 +0 + 62 + 0 + 10 +12497.388722 + 20 +22115.0 + 30 +0.0 + 11 +12487.499951 + 21 +22132.127853 + 31 +0.0 + 0 +LINE + 5 +983 + 8 +0 + 62 + 0 + 10 +12462.499951 + 20 +22175.429123 + 30 +0.0 + 11 +12451.2007 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +984 + 8 +0 + 62 + 0 + 10 +12462.499951 + 20 +22132.127853 + 30 +0.0 + 11 +12449.999951 + 21 +22153.778488 + 31 +0.0 + 0 +LINE + 5 +985 + 8 +0 + 62 + 0 + 10 +12424.999951 + 20 +22153.778488 + 30 +0.0 + 11 +12412.499951 + 21 +22175.429123 + 31 +0.0 + 0 +LINE + 5 +986 + 8 +0 + 62 + 0 + 10 +12422.388722 + 20 +22115.0 + 30 +0.0 + 11 +12412.499951 + 21 +22132.127853 + 31 +0.0 + 0 +LINE + 5 +987 + 8 +0 + 62 + 0 + 10 +12387.499951 + 20 +22175.429123 + 30 +0.0 + 11 +12376.2007 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +988 + 8 +0 + 62 + 0 + 10 +12387.499951 + 20 +22132.127853 + 30 +0.0 + 11 +12374.999951 + 21 +22153.778488 + 31 +0.0 + 0 +LINE + 5 +989 + 8 +0 + 62 + 0 + 10 +12349.999951 + 20 +22153.778488 + 30 +0.0 + 11 +12337.499951 + 21 +22175.429123 + 31 +0.0 + 0 +LINE + 5 +98A + 8 +0 + 62 + 0 + 10 +12347.388722 + 20 +22115.0 + 30 +0.0 + 11 +12337.499952 + 21 +22132.127853 + 31 +0.0 + 0 +LINE + 5 +98B + 8 +0 + 62 + 0 + 10 +12312.499952 + 20 +22175.429124 + 30 +0.0 + 11 +12301.200701 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +98C + 8 +0 + 62 + 0 + 10 +12312.499952 + 20 +22132.127853 + 30 +0.0 + 11 +12299.999952 + 21 +22153.778488 + 31 +0.0 + 0 +LINE + 5 +98D + 8 +0 + 62 + 0 + 10 +12274.999952 + 20 +22153.778489 + 30 +0.0 + 11 +12262.499952 + 21 +22175.429124 + 31 +0.0 + 0 +LINE + 5 +98E + 8 +0 + 62 + 0 + 10 +12272.388723 + 20 +22115.0 + 30 +0.0 + 11 +12262.499952 + 21 +22132.127853 + 31 +0.0 + 0 +LINE + 5 +98F + 8 +0 + 62 + 0 + 10 +12237.499952 + 20 +22175.429124 + 30 +0.0 + 11 +12226.200701 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +990 + 8 +0 + 62 + 0 + 10 +12237.499952 + 20 +22132.127854 + 30 +0.0 + 11 +12224.999952 + 21 +22153.778489 + 31 +0.0 + 0 +LINE + 5 +991 + 8 +0 + 62 + 0 + 10 +12199.999952 + 20 +22153.778489 + 30 +0.0 + 11 +12187.499952 + 21 +22175.429124 + 31 +0.0 + 0 +LINE + 5 +992 + 8 +0 + 62 + 0 + 10 +12197.388723 + 20 +22115.0 + 30 +0.0 + 11 +12187.499952 + 21 +22132.127854 + 31 +0.0 + 0 +LINE + 5 +993 + 8 +0 + 62 + 0 + 10 +12162.499952 + 20 +22175.429124 + 30 +0.0 + 11 +12151.200701 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +994 + 8 +0 + 62 + 0 + 10 +12162.499952 + 20 +22132.127854 + 30 +0.0 + 11 +12149.999952 + 21 +22153.778489 + 31 +0.0 + 0 +LINE + 5 +995 + 8 +0 + 62 + 0 + 10 +12124.999952 + 20 +22153.778489 + 30 +0.0 + 11 +12112.499952 + 21 +22175.429124 + 31 +0.0 + 0 +LINE + 5 +996 + 8 +0 + 62 + 0 + 10 +12122.388723 + 20 +22115.0 + 30 +0.0 + 11 +12112.499952 + 21 +22132.127854 + 31 +0.0 + 0 +LINE + 5 +997 + 8 +0 + 62 + 0 + 10 +12087.499952 + 20 +22175.429124 + 30 +0.0 + 11 +12076.200702 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +998 + 8 +0 + 62 + 0 + 10 +12087.499952 + 20 +22132.127854 + 30 +0.0 + 11 +12074.999952 + 21 +22153.778489 + 31 +0.0 + 0 +LINE + 5 +999 + 8 +0 + 62 + 0 + 10 +12049.999952 + 20 +22153.778489 + 30 +0.0 + 11 +12037.499952 + 21 +22175.429124 + 31 +0.0 + 0 +LINE + 5 +99A + 8 +0 + 62 + 0 + 10 +12047.388724 + 20 +22115.0 + 30 +0.0 + 11 +12037.499953 + 21 +22132.127854 + 31 +0.0 + 0 +LINE + 5 +99B + 8 +0 + 62 + 0 + 10 +12012.499953 + 20 +22175.429124 + 30 +0.0 + 11 +12001.200702 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +99C + 8 +0 + 62 + 0 + 10 +12012.499953 + 20 +22132.127854 + 30 +0.0 + 11 +11999.999953 + 21 +22153.778489 + 31 +0.0 + 0 +LINE + 5 +99D + 8 +0 + 62 + 0 + 10 +11974.999953 + 20 +22153.778489 + 30 +0.0 + 11 +11962.499953 + 21 +22175.429124 + 31 +0.0 + 0 +LINE + 5 +99E + 8 +0 + 62 + 0 + 10 +11972.388724 + 20 +22115.0 + 30 +0.0 + 11 +11962.499953 + 21 +22132.127854 + 31 +0.0 + 0 +LINE + 5 +99F + 8 +0 + 62 + 0 + 10 +11937.499953 + 20 +22175.429124 + 30 +0.0 + 11 +11926.200702 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +9A0 + 8 +0 + 62 + 0 + 10 +11937.499953 + 20 +22132.127854 + 30 +0.0 + 11 +11924.999953 + 21 +22153.778489 + 31 +0.0 + 0 +LINE + 5 +9A1 + 8 +0 + 62 + 0 + 10 +11899.999953 + 20 +22153.778489 + 30 +0.0 + 11 +11887.499953 + 21 +22175.429124 + 31 +0.0 + 0 +LINE + 5 +9A2 + 8 +0 + 62 + 0 + 10 +11897.388724 + 20 +22115.0 + 30 +0.0 + 11 +11887.499953 + 21 +22132.127854 + 31 +0.0 + 0 +LINE + 5 +9A3 + 8 +0 + 62 + 0 + 10 +11862.499953 + 20 +22175.429124 + 30 +0.0 + 11 +11851.200703 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +9A4 + 8 +0 + 62 + 0 + 10 +11862.499953 + 20 +22132.127854 + 30 +0.0 + 11 +11849.999953 + 21 +22153.778489 + 31 +0.0 + 0 +LINE + 5 +9A5 + 8 +0 + 62 + 0 + 10 +11824.999953 + 20 +22153.778489 + 30 +0.0 + 11 +11812.499953 + 21 +22175.429124 + 31 +0.0 + 0 +LINE + 5 +9A6 + 8 +0 + 62 + 0 + 10 +11822.388725 + 20 +22115.0 + 30 +0.0 + 11 +11812.499953 + 21 +22132.127854 + 31 +0.0 + 0 +LINE + 5 +9A7 + 8 +0 + 62 + 0 + 10 +11787.499953 + 20 +22175.429125 + 30 +0.0 + 11 +11776.200703 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +9A8 + 8 +0 + 62 + 0 + 10 +11787.499953 + 20 +22132.127854 + 30 +0.0 + 11 +11774.999953 + 21 +22153.778489 + 31 +0.0 + 0 +LINE + 5 +9A9 + 8 +0 + 62 + 0 + 10 +11749.999953 + 20 +22153.77849 + 30 +0.0 + 11 +11737.499953 + 21 +22175.429125 + 31 +0.0 + 0 +LINE + 5 +9AA + 8 +0 + 62 + 0 + 10 +11747.388725 + 20 +22115.0 + 30 +0.0 + 11 +11737.499954 + 21 +22132.127854 + 31 +0.0 + 0 +LINE + 5 +9AB + 8 +0 + 62 + 0 + 10 +11712.499954 + 20 +22175.429125 + 30 +0.0 + 11 +11701.200703 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +9AC + 8 +0 + 62 + 0 + 10 +11712.499954 + 20 +22132.127855 + 30 +0.0 + 11 +11699.999954 + 21 +22153.77849 + 31 +0.0 + 0 +LINE + 5 +9AD + 8 +0 + 62 + 0 + 10 +11674.999954 + 20 +22153.77849 + 30 +0.0 + 11 +11662.499954 + 21 +22175.429125 + 31 +0.0 + 0 +LINE + 5 +9AE + 8 +0 + 62 + 0 + 10 +11672.388725 + 20 +22115.0 + 30 +0.0 + 11 +11662.499954 + 21 +22132.127855 + 31 +0.0 + 0 +LINE + 5 +9AF + 8 +0 + 62 + 0 + 10 +11637.499954 + 20 +22175.429125 + 30 +0.0 + 11 +11626.200704 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +9B0 + 8 +0 + 62 + 0 + 10 +11637.499954 + 20 +22132.127855 + 30 +0.0 + 11 +11624.999954 + 21 +22153.77849 + 31 +0.0 + 0 +LINE + 5 +9B1 + 8 +0 + 62 + 0 + 10 +11599.999954 + 20 +22153.77849 + 30 +0.0 + 11 +11587.499954 + 21 +22175.429125 + 31 +0.0 + 0 +LINE + 5 +9B2 + 8 +0 + 62 + 0 + 10 +11597.388726 + 20 +22115.0 + 30 +0.0 + 11 +11587.499954 + 21 +22132.127855 + 31 +0.0 + 0 +LINE + 5 +9B3 + 8 +0 + 62 + 0 + 10 +11562.499954 + 20 +22175.429125 + 30 +0.0 + 11 +11551.200704 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +9B4 + 8 +0 + 62 + 0 + 10 +11562.499954 + 20 +22132.127855 + 30 +0.0 + 11 +11549.999954 + 21 +22153.77849 + 31 +0.0 + 0 +LINE + 5 +9B5 + 8 +0 + 62 + 0 + 10 +11524.999954 + 20 +22153.77849 + 30 +0.0 + 11 +11512.499954 + 21 +22175.429125 + 31 +0.0 + 0 +LINE + 5 +9B6 + 8 +0 + 62 + 0 + 10 +11522.388726 + 20 +22115.0 + 30 +0.0 + 11 +11512.499954 + 21 +22132.127855 + 31 +0.0 + 0 +LINE + 5 +9B7 + 8 +0 + 62 + 0 + 10 +11487.499954 + 20 +22175.429125 + 30 +0.0 + 11 +11476.200704 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +9B8 + 8 +0 + 62 + 0 + 10 +11487.499954 + 20 +22132.127855 + 30 +0.0 + 11 +11474.999954 + 21 +22153.77849 + 31 +0.0 + 0 +LINE + 5 +9B9 + 8 +0 + 62 + 0 + 10 +11449.999954 + 20 +22153.77849 + 30 +0.0 + 11 +11437.499954 + 21 +22175.429125 + 31 +0.0 + 0 +LINE + 5 +9BA + 8 +0 + 62 + 0 + 10 +11447.388726 + 20 +22115.0 + 30 +0.0 + 11 +11437.499955 + 21 +22132.127855 + 31 +0.0 + 0 +LINE + 5 +9BB + 8 +0 + 62 + 0 + 10 +11412.499955 + 20 +22175.429125 + 30 +0.0 + 11 +11401.200705 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +9BC + 8 +0 + 62 + 0 + 10 +11412.499955 + 20 +22132.127855 + 30 +0.0 + 11 +11399.999955 + 21 +22153.77849 + 31 +0.0 + 0 +LINE + 5 +9BD + 8 +0 + 62 + 0 + 10 +11374.999955 + 20 +22153.77849 + 30 +0.0 + 11 +11362.499955 + 21 +22175.429125 + 31 +0.0 + 0 +LINE + 5 +9BE + 8 +0 + 62 + 0 + 10 +11372.388727 + 20 +22115.0 + 30 +0.0 + 11 +11362.499955 + 21 +22132.127855 + 31 +0.0 + 0 +LINE + 5 +9BF + 8 +0 + 62 + 0 + 10 +11337.499955 + 20 +22175.429125 + 30 +0.0 + 11 +11326.200705 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +9C0 + 8 +0 + 62 + 0 + 10 +11337.499955 + 20 +22132.127855 + 30 +0.0 + 11 +11324.999955 + 21 +22153.77849 + 31 +0.0 + 0 +LINE + 5 +9C1 + 8 +0 + 62 + 0 + 10 +11299.999955 + 20 +22153.77849 + 30 +0.0 + 11 +11287.499955 + 21 +22175.429125 + 31 +0.0 + 0 +LINE + 5 +9C2 + 8 +0 + 62 + 0 + 10 +11297.388727 + 20 +22115.0 + 30 +0.0 + 11 +11287.499955 + 21 +22132.127855 + 31 +0.0 + 0 +LINE + 5 +9C3 + 8 +0 + 62 + 0 + 10 +11262.499955 + 20 +22175.429126 + 30 +0.0 + 11 +11251.200705 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +9C4 + 8 +0 + 62 + 0 + 10 +11262.499955 + 20 +22132.127855 + 30 +0.0 + 11 +11249.999955 + 21 +22153.77849 + 31 +0.0 + 0 +LINE + 5 +9C5 + 8 +0 + 62 + 0 + 10 +13587.499947 + 20 +22132.127851 + 30 +0.0 + 11 +13574.999947 + 21 +22153.778486 + 31 +0.0 + 0 +LINE + 5 +9C6 + 8 +0 + 62 + 0 + 10 +13622.388717 + 20 +22115.0 + 30 +0.0 + 11 +13612.499947 + 21 +22132.127851 + 31 +0.0 + 0 +LINE + 5 +9C7 + 8 +0 + 62 + 0 + 10 +13587.499947 + 20 +22175.429121 + 30 +0.0 + 11 +13576.200695 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +9C8 + 8 +0 + 62 + 0 + 10 +13624.999947 + 20 +22153.778486 + 30 +0.0 + 11 +13612.499947 + 21 +22175.429121 + 31 +0.0 + 0 +LINE + 5 +9C9 + 8 +0 + 62 + 0 + 10 +13662.499947 + 20 +22132.127851 + 30 +0.0 + 11 +13649.999947 + 21 +22153.778486 + 31 +0.0 + 0 +LINE + 5 +9CA + 8 +0 + 62 + 0 + 10 +13697.388716 + 20 +22115.0 + 30 +0.0 + 11 +13687.499947 + 21 +22132.127851 + 31 +0.0 + 0 +LINE + 5 +9CB + 8 +0 + 62 + 0 + 10 +13662.499947 + 20 +22175.429121 + 30 +0.0 + 11 +13651.200695 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +9CC + 8 +0 + 62 + 0 + 10 +13699.999947 + 20 +22153.778486 + 30 +0.0 + 11 +13687.499947 + 21 +22175.429121 + 31 +0.0 + 0 +LINE + 5 +9CD + 8 +0 + 62 + 0 + 10 +13737.499947 + 20 +22132.127851 + 30 +0.0 + 11 +13724.999947 + 21 +22153.778486 + 31 +0.0 + 0 +LINE + 5 +9CE + 8 +0 + 62 + 0 + 10 +13772.388716 + 20 +22115.0 + 30 +0.0 + 11 +13762.499947 + 21 +22132.127851 + 31 +0.0 + 0 +LINE + 5 +9CF + 8 +0 + 62 + 0 + 10 +13737.499947 + 20 +22175.429121 + 30 +0.0 + 11 +13726.200695 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +9D0 + 8 +0 + 62 + 0 + 10 +13774.999947 + 20 +22153.778486 + 30 +0.0 + 11 +13762.499947 + 21 +22175.429121 + 31 +0.0 + 0 +LINE + 5 +9D1 + 8 +0 + 62 + 0 + 10 +13812.499947 + 20 +22132.127851 + 30 +0.0 + 11 +13799.999947 + 21 +22153.778486 + 31 +0.0 + 0 +LINE + 5 +9D2 + 8 +0 + 62 + 0 + 10 +13847.388716 + 20 +22115.0 + 30 +0.0 + 11 +13837.499947 + 21 +22132.12785 + 31 +0.0 + 0 +LINE + 5 +9D3 + 8 +0 + 62 + 0 + 10 +13812.499947 + 20 +22175.429121 + 30 +0.0 + 11 +13801.200694 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +9D4 + 8 +0 + 62 + 0 + 10 +13849.999947 + 20 +22153.778486 + 30 +0.0 + 11 +13837.499947 + 21 +22175.429121 + 31 +0.0 + 0 +LINE + 5 +9D5 + 8 +0 + 62 + 0 + 10 +13887.499946 + 20 +22132.12785 + 30 +0.0 + 11 +13874.999946 + 21 +22153.778485 + 31 +0.0 + 0 +LINE + 5 +9D6 + 8 +0 + 62 + 0 + 10 +13922.388715 + 20 +22115.0 + 30 +0.0 + 11 +13912.499946 + 21 +22132.12785 + 31 +0.0 + 0 +LINE + 5 +9D7 + 8 +0 + 62 + 0 + 10 +13887.499946 + 20 +22175.429121 + 30 +0.0 + 11 +13876.200694 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +9D8 + 8 +0 + 62 + 0 + 10 +13924.999946 + 20 +22153.778485 + 30 +0.0 + 11 +13912.499946 + 21 +22175.42912 + 31 +0.0 + 0 +LINE + 5 +9D9 + 8 +0 + 62 + 0 + 10 +13962.499946 + 20 +22132.12785 + 30 +0.0 + 11 +13949.999946 + 21 +22153.778485 + 31 +0.0 + 0 +LINE + 5 +9DA + 8 +0 + 62 + 0 + 10 +13997.388715 + 20 +22115.0 + 30 +0.0 + 11 +13987.499946 + 21 +22132.12785 + 31 +0.0 + 0 +LINE + 5 +9DB + 8 +0 + 62 + 0 + 10 +13962.499946 + 20 +22175.42912 + 30 +0.0 + 11 +13951.200694 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +9DC + 8 +0 + 62 + 0 + 10 +13999.999946 + 20 +22153.778485 + 30 +0.0 + 11 +13987.499946 + 21 +22175.42912 + 31 +0.0 + 0 +LINE + 5 +9DD + 8 +0 + 62 + 0 + 10 +14037.499946 + 20 +22132.12785 + 30 +0.0 + 11 +14024.999946 + 21 +22153.778485 + 31 +0.0 + 0 +LINE + 5 +9DE + 8 +0 + 62 + 0 + 10 +14072.388715 + 20 +22115.0 + 30 +0.0 + 11 +14062.499946 + 21 +22132.12785 + 31 +0.0 + 0 +LINE + 5 +9DF + 8 +0 + 62 + 0 + 10 +14037.499946 + 20 +22175.42912 + 30 +0.0 + 11 +14026.200693 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +9E0 + 8 +0 + 62 + 0 + 10 +14074.999946 + 20 +22153.778485 + 30 +0.0 + 11 +14062.499946 + 21 +22175.42912 + 31 +0.0 + 0 +LINE + 5 +9E1 + 8 +0 + 62 + 0 + 10 +14112.499946 + 20 +22132.12785 + 30 +0.0 + 11 +14099.999946 + 21 +22153.778485 + 31 +0.0 + 0 +LINE + 5 +9E2 + 8 +0 + 62 + 0 + 10 +14147.388714 + 20 +22115.0 + 30 +0.0 + 11 +14137.499946 + 21 +22132.12785 + 31 +0.0 + 0 +LINE + 5 +9E3 + 8 +0 + 62 + 0 + 10 +14112.499946 + 20 +22175.42912 + 30 +0.0 + 11 +14101.200693 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +9E4 + 8 +0 + 62 + 0 + 10 +14149.999946 + 20 +22153.778485 + 30 +0.0 + 11 +14137.499946 + 21 +22175.42912 + 31 +0.0 + 0 +LINE + 5 +9E5 + 8 +0 + 62 + 0 + 10 +14187.499946 + 20 +22132.12785 + 30 +0.0 + 11 +14174.999946 + 21 +22153.778485 + 31 +0.0 + 0 +LINE + 5 +9E6 + 8 +0 + 62 + 0 + 10 +14222.388714 + 20 +22115.0 + 30 +0.0 + 11 +14212.499945 + 21 +22132.12785 + 31 +0.0 + 0 +LINE + 5 +9E7 + 8 +0 + 62 + 0 + 10 +14187.499945 + 20 +22175.42912 + 30 +0.0 + 11 +14176.200693 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +9E8 + 8 +0 + 62 + 0 + 10 +14224.999945 + 20 +22153.778485 + 30 +0.0 + 11 +14212.499945 + 21 +22175.42912 + 31 +0.0 + 0 +LINE + 5 +9E9 + 8 +0 + 62 + 0 + 10 +14262.499945 + 20 +22132.12785 + 30 +0.0 + 11 +14249.999945 + 21 +22153.778485 + 31 +0.0 + 0 +LINE + 5 +9EA + 8 +0 + 62 + 0 + 10 +14297.388714 + 20 +22115.0 + 30 +0.0 + 11 +14287.499945 + 21 +22132.12785 + 31 +0.0 + 0 +LINE + 5 +9EB + 8 +0 + 62 + 0 + 10 +14262.499945 + 20 +22175.42912 + 30 +0.0 + 11 +14251.200692 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +9EC + 8 +0 + 62 + 0 + 10 +14299.999945 + 20 +22153.778485 + 30 +0.0 + 11 +14287.499945 + 21 +22175.42912 + 31 +0.0 + 0 +LINE + 5 +9ED + 8 +0 + 62 + 0 + 10 +14337.499945 + 20 +22132.12785 + 30 +0.0 + 11 +14324.999945 + 21 +22153.778485 + 31 +0.0 + 0 +LINE + 5 +9EE + 8 +0 + 62 + 0 + 10 +14372.388713 + 20 +22115.0 + 30 +0.0 + 11 +14362.499945 + 21 +22132.12785 + 31 +0.0 + 0 +LINE + 5 +9EF + 8 +0 + 62 + 0 + 10 +14337.499945 + 20 +22175.42912 + 30 +0.0 + 11 +14326.200692 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +9F0 + 8 +0 + 62 + 0 + 10 +14374.999945 + 20 +22153.778485 + 30 +0.0 + 11 +14362.499945 + 21 +22175.42912 + 31 +0.0 + 0 +LINE + 5 +9F1 + 8 +0 + 62 + 0 + 10 +14412.499945 + 20 +22132.127849 + 30 +0.0 + 11 +14399.999945 + 21 +22153.778485 + 31 +0.0 + 0 +LINE + 5 +9F2 + 8 +0 + 62 + 0 + 10 +14447.388713 + 20 +22115.0 + 30 +0.0 + 11 +14437.499945 + 21 +22132.127849 + 31 +0.0 + 0 +LINE + 5 +9F3 + 8 +0 + 62 + 0 + 10 +14412.499945 + 20 +22175.42912 + 30 +0.0 + 11 +14401.200692 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +9F4 + 8 +0 + 62 + 0 + 10 +14449.999945 + 20 +22153.778484 + 30 +0.0 + 11 +14437.499945 + 21 +22175.42912 + 31 +0.0 + 0 +LINE + 5 +9F5 + 8 +0 + 62 + 0 + 10 +14487.499945 + 20 +22132.127849 + 30 +0.0 + 11 +14474.999945 + 21 +22153.778484 + 31 +0.0 + 0 +LINE + 5 +9F6 + 8 +0 + 62 + 0 + 10 +14522.388713 + 20 +22115.0 + 30 +0.0 + 11 +14512.499944 + 21 +22132.127849 + 31 +0.0 + 0 +LINE + 5 +9F7 + 8 +0 + 62 + 0 + 10 +14487.499944 + 20 +22175.429119 + 30 +0.0 + 11 +14476.200691 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +9F8 + 8 +0 + 62 + 0 + 10 +14524.999944 + 20 +22153.778484 + 30 +0.0 + 11 +14512.499944 + 21 +22175.429119 + 31 +0.0 + 0 +LINE + 5 +9F9 + 8 +0 + 62 + 0 + 10 +14562.499944 + 20 +22132.127849 + 30 +0.0 + 11 +14549.999944 + 21 +22153.778484 + 31 +0.0 + 0 +LINE + 5 +9FA + 8 +0 + 62 + 0 + 10 +14597.388712 + 20 +22115.0 + 30 +0.0 + 11 +14587.499944 + 21 +22132.127849 + 31 +0.0 + 0 +LINE + 5 +9FB + 8 +0 + 62 + 0 + 10 +14562.499944 + 20 +22175.429119 + 30 +0.0 + 11 +14551.200691 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +9FC + 8 +0 + 62 + 0 + 10 +14599.999944 + 20 +22153.778484 + 30 +0.0 + 11 +14587.499944 + 21 +22175.429119 + 31 +0.0 + 0 +LINE + 5 +9FD + 8 +0 + 62 + 0 + 10 +14637.499944 + 20 +22132.127849 + 30 +0.0 + 11 +14624.999944 + 21 +22153.778484 + 31 +0.0 + 0 +LINE + 5 +9FE + 8 +0 + 62 + 0 + 10 +14672.388712 + 20 +22115.0 + 30 +0.0 + 11 +14662.499944 + 21 +22132.127849 + 31 +0.0 + 0 +LINE + 5 +9FF + 8 +0 + 62 + 0 + 10 +14637.499944 + 20 +22175.429119 + 30 +0.0 + 11 +14626.200691 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A00 + 8 +0 + 62 + 0 + 10 +14674.999944 + 20 +22153.778484 + 30 +0.0 + 11 +14662.499944 + 21 +22175.429119 + 31 +0.0 + 0 +LINE + 5 +A01 + 8 +0 + 62 + 0 + 10 +14712.499944 + 20 +22132.127849 + 30 +0.0 + 11 +14699.999944 + 21 +22153.778484 + 31 +0.0 + 0 +LINE + 5 +A02 + 8 +0 + 62 + 0 + 10 +14747.388712 + 20 +22115.0 + 30 +0.0 + 11 +14737.499944 + 21 +22132.127849 + 31 +0.0 + 0 +LINE + 5 +A03 + 8 +0 + 62 + 0 + 10 +14712.499944 + 20 +22175.429119 + 30 +0.0 + 11 +14701.20069 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A04 + 8 +0 + 62 + 0 + 10 +14749.999944 + 20 +22153.778484 + 30 +0.0 + 11 +14737.499944 + 21 +22175.429119 + 31 +0.0 + 0 +LINE + 5 +A05 + 8 +0 + 62 + 0 + 10 +14787.499944 + 20 +22132.127849 + 30 +0.0 + 11 +14774.999944 + 21 +22153.778484 + 31 +0.0 + 0 +LINE + 5 +A06 + 8 +0 + 62 + 0 + 10 +14822.388711 + 20 +22115.0 + 30 +0.0 + 11 +14812.499943 + 21 +22132.127849 + 31 +0.0 + 0 +LINE + 5 +A07 + 8 +0 + 62 + 0 + 10 +14787.499943 + 20 +22175.429119 + 30 +0.0 + 11 +14776.20069 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A08 + 8 +0 + 62 + 0 + 10 +14824.999943 + 20 +22153.778484 + 30 +0.0 + 11 +14812.499943 + 21 +22175.429119 + 31 +0.0 + 0 +LINE + 5 +A09 + 8 +0 + 62 + 0 + 10 +14862.499943 + 20 +22132.127849 + 30 +0.0 + 11 +14849.999943 + 21 +22153.778484 + 31 +0.0 + 0 +LINE + 5 +A0A + 8 +0 + 62 + 0 + 10 +14897.388711 + 20 +22115.0 + 30 +0.0 + 11 +14887.499943 + 21 +22132.127849 + 31 +0.0 + 0 +LINE + 5 +A0B + 8 +0 + 62 + 0 + 10 +14862.499943 + 20 +22175.429119 + 30 +0.0 + 11 +14851.20069 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A0C + 8 +0 + 62 + 0 + 10 +14899.999943 + 20 +22153.778484 + 30 +0.0 + 11 +14887.499943 + 21 +22175.429119 + 31 +0.0 + 0 +LINE + 5 +A0D + 8 +0 + 62 + 0 + 10 +14937.499943 + 20 +22132.127848 + 30 +0.0 + 11 +14924.999943 + 21 +22153.778484 + 31 +0.0 + 0 +LINE + 5 +A0E + 8 +0 + 62 + 0 + 10 +14972.388711 + 20 +22115.0 + 30 +0.0 + 11 +14962.499943 + 21 +22132.127848 + 31 +0.0 + 0 +LINE + 5 +A0F + 8 +0 + 62 + 0 + 10 +14937.499943 + 20 +22175.429119 + 30 +0.0 + 11 +14926.200689 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A10 + 8 +0 + 62 + 0 + 10 +14974.999943 + 20 +22153.778483 + 30 +0.0 + 11 +14962.499943 + 21 +22175.429119 + 31 +0.0 + 0 +LINE + 5 +A11 + 8 +0 + 62 + 0 + 10 +15012.499943 + 20 +22132.127848 + 30 +0.0 + 11 +14999.999943 + 21 +22153.778483 + 31 +0.0 + 0 +LINE + 5 +A12 + 8 +0 + 62 + 0 + 10 +15047.388711 + 20 +22115.0 + 30 +0.0 + 11 +15037.499943 + 21 +22132.127848 + 31 +0.0 + 0 +LINE + 5 +A13 + 8 +0 + 62 + 0 + 10 +15012.499943 + 20 +22175.429118 + 30 +0.0 + 11 +15001.200689 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A14 + 8 +0 + 62 + 0 + 10 +15049.999943 + 20 +22153.778483 + 30 +0.0 + 11 +15037.499943 + 21 +22175.429118 + 31 +0.0 + 0 +LINE + 5 +A15 + 8 +0 + 62 + 0 + 10 +15087.499943 + 20 +22132.127848 + 30 +0.0 + 11 +15074.999943 + 21 +22153.778483 + 31 +0.0 + 0 +LINE + 5 +A16 + 8 +0 + 62 + 0 + 10 +15122.38871 + 20 +22115.0 + 30 +0.0 + 11 +15112.499942 + 21 +22132.127848 + 31 +0.0 + 0 +LINE + 5 +A17 + 8 +0 + 62 + 0 + 10 +15087.499942 + 20 +22175.429118 + 30 +0.0 + 11 +15076.200689 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A18 + 8 +0 + 62 + 0 + 10 +15124.999942 + 20 +22153.778483 + 30 +0.0 + 11 +15112.499942 + 21 +22175.429118 + 31 +0.0 + 0 +LINE + 5 +A19 + 8 +0 + 62 + 0 + 10 +15162.499942 + 20 +22132.127848 + 30 +0.0 + 11 +15149.999942 + 21 +22153.778483 + 31 +0.0 + 0 +LINE + 5 +A1A + 8 +0 + 62 + 0 + 10 +15197.38871 + 20 +22115.0 + 30 +0.0 + 11 +15187.499942 + 21 +22132.127848 + 31 +0.0 + 0 +LINE + 5 +A1B + 8 +0 + 62 + 0 + 10 +15162.499942 + 20 +22175.429118 + 30 +0.0 + 11 +15151.200688 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A1C + 8 +0 + 62 + 0 + 10 +15199.999942 + 20 +22153.778483 + 30 +0.0 + 11 +15187.499942 + 21 +22175.429118 + 31 +0.0 + 0 +LINE + 5 +A1D + 8 +0 + 62 + 0 + 10 +15237.499942 + 20 +22132.127848 + 30 +0.0 + 11 +15224.999942 + 21 +22153.778483 + 31 +0.0 + 0 +LINE + 5 +A1E + 8 +0 + 62 + 0 + 10 +15272.38871 + 20 +22115.0 + 30 +0.0 + 11 +15262.499942 + 21 +22132.127848 + 31 +0.0 + 0 +LINE + 5 +A1F + 8 +0 + 62 + 0 + 10 +15237.499942 + 20 +22175.429118 + 30 +0.0 + 11 +15226.200688 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A20 + 8 +0 + 62 + 0 + 10 +15274.999942 + 20 +22153.778483 + 30 +0.0 + 11 +15262.499942 + 21 +22175.429118 + 31 +0.0 + 0 +LINE + 5 +A21 + 8 +0 + 62 + 0 + 10 +15312.499942 + 20 +22132.127848 + 30 +0.0 + 11 +15299.999942 + 21 +22153.778483 + 31 +0.0 + 0 +LINE + 5 +A22 + 8 +0 + 62 + 0 + 10 +15347.388709 + 20 +22115.0 + 30 +0.0 + 11 +15337.499942 + 21 +22132.127848 + 31 +0.0 + 0 +LINE + 5 +A23 + 8 +0 + 62 + 0 + 10 +15312.499942 + 20 +22175.429118 + 30 +0.0 + 11 +15301.200688 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A24 + 8 +0 + 62 + 0 + 10 +15349.999942 + 20 +22153.778483 + 30 +0.0 + 11 +15337.499942 + 21 +22175.429118 + 31 +0.0 + 0 +LINE + 5 +A25 + 8 +0 + 62 + 0 + 10 +15387.499942 + 20 +22132.127848 + 30 +0.0 + 11 +15374.999942 + 21 +22153.778483 + 31 +0.0 + 0 +LINE + 5 +A26 + 8 +0 + 62 + 0 + 10 +15422.388709 + 20 +22115.0 + 30 +0.0 + 11 +15412.499941 + 21 +22132.127848 + 31 +0.0 + 0 +LINE + 5 +A27 + 8 +0 + 62 + 0 + 10 +15387.499941 + 20 +22175.429118 + 30 +0.0 + 11 +15376.200687 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A28 + 8 +0 + 62 + 0 + 10 +15424.999941 + 20 +22153.778483 + 30 +0.0 + 11 +15412.499941 + 21 +22175.429118 + 31 +0.0 + 0 +LINE + 5 +A29 + 8 +0 + 62 + 0 + 10 +15462.499941 + 20 +22132.127847 + 30 +0.0 + 11 +15449.999941 + 21 +22153.778483 + 31 +0.0 + 0 +LINE + 5 +A2A + 8 +0 + 62 + 0 + 10 +15497.388709 + 20 +22115.0 + 30 +0.0 + 11 +15487.499941 + 21 +22132.127847 + 31 +0.0 + 0 +LINE + 5 +A2B + 8 +0 + 62 + 0 + 10 +15462.499941 + 20 +22175.429118 + 30 +0.0 + 11 +15451.200687 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A2C + 8 +0 + 62 + 0 + 10 +15499.999941 + 20 +22153.778482 + 30 +0.0 + 11 +15487.499941 + 21 +22175.429118 + 31 +0.0 + 0 +LINE + 5 +A2D + 8 +0 + 62 + 0 + 10 +15537.499941 + 20 +22132.127847 + 30 +0.0 + 11 +15524.999941 + 21 +22153.778482 + 31 +0.0 + 0 +LINE + 5 +A2E + 8 +0 + 62 + 0 + 10 +15572.388708 + 20 +22115.0 + 30 +0.0 + 11 +15562.499941 + 21 +22132.127847 + 31 +0.0 + 0 +LINE + 5 +A2F + 8 +0 + 62 + 0 + 10 +15537.499941 + 20 +22175.429117 + 30 +0.0 + 11 +15526.200687 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A30 + 8 +0 + 62 + 0 + 10 +15574.999941 + 20 +22153.778482 + 30 +0.0 + 11 +15562.499941 + 21 +22175.429117 + 31 +0.0 + 0 +LINE + 5 +A31 + 8 +0 + 62 + 0 + 10 +15612.499941 + 20 +22132.127847 + 30 +0.0 + 11 +15599.999941 + 21 +22153.778482 + 31 +0.0 + 0 +LINE + 5 +A32 + 8 +0 + 62 + 0 + 10 +15647.388708 + 20 +22115.0 + 30 +0.0 + 11 +15637.499941 + 21 +22132.127847 + 31 +0.0 + 0 +LINE + 5 +A33 + 8 +0 + 62 + 0 + 10 +15612.499941 + 20 +22175.429117 + 30 +0.0 + 11 +15601.200686 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A34 + 8 +0 + 62 + 0 + 10 +15649.999941 + 20 +22153.778482 + 30 +0.0 + 11 +15637.499941 + 21 +22175.429117 + 31 +0.0 + 0 +LINE + 5 +A35 + 8 +0 + 62 + 0 + 10 +15687.499941 + 20 +22132.127847 + 30 +0.0 + 11 +15674.999941 + 21 +22153.778482 + 31 +0.0 + 0 +LINE + 5 +A36 + 8 +0 + 62 + 0 + 10 +15722.388708 + 20 +22115.0 + 30 +0.0 + 11 +15712.499941 + 21 +22132.127847 + 31 +0.0 + 0 +LINE + 5 +A37 + 8 +0 + 62 + 0 + 10 +15687.499941 + 20 +22175.429117 + 30 +0.0 + 11 +15676.200686 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A38 + 8 +0 + 62 + 0 + 10 +15724.99994 + 20 +22153.778482 + 30 +0.0 + 11 +15712.49994 + 21 +22175.429117 + 31 +0.0 + 0 +LINE + 5 +A39 + 8 +0 + 62 + 0 + 10 +15762.49994 + 20 +22132.127847 + 30 +0.0 + 11 +15749.99994 + 21 +22153.778482 + 31 +0.0 + 0 +LINE + 5 +A3A + 8 +0 + 62 + 0 + 10 +15797.388707 + 20 +22115.0 + 30 +0.0 + 11 +15787.49994 + 21 +22132.127847 + 31 +0.0 + 0 +LINE + 5 +A3B + 8 +0 + 62 + 0 + 10 +15762.49994 + 20 +22175.429117 + 30 +0.0 + 11 +15751.200686 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A3C + 8 +0 + 62 + 0 + 10 +15799.99994 + 20 +22153.778482 + 30 +0.0 + 11 +15787.49994 + 21 +22175.429117 + 31 +0.0 + 0 +LINE + 5 +A3D + 8 +0 + 62 + 0 + 10 +15837.49994 + 20 +22132.127847 + 30 +0.0 + 11 +15824.99994 + 21 +22153.778482 + 31 +0.0 + 0 +LINE + 5 +A3E + 8 +0 + 62 + 0 + 10 +15872.388707 + 20 +22115.0 + 30 +0.0 + 11 +15862.49994 + 21 +22132.127847 + 31 +0.0 + 0 +LINE + 5 +A3F + 8 +0 + 62 + 0 + 10 +15837.49994 + 20 +22175.429117 + 30 +0.0 + 11 +15826.200685 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A40 + 8 +0 + 62 + 0 + 10 +15874.99994 + 20 +22153.778482 + 30 +0.0 + 11 +15862.49994 + 21 +22175.429117 + 31 +0.0 + 0 +LINE + 5 +A41 + 8 +0 + 62 + 0 + 10 +13537.499996 + 20 +22132.127883 + 30 +0.0 + 11 +13549.999996 + 21 +22153.778518 + 31 +0.0 + 0 +LINE + 5 +A42 + 8 +0 + 62 + 0 + 10 +13502.611208 + 20 +22115.0 + 30 +0.0 + 11 +13512.499996 + 21 +22132.127883 + 31 +0.0 + 0 +LINE + 5 +A43 + 8 +0 + 62 + 0 + 10 +13537.499996 + 20 +22175.429154 + 30 +0.0 + 11 +13548.79923 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A44 + 8 +0 + 62 + 0 + 10 +13499.999997 + 20 +22153.778518 + 30 +0.0 + 11 +13512.499997 + 21 +22175.429153 + 31 +0.0 + 0 +LINE + 5 +A45 + 8 +0 + 62 + 0 + 10 +13462.499997 + 20 +22132.127883 + 30 +0.0 + 11 +13474.999997 + 21 +22153.778518 + 31 +0.0 + 0 +LINE + 5 +A46 + 8 +0 + 62 + 0 + 10 +13427.611209 + 20 +22115.0 + 30 +0.0 + 11 +13437.499997 + 21 +22132.127883 + 31 +0.0 + 0 +LINE + 5 +A47 + 8 +0 + 62 + 0 + 10 +13462.499997 + 20 +22175.429153 + 30 +0.0 + 11 +13473.79923 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A48 + 8 +0 + 62 + 0 + 10 +13424.999997 + 20 +22153.778518 + 30 +0.0 + 11 +13437.499997 + 21 +22175.429153 + 31 +0.0 + 0 +LINE + 5 +A49 + 8 +0 + 62 + 0 + 10 +13387.499997 + 20 +22132.127883 + 30 +0.0 + 11 +13399.999997 + 21 +22153.778518 + 31 +0.0 + 0 +LINE + 5 +A4A + 8 +0 + 62 + 0 + 10 +13352.611209 + 20 +22115.0 + 30 +0.0 + 11 +13362.499997 + 21 +22132.127883 + 31 +0.0 + 0 +LINE + 5 +A4B + 8 +0 + 62 + 0 + 10 +13387.499997 + 20 +22175.429153 + 30 +0.0 + 11 +13398.799231 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A4C + 8 +0 + 62 + 0 + 10 +13349.999997 + 20 +22153.778518 + 30 +0.0 + 11 +13362.499997 + 21 +22175.429153 + 31 +0.0 + 0 +LINE + 5 +A4D + 8 +0 + 62 + 0 + 10 +13312.499997 + 20 +22132.127883 + 30 +0.0 + 11 +13324.999997 + 21 +22153.778518 + 31 +0.0 + 0 +LINE + 5 +A4E + 8 +0 + 62 + 0 + 10 +13277.611209 + 20 +22115.0 + 30 +0.0 + 11 +13287.499997 + 21 +22132.127883 + 31 +0.0 + 0 +LINE + 5 +A4F + 8 +0 + 62 + 0 + 10 +13312.499997 + 20 +22175.429153 + 30 +0.0 + 11 +13323.799231 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A50 + 8 +0 + 62 + 0 + 10 +13274.999997 + 20 +22153.778518 + 30 +0.0 + 11 +13287.499997 + 21 +22175.429153 + 31 +0.0 + 0 +LINE + 5 +A51 + 8 +0 + 62 + 0 + 10 +13237.499997 + 20 +22132.127883 + 30 +0.0 + 11 +13249.999997 + 21 +22153.778518 + 31 +0.0 + 0 +LINE + 5 +A52 + 8 +0 + 62 + 0 + 10 +13202.61121 + 20 +22115.0 + 30 +0.0 + 11 +13212.499997 + 21 +22132.127883 + 31 +0.0 + 0 +LINE + 5 +A53 + 8 +0 + 62 + 0 + 10 +13237.499997 + 20 +22175.429153 + 30 +0.0 + 11 +13248.799231 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A54 + 8 +0 + 62 + 0 + 10 +13199.999998 + 20 +22153.778518 + 30 +0.0 + 11 +13212.499998 + 21 +22175.429153 + 31 +0.0 + 0 +LINE + 5 +A55 + 8 +0 + 62 + 0 + 10 +13162.499998 + 20 +22132.127883 + 30 +0.0 + 11 +13174.999998 + 21 +22153.778518 + 31 +0.0 + 0 +LINE + 5 +A56 + 8 +0 + 62 + 0 + 10 +13127.61121 + 20 +22115.0 + 30 +0.0 + 11 +13137.499998 + 21 +22132.127883 + 31 +0.0 + 0 +LINE + 5 +A57 + 8 +0 + 62 + 0 + 10 +13162.499998 + 20 +22175.429153 + 30 +0.0 + 11 +13173.799232 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A58 + 8 +0 + 62 + 0 + 10 +13124.999998 + 20 +22153.778518 + 30 +0.0 + 11 +13137.499998 + 21 +22175.429153 + 31 +0.0 + 0 +LINE + 5 +A59 + 8 +0 + 62 + 0 + 10 +13087.499998 + 20 +22132.127883 + 30 +0.0 + 11 +13099.999998 + 21 +22153.778518 + 31 +0.0 + 0 +LINE + 5 +A5A + 8 +0 + 62 + 0 + 10 +13052.61121 + 20 +22115.0 + 30 +0.0 + 11 +13062.499998 + 21 +22132.127882 + 31 +0.0 + 0 +LINE + 5 +A5B + 8 +0 + 62 + 0 + 10 +13087.499998 + 20 +22175.429153 + 30 +0.0 + 11 +13098.799232 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A5C + 8 +0 + 62 + 0 + 10 +13049.999998 + 20 +22153.778518 + 30 +0.0 + 11 +13062.499998 + 21 +22175.429153 + 31 +0.0 + 0 +LINE + 5 +A5D + 8 +0 + 62 + 0 + 10 +13012.499998 + 20 +22132.127882 + 30 +0.0 + 11 +13024.999998 + 21 +22153.778517 + 31 +0.0 + 0 +LINE + 5 +A5E + 8 +0 + 62 + 0 + 10 +12977.611211 + 20 +22115.0 + 30 +0.0 + 11 +12987.499998 + 21 +22132.127882 + 31 +0.0 + 0 +LINE + 5 +A5F + 8 +0 + 62 + 0 + 10 +13012.499998 + 20 +22175.429153 + 30 +0.0 + 11 +13023.799232 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A60 + 8 +0 + 62 + 0 + 10 +12974.999998 + 20 +22153.778517 + 30 +0.0 + 11 +12987.499998 + 21 +22175.429152 + 31 +0.0 + 0 +LINE + 5 +A61 + 8 +0 + 62 + 0 + 10 +12937.499998 + 20 +22132.127882 + 30 +0.0 + 11 +12949.999998 + 21 +22153.778517 + 31 +0.0 + 0 +LINE + 5 +A62 + 8 +0 + 62 + 0 + 10 +12902.611211 + 20 +22115.0 + 30 +0.0 + 11 +12912.499998 + 21 +22132.127882 + 31 +0.0 + 0 +LINE + 5 +A63 + 8 +0 + 62 + 0 + 10 +12937.499998 + 20 +22175.429152 + 30 +0.0 + 11 +12948.799233 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A64 + 8 +0 + 62 + 0 + 10 +12899.999999 + 20 +22153.778517 + 30 +0.0 + 11 +12912.499999 + 21 +22175.429152 + 31 +0.0 + 0 +LINE + 5 +A65 + 8 +0 + 62 + 0 + 10 +12862.499999 + 20 +22132.127882 + 30 +0.0 + 11 +12874.999999 + 21 +22153.778517 + 31 +0.0 + 0 +LINE + 5 +A66 + 8 +0 + 62 + 0 + 10 +12827.611211 + 20 +22115.0 + 30 +0.0 + 11 +12837.499999 + 21 +22132.127882 + 31 +0.0 + 0 +LINE + 5 +A67 + 8 +0 + 62 + 0 + 10 +12862.499999 + 20 +22175.429152 + 30 +0.0 + 11 +12873.799233 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A68 + 8 +0 + 62 + 0 + 10 +12824.999999 + 20 +22153.778517 + 30 +0.0 + 11 +12837.499999 + 21 +22175.429152 + 31 +0.0 + 0 +LINE + 5 +A69 + 8 +0 + 62 + 0 + 10 +12787.499999 + 20 +22132.127882 + 30 +0.0 + 11 +12799.999999 + 21 +22153.778517 + 31 +0.0 + 0 +LINE + 5 +A6A + 8 +0 + 62 + 0 + 10 +12752.611212 + 20 +22115.0 + 30 +0.0 + 11 +12762.499999 + 21 +22132.127882 + 31 +0.0 + 0 +LINE + 5 +A6B + 8 +0 + 62 + 0 + 10 +12787.499999 + 20 +22175.429152 + 30 +0.0 + 11 +12798.799233 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A6C + 8 +0 + 62 + 0 + 10 +12749.999999 + 20 +22153.778517 + 30 +0.0 + 11 +12762.499999 + 21 +22175.429152 + 31 +0.0 + 0 +LINE + 5 +A6D + 8 +0 + 62 + 0 + 10 +12712.499999 + 20 +22132.127882 + 30 +0.0 + 11 +12724.999999 + 21 +22153.778517 + 31 +0.0 + 0 +LINE + 5 +A6E + 8 +0 + 62 + 0 + 10 +12677.611212 + 20 +22115.0 + 30 +0.0 + 11 +12687.499999 + 21 +22132.127882 + 31 +0.0 + 0 +LINE + 5 +A6F + 8 +0 + 62 + 0 + 10 +12712.499999 + 20 +22175.429152 + 30 +0.0 + 11 +12723.799234 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A70 + 8 +0 + 62 + 0 + 10 +12674.999999 + 20 +22153.778517 + 30 +0.0 + 11 +12687.499999 + 21 +22175.429152 + 31 +0.0 + 0 +LINE + 5 +A71 + 8 +0 + 62 + 0 + 10 +12637.499999 + 20 +22132.127882 + 30 +0.0 + 11 +12649.999999 + 21 +22153.778517 + 31 +0.0 + 0 +LINE + 5 +A72 + 8 +0 + 62 + 0 + 10 +12602.611212 + 20 +22115.0 + 30 +0.0 + 11 +12612.499999 + 21 +22132.127882 + 31 +0.0 + 0 +LINE + 5 +A73 + 8 +0 + 62 + 0 + 10 +12637.499999 + 20 +22175.429152 + 30 +0.0 + 11 +12648.799234 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A74 + 8 +0 + 62 + 0 + 10 +12600.0 + 20 +22153.778517 + 30 +0.0 + 11 +12612.5 + 21 +22175.429152 + 31 +0.0 + 0 +LINE + 5 +A75 + 8 +0 + 62 + 0 + 10 +12562.5 + 20 +22132.127882 + 30 +0.0 + 11 +12575.0 + 21 +22153.778517 + 31 +0.0 + 0 +LINE + 5 +A76 + 8 +0 + 62 + 0 + 10 +12527.611213 + 20 +22115.0 + 30 +0.0 + 11 +12537.5 + 21 +22132.127881 + 31 +0.0 + 0 +LINE + 5 +A77 + 8 +0 + 62 + 0 + 10 +12562.5 + 20 +22175.429152 + 30 +0.0 + 11 +12573.799234 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A78 + 8 +0 + 62 + 0 + 10 +12525.0 + 20 +22153.778517 + 30 +0.0 + 11 +12537.5 + 21 +22175.429152 + 31 +0.0 + 0 +LINE + 5 +A79 + 8 +0 + 62 + 0 + 10 +12487.5 + 20 +22132.127881 + 30 +0.0 + 11 +12500.0 + 21 +22153.778516 + 31 +0.0 + 0 +LINE + 5 +A7A + 8 +0 + 62 + 0 + 10 +12452.611213 + 20 +22115.0 + 30 +0.0 + 11 +12462.5 + 21 +22132.127881 + 31 +0.0 + 0 +LINE + 5 +A7B + 8 +0 + 62 + 0 + 10 +12487.5 + 20 +22175.429152 + 30 +0.0 + 11 +12498.799235 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A7C + 8 +0 + 62 + 0 + 10 +12450.0 + 20 +22153.778516 + 30 +0.0 + 11 +12462.5 + 21 +22175.429151 + 31 +0.0 + 0 +LINE + 5 +A7D + 8 +0 + 62 + 0 + 10 +12412.5 + 20 +22132.127881 + 30 +0.0 + 11 +12425.0 + 21 +22153.778516 + 31 +0.0 + 0 +LINE + 5 +A7E + 8 +0 + 62 + 0 + 10 +12377.611213 + 20 +22115.0 + 30 +0.0 + 11 +12387.5 + 21 +22132.127881 + 31 +0.0 + 0 +LINE + 5 +A7F + 8 +0 + 62 + 0 + 10 +12412.5 + 20 +22175.429151 + 30 +0.0 + 11 +12423.799235 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A80 + 8 +0 + 62 + 0 + 10 +12375.0 + 20 +22153.778516 + 30 +0.0 + 11 +12387.5 + 21 +22175.429151 + 31 +0.0 + 0 +LINE + 5 +A81 + 8 +0 + 62 + 0 + 10 +12337.5 + 20 +22132.127881 + 30 +0.0 + 11 +12350.0 + 21 +22153.778516 + 31 +0.0 + 0 +LINE + 5 +A82 + 8 +0 + 62 + 0 + 10 +12302.611214 + 20 +22115.0 + 30 +0.0 + 11 +12312.5 + 21 +22132.127881 + 31 +0.0 + 0 +LINE + 5 +A83 + 8 +0 + 62 + 0 + 10 +12337.5 + 20 +22175.429151 + 30 +0.0 + 11 +12348.799235 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A84 + 8 +0 + 62 + 0 + 10 +12300.0 + 20 +22153.778516 + 30 +0.0 + 11 +12312.5 + 21 +22175.429151 + 31 +0.0 + 0 +LINE + 5 +A85 + 8 +0 + 62 + 0 + 10 +12262.500001 + 20 +22132.127881 + 30 +0.0 + 11 +12275.000001 + 21 +22153.778516 + 31 +0.0 + 0 +LINE + 5 +A86 + 8 +0 + 62 + 0 + 10 +12227.611214 + 20 +22115.0 + 30 +0.0 + 11 +12237.500001 + 21 +22132.127881 + 31 +0.0 + 0 +LINE + 5 +A87 + 8 +0 + 62 + 0 + 10 +12262.500001 + 20 +22175.429151 + 30 +0.0 + 11 +12273.799236 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A88 + 8 +0 + 62 + 0 + 10 +12225.000001 + 20 +22153.778516 + 30 +0.0 + 11 +12237.500001 + 21 +22175.429151 + 31 +0.0 + 0 +LINE + 5 +A89 + 8 +0 + 62 + 0 + 10 +12187.500001 + 20 +22132.127881 + 30 +0.0 + 11 +12200.000001 + 21 +22153.778516 + 31 +0.0 + 0 +LINE + 5 +A8A + 8 +0 + 62 + 0 + 10 +12152.611214 + 20 +22115.0 + 30 +0.0 + 11 +12162.500001 + 21 +22132.127881 + 31 +0.0 + 0 +LINE + 5 +A8B + 8 +0 + 62 + 0 + 10 +12187.500001 + 20 +22175.429151 + 30 +0.0 + 11 +12198.799236 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A8C + 8 +0 + 62 + 0 + 10 +12150.000001 + 20 +22153.778516 + 30 +0.0 + 11 +12162.500001 + 21 +22175.429151 + 31 +0.0 + 0 +LINE + 5 +A8D + 8 +0 + 62 + 0 + 10 +12112.500001 + 20 +22132.127881 + 30 +0.0 + 11 +12125.000001 + 21 +22153.778516 + 31 +0.0 + 0 +LINE + 5 +A8E + 8 +0 + 62 + 0 + 10 +12077.611215 + 20 +22115.0 + 30 +0.0 + 11 +12087.500001 + 21 +22132.127881 + 31 +0.0 + 0 +LINE + 5 +A8F + 8 +0 + 62 + 0 + 10 +12112.500001 + 20 +22175.429151 + 30 +0.0 + 11 +12123.799236 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A90 + 8 +0 + 62 + 0 + 10 +12075.000001 + 20 +22153.778516 + 30 +0.0 + 11 +12087.500001 + 21 +22175.429151 + 31 +0.0 + 0 +LINE + 5 +A91 + 8 +0 + 62 + 0 + 10 +12037.500001 + 20 +22132.127881 + 30 +0.0 + 11 +12050.000001 + 21 +22153.778516 + 31 +0.0 + 0 +LINE + 5 +A92 + 8 +0 + 62 + 0 + 10 +12002.611215 + 20 +22115.0 + 30 +0.0 + 11 +12012.500001 + 21 +22132.12788 + 31 +0.0 + 0 +LINE + 5 +A93 + 8 +0 + 62 + 0 + 10 +12037.500001 + 20 +22175.429151 + 30 +0.0 + 11 +12048.799237 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A94 + 8 +0 + 62 + 0 + 10 +12000.000001 + 20 +22153.778516 + 30 +0.0 + 11 +12012.500001 + 21 +22175.429151 + 31 +0.0 + 0 +LINE + 5 +A95 + 8 +0 + 62 + 0 + 10 +11962.500002 + 20 +22132.12788 + 30 +0.0 + 11 +11975.000002 + 21 +22153.778515 + 31 +0.0 + 0 +LINE + 5 +A96 + 8 +0 + 62 + 0 + 10 +11927.611215 + 20 +22115.0 + 30 +0.0 + 11 +11937.500002 + 21 +22132.12788 + 31 +0.0 + 0 +LINE + 5 +A97 + 8 +0 + 62 + 0 + 10 +11962.500002 + 20 +22175.429151 + 30 +0.0 + 11 +11973.799237 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A98 + 8 +0 + 62 + 0 + 10 +11925.000002 + 20 +22153.778515 + 30 +0.0 + 11 +11937.500002 + 21 +22175.42915 + 31 +0.0 + 0 +LINE + 5 +A99 + 8 +0 + 62 + 0 + 10 +11887.500002 + 20 +22132.12788 + 30 +0.0 + 11 +11900.000002 + 21 +22153.778515 + 31 +0.0 + 0 +LINE + 5 +A9A + 8 +0 + 62 + 0 + 10 +11852.611216 + 20 +22115.0 + 30 +0.0 + 11 +11862.500002 + 21 +22132.12788 + 31 +0.0 + 0 +LINE + 5 +A9B + 8 +0 + 62 + 0 + 10 +11887.500002 + 20 +22175.42915 + 30 +0.0 + 11 +11898.799237 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +A9C + 8 +0 + 62 + 0 + 10 +11850.000002 + 20 +22153.778515 + 30 +0.0 + 11 +11862.500002 + 21 +22175.42915 + 31 +0.0 + 0 +LINE + 5 +A9D + 8 +0 + 62 + 0 + 10 +11812.500002 + 20 +22132.12788 + 30 +0.0 + 11 +11825.000002 + 21 +22153.778515 + 31 +0.0 + 0 +LINE + 5 +A9E + 8 +0 + 62 + 0 + 10 +11777.611216 + 20 +22115.0 + 30 +0.0 + 11 +11787.500002 + 21 +22132.12788 + 31 +0.0 + 0 +LINE + 5 +A9F + 8 +0 + 62 + 0 + 10 +11812.500002 + 20 +22175.42915 + 30 +0.0 + 11 +11823.799238 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +AA0 + 8 +0 + 62 + 0 + 10 +11775.000002 + 20 +22153.778515 + 30 +0.0 + 11 +11787.500002 + 21 +22175.42915 + 31 +0.0 + 0 +LINE + 5 +AA1 + 8 +0 + 62 + 0 + 10 +11737.500002 + 20 +22132.12788 + 30 +0.0 + 11 +11750.000002 + 21 +22153.778515 + 31 +0.0 + 0 +LINE + 5 +AA2 + 8 +0 + 62 + 0 + 10 +11702.611216 + 20 +22115.0 + 30 +0.0 + 11 +11712.500002 + 21 +22132.12788 + 31 +0.0 + 0 +LINE + 5 +AA3 + 8 +0 + 62 + 0 + 10 +11737.500002 + 20 +22175.42915 + 30 +0.0 + 11 +11748.799238 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +AA4 + 8 +0 + 62 + 0 + 10 +11700.000002 + 20 +22153.778515 + 30 +0.0 + 11 +11712.500002 + 21 +22175.42915 + 31 +0.0 + 0 +LINE + 5 +AA5 + 8 +0 + 62 + 0 + 10 +11662.500003 + 20 +22132.12788 + 30 +0.0 + 11 +11675.000003 + 21 +22153.778515 + 31 +0.0 + 0 +LINE + 5 +AA6 + 8 +0 + 62 + 0 + 10 +11627.611217 + 20 +22115.0 + 30 +0.0 + 11 +11637.500003 + 21 +22132.12788 + 31 +0.0 + 0 +LINE + 5 +AA7 + 8 +0 + 62 + 0 + 10 +11662.500003 + 20 +22175.42915 + 30 +0.0 + 11 +11673.799238 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +AA8 + 8 +0 + 62 + 0 + 10 +11625.000003 + 20 +22153.778515 + 30 +0.0 + 11 +11637.500003 + 21 +22175.42915 + 31 +0.0 + 0 +LINE + 5 +AA9 + 8 +0 + 62 + 0 + 10 +11587.500003 + 20 +22132.12788 + 30 +0.0 + 11 +11600.000003 + 21 +22153.778515 + 31 +0.0 + 0 +LINE + 5 +AAA + 8 +0 + 62 + 0 + 10 +11552.611217 + 20 +22115.0 + 30 +0.0 + 11 +11562.500003 + 21 +22132.12788 + 31 +0.0 + 0 +LINE + 5 +AAB + 8 +0 + 62 + 0 + 10 +11587.500003 + 20 +22175.42915 + 30 +0.0 + 11 +11598.799238 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +AAC + 8 +0 + 62 + 0 + 10 +11550.000003 + 20 +22153.778515 + 30 +0.0 + 11 +11562.500003 + 21 +22175.42915 + 31 +0.0 + 0 +LINE + 5 +AAD + 8 +0 + 62 + 0 + 10 +11512.500003 + 20 +22132.12788 + 30 +0.0 + 11 +11525.000003 + 21 +22153.778515 + 31 +0.0 + 0 +LINE + 5 +AAE + 8 +0 + 62 + 0 + 10 +11477.611217 + 20 +22115.0 + 30 +0.0 + 11 +11487.500003 + 21 +22132.127879 + 31 +0.0 + 0 +LINE + 5 +AAF + 8 +0 + 62 + 0 + 10 +11512.500003 + 20 +22175.42915 + 30 +0.0 + 11 +11523.799239 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +AB0 + 8 +0 + 62 + 0 + 10 +11475.000003 + 20 +22153.778515 + 30 +0.0 + 11 +11487.500003 + 21 +22175.42915 + 31 +0.0 + 0 +LINE + 5 +AB1 + 8 +0 + 62 + 0 + 10 +11437.500003 + 20 +22132.127879 + 30 +0.0 + 11 +11450.000003 + 21 +22153.778514 + 31 +0.0 + 0 +LINE + 5 +AB2 + 8 +0 + 62 + 0 + 10 +11402.611218 + 20 +22115.0 + 30 +0.0 + 11 +11412.500003 + 21 +22132.127879 + 31 +0.0 + 0 +LINE + 5 +AB3 + 8 +0 + 62 + 0 + 10 +11437.500003 + 20 +22175.42915 + 30 +0.0 + 11 +11448.799239 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +AB4 + 8 +0 + 62 + 0 + 10 +11400.000003 + 20 +22153.778514 + 30 +0.0 + 11 +11412.500003 + 21 +22175.429149 + 31 +0.0 + 0 +LINE + 5 +AB5 + 8 +0 + 62 + 0 + 10 +11362.500004 + 20 +22132.127879 + 30 +0.0 + 11 +11375.000004 + 21 +22153.778514 + 31 +0.0 + 0 +LINE + 5 +AB6 + 8 +0 + 62 + 0 + 10 +11327.611218 + 20 +22115.0 + 30 +0.0 + 11 +11337.500004 + 21 +22132.127879 + 31 +0.0 + 0 +LINE + 5 +AB7 + 8 +0 + 62 + 0 + 10 +11362.500004 + 20 +22175.429149 + 30 +0.0 + 11 +11373.799239 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +AB8 + 8 +0 + 62 + 0 + 10 +11325.000004 + 20 +22153.778514 + 30 +0.0 + 11 +11337.500004 + 21 +22175.429149 + 31 +0.0 + 0 +LINE + 5 +AB9 + 8 +0 + 62 + 0 + 10 +11287.500004 + 20 +22132.127879 + 30 +0.0 + 11 +11300.000004 + 21 +22153.778514 + 31 +0.0 + 0 +LINE + 5 +ABA + 8 +0 + 62 + 0 + 10 +11252.611218 + 20 +22115.0 + 30 +0.0 + 11 +11262.500004 + 21 +22132.127879 + 31 +0.0 + 0 +LINE + 5 +ABB + 8 +0 + 62 + 0 + 10 +11287.500004 + 20 +22175.429149 + 30 +0.0 + 11 +11298.79924 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +ABC + 8 +0 + 62 + 0 + 10 +11250.000004 + 20 +22153.778514 + 30 +0.0 + 11 +11262.500004 + 21 +22175.429149 + 31 +0.0 + 0 +LINE + 5 +ABD + 8 +0 + 62 + 0 + 10 +13574.999996 + 20 +22153.778519 + 30 +0.0 + 11 +13587.499996 + 21 +22175.429154 + 31 +0.0 + 0 +LINE + 5 +ABE + 8 +0 + 62 + 0 + 10 +13577.611208 + 20 +22115.0 + 30 +0.0 + 11 +13587.499996 + 21 +22132.127883 + 31 +0.0 + 0 +LINE + 5 +ABF + 8 +0 + 62 + 0 + 10 +13612.499996 + 20 +22175.429154 + 30 +0.0 + 11 +13623.79923 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +AC0 + 8 +0 + 62 + 0 + 10 +13612.499996 + 20 +22132.127884 + 30 +0.0 + 11 +13624.999996 + 21 +22153.778519 + 31 +0.0 + 0 +LINE + 5 +AC1 + 8 +0 + 62 + 0 + 10 +13649.999996 + 20 +22153.778519 + 30 +0.0 + 11 +13662.499996 + 21 +22175.429154 + 31 +0.0 + 0 +LINE + 5 +AC2 + 8 +0 + 62 + 0 + 10 +13652.611208 + 20 +22115.0 + 30 +0.0 + 11 +13662.499996 + 21 +22132.127884 + 31 +0.0 + 0 +LINE + 5 +AC3 + 8 +0 + 62 + 0 + 10 +13687.499996 + 20 +22175.429154 + 30 +0.0 + 11 +13698.799229 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +AC4 + 8 +0 + 62 + 0 + 10 +13687.499996 + 20 +22132.127884 + 30 +0.0 + 11 +13699.999996 + 21 +22153.778519 + 31 +0.0 + 0 +LINE + 5 +AC5 + 8 +0 + 62 + 0 + 10 +13724.999996 + 20 +22153.778519 + 30 +0.0 + 11 +13737.499996 + 21 +22175.429154 + 31 +0.0 + 0 +LINE + 5 +AC6 + 8 +0 + 62 + 0 + 10 +13727.611207 + 20 +22115.0 + 30 +0.0 + 11 +13737.499996 + 21 +22132.127884 + 31 +0.0 + 0 +LINE + 5 +AC7 + 8 +0 + 62 + 0 + 10 +13762.499996 + 20 +22175.429154 + 30 +0.0 + 11 +13773.799229 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +AC8 + 8 +0 + 62 + 0 + 10 +13762.499996 + 20 +22132.127884 + 30 +0.0 + 11 +13774.999996 + 21 +22153.778519 + 31 +0.0 + 0 +LINE + 5 +AC9 + 8 +0 + 62 + 0 + 10 +13799.999996 + 20 +22153.778519 + 30 +0.0 + 11 +13812.499996 + 21 +22175.429154 + 31 +0.0 + 0 +LINE + 5 +ACA + 8 +0 + 62 + 0 + 10 +13802.611207 + 20 +22115.0 + 30 +0.0 + 11 +13812.499995 + 21 +22132.127884 + 31 +0.0 + 0 +LINE + 5 +ACB + 8 +0 + 62 + 0 + 10 +13837.499995 + 20 +22175.429154 + 30 +0.0 + 11 +13848.799229 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +ACC + 8 +0 + 62 + 0 + 10 +13837.499995 + 20 +22132.127884 + 30 +0.0 + 11 +13849.999995 + 21 +22153.778519 + 31 +0.0 + 0 +LINE + 5 +ACD + 8 +0 + 62 + 0 + 10 +13874.999995 + 20 +22153.778519 + 30 +0.0 + 11 +13887.499995 + 21 +22175.429154 + 31 +0.0 + 0 +LINE + 5 +ACE + 8 +0 + 62 + 0 + 10 +13877.611207 + 20 +22115.0 + 30 +0.0 + 11 +13887.499995 + 21 +22132.127884 + 31 +0.0 + 0 +LINE + 5 +ACF + 8 +0 + 62 + 0 + 10 +13912.499995 + 20 +22175.429154 + 30 +0.0 + 11 +13923.799228 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +AD0 + 8 +0 + 62 + 0 + 10 +13912.499995 + 20 +22132.127884 + 30 +0.0 + 11 +13924.999995 + 21 +22153.778519 + 31 +0.0 + 0 +LINE + 5 +AD1 + 8 +0 + 62 + 0 + 10 +13949.999995 + 20 +22153.778519 + 30 +0.0 + 11 +13962.499995 + 21 +22175.429154 + 31 +0.0 + 0 +LINE + 5 +AD2 + 8 +0 + 62 + 0 + 10 +13952.611206 + 20 +22115.0 + 30 +0.0 + 11 +13962.499995 + 21 +22132.127884 + 31 +0.0 + 0 +LINE + 5 +AD3 + 8 +0 + 62 + 0 + 10 +13987.499995 + 20 +22175.429154 + 30 +0.0 + 11 +13998.799228 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +AD4 + 8 +0 + 62 + 0 + 10 +13987.499995 + 20 +22132.127884 + 30 +0.0 + 11 +13999.999995 + 21 +22153.778519 + 31 +0.0 + 0 +LINE + 5 +AD5 + 8 +0 + 62 + 0 + 10 +14024.999995 + 20 +22153.778519 + 30 +0.0 + 11 +14037.499995 + 21 +22175.429154 + 31 +0.0 + 0 +LINE + 5 +AD6 + 8 +0 + 62 + 0 + 10 +14027.611206 + 20 +22115.0 + 30 +0.0 + 11 +14037.499995 + 21 +22132.127884 + 31 +0.0 + 0 +LINE + 5 +AD7 + 8 +0 + 62 + 0 + 10 +14062.499995 + 20 +22175.429155 + 30 +0.0 + 11 +14073.799228 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +AD8 + 8 +0 + 62 + 0 + 10 +14062.499995 + 20 +22132.127884 + 30 +0.0 + 11 +14074.999995 + 21 +22153.778519 + 31 +0.0 + 0 +LINE + 5 +AD9 + 8 +0 + 62 + 0 + 10 +14099.999995 + 20 +22153.77852 + 30 +0.0 + 11 +14112.499995 + 21 +22175.429155 + 31 +0.0 + 0 +LINE + 5 +ADA + 8 +0 + 62 + 0 + 10 +14102.611206 + 20 +22115.0 + 30 +0.0 + 11 +14112.499995 + 21 +22132.127884 + 31 +0.0 + 0 +LINE + 5 +ADB + 8 +0 + 62 + 0 + 10 +14137.499995 + 20 +22175.429155 + 30 +0.0 + 11 +14148.799227 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +ADC + 8 +0 + 62 + 0 + 10 +14137.499994 + 20 +22132.127885 + 30 +0.0 + 11 +14149.999994 + 21 +22153.77852 + 31 +0.0 + 0 +LINE + 5 +ADD + 8 +0 + 62 + 0 + 10 +14174.999994 + 20 +22153.77852 + 30 +0.0 + 11 +14187.499994 + 21 +22175.429155 + 31 +0.0 + 0 +LINE + 5 +ADE + 8 +0 + 62 + 0 + 10 +14177.611205 + 20 +22115.0 + 30 +0.0 + 11 +14187.499994 + 21 +22132.127885 + 31 +0.0 + 0 +LINE + 5 +ADF + 8 +0 + 62 + 0 + 10 +14212.499994 + 20 +22175.429155 + 30 +0.0 + 11 +14223.799227 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +AE0 + 8 +0 + 62 + 0 + 10 +14212.499994 + 20 +22132.127885 + 30 +0.0 + 11 +14224.999994 + 21 +22153.77852 + 31 +0.0 + 0 +LINE + 5 +AE1 + 8 +0 + 62 + 0 + 10 +14249.999994 + 20 +22153.77852 + 30 +0.0 + 11 +14262.499994 + 21 +22175.429155 + 31 +0.0 + 0 +LINE + 5 +AE2 + 8 +0 + 62 + 0 + 10 +14252.611205 + 20 +22115.0 + 30 +0.0 + 11 +14262.499994 + 21 +22132.127885 + 31 +0.0 + 0 +LINE + 5 +AE3 + 8 +0 + 62 + 0 + 10 +14287.499994 + 20 +22175.429155 + 30 +0.0 + 11 +14298.799227 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +AE4 + 8 +0 + 62 + 0 + 10 +14287.499994 + 20 +22132.127885 + 30 +0.0 + 11 +14299.999994 + 21 +22153.77852 + 31 +0.0 + 0 +LINE + 5 +AE5 + 8 +0 + 62 + 0 + 10 +14324.999994 + 20 +22153.77852 + 30 +0.0 + 11 +14337.499994 + 21 +22175.429155 + 31 +0.0 + 0 +LINE + 5 +AE6 + 8 +0 + 62 + 0 + 10 +14327.611205 + 20 +22115.0 + 30 +0.0 + 11 +14337.499994 + 21 +22132.127885 + 31 +0.0 + 0 +LINE + 5 +AE7 + 8 +0 + 62 + 0 + 10 +14362.499994 + 20 +22175.429155 + 30 +0.0 + 11 +14373.799226 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +AE8 + 8 +0 + 62 + 0 + 10 +14362.499994 + 20 +22132.127885 + 30 +0.0 + 11 +14374.999994 + 21 +22153.77852 + 31 +0.0 + 0 +LINE + 5 +AE9 + 8 +0 + 62 + 0 + 10 +14399.999994 + 20 +22153.77852 + 30 +0.0 + 11 +14412.499994 + 21 +22175.429155 + 31 +0.0 + 0 +LINE + 5 +AEA + 8 +0 + 62 + 0 + 10 +14402.611204 + 20 +22115.0 + 30 +0.0 + 11 +14412.499994 + 21 +22132.127885 + 31 +0.0 + 0 +LINE + 5 +AEB + 8 +0 + 62 + 0 + 10 +14437.499994 + 20 +22175.429155 + 30 +0.0 + 11 +14448.799226 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +AEC + 8 +0 + 62 + 0 + 10 +14437.499993 + 20 +22132.127885 + 30 +0.0 + 11 +14449.999993 + 21 +22153.77852 + 31 +0.0 + 0 +LINE + 5 +AED + 8 +0 + 62 + 0 + 10 +14474.999993 + 20 +22153.77852 + 30 +0.0 + 11 +14487.499993 + 21 +22175.429155 + 31 +0.0 + 0 +LINE + 5 +AEE + 8 +0 + 62 + 0 + 10 +14477.611204 + 20 +22115.0 + 30 +0.0 + 11 +14487.499993 + 21 +22132.127885 + 31 +0.0 + 0 +LINE + 5 +AEF + 8 +0 + 62 + 0 + 10 +14512.499993 + 20 +22175.429155 + 30 +0.0 + 11 +14523.799226 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +AF0 + 8 +0 + 62 + 0 + 10 +14512.499993 + 20 +22132.127885 + 30 +0.0 + 11 +14524.999993 + 21 +22153.77852 + 31 +0.0 + 0 +LINE + 5 +AF1 + 8 +0 + 62 + 0 + 10 +14549.999993 + 20 +22153.77852 + 30 +0.0 + 11 +14562.499993 + 21 +22175.429155 + 31 +0.0 + 0 +LINE + 5 +AF2 + 8 +0 + 62 + 0 + 10 +14552.611204 + 20 +22115.0 + 30 +0.0 + 11 +14562.499993 + 21 +22132.127885 + 31 +0.0 + 0 +LINE + 5 +AF3 + 8 +0 + 62 + 0 + 10 +14587.499993 + 20 +22175.429156 + 30 +0.0 + 11 +14598.799225 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +AF4 + 8 +0 + 62 + 0 + 10 +14587.499993 + 20 +22132.127885 + 30 +0.0 + 11 +14599.999993 + 21 +22153.77852 + 31 +0.0 + 0 +LINE + 5 +AF5 + 8 +0 + 62 + 0 + 10 +14624.999993 + 20 +22153.778521 + 30 +0.0 + 11 +14637.499993 + 21 +22175.429156 + 31 +0.0 + 0 +LINE + 5 +AF6 + 8 +0 + 62 + 0 + 10 +14627.611204 + 20 +22115.0 + 30 +0.0 + 11 +14637.499993 + 21 +22132.127885 + 31 +0.0 + 0 +LINE + 5 +AF7 + 8 +0 + 62 + 0 + 10 +14662.499993 + 20 +22175.429156 + 30 +0.0 + 11 +14673.799225 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +AF8 + 8 +0 + 62 + 0 + 10 +14662.499993 + 20 +22132.127886 + 30 +0.0 + 11 +14674.999993 + 21 +22153.778521 + 31 +0.0 + 0 +LINE + 5 +AF9 + 8 +0 + 62 + 0 + 10 +14699.999993 + 20 +22153.778521 + 30 +0.0 + 11 +14712.499993 + 21 +22175.429156 + 31 +0.0 + 0 +LINE + 5 +AFA + 8 +0 + 62 + 0 + 10 +14702.611203 + 20 +22115.0 + 30 +0.0 + 11 +14712.499993 + 21 +22132.127886 + 31 +0.0 + 0 +LINE + 5 +AFB + 8 +0 + 62 + 0 + 10 +14737.499993 + 20 +22175.429156 + 30 +0.0 + 11 +14748.799225 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +AFC + 8 +0 + 62 + 0 + 10 +14737.499992 + 20 +22132.127886 + 30 +0.0 + 11 +14749.999992 + 21 +22153.778521 + 31 +0.0 + 0 +LINE + 5 +AFD + 8 +0 + 62 + 0 + 10 +14774.999992 + 20 +22153.778521 + 30 +0.0 + 11 +14787.499992 + 21 +22175.429156 + 31 +0.0 + 0 +LINE + 5 +AFE + 8 +0 + 62 + 0 + 10 +14777.611203 + 20 +22115.0 + 30 +0.0 + 11 +14787.499992 + 21 +22132.127886 + 31 +0.0 + 0 +LINE + 5 +AFF + 8 +0 + 62 + 0 + 10 +14812.499992 + 20 +22175.429156 + 30 +0.0 + 11 +14823.799224 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +B00 + 8 +0 + 62 + 0 + 10 +14812.499992 + 20 +22132.127886 + 30 +0.0 + 11 +14824.999992 + 21 +22153.778521 + 31 +0.0 + 0 +LINE + 5 +B01 + 8 +0 + 62 + 0 + 10 +14849.999992 + 20 +22153.778521 + 30 +0.0 + 11 +14862.499992 + 21 +22175.429156 + 31 +0.0 + 0 +LINE + 5 +B02 + 8 +0 + 62 + 0 + 10 +14852.611203 + 20 +22115.0 + 30 +0.0 + 11 +14862.499992 + 21 +22132.127886 + 31 +0.0 + 0 +LINE + 5 +B03 + 8 +0 + 62 + 0 + 10 +14887.499992 + 20 +22175.429156 + 30 +0.0 + 11 +14898.799224 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +B04 + 8 +0 + 62 + 0 + 10 +14887.499992 + 20 +22132.127886 + 30 +0.0 + 11 +14899.999992 + 21 +22153.778521 + 31 +0.0 + 0 +LINE + 5 +B05 + 8 +0 + 62 + 0 + 10 +14924.999992 + 20 +22153.778521 + 30 +0.0 + 11 +14937.499992 + 21 +22175.429156 + 31 +0.0 + 0 +LINE + 5 +B06 + 8 +0 + 62 + 0 + 10 +14927.611202 + 20 +22115.0 + 30 +0.0 + 11 +14937.499992 + 21 +22132.127886 + 31 +0.0 + 0 +LINE + 5 +B07 + 8 +0 + 62 + 0 + 10 +14962.499992 + 20 +22175.429156 + 30 +0.0 + 11 +14973.799224 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +B08 + 8 +0 + 62 + 0 + 10 +14962.499992 + 20 +22132.127886 + 30 +0.0 + 11 +14974.999992 + 21 +22153.778521 + 31 +0.0 + 0 +LINE + 5 +B09 + 8 +0 + 62 + 0 + 10 +14999.999992 + 20 +22153.778521 + 30 +0.0 + 11 +15012.499992 + 21 +22175.429156 + 31 +0.0 + 0 +LINE + 5 +B0A + 8 +0 + 62 + 0 + 10 +15002.611202 + 20 +22115.0 + 30 +0.0 + 11 +15012.499992 + 21 +22132.127886 + 31 +0.0 + 0 +LINE + 5 +B0B + 8 +0 + 62 + 0 + 10 +15037.499992 + 20 +22175.429156 + 30 +0.0 + 11 +15048.799223 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +B0C + 8 +0 + 62 + 0 + 10 +15037.499991 + 20 +22132.127886 + 30 +0.0 + 11 +15049.999991 + 21 +22153.778521 + 31 +0.0 + 0 +LINE + 5 +B0D + 8 +0 + 62 + 0 + 10 +15074.999991 + 20 +22153.778521 + 30 +0.0 + 11 +15087.499991 + 21 +22175.429156 + 31 +0.0 + 0 +LINE + 5 +B0E + 8 +0 + 62 + 0 + 10 +15077.611202 + 20 +22115.0 + 30 +0.0 + 11 +15087.499991 + 21 +22132.127886 + 31 +0.0 + 0 +LINE + 5 +B0F + 8 +0 + 62 + 0 + 10 +15112.499991 + 20 +22175.429156 + 30 +0.0 + 11 +15123.799223 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +B10 + 8 +0 + 62 + 0 + 10 +15112.499991 + 20 +22132.127886 + 30 +0.0 + 11 +15124.999991 + 21 +22153.778521 + 31 +0.0 + 0 +LINE + 5 +B11 + 8 +0 + 62 + 0 + 10 +15149.999991 + 20 +22153.778521 + 30 +0.0 + 11 +15162.499991 + 21 +22175.429157 + 31 +0.0 + 0 +LINE + 5 +B12 + 8 +0 + 62 + 0 + 10 +15152.611201 + 20 +22115.0 + 30 +0.0 + 11 +15162.499991 + 21 +22132.127886 + 31 +0.0 + 0 +LINE + 5 +B13 + 8 +0 + 62 + 0 + 10 +15187.499991 + 20 +22175.429157 + 30 +0.0 + 11 +15198.799223 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +B14 + 8 +0 + 62 + 0 + 10 +15187.499991 + 20 +22132.127886 + 30 +0.0 + 11 +15199.999991 + 21 +22153.778522 + 31 +0.0 + 0 +LINE + 5 +B15 + 8 +0 + 62 + 0 + 10 +15224.999991 + 20 +22153.778522 + 30 +0.0 + 11 +15237.499991 + 21 +22175.429157 + 31 +0.0 + 0 +LINE + 5 +B16 + 8 +0 + 62 + 0 + 10 +15227.611201 + 20 +22115.0 + 30 +0.0 + 11 +15237.499991 + 21 +22132.127887 + 31 +0.0 + 0 +LINE + 5 +B17 + 8 +0 + 62 + 0 + 10 +15262.499991 + 20 +22175.429157 + 30 +0.0 + 11 +15273.799222 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +B18 + 8 +0 + 62 + 0 + 10 +15262.499991 + 20 +22132.127887 + 30 +0.0 + 11 +15274.999991 + 21 +22153.778522 + 31 +0.0 + 0 +LINE + 5 +B19 + 8 +0 + 62 + 0 + 10 +15299.999991 + 20 +22153.778522 + 30 +0.0 + 11 +15312.499991 + 21 +22175.429157 + 31 +0.0 + 0 +LINE + 5 +B1A + 8 +0 + 62 + 0 + 10 +15302.611201 + 20 +22115.0 + 30 +0.0 + 11 +15312.499991 + 21 +22132.127887 + 31 +0.0 + 0 +LINE + 5 +B1B + 8 +0 + 62 + 0 + 10 +15337.499991 + 20 +22175.429157 + 30 +0.0 + 11 +15348.799222 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +B1C + 8 +0 + 62 + 0 + 10 +15337.49999 + 20 +22132.127887 + 30 +0.0 + 11 +15349.99999 + 21 +22153.778522 + 31 +0.0 + 0 +LINE + 5 +B1D + 8 +0 + 62 + 0 + 10 +15374.99999 + 20 +22153.778522 + 30 +0.0 + 11 +15387.49999 + 21 +22175.429157 + 31 +0.0 + 0 +LINE + 5 +B1E + 8 +0 + 62 + 0 + 10 +15377.6112 + 20 +22115.0 + 30 +0.0 + 11 +15387.49999 + 21 +22132.127887 + 31 +0.0 + 0 +LINE + 5 +B1F + 8 +0 + 62 + 0 + 10 +15412.49999 + 20 +22175.429157 + 30 +0.0 + 11 +15423.799222 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +B20 + 8 +0 + 62 + 0 + 10 +15412.49999 + 20 +22132.127887 + 30 +0.0 + 11 +15424.99999 + 21 +22153.778522 + 31 +0.0 + 0 +LINE + 5 +B21 + 8 +0 + 62 + 0 + 10 +15449.99999 + 20 +22153.778522 + 30 +0.0 + 11 +15462.49999 + 21 +22175.429157 + 31 +0.0 + 0 +LINE + 5 +B22 + 8 +0 + 62 + 0 + 10 +15452.6112 + 20 +22115.0 + 30 +0.0 + 11 +15462.49999 + 21 +22132.127887 + 31 +0.0 + 0 +LINE + 5 +B23 + 8 +0 + 62 + 0 + 10 +15487.49999 + 20 +22175.429157 + 30 +0.0 + 11 +15498.799221 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +B24 + 8 +0 + 62 + 0 + 10 +15487.49999 + 20 +22132.127887 + 30 +0.0 + 11 +15499.99999 + 21 +22153.778522 + 31 +0.0 + 0 +LINE + 5 +B25 + 8 +0 + 62 + 0 + 10 +15524.99999 + 20 +22153.778522 + 30 +0.0 + 11 +15537.49999 + 21 +22175.429157 + 31 +0.0 + 0 +LINE + 5 +B26 + 8 +0 + 62 + 0 + 10 +15527.6112 + 20 +22115.0 + 30 +0.0 + 11 +15537.49999 + 21 +22132.127887 + 31 +0.0 + 0 +LINE + 5 +B27 + 8 +0 + 62 + 0 + 10 +15562.49999 + 20 +22175.429157 + 30 +0.0 + 11 +15573.799221 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +B28 + 8 +0 + 62 + 0 + 10 +15562.49999 + 20 +22132.127887 + 30 +0.0 + 11 +15574.99999 + 21 +22153.778522 + 31 +0.0 + 0 +LINE + 5 +B29 + 8 +0 + 62 + 0 + 10 +15599.99999 + 20 +22153.778522 + 30 +0.0 + 11 +15612.49999 + 21 +22175.429157 + 31 +0.0 + 0 +LINE + 5 +B2A + 8 +0 + 62 + 0 + 10 +15602.611199 + 20 +22115.0 + 30 +0.0 + 11 +15612.49999 + 21 +22132.127887 + 31 +0.0 + 0 +LINE + 5 +B2B + 8 +0 + 62 + 0 + 10 +15637.49999 + 20 +22175.429157 + 30 +0.0 + 11 +15648.799221 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +B2C + 8 +0 + 62 + 0 + 10 +15637.49999 + 20 +22132.127887 + 30 +0.0 + 11 +15649.99999 + 21 +22153.778522 + 31 +0.0 + 0 +LINE + 5 +B2D + 8 +0 + 62 + 0 + 10 +15674.999989 + 20 +22153.778522 + 30 +0.0 + 11 +15687.499989 + 21 +22175.429158 + 31 +0.0 + 0 +LINE + 5 +B2E + 8 +0 + 62 + 0 + 10 +15677.611199 + 20 +22115.0 + 30 +0.0 + 11 +15687.499989 + 21 +22132.127887 + 31 +0.0 + 0 +LINE + 5 +B2F + 8 +0 + 62 + 0 + 10 +15712.499989 + 20 +22175.429158 + 30 +0.0 + 11 +15723.79922 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +B30 + 8 +0 + 62 + 0 + 10 +15712.499989 + 20 +22132.127887 + 30 +0.0 + 11 +15724.999989 + 21 +22153.778523 + 31 +0.0 + 0 +LINE + 5 +B31 + 8 +0 + 62 + 0 + 10 +15749.999989 + 20 +22153.778523 + 30 +0.0 + 11 +15762.499989 + 21 +22175.429158 + 31 +0.0 + 0 +LINE + 5 +B32 + 8 +0 + 62 + 0 + 10 +15752.611199 + 20 +22115.0 + 30 +0.0 + 11 +15762.499989 + 21 +22132.127888 + 31 +0.0 + 0 +LINE + 5 +B33 + 8 +0 + 62 + 0 + 10 +15787.499989 + 20 +22175.429158 + 30 +0.0 + 11 +15798.79922 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +B34 + 8 +0 + 62 + 0 + 10 +15787.499989 + 20 +22132.127888 + 30 +0.0 + 11 +15799.999989 + 21 +22153.778523 + 31 +0.0 + 0 +LINE + 5 +B35 + 8 +0 + 62 + 0 + 10 +15824.999989 + 20 +22153.778523 + 30 +0.0 + 11 +15837.499989 + 21 +22175.429158 + 31 +0.0 + 0 +LINE + 5 +B36 + 8 +0 + 62 + 0 + 10 +15827.611198 + 20 +22115.0 + 30 +0.0 + 11 +15837.499989 + 21 +22132.127888 + 31 +0.0 + 0 +LINE + 5 +B37 + 8 +0 + 62 + 0 + 10 +15862.499989 + 20 +22175.429158 + 30 +0.0 + 11 +15873.79922 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +B38 + 8 +0 + 62 + 0 + 10 +15862.499989 + 20 +22132.127888 + 30 +0.0 + 11 +15874.999989 + 21 +22153.778523 + 31 +0.0 + 0 +ENDBLK + 5 +B39 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X42 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X42 + 1 + + 0 +LINE + 5 +B3B + 8 +0 + 62 + 0 + 10 +16863.75 + 20 +22153.77846 + 30 +0.0 + 11 +16875.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +B3C + 8 +0 + 62 + 0 + 10 +16925.0 + 20 +22153.77846 + 30 +0.0 + 11 +16950.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +B3D + 8 +0 + 62 + 0 + 10 +17000.0 + 20 +22153.77846 + 30 +0.0 + 11 +17025.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +B3E + 8 +0 + 62 + 0 + 10 +17075.0 + 20 +22153.77846 + 30 +0.0 + 11 +17100.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +B3F + 8 +0 + 62 + 0 + 10 +17150.0 + 20 +22153.77846 + 30 +0.0 + 11 +17175.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +B40 + 8 +0 + 62 + 0 + 10 +17225.0 + 20 +22153.77846 + 30 +0.0 + 11 +17250.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +B41 + 8 +0 + 62 + 0 + 10 +17300.0 + 20 +22153.77846 + 30 +0.0 + 11 +17325.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +B42 + 8 +0 + 62 + 0 + 10 +17375.0 + 20 +22153.77846 + 30 +0.0 + 11 +17400.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +B43 + 8 +0 + 62 + 0 + 10 +17450.0 + 20 +22153.77846 + 30 +0.0 + 11 +17475.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +B44 + 8 +0 + 62 + 0 + 10 +17525.0 + 20 +22153.77846 + 30 +0.0 + 11 +17550.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +B45 + 8 +0 + 62 + 0 + 10 +17600.0 + 20 +22153.77846 + 30 +0.0 + 11 +17625.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +B46 + 8 +0 + 62 + 0 + 10 +17675.0 + 20 +22153.77846 + 30 +0.0 + 11 +17700.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +B47 + 8 +0 + 62 + 0 + 10 +17750.0 + 20 +22153.77846 + 30 +0.0 + 11 +17775.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +B48 + 8 +0 + 62 + 0 + 10 +17825.0 + 20 +22153.77846 + 30 +0.0 + 11 +17850.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +B49 + 8 +0 + 62 + 0 + 10 +17900.0 + 20 +22153.77846 + 30 +0.0 + 11 +17925.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +B4A + 8 +0 + 62 + 0 + 10 +17975.0 + 20 +22153.77846 + 30 +0.0 + 11 +18000.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +B4B + 8 +0 + 62 + 0 + 10 +18050.0 + 20 +22153.77846 + 30 +0.0 + 11 +18075.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +B4C + 8 +0 + 62 + 0 + 10 +18125.0 + 20 +22153.77846 + 30 +0.0 + 11 +18150.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +B4D + 8 +0 + 62 + 0 + 10 +18200.0 + 20 +22153.77846 + 30 +0.0 + 11 +18225.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +B4E + 8 +0 + 62 + 0 + 10 +18275.0 + 20 +22153.77846 + 30 +0.0 + 11 +18300.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +B4F + 8 +0 + 62 + 0 + 10 +18350.0 + 20 +22153.77846 + 30 +0.0 + 11 +18375.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +B50 + 8 +0 + 62 + 0 + 10 +18425.0 + 20 +22153.77846 + 30 +0.0 + 11 +18450.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +B51 + 8 +0 + 62 + 0 + 10 +18500.0 + 20 +22153.77846 + 30 +0.0 + 11 +18525.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +B52 + 8 +0 + 62 + 0 + 10 +18575.0 + 20 +22153.77846 + 30 +0.0 + 11 +18600.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +B53 + 8 +0 + 62 + 0 + 10 +18650.0 + 20 +22153.77846 + 30 +0.0 + 11 +18675.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +B54 + 8 +0 + 62 + 0 + 10 +18725.0 + 20 +22153.77846 + 30 +0.0 + 11 +18750.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +B55 + 8 +0 + 62 + 0 + 10 +16887.5 + 20 +22175.429095 + 30 +0.0 + 11 +16912.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +B56 + 8 +0 + 62 + 0 + 10 +16962.5 + 20 +22175.429095 + 30 +0.0 + 11 +16987.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +B57 + 8 +0 + 62 + 0 + 10 +17037.5 + 20 +22175.429095 + 30 +0.0 + 11 +17062.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +B58 + 8 +0 + 62 + 0 + 10 +17112.5 + 20 +22175.429095 + 30 +0.0 + 11 +17137.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +B59 + 8 +0 + 62 + 0 + 10 +17187.5 + 20 +22175.429095 + 30 +0.0 + 11 +17212.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +B5A + 8 +0 + 62 + 0 + 10 +17262.5 + 20 +22175.429095 + 30 +0.0 + 11 +17287.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +B5B + 8 +0 + 62 + 0 + 10 +17337.5 + 20 +22175.429095 + 30 +0.0 + 11 +17362.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +B5C + 8 +0 + 62 + 0 + 10 +17412.5 + 20 +22175.429095 + 30 +0.0 + 11 +17437.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +B5D + 8 +0 + 62 + 0 + 10 +17487.5 + 20 +22175.429095 + 30 +0.0 + 11 +17512.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +B5E + 8 +0 + 62 + 0 + 10 +17562.5 + 20 +22175.429095 + 30 +0.0 + 11 +17587.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +B5F + 8 +0 + 62 + 0 + 10 +17637.5 + 20 +22175.429095 + 30 +0.0 + 11 +17662.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +B60 + 8 +0 + 62 + 0 + 10 +17712.5 + 20 +22175.429095 + 30 +0.0 + 11 +17737.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +B61 + 8 +0 + 62 + 0 + 10 +17787.5 + 20 +22175.429095 + 30 +0.0 + 11 +17812.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +B62 + 8 +0 + 62 + 0 + 10 +17862.5 + 20 +22175.429095 + 30 +0.0 + 11 +17887.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +B63 + 8 +0 + 62 + 0 + 10 +17937.5 + 20 +22175.429095 + 30 +0.0 + 11 +17962.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +B64 + 8 +0 + 62 + 0 + 10 +18012.5 + 20 +22175.429095 + 30 +0.0 + 11 +18037.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +B65 + 8 +0 + 62 + 0 + 10 +18087.5 + 20 +22175.429095 + 30 +0.0 + 11 +18112.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +B66 + 8 +0 + 62 + 0 + 10 +18162.5 + 20 +22175.429095 + 30 +0.0 + 11 +18187.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +B67 + 8 +0 + 62 + 0 + 10 +18237.5 + 20 +22175.429095 + 30 +0.0 + 11 +18262.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +B68 + 8 +0 + 62 + 0 + 10 +18312.5 + 20 +22175.429095 + 30 +0.0 + 11 +18337.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +B69 + 8 +0 + 62 + 0 + 10 +18387.5 + 20 +22175.429095 + 30 +0.0 + 11 +18412.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +B6A + 8 +0 + 62 + 0 + 10 +18462.5 + 20 +22175.429095 + 30 +0.0 + 11 +18487.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +B6B + 8 +0 + 62 + 0 + 10 +18537.5 + 20 +22175.429095 + 30 +0.0 + 11 +18562.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +B6C + 8 +0 + 62 + 0 + 10 +18612.5 + 20 +22175.429095 + 30 +0.0 + 11 +18637.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +B6D + 8 +0 + 62 + 0 + 10 +18687.5 + 20 +22175.429095 + 30 +0.0 + 11 +18712.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +B6E + 8 +0 + 62 + 0 + 10 +16887.5 + 20 +22132.127825 + 30 +0.0 + 11 +16912.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +B6F + 8 +0 + 62 + 0 + 10 +16962.5 + 20 +22132.127825 + 30 +0.0 + 11 +16987.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +B70 + 8 +0 + 62 + 0 + 10 +17037.5 + 20 +22132.127825 + 30 +0.0 + 11 +17062.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +B71 + 8 +0 + 62 + 0 + 10 +17112.5 + 20 +22132.127825 + 30 +0.0 + 11 +17137.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +B72 + 8 +0 + 62 + 0 + 10 +17187.5 + 20 +22132.127825 + 30 +0.0 + 11 +17212.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +B73 + 8 +0 + 62 + 0 + 10 +17262.5 + 20 +22132.127825 + 30 +0.0 + 11 +17287.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +B74 + 8 +0 + 62 + 0 + 10 +17337.5 + 20 +22132.127825 + 30 +0.0 + 11 +17362.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +B75 + 8 +0 + 62 + 0 + 10 +17412.5 + 20 +22132.127825 + 30 +0.0 + 11 +17437.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +B76 + 8 +0 + 62 + 0 + 10 +17487.5 + 20 +22132.127825 + 30 +0.0 + 11 +17512.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +B77 + 8 +0 + 62 + 0 + 10 +17562.5 + 20 +22132.127825 + 30 +0.0 + 11 +17587.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +B78 + 8 +0 + 62 + 0 + 10 +17637.5 + 20 +22132.127825 + 30 +0.0 + 11 +17662.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +B79 + 8 +0 + 62 + 0 + 10 +17712.5 + 20 +22132.127825 + 30 +0.0 + 11 +17737.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +B7A + 8 +0 + 62 + 0 + 10 +17787.5 + 20 +22132.127825 + 30 +0.0 + 11 +17812.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +B7B + 8 +0 + 62 + 0 + 10 +17862.5 + 20 +22132.127825 + 30 +0.0 + 11 +17887.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +B7C + 8 +0 + 62 + 0 + 10 +17937.5 + 20 +22132.127825 + 30 +0.0 + 11 +17962.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +B7D + 8 +0 + 62 + 0 + 10 +18012.5 + 20 +22132.127825 + 30 +0.0 + 11 +18037.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +B7E + 8 +0 + 62 + 0 + 10 +18087.5 + 20 +22132.127825 + 30 +0.0 + 11 +18112.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +B7F + 8 +0 + 62 + 0 + 10 +18162.5 + 20 +22132.127825 + 30 +0.0 + 11 +18187.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +B80 + 8 +0 + 62 + 0 + 10 +18237.5 + 20 +22132.127825 + 30 +0.0 + 11 +18262.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +B81 + 8 +0 + 62 + 0 + 10 +18312.5 + 20 +22132.127825 + 30 +0.0 + 11 +18337.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +B82 + 8 +0 + 62 + 0 + 10 +18387.5 + 20 +22132.127825 + 30 +0.0 + 11 +18412.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +B83 + 8 +0 + 62 + 0 + 10 +18462.5 + 20 +22132.127825 + 30 +0.0 + 11 +18487.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +B84 + 8 +0 + 62 + 0 + 10 +18537.5 + 20 +22132.127825 + 30 +0.0 + 11 +18562.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +B85 + 8 +0 + 62 + 0 + 10 +18612.5 + 20 +22132.127825 + 30 +0.0 + 11 +18637.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +B86 + 8 +0 + 62 + 0 + 10 +18687.5 + 20 +22132.127825 + 30 +0.0 + 11 +18712.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +B87 + 8 +0 + 62 + 0 + 10 +17822.388698 + 20 +22115.0 + 30 +0.0 + 11 +17812.499934 + 21 +22132.127843 + 31 +0.0 + 0 +LINE + 5 +B88 + 8 +0 + 62 + 0 + 10 +17787.499934 + 20 +22175.429113 + 30 +0.0 + 11 +17776.200677 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +B89 + 8 +0 + 62 + 0 + 10 +17787.499934 + 20 +22132.127843 + 30 +0.0 + 11 +17774.999934 + 21 +22153.778478 + 31 +0.0 + 0 +LINE + 5 +B8A + 8 +0 + 62 + 0 + 10 +17749.999934 + 20 +22153.778478 + 30 +0.0 + 11 +17737.499934 + 21 +22175.429113 + 31 +0.0 + 0 +LINE + 5 +B8B + 8 +0 + 62 + 0 + 10 +17747.388699 + 20 +22115.0 + 30 +0.0 + 11 +17737.499934 + 21 +22132.127843 + 31 +0.0 + 0 +LINE + 5 +B8C + 8 +0 + 62 + 0 + 10 +17712.499934 + 20 +22175.429113 + 30 +0.0 + 11 +17701.200677 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +B8D + 8 +0 + 62 + 0 + 10 +17712.499934 + 20 +22132.127843 + 30 +0.0 + 11 +17699.999934 + 21 +22153.778478 + 31 +0.0 + 0 +LINE + 5 +B8E + 8 +0 + 62 + 0 + 10 +17674.999934 + 20 +22153.778478 + 30 +0.0 + 11 +17662.499934 + 21 +22175.429113 + 31 +0.0 + 0 +LINE + 5 +B8F + 8 +0 + 62 + 0 + 10 +17672.388699 + 20 +22115.0 + 30 +0.0 + 11 +17662.499934 + 21 +22132.127843 + 31 +0.0 + 0 +LINE + 5 +B90 + 8 +0 + 62 + 0 + 10 +17637.499934 + 20 +22175.429113 + 30 +0.0 + 11 +17626.200678 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +B91 + 8 +0 + 62 + 0 + 10 +17637.499934 + 20 +22132.127843 + 30 +0.0 + 11 +17624.999934 + 21 +22153.778478 + 31 +0.0 + 0 +LINE + 5 +B92 + 8 +0 + 62 + 0 + 10 +17599.999934 + 20 +22153.778478 + 30 +0.0 + 11 +17587.499934 + 21 +22175.429114 + 31 +0.0 + 0 +LINE + 5 +B93 + 8 +0 + 62 + 0 + 10 +17597.388699 + 20 +22115.0 + 30 +0.0 + 11 +17587.499934 + 21 +22132.127843 + 31 +0.0 + 0 +LINE + 5 +B94 + 8 +0 + 62 + 0 + 10 +17562.499934 + 20 +22175.429114 + 30 +0.0 + 11 +17551.200678 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +B95 + 8 +0 + 62 + 0 + 10 +17562.499934 + 20 +22132.127843 + 30 +0.0 + 11 +17549.999934 + 21 +22153.778479 + 31 +0.0 + 0 +LINE + 5 +B96 + 8 +0 + 62 + 0 + 10 +17524.999935 + 20 +22153.778479 + 30 +0.0 + 11 +17512.499935 + 21 +22175.429114 + 31 +0.0 + 0 +LINE + 5 +B97 + 8 +0 + 62 + 0 + 10 +17522.3887 + 20 +22115.0 + 30 +0.0 + 11 +17512.499935 + 21 +22132.127844 + 31 +0.0 + 0 +LINE + 5 +B98 + 8 +0 + 62 + 0 + 10 +17487.499935 + 20 +22175.429114 + 30 +0.0 + 11 +17476.200678 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +B99 + 8 +0 + 62 + 0 + 10 +17487.499935 + 20 +22132.127844 + 30 +0.0 + 11 +17474.999935 + 21 +22153.778479 + 31 +0.0 + 0 +LINE + 5 +B9A + 8 +0 + 62 + 0 + 10 +17449.999935 + 20 +22153.778479 + 30 +0.0 + 11 +17437.499935 + 21 +22175.429114 + 31 +0.0 + 0 +LINE + 5 +B9B + 8 +0 + 62 + 0 + 10 +17447.3887 + 20 +22115.0 + 30 +0.0 + 11 +17437.499935 + 21 +22132.127844 + 31 +0.0 + 0 +LINE + 5 +B9C + 8 +0 + 62 + 0 + 10 +17412.499935 + 20 +22175.429114 + 30 +0.0 + 11 +17401.200678 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +B9D + 8 +0 + 62 + 0 + 10 +17412.499935 + 20 +22132.127844 + 30 +0.0 + 11 +17399.999935 + 21 +22153.778479 + 31 +0.0 + 0 +LINE + 5 +B9E + 8 +0 + 62 + 0 + 10 +17374.999935 + 20 +22153.778479 + 30 +0.0 + 11 +17362.499935 + 21 +22175.429114 + 31 +0.0 + 0 +LINE + 5 +B9F + 8 +0 + 62 + 0 + 10 +17372.3887 + 20 +22115.0 + 30 +0.0 + 11 +17362.499935 + 21 +22132.127844 + 31 +0.0 + 0 +LINE + 5 +BA0 + 8 +0 + 62 + 0 + 10 +17337.499935 + 20 +22175.429114 + 30 +0.0 + 11 +17326.200679 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +BA1 + 8 +0 + 62 + 0 + 10 +17337.499935 + 20 +22132.127844 + 30 +0.0 + 11 +17324.999935 + 21 +22153.778479 + 31 +0.0 + 0 +LINE + 5 +BA2 + 8 +0 + 62 + 0 + 10 +17299.999935 + 20 +22153.778479 + 30 +0.0 + 11 +17287.499935 + 21 +22175.429114 + 31 +0.0 + 0 +LINE + 5 +BA3 + 8 +0 + 62 + 0 + 10 +17297.388701 + 20 +22115.0 + 30 +0.0 + 11 +17287.499935 + 21 +22132.127844 + 31 +0.0 + 0 +LINE + 5 +BA4 + 8 +0 + 62 + 0 + 10 +17262.499935 + 20 +22175.429114 + 30 +0.0 + 11 +17251.200679 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +BA5 + 8 +0 + 62 + 0 + 10 +17262.499935 + 20 +22132.127844 + 30 +0.0 + 11 +17249.999935 + 21 +22153.778479 + 31 +0.0 + 0 +LINE + 5 +BA6 + 8 +0 + 62 + 0 + 10 +17224.999936 + 20 +22153.778479 + 30 +0.0 + 11 +17212.499936 + 21 +22175.429114 + 31 +0.0 + 0 +LINE + 5 +BA7 + 8 +0 + 62 + 0 + 10 +17222.388701 + 20 +22115.0 + 30 +0.0 + 11 +17212.499936 + 21 +22132.127844 + 31 +0.0 + 0 +LINE + 5 +BA8 + 8 +0 + 62 + 0 + 10 +17187.499936 + 20 +22175.429114 + 30 +0.0 + 11 +17176.200679 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +BA9 + 8 +0 + 62 + 0 + 10 +17187.499936 + 20 +22132.127844 + 30 +0.0 + 11 +17174.999936 + 21 +22153.778479 + 31 +0.0 + 0 +LINE + 5 +BAA + 8 +0 + 62 + 0 + 10 +17149.999936 + 20 +22153.778479 + 30 +0.0 + 11 +17137.499936 + 21 +22175.429114 + 31 +0.0 + 0 +LINE + 5 +BAB + 8 +0 + 62 + 0 + 10 +17147.388701 + 20 +22115.0 + 30 +0.0 + 11 +17137.499936 + 21 +22132.127844 + 31 +0.0 + 0 +LINE + 5 +BAC + 8 +0 + 62 + 0 + 10 +17112.499936 + 20 +22175.429114 + 30 +0.0 + 11 +17101.20068 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +BAD + 8 +0 + 62 + 0 + 10 +17112.499936 + 20 +22132.127844 + 30 +0.0 + 11 +17099.999936 + 21 +22153.778479 + 31 +0.0 + 0 +LINE + 5 +BAE + 8 +0 + 62 + 0 + 10 +17074.999936 + 20 +22153.778479 + 30 +0.0 + 11 +17062.499936 + 21 +22175.429115 + 31 +0.0 + 0 +LINE + 5 +BAF + 8 +0 + 62 + 0 + 10 +17072.388702 + 20 +22115.0 + 30 +0.0 + 11 +17062.499936 + 21 +22132.127844 + 31 +0.0 + 0 +LINE + 5 +BB0 + 8 +0 + 62 + 0 + 10 +17037.499936 + 20 +22175.429115 + 30 +0.0 + 11 +17026.20068 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +BB1 + 8 +0 + 62 + 0 + 10 +17037.499936 + 20 +22132.127844 + 30 +0.0 + 11 +17024.999936 + 21 +22153.77848 + 31 +0.0 + 0 +LINE + 5 +BB2 + 8 +0 + 62 + 0 + 10 +16999.999936 + 20 +22153.77848 + 30 +0.0 + 11 +16987.499936 + 21 +22175.429115 + 31 +0.0 + 0 +LINE + 5 +BB3 + 8 +0 + 62 + 0 + 10 +16997.388702 + 20 +22115.0 + 30 +0.0 + 11 +16987.499936 + 21 +22132.127845 + 31 +0.0 + 0 +LINE + 5 +BB4 + 8 +0 + 62 + 0 + 10 +16962.499936 + 20 +22175.429115 + 30 +0.0 + 11 +16951.20068 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +BB5 + 8 +0 + 62 + 0 + 10 +16962.499936 + 20 +22132.127845 + 30 +0.0 + 11 +16949.999936 + 21 +22153.77848 + 31 +0.0 + 0 +LINE + 5 +BB6 + 8 +0 + 62 + 0 + 10 +16924.999937 + 20 +22153.77848 + 30 +0.0 + 11 +16912.499937 + 21 +22175.429115 + 31 +0.0 + 0 +LINE + 5 +BB7 + 8 +0 + 62 + 0 + 10 +16922.388702 + 20 +22115.0 + 30 +0.0 + 11 +16912.499937 + 21 +22132.127845 + 31 +0.0 + 0 +LINE + 5 +BB8 + 8 +0 + 62 + 0 + 10 +16887.499937 + 20 +22175.429115 + 30 +0.0 + 11 +16876.200681 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +BB9 + 8 +0 + 62 + 0 + 10 +16887.499937 + 20 +22132.127845 + 30 +0.0 + 11 +16874.999937 + 21 +22153.77848 + 31 +0.0 + 0 +LINE + 5 +BBA + 8 +0 + 62 + 0 + 10 +17824.999934 + 20 +22153.778478 + 30 +0.0 + 11 +17812.499934 + 21 +22175.429113 + 31 +0.0 + 0 +LINE + 5 +BBB + 8 +0 + 62 + 0 + 10 +17862.499933 + 20 +22132.127843 + 30 +0.0 + 11 +17849.999933 + 21 +22153.778478 + 31 +0.0 + 0 +LINE + 5 +BBC + 8 +0 + 62 + 0 + 10 +17897.388698 + 20 +22115.0 + 30 +0.0 + 11 +17887.499933 + 21 +22132.127843 + 31 +0.0 + 0 +LINE + 5 +BBD + 8 +0 + 62 + 0 + 10 +17862.499933 + 20 +22175.429113 + 30 +0.0 + 11 +17851.200677 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +BBE + 8 +0 + 62 + 0 + 10 +17899.999933 + 20 +22153.778478 + 30 +0.0 + 11 +17887.499933 + 21 +22175.429113 + 31 +0.0 + 0 +LINE + 5 +BBF + 8 +0 + 62 + 0 + 10 +17937.499933 + 20 +22132.127843 + 30 +0.0 + 11 +17924.999933 + 21 +22153.778478 + 31 +0.0 + 0 +LINE + 5 +BC0 + 8 +0 + 62 + 0 + 10 +17972.388698 + 20 +22115.0 + 30 +0.0 + 11 +17962.499933 + 21 +22132.127843 + 31 +0.0 + 0 +LINE + 5 +BC1 + 8 +0 + 62 + 0 + 10 +17937.499933 + 20 +22175.429113 + 30 +0.0 + 11 +17926.200676 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +BC2 + 8 +0 + 62 + 0 + 10 +17974.999933 + 20 +22153.778478 + 30 +0.0 + 11 +17962.499933 + 21 +22175.429113 + 31 +0.0 + 0 +LINE + 5 +BC3 + 8 +0 + 62 + 0 + 10 +18012.499933 + 20 +22132.127843 + 30 +0.0 + 11 +17999.999933 + 21 +22153.778478 + 31 +0.0 + 0 +LINE + 5 +BC4 + 8 +0 + 62 + 0 + 10 +18047.388697 + 20 +22115.0 + 30 +0.0 + 11 +18037.499933 + 21 +22132.127843 + 31 +0.0 + 0 +LINE + 5 +BC5 + 8 +0 + 62 + 0 + 10 +18012.499933 + 20 +22175.429113 + 30 +0.0 + 11 +18001.200676 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +BC6 + 8 +0 + 62 + 0 + 10 +18049.999933 + 20 +22153.778478 + 30 +0.0 + 11 +18037.499933 + 21 +22175.429113 + 31 +0.0 + 0 +LINE + 5 +BC7 + 8 +0 + 62 + 0 + 10 +18087.499933 + 20 +22132.127842 + 30 +0.0 + 11 +18074.999933 + 21 +22153.778478 + 31 +0.0 + 0 +LINE + 5 +BC8 + 8 +0 + 62 + 0 + 10 +18122.388697 + 20 +22115.0 + 30 +0.0 + 11 +18112.499933 + 21 +22132.127842 + 31 +0.0 + 0 +LINE + 5 +BC9 + 8 +0 + 62 + 0 + 10 +18087.499933 + 20 +22175.429113 + 30 +0.0 + 11 +18076.200676 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +BCA + 8 +0 + 62 + 0 + 10 +18124.999933 + 20 +22153.778477 + 30 +0.0 + 11 +18112.499933 + 21 +22175.429113 + 31 +0.0 + 0 +LINE + 5 +BCB + 8 +0 + 62 + 0 + 10 +18162.499932 + 20 +22132.127842 + 30 +0.0 + 11 +18149.999932 + 21 +22153.778477 + 31 +0.0 + 0 +LINE + 5 +BCC + 8 +0 + 62 + 0 + 10 +18197.388697 + 20 +22115.0 + 30 +0.0 + 11 +18187.499932 + 21 +22132.127842 + 31 +0.0 + 0 +LINE + 5 +BCD + 8 +0 + 62 + 0 + 10 +18162.499932 + 20 +22175.429112 + 30 +0.0 + 11 +18151.200675 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +BCE + 8 +0 + 62 + 0 + 10 +18199.999932 + 20 +22153.778477 + 30 +0.0 + 11 +18187.499932 + 21 +22175.429112 + 31 +0.0 + 0 +LINE + 5 +BCF + 8 +0 + 62 + 0 + 10 +18237.499932 + 20 +22132.127842 + 30 +0.0 + 11 +18224.999932 + 21 +22153.778477 + 31 +0.0 + 0 +LINE + 5 +BD0 + 8 +0 + 62 + 0 + 10 +18272.388696 + 20 +22115.0 + 30 +0.0 + 11 +18262.499932 + 21 +22132.127842 + 31 +0.0 + 0 +LINE + 5 +BD1 + 8 +0 + 62 + 0 + 10 +18237.499932 + 20 +22175.429112 + 30 +0.0 + 11 +18226.200675 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +BD2 + 8 +0 + 62 + 0 + 10 +18274.999932 + 20 +22153.778477 + 30 +0.0 + 11 +18262.499932 + 21 +22175.429112 + 31 +0.0 + 0 +LINE + 5 +BD3 + 8 +0 + 62 + 0 + 10 +18312.499932 + 20 +22132.127842 + 30 +0.0 + 11 +18299.999932 + 21 +22153.778477 + 31 +0.0 + 0 +LINE + 5 +BD4 + 8 +0 + 62 + 0 + 10 +18347.388696 + 20 +22115.0 + 30 +0.0 + 11 +18337.499932 + 21 +22132.127842 + 31 +0.0 + 0 +LINE + 5 +BD5 + 8 +0 + 62 + 0 + 10 +18312.499932 + 20 +22175.429112 + 30 +0.0 + 11 +18301.200675 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +BD6 + 8 +0 + 62 + 0 + 10 +18349.999932 + 20 +22153.778477 + 30 +0.0 + 11 +18337.499932 + 21 +22175.429112 + 31 +0.0 + 0 +LINE + 5 +BD7 + 8 +0 + 62 + 0 + 10 +18387.499932 + 20 +22132.127842 + 30 +0.0 + 11 +18374.999932 + 21 +22153.778477 + 31 +0.0 + 0 +LINE + 5 +BD8 + 8 +0 + 62 + 0 + 10 +18422.388696 + 20 +22115.0 + 30 +0.0 + 11 +18412.499932 + 21 +22132.127842 + 31 +0.0 + 0 +LINE + 5 +BD9 + 8 +0 + 62 + 0 + 10 +18387.499932 + 20 +22175.429112 + 30 +0.0 + 11 +18376.200674 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +BDA + 8 +0 + 62 + 0 + 10 +18424.999932 + 20 +22153.778477 + 30 +0.0 + 11 +18412.499932 + 21 +22175.429112 + 31 +0.0 + 0 +LINE + 5 +BDB + 8 +0 + 62 + 0 + 10 +18462.499932 + 20 +22132.127842 + 30 +0.0 + 11 +18449.999932 + 21 +22153.778477 + 31 +0.0 + 0 +LINE + 5 +BDC + 8 +0 + 62 + 0 + 10 +18497.388695 + 20 +22115.0 + 30 +0.0 + 11 +18487.499931 + 21 +22132.127842 + 31 +0.0 + 0 +LINE + 5 +BDD + 8 +0 + 62 + 0 + 10 +18462.499931 + 20 +22175.429112 + 30 +0.0 + 11 +18451.200674 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +BDE + 8 +0 + 62 + 0 + 10 +18499.999931 + 20 +22153.778477 + 30 +0.0 + 11 +18487.499931 + 21 +22175.429112 + 31 +0.0 + 0 +LINE + 5 +BDF + 8 +0 + 62 + 0 + 10 +18537.499931 + 20 +22132.127842 + 30 +0.0 + 11 +18524.999931 + 21 +22153.778477 + 31 +0.0 + 0 +LINE + 5 +BE0 + 8 +0 + 62 + 0 + 10 +18572.388695 + 20 +22115.0 + 30 +0.0 + 11 +18562.499931 + 21 +22132.127842 + 31 +0.0 + 0 +LINE + 5 +BE1 + 8 +0 + 62 + 0 + 10 +18537.499931 + 20 +22175.429112 + 30 +0.0 + 11 +18526.200674 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +BE2 + 8 +0 + 62 + 0 + 10 +18574.999931 + 20 +22153.778477 + 30 +0.0 + 11 +18562.499931 + 21 +22175.429112 + 31 +0.0 + 0 +LINE + 5 +BE3 + 8 +0 + 62 + 0 + 10 +18612.499931 + 20 +22132.127841 + 30 +0.0 + 11 +18599.999931 + 21 +22153.778477 + 31 +0.0 + 0 +LINE + 5 +BE4 + 8 +0 + 62 + 0 + 10 +18647.388695 + 20 +22115.0 + 30 +0.0 + 11 +18637.499931 + 21 +22132.127841 + 31 +0.0 + 0 +LINE + 5 +BE5 + 8 +0 + 62 + 0 + 10 +18612.499931 + 20 +22175.429112 + 30 +0.0 + 11 +18601.200673 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +BE6 + 8 +0 + 62 + 0 + 10 +18649.999931 + 20 +22153.778476 + 30 +0.0 + 11 +18637.499931 + 21 +22175.429112 + 31 +0.0 + 0 +LINE + 5 +BE7 + 8 +0 + 62 + 0 + 10 +18687.499931 + 20 +22132.127841 + 30 +0.0 + 11 +18674.999931 + 21 +22153.778476 + 31 +0.0 + 0 +LINE + 5 +BE8 + 8 +0 + 62 + 0 + 10 +18722.388694 + 20 +22115.0 + 30 +0.0 + 11 +18712.499931 + 21 +22132.127841 + 31 +0.0 + 0 +LINE + 5 +BE9 + 8 +0 + 62 + 0 + 10 +18687.499931 + 20 +22175.429111 + 30 +0.0 + 11 +18676.200673 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +BEA + 8 +0 + 62 + 0 + 10 +18724.999931 + 20 +22153.778476 + 30 +0.0 + 11 +18712.499931 + 21 +22175.429111 + 31 +0.0 + 0 +LINE + 5 +BEB + 8 +0 + 62 + 0 + 10 +18751.25 + 20 +22151.613292 + 30 +0.0 + 11 +18749.999931 + 21 +22153.778476 + 31 +0.0 + 0 +LINE + 5 +BEC + 8 +0 + 62 + 0 + 10 +18751.25 + 20 +22194.914562 + 30 +0.0 + 11 +18751.200673 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +BED + 8 +0 + 62 + 0 + 10 +17777.61119 + 20 +22115.0 + 30 +0.0 + 11 +17787.499982 + 21 +22132.127891 + 31 +0.0 + 0 +LINE + 5 +BEE + 8 +0 + 62 + 0 + 10 +17812.499982 + 20 +22175.429162 + 30 +0.0 + 11 +17823.799211 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +BEF + 8 +0 + 62 + 0 + 10 +17774.999983 + 20 +22153.778526 + 30 +0.0 + 11 +17787.499983 + 21 +22175.429162 + 31 +0.0 + 0 +LINE + 5 +BF0 + 8 +0 + 62 + 0 + 10 +17737.499983 + 20 +22132.127891 + 30 +0.0 + 11 +17749.999983 + 21 +22153.778526 + 31 +0.0 + 0 +LINE + 5 +BF1 + 8 +0 + 62 + 0 + 10 +17702.61119 + 20 +22115.0 + 30 +0.0 + 11 +17712.499983 + 21 +22132.127891 + 31 +0.0 + 0 +LINE + 5 +BF2 + 8 +0 + 62 + 0 + 10 +17737.499983 + 20 +22175.429161 + 30 +0.0 + 11 +17748.799212 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +BF3 + 8 +0 + 62 + 0 + 10 +17699.999983 + 20 +22153.778526 + 30 +0.0 + 11 +17712.499983 + 21 +22175.429161 + 31 +0.0 + 0 +LINE + 5 +BF4 + 8 +0 + 62 + 0 + 10 +17662.499983 + 20 +22132.127891 + 30 +0.0 + 11 +17674.999983 + 21 +22153.778526 + 31 +0.0 + 0 +LINE + 5 +BF5 + 8 +0 + 62 + 0 + 10 +17627.61119 + 20 +22115.0 + 30 +0.0 + 11 +17637.499983 + 21 +22132.127891 + 31 +0.0 + 0 +LINE + 5 +BF6 + 8 +0 + 62 + 0 + 10 +17662.499983 + 20 +22175.429161 + 30 +0.0 + 11 +17673.799212 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +BF7 + 8 +0 + 62 + 0 + 10 +17624.999983 + 20 +22153.778526 + 30 +0.0 + 11 +17637.499983 + 21 +22175.429161 + 31 +0.0 + 0 +LINE + 5 +BF8 + 8 +0 + 62 + 0 + 10 +17587.499983 + 20 +22132.127891 + 30 +0.0 + 11 +17599.999983 + 21 +22153.778526 + 31 +0.0 + 0 +LINE + 5 +BF9 + 8 +0 + 62 + 0 + 10 +17552.611191 + 20 +22115.0 + 30 +0.0 + 11 +17562.499983 + 21 +22132.127891 + 31 +0.0 + 0 +LINE + 5 +BFA + 8 +0 + 62 + 0 + 10 +17587.499983 + 20 +22175.429161 + 30 +0.0 + 11 +17598.799212 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +BFB + 8 +0 + 62 + 0 + 10 +17549.999983 + 20 +22153.778526 + 30 +0.0 + 11 +17562.499983 + 21 +22175.429161 + 31 +0.0 + 0 +LINE + 5 +BFC + 8 +0 + 62 + 0 + 10 +17512.499983 + 20 +22132.127891 + 30 +0.0 + 11 +17524.999983 + 21 +22153.778526 + 31 +0.0 + 0 +LINE + 5 +BFD + 8 +0 + 62 + 0 + 10 +17477.611191 + 20 +22115.0 + 30 +0.0 + 11 +17487.499983 + 21 +22132.127891 + 31 +0.0 + 0 +LINE + 5 +BFE + 8 +0 + 62 + 0 + 10 +17512.499983 + 20 +22175.429161 + 30 +0.0 + 11 +17523.799213 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +BFF + 8 +0 + 62 + 0 + 10 +17474.999984 + 20 +22153.778526 + 30 +0.0 + 11 +17487.499984 + 21 +22175.429161 + 31 +0.0 + 0 +LINE + 5 +C00 + 8 +0 + 62 + 0 + 10 +17437.499984 + 20 +22132.127891 + 30 +0.0 + 11 +17449.999984 + 21 +22153.778526 + 31 +0.0 + 0 +LINE + 5 +C01 + 8 +0 + 62 + 0 + 10 +17402.611191 + 20 +22115.0 + 30 +0.0 + 11 +17412.499984 + 21 +22132.127891 + 31 +0.0 + 0 +LINE + 5 +C02 + 8 +0 + 62 + 0 + 10 +17437.499984 + 20 +22175.429161 + 30 +0.0 + 11 +17448.799213 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +C03 + 8 +0 + 62 + 0 + 10 +17399.999984 + 20 +22153.778526 + 30 +0.0 + 11 +17412.499984 + 21 +22175.429161 + 31 +0.0 + 0 +LINE + 5 +C04 + 8 +0 + 62 + 0 + 10 +17362.499984 + 20 +22132.127891 + 30 +0.0 + 11 +17374.999984 + 21 +22153.778526 + 31 +0.0 + 0 +LINE + 5 +C05 + 8 +0 + 62 + 0 + 10 +17327.611192 + 20 +22115.0 + 30 +0.0 + 11 +17337.499984 + 21 +22132.127891 + 31 +0.0 + 0 +LINE + 5 +C06 + 8 +0 + 62 + 0 + 10 +17362.499984 + 20 +22175.429161 + 30 +0.0 + 11 +17373.799213 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +C07 + 8 +0 + 62 + 0 + 10 +17324.999984 + 20 +22153.778526 + 30 +0.0 + 11 +17337.499984 + 21 +22175.429161 + 31 +0.0 + 0 +LINE + 5 +C08 + 8 +0 + 62 + 0 + 10 +17287.499984 + 20 +22132.12789 + 30 +0.0 + 11 +17299.999984 + 21 +22153.778526 + 31 +0.0 + 0 +LINE + 5 +C09 + 8 +0 + 62 + 0 + 10 +17252.611192 + 20 +22115.0 + 30 +0.0 + 11 +17262.499984 + 21 +22132.12789 + 31 +0.0 + 0 +LINE + 5 +C0A + 8 +0 + 62 + 0 + 10 +17287.499984 + 20 +22175.429161 + 30 +0.0 + 11 +17298.799214 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +C0B + 8 +0 + 62 + 0 + 10 +17249.999984 + 20 +22153.778525 + 30 +0.0 + 11 +17262.499984 + 21 +22175.429161 + 31 +0.0 + 0 +LINE + 5 +C0C + 8 +0 + 62 + 0 + 10 +17212.499984 + 20 +22132.12789 + 30 +0.0 + 11 +17224.999984 + 21 +22153.778525 + 31 +0.0 + 0 +LINE + 5 +C0D + 8 +0 + 62 + 0 + 10 +17177.611192 + 20 +22115.0 + 30 +0.0 + 11 +17187.499984 + 21 +22132.12789 + 31 +0.0 + 0 +LINE + 5 +C0E + 8 +0 + 62 + 0 + 10 +17212.499984 + 20 +22175.42916 + 30 +0.0 + 11 +17223.799214 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +C0F + 8 +0 + 62 + 0 + 10 +17174.999985 + 20 +22153.778525 + 30 +0.0 + 11 +17187.499985 + 21 +22175.42916 + 31 +0.0 + 0 +LINE + 5 +C10 + 8 +0 + 62 + 0 + 10 +17137.499985 + 20 +22132.12789 + 30 +0.0 + 11 +17149.999985 + 21 +22153.778525 + 31 +0.0 + 0 +LINE + 5 +C11 + 8 +0 + 62 + 0 + 10 +17102.611193 + 20 +22115.0 + 30 +0.0 + 11 +17112.499985 + 21 +22132.12789 + 31 +0.0 + 0 +LINE + 5 +C12 + 8 +0 + 62 + 0 + 10 +17137.499985 + 20 +22175.42916 + 30 +0.0 + 11 +17148.799214 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +C13 + 8 +0 + 62 + 0 + 10 +17099.999985 + 20 +22153.778525 + 30 +0.0 + 11 +17112.499985 + 21 +22175.42916 + 31 +0.0 + 0 +LINE + 5 +C14 + 8 +0 + 62 + 0 + 10 +17062.499985 + 20 +22132.12789 + 30 +0.0 + 11 +17074.999985 + 21 +22153.778525 + 31 +0.0 + 0 +LINE + 5 +C15 + 8 +0 + 62 + 0 + 10 +17027.611193 + 20 +22115.0 + 30 +0.0 + 11 +17037.499985 + 21 +22132.12789 + 31 +0.0 + 0 +LINE + 5 +C16 + 8 +0 + 62 + 0 + 10 +17062.499985 + 20 +22175.42916 + 30 +0.0 + 11 +17073.799215 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +C17 + 8 +0 + 62 + 0 + 10 +17024.999985 + 20 +22153.778525 + 30 +0.0 + 11 +17037.499985 + 21 +22175.42916 + 31 +0.0 + 0 +LINE + 5 +C18 + 8 +0 + 62 + 0 + 10 +16987.499985 + 20 +22132.12789 + 30 +0.0 + 11 +16999.999985 + 21 +22153.778525 + 31 +0.0 + 0 +LINE + 5 +C19 + 8 +0 + 62 + 0 + 10 +16952.611193 + 20 +22115.0 + 30 +0.0 + 11 +16962.499985 + 21 +22132.12789 + 31 +0.0 + 0 +LINE + 5 +C1A + 8 +0 + 62 + 0 + 10 +16987.499985 + 20 +22175.42916 + 30 +0.0 + 11 +16998.799215 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +C1B + 8 +0 + 62 + 0 + 10 +16949.999985 + 20 +22153.778525 + 30 +0.0 + 11 +16962.499985 + 21 +22175.42916 + 31 +0.0 + 0 +LINE + 5 +C1C + 8 +0 + 62 + 0 + 10 +16912.499985 + 20 +22132.12789 + 30 +0.0 + 11 +16924.999985 + 21 +22153.778525 + 31 +0.0 + 0 +LINE + 5 +C1D + 8 +0 + 62 + 0 + 10 +16877.611194 + 20 +22115.0 + 30 +0.0 + 11 +16887.499985 + 21 +22132.12789 + 31 +0.0 + 0 +LINE + 5 +C1E + 8 +0 + 62 + 0 + 10 +16912.499985 + 20 +22175.42916 + 30 +0.0 + 11 +16923.799215 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +C1F + 8 +0 + 62 + 0 + 10 +16874.999985 + 20 +22153.778525 + 30 +0.0 + 11 +16887.499985 + 21 +22175.42916 + 31 +0.0 + 0 +LINE + 5 +C20 + 8 +0 + 62 + 0 + 10 +17812.499982 + 20 +22132.127891 + 30 +0.0 + 11 +17824.999982 + 21 +22153.778527 + 31 +0.0 + 0 +LINE + 5 +C21 + 8 +0 + 62 + 0 + 10 +17849.999982 + 20 +22153.778527 + 30 +0.0 + 11 +17862.499982 + 21 +22175.429162 + 31 +0.0 + 0 +LINE + 5 +C22 + 8 +0 + 62 + 0 + 10 +17852.611189 + 20 +22115.0 + 30 +0.0 + 11 +17862.499982 + 21 +22132.127892 + 31 +0.0 + 0 +LINE + 5 +C23 + 8 +0 + 62 + 0 + 10 +17887.499982 + 20 +22175.429162 + 30 +0.0 + 11 +17898.799211 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +C24 + 8 +0 + 62 + 0 + 10 +17887.499982 + 20 +22132.127892 + 30 +0.0 + 11 +17899.999982 + 21 +22153.778527 + 31 +0.0 + 0 +LINE + 5 +C25 + 8 +0 + 62 + 0 + 10 +17924.999982 + 20 +22153.778527 + 30 +0.0 + 11 +17937.499982 + 21 +22175.429162 + 31 +0.0 + 0 +LINE + 5 +C26 + 8 +0 + 62 + 0 + 10 +17927.611189 + 20 +22115.0 + 30 +0.0 + 11 +17937.499982 + 21 +22132.127892 + 31 +0.0 + 0 +LINE + 5 +C27 + 8 +0 + 62 + 0 + 10 +17962.499982 + 20 +22175.429162 + 30 +0.0 + 11 +17973.799211 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +C28 + 8 +0 + 62 + 0 + 10 +17962.499982 + 20 +22132.127892 + 30 +0.0 + 11 +17974.999982 + 21 +22153.778527 + 31 +0.0 + 0 +LINE + 5 +C29 + 8 +0 + 62 + 0 + 10 +17999.999982 + 20 +22153.778527 + 30 +0.0 + 11 +18012.499982 + 21 +22175.429162 + 31 +0.0 + 0 +LINE + 5 +C2A + 8 +0 + 62 + 0 + 10 +18002.611189 + 20 +22115.0 + 30 +0.0 + 11 +18012.499982 + 21 +22132.127892 + 31 +0.0 + 0 +LINE + 5 +C2B + 8 +0 + 62 + 0 + 10 +18037.499982 + 20 +22175.429162 + 30 +0.0 + 11 +18048.79921 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +C2C + 8 +0 + 62 + 0 + 10 +18037.499982 + 20 +22132.127892 + 30 +0.0 + 11 +18049.999982 + 21 +22153.778527 + 31 +0.0 + 0 +LINE + 5 +C2D + 8 +0 + 62 + 0 + 10 +18074.999982 + 20 +22153.778527 + 30 +0.0 + 11 +18087.499982 + 21 +22175.429162 + 31 +0.0 + 0 +LINE + 5 +C2E + 8 +0 + 62 + 0 + 10 +18077.611188 + 20 +22115.0 + 30 +0.0 + 11 +18087.499981 + 21 +22132.127892 + 31 +0.0 + 0 +LINE + 5 +C2F + 8 +0 + 62 + 0 + 10 +18112.499981 + 20 +22175.429162 + 30 +0.0 + 11 +18123.79921 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +C30 + 8 +0 + 62 + 0 + 10 +18112.499981 + 20 +22132.127892 + 30 +0.0 + 11 +18124.999981 + 21 +22153.778527 + 31 +0.0 + 0 +LINE + 5 +C31 + 8 +0 + 62 + 0 + 10 +18149.999981 + 20 +22153.778527 + 30 +0.0 + 11 +18162.499981 + 21 +22175.429162 + 31 +0.0 + 0 +LINE + 5 +C32 + 8 +0 + 62 + 0 + 10 +18152.611188 + 20 +22115.0 + 30 +0.0 + 11 +18162.499981 + 21 +22132.127892 + 31 +0.0 + 0 +LINE + 5 +C33 + 8 +0 + 62 + 0 + 10 +18187.499981 + 20 +22175.429162 + 30 +0.0 + 11 +18198.79921 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +C34 + 8 +0 + 62 + 0 + 10 +18187.499981 + 20 +22132.127892 + 30 +0.0 + 11 +18199.999981 + 21 +22153.778527 + 31 +0.0 + 0 +LINE + 5 +C35 + 8 +0 + 62 + 0 + 10 +18224.999981 + 20 +22153.778527 + 30 +0.0 + 11 +18237.499981 + 21 +22175.429162 + 31 +0.0 + 0 +LINE + 5 +C36 + 8 +0 + 62 + 0 + 10 +18227.611188 + 20 +22115.0 + 30 +0.0 + 11 +18237.499981 + 21 +22132.127892 + 31 +0.0 + 0 +LINE + 5 +C37 + 8 +0 + 62 + 0 + 10 +18262.499981 + 20 +22175.429162 + 30 +0.0 + 11 +18273.799209 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +C38 + 8 +0 + 62 + 0 + 10 +18262.499981 + 20 +22132.127892 + 30 +0.0 + 11 +18274.999981 + 21 +22153.778527 + 31 +0.0 + 0 +LINE + 5 +C39 + 8 +0 + 62 + 0 + 10 +18299.999981 + 20 +22153.778527 + 30 +0.0 + 11 +18312.499981 + 21 +22175.429163 + 31 +0.0 + 0 +LINE + 5 +C3A + 8 +0 + 62 + 0 + 10 +18302.611187 + 20 +22115.0 + 30 +0.0 + 11 +18312.499981 + 21 +22132.127892 + 31 +0.0 + 0 +LINE + 5 +C3B + 8 +0 + 62 + 0 + 10 +18337.499981 + 20 +22175.429163 + 30 +0.0 + 11 +18348.799209 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +C3C + 8 +0 + 62 + 0 + 10 +18337.499981 + 20 +22132.127892 + 30 +0.0 + 11 +18349.999981 + 21 +22153.778528 + 31 +0.0 + 0 +LINE + 5 +C3D + 8 +0 + 62 + 0 + 10 +18374.999981 + 20 +22153.778528 + 30 +0.0 + 11 +18387.499981 + 21 +22175.429163 + 31 +0.0 + 0 +LINE + 5 +C3E + 8 +0 + 62 + 0 + 10 +18377.611187 + 20 +22115.0 + 30 +0.0 + 11 +18387.49998 + 21 +22132.127893 + 31 +0.0 + 0 +LINE + 5 +C3F + 8 +0 + 62 + 0 + 10 +18412.49998 + 20 +22175.429163 + 30 +0.0 + 11 +18423.799209 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +C40 + 8 +0 + 62 + 0 + 10 +18412.49998 + 20 +22132.127893 + 30 +0.0 + 11 +18424.99998 + 21 +22153.778528 + 31 +0.0 + 0 +LINE + 5 +C41 + 8 +0 + 62 + 0 + 10 +18449.99998 + 20 +22153.778528 + 30 +0.0 + 11 +18462.49998 + 21 +22175.429163 + 31 +0.0 + 0 +LINE + 5 +C42 + 8 +0 + 62 + 0 + 10 +18452.611187 + 20 +22115.0 + 30 +0.0 + 11 +18462.49998 + 21 +22132.127893 + 31 +0.0 + 0 +LINE + 5 +C43 + 8 +0 + 62 + 0 + 10 +18487.49998 + 20 +22175.429163 + 30 +0.0 + 11 +18498.799208 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +C44 + 8 +0 + 62 + 0 + 10 +18487.49998 + 20 +22132.127893 + 30 +0.0 + 11 +18499.99998 + 21 +22153.778528 + 31 +0.0 + 0 +LINE + 5 +C45 + 8 +0 + 62 + 0 + 10 +18524.99998 + 20 +22153.778528 + 30 +0.0 + 11 +18537.49998 + 21 +22175.429163 + 31 +0.0 + 0 +LINE + 5 +C46 + 8 +0 + 62 + 0 + 10 +18527.611186 + 20 +22115.0 + 30 +0.0 + 11 +18537.49998 + 21 +22132.127893 + 31 +0.0 + 0 +LINE + 5 +C47 + 8 +0 + 62 + 0 + 10 +18562.49998 + 20 +22175.429163 + 30 +0.0 + 11 +18573.799208 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +C48 + 8 +0 + 62 + 0 + 10 +18562.49998 + 20 +22132.127893 + 30 +0.0 + 11 +18574.99998 + 21 +22153.778528 + 31 +0.0 + 0 +LINE + 5 +C49 + 8 +0 + 62 + 0 + 10 +18599.99998 + 20 +22153.778528 + 30 +0.0 + 11 +18612.49998 + 21 +22175.429163 + 31 +0.0 + 0 +LINE + 5 +C4A + 8 +0 + 62 + 0 + 10 +18602.611186 + 20 +22115.0 + 30 +0.0 + 11 +18612.49998 + 21 +22132.127893 + 31 +0.0 + 0 +LINE + 5 +C4B + 8 +0 + 62 + 0 + 10 +18637.49998 + 20 +22175.429163 + 30 +0.0 + 11 +18648.799208 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +C4C + 8 +0 + 62 + 0 + 10 +18637.49998 + 20 +22132.127893 + 30 +0.0 + 11 +18649.99998 + 21 +22153.778528 + 31 +0.0 + 0 +LINE + 5 +C4D + 8 +0 + 62 + 0 + 10 +18674.99998 + 20 +22153.778528 + 30 +0.0 + 11 +18687.49998 + 21 +22175.429163 + 31 +0.0 + 0 +LINE + 5 +C4E + 8 +0 + 62 + 0 + 10 +18677.611186 + 20 +22115.0 + 30 +0.0 + 11 +18687.49998 + 21 +22132.127893 + 31 +0.0 + 0 +LINE + 5 +C4F + 8 +0 + 62 + 0 + 10 +18712.49998 + 20 +22175.429163 + 30 +0.0 + 11 +18723.799207 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +C50 + 8 +0 + 62 + 0 + 10 +18712.499979 + 20 +22132.127893 + 30 +0.0 + 11 +18724.999979 + 21 +22153.778528 + 31 +0.0 + 0 +LINE + 5 +C51 + 8 +0 + 62 + 0 + 10 +18749.999979 + 20 +22153.778528 + 30 +0.0 + 11 +18751.25 + 21 +22155.943628 + 31 +0.0 + 0 +ENDBLK + 5 +C52 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X43 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X43 + 1 + + 0 +LINE + 5 +C54 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +17174.13241 + 30 +0.0 + 11 +4950.0 + 21 +17174.13241 + 31 +0.0 + 0 +LINE + 5 +C55 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +17195.783045 + 30 +0.0 + 11 +4987.5 + 21 +17195.783045 + 31 +0.0 + 0 +LINE + 5 +C56 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +17217.43368 + 30 +0.0 + 11 +4950.0 + 21 +17217.43368 + 31 +0.0 + 0 +LINE + 5 +C57 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +17239.084315 + 30 +0.0 + 11 +4987.5 + 21 +17239.084315 + 31 +0.0 + 0 +LINE + 5 +C58 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +17260.73495 + 30 +0.0 + 11 +4950.0 + 21 +17260.73495 + 31 +0.0 + 0 +LINE + 5 +C59 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +17282.385585 + 30 +0.0 + 11 +4987.5 + 21 +17282.385585 + 31 +0.0 + 0 +LINE + 5 +C5A + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +17304.03622 + 30 +0.0 + 11 +4950.0 + 21 +17304.03622 + 31 +0.0 + 0 +LINE + 5 +C5B + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +17325.686855 + 30 +0.0 + 11 +4987.5 + 21 +17325.686855 + 31 +0.0 + 0 +LINE + 5 +C5C + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +17347.33749 + 30 +0.0 + 11 +4950.0 + 21 +17347.33749 + 31 +0.0 + 0 +LINE + 5 +C5D + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +17368.988125 + 30 +0.0 + 11 +4987.5 + 21 +17368.988125 + 31 +0.0 + 0 +LINE + 5 +C5E + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +17390.63876 + 30 +0.0 + 11 +4950.0 + 21 +17390.63876 + 31 +0.0 + 0 +LINE + 5 +C5F + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +17412.289395 + 30 +0.0 + 11 +4987.5 + 21 +17412.289395 + 31 +0.0 + 0 +LINE + 5 +C60 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +17433.94003 + 30 +0.0 + 11 +4950.0 + 21 +17433.94003 + 31 +0.0 + 0 +LINE + 5 +C61 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +17455.590665 + 30 +0.0 + 11 +4987.5 + 21 +17455.590665 + 31 +0.0 + 0 +LINE + 5 +C62 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +17477.2413 + 30 +0.0 + 11 +4950.0 + 21 +17477.2413 + 31 +0.0 + 0 +LINE + 5 +C63 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +17498.891935 + 30 +0.0 + 11 +4987.5 + 21 +17498.891935 + 31 +0.0 + 0 +LINE + 5 +C64 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +17520.54257 + 30 +0.0 + 11 +4950.0 + 21 +17520.54257 + 31 +0.0 + 0 +LINE + 5 +C65 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +17542.193205 + 30 +0.0 + 11 +4987.5 + 21 +17542.193205 + 31 +0.0 + 0 +LINE + 5 +C66 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +17563.84384 + 30 +0.0 + 11 +4950.0 + 21 +17563.84384 + 31 +0.0 + 0 +LINE + 5 +C67 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +17585.494475 + 30 +0.0 + 11 +4987.5 + 21 +17585.494475 + 31 +0.0 + 0 +LINE + 5 +C68 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +17607.14511 + 30 +0.0 + 11 +4950.0 + 21 +17607.14511 + 31 +0.0 + 0 +LINE + 5 +C69 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +17628.795745 + 30 +0.0 + 11 +4987.5 + 21 +17628.795745 + 31 +0.0 + 0 +LINE + 5 +C6A + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +17650.44638 + 30 +0.0 + 11 +4950.0 + 21 +17650.44638 + 31 +0.0 + 0 +LINE + 5 +C6B + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +17672.097015 + 30 +0.0 + 11 +4987.5 + 21 +17672.097015 + 31 +0.0 + 0 +LINE + 5 +C6C + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +17693.74765 + 30 +0.0 + 11 +4950.0 + 21 +17693.74765 + 31 +0.0 + 0 +LINE + 5 +C6D + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +17715.398285 + 30 +0.0 + 11 +4987.5 + 21 +17715.398285 + 31 +0.0 + 0 +LINE + 5 +C6E + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +17737.04892 + 30 +0.0 + 11 +4950.0 + 21 +17737.04892 + 31 +0.0 + 0 +LINE + 5 +C6F + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +17758.699555 + 30 +0.0 + 11 +4987.5 + 21 +17758.699555 + 31 +0.0 + 0 +LINE + 5 +C70 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +17780.35019 + 30 +0.0 + 11 +4950.0 + 21 +17780.35019 + 31 +0.0 + 0 +LINE + 5 +C71 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +17802.000825 + 30 +0.0 + 11 +4987.5 + 21 +17802.000825 + 31 +0.0 + 0 +LINE + 5 +C72 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +17823.65146 + 30 +0.0 + 11 +4950.0 + 21 +17823.65146 + 31 +0.0 + 0 +LINE + 5 +C73 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +17845.302095 + 30 +0.0 + 11 +4987.5 + 21 +17845.302095 + 31 +0.0 + 0 +LINE + 5 +C74 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +17866.95273 + 30 +0.0 + 11 +4950.0 + 21 +17866.95273 + 31 +0.0 + 0 +LINE + 5 +C75 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +17888.603365 + 30 +0.0 + 11 +4987.5 + 21 +17888.603365 + 31 +0.0 + 0 +LINE + 5 +C76 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +17910.254 + 30 +0.0 + 11 +4950.0 + 21 +17910.254 + 31 +0.0 + 0 +LINE + 5 +C77 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +17931.904635 + 30 +0.0 + 11 +4987.5 + 21 +17931.904635 + 31 +0.0 + 0 +LINE + 5 +C78 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +17953.55527 + 30 +0.0 + 11 +4950.0 + 21 +17953.55527 + 31 +0.0 + 0 +LINE + 5 +C79 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +17975.205905 + 30 +0.0 + 11 +4987.5 + 21 +17975.205905 + 31 +0.0 + 0 +LINE + 5 +C7A + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +17996.85654 + 30 +0.0 + 11 +4950.0 + 21 +17996.85654 + 31 +0.0 + 0 +LINE + 5 +C7B + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +18018.507175 + 30 +0.0 + 11 +4987.5 + 21 +18018.507175 + 31 +0.0 + 0 +LINE + 5 +C7C + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +18040.15781 + 30 +0.0 + 11 +4950.0 + 21 +18040.15781 + 31 +0.0 + 0 +LINE + 5 +C7D + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +18061.808445 + 30 +0.0 + 11 +4987.5 + 21 +18061.808445 + 31 +0.0 + 0 +LINE + 5 +C7E + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +18083.45908 + 30 +0.0 + 11 +4950.0 + 21 +18083.45908 + 31 +0.0 + 0 +LINE + 5 +C7F + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +18105.109715 + 30 +0.0 + 11 +4987.5 + 21 +18105.109715 + 31 +0.0 + 0 +LINE + 5 +C80 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +18126.76035 + 30 +0.0 + 11 +4950.0 + 21 +18126.76035 + 31 +0.0 + 0 +LINE + 5 +C81 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +18148.410985 + 30 +0.0 + 11 +4987.5 + 21 +18148.410985 + 31 +0.0 + 0 +LINE + 5 +C82 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +18170.06162 + 30 +0.0 + 11 +4950.0 + 21 +18170.06162 + 31 +0.0 + 0 +LINE + 5 +C83 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +18191.712255 + 30 +0.0 + 11 +4987.5 + 21 +18191.712255 + 31 +0.0 + 0 +LINE + 5 +C84 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +18213.36289 + 30 +0.0 + 11 +4950.0 + 21 +18213.36289 + 31 +0.0 + 0 +LINE + 5 +C85 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +18235.013525 + 30 +0.0 + 11 +4987.5 + 21 +18235.013525 + 31 +0.0 + 0 +LINE + 5 +C86 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +17152.481775 + 30 +0.0 + 11 +4987.5 + 21 +17152.481775 + 31 +0.0 + 0 +LINE + 5 +C87 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +17130.83114 + 30 +0.0 + 11 +4950.0 + 21 +17130.83114 + 31 +0.0 + 0 +LINE + 5 +C88 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +17109.180505 + 30 +0.0 + 11 +4987.5 + 21 +17109.180505 + 31 +0.0 + 0 +LINE + 5 +C89 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +17087.52987 + 30 +0.0 + 11 +4950.0 + 21 +17087.52987 + 31 +0.0 + 0 +LINE + 5 +C8A + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +17065.879235 + 30 +0.0 + 11 +4987.5 + 21 +17065.879235 + 31 +0.0 + 0 +LINE + 5 +C8B + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +17044.2286 + 30 +0.0 + 11 +4950.0 + 21 +17044.2286 + 31 +0.0 + 0 +LINE + 5 +C8C + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +17022.577965 + 30 +0.0 + 11 +4987.5 + 21 +17022.577965 + 31 +0.0 + 0 +LINE + 5 +C8D + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +17000.92733 + 30 +0.0 + 11 +4950.0 + 21 +17000.92733 + 31 +0.0 + 0 +LINE + 5 +C8E + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +16979.276695 + 30 +0.0 + 11 +4987.5 + 21 +16979.276695 + 31 +0.0 + 0 +LINE + 5 +C8F + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +16957.62606 + 30 +0.0 + 11 +4950.0 + 21 +16957.62606 + 31 +0.0 + 0 +LINE + 5 +C90 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +16935.975425 + 30 +0.0 + 11 +4987.5 + 21 +16935.975425 + 31 +0.0 + 0 +LINE + 5 +C91 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +16914.32479 + 30 +0.0 + 11 +4950.0 + 21 +16914.32479 + 31 +0.0 + 0 +LINE + 5 +C92 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +16892.674155 + 30 +0.0 + 11 +4987.5 + 21 +16892.674155 + 31 +0.0 + 0 +LINE + 5 +C93 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +16871.02352 + 30 +0.0 + 11 +4950.0 + 21 +16871.02352 + 31 +0.0 + 0 +LINE + 5 +C94 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +16849.372885 + 30 +0.0 + 11 +4987.5 + 21 +16849.372885 + 31 +0.0 + 0 +LINE + 5 +C95 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +16827.72225 + 30 +0.0 + 11 +4950.0 + 21 +16827.72225 + 31 +0.0 + 0 +LINE + 5 +C96 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +16806.071615 + 30 +0.0 + 11 +4987.5 + 21 +16806.071615 + 31 +0.0 + 0 +LINE + 5 +C97 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +16784.42098 + 30 +0.0 + 11 +4950.0 + 21 +16784.42098 + 31 +0.0 + 0 +LINE + 5 +C98 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +16762.770345 + 30 +0.0 + 11 +4987.5 + 21 +16762.770345 + 31 +0.0 + 0 +LINE + 5 +C99 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +16741.11971 + 30 +0.0 + 11 +4950.0 + 21 +16741.11971 + 31 +0.0 + 0 +LINE + 5 +C9A + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +16719.469075 + 30 +0.0 + 11 +4987.5 + 21 +16719.469075 + 31 +0.0 + 0 +LINE + 5 +C9B + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +16697.81844 + 30 +0.0 + 11 +4950.0 + 21 +16697.81844 + 31 +0.0 + 0 +LINE + 5 +C9C + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +16676.167805 + 30 +0.0 + 11 +4987.5 + 21 +16676.167805 + 31 +0.0 + 0 +LINE + 5 +C9D + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +16654.51717 + 30 +0.0 + 11 +4950.0 + 21 +16654.51717 + 31 +0.0 + 0 +LINE + 5 +C9E + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +16632.866535 + 30 +0.0 + 11 +4987.5 + 21 +16632.866535 + 31 +0.0 + 0 +LINE + 5 +C9F + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +16611.2159 + 30 +0.0 + 11 +4950.0 + 21 +16611.2159 + 31 +0.0 + 0 +LINE + 5 +CA0 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +16589.565265 + 30 +0.0 + 11 +4987.5 + 21 +16589.565265 + 31 +0.0 + 0 +LINE + 5 +CA1 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +16567.91463 + 30 +0.0 + 11 +4950.0 + 21 +16567.91463 + 31 +0.0 + 0 +LINE + 5 +CA2 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +16546.263995 + 30 +0.0 + 11 +4987.5 + 21 +16546.263995 + 31 +0.0 + 0 +LINE + 5 +CA3 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +16524.61336 + 30 +0.0 + 11 +4950.0 + 21 +16524.61336 + 31 +0.0 + 0 +LINE + 5 +CA4 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +16502.962725 + 30 +0.0 + 11 +4987.5 + 21 +16502.962725 + 31 +0.0 + 0 +LINE + 5 +CA5 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +16481.31209 + 30 +0.0 + 11 +4950.0 + 21 +16481.31209 + 31 +0.0 + 0 +LINE + 5 +CA6 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +16459.661455 + 30 +0.0 + 11 +4987.5 + 21 +16459.661455 + 31 +0.0 + 0 +LINE + 5 +CA7 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +16438.01082 + 30 +0.0 + 11 +4950.0 + 21 +16438.01082 + 31 +0.0 + 0 +LINE + 5 +CA8 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +16416.360185 + 30 +0.0 + 11 +4987.5 + 21 +16416.360185 + 31 +0.0 + 0 +LINE + 5 +CA9 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +16394.70955 + 30 +0.0 + 11 +4950.0 + 21 +16394.70955 + 31 +0.0 + 0 +LINE + 5 +CAA + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +16373.058915 + 30 +0.0 + 11 +4987.5 + 21 +16373.058915 + 31 +0.0 + 0 +LINE + 5 +CAB + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +16351.40828 + 30 +0.0 + 11 +4950.0 + 21 +16351.40828 + 31 +0.0 + 0 +LINE + 5 +CAC + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +16329.757645 + 30 +0.0 + 11 +4987.5 + 21 +16329.757645 + 31 +0.0 + 0 +LINE + 5 +CAD + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +16308.10701 + 30 +0.0 + 11 +4950.0 + 21 +16308.10701 + 31 +0.0 + 0 +LINE + 5 +CAE + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +16286.456375 + 30 +0.0 + 11 +4987.5 + 21 +16286.456375 + 31 +0.0 + 0 +LINE + 5 +CAF + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +16264.80574 + 30 +0.0 + 11 +4950.0 + 21 +16264.80574 + 31 +0.0 + 0 +LINE + 5 +CB0 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +16243.155105 + 30 +0.0 + 11 +4987.5 + 21 +16243.155105 + 31 +0.0 + 0 +LINE + 5 +CB1 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +16221.50447 + 30 +0.0 + 11 +4950.0 + 21 +16221.50447 + 31 +0.0 + 0 +LINE + 5 +CB2 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +16199.853835 + 30 +0.0 + 11 +4987.5 + 21 +16199.853835 + 31 +0.0 + 0 +LINE + 5 +CB3 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +16178.2032 + 30 +0.0 + 11 +4950.0 + 21 +16178.2032 + 31 +0.0 + 0 +LINE + 5 +CB4 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +16156.552565 + 30 +0.0 + 11 +4987.5 + 21 +16156.552565 + 31 +0.0 + 0 +LINE + 5 +CB5 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +16134.90193 + 30 +0.0 + 11 +4950.0 + 21 +16134.90193 + 31 +0.0 + 0 +LINE + 5 +CB6 + 8 +0 + 62 + 0 + 10 +4999.999985 + 20 +17087.529896 + 30 +0.0 + 11 +4987.499985 + 21 +17109.180531 + 31 +0.0 + 0 +LINE + 5 +CB7 + 8 +0 + 62 + 0 + 10 +4962.499985 + 20 +17152.481801 + 30 +0.0 + 11 +4949.999985 + 21 +17174.132436 + 31 +0.0 + 0 +LINE + 5 +CB8 + 8 +0 + 62 + 0 + 10 +4924.999985 + 20 +17217.433706 + 30 +0.0 + 11 +4920.0 + 21 +17226.093935 + 31 +0.0 + 0 +LINE + 5 +CB9 + 8 +0 + 62 + 0 + 10 +4999.999985 + 20 +17044.228626 + 30 +0.0 + 11 +4987.499985 + 21 +17065.879261 + 31 +0.0 + 0 +LINE + 5 +CBA + 8 +0 + 62 + 0 + 10 +4962.499985 + 20 +17109.180531 + 30 +0.0 + 11 +4949.999985 + 21 +17130.831166 + 31 +0.0 + 0 +LINE + 5 +CBB + 8 +0 + 62 + 0 + 10 +4924.999985 + 20 +17174.132436 + 30 +0.0 + 11 +4920.0 + 21 +17182.792665 + 31 +0.0 + 0 +LINE + 5 +CBC + 8 +0 + 62 + 0 + 10 +4999.999985 + 20 +17000.927355 + 30 +0.0 + 11 +4987.499985 + 21 +17022.57799 + 31 +0.0 + 0 +LINE + 5 +CBD + 8 +0 + 62 + 0 + 10 +4962.499985 + 20 +17065.879261 + 30 +0.0 + 11 +4949.999985 + 21 +17087.529896 + 31 +0.0 + 0 +LINE + 5 +CBE + 8 +0 + 62 + 0 + 10 +4924.999985 + 20 +17130.831166 + 30 +0.0 + 11 +4920.0 + 21 +17139.491395 + 31 +0.0 + 0 +LINE + 5 +CBF + 8 +0 + 62 + 0 + 10 +4999.999985 + 20 +16957.626085 + 30 +0.0 + 11 +4987.499985 + 21 +16979.27672 + 31 +0.0 + 0 +LINE + 5 +CC0 + 8 +0 + 62 + 0 + 10 +4962.499985 + 20 +17022.577991 + 30 +0.0 + 11 +4949.999985 + 21 +17044.228626 + 31 +0.0 + 0 +LINE + 5 +CC1 + 8 +0 + 62 + 0 + 10 +4924.999985 + 20 +17087.529896 + 30 +0.0 + 11 +4920.0 + 21 +17096.190125 + 31 +0.0 + 0 +LINE + 5 +CC2 + 8 +0 + 62 + 0 + 10 +4999.999985 + 20 +16914.324815 + 30 +0.0 + 11 +4987.499985 + 21 +16935.97545 + 31 +0.0 + 0 +LINE + 5 +CC3 + 8 +0 + 62 + 0 + 10 +4962.499985 + 20 +16979.27672 + 30 +0.0 + 11 +4949.999985 + 21 +17000.927355 + 31 +0.0 + 0 +LINE + 5 +CC4 + 8 +0 + 62 + 0 + 10 +4924.999985 + 20 +17044.228626 + 30 +0.0 + 11 +4920.0 + 21 +17052.888855 + 31 +0.0 + 0 +LINE + 5 +CC5 + 8 +0 + 62 + 0 + 10 +4999.999986 + 20 +16871.023545 + 30 +0.0 + 11 +4987.499986 + 21 +16892.67418 + 31 +0.0 + 0 +LINE + 5 +CC6 + 8 +0 + 62 + 0 + 10 +4962.499986 + 20 +16935.97545 + 30 +0.0 + 11 +4949.999986 + 21 +16957.626085 + 31 +0.0 + 0 +LINE + 5 +CC7 + 8 +0 + 62 + 0 + 10 +4924.999986 + 20 +17000.927356 + 30 +0.0 + 11 +4920.0 + 21 +17009.587585 + 31 +0.0 + 0 +LINE + 5 +CC8 + 8 +0 + 62 + 0 + 10 +4999.999986 + 20 +16827.722275 + 30 +0.0 + 11 +4987.499986 + 21 +16849.37291 + 31 +0.0 + 0 +LINE + 5 +CC9 + 8 +0 + 62 + 0 + 10 +4962.499986 + 20 +16892.67418 + 30 +0.0 + 11 +4949.999986 + 21 +16914.324815 + 31 +0.0 + 0 +LINE + 5 +CCA + 8 +0 + 62 + 0 + 10 +4924.999986 + 20 +16957.626085 + 30 +0.0 + 11 +4920.0 + 21 +16966.286315 + 31 +0.0 + 0 +LINE + 5 +CCB + 8 +0 + 62 + 0 + 10 +4999.999986 + 20 +16784.421005 + 30 +0.0 + 11 +4987.499986 + 21 +16806.07164 + 31 +0.0 + 0 +LINE + 5 +CCC + 8 +0 + 62 + 0 + 10 +4962.499986 + 20 +16849.37291 + 30 +0.0 + 11 +4949.999986 + 21 +16871.023545 + 31 +0.0 + 0 +LINE + 5 +CCD + 8 +0 + 62 + 0 + 10 +4924.999986 + 20 +16914.324815 + 30 +0.0 + 11 +4920.0 + 21 +16922.985045 + 31 +0.0 + 0 +LINE + 5 +CCE + 8 +0 + 62 + 0 + 10 +4999.999986 + 20 +16741.119735 + 30 +0.0 + 11 +4987.499986 + 21 +16762.77037 + 31 +0.0 + 0 +LINE + 5 +CCF + 8 +0 + 62 + 0 + 10 +4962.499986 + 20 +16806.07164 + 30 +0.0 + 11 +4949.999986 + 21 +16827.722275 + 31 +0.0 + 0 +LINE + 5 +CD0 + 8 +0 + 62 + 0 + 10 +4924.999986 + 20 +16871.023545 + 30 +0.0 + 11 +4920.0 + 21 +16879.683775 + 31 +0.0 + 0 +LINE + 5 +CD1 + 8 +0 + 62 + 0 + 10 +4999.999986 + 20 +16697.818464 + 30 +0.0 + 11 +4987.499986 + 21 +16719.4691 + 31 +0.0 + 0 +LINE + 5 +CD2 + 8 +0 + 62 + 0 + 10 +4962.499986 + 20 +16762.77037 + 30 +0.0 + 11 +4949.999986 + 21 +16784.421005 + 31 +0.0 + 0 +LINE + 5 +CD3 + 8 +0 + 62 + 0 + 10 +4924.999986 + 20 +16827.722275 + 30 +0.0 + 11 +4920.0 + 21 +16836.382505 + 31 +0.0 + 0 +LINE + 5 +CD4 + 8 +0 + 62 + 0 + 10 +4999.999986 + 20 +16654.517194 + 30 +0.0 + 11 +4987.499986 + 21 +16676.167829 + 31 +0.0 + 0 +LINE + 5 +CD5 + 8 +0 + 62 + 0 + 10 +4962.499986 + 20 +16719.4691 + 30 +0.0 + 11 +4949.999986 + 21 +16741.119735 + 31 +0.0 + 0 +LINE + 5 +CD6 + 8 +0 + 62 + 0 + 10 +4924.999986 + 20 +16784.421005 + 30 +0.0 + 11 +4920.0 + 21 +16793.081235 + 31 +0.0 + 0 +LINE + 5 +CD7 + 8 +0 + 62 + 0 + 10 +4999.999986 + 20 +16611.215924 + 30 +0.0 + 11 +4987.499986 + 21 +16632.866559 + 31 +0.0 + 0 +LINE + 5 +CD8 + 8 +0 + 62 + 0 + 10 +4962.499986 + 20 +16676.167829 + 30 +0.0 + 11 +4949.999986 + 21 +16697.818465 + 31 +0.0 + 0 +LINE + 5 +CD9 + 8 +0 + 62 + 0 + 10 +4924.999986 + 20 +16741.119735 + 30 +0.0 + 11 +4920.0 + 21 +16749.779965 + 31 +0.0 + 0 +LINE + 5 +CDA + 8 +0 + 62 + 0 + 10 +4999.999986 + 20 +16567.914654 + 30 +0.0 + 11 +4987.499986 + 21 +16589.565289 + 31 +0.0 + 0 +LINE + 5 +CDB + 8 +0 + 62 + 0 + 10 +4962.499986 + 20 +16632.866559 + 30 +0.0 + 11 +4949.999986 + 21 +16654.517194 + 31 +0.0 + 0 +LINE + 5 +CDC + 8 +0 + 62 + 0 + 10 +4924.999986 + 20 +16697.818465 + 30 +0.0 + 11 +4920.0 + 21 +16706.478695 + 31 +0.0 + 0 +LINE + 5 +CDD + 8 +0 + 62 + 0 + 10 +4999.999986 + 20 +16524.613384 + 30 +0.0 + 11 +4987.499986 + 21 +16546.264019 + 31 +0.0 + 0 +LINE + 5 +CDE + 8 +0 + 62 + 0 + 10 +4962.499986 + 20 +16589.565289 + 30 +0.0 + 11 +4949.999986 + 21 +16611.215924 + 31 +0.0 + 0 +LINE + 5 +CDF + 8 +0 + 62 + 0 + 10 +4924.999986 + 20 +16654.517194 + 30 +0.0 + 11 +4920.0 + 21 +16663.177425 + 31 +0.0 + 0 +LINE + 5 +CE0 + 8 +0 + 62 + 0 + 10 +4999.999986 + 20 +16481.312114 + 30 +0.0 + 11 +4987.499986 + 21 +16502.962749 + 31 +0.0 + 0 +LINE + 5 +CE1 + 8 +0 + 62 + 0 + 10 +4962.499986 + 20 +16546.264019 + 30 +0.0 + 11 +4949.999986 + 21 +16567.914654 + 31 +0.0 + 0 +LINE + 5 +CE2 + 8 +0 + 62 + 0 + 10 +4924.999986 + 20 +16611.215924 + 30 +0.0 + 11 +4920.0 + 21 +16619.876155 + 31 +0.0 + 0 +LINE + 5 +CE3 + 8 +0 + 62 + 0 + 10 +4999.999986 + 20 +16438.010844 + 30 +0.0 + 11 +4987.499986 + 21 +16459.661479 + 31 +0.0 + 0 +LINE + 5 +CE4 + 8 +0 + 62 + 0 + 10 +4962.499986 + 20 +16502.962749 + 30 +0.0 + 11 +4949.999986 + 21 +16524.613384 + 31 +0.0 + 0 +LINE + 5 +CE5 + 8 +0 + 62 + 0 + 10 +4924.999986 + 20 +16567.914654 + 30 +0.0 + 11 +4920.0 + 21 +16576.574885 + 31 +0.0 + 0 +LINE + 5 +CE6 + 8 +0 + 62 + 0 + 10 +4999.999986 + 20 +16394.709573 + 30 +0.0 + 11 +4987.499986 + 21 +16416.360209 + 31 +0.0 + 0 +LINE + 5 +CE7 + 8 +0 + 62 + 0 + 10 +4962.499986 + 20 +16459.661479 + 30 +0.0 + 11 +4949.999986 + 21 +16481.312114 + 31 +0.0 + 0 +LINE + 5 +CE8 + 8 +0 + 62 + 0 + 10 +4924.999986 + 20 +16524.613384 + 30 +0.0 + 11 +4920.0 + 21 +16533.273615 + 31 +0.0 + 0 +LINE + 5 +CE9 + 8 +0 + 62 + 0 + 10 +4999.999987 + 20 +16351.408303 + 30 +0.0 + 11 +4987.499987 + 21 +16373.058938 + 31 +0.0 + 0 +LINE + 5 +CEA + 8 +0 + 62 + 0 + 10 +4962.499987 + 20 +16416.360209 + 30 +0.0 + 11 +4949.999987 + 21 +16438.010844 + 31 +0.0 + 0 +LINE + 5 +CEB + 8 +0 + 62 + 0 + 10 +4924.999987 + 20 +16481.312114 + 30 +0.0 + 11 +4920.0 + 21 +16489.972345 + 31 +0.0 + 0 +LINE + 5 +CEC + 8 +0 + 62 + 0 + 10 +4999.999987 + 20 +16308.107033 + 30 +0.0 + 11 +4987.499987 + 21 +16329.757668 + 31 +0.0 + 0 +LINE + 5 +CED + 8 +0 + 62 + 0 + 10 +4962.499987 + 20 +16373.058938 + 30 +0.0 + 11 +4949.999987 + 21 +16394.709574 + 31 +0.0 + 0 +LINE + 5 +CEE + 8 +0 + 62 + 0 + 10 +4924.999987 + 20 +16438.010844 + 30 +0.0 + 11 +4920.0 + 21 +16446.671075 + 31 +0.0 + 0 +LINE + 5 +CEF + 8 +0 + 62 + 0 + 10 +4999.999987 + 20 +16264.805763 + 30 +0.0 + 11 +4987.499987 + 21 +16286.456398 + 31 +0.0 + 0 +LINE + 5 +CF0 + 8 +0 + 62 + 0 + 10 +4962.499987 + 20 +16329.757668 + 30 +0.0 + 11 +4949.999987 + 21 +16351.408303 + 31 +0.0 + 0 +LINE + 5 +CF1 + 8 +0 + 62 + 0 + 10 +4924.999987 + 20 +16394.709574 + 30 +0.0 + 11 +4920.0 + 21 +16403.369805 + 31 +0.0 + 0 +LINE + 5 +CF2 + 8 +0 + 62 + 0 + 10 +4999.999987 + 20 +16221.504493 + 30 +0.0 + 11 +4987.499987 + 21 +16243.155128 + 31 +0.0 + 0 +LINE + 5 +CF3 + 8 +0 + 62 + 0 + 10 +4962.499987 + 20 +16286.456398 + 30 +0.0 + 11 +4949.999987 + 21 +16308.107033 + 31 +0.0 + 0 +LINE + 5 +CF4 + 8 +0 + 62 + 0 + 10 +4924.999987 + 20 +16351.408303 + 30 +0.0 + 11 +4920.0 + 21 +16360.068535 + 31 +0.0 + 0 +LINE + 5 +CF5 + 8 +0 + 62 + 0 + 10 +4999.999987 + 20 +16178.203223 + 30 +0.0 + 11 +4987.499987 + 21 +16199.853858 + 31 +0.0 + 0 +LINE + 5 +CF6 + 8 +0 + 62 + 0 + 10 +4962.499987 + 20 +16243.155128 + 30 +0.0 + 11 +4949.999987 + 21 +16264.805763 + 31 +0.0 + 0 +LINE + 5 +CF7 + 8 +0 + 62 + 0 + 10 +4924.999987 + 20 +16308.107033 + 30 +0.0 + 11 +4920.0 + 21 +16316.767265 + 31 +0.0 + 0 +LINE + 5 +CF8 + 8 +0 + 62 + 0 + 10 +4999.999987 + 20 +16134.901953 + 30 +0.0 + 11 +4987.499987 + 21 +16156.552588 + 31 +0.0 + 0 +LINE + 5 +CF9 + 8 +0 + 62 + 0 + 10 +4962.499987 + 20 +16199.853858 + 30 +0.0 + 11 +4949.999987 + 21 +16221.504493 + 31 +0.0 + 0 +LINE + 5 +CFA + 8 +0 + 62 + 0 + 10 +4924.999987 + 20 +16264.805763 + 30 +0.0 + 11 +4920.0 + 21 +16273.465995 + 31 +0.0 + 0 +LINE + 5 +CFB + 8 +0 + 62 + 0 + 10 +4962.499987 + 20 +16156.552588 + 30 +0.0 + 11 +4949.999987 + 21 +16178.203223 + 31 +0.0 + 0 +LINE + 5 +CFC + 8 +0 + 62 + 0 + 10 +4924.999987 + 20 +16221.504493 + 30 +0.0 + 11 +4920.0 + 21 +16230.164725 + 31 +0.0 + 0 +LINE + 5 +CFD + 8 +0 + 62 + 0 + 10 +4962.212073 + 20 +16113.75 + 30 +0.0 + 11 +4949.999987 + 21 +16134.901953 + 31 +0.0 + 0 +LINE + 5 +CFE + 8 +0 + 62 + 0 + 10 +4924.999987 + 20 +16178.203223 + 30 +0.0 + 11 +4920.0 + 21 +16186.863455 + 31 +0.0 + 0 +LINE + 5 +CFF + 8 +0 + 62 + 0 + 10 +4924.999987 + 20 +16134.901953 + 30 +0.0 + 11 +4920.0 + 21 +16143.562185 + 31 +0.0 + 0 +LINE + 5 +D00 + 8 +0 + 62 + 0 + 10 +4999.999985 + 20 +17130.831166 + 30 +0.0 + 11 +4987.499985 + 21 +17152.481801 + 31 +0.0 + 0 +LINE + 5 +D01 + 8 +0 + 62 + 0 + 10 +4962.499985 + 20 +17195.783071 + 30 +0.0 + 11 +4949.999985 + 21 +17217.433706 + 31 +0.0 + 0 +LINE + 5 +D02 + 8 +0 + 62 + 0 + 10 +4924.999985 + 20 +17260.734976 + 30 +0.0 + 11 +4920.0 + 21 +17269.395205 + 31 +0.0 + 0 +LINE + 5 +D03 + 8 +0 + 62 + 0 + 10 +4999.999985 + 20 +17174.132436 + 30 +0.0 + 11 +4987.499985 + 21 +17195.783071 + 31 +0.0 + 0 +LINE + 5 +D04 + 8 +0 + 62 + 0 + 10 +4962.499985 + 20 +17239.084341 + 30 +0.0 + 11 +4949.999985 + 21 +17260.734976 + 31 +0.0 + 0 +LINE + 5 +D05 + 8 +0 + 62 + 0 + 10 +4924.999985 + 20 +17304.036247 + 30 +0.0 + 11 +4920.0 + 21 +17312.696475 + 31 +0.0 + 0 +LINE + 5 +D06 + 8 +0 + 62 + 0 + 10 +4999.999985 + 20 +17217.433706 + 30 +0.0 + 11 +4987.499985 + 21 +17239.084341 + 31 +0.0 + 0 +LINE + 5 +D07 + 8 +0 + 62 + 0 + 10 +4962.499985 + 20 +17282.385611 + 30 +0.0 + 11 +4949.999985 + 21 +17304.036246 + 31 +0.0 + 0 +LINE + 5 +D08 + 8 +0 + 62 + 0 + 10 +4924.999985 + 20 +17347.337517 + 30 +0.0 + 11 +4920.0 + 21 +17355.997745 + 31 +0.0 + 0 +LINE + 5 +D09 + 8 +0 + 62 + 0 + 10 +4999.999985 + 20 +17260.734976 + 30 +0.0 + 11 +4987.499985 + 21 +17282.385611 + 31 +0.0 + 0 +LINE + 5 +D0A + 8 +0 + 62 + 0 + 10 +4962.499985 + 20 +17325.686882 + 30 +0.0 + 11 +4949.999985 + 21 +17347.337517 + 31 +0.0 + 0 +LINE + 5 +D0B + 8 +0 + 62 + 0 + 10 +4924.999985 + 20 +17390.638787 + 30 +0.0 + 11 +4920.0 + 21 +17399.299015 + 31 +0.0 + 0 +LINE + 5 +D0C + 8 +0 + 62 + 0 + 10 +4999.999985 + 20 +17304.036246 + 30 +0.0 + 11 +4987.499985 + 21 +17325.686881 + 31 +0.0 + 0 +LINE + 5 +D0D + 8 +0 + 62 + 0 + 10 +4962.499985 + 20 +17368.988152 + 30 +0.0 + 11 +4949.999985 + 21 +17390.638787 + 31 +0.0 + 0 +LINE + 5 +D0E + 8 +0 + 62 + 0 + 10 +4924.999985 + 20 +17433.940057 + 30 +0.0 + 11 +4920.0 + 21 +17442.600285 + 31 +0.0 + 0 +LINE + 5 +D0F + 8 +0 + 62 + 0 + 10 +4999.999985 + 20 +17347.337517 + 30 +0.0 + 11 +4987.499985 + 21 +17368.988152 + 31 +0.0 + 0 +LINE + 5 +D10 + 8 +0 + 62 + 0 + 10 +4962.499985 + 20 +17412.289422 + 30 +0.0 + 11 +4949.999985 + 21 +17433.940057 + 31 +0.0 + 0 +LINE + 5 +D11 + 8 +0 + 62 + 0 + 10 +4924.999985 + 20 +17477.241327 + 30 +0.0 + 11 +4920.0 + 21 +17485.901555 + 31 +0.0 + 0 +LINE + 5 +D12 + 8 +0 + 62 + 0 + 10 +4999.999985 + 20 +17390.638787 + 30 +0.0 + 11 +4987.499985 + 21 +17412.289422 + 31 +0.0 + 0 +LINE + 5 +D13 + 8 +0 + 62 + 0 + 10 +4962.499985 + 20 +17455.590692 + 30 +0.0 + 11 +4949.999985 + 21 +17477.241327 + 31 +0.0 + 0 +LINE + 5 +D14 + 8 +0 + 62 + 0 + 10 +4924.999985 + 20 +17520.542597 + 30 +0.0 + 11 +4920.0 + 21 +17529.202825 + 31 +0.0 + 0 +LINE + 5 +D15 + 8 +0 + 62 + 0 + 10 +4999.999985 + 20 +17433.940057 + 30 +0.0 + 11 +4987.499985 + 21 +17455.590692 + 31 +0.0 + 0 +LINE + 5 +D16 + 8 +0 + 62 + 0 + 10 +4962.499985 + 20 +17498.891962 + 30 +0.0 + 11 +4949.999985 + 21 +17520.542597 + 31 +0.0 + 0 +LINE + 5 +D17 + 8 +0 + 62 + 0 + 10 +4924.999985 + 20 +17563.843867 + 30 +0.0 + 11 +4920.0 + 21 +17572.504095 + 31 +0.0 + 0 +LINE + 5 +D18 + 8 +0 + 62 + 0 + 10 +4999.999984 + 20 +17477.241327 + 30 +0.0 + 11 +4987.499984 + 21 +17498.891962 + 31 +0.0 + 0 +LINE + 5 +D19 + 8 +0 + 62 + 0 + 10 +4962.499984 + 20 +17542.193232 + 30 +0.0 + 11 +4949.999984 + 21 +17563.843867 + 31 +0.0 + 0 +LINE + 5 +D1A + 8 +0 + 62 + 0 + 10 +4924.999984 + 20 +17607.145138 + 30 +0.0 + 11 +4920.0 + 21 +17615.805365 + 31 +0.0 + 0 +LINE + 5 +D1B + 8 +0 + 62 + 0 + 10 +4999.999984 + 20 +17520.542597 + 30 +0.0 + 11 +4987.499984 + 21 +17542.193232 + 31 +0.0 + 0 +LINE + 5 +D1C + 8 +0 + 62 + 0 + 10 +4962.499984 + 20 +17585.494502 + 30 +0.0 + 11 +4949.999984 + 21 +17607.145137 + 31 +0.0 + 0 +LINE + 5 +D1D + 8 +0 + 62 + 0 + 10 +4924.999984 + 20 +17650.446408 + 30 +0.0 + 11 +4920.0 + 21 +17659.106635 + 31 +0.0 + 0 +LINE + 5 +D1E + 8 +0 + 62 + 0 + 10 +4999.999984 + 20 +17563.843867 + 30 +0.0 + 11 +4987.499984 + 21 +17585.494502 + 31 +0.0 + 0 +LINE + 5 +D1F + 8 +0 + 62 + 0 + 10 +4962.499984 + 20 +17628.795773 + 30 +0.0 + 11 +4949.999984 + 21 +17650.446408 + 31 +0.0 + 0 +LINE + 5 +D20 + 8 +0 + 62 + 0 + 10 +4924.999984 + 20 +17693.747678 + 30 +0.0 + 11 +4920.0 + 21 +17702.407905 + 31 +0.0 + 0 +LINE + 5 +D21 + 8 +0 + 62 + 0 + 10 +4999.999984 + 20 +17607.145137 + 30 +0.0 + 11 +4987.499984 + 21 +17628.795772 + 31 +0.0 + 0 +LINE + 5 +D22 + 8 +0 + 62 + 0 + 10 +4962.499984 + 20 +17672.097043 + 30 +0.0 + 11 +4949.999984 + 21 +17693.747678 + 31 +0.0 + 0 +LINE + 5 +D23 + 8 +0 + 62 + 0 + 10 +4924.999984 + 20 +17737.048948 + 30 +0.0 + 11 +4920.0 + 21 +17745.709175 + 31 +0.0 + 0 +LINE + 5 +D24 + 8 +0 + 62 + 0 + 10 +4999.999984 + 20 +17650.446408 + 30 +0.0 + 11 +4987.499984 + 21 +17672.097043 + 31 +0.0 + 0 +LINE + 5 +D25 + 8 +0 + 62 + 0 + 10 +4962.499984 + 20 +17715.398313 + 30 +0.0 + 11 +4949.999984 + 21 +17737.048948 + 31 +0.0 + 0 +LINE + 5 +D26 + 8 +0 + 62 + 0 + 10 +4924.999984 + 20 +17780.350218 + 30 +0.0 + 11 +4920.0 + 21 +17789.010445 + 31 +0.0 + 0 +LINE + 5 +D27 + 8 +0 + 62 + 0 + 10 +4999.999984 + 20 +17693.747678 + 30 +0.0 + 11 +4987.499984 + 21 +17715.398313 + 31 +0.0 + 0 +LINE + 5 +D28 + 8 +0 + 62 + 0 + 10 +4962.499984 + 20 +17758.699583 + 30 +0.0 + 11 +4949.999984 + 21 +17780.350218 + 31 +0.0 + 0 +LINE + 5 +D29 + 8 +0 + 62 + 0 + 10 +4924.999984 + 20 +17823.651488 + 30 +0.0 + 11 +4920.0 + 21 +17832.311715 + 31 +0.0 + 0 +LINE + 5 +D2A + 8 +0 + 62 + 0 + 10 +4999.999984 + 20 +17737.048948 + 30 +0.0 + 11 +4987.499984 + 21 +17758.699583 + 31 +0.0 + 0 +LINE + 5 +D2B + 8 +0 + 62 + 0 + 10 +4962.499984 + 20 +17802.000853 + 30 +0.0 + 11 +4949.999984 + 21 +17823.651488 + 31 +0.0 + 0 +LINE + 5 +D2C + 8 +0 + 62 + 0 + 10 +4924.999984 + 20 +17866.952758 + 30 +0.0 + 11 +4920.0 + 21 +17875.612985 + 31 +0.0 + 0 +LINE + 5 +D2D + 8 +0 + 62 + 0 + 10 +4999.999984 + 20 +17780.350218 + 30 +0.0 + 11 +4987.499984 + 21 +17802.000853 + 31 +0.0 + 0 +LINE + 5 +D2E + 8 +0 + 62 + 0 + 10 +4962.499984 + 20 +17845.302123 + 30 +0.0 + 11 +4949.999984 + 21 +17866.952758 + 31 +0.0 + 0 +LINE + 5 +D2F + 8 +0 + 62 + 0 + 10 +4924.999984 + 20 +17910.254029 + 30 +0.0 + 11 +4920.0 + 21 +17918.914255 + 31 +0.0 + 0 +LINE + 5 +D30 + 8 +0 + 62 + 0 + 10 +4999.999984 + 20 +17823.651488 + 30 +0.0 + 11 +4987.499984 + 21 +17845.302123 + 31 +0.0 + 0 +LINE + 5 +D31 + 8 +0 + 62 + 0 + 10 +4962.499984 + 20 +17888.603393 + 30 +0.0 + 11 +4949.999984 + 21 +17910.254028 + 31 +0.0 + 0 +LINE + 5 +D32 + 8 +0 + 62 + 0 + 10 +4924.999984 + 20 +17953.555299 + 30 +0.0 + 11 +4920.0 + 21 +17962.215525 + 31 +0.0 + 0 +LINE + 5 +D33 + 8 +0 + 62 + 0 + 10 +4999.999984 + 20 +17866.952758 + 30 +0.0 + 11 +4987.499984 + 21 +17888.603393 + 31 +0.0 + 0 +LINE + 5 +D34 + 8 +0 + 62 + 0 + 10 +4962.499984 + 20 +17931.904664 + 30 +0.0 + 11 +4949.999984 + 21 +17953.555299 + 31 +0.0 + 0 +LINE + 5 +D35 + 8 +0 + 62 + 0 + 10 +4924.999984 + 20 +17996.856569 + 30 +0.0 + 11 +4920.0 + 21 +18005.516795 + 31 +0.0 + 0 +LINE + 5 +D36 + 8 +0 + 62 + 0 + 10 +4999.999984 + 20 +17910.254028 + 30 +0.0 + 11 +4987.499984 + 21 +17931.904663 + 31 +0.0 + 0 +LINE + 5 +D37 + 8 +0 + 62 + 0 + 10 +4962.499984 + 20 +17975.205934 + 30 +0.0 + 11 +4949.999984 + 21 +17996.856569 + 31 +0.0 + 0 +LINE + 5 +D38 + 8 +0 + 62 + 0 + 10 +4924.999984 + 20 +18040.157839 + 30 +0.0 + 11 +4920.0 + 21 +18048.818065 + 31 +0.0 + 0 +LINE + 5 +D39 + 8 +0 + 62 + 0 + 10 +4999.999984 + 20 +17953.555299 + 30 +0.0 + 11 +4987.499984 + 21 +17975.205934 + 31 +0.0 + 0 +LINE + 5 +D3A + 8 +0 + 62 + 0 + 10 +4962.499984 + 20 +18018.507204 + 30 +0.0 + 11 +4949.999984 + 21 +18040.157839 + 31 +0.0 + 0 +LINE + 5 +D3B + 8 +0 + 62 + 0 + 10 +4924.999984 + 20 +18083.459109 + 30 +0.0 + 11 +4920.0 + 21 +18092.119335 + 31 +0.0 + 0 +LINE + 5 +D3C + 8 +0 + 62 + 0 + 10 +4999.999983 + 20 +17996.856569 + 30 +0.0 + 11 +4987.499983 + 21 +18018.507204 + 31 +0.0 + 0 +LINE + 5 +D3D + 8 +0 + 62 + 0 + 10 +4962.499983 + 20 +18061.808474 + 30 +0.0 + 11 +4949.999983 + 21 +18083.459109 + 31 +0.0 + 0 +LINE + 5 +D3E + 8 +0 + 62 + 0 + 10 +4924.999983 + 20 +18126.760379 + 30 +0.0 + 11 +4920.0 + 21 +18135.420605 + 31 +0.0 + 0 +LINE + 5 +D3F + 8 +0 + 62 + 0 + 10 +4999.999983 + 20 +18040.157839 + 30 +0.0 + 11 +4987.499983 + 21 +18061.808474 + 31 +0.0 + 0 +LINE + 5 +D40 + 8 +0 + 62 + 0 + 10 +4962.499983 + 20 +18105.109744 + 30 +0.0 + 11 +4949.999983 + 21 +18126.760379 + 31 +0.0 + 0 +LINE + 5 +D41 + 8 +0 + 62 + 0 + 10 +4924.999983 + 20 +18170.061649 + 30 +0.0 + 11 +4920.0 + 21 +18178.721875 + 31 +0.0 + 0 +LINE + 5 +D42 + 8 +0 + 62 + 0 + 10 +4999.999983 + 20 +18083.459109 + 30 +0.0 + 11 +4987.499983 + 21 +18105.109744 + 31 +0.0 + 0 +LINE + 5 +D43 + 8 +0 + 62 + 0 + 10 +4962.499983 + 20 +18148.411014 + 30 +0.0 + 11 +4949.999983 + 21 +18170.061649 + 31 +0.0 + 0 +LINE + 5 +D44 + 8 +0 + 62 + 0 + 10 +4924.999983 + 20 +18213.36292 + 30 +0.0 + 11 +4920.0 + 21 +18222.023145 + 31 +0.0 + 0 +LINE + 5 +D45 + 8 +0 + 62 + 0 + 10 +4999.999983 + 20 +18126.760379 + 30 +0.0 + 11 +4987.499983 + 21 +18148.411014 + 31 +0.0 + 0 +LINE + 5 +D46 + 8 +0 + 62 + 0 + 10 +4962.499983 + 20 +18191.712284 + 30 +0.0 + 11 +4949.999983 + 21 +18213.362919 + 31 +0.0 + 0 +LINE + 5 +D47 + 8 +0 + 62 + 0 + 10 +4999.999983 + 20 +18170.061649 + 30 +0.0 + 11 +4987.499983 + 21 +18191.712284 + 31 +0.0 + 0 +LINE + 5 +D48 + 8 +0 + 62 + 0 + 10 +4962.499983 + 20 +18235.013555 + 30 +0.0 + 11 +4953.125867 + 21 +18251.25 + 31 +0.0 + 0 +LINE + 5 +D49 + 8 +0 + 62 + 0 + 10 +4999.999983 + 20 +18213.362919 + 30 +0.0 + 11 +4987.499983 + 21 +18235.013554 + 31 +0.0 + 0 +LINE + 5 +D4A + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +17078.869615 + 30 +0.0 + 11 +4925.000015 + 21 +17087.529896 + 31 +0.0 + 0 +LINE + 5 +D4B + 8 +0 + 62 + 0 + 10 +4950.000015 + 20 +17130.831166 + 30 +0.0 + 11 +4962.500015 + 21 +17152.481801 + 31 +0.0 + 0 +LINE + 5 +D4C + 8 +0 + 62 + 0 + 10 +4987.500015 + 20 +17195.783071 + 30 +0.0 + 11 +5000.0 + 21 +17217.43368 + 31 +0.0 + 0 +LINE + 5 +D4D + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +17122.170885 + 30 +0.0 + 11 +4925.000015 + 21 +17130.831166 + 31 +0.0 + 0 +LINE + 5 +D4E + 8 +0 + 62 + 0 + 10 +4950.000015 + 20 +17174.132436 + 30 +0.0 + 11 +4962.500015 + 21 +17195.783071 + 31 +0.0 + 0 +LINE + 5 +D4F + 8 +0 + 62 + 0 + 10 +4987.500015 + 20 +17239.084341 + 30 +0.0 + 11 +5000.0 + 21 +17260.73495 + 31 +0.0 + 0 +LINE + 5 +D50 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +17165.472155 + 30 +0.0 + 11 +4925.000015 + 21 +17174.132436 + 31 +0.0 + 0 +LINE + 5 +D51 + 8 +0 + 62 + 0 + 10 +4950.000015 + 20 +17217.433706 + 30 +0.0 + 11 +4962.500015 + 21 +17239.084341 + 31 +0.0 + 0 +LINE + 5 +D52 + 8 +0 + 62 + 0 + 10 +4987.500015 + 20 +17282.385611 + 30 +0.0 + 11 +5000.0 + 21 +17304.03622 + 31 +0.0 + 0 +LINE + 5 +D53 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +17208.773425 + 30 +0.0 + 11 +4925.000015 + 21 +17217.433706 + 31 +0.0 + 0 +LINE + 5 +D54 + 8 +0 + 62 + 0 + 10 +4950.000015 + 20 +17260.734976 + 30 +0.0 + 11 +4962.500015 + 21 +17282.385611 + 31 +0.0 + 0 +LINE + 5 +D55 + 8 +0 + 62 + 0 + 10 +4987.500015 + 20 +17325.686881 + 30 +0.0 + 11 +5000.0 + 21 +17347.33749 + 31 +0.0 + 0 +LINE + 5 +D56 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +17252.074695 + 30 +0.0 + 11 +4925.000015 + 21 +17260.734976 + 31 +0.0 + 0 +LINE + 5 +D57 + 8 +0 + 62 + 0 + 10 +4950.000015 + 20 +17304.036246 + 30 +0.0 + 11 +4962.500015 + 21 +17325.686881 + 31 +0.0 + 0 +LINE + 5 +D58 + 8 +0 + 62 + 0 + 10 +4987.500015 + 20 +17368.988152 + 30 +0.0 + 11 +5000.0 + 21 +17390.63876 + 31 +0.0 + 0 +LINE + 5 +D59 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +17295.375965 + 30 +0.0 + 11 +4925.000015 + 21 +17304.036246 + 31 +0.0 + 0 +LINE + 5 +D5A + 8 +0 + 62 + 0 + 10 +4950.000015 + 20 +17347.337516 + 30 +0.0 + 11 +4962.500015 + 21 +17368.988152 + 31 +0.0 + 0 +LINE + 5 +D5B + 8 +0 + 62 + 0 + 10 +4987.500015 + 20 +17412.289422 + 30 +0.0 + 11 +5000.0 + 21 +17433.94003 + 31 +0.0 + 0 +LINE + 5 +D5C + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +17338.677235 + 30 +0.0 + 11 +4925.000016 + 21 +17347.337516 + 31 +0.0 + 0 +LINE + 5 +D5D + 8 +0 + 62 + 0 + 10 +4950.000016 + 20 +17390.638787 + 30 +0.0 + 11 +4962.500016 + 21 +17412.289422 + 31 +0.0 + 0 +LINE + 5 +D5E + 8 +0 + 62 + 0 + 10 +4987.500016 + 20 +17455.590692 + 30 +0.0 + 11 +5000.0 + 21 +17477.2413 + 31 +0.0 + 0 +LINE + 5 +D5F + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +17381.978505 + 30 +0.0 + 11 +4925.000016 + 21 +17390.638787 + 31 +0.0 + 0 +LINE + 5 +D60 + 8 +0 + 62 + 0 + 10 +4950.000016 + 20 +17433.940057 + 30 +0.0 + 11 +4962.500016 + 21 +17455.590692 + 31 +0.0 + 0 +LINE + 5 +D61 + 8 +0 + 62 + 0 + 10 +4987.500016 + 20 +17498.891962 + 30 +0.0 + 11 +5000.0 + 21 +17520.54257 + 31 +0.0 + 0 +LINE + 5 +D62 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +17425.279775 + 30 +0.0 + 11 +4925.000016 + 21 +17433.940057 + 31 +0.0 + 0 +LINE + 5 +D63 + 8 +0 + 62 + 0 + 10 +4950.000016 + 20 +17477.241327 + 30 +0.0 + 11 +4962.500016 + 21 +17498.891962 + 31 +0.0 + 0 +LINE + 5 +D64 + 8 +0 + 62 + 0 + 10 +4987.500016 + 20 +17542.193232 + 30 +0.0 + 11 +5000.0 + 21 +17563.84384 + 31 +0.0 + 0 +LINE + 5 +D65 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +17468.581045 + 30 +0.0 + 11 +4925.000016 + 21 +17477.241327 + 31 +0.0 + 0 +LINE + 5 +D66 + 8 +0 + 62 + 0 + 10 +4950.000016 + 20 +17520.542597 + 30 +0.0 + 11 +4962.500016 + 21 +17542.193232 + 31 +0.0 + 0 +LINE + 5 +D67 + 8 +0 + 62 + 0 + 10 +4987.500016 + 20 +17585.494502 + 30 +0.0 + 11 +5000.0 + 21 +17607.14511 + 31 +0.0 + 0 +LINE + 5 +D68 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +17511.882315 + 30 +0.0 + 11 +4925.000016 + 21 +17520.542597 + 31 +0.0 + 0 +LINE + 5 +D69 + 8 +0 + 62 + 0 + 10 +4950.000016 + 20 +17563.843867 + 30 +0.0 + 11 +4962.500016 + 21 +17585.494502 + 31 +0.0 + 0 +LINE + 5 +D6A + 8 +0 + 62 + 0 + 10 +4987.500016 + 20 +17628.795772 + 30 +0.0 + 11 +5000.0 + 21 +17650.44638 + 31 +0.0 + 0 +LINE + 5 +D6B + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +17555.183585 + 30 +0.0 + 11 +4925.000016 + 21 +17563.843867 + 31 +0.0 + 0 +LINE + 5 +D6C + 8 +0 + 62 + 0 + 10 +4950.000016 + 20 +17607.145137 + 30 +0.0 + 11 +4962.500016 + 21 +17628.795772 + 31 +0.0 + 0 +LINE + 5 +D6D + 8 +0 + 62 + 0 + 10 +4987.500016 + 20 +17672.097043 + 30 +0.0 + 11 +5000.0 + 21 +17693.74765 + 31 +0.0 + 0 +LINE + 5 +D6E + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +17598.484855 + 30 +0.0 + 11 +4925.000016 + 21 +17607.145137 + 31 +0.0 + 0 +LINE + 5 +D6F + 8 +0 + 62 + 0 + 10 +4950.000016 + 20 +17650.446407 + 30 +0.0 + 11 +4962.500016 + 21 +17672.097043 + 31 +0.0 + 0 +LINE + 5 +D70 + 8 +0 + 62 + 0 + 10 +4987.500016 + 20 +17715.398313 + 30 +0.0 + 11 +5000.0 + 21 +17737.04892 + 31 +0.0 + 0 +LINE + 5 +D71 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +17641.786125 + 30 +0.0 + 11 +4925.000016 + 21 +17650.446407 + 31 +0.0 + 0 +LINE + 5 +D72 + 8 +0 + 62 + 0 + 10 +4950.000016 + 20 +17693.747678 + 30 +0.0 + 11 +4962.500016 + 21 +17715.398313 + 31 +0.0 + 0 +LINE + 5 +D73 + 8 +0 + 62 + 0 + 10 +4987.500016 + 20 +17758.699583 + 30 +0.0 + 11 +5000.0 + 21 +17780.35019 + 31 +0.0 + 0 +LINE + 5 +D74 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +17685.087395 + 30 +0.0 + 11 +4925.000016 + 21 +17693.747678 + 31 +0.0 + 0 +LINE + 5 +D75 + 8 +0 + 62 + 0 + 10 +4950.000016 + 20 +17737.048948 + 30 +0.0 + 11 +4962.500016 + 21 +17758.699583 + 31 +0.0 + 0 +LINE + 5 +D76 + 8 +0 + 62 + 0 + 10 +4987.500016 + 20 +17802.000853 + 30 +0.0 + 11 +5000.0 + 21 +17823.65146 + 31 +0.0 + 0 +LINE + 5 +D77 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +17728.388665 + 30 +0.0 + 11 +4925.000016 + 21 +17737.048948 + 31 +0.0 + 0 +LINE + 5 +D78 + 8 +0 + 62 + 0 + 10 +4950.000016 + 20 +17780.350218 + 30 +0.0 + 11 +4962.500016 + 21 +17802.000853 + 31 +0.0 + 0 +LINE + 5 +D79 + 8 +0 + 62 + 0 + 10 +4987.500016 + 20 +17845.302123 + 30 +0.0 + 11 +5000.0 + 21 +17866.95273 + 31 +0.0 + 0 +LINE + 5 +D7A + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +17771.689935 + 30 +0.0 + 11 +4925.000016 + 21 +17780.350218 + 31 +0.0 + 0 +LINE + 5 +D7B + 8 +0 + 62 + 0 + 10 +4950.000016 + 20 +17823.651488 + 30 +0.0 + 11 +4962.500016 + 21 +17845.302123 + 31 +0.0 + 0 +LINE + 5 +D7C + 8 +0 + 62 + 0 + 10 +4987.500016 + 20 +17888.603393 + 30 +0.0 + 11 +5000.0 + 21 +17910.254 + 31 +0.0 + 0 +LINE + 5 +D7D + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +17814.991205 + 30 +0.0 + 11 +4925.000016 + 21 +17823.651488 + 31 +0.0 + 0 +LINE + 5 +D7E + 8 +0 + 62 + 0 + 10 +4950.000016 + 20 +17866.952758 + 30 +0.0 + 11 +4962.500016 + 21 +17888.603393 + 31 +0.0 + 0 +LINE + 5 +D7F + 8 +0 + 62 + 0 + 10 +4987.500016 + 20 +17931.904663 + 30 +0.0 + 11 +5000.0 + 21 +17953.55527 + 31 +0.0 + 0 +LINE + 5 +D80 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +17858.292475 + 30 +0.0 + 11 +4925.000017 + 21 +17866.952758 + 31 +0.0 + 0 +LINE + 5 +D81 + 8 +0 + 62 + 0 + 10 +4950.000017 + 20 +17910.254028 + 30 +0.0 + 11 +4962.500017 + 21 +17931.904663 + 31 +0.0 + 0 +LINE + 5 +D82 + 8 +0 + 62 + 0 + 10 +4987.500017 + 20 +17975.205934 + 30 +0.0 + 11 +5000.0 + 21 +17996.85654 + 31 +0.0 + 0 +LINE + 5 +D83 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +17901.593745 + 30 +0.0 + 11 +4925.000017 + 21 +17910.254028 + 31 +0.0 + 0 +LINE + 5 +D84 + 8 +0 + 62 + 0 + 10 +4950.000017 + 20 +17953.555298 + 30 +0.0 + 11 +4962.500017 + 21 +17975.205934 + 31 +0.0 + 0 +LINE + 5 +D85 + 8 +0 + 62 + 0 + 10 +4987.500017 + 20 +18018.507204 + 30 +0.0 + 11 +5000.0 + 21 +18040.15781 + 31 +0.0 + 0 +LINE + 5 +D86 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +17944.895015 + 30 +0.0 + 11 +4925.000017 + 21 +17953.555298 + 31 +0.0 + 0 +LINE + 5 +D87 + 8 +0 + 62 + 0 + 10 +4950.000017 + 20 +17996.856569 + 30 +0.0 + 11 +4962.500017 + 21 +18018.507204 + 31 +0.0 + 0 +LINE + 5 +D88 + 8 +0 + 62 + 0 + 10 +4987.500017 + 20 +18061.808474 + 30 +0.0 + 11 +5000.0 + 21 +18083.45908 + 31 +0.0 + 0 +LINE + 5 +D89 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +17988.196285 + 30 +0.0 + 11 +4925.000017 + 21 +17996.856569 + 31 +0.0 + 0 +LINE + 5 +D8A + 8 +0 + 62 + 0 + 10 +4950.000017 + 20 +18040.157839 + 30 +0.0 + 11 +4962.500017 + 21 +18061.808474 + 31 +0.0 + 0 +LINE + 5 +D8B + 8 +0 + 62 + 0 + 10 +4987.500017 + 20 +18105.109744 + 30 +0.0 + 11 +5000.0 + 21 +18126.76035 + 31 +0.0 + 0 +LINE + 5 +D8C + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +18031.497555 + 30 +0.0 + 11 +4925.000017 + 21 +18040.157839 + 31 +0.0 + 0 +LINE + 5 +D8D + 8 +0 + 62 + 0 + 10 +4950.000017 + 20 +18083.459109 + 30 +0.0 + 11 +4962.500017 + 21 +18105.109744 + 31 +0.0 + 0 +LINE + 5 +D8E + 8 +0 + 62 + 0 + 10 +4987.500017 + 20 +18148.411014 + 30 +0.0 + 11 +5000.0 + 21 +18170.06162 + 31 +0.0 + 0 +LINE + 5 +D8F + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +18074.798825 + 30 +0.0 + 11 +4925.000017 + 21 +18083.459109 + 31 +0.0 + 0 +LINE + 5 +D90 + 8 +0 + 62 + 0 + 10 +4950.000017 + 20 +18126.760379 + 30 +0.0 + 11 +4962.500017 + 21 +18148.411014 + 31 +0.0 + 0 +LINE + 5 +D91 + 8 +0 + 62 + 0 + 10 +4987.500017 + 20 +18191.712284 + 30 +0.0 + 11 +5000.0 + 21 +18213.36289 + 31 +0.0 + 0 +LINE + 5 +D92 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +18118.100095 + 30 +0.0 + 11 +4925.000017 + 21 +18126.760379 + 31 +0.0 + 0 +LINE + 5 +D93 + 8 +0 + 62 + 0 + 10 +4950.000017 + 20 +18170.061649 + 30 +0.0 + 11 +4962.500017 + 21 +18191.712284 + 31 +0.0 + 0 +LINE + 5 +D94 + 8 +0 + 62 + 0 + 10 +4987.500017 + 20 +18235.013554 + 30 +0.0 + 11 +4996.874133 + 21 +18251.25 + 31 +0.0 + 0 +LINE + 5 +D95 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +18161.401365 + 30 +0.0 + 11 +4925.000017 + 21 +18170.061649 + 31 +0.0 + 0 +LINE + 5 +D96 + 8 +0 + 62 + 0 + 10 +4950.000017 + 20 +18213.362919 + 30 +0.0 + 11 +4962.500017 + 21 +18235.013554 + 31 +0.0 + 0 +LINE + 5 +D97 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +18204.702635 + 30 +0.0 + 11 +4925.000017 + 21 +18213.362919 + 31 +0.0 + 0 +LINE + 5 +D98 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +18248.003905 + 30 +0.0 + 11 +4921.874134 + 21 +18251.25 + 31 +0.0 + 0 +LINE + 5 +D99 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +17035.568345 + 30 +0.0 + 11 +4925.000015 + 21 +17044.228625 + 31 +0.0 + 0 +LINE + 5 +D9A + 8 +0 + 62 + 0 + 10 +4950.000015 + 20 +17087.529896 + 30 +0.0 + 11 +4962.500015 + 21 +17109.180531 + 31 +0.0 + 0 +LINE + 5 +D9B + 8 +0 + 62 + 0 + 10 +4987.500015 + 20 +17152.481801 + 30 +0.0 + 11 +5000.0 + 21 +17174.13241 + 31 +0.0 + 0 +LINE + 5 +D9C + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +16992.267075 + 30 +0.0 + 11 +4925.000015 + 21 +17000.927355 + 31 +0.0 + 0 +LINE + 5 +D9D + 8 +0 + 62 + 0 + 10 +4950.000015 + 20 +17044.228625 + 30 +0.0 + 11 +4962.500015 + 21 +17065.879261 + 31 +0.0 + 0 +LINE + 5 +D9E + 8 +0 + 62 + 0 + 10 +4987.500015 + 20 +17109.180531 + 30 +0.0 + 11 +5000.0 + 21 +17130.83114 + 31 +0.0 + 0 +LINE + 5 +D9F + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +16948.965805 + 30 +0.0 + 11 +4925.000015 + 21 +16957.626085 + 31 +0.0 + 0 +LINE + 5 +DA0 + 8 +0 + 62 + 0 + 10 +4950.000015 + 20 +17000.927355 + 30 +0.0 + 11 +4962.500015 + 21 +17022.57799 + 31 +0.0 + 0 +LINE + 5 +DA1 + 8 +0 + 62 + 0 + 10 +4987.500015 + 20 +17065.879261 + 30 +0.0 + 11 +5000.0 + 21 +17087.52987 + 31 +0.0 + 0 +LINE + 5 +DA2 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +16905.664535 + 30 +0.0 + 11 +4925.000015 + 21 +16914.324815 + 31 +0.0 + 0 +LINE + 5 +DA3 + 8 +0 + 62 + 0 + 10 +4950.000015 + 20 +16957.626085 + 30 +0.0 + 11 +4962.500015 + 21 +16979.27672 + 31 +0.0 + 0 +LINE + 5 +DA4 + 8 +0 + 62 + 0 + 10 +4987.500015 + 20 +17022.57799 + 30 +0.0 + 11 +5000.0 + 21 +17044.2286 + 31 +0.0 + 0 +LINE + 5 +DA5 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +16862.363265 + 30 +0.0 + 11 +4925.000015 + 21 +16871.023545 + 31 +0.0 + 0 +LINE + 5 +DA6 + 8 +0 + 62 + 0 + 10 +4950.000015 + 20 +16914.324815 + 30 +0.0 + 11 +4962.500015 + 21 +16935.97545 + 31 +0.0 + 0 +LINE + 5 +DA7 + 8 +0 + 62 + 0 + 10 +4987.500015 + 20 +16979.27672 + 30 +0.0 + 11 +5000.0 + 21 +17000.92733 + 31 +0.0 + 0 +LINE + 5 +DA8 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +16819.061995 + 30 +0.0 + 11 +4925.000015 + 21 +16827.722275 + 31 +0.0 + 0 +LINE + 5 +DA9 + 8 +0 + 62 + 0 + 10 +4950.000015 + 20 +16871.023545 + 30 +0.0 + 11 +4962.500015 + 21 +16892.67418 + 31 +0.0 + 0 +LINE + 5 +DAA + 8 +0 + 62 + 0 + 10 +4987.500015 + 20 +16935.97545 + 30 +0.0 + 11 +5000.0 + 21 +16957.62606 + 31 +0.0 + 0 +LINE + 5 +DAB + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +16775.760725 + 30 +0.0 + 11 +4925.000015 + 21 +16784.421005 + 31 +0.0 + 0 +LINE + 5 +DAC + 8 +0 + 62 + 0 + 10 +4950.000015 + 20 +16827.722275 + 30 +0.0 + 11 +4962.500015 + 21 +16849.37291 + 31 +0.0 + 0 +LINE + 5 +DAD + 8 +0 + 62 + 0 + 10 +4987.500015 + 20 +16892.67418 + 30 +0.0 + 11 +5000.0 + 21 +16914.32479 + 31 +0.0 + 0 +LINE + 5 +DAE + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +16732.459455 + 30 +0.0 + 11 +4925.000014 + 21 +16741.119734 + 31 +0.0 + 0 +LINE + 5 +DAF + 8 +0 + 62 + 0 + 10 +4950.000014 + 20 +16784.421005 + 30 +0.0 + 11 +4962.500014 + 21 +16806.07164 + 31 +0.0 + 0 +LINE + 5 +DB0 + 8 +0 + 62 + 0 + 10 +4987.500014 + 20 +16849.37291 + 30 +0.0 + 11 +5000.0 + 21 +16871.02352 + 31 +0.0 + 0 +LINE + 5 +DB1 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +16689.158185 + 30 +0.0 + 11 +4925.000014 + 21 +16697.818464 + 31 +0.0 + 0 +LINE + 5 +DB2 + 8 +0 + 62 + 0 + 10 +4950.000014 + 20 +16741.119734 + 30 +0.0 + 11 +4962.500014 + 21 +16762.77037 + 31 +0.0 + 0 +LINE + 5 +DB3 + 8 +0 + 62 + 0 + 10 +4987.500014 + 20 +16806.07164 + 30 +0.0 + 11 +5000.0 + 21 +16827.72225 + 31 +0.0 + 0 +LINE + 5 +DB4 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +16645.856915 + 30 +0.0 + 11 +4925.000014 + 21 +16654.517194 + 31 +0.0 + 0 +LINE + 5 +DB5 + 8 +0 + 62 + 0 + 10 +4950.000014 + 20 +16697.818464 + 30 +0.0 + 11 +4962.500014 + 21 +16719.469099 + 31 +0.0 + 0 +LINE + 5 +DB6 + 8 +0 + 62 + 0 + 10 +4987.500014 + 20 +16762.77037 + 30 +0.0 + 11 +5000.0 + 21 +16784.42098 + 31 +0.0 + 0 +LINE + 5 +DB7 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +16602.555645 + 30 +0.0 + 11 +4925.000014 + 21 +16611.215924 + 31 +0.0 + 0 +LINE + 5 +DB8 + 8 +0 + 62 + 0 + 10 +4950.000014 + 20 +16654.517194 + 30 +0.0 + 11 +4962.500014 + 21 +16676.167829 + 31 +0.0 + 0 +LINE + 5 +DB9 + 8 +0 + 62 + 0 + 10 +4987.500014 + 20 +16719.469099 + 30 +0.0 + 11 +5000.0 + 21 +16741.11971 + 31 +0.0 + 0 +LINE + 5 +DBA + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +16559.254375 + 30 +0.0 + 11 +4925.000014 + 21 +16567.914654 + 31 +0.0 + 0 +LINE + 5 +DBB + 8 +0 + 62 + 0 + 10 +4950.000014 + 20 +16611.215924 + 30 +0.0 + 11 +4962.500014 + 21 +16632.866559 + 31 +0.0 + 0 +LINE + 5 +DBC + 8 +0 + 62 + 0 + 10 +4987.500014 + 20 +16676.167829 + 30 +0.0 + 11 +5000.0 + 21 +16697.81844 + 31 +0.0 + 0 +LINE + 5 +DBD + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +16515.953105 + 30 +0.0 + 11 +4925.000014 + 21 +16524.613384 + 31 +0.0 + 0 +LINE + 5 +DBE + 8 +0 + 62 + 0 + 10 +4950.000014 + 20 +16567.914654 + 30 +0.0 + 11 +4962.500014 + 21 +16589.565289 + 31 +0.0 + 0 +LINE + 5 +DBF + 8 +0 + 62 + 0 + 10 +4987.500014 + 20 +16632.866559 + 30 +0.0 + 11 +5000.0 + 21 +16654.51717 + 31 +0.0 + 0 +LINE + 5 +DC0 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +16472.651835 + 30 +0.0 + 11 +4925.000014 + 21 +16481.312114 + 31 +0.0 + 0 +LINE + 5 +DC1 + 8 +0 + 62 + 0 + 10 +4950.000014 + 20 +16524.613384 + 30 +0.0 + 11 +4962.500014 + 21 +16546.264019 + 31 +0.0 + 0 +LINE + 5 +DC2 + 8 +0 + 62 + 0 + 10 +4987.500014 + 20 +16589.565289 + 30 +0.0 + 11 +5000.0 + 21 +16611.2159 + 31 +0.0 + 0 +LINE + 5 +DC3 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +16429.350565 + 30 +0.0 + 11 +4925.000014 + 21 +16438.010843 + 31 +0.0 + 0 +LINE + 5 +DC4 + 8 +0 + 62 + 0 + 10 +4950.000014 + 20 +16481.312114 + 30 +0.0 + 11 +4962.500014 + 21 +16502.962749 + 31 +0.0 + 0 +LINE + 5 +DC5 + 8 +0 + 62 + 0 + 10 +4987.500014 + 20 +16546.264019 + 30 +0.0 + 11 +5000.0 + 21 +16567.91463 + 31 +0.0 + 0 +LINE + 5 +DC6 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +16386.049295 + 30 +0.0 + 11 +4925.000014 + 21 +16394.709573 + 31 +0.0 + 0 +LINE + 5 +DC7 + 8 +0 + 62 + 0 + 10 +4950.000014 + 20 +16438.010843 + 30 +0.0 + 11 +4962.500014 + 21 +16459.661479 + 31 +0.0 + 0 +LINE + 5 +DC8 + 8 +0 + 62 + 0 + 10 +4987.500014 + 20 +16502.962749 + 30 +0.0 + 11 +5000.0 + 21 +16524.61336 + 31 +0.0 + 0 +LINE + 5 +DC9 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +16342.748025 + 30 +0.0 + 11 +4925.000014 + 21 +16351.408303 + 31 +0.0 + 0 +LINE + 5 +DCA + 8 +0 + 62 + 0 + 10 +4950.000014 + 20 +16394.709573 + 30 +0.0 + 11 +4962.500014 + 21 +16416.360208 + 31 +0.0 + 0 +LINE + 5 +DCB + 8 +0 + 62 + 0 + 10 +4987.500014 + 20 +16459.661479 + 30 +0.0 + 11 +5000.0 + 21 +16481.31209 + 31 +0.0 + 0 +LINE + 5 +DCC + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +16299.446755 + 30 +0.0 + 11 +4925.000014 + 21 +16308.107033 + 31 +0.0 + 0 +LINE + 5 +DCD + 8 +0 + 62 + 0 + 10 +4950.000014 + 20 +16351.408303 + 30 +0.0 + 11 +4962.500014 + 21 +16373.058938 + 31 +0.0 + 0 +LINE + 5 +DCE + 8 +0 + 62 + 0 + 10 +4987.500014 + 20 +16416.360208 + 30 +0.0 + 11 +5000.0 + 21 +16438.01082 + 31 +0.0 + 0 +LINE + 5 +DCF + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +16256.145485 + 30 +0.0 + 11 +4925.000014 + 21 +16264.805763 + 31 +0.0 + 0 +LINE + 5 +DD0 + 8 +0 + 62 + 0 + 10 +4950.000014 + 20 +16308.107033 + 30 +0.0 + 11 +4962.500014 + 21 +16329.757668 + 31 +0.0 + 0 +LINE + 5 +DD1 + 8 +0 + 62 + 0 + 10 +4987.500014 + 20 +16373.058938 + 30 +0.0 + 11 +5000.0 + 21 +16394.70955 + 31 +0.0 + 0 +LINE + 5 +DD2 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +16212.844215 + 30 +0.0 + 11 +4925.000013 + 21 +16221.504493 + 31 +0.0 + 0 +LINE + 5 +DD3 + 8 +0 + 62 + 0 + 10 +4950.000013 + 20 +16264.805763 + 30 +0.0 + 11 +4962.500013 + 21 +16286.456398 + 31 +0.0 + 0 +LINE + 5 +DD4 + 8 +0 + 62 + 0 + 10 +4987.500013 + 20 +16329.757668 + 30 +0.0 + 11 +5000.0 + 21 +16351.40828 + 31 +0.0 + 0 +LINE + 5 +DD5 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +16169.542945 + 30 +0.0 + 11 +4925.000013 + 21 +16178.203223 + 31 +0.0 + 0 +LINE + 5 +DD6 + 8 +0 + 62 + 0 + 10 +4950.000013 + 20 +16221.504493 + 30 +0.0 + 11 +4962.500013 + 21 +16243.155128 + 31 +0.0 + 0 +LINE + 5 +DD7 + 8 +0 + 62 + 0 + 10 +4987.500013 + 20 +16286.456398 + 30 +0.0 + 11 +5000.0 + 21 +16308.10701 + 31 +0.0 + 0 +LINE + 5 +DD8 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +16126.241675 + 30 +0.0 + 11 +4925.000013 + 21 +16134.901952 + 31 +0.0 + 0 +LINE + 5 +DD9 + 8 +0 + 62 + 0 + 10 +4950.000013 + 20 +16178.203223 + 30 +0.0 + 11 +4962.500013 + 21 +16199.853858 + 31 +0.0 + 0 +LINE + 5 +DDA + 8 +0 + 62 + 0 + 10 +4987.500013 + 20 +16243.155128 + 30 +0.0 + 11 +5000.0 + 21 +16264.80574 + 31 +0.0 + 0 +LINE + 5 +DDB + 8 +0 + 62 + 0 + 10 +4950.000013 + 20 +16134.901952 + 30 +0.0 + 11 +4962.500013 + 21 +16156.552588 + 31 +0.0 + 0 +LINE + 5 +DDC + 8 +0 + 62 + 0 + 10 +4987.500013 + 20 +16199.853858 + 30 +0.0 + 11 +5000.0 + 21 +16221.50447 + 31 +0.0 + 0 +LINE + 5 +DDD + 8 +0 + 62 + 0 + 10 +4987.500013 + 20 +16156.552588 + 30 +0.0 + 11 +5000.0 + 21 +16178.2032 + 31 +0.0 + 0 +LINE + 5 +DDE + 8 +0 + 62 + 0 + 10 +4987.787928 + 20 +16113.75 + 30 +0.0 + 11 +5000.0 + 21 +16134.90193 + 31 +0.0 + 0 +ENDBLK + 5 +DDF + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X44 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X44 + 1 + + 0 +LINE + 5 +DE1 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +11891.37747 + 30 +0.0 + 11 +4950.0 + 21 +11891.37747 + 31 +0.0 + 0 +LINE + 5 +DE2 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +11913.028105 + 30 +0.0 + 11 +4987.5 + 21 +11913.028105 + 31 +0.0 + 0 +LINE + 5 +DE3 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +11934.67874 + 30 +0.0 + 11 +4950.0 + 21 +11934.67874 + 31 +0.0 + 0 +LINE + 5 +DE4 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +11956.329375 + 30 +0.0 + 11 +4987.5 + 21 +11956.329375 + 31 +0.0 + 0 +LINE + 5 +DE5 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +11977.98001 + 30 +0.0 + 11 +4950.0 + 21 +11977.98001 + 31 +0.0 + 0 +LINE + 5 +DE6 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +11999.630645 + 30 +0.0 + 11 +4987.5 + 21 +11999.630645 + 31 +0.0 + 0 +LINE + 5 +DE7 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +12021.28128 + 30 +0.0 + 11 +4950.0 + 21 +12021.28128 + 31 +0.0 + 0 +LINE + 5 +DE8 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +12042.931915 + 30 +0.0 + 11 +4987.5 + 21 +12042.931915 + 31 +0.0 + 0 +LINE + 5 +DE9 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +12064.58255 + 30 +0.0 + 11 +4950.0 + 21 +12064.58255 + 31 +0.0 + 0 +LINE + 5 +DEA + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +12086.233185 + 30 +0.0 + 11 +4987.5 + 21 +12086.233185 + 31 +0.0 + 0 +LINE + 5 +DEB + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +12107.88382 + 30 +0.0 + 11 +4950.0 + 21 +12107.88382 + 31 +0.0 + 0 +LINE + 5 +DEC + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +12129.534455 + 30 +0.0 + 11 +4987.5 + 21 +12129.534455 + 31 +0.0 + 0 +LINE + 5 +DED + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +12151.18509 + 30 +0.0 + 11 +4950.0 + 21 +12151.18509 + 31 +0.0 + 0 +LINE + 5 +DEE + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +12172.835725 + 30 +0.0 + 11 +4987.5 + 21 +12172.835725 + 31 +0.0 + 0 +LINE + 5 +DEF + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +12194.48636 + 30 +0.0 + 11 +4950.0 + 21 +12194.48636 + 31 +0.0 + 0 +LINE + 5 +DF0 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +12216.136995 + 30 +0.0 + 11 +4987.5 + 21 +12216.136995 + 31 +0.0 + 0 +LINE + 5 +DF1 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +12237.78763 + 30 +0.0 + 11 +4950.0 + 21 +12237.78763 + 31 +0.0 + 0 +LINE + 5 +DF2 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +12259.438265 + 30 +0.0 + 11 +4987.5 + 21 +12259.438265 + 31 +0.0 + 0 +LINE + 5 +DF3 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +12281.0889 + 30 +0.0 + 11 +4950.0 + 21 +12281.0889 + 31 +0.0 + 0 +LINE + 5 +DF4 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +12302.739535 + 30 +0.0 + 11 +4987.5 + 21 +12302.739535 + 31 +0.0 + 0 +LINE + 5 +DF5 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +12324.39017 + 30 +0.0 + 11 +4950.0 + 21 +12324.39017 + 31 +0.0 + 0 +LINE + 5 +DF6 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +12346.040805 + 30 +0.0 + 11 +4987.5 + 21 +12346.040805 + 31 +0.0 + 0 +LINE + 5 +DF7 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +12367.69144 + 30 +0.0 + 11 +4950.0 + 21 +12367.69144 + 31 +0.0 + 0 +LINE + 5 +DF8 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +12389.342075 + 30 +0.0 + 11 +4987.5 + 21 +12389.342075 + 31 +0.0 + 0 +LINE + 5 +DF9 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +12410.99271 + 30 +0.0 + 11 +4950.0 + 21 +12410.99271 + 31 +0.0 + 0 +LINE + 5 +DFA + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +12432.643345 + 30 +0.0 + 11 +4987.5 + 21 +12432.643345 + 31 +0.0 + 0 +LINE + 5 +DFB + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +12454.29398 + 30 +0.0 + 11 +4950.0 + 21 +12454.29398 + 31 +0.0 + 0 +LINE + 5 +DFC + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +12475.944615 + 30 +0.0 + 11 +4987.5 + 21 +12475.944615 + 31 +0.0 + 0 +LINE + 5 +DFD + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +12497.59525 + 30 +0.0 + 11 +4950.0 + 21 +12497.59525 + 31 +0.0 + 0 +LINE + 5 +DFE + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +12519.245885 + 30 +0.0 + 11 +4987.5 + 21 +12519.245885 + 31 +0.0 + 0 +LINE + 5 +DFF + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +12540.89652 + 30 +0.0 + 11 +4950.0 + 21 +12540.89652 + 31 +0.0 + 0 +LINE + 5 +E00 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +12562.547155 + 30 +0.0 + 11 +4987.5 + 21 +12562.547155 + 31 +0.0 + 0 +LINE + 5 +E01 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +12584.19779 + 30 +0.0 + 11 +4950.0 + 21 +12584.19779 + 31 +0.0 + 0 +LINE + 5 +E02 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +12605.848425 + 30 +0.0 + 11 +4987.5 + 21 +12605.848425 + 31 +0.0 + 0 +LINE + 5 +E03 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +12627.49906 + 30 +0.0 + 11 +4950.0 + 21 +12627.49906 + 31 +0.0 + 0 +LINE + 5 +E04 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +12649.149695 + 30 +0.0 + 11 +4987.5 + 21 +12649.149695 + 31 +0.0 + 0 +LINE + 5 +E05 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +12670.80033 + 30 +0.0 + 11 +4950.0 + 21 +12670.80033 + 31 +0.0 + 0 +LINE + 5 +E06 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +12692.450965 + 30 +0.0 + 11 +4987.5 + 21 +12692.450965 + 31 +0.0 + 0 +LINE + 5 +E07 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +12714.1016 + 30 +0.0 + 11 +4950.0 + 21 +12714.1016 + 31 +0.0 + 0 +LINE + 5 +E08 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +12735.752235 + 30 +0.0 + 11 +4987.5 + 21 +12735.752235 + 31 +0.0 + 0 +LINE + 5 +E09 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +12757.40287 + 30 +0.0 + 11 +4950.0 + 21 +12757.40287 + 31 +0.0 + 0 +LINE + 5 +E0A + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +12779.053505 + 30 +0.0 + 11 +4987.5 + 21 +12779.053505 + 31 +0.0 + 0 +LINE + 5 +E0B + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +12800.70414 + 30 +0.0 + 11 +4950.0 + 21 +12800.70414 + 31 +0.0 + 0 +LINE + 5 +E0C + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +12822.354775 + 30 +0.0 + 11 +4987.5 + 21 +12822.354775 + 31 +0.0 + 0 +LINE + 5 +E0D + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +12844.00541 + 30 +0.0 + 11 +4950.0 + 21 +12844.00541 + 31 +0.0 + 0 +LINE + 5 +E0E + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +12865.656045 + 30 +0.0 + 11 +4987.5 + 21 +12865.656045 + 31 +0.0 + 0 +LINE + 5 +E0F + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +12887.30668 + 30 +0.0 + 11 +4950.0 + 21 +12887.30668 + 31 +0.0 + 0 +LINE + 5 +E10 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +12908.957315 + 30 +0.0 + 11 +4987.5 + 21 +12908.957315 + 31 +0.0 + 0 +LINE + 5 +E11 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +12930.60795 + 30 +0.0 + 11 +4950.0 + 21 +12930.60795 + 31 +0.0 + 0 +LINE + 5 +E12 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +12952.258585 + 30 +0.0 + 11 +4987.5 + 21 +12952.258585 + 31 +0.0 + 0 +LINE + 5 +E13 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +12973.90922 + 30 +0.0 + 11 +4950.0 + 21 +12973.90922 + 31 +0.0 + 0 +LINE + 5 +E14 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +12995.559855 + 30 +0.0 + 11 +4987.5 + 21 +12995.559855 + 31 +0.0 + 0 +LINE + 5 +E15 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +13017.21049 + 30 +0.0 + 11 +4950.0 + 21 +13017.21049 + 31 +0.0 + 0 +LINE + 5 +E16 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +13038.861125 + 30 +0.0 + 11 +4987.5 + 21 +13038.861125 + 31 +0.0 + 0 +LINE + 5 +E17 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +13060.51176 + 30 +0.0 + 11 +4950.0 + 21 +13060.51176 + 31 +0.0 + 0 +LINE + 5 +E18 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +13082.162395 + 30 +0.0 + 11 +4987.5 + 21 +13082.162395 + 31 +0.0 + 0 +LINE + 5 +E19 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +13103.81303 + 30 +0.0 + 11 +4950.0 + 21 +13103.81303 + 31 +0.0 + 0 +LINE + 5 +E1A + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +13125.463665 + 30 +0.0 + 11 +4987.5 + 21 +13125.463665 + 31 +0.0 + 0 +LINE + 5 +E1B + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +13147.1143 + 30 +0.0 + 11 +4950.0 + 21 +13147.1143 + 31 +0.0 + 0 +LINE + 5 +E1C + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +13168.764935 + 30 +0.0 + 11 +4987.5 + 21 +13168.764935 + 31 +0.0 + 0 +LINE + 5 +E1D + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +13190.41557 + 30 +0.0 + 11 +4950.0 + 21 +13190.41557 + 31 +0.0 + 0 +LINE + 5 +E1E + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +13212.066205 + 30 +0.0 + 11 +4987.5 + 21 +13212.066205 + 31 +0.0 + 0 +LINE + 5 +E1F + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +13233.71684 + 30 +0.0 + 11 +4950.0 + 21 +13233.71684 + 31 +0.0 + 0 +LINE + 5 +E20 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +13255.367475 + 30 +0.0 + 11 +4987.5 + 21 +13255.367475 + 31 +0.0 + 0 +LINE + 5 +E21 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +13277.01811 + 30 +0.0 + 11 +4950.0 + 21 +13277.01811 + 31 +0.0 + 0 +LINE + 5 +E22 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +13298.668745 + 30 +0.0 + 11 +4987.5 + 21 +13298.668745 + 31 +0.0 + 0 +LINE + 5 +E23 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +13320.31938 + 30 +0.0 + 11 +4950.0 + 21 +13320.31938 + 31 +0.0 + 0 +LINE + 5 +E24 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +13341.970015 + 30 +0.0 + 11 +4987.5 + 21 +13341.970015 + 31 +0.0 + 0 +LINE + 5 +E25 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +13363.62065 + 30 +0.0 + 11 +4950.0 + 21 +13363.62065 + 31 +0.0 + 0 +LINE + 5 +E26 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +13385.271285 + 30 +0.0 + 11 +4987.5 + 21 +13385.271285 + 31 +0.0 + 0 +LINE + 5 +E27 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +13406.92192 + 30 +0.0 + 11 +4950.0 + 21 +13406.92192 + 31 +0.0 + 0 +LINE + 5 +E28 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +13428.572555 + 30 +0.0 + 11 +4987.5 + 21 +13428.572555 + 31 +0.0 + 0 +LINE + 5 +E29 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +13450.22319 + 30 +0.0 + 11 +4950.0 + 21 +13450.22319 + 31 +0.0 + 0 +LINE + 5 +E2A + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +13471.873825 + 30 +0.0 + 11 +4987.5 + 21 +13471.873825 + 31 +0.0 + 0 +LINE + 5 +E2B + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +13493.52446 + 30 +0.0 + 11 +4950.0 + 21 +13493.52446 + 31 +0.0 + 0 +LINE + 5 +E2C + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +13515.175095 + 30 +0.0 + 11 +4987.5 + 21 +13515.175095 + 31 +0.0 + 0 +LINE + 5 +E2D + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +13536.82573 + 30 +0.0 + 11 +4950.0 + 21 +13536.82573 + 31 +0.0 + 0 +LINE + 5 +E2E + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +13558.476365 + 30 +0.0 + 11 +4987.5 + 21 +13558.476365 + 31 +0.0 + 0 +LINE + 5 +E2F + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +13580.127 + 30 +0.0 + 11 +4950.0 + 21 +13580.127 + 31 +0.0 + 0 +LINE + 5 +E30 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +13601.777635 + 30 +0.0 + 11 +4987.5 + 21 +13601.777635 + 31 +0.0 + 0 +LINE + 5 +E31 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +13623.42827 + 30 +0.0 + 11 +4950.0 + 21 +13623.42827 + 31 +0.0 + 0 +LINE + 5 +E32 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +13645.078905 + 30 +0.0 + 11 +4987.5 + 21 +13645.078905 + 31 +0.0 + 0 +LINE + 5 +E33 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +13666.72954 + 30 +0.0 + 11 +4950.0 + 21 +13666.72954 + 31 +0.0 + 0 +LINE + 5 +E34 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +13688.380175 + 30 +0.0 + 11 +4987.5 + 21 +13688.380175 + 31 +0.0 + 0 +LINE + 5 +E35 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +13710.03081 + 30 +0.0 + 11 +4950.0 + 21 +13710.03081 + 31 +0.0 + 0 +LINE + 5 +E36 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +13731.681445 + 30 +0.0 + 11 +4987.5 + 21 +13731.681445 + 31 +0.0 + 0 +LINE + 5 +E37 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +13753.33208 + 30 +0.0 + 11 +4950.0 + 21 +13753.33208 + 31 +0.0 + 0 +LINE + 5 +E38 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +13774.982715 + 30 +0.0 + 11 +4987.5 + 21 +13774.982715 + 31 +0.0 + 0 +LINE + 5 +E39 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +13796.63335 + 30 +0.0 + 11 +4950.0 + 21 +13796.63335 + 31 +0.0 + 0 +LINE + 5 +E3A + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +13818.283985 + 30 +0.0 + 11 +4987.5 + 21 +13818.283985 + 31 +0.0 + 0 +LINE + 5 +E3B + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +13839.93462 + 30 +0.0 + 11 +4950.0 + 21 +13839.93462 + 31 +0.0 + 0 +LINE + 5 +E3C + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +13861.585255 + 30 +0.0 + 11 +4987.5 + 21 +13861.585255 + 31 +0.0 + 0 +LINE + 5 +E3D + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +13883.23589 + 30 +0.0 + 11 +4950.0 + 21 +13883.23589 + 31 +0.0 + 0 +LINE + 5 +E3E + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +13904.886525 + 30 +0.0 + 11 +4987.5 + 21 +13904.886525 + 31 +0.0 + 0 +LINE + 5 +E3F + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +13926.53716 + 30 +0.0 + 11 +4950.0 + 21 +13926.53716 + 31 +0.0 + 0 +LINE + 5 +E40 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +13948.187795 + 30 +0.0 + 11 +4987.5 + 21 +13948.187795 + 31 +0.0 + 0 +LINE + 5 +E41 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +13969.83843 + 30 +0.0 + 11 +4950.0 + 21 +13969.83843 + 31 +0.0 + 0 +LINE + 5 +E42 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +13991.489065 + 30 +0.0 + 11 +4987.5 + 21 +13991.489065 + 31 +0.0 + 0 +LINE + 5 +E43 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +14013.1397 + 30 +0.0 + 11 +4950.0 + 21 +14013.1397 + 31 +0.0 + 0 +LINE + 5 +E44 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +14034.790335 + 30 +0.0 + 11 +4987.5 + 21 +14034.790335 + 31 +0.0 + 0 +LINE + 5 +E45 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +14056.44097 + 30 +0.0 + 11 +4950.0 + 21 +14056.44097 + 31 +0.0 + 0 +LINE + 5 +E46 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +14078.091605 + 30 +0.0 + 11 +4987.5 + 21 +14078.091605 + 31 +0.0 + 0 +LINE + 5 +E47 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +14099.74224 + 30 +0.0 + 11 +4950.0 + 21 +14099.74224 + 31 +0.0 + 0 +LINE + 5 +E48 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +14121.392875 + 30 +0.0 + 11 +4987.5 + 21 +14121.392875 + 31 +0.0 + 0 +LINE + 5 +E49 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +14143.04351 + 30 +0.0 + 11 +4950.0 + 21 +14143.04351 + 31 +0.0 + 0 +LINE + 5 +E4A + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +14164.694145 + 30 +0.0 + 11 +4987.5 + 21 +14164.694145 + 31 +0.0 + 0 +LINE + 5 +E4B + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +14186.34478 + 30 +0.0 + 11 +4950.0 + 21 +14186.34478 + 31 +0.0 + 0 +LINE + 5 +E4C + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +14207.995415 + 30 +0.0 + 11 +4987.5 + 21 +14207.995415 + 31 +0.0 + 0 +LINE + 5 +E4D + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +14229.64605 + 30 +0.0 + 11 +4950.0 + 21 +14229.64605 + 31 +0.0 + 0 +LINE + 5 +E4E + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +14251.296685 + 30 +0.0 + 11 +4987.5 + 21 +14251.296685 + 31 +0.0 + 0 +LINE + 5 +E4F + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +14272.94732 + 30 +0.0 + 11 +4950.0 + 21 +14272.94732 + 31 +0.0 + 0 +LINE + 5 +E50 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +14294.597955 + 30 +0.0 + 11 +4987.5 + 21 +14294.597955 + 31 +0.0 + 0 +LINE + 5 +E51 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +14316.24859 + 30 +0.0 + 11 +4950.0 + 21 +14316.24859 + 31 +0.0 + 0 +LINE + 5 +E52 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +14337.899225 + 30 +0.0 + 11 +4987.5 + 21 +14337.899225 + 31 +0.0 + 0 +LINE + 5 +E53 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +14359.54986 + 30 +0.0 + 11 +4950.0 + 21 +14359.54986 + 31 +0.0 + 0 +LINE + 5 +E54 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +14381.200495 + 30 +0.0 + 11 +4987.5 + 21 +14381.200495 + 31 +0.0 + 0 +LINE + 5 +E55 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +14402.85113 + 30 +0.0 + 11 +4950.0 + 21 +14402.85113 + 31 +0.0 + 0 +LINE + 5 +E56 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +14424.501765 + 30 +0.0 + 11 +4987.5 + 21 +14424.501765 + 31 +0.0 + 0 +LINE + 5 +E57 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +14446.1524 + 30 +0.0 + 11 +4950.0 + 21 +14446.1524 + 31 +0.0 + 0 +LINE + 5 +E58 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +14467.803035 + 30 +0.0 + 11 +4987.5 + 21 +14467.803035 + 31 +0.0 + 0 +LINE + 5 +E59 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +14489.45367 + 30 +0.0 + 11 +4950.0 + 21 +14489.45367 + 31 +0.0 + 0 +LINE + 5 +E5A + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +14511.104305 + 30 +0.0 + 11 +4987.5 + 21 +14511.104305 + 31 +0.0 + 0 +LINE + 5 +E5B + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +14532.75494 + 30 +0.0 + 11 +4950.0 + 21 +14532.75494 + 31 +0.0 + 0 +LINE + 5 +E5C + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +14554.405575 + 30 +0.0 + 11 +4987.5 + 21 +14554.405575 + 31 +0.0 + 0 +LINE + 5 +E5D + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +14576.05621 + 30 +0.0 + 11 +4950.0 + 21 +14576.05621 + 31 +0.0 + 0 +LINE + 5 +E5E + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +14597.706845 + 30 +0.0 + 11 +4987.5 + 21 +14597.706845 + 31 +0.0 + 0 +LINE + 5 +E5F + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +14619.35748 + 30 +0.0 + 11 +4950.0 + 21 +14619.35748 + 31 +0.0 + 0 +LINE + 5 +E60 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +11869.726835 + 30 +0.0 + 11 +4987.5 + 21 +11869.726835 + 31 +0.0 + 0 +LINE + 5 +E61 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +11848.0762 + 30 +0.0 + 11 +4950.0 + 21 +11848.0762 + 31 +0.0 + 0 +LINE + 5 +E62 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +11826.425565 + 30 +0.0 + 11 +4987.5 + 21 +11826.425565 + 31 +0.0 + 0 +LINE + 5 +E63 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +11804.77493 + 30 +0.0 + 11 +4950.0 + 21 +11804.77493 + 31 +0.0 + 0 +LINE + 5 +E64 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +11783.124295 + 30 +0.0 + 11 +4987.5 + 21 +11783.124295 + 31 +0.0 + 0 +LINE + 5 +E65 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +11761.47366 + 30 +0.0 + 11 +4950.0 + 21 +11761.47366 + 31 +0.0 + 0 +LINE + 5 +E66 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +11739.823025 + 30 +0.0 + 11 +4987.5 + 21 +11739.823025 + 31 +0.0 + 0 +LINE + 5 +E67 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +11718.17239 + 30 +0.0 + 11 +4950.0 + 21 +11718.17239 + 31 +0.0 + 0 +LINE + 5 +E68 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +11696.521755 + 30 +0.0 + 11 +4987.5 + 21 +11696.521755 + 31 +0.0 + 0 +LINE + 5 +E69 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +11674.87112 + 30 +0.0 + 11 +4950.0 + 21 +11674.87112 + 31 +0.0 + 0 +LINE + 5 +E6A + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +11653.220485 + 30 +0.0 + 11 +4987.5 + 21 +11653.220485 + 31 +0.0 + 0 +LINE + 5 +E6B + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +11631.56985 + 30 +0.0 + 11 +4950.0 + 21 +11631.56985 + 31 +0.0 + 0 +LINE + 5 +E6C + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +11609.919215 + 30 +0.0 + 11 +4987.5 + 21 +11609.919215 + 31 +0.0 + 0 +LINE + 5 +E6D + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +11588.26858 + 30 +0.0 + 11 +4950.0 + 21 +11588.26858 + 31 +0.0 + 0 +LINE + 5 +E6E + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +11566.617945 + 30 +0.0 + 11 +4987.5 + 21 +11566.617945 + 31 +0.0 + 0 +LINE + 5 +E6F + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +11544.96731 + 30 +0.0 + 11 +4950.0 + 21 +11544.96731 + 31 +0.0 + 0 +LINE + 5 +E70 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +11523.316675 + 30 +0.0 + 11 +4987.5 + 21 +11523.316675 + 31 +0.0 + 0 +LINE + 5 +E71 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +11501.66604 + 30 +0.0 + 11 +4950.0 + 21 +11501.66604 + 31 +0.0 + 0 +LINE + 5 +E72 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +11480.015405 + 30 +0.0 + 11 +4987.5 + 21 +11480.015405 + 31 +0.0 + 0 +LINE + 5 +E73 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +11458.36477 + 30 +0.0 + 11 +4950.0 + 21 +11458.36477 + 31 +0.0 + 0 +LINE + 5 +E74 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +11436.714135 + 30 +0.0 + 11 +4987.5 + 21 +11436.714135 + 31 +0.0 + 0 +LINE + 5 +E75 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +11415.0635 + 30 +0.0 + 11 +4950.0 + 21 +11415.0635 + 31 +0.0 + 0 +LINE + 5 +E76 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +11393.412865 + 30 +0.0 + 11 +4987.5 + 21 +11393.412865 + 31 +0.0 + 0 +LINE + 5 +E77 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +11371.76223 + 30 +0.0 + 11 +4950.0 + 21 +11371.76223 + 31 +0.0 + 0 +LINE + 5 +E78 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +11350.111595 + 30 +0.0 + 11 +4987.5 + 21 +11350.111595 + 31 +0.0 + 0 +LINE + 5 +E79 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +11328.46096 + 30 +0.0 + 11 +4950.0 + 21 +11328.46096 + 31 +0.0 + 0 +LINE + 5 +E7A + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +11306.810325 + 30 +0.0 + 11 +4987.5 + 21 +11306.810325 + 31 +0.0 + 0 +LINE + 5 +E7B + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +11285.15969 + 30 +0.0 + 11 +4950.0 + 21 +11285.15969 + 31 +0.0 + 0 +LINE + 5 +E7C + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +11263.509055 + 30 +0.0 + 11 +4987.5 + 21 +11263.509055 + 31 +0.0 + 0 +LINE + 5 +E7D + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +11241.85842 + 30 +0.0 + 11 +4950.0 + 21 +11241.85842 + 31 +0.0 + 0 +LINE + 5 +E7E + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +11220.207785 + 30 +0.0 + 11 +4987.5 + 21 +11220.207785 + 31 +0.0 + 0 +LINE + 5 +E7F + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +11198.55715 + 30 +0.0 + 11 +4950.0 + 21 +11198.55715 + 31 +0.0 + 0 +LINE + 5 +E80 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +11176.906515 + 30 +0.0 + 11 +4987.5 + 21 +11176.906515 + 31 +0.0 + 0 +LINE + 5 +E81 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +11155.25588 + 30 +0.0 + 11 +4950.0 + 21 +11155.25588 + 31 +0.0 + 0 +LINE + 5 +E82 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +11133.605245 + 30 +0.0 + 11 +4987.5 + 21 +11133.605245 + 31 +0.0 + 0 +LINE + 5 +E83 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +11111.95461 + 30 +0.0 + 11 +4950.0 + 21 +11111.95461 + 31 +0.0 + 0 +LINE + 5 +E84 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +11090.303975 + 30 +0.0 + 11 +4987.5 + 21 +11090.303975 + 31 +0.0 + 0 +LINE + 5 +E85 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +11068.65334 + 30 +0.0 + 11 +4950.0 + 21 +11068.65334 + 31 +0.0 + 0 +LINE + 5 +E86 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +11047.002705 + 30 +0.0 + 11 +4987.5 + 21 +11047.002705 + 31 +0.0 + 0 +LINE + 5 +E87 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +11025.35207 + 30 +0.0 + 11 +4950.0 + 21 +11025.35207 + 31 +0.0 + 0 +LINE + 5 +E88 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +11003.701435 + 30 +0.0 + 11 +4987.5 + 21 +11003.701435 + 31 +0.0 + 0 +LINE + 5 +E89 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +10982.0508 + 30 +0.0 + 11 +4950.0 + 21 +10982.0508 + 31 +0.0 + 0 +LINE + 5 +E8A + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +10960.400165 + 30 +0.0 + 11 +4987.5 + 21 +10960.400165 + 31 +0.0 + 0 +LINE + 5 +E8B + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +10938.74953 + 30 +0.0 + 11 +4950.0 + 21 +10938.74953 + 31 +0.0 + 0 +LINE + 5 +E8C + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +10917.098895 + 30 +0.0 + 11 +4987.5 + 21 +10917.098895 + 31 +0.0 + 0 +LINE + 5 +E8D + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +10895.44826 + 30 +0.0 + 11 +4950.0 + 21 +10895.44826 + 31 +0.0 + 0 +LINE + 5 +E8E + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +10873.797625 + 30 +0.0 + 11 +4987.5 + 21 +10873.797625 + 31 +0.0 + 0 +LINE + 5 +E8F + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +10852.14699 + 30 +0.0 + 11 +4950.0 + 21 +10852.14699 + 31 +0.0 + 0 +LINE + 5 +E90 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +10830.496355 + 30 +0.0 + 11 +4987.5 + 21 +10830.496355 + 31 +0.0 + 0 +LINE + 5 +E91 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +10808.84572 + 30 +0.0 + 11 +4950.0 + 21 +10808.84572 + 31 +0.0 + 0 +LINE + 5 +E92 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +10787.195085 + 30 +0.0 + 11 +4987.5 + 21 +10787.195085 + 31 +0.0 + 0 +LINE + 5 +E93 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +10765.54445 + 30 +0.0 + 11 +4950.0 + 21 +10765.54445 + 31 +0.0 + 0 +LINE + 5 +E94 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +10743.893815 + 30 +0.0 + 11 +4987.5 + 21 +10743.893815 + 31 +0.0 + 0 +LINE + 5 +E95 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +10722.24318 + 30 +0.0 + 11 +4950.0 + 21 +10722.24318 + 31 +0.0 + 0 +LINE + 5 +E96 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +10700.592545 + 30 +0.0 + 11 +4987.5 + 21 +10700.592545 + 31 +0.0 + 0 +LINE + 5 +E97 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +10678.94191 + 30 +0.0 + 11 +4950.0 + 21 +10678.94191 + 31 +0.0 + 0 +LINE + 5 +E98 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +10657.291275 + 30 +0.0 + 11 +4987.5 + 21 +10657.291275 + 31 +0.0 + 0 +LINE + 5 +E99 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +10635.64064 + 30 +0.0 + 11 +4950.0 + 21 +10635.64064 + 31 +0.0 + 0 +LINE + 5 +E9A + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +10613.990005 + 30 +0.0 + 11 +4987.5 + 21 +10613.990005 + 31 +0.0 + 0 +LINE + 5 +E9B + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +10592.33937 + 30 +0.0 + 11 +4950.0 + 21 +10592.33937 + 31 +0.0 + 0 +LINE + 5 +E9C + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +10570.688735 + 30 +0.0 + 11 +4987.5 + 21 +10570.688735 + 31 +0.0 + 0 +LINE + 5 +E9D + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +10549.0381 + 30 +0.0 + 11 +4950.0 + 21 +10549.0381 + 31 +0.0 + 0 +LINE + 5 +E9E + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +10527.387465 + 30 +0.0 + 11 +4987.5 + 21 +10527.387465 + 31 +0.0 + 0 +LINE + 5 +E9F + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +10505.73683 + 30 +0.0 + 11 +4950.0 + 21 +10505.73683 + 31 +0.0 + 0 +LINE + 5 +EA0 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +10484.086195 + 30 +0.0 + 11 +4987.5 + 21 +10484.086195 + 31 +0.0 + 0 +LINE + 5 +EA1 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +10462.43556 + 30 +0.0 + 11 +4950.0 + 21 +10462.43556 + 31 +0.0 + 0 +LINE + 5 +EA2 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +10440.784925 + 30 +0.0 + 11 +4987.5 + 21 +10440.784925 + 31 +0.0 + 0 +LINE + 5 +EA3 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +10419.13429 + 30 +0.0 + 11 +4950.0 + 21 +10419.13429 + 31 +0.0 + 0 +LINE + 5 +EA4 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +10397.483655 + 30 +0.0 + 11 +4987.5 + 21 +10397.483655 + 31 +0.0 + 0 +LINE + 5 +EA5 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +10375.83302 + 30 +0.0 + 11 +4950.0 + 21 +10375.83302 + 31 +0.0 + 0 +LINE + 5 +EA6 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +10354.182385 + 30 +0.0 + 11 +4987.5 + 21 +10354.182385 + 31 +0.0 + 0 +LINE + 5 +EA7 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +10332.53175 + 30 +0.0 + 11 +4950.0 + 21 +10332.53175 + 31 +0.0 + 0 +LINE + 5 +EA8 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +10310.881115 + 30 +0.0 + 11 +4987.5 + 21 +10310.881115 + 31 +0.0 + 0 +LINE + 5 +EA9 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +10289.23048 + 30 +0.0 + 11 +4950.0 + 21 +10289.23048 + 31 +0.0 + 0 +LINE + 5 +EAA + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +10267.579845 + 30 +0.0 + 11 +4987.5 + 21 +10267.579845 + 31 +0.0 + 0 +LINE + 5 +EAB + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +10245.92921 + 30 +0.0 + 11 +4950.0 + 21 +10245.92921 + 31 +0.0 + 0 +LINE + 5 +EAC + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +10224.278575 + 30 +0.0 + 11 +4987.5 + 21 +10224.278575 + 31 +0.0 + 0 +LINE + 5 +EAD + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +10202.62794 + 30 +0.0 + 11 +4950.0 + 21 +10202.62794 + 31 +0.0 + 0 +LINE + 5 +EAE + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +10180.977305 + 30 +0.0 + 11 +4987.5 + 21 +10180.977305 + 31 +0.0 + 0 +LINE + 5 +EAF + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +10159.32667 + 30 +0.0 + 11 +4950.0 + 21 +10159.32667 + 31 +0.0 + 0 +LINE + 5 +EB0 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +10137.676035 + 30 +0.0 + 11 +4987.5 + 21 +10137.676035 + 31 +0.0 + 0 +LINE + 5 +EB1 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +10116.0254 + 30 +0.0 + 11 +4950.0 + 21 +10116.0254 + 31 +0.0 + 0 +LINE + 5 +EB2 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +10094.374765 + 30 +0.0 + 11 +4987.5 + 21 +10094.374765 + 31 +0.0 + 0 +LINE + 5 +EB3 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +10072.72413 + 30 +0.0 + 11 +4950.0 + 21 +10072.72413 + 31 +0.0 + 0 +LINE + 5 +EB4 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +10051.073495 + 30 +0.0 + 11 +4987.5 + 21 +10051.073495 + 31 +0.0 + 0 +LINE + 5 +EB5 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +10029.42286 + 30 +0.0 + 11 +4950.0 + 21 +10029.42286 + 31 +0.0 + 0 +LINE + 5 +EB6 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +10007.772225 + 30 +0.0 + 11 +4987.5 + 21 +10007.772225 + 31 +0.0 + 0 +LINE + 5 +EB7 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +9986.12159 + 30 +0.0 + 11 +4950.0 + 21 +9986.12159 + 31 +0.0 + 0 +LINE + 5 +EB8 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +9964.470955 + 30 +0.0 + 11 +4987.5 + 21 +9964.470955 + 31 +0.0 + 0 +LINE + 5 +EB9 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +9942.82032 + 30 +0.0 + 11 +4950.0 + 21 +9942.82032 + 31 +0.0 + 0 +LINE + 5 +EBA + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +9921.169685 + 30 +0.0 + 11 +4987.5 + 21 +9921.169685 + 31 +0.0 + 0 +LINE + 5 +EBB + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +9899.51905 + 30 +0.0 + 11 +4950.0 + 21 +9899.51905 + 31 +0.0 + 0 +LINE + 5 +EBC + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +9877.868415 + 30 +0.0 + 11 +4987.5 + 21 +9877.868415 + 31 +0.0 + 0 +LINE + 5 +EBD + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +9856.21778 + 30 +0.0 + 11 +4950.0 + 21 +9856.21778 + 31 +0.0 + 0 +LINE + 5 +EBE + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +9834.567145 + 30 +0.0 + 11 +4987.5 + 21 +9834.567145 + 31 +0.0 + 0 +LINE + 5 +EBF + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +9812.91651 + 30 +0.0 + 11 +4950.0 + 21 +9812.91651 + 31 +0.0 + 0 +LINE + 5 +EC0 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +9791.265875 + 30 +0.0 + 11 +4987.5 + 21 +9791.265875 + 31 +0.0 + 0 +LINE + 5 +EC1 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +9769.61524 + 30 +0.0 + 11 +4950.0 + 21 +9769.61524 + 31 +0.0 + 0 +LINE + 5 +EC2 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +9747.964605 + 30 +0.0 + 11 +4987.5 + 21 +9747.964605 + 31 +0.0 + 0 +LINE + 5 +EC3 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +9726.31397 + 30 +0.0 + 11 +4950.0 + 21 +9726.31397 + 31 +0.0 + 0 +LINE + 5 +EC4 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +9704.663335 + 30 +0.0 + 11 +4987.5 + 21 +9704.663335 + 31 +0.0 + 0 +LINE + 5 +EC5 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +9683.0127 + 30 +0.0 + 11 +4950.0 + 21 +9683.0127 + 31 +0.0 + 0 +LINE + 5 +EC6 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +9661.362065 + 30 +0.0 + 11 +4987.5 + 21 +9661.362065 + 31 +0.0 + 0 +LINE + 5 +EC7 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +9639.71143 + 30 +0.0 + 11 +4950.0 + 21 +9639.71143 + 31 +0.0 + 0 +LINE + 5 +EC8 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +9618.060795 + 30 +0.0 + 11 +4987.5 + 21 +9618.060795 + 31 +0.0 + 0 +LINE + 5 +EC9 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +9596.41016 + 30 +0.0 + 11 +4950.0 + 21 +9596.41016 + 31 +0.0 + 0 +LINE + 5 +ECA + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +9574.759525 + 30 +0.0 + 11 +4987.5 + 21 +9574.759525 + 31 +0.0 + 0 +LINE + 5 +ECB + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +9553.10889 + 30 +0.0 + 11 +4950.0 + 21 +9553.10889 + 31 +0.0 + 0 +LINE + 5 +ECC + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +9531.458255 + 30 +0.0 + 11 +4987.5 + 21 +9531.458255 + 31 +0.0 + 0 +LINE + 5 +ECD + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +9509.80762 + 30 +0.0 + 11 +4950.0 + 21 +9509.80762 + 31 +0.0 + 0 +LINE + 5 +ECE + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +9488.156985 + 30 +0.0 + 11 +4987.5 + 21 +9488.156985 + 31 +0.0 + 0 +LINE + 5 +ECF + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +9466.50635 + 30 +0.0 + 11 +4950.0 + 21 +9466.50635 + 31 +0.0 + 0 +LINE + 5 +ED0 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +9444.855715 + 30 +0.0 + 11 +4987.5 + 21 +9444.855715 + 31 +0.0 + 0 +LINE + 5 +ED1 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +9423.20508 + 30 +0.0 + 11 +4950.0 + 21 +9423.20508 + 31 +0.0 + 0 +LINE + 5 +ED2 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +9401.554445 + 30 +0.0 + 11 +4987.5 + 21 +9401.554445 + 31 +0.0 + 0 +LINE + 5 +ED3 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +9379.90381 + 30 +0.0 + 11 +4950.0 + 21 +9379.90381 + 31 +0.0 + 0 +LINE + 5 +ED4 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +9358.253175 + 30 +0.0 + 11 +4987.5 + 21 +9358.253175 + 31 +0.0 + 0 +LINE + 5 +ED5 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +9336.60254 + 30 +0.0 + 11 +4950.0 + 21 +9336.60254 + 31 +0.0 + 0 +LINE + 5 +ED6 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +9314.951905 + 30 +0.0 + 11 +4987.5 + 21 +9314.951905 + 31 +0.0 + 0 +LINE + 5 +ED7 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +9293.30127 + 30 +0.0 + 11 +4950.0 + 21 +9293.30127 + 31 +0.0 + 0 +LINE + 5 +ED8 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +9271.650635 + 30 +0.0 + 11 +4987.5 + 21 +9271.650635 + 31 +0.0 + 0 +LINE + 5 +ED9 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +9250.0 + 30 +0.0 + 11 +4950.0 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +EDA + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +9228.349365 + 30 +0.0 + 11 +4987.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EDB + 8 +0 + 62 + 0 + 10 +5037.5 + 20 +9228.349365 + 30 +0.0 + 11 +5062.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EDC + 8 +0 + 62 + 0 + 10 +5112.5 + 20 +9228.349365 + 30 +0.0 + 11 +5137.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EDD + 8 +0 + 62 + 0 + 10 +5187.5 + 20 +9228.349365 + 30 +0.0 + 11 +5212.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EDE + 8 +0 + 62 + 0 + 10 +5262.5 + 20 +9228.349365 + 30 +0.0 + 11 +5287.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EDF + 8 +0 + 62 + 0 + 10 +5337.5 + 20 +9228.349365 + 30 +0.0 + 11 +5362.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EE0 + 8 +0 + 62 + 0 + 10 +5412.5 + 20 +9228.349365 + 30 +0.0 + 11 +5437.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EE1 + 8 +0 + 62 + 0 + 10 +5487.5 + 20 +9228.349365 + 30 +0.0 + 11 +5512.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EE2 + 8 +0 + 62 + 0 + 10 +5562.5 + 20 +9228.349365 + 30 +0.0 + 11 +5587.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EE3 + 8 +0 + 62 + 0 + 10 +5637.5 + 20 +9228.349365 + 30 +0.0 + 11 +5662.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EE4 + 8 +0 + 62 + 0 + 10 +5712.5 + 20 +9228.349365 + 30 +0.0 + 11 +5737.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EE5 + 8 +0 + 62 + 0 + 10 +5787.5 + 20 +9228.349365 + 30 +0.0 + 11 +5812.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EE6 + 8 +0 + 62 + 0 + 10 +5862.5 + 20 +9228.349365 + 30 +0.0 + 11 +5887.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EE7 + 8 +0 + 62 + 0 + 10 +5937.5 + 20 +9228.349365 + 30 +0.0 + 11 +5962.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EE8 + 8 +0 + 62 + 0 + 10 +6012.5 + 20 +9228.349365 + 30 +0.0 + 11 +6037.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EE9 + 8 +0 + 62 + 0 + 10 +6087.5 + 20 +9228.349365 + 30 +0.0 + 11 +6112.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EEA + 8 +0 + 62 + 0 + 10 +6162.5 + 20 +9228.349365 + 30 +0.0 + 11 +6187.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EEB + 8 +0 + 62 + 0 + 10 +6237.5 + 20 +9228.349365 + 30 +0.0 + 11 +6262.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EEC + 8 +0 + 62 + 0 + 10 +6312.5 + 20 +9228.349365 + 30 +0.0 + 11 +6337.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EED + 8 +0 + 62 + 0 + 10 +6387.5 + 20 +9228.349365 + 30 +0.0 + 11 +6412.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EEE + 8 +0 + 62 + 0 + 10 +6462.5 + 20 +9228.349365 + 30 +0.0 + 11 +6487.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EEF + 8 +0 + 62 + 0 + 10 +6537.5 + 20 +9228.349365 + 30 +0.0 + 11 +6562.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EF0 + 8 +0 + 62 + 0 + 10 +6612.5 + 20 +9228.349365 + 30 +0.0 + 11 +6637.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EF1 + 8 +0 + 62 + 0 + 10 +6687.5 + 20 +9228.349365 + 30 +0.0 + 11 +6712.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EF2 + 8 +0 + 62 + 0 + 10 +6762.5 + 20 +9228.349365 + 30 +0.0 + 11 +6787.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EF3 + 8 +0 + 62 + 0 + 10 +6837.5 + 20 +9228.349365 + 30 +0.0 + 11 +6862.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EF4 + 8 +0 + 62 + 0 + 10 +6912.5 + 20 +9228.349365 + 30 +0.0 + 11 +6937.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EF5 + 8 +0 + 62 + 0 + 10 +6987.5 + 20 +9228.349365 + 30 +0.0 + 11 +7012.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EF6 + 8 +0 + 62 + 0 + 10 +7062.5 + 20 +9228.349365 + 30 +0.0 + 11 +7087.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EF7 + 8 +0 + 62 + 0 + 10 +7137.5 + 20 +9228.349365 + 30 +0.0 + 11 +7162.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EF8 + 8 +0 + 62 + 0 + 10 +7212.5 + 20 +9228.349365 + 30 +0.0 + 11 +7237.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EF9 + 8 +0 + 62 + 0 + 10 +7287.5 + 20 +9228.349365 + 30 +0.0 + 11 +7312.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EFA + 8 +0 + 62 + 0 + 10 +7362.5 + 20 +9228.349365 + 30 +0.0 + 11 +7387.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EFB + 8 +0 + 62 + 0 + 10 +7437.5 + 20 +9228.349365 + 30 +0.0 + 11 +7462.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EFC + 8 +0 + 62 + 0 + 10 +7512.5 + 20 +9228.349365 + 30 +0.0 + 11 +7537.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EFD + 8 +0 + 62 + 0 + 10 +7587.5 + 20 +9228.349365 + 30 +0.0 + 11 +7612.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EFE + 8 +0 + 62 + 0 + 10 +7662.5 + 20 +9228.349365 + 30 +0.0 + 11 +7687.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +EFF + 8 +0 + 62 + 0 + 10 +7737.5 + 20 +9228.349365 + 30 +0.0 + 11 +7751.25 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +F00 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +9206.69873 + 30 +0.0 + 11 +4950.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F01 + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +9206.69873 + 30 +0.0 + 11 +5025.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F02 + 8 +0 + 62 + 0 + 10 +5075.0 + 20 +9206.69873 + 30 +0.0 + 11 +5100.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F03 + 8 +0 + 62 + 0 + 10 +5150.0 + 20 +9206.69873 + 30 +0.0 + 11 +5175.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F04 + 8 +0 + 62 + 0 + 10 +5225.0 + 20 +9206.69873 + 30 +0.0 + 11 +5250.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F05 + 8 +0 + 62 + 0 + 10 +5300.0 + 20 +9206.69873 + 30 +0.0 + 11 +5325.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F06 + 8 +0 + 62 + 0 + 10 +5375.0 + 20 +9206.69873 + 30 +0.0 + 11 +5400.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F07 + 8 +0 + 62 + 0 + 10 +5450.0 + 20 +9206.69873 + 30 +0.0 + 11 +5475.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F08 + 8 +0 + 62 + 0 + 10 +5525.0 + 20 +9206.69873 + 30 +0.0 + 11 +5550.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F09 + 8 +0 + 62 + 0 + 10 +5600.0 + 20 +9206.69873 + 30 +0.0 + 11 +5625.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F0A + 8 +0 + 62 + 0 + 10 +5675.0 + 20 +9206.69873 + 30 +0.0 + 11 +5700.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F0B + 8 +0 + 62 + 0 + 10 +5750.0 + 20 +9206.69873 + 30 +0.0 + 11 +5775.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F0C + 8 +0 + 62 + 0 + 10 +5825.0 + 20 +9206.69873 + 30 +0.0 + 11 +5850.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F0D + 8 +0 + 62 + 0 + 10 +5900.0 + 20 +9206.69873 + 30 +0.0 + 11 +5925.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F0E + 8 +0 + 62 + 0 + 10 +5975.0 + 20 +9206.69873 + 30 +0.0 + 11 +6000.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F0F + 8 +0 + 62 + 0 + 10 +6050.0 + 20 +9206.69873 + 30 +0.0 + 11 +6075.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F10 + 8 +0 + 62 + 0 + 10 +6125.0 + 20 +9206.69873 + 30 +0.0 + 11 +6150.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F11 + 8 +0 + 62 + 0 + 10 +6200.0 + 20 +9206.69873 + 30 +0.0 + 11 +6225.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F12 + 8 +0 + 62 + 0 + 10 +6275.0 + 20 +9206.69873 + 30 +0.0 + 11 +6300.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F13 + 8 +0 + 62 + 0 + 10 +6350.0 + 20 +9206.69873 + 30 +0.0 + 11 +6375.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F14 + 8 +0 + 62 + 0 + 10 +6425.0 + 20 +9206.69873 + 30 +0.0 + 11 +6450.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F15 + 8 +0 + 62 + 0 + 10 +6500.0 + 20 +9206.69873 + 30 +0.0 + 11 +6525.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F16 + 8 +0 + 62 + 0 + 10 +6575.0 + 20 +9206.69873 + 30 +0.0 + 11 +6600.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F17 + 8 +0 + 62 + 0 + 10 +6650.0 + 20 +9206.69873 + 30 +0.0 + 11 +6675.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F18 + 8 +0 + 62 + 0 + 10 +6725.0 + 20 +9206.69873 + 30 +0.0 + 11 +6750.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F19 + 8 +0 + 62 + 0 + 10 +6800.0 + 20 +9206.69873 + 30 +0.0 + 11 +6825.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F1A + 8 +0 + 62 + 0 + 10 +6875.0 + 20 +9206.69873 + 30 +0.0 + 11 +6900.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F1B + 8 +0 + 62 + 0 + 10 +6950.0 + 20 +9206.69873 + 30 +0.0 + 11 +6975.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F1C + 8 +0 + 62 + 0 + 10 +7025.0 + 20 +9206.69873 + 30 +0.0 + 11 +7050.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F1D + 8 +0 + 62 + 0 + 10 +7100.0 + 20 +9206.69873 + 30 +0.0 + 11 +7125.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F1E + 8 +0 + 62 + 0 + 10 +7175.0 + 20 +9206.69873 + 30 +0.0 + 11 +7200.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F1F + 8 +0 + 62 + 0 + 10 +7250.0 + 20 +9206.69873 + 30 +0.0 + 11 +7275.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F20 + 8 +0 + 62 + 0 + 10 +7325.0 + 20 +9206.69873 + 30 +0.0 + 11 +7350.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F21 + 8 +0 + 62 + 0 + 10 +7400.0 + 20 +9206.69873 + 30 +0.0 + 11 +7425.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F22 + 8 +0 + 62 + 0 + 10 +7475.0 + 20 +9206.69873 + 30 +0.0 + 11 +7500.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F23 + 8 +0 + 62 + 0 + 10 +7550.0 + 20 +9206.69873 + 30 +0.0 + 11 +7575.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F24 + 8 +0 + 62 + 0 + 10 +7625.0 + 20 +9206.69873 + 30 +0.0 + 11 +7650.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F25 + 8 +0 + 62 + 0 + 10 +7700.0 + 20 +9206.69873 + 30 +0.0 + 11 +7725.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +F26 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +9185.048095 + 30 +0.0 + 11 +4987.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F27 + 8 +0 + 62 + 0 + 10 +5037.5 + 20 +9185.048095 + 30 +0.0 + 11 +5062.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F28 + 8 +0 + 62 + 0 + 10 +5112.5 + 20 +9185.048095 + 30 +0.0 + 11 +5137.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F29 + 8 +0 + 62 + 0 + 10 +5187.5 + 20 +9185.048095 + 30 +0.0 + 11 +5212.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F2A + 8 +0 + 62 + 0 + 10 +5262.5 + 20 +9185.048095 + 30 +0.0 + 11 +5287.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F2B + 8 +0 + 62 + 0 + 10 +5337.5 + 20 +9185.048095 + 30 +0.0 + 11 +5362.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F2C + 8 +0 + 62 + 0 + 10 +5412.5 + 20 +9185.048095 + 30 +0.0 + 11 +5437.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F2D + 8 +0 + 62 + 0 + 10 +5487.5 + 20 +9185.048095 + 30 +0.0 + 11 +5512.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F2E + 8 +0 + 62 + 0 + 10 +5562.5 + 20 +9185.048095 + 30 +0.0 + 11 +5587.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F2F + 8 +0 + 62 + 0 + 10 +5637.5 + 20 +9185.048095 + 30 +0.0 + 11 +5662.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F30 + 8 +0 + 62 + 0 + 10 +5712.5 + 20 +9185.048095 + 30 +0.0 + 11 +5737.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F31 + 8 +0 + 62 + 0 + 10 +5787.5 + 20 +9185.048095 + 30 +0.0 + 11 +5812.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F32 + 8 +0 + 62 + 0 + 10 +5862.5 + 20 +9185.048095 + 30 +0.0 + 11 +5887.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F33 + 8 +0 + 62 + 0 + 10 +5937.5 + 20 +9185.048095 + 30 +0.0 + 11 +5962.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F34 + 8 +0 + 62 + 0 + 10 +6012.5 + 20 +9185.048095 + 30 +0.0 + 11 +6037.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F35 + 8 +0 + 62 + 0 + 10 +6087.5 + 20 +9185.048095 + 30 +0.0 + 11 +6112.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F36 + 8 +0 + 62 + 0 + 10 +6162.5 + 20 +9185.048095 + 30 +0.0 + 11 +6187.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F37 + 8 +0 + 62 + 0 + 10 +6237.5 + 20 +9185.048095 + 30 +0.0 + 11 +6262.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F38 + 8 +0 + 62 + 0 + 10 +6312.5 + 20 +9185.048095 + 30 +0.0 + 11 +6337.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F39 + 8 +0 + 62 + 0 + 10 +6387.5 + 20 +9185.048095 + 30 +0.0 + 11 +6412.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F3A + 8 +0 + 62 + 0 + 10 +6462.5 + 20 +9185.048095 + 30 +0.0 + 11 +6487.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F3B + 8 +0 + 62 + 0 + 10 +6537.5 + 20 +9185.048095 + 30 +0.0 + 11 +6562.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F3C + 8 +0 + 62 + 0 + 10 +6612.5 + 20 +9185.048095 + 30 +0.0 + 11 +6637.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F3D + 8 +0 + 62 + 0 + 10 +6687.5 + 20 +9185.048095 + 30 +0.0 + 11 +6712.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F3E + 8 +0 + 62 + 0 + 10 +6762.5 + 20 +9185.048095 + 30 +0.0 + 11 +6787.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F3F + 8 +0 + 62 + 0 + 10 +6837.5 + 20 +9185.048095 + 30 +0.0 + 11 +6862.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F40 + 8 +0 + 62 + 0 + 10 +6912.5 + 20 +9185.048095 + 30 +0.0 + 11 +6937.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F41 + 8 +0 + 62 + 0 + 10 +6987.5 + 20 +9185.048095 + 30 +0.0 + 11 +7012.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F42 + 8 +0 + 62 + 0 + 10 +7062.5 + 20 +9185.048095 + 30 +0.0 + 11 +7087.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F43 + 8 +0 + 62 + 0 + 10 +7137.5 + 20 +9185.048095 + 30 +0.0 + 11 +7162.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F44 + 8 +0 + 62 + 0 + 10 +7212.5 + 20 +9185.048095 + 30 +0.0 + 11 +7237.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F45 + 8 +0 + 62 + 0 + 10 +7287.5 + 20 +9185.048095 + 30 +0.0 + 11 +7312.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F46 + 8 +0 + 62 + 0 + 10 +7362.5 + 20 +9185.048095 + 30 +0.0 + 11 +7387.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F47 + 8 +0 + 62 + 0 + 10 +7437.5 + 20 +9185.048095 + 30 +0.0 + 11 +7462.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F48 + 8 +0 + 62 + 0 + 10 +7512.5 + 20 +9185.048095 + 30 +0.0 + 11 +7537.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F49 + 8 +0 + 62 + 0 + 10 +7587.5 + 20 +9185.048095 + 30 +0.0 + 11 +7612.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F4A + 8 +0 + 62 + 0 + 10 +7662.5 + 20 +9185.048095 + 30 +0.0 + 11 +7687.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F4B + 8 +0 + 62 + 0 + 10 +7737.5 + 20 +9185.048095 + 30 +0.0 + 11 +7751.25 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +F4C + 8 +0 + 62 + 0 + 10 +4999.999991 + 20 +14186.344796 + 30 +0.0 + 11 +4987.499991 + 21 +14207.995431 + 31 +0.0 + 0 +LINE + 5 +F4D + 8 +0 + 62 + 0 + 10 +4962.499991 + 20 +14251.296701 + 30 +0.0 + 11 +4949.999991 + 21 +14272.947337 + 31 +0.0 + 0 +LINE + 5 +F4E + 8 +0 + 62 + 0 + 10 +4924.999991 + 20 +14316.248607 + 30 +0.0 + 11 +4920.0 + 21 +14324.908845 + 31 +0.0 + 0 +LINE + 5 +F4F + 8 +0 + 62 + 0 + 10 +4999.999991 + 20 +14143.043526 + 30 +0.0 + 11 +4987.499991 + 21 +14164.694161 + 31 +0.0 + 0 +LINE + 5 +F50 + 8 +0 + 62 + 0 + 10 +4962.499991 + 20 +14207.995431 + 30 +0.0 + 11 +4949.999991 + 21 +14229.646066 + 31 +0.0 + 0 +LINE + 5 +F51 + 8 +0 + 62 + 0 + 10 +4924.999991 + 20 +14272.947337 + 30 +0.0 + 11 +4920.0 + 21 +14281.607575 + 31 +0.0 + 0 +LINE + 5 +F52 + 8 +0 + 62 + 0 + 10 +4999.999991 + 20 +14099.742256 + 30 +0.0 + 11 +4987.499991 + 21 +14121.392891 + 31 +0.0 + 0 +LINE + 5 +F53 + 8 +0 + 62 + 0 + 10 +4962.499991 + 20 +14164.694161 + 30 +0.0 + 11 +4949.999991 + 21 +14186.344796 + 31 +0.0 + 0 +LINE + 5 +F54 + 8 +0 + 62 + 0 + 10 +4924.999991 + 20 +14229.646066 + 30 +0.0 + 11 +4920.0 + 21 +14238.306305 + 31 +0.0 + 0 +LINE + 5 +F55 + 8 +0 + 62 + 0 + 10 +4999.999991 + 20 +14056.440986 + 30 +0.0 + 11 +4987.499991 + 21 +14078.091621 + 31 +0.0 + 0 +LINE + 5 +F56 + 8 +0 + 62 + 0 + 10 +4962.499991 + 20 +14121.392891 + 30 +0.0 + 11 +4949.999991 + 21 +14143.043526 + 31 +0.0 + 0 +LINE + 5 +F57 + 8 +0 + 62 + 0 + 10 +4924.999991 + 20 +14186.344796 + 30 +0.0 + 11 +4920.0 + 21 +14195.005035 + 31 +0.0 + 0 +LINE + 5 +F58 + 8 +0 + 62 + 0 + 10 +4999.999991 + 20 +14013.139716 + 30 +0.0 + 11 +4987.499991 + 21 +14034.790351 + 31 +0.0 + 0 +LINE + 5 +F59 + 8 +0 + 62 + 0 + 10 +4962.499991 + 20 +14078.091621 + 30 +0.0 + 11 +4949.999991 + 21 +14099.742256 + 31 +0.0 + 0 +LINE + 5 +F5A + 8 +0 + 62 + 0 + 10 +4924.999991 + 20 +14143.043526 + 30 +0.0 + 11 +4920.0 + 21 +14151.703765 + 31 +0.0 + 0 +LINE + 5 +F5B + 8 +0 + 62 + 0 + 10 +7737.499991 + 20 +9228.34936 + 30 +0.0 + 11 +7724.999991 + 21 +9249.999995 + 31 +0.0 + 0 +LINE + 5 +F5C + 8 +0 + 62 + 0 + 10 +4999.999991 + 20 +13969.838445 + 30 +0.0 + 11 +4987.499991 + 21 +13991.489081 + 31 +0.0 + 0 +LINE + 5 +F5D + 8 +0 + 62 + 0 + 10 +4962.499991 + 20 +14034.790351 + 30 +0.0 + 11 +4949.999991 + 21 +14056.440986 + 31 +0.0 + 0 +LINE + 5 +F5E + 8 +0 + 62 + 0 + 10 +4924.999991 + 20 +14099.742256 + 30 +0.0 + 11 +4920.0 + 21 +14108.402495 + 31 +0.0 + 0 +LINE + 5 +F5F + 8 +0 + 62 + 0 + 10 +7737.499991 + 20 +9185.04809 + 30 +0.0 + 11 +7724.999991 + 21 +9206.698725 + 31 +0.0 + 0 +LINE + 5 +F60 + 8 +0 + 62 + 0 + 10 +7699.999991 + 20 +9249.999995 + 30 +0.0 + 11 +7699.999988 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +F61 + 8 +0 + 62 + 0 + 10 +4999.999991 + 20 +13926.537175 + 30 +0.0 + 11 +4987.499991 + 21 +13948.18781 + 31 +0.0 + 0 +LINE + 5 +F62 + 8 +0 + 62 + 0 + 10 +4962.499991 + 20 +13991.489081 + 30 +0.0 + 11 +4949.999991 + 21 +14013.139716 + 31 +0.0 + 0 +LINE + 5 +F63 + 8 +0 + 62 + 0 + 10 +4924.999991 + 20 +14056.440986 + 30 +0.0 + 11 +4920.0 + 21 +14065.101225 + 31 +0.0 + 0 +LINE + 5 +F64 + 8 +0 + 62 + 0 + 10 +7699.999991 + 20 +9206.698725 + 30 +0.0 + 11 +7687.499991 + 21 +9228.34936 + 31 +0.0 + 0 +LINE + 5 +F65 + 8 +0 + 62 + 0 + 10 +4999.999991 + 20 +13883.235905 + 30 +0.0 + 11 +4987.499991 + 21 +13904.88654 + 31 +0.0 + 0 +LINE + 5 +F66 + 8 +0 + 62 + 0 + 10 +4962.499991 + 20 +13948.18781 + 30 +0.0 + 11 +4949.999991 + 21 +13969.838446 + 31 +0.0 + 0 +LINE + 5 +F67 + 8 +0 + 62 + 0 + 10 +4924.999991 + 20 +14013.139716 + 30 +0.0 + 11 +4920.0 + 21 +14021.799955 + 31 +0.0 + 0 +LINE + 5 +F68 + 8 +0 + 62 + 0 + 10 +7696.18801 + 20 +9170.0 + 30 +0.0 + 11 +7687.499991 + 21 +9185.04809 + 31 +0.0 + 0 +LINE + 5 +F69 + 8 +0 + 62 + 0 + 10 +7662.499991 + 20 +9228.34936 + 30 +0.0 + 11 +7649.999991 + 21 +9249.999995 + 31 +0.0 + 0 +LINE + 5 +F6A + 8 +0 + 62 + 0 + 10 +4999.999991 + 20 +13839.934635 + 30 +0.0 + 11 +4987.499991 + 21 +13861.58527 + 31 +0.0 + 0 +LINE + 5 +F6B + 8 +0 + 62 + 0 + 10 +4962.499991 + 20 +13904.88654 + 30 +0.0 + 11 +4949.999991 + 21 +13926.537175 + 31 +0.0 + 0 +LINE + 5 +F6C + 8 +0 + 62 + 0 + 10 +4924.999991 + 20 +13969.838446 + 30 +0.0 + 11 +4920.0 + 21 +13978.498685 + 31 +0.0 + 0 +LINE + 5 +F6D + 8 +0 + 62 + 0 + 10 +7662.499991 + 20 +9185.04809 + 30 +0.0 + 11 +7649.999991 + 21 +9206.698725 + 31 +0.0 + 0 +LINE + 5 +F6E + 8 +0 + 62 + 0 + 10 +7624.999991 + 20 +9249.999995 + 30 +0.0 + 11 +7624.999989 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +F6F + 8 +0 + 62 + 0 + 10 +4999.999991 + 20 +13796.633365 + 30 +0.0 + 11 +4987.499991 + 21 +13818.284 + 31 +0.0 + 0 +LINE + 5 +F70 + 8 +0 + 62 + 0 + 10 +4962.499991 + 20 +13861.58527 + 30 +0.0 + 11 +4949.999991 + 21 +13883.235905 + 31 +0.0 + 0 +LINE + 5 +F71 + 8 +0 + 62 + 0 + 10 +4924.999991 + 20 +13926.537175 + 30 +0.0 + 11 +4920.0 + 21 +13935.197415 + 31 +0.0 + 0 +LINE + 5 +F72 + 8 +0 + 62 + 0 + 10 +7624.999991 + 20 +9206.698725 + 30 +0.0 + 11 +7612.499991 + 21 +9228.34936 + 31 +0.0 + 0 +LINE + 5 +F73 + 8 +0 + 62 + 0 + 10 +4999.999991 + 20 +13753.332095 + 30 +0.0 + 11 +4987.499991 + 21 +13774.98273 + 31 +0.0 + 0 +LINE + 5 +F74 + 8 +0 + 62 + 0 + 10 +4962.499991 + 20 +13818.284 + 30 +0.0 + 11 +4949.999991 + 21 +13839.934635 + 31 +0.0 + 0 +LINE + 5 +F75 + 8 +0 + 62 + 0 + 10 +4924.999991 + 20 +13883.235905 + 30 +0.0 + 11 +4920.0 + 21 +13891.896145 + 31 +0.0 + 0 +LINE + 5 +F76 + 8 +0 + 62 + 0 + 10 +7621.18801 + 20 +9170.0 + 30 +0.0 + 11 +7612.499992 + 21 +9185.04809 + 31 +0.0 + 0 +LINE + 5 +F77 + 8 +0 + 62 + 0 + 10 +7587.499992 + 20 +9228.34936 + 30 +0.0 + 11 +7574.999992 + 21 +9249.999995 + 31 +0.0 + 0 +LINE + 5 +F78 + 8 +0 + 62 + 0 + 10 +4999.999992 + 20 +13710.030825 + 30 +0.0 + 11 +4987.499992 + 21 +13731.68146 + 31 +0.0 + 0 +LINE + 5 +F79 + 8 +0 + 62 + 0 + 10 +4962.499992 + 20 +13774.98273 + 30 +0.0 + 11 +4949.999992 + 21 +13796.633365 + 31 +0.0 + 0 +LINE + 5 +F7A + 8 +0 + 62 + 0 + 10 +4924.999992 + 20 +13839.934635 + 30 +0.0 + 11 +4920.0 + 21 +13848.594875 + 31 +0.0 + 0 +LINE + 5 +F7B + 8 +0 + 62 + 0 + 10 +7587.499992 + 20 +9185.04809 + 30 +0.0 + 11 +7574.999992 + 21 +9206.698725 + 31 +0.0 + 0 +LINE + 5 +F7C + 8 +0 + 62 + 0 + 10 +7549.999992 + 20 +9249.999995 + 30 +0.0 + 11 +7549.999989 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +F7D + 8 +0 + 62 + 0 + 10 +4999.999992 + 20 +13666.729554 + 30 +0.0 + 11 +4987.499992 + 21 +13688.38019 + 31 +0.0 + 0 +LINE + 5 +F7E + 8 +0 + 62 + 0 + 10 +4962.499992 + 20 +13731.68146 + 30 +0.0 + 11 +4949.999992 + 21 +13753.332095 + 31 +0.0 + 0 +LINE + 5 +F7F + 8 +0 + 62 + 0 + 10 +4924.999992 + 20 +13796.633365 + 30 +0.0 + 11 +4920.0 + 21 +13805.293605 + 31 +0.0 + 0 +LINE + 5 +F80 + 8 +0 + 62 + 0 + 10 +7549.999992 + 20 +9206.698725 + 30 +0.0 + 11 +7537.499992 + 21 +9228.34936 + 31 +0.0 + 0 +LINE + 5 +F81 + 8 +0 + 62 + 0 + 10 +4999.999992 + 20 +13623.428284 + 30 +0.0 + 11 +4987.499992 + 21 +13645.078919 + 31 +0.0 + 0 +LINE + 5 +F82 + 8 +0 + 62 + 0 + 10 +4962.499992 + 20 +13688.38019 + 30 +0.0 + 11 +4949.999992 + 21 +13710.030825 + 31 +0.0 + 0 +LINE + 5 +F83 + 8 +0 + 62 + 0 + 10 +4924.999992 + 20 +13753.332095 + 30 +0.0 + 11 +4920.0 + 21 +13761.992335 + 31 +0.0 + 0 +LINE + 5 +F84 + 8 +0 + 62 + 0 + 10 +7546.188011 + 20 +9170.0 + 30 +0.0 + 11 +7537.499992 + 21 +9185.04809 + 31 +0.0 + 0 +LINE + 5 +F85 + 8 +0 + 62 + 0 + 10 +7512.499992 + 20 +9228.34936 + 30 +0.0 + 11 +7499.999992 + 21 +9249.999995 + 31 +0.0 + 0 +LINE + 5 +F86 + 8 +0 + 62 + 0 + 10 +4999.999992 + 20 +13580.127014 + 30 +0.0 + 11 +4987.499992 + 21 +13601.777649 + 31 +0.0 + 0 +LINE + 5 +F87 + 8 +0 + 62 + 0 + 10 +4962.499992 + 20 +13645.078919 + 30 +0.0 + 11 +4949.999992 + 21 +13666.729555 + 31 +0.0 + 0 +LINE + 5 +F88 + 8 +0 + 62 + 0 + 10 +4924.999992 + 20 +13710.030825 + 30 +0.0 + 11 +4920.0 + 21 +13718.691065 + 31 +0.0 + 0 +LINE + 5 +F89 + 8 +0 + 62 + 0 + 10 +7512.499992 + 20 +9185.04809 + 30 +0.0 + 11 +7499.999992 + 21 +9206.698725 + 31 +0.0 + 0 +LINE + 5 +F8A + 8 +0 + 62 + 0 + 10 +7474.999992 + 20 +9249.999995 + 30 +0.0 + 11 +7474.999989 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +F8B + 8 +0 + 62 + 0 + 10 +4999.999992 + 20 +13536.825744 + 30 +0.0 + 11 +4987.499992 + 21 +13558.476379 + 31 +0.0 + 0 +LINE + 5 +F8C + 8 +0 + 62 + 0 + 10 +4962.499992 + 20 +13601.777649 + 30 +0.0 + 11 +4949.999992 + 21 +13623.428284 + 31 +0.0 + 0 +LINE + 5 +F8D + 8 +0 + 62 + 0 + 10 +4924.999992 + 20 +13666.729555 + 30 +0.0 + 11 +4920.0 + 21 +13675.389795 + 31 +0.0 + 0 +LINE + 5 +F8E + 8 +0 + 62 + 0 + 10 +7474.999992 + 20 +9206.698725 + 30 +0.0 + 11 +7462.499992 + 21 +9228.34936 + 31 +0.0 + 0 +LINE + 5 +F8F + 8 +0 + 62 + 0 + 10 +4999.999992 + 20 +13493.524474 + 30 +0.0 + 11 +4987.499992 + 21 +13515.175109 + 31 +0.0 + 0 +LINE + 5 +F90 + 8 +0 + 62 + 0 + 10 +4962.499992 + 20 +13558.476379 + 30 +0.0 + 11 +4949.999992 + 21 +13580.127014 + 31 +0.0 + 0 +LINE + 5 +F91 + 8 +0 + 62 + 0 + 10 +4924.999992 + 20 +13623.428284 + 30 +0.0 + 11 +4920.0 + 21 +13632.088525 + 31 +0.0 + 0 +LINE + 5 +F92 + 8 +0 + 62 + 0 + 10 +7471.188011 + 20 +9170.0 + 30 +0.0 + 11 +7462.499992 + 21 +9185.04809 + 31 +0.0 + 0 +LINE + 5 +F93 + 8 +0 + 62 + 0 + 10 +7437.499992 + 20 +9228.34936 + 30 +0.0 + 11 +7424.999992 + 21 +9249.999995 + 31 +0.0 + 0 +LINE + 5 +F94 + 8 +0 + 62 + 0 + 10 +4999.999992 + 20 +13450.223204 + 30 +0.0 + 11 +4987.499992 + 21 +13471.873839 + 31 +0.0 + 0 +LINE + 5 +F95 + 8 +0 + 62 + 0 + 10 +4962.499992 + 20 +13515.175109 + 30 +0.0 + 11 +4949.999992 + 21 +13536.825744 + 31 +0.0 + 0 +LINE + 5 +F96 + 8 +0 + 62 + 0 + 10 +4924.999992 + 20 +13580.127014 + 30 +0.0 + 11 +4920.0 + 21 +13588.787255 + 31 +0.0 + 0 +LINE + 5 +F97 + 8 +0 + 62 + 0 + 10 +7437.499992 + 20 +9185.04809 + 30 +0.0 + 11 +7424.999992 + 21 +9206.698725 + 31 +0.0 + 0 +LINE + 5 +F98 + 8 +0 + 62 + 0 + 10 +7399.999992 + 20 +9249.999995 + 30 +0.0 + 11 +7399.99999 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +F99 + 8 +0 + 62 + 0 + 10 +4999.999992 + 20 +13406.921934 + 30 +0.0 + 11 +4987.499992 + 21 +13428.572569 + 31 +0.0 + 0 +LINE + 5 +F9A + 8 +0 + 62 + 0 + 10 +4962.499992 + 20 +13471.873839 + 30 +0.0 + 11 +4949.999992 + 21 +13493.524474 + 31 +0.0 + 0 +LINE + 5 +F9B + 8 +0 + 62 + 0 + 10 +4924.999992 + 20 +13536.825744 + 30 +0.0 + 11 +4920.0 + 21 +13545.485985 + 31 +0.0 + 0 +LINE + 5 +F9C + 8 +0 + 62 + 0 + 10 +7399.999992 + 20 +9206.698725 + 30 +0.0 + 11 +7387.499992 + 21 +9228.34936 + 31 +0.0 + 0 +LINE + 5 +F9D + 8 +0 + 62 + 0 + 10 +4999.999992 + 20 +13363.620663 + 30 +0.0 + 11 +4987.499992 + 21 +13385.271299 + 31 +0.0 + 0 +LINE + 5 +F9E + 8 +0 + 62 + 0 + 10 +4962.499992 + 20 +13428.572569 + 30 +0.0 + 11 +4949.999992 + 21 +13450.223204 + 31 +0.0 + 0 +LINE + 5 +F9F + 8 +0 + 62 + 0 + 10 +4924.999992 + 20 +13493.524474 + 30 +0.0 + 11 +4920.0 + 21 +13502.184715 + 31 +0.0 + 0 +LINE + 5 +FA0 + 8 +0 + 62 + 0 + 10 +7396.188011 + 20 +9170.0 + 30 +0.0 + 11 +7387.499992 + 21 +9185.04809 + 31 +0.0 + 0 +LINE + 5 +FA1 + 8 +0 + 62 + 0 + 10 +7362.499992 + 20 +9228.34936 + 30 +0.0 + 11 +7349.999992 + 21 +9249.999996 + 31 +0.0 + 0 +LINE + 5 +FA2 + 8 +0 + 62 + 0 + 10 +4999.999992 + 20 +13320.319393 + 30 +0.0 + 11 +4987.499992 + 21 +13341.970028 + 31 +0.0 + 0 +LINE + 5 +FA3 + 8 +0 + 62 + 0 + 10 +4962.499992 + 20 +13385.271299 + 30 +0.0 + 11 +4949.999992 + 21 +13406.921934 + 31 +0.0 + 0 +LINE + 5 +FA4 + 8 +0 + 62 + 0 + 10 +4924.999992 + 20 +13450.223204 + 30 +0.0 + 11 +4920.0 + 21 +13458.883445 + 31 +0.0 + 0 +LINE + 5 +FA5 + 8 +0 + 62 + 0 + 10 +7362.499992 + 20 +9185.04809 + 30 +0.0 + 11 +7349.999992 + 21 +9206.698725 + 31 +0.0 + 0 +LINE + 5 +FA6 + 8 +0 + 62 + 0 + 10 +7324.999992 + 20 +9249.999996 + 30 +0.0 + 11 +7324.99999 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +FA7 + 8 +0 + 62 + 0 + 10 +4999.999992 + 20 +13277.018123 + 30 +0.0 + 11 +4987.499992 + 21 +13298.668758 + 31 +0.0 + 0 +LINE + 5 +FA8 + 8 +0 + 62 + 0 + 10 +4962.499992 + 20 +13341.970028 + 30 +0.0 + 11 +4949.999992 + 21 +13363.620664 + 31 +0.0 + 0 +LINE + 5 +FA9 + 8 +0 + 62 + 0 + 10 +4924.999992 + 20 +13406.921934 + 30 +0.0 + 11 +4920.0 + 21 +13415.582175 + 31 +0.0 + 0 +LINE + 5 +FAA + 8 +0 + 62 + 0 + 10 +7324.999992 + 20 +9206.698725 + 30 +0.0 + 11 +7312.499992 + 21 +9228.349361 + 31 +0.0 + 0 +LINE + 5 +FAB + 8 +0 + 62 + 0 + 10 +4999.999992 + 20 +13233.716853 + 30 +0.0 + 11 +4987.499992 + 21 +13255.367488 + 31 +0.0 + 0 +LINE + 5 +FAC + 8 +0 + 62 + 0 + 10 +4962.499992 + 20 +13298.668758 + 30 +0.0 + 11 +4949.999992 + 21 +13320.319393 + 31 +0.0 + 0 +LINE + 5 +FAD + 8 +0 + 62 + 0 + 10 +4924.999992 + 20 +13363.620664 + 30 +0.0 + 11 +4920.0 + 21 +13372.280905 + 31 +0.0 + 0 +LINE + 5 +FAE + 8 +0 + 62 + 0 + 10 +7321.188012 + 20 +9170.0 + 30 +0.0 + 11 +7312.499993 + 21 +9185.04809 + 31 +0.0 + 0 +LINE + 5 +FAF + 8 +0 + 62 + 0 + 10 +7287.499993 + 20 +9228.349361 + 30 +0.0 + 11 +7274.999993 + 21 +9249.999996 + 31 +0.0 + 0 +LINE + 5 +FB0 + 8 +0 + 62 + 0 + 10 +4999.999993 + 20 +13190.415583 + 30 +0.0 + 11 +4987.499993 + 21 +13212.066218 + 31 +0.0 + 0 +LINE + 5 +FB1 + 8 +0 + 62 + 0 + 10 +4962.499993 + 20 +13255.367488 + 30 +0.0 + 11 +4949.999993 + 21 +13277.018123 + 31 +0.0 + 0 +LINE + 5 +FB2 + 8 +0 + 62 + 0 + 10 +4924.999993 + 20 +13320.319393 + 30 +0.0 + 11 +4920.0 + 21 +13328.979635 + 31 +0.0 + 0 +LINE + 5 +FB3 + 8 +0 + 62 + 0 + 10 +7287.499993 + 20 +9185.04809 + 30 +0.0 + 11 +7274.999993 + 21 +9206.698726 + 31 +0.0 + 0 +LINE + 5 +FB4 + 8 +0 + 62 + 0 + 10 +7249.999993 + 20 +9249.999996 + 30 +0.0 + 11 +7249.99999 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +FB5 + 8 +0 + 62 + 0 + 10 +4999.999993 + 20 +13147.114313 + 30 +0.0 + 11 +4987.499993 + 21 +13168.764948 + 31 +0.0 + 0 +LINE + 5 +FB6 + 8 +0 + 62 + 0 + 10 +4962.499993 + 20 +13212.066218 + 30 +0.0 + 11 +4949.999993 + 21 +13233.716853 + 31 +0.0 + 0 +LINE + 5 +FB7 + 8 +0 + 62 + 0 + 10 +4924.999993 + 20 +13277.018123 + 30 +0.0 + 11 +4920.0 + 21 +13285.678365 + 31 +0.0 + 0 +LINE + 5 +FB8 + 8 +0 + 62 + 0 + 10 +7249.999993 + 20 +9206.698726 + 30 +0.0 + 11 +7237.499993 + 21 +9228.349361 + 31 +0.0 + 0 +LINE + 5 +FB9 + 8 +0 + 62 + 0 + 10 +4999.999993 + 20 +13103.813043 + 30 +0.0 + 11 +4987.499993 + 21 +13125.463678 + 31 +0.0 + 0 +LINE + 5 +FBA + 8 +0 + 62 + 0 + 10 +4962.499993 + 20 +13168.764948 + 30 +0.0 + 11 +4949.999993 + 21 +13190.415583 + 31 +0.0 + 0 +LINE + 5 +FBB + 8 +0 + 62 + 0 + 10 +4924.999993 + 20 +13233.716853 + 30 +0.0 + 11 +4920.0 + 21 +13242.377095 + 31 +0.0 + 0 +LINE + 5 +FBC + 8 +0 + 62 + 0 + 10 +7246.188012 + 20 +9170.0 + 30 +0.0 + 11 +7237.499993 + 21 +9185.048091 + 31 +0.0 + 0 +LINE + 5 +FBD + 8 +0 + 62 + 0 + 10 +7212.499993 + 20 +9228.349361 + 30 +0.0 + 11 +7199.999993 + 21 +9249.999996 + 31 +0.0 + 0 +LINE + 5 +FBE + 8 +0 + 62 + 0 + 10 +4999.999993 + 20 +13060.511772 + 30 +0.0 + 11 +4987.499993 + 21 +13082.162408 + 31 +0.0 + 0 +LINE + 5 +FBF + 8 +0 + 62 + 0 + 10 +4962.499993 + 20 +13125.463678 + 30 +0.0 + 11 +4949.999993 + 21 +13147.114313 + 31 +0.0 + 0 +LINE + 5 +FC0 + 8 +0 + 62 + 0 + 10 +4924.999993 + 20 +13190.415583 + 30 +0.0 + 11 +4920.0 + 21 +13199.075825 + 31 +0.0 + 0 +LINE + 5 +FC1 + 8 +0 + 62 + 0 + 10 +7212.499993 + 20 +9185.048091 + 30 +0.0 + 11 +7199.999993 + 21 +9206.698726 + 31 +0.0 + 0 +LINE + 5 +FC2 + 8 +0 + 62 + 0 + 10 +7174.999993 + 20 +9249.999996 + 30 +0.0 + 11 +7174.99999 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +FC3 + 8 +0 + 62 + 0 + 10 +4999.999993 + 20 +13017.210502 + 30 +0.0 + 11 +4987.499993 + 21 +13038.861137 + 31 +0.0 + 0 +LINE + 5 +FC4 + 8 +0 + 62 + 0 + 10 +4962.499993 + 20 +13082.162408 + 30 +0.0 + 11 +4949.999993 + 21 +13103.813043 + 31 +0.0 + 0 +LINE + 5 +FC5 + 8 +0 + 62 + 0 + 10 +4924.999993 + 20 +13147.114313 + 30 +0.0 + 11 +4920.0 + 21 +13155.774555 + 31 +0.0 + 0 +LINE + 5 +FC6 + 8 +0 + 62 + 0 + 10 +7174.999993 + 20 +9206.698726 + 30 +0.0 + 11 +7162.499993 + 21 +9228.349361 + 31 +0.0 + 0 +LINE + 5 +FC7 + 8 +0 + 62 + 0 + 10 +4999.999993 + 20 +12973.909232 + 30 +0.0 + 11 +4987.499993 + 21 +12995.559867 + 31 +0.0 + 0 +LINE + 5 +FC8 + 8 +0 + 62 + 0 + 10 +4962.499993 + 20 +13038.861137 + 30 +0.0 + 11 +4949.999993 + 21 +13060.511773 + 31 +0.0 + 0 +LINE + 5 +FC9 + 8 +0 + 62 + 0 + 10 +4924.999993 + 20 +13103.813043 + 30 +0.0 + 11 +4920.0 + 21 +13112.473285 + 31 +0.0 + 0 +LINE + 5 +FCA + 8 +0 + 62 + 0 + 10 +7171.188012 + 20 +9170.0 + 30 +0.0 + 11 +7162.499993 + 21 +9185.048091 + 31 +0.0 + 0 +LINE + 5 +FCB + 8 +0 + 62 + 0 + 10 +7137.499993 + 20 +9228.349361 + 30 +0.0 + 11 +7124.999993 + 21 +9249.999996 + 31 +0.0 + 0 +LINE + 5 +FCC + 8 +0 + 62 + 0 + 10 +4999.999993 + 20 +12930.607962 + 30 +0.0 + 11 +4987.499993 + 21 +12952.258597 + 31 +0.0 + 0 +LINE + 5 +FCD + 8 +0 + 62 + 0 + 10 +4962.499993 + 20 +12995.559867 + 30 +0.0 + 11 +4949.999993 + 21 +13017.210502 + 31 +0.0 + 0 +LINE + 5 +FCE + 8 +0 + 62 + 0 + 10 +4924.999993 + 20 +13060.511773 + 30 +0.0 + 11 +4920.0 + 21 +13069.172015 + 31 +0.0 + 0 +LINE + 5 +FCF + 8 +0 + 62 + 0 + 10 +7137.499993 + 20 +9185.048091 + 30 +0.0 + 11 +7124.999993 + 21 +9206.698726 + 31 +0.0 + 0 +LINE + 5 +FD0 + 8 +0 + 62 + 0 + 10 +7099.999993 + 20 +9249.999996 + 30 +0.0 + 11 +7099.999991 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +FD1 + 8 +0 + 62 + 0 + 10 +4999.999993 + 20 +12887.306692 + 30 +0.0 + 11 +4987.499993 + 21 +12908.957327 + 31 +0.0 + 0 +LINE + 5 +FD2 + 8 +0 + 62 + 0 + 10 +4962.499993 + 20 +12952.258597 + 30 +0.0 + 11 +4949.999993 + 21 +12973.909232 + 31 +0.0 + 0 +LINE + 5 +FD3 + 8 +0 + 62 + 0 + 10 +4924.999993 + 20 +13017.210502 + 30 +0.0 + 11 +4920.0 + 21 +13025.870745 + 31 +0.0 + 0 +LINE + 5 +FD4 + 8 +0 + 62 + 0 + 10 +7099.999993 + 20 +9206.698726 + 30 +0.0 + 11 +7087.499993 + 21 +9228.349361 + 31 +0.0 + 0 +LINE + 5 +FD5 + 8 +0 + 62 + 0 + 10 +4999.999993 + 20 +12844.005422 + 30 +0.0 + 11 +4987.499993 + 21 +12865.656057 + 31 +0.0 + 0 +LINE + 5 +FD6 + 8 +0 + 62 + 0 + 10 +4962.499993 + 20 +12908.957327 + 30 +0.0 + 11 +4949.999993 + 21 +12930.607962 + 31 +0.0 + 0 +LINE + 5 +FD7 + 8 +0 + 62 + 0 + 10 +4924.999993 + 20 +12973.909232 + 30 +0.0 + 11 +4920.0 + 21 +12982.569475 + 31 +0.0 + 0 +LINE + 5 +FD8 + 8 +0 + 62 + 0 + 10 +7096.188013 + 20 +9170.0 + 30 +0.0 + 11 +7087.499993 + 21 +9185.048091 + 31 +0.0 + 0 +LINE + 5 +FD9 + 8 +0 + 62 + 0 + 10 +7062.499993 + 20 +9228.349361 + 30 +0.0 + 11 +7049.999993 + 21 +9249.999996 + 31 +0.0 + 0 +LINE + 5 +FDA + 8 +0 + 62 + 0 + 10 +4999.999993 + 20 +12800.704152 + 30 +0.0 + 11 +4987.499993 + 21 +12822.354787 + 31 +0.0 + 0 +LINE + 5 +FDB + 8 +0 + 62 + 0 + 10 +4962.499993 + 20 +12865.656057 + 30 +0.0 + 11 +4949.999993 + 21 +12887.306692 + 31 +0.0 + 0 +LINE + 5 +FDC + 8 +0 + 62 + 0 + 10 +4924.999993 + 20 +12930.607962 + 30 +0.0 + 11 +4920.0 + 21 +12939.268205 + 31 +0.0 + 0 +LINE + 5 +FDD + 8 +0 + 62 + 0 + 10 +7062.499993 + 20 +9185.048091 + 30 +0.0 + 11 +7049.999993 + 21 +9206.698726 + 31 +0.0 + 0 +LINE + 5 +FDE + 8 +0 + 62 + 0 + 10 +7024.999993 + 20 +9249.999996 + 30 +0.0 + 11 +7024.999991 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +FDF + 8 +0 + 62 + 0 + 10 +4999.999993 + 20 +12757.402881 + 30 +0.0 + 11 +4987.499993 + 21 +12779.053517 + 31 +0.0 + 0 +LINE + 5 +FE0 + 8 +0 + 62 + 0 + 10 +4962.499993 + 20 +12822.354787 + 30 +0.0 + 11 +4949.999993 + 21 +12844.005422 + 31 +0.0 + 0 +LINE + 5 +FE1 + 8 +0 + 62 + 0 + 10 +4924.999993 + 20 +12887.306692 + 30 +0.0 + 11 +4920.0 + 21 +12895.966935 + 31 +0.0 + 0 +LINE + 5 +FE2 + 8 +0 + 62 + 0 + 10 +7024.999993 + 20 +9206.698726 + 30 +0.0 + 11 +7012.499993 + 21 +9228.349361 + 31 +0.0 + 0 +LINE + 5 +FE3 + 8 +0 + 62 + 0 + 10 +4999.999993 + 20 +12714.101611 + 30 +0.0 + 11 +4987.499993 + 21 +12735.752246 + 31 +0.0 + 0 +LINE + 5 +FE4 + 8 +0 + 62 + 0 + 10 +4962.499993 + 20 +12779.053517 + 30 +0.0 + 11 +4949.999993 + 21 +12800.704152 + 31 +0.0 + 0 +LINE + 5 +FE5 + 8 +0 + 62 + 0 + 10 +4924.999993 + 20 +12844.005422 + 30 +0.0 + 11 +4920.0 + 21 +12852.665665 + 31 +0.0 + 0 +LINE + 5 +FE6 + 8 +0 + 62 + 0 + 10 +7021.188013 + 20 +9170.0 + 30 +0.0 + 11 +7012.499994 + 21 +9185.048091 + 31 +0.0 + 0 +LINE + 5 +FE7 + 8 +0 + 62 + 0 + 10 +6987.499994 + 20 +9228.349361 + 30 +0.0 + 11 +6974.999994 + 21 +9249.999996 + 31 +0.0 + 0 +LINE + 5 +FE8 + 8 +0 + 62 + 0 + 10 +4999.999994 + 20 +12670.800341 + 30 +0.0 + 11 +4987.499994 + 21 +12692.450976 + 31 +0.0 + 0 +LINE + 5 +FE9 + 8 +0 + 62 + 0 + 10 +4962.499994 + 20 +12735.752246 + 30 +0.0 + 11 +4949.999994 + 21 +12757.402882 + 31 +0.0 + 0 +LINE + 5 +FEA + 8 +0 + 62 + 0 + 10 +4924.999994 + 20 +12800.704152 + 30 +0.0 + 11 +4920.0 + 21 +12809.364395 + 31 +0.0 + 0 +LINE + 5 +FEB + 8 +0 + 62 + 0 + 10 +6987.499994 + 20 +9185.048091 + 30 +0.0 + 11 +6974.999994 + 21 +9206.698726 + 31 +0.0 + 0 +LINE + 5 +FEC + 8 +0 + 62 + 0 + 10 +6949.999994 + 20 +9249.999996 + 30 +0.0 + 11 +6949.999991 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +FED + 8 +0 + 62 + 0 + 10 +4999.999994 + 20 +12627.499071 + 30 +0.0 + 11 +4987.499994 + 21 +12649.149706 + 31 +0.0 + 0 +LINE + 5 +FEE + 8 +0 + 62 + 0 + 10 +4962.499994 + 20 +12692.450976 + 30 +0.0 + 11 +4949.999994 + 21 +12714.101611 + 31 +0.0 + 0 +LINE + 5 +FEF + 8 +0 + 62 + 0 + 10 +4924.999994 + 20 +12757.402882 + 30 +0.0 + 11 +4920.0 + 21 +12766.063125 + 31 +0.0 + 0 +LINE + 5 +FF0 + 8 +0 + 62 + 0 + 10 +6949.999994 + 20 +9206.698726 + 30 +0.0 + 11 +6937.499994 + 21 +9228.349361 + 31 +0.0 + 0 +LINE + 5 +FF1 + 8 +0 + 62 + 0 + 10 +4999.999994 + 20 +12584.197801 + 30 +0.0 + 11 +4987.499994 + 21 +12605.848436 + 31 +0.0 + 0 +LINE + 5 +FF2 + 8 +0 + 62 + 0 + 10 +4962.499994 + 20 +12649.149706 + 30 +0.0 + 11 +4949.999994 + 21 +12670.800341 + 31 +0.0 + 0 +LINE + 5 +FF3 + 8 +0 + 62 + 0 + 10 +4924.999994 + 20 +12714.101611 + 30 +0.0 + 11 +4920.0 + 21 +12722.761855 + 31 +0.0 + 0 +LINE + 5 +FF4 + 8 +0 + 62 + 0 + 10 +6946.188013 + 20 +9170.0 + 30 +0.0 + 11 +6937.499994 + 21 +9185.048091 + 31 +0.0 + 0 +LINE + 5 +FF5 + 8 +0 + 62 + 0 + 10 +6912.499994 + 20 +9228.349361 + 30 +0.0 + 11 +6899.999994 + 21 +9249.999996 + 31 +0.0 + 0 +LINE + 5 +FF6 + 8 +0 + 62 + 0 + 10 +4999.999994 + 20 +12540.896531 + 30 +0.0 + 11 +4987.499994 + 21 +12562.547166 + 31 +0.0 + 0 +LINE + 5 +FF7 + 8 +0 + 62 + 0 + 10 +4962.499994 + 20 +12605.848436 + 30 +0.0 + 11 +4949.999994 + 21 +12627.499071 + 31 +0.0 + 0 +LINE + 5 +FF8 + 8 +0 + 62 + 0 + 10 +4924.999994 + 20 +12670.800341 + 30 +0.0 + 11 +4920.0 + 21 +12679.460585 + 31 +0.0 + 0 +LINE + 5 +FF9 + 8 +0 + 62 + 0 + 10 +6912.499994 + 20 +9185.048091 + 30 +0.0 + 11 +6899.999994 + 21 +9206.698726 + 31 +0.0 + 0 +LINE + 5 +FFA + 8 +0 + 62 + 0 + 10 +6874.999994 + 20 +9249.999996 + 30 +0.0 + 11 +6874.999992 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +FFB + 8 +0 + 62 + 0 + 10 +4999.999994 + 20 +12497.595261 + 30 +0.0 + 11 +4987.499994 + 21 +12519.245896 + 31 +0.0 + 0 +LINE + 5 +FFC + 8 +0 + 62 + 0 + 10 +4962.499994 + 20 +12562.547166 + 30 +0.0 + 11 +4949.999994 + 21 +12584.197801 + 31 +0.0 + 0 +LINE + 5 +FFD + 8 +0 + 62 + 0 + 10 +4924.999994 + 20 +12627.499071 + 30 +0.0 + 11 +4920.0 + 21 +12636.159315 + 31 +0.0 + 0 +LINE + 5 +FFE + 8 +0 + 62 + 0 + 10 +6874.999994 + 20 +9206.698726 + 30 +0.0 + 11 +6862.499994 + 21 +9228.349361 + 31 +0.0 + 0 +LINE + 5 +FFF + 8 +0 + 62 + 0 + 10 +4999.999994 + 20 +12454.293991 + 30 +0.0 + 11 +4987.499994 + 21 +12475.944626 + 31 +0.0 + 0 +LINE + 5 +1000 + 8 +0 + 62 + 0 + 10 +4962.499994 + 20 +12519.245896 + 30 +0.0 + 11 +4949.999994 + 21 +12540.896531 + 31 +0.0 + 0 +LINE + 5 +1001 + 8 +0 + 62 + 0 + 10 +4924.999994 + 20 +12584.197801 + 30 +0.0 + 11 +4920.0 + 21 +12592.858045 + 31 +0.0 + 0 +LINE + 5 +1002 + 8 +0 + 62 + 0 + 10 +6871.188014 + 20 +9170.0 + 30 +0.0 + 11 +6862.499994 + 21 +9185.048091 + 31 +0.0 + 0 +LINE + 5 +1003 + 8 +0 + 62 + 0 + 10 +6837.499994 + 20 +9228.349361 + 30 +0.0 + 11 +6824.999994 + 21 +9249.999997 + 31 +0.0 + 0 +LINE + 5 +1004 + 8 +0 + 62 + 0 + 10 +4999.999994 + 20 +12410.99272 + 30 +0.0 + 11 +4987.499994 + 21 +12432.643355 + 31 +0.0 + 0 +LINE + 5 +1005 + 8 +0 + 62 + 0 + 10 +4962.499994 + 20 +12475.944626 + 30 +0.0 + 11 +4949.999994 + 21 +12497.595261 + 31 +0.0 + 0 +LINE + 5 +1006 + 8 +0 + 62 + 0 + 10 +4924.999994 + 20 +12540.896531 + 30 +0.0 + 11 +4920.0 + 21 +12549.556775 + 31 +0.0 + 0 +LINE + 5 +1007 + 8 +0 + 62 + 0 + 10 +6837.499994 + 20 +9185.048091 + 30 +0.0 + 11 +6824.999994 + 21 +9206.698726 + 31 +0.0 + 0 +LINE + 5 +1008 + 8 +0 + 62 + 0 + 10 +6799.999994 + 20 +9249.999997 + 30 +0.0 + 11 +6799.999992 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1009 + 8 +0 + 62 + 0 + 10 +4999.999994 + 20 +12367.69145 + 30 +0.0 + 11 +4987.499994 + 21 +12389.342085 + 31 +0.0 + 0 +LINE + 5 +100A + 8 +0 + 62 + 0 + 10 +4962.499994 + 20 +12432.643356 + 30 +0.0 + 11 +4949.999994 + 21 +12454.293991 + 31 +0.0 + 0 +LINE + 5 +100B + 8 +0 + 62 + 0 + 10 +4924.999994 + 20 +12497.595261 + 30 +0.0 + 11 +4920.0 + 21 +12506.255505 + 31 +0.0 + 0 +LINE + 5 +100C + 8 +0 + 62 + 0 + 10 +6799.999994 + 20 +9206.698726 + 30 +0.0 + 11 +6787.499994 + 21 +9228.349362 + 31 +0.0 + 0 +LINE + 5 +100D + 8 +0 + 62 + 0 + 10 +4999.999994 + 20 +12324.39018 + 30 +0.0 + 11 +4987.499994 + 21 +12346.040815 + 31 +0.0 + 0 +LINE + 5 +100E + 8 +0 + 62 + 0 + 10 +4962.499994 + 20 +12389.342085 + 30 +0.0 + 11 +4949.999994 + 21 +12410.99272 + 31 +0.0 + 0 +LINE + 5 +100F + 8 +0 + 62 + 0 + 10 +4924.999994 + 20 +12454.293991 + 30 +0.0 + 11 +4920.0 + 21 +12462.954235 + 31 +0.0 + 0 +LINE + 5 +1010 + 8 +0 + 62 + 0 + 10 +6796.188014 + 20 +9170.0 + 30 +0.0 + 11 +6787.499994 + 21 +9185.048091 + 31 +0.0 + 0 +LINE + 5 +1011 + 8 +0 + 62 + 0 + 10 +6762.499994 + 20 +9228.349362 + 30 +0.0 + 11 +6749.999994 + 21 +9249.999997 + 31 +0.0 + 0 +LINE + 5 +1012 + 8 +0 + 62 + 0 + 10 +4999.999994 + 20 +12281.08891 + 30 +0.0 + 11 +4987.499994 + 21 +12302.739545 + 31 +0.0 + 0 +LINE + 5 +1013 + 8 +0 + 62 + 0 + 10 +4962.499994 + 20 +12346.040815 + 30 +0.0 + 11 +4949.999994 + 21 +12367.69145 + 31 +0.0 + 0 +LINE + 5 +1014 + 8 +0 + 62 + 0 + 10 +4924.999994 + 20 +12410.992721 + 30 +0.0 + 11 +4920.0 + 21 +12419.652965 + 31 +0.0 + 0 +LINE + 5 +1015 + 8 +0 + 62 + 0 + 10 +6762.499994 + 20 +9185.048091 + 30 +0.0 + 11 +6749.999994 + 21 +9206.698727 + 31 +0.0 + 0 +LINE + 5 +1016 + 8 +0 + 62 + 0 + 10 +6724.999994 + 20 +9249.999997 + 30 +0.0 + 11 +6724.999992 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1017 + 8 +0 + 62 + 0 + 10 +4999.999994 + 20 +12237.78764 + 30 +0.0 + 11 +4987.499994 + 21 +12259.438275 + 31 +0.0 + 0 +LINE + 5 +1018 + 8 +0 + 62 + 0 + 10 +4962.499994 + 20 +12302.739545 + 30 +0.0 + 11 +4949.999994 + 21 +12324.39018 + 31 +0.0 + 0 +LINE + 5 +1019 + 8 +0 + 62 + 0 + 10 +4924.999994 + 20 +12367.69145 + 30 +0.0 + 11 +4920.0 + 21 +12376.351695 + 31 +0.0 + 0 +LINE + 5 +101A + 8 +0 + 62 + 0 + 10 +6724.999994 + 20 +9206.698727 + 30 +0.0 + 11 +6712.499994 + 21 +9228.349362 + 31 +0.0 + 0 +LINE + 5 +101B + 8 +0 + 62 + 0 + 10 +4999.999994 + 20 +12194.48637 + 30 +0.0 + 11 +4987.499994 + 21 +12216.137005 + 31 +0.0 + 0 +LINE + 5 +101C + 8 +0 + 62 + 0 + 10 +4962.499994 + 20 +12259.438275 + 30 +0.0 + 11 +4949.999994 + 21 +12281.08891 + 31 +0.0 + 0 +LINE + 5 +101D + 8 +0 + 62 + 0 + 10 +4924.999994 + 20 +12324.39018 + 30 +0.0 + 11 +4920.0 + 21 +12333.050425 + 31 +0.0 + 0 +LINE + 5 +101E + 8 +0 + 62 + 0 + 10 +6721.188014 + 20 +9170.0 + 30 +0.0 + 11 +6712.499995 + 21 +9185.048092 + 31 +0.0 + 0 +LINE + 5 +101F + 8 +0 + 62 + 0 + 10 +6687.499995 + 20 +9228.349362 + 30 +0.0 + 11 +6674.999995 + 21 +9249.999997 + 31 +0.0 + 0 +LINE + 5 +1020 + 8 +0 + 62 + 0 + 10 +4999.999995 + 20 +12151.1851 + 30 +0.0 + 11 +4987.499995 + 21 +12172.835735 + 31 +0.0 + 0 +LINE + 5 +1021 + 8 +0 + 62 + 0 + 10 +4962.499995 + 20 +12216.137005 + 30 +0.0 + 11 +4949.999995 + 21 +12237.78764 + 31 +0.0 + 0 +LINE + 5 +1022 + 8 +0 + 62 + 0 + 10 +4924.999995 + 20 +12281.08891 + 30 +0.0 + 11 +4920.0 + 21 +12289.749155 + 31 +0.0 + 0 +LINE + 5 +1023 + 8 +0 + 62 + 0 + 10 +6687.499995 + 20 +9185.048092 + 30 +0.0 + 11 +6674.999995 + 21 +9206.698727 + 31 +0.0 + 0 +LINE + 5 +1024 + 8 +0 + 62 + 0 + 10 +6649.999995 + 20 +9249.999997 + 30 +0.0 + 11 +6649.999993 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1025 + 8 +0 + 62 + 0 + 10 +4999.999995 + 20 +12107.883829 + 30 +0.0 + 11 +4987.499995 + 21 +12129.534464 + 31 +0.0 + 0 +LINE + 5 +1026 + 8 +0 + 62 + 0 + 10 +4962.499995 + 20 +12172.835735 + 30 +0.0 + 11 +4949.999995 + 21 +12194.48637 + 31 +0.0 + 0 +LINE + 5 +1027 + 8 +0 + 62 + 0 + 10 +4924.999995 + 20 +12237.78764 + 30 +0.0 + 11 +4920.0 + 21 +12246.447885 + 31 +0.0 + 0 +LINE + 5 +1028 + 8 +0 + 62 + 0 + 10 +6649.999995 + 20 +9206.698727 + 30 +0.0 + 11 +6637.499995 + 21 +9228.349362 + 31 +0.0 + 0 +LINE + 5 +1029 + 8 +0 + 62 + 0 + 10 +4999.999995 + 20 +12064.582559 + 30 +0.0 + 11 +4987.499995 + 21 +12086.233194 + 31 +0.0 + 0 +LINE + 5 +102A + 8 +0 + 62 + 0 + 10 +4962.499995 + 20 +12129.534465 + 30 +0.0 + 11 +4949.999995 + 21 +12151.1851 + 31 +0.0 + 0 +LINE + 5 +102B + 8 +0 + 62 + 0 + 10 +4924.999995 + 20 +12194.48637 + 30 +0.0 + 11 +4920.0 + 21 +12203.146615 + 31 +0.0 + 0 +LINE + 5 +102C + 8 +0 + 62 + 0 + 10 +6646.188015 + 20 +9170.0 + 30 +0.0 + 11 +6637.499995 + 21 +9185.048092 + 31 +0.0 + 0 +LINE + 5 +102D + 8 +0 + 62 + 0 + 10 +6612.499995 + 20 +9228.349362 + 30 +0.0 + 11 +6599.999995 + 21 +9249.999997 + 31 +0.0 + 0 +LINE + 5 +102E + 8 +0 + 62 + 0 + 10 +4999.999995 + 20 +12021.281289 + 30 +0.0 + 11 +4987.499995 + 21 +12042.931924 + 31 +0.0 + 0 +LINE + 5 +102F + 8 +0 + 62 + 0 + 10 +4962.499995 + 20 +12086.233194 + 30 +0.0 + 11 +4949.999995 + 21 +12107.883829 + 31 +0.0 + 0 +LINE + 5 +1030 + 8 +0 + 62 + 0 + 10 +4924.999995 + 20 +12151.1851 + 30 +0.0 + 11 +4920.0 + 21 +12159.845345 + 31 +0.0 + 0 +LINE + 5 +1031 + 8 +0 + 62 + 0 + 10 +6612.499995 + 20 +9185.048092 + 30 +0.0 + 11 +6599.999995 + 21 +9206.698727 + 31 +0.0 + 0 +LINE + 5 +1032 + 8 +0 + 62 + 0 + 10 +6574.999995 + 20 +9249.999997 + 30 +0.0 + 11 +6574.999993 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1033 + 8 +0 + 62 + 0 + 10 +4999.999995 + 20 +11977.980019 + 30 +0.0 + 11 +4987.499995 + 21 +11999.630654 + 31 +0.0 + 0 +LINE + 5 +1034 + 8 +0 + 62 + 0 + 10 +4962.499995 + 20 +12042.931924 + 30 +0.0 + 11 +4949.999995 + 21 +12064.582559 + 31 +0.0 + 0 +LINE + 5 +1035 + 8 +0 + 62 + 0 + 10 +4924.999995 + 20 +12107.88383 + 30 +0.0 + 11 +4920.0 + 21 +12116.544075 + 31 +0.0 + 0 +LINE + 5 +1036 + 8 +0 + 62 + 0 + 10 +6574.999995 + 20 +9206.698727 + 30 +0.0 + 11 +6562.499995 + 21 +9228.349362 + 31 +0.0 + 0 +LINE + 5 +1037 + 8 +0 + 62 + 0 + 10 +4999.999995 + 20 +11934.678749 + 30 +0.0 + 11 +4987.499995 + 21 +11956.329384 + 31 +0.0 + 0 +LINE + 5 +1038 + 8 +0 + 62 + 0 + 10 +4962.499995 + 20 +11999.630654 + 30 +0.0 + 11 +4949.999995 + 21 +12021.281289 + 31 +0.0 + 0 +LINE + 5 +1039 + 8 +0 + 62 + 0 + 10 +4924.999995 + 20 +12064.582559 + 30 +0.0 + 11 +4920.0 + 21 +12073.242805 + 31 +0.0 + 0 +LINE + 5 +103A + 8 +0 + 62 + 0 + 10 +6571.188015 + 20 +9170.0 + 30 +0.0 + 11 +6562.499995 + 21 +9185.048092 + 31 +0.0 + 0 +LINE + 5 +103B + 8 +0 + 62 + 0 + 10 +6537.499995 + 20 +9228.349362 + 30 +0.0 + 11 +6524.999995 + 21 +9249.999997 + 31 +0.0 + 0 +LINE + 5 +103C + 8 +0 + 62 + 0 + 10 +4999.999995 + 20 +11891.377479 + 30 +0.0 + 11 +4987.499995 + 21 +11913.028114 + 31 +0.0 + 0 +LINE + 5 +103D + 8 +0 + 62 + 0 + 10 +4962.499995 + 20 +11956.329384 + 30 +0.0 + 11 +4949.999995 + 21 +11977.980019 + 31 +0.0 + 0 +LINE + 5 +103E + 8 +0 + 62 + 0 + 10 +4924.999995 + 20 +12021.281289 + 30 +0.0 + 11 +4920.0 + 21 +12029.941535 + 31 +0.0 + 0 +LINE + 5 +103F + 8 +0 + 62 + 0 + 10 +6537.499995 + 20 +9185.048092 + 30 +0.0 + 11 +6524.999995 + 21 +9206.698727 + 31 +0.0 + 0 +LINE + 5 +1040 + 8 +0 + 62 + 0 + 10 +6499.999995 + 20 +9249.999997 + 30 +0.0 + 11 +6499.999993 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1041 + 8 +0 + 62 + 0 + 10 +4999.999995 + 20 +11848.076209 + 30 +0.0 + 11 +4987.499995 + 21 +11869.726844 + 31 +0.0 + 0 +LINE + 5 +1042 + 8 +0 + 62 + 0 + 10 +4962.499995 + 20 +11913.028114 + 30 +0.0 + 11 +4949.999995 + 21 +11934.678749 + 31 +0.0 + 0 +LINE + 5 +1043 + 8 +0 + 62 + 0 + 10 +4924.999995 + 20 +11977.980019 + 30 +0.0 + 11 +4920.0 + 21 +11986.640265 + 31 +0.0 + 0 +LINE + 5 +1044 + 8 +0 + 62 + 0 + 10 +6499.999995 + 20 +9206.698727 + 30 +0.0 + 11 +6487.499995 + 21 +9228.349362 + 31 +0.0 + 0 +LINE + 5 +1045 + 8 +0 + 62 + 0 + 10 +4999.999995 + 20 +11804.774938 + 30 +0.0 + 11 +4987.499995 + 21 +11826.425573 + 31 +0.0 + 0 +LINE + 5 +1046 + 8 +0 + 62 + 0 + 10 +4962.499995 + 20 +11869.726844 + 30 +0.0 + 11 +4949.999995 + 21 +11891.377479 + 31 +0.0 + 0 +LINE + 5 +1047 + 8 +0 + 62 + 0 + 10 +4924.999995 + 20 +11934.678749 + 30 +0.0 + 11 +4920.0 + 21 +11943.338995 + 31 +0.0 + 0 +LINE + 5 +1048 + 8 +0 + 62 + 0 + 10 +6496.188015 + 20 +9170.0 + 30 +0.0 + 11 +6487.499995 + 21 +9185.048092 + 31 +0.0 + 0 +LINE + 5 +1049 + 8 +0 + 62 + 0 + 10 +6462.499995 + 20 +9228.349362 + 30 +0.0 + 11 +6449.999995 + 21 +9249.999997 + 31 +0.0 + 0 +LINE + 5 +104A + 8 +0 + 62 + 0 + 10 +4999.999995 + 20 +11761.473668 + 30 +0.0 + 11 +4987.499995 + 21 +11783.124303 + 31 +0.0 + 0 +LINE + 5 +104B + 8 +0 + 62 + 0 + 10 +4962.499995 + 20 +11826.425574 + 30 +0.0 + 11 +4949.999995 + 21 +11848.076209 + 31 +0.0 + 0 +LINE + 5 +104C + 8 +0 + 62 + 0 + 10 +4924.999995 + 20 +11891.377479 + 30 +0.0 + 11 +4920.0 + 21 +11900.037725 + 31 +0.0 + 0 +LINE + 5 +104D + 8 +0 + 62 + 0 + 10 +6462.499995 + 20 +9185.048092 + 30 +0.0 + 11 +6449.999995 + 21 +9206.698727 + 31 +0.0 + 0 +LINE + 5 +104E + 8 +0 + 62 + 0 + 10 +6424.999995 + 20 +9249.999997 + 30 +0.0 + 11 +6424.999994 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +104F + 8 +0 + 62 + 0 + 10 +4999.999995 + 20 +11718.172398 + 30 +0.0 + 11 +4987.499995 + 21 +11739.823033 + 31 +0.0 + 0 +LINE + 5 +1050 + 8 +0 + 62 + 0 + 10 +4962.499995 + 20 +11783.124303 + 30 +0.0 + 11 +4949.999995 + 21 +11804.774938 + 31 +0.0 + 0 +LINE + 5 +1051 + 8 +0 + 62 + 0 + 10 +4924.999995 + 20 +11848.076209 + 30 +0.0 + 11 +4920.0 + 21 +11856.736455 + 31 +0.0 + 0 +LINE + 5 +1052 + 8 +0 + 62 + 0 + 10 +6424.999995 + 20 +9206.698727 + 30 +0.0 + 11 +6412.499995 + 21 +9228.349362 + 31 +0.0 + 0 +LINE + 5 +1053 + 8 +0 + 62 + 0 + 10 +4999.999995 + 20 +11674.871128 + 30 +0.0 + 11 +4987.499995 + 21 +11696.521763 + 31 +0.0 + 0 +LINE + 5 +1054 + 8 +0 + 62 + 0 + 10 +4962.499995 + 20 +11739.823033 + 30 +0.0 + 11 +4949.999995 + 21 +11761.473668 + 31 +0.0 + 0 +LINE + 5 +1055 + 8 +0 + 62 + 0 + 10 +4924.999995 + 20 +11804.774939 + 30 +0.0 + 11 +4920.0 + 21 +11813.435185 + 31 +0.0 + 0 +LINE + 5 +1056 + 8 +0 + 62 + 0 + 10 +6421.188016 + 20 +9170.0 + 30 +0.0 + 11 +6412.499995 + 21 +9185.048092 + 31 +0.0 + 0 +LINE + 5 +1057 + 8 +0 + 62 + 0 + 10 +6387.499995 + 20 +9228.349362 + 30 +0.0 + 11 +6374.999995 + 21 +9249.999997 + 31 +0.0 + 0 +LINE + 5 +1058 + 8 +0 + 62 + 0 + 10 +4999.999995 + 20 +11631.569858 + 30 +0.0 + 11 +4987.499995 + 21 +11653.220493 + 31 +0.0 + 0 +LINE + 5 +1059 + 8 +0 + 62 + 0 + 10 +4962.499995 + 20 +11696.521763 + 30 +0.0 + 11 +4949.999995 + 21 +11718.172398 + 31 +0.0 + 0 +LINE + 5 +105A + 8 +0 + 62 + 0 + 10 +4924.999995 + 20 +11761.473668 + 30 +0.0 + 11 +4920.0 + 21 +11770.133915 + 31 +0.0 + 0 +LINE + 5 +105B + 8 +0 + 62 + 0 + 10 +6387.499996 + 20 +9185.048092 + 30 +0.0 + 11 +6374.999996 + 21 +9206.698727 + 31 +0.0 + 0 +LINE + 5 +105C + 8 +0 + 62 + 0 + 10 +6349.999996 + 20 +9249.999997 + 30 +0.0 + 11 +6349.999994 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +105D + 8 +0 + 62 + 0 + 10 +4999.999996 + 20 +11588.268588 + 30 +0.0 + 11 +4987.499996 + 21 +11609.919223 + 31 +0.0 + 0 +LINE + 5 +105E + 8 +0 + 62 + 0 + 10 +4962.499996 + 20 +11653.220493 + 30 +0.0 + 11 +4949.999996 + 21 +11674.871128 + 31 +0.0 + 0 +LINE + 5 +105F + 8 +0 + 62 + 0 + 10 +4924.999996 + 20 +11718.172398 + 30 +0.0 + 11 +4920.0 + 21 +11726.832645 + 31 +0.0 + 0 +LINE + 5 +1060 + 8 +0 + 62 + 0 + 10 +6349.999996 + 20 +9206.698727 + 30 +0.0 + 11 +6337.499996 + 21 +9228.349362 + 31 +0.0 + 0 +LINE + 5 +1061 + 8 +0 + 62 + 0 + 10 +4999.999996 + 20 +11544.967318 + 30 +0.0 + 11 +4987.499996 + 21 +11566.617953 + 31 +0.0 + 0 +LINE + 5 +1062 + 8 +0 + 62 + 0 + 10 +4962.499996 + 20 +11609.919223 + 30 +0.0 + 11 +4949.999996 + 21 +11631.569858 + 31 +0.0 + 0 +LINE + 5 +1063 + 8 +0 + 62 + 0 + 10 +4924.999996 + 20 +11674.871128 + 30 +0.0 + 11 +4920.0 + 21 +11683.531375 + 31 +0.0 + 0 +LINE + 5 +1064 + 8 +0 + 62 + 0 + 10 +6346.188016 + 20 +9170.0 + 30 +0.0 + 11 +6337.499996 + 21 +9185.048092 + 31 +0.0 + 0 +LINE + 5 +1065 + 8 +0 + 62 + 0 + 10 +6312.499996 + 20 +9228.349362 + 30 +0.0 + 11 +6299.999996 + 21 +9249.999998 + 31 +0.0 + 0 +LINE + 5 +1066 + 8 +0 + 62 + 0 + 10 +4999.999996 + 20 +11501.666047 + 30 +0.0 + 11 +4987.499996 + 21 +11523.316682 + 31 +0.0 + 0 +LINE + 5 +1067 + 8 +0 + 62 + 0 + 10 +4962.499996 + 20 +11566.617953 + 30 +0.0 + 11 +4949.999996 + 21 +11588.268588 + 31 +0.0 + 0 +LINE + 5 +1068 + 8 +0 + 62 + 0 + 10 +4924.999996 + 20 +11631.569858 + 30 +0.0 + 11 +4920.0 + 21 +11640.230105 + 31 +0.0 + 0 +LINE + 5 +1069 + 8 +0 + 62 + 0 + 10 +6312.499996 + 20 +9185.048092 + 30 +0.0 + 11 +6299.999996 + 21 +9206.698727 + 31 +0.0 + 0 +LINE + 5 +106A + 8 +0 + 62 + 0 + 10 +6274.999996 + 20 +9249.999998 + 30 +0.0 + 11 +6274.999994 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +106B + 8 +0 + 62 + 0 + 10 +4999.999996 + 20 +11458.364777 + 30 +0.0 + 11 +4987.499996 + 21 +11480.015412 + 31 +0.0 + 0 +LINE + 5 +106C + 8 +0 + 62 + 0 + 10 +4962.499996 + 20 +11523.316683 + 30 +0.0 + 11 +4949.999996 + 21 +11544.967318 + 31 +0.0 + 0 +LINE + 5 +106D + 8 +0 + 62 + 0 + 10 +4924.999996 + 20 +11588.268588 + 30 +0.0 + 11 +4920.0 + 21 +11596.928835 + 31 +0.0 + 0 +LINE + 5 +106E + 8 +0 + 62 + 0 + 10 +6274.999996 + 20 +9206.698727 + 30 +0.0 + 11 +6262.499996 + 21 +9228.349363 + 31 +0.0 + 0 +LINE + 5 +106F + 8 +0 + 62 + 0 + 10 +4999.999996 + 20 +11415.063507 + 30 +0.0 + 11 +4987.499996 + 21 +11436.714142 + 31 +0.0 + 0 +LINE + 5 +1070 + 8 +0 + 62 + 0 + 10 +4962.499996 + 20 +11480.015412 + 30 +0.0 + 11 +4949.999996 + 21 +11501.666047 + 31 +0.0 + 0 +LINE + 5 +1071 + 8 +0 + 62 + 0 + 10 +4924.999996 + 20 +11544.967318 + 30 +0.0 + 11 +4920.0 + 21 +11553.627565 + 31 +0.0 + 0 +LINE + 5 +1072 + 8 +0 + 62 + 0 + 10 +6271.188016 + 20 +9170.0 + 30 +0.0 + 11 +6262.499996 + 21 +9185.048092 + 31 +0.0 + 0 +LINE + 5 +1073 + 8 +0 + 62 + 0 + 10 +6237.499996 + 20 +9228.349363 + 30 +0.0 + 11 +6224.999996 + 21 +9249.999998 + 31 +0.0 + 0 +LINE + 5 +1074 + 8 +0 + 62 + 0 + 10 +4999.999996 + 20 +11371.762237 + 30 +0.0 + 11 +4987.499996 + 21 +11393.412872 + 31 +0.0 + 0 +LINE + 5 +1075 + 8 +0 + 62 + 0 + 10 +4962.499996 + 20 +11436.714142 + 30 +0.0 + 11 +4949.999996 + 21 +11458.364777 + 31 +0.0 + 0 +LINE + 5 +1076 + 8 +0 + 62 + 0 + 10 +4924.999996 + 20 +11501.666048 + 30 +0.0 + 11 +4920.0 + 21 +11510.326295 + 31 +0.0 + 0 +LINE + 5 +1077 + 8 +0 + 62 + 0 + 10 +6237.499996 + 20 +9185.048092 + 30 +0.0 + 11 +6224.999996 + 21 +9206.698728 + 31 +0.0 + 0 +LINE + 5 +1078 + 8 +0 + 62 + 0 + 10 +6199.999996 + 20 +9249.999998 + 30 +0.0 + 11 +6199.999995 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1079 + 8 +0 + 62 + 0 + 10 +4999.999996 + 20 +11328.460967 + 30 +0.0 + 11 +4987.499996 + 21 +11350.111602 + 31 +0.0 + 0 +LINE + 5 +107A + 8 +0 + 62 + 0 + 10 +4962.499996 + 20 +11393.412872 + 30 +0.0 + 11 +4949.999996 + 21 +11415.063507 + 31 +0.0 + 0 +LINE + 5 +107B + 8 +0 + 62 + 0 + 10 +4924.999996 + 20 +11458.364777 + 30 +0.0 + 11 +4920.0 + 21 +11467.025025 + 31 +0.0 + 0 +LINE + 5 +107C + 8 +0 + 62 + 0 + 10 +6199.999996 + 20 +9206.698728 + 30 +0.0 + 11 +6187.499996 + 21 +9228.349363 + 31 +0.0 + 0 +LINE + 5 +107D + 8 +0 + 62 + 0 + 10 +4999.999996 + 20 +11285.159697 + 30 +0.0 + 11 +4987.499996 + 21 +11306.810332 + 31 +0.0 + 0 +LINE + 5 +107E + 8 +0 + 62 + 0 + 10 +4962.499996 + 20 +11350.111602 + 30 +0.0 + 11 +4949.999996 + 21 +11371.762237 + 31 +0.0 + 0 +LINE + 5 +107F + 8 +0 + 62 + 0 + 10 +4924.999996 + 20 +11415.063507 + 30 +0.0 + 11 +4920.0 + 21 +11423.723755 + 31 +0.0 + 0 +LINE + 5 +1080 + 8 +0 + 62 + 0 + 10 +6196.188017 + 20 +9170.0 + 30 +0.0 + 11 +6187.499996 + 21 +9185.048093 + 31 +0.0 + 0 +LINE + 5 +1081 + 8 +0 + 62 + 0 + 10 +6162.499996 + 20 +9228.349363 + 30 +0.0 + 11 +6149.999996 + 21 +9249.999998 + 31 +0.0 + 0 +LINE + 5 +1082 + 8 +0 + 62 + 0 + 10 +4999.999996 + 20 +11241.858427 + 30 +0.0 + 11 +4987.499996 + 21 +11263.509062 + 31 +0.0 + 0 +LINE + 5 +1083 + 8 +0 + 62 + 0 + 10 +4962.499996 + 20 +11306.810332 + 30 +0.0 + 11 +4949.999996 + 21 +11328.460967 + 31 +0.0 + 0 +LINE + 5 +1084 + 8 +0 + 62 + 0 + 10 +4924.999996 + 20 +11371.762237 + 30 +0.0 + 11 +4920.0 + 21 +11380.422485 + 31 +0.0 + 0 +LINE + 5 +1085 + 8 +0 + 62 + 0 + 10 +6162.499996 + 20 +9185.048093 + 30 +0.0 + 11 +6149.999996 + 21 +9206.698728 + 31 +0.0 + 0 +LINE + 5 +1086 + 8 +0 + 62 + 0 + 10 +6124.999996 + 20 +9249.999998 + 30 +0.0 + 11 +6124.999995 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1087 + 8 +0 + 62 + 0 + 10 +4999.999996 + 20 +11198.557156 + 30 +0.0 + 11 +4987.499996 + 21 +11220.207791 + 31 +0.0 + 0 +LINE + 5 +1088 + 8 +0 + 62 + 0 + 10 +4962.499996 + 20 +11263.509062 + 30 +0.0 + 11 +4949.999996 + 21 +11285.159697 + 31 +0.0 + 0 +LINE + 5 +1089 + 8 +0 + 62 + 0 + 10 +4924.999996 + 20 +11328.460967 + 30 +0.0 + 11 +4920.0 + 21 +11337.121215 + 31 +0.0 + 0 +LINE + 5 +108A + 8 +0 + 62 + 0 + 10 +6124.999996 + 20 +9206.698728 + 30 +0.0 + 11 +6112.499996 + 21 +9228.349363 + 31 +0.0 + 0 +LINE + 5 +108B + 8 +0 + 62 + 0 + 10 +4999.999996 + 20 +11155.255886 + 30 +0.0 + 11 +4987.499996 + 21 +11176.906521 + 31 +0.0 + 0 +LINE + 5 +108C + 8 +0 + 62 + 0 + 10 +4962.499996 + 20 +11220.207792 + 30 +0.0 + 11 +4949.999996 + 21 +11241.858427 + 31 +0.0 + 0 +LINE + 5 +108D + 8 +0 + 62 + 0 + 10 +4924.999996 + 20 +11285.159697 + 30 +0.0 + 11 +4920.0 + 21 +11293.819945 + 31 +0.0 + 0 +LINE + 5 +108E + 8 +0 + 62 + 0 + 10 +6121.188017 + 20 +9170.0 + 30 +0.0 + 11 +6112.499996 + 21 +9185.048093 + 31 +0.0 + 0 +LINE + 5 +108F + 8 +0 + 62 + 0 + 10 +6087.499996 + 20 +9228.349363 + 30 +0.0 + 11 +6074.999996 + 21 +9249.999998 + 31 +0.0 + 0 +LINE + 5 +1090 + 8 +0 + 62 + 0 + 10 +4999.999996 + 20 +11111.954616 + 30 +0.0 + 11 +4987.499996 + 21 +11133.605251 + 31 +0.0 + 0 +LINE + 5 +1091 + 8 +0 + 62 + 0 + 10 +4962.499996 + 20 +11176.906521 + 30 +0.0 + 11 +4949.999996 + 21 +11198.557156 + 31 +0.0 + 0 +LINE + 5 +1092 + 8 +0 + 62 + 0 + 10 +4924.999996 + 20 +11241.858427 + 30 +0.0 + 11 +4920.0 + 21 +11250.518675 + 31 +0.0 + 0 +LINE + 5 +1093 + 8 +0 + 62 + 0 + 10 +6087.499997 + 20 +9185.048093 + 30 +0.0 + 11 +6074.999997 + 21 +9206.698728 + 31 +0.0 + 0 +LINE + 5 +1094 + 8 +0 + 62 + 0 + 10 +6049.999997 + 20 +9249.999998 + 30 +0.0 + 11 +6049.999995 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1095 + 8 +0 + 62 + 0 + 10 +4999.999997 + 20 +11068.653346 + 30 +0.0 + 11 +4987.499997 + 21 +11090.303981 + 31 +0.0 + 0 +LINE + 5 +1096 + 8 +0 + 62 + 0 + 10 +4962.499997 + 20 +11133.605251 + 30 +0.0 + 11 +4949.999997 + 21 +11155.255886 + 31 +0.0 + 0 +LINE + 5 +1097 + 8 +0 + 62 + 0 + 10 +4924.999997 + 20 +11198.557157 + 30 +0.0 + 11 +4920.0 + 21 +11207.217405 + 31 +0.0 + 0 +LINE + 5 +1098 + 8 +0 + 62 + 0 + 10 +6049.999997 + 20 +9206.698728 + 30 +0.0 + 11 +6037.499997 + 21 +9228.349363 + 31 +0.0 + 0 +LINE + 5 +1099 + 8 +0 + 62 + 0 + 10 +4999.999997 + 20 +11025.352076 + 30 +0.0 + 11 +4987.499997 + 21 +11047.002711 + 31 +0.0 + 0 +LINE + 5 +109A + 8 +0 + 62 + 0 + 10 +4962.499997 + 20 +11090.303981 + 30 +0.0 + 11 +4949.999997 + 21 +11111.954616 + 31 +0.0 + 0 +LINE + 5 +109B + 8 +0 + 62 + 0 + 10 +4924.999997 + 20 +11155.255886 + 30 +0.0 + 11 +4920.0 + 21 +11163.916135 + 31 +0.0 + 0 +LINE + 5 +109C + 8 +0 + 62 + 0 + 10 +6046.188017 + 20 +9170.0 + 30 +0.0 + 11 +6037.499997 + 21 +9185.048093 + 31 +0.0 + 0 +LINE + 5 +109D + 8 +0 + 62 + 0 + 10 +6012.499997 + 20 +9228.349363 + 30 +0.0 + 11 +5999.999997 + 21 +9249.999998 + 31 +0.0 + 0 +LINE + 5 +109E + 8 +0 + 62 + 0 + 10 +4999.999997 + 20 +10982.050806 + 30 +0.0 + 11 +4987.499997 + 21 +11003.701441 + 31 +0.0 + 0 +LINE + 5 +109F + 8 +0 + 62 + 0 + 10 +4962.499997 + 20 +11047.002711 + 30 +0.0 + 11 +4949.999997 + 21 +11068.653346 + 31 +0.0 + 0 +LINE + 5 +10A0 + 8 +0 + 62 + 0 + 10 +4924.999997 + 20 +11111.954616 + 30 +0.0 + 11 +4920.0 + 21 +11120.614865 + 31 +0.0 + 0 +LINE + 5 +10A1 + 8 +0 + 62 + 0 + 10 +6012.499997 + 20 +9185.048093 + 30 +0.0 + 11 +5999.999997 + 21 +9206.698728 + 31 +0.0 + 0 +LINE + 5 +10A2 + 8 +0 + 62 + 0 + 10 +5974.999997 + 20 +9249.999998 + 30 +0.0 + 11 +5974.999996 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +10A3 + 8 +0 + 62 + 0 + 10 +4999.999997 + 20 +10938.749536 + 30 +0.0 + 11 +4987.499997 + 21 +10960.400171 + 31 +0.0 + 0 +LINE + 5 +10A4 + 8 +0 + 62 + 0 + 10 +4962.499997 + 20 +11003.701441 + 30 +0.0 + 11 +4949.999997 + 21 +11025.352076 + 31 +0.0 + 0 +LINE + 5 +10A5 + 8 +0 + 62 + 0 + 10 +4924.999997 + 20 +11068.653346 + 30 +0.0 + 11 +4920.0 + 21 +11077.313595 + 31 +0.0 + 0 +LINE + 5 +10A6 + 8 +0 + 62 + 0 + 10 +5974.999997 + 20 +9206.698728 + 30 +0.0 + 11 +5962.499997 + 21 +9228.349363 + 31 +0.0 + 0 +LINE + 5 +10A7 + 8 +0 + 62 + 0 + 10 +4999.999997 + 20 +10895.448265 + 30 +0.0 + 11 +4987.499997 + 21 +10917.0989 + 31 +0.0 + 0 +LINE + 5 +10A8 + 8 +0 + 62 + 0 + 10 +4962.499997 + 20 +10960.400171 + 30 +0.0 + 11 +4949.999997 + 21 +10982.050806 + 31 +0.0 + 0 +LINE + 5 +10A9 + 8 +0 + 62 + 0 + 10 +4924.999997 + 20 +11025.352076 + 30 +0.0 + 11 +4920.0 + 21 +11034.012325 + 31 +0.0 + 0 +LINE + 5 +10AA + 8 +0 + 62 + 0 + 10 +5971.188017 + 20 +9170.0 + 30 +0.0 + 11 +5962.499997 + 21 +9185.048093 + 31 +0.0 + 0 +LINE + 5 +10AB + 8 +0 + 62 + 0 + 10 +5937.499997 + 20 +9228.349363 + 30 +0.0 + 11 +5924.999997 + 21 +9249.999998 + 31 +0.0 + 0 +LINE + 5 +10AC + 8 +0 + 62 + 0 + 10 +4999.999997 + 20 +10852.146995 + 30 +0.0 + 11 +4987.499997 + 21 +10873.79763 + 31 +0.0 + 0 +LINE + 5 +10AD + 8 +0 + 62 + 0 + 10 +4962.499997 + 20 +10917.098901 + 30 +0.0 + 11 +4949.999997 + 21 +10938.749536 + 31 +0.0 + 0 +LINE + 5 +10AE + 8 +0 + 62 + 0 + 10 +4924.999997 + 20 +10982.050806 + 30 +0.0 + 11 +4920.0 + 21 +10990.711055 + 31 +0.0 + 0 +LINE + 5 +10AF + 8 +0 + 62 + 0 + 10 +5937.499997 + 20 +9185.048093 + 30 +0.0 + 11 +5924.999997 + 21 +9206.698728 + 31 +0.0 + 0 +LINE + 5 +10B0 + 8 +0 + 62 + 0 + 10 +5899.999997 + 20 +9249.999998 + 30 +0.0 + 11 +5899.999996 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +10B1 + 8 +0 + 62 + 0 + 10 +4999.999997 + 20 +10808.845725 + 30 +0.0 + 11 +4987.499997 + 21 +10830.49636 + 31 +0.0 + 0 +LINE + 5 +10B2 + 8 +0 + 62 + 0 + 10 +4962.499997 + 20 +10873.79763 + 30 +0.0 + 11 +4949.999997 + 21 +10895.448265 + 31 +0.0 + 0 +LINE + 5 +10B3 + 8 +0 + 62 + 0 + 10 +4924.999997 + 20 +10938.749536 + 30 +0.0 + 11 +4920.0 + 21 +10947.409785 + 31 +0.0 + 0 +LINE + 5 +10B4 + 8 +0 + 62 + 0 + 10 +5899.999997 + 20 +9206.698728 + 30 +0.0 + 11 +5887.499997 + 21 +9228.349363 + 31 +0.0 + 0 +LINE + 5 +10B5 + 8 +0 + 62 + 0 + 10 +4999.999997 + 20 +10765.544455 + 30 +0.0 + 11 +4987.499997 + 21 +10787.19509 + 31 +0.0 + 0 +LINE + 5 +10B6 + 8 +0 + 62 + 0 + 10 +4962.499997 + 20 +10830.49636 + 30 +0.0 + 11 +4949.999997 + 21 +10852.146995 + 31 +0.0 + 0 +LINE + 5 +10B7 + 8 +0 + 62 + 0 + 10 +4924.999997 + 20 +10895.448266 + 30 +0.0 + 11 +4920.0 + 21 +10904.108515 + 31 +0.0 + 0 +LINE + 5 +10B8 + 8 +0 + 62 + 0 + 10 +5896.188018 + 20 +9170.0 + 30 +0.0 + 11 +5887.499997 + 21 +9185.048093 + 31 +0.0 + 0 +LINE + 5 +10B9 + 8 +0 + 62 + 0 + 10 +5862.499997 + 20 +9228.349363 + 30 +0.0 + 11 +5849.999997 + 21 +9249.999998 + 31 +0.0 + 0 +LINE + 5 +10BA + 8 +0 + 62 + 0 + 10 +4999.999997 + 20 +10722.243185 + 30 +0.0 + 11 +4987.499997 + 21 +10743.89382 + 31 +0.0 + 0 +LINE + 5 +10BB + 8 +0 + 62 + 0 + 10 +4962.499997 + 20 +10787.19509 + 30 +0.0 + 11 +4949.999997 + 21 +10808.845725 + 31 +0.0 + 0 +LINE + 5 +10BC + 8 +0 + 62 + 0 + 10 +4924.999997 + 20 +10852.146995 + 30 +0.0 + 11 +4920.0 + 21 +10860.807245 + 31 +0.0 + 0 +LINE + 5 +10BD + 8 +0 + 62 + 0 + 10 +5862.499997 + 20 +9185.048093 + 30 +0.0 + 11 +5849.999997 + 21 +9206.698728 + 31 +0.0 + 0 +LINE + 5 +10BE + 8 +0 + 62 + 0 + 10 +5824.999997 + 20 +9249.999998 + 30 +0.0 + 11 +5824.999996 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +10BF + 8 +0 + 62 + 0 + 10 +4999.999997 + 20 +10678.941915 + 30 +0.0 + 11 +4987.499997 + 21 +10700.59255 + 31 +0.0 + 0 +LINE + 5 +10C0 + 8 +0 + 62 + 0 + 10 +4962.499997 + 20 +10743.89382 + 30 +0.0 + 11 +4949.999997 + 21 +10765.544455 + 31 +0.0 + 0 +LINE + 5 +10C1 + 8 +0 + 62 + 0 + 10 +4924.999997 + 20 +10808.845725 + 30 +0.0 + 11 +4920.0 + 21 +10817.505975 + 31 +0.0 + 0 +LINE + 5 +10C2 + 8 +0 + 62 + 0 + 10 +5824.999997 + 20 +9206.698728 + 30 +0.0 + 11 +5812.499997 + 21 +9228.349363 + 31 +0.0 + 0 +LINE + 5 +10C3 + 8 +0 + 62 + 0 + 10 +4999.999997 + 20 +10635.640645 + 30 +0.0 + 11 +4987.499997 + 21 +10657.29128 + 31 +0.0 + 0 +LINE + 5 +10C4 + 8 +0 + 62 + 0 + 10 +4962.499997 + 20 +10700.59255 + 30 +0.0 + 11 +4949.999997 + 21 +10722.243185 + 31 +0.0 + 0 +LINE + 5 +10C5 + 8 +0 + 62 + 0 + 10 +4924.999997 + 20 +10765.544455 + 30 +0.0 + 11 +4920.0 + 21 +10774.204705 + 31 +0.0 + 0 +LINE + 5 +10C6 + 8 +0 + 62 + 0 + 10 +5821.188018 + 20 +9170.0 + 30 +0.0 + 11 +5812.499997 + 21 +9185.048093 + 31 +0.0 + 0 +LINE + 5 +10C7 + 8 +0 + 62 + 0 + 10 +5787.499997 + 20 +9228.349363 + 30 +0.0 + 11 +5774.999997 + 21 +9249.999999 + 31 +0.0 + 0 +LINE + 5 +10C8 + 8 +0 + 62 + 0 + 10 +4999.999997 + 20 +10592.339374 + 30 +0.0 + 11 +4987.499997 + 21 +10613.990009 + 31 +0.0 + 0 +LINE + 5 +10C9 + 8 +0 + 62 + 0 + 10 +4962.499997 + 20 +10657.29128 + 30 +0.0 + 11 +4949.999997 + 21 +10678.941915 + 31 +0.0 + 0 +LINE + 5 +10CA + 8 +0 + 62 + 0 + 10 +4924.999997 + 20 +10722.243185 + 30 +0.0 + 11 +4920.0 + 21 +10730.903435 + 31 +0.0 + 0 +LINE + 5 +10CB + 8 +0 + 62 + 0 + 10 +5787.499998 + 20 +9185.048093 + 30 +0.0 + 11 +5774.999998 + 21 +9206.698728 + 31 +0.0 + 0 +LINE + 5 +10CC + 8 +0 + 62 + 0 + 10 +5749.999998 + 20 +9249.999999 + 30 +0.0 + 11 +5749.999997 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +10CD + 8 +0 + 62 + 0 + 10 +4999.999998 + 20 +10549.038104 + 30 +0.0 + 11 +4987.499998 + 21 +10570.688739 + 31 +0.0 + 0 +LINE + 5 +10CE + 8 +0 + 62 + 0 + 10 +4962.499998 + 20 +10613.99001 + 30 +0.0 + 11 +4949.999998 + 21 +10635.640645 + 31 +0.0 + 0 +LINE + 5 +10CF + 8 +0 + 62 + 0 + 10 +4924.999998 + 20 +10678.941915 + 30 +0.0 + 11 +4920.0 + 21 +10687.602165 + 31 +0.0 + 0 +LINE + 5 +10D0 + 8 +0 + 62 + 0 + 10 +5749.999998 + 20 +9206.698728 + 30 +0.0 + 11 +5737.499998 + 21 +9228.349364 + 31 +0.0 + 0 +LINE + 5 +10D1 + 8 +0 + 62 + 0 + 10 +4999.999998 + 20 +10505.736834 + 30 +0.0 + 11 +4987.499998 + 21 +10527.387469 + 31 +0.0 + 0 +LINE + 5 +10D2 + 8 +0 + 62 + 0 + 10 +4962.499998 + 20 +10570.688739 + 30 +0.0 + 11 +4949.999998 + 21 +10592.339374 + 31 +0.0 + 0 +LINE + 5 +10D3 + 8 +0 + 62 + 0 + 10 +4924.999998 + 20 +10635.640645 + 30 +0.0 + 11 +4920.0 + 21 +10644.300895 + 31 +0.0 + 0 +LINE + 5 +10D4 + 8 +0 + 62 + 0 + 10 +5746.188018 + 20 +9170.0 + 30 +0.0 + 11 +5737.499998 + 21 +9185.048093 + 31 +0.0 + 0 +LINE + 5 +10D5 + 8 +0 + 62 + 0 + 10 +5712.499998 + 20 +9228.349364 + 30 +0.0 + 11 +5699.999998 + 21 +9249.999999 + 31 +0.0 + 0 +LINE + 5 +10D6 + 8 +0 + 62 + 0 + 10 +4999.999998 + 20 +10462.435564 + 30 +0.0 + 11 +4987.499998 + 21 +10484.086199 + 31 +0.0 + 0 +LINE + 5 +10D7 + 8 +0 + 62 + 0 + 10 +4962.499998 + 20 +10527.387469 + 30 +0.0 + 11 +4949.999998 + 21 +10549.038104 + 31 +0.0 + 0 +LINE + 5 +10D8 + 8 +0 + 62 + 0 + 10 +4924.999998 + 20 +10592.339375 + 30 +0.0 + 11 +4920.0 + 21 +10600.999625 + 31 +0.0 + 0 +LINE + 5 +10D9 + 8 +0 + 62 + 0 + 10 +5712.499998 + 20 +9185.048093 + 30 +0.0 + 11 +5699.999998 + 21 +9206.698729 + 31 +0.0 + 0 +LINE + 5 +10DA + 8 +0 + 62 + 0 + 10 +5674.999998 + 20 +9249.999999 + 30 +0.0 + 11 +5674.999997 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +10DB + 8 +0 + 62 + 0 + 10 +4999.999998 + 20 +10419.134294 + 30 +0.0 + 11 +4987.499998 + 21 +10440.784929 + 31 +0.0 + 0 +LINE + 5 +10DC + 8 +0 + 62 + 0 + 10 +4962.499998 + 20 +10484.086199 + 30 +0.0 + 11 +4949.999998 + 21 +10505.736834 + 31 +0.0 + 0 +LINE + 5 +10DD + 8 +0 + 62 + 0 + 10 +4924.999998 + 20 +10549.038104 + 30 +0.0 + 11 +4920.0 + 21 +10557.698355 + 31 +0.0 + 0 +LINE + 5 +10DE + 8 +0 + 62 + 0 + 10 +5674.999998 + 20 +9206.698729 + 30 +0.0 + 11 +5662.499998 + 21 +9228.349364 + 31 +0.0 + 0 +LINE + 5 +10DF + 8 +0 + 62 + 0 + 10 +4999.999998 + 20 +10375.833024 + 30 +0.0 + 11 +4987.499998 + 21 +10397.483659 + 31 +0.0 + 0 +LINE + 5 +10E0 + 8 +0 + 62 + 0 + 10 +4962.499998 + 20 +10440.784929 + 30 +0.0 + 11 +4949.999998 + 21 +10462.435564 + 31 +0.0 + 0 +LINE + 5 +10E1 + 8 +0 + 62 + 0 + 10 +4924.999998 + 20 +10505.736834 + 30 +0.0 + 11 +4920.0 + 21 +10514.397085 + 31 +0.0 + 0 +LINE + 5 +10E2 + 8 +0 + 62 + 0 + 10 +5671.188019 + 20 +9170.0 + 30 +0.0 + 11 +5662.499998 + 21 +9185.048094 + 31 +0.0 + 0 +LINE + 5 +10E3 + 8 +0 + 62 + 0 + 10 +5637.499998 + 20 +9228.349364 + 30 +0.0 + 11 +5624.999998 + 21 +9249.999999 + 31 +0.0 + 0 +LINE + 5 +10E4 + 8 +0 + 62 + 0 + 10 +4999.999998 + 20 +10332.531754 + 30 +0.0 + 11 +4987.499998 + 21 +10354.182389 + 31 +0.0 + 0 +LINE + 5 +10E5 + 8 +0 + 62 + 0 + 10 +4962.499998 + 20 +10397.483659 + 30 +0.0 + 11 +4949.999998 + 21 +10419.134294 + 31 +0.0 + 0 +LINE + 5 +10E6 + 8 +0 + 62 + 0 + 10 +4924.999998 + 20 +10462.435564 + 30 +0.0 + 11 +4920.0 + 21 +10471.095815 + 31 +0.0 + 0 +LINE + 5 +10E7 + 8 +0 + 62 + 0 + 10 +5637.499998 + 20 +9185.048094 + 30 +0.0 + 11 +5624.999998 + 21 +9206.698729 + 31 +0.0 + 0 +LINE + 5 +10E8 + 8 +0 + 62 + 0 + 10 +5599.999998 + 20 +9249.999999 + 30 +0.0 + 11 +5599.999997 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +10E9 + 8 +0 + 62 + 0 + 10 +4999.999998 + 20 +10289.230483 + 30 +0.0 + 11 +4987.499998 + 21 +10310.881119 + 31 +0.0 + 0 +LINE + 5 +10EA + 8 +0 + 62 + 0 + 10 +4962.499998 + 20 +10354.182389 + 30 +0.0 + 11 +4949.999998 + 21 +10375.833024 + 31 +0.0 + 0 +LINE + 5 +10EB + 8 +0 + 62 + 0 + 10 +4924.999998 + 20 +10419.134294 + 30 +0.0 + 11 +4920.0 + 21 +10427.794545 + 31 +0.0 + 0 +LINE + 5 +10EC + 8 +0 + 62 + 0 + 10 +5599.999998 + 20 +9206.698729 + 30 +0.0 + 11 +5587.499998 + 21 +9228.349364 + 31 +0.0 + 0 +LINE + 5 +10ED + 8 +0 + 62 + 0 + 10 +4999.999998 + 20 +10245.929213 + 30 +0.0 + 11 +4987.499998 + 21 +10267.579848 + 31 +0.0 + 0 +LINE + 5 +10EE + 8 +0 + 62 + 0 + 10 +4962.499998 + 20 +10310.881119 + 30 +0.0 + 11 +4949.999998 + 21 +10332.531754 + 31 +0.0 + 0 +LINE + 5 +10EF + 8 +0 + 62 + 0 + 10 +4924.999998 + 20 +10375.833024 + 30 +0.0 + 11 +4920.0 + 21 +10384.493275 + 31 +0.0 + 0 +LINE + 5 +10F0 + 8 +0 + 62 + 0 + 10 +5596.188019 + 20 +9170.0 + 30 +0.0 + 11 +5587.499998 + 21 +9185.048094 + 31 +0.0 + 0 +LINE + 5 +10F1 + 8 +0 + 62 + 0 + 10 +5562.499998 + 20 +9228.349364 + 30 +0.0 + 11 +5549.999998 + 21 +9249.999999 + 31 +0.0 + 0 +LINE + 5 +10F2 + 8 +0 + 62 + 0 + 10 +4999.999998 + 20 +10202.627943 + 30 +0.0 + 11 +4987.499998 + 21 +10224.278578 + 31 +0.0 + 0 +LINE + 5 +10F3 + 8 +0 + 62 + 0 + 10 +4962.499998 + 20 +10267.579848 + 30 +0.0 + 11 +4949.999998 + 21 +10289.230484 + 31 +0.0 + 0 +LINE + 5 +10F4 + 8 +0 + 62 + 0 + 10 +4924.999998 + 20 +10332.531754 + 30 +0.0 + 11 +4920.0 + 21 +10341.192005 + 31 +0.0 + 0 +LINE + 5 +10F5 + 8 +0 + 62 + 0 + 10 +5562.499998 + 20 +9185.048094 + 30 +0.0 + 11 +5549.999998 + 21 +9206.698729 + 31 +0.0 + 0 +LINE + 5 +10F6 + 8 +0 + 62 + 0 + 10 +5524.999998 + 20 +9249.999999 + 30 +0.0 + 11 +5524.999998 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +10F7 + 8 +0 + 62 + 0 + 10 +4999.999998 + 20 +10159.326673 + 30 +0.0 + 11 +4987.499998 + 21 +10180.977308 + 31 +0.0 + 0 +LINE + 5 +10F8 + 8 +0 + 62 + 0 + 10 +4962.499998 + 20 +10224.278578 + 30 +0.0 + 11 +4949.999998 + 21 +10245.929213 + 31 +0.0 + 0 +LINE + 5 +10F9 + 8 +0 + 62 + 0 + 10 +4924.999998 + 20 +10289.230484 + 30 +0.0 + 11 +4920.0 + 21 +10297.890735 + 31 +0.0 + 0 +LINE + 5 +10FA + 8 +0 + 62 + 0 + 10 +5524.999998 + 20 +9206.698729 + 30 +0.0 + 11 +5512.499998 + 21 +9228.349364 + 31 +0.0 + 0 +LINE + 5 +10FB + 8 +0 + 62 + 0 + 10 +4999.999998 + 20 +10116.025403 + 30 +0.0 + 11 +4987.499998 + 21 +10137.676038 + 31 +0.0 + 0 +LINE + 5 +10FC + 8 +0 + 62 + 0 + 10 +4962.499998 + 20 +10180.977308 + 30 +0.0 + 11 +4949.999998 + 21 +10202.627943 + 31 +0.0 + 0 +LINE + 5 +10FD + 8 +0 + 62 + 0 + 10 +4924.999998 + 20 +10245.929213 + 30 +0.0 + 11 +4920.0 + 21 +10254.589465 + 31 +0.0 + 0 +LINE + 5 +10FE + 8 +0 + 62 + 0 + 10 +5521.188019 + 20 +9170.0 + 30 +0.0 + 11 +5512.499998 + 21 +9185.048094 + 31 +0.0 + 0 +LINE + 5 +10FF + 8 +0 + 62 + 0 + 10 +5487.499998 + 20 +9228.349364 + 30 +0.0 + 11 +5474.999998 + 21 +9249.999999 + 31 +0.0 + 0 +LINE + 5 +1100 + 8 +0 + 62 + 0 + 10 +4999.999998 + 20 +10072.724133 + 30 +0.0 + 11 +4987.499998 + 21 +10094.374768 + 31 +0.0 + 0 +LINE + 5 +1101 + 8 +0 + 62 + 0 + 10 +4962.499998 + 20 +10137.676038 + 30 +0.0 + 11 +4949.999998 + 21 +10159.326673 + 31 +0.0 + 0 +LINE + 5 +1102 + 8 +0 + 62 + 0 + 10 +4924.999998 + 20 +10202.627943 + 30 +0.0 + 11 +4920.0 + 21 +10211.288195 + 31 +0.0 + 0 +LINE + 5 +1103 + 8 +0 + 62 + 0 + 10 +5487.499999 + 20 +9185.048094 + 30 +0.0 + 11 +5474.999999 + 21 +9206.698729 + 31 +0.0 + 0 +LINE + 5 +1104 + 8 +0 + 62 + 0 + 10 +5449.999999 + 20 +9249.999999 + 30 +0.0 + 11 +5449.999998 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1105 + 8 +0 + 62 + 0 + 10 +4999.999999 + 20 +10029.422863 + 30 +0.0 + 11 +4987.499999 + 21 +10051.073498 + 31 +0.0 + 0 +LINE + 5 +1106 + 8 +0 + 62 + 0 + 10 +4962.499999 + 20 +10094.374768 + 30 +0.0 + 11 +4949.999999 + 21 +10116.025403 + 31 +0.0 + 0 +LINE + 5 +1107 + 8 +0 + 62 + 0 + 10 +4924.999999 + 20 +10159.326673 + 30 +0.0 + 11 +4920.0 + 21 +10167.986925 + 31 +0.0 + 0 +LINE + 5 +1108 + 8 +0 + 62 + 0 + 10 +5449.999999 + 20 +9206.698729 + 30 +0.0 + 11 +5437.499999 + 21 +9228.349364 + 31 +0.0 + 0 +LINE + 5 +1109 + 8 +0 + 62 + 0 + 10 +4999.999999 + 20 +9986.121592 + 30 +0.0 + 11 +4987.499999 + 21 +10007.772228 + 31 +0.0 + 0 +LINE + 5 +110A + 8 +0 + 62 + 0 + 10 +4962.499999 + 20 +10051.073498 + 30 +0.0 + 11 +4949.999999 + 21 +10072.724133 + 31 +0.0 + 0 +LINE + 5 +110B + 8 +0 + 62 + 0 + 10 +4924.999999 + 20 +10116.025403 + 30 +0.0 + 11 +4920.0 + 21 +10124.685655 + 31 +0.0 + 0 +LINE + 5 +110C + 8 +0 + 62 + 0 + 10 +5446.18802 + 20 +9170.0 + 30 +0.0 + 11 +5437.499999 + 21 +9185.048094 + 31 +0.0 + 0 +LINE + 5 +110D + 8 +0 + 62 + 0 + 10 +5412.499999 + 20 +9228.349364 + 30 +0.0 + 11 +5399.999999 + 21 +9249.999999 + 31 +0.0 + 0 +LINE + 5 +110E + 8 +0 + 62 + 0 + 10 +4999.999999 + 20 +9942.820322 + 30 +0.0 + 11 +4987.499999 + 21 +9964.470957 + 31 +0.0 + 0 +LINE + 5 +110F + 8 +0 + 62 + 0 + 10 +4962.499999 + 20 +10007.772228 + 30 +0.0 + 11 +4949.999999 + 21 +10029.422863 + 31 +0.0 + 0 +LINE + 5 +1110 + 8 +0 + 62 + 0 + 10 +4924.999999 + 20 +10072.724133 + 30 +0.0 + 11 +4920.0 + 21 +10081.384385 + 31 +0.0 + 0 +LINE + 5 +1111 + 8 +0 + 62 + 0 + 10 +5412.499999 + 20 +9185.048094 + 30 +0.0 + 11 +5399.999999 + 21 +9206.698729 + 31 +0.0 + 0 +LINE + 5 +1112 + 8 +0 + 62 + 0 + 10 +5374.999999 + 20 +9249.999999 + 30 +0.0 + 11 +5374.999998 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1113 + 8 +0 + 62 + 0 + 10 +4999.999999 + 20 +9899.519052 + 30 +0.0 + 11 +4987.499999 + 21 +9921.169687 + 31 +0.0 + 0 +LINE + 5 +1114 + 8 +0 + 62 + 0 + 10 +4962.499999 + 20 +9964.470957 + 30 +0.0 + 11 +4949.999999 + 21 +9986.121593 + 31 +0.0 + 0 +LINE + 5 +1115 + 8 +0 + 62 + 0 + 10 +4924.999999 + 20 +10029.422863 + 30 +0.0 + 11 +4920.0 + 21 +10038.083115 + 31 +0.0 + 0 +LINE + 5 +1116 + 8 +0 + 62 + 0 + 10 +5374.999999 + 20 +9206.698729 + 30 +0.0 + 11 +5362.499999 + 21 +9228.349364 + 31 +0.0 + 0 +LINE + 5 +1117 + 8 +0 + 62 + 0 + 10 +4999.999999 + 20 +9856.217782 + 30 +0.0 + 11 +4987.499999 + 21 +9877.868417 + 31 +0.0 + 0 +LINE + 5 +1118 + 8 +0 + 62 + 0 + 10 +4962.499999 + 20 +9921.169687 + 30 +0.0 + 11 +4949.999999 + 21 +9942.820322 + 31 +0.0 + 0 +LINE + 5 +1119 + 8 +0 + 62 + 0 + 10 +4924.999999 + 20 +9986.121593 + 30 +0.0 + 11 +4920.0 + 21 +9994.781845 + 31 +0.0 + 0 +LINE + 5 +111A + 8 +0 + 62 + 0 + 10 +5371.18802 + 20 +9170.0 + 30 +0.0 + 11 +5362.499999 + 21 +9185.048094 + 31 +0.0 + 0 +LINE + 5 +111B + 8 +0 + 62 + 0 + 10 +5337.499999 + 20 +9228.349364 + 30 +0.0 + 11 +5324.999999 + 21 +9249.999999 + 31 +0.0 + 0 +LINE + 5 +111C + 8 +0 + 62 + 0 + 10 +4999.999999 + 20 +9812.916512 + 30 +0.0 + 11 +4987.499999 + 21 +9834.567147 + 31 +0.0 + 0 +LINE + 5 +111D + 8 +0 + 62 + 0 + 10 +4962.499999 + 20 +9877.868417 + 30 +0.0 + 11 +4949.999999 + 21 +9899.519052 + 31 +0.0 + 0 +LINE + 5 +111E + 8 +0 + 62 + 0 + 10 +4924.999999 + 20 +9942.820322 + 30 +0.0 + 11 +4920.0 + 21 +9951.480575 + 31 +0.0 + 0 +LINE + 5 +111F + 8 +0 + 62 + 0 + 10 +5337.499999 + 20 +9185.048094 + 30 +0.0 + 11 +5324.999999 + 21 +9206.698729 + 31 +0.0 + 0 +LINE + 5 +1120 + 8 +0 + 62 + 0 + 10 +5299.999999 + 20 +9249.999999 + 30 +0.0 + 11 +5299.999999 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1121 + 8 +0 + 62 + 0 + 10 +4999.999999 + 20 +9769.615242 + 30 +0.0 + 11 +4987.499999 + 21 +9791.265877 + 31 +0.0 + 0 +LINE + 5 +1122 + 8 +0 + 62 + 0 + 10 +4962.499999 + 20 +9834.567147 + 30 +0.0 + 11 +4949.999999 + 21 +9856.217782 + 31 +0.0 + 0 +LINE + 5 +1123 + 8 +0 + 62 + 0 + 10 +4924.999999 + 20 +9899.519052 + 30 +0.0 + 11 +4920.0 + 21 +9908.179305 + 31 +0.0 + 0 +LINE + 5 +1124 + 8 +0 + 62 + 0 + 10 +5299.999999 + 20 +9206.698729 + 30 +0.0 + 11 +5287.499999 + 21 +9228.349364 + 31 +0.0 + 0 +LINE + 5 +1125 + 8 +0 + 62 + 0 + 10 +4999.999999 + 20 +9726.313972 + 30 +0.0 + 11 +4987.499999 + 21 +9747.964607 + 31 +0.0 + 0 +LINE + 5 +1126 + 8 +0 + 62 + 0 + 10 +4962.499999 + 20 +9791.265877 + 30 +0.0 + 11 +4949.999999 + 21 +9812.916512 + 31 +0.0 + 0 +LINE + 5 +1127 + 8 +0 + 62 + 0 + 10 +4924.999999 + 20 +9856.217782 + 30 +0.0 + 11 +4920.0 + 21 +9864.878035 + 31 +0.0 + 0 +LINE + 5 +1128 + 8 +0 + 62 + 0 + 10 +5296.18802 + 20 +9170.0 + 30 +0.0 + 11 +5287.499999 + 21 +9185.048094 + 31 +0.0 + 0 +LINE + 5 +1129 + 8 +0 + 62 + 0 + 10 +5262.499999 + 20 +9228.349364 + 30 +0.0 + 11 +5249.999999 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +112A + 8 +0 + 62 + 0 + 10 +4999.999999 + 20 +9683.012701 + 30 +0.0 + 11 +4987.499999 + 21 +9704.663337 + 31 +0.0 + 0 +LINE + 5 +112B + 8 +0 + 62 + 0 + 10 +4962.499999 + 20 +9747.964607 + 30 +0.0 + 11 +4949.999999 + 21 +9769.615242 + 31 +0.0 + 0 +LINE + 5 +112C + 8 +0 + 62 + 0 + 10 +4924.999999 + 20 +9812.916512 + 30 +0.0 + 11 +4920.0 + 21 +9821.576765 + 31 +0.0 + 0 +LINE + 5 +112D + 8 +0 + 62 + 0 + 10 +5262.499999 + 20 +9185.048094 + 30 +0.0 + 11 +5249.999999 + 21 +9206.698729 + 31 +0.0 + 0 +LINE + 5 +112E + 8 +0 + 62 + 0 + 10 +5224.999999 + 20 +9250.0 + 30 +0.0 + 11 +5224.999999 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +112F + 8 +0 + 62 + 0 + 10 +4999.999999 + 20 +9639.711431 + 30 +0.0 + 11 +4987.499999 + 21 +9661.362066 + 31 +0.0 + 0 +LINE + 5 +1130 + 8 +0 + 62 + 0 + 10 +4962.499999 + 20 +9704.663337 + 30 +0.0 + 11 +4949.999999 + 21 +9726.313972 + 31 +0.0 + 0 +LINE + 5 +1131 + 8 +0 + 62 + 0 + 10 +4924.999999 + 20 +9769.615242 + 30 +0.0 + 11 +4920.0 + 21 +9778.275495 + 31 +0.0 + 0 +LINE + 5 +1132 + 8 +0 + 62 + 0 + 10 +5224.999999 + 20 +9206.698729 + 30 +0.0 + 11 +5212.499999 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1133 + 8 +0 + 62 + 0 + 10 +4999.999999 + 20 +9596.410161 + 30 +0.0 + 11 +4987.499999 + 21 +9618.060796 + 31 +0.0 + 0 +LINE + 5 +1134 + 8 +0 + 62 + 0 + 10 +4962.499999 + 20 +9661.362066 + 30 +0.0 + 11 +4949.999999 + 21 +9683.012702 + 31 +0.0 + 0 +LINE + 5 +1135 + 8 +0 + 62 + 0 + 10 +4924.999999 + 20 +9726.313972 + 30 +0.0 + 11 +4920.0 + 21 +9734.974225 + 31 +0.0 + 0 +LINE + 5 +1136 + 8 +0 + 62 + 0 + 10 +5221.188021 + 20 +9170.0 + 30 +0.0 + 11 +5212.499999 + 21 +9185.048094 + 31 +0.0 + 0 +LINE + 5 +1137 + 8 +0 + 62 + 0 + 10 +5187.499999 + 20 +9228.349365 + 30 +0.0 + 11 +5174.999999 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1138 + 8 +0 + 62 + 0 + 10 +4999.999999 + 20 +9553.108891 + 30 +0.0 + 11 +4987.499999 + 21 +9574.759526 + 31 +0.0 + 0 +LINE + 5 +1139 + 8 +0 + 62 + 0 + 10 +4962.499999 + 20 +9618.060796 + 30 +0.0 + 11 +4949.999999 + 21 +9639.711431 + 31 +0.0 + 0 +LINE + 5 +113A + 8 +0 + 62 + 0 + 10 +4924.999999 + 20 +9683.012702 + 30 +0.0 + 11 +4920.0 + 21 +9691.672955 + 31 +0.0 + 0 +LINE + 5 +113B + 8 +0 + 62 + 0 + 10 +5187.5 + 20 +9185.048094 + 30 +0.0 + 11 +5175.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +113C + 8 +0 + 62 + 0 + 10 +5150.0 + 20 +9250.0 + 30 +0.0 + 11 +5149.999999 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +113D + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +9509.807621 + 30 +0.0 + 11 +4987.5 + 21 +9531.458256 + 31 +0.0 + 0 +LINE + 5 +113E + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +9574.759526 + 30 +0.0 + 11 +4950.0 + 21 +9596.410161 + 31 +0.0 + 0 +LINE + 5 +113F + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +9639.711431 + 30 +0.0 + 11 +4920.0 + 21 +9648.371685 + 31 +0.0 + 0 +LINE + 5 +1140 + 8 +0 + 62 + 0 + 10 +5150.0 + 20 +9206.69873 + 30 +0.0 + 11 +5137.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1141 + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +9466.506351 + 30 +0.0 + 11 +4987.5 + 21 +9488.156986 + 31 +0.0 + 0 +LINE + 5 +1142 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +9531.458256 + 30 +0.0 + 11 +4950.0 + 21 +9553.108891 + 31 +0.0 + 0 +LINE + 5 +1143 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +9596.410161 + 30 +0.0 + 11 +4920.0 + 21 +9605.070415 + 31 +0.0 + 0 +LINE + 5 +1144 + 8 +0 + 62 + 0 + 10 +5146.188021 + 20 +9170.0 + 30 +0.0 + 11 +5137.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +1145 + 8 +0 + 62 + 0 + 10 +5112.5 + 20 +9228.349365 + 30 +0.0 + 11 +5100.0 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1146 + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +9423.205081 + 30 +0.0 + 11 +4987.5 + 21 +9444.855716 + 31 +0.0 + 0 +LINE + 5 +1147 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +9488.156986 + 30 +0.0 + 11 +4950.0 + 21 +9509.807621 + 31 +0.0 + 0 +LINE + 5 +1148 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +9553.108891 + 30 +0.0 + 11 +4920.0 + 21 +9561.769145 + 31 +0.0 + 0 +LINE + 5 +1149 + 8 +0 + 62 + 0 + 10 +5112.5 + 20 +9185.048095 + 30 +0.0 + 11 +5100.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +114A + 8 +0 + 62 + 0 + 10 +5075.0 + 20 +9250.0 + 30 +0.0 + 11 +5075.0 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +114B + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +9379.90381 + 30 +0.0 + 11 +4987.5 + 21 +9401.554446 + 31 +0.0 + 0 +LINE + 5 +114C + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +9444.855716 + 30 +0.0 + 11 +4950.0 + 21 +9466.506351 + 31 +0.0 + 0 +LINE + 5 +114D + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +9509.807621 + 30 +0.0 + 11 +4920.0 + 21 +9518.467875 + 31 +0.0 + 0 +LINE + 5 +114E + 8 +0 + 62 + 0 + 10 +5075.0 + 20 +9206.69873 + 30 +0.0 + 11 +5062.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +114F + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +9336.60254 + 30 +0.0 + 11 +4987.5 + 21 +9358.253175 + 31 +0.0 + 0 +LINE + 5 +1150 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +9401.554446 + 30 +0.0 + 11 +4950.0 + 21 +9423.205081 + 31 +0.0 + 0 +LINE + 5 +1151 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +9466.506351 + 30 +0.0 + 11 +4920.0 + 21 +9475.166605 + 31 +0.0 + 0 +LINE + 5 +1152 + 8 +0 + 62 + 0 + 10 +5071.188021 + 20 +9170.0 + 30 +0.0 + 11 +5062.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +1153 + 8 +0 + 62 + 0 + 10 +5037.5 + 20 +9228.349365 + 30 +0.0 + 11 +5025.0 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1154 + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +9293.30127 + 30 +0.0 + 11 +4987.5 + 21 +9314.951905 + 31 +0.0 + 0 +LINE + 5 +1155 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +9358.253175 + 30 +0.0 + 11 +4950.0 + 21 +9379.903811 + 31 +0.0 + 0 +LINE + 5 +1156 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +9423.205081 + 30 +0.0 + 11 +4920.0 + 21 +9431.865335 + 31 +0.0 + 0 +LINE + 5 +1157 + 8 +0 + 62 + 0 + 10 +5037.5 + 20 +9185.048095 + 30 +0.0 + 11 +5025.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +1158 + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +9250.0 + 30 +0.0 + 11 +4987.5 + 21 +9271.650635 + 31 +0.0 + 0 +LINE + 5 +1159 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +9314.951905 + 30 +0.0 + 11 +4950.0 + 21 +9336.60254 + 31 +0.0 + 0 +LINE + 5 +115A + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +9379.903811 + 30 +0.0 + 11 +4920.0 + 21 +9388.564065 + 31 +0.0 + 0 +LINE + 5 +115B + 8 +0 + 62 + 0 + 10 +5000.0 + 20 +9206.69873 + 30 +0.0 + 11 +4987.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +115C + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +9271.650635 + 30 +0.0 + 11 +4950.0 + 21 +9293.30127 + 31 +0.0 + 0 +LINE + 5 +115D + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +9336.60254 + 30 +0.0 + 11 +4920.0 + 21 +9345.262795 + 31 +0.0 + 0 +LINE + 5 +115E + 8 +0 + 62 + 0 + 10 +4996.188022 + 20 +9170.0 + 30 +0.0 + 11 +4987.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +115F + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +9228.349365 + 30 +0.0 + 11 +4950.0 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1160 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +9293.30127 + 30 +0.0 + 11 +4920.0 + 21 +9301.961525 + 31 +0.0 + 0 +LINE + 5 +1161 + 8 +0 + 62 + 0 + 10 +4962.5 + 20 +9185.048095 + 30 +0.0 + 11 +4950.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +1162 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +9250.0 + 30 +0.0 + 11 +4920.0 + 21 +9258.660255 + 31 +0.0 + 0 +LINE + 5 +1163 + 8 +0 + 62 + 0 + 10 +4925.0 + 20 +9206.69873 + 30 +0.0 + 11 +4920.0 + 21 +9215.358985 + 31 +0.0 + 0 +LINE + 5 +1164 + 8 +0 + 62 + 0 + 10 +4921.188022 + 20 +9170.0 + 30 +0.0 + 11 +4920.0 + 21 +9172.057715 + 31 +0.0 + 0 +LINE + 5 +1165 + 8 +0 + 62 + 0 + 10 +4999.999991 + 20 +14229.646066 + 30 +0.0 + 11 +4987.499991 + 21 +14251.296701 + 31 +0.0 + 0 +LINE + 5 +1166 + 8 +0 + 62 + 0 + 10 +4962.499991 + 20 +14294.597972 + 30 +0.0 + 11 +4949.999991 + 21 +14316.248607 + 31 +0.0 + 0 +LINE + 5 +1167 + 8 +0 + 62 + 0 + 10 +4924.999991 + 20 +14359.549877 + 30 +0.0 + 11 +4920.0 + 21 +14368.210115 + 31 +0.0 + 0 +LINE + 5 +1168 + 8 +0 + 62 + 0 + 10 +4999.99999 + 20 +14272.947336 + 30 +0.0 + 11 +4987.49999 + 21 +14294.597972 + 31 +0.0 + 0 +LINE + 5 +1169 + 8 +0 + 62 + 0 + 10 +4962.49999 + 20 +14337.899242 + 30 +0.0 + 11 +4949.99999 + 21 +14359.549877 + 31 +0.0 + 0 +LINE + 5 +116A + 8 +0 + 62 + 0 + 10 +4924.99999 + 20 +14402.851147 + 30 +0.0 + 11 +4920.0 + 21 +14411.511385 + 31 +0.0 + 0 +LINE + 5 +116B + 8 +0 + 62 + 0 + 10 +4999.99999 + 20 +14316.248607 + 30 +0.0 + 11 +4987.49999 + 21 +14337.899242 + 31 +0.0 + 0 +LINE + 5 +116C + 8 +0 + 62 + 0 + 10 +4962.49999 + 20 +14381.200512 + 30 +0.0 + 11 +4949.99999 + 21 +14402.851147 + 31 +0.0 + 0 +LINE + 5 +116D + 8 +0 + 62 + 0 + 10 +4924.99999 + 20 +14446.152417 + 30 +0.0 + 11 +4920.0 + 21 +14454.812655 + 31 +0.0 + 0 +LINE + 5 +116E + 8 +0 + 62 + 0 + 10 +4999.99999 + 20 +14359.549877 + 30 +0.0 + 11 +4987.49999 + 21 +14381.200512 + 31 +0.0 + 0 +LINE + 5 +116F + 8 +0 + 62 + 0 + 10 +4962.49999 + 20 +14424.501782 + 30 +0.0 + 11 +4949.99999 + 21 +14446.152417 + 31 +0.0 + 0 +LINE + 5 +1170 + 8 +0 + 62 + 0 + 10 +4924.99999 + 20 +14489.453687 + 30 +0.0 + 11 +4920.0 + 21 +14498.113925 + 31 +0.0 + 0 +LINE + 5 +1171 + 8 +0 + 62 + 0 + 10 +4999.99999 + 20 +14402.851147 + 30 +0.0 + 11 +4987.49999 + 21 +14424.501782 + 31 +0.0 + 0 +LINE + 5 +1172 + 8 +0 + 62 + 0 + 10 +4962.49999 + 20 +14467.803052 + 30 +0.0 + 11 +4949.99999 + 21 +14489.453687 + 31 +0.0 + 0 +LINE + 5 +1173 + 8 +0 + 62 + 0 + 10 +4924.99999 + 20 +14532.754957 + 30 +0.0 + 11 +4920.0 + 21 +14541.415195 + 31 +0.0 + 0 +LINE + 5 +1174 + 8 +0 + 62 + 0 + 10 +4999.99999 + 20 +14446.152417 + 30 +0.0 + 11 +4987.49999 + 21 +14467.803052 + 31 +0.0 + 0 +LINE + 5 +1175 + 8 +0 + 62 + 0 + 10 +4962.49999 + 20 +14511.104322 + 30 +0.0 + 11 +4949.99999 + 21 +14532.754957 + 31 +0.0 + 0 +LINE + 5 +1176 + 8 +0 + 62 + 0 + 10 +4924.99999 + 20 +14576.056228 + 30 +0.0 + 11 +4920.0 + 21 +14584.716465 + 31 +0.0 + 0 +LINE + 5 +1177 + 8 +0 + 62 + 0 + 10 +4999.99999 + 20 +14489.453687 + 30 +0.0 + 11 +4987.49999 + 21 +14511.104322 + 31 +0.0 + 0 +LINE + 5 +1178 + 8 +0 + 62 + 0 + 10 +4962.49999 + 20 +14554.405592 + 30 +0.0 + 11 +4949.99999 + 21 +14576.056228 + 31 +0.0 + 0 +LINE + 5 +1179 + 8 +0 + 62 + 0 + 10 +4924.99999 + 20 +14619.357498 + 30 +0.0 + 11 +4921.020602 + 21 +14626.25 + 31 +0.0 + 0 +LINE + 5 +117A + 8 +0 + 62 + 0 + 10 +4999.99999 + 20 +14532.754957 + 30 +0.0 + 11 +4987.49999 + 21 +14554.405592 + 31 +0.0 + 0 +LINE + 5 +117B + 8 +0 + 62 + 0 + 10 +4962.49999 + 20 +14597.706863 + 30 +0.0 + 11 +4949.99999 + 21 +14619.357498 + 31 +0.0 + 0 +LINE + 5 +117C + 8 +0 + 62 + 0 + 10 +4999.99999 + 20 +14576.056227 + 30 +0.0 + 11 +4987.49999 + 21 +14597.706863 + 31 +0.0 + 0 +LINE + 5 +117D + 8 +0 + 62 + 0 + 10 +4999.99999 + 20 +14619.357498 + 30 +0.0 + 11 +4996.020602 + 21 +14626.25 + 31 +0.0 + 0 +LINE + 5 +117E + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +9414.544825 + 30 +0.0 + 11 +4925.000001 + 21 +9423.20508 + 31 +0.0 + 0 +LINE + 5 +117F + 8 +0 + 62 + 0 + 10 +4950.000001 + 20 +9466.506351 + 30 +0.0 + 11 +4962.500001 + 21 +9488.156986 + 31 +0.0 + 0 +LINE + 5 +1180 + 8 +0 + 62 + 0 + 10 +4987.500001 + 20 +9531.458256 + 30 +0.0 + 11 +5000.0 + 21 +9553.10889 + 31 +0.0 + 0 +LINE + 5 +1181 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +9457.846095 + 30 +0.0 + 11 +4925.000001 + 21 +9466.506351 + 31 +0.0 + 0 +LINE + 5 +1182 + 8 +0 + 62 + 0 + 10 +4950.000001 + 20 +9509.807621 + 30 +0.0 + 11 +4962.500001 + 21 +9531.458256 + 31 +0.0 + 0 +LINE + 5 +1183 + 8 +0 + 62 + 0 + 10 +4987.500001 + 20 +9574.759526 + 30 +0.0 + 11 +5000.0 + 21 +9596.41016 + 31 +0.0 + 0 +LINE + 5 +1184 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +9501.147365 + 30 +0.0 + 11 +4925.000001 + 21 +9509.807621 + 31 +0.0 + 0 +LINE + 5 +1185 + 8 +0 + 62 + 0 + 10 +4950.000001 + 20 +9553.108891 + 30 +0.0 + 11 +4962.500001 + 21 +9574.759526 + 31 +0.0 + 0 +LINE + 5 +1186 + 8 +0 + 62 + 0 + 10 +4987.500001 + 20 +9618.060796 + 30 +0.0 + 11 +5000.0 + 21 +9639.71143 + 31 +0.0 + 0 +LINE + 5 +1187 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +9544.448635 + 30 +0.0 + 11 +4925.000001 + 21 +9553.108891 + 31 +0.0 + 0 +LINE + 5 +1188 + 8 +0 + 62 + 0 + 10 +4950.000001 + 20 +9596.410161 + 30 +0.0 + 11 +4962.500001 + 21 +9618.060796 + 31 +0.0 + 0 +LINE + 5 +1189 + 8 +0 + 62 + 0 + 10 +4987.500001 + 20 +9661.362066 + 30 +0.0 + 11 +5000.0 + 21 +9683.0127 + 31 +0.0 + 0 +LINE + 5 +118A + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +9587.749905 + 30 +0.0 + 11 +4925.000001 + 21 +9596.410161 + 31 +0.0 + 0 +LINE + 5 +118B + 8 +0 + 62 + 0 + 10 +4950.000001 + 20 +9639.711431 + 30 +0.0 + 11 +4962.500001 + 21 +9661.362066 + 31 +0.0 + 0 +LINE + 5 +118C + 8 +0 + 62 + 0 + 10 +4987.500001 + 20 +9704.663336 + 30 +0.0 + 11 +5000.0 + 21 +9726.31397 + 31 +0.0 + 0 +LINE + 5 +118D + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +9631.051175 + 30 +0.0 + 11 +4925.000001 + 21 +9639.711431 + 31 +0.0 + 0 +LINE + 5 +118E + 8 +0 + 62 + 0 + 10 +4950.000001 + 20 +9683.012701 + 30 +0.0 + 11 +4962.500001 + 21 +9704.663336 + 31 +0.0 + 0 +LINE + 5 +118F + 8 +0 + 62 + 0 + 10 +4987.500001 + 20 +9747.964607 + 30 +0.0 + 11 +5000.0 + 21 +9769.61524 + 31 +0.0 + 0 +LINE + 5 +1190 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +9674.352445 + 30 +0.0 + 11 +4925.000001 + 21 +9683.012701 + 31 +0.0 + 0 +LINE + 5 +1191 + 8 +0 + 62 + 0 + 10 +4950.000001 + 20 +9726.313971 + 30 +0.0 + 11 +4962.500001 + 21 +9747.964607 + 31 +0.0 + 0 +LINE + 5 +1192 + 8 +0 + 62 + 0 + 10 +4987.500001 + 20 +9791.265877 + 30 +0.0 + 11 +5000.0 + 21 +9812.91651 + 31 +0.0 + 0 +LINE + 5 +1193 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +9717.653715 + 30 +0.0 + 11 +4925.000001 + 21 +9726.313971 + 31 +0.0 + 0 +LINE + 5 +1194 + 8 +0 + 62 + 0 + 10 +4950.000001 + 20 +9769.615242 + 30 +0.0 + 11 +4962.500001 + 21 +9791.265877 + 31 +0.0 + 0 +LINE + 5 +1195 + 8 +0 + 62 + 0 + 10 +4987.500001 + 20 +9834.567147 + 30 +0.0 + 11 +5000.0 + 21 +9856.21778 + 31 +0.0 + 0 +LINE + 5 +1196 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +9760.954985 + 30 +0.0 + 11 +4925.000001 + 21 +9769.615242 + 31 +0.0 + 0 +LINE + 5 +1197 + 8 +0 + 62 + 0 + 10 +4950.000001 + 20 +9812.916512 + 30 +0.0 + 11 +4962.500001 + 21 +9834.567147 + 31 +0.0 + 0 +LINE + 5 +1198 + 8 +0 + 62 + 0 + 10 +4987.500001 + 20 +9877.868417 + 30 +0.0 + 11 +5000.0 + 21 +9899.51905 + 31 +0.0 + 0 +LINE + 5 +1199 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +9804.256255 + 30 +0.0 + 11 +4925.000001 + 21 +9812.916512 + 31 +0.0 + 0 +LINE + 5 +119A + 8 +0 + 62 + 0 + 10 +4950.000001 + 20 +9856.217782 + 30 +0.0 + 11 +4962.500001 + 21 +9877.868417 + 31 +0.0 + 0 +LINE + 5 +119B + 8 +0 + 62 + 0 + 10 +4987.500001 + 20 +9921.169687 + 30 +0.0 + 11 +5000.0 + 21 +9942.82032 + 31 +0.0 + 0 +LINE + 5 +119C + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +9847.557525 + 30 +0.0 + 11 +4925.000001 + 21 +9856.217782 + 31 +0.0 + 0 +LINE + 5 +119D + 8 +0 + 62 + 0 + 10 +4950.000001 + 20 +9899.519052 + 30 +0.0 + 11 +4962.500001 + 21 +9921.169687 + 31 +0.0 + 0 +LINE + 5 +119E + 8 +0 + 62 + 0 + 10 +4987.500001 + 20 +9964.470957 + 30 +0.0 + 11 +5000.0 + 21 +9986.12159 + 31 +0.0 + 0 +LINE + 5 +119F + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +9890.858795 + 30 +0.0 + 11 +4925.000001 + 21 +9899.519052 + 31 +0.0 + 0 +LINE + 5 +11A0 + 8 +0 + 62 + 0 + 10 +4950.000001 + 20 +9942.820322 + 30 +0.0 + 11 +4962.500001 + 21 +9964.470957 + 31 +0.0 + 0 +LINE + 5 +11A1 + 8 +0 + 62 + 0 + 10 +4987.500001 + 20 +10007.772227 + 30 +0.0 + 11 +5000.0 + 21 +10029.42286 + 31 +0.0 + 0 +LINE + 5 +11A2 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +9934.160065 + 30 +0.0 + 11 +4925.000002 + 21 +9942.820322 + 31 +0.0 + 0 +LINE + 5 +11A3 + 8 +0 + 62 + 0 + 10 +4950.000002 + 20 +9986.121592 + 30 +0.0 + 11 +4962.500002 + 21 +10007.772227 + 31 +0.0 + 0 +LINE + 5 +11A4 + 8 +0 + 62 + 0 + 10 +4987.500002 + 20 +10051.073498 + 30 +0.0 + 11 +5000.0 + 21 +10072.72413 + 31 +0.0 + 0 +LINE + 5 +11A5 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +9977.461335 + 30 +0.0 + 11 +4925.000002 + 21 +9986.121592 + 31 +0.0 + 0 +LINE + 5 +11A6 + 8 +0 + 62 + 0 + 10 +4950.000002 + 20 +10029.422862 + 30 +0.0 + 11 +4962.500002 + 21 +10051.073498 + 31 +0.0 + 0 +LINE + 5 +11A7 + 8 +0 + 62 + 0 + 10 +4987.500002 + 20 +10094.374768 + 30 +0.0 + 11 +5000.0 + 21 +10116.0254 + 31 +0.0 + 0 +LINE + 5 +11A8 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +10020.762605 + 30 +0.0 + 11 +4925.000002 + 21 +10029.422862 + 31 +0.0 + 0 +LINE + 5 +11A9 + 8 +0 + 62 + 0 + 10 +4950.000002 + 20 +10072.724133 + 30 +0.0 + 11 +4962.500002 + 21 +10094.374768 + 31 +0.0 + 0 +LINE + 5 +11AA + 8 +0 + 62 + 0 + 10 +4987.500002 + 20 +10137.676038 + 30 +0.0 + 11 +5000.0 + 21 +10159.32667 + 31 +0.0 + 0 +LINE + 5 +11AB + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +10064.063875 + 30 +0.0 + 11 +4925.000002 + 21 +10072.724133 + 31 +0.0 + 0 +LINE + 5 +11AC + 8 +0 + 62 + 0 + 10 +4950.000002 + 20 +10116.025403 + 30 +0.0 + 11 +4962.500002 + 21 +10137.676038 + 31 +0.0 + 0 +LINE + 5 +11AD + 8 +0 + 62 + 0 + 10 +4987.500002 + 20 +10180.977308 + 30 +0.0 + 11 +5000.0 + 21 +10202.62794 + 31 +0.0 + 0 +LINE + 5 +11AE + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +10107.365145 + 30 +0.0 + 11 +4925.000002 + 21 +10116.025403 + 31 +0.0 + 0 +LINE + 5 +11AF + 8 +0 + 62 + 0 + 10 +4950.000002 + 20 +10159.326673 + 30 +0.0 + 11 +4962.500002 + 21 +10180.977308 + 31 +0.0 + 0 +LINE + 5 +11B0 + 8 +0 + 62 + 0 + 10 +4987.500002 + 20 +10224.278578 + 30 +0.0 + 11 +5000.0 + 21 +10245.92921 + 31 +0.0 + 0 +LINE + 5 +11B1 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +10150.666415 + 30 +0.0 + 11 +4925.000002 + 21 +10159.326673 + 31 +0.0 + 0 +LINE + 5 +11B2 + 8 +0 + 62 + 0 + 10 +4950.000002 + 20 +10202.627943 + 30 +0.0 + 11 +4962.500002 + 21 +10224.278578 + 31 +0.0 + 0 +LINE + 5 +11B3 + 8 +0 + 62 + 0 + 10 +4987.500002 + 20 +10267.579848 + 30 +0.0 + 11 +5000.0 + 21 +10289.23048 + 31 +0.0 + 0 +LINE + 5 +11B4 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +10193.967685 + 30 +0.0 + 11 +4925.000002 + 21 +10202.627943 + 31 +0.0 + 0 +LINE + 5 +11B5 + 8 +0 + 62 + 0 + 10 +4950.000002 + 20 +10245.929213 + 30 +0.0 + 11 +4962.500002 + 21 +10267.579848 + 31 +0.0 + 0 +LINE + 5 +11B6 + 8 +0 + 62 + 0 + 10 +4987.500002 + 20 +10310.881118 + 30 +0.0 + 11 +5000.0 + 21 +10332.53175 + 31 +0.0 + 0 +LINE + 5 +11B7 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +10237.268955 + 30 +0.0 + 11 +4925.000002 + 21 +10245.929213 + 31 +0.0 + 0 +LINE + 5 +11B8 + 8 +0 + 62 + 0 + 10 +4950.000002 + 20 +10289.230483 + 30 +0.0 + 11 +4962.500002 + 21 +10310.881118 + 31 +0.0 + 0 +LINE + 5 +11B9 + 8 +0 + 62 + 0 + 10 +4987.500002 + 20 +10354.182389 + 30 +0.0 + 11 +5000.0 + 21 +10375.83302 + 31 +0.0 + 0 +LINE + 5 +11BA + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +10280.570225 + 30 +0.0 + 11 +4925.000002 + 21 +10289.230483 + 31 +0.0 + 0 +LINE + 5 +11BB + 8 +0 + 62 + 0 + 10 +4950.000002 + 20 +10332.531753 + 30 +0.0 + 11 +4962.500002 + 21 +10354.182389 + 31 +0.0 + 0 +LINE + 5 +11BC + 8 +0 + 62 + 0 + 10 +4987.500002 + 20 +10397.483659 + 30 +0.0 + 11 +5000.0 + 21 +10419.13429 + 31 +0.0 + 0 +LINE + 5 +11BD + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +10323.871495 + 30 +0.0 + 11 +4925.000002 + 21 +10332.531753 + 31 +0.0 + 0 +LINE + 5 +11BE + 8 +0 + 62 + 0 + 10 +4950.000002 + 20 +10375.833024 + 30 +0.0 + 11 +4962.500002 + 21 +10397.483659 + 31 +0.0 + 0 +LINE + 5 +11BF + 8 +0 + 62 + 0 + 10 +4987.500002 + 20 +10440.784929 + 30 +0.0 + 11 +5000.0 + 21 +10462.43556 + 31 +0.0 + 0 +LINE + 5 +11C0 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +10367.172765 + 30 +0.0 + 11 +4925.000002 + 21 +10375.833024 + 31 +0.0 + 0 +LINE + 5 +11C1 + 8 +0 + 62 + 0 + 10 +4950.000002 + 20 +10419.134294 + 30 +0.0 + 11 +4962.500002 + 21 +10440.784929 + 31 +0.0 + 0 +LINE + 5 +11C2 + 8 +0 + 62 + 0 + 10 +4987.500002 + 20 +10484.086199 + 30 +0.0 + 11 +5000.0 + 21 +10505.73683 + 31 +0.0 + 0 +LINE + 5 +11C3 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +10410.474035 + 30 +0.0 + 11 +4925.000002 + 21 +10419.134294 + 31 +0.0 + 0 +LINE + 5 +11C4 + 8 +0 + 62 + 0 + 10 +4950.000002 + 20 +10462.435564 + 30 +0.0 + 11 +4962.500002 + 21 +10484.086199 + 31 +0.0 + 0 +LINE + 5 +11C5 + 8 +0 + 62 + 0 + 10 +4987.500002 + 20 +10527.387469 + 30 +0.0 + 11 +5000.0 + 21 +10549.0381 + 31 +0.0 + 0 +LINE + 5 +11C6 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +10453.775305 + 30 +0.0 + 11 +4925.000003 + 21 +10462.435564 + 31 +0.0 + 0 +LINE + 5 +11C7 + 8 +0 + 62 + 0 + 10 +4950.000003 + 20 +10505.736834 + 30 +0.0 + 11 +4962.500003 + 21 +10527.387469 + 31 +0.0 + 0 +LINE + 5 +11C8 + 8 +0 + 62 + 0 + 10 +4987.500003 + 20 +10570.688739 + 30 +0.0 + 11 +5000.0 + 21 +10592.33937 + 31 +0.0 + 0 +LINE + 5 +11C9 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +10497.076575 + 30 +0.0 + 11 +4925.000003 + 21 +10505.736834 + 31 +0.0 + 0 +LINE + 5 +11CA + 8 +0 + 62 + 0 + 10 +4950.000003 + 20 +10549.038104 + 30 +0.0 + 11 +4962.500003 + 21 +10570.688739 + 31 +0.0 + 0 +LINE + 5 +11CB + 8 +0 + 62 + 0 + 10 +4987.500003 + 20 +10613.990009 + 30 +0.0 + 11 +5000.0 + 21 +10635.64064 + 31 +0.0 + 0 +LINE + 5 +11CC + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +10540.377845 + 30 +0.0 + 11 +4925.000003 + 21 +10549.038104 + 31 +0.0 + 0 +LINE + 5 +11CD + 8 +0 + 62 + 0 + 10 +4950.000003 + 20 +10592.339374 + 30 +0.0 + 11 +4962.500003 + 21 +10613.990009 + 31 +0.0 + 0 +LINE + 5 +11CE + 8 +0 + 62 + 0 + 10 +4987.500003 + 20 +10657.29128 + 30 +0.0 + 11 +5000.0 + 21 +10678.94191 + 31 +0.0 + 0 +LINE + 5 +11CF + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +10583.679115 + 30 +0.0 + 11 +4925.000003 + 21 +10592.339374 + 31 +0.0 + 0 +LINE + 5 +11D0 + 8 +0 + 62 + 0 + 10 +4950.000003 + 20 +10635.640644 + 30 +0.0 + 11 +4962.500003 + 21 +10657.29128 + 31 +0.0 + 0 +LINE + 5 +11D1 + 8 +0 + 62 + 0 + 10 +4987.500003 + 20 +10700.59255 + 30 +0.0 + 11 +5000.0 + 21 +10722.24318 + 31 +0.0 + 0 +LINE + 5 +11D2 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +10626.980385 + 30 +0.0 + 11 +4925.000003 + 21 +10635.640644 + 31 +0.0 + 0 +LINE + 5 +11D3 + 8 +0 + 62 + 0 + 10 +4950.000003 + 20 +10678.941915 + 30 +0.0 + 11 +4962.500003 + 21 +10700.59255 + 31 +0.0 + 0 +LINE + 5 +11D4 + 8 +0 + 62 + 0 + 10 +4987.500003 + 20 +10743.89382 + 30 +0.0 + 11 +5000.0 + 21 +10765.54445 + 31 +0.0 + 0 +LINE + 5 +11D5 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +10670.281655 + 30 +0.0 + 11 +4925.000003 + 21 +10678.941915 + 31 +0.0 + 0 +LINE + 5 +11D6 + 8 +0 + 62 + 0 + 10 +4950.000003 + 20 +10722.243185 + 30 +0.0 + 11 +4962.500003 + 21 +10743.89382 + 31 +0.0 + 0 +LINE + 5 +11D7 + 8 +0 + 62 + 0 + 10 +4987.500003 + 20 +10787.19509 + 30 +0.0 + 11 +5000.0 + 21 +10808.84572 + 31 +0.0 + 0 +LINE + 5 +11D8 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +10713.582925 + 30 +0.0 + 11 +4925.000003 + 21 +10722.243185 + 31 +0.0 + 0 +LINE + 5 +11D9 + 8 +0 + 62 + 0 + 10 +4950.000003 + 20 +10765.544455 + 30 +0.0 + 11 +4962.500003 + 21 +10787.19509 + 31 +0.0 + 0 +LINE + 5 +11DA + 8 +0 + 62 + 0 + 10 +4987.500003 + 20 +10830.49636 + 30 +0.0 + 11 +5000.0 + 21 +10852.14699 + 31 +0.0 + 0 +LINE + 5 +11DB + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +10756.884195 + 30 +0.0 + 11 +4925.000003 + 21 +10765.544455 + 31 +0.0 + 0 +LINE + 5 +11DC + 8 +0 + 62 + 0 + 10 +4950.000003 + 20 +10808.845725 + 30 +0.0 + 11 +4962.500003 + 21 +10830.49636 + 31 +0.0 + 0 +LINE + 5 +11DD + 8 +0 + 62 + 0 + 10 +4987.500003 + 20 +10873.79763 + 30 +0.0 + 11 +5000.0 + 21 +10895.44826 + 31 +0.0 + 0 +LINE + 5 +11DE + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +10800.185465 + 30 +0.0 + 11 +4925.000003 + 21 +10808.845725 + 31 +0.0 + 0 +LINE + 5 +11DF + 8 +0 + 62 + 0 + 10 +4950.000003 + 20 +10852.146995 + 30 +0.0 + 11 +4962.500003 + 21 +10873.79763 + 31 +0.0 + 0 +LINE + 5 +11E0 + 8 +0 + 62 + 0 + 10 +4987.500003 + 20 +10917.0989 + 30 +0.0 + 11 +5000.0 + 21 +10938.74953 + 31 +0.0 + 0 +LINE + 5 +11E1 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +10843.486735 + 30 +0.0 + 11 +4925.000003 + 21 +10852.146995 + 31 +0.0 + 0 +LINE + 5 +11E2 + 8 +0 + 62 + 0 + 10 +4950.000003 + 20 +10895.448265 + 30 +0.0 + 11 +4962.500003 + 21 +10917.0989 + 31 +0.0 + 0 +LINE + 5 +11E3 + 8 +0 + 62 + 0 + 10 +4987.500003 + 20 +10960.400171 + 30 +0.0 + 11 +5000.0 + 21 +10982.0508 + 31 +0.0 + 0 +LINE + 5 +11E4 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +10886.788005 + 30 +0.0 + 11 +4925.000003 + 21 +10895.448265 + 31 +0.0 + 0 +LINE + 5 +11E5 + 8 +0 + 62 + 0 + 10 +4950.000003 + 20 +10938.749535 + 30 +0.0 + 11 +4962.500003 + 21 +10960.400171 + 31 +0.0 + 0 +LINE + 5 +11E6 + 8 +0 + 62 + 0 + 10 +4987.500003 + 20 +11003.701441 + 30 +0.0 + 11 +5000.0 + 21 +11025.35207 + 31 +0.0 + 0 +LINE + 5 +11E7 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +10930.089275 + 30 +0.0 + 11 +4925.000003 + 21 +10938.749535 + 31 +0.0 + 0 +LINE + 5 +11E8 + 8 +0 + 62 + 0 + 10 +4950.000003 + 20 +10982.050806 + 30 +0.0 + 11 +4962.500003 + 21 +11003.701441 + 31 +0.0 + 0 +LINE + 5 +11E9 + 8 +0 + 62 + 0 + 10 +4987.500003 + 20 +11047.002711 + 30 +0.0 + 11 +5000.0 + 21 +11068.65334 + 31 +0.0 + 0 +LINE + 5 +11EA + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +10973.390545 + 30 +0.0 + 11 +4925.000004 + 21 +10982.050806 + 31 +0.0 + 0 +LINE + 5 +11EB + 8 +0 + 62 + 0 + 10 +4950.000004 + 20 +11025.352076 + 30 +0.0 + 11 +4962.500004 + 21 +11047.002711 + 31 +0.0 + 0 +LINE + 5 +11EC + 8 +0 + 62 + 0 + 10 +4987.500004 + 20 +11090.303981 + 30 +0.0 + 11 +5000.0 + 21 +11111.95461 + 31 +0.0 + 0 +LINE + 5 +11ED + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +11016.691815 + 30 +0.0 + 11 +4925.000004 + 21 +11025.352076 + 31 +0.0 + 0 +LINE + 5 +11EE + 8 +0 + 62 + 0 + 10 +4950.000004 + 20 +11068.653346 + 30 +0.0 + 11 +4962.500004 + 21 +11090.303981 + 31 +0.0 + 0 +LINE + 5 +11EF + 8 +0 + 62 + 0 + 10 +4987.500004 + 20 +11133.605251 + 30 +0.0 + 11 +5000.0 + 21 +11155.25588 + 31 +0.0 + 0 +LINE + 5 +11F0 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +11059.993085 + 30 +0.0 + 11 +4925.000004 + 21 +11068.653346 + 31 +0.0 + 0 +LINE + 5 +11F1 + 8 +0 + 62 + 0 + 10 +4950.000004 + 20 +11111.954616 + 30 +0.0 + 11 +4962.500004 + 21 +11133.605251 + 31 +0.0 + 0 +LINE + 5 +11F2 + 8 +0 + 62 + 0 + 10 +4987.500004 + 20 +11176.906521 + 30 +0.0 + 11 +5000.0 + 21 +11198.55715 + 31 +0.0 + 0 +LINE + 5 +11F3 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +11103.294355 + 30 +0.0 + 11 +4925.000004 + 21 +11111.954616 + 31 +0.0 + 0 +LINE + 5 +11F4 + 8 +0 + 62 + 0 + 10 +4950.000004 + 20 +11155.255886 + 30 +0.0 + 11 +4962.500004 + 21 +11176.906521 + 31 +0.0 + 0 +LINE + 5 +11F5 + 8 +0 + 62 + 0 + 10 +4987.500004 + 20 +11220.207791 + 30 +0.0 + 11 +5000.0 + 21 +11241.85842 + 31 +0.0 + 0 +LINE + 5 +11F6 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +11146.595625 + 30 +0.0 + 11 +4925.000004 + 21 +11155.255886 + 31 +0.0 + 0 +LINE + 5 +11F7 + 8 +0 + 62 + 0 + 10 +4950.000004 + 20 +11198.557156 + 30 +0.0 + 11 +4962.500004 + 21 +11220.207791 + 31 +0.0 + 0 +LINE + 5 +11F8 + 8 +0 + 62 + 0 + 10 +4987.500004 + 20 +11263.509062 + 30 +0.0 + 11 +5000.0 + 21 +11285.15969 + 31 +0.0 + 0 +LINE + 5 +11F9 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +11189.896895 + 30 +0.0 + 11 +4925.000004 + 21 +11198.557156 + 31 +0.0 + 0 +LINE + 5 +11FA + 8 +0 + 62 + 0 + 10 +4950.000004 + 20 +11241.858426 + 30 +0.0 + 11 +4962.500004 + 21 +11263.509062 + 31 +0.0 + 0 +LINE + 5 +11FB + 8 +0 + 62 + 0 + 10 +4987.500004 + 20 +11306.810332 + 30 +0.0 + 11 +5000.0 + 21 +11328.46096 + 31 +0.0 + 0 +LINE + 5 +11FC + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +11233.198165 + 30 +0.0 + 11 +4925.000004 + 21 +11241.858426 + 31 +0.0 + 0 +LINE + 5 +11FD + 8 +0 + 62 + 0 + 10 +4950.000004 + 20 +11285.159697 + 30 +0.0 + 11 +4962.500004 + 21 +11306.810332 + 31 +0.0 + 0 +LINE + 5 +11FE + 8 +0 + 62 + 0 + 10 +4987.500004 + 20 +11350.111602 + 30 +0.0 + 11 +5000.0 + 21 +11371.76223 + 31 +0.0 + 0 +LINE + 5 +11FF + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +11276.499435 + 30 +0.0 + 11 +4925.000004 + 21 +11285.159697 + 31 +0.0 + 0 +LINE + 5 +1200 + 8 +0 + 62 + 0 + 10 +4950.000004 + 20 +11328.460967 + 30 +0.0 + 11 +4962.500004 + 21 +11350.111602 + 31 +0.0 + 0 +LINE + 5 +1201 + 8 +0 + 62 + 0 + 10 +4987.500004 + 20 +11393.412872 + 30 +0.0 + 11 +5000.0 + 21 +11415.0635 + 31 +0.0 + 0 +LINE + 5 +1202 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +11319.800705 + 30 +0.0 + 11 +4925.000004 + 21 +11328.460967 + 31 +0.0 + 0 +LINE + 5 +1203 + 8 +0 + 62 + 0 + 10 +4950.000004 + 20 +11371.762237 + 30 +0.0 + 11 +4962.500004 + 21 +11393.412872 + 31 +0.0 + 0 +LINE + 5 +1204 + 8 +0 + 62 + 0 + 10 +4987.500004 + 20 +11436.714142 + 30 +0.0 + 11 +5000.0 + 21 +11458.36477 + 31 +0.0 + 0 +LINE + 5 +1205 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +11363.101975 + 30 +0.0 + 11 +4925.000004 + 21 +11371.762237 + 31 +0.0 + 0 +LINE + 5 +1206 + 8 +0 + 62 + 0 + 10 +4950.000004 + 20 +11415.063507 + 30 +0.0 + 11 +4962.500004 + 21 +11436.714142 + 31 +0.0 + 0 +LINE + 5 +1207 + 8 +0 + 62 + 0 + 10 +4987.500004 + 20 +11480.015412 + 30 +0.0 + 11 +5000.0 + 21 +11501.66604 + 31 +0.0 + 0 +LINE + 5 +1208 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +11406.403245 + 30 +0.0 + 11 +4925.000004 + 21 +11415.063507 + 31 +0.0 + 0 +LINE + 5 +1209 + 8 +0 + 62 + 0 + 10 +4950.000004 + 20 +11458.364777 + 30 +0.0 + 11 +4962.500004 + 21 +11480.015412 + 31 +0.0 + 0 +LINE + 5 +120A + 8 +0 + 62 + 0 + 10 +4987.500004 + 20 +11523.316682 + 30 +0.0 + 11 +5000.0 + 21 +11544.96731 + 31 +0.0 + 0 +LINE + 5 +120B + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +11449.704515 + 30 +0.0 + 11 +4925.000004 + 21 +11458.364777 + 31 +0.0 + 0 +LINE + 5 +120C + 8 +0 + 62 + 0 + 10 +4950.000004 + 20 +11501.666047 + 30 +0.0 + 11 +4962.500004 + 21 +11523.316682 + 31 +0.0 + 0 +LINE + 5 +120D + 8 +0 + 62 + 0 + 10 +4987.500004 + 20 +11566.617953 + 30 +0.0 + 11 +5000.0 + 21 +11588.26858 + 31 +0.0 + 0 +LINE + 5 +120E + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +11493.005785 + 30 +0.0 + 11 +4925.000005 + 21 +11501.666047 + 31 +0.0 + 0 +LINE + 5 +120F + 8 +0 + 62 + 0 + 10 +4950.000005 + 20 +11544.967317 + 30 +0.0 + 11 +4962.500005 + 21 +11566.617953 + 31 +0.0 + 0 +LINE + 5 +1210 + 8 +0 + 62 + 0 + 10 +4987.500005 + 20 +11609.919223 + 30 +0.0 + 11 +5000.0 + 21 +11631.56985 + 31 +0.0 + 0 +LINE + 5 +1211 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +11536.307055 + 30 +0.0 + 11 +4925.000005 + 21 +11544.967317 + 31 +0.0 + 0 +LINE + 5 +1212 + 8 +0 + 62 + 0 + 10 +4950.000005 + 20 +11588.268588 + 30 +0.0 + 11 +4962.500005 + 21 +11609.919223 + 31 +0.0 + 0 +LINE + 5 +1213 + 8 +0 + 62 + 0 + 10 +4987.500005 + 20 +11653.220493 + 30 +0.0 + 11 +5000.0 + 21 +11674.87112 + 31 +0.0 + 0 +LINE + 5 +1214 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +11579.608325 + 30 +0.0 + 11 +4925.000005 + 21 +11588.268588 + 31 +0.0 + 0 +LINE + 5 +1215 + 8 +0 + 62 + 0 + 10 +4950.000005 + 20 +11631.569858 + 30 +0.0 + 11 +4962.500005 + 21 +11653.220493 + 31 +0.0 + 0 +LINE + 5 +1216 + 8 +0 + 62 + 0 + 10 +4987.500005 + 20 +11696.521763 + 30 +0.0 + 11 +5000.0 + 21 +11718.17239 + 31 +0.0 + 0 +LINE + 5 +1217 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +11622.909595 + 30 +0.0 + 11 +4925.000005 + 21 +11631.569858 + 31 +0.0 + 0 +LINE + 5 +1218 + 8 +0 + 62 + 0 + 10 +4950.000005 + 20 +11674.871128 + 30 +0.0 + 11 +4962.500005 + 21 +11696.521763 + 31 +0.0 + 0 +LINE + 5 +1219 + 8 +0 + 62 + 0 + 10 +4987.500005 + 20 +11739.823033 + 30 +0.0 + 11 +5000.0 + 21 +11761.47366 + 31 +0.0 + 0 +LINE + 5 +121A + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +11666.210865 + 30 +0.0 + 11 +4925.000005 + 21 +11674.871128 + 31 +0.0 + 0 +LINE + 5 +121B + 8 +0 + 62 + 0 + 10 +4950.000005 + 20 +11718.172398 + 30 +0.0 + 11 +4962.500005 + 21 +11739.823033 + 31 +0.0 + 0 +LINE + 5 +121C + 8 +0 + 62 + 0 + 10 +4987.500005 + 20 +11783.124303 + 30 +0.0 + 11 +5000.0 + 21 +11804.77493 + 31 +0.0 + 0 +LINE + 5 +121D + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +11709.512135 + 30 +0.0 + 11 +4925.000005 + 21 +11718.172398 + 31 +0.0 + 0 +LINE + 5 +121E + 8 +0 + 62 + 0 + 10 +4950.000005 + 20 +11761.473668 + 30 +0.0 + 11 +4962.500005 + 21 +11783.124303 + 31 +0.0 + 0 +LINE + 5 +121F + 8 +0 + 62 + 0 + 10 +4987.500005 + 20 +11826.425573 + 30 +0.0 + 11 +5000.0 + 21 +11848.0762 + 31 +0.0 + 0 +LINE + 5 +1220 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +11752.813405 + 30 +0.0 + 11 +4925.000005 + 21 +11761.473668 + 31 +0.0 + 0 +LINE + 5 +1221 + 8 +0 + 62 + 0 + 10 +4950.000005 + 20 +11804.774938 + 30 +0.0 + 11 +4962.500005 + 21 +11826.425573 + 31 +0.0 + 0 +LINE + 5 +1222 + 8 +0 + 62 + 0 + 10 +4987.500005 + 20 +11869.726844 + 30 +0.0 + 11 +5000.0 + 21 +11891.37747 + 31 +0.0 + 0 +LINE + 5 +1223 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +11796.114675 + 30 +0.0 + 11 +4925.000005 + 21 +11804.774938 + 31 +0.0 + 0 +LINE + 5 +1224 + 8 +0 + 62 + 0 + 10 +4950.000005 + 20 +11848.076208 + 30 +0.0 + 11 +4962.500005 + 21 +11869.726844 + 31 +0.0 + 0 +LINE + 5 +1225 + 8 +0 + 62 + 0 + 10 +4987.500005 + 20 +11913.028114 + 30 +0.0 + 11 +5000.0 + 21 +11934.67874 + 31 +0.0 + 0 +LINE + 5 +1226 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +11839.415945 + 30 +0.0 + 11 +4925.000005 + 21 +11848.076208 + 31 +0.0 + 0 +LINE + 5 +1227 + 8 +0 + 62 + 0 + 10 +4950.000005 + 20 +11891.377479 + 30 +0.0 + 11 +4962.500005 + 21 +11913.028114 + 31 +0.0 + 0 +LINE + 5 +1228 + 8 +0 + 62 + 0 + 10 +4987.500005 + 20 +11956.329384 + 30 +0.0 + 11 +5000.0 + 21 +11977.98001 + 31 +0.0 + 0 +LINE + 5 +1229 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +11882.717215 + 30 +0.0 + 11 +4925.000005 + 21 +11891.377479 + 31 +0.0 + 0 +LINE + 5 +122A + 8 +0 + 62 + 0 + 10 +4950.000005 + 20 +11934.678749 + 30 +0.0 + 11 +4962.500005 + 21 +11956.329384 + 31 +0.0 + 0 +LINE + 5 +122B + 8 +0 + 62 + 0 + 10 +4987.500005 + 20 +11999.630654 + 30 +0.0 + 11 +5000.0 + 21 +12021.28128 + 31 +0.0 + 0 +LINE + 5 +122C + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +11926.018485 + 30 +0.0 + 11 +4925.000005 + 21 +11934.678749 + 31 +0.0 + 0 +LINE + 5 +122D + 8 +0 + 62 + 0 + 10 +4950.000005 + 20 +11977.980019 + 30 +0.0 + 11 +4962.500005 + 21 +11999.630654 + 31 +0.0 + 0 +LINE + 5 +122E + 8 +0 + 62 + 0 + 10 +4987.500005 + 20 +12042.931924 + 30 +0.0 + 11 +5000.0 + 21 +12064.58255 + 31 +0.0 + 0 +LINE + 5 +122F + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +11969.319755 + 30 +0.0 + 11 +4925.000005 + 21 +11977.980019 + 31 +0.0 + 0 +LINE + 5 +1230 + 8 +0 + 62 + 0 + 10 +4950.000005 + 20 +12021.281289 + 30 +0.0 + 11 +4962.500005 + 21 +12042.931924 + 31 +0.0 + 0 +LINE + 5 +1231 + 8 +0 + 62 + 0 + 10 +4987.500005 + 20 +12086.233194 + 30 +0.0 + 11 +5000.0 + 21 +12107.88382 + 31 +0.0 + 0 +LINE + 5 +1232 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +12012.621025 + 30 +0.0 + 11 +4925.000005 + 21 +12021.281289 + 31 +0.0 + 0 +LINE + 5 +1233 + 8 +0 + 62 + 0 + 10 +4950.000005 + 20 +12064.582559 + 30 +0.0 + 11 +4962.500005 + 21 +12086.233194 + 31 +0.0 + 0 +LINE + 5 +1234 + 8 +0 + 62 + 0 + 10 +4987.500005 + 20 +12129.534464 + 30 +0.0 + 11 +5000.0 + 21 +12151.18509 + 31 +0.0 + 0 +LINE + 5 +1235 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +12055.922295 + 30 +0.0 + 11 +4925.000006 + 21 +12064.582559 + 31 +0.0 + 0 +LINE + 5 +1236 + 8 +0 + 62 + 0 + 10 +4950.000006 + 20 +12107.883829 + 30 +0.0 + 11 +4962.500006 + 21 +12129.534464 + 31 +0.0 + 0 +LINE + 5 +1237 + 8 +0 + 62 + 0 + 10 +4987.500006 + 20 +12172.835735 + 30 +0.0 + 11 +5000.0 + 21 +12194.48636 + 31 +0.0 + 0 +LINE + 5 +1238 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +12099.223565 + 30 +0.0 + 11 +4925.000006 + 21 +12107.883829 + 31 +0.0 + 0 +LINE + 5 +1239 + 8 +0 + 62 + 0 + 10 +4950.000006 + 20 +12151.185099 + 30 +0.0 + 11 +4962.500006 + 21 +12172.835735 + 31 +0.0 + 0 +LINE + 5 +123A + 8 +0 + 62 + 0 + 10 +4987.500006 + 20 +12216.137005 + 30 +0.0 + 11 +5000.0 + 21 +12237.78763 + 31 +0.0 + 0 +LINE + 5 +123B + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +12142.524835 + 30 +0.0 + 11 +4925.000006 + 21 +12151.185099 + 31 +0.0 + 0 +LINE + 5 +123C + 8 +0 + 62 + 0 + 10 +4950.000006 + 20 +12194.48637 + 30 +0.0 + 11 +4962.500006 + 21 +12216.137005 + 31 +0.0 + 0 +LINE + 5 +123D + 8 +0 + 62 + 0 + 10 +4987.500006 + 20 +12259.438275 + 30 +0.0 + 11 +5000.0 + 21 +12281.0889 + 31 +0.0 + 0 +LINE + 5 +123E + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +12185.826105 + 30 +0.0 + 11 +4925.000006 + 21 +12194.48637 + 31 +0.0 + 0 +LINE + 5 +123F + 8 +0 + 62 + 0 + 10 +4950.000006 + 20 +12237.78764 + 30 +0.0 + 11 +4962.500006 + 21 +12259.438275 + 31 +0.0 + 0 +LINE + 5 +1240 + 8 +0 + 62 + 0 + 10 +4987.500006 + 20 +12302.739545 + 30 +0.0 + 11 +5000.0 + 21 +12324.39017 + 31 +0.0 + 0 +LINE + 5 +1241 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +12229.127375 + 30 +0.0 + 11 +4925.000006 + 21 +12237.78764 + 31 +0.0 + 0 +LINE + 5 +1242 + 8 +0 + 62 + 0 + 10 +4950.000006 + 20 +12281.08891 + 30 +0.0 + 11 +4962.500006 + 21 +12302.739545 + 31 +0.0 + 0 +LINE + 5 +1243 + 8 +0 + 62 + 0 + 10 +4987.500006 + 20 +12346.040815 + 30 +0.0 + 11 +5000.0 + 21 +12367.69144 + 31 +0.0 + 0 +LINE + 5 +1244 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +12272.428645 + 30 +0.0 + 11 +4925.000006 + 21 +12281.08891 + 31 +0.0 + 0 +LINE + 5 +1245 + 8 +0 + 62 + 0 + 10 +4950.000006 + 20 +12324.39018 + 30 +0.0 + 11 +4962.500006 + 21 +12346.040815 + 31 +0.0 + 0 +LINE + 5 +1246 + 8 +0 + 62 + 0 + 10 +4987.500006 + 20 +12389.342085 + 30 +0.0 + 11 +5000.0 + 21 +12410.99271 + 31 +0.0 + 0 +LINE + 5 +1247 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +12315.729915 + 30 +0.0 + 11 +4925.000006 + 21 +12324.39018 + 31 +0.0 + 0 +LINE + 5 +1248 + 8 +0 + 62 + 0 + 10 +4950.000006 + 20 +12367.69145 + 30 +0.0 + 11 +4962.500006 + 21 +12389.342085 + 31 +0.0 + 0 +LINE + 5 +1249 + 8 +0 + 62 + 0 + 10 +4987.500006 + 20 +12432.643355 + 30 +0.0 + 11 +5000.0 + 21 +12454.29398 + 31 +0.0 + 0 +LINE + 5 +124A + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +12359.031185 + 30 +0.0 + 11 +4925.000006 + 21 +12367.69145 + 31 +0.0 + 0 +LINE + 5 +124B + 8 +0 + 62 + 0 + 10 +4950.000006 + 20 +12410.99272 + 30 +0.0 + 11 +4962.500006 + 21 +12432.643355 + 31 +0.0 + 0 +LINE + 5 +124C + 8 +0 + 62 + 0 + 10 +4987.500006 + 20 +12475.944626 + 30 +0.0 + 11 +5000.0 + 21 +12497.59525 + 31 +0.0 + 0 +LINE + 5 +124D + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +12402.332455 + 30 +0.0 + 11 +4925.000006 + 21 +12410.99272 + 31 +0.0 + 0 +LINE + 5 +124E + 8 +0 + 62 + 0 + 10 +4950.000006 + 20 +12454.29399 + 30 +0.0 + 11 +4962.500006 + 21 +12475.944626 + 31 +0.0 + 0 +LINE + 5 +124F + 8 +0 + 62 + 0 + 10 +4987.500006 + 20 +12519.245896 + 30 +0.0 + 11 +5000.0 + 21 +12540.89652 + 31 +0.0 + 0 +LINE + 5 +1250 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +12445.633725 + 30 +0.0 + 11 +4925.000006 + 21 +12454.29399 + 31 +0.0 + 0 +LINE + 5 +1251 + 8 +0 + 62 + 0 + 10 +4950.000006 + 20 +12497.595261 + 30 +0.0 + 11 +4962.500006 + 21 +12519.245896 + 31 +0.0 + 0 +LINE + 5 +1252 + 8 +0 + 62 + 0 + 10 +4987.500006 + 20 +12562.547166 + 30 +0.0 + 11 +5000.0 + 21 +12584.19779 + 31 +0.0 + 0 +LINE + 5 +1253 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +12488.934995 + 30 +0.0 + 11 +4925.000006 + 21 +12497.595261 + 31 +0.0 + 0 +LINE + 5 +1254 + 8 +0 + 62 + 0 + 10 +4950.000006 + 20 +12540.896531 + 30 +0.0 + 11 +4962.500006 + 21 +12562.547166 + 31 +0.0 + 0 +LINE + 5 +1255 + 8 +0 + 62 + 0 + 10 +4987.500006 + 20 +12605.848436 + 30 +0.0 + 11 +5000.0 + 21 +12627.49906 + 31 +0.0 + 0 +LINE + 5 +1256 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +12532.236265 + 30 +0.0 + 11 +4925.000006 + 21 +12540.896531 + 31 +0.0 + 0 +LINE + 5 +1257 + 8 +0 + 62 + 0 + 10 +4950.000006 + 20 +12584.197801 + 30 +0.0 + 11 +4962.500006 + 21 +12605.848436 + 31 +0.0 + 0 +LINE + 5 +1258 + 8 +0 + 62 + 0 + 10 +4987.500006 + 20 +12649.149706 + 30 +0.0 + 11 +5000.0 + 21 +12670.80033 + 31 +0.0 + 0 +LINE + 5 +1259 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +12575.537535 + 30 +0.0 + 11 +4925.000007 + 21 +12584.197801 + 31 +0.0 + 0 +LINE + 5 +125A + 8 +0 + 62 + 0 + 10 +4950.000007 + 20 +12627.499071 + 30 +0.0 + 11 +4962.500007 + 21 +12649.149706 + 31 +0.0 + 0 +LINE + 5 +125B + 8 +0 + 62 + 0 + 10 +4987.500007 + 20 +12692.450976 + 30 +0.0 + 11 +5000.0 + 21 +12714.1016 + 31 +0.0 + 0 +LINE + 5 +125C + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +12618.838805 + 30 +0.0 + 11 +4925.000007 + 21 +12627.499071 + 31 +0.0 + 0 +LINE + 5 +125D + 8 +0 + 62 + 0 + 10 +4950.000007 + 20 +12670.800341 + 30 +0.0 + 11 +4962.500007 + 21 +12692.450976 + 31 +0.0 + 0 +LINE + 5 +125E + 8 +0 + 62 + 0 + 10 +4987.500007 + 20 +12735.752246 + 30 +0.0 + 11 +5000.0 + 21 +12757.40287 + 31 +0.0 + 0 +LINE + 5 +125F + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +12662.140075 + 30 +0.0 + 11 +4925.000007 + 21 +12670.800341 + 31 +0.0 + 0 +LINE + 5 +1260 + 8 +0 + 62 + 0 + 10 +4950.000007 + 20 +12714.101611 + 30 +0.0 + 11 +4962.500007 + 21 +12735.752246 + 31 +0.0 + 0 +LINE + 5 +1261 + 8 +0 + 62 + 0 + 10 +4987.500007 + 20 +12779.053517 + 30 +0.0 + 11 +5000.0 + 21 +12800.70414 + 31 +0.0 + 0 +LINE + 5 +1262 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +12705.441345 + 30 +0.0 + 11 +4925.000007 + 21 +12714.101611 + 31 +0.0 + 0 +LINE + 5 +1263 + 8 +0 + 62 + 0 + 10 +4950.000007 + 20 +12757.402881 + 30 +0.0 + 11 +4962.500007 + 21 +12779.053516 + 31 +0.0 + 0 +LINE + 5 +1264 + 8 +0 + 62 + 0 + 10 +4987.500007 + 20 +12822.354787 + 30 +0.0 + 11 +5000.0 + 21 +12844.00541 + 31 +0.0 + 0 +LINE + 5 +1265 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +12748.742615 + 30 +0.0 + 11 +4925.000007 + 21 +12757.402881 + 31 +0.0 + 0 +LINE + 5 +1266 + 8 +0 + 62 + 0 + 10 +4950.000007 + 20 +12800.704152 + 30 +0.0 + 11 +4962.500007 + 21 +12822.354787 + 31 +0.0 + 0 +LINE + 5 +1267 + 8 +0 + 62 + 0 + 10 +4987.500007 + 20 +12865.656057 + 30 +0.0 + 11 +5000.0 + 21 +12887.30668 + 31 +0.0 + 0 +LINE + 5 +1268 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +12792.043885 + 30 +0.0 + 11 +4925.000007 + 21 +12800.704151 + 31 +0.0 + 0 +LINE + 5 +1269 + 8 +0 + 62 + 0 + 10 +4950.000007 + 20 +12844.005422 + 30 +0.0 + 11 +4962.500007 + 21 +12865.656057 + 31 +0.0 + 0 +LINE + 5 +126A + 8 +0 + 62 + 0 + 10 +4987.500007 + 20 +12908.957327 + 30 +0.0 + 11 +5000.0 + 21 +12930.60795 + 31 +0.0 + 0 +LINE + 5 +126B + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +12835.345155 + 30 +0.0 + 11 +4925.000007 + 21 +12844.005422 + 31 +0.0 + 0 +LINE + 5 +126C + 8 +0 + 62 + 0 + 10 +4950.000007 + 20 +12887.306692 + 30 +0.0 + 11 +4962.500007 + 21 +12908.957327 + 31 +0.0 + 0 +LINE + 5 +126D + 8 +0 + 62 + 0 + 10 +4987.500007 + 20 +12952.258597 + 30 +0.0 + 11 +5000.0 + 21 +12973.90922 + 31 +0.0 + 0 +LINE + 5 +126E + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +12878.646425 + 30 +0.0 + 11 +4925.000007 + 21 +12887.306692 + 31 +0.0 + 0 +LINE + 5 +126F + 8 +0 + 62 + 0 + 10 +4950.000007 + 20 +12930.607962 + 30 +0.0 + 11 +4962.500007 + 21 +12952.258597 + 31 +0.0 + 0 +LINE + 5 +1270 + 8 +0 + 62 + 0 + 10 +4987.500007 + 20 +12995.559867 + 30 +0.0 + 11 +5000.0 + 21 +13017.21049 + 31 +0.0 + 0 +LINE + 5 +1271 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +12921.947695 + 30 +0.0 + 11 +4925.000007 + 21 +12930.607962 + 31 +0.0 + 0 +LINE + 5 +1272 + 8 +0 + 62 + 0 + 10 +4950.000007 + 20 +12973.909232 + 30 +0.0 + 11 +4962.500007 + 21 +12995.559867 + 31 +0.0 + 0 +LINE + 5 +1273 + 8 +0 + 62 + 0 + 10 +4987.500007 + 20 +13038.861137 + 30 +0.0 + 11 +5000.0 + 21 +13060.51176 + 31 +0.0 + 0 +LINE + 5 +1274 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +12965.248965 + 30 +0.0 + 11 +4925.000007 + 21 +12973.909232 + 31 +0.0 + 0 +LINE + 5 +1275 + 8 +0 + 62 + 0 + 10 +4950.000007 + 20 +13017.210502 + 30 +0.0 + 11 +4962.500007 + 21 +13038.861137 + 31 +0.0 + 0 +LINE + 5 +1276 + 8 +0 + 62 + 0 + 10 +4987.500007 + 20 +13082.162408 + 30 +0.0 + 11 +5000.0 + 21 +13103.81303 + 31 +0.0 + 0 +LINE + 5 +1277 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +13008.550235 + 30 +0.0 + 11 +4925.000007 + 21 +13017.210502 + 31 +0.0 + 0 +LINE + 5 +1278 + 8 +0 + 62 + 0 + 10 +4950.000007 + 20 +13060.511772 + 30 +0.0 + 11 +4962.500007 + 21 +13082.162407 + 31 +0.0 + 0 +LINE + 5 +1279 + 8 +0 + 62 + 0 + 10 +4987.500007 + 20 +13125.463678 + 30 +0.0 + 11 +5000.0 + 21 +13147.1143 + 31 +0.0 + 0 +LINE + 5 +127A + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +13051.851505 + 30 +0.0 + 11 +4925.000007 + 21 +13060.511772 + 31 +0.0 + 0 +LINE + 5 +127B + 8 +0 + 62 + 0 + 10 +4950.000007 + 20 +13103.813043 + 30 +0.0 + 11 +4962.500007 + 21 +13125.463678 + 31 +0.0 + 0 +LINE + 5 +127C + 8 +0 + 62 + 0 + 10 +4987.500007 + 20 +13168.764948 + 30 +0.0 + 11 +5000.0 + 21 +13190.41557 + 31 +0.0 + 0 +LINE + 5 +127D + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +13095.152775 + 30 +0.0 + 11 +4925.000008 + 21 +13103.813042 + 31 +0.0 + 0 +LINE + 5 +127E + 8 +0 + 62 + 0 + 10 +4950.000008 + 20 +13147.114313 + 30 +0.0 + 11 +4962.500008 + 21 +13168.764948 + 31 +0.0 + 0 +LINE + 5 +127F + 8 +0 + 62 + 0 + 10 +4987.500008 + 20 +13212.066218 + 30 +0.0 + 11 +5000.0 + 21 +13233.71684 + 31 +0.0 + 0 +LINE + 5 +1280 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +13138.454045 + 30 +0.0 + 11 +4925.000008 + 21 +13147.114313 + 31 +0.0 + 0 +LINE + 5 +1281 + 8 +0 + 62 + 0 + 10 +4950.000008 + 20 +13190.415583 + 30 +0.0 + 11 +4962.500008 + 21 +13212.066218 + 31 +0.0 + 0 +LINE + 5 +1282 + 8 +0 + 62 + 0 + 10 +4987.500008 + 20 +13255.367488 + 30 +0.0 + 11 +5000.0 + 21 +13277.01811 + 31 +0.0 + 0 +LINE + 5 +1283 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +13181.755315 + 30 +0.0 + 11 +4925.000008 + 21 +13190.415583 + 31 +0.0 + 0 +LINE + 5 +1284 + 8 +0 + 62 + 0 + 10 +4950.000008 + 20 +13233.716853 + 30 +0.0 + 11 +4962.500008 + 21 +13255.367488 + 31 +0.0 + 0 +LINE + 5 +1285 + 8 +0 + 62 + 0 + 10 +4987.500008 + 20 +13298.668758 + 30 +0.0 + 11 +5000.0 + 21 +13320.31938 + 31 +0.0 + 0 +LINE + 5 +1286 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +13225.056585 + 30 +0.0 + 11 +4925.000008 + 21 +13233.716853 + 31 +0.0 + 0 +LINE + 5 +1287 + 8 +0 + 62 + 0 + 10 +4950.000008 + 20 +13277.018123 + 30 +0.0 + 11 +4962.500008 + 21 +13298.668758 + 31 +0.0 + 0 +LINE + 5 +1288 + 8 +0 + 62 + 0 + 10 +4987.500008 + 20 +13341.970028 + 30 +0.0 + 11 +5000.0 + 21 +13363.62065 + 31 +0.0 + 0 +LINE + 5 +1289 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +13268.357855 + 30 +0.0 + 11 +4925.000008 + 21 +13277.018123 + 31 +0.0 + 0 +LINE + 5 +128A + 8 +0 + 62 + 0 + 10 +4950.000008 + 20 +13320.319393 + 30 +0.0 + 11 +4962.500008 + 21 +13341.970028 + 31 +0.0 + 0 +LINE + 5 +128B + 8 +0 + 62 + 0 + 10 +4987.500008 + 20 +13385.271299 + 30 +0.0 + 11 +5000.0 + 21 +13406.92192 + 31 +0.0 + 0 +LINE + 5 +128C + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +13311.659125 + 30 +0.0 + 11 +4925.000008 + 21 +13320.319393 + 31 +0.0 + 0 +LINE + 5 +128D + 8 +0 + 62 + 0 + 10 +4950.000008 + 20 +13363.620663 + 30 +0.0 + 11 +4962.500008 + 21 +13385.271298 + 31 +0.0 + 0 +LINE + 5 +128E + 8 +0 + 62 + 0 + 10 +4987.500008 + 20 +13428.572569 + 30 +0.0 + 11 +5000.0 + 21 +13450.22319 + 31 +0.0 + 0 +LINE + 5 +128F + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +13354.960395 + 30 +0.0 + 11 +4925.000008 + 21 +13363.620663 + 31 +0.0 + 0 +LINE + 5 +1290 + 8 +0 + 62 + 0 + 10 +4950.000008 + 20 +13406.921934 + 30 +0.0 + 11 +4962.500008 + 21 +13428.572569 + 31 +0.0 + 0 +LINE + 5 +1291 + 8 +0 + 62 + 0 + 10 +4987.500008 + 20 +13471.873839 + 30 +0.0 + 11 +5000.0 + 21 +13493.52446 + 31 +0.0 + 0 +LINE + 5 +1292 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +13398.261665 + 30 +0.0 + 11 +4925.000008 + 21 +13406.921933 + 31 +0.0 + 0 +LINE + 5 +1293 + 8 +0 + 62 + 0 + 10 +4950.000008 + 20 +13450.223204 + 30 +0.0 + 11 +4962.500008 + 21 +13471.873839 + 31 +0.0 + 0 +LINE + 5 +1294 + 8 +0 + 62 + 0 + 10 +4987.500008 + 20 +13515.175109 + 30 +0.0 + 11 +5000.0 + 21 +13536.82573 + 31 +0.0 + 0 +LINE + 5 +1295 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +13441.562935 + 30 +0.0 + 11 +4925.000008 + 21 +13450.223204 + 31 +0.0 + 0 +LINE + 5 +1296 + 8 +0 + 62 + 0 + 10 +4950.000008 + 20 +13493.524474 + 30 +0.0 + 11 +4962.500008 + 21 +13515.175109 + 31 +0.0 + 0 +LINE + 5 +1297 + 8 +0 + 62 + 0 + 10 +4987.500008 + 20 +13558.476379 + 30 +0.0 + 11 +5000.0 + 21 +13580.127 + 31 +0.0 + 0 +LINE + 5 +1298 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +13484.864205 + 30 +0.0 + 11 +4925.000008 + 21 +13493.524474 + 31 +0.0 + 0 +LINE + 5 +1299 + 8 +0 + 62 + 0 + 10 +4950.000008 + 20 +13536.825744 + 30 +0.0 + 11 +4962.500008 + 21 +13558.476379 + 31 +0.0 + 0 +LINE + 5 +129A + 8 +0 + 62 + 0 + 10 +4987.500008 + 20 +13601.777649 + 30 +0.0 + 11 +5000.0 + 21 +13623.42827 + 31 +0.0 + 0 +LINE + 5 +129B + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +13528.165475 + 30 +0.0 + 11 +4925.000008 + 21 +13536.825744 + 31 +0.0 + 0 +LINE + 5 +129C + 8 +0 + 62 + 0 + 10 +4950.000008 + 20 +13580.127014 + 30 +0.0 + 11 +4962.500008 + 21 +13601.777649 + 31 +0.0 + 0 +LINE + 5 +129D + 8 +0 + 62 + 0 + 10 +4987.500008 + 20 +13645.078919 + 30 +0.0 + 11 +5000.0 + 21 +13666.72954 + 31 +0.0 + 0 +LINE + 5 +129E + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +13571.466745 + 30 +0.0 + 11 +4925.000008 + 21 +13580.127014 + 31 +0.0 + 0 +LINE + 5 +129F + 8 +0 + 62 + 0 + 10 +4950.000008 + 20 +13623.428284 + 30 +0.0 + 11 +4962.500008 + 21 +13645.078919 + 31 +0.0 + 0 +LINE + 5 +12A0 + 8 +0 + 62 + 0 + 10 +4987.500008 + 20 +13688.38019 + 30 +0.0 + 11 +5000.0 + 21 +13710.03081 + 31 +0.0 + 0 +LINE + 5 +12A1 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +13614.768015 + 30 +0.0 + 11 +4925.000009 + 21 +13623.428284 + 31 +0.0 + 0 +LINE + 5 +12A2 + 8 +0 + 62 + 0 + 10 +4950.000009 + 20 +13666.729554 + 30 +0.0 + 11 +4962.500009 + 21 +13688.380189 + 31 +0.0 + 0 +LINE + 5 +12A3 + 8 +0 + 62 + 0 + 10 +4987.500009 + 20 +13731.68146 + 30 +0.0 + 11 +5000.0 + 21 +13753.33208 + 31 +0.0 + 0 +LINE + 5 +12A4 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +13658.069285 + 30 +0.0 + 11 +4925.000009 + 21 +13666.729554 + 31 +0.0 + 0 +LINE + 5 +12A5 + 8 +0 + 62 + 0 + 10 +4950.000009 + 20 +13710.030825 + 30 +0.0 + 11 +4962.500009 + 21 +13731.68146 + 31 +0.0 + 0 +LINE + 5 +12A6 + 8 +0 + 62 + 0 + 10 +4987.500009 + 20 +13774.98273 + 30 +0.0 + 11 +5000.0 + 21 +13796.63335 + 31 +0.0 + 0 +LINE + 5 +12A7 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +13701.370555 + 30 +0.0 + 11 +4925.000009 + 21 +13710.030824 + 31 +0.0 + 0 +LINE + 5 +12A8 + 8 +0 + 62 + 0 + 10 +4950.000009 + 20 +13753.332095 + 30 +0.0 + 11 +4962.500009 + 21 +13774.98273 + 31 +0.0 + 0 +LINE + 5 +12A9 + 8 +0 + 62 + 0 + 10 +4987.500009 + 20 +13818.284 + 30 +0.0 + 11 +5000.0 + 21 +13839.93462 + 31 +0.0 + 0 +LINE + 5 +12AA + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +13744.671825 + 30 +0.0 + 11 +4925.000009 + 21 +13753.332095 + 31 +0.0 + 0 +LINE + 5 +12AB + 8 +0 + 62 + 0 + 10 +4950.000009 + 20 +13796.633365 + 30 +0.0 + 11 +4962.500009 + 21 +13818.284 + 31 +0.0 + 0 +LINE + 5 +12AC + 8 +0 + 62 + 0 + 10 +4987.500009 + 20 +13861.58527 + 30 +0.0 + 11 +5000.0 + 21 +13883.23589 + 31 +0.0 + 0 +LINE + 5 +12AD + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +13787.973095 + 30 +0.0 + 11 +4925.000009 + 21 +13796.633365 + 31 +0.0 + 0 +LINE + 5 +12AE + 8 +0 + 62 + 0 + 10 +4950.000009 + 20 +13839.934635 + 30 +0.0 + 11 +4962.500009 + 21 +13861.58527 + 31 +0.0 + 0 +LINE + 5 +12AF + 8 +0 + 62 + 0 + 10 +4987.500009 + 20 +13904.88654 + 30 +0.0 + 11 +5000.0 + 21 +13926.53716 + 31 +0.0 + 0 +LINE + 5 +12B0 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +13831.274365 + 30 +0.0 + 11 +4925.000009 + 21 +13839.934635 + 31 +0.0 + 0 +LINE + 5 +12B1 + 8 +0 + 62 + 0 + 10 +4950.000009 + 20 +13883.235905 + 30 +0.0 + 11 +4962.500009 + 21 +13904.88654 + 31 +0.0 + 0 +LINE + 5 +12B2 + 8 +0 + 62 + 0 + 10 +4987.500009 + 20 +13948.18781 + 30 +0.0 + 11 +5000.0 + 21 +13969.83843 + 31 +0.0 + 0 +LINE + 5 +12B3 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +13874.575635 + 30 +0.0 + 11 +4925.000009 + 21 +13883.235905 + 31 +0.0 + 0 +LINE + 5 +12B4 + 8 +0 + 62 + 0 + 10 +4950.000009 + 20 +13926.537175 + 30 +0.0 + 11 +4962.500009 + 21 +13948.18781 + 31 +0.0 + 0 +LINE + 5 +12B5 + 8 +0 + 62 + 0 + 10 +4987.500009 + 20 +13991.489081 + 30 +0.0 + 11 +5000.0 + 21 +14013.1397 + 31 +0.0 + 0 +LINE + 5 +12B6 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +13917.876905 + 30 +0.0 + 11 +4925.000009 + 21 +13926.537175 + 31 +0.0 + 0 +LINE + 5 +12B7 + 8 +0 + 62 + 0 + 10 +4950.000009 + 20 +13969.838445 + 30 +0.0 + 11 +4962.500009 + 21 +13991.48908 + 31 +0.0 + 0 +LINE + 5 +12B8 + 8 +0 + 62 + 0 + 10 +4987.500009 + 20 +14034.790351 + 30 +0.0 + 11 +5000.0 + 21 +14056.44097 + 31 +0.0 + 0 +LINE + 5 +12B9 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +13961.178175 + 30 +0.0 + 11 +4925.000009 + 21 +13969.838445 + 31 +0.0 + 0 +LINE + 5 +12BA + 8 +0 + 62 + 0 + 10 +4950.000009 + 20 +14013.139716 + 30 +0.0 + 11 +4962.500009 + 21 +14034.790351 + 31 +0.0 + 0 +LINE + 5 +12BB + 8 +0 + 62 + 0 + 10 +4987.500009 + 20 +14078.091621 + 30 +0.0 + 11 +5000.0 + 21 +14099.74224 + 31 +0.0 + 0 +LINE + 5 +12BC + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +14004.479445 + 30 +0.0 + 11 +4925.000009 + 21 +14013.139715 + 31 +0.0 + 0 +LINE + 5 +12BD + 8 +0 + 62 + 0 + 10 +4950.000009 + 20 +14056.440986 + 30 +0.0 + 11 +4962.500009 + 21 +14078.091621 + 31 +0.0 + 0 +LINE + 5 +12BE + 8 +0 + 62 + 0 + 10 +4987.500009 + 20 +14121.392891 + 30 +0.0 + 11 +5000.0 + 21 +14143.04351 + 31 +0.0 + 0 +LINE + 5 +12BF + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +14047.780715 + 30 +0.0 + 11 +4925.000009 + 21 +14056.440986 + 31 +0.0 + 0 +LINE + 5 +12C0 + 8 +0 + 62 + 0 + 10 +4950.000009 + 20 +14099.742256 + 30 +0.0 + 11 +4962.500009 + 21 +14121.392891 + 31 +0.0 + 0 +LINE + 5 +12C1 + 8 +0 + 62 + 0 + 10 +4987.500009 + 20 +14164.694161 + 30 +0.0 + 11 +5000.0 + 21 +14186.34478 + 31 +0.0 + 0 +LINE + 5 +12C2 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +14091.081985 + 30 +0.0 + 11 +4925.000009 + 21 +14099.742256 + 31 +0.0 + 0 +LINE + 5 +12C3 + 8 +0 + 62 + 0 + 10 +4950.000009 + 20 +14143.043526 + 30 +0.0 + 11 +4962.500009 + 21 +14164.694161 + 31 +0.0 + 0 +LINE + 5 +12C4 + 8 +0 + 62 + 0 + 10 +4987.500009 + 20 +14207.995431 + 30 +0.0 + 11 +5000.0 + 21 +14229.64605 + 31 +0.0 + 0 +LINE + 5 +12C5 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +14134.383255 + 30 +0.0 + 11 +4925.00001 + 21 +14143.043526 + 31 +0.0 + 0 +LINE + 5 +12C6 + 8 +0 + 62 + 0 + 10 +4950.00001 + 20 +14186.344796 + 30 +0.0 + 11 +4962.50001 + 21 +14207.995431 + 31 +0.0 + 0 +LINE + 5 +12C7 + 8 +0 + 62 + 0 + 10 +4987.50001 + 20 +14251.296701 + 30 +0.0 + 11 +5000.0 + 21 +14272.94732 + 31 +0.0 + 0 +LINE + 5 +12C8 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +14177.684525 + 30 +0.0 + 11 +4925.00001 + 21 +14186.344796 + 31 +0.0 + 0 +LINE + 5 +12C9 + 8 +0 + 62 + 0 + 10 +4950.00001 + 20 +14229.646066 + 30 +0.0 + 11 +4962.50001 + 21 +14251.296701 + 31 +0.0 + 0 +LINE + 5 +12CA + 8 +0 + 62 + 0 + 10 +4987.50001 + 20 +14294.597972 + 30 +0.0 + 11 +5000.0 + 21 +14316.24859 + 31 +0.0 + 0 +LINE + 5 +12CB + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +14220.985795 + 30 +0.0 + 11 +4925.00001 + 21 +14229.646066 + 31 +0.0 + 0 +LINE + 5 +12CC + 8 +0 + 62 + 0 + 10 +4950.00001 + 20 +14272.947336 + 30 +0.0 + 11 +4962.50001 + 21 +14294.597971 + 31 +0.0 + 0 +LINE + 5 +12CD + 8 +0 + 62 + 0 + 10 +4987.50001 + 20 +14337.899242 + 30 +0.0 + 11 +5000.0 + 21 +14359.54986 + 31 +0.0 + 0 +LINE + 5 +12CE + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +14264.287065 + 30 +0.0 + 11 +4925.00001 + 21 +14272.947336 + 31 +0.0 + 0 +LINE + 5 +12CF + 8 +0 + 62 + 0 + 10 +4950.00001 + 20 +14316.248607 + 30 +0.0 + 11 +4962.50001 + 21 +14337.899242 + 31 +0.0 + 0 +LINE + 5 +12D0 + 8 +0 + 62 + 0 + 10 +4987.50001 + 20 +14381.200512 + 30 +0.0 + 11 +5000.0 + 21 +14402.85113 + 31 +0.0 + 0 +LINE + 5 +12D1 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +14307.588335 + 30 +0.0 + 11 +4925.00001 + 21 +14316.248606 + 31 +0.0 + 0 +LINE + 5 +12D2 + 8 +0 + 62 + 0 + 10 +4950.00001 + 20 +14359.549877 + 30 +0.0 + 11 +4962.50001 + 21 +14381.200512 + 31 +0.0 + 0 +LINE + 5 +12D3 + 8 +0 + 62 + 0 + 10 +4987.50001 + 20 +14424.501782 + 30 +0.0 + 11 +5000.0 + 21 +14446.1524 + 31 +0.0 + 0 +LINE + 5 +12D4 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +14350.889605 + 30 +0.0 + 11 +4925.00001 + 21 +14359.549877 + 31 +0.0 + 0 +LINE + 5 +12D5 + 8 +0 + 62 + 0 + 10 +4950.00001 + 20 +14402.851147 + 30 +0.0 + 11 +4962.50001 + 21 +14424.501782 + 31 +0.0 + 0 +LINE + 5 +12D6 + 8 +0 + 62 + 0 + 10 +4987.50001 + 20 +14467.803052 + 30 +0.0 + 11 +5000.0 + 21 +14489.45367 + 31 +0.0 + 0 +LINE + 5 +12D7 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +14394.190875 + 30 +0.0 + 11 +4925.00001 + 21 +14402.851147 + 31 +0.0 + 0 +LINE + 5 +12D8 + 8 +0 + 62 + 0 + 10 +4950.00001 + 20 +14446.152417 + 30 +0.0 + 11 +4962.50001 + 21 +14467.803052 + 31 +0.0 + 0 +LINE + 5 +12D9 + 8 +0 + 62 + 0 + 10 +4987.50001 + 20 +14511.104322 + 30 +0.0 + 11 +5000.0 + 21 +14532.75494 + 31 +0.0 + 0 +LINE + 5 +12DA + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +14437.492145 + 30 +0.0 + 11 +4925.00001 + 21 +14446.152417 + 31 +0.0 + 0 +LINE + 5 +12DB + 8 +0 + 62 + 0 + 10 +4950.00001 + 20 +14489.453687 + 30 +0.0 + 11 +4962.50001 + 21 +14511.104322 + 31 +0.0 + 0 +LINE + 5 +12DC + 8 +0 + 62 + 0 + 10 +4987.50001 + 20 +14554.405592 + 30 +0.0 + 11 +5000.0 + 21 +14576.05621 + 31 +0.0 + 0 +LINE + 5 +12DD + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +14480.793415 + 30 +0.0 + 11 +4925.00001 + 21 +14489.453687 + 31 +0.0 + 0 +LINE + 5 +12DE + 8 +0 + 62 + 0 + 10 +4950.00001 + 20 +14532.754957 + 30 +0.0 + 11 +4962.50001 + 21 +14554.405592 + 31 +0.0 + 0 +LINE + 5 +12DF + 8 +0 + 62 + 0 + 10 +4987.50001 + 20 +14597.706863 + 30 +0.0 + 11 +5000.0 + 21 +14619.35748 + 31 +0.0 + 0 +LINE + 5 +12E0 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +14524.094685 + 30 +0.0 + 11 +4925.00001 + 21 +14532.754957 + 31 +0.0 + 0 +LINE + 5 +12E1 + 8 +0 + 62 + 0 + 10 +4950.00001 + 20 +14576.056227 + 30 +0.0 + 11 +4962.50001 + 21 +14597.706862 + 31 +0.0 + 0 +LINE + 5 +12E2 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +14567.395955 + 30 +0.0 + 11 +4925.00001 + 21 +14576.056227 + 31 +0.0 + 0 +LINE + 5 +12E3 + 8 +0 + 62 + 0 + 10 +4950.00001 + 20 +14619.357498 + 30 +0.0 + 11 +4953.979398 + 21 +14626.25 + 31 +0.0 + 0 +LINE + 5 +12E4 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +14610.697225 + 30 +0.0 + 11 +4925.00001 + 21 +14619.357497 + 31 +0.0 + 0 +LINE + 5 +12E5 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +9371.243555 + 30 +0.0 + 11 +4925.0 + 21 +9379.90381 + 31 +0.0 + 0 +LINE + 5 +12E6 + 8 +0 + 62 + 0 + 10 +4950.0 + 20 +9423.20508 + 30 +0.0 + 11 +4962.5 + 21 +9444.855716 + 31 +0.0 + 0 +LINE + 5 +12E7 + 8 +0 + 62 + 0 + 10 +4987.5 + 20 +9488.156986 + 30 +0.0 + 11 +5000.0 + 21 +9509.80762 + 31 +0.0 + 0 +LINE + 5 +12E8 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +9327.942285 + 30 +0.0 + 11 +4925.0 + 21 +9336.60254 + 31 +0.0 + 0 +LINE + 5 +12E9 + 8 +0 + 62 + 0 + 10 +4950.0 + 20 +9379.90381 + 30 +0.0 + 11 +4962.5 + 21 +9401.554445 + 31 +0.0 + 0 +LINE + 5 +12EA + 8 +0 + 62 + 0 + 10 +4987.5 + 20 +9444.855716 + 30 +0.0 + 11 +5000.0 + 21 +9466.50635 + 31 +0.0 + 0 +LINE + 5 +12EB + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +9284.641015 + 30 +0.0 + 11 +4925.0 + 21 +9293.30127 + 31 +0.0 + 0 +LINE + 5 +12EC + 8 +0 + 62 + 0 + 10 +4950.0 + 20 +9336.60254 + 30 +0.0 + 11 +4962.5 + 21 +9358.253175 + 31 +0.0 + 0 +LINE + 5 +12ED + 8 +0 + 62 + 0 + 10 +4987.5 + 20 +9401.554445 + 30 +0.0 + 11 +5000.0 + 21 +9423.20508 + 31 +0.0 + 0 +LINE + 5 +12EE + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +9241.339745 + 30 +0.0 + 11 +4925.0 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +12EF + 8 +0 + 62 + 0 + 10 +4950.0 + 20 +9293.30127 + 30 +0.0 + 11 +4962.5 + 21 +9314.951905 + 31 +0.0 + 0 +LINE + 5 +12F0 + 8 +0 + 62 + 0 + 10 +4987.5 + 20 +9358.253175 + 30 +0.0 + 11 +5000.0 + 21 +9379.90381 + 31 +0.0 + 0 +LINE + 5 +12F1 + 8 +0 + 62 + 0 + 10 +4920.0 + 20 +9198.038475 + 30 +0.0 + 11 +4925.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +12F2 + 8 +0 + 62 + 0 + 10 +4950.0 + 20 +9250.0 + 30 +0.0 + 11 +4962.5 + 21 +9271.650635 + 31 +0.0 + 0 +LINE + 5 +12F3 + 8 +0 + 62 + 0 + 10 +4987.5 + 20 +9314.951905 + 30 +0.0 + 11 +5000.0 + 21 +9336.60254 + 31 +0.0 + 0 +LINE + 5 +12F4 + 8 +0 + 62 + 0 + 10 +4950.0 + 20 +9206.69873 + 30 +0.0 + 11 +4962.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +12F5 + 8 +0 + 62 + 0 + 10 +4987.5 + 20 +9271.650635 + 30 +0.0 + 11 +5000.0 + 21 +9293.30127 + 31 +0.0 + 0 +LINE + 5 +12F6 + 8 +0 + 62 + 0 + 10 +4953.811978 + 20 +9170.0 + 30 +0.0 + 11 +4962.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +12F7 + 8 +0 + 62 + 0 + 10 +4987.5 + 20 +9228.349365 + 30 +0.0 + 11 +5000.0 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +12F8 + 8 +0 + 62 + 0 + 10 +4987.5 + 20 +9185.048095 + 30 +0.0 + 11 +5000.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +12F9 + 8 +0 + 62 + 0 + 10 +5025.0 + 20 +9206.69873 + 30 +0.0 + 11 +5037.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +12FA + 8 +0 + 62 + 0 + 10 +5028.811978 + 20 +9170.0 + 30 +0.0 + 11 +5037.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +12FB + 8 +0 + 62 + 0 + 10 +5062.5 + 20 +9228.349365 + 30 +0.0 + 11 +5075.0 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +12FC + 8 +0 + 62 + 0 + 10 +5062.5 + 20 +9185.048095 + 30 +0.0 + 11 +5075.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +12FD + 8 +0 + 62 + 0 + 10 +5100.0 + 20 +9206.69873 + 30 +0.0 + 11 +5112.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +12FE + 8 +0 + 62 + 0 + 10 +5103.811978 + 20 +9170.0 + 30 +0.0 + 11 +5112.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +12FF + 8 +0 + 62 + 0 + 10 +5137.5 + 20 +9228.349365 + 30 +0.0 + 11 +5149.999999 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1300 + 8 +0 + 62 + 0 + 10 +5137.499999 + 20 +9185.048095 + 30 +0.0 + 11 +5149.999999 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +1301 + 8 +0 + 62 + 0 + 10 +5174.999999 + 20 +9206.69873 + 30 +0.0 + 11 +5187.499999 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1302 + 8 +0 + 62 + 0 + 10 +5178.811977 + 20 +9170.0 + 30 +0.0 + 11 +5187.499999 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +1303 + 8 +0 + 62 + 0 + 10 +5212.499999 + 20 +9228.349365 + 30 +0.0 + 11 +5224.999999 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1304 + 8 +0 + 62 + 0 + 10 +5212.499999 + 20 +9185.048095 + 30 +0.0 + 11 +5224.999999 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +1305 + 8 +0 + 62 + 0 + 10 +5249.999999 + 20 +9206.69873 + 30 +0.0 + 11 +5262.499999 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1306 + 8 +0 + 62 + 0 + 10 +5253.811977 + 20 +9170.0 + 30 +0.0 + 11 +5262.499999 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +1307 + 8 +0 + 62 + 0 + 10 +5287.499999 + 20 +9228.349365 + 30 +0.0 + 11 +5299.999999 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1308 + 8 +0 + 62 + 0 + 10 +5287.499999 + 20 +9185.048095 + 30 +0.0 + 11 +5299.999999 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +1309 + 8 +0 + 62 + 0 + 10 +5324.999999 + 20 +9206.69873 + 30 +0.0 + 11 +5337.499999 + 21 +9228.349366 + 31 +0.0 + 0 +LINE + 5 +130A + 8 +0 + 62 + 0 + 10 +5328.811977 + 20 +9170.0 + 30 +0.0 + 11 +5337.499999 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +130B + 8 +0 + 62 + 0 + 10 +5362.499999 + 20 +9228.349366 + 30 +0.0 + 11 +5374.999998 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +130C + 8 +0 + 62 + 0 + 10 +5362.499999 + 20 +9185.048095 + 30 +0.0 + 11 +5374.999999 + 21 +9206.698731 + 31 +0.0 + 0 +LINE + 5 +130D + 8 +0 + 62 + 0 + 10 +5399.999999 + 20 +9206.698731 + 30 +0.0 + 11 +5412.499999 + 21 +9228.349366 + 31 +0.0 + 0 +LINE + 5 +130E + 8 +0 + 62 + 0 + 10 +5403.811976 + 20 +9170.0 + 30 +0.0 + 11 +5412.499999 + 21 +9185.048096 + 31 +0.0 + 0 +LINE + 5 +130F + 8 +0 + 62 + 0 + 10 +5437.499999 + 20 +9228.349366 + 30 +0.0 + 11 +5449.999998 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1310 + 8 +0 + 62 + 0 + 10 +5437.499998 + 20 +9185.048096 + 30 +0.0 + 11 +5449.999998 + 21 +9206.698731 + 31 +0.0 + 0 +LINE + 5 +1311 + 8 +0 + 62 + 0 + 10 +5474.999998 + 20 +9206.698731 + 30 +0.0 + 11 +5487.499998 + 21 +9228.349366 + 31 +0.0 + 0 +LINE + 5 +1312 + 8 +0 + 62 + 0 + 10 +5478.811976 + 20 +9170.0 + 30 +0.0 + 11 +5487.499998 + 21 +9185.048096 + 31 +0.0 + 0 +LINE + 5 +1313 + 8 +0 + 62 + 0 + 10 +5512.499998 + 20 +9228.349366 + 30 +0.0 + 11 +5524.999998 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1314 + 8 +0 + 62 + 0 + 10 +5512.499998 + 20 +9185.048096 + 30 +0.0 + 11 +5524.999998 + 21 +9206.698731 + 31 +0.0 + 0 +LINE + 5 +1315 + 8 +0 + 62 + 0 + 10 +5549.999998 + 20 +9206.698731 + 30 +0.0 + 11 +5562.499998 + 21 +9228.349366 + 31 +0.0 + 0 +LINE + 5 +1316 + 8 +0 + 62 + 0 + 10 +5553.811976 + 20 +9170.0 + 30 +0.0 + 11 +5562.499998 + 21 +9185.048096 + 31 +0.0 + 0 +LINE + 5 +1317 + 8 +0 + 62 + 0 + 10 +5587.499998 + 20 +9228.349366 + 30 +0.0 + 11 +5599.999997 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1318 + 8 +0 + 62 + 0 + 10 +5587.499998 + 20 +9185.048096 + 30 +0.0 + 11 +5599.999998 + 21 +9206.698731 + 31 +0.0 + 0 +LINE + 5 +1319 + 8 +0 + 62 + 0 + 10 +5624.999998 + 20 +9206.698731 + 30 +0.0 + 11 +5637.499998 + 21 +9228.349366 + 31 +0.0 + 0 +LINE + 5 +131A + 8 +0 + 62 + 0 + 10 +5628.811976 + 20 +9170.0 + 30 +0.0 + 11 +5637.499998 + 21 +9185.048096 + 31 +0.0 + 0 +LINE + 5 +131B + 8 +0 + 62 + 0 + 10 +5662.499998 + 20 +9228.349366 + 30 +0.0 + 11 +5674.999997 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +131C + 8 +0 + 62 + 0 + 10 +5662.499998 + 20 +9185.048096 + 30 +0.0 + 11 +5674.999998 + 21 +9206.698731 + 31 +0.0 + 0 +LINE + 5 +131D + 8 +0 + 62 + 0 + 10 +5699.999998 + 20 +9206.698731 + 30 +0.0 + 11 +5712.499998 + 21 +9228.349366 + 31 +0.0 + 0 +LINE + 5 +131E + 8 +0 + 62 + 0 + 10 +5703.811975 + 20 +9170.0 + 30 +0.0 + 11 +5712.499998 + 21 +9185.048096 + 31 +0.0 + 0 +LINE + 5 +131F + 8 +0 + 62 + 0 + 10 +5737.499998 + 20 +9228.349366 + 30 +0.0 + 11 +5749.999997 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1320 + 8 +0 + 62 + 0 + 10 +5737.499997 + 20 +9185.048096 + 30 +0.0 + 11 +5749.999997 + 21 +9206.698731 + 31 +0.0 + 0 +LINE + 5 +1321 + 8 +0 + 62 + 0 + 10 +5774.999997 + 20 +9206.698731 + 30 +0.0 + 11 +5787.499997 + 21 +9228.349366 + 31 +0.0 + 0 +LINE + 5 +1322 + 8 +0 + 62 + 0 + 10 +5778.811975 + 20 +9170.0 + 30 +0.0 + 11 +5787.499997 + 21 +9185.048096 + 31 +0.0 + 0 +LINE + 5 +1323 + 8 +0 + 62 + 0 + 10 +5812.499997 + 20 +9228.349366 + 30 +0.0 + 11 +5824.999996 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1324 + 8 +0 + 62 + 0 + 10 +5812.499997 + 20 +9185.048096 + 30 +0.0 + 11 +5824.999997 + 21 +9206.698731 + 31 +0.0 + 0 +LINE + 5 +1325 + 8 +0 + 62 + 0 + 10 +5849.999997 + 20 +9206.698731 + 30 +0.0 + 11 +5862.499997 + 21 +9228.349367 + 31 +0.0 + 0 +LINE + 5 +1326 + 8 +0 + 62 + 0 + 10 +5853.811975 + 20 +9170.0 + 30 +0.0 + 11 +5862.499997 + 21 +9185.048096 + 31 +0.0 + 0 +LINE + 5 +1327 + 8 +0 + 62 + 0 + 10 +5887.499997 + 20 +9228.349367 + 30 +0.0 + 11 +5899.999996 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1328 + 8 +0 + 62 + 0 + 10 +5887.499997 + 20 +9185.048096 + 30 +0.0 + 11 +5899.999997 + 21 +9206.698732 + 31 +0.0 + 0 +LINE + 5 +1329 + 8 +0 + 62 + 0 + 10 +5924.999997 + 20 +9206.698732 + 30 +0.0 + 11 +5937.499997 + 21 +9228.349367 + 31 +0.0 + 0 +LINE + 5 +132A + 8 +0 + 62 + 0 + 10 +5928.811974 + 20 +9170.0 + 30 +0.0 + 11 +5937.499997 + 21 +9185.048097 + 31 +0.0 + 0 +LINE + 5 +132B + 8 +0 + 62 + 0 + 10 +5962.499997 + 20 +9228.349367 + 30 +0.0 + 11 +5974.999996 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +132C + 8 +0 + 62 + 0 + 10 +5962.499997 + 20 +9185.048097 + 30 +0.0 + 11 +5974.999997 + 21 +9206.698732 + 31 +0.0 + 0 +LINE + 5 +132D + 8 +0 + 62 + 0 + 10 +5999.999997 + 20 +9206.698732 + 30 +0.0 + 11 +6012.499997 + 21 +9228.349367 + 31 +0.0 + 0 +LINE + 5 +132E + 8 +0 + 62 + 0 + 10 +6003.811974 + 20 +9170.0 + 30 +0.0 + 11 +6012.499997 + 21 +9185.048097 + 31 +0.0 + 0 +LINE + 5 +132F + 8 +0 + 62 + 0 + 10 +6037.499997 + 20 +9228.349367 + 30 +0.0 + 11 +6049.999995 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1330 + 8 +0 + 62 + 0 + 10 +6037.499996 + 20 +9185.048097 + 30 +0.0 + 11 +6049.999996 + 21 +9206.698732 + 31 +0.0 + 0 +LINE + 5 +1331 + 8 +0 + 62 + 0 + 10 +6074.999996 + 20 +9206.698732 + 30 +0.0 + 11 +6087.499996 + 21 +9228.349367 + 31 +0.0 + 0 +LINE + 5 +1332 + 8 +0 + 62 + 0 + 10 +6078.811974 + 20 +9170.0 + 30 +0.0 + 11 +6087.499996 + 21 +9185.048097 + 31 +0.0 + 0 +LINE + 5 +1333 + 8 +0 + 62 + 0 + 10 +6112.499996 + 20 +9228.349367 + 30 +0.0 + 11 +6124.999995 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1334 + 8 +0 + 62 + 0 + 10 +6112.499996 + 20 +9185.048097 + 30 +0.0 + 11 +6124.999996 + 21 +9206.698732 + 31 +0.0 + 0 +LINE + 5 +1335 + 8 +0 + 62 + 0 + 10 +6149.999996 + 20 +9206.698732 + 30 +0.0 + 11 +6162.499996 + 21 +9228.349367 + 31 +0.0 + 0 +LINE + 5 +1336 + 8 +0 + 62 + 0 + 10 +6153.811973 + 20 +9170.0 + 30 +0.0 + 11 +6162.499996 + 21 +9185.048097 + 31 +0.0 + 0 +LINE + 5 +1337 + 8 +0 + 62 + 0 + 10 +6187.499996 + 20 +9228.349367 + 30 +0.0 + 11 +6199.999995 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1338 + 8 +0 + 62 + 0 + 10 +6187.499996 + 20 +9185.048097 + 30 +0.0 + 11 +6199.999996 + 21 +9206.698732 + 31 +0.0 + 0 +LINE + 5 +1339 + 8 +0 + 62 + 0 + 10 +6224.999996 + 20 +9206.698732 + 30 +0.0 + 11 +6237.499996 + 21 +9228.349367 + 31 +0.0 + 0 +LINE + 5 +133A + 8 +0 + 62 + 0 + 10 +6228.811973 + 20 +9170.0 + 30 +0.0 + 11 +6237.499996 + 21 +9185.048097 + 31 +0.0 + 0 +LINE + 5 +133B + 8 +0 + 62 + 0 + 10 +6262.499996 + 20 +9228.349367 + 30 +0.0 + 11 +6274.999994 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +133C + 8 +0 + 62 + 0 + 10 +6262.499996 + 20 +9185.048097 + 30 +0.0 + 11 +6274.999996 + 21 +9206.698732 + 31 +0.0 + 0 +LINE + 5 +133D + 8 +0 + 62 + 0 + 10 +6299.999996 + 20 +9206.698732 + 30 +0.0 + 11 +6312.499996 + 21 +9228.349367 + 31 +0.0 + 0 +LINE + 5 +133E + 8 +0 + 62 + 0 + 10 +6303.811973 + 20 +9170.0 + 30 +0.0 + 11 +6312.499996 + 21 +9185.048097 + 31 +0.0 + 0 +LINE + 5 +133F + 8 +0 + 62 + 0 + 10 +6337.499996 + 20 +9228.349367 + 30 +0.0 + 11 +6349.999994 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1340 + 8 +0 + 62 + 0 + 10 +6337.499995 + 20 +9185.048097 + 30 +0.0 + 11 +6349.999995 + 21 +9206.698732 + 31 +0.0 + 0 +LINE + 5 +1341 + 8 +0 + 62 + 0 + 10 +6374.999995 + 20 +9206.698732 + 30 +0.0 + 11 +6387.499995 + 21 +9228.349368 + 31 +0.0 + 0 +LINE + 5 +1342 + 8 +0 + 62 + 0 + 10 +6378.811972 + 20 +9170.0 + 30 +0.0 + 11 +6387.499995 + 21 +9185.048097 + 31 +0.0 + 0 +LINE + 5 +1343 + 8 +0 + 62 + 0 + 10 +6412.499995 + 20 +9228.349368 + 30 +0.0 + 11 +6424.999994 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1344 + 8 +0 + 62 + 0 + 10 +6412.499995 + 20 +9185.048097 + 30 +0.0 + 11 +6424.999995 + 21 +9206.698733 + 31 +0.0 + 0 +LINE + 5 +1345 + 8 +0 + 62 + 0 + 10 +6449.999995 + 20 +9206.698733 + 30 +0.0 + 11 +6462.499995 + 21 +9228.349368 + 31 +0.0 + 0 +LINE + 5 +1346 + 8 +0 + 62 + 0 + 10 +6453.811972 + 20 +9170.0 + 30 +0.0 + 11 +6462.499995 + 21 +9185.048098 + 31 +0.0 + 0 +LINE + 5 +1347 + 8 +0 + 62 + 0 + 10 +6487.499995 + 20 +9228.349368 + 30 +0.0 + 11 +6499.999993 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1348 + 8 +0 + 62 + 0 + 10 +6487.499995 + 20 +9185.048098 + 30 +0.0 + 11 +6499.999995 + 21 +9206.698733 + 31 +0.0 + 0 +LINE + 5 +1349 + 8 +0 + 62 + 0 + 10 +6524.999995 + 20 +9206.698733 + 30 +0.0 + 11 +6537.499995 + 21 +9228.349368 + 31 +0.0 + 0 +LINE + 5 +134A + 8 +0 + 62 + 0 + 10 +6528.811972 + 20 +9170.0 + 30 +0.0 + 11 +6537.499995 + 21 +9185.048098 + 31 +0.0 + 0 +LINE + 5 +134B + 8 +0 + 62 + 0 + 10 +6562.499995 + 20 +9228.349368 + 30 +0.0 + 11 +6574.999993 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +134C + 8 +0 + 62 + 0 + 10 +6562.499995 + 20 +9185.048098 + 30 +0.0 + 11 +6574.999995 + 21 +9206.698733 + 31 +0.0 + 0 +LINE + 5 +134D + 8 +0 + 62 + 0 + 10 +6599.999995 + 20 +9206.698733 + 30 +0.0 + 11 +6612.499995 + 21 +9228.349368 + 31 +0.0 + 0 +LINE + 5 +134E + 8 +0 + 62 + 0 + 10 +6603.811971 + 20 +9170.0 + 30 +0.0 + 11 +6612.499995 + 21 +9185.048098 + 31 +0.0 + 0 +LINE + 5 +134F + 8 +0 + 62 + 0 + 10 +6637.499995 + 20 +9228.349368 + 30 +0.0 + 11 +6649.999993 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1350 + 8 +0 + 62 + 0 + 10 +6637.499995 + 20 +9185.048098 + 30 +0.0 + 11 +6649.999995 + 21 +9206.698733 + 31 +0.0 + 0 +LINE + 5 +1351 + 8 +0 + 62 + 0 + 10 +6674.999994 + 20 +9206.698733 + 30 +0.0 + 11 +6687.499994 + 21 +9228.349368 + 31 +0.0 + 0 +LINE + 5 +1352 + 8 +0 + 62 + 0 + 10 +6678.811971 + 20 +9170.0 + 30 +0.0 + 11 +6687.499994 + 21 +9185.048098 + 31 +0.0 + 0 +LINE + 5 +1353 + 8 +0 + 62 + 0 + 10 +6712.499994 + 20 +9228.349368 + 30 +0.0 + 11 +6724.999992 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1354 + 8 +0 + 62 + 0 + 10 +6712.499994 + 20 +9185.048098 + 30 +0.0 + 11 +6724.999994 + 21 +9206.698733 + 31 +0.0 + 0 +LINE + 5 +1355 + 8 +0 + 62 + 0 + 10 +6749.999994 + 20 +9206.698733 + 30 +0.0 + 11 +6762.499994 + 21 +9228.349368 + 31 +0.0 + 0 +LINE + 5 +1356 + 8 +0 + 62 + 0 + 10 +6753.811971 + 20 +9170.0 + 30 +0.0 + 11 +6762.499994 + 21 +9185.048098 + 31 +0.0 + 0 +LINE + 5 +1357 + 8 +0 + 62 + 0 + 10 +6787.499994 + 20 +9228.349368 + 30 +0.0 + 11 +6799.999992 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1358 + 8 +0 + 62 + 0 + 10 +6787.499994 + 20 +9185.048098 + 30 +0.0 + 11 +6799.999994 + 21 +9206.698733 + 31 +0.0 + 0 +LINE + 5 +1359 + 8 +0 + 62 + 0 + 10 +6824.999994 + 20 +9206.698733 + 30 +0.0 + 11 +6837.499994 + 21 +9228.349368 + 31 +0.0 + 0 +LINE + 5 +135A + 8 +0 + 62 + 0 + 10 +6828.81197 + 20 +9170.0 + 30 +0.0 + 11 +6837.499994 + 21 +9185.048098 + 31 +0.0 + 0 +LINE + 5 +135B + 8 +0 + 62 + 0 + 10 +6862.499994 + 20 +9228.349368 + 30 +0.0 + 11 +6874.999992 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +135C + 8 +0 + 62 + 0 + 10 +6862.499994 + 20 +9185.048098 + 30 +0.0 + 11 +6874.999994 + 21 +9206.698733 + 31 +0.0 + 0 +LINE + 5 +135D + 8 +0 + 62 + 0 + 10 +6899.999994 + 20 +9206.698733 + 30 +0.0 + 11 +6912.499994 + 21 +9228.349369 + 31 +0.0 + 0 +LINE + 5 +135E + 8 +0 + 62 + 0 + 10 +6903.81197 + 20 +9170.0 + 30 +0.0 + 11 +6912.499994 + 21 +9185.048098 + 31 +0.0 + 0 +LINE + 5 +135F + 8 +0 + 62 + 0 + 10 +6937.499994 + 20 +9228.349369 + 30 +0.0 + 11 +6949.999991 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1360 + 8 +0 + 62 + 0 + 10 +6937.499994 + 20 +9185.048098 + 30 +0.0 + 11 +6949.999994 + 21 +9206.698734 + 31 +0.0 + 0 +LINE + 5 +1361 + 8 +0 + 62 + 0 + 10 +6974.999993 + 20 +9206.698734 + 30 +0.0 + 11 +6987.499993 + 21 +9228.349369 + 31 +0.0 + 0 +LINE + 5 +1362 + 8 +0 + 62 + 0 + 10 +6978.81197 + 20 +9170.0 + 30 +0.0 + 11 +6987.499993 + 21 +9185.048099 + 31 +0.0 + 0 +LINE + 5 +1363 + 8 +0 + 62 + 0 + 10 +7012.499993 + 20 +9228.349369 + 30 +0.0 + 11 +7024.999991 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1364 + 8 +0 + 62 + 0 + 10 +7012.499993 + 20 +9185.048099 + 30 +0.0 + 11 +7024.999993 + 21 +9206.698734 + 31 +0.0 + 0 +LINE + 5 +1365 + 8 +0 + 62 + 0 + 10 +7049.999993 + 20 +9206.698734 + 30 +0.0 + 11 +7062.499993 + 21 +9228.349369 + 31 +0.0 + 0 +LINE + 5 +1366 + 8 +0 + 62 + 0 + 10 +7053.811969 + 20 +9170.0 + 30 +0.0 + 11 +7062.499993 + 21 +9185.048099 + 31 +0.0 + 0 +LINE + 5 +1367 + 8 +0 + 62 + 0 + 10 +7087.499993 + 20 +9228.349369 + 30 +0.0 + 11 +7099.999991 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1368 + 8 +0 + 62 + 0 + 10 +7087.499993 + 20 +9185.048099 + 30 +0.0 + 11 +7099.999993 + 21 +9206.698734 + 31 +0.0 + 0 +LINE + 5 +1369 + 8 +0 + 62 + 0 + 10 +7124.999993 + 20 +9206.698734 + 30 +0.0 + 11 +7137.499993 + 21 +9228.349369 + 31 +0.0 + 0 +LINE + 5 +136A + 8 +0 + 62 + 0 + 10 +7128.811969 + 20 +9170.0 + 30 +0.0 + 11 +7137.499993 + 21 +9185.048099 + 31 +0.0 + 0 +LINE + 5 +136B + 8 +0 + 62 + 0 + 10 +7162.499993 + 20 +9228.349369 + 30 +0.0 + 11 +7174.99999 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +136C + 8 +0 + 62 + 0 + 10 +7162.499993 + 20 +9185.048099 + 30 +0.0 + 11 +7174.999993 + 21 +9206.698734 + 31 +0.0 + 0 +LINE + 5 +136D + 8 +0 + 62 + 0 + 10 +7199.999993 + 20 +9206.698734 + 30 +0.0 + 11 +7212.499993 + 21 +9228.349369 + 31 +0.0 + 0 +LINE + 5 +136E + 8 +0 + 62 + 0 + 10 +7203.811969 + 20 +9170.0 + 30 +0.0 + 11 +7212.499993 + 21 +9185.048099 + 31 +0.0 + 0 +LINE + 5 +136F + 8 +0 + 62 + 0 + 10 +7237.499993 + 20 +9228.349369 + 30 +0.0 + 11 +7249.99999 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1370 + 8 +0 + 62 + 0 + 10 +7237.499993 + 20 +9185.048099 + 30 +0.0 + 11 +7249.999993 + 21 +9206.698734 + 31 +0.0 + 0 +LINE + 5 +1371 + 8 +0 + 62 + 0 + 10 +7274.999992 + 20 +9206.698734 + 30 +0.0 + 11 +7287.499992 + 21 +9228.349369 + 31 +0.0 + 0 +LINE + 5 +1372 + 8 +0 + 62 + 0 + 10 +7278.811968 + 20 +9170.0 + 30 +0.0 + 11 +7287.499992 + 21 +9185.048099 + 31 +0.0 + 0 +LINE + 5 +1373 + 8 +0 + 62 + 0 + 10 +7312.499992 + 20 +9228.349369 + 30 +0.0 + 11 +7324.99999 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1374 + 8 +0 + 62 + 0 + 10 +7312.499992 + 20 +9185.048099 + 30 +0.0 + 11 +7324.999992 + 21 +9206.698734 + 31 +0.0 + 0 +LINE + 5 +1375 + 8 +0 + 62 + 0 + 10 +7349.999992 + 20 +9206.698734 + 30 +0.0 + 11 +7362.499992 + 21 +9228.349369 + 31 +0.0 + 0 +LINE + 5 +1376 + 8 +0 + 62 + 0 + 10 +7353.811968 + 20 +9170.0 + 30 +0.0 + 11 +7362.499992 + 21 +9185.048099 + 31 +0.0 + 0 +LINE + 5 +1377 + 8 +0 + 62 + 0 + 10 +7387.499992 + 20 +9228.349369 + 30 +0.0 + 11 +7399.99999 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1378 + 8 +0 + 62 + 0 + 10 +7387.499992 + 20 +9185.048099 + 30 +0.0 + 11 +7399.999992 + 21 +9206.698734 + 31 +0.0 + 0 +LINE + 5 +1379 + 8 +0 + 62 + 0 + 10 +7424.999992 + 20 +9206.698734 + 30 +0.0 + 11 +7437.499992 + 21 +9228.34937 + 31 +0.0 + 0 +LINE + 5 +137A + 8 +0 + 62 + 0 + 10 +7428.811968 + 20 +9170.0 + 30 +0.0 + 11 +7437.499992 + 21 +9185.048099 + 31 +0.0 + 0 +LINE + 5 +137B + 8 +0 + 62 + 0 + 10 +7462.499992 + 20 +9228.34937 + 30 +0.0 + 11 +7474.999989 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +137C + 8 +0 + 62 + 0 + 10 +7462.499992 + 20 +9185.048099 + 30 +0.0 + 11 +7474.999992 + 21 +9206.698735 + 31 +0.0 + 0 +LINE + 5 +137D + 8 +0 + 62 + 0 + 10 +7499.999992 + 20 +9206.698735 + 30 +0.0 + 11 +7512.499992 + 21 +9228.34937 + 31 +0.0 + 0 +LINE + 5 +137E + 8 +0 + 62 + 0 + 10 +7503.811967 + 20 +9170.0 + 30 +0.0 + 11 +7512.499992 + 21 +9185.0481 + 31 +0.0 + 0 +LINE + 5 +137F + 8 +0 + 62 + 0 + 10 +7537.499992 + 20 +9228.34937 + 30 +0.0 + 11 +7549.999989 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1380 + 8 +0 + 62 + 0 + 10 +7537.499992 + 20 +9185.0481 + 30 +0.0 + 11 +7549.999992 + 21 +9206.698735 + 31 +0.0 + 0 +LINE + 5 +1381 + 8 +0 + 62 + 0 + 10 +7574.999991 + 20 +9206.698735 + 30 +0.0 + 11 +7587.499991 + 21 +9228.34937 + 31 +0.0 + 0 +LINE + 5 +1382 + 8 +0 + 62 + 0 + 10 +7578.811967 + 20 +9170.0 + 30 +0.0 + 11 +7587.499991 + 21 +9185.0481 + 31 +0.0 + 0 +LINE + 5 +1383 + 8 +0 + 62 + 0 + 10 +7612.499991 + 20 +9228.34937 + 30 +0.0 + 11 +7624.999989 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1384 + 8 +0 + 62 + 0 + 10 +7612.499991 + 20 +9185.0481 + 30 +0.0 + 11 +7624.999991 + 21 +9206.698735 + 31 +0.0 + 0 +LINE + 5 +1385 + 8 +0 + 62 + 0 + 10 +7649.999991 + 20 +9206.698735 + 30 +0.0 + 11 +7662.499991 + 21 +9228.34937 + 31 +0.0 + 0 +LINE + 5 +1386 + 8 +0 + 62 + 0 + 10 +7653.811967 + 20 +9170.0 + 30 +0.0 + 11 +7662.499991 + 21 +9185.0481 + 31 +0.0 + 0 +LINE + 5 +1387 + 8 +0 + 62 + 0 + 10 +7687.499991 + 20 +9228.34937 + 30 +0.0 + 11 +7699.999988 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1388 + 8 +0 + 62 + 0 + 10 +7687.499991 + 20 +9185.0481 + 30 +0.0 + 11 +7699.999991 + 21 +9206.698735 + 31 +0.0 + 0 +LINE + 5 +1389 + 8 +0 + 62 + 0 + 10 +7724.999991 + 20 +9206.698735 + 30 +0.0 + 11 +7737.499991 + 21 +9228.34937 + 31 +0.0 + 0 +LINE + 5 +138A + 8 +0 + 62 + 0 + 10 +7728.811966 + 20 +9170.0 + 30 +0.0 + 11 +7737.499991 + 21 +9185.0481 + 31 +0.0 + 0 +ENDBLK + 5 +138B + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X45 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X45 + 1 + + 0 +LINE + 5 +138D + 8 +0 + 62 + 0 + 10 +8787.5 + 20 +9228.349365 + 30 +0.0 + 11 +8812.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +138E + 8 +0 + 62 + 0 + 10 +8862.5 + 20 +9228.349365 + 30 +0.0 + 11 +8887.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +138F + 8 +0 + 62 + 0 + 10 +8937.5 + 20 +9228.349365 + 30 +0.0 + 11 +8962.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1390 + 8 +0 + 62 + 0 + 10 +9012.5 + 20 +9228.349365 + 30 +0.0 + 11 +9037.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1391 + 8 +0 + 62 + 0 + 10 +9087.5 + 20 +9228.349365 + 30 +0.0 + 11 +9112.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1392 + 8 +0 + 62 + 0 + 10 +9162.5 + 20 +9228.349365 + 30 +0.0 + 11 +9187.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1393 + 8 +0 + 62 + 0 + 10 +9237.5 + 20 +9228.349365 + 30 +0.0 + 11 +9262.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1394 + 8 +0 + 62 + 0 + 10 +9312.5 + 20 +9228.349365 + 30 +0.0 + 11 +9337.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1395 + 8 +0 + 62 + 0 + 10 +9387.5 + 20 +9228.349365 + 30 +0.0 + 11 +9412.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1396 + 8 +0 + 62 + 0 + 10 +9462.5 + 20 +9228.349365 + 30 +0.0 + 11 +9487.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1397 + 8 +0 + 62 + 0 + 10 +9537.5 + 20 +9228.349365 + 30 +0.0 + 11 +9562.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1398 + 8 +0 + 62 + 0 + 10 +9612.5 + 20 +9228.349365 + 30 +0.0 + 11 +9637.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1399 + 8 +0 + 62 + 0 + 10 +9687.5 + 20 +9228.349365 + 30 +0.0 + 11 +9712.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +139A + 8 +0 + 62 + 0 + 10 +9762.5 + 20 +9228.349365 + 30 +0.0 + 11 +9787.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +139B + 8 +0 + 62 + 0 + 10 +9837.5 + 20 +9228.349365 + 30 +0.0 + 11 +9862.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +139C + 8 +0 + 62 + 0 + 10 +8750.0 + 20 +9206.69873 + 30 +0.0 + 11 +8775.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +139D + 8 +0 + 62 + 0 + 10 +8825.0 + 20 +9206.69873 + 30 +0.0 + 11 +8850.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +139E + 8 +0 + 62 + 0 + 10 +8900.0 + 20 +9206.69873 + 30 +0.0 + 11 +8925.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +139F + 8 +0 + 62 + 0 + 10 +8975.0 + 20 +9206.69873 + 30 +0.0 + 11 +9000.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +13A0 + 8 +0 + 62 + 0 + 10 +9050.0 + 20 +9206.69873 + 30 +0.0 + 11 +9075.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +13A1 + 8 +0 + 62 + 0 + 10 +9125.0 + 20 +9206.69873 + 30 +0.0 + 11 +9150.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +13A2 + 8 +0 + 62 + 0 + 10 +9200.0 + 20 +9206.69873 + 30 +0.0 + 11 +9225.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +13A3 + 8 +0 + 62 + 0 + 10 +9275.0 + 20 +9206.69873 + 30 +0.0 + 11 +9300.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +13A4 + 8 +0 + 62 + 0 + 10 +9350.0 + 20 +9206.69873 + 30 +0.0 + 11 +9375.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +13A5 + 8 +0 + 62 + 0 + 10 +9425.0 + 20 +9206.69873 + 30 +0.0 + 11 +9450.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +13A6 + 8 +0 + 62 + 0 + 10 +9500.0 + 20 +9206.69873 + 30 +0.0 + 11 +9525.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +13A7 + 8 +0 + 62 + 0 + 10 +9575.0 + 20 +9206.69873 + 30 +0.0 + 11 +9600.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +13A8 + 8 +0 + 62 + 0 + 10 +9650.0 + 20 +9206.69873 + 30 +0.0 + 11 +9675.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +13A9 + 8 +0 + 62 + 0 + 10 +9725.0 + 20 +9206.69873 + 30 +0.0 + 11 +9750.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +13AA + 8 +0 + 62 + 0 + 10 +9800.0 + 20 +9206.69873 + 30 +0.0 + 11 +9825.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +13AB + 8 +0 + 62 + 0 + 10 +9875.0 + 20 +9206.69873 + 30 +0.0 + 11 +9876.25 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +13AC + 8 +0 + 62 + 0 + 10 +8787.5 + 20 +9185.048095 + 30 +0.0 + 11 +8812.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +13AD + 8 +0 + 62 + 0 + 10 +8862.5 + 20 +9185.048095 + 30 +0.0 + 11 +8887.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +13AE + 8 +0 + 62 + 0 + 10 +8937.5 + 20 +9185.048095 + 30 +0.0 + 11 +8962.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +13AF + 8 +0 + 62 + 0 + 10 +9012.5 + 20 +9185.048095 + 30 +0.0 + 11 +9037.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +13B0 + 8 +0 + 62 + 0 + 10 +9087.5 + 20 +9185.048095 + 30 +0.0 + 11 +9112.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +13B1 + 8 +0 + 62 + 0 + 10 +9162.5 + 20 +9185.048095 + 30 +0.0 + 11 +9187.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +13B2 + 8 +0 + 62 + 0 + 10 +9237.5 + 20 +9185.048095 + 30 +0.0 + 11 +9262.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +13B3 + 8 +0 + 62 + 0 + 10 +9312.5 + 20 +9185.048095 + 30 +0.0 + 11 +9337.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +13B4 + 8 +0 + 62 + 0 + 10 +9387.5 + 20 +9185.048095 + 30 +0.0 + 11 +9412.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +13B5 + 8 +0 + 62 + 0 + 10 +9462.5 + 20 +9185.048095 + 30 +0.0 + 11 +9487.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +13B6 + 8 +0 + 62 + 0 + 10 +9537.5 + 20 +9185.048095 + 30 +0.0 + 11 +9562.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +13B7 + 8 +0 + 62 + 0 + 10 +9612.5 + 20 +9185.048095 + 30 +0.0 + 11 +9637.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +13B8 + 8 +0 + 62 + 0 + 10 +9687.5 + 20 +9185.048095 + 30 +0.0 + 11 +9712.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +13B9 + 8 +0 + 62 + 0 + 10 +9762.5 + 20 +9185.048095 + 30 +0.0 + 11 +9787.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +13BA + 8 +0 + 62 + 0 + 10 +9837.5 + 20 +9185.048095 + 30 +0.0 + 11 +9862.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +13BB + 8 +0 + 62 + 0 + 10 +9312.499986 + 20 +9185.048087 + 30 +0.0 + 11 +9299.999986 + 21 +9206.698722 + 31 +0.0 + 0 +LINE + 5 +13BC + 8 +0 + 62 + 0 + 10 +9274.999986 + 20 +9249.999992 + 30 +0.0 + 11 +9274.999981 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +13BD + 8 +0 + 62 + 0 + 10 +9274.999986 + 20 +9206.698722 + 30 +0.0 + 11 +9262.499986 + 21 +9228.349357 + 31 +0.0 + 0 +LINE + 5 +13BE + 8 +0 + 62 + 0 + 10 +9271.188003 + 20 +9170.0 + 30 +0.0 + 11 +9262.499986 + 21 +9185.048087 + 31 +0.0 + 0 +LINE + 5 +13BF + 8 +0 + 62 + 0 + 10 +9237.499986 + 20 +9228.349357 + 30 +0.0 + 11 +9224.999986 + 21 +9249.999992 + 31 +0.0 + 0 +LINE + 5 +13C0 + 8 +0 + 62 + 0 + 10 +9237.499986 + 20 +9185.048087 + 30 +0.0 + 11 +9224.999986 + 21 +9206.698722 + 31 +0.0 + 0 +LINE + 5 +13C1 + 8 +0 + 62 + 0 + 10 +9199.999986 + 20 +9249.999992 + 30 +0.0 + 11 +9199.999982 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +13C2 + 8 +0 + 62 + 0 + 10 +9199.999986 + 20 +9206.698722 + 30 +0.0 + 11 +9187.499986 + 21 +9228.349357 + 31 +0.0 + 0 +LINE + 5 +13C3 + 8 +0 + 62 + 0 + 10 +9196.188003 + 20 +9170.0 + 30 +0.0 + 11 +9187.499986 + 21 +9185.048087 + 31 +0.0 + 0 +LINE + 5 +13C4 + 8 +0 + 62 + 0 + 10 +9162.499986 + 20 +9228.349357 + 30 +0.0 + 11 +9149.999986 + 21 +9249.999992 + 31 +0.0 + 0 +LINE + 5 +13C5 + 8 +0 + 62 + 0 + 10 +9162.499986 + 20 +9185.048087 + 30 +0.0 + 11 +9149.999986 + 21 +9206.698722 + 31 +0.0 + 0 +LINE + 5 +13C6 + 8 +0 + 62 + 0 + 10 +9124.999986 + 20 +9249.999992 + 30 +0.0 + 11 +9124.999982 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +13C7 + 8 +0 + 62 + 0 + 10 +9124.999987 + 20 +9206.698722 + 30 +0.0 + 11 +9112.499987 + 21 +9228.349357 + 31 +0.0 + 0 +LINE + 5 +13C8 + 8 +0 + 62 + 0 + 10 +9121.188004 + 20 +9170.0 + 30 +0.0 + 11 +9112.499987 + 21 +9185.048087 + 31 +0.0 + 0 +LINE + 5 +13C9 + 8 +0 + 62 + 0 + 10 +9087.499987 + 20 +9228.349357 + 30 +0.0 + 11 +9074.999987 + 21 +9249.999992 + 31 +0.0 + 0 +LINE + 5 +13CA + 8 +0 + 62 + 0 + 10 +9087.499987 + 20 +9185.048087 + 30 +0.0 + 11 +9074.999987 + 21 +9206.698722 + 31 +0.0 + 0 +LINE + 5 +13CB + 8 +0 + 62 + 0 + 10 +9049.999987 + 20 +9249.999992 + 30 +0.0 + 11 +9049.999982 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +13CC + 8 +0 + 62 + 0 + 10 +9049.999987 + 20 +9206.698722 + 30 +0.0 + 11 +9037.499987 + 21 +9228.349357 + 31 +0.0 + 0 +LINE + 5 +13CD + 8 +0 + 62 + 0 + 10 +9046.188004 + 20 +9170.0 + 30 +0.0 + 11 +9037.499987 + 21 +9185.048087 + 31 +0.0 + 0 +LINE + 5 +13CE + 8 +0 + 62 + 0 + 10 +9012.499987 + 20 +9228.349357 + 30 +0.0 + 11 +8999.999987 + 21 +9249.999992 + 31 +0.0 + 0 +LINE + 5 +13CF + 8 +0 + 62 + 0 + 10 +9012.499987 + 20 +9185.048087 + 30 +0.0 + 11 +8999.999987 + 21 +9206.698722 + 31 +0.0 + 0 +LINE + 5 +13D0 + 8 +0 + 62 + 0 + 10 +8974.999987 + 20 +9249.999992 + 30 +0.0 + 11 +8974.999983 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +13D1 + 8 +0 + 62 + 0 + 10 +8974.999987 + 20 +9206.698722 + 30 +0.0 + 11 +8962.499987 + 21 +9228.349357 + 31 +0.0 + 0 +LINE + 5 +13D2 + 8 +0 + 62 + 0 + 10 +8971.188004 + 20 +9170.0 + 30 +0.0 + 11 +8962.499987 + 21 +9185.048087 + 31 +0.0 + 0 +LINE + 5 +13D3 + 8 +0 + 62 + 0 + 10 +8937.499987 + 20 +9228.349357 + 30 +0.0 + 11 +8924.999987 + 21 +9249.999993 + 31 +0.0 + 0 +LINE + 5 +13D4 + 8 +0 + 62 + 0 + 10 +8937.499987 + 20 +9185.048087 + 30 +0.0 + 11 +8924.999987 + 21 +9206.698722 + 31 +0.0 + 0 +LINE + 5 +13D5 + 8 +0 + 62 + 0 + 10 +8899.999987 + 20 +9249.999993 + 30 +0.0 + 11 +8899.999983 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +13D6 + 8 +0 + 62 + 0 + 10 +8899.999987 + 20 +9206.698722 + 30 +0.0 + 11 +8887.499987 + 21 +9228.349358 + 31 +0.0 + 0 +LINE + 5 +13D7 + 8 +0 + 62 + 0 + 10 +8896.188005 + 20 +9170.0 + 30 +0.0 + 11 +8887.499987 + 21 +9185.048087 + 31 +0.0 + 0 +LINE + 5 +13D8 + 8 +0 + 62 + 0 + 10 +8862.499987 + 20 +9228.349358 + 30 +0.0 + 11 +8849.999987 + 21 +9249.999993 + 31 +0.0 + 0 +LINE + 5 +13D9 + 8 +0 + 62 + 0 + 10 +8862.499987 + 20 +9185.048087 + 30 +0.0 + 11 +8849.999987 + 21 +9206.698723 + 31 +0.0 + 0 +LINE + 5 +13DA + 8 +0 + 62 + 0 + 10 +8824.999987 + 20 +9249.999993 + 30 +0.0 + 11 +8824.999983 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +13DB + 8 +0 + 62 + 0 + 10 +8824.999988 + 20 +9206.698723 + 30 +0.0 + 11 +8812.499988 + 21 +9228.349358 + 31 +0.0 + 0 +LINE + 5 +13DC + 8 +0 + 62 + 0 + 10 +8821.188005 + 20 +9170.0 + 30 +0.0 + 11 +8812.499988 + 21 +9185.048088 + 31 +0.0 + 0 +LINE + 5 +13DD + 8 +0 + 62 + 0 + 10 +8787.499988 + 20 +9228.349358 + 30 +0.0 + 11 +8774.999988 + 21 +9249.999993 + 31 +0.0 + 0 +LINE + 5 +13DE + 8 +0 + 62 + 0 + 10 +8787.499988 + 20 +9185.048088 + 30 +0.0 + 11 +8774.999988 + 21 +9206.698723 + 31 +0.0 + 0 +LINE + 5 +13DF + 8 +0 + 62 + 0 + 10 +8749.999988 + 20 +9249.999993 + 30 +0.0 + 11 +8749.999984 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +13E0 + 8 +0 + 62 + 0 + 10 +8749.999988 + 20 +9206.698723 + 30 +0.0 + 11 +8738.75 + 21 +9226.184273 + 31 +0.0 + 0 +LINE + 5 +13E1 + 8 +0 + 62 + 0 + 10 +8746.188005 + 20 +9170.0 + 30 +0.0 + 11 +8738.75 + 21 +9182.883003 + 31 +0.0 + 0 +LINE + 5 +13E2 + 8 +0 + 62 + 0 + 10 +9346.188003 + 20 +9170.0 + 30 +0.0 + 11 +9337.499986 + 21 +9185.048087 + 31 +0.0 + 0 +LINE + 5 +13E3 + 8 +0 + 62 + 0 + 10 +9312.499986 + 20 +9228.349357 + 30 +0.0 + 11 +9299.999986 + 21 +9249.999992 + 31 +0.0 + 0 +LINE + 5 +13E4 + 8 +0 + 62 + 0 + 10 +9349.999986 + 20 +9206.698722 + 30 +0.0 + 11 +9337.499986 + 21 +9228.349357 + 31 +0.0 + 0 +LINE + 5 +13E5 + 8 +0 + 62 + 0 + 10 +9387.499986 + 20 +9185.048086 + 30 +0.0 + 11 +9374.999986 + 21 +9206.698722 + 31 +0.0 + 0 +LINE + 5 +13E6 + 8 +0 + 62 + 0 + 10 +9349.999986 + 20 +9249.999992 + 30 +0.0 + 11 +9349.999981 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +13E7 + 8 +0 + 62 + 0 + 10 +9421.188002 + 20 +9170.0 + 30 +0.0 + 11 +9412.499986 + 21 +9185.048086 + 31 +0.0 + 0 +LINE + 5 +13E8 + 8 +0 + 62 + 0 + 10 +9387.499986 + 20 +9228.349357 + 30 +0.0 + 11 +9374.999986 + 21 +9249.999992 + 31 +0.0 + 0 +LINE + 5 +13E9 + 8 +0 + 62 + 0 + 10 +9424.999986 + 20 +9206.698721 + 30 +0.0 + 11 +9412.499986 + 21 +9228.349357 + 31 +0.0 + 0 +LINE + 5 +13EA + 8 +0 + 62 + 0 + 10 +9462.499985 + 20 +9185.048086 + 30 +0.0 + 11 +9449.999985 + 21 +9206.698721 + 31 +0.0 + 0 +LINE + 5 +13EB + 8 +0 + 62 + 0 + 10 +9424.999985 + 20 +9249.999992 + 30 +0.0 + 11 +9424.999981 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +13EC + 8 +0 + 62 + 0 + 10 +9496.188002 + 20 +9170.0 + 30 +0.0 + 11 +9487.499985 + 21 +9185.048086 + 31 +0.0 + 0 +LINE + 5 +13ED + 8 +0 + 62 + 0 + 10 +9462.499985 + 20 +9228.349356 + 30 +0.0 + 11 +9449.999985 + 21 +9249.999992 + 31 +0.0 + 0 +LINE + 5 +13EE + 8 +0 + 62 + 0 + 10 +9499.999985 + 20 +9206.698721 + 30 +0.0 + 11 +9487.499985 + 21 +9228.349356 + 31 +0.0 + 0 +LINE + 5 +13EF + 8 +0 + 62 + 0 + 10 +9537.499985 + 20 +9185.048086 + 30 +0.0 + 11 +9524.999985 + 21 +9206.698721 + 31 +0.0 + 0 +LINE + 5 +13F0 + 8 +0 + 62 + 0 + 10 +9499.999985 + 20 +9249.999991 + 30 +0.0 + 11 +9499.99998 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +13F1 + 8 +0 + 62 + 0 + 10 +9571.188002 + 20 +9170.0 + 30 +0.0 + 11 +9562.499985 + 21 +9185.048086 + 31 +0.0 + 0 +LINE + 5 +13F2 + 8 +0 + 62 + 0 + 10 +9537.499985 + 20 +9228.349356 + 30 +0.0 + 11 +9524.999985 + 21 +9249.999991 + 31 +0.0 + 0 +LINE + 5 +13F3 + 8 +0 + 62 + 0 + 10 +9574.999985 + 20 +9206.698721 + 30 +0.0 + 11 +9562.499985 + 21 +9228.349356 + 31 +0.0 + 0 +LINE + 5 +13F4 + 8 +0 + 62 + 0 + 10 +9612.499985 + 20 +9185.048086 + 30 +0.0 + 11 +9599.999985 + 21 +9206.698721 + 31 +0.0 + 0 +LINE + 5 +13F5 + 8 +0 + 62 + 0 + 10 +9574.999985 + 20 +9249.999991 + 30 +0.0 + 11 +9574.99998 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +13F6 + 8 +0 + 62 + 0 + 10 +9646.188001 + 20 +9170.0 + 30 +0.0 + 11 +9637.499985 + 21 +9185.048086 + 31 +0.0 + 0 +LINE + 5 +13F7 + 8 +0 + 62 + 0 + 10 +9612.499985 + 20 +9228.349356 + 30 +0.0 + 11 +9599.999985 + 21 +9249.999991 + 31 +0.0 + 0 +LINE + 5 +13F8 + 8 +0 + 62 + 0 + 10 +9649.999985 + 20 +9206.698721 + 30 +0.0 + 11 +9637.499985 + 21 +9228.349356 + 31 +0.0 + 0 +LINE + 5 +13F9 + 8 +0 + 62 + 0 + 10 +9687.499985 + 20 +9185.048086 + 30 +0.0 + 11 +9674.999985 + 21 +9206.698721 + 31 +0.0 + 0 +LINE + 5 +13FA + 8 +0 + 62 + 0 + 10 +9649.999985 + 20 +9249.999991 + 30 +0.0 + 11 +9649.99998 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +13FB + 8 +0 + 62 + 0 + 10 +9721.188001 + 20 +9170.0 + 30 +0.0 + 11 +9712.499985 + 21 +9185.048086 + 31 +0.0 + 0 +LINE + 5 +13FC + 8 +0 + 62 + 0 + 10 +9687.499985 + 20 +9228.349356 + 30 +0.0 + 11 +9674.999985 + 21 +9249.999991 + 31 +0.0 + 0 +LINE + 5 +13FD + 8 +0 + 62 + 0 + 10 +9724.999985 + 20 +9206.698721 + 30 +0.0 + 11 +9712.499985 + 21 +9228.349356 + 31 +0.0 + 0 +LINE + 5 +13FE + 8 +0 + 62 + 0 + 10 +9762.499985 + 20 +9185.048086 + 30 +0.0 + 11 +9749.999985 + 21 +9206.698721 + 31 +0.0 + 0 +LINE + 5 +13FF + 8 +0 + 62 + 0 + 10 +9724.999985 + 20 +9249.999991 + 30 +0.0 + 11 +9724.999979 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1400 + 8 +0 + 62 + 0 + 10 +9796.188001 + 20 +9170.0 + 30 +0.0 + 11 +9787.499984 + 21 +9185.048086 + 31 +0.0 + 0 +LINE + 5 +1401 + 8 +0 + 62 + 0 + 10 +9762.499984 + 20 +9228.349356 + 30 +0.0 + 11 +9749.999984 + 21 +9249.999991 + 31 +0.0 + 0 +LINE + 5 +1402 + 8 +0 + 62 + 0 + 10 +9799.999984 + 20 +9206.698721 + 30 +0.0 + 11 +9787.499984 + 21 +9228.349356 + 31 +0.0 + 0 +LINE + 5 +1403 + 8 +0 + 62 + 0 + 10 +9837.499984 + 20 +9185.048086 + 30 +0.0 + 11 +9824.999984 + 21 +9206.698721 + 31 +0.0 + 0 +LINE + 5 +1404 + 8 +0 + 62 + 0 + 10 +9799.999984 + 20 +9249.999991 + 30 +0.0 + 11 +9799.999979 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1405 + 8 +0 + 62 + 0 + 10 +9871.188 + 20 +9170.0 + 30 +0.0 + 11 +9862.499984 + 21 +9185.048086 + 31 +0.0 + 0 +LINE + 5 +1406 + 8 +0 + 62 + 0 + 10 +9837.499984 + 20 +9228.349356 + 30 +0.0 + 11 +9824.999984 + 21 +9249.999991 + 31 +0.0 + 0 +LINE + 5 +1407 + 8 +0 + 62 + 0 + 10 +9874.999984 + 20 +9206.698721 + 30 +0.0 + 11 +9862.499984 + 21 +9228.349356 + 31 +0.0 + 0 +LINE + 5 +1408 + 8 +0 + 62 + 0 + 10 +9874.999984 + 20 +9249.999991 + 30 +0.0 + 11 +9874.999979 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1409 + 8 +0 + 62 + 0 + 10 +9299.999986 + 20 +9206.698738 + 30 +0.0 + 11 +9312.499986 + 21 +9228.349373 + 31 +0.0 + 0 +LINE + 5 +140A + 8 +0 + 62 + 0 + 10 +9262.499986 + 20 +9185.048103 + 30 +0.0 + 11 +9274.999986 + 21 +9206.698738 + 31 +0.0 + 0 +LINE + 5 +140B + 8 +0 + 62 + 0 + 10 +9228.81196 + 20 +9170.0 + 30 +0.0 + 11 +9237.499986 + 21 +9185.048103 + 31 +0.0 + 0 +LINE + 5 +140C + 8 +0 + 62 + 0 + 10 +9262.499986 + 20 +9228.349373 + 30 +0.0 + 11 +9274.999981 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +140D + 8 +0 + 62 + 0 + 10 +9224.999986 + 20 +9206.698738 + 30 +0.0 + 11 +9237.499986 + 21 +9228.349373 + 31 +0.0 + 0 +LINE + 5 +140E + 8 +0 + 62 + 0 + 10 +9187.499986 + 20 +9185.048103 + 30 +0.0 + 11 +9199.999986 + 21 +9206.698738 + 31 +0.0 + 0 +LINE + 5 +140F + 8 +0 + 62 + 0 + 10 +9153.81196 + 20 +9170.0 + 30 +0.0 + 11 +9162.499986 + 21 +9185.048103 + 31 +0.0 + 0 +LINE + 5 +1410 + 8 +0 + 62 + 0 + 10 +9187.499986 + 20 +9228.349373 + 30 +0.0 + 11 +9199.999982 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1411 + 8 +0 + 62 + 0 + 10 +9149.999986 + 20 +9206.698738 + 30 +0.0 + 11 +9162.499986 + 21 +9228.349373 + 31 +0.0 + 0 +LINE + 5 +1412 + 8 +0 + 62 + 0 + 10 +9112.499986 + 20 +9185.048103 + 30 +0.0 + 11 +9124.999986 + 21 +9206.698738 + 31 +0.0 + 0 +LINE + 5 +1413 + 8 +0 + 62 + 0 + 10 +9078.81196 + 20 +9170.0 + 30 +0.0 + 11 +9087.499986 + 21 +9185.048103 + 31 +0.0 + 0 +LINE + 5 +1414 + 8 +0 + 62 + 0 + 10 +9112.499986 + 20 +9228.349373 + 30 +0.0 + 11 +9124.999982 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1415 + 8 +0 + 62 + 0 + 10 +9074.999987 + 20 +9206.698738 + 30 +0.0 + 11 +9087.499987 + 21 +9228.349373 + 31 +0.0 + 0 +LINE + 5 +1416 + 8 +0 + 62 + 0 + 10 +9037.499987 + 20 +9185.048102 + 30 +0.0 + 11 +9049.999987 + 21 +9206.698738 + 31 +0.0 + 0 +LINE + 5 +1417 + 8 +0 + 62 + 0 + 10 +9003.811961 + 20 +9170.0 + 30 +0.0 + 11 +9012.499987 + 21 +9185.048102 + 31 +0.0 + 0 +LINE + 5 +1418 + 8 +0 + 62 + 0 + 10 +9037.499987 + 20 +9228.349373 + 30 +0.0 + 11 +9049.999982 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1419 + 8 +0 + 62 + 0 + 10 +8999.999987 + 20 +9206.698737 + 30 +0.0 + 11 +9012.499987 + 21 +9228.349373 + 31 +0.0 + 0 +LINE + 5 +141A + 8 +0 + 62 + 0 + 10 +8962.499987 + 20 +9185.048102 + 30 +0.0 + 11 +8974.999987 + 21 +9206.698737 + 31 +0.0 + 0 +LINE + 5 +141B + 8 +0 + 62 + 0 + 10 +8928.811961 + 20 +9170.0 + 30 +0.0 + 11 +8937.499987 + 21 +9185.048102 + 31 +0.0 + 0 +LINE + 5 +141C + 8 +0 + 62 + 0 + 10 +8962.499987 + 20 +9228.349372 + 30 +0.0 + 11 +8974.999983 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +141D + 8 +0 + 62 + 0 + 10 +8924.999987 + 20 +9206.698737 + 30 +0.0 + 11 +8937.499987 + 21 +9228.349372 + 31 +0.0 + 0 +LINE + 5 +141E + 8 +0 + 62 + 0 + 10 +8887.499987 + 20 +9185.048102 + 30 +0.0 + 11 +8899.999987 + 21 +9206.698737 + 31 +0.0 + 0 +LINE + 5 +141F + 8 +0 + 62 + 0 + 10 +8853.811961 + 20 +9170.0 + 30 +0.0 + 11 +8862.499987 + 21 +9185.048102 + 31 +0.0 + 0 +LINE + 5 +1420 + 8 +0 + 62 + 0 + 10 +8887.499987 + 20 +9228.349372 + 30 +0.0 + 11 +8899.999983 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1421 + 8 +0 + 62 + 0 + 10 +8849.999987 + 20 +9206.698737 + 30 +0.0 + 11 +8862.499987 + 21 +9228.349372 + 31 +0.0 + 0 +LINE + 5 +1422 + 8 +0 + 62 + 0 + 10 +8812.499987 + 20 +9185.048102 + 30 +0.0 + 11 +8824.999987 + 21 +9206.698737 + 31 +0.0 + 0 +LINE + 5 +1423 + 8 +0 + 62 + 0 + 10 +8778.811962 + 20 +9170.0 + 30 +0.0 + 11 +8787.499987 + 21 +9185.048102 + 31 +0.0 + 0 +LINE + 5 +1424 + 8 +0 + 62 + 0 + 10 +8812.499987 + 20 +9228.349372 + 30 +0.0 + 11 +8824.999983 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1425 + 8 +0 + 62 + 0 + 10 +8774.999988 + 20 +9206.698737 + 30 +0.0 + 11 +8787.499988 + 21 +9228.349372 + 31 +0.0 + 0 +LINE + 5 +1426 + 8 +0 + 62 + 0 + 10 +8738.75 + 20 +9187.213187 + 30 +0.0 + 11 +8749.999988 + 21 +9206.698737 + 31 +0.0 + 0 +LINE + 5 +1427 + 8 +0 + 62 + 0 + 10 +8738.75 + 20 +9230.514457 + 30 +0.0 + 11 +8749.999984 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1428 + 8 +0 + 62 + 0 + 10 +9303.811959 + 20 +9170.0 + 30 +0.0 + 11 +9312.499986 + 21 +9185.048103 + 31 +0.0 + 0 +LINE + 5 +1429 + 8 +0 + 62 + 0 + 10 +9337.499986 + 20 +9228.349373 + 30 +0.0 + 11 +9349.999981 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +142A + 8 +0 + 62 + 0 + 10 +9337.499986 + 20 +9185.048103 + 30 +0.0 + 11 +9349.999986 + 21 +9206.698738 + 31 +0.0 + 0 +LINE + 5 +142B + 8 +0 + 62 + 0 + 10 +9374.999986 + 20 +9206.698738 + 30 +0.0 + 11 +9387.499986 + 21 +9228.349373 + 31 +0.0 + 0 +LINE + 5 +142C + 8 +0 + 62 + 0 + 10 +9378.811959 + 20 +9170.0 + 30 +0.0 + 11 +9387.499985 + 21 +9185.048103 + 31 +0.0 + 0 +LINE + 5 +142D + 8 +0 + 62 + 0 + 10 +9412.499985 + 20 +9228.349373 + 30 +0.0 + 11 +9424.999981 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +142E + 8 +0 + 62 + 0 + 10 +9412.499985 + 20 +9185.048103 + 30 +0.0 + 11 +9424.999985 + 21 +9206.698738 + 31 +0.0 + 0 +LINE + 5 +142F + 8 +0 + 62 + 0 + 10 +9449.999985 + 20 +9206.698738 + 30 +0.0 + 11 +9462.499985 + 21 +9228.349373 + 31 +0.0 + 0 +LINE + 5 +1430 + 8 +0 + 62 + 0 + 10 +9453.811959 + 20 +9170.0 + 30 +0.0 + 11 +9462.499985 + 21 +9185.048103 + 31 +0.0 + 0 +LINE + 5 +1431 + 8 +0 + 62 + 0 + 10 +9487.499985 + 20 +9228.349373 + 30 +0.0 + 11 +9499.99998 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1432 + 8 +0 + 62 + 0 + 10 +9487.499985 + 20 +9185.048103 + 30 +0.0 + 11 +9499.999985 + 21 +9206.698738 + 31 +0.0 + 0 +LINE + 5 +1433 + 8 +0 + 62 + 0 + 10 +9524.999985 + 20 +9206.698738 + 30 +0.0 + 11 +9537.499985 + 21 +9228.349374 + 31 +0.0 + 0 +LINE + 5 +1434 + 8 +0 + 62 + 0 + 10 +9528.811958 + 20 +9170.0 + 30 +0.0 + 11 +9537.499985 + 21 +9185.048103 + 31 +0.0 + 0 +LINE + 5 +1435 + 8 +0 + 62 + 0 + 10 +9562.499985 + 20 +9228.349374 + 30 +0.0 + 11 +9574.99998 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1436 + 8 +0 + 62 + 0 + 10 +9562.499985 + 20 +9185.048103 + 30 +0.0 + 11 +9574.999985 + 21 +9206.698739 + 31 +0.0 + 0 +LINE + 5 +1437 + 8 +0 + 62 + 0 + 10 +9599.999985 + 20 +9206.698739 + 30 +0.0 + 11 +9612.499985 + 21 +9228.349374 + 31 +0.0 + 0 +LINE + 5 +1438 + 8 +0 + 62 + 0 + 10 +9603.811958 + 20 +9170.0 + 30 +0.0 + 11 +9612.499985 + 21 +9185.048104 + 31 +0.0 + 0 +LINE + 5 +1439 + 8 +0 + 62 + 0 + 10 +9637.499985 + 20 +9228.349374 + 30 +0.0 + 11 +9649.99998 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +143A + 8 +0 + 62 + 0 + 10 +9637.499985 + 20 +9185.048104 + 30 +0.0 + 11 +9649.999985 + 21 +9206.698739 + 31 +0.0 + 0 +LINE + 5 +143B + 8 +0 + 62 + 0 + 10 +9674.999985 + 20 +9206.698739 + 30 +0.0 + 11 +9687.499985 + 21 +9228.349374 + 31 +0.0 + 0 +LINE + 5 +143C + 8 +0 + 62 + 0 + 10 +9678.811958 + 20 +9170.0 + 30 +0.0 + 11 +9687.499985 + 21 +9185.048104 + 31 +0.0 + 0 +LINE + 5 +143D + 8 +0 + 62 + 0 + 10 +9712.499985 + 20 +9228.349374 + 30 +0.0 + 11 +9724.999979 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +143E + 8 +0 + 62 + 0 + 10 +9712.499984 + 20 +9185.048104 + 30 +0.0 + 11 +9724.999984 + 21 +9206.698739 + 31 +0.0 + 0 +LINE + 5 +143F + 8 +0 + 62 + 0 + 10 +9749.999984 + 20 +9206.698739 + 30 +0.0 + 11 +9762.499984 + 21 +9228.349374 + 31 +0.0 + 0 +LINE + 5 +1440 + 8 +0 + 62 + 0 + 10 +9753.811957 + 20 +9170.0 + 30 +0.0 + 11 +9762.499984 + 21 +9185.048104 + 31 +0.0 + 0 +LINE + 5 +1441 + 8 +0 + 62 + 0 + 10 +9787.499984 + 20 +9228.349374 + 30 +0.0 + 11 +9799.999979 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1442 + 8 +0 + 62 + 0 + 10 +9787.499984 + 20 +9185.048104 + 30 +0.0 + 11 +9799.999984 + 21 +9206.698739 + 31 +0.0 + 0 +LINE + 5 +1443 + 8 +0 + 62 + 0 + 10 +9824.999984 + 20 +9206.698739 + 30 +0.0 + 11 +9837.499984 + 21 +9228.349374 + 31 +0.0 + 0 +LINE + 5 +1444 + 8 +0 + 62 + 0 + 10 +9828.811957 + 20 +9170.0 + 30 +0.0 + 11 +9837.499984 + 21 +9185.048104 + 31 +0.0 + 0 +LINE + 5 +1445 + 8 +0 + 62 + 0 + 10 +9862.499984 + 20 +9228.349374 + 30 +0.0 + 11 +9874.999979 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1446 + 8 +0 + 62 + 0 + 10 +9862.499984 + 20 +9185.048104 + 30 +0.0 + 11 +9874.999984 + 21 +9206.698739 + 31 +0.0 + 0 +ENDBLK + 5 +1447 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X46 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X46 + 1 + + 0 +LINE + 5 +1449 + 8 +0 + 62 + 0 + 10 +11262.5 + 20 +9228.349365 + 30 +0.0 + 11 +11287.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +144A + 8 +0 + 62 + 0 + 10 +11337.5 + 20 +9228.349365 + 30 +0.0 + 11 +11362.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +144B + 8 +0 + 62 + 0 + 10 +11412.5 + 20 +9228.349365 + 30 +0.0 + 11 +11437.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +144C + 8 +0 + 62 + 0 + 10 +11487.5 + 20 +9228.349365 + 30 +0.0 + 11 +11512.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +144D + 8 +0 + 62 + 0 + 10 +11562.5 + 20 +9228.349365 + 30 +0.0 + 11 +11587.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +144E + 8 +0 + 62 + 0 + 10 +11637.5 + 20 +9228.349365 + 30 +0.0 + 11 +11662.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +144F + 8 +0 + 62 + 0 + 10 +11712.5 + 20 +9228.349365 + 30 +0.0 + 11 +11737.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1450 + 8 +0 + 62 + 0 + 10 +11787.5 + 20 +9228.349365 + 30 +0.0 + 11 +11812.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1451 + 8 +0 + 62 + 0 + 10 +11862.5 + 20 +9228.349365 + 30 +0.0 + 11 +11887.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1452 + 8 +0 + 62 + 0 + 10 +11937.5 + 20 +9228.349365 + 30 +0.0 + 11 +11962.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1453 + 8 +0 + 62 + 0 + 10 +12012.5 + 20 +9228.349365 + 30 +0.0 + 11 +12037.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1454 + 8 +0 + 62 + 0 + 10 +12087.5 + 20 +9228.349365 + 30 +0.0 + 11 +12112.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1455 + 8 +0 + 62 + 0 + 10 +12162.5 + 20 +9228.349365 + 30 +0.0 + 11 +12187.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1456 + 8 +0 + 62 + 0 + 10 +12237.5 + 20 +9228.349365 + 30 +0.0 + 11 +12262.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1457 + 8 +0 + 62 + 0 + 10 +12312.5 + 20 +9228.349365 + 30 +0.0 + 11 +12337.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1458 + 8 +0 + 62 + 0 + 10 +12387.5 + 20 +9228.349365 + 30 +0.0 + 11 +12412.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1459 + 8 +0 + 62 + 0 + 10 +12462.5 + 20 +9228.349365 + 30 +0.0 + 11 +12487.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +145A + 8 +0 + 62 + 0 + 10 +12537.5 + 20 +9228.349365 + 30 +0.0 + 11 +12562.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +145B + 8 +0 + 62 + 0 + 10 +12612.5 + 20 +9228.349365 + 30 +0.0 + 11 +12637.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +145C + 8 +0 + 62 + 0 + 10 +12687.5 + 20 +9228.349365 + 30 +0.0 + 11 +12712.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +145D + 8 +0 + 62 + 0 + 10 +12762.5 + 20 +9228.349365 + 30 +0.0 + 11 +12787.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +145E + 8 +0 + 62 + 0 + 10 +12837.5 + 20 +9228.349365 + 30 +0.0 + 11 +12862.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +145F + 8 +0 + 62 + 0 + 10 +12912.5 + 20 +9228.349365 + 30 +0.0 + 11 +12937.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1460 + 8 +0 + 62 + 0 + 10 +12987.5 + 20 +9228.349365 + 30 +0.0 + 11 +13012.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1461 + 8 +0 + 62 + 0 + 10 +13062.5 + 20 +9228.349365 + 30 +0.0 + 11 +13087.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1462 + 8 +0 + 62 + 0 + 10 +13137.5 + 20 +9228.349365 + 30 +0.0 + 11 +13162.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1463 + 8 +0 + 62 + 0 + 10 +13212.5 + 20 +9228.349365 + 30 +0.0 + 11 +13237.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1464 + 8 +0 + 62 + 0 + 10 +13287.5 + 20 +9228.349365 + 30 +0.0 + 11 +13312.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1465 + 8 +0 + 62 + 0 + 10 +13362.5 + 20 +9228.349365 + 30 +0.0 + 11 +13387.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1466 + 8 +0 + 62 + 0 + 10 +13437.5 + 20 +9228.349365 + 30 +0.0 + 11 +13462.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1467 + 8 +0 + 62 + 0 + 10 +13512.5 + 20 +9228.349365 + 30 +0.0 + 11 +13537.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1468 + 8 +0 + 62 + 0 + 10 +13587.5 + 20 +9228.349365 + 30 +0.0 + 11 +13612.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1469 + 8 +0 + 62 + 0 + 10 +13662.5 + 20 +9228.349365 + 30 +0.0 + 11 +13687.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +146A + 8 +0 + 62 + 0 + 10 +13737.5 + 20 +9228.349365 + 30 +0.0 + 11 +13762.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +146B + 8 +0 + 62 + 0 + 10 +13812.5 + 20 +9228.349365 + 30 +0.0 + 11 +13837.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +146C + 8 +0 + 62 + 0 + 10 +13887.5 + 20 +9228.349365 + 30 +0.0 + 11 +13912.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +146D + 8 +0 + 62 + 0 + 10 +13962.5 + 20 +9228.349365 + 30 +0.0 + 11 +13987.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +146E + 8 +0 + 62 + 0 + 10 +14037.5 + 20 +9228.349365 + 30 +0.0 + 11 +14062.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +146F + 8 +0 + 62 + 0 + 10 +14112.5 + 20 +9228.349365 + 30 +0.0 + 11 +14137.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1470 + 8 +0 + 62 + 0 + 10 +14187.5 + 20 +9228.349365 + 30 +0.0 + 11 +14212.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1471 + 8 +0 + 62 + 0 + 10 +14262.5 + 20 +9228.349365 + 30 +0.0 + 11 +14287.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1472 + 8 +0 + 62 + 0 + 10 +14337.5 + 20 +9228.349365 + 30 +0.0 + 11 +14362.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1473 + 8 +0 + 62 + 0 + 10 +14412.5 + 20 +9228.349365 + 30 +0.0 + 11 +14437.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1474 + 8 +0 + 62 + 0 + 10 +14487.5 + 20 +9228.349365 + 30 +0.0 + 11 +14512.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1475 + 8 +0 + 62 + 0 + 10 +14562.5 + 20 +9228.349365 + 30 +0.0 + 11 +14587.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1476 + 8 +0 + 62 + 0 + 10 +14637.5 + 20 +9228.349365 + 30 +0.0 + 11 +14662.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1477 + 8 +0 + 62 + 0 + 10 +14712.5 + 20 +9228.349365 + 30 +0.0 + 11 +14737.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1478 + 8 +0 + 62 + 0 + 10 +14787.5 + 20 +9228.349365 + 30 +0.0 + 11 +14812.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1479 + 8 +0 + 62 + 0 + 10 +14862.5 + 20 +9228.349365 + 30 +0.0 + 11 +14887.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +147A + 8 +0 + 62 + 0 + 10 +14937.5 + 20 +9228.349365 + 30 +0.0 + 11 +14962.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +147B + 8 +0 + 62 + 0 + 10 +15012.5 + 20 +9228.349365 + 30 +0.0 + 11 +15037.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +147C + 8 +0 + 62 + 0 + 10 +15087.5 + 20 +9228.349365 + 30 +0.0 + 11 +15112.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +147D + 8 +0 + 62 + 0 + 10 +15162.5 + 20 +9228.349365 + 30 +0.0 + 11 +15187.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +147E + 8 +0 + 62 + 0 + 10 +15237.5 + 20 +9228.349365 + 30 +0.0 + 11 +15262.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +147F + 8 +0 + 62 + 0 + 10 +15312.5 + 20 +9228.349365 + 30 +0.0 + 11 +15337.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1480 + 8 +0 + 62 + 0 + 10 +15387.5 + 20 +9228.349365 + 30 +0.0 + 11 +15412.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1481 + 8 +0 + 62 + 0 + 10 +15462.5 + 20 +9228.349365 + 30 +0.0 + 11 +15487.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1482 + 8 +0 + 62 + 0 + 10 +15537.5 + 20 +9228.349365 + 30 +0.0 + 11 +15562.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1483 + 8 +0 + 62 + 0 + 10 +15612.5 + 20 +9228.349365 + 30 +0.0 + 11 +15637.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1484 + 8 +0 + 62 + 0 + 10 +15687.5 + 20 +9228.349365 + 30 +0.0 + 11 +15712.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1485 + 8 +0 + 62 + 0 + 10 +15762.5 + 20 +9228.349365 + 30 +0.0 + 11 +15787.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1486 + 8 +0 + 62 + 0 + 10 +15837.5 + 20 +9228.349365 + 30 +0.0 + 11 +15862.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1487 + 8 +0 + 62 + 0 + 10 +15912.5 + 20 +9228.349365 + 30 +0.0 + 11 +15937.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1488 + 8 +0 + 62 + 0 + 10 +15987.5 + 20 +9228.349365 + 30 +0.0 + 11 +16012.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1489 + 8 +0 + 62 + 0 + 10 +16062.5 + 20 +9228.349365 + 30 +0.0 + 11 +16087.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +148A + 8 +0 + 62 + 0 + 10 +11238.75 + 20 +9206.69873 + 30 +0.0 + 11 +11250.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +148B + 8 +0 + 62 + 0 + 10 +11300.0 + 20 +9206.69873 + 30 +0.0 + 11 +11325.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +148C + 8 +0 + 62 + 0 + 10 +11375.0 + 20 +9206.69873 + 30 +0.0 + 11 +11400.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +148D + 8 +0 + 62 + 0 + 10 +11450.0 + 20 +9206.69873 + 30 +0.0 + 11 +11475.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +148E + 8 +0 + 62 + 0 + 10 +11525.0 + 20 +9206.69873 + 30 +0.0 + 11 +11550.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +148F + 8 +0 + 62 + 0 + 10 +11600.0 + 20 +9206.69873 + 30 +0.0 + 11 +11625.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +1490 + 8 +0 + 62 + 0 + 10 +11675.0 + 20 +9206.69873 + 30 +0.0 + 11 +11700.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +1491 + 8 +0 + 62 + 0 + 10 +11750.0 + 20 +9206.69873 + 30 +0.0 + 11 +11775.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +1492 + 8 +0 + 62 + 0 + 10 +11825.0 + 20 +9206.69873 + 30 +0.0 + 11 +11850.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +1493 + 8 +0 + 62 + 0 + 10 +11900.0 + 20 +9206.69873 + 30 +0.0 + 11 +11925.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +1494 + 8 +0 + 62 + 0 + 10 +11975.0 + 20 +9206.69873 + 30 +0.0 + 11 +12000.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +1495 + 8 +0 + 62 + 0 + 10 +12050.0 + 20 +9206.69873 + 30 +0.0 + 11 +12075.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +1496 + 8 +0 + 62 + 0 + 10 +12125.0 + 20 +9206.69873 + 30 +0.0 + 11 +12150.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +1497 + 8 +0 + 62 + 0 + 10 +12200.0 + 20 +9206.69873 + 30 +0.0 + 11 +12225.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +1498 + 8 +0 + 62 + 0 + 10 +12275.0 + 20 +9206.69873 + 30 +0.0 + 11 +12300.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +1499 + 8 +0 + 62 + 0 + 10 +12350.0 + 20 +9206.69873 + 30 +0.0 + 11 +12375.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +149A + 8 +0 + 62 + 0 + 10 +12425.0 + 20 +9206.69873 + 30 +0.0 + 11 +12450.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +149B + 8 +0 + 62 + 0 + 10 +12500.0 + 20 +9206.69873 + 30 +0.0 + 11 +12525.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +149C + 8 +0 + 62 + 0 + 10 +12575.0 + 20 +9206.69873 + 30 +0.0 + 11 +12600.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +149D + 8 +0 + 62 + 0 + 10 +12650.0 + 20 +9206.69873 + 30 +0.0 + 11 +12675.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +149E + 8 +0 + 62 + 0 + 10 +12725.0 + 20 +9206.69873 + 30 +0.0 + 11 +12750.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +149F + 8 +0 + 62 + 0 + 10 +12800.0 + 20 +9206.69873 + 30 +0.0 + 11 +12825.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14A0 + 8 +0 + 62 + 0 + 10 +12875.0 + 20 +9206.69873 + 30 +0.0 + 11 +12900.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14A1 + 8 +0 + 62 + 0 + 10 +12950.0 + 20 +9206.69873 + 30 +0.0 + 11 +12975.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14A2 + 8 +0 + 62 + 0 + 10 +13025.0 + 20 +9206.69873 + 30 +0.0 + 11 +13050.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14A3 + 8 +0 + 62 + 0 + 10 +13100.0 + 20 +9206.69873 + 30 +0.0 + 11 +13125.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14A4 + 8 +0 + 62 + 0 + 10 +13175.0 + 20 +9206.69873 + 30 +0.0 + 11 +13200.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14A5 + 8 +0 + 62 + 0 + 10 +13250.0 + 20 +9206.69873 + 30 +0.0 + 11 +13275.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14A6 + 8 +0 + 62 + 0 + 10 +13325.0 + 20 +9206.69873 + 30 +0.0 + 11 +13350.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14A7 + 8 +0 + 62 + 0 + 10 +13400.0 + 20 +9206.69873 + 30 +0.0 + 11 +13425.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14A8 + 8 +0 + 62 + 0 + 10 +13475.0 + 20 +9206.69873 + 30 +0.0 + 11 +13500.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14A9 + 8 +0 + 62 + 0 + 10 +13550.0 + 20 +9206.69873 + 30 +0.0 + 11 +13575.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14AA + 8 +0 + 62 + 0 + 10 +13625.0 + 20 +9206.69873 + 30 +0.0 + 11 +13650.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14AB + 8 +0 + 62 + 0 + 10 +13700.0 + 20 +9206.69873 + 30 +0.0 + 11 +13725.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14AC + 8 +0 + 62 + 0 + 10 +13775.0 + 20 +9206.69873 + 30 +0.0 + 11 +13800.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14AD + 8 +0 + 62 + 0 + 10 +13850.0 + 20 +9206.69873 + 30 +0.0 + 11 +13875.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14AE + 8 +0 + 62 + 0 + 10 +13925.0 + 20 +9206.69873 + 30 +0.0 + 11 +13950.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14AF + 8 +0 + 62 + 0 + 10 +14000.0 + 20 +9206.69873 + 30 +0.0 + 11 +14025.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14B0 + 8 +0 + 62 + 0 + 10 +14075.0 + 20 +9206.69873 + 30 +0.0 + 11 +14100.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14B1 + 8 +0 + 62 + 0 + 10 +14150.0 + 20 +9206.69873 + 30 +0.0 + 11 +14175.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14B2 + 8 +0 + 62 + 0 + 10 +14225.0 + 20 +9206.69873 + 30 +0.0 + 11 +14250.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14B3 + 8 +0 + 62 + 0 + 10 +14300.0 + 20 +9206.69873 + 30 +0.0 + 11 +14325.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14B4 + 8 +0 + 62 + 0 + 10 +14375.0 + 20 +9206.69873 + 30 +0.0 + 11 +14400.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14B5 + 8 +0 + 62 + 0 + 10 +14450.0 + 20 +9206.69873 + 30 +0.0 + 11 +14475.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14B6 + 8 +0 + 62 + 0 + 10 +14525.0 + 20 +9206.69873 + 30 +0.0 + 11 +14550.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14B7 + 8 +0 + 62 + 0 + 10 +14600.0 + 20 +9206.69873 + 30 +0.0 + 11 +14625.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14B8 + 8 +0 + 62 + 0 + 10 +14675.0 + 20 +9206.69873 + 30 +0.0 + 11 +14700.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14B9 + 8 +0 + 62 + 0 + 10 +14750.0 + 20 +9206.69873 + 30 +0.0 + 11 +14775.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14BA + 8 +0 + 62 + 0 + 10 +14825.0 + 20 +9206.69873 + 30 +0.0 + 11 +14850.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14BB + 8 +0 + 62 + 0 + 10 +14900.0 + 20 +9206.69873 + 30 +0.0 + 11 +14925.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14BC + 8 +0 + 62 + 0 + 10 +14975.0 + 20 +9206.69873 + 30 +0.0 + 11 +15000.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14BD + 8 +0 + 62 + 0 + 10 +15050.0 + 20 +9206.69873 + 30 +0.0 + 11 +15075.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14BE + 8 +0 + 62 + 0 + 10 +15125.0 + 20 +9206.69873 + 30 +0.0 + 11 +15150.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14BF + 8 +0 + 62 + 0 + 10 +15200.0 + 20 +9206.69873 + 30 +0.0 + 11 +15225.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14C0 + 8 +0 + 62 + 0 + 10 +15275.0 + 20 +9206.69873 + 30 +0.0 + 11 +15300.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14C1 + 8 +0 + 62 + 0 + 10 +15350.0 + 20 +9206.69873 + 30 +0.0 + 11 +15375.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14C2 + 8 +0 + 62 + 0 + 10 +15425.0 + 20 +9206.69873 + 30 +0.0 + 11 +15450.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14C3 + 8 +0 + 62 + 0 + 10 +15500.0 + 20 +9206.69873 + 30 +0.0 + 11 +15525.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14C4 + 8 +0 + 62 + 0 + 10 +15575.0 + 20 +9206.69873 + 30 +0.0 + 11 +15600.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14C5 + 8 +0 + 62 + 0 + 10 +15650.0 + 20 +9206.69873 + 30 +0.0 + 11 +15675.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14C6 + 8 +0 + 62 + 0 + 10 +15725.0 + 20 +9206.69873 + 30 +0.0 + 11 +15750.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14C7 + 8 +0 + 62 + 0 + 10 +15800.0 + 20 +9206.69873 + 30 +0.0 + 11 +15825.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14C8 + 8 +0 + 62 + 0 + 10 +15875.0 + 20 +9206.69873 + 30 +0.0 + 11 +15900.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14C9 + 8 +0 + 62 + 0 + 10 +15950.0 + 20 +9206.69873 + 30 +0.0 + 11 +15975.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14CA + 8 +0 + 62 + 0 + 10 +16025.0 + 20 +9206.69873 + 30 +0.0 + 11 +16050.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14CB + 8 +0 + 62 + 0 + 10 +16100.0 + 20 +9206.69873 + 30 +0.0 + 11 +16125.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +14CC + 8 +0 + 62 + 0 + 10 +11262.5 + 20 +9185.048095 + 30 +0.0 + 11 +11287.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14CD + 8 +0 + 62 + 0 + 10 +11337.5 + 20 +9185.048095 + 30 +0.0 + 11 +11362.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14CE + 8 +0 + 62 + 0 + 10 +11412.5 + 20 +9185.048095 + 30 +0.0 + 11 +11437.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14CF + 8 +0 + 62 + 0 + 10 +11487.5 + 20 +9185.048095 + 30 +0.0 + 11 +11512.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14D0 + 8 +0 + 62 + 0 + 10 +11562.5 + 20 +9185.048095 + 30 +0.0 + 11 +11587.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14D1 + 8 +0 + 62 + 0 + 10 +11637.5 + 20 +9185.048095 + 30 +0.0 + 11 +11662.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14D2 + 8 +0 + 62 + 0 + 10 +11712.5 + 20 +9185.048095 + 30 +0.0 + 11 +11737.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14D3 + 8 +0 + 62 + 0 + 10 +11787.5 + 20 +9185.048095 + 30 +0.0 + 11 +11812.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14D4 + 8 +0 + 62 + 0 + 10 +11862.5 + 20 +9185.048095 + 30 +0.0 + 11 +11887.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14D5 + 8 +0 + 62 + 0 + 10 +11937.5 + 20 +9185.048095 + 30 +0.0 + 11 +11962.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14D6 + 8 +0 + 62 + 0 + 10 +12012.5 + 20 +9185.048095 + 30 +0.0 + 11 +12037.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14D7 + 8 +0 + 62 + 0 + 10 +12087.5 + 20 +9185.048095 + 30 +0.0 + 11 +12112.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14D8 + 8 +0 + 62 + 0 + 10 +12162.5 + 20 +9185.048095 + 30 +0.0 + 11 +12187.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14D9 + 8 +0 + 62 + 0 + 10 +12237.5 + 20 +9185.048095 + 30 +0.0 + 11 +12262.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14DA + 8 +0 + 62 + 0 + 10 +12312.5 + 20 +9185.048095 + 30 +0.0 + 11 +12337.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14DB + 8 +0 + 62 + 0 + 10 +12387.5 + 20 +9185.048095 + 30 +0.0 + 11 +12412.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14DC + 8 +0 + 62 + 0 + 10 +12462.5 + 20 +9185.048095 + 30 +0.0 + 11 +12487.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14DD + 8 +0 + 62 + 0 + 10 +12537.5 + 20 +9185.048095 + 30 +0.0 + 11 +12562.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14DE + 8 +0 + 62 + 0 + 10 +12612.5 + 20 +9185.048095 + 30 +0.0 + 11 +12637.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14DF + 8 +0 + 62 + 0 + 10 +12687.5 + 20 +9185.048095 + 30 +0.0 + 11 +12712.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14E0 + 8 +0 + 62 + 0 + 10 +12762.5 + 20 +9185.048095 + 30 +0.0 + 11 +12787.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14E1 + 8 +0 + 62 + 0 + 10 +12837.5 + 20 +9185.048095 + 30 +0.0 + 11 +12862.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14E2 + 8 +0 + 62 + 0 + 10 +12912.5 + 20 +9185.048095 + 30 +0.0 + 11 +12937.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14E3 + 8 +0 + 62 + 0 + 10 +12987.5 + 20 +9185.048095 + 30 +0.0 + 11 +13012.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14E4 + 8 +0 + 62 + 0 + 10 +13062.5 + 20 +9185.048095 + 30 +0.0 + 11 +13087.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14E5 + 8 +0 + 62 + 0 + 10 +13137.5 + 20 +9185.048095 + 30 +0.0 + 11 +13162.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14E6 + 8 +0 + 62 + 0 + 10 +13212.5 + 20 +9185.048095 + 30 +0.0 + 11 +13237.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14E7 + 8 +0 + 62 + 0 + 10 +13287.5 + 20 +9185.048095 + 30 +0.0 + 11 +13312.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14E8 + 8 +0 + 62 + 0 + 10 +13362.5 + 20 +9185.048095 + 30 +0.0 + 11 +13387.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14E9 + 8 +0 + 62 + 0 + 10 +13437.5 + 20 +9185.048095 + 30 +0.0 + 11 +13462.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14EA + 8 +0 + 62 + 0 + 10 +13512.5 + 20 +9185.048095 + 30 +0.0 + 11 +13537.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14EB + 8 +0 + 62 + 0 + 10 +13587.5 + 20 +9185.048095 + 30 +0.0 + 11 +13612.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14EC + 8 +0 + 62 + 0 + 10 +13662.5 + 20 +9185.048095 + 30 +0.0 + 11 +13687.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14ED + 8 +0 + 62 + 0 + 10 +13737.5 + 20 +9185.048095 + 30 +0.0 + 11 +13762.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14EE + 8 +0 + 62 + 0 + 10 +13812.5 + 20 +9185.048095 + 30 +0.0 + 11 +13837.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14EF + 8 +0 + 62 + 0 + 10 +13887.5 + 20 +9185.048095 + 30 +0.0 + 11 +13912.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14F0 + 8 +0 + 62 + 0 + 10 +13962.5 + 20 +9185.048095 + 30 +0.0 + 11 +13987.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14F1 + 8 +0 + 62 + 0 + 10 +14037.5 + 20 +9185.048095 + 30 +0.0 + 11 +14062.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14F2 + 8 +0 + 62 + 0 + 10 +14112.5 + 20 +9185.048095 + 30 +0.0 + 11 +14137.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14F3 + 8 +0 + 62 + 0 + 10 +14187.5 + 20 +9185.048095 + 30 +0.0 + 11 +14212.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14F4 + 8 +0 + 62 + 0 + 10 +14262.5 + 20 +9185.048095 + 30 +0.0 + 11 +14287.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14F5 + 8 +0 + 62 + 0 + 10 +14337.5 + 20 +9185.048095 + 30 +0.0 + 11 +14362.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14F6 + 8 +0 + 62 + 0 + 10 +14412.5 + 20 +9185.048095 + 30 +0.0 + 11 +14437.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14F7 + 8 +0 + 62 + 0 + 10 +14487.5 + 20 +9185.048095 + 30 +0.0 + 11 +14512.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14F8 + 8 +0 + 62 + 0 + 10 +14562.5 + 20 +9185.048095 + 30 +0.0 + 11 +14587.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14F9 + 8 +0 + 62 + 0 + 10 +14637.5 + 20 +9185.048095 + 30 +0.0 + 11 +14662.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14FA + 8 +0 + 62 + 0 + 10 +14712.5 + 20 +9185.048095 + 30 +0.0 + 11 +14737.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14FB + 8 +0 + 62 + 0 + 10 +14787.5 + 20 +9185.048095 + 30 +0.0 + 11 +14812.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14FC + 8 +0 + 62 + 0 + 10 +14862.5 + 20 +9185.048095 + 30 +0.0 + 11 +14887.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14FD + 8 +0 + 62 + 0 + 10 +14937.5 + 20 +9185.048095 + 30 +0.0 + 11 +14962.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14FE + 8 +0 + 62 + 0 + 10 +15012.5 + 20 +9185.048095 + 30 +0.0 + 11 +15037.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +14FF + 8 +0 + 62 + 0 + 10 +15087.5 + 20 +9185.048095 + 30 +0.0 + 11 +15112.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +1500 + 8 +0 + 62 + 0 + 10 +15162.5 + 20 +9185.048095 + 30 +0.0 + 11 +15187.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +1501 + 8 +0 + 62 + 0 + 10 +15237.5 + 20 +9185.048095 + 30 +0.0 + 11 +15262.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +1502 + 8 +0 + 62 + 0 + 10 +15312.5 + 20 +9185.048095 + 30 +0.0 + 11 +15337.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +1503 + 8 +0 + 62 + 0 + 10 +15387.5 + 20 +9185.048095 + 30 +0.0 + 11 +15412.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +1504 + 8 +0 + 62 + 0 + 10 +15462.5 + 20 +9185.048095 + 30 +0.0 + 11 +15487.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +1505 + 8 +0 + 62 + 0 + 10 +15537.5 + 20 +9185.048095 + 30 +0.0 + 11 +15562.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +1506 + 8 +0 + 62 + 0 + 10 +15612.5 + 20 +9185.048095 + 30 +0.0 + 11 +15637.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +1507 + 8 +0 + 62 + 0 + 10 +15687.5 + 20 +9185.048095 + 30 +0.0 + 11 +15712.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +1508 + 8 +0 + 62 + 0 + 10 +15762.5 + 20 +9185.048095 + 30 +0.0 + 11 +15787.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +1509 + 8 +0 + 62 + 0 + 10 +15837.5 + 20 +9185.048095 + 30 +0.0 + 11 +15862.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +150A + 8 +0 + 62 + 0 + 10 +15912.5 + 20 +9185.048095 + 30 +0.0 + 11 +15937.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +150B + 8 +0 + 62 + 0 + 10 +15987.5 + 20 +9185.048095 + 30 +0.0 + 11 +16012.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +150C + 8 +0 + 62 + 0 + 10 +16062.5 + 20 +9185.048095 + 30 +0.0 + 11 +16087.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +150D + 8 +0 + 62 + 0 + 10 +13696.187984 + 20 +9170.0 + 30 +0.0 + 11 +13687.499972 + 21 +9185.048078 + 31 +0.0 + 0 +LINE + 5 +150E + 8 +0 + 62 + 0 + 10 +13662.499972 + 20 +9228.349349 + 30 +0.0 + 11 +13649.999972 + 21 +9249.999984 + 31 +0.0 + 0 +LINE + 5 +150F + 8 +0 + 62 + 0 + 10 +13662.499972 + 20 +9185.048078 + 30 +0.0 + 11 +13649.999972 + 21 +9206.698713 + 31 +0.0 + 0 +LINE + 5 +1510 + 8 +0 + 62 + 0 + 10 +13624.999972 + 20 +9249.999984 + 30 +0.0 + 11 +13624.999962 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1511 + 8 +0 + 62 + 0 + 10 +13624.999972 + 20 +9206.698714 + 30 +0.0 + 11 +13612.499972 + 21 +9228.349349 + 31 +0.0 + 0 +LINE + 5 +1512 + 8 +0 + 62 + 0 + 10 +13621.187984 + 20 +9170.0 + 30 +0.0 + 11 +13612.499972 + 21 +9185.048078 + 31 +0.0 + 0 +LINE + 5 +1513 + 8 +0 + 62 + 0 + 10 +13587.499972 + 20 +9228.349349 + 30 +0.0 + 11 +13574.999972 + 21 +9249.999984 + 31 +0.0 + 0 +LINE + 5 +1514 + 8 +0 + 62 + 0 + 10 +13587.499972 + 20 +9185.048079 + 30 +0.0 + 11 +13574.999972 + 21 +9206.698714 + 31 +0.0 + 0 +LINE + 5 +1515 + 8 +0 + 62 + 0 + 10 +13549.999972 + 20 +9249.999984 + 30 +0.0 + 11 +13549.999963 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1516 + 8 +0 + 62 + 0 + 10 +13549.999972 + 20 +9206.698714 + 30 +0.0 + 11 +13537.499972 + 21 +9228.349349 + 31 +0.0 + 0 +LINE + 5 +1517 + 8 +0 + 62 + 0 + 10 +13546.187984 + 20 +9170.0 + 30 +0.0 + 11 +13537.499972 + 21 +9185.048079 + 31 +0.0 + 0 +LINE + 5 +1518 + 8 +0 + 62 + 0 + 10 +13512.499972 + 20 +9228.349349 + 30 +0.0 + 11 +13499.999972 + 21 +9249.999984 + 31 +0.0 + 0 +LINE + 5 +1519 + 8 +0 + 62 + 0 + 10 +13512.499972 + 20 +9185.048079 + 30 +0.0 + 11 +13499.999972 + 21 +9206.698714 + 31 +0.0 + 0 +LINE + 5 +151A + 8 +0 + 62 + 0 + 10 +13474.999972 + 20 +9249.999984 + 30 +0.0 + 11 +13474.999963 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +151B + 8 +0 + 62 + 0 + 10 +13474.999972 + 20 +9206.698714 + 30 +0.0 + 11 +13462.499972 + 21 +9228.349349 + 31 +0.0 + 0 +LINE + 5 +151C + 8 +0 + 62 + 0 + 10 +13471.187985 + 20 +9170.0 + 30 +0.0 + 11 +13462.499972 + 21 +9185.048079 + 31 +0.0 + 0 +LINE + 5 +151D + 8 +0 + 62 + 0 + 10 +13437.499972 + 20 +9228.349349 + 30 +0.0 + 11 +13424.999972 + 21 +9249.999984 + 31 +0.0 + 0 +LINE + 5 +151E + 8 +0 + 62 + 0 + 10 +13437.499972 + 20 +9185.048079 + 30 +0.0 + 11 +13424.999972 + 21 +9206.698714 + 31 +0.0 + 0 +LINE + 5 +151F + 8 +0 + 62 + 0 + 10 +13399.999972 + 20 +9249.999984 + 30 +0.0 + 11 +13399.999963 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1520 + 8 +0 + 62 + 0 + 10 +13399.999973 + 20 +9206.698714 + 30 +0.0 + 11 +13387.499973 + 21 +9228.349349 + 31 +0.0 + 0 +LINE + 5 +1521 + 8 +0 + 62 + 0 + 10 +13396.187985 + 20 +9170.0 + 30 +0.0 + 11 +13387.499973 + 21 +9185.048079 + 31 +0.0 + 0 +LINE + 5 +1522 + 8 +0 + 62 + 0 + 10 +13362.499973 + 20 +9228.349349 + 30 +0.0 + 11 +13349.999973 + 21 +9249.999984 + 31 +0.0 + 0 +LINE + 5 +1523 + 8 +0 + 62 + 0 + 10 +13362.499973 + 20 +9185.048079 + 30 +0.0 + 11 +13349.999973 + 21 +9206.698714 + 31 +0.0 + 0 +LINE + 5 +1524 + 8 +0 + 62 + 0 + 10 +13324.999973 + 20 +9249.999984 + 30 +0.0 + 11 +13324.999964 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1525 + 8 +0 + 62 + 0 + 10 +13324.999973 + 20 +9206.698714 + 30 +0.0 + 11 +13312.499973 + 21 +9228.349349 + 31 +0.0 + 0 +LINE + 5 +1526 + 8 +0 + 62 + 0 + 10 +13321.187985 + 20 +9170.0 + 30 +0.0 + 11 +13312.499973 + 21 +9185.048079 + 31 +0.0 + 0 +LINE + 5 +1527 + 8 +0 + 62 + 0 + 10 +13287.499973 + 20 +9228.349349 + 30 +0.0 + 11 +13274.999973 + 21 +9249.999984 + 31 +0.0 + 0 +LINE + 5 +1528 + 8 +0 + 62 + 0 + 10 +13287.499973 + 20 +9185.048079 + 30 +0.0 + 11 +13274.999973 + 21 +9206.698714 + 31 +0.0 + 0 +LINE + 5 +1529 + 8 +0 + 62 + 0 + 10 +13249.999973 + 20 +9249.999984 + 30 +0.0 + 11 +13249.999964 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +152A + 8 +0 + 62 + 0 + 10 +13249.999973 + 20 +9206.698714 + 30 +0.0 + 11 +13237.499973 + 21 +9228.349349 + 31 +0.0 + 0 +LINE + 5 +152B + 8 +0 + 62 + 0 + 10 +13246.187986 + 20 +9170.0 + 30 +0.0 + 11 +13237.499973 + 21 +9185.048079 + 31 +0.0 + 0 +LINE + 5 +152C + 8 +0 + 62 + 0 + 10 +13212.499973 + 20 +9228.349349 + 30 +0.0 + 11 +13199.999973 + 21 +9249.999984 + 31 +0.0 + 0 +LINE + 5 +152D + 8 +0 + 62 + 0 + 10 +13212.499973 + 20 +9185.048079 + 30 +0.0 + 11 +13199.999973 + 21 +9206.698714 + 31 +0.0 + 0 +LINE + 5 +152E + 8 +0 + 62 + 0 + 10 +13174.999973 + 20 +9249.999985 + 30 +0.0 + 11 +13174.999964 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +152F + 8 +0 + 62 + 0 + 10 +13174.999973 + 20 +9206.698714 + 30 +0.0 + 11 +13162.499973 + 21 +9228.349349 + 31 +0.0 + 0 +LINE + 5 +1530 + 8 +0 + 62 + 0 + 10 +13171.187986 + 20 +9170.0 + 30 +0.0 + 11 +13162.499973 + 21 +9185.048079 + 31 +0.0 + 0 +LINE + 5 +1531 + 8 +0 + 62 + 0 + 10 +13137.499973 + 20 +9228.34935 + 30 +0.0 + 11 +13124.999973 + 21 +9249.999985 + 31 +0.0 + 0 +LINE + 5 +1532 + 8 +0 + 62 + 0 + 10 +13137.499973 + 20 +9185.048079 + 30 +0.0 + 11 +13124.999973 + 21 +9206.698714 + 31 +0.0 + 0 +LINE + 5 +1533 + 8 +0 + 62 + 0 + 10 +13099.999973 + 20 +9249.999985 + 30 +0.0 + 11 +13099.999965 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1534 + 8 +0 + 62 + 0 + 10 +13099.999974 + 20 +9206.698715 + 30 +0.0 + 11 +13087.499974 + 21 +9228.34935 + 31 +0.0 + 0 +LINE + 5 +1535 + 8 +0 + 62 + 0 + 10 +13096.187986 + 20 +9170.0 + 30 +0.0 + 11 +13087.499974 + 21 +9185.048079 + 31 +0.0 + 0 +LINE + 5 +1536 + 8 +0 + 62 + 0 + 10 +13062.499974 + 20 +9228.34935 + 30 +0.0 + 11 +13049.999974 + 21 +9249.999985 + 31 +0.0 + 0 +LINE + 5 +1537 + 8 +0 + 62 + 0 + 10 +13062.499974 + 20 +9185.04808 + 30 +0.0 + 11 +13049.999974 + 21 +9206.698715 + 31 +0.0 + 0 +LINE + 5 +1538 + 8 +0 + 62 + 0 + 10 +13024.999974 + 20 +9249.999985 + 30 +0.0 + 11 +13024.999965 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1539 + 8 +0 + 62 + 0 + 10 +13024.999974 + 20 +9206.698715 + 30 +0.0 + 11 +13012.499974 + 21 +9228.34935 + 31 +0.0 + 0 +LINE + 5 +153A + 8 +0 + 62 + 0 + 10 +13021.187987 + 20 +9170.0 + 30 +0.0 + 11 +13012.499974 + 21 +9185.04808 + 31 +0.0 + 0 +LINE + 5 +153B + 8 +0 + 62 + 0 + 10 +12987.499974 + 20 +9228.34935 + 30 +0.0 + 11 +12974.999974 + 21 +9249.999985 + 31 +0.0 + 0 +LINE + 5 +153C + 8 +0 + 62 + 0 + 10 +12987.499974 + 20 +9185.04808 + 30 +0.0 + 11 +12974.999974 + 21 +9206.698715 + 31 +0.0 + 0 +LINE + 5 +153D + 8 +0 + 62 + 0 + 10 +12949.999974 + 20 +9249.999985 + 30 +0.0 + 11 +12949.999965 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +153E + 8 +0 + 62 + 0 + 10 +12949.999974 + 20 +9206.698715 + 30 +0.0 + 11 +12937.499974 + 21 +9228.34935 + 31 +0.0 + 0 +LINE + 5 +153F + 8 +0 + 62 + 0 + 10 +12946.187987 + 20 +9170.0 + 30 +0.0 + 11 +12937.499974 + 21 +9185.04808 + 31 +0.0 + 0 +LINE + 5 +1540 + 8 +0 + 62 + 0 + 10 +12912.499974 + 20 +9228.34935 + 30 +0.0 + 11 +12899.999974 + 21 +9249.999985 + 31 +0.0 + 0 +LINE + 5 +1541 + 8 +0 + 62 + 0 + 10 +12912.499974 + 20 +9185.04808 + 30 +0.0 + 11 +12899.999974 + 21 +9206.698715 + 31 +0.0 + 0 +LINE + 5 +1542 + 8 +0 + 62 + 0 + 10 +12874.999974 + 20 +9249.999985 + 30 +0.0 + 11 +12874.999966 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1543 + 8 +0 + 62 + 0 + 10 +12874.999974 + 20 +9206.698715 + 30 +0.0 + 11 +12862.499974 + 21 +9228.34935 + 31 +0.0 + 0 +LINE + 5 +1544 + 8 +0 + 62 + 0 + 10 +12871.187987 + 20 +9170.0 + 30 +0.0 + 11 +12862.499974 + 21 +9185.04808 + 31 +0.0 + 0 +LINE + 5 +1545 + 8 +0 + 62 + 0 + 10 +12837.499974 + 20 +9228.34935 + 30 +0.0 + 11 +12824.999974 + 21 +9249.999985 + 31 +0.0 + 0 +LINE + 5 +1546 + 8 +0 + 62 + 0 + 10 +12837.499974 + 20 +9185.04808 + 30 +0.0 + 11 +12824.999974 + 21 +9206.698715 + 31 +0.0 + 0 +LINE + 5 +1547 + 8 +0 + 62 + 0 + 10 +12799.999974 + 20 +9249.999985 + 30 +0.0 + 11 +12799.999966 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1548 + 8 +0 + 62 + 0 + 10 +12799.999975 + 20 +9206.698715 + 30 +0.0 + 11 +12787.499975 + 21 +9228.34935 + 31 +0.0 + 0 +LINE + 5 +1549 + 8 +0 + 62 + 0 + 10 +12796.187988 + 20 +9170.0 + 30 +0.0 + 11 +12787.499975 + 21 +9185.04808 + 31 +0.0 + 0 +LINE + 5 +154A + 8 +0 + 62 + 0 + 10 +12762.499975 + 20 +9228.34935 + 30 +0.0 + 11 +12749.999975 + 21 +9249.999985 + 31 +0.0 + 0 +LINE + 5 +154B + 8 +0 + 62 + 0 + 10 +12762.499975 + 20 +9185.04808 + 30 +0.0 + 11 +12749.999975 + 21 +9206.698715 + 31 +0.0 + 0 +LINE + 5 +154C + 8 +0 + 62 + 0 + 10 +12724.999975 + 20 +9249.999985 + 30 +0.0 + 11 +12724.999966 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +154D + 8 +0 + 62 + 0 + 10 +12724.999975 + 20 +9206.698715 + 30 +0.0 + 11 +12712.499975 + 21 +9228.34935 + 31 +0.0 + 0 +LINE + 5 +154E + 8 +0 + 62 + 0 + 10 +12721.187988 + 20 +9170.0 + 30 +0.0 + 11 +12712.499975 + 21 +9185.04808 + 31 +0.0 + 0 +LINE + 5 +154F + 8 +0 + 62 + 0 + 10 +12687.499975 + 20 +9228.34935 + 30 +0.0 + 11 +12674.999975 + 21 +9249.999985 + 31 +0.0 + 0 +LINE + 5 +1550 + 8 +0 + 62 + 0 + 10 +12687.499975 + 20 +9185.04808 + 30 +0.0 + 11 +12674.999975 + 21 +9206.698715 + 31 +0.0 + 0 +LINE + 5 +1551 + 8 +0 + 62 + 0 + 10 +12649.999975 + 20 +9249.999986 + 30 +0.0 + 11 +12649.999967 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1552 + 8 +0 + 62 + 0 + 10 +12649.999975 + 20 +9206.698715 + 30 +0.0 + 11 +12637.499975 + 21 +9228.34935 + 31 +0.0 + 0 +LINE + 5 +1553 + 8 +0 + 62 + 0 + 10 +12646.187988 + 20 +9170.0 + 30 +0.0 + 11 +12637.499975 + 21 +9185.04808 + 31 +0.0 + 0 +LINE + 5 +1554 + 8 +0 + 62 + 0 + 10 +12612.499975 + 20 +9228.349351 + 30 +0.0 + 11 +12599.999975 + 21 +9249.999986 + 31 +0.0 + 0 +LINE + 5 +1555 + 8 +0 + 62 + 0 + 10 +12612.499975 + 20 +9185.04808 + 30 +0.0 + 11 +12599.999975 + 21 +9206.698715 + 31 +0.0 + 0 +LINE + 5 +1556 + 8 +0 + 62 + 0 + 10 +12574.999975 + 20 +9249.999986 + 30 +0.0 + 11 +12574.999967 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1557 + 8 +0 + 62 + 0 + 10 +12574.999975 + 20 +9206.698716 + 30 +0.0 + 11 +12562.499975 + 21 +9228.349351 + 31 +0.0 + 0 +LINE + 5 +1558 + 8 +0 + 62 + 0 + 10 +12571.187989 + 20 +9170.0 + 30 +0.0 + 11 +12562.499975 + 21 +9185.04808 + 31 +0.0 + 0 +LINE + 5 +1559 + 8 +0 + 62 + 0 + 10 +12537.499975 + 20 +9228.349351 + 30 +0.0 + 11 +12524.999975 + 21 +9249.999986 + 31 +0.0 + 0 +LINE + 5 +155A + 8 +0 + 62 + 0 + 10 +12537.499975 + 20 +9185.048081 + 30 +0.0 + 11 +12524.999975 + 21 +9206.698716 + 31 +0.0 + 0 +LINE + 5 +155B + 8 +0 + 62 + 0 + 10 +12499.999975 + 20 +9249.999986 + 30 +0.0 + 11 +12499.999967 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +155C + 8 +0 + 62 + 0 + 10 +12499.999976 + 20 +9206.698716 + 30 +0.0 + 11 +12487.499976 + 21 +9228.349351 + 31 +0.0 + 0 +LINE + 5 +155D + 8 +0 + 62 + 0 + 10 +12496.187989 + 20 +9170.0 + 30 +0.0 + 11 +12487.499976 + 21 +9185.048081 + 31 +0.0 + 0 +LINE + 5 +155E + 8 +0 + 62 + 0 + 10 +12462.499976 + 20 +9228.349351 + 30 +0.0 + 11 +12449.999976 + 21 +9249.999986 + 31 +0.0 + 0 +LINE + 5 +155F + 8 +0 + 62 + 0 + 10 +12462.499976 + 20 +9185.048081 + 30 +0.0 + 11 +12449.999976 + 21 +9206.698716 + 31 +0.0 + 0 +LINE + 5 +1560 + 8 +0 + 62 + 0 + 10 +12424.999976 + 20 +9249.999986 + 30 +0.0 + 11 +12424.999968 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1561 + 8 +0 + 62 + 0 + 10 +12424.999976 + 20 +9206.698716 + 30 +0.0 + 11 +12412.499976 + 21 +9228.349351 + 31 +0.0 + 0 +LINE + 5 +1562 + 8 +0 + 62 + 0 + 10 +12421.187989 + 20 +9170.0 + 30 +0.0 + 11 +12412.499976 + 21 +9185.048081 + 31 +0.0 + 0 +LINE + 5 +1563 + 8 +0 + 62 + 0 + 10 +12387.499976 + 20 +9228.349351 + 30 +0.0 + 11 +12374.999976 + 21 +9249.999986 + 31 +0.0 + 0 +LINE + 5 +1564 + 8 +0 + 62 + 0 + 10 +12387.499976 + 20 +9185.048081 + 30 +0.0 + 11 +12374.999976 + 21 +9206.698716 + 31 +0.0 + 0 +LINE + 5 +1565 + 8 +0 + 62 + 0 + 10 +12349.999976 + 20 +9249.999986 + 30 +0.0 + 11 +12349.999968 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1566 + 8 +0 + 62 + 0 + 10 +12349.999976 + 20 +9206.698716 + 30 +0.0 + 11 +12337.499976 + 21 +9228.349351 + 31 +0.0 + 0 +LINE + 5 +1567 + 8 +0 + 62 + 0 + 10 +12346.18799 + 20 +9170.0 + 30 +0.0 + 11 +12337.499976 + 21 +9185.048081 + 31 +0.0 + 0 +LINE + 5 +1568 + 8 +0 + 62 + 0 + 10 +12312.499976 + 20 +9228.349351 + 30 +0.0 + 11 +12299.999976 + 21 +9249.999986 + 31 +0.0 + 0 +LINE + 5 +1569 + 8 +0 + 62 + 0 + 10 +12312.499976 + 20 +9185.048081 + 30 +0.0 + 11 +12299.999976 + 21 +9206.698716 + 31 +0.0 + 0 +LINE + 5 +156A + 8 +0 + 62 + 0 + 10 +12274.999976 + 20 +9249.999986 + 30 +0.0 + 11 +12274.999968 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +156B + 8 +0 + 62 + 0 + 10 +12274.999976 + 20 +9206.698716 + 30 +0.0 + 11 +12262.499976 + 21 +9228.349351 + 31 +0.0 + 0 +LINE + 5 +156C + 8 +0 + 62 + 0 + 10 +12271.18799 + 20 +9170.0 + 30 +0.0 + 11 +12262.499976 + 21 +9185.048081 + 31 +0.0 + 0 +LINE + 5 +156D + 8 +0 + 62 + 0 + 10 +12237.499976 + 20 +9228.349351 + 30 +0.0 + 11 +12224.999976 + 21 +9249.999986 + 31 +0.0 + 0 +LINE + 5 +156E + 8 +0 + 62 + 0 + 10 +12237.499976 + 20 +9185.048081 + 30 +0.0 + 11 +12224.999976 + 21 +9206.698716 + 31 +0.0 + 0 +LINE + 5 +156F + 8 +0 + 62 + 0 + 10 +12199.999976 + 20 +9249.999986 + 30 +0.0 + 11 +12199.999969 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1570 + 8 +0 + 62 + 0 + 10 +12199.999976 + 20 +9206.698716 + 30 +0.0 + 11 +12187.499976 + 21 +9228.349351 + 31 +0.0 + 0 +LINE + 5 +1571 + 8 +0 + 62 + 0 + 10 +12196.18799 + 20 +9170.0 + 30 +0.0 + 11 +12187.499977 + 21 +9185.048081 + 31 +0.0 + 0 +LINE + 5 +1572 + 8 +0 + 62 + 0 + 10 +12162.499977 + 20 +9228.349351 + 30 +0.0 + 11 +12149.999977 + 21 +9249.999986 + 31 +0.0 + 0 +LINE + 5 +1573 + 8 +0 + 62 + 0 + 10 +12162.499977 + 20 +9185.048081 + 30 +0.0 + 11 +12149.999977 + 21 +9206.698716 + 31 +0.0 + 0 +LINE + 5 +1574 + 8 +0 + 62 + 0 + 10 +12124.999977 + 20 +9249.999987 + 30 +0.0 + 11 +12124.999969 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1575 + 8 +0 + 62 + 0 + 10 +12124.999977 + 20 +9206.698716 + 30 +0.0 + 11 +12112.499977 + 21 +9228.349351 + 31 +0.0 + 0 +LINE + 5 +1576 + 8 +0 + 62 + 0 + 10 +12121.187991 + 20 +9170.0 + 30 +0.0 + 11 +12112.499977 + 21 +9185.048081 + 31 +0.0 + 0 +LINE + 5 +1577 + 8 +0 + 62 + 0 + 10 +12087.499977 + 20 +9228.349352 + 30 +0.0 + 11 +12074.999977 + 21 +9249.999987 + 31 +0.0 + 0 +LINE + 5 +1578 + 8 +0 + 62 + 0 + 10 +12087.499977 + 20 +9185.048081 + 30 +0.0 + 11 +12074.999977 + 21 +9206.698716 + 31 +0.0 + 0 +LINE + 5 +1579 + 8 +0 + 62 + 0 + 10 +12049.999977 + 20 +9249.999987 + 30 +0.0 + 11 +12049.999969 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +157A + 8 +0 + 62 + 0 + 10 +12049.999977 + 20 +9206.698717 + 30 +0.0 + 11 +12037.499977 + 21 +9228.349352 + 31 +0.0 + 0 +LINE + 5 +157B + 8 +0 + 62 + 0 + 10 +12046.187991 + 20 +9170.0 + 30 +0.0 + 11 +12037.499977 + 21 +9185.048081 + 31 +0.0 + 0 +LINE + 5 +157C + 8 +0 + 62 + 0 + 10 +12012.499977 + 20 +9228.349352 + 30 +0.0 + 11 +11999.999977 + 21 +9249.999987 + 31 +0.0 + 0 +LINE + 5 +157D + 8 +0 + 62 + 0 + 10 +12012.499977 + 20 +9185.048082 + 30 +0.0 + 11 +11999.999977 + 21 +9206.698717 + 31 +0.0 + 0 +LINE + 5 +157E + 8 +0 + 62 + 0 + 10 +11974.999977 + 20 +9249.999987 + 30 +0.0 + 11 +11974.99997 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +157F + 8 +0 + 62 + 0 + 10 +11974.999977 + 20 +9206.698717 + 30 +0.0 + 11 +11962.499977 + 21 +9228.349352 + 31 +0.0 + 0 +LINE + 5 +1580 + 8 +0 + 62 + 0 + 10 +11971.187991 + 20 +9170.0 + 30 +0.0 + 11 +11962.499977 + 21 +9185.048082 + 31 +0.0 + 0 +LINE + 5 +1581 + 8 +0 + 62 + 0 + 10 +11937.499977 + 20 +9228.349352 + 30 +0.0 + 11 +11924.999977 + 21 +9249.999987 + 31 +0.0 + 0 +LINE + 5 +1582 + 8 +0 + 62 + 0 + 10 +11937.499977 + 20 +9185.048082 + 30 +0.0 + 11 +11924.999977 + 21 +9206.698717 + 31 +0.0 + 0 +LINE + 5 +1583 + 8 +0 + 62 + 0 + 10 +11899.999977 + 20 +9249.999987 + 30 +0.0 + 11 +11899.99997 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1584 + 8 +0 + 62 + 0 + 10 +11899.999977 + 20 +9206.698717 + 30 +0.0 + 11 +11887.499977 + 21 +9228.349352 + 31 +0.0 + 0 +LINE + 5 +1585 + 8 +0 + 62 + 0 + 10 +11896.187992 + 20 +9170.0 + 30 +0.0 + 11 +11887.499978 + 21 +9185.048082 + 31 +0.0 + 0 +LINE + 5 +1586 + 8 +0 + 62 + 0 + 10 +11862.499978 + 20 +9228.349352 + 30 +0.0 + 11 +11849.999978 + 21 +9249.999987 + 31 +0.0 + 0 +LINE + 5 +1587 + 8 +0 + 62 + 0 + 10 +11862.499978 + 20 +9185.048082 + 30 +0.0 + 11 +11849.999978 + 21 +9206.698717 + 31 +0.0 + 0 +LINE + 5 +1588 + 8 +0 + 62 + 0 + 10 +11824.999978 + 20 +9249.999987 + 30 +0.0 + 11 +11824.99997 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1589 + 8 +0 + 62 + 0 + 10 +11824.999978 + 20 +9206.698717 + 30 +0.0 + 11 +11812.499978 + 21 +9228.349352 + 31 +0.0 + 0 +LINE + 5 +158A + 8 +0 + 62 + 0 + 10 +11821.187992 + 20 +9170.0 + 30 +0.0 + 11 +11812.499978 + 21 +9185.048082 + 31 +0.0 + 0 +LINE + 5 +158B + 8 +0 + 62 + 0 + 10 +11787.499978 + 20 +9228.349352 + 30 +0.0 + 11 +11774.999978 + 21 +9249.999987 + 31 +0.0 + 0 +LINE + 5 +158C + 8 +0 + 62 + 0 + 10 +11787.499978 + 20 +9185.048082 + 30 +0.0 + 11 +11774.999978 + 21 +9206.698717 + 31 +0.0 + 0 +LINE + 5 +158D + 8 +0 + 62 + 0 + 10 +11749.999978 + 20 +9249.999987 + 30 +0.0 + 11 +11749.999971 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +158E + 8 +0 + 62 + 0 + 10 +11749.999978 + 20 +9206.698717 + 30 +0.0 + 11 +11737.499978 + 21 +9228.349352 + 31 +0.0 + 0 +LINE + 5 +158F + 8 +0 + 62 + 0 + 10 +11746.187992 + 20 +9170.0 + 30 +0.0 + 11 +11737.499978 + 21 +9185.048082 + 31 +0.0 + 0 +LINE + 5 +1590 + 8 +0 + 62 + 0 + 10 +11712.499978 + 20 +9228.349352 + 30 +0.0 + 11 +11699.999978 + 21 +9249.999987 + 31 +0.0 + 0 +LINE + 5 +1591 + 8 +0 + 62 + 0 + 10 +11712.499978 + 20 +9185.048082 + 30 +0.0 + 11 +11699.999978 + 21 +9206.698717 + 31 +0.0 + 0 +LINE + 5 +1592 + 8 +0 + 62 + 0 + 10 +11674.999978 + 20 +9249.999987 + 30 +0.0 + 11 +11674.999971 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1593 + 8 +0 + 62 + 0 + 10 +11674.999978 + 20 +9206.698717 + 30 +0.0 + 11 +11662.499978 + 21 +9228.349352 + 31 +0.0 + 0 +LINE + 5 +1594 + 8 +0 + 62 + 0 + 10 +11671.187993 + 20 +9170.0 + 30 +0.0 + 11 +11662.499978 + 21 +9185.048082 + 31 +0.0 + 0 +LINE + 5 +1595 + 8 +0 + 62 + 0 + 10 +11637.499978 + 20 +9228.349352 + 30 +0.0 + 11 +11624.999978 + 21 +9249.999987 + 31 +0.0 + 0 +LINE + 5 +1596 + 8 +0 + 62 + 0 + 10 +11637.499978 + 20 +9185.048082 + 30 +0.0 + 11 +11624.999978 + 21 +9206.698717 + 31 +0.0 + 0 +LINE + 5 +1597 + 8 +0 + 62 + 0 + 10 +11599.999978 + 20 +9249.999988 + 30 +0.0 + 11 +11599.999971 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1598 + 8 +0 + 62 + 0 + 10 +11599.999978 + 20 +9206.698717 + 30 +0.0 + 11 +11587.499978 + 21 +9228.349352 + 31 +0.0 + 0 +LINE + 5 +1599 + 8 +0 + 62 + 0 + 10 +11596.187993 + 20 +9170.0 + 30 +0.0 + 11 +11587.499979 + 21 +9185.048082 + 31 +0.0 + 0 +LINE + 5 +159A + 8 +0 + 62 + 0 + 10 +11562.499979 + 20 +9228.349353 + 30 +0.0 + 11 +11549.999979 + 21 +9249.999988 + 31 +0.0 + 0 +LINE + 5 +159B + 8 +0 + 62 + 0 + 10 +11562.499979 + 20 +9185.048082 + 30 +0.0 + 11 +11549.999979 + 21 +9206.698717 + 31 +0.0 + 0 +LINE + 5 +159C + 8 +0 + 62 + 0 + 10 +11524.999979 + 20 +9249.999988 + 30 +0.0 + 11 +11524.999971 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +159D + 8 +0 + 62 + 0 + 10 +11524.999979 + 20 +9206.698718 + 30 +0.0 + 11 +11512.499979 + 21 +9228.349353 + 31 +0.0 + 0 +LINE + 5 +159E + 8 +0 + 62 + 0 + 10 +11521.187993 + 20 +9170.0 + 30 +0.0 + 11 +11512.499979 + 21 +9185.048082 + 31 +0.0 + 0 +LINE + 5 +159F + 8 +0 + 62 + 0 + 10 +11487.499979 + 20 +9228.349353 + 30 +0.0 + 11 +11474.999979 + 21 +9249.999988 + 31 +0.0 + 0 +LINE + 5 +15A0 + 8 +0 + 62 + 0 + 10 +11487.499979 + 20 +9185.048083 + 30 +0.0 + 11 +11474.999979 + 21 +9206.698718 + 31 +0.0 + 0 +LINE + 5 +15A1 + 8 +0 + 62 + 0 + 10 +11449.999979 + 20 +9249.999988 + 30 +0.0 + 11 +11449.999972 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +15A2 + 8 +0 + 62 + 0 + 10 +11449.999979 + 20 +9206.698718 + 30 +0.0 + 11 +11437.499979 + 21 +9228.349353 + 31 +0.0 + 0 +LINE + 5 +15A3 + 8 +0 + 62 + 0 + 10 +11446.187994 + 20 +9170.0 + 30 +0.0 + 11 +11437.499979 + 21 +9185.048083 + 31 +0.0 + 0 +LINE + 5 +15A4 + 8 +0 + 62 + 0 + 10 +11412.499979 + 20 +9228.349353 + 30 +0.0 + 11 +11399.999979 + 21 +9249.999988 + 31 +0.0 + 0 +LINE + 5 +15A5 + 8 +0 + 62 + 0 + 10 +11412.499979 + 20 +9185.048083 + 30 +0.0 + 11 +11399.999979 + 21 +9206.698718 + 31 +0.0 + 0 +LINE + 5 +15A6 + 8 +0 + 62 + 0 + 10 +11374.999979 + 20 +9249.999988 + 30 +0.0 + 11 +11374.999972 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +15A7 + 8 +0 + 62 + 0 + 10 +11374.999979 + 20 +9206.698718 + 30 +0.0 + 11 +11362.499979 + 21 +9228.349353 + 31 +0.0 + 0 +LINE + 5 +15A8 + 8 +0 + 62 + 0 + 10 +11371.187994 + 20 +9170.0 + 30 +0.0 + 11 +11362.499979 + 21 +9185.048083 + 31 +0.0 + 0 +LINE + 5 +15A9 + 8 +0 + 62 + 0 + 10 +11337.499979 + 20 +9228.349353 + 30 +0.0 + 11 +11324.999979 + 21 +9249.999988 + 31 +0.0 + 0 +LINE + 5 +15AA + 8 +0 + 62 + 0 + 10 +11337.499979 + 20 +9185.048083 + 30 +0.0 + 11 +11324.999979 + 21 +9206.698718 + 31 +0.0 + 0 +LINE + 5 +15AB + 8 +0 + 62 + 0 + 10 +11299.999979 + 20 +9249.999988 + 30 +0.0 + 11 +11299.999972 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +15AC + 8 +0 + 62 + 0 + 10 +11299.999979 + 20 +9206.698718 + 30 +0.0 + 11 +11287.499979 + 21 +9228.349353 + 31 +0.0 + 0 +LINE + 5 +15AD + 8 +0 + 62 + 0 + 10 +11296.187994 + 20 +9170.0 + 30 +0.0 + 11 +11287.49998 + 21 +9185.048083 + 31 +0.0 + 0 +LINE + 5 +15AE + 8 +0 + 62 + 0 + 10 +11262.49998 + 20 +9228.349353 + 30 +0.0 + 11 +11249.99998 + 21 +9249.999988 + 31 +0.0 + 0 +LINE + 5 +15AF + 8 +0 + 62 + 0 + 10 +11262.49998 + 20 +9185.048083 + 30 +0.0 + 11 +11249.99998 + 21 +9206.698718 + 31 +0.0 + 0 +LINE + 5 +15B0 + 8 +0 + 62 + 0 + 10 +13699.999972 + 20 +9206.698713 + 30 +0.0 + 11 +13687.499972 + 21 +9228.349348 + 31 +0.0 + 0 +LINE + 5 +15B1 + 8 +0 + 62 + 0 + 10 +13737.499971 + 20 +9185.048078 + 30 +0.0 + 11 +13724.999971 + 21 +9206.698713 + 31 +0.0 + 0 +LINE + 5 +15B2 + 8 +0 + 62 + 0 + 10 +13699.999971 + 20 +9249.999984 + 30 +0.0 + 11 +13699.999962 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +15B3 + 8 +0 + 62 + 0 + 10 +13771.187983 + 20 +9170.0 + 30 +0.0 + 11 +13762.499971 + 21 +9185.048078 + 31 +0.0 + 0 +LINE + 5 +15B4 + 8 +0 + 62 + 0 + 10 +13737.499971 + 20 +9228.349348 + 30 +0.0 + 11 +13724.999971 + 21 +9249.999983 + 31 +0.0 + 0 +LINE + 5 +15B5 + 8 +0 + 62 + 0 + 10 +13774.999971 + 20 +9206.698713 + 30 +0.0 + 11 +13762.499971 + 21 +9228.349348 + 31 +0.0 + 0 +LINE + 5 +15B6 + 8 +0 + 62 + 0 + 10 +13812.499971 + 20 +9185.048078 + 30 +0.0 + 11 +13799.999971 + 21 +9206.698713 + 31 +0.0 + 0 +LINE + 5 +15B7 + 8 +0 + 62 + 0 + 10 +13774.999971 + 20 +9249.999983 + 30 +0.0 + 11 +13774.999962 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +15B8 + 8 +0 + 62 + 0 + 10 +13846.187983 + 20 +9170.0 + 30 +0.0 + 11 +13837.499971 + 21 +9185.048078 + 31 +0.0 + 0 +LINE + 5 +15B9 + 8 +0 + 62 + 0 + 10 +13812.499971 + 20 +9228.349348 + 30 +0.0 + 11 +13799.999971 + 21 +9249.999983 + 31 +0.0 + 0 +LINE + 5 +15BA + 8 +0 + 62 + 0 + 10 +13849.999971 + 20 +9206.698713 + 30 +0.0 + 11 +13837.499971 + 21 +9228.349348 + 31 +0.0 + 0 +LINE + 5 +15BB + 8 +0 + 62 + 0 + 10 +13887.499971 + 20 +9185.048078 + 30 +0.0 + 11 +13874.999971 + 21 +9206.698713 + 31 +0.0 + 0 +LINE + 5 +15BC + 8 +0 + 62 + 0 + 10 +13849.999971 + 20 +9249.999983 + 30 +0.0 + 11 +13849.999961 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +15BD + 8 +0 + 62 + 0 + 10 +13921.187983 + 20 +9170.0 + 30 +0.0 + 11 +13912.499971 + 21 +9185.048078 + 31 +0.0 + 0 +LINE + 5 +15BE + 8 +0 + 62 + 0 + 10 +13887.499971 + 20 +9228.349348 + 30 +0.0 + 11 +13874.999971 + 21 +9249.999983 + 31 +0.0 + 0 +LINE + 5 +15BF + 8 +0 + 62 + 0 + 10 +13924.999971 + 20 +9206.698713 + 30 +0.0 + 11 +13912.499971 + 21 +9228.349348 + 31 +0.0 + 0 +LINE + 5 +15C0 + 8 +0 + 62 + 0 + 10 +13962.499971 + 20 +9185.048078 + 30 +0.0 + 11 +13949.999971 + 21 +9206.698713 + 31 +0.0 + 0 +LINE + 5 +15C1 + 8 +0 + 62 + 0 + 10 +13924.999971 + 20 +9249.999983 + 30 +0.0 + 11 +13924.999961 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +15C2 + 8 +0 + 62 + 0 + 10 +13996.187982 + 20 +9170.0 + 30 +0.0 + 11 +13987.499971 + 21 +9185.048078 + 31 +0.0 + 0 +LINE + 5 +15C3 + 8 +0 + 62 + 0 + 10 +13962.499971 + 20 +9228.349348 + 30 +0.0 + 11 +13949.999971 + 21 +9249.999983 + 31 +0.0 + 0 +LINE + 5 +15C4 + 8 +0 + 62 + 0 + 10 +13999.999971 + 20 +9206.698713 + 30 +0.0 + 11 +13987.499971 + 21 +9228.349348 + 31 +0.0 + 0 +LINE + 5 +15C5 + 8 +0 + 62 + 0 + 10 +14037.499971 + 20 +9185.048078 + 30 +0.0 + 11 +14024.999971 + 21 +9206.698713 + 31 +0.0 + 0 +LINE + 5 +15C6 + 8 +0 + 62 + 0 + 10 +13999.999971 + 20 +9249.999983 + 30 +0.0 + 11 +13999.999961 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +15C7 + 8 +0 + 62 + 0 + 10 +14071.187982 + 20 +9170.0 + 30 +0.0 + 11 +14062.49997 + 21 +9185.048078 + 31 +0.0 + 0 +LINE + 5 +15C8 + 8 +0 + 62 + 0 + 10 +14037.49997 + 20 +9228.349348 + 30 +0.0 + 11 +14024.99997 + 21 +9249.999983 + 31 +0.0 + 0 +LINE + 5 +15C9 + 8 +0 + 62 + 0 + 10 +14074.99997 + 20 +9206.698713 + 30 +0.0 + 11 +14062.49997 + 21 +9228.349348 + 31 +0.0 + 0 +LINE + 5 +15CA + 8 +0 + 62 + 0 + 10 +14112.49997 + 20 +9185.048078 + 30 +0.0 + 11 +14099.99997 + 21 +9206.698713 + 31 +0.0 + 0 +LINE + 5 +15CB + 8 +0 + 62 + 0 + 10 +14074.99997 + 20 +9249.999983 + 30 +0.0 + 11 +14074.99996 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +15CC + 8 +0 + 62 + 0 + 10 +14146.187982 + 20 +9170.0 + 30 +0.0 + 11 +14137.49997 + 21 +9185.048077 + 31 +0.0 + 0 +LINE + 5 +15CD + 8 +0 + 62 + 0 + 10 +14112.49997 + 20 +9228.349348 + 30 +0.0 + 11 +14099.99997 + 21 +9249.999983 + 31 +0.0 + 0 +LINE + 5 +15CE + 8 +0 + 62 + 0 + 10 +14149.99997 + 20 +9206.698713 + 30 +0.0 + 11 +14137.49997 + 21 +9228.349348 + 31 +0.0 + 0 +LINE + 5 +15CF + 8 +0 + 62 + 0 + 10 +14187.49997 + 20 +9185.048077 + 30 +0.0 + 11 +14174.99997 + 21 +9206.698712 + 31 +0.0 + 0 +LINE + 5 +15D0 + 8 +0 + 62 + 0 + 10 +14149.99997 + 20 +9249.999983 + 30 +0.0 + 11 +14149.99996 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +15D1 + 8 +0 + 62 + 0 + 10 +14221.187981 + 20 +9170.0 + 30 +0.0 + 11 +14212.49997 + 21 +9185.048077 + 31 +0.0 + 0 +LINE + 5 +15D2 + 8 +0 + 62 + 0 + 10 +14187.49997 + 20 +9228.349348 + 30 +0.0 + 11 +14174.99997 + 21 +9249.999983 + 31 +0.0 + 0 +LINE + 5 +15D3 + 8 +0 + 62 + 0 + 10 +14224.99997 + 20 +9206.698712 + 30 +0.0 + 11 +14212.49997 + 21 +9228.349347 + 31 +0.0 + 0 +LINE + 5 +15D4 + 8 +0 + 62 + 0 + 10 +14262.49997 + 20 +9185.048077 + 30 +0.0 + 11 +14249.99997 + 21 +9206.698712 + 31 +0.0 + 0 +LINE + 5 +15D5 + 8 +0 + 62 + 0 + 10 +14224.99997 + 20 +9249.999983 + 30 +0.0 + 11 +14224.99996 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +15D6 + 8 +0 + 62 + 0 + 10 +14296.187981 + 20 +9170.0 + 30 +0.0 + 11 +14287.49997 + 21 +9185.048077 + 31 +0.0 + 0 +LINE + 5 +15D7 + 8 +0 + 62 + 0 + 10 +14262.49997 + 20 +9228.349347 + 30 +0.0 + 11 +14249.99997 + 21 +9249.999982 + 31 +0.0 + 0 +LINE + 5 +15D8 + 8 +0 + 62 + 0 + 10 +14299.99997 + 20 +9206.698712 + 30 +0.0 + 11 +14287.49997 + 21 +9228.349347 + 31 +0.0 + 0 +LINE + 5 +15D9 + 8 +0 + 62 + 0 + 10 +14337.49997 + 20 +9185.048077 + 30 +0.0 + 11 +14324.99997 + 21 +9206.698712 + 31 +0.0 + 0 +LINE + 5 +15DA + 8 +0 + 62 + 0 + 10 +14299.99997 + 20 +9249.999982 + 30 +0.0 + 11 +14299.999959 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +15DB + 8 +0 + 62 + 0 + 10 +14371.187981 + 20 +9170.0 + 30 +0.0 + 11 +14362.499969 + 21 +9185.048077 + 31 +0.0 + 0 +LINE + 5 +15DC + 8 +0 + 62 + 0 + 10 +14337.499969 + 20 +9228.349347 + 30 +0.0 + 11 +14324.999969 + 21 +9249.999982 + 31 +0.0 + 0 +LINE + 5 +15DD + 8 +0 + 62 + 0 + 10 +14374.999969 + 20 +9206.698712 + 30 +0.0 + 11 +14362.499969 + 21 +9228.349347 + 31 +0.0 + 0 +LINE + 5 +15DE + 8 +0 + 62 + 0 + 10 +14412.499969 + 20 +9185.048077 + 30 +0.0 + 11 +14399.999969 + 21 +9206.698712 + 31 +0.0 + 0 +LINE + 5 +15DF + 8 +0 + 62 + 0 + 10 +14374.999969 + 20 +9249.999982 + 30 +0.0 + 11 +14374.999959 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +15E0 + 8 +0 + 62 + 0 + 10 +14446.18798 + 20 +9170.0 + 30 +0.0 + 11 +14437.499969 + 21 +9185.048077 + 31 +0.0 + 0 +LINE + 5 +15E1 + 8 +0 + 62 + 0 + 10 +14412.499969 + 20 +9228.349347 + 30 +0.0 + 11 +14399.999969 + 21 +9249.999982 + 31 +0.0 + 0 +LINE + 5 +15E2 + 8 +0 + 62 + 0 + 10 +14449.999969 + 20 +9206.698712 + 30 +0.0 + 11 +14437.499969 + 21 +9228.349347 + 31 +0.0 + 0 +LINE + 5 +15E3 + 8 +0 + 62 + 0 + 10 +14487.499969 + 20 +9185.048077 + 30 +0.0 + 11 +14474.999969 + 21 +9206.698712 + 31 +0.0 + 0 +LINE + 5 +15E4 + 8 +0 + 62 + 0 + 10 +14449.999969 + 20 +9249.999982 + 30 +0.0 + 11 +14449.999959 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +15E5 + 8 +0 + 62 + 0 + 10 +14521.18798 + 20 +9170.0 + 30 +0.0 + 11 +14512.499969 + 21 +9185.048077 + 31 +0.0 + 0 +LINE + 5 +15E6 + 8 +0 + 62 + 0 + 10 +14487.499969 + 20 +9228.349347 + 30 +0.0 + 11 +14474.999969 + 21 +9249.999982 + 31 +0.0 + 0 +LINE + 5 +15E7 + 8 +0 + 62 + 0 + 10 +14524.999969 + 20 +9206.698712 + 30 +0.0 + 11 +14512.499969 + 21 +9228.349347 + 31 +0.0 + 0 +LINE + 5 +15E8 + 8 +0 + 62 + 0 + 10 +14562.499969 + 20 +9185.048077 + 30 +0.0 + 11 +14549.999969 + 21 +9206.698712 + 31 +0.0 + 0 +LINE + 5 +15E9 + 8 +0 + 62 + 0 + 10 +14524.999969 + 20 +9249.999982 + 30 +0.0 + 11 +14524.999958 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +15EA + 8 +0 + 62 + 0 + 10 +14596.18798 + 20 +9170.0 + 30 +0.0 + 11 +14587.499969 + 21 +9185.048077 + 31 +0.0 + 0 +LINE + 5 +15EB + 8 +0 + 62 + 0 + 10 +14562.499969 + 20 +9228.349347 + 30 +0.0 + 11 +14549.999969 + 21 +9249.999982 + 31 +0.0 + 0 +LINE + 5 +15EC + 8 +0 + 62 + 0 + 10 +14599.999969 + 20 +9206.698712 + 30 +0.0 + 11 +14587.499969 + 21 +9228.349347 + 31 +0.0 + 0 +LINE + 5 +15ED + 8 +0 + 62 + 0 + 10 +14637.499969 + 20 +9185.048077 + 30 +0.0 + 11 +14624.999969 + 21 +9206.698712 + 31 +0.0 + 0 +LINE + 5 +15EE + 8 +0 + 62 + 0 + 10 +14599.999969 + 20 +9249.999982 + 30 +0.0 + 11 +14599.999958 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +15EF + 8 +0 + 62 + 0 + 10 +14671.187979 + 20 +9170.0 + 30 +0.0 + 11 +14662.499968 + 21 +9185.048077 + 31 +0.0 + 0 +LINE + 5 +15F0 + 8 +0 + 62 + 0 + 10 +14637.499968 + 20 +9228.349347 + 30 +0.0 + 11 +14624.999968 + 21 +9249.999982 + 31 +0.0 + 0 +LINE + 5 +15F1 + 8 +0 + 62 + 0 + 10 +14674.999968 + 20 +9206.698712 + 30 +0.0 + 11 +14662.499968 + 21 +9228.349347 + 31 +0.0 + 0 +LINE + 5 +15F2 + 8 +0 + 62 + 0 + 10 +14712.499968 + 20 +9185.048076 + 30 +0.0 + 11 +14699.999968 + 21 +9206.698712 + 31 +0.0 + 0 +LINE + 5 +15F3 + 8 +0 + 62 + 0 + 10 +14674.999968 + 20 +9249.999982 + 30 +0.0 + 11 +14674.999958 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +15F4 + 8 +0 + 62 + 0 + 10 +14746.187979 + 20 +9170.0 + 30 +0.0 + 11 +14737.499968 + 21 +9185.048076 + 31 +0.0 + 0 +LINE + 5 +15F5 + 8 +0 + 62 + 0 + 10 +14712.499968 + 20 +9228.349347 + 30 +0.0 + 11 +14699.999968 + 21 +9249.999982 + 31 +0.0 + 0 +LINE + 5 +15F6 + 8 +0 + 62 + 0 + 10 +14749.999968 + 20 +9206.698711 + 30 +0.0 + 11 +14737.499968 + 21 +9228.349347 + 31 +0.0 + 0 +LINE + 5 +15F7 + 8 +0 + 62 + 0 + 10 +14787.499968 + 20 +9185.048076 + 30 +0.0 + 11 +14774.999968 + 21 +9206.698711 + 31 +0.0 + 0 +LINE + 5 +15F8 + 8 +0 + 62 + 0 + 10 +14749.999968 + 20 +9249.999982 + 30 +0.0 + 11 +14749.999957 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +15F9 + 8 +0 + 62 + 0 + 10 +14821.187979 + 20 +9170.0 + 30 +0.0 + 11 +14812.499968 + 21 +9185.048076 + 31 +0.0 + 0 +LINE + 5 +15FA + 8 +0 + 62 + 0 + 10 +14787.499968 + 20 +9228.349346 + 30 +0.0 + 11 +14774.999968 + 21 +9249.999982 + 31 +0.0 + 0 +LINE + 5 +15FB + 8 +0 + 62 + 0 + 10 +14824.999968 + 20 +9206.698711 + 30 +0.0 + 11 +14812.499968 + 21 +9228.349346 + 31 +0.0 + 0 +LINE + 5 +15FC + 8 +0 + 62 + 0 + 10 +14862.499968 + 20 +9185.048076 + 30 +0.0 + 11 +14849.999968 + 21 +9206.698711 + 31 +0.0 + 0 +LINE + 5 +15FD + 8 +0 + 62 + 0 + 10 +14824.999968 + 20 +9249.999981 + 30 +0.0 + 11 +14824.999957 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +15FE + 8 +0 + 62 + 0 + 10 +14896.187978 + 20 +9170.0 + 30 +0.0 + 11 +14887.499968 + 21 +9185.048076 + 31 +0.0 + 0 +LINE + 5 +15FF + 8 +0 + 62 + 0 + 10 +14862.499968 + 20 +9228.349346 + 30 +0.0 + 11 +14849.999968 + 21 +9249.999981 + 31 +0.0 + 0 +LINE + 5 +1600 + 8 +0 + 62 + 0 + 10 +14899.999968 + 20 +9206.698711 + 30 +0.0 + 11 +14887.499968 + 21 +9228.349346 + 31 +0.0 + 0 +LINE + 5 +1601 + 8 +0 + 62 + 0 + 10 +14937.499968 + 20 +9185.048076 + 30 +0.0 + 11 +14924.999968 + 21 +9206.698711 + 31 +0.0 + 0 +LINE + 5 +1602 + 8 +0 + 62 + 0 + 10 +14899.999968 + 20 +9249.999981 + 30 +0.0 + 11 +14899.999957 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1603 + 8 +0 + 62 + 0 + 10 +14971.187978 + 20 +9170.0 + 30 +0.0 + 11 +14962.499967 + 21 +9185.048076 + 31 +0.0 + 0 +LINE + 5 +1604 + 8 +0 + 62 + 0 + 10 +14937.499967 + 20 +9228.349346 + 30 +0.0 + 11 +14924.999967 + 21 +9249.999981 + 31 +0.0 + 0 +LINE + 5 +1605 + 8 +0 + 62 + 0 + 10 +14974.999967 + 20 +9206.698711 + 30 +0.0 + 11 +14962.499967 + 21 +9228.349346 + 31 +0.0 + 0 +LINE + 5 +1606 + 8 +0 + 62 + 0 + 10 +15012.499967 + 20 +9185.048076 + 30 +0.0 + 11 +14999.999967 + 21 +9206.698711 + 31 +0.0 + 0 +LINE + 5 +1607 + 8 +0 + 62 + 0 + 10 +14974.999967 + 20 +9249.999981 + 30 +0.0 + 11 +14974.999956 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1608 + 8 +0 + 62 + 0 + 10 +15046.187978 + 20 +9170.0 + 30 +0.0 + 11 +15037.499967 + 21 +9185.048076 + 31 +0.0 + 0 +LINE + 5 +1609 + 8 +0 + 62 + 0 + 10 +15012.499967 + 20 +9228.349346 + 30 +0.0 + 11 +14999.999967 + 21 +9249.999981 + 31 +0.0 + 0 +LINE + 5 +160A + 8 +0 + 62 + 0 + 10 +15049.999967 + 20 +9206.698711 + 30 +0.0 + 11 +15037.499967 + 21 +9228.349346 + 31 +0.0 + 0 +LINE + 5 +160B + 8 +0 + 62 + 0 + 10 +15087.499967 + 20 +9185.048076 + 30 +0.0 + 11 +15074.999967 + 21 +9206.698711 + 31 +0.0 + 0 +LINE + 5 +160C + 8 +0 + 62 + 0 + 10 +15049.999967 + 20 +9249.999981 + 30 +0.0 + 11 +15049.999956 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +160D + 8 +0 + 62 + 0 + 10 +15121.187978 + 20 +9170.0 + 30 +0.0 + 11 +15112.499967 + 21 +9185.048076 + 31 +0.0 + 0 +LINE + 5 +160E + 8 +0 + 62 + 0 + 10 +15087.499967 + 20 +9228.349346 + 30 +0.0 + 11 +15074.999967 + 21 +9249.999981 + 31 +0.0 + 0 +LINE + 5 +160F + 8 +0 + 62 + 0 + 10 +15124.999967 + 20 +9206.698711 + 30 +0.0 + 11 +15112.499967 + 21 +9228.349346 + 31 +0.0 + 0 +LINE + 5 +1610 + 8 +0 + 62 + 0 + 10 +15162.499967 + 20 +9185.048076 + 30 +0.0 + 11 +15149.999967 + 21 +9206.698711 + 31 +0.0 + 0 +LINE + 5 +1611 + 8 +0 + 62 + 0 + 10 +15124.999967 + 20 +9249.999981 + 30 +0.0 + 11 +15124.999956 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1612 + 8 +0 + 62 + 0 + 10 +15196.187977 + 20 +9170.0 + 30 +0.0 + 11 +15187.499967 + 21 +9185.048076 + 31 +0.0 + 0 +LINE + 5 +1613 + 8 +0 + 62 + 0 + 10 +15162.499967 + 20 +9228.349346 + 30 +0.0 + 11 +15149.999967 + 21 +9249.999981 + 31 +0.0 + 0 +LINE + 5 +1614 + 8 +0 + 62 + 0 + 10 +15199.999967 + 20 +9206.698711 + 30 +0.0 + 11 +15187.499967 + 21 +9228.349346 + 31 +0.0 + 0 +LINE + 5 +1615 + 8 +0 + 62 + 0 + 10 +15237.499967 + 20 +9185.048075 + 30 +0.0 + 11 +15224.999967 + 21 +9206.698711 + 31 +0.0 + 0 +LINE + 5 +1616 + 8 +0 + 62 + 0 + 10 +15199.999967 + 20 +9249.999981 + 30 +0.0 + 11 +15199.999955 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1617 + 8 +0 + 62 + 0 + 10 +15271.187977 + 20 +9170.0 + 30 +0.0 + 11 +15262.499966 + 21 +9185.048075 + 31 +0.0 + 0 +LINE + 5 +1618 + 8 +0 + 62 + 0 + 10 +15237.499966 + 20 +9228.349346 + 30 +0.0 + 11 +15224.999966 + 21 +9249.999981 + 31 +0.0 + 0 +LINE + 5 +1619 + 8 +0 + 62 + 0 + 10 +15274.999966 + 20 +9206.69871 + 30 +0.0 + 11 +15262.499966 + 21 +9228.349346 + 31 +0.0 + 0 +LINE + 5 +161A + 8 +0 + 62 + 0 + 10 +15312.499966 + 20 +9185.048075 + 30 +0.0 + 11 +15299.999966 + 21 +9206.69871 + 31 +0.0 + 0 +LINE + 5 +161B + 8 +0 + 62 + 0 + 10 +15274.999966 + 20 +9249.999981 + 30 +0.0 + 11 +15274.999955 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +161C + 8 +0 + 62 + 0 + 10 +15346.187977 + 20 +9170.0 + 30 +0.0 + 11 +15337.499966 + 21 +9185.048075 + 31 +0.0 + 0 +LINE + 5 +161D + 8 +0 + 62 + 0 + 10 +15312.499966 + 20 +9228.349345 + 30 +0.0 + 11 +15299.999966 + 21 +9249.999981 + 31 +0.0 + 0 +LINE + 5 +161E + 8 +0 + 62 + 0 + 10 +15349.999966 + 20 +9206.69871 + 30 +0.0 + 11 +15337.499966 + 21 +9228.349345 + 31 +0.0 + 0 +LINE + 5 +161F + 8 +0 + 62 + 0 + 10 +15387.499966 + 20 +9185.048075 + 30 +0.0 + 11 +15374.999966 + 21 +9206.69871 + 31 +0.0 + 0 +LINE + 5 +1620 + 8 +0 + 62 + 0 + 10 +15349.999966 + 20 +9249.99998 + 30 +0.0 + 11 +15349.999955 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1621 + 8 +0 + 62 + 0 + 10 +15421.187976 + 20 +9170.0 + 30 +0.0 + 11 +15412.499966 + 21 +9185.048075 + 31 +0.0 + 0 +LINE + 5 +1622 + 8 +0 + 62 + 0 + 10 +15387.499966 + 20 +9228.349345 + 30 +0.0 + 11 +15374.999966 + 21 +9249.99998 + 31 +0.0 + 0 +LINE + 5 +1623 + 8 +0 + 62 + 0 + 10 +15424.999966 + 20 +9206.69871 + 30 +0.0 + 11 +15412.499966 + 21 +9228.349345 + 31 +0.0 + 0 +LINE + 5 +1624 + 8 +0 + 62 + 0 + 10 +15462.499966 + 20 +9185.048075 + 30 +0.0 + 11 +15449.999966 + 21 +9206.69871 + 31 +0.0 + 0 +LINE + 5 +1625 + 8 +0 + 62 + 0 + 10 +15424.999966 + 20 +9249.99998 + 30 +0.0 + 11 +15424.999954 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1626 + 8 +0 + 62 + 0 + 10 +15496.187976 + 20 +9170.0 + 30 +0.0 + 11 +15487.499966 + 21 +9185.048075 + 31 +0.0 + 0 +LINE + 5 +1627 + 8 +0 + 62 + 0 + 10 +15462.499966 + 20 +9228.349345 + 30 +0.0 + 11 +15449.999966 + 21 +9249.99998 + 31 +0.0 + 0 +LINE + 5 +1628 + 8 +0 + 62 + 0 + 10 +15499.999966 + 20 +9206.69871 + 30 +0.0 + 11 +15487.499966 + 21 +9228.349345 + 31 +0.0 + 0 +LINE + 5 +1629 + 8 +0 + 62 + 0 + 10 +15537.499966 + 20 +9185.048075 + 30 +0.0 + 11 +15524.999966 + 21 +9206.69871 + 31 +0.0 + 0 +LINE + 5 +162A + 8 +0 + 62 + 0 + 10 +15499.999966 + 20 +9249.99998 + 30 +0.0 + 11 +15499.999954 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +162B + 8 +0 + 62 + 0 + 10 +15571.187976 + 20 +9170.0 + 30 +0.0 + 11 +15562.499966 + 21 +9185.048075 + 31 +0.0 + 0 +LINE + 5 +162C + 8 +0 + 62 + 0 + 10 +15537.499966 + 20 +9228.349345 + 30 +0.0 + 11 +15524.999966 + 21 +9249.99998 + 31 +0.0 + 0 +LINE + 5 +162D + 8 +0 + 62 + 0 + 10 +15574.999965 + 20 +9206.69871 + 30 +0.0 + 11 +15562.499965 + 21 +9228.349345 + 31 +0.0 + 0 +LINE + 5 +162E + 8 +0 + 62 + 0 + 10 +15612.499965 + 20 +9185.048075 + 30 +0.0 + 11 +15599.999965 + 21 +9206.69871 + 31 +0.0 + 0 +LINE + 5 +162F + 8 +0 + 62 + 0 + 10 +15574.999965 + 20 +9249.99998 + 30 +0.0 + 11 +15574.999954 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1630 + 8 +0 + 62 + 0 + 10 +15646.187975 + 20 +9170.0 + 30 +0.0 + 11 +15637.499965 + 21 +9185.048075 + 31 +0.0 + 0 +LINE + 5 +1631 + 8 +0 + 62 + 0 + 10 +15612.499965 + 20 +9228.349345 + 30 +0.0 + 11 +15599.999965 + 21 +9249.99998 + 31 +0.0 + 0 +LINE + 5 +1632 + 8 +0 + 62 + 0 + 10 +15649.999965 + 20 +9206.69871 + 30 +0.0 + 11 +15637.499965 + 21 +9228.349345 + 31 +0.0 + 0 +LINE + 5 +1633 + 8 +0 + 62 + 0 + 10 +15687.499965 + 20 +9185.048075 + 30 +0.0 + 11 +15674.999965 + 21 +9206.69871 + 31 +0.0 + 0 +LINE + 5 +1634 + 8 +0 + 62 + 0 + 10 +15649.999965 + 20 +9249.99998 + 30 +0.0 + 11 +15649.999953 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1635 + 8 +0 + 62 + 0 + 10 +15721.187975 + 20 +9170.0 + 30 +0.0 + 11 +15712.499965 + 21 +9185.048075 + 31 +0.0 + 0 +LINE + 5 +1636 + 8 +0 + 62 + 0 + 10 +15687.499965 + 20 +9228.349345 + 30 +0.0 + 11 +15674.999965 + 21 +9249.99998 + 31 +0.0 + 0 +LINE + 5 +1637 + 8 +0 + 62 + 0 + 10 +15724.999965 + 20 +9206.69871 + 30 +0.0 + 11 +15712.499965 + 21 +9228.349345 + 31 +0.0 + 0 +LINE + 5 +1638 + 8 +0 + 62 + 0 + 10 +15762.499965 + 20 +9185.048074 + 30 +0.0 + 11 +15749.999965 + 21 +9206.69871 + 31 +0.0 + 0 +LINE + 5 +1639 + 8 +0 + 62 + 0 + 10 +15724.999965 + 20 +9249.99998 + 30 +0.0 + 11 +15724.999953 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +163A + 8 +0 + 62 + 0 + 10 +15796.187975 + 20 +9170.0 + 30 +0.0 + 11 +15787.499965 + 21 +9185.048074 + 31 +0.0 + 0 +LINE + 5 +163B + 8 +0 + 62 + 0 + 10 +15762.499965 + 20 +9228.349345 + 30 +0.0 + 11 +15749.999965 + 21 +9249.99998 + 31 +0.0 + 0 +LINE + 5 +163C + 8 +0 + 62 + 0 + 10 +15799.999965 + 20 +9206.698709 + 30 +0.0 + 11 +15787.499965 + 21 +9228.349345 + 31 +0.0 + 0 +LINE + 5 +163D + 8 +0 + 62 + 0 + 10 +15837.499965 + 20 +9185.048074 + 30 +0.0 + 11 +15824.999965 + 21 +9206.698709 + 31 +0.0 + 0 +LINE + 5 +163E + 8 +0 + 62 + 0 + 10 +15799.999965 + 20 +9249.99998 + 30 +0.0 + 11 +15799.999953 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +163F + 8 +0 + 62 + 0 + 10 +15871.187974 + 20 +9170.0 + 30 +0.0 + 11 +15862.499965 + 21 +9185.048074 + 31 +0.0 + 0 +LINE + 5 +1640 + 8 +0 + 62 + 0 + 10 +15837.499965 + 20 +9228.349344 + 30 +0.0 + 11 +15824.999965 + 21 +9249.99998 + 31 +0.0 + 0 +LINE + 5 +1641 + 8 +0 + 62 + 0 + 10 +15874.999964 + 20 +9206.698709 + 30 +0.0 + 11 +15862.499964 + 21 +9228.349344 + 31 +0.0 + 0 +LINE + 5 +1642 + 8 +0 + 62 + 0 + 10 +15912.499964 + 20 +9185.048074 + 30 +0.0 + 11 +15899.999964 + 21 +9206.698709 + 31 +0.0 + 0 +LINE + 5 +1643 + 8 +0 + 62 + 0 + 10 +15874.999964 + 20 +9249.999979 + 30 +0.0 + 11 +15874.999952 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1644 + 8 +0 + 62 + 0 + 10 +15946.187974 + 20 +9170.0 + 30 +0.0 + 11 +15937.499964 + 21 +9185.048074 + 31 +0.0 + 0 +LINE + 5 +1645 + 8 +0 + 62 + 0 + 10 +15912.499964 + 20 +9228.349344 + 30 +0.0 + 11 +15899.999964 + 21 +9249.999979 + 31 +0.0 + 0 +LINE + 5 +1646 + 8 +0 + 62 + 0 + 10 +15949.999964 + 20 +9206.698709 + 30 +0.0 + 11 +15937.499964 + 21 +9228.349344 + 31 +0.0 + 0 +LINE + 5 +1647 + 8 +0 + 62 + 0 + 10 +15987.499964 + 20 +9185.048074 + 30 +0.0 + 11 +15974.999964 + 21 +9206.698709 + 31 +0.0 + 0 +LINE + 5 +1648 + 8 +0 + 62 + 0 + 10 +15949.999964 + 20 +9249.999979 + 30 +0.0 + 11 +15949.999952 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1649 + 8 +0 + 62 + 0 + 10 +16021.187974 + 20 +9170.0 + 30 +0.0 + 11 +16012.499964 + 21 +9185.048074 + 31 +0.0 + 0 +LINE + 5 +164A + 8 +0 + 62 + 0 + 10 +15987.499964 + 20 +9228.349344 + 30 +0.0 + 11 +15974.999964 + 21 +9249.999979 + 31 +0.0 + 0 +LINE + 5 +164B + 8 +0 + 62 + 0 + 10 +16024.999964 + 20 +9206.698709 + 30 +0.0 + 11 +16012.499964 + 21 +9228.349344 + 31 +0.0 + 0 +LINE + 5 +164C + 8 +0 + 62 + 0 + 10 +16062.499964 + 20 +9185.048074 + 30 +0.0 + 11 +16049.999964 + 21 +9206.698709 + 31 +0.0 + 0 +LINE + 5 +164D + 8 +0 + 62 + 0 + 10 +16024.999964 + 20 +9249.999979 + 30 +0.0 + 11 +16024.999952 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +164E + 8 +0 + 62 + 0 + 10 +16096.187973 + 20 +9170.0 + 30 +0.0 + 11 +16087.499964 + 21 +9185.048074 + 31 +0.0 + 0 +LINE + 5 +164F + 8 +0 + 62 + 0 + 10 +16062.499964 + 20 +9228.349344 + 30 +0.0 + 11 +16049.999964 + 21 +9249.999979 + 31 +0.0 + 0 +LINE + 5 +1650 + 8 +0 + 62 + 0 + 10 +16099.999964 + 20 +9206.698709 + 30 +0.0 + 11 +16087.499964 + 21 +9228.349344 + 31 +0.0 + 0 +LINE + 5 +1651 + 8 +0 + 62 + 0 + 10 +16126.25 + 20 +9204.533582 + 30 +0.0 + 11 +16124.999964 + 21 +9206.698709 + 31 +0.0 + 0 +LINE + 5 +1652 + 8 +0 + 62 + 0 + 10 +16099.999964 + 20 +9249.999979 + 30 +0.0 + 11 +16099.999951 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1653 + 8 +0 + 62 + 0 + 10 +16126.25 + 20 +9247.834852 + 30 +0.0 + 11 +16124.999964 + 21 +9249.999979 + 31 +0.0 + 0 +LINE + 5 +1654 + 8 +0 + 62 + 0 + 10 +13653.81194 + 20 +9170.0 + 30 +0.0 + 11 +13662.499971 + 21 +9185.048111 + 31 +0.0 + 0 +LINE + 5 +1655 + 8 +0 + 62 + 0 + 10 +13687.499971 + 20 +9228.349381 + 30 +0.0 + 11 +13699.999962 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1656 + 8 +0 + 62 + 0 + 10 +13649.999972 + 20 +9206.698746 + 30 +0.0 + 11 +13662.499972 + 21 +9228.349381 + 31 +0.0 + 0 +LINE + 5 +1657 + 8 +0 + 62 + 0 + 10 +13612.499972 + 20 +9185.048111 + 30 +0.0 + 11 +13624.999972 + 21 +9206.698746 + 31 +0.0 + 0 +LINE + 5 +1658 + 8 +0 + 62 + 0 + 10 +13578.811941 + 20 +9170.0 + 30 +0.0 + 11 +13587.499972 + 21 +9185.048111 + 31 +0.0 + 0 +LINE + 5 +1659 + 8 +0 + 62 + 0 + 10 +13612.499972 + 20 +9228.349381 + 30 +0.0 + 11 +13624.999962 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +165A + 8 +0 + 62 + 0 + 10 +13574.999972 + 20 +9206.698746 + 30 +0.0 + 11 +13587.499972 + 21 +9228.349381 + 31 +0.0 + 0 +LINE + 5 +165B + 8 +0 + 62 + 0 + 10 +13537.499972 + 20 +9185.048111 + 30 +0.0 + 11 +13549.999972 + 21 +9206.698746 + 31 +0.0 + 0 +LINE + 5 +165C + 8 +0 + 62 + 0 + 10 +13503.811941 + 20 +9170.0 + 30 +0.0 + 11 +13512.499972 + 21 +9185.048111 + 31 +0.0 + 0 +LINE + 5 +165D + 8 +0 + 62 + 0 + 10 +13537.499972 + 20 +9228.349381 + 30 +0.0 + 11 +13549.999963 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +165E + 8 +0 + 62 + 0 + 10 +13499.999972 + 20 +9206.698746 + 30 +0.0 + 11 +13512.499972 + 21 +9228.349381 + 31 +0.0 + 0 +LINE + 5 +165F + 8 +0 + 62 + 0 + 10 +13462.499972 + 20 +9185.048111 + 30 +0.0 + 11 +13474.999972 + 21 +9206.698746 + 31 +0.0 + 0 +LINE + 5 +1660 + 8 +0 + 62 + 0 + 10 +13428.811941 + 20 +9170.0 + 30 +0.0 + 11 +13437.499972 + 21 +9185.048111 + 31 +0.0 + 0 +LINE + 5 +1661 + 8 +0 + 62 + 0 + 10 +13462.499972 + 20 +9228.349381 + 30 +0.0 + 11 +13474.999963 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1662 + 8 +0 + 62 + 0 + 10 +13424.999972 + 20 +9206.698746 + 30 +0.0 + 11 +13437.499972 + 21 +9228.349381 + 31 +0.0 + 0 +LINE + 5 +1663 + 8 +0 + 62 + 0 + 10 +13387.499972 + 20 +9185.048111 + 30 +0.0 + 11 +13399.999972 + 21 +9206.698746 + 31 +0.0 + 0 +LINE + 5 +1664 + 8 +0 + 62 + 0 + 10 +13353.811942 + 20 +9170.0 + 30 +0.0 + 11 +13362.499972 + 21 +9185.048111 + 31 +0.0 + 0 +LINE + 5 +1665 + 8 +0 + 62 + 0 + 10 +13387.499972 + 20 +9228.349381 + 30 +0.0 + 11 +13399.999963 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1666 + 8 +0 + 62 + 0 + 10 +13349.999973 + 20 +9206.698746 + 30 +0.0 + 11 +13362.499973 + 21 +9228.349381 + 31 +0.0 + 0 +LINE + 5 +1667 + 8 +0 + 62 + 0 + 10 +13312.499973 + 20 +9185.048111 + 30 +0.0 + 11 +13324.999973 + 21 +9206.698746 + 31 +0.0 + 0 +LINE + 5 +1668 + 8 +0 + 62 + 0 + 10 +13278.811942 + 20 +9170.0 + 30 +0.0 + 11 +13287.499973 + 21 +9185.04811 + 31 +0.0 + 0 +LINE + 5 +1669 + 8 +0 + 62 + 0 + 10 +13312.499973 + 20 +9228.349381 + 30 +0.0 + 11 +13324.999964 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +166A + 8 +0 + 62 + 0 + 10 +13274.999973 + 20 +9206.698746 + 30 +0.0 + 11 +13287.499973 + 21 +9228.349381 + 31 +0.0 + 0 +LINE + 5 +166B + 8 +0 + 62 + 0 + 10 +13237.499973 + 20 +9185.04811 + 30 +0.0 + 11 +13249.999973 + 21 +9206.698745 + 31 +0.0 + 0 +LINE + 5 +166C + 8 +0 + 62 + 0 + 10 +13203.811942 + 20 +9170.0 + 30 +0.0 + 11 +13212.499973 + 21 +9185.04811 + 31 +0.0 + 0 +LINE + 5 +166D + 8 +0 + 62 + 0 + 10 +13237.499973 + 20 +9228.349381 + 30 +0.0 + 11 +13249.999964 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +166E + 8 +0 + 62 + 0 + 10 +13199.999973 + 20 +9206.698745 + 30 +0.0 + 11 +13212.499973 + 21 +9228.34938 + 31 +0.0 + 0 +LINE + 5 +166F + 8 +0 + 62 + 0 + 10 +13162.499973 + 20 +9185.04811 + 30 +0.0 + 11 +13174.999973 + 21 +9206.698745 + 31 +0.0 + 0 +LINE + 5 +1670 + 8 +0 + 62 + 0 + 10 +13128.811943 + 20 +9170.0 + 30 +0.0 + 11 +13137.499973 + 21 +9185.04811 + 31 +0.0 + 0 +LINE + 5 +1671 + 8 +0 + 62 + 0 + 10 +13162.499973 + 20 +9228.34938 + 30 +0.0 + 11 +13174.999964 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1672 + 8 +0 + 62 + 0 + 10 +13124.999973 + 20 +9206.698745 + 30 +0.0 + 11 +13137.499973 + 21 +9228.34938 + 31 +0.0 + 0 +LINE + 5 +1673 + 8 +0 + 62 + 0 + 10 +13087.499973 + 20 +9185.04811 + 30 +0.0 + 11 +13099.999973 + 21 +9206.698745 + 31 +0.0 + 0 +LINE + 5 +1674 + 8 +0 + 62 + 0 + 10 +13053.811943 + 20 +9170.0 + 30 +0.0 + 11 +13062.499973 + 21 +9185.04811 + 31 +0.0 + 0 +LINE + 5 +1675 + 8 +0 + 62 + 0 + 10 +13087.499973 + 20 +9228.34938 + 30 +0.0 + 11 +13099.999965 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1676 + 8 +0 + 62 + 0 + 10 +13049.999974 + 20 +9206.698745 + 30 +0.0 + 11 +13062.499974 + 21 +9228.34938 + 31 +0.0 + 0 +LINE + 5 +1677 + 8 +0 + 62 + 0 + 10 +13012.499974 + 20 +9185.04811 + 30 +0.0 + 11 +13024.999974 + 21 +9206.698745 + 31 +0.0 + 0 +LINE + 5 +1678 + 8 +0 + 62 + 0 + 10 +12978.811943 + 20 +9170.0 + 30 +0.0 + 11 +12987.499974 + 21 +9185.04811 + 31 +0.0 + 0 +LINE + 5 +1679 + 8 +0 + 62 + 0 + 10 +13012.499974 + 20 +9228.34938 + 30 +0.0 + 11 +13024.999965 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +167A + 8 +0 + 62 + 0 + 10 +12974.999974 + 20 +9206.698745 + 30 +0.0 + 11 +12987.499974 + 21 +9228.34938 + 31 +0.0 + 0 +LINE + 5 +167B + 8 +0 + 62 + 0 + 10 +12937.499974 + 20 +9185.04811 + 30 +0.0 + 11 +12949.999974 + 21 +9206.698745 + 31 +0.0 + 0 +LINE + 5 +167C + 8 +0 + 62 + 0 + 10 +12903.811944 + 20 +9170.0 + 30 +0.0 + 11 +12912.499974 + 21 +9185.04811 + 31 +0.0 + 0 +LINE + 5 +167D + 8 +0 + 62 + 0 + 10 +12937.499974 + 20 +9228.34938 + 30 +0.0 + 11 +12949.999965 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +167E + 8 +0 + 62 + 0 + 10 +12899.999974 + 20 +9206.698745 + 30 +0.0 + 11 +12912.499974 + 21 +9228.34938 + 31 +0.0 + 0 +LINE + 5 +167F + 8 +0 + 62 + 0 + 10 +12862.499974 + 20 +9185.04811 + 30 +0.0 + 11 +12874.999974 + 21 +9206.698745 + 31 +0.0 + 0 +LINE + 5 +1680 + 8 +0 + 62 + 0 + 10 +12828.811944 + 20 +9170.0 + 30 +0.0 + 11 +12837.499974 + 21 +9185.04811 + 31 +0.0 + 0 +LINE + 5 +1681 + 8 +0 + 62 + 0 + 10 +12862.499974 + 20 +9228.34938 + 30 +0.0 + 11 +12874.999966 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1682 + 8 +0 + 62 + 0 + 10 +12824.999974 + 20 +9206.698745 + 30 +0.0 + 11 +12837.499974 + 21 +9228.34938 + 31 +0.0 + 0 +LINE + 5 +1683 + 8 +0 + 62 + 0 + 10 +12787.499974 + 20 +9185.04811 + 30 +0.0 + 11 +12799.999974 + 21 +9206.698745 + 31 +0.0 + 0 +LINE + 5 +1684 + 8 +0 + 62 + 0 + 10 +12753.811944 + 20 +9170.0 + 30 +0.0 + 11 +12762.499974 + 21 +9185.048109 + 31 +0.0 + 0 +LINE + 5 +1685 + 8 +0 + 62 + 0 + 10 +12787.499974 + 20 +9228.34938 + 30 +0.0 + 11 +12799.999966 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1686 + 8 +0 + 62 + 0 + 10 +12749.999975 + 20 +9206.698745 + 30 +0.0 + 11 +12762.499975 + 21 +9228.34938 + 31 +0.0 + 0 +LINE + 5 +1687 + 8 +0 + 62 + 0 + 10 +12712.499975 + 20 +9185.048109 + 30 +0.0 + 11 +12724.999975 + 21 +9206.698744 + 31 +0.0 + 0 +LINE + 5 +1688 + 8 +0 + 62 + 0 + 10 +12678.811945 + 20 +9170.0 + 30 +0.0 + 11 +12687.499975 + 21 +9185.048109 + 31 +0.0 + 0 +LINE + 5 +1689 + 8 +0 + 62 + 0 + 10 +12712.499975 + 20 +9228.34938 + 30 +0.0 + 11 +12724.999966 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +168A + 8 +0 + 62 + 0 + 10 +12674.999975 + 20 +9206.698744 + 30 +0.0 + 11 +12687.499975 + 21 +9228.349379 + 31 +0.0 + 0 +LINE + 5 +168B + 8 +0 + 62 + 0 + 10 +12637.499975 + 20 +9185.048109 + 30 +0.0 + 11 +12649.999975 + 21 +9206.698744 + 31 +0.0 + 0 +LINE + 5 +168C + 8 +0 + 62 + 0 + 10 +12603.811945 + 20 +9170.0 + 30 +0.0 + 11 +12612.499975 + 21 +9185.048109 + 31 +0.0 + 0 +LINE + 5 +168D + 8 +0 + 62 + 0 + 10 +12637.499975 + 20 +9228.349379 + 30 +0.0 + 11 +12649.999967 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +168E + 8 +0 + 62 + 0 + 10 +12599.999975 + 20 +9206.698744 + 30 +0.0 + 11 +12612.499975 + 21 +9228.349379 + 31 +0.0 + 0 +LINE + 5 +168F + 8 +0 + 62 + 0 + 10 +12562.499975 + 20 +9185.048109 + 30 +0.0 + 11 +12574.999975 + 21 +9206.698744 + 31 +0.0 + 0 +LINE + 5 +1690 + 8 +0 + 62 + 0 + 10 +12528.811945 + 20 +9170.0 + 30 +0.0 + 11 +12537.499975 + 21 +9185.048109 + 31 +0.0 + 0 +LINE + 5 +1691 + 8 +0 + 62 + 0 + 10 +12562.499975 + 20 +9228.349379 + 30 +0.0 + 11 +12574.999967 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1692 + 8 +0 + 62 + 0 + 10 +12524.999975 + 20 +9206.698744 + 30 +0.0 + 11 +12537.499975 + 21 +9228.349379 + 31 +0.0 + 0 +LINE + 5 +1693 + 8 +0 + 62 + 0 + 10 +12487.499975 + 20 +9185.048109 + 30 +0.0 + 11 +12499.999975 + 21 +9206.698744 + 31 +0.0 + 0 +LINE + 5 +1694 + 8 +0 + 62 + 0 + 10 +12453.811946 + 20 +9170.0 + 30 +0.0 + 11 +12462.499975 + 21 +9185.048109 + 31 +0.0 + 0 +LINE + 5 +1695 + 8 +0 + 62 + 0 + 10 +12487.499975 + 20 +9228.349379 + 30 +0.0 + 11 +12499.999967 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1696 + 8 +0 + 62 + 0 + 10 +12449.999976 + 20 +9206.698744 + 30 +0.0 + 11 +12462.499976 + 21 +9228.349379 + 31 +0.0 + 0 +LINE + 5 +1697 + 8 +0 + 62 + 0 + 10 +12412.499976 + 20 +9185.048109 + 30 +0.0 + 11 +12424.999976 + 21 +9206.698744 + 31 +0.0 + 0 +LINE + 5 +1698 + 8 +0 + 62 + 0 + 10 +12378.811946 + 20 +9170.0 + 30 +0.0 + 11 +12387.499976 + 21 +9185.048109 + 31 +0.0 + 0 +LINE + 5 +1699 + 8 +0 + 62 + 0 + 10 +12412.499976 + 20 +9228.349379 + 30 +0.0 + 11 +12424.999968 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +169A + 8 +0 + 62 + 0 + 10 +12374.999976 + 20 +9206.698744 + 30 +0.0 + 11 +12387.499976 + 21 +9228.349379 + 31 +0.0 + 0 +LINE + 5 +169B + 8 +0 + 62 + 0 + 10 +12337.499976 + 20 +9185.048109 + 30 +0.0 + 11 +12349.999976 + 21 +9206.698744 + 31 +0.0 + 0 +LINE + 5 +169C + 8 +0 + 62 + 0 + 10 +12303.811946 + 20 +9170.0 + 30 +0.0 + 11 +12312.499976 + 21 +9185.048109 + 31 +0.0 + 0 +LINE + 5 +169D + 8 +0 + 62 + 0 + 10 +12337.499976 + 20 +9228.349379 + 30 +0.0 + 11 +12349.999968 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +169E + 8 +0 + 62 + 0 + 10 +12299.999976 + 20 +9206.698744 + 30 +0.0 + 11 +12312.499976 + 21 +9228.349379 + 31 +0.0 + 0 +LINE + 5 +169F + 8 +0 + 62 + 0 + 10 +12262.499976 + 20 +9185.048109 + 30 +0.0 + 11 +12274.999976 + 21 +9206.698744 + 31 +0.0 + 0 +LINE + 5 +16A0 + 8 +0 + 62 + 0 + 10 +12228.811947 + 20 +9170.0 + 30 +0.0 + 11 +12237.499976 + 21 +9185.048108 + 31 +0.0 + 0 +LINE + 5 +16A1 + 8 +0 + 62 + 0 + 10 +12262.499976 + 20 +9228.349379 + 30 +0.0 + 11 +12274.999968 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +16A2 + 8 +0 + 62 + 0 + 10 +12224.999976 + 20 +9206.698744 + 30 +0.0 + 11 +12237.499976 + 21 +9228.349379 + 31 +0.0 + 0 +LINE + 5 +16A3 + 8 +0 + 62 + 0 + 10 +12187.499976 + 20 +9185.048108 + 30 +0.0 + 11 +12199.999976 + 21 +9206.698743 + 31 +0.0 + 0 +LINE + 5 +16A4 + 8 +0 + 62 + 0 + 10 +12153.811947 + 20 +9170.0 + 30 +0.0 + 11 +12162.499976 + 21 +9185.048108 + 31 +0.0 + 0 +LINE + 5 +16A5 + 8 +0 + 62 + 0 + 10 +12187.499976 + 20 +9228.349379 + 30 +0.0 + 11 +12199.999969 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +16A6 + 8 +0 + 62 + 0 + 10 +12149.999976 + 20 +9206.698743 + 30 +0.0 + 11 +12162.499976 + 21 +9228.349378 + 31 +0.0 + 0 +LINE + 5 +16A7 + 8 +0 + 62 + 0 + 10 +12112.499977 + 20 +9185.048108 + 30 +0.0 + 11 +12124.999977 + 21 +9206.698743 + 31 +0.0 + 0 +LINE + 5 +16A8 + 8 +0 + 62 + 0 + 10 +12078.811947 + 20 +9170.0 + 30 +0.0 + 11 +12087.499977 + 21 +9185.048108 + 31 +0.0 + 0 +LINE + 5 +16A9 + 8 +0 + 62 + 0 + 10 +12112.499977 + 20 +9228.349378 + 30 +0.0 + 11 +12124.999969 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +16AA + 8 +0 + 62 + 0 + 10 +12074.999977 + 20 +9206.698743 + 30 +0.0 + 11 +12087.499977 + 21 +9228.349378 + 31 +0.0 + 0 +LINE + 5 +16AB + 8 +0 + 62 + 0 + 10 +12037.499977 + 20 +9185.048108 + 30 +0.0 + 11 +12049.999977 + 21 +9206.698743 + 31 +0.0 + 0 +LINE + 5 +16AC + 8 +0 + 62 + 0 + 10 +12003.811948 + 20 +9170.0 + 30 +0.0 + 11 +12012.499977 + 21 +9185.048108 + 31 +0.0 + 0 +LINE + 5 +16AD + 8 +0 + 62 + 0 + 10 +12037.499977 + 20 +9228.349378 + 30 +0.0 + 11 +12049.999969 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +16AE + 8 +0 + 62 + 0 + 10 +11999.999977 + 20 +9206.698743 + 30 +0.0 + 11 +12012.499977 + 21 +9228.349378 + 31 +0.0 + 0 +LINE + 5 +16AF + 8 +0 + 62 + 0 + 10 +11962.499977 + 20 +9185.048108 + 30 +0.0 + 11 +11974.999977 + 21 +9206.698743 + 31 +0.0 + 0 +LINE + 5 +16B0 + 8 +0 + 62 + 0 + 10 +11928.811948 + 20 +9170.0 + 30 +0.0 + 11 +11937.499977 + 21 +9185.048108 + 31 +0.0 + 0 +LINE + 5 +16B1 + 8 +0 + 62 + 0 + 10 +11962.499977 + 20 +9228.349378 + 30 +0.0 + 11 +11974.99997 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +16B2 + 8 +0 + 62 + 0 + 10 +11924.999977 + 20 +9206.698743 + 30 +0.0 + 11 +11937.499977 + 21 +9228.349378 + 31 +0.0 + 0 +LINE + 5 +16B3 + 8 +0 + 62 + 0 + 10 +11887.499977 + 20 +9185.048108 + 30 +0.0 + 11 +11899.999977 + 21 +9206.698743 + 31 +0.0 + 0 +LINE + 5 +16B4 + 8 +0 + 62 + 0 + 10 +11853.811948 + 20 +9170.0 + 30 +0.0 + 11 +11862.499977 + 21 +9185.048108 + 31 +0.0 + 0 +LINE + 5 +16B5 + 8 +0 + 62 + 0 + 10 +11887.499977 + 20 +9228.349378 + 30 +0.0 + 11 +11899.99997 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +16B6 + 8 +0 + 62 + 0 + 10 +11849.999977 + 20 +9206.698743 + 30 +0.0 + 11 +11862.499977 + 21 +9228.349378 + 31 +0.0 + 0 +LINE + 5 +16B7 + 8 +0 + 62 + 0 + 10 +11812.499978 + 20 +9185.048108 + 30 +0.0 + 11 +11824.999978 + 21 +9206.698743 + 31 +0.0 + 0 +LINE + 5 +16B8 + 8 +0 + 62 + 0 + 10 +11778.811949 + 20 +9170.0 + 30 +0.0 + 11 +11787.499978 + 21 +9185.048108 + 31 +0.0 + 0 +LINE + 5 +16B9 + 8 +0 + 62 + 0 + 10 +11812.499978 + 20 +9228.349378 + 30 +0.0 + 11 +11824.99997 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +16BA + 8 +0 + 62 + 0 + 10 +11774.999978 + 20 +9206.698743 + 30 +0.0 + 11 +11787.499978 + 21 +9228.349378 + 31 +0.0 + 0 +LINE + 5 +16BB + 8 +0 + 62 + 0 + 10 +11737.499978 + 20 +9185.048108 + 30 +0.0 + 11 +11749.999978 + 21 +9206.698743 + 31 +0.0 + 0 +LINE + 5 +16BC + 8 +0 + 62 + 0 + 10 +11703.811949 + 20 +9170.0 + 30 +0.0 + 11 +11712.499978 + 21 +9185.048107 + 31 +0.0 + 0 +LINE + 5 +16BD + 8 +0 + 62 + 0 + 10 +11737.499978 + 20 +9228.349378 + 30 +0.0 + 11 +11749.999971 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +16BE + 8 +0 + 62 + 0 + 10 +11699.999978 + 20 +9206.698743 + 30 +0.0 + 11 +11712.499978 + 21 +9228.349378 + 31 +0.0 + 0 +LINE + 5 +16BF + 8 +0 + 62 + 0 + 10 +11662.499978 + 20 +9185.048107 + 30 +0.0 + 11 +11674.999978 + 21 +9206.698742 + 31 +0.0 + 0 +LINE + 5 +16C0 + 8 +0 + 62 + 0 + 10 +11628.811949 + 20 +9170.0 + 30 +0.0 + 11 +11637.499978 + 21 +9185.048107 + 31 +0.0 + 0 +LINE + 5 +16C1 + 8 +0 + 62 + 0 + 10 +11662.499978 + 20 +9228.349378 + 30 +0.0 + 11 +11674.999971 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +16C2 + 8 +0 + 62 + 0 + 10 +11624.999978 + 20 +9206.698742 + 30 +0.0 + 11 +11637.499978 + 21 +9228.349377 + 31 +0.0 + 0 +LINE + 5 +16C3 + 8 +0 + 62 + 0 + 10 +11587.499978 + 20 +9185.048107 + 30 +0.0 + 11 +11599.999978 + 21 +9206.698742 + 31 +0.0 + 0 +LINE + 5 +16C4 + 8 +0 + 62 + 0 + 10 +11553.81195 + 20 +9170.0 + 30 +0.0 + 11 +11562.499978 + 21 +9185.048107 + 31 +0.0 + 0 +LINE + 5 +16C5 + 8 +0 + 62 + 0 + 10 +11587.499978 + 20 +9228.349377 + 30 +0.0 + 11 +11599.999971 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +16C6 + 8 +0 + 62 + 0 + 10 +11549.999978 + 20 +9206.698742 + 30 +0.0 + 11 +11562.499978 + 21 +9228.349377 + 31 +0.0 + 0 +LINE + 5 +16C7 + 8 +0 + 62 + 0 + 10 +11512.499979 + 20 +9185.048107 + 30 +0.0 + 11 +11524.999979 + 21 +9206.698742 + 31 +0.0 + 0 +LINE + 5 +16C8 + 8 +0 + 62 + 0 + 10 +11478.81195 + 20 +9170.0 + 30 +0.0 + 11 +11487.499979 + 21 +9185.048107 + 31 +0.0 + 0 +LINE + 5 +16C9 + 8 +0 + 62 + 0 + 10 +11512.499979 + 20 +9228.349377 + 30 +0.0 + 11 +11524.999971 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +16CA + 8 +0 + 62 + 0 + 10 +11474.999979 + 20 +9206.698742 + 30 +0.0 + 11 +11487.499979 + 21 +9228.349377 + 31 +0.0 + 0 +LINE + 5 +16CB + 8 +0 + 62 + 0 + 10 +11437.499979 + 20 +9185.048107 + 30 +0.0 + 11 +11449.999979 + 21 +9206.698742 + 31 +0.0 + 0 +LINE + 5 +16CC + 8 +0 + 62 + 0 + 10 +11403.81195 + 20 +9170.0 + 30 +0.0 + 11 +11412.499979 + 21 +9185.048107 + 31 +0.0 + 0 +LINE + 5 +16CD + 8 +0 + 62 + 0 + 10 +11437.499979 + 20 +9228.349377 + 30 +0.0 + 11 +11449.999972 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +16CE + 8 +0 + 62 + 0 + 10 +11399.999979 + 20 +9206.698742 + 30 +0.0 + 11 +11412.499979 + 21 +9228.349377 + 31 +0.0 + 0 +LINE + 5 +16CF + 8 +0 + 62 + 0 + 10 +11362.499979 + 20 +9185.048107 + 30 +0.0 + 11 +11374.999979 + 21 +9206.698742 + 31 +0.0 + 0 +LINE + 5 +16D0 + 8 +0 + 62 + 0 + 10 +11328.811951 + 20 +9170.0 + 30 +0.0 + 11 +11337.499979 + 21 +9185.048107 + 31 +0.0 + 0 +LINE + 5 +16D1 + 8 +0 + 62 + 0 + 10 +11362.499979 + 20 +9228.349377 + 30 +0.0 + 11 +11374.999972 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +16D2 + 8 +0 + 62 + 0 + 10 +11324.999979 + 20 +9206.698742 + 30 +0.0 + 11 +11337.499979 + 21 +9228.349377 + 31 +0.0 + 0 +LINE + 5 +16D3 + 8 +0 + 62 + 0 + 10 +11287.499979 + 20 +9185.048107 + 30 +0.0 + 11 +11299.999979 + 21 +9206.698742 + 31 +0.0 + 0 +LINE + 5 +16D4 + 8 +0 + 62 + 0 + 10 +11253.811951 + 20 +9170.0 + 30 +0.0 + 11 +11262.499979 + 21 +9185.048107 + 31 +0.0 + 0 +LINE + 5 +16D5 + 8 +0 + 62 + 0 + 10 +11287.499979 + 20 +9228.349377 + 30 +0.0 + 11 +11299.999972 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +16D6 + 8 +0 + 62 + 0 + 10 +11249.999979 + 20 +9206.698742 + 30 +0.0 + 11 +11262.499979 + 21 +9228.349377 + 31 +0.0 + 0 +LINE + 5 +16D7 + 8 +0 + 62 + 0 + 10 +13687.499971 + 20 +9185.048111 + 30 +0.0 + 11 +13699.999971 + 21 +9206.698746 + 31 +0.0 + 0 +LINE + 5 +16D8 + 8 +0 + 62 + 0 + 10 +13724.999971 + 20 +9206.698746 + 30 +0.0 + 11 +13737.499971 + 21 +9228.349381 + 31 +0.0 + 0 +LINE + 5 +16D9 + 8 +0 + 62 + 0 + 10 +13728.81194 + 20 +9170.0 + 30 +0.0 + 11 +13737.499971 + 21 +9185.048111 + 31 +0.0 + 0 +LINE + 5 +16DA + 8 +0 + 62 + 0 + 10 +13762.499971 + 20 +9228.349382 + 30 +0.0 + 11 +13774.999962 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +16DB + 8 +0 + 62 + 0 + 10 +13762.499971 + 20 +9185.048111 + 30 +0.0 + 11 +13774.999971 + 21 +9206.698746 + 31 +0.0 + 0 +LINE + 5 +16DC + 8 +0 + 62 + 0 + 10 +13799.999971 + 20 +9206.698747 + 30 +0.0 + 11 +13812.499971 + 21 +9228.349382 + 31 +0.0 + 0 +LINE + 5 +16DD + 8 +0 + 62 + 0 + 10 +13803.81194 + 20 +9170.0 + 30 +0.0 + 11 +13812.499971 + 21 +9185.048111 + 31 +0.0 + 0 +LINE + 5 +16DE + 8 +0 + 62 + 0 + 10 +13837.499971 + 20 +9228.349382 + 30 +0.0 + 11 +13849.999961 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +16DF + 8 +0 + 62 + 0 + 10 +13837.499971 + 20 +9185.048112 + 30 +0.0 + 11 +13849.999971 + 21 +9206.698747 + 31 +0.0 + 0 +LINE + 5 +16E0 + 8 +0 + 62 + 0 + 10 +13874.999971 + 20 +9206.698747 + 30 +0.0 + 11 +13887.499971 + 21 +9228.349382 + 31 +0.0 + 0 +LINE + 5 +16E1 + 8 +0 + 62 + 0 + 10 +13878.811939 + 20 +9170.0 + 30 +0.0 + 11 +13887.499971 + 21 +9185.048112 + 31 +0.0 + 0 +LINE + 5 +16E2 + 8 +0 + 62 + 0 + 10 +13912.499971 + 20 +9228.349382 + 30 +0.0 + 11 +13924.999961 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +16E3 + 8 +0 + 62 + 0 + 10 +13912.499971 + 20 +9185.048112 + 30 +0.0 + 11 +13924.999971 + 21 +9206.698747 + 31 +0.0 + 0 +LINE + 5 +16E4 + 8 +0 + 62 + 0 + 10 +13949.999971 + 20 +9206.698747 + 30 +0.0 + 11 +13962.499971 + 21 +9228.349382 + 31 +0.0 + 0 +LINE + 5 +16E5 + 8 +0 + 62 + 0 + 10 +13953.811939 + 20 +9170.0 + 30 +0.0 + 11 +13962.499971 + 21 +9185.048112 + 31 +0.0 + 0 +LINE + 5 +16E6 + 8 +0 + 62 + 0 + 10 +13987.499971 + 20 +9228.349382 + 30 +0.0 + 11 +13999.999961 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +16E7 + 8 +0 + 62 + 0 + 10 +13987.49997 + 20 +9185.048112 + 30 +0.0 + 11 +13999.99997 + 21 +9206.698747 + 31 +0.0 + 0 +LINE + 5 +16E8 + 8 +0 + 62 + 0 + 10 +14024.99997 + 20 +9206.698747 + 30 +0.0 + 11 +14037.49997 + 21 +9228.349382 + 31 +0.0 + 0 +LINE + 5 +16E9 + 8 +0 + 62 + 0 + 10 +14028.811939 + 20 +9170.0 + 30 +0.0 + 11 +14037.49997 + 21 +9185.048112 + 31 +0.0 + 0 +LINE + 5 +16EA + 8 +0 + 62 + 0 + 10 +14062.49997 + 20 +9228.349382 + 30 +0.0 + 11 +14074.99996 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +16EB + 8 +0 + 62 + 0 + 10 +14062.49997 + 20 +9185.048112 + 30 +0.0 + 11 +14074.99997 + 21 +9206.698747 + 31 +0.0 + 0 +LINE + 5 +16EC + 8 +0 + 62 + 0 + 10 +14099.99997 + 20 +9206.698747 + 30 +0.0 + 11 +14112.49997 + 21 +9228.349382 + 31 +0.0 + 0 +LINE + 5 +16ED + 8 +0 + 62 + 0 + 10 +14103.811938 + 20 +9170.0 + 30 +0.0 + 11 +14112.49997 + 21 +9185.048112 + 31 +0.0 + 0 +LINE + 5 +16EE + 8 +0 + 62 + 0 + 10 +14137.49997 + 20 +9228.349382 + 30 +0.0 + 11 +14149.99996 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +16EF + 8 +0 + 62 + 0 + 10 +14137.49997 + 20 +9185.048112 + 30 +0.0 + 11 +14149.99997 + 21 +9206.698747 + 31 +0.0 + 0 +LINE + 5 +16F0 + 8 +0 + 62 + 0 + 10 +14174.99997 + 20 +9206.698747 + 30 +0.0 + 11 +14187.49997 + 21 +9228.349382 + 31 +0.0 + 0 +LINE + 5 +16F1 + 8 +0 + 62 + 0 + 10 +14178.811938 + 20 +9170.0 + 30 +0.0 + 11 +14187.49997 + 21 +9185.048112 + 31 +0.0 + 0 +LINE + 5 +16F2 + 8 +0 + 62 + 0 + 10 +14212.49997 + 20 +9228.349382 + 30 +0.0 + 11 +14224.99996 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +16F3 + 8 +0 + 62 + 0 + 10 +14212.49997 + 20 +9185.048112 + 30 +0.0 + 11 +14224.99997 + 21 +9206.698747 + 31 +0.0 + 0 +LINE + 5 +16F4 + 8 +0 + 62 + 0 + 10 +14249.99997 + 20 +9206.698747 + 30 +0.0 + 11 +14262.49997 + 21 +9228.349382 + 31 +0.0 + 0 +LINE + 5 +16F5 + 8 +0 + 62 + 0 + 10 +14253.811938 + 20 +9170.0 + 30 +0.0 + 11 +14262.49997 + 21 +9185.048112 + 31 +0.0 + 0 +LINE + 5 +16F6 + 8 +0 + 62 + 0 + 10 +14287.49997 + 20 +9228.349383 + 30 +0.0 + 11 +14299.999959 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +16F7 + 8 +0 + 62 + 0 + 10 +14287.499969 + 20 +9185.048112 + 30 +0.0 + 11 +14299.999969 + 21 +9206.698747 + 31 +0.0 + 0 +LINE + 5 +16F8 + 8 +0 + 62 + 0 + 10 +14324.999969 + 20 +9206.698748 + 30 +0.0 + 11 +14337.499969 + 21 +9228.349383 + 31 +0.0 + 0 +LINE + 5 +16F9 + 8 +0 + 62 + 0 + 10 +14328.811937 + 20 +9170.0 + 30 +0.0 + 11 +14337.499969 + 21 +9185.048112 + 31 +0.0 + 0 +LINE + 5 +16FA + 8 +0 + 62 + 0 + 10 +14362.499969 + 20 +9228.349383 + 30 +0.0 + 11 +14374.999959 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +16FB + 8 +0 + 62 + 0 + 10 +14362.499969 + 20 +9185.048113 + 30 +0.0 + 11 +14374.999969 + 21 +9206.698748 + 31 +0.0 + 0 +LINE + 5 +16FC + 8 +0 + 62 + 0 + 10 +14399.999969 + 20 +9206.698748 + 30 +0.0 + 11 +14412.499969 + 21 +9228.349383 + 31 +0.0 + 0 +LINE + 5 +16FD + 8 +0 + 62 + 0 + 10 +14403.811937 + 20 +9170.0 + 30 +0.0 + 11 +14412.499969 + 21 +9185.048113 + 31 +0.0 + 0 +LINE + 5 +16FE + 8 +0 + 62 + 0 + 10 +14437.499969 + 20 +9228.349383 + 30 +0.0 + 11 +14449.999959 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +16FF + 8 +0 + 62 + 0 + 10 +14437.499969 + 20 +9185.048113 + 30 +0.0 + 11 +14449.999969 + 21 +9206.698748 + 31 +0.0 + 0 +LINE + 5 +1700 + 8 +0 + 62 + 0 + 10 +14474.999969 + 20 +9206.698748 + 30 +0.0 + 11 +14487.499969 + 21 +9228.349383 + 31 +0.0 + 0 +LINE + 5 +1701 + 8 +0 + 62 + 0 + 10 +14478.811937 + 20 +9170.0 + 30 +0.0 + 11 +14487.499969 + 21 +9185.048113 + 31 +0.0 + 0 +LINE + 5 +1702 + 8 +0 + 62 + 0 + 10 +14512.499969 + 20 +9228.349383 + 30 +0.0 + 11 +14524.999958 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1703 + 8 +0 + 62 + 0 + 10 +14512.499969 + 20 +9185.048113 + 30 +0.0 + 11 +14524.999969 + 21 +9206.698748 + 31 +0.0 + 0 +LINE + 5 +1704 + 8 +0 + 62 + 0 + 10 +14549.999969 + 20 +9206.698748 + 30 +0.0 + 11 +14562.499969 + 21 +9228.349383 + 31 +0.0 + 0 +LINE + 5 +1705 + 8 +0 + 62 + 0 + 10 +14553.811937 + 20 +9170.0 + 30 +0.0 + 11 +14562.499969 + 21 +9185.048113 + 31 +0.0 + 0 +LINE + 5 +1706 + 8 +0 + 62 + 0 + 10 +14587.499969 + 20 +9228.349383 + 30 +0.0 + 11 +14599.999958 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1707 + 8 +0 + 62 + 0 + 10 +14587.499968 + 20 +9185.048113 + 30 +0.0 + 11 +14599.999968 + 21 +9206.698748 + 31 +0.0 + 0 +LINE + 5 +1708 + 8 +0 + 62 + 0 + 10 +14624.999968 + 20 +9206.698748 + 30 +0.0 + 11 +14637.499968 + 21 +9228.349383 + 31 +0.0 + 0 +LINE + 5 +1709 + 8 +0 + 62 + 0 + 10 +14628.811936 + 20 +9170.0 + 30 +0.0 + 11 +14637.499968 + 21 +9185.048113 + 31 +0.0 + 0 +LINE + 5 +170A + 8 +0 + 62 + 0 + 10 +14662.499968 + 20 +9228.349383 + 30 +0.0 + 11 +14674.999958 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +170B + 8 +0 + 62 + 0 + 10 +14662.499968 + 20 +9185.048113 + 30 +0.0 + 11 +14674.999968 + 21 +9206.698748 + 31 +0.0 + 0 +LINE + 5 +170C + 8 +0 + 62 + 0 + 10 +14699.999968 + 20 +9206.698748 + 30 +0.0 + 11 +14712.499968 + 21 +9228.349383 + 31 +0.0 + 0 +LINE + 5 +170D + 8 +0 + 62 + 0 + 10 +14703.811936 + 20 +9170.0 + 30 +0.0 + 11 +14712.499968 + 21 +9185.048113 + 31 +0.0 + 0 +LINE + 5 +170E + 8 +0 + 62 + 0 + 10 +14737.499968 + 20 +9228.349383 + 30 +0.0 + 11 +14749.999957 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +170F + 8 +0 + 62 + 0 + 10 +14737.499968 + 20 +9185.048113 + 30 +0.0 + 11 +14749.999968 + 21 +9206.698748 + 31 +0.0 + 0 +LINE + 5 +1710 + 8 +0 + 62 + 0 + 10 +14774.999968 + 20 +9206.698748 + 30 +0.0 + 11 +14787.499968 + 21 +9228.349383 + 31 +0.0 + 0 +LINE + 5 +1711 + 8 +0 + 62 + 0 + 10 +14778.811936 + 20 +9170.0 + 30 +0.0 + 11 +14787.499968 + 21 +9185.048113 + 31 +0.0 + 0 +LINE + 5 +1712 + 8 +0 + 62 + 0 + 10 +14812.499968 + 20 +9228.349383 + 30 +0.0 + 11 +14824.999957 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1713 + 8 +0 + 62 + 0 + 10 +14812.499968 + 20 +9185.048113 + 30 +0.0 + 11 +14824.999968 + 21 +9206.698748 + 31 +0.0 + 0 +LINE + 5 +1714 + 8 +0 + 62 + 0 + 10 +14849.999968 + 20 +9206.698748 + 30 +0.0 + 11 +14862.499968 + 21 +9228.349384 + 31 +0.0 + 0 +LINE + 5 +1715 + 8 +0 + 62 + 0 + 10 +14853.811935 + 20 +9170.0 + 30 +0.0 + 11 +14862.499968 + 21 +9185.048113 + 31 +0.0 + 0 +LINE + 5 +1716 + 8 +0 + 62 + 0 + 10 +14887.499968 + 20 +9228.349384 + 30 +0.0 + 11 +14899.999957 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1717 + 8 +0 + 62 + 0 + 10 +14887.499967 + 20 +9185.048113 + 30 +0.0 + 11 +14899.999967 + 21 +9206.698749 + 31 +0.0 + 0 +LINE + 5 +1718 + 8 +0 + 62 + 0 + 10 +14924.999967 + 20 +9206.698749 + 30 +0.0 + 11 +14937.499967 + 21 +9228.349384 + 31 +0.0 + 0 +LINE + 5 +1719 + 8 +0 + 62 + 0 + 10 +14928.811935 + 20 +9170.0 + 30 +0.0 + 11 +14937.499967 + 21 +9185.048114 + 31 +0.0 + 0 +LINE + 5 +171A + 8 +0 + 62 + 0 + 10 +14962.499967 + 20 +9228.349384 + 30 +0.0 + 11 +14974.999956 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +171B + 8 +0 + 62 + 0 + 10 +14962.499967 + 20 +9185.048114 + 30 +0.0 + 11 +14974.999967 + 21 +9206.698749 + 31 +0.0 + 0 +LINE + 5 +171C + 8 +0 + 62 + 0 + 10 +14999.999967 + 20 +9206.698749 + 30 +0.0 + 11 +15012.499967 + 21 +9228.349384 + 31 +0.0 + 0 +LINE + 5 +171D + 8 +0 + 62 + 0 + 10 +15003.811935 + 20 +9170.0 + 30 +0.0 + 11 +15012.499967 + 21 +9185.048114 + 31 +0.0 + 0 +LINE + 5 +171E + 8 +0 + 62 + 0 + 10 +15037.499967 + 20 +9228.349384 + 30 +0.0 + 11 +15049.999956 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +171F + 8 +0 + 62 + 0 + 10 +15037.499967 + 20 +9185.048114 + 30 +0.0 + 11 +15049.999967 + 21 +9206.698749 + 31 +0.0 + 0 +LINE + 5 +1720 + 8 +0 + 62 + 0 + 10 +15074.999967 + 20 +9206.698749 + 30 +0.0 + 11 +15087.499967 + 21 +9228.349384 + 31 +0.0 + 0 +LINE + 5 +1721 + 8 +0 + 62 + 0 + 10 +15078.811934 + 20 +9170.0 + 30 +0.0 + 11 +15087.499967 + 21 +9185.048114 + 31 +0.0 + 0 +LINE + 5 +1722 + 8 +0 + 62 + 0 + 10 +15112.499967 + 20 +9228.349384 + 30 +0.0 + 11 +15124.999956 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1723 + 8 +0 + 62 + 0 + 10 +15112.499967 + 20 +9185.048114 + 30 +0.0 + 11 +15124.999967 + 21 +9206.698749 + 31 +0.0 + 0 +LINE + 5 +1724 + 8 +0 + 62 + 0 + 10 +15149.999967 + 20 +9206.698749 + 30 +0.0 + 11 +15162.499967 + 21 +9228.349384 + 31 +0.0 + 0 +LINE + 5 +1725 + 8 +0 + 62 + 0 + 10 +15153.811934 + 20 +9170.0 + 30 +0.0 + 11 +15162.499967 + 21 +9185.048114 + 31 +0.0 + 0 +LINE + 5 +1726 + 8 +0 + 62 + 0 + 10 +15187.499967 + 20 +9228.349384 + 30 +0.0 + 11 +15199.999955 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1727 + 8 +0 + 62 + 0 + 10 +15187.499966 + 20 +9185.048114 + 30 +0.0 + 11 +15199.999966 + 21 +9206.698749 + 31 +0.0 + 0 +LINE + 5 +1728 + 8 +0 + 62 + 0 + 10 +15224.999966 + 20 +9206.698749 + 30 +0.0 + 11 +15237.499966 + 21 +9228.349384 + 31 +0.0 + 0 +LINE + 5 +1729 + 8 +0 + 62 + 0 + 10 +15228.811934 + 20 +9170.0 + 30 +0.0 + 11 +15237.499966 + 21 +9185.048114 + 31 +0.0 + 0 +LINE + 5 +172A + 8 +0 + 62 + 0 + 10 +15262.499966 + 20 +9228.349384 + 30 +0.0 + 11 +15274.999955 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +172B + 8 +0 + 62 + 0 + 10 +15262.499966 + 20 +9185.048114 + 30 +0.0 + 11 +15274.999966 + 21 +9206.698749 + 31 +0.0 + 0 +LINE + 5 +172C + 8 +0 + 62 + 0 + 10 +15299.999966 + 20 +9206.698749 + 30 +0.0 + 11 +15312.499966 + 21 +9228.349384 + 31 +0.0 + 0 +LINE + 5 +172D + 8 +0 + 62 + 0 + 10 +15303.811933 + 20 +9170.0 + 30 +0.0 + 11 +15312.499966 + 21 +9185.048114 + 31 +0.0 + 0 +LINE + 5 +172E + 8 +0 + 62 + 0 + 10 +15337.499966 + 20 +9228.349384 + 30 +0.0 + 11 +15349.999955 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +172F + 8 +0 + 62 + 0 + 10 +15337.499966 + 20 +9185.048114 + 30 +0.0 + 11 +15349.999966 + 21 +9206.698749 + 31 +0.0 + 0 +LINE + 5 +1730 + 8 +0 + 62 + 0 + 10 +15374.999966 + 20 +9206.698749 + 30 +0.0 + 11 +15387.499966 + 21 +9228.349385 + 31 +0.0 + 0 +LINE + 5 +1731 + 8 +0 + 62 + 0 + 10 +15378.811933 + 20 +9170.0 + 30 +0.0 + 11 +15387.499966 + 21 +9185.048114 + 31 +0.0 + 0 +LINE + 5 +1732 + 8 +0 + 62 + 0 + 10 +15412.499966 + 20 +9228.349385 + 30 +0.0 + 11 +15424.999954 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1733 + 8 +0 + 62 + 0 + 10 +15412.499966 + 20 +9185.048114 + 30 +0.0 + 11 +15424.999966 + 21 +9206.69875 + 31 +0.0 + 0 +LINE + 5 +1734 + 8 +0 + 62 + 0 + 10 +15449.999966 + 20 +9206.69875 + 30 +0.0 + 11 +15462.499966 + 21 +9228.349385 + 31 +0.0 + 0 +LINE + 5 +1735 + 8 +0 + 62 + 0 + 10 +15453.811933 + 20 +9170.0 + 30 +0.0 + 11 +15462.499966 + 21 +9185.048115 + 31 +0.0 + 0 +LINE + 5 +1736 + 8 +0 + 62 + 0 + 10 +15487.499966 + 20 +9228.349385 + 30 +0.0 + 11 +15499.999954 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1737 + 8 +0 + 62 + 0 + 10 +15487.499966 + 20 +9185.048115 + 30 +0.0 + 11 +15499.999966 + 21 +9206.69875 + 31 +0.0 + 0 +LINE + 5 +1738 + 8 +0 + 62 + 0 + 10 +15524.999965 + 20 +9206.69875 + 30 +0.0 + 11 +15537.499965 + 21 +9228.349385 + 31 +0.0 + 0 +LINE + 5 +1739 + 8 +0 + 62 + 0 + 10 +15528.811932 + 20 +9170.0 + 30 +0.0 + 11 +15537.499965 + 21 +9185.048115 + 31 +0.0 + 0 +LINE + 5 +173A + 8 +0 + 62 + 0 + 10 +15562.499965 + 20 +9228.349385 + 30 +0.0 + 11 +15574.999954 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +173B + 8 +0 + 62 + 0 + 10 +15562.499965 + 20 +9185.048115 + 30 +0.0 + 11 +15574.999965 + 21 +9206.69875 + 31 +0.0 + 0 +LINE + 5 +173C + 8 +0 + 62 + 0 + 10 +15599.999965 + 20 +9206.69875 + 30 +0.0 + 11 +15612.499965 + 21 +9228.349385 + 31 +0.0 + 0 +LINE + 5 +173D + 8 +0 + 62 + 0 + 10 +15603.811932 + 20 +9170.0 + 30 +0.0 + 11 +15612.499965 + 21 +9185.048115 + 31 +0.0 + 0 +LINE + 5 +173E + 8 +0 + 62 + 0 + 10 +15637.499965 + 20 +9228.349385 + 30 +0.0 + 11 +15649.999953 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +173F + 8 +0 + 62 + 0 + 10 +15637.499965 + 20 +9185.048115 + 30 +0.0 + 11 +15649.999965 + 21 +9206.69875 + 31 +0.0 + 0 +LINE + 5 +1740 + 8 +0 + 62 + 0 + 10 +15674.999965 + 20 +9206.69875 + 30 +0.0 + 11 +15687.499965 + 21 +9228.349385 + 31 +0.0 + 0 +LINE + 5 +1741 + 8 +0 + 62 + 0 + 10 +15678.811932 + 20 +9170.0 + 30 +0.0 + 11 +15687.499965 + 21 +9185.048115 + 31 +0.0 + 0 +LINE + 5 +1742 + 8 +0 + 62 + 0 + 10 +15712.499965 + 20 +9228.349385 + 30 +0.0 + 11 +15724.999953 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1743 + 8 +0 + 62 + 0 + 10 +15712.499965 + 20 +9185.048115 + 30 +0.0 + 11 +15724.999965 + 21 +9206.69875 + 31 +0.0 + 0 +LINE + 5 +1744 + 8 +0 + 62 + 0 + 10 +15749.999965 + 20 +9206.69875 + 30 +0.0 + 11 +15762.499965 + 21 +9228.349385 + 31 +0.0 + 0 +LINE + 5 +1745 + 8 +0 + 62 + 0 + 10 +15753.811931 + 20 +9170.0 + 30 +0.0 + 11 +15762.499965 + 21 +9185.048115 + 31 +0.0 + 0 +LINE + 5 +1746 + 8 +0 + 62 + 0 + 10 +15787.499965 + 20 +9228.349385 + 30 +0.0 + 11 +15799.999953 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1747 + 8 +0 + 62 + 0 + 10 +15787.499965 + 20 +9185.048115 + 30 +0.0 + 11 +15799.999965 + 21 +9206.69875 + 31 +0.0 + 0 +LINE + 5 +1748 + 8 +0 + 62 + 0 + 10 +15824.999964 + 20 +9206.69875 + 30 +0.0 + 11 +15837.499964 + 21 +9228.349385 + 31 +0.0 + 0 +LINE + 5 +1749 + 8 +0 + 62 + 0 + 10 +15828.811931 + 20 +9170.0 + 30 +0.0 + 11 +15837.499964 + 21 +9185.048115 + 31 +0.0 + 0 +LINE + 5 +174A + 8 +0 + 62 + 0 + 10 +15862.499964 + 20 +9228.349385 + 30 +0.0 + 11 +15874.999952 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +174B + 8 +0 + 62 + 0 + 10 +15862.499964 + 20 +9185.048115 + 30 +0.0 + 11 +15874.999964 + 21 +9206.69875 + 31 +0.0 + 0 +LINE + 5 +174C + 8 +0 + 62 + 0 + 10 +15899.999964 + 20 +9206.69875 + 30 +0.0 + 11 +15912.499964 + 21 +9228.349386 + 31 +0.0 + 0 +LINE + 5 +174D + 8 +0 + 62 + 0 + 10 +15903.811931 + 20 +9170.0 + 30 +0.0 + 11 +15912.499964 + 21 +9185.048115 + 31 +0.0 + 0 +LINE + 5 +174E + 8 +0 + 62 + 0 + 10 +15937.499964 + 20 +9228.349386 + 30 +0.0 + 11 +15949.999952 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +174F + 8 +0 + 62 + 0 + 10 +15937.499964 + 20 +9185.048115 + 30 +0.0 + 11 +15949.999964 + 21 +9206.698751 + 31 +0.0 + 0 +LINE + 5 +1750 + 8 +0 + 62 + 0 + 10 +15974.999964 + 20 +9206.698751 + 30 +0.0 + 11 +15987.499964 + 21 +9228.349386 + 31 +0.0 + 0 +LINE + 5 +1751 + 8 +0 + 62 + 0 + 10 +15978.81193 + 20 +9170.0 + 30 +0.0 + 11 +15987.499964 + 21 +9185.048116 + 31 +0.0 + 0 +LINE + 5 +1752 + 8 +0 + 62 + 0 + 10 +16012.499964 + 20 +9228.349386 + 30 +0.0 + 11 +16024.999952 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1753 + 8 +0 + 62 + 0 + 10 +16012.499964 + 20 +9185.048116 + 30 +0.0 + 11 +16024.999964 + 21 +9206.698751 + 31 +0.0 + 0 +LINE + 5 +1754 + 8 +0 + 62 + 0 + 10 +16049.999964 + 20 +9206.698751 + 30 +0.0 + 11 +16062.499964 + 21 +9228.349386 + 31 +0.0 + 0 +LINE + 5 +1755 + 8 +0 + 62 + 0 + 10 +16053.81193 + 20 +9170.0 + 30 +0.0 + 11 +16062.499964 + 21 +9185.048116 + 31 +0.0 + 0 +LINE + 5 +1756 + 8 +0 + 62 + 0 + 10 +16087.499964 + 20 +9228.349386 + 30 +0.0 + 11 +16099.999951 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1757 + 8 +0 + 62 + 0 + 10 +16087.499964 + 20 +9185.048116 + 30 +0.0 + 11 +16099.999964 + 21 +9206.698751 + 31 +0.0 + 0 +LINE + 5 +1758 + 8 +0 + 62 + 0 + 10 +16124.999963 + 20 +9206.698751 + 30 +0.0 + 11 +16126.25 + 21 +9208.863878 + 31 +0.0 + 0 +ENDBLK + 5 +1759 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X47 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X47 + 1 + + 0 +LINE + 5 +175B + 8 +0 + 62 + 0 + 10 +17412.5 + 20 +9228.349365 + 30 +0.0 + 11 +17437.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +175C + 8 +0 + 62 + 0 + 10 +17487.5 + 20 +9228.349365 + 30 +0.0 + 11 +17512.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +175D + 8 +0 + 62 + 0 + 10 +17562.5 + 20 +9228.349365 + 30 +0.0 + 11 +17587.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +175E + 8 +0 + 62 + 0 + 10 +17637.5 + 20 +9228.349365 + 30 +0.0 + 11 +17662.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +175F + 8 +0 + 62 + 0 + 10 +17712.5 + 20 +9228.349365 + 30 +0.0 + 11 +17737.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1760 + 8 +0 + 62 + 0 + 10 +17787.5 + 20 +9228.349365 + 30 +0.0 + 11 +17812.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1761 + 8 +0 + 62 + 0 + 10 +17862.5 + 20 +9228.349365 + 30 +0.0 + 11 +17887.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1762 + 8 +0 + 62 + 0 + 10 +17937.5 + 20 +9228.349365 + 30 +0.0 + 11 +17962.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1763 + 8 +0 + 62 + 0 + 10 +18012.5 + 20 +9228.349365 + 30 +0.0 + 11 +18037.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1764 + 8 +0 + 62 + 0 + 10 +18087.5 + 20 +9228.349365 + 30 +0.0 + 11 +18112.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1765 + 8 +0 + 62 + 0 + 10 +18162.5 + 20 +9228.349365 + 30 +0.0 + 11 +18187.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1766 + 8 +0 + 62 + 0 + 10 +18237.5 + 20 +9228.349365 + 30 +0.0 + 11 +18262.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1767 + 8 +0 + 62 + 0 + 10 +18312.5 + 20 +9228.349365 + 30 +0.0 + 11 +18337.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1768 + 8 +0 + 62 + 0 + 10 +18387.5 + 20 +9228.349365 + 30 +0.0 + 11 +18412.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +1769 + 8 +0 + 62 + 0 + 10 +18462.5 + 20 +9228.349365 + 30 +0.0 + 11 +18487.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +176A + 8 +0 + 62 + 0 + 10 +17375.0 + 20 +9206.69873 + 30 +0.0 + 11 +17400.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +176B + 8 +0 + 62 + 0 + 10 +17450.0 + 20 +9206.69873 + 30 +0.0 + 11 +17475.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +176C + 8 +0 + 62 + 0 + 10 +17525.0 + 20 +9206.69873 + 30 +0.0 + 11 +17550.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +176D + 8 +0 + 62 + 0 + 10 +17600.0 + 20 +9206.69873 + 30 +0.0 + 11 +17625.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +176E + 8 +0 + 62 + 0 + 10 +17675.0 + 20 +9206.69873 + 30 +0.0 + 11 +17700.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +176F + 8 +0 + 62 + 0 + 10 +17750.0 + 20 +9206.69873 + 30 +0.0 + 11 +17775.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +1770 + 8 +0 + 62 + 0 + 10 +17825.0 + 20 +9206.69873 + 30 +0.0 + 11 +17850.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +1771 + 8 +0 + 62 + 0 + 10 +17900.0 + 20 +9206.69873 + 30 +0.0 + 11 +17925.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +1772 + 8 +0 + 62 + 0 + 10 +17975.0 + 20 +9206.69873 + 30 +0.0 + 11 +18000.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +1773 + 8 +0 + 62 + 0 + 10 +18050.0 + 20 +9206.69873 + 30 +0.0 + 11 +18075.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +1774 + 8 +0 + 62 + 0 + 10 +18125.0 + 20 +9206.69873 + 30 +0.0 + 11 +18150.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +1775 + 8 +0 + 62 + 0 + 10 +18200.0 + 20 +9206.69873 + 30 +0.0 + 11 +18225.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +1776 + 8 +0 + 62 + 0 + 10 +18275.0 + 20 +9206.69873 + 30 +0.0 + 11 +18300.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +1777 + 8 +0 + 62 + 0 + 10 +18350.0 + 20 +9206.69873 + 30 +0.0 + 11 +18375.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +1778 + 8 +0 + 62 + 0 + 10 +18425.0 + 20 +9206.69873 + 30 +0.0 + 11 +18450.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +1779 + 8 +0 + 62 + 0 + 10 +18500.0 + 20 +9206.69873 + 30 +0.0 + 11 +18501.25 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +177A + 8 +0 + 62 + 0 + 10 +17412.5 + 20 +9185.048095 + 30 +0.0 + 11 +17437.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +177B + 8 +0 + 62 + 0 + 10 +17487.5 + 20 +9185.048095 + 30 +0.0 + 11 +17512.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +177C + 8 +0 + 62 + 0 + 10 +17562.5 + 20 +9185.048095 + 30 +0.0 + 11 +17587.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +177D + 8 +0 + 62 + 0 + 10 +17637.5 + 20 +9185.048095 + 30 +0.0 + 11 +17662.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +177E + 8 +0 + 62 + 0 + 10 +17712.5 + 20 +9185.048095 + 30 +0.0 + 11 +17737.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +177F + 8 +0 + 62 + 0 + 10 +17787.5 + 20 +9185.048095 + 30 +0.0 + 11 +17812.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +1780 + 8 +0 + 62 + 0 + 10 +17862.5 + 20 +9185.048095 + 30 +0.0 + 11 +17887.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +1781 + 8 +0 + 62 + 0 + 10 +17937.5 + 20 +9185.048095 + 30 +0.0 + 11 +17962.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +1782 + 8 +0 + 62 + 0 + 10 +18012.5 + 20 +9185.048095 + 30 +0.0 + 11 +18037.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +1783 + 8 +0 + 62 + 0 + 10 +18087.5 + 20 +9185.048095 + 30 +0.0 + 11 +18112.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +1784 + 8 +0 + 62 + 0 + 10 +18162.5 + 20 +9185.048095 + 30 +0.0 + 11 +18187.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +1785 + 8 +0 + 62 + 0 + 10 +18237.5 + 20 +9185.048095 + 30 +0.0 + 11 +18262.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +1786 + 8 +0 + 62 + 0 + 10 +18312.5 + 20 +9185.048095 + 30 +0.0 + 11 +18337.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +1787 + 8 +0 + 62 + 0 + 10 +18387.5 + 20 +9185.048095 + 30 +0.0 + 11 +18412.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +1788 + 8 +0 + 62 + 0 + 10 +18462.5 + 20 +9185.048095 + 30 +0.0 + 11 +18487.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +1789 + 8 +0 + 62 + 0 + 10 +17937.499958 + 20 +9185.04807 + 30 +0.0 + 11 +17924.999958 + 21 +9206.698705 + 31 +0.0 + 0 +LINE + 5 +178A + 8 +0 + 62 + 0 + 10 +17899.999958 + 20 +9249.999976 + 30 +0.0 + 11 +17899.999944 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +178B + 8 +0 + 62 + 0 + 10 +17899.999958 + 20 +9206.698705 + 30 +0.0 + 11 +17887.499958 + 21 +9228.349341 + 31 +0.0 + 0 +LINE + 5 +178C + 8 +0 + 62 + 0 + 10 +17896.187965 + 20 +9170.0 + 30 +0.0 + 11 +17887.499958 + 21 +9185.04807 + 31 +0.0 + 0 +LINE + 5 +178D + 8 +0 + 62 + 0 + 10 +17862.499958 + 20 +9228.349341 + 30 +0.0 + 11 +17849.999958 + 21 +9249.999976 + 31 +0.0 + 0 +LINE + 5 +178E + 8 +0 + 62 + 0 + 10 +17862.499958 + 20 +9185.04807 + 30 +0.0 + 11 +17849.999958 + 21 +9206.698706 + 31 +0.0 + 0 +LINE + 5 +178F + 8 +0 + 62 + 0 + 10 +17824.999958 + 20 +9249.999976 + 30 +0.0 + 11 +17824.999944 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1790 + 8 +0 + 62 + 0 + 10 +17824.999958 + 20 +9206.698706 + 30 +0.0 + 11 +17812.499958 + 21 +9228.349341 + 31 +0.0 + 0 +LINE + 5 +1791 + 8 +0 + 62 + 0 + 10 +17821.187966 + 20 +9170.0 + 30 +0.0 + 11 +17812.499958 + 21 +9185.048071 + 31 +0.0 + 0 +LINE + 5 +1792 + 8 +0 + 62 + 0 + 10 +17787.499958 + 20 +9228.349341 + 30 +0.0 + 11 +17774.999958 + 21 +9249.999976 + 31 +0.0 + 0 +LINE + 5 +1793 + 8 +0 + 62 + 0 + 10 +17787.499958 + 20 +9185.048071 + 30 +0.0 + 11 +17774.999958 + 21 +9206.698706 + 31 +0.0 + 0 +LINE + 5 +1794 + 8 +0 + 62 + 0 + 10 +17749.999958 + 20 +9249.999976 + 30 +0.0 + 11 +17749.999944 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1795 + 8 +0 + 62 + 0 + 10 +17749.999958 + 20 +9206.698706 + 30 +0.0 + 11 +17737.499958 + 21 +9228.349341 + 31 +0.0 + 0 +LINE + 5 +1796 + 8 +0 + 62 + 0 + 10 +17746.187966 + 20 +9170.0 + 30 +0.0 + 11 +17737.499958 + 21 +9185.048071 + 31 +0.0 + 0 +LINE + 5 +1797 + 8 +0 + 62 + 0 + 10 +17712.499958 + 20 +9228.349341 + 30 +0.0 + 11 +17699.999958 + 21 +9249.999976 + 31 +0.0 + 0 +LINE + 5 +1798 + 8 +0 + 62 + 0 + 10 +17712.499958 + 20 +9185.048071 + 30 +0.0 + 11 +17699.999958 + 21 +9206.698706 + 31 +0.0 + 0 +LINE + 5 +1799 + 8 +0 + 62 + 0 + 10 +17674.999958 + 20 +9249.999976 + 30 +0.0 + 11 +17674.999945 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +179A + 8 +0 + 62 + 0 + 10 +17674.999959 + 20 +9206.698706 + 30 +0.0 + 11 +17662.499959 + 21 +9228.349341 + 31 +0.0 + 0 +LINE + 5 +179B + 8 +0 + 62 + 0 + 10 +17671.187966 + 20 +9170.0 + 30 +0.0 + 11 +17662.499959 + 21 +9185.048071 + 31 +0.0 + 0 +LINE + 5 +179C + 8 +0 + 62 + 0 + 10 +17637.499959 + 20 +9228.349341 + 30 +0.0 + 11 +17624.999959 + 21 +9249.999976 + 31 +0.0 + 0 +LINE + 5 +179D + 8 +0 + 62 + 0 + 10 +17637.499959 + 20 +9185.048071 + 30 +0.0 + 11 +17624.999959 + 21 +9206.698706 + 31 +0.0 + 0 +LINE + 5 +179E + 8 +0 + 62 + 0 + 10 +17599.999959 + 20 +9249.999976 + 30 +0.0 + 11 +17599.999945 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +179F + 8 +0 + 62 + 0 + 10 +17599.999959 + 20 +9206.698706 + 30 +0.0 + 11 +17587.499959 + 21 +9228.349341 + 31 +0.0 + 0 +LINE + 5 +17A0 + 8 +0 + 62 + 0 + 10 +17596.187967 + 20 +9170.0 + 30 +0.0 + 11 +17587.499959 + 21 +9185.048071 + 31 +0.0 + 0 +LINE + 5 +17A1 + 8 +0 + 62 + 0 + 10 +17562.499959 + 20 +9228.349341 + 30 +0.0 + 11 +17549.999959 + 21 +9249.999976 + 31 +0.0 + 0 +LINE + 5 +17A2 + 8 +0 + 62 + 0 + 10 +17562.499959 + 20 +9185.048071 + 30 +0.0 + 11 +17549.999959 + 21 +9206.698706 + 31 +0.0 + 0 +LINE + 5 +17A3 + 8 +0 + 62 + 0 + 10 +17524.999959 + 20 +9249.999976 + 30 +0.0 + 11 +17524.999945 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +17A4 + 8 +0 + 62 + 0 + 10 +17524.999959 + 20 +9206.698706 + 30 +0.0 + 11 +17512.499959 + 21 +9228.349341 + 31 +0.0 + 0 +LINE + 5 +17A5 + 8 +0 + 62 + 0 + 10 +17521.187967 + 20 +9170.0 + 30 +0.0 + 11 +17512.499959 + 21 +9185.048071 + 31 +0.0 + 0 +LINE + 5 +17A6 + 8 +0 + 62 + 0 + 10 +17487.499959 + 20 +9228.349341 + 30 +0.0 + 11 +17474.999959 + 21 +9249.999976 + 31 +0.0 + 0 +LINE + 5 +17A7 + 8 +0 + 62 + 0 + 10 +17487.499959 + 20 +9185.048071 + 30 +0.0 + 11 +17474.999959 + 21 +9206.698706 + 31 +0.0 + 0 +LINE + 5 +17A8 + 8 +0 + 62 + 0 + 10 +17449.999959 + 20 +9249.999976 + 30 +0.0 + 11 +17449.999946 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +17A9 + 8 +0 + 62 + 0 + 10 +17449.999959 + 20 +9206.698706 + 30 +0.0 + 11 +17437.499959 + 21 +9228.349341 + 31 +0.0 + 0 +LINE + 5 +17AA + 8 +0 + 62 + 0 + 10 +17446.187967 + 20 +9170.0 + 30 +0.0 + 11 +17437.499959 + 21 +9185.048071 + 31 +0.0 + 0 +LINE + 5 +17AB + 8 +0 + 62 + 0 + 10 +17412.499959 + 20 +9228.349341 + 30 +0.0 + 11 +17399.999959 + 21 +9249.999977 + 31 +0.0 + 0 +LINE + 5 +17AC + 8 +0 + 62 + 0 + 10 +17412.499959 + 20 +9185.048071 + 30 +0.0 + 11 +17399.999959 + 21 +9206.698706 + 31 +0.0 + 0 +LINE + 5 +17AD + 8 +0 + 62 + 0 + 10 +17374.999959 + 20 +9249.999977 + 30 +0.0 + 11 +17374.999946 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +17AE + 8 +0 + 62 + 0 + 10 +17374.99996 + 20 +9206.698706 + 30 +0.0 + 11 +17363.75 + 21 +9226.184208 + 31 +0.0 + 0 +LINE + 5 +17AF + 8 +0 + 62 + 0 + 10 +17371.187968 + 20 +9170.0 + 30 +0.0 + 11 +17363.75 + 21 +9182.882938 + 31 +0.0 + 0 +LINE + 5 +17B0 + 8 +0 + 62 + 0 + 10 +17971.187965 + 20 +9170.0 + 30 +0.0 + 11 +17962.499958 + 21 +9185.04807 + 31 +0.0 + 0 +LINE + 5 +17B1 + 8 +0 + 62 + 0 + 10 +17937.499958 + 20 +9228.34934 + 30 +0.0 + 11 +17924.999958 + 21 +9249.999976 + 31 +0.0 + 0 +LINE + 5 +17B2 + 8 +0 + 62 + 0 + 10 +17974.999958 + 20 +9206.698705 + 30 +0.0 + 11 +17962.499958 + 21 +9228.34934 + 31 +0.0 + 0 +LINE + 5 +17B3 + 8 +0 + 62 + 0 + 10 +18012.499957 + 20 +9185.04807 + 30 +0.0 + 11 +17999.999957 + 21 +9206.698705 + 31 +0.0 + 0 +LINE + 5 +17B4 + 8 +0 + 62 + 0 + 10 +17974.999957 + 20 +9249.999975 + 30 +0.0 + 11 +17974.999943 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +17B5 + 8 +0 + 62 + 0 + 10 +18046.187965 + 20 +9170.0 + 30 +0.0 + 11 +18037.499957 + 21 +9185.04807 + 31 +0.0 + 0 +LINE + 5 +17B6 + 8 +0 + 62 + 0 + 10 +18012.499957 + 20 +9228.34934 + 30 +0.0 + 11 +17999.999957 + 21 +9249.999975 + 31 +0.0 + 0 +LINE + 5 +17B7 + 8 +0 + 62 + 0 + 10 +18049.999957 + 20 +9206.698705 + 30 +0.0 + 11 +18037.499957 + 21 +9228.34934 + 31 +0.0 + 0 +LINE + 5 +17B8 + 8 +0 + 62 + 0 + 10 +18087.499957 + 20 +9185.04807 + 30 +0.0 + 11 +18074.999957 + 21 +9206.698705 + 31 +0.0 + 0 +LINE + 5 +17B9 + 8 +0 + 62 + 0 + 10 +18049.999957 + 20 +9249.999975 + 30 +0.0 + 11 +18049.999943 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +17BA + 8 +0 + 62 + 0 + 10 +18121.187964 + 20 +9170.0 + 30 +0.0 + 11 +18112.499957 + 21 +9185.04807 + 31 +0.0 + 0 +LINE + 5 +17BB + 8 +0 + 62 + 0 + 10 +18087.499957 + 20 +9228.34934 + 30 +0.0 + 11 +18074.999957 + 21 +9249.999975 + 31 +0.0 + 0 +LINE + 5 +17BC + 8 +0 + 62 + 0 + 10 +18124.999957 + 20 +9206.698705 + 30 +0.0 + 11 +18112.499957 + 21 +9228.34934 + 31 +0.0 + 0 +LINE + 5 +17BD + 8 +0 + 62 + 0 + 10 +18162.499957 + 20 +9185.04807 + 30 +0.0 + 11 +18149.999957 + 21 +9206.698705 + 31 +0.0 + 0 +LINE + 5 +17BE + 8 +0 + 62 + 0 + 10 +18124.999957 + 20 +9249.999975 + 30 +0.0 + 11 +18124.999943 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +17BF + 8 +0 + 62 + 0 + 10 +18196.187964 + 20 +9170.0 + 30 +0.0 + 11 +18187.499957 + 21 +9185.04807 + 31 +0.0 + 0 +LINE + 5 +17C0 + 8 +0 + 62 + 0 + 10 +18162.499957 + 20 +9228.34934 + 30 +0.0 + 11 +18149.999957 + 21 +9249.999975 + 31 +0.0 + 0 +LINE + 5 +17C1 + 8 +0 + 62 + 0 + 10 +18199.999957 + 20 +9206.698705 + 30 +0.0 + 11 +18187.499957 + 21 +9228.34934 + 31 +0.0 + 0 +LINE + 5 +17C2 + 8 +0 + 62 + 0 + 10 +18237.499957 + 20 +9185.04807 + 30 +0.0 + 11 +18224.999957 + 21 +9206.698705 + 31 +0.0 + 0 +LINE + 5 +17C3 + 8 +0 + 62 + 0 + 10 +18199.999957 + 20 +9249.999975 + 30 +0.0 + 11 +18199.999942 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +17C4 + 8 +0 + 62 + 0 + 10 +18271.187964 + 20 +9170.0 + 30 +0.0 + 11 +18262.499957 + 21 +9185.04807 + 31 +0.0 + 0 +LINE + 5 +17C5 + 8 +0 + 62 + 0 + 10 +18237.499957 + 20 +9228.34934 + 30 +0.0 + 11 +18224.999957 + 21 +9249.999975 + 31 +0.0 + 0 +LINE + 5 +17C6 + 8 +0 + 62 + 0 + 10 +18274.999957 + 20 +9206.698705 + 30 +0.0 + 11 +18262.499957 + 21 +9228.34934 + 31 +0.0 + 0 +LINE + 5 +17C7 + 8 +0 + 62 + 0 + 10 +18312.499956 + 20 +9185.04807 + 30 +0.0 + 11 +18299.999956 + 21 +9206.698705 + 31 +0.0 + 0 +LINE + 5 +17C8 + 8 +0 + 62 + 0 + 10 +18274.999956 + 20 +9249.999975 + 30 +0.0 + 11 +18274.999942 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +17C9 + 8 +0 + 62 + 0 + 10 +18346.187963 + 20 +9170.0 + 30 +0.0 + 11 +18337.499956 + 21 +9185.04807 + 31 +0.0 + 0 +LINE + 5 +17CA + 8 +0 + 62 + 0 + 10 +18312.499956 + 20 +9228.34934 + 30 +0.0 + 11 +18299.999956 + 21 +9249.999975 + 31 +0.0 + 0 +LINE + 5 +17CB + 8 +0 + 62 + 0 + 10 +18349.999956 + 20 +9206.698705 + 30 +0.0 + 11 +18337.499956 + 21 +9228.34934 + 31 +0.0 + 0 +LINE + 5 +17CC + 8 +0 + 62 + 0 + 10 +18387.499956 + 20 +9185.048069 + 30 +0.0 + 11 +18374.999956 + 21 +9206.698705 + 31 +0.0 + 0 +LINE + 5 +17CD + 8 +0 + 62 + 0 + 10 +18349.999956 + 20 +9249.999975 + 30 +0.0 + 11 +18349.999942 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +17CE + 8 +0 + 62 + 0 + 10 +18421.187963 + 20 +9170.0 + 30 +0.0 + 11 +18412.499956 + 21 +9185.048069 + 31 +0.0 + 0 +LINE + 5 +17CF + 8 +0 + 62 + 0 + 10 +18387.499956 + 20 +9228.34934 + 30 +0.0 + 11 +18374.999956 + 21 +9249.999975 + 31 +0.0 + 0 +LINE + 5 +17D0 + 8 +0 + 62 + 0 + 10 +18424.999956 + 20 +9206.698704 + 30 +0.0 + 11 +18412.499956 + 21 +9228.34934 + 31 +0.0 + 0 +LINE + 5 +17D1 + 8 +0 + 62 + 0 + 10 +18462.499956 + 20 +9185.048069 + 30 +0.0 + 11 +18449.999956 + 21 +9206.698704 + 31 +0.0 + 0 +LINE + 5 +17D2 + 8 +0 + 62 + 0 + 10 +18424.999956 + 20 +9249.999975 + 30 +0.0 + 11 +18424.999941 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +17D3 + 8 +0 + 62 + 0 + 10 +18496.187963 + 20 +9170.0 + 30 +0.0 + 11 +18487.499956 + 21 +9185.048069 + 31 +0.0 + 0 +LINE + 5 +17D4 + 8 +0 + 62 + 0 + 10 +18462.499956 + 20 +9228.349339 + 30 +0.0 + 11 +18449.999956 + 21 +9249.999975 + 31 +0.0 + 0 +LINE + 5 +17D5 + 8 +0 + 62 + 0 + 10 +18499.999956 + 20 +9206.698704 + 30 +0.0 + 11 +18487.499956 + 21 +9228.349339 + 31 +0.0 + 0 +LINE + 5 +17D6 + 8 +0 + 62 + 0 + 10 +18499.999956 + 20 +9249.999974 + 30 +0.0 + 11 +18499.999941 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +17D7 + 8 +0 + 62 + 0 + 10 +17924.999958 + 20 +9206.698754 + 30 +0.0 + 11 +17937.499958 + 21 +9228.349389 + 31 +0.0 + 0 +LINE + 5 +17D8 + 8 +0 + 62 + 0 + 10 +17887.499958 + 20 +9185.048119 + 30 +0.0 + 11 +17899.999958 + 21 +9206.698754 + 31 +0.0 + 0 +LINE + 5 +17D9 + 8 +0 + 62 + 0 + 10 +17853.811922 + 20 +9170.0 + 30 +0.0 + 11 +17862.499958 + 21 +9185.048119 + 31 +0.0 + 0 +LINE + 5 +17DA + 8 +0 + 62 + 0 + 10 +17887.499958 + 20 +9228.349389 + 30 +0.0 + 11 +17899.999944 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +17DB + 8 +0 + 62 + 0 + 10 +17849.999958 + 20 +9206.698754 + 30 +0.0 + 11 +17862.499958 + 21 +9228.349389 + 31 +0.0 + 0 +LINE + 5 +17DC + 8 +0 + 62 + 0 + 10 +17812.499958 + 20 +9185.048119 + 30 +0.0 + 11 +17824.999958 + 21 +9206.698754 + 31 +0.0 + 0 +LINE + 5 +17DD + 8 +0 + 62 + 0 + 10 +17778.811922 + 20 +9170.0 + 30 +0.0 + 11 +17787.499958 + 21 +9185.048119 + 31 +0.0 + 0 +LINE + 5 +17DE + 8 +0 + 62 + 0 + 10 +17812.499958 + 20 +9228.349389 + 30 +0.0 + 11 +17824.999944 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +17DF + 8 +0 + 62 + 0 + 10 +17774.999958 + 20 +9206.698754 + 30 +0.0 + 11 +17787.499958 + 21 +9228.349389 + 31 +0.0 + 0 +LINE + 5 +17E0 + 8 +0 + 62 + 0 + 10 +17737.499958 + 20 +9185.048119 + 30 +0.0 + 11 +17749.999958 + 21 +9206.698754 + 31 +0.0 + 0 +LINE + 5 +17E1 + 8 +0 + 62 + 0 + 10 +17703.811923 + 20 +9170.0 + 30 +0.0 + 11 +17712.499958 + 21 +9185.048119 + 31 +0.0 + 0 +LINE + 5 +17E2 + 8 +0 + 62 + 0 + 10 +17737.499958 + 20 +9228.349389 + 30 +0.0 + 11 +17749.999944 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +17E3 + 8 +0 + 62 + 0 + 10 +17699.999958 + 20 +9206.698754 + 30 +0.0 + 11 +17712.499958 + 21 +9228.349389 + 31 +0.0 + 0 +LINE + 5 +17E4 + 8 +0 + 62 + 0 + 10 +17662.499958 + 20 +9185.048119 + 30 +0.0 + 11 +17674.999958 + 21 +9206.698754 + 31 +0.0 + 0 +LINE + 5 +17E5 + 8 +0 + 62 + 0 + 10 +17628.811923 + 20 +9170.0 + 30 +0.0 + 11 +17637.499958 + 21 +9185.048119 + 31 +0.0 + 0 +LINE + 5 +17E6 + 8 +0 + 62 + 0 + 10 +17662.499958 + 20 +9228.349389 + 30 +0.0 + 11 +17674.999945 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +17E7 + 8 +0 + 62 + 0 + 10 +17624.999959 + 20 +9206.698754 + 30 +0.0 + 11 +17637.499959 + 21 +9228.349389 + 31 +0.0 + 0 +LINE + 5 +17E8 + 8 +0 + 62 + 0 + 10 +17587.499959 + 20 +9185.048119 + 30 +0.0 + 11 +17599.999959 + 21 +9206.698754 + 31 +0.0 + 0 +LINE + 5 +17E9 + 8 +0 + 62 + 0 + 10 +17553.811923 + 20 +9170.0 + 30 +0.0 + 11 +17562.499959 + 21 +9185.048119 + 31 +0.0 + 0 +LINE + 5 +17EA + 8 +0 + 62 + 0 + 10 +17587.499959 + 20 +9228.349389 + 30 +0.0 + 11 +17599.999945 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +17EB + 8 +0 + 62 + 0 + 10 +17549.999959 + 20 +9206.698754 + 30 +0.0 + 11 +17562.499959 + 21 +9228.349389 + 31 +0.0 + 0 +LINE + 5 +17EC + 8 +0 + 62 + 0 + 10 +17512.499959 + 20 +9185.048118 + 30 +0.0 + 11 +17524.999959 + 21 +9206.698754 + 31 +0.0 + 0 +LINE + 5 +17ED + 8 +0 + 62 + 0 + 10 +17478.811924 + 20 +9170.0 + 30 +0.0 + 11 +17487.499959 + 21 +9185.048118 + 31 +0.0 + 0 +LINE + 5 +17EE + 8 +0 + 62 + 0 + 10 +17512.499959 + 20 +9228.349389 + 30 +0.0 + 11 +17524.999945 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +17EF + 8 +0 + 62 + 0 + 10 +17474.999959 + 20 +9206.698753 + 30 +0.0 + 11 +17487.499959 + 21 +9228.349389 + 31 +0.0 + 0 +LINE + 5 +17F0 + 8 +0 + 62 + 0 + 10 +17437.499959 + 20 +9185.048118 + 30 +0.0 + 11 +17449.999959 + 21 +9206.698753 + 31 +0.0 + 0 +LINE + 5 +17F1 + 8 +0 + 62 + 0 + 10 +17403.811924 + 20 +9170.0 + 30 +0.0 + 11 +17412.499959 + 21 +9185.048118 + 31 +0.0 + 0 +LINE + 5 +17F2 + 8 +0 + 62 + 0 + 10 +17437.499959 + 20 +9228.349388 + 30 +0.0 + 11 +17449.999946 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +17F3 + 8 +0 + 62 + 0 + 10 +17399.999959 + 20 +9206.698753 + 30 +0.0 + 11 +17412.499959 + 21 +9228.349388 + 31 +0.0 + 0 +LINE + 5 +17F4 + 8 +0 + 62 + 0 + 10 +17363.75 + 20 +9187.213252 + 30 +0.0 + 11 +17374.999959 + 21 +9206.698753 + 31 +0.0 + 0 +LINE + 5 +17F5 + 8 +0 + 62 + 0 + 10 +17363.75 + 20 +9230.514522 + 30 +0.0 + 11 +17374.999946 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +17F6 + 8 +0 + 62 + 0 + 10 +17928.811922 + 20 +9170.0 + 30 +0.0 + 11 +17937.499957 + 21 +9185.048119 + 31 +0.0 + 0 +LINE + 5 +17F7 + 8 +0 + 62 + 0 + 10 +17962.499957 + 20 +9228.349389 + 30 +0.0 + 11 +17974.999943 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +17F8 + 8 +0 + 62 + 0 + 10 +17962.499957 + 20 +9185.048119 + 30 +0.0 + 11 +17974.999957 + 21 +9206.698754 + 31 +0.0 + 0 +LINE + 5 +17F9 + 8 +0 + 62 + 0 + 10 +17999.999957 + 20 +9206.698754 + 30 +0.0 + 11 +18012.499957 + 21 +9228.34939 + 31 +0.0 + 0 +LINE + 5 +17FA + 8 +0 + 62 + 0 + 10 +18003.811921 + 20 +9170.0 + 30 +0.0 + 11 +18012.499957 + 21 +9185.048119 + 31 +0.0 + 0 +LINE + 5 +17FB + 8 +0 + 62 + 0 + 10 +18037.499957 + 20 +9228.34939 + 30 +0.0 + 11 +18049.999943 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +17FC + 8 +0 + 62 + 0 + 10 +18037.499957 + 20 +9185.048119 + 30 +0.0 + 11 +18049.999957 + 21 +9206.698755 + 31 +0.0 + 0 +LINE + 5 +17FD + 8 +0 + 62 + 0 + 10 +18074.999957 + 20 +9206.698755 + 30 +0.0 + 11 +18087.499957 + 21 +9228.34939 + 31 +0.0 + 0 +LINE + 5 +17FE + 8 +0 + 62 + 0 + 10 +18078.811921 + 20 +9170.0 + 30 +0.0 + 11 +18087.499957 + 21 +9185.04812 + 31 +0.0 + 0 +LINE + 5 +17FF + 8 +0 + 62 + 0 + 10 +18112.499957 + 20 +9228.34939 + 30 +0.0 + 11 +18124.999943 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1800 + 8 +0 + 62 + 0 + 10 +18112.499957 + 20 +9185.04812 + 30 +0.0 + 11 +18124.999957 + 21 +9206.698755 + 31 +0.0 + 0 +LINE + 5 +1801 + 8 +0 + 62 + 0 + 10 +18149.999957 + 20 +9206.698755 + 30 +0.0 + 11 +18162.499957 + 21 +9228.34939 + 31 +0.0 + 0 +LINE + 5 +1802 + 8 +0 + 62 + 0 + 10 +18153.811921 + 20 +9170.0 + 30 +0.0 + 11 +18162.499957 + 21 +9185.04812 + 31 +0.0 + 0 +LINE + 5 +1803 + 8 +0 + 62 + 0 + 10 +18187.499957 + 20 +9228.34939 + 30 +0.0 + 11 +18199.999942 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1804 + 8 +0 + 62 + 0 + 10 +18187.499957 + 20 +9185.04812 + 30 +0.0 + 11 +18199.999957 + 21 +9206.698755 + 31 +0.0 + 0 +LINE + 5 +1805 + 8 +0 + 62 + 0 + 10 +18224.999957 + 20 +9206.698755 + 30 +0.0 + 11 +18237.499957 + 21 +9228.34939 + 31 +0.0 + 0 +LINE + 5 +1806 + 8 +0 + 62 + 0 + 10 +18228.81192 + 20 +9170.0 + 30 +0.0 + 11 +18237.499956 + 21 +9185.04812 + 31 +0.0 + 0 +LINE + 5 +1807 + 8 +0 + 62 + 0 + 10 +18262.499956 + 20 +9228.34939 + 30 +0.0 + 11 +18274.999942 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1808 + 8 +0 + 62 + 0 + 10 +18262.499956 + 20 +9185.04812 + 30 +0.0 + 11 +18274.999956 + 21 +9206.698755 + 31 +0.0 + 0 +LINE + 5 +1809 + 8 +0 + 62 + 0 + 10 +18299.999956 + 20 +9206.698755 + 30 +0.0 + 11 +18312.499956 + 21 +9228.34939 + 31 +0.0 + 0 +LINE + 5 +180A + 8 +0 + 62 + 0 + 10 +18303.81192 + 20 +9170.0 + 30 +0.0 + 11 +18312.499956 + 21 +9185.04812 + 31 +0.0 + 0 +LINE + 5 +180B + 8 +0 + 62 + 0 + 10 +18337.499956 + 20 +9228.34939 + 30 +0.0 + 11 +18349.999942 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +180C + 8 +0 + 62 + 0 + 10 +18337.499956 + 20 +9185.04812 + 30 +0.0 + 11 +18349.999956 + 21 +9206.698755 + 31 +0.0 + 0 +LINE + 5 +180D + 8 +0 + 62 + 0 + 10 +18374.999956 + 20 +9206.698755 + 30 +0.0 + 11 +18387.499956 + 21 +9228.34939 + 31 +0.0 + 0 +LINE + 5 +180E + 8 +0 + 62 + 0 + 10 +18378.81192 + 20 +9170.0 + 30 +0.0 + 11 +18387.499956 + 21 +9185.04812 + 31 +0.0 + 0 +LINE + 5 +180F + 8 +0 + 62 + 0 + 10 +18412.499956 + 20 +9228.34939 + 30 +0.0 + 11 +18424.999941 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1810 + 8 +0 + 62 + 0 + 10 +18412.499956 + 20 +9185.04812 + 30 +0.0 + 11 +18424.999956 + 21 +9206.698755 + 31 +0.0 + 0 +LINE + 5 +1811 + 8 +0 + 62 + 0 + 10 +18449.999956 + 20 +9206.698755 + 30 +0.0 + 11 +18462.499956 + 21 +9228.34939 + 31 +0.0 + 0 +LINE + 5 +1812 + 8 +0 + 62 + 0 + 10 +18453.811919 + 20 +9170.0 + 30 +0.0 + 11 +18462.499956 + 21 +9185.04812 + 31 +0.0 + 0 +LINE + 5 +1813 + 8 +0 + 62 + 0 + 10 +18487.499956 + 20 +9228.34939 + 30 +0.0 + 11 +18499.999941 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +1814 + 8 +0 + 62 + 0 + 10 +18487.499956 + 20 +9185.04812 + 30 +0.0 + 11 +18499.999956 + 21 +9206.698755 + 31 +0.0 + 0 +ENDBLK + 5 +1815 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X48 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X48 + 1 + + 0 +LINE + 5 +1817 + 8 +0 + 62 + 0 + 10 +19775.0 + 20 +22153.77846 + 30 +0.0 + 11 +19800.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1818 + 8 +0 + 62 + 0 + 10 +19850.0 + 20 +22153.77846 + 30 +0.0 + 11 +19875.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1819 + 8 +0 + 62 + 0 + 10 +19925.0 + 20 +22153.77846 + 30 +0.0 + 11 +19950.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +181A + 8 +0 + 62 + 0 + 10 +20000.0 + 20 +22153.77846 + 30 +0.0 + 11 +20025.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +181B + 8 +0 + 62 + 0 + 10 +20075.0 + 20 +22153.77846 + 30 +0.0 + 11 +20100.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +181C + 8 +0 + 62 + 0 + 10 +20150.0 + 20 +22153.77846 + 30 +0.0 + 11 +20175.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +181D + 8 +0 + 62 + 0 + 10 +20225.0 + 20 +22153.77846 + 30 +0.0 + 11 +20250.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +181E + 8 +0 + 62 + 0 + 10 +20300.0 + 20 +22153.77846 + 30 +0.0 + 11 +20325.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +181F + 8 +0 + 62 + 0 + 10 +20375.0 + 20 +22153.77846 + 30 +0.0 + 11 +20400.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1820 + 8 +0 + 62 + 0 + 10 +20450.0 + 20 +22153.77846 + 30 +0.0 + 11 +20475.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1821 + 8 +0 + 62 + 0 + 10 +20525.0 + 20 +22153.77846 + 30 +0.0 + 11 +20550.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1822 + 8 +0 + 62 + 0 + 10 +20600.0 + 20 +22153.77846 + 30 +0.0 + 11 +20625.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1823 + 8 +0 + 62 + 0 + 10 +20675.0 + 20 +22153.77846 + 30 +0.0 + 11 +20700.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1824 + 8 +0 + 62 + 0 + 10 +20750.0 + 20 +22153.77846 + 30 +0.0 + 11 +20775.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1825 + 8 +0 + 62 + 0 + 10 +20825.0 + 20 +22153.77846 + 30 +0.0 + 11 +20850.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1826 + 8 +0 + 62 + 0 + 10 +20900.0 + 20 +22153.77846 + 30 +0.0 + 11 +20925.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1827 + 8 +0 + 62 + 0 + 10 +20975.0 + 20 +22153.77846 + 30 +0.0 + 11 +21000.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1828 + 8 +0 + 62 + 0 + 10 +21050.0 + 20 +22153.77846 + 30 +0.0 + 11 +21075.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1829 + 8 +0 + 62 + 0 + 10 +21125.0 + 20 +22153.77846 + 30 +0.0 + 11 +21150.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +182A + 8 +0 + 62 + 0 + 10 +21200.0 + 20 +22153.77846 + 30 +0.0 + 11 +21225.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +182B + 8 +0 + 62 + 0 + 10 +21275.0 + 20 +22153.77846 + 30 +0.0 + 11 +21300.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +182C + 8 +0 + 62 + 0 + 10 +21350.0 + 20 +22153.77846 + 30 +0.0 + 11 +21375.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +182D + 8 +0 + 62 + 0 + 10 +21425.0 + 20 +22153.77846 + 30 +0.0 + 11 +21450.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +182E + 8 +0 + 62 + 0 + 10 +21500.0 + 20 +22153.77846 + 30 +0.0 + 11 +21525.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +182F + 8 +0 + 62 + 0 + 10 +21575.0 + 20 +22153.77846 + 30 +0.0 + 11 +21600.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1830 + 8 +0 + 62 + 0 + 10 +21650.0 + 20 +22153.77846 + 30 +0.0 + 11 +21675.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1831 + 8 +0 + 62 + 0 + 10 +21725.0 + 20 +22153.77846 + 30 +0.0 + 11 +21750.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1832 + 8 +0 + 62 + 0 + 10 +21800.0 + 20 +22153.77846 + 30 +0.0 + 11 +21825.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1833 + 8 +0 + 62 + 0 + 10 +21875.0 + 20 +22153.77846 + 30 +0.0 + 11 +21900.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1834 + 8 +0 + 62 + 0 + 10 +21950.0 + 20 +22153.77846 + 30 +0.0 + 11 +21975.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1835 + 8 +0 + 62 + 0 + 10 +22025.0 + 20 +22153.77846 + 30 +0.0 + 11 +22050.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1836 + 8 +0 + 62 + 0 + 10 +22100.0 + 20 +22153.77846 + 30 +0.0 + 11 +22125.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1837 + 8 +0 + 62 + 0 + 10 +22175.0 + 20 +22153.77846 + 30 +0.0 + 11 +22200.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1838 + 8 +0 + 62 + 0 + 10 +22250.0 + 20 +22153.77846 + 30 +0.0 + 11 +22275.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1839 + 8 +0 + 62 + 0 + 10 +22325.0 + 20 +22153.77846 + 30 +0.0 + 11 +22350.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +183A + 8 +0 + 62 + 0 + 10 +22400.0 + 20 +22153.77846 + 30 +0.0 + 11 +22425.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +183B + 8 +0 + 62 + 0 + 10 +22475.0 + 20 +22153.77846 + 30 +0.0 + 11 +22500.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +183C + 8 +0 + 62 + 0 + 10 +22550.0 + 20 +22153.77846 + 30 +0.0 + 11 +22575.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +183D + 8 +0 + 62 + 0 + 10 +22625.0 + 20 +22153.77846 + 30 +0.0 + 11 +22650.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +183E + 8 +0 + 62 + 0 + 10 +22700.0 + 20 +22153.77846 + 30 +0.0 + 11 +22725.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +183F + 8 +0 + 62 + 0 + 10 +22775.0 + 20 +22153.77846 + 30 +0.0 + 11 +22800.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1840 + 8 +0 + 62 + 0 + 10 +22850.0 + 20 +22153.77846 + 30 +0.0 + 11 +22875.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1841 + 8 +0 + 62 + 0 + 10 +22925.0 + 20 +22153.77846 + 30 +0.0 + 11 +22950.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1842 + 8 +0 + 62 + 0 + 10 +23000.0 + 20 +22153.77846 + 30 +0.0 + 11 +23025.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1843 + 8 +0 + 62 + 0 + 10 +23075.0 + 20 +22153.77846 + 30 +0.0 + 11 +23100.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1844 + 8 +0 + 62 + 0 + 10 +23150.0 + 20 +22153.77846 + 30 +0.0 + 11 +23175.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1845 + 8 +0 + 62 + 0 + 10 +23225.0 + 20 +22153.77846 + 30 +0.0 + 11 +23250.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1846 + 8 +0 + 62 + 0 + 10 +23300.0 + 20 +22153.77846 + 30 +0.0 + 11 +23325.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1847 + 8 +0 + 62 + 0 + 10 +23375.0 + 20 +22153.77846 + 30 +0.0 + 11 +23375.75 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1848 + 8 +0 + 62 + 0 + 10 +19738.25 + 20 +22175.429095 + 30 +0.0 + 11 +19762.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1849 + 8 +0 + 62 + 0 + 10 +19812.5 + 20 +22175.429095 + 30 +0.0 + 11 +19837.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +184A + 8 +0 + 62 + 0 + 10 +19887.5 + 20 +22175.429095 + 30 +0.0 + 11 +19912.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +184B + 8 +0 + 62 + 0 + 10 +19962.5 + 20 +22175.429095 + 30 +0.0 + 11 +19987.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +184C + 8 +0 + 62 + 0 + 10 +20037.5 + 20 +22175.429095 + 30 +0.0 + 11 +20062.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +184D + 8 +0 + 62 + 0 + 10 +20112.5 + 20 +22175.429095 + 30 +0.0 + 11 +20137.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +184E + 8 +0 + 62 + 0 + 10 +20187.5 + 20 +22175.429095 + 30 +0.0 + 11 +20212.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +184F + 8 +0 + 62 + 0 + 10 +20262.5 + 20 +22175.429095 + 30 +0.0 + 11 +20287.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1850 + 8 +0 + 62 + 0 + 10 +20337.5 + 20 +22175.429095 + 30 +0.0 + 11 +20362.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1851 + 8 +0 + 62 + 0 + 10 +20412.5 + 20 +22175.429095 + 30 +0.0 + 11 +20437.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1852 + 8 +0 + 62 + 0 + 10 +20487.5 + 20 +22175.429095 + 30 +0.0 + 11 +20512.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1853 + 8 +0 + 62 + 0 + 10 +20562.5 + 20 +22175.429095 + 30 +0.0 + 11 +20587.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1854 + 8 +0 + 62 + 0 + 10 +20637.5 + 20 +22175.429095 + 30 +0.0 + 11 +20662.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1855 + 8 +0 + 62 + 0 + 10 +20712.5 + 20 +22175.429095 + 30 +0.0 + 11 +20737.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1856 + 8 +0 + 62 + 0 + 10 +20787.5 + 20 +22175.429095 + 30 +0.0 + 11 +20812.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1857 + 8 +0 + 62 + 0 + 10 +20862.5 + 20 +22175.429095 + 30 +0.0 + 11 +20887.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1858 + 8 +0 + 62 + 0 + 10 +20937.5 + 20 +22175.429095 + 30 +0.0 + 11 +20962.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1859 + 8 +0 + 62 + 0 + 10 +21012.5 + 20 +22175.429095 + 30 +0.0 + 11 +21037.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +185A + 8 +0 + 62 + 0 + 10 +21087.5 + 20 +22175.429095 + 30 +0.0 + 11 +21112.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +185B + 8 +0 + 62 + 0 + 10 +21162.5 + 20 +22175.429095 + 30 +0.0 + 11 +21187.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +185C + 8 +0 + 62 + 0 + 10 +21237.5 + 20 +22175.429095 + 30 +0.0 + 11 +21262.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +185D + 8 +0 + 62 + 0 + 10 +21312.5 + 20 +22175.429095 + 30 +0.0 + 11 +21337.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +185E + 8 +0 + 62 + 0 + 10 +21387.5 + 20 +22175.429095 + 30 +0.0 + 11 +21412.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +185F + 8 +0 + 62 + 0 + 10 +21462.5 + 20 +22175.429095 + 30 +0.0 + 11 +21487.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1860 + 8 +0 + 62 + 0 + 10 +21537.5 + 20 +22175.429095 + 30 +0.0 + 11 +21562.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1861 + 8 +0 + 62 + 0 + 10 +21612.5 + 20 +22175.429095 + 30 +0.0 + 11 +21637.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1862 + 8 +0 + 62 + 0 + 10 +21687.5 + 20 +22175.429095 + 30 +0.0 + 11 +21712.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1863 + 8 +0 + 62 + 0 + 10 +21762.5 + 20 +22175.429095 + 30 +0.0 + 11 +21787.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1864 + 8 +0 + 62 + 0 + 10 +21837.5 + 20 +22175.429095 + 30 +0.0 + 11 +21862.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1865 + 8 +0 + 62 + 0 + 10 +21912.5 + 20 +22175.429095 + 30 +0.0 + 11 +21937.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1866 + 8 +0 + 62 + 0 + 10 +21987.5 + 20 +22175.429095 + 30 +0.0 + 11 +22012.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1867 + 8 +0 + 62 + 0 + 10 +22062.5 + 20 +22175.429095 + 30 +0.0 + 11 +22087.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1868 + 8 +0 + 62 + 0 + 10 +22137.5 + 20 +22175.429095 + 30 +0.0 + 11 +22162.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1869 + 8 +0 + 62 + 0 + 10 +22212.5 + 20 +22175.429095 + 30 +0.0 + 11 +22237.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +186A + 8 +0 + 62 + 0 + 10 +22287.5 + 20 +22175.429095 + 30 +0.0 + 11 +22312.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +186B + 8 +0 + 62 + 0 + 10 +22362.5 + 20 +22175.429095 + 30 +0.0 + 11 +22387.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +186C + 8 +0 + 62 + 0 + 10 +22437.5 + 20 +22175.429095 + 30 +0.0 + 11 +22462.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +186D + 8 +0 + 62 + 0 + 10 +22512.5 + 20 +22175.429095 + 30 +0.0 + 11 +22537.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +186E + 8 +0 + 62 + 0 + 10 +22587.5 + 20 +22175.429095 + 30 +0.0 + 11 +22612.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +186F + 8 +0 + 62 + 0 + 10 +22662.5 + 20 +22175.429095 + 30 +0.0 + 11 +22687.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1870 + 8 +0 + 62 + 0 + 10 +22737.5 + 20 +22175.429095 + 30 +0.0 + 11 +22762.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1871 + 8 +0 + 62 + 0 + 10 +22812.5 + 20 +22175.429095 + 30 +0.0 + 11 +22837.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1872 + 8 +0 + 62 + 0 + 10 +22887.5 + 20 +22175.429095 + 30 +0.0 + 11 +22912.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1873 + 8 +0 + 62 + 0 + 10 +22962.5 + 20 +22175.429095 + 30 +0.0 + 11 +22987.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1874 + 8 +0 + 62 + 0 + 10 +23037.5 + 20 +22175.429095 + 30 +0.0 + 11 +23062.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1875 + 8 +0 + 62 + 0 + 10 +23112.5 + 20 +22175.429095 + 30 +0.0 + 11 +23137.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1876 + 8 +0 + 62 + 0 + 10 +23187.5 + 20 +22175.429095 + 30 +0.0 + 11 +23212.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1877 + 8 +0 + 62 + 0 + 10 +23262.5 + 20 +22175.429095 + 30 +0.0 + 11 +23287.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1878 + 8 +0 + 62 + 0 + 10 +23337.5 + 20 +22175.429095 + 30 +0.0 + 11 +23362.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1879 + 8 +0 + 62 + 0 + 10 +19738.25 + 20 +22132.127825 + 30 +0.0 + 11 +19762.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +187A + 8 +0 + 62 + 0 + 10 +19812.5 + 20 +22132.127825 + 30 +0.0 + 11 +19837.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +187B + 8 +0 + 62 + 0 + 10 +19887.5 + 20 +22132.127825 + 30 +0.0 + 11 +19912.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +187C + 8 +0 + 62 + 0 + 10 +19962.5 + 20 +22132.127825 + 30 +0.0 + 11 +19987.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +187D + 8 +0 + 62 + 0 + 10 +20037.5 + 20 +22132.127825 + 30 +0.0 + 11 +20062.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +187E + 8 +0 + 62 + 0 + 10 +20112.5 + 20 +22132.127825 + 30 +0.0 + 11 +20137.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +187F + 8 +0 + 62 + 0 + 10 +20187.5 + 20 +22132.127825 + 30 +0.0 + 11 +20212.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1880 + 8 +0 + 62 + 0 + 10 +20262.5 + 20 +22132.127825 + 30 +0.0 + 11 +20287.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1881 + 8 +0 + 62 + 0 + 10 +20337.5 + 20 +22132.127825 + 30 +0.0 + 11 +20362.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1882 + 8 +0 + 62 + 0 + 10 +20412.5 + 20 +22132.127825 + 30 +0.0 + 11 +20437.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1883 + 8 +0 + 62 + 0 + 10 +20487.5 + 20 +22132.127825 + 30 +0.0 + 11 +20512.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1884 + 8 +0 + 62 + 0 + 10 +20562.5 + 20 +22132.127825 + 30 +0.0 + 11 +20587.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1885 + 8 +0 + 62 + 0 + 10 +20637.5 + 20 +22132.127825 + 30 +0.0 + 11 +20662.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1886 + 8 +0 + 62 + 0 + 10 +20712.5 + 20 +22132.127825 + 30 +0.0 + 11 +20737.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1887 + 8 +0 + 62 + 0 + 10 +20787.5 + 20 +22132.127825 + 30 +0.0 + 11 +20812.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1888 + 8 +0 + 62 + 0 + 10 +20862.5 + 20 +22132.127825 + 30 +0.0 + 11 +20887.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1889 + 8 +0 + 62 + 0 + 10 +20937.5 + 20 +22132.127825 + 30 +0.0 + 11 +20962.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +188A + 8 +0 + 62 + 0 + 10 +21012.5 + 20 +22132.127825 + 30 +0.0 + 11 +21037.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +188B + 8 +0 + 62 + 0 + 10 +21087.5 + 20 +22132.127825 + 30 +0.0 + 11 +21112.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +188C + 8 +0 + 62 + 0 + 10 +21162.5 + 20 +22132.127825 + 30 +0.0 + 11 +21187.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +188D + 8 +0 + 62 + 0 + 10 +21237.5 + 20 +22132.127825 + 30 +0.0 + 11 +21262.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +188E + 8 +0 + 62 + 0 + 10 +21312.5 + 20 +22132.127825 + 30 +0.0 + 11 +21337.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +188F + 8 +0 + 62 + 0 + 10 +21387.5 + 20 +22132.127825 + 30 +0.0 + 11 +21412.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1890 + 8 +0 + 62 + 0 + 10 +21462.5 + 20 +22132.127825 + 30 +0.0 + 11 +21487.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1891 + 8 +0 + 62 + 0 + 10 +21537.5 + 20 +22132.127825 + 30 +0.0 + 11 +21562.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1892 + 8 +0 + 62 + 0 + 10 +21612.5 + 20 +22132.127825 + 30 +0.0 + 11 +21637.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1893 + 8 +0 + 62 + 0 + 10 +21687.5 + 20 +22132.127825 + 30 +0.0 + 11 +21712.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1894 + 8 +0 + 62 + 0 + 10 +21762.5 + 20 +22132.127825 + 30 +0.0 + 11 +21787.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1895 + 8 +0 + 62 + 0 + 10 +21837.5 + 20 +22132.127825 + 30 +0.0 + 11 +21862.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1896 + 8 +0 + 62 + 0 + 10 +21912.5 + 20 +22132.127825 + 30 +0.0 + 11 +21937.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1897 + 8 +0 + 62 + 0 + 10 +21987.5 + 20 +22132.127825 + 30 +0.0 + 11 +22012.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1898 + 8 +0 + 62 + 0 + 10 +22062.5 + 20 +22132.127825 + 30 +0.0 + 11 +22087.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1899 + 8 +0 + 62 + 0 + 10 +22137.5 + 20 +22132.127825 + 30 +0.0 + 11 +22162.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +189A + 8 +0 + 62 + 0 + 10 +22212.5 + 20 +22132.127825 + 30 +0.0 + 11 +22237.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +189B + 8 +0 + 62 + 0 + 10 +22287.5 + 20 +22132.127825 + 30 +0.0 + 11 +22312.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +189C + 8 +0 + 62 + 0 + 10 +22362.5 + 20 +22132.127825 + 30 +0.0 + 11 +22387.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +189D + 8 +0 + 62 + 0 + 10 +22437.5 + 20 +22132.127825 + 30 +0.0 + 11 +22462.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +189E + 8 +0 + 62 + 0 + 10 +22512.5 + 20 +22132.127825 + 30 +0.0 + 11 +22537.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +189F + 8 +0 + 62 + 0 + 10 +22587.5 + 20 +22132.127825 + 30 +0.0 + 11 +22612.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +18A0 + 8 +0 + 62 + 0 + 10 +22662.5 + 20 +22132.127825 + 30 +0.0 + 11 +22687.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +18A1 + 8 +0 + 62 + 0 + 10 +22737.5 + 20 +22132.127825 + 30 +0.0 + 11 +22762.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +18A2 + 8 +0 + 62 + 0 + 10 +22812.5 + 20 +22132.127825 + 30 +0.0 + 11 +22837.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +18A3 + 8 +0 + 62 + 0 + 10 +22887.5 + 20 +22132.127825 + 30 +0.0 + 11 +22912.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +18A4 + 8 +0 + 62 + 0 + 10 +22962.5 + 20 +22132.127825 + 30 +0.0 + 11 +22987.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +18A5 + 8 +0 + 62 + 0 + 10 +23037.5 + 20 +22132.127825 + 30 +0.0 + 11 +23062.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +18A6 + 8 +0 + 62 + 0 + 10 +23112.5 + 20 +22132.127825 + 30 +0.0 + 11 +23137.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +18A7 + 8 +0 + 62 + 0 + 10 +23187.5 + 20 +22132.127825 + 30 +0.0 + 11 +23212.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +18A8 + 8 +0 + 62 + 0 + 10 +23262.5 + 20 +22132.127825 + 30 +0.0 + 11 +23287.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +18A9 + 8 +0 + 62 + 0 + 10 +23337.5 + 20 +22132.127825 + 30 +0.0 + 11 +23362.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +18AA + 8 +0 + 62 + 0 + 10 +21572.388682 + 20 +22115.0 + 30 +0.0 + 11 +21562.499921 + 21 +22132.127836 + 31 +0.0 + 0 +LINE + 5 +18AB + 8 +0 + 62 + 0 + 10 +21537.499921 + 20 +22175.429106 + 30 +0.0 + 11 +21526.20066 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +18AC + 8 +0 + 62 + 0 + 10 +21537.499921 + 20 +22132.127836 + 30 +0.0 + 11 +21524.999921 + 21 +22153.778471 + 31 +0.0 + 0 +LINE + 5 +18AD + 8 +0 + 62 + 0 + 10 +21499.999922 + 20 +22153.778471 + 30 +0.0 + 11 +21487.499922 + 21 +22175.429106 + 31 +0.0 + 0 +LINE + 5 +18AE + 8 +0 + 62 + 0 + 10 +21497.388682 + 20 +22115.0 + 30 +0.0 + 11 +21487.499922 + 21 +22132.127836 + 31 +0.0 + 0 +LINE + 5 +18AF + 8 +0 + 62 + 0 + 10 +21462.499922 + 20 +22175.429106 + 30 +0.0 + 11 +21451.200661 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +18B0 + 8 +0 + 62 + 0 + 10 +21462.499922 + 20 +22132.127836 + 30 +0.0 + 11 +21449.999922 + 21 +22153.778471 + 31 +0.0 + 0 +LINE + 5 +18B1 + 8 +0 + 62 + 0 + 10 +21424.999922 + 20 +22153.778471 + 30 +0.0 + 11 +21412.499922 + 21 +22175.429106 + 31 +0.0 + 0 +LINE + 5 +18B2 + 8 +0 + 62 + 0 + 10 +21422.388683 + 20 +22115.0 + 30 +0.0 + 11 +21412.499922 + 21 +22132.127836 + 31 +0.0 + 0 +LINE + 5 +18B3 + 8 +0 + 62 + 0 + 10 +21387.499922 + 20 +22175.429106 + 30 +0.0 + 11 +21376.200661 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +18B4 + 8 +0 + 62 + 0 + 10 +21387.499922 + 20 +22132.127836 + 30 +0.0 + 11 +21374.999922 + 21 +22153.778471 + 31 +0.0 + 0 +LINE + 5 +18B5 + 8 +0 + 62 + 0 + 10 +21349.999922 + 20 +22153.778471 + 30 +0.0 + 11 +21337.499922 + 21 +22175.429106 + 31 +0.0 + 0 +LINE + 5 +18B6 + 8 +0 + 62 + 0 + 10 +21347.388683 + 20 +22115.0 + 30 +0.0 + 11 +21337.499922 + 21 +22132.127836 + 31 +0.0 + 0 +LINE + 5 +18B7 + 8 +0 + 62 + 0 + 10 +21312.499922 + 20 +22175.429106 + 30 +0.0 + 11 +21301.200661 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +18B8 + 8 +0 + 62 + 0 + 10 +21312.499922 + 20 +22132.127836 + 30 +0.0 + 11 +21299.999922 + 21 +22153.778471 + 31 +0.0 + 0 +LINE + 5 +18B9 + 8 +0 + 62 + 0 + 10 +21274.999922 + 20 +22153.778471 + 30 +0.0 + 11 +21262.499922 + 21 +22175.429107 + 31 +0.0 + 0 +LINE + 5 +18BA + 8 +0 + 62 + 0 + 10 +21272.388683 + 20 +22115.0 + 30 +0.0 + 11 +21262.499922 + 21 +22132.127836 + 31 +0.0 + 0 +LINE + 5 +18BB + 8 +0 + 62 + 0 + 10 +21237.499922 + 20 +22175.429107 + 30 +0.0 + 11 +21226.200662 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +18BC + 8 +0 + 62 + 0 + 10 +21237.499922 + 20 +22132.127836 + 30 +0.0 + 11 +21224.999922 + 21 +22153.778472 + 31 +0.0 + 0 +LINE + 5 +18BD + 8 +0 + 62 + 0 + 10 +21199.999922 + 20 +22153.778472 + 30 +0.0 + 11 +21187.499922 + 21 +22175.429107 + 31 +0.0 + 0 +LINE + 5 +18BE + 8 +0 + 62 + 0 + 10 +21197.388684 + 20 +22115.0 + 30 +0.0 + 11 +21187.499923 + 21 +22132.127837 + 31 +0.0 + 0 +LINE + 5 +18BF + 8 +0 + 62 + 0 + 10 +21162.499923 + 20 +22175.429107 + 30 +0.0 + 11 +21151.200662 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +18C0 + 8 +0 + 62 + 0 + 10 +21162.499923 + 20 +22132.127837 + 30 +0.0 + 11 +21149.999923 + 21 +22153.778472 + 31 +0.0 + 0 +LINE + 5 +18C1 + 8 +0 + 62 + 0 + 10 +21124.999923 + 20 +22153.778472 + 30 +0.0 + 11 +21112.499923 + 21 +22175.429107 + 31 +0.0 + 0 +LINE + 5 +18C2 + 8 +0 + 62 + 0 + 10 +21122.388684 + 20 +22115.0 + 30 +0.0 + 11 +21112.499923 + 21 +22132.127837 + 31 +0.0 + 0 +LINE + 5 +18C3 + 8 +0 + 62 + 0 + 10 +21087.499923 + 20 +22175.429107 + 30 +0.0 + 11 +21076.200662 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +18C4 + 8 +0 + 62 + 0 + 10 +21087.499923 + 20 +22132.127837 + 30 +0.0 + 11 +21074.999923 + 21 +22153.778472 + 31 +0.0 + 0 +LINE + 5 +18C5 + 8 +0 + 62 + 0 + 10 +21049.999923 + 20 +22153.778472 + 30 +0.0 + 11 +21037.499923 + 21 +22175.429107 + 31 +0.0 + 0 +LINE + 5 +18C6 + 8 +0 + 62 + 0 + 10 +21047.388684 + 20 +22115.0 + 30 +0.0 + 11 +21037.499923 + 21 +22132.127837 + 31 +0.0 + 0 +LINE + 5 +18C7 + 8 +0 + 62 + 0 + 10 +21012.499923 + 20 +22175.429107 + 30 +0.0 + 11 +21001.200663 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +18C8 + 8 +0 + 62 + 0 + 10 +21012.499923 + 20 +22132.127837 + 30 +0.0 + 11 +20999.999923 + 21 +22153.778472 + 31 +0.0 + 0 +LINE + 5 +18C9 + 8 +0 + 62 + 0 + 10 +20974.999923 + 20 +22153.778472 + 30 +0.0 + 11 +20962.499923 + 21 +22175.429107 + 31 +0.0 + 0 +LINE + 5 +18CA + 8 +0 + 62 + 0 + 10 +20972.388685 + 20 +22115.0 + 30 +0.0 + 11 +20962.499923 + 21 +22132.127837 + 31 +0.0 + 0 +LINE + 5 +18CB + 8 +0 + 62 + 0 + 10 +20937.499923 + 20 +22175.429107 + 30 +0.0 + 11 +20926.200663 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +18CC + 8 +0 + 62 + 0 + 10 +20937.499923 + 20 +22132.127837 + 30 +0.0 + 11 +20924.999923 + 21 +22153.778472 + 31 +0.0 + 0 +LINE + 5 +18CD + 8 +0 + 62 + 0 + 10 +20899.999923 + 20 +22153.778472 + 30 +0.0 + 11 +20887.499923 + 21 +22175.429107 + 31 +0.0 + 0 +LINE + 5 +18CE + 8 +0 + 62 + 0 + 10 +20897.388685 + 20 +22115.0 + 30 +0.0 + 11 +20887.499924 + 21 +22132.127837 + 31 +0.0 + 0 +LINE + 5 +18CF + 8 +0 + 62 + 0 + 10 +20862.499924 + 20 +22175.429107 + 30 +0.0 + 11 +20851.200663 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +18D0 + 8 +0 + 62 + 0 + 10 +20862.499924 + 20 +22132.127837 + 30 +0.0 + 11 +20849.999924 + 21 +22153.778472 + 31 +0.0 + 0 +LINE + 5 +18D1 + 8 +0 + 62 + 0 + 10 +20824.999924 + 20 +22153.778472 + 30 +0.0 + 11 +20812.499924 + 21 +22175.429107 + 31 +0.0 + 0 +LINE + 5 +18D2 + 8 +0 + 62 + 0 + 10 +20822.388685 + 20 +22115.0 + 30 +0.0 + 11 +20812.499924 + 21 +22132.127837 + 31 +0.0 + 0 +LINE + 5 +18D3 + 8 +0 + 62 + 0 + 10 +20787.499924 + 20 +22175.429107 + 30 +0.0 + 11 +20776.200664 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +18D4 + 8 +0 + 62 + 0 + 10 +20787.499924 + 20 +22132.127837 + 30 +0.0 + 11 +20774.999924 + 21 +22153.778472 + 31 +0.0 + 0 +LINE + 5 +18D5 + 8 +0 + 62 + 0 + 10 +20749.999924 + 20 +22153.778472 + 30 +0.0 + 11 +20737.499924 + 21 +22175.429108 + 31 +0.0 + 0 +LINE + 5 +18D6 + 8 +0 + 62 + 0 + 10 +20747.388686 + 20 +22115.0 + 30 +0.0 + 11 +20737.499924 + 21 +22132.127837 + 31 +0.0 + 0 +LINE + 5 +18D7 + 8 +0 + 62 + 0 + 10 +20712.499924 + 20 +22175.429108 + 30 +0.0 + 11 +20701.200664 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +18D8 + 8 +0 + 62 + 0 + 10 +20712.499924 + 20 +22132.127837 + 30 +0.0 + 11 +20699.999924 + 21 +22153.778473 + 31 +0.0 + 0 +LINE + 5 +18D9 + 8 +0 + 62 + 0 + 10 +20674.999924 + 20 +22153.778473 + 30 +0.0 + 11 +20662.499924 + 21 +22175.429108 + 31 +0.0 + 0 +LINE + 5 +18DA + 8 +0 + 62 + 0 + 10 +20672.388686 + 20 +22115.0 + 30 +0.0 + 11 +20662.499924 + 21 +22132.127838 + 31 +0.0 + 0 +LINE + 5 +18DB + 8 +0 + 62 + 0 + 10 +20637.499924 + 20 +22175.429108 + 30 +0.0 + 11 +20626.200664 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +18DC + 8 +0 + 62 + 0 + 10 +20637.499924 + 20 +22132.127838 + 30 +0.0 + 11 +20624.999924 + 21 +22153.778473 + 31 +0.0 + 0 +LINE + 5 +18DD + 8 +0 + 62 + 0 + 10 +20599.999924 + 20 +22153.778473 + 30 +0.0 + 11 +20587.499924 + 21 +22175.429108 + 31 +0.0 + 0 +LINE + 5 +18DE + 8 +0 + 62 + 0 + 10 +20597.388686 + 20 +22115.0 + 30 +0.0 + 11 +20587.499925 + 21 +22132.127838 + 31 +0.0 + 0 +LINE + 5 +18DF + 8 +0 + 62 + 0 + 10 +20562.499925 + 20 +22175.429108 + 30 +0.0 + 11 +20551.200665 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +18E0 + 8 +0 + 62 + 0 + 10 +20562.499925 + 20 +22132.127838 + 30 +0.0 + 11 +20549.999925 + 21 +22153.778473 + 31 +0.0 + 0 +LINE + 5 +18E1 + 8 +0 + 62 + 0 + 10 +20524.999925 + 20 +22153.778473 + 30 +0.0 + 11 +20512.499925 + 21 +22175.429108 + 31 +0.0 + 0 +LINE + 5 +18E2 + 8 +0 + 62 + 0 + 10 +20522.388687 + 20 +22115.0 + 30 +0.0 + 11 +20512.499925 + 21 +22132.127838 + 31 +0.0 + 0 +LINE + 5 +18E3 + 8 +0 + 62 + 0 + 10 +20487.499925 + 20 +22175.429108 + 30 +0.0 + 11 +20476.200665 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +18E4 + 8 +0 + 62 + 0 + 10 +20487.499925 + 20 +22132.127838 + 30 +0.0 + 11 +20474.999925 + 21 +22153.778473 + 31 +0.0 + 0 +LINE + 5 +18E5 + 8 +0 + 62 + 0 + 10 +20449.999925 + 20 +22153.778473 + 30 +0.0 + 11 +20437.499925 + 21 +22175.429108 + 31 +0.0 + 0 +LINE + 5 +18E6 + 8 +0 + 62 + 0 + 10 +20447.388687 + 20 +22115.0 + 30 +0.0 + 11 +20437.499925 + 21 +22132.127838 + 31 +0.0 + 0 +LINE + 5 +18E7 + 8 +0 + 62 + 0 + 10 +20412.499925 + 20 +22175.429108 + 30 +0.0 + 11 +20401.200665 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +18E8 + 8 +0 + 62 + 0 + 10 +20412.499925 + 20 +22132.127838 + 30 +0.0 + 11 +20399.999925 + 21 +22153.778473 + 31 +0.0 + 0 +LINE + 5 +18E9 + 8 +0 + 62 + 0 + 10 +20374.999925 + 20 +22153.778473 + 30 +0.0 + 11 +20362.499925 + 21 +22175.429108 + 31 +0.0 + 0 +LINE + 5 +18EA + 8 +0 + 62 + 0 + 10 +20372.388687 + 20 +22115.0 + 30 +0.0 + 11 +20362.499925 + 21 +22132.127838 + 31 +0.0 + 0 +LINE + 5 +18EB + 8 +0 + 62 + 0 + 10 +20337.499925 + 20 +22175.429108 + 30 +0.0 + 11 +20326.200666 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +18EC + 8 +0 + 62 + 0 + 10 +20337.499925 + 20 +22132.127838 + 30 +0.0 + 11 +20324.999925 + 21 +22153.778473 + 31 +0.0 + 0 +LINE + 5 +18ED + 8 +0 + 62 + 0 + 10 +20299.999925 + 20 +22153.778473 + 30 +0.0 + 11 +20287.499925 + 21 +22175.429108 + 31 +0.0 + 0 +LINE + 5 +18EE + 8 +0 + 62 + 0 + 10 +20297.388688 + 20 +22115.0 + 30 +0.0 + 11 +20287.499926 + 21 +22132.127838 + 31 +0.0 + 0 +LINE + 5 +18EF + 8 +0 + 62 + 0 + 10 +20262.499926 + 20 +22175.429108 + 30 +0.0 + 11 +20251.200666 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +18F0 + 8 +0 + 62 + 0 + 10 +20262.499926 + 20 +22132.127838 + 30 +0.0 + 11 +20249.999926 + 21 +22153.778473 + 31 +0.0 + 0 +LINE + 5 +18F1 + 8 +0 + 62 + 0 + 10 +20224.999926 + 20 +22153.778473 + 30 +0.0 + 11 +20212.499926 + 21 +22175.429109 + 31 +0.0 + 0 +LINE + 5 +18F2 + 8 +0 + 62 + 0 + 10 +20222.388688 + 20 +22115.0 + 30 +0.0 + 11 +20212.499926 + 21 +22132.127838 + 31 +0.0 + 0 +LINE + 5 +18F3 + 8 +0 + 62 + 0 + 10 +20187.499926 + 20 +22175.429109 + 30 +0.0 + 11 +20176.200666 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +18F4 + 8 +0 + 62 + 0 + 10 +20187.499926 + 20 +22132.127838 + 30 +0.0 + 11 +20174.999926 + 21 +22153.778474 + 31 +0.0 + 0 +LINE + 5 +18F5 + 8 +0 + 62 + 0 + 10 +20149.999926 + 20 +22153.778474 + 30 +0.0 + 11 +20137.499926 + 21 +22175.429109 + 31 +0.0 + 0 +LINE + 5 +18F6 + 8 +0 + 62 + 0 + 10 +20147.388688 + 20 +22115.0 + 30 +0.0 + 11 +20137.499926 + 21 +22132.127839 + 31 +0.0 + 0 +LINE + 5 +18F7 + 8 +0 + 62 + 0 + 10 +20112.499926 + 20 +22175.429109 + 30 +0.0 + 11 +20101.200667 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +18F8 + 8 +0 + 62 + 0 + 10 +20112.499926 + 20 +22132.127839 + 30 +0.0 + 11 +20099.999926 + 21 +22153.778474 + 31 +0.0 + 0 +LINE + 5 +18F9 + 8 +0 + 62 + 0 + 10 +20074.999926 + 20 +22153.778474 + 30 +0.0 + 11 +20062.499926 + 21 +22175.429109 + 31 +0.0 + 0 +LINE + 5 +18FA + 8 +0 + 62 + 0 + 10 +20072.388689 + 20 +22115.0 + 30 +0.0 + 11 +20062.499926 + 21 +22132.127839 + 31 +0.0 + 0 +LINE + 5 +18FB + 8 +0 + 62 + 0 + 10 +20037.499926 + 20 +22175.429109 + 30 +0.0 + 11 +20026.200667 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +18FC + 8 +0 + 62 + 0 + 10 +20037.499926 + 20 +22132.127839 + 30 +0.0 + 11 +20024.999926 + 21 +22153.778474 + 31 +0.0 + 0 +LINE + 5 +18FD + 8 +0 + 62 + 0 + 10 +19999.999926 + 20 +22153.778474 + 30 +0.0 + 11 +19987.499926 + 21 +22175.429109 + 31 +0.0 + 0 +LINE + 5 +18FE + 8 +0 + 62 + 0 + 10 +19997.388689 + 20 +22115.0 + 30 +0.0 + 11 +19987.499927 + 21 +22132.127839 + 31 +0.0 + 0 +LINE + 5 +18FF + 8 +0 + 62 + 0 + 10 +19962.499927 + 20 +22175.429109 + 30 +0.0 + 11 +19951.200667 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1900 + 8 +0 + 62 + 0 + 10 +19962.499927 + 20 +22132.127839 + 30 +0.0 + 11 +19949.999927 + 21 +22153.778474 + 31 +0.0 + 0 +LINE + 5 +1901 + 8 +0 + 62 + 0 + 10 +19924.999927 + 20 +22153.778474 + 30 +0.0 + 11 +19912.499927 + 21 +22175.429109 + 31 +0.0 + 0 +LINE + 5 +1902 + 8 +0 + 62 + 0 + 10 +19922.388689 + 20 +22115.0 + 30 +0.0 + 11 +19912.499927 + 21 +22132.127839 + 31 +0.0 + 0 +LINE + 5 +1903 + 8 +0 + 62 + 0 + 10 +19887.499927 + 20 +22175.429109 + 30 +0.0 + 11 +19876.200668 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1904 + 8 +0 + 62 + 0 + 10 +19887.499927 + 20 +22132.127839 + 30 +0.0 + 11 +19874.999927 + 21 +22153.778474 + 31 +0.0 + 0 +LINE + 5 +1905 + 8 +0 + 62 + 0 + 10 +19849.999927 + 20 +22153.778474 + 30 +0.0 + 11 +19837.499927 + 21 +22175.429109 + 31 +0.0 + 0 +LINE + 5 +1906 + 8 +0 + 62 + 0 + 10 +19847.38869 + 20 +22115.0 + 30 +0.0 + 11 +19837.499927 + 21 +22132.127839 + 31 +0.0 + 0 +LINE + 5 +1907 + 8 +0 + 62 + 0 + 10 +19812.499927 + 20 +22175.429109 + 30 +0.0 + 11 +19801.200668 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1908 + 8 +0 + 62 + 0 + 10 +19812.499927 + 20 +22132.127839 + 30 +0.0 + 11 +19799.999927 + 21 +22153.778474 + 31 +0.0 + 0 +LINE + 5 +1909 + 8 +0 + 62 + 0 + 10 +19774.999927 + 20 +22153.778474 + 30 +0.0 + 11 +19762.499927 + 21 +22175.429109 + 31 +0.0 + 0 +LINE + 5 +190A + 8 +0 + 62 + 0 + 10 +19772.38869 + 20 +22115.0 + 30 +0.0 + 11 +19762.499927 + 21 +22132.127839 + 31 +0.0 + 0 +LINE + 5 +190B + 8 +0 + 62 + 0 + 10 +21574.999921 + 20 +22153.778471 + 30 +0.0 + 11 +21562.499921 + 21 +22175.429106 + 31 +0.0 + 0 +LINE + 5 +190C + 8 +0 + 62 + 0 + 10 +21612.499921 + 20 +22132.127836 + 30 +0.0 + 11 +21599.999921 + 21 +22153.778471 + 31 +0.0 + 0 +LINE + 5 +190D + 8 +0 + 62 + 0 + 10 +21647.388682 + 20 +22115.0 + 30 +0.0 + 11 +21637.499921 + 21 +22132.127836 + 31 +0.0 + 0 +LINE + 5 +190E + 8 +0 + 62 + 0 + 10 +21612.499921 + 20 +22175.429106 + 30 +0.0 + 11 +21601.20066 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +190F + 8 +0 + 62 + 0 + 10 +21649.999921 + 20 +22153.778471 + 30 +0.0 + 11 +21637.499921 + 21 +22175.429106 + 31 +0.0 + 0 +LINE + 5 +1910 + 8 +0 + 62 + 0 + 10 +21687.499921 + 20 +22132.127836 + 30 +0.0 + 11 +21674.999921 + 21 +22153.778471 + 31 +0.0 + 0 +LINE + 5 +1911 + 8 +0 + 62 + 0 + 10 +21722.388681 + 20 +22115.0 + 30 +0.0 + 11 +21712.499921 + 21 +22132.127836 + 31 +0.0 + 0 +LINE + 5 +1912 + 8 +0 + 62 + 0 + 10 +21687.499921 + 20 +22175.429106 + 30 +0.0 + 11 +21676.20066 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1913 + 8 +0 + 62 + 0 + 10 +21724.999921 + 20 +22153.778471 + 30 +0.0 + 11 +21712.499921 + 21 +22175.429106 + 31 +0.0 + 0 +LINE + 5 +1914 + 8 +0 + 62 + 0 + 10 +21762.499921 + 20 +22132.127836 + 30 +0.0 + 11 +21749.999921 + 21 +22153.778471 + 31 +0.0 + 0 +LINE + 5 +1915 + 8 +0 + 62 + 0 + 10 +21797.388681 + 20 +22115.0 + 30 +0.0 + 11 +21787.499921 + 21 +22132.127835 + 31 +0.0 + 0 +LINE + 5 +1916 + 8 +0 + 62 + 0 + 10 +21762.499921 + 20 +22175.429106 + 30 +0.0 + 11 +21751.200659 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1917 + 8 +0 + 62 + 0 + 10 +21799.999921 + 20 +22153.778471 + 30 +0.0 + 11 +21787.499921 + 21 +22175.429106 + 31 +0.0 + 0 +LINE + 5 +1918 + 8 +0 + 62 + 0 + 10 +21837.49992 + 20 +22132.127835 + 30 +0.0 + 11 +21824.99992 + 21 +22153.77847 + 31 +0.0 + 0 +LINE + 5 +1919 + 8 +0 + 62 + 0 + 10 +21872.388681 + 20 +22115.0 + 30 +0.0 + 11 +21862.49992 + 21 +22132.127835 + 31 +0.0 + 0 +LINE + 5 +191A + 8 +0 + 62 + 0 + 10 +21837.49992 + 20 +22175.429106 + 30 +0.0 + 11 +21826.200659 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +191B + 8 +0 + 62 + 0 + 10 +21874.99992 + 20 +22153.77847 + 30 +0.0 + 11 +21862.49992 + 21 +22175.429105 + 31 +0.0 + 0 +LINE + 5 +191C + 8 +0 + 62 + 0 + 10 +21912.49992 + 20 +22132.127835 + 30 +0.0 + 11 +21899.99992 + 21 +22153.77847 + 31 +0.0 + 0 +LINE + 5 +191D + 8 +0 + 62 + 0 + 10 +21947.38868 + 20 +22115.0 + 30 +0.0 + 11 +21937.49992 + 21 +22132.127835 + 31 +0.0 + 0 +LINE + 5 +191E + 8 +0 + 62 + 0 + 10 +21912.49992 + 20 +22175.429105 + 30 +0.0 + 11 +21901.200659 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +191F + 8 +0 + 62 + 0 + 10 +21949.99992 + 20 +22153.77847 + 30 +0.0 + 11 +21937.49992 + 21 +22175.429105 + 31 +0.0 + 0 +LINE + 5 +1920 + 8 +0 + 62 + 0 + 10 +21987.49992 + 20 +22132.127835 + 30 +0.0 + 11 +21974.99992 + 21 +22153.77847 + 31 +0.0 + 0 +LINE + 5 +1921 + 8 +0 + 62 + 0 + 10 +22022.38868 + 20 +22115.0 + 30 +0.0 + 11 +22012.49992 + 21 +22132.127835 + 31 +0.0 + 0 +LINE + 5 +1922 + 8 +0 + 62 + 0 + 10 +21987.49992 + 20 +22175.429105 + 30 +0.0 + 11 +21976.200658 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1923 + 8 +0 + 62 + 0 + 10 +22024.99992 + 20 +22153.77847 + 30 +0.0 + 11 +22012.49992 + 21 +22175.429105 + 31 +0.0 + 0 +LINE + 5 +1924 + 8 +0 + 62 + 0 + 10 +22062.49992 + 20 +22132.127835 + 30 +0.0 + 11 +22049.99992 + 21 +22153.77847 + 31 +0.0 + 0 +LINE + 5 +1925 + 8 +0 + 62 + 0 + 10 +22097.38868 + 20 +22115.0 + 30 +0.0 + 11 +22087.49992 + 21 +22132.127835 + 31 +0.0 + 0 +LINE + 5 +1926 + 8 +0 + 62 + 0 + 10 +22062.49992 + 20 +22175.429105 + 30 +0.0 + 11 +22051.200658 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1927 + 8 +0 + 62 + 0 + 10 +22099.99992 + 20 +22153.77847 + 30 +0.0 + 11 +22087.49992 + 21 +22175.429105 + 31 +0.0 + 0 +LINE + 5 +1928 + 8 +0 + 62 + 0 + 10 +22137.499919 + 20 +22132.127835 + 30 +0.0 + 11 +22124.999919 + 21 +22153.77847 + 31 +0.0 + 0 +LINE + 5 +1929 + 8 +0 + 62 + 0 + 10 +22172.388679 + 20 +22115.0 + 30 +0.0 + 11 +22162.499919 + 21 +22132.127835 + 31 +0.0 + 0 +LINE + 5 +192A + 8 +0 + 62 + 0 + 10 +22137.499919 + 20 +22175.429105 + 30 +0.0 + 11 +22126.200658 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +192B + 8 +0 + 62 + 0 + 10 +22174.999919 + 20 +22153.77847 + 30 +0.0 + 11 +22162.499919 + 21 +22175.429105 + 31 +0.0 + 0 +LINE + 5 +192C + 8 +0 + 62 + 0 + 10 +22212.499919 + 20 +22132.127835 + 30 +0.0 + 11 +22199.999919 + 21 +22153.77847 + 31 +0.0 + 0 +LINE + 5 +192D + 8 +0 + 62 + 0 + 10 +22247.388679 + 20 +22115.0 + 30 +0.0 + 11 +22237.499919 + 21 +22132.127835 + 31 +0.0 + 0 +LINE + 5 +192E + 8 +0 + 62 + 0 + 10 +22212.499919 + 20 +22175.429105 + 30 +0.0 + 11 +22201.200658 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +192F + 8 +0 + 62 + 0 + 10 +22249.999919 + 20 +22153.77847 + 30 +0.0 + 11 +22237.499919 + 21 +22175.429105 + 31 +0.0 + 0 +LINE + 5 +1930 + 8 +0 + 62 + 0 + 10 +22287.499919 + 20 +22132.127835 + 30 +0.0 + 11 +22274.999919 + 21 +22153.77847 + 31 +0.0 + 0 +LINE + 5 +1931 + 8 +0 + 62 + 0 + 10 +22322.388679 + 20 +22115.0 + 30 +0.0 + 11 +22312.499919 + 21 +22132.127834 + 31 +0.0 + 0 +LINE + 5 +1932 + 8 +0 + 62 + 0 + 10 +22287.499919 + 20 +22175.429105 + 30 +0.0 + 11 +22276.200657 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1933 + 8 +0 + 62 + 0 + 10 +22324.999919 + 20 +22153.77847 + 30 +0.0 + 11 +22312.499919 + 21 +22175.429105 + 31 +0.0 + 0 +LINE + 5 +1934 + 8 +0 + 62 + 0 + 10 +22362.499919 + 20 +22132.127834 + 30 +0.0 + 11 +22349.999919 + 21 +22153.778469 + 31 +0.0 + 0 +LINE + 5 +1935 + 8 +0 + 62 + 0 + 10 +22397.388678 + 20 +22115.0 + 30 +0.0 + 11 +22387.499919 + 21 +22132.127834 + 31 +0.0 + 0 +LINE + 5 +1936 + 8 +0 + 62 + 0 + 10 +22362.499919 + 20 +22175.429105 + 30 +0.0 + 11 +22351.200657 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1937 + 8 +0 + 62 + 0 + 10 +22399.999919 + 20 +22153.778469 + 30 +0.0 + 11 +22387.499919 + 21 +22175.429104 + 31 +0.0 + 0 +LINE + 5 +1938 + 8 +0 + 62 + 0 + 10 +22437.499918 + 20 +22132.127834 + 30 +0.0 + 11 +22424.999918 + 21 +22153.778469 + 31 +0.0 + 0 +LINE + 5 +1939 + 8 +0 + 62 + 0 + 10 +22472.388678 + 20 +22115.0 + 30 +0.0 + 11 +22462.499918 + 21 +22132.127834 + 31 +0.0 + 0 +LINE + 5 +193A + 8 +0 + 62 + 0 + 10 +22437.499918 + 20 +22175.429104 + 30 +0.0 + 11 +22426.200657 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +193B + 8 +0 + 62 + 0 + 10 +22474.999918 + 20 +22153.778469 + 30 +0.0 + 11 +22462.499918 + 21 +22175.429104 + 31 +0.0 + 0 +LINE + 5 +193C + 8 +0 + 62 + 0 + 10 +22512.499918 + 20 +22132.127834 + 30 +0.0 + 11 +22499.999918 + 21 +22153.778469 + 31 +0.0 + 0 +LINE + 5 +193D + 8 +0 + 62 + 0 + 10 +22547.388678 + 20 +22115.0 + 30 +0.0 + 11 +22537.499918 + 21 +22132.127834 + 31 +0.0 + 0 +LINE + 5 +193E + 8 +0 + 62 + 0 + 10 +22512.499918 + 20 +22175.429104 + 30 +0.0 + 11 +22501.200656 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +193F + 8 +0 + 62 + 0 + 10 +22549.999918 + 20 +22153.778469 + 30 +0.0 + 11 +22537.499918 + 21 +22175.429104 + 31 +0.0 + 0 +LINE + 5 +1940 + 8 +0 + 62 + 0 + 10 +22587.499918 + 20 +22132.127834 + 30 +0.0 + 11 +22574.999918 + 21 +22153.778469 + 31 +0.0 + 0 +LINE + 5 +1941 + 8 +0 + 62 + 0 + 10 +22622.388677 + 20 +22115.0 + 30 +0.0 + 11 +22612.499918 + 21 +22132.127834 + 31 +0.0 + 0 +LINE + 5 +1942 + 8 +0 + 62 + 0 + 10 +22587.499918 + 20 +22175.429104 + 30 +0.0 + 11 +22576.200656 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1943 + 8 +0 + 62 + 0 + 10 +22624.999918 + 20 +22153.778469 + 30 +0.0 + 11 +22612.499918 + 21 +22175.429104 + 31 +0.0 + 0 +LINE + 5 +1944 + 8 +0 + 62 + 0 + 10 +22662.499918 + 20 +22132.127834 + 30 +0.0 + 11 +22649.999918 + 21 +22153.778469 + 31 +0.0 + 0 +LINE + 5 +1945 + 8 +0 + 62 + 0 + 10 +22697.388677 + 20 +22115.0 + 30 +0.0 + 11 +22687.499918 + 21 +22132.127834 + 31 +0.0 + 0 +LINE + 5 +1946 + 8 +0 + 62 + 0 + 10 +22662.499918 + 20 +22175.429104 + 30 +0.0 + 11 +22651.200656 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1947 + 8 +0 + 62 + 0 + 10 +22699.999918 + 20 +22153.778469 + 30 +0.0 + 11 +22687.499918 + 21 +22175.429104 + 31 +0.0 + 0 +LINE + 5 +1948 + 8 +0 + 62 + 0 + 10 +22737.499917 + 20 +22132.127834 + 30 +0.0 + 11 +22724.999917 + 21 +22153.778469 + 31 +0.0 + 0 +LINE + 5 +1949 + 8 +0 + 62 + 0 + 10 +22772.388677 + 20 +22115.0 + 30 +0.0 + 11 +22762.499917 + 21 +22132.127834 + 31 +0.0 + 0 +LINE + 5 +194A + 8 +0 + 62 + 0 + 10 +22737.499917 + 20 +22175.429104 + 30 +0.0 + 11 +22726.200655 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +194B + 8 +0 + 62 + 0 + 10 +22774.999917 + 20 +22153.778469 + 30 +0.0 + 11 +22762.499917 + 21 +22175.429104 + 31 +0.0 + 0 +LINE + 5 +194C + 8 +0 + 62 + 0 + 10 +22812.499917 + 20 +22132.127834 + 30 +0.0 + 11 +22799.999917 + 21 +22153.778469 + 31 +0.0 + 0 +LINE + 5 +194D + 8 +0 + 62 + 0 + 10 +22847.388676 + 20 +22115.0 + 30 +0.0 + 11 +22837.499917 + 21 +22132.127833 + 31 +0.0 + 0 +LINE + 5 +194E + 8 +0 + 62 + 0 + 10 +22812.499917 + 20 +22175.429104 + 30 +0.0 + 11 +22801.200655 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +194F + 8 +0 + 62 + 0 + 10 +22849.999917 + 20 +22153.778469 + 30 +0.0 + 11 +22837.499917 + 21 +22175.429104 + 31 +0.0 + 0 +LINE + 5 +1950 + 8 +0 + 62 + 0 + 10 +22887.499917 + 20 +22132.127833 + 30 +0.0 + 11 +22874.999917 + 21 +22153.778468 + 31 +0.0 + 0 +LINE + 5 +1951 + 8 +0 + 62 + 0 + 10 +22922.388676 + 20 +22115.0 + 30 +0.0 + 11 +22912.499917 + 21 +22132.127833 + 31 +0.0 + 0 +LINE + 5 +1952 + 8 +0 + 62 + 0 + 10 +22887.499917 + 20 +22175.429104 + 30 +0.0 + 11 +22876.200655 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1953 + 8 +0 + 62 + 0 + 10 +22924.999917 + 20 +22153.778468 + 30 +0.0 + 11 +22912.499917 + 21 +22175.429103 + 31 +0.0 + 0 +LINE + 5 +1954 + 8 +0 + 62 + 0 + 10 +22962.499917 + 20 +22132.127833 + 30 +0.0 + 11 +22949.999917 + 21 +22153.778468 + 31 +0.0 + 0 +LINE + 5 +1955 + 8 +0 + 62 + 0 + 10 +22997.388676 + 20 +22115.0 + 30 +0.0 + 11 +22987.499917 + 21 +22132.127833 + 31 +0.0 + 0 +LINE + 5 +1956 + 8 +0 + 62 + 0 + 10 +22962.499917 + 20 +22175.429103 + 30 +0.0 + 11 +22951.200654 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1957 + 8 +0 + 62 + 0 + 10 +22999.999917 + 20 +22153.778468 + 30 +0.0 + 11 +22987.499917 + 21 +22175.429103 + 31 +0.0 + 0 +LINE + 5 +1958 + 8 +0 + 62 + 0 + 10 +23037.499917 + 20 +22132.127833 + 30 +0.0 + 11 +23024.999917 + 21 +22153.778468 + 31 +0.0 + 0 +LINE + 5 +1959 + 8 +0 + 62 + 0 + 10 +23072.388675 + 20 +22115.0 + 30 +0.0 + 11 +23062.499916 + 21 +22132.127833 + 31 +0.0 + 0 +LINE + 5 +195A + 8 +0 + 62 + 0 + 10 +23037.499916 + 20 +22175.429103 + 30 +0.0 + 11 +23026.200654 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +195B + 8 +0 + 62 + 0 + 10 +23074.999916 + 20 +22153.778468 + 30 +0.0 + 11 +23062.499916 + 21 +22175.429103 + 31 +0.0 + 0 +LINE + 5 +195C + 8 +0 + 62 + 0 + 10 +23112.499916 + 20 +22132.127833 + 30 +0.0 + 11 +23099.999916 + 21 +22153.778468 + 31 +0.0 + 0 +LINE + 5 +195D + 8 +0 + 62 + 0 + 10 +23147.388675 + 20 +22115.0 + 30 +0.0 + 11 +23137.499916 + 21 +22132.127833 + 31 +0.0 + 0 +LINE + 5 +195E + 8 +0 + 62 + 0 + 10 +23112.499916 + 20 +22175.429103 + 30 +0.0 + 11 +23101.200654 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +195F + 8 +0 + 62 + 0 + 10 +23149.999916 + 20 +22153.778468 + 30 +0.0 + 11 +23137.499916 + 21 +22175.429103 + 31 +0.0 + 0 +LINE + 5 +1960 + 8 +0 + 62 + 0 + 10 +23187.499916 + 20 +22132.127833 + 30 +0.0 + 11 +23174.999916 + 21 +22153.778468 + 31 +0.0 + 0 +LINE + 5 +1961 + 8 +0 + 62 + 0 + 10 +23222.388675 + 20 +22115.0 + 30 +0.0 + 11 +23212.499916 + 21 +22132.127833 + 31 +0.0 + 0 +LINE + 5 +1962 + 8 +0 + 62 + 0 + 10 +23187.499916 + 20 +22175.429103 + 30 +0.0 + 11 +23176.200653 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1963 + 8 +0 + 62 + 0 + 10 +23224.999916 + 20 +22153.778468 + 30 +0.0 + 11 +23212.499916 + 21 +22175.429103 + 31 +0.0 + 0 +LINE + 5 +1964 + 8 +0 + 62 + 0 + 10 +23262.499916 + 20 +22132.127833 + 30 +0.0 + 11 +23249.999916 + 21 +22153.778468 + 31 +0.0 + 0 +LINE + 5 +1965 + 8 +0 + 62 + 0 + 10 +23297.388674 + 20 +22115.0 + 30 +0.0 + 11 +23287.499916 + 21 +22132.127833 + 31 +0.0 + 0 +LINE + 5 +1966 + 8 +0 + 62 + 0 + 10 +23262.499916 + 20 +22175.429103 + 30 +0.0 + 11 +23251.200653 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1967 + 8 +0 + 62 + 0 + 10 +23299.999916 + 20 +22153.778468 + 30 +0.0 + 11 +23287.499916 + 21 +22175.429103 + 31 +0.0 + 0 +LINE + 5 +1968 + 8 +0 + 62 + 0 + 10 +23337.499916 + 20 +22132.127833 + 30 +0.0 + 11 +23324.999916 + 21 +22153.778468 + 31 +0.0 + 0 +LINE + 5 +1969 + 8 +0 + 62 + 0 + 10 +23372.388674 + 20 +22115.0 + 30 +0.0 + 11 +23362.499915 + 21 +22132.127832 + 31 +0.0 + 0 +LINE + 5 +196A + 8 +0 + 62 + 0 + 10 +23337.499915 + 20 +22175.429103 + 30 +0.0 + 11 +23326.200653 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +196B + 8 +0 + 62 + 0 + 10 +23374.999915 + 20 +22153.778468 + 30 +0.0 + 11 +23362.499915 + 21 +22175.429103 + 31 +0.0 + 0 +LINE + 5 +196C + 8 +0 + 62 + 0 + 10 +21527.611173 + 20 +22115.0 + 30 +0.0 + 11 +21537.49997 + 21 +22132.127899 + 31 +0.0 + 0 +LINE + 5 +196D + 8 +0 + 62 + 0 + 10 +21562.49997 + 20 +22175.429169 + 30 +0.0 + 11 +21573.799195 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +196E + 8 +0 + 62 + 0 + 10 +21524.99997 + 20 +22153.778534 + 30 +0.0 + 11 +21537.49997 + 21 +22175.429169 + 31 +0.0 + 0 +LINE + 5 +196F + 8 +0 + 62 + 0 + 10 +21487.49997 + 20 +22132.127898 + 30 +0.0 + 11 +21499.99997 + 21 +22153.778534 + 31 +0.0 + 0 +LINE + 5 +1970 + 8 +0 + 62 + 0 + 10 +21452.611174 + 20 +22115.0 + 30 +0.0 + 11 +21462.49997 + 21 +22132.127898 + 31 +0.0 + 0 +LINE + 5 +1971 + 8 +0 + 62 + 0 + 10 +21487.49997 + 20 +22175.429169 + 30 +0.0 + 11 +21498.799195 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1972 + 8 +0 + 62 + 0 + 10 +21449.999971 + 20 +22153.778533 + 30 +0.0 + 11 +21462.499971 + 21 +22175.429169 + 31 +0.0 + 0 +LINE + 5 +1973 + 8 +0 + 62 + 0 + 10 +21412.499971 + 20 +22132.127898 + 30 +0.0 + 11 +21424.999971 + 21 +22153.778533 + 31 +0.0 + 0 +LINE + 5 +1974 + 8 +0 + 62 + 0 + 10 +21377.611174 + 20 +22115.0 + 30 +0.0 + 11 +21387.499971 + 21 +22132.127898 + 31 +0.0 + 0 +LINE + 5 +1975 + 8 +0 + 62 + 0 + 10 +21412.499971 + 20 +22175.429168 + 30 +0.0 + 11 +21423.799196 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1976 + 8 +0 + 62 + 0 + 10 +21374.999971 + 20 +22153.778533 + 30 +0.0 + 11 +21387.499971 + 21 +22175.429168 + 31 +0.0 + 0 +LINE + 5 +1977 + 8 +0 + 62 + 0 + 10 +21337.499971 + 20 +22132.127898 + 30 +0.0 + 11 +21349.999971 + 21 +22153.778533 + 31 +0.0 + 0 +LINE + 5 +1978 + 8 +0 + 62 + 0 + 10 +21302.611174 + 20 +22115.0 + 30 +0.0 + 11 +21312.499971 + 21 +22132.127898 + 31 +0.0 + 0 +LINE + 5 +1979 + 8 +0 + 62 + 0 + 10 +21337.499971 + 20 +22175.429168 + 30 +0.0 + 11 +21348.799196 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +197A + 8 +0 + 62 + 0 + 10 +21299.999971 + 20 +22153.778533 + 30 +0.0 + 11 +21312.499971 + 21 +22175.429168 + 31 +0.0 + 0 +LINE + 5 +197B + 8 +0 + 62 + 0 + 10 +21262.499971 + 20 +22132.127898 + 30 +0.0 + 11 +21274.999971 + 21 +22153.778533 + 31 +0.0 + 0 +LINE + 5 +197C + 8 +0 + 62 + 0 + 10 +21227.611175 + 20 +22115.0 + 30 +0.0 + 11 +21237.499971 + 21 +22132.127898 + 31 +0.0 + 0 +LINE + 5 +197D + 8 +0 + 62 + 0 + 10 +21262.499971 + 20 +22175.429168 + 30 +0.0 + 11 +21273.799196 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +197E + 8 +0 + 62 + 0 + 10 +21224.999971 + 20 +22153.778533 + 30 +0.0 + 11 +21237.499971 + 21 +22175.429168 + 31 +0.0 + 0 +LINE + 5 +197F + 8 +0 + 62 + 0 + 10 +21187.499971 + 20 +22132.127898 + 30 +0.0 + 11 +21199.999971 + 21 +22153.778533 + 31 +0.0 + 0 +LINE + 5 +1980 + 8 +0 + 62 + 0 + 10 +21152.611175 + 20 +22115.0 + 30 +0.0 + 11 +21162.499971 + 21 +22132.127898 + 31 +0.0 + 0 +LINE + 5 +1981 + 8 +0 + 62 + 0 + 10 +21187.499971 + 20 +22175.429168 + 30 +0.0 + 11 +21198.799197 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1982 + 8 +0 + 62 + 0 + 10 +21149.999971 + 20 +22153.778533 + 30 +0.0 + 11 +21162.499971 + 21 +22175.429168 + 31 +0.0 + 0 +LINE + 5 +1983 + 8 +0 + 62 + 0 + 10 +21112.499972 + 20 +22132.127898 + 30 +0.0 + 11 +21124.999972 + 21 +22153.778533 + 31 +0.0 + 0 +LINE + 5 +1984 + 8 +0 + 62 + 0 + 10 +21077.611175 + 20 +22115.0 + 30 +0.0 + 11 +21087.499972 + 21 +22132.127898 + 31 +0.0 + 0 +LINE + 5 +1985 + 8 +0 + 62 + 0 + 10 +21112.499972 + 20 +22175.429168 + 30 +0.0 + 11 +21123.799197 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1986 + 8 +0 + 62 + 0 + 10 +21074.999972 + 20 +22153.778533 + 30 +0.0 + 11 +21087.499972 + 21 +22175.429168 + 31 +0.0 + 0 +LINE + 5 +1987 + 8 +0 + 62 + 0 + 10 +21037.499972 + 20 +22132.127898 + 30 +0.0 + 11 +21049.999972 + 21 +22153.778533 + 31 +0.0 + 0 +LINE + 5 +1988 + 8 +0 + 62 + 0 + 10 +21002.611176 + 20 +22115.0 + 30 +0.0 + 11 +21012.499972 + 21 +22132.127898 + 31 +0.0 + 0 +LINE + 5 +1989 + 8 +0 + 62 + 0 + 10 +21037.499972 + 20 +22175.429168 + 30 +0.0 + 11 +21048.799197 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +198A + 8 +0 + 62 + 0 + 10 +20999.999972 + 20 +22153.778533 + 30 +0.0 + 11 +21012.499972 + 21 +22175.429168 + 31 +0.0 + 0 +LINE + 5 +198B + 8 +0 + 62 + 0 + 10 +20962.499972 + 20 +22132.127897 + 30 +0.0 + 11 +20974.999972 + 21 +22153.778533 + 31 +0.0 + 0 +LINE + 5 +198C + 8 +0 + 62 + 0 + 10 +20927.611176 + 20 +22115.0 + 30 +0.0 + 11 +20937.499972 + 21 +22132.127897 + 31 +0.0 + 0 +LINE + 5 +198D + 8 +0 + 62 + 0 + 10 +20962.499972 + 20 +22175.429168 + 30 +0.0 + 11 +20973.799198 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +198E + 8 +0 + 62 + 0 + 10 +20924.999972 + 20 +22153.778532 + 30 +0.0 + 11 +20937.499972 + 21 +22175.429168 + 31 +0.0 + 0 +LINE + 5 +198F + 8 +0 + 62 + 0 + 10 +20887.499972 + 20 +22132.127897 + 30 +0.0 + 11 +20899.999972 + 21 +22153.778532 + 31 +0.0 + 0 +LINE + 5 +1990 + 8 +0 + 62 + 0 + 10 +20852.611176 + 20 +22115.0 + 30 +0.0 + 11 +20862.499972 + 21 +22132.127897 + 31 +0.0 + 0 +LINE + 5 +1991 + 8 +0 + 62 + 0 + 10 +20887.499972 + 20 +22175.429167 + 30 +0.0 + 11 +20898.799198 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1992 + 8 +0 + 62 + 0 + 10 +20849.999972 + 20 +22153.778532 + 30 +0.0 + 11 +20862.499972 + 21 +22175.429167 + 31 +0.0 + 0 +LINE + 5 +1993 + 8 +0 + 62 + 0 + 10 +20812.499973 + 20 +22132.127897 + 30 +0.0 + 11 +20824.999973 + 21 +22153.778532 + 31 +0.0 + 0 +LINE + 5 +1994 + 8 +0 + 62 + 0 + 10 +20777.611177 + 20 +22115.0 + 30 +0.0 + 11 +20787.499973 + 21 +22132.127897 + 31 +0.0 + 0 +LINE + 5 +1995 + 8 +0 + 62 + 0 + 10 +20812.499973 + 20 +22175.429167 + 30 +0.0 + 11 +20823.799198 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1996 + 8 +0 + 62 + 0 + 10 +20774.999973 + 20 +22153.778532 + 30 +0.0 + 11 +20787.499973 + 21 +22175.429167 + 31 +0.0 + 0 +LINE + 5 +1997 + 8 +0 + 62 + 0 + 10 +20737.499973 + 20 +22132.127897 + 30 +0.0 + 11 +20749.999973 + 21 +22153.778532 + 31 +0.0 + 0 +LINE + 5 +1998 + 8 +0 + 62 + 0 + 10 +20702.611177 + 20 +22115.0 + 30 +0.0 + 11 +20712.499973 + 21 +22132.127897 + 31 +0.0 + 0 +LINE + 5 +1999 + 8 +0 + 62 + 0 + 10 +20737.499973 + 20 +22175.429167 + 30 +0.0 + 11 +20748.799198 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +199A + 8 +0 + 62 + 0 + 10 +20699.999973 + 20 +22153.778532 + 30 +0.0 + 11 +20712.499973 + 21 +22175.429167 + 31 +0.0 + 0 +LINE + 5 +199B + 8 +0 + 62 + 0 + 10 +20662.499973 + 20 +22132.127897 + 30 +0.0 + 11 +20674.999973 + 21 +22153.778532 + 31 +0.0 + 0 +LINE + 5 +199C + 8 +0 + 62 + 0 + 10 +20627.611177 + 20 +22115.0 + 30 +0.0 + 11 +20637.499973 + 21 +22132.127897 + 31 +0.0 + 0 +LINE + 5 +199D + 8 +0 + 62 + 0 + 10 +20662.499973 + 20 +22175.429167 + 30 +0.0 + 11 +20673.799199 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +199E + 8 +0 + 62 + 0 + 10 +20624.999973 + 20 +22153.778532 + 30 +0.0 + 11 +20637.499973 + 21 +22175.429167 + 31 +0.0 + 0 +LINE + 5 +199F + 8 +0 + 62 + 0 + 10 +20587.499973 + 20 +22132.127897 + 30 +0.0 + 11 +20599.999973 + 21 +22153.778532 + 31 +0.0 + 0 +LINE + 5 +19A0 + 8 +0 + 62 + 0 + 10 +20552.611178 + 20 +22115.0 + 30 +0.0 + 11 +20562.499973 + 21 +22132.127897 + 31 +0.0 + 0 +LINE + 5 +19A1 + 8 +0 + 62 + 0 + 10 +20587.499973 + 20 +22175.429167 + 30 +0.0 + 11 +20598.799199 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +19A2 + 8 +0 + 62 + 0 + 10 +20549.999973 + 20 +22153.778532 + 30 +0.0 + 11 +20562.499973 + 21 +22175.429167 + 31 +0.0 + 0 +LINE + 5 +19A3 + 8 +0 + 62 + 0 + 10 +20512.499974 + 20 +22132.127897 + 30 +0.0 + 11 +20524.999974 + 21 +22153.778532 + 31 +0.0 + 0 +LINE + 5 +19A4 + 8 +0 + 62 + 0 + 10 +20477.611178 + 20 +22115.0 + 30 +0.0 + 11 +20487.499974 + 21 +22132.127897 + 31 +0.0 + 0 +LINE + 5 +19A5 + 8 +0 + 62 + 0 + 10 +20512.499974 + 20 +22175.429167 + 30 +0.0 + 11 +20523.799199 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +19A6 + 8 +0 + 62 + 0 + 10 +20474.999974 + 20 +22153.778532 + 30 +0.0 + 11 +20487.499974 + 21 +22175.429167 + 31 +0.0 + 0 +LINE + 5 +19A7 + 8 +0 + 62 + 0 + 10 +20437.499974 + 20 +22132.127896 + 30 +0.0 + 11 +20449.999974 + 21 +22153.778532 + 31 +0.0 + 0 +LINE + 5 +19A8 + 8 +0 + 62 + 0 + 10 +20402.611178 + 20 +22115.0 + 30 +0.0 + 11 +20412.499974 + 21 +22132.127896 + 31 +0.0 + 0 +LINE + 5 +19A9 + 8 +0 + 62 + 0 + 10 +20437.499974 + 20 +22175.429167 + 30 +0.0 + 11 +20448.7992 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +19AA + 8 +0 + 62 + 0 + 10 +20399.999974 + 20 +22153.778531 + 30 +0.0 + 11 +20412.499974 + 21 +22175.429167 + 31 +0.0 + 0 +LINE + 5 +19AB + 8 +0 + 62 + 0 + 10 +20362.499974 + 20 +22132.127896 + 30 +0.0 + 11 +20374.999974 + 21 +22153.778531 + 31 +0.0 + 0 +LINE + 5 +19AC + 8 +0 + 62 + 0 + 10 +20327.611179 + 20 +22115.0 + 30 +0.0 + 11 +20337.499974 + 21 +22132.127896 + 31 +0.0 + 0 +LINE + 5 +19AD + 8 +0 + 62 + 0 + 10 +20362.499974 + 20 +22175.429166 + 30 +0.0 + 11 +20373.7992 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +19AE + 8 +0 + 62 + 0 + 10 +20324.999974 + 20 +22153.778531 + 30 +0.0 + 11 +20337.499974 + 21 +22175.429166 + 31 +0.0 + 0 +LINE + 5 +19AF + 8 +0 + 62 + 0 + 10 +20287.499974 + 20 +22132.127896 + 30 +0.0 + 11 +20299.999974 + 21 +22153.778531 + 31 +0.0 + 0 +LINE + 5 +19B0 + 8 +0 + 62 + 0 + 10 +20252.611179 + 20 +22115.0 + 30 +0.0 + 11 +20262.499974 + 21 +22132.127896 + 31 +0.0 + 0 +LINE + 5 +19B1 + 8 +0 + 62 + 0 + 10 +20287.499974 + 20 +22175.429166 + 30 +0.0 + 11 +20298.7992 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +19B2 + 8 +0 + 62 + 0 + 10 +20249.999974 + 20 +22153.778531 + 30 +0.0 + 11 +20262.499974 + 21 +22175.429166 + 31 +0.0 + 0 +LINE + 5 +19B3 + 8 +0 + 62 + 0 + 10 +20212.499975 + 20 +22132.127896 + 30 +0.0 + 11 +20224.999975 + 21 +22153.778531 + 31 +0.0 + 0 +LINE + 5 +19B4 + 8 +0 + 62 + 0 + 10 +20177.611179 + 20 +22115.0 + 30 +0.0 + 11 +20187.499975 + 21 +22132.127896 + 31 +0.0 + 0 +LINE + 5 +19B5 + 8 +0 + 62 + 0 + 10 +20212.499975 + 20 +22175.429166 + 30 +0.0 + 11 +20223.799201 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +19B6 + 8 +0 + 62 + 0 + 10 +20174.999975 + 20 +22153.778531 + 30 +0.0 + 11 +20187.499975 + 21 +22175.429166 + 31 +0.0 + 0 +LINE + 5 +19B7 + 8 +0 + 62 + 0 + 10 +20137.499975 + 20 +22132.127896 + 30 +0.0 + 11 +20149.999975 + 21 +22153.778531 + 31 +0.0 + 0 +LINE + 5 +19B8 + 8 +0 + 62 + 0 + 10 +20102.61118 + 20 +22115.0 + 30 +0.0 + 11 +20112.499975 + 21 +22132.127896 + 31 +0.0 + 0 +LINE + 5 +19B9 + 8 +0 + 62 + 0 + 10 +20137.499975 + 20 +22175.429166 + 30 +0.0 + 11 +20148.799201 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +19BA + 8 +0 + 62 + 0 + 10 +20099.999975 + 20 +22153.778531 + 30 +0.0 + 11 +20112.499975 + 21 +22175.429166 + 31 +0.0 + 0 +LINE + 5 +19BB + 8 +0 + 62 + 0 + 10 +20062.499975 + 20 +22132.127896 + 30 +0.0 + 11 +20074.999975 + 21 +22153.778531 + 31 +0.0 + 0 +LINE + 5 +19BC + 8 +0 + 62 + 0 + 10 +20027.61118 + 20 +22115.0 + 30 +0.0 + 11 +20037.499975 + 21 +22132.127896 + 31 +0.0 + 0 +LINE + 5 +19BD + 8 +0 + 62 + 0 + 10 +20062.499975 + 20 +22175.429166 + 30 +0.0 + 11 +20073.799201 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +19BE + 8 +0 + 62 + 0 + 10 +20024.999975 + 20 +22153.778531 + 30 +0.0 + 11 +20037.499975 + 21 +22175.429166 + 31 +0.0 + 0 +LINE + 5 +19BF + 8 +0 + 62 + 0 + 10 +19987.499975 + 20 +22132.127896 + 30 +0.0 + 11 +19999.999975 + 21 +22153.778531 + 31 +0.0 + 0 +LINE + 5 +19C0 + 8 +0 + 62 + 0 + 10 +19952.61118 + 20 +22115.0 + 30 +0.0 + 11 +19962.499975 + 21 +22132.127896 + 31 +0.0 + 0 +LINE + 5 +19C1 + 8 +0 + 62 + 0 + 10 +19987.499975 + 20 +22175.429166 + 30 +0.0 + 11 +19998.799202 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +19C2 + 8 +0 + 62 + 0 + 10 +19949.999975 + 20 +22153.778531 + 30 +0.0 + 11 +19962.499975 + 21 +22175.429166 + 31 +0.0 + 0 +LINE + 5 +19C3 + 8 +0 + 62 + 0 + 10 +19912.499976 + 20 +22132.127895 + 30 +0.0 + 11 +19924.999976 + 21 +22153.778531 + 31 +0.0 + 0 +LINE + 5 +19C4 + 8 +0 + 62 + 0 + 10 +19877.611181 + 20 +22115.0 + 30 +0.0 + 11 +19887.499976 + 21 +22132.127895 + 31 +0.0 + 0 +LINE + 5 +19C5 + 8 +0 + 62 + 0 + 10 +19912.499976 + 20 +22175.429166 + 30 +0.0 + 11 +19923.799202 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +19C6 + 8 +0 + 62 + 0 + 10 +19874.999976 + 20 +22153.77853 + 30 +0.0 + 11 +19887.499976 + 21 +22175.429166 + 31 +0.0 + 0 +LINE + 5 +19C7 + 8 +0 + 62 + 0 + 10 +19837.499976 + 20 +22132.127895 + 30 +0.0 + 11 +19849.999976 + 21 +22153.77853 + 31 +0.0 + 0 +LINE + 5 +19C8 + 8 +0 + 62 + 0 + 10 +19802.611181 + 20 +22115.0 + 30 +0.0 + 11 +19812.499976 + 21 +22132.127895 + 31 +0.0 + 0 +LINE + 5 +19C9 + 8 +0 + 62 + 0 + 10 +19837.499976 + 20 +22175.429165 + 30 +0.0 + 11 +19848.799202 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +19CA + 8 +0 + 62 + 0 + 10 +19799.999976 + 20 +22153.77853 + 30 +0.0 + 11 +19812.499976 + 21 +22175.429165 + 31 +0.0 + 0 +LINE + 5 +19CB + 8 +0 + 62 + 0 + 10 +19762.499976 + 20 +22132.127895 + 30 +0.0 + 11 +19774.999976 + 21 +22153.77853 + 31 +0.0 + 0 +LINE + 5 +19CC + 8 +0 + 62 + 0 + 10 +19762.499976 + 20 +22175.429165 + 30 +0.0 + 11 +19773.799203 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +19CD + 8 +0 + 62 + 0 + 10 +21562.49997 + 20 +22132.127899 + 30 +0.0 + 11 +21574.99997 + 21 +22153.778534 + 31 +0.0 + 0 +LINE + 5 +19CE + 8 +0 + 62 + 0 + 10 +21599.99997 + 20 +22153.778534 + 30 +0.0 + 11 +21612.49997 + 21 +22175.429169 + 31 +0.0 + 0 +LINE + 5 +19CF + 8 +0 + 62 + 0 + 10 +21602.611173 + 20 +22115.0 + 30 +0.0 + 11 +21612.49997 + 21 +22132.127899 + 31 +0.0 + 0 +LINE + 5 +19D0 + 8 +0 + 62 + 0 + 10 +21637.49997 + 20 +22175.429169 + 30 +0.0 + 11 +21648.799195 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +19D1 + 8 +0 + 62 + 0 + 10 +21637.49997 + 20 +22132.127899 + 30 +0.0 + 11 +21649.99997 + 21 +22153.778534 + 31 +0.0 + 0 +LINE + 5 +19D2 + 8 +0 + 62 + 0 + 10 +21674.99997 + 20 +22153.778534 + 30 +0.0 + 11 +21687.49997 + 21 +22175.429169 + 31 +0.0 + 0 +LINE + 5 +19D3 + 8 +0 + 62 + 0 + 10 +21677.611173 + 20 +22115.0 + 30 +0.0 + 11 +21687.49997 + 21 +22132.127899 + 31 +0.0 + 0 +LINE + 5 +19D4 + 8 +0 + 62 + 0 + 10 +21712.49997 + 20 +22175.429169 + 30 +0.0 + 11 +21723.799194 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +19D5 + 8 +0 + 62 + 0 + 10 +21712.49997 + 20 +22132.127899 + 30 +0.0 + 11 +21724.99997 + 21 +22153.778534 + 31 +0.0 + 0 +LINE + 5 +19D6 + 8 +0 + 62 + 0 + 10 +21749.99997 + 20 +22153.778534 + 30 +0.0 + 11 +21762.49997 + 21 +22175.429169 + 31 +0.0 + 0 +LINE + 5 +19D7 + 8 +0 + 62 + 0 + 10 +21752.611172 + 20 +22115.0 + 30 +0.0 + 11 +21762.499969 + 21 +22132.127899 + 31 +0.0 + 0 +LINE + 5 +19D8 + 8 +0 + 62 + 0 + 10 +21787.499969 + 20 +22175.429169 + 30 +0.0 + 11 +21798.799194 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +19D9 + 8 +0 + 62 + 0 + 10 +21787.499969 + 20 +22132.127899 + 30 +0.0 + 11 +21799.999969 + 21 +22153.778534 + 31 +0.0 + 0 +LINE + 5 +19DA + 8 +0 + 62 + 0 + 10 +21824.999969 + 20 +22153.778534 + 30 +0.0 + 11 +21837.499969 + 21 +22175.429169 + 31 +0.0 + 0 +LINE + 5 +19DB + 8 +0 + 62 + 0 + 10 +21827.611172 + 20 +22115.0 + 30 +0.0 + 11 +21837.499969 + 21 +22132.127899 + 31 +0.0 + 0 +LINE + 5 +19DC + 8 +0 + 62 + 0 + 10 +21862.499969 + 20 +22175.429169 + 30 +0.0 + 11 +21873.799194 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +19DD + 8 +0 + 62 + 0 + 10 +21862.499969 + 20 +22132.127899 + 30 +0.0 + 11 +21874.999969 + 21 +22153.778534 + 31 +0.0 + 0 +LINE + 5 +19DE + 8 +0 + 62 + 0 + 10 +21899.999969 + 20 +22153.778534 + 30 +0.0 + 11 +21912.499969 + 21 +22175.429169 + 31 +0.0 + 0 +LINE + 5 +19DF + 8 +0 + 62 + 0 + 10 +21902.611172 + 20 +22115.0 + 30 +0.0 + 11 +21912.499969 + 21 +22132.127899 + 31 +0.0 + 0 +LINE + 5 +19E0 + 8 +0 + 62 + 0 + 10 +21937.499969 + 20 +22175.429169 + 30 +0.0 + 11 +21948.799193 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +19E1 + 8 +0 + 62 + 0 + 10 +21937.499969 + 20 +22132.127899 + 30 +0.0 + 11 +21949.999969 + 21 +22153.778534 + 31 +0.0 + 0 +LINE + 5 +19E2 + 8 +0 + 62 + 0 + 10 +21974.999969 + 20 +22153.778534 + 30 +0.0 + 11 +21987.499969 + 21 +22175.42917 + 31 +0.0 + 0 +LINE + 5 +19E3 + 8 +0 + 62 + 0 + 10 +21977.611171 + 20 +22115.0 + 30 +0.0 + 11 +21987.499969 + 21 +22132.127899 + 31 +0.0 + 0 +LINE + 5 +19E4 + 8 +0 + 62 + 0 + 10 +22012.499969 + 20 +22175.42917 + 30 +0.0 + 11 +22023.799193 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +19E5 + 8 +0 + 62 + 0 + 10 +22012.499969 + 20 +22132.127899 + 30 +0.0 + 11 +22024.999969 + 21 +22153.778535 + 31 +0.0 + 0 +LINE + 5 +19E6 + 8 +0 + 62 + 0 + 10 +22049.999969 + 20 +22153.778535 + 30 +0.0 + 11 +22062.499969 + 21 +22175.42917 + 31 +0.0 + 0 +LINE + 5 +19E7 + 8 +0 + 62 + 0 + 10 +22052.611171 + 20 +22115.0 + 30 +0.0 + 11 +22062.499968 + 21 +22132.1279 + 31 +0.0 + 0 +LINE + 5 +19E8 + 8 +0 + 62 + 0 + 10 +22087.499968 + 20 +22175.42917 + 30 +0.0 + 11 +22098.799193 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +19E9 + 8 +0 + 62 + 0 + 10 +22087.499968 + 20 +22132.1279 + 30 +0.0 + 11 +22099.999968 + 21 +22153.778535 + 31 +0.0 + 0 +LINE + 5 +19EA + 8 +0 + 62 + 0 + 10 +22124.999968 + 20 +22153.778535 + 30 +0.0 + 11 +22137.499968 + 21 +22175.42917 + 31 +0.0 + 0 +LINE + 5 +19EB + 8 +0 + 62 + 0 + 10 +22127.611171 + 20 +22115.0 + 30 +0.0 + 11 +22137.499968 + 21 +22132.1279 + 31 +0.0 + 0 +LINE + 5 +19EC + 8 +0 + 62 + 0 + 10 +22162.499968 + 20 +22175.42917 + 30 +0.0 + 11 +22173.799192 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +19ED + 8 +0 + 62 + 0 + 10 +22162.499968 + 20 +22132.1279 + 30 +0.0 + 11 +22174.999968 + 21 +22153.778535 + 31 +0.0 + 0 +LINE + 5 +19EE + 8 +0 + 62 + 0 + 10 +22199.999968 + 20 +22153.778535 + 30 +0.0 + 11 +22212.499968 + 21 +22175.42917 + 31 +0.0 + 0 +LINE + 5 +19EF + 8 +0 + 62 + 0 + 10 +22202.61117 + 20 +22115.0 + 30 +0.0 + 11 +22212.499968 + 21 +22132.1279 + 31 +0.0 + 0 +LINE + 5 +19F0 + 8 +0 + 62 + 0 + 10 +22237.499968 + 20 +22175.42917 + 30 +0.0 + 11 +22248.799192 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +19F1 + 8 +0 + 62 + 0 + 10 +22237.499968 + 20 +22132.1279 + 30 +0.0 + 11 +22249.999968 + 21 +22153.778535 + 31 +0.0 + 0 +LINE + 5 +19F2 + 8 +0 + 62 + 0 + 10 +22274.999968 + 20 +22153.778535 + 30 +0.0 + 11 +22287.499968 + 21 +22175.42917 + 31 +0.0 + 0 +LINE + 5 +19F3 + 8 +0 + 62 + 0 + 10 +22277.61117 + 20 +22115.0 + 30 +0.0 + 11 +22287.499968 + 21 +22132.1279 + 31 +0.0 + 0 +LINE + 5 +19F4 + 8 +0 + 62 + 0 + 10 +22312.499968 + 20 +22175.42917 + 30 +0.0 + 11 +22323.799192 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +19F5 + 8 +0 + 62 + 0 + 10 +22312.499968 + 20 +22132.1279 + 30 +0.0 + 11 +22324.999968 + 21 +22153.778535 + 31 +0.0 + 0 +LINE + 5 +19F6 + 8 +0 + 62 + 0 + 10 +22349.999968 + 20 +22153.778535 + 30 +0.0 + 11 +22362.499968 + 21 +22175.42917 + 31 +0.0 + 0 +LINE + 5 +19F7 + 8 +0 + 62 + 0 + 10 +22352.61117 + 20 +22115.0 + 30 +0.0 + 11 +22362.499967 + 21 +22132.1279 + 31 +0.0 + 0 +LINE + 5 +19F8 + 8 +0 + 62 + 0 + 10 +22387.499967 + 20 +22175.42917 + 30 +0.0 + 11 +22398.799191 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +19F9 + 8 +0 + 62 + 0 + 10 +22387.499967 + 20 +22132.1279 + 30 +0.0 + 11 +22399.999967 + 21 +22153.778535 + 31 +0.0 + 0 +LINE + 5 +19FA + 8 +0 + 62 + 0 + 10 +22424.999967 + 20 +22153.778535 + 30 +0.0 + 11 +22437.499967 + 21 +22175.42917 + 31 +0.0 + 0 +LINE + 5 +19FB + 8 +0 + 62 + 0 + 10 +22427.611169 + 20 +22115.0 + 30 +0.0 + 11 +22437.499967 + 21 +22132.1279 + 31 +0.0 + 0 +LINE + 5 +19FC + 8 +0 + 62 + 0 + 10 +22462.499967 + 20 +22175.42917 + 30 +0.0 + 11 +22473.799191 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +19FD + 8 +0 + 62 + 0 + 10 +22462.499967 + 20 +22132.1279 + 30 +0.0 + 11 +22474.999967 + 21 +22153.778535 + 31 +0.0 + 0 +LINE + 5 +19FE + 8 +0 + 62 + 0 + 10 +22499.999967 + 20 +22153.778535 + 30 +0.0 + 11 +22512.499967 + 21 +22175.42917 + 31 +0.0 + 0 +LINE + 5 +19FF + 8 +0 + 62 + 0 + 10 +22502.611169 + 20 +22115.0 + 30 +0.0 + 11 +22512.499967 + 21 +22132.1279 + 31 +0.0 + 0 +LINE + 5 +1A00 + 8 +0 + 62 + 0 + 10 +22537.499967 + 20 +22175.429171 + 30 +0.0 + 11 +22548.799191 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1A01 + 8 +0 + 62 + 0 + 10 +22537.499967 + 20 +22132.1279 + 30 +0.0 + 11 +22549.999967 + 21 +22153.778535 + 31 +0.0 + 0 +LINE + 5 +1A02 + 8 +0 + 62 + 0 + 10 +22574.999967 + 20 +22153.778536 + 30 +0.0 + 11 +22587.499967 + 21 +22175.429171 + 31 +0.0 + 0 +LINE + 5 +1A03 + 8 +0 + 62 + 0 + 10 +22577.611169 + 20 +22115.0 + 30 +0.0 + 11 +22587.499967 + 21 +22132.1279 + 31 +0.0 + 0 +LINE + 5 +1A04 + 8 +0 + 62 + 0 + 10 +22612.499967 + 20 +22175.429171 + 30 +0.0 + 11 +22623.79919 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1A05 + 8 +0 + 62 + 0 + 10 +22612.499967 + 20 +22132.127901 + 30 +0.0 + 11 +22624.999967 + 21 +22153.778536 + 31 +0.0 + 0 +LINE + 5 +1A06 + 8 +0 + 62 + 0 + 10 +22649.999967 + 20 +22153.778536 + 30 +0.0 + 11 +22662.499967 + 21 +22175.429171 + 31 +0.0 + 0 +LINE + 5 +1A07 + 8 +0 + 62 + 0 + 10 +22652.611168 + 20 +22115.0 + 30 +0.0 + 11 +22662.499966 + 21 +22132.127901 + 31 +0.0 + 0 +LINE + 5 +1A08 + 8 +0 + 62 + 0 + 10 +22687.499966 + 20 +22175.429171 + 30 +0.0 + 11 +22698.79919 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1A09 + 8 +0 + 62 + 0 + 10 +22687.499966 + 20 +22132.127901 + 30 +0.0 + 11 +22699.999966 + 21 +22153.778536 + 31 +0.0 + 0 +LINE + 5 +1A0A + 8 +0 + 62 + 0 + 10 +22724.999966 + 20 +22153.778536 + 30 +0.0 + 11 +22737.499966 + 21 +22175.429171 + 31 +0.0 + 0 +LINE + 5 +1A0B + 8 +0 + 62 + 0 + 10 +22727.611168 + 20 +22115.0 + 30 +0.0 + 11 +22737.499966 + 21 +22132.127901 + 31 +0.0 + 0 +LINE + 5 +1A0C + 8 +0 + 62 + 0 + 10 +22762.499966 + 20 +22175.429171 + 30 +0.0 + 11 +22773.79919 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1A0D + 8 +0 + 62 + 0 + 10 +22762.499966 + 20 +22132.127901 + 30 +0.0 + 11 +22774.999966 + 21 +22153.778536 + 31 +0.0 + 0 +LINE + 5 +1A0E + 8 +0 + 62 + 0 + 10 +22799.999966 + 20 +22153.778536 + 30 +0.0 + 11 +22812.499966 + 21 +22175.429171 + 31 +0.0 + 0 +LINE + 5 +1A0F + 8 +0 + 62 + 0 + 10 +22802.611168 + 20 +22115.0 + 30 +0.0 + 11 +22812.499966 + 21 +22132.127901 + 31 +0.0 + 0 +LINE + 5 +1A10 + 8 +0 + 62 + 0 + 10 +22837.499966 + 20 +22175.429171 + 30 +0.0 + 11 +22848.799189 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1A11 + 8 +0 + 62 + 0 + 10 +22837.499966 + 20 +22132.127901 + 30 +0.0 + 11 +22849.999966 + 21 +22153.778536 + 31 +0.0 + 0 +LINE + 5 +1A12 + 8 +0 + 62 + 0 + 10 +22874.999966 + 20 +22153.778536 + 30 +0.0 + 11 +22887.499966 + 21 +22175.429171 + 31 +0.0 + 0 +LINE + 5 +1A13 + 8 +0 + 62 + 0 + 10 +22877.611167 + 20 +22115.0 + 30 +0.0 + 11 +22887.499966 + 21 +22132.127901 + 31 +0.0 + 0 +LINE + 5 +1A14 + 8 +0 + 62 + 0 + 10 +22912.499966 + 20 +22175.429171 + 30 +0.0 + 11 +22923.799189 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1A15 + 8 +0 + 62 + 0 + 10 +22912.499966 + 20 +22132.127901 + 30 +0.0 + 11 +22924.999966 + 21 +22153.778536 + 31 +0.0 + 0 +LINE + 5 +1A16 + 8 +0 + 62 + 0 + 10 +22949.999966 + 20 +22153.778536 + 30 +0.0 + 11 +22962.499966 + 21 +22175.429171 + 31 +0.0 + 0 +LINE + 5 +1A17 + 8 +0 + 62 + 0 + 10 +22952.611167 + 20 +22115.0 + 30 +0.0 + 11 +22962.499966 + 21 +22132.127901 + 31 +0.0 + 0 +LINE + 5 +1A18 + 8 +0 + 62 + 0 + 10 +22987.499966 + 20 +22175.429171 + 30 +0.0 + 11 +22998.799189 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1A19 + 8 +0 + 62 + 0 + 10 +22987.499965 + 20 +22132.127901 + 30 +0.0 + 11 +22999.999965 + 21 +22153.778536 + 31 +0.0 + 0 +LINE + 5 +1A1A + 8 +0 + 62 + 0 + 10 +23024.999965 + 20 +22153.778536 + 30 +0.0 + 11 +23037.499965 + 21 +22175.429171 + 31 +0.0 + 0 +LINE + 5 +1A1B + 8 +0 + 62 + 0 + 10 +23027.611167 + 20 +22115.0 + 30 +0.0 + 11 +23037.499965 + 21 +22132.127901 + 31 +0.0 + 0 +LINE + 5 +1A1C + 8 +0 + 62 + 0 + 10 +23062.499965 + 20 +22175.429172 + 30 +0.0 + 11 +23073.799188 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1A1D + 8 +0 + 62 + 0 + 10 +23062.499965 + 20 +22132.127901 + 30 +0.0 + 11 +23074.999965 + 21 +22153.778536 + 31 +0.0 + 0 +LINE + 5 +1A1E + 8 +0 + 62 + 0 + 10 +23099.999965 + 20 +22153.778537 + 30 +0.0 + 11 +23112.499965 + 21 +22175.429172 + 31 +0.0 + 0 +LINE + 5 +1A1F + 8 +0 + 62 + 0 + 10 +23102.611166 + 20 +22115.0 + 30 +0.0 + 11 +23112.499965 + 21 +22132.127901 + 31 +0.0 + 0 +LINE + 5 +1A20 + 8 +0 + 62 + 0 + 10 +23137.499965 + 20 +22175.429172 + 30 +0.0 + 11 +23148.799188 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1A21 + 8 +0 + 62 + 0 + 10 +23137.499965 + 20 +22132.127902 + 30 +0.0 + 11 +23149.999965 + 21 +22153.778537 + 31 +0.0 + 0 +LINE + 5 +1A22 + 8 +0 + 62 + 0 + 10 +23174.999965 + 20 +22153.778537 + 30 +0.0 + 11 +23187.499965 + 21 +22175.429172 + 31 +0.0 + 0 +LINE + 5 +1A23 + 8 +0 + 62 + 0 + 10 +23177.611166 + 20 +22115.0 + 30 +0.0 + 11 +23187.499965 + 21 +22132.127902 + 31 +0.0 + 0 +LINE + 5 +1A24 + 8 +0 + 62 + 0 + 10 +23212.499965 + 20 +22175.429172 + 30 +0.0 + 11 +23223.799188 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1A25 + 8 +0 + 62 + 0 + 10 +23212.499965 + 20 +22132.127902 + 30 +0.0 + 11 +23224.999965 + 21 +22153.778537 + 31 +0.0 + 0 +LINE + 5 +1A26 + 8 +0 + 62 + 0 + 10 +23249.999965 + 20 +22153.778537 + 30 +0.0 + 11 +23262.499965 + 21 +22175.429172 + 31 +0.0 + 0 +LINE + 5 +1A27 + 8 +0 + 62 + 0 + 10 +23252.611166 + 20 +22115.0 + 30 +0.0 + 11 +23262.499965 + 21 +22132.127902 + 31 +0.0 + 0 +LINE + 5 +1A28 + 8 +0 + 62 + 0 + 10 +23287.499965 + 20 +22175.429172 + 30 +0.0 + 11 +23298.799187 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1A29 + 8 +0 + 62 + 0 + 10 +23287.499964 + 20 +22132.127902 + 30 +0.0 + 11 +23299.999964 + 21 +22153.778537 + 31 +0.0 + 0 +LINE + 5 +1A2A + 8 +0 + 62 + 0 + 10 +23324.999964 + 20 +22153.778537 + 30 +0.0 + 11 +23337.499964 + 21 +22175.429172 + 31 +0.0 + 0 +LINE + 5 +1A2B + 8 +0 + 62 + 0 + 10 +23327.611165 + 20 +22115.0 + 30 +0.0 + 11 +23337.499964 + 21 +22132.127902 + 31 +0.0 + 0 +LINE + 5 +1A2C + 8 +0 + 62 + 0 + 10 +23362.499964 + 20 +22175.429172 + 30 +0.0 + 11 +23373.799187 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1A2D + 8 +0 + 62 + 0 + 10 +23362.499964 + 20 +22132.127902 + 30 +0.0 + 11 +23374.999964 + 21 +22153.778537 + 31 +0.0 + 0 +ENDBLK + 5 +1A2E + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X49 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X49 + 1 + + 0 +LINE + 5 +1A30 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +20270.173215 + 30 +0.0 + 11 +26812.5 + 21 +20270.173215 + 31 +0.0 + 0 +LINE + 5 +1A31 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +20291.82385 + 30 +0.0 + 11 +26775.0 + 21 +20291.82385 + 31 +0.0 + 0 +LINE + 5 +1A32 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +20313.474485 + 30 +0.0 + 11 +26812.5 + 21 +20313.474485 + 31 +0.0 + 0 +LINE + 5 +1A33 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +20335.12512 + 30 +0.0 + 11 +26775.0 + 21 +20335.12512 + 31 +0.0 + 0 +LINE + 5 +1A34 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +20356.775755 + 30 +0.0 + 11 +26812.5 + 21 +20356.775755 + 31 +0.0 + 0 +LINE + 5 +1A35 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +20378.42639 + 30 +0.0 + 11 +26775.0 + 21 +20378.42639 + 31 +0.0 + 0 +LINE + 5 +1A36 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +20400.077025 + 30 +0.0 + 11 +26812.5 + 21 +20400.077025 + 31 +0.0 + 0 +LINE + 5 +1A37 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +20421.72766 + 30 +0.0 + 11 +26775.0 + 21 +20421.72766 + 31 +0.0 + 0 +LINE + 5 +1A38 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +20443.378295 + 30 +0.0 + 11 +26812.5 + 21 +20443.378295 + 31 +0.0 + 0 +LINE + 5 +1A39 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +20465.02893 + 30 +0.0 + 11 +26775.0 + 21 +20465.02893 + 31 +0.0 + 0 +LINE + 5 +1A3A + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +20486.679565 + 30 +0.0 + 11 +26812.5 + 21 +20486.679565 + 31 +0.0 + 0 +LINE + 5 +1A3B + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +20508.3302 + 30 +0.0 + 11 +26775.0 + 21 +20508.3302 + 31 +0.0 + 0 +LINE + 5 +1A3C + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +20529.980835 + 30 +0.0 + 11 +26812.5 + 21 +20529.980835 + 31 +0.0 + 0 +LINE + 5 +1A3D + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +20551.63147 + 30 +0.0 + 11 +26775.0 + 21 +20551.63147 + 31 +0.0 + 0 +LINE + 5 +1A3E + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +20573.282105 + 30 +0.0 + 11 +26812.5 + 21 +20573.282105 + 31 +0.0 + 0 +LINE + 5 +1A3F + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +20594.93274 + 30 +0.0 + 11 +26775.0 + 21 +20594.93274 + 31 +0.0 + 0 +LINE + 5 +1A40 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +20616.583375 + 30 +0.0 + 11 +26812.5 + 21 +20616.583375 + 31 +0.0 + 0 +LINE + 5 +1A41 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +20638.23401 + 30 +0.0 + 11 +26775.0 + 21 +20638.23401 + 31 +0.0 + 0 +LINE + 5 +1A42 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +20659.884645 + 30 +0.0 + 11 +26812.5 + 21 +20659.884645 + 31 +0.0 + 0 +LINE + 5 +1A43 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +20681.53528 + 30 +0.0 + 11 +26775.0 + 21 +20681.53528 + 31 +0.0 + 0 +LINE + 5 +1A44 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +20703.185915 + 30 +0.0 + 11 +26812.5 + 21 +20703.185915 + 31 +0.0 + 0 +LINE + 5 +1A45 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +20724.83655 + 30 +0.0 + 11 +26775.0 + 21 +20724.83655 + 31 +0.0 + 0 +LINE + 5 +1A46 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +20746.487185 + 30 +0.0 + 11 +26812.5 + 21 +20746.487185 + 31 +0.0 + 0 +LINE + 5 +1A47 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +20768.13782 + 30 +0.0 + 11 +26775.0 + 21 +20768.13782 + 31 +0.0 + 0 +LINE + 5 +1A48 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +20789.788455 + 30 +0.0 + 11 +26812.5 + 21 +20789.788455 + 31 +0.0 + 0 +LINE + 5 +1A49 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +20811.43909 + 30 +0.0 + 11 +26775.0 + 21 +20811.43909 + 31 +0.0 + 0 +LINE + 5 +1A4A + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +20833.089725 + 30 +0.0 + 11 +26812.5 + 21 +20833.089725 + 31 +0.0 + 0 +LINE + 5 +1A4B + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +20854.74036 + 30 +0.0 + 11 +26775.0 + 21 +20854.74036 + 31 +0.0 + 0 +LINE + 5 +1A4C + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +20876.390995 + 30 +0.0 + 11 +26812.5 + 21 +20876.390995 + 31 +0.0 + 0 +LINE + 5 +1A4D + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +20898.04163 + 30 +0.0 + 11 +26775.0 + 21 +20898.04163 + 31 +0.0 + 0 +LINE + 5 +1A4E + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +20919.692265 + 30 +0.0 + 11 +26812.5 + 21 +20919.692265 + 31 +0.0 + 0 +LINE + 5 +1A4F + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +20941.3429 + 30 +0.0 + 11 +26775.0 + 21 +20941.3429 + 31 +0.0 + 0 +LINE + 5 +1A50 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +20962.993535 + 30 +0.0 + 11 +26812.5 + 21 +20962.993535 + 31 +0.0 + 0 +LINE + 5 +1A51 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +20984.64417 + 30 +0.0 + 11 +26775.0 + 21 +20984.64417 + 31 +0.0 + 0 +LINE + 5 +1A52 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +21006.294805 + 30 +0.0 + 11 +26812.5 + 21 +21006.294805 + 31 +0.0 + 0 +LINE + 5 +1A53 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +21027.94544 + 30 +0.0 + 11 +26775.0 + 21 +21027.94544 + 31 +0.0 + 0 +LINE + 5 +1A54 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +21049.596075 + 30 +0.0 + 11 +26812.5 + 21 +21049.596075 + 31 +0.0 + 0 +LINE + 5 +1A55 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +21071.24671 + 30 +0.0 + 11 +26775.0 + 21 +21071.24671 + 31 +0.0 + 0 +LINE + 5 +1A56 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +21092.897345 + 30 +0.0 + 11 +26812.5 + 21 +21092.897345 + 31 +0.0 + 0 +LINE + 5 +1A57 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +21114.54798 + 30 +0.0 + 11 +26775.0 + 21 +21114.54798 + 31 +0.0 + 0 +LINE + 5 +1A58 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +21136.198615 + 30 +0.0 + 11 +26812.5 + 21 +21136.198615 + 31 +0.0 + 0 +LINE + 5 +1A59 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +21157.84925 + 30 +0.0 + 11 +26775.0 + 21 +21157.84925 + 31 +0.0 + 0 +LINE + 5 +1A5A + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +21179.499885 + 30 +0.0 + 11 +26812.5 + 21 +21179.499885 + 31 +0.0 + 0 +LINE + 5 +1A5B + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +21201.15052 + 30 +0.0 + 11 +26775.0 + 21 +21201.15052 + 31 +0.0 + 0 +LINE + 5 +1A5C + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +21222.801155 + 30 +0.0 + 11 +26812.5 + 21 +21222.801155 + 31 +0.0 + 0 +LINE + 5 +1A5D + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +21244.45179 + 30 +0.0 + 11 +26775.0 + 21 +21244.45179 + 31 +0.0 + 0 +LINE + 5 +1A5E + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +21266.102425 + 30 +0.0 + 11 +26812.5 + 21 +21266.102425 + 31 +0.0 + 0 +LINE + 5 +1A5F + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +21287.75306 + 30 +0.0 + 11 +26775.0 + 21 +21287.75306 + 31 +0.0 + 0 +LINE + 5 +1A60 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +21309.403695 + 30 +0.0 + 11 +26812.5 + 21 +21309.403695 + 31 +0.0 + 0 +LINE + 5 +1A61 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +21331.05433 + 30 +0.0 + 11 +26775.0 + 21 +21331.05433 + 31 +0.0 + 0 +LINE + 5 +1A62 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +21352.704965 + 30 +0.0 + 11 +26812.5 + 21 +21352.704965 + 31 +0.0 + 0 +LINE + 5 +1A63 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +21374.3556 + 30 +0.0 + 11 +26775.0 + 21 +21374.3556 + 31 +0.0 + 0 +LINE + 5 +1A64 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +21396.006235 + 30 +0.0 + 11 +26812.5 + 21 +21396.006235 + 31 +0.0 + 0 +LINE + 5 +1A65 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +21417.65687 + 30 +0.0 + 11 +26775.0 + 21 +21417.65687 + 31 +0.0 + 0 +LINE + 5 +1A66 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +21439.307505 + 30 +0.0 + 11 +26812.5 + 21 +21439.307505 + 31 +0.0 + 0 +LINE + 5 +1A67 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +21460.95814 + 30 +0.0 + 11 +26775.0 + 21 +21460.95814 + 31 +0.0 + 0 +LINE + 5 +1A68 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +21482.608775 + 30 +0.0 + 11 +26812.5 + 21 +21482.608775 + 31 +0.0 + 0 +LINE + 5 +1A69 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +21504.25941 + 30 +0.0 + 11 +26775.0 + 21 +21504.25941 + 31 +0.0 + 0 +LINE + 5 +1A6A + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +21525.910045 + 30 +0.0 + 11 +26812.5 + 21 +21525.910045 + 31 +0.0 + 0 +LINE + 5 +1A6B + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +21547.56068 + 30 +0.0 + 11 +26775.0 + 21 +21547.56068 + 31 +0.0 + 0 +LINE + 5 +1A6C + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +21569.211315 + 30 +0.0 + 11 +26812.5 + 21 +21569.211315 + 31 +0.0 + 0 +LINE + 5 +1A6D + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +21590.86195 + 30 +0.0 + 11 +26775.0 + 21 +21590.86195 + 31 +0.0 + 0 +LINE + 5 +1A6E + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +21612.512585 + 30 +0.0 + 11 +26812.5 + 21 +21612.512585 + 31 +0.0 + 0 +LINE + 5 +1A6F + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +21634.16322 + 30 +0.0 + 11 +26775.0 + 21 +21634.16322 + 31 +0.0 + 0 +LINE + 5 +1A70 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +21655.813855 + 30 +0.0 + 11 +26812.5 + 21 +21655.813855 + 31 +0.0 + 0 +LINE + 5 +1A71 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +21677.46449 + 30 +0.0 + 11 +26775.0 + 21 +21677.46449 + 31 +0.0 + 0 +LINE + 5 +1A72 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +21699.115125 + 30 +0.0 + 11 +26812.5 + 21 +21699.115125 + 31 +0.0 + 0 +LINE + 5 +1A73 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +21720.76576 + 30 +0.0 + 11 +26775.0 + 21 +21720.76576 + 31 +0.0 + 0 +LINE + 5 +1A74 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +21742.416395 + 30 +0.0 + 11 +26812.5 + 21 +21742.416395 + 31 +0.0 + 0 +LINE + 5 +1A75 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +21764.06703 + 30 +0.0 + 11 +26775.0 + 21 +21764.06703 + 31 +0.0 + 0 +LINE + 5 +1A76 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +21785.717665 + 30 +0.0 + 11 +26812.5 + 21 +21785.717665 + 31 +0.0 + 0 +LINE + 5 +1A77 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +21807.3683 + 30 +0.0 + 11 +26775.0 + 21 +21807.3683 + 31 +0.0 + 0 +LINE + 5 +1A78 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +21829.018935 + 30 +0.0 + 11 +26812.5 + 21 +21829.018935 + 31 +0.0 + 0 +LINE + 5 +1A79 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +21850.66957 + 30 +0.0 + 11 +26775.0 + 21 +21850.66957 + 31 +0.0 + 0 +LINE + 5 +1A7A + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +21872.320205 + 30 +0.0 + 11 +26812.5 + 21 +21872.320205 + 31 +0.0 + 0 +LINE + 5 +1A7B + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +21893.97084 + 30 +0.0 + 11 +26775.0 + 21 +21893.97084 + 31 +0.0 + 0 +LINE + 5 +1A7C + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +21915.621475 + 30 +0.0 + 11 +26812.5 + 21 +21915.621475 + 31 +0.0 + 0 +LINE + 5 +1A7D + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +21937.27211 + 30 +0.0 + 11 +26775.0 + 21 +21937.27211 + 31 +0.0 + 0 +LINE + 5 +1A7E + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +21958.922745 + 30 +0.0 + 11 +26812.5 + 21 +21958.922745 + 31 +0.0 + 0 +LINE + 5 +1A7F + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +21980.57338 + 30 +0.0 + 11 +26775.0 + 21 +21980.57338 + 31 +0.0 + 0 +LINE + 5 +1A80 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +22002.224015 + 30 +0.0 + 11 +26812.5 + 21 +22002.224015 + 31 +0.0 + 0 +LINE + 5 +1A81 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +22023.87465 + 30 +0.0 + 11 +26775.0 + 21 +22023.87465 + 31 +0.0 + 0 +LINE + 5 +1A82 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +22045.525285 + 30 +0.0 + 11 +26812.5 + 21 +22045.525285 + 31 +0.0 + 0 +LINE + 5 +1A83 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +22067.17592 + 30 +0.0 + 11 +26775.0 + 21 +22067.17592 + 31 +0.0 + 0 +LINE + 5 +1A84 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +22088.826555 + 30 +0.0 + 11 +26812.5 + 21 +22088.826555 + 31 +0.0 + 0 +LINE + 5 +1A85 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +22110.47719 + 30 +0.0 + 11 +26775.0 + 21 +22110.47719 + 31 +0.0 + 0 +LINE + 5 +1A86 + 8 +0 + 62 + 0 + 10 +25287.5 + 20 +22132.127825 + 30 +0.0 + 11 +25312.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1A87 + 8 +0 + 62 + 0 + 10 +25362.5 + 20 +22132.127825 + 30 +0.0 + 11 +25387.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1A88 + 8 +0 + 62 + 0 + 10 +25437.5 + 20 +22132.127825 + 30 +0.0 + 11 +25462.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1A89 + 8 +0 + 62 + 0 + 10 +25512.5 + 20 +22132.127825 + 30 +0.0 + 11 +25537.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1A8A + 8 +0 + 62 + 0 + 10 +25587.5 + 20 +22132.127825 + 30 +0.0 + 11 +25612.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1A8B + 8 +0 + 62 + 0 + 10 +25662.5 + 20 +22132.127825 + 30 +0.0 + 11 +25687.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1A8C + 8 +0 + 62 + 0 + 10 +25737.5 + 20 +22132.127825 + 30 +0.0 + 11 +25762.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1A8D + 8 +0 + 62 + 0 + 10 +25812.5 + 20 +22132.127825 + 30 +0.0 + 11 +25837.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1A8E + 8 +0 + 62 + 0 + 10 +25887.5 + 20 +22132.127825 + 30 +0.0 + 11 +25912.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1A8F + 8 +0 + 62 + 0 + 10 +25962.5 + 20 +22132.127825 + 30 +0.0 + 11 +25987.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1A90 + 8 +0 + 62 + 0 + 10 +26037.5 + 20 +22132.127825 + 30 +0.0 + 11 +26062.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1A91 + 8 +0 + 62 + 0 + 10 +26112.5 + 20 +22132.127825 + 30 +0.0 + 11 +26137.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1A92 + 8 +0 + 62 + 0 + 10 +26187.5 + 20 +22132.127825 + 30 +0.0 + 11 +26212.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1A93 + 8 +0 + 62 + 0 + 10 +26262.5 + 20 +22132.127825 + 30 +0.0 + 11 +26287.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1A94 + 8 +0 + 62 + 0 + 10 +26337.5 + 20 +22132.127825 + 30 +0.0 + 11 +26362.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1A95 + 8 +0 + 62 + 0 + 10 +26412.5 + 20 +22132.127825 + 30 +0.0 + 11 +26437.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1A96 + 8 +0 + 62 + 0 + 10 +26487.5 + 20 +22132.127825 + 30 +0.0 + 11 +26512.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1A97 + 8 +0 + 62 + 0 + 10 +26562.5 + 20 +22132.127825 + 30 +0.0 + 11 +26587.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1A98 + 8 +0 + 62 + 0 + 10 +26637.5 + 20 +22132.127825 + 30 +0.0 + 11 +26662.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1A99 + 8 +0 + 62 + 0 + 10 +26712.5 + 20 +22132.127825 + 30 +0.0 + 11 +26737.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1A9A + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +22132.127825 + 30 +0.0 + 11 +26812.5 + 21 +22132.127825 + 31 +0.0 + 0 +LINE + 5 +1A9B + 8 +0 + 62 + 0 + 10 +25250.0 + 20 +22153.77846 + 30 +0.0 + 11 +25275.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1A9C + 8 +0 + 62 + 0 + 10 +25325.0 + 20 +22153.77846 + 30 +0.0 + 11 +25350.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1A9D + 8 +0 + 62 + 0 + 10 +25400.0 + 20 +22153.77846 + 30 +0.0 + 11 +25425.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1A9E + 8 +0 + 62 + 0 + 10 +25475.0 + 20 +22153.77846 + 30 +0.0 + 11 +25500.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1A9F + 8 +0 + 62 + 0 + 10 +25550.0 + 20 +22153.77846 + 30 +0.0 + 11 +25575.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1AA0 + 8 +0 + 62 + 0 + 10 +25625.0 + 20 +22153.77846 + 30 +0.0 + 11 +25650.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1AA1 + 8 +0 + 62 + 0 + 10 +25700.0 + 20 +22153.77846 + 30 +0.0 + 11 +25725.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1AA2 + 8 +0 + 62 + 0 + 10 +25775.0 + 20 +22153.77846 + 30 +0.0 + 11 +25800.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1AA3 + 8 +0 + 62 + 0 + 10 +25850.0 + 20 +22153.77846 + 30 +0.0 + 11 +25875.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1AA4 + 8 +0 + 62 + 0 + 10 +25925.0 + 20 +22153.77846 + 30 +0.0 + 11 +25950.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1AA5 + 8 +0 + 62 + 0 + 10 +26000.0 + 20 +22153.77846 + 30 +0.0 + 11 +26025.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1AA6 + 8 +0 + 62 + 0 + 10 +26075.0 + 20 +22153.77846 + 30 +0.0 + 11 +26100.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1AA7 + 8 +0 + 62 + 0 + 10 +26150.0 + 20 +22153.77846 + 30 +0.0 + 11 +26175.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1AA8 + 8 +0 + 62 + 0 + 10 +26225.0 + 20 +22153.77846 + 30 +0.0 + 11 +26250.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1AA9 + 8 +0 + 62 + 0 + 10 +26300.0 + 20 +22153.77846 + 30 +0.0 + 11 +26325.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1AAA + 8 +0 + 62 + 0 + 10 +26375.0 + 20 +22153.77846 + 30 +0.0 + 11 +26400.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1AAB + 8 +0 + 62 + 0 + 10 +26450.0 + 20 +22153.77846 + 30 +0.0 + 11 +26475.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1AAC + 8 +0 + 62 + 0 + 10 +26525.0 + 20 +22153.77846 + 30 +0.0 + 11 +26550.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1AAD + 8 +0 + 62 + 0 + 10 +26600.0 + 20 +22153.77846 + 30 +0.0 + 11 +26625.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1AAE + 8 +0 + 62 + 0 + 10 +26675.0 + 20 +22153.77846 + 30 +0.0 + 11 +26700.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1AAF + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +22153.77846 + 30 +0.0 + 11 +26775.0 + 21 +22153.77846 + 31 +0.0 + 0 +LINE + 5 +1AB0 + 8 +0 + 62 + 0 + 10 +25287.5 + 20 +22175.429095 + 30 +0.0 + 11 +25312.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1AB1 + 8 +0 + 62 + 0 + 10 +25362.5 + 20 +22175.429095 + 30 +0.0 + 11 +25387.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1AB2 + 8 +0 + 62 + 0 + 10 +25437.5 + 20 +22175.429095 + 30 +0.0 + 11 +25462.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1AB3 + 8 +0 + 62 + 0 + 10 +25512.5 + 20 +22175.429095 + 30 +0.0 + 11 +25537.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1AB4 + 8 +0 + 62 + 0 + 10 +25587.5 + 20 +22175.429095 + 30 +0.0 + 11 +25612.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1AB5 + 8 +0 + 62 + 0 + 10 +25662.5 + 20 +22175.429095 + 30 +0.0 + 11 +25687.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1AB6 + 8 +0 + 62 + 0 + 10 +25737.5 + 20 +22175.429095 + 30 +0.0 + 11 +25762.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1AB7 + 8 +0 + 62 + 0 + 10 +25812.5 + 20 +22175.429095 + 30 +0.0 + 11 +25837.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1AB8 + 8 +0 + 62 + 0 + 10 +25887.5 + 20 +22175.429095 + 30 +0.0 + 11 +25912.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1AB9 + 8 +0 + 62 + 0 + 10 +25962.5 + 20 +22175.429095 + 30 +0.0 + 11 +25987.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1ABA + 8 +0 + 62 + 0 + 10 +26037.5 + 20 +22175.429095 + 30 +0.0 + 11 +26062.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1ABB + 8 +0 + 62 + 0 + 10 +26112.5 + 20 +22175.429095 + 30 +0.0 + 11 +26137.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1ABC + 8 +0 + 62 + 0 + 10 +26187.5 + 20 +22175.429095 + 30 +0.0 + 11 +26212.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1ABD + 8 +0 + 62 + 0 + 10 +26262.5 + 20 +22175.429095 + 30 +0.0 + 11 +26287.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1ABE + 8 +0 + 62 + 0 + 10 +26337.5 + 20 +22175.429095 + 30 +0.0 + 11 +26362.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1ABF + 8 +0 + 62 + 0 + 10 +26412.5 + 20 +22175.429095 + 30 +0.0 + 11 +26437.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1AC0 + 8 +0 + 62 + 0 + 10 +26487.5 + 20 +22175.429095 + 30 +0.0 + 11 +26512.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1AC1 + 8 +0 + 62 + 0 + 10 +26562.5 + 20 +22175.429095 + 30 +0.0 + 11 +26587.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1AC2 + 8 +0 + 62 + 0 + 10 +26637.5 + 20 +22175.429095 + 30 +0.0 + 11 +26662.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1AC3 + 8 +0 + 62 + 0 + 10 +26712.5 + 20 +22175.429095 + 30 +0.0 + 11 +26737.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1AC4 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +22175.429095 + 30 +0.0 + 11 +26812.5 + 21 +22175.429095 + 31 +0.0 + 0 +LINE + 5 +1AC5 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +20248.52258 + 30 +0.0 + 11 +26775.0 + 21 +20248.52258 + 31 +0.0 + 0 +LINE + 5 +1AC6 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +20226.871945 + 30 +0.0 + 11 +26812.5 + 21 +20226.871945 + 31 +0.0 + 0 +LINE + 5 +1AC7 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +20205.22131 + 30 +0.0 + 11 +26775.0 + 21 +20205.22131 + 31 +0.0 + 0 +LINE + 5 +1AC8 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +20183.570675 + 30 +0.0 + 11 +26812.5 + 21 +20183.570675 + 31 +0.0 + 0 +LINE + 5 +1AC9 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +20161.92004 + 30 +0.0 + 11 +26775.0 + 21 +20161.92004 + 31 +0.0 + 0 +LINE + 5 +1ACA + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +20140.269405 + 30 +0.0 + 11 +26812.5 + 21 +20140.269405 + 31 +0.0 + 0 +LINE + 5 +1ACB + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +20118.61877 + 30 +0.0 + 11 +26775.0 + 21 +20118.61877 + 31 +0.0 + 0 +LINE + 5 +1ACC + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +20096.968135 + 30 +0.0 + 11 +26812.5 + 21 +20096.968135 + 31 +0.0 + 0 +LINE + 5 +1ACD + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +20075.3175 + 30 +0.0 + 11 +26775.0 + 21 +20075.3175 + 31 +0.0 + 0 +LINE + 5 +1ACE + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +20053.666865 + 30 +0.0 + 11 +26812.5 + 21 +20053.666865 + 31 +0.0 + 0 +LINE + 5 +1ACF + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +20032.01623 + 30 +0.0 + 11 +26775.0 + 21 +20032.01623 + 31 +0.0 + 0 +LINE + 5 +1AD0 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +20010.365595 + 30 +0.0 + 11 +26812.5 + 21 +20010.365595 + 31 +0.0 + 0 +LINE + 5 +1AD1 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +19988.71496 + 30 +0.0 + 11 +26775.0 + 21 +19988.71496 + 31 +0.0 + 0 +LINE + 5 +1AD2 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +19967.064325 + 30 +0.0 + 11 +26812.5 + 21 +19967.064325 + 31 +0.0 + 0 +LINE + 5 +1AD3 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +19945.41369 + 30 +0.0 + 11 +26775.0 + 21 +19945.41369 + 31 +0.0 + 0 +LINE + 5 +1AD4 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +19923.763055 + 30 +0.0 + 11 +26812.5 + 21 +19923.763055 + 31 +0.0 + 0 +LINE + 5 +1AD5 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +19902.11242 + 30 +0.0 + 11 +26775.0 + 21 +19902.11242 + 31 +0.0 + 0 +LINE + 5 +1AD6 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +19880.461785 + 30 +0.0 + 11 +26812.5 + 21 +19880.461785 + 31 +0.0 + 0 +LINE + 5 +1AD7 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +19858.81115 + 30 +0.0 + 11 +26775.0 + 21 +19858.81115 + 31 +0.0 + 0 +LINE + 5 +1AD8 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +19837.160515 + 30 +0.0 + 11 +26812.5 + 21 +19837.160515 + 31 +0.0 + 0 +LINE + 5 +1AD9 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +19815.50988 + 30 +0.0 + 11 +26775.0 + 21 +19815.50988 + 31 +0.0 + 0 +LINE + 5 +1ADA + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +19793.859245 + 30 +0.0 + 11 +26812.5 + 21 +19793.859245 + 31 +0.0 + 0 +LINE + 5 +1ADB + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +19772.20861 + 30 +0.0 + 11 +26775.0 + 21 +19772.20861 + 31 +0.0 + 0 +LINE + 5 +1ADC + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +19750.557975 + 30 +0.0 + 11 +26812.5 + 21 +19750.557975 + 31 +0.0 + 0 +LINE + 5 +1ADD + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +19728.90734 + 30 +0.0 + 11 +26775.0 + 21 +19728.90734 + 31 +0.0 + 0 +LINE + 5 +1ADE + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +19707.256705 + 30 +0.0 + 11 +26812.5 + 21 +19707.256705 + 31 +0.0 + 0 +LINE + 5 +1ADF + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +19685.60607 + 30 +0.0 + 11 +26775.0 + 21 +19685.60607 + 31 +0.0 + 0 +LINE + 5 +1AE0 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +19663.955435 + 30 +0.0 + 11 +26812.5 + 21 +19663.955435 + 31 +0.0 + 0 +LINE + 5 +1AE1 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +19642.3048 + 30 +0.0 + 11 +26775.0 + 21 +19642.3048 + 31 +0.0 + 0 +LINE + 5 +1AE2 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +19620.654165 + 30 +0.0 + 11 +26812.5 + 21 +19620.654165 + 31 +0.0 + 0 +LINE + 5 +1AE3 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +19599.00353 + 30 +0.0 + 11 +26775.0 + 21 +19599.00353 + 31 +0.0 + 0 +LINE + 5 +1AE4 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +19577.352895 + 30 +0.0 + 11 +26812.5 + 21 +19577.352895 + 31 +0.0 + 0 +LINE + 5 +1AE5 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +19555.70226 + 30 +0.0 + 11 +26775.0 + 21 +19555.70226 + 31 +0.0 + 0 +LINE + 5 +1AE6 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +19534.051625 + 30 +0.0 + 11 +26812.5 + 21 +19534.051625 + 31 +0.0 + 0 +LINE + 5 +1AE7 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +19512.40099 + 30 +0.0 + 11 +26775.0 + 21 +19512.40099 + 31 +0.0 + 0 +LINE + 5 +1AE8 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +19490.750355 + 30 +0.0 + 11 +26812.5 + 21 +19490.750355 + 31 +0.0 + 0 +LINE + 5 +1AE9 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +19469.09972 + 30 +0.0 + 11 +26775.0 + 21 +19469.09972 + 31 +0.0 + 0 +LINE + 5 +1AEA + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +19447.449085 + 30 +0.0 + 11 +26812.5 + 21 +19447.449085 + 31 +0.0 + 0 +LINE + 5 +1AEB + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +19425.79845 + 30 +0.0 + 11 +26775.0 + 21 +19425.79845 + 31 +0.0 + 0 +LINE + 5 +1AEC + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +19404.147815 + 30 +0.0 + 11 +26812.5 + 21 +19404.147815 + 31 +0.0 + 0 +LINE + 5 +1AED + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +19382.49718 + 30 +0.0 + 11 +26775.0 + 21 +19382.49718 + 31 +0.0 + 0 +LINE + 5 +1AEE + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +19360.846545 + 30 +0.0 + 11 +26812.5 + 21 +19360.846545 + 31 +0.0 + 0 +LINE + 5 +1AEF + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +19339.19591 + 30 +0.0 + 11 +26775.0 + 21 +19339.19591 + 31 +0.0 + 0 +LINE + 5 +1AF0 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +19317.545275 + 30 +0.0 + 11 +26812.5 + 21 +19317.545275 + 31 +0.0 + 0 +LINE + 5 +1AF1 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +19295.89464 + 30 +0.0 + 11 +26775.0 + 21 +19295.89464 + 31 +0.0 + 0 +LINE + 5 +1AF2 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +19274.244005 + 30 +0.0 + 11 +26812.5 + 21 +19274.244005 + 31 +0.0 + 0 +LINE + 5 +1AF3 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +19252.59337 + 30 +0.0 + 11 +26775.0 + 21 +19252.59337 + 31 +0.0 + 0 +LINE + 5 +1AF4 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +19230.942735 + 30 +0.0 + 11 +26812.5 + 21 +19230.942735 + 31 +0.0 + 0 +LINE + 5 +1AF5 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +19209.2921 + 30 +0.0 + 11 +26775.0 + 21 +19209.2921 + 31 +0.0 + 0 +LINE + 5 +1AF6 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +19187.641465 + 30 +0.0 + 11 +26812.5 + 21 +19187.641465 + 31 +0.0 + 0 +LINE + 5 +1AF7 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +19165.99083 + 30 +0.0 + 11 +26775.0 + 21 +19165.99083 + 31 +0.0 + 0 +LINE + 5 +1AF8 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +19144.340195 + 30 +0.0 + 11 +26812.5 + 21 +19144.340195 + 31 +0.0 + 0 +LINE + 5 +1AF9 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +19122.68956 + 30 +0.0 + 11 +26775.0 + 21 +19122.68956 + 31 +0.0 + 0 +LINE + 5 +1AFA + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +19101.038925 + 30 +0.0 + 11 +26812.5 + 21 +19101.038925 + 31 +0.0 + 0 +LINE + 5 +1AFB + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +19079.38829 + 30 +0.0 + 11 +26775.0 + 21 +19079.38829 + 31 +0.0 + 0 +LINE + 5 +1AFC + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +19057.737655 + 30 +0.0 + 11 +26812.5 + 21 +19057.737655 + 31 +0.0 + 0 +LINE + 5 +1AFD + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +19036.08702 + 30 +0.0 + 11 +26775.0 + 21 +19036.08702 + 31 +0.0 + 0 +LINE + 5 +1AFE + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +19014.436385 + 30 +0.0 + 11 +26812.5 + 21 +19014.436385 + 31 +0.0 + 0 +LINE + 5 +1AFF + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +18992.78575 + 30 +0.0 + 11 +26775.0 + 21 +18992.78575 + 31 +0.0 + 0 +LINE + 5 +1B00 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +18971.135115 + 30 +0.0 + 11 +26812.5 + 21 +18971.135115 + 31 +0.0 + 0 +LINE + 5 +1B01 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +18949.48448 + 30 +0.0 + 11 +26775.0 + 21 +18949.48448 + 31 +0.0 + 0 +LINE + 5 +1B02 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +18927.833845 + 30 +0.0 + 11 +26812.5 + 21 +18927.833845 + 31 +0.0 + 0 +LINE + 5 +1B03 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +18906.18321 + 30 +0.0 + 11 +26775.0 + 21 +18906.18321 + 31 +0.0 + 0 +LINE + 5 +1B04 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +18884.532575 + 30 +0.0 + 11 +26812.5 + 21 +18884.532575 + 31 +0.0 + 0 +LINE + 5 +1B05 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +18862.88194 + 30 +0.0 + 11 +26775.0 + 21 +18862.88194 + 31 +0.0 + 0 +LINE + 5 +1B06 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +18841.231305 + 30 +0.0 + 11 +26812.5 + 21 +18841.231305 + 31 +0.0 + 0 +LINE + 5 +1B07 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +18819.58067 + 30 +0.0 + 11 +26775.0 + 21 +18819.58067 + 31 +0.0 + 0 +LINE + 5 +1B08 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +18797.930035 + 30 +0.0 + 11 +26812.5 + 21 +18797.930035 + 31 +0.0 + 0 +LINE + 5 +1B09 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +18776.2794 + 30 +0.0 + 11 +26775.0 + 21 +18776.2794 + 31 +0.0 + 0 +LINE + 5 +1B0A + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +18754.628765 + 30 +0.0 + 11 +26812.5 + 21 +18754.628765 + 31 +0.0 + 0 +LINE + 5 +1B0B + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +18732.97813 + 30 +0.0 + 11 +26775.0 + 21 +18732.97813 + 31 +0.0 + 0 +LINE + 5 +1B0C + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +18711.327495 + 30 +0.0 + 11 +26812.5 + 21 +18711.327495 + 31 +0.0 + 0 +LINE + 5 +1B0D + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +18689.67686 + 30 +0.0 + 11 +26775.0 + 21 +18689.67686 + 31 +0.0 + 0 +LINE + 5 +1B0E + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +18668.026225 + 30 +0.0 + 11 +26812.5 + 21 +18668.026225 + 31 +0.0 + 0 +LINE + 5 +1B0F + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +18646.37559 + 30 +0.0 + 11 +26775.0 + 21 +18646.37559 + 31 +0.0 + 0 +LINE + 5 +1B10 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +18624.724955 + 30 +0.0 + 11 +26812.5 + 21 +18624.724955 + 31 +0.0 + 0 +LINE + 5 +1B11 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +18603.07432 + 30 +0.0 + 11 +26775.0 + 21 +18603.07432 + 31 +0.0 + 0 +LINE + 5 +1B12 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +18581.423685 + 30 +0.0 + 11 +26812.5 + 21 +18581.423685 + 31 +0.0 + 0 +LINE + 5 +1B13 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +18559.77305 + 30 +0.0 + 11 +26775.0 + 21 +18559.77305 + 31 +0.0 + 0 +LINE + 5 +1B14 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +18538.122415 + 30 +0.0 + 11 +26812.5 + 21 +18538.122415 + 31 +0.0 + 0 +LINE + 5 +1B15 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +18516.47178 + 30 +0.0 + 11 +26775.0 + 21 +18516.47178 + 31 +0.0 + 0 +LINE + 5 +1B16 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +18494.821145 + 30 +0.0 + 11 +26812.5 + 21 +18494.821145 + 31 +0.0 + 0 +LINE + 5 +1B17 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +18473.17051 + 30 +0.0 + 11 +26775.0 + 21 +18473.17051 + 31 +0.0 + 0 +LINE + 5 +1B18 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +18451.519875 + 30 +0.0 + 11 +26812.5 + 21 +18451.519875 + 31 +0.0 + 0 +LINE + 5 +1B19 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +18429.86924 + 30 +0.0 + 11 +26775.0 + 21 +18429.86924 + 31 +0.0 + 0 +LINE + 5 +1B1A + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +18408.218605 + 30 +0.0 + 11 +26812.5 + 21 +18408.218605 + 31 +0.0 + 0 +LINE + 5 +1B1B + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +18386.56797 + 30 +0.0 + 11 +26775.0 + 21 +18386.56797 + 31 +0.0 + 0 +LINE + 5 +1B1C + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +18364.917335 + 30 +0.0 + 11 +26812.5 + 21 +18364.917335 + 31 +0.0 + 0 +LINE + 5 +1B1D + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +18871.542029 + 30 +0.0 + 11 +26812.49991 + 21 +18884.532565 + 31 +0.0 + 0 +LINE + 5 +1B1E + 8 +0 + 62 + 0 + 10 +26787.49991 + 20 +18927.833835 + 30 +0.0 + 11 +26774.99991 + 21 +18949.484471 + 31 +0.0 + 0 +LINE + 5 +1B1F + 8 +0 + 62 + 0 + 10 +26749.99991 + 20 +18992.785741 + 30 +0.0 + 11 +26740.0 + 21 +19010.106093 + 31 +0.0 + 0 +LINE + 5 +1B20 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +18828.240759 + 30 +0.0 + 11 +26812.49991 + 21 +18841.231295 + 31 +0.0 + 0 +LINE + 5 +1B21 + 8 +0 + 62 + 0 + 10 +26787.49991 + 20 +18884.532565 + 30 +0.0 + 11 +26774.99991 + 21 +18906.1832 + 31 +0.0 + 0 +LINE + 5 +1B22 + 8 +0 + 62 + 0 + 10 +26749.99991 + 20 +18949.484471 + 30 +0.0 + 11 +26740.0 + 21 +18966.804823 + 31 +0.0 + 0 +LINE + 5 +1B23 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +18784.939489 + 30 +0.0 + 11 +26812.49991 + 21 +18797.930025 + 31 +0.0 + 0 +LINE + 5 +1B24 + 8 +0 + 62 + 0 + 10 +26787.49991 + 20 +18841.231295 + 30 +0.0 + 11 +26774.99991 + 21 +18862.88193 + 31 +0.0 + 0 +LINE + 5 +1B25 + 8 +0 + 62 + 0 + 10 +26749.99991 + 20 +18906.1832 + 30 +0.0 + 11 +26740.0 + 21 +18923.503553 + 31 +0.0 + 0 +LINE + 5 +1B26 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +18741.638219 + 30 +0.0 + 11 +26812.499911 + 21 +18754.628755 + 31 +0.0 + 0 +LINE + 5 +1B27 + 8 +0 + 62 + 0 + 10 +26787.499911 + 20 +18797.930025 + 30 +0.0 + 11 +26774.999911 + 21 +18819.58066 + 31 +0.0 + 0 +LINE + 5 +1B28 + 8 +0 + 62 + 0 + 10 +26749.999911 + 20 +18862.88193 + 30 +0.0 + 11 +26740.0 + 21 +18880.202283 + 31 +0.0 + 0 +LINE + 5 +1B29 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +18698.336949 + 30 +0.0 + 11 +26812.499911 + 21 +18711.327485 + 31 +0.0 + 0 +LINE + 5 +1B2A + 8 +0 + 62 + 0 + 10 +26787.499911 + 20 +18754.628755 + 30 +0.0 + 11 +26774.999911 + 21 +18776.27939 + 31 +0.0 + 0 +LINE + 5 +1B2B + 8 +0 + 62 + 0 + 10 +26749.999911 + 20 +18819.58066 + 30 +0.0 + 11 +26740.0 + 21 +18836.901013 + 31 +0.0 + 0 +LINE + 5 +1B2C + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +18655.035679 + 30 +0.0 + 11 +26812.499911 + 21 +18668.026215 + 31 +0.0 + 0 +LINE + 5 +1B2D + 8 +0 + 62 + 0 + 10 +26787.499911 + 20 +18711.327485 + 30 +0.0 + 11 +26774.999911 + 21 +18732.97812 + 31 +0.0 + 0 +LINE + 5 +1B2E + 8 +0 + 62 + 0 + 10 +26749.999911 + 20 +18776.27939 + 30 +0.0 + 11 +26740.0 + 21 +18793.599743 + 31 +0.0 + 0 +LINE + 5 +1B2F + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +18611.734409 + 30 +0.0 + 11 +26812.499911 + 21 +18624.724944 + 31 +0.0 + 0 +LINE + 5 +1B30 + 8 +0 + 62 + 0 + 10 +26787.499911 + 20 +18668.026215 + 30 +0.0 + 11 +26774.999911 + 21 +18689.67685 + 31 +0.0 + 0 +LINE + 5 +1B31 + 8 +0 + 62 + 0 + 10 +26749.999911 + 20 +18732.97812 + 30 +0.0 + 11 +26740.0 + 21 +18750.298473 + 31 +0.0 + 0 +LINE + 5 +1B32 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +18568.433139 + 30 +0.0 + 11 +26812.499911 + 21 +18581.423674 + 31 +0.0 + 0 +LINE + 5 +1B33 + 8 +0 + 62 + 0 + 10 +26787.499911 + 20 +18624.724944 + 30 +0.0 + 11 +26774.999911 + 21 +18646.37558 + 31 +0.0 + 0 +LINE + 5 +1B34 + 8 +0 + 62 + 0 + 10 +26749.999911 + 20 +18689.67685 + 30 +0.0 + 11 +26740.0 + 21 +18706.997203 + 31 +0.0 + 0 +LINE + 5 +1B35 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +18525.131869 + 30 +0.0 + 11 +26812.499911 + 21 +18538.122404 + 31 +0.0 + 0 +LINE + 5 +1B36 + 8 +0 + 62 + 0 + 10 +26787.499911 + 20 +18581.423674 + 30 +0.0 + 11 +26774.999911 + 21 +18603.074309 + 31 +0.0 + 0 +LINE + 5 +1B37 + 8 +0 + 62 + 0 + 10 +26749.999911 + 20 +18646.37558 + 30 +0.0 + 11 +26740.0 + 21 +18663.695933 + 31 +0.0 + 0 +LINE + 5 +1B38 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +18481.830599 + 30 +0.0 + 11 +26812.499911 + 21 +18494.821134 + 31 +0.0 + 0 +LINE + 5 +1B39 + 8 +0 + 62 + 0 + 10 +26787.499911 + 20 +18538.122404 + 30 +0.0 + 11 +26774.999911 + 21 +18559.773039 + 31 +0.0 + 0 +LINE + 5 +1B3A + 8 +0 + 62 + 0 + 10 +26749.999911 + 20 +18603.074309 + 30 +0.0 + 11 +26740.0 + 21 +18620.394663 + 31 +0.0 + 0 +LINE + 5 +1B3B + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +18438.529329 + 30 +0.0 + 11 +26812.499911 + 21 +18451.519864 + 31 +0.0 + 0 +LINE + 5 +1B3C + 8 +0 + 62 + 0 + 10 +26787.499911 + 20 +18494.821134 + 30 +0.0 + 11 +26774.999911 + 21 +18516.471769 + 31 +0.0 + 0 +LINE + 5 +1B3D + 8 +0 + 62 + 0 + 10 +26749.999911 + 20 +18559.773039 + 30 +0.0 + 11 +26740.0 + 21 +18577.093393 + 31 +0.0 + 0 +LINE + 5 +1B3E + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +18395.228059 + 30 +0.0 + 11 +26812.499911 + 21 +18408.218594 + 31 +0.0 + 0 +LINE + 5 +1B3F + 8 +0 + 62 + 0 + 10 +26787.499911 + 20 +18451.519864 + 30 +0.0 + 11 +26774.999911 + 21 +18473.170499 + 31 +0.0 + 0 +LINE + 5 +1B40 + 8 +0 + 62 + 0 + 10 +26749.999911 + 20 +18516.471769 + 30 +0.0 + 11 +26740.0 + 21 +18533.792123 + 31 +0.0 + 0 +LINE + 5 +1B41 + 8 +0 + 62 + 0 + 10 +26813.173866 + 20 +18363.75 + 30 +0.0 + 11 +26812.499911 + 21 +18364.917324 + 31 +0.0 + 0 +LINE + 5 +1B42 + 8 +0 + 62 + 0 + 10 +26787.499911 + 20 +18408.218594 + 30 +0.0 + 11 +26774.999911 + 21 +18429.869229 + 31 +0.0 + 0 +LINE + 5 +1B43 + 8 +0 + 62 + 0 + 10 +26749.999911 + 20 +18473.170499 + 30 +0.0 + 11 +26740.0 + 21 +18490.490853 + 31 +0.0 + 0 +LINE + 5 +1B44 + 8 +0 + 62 + 0 + 10 +26787.499911 + 20 +18364.917324 + 30 +0.0 + 11 +26774.999911 + 21 +18386.567959 + 31 +0.0 + 0 +LINE + 5 +1B45 + 8 +0 + 62 + 0 + 10 +26749.999911 + 20 +18429.869229 + 30 +0.0 + 11 +26740.0 + 21 +18447.189583 + 31 +0.0 + 0 +LINE + 5 +1B46 + 8 +0 + 62 + 0 + 10 +26749.999911 + 20 +18386.567959 + 30 +0.0 + 11 +26740.0 + 21 +18403.888313 + 31 +0.0 + 0 +LINE + 5 +1B47 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +18914.843299 + 30 +0.0 + 11 +26812.49991 + 21 +18927.833835 + 31 +0.0 + 0 +LINE + 5 +1B48 + 8 +0 + 62 + 0 + 10 +26787.49991 + 20 +18971.135106 + 30 +0.0 + 11 +26774.99991 + 21 +18992.785741 + 31 +0.0 + 0 +LINE + 5 +1B49 + 8 +0 + 62 + 0 + 10 +26749.99991 + 20 +19036.087011 + 30 +0.0 + 11 +26740.0 + 21 +19053.407363 + 31 +0.0 + 0 +LINE + 5 +1B4A + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +18958.144569 + 30 +0.0 + 11 +26812.49991 + 21 +18971.135106 + 31 +0.0 + 0 +LINE + 5 +1B4B + 8 +0 + 62 + 0 + 10 +26787.49991 + 20 +19014.436376 + 30 +0.0 + 11 +26774.99991 + 21 +19036.087011 + 31 +0.0 + 0 +LINE + 5 +1B4C + 8 +0 + 62 + 0 + 10 +26749.99991 + 20 +19079.388281 + 30 +0.0 + 11 +26740.0 + 21 +19096.708633 + 31 +0.0 + 0 +LINE + 5 +1B4D + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +19001.445839 + 30 +0.0 + 11 +26812.49991 + 21 +19014.436376 + 31 +0.0 + 0 +LINE + 5 +1B4E + 8 +0 + 62 + 0 + 10 +26787.49991 + 20 +19057.737646 + 30 +0.0 + 11 +26774.99991 + 21 +19079.388281 + 31 +0.0 + 0 +LINE + 5 +1B4F + 8 +0 + 62 + 0 + 10 +26749.99991 + 20 +19122.689551 + 30 +0.0 + 11 +26740.0 + 21 +19140.009903 + 31 +0.0 + 0 +LINE + 5 +1B50 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +19044.747109 + 30 +0.0 + 11 +26812.49991 + 21 +19057.737646 + 31 +0.0 + 0 +LINE + 5 +1B51 + 8 +0 + 62 + 0 + 10 +26787.49991 + 20 +19101.038916 + 30 +0.0 + 11 +26774.99991 + 21 +19122.689551 + 31 +0.0 + 0 +LINE + 5 +1B52 + 8 +0 + 62 + 0 + 10 +26749.99991 + 20 +19165.990821 + 30 +0.0 + 11 +26740.0 + 21 +19183.311173 + 31 +0.0 + 0 +LINE + 5 +1B53 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +19088.048379 + 30 +0.0 + 11 +26812.49991 + 21 +19101.038916 + 31 +0.0 + 0 +LINE + 5 +1B54 + 8 +0 + 62 + 0 + 10 +26787.49991 + 20 +19144.340186 + 30 +0.0 + 11 +26774.99991 + 21 +19165.990821 + 31 +0.0 + 0 +LINE + 5 +1B55 + 8 +0 + 62 + 0 + 10 +26749.99991 + 20 +19209.292091 + 30 +0.0 + 11 +26740.0 + 21 +19226.612443 + 31 +0.0 + 0 +LINE + 5 +1B56 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +19131.349649 + 30 +0.0 + 11 +26812.49991 + 21 +19144.340186 + 31 +0.0 + 0 +LINE + 5 +1B57 + 8 +0 + 62 + 0 + 10 +26787.49991 + 20 +19187.641456 + 30 +0.0 + 11 +26774.99991 + 21 +19209.292091 + 31 +0.0 + 0 +LINE + 5 +1B58 + 8 +0 + 62 + 0 + 10 +26749.99991 + 20 +19252.593362 + 30 +0.0 + 11 +26740.0 + 21 +19269.913713 + 31 +0.0 + 0 +LINE + 5 +1B59 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +19174.650919 + 30 +0.0 + 11 +26812.49991 + 21 +19187.641456 + 31 +0.0 + 0 +LINE + 5 +1B5A + 8 +0 + 62 + 0 + 10 +26787.49991 + 20 +19230.942726 + 30 +0.0 + 11 +26774.99991 + 21 +19252.593362 + 31 +0.0 + 0 +LINE + 5 +1B5B + 8 +0 + 62 + 0 + 10 +26749.99991 + 20 +19295.894632 + 30 +0.0 + 11 +26740.0 + 21 +19313.214983 + 31 +0.0 + 0 +LINE + 5 +1B5C + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +19217.952189 + 30 +0.0 + 11 +26812.49991 + 21 +19230.942726 + 31 +0.0 + 0 +LINE + 5 +1B5D + 8 +0 + 62 + 0 + 10 +26787.49991 + 20 +19274.243997 + 30 +0.0 + 11 +26774.99991 + 21 +19295.894632 + 31 +0.0 + 0 +LINE + 5 +1B5E + 8 +0 + 62 + 0 + 10 +26749.99991 + 20 +19339.195902 + 30 +0.0 + 11 +26740.0 + 21 +19356.516253 + 31 +0.0 + 0 +LINE + 5 +1B5F + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +19261.253459 + 30 +0.0 + 11 +26812.49991 + 21 +19274.243997 + 31 +0.0 + 0 +LINE + 5 +1B60 + 8 +0 + 62 + 0 + 10 +26787.49991 + 20 +19317.545267 + 30 +0.0 + 11 +26774.99991 + 21 +19339.195902 + 31 +0.0 + 0 +LINE + 5 +1B61 + 8 +0 + 62 + 0 + 10 +26749.99991 + 20 +19382.497172 + 30 +0.0 + 11 +26740.0 + 21 +19399.817523 + 31 +0.0 + 0 +LINE + 5 +1B62 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +19304.554729 + 30 +0.0 + 11 +26812.499909 + 21 +19317.545267 + 31 +0.0 + 0 +LINE + 5 +1B63 + 8 +0 + 62 + 0 + 10 +26787.499909 + 20 +19360.846537 + 30 +0.0 + 11 +26774.999909 + 21 +19382.497172 + 31 +0.0 + 0 +LINE + 5 +1B64 + 8 +0 + 62 + 0 + 10 +26749.999909 + 20 +19425.798442 + 30 +0.0 + 11 +26740.0 + 21 +19443.118793 + 31 +0.0 + 0 +LINE + 5 +1B65 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +19347.855999 + 30 +0.0 + 11 +26812.499909 + 21 +19360.846537 + 31 +0.0 + 0 +LINE + 5 +1B66 + 8 +0 + 62 + 0 + 10 +26787.499909 + 20 +19404.147807 + 30 +0.0 + 11 +26774.999909 + 21 +19425.798442 + 31 +0.0 + 0 +LINE + 5 +1B67 + 8 +0 + 62 + 0 + 10 +26749.999909 + 20 +19469.099712 + 30 +0.0 + 11 +26740.0 + 21 +19486.420063 + 31 +0.0 + 0 +LINE + 5 +1B68 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +19391.157269 + 30 +0.0 + 11 +26812.499909 + 21 +19404.147807 + 31 +0.0 + 0 +LINE + 5 +1B69 + 8 +0 + 62 + 0 + 10 +26787.499909 + 20 +19447.449077 + 30 +0.0 + 11 +26774.999909 + 21 +19469.099712 + 31 +0.0 + 0 +LINE + 5 +1B6A + 8 +0 + 62 + 0 + 10 +26749.999909 + 20 +19512.400982 + 30 +0.0 + 11 +26740.0 + 21 +19529.721333 + 31 +0.0 + 0 +LINE + 5 +1B6B + 8 +0 + 62 + 0 + 10 +25247.388666 + 20 +22115.0 + 30 +0.0 + 11 +25238.75 + 21 +22129.962608 + 31 +0.0 + 0 +LINE + 5 +1B6C + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +19434.458539 + 30 +0.0 + 11 +26812.499909 + 21 +19447.449077 + 31 +0.0 + 0 +LINE + 5 +1B6D + 8 +0 + 62 + 0 + 10 +26787.499909 + 20 +19490.750347 + 30 +0.0 + 11 +26774.999909 + 21 +19512.400982 + 31 +0.0 + 0 +LINE + 5 +1B6E + 8 +0 + 62 + 0 + 10 +26749.999909 + 20 +19555.702253 + 30 +0.0 + 11 +26740.0 + 21 +19573.022603 + 31 +0.0 + 0 +LINE + 5 +1B6F + 8 +0 + 62 + 0 + 10 +25249.999909 + 20 +22153.778464 + 30 +0.0 + 11 +25238.75 + 21 +22173.263878 + 31 +0.0 + 0 +LINE + 5 +1B70 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +19477.759809 + 30 +0.0 + 11 +26812.499909 + 21 +19490.750347 + 31 +0.0 + 0 +LINE + 5 +1B71 + 8 +0 + 62 + 0 + 10 +26787.499909 + 20 +19534.051617 + 30 +0.0 + 11 +26774.999909 + 21 +19555.702253 + 31 +0.0 + 0 +LINE + 5 +1B72 + 8 +0 + 62 + 0 + 10 +26749.999909 + 20 +19599.003523 + 30 +0.0 + 11 +26740.0 + 21 +19616.323873 + 31 +0.0 + 0 +LINE + 5 +1B73 + 8 +0 + 62 + 0 + 10 +25287.499909 + 20 +22132.127829 + 30 +0.0 + 11 +25274.999909 + 21 +22153.778464 + 31 +0.0 + 0 +LINE + 5 +1B74 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +19521.061079 + 30 +0.0 + 11 +26812.499909 + 21 +19534.051617 + 31 +0.0 + 0 +LINE + 5 +1B75 + 8 +0 + 62 + 0 + 10 +26787.499909 + 20 +19577.352888 + 30 +0.0 + 11 +26774.999909 + 21 +19599.003523 + 31 +0.0 + 0 +LINE + 5 +1B76 + 8 +0 + 62 + 0 + 10 +26749.999909 + 20 +19642.304793 + 30 +0.0 + 11 +26740.0 + 21 +19659.625143 + 31 +0.0 + 0 +LINE + 5 +1B77 + 8 +0 + 62 + 0 + 10 +25322.388666 + 20 +22115.0 + 30 +0.0 + 11 +25312.499909 + 21 +22132.127829 + 31 +0.0 + 0 +LINE + 5 +1B78 + 8 +0 + 62 + 0 + 10 +25287.499909 + 20 +22175.429099 + 30 +0.0 + 11 +25276.200644 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1B79 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +19564.362349 + 30 +0.0 + 11 +26812.499909 + 21 +19577.352888 + 31 +0.0 + 0 +LINE + 5 +1B7A + 8 +0 + 62 + 0 + 10 +26787.499909 + 20 +19620.654158 + 30 +0.0 + 11 +26774.999909 + 21 +19642.304793 + 31 +0.0 + 0 +LINE + 5 +1B7B + 8 +0 + 62 + 0 + 10 +26749.999909 + 20 +19685.606063 + 30 +0.0 + 11 +26740.0 + 21 +19702.926413 + 31 +0.0 + 0 +LINE + 5 +1B7C + 8 +0 + 62 + 0 + 10 +25324.999909 + 20 +22153.778464 + 30 +0.0 + 11 +25312.499909 + 21 +22175.429099 + 31 +0.0 + 0 +LINE + 5 +1B7D + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +19607.663619 + 30 +0.0 + 11 +26812.499909 + 21 +19620.654158 + 31 +0.0 + 0 +LINE + 5 +1B7E + 8 +0 + 62 + 0 + 10 +26787.499909 + 20 +19663.955428 + 30 +0.0 + 11 +26774.999909 + 21 +19685.606063 + 31 +0.0 + 0 +LINE + 5 +1B7F + 8 +0 + 62 + 0 + 10 +26749.999909 + 20 +19728.907333 + 30 +0.0 + 11 +26740.0 + 21 +19746.227683 + 31 +0.0 + 0 +LINE + 5 +1B80 + 8 +0 + 62 + 0 + 10 +25362.499909 + 20 +22132.127829 + 30 +0.0 + 11 +25349.999909 + 21 +22153.778464 + 31 +0.0 + 0 +LINE + 5 +1B81 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +19650.964889 + 30 +0.0 + 11 +26812.499909 + 21 +19663.955428 + 31 +0.0 + 0 +LINE + 5 +1B82 + 8 +0 + 62 + 0 + 10 +26787.499909 + 20 +19707.256698 + 30 +0.0 + 11 +26774.999909 + 21 +19728.907333 + 31 +0.0 + 0 +LINE + 5 +1B83 + 8 +0 + 62 + 0 + 10 +26749.999909 + 20 +19772.208603 + 30 +0.0 + 11 +26740.0 + 21 +19789.528953 + 31 +0.0 + 0 +LINE + 5 +1B84 + 8 +0 + 62 + 0 + 10 +25397.388665 + 20 +22115.0 + 30 +0.0 + 11 +25387.499909 + 21 +22132.127829 + 31 +0.0 + 0 +LINE + 5 +1B85 + 8 +0 + 62 + 0 + 10 +25362.499909 + 20 +22175.429099 + 30 +0.0 + 11 +25351.200644 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1B86 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +19694.266159 + 30 +0.0 + 11 +26812.499909 + 21 +19707.256698 + 31 +0.0 + 0 +LINE + 5 +1B87 + 8 +0 + 62 + 0 + 10 +26787.499909 + 20 +19750.557968 + 30 +0.0 + 11 +26774.999909 + 21 +19772.208603 + 31 +0.0 + 0 +LINE + 5 +1B88 + 8 +0 + 62 + 0 + 10 +26749.999909 + 20 +19815.509873 + 30 +0.0 + 11 +26740.0 + 21 +19832.830223 + 31 +0.0 + 0 +LINE + 5 +1B89 + 8 +0 + 62 + 0 + 10 +25399.999909 + 20 +22153.778464 + 30 +0.0 + 11 +25387.499909 + 21 +22175.429099 + 31 +0.0 + 0 +LINE + 5 +1B8A + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +19737.567429 + 30 +0.0 + 11 +26812.499909 + 21 +19750.557968 + 31 +0.0 + 0 +LINE + 5 +1B8B + 8 +0 + 62 + 0 + 10 +26787.499909 + 20 +19793.859238 + 30 +0.0 + 11 +26774.999909 + 21 +19815.509873 + 31 +0.0 + 0 +LINE + 5 +1B8C + 8 +0 + 62 + 0 + 10 +26749.999909 + 20 +19858.811144 + 30 +0.0 + 11 +26740.0 + 21 +19876.131493 + 31 +0.0 + 0 +LINE + 5 +1B8D + 8 +0 + 62 + 0 + 10 +25437.499909 + 20 +22132.127829 + 30 +0.0 + 11 +25424.999909 + 21 +22153.778464 + 31 +0.0 + 0 +LINE + 5 +1B8E + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +19780.868699 + 30 +0.0 + 11 +26812.499909 + 21 +19793.859238 + 31 +0.0 + 0 +LINE + 5 +1B8F + 8 +0 + 62 + 0 + 10 +26787.499909 + 20 +19837.160508 + 30 +0.0 + 11 +26774.999909 + 21 +19858.811144 + 31 +0.0 + 0 +LINE + 5 +1B90 + 8 +0 + 62 + 0 + 10 +26749.999909 + 20 +19902.112414 + 30 +0.0 + 11 +26740.0 + 21 +19919.432763 + 31 +0.0 + 0 +LINE + 5 +1B91 + 8 +0 + 62 + 0 + 10 +25472.388665 + 20 +22115.0 + 30 +0.0 + 11 +25462.499909 + 21 +22132.127829 + 31 +0.0 + 0 +LINE + 5 +1B92 + 8 +0 + 62 + 0 + 10 +25437.499909 + 20 +22175.429099 + 30 +0.0 + 11 +25426.200643 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1B93 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +19824.169969 + 30 +0.0 + 11 +26812.499908 + 21 +19837.160508 + 31 +0.0 + 0 +LINE + 5 +1B94 + 8 +0 + 62 + 0 + 10 +26787.499908 + 20 +19880.461779 + 30 +0.0 + 11 +26774.999908 + 21 +19902.112414 + 31 +0.0 + 0 +LINE + 5 +1B95 + 8 +0 + 62 + 0 + 10 +26749.999908 + 20 +19945.413684 + 30 +0.0 + 11 +26740.0 + 21 +19962.734033 + 31 +0.0 + 0 +LINE + 5 +1B96 + 8 +0 + 62 + 0 + 10 +25474.999908 + 20 +22153.778464 + 30 +0.0 + 11 +25462.499908 + 21 +22175.429099 + 31 +0.0 + 0 +LINE + 5 +1B97 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +19867.471239 + 30 +0.0 + 11 +26812.499908 + 21 +19880.461779 + 31 +0.0 + 0 +LINE + 5 +1B98 + 8 +0 + 62 + 0 + 10 +26787.499908 + 20 +19923.763049 + 30 +0.0 + 11 +26774.999908 + 21 +19945.413684 + 31 +0.0 + 0 +LINE + 5 +1B99 + 8 +0 + 62 + 0 + 10 +26749.999908 + 20 +19988.714954 + 30 +0.0 + 11 +26740.0 + 21 +20006.035303 + 31 +0.0 + 0 +LINE + 5 +1B9A + 8 +0 + 62 + 0 + 10 +25512.499908 + 20 +22132.127828 + 30 +0.0 + 11 +25499.999908 + 21 +22153.778464 + 31 +0.0 + 0 +LINE + 5 +1B9B + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +19910.772509 + 30 +0.0 + 11 +26812.499908 + 21 +19923.763049 + 31 +0.0 + 0 +LINE + 5 +1B9C + 8 +0 + 62 + 0 + 10 +26787.499908 + 20 +19967.064319 + 30 +0.0 + 11 +26774.999908 + 21 +19988.714954 + 31 +0.0 + 0 +LINE + 5 +1B9D + 8 +0 + 62 + 0 + 10 +26749.999908 + 20 +20032.016224 + 30 +0.0 + 11 +26740.0 + 21 +20049.336573 + 31 +0.0 + 0 +LINE + 5 +1B9E + 8 +0 + 62 + 0 + 10 +25547.388665 + 20 +22115.0 + 30 +0.0 + 11 +25537.499908 + 21 +22132.127828 + 31 +0.0 + 0 +LINE + 5 +1B9F + 8 +0 + 62 + 0 + 10 +25512.499908 + 20 +22175.429099 + 30 +0.0 + 11 +25501.200643 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1BA0 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +19954.073779 + 30 +0.0 + 11 +26812.499908 + 21 +19967.064319 + 31 +0.0 + 0 +LINE + 5 +1BA1 + 8 +0 + 62 + 0 + 10 +26787.499908 + 20 +20010.365589 + 30 +0.0 + 11 +26774.999908 + 21 +20032.016224 + 31 +0.0 + 0 +LINE + 5 +1BA2 + 8 +0 + 62 + 0 + 10 +26749.999908 + 20 +20075.317494 + 30 +0.0 + 11 +26740.0 + 21 +20092.637843 + 31 +0.0 + 0 +LINE + 5 +1BA3 + 8 +0 + 62 + 0 + 10 +25549.999908 + 20 +22153.778463 + 30 +0.0 + 11 +25537.499908 + 21 +22175.429099 + 31 +0.0 + 0 +LINE + 5 +1BA4 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +19997.375049 + 30 +0.0 + 11 +26812.499908 + 21 +20010.365589 + 31 +0.0 + 0 +LINE + 5 +1BA5 + 8 +0 + 62 + 0 + 10 +26787.499908 + 20 +20053.666859 + 30 +0.0 + 11 +26774.999908 + 21 +20075.317494 + 31 +0.0 + 0 +LINE + 5 +1BA6 + 8 +0 + 62 + 0 + 10 +26749.999908 + 20 +20118.618764 + 30 +0.0 + 11 +26740.0 + 21 +20135.939113 + 31 +0.0 + 0 +LINE + 5 +1BA7 + 8 +0 + 62 + 0 + 10 +25587.499908 + 20 +22132.127828 + 30 +0.0 + 11 +25574.999908 + 21 +22153.778463 + 31 +0.0 + 0 +LINE + 5 +1BA8 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +20040.676319 + 30 +0.0 + 11 +26812.499908 + 21 +20053.666859 + 31 +0.0 + 0 +LINE + 5 +1BA9 + 8 +0 + 62 + 0 + 10 +26787.499908 + 20 +20096.968129 + 30 +0.0 + 11 +26774.999908 + 21 +20118.618764 + 31 +0.0 + 0 +LINE + 5 +1BAA + 8 +0 + 62 + 0 + 10 +26749.999908 + 20 +20161.920035 + 30 +0.0 + 11 +26740.0 + 21 +20179.240383 + 31 +0.0 + 0 +LINE + 5 +1BAB + 8 +0 + 62 + 0 + 10 +25622.388664 + 20 +22115.0 + 30 +0.0 + 11 +25612.499908 + 21 +22132.127828 + 31 +0.0 + 0 +LINE + 5 +1BAC + 8 +0 + 62 + 0 + 10 +25587.499908 + 20 +22175.429098 + 30 +0.0 + 11 +25576.200643 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1BAD + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +20083.977589 + 30 +0.0 + 11 +26812.499908 + 21 +20096.968129 + 31 +0.0 + 0 +LINE + 5 +1BAE + 8 +0 + 62 + 0 + 10 +26787.499908 + 20 +20140.269399 + 30 +0.0 + 11 +26774.999908 + 21 +20161.920035 + 31 +0.0 + 0 +LINE + 5 +1BAF + 8 +0 + 62 + 0 + 10 +26749.999908 + 20 +20205.221305 + 30 +0.0 + 11 +26740.0 + 21 +20222.541653 + 31 +0.0 + 0 +LINE + 5 +1BB0 + 8 +0 + 62 + 0 + 10 +25624.999908 + 20 +22153.778463 + 30 +0.0 + 11 +25612.499908 + 21 +22175.429098 + 31 +0.0 + 0 +LINE + 5 +1BB1 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +20127.278859 + 30 +0.0 + 11 +26812.499908 + 21 +20140.269399 + 31 +0.0 + 0 +LINE + 5 +1BB2 + 8 +0 + 62 + 0 + 10 +26787.499908 + 20 +20183.57067 + 30 +0.0 + 11 +26774.999908 + 21 +20205.221305 + 31 +0.0 + 0 +LINE + 5 +1BB3 + 8 +0 + 62 + 0 + 10 +26749.999908 + 20 +20248.522575 + 30 +0.0 + 11 +26740.0 + 21 +20265.842923 + 31 +0.0 + 0 +LINE + 5 +1BB4 + 8 +0 + 62 + 0 + 10 +25662.499908 + 20 +22132.127828 + 30 +0.0 + 11 +25649.999908 + 21 +22153.778463 + 31 +0.0 + 0 +LINE + 5 +1BB5 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +20170.580129 + 30 +0.0 + 11 +26812.499908 + 21 +20183.57067 + 31 +0.0 + 0 +LINE + 5 +1BB6 + 8 +0 + 62 + 0 + 10 +26787.499908 + 20 +20226.87194 + 30 +0.0 + 11 +26774.999908 + 21 +20248.522575 + 31 +0.0 + 0 +LINE + 5 +1BB7 + 8 +0 + 62 + 0 + 10 +26749.999908 + 20 +20291.823845 + 30 +0.0 + 11 +26740.0 + 21 +20309.144193 + 31 +0.0 + 0 +LINE + 5 +1BB8 + 8 +0 + 62 + 0 + 10 +25697.388664 + 20 +22115.0 + 30 +0.0 + 11 +25687.499908 + 21 +22132.127828 + 31 +0.0 + 0 +LINE + 5 +1BB9 + 8 +0 + 62 + 0 + 10 +25662.499908 + 20 +22175.429098 + 30 +0.0 + 11 +25651.200642 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1BBA + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +20213.881399 + 30 +0.0 + 11 +26812.499908 + 21 +20226.87194 + 31 +0.0 + 0 +LINE + 5 +1BBB + 8 +0 + 62 + 0 + 10 +26787.499908 + 20 +20270.17321 + 30 +0.0 + 11 +26774.999908 + 21 +20291.823845 + 31 +0.0 + 0 +LINE + 5 +1BBC + 8 +0 + 62 + 0 + 10 +26749.999908 + 20 +20335.125115 + 30 +0.0 + 11 +26740.0 + 21 +20352.445463 + 31 +0.0 + 0 +LINE + 5 +1BBD + 8 +0 + 62 + 0 + 10 +25699.999908 + 20 +22153.778463 + 30 +0.0 + 11 +25687.499908 + 21 +22175.429098 + 31 +0.0 + 0 +LINE + 5 +1BBE + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +20257.182669 + 30 +0.0 + 11 +26812.499908 + 21 +20270.17321 + 31 +0.0 + 0 +LINE + 5 +1BBF + 8 +0 + 62 + 0 + 10 +26787.499908 + 20 +20313.47448 + 30 +0.0 + 11 +26774.999908 + 21 +20335.125115 + 31 +0.0 + 0 +LINE + 5 +1BC0 + 8 +0 + 62 + 0 + 10 +26749.999908 + 20 +20378.426385 + 30 +0.0 + 11 +26740.0 + 21 +20395.746733 + 31 +0.0 + 0 +LINE + 5 +1BC1 + 8 +0 + 62 + 0 + 10 +25737.499908 + 20 +22132.127828 + 30 +0.0 + 11 +25724.999908 + 21 +22153.778463 + 31 +0.0 + 0 +LINE + 5 +1BC2 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +20300.483939 + 30 +0.0 + 11 +26812.499908 + 21 +20313.47448 + 31 +0.0 + 0 +LINE + 5 +1BC3 + 8 +0 + 62 + 0 + 10 +26787.499908 + 20 +20356.77575 + 30 +0.0 + 11 +26774.999908 + 21 +20378.426385 + 31 +0.0 + 0 +LINE + 5 +1BC4 + 8 +0 + 62 + 0 + 10 +26749.999908 + 20 +20421.727655 + 30 +0.0 + 11 +26740.0 + 21 +20439.048003 + 31 +0.0 + 0 +LINE + 5 +1BC5 + 8 +0 + 62 + 0 + 10 +25772.388664 + 20 +22115.0 + 30 +0.0 + 11 +25762.499908 + 21 +22132.127828 + 31 +0.0 + 0 +LINE + 5 +1BC6 + 8 +0 + 62 + 0 + 10 +25737.499908 + 20 +22175.429098 + 30 +0.0 + 11 +25726.200642 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1BC7 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +20343.785209 + 30 +0.0 + 11 +26812.499907 + 21 +20356.77575 + 31 +0.0 + 0 +LINE + 5 +1BC8 + 8 +0 + 62 + 0 + 10 +26787.499907 + 20 +20400.07702 + 30 +0.0 + 11 +26774.999907 + 21 +20421.727655 + 31 +0.0 + 0 +LINE + 5 +1BC9 + 8 +0 + 62 + 0 + 10 +26749.999907 + 20 +20465.028926 + 30 +0.0 + 11 +26740.0 + 21 +20482.349273 + 31 +0.0 + 0 +LINE + 5 +1BCA + 8 +0 + 62 + 0 + 10 +25774.999907 + 20 +22153.778463 + 30 +0.0 + 11 +25762.499907 + 21 +22175.429098 + 31 +0.0 + 0 +LINE + 5 +1BCB + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +20387.086479 + 30 +0.0 + 11 +26812.499907 + 21 +20400.07702 + 31 +0.0 + 0 +LINE + 5 +1BCC + 8 +0 + 62 + 0 + 10 +26787.499907 + 20 +20443.37829 + 30 +0.0 + 11 +26774.999907 + 21 +20465.028926 + 31 +0.0 + 0 +LINE + 5 +1BCD + 8 +0 + 62 + 0 + 10 +26749.999907 + 20 +20508.330196 + 30 +0.0 + 11 +26740.0 + 21 +20525.650543 + 31 +0.0 + 0 +LINE + 5 +1BCE + 8 +0 + 62 + 0 + 10 +25812.499907 + 20 +22132.127828 + 30 +0.0 + 11 +25799.999907 + 21 +22153.778463 + 31 +0.0 + 0 +LINE + 5 +1BCF + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +20430.387749 + 30 +0.0 + 11 +26812.499907 + 21 +20443.37829 + 31 +0.0 + 0 +LINE + 5 +1BD0 + 8 +0 + 62 + 0 + 10 +26787.499907 + 20 +20486.679561 + 30 +0.0 + 11 +26774.999907 + 21 +20508.330196 + 31 +0.0 + 0 +LINE + 5 +1BD1 + 8 +0 + 62 + 0 + 10 +26749.999907 + 20 +20551.631466 + 30 +0.0 + 11 +26740.0 + 21 +20568.951813 + 31 +0.0 + 0 +LINE + 5 +1BD2 + 8 +0 + 62 + 0 + 10 +25847.388663 + 20 +22115.0 + 30 +0.0 + 11 +25837.499907 + 21 +22132.127828 + 31 +0.0 + 0 +LINE + 5 +1BD3 + 8 +0 + 62 + 0 + 10 +25812.499907 + 20 +22175.429098 + 30 +0.0 + 11 +25801.200642 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1BD4 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +20473.689019 + 30 +0.0 + 11 +26812.499907 + 21 +20486.679561 + 31 +0.0 + 0 +LINE + 5 +1BD5 + 8 +0 + 62 + 0 + 10 +26787.499907 + 20 +20529.980831 + 30 +0.0 + 11 +26774.999907 + 21 +20551.631466 + 31 +0.0 + 0 +LINE + 5 +1BD6 + 8 +0 + 62 + 0 + 10 +26749.999907 + 20 +20594.932736 + 30 +0.0 + 11 +26740.0 + 21 +20612.253083 + 31 +0.0 + 0 +LINE + 5 +1BD7 + 8 +0 + 62 + 0 + 10 +25849.999907 + 20 +22153.778463 + 30 +0.0 + 11 +25837.499907 + 21 +22175.429098 + 31 +0.0 + 0 +LINE + 5 +1BD8 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +20516.990289 + 30 +0.0 + 11 +26812.499907 + 21 +20529.980831 + 31 +0.0 + 0 +LINE + 5 +1BD9 + 8 +0 + 62 + 0 + 10 +26787.499907 + 20 +20573.282101 + 30 +0.0 + 11 +26774.999907 + 21 +20594.932736 + 31 +0.0 + 0 +LINE + 5 +1BDA + 8 +0 + 62 + 0 + 10 +26749.999907 + 20 +20638.234006 + 30 +0.0 + 11 +26740.0 + 21 +20655.554353 + 31 +0.0 + 0 +LINE + 5 +1BDB + 8 +0 + 62 + 0 + 10 +25887.499907 + 20 +22132.127828 + 30 +0.0 + 11 +25874.999907 + 21 +22153.778463 + 31 +0.0 + 0 +LINE + 5 +1BDC + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +20560.291559 + 30 +0.0 + 11 +26812.499907 + 21 +20573.282101 + 31 +0.0 + 0 +LINE + 5 +1BDD + 8 +0 + 62 + 0 + 10 +26787.499907 + 20 +20616.583371 + 30 +0.0 + 11 +26774.999907 + 21 +20638.234006 + 31 +0.0 + 0 +LINE + 5 +1BDE + 8 +0 + 62 + 0 + 10 +26749.999907 + 20 +20681.535276 + 30 +0.0 + 11 +26740.0 + 21 +20698.855623 + 31 +0.0 + 0 +LINE + 5 +1BDF + 8 +0 + 62 + 0 + 10 +25922.388663 + 20 +22115.0 + 30 +0.0 + 11 +25912.499907 + 21 +22132.127828 + 31 +0.0 + 0 +LINE + 5 +1BE0 + 8 +0 + 62 + 0 + 10 +25887.499907 + 20 +22175.429098 + 30 +0.0 + 11 +25876.200641 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1BE1 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +20603.592829 + 30 +0.0 + 11 +26812.499907 + 21 +20616.583371 + 31 +0.0 + 0 +LINE + 5 +1BE2 + 8 +0 + 62 + 0 + 10 +26787.499907 + 20 +20659.884641 + 30 +0.0 + 11 +26774.999907 + 21 +20681.535276 + 31 +0.0 + 0 +LINE + 5 +1BE3 + 8 +0 + 62 + 0 + 10 +26749.999907 + 20 +20724.836546 + 30 +0.0 + 11 +26740.0 + 21 +20742.156893 + 31 +0.0 + 0 +LINE + 5 +1BE4 + 8 +0 + 62 + 0 + 10 +25924.999907 + 20 +22153.778463 + 30 +0.0 + 11 +25912.499907 + 21 +22175.429098 + 31 +0.0 + 0 +LINE + 5 +1BE5 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +20646.894099 + 30 +0.0 + 11 +26812.499907 + 21 +20659.884641 + 31 +0.0 + 0 +LINE + 5 +1BE6 + 8 +0 + 62 + 0 + 10 +26787.499907 + 20 +20703.185911 + 30 +0.0 + 11 +26774.999907 + 21 +20724.836546 + 31 +0.0 + 0 +LINE + 5 +1BE7 + 8 +0 + 62 + 0 + 10 +26749.999907 + 20 +20768.137817 + 30 +0.0 + 11 +26740.0 + 21 +20785.458163 + 31 +0.0 + 0 +LINE + 5 +1BE8 + 8 +0 + 62 + 0 + 10 +25962.499907 + 20 +22132.127828 + 30 +0.0 + 11 +25949.999907 + 21 +22153.778463 + 31 +0.0 + 0 +LINE + 5 +1BE9 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +20690.195369 + 30 +0.0 + 11 +26812.499907 + 21 +20703.185911 + 31 +0.0 + 0 +LINE + 5 +1BEA + 8 +0 + 62 + 0 + 10 +26787.499907 + 20 +20746.487181 + 30 +0.0 + 11 +26774.999907 + 21 +20768.137817 + 31 +0.0 + 0 +LINE + 5 +1BEB + 8 +0 + 62 + 0 + 10 +26749.999907 + 20 +20811.439087 + 30 +0.0 + 11 +26740.0 + 21 +20828.759433 + 31 +0.0 + 0 +LINE + 5 +1BEC + 8 +0 + 62 + 0 + 10 +25997.388663 + 20 +22115.0 + 30 +0.0 + 11 +25987.499907 + 21 +22132.127828 + 31 +0.0 + 0 +LINE + 5 +1BED + 8 +0 + 62 + 0 + 10 +25962.499907 + 20 +22175.429098 + 30 +0.0 + 11 +25951.200641 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1BEE + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +20733.496639 + 30 +0.0 + 11 +26812.499907 + 21 +20746.487181 + 31 +0.0 + 0 +LINE + 5 +1BEF + 8 +0 + 62 + 0 + 10 +26787.499907 + 20 +20789.788452 + 30 +0.0 + 11 +26774.999907 + 21 +20811.439087 + 31 +0.0 + 0 +LINE + 5 +1BF0 + 8 +0 + 62 + 0 + 10 +26749.999907 + 20 +20854.740357 + 30 +0.0 + 11 +26740.0 + 21 +20872.060703 + 31 +0.0 + 0 +LINE + 5 +1BF1 + 8 +0 + 62 + 0 + 10 +25999.999907 + 20 +22153.778463 + 30 +0.0 + 11 +25987.499907 + 21 +22175.429098 + 31 +0.0 + 0 +LINE + 5 +1BF2 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +20776.797909 + 30 +0.0 + 11 +26812.499907 + 21 +20789.788452 + 31 +0.0 + 0 +LINE + 5 +1BF3 + 8 +0 + 62 + 0 + 10 +26787.499907 + 20 +20833.089722 + 30 +0.0 + 11 +26774.999907 + 21 +20854.740357 + 31 +0.0 + 0 +LINE + 5 +1BF4 + 8 +0 + 62 + 0 + 10 +26749.999907 + 20 +20898.041627 + 30 +0.0 + 11 +26740.0 + 21 +20915.361973 + 31 +0.0 + 0 +LINE + 5 +1BF5 + 8 +0 + 62 + 0 + 10 +26037.499907 + 20 +22132.127827 + 30 +0.0 + 11 +26024.999907 + 21 +22153.778463 + 31 +0.0 + 0 +LINE + 5 +1BF6 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +20820.099179 + 30 +0.0 + 11 +26812.499907 + 21 +20833.089722 + 31 +0.0 + 0 +LINE + 5 +1BF7 + 8 +0 + 62 + 0 + 10 +26787.499907 + 20 +20876.390992 + 30 +0.0 + 11 +26774.999907 + 21 +20898.041627 + 31 +0.0 + 0 +LINE + 5 +1BF8 + 8 +0 + 62 + 0 + 10 +26749.999907 + 20 +20941.342897 + 30 +0.0 + 11 +26740.0 + 21 +20958.663243 + 31 +0.0 + 0 +LINE + 5 +1BF9 + 8 +0 + 62 + 0 + 10 +26072.388662 + 20 +22115.0 + 30 +0.0 + 11 +26062.499907 + 21 +22132.127827 + 31 +0.0 + 0 +LINE + 5 +1BFA + 8 +0 + 62 + 0 + 10 +26037.499907 + 20 +22175.429098 + 30 +0.0 + 11 +26026.200641 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1BFB + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +20863.400449 + 30 +0.0 + 11 +26812.499907 + 21 +20876.390992 + 31 +0.0 + 0 +LINE + 5 +1BFC + 8 +0 + 62 + 0 + 10 +26787.499907 + 20 +20919.692262 + 30 +0.0 + 11 +26774.999907 + 21 +20941.342897 + 31 +0.0 + 0 +LINE + 5 +1BFD + 8 +0 + 62 + 0 + 10 +26749.999907 + 20 +20984.644167 + 30 +0.0 + 11 +26740.0 + 21 +21001.964513 + 31 +0.0 + 0 +LINE + 5 +1BFE + 8 +0 + 62 + 0 + 10 +26074.999907 + 20 +22153.778462 + 30 +0.0 + 11 +26062.499907 + 21 +22175.429098 + 31 +0.0 + 0 +LINE + 5 +1BFF + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +20906.701719 + 30 +0.0 + 11 +26812.499906 + 21 +20919.692262 + 31 +0.0 + 0 +LINE + 5 +1C00 + 8 +0 + 62 + 0 + 10 +26787.499906 + 20 +20962.993532 + 30 +0.0 + 11 +26774.999906 + 21 +20984.644167 + 31 +0.0 + 0 +LINE + 5 +1C01 + 8 +0 + 62 + 0 + 10 +26749.999906 + 20 +21027.945437 + 30 +0.0 + 11 +26740.0 + 21 +21045.265783 + 31 +0.0 + 0 +LINE + 5 +1C02 + 8 +0 + 62 + 0 + 10 +26112.499906 + 20 +22132.127827 + 30 +0.0 + 11 +26099.999906 + 21 +22153.778462 + 31 +0.0 + 0 +LINE + 5 +1C03 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +20950.002989 + 30 +0.0 + 11 +26812.499906 + 21 +20962.993532 + 31 +0.0 + 0 +LINE + 5 +1C04 + 8 +0 + 62 + 0 + 10 +26787.499906 + 20 +21006.294802 + 30 +0.0 + 11 +26774.999906 + 21 +21027.945437 + 31 +0.0 + 0 +LINE + 5 +1C05 + 8 +0 + 62 + 0 + 10 +26749.999906 + 20 +21071.246708 + 30 +0.0 + 11 +26740.0 + 21 +21088.567053 + 31 +0.0 + 0 +LINE + 5 +1C06 + 8 +0 + 62 + 0 + 10 +26147.388662 + 20 +22115.0 + 30 +0.0 + 11 +26137.499906 + 21 +22132.127827 + 31 +0.0 + 0 +LINE + 5 +1C07 + 8 +0 + 62 + 0 + 10 +26112.499906 + 20 +22175.429097 + 30 +0.0 + 11 +26101.20064 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1C08 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +20993.304259 + 30 +0.0 + 11 +26812.499906 + 21 +21006.294802 + 31 +0.0 + 0 +LINE + 5 +1C09 + 8 +0 + 62 + 0 + 10 +26787.499906 + 20 +21049.596072 + 30 +0.0 + 11 +26774.999906 + 21 +21071.246708 + 31 +0.0 + 0 +LINE + 5 +1C0A + 8 +0 + 62 + 0 + 10 +26749.999906 + 20 +21114.547978 + 30 +0.0 + 11 +26740.0 + 21 +21131.868323 + 31 +0.0 + 0 +LINE + 5 +1C0B + 8 +0 + 62 + 0 + 10 +26149.999906 + 20 +22153.778462 + 30 +0.0 + 11 +26137.499906 + 21 +22175.429097 + 31 +0.0 + 0 +LINE + 5 +1C0C + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +21036.605529 + 30 +0.0 + 11 +26812.499906 + 21 +21049.596072 + 31 +0.0 + 0 +LINE + 5 +1C0D + 8 +0 + 62 + 0 + 10 +26787.499906 + 20 +21092.897343 + 30 +0.0 + 11 +26774.999906 + 21 +21114.547978 + 31 +0.0 + 0 +LINE + 5 +1C0E + 8 +0 + 62 + 0 + 10 +26749.999906 + 20 +21157.849248 + 30 +0.0 + 11 +26740.0 + 21 +21175.169593 + 31 +0.0 + 0 +LINE + 5 +1C0F + 8 +0 + 62 + 0 + 10 +26187.499906 + 20 +22132.127827 + 30 +0.0 + 11 +26174.999906 + 21 +22153.778462 + 31 +0.0 + 0 +LINE + 5 +1C10 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +21079.906799 + 30 +0.0 + 11 +26812.499906 + 21 +21092.897343 + 31 +0.0 + 0 +LINE + 5 +1C11 + 8 +0 + 62 + 0 + 10 +26787.499906 + 20 +21136.198613 + 30 +0.0 + 11 +26774.999906 + 21 +21157.849248 + 31 +0.0 + 0 +LINE + 5 +1C12 + 8 +0 + 62 + 0 + 10 +26749.999906 + 20 +21201.150518 + 30 +0.0 + 11 +26740.0 + 21 +21218.470863 + 31 +0.0 + 0 +LINE + 5 +1C13 + 8 +0 + 62 + 0 + 10 +26222.388662 + 20 +22115.0 + 30 +0.0 + 11 +26212.499906 + 21 +22132.127827 + 31 +0.0 + 0 +LINE + 5 +1C14 + 8 +0 + 62 + 0 + 10 +26187.499906 + 20 +22175.429097 + 30 +0.0 + 11 +26176.20064 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1C15 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +21123.208069 + 30 +0.0 + 11 +26812.499906 + 21 +21136.198613 + 31 +0.0 + 0 +LINE + 5 +1C16 + 8 +0 + 62 + 0 + 10 +26787.499906 + 20 +21179.499883 + 30 +0.0 + 11 +26774.999906 + 21 +21201.150518 + 31 +0.0 + 0 +LINE + 5 +1C17 + 8 +0 + 62 + 0 + 10 +26749.999906 + 20 +21244.451788 + 30 +0.0 + 11 +26740.0 + 21 +21261.772133 + 31 +0.0 + 0 +LINE + 5 +1C18 + 8 +0 + 62 + 0 + 10 +26224.999906 + 20 +22153.778462 + 30 +0.0 + 11 +26212.499906 + 21 +22175.429097 + 31 +0.0 + 0 +LINE + 5 +1C19 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +21166.509339 + 30 +0.0 + 11 +26812.499906 + 21 +21179.499883 + 31 +0.0 + 0 +LINE + 5 +1C1A + 8 +0 + 62 + 0 + 10 +26787.499906 + 20 +21222.801153 + 30 +0.0 + 11 +26774.999906 + 21 +21244.451788 + 31 +0.0 + 0 +LINE + 5 +1C1B + 8 +0 + 62 + 0 + 10 +26749.999906 + 20 +21287.753058 + 30 +0.0 + 11 +26740.0 + 21 +21305.073403 + 31 +0.0 + 0 +LINE + 5 +1C1C + 8 +0 + 62 + 0 + 10 +26262.499906 + 20 +22132.127827 + 30 +0.0 + 11 +26249.999906 + 21 +22153.778462 + 31 +0.0 + 0 +LINE + 5 +1C1D + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +21209.810609 + 30 +0.0 + 11 +26812.499906 + 21 +21222.801153 + 31 +0.0 + 0 +LINE + 5 +1C1E + 8 +0 + 62 + 0 + 10 +26787.499906 + 20 +21266.102423 + 30 +0.0 + 11 +26774.999906 + 21 +21287.753058 + 31 +0.0 + 0 +LINE + 5 +1C1F + 8 +0 + 62 + 0 + 10 +26749.999906 + 20 +21331.054328 + 30 +0.0 + 11 +26740.0 + 21 +21348.374673 + 31 +0.0 + 0 +LINE + 5 +1C20 + 8 +0 + 62 + 0 + 10 +26297.388661 + 20 +22115.0 + 30 +0.0 + 11 +26287.499906 + 21 +22132.127827 + 31 +0.0 + 0 +LINE + 5 +1C21 + 8 +0 + 62 + 0 + 10 +26262.499906 + 20 +22175.429097 + 30 +0.0 + 11 +26251.20064 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1C22 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +21253.111879 + 30 +0.0 + 11 +26812.499906 + 21 +21266.102423 + 31 +0.0 + 0 +LINE + 5 +1C23 + 8 +0 + 62 + 0 + 10 +26787.499906 + 20 +21309.403693 + 30 +0.0 + 11 +26774.999906 + 21 +21331.054328 + 31 +0.0 + 0 +LINE + 5 +1C24 + 8 +0 + 62 + 0 + 10 +26749.999906 + 20 +21374.355599 + 30 +0.0 + 11 +26740.0 + 21 +21391.675943 + 31 +0.0 + 0 +LINE + 5 +1C25 + 8 +0 + 62 + 0 + 10 +26299.999906 + 20 +22153.778462 + 30 +0.0 + 11 +26287.499906 + 21 +22175.429097 + 31 +0.0 + 0 +LINE + 5 +1C26 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +21296.413149 + 30 +0.0 + 11 +26812.499906 + 21 +21309.403693 + 31 +0.0 + 0 +LINE + 5 +1C27 + 8 +0 + 62 + 0 + 10 +26787.499906 + 20 +21352.704963 + 30 +0.0 + 11 +26774.999906 + 21 +21374.355599 + 31 +0.0 + 0 +LINE + 5 +1C28 + 8 +0 + 62 + 0 + 10 +26749.999906 + 20 +21417.656869 + 30 +0.0 + 11 +26740.0 + 21 +21434.977213 + 31 +0.0 + 0 +LINE + 5 +1C29 + 8 +0 + 62 + 0 + 10 +26337.499906 + 20 +22132.127827 + 30 +0.0 + 11 +26324.999906 + 21 +22153.778462 + 31 +0.0 + 0 +LINE + 5 +1C2A + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +21339.714419 + 30 +0.0 + 11 +26812.499906 + 21 +21352.704963 + 31 +0.0 + 0 +LINE + 5 +1C2B + 8 +0 + 62 + 0 + 10 +26787.499906 + 20 +21396.006234 + 30 +0.0 + 11 +26774.999906 + 21 +21417.656869 + 31 +0.0 + 0 +LINE + 5 +1C2C + 8 +0 + 62 + 0 + 10 +26749.999906 + 20 +21460.958139 + 30 +0.0 + 11 +26740.0 + 21 +21478.278483 + 31 +0.0 + 0 +LINE + 5 +1C2D + 8 +0 + 62 + 0 + 10 +26372.388661 + 20 +22115.0 + 30 +0.0 + 11 +26362.499906 + 21 +22132.127827 + 31 +0.0 + 0 +LINE + 5 +1C2E + 8 +0 + 62 + 0 + 10 +26337.499906 + 20 +22175.429097 + 30 +0.0 + 11 +26326.200639 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1C2F + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +21383.015689 + 30 +0.0 + 11 +26812.499906 + 21 +21396.006234 + 31 +0.0 + 0 +LINE + 5 +1C30 + 8 +0 + 62 + 0 + 10 +26787.499906 + 20 +21439.307504 + 30 +0.0 + 11 +26774.999906 + 21 +21460.958139 + 31 +0.0 + 0 +LINE + 5 +1C31 + 8 +0 + 62 + 0 + 10 +26749.999906 + 20 +21504.259409 + 30 +0.0 + 11 +26740.0 + 21 +21521.579753 + 31 +0.0 + 0 +LINE + 5 +1C32 + 8 +0 + 62 + 0 + 10 +26374.999906 + 20 +22153.778462 + 30 +0.0 + 11 +26362.499906 + 21 +22175.429097 + 31 +0.0 + 0 +LINE + 5 +1C33 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +21426.316959 + 30 +0.0 + 11 +26812.499905 + 21 +21439.307504 + 31 +0.0 + 0 +LINE + 5 +1C34 + 8 +0 + 62 + 0 + 10 +26787.499905 + 20 +21482.608774 + 30 +0.0 + 11 +26774.999905 + 21 +21504.259409 + 31 +0.0 + 0 +LINE + 5 +1C35 + 8 +0 + 62 + 0 + 10 +26749.999905 + 20 +21547.560679 + 30 +0.0 + 11 +26740.0 + 21 +21564.881023 + 31 +0.0 + 0 +LINE + 5 +1C36 + 8 +0 + 62 + 0 + 10 +26412.499905 + 20 +22132.127827 + 30 +0.0 + 11 +26399.999905 + 21 +22153.778462 + 31 +0.0 + 0 +LINE + 5 +1C37 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +21469.618229 + 30 +0.0 + 11 +26812.499905 + 21 +21482.608774 + 31 +0.0 + 0 +LINE + 5 +1C38 + 8 +0 + 62 + 0 + 10 +26787.499905 + 20 +21525.910044 + 30 +0.0 + 11 +26774.999905 + 21 +21547.560679 + 31 +0.0 + 0 +LINE + 5 +1C39 + 8 +0 + 62 + 0 + 10 +26749.999905 + 20 +21590.861949 + 30 +0.0 + 11 +26740.0 + 21 +21608.182293 + 31 +0.0 + 0 +LINE + 5 +1C3A + 8 +0 + 62 + 0 + 10 +26447.388661 + 20 +22115.0 + 30 +0.0 + 11 +26437.499905 + 21 +22132.127827 + 31 +0.0 + 0 +LINE + 5 +1C3B + 8 +0 + 62 + 0 + 10 +26412.499905 + 20 +22175.429097 + 30 +0.0 + 11 +26401.200639 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1C3C + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +21512.919499 + 30 +0.0 + 11 +26812.499905 + 21 +21525.910044 + 31 +0.0 + 0 +LINE + 5 +1C3D + 8 +0 + 62 + 0 + 10 +26787.499905 + 20 +21569.211314 + 30 +0.0 + 11 +26774.999905 + 21 +21590.861949 + 31 +0.0 + 0 +LINE + 5 +1C3E + 8 +0 + 62 + 0 + 10 +26749.999905 + 20 +21634.163219 + 30 +0.0 + 11 +26740.0 + 21 +21651.483563 + 31 +0.0 + 0 +LINE + 5 +1C3F + 8 +0 + 62 + 0 + 10 +26449.999905 + 20 +22153.778462 + 30 +0.0 + 11 +26437.499905 + 21 +22175.429097 + 31 +0.0 + 0 +LINE + 5 +1C40 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +21556.220769 + 30 +0.0 + 11 +26812.499905 + 21 +21569.211314 + 31 +0.0 + 0 +LINE + 5 +1C41 + 8 +0 + 62 + 0 + 10 +26787.499905 + 20 +21612.512584 + 30 +0.0 + 11 +26774.999905 + 21 +21634.163219 + 31 +0.0 + 0 +LINE + 5 +1C42 + 8 +0 + 62 + 0 + 10 +26749.999905 + 20 +21677.46449 + 30 +0.0 + 11 +26740.0 + 21 +21694.784833 + 31 +0.0 + 0 +LINE + 5 +1C43 + 8 +0 + 62 + 0 + 10 +26487.499905 + 20 +22132.127827 + 30 +0.0 + 11 +26474.999905 + 21 +22153.778462 + 31 +0.0 + 0 +LINE + 5 +1C44 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +21599.522039 + 30 +0.0 + 11 +26812.499905 + 21 +21612.512584 + 31 +0.0 + 0 +LINE + 5 +1C45 + 8 +0 + 62 + 0 + 10 +26787.499905 + 20 +21655.813854 + 30 +0.0 + 11 +26774.999905 + 21 +21677.46449 + 31 +0.0 + 0 +LINE + 5 +1C46 + 8 +0 + 62 + 0 + 10 +26749.999905 + 20 +21720.76576 + 30 +0.0 + 11 +26740.0 + 21 +21738.086103 + 31 +0.0 + 0 +LINE + 5 +1C47 + 8 +0 + 62 + 0 + 10 +26522.38866 + 20 +22115.0 + 30 +0.0 + 11 +26512.499905 + 21 +22132.127827 + 31 +0.0 + 0 +LINE + 5 +1C48 + 8 +0 + 62 + 0 + 10 +26487.499905 + 20 +22175.429097 + 30 +0.0 + 11 +26476.200639 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1C49 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +21642.823309 + 30 +0.0 + 11 +26812.499905 + 21 +21655.813854 + 31 +0.0 + 0 +LINE + 5 +1C4A + 8 +0 + 62 + 0 + 10 +26787.499905 + 20 +21699.115125 + 30 +0.0 + 11 +26774.999905 + 21 +21720.76576 + 31 +0.0 + 0 +LINE + 5 +1C4B + 8 +0 + 62 + 0 + 10 +26749.999905 + 20 +21764.06703 + 30 +0.0 + 11 +26740.0 + 21 +21781.387373 + 31 +0.0 + 0 +LINE + 5 +1C4C + 8 +0 + 62 + 0 + 10 +26524.999905 + 20 +22153.778462 + 30 +0.0 + 11 +26512.499905 + 21 +22175.429097 + 31 +0.0 + 0 +LINE + 5 +1C4D + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +21686.124579 + 30 +0.0 + 11 +26812.499905 + 21 +21699.115125 + 31 +0.0 + 0 +LINE + 5 +1C4E + 8 +0 + 62 + 0 + 10 +26787.499905 + 20 +21742.416395 + 30 +0.0 + 11 +26774.999905 + 21 +21764.06703 + 31 +0.0 + 0 +LINE + 5 +1C4F + 8 +0 + 62 + 0 + 10 +26749.999905 + 20 +21807.3683 + 30 +0.0 + 11 +26740.0 + 21 +21824.688643 + 31 +0.0 + 0 +LINE + 5 +1C50 + 8 +0 + 62 + 0 + 10 +26562.499905 + 20 +22132.127826 + 30 +0.0 + 11 +26549.999905 + 21 +22153.778462 + 31 +0.0 + 0 +LINE + 5 +1C51 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +21729.425849 + 30 +0.0 + 11 +26812.499905 + 21 +21742.416395 + 31 +0.0 + 0 +LINE + 5 +1C52 + 8 +0 + 62 + 0 + 10 +26787.499905 + 20 +21785.717665 + 30 +0.0 + 11 +26774.999905 + 21 +21807.3683 + 31 +0.0 + 0 +LINE + 5 +1C53 + 8 +0 + 62 + 0 + 10 +26749.999905 + 20 +21850.66957 + 30 +0.0 + 11 +26740.0 + 21 +21867.989913 + 31 +0.0 + 0 +LINE + 5 +1C54 + 8 +0 + 62 + 0 + 10 +26597.38866 + 20 +22115.0 + 30 +0.0 + 11 +26587.499905 + 21 +22132.127826 + 31 +0.0 + 0 +LINE + 5 +1C55 + 8 +0 + 62 + 0 + 10 +26562.499905 + 20 +22175.429097 + 30 +0.0 + 11 +26551.200639 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1C56 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +21772.727119 + 30 +0.0 + 11 +26812.499905 + 21 +21785.717665 + 31 +0.0 + 0 +LINE + 5 +1C57 + 8 +0 + 62 + 0 + 10 +26787.499905 + 20 +21829.018935 + 30 +0.0 + 11 +26774.999905 + 21 +21850.66957 + 31 +0.0 + 0 +LINE + 5 +1C58 + 8 +0 + 62 + 0 + 10 +26749.999905 + 20 +21893.97084 + 30 +0.0 + 11 +26740.0 + 21 +21911.291183 + 31 +0.0 + 0 +LINE + 5 +1C59 + 8 +0 + 62 + 0 + 10 +26599.999905 + 20 +22153.778461 + 30 +0.0 + 11 +26587.499905 + 21 +22175.429097 + 31 +0.0 + 0 +LINE + 5 +1C5A + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +21816.028389 + 30 +0.0 + 11 +26812.499905 + 21 +21829.018935 + 31 +0.0 + 0 +LINE + 5 +1C5B + 8 +0 + 62 + 0 + 10 +26787.499905 + 20 +21872.320205 + 30 +0.0 + 11 +26774.999905 + 21 +21893.97084 + 31 +0.0 + 0 +LINE + 5 +1C5C + 8 +0 + 62 + 0 + 10 +26749.999905 + 20 +21937.27211 + 30 +0.0 + 11 +26740.0 + 21 +21954.592453 + 31 +0.0 + 0 +LINE + 5 +1C5D + 8 +0 + 62 + 0 + 10 +26637.499905 + 20 +22132.127826 + 30 +0.0 + 11 +26624.999905 + 21 +22153.778461 + 31 +0.0 + 0 +LINE + 5 +1C5E + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +21859.329659 + 30 +0.0 + 11 +26812.499905 + 21 +21872.320205 + 31 +0.0 + 0 +LINE + 5 +1C5F + 8 +0 + 62 + 0 + 10 +26787.499905 + 20 +21915.621475 + 30 +0.0 + 11 +26774.999905 + 21 +21937.27211 + 31 +0.0 + 0 +LINE + 5 +1C60 + 8 +0 + 62 + 0 + 10 +26749.999905 + 20 +21980.573381 + 30 +0.0 + 11 +26740.0 + 21 +21997.893723 + 31 +0.0 + 0 +LINE + 5 +1C61 + 8 +0 + 62 + 0 + 10 +26672.38866 + 20 +22115.0 + 30 +0.0 + 11 +26662.499905 + 21 +22132.127826 + 31 +0.0 + 0 +LINE + 5 +1C62 + 8 +0 + 62 + 0 + 10 +26637.499905 + 20 +22175.429096 + 30 +0.0 + 11 +26626.200638 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1C63 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +21902.630929 + 30 +0.0 + 11 +26812.499905 + 21 +21915.621475 + 31 +0.0 + 0 +LINE + 5 +1C64 + 8 +0 + 62 + 0 + 10 +26787.499905 + 20 +21958.922745 + 30 +0.0 + 11 +26774.999905 + 21 +21980.573381 + 31 +0.0 + 0 +LINE + 5 +1C65 + 8 +0 + 62 + 0 + 10 +26749.999905 + 20 +22023.874651 + 30 +0.0 + 11 +26740.0 + 21 +22041.194993 + 31 +0.0 + 0 +LINE + 5 +1C66 + 8 +0 + 62 + 0 + 10 +26674.999905 + 20 +22153.778461 + 30 +0.0 + 11 +26662.499905 + 21 +22175.429096 + 31 +0.0 + 0 +LINE + 5 +1C67 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +21945.932199 + 30 +0.0 + 11 +26812.499904 + 21 +21958.922745 + 31 +0.0 + 0 +LINE + 5 +1C68 + 8 +0 + 62 + 0 + 10 +26787.499904 + 20 +22002.224016 + 30 +0.0 + 11 +26774.999904 + 21 +22023.874651 + 31 +0.0 + 0 +LINE + 5 +1C69 + 8 +0 + 62 + 0 + 10 +26749.999904 + 20 +22067.175921 + 30 +0.0 + 11 +26740.0 + 21 +22084.496263 + 31 +0.0 + 0 +LINE + 5 +1C6A + 8 +0 + 62 + 0 + 10 +26712.499904 + 20 +22132.127826 + 30 +0.0 + 11 +26699.999904 + 21 +22153.778461 + 31 +0.0 + 0 +LINE + 5 +1C6B + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +21989.233469 + 30 +0.0 + 11 +26812.499904 + 21 +22002.224016 + 31 +0.0 + 0 +LINE + 5 +1C6C + 8 +0 + 62 + 0 + 10 +26787.499904 + 20 +22045.525286 + 30 +0.0 + 11 +26774.999904 + 21 +22067.175921 + 31 +0.0 + 0 +LINE + 5 +1C6D + 8 +0 + 62 + 0 + 10 +26749.999904 + 20 +22110.477191 + 30 +0.0 + 11 +26737.499904 + 21 +22132.127826 + 31 +0.0 + 0 +LINE + 5 +1C6E + 8 +0 + 62 + 0 + 10 +26712.499904 + 20 +22175.429096 + 30 +0.0 + 11 +26701.200638 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1C6F + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +22032.534739 + 30 +0.0 + 11 +26812.499904 + 21 +22045.525286 + 31 +0.0 + 0 +LINE + 5 +1C70 + 8 +0 + 62 + 0 + 10 +26787.499904 + 20 +22088.826556 + 30 +0.0 + 11 +26774.999904 + 21 +22110.477191 + 31 +0.0 + 0 +LINE + 5 +1C71 + 8 +0 + 62 + 0 + 10 +26749.999904 + 20 +22153.778461 + 30 +0.0 + 11 +26737.499904 + 21 +22175.429096 + 31 +0.0 + 0 +LINE + 5 +1C72 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +22075.836009 + 30 +0.0 + 11 +26812.499904 + 21 +22088.826556 + 31 +0.0 + 0 +LINE + 5 +1C73 + 8 +0 + 62 + 0 + 10 +26787.499904 + 20 +22132.127826 + 30 +0.0 + 11 +26774.999904 + 21 +22153.778461 + 31 +0.0 + 0 +LINE + 5 +1C74 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +22119.137279 + 30 +0.0 + 11 +26812.499904 + 21 +22132.127826 + 31 +0.0 + 0 +LINE + 5 +1C75 + 8 +0 + 62 + 0 + 10 +26787.499904 + 20 +22175.429096 + 30 +0.0 + 11 +26776.200638 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1C76 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +22162.438549 + 30 +0.0 + 11 +26812.499904 + 21 +22175.429096 + 31 +0.0 + 0 +LINE + 5 +1C77 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +21530.240337 + 30 +0.0 + 11 +26749.999952 + 21 +21547.560761 + 31 +0.0 + 0 +LINE + 5 +1C78 + 8 +0 + 62 + 0 + 10 +26774.999952 + 20 +21590.862032 + 30 +0.0 + 11 +26787.499952 + 21 +21612.512667 + 31 +0.0 + 0 +LINE + 5 +1C79 + 8 +0 + 62 + 0 + 10 +26812.499952 + 20 +21655.813937 + 30 +0.0 + 11 +26820.0 + 21 +21668.804401 + 31 +0.0 + 0 +LINE + 5 +1C7A + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +21573.541607 + 30 +0.0 + 11 +26749.999952 + 21 +21590.862032 + 31 +0.0 + 0 +LINE + 5 +1C7B + 8 +0 + 62 + 0 + 10 +26774.999952 + 20 +21634.163302 + 30 +0.0 + 11 +26787.499952 + 21 +21655.813937 + 31 +0.0 + 0 +LINE + 5 +1C7C + 8 +0 + 62 + 0 + 10 +26812.499952 + 20 +21699.115207 + 30 +0.0 + 11 +26820.0 + 21 +21712.105671 + 31 +0.0 + 0 +LINE + 5 +1C7D + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +21616.842877 + 30 +0.0 + 11 +26749.999952 + 21 +21634.163302 + 31 +0.0 + 0 +LINE + 5 +1C7E + 8 +0 + 62 + 0 + 10 +26774.999952 + 20 +21677.464572 + 30 +0.0 + 11 +26787.499952 + 21 +21699.115207 + 31 +0.0 + 0 +LINE + 5 +1C7F + 8 +0 + 62 + 0 + 10 +26812.499952 + 20 +21742.416477 + 30 +0.0 + 11 +26820.0 + 21 +21755.406941 + 31 +0.0 + 0 +LINE + 5 +1C80 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +21660.144147 + 30 +0.0 + 11 +26749.999952 + 21 +21677.464572 + 31 +0.0 + 0 +LINE + 5 +1C81 + 8 +0 + 62 + 0 + 10 +26774.999952 + 20 +21720.765842 + 30 +0.0 + 11 +26787.499952 + 21 +21742.416477 + 31 +0.0 + 0 +LINE + 5 +1C82 + 8 +0 + 62 + 0 + 10 +26812.499952 + 20 +21785.717747 + 30 +0.0 + 11 +26820.0 + 21 +21798.708211 + 31 +0.0 + 0 +LINE + 5 +1C83 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +21703.445417 + 30 +0.0 + 11 +26749.999952 + 21 +21720.765842 + 31 +0.0 + 0 +LINE + 5 +1C84 + 8 +0 + 62 + 0 + 10 +26774.999952 + 20 +21764.067112 + 30 +0.0 + 11 +26787.499952 + 21 +21785.717747 + 31 +0.0 + 0 +LINE + 5 +1C85 + 8 +0 + 62 + 0 + 10 +26812.499952 + 20 +21829.019018 + 30 +0.0 + 11 +26820.0 + 21 +21842.009481 + 31 +0.0 + 0 +LINE + 5 +1C86 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +21746.746687 + 30 +0.0 + 11 +26749.999952 + 21 +21764.067112 + 31 +0.0 + 0 +LINE + 5 +1C87 + 8 +0 + 62 + 0 + 10 +26774.999952 + 20 +21807.368382 + 30 +0.0 + 11 +26787.499952 + 21 +21829.019017 + 31 +0.0 + 0 +LINE + 5 +1C88 + 8 +0 + 62 + 0 + 10 +26812.499952 + 20 +21872.320288 + 30 +0.0 + 11 +26820.0 + 21 +21885.310751 + 31 +0.0 + 0 +LINE + 5 +1C89 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +21790.047957 + 30 +0.0 + 11 +26749.999952 + 21 +21807.368382 + 31 +0.0 + 0 +LINE + 5 +1C8A + 8 +0 + 62 + 0 + 10 +26774.999952 + 20 +21850.669653 + 30 +0.0 + 11 +26787.499952 + 21 +21872.320288 + 31 +0.0 + 0 +LINE + 5 +1C8B + 8 +0 + 62 + 0 + 10 +26812.499952 + 20 +21915.621558 + 30 +0.0 + 11 +26820.0 + 21 +21928.612021 + 31 +0.0 + 0 +LINE + 5 +1C8C + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +21833.349227 + 30 +0.0 + 11 +26749.999953 + 21 +21850.669652 + 31 +0.0 + 0 +LINE + 5 +1C8D + 8 +0 + 62 + 0 + 10 +26774.999953 + 20 +21893.970923 + 30 +0.0 + 11 +26787.499953 + 21 +21915.621558 + 31 +0.0 + 0 +LINE + 5 +1C8E + 8 +0 + 62 + 0 + 10 +26812.499953 + 20 +21958.922828 + 30 +0.0 + 11 +26820.0 + 21 +21971.913291 + 31 +0.0 + 0 +LINE + 5 +1C8F + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +21876.650497 + 30 +0.0 + 11 +26749.999953 + 21 +21893.970923 + 31 +0.0 + 0 +LINE + 5 +1C90 + 8 +0 + 62 + 0 + 10 +26774.999953 + 20 +21937.272193 + 30 +0.0 + 11 +26787.499953 + 21 +21958.922828 + 31 +0.0 + 0 +LINE + 5 +1C91 + 8 +0 + 62 + 0 + 10 +26812.499953 + 20 +22002.224098 + 30 +0.0 + 11 +26820.0 + 21 +22015.214561 + 31 +0.0 + 0 +LINE + 5 +1C92 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +21919.951767 + 30 +0.0 + 11 +26749.999953 + 21 +21937.272193 + 31 +0.0 + 0 +LINE + 5 +1C93 + 8 +0 + 62 + 0 + 10 +26774.999953 + 20 +21980.573463 + 30 +0.0 + 11 +26787.499953 + 21 +22002.224098 + 31 +0.0 + 0 +LINE + 5 +1C94 + 8 +0 + 62 + 0 + 10 +26812.499953 + 20 +22045.525368 + 30 +0.0 + 11 +26820.0 + 21 +22058.515831 + 31 +0.0 + 0 +LINE + 5 +1C95 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +21963.253037 + 30 +0.0 + 11 +26749.999953 + 21 +21980.573463 + 31 +0.0 + 0 +LINE + 5 +1C96 + 8 +0 + 62 + 0 + 10 +26774.999953 + 20 +22023.874733 + 30 +0.0 + 11 +26787.499953 + 21 +22045.525368 + 31 +0.0 + 0 +LINE + 5 +1C97 + 8 +0 + 62 + 0 + 10 +26812.499953 + 20 +22088.826638 + 30 +0.0 + 11 +26820.0 + 21 +22101.817101 + 31 +0.0 + 0 +LINE + 5 +1C98 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +22006.554307 + 30 +0.0 + 11 +26749.999953 + 21 +22023.874733 + 31 +0.0 + 0 +LINE + 5 +1C99 + 8 +0 + 62 + 0 + 10 +26774.999953 + 20 +22067.176003 + 30 +0.0 + 11 +26787.499953 + 21 +22088.826638 + 31 +0.0 + 0 +LINE + 5 +1C9A + 8 +0 + 62 + 0 + 10 +26812.499953 + 20 +22132.127908 + 30 +0.0 + 11 +26820.0 + 21 +22145.118371 + 31 +0.0 + 0 +LINE + 5 +1C9B + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +22049.855577 + 30 +0.0 + 11 +26749.999953 + 21 +22067.176003 + 31 +0.0 + 0 +LINE + 5 +1C9C + 8 +0 + 62 + 0 + 10 +26774.999953 + 20 +22110.477273 + 30 +0.0 + 11 +26787.499953 + 21 +22132.127908 + 31 +0.0 + 0 +LINE + 5 +1C9D + 8 +0 + 62 + 0 + 10 +26812.499953 + 20 +22175.429179 + 30 +0.0 + 11 +26820.0 + 21 +22188.419641 + 31 +0.0 + 0 +LINE + 5 +1C9E + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +22093.156847 + 30 +0.0 + 11 +26749.999953 + 21 +22110.477273 + 31 +0.0 + 0 +LINE + 5 +1C9F + 8 +0 + 62 + 0 + 10 +26774.999953 + 20 +22153.778543 + 30 +0.0 + 11 +26787.499953 + 21 +22175.429179 + 31 +0.0 + 0 +LINE + 5 +1CA0 + 8 +0 + 62 + 0 + 10 +26737.499953 + 20 +22132.127908 + 30 +0.0 + 11 +26749.999953 + 21 +22153.778543 + 31 +0.0 + 0 +LINE + 5 +1CA1 + 8 +0 + 62 + 0 + 10 +26702.611151 + 20 +22115.0 + 30 +0.0 + 11 +26712.499953 + 21 +22132.127908 + 31 +0.0 + 0 +LINE + 5 +1CA2 + 8 +0 + 62 + 0 + 10 +26737.499953 + 20 +22175.429178 + 30 +0.0 + 11 +26748.799172 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1CA3 + 8 +0 + 62 + 0 + 10 +26699.999953 + 20 +22153.778543 + 30 +0.0 + 11 +26712.499953 + 21 +22175.429178 + 31 +0.0 + 0 +LINE + 5 +1CA4 + 8 +0 + 62 + 0 + 10 +26662.499953 + 20 +22132.127908 + 30 +0.0 + 11 +26674.999953 + 21 +22153.778543 + 31 +0.0 + 0 +LINE + 5 +1CA5 + 8 +0 + 62 + 0 + 10 +26627.611151 + 20 +22115.0 + 30 +0.0 + 11 +26637.499953 + 21 +22132.127908 + 31 +0.0 + 0 +LINE + 5 +1CA6 + 8 +0 + 62 + 0 + 10 +26662.499953 + 20 +22175.429178 + 30 +0.0 + 11 +26673.799173 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1CA7 + 8 +0 + 62 + 0 + 10 +26624.999954 + 20 +22153.778543 + 30 +0.0 + 11 +26637.499954 + 21 +22175.429178 + 31 +0.0 + 0 +LINE + 5 +1CA8 + 8 +0 + 62 + 0 + 10 +26587.499954 + 20 +22132.127908 + 30 +0.0 + 11 +26599.999954 + 21 +22153.778543 + 31 +0.0 + 0 +LINE + 5 +1CA9 + 8 +0 + 62 + 0 + 10 +26552.611151 + 20 +22115.0 + 30 +0.0 + 11 +26562.499954 + 21 +22132.127908 + 31 +0.0 + 0 +LINE + 5 +1CAA + 8 +0 + 62 + 0 + 10 +26587.499954 + 20 +22175.429178 + 30 +0.0 + 11 +26598.799173 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1CAB + 8 +0 + 62 + 0 + 10 +26549.999954 + 20 +22153.778543 + 30 +0.0 + 11 +26562.499954 + 21 +22175.429178 + 31 +0.0 + 0 +LINE + 5 +1CAC + 8 +0 + 62 + 0 + 10 +26512.499954 + 20 +22132.127908 + 30 +0.0 + 11 +26524.999954 + 21 +22153.778543 + 31 +0.0 + 0 +LINE + 5 +1CAD + 8 +0 + 62 + 0 + 10 +26477.611152 + 20 +22115.0 + 30 +0.0 + 11 +26487.499954 + 21 +22132.127908 + 31 +0.0 + 0 +LINE + 5 +1CAE + 8 +0 + 62 + 0 + 10 +26512.499954 + 20 +22175.429178 + 30 +0.0 + 11 +26523.799173 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1CAF + 8 +0 + 62 + 0 + 10 +26474.999954 + 20 +22153.778543 + 30 +0.0 + 11 +26487.499954 + 21 +22175.429178 + 31 +0.0 + 0 +LINE + 5 +1CB0 + 8 +0 + 62 + 0 + 10 +26437.499954 + 20 +22132.127908 + 30 +0.0 + 11 +26449.999954 + 21 +22153.778543 + 31 +0.0 + 0 +LINE + 5 +1CB1 + 8 +0 + 62 + 0 + 10 +26402.611152 + 20 +22115.0 + 30 +0.0 + 11 +26412.499954 + 21 +22132.127908 + 31 +0.0 + 0 +LINE + 5 +1CB2 + 8 +0 + 62 + 0 + 10 +26437.499954 + 20 +22175.429178 + 30 +0.0 + 11 +26448.799174 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1CB3 + 8 +0 + 62 + 0 + 10 +26399.999954 + 20 +22153.778543 + 30 +0.0 + 11 +26412.499954 + 21 +22175.429178 + 31 +0.0 + 0 +LINE + 5 +1CB4 + 8 +0 + 62 + 0 + 10 +26362.499954 + 20 +22132.127908 + 30 +0.0 + 11 +26374.999954 + 21 +22153.778543 + 31 +0.0 + 0 +LINE + 5 +1CB5 + 8 +0 + 62 + 0 + 10 +26327.611152 + 20 +22115.0 + 30 +0.0 + 11 +26337.499954 + 21 +22132.127908 + 31 +0.0 + 0 +LINE + 5 +1CB6 + 8 +0 + 62 + 0 + 10 +26362.499954 + 20 +22175.429178 + 30 +0.0 + 11 +26373.799174 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1CB7 + 8 +0 + 62 + 0 + 10 +26324.999955 + 20 +22153.778543 + 30 +0.0 + 11 +26337.499955 + 21 +22175.429178 + 31 +0.0 + 0 +LINE + 5 +1CB8 + 8 +0 + 62 + 0 + 10 +26287.499955 + 20 +22132.127908 + 30 +0.0 + 11 +26299.999955 + 21 +22153.778543 + 31 +0.0 + 0 +LINE + 5 +1CB9 + 8 +0 + 62 + 0 + 10 +26252.611153 + 20 +22115.0 + 30 +0.0 + 11 +26262.499955 + 21 +22132.127907 + 31 +0.0 + 0 +LINE + 5 +1CBA + 8 +0 + 62 + 0 + 10 +26287.499955 + 20 +22175.429178 + 30 +0.0 + 11 +26298.799174 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1CBB + 8 +0 + 62 + 0 + 10 +26249.999955 + 20 +22153.778543 + 30 +0.0 + 11 +26262.499955 + 21 +22175.429178 + 31 +0.0 + 0 +LINE + 5 +1CBC + 8 +0 + 62 + 0 + 10 +26212.499955 + 20 +22132.127907 + 30 +0.0 + 11 +26224.999955 + 21 +22153.778542 + 31 +0.0 + 0 +LINE + 5 +1CBD + 8 +0 + 62 + 0 + 10 +26177.611153 + 20 +22115.0 + 30 +0.0 + 11 +26187.499955 + 21 +22132.127907 + 31 +0.0 + 0 +LINE + 5 +1CBE + 8 +0 + 62 + 0 + 10 +26212.499955 + 20 +22175.429178 + 30 +0.0 + 11 +26223.799175 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1CBF + 8 +0 + 62 + 0 + 10 +26174.999955 + 20 +22153.778542 + 30 +0.0 + 11 +26187.499955 + 21 +22175.429177 + 31 +0.0 + 0 +LINE + 5 +1CC0 + 8 +0 + 62 + 0 + 10 +26137.499955 + 20 +22132.127907 + 30 +0.0 + 11 +26149.999955 + 21 +22153.778542 + 31 +0.0 + 0 +LINE + 5 +1CC1 + 8 +0 + 62 + 0 + 10 +26102.611153 + 20 +22115.0 + 30 +0.0 + 11 +26112.499955 + 21 +22132.127907 + 31 +0.0 + 0 +LINE + 5 +1CC2 + 8 +0 + 62 + 0 + 10 +26137.499955 + 20 +22175.429177 + 30 +0.0 + 11 +26148.799175 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1CC3 + 8 +0 + 62 + 0 + 10 +26099.999955 + 20 +22153.778542 + 30 +0.0 + 11 +26112.499955 + 21 +22175.429177 + 31 +0.0 + 0 +LINE + 5 +1CC4 + 8 +0 + 62 + 0 + 10 +26062.499955 + 20 +22132.127907 + 30 +0.0 + 11 +26074.999955 + 21 +22153.778542 + 31 +0.0 + 0 +LINE + 5 +1CC5 + 8 +0 + 62 + 0 + 10 +26027.611154 + 20 +22115.0 + 30 +0.0 + 11 +26037.499955 + 21 +22132.127907 + 31 +0.0 + 0 +LINE + 5 +1CC6 + 8 +0 + 62 + 0 + 10 +26062.499955 + 20 +22175.429177 + 30 +0.0 + 11 +26073.799175 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1CC7 + 8 +0 + 62 + 0 + 10 +26024.999956 + 20 +22153.778542 + 30 +0.0 + 11 +26037.499956 + 21 +22175.429177 + 31 +0.0 + 0 +LINE + 5 +1CC8 + 8 +0 + 62 + 0 + 10 +25987.499956 + 20 +22132.127907 + 30 +0.0 + 11 +25999.999956 + 21 +22153.778542 + 31 +0.0 + 0 +LINE + 5 +1CC9 + 8 +0 + 62 + 0 + 10 +25952.611154 + 20 +22115.0 + 30 +0.0 + 11 +25962.499956 + 21 +22132.127907 + 31 +0.0 + 0 +LINE + 5 +1CCA + 8 +0 + 62 + 0 + 10 +25987.499956 + 20 +22175.429177 + 30 +0.0 + 11 +25998.799176 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1CCB + 8 +0 + 62 + 0 + 10 +25949.999956 + 20 +22153.778542 + 30 +0.0 + 11 +25962.499956 + 21 +22175.429177 + 31 +0.0 + 0 +LINE + 5 +1CCC + 8 +0 + 62 + 0 + 10 +25912.499956 + 20 +22132.127907 + 30 +0.0 + 11 +25924.999956 + 21 +22153.778542 + 31 +0.0 + 0 +LINE + 5 +1CCD + 8 +0 + 62 + 0 + 10 +25877.611154 + 20 +22115.0 + 30 +0.0 + 11 +25887.499956 + 21 +22132.127907 + 31 +0.0 + 0 +LINE + 5 +1CCE + 8 +0 + 62 + 0 + 10 +25912.499956 + 20 +22175.429177 + 30 +0.0 + 11 +25923.799176 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1CCF + 8 +0 + 62 + 0 + 10 +25874.999956 + 20 +22153.778542 + 30 +0.0 + 11 +25887.499956 + 21 +22175.429177 + 31 +0.0 + 0 +LINE + 5 +1CD0 + 8 +0 + 62 + 0 + 10 +25837.499956 + 20 +22132.127907 + 30 +0.0 + 11 +25849.999956 + 21 +22153.778542 + 31 +0.0 + 0 +LINE + 5 +1CD1 + 8 +0 + 62 + 0 + 10 +25802.611155 + 20 +22115.0 + 30 +0.0 + 11 +25812.499956 + 21 +22132.127907 + 31 +0.0 + 0 +LINE + 5 +1CD2 + 8 +0 + 62 + 0 + 10 +25837.499956 + 20 +22175.429177 + 30 +0.0 + 11 +25848.799176 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1CD3 + 8 +0 + 62 + 0 + 10 +25799.999956 + 20 +22153.778542 + 30 +0.0 + 11 +25812.499956 + 21 +22175.429177 + 31 +0.0 + 0 +LINE + 5 +1CD4 + 8 +0 + 62 + 0 + 10 +25762.499956 + 20 +22132.127907 + 30 +0.0 + 11 +25774.999956 + 21 +22153.778542 + 31 +0.0 + 0 +LINE + 5 +1CD5 + 8 +0 + 62 + 0 + 10 +25727.611155 + 20 +22115.0 + 30 +0.0 + 11 +25737.499956 + 21 +22132.127906 + 31 +0.0 + 0 +LINE + 5 +1CD6 + 8 +0 + 62 + 0 + 10 +25762.499956 + 20 +22175.429177 + 30 +0.0 + 11 +25773.799177 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1CD7 + 8 +0 + 62 + 0 + 10 +25724.999956 + 20 +22153.778542 + 30 +0.0 + 11 +25737.499956 + 21 +22175.429177 + 31 +0.0 + 0 +LINE + 5 +1CD8 + 8 +0 + 62 + 0 + 10 +25687.499957 + 20 +22132.127906 + 30 +0.0 + 11 +25699.999957 + 21 +22153.778541 + 31 +0.0 + 0 +LINE + 5 +1CD9 + 8 +0 + 62 + 0 + 10 +25652.611155 + 20 +22115.0 + 30 +0.0 + 11 +25662.499957 + 21 +22132.127906 + 31 +0.0 + 0 +LINE + 5 +1CDA + 8 +0 + 62 + 0 + 10 +25687.499957 + 20 +22175.429177 + 30 +0.0 + 11 +25698.799177 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1CDB + 8 +0 + 62 + 0 + 10 +25649.999957 + 20 +22153.778541 + 30 +0.0 + 11 +25662.499957 + 21 +22175.429176 + 31 +0.0 + 0 +LINE + 5 +1CDC + 8 +0 + 62 + 0 + 10 +25612.499957 + 20 +22132.127906 + 30 +0.0 + 11 +25624.999957 + 21 +22153.778541 + 31 +0.0 + 0 +LINE + 5 +1CDD + 8 +0 + 62 + 0 + 10 +25577.611156 + 20 +22115.0 + 30 +0.0 + 11 +25587.499957 + 21 +22132.127906 + 31 +0.0 + 0 +LINE + 5 +1CDE + 8 +0 + 62 + 0 + 10 +25612.499957 + 20 +22175.429176 + 30 +0.0 + 11 +25623.799177 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1CDF + 8 +0 + 62 + 0 + 10 +25574.999957 + 20 +22153.778541 + 30 +0.0 + 11 +25587.499957 + 21 +22175.429176 + 31 +0.0 + 0 +LINE + 5 +1CE0 + 8 +0 + 62 + 0 + 10 +25537.499957 + 20 +22132.127906 + 30 +0.0 + 11 +25549.999957 + 21 +22153.778541 + 31 +0.0 + 0 +LINE + 5 +1CE1 + 8 +0 + 62 + 0 + 10 +25502.611156 + 20 +22115.0 + 30 +0.0 + 11 +25512.499957 + 21 +22132.127906 + 31 +0.0 + 0 +LINE + 5 +1CE2 + 8 +0 + 62 + 0 + 10 +25537.499957 + 20 +22175.429176 + 30 +0.0 + 11 +25548.799178 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1CE3 + 8 +0 + 62 + 0 + 10 +25499.999957 + 20 +22153.778541 + 30 +0.0 + 11 +25512.499957 + 21 +22175.429176 + 31 +0.0 + 0 +LINE + 5 +1CE4 + 8 +0 + 62 + 0 + 10 +25462.499957 + 20 +22132.127906 + 30 +0.0 + 11 +25474.999957 + 21 +22153.778541 + 31 +0.0 + 0 +LINE + 5 +1CE5 + 8 +0 + 62 + 0 + 10 +25427.611156 + 20 +22115.0 + 30 +0.0 + 11 +25437.499957 + 21 +22132.127906 + 31 +0.0 + 0 +LINE + 5 +1CE6 + 8 +0 + 62 + 0 + 10 +25462.499957 + 20 +22175.429176 + 30 +0.0 + 11 +25473.799178 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1CE7 + 8 +0 + 62 + 0 + 10 +25424.999957 + 20 +22153.778541 + 30 +0.0 + 11 +25437.499957 + 21 +22175.429176 + 31 +0.0 + 0 +LINE + 5 +1CE8 + 8 +0 + 62 + 0 + 10 +25387.499958 + 20 +22132.127906 + 30 +0.0 + 11 +25399.999958 + 21 +22153.778541 + 31 +0.0 + 0 +LINE + 5 +1CE9 + 8 +0 + 62 + 0 + 10 +25352.611157 + 20 +22115.0 + 30 +0.0 + 11 +25362.499958 + 21 +22132.127906 + 31 +0.0 + 0 +LINE + 5 +1CEA + 8 +0 + 62 + 0 + 10 +25387.499958 + 20 +22175.429176 + 30 +0.0 + 11 +25398.799178 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1CEB + 8 +0 + 62 + 0 + 10 +25349.999958 + 20 +22153.778541 + 30 +0.0 + 11 +25362.499958 + 21 +22175.429176 + 31 +0.0 + 0 +LINE + 5 +1CEC + 8 +0 + 62 + 0 + 10 +25312.499958 + 20 +22132.127906 + 30 +0.0 + 11 +25324.999958 + 21 +22153.778541 + 31 +0.0 + 0 +LINE + 5 +1CED + 8 +0 + 62 + 0 + 10 +25277.611157 + 20 +22115.0 + 30 +0.0 + 11 +25287.499958 + 21 +22132.127906 + 31 +0.0 + 0 +LINE + 5 +1CEE + 8 +0 + 62 + 0 + 10 +25312.499958 + 20 +22175.429176 + 30 +0.0 + 11 +25323.799179 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1CEF + 8 +0 + 62 + 0 + 10 +25274.999958 + 20 +22153.778541 + 30 +0.0 + 11 +25287.499958 + 21 +22175.429176 + 31 +0.0 + 0 +LINE + 5 +1CF0 + 8 +0 + 62 + 0 + 10 +25238.75 + 20 +22134.293042 + 30 +0.0 + 11 +25249.999958 + 21 +22153.778541 + 31 +0.0 + 0 +LINE + 5 +1CF1 + 8 +0 + 62 + 0 + 10 +25238.75 + 20 +22177.594312 + 30 +0.0 + 11 +25248.799179 + 21 +22195.0 + 31 +0.0 + 0 +LINE + 5 +1CF2 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +21486.939067 + 30 +0.0 + 11 +26749.999952 + 21 +21504.259491 + 31 +0.0 + 0 +LINE + 5 +1CF3 + 8 +0 + 62 + 0 + 10 +26774.999952 + 20 +21547.560762 + 30 +0.0 + 11 +26787.499952 + 21 +21569.211397 + 31 +0.0 + 0 +LINE + 5 +1CF4 + 8 +0 + 62 + 0 + 10 +26812.499952 + 20 +21612.512667 + 30 +0.0 + 11 +26820.0 + 21 +21625.503131 + 31 +0.0 + 0 +LINE + 5 +1CF5 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +21443.637797 + 30 +0.0 + 11 +26749.999952 + 21 +21460.958221 + 31 +0.0 + 0 +LINE + 5 +1CF6 + 8 +0 + 62 + 0 + 10 +26774.999952 + 20 +21504.259491 + 30 +0.0 + 11 +26787.499952 + 21 +21525.910126 + 31 +0.0 + 0 +LINE + 5 +1CF7 + 8 +0 + 62 + 0 + 10 +26812.499952 + 20 +21569.211397 + 30 +0.0 + 11 +26820.0 + 21 +21582.201861 + 31 +0.0 + 0 +LINE + 5 +1CF8 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +21400.336527 + 30 +0.0 + 11 +26749.999952 + 21 +21417.656951 + 31 +0.0 + 0 +LINE + 5 +1CF9 + 8 +0 + 62 + 0 + 10 +26774.999952 + 20 +21460.958221 + 30 +0.0 + 11 +26787.499952 + 21 +21482.608856 + 31 +0.0 + 0 +LINE + 5 +1CFA + 8 +0 + 62 + 0 + 10 +26812.499952 + 20 +21525.910127 + 30 +0.0 + 11 +26820.0 + 21 +21538.900591 + 31 +0.0 + 0 +LINE + 5 +1CFB + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +21357.035257 + 30 +0.0 + 11 +26749.999952 + 21 +21374.355681 + 31 +0.0 + 0 +LINE + 5 +1CFC + 8 +0 + 62 + 0 + 10 +26774.999952 + 20 +21417.656951 + 30 +0.0 + 11 +26787.499952 + 21 +21439.307586 + 31 +0.0 + 0 +LINE + 5 +1CFD + 8 +0 + 62 + 0 + 10 +26812.499952 + 20 +21482.608856 + 30 +0.0 + 11 +26820.0 + 21 +21495.599321 + 31 +0.0 + 0 +LINE + 5 +1CFE + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +21313.733987 + 30 +0.0 + 11 +26749.999952 + 21 +21331.054411 + 31 +0.0 + 0 +LINE + 5 +1CFF + 8 +0 + 62 + 0 + 10 +26774.999952 + 20 +21374.355681 + 30 +0.0 + 11 +26787.499952 + 21 +21396.006316 + 31 +0.0 + 0 +LINE + 5 +1D00 + 8 +0 + 62 + 0 + 10 +26812.499952 + 20 +21439.307586 + 30 +0.0 + 11 +26820.0 + 21 +21452.298051 + 31 +0.0 + 0 +LINE + 5 +1D01 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +21270.432717 + 30 +0.0 + 11 +26749.999951 + 21 +21287.753141 + 31 +0.0 + 0 +LINE + 5 +1D02 + 8 +0 + 62 + 0 + 10 +26774.999951 + 20 +21331.054411 + 30 +0.0 + 11 +26787.499951 + 21 +21352.705046 + 31 +0.0 + 0 +LINE + 5 +1D03 + 8 +0 + 62 + 0 + 10 +26812.499951 + 20 +21396.006316 + 30 +0.0 + 11 +26820.0 + 21 +21408.996781 + 31 +0.0 + 0 +LINE + 5 +1D04 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +21227.131447 + 30 +0.0 + 11 +26749.999951 + 21 +21244.45187 + 31 +0.0 + 0 +LINE + 5 +1D05 + 8 +0 + 62 + 0 + 10 +26774.999951 + 20 +21287.753141 + 30 +0.0 + 11 +26787.499951 + 21 +21309.403776 + 31 +0.0 + 0 +LINE + 5 +1D06 + 8 +0 + 62 + 0 + 10 +26812.499951 + 20 +21352.705046 + 30 +0.0 + 11 +26820.0 + 21 +21365.695511 + 31 +0.0 + 0 +LINE + 5 +1D07 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +21183.830177 + 30 +0.0 + 11 +26749.999951 + 21 +21201.1506 + 31 +0.0 + 0 +LINE + 5 +1D08 + 8 +0 + 62 + 0 + 10 +26774.999951 + 20 +21244.451871 + 30 +0.0 + 11 +26787.499951 + 21 +21266.102506 + 31 +0.0 + 0 +LINE + 5 +1D09 + 8 +0 + 62 + 0 + 10 +26812.499951 + 20 +21309.403776 + 30 +0.0 + 11 +26820.0 + 21 +21322.394241 + 31 +0.0 + 0 +LINE + 5 +1D0A + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +21140.528907 + 30 +0.0 + 11 +26749.999951 + 21 +21157.84933 + 31 +0.0 + 0 +LINE + 5 +1D0B + 8 +0 + 62 + 0 + 10 +26774.999951 + 20 +21201.1506 + 30 +0.0 + 11 +26787.499951 + 21 +21222.801235 + 31 +0.0 + 0 +LINE + 5 +1D0C + 8 +0 + 62 + 0 + 10 +26812.499951 + 20 +21266.102506 + 30 +0.0 + 11 +26820.0 + 21 +21279.092971 + 31 +0.0 + 0 +LINE + 5 +1D0D + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +21097.227637 + 30 +0.0 + 11 +26749.999951 + 21 +21114.54806 + 31 +0.0 + 0 +LINE + 5 +1D0E + 8 +0 + 62 + 0 + 10 +26774.999951 + 20 +21157.84933 + 30 +0.0 + 11 +26787.499951 + 21 +21179.499965 + 31 +0.0 + 0 +LINE + 5 +1D0F + 8 +0 + 62 + 0 + 10 +26812.499951 + 20 +21222.801236 + 30 +0.0 + 11 +26820.0 + 21 +21235.791701 + 31 +0.0 + 0 +LINE + 5 +1D10 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +21053.926367 + 30 +0.0 + 11 +26749.999951 + 21 +21071.24679 + 31 +0.0 + 0 +LINE + 5 +1D11 + 8 +0 + 62 + 0 + 10 +26774.999951 + 20 +21114.54806 + 30 +0.0 + 11 +26787.499951 + 21 +21136.198695 + 31 +0.0 + 0 +LINE + 5 +1D12 + 8 +0 + 62 + 0 + 10 +26812.499951 + 20 +21179.499965 + 30 +0.0 + 11 +26820.0 + 21 +21192.490431 + 31 +0.0 + 0 +LINE + 5 +1D13 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +21010.625097 + 30 +0.0 + 11 +26749.999951 + 21 +21027.94552 + 31 +0.0 + 0 +LINE + 5 +1D14 + 8 +0 + 62 + 0 + 10 +26774.999951 + 20 +21071.24679 + 30 +0.0 + 11 +26787.499951 + 21 +21092.897425 + 31 +0.0 + 0 +LINE + 5 +1D15 + 8 +0 + 62 + 0 + 10 +26812.499951 + 20 +21136.198695 + 30 +0.0 + 11 +26820.0 + 21 +21149.189161 + 31 +0.0 + 0 +LINE + 5 +1D16 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +20967.323827 + 30 +0.0 + 11 +26749.999951 + 21 +20984.64425 + 31 +0.0 + 0 +LINE + 5 +1D17 + 8 +0 + 62 + 0 + 10 +26774.999951 + 20 +21027.94552 + 30 +0.0 + 11 +26787.499951 + 21 +21049.596155 + 31 +0.0 + 0 +LINE + 5 +1D18 + 8 +0 + 62 + 0 + 10 +26812.499951 + 20 +21092.897425 + 30 +0.0 + 11 +26820.0 + 21 +21105.887891 + 31 +0.0 + 0 +LINE + 5 +1D19 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +20924.022557 + 30 +0.0 + 11 +26749.999951 + 21 +20941.342979 + 31 +0.0 + 0 +LINE + 5 +1D1A + 8 +0 + 62 + 0 + 10 +26774.999951 + 20 +20984.64425 + 30 +0.0 + 11 +26787.499951 + 21 +21006.294885 + 31 +0.0 + 0 +LINE + 5 +1D1B + 8 +0 + 62 + 0 + 10 +26812.499951 + 20 +21049.596155 + 30 +0.0 + 11 +26820.0 + 21 +21062.586621 + 31 +0.0 + 0 +LINE + 5 +1D1C + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +20880.721287 + 30 +0.0 + 11 +26749.999951 + 21 +20898.041709 + 31 +0.0 + 0 +LINE + 5 +1D1D + 8 +0 + 62 + 0 + 10 +26774.999951 + 20 +20941.34298 + 30 +0.0 + 11 +26787.499951 + 21 +20962.993615 + 31 +0.0 + 0 +LINE + 5 +1D1E + 8 +0 + 62 + 0 + 10 +26812.499951 + 20 +21006.294885 + 30 +0.0 + 11 +26820.0 + 21 +21019.285351 + 31 +0.0 + 0 +LINE + 5 +1D1F + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +20837.420017 + 30 +0.0 + 11 +26749.999951 + 21 +20854.740439 + 31 +0.0 + 0 +LINE + 5 +1D20 + 8 +0 + 62 + 0 + 10 +26774.999951 + 20 +20898.041709 + 30 +0.0 + 11 +26787.499951 + 21 +20919.692344 + 31 +0.0 + 0 +LINE + 5 +1D21 + 8 +0 + 62 + 0 + 10 +26812.499951 + 20 +20962.993615 + 30 +0.0 + 11 +26820.0 + 21 +20975.984081 + 31 +0.0 + 0 +LINE + 5 +1D22 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +20794.118747 + 30 +0.0 + 11 +26749.999951 + 21 +20811.439169 + 31 +0.0 + 0 +LINE + 5 +1D23 + 8 +0 + 62 + 0 + 10 +26774.999951 + 20 +20854.740439 + 30 +0.0 + 11 +26787.499951 + 21 +20876.391074 + 31 +0.0 + 0 +LINE + 5 +1D24 + 8 +0 + 62 + 0 + 10 +26812.499951 + 20 +20919.692345 + 30 +0.0 + 11 +26820.0 + 21 +20932.682811 + 31 +0.0 + 0 +LINE + 5 +1D25 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +20750.817477 + 30 +0.0 + 11 +26749.999951 + 21 +20768.137899 + 31 +0.0 + 0 +LINE + 5 +1D26 + 8 +0 + 62 + 0 + 10 +26774.999951 + 20 +20811.439169 + 30 +0.0 + 11 +26787.499951 + 21 +20833.089804 + 31 +0.0 + 0 +LINE + 5 +1D27 + 8 +0 + 62 + 0 + 10 +26812.499951 + 20 +20876.391074 + 30 +0.0 + 11 +26820.0 + 21 +20889.381541 + 31 +0.0 + 0 +LINE + 5 +1D28 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +20707.516207 + 30 +0.0 + 11 +26749.99995 + 21 +20724.836629 + 31 +0.0 + 0 +LINE + 5 +1D29 + 8 +0 + 62 + 0 + 10 +26774.99995 + 20 +20768.137899 + 30 +0.0 + 11 +26787.49995 + 21 +20789.788534 + 31 +0.0 + 0 +LINE + 5 +1D2A + 8 +0 + 62 + 0 + 10 +26812.49995 + 20 +20833.089804 + 30 +0.0 + 11 +26820.0 + 21 +20846.080271 + 31 +0.0 + 0 +LINE + 5 +1D2B + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +20664.214937 + 30 +0.0 + 11 +26749.99995 + 21 +20681.535359 + 31 +0.0 + 0 +LINE + 5 +1D2C + 8 +0 + 62 + 0 + 10 +26774.99995 + 20 +20724.836629 + 30 +0.0 + 11 +26787.49995 + 21 +20746.487264 + 31 +0.0 + 0 +LINE + 5 +1D2D + 8 +0 + 62 + 0 + 10 +26812.49995 + 20 +20789.788534 + 30 +0.0 + 11 +26820.0 + 21 +20802.779001 + 31 +0.0 + 0 +LINE + 5 +1D2E + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +20620.913667 + 30 +0.0 + 11 +26749.99995 + 21 +20638.234088 + 31 +0.0 + 0 +LINE + 5 +1D2F + 8 +0 + 62 + 0 + 10 +26774.99995 + 20 +20681.535359 + 30 +0.0 + 11 +26787.49995 + 21 +20703.185994 + 31 +0.0 + 0 +LINE + 5 +1D30 + 8 +0 + 62 + 0 + 10 +26812.49995 + 20 +20746.487264 + 30 +0.0 + 11 +26820.0 + 21 +20759.477731 + 31 +0.0 + 0 +LINE + 5 +1D31 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +20577.612397 + 30 +0.0 + 11 +26749.99995 + 21 +20594.932818 + 31 +0.0 + 0 +LINE + 5 +1D32 + 8 +0 + 62 + 0 + 10 +26774.99995 + 20 +20638.234089 + 30 +0.0 + 11 +26787.49995 + 21 +20659.884724 + 31 +0.0 + 0 +LINE + 5 +1D33 + 8 +0 + 62 + 0 + 10 +26812.49995 + 20 +20703.185994 + 30 +0.0 + 11 +26820.0 + 21 +20716.176461 + 31 +0.0 + 0 +LINE + 5 +1D34 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +20534.311127 + 30 +0.0 + 11 +26749.99995 + 21 +20551.631548 + 31 +0.0 + 0 +LINE + 5 +1D35 + 8 +0 + 62 + 0 + 10 +26774.99995 + 20 +20594.932818 + 30 +0.0 + 11 +26787.49995 + 21 +20616.583453 + 31 +0.0 + 0 +LINE + 5 +1D36 + 8 +0 + 62 + 0 + 10 +26812.49995 + 20 +20659.884724 + 30 +0.0 + 11 +26820.0 + 21 +20672.875191 + 31 +0.0 + 0 +LINE + 5 +1D37 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +20491.009857 + 30 +0.0 + 11 +26749.99995 + 21 +20508.330278 + 31 +0.0 + 0 +LINE + 5 +1D38 + 8 +0 + 62 + 0 + 10 +26774.99995 + 20 +20551.631548 + 30 +0.0 + 11 +26787.49995 + 21 +20573.282183 + 31 +0.0 + 0 +LINE + 5 +1D39 + 8 +0 + 62 + 0 + 10 +26812.49995 + 20 +20616.583454 + 30 +0.0 + 11 +26820.0 + 21 +20629.573921 + 31 +0.0 + 0 +LINE + 5 +1D3A + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +20447.708587 + 30 +0.0 + 11 +26749.99995 + 21 +20465.029008 + 31 +0.0 + 0 +LINE + 5 +1D3B + 8 +0 + 62 + 0 + 10 +26774.99995 + 20 +20508.330278 + 30 +0.0 + 11 +26787.49995 + 21 +20529.980913 + 31 +0.0 + 0 +LINE + 5 +1D3C + 8 +0 + 62 + 0 + 10 +26812.49995 + 20 +20573.282183 + 30 +0.0 + 11 +26820.0 + 21 +20586.272651 + 31 +0.0 + 0 +LINE + 5 +1D3D + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +20404.407317 + 30 +0.0 + 11 +26749.99995 + 21 +20421.727738 + 31 +0.0 + 0 +LINE + 5 +1D3E + 8 +0 + 62 + 0 + 10 +26774.99995 + 20 +20465.029008 + 30 +0.0 + 11 +26787.49995 + 21 +20486.679643 + 31 +0.0 + 0 +LINE + 5 +1D3F + 8 +0 + 62 + 0 + 10 +26812.49995 + 20 +20529.980913 + 30 +0.0 + 11 +26820.0 + 21 +20542.971381 + 31 +0.0 + 0 +LINE + 5 +1D40 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +20361.106047 + 30 +0.0 + 11 +26749.99995 + 21 +20378.426468 + 31 +0.0 + 0 +LINE + 5 +1D41 + 8 +0 + 62 + 0 + 10 +26774.99995 + 20 +20421.727738 + 30 +0.0 + 11 +26787.49995 + 21 +20443.378373 + 31 +0.0 + 0 +LINE + 5 +1D42 + 8 +0 + 62 + 0 + 10 +26812.49995 + 20 +20486.679643 + 30 +0.0 + 11 +26820.0 + 21 +20499.670111 + 31 +0.0 + 0 +LINE + 5 +1D43 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +20317.804777 + 30 +0.0 + 11 +26749.99995 + 21 +20335.125197 + 31 +0.0 + 0 +LINE + 5 +1D44 + 8 +0 + 62 + 0 + 10 +26774.99995 + 20 +20378.426468 + 30 +0.0 + 11 +26787.49995 + 21 +20400.077103 + 31 +0.0 + 0 +LINE + 5 +1D45 + 8 +0 + 62 + 0 + 10 +26812.49995 + 20 +20443.378373 + 30 +0.0 + 11 +26820.0 + 21 +20456.368841 + 31 +0.0 + 0 +LINE + 5 +1D46 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +20274.503507 + 30 +0.0 + 11 +26749.99995 + 21 +20291.823927 + 31 +0.0 + 0 +LINE + 5 +1D47 + 8 +0 + 62 + 0 + 10 +26774.99995 + 20 +20335.125198 + 30 +0.0 + 11 +26787.49995 + 21 +20356.775833 + 31 +0.0 + 0 +LINE + 5 +1D48 + 8 +0 + 62 + 0 + 10 +26812.49995 + 20 +20400.077103 + 30 +0.0 + 11 +26820.0 + 21 +20413.067571 + 31 +0.0 + 0 +LINE + 5 +1D49 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +20231.202237 + 30 +0.0 + 11 +26749.99995 + 21 +20248.522657 + 31 +0.0 + 0 +LINE + 5 +1D4A + 8 +0 + 62 + 0 + 10 +26774.99995 + 20 +20291.823927 + 30 +0.0 + 11 +26787.49995 + 21 +20313.474562 + 31 +0.0 + 0 +LINE + 5 +1D4B + 8 +0 + 62 + 0 + 10 +26812.49995 + 20 +20356.775833 + 30 +0.0 + 11 +26820.0 + 21 +20369.766301 + 31 +0.0 + 0 +LINE + 5 +1D4C + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +20187.900967 + 30 +0.0 + 11 +26749.999949 + 21 +20205.221387 + 31 +0.0 + 0 +LINE + 5 +1D4D + 8 +0 + 62 + 0 + 10 +26774.999949 + 20 +20248.522657 + 30 +0.0 + 11 +26787.499949 + 21 +20270.173292 + 31 +0.0 + 0 +LINE + 5 +1D4E + 8 +0 + 62 + 0 + 10 +26812.499949 + 20 +20313.474563 + 30 +0.0 + 11 +26820.0 + 21 +20326.465031 + 31 +0.0 + 0 +LINE + 5 +1D4F + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +20144.599697 + 30 +0.0 + 11 +26749.999949 + 21 +20161.920117 + 31 +0.0 + 0 +LINE + 5 +1D50 + 8 +0 + 62 + 0 + 10 +26774.999949 + 20 +20205.221387 + 30 +0.0 + 11 +26787.499949 + 21 +20226.872022 + 31 +0.0 + 0 +LINE + 5 +1D51 + 8 +0 + 62 + 0 + 10 +26812.499949 + 20 +20270.173292 + 30 +0.0 + 11 +26820.0 + 21 +20283.163761 + 31 +0.0 + 0 +LINE + 5 +1D52 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +20101.298427 + 30 +0.0 + 11 +26749.999949 + 21 +20118.618847 + 31 +0.0 + 0 +LINE + 5 +1D53 + 8 +0 + 62 + 0 + 10 +26774.999949 + 20 +20161.920117 + 30 +0.0 + 11 +26787.499949 + 21 +20183.570752 + 31 +0.0 + 0 +LINE + 5 +1D54 + 8 +0 + 62 + 0 + 10 +26812.499949 + 20 +20226.872022 + 30 +0.0 + 11 +26820.0 + 21 +20239.862491 + 31 +0.0 + 0 +LINE + 5 +1D55 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +20057.997157 + 30 +0.0 + 11 +26749.999949 + 21 +20075.317577 + 31 +0.0 + 0 +LINE + 5 +1D56 + 8 +0 + 62 + 0 + 10 +26774.999949 + 20 +20118.618847 + 30 +0.0 + 11 +26787.499949 + 21 +20140.269482 + 31 +0.0 + 0 +LINE + 5 +1D57 + 8 +0 + 62 + 0 + 10 +26812.499949 + 20 +20183.570752 + 30 +0.0 + 11 +26820.0 + 21 +20196.561221 + 31 +0.0 + 0 +LINE + 5 +1D58 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +20014.695887 + 30 +0.0 + 11 +26749.999949 + 21 +20032.016306 + 31 +0.0 + 0 +LINE + 5 +1D59 + 8 +0 + 62 + 0 + 10 +26774.999949 + 20 +20075.317577 + 30 +0.0 + 11 +26787.499949 + 21 +20096.968212 + 31 +0.0 + 0 +LINE + 5 +1D5A + 8 +0 + 62 + 0 + 10 +26812.499949 + 20 +20140.269482 + 30 +0.0 + 11 +26820.0 + 21 +20153.259951 + 31 +0.0 + 0 +LINE + 5 +1D5B + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +19971.394617 + 30 +0.0 + 11 +26749.999949 + 21 +19988.715036 + 31 +0.0 + 0 +LINE + 5 +1D5C + 8 +0 + 62 + 0 + 10 +26774.999949 + 20 +20032.016307 + 30 +0.0 + 11 +26787.499949 + 21 +20053.666942 + 31 +0.0 + 0 +LINE + 5 +1D5D + 8 +0 + 62 + 0 + 10 +26812.499949 + 20 +20096.968212 + 30 +0.0 + 11 +26820.0 + 21 +20109.958681 + 31 +0.0 + 0 +LINE + 5 +1D5E + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +19928.093347 + 30 +0.0 + 11 +26749.999949 + 21 +19945.413766 + 31 +0.0 + 0 +LINE + 5 +1D5F + 8 +0 + 62 + 0 + 10 +26774.999949 + 20 +19988.715036 + 30 +0.0 + 11 +26787.499949 + 21 +20010.365671 + 31 +0.0 + 0 +LINE + 5 +1D60 + 8 +0 + 62 + 0 + 10 +26812.499949 + 20 +20053.666942 + 30 +0.0 + 11 +26820.0 + 21 +20066.657411 + 31 +0.0 + 0 +LINE + 5 +1D61 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +19884.792077 + 30 +0.0 + 11 +26749.999949 + 21 +19902.112496 + 31 +0.0 + 0 +LINE + 5 +1D62 + 8 +0 + 62 + 0 + 10 +26774.999949 + 20 +19945.413766 + 30 +0.0 + 11 +26787.499949 + 21 +19967.064401 + 31 +0.0 + 0 +LINE + 5 +1D63 + 8 +0 + 62 + 0 + 10 +26812.499949 + 20 +20010.365672 + 30 +0.0 + 11 +26820.0 + 21 +20023.356141 + 31 +0.0 + 0 +LINE + 5 +1D64 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +19841.490807 + 30 +0.0 + 11 +26749.999949 + 21 +19858.811226 + 31 +0.0 + 0 +LINE + 5 +1D65 + 8 +0 + 62 + 0 + 10 +26774.999949 + 20 +19902.112496 + 30 +0.0 + 11 +26787.499949 + 21 +19923.763131 + 31 +0.0 + 0 +LINE + 5 +1D66 + 8 +0 + 62 + 0 + 10 +26812.499949 + 20 +19967.064401 + 30 +0.0 + 11 +26820.0 + 21 +19980.054871 + 31 +0.0 + 0 +LINE + 5 +1D67 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +19798.189537 + 30 +0.0 + 11 +26749.999949 + 21 +19815.509956 + 31 +0.0 + 0 +LINE + 5 +1D68 + 8 +0 + 62 + 0 + 10 +26774.999949 + 20 +19858.811226 + 30 +0.0 + 11 +26787.499949 + 21 +19880.461861 + 31 +0.0 + 0 +LINE + 5 +1D69 + 8 +0 + 62 + 0 + 10 +26812.499949 + 20 +19923.763131 + 30 +0.0 + 11 +26820.0 + 21 +19936.753601 + 31 +0.0 + 0 +LINE + 5 +1D6A + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +19754.888267 + 30 +0.0 + 11 +26749.999949 + 21 +19772.208686 + 31 +0.0 + 0 +LINE + 5 +1D6B + 8 +0 + 62 + 0 + 10 +26774.999949 + 20 +19815.509956 + 30 +0.0 + 11 +26787.499949 + 21 +19837.160591 + 31 +0.0 + 0 +LINE + 5 +1D6C + 8 +0 + 62 + 0 + 10 +26812.499949 + 20 +19880.461861 + 30 +0.0 + 11 +26820.0 + 21 +19893.452331 + 31 +0.0 + 0 +LINE + 5 +1D6D + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +19711.586997 + 30 +0.0 + 11 +26749.999949 + 21 +19728.907415 + 31 +0.0 + 0 +LINE + 5 +1D6E + 8 +0 + 62 + 0 + 10 +26774.999949 + 20 +19772.208686 + 30 +0.0 + 11 +26787.499949 + 21 +19793.859321 + 31 +0.0 + 0 +LINE + 5 +1D6F + 8 +0 + 62 + 0 + 10 +26812.499949 + 20 +19837.160591 + 30 +0.0 + 11 +26820.0 + 21 +19850.151061 + 31 +0.0 + 0 +LINE + 5 +1D70 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +19668.285727 + 30 +0.0 + 11 +26749.999948 + 21 +19685.606145 + 31 +0.0 + 0 +LINE + 5 +1D71 + 8 +0 + 62 + 0 + 10 +26774.999948 + 20 +19728.907416 + 30 +0.0 + 11 +26787.499948 + 21 +19750.558051 + 31 +0.0 + 0 +LINE + 5 +1D72 + 8 +0 + 62 + 0 + 10 +26812.499948 + 20 +19793.859321 + 30 +0.0 + 11 +26820.0 + 21 +19806.849791 + 31 +0.0 + 0 +LINE + 5 +1D73 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +19624.984457 + 30 +0.0 + 11 +26749.999948 + 21 +19642.304875 + 31 +0.0 + 0 +LINE + 5 +1D74 + 8 +0 + 62 + 0 + 10 +26774.999948 + 20 +19685.606145 + 30 +0.0 + 11 +26787.499948 + 21 +19707.25678 + 31 +0.0 + 0 +LINE + 5 +1D75 + 8 +0 + 62 + 0 + 10 +26812.499948 + 20 +19750.558051 + 30 +0.0 + 11 +26820.0 + 21 +19763.548521 + 31 +0.0 + 0 +LINE + 5 +1D76 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +19581.683187 + 30 +0.0 + 11 +26749.999948 + 21 +19599.003605 + 31 +0.0 + 0 +LINE + 5 +1D77 + 8 +0 + 62 + 0 + 10 +26774.999948 + 20 +19642.304875 + 30 +0.0 + 11 +26787.499948 + 21 +19663.95551 + 31 +0.0 + 0 +LINE + 5 +1D78 + 8 +0 + 62 + 0 + 10 +26812.499948 + 20 +19707.256781 + 30 +0.0 + 11 +26820.0 + 21 +19720.247251 + 31 +0.0 + 0 +LINE + 5 +1D79 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +19538.381917 + 30 +0.0 + 11 +26749.999948 + 21 +19555.702335 + 31 +0.0 + 0 +LINE + 5 +1D7A + 8 +0 + 62 + 0 + 10 +26774.999948 + 20 +19599.003605 + 30 +0.0 + 11 +26787.499948 + 21 +19620.65424 + 31 +0.0 + 0 +LINE + 5 +1D7B + 8 +0 + 62 + 0 + 10 +26812.499948 + 20 +19663.95551 + 30 +0.0 + 11 +26820.0 + 21 +19676.945981 + 31 +0.0 + 0 +LINE + 5 +1D7C + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +19495.080647 + 30 +0.0 + 11 +26749.999948 + 21 +19512.401065 + 31 +0.0 + 0 +LINE + 5 +1D7D + 8 +0 + 62 + 0 + 10 +26774.999948 + 20 +19555.702335 + 30 +0.0 + 11 +26787.499948 + 21 +19577.35297 + 31 +0.0 + 0 +LINE + 5 +1D7E + 8 +0 + 62 + 0 + 10 +26812.499948 + 20 +19620.65424 + 30 +0.0 + 11 +26820.0 + 21 +19633.644711 + 31 +0.0 + 0 +LINE + 5 +1D7F + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +19451.779377 + 30 +0.0 + 11 +26749.999948 + 21 +19469.099795 + 31 +0.0 + 0 +LINE + 5 +1D80 + 8 +0 + 62 + 0 + 10 +26774.999948 + 20 +19512.401065 + 30 +0.0 + 11 +26787.499948 + 21 +19534.0517 + 31 +0.0 + 0 +LINE + 5 +1D81 + 8 +0 + 62 + 0 + 10 +26812.499948 + 20 +19577.35297 + 30 +0.0 + 11 +26820.0 + 21 +19590.343441 + 31 +0.0 + 0 +LINE + 5 +1D82 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +19408.478107 + 30 +0.0 + 11 +26749.999948 + 21 +19425.798525 + 31 +0.0 + 0 +LINE + 5 +1D83 + 8 +0 + 62 + 0 + 10 +26774.999948 + 20 +19469.099795 + 30 +0.0 + 11 +26787.499948 + 21 +19490.75043 + 31 +0.0 + 0 +LINE + 5 +1D84 + 8 +0 + 62 + 0 + 10 +26812.499948 + 20 +19534.0517 + 30 +0.0 + 11 +26820.0 + 21 +19547.042171 + 31 +0.0 + 0 +LINE + 5 +1D85 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +19365.176837 + 30 +0.0 + 11 +26749.999948 + 21 +19382.497254 + 31 +0.0 + 0 +LINE + 5 +1D86 + 8 +0 + 62 + 0 + 10 +26774.999948 + 20 +19425.798525 + 30 +0.0 + 11 +26787.499948 + 21 +19447.44916 + 31 +0.0 + 0 +LINE + 5 +1D87 + 8 +0 + 62 + 0 + 10 +26812.499948 + 20 +19490.75043 + 30 +0.0 + 11 +26820.0 + 21 +19503.740901 + 31 +0.0 + 0 +LINE + 5 +1D88 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +19321.875567 + 30 +0.0 + 11 +26749.999948 + 21 +19339.195984 + 31 +0.0 + 0 +LINE + 5 +1D89 + 8 +0 + 62 + 0 + 10 +26774.999948 + 20 +19382.497254 + 30 +0.0 + 11 +26787.499948 + 21 +19404.14789 + 31 +0.0 + 0 +LINE + 5 +1D8A + 8 +0 + 62 + 0 + 10 +26812.499948 + 20 +19447.44916 + 30 +0.0 + 11 +26820.0 + 21 +19460.439631 + 31 +0.0 + 0 +LINE + 5 +1D8B + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +19278.574297 + 30 +0.0 + 11 +26749.999948 + 21 +19295.894714 + 31 +0.0 + 0 +LINE + 5 +1D8C + 8 +0 + 62 + 0 + 10 +26774.999948 + 20 +19339.195984 + 30 +0.0 + 11 +26787.499948 + 21 +19360.846619 + 31 +0.0 + 0 +LINE + 5 +1D8D + 8 +0 + 62 + 0 + 10 +26812.499948 + 20 +19404.14789 + 30 +0.0 + 11 +26820.0 + 21 +19417.138361 + 31 +0.0 + 0 +LINE + 5 +1D8E + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +19235.273027 + 30 +0.0 + 11 +26749.999948 + 21 +19252.593444 + 31 +0.0 + 0 +LINE + 5 +1D8F + 8 +0 + 62 + 0 + 10 +26774.999948 + 20 +19295.894714 + 30 +0.0 + 11 +26787.499948 + 21 +19317.545349 + 31 +0.0 + 0 +LINE + 5 +1D90 + 8 +0 + 62 + 0 + 10 +26812.499948 + 20 +19360.846619 + 30 +0.0 + 11 +26820.0 + 21 +19373.837091 + 31 +0.0 + 0 +LINE + 5 +1D91 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +19191.971757 + 30 +0.0 + 11 +26749.999948 + 21 +19209.292174 + 31 +0.0 + 0 +LINE + 5 +1D92 + 8 +0 + 62 + 0 + 10 +26774.999948 + 20 +19252.593444 + 30 +0.0 + 11 +26787.499948 + 21 +19274.244079 + 31 +0.0 + 0 +LINE + 5 +1D93 + 8 +0 + 62 + 0 + 10 +26812.499948 + 20 +19317.545349 + 30 +0.0 + 11 +26820.0 + 21 +19330.535821 + 31 +0.0 + 0 +LINE + 5 +1D94 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +19148.670487 + 30 +0.0 + 11 +26749.999947 + 21 +19165.990904 + 31 +0.0 + 0 +LINE + 5 +1D95 + 8 +0 + 62 + 0 + 10 +26774.999947 + 20 +19209.292174 + 30 +0.0 + 11 +26787.499947 + 21 +19230.942809 + 31 +0.0 + 0 +LINE + 5 +1D96 + 8 +0 + 62 + 0 + 10 +26812.499947 + 20 +19274.244079 + 30 +0.0 + 11 +26820.0 + 21 +19287.234551 + 31 +0.0 + 0 +LINE + 5 +1D97 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +19105.369217 + 30 +0.0 + 11 +26749.999947 + 21 +19122.689634 + 31 +0.0 + 0 +LINE + 5 +1D98 + 8 +0 + 62 + 0 + 10 +26774.999947 + 20 +19165.990904 + 30 +0.0 + 11 +26787.499947 + 21 +19187.641539 + 31 +0.0 + 0 +LINE + 5 +1D99 + 8 +0 + 62 + 0 + 10 +26812.499947 + 20 +19230.942809 + 30 +0.0 + 11 +26820.0 + 21 +19243.933281 + 31 +0.0 + 0 +LINE + 5 +1D9A + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +19062.067947 + 30 +0.0 + 11 +26749.999947 + 21 +19079.388363 + 31 +0.0 + 0 +LINE + 5 +1D9B + 8 +0 + 62 + 0 + 10 +26774.999947 + 20 +19122.689634 + 30 +0.0 + 11 +26787.499947 + 21 +19144.340269 + 31 +0.0 + 0 +LINE + 5 +1D9C + 8 +0 + 62 + 0 + 10 +26812.499947 + 20 +19187.641539 + 30 +0.0 + 11 +26820.0 + 21 +19200.632011 + 31 +0.0 + 0 +LINE + 5 +1D9D + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +19018.766677 + 30 +0.0 + 11 +26749.999947 + 21 +19036.087093 + 31 +0.0 + 0 +LINE + 5 +1D9E + 8 +0 + 62 + 0 + 10 +26774.999947 + 20 +19079.388363 + 30 +0.0 + 11 +26787.499947 + 21 +19101.038999 + 31 +0.0 + 0 +LINE + 5 +1D9F + 8 +0 + 62 + 0 + 10 +26812.499947 + 20 +19144.340269 + 30 +0.0 + 11 +26820.0 + 21 +19157.330741 + 31 +0.0 + 0 +LINE + 5 +1DA0 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +18975.465407 + 30 +0.0 + 11 +26749.999947 + 21 +18992.785823 + 31 +0.0 + 0 +LINE + 5 +1DA1 + 8 +0 + 62 + 0 + 10 +26774.999947 + 20 +19036.087093 + 30 +0.0 + 11 +26787.499947 + 21 +19057.737728 + 31 +0.0 + 0 +LINE + 5 +1DA2 + 8 +0 + 62 + 0 + 10 +26812.499947 + 20 +19101.038999 + 30 +0.0 + 11 +26820.0 + 21 +19114.029471 + 31 +0.0 + 0 +LINE + 5 +1DA3 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +18932.164137 + 30 +0.0 + 11 +26749.999947 + 21 +18949.484553 + 31 +0.0 + 0 +LINE + 5 +1DA4 + 8 +0 + 62 + 0 + 10 +26774.999947 + 20 +18992.785823 + 30 +0.0 + 11 +26787.499947 + 21 +19014.436458 + 31 +0.0 + 0 +LINE + 5 +1DA5 + 8 +0 + 62 + 0 + 10 +26812.499947 + 20 +19057.737728 + 30 +0.0 + 11 +26820.0 + 21 +19070.728201 + 31 +0.0 + 0 +LINE + 5 +1DA6 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +18888.862867 + 30 +0.0 + 11 +26749.999947 + 21 +18906.183283 + 31 +0.0 + 0 +LINE + 5 +1DA7 + 8 +0 + 62 + 0 + 10 +26774.999947 + 20 +18949.484553 + 30 +0.0 + 11 +26787.499947 + 21 +18971.135188 + 31 +0.0 + 0 +LINE + 5 +1DA8 + 8 +0 + 62 + 0 + 10 +26812.499947 + 20 +19014.436458 + 30 +0.0 + 11 +26820.0 + 21 +19027.426931 + 31 +0.0 + 0 +LINE + 5 +1DA9 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +18845.561597 + 30 +0.0 + 11 +26749.999947 + 21 +18862.882013 + 31 +0.0 + 0 +LINE + 5 +1DAA + 8 +0 + 62 + 0 + 10 +26774.999947 + 20 +18906.183283 + 30 +0.0 + 11 +26787.499947 + 21 +18927.833918 + 31 +0.0 + 0 +LINE + 5 +1DAB + 8 +0 + 62 + 0 + 10 +26812.499947 + 20 +18971.135188 + 30 +0.0 + 11 +26820.0 + 21 +18984.125661 + 31 +0.0 + 0 +LINE + 5 +1DAC + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +18802.260327 + 30 +0.0 + 11 +26749.999947 + 21 +18819.580743 + 31 +0.0 + 0 +LINE + 5 +1DAD + 8 +0 + 62 + 0 + 10 +26774.999947 + 20 +18862.882013 + 30 +0.0 + 11 +26787.499947 + 21 +18884.532648 + 31 +0.0 + 0 +LINE + 5 +1DAE + 8 +0 + 62 + 0 + 10 +26812.499947 + 20 +18927.833918 + 30 +0.0 + 11 +26820.0 + 21 +18940.824391 + 31 +0.0 + 0 +LINE + 5 +1DAF + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +18758.959057 + 30 +0.0 + 11 +26749.999947 + 21 +18776.279472 + 31 +0.0 + 0 +LINE + 5 +1DB0 + 8 +0 + 62 + 0 + 10 +26774.999947 + 20 +18819.580743 + 30 +0.0 + 11 +26787.499947 + 21 +18841.231378 + 31 +0.0 + 0 +LINE + 5 +1DB1 + 8 +0 + 62 + 0 + 10 +26812.499947 + 20 +18884.532648 + 30 +0.0 + 11 +26820.0 + 21 +18897.523121 + 31 +0.0 + 0 +LINE + 5 +1DB2 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +18715.657787 + 30 +0.0 + 11 +26749.999947 + 21 +18732.978202 + 31 +0.0 + 0 +LINE + 5 +1DB3 + 8 +0 + 62 + 0 + 10 +26774.999947 + 20 +18776.279472 + 30 +0.0 + 11 +26787.499947 + 21 +18797.930108 + 31 +0.0 + 0 +LINE + 5 +1DB4 + 8 +0 + 62 + 0 + 10 +26812.499947 + 20 +18841.231378 + 30 +0.0 + 11 +26820.0 + 21 +18854.221851 + 31 +0.0 + 0 +LINE + 5 +1DB5 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +18672.356517 + 30 +0.0 + 11 +26749.999947 + 21 +18689.676932 + 31 +0.0 + 0 +LINE + 5 +1DB6 + 8 +0 + 62 + 0 + 10 +26774.999947 + 20 +18732.978202 + 30 +0.0 + 11 +26787.499947 + 21 +18754.628837 + 31 +0.0 + 0 +LINE + 5 +1DB7 + 8 +0 + 62 + 0 + 10 +26812.499947 + 20 +18797.930108 + 30 +0.0 + 11 +26820.0 + 21 +18810.920581 + 31 +0.0 + 0 +LINE + 5 +1DB8 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +18629.055247 + 30 +0.0 + 11 +26749.999946 + 21 +18646.375662 + 31 +0.0 + 0 +LINE + 5 +1DB9 + 8 +0 + 62 + 0 + 10 +26774.999946 + 20 +18689.676932 + 30 +0.0 + 11 +26787.499946 + 21 +18711.327567 + 31 +0.0 + 0 +LINE + 5 +1DBA + 8 +0 + 62 + 0 + 10 +26812.499946 + 20 +18754.628837 + 30 +0.0 + 11 +26820.0 + 21 +18767.619311 + 31 +0.0 + 0 +LINE + 5 +1DBB + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +18585.753977 + 30 +0.0 + 11 +26749.999946 + 21 +18603.074392 + 31 +0.0 + 0 +LINE + 5 +1DBC + 8 +0 + 62 + 0 + 10 +26774.999946 + 20 +18646.375662 + 30 +0.0 + 11 +26787.499946 + 21 +18668.026297 + 31 +0.0 + 0 +LINE + 5 +1DBD + 8 +0 + 62 + 0 + 10 +26812.499946 + 20 +18711.327567 + 30 +0.0 + 11 +26820.0 + 21 +18724.318041 + 31 +0.0 + 0 +LINE + 5 +1DBE + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +18542.452707 + 30 +0.0 + 11 +26749.999946 + 21 +18559.773122 + 31 +0.0 + 0 +LINE + 5 +1DBF + 8 +0 + 62 + 0 + 10 +26774.999946 + 20 +18603.074392 + 30 +0.0 + 11 +26787.499946 + 21 +18624.725027 + 31 +0.0 + 0 +LINE + 5 +1DC0 + 8 +0 + 62 + 0 + 10 +26812.499946 + 20 +18668.026297 + 30 +0.0 + 11 +26820.0 + 21 +18681.016771 + 31 +0.0 + 0 +LINE + 5 +1DC1 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +18499.151437 + 30 +0.0 + 11 +26749.999946 + 21 +18516.471852 + 31 +0.0 + 0 +LINE + 5 +1DC2 + 8 +0 + 62 + 0 + 10 +26774.999946 + 20 +18559.773122 + 30 +0.0 + 11 +26787.499946 + 21 +18581.423757 + 31 +0.0 + 0 +LINE + 5 +1DC3 + 8 +0 + 62 + 0 + 10 +26812.499946 + 20 +18624.725027 + 30 +0.0 + 11 +26820.0 + 21 +18637.715501 + 31 +0.0 + 0 +LINE + 5 +1DC4 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +18455.850167 + 30 +0.0 + 11 +26749.999946 + 21 +18473.170581 + 31 +0.0 + 0 +LINE + 5 +1DC5 + 8 +0 + 62 + 0 + 10 +26774.999946 + 20 +18516.471852 + 30 +0.0 + 11 +26787.499946 + 21 +18538.122487 + 31 +0.0 + 0 +LINE + 5 +1DC6 + 8 +0 + 62 + 0 + 10 +26812.499946 + 20 +18581.423757 + 30 +0.0 + 11 +26820.0 + 21 +18594.414231 + 31 +0.0 + 0 +LINE + 5 +1DC7 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +18412.548897 + 30 +0.0 + 11 +26749.999946 + 21 +18429.869311 + 31 +0.0 + 0 +LINE + 5 +1DC8 + 8 +0 + 62 + 0 + 10 +26774.999946 + 20 +18473.170581 + 30 +0.0 + 11 +26787.499946 + 21 +18494.821217 + 31 +0.0 + 0 +LINE + 5 +1DC9 + 8 +0 + 62 + 0 + 10 +26812.499946 + 20 +18538.122487 + 30 +0.0 + 11 +26820.0 + 21 +18551.112961 + 31 +0.0 + 0 +LINE + 5 +1DCA + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +18369.247627 + 30 +0.0 + 11 +26749.999946 + 21 +18386.568041 + 31 +0.0 + 0 +LINE + 5 +1DCB + 8 +0 + 62 + 0 + 10 +26774.999946 + 20 +18429.869311 + 30 +0.0 + 11 +26787.499946 + 21 +18451.519946 + 31 +0.0 + 0 +LINE + 5 +1DCC + 8 +0 + 62 + 0 + 10 +26812.499946 + 20 +18494.821217 + 30 +0.0 + 11 +26820.0 + 21 +18507.811691 + 31 +0.0 + 0 +LINE + 5 +1DCD + 8 +0 + 62 + 0 + 10 +26774.999946 + 20 +18386.568041 + 30 +0.0 + 11 +26787.499946 + 21 +18408.218676 + 31 +0.0 + 0 +LINE + 5 +1DCE + 8 +0 + 62 + 0 + 10 +26812.499946 + 20 +18451.519946 + 30 +0.0 + 11 +26820.0 + 21 +18464.510421 + 31 +0.0 + 0 +LINE + 5 +1DCF + 8 +0 + 62 + 0 + 10 +26786.825944 + 20 +18363.75 + 30 +0.0 + 11 +26787.499946 + 21 +18364.917406 + 31 +0.0 + 0 +LINE + 5 +1DD0 + 8 +0 + 62 + 0 + 10 +26812.499946 + 20 +18408.218676 + 30 +0.0 + 11 +26820.0 + 21 +18421.209151 + 31 +0.0 + 0 +LINE + 5 +1DD1 + 8 +0 + 62 + 0 + 10 +26812.499946 + 20 +18364.917406 + 30 +0.0 + 11 +26820.0 + 21 +18377.907881 + 31 +0.0 + 0 +ENDBLK + 5 +1DD2 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X50 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X50 + 1 + + 0 +LINE + 5 +1DD4 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +14857.514465 + 30 +0.0 + 11 +26812.5 + 21 +14857.514465 + 31 +0.0 + 0 +LINE + 5 +1DD5 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +14879.1651 + 30 +0.0 + 11 +26775.0 + 21 +14879.1651 + 31 +0.0 + 0 +LINE + 5 +1DD6 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +14900.815735 + 30 +0.0 + 11 +26812.5 + 21 +14900.815735 + 31 +0.0 + 0 +LINE + 5 +1DD7 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +14922.46637 + 30 +0.0 + 11 +26775.0 + 21 +14922.46637 + 31 +0.0 + 0 +LINE + 5 +1DD8 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +14944.117005 + 30 +0.0 + 11 +26812.5 + 21 +14944.117005 + 31 +0.0 + 0 +LINE + 5 +1DD9 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +14965.76764 + 30 +0.0 + 11 +26775.0 + 21 +14965.76764 + 31 +0.0 + 0 +LINE + 5 +1DDA + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +14987.418275 + 30 +0.0 + 11 +26812.5 + 21 +14987.418275 + 31 +0.0 + 0 +LINE + 5 +1DDB + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +15009.06891 + 30 +0.0 + 11 +26775.0 + 21 +15009.06891 + 31 +0.0 + 0 +LINE + 5 +1DDC + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +15030.719545 + 30 +0.0 + 11 +26812.5 + 21 +15030.719545 + 31 +0.0 + 0 +LINE + 5 +1DDD + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +15052.37018 + 30 +0.0 + 11 +26775.0 + 21 +15052.37018 + 31 +0.0 + 0 +LINE + 5 +1DDE + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +15074.020815 + 30 +0.0 + 11 +26812.5 + 21 +15074.020815 + 31 +0.0 + 0 +LINE + 5 +1DDF + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +15095.67145 + 30 +0.0 + 11 +26775.0 + 21 +15095.67145 + 31 +0.0 + 0 +LINE + 5 +1DE0 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +15117.322085 + 30 +0.0 + 11 +26812.5 + 21 +15117.322085 + 31 +0.0 + 0 +LINE + 5 +1DE1 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +15138.97272 + 30 +0.0 + 11 +26775.0 + 21 +15138.97272 + 31 +0.0 + 0 +LINE + 5 +1DE2 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +15160.623355 + 30 +0.0 + 11 +26812.5 + 21 +15160.623355 + 31 +0.0 + 0 +LINE + 5 +1DE3 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +15182.27399 + 30 +0.0 + 11 +26775.0 + 21 +15182.27399 + 31 +0.0 + 0 +LINE + 5 +1DE4 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +15203.924625 + 30 +0.0 + 11 +26812.5 + 21 +15203.924625 + 31 +0.0 + 0 +LINE + 5 +1DE5 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +15225.57526 + 30 +0.0 + 11 +26775.0 + 21 +15225.57526 + 31 +0.0 + 0 +LINE + 5 +1DE6 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +15247.225895 + 30 +0.0 + 11 +26812.5 + 21 +15247.225895 + 31 +0.0 + 0 +LINE + 5 +1DE7 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +15268.87653 + 30 +0.0 + 11 +26775.0 + 21 +15268.87653 + 31 +0.0 + 0 +LINE + 5 +1DE8 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +15290.527165 + 30 +0.0 + 11 +26812.5 + 21 +15290.527165 + 31 +0.0 + 0 +LINE + 5 +1DE9 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +15312.1778 + 30 +0.0 + 11 +26775.0 + 21 +15312.1778 + 31 +0.0 + 0 +LINE + 5 +1DEA + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +15333.828435 + 30 +0.0 + 11 +26812.5 + 21 +15333.828435 + 31 +0.0 + 0 +LINE + 5 +1DEB + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +15355.47907 + 30 +0.0 + 11 +26775.0 + 21 +15355.47907 + 31 +0.0 + 0 +LINE + 5 +1DEC + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +15377.129705 + 30 +0.0 + 11 +26812.5 + 21 +15377.129705 + 31 +0.0 + 0 +LINE + 5 +1DED + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +15398.78034 + 30 +0.0 + 11 +26775.0 + 21 +15398.78034 + 31 +0.0 + 0 +LINE + 5 +1DEE + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +15420.430975 + 30 +0.0 + 11 +26812.5 + 21 +15420.430975 + 31 +0.0 + 0 +LINE + 5 +1DEF + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +15442.08161 + 30 +0.0 + 11 +26775.0 + 21 +15442.08161 + 31 +0.0 + 0 +LINE + 5 +1DF0 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +15463.732245 + 30 +0.0 + 11 +26812.5 + 21 +15463.732245 + 31 +0.0 + 0 +LINE + 5 +1DF1 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +15485.38288 + 30 +0.0 + 11 +26775.0 + 21 +15485.38288 + 31 +0.0 + 0 +LINE + 5 +1DF2 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +15507.033515 + 30 +0.0 + 11 +26812.5 + 21 +15507.033515 + 31 +0.0 + 0 +LINE + 5 +1DF3 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +15528.68415 + 30 +0.0 + 11 +26775.0 + 21 +15528.68415 + 31 +0.0 + 0 +LINE + 5 +1DF4 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +15550.334785 + 30 +0.0 + 11 +26812.5 + 21 +15550.334785 + 31 +0.0 + 0 +LINE + 5 +1DF5 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +15571.98542 + 30 +0.0 + 11 +26775.0 + 21 +15571.98542 + 31 +0.0 + 0 +LINE + 5 +1DF6 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +15593.636055 + 30 +0.0 + 11 +26812.5 + 21 +15593.636055 + 31 +0.0 + 0 +LINE + 5 +1DF7 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +15615.28669 + 30 +0.0 + 11 +26775.0 + 21 +15615.28669 + 31 +0.0 + 0 +LINE + 5 +1DF8 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +15636.937325 + 30 +0.0 + 11 +26812.5 + 21 +15636.937325 + 31 +0.0 + 0 +LINE + 5 +1DF9 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +15658.58796 + 30 +0.0 + 11 +26775.0 + 21 +15658.58796 + 31 +0.0 + 0 +LINE + 5 +1DFA + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +15680.238595 + 30 +0.0 + 11 +26812.5 + 21 +15680.238595 + 31 +0.0 + 0 +LINE + 5 +1DFB + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +15701.88923 + 30 +0.0 + 11 +26775.0 + 21 +15701.88923 + 31 +0.0 + 0 +LINE + 5 +1DFC + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +15723.539865 + 30 +0.0 + 11 +26812.5 + 21 +15723.539865 + 31 +0.0 + 0 +LINE + 5 +1DFD + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +15745.1905 + 30 +0.0 + 11 +26775.0 + 21 +15745.1905 + 31 +0.0 + 0 +LINE + 5 +1DFE + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +15766.841135 + 30 +0.0 + 11 +26812.5 + 21 +15766.841135 + 31 +0.0 + 0 +LINE + 5 +1DFF + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +15788.49177 + 30 +0.0 + 11 +26775.0 + 21 +15788.49177 + 31 +0.0 + 0 +LINE + 5 +1E00 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +15810.142405 + 30 +0.0 + 11 +26812.5 + 21 +15810.142405 + 31 +0.0 + 0 +LINE + 5 +1E01 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +15831.79304 + 30 +0.0 + 11 +26775.0 + 21 +15831.79304 + 31 +0.0 + 0 +LINE + 5 +1E02 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +15853.443675 + 30 +0.0 + 11 +26812.5 + 21 +15853.443675 + 31 +0.0 + 0 +LINE + 5 +1E03 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +15875.09431 + 30 +0.0 + 11 +26775.0 + 21 +15875.09431 + 31 +0.0 + 0 +LINE + 5 +1E04 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +15896.744945 + 30 +0.0 + 11 +26812.5 + 21 +15896.744945 + 31 +0.0 + 0 +LINE + 5 +1E05 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +15918.39558 + 30 +0.0 + 11 +26775.0 + 21 +15918.39558 + 31 +0.0 + 0 +LINE + 5 +1E06 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +15940.046215 + 30 +0.0 + 11 +26812.5 + 21 +15940.046215 + 31 +0.0 + 0 +LINE + 5 +1E07 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +15961.69685 + 30 +0.0 + 11 +26775.0 + 21 +15961.69685 + 31 +0.0 + 0 +LINE + 5 +1E08 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +15983.347485 + 30 +0.0 + 11 +26812.5 + 21 +15983.347485 + 31 +0.0 + 0 +LINE + 5 +1E09 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +16004.99812 + 30 +0.0 + 11 +26775.0 + 21 +16004.99812 + 31 +0.0 + 0 +LINE + 5 +1E0A + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +16026.648755 + 30 +0.0 + 11 +26812.5 + 21 +16026.648755 + 31 +0.0 + 0 +LINE + 5 +1E0B + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +16048.29939 + 30 +0.0 + 11 +26775.0 + 21 +16048.29939 + 31 +0.0 + 0 +LINE + 5 +1E0C + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +16069.950025 + 30 +0.0 + 11 +26812.5 + 21 +16069.950025 + 31 +0.0 + 0 +LINE + 5 +1E0D + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +16091.60066 + 30 +0.0 + 11 +26775.0 + 21 +16091.60066 + 31 +0.0 + 0 +LINE + 5 +1E0E + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +16113.251295 + 30 +0.0 + 11 +26812.5 + 21 +16113.251295 + 31 +0.0 + 0 +LINE + 5 +1E0F + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +16134.90193 + 30 +0.0 + 11 +26775.0 + 21 +16134.90193 + 31 +0.0 + 0 +LINE + 5 +1E10 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +16156.552565 + 30 +0.0 + 11 +26812.5 + 21 +16156.552565 + 31 +0.0 + 0 +LINE + 5 +1E11 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +16178.2032 + 30 +0.0 + 11 +26775.0 + 21 +16178.2032 + 31 +0.0 + 0 +LINE + 5 +1E12 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +16199.853835 + 30 +0.0 + 11 +26812.5 + 21 +16199.853835 + 31 +0.0 + 0 +LINE + 5 +1E13 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +16221.50447 + 30 +0.0 + 11 +26775.0 + 21 +16221.50447 + 31 +0.0 + 0 +LINE + 5 +1E14 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +16243.155105 + 30 +0.0 + 11 +26812.5 + 21 +16243.155105 + 31 +0.0 + 0 +LINE + 5 +1E15 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +16264.80574 + 30 +0.0 + 11 +26775.0 + 21 +16264.80574 + 31 +0.0 + 0 +LINE + 5 +1E16 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +16286.456375 + 30 +0.0 + 11 +26812.5 + 21 +16286.456375 + 31 +0.0 + 0 +LINE + 5 +1E17 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +16308.10701 + 30 +0.0 + 11 +26775.0 + 21 +16308.10701 + 31 +0.0 + 0 +LINE + 5 +1E18 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +16329.757645 + 30 +0.0 + 11 +26812.5 + 21 +16329.757645 + 31 +0.0 + 0 +LINE + 5 +1E19 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +16351.40828 + 30 +0.0 + 11 +26775.0 + 21 +16351.40828 + 31 +0.0 + 0 +LINE + 5 +1E1A + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +16373.058915 + 30 +0.0 + 11 +26812.5 + 21 +16373.058915 + 31 +0.0 + 0 +LINE + 5 +1E1B + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +16394.70955 + 30 +0.0 + 11 +26775.0 + 21 +16394.70955 + 31 +0.0 + 0 +LINE + 5 +1E1C + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +16416.360185 + 30 +0.0 + 11 +26812.5 + 21 +16416.360185 + 31 +0.0 + 0 +LINE + 5 +1E1D + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +16438.01082 + 30 +0.0 + 11 +26775.0 + 21 +16438.01082 + 31 +0.0 + 0 +LINE + 5 +1E1E + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +16459.661455 + 30 +0.0 + 11 +26812.5 + 21 +16459.661455 + 31 +0.0 + 0 +LINE + 5 +1E1F + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +16481.31209 + 30 +0.0 + 11 +26775.0 + 21 +16481.31209 + 31 +0.0 + 0 +LINE + 5 +1E20 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +16502.962725 + 30 +0.0 + 11 +26812.5 + 21 +16502.962725 + 31 +0.0 + 0 +LINE + 5 +1E21 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +16524.61336 + 30 +0.0 + 11 +26775.0 + 21 +16524.61336 + 31 +0.0 + 0 +LINE + 5 +1E22 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +16546.263995 + 30 +0.0 + 11 +26812.5 + 21 +16546.263995 + 31 +0.0 + 0 +LINE + 5 +1E23 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +16567.91463 + 30 +0.0 + 11 +26775.0 + 21 +16567.91463 + 31 +0.0 + 0 +LINE + 5 +1E24 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +16589.565265 + 30 +0.0 + 11 +26812.5 + 21 +16589.565265 + 31 +0.0 + 0 +LINE + 5 +1E25 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +16611.2159 + 30 +0.0 + 11 +26775.0 + 21 +16611.2159 + 31 +0.0 + 0 +LINE + 5 +1E26 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +16632.866535 + 30 +0.0 + 11 +26812.5 + 21 +16632.866535 + 31 +0.0 + 0 +LINE + 5 +1E27 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +16654.51717 + 30 +0.0 + 11 +26775.0 + 21 +16654.51717 + 31 +0.0 + 0 +LINE + 5 +1E28 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +16676.167805 + 30 +0.0 + 11 +26812.5 + 21 +16676.167805 + 31 +0.0 + 0 +LINE + 5 +1E29 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +16697.81844 + 30 +0.0 + 11 +26775.0 + 21 +16697.81844 + 31 +0.0 + 0 +LINE + 5 +1E2A + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +16719.469075 + 30 +0.0 + 11 +26812.5 + 21 +16719.469075 + 31 +0.0 + 0 +LINE + 5 +1E2B + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +16741.11971 + 30 +0.0 + 11 +26775.0 + 21 +16741.11971 + 31 +0.0 + 0 +LINE + 5 +1E2C + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +16762.770345 + 30 +0.0 + 11 +26812.5 + 21 +16762.770345 + 31 +0.0 + 0 +LINE + 5 +1E2D + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +16784.42098 + 30 +0.0 + 11 +26775.0 + 21 +16784.42098 + 31 +0.0 + 0 +LINE + 5 +1E2E + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +16806.071615 + 30 +0.0 + 11 +26812.5 + 21 +16806.071615 + 31 +0.0 + 0 +LINE + 5 +1E2F + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +16827.72225 + 30 +0.0 + 11 +26775.0 + 21 +16827.72225 + 31 +0.0 + 0 +LINE + 5 +1E30 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +16849.372885 + 30 +0.0 + 11 +26812.5 + 21 +16849.372885 + 31 +0.0 + 0 +LINE + 5 +1E31 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +16871.02352 + 30 +0.0 + 11 +26775.0 + 21 +16871.02352 + 31 +0.0 + 0 +LINE + 5 +1E32 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +16892.674155 + 30 +0.0 + 11 +26812.5 + 21 +16892.674155 + 31 +0.0 + 0 +LINE + 5 +1E33 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +16914.32479 + 30 +0.0 + 11 +26775.0 + 21 +16914.32479 + 31 +0.0 + 0 +LINE + 5 +1E34 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +16935.975425 + 30 +0.0 + 11 +26812.5 + 21 +16935.975425 + 31 +0.0 + 0 +LINE + 5 +1E35 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +16957.62606 + 30 +0.0 + 11 +26775.0 + 21 +16957.62606 + 31 +0.0 + 0 +LINE + 5 +1E36 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +16979.276695 + 30 +0.0 + 11 +26812.5 + 21 +16979.276695 + 31 +0.0 + 0 +LINE + 5 +1E37 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +17000.92733 + 30 +0.0 + 11 +26775.0 + 21 +17000.92733 + 31 +0.0 + 0 +LINE + 5 +1E38 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +17022.577965 + 30 +0.0 + 11 +26812.5 + 21 +17022.577965 + 31 +0.0 + 0 +LINE + 5 +1E39 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +17044.2286 + 30 +0.0 + 11 +26775.0 + 21 +17044.2286 + 31 +0.0 + 0 +LINE + 5 +1E3A + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +17065.879235 + 30 +0.0 + 11 +26812.5 + 21 +17065.879235 + 31 +0.0 + 0 +LINE + 5 +1E3B + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +17087.52987 + 30 +0.0 + 11 +26775.0 + 21 +17087.52987 + 31 +0.0 + 0 +LINE + 5 +1E3C + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +17109.180505 + 30 +0.0 + 11 +26812.5 + 21 +17109.180505 + 31 +0.0 + 0 +LINE + 5 +1E3D + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +17130.83114 + 30 +0.0 + 11 +26775.0 + 21 +17130.83114 + 31 +0.0 + 0 +LINE + 5 +1E3E + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +17152.481775 + 30 +0.0 + 11 +26812.5 + 21 +17152.481775 + 31 +0.0 + 0 +LINE + 5 +1E3F + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +17174.13241 + 30 +0.0 + 11 +26775.0 + 21 +17174.13241 + 31 +0.0 + 0 +LINE + 5 +1E40 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +17195.783045 + 30 +0.0 + 11 +26812.5 + 21 +17195.783045 + 31 +0.0 + 0 +LINE + 5 +1E41 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +17217.43368 + 30 +0.0 + 11 +26775.0 + 21 +17217.43368 + 31 +0.0 + 0 +LINE + 5 +1E42 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +17239.084315 + 30 +0.0 + 11 +26812.5 + 21 +17239.084315 + 31 +0.0 + 0 +LINE + 5 +1E43 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +17260.73495 + 30 +0.0 + 11 +26775.0 + 21 +17260.73495 + 31 +0.0 + 0 +LINE + 5 +1E44 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +17282.385585 + 30 +0.0 + 11 +26812.5 + 21 +17282.385585 + 31 +0.0 + 0 +LINE + 5 +1E45 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +17304.03622 + 30 +0.0 + 11 +26775.0 + 21 +17304.03622 + 31 +0.0 + 0 +LINE + 5 +1E46 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +17325.686855 + 30 +0.0 + 11 +26812.5 + 21 +17325.686855 + 31 +0.0 + 0 +LINE + 5 +1E47 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +17347.33749 + 30 +0.0 + 11 +26775.0 + 21 +17347.33749 + 31 +0.0 + 0 +LINE + 5 +1E48 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +17368.988125 + 30 +0.0 + 11 +26812.5 + 21 +17368.988125 + 31 +0.0 + 0 +LINE + 5 +1E49 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +17390.63876 + 30 +0.0 + 11 +26775.0 + 21 +17390.63876 + 31 +0.0 + 0 +LINE + 5 +1E4A + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +17412.289395 + 30 +0.0 + 11 +26812.5 + 21 +17412.289395 + 31 +0.0 + 0 +LINE + 5 +1E4B + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +17433.94003 + 30 +0.0 + 11 +26775.0 + 21 +17433.94003 + 31 +0.0 + 0 +LINE + 5 +1E4C + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +17455.590665 + 30 +0.0 + 11 +26812.5 + 21 +17455.590665 + 31 +0.0 + 0 +LINE + 5 +1E4D + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +17477.2413 + 30 +0.0 + 11 +26775.0 + 21 +17477.2413 + 31 +0.0 + 0 +LINE + 5 +1E4E + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +17498.891935 + 30 +0.0 + 11 +26812.5 + 21 +17498.891935 + 31 +0.0 + 0 +LINE + 5 +1E4F + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +17520.54257 + 30 +0.0 + 11 +26775.0 + 21 +17520.54257 + 31 +0.0 + 0 +LINE + 5 +1E50 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +17542.193205 + 30 +0.0 + 11 +26812.5 + 21 +17542.193205 + 31 +0.0 + 0 +LINE + 5 +1E51 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +17563.84384 + 30 +0.0 + 11 +26775.0 + 21 +17563.84384 + 31 +0.0 + 0 +LINE + 5 +1E52 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +17585.494475 + 30 +0.0 + 11 +26812.5 + 21 +17585.494475 + 31 +0.0 + 0 +LINE + 5 +1E53 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +17607.14511 + 30 +0.0 + 11 +26775.0 + 21 +17607.14511 + 31 +0.0 + 0 +LINE + 5 +1E54 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +17628.795745 + 30 +0.0 + 11 +26812.5 + 21 +17628.795745 + 31 +0.0 + 0 +LINE + 5 +1E55 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +17650.44638 + 30 +0.0 + 11 +26775.0 + 21 +17650.44638 + 31 +0.0 + 0 +LINE + 5 +1E56 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +17672.097015 + 30 +0.0 + 11 +26812.5 + 21 +17672.097015 + 31 +0.0 + 0 +LINE + 5 +1E57 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +17693.74765 + 30 +0.0 + 11 +26775.0 + 21 +17693.74765 + 31 +0.0 + 0 +LINE + 5 +1E58 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +17715.398285 + 30 +0.0 + 11 +26812.5 + 21 +17715.398285 + 31 +0.0 + 0 +LINE + 5 +1E59 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +17737.04892 + 30 +0.0 + 11 +26775.0 + 21 +17737.04892 + 31 +0.0 + 0 +LINE + 5 +1E5A + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +14835.86383 + 30 +0.0 + 11 +26775.0 + 21 +14835.86383 + 31 +0.0 + 0 +LINE + 5 +1E5B + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +14814.213195 + 30 +0.0 + 11 +26812.5 + 21 +14814.213195 + 31 +0.0 + 0 +LINE + 5 +1E5C + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +14792.56256 + 30 +0.0 + 11 +26775.0 + 21 +14792.56256 + 31 +0.0 + 0 +LINE + 5 +1E5D + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +14770.911925 + 30 +0.0 + 11 +26812.5 + 21 +14770.911925 + 31 +0.0 + 0 +LINE + 5 +1E5E + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +14749.26129 + 30 +0.0 + 11 +26775.0 + 21 +14749.26129 + 31 +0.0 + 0 +LINE + 5 +1E5F + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +14727.610655 + 30 +0.0 + 11 +26812.5 + 21 +14727.610655 + 31 +0.0 + 0 +LINE + 5 +1E60 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +14705.96002 + 30 +0.0 + 11 +26775.0 + 21 +14705.96002 + 31 +0.0 + 0 +LINE + 5 +1E61 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +14684.309385 + 30 +0.0 + 11 +26812.5 + 21 +14684.309385 + 31 +0.0 + 0 +LINE + 5 +1E62 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +14662.65875 + 30 +0.0 + 11 +26775.0 + 21 +14662.65875 + 31 +0.0 + 0 +LINE + 5 +1E63 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +14641.008115 + 30 +0.0 + 11 +26812.5 + 21 +14641.008115 + 31 +0.0 + 0 +LINE + 5 +1E64 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +14619.35748 + 30 +0.0 + 11 +26775.0 + 21 +14619.35748 + 31 +0.0 + 0 +LINE + 5 +1E65 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +14597.706845 + 30 +0.0 + 11 +26812.5 + 21 +14597.706845 + 31 +0.0 + 0 +LINE + 5 +1E66 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +14576.05621 + 30 +0.0 + 11 +26775.0 + 21 +14576.05621 + 31 +0.0 + 0 +LINE + 5 +1E67 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +14554.405575 + 30 +0.0 + 11 +26812.5 + 21 +14554.405575 + 31 +0.0 + 0 +LINE + 5 +1E68 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +14532.75494 + 30 +0.0 + 11 +26775.0 + 21 +14532.75494 + 31 +0.0 + 0 +LINE + 5 +1E69 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +14511.104305 + 30 +0.0 + 11 +26812.5 + 21 +14511.104305 + 31 +0.0 + 0 +LINE + 5 +1E6A + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +14489.45367 + 30 +0.0 + 11 +26775.0 + 21 +14489.45367 + 31 +0.0 + 0 +LINE + 5 +1E6B + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +14467.803035 + 30 +0.0 + 11 +26812.5 + 21 +14467.803035 + 31 +0.0 + 0 +LINE + 5 +1E6C + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +14446.1524 + 30 +0.0 + 11 +26775.0 + 21 +14446.1524 + 31 +0.0 + 0 +LINE + 5 +1E6D + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +14424.501765 + 30 +0.0 + 11 +26812.5 + 21 +14424.501765 + 31 +0.0 + 0 +LINE + 5 +1E6E + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +14402.85113 + 30 +0.0 + 11 +26775.0 + 21 +14402.85113 + 31 +0.0 + 0 +LINE + 5 +1E6F + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +14381.200495 + 30 +0.0 + 11 +26812.5 + 21 +14381.200495 + 31 +0.0 + 0 +LINE + 5 +1E70 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +14359.54986 + 30 +0.0 + 11 +26775.0 + 21 +14359.54986 + 31 +0.0 + 0 +LINE + 5 +1E71 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +14337.899225 + 30 +0.0 + 11 +26812.5 + 21 +14337.899225 + 31 +0.0 + 0 +LINE + 5 +1E72 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +14316.24859 + 30 +0.0 + 11 +26775.0 + 21 +14316.24859 + 31 +0.0 + 0 +LINE + 5 +1E73 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +14294.597955 + 30 +0.0 + 11 +26812.5 + 21 +14294.597955 + 31 +0.0 + 0 +LINE + 5 +1E74 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +14272.94732 + 30 +0.0 + 11 +26775.0 + 21 +14272.94732 + 31 +0.0 + 0 +LINE + 5 +1E75 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +14251.296685 + 30 +0.0 + 11 +26812.5 + 21 +14251.296685 + 31 +0.0 + 0 +LINE + 5 +1E76 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +14229.64605 + 30 +0.0 + 11 +26775.0 + 21 +14229.64605 + 31 +0.0 + 0 +LINE + 5 +1E77 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +14207.995415 + 30 +0.0 + 11 +26812.5 + 21 +14207.995415 + 31 +0.0 + 0 +LINE + 5 +1E78 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +14186.34478 + 30 +0.0 + 11 +26775.0 + 21 +14186.34478 + 31 +0.0 + 0 +LINE + 5 +1E79 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +14164.694145 + 30 +0.0 + 11 +26812.5 + 21 +14164.694145 + 31 +0.0 + 0 +LINE + 5 +1E7A + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +14143.04351 + 30 +0.0 + 11 +26775.0 + 21 +14143.04351 + 31 +0.0 + 0 +LINE + 5 +1E7B + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +14121.392875 + 30 +0.0 + 11 +26812.5 + 21 +14121.392875 + 31 +0.0 + 0 +LINE + 5 +1E7C + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +14099.74224 + 30 +0.0 + 11 +26775.0 + 21 +14099.74224 + 31 +0.0 + 0 +LINE + 5 +1E7D + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +14078.091605 + 30 +0.0 + 11 +26812.5 + 21 +14078.091605 + 31 +0.0 + 0 +LINE + 5 +1E7E + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +14056.44097 + 30 +0.0 + 11 +26775.0 + 21 +14056.44097 + 31 +0.0 + 0 +LINE + 5 +1E7F + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +14034.790335 + 30 +0.0 + 11 +26812.5 + 21 +14034.790335 + 31 +0.0 + 0 +LINE + 5 +1E80 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +14013.1397 + 30 +0.0 + 11 +26775.0 + 21 +14013.1397 + 31 +0.0 + 0 +LINE + 5 +1E81 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +13991.489065 + 30 +0.0 + 11 +26812.5 + 21 +13991.489065 + 31 +0.0 + 0 +LINE + 5 +1E82 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +13969.83843 + 30 +0.0 + 11 +26775.0 + 21 +13969.83843 + 31 +0.0 + 0 +LINE + 5 +1E83 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +13948.187795 + 30 +0.0 + 11 +26812.5 + 21 +13948.187795 + 31 +0.0 + 0 +LINE + 5 +1E84 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +13926.53716 + 30 +0.0 + 11 +26775.0 + 21 +13926.53716 + 31 +0.0 + 0 +LINE + 5 +1E85 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +13904.886525 + 30 +0.0 + 11 +26812.5 + 21 +13904.886525 + 31 +0.0 + 0 +LINE + 5 +1E86 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +13883.23589 + 30 +0.0 + 11 +26775.0 + 21 +13883.23589 + 31 +0.0 + 0 +LINE + 5 +1E87 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +13861.585255 + 30 +0.0 + 11 +26812.5 + 21 +13861.585255 + 31 +0.0 + 0 +LINE + 5 +1E88 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +13839.93462 + 30 +0.0 + 11 +26775.0 + 21 +13839.93462 + 31 +0.0 + 0 +LINE + 5 +1E89 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +13818.283985 + 30 +0.0 + 11 +26812.5 + 21 +13818.283985 + 31 +0.0 + 0 +LINE + 5 +1E8A + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +13796.63335 + 30 +0.0 + 11 +26775.0 + 21 +13796.63335 + 31 +0.0 + 0 +LINE + 5 +1E8B + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +13774.982715 + 30 +0.0 + 11 +26812.5 + 21 +13774.982715 + 31 +0.0 + 0 +LINE + 5 +1E8C + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +13753.33208 + 30 +0.0 + 11 +26775.0 + 21 +13753.33208 + 31 +0.0 + 0 +LINE + 5 +1E8D + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +13731.681445 + 30 +0.0 + 11 +26812.5 + 21 +13731.681445 + 31 +0.0 + 0 +LINE + 5 +1E8E + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +13710.03081 + 30 +0.0 + 11 +26775.0 + 21 +13710.03081 + 31 +0.0 + 0 +LINE + 5 +1E8F + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +13688.380175 + 30 +0.0 + 11 +26812.5 + 21 +13688.380175 + 31 +0.0 + 0 +LINE + 5 +1E90 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +13666.72954 + 30 +0.0 + 11 +26775.0 + 21 +13666.72954 + 31 +0.0 + 0 +LINE + 5 +1E91 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +13645.078905 + 30 +0.0 + 11 +26812.5 + 21 +13645.078905 + 31 +0.0 + 0 +LINE + 5 +1E92 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +13623.42827 + 30 +0.0 + 11 +26775.0 + 21 +13623.42827 + 31 +0.0 + 0 +LINE + 5 +1E93 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +13601.777635 + 30 +0.0 + 11 +26812.5 + 21 +13601.777635 + 31 +0.0 + 0 +LINE + 5 +1E94 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +13580.127 + 30 +0.0 + 11 +26775.0 + 21 +13580.127 + 31 +0.0 + 0 +LINE + 5 +1E95 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +13558.476365 + 30 +0.0 + 11 +26812.5 + 21 +13558.476365 + 31 +0.0 + 0 +LINE + 5 +1E96 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +13536.82573 + 30 +0.0 + 11 +26775.0 + 21 +13536.82573 + 31 +0.0 + 0 +LINE + 5 +1E97 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +13515.175095 + 30 +0.0 + 11 +26812.5 + 21 +13515.175095 + 31 +0.0 + 0 +LINE + 5 +1E98 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +13493.52446 + 30 +0.0 + 11 +26775.0 + 21 +13493.52446 + 31 +0.0 + 0 +LINE + 5 +1E99 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +13471.873825 + 30 +0.0 + 11 +26812.5 + 21 +13471.873825 + 31 +0.0 + 0 +LINE + 5 +1E9A + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +13450.22319 + 30 +0.0 + 11 +26775.0 + 21 +13450.22319 + 31 +0.0 + 0 +LINE + 5 +1E9B + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +13428.572555 + 30 +0.0 + 11 +26812.5 + 21 +13428.572555 + 31 +0.0 + 0 +LINE + 5 +1E9C + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +13406.92192 + 30 +0.0 + 11 +26775.0 + 21 +13406.92192 + 31 +0.0 + 0 +LINE + 5 +1E9D + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +13385.271285 + 30 +0.0 + 11 +26812.5 + 21 +13385.271285 + 31 +0.0 + 0 +LINE + 5 +1E9E + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +13363.62065 + 30 +0.0 + 11 +26775.0 + 21 +13363.62065 + 31 +0.0 + 0 +LINE + 5 +1E9F + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +13341.970015 + 30 +0.0 + 11 +26812.5 + 21 +13341.970015 + 31 +0.0 + 0 +LINE + 5 +1EA0 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +13320.31938 + 30 +0.0 + 11 +26775.0 + 21 +13320.31938 + 31 +0.0 + 0 +LINE + 5 +1EA1 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +13298.668745 + 30 +0.0 + 11 +26812.5 + 21 +13298.668745 + 31 +0.0 + 0 +LINE + 5 +1EA2 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +13277.01811 + 30 +0.0 + 11 +26775.0 + 21 +13277.01811 + 31 +0.0 + 0 +LINE + 5 +1EA3 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +13255.367475 + 30 +0.0 + 11 +26812.5 + 21 +13255.367475 + 31 +0.0 + 0 +LINE + 5 +1EA4 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +13233.71684 + 30 +0.0 + 11 +26775.0 + 21 +13233.71684 + 31 +0.0 + 0 +LINE + 5 +1EA5 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +13212.066205 + 30 +0.0 + 11 +26812.5 + 21 +13212.066205 + 31 +0.0 + 0 +LINE + 5 +1EA6 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +13190.41557 + 30 +0.0 + 11 +26775.0 + 21 +13190.41557 + 31 +0.0 + 0 +LINE + 5 +1EA7 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +13168.764935 + 30 +0.0 + 11 +26812.5 + 21 +13168.764935 + 31 +0.0 + 0 +LINE + 5 +1EA8 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +13147.1143 + 30 +0.0 + 11 +26775.0 + 21 +13147.1143 + 31 +0.0 + 0 +LINE + 5 +1EA9 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +13125.463665 + 30 +0.0 + 11 +26812.5 + 21 +13125.463665 + 31 +0.0 + 0 +LINE + 5 +1EAA + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +13103.81303 + 30 +0.0 + 11 +26775.0 + 21 +13103.81303 + 31 +0.0 + 0 +LINE + 5 +1EAB + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +13082.162395 + 30 +0.0 + 11 +26812.5 + 21 +13082.162395 + 31 +0.0 + 0 +LINE + 5 +1EAC + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +13060.51176 + 30 +0.0 + 11 +26775.0 + 21 +13060.51176 + 31 +0.0 + 0 +LINE + 5 +1EAD + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +13038.861125 + 30 +0.0 + 11 +26812.5 + 21 +13038.861125 + 31 +0.0 + 0 +LINE + 5 +1EAE + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +13017.21049 + 30 +0.0 + 11 +26775.0 + 21 +13017.21049 + 31 +0.0 + 0 +LINE + 5 +1EAF + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +12995.559855 + 30 +0.0 + 11 +26812.5 + 21 +12995.559855 + 31 +0.0 + 0 +LINE + 5 +1EB0 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +12973.90922 + 30 +0.0 + 11 +26775.0 + 21 +12973.90922 + 31 +0.0 + 0 +LINE + 5 +1EB1 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +12952.258585 + 30 +0.0 + 11 +26812.5 + 21 +12952.258585 + 31 +0.0 + 0 +LINE + 5 +1EB2 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +12930.60795 + 30 +0.0 + 11 +26775.0 + 21 +12930.60795 + 31 +0.0 + 0 +LINE + 5 +1EB3 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +12908.957315 + 30 +0.0 + 11 +26812.5 + 21 +12908.957315 + 31 +0.0 + 0 +LINE + 5 +1EB4 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +12887.30668 + 30 +0.0 + 11 +26775.0 + 21 +12887.30668 + 31 +0.0 + 0 +LINE + 5 +1EB5 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +12865.656045 + 30 +0.0 + 11 +26812.5 + 21 +12865.656045 + 31 +0.0 + 0 +LINE + 5 +1EB6 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +12844.00541 + 30 +0.0 + 11 +26775.0 + 21 +12844.00541 + 31 +0.0 + 0 +LINE + 5 +1EB7 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +12822.354775 + 30 +0.0 + 11 +26812.5 + 21 +12822.354775 + 31 +0.0 + 0 +LINE + 5 +1EB8 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +12800.70414 + 30 +0.0 + 11 +26775.0 + 21 +12800.70414 + 31 +0.0 + 0 +LINE + 5 +1EB9 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +12779.053505 + 30 +0.0 + 11 +26812.5 + 21 +12779.053505 + 31 +0.0 + 0 +LINE + 5 +1EBA + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +12757.40287 + 30 +0.0 + 11 +26775.0 + 21 +12757.40287 + 31 +0.0 + 0 +LINE + 5 +1EBB + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +12735.752235 + 30 +0.0 + 11 +26812.5 + 21 +12735.752235 + 31 +0.0 + 0 +LINE + 5 +1EBC + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +12714.1016 + 30 +0.0 + 11 +26775.0 + 21 +12714.1016 + 31 +0.0 + 0 +LINE + 5 +1EBD + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +12692.450965 + 30 +0.0 + 11 +26812.5 + 21 +12692.450965 + 31 +0.0 + 0 +LINE + 5 +1EBE + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +12670.80033 + 30 +0.0 + 11 +26775.0 + 21 +12670.80033 + 31 +0.0 + 0 +LINE + 5 +1EBF + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +12649.149695 + 30 +0.0 + 11 +26812.5 + 21 +12649.149695 + 31 +0.0 + 0 +LINE + 5 +1EC0 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +12627.49906 + 30 +0.0 + 11 +26775.0 + 21 +12627.49906 + 31 +0.0 + 0 +LINE + 5 +1EC1 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +12605.848425 + 30 +0.0 + 11 +26812.5 + 21 +12605.848425 + 31 +0.0 + 0 +LINE + 5 +1EC2 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +12584.19779 + 30 +0.0 + 11 +26775.0 + 21 +12584.19779 + 31 +0.0 + 0 +LINE + 5 +1EC3 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +12562.547155 + 30 +0.0 + 11 +26812.5 + 21 +12562.547155 + 31 +0.0 + 0 +LINE + 5 +1EC4 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +12540.89652 + 30 +0.0 + 11 +26775.0 + 21 +12540.89652 + 31 +0.0 + 0 +LINE + 5 +1EC5 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +12519.245885 + 30 +0.0 + 11 +26812.5 + 21 +12519.245885 + 31 +0.0 + 0 +LINE + 5 +1EC6 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +12497.59525 + 30 +0.0 + 11 +26775.0 + 21 +12497.59525 + 31 +0.0 + 0 +LINE + 5 +1EC7 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +12475.944615 + 30 +0.0 + 11 +26812.5 + 21 +12475.944615 + 31 +0.0 + 0 +LINE + 5 +1EC8 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +12454.29398 + 30 +0.0 + 11 +26775.0 + 21 +12454.29398 + 31 +0.0 + 0 +LINE + 5 +1EC9 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +12432.643345 + 30 +0.0 + 11 +26812.5 + 21 +12432.643345 + 31 +0.0 + 0 +LINE + 5 +1ECA + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +12410.99271 + 30 +0.0 + 11 +26775.0 + 21 +12410.99271 + 31 +0.0 + 0 +LINE + 5 +1ECB + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +12389.342075 + 30 +0.0 + 11 +26812.5 + 21 +12389.342075 + 31 +0.0 + 0 +LINE + 5 +1ECC + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +12367.69144 + 30 +0.0 + 11 +26775.0 + 21 +12367.69144 + 31 +0.0 + 0 +LINE + 5 +1ECD + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +12346.040805 + 30 +0.0 + 11 +26812.5 + 21 +12346.040805 + 31 +0.0 + 0 +LINE + 5 +1ECE + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +12324.39017 + 30 +0.0 + 11 +26775.0 + 21 +12324.39017 + 31 +0.0 + 0 +LINE + 5 +1ECF + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +12302.739535 + 30 +0.0 + 11 +26812.5 + 21 +12302.739535 + 31 +0.0 + 0 +LINE + 5 +1ED0 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +12281.0889 + 30 +0.0 + 11 +26775.0 + 21 +12281.0889 + 31 +0.0 + 0 +LINE + 5 +1ED1 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +12259.438265 + 30 +0.0 + 11 +26812.5 + 21 +12259.438265 + 31 +0.0 + 0 +LINE + 5 +1ED2 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +12237.78763 + 30 +0.0 + 11 +26775.0 + 21 +12237.78763 + 31 +0.0 + 0 +LINE + 5 +1ED3 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +12216.136995 + 30 +0.0 + 11 +26812.5 + 21 +12216.136995 + 31 +0.0 + 0 +LINE + 5 +1ED4 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +12194.48636 + 30 +0.0 + 11 +26775.0 + 21 +12194.48636 + 31 +0.0 + 0 +LINE + 5 +1ED5 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +12172.835725 + 30 +0.0 + 11 +26812.5 + 21 +12172.835725 + 31 +0.0 + 0 +LINE + 5 +1ED6 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +12151.18509 + 30 +0.0 + 11 +26775.0 + 21 +12151.18509 + 31 +0.0 + 0 +LINE + 5 +1ED7 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +12129.534455 + 30 +0.0 + 11 +26812.5 + 21 +12129.534455 + 31 +0.0 + 0 +LINE + 5 +1ED8 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +12107.88382 + 30 +0.0 + 11 +26775.0 + 21 +12107.88382 + 31 +0.0 + 0 +LINE + 5 +1ED9 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +12086.233185 + 30 +0.0 + 11 +26812.5 + 21 +12086.233185 + 31 +0.0 + 0 +LINE + 5 +1EDA + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +12064.58255 + 30 +0.0 + 11 +26775.0 + 21 +12064.58255 + 31 +0.0 + 0 +LINE + 5 +1EDB + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +12042.931915 + 30 +0.0 + 11 +26812.5 + 21 +12042.931915 + 31 +0.0 + 0 +LINE + 5 +1EDC + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +12021.28128 + 30 +0.0 + 11 +26775.0 + 21 +12021.28128 + 31 +0.0 + 0 +LINE + 5 +1EDD + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +11999.630645 + 30 +0.0 + 11 +26812.5 + 21 +11999.630645 + 31 +0.0 + 0 +LINE + 5 +1EDE + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +14757.921379 + 30 +0.0 + 11 +26812.499918 + 21 +14770.911902 + 31 +0.0 + 0 +LINE + 5 +1EDF + 8 +0 + 62 + 0 + 10 +26787.499918 + 20 +14814.213172 + 30 +0.0 + 11 +26774.999918 + 21 +14835.863807 + 31 +0.0 + 0 +LINE + 5 +1EE0 + 8 +0 + 62 + 0 + 10 +26749.999918 + 20 +14879.165077 + 30 +0.0 + 11 +26740.0 + 21 +14896.485443 + 31 +0.0 + 0 +LINE + 5 +1EE1 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +14714.620109 + 30 +0.0 + 11 +26812.499918 + 21 +14727.610632 + 31 +0.0 + 0 +LINE + 5 +1EE2 + 8 +0 + 62 + 0 + 10 +26787.499918 + 20 +14770.911902 + 30 +0.0 + 11 +26774.999918 + 21 +14792.562537 + 31 +0.0 + 0 +LINE + 5 +1EE3 + 8 +0 + 62 + 0 + 10 +26749.999918 + 20 +14835.863807 + 30 +0.0 + 11 +26740.0 + 21 +14853.184173 + 31 +0.0 + 0 +LINE + 5 +1EE4 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +14671.318839 + 30 +0.0 + 11 +26812.499918 + 21 +14684.309362 + 31 +0.0 + 0 +LINE + 5 +1EE5 + 8 +0 + 62 + 0 + 10 +26787.499918 + 20 +14727.610632 + 30 +0.0 + 11 +26774.999918 + 21 +14749.261267 + 31 +0.0 + 0 +LINE + 5 +1EE6 + 8 +0 + 62 + 0 + 10 +26749.999918 + 20 +14792.562537 + 30 +0.0 + 11 +26740.0 + 21 +14809.882903 + 31 +0.0 + 0 +LINE + 5 +1EE7 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +14628.017569 + 30 +0.0 + 11 +26812.499918 + 21 +14641.008091 + 31 +0.0 + 0 +LINE + 5 +1EE8 + 8 +0 + 62 + 0 + 10 +26787.499918 + 20 +14684.309362 + 30 +0.0 + 11 +26774.999918 + 21 +14705.959997 + 31 +0.0 + 0 +LINE + 5 +1EE9 + 8 +0 + 62 + 0 + 10 +26749.999918 + 20 +14749.261267 + 30 +0.0 + 11 +26740.0 + 21 +14766.581633 + 31 +0.0 + 0 +LINE + 5 +1EEA + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +14584.716299 + 30 +0.0 + 11 +26812.499918 + 21 +14597.706821 + 31 +0.0 + 0 +LINE + 5 +1EEB + 8 +0 + 62 + 0 + 10 +26787.499918 + 20 +14641.008091 + 30 +0.0 + 11 +26774.999918 + 21 +14662.658727 + 31 +0.0 + 0 +LINE + 5 +1EEC + 8 +0 + 62 + 0 + 10 +26749.999918 + 20 +14705.959997 + 30 +0.0 + 11 +26740.0 + 21 +14723.280363 + 31 +0.0 + 0 +LINE + 5 +1EED + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +14541.415029 + 30 +0.0 + 11 +26812.499918 + 21 +14554.405551 + 31 +0.0 + 0 +LINE + 5 +1EEE + 8 +0 + 62 + 0 + 10 +26787.499918 + 20 +14597.706821 + 30 +0.0 + 11 +26774.999918 + 21 +14619.357456 + 31 +0.0 + 0 +LINE + 5 +1EEF + 8 +0 + 62 + 0 + 10 +26749.999918 + 20 +14662.658727 + 30 +0.0 + 11 +26740.0 + 21 +14679.979093 + 31 +0.0 + 0 +LINE + 5 +1EF0 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +14498.113759 + 30 +0.0 + 11 +26812.499919 + 21 +14511.104281 + 31 +0.0 + 0 +LINE + 5 +1EF1 + 8 +0 + 62 + 0 + 10 +26787.499919 + 20 +14554.405551 + 30 +0.0 + 11 +26774.999919 + 21 +14576.056186 + 31 +0.0 + 0 +LINE + 5 +1EF2 + 8 +0 + 62 + 0 + 10 +26749.999919 + 20 +14619.357456 + 30 +0.0 + 11 +26740.0 + 21 +14636.677823 + 31 +0.0 + 0 +LINE + 5 +1EF3 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +14454.812489 + 30 +0.0 + 11 +26812.499919 + 21 +14467.803011 + 31 +0.0 + 0 +LINE + 5 +1EF4 + 8 +0 + 62 + 0 + 10 +26787.499919 + 20 +14511.104281 + 30 +0.0 + 11 +26774.999919 + 21 +14532.754916 + 31 +0.0 + 0 +LINE + 5 +1EF5 + 8 +0 + 62 + 0 + 10 +26749.999919 + 20 +14576.056186 + 30 +0.0 + 11 +26740.0 + 21 +14593.376553 + 31 +0.0 + 0 +LINE + 5 +1EF6 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +14411.511219 + 30 +0.0 + 11 +26812.499919 + 21 +14424.501741 + 31 +0.0 + 0 +LINE + 5 +1EF7 + 8 +0 + 62 + 0 + 10 +26787.499919 + 20 +14467.803011 + 30 +0.0 + 11 +26774.999919 + 21 +14489.453646 + 31 +0.0 + 0 +LINE + 5 +1EF8 + 8 +0 + 62 + 0 + 10 +26749.999919 + 20 +14532.754916 + 30 +0.0 + 11 +26740.0 + 21 +14550.075283 + 31 +0.0 + 0 +LINE + 5 +1EF9 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +14368.209949 + 30 +0.0 + 11 +26812.499919 + 21 +14381.200471 + 31 +0.0 + 0 +LINE + 5 +1EFA + 8 +0 + 62 + 0 + 10 +26787.499919 + 20 +14424.501741 + 30 +0.0 + 11 +26774.999919 + 21 +14446.152376 + 31 +0.0 + 0 +LINE + 5 +1EFB + 8 +0 + 62 + 0 + 10 +26749.999919 + 20 +14489.453646 + 30 +0.0 + 11 +26740.0 + 21 +14506.774013 + 31 +0.0 + 0 +LINE + 5 +1EFC + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +14324.908679 + 30 +0.0 + 11 +26812.499919 + 21 +14337.8992 + 31 +0.0 + 0 +LINE + 5 +1EFD + 8 +0 + 62 + 0 + 10 +26787.499919 + 20 +14381.200471 + 30 +0.0 + 11 +26774.999919 + 21 +14402.851106 + 31 +0.0 + 0 +LINE + 5 +1EFE + 8 +0 + 62 + 0 + 10 +26749.999919 + 20 +14446.152376 + 30 +0.0 + 11 +26740.0 + 21 +14463.472743 + 31 +0.0 + 0 +LINE + 5 +1EFF + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +14281.607409 + 30 +0.0 + 11 +26812.499919 + 21 +14294.59793 + 31 +0.0 + 0 +LINE + 5 +1F00 + 8 +0 + 62 + 0 + 10 +26787.499919 + 20 +14337.8992 + 30 +0.0 + 11 +26774.999919 + 21 +14359.549836 + 31 +0.0 + 0 +LINE + 5 +1F01 + 8 +0 + 62 + 0 + 10 +26749.999919 + 20 +14402.851106 + 30 +0.0 + 11 +26740.0 + 21 +14420.171473 + 31 +0.0 + 0 +LINE + 5 +1F02 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +14238.306139 + 30 +0.0 + 11 +26812.499919 + 21 +14251.29666 + 31 +0.0 + 0 +LINE + 5 +1F03 + 8 +0 + 62 + 0 + 10 +26787.499919 + 20 +14294.59793 + 30 +0.0 + 11 +26774.999919 + 21 +14316.248565 + 31 +0.0 + 0 +LINE + 5 +1F04 + 8 +0 + 62 + 0 + 10 +26749.999919 + 20 +14359.549836 + 30 +0.0 + 11 +26740.0 + 21 +14376.870203 + 31 +0.0 + 0 +LINE + 5 +1F05 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +14195.004869 + 30 +0.0 + 11 +26812.499919 + 21 +14207.99539 + 31 +0.0 + 0 +LINE + 5 +1F06 + 8 +0 + 62 + 0 + 10 +26787.499919 + 20 +14251.29666 + 30 +0.0 + 11 +26774.999919 + 21 +14272.947295 + 31 +0.0 + 0 +LINE + 5 +1F07 + 8 +0 + 62 + 0 + 10 +26749.999919 + 20 +14316.248565 + 30 +0.0 + 11 +26740.0 + 21 +14333.568933 + 31 +0.0 + 0 +LINE + 5 +1F08 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +14151.703599 + 30 +0.0 + 11 +26812.499919 + 21 +14164.69412 + 31 +0.0 + 0 +LINE + 5 +1F09 + 8 +0 + 62 + 0 + 10 +26787.499919 + 20 +14207.99539 + 30 +0.0 + 11 +26774.999919 + 21 +14229.646025 + 31 +0.0 + 0 +LINE + 5 +1F0A + 8 +0 + 62 + 0 + 10 +26749.999919 + 20 +14272.947295 + 30 +0.0 + 11 +26740.0 + 21 +14290.267663 + 31 +0.0 + 0 +LINE + 5 +1F0B + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +14108.402329 + 30 +0.0 + 11 +26812.499919 + 21 +14121.39285 + 31 +0.0 + 0 +LINE + 5 +1F0C + 8 +0 + 62 + 0 + 10 +26787.499919 + 20 +14164.69412 + 30 +0.0 + 11 +26774.999919 + 21 +14186.344755 + 31 +0.0 + 0 +LINE + 5 +1F0D + 8 +0 + 62 + 0 + 10 +26749.999919 + 20 +14229.646025 + 30 +0.0 + 11 +26740.0 + 21 +14246.966393 + 31 +0.0 + 0 +LINE + 5 +1F0E + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +14065.101059 + 30 +0.0 + 11 +26812.499919 + 21 +14078.09158 + 31 +0.0 + 0 +LINE + 5 +1F0F + 8 +0 + 62 + 0 + 10 +26787.499919 + 20 +14121.39285 + 30 +0.0 + 11 +26774.999919 + 21 +14143.043485 + 31 +0.0 + 0 +LINE + 5 +1F10 + 8 +0 + 62 + 0 + 10 +26749.999919 + 20 +14186.344755 + 30 +0.0 + 11 +26740.0 + 21 +14203.665123 + 31 +0.0 + 0 +LINE + 5 +1F11 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +14021.799789 + 30 +0.0 + 11 +26812.499919 + 21 +14034.790309 + 31 +0.0 + 0 +LINE + 5 +1F12 + 8 +0 + 62 + 0 + 10 +26787.499919 + 20 +14078.09158 + 30 +0.0 + 11 +26774.999919 + 21 +14099.742215 + 31 +0.0 + 0 +LINE + 5 +1F13 + 8 +0 + 62 + 0 + 10 +26749.999919 + 20 +14143.043485 + 30 +0.0 + 11 +26740.0 + 21 +14160.363853 + 31 +0.0 + 0 +LINE + 5 +1F14 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +13978.498519 + 30 +0.0 + 11 +26812.49992 + 21 +13991.489039 + 31 +0.0 + 0 +LINE + 5 +1F15 + 8 +0 + 62 + 0 + 10 +26787.49992 + 20 +14034.790309 + 30 +0.0 + 11 +26774.99992 + 21 +14056.440945 + 31 +0.0 + 0 +LINE + 5 +1F16 + 8 +0 + 62 + 0 + 10 +26749.99992 + 20 +14099.742215 + 30 +0.0 + 11 +26740.0 + 21 +14117.062583 + 31 +0.0 + 0 +LINE + 5 +1F17 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +13935.197249 + 30 +0.0 + 11 +26812.49992 + 21 +13948.187769 + 31 +0.0 + 0 +LINE + 5 +1F18 + 8 +0 + 62 + 0 + 10 +26787.49992 + 20 +13991.489039 + 30 +0.0 + 11 +26774.99992 + 21 +14013.139674 + 31 +0.0 + 0 +LINE + 5 +1F19 + 8 +0 + 62 + 0 + 10 +26749.99992 + 20 +14056.440945 + 30 +0.0 + 11 +26740.0 + 21 +14073.761313 + 31 +0.0 + 0 +LINE + 5 +1F1A + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +13891.895979 + 30 +0.0 + 11 +26812.49992 + 21 +13904.886499 + 31 +0.0 + 0 +LINE + 5 +1F1B + 8 +0 + 62 + 0 + 10 +26787.49992 + 20 +13948.187769 + 30 +0.0 + 11 +26774.99992 + 21 +13969.838404 + 31 +0.0 + 0 +LINE + 5 +1F1C + 8 +0 + 62 + 0 + 10 +26749.99992 + 20 +14013.139674 + 30 +0.0 + 11 +26740.0 + 21 +14030.460043 + 31 +0.0 + 0 +LINE + 5 +1F1D + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +13848.594709 + 30 +0.0 + 11 +26812.49992 + 21 +13861.585229 + 31 +0.0 + 0 +LINE + 5 +1F1E + 8 +0 + 62 + 0 + 10 +26787.49992 + 20 +13904.886499 + 30 +0.0 + 11 +26774.99992 + 21 +13926.537134 + 31 +0.0 + 0 +LINE + 5 +1F1F + 8 +0 + 62 + 0 + 10 +26749.99992 + 20 +13969.838404 + 30 +0.0 + 11 +26740.0 + 21 +13987.158773 + 31 +0.0 + 0 +LINE + 5 +1F20 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +13805.293439 + 30 +0.0 + 11 +26812.49992 + 21 +13818.283959 + 31 +0.0 + 0 +LINE + 5 +1F21 + 8 +0 + 62 + 0 + 10 +26787.49992 + 20 +13861.585229 + 30 +0.0 + 11 +26774.99992 + 21 +13883.235864 + 31 +0.0 + 0 +LINE + 5 +1F22 + 8 +0 + 62 + 0 + 10 +26749.99992 + 20 +13926.537134 + 30 +0.0 + 11 +26740.0 + 21 +13943.857503 + 31 +0.0 + 0 +LINE + 5 +1F23 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +13761.992169 + 30 +0.0 + 11 +26812.49992 + 21 +13774.982689 + 31 +0.0 + 0 +LINE + 5 +1F24 + 8 +0 + 62 + 0 + 10 +26787.49992 + 20 +13818.283959 + 30 +0.0 + 11 +26774.99992 + 21 +13839.934594 + 31 +0.0 + 0 +LINE + 5 +1F25 + 8 +0 + 62 + 0 + 10 +26749.99992 + 20 +13883.235864 + 30 +0.0 + 11 +26740.0 + 21 +13900.556233 + 31 +0.0 + 0 +LINE + 5 +1F26 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +13718.690899 + 30 +0.0 + 11 +26812.49992 + 21 +13731.681418 + 31 +0.0 + 0 +LINE + 5 +1F27 + 8 +0 + 62 + 0 + 10 +26787.49992 + 20 +13774.982689 + 30 +0.0 + 11 +26774.99992 + 21 +13796.633324 + 31 +0.0 + 0 +LINE + 5 +1F28 + 8 +0 + 62 + 0 + 10 +26749.99992 + 20 +13839.934594 + 30 +0.0 + 11 +26740.0 + 21 +13857.254963 + 31 +0.0 + 0 +LINE + 5 +1F29 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +13675.389629 + 30 +0.0 + 11 +26812.49992 + 21 +13688.380148 + 31 +0.0 + 0 +LINE + 5 +1F2A + 8 +0 + 62 + 0 + 10 +26787.49992 + 20 +13731.681418 + 30 +0.0 + 11 +26774.99992 + 21 +13753.332054 + 31 +0.0 + 0 +LINE + 5 +1F2B + 8 +0 + 62 + 0 + 10 +26749.99992 + 20 +13796.633324 + 30 +0.0 + 11 +26740.0 + 21 +13813.953693 + 31 +0.0 + 0 +LINE + 5 +1F2C + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +13632.088359 + 30 +0.0 + 11 +26812.49992 + 21 +13645.078878 + 31 +0.0 + 0 +LINE + 5 +1F2D + 8 +0 + 62 + 0 + 10 +26787.49992 + 20 +13688.380148 + 30 +0.0 + 11 +26774.99992 + 21 +13710.030783 + 31 +0.0 + 0 +LINE + 5 +1F2E + 8 +0 + 62 + 0 + 10 +26749.99992 + 20 +13753.332054 + 30 +0.0 + 11 +26740.0 + 21 +13770.652423 + 31 +0.0 + 0 +LINE + 5 +1F2F + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +13588.787089 + 30 +0.0 + 11 +26812.49992 + 21 +13601.777608 + 31 +0.0 + 0 +LINE + 5 +1F30 + 8 +0 + 62 + 0 + 10 +26787.49992 + 20 +13645.078878 + 30 +0.0 + 11 +26774.99992 + 21 +13666.729513 + 31 +0.0 + 0 +LINE + 5 +1F31 + 8 +0 + 62 + 0 + 10 +26749.99992 + 20 +13710.030783 + 30 +0.0 + 11 +26740.0 + 21 +13727.351153 + 31 +0.0 + 0 +LINE + 5 +1F32 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +13545.485819 + 30 +0.0 + 11 +26812.49992 + 21 +13558.476338 + 31 +0.0 + 0 +LINE + 5 +1F33 + 8 +0 + 62 + 0 + 10 +26787.49992 + 20 +13601.777608 + 30 +0.0 + 11 +26774.99992 + 21 +13623.428243 + 31 +0.0 + 0 +LINE + 5 +1F34 + 8 +0 + 62 + 0 + 10 +26749.99992 + 20 +13666.729513 + 30 +0.0 + 11 +26740.0 + 21 +13684.049883 + 31 +0.0 + 0 +LINE + 5 +1F35 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +13502.184549 + 30 +0.0 + 11 +26812.49992 + 21 +13515.175068 + 31 +0.0 + 0 +LINE + 5 +1F36 + 8 +0 + 62 + 0 + 10 +26787.49992 + 20 +13558.476338 + 30 +0.0 + 11 +26774.99992 + 21 +13580.126973 + 31 +0.0 + 0 +LINE + 5 +1F37 + 8 +0 + 62 + 0 + 10 +26749.99992 + 20 +13623.428243 + 30 +0.0 + 11 +26740.0 + 21 +13640.748613 + 31 +0.0 + 0 +LINE + 5 +1F38 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +13458.883279 + 30 +0.0 + 11 +26812.499921 + 21 +13471.873798 + 31 +0.0 + 0 +LINE + 5 +1F39 + 8 +0 + 62 + 0 + 10 +26787.499921 + 20 +13515.175068 + 30 +0.0 + 11 +26774.999921 + 21 +13536.825703 + 31 +0.0 + 0 +LINE + 5 +1F3A + 8 +0 + 62 + 0 + 10 +26749.999921 + 20 +13580.126973 + 30 +0.0 + 11 +26740.0 + 21 +13597.447343 + 31 +0.0 + 0 +LINE + 5 +1F3B + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +13415.582009 + 30 +0.0 + 11 +26812.499921 + 21 +13428.572527 + 31 +0.0 + 0 +LINE + 5 +1F3C + 8 +0 + 62 + 0 + 10 +26787.499921 + 20 +13471.873798 + 30 +0.0 + 11 +26774.999921 + 21 +13493.524433 + 31 +0.0 + 0 +LINE + 5 +1F3D + 8 +0 + 62 + 0 + 10 +26749.999921 + 20 +13536.825703 + 30 +0.0 + 11 +26740.0 + 21 +13554.146073 + 31 +0.0 + 0 +LINE + 5 +1F3E + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +13372.280739 + 30 +0.0 + 11 +26812.499921 + 21 +13385.271257 + 31 +0.0 + 0 +LINE + 5 +1F3F + 8 +0 + 62 + 0 + 10 +26787.499921 + 20 +13428.572527 + 30 +0.0 + 11 +26774.999921 + 21 +13450.223163 + 31 +0.0 + 0 +LINE + 5 +1F40 + 8 +0 + 62 + 0 + 10 +26749.999921 + 20 +13493.524433 + 30 +0.0 + 11 +26740.0 + 21 +13510.844803 + 31 +0.0 + 0 +LINE + 5 +1F41 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +13328.979469 + 30 +0.0 + 11 +26812.499921 + 21 +13341.969987 + 31 +0.0 + 0 +LINE + 5 +1F42 + 8 +0 + 62 + 0 + 10 +26787.499921 + 20 +13385.271257 + 30 +0.0 + 11 +26774.999921 + 21 +13406.921892 + 31 +0.0 + 0 +LINE + 5 +1F43 + 8 +0 + 62 + 0 + 10 +26749.999921 + 20 +13450.223163 + 30 +0.0 + 11 +26740.0 + 21 +13467.543533 + 31 +0.0 + 0 +LINE + 5 +1F44 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +13285.678199 + 30 +0.0 + 11 +26812.499921 + 21 +13298.668717 + 31 +0.0 + 0 +LINE + 5 +1F45 + 8 +0 + 62 + 0 + 10 +26787.499921 + 20 +13341.969987 + 30 +0.0 + 11 +26774.999921 + 21 +13363.620622 + 31 +0.0 + 0 +LINE + 5 +1F46 + 8 +0 + 62 + 0 + 10 +26749.999921 + 20 +13406.921892 + 30 +0.0 + 11 +26740.0 + 21 +13424.242263 + 31 +0.0 + 0 +LINE + 5 +1F47 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +13242.376929 + 30 +0.0 + 11 +26812.499921 + 21 +13255.367447 + 31 +0.0 + 0 +LINE + 5 +1F48 + 8 +0 + 62 + 0 + 10 +26787.499921 + 20 +13298.668717 + 30 +0.0 + 11 +26774.999921 + 21 +13320.319352 + 31 +0.0 + 0 +LINE + 5 +1F49 + 8 +0 + 62 + 0 + 10 +26749.999921 + 20 +13363.620622 + 30 +0.0 + 11 +26740.0 + 21 +13380.940993 + 31 +0.0 + 0 +LINE + 5 +1F4A + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +13199.075659 + 30 +0.0 + 11 +26812.499921 + 21 +13212.066177 + 31 +0.0 + 0 +LINE + 5 +1F4B + 8 +0 + 62 + 0 + 10 +26787.499921 + 20 +13255.367447 + 30 +0.0 + 11 +26774.999921 + 21 +13277.018082 + 31 +0.0 + 0 +LINE + 5 +1F4C + 8 +0 + 62 + 0 + 10 +26749.999921 + 20 +13320.319352 + 30 +0.0 + 11 +26740.0 + 21 +13337.639723 + 31 +0.0 + 0 +LINE + 5 +1F4D + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +13155.774389 + 30 +0.0 + 11 +26812.499921 + 21 +13168.764907 + 31 +0.0 + 0 +LINE + 5 +1F4E + 8 +0 + 62 + 0 + 10 +26787.499921 + 20 +13212.066177 + 30 +0.0 + 11 +26774.999921 + 21 +13233.716812 + 31 +0.0 + 0 +LINE + 5 +1F4F + 8 +0 + 62 + 0 + 10 +26749.999921 + 20 +13277.018082 + 30 +0.0 + 11 +26740.0 + 21 +13294.338453 + 31 +0.0 + 0 +LINE + 5 +1F50 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +13112.473119 + 30 +0.0 + 11 +26812.499921 + 21 +13125.463636 + 31 +0.0 + 0 +LINE + 5 +1F51 + 8 +0 + 62 + 0 + 10 +26787.499921 + 20 +13168.764907 + 30 +0.0 + 11 +26774.999921 + 21 +13190.415542 + 31 +0.0 + 0 +LINE + 5 +1F52 + 8 +0 + 62 + 0 + 10 +26749.999921 + 20 +13233.716812 + 30 +0.0 + 11 +26740.0 + 21 +13251.037183 + 31 +0.0 + 0 +LINE + 5 +1F53 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +13069.171849 + 30 +0.0 + 11 +26812.499921 + 21 +13082.162366 + 31 +0.0 + 0 +LINE + 5 +1F54 + 8 +0 + 62 + 0 + 10 +26787.499921 + 20 +13125.463636 + 30 +0.0 + 11 +26774.999921 + 21 +13147.114272 + 31 +0.0 + 0 +LINE + 5 +1F55 + 8 +0 + 62 + 0 + 10 +26749.999921 + 20 +13190.415542 + 30 +0.0 + 11 +26740.0 + 21 +13207.735913 + 31 +0.0 + 0 +LINE + 5 +1F56 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +13025.870579 + 30 +0.0 + 11 +26812.499921 + 21 +13038.861096 + 31 +0.0 + 0 +LINE + 5 +1F57 + 8 +0 + 62 + 0 + 10 +26787.499921 + 20 +13082.162366 + 30 +0.0 + 11 +26774.999921 + 21 +13103.813001 + 31 +0.0 + 0 +LINE + 5 +1F58 + 8 +0 + 62 + 0 + 10 +26749.999921 + 20 +13147.114272 + 30 +0.0 + 11 +26740.0 + 21 +13164.434643 + 31 +0.0 + 0 +LINE + 5 +1F59 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +12982.569309 + 30 +0.0 + 11 +26812.499921 + 21 +12995.559826 + 31 +0.0 + 0 +LINE + 5 +1F5A + 8 +0 + 62 + 0 + 10 +26787.499921 + 20 +13038.861096 + 30 +0.0 + 11 +26774.999921 + 21 +13060.511731 + 31 +0.0 + 0 +LINE + 5 +1F5B + 8 +0 + 62 + 0 + 10 +26749.999921 + 20 +13103.813001 + 30 +0.0 + 11 +26740.0 + 21 +13121.133373 + 31 +0.0 + 0 +LINE + 5 +1F5C + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +12939.268039 + 30 +0.0 + 11 +26812.499922 + 21 +12952.258556 + 31 +0.0 + 0 +LINE + 5 +1F5D + 8 +0 + 62 + 0 + 10 +26787.499922 + 20 +12995.559826 + 30 +0.0 + 11 +26774.999922 + 21 +13017.210461 + 31 +0.0 + 0 +LINE + 5 +1F5E + 8 +0 + 62 + 0 + 10 +26749.999922 + 20 +13060.511731 + 30 +0.0 + 11 +26740.0 + 21 +13077.832103 + 31 +0.0 + 0 +LINE + 5 +1F5F + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +12895.966769 + 30 +0.0 + 11 +26812.499922 + 21 +12908.957286 + 31 +0.0 + 0 +LINE + 5 +1F60 + 8 +0 + 62 + 0 + 10 +26787.499922 + 20 +12952.258556 + 30 +0.0 + 11 +26774.999922 + 21 +12973.909191 + 31 +0.0 + 0 +LINE + 5 +1F61 + 8 +0 + 62 + 0 + 10 +26749.999922 + 20 +13017.210461 + 30 +0.0 + 11 +26740.0 + 21 +13034.530833 + 31 +0.0 + 0 +LINE + 5 +1F62 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +12852.665499 + 30 +0.0 + 11 +26812.499922 + 21 +12865.656016 + 31 +0.0 + 0 +LINE + 5 +1F63 + 8 +0 + 62 + 0 + 10 +26787.499922 + 20 +12908.957286 + 30 +0.0 + 11 +26774.999922 + 21 +12930.607921 + 31 +0.0 + 0 +LINE + 5 +1F64 + 8 +0 + 62 + 0 + 10 +26749.999922 + 20 +12973.909191 + 30 +0.0 + 11 +26740.0 + 21 +12991.229563 + 31 +0.0 + 0 +LINE + 5 +1F65 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +12809.364229 + 30 +0.0 + 11 +26812.499922 + 21 +12822.354745 + 31 +0.0 + 0 +LINE + 5 +1F66 + 8 +0 + 62 + 0 + 10 +26787.499922 + 20 +12865.656016 + 30 +0.0 + 11 +26774.999922 + 21 +12887.306651 + 31 +0.0 + 0 +LINE + 5 +1F67 + 8 +0 + 62 + 0 + 10 +26749.999922 + 20 +12930.607921 + 30 +0.0 + 11 +26740.0 + 21 +12947.928293 + 31 +0.0 + 0 +LINE + 5 +1F68 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +12766.062959 + 30 +0.0 + 11 +26812.499922 + 21 +12779.053475 + 31 +0.0 + 0 +LINE + 5 +1F69 + 8 +0 + 62 + 0 + 10 +26787.499922 + 20 +12822.354745 + 30 +0.0 + 11 +26774.999922 + 21 +12844.005381 + 31 +0.0 + 0 +LINE + 5 +1F6A + 8 +0 + 62 + 0 + 10 +26749.999922 + 20 +12887.306651 + 30 +0.0 + 11 +26740.0 + 21 +12904.627023 + 31 +0.0 + 0 +LINE + 5 +1F6B + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +12722.761689 + 30 +0.0 + 11 +26812.499922 + 21 +12735.752205 + 31 +0.0 + 0 +LINE + 5 +1F6C + 8 +0 + 62 + 0 + 10 +26787.499922 + 20 +12779.053475 + 30 +0.0 + 11 +26774.999922 + 21 +12800.70411 + 31 +0.0 + 0 +LINE + 5 +1F6D + 8 +0 + 62 + 0 + 10 +26749.999922 + 20 +12844.005381 + 30 +0.0 + 11 +26740.0 + 21 +12861.325753 + 31 +0.0 + 0 +LINE + 5 +1F6E + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +12679.460419 + 30 +0.0 + 11 +26812.499922 + 21 +12692.450935 + 31 +0.0 + 0 +LINE + 5 +1F6F + 8 +0 + 62 + 0 + 10 +26787.499922 + 20 +12735.752205 + 30 +0.0 + 11 +26774.999922 + 21 +12757.40284 + 31 +0.0 + 0 +LINE + 5 +1F70 + 8 +0 + 62 + 0 + 10 +26749.999922 + 20 +12800.70411 + 30 +0.0 + 11 +26740.0 + 21 +12818.024483 + 31 +0.0 + 0 +LINE + 5 +1F71 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +12636.159149 + 30 +0.0 + 11 +26812.499922 + 21 +12649.149665 + 31 +0.0 + 0 +LINE + 5 +1F72 + 8 +0 + 62 + 0 + 10 +26787.499922 + 20 +12692.450935 + 30 +0.0 + 11 +26774.999922 + 21 +12714.10157 + 31 +0.0 + 0 +LINE + 5 +1F73 + 8 +0 + 62 + 0 + 10 +26749.999922 + 20 +12757.40284 + 30 +0.0 + 11 +26740.0 + 21 +12774.723213 + 31 +0.0 + 0 +LINE + 5 +1F74 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +12592.857879 + 30 +0.0 + 11 +26812.499922 + 21 +12605.848395 + 31 +0.0 + 0 +LINE + 5 +1F75 + 8 +0 + 62 + 0 + 10 +26787.499922 + 20 +12649.149665 + 30 +0.0 + 11 +26774.999922 + 21 +12670.8003 + 31 +0.0 + 0 +LINE + 5 +1F76 + 8 +0 + 62 + 0 + 10 +26749.999922 + 20 +12714.10157 + 30 +0.0 + 11 +26740.0 + 21 +12731.421943 + 31 +0.0 + 0 +LINE + 5 +1F77 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +12549.556609 + 30 +0.0 + 11 +26812.499922 + 21 +12562.547125 + 31 +0.0 + 0 +LINE + 5 +1F78 + 8 +0 + 62 + 0 + 10 +26787.499922 + 20 +12605.848395 + 30 +0.0 + 11 +26774.999922 + 21 +12627.49903 + 31 +0.0 + 0 +LINE + 5 +1F79 + 8 +0 + 62 + 0 + 10 +26749.999922 + 20 +12670.8003 + 30 +0.0 + 11 +26740.0 + 21 +12688.120673 + 31 +0.0 + 0 +LINE + 5 +1F7A + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +12506.255339 + 30 +0.0 + 11 +26812.499922 + 21 +12519.245854 + 31 +0.0 + 0 +LINE + 5 +1F7B + 8 +0 + 62 + 0 + 10 +26787.499922 + 20 +12562.547125 + 30 +0.0 + 11 +26774.999922 + 21 +12584.19776 + 31 +0.0 + 0 +LINE + 5 +1F7C + 8 +0 + 62 + 0 + 10 +26749.999922 + 20 +12627.49903 + 30 +0.0 + 11 +26740.0 + 21 +12644.819403 + 31 +0.0 + 0 +LINE + 5 +1F7D + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +12462.954069 + 30 +0.0 + 11 +26812.499922 + 21 +12475.944584 + 31 +0.0 + 0 +LINE + 5 +1F7E + 8 +0 + 62 + 0 + 10 +26787.499922 + 20 +12519.245854 + 30 +0.0 + 11 +26774.999922 + 21 +12540.89649 + 31 +0.0 + 0 +LINE + 5 +1F7F + 8 +0 + 62 + 0 + 10 +26749.999922 + 20 +12584.19776 + 30 +0.0 + 11 +26740.0 + 21 +12601.518133 + 31 +0.0 + 0 +LINE + 5 +1F80 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +12419.652799 + 30 +0.0 + 11 +26812.499922 + 21 +12432.643314 + 31 +0.0 + 0 +LINE + 5 +1F81 + 8 +0 + 62 + 0 + 10 +26787.499922 + 20 +12475.944584 + 30 +0.0 + 11 +26774.999922 + 21 +12497.595219 + 31 +0.0 + 0 +LINE + 5 +1F82 + 8 +0 + 62 + 0 + 10 +26749.999922 + 20 +12540.89649 + 30 +0.0 + 11 +26740.0 + 21 +12558.216863 + 31 +0.0 + 0 +LINE + 5 +1F83 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +12376.351529 + 30 +0.0 + 11 +26812.499923 + 21 +12389.342044 + 31 +0.0 + 0 +LINE + 5 +1F84 + 8 +0 + 62 + 0 + 10 +26787.499923 + 20 +12432.643314 + 30 +0.0 + 11 +26774.999923 + 21 +12454.293949 + 31 +0.0 + 0 +LINE + 5 +1F85 + 8 +0 + 62 + 0 + 10 +26749.999923 + 20 +12497.595219 + 30 +0.0 + 11 +26740.0 + 21 +12514.915593 + 31 +0.0 + 0 +LINE + 5 +1F86 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +12333.050259 + 30 +0.0 + 11 +26812.499923 + 21 +12346.040774 + 31 +0.0 + 0 +LINE + 5 +1F87 + 8 +0 + 62 + 0 + 10 +26787.499923 + 20 +12389.342044 + 30 +0.0 + 11 +26774.999923 + 21 +12410.992679 + 31 +0.0 + 0 +LINE + 5 +1F88 + 8 +0 + 62 + 0 + 10 +26749.999923 + 20 +12454.293949 + 30 +0.0 + 11 +26740.0 + 21 +12471.614323 + 31 +0.0 + 0 +LINE + 5 +1F89 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +12289.748989 + 30 +0.0 + 11 +26812.499923 + 21 +12302.739504 + 31 +0.0 + 0 +LINE + 5 +1F8A + 8 +0 + 62 + 0 + 10 +26787.499923 + 20 +12346.040774 + 30 +0.0 + 11 +26774.999923 + 21 +12367.691409 + 31 +0.0 + 0 +LINE + 5 +1F8B + 8 +0 + 62 + 0 + 10 +26749.999923 + 20 +12410.992679 + 30 +0.0 + 11 +26740.0 + 21 +12428.313053 + 31 +0.0 + 0 +LINE + 5 +1F8C + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +12246.447719 + 30 +0.0 + 11 +26812.499923 + 21 +12259.438234 + 31 +0.0 + 0 +LINE + 5 +1F8D + 8 +0 + 62 + 0 + 10 +26787.499923 + 20 +12302.739504 + 30 +0.0 + 11 +26774.999923 + 21 +12324.390139 + 31 +0.0 + 0 +LINE + 5 +1F8E + 8 +0 + 62 + 0 + 10 +26749.999923 + 20 +12367.691409 + 30 +0.0 + 11 +26740.0 + 21 +12385.011783 + 31 +0.0 + 0 +LINE + 5 +1F8F + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +12203.146449 + 30 +0.0 + 11 +26812.499923 + 21 +12216.136963 + 31 +0.0 + 0 +LINE + 5 +1F90 + 8 +0 + 62 + 0 + 10 +26787.499923 + 20 +12259.438234 + 30 +0.0 + 11 +26774.999923 + 21 +12281.088869 + 31 +0.0 + 0 +LINE + 5 +1F91 + 8 +0 + 62 + 0 + 10 +26749.999923 + 20 +12324.390139 + 30 +0.0 + 11 +26740.0 + 21 +12341.710513 + 31 +0.0 + 0 +LINE + 5 +1F92 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +12159.845179 + 30 +0.0 + 11 +26812.499923 + 21 +12172.835693 + 31 +0.0 + 0 +LINE + 5 +1F93 + 8 +0 + 62 + 0 + 10 +26787.499923 + 20 +12216.136963 + 30 +0.0 + 11 +26774.999923 + 21 +12237.787599 + 31 +0.0 + 0 +LINE + 5 +1F94 + 8 +0 + 62 + 0 + 10 +26749.999923 + 20 +12281.088869 + 30 +0.0 + 11 +26740.0 + 21 +12298.409243 + 31 +0.0 + 0 +LINE + 5 +1F95 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +12116.543909 + 30 +0.0 + 11 +26812.499923 + 21 +12129.534423 + 31 +0.0 + 0 +LINE + 5 +1F96 + 8 +0 + 62 + 0 + 10 +26787.499923 + 20 +12172.835693 + 30 +0.0 + 11 +26774.999923 + 21 +12194.486328 + 31 +0.0 + 0 +LINE + 5 +1F97 + 8 +0 + 62 + 0 + 10 +26749.999923 + 20 +12237.787599 + 30 +0.0 + 11 +26740.0 + 21 +12255.107973 + 31 +0.0 + 0 +LINE + 5 +1F98 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +12073.242639 + 30 +0.0 + 11 +26812.499923 + 21 +12086.233153 + 31 +0.0 + 0 +LINE + 5 +1F99 + 8 +0 + 62 + 0 + 10 +26787.499923 + 20 +12129.534423 + 30 +0.0 + 11 +26774.999923 + 21 +12151.185058 + 31 +0.0 + 0 +LINE + 5 +1F9A + 8 +0 + 62 + 0 + 10 +26749.999923 + 20 +12194.486328 + 30 +0.0 + 11 +26740.0 + 21 +12211.806703 + 31 +0.0 + 0 +LINE + 5 +1F9B + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +12029.941369 + 30 +0.0 + 11 +26812.499923 + 21 +12042.931883 + 31 +0.0 + 0 +LINE + 5 +1F9C + 8 +0 + 62 + 0 + 10 +26787.499923 + 20 +12086.233153 + 30 +0.0 + 11 +26774.999923 + 21 +12107.883788 + 31 +0.0 + 0 +LINE + 5 +1F9D + 8 +0 + 62 + 0 + 10 +26749.999923 + 20 +12151.185058 + 30 +0.0 + 11 +26740.0 + 21 +12168.505433 + 31 +0.0 + 0 +LINE + 5 +1F9E + 8 +0 + 62 + 0 + 10 +26818.781848 + 20 +11988.75 + 30 +0.0 + 11 +26812.499923 + 21 +11999.630613 + 31 +0.0 + 0 +LINE + 5 +1F9F + 8 +0 + 62 + 0 + 10 +26787.499923 + 20 +12042.931883 + 30 +0.0 + 11 +26774.999923 + 21 +12064.582518 + 31 +0.0 + 0 +LINE + 5 +1FA0 + 8 +0 + 62 + 0 + 10 +26749.999923 + 20 +12107.883788 + 30 +0.0 + 11 +26740.0 + 21 +12125.204163 + 31 +0.0 + 0 +LINE + 5 +1FA1 + 8 +0 + 62 + 0 + 10 +26787.499923 + 20 +11999.630613 + 30 +0.0 + 11 +26774.999923 + 21 +12021.281248 + 31 +0.0 + 0 +LINE + 5 +1FA2 + 8 +0 + 62 + 0 + 10 +26749.999923 + 20 +12064.582518 + 30 +0.0 + 11 +26740.0 + 21 +12081.902893 + 31 +0.0 + 0 +LINE + 5 +1FA3 + 8 +0 + 62 + 0 + 10 +26749.999923 + 20 +12021.281248 + 30 +0.0 + 11 +26740.0 + 21 +12038.601623 + 31 +0.0 + 0 +LINE + 5 +1FA4 + 8 +0 + 62 + 0 + 10 +26743.781848 + 20 +11988.75 + 30 +0.0 + 11 +26740.0 + 21 +11995.300353 + 31 +0.0 + 0 +LINE + 5 +1FA5 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +14801.222649 + 30 +0.0 + 11 +26812.499918 + 21 +14814.213172 + 31 +0.0 + 0 +LINE + 5 +1FA6 + 8 +0 + 62 + 0 + 10 +26787.499918 + 20 +14857.514442 + 30 +0.0 + 11 +26774.999918 + 21 +14879.165077 + 31 +0.0 + 0 +LINE + 5 +1FA7 + 8 +0 + 62 + 0 + 10 +26749.999918 + 20 +14922.466347 + 30 +0.0 + 11 +26740.0 + 21 +14939.786713 + 31 +0.0 + 0 +LINE + 5 +1FA8 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +14844.523919 + 30 +0.0 + 11 +26812.499918 + 21 +14857.514442 + 31 +0.0 + 0 +LINE + 5 +1FA9 + 8 +0 + 62 + 0 + 10 +26787.499918 + 20 +14900.815712 + 30 +0.0 + 11 +26774.999918 + 21 +14922.466347 + 31 +0.0 + 0 +LINE + 5 +1FAA + 8 +0 + 62 + 0 + 10 +26749.999918 + 20 +14965.767618 + 30 +0.0 + 11 +26740.0 + 21 +14983.087983 + 31 +0.0 + 0 +LINE + 5 +1FAB + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +14887.825189 + 30 +0.0 + 11 +26812.499918 + 21 +14900.815712 + 31 +0.0 + 0 +LINE + 5 +1FAC + 8 +0 + 62 + 0 + 10 +26787.499918 + 20 +14944.116982 + 30 +0.0 + 11 +26774.999918 + 21 +14965.767618 + 31 +0.0 + 0 +LINE + 5 +1FAD + 8 +0 + 62 + 0 + 10 +26749.999918 + 20 +15009.068888 + 30 +0.0 + 11 +26740.0 + 21 +15026.389253 + 31 +0.0 + 0 +LINE + 5 +1FAE + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +14931.126459 + 30 +0.0 + 11 +26812.499918 + 21 +14944.116982 + 31 +0.0 + 0 +LINE + 5 +1FAF + 8 +0 + 62 + 0 + 10 +26787.499918 + 20 +14987.418253 + 30 +0.0 + 11 +26774.999918 + 21 +15009.068888 + 31 +0.0 + 0 +LINE + 5 +1FB0 + 8 +0 + 62 + 0 + 10 +26749.999918 + 20 +15052.370158 + 30 +0.0 + 11 +26740.0 + 21 +15069.690523 + 31 +0.0 + 0 +LINE + 5 +1FB1 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +14974.427729 + 30 +0.0 + 11 +26812.499918 + 21 +14987.418253 + 31 +0.0 + 0 +LINE + 5 +1FB2 + 8 +0 + 62 + 0 + 10 +26787.499918 + 20 +15030.719523 + 30 +0.0 + 11 +26774.999918 + 21 +15052.370158 + 31 +0.0 + 0 +LINE + 5 +1FB3 + 8 +0 + 62 + 0 + 10 +26749.999918 + 20 +15095.671428 + 30 +0.0 + 11 +26740.0 + 21 +15112.991793 + 31 +0.0 + 0 +LINE + 5 +1FB4 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +15017.728999 + 30 +0.0 + 11 +26812.499918 + 21 +15030.719523 + 31 +0.0 + 0 +LINE + 5 +1FB5 + 8 +0 + 62 + 0 + 10 +26787.499918 + 20 +15074.020793 + 30 +0.0 + 11 +26774.999918 + 21 +15095.671428 + 31 +0.0 + 0 +LINE + 5 +1FB6 + 8 +0 + 62 + 0 + 10 +26749.999918 + 20 +15138.972698 + 30 +0.0 + 11 +26740.0 + 21 +15156.293063 + 31 +0.0 + 0 +LINE + 5 +1FB7 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +15061.030269 + 30 +0.0 + 11 +26812.499917 + 21 +15074.020793 + 31 +0.0 + 0 +LINE + 5 +1FB8 + 8 +0 + 62 + 0 + 10 +26787.499917 + 20 +15117.322063 + 30 +0.0 + 11 +26774.999917 + 21 +15138.972698 + 31 +0.0 + 0 +LINE + 5 +1FB9 + 8 +0 + 62 + 0 + 10 +26749.999917 + 20 +15182.273968 + 30 +0.0 + 11 +26740.0 + 21 +15199.594333 + 31 +0.0 + 0 +LINE + 5 +1FBA + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +15104.331539 + 30 +0.0 + 11 +26812.499917 + 21 +15117.322063 + 31 +0.0 + 0 +LINE + 5 +1FBB + 8 +0 + 62 + 0 + 10 +26787.499917 + 20 +15160.623333 + 30 +0.0 + 11 +26774.999917 + 21 +15182.273968 + 31 +0.0 + 0 +LINE + 5 +1FBC + 8 +0 + 62 + 0 + 10 +26749.999917 + 20 +15225.575238 + 30 +0.0 + 11 +26740.0 + 21 +15242.895603 + 31 +0.0 + 0 +LINE + 5 +1FBD + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +15147.632809 + 30 +0.0 + 11 +26812.499917 + 21 +15160.623333 + 31 +0.0 + 0 +LINE + 5 +1FBE + 8 +0 + 62 + 0 + 10 +26787.499917 + 20 +15203.924603 + 30 +0.0 + 11 +26774.999917 + 21 +15225.575238 + 31 +0.0 + 0 +LINE + 5 +1FBF + 8 +0 + 62 + 0 + 10 +26749.999917 + 20 +15268.876509 + 30 +0.0 + 11 +26740.0 + 21 +15286.196873 + 31 +0.0 + 0 +LINE + 5 +1FC0 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +15190.934079 + 30 +0.0 + 11 +26812.499917 + 21 +15203.924603 + 31 +0.0 + 0 +LINE + 5 +1FC1 + 8 +0 + 62 + 0 + 10 +26787.499917 + 20 +15247.225873 + 30 +0.0 + 11 +26774.999917 + 21 +15268.876509 + 31 +0.0 + 0 +LINE + 5 +1FC2 + 8 +0 + 62 + 0 + 10 +26749.999917 + 20 +15312.177779 + 30 +0.0 + 11 +26740.0 + 21 +15329.498143 + 31 +0.0 + 0 +LINE + 5 +1FC3 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +15234.235349 + 30 +0.0 + 11 +26812.499917 + 21 +15247.225873 + 31 +0.0 + 0 +LINE + 5 +1FC4 + 8 +0 + 62 + 0 + 10 +26787.499917 + 20 +15290.527144 + 30 +0.0 + 11 +26774.999917 + 21 +15312.177779 + 31 +0.0 + 0 +LINE + 5 +1FC5 + 8 +0 + 62 + 0 + 10 +26749.999917 + 20 +15355.479049 + 30 +0.0 + 11 +26740.0 + 21 +15372.799413 + 31 +0.0 + 0 +LINE + 5 +1FC6 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +15277.536619 + 30 +0.0 + 11 +26812.499917 + 21 +15290.527144 + 31 +0.0 + 0 +LINE + 5 +1FC7 + 8 +0 + 62 + 0 + 10 +26787.499917 + 20 +15333.828414 + 30 +0.0 + 11 +26774.999917 + 21 +15355.479049 + 31 +0.0 + 0 +LINE + 5 +1FC8 + 8 +0 + 62 + 0 + 10 +26749.999917 + 20 +15398.780319 + 30 +0.0 + 11 +26740.0 + 21 +15416.100683 + 31 +0.0 + 0 +LINE + 5 +1FC9 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +15320.837889 + 30 +0.0 + 11 +26812.499917 + 21 +15333.828414 + 31 +0.0 + 0 +LINE + 5 +1FCA + 8 +0 + 62 + 0 + 10 +26787.499917 + 20 +15377.129684 + 30 +0.0 + 11 +26774.999917 + 21 +15398.780319 + 31 +0.0 + 0 +LINE + 5 +1FCB + 8 +0 + 62 + 0 + 10 +26749.999917 + 20 +15442.081589 + 30 +0.0 + 11 +26740.0 + 21 +15459.401953 + 31 +0.0 + 0 +LINE + 5 +1FCC + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +15364.139159 + 30 +0.0 + 11 +26812.499917 + 21 +15377.129684 + 31 +0.0 + 0 +LINE + 5 +1FCD + 8 +0 + 62 + 0 + 10 +26787.499917 + 20 +15420.430954 + 30 +0.0 + 11 +26774.999917 + 21 +15442.081589 + 31 +0.0 + 0 +LINE + 5 +1FCE + 8 +0 + 62 + 0 + 10 +26749.999917 + 20 +15485.382859 + 30 +0.0 + 11 +26740.0 + 21 +15502.703223 + 31 +0.0 + 0 +LINE + 5 +1FCF + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +15407.440429 + 30 +0.0 + 11 +26812.499917 + 21 +15420.430954 + 31 +0.0 + 0 +LINE + 5 +1FD0 + 8 +0 + 62 + 0 + 10 +26787.499917 + 20 +15463.732224 + 30 +0.0 + 11 +26774.999917 + 21 +15485.382859 + 31 +0.0 + 0 +LINE + 5 +1FD1 + 8 +0 + 62 + 0 + 10 +26749.999917 + 20 +15528.684129 + 30 +0.0 + 11 +26740.0 + 21 +15546.004493 + 31 +0.0 + 0 +LINE + 5 +1FD2 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +15450.741699 + 30 +0.0 + 11 +26812.499917 + 21 +15463.732224 + 31 +0.0 + 0 +LINE + 5 +1FD3 + 8 +0 + 62 + 0 + 10 +26787.499917 + 20 +15507.033494 + 30 +0.0 + 11 +26774.999917 + 21 +15528.684129 + 31 +0.0 + 0 +LINE + 5 +1FD4 + 8 +0 + 62 + 0 + 10 +26749.999917 + 20 +15571.9854 + 30 +0.0 + 11 +26740.0 + 21 +15589.305763 + 31 +0.0 + 0 +LINE + 5 +1FD5 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +15494.042969 + 30 +0.0 + 11 +26812.499917 + 21 +15507.033494 + 31 +0.0 + 0 +LINE + 5 +1FD6 + 8 +0 + 62 + 0 + 10 +26787.499917 + 20 +15550.334764 + 30 +0.0 + 11 +26774.999917 + 21 +15571.9854 + 31 +0.0 + 0 +LINE + 5 +1FD7 + 8 +0 + 62 + 0 + 10 +26749.999917 + 20 +15615.28667 + 30 +0.0 + 11 +26740.0 + 21 +15632.607033 + 31 +0.0 + 0 +LINE + 5 +1FD8 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +15537.344239 + 30 +0.0 + 11 +26812.499917 + 21 +15550.334764 + 31 +0.0 + 0 +LINE + 5 +1FD9 + 8 +0 + 62 + 0 + 10 +26787.499917 + 20 +15593.636035 + 30 +0.0 + 11 +26774.999917 + 21 +15615.28667 + 31 +0.0 + 0 +LINE + 5 +1FDA + 8 +0 + 62 + 0 + 10 +26749.999917 + 20 +15658.58794 + 30 +0.0 + 11 +26740.0 + 21 +15675.908303 + 31 +0.0 + 0 +LINE + 5 +1FDB + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +15580.645509 + 30 +0.0 + 11 +26812.499917 + 21 +15593.636035 + 31 +0.0 + 0 +LINE + 5 +1FDC + 8 +0 + 62 + 0 + 10 +26787.499917 + 20 +15636.937305 + 30 +0.0 + 11 +26774.999917 + 21 +15658.58794 + 31 +0.0 + 0 +LINE + 5 +1FDD + 8 +0 + 62 + 0 + 10 +26749.999917 + 20 +15701.88921 + 30 +0.0 + 11 +26740.0 + 21 +15719.209573 + 31 +0.0 + 0 +LINE + 5 +1FDE + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +15623.946779 + 30 +0.0 + 11 +26812.499916 + 21 +15636.937305 + 31 +0.0 + 0 +LINE + 5 +1FDF + 8 +0 + 62 + 0 + 10 +26787.499916 + 20 +15680.238575 + 30 +0.0 + 11 +26774.999916 + 21 +15701.88921 + 31 +0.0 + 0 +LINE + 5 +1FE0 + 8 +0 + 62 + 0 + 10 +26749.999916 + 20 +15745.19048 + 30 +0.0 + 11 +26740.0 + 21 +15762.510843 + 31 +0.0 + 0 +LINE + 5 +1FE1 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +15667.248049 + 30 +0.0 + 11 +26812.499916 + 21 +15680.238575 + 31 +0.0 + 0 +LINE + 5 +1FE2 + 8 +0 + 62 + 0 + 10 +26787.499916 + 20 +15723.539845 + 30 +0.0 + 11 +26774.999916 + 21 +15745.19048 + 31 +0.0 + 0 +LINE + 5 +1FE3 + 8 +0 + 62 + 0 + 10 +26749.999916 + 20 +15788.49175 + 30 +0.0 + 11 +26740.0 + 21 +15805.812113 + 31 +0.0 + 0 +LINE + 5 +1FE4 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +15710.549319 + 30 +0.0 + 11 +26812.499916 + 21 +15723.539845 + 31 +0.0 + 0 +LINE + 5 +1FE5 + 8 +0 + 62 + 0 + 10 +26787.499916 + 20 +15766.841115 + 30 +0.0 + 11 +26774.999916 + 21 +15788.49175 + 31 +0.0 + 0 +LINE + 5 +1FE6 + 8 +0 + 62 + 0 + 10 +26749.999916 + 20 +15831.79302 + 30 +0.0 + 11 +26740.0 + 21 +15849.113383 + 31 +0.0 + 0 +LINE + 5 +1FE7 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +15753.850589 + 30 +0.0 + 11 +26812.499916 + 21 +15766.841115 + 31 +0.0 + 0 +LINE + 5 +1FE8 + 8 +0 + 62 + 0 + 10 +26787.499916 + 20 +15810.142385 + 30 +0.0 + 11 +26774.999916 + 21 +15831.79302 + 31 +0.0 + 0 +LINE + 5 +1FE9 + 8 +0 + 62 + 0 + 10 +26749.999916 + 20 +15875.094291 + 30 +0.0 + 11 +26740.0 + 21 +15892.414653 + 31 +0.0 + 0 +LINE + 5 +1FEA + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +15797.151859 + 30 +0.0 + 11 +26812.499916 + 21 +15810.142385 + 31 +0.0 + 0 +LINE + 5 +1FEB + 8 +0 + 62 + 0 + 10 +26787.499916 + 20 +15853.443655 + 30 +0.0 + 11 +26774.999916 + 21 +15875.094291 + 31 +0.0 + 0 +LINE + 5 +1FEC + 8 +0 + 62 + 0 + 10 +26749.999916 + 20 +15918.395561 + 30 +0.0 + 11 +26740.0 + 21 +15935.715923 + 31 +0.0 + 0 +LINE + 5 +1FED + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +15840.453129 + 30 +0.0 + 11 +26812.499916 + 21 +15853.443655 + 31 +0.0 + 0 +LINE + 5 +1FEE + 8 +0 + 62 + 0 + 10 +26787.499916 + 20 +15896.744926 + 30 +0.0 + 11 +26774.999916 + 21 +15918.395561 + 31 +0.0 + 0 +LINE + 5 +1FEF + 8 +0 + 62 + 0 + 10 +26749.999916 + 20 +15961.696831 + 30 +0.0 + 11 +26740.0 + 21 +15979.017193 + 31 +0.0 + 0 +LINE + 5 +1FF0 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +15883.754399 + 30 +0.0 + 11 +26812.499916 + 21 +15896.744926 + 31 +0.0 + 0 +LINE + 5 +1FF1 + 8 +0 + 62 + 0 + 10 +26787.499916 + 20 +15940.046196 + 30 +0.0 + 11 +26774.999916 + 21 +15961.696831 + 31 +0.0 + 0 +LINE + 5 +1FF2 + 8 +0 + 62 + 0 + 10 +26749.999916 + 20 +16004.998101 + 30 +0.0 + 11 +26740.0 + 21 +16022.318463 + 31 +0.0 + 0 +LINE + 5 +1FF3 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +15927.055669 + 30 +0.0 + 11 +26812.499916 + 21 +15940.046196 + 31 +0.0 + 0 +LINE + 5 +1FF4 + 8 +0 + 62 + 0 + 10 +26787.499916 + 20 +15983.347466 + 30 +0.0 + 11 +26774.999916 + 21 +16004.998101 + 31 +0.0 + 0 +LINE + 5 +1FF5 + 8 +0 + 62 + 0 + 10 +26749.999916 + 20 +16048.299371 + 30 +0.0 + 11 +26740.0 + 21 +16065.619733 + 31 +0.0 + 0 +LINE + 5 +1FF6 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +15970.356939 + 30 +0.0 + 11 +26812.499916 + 21 +15983.347466 + 31 +0.0 + 0 +LINE + 5 +1FF7 + 8 +0 + 62 + 0 + 10 +26787.499916 + 20 +16026.648736 + 30 +0.0 + 11 +26774.999916 + 21 +16048.299371 + 31 +0.0 + 0 +LINE + 5 +1FF8 + 8 +0 + 62 + 0 + 10 +26749.999916 + 20 +16091.600641 + 30 +0.0 + 11 +26740.0 + 21 +16108.921003 + 31 +0.0 + 0 +LINE + 5 +1FF9 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +16013.658209 + 30 +0.0 + 11 +26812.499916 + 21 +16026.648736 + 31 +0.0 + 0 +LINE + 5 +1FFA + 8 +0 + 62 + 0 + 10 +26787.499916 + 20 +16069.950006 + 30 +0.0 + 11 +26774.999916 + 21 +16091.600641 + 31 +0.0 + 0 +LINE + 5 +1FFB + 8 +0 + 62 + 0 + 10 +26749.999916 + 20 +16134.901911 + 30 +0.0 + 11 +26740.0 + 21 +16152.222273 + 31 +0.0 + 0 +LINE + 5 +1FFC + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +16056.959479 + 30 +0.0 + 11 +26812.499916 + 21 +16069.950006 + 31 +0.0 + 0 +LINE + 5 +1FFD + 8 +0 + 62 + 0 + 10 +26787.499916 + 20 +16113.251276 + 30 +0.0 + 11 +26774.999916 + 21 +16134.901911 + 31 +0.0 + 0 +LINE + 5 +1FFE + 8 +0 + 62 + 0 + 10 +26749.999916 + 20 +16178.203182 + 30 +0.0 + 11 +26740.0 + 21 +16195.523543 + 31 +0.0 + 0 +LINE + 5 +1FFF + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +16100.260749 + 30 +0.0 + 11 +26812.499916 + 21 +16113.251276 + 31 +0.0 + 0 +LINE + 5 +2000 + 8 +0 + 62 + 0 + 10 +26787.499916 + 20 +16156.552546 + 30 +0.0 + 11 +26774.999916 + 21 +16178.203182 + 31 +0.0 + 0 +LINE + 5 +2001 + 8 +0 + 62 + 0 + 10 +26749.999916 + 20 +16221.504452 + 30 +0.0 + 11 +26740.0 + 21 +16238.824813 + 31 +0.0 + 0 +LINE + 5 +2002 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +16143.562019 + 30 +0.0 + 11 +26812.499915 + 21 +16156.552546 + 31 +0.0 + 0 +LINE + 5 +2003 + 8 +0 + 62 + 0 + 10 +26787.499915 + 20 +16199.853817 + 30 +0.0 + 11 +26774.999915 + 21 +16221.504452 + 31 +0.0 + 0 +LINE + 5 +2004 + 8 +0 + 62 + 0 + 10 +26749.999915 + 20 +16264.805722 + 30 +0.0 + 11 +26740.0 + 21 +16282.126083 + 31 +0.0 + 0 +LINE + 5 +2005 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +16186.863289 + 30 +0.0 + 11 +26812.499915 + 21 +16199.853817 + 31 +0.0 + 0 +LINE + 5 +2006 + 8 +0 + 62 + 0 + 10 +26787.499915 + 20 +16243.155087 + 30 +0.0 + 11 +26774.999915 + 21 +16264.805722 + 31 +0.0 + 0 +LINE + 5 +2007 + 8 +0 + 62 + 0 + 10 +26749.999915 + 20 +16308.106992 + 30 +0.0 + 11 +26740.0 + 21 +16325.427353 + 31 +0.0 + 0 +LINE + 5 +2008 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +16230.164559 + 30 +0.0 + 11 +26812.499915 + 21 +16243.155087 + 31 +0.0 + 0 +LINE + 5 +2009 + 8 +0 + 62 + 0 + 10 +26787.499915 + 20 +16286.456357 + 30 +0.0 + 11 +26774.999915 + 21 +16308.106992 + 31 +0.0 + 0 +LINE + 5 +200A + 8 +0 + 62 + 0 + 10 +26749.999915 + 20 +16351.408262 + 30 +0.0 + 11 +26740.0 + 21 +16368.728623 + 31 +0.0 + 0 +LINE + 5 +200B + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +16273.465829 + 30 +0.0 + 11 +26812.499915 + 21 +16286.456357 + 31 +0.0 + 0 +LINE + 5 +200C + 8 +0 + 62 + 0 + 10 +26787.499915 + 20 +16329.757627 + 30 +0.0 + 11 +26774.999915 + 21 +16351.408262 + 31 +0.0 + 0 +LINE + 5 +200D + 8 +0 + 62 + 0 + 10 +26749.999915 + 20 +16394.709532 + 30 +0.0 + 11 +26740.0 + 21 +16412.029893 + 31 +0.0 + 0 +LINE + 5 +200E + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +16316.767099 + 30 +0.0 + 11 +26812.499915 + 21 +16329.757627 + 31 +0.0 + 0 +LINE + 5 +200F + 8 +0 + 62 + 0 + 10 +26787.499915 + 20 +16373.058897 + 30 +0.0 + 11 +26774.999915 + 21 +16394.709532 + 31 +0.0 + 0 +LINE + 5 +2010 + 8 +0 + 62 + 0 + 10 +26749.999915 + 20 +16438.010802 + 30 +0.0 + 11 +26740.0 + 21 +16455.331163 + 31 +0.0 + 0 +LINE + 5 +2011 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +16360.068369 + 30 +0.0 + 11 +26812.499915 + 21 +16373.058897 + 31 +0.0 + 0 +LINE + 5 +2012 + 8 +0 + 62 + 0 + 10 +26787.499915 + 20 +16416.360167 + 30 +0.0 + 11 +26774.999915 + 21 +16438.010802 + 31 +0.0 + 0 +LINE + 5 +2013 + 8 +0 + 62 + 0 + 10 +26749.999915 + 20 +16481.312073 + 30 +0.0 + 11 +26740.0 + 21 +16498.632433 + 31 +0.0 + 0 +LINE + 5 +2014 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +16403.369639 + 30 +0.0 + 11 +26812.499915 + 21 +16416.360167 + 31 +0.0 + 0 +LINE + 5 +2015 + 8 +0 + 62 + 0 + 10 +26787.499915 + 20 +16459.661437 + 30 +0.0 + 11 +26774.999915 + 21 +16481.312072 + 31 +0.0 + 0 +LINE + 5 +2016 + 8 +0 + 62 + 0 + 10 +26749.999915 + 20 +16524.613343 + 30 +0.0 + 11 +26740.0 + 21 +16541.933703 + 31 +0.0 + 0 +LINE + 5 +2017 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +16446.670909 + 30 +0.0 + 11 +26812.499915 + 21 +16459.661437 + 31 +0.0 + 0 +LINE + 5 +2018 + 8 +0 + 62 + 0 + 10 +26787.499915 + 20 +16502.962708 + 30 +0.0 + 11 +26774.999915 + 21 +16524.613343 + 31 +0.0 + 0 +LINE + 5 +2019 + 8 +0 + 62 + 0 + 10 +26749.999915 + 20 +16567.914613 + 30 +0.0 + 11 +26740.0 + 21 +16585.234973 + 31 +0.0 + 0 +LINE + 5 +201A + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +16489.972179 + 30 +0.0 + 11 +26812.499915 + 21 +16502.962707 + 31 +0.0 + 0 +LINE + 5 +201B + 8 +0 + 62 + 0 + 10 +26787.499915 + 20 +16546.263978 + 30 +0.0 + 11 +26774.999915 + 21 +16567.914613 + 31 +0.0 + 0 +LINE + 5 +201C + 8 +0 + 62 + 0 + 10 +26749.999915 + 20 +16611.215883 + 30 +0.0 + 11 +26740.0 + 21 +16628.536243 + 31 +0.0 + 0 +LINE + 5 +201D + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +16533.273449 + 30 +0.0 + 11 +26812.499915 + 21 +16546.263978 + 31 +0.0 + 0 +LINE + 5 +201E + 8 +0 + 62 + 0 + 10 +26787.499915 + 20 +16589.565248 + 30 +0.0 + 11 +26774.999915 + 21 +16611.215883 + 31 +0.0 + 0 +LINE + 5 +201F + 8 +0 + 62 + 0 + 10 +26749.999915 + 20 +16654.517153 + 30 +0.0 + 11 +26740.0 + 21 +16671.837513 + 31 +0.0 + 0 +LINE + 5 +2020 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +16576.574719 + 30 +0.0 + 11 +26812.499915 + 21 +16589.565248 + 31 +0.0 + 0 +LINE + 5 +2021 + 8 +0 + 62 + 0 + 10 +26787.499915 + 20 +16632.866518 + 30 +0.0 + 11 +26774.999915 + 21 +16654.517153 + 31 +0.0 + 0 +LINE + 5 +2022 + 8 +0 + 62 + 0 + 10 +26749.999915 + 20 +16697.818423 + 30 +0.0 + 11 +26740.0 + 21 +16715.138783 + 31 +0.0 + 0 +LINE + 5 +2023 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +16619.875989 + 30 +0.0 + 11 +26812.499915 + 21 +16632.866518 + 31 +0.0 + 0 +LINE + 5 +2024 + 8 +0 + 62 + 0 + 10 +26787.499915 + 20 +16676.167788 + 30 +0.0 + 11 +26774.999915 + 21 +16697.818423 + 31 +0.0 + 0 +LINE + 5 +2025 + 8 +0 + 62 + 0 + 10 +26749.999915 + 20 +16741.119693 + 30 +0.0 + 11 +26740.0 + 21 +16758.440053 + 31 +0.0 + 0 +LINE + 5 +2026 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +16663.177259 + 30 +0.0 + 11 +26812.499914 + 21 +16676.167788 + 31 +0.0 + 0 +LINE + 5 +2027 + 8 +0 + 62 + 0 + 10 +26787.499914 + 20 +16719.469058 + 30 +0.0 + 11 +26774.999914 + 21 +16741.119693 + 31 +0.0 + 0 +LINE + 5 +2028 + 8 +0 + 62 + 0 + 10 +26749.999914 + 20 +16784.420964 + 30 +0.0 + 11 +26740.0 + 21 +16801.741323 + 31 +0.0 + 0 +LINE + 5 +2029 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +16706.478529 + 30 +0.0 + 11 +26812.499914 + 21 +16719.469058 + 31 +0.0 + 0 +LINE + 5 +202A + 8 +0 + 62 + 0 + 10 +26787.499914 + 20 +16762.770328 + 30 +0.0 + 11 +26774.999914 + 21 +16784.420963 + 31 +0.0 + 0 +LINE + 5 +202B + 8 +0 + 62 + 0 + 10 +26749.999914 + 20 +16827.722234 + 30 +0.0 + 11 +26740.0 + 21 +16845.042593 + 31 +0.0 + 0 +LINE + 5 +202C + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +16749.779799 + 30 +0.0 + 11 +26812.499914 + 21 +16762.770328 + 31 +0.0 + 0 +LINE + 5 +202D + 8 +0 + 62 + 0 + 10 +26787.499914 + 20 +16806.071599 + 30 +0.0 + 11 +26774.999914 + 21 +16827.722234 + 31 +0.0 + 0 +LINE + 5 +202E + 8 +0 + 62 + 0 + 10 +26749.999914 + 20 +16871.023504 + 30 +0.0 + 11 +26740.0 + 21 +16888.343863 + 31 +0.0 + 0 +LINE + 5 +202F + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +16793.081069 + 30 +0.0 + 11 +26812.499914 + 21 +16806.071598 + 31 +0.0 + 0 +LINE + 5 +2030 + 8 +0 + 62 + 0 + 10 +26787.499914 + 20 +16849.372869 + 30 +0.0 + 11 +26774.999914 + 21 +16871.023504 + 31 +0.0 + 0 +LINE + 5 +2031 + 8 +0 + 62 + 0 + 10 +26749.999914 + 20 +16914.324774 + 30 +0.0 + 11 +26740.0 + 21 +16931.645133 + 31 +0.0 + 0 +LINE + 5 +2032 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +16836.382339 + 30 +0.0 + 11 +26812.499914 + 21 +16849.372869 + 31 +0.0 + 0 +LINE + 5 +2033 + 8 +0 + 62 + 0 + 10 +26787.499914 + 20 +16892.674139 + 30 +0.0 + 11 +26774.999914 + 21 +16914.324774 + 31 +0.0 + 0 +LINE + 5 +2034 + 8 +0 + 62 + 0 + 10 +26749.999914 + 20 +16957.626044 + 30 +0.0 + 11 +26740.0 + 21 +16974.946403 + 31 +0.0 + 0 +LINE + 5 +2035 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +16879.683609 + 30 +0.0 + 11 +26812.499914 + 21 +16892.674139 + 31 +0.0 + 0 +LINE + 5 +2036 + 8 +0 + 62 + 0 + 10 +26787.499914 + 20 +16935.975409 + 30 +0.0 + 11 +26774.999914 + 21 +16957.626044 + 31 +0.0 + 0 +LINE + 5 +2037 + 8 +0 + 62 + 0 + 10 +26749.999914 + 20 +17000.927314 + 30 +0.0 + 11 +26740.0 + 21 +17018.247673 + 31 +0.0 + 0 +LINE + 5 +2038 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +16922.984879 + 30 +0.0 + 11 +26812.499914 + 21 +16935.975409 + 31 +0.0 + 0 +LINE + 5 +2039 + 8 +0 + 62 + 0 + 10 +26787.499914 + 20 +16979.276679 + 30 +0.0 + 11 +26774.999914 + 21 +17000.927314 + 31 +0.0 + 0 +LINE + 5 +203A + 8 +0 + 62 + 0 + 10 +26749.999914 + 20 +17044.228584 + 30 +0.0 + 11 +26740.0 + 21 +17061.548943 + 31 +0.0 + 0 +LINE + 5 +203B + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +16966.286149 + 30 +0.0 + 11 +26812.499914 + 21 +16979.276679 + 31 +0.0 + 0 +LINE + 5 +203C + 8 +0 + 62 + 0 + 10 +26787.499914 + 20 +17022.577949 + 30 +0.0 + 11 +26774.999914 + 21 +17044.228584 + 31 +0.0 + 0 +LINE + 5 +203D + 8 +0 + 62 + 0 + 10 +26749.999914 + 20 +17087.529855 + 30 +0.0 + 11 +26740.0 + 21 +17104.850213 + 31 +0.0 + 0 +LINE + 5 +203E + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +17009.587419 + 30 +0.0 + 11 +26812.499914 + 21 +17022.577949 + 31 +0.0 + 0 +LINE + 5 +203F + 8 +0 + 62 + 0 + 10 +26787.499914 + 20 +17065.879219 + 30 +0.0 + 11 +26774.999914 + 21 +17087.529854 + 31 +0.0 + 0 +LINE + 5 +2040 + 8 +0 + 62 + 0 + 10 +26749.999914 + 20 +17130.831125 + 30 +0.0 + 11 +26740.0 + 21 +17148.151483 + 31 +0.0 + 0 +LINE + 5 +2041 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +17052.888689 + 30 +0.0 + 11 +26812.499914 + 21 +17065.879219 + 31 +0.0 + 0 +LINE + 5 +2042 + 8 +0 + 62 + 0 + 10 +26787.499914 + 20 +17109.18049 + 30 +0.0 + 11 +26774.999914 + 21 +17130.831125 + 31 +0.0 + 0 +LINE + 5 +2043 + 8 +0 + 62 + 0 + 10 +26749.999914 + 20 +17174.132395 + 30 +0.0 + 11 +26740.0 + 21 +17191.452753 + 31 +0.0 + 0 +LINE + 5 +2044 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +17096.189959 + 30 +0.0 + 11 +26812.499914 + 21 +17109.180489 + 31 +0.0 + 0 +LINE + 5 +2045 + 8 +0 + 62 + 0 + 10 +26787.499914 + 20 +17152.48176 + 30 +0.0 + 11 +26774.999914 + 21 +17174.132395 + 31 +0.0 + 0 +LINE + 5 +2046 + 8 +0 + 62 + 0 + 10 +26749.999914 + 20 +17217.433665 + 30 +0.0 + 11 +26740.0 + 21 +17234.754023 + 31 +0.0 + 0 +LINE + 5 +2047 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +17139.491229 + 30 +0.0 + 11 +26812.499914 + 21 +17152.48176 + 31 +0.0 + 0 +LINE + 5 +2048 + 8 +0 + 62 + 0 + 10 +26787.499914 + 20 +17195.78303 + 30 +0.0 + 11 +26774.999914 + 21 +17217.433665 + 31 +0.0 + 0 +LINE + 5 +2049 + 8 +0 + 62 + 0 + 10 +26749.999914 + 20 +17260.734935 + 30 +0.0 + 11 +26740.0 + 21 +17278.055293 + 31 +0.0 + 0 +LINE + 5 +204A + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +17182.792499 + 30 +0.0 + 11 +26812.499913 + 21 +17195.78303 + 31 +0.0 + 0 +LINE + 5 +204B + 8 +0 + 62 + 0 + 10 +26787.499913 + 20 +17239.0843 + 30 +0.0 + 11 +26774.999913 + 21 +17260.734935 + 31 +0.0 + 0 +LINE + 5 +204C + 8 +0 + 62 + 0 + 10 +26749.999913 + 20 +17304.036205 + 30 +0.0 + 11 +26740.0 + 21 +17321.356563 + 31 +0.0 + 0 +LINE + 5 +204D + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +17226.093769 + 30 +0.0 + 11 +26812.499913 + 21 +17239.0843 + 31 +0.0 + 0 +LINE + 5 +204E + 8 +0 + 62 + 0 + 10 +26787.499913 + 20 +17282.38557 + 30 +0.0 + 11 +26774.999913 + 21 +17304.036205 + 31 +0.0 + 0 +LINE + 5 +204F + 8 +0 + 62 + 0 + 10 +26749.999913 + 20 +17347.337475 + 30 +0.0 + 11 +26740.0 + 21 +17364.657833 + 31 +0.0 + 0 +LINE + 5 +2050 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +17269.395039 + 30 +0.0 + 11 +26812.499913 + 21 +17282.38557 + 31 +0.0 + 0 +LINE + 5 +2051 + 8 +0 + 62 + 0 + 10 +26787.499913 + 20 +17325.68684 + 30 +0.0 + 11 +26774.999913 + 21 +17347.337475 + 31 +0.0 + 0 +LINE + 5 +2052 + 8 +0 + 62 + 0 + 10 +26749.999913 + 20 +17390.638746 + 30 +0.0 + 11 +26740.0 + 21 +17407.959103 + 31 +0.0 + 0 +LINE + 5 +2053 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +17312.696309 + 30 +0.0 + 11 +26812.499913 + 21 +17325.68684 + 31 +0.0 + 0 +LINE + 5 +2054 + 8 +0 + 62 + 0 + 10 +26787.499913 + 20 +17368.98811 + 30 +0.0 + 11 +26774.999913 + 21 +17390.638745 + 31 +0.0 + 0 +LINE + 5 +2055 + 8 +0 + 62 + 0 + 10 +26749.999913 + 20 +17433.940016 + 30 +0.0 + 11 +26740.0 + 21 +17451.260373 + 31 +0.0 + 0 +LINE + 5 +2056 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +17355.997579 + 30 +0.0 + 11 +26812.499913 + 21 +17368.98811 + 31 +0.0 + 0 +LINE + 5 +2057 + 8 +0 + 62 + 0 + 10 +26787.499913 + 20 +17412.289381 + 30 +0.0 + 11 +26774.999913 + 21 +17433.940016 + 31 +0.0 + 0 +LINE + 5 +2058 + 8 +0 + 62 + 0 + 10 +26749.999913 + 20 +17477.241286 + 30 +0.0 + 11 +26740.0 + 21 +17494.561643 + 31 +0.0 + 0 +LINE + 5 +2059 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +17399.298849 + 30 +0.0 + 11 +26812.499913 + 21 +17412.28938 + 31 +0.0 + 0 +LINE + 5 +205A + 8 +0 + 62 + 0 + 10 +26787.499913 + 20 +17455.590651 + 30 +0.0 + 11 +26774.999913 + 21 +17477.241286 + 31 +0.0 + 0 +LINE + 5 +205B + 8 +0 + 62 + 0 + 10 +26749.999913 + 20 +17520.542556 + 30 +0.0 + 11 +26740.0 + 21 +17537.862913 + 31 +0.0 + 0 +LINE + 5 +205C + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +17442.600119 + 30 +0.0 + 11 +26812.499913 + 21 +17455.590651 + 31 +0.0 + 0 +LINE + 5 +205D + 8 +0 + 62 + 0 + 10 +26787.499913 + 20 +17498.891921 + 30 +0.0 + 11 +26774.999913 + 21 +17520.542556 + 31 +0.0 + 0 +LINE + 5 +205E + 8 +0 + 62 + 0 + 10 +26749.999913 + 20 +17563.843826 + 30 +0.0 + 11 +26740.0 + 21 +17581.164183 + 31 +0.0 + 0 +LINE + 5 +205F + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +17485.901389 + 30 +0.0 + 11 +26812.499913 + 21 +17498.891921 + 31 +0.0 + 0 +LINE + 5 +2060 + 8 +0 + 62 + 0 + 10 +26787.499913 + 20 +17542.193191 + 30 +0.0 + 11 +26774.999913 + 21 +17563.843826 + 31 +0.0 + 0 +LINE + 5 +2061 + 8 +0 + 62 + 0 + 10 +26749.999913 + 20 +17607.145096 + 30 +0.0 + 11 +26740.0 + 21 +17624.465453 + 31 +0.0 + 0 +LINE + 5 +2062 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +17529.202659 + 30 +0.0 + 11 +26812.499913 + 21 +17542.193191 + 31 +0.0 + 0 +LINE + 5 +2063 + 8 +0 + 62 + 0 + 10 +26787.499913 + 20 +17585.494461 + 30 +0.0 + 11 +26774.999913 + 21 +17607.145096 + 31 +0.0 + 0 +LINE + 5 +2064 + 8 +0 + 62 + 0 + 10 +26749.999913 + 20 +17650.446366 + 30 +0.0 + 11 +26740.0 + 21 +17667.766723 + 31 +0.0 + 0 +LINE + 5 +2065 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +17572.503929 + 30 +0.0 + 11 +26812.499913 + 21 +17585.494461 + 31 +0.0 + 0 +LINE + 5 +2066 + 8 +0 + 62 + 0 + 10 +26787.499913 + 20 +17628.795731 + 30 +0.0 + 11 +26774.999913 + 21 +17650.446366 + 31 +0.0 + 0 +LINE + 5 +2067 + 8 +0 + 62 + 0 + 10 +26749.999913 + 20 +17693.747637 + 30 +0.0 + 11 +26740.0 + 21 +17711.067993 + 31 +0.0 + 0 +LINE + 5 +2068 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +17615.805199 + 30 +0.0 + 11 +26812.499913 + 21 +17628.795731 + 31 +0.0 + 0 +LINE + 5 +2069 + 8 +0 + 62 + 0 + 10 +26787.499913 + 20 +17672.097001 + 30 +0.0 + 11 +26774.999913 + 21 +17693.747636 + 31 +0.0 + 0 +LINE + 5 +206A + 8 +0 + 62 + 0 + 10 +26749.999913 + 20 +17737.048907 + 30 +0.0 + 11 +26741.800908 + 21 +17751.25 + 31 +0.0 + 0 +LINE + 5 +206B + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +17659.106469 + 30 +0.0 + 11 +26812.499913 + 21 +17672.097001 + 31 +0.0 + 0 +LINE + 5 +206C + 8 +0 + 62 + 0 + 10 +26787.499913 + 20 +17715.398272 + 30 +0.0 + 11 +26774.999913 + 21 +17737.048907 + 31 +0.0 + 0 +LINE + 5 +206D + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +17702.407739 + 30 +0.0 + 11 +26812.499912 + 21 +17715.398271 + 31 +0.0 + 0 +LINE + 5 +206E + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +17745.709009 + 30 +0.0 + 11 +26816.800907 + 21 +17751.25 + 31 +0.0 + 0 +LINE + 5 +206F + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +14818.543487 + 30 +0.0 + 11 +26749.999939 + 21 +14835.863889 + 31 +0.0 + 0 +LINE + 5 +2070 + 8 +0 + 62 + 0 + 10 +26774.999939 + 20 +14879.16516 + 30 +0.0 + 11 +26787.499939 + 21 +14900.815795 + 31 +0.0 + 0 +LINE + 5 +2071 + 8 +0 + 62 + 0 + 10 +26812.499939 + 20 +14944.117065 + 30 +0.0 + 11 +26820.0 + 21 +14957.107551 + 31 +0.0 + 0 +LINE + 5 +2072 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +14861.844757 + 30 +0.0 + 11 +26749.999939 + 21 +14879.16516 + 31 +0.0 + 0 +LINE + 5 +2073 + 8 +0 + 62 + 0 + 10 +26774.999939 + 20 +14922.46643 + 30 +0.0 + 11 +26787.499939 + 21 +14944.117065 + 31 +0.0 + 0 +LINE + 5 +2074 + 8 +0 + 62 + 0 + 10 +26812.499939 + 20 +14987.418335 + 30 +0.0 + 11 +26820.0 + 21 +15000.408821 + 31 +0.0 + 0 +LINE + 5 +2075 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +14905.146027 + 30 +0.0 + 11 +26749.999939 + 21 +14922.46643 + 31 +0.0 + 0 +LINE + 5 +2076 + 8 +0 + 62 + 0 + 10 +26774.999939 + 20 +14965.7677 + 30 +0.0 + 11 +26787.499939 + 21 +14987.418335 + 31 +0.0 + 0 +LINE + 5 +2077 + 8 +0 + 62 + 0 + 10 +26812.499939 + 20 +15030.719605 + 30 +0.0 + 11 +26820.0 + 21 +15043.710091 + 31 +0.0 + 0 +LINE + 5 +2078 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +14948.447297 + 30 +0.0 + 11 +26749.99994 + 21 +14965.7677 + 31 +0.0 + 0 +LINE + 5 +2079 + 8 +0 + 62 + 0 + 10 +26774.99994 + 20 +15009.06897 + 30 +0.0 + 11 +26787.49994 + 21 +15030.719605 + 31 +0.0 + 0 +LINE + 5 +207A + 8 +0 + 62 + 0 + 10 +26812.49994 + 20 +15074.020875 + 30 +0.0 + 11 +26820.0 + 21 +15087.011361 + 31 +0.0 + 0 +LINE + 5 +207B + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +14991.748567 + 30 +0.0 + 11 +26749.99994 + 21 +15009.06897 + 31 +0.0 + 0 +LINE + 5 +207C + 8 +0 + 62 + 0 + 10 +26774.99994 + 20 +15052.37024 + 30 +0.0 + 11 +26787.49994 + 21 +15074.020875 + 31 +0.0 + 0 +LINE + 5 +207D + 8 +0 + 62 + 0 + 10 +26812.49994 + 20 +15117.322146 + 30 +0.0 + 11 +26820.0 + 21 +15130.312631 + 31 +0.0 + 0 +LINE + 5 +207E + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +15035.049837 + 30 +0.0 + 11 +26749.99994 + 21 +15052.37024 + 31 +0.0 + 0 +LINE + 5 +207F + 8 +0 + 62 + 0 + 10 +26774.99994 + 20 +15095.67151 + 30 +0.0 + 11 +26787.49994 + 21 +15117.322145 + 31 +0.0 + 0 +LINE + 5 +2080 + 8 +0 + 62 + 0 + 10 +26812.49994 + 20 +15160.623416 + 30 +0.0 + 11 +26820.0 + 21 +15173.613901 + 31 +0.0 + 0 +LINE + 5 +2081 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +15078.351107 + 30 +0.0 + 11 +26749.99994 + 21 +15095.67151 + 31 +0.0 + 0 +LINE + 5 +2082 + 8 +0 + 62 + 0 + 10 +26774.99994 + 20 +15138.972781 + 30 +0.0 + 11 +26787.49994 + 21 +15160.623416 + 31 +0.0 + 0 +LINE + 5 +2083 + 8 +0 + 62 + 0 + 10 +26812.49994 + 20 +15203.924686 + 30 +0.0 + 11 +26820.0 + 21 +15216.915171 + 31 +0.0 + 0 +LINE + 5 +2084 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +15121.652377 + 30 +0.0 + 11 +26749.99994 + 21 +15138.97278 + 31 +0.0 + 0 +LINE + 5 +2085 + 8 +0 + 62 + 0 + 10 +26774.99994 + 20 +15182.274051 + 30 +0.0 + 11 +26787.49994 + 21 +15203.924686 + 31 +0.0 + 0 +LINE + 5 +2086 + 8 +0 + 62 + 0 + 10 +26812.49994 + 20 +15247.225956 + 30 +0.0 + 11 +26820.0 + 21 +15260.216441 + 31 +0.0 + 0 +LINE + 5 +2087 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +15164.953647 + 30 +0.0 + 11 +26749.99994 + 21 +15182.274051 + 31 +0.0 + 0 +LINE + 5 +2088 + 8 +0 + 62 + 0 + 10 +26774.99994 + 20 +15225.575321 + 30 +0.0 + 11 +26787.49994 + 21 +15247.225956 + 31 +0.0 + 0 +LINE + 5 +2089 + 8 +0 + 62 + 0 + 10 +26812.49994 + 20 +15290.527226 + 30 +0.0 + 11 +26820.0 + 21 +15303.517711 + 31 +0.0 + 0 +LINE + 5 +208A + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +15208.254917 + 30 +0.0 + 11 +26749.99994 + 21 +15225.575321 + 31 +0.0 + 0 +LINE + 5 +208B + 8 +0 + 62 + 0 + 10 +26774.99994 + 20 +15268.876591 + 30 +0.0 + 11 +26787.49994 + 21 +15290.527226 + 31 +0.0 + 0 +LINE + 5 +208C + 8 +0 + 62 + 0 + 10 +26812.49994 + 20 +15333.828496 + 30 +0.0 + 11 +26820.0 + 21 +15346.818981 + 31 +0.0 + 0 +LINE + 5 +208D + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +15251.556187 + 30 +0.0 + 11 +26749.99994 + 21 +15268.876591 + 31 +0.0 + 0 +LINE + 5 +208E + 8 +0 + 62 + 0 + 10 +26774.99994 + 20 +15312.177861 + 30 +0.0 + 11 +26787.49994 + 21 +15333.828496 + 31 +0.0 + 0 +LINE + 5 +208F + 8 +0 + 62 + 0 + 10 +26812.49994 + 20 +15377.129766 + 30 +0.0 + 11 +26820.0 + 21 +15390.120251 + 31 +0.0 + 0 +LINE + 5 +2090 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +15294.857457 + 30 +0.0 + 11 +26749.99994 + 21 +15312.177861 + 31 +0.0 + 0 +LINE + 5 +2091 + 8 +0 + 62 + 0 + 10 +26774.99994 + 20 +15355.479131 + 30 +0.0 + 11 +26787.49994 + 21 +15377.129766 + 31 +0.0 + 0 +LINE + 5 +2092 + 8 +0 + 62 + 0 + 10 +26812.49994 + 20 +15420.431036 + 30 +0.0 + 11 +26820.0 + 21 +15433.421521 + 31 +0.0 + 0 +LINE + 5 +2093 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +15338.158727 + 30 +0.0 + 11 +26749.99994 + 21 +15355.479131 + 31 +0.0 + 0 +LINE + 5 +2094 + 8 +0 + 62 + 0 + 10 +26774.99994 + 20 +15398.780401 + 30 +0.0 + 11 +26787.49994 + 21 +15420.431036 + 31 +0.0 + 0 +LINE + 5 +2095 + 8 +0 + 62 + 0 + 10 +26812.49994 + 20 +15463.732307 + 30 +0.0 + 11 +26820.0 + 21 +15476.722791 + 31 +0.0 + 0 +LINE + 5 +2096 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +15381.459997 + 30 +0.0 + 11 +26749.99994 + 21 +15398.780401 + 31 +0.0 + 0 +LINE + 5 +2097 + 8 +0 + 62 + 0 + 10 +26774.99994 + 20 +15442.081671 + 30 +0.0 + 11 +26787.49994 + 21 +15463.732307 + 31 +0.0 + 0 +LINE + 5 +2098 + 8 +0 + 62 + 0 + 10 +26812.49994 + 20 +15507.033577 + 30 +0.0 + 11 +26820.0 + 21 +15520.024061 + 31 +0.0 + 0 +LINE + 5 +2099 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +15424.761267 + 30 +0.0 + 11 +26749.99994 + 21 +15442.081671 + 31 +0.0 + 0 +LINE + 5 +209A + 8 +0 + 62 + 0 + 10 +26774.99994 + 20 +15485.382942 + 30 +0.0 + 11 +26787.49994 + 21 +15507.033577 + 31 +0.0 + 0 +LINE + 5 +209B + 8 +0 + 62 + 0 + 10 +26812.49994 + 20 +15550.334847 + 30 +0.0 + 11 +26820.0 + 21 +15563.325331 + 31 +0.0 + 0 +LINE + 5 +209C + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +15468.062537 + 30 +0.0 + 11 +26749.999941 + 21 +15485.382942 + 31 +0.0 + 0 +LINE + 5 +209D + 8 +0 + 62 + 0 + 10 +26774.999941 + 20 +15528.684212 + 30 +0.0 + 11 +26787.499941 + 21 +15550.334847 + 31 +0.0 + 0 +LINE + 5 +209E + 8 +0 + 62 + 0 + 10 +26812.499941 + 20 +15593.636117 + 30 +0.0 + 11 +26820.0 + 21 +15606.626601 + 31 +0.0 + 0 +LINE + 5 +209F + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +15511.363807 + 30 +0.0 + 11 +26749.999941 + 21 +15528.684212 + 31 +0.0 + 0 +LINE + 5 +20A0 + 8 +0 + 62 + 0 + 10 +26774.999941 + 20 +15571.985482 + 30 +0.0 + 11 +26787.499941 + 21 +15593.636117 + 31 +0.0 + 0 +LINE + 5 +20A1 + 8 +0 + 62 + 0 + 10 +26812.499941 + 20 +15636.937387 + 30 +0.0 + 11 +26820.0 + 21 +15649.927871 + 31 +0.0 + 0 +LINE + 5 +20A2 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +15554.665077 + 30 +0.0 + 11 +26749.999941 + 21 +15571.985482 + 31 +0.0 + 0 +LINE + 5 +20A3 + 8 +0 + 62 + 0 + 10 +26774.999941 + 20 +15615.286752 + 30 +0.0 + 11 +26787.499941 + 21 +15636.937387 + 31 +0.0 + 0 +LINE + 5 +20A4 + 8 +0 + 62 + 0 + 10 +26812.499941 + 20 +15680.238657 + 30 +0.0 + 11 +26820.0 + 21 +15693.229141 + 31 +0.0 + 0 +LINE + 5 +20A5 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +15597.966347 + 30 +0.0 + 11 +26749.999941 + 21 +15615.286752 + 31 +0.0 + 0 +LINE + 5 +20A6 + 8 +0 + 62 + 0 + 10 +26774.999941 + 20 +15658.588022 + 30 +0.0 + 11 +26787.499941 + 21 +15680.238657 + 31 +0.0 + 0 +LINE + 5 +20A7 + 8 +0 + 62 + 0 + 10 +26812.499941 + 20 +15723.539927 + 30 +0.0 + 11 +26820.0 + 21 +15736.530411 + 31 +0.0 + 0 +LINE + 5 +20A8 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +15641.267617 + 30 +0.0 + 11 +26749.999941 + 21 +15658.588022 + 31 +0.0 + 0 +LINE + 5 +20A9 + 8 +0 + 62 + 0 + 10 +26774.999941 + 20 +15701.889292 + 30 +0.0 + 11 +26787.499941 + 21 +15723.539927 + 31 +0.0 + 0 +LINE + 5 +20AA + 8 +0 + 62 + 0 + 10 +26812.499941 + 20 +15766.841198 + 30 +0.0 + 11 +26820.0 + 21 +15779.831681 + 31 +0.0 + 0 +LINE + 5 +20AB + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +15684.568887 + 30 +0.0 + 11 +26749.999941 + 21 +15701.889292 + 31 +0.0 + 0 +LINE + 5 +20AC + 8 +0 + 62 + 0 + 10 +26774.999941 + 20 +15745.190562 + 30 +0.0 + 11 +26787.499941 + 21 +15766.841198 + 31 +0.0 + 0 +LINE + 5 +20AD + 8 +0 + 62 + 0 + 10 +26812.499941 + 20 +15810.142468 + 30 +0.0 + 11 +26820.0 + 21 +15823.132951 + 31 +0.0 + 0 +LINE + 5 +20AE + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +15727.870157 + 30 +0.0 + 11 +26749.999941 + 21 +15745.190562 + 31 +0.0 + 0 +LINE + 5 +20AF + 8 +0 + 62 + 0 + 10 +26774.999941 + 20 +15788.491833 + 30 +0.0 + 11 +26787.499941 + 21 +15810.142468 + 31 +0.0 + 0 +LINE + 5 +20B0 + 8 +0 + 62 + 0 + 10 +26812.499941 + 20 +15853.443738 + 30 +0.0 + 11 +26820.0 + 21 +15866.434221 + 31 +0.0 + 0 +LINE + 5 +20B1 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +15771.171427 + 30 +0.0 + 11 +26749.999941 + 21 +15788.491833 + 31 +0.0 + 0 +LINE + 5 +20B2 + 8 +0 + 62 + 0 + 10 +26774.999941 + 20 +15831.793103 + 30 +0.0 + 11 +26787.499941 + 21 +15853.443738 + 31 +0.0 + 0 +LINE + 5 +20B3 + 8 +0 + 62 + 0 + 10 +26812.499941 + 20 +15896.745008 + 30 +0.0 + 11 +26820.0 + 21 +15909.735491 + 31 +0.0 + 0 +LINE + 5 +20B4 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +15814.472697 + 30 +0.0 + 11 +26749.999941 + 21 +15831.793103 + 31 +0.0 + 0 +LINE + 5 +20B5 + 8 +0 + 62 + 0 + 10 +26774.999941 + 20 +15875.094373 + 30 +0.0 + 11 +26787.499941 + 21 +15896.745008 + 31 +0.0 + 0 +LINE + 5 +20B6 + 8 +0 + 62 + 0 + 10 +26812.499941 + 20 +15940.046278 + 30 +0.0 + 11 +26820.0 + 21 +15953.036761 + 31 +0.0 + 0 +LINE + 5 +20B7 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +15857.773967 + 30 +0.0 + 11 +26749.999941 + 21 +15875.094373 + 31 +0.0 + 0 +LINE + 5 +20B8 + 8 +0 + 62 + 0 + 10 +26774.999941 + 20 +15918.395643 + 30 +0.0 + 11 +26787.499941 + 21 +15940.046278 + 31 +0.0 + 0 +LINE + 5 +20B9 + 8 +0 + 62 + 0 + 10 +26812.499941 + 20 +15983.347548 + 30 +0.0 + 11 +26820.0 + 21 +15996.338031 + 31 +0.0 + 0 +LINE + 5 +20BA + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +15901.075237 + 30 +0.0 + 11 +26749.999941 + 21 +15918.395643 + 31 +0.0 + 0 +LINE + 5 +20BB + 8 +0 + 62 + 0 + 10 +26774.999941 + 20 +15961.696913 + 30 +0.0 + 11 +26787.499941 + 21 +15983.347548 + 31 +0.0 + 0 +LINE + 5 +20BC + 8 +0 + 62 + 0 + 10 +26812.499941 + 20 +16026.648818 + 30 +0.0 + 11 +26820.0 + 21 +16039.639301 + 31 +0.0 + 0 +LINE + 5 +20BD + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +15944.376507 + 30 +0.0 + 11 +26749.999941 + 21 +15961.696913 + 31 +0.0 + 0 +LINE + 5 +20BE + 8 +0 + 62 + 0 + 10 +26774.999941 + 20 +16004.998183 + 30 +0.0 + 11 +26787.499941 + 21 +16026.648818 + 31 +0.0 + 0 +LINE + 5 +20BF + 8 +0 + 62 + 0 + 10 +26812.499941 + 20 +16069.950089 + 30 +0.0 + 11 +26820.0 + 21 +16082.940571 + 31 +0.0 + 0 +LINE + 5 +20C0 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +15987.677777 + 30 +0.0 + 11 +26749.999941 + 21 +16004.998183 + 31 +0.0 + 0 +LINE + 5 +20C1 + 8 +0 + 62 + 0 + 10 +26774.999941 + 20 +16048.299453 + 30 +0.0 + 11 +26787.499941 + 21 +16069.950089 + 31 +0.0 + 0 +LINE + 5 +20C2 + 8 +0 + 62 + 0 + 10 +26812.499941 + 20 +16113.251359 + 30 +0.0 + 11 +26820.0 + 21 +16126.241841 + 31 +0.0 + 0 +LINE + 5 +20C3 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +16030.979047 + 30 +0.0 + 11 +26749.999942 + 21 +16048.299453 + 31 +0.0 + 0 +LINE + 5 +20C4 + 8 +0 + 62 + 0 + 10 +26774.999942 + 20 +16091.600724 + 30 +0.0 + 11 +26787.499942 + 21 +16113.251359 + 31 +0.0 + 0 +LINE + 5 +20C5 + 8 +0 + 62 + 0 + 10 +26812.499942 + 20 +16156.552629 + 30 +0.0 + 11 +26820.0 + 21 +16169.543111 + 31 +0.0 + 0 +LINE + 5 +20C6 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +16074.280317 + 30 +0.0 + 11 +26749.999942 + 21 +16091.600724 + 31 +0.0 + 0 +LINE + 5 +20C7 + 8 +0 + 62 + 0 + 10 +26774.999942 + 20 +16134.901994 + 30 +0.0 + 11 +26787.499942 + 21 +16156.552629 + 31 +0.0 + 0 +LINE + 5 +20C8 + 8 +0 + 62 + 0 + 10 +26812.499942 + 20 +16199.853899 + 30 +0.0 + 11 +26820.0 + 21 +16212.844381 + 31 +0.0 + 0 +LINE + 5 +20C9 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +16117.581587 + 30 +0.0 + 11 +26749.999942 + 21 +16134.901994 + 31 +0.0 + 0 +LINE + 5 +20CA + 8 +0 + 62 + 0 + 10 +26774.999942 + 20 +16178.203264 + 30 +0.0 + 11 +26787.499942 + 21 +16199.853899 + 31 +0.0 + 0 +LINE + 5 +20CB + 8 +0 + 62 + 0 + 10 +26812.499942 + 20 +16243.155169 + 30 +0.0 + 11 +26820.0 + 21 +16256.145651 + 31 +0.0 + 0 +LINE + 5 +20CC + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +16160.882857 + 30 +0.0 + 11 +26749.999942 + 21 +16178.203264 + 31 +0.0 + 0 +LINE + 5 +20CD + 8 +0 + 62 + 0 + 10 +26774.999942 + 20 +16221.504534 + 30 +0.0 + 11 +26787.499942 + 21 +16243.155169 + 31 +0.0 + 0 +LINE + 5 +20CE + 8 +0 + 62 + 0 + 10 +26812.499942 + 20 +16286.456439 + 30 +0.0 + 11 +26820.0 + 21 +16299.446921 + 31 +0.0 + 0 +LINE + 5 +20CF + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +16204.184127 + 30 +0.0 + 11 +26749.999942 + 21 +16221.504534 + 31 +0.0 + 0 +LINE + 5 +20D0 + 8 +0 + 62 + 0 + 10 +26774.999942 + 20 +16264.805804 + 30 +0.0 + 11 +26787.499942 + 21 +16286.456439 + 31 +0.0 + 0 +LINE + 5 +20D1 + 8 +0 + 62 + 0 + 10 +26812.499942 + 20 +16329.757709 + 30 +0.0 + 11 +26820.0 + 21 +16342.748191 + 31 +0.0 + 0 +LINE + 5 +20D2 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +16247.485397 + 30 +0.0 + 11 +26749.999942 + 21 +16264.805804 + 31 +0.0 + 0 +LINE + 5 +20D3 + 8 +0 + 62 + 0 + 10 +26774.999942 + 20 +16308.107074 + 30 +0.0 + 11 +26787.499942 + 21 +16329.757709 + 31 +0.0 + 0 +LINE + 5 +20D4 + 8 +0 + 62 + 0 + 10 +26812.499942 + 20 +16373.05898 + 30 +0.0 + 11 +26820.0 + 21 +16386.049461 + 31 +0.0 + 0 +LINE + 5 +20D5 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +16290.786667 + 30 +0.0 + 11 +26749.999942 + 21 +16308.107074 + 31 +0.0 + 0 +LINE + 5 +20D6 + 8 +0 + 62 + 0 + 10 +26774.999942 + 20 +16351.408344 + 30 +0.0 + 11 +26787.499942 + 21 +16373.05898 + 31 +0.0 + 0 +LINE + 5 +20D7 + 8 +0 + 62 + 0 + 10 +26812.499942 + 20 +16416.36025 + 30 +0.0 + 11 +26820.0 + 21 +16429.350731 + 31 +0.0 + 0 +LINE + 5 +20D8 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +16334.087937 + 30 +0.0 + 11 +26749.999942 + 21 +16351.408344 + 31 +0.0 + 0 +LINE + 5 +20D9 + 8 +0 + 62 + 0 + 10 +26774.999942 + 20 +16394.709615 + 30 +0.0 + 11 +26787.499942 + 21 +16416.36025 + 31 +0.0 + 0 +LINE + 5 +20DA + 8 +0 + 62 + 0 + 10 +26812.499942 + 20 +16459.66152 + 30 +0.0 + 11 +26820.0 + 21 +16472.652001 + 31 +0.0 + 0 +LINE + 5 +20DB + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +16377.389207 + 30 +0.0 + 11 +26749.999942 + 21 +16394.709615 + 31 +0.0 + 0 +LINE + 5 +20DC + 8 +0 + 62 + 0 + 10 +26774.999942 + 20 +16438.010885 + 30 +0.0 + 11 +26787.499942 + 21 +16459.66152 + 31 +0.0 + 0 +LINE + 5 +20DD + 8 +0 + 62 + 0 + 10 +26812.499942 + 20 +16502.96279 + 30 +0.0 + 11 +26820.0 + 21 +16515.953271 + 31 +0.0 + 0 +LINE + 5 +20DE + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +16420.690477 + 30 +0.0 + 11 +26749.999942 + 21 +16438.010885 + 31 +0.0 + 0 +LINE + 5 +20DF + 8 +0 + 62 + 0 + 10 +26774.999942 + 20 +16481.312155 + 30 +0.0 + 11 +26787.499942 + 21 +16502.96279 + 31 +0.0 + 0 +LINE + 5 +20E0 + 8 +0 + 62 + 0 + 10 +26812.499942 + 20 +16546.26406 + 30 +0.0 + 11 +26820.0 + 21 +16559.254541 + 31 +0.0 + 0 +LINE + 5 +20E1 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +16463.991747 + 30 +0.0 + 11 +26749.999942 + 21 +16481.312155 + 31 +0.0 + 0 +LINE + 5 +20E2 + 8 +0 + 62 + 0 + 10 +26774.999942 + 20 +16524.613425 + 30 +0.0 + 11 +26787.499942 + 21 +16546.26406 + 31 +0.0 + 0 +LINE + 5 +20E3 + 8 +0 + 62 + 0 + 10 +26812.499942 + 20 +16589.56533 + 30 +0.0 + 11 +26820.0 + 21 +16602.555811 + 31 +0.0 + 0 +LINE + 5 +20E4 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +16507.293017 + 30 +0.0 + 11 +26749.999942 + 21 +16524.613425 + 31 +0.0 + 0 +LINE + 5 +20E5 + 8 +0 + 62 + 0 + 10 +26774.999942 + 20 +16567.914695 + 30 +0.0 + 11 +26787.499942 + 21 +16589.56533 + 31 +0.0 + 0 +LINE + 5 +20E6 + 8 +0 + 62 + 0 + 10 +26812.499942 + 20 +16632.8666 + 30 +0.0 + 11 +26820.0 + 21 +16645.857081 + 31 +0.0 + 0 +LINE + 5 +20E7 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +16550.594287 + 30 +0.0 + 11 +26749.999943 + 21 +16567.914695 + 31 +0.0 + 0 +LINE + 5 +20E8 + 8 +0 + 62 + 0 + 10 +26774.999943 + 20 +16611.215965 + 30 +0.0 + 11 +26787.499943 + 21 +16632.8666 + 31 +0.0 + 0 +LINE + 5 +20E9 + 8 +0 + 62 + 0 + 10 +26812.499943 + 20 +16676.167871 + 30 +0.0 + 11 +26820.0 + 21 +16689.158351 + 31 +0.0 + 0 +LINE + 5 +20EA + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +16593.895557 + 30 +0.0 + 11 +26749.999943 + 21 +16611.215965 + 31 +0.0 + 0 +LINE + 5 +20EB + 8 +0 + 62 + 0 + 10 +26774.999943 + 20 +16654.517235 + 30 +0.0 + 11 +26787.499943 + 21 +16676.167871 + 31 +0.0 + 0 +LINE + 5 +20EC + 8 +0 + 62 + 0 + 10 +26812.499943 + 20 +16719.469141 + 30 +0.0 + 11 +26820.0 + 21 +16732.459621 + 31 +0.0 + 0 +LINE + 5 +20ED + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +16637.196827 + 30 +0.0 + 11 +26749.999943 + 21 +16654.517235 + 31 +0.0 + 0 +LINE + 5 +20EE + 8 +0 + 62 + 0 + 10 +26774.999943 + 20 +16697.818506 + 30 +0.0 + 11 +26787.499943 + 21 +16719.469141 + 31 +0.0 + 0 +LINE + 5 +20EF + 8 +0 + 62 + 0 + 10 +26812.499943 + 20 +16762.770411 + 30 +0.0 + 11 +26820.0 + 21 +16775.760891 + 31 +0.0 + 0 +LINE + 5 +20F0 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +16680.498097 + 30 +0.0 + 11 +26749.999943 + 21 +16697.818506 + 31 +0.0 + 0 +LINE + 5 +20F1 + 8 +0 + 62 + 0 + 10 +26774.999943 + 20 +16741.119776 + 30 +0.0 + 11 +26787.499943 + 21 +16762.770411 + 31 +0.0 + 0 +LINE + 5 +20F2 + 8 +0 + 62 + 0 + 10 +26812.499943 + 20 +16806.071681 + 30 +0.0 + 11 +26820.0 + 21 +16819.062161 + 31 +0.0 + 0 +LINE + 5 +20F3 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +16723.799367 + 30 +0.0 + 11 +26749.999943 + 21 +16741.119776 + 31 +0.0 + 0 +LINE + 5 +20F4 + 8 +0 + 62 + 0 + 10 +26774.999943 + 20 +16784.421046 + 30 +0.0 + 11 +26787.499943 + 21 +16806.071681 + 31 +0.0 + 0 +LINE + 5 +20F5 + 8 +0 + 62 + 0 + 10 +26812.499943 + 20 +16849.372951 + 30 +0.0 + 11 +26820.0 + 21 +16862.363431 + 31 +0.0 + 0 +LINE + 5 +20F6 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +16767.100637 + 30 +0.0 + 11 +26749.999943 + 21 +16784.421046 + 31 +0.0 + 0 +LINE + 5 +20F7 + 8 +0 + 62 + 0 + 10 +26774.999943 + 20 +16827.722316 + 30 +0.0 + 11 +26787.499943 + 21 +16849.372951 + 31 +0.0 + 0 +LINE + 5 +20F8 + 8 +0 + 62 + 0 + 10 +26812.499943 + 20 +16892.674221 + 30 +0.0 + 11 +26820.0 + 21 +16905.664701 + 31 +0.0 + 0 +LINE + 5 +20F9 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +16810.401907 + 30 +0.0 + 11 +26749.999943 + 21 +16827.722316 + 31 +0.0 + 0 +LINE + 5 +20FA + 8 +0 + 62 + 0 + 10 +26774.999943 + 20 +16871.023586 + 30 +0.0 + 11 +26787.499943 + 21 +16892.674221 + 31 +0.0 + 0 +LINE + 5 +20FB + 8 +0 + 62 + 0 + 10 +26812.499943 + 20 +16935.975491 + 30 +0.0 + 11 +26820.0 + 21 +16948.965971 + 31 +0.0 + 0 +LINE + 5 +20FC + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +16853.703177 + 30 +0.0 + 11 +26749.999943 + 21 +16871.023586 + 31 +0.0 + 0 +LINE + 5 +20FD + 8 +0 + 62 + 0 + 10 +26774.999943 + 20 +16914.324856 + 30 +0.0 + 11 +26787.499943 + 21 +16935.975491 + 31 +0.0 + 0 +LINE + 5 +20FE + 8 +0 + 62 + 0 + 10 +26812.499943 + 20 +16979.276762 + 30 +0.0 + 11 +26820.0 + 21 +16992.267241 + 31 +0.0 + 0 +LINE + 5 +20FF + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +16897.004447 + 30 +0.0 + 11 +26749.999943 + 21 +16914.324856 + 31 +0.0 + 0 +LINE + 5 +2100 + 8 +0 + 62 + 0 + 10 +26774.999943 + 20 +16957.626126 + 30 +0.0 + 11 +26787.499943 + 21 +16979.276762 + 31 +0.0 + 0 +LINE + 5 +2101 + 8 +0 + 62 + 0 + 10 +26812.499943 + 20 +17022.578032 + 30 +0.0 + 11 +26820.0 + 21 +17035.568511 + 31 +0.0 + 0 +LINE + 5 +2102 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +16940.305717 + 30 +0.0 + 11 +26749.999943 + 21 +16957.626126 + 31 +0.0 + 0 +LINE + 5 +2103 + 8 +0 + 62 + 0 + 10 +26774.999943 + 20 +17000.927397 + 30 +0.0 + 11 +26787.499943 + 21 +17022.578032 + 31 +0.0 + 0 +LINE + 5 +2104 + 8 +0 + 62 + 0 + 10 +26812.499943 + 20 +17065.879302 + 30 +0.0 + 11 +26820.0 + 21 +17078.869781 + 31 +0.0 + 0 +LINE + 5 +2105 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +16983.606987 + 30 +0.0 + 11 +26749.999943 + 21 +17000.927397 + 31 +0.0 + 0 +LINE + 5 +2106 + 8 +0 + 62 + 0 + 10 +26774.999943 + 20 +17044.228667 + 30 +0.0 + 11 +26787.499943 + 21 +17065.879302 + 31 +0.0 + 0 +LINE + 5 +2107 + 8 +0 + 62 + 0 + 10 +26812.499943 + 20 +17109.180572 + 30 +0.0 + 11 +26820.0 + 21 +17122.171051 + 31 +0.0 + 0 +LINE + 5 +2108 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +17026.908257 + 30 +0.0 + 11 +26749.999943 + 21 +17044.228667 + 31 +0.0 + 0 +LINE + 5 +2109 + 8 +0 + 62 + 0 + 10 +26774.999943 + 20 +17087.529937 + 30 +0.0 + 11 +26787.499943 + 21 +17109.180572 + 31 +0.0 + 0 +LINE + 5 +210A + 8 +0 + 62 + 0 + 10 +26812.499943 + 20 +17152.481842 + 30 +0.0 + 11 +26820.0 + 21 +17165.472321 + 31 +0.0 + 0 +LINE + 5 +210B + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +17070.209527 + 30 +0.0 + 11 +26749.999944 + 21 +17087.529937 + 31 +0.0 + 0 +LINE + 5 +210C + 8 +0 + 62 + 0 + 10 +26774.999944 + 20 +17130.831207 + 30 +0.0 + 11 +26787.499944 + 21 +17152.481842 + 31 +0.0 + 0 +LINE + 5 +210D + 8 +0 + 62 + 0 + 10 +26812.499944 + 20 +17195.783112 + 30 +0.0 + 11 +26820.0 + 21 +17208.773591 + 31 +0.0 + 0 +LINE + 5 +210E + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +17113.510797 + 30 +0.0 + 11 +26749.999944 + 21 +17130.831207 + 31 +0.0 + 0 +LINE + 5 +210F + 8 +0 + 62 + 0 + 10 +26774.999944 + 20 +17174.132477 + 30 +0.0 + 11 +26787.499944 + 21 +17195.783112 + 31 +0.0 + 0 +LINE + 5 +2110 + 8 +0 + 62 + 0 + 10 +26812.499944 + 20 +17239.084382 + 30 +0.0 + 11 +26820.0 + 21 +17252.074861 + 31 +0.0 + 0 +LINE + 5 +2111 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +17156.812067 + 30 +0.0 + 11 +26749.999944 + 21 +17174.132477 + 31 +0.0 + 0 +LINE + 5 +2112 + 8 +0 + 62 + 0 + 10 +26774.999944 + 20 +17217.433747 + 30 +0.0 + 11 +26787.499944 + 21 +17239.084382 + 31 +0.0 + 0 +LINE + 5 +2113 + 8 +0 + 62 + 0 + 10 +26812.499944 + 20 +17282.385653 + 30 +0.0 + 11 +26820.0 + 21 +17295.376131 + 31 +0.0 + 0 +LINE + 5 +2114 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +17200.113337 + 30 +0.0 + 11 +26749.999944 + 21 +17217.433747 + 31 +0.0 + 0 +LINE + 5 +2115 + 8 +0 + 62 + 0 + 10 +26774.999944 + 20 +17260.735017 + 30 +0.0 + 11 +26787.499944 + 21 +17282.385653 + 31 +0.0 + 0 +LINE + 5 +2116 + 8 +0 + 62 + 0 + 10 +26812.499944 + 20 +17325.686923 + 30 +0.0 + 11 +26820.0 + 21 +17338.677401 + 31 +0.0 + 0 +LINE + 5 +2117 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +17243.414607 + 30 +0.0 + 11 +26749.999944 + 21 +17260.735017 + 31 +0.0 + 0 +LINE + 5 +2118 + 8 +0 + 62 + 0 + 10 +26774.999944 + 20 +17304.036288 + 30 +0.0 + 11 +26787.499944 + 21 +17325.686923 + 31 +0.0 + 0 +LINE + 5 +2119 + 8 +0 + 62 + 0 + 10 +26812.499944 + 20 +17368.988193 + 30 +0.0 + 11 +26820.0 + 21 +17381.978671 + 31 +0.0 + 0 +LINE + 5 +211A + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +17286.715877 + 30 +0.0 + 11 +26749.999944 + 21 +17304.036288 + 31 +0.0 + 0 +LINE + 5 +211B + 8 +0 + 62 + 0 + 10 +26774.999944 + 20 +17347.337558 + 30 +0.0 + 11 +26787.499944 + 21 +17368.988193 + 31 +0.0 + 0 +LINE + 5 +211C + 8 +0 + 62 + 0 + 10 +26812.499944 + 20 +17412.289463 + 30 +0.0 + 11 +26820.0 + 21 +17425.279941 + 31 +0.0 + 0 +LINE + 5 +211D + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +17330.017147 + 30 +0.0 + 11 +26749.999944 + 21 +17347.337558 + 31 +0.0 + 0 +LINE + 5 +211E + 8 +0 + 62 + 0 + 10 +26774.999944 + 20 +17390.638828 + 30 +0.0 + 11 +26787.499944 + 21 +17412.289463 + 31 +0.0 + 0 +LINE + 5 +211F + 8 +0 + 62 + 0 + 10 +26812.499944 + 20 +17455.590733 + 30 +0.0 + 11 +26820.0 + 21 +17468.581211 + 31 +0.0 + 0 +LINE + 5 +2120 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +17373.318417 + 30 +0.0 + 11 +26749.999944 + 21 +17390.638828 + 31 +0.0 + 0 +LINE + 5 +2121 + 8 +0 + 62 + 0 + 10 +26774.999944 + 20 +17433.940098 + 30 +0.0 + 11 +26787.499944 + 21 +17455.590733 + 31 +0.0 + 0 +LINE + 5 +2122 + 8 +0 + 62 + 0 + 10 +26812.499944 + 20 +17498.892003 + 30 +0.0 + 11 +26820.0 + 21 +17511.882481 + 31 +0.0 + 0 +LINE + 5 +2123 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +17416.619687 + 30 +0.0 + 11 +26749.999944 + 21 +17433.940098 + 31 +0.0 + 0 +LINE + 5 +2124 + 8 +0 + 62 + 0 + 10 +26774.999944 + 20 +17477.241368 + 30 +0.0 + 11 +26787.499944 + 21 +17498.892003 + 31 +0.0 + 0 +LINE + 5 +2125 + 8 +0 + 62 + 0 + 10 +26812.499944 + 20 +17542.193273 + 30 +0.0 + 11 +26820.0 + 21 +17555.183751 + 31 +0.0 + 0 +LINE + 5 +2126 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +17459.920957 + 30 +0.0 + 11 +26749.999944 + 21 +17477.241368 + 31 +0.0 + 0 +LINE + 5 +2127 + 8 +0 + 62 + 0 + 10 +26774.999944 + 20 +17520.542638 + 30 +0.0 + 11 +26787.499944 + 21 +17542.193273 + 31 +0.0 + 0 +LINE + 5 +2128 + 8 +0 + 62 + 0 + 10 +26812.499944 + 20 +17585.494544 + 30 +0.0 + 11 +26820.0 + 21 +17598.485021 + 31 +0.0 + 0 +LINE + 5 +2129 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +17503.222227 + 30 +0.0 + 11 +26749.999944 + 21 +17520.542638 + 31 +0.0 + 0 +LINE + 5 +212A + 8 +0 + 62 + 0 + 10 +26774.999944 + 20 +17563.843908 + 30 +0.0 + 11 +26787.499944 + 21 +17585.494544 + 31 +0.0 + 0 +LINE + 5 +212B + 8 +0 + 62 + 0 + 10 +26812.499944 + 20 +17628.795814 + 30 +0.0 + 11 +26820.0 + 21 +17641.786291 + 31 +0.0 + 0 +LINE + 5 +212C + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +17546.523497 + 30 +0.0 + 11 +26749.999944 + 21 +17563.843908 + 31 +0.0 + 0 +LINE + 5 +212D + 8 +0 + 62 + 0 + 10 +26774.999944 + 20 +17607.145179 + 30 +0.0 + 11 +26787.499944 + 21 +17628.795814 + 31 +0.0 + 0 +LINE + 5 +212E + 8 +0 + 62 + 0 + 10 +26812.499944 + 20 +17672.097084 + 30 +0.0 + 11 +26820.0 + 21 +17685.087561 + 31 +0.0 + 0 +LINE + 5 +212F + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +17589.824767 + 30 +0.0 + 11 +26749.999945 + 21 +17607.145179 + 31 +0.0 + 0 +LINE + 5 +2130 + 8 +0 + 62 + 0 + 10 +26774.999945 + 20 +17650.446449 + 30 +0.0 + 11 +26787.499945 + 21 +17672.097084 + 31 +0.0 + 0 +LINE + 5 +2131 + 8 +0 + 62 + 0 + 10 +26812.499945 + 20 +17715.398354 + 30 +0.0 + 11 +26820.0 + 21 +17728.388831 + 31 +0.0 + 0 +LINE + 5 +2132 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +17633.126037 + 30 +0.0 + 11 +26749.999945 + 21 +17650.446449 + 31 +0.0 + 0 +LINE + 5 +2133 + 8 +0 + 62 + 0 + 10 +26774.999945 + 20 +17693.747719 + 30 +0.0 + 11 +26787.499945 + 21 +17715.398354 + 31 +0.0 + 0 +LINE + 5 +2134 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +17676.427307 + 30 +0.0 + 11 +26749.999945 + 21 +17693.747719 + 31 +0.0 + 0 +LINE + 5 +2135 + 8 +0 + 62 + 0 + 10 +26774.999945 + 20 +17737.048989 + 30 +0.0 + 11 +26783.198902 + 21 +17751.25 + 31 +0.0 + 0 +LINE + 5 +2136 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +17719.728577 + 30 +0.0 + 11 +26749.999945 + 21 +17737.048989 + 31 +0.0 + 0 +LINE + 5 +2137 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +14775.242217 + 30 +0.0 + 11 +26749.999939 + 21 +14792.562619 + 31 +0.0 + 0 +LINE + 5 +2138 + 8 +0 + 62 + 0 + 10 +26774.999939 + 20 +14835.86389 + 30 +0.0 + 11 +26787.499939 + 21 +14857.514525 + 31 +0.0 + 0 +LINE + 5 +2139 + 8 +0 + 62 + 0 + 10 +26812.499939 + 20 +14900.815795 + 30 +0.0 + 11 +26820.0 + 21 +14913.806281 + 31 +0.0 + 0 +LINE + 5 +213A + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +14731.940947 + 30 +0.0 + 11 +26749.999939 + 21 +14749.261349 + 31 +0.0 + 0 +LINE + 5 +213B + 8 +0 + 62 + 0 + 10 +26774.999939 + 20 +14792.562619 + 30 +0.0 + 11 +26787.499939 + 21 +14814.213254 + 31 +0.0 + 0 +LINE + 5 +213C + 8 +0 + 62 + 0 + 10 +26812.499939 + 20 +14857.514525 + 30 +0.0 + 11 +26820.0 + 21 +14870.505011 + 31 +0.0 + 0 +LINE + 5 +213D + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +14688.639677 + 30 +0.0 + 11 +26749.999939 + 21 +14705.960079 + 31 +0.0 + 0 +LINE + 5 +213E + 8 +0 + 62 + 0 + 10 +26774.999939 + 20 +14749.261349 + 30 +0.0 + 11 +26787.499939 + 21 +14770.911984 + 31 +0.0 + 0 +LINE + 5 +213F + 8 +0 + 62 + 0 + 10 +26812.499939 + 20 +14814.213255 + 30 +0.0 + 11 +26820.0 + 21 +14827.203741 + 31 +0.0 + 0 +LINE + 5 +2140 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +14645.338407 + 30 +0.0 + 11 +26749.999939 + 21 +14662.658809 + 31 +0.0 + 0 +LINE + 5 +2141 + 8 +0 + 62 + 0 + 10 +26774.999939 + 20 +14705.960079 + 30 +0.0 + 11 +26787.499939 + 21 +14727.610714 + 31 +0.0 + 0 +LINE + 5 +2142 + 8 +0 + 62 + 0 + 10 +26812.499939 + 20 +14770.911984 + 30 +0.0 + 11 +26820.0 + 21 +14783.902471 + 31 +0.0 + 0 +LINE + 5 +2143 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +14602.037137 + 30 +0.0 + 11 +26749.999939 + 21 +14619.357539 + 31 +0.0 + 0 +LINE + 5 +2144 + 8 +0 + 62 + 0 + 10 +26774.999939 + 20 +14662.658809 + 30 +0.0 + 11 +26787.499939 + 21 +14684.309444 + 31 +0.0 + 0 +LINE + 5 +2145 + 8 +0 + 62 + 0 + 10 +26812.499939 + 20 +14727.610714 + 30 +0.0 + 11 +26820.0 + 21 +14740.601201 + 31 +0.0 + 0 +LINE + 5 +2146 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +14558.735867 + 30 +0.0 + 11 +26749.999939 + 21 +14576.056269 + 31 +0.0 + 0 +LINE + 5 +2147 + 8 +0 + 62 + 0 + 10 +26774.999939 + 20 +14619.357539 + 30 +0.0 + 11 +26787.499939 + 21 +14641.008174 + 31 +0.0 + 0 +LINE + 5 +2148 + 8 +0 + 62 + 0 + 10 +26812.499939 + 20 +14684.309444 + 30 +0.0 + 11 +26820.0 + 21 +14697.299931 + 31 +0.0 + 0 +LINE + 5 +2149 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +14515.434597 + 30 +0.0 + 11 +26749.999939 + 21 +14532.754998 + 31 +0.0 + 0 +LINE + 5 +214A + 8 +0 + 62 + 0 + 10 +26774.999939 + 20 +14576.056269 + 30 +0.0 + 11 +26787.499939 + 21 +14597.706904 + 31 +0.0 + 0 +LINE + 5 +214B + 8 +0 + 62 + 0 + 10 +26812.499939 + 20 +14641.008174 + 30 +0.0 + 11 +26820.0 + 21 +14653.998661 + 31 +0.0 + 0 +LINE + 5 +214C + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +14472.133327 + 30 +0.0 + 11 +26749.999939 + 21 +14489.453728 + 31 +0.0 + 0 +LINE + 5 +214D + 8 +0 + 62 + 0 + 10 +26774.999939 + 20 +14532.754999 + 30 +0.0 + 11 +26787.499939 + 21 +14554.405634 + 31 +0.0 + 0 +LINE + 5 +214E + 8 +0 + 62 + 0 + 10 +26812.499939 + 20 +14597.706904 + 30 +0.0 + 11 +26820.0 + 21 +14610.697391 + 31 +0.0 + 0 +LINE + 5 +214F + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +14428.832057 + 30 +0.0 + 11 +26749.999939 + 21 +14446.152458 + 31 +0.0 + 0 +LINE + 5 +2150 + 8 +0 + 62 + 0 + 10 +26774.999939 + 20 +14489.453728 + 30 +0.0 + 11 +26787.499939 + 21 +14511.104363 + 31 +0.0 + 0 +LINE + 5 +2151 + 8 +0 + 62 + 0 + 10 +26812.499939 + 20 +14554.405634 + 30 +0.0 + 11 +26820.0 + 21 +14567.396121 + 31 +0.0 + 0 +LINE + 5 +2152 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +14385.530787 + 30 +0.0 + 11 +26749.999938 + 21 +14402.851188 + 31 +0.0 + 0 +LINE + 5 +2153 + 8 +0 + 62 + 0 + 10 +26774.999938 + 20 +14446.152458 + 30 +0.0 + 11 +26787.499938 + 21 +14467.803093 + 31 +0.0 + 0 +LINE + 5 +2154 + 8 +0 + 62 + 0 + 10 +26812.499938 + 20 +14511.104364 + 30 +0.0 + 11 +26820.0 + 21 +14524.094851 + 31 +0.0 + 0 +LINE + 5 +2155 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +14342.229517 + 30 +0.0 + 11 +26749.999938 + 21 +14359.549918 + 31 +0.0 + 0 +LINE + 5 +2156 + 8 +0 + 62 + 0 + 10 +26774.999938 + 20 +14402.851188 + 30 +0.0 + 11 +26787.499938 + 21 +14424.501823 + 31 +0.0 + 0 +LINE + 5 +2157 + 8 +0 + 62 + 0 + 10 +26812.499938 + 20 +14467.803093 + 30 +0.0 + 11 +26820.0 + 21 +14480.793581 + 31 +0.0 + 0 +LINE + 5 +2158 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +14298.928247 + 30 +0.0 + 11 +26749.999938 + 21 +14316.248648 + 31 +0.0 + 0 +LINE + 5 +2159 + 8 +0 + 62 + 0 + 10 +26774.999938 + 20 +14359.549918 + 30 +0.0 + 11 +26787.499938 + 21 +14381.200553 + 31 +0.0 + 0 +LINE + 5 +215A + 8 +0 + 62 + 0 + 10 +26812.499938 + 20 +14424.501823 + 30 +0.0 + 11 +26820.0 + 21 +14437.492311 + 31 +0.0 + 0 +LINE + 5 +215B + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +14255.626977 + 30 +0.0 + 11 +26749.999938 + 21 +14272.947378 + 31 +0.0 + 0 +LINE + 5 +215C + 8 +0 + 62 + 0 + 10 +26774.999938 + 20 +14316.248648 + 30 +0.0 + 11 +26787.499938 + 21 +14337.899283 + 31 +0.0 + 0 +LINE + 5 +215D + 8 +0 + 62 + 0 + 10 +26812.499938 + 20 +14381.200553 + 30 +0.0 + 11 +26820.0 + 21 +14394.191041 + 31 +0.0 + 0 +LINE + 5 +215E + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +14212.325707 + 30 +0.0 + 11 +26749.999938 + 21 +14229.646107 + 31 +0.0 + 0 +LINE + 5 +215F + 8 +0 + 62 + 0 + 10 +26774.999938 + 20 +14272.947378 + 30 +0.0 + 11 +26787.499938 + 21 +14294.598013 + 31 +0.0 + 0 +LINE + 5 +2160 + 8 +0 + 62 + 0 + 10 +26812.499938 + 20 +14337.899283 + 30 +0.0 + 11 +26820.0 + 21 +14350.889771 + 31 +0.0 + 0 +LINE + 5 +2161 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +14169.024437 + 30 +0.0 + 11 +26749.999938 + 21 +14186.344837 + 31 +0.0 + 0 +LINE + 5 +2162 + 8 +0 + 62 + 0 + 10 +26774.999938 + 20 +14229.646108 + 30 +0.0 + 11 +26787.499938 + 21 +14251.296743 + 31 +0.0 + 0 +LINE + 5 +2163 + 8 +0 + 62 + 0 + 10 +26812.499938 + 20 +14294.598013 + 30 +0.0 + 11 +26820.0 + 21 +14307.588501 + 31 +0.0 + 0 +LINE + 5 +2164 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +14125.723167 + 30 +0.0 + 11 +26749.999938 + 21 +14143.043567 + 31 +0.0 + 0 +LINE + 5 +2165 + 8 +0 + 62 + 0 + 10 +26774.999938 + 20 +14186.344837 + 30 +0.0 + 11 +26787.499938 + 21 +14207.995472 + 31 +0.0 + 0 +LINE + 5 +2166 + 8 +0 + 62 + 0 + 10 +26812.499938 + 20 +14251.296743 + 30 +0.0 + 11 +26820.0 + 21 +14264.287231 + 31 +0.0 + 0 +LINE + 5 +2167 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +14082.421897 + 30 +0.0 + 11 +26749.999938 + 21 +14099.742297 + 31 +0.0 + 0 +LINE + 5 +2168 + 8 +0 + 62 + 0 + 10 +26774.999938 + 20 +14143.043567 + 30 +0.0 + 11 +26787.499938 + 21 +14164.694202 + 31 +0.0 + 0 +LINE + 5 +2169 + 8 +0 + 62 + 0 + 10 +26812.499938 + 20 +14207.995473 + 30 +0.0 + 11 +26820.0 + 21 +14220.985961 + 31 +0.0 + 0 +LINE + 5 +216A + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +14039.120627 + 30 +0.0 + 11 +26749.999938 + 21 +14056.441027 + 31 +0.0 + 0 +LINE + 5 +216B + 8 +0 + 62 + 0 + 10 +26774.999938 + 20 +14099.742297 + 30 +0.0 + 11 +26787.499938 + 21 +14121.392932 + 31 +0.0 + 0 +LINE + 5 +216C + 8 +0 + 62 + 0 + 10 +26812.499938 + 20 +14164.694202 + 30 +0.0 + 11 +26820.0 + 21 +14177.684691 + 31 +0.0 + 0 +LINE + 5 +216D + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +13995.819357 + 30 +0.0 + 11 +26749.999938 + 21 +14013.139757 + 31 +0.0 + 0 +LINE + 5 +216E + 8 +0 + 62 + 0 + 10 +26774.999938 + 20 +14056.441027 + 30 +0.0 + 11 +26787.499938 + 21 +14078.091662 + 31 +0.0 + 0 +LINE + 5 +216F + 8 +0 + 62 + 0 + 10 +26812.499938 + 20 +14121.392932 + 30 +0.0 + 11 +26820.0 + 21 +14134.383421 + 31 +0.0 + 0 +LINE + 5 +2170 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +13952.518087 + 30 +0.0 + 11 +26749.999938 + 21 +13969.838487 + 31 +0.0 + 0 +LINE + 5 +2171 + 8 +0 + 62 + 0 + 10 +26774.999938 + 20 +14013.139757 + 30 +0.0 + 11 +26787.499938 + 21 +14034.790392 + 31 +0.0 + 0 +LINE + 5 +2172 + 8 +0 + 62 + 0 + 10 +26812.499938 + 20 +14078.091662 + 30 +0.0 + 11 +26820.0 + 21 +14091.082151 + 31 +0.0 + 0 +LINE + 5 +2173 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +13909.216817 + 30 +0.0 + 11 +26749.999938 + 21 +13926.537216 + 31 +0.0 + 0 +LINE + 5 +2174 + 8 +0 + 62 + 0 + 10 +26774.999938 + 20 +13969.838487 + 30 +0.0 + 11 +26787.499938 + 21 +13991.489122 + 31 +0.0 + 0 +LINE + 5 +2175 + 8 +0 + 62 + 0 + 10 +26812.499938 + 20 +14034.790392 + 30 +0.0 + 11 +26820.0 + 21 +14047.780881 + 31 +0.0 + 0 +LINE + 5 +2176 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +13865.915547 + 30 +0.0 + 11 +26749.999937 + 21 +13883.235946 + 31 +0.0 + 0 +LINE + 5 +2177 + 8 +0 + 62 + 0 + 10 +26774.999937 + 20 +13926.537217 + 30 +0.0 + 11 +26787.499937 + 21 +13948.187852 + 31 +0.0 + 0 +LINE + 5 +2178 + 8 +0 + 62 + 0 + 10 +26812.499937 + 20 +13991.489122 + 30 +0.0 + 11 +26820.0 + 21 +14004.479611 + 31 +0.0 + 0 +LINE + 5 +2179 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +13822.614277 + 30 +0.0 + 11 +26749.999937 + 21 +13839.934676 + 31 +0.0 + 0 +LINE + 5 +217A + 8 +0 + 62 + 0 + 10 +26774.999937 + 20 +13883.235946 + 30 +0.0 + 11 +26787.499937 + 21 +13904.886581 + 31 +0.0 + 0 +LINE + 5 +217B + 8 +0 + 62 + 0 + 10 +26812.499937 + 20 +13948.187852 + 30 +0.0 + 11 +26820.0 + 21 +13961.178341 + 31 +0.0 + 0 +LINE + 5 +217C + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +13779.313007 + 30 +0.0 + 11 +26749.999937 + 21 +13796.633406 + 31 +0.0 + 0 +LINE + 5 +217D + 8 +0 + 62 + 0 + 10 +26774.999937 + 20 +13839.934676 + 30 +0.0 + 11 +26787.499937 + 21 +13861.585311 + 31 +0.0 + 0 +LINE + 5 +217E + 8 +0 + 62 + 0 + 10 +26812.499937 + 20 +13904.886582 + 30 +0.0 + 11 +26820.0 + 21 +13917.877071 + 31 +0.0 + 0 +LINE + 5 +217F + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +13736.011737 + 30 +0.0 + 11 +26749.999937 + 21 +13753.332136 + 31 +0.0 + 0 +LINE + 5 +2180 + 8 +0 + 62 + 0 + 10 +26774.999937 + 20 +13796.633406 + 30 +0.0 + 11 +26787.499937 + 21 +13818.284041 + 31 +0.0 + 0 +LINE + 5 +2181 + 8 +0 + 62 + 0 + 10 +26812.499937 + 20 +13861.585311 + 30 +0.0 + 11 +26820.0 + 21 +13874.575801 + 31 +0.0 + 0 +LINE + 5 +2182 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +13692.710467 + 30 +0.0 + 11 +26749.999937 + 21 +13710.030866 + 31 +0.0 + 0 +LINE + 5 +2183 + 8 +0 + 62 + 0 + 10 +26774.999937 + 20 +13753.332136 + 30 +0.0 + 11 +26787.499937 + 21 +13774.982771 + 31 +0.0 + 0 +LINE + 5 +2184 + 8 +0 + 62 + 0 + 10 +26812.499937 + 20 +13818.284041 + 30 +0.0 + 11 +26820.0 + 21 +13831.274531 + 31 +0.0 + 0 +LINE + 5 +2185 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +13649.409197 + 30 +0.0 + 11 +26749.999937 + 21 +13666.729596 + 31 +0.0 + 0 +LINE + 5 +2186 + 8 +0 + 62 + 0 + 10 +26774.999937 + 20 +13710.030866 + 30 +0.0 + 11 +26787.499937 + 21 +13731.681501 + 31 +0.0 + 0 +LINE + 5 +2187 + 8 +0 + 62 + 0 + 10 +26812.499937 + 20 +13774.982771 + 30 +0.0 + 11 +26820.0 + 21 +13787.973261 + 31 +0.0 + 0 +LINE + 5 +2188 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +13606.107927 + 30 +0.0 + 11 +26749.999937 + 21 +13623.428325 + 31 +0.0 + 0 +LINE + 5 +2189 + 8 +0 + 62 + 0 + 10 +26774.999937 + 20 +13666.729596 + 30 +0.0 + 11 +26787.499937 + 21 +13688.380231 + 31 +0.0 + 0 +LINE + 5 +218A + 8 +0 + 62 + 0 + 10 +26812.499937 + 20 +13731.681501 + 30 +0.0 + 11 +26820.0 + 21 +13744.671991 + 31 +0.0 + 0 +LINE + 5 +218B + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +13562.806657 + 30 +0.0 + 11 +26749.999937 + 21 +13580.127055 + 31 +0.0 + 0 +LINE + 5 +218C + 8 +0 + 62 + 0 + 10 +26774.999937 + 20 +13623.428326 + 30 +0.0 + 11 +26787.499937 + 21 +13645.078961 + 31 +0.0 + 0 +LINE + 5 +218D + 8 +0 + 62 + 0 + 10 +26812.499937 + 20 +13688.380231 + 30 +0.0 + 11 +26820.0 + 21 +13701.370721 + 31 +0.0 + 0 +LINE + 5 +218E + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +13519.505387 + 30 +0.0 + 11 +26749.999937 + 21 +13536.825785 + 31 +0.0 + 0 +LINE + 5 +218F + 8 +0 + 62 + 0 + 10 +26774.999937 + 20 +13580.127055 + 30 +0.0 + 11 +26787.499937 + 21 +13601.77769 + 31 +0.0 + 0 +LINE + 5 +2190 + 8 +0 + 62 + 0 + 10 +26812.499937 + 20 +13645.078961 + 30 +0.0 + 11 +26820.0 + 21 +13658.069451 + 31 +0.0 + 0 +LINE + 5 +2191 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +13476.204117 + 30 +0.0 + 11 +26749.999937 + 21 +13493.524515 + 31 +0.0 + 0 +LINE + 5 +2192 + 8 +0 + 62 + 0 + 10 +26774.999937 + 20 +13536.825785 + 30 +0.0 + 11 +26787.499937 + 21 +13558.47642 + 31 +0.0 + 0 +LINE + 5 +2193 + 8 +0 + 62 + 0 + 10 +26812.499937 + 20 +13601.777691 + 30 +0.0 + 11 +26820.0 + 21 +13614.768181 + 31 +0.0 + 0 +LINE + 5 +2194 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +13432.902847 + 30 +0.0 + 11 +26749.999937 + 21 +13450.223245 + 31 +0.0 + 0 +LINE + 5 +2195 + 8 +0 + 62 + 0 + 10 +26774.999937 + 20 +13493.524515 + 30 +0.0 + 11 +26787.499937 + 21 +13515.17515 + 31 +0.0 + 0 +LINE + 5 +2196 + 8 +0 + 62 + 0 + 10 +26812.499937 + 20 +13558.47642 + 30 +0.0 + 11 +26820.0 + 21 +13571.466911 + 31 +0.0 + 0 +LINE + 5 +2197 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +13389.601577 + 30 +0.0 + 11 +26749.999937 + 21 +13406.921975 + 31 +0.0 + 0 +LINE + 5 +2198 + 8 +0 + 62 + 0 + 10 +26774.999937 + 20 +13450.223245 + 30 +0.0 + 11 +26787.499937 + 21 +13471.87388 + 31 +0.0 + 0 +LINE + 5 +2199 + 8 +0 + 62 + 0 + 10 +26812.499937 + 20 +13515.17515 + 30 +0.0 + 11 +26820.0 + 21 +13528.165641 + 31 +0.0 + 0 +LINE + 5 +219A + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +13346.300307 + 30 +0.0 + 11 +26749.999936 + 21 +13363.620705 + 31 +0.0 + 0 +LINE + 5 +219B + 8 +0 + 62 + 0 + 10 +26774.999936 + 20 +13406.921975 + 30 +0.0 + 11 +26787.499936 + 21 +13428.57261 + 31 +0.0 + 0 +LINE + 5 +219C + 8 +0 + 62 + 0 + 10 +26812.499936 + 20 +13471.87388 + 30 +0.0 + 11 +26820.0 + 21 +13484.864371 + 31 +0.0 + 0 +LINE + 5 +219D + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +13302.999037 + 30 +0.0 + 11 +26749.999936 + 21 +13320.319434 + 31 +0.0 + 0 +LINE + 5 +219E + 8 +0 + 62 + 0 + 10 +26774.999936 + 20 +13363.620705 + 30 +0.0 + 11 +26787.499936 + 21 +13385.27134 + 31 +0.0 + 0 +LINE + 5 +219F + 8 +0 + 62 + 0 + 10 +26812.499936 + 20 +13428.57261 + 30 +0.0 + 11 +26820.0 + 21 +13441.563101 + 31 +0.0 + 0 +LINE + 5 +21A0 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +13259.697767 + 30 +0.0 + 11 +26749.999936 + 21 +13277.018164 + 31 +0.0 + 0 +LINE + 5 +21A1 + 8 +0 + 62 + 0 + 10 +26774.999936 + 20 +13320.319435 + 30 +0.0 + 11 +26787.499936 + 21 +13341.97007 + 31 +0.0 + 0 +LINE + 5 +21A2 + 8 +0 + 62 + 0 + 10 +26812.499936 + 20 +13385.27134 + 30 +0.0 + 11 +26820.0 + 21 +13398.261831 + 31 +0.0 + 0 +LINE + 5 +21A3 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +13216.396497 + 30 +0.0 + 11 +26749.999936 + 21 +13233.716894 + 31 +0.0 + 0 +LINE + 5 +21A4 + 8 +0 + 62 + 0 + 10 +26774.999936 + 20 +13277.018164 + 30 +0.0 + 11 +26787.499936 + 21 +13298.668799 + 31 +0.0 + 0 +LINE + 5 +21A5 + 8 +0 + 62 + 0 + 10 +26812.499936 + 20 +13341.97007 + 30 +0.0 + 11 +26820.0 + 21 +13354.960561 + 31 +0.0 + 0 +LINE + 5 +21A6 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +13173.095227 + 30 +0.0 + 11 +26749.999936 + 21 +13190.415624 + 31 +0.0 + 0 +LINE + 5 +21A7 + 8 +0 + 62 + 0 + 10 +26774.999936 + 20 +13233.716894 + 30 +0.0 + 11 +26787.499936 + 21 +13255.367529 + 31 +0.0 + 0 +LINE + 5 +21A8 + 8 +0 + 62 + 0 + 10 +26812.499936 + 20 +13298.6688 + 30 +0.0 + 11 +26820.0 + 21 +13311.659291 + 31 +0.0 + 0 +LINE + 5 +21A9 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +13129.793957 + 30 +0.0 + 11 +26749.999936 + 21 +13147.114354 + 31 +0.0 + 0 +LINE + 5 +21AA + 8 +0 + 62 + 0 + 10 +26774.999936 + 20 +13190.415624 + 30 +0.0 + 11 +26787.499936 + 21 +13212.066259 + 31 +0.0 + 0 +LINE + 5 +21AB + 8 +0 + 62 + 0 + 10 +26812.499936 + 20 +13255.367529 + 30 +0.0 + 11 +26820.0 + 21 +13268.358021 + 31 +0.0 + 0 +LINE + 5 +21AC + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +13086.492687 + 30 +0.0 + 11 +26749.999936 + 21 +13103.813084 + 31 +0.0 + 0 +LINE + 5 +21AD + 8 +0 + 62 + 0 + 10 +26774.999936 + 20 +13147.114354 + 30 +0.0 + 11 +26787.499936 + 21 +13168.764989 + 31 +0.0 + 0 +LINE + 5 +21AE + 8 +0 + 62 + 0 + 10 +26812.499936 + 20 +13212.066259 + 30 +0.0 + 11 +26820.0 + 21 +13225.056751 + 31 +0.0 + 0 +LINE + 5 +21AF + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +13043.191417 + 30 +0.0 + 11 +26749.999936 + 21 +13060.511814 + 31 +0.0 + 0 +LINE + 5 +21B0 + 8 +0 + 62 + 0 + 10 +26774.999936 + 20 +13103.813084 + 30 +0.0 + 11 +26787.499936 + 21 +13125.463719 + 31 +0.0 + 0 +LINE + 5 +21B1 + 8 +0 + 62 + 0 + 10 +26812.499936 + 20 +13168.764989 + 30 +0.0 + 11 +26820.0 + 21 +13181.755481 + 31 +0.0 + 0 +LINE + 5 +21B2 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +12999.890147 + 30 +0.0 + 11 +26749.999936 + 21 +13017.210544 + 31 +0.0 + 0 +LINE + 5 +21B3 + 8 +0 + 62 + 0 + 10 +26774.999936 + 20 +13060.511814 + 30 +0.0 + 11 +26787.499936 + 21 +13082.162449 + 31 +0.0 + 0 +LINE + 5 +21B4 + 8 +0 + 62 + 0 + 10 +26812.499936 + 20 +13125.463719 + 30 +0.0 + 11 +26820.0 + 21 +13138.454211 + 31 +0.0 + 0 +LINE + 5 +21B5 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +12956.588877 + 30 +0.0 + 11 +26749.999936 + 21 +12973.909273 + 31 +0.0 + 0 +LINE + 5 +21B6 + 8 +0 + 62 + 0 + 10 +26774.999936 + 20 +13017.210544 + 30 +0.0 + 11 +26787.499936 + 21 +13038.861179 + 31 +0.0 + 0 +LINE + 5 +21B7 + 8 +0 + 62 + 0 + 10 +26812.499936 + 20 +13082.162449 + 30 +0.0 + 11 +26820.0 + 21 +13095.152941 + 31 +0.0 + 0 +LINE + 5 +21B8 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +12913.287607 + 30 +0.0 + 11 +26749.999936 + 21 +12930.608003 + 31 +0.0 + 0 +LINE + 5 +21B9 + 8 +0 + 62 + 0 + 10 +26774.999936 + 20 +12973.909273 + 30 +0.0 + 11 +26787.499936 + 21 +12995.559909 + 31 +0.0 + 0 +LINE + 5 +21BA + 8 +0 + 62 + 0 + 10 +26812.499936 + 20 +13038.861179 + 30 +0.0 + 11 +26820.0 + 21 +13051.851671 + 31 +0.0 + 0 +LINE + 5 +21BB + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +12869.986337 + 30 +0.0 + 11 +26749.999936 + 21 +12887.306733 + 31 +0.0 + 0 +LINE + 5 +21BC + 8 +0 + 62 + 0 + 10 +26774.999936 + 20 +12930.608003 + 30 +0.0 + 11 +26787.499936 + 21 +12952.258638 + 31 +0.0 + 0 +LINE + 5 +21BD + 8 +0 + 62 + 0 + 10 +26812.499936 + 20 +12995.559909 + 30 +0.0 + 11 +26820.0 + 21 +13008.550401 + 31 +0.0 + 0 +LINE + 5 +21BE + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +12826.685067 + 30 +0.0 + 11 +26749.999936 + 21 +12844.005463 + 31 +0.0 + 0 +LINE + 5 +21BF + 8 +0 + 62 + 0 + 10 +26774.999936 + 20 +12887.306733 + 30 +0.0 + 11 +26787.499936 + 21 +12908.957368 + 31 +0.0 + 0 +LINE + 5 +21C0 + 8 +0 + 62 + 0 + 10 +26812.499936 + 20 +12952.258638 + 30 +0.0 + 11 +26820.0 + 21 +12965.249131 + 31 +0.0 + 0 +LINE + 5 +21C1 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +12783.383797 + 30 +0.0 + 11 +26749.999935 + 21 +12800.704193 + 31 +0.0 + 0 +LINE + 5 +21C2 + 8 +0 + 62 + 0 + 10 +26774.999935 + 20 +12844.005463 + 30 +0.0 + 11 +26787.499935 + 21 +12865.656098 + 31 +0.0 + 0 +LINE + 5 +21C3 + 8 +0 + 62 + 0 + 10 +26812.499935 + 20 +12908.957368 + 30 +0.0 + 11 +26820.0 + 21 +12921.947861 + 31 +0.0 + 0 +LINE + 5 +21C4 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +12740.082527 + 30 +0.0 + 11 +26749.999935 + 21 +12757.402923 + 31 +0.0 + 0 +LINE + 5 +21C5 + 8 +0 + 62 + 0 + 10 +26774.999935 + 20 +12800.704193 + 30 +0.0 + 11 +26787.499935 + 21 +12822.354828 + 31 +0.0 + 0 +LINE + 5 +21C6 + 8 +0 + 62 + 0 + 10 +26812.499935 + 20 +12865.656098 + 30 +0.0 + 11 +26820.0 + 21 +12878.646591 + 31 +0.0 + 0 +LINE + 5 +21C7 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +12696.781257 + 30 +0.0 + 11 +26749.999935 + 21 +12714.101653 + 31 +0.0 + 0 +LINE + 5 +21C8 + 8 +0 + 62 + 0 + 10 +26774.999935 + 20 +12757.402923 + 30 +0.0 + 11 +26787.499935 + 21 +12779.053558 + 31 +0.0 + 0 +LINE + 5 +21C9 + 8 +0 + 62 + 0 + 10 +26812.499935 + 20 +12822.354828 + 30 +0.0 + 11 +26820.0 + 21 +12835.345321 + 31 +0.0 + 0 +LINE + 5 +21CA + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +12653.479987 + 30 +0.0 + 11 +26749.999935 + 21 +12670.800382 + 31 +0.0 + 0 +LINE + 5 +21CB + 8 +0 + 62 + 0 + 10 +26774.999935 + 20 +12714.101653 + 30 +0.0 + 11 +26787.499935 + 21 +12735.752288 + 31 +0.0 + 0 +LINE + 5 +21CC + 8 +0 + 62 + 0 + 10 +26812.499935 + 20 +12779.053558 + 30 +0.0 + 11 +26820.0 + 21 +12792.044051 + 31 +0.0 + 0 +LINE + 5 +21CD + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +12610.178717 + 30 +0.0 + 11 +26749.999935 + 21 +12627.499112 + 31 +0.0 + 0 +LINE + 5 +21CE + 8 +0 + 62 + 0 + 10 +26774.999935 + 20 +12670.800382 + 30 +0.0 + 11 +26787.499935 + 21 +12692.451018 + 31 +0.0 + 0 +LINE + 5 +21CF + 8 +0 + 62 + 0 + 10 +26812.499935 + 20 +12735.752288 + 30 +0.0 + 11 +26820.0 + 21 +12748.742781 + 31 +0.0 + 0 +LINE + 5 +21D0 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +12566.877447 + 30 +0.0 + 11 +26749.999935 + 21 +12584.197842 + 31 +0.0 + 0 +LINE + 5 +21D1 + 8 +0 + 62 + 0 + 10 +26774.999935 + 20 +12627.499112 + 30 +0.0 + 11 +26787.499935 + 21 +12649.149747 + 31 +0.0 + 0 +LINE + 5 +21D2 + 8 +0 + 62 + 0 + 10 +26812.499935 + 20 +12692.451018 + 30 +0.0 + 11 +26820.0 + 21 +12705.441511 + 31 +0.0 + 0 +LINE + 5 +21D3 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +12523.576177 + 30 +0.0 + 11 +26749.999935 + 21 +12540.896572 + 31 +0.0 + 0 +LINE + 5 +21D4 + 8 +0 + 62 + 0 + 10 +26774.999935 + 20 +12584.197842 + 30 +0.0 + 11 +26787.499935 + 21 +12605.848477 + 31 +0.0 + 0 +LINE + 5 +21D5 + 8 +0 + 62 + 0 + 10 +26812.499935 + 20 +12649.149747 + 30 +0.0 + 11 +26820.0 + 21 +12662.140241 + 31 +0.0 + 0 +LINE + 5 +21D6 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +12480.274907 + 30 +0.0 + 11 +26749.999935 + 21 +12497.595302 + 31 +0.0 + 0 +LINE + 5 +21D7 + 8 +0 + 62 + 0 + 10 +26774.999935 + 20 +12540.896572 + 30 +0.0 + 11 +26787.499935 + 21 +12562.547207 + 31 +0.0 + 0 +LINE + 5 +21D8 + 8 +0 + 62 + 0 + 10 +26812.499935 + 20 +12605.848477 + 30 +0.0 + 11 +26820.0 + 21 +12618.838971 + 31 +0.0 + 0 +LINE + 5 +21D9 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +12436.973637 + 30 +0.0 + 11 +26749.999935 + 21 +12454.294032 + 31 +0.0 + 0 +LINE + 5 +21DA + 8 +0 + 62 + 0 + 10 +26774.999935 + 20 +12497.595302 + 30 +0.0 + 11 +26787.499935 + 21 +12519.245937 + 31 +0.0 + 0 +LINE + 5 +21DB + 8 +0 + 62 + 0 + 10 +26812.499935 + 20 +12562.547207 + 30 +0.0 + 11 +26820.0 + 21 +12575.537701 + 31 +0.0 + 0 +LINE + 5 +21DC + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +12393.672367 + 30 +0.0 + 11 +26749.999935 + 21 +12410.992762 + 31 +0.0 + 0 +LINE + 5 +21DD + 8 +0 + 62 + 0 + 10 +26774.999935 + 20 +12454.294032 + 30 +0.0 + 11 +26787.499935 + 21 +12475.944667 + 31 +0.0 + 0 +LINE + 5 +21DE + 8 +0 + 62 + 0 + 10 +26812.499935 + 20 +12519.245937 + 30 +0.0 + 11 +26820.0 + 21 +12532.236431 + 31 +0.0 + 0 +LINE + 5 +21DF + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +12350.371097 + 30 +0.0 + 11 +26749.999935 + 21 +12367.691491 + 31 +0.0 + 0 +LINE + 5 +21E0 + 8 +0 + 62 + 0 + 10 +26774.999935 + 20 +12410.992762 + 30 +0.0 + 11 +26787.499935 + 21 +12432.643397 + 31 +0.0 + 0 +LINE + 5 +21E1 + 8 +0 + 62 + 0 + 10 +26812.499935 + 20 +12475.944667 + 30 +0.0 + 11 +26820.0 + 21 +12488.935161 + 31 +0.0 + 0 +LINE + 5 +21E2 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +12307.069827 + 30 +0.0 + 11 +26749.999935 + 21 +12324.390221 + 31 +0.0 + 0 +LINE + 5 +21E3 + 8 +0 + 62 + 0 + 10 +26774.999935 + 20 +12367.691491 + 30 +0.0 + 11 +26787.499935 + 21 +12389.342127 + 31 +0.0 + 0 +LINE + 5 +21E4 + 8 +0 + 62 + 0 + 10 +26812.499935 + 20 +12432.643397 + 30 +0.0 + 11 +26820.0 + 21 +12445.633891 + 31 +0.0 + 0 +LINE + 5 +21E5 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +12263.768557 + 30 +0.0 + 11 +26749.999934 + 21 +12281.088951 + 31 +0.0 + 0 +LINE + 5 +21E6 + 8 +0 + 62 + 0 + 10 +26774.999934 + 20 +12324.390221 + 30 +0.0 + 11 +26787.499934 + 21 +12346.040856 + 31 +0.0 + 0 +LINE + 5 +21E7 + 8 +0 + 62 + 0 + 10 +26812.499934 + 20 +12389.342127 + 30 +0.0 + 11 +26820.0 + 21 +12402.332621 + 31 +0.0 + 0 +LINE + 5 +21E8 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +12220.467287 + 30 +0.0 + 11 +26749.999934 + 21 +12237.787681 + 31 +0.0 + 0 +LINE + 5 +21E9 + 8 +0 + 62 + 0 + 10 +26774.999934 + 20 +12281.088951 + 30 +0.0 + 11 +26787.499934 + 21 +12302.739586 + 31 +0.0 + 0 +LINE + 5 +21EA + 8 +0 + 62 + 0 + 10 +26812.499934 + 20 +12346.040856 + 30 +0.0 + 11 +26820.0 + 21 +12359.031351 + 31 +0.0 + 0 +LINE + 5 +21EB + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +12177.166017 + 30 +0.0 + 11 +26749.999934 + 21 +12194.486411 + 31 +0.0 + 0 +LINE + 5 +21EC + 8 +0 + 62 + 0 + 10 +26774.999934 + 20 +12237.787681 + 30 +0.0 + 11 +26787.499934 + 21 +12259.438316 + 31 +0.0 + 0 +LINE + 5 +21ED + 8 +0 + 62 + 0 + 10 +26812.499934 + 20 +12302.739586 + 30 +0.0 + 11 +26820.0 + 21 +12315.730081 + 31 +0.0 + 0 +LINE + 5 +21EE + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +12133.864747 + 30 +0.0 + 11 +26749.999934 + 21 +12151.185141 + 31 +0.0 + 0 +LINE + 5 +21EF + 8 +0 + 62 + 0 + 10 +26774.999934 + 20 +12194.486411 + 30 +0.0 + 11 +26787.499934 + 21 +12216.137046 + 31 +0.0 + 0 +LINE + 5 +21F0 + 8 +0 + 62 + 0 + 10 +26812.499934 + 20 +12259.438316 + 30 +0.0 + 11 +26820.0 + 21 +12272.428811 + 31 +0.0 + 0 +LINE + 5 +21F1 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +12090.563477 + 30 +0.0 + 11 +26749.999934 + 21 +12107.883871 + 31 +0.0 + 0 +LINE + 5 +21F2 + 8 +0 + 62 + 0 + 10 +26774.999934 + 20 +12151.185141 + 30 +0.0 + 11 +26787.499934 + 21 +12172.835776 + 31 +0.0 + 0 +LINE + 5 +21F3 + 8 +0 + 62 + 0 + 10 +26812.499934 + 20 +12216.137046 + 30 +0.0 + 11 +26820.0 + 21 +12229.127541 + 31 +0.0 + 0 +LINE + 5 +21F4 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +12047.262207 + 30 +0.0 + 11 +26749.999934 + 21 +12064.5826 + 31 +0.0 + 0 +LINE + 5 +21F5 + 8 +0 + 62 + 0 + 10 +26774.999934 + 20 +12107.883871 + 30 +0.0 + 11 +26787.499934 + 21 +12129.534506 + 31 +0.0 + 0 +LINE + 5 +21F6 + 8 +0 + 62 + 0 + 10 +26812.499934 + 20 +12172.835776 + 30 +0.0 + 11 +26820.0 + 21 +12185.826271 + 31 +0.0 + 0 +LINE + 5 +21F7 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +12003.960937 + 30 +0.0 + 11 +26749.999934 + 21 +12021.28133 + 31 +0.0 + 0 +LINE + 5 +21F8 + 8 +0 + 62 + 0 + 10 +26774.999934 + 20 +12064.5826 + 30 +0.0 + 11 +26787.499934 + 21 +12086.233236 + 31 +0.0 + 0 +LINE + 5 +21F9 + 8 +0 + 62 + 0 + 10 +26812.499934 + 20 +12129.534506 + 30 +0.0 + 11 +26820.0 + 21 +12142.525001 + 31 +0.0 + 0 +LINE + 5 +21FA + 8 +0 + 62 + 0 + 10 +26774.999934 + 20 +12021.28133 + 30 +0.0 + 11 +26787.499934 + 21 +12042.931965 + 31 +0.0 + 0 +LINE + 5 +21FB + 8 +0 + 62 + 0 + 10 +26812.499934 + 20 +12086.233236 + 30 +0.0 + 11 +26820.0 + 21 +12099.223731 + 31 +0.0 + 0 +LINE + 5 +21FC + 8 +0 + 62 + 0 + 10 +26781.217961 + 20 +11988.75 + 30 +0.0 + 11 +26787.499934 + 21 +11999.630695 + 31 +0.0 + 0 +LINE + 5 +21FD + 8 +0 + 62 + 0 + 10 +26812.499934 + 20 +12042.931965 + 30 +0.0 + 11 +26820.0 + 21 +12055.922461 + 31 +0.0 + 0 +LINE + 5 +21FE + 8 +0 + 62 + 0 + 10 +26812.499934 + 20 +11999.630695 + 30 +0.0 + 11 +26820.0 + 21 +12012.621191 + 31 +0.0 + 0 +ENDBLK + 5 +21FF + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X51 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X51 + 1 + + 0 +LINE + 5 +2201 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +9769.61524 + 30 +0.0 + 11 +26775.0 + 21 +9769.61524 + 31 +0.0 + 0 +LINE + 5 +2202 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +9791.265875 + 30 +0.0 + 11 +26812.5 + 21 +9791.265875 + 31 +0.0 + 0 +LINE + 5 +2203 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +9812.91651 + 30 +0.0 + 11 +26775.0 + 21 +9812.91651 + 31 +0.0 + 0 +LINE + 5 +2204 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +9834.567145 + 30 +0.0 + 11 +26812.5 + 21 +9834.567145 + 31 +0.0 + 0 +LINE + 5 +2205 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +9856.21778 + 30 +0.0 + 11 +26775.0 + 21 +9856.21778 + 31 +0.0 + 0 +LINE + 5 +2206 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +9877.868415 + 30 +0.0 + 11 +26812.5 + 21 +9877.868415 + 31 +0.0 + 0 +LINE + 5 +2207 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +9899.51905 + 30 +0.0 + 11 +26775.0 + 21 +9899.51905 + 31 +0.0 + 0 +LINE + 5 +2208 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +9921.169685 + 30 +0.0 + 11 +26812.5 + 21 +9921.169685 + 31 +0.0 + 0 +LINE + 5 +2209 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +9942.82032 + 30 +0.0 + 11 +26775.0 + 21 +9942.82032 + 31 +0.0 + 0 +LINE + 5 +220A + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +9964.470955 + 30 +0.0 + 11 +26812.5 + 21 +9964.470955 + 31 +0.0 + 0 +LINE + 5 +220B + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +9986.12159 + 30 +0.0 + 11 +26775.0 + 21 +9986.12159 + 31 +0.0 + 0 +LINE + 5 +220C + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +10007.772225 + 30 +0.0 + 11 +26812.5 + 21 +10007.772225 + 31 +0.0 + 0 +LINE + 5 +220D + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +10029.42286 + 30 +0.0 + 11 +26775.0 + 21 +10029.42286 + 31 +0.0 + 0 +LINE + 5 +220E + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +10051.073495 + 30 +0.0 + 11 +26812.5 + 21 +10051.073495 + 31 +0.0 + 0 +LINE + 5 +220F + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +10072.72413 + 30 +0.0 + 11 +26775.0 + 21 +10072.72413 + 31 +0.0 + 0 +LINE + 5 +2210 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +10094.374765 + 30 +0.0 + 11 +26812.5 + 21 +10094.374765 + 31 +0.0 + 0 +LINE + 5 +2211 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +10116.0254 + 30 +0.0 + 11 +26775.0 + 21 +10116.0254 + 31 +0.0 + 0 +LINE + 5 +2212 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +10137.676035 + 30 +0.0 + 11 +26812.5 + 21 +10137.676035 + 31 +0.0 + 0 +LINE + 5 +2213 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +10159.32667 + 30 +0.0 + 11 +26775.0 + 21 +10159.32667 + 31 +0.0 + 0 +LINE + 5 +2214 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +10180.977305 + 30 +0.0 + 11 +26812.5 + 21 +10180.977305 + 31 +0.0 + 0 +LINE + 5 +2215 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +10202.62794 + 30 +0.0 + 11 +26775.0 + 21 +10202.62794 + 31 +0.0 + 0 +LINE + 5 +2216 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +10224.278575 + 30 +0.0 + 11 +26812.5 + 21 +10224.278575 + 31 +0.0 + 0 +LINE + 5 +2217 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +10245.92921 + 30 +0.0 + 11 +26775.0 + 21 +10245.92921 + 31 +0.0 + 0 +LINE + 5 +2218 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +10267.579845 + 30 +0.0 + 11 +26812.5 + 21 +10267.579845 + 31 +0.0 + 0 +LINE + 5 +2219 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +10289.23048 + 30 +0.0 + 11 +26775.0 + 21 +10289.23048 + 31 +0.0 + 0 +LINE + 5 +221A + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +10310.881115 + 30 +0.0 + 11 +26812.5 + 21 +10310.881115 + 31 +0.0 + 0 +LINE + 5 +221B + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +10332.53175 + 30 +0.0 + 11 +26775.0 + 21 +10332.53175 + 31 +0.0 + 0 +LINE + 5 +221C + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +10354.182385 + 30 +0.0 + 11 +26812.5 + 21 +10354.182385 + 31 +0.0 + 0 +LINE + 5 +221D + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +10375.83302 + 30 +0.0 + 11 +26775.0 + 21 +10375.83302 + 31 +0.0 + 0 +LINE + 5 +221E + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +9747.964605 + 30 +0.0 + 11 +26812.5 + 21 +9747.964605 + 31 +0.0 + 0 +LINE + 5 +221F + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +9726.31397 + 30 +0.0 + 11 +26775.0 + 21 +9726.31397 + 31 +0.0 + 0 +LINE + 5 +2220 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +9704.663335 + 30 +0.0 + 11 +26812.5 + 21 +9704.663335 + 31 +0.0 + 0 +LINE + 5 +2221 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +9683.0127 + 30 +0.0 + 11 +26775.0 + 21 +9683.0127 + 31 +0.0 + 0 +LINE + 5 +2222 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +9661.362065 + 30 +0.0 + 11 +26812.5 + 21 +9661.362065 + 31 +0.0 + 0 +LINE + 5 +2223 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +9639.71143 + 30 +0.0 + 11 +26775.0 + 21 +9639.71143 + 31 +0.0 + 0 +LINE + 5 +2224 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +9618.060795 + 30 +0.0 + 11 +26812.5 + 21 +9618.060795 + 31 +0.0 + 0 +LINE + 5 +2225 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +9596.41016 + 30 +0.0 + 11 +26775.0 + 21 +9596.41016 + 31 +0.0 + 0 +LINE + 5 +2226 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +9574.759525 + 30 +0.0 + 11 +26812.5 + 21 +9574.759525 + 31 +0.0 + 0 +LINE + 5 +2227 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +9553.10889 + 30 +0.0 + 11 +26775.0 + 21 +9553.10889 + 31 +0.0 + 0 +LINE + 5 +2228 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +9531.458255 + 30 +0.0 + 11 +26812.5 + 21 +9531.458255 + 31 +0.0 + 0 +LINE + 5 +2229 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +9509.80762 + 30 +0.0 + 11 +26775.0 + 21 +9509.80762 + 31 +0.0 + 0 +LINE + 5 +222A + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +9488.156985 + 30 +0.0 + 11 +26812.5 + 21 +9488.156985 + 31 +0.0 + 0 +LINE + 5 +222B + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +9466.50635 + 30 +0.0 + 11 +26775.0 + 21 +9466.50635 + 31 +0.0 + 0 +LINE + 5 +222C + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +9444.855715 + 30 +0.0 + 11 +26812.5 + 21 +9444.855715 + 31 +0.0 + 0 +LINE + 5 +222D + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +9423.20508 + 30 +0.0 + 11 +26775.0 + 21 +9423.20508 + 31 +0.0 + 0 +LINE + 5 +222E + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +9401.554445 + 30 +0.0 + 11 +26812.5 + 21 +9401.554445 + 31 +0.0 + 0 +LINE + 5 +222F + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +9379.90381 + 30 +0.0 + 11 +26775.0 + 21 +9379.90381 + 31 +0.0 + 0 +LINE + 5 +2230 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +9358.253175 + 30 +0.0 + 11 +26812.5 + 21 +9358.253175 + 31 +0.0 + 0 +LINE + 5 +2231 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +9336.60254 + 30 +0.0 + 11 +26775.0 + 21 +9336.60254 + 31 +0.0 + 0 +LINE + 5 +2232 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +9314.951905 + 30 +0.0 + 11 +26812.5 + 21 +9314.951905 + 31 +0.0 + 0 +LINE + 5 +2233 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +9293.30127 + 30 +0.0 + 11 +26775.0 + 21 +9293.30127 + 31 +0.0 + 0 +LINE + 5 +2234 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +9271.650635 + 30 +0.0 + 11 +26812.5 + 21 +9271.650635 + 31 +0.0 + 0 +LINE + 5 +2235 + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +9250.0 + 30 +0.0 + 11 +26775.0 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2236 + 8 +0 + 62 + 0 + 10 +25363.75 + 20 +9228.349365 + 30 +0.0 + 11 +25387.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +2237 + 8 +0 + 62 + 0 + 10 +25437.5 + 20 +9228.349365 + 30 +0.0 + 11 +25462.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +2238 + 8 +0 + 62 + 0 + 10 +25512.5 + 20 +9228.349365 + 30 +0.0 + 11 +25537.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +2239 + 8 +0 + 62 + 0 + 10 +25587.5 + 20 +9228.349365 + 30 +0.0 + 11 +25612.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +223A + 8 +0 + 62 + 0 + 10 +25662.5 + 20 +9228.349365 + 30 +0.0 + 11 +25687.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +223B + 8 +0 + 62 + 0 + 10 +25737.5 + 20 +9228.349365 + 30 +0.0 + 11 +25762.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +223C + 8 +0 + 62 + 0 + 10 +25812.5 + 20 +9228.349365 + 30 +0.0 + 11 +25837.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +223D + 8 +0 + 62 + 0 + 10 +25887.5 + 20 +9228.349365 + 30 +0.0 + 11 +25912.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +223E + 8 +0 + 62 + 0 + 10 +25962.5 + 20 +9228.349365 + 30 +0.0 + 11 +25987.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +223F + 8 +0 + 62 + 0 + 10 +26037.5 + 20 +9228.349365 + 30 +0.0 + 11 +26062.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +2240 + 8 +0 + 62 + 0 + 10 +26112.5 + 20 +9228.349365 + 30 +0.0 + 11 +26137.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +2241 + 8 +0 + 62 + 0 + 10 +26187.5 + 20 +9228.349365 + 30 +0.0 + 11 +26212.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +2242 + 8 +0 + 62 + 0 + 10 +26262.5 + 20 +9228.349365 + 30 +0.0 + 11 +26287.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +2243 + 8 +0 + 62 + 0 + 10 +26337.5 + 20 +9228.349365 + 30 +0.0 + 11 +26362.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +2244 + 8 +0 + 62 + 0 + 10 +26412.5 + 20 +9228.349365 + 30 +0.0 + 11 +26437.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +2245 + 8 +0 + 62 + 0 + 10 +26487.5 + 20 +9228.349365 + 30 +0.0 + 11 +26512.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +2246 + 8 +0 + 62 + 0 + 10 +26562.5 + 20 +9228.349365 + 30 +0.0 + 11 +26587.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +2247 + 8 +0 + 62 + 0 + 10 +26637.5 + 20 +9228.349365 + 30 +0.0 + 11 +26662.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +2248 + 8 +0 + 62 + 0 + 10 +26712.5 + 20 +9228.349365 + 30 +0.0 + 11 +26737.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +2249 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +9228.349365 + 30 +0.0 + 11 +26812.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +224A + 8 +0 + 62 + 0 + 10 +25400.0 + 20 +9206.69873 + 30 +0.0 + 11 +25425.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +224B + 8 +0 + 62 + 0 + 10 +25475.0 + 20 +9206.69873 + 30 +0.0 + 11 +25500.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +224C + 8 +0 + 62 + 0 + 10 +25550.0 + 20 +9206.69873 + 30 +0.0 + 11 +25575.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +224D + 8 +0 + 62 + 0 + 10 +25625.0 + 20 +9206.69873 + 30 +0.0 + 11 +25650.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +224E + 8 +0 + 62 + 0 + 10 +25700.0 + 20 +9206.69873 + 30 +0.0 + 11 +25725.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +224F + 8 +0 + 62 + 0 + 10 +25775.0 + 20 +9206.69873 + 30 +0.0 + 11 +25800.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +2250 + 8 +0 + 62 + 0 + 10 +25850.0 + 20 +9206.69873 + 30 +0.0 + 11 +25875.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +2251 + 8 +0 + 62 + 0 + 10 +25925.0 + 20 +9206.69873 + 30 +0.0 + 11 +25950.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +2252 + 8 +0 + 62 + 0 + 10 +26000.0 + 20 +9206.69873 + 30 +0.0 + 11 +26025.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +2253 + 8 +0 + 62 + 0 + 10 +26075.0 + 20 +9206.69873 + 30 +0.0 + 11 +26100.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +2254 + 8 +0 + 62 + 0 + 10 +26150.0 + 20 +9206.69873 + 30 +0.0 + 11 +26175.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +2255 + 8 +0 + 62 + 0 + 10 +26225.0 + 20 +9206.69873 + 30 +0.0 + 11 +26250.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +2256 + 8 +0 + 62 + 0 + 10 +26300.0 + 20 +9206.69873 + 30 +0.0 + 11 +26325.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +2257 + 8 +0 + 62 + 0 + 10 +26375.0 + 20 +9206.69873 + 30 +0.0 + 11 +26400.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +2258 + 8 +0 + 62 + 0 + 10 +26450.0 + 20 +9206.69873 + 30 +0.0 + 11 +26475.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +2259 + 8 +0 + 62 + 0 + 10 +26525.0 + 20 +9206.69873 + 30 +0.0 + 11 +26550.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +225A + 8 +0 + 62 + 0 + 10 +26600.0 + 20 +9206.69873 + 30 +0.0 + 11 +26625.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +225B + 8 +0 + 62 + 0 + 10 +26675.0 + 20 +9206.69873 + 30 +0.0 + 11 +26700.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +225C + 8 +0 + 62 + 0 + 10 +26750.0 + 20 +9206.69873 + 30 +0.0 + 11 +26775.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +225D + 8 +0 + 62 + 0 + 10 +25363.75 + 20 +9185.048095 + 30 +0.0 + 11 +25387.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +225E + 8 +0 + 62 + 0 + 10 +25437.5 + 20 +9185.048095 + 30 +0.0 + 11 +25462.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +225F + 8 +0 + 62 + 0 + 10 +25512.5 + 20 +9185.048095 + 30 +0.0 + 11 +25537.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +2260 + 8 +0 + 62 + 0 + 10 +25587.5 + 20 +9185.048095 + 30 +0.0 + 11 +25612.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +2261 + 8 +0 + 62 + 0 + 10 +25662.5 + 20 +9185.048095 + 30 +0.0 + 11 +25687.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +2262 + 8 +0 + 62 + 0 + 10 +25737.5 + 20 +9185.048095 + 30 +0.0 + 11 +25762.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +2263 + 8 +0 + 62 + 0 + 10 +25812.5 + 20 +9185.048095 + 30 +0.0 + 11 +25837.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +2264 + 8 +0 + 62 + 0 + 10 +25887.5 + 20 +9185.048095 + 30 +0.0 + 11 +25912.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +2265 + 8 +0 + 62 + 0 + 10 +25962.5 + 20 +9185.048095 + 30 +0.0 + 11 +25987.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +2266 + 8 +0 + 62 + 0 + 10 +26037.5 + 20 +9185.048095 + 30 +0.0 + 11 +26062.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +2267 + 8 +0 + 62 + 0 + 10 +26112.5 + 20 +9185.048095 + 30 +0.0 + 11 +26137.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +2268 + 8 +0 + 62 + 0 + 10 +26187.5 + 20 +9185.048095 + 30 +0.0 + 11 +26212.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +2269 + 8 +0 + 62 + 0 + 10 +26262.5 + 20 +9185.048095 + 30 +0.0 + 11 +26287.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +226A + 8 +0 + 62 + 0 + 10 +26337.5 + 20 +9185.048095 + 30 +0.0 + 11 +26362.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +226B + 8 +0 + 62 + 0 + 10 +26412.5 + 20 +9185.048095 + 30 +0.0 + 11 +26437.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +226C + 8 +0 + 62 + 0 + 10 +26487.5 + 20 +9185.048095 + 30 +0.0 + 11 +26512.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +226D + 8 +0 + 62 + 0 + 10 +26562.5 + 20 +9185.048095 + 30 +0.0 + 11 +26587.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +226E + 8 +0 + 62 + 0 + 10 +26637.5 + 20 +9185.048095 + 30 +0.0 + 11 +26662.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +226F + 8 +0 + 62 + 0 + 10 +26712.5 + 20 +9185.048095 + 30 +0.0 + 11 +26737.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +2270 + 8 +0 + 62 + 0 + 10 +26787.5 + 20 +9185.048095 + 30 +0.0 + 11 +26812.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +2271 + 8 +0 + 62 + 0 + 10 +26412.49993 + 20 +9185.048054 + 30 +0.0 + 11 +26399.99993 + 21 +9206.698689 + 31 +0.0 + 0 +LINE + 5 +2272 + 8 +0 + 62 + 0 + 10 +26374.99993 + 20 +9249.99996 + 30 +0.0 + 11 +26374.999907 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2273 + 8 +0 + 62 + 0 + 10 +26374.99993 + 20 +9206.698689 + 30 +0.0 + 11 +26362.49993 + 21 +9228.349325 + 31 +0.0 + 0 +LINE + 5 +2274 + 8 +0 + 62 + 0 + 10 +26371.187928 + 20 +9170.0 + 30 +0.0 + 11 +26362.49993 + 21 +9185.048054 + 31 +0.0 + 0 +LINE + 5 +2275 + 8 +0 + 62 + 0 + 10 +26337.49993 + 20 +9228.349325 + 30 +0.0 + 11 +26324.99993 + 21 +9249.99996 + 31 +0.0 + 0 +LINE + 5 +2276 + 8 +0 + 62 + 0 + 10 +26337.49993 + 20 +9185.048054 + 30 +0.0 + 11 +26324.99993 + 21 +9206.69869 + 31 +0.0 + 0 +LINE + 5 +2277 + 8 +0 + 62 + 0 + 10 +26299.99993 + 20 +9249.99996 + 30 +0.0 + 11 +26299.999907 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2278 + 8 +0 + 62 + 0 + 10 +26299.99993 + 20 +9206.69869 + 30 +0.0 + 11 +26287.49993 + 21 +9228.349325 + 31 +0.0 + 0 +LINE + 5 +2279 + 8 +0 + 62 + 0 + 10 +26296.187929 + 20 +9170.0 + 30 +0.0 + 11 +26287.49993 + 21 +9185.048055 + 31 +0.0 + 0 +LINE + 5 +227A + 8 +0 + 62 + 0 + 10 +26262.49993 + 20 +9228.349325 + 30 +0.0 + 11 +26249.99993 + 21 +9249.99996 + 31 +0.0 + 0 +LINE + 5 +227B + 8 +0 + 62 + 0 + 10 +26262.49993 + 20 +9185.048055 + 30 +0.0 + 11 +26249.99993 + 21 +9206.69869 + 31 +0.0 + 0 +LINE + 5 +227C + 8 +0 + 62 + 0 + 10 +26224.99993 + 20 +9249.99996 + 30 +0.0 + 11 +26224.999907 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +227D + 8 +0 + 62 + 0 + 10 +26224.999931 + 20 +9206.69869 + 30 +0.0 + 11 +26212.499931 + 21 +9228.349325 + 31 +0.0 + 0 +LINE + 5 +227E + 8 +0 + 62 + 0 + 10 +26221.187929 + 20 +9170.0 + 30 +0.0 + 11 +26212.499931 + 21 +9185.048055 + 31 +0.0 + 0 +LINE + 5 +227F + 8 +0 + 62 + 0 + 10 +26187.499931 + 20 +9228.349325 + 30 +0.0 + 11 +26174.999931 + 21 +9249.99996 + 31 +0.0 + 0 +LINE + 5 +2280 + 8 +0 + 62 + 0 + 10 +26187.499931 + 20 +9185.048055 + 30 +0.0 + 11 +26174.999931 + 21 +9206.69869 + 31 +0.0 + 0 +LINE + 5 +2281 + 8 +0 + 62 + 0 + 10 +26149.999931 + 20 +9249.99996 + 30 +0.0 + 11 +26149.999908 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2282 + 8 +0 + 62 + 0 + 10 +26149.999931 + 20 +9206.69869 + 30 +0.0 + 11 +26137.499931 + 21 +9228.349325 + 31 +0.0 + 0 +LINE + 5 +2283 + 8 +0 + 62 + 0 + 10 +26146.187929 + 20 +9170.0 + 30 +0.0 + 11 +26137.499931 + 21 +9185.048055 + 31 +0.0 + 0 +LINE + 5 +2284 + 8 +0 + 62 + 0 + 10 +26112.499931 + 20 +9228.349325 + 30 +0.0 + 11 +26099.999931 + 21 +9249.99996 + 31 +0.0 + 0 +LINE + 5 +2285 + 8 +0 + 62 + 0 + 10 +26112.499931 + 20 +9185.048055 + 30 +0.0 + 11 +26099.999931 + 21 +9206.69869 + 31 +0.0 + 0 +LINE + 5 +2286 + 8 +0 + 62 + 0 + 10 +26074.999931 + 20 +9249.99996 + 30 +0.0 + 11 +26074.999908 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2287 + 8 +0 + 62 + 0 + 10 +26074.999931 + 20 +9206.69869 + 30 +0.0 + 11 +26062.499931 + 21 +9228.349325 + 31 +0.0 + 0 +LINE + 5 +2288 + 8 +0 + 62 + 0 + 10 +26071.18793 + 20 +9170.0 + 30 +0.0 + 11 +26062.499931 + 21 +9185.048055 + 31 +0.0 + 0 +LINE + 5 +2289 + 8 +0 + 62 + 0 + 10 +26037.499931 + 20 +9228.349325 + 30 +0.0 + 11 +26024.999931 + 21 +9249.99996 + 31 +0.0 + 0 +LINE + 5 +228A + 8 +0 + 62 + 0 + 10 +26037.499931 + 20 +9185.048055 + 30 +0.0 + 11 +26024.999931 + 21 +9206.69869 + 31 +0.0 + 0 +LINE + 5 +228B + 8 +0 + 62 + 0 + 10 +25999.999931 + 20 +9249.99996 + 30 +0.0 + 11 +25999.999908 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +228C + 8 +0 + 62 + 0 + 10 +25999.999931 + 20 +9206.69869 + 30 +0.0 + 11 +25987.499931 + 21 +9228.349325 + 31 +0.0 + 0 +LINE + 5 +228D + 8 +0 + 62 + 0 + 10 +25996.18793 + 20 +9170.0 + 30 +0.0 + 11 +25987.499931 + 21 +9185.048055 + 31 +0.0 + 0 +LINE + 5 +228E + 8 +0 + 62 + 0 + 10 +25962.499931 + 20 +9228.349325 + 30 +0.0 + 11 +25949.999931 + 21 +9249.99996 + 31 +0.0 + 0 +LINE + 5 +228F + 8 +0 + 62 + 0 + 10 +25962.499931 + 20 +9185.048055 + 30 +0.0 + 11 +25949.999931 + 21 +9206.69869 + 31 +0.0 + 0 +LINE + 5 +2290 + 8 +0 + 62 + 0 + 10 +25924.999931 + 20 +9249.99996 + 30 +0.0 + 11 +25924.999909 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2291 + 8 +0 + 62 + 0 + 10 +25924.999932 + 20 +9206.69869 + 30 +0.0 + 11 +25912.499932 + 21 +9228.349325 + 31 +0.0 + 0 +LINE + 5 +2292 + 8 +0 + 62 + 0 + 10 +25921.18793 + 20 +9170.0 + 30 +0.0 + 11 +25912.499932 + 21 +9185.048055 + 31 +0.0 + 0 +LINE + 5 +2293 + 8 +0 + 62 + 0 + 10 +25887.499932 + 20 +9228.349325 + 30 +0.0 + 11 +25874.999932 + 21 +9249.99996 + 31 +0.0 + 0 +LINE + 5 +2294 + 8 +0 + 62 + 0 + 10 +25887.499932 + 20 +9185.048055 + 30 +0.0 + 11 +25874.999932 + 21 +9206.69869 + 31 +0.0 + 0 +LINE + 5 +2295 + 8 +0 + 62 + 0 + 10 +25849.999932 + 20 +9249.999961 + 30 +0.0 + 11 +25849.999909 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2296 + 8 +0 + 62 + 0 + 10 +25849.999932 + 20 +9206.69869 + 30 +0.0 + 11 +25837.499932 + 21 +9228.349325 + 31 +0.0 + 0 +LINE + 5 +2297 + 8 +0 + 62 + 0 + 10 +25846.187931 + 20 +9170.0 + 30 +0.0 + 11 +25837.499932 + 21 +9185.048055 + 31 +0.0 + 0 +LINE + 5 +2298 + 8 +0 + 62 + 0 + 10 +25812.499932 + 20 +9228.349326 + 30 +0.0 + 11 +25799.999932 + 21 +9249.999961 + 31 +0.0 + 0 +LINE + 5 +2299 + 8 +0 + 62 + 0 + 10 +25812.499932 + 20 +9185.048055 + 30 +0.0 + 11 +25799.999932 + 21 +9206.69869 + 31 +0.0 + 0 +LINE + 5 +229A + 8 +0 + 62 + 0 + 10 +25774.999932 + 20 +9249.999961 + 30 +0.0 + 11 +25774.999909 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +229B + 8 +0 + 62 + 0 + 10 +25774.999932 + 20 +9206.698691 + 30 +0.0 + 11 +25762.499932 + 21 +9228.349326 + 31 +0.0 + 0 +LINE + 5 +229C + 8 +0 + 62 + 0 + 10 +25771.187931 + 20 +9170.0 + 30 +0.0 + 11 +25762.499932 + 21 +9185.048055 + 31 +0.0 + 0 +LINE + 5 +229D + 8 +0 + 62 + 0 + 10 +25737.499932 + 20 +9228.349326 + 30 +0.0 + 11 +25724.999932 + 21 +9249.999961 + 31 +0.0 + 0 +LINE + 5 +229E + 8 +0 + 62 + 0 + 10 +25737.499932 + 20 +9185.048056 + 30 +0.0 + 11 +25724.999932 + 21 +9206.698691 + 31 +0.0 + 0 +LINE + 5 +229F + 8 +0 + 62 + 0 + 10 +25699.999932 + 20 +9249.999961 + 30 +0.0 + 11 +25699.99991 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +22A0 + 8 +0 + 62 + 0 + 10 +25699.999932 + 20 +9206.698691 + 30 +0.0 + 11 +25687.499932 + 21 +9228.349326 + 31 +0.0 + 0 +LINE + 5 +22A1 + 8 +0 + 62 + 0 + 10 +25696.187931 + 20 +9170.0 + 30 +0.0 + 11 +25687.499932 + 21 +9185.048056 + 31 +0.0 + 0 +LINE + 5 +22A2 + 8 +0 + 62 + 0 + 10 +25662.499932 + 20 +9228.349326 + 30 +0.0 + 11 +25649.999932 + 21 +9249.999961 + 31 +0.0 + 0 +LINE + 5 +22A3 + 8 +0 + 62 + 0 + 10 +25662.499932 + 20 +9185.048056 + 30 +0.0 + 11 +25649.999932 + 21 +9206.698691 + 31 +0.0 + 0 +LINE + 5 +22A4 + 8 +0 + 62 + 0 + 10 +25624.999932 + 20 +9249.999961 + 30 +0.0 + 11 +25624.99991 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +22A5 + 8 +0 + 62 + 0 + 10 +25624.999932 + 20 +9206.698691 + 30 +0.0 + 11 +25612.499932 + 21 +9228.349326 + 31 +0.0 + 0 +LINE + 5 +22A6 + 8 +0 + 62 + 0 + 10 +25621.187932 + 20 +9170.0 + 30 +0.0 + 11 +25612.499933 + 21 +9185.048056 + 31 +0.0 + 0 +LINE + 5 +22A7 + 8 +0 + 62 + 0 + 10 +25587.499933 + 20 +9228.349326 + 30 +0.0 + 11 +25574.999933 + 21 +9249.999961 + 31 +0.0 + 0 +LINE + 5 +22A8 + 8 +0 + 62 + 0 + 10 +25587.499933 + 20 +9185.048056 + 30 +0.0 + 11 +25574.999933 + 21 +9206.698691 + 31 +0.0 + 0 +LINE + 5 +22A9 + 8 +0 + 62 + 0 + 10 +25549.999933 + 20 +9249.999961 + 30 +0.0 + 11 +25549.99991 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +22AA + 8 +0 + 62 + 0 + 10 +25549.999933 + 20 +9206.698691 + 30 +0.0 + 11 +25537.499933 + 21 +9228.349326 + 31 +0.0 + 0 +LINE + 5 +22AB + 8 +0 + 62 + 0 + 10 +25546.187932 + 20 +9170.0 + 30 +0.0 + 11 +25537.499933 + 21 +9185.048056 + 31 +0.0 + 0 +LINE + 5 +22AC + 8 +0 + 62 + 0 + 10 +25512.499933 + 20 +9228.349326 + 30 +0.0 + 11 +25499.999933 + 21 +9249.999961 + 31 +0.0 + 0 +LINE + 5 +22AD + 8 +0 + 62 + 0 + 10 +25512.499933 + 20 +9185.048056 + 30 +0.0 + 11 +25499.999933 + 21 +9206.698691 + 31 +0.0 + 0 +LINE + 5 +22AE + 8 +0 + 62 + 0 + 10 +25474.999933 + 20 +9249.999961 + 30 +0.0 + 11 +25474.999911 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +22AF + 8 +0 + 62 + 0 + 10 +25474.999933 + 20 +9206.698691 + 30 +0.0 + 11 +25462.499933 + 21 +9228.349326 + 31 +0.0 + 0 +LINE + 5 +22B0 + 8 +0 + 62 + 0 + 10 +25471.187932 + 20 +9170.0 + 30 +0.0 + 11 +25462.499933 + 21 +9185.048056 + 31 +0.0 + 0 +LINE + 5 +22B1 + 8 +0 + 62 + 0 + 10 +25437.499933 + 20 +9228.349326 + 30 +0.0 + 11 +25424.999933 + 21 +9249.999961 + 31 +0.0 + 0 +LINE + 5 +22B2 + 8 +0 + 62 + 0 + 10 +25437.499933 + 20 +9185.048056 + 30 +0.0 + 11 +25424.999933 + 21 +9206.698691 + 31 +0.0 + 0 +LINE + 5 +22B3 + 8 +0 + 62 + 0 + 10 +25399.999933 + 20 +9249.999961 + 30 +0.0 + 11 +25399.999911 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +22B4 + 8 +0 + 62 + 0 + 10 +25399.999933 + 20 +9206.698691 + 30 +0.0 + 11 +25387.499933 + 21 +9228.349326 + 31 +0.0 + 0 +LINE + 5 +22B5 + 8 +0 + 62 + 0 + 10 +25396.187933 + 20 +9170.0 + 30 +0.0 + 11 +25387.499933 + 21 +9185.048056 + 31 +0.0 + 0 +LINE + 5 +22B6 + 8 +0 + 62 + 0 + 10 +26446.187928 + 20 +9170.0 + 30 +0.0 + 11 +26437.49993 + 21 +9185.048054 + 31 +0.0 + 0 +LINE + 5 +22B7 + 8 +0 + 62 + 0 + 10 +26412.49993 + 20 +9228.349324 + 30 +0.0 + 11 +26399.99993 + 21 +9249.99996 + 31 +0.0 + 0 +LINE + 5 +22B8 + 8 +0 + 62 + 0 + 10 +26449.99993 + 20 +9206.698689 + 30 +0.0 + 11 +26437.49993 + 21 +9228.349324 + 31 +0.0 + 0 +LINE + 5 +22B9 + 8 +0 + 62 + 0 + 10 +26487.49993 + 20 +9185.048054 + 30 +0.0 + 11 +26474.99993 + 21 +9206.698689 + 31 +0.0 + 0 +LINE + 5 +22BA + 8 +0 + 62 + 0 + 10 +26449.99993 + 20 +9249.999959 + 30 +0.0 + 11 +26449.999906 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +22BB + 8 +0 + 62 + 0 + 10 +26521.187928 + 20 +9170.0 + 30 +0.0 + 11 +26512.49993 + 21 +9185.048054 + 31 +0.0 + 0 +LINE + 5 +22BC + 8 +0 + 62 + 0 + 10 +26487.49993 + 20 +9228.349324 + 30 +0.0 + 11 +26474.99993 + 21 +9249.999959 + 31 +0.0 + 0 +LINE + 5 +22BD + 8 +0 + 62 + 0 + 10 +26524.99993 + 20 +9206.698689 + 30 +0.0 + 11 +26512.49993 + 21 +9228.349324 + 31 +0.0 + 0 +LINE + 5 +22BE + 8 +0 + 62 + 0 + 10 +26562.499929 + 20 +9185.048054 + 30 +0.0 + 11 +26549.999929 + 21 +9206.698689 + 31 +0.0 + 0 +LINE + 5 +22BF + 8 +0 + 62 + 0 + 10 +26524.999929 + 20 +9249.999959 + 30 +0.0 + 11 +26524.999906 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +22C0 + 8 +0 + 62 + 0 + 10 +26596.187927 + 20 +9170.0 + 30 +0.0 + 11 +26587.499929 + 21 +9185.048054 + 31 +0.0 + 0 +LINE + 5 +22C1 + 8 +0 + 62 + 0 + 10 +26562.499929 + 20 +9228.349324 + 30 +0.0 + 11 +26549.999929 + 21 +9249.999959 + 31 +0.0 + 0 +LINE + 5 +22C2 + 8 +0 + 62 + 0 + 10 +26599.999929 + 20 +9206.698689 + 30 +0.0 + 11 +26587.499929 + 21 +9228.349324 + 31 +0.0 + 0 +LINE + 5 +22C3 + 8 +0 + 62 + 0 + 10 +26637.499929 + 20 +9185.048054 + 30 +0.0 + 11 +26624.999929 + 21 +9206.698689 + 31 +0.0 + 0 +LINE + 5 +22C4 + 8 +0 + 62 + 0 + 10 +26599.999929 + 20 +9249.999959 + 30 +0.0 + 11 +26599.999906 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +22C5 + 8 +0 + 62 + 0 + 10 +26671.187927 + 20 +9170.0 + 30 +0.0 + 11 +26662.499929 + 21 +9185.048054 + 31 +0.0 + 0 +LINE + 5 +22C6 + 8 +0 + 62 + 0 + 10 +26637.499929 + 20 +9228.349324 + 30 +0.0 + 11 +26624.999929 + 21 +9249.999959 + 31 +0.0 + 0 +LINE + 5 +22C7 + 8 +0 + 62 + 0 + 10 +26674.999929 + 20 +9206.698689 + 30 +0.0 + 11 +26662.499929 + 21 +9228.349324 + 31 +0.0 + 0 +LINE + 5 +22C8 + 8 +0 + 62 + 0 + 10 +26712.499929 + 20 +9185.048054 + 30 +0.0 + 11 +26699.999929 + 21 +9206.698689 + 31 +0.0 + 0 +LINE + 5 +22C9 + 8 +0 + 62 + 0 + 10 +26674.999929 + 20 +9249.999959 + 30 +0.0 + 11 +26674.999905 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +22CA + 8 +0 + 62 + 0 + 10 +26746.187927 + 20 +9170.0 + 30 +0.0 + 11 +26737.499929 + 21 +9185.048054 + 31 +0.0 + 0 +LINE + 5 +22CB + 8 +0 + 62 + 0 + 10 +26712.499929 + 20 +9228.349324 + 30 +0.0 + 11 +26699.999929 + 21 +9249.999959 + 31 +0.0 + 0 +LINE + 5 +22CC + 8 +0 + 62 + 0 + 10 +26749.999929 + 20 +9206.698689 + 30 +0.0 + 11 +26737.499929 + 21 +9228.349324 + 31 +0.0 + 0 +LINE + 5 +22CD + 8 +0 + 62 + 0 + 10 +26787.499929 + 20 +9185.048054 + 30 +0.0 + 11 +26774.999929 + 21 +9206.698689 + 31 +0.0 + 0 +LINE + 5 +22CE + 8 +0 + 62 + 0 + 10 +26749.999929 + 20 +9249.999959 + 30 +0.0 + 11 +26740.0 + 21 +9267.320343 + 31 +0.0 + 0 +LINE + 5 +22CF + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +9172.057549 + 30 +0.0 + 11 +26812.499929 + 21 +9185.048054 + 31 +0.0 + 0 +LINE + 5 +22D0 + 8 +0 + 62 + 0 + 10 +26787.499929 + 20 +9228.349324 + 30 +0.0 + 11 +26774.999929 + 21 +9249.999959 + 31 +0.0 + 0 +LINE + 5 +22D1 + 8 +0 + 62 + 0 + 10 +26749.999929 + 20 +9293.301229 + 30 +0.0 + 11 +26740.0 + 21 +9310.621613 + 31 +0.0 + 0 +LINE + 5 +22D2 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +9215.358819 + 30 +0.0 + 11 +26812.499929 + 21 +9228.349324 + 31 +0.0 + 0 +LINE + 5 +22D3 + 8 +0 + 62 + 0 + 10 +26787.499929 + 20 +9271.650594 + 30 +0.0 + 11 +26774.999929 + 21 +9293.301229 + 31 +0.0 + 0 +LINE + 5 +22D4 + 8 +0 + 62 + 0 + 10 +26749.999929 + 20 +9336.602499 + 30 +0.0 + 11 +26740.0 + 21 +9353.922883 + 31 +0.0 + 0 +LINE + 5 +22D5 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +9258.660089 + 30 +0.0 + 11 +26812.499928 + 21 +9271.650594 + 31 +0.0 + 0 +LINE + 5 +22D6 + 8 +0 + 62 + 0 + 10 +26787.499928 + 20 +9314.951864 + 30 +0.0 + 11 +26774.999928 + 21 +9336.602499 + 31 +0.0 + 0 +LINE + 5 +22D7 + 8 +0 + 62 + 0 + 10 +26749.999928 + 20 +9379.903769 + 30 +0.0 + 11 +26740.0 + 21 +9397.224153 + 31 +0.0 + 0 +LINE + 5 +22D8 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +9301.961359 + 30 +0.0 + 11 +26812.499928 + 21 +9314.951864 + 31 +0.0 + 0 +LINE + 5 +22D9 + 8 +0 + 62 + 0 + 10 +26787.499928 + 20 +9358.253134 + 30 +0.0 + 11 +26774.999928 + 21 +9379.903769 + 31 +0.0 + 0 +LINE + 5 +22DA + 8 +0 + 62 + 0 + 10 +26749.999928 + 20 +9423.205039 + 30 +0.0 + 11 +26740.0 + 21 +9440.525423 + 31 +0.0 + 0 +LINE + 5 +22DB + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +9345.262629 + 30 +0.0 + 11 +26812.499928 + 21 +9358.253134 + 31 +0.0 + 0 +LINE + 5 +22DC + 8 +0 + 62 + 0 + 10 +26787.499928 + 20 +9401.554404 + 30 +0.0 + 11 +26774.999928 + 21 +9423.205039 + 31 +0.0 + 0 +LINE + 5 +22DD + 8 +0 + 62 + 0 + 10 +26749.999928 + 20 +9466.50631 + 30 +0.0 + 11 +26740.0 + 21 +9483.826693 + 31 +0.0 + 0 +LINE + 5 +22DE + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +9388.563899 + 30 +0.0 + 11 +26812.499928 + 21 +9401.554404 + 31 +0.0 + 0 +LINE + 5 +22DF + 8 +0 + 62 + 0 + 10 +26787.499928 + 20 +9444.855674 + 30 +0.0 + 11 +26774.999928 + 21 +9466.50631 + 31 +0.0 + 0 +LINE + 5 +22E0 + 8 +0 + 62 + 0 + 10 +26749.999928 + 20 +9509.80758 + 30 +0.0 + 11 +26740.0 + 21 +9527.127963 + 31 +0.0 + 0 +LINE + 5 +22E1 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +9431.865169 + 30 +0.0 + 11 +26812.499928 + 21 +9444.855674 + 31 +0.0 + 0 +LINE + 5 +22E2 + 8 +0 + 62 + 0 + 10 +26787.499928 + 20 +9488.156945 + 30 +0.0 + 11 +26774.999928 + 21 +9509.80758 + 31 +0.0 + 0 +LINE + 5 +22E3 + 8 +0 + 62 + 0 + 10 +26749.999928 + 20 +9553.10885 + 30 +0.0 + 11 +26740.0 + 21 +9570.429233 + 31 +0.0 + 0 +LINE + 5 +22E4 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +9475.166439 + 30 +0.0 + 11 +26812.499928 + 21 +9488.156945 + 31 +0.0 + 0 +LINE + 5 +22E5 + 8 +0 + 62 + 0 + 10 +26787.499928 + 20 +9531.458215 + 30 +0.0 + 11 +26774.999928 + 21 +9553.10885 + 31 +0.0 + 0 +LINE + 5 +22E6 + 8 +0 + 62 + 0 + 10 +26749.999928 + 20 +9596.41012 + 30 +0.0 + 11 +26740.0 + 21 +9613.730503 + 31 +0.0 + 0 +LINE + 5 +22E7 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +9518.467709 + 30 +0.0 + 11 +26812.499928 + 21 +9531.458215 + 31 +0.0 + 0 +LINE + 5 +22E8 + 8 +0 + 62 + 0 + 10 +26787.499928 + 20 +9574.759485 + 30 +0.0 + 11 +26774.999928 + 21 +9596.41012 + 31 +0.0 + 0 +LINE + 5 +22E9 + 8 +0 + 62 + 0 + 10 +26749.999928 + 20 +9639.71139 + 30 +0.0 + 11 +26740.0 + 21 +9657.031773 + 31 +0.0 + 0 +LINE + 5 +22EA + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +9561.768979 + 30 +0.0 + 11 +26812.499928 + 21 +9574.759485 + 31 +0.0 + 0 +LINE + 5 +22EB + 8 +0 + 62 + 0 + 10 +26787.499928 + 20 +9618.060755 + 30 +0.0 + 11 +26774.999928 + 21 +9639.71139 + 31 +0.0 + 0 +LINE + 5 +22EC + 8 +0 + 62 + 0 + 10 +26749.999928 + 20 +9683.01266 + 30 +0.0 + 11 +26740.0 + 21 +9700.333043 + 31 +0.0 + 0 +LINE + 5 +22ED + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +9605.070249 + 30 +0.0 + 11 +26812.499928 + 21 +9618.060755 + 31 +0.0 + 0 +LINE + 5 +22EE + 8 +0 + 62 + 0 + 10 +26787.499928 + 20 +9661.362025 + 30 +0.0 + 11 +26774.999928 + 21 +9683.01266 + 31 +0.0 + 0 +LINE + 5 +22EF + 8 +0 + 62 + 0 + 10 +26749.999928 + 20 +9726.31393 + 30 +0.0 + 11 +26740.0 + 21 +9743.634313 + 31 +0.0 + 0 +LINE + 5 +22F0 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +9648.371519 + 30 +0.0 + 11 +26812.499928 + 21 +9661.362025 + 31 +0.0 + 0 +LINE + 5 +22F1 + 8 +0 + 62 + 0 + 10 +26787.499928 + 20 +9704.663295 + 30 +0.0 + 11 +26774.999928 + 21 +9726.31393 + 31 +0.0 + 0 +LINE + 5 +22F2 + 8 +0 + 62 + 0 + 10 +26749.999928 + 20 +9769.615201 + 30 +0.0 + 11 +26740.0 + 21 +9786.935583 + 31 +0.0 + 0 +LINE + 5 +22F3 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +9691.672789 + 30 +0.0 + 11 +26812.499928 + 21 +9704.663295 + 31 +0.0 + 0 +LINE + 5 +22F4 + 8 +0 + 62 + 0 + 10 +26787.499928 + 20 +9747.964565 + 30 +0.0 + 11 +26774.999928 + 21 +9769.6152 + 31 +0.0 + 0 +LINE + 5 +22F5 + 8 +0 + 62 + 0 + 10 +26749.999928 + 20 +9812.916471 + 30 +0.0 + 11 +26740.0 + 21 +9830.236853 + 31 +0.0 + 0 +LINE + 5 +22F6 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +9734.974059 + 30 +0.0 + 11 +26812.499928 + 21 +9747.964565 + 31 +0.0 + 0 +LINE + 5 +22F7 + 8 +0 + 62 + 0 + 10 +26787.499928 + 20 +9791.265836 + 30 +0.0 + 11 +26774.999928 + 21 +9812.916471 + 31 +0.0 + 0 +LINE + 5 +22F8 + 8 +0 + 62 + 0 + 10 +26749.999928 + 20 +9856.217741 + 30 +0.0 + 11 +26740.0 + 21 +9873.538123 + 31 +0.0 + 0 +LINE + 5 +22F9 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +9778.275329 + 30 +0.0 + 11 +26812.499927 + 21 +9791.265835 + 31 +0.0 + 0 +LINE + 5 +22FA + 8 +0 + 62 + 0 + 10 +26787.499927 + 20 +9834.567106 + 30 +0.0 + 11 +26774.999927 + 21 +9856.217741 + 31 +0.0 + 0 +LINE + 5 +22FB + 8 +0 + 62 + 0 + 10 +26749.999927 + 20 +9899.519011 + 30 +0.0 + 11 +26740.0 + 21 +9916.839393 + 31 +0.0 + 0 +LINE + 5 +22FC + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +9821.576599 + 30 +0.0 + 11 +26812.499927 + 21 +9834.567106 + 31 +0.0 + 0 +LINE + 5 +22FD + 8 +0 + 62 + 0 + 10 +26787.499927 + 20 +9877.868376 + 30 +0.0 + 11 +26774.999927 + 21 +9899.519011 + 31 +0.0 + 0 +LINE + 5 +22FE + 8 +0 + 62 + 0 + 10 +26749.999927 + 20 +9942.820281 + 30 +0.0 + 11 +26740.0 + 21 +9960.140663 + 31 +0.0 + 0 +LINE + 5 +22FF + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +9864.877869 + 30 +0.0 + 11 +26812.499927 + 21 +9877.868376 + 31 +0.0 + 0 +LINE + 5 +2300 + 8 +0 + 62 + 0 + 10 +26787.499927 + 20 +9921.169646 + 30 +0.0 + 11 +26774.999927 + 21 +9942.820281 + 31 +0.0 + 0 +LINE + 5 +2301 + 8 +0 + 62 + 0 + 10 +26749.999927 + 20 +9986.121551 + 30 +0.0 + 11 +26740.0 + 21 +10003.441933 + 31 +0.0 + 0 +LINE + 5 +2302 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +9908.179139 + 30 +0.0 + 11 +26812.499927 + 21 +9921.169646 + 31 +0.0 + 0 +LINE + 5 +2303 + 8 +0 + 62 + 0 + 10 +26787.499927 + 20 +9964.470916 + 30 +0.0 + 11 +26774.999927 + 21 +9986.121551 + 31 +0.0 + 0 +LINE + 5 +2304 + 8 +0 + 62 + 0 + 10 +26749.999927 + 20 +10029.422821 + 30 +0.0 + 11 +26740.0 + 21 +10046.743203 + 31 +0.0 + 0 +LINE + 5 +2305 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +9951.480409 + 30 +0.0 + 11 +26812.499927 + 21 +9964.470916 + 31 +0.0 + 0 +LINE + 5 +2306 + 8 +0 + 62 + 0 + 10 +26787.499927 + 20 +10007.772186 + 30 +0.0 + 11 +26774.999927 + 21 +10029.422821 + 31 +0.0 + 0 +LINE + 5 +2307 + 8 +0 + 62 + 0 + 10 +26749.999927 + 20 +10072.724092 + 30 +0.0 + 11 +26740.0 + 21 +10090.044473 + 31 +0.0 + 0 +LINE + 5 +2308 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +9994.781679 + 30 +0.0 + 11 +26812.499927 + 21 +10007.772186 + 31 +0.0 + 0 +LINE + 5 +2309 + 8 +0 + 62 + 0 + 10 +26787.499927 + 20 +10051.073456 + 30 +0.0 + 11 +26774.999927 + 21 +10072.724091 + 31 +0.0 + 0 +LINE + 5 +230A + 8 +0 + 62 + 0 + 10 +26749.999927 + 20 +10116.025362 + 30 +0.0 + 11 +26740.0 + 21 +10133.345743 + 31 +0.0 + 0 +LINE + 5 +230B + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +10038.082949 + 30 +0.0 + 11 +26812.499927 + 21 +10051.073456 + 31 +0.0 + 0 +LINE + 5 +230C + 8 +0 + 62 + 0 + 10 +26787.499927 + 20 +10094.374727 + 30 +0.0 + 11 +26774.999927 + 21 +10116.025362 + 31 +0.0 + 0 +LINE + 5 +230D + 8 +0 + 62 + 0 + 10 +26749.999927 + 20 +10159.326632 + 30 +0.0 + 11 +26740.0 + 21 +10176.647013 + 31 +0.0 + 0 +LINE + 5 +230E + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +10081.384219 + 30 +0.0 + 11 +26812.499927 + 21 +10094.374726 + 31 +0.0 + 0 +LINE + 5 +230F + 8 +0 + 62 + 0 + 10 +26787.499927 + 20 +10137.675997 + 30 +0.0 + 11 +26774.999927 + 21 +10159.326632 + 31 +0.0 + 0 +LINE + 5 +2310 + 8 +0 + 62 + 0 + 10 +26749.999927 + 20 +10202.627902 + 30 +0.0 + 11 +26740.0 + 21 +10219.948283 + 31 +0.0 + 0 +LINE + 5 +2311 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +10124.685489 + 30 +0.0 + 11 +26812.499927 + 21 +10137.675997 + 31 +0.0 + 0 +LINE + 5 +2312 + 8 +0 + 62 + 0 + 10 +26787.499927 + 20 +10180.977267 + 30 +0.0 + 11 +26774.999927 + 21 +10202.627902 + 31 +0.0 + 0 +LINE + 5 +2313 + 8 +0 + 62 + 0 + 10 +26749.999927 + 20 +10245.929172 + 30 +0.0 + 11 +26740.0 + 21 +10263.249553 + 31 +0.0 + 0 +LINE + 5 +2314 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +10167.986759 + 30 +0.0 + 11 +26812.499927 + 21 +10180.977267 + 31 +0.0 + 0 +LINE + 5 +2315 + 8 +0 + 62 + 0 + 10 +26787.499927 + 20 +10224.278537 + 30 +0.0 + 11 +26774.999927 + 21 +10245.929172 + 31 +0.0 + 0 +LINE + 5 +2316 + 8 +0 + 62 + 0 + 10 +26749.999927 + 20 +10289.230442 + 30 +0.0 + 11 +26740.0 + 21 +10306.550823 + 31 +0.0 + 0 +LINE + 5 +2317 + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +10211.288029 + 30 +0.0 + 11 +26812.499927 + 21 +10224.278537 + 31 +0.0 + 0 +LINE + 5 +2318 + 8 +0 + 62 + 0 + 10 +26787.499927 + 20 +10267.579807 + 30 +0.0 + 11 +26774.999927 + 21 +10289.230442 + 31 +0.0 + 0 +LINE + 5 +2319 + 8 +0 + 62 + 0 + 10 +26749.999927 + 20 +10332.531712 + 30 +0.0 + 11 +26740.0 + 21 +10349.852093 + 31 +0.0 + 0 +LINE + 5 +231A + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +10254.589299 + 30 +0.0 + 11 +26812.499927 + 21 +10267.579807 + 31 +0.0 + 0 +LINE + 5 +231B + 8 +0 + 62 + 0 + 10 +26787.499927 + 20 +10310.881077 + 30 +0.0 + 11 +26774.999927 + 21 +10332.531712 + 31 +0.0 + 0 +LINE + 5 +231C + 8 +0 + 62 + 0 + 10 +26749.999927 + 20 +10375.832983 + 30 +0.0 + 11 +26749.759161 + 21 +10376.25 + 31 +0.0 + 0 +LINE + 5 +231D + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +10297.890569 + 30 +0.0 + 11 +26812.499927 + 21 +10310.881077 + 31 +0.0 + 0 +LINE + 5 +231E + 8 +0 + 62 + 0 + 10 +26787.499927 + 20 +10354.182347 + 30 +0.0 + 11 +26774.999927 + 21 +10375.832982 + 31 +0.0 + 0 +LINE + 5 +231F + 8 +0 + 62 + 0 + 10 +26820.0 + 20 +10341.191839 + 30 +0.0 + 11 +26812.499926 + 21 +10354.182347 + 31 +0.0 + 0 +LINE + 5 +2320 + 8 +0 + 62 + 0 + 10 +25728.811888 + 20 +9170.0 + 30 +0.0 + 11 +25737.499932 + 21 +9185.048134 + 31 +0.0 + 0 +LINE + 5 +2321 + 8 +0 + 62 + 0 + 10 +25762.499932 + 20 +9228.349404 + 30 +0.0 + 11 +25774.999909 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2322 + 8 +0 + 62 + 0 + 10 +25724.999932 + 20 +9206.698769 + 30 +0.0 + 11 +25737.499932 + 21 +9228.349404 + 31 +0.0 + 0 +LINE + 5 +2323 + 8 +0 + 62 + 0 + 10 +25687.499932 + 20 +9185.048134 + 30 +0.0 + 11 +25699.999932 + 21 +9206.698769 + 31 +0.0 + 0 +LINE + 5 +2324 + 8 +0 + 62 + 0 + 10 +25653.811888 + 20 +9170.0 + 30 +0.0 + 11 +25662.499932 + 21 +9185.048134 + 31 +0.0 + 0 +LINE + 5 +2325 + 8 +0 + 62 + 0 + 10 +25687.499932 + 20 +9228.349404 + 30 +0.0 + 11 +25699.99991 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2326 + 8 +0 + 62 + 0 + 10 +25649.999932 + 20 +9206.698769 + 30 +0.0 + 11 +25662.499932 + 21 +9228.349404 + 31 +0.0 + 0 +LINE + 5 +2327 + 8 +0 + 62 + 0 + 10 +25612.499932 + 20 +9185.048134 + 30 +0.0 + 11 +25624.999932 + 21 +9206.698769 + 31 +0.0 + 0 +LINE + 5 +2328 + 8 +0 + 62 + 0 + 10 +25578.811888 + 20 +9170.0 + 30 +0.0 + 11 +25587.499932 + 21 +9185.048134 + 31 +0.0 + 0 +LINE + 5 +2329 + 8 +0 + 62 + 0 + 10 +25612.499932 + 20 +9228.349404 + 30 +0.0 + 11 +25624.99991 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +232A + 8 +0 + 62 + 0 + 10 +25574.999932 + 20 +9206.698769 + 30 +0.0 + 11 +25587.499932 + 21 +9228.349404 + 31 +0.0 + 0 +LINE + 5 +232B + 8 +0 + 62 + 0 + 10 +25537.499933 + 20 +9185.048134 + 30 +0.0 + 11 +25549.999933 + 21 +9206.698769 + 31 +0.0 + 0 +LINE + 5 +232C + 8 +0 + 62 + 0 + 10 +25503.811889 + 20 +9170.0 + 30 +0.0 + 11 +25512.499933 + 21 +9185.048134 + 31 +0.0 + 0 +LINE + 5 +232D + 8 +0 + 62 + 0 + 10 +25537.499933 + 20 +9228.349404 + 30 +0.0 + 11 +25549.99991 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +232E + 8 +0 + 62 + 0 + 10 +25499.999933 + 20 +9206.698769 + 30 +0.0 + 11 +25512.499933 + 21 +9228.349404 + 31 +0.0 + 0 +LINE + 5 +232F + 8 +0 + 62 + 0 + 10 +25462.499933 + 20 +9185.048134 + 30 +0.0 + 11 +25474.999933 + 21 +9206.698769 + 31 +0.0 + 0 +LINE + 5 +2330 + 8 +0 + 62 + 0 + 10 +25428.811889 + 20 +9170.0 + 30 +0.0 + 11 +25437.499933 + 21 +9185.048133 + 31 +0.0 + 0 +LINE + 5 +2331 + 8 +0 + 62 + 0 + 10 +25462.499933 + 20 +9228.349404 + 30 +0.0 + 11 +25474.999911 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2332 + 8 +0 + 62 + 0 + 10 +25424.999933 + 20 +9206.698769 + 30 +0.0 + 11 +25437.499933 + 21 +9228.349404 + 31 +0.0 + 0 +LINE + 5 +2333 + 8 +0 + 62 + 0 + 10 +25387.499933 + 20 +9185.048133 + 30 +0.0 + 11 +25399.999933 + 21 +9206.698768 + 31 +0.0 + 0 +LINE + 5 +2334 + 8 +0 + 62 + 0 + 10 +25387.499933 + 20 +9228.349404 + 30 +0.0 + 11 +25399.999911 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2335 + 8 +0 + 62 + 0 + 10 +25762.499932 + 20 +9185.048134 + 30 +0.0 + 11 +25774.999932 + 21 +9206.698769 + 31 +0.0 + 0 +LINE + 5 +2336 + 8 +0 + 62 + 0 + 10 +25799.999932 + 20 +9206.698769 + 30 +0.0 + 11 +25812.499932 + 21 +9228.349404 + 31 +0.0 + 0 +LINE + 5 +2337 + 8 +0 + 62 + 0 + 10 +25803.811887 + 20 +9170.0 + 30 +0.0 + 11 +25812.499932 + 21 +9185.048134 + 31 +0.0 + 0 +LINE + 5 +2338 + 8 +0 + 62 + 0 + 10 +25837.499932 + 20 +9228.349404 + 30 +0.0 + 11 +25849.999909 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2339 + 8 +0 + 62 + 0 + 10 +25837.499932 + 20 +9185.048134 + 30 +0.0 + 11 +25849.999932 + 21 +9206.698769 + 31 +0.0 + 0 +LINE + 5 +233A + 8 +0 + 62 + 0 + 10 +25874.999932 + 20 +9206.698769 + 30 +0.0 + 11 +25887.499932 + 21 +9228.349404 + 31 +0.0 + 0 +LINE + 5 +233B + 8 +0 + 62 + 0 + 10 +25878.811887 + 20 +9170.0 + 30 +0.0 + 11 +25887.499931 + 21 +9185.048134 + 31 +0.0 + 0 +LINE + 5 +233C + 8 +0 + 62 + 0 + 10 +25912.499931 + 20 +9228.349405 + 30 +0.0 + 11 +25924.999909 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +233D + 8 +0 + 62 + 0 + 10 +25912.499931 + 20 +9185.048134 + 30 +0.0 + 11 +25924.999931 + 21 +9206.698769 + 31 +0.0 + 0 +LINE + 5 +233E + 8 +0 + 62 + 0 + 10 +25949.999931 + 20 +9206.69877 + 30 +0.0 + 11 +25962.499931 + 21 +9228.349405 + 31 +0.0 + 0 +LINE + 5 +233F + 8 +0 + 62 + 0 + 10 +25953.811887 + 20 +9170.0 + 30 +0.0 + 11 +25962.499931 + 21 +9185.048134 + 31 +0.0 + 0 +LINE + 5 +2340 + 8 +0 + 62 + 0 + 10 +25987.499931 + 20 +9228.349405 + 30 +0.0 + 11 +25999.999908 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2341 + 8 +0 + 62 + 0 + 10 +25987.499931 + 20 +9185.048135 + 30 +0.0 + 11 +25999.999931 + 21 +9206.69877 + 31 +0.0 + 0 +LINE + 5 +2342 + 8 +0 + 62 + 0 + 10 +26024.999931 + 20 +9206.69877 + 30 +0.0 + 11 +26037.499931 + 21 +9228.349405 + 31 +0.0 + 0 +LINE + 5 +2343 + 8 +0 + 62 + 0 + 10 +26028.811886 + 20 +9170.0 + 30 +0.0 + 11 +26037.499931 + 21 +9185.048135 + 31 +0.0 + 0 +LINE + 5 +2344 + 8 +0 + 62 + 0 + 10 +26062.499931 + 20 +9228.349405 + 30 +0.0 + 11 +26074.999908 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2345 + 8 +0 + 62 + 0 + 10 +26062.499931 + 20 +9185.048135 + 30 +0.0 + 11 +26074.999931 + 21 +9206.69877 + 31 +0.0 + 0 +LINE + 5 +2346 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +10358.512677 + 30 +0.0 + 11 +26749.999931 + 21 +10375.833065 + 31 +0.0 + 0 +LINE + 5 +2347 + 8 +0 + 62 + 0 + 10 +26099.999931 + 20 +9206.69877 + 30 +0.0 + 11 +26112.499931 + 21 +9228.349405 + 31 +0.0 + 0 +LINE + 5 +2348 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +10315.211407 + 30 +0.0 + 11 +26749.999931 + 21 +10332.531795 + 31 +0.0 + 0 +LINE + 5 +2349 + 8 +0 + 62 + 0 + 10 +26774.999931 + 20 +10375.833065 + 30 +0.0 + 11 +26775.240648 + 21 +10376.25 + 31 +0.0 + 0 +LINE + 5 +234A + 8 +0 + 62 + 0 + 10 +26103.811886 + 20 +9170.0 + 30 +0.0 + 11 +26112.499931 + 21 +9185.048135 + 31 +0.0 + 0 +LINE + 5 +234B + 8 +0 + 62 + 0 + 10 +26137.499931 + 20 +9228.349405 + 30 +0.0 + 11 +26149.999908 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +234C + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +10271.910137 + 30 +0.0 + 11 +26749.999931 + 21 +10289.230525 + 31 +0.0 + 0 +LINE + 5 +234D + 8 +0 + 62 + 0 + 10 +26774.999931 + 20 +10332.531795 + 30 +0.0 + 11 +26787.499931 + 21 +10354.18243 + 31 +0.0 + 0 +LINE + 5 +234E + 8 +0 + 62 + 0 + 10 +26137.499931 + 20 +9185.048135 + 30 +0.0 + 11 +26149.999931 + 21 +9206.69877 + 31 +0.0 + 0 +LINE + 5 +234F + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +10228.608867 + 30 +0.0 + 11 +26749.999931 + 21 +10245.929254 + 31 +0.0 + 0 +LINE + 5 +2350 + 8 +0 + 62 + 0 + 10 +26774.999931 + 20 +10289.230525 + 30 +0.0 + 11 +26787.499931 + 21 +10310.88116 + 31 +0.0 + 0 +LINE + 5 +2351 + 8 +0 + 62 + 0 + 10 +26812.499931 + 20 +10354.18243 + 30 +0.0 + 11 +26820.0 + 21 +10367.172931 + 31 +0.0 + 0 +LINE + 5 +2352 + 8 +0 + 62 + 0 + 10 +26174.999931 + 20 +9206.69877 + 30 +0.0 + 11 +26187.499931 + 21 +9228.349405 + 31 +0.0 + 0 +LINE + 5 +2353 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +10185.307597 + 30 +0.0 + 11 +26749.999931 + 21 +10202.627984 + 31 +0.0 + 0 +LINE + 5 +2354 + 8 +0 + 62 + 0 + 10 +26774.999931 + 20 +10245.929254 + 30 +0.0 + 11 +26787.499931 + 21 +10267.57989 + 31 +0.0 + 0 +LINE + 5 +2355 + 8 +0 + 62 + 0 + 10 +26812.499931 + 20 +10310.88116 + 30 +0.0 + 11 +26820.0 + 21 +10323.871661 + 31 +0.0 + 0 +LINE + 5 +2356 + 8 +0 + 62 + 0 + 10 +26178.811886 + 20 +9170.0 + 30 +0.0 + 11 +26187.49993 + 21 +9185.048135 + 31 +0.0 + 0 +LINE + 5 +2357 + 8 +0 + 62 + 0 + 10 +26212.49993 + 20 +9228.349405 + 30 +0.0 + 11 +26224.999907 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2358 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +10142.006327 + 30 +0.0 + 11 +26749.99993 + 21 +10159.326714 + 31 +0.0 + 0 +LINE + 5 +2359 + 8 +0 + 62 + 0 + 10 +26774.99993 + 20 +10202.627984 + 30 +0.0 + 11 +26787.49993 + 21 +10224.278619 + 31 +0.0 + 0 +LINE + 5 +235A + 8 +0 + 62 + 0 + 10 +26812.49993 + 20 +10267.57989 + 30 +0.0 + 11 +26820.0 + 21 +10280.570391 + 31 +0.0 + 0 +LINE + 5 +235B + 8 +0 + 62 + 0 + 10 +26212.49993 + 20 +9185.048135 + 30 +0.0 + 11 +26224.99993 + 21 +9206.69877 + 31 +0.0 + 0 +LINE + 5 +235C + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +10098.705057 + 30 +0.0 + 11 +26749.99993 + 21 +10116.025444 + 31 +0.0 + 0 +LINE + 5 +235D + 8 +0 + 62 + 0 + 10 +26774.99993 + 20 +10159.326714 + 30 +0.0 + 11 +26787.49993 + 21 +10180.977349 + 31 +0.0 + 0 +LINE + 5 +235E + 8 +0 + 62 + 0 + 10 +26812.49993 + 20 +10224.278619 + 30 +0.0 + 11 +26820.0 + 21 +10237.269121 + 31 +0.0 + 0 +LINE + 5 +235F + 8 +0 + 62 + 0 + 10 +26249.99993 + 20 +9206.69877 + 30 +0.0 + 11 +26262.49993 + 21 +9228.349405 + 31 +0.0 + 0 +LINE + 5 +2360 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +10055.403787 + 30 +0.0 + 11 +26749.99993 + 21 +10072.724174 + 31 +0.0 + 0 +LINE + 5 +2361 + 8 +0 + 62 + 0 + 10 +26774.99993 + 20 +10116.025444 + 30 +0.0 + 11 +26787.49993 + 21 +10137.676079 + 31 +0.0 + 0 +LINE + 5 +2362 + 8 +0 + 62 + 0 + 10 +26812.49993 + 20 +10180.977349 + 30 +0.0 + 11 +26820.0 + 21 +10193.967851 + 31 +0.0 + 0 +LINE + 5 +2363 + 8 +0 + 62 + 0 + 10 +26253.811885 + 20 +9170.0 + 30 +0.0 + 11 +26262.49993 + 21 +9185.048135 + 31 +0.0 + 0 +LINE + 5 +2364 + 8 +0 + 62 + 0 + 10 +26287.49993 + 20 +9228.349405 + 30 +0.0 + 11 +26299.999907 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2365 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +10012.102517 + 30 +0.0 + 11 +26749.99993 + 21 +10029.422904 + 31 +0.0 + 0 +LINE + 5 +2366 + 8 +0 + 62 + 0 + 10 +26774.99993 + 20 +10072.724174 + 30 +0.0 + 11 +26787.49993 + 21 +10094.374809 + 31 +0.0 + 0 +LINE + 5 +2367 + 8 +0 + 62 + 0 + 10 +26812.49993 + 20 +10137.676079 + 30 +0.0 + 11 +26820.0 + 21 +10150.666581 + 31 +0.0 + 0 +LINE + 5 +2368 + 8 +0 + 62 + 0 + 10 +26287.49993 + 20 +9185.048135 + 30 +0.0 + 11 +26299.99993 + 21 +9206.69877 + 31 +0.0 + 0 +LINE + 5 +2369 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +9968.801247 + 30 +0.0 + 11 +26749.99993 + 21 +9986.121634 + 31 +0.0 + 0 +LINE + 5 +236A + 8 +0 + 62 + 0 + 10 +26774.99993 + 20 +10029.422904 + 30 +0.0 + 11 +26787.49993 + 21 +10051.073539 + 31 +0.0 + 0 +LINE + 5 +236B + 8 +0 + 62 + 0 + 10 +26812.49993 + 20 +10094.374809 + 30 +0.0 + 11 +26820.0 + 21 +10107.365311 + 31 +0.0 + 0 +LINE + 5 +236C + 8 +0 + 62 + 0 + 10 +26324.99993 + 20 +9206.69877 + 30 +0.0 + 11 +26337.49993 + 21 +9228.349405 + 31 +0.0 + 0 +LINE + 5 +236D + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +9925.499977 + 30 +0.0 + 11 +26749.99993 + 21 +9942.820363 + 31 +0.0 + 0 +LINE + 5 +236E + 8 +0 + 62 + 0 + 10 +26774.99993 + 20 +9986.121634 + 30 +0.0 + 11 +26787.49993 + 21 +10007.772269 + 31 +0.0 + 0 +LINE + 5 +236F + 8 +0 + 62 + 0 + 10 +26812.49993 + 20 +10051.073539 + 30 +0.0 + 11 +26820.0 + 21 +10064.064041 + 31 +0.0 + 0 +LINE + 5 +2370 + 8 +0 + 62 + 0 + 10 +26328.811885 + 20 +9170.0 + 30 +0.0 + 11 +26337.49993 + 21 +9185.048135 + 31 +0.0 + 0 +LINE + 5 +2371 + 8 +0 + 62 + 0 + 10 +26362.49993 + 20 +9228.349405 + 30 +0.0 + 11 +26374.999907 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2372 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +9882.198707 + 30 +0.0 + 11 +26749.99993 + 21 +9899.519093 + 31 +0.0 + 0 +LINE + 5 +2373 + 8 +0 + 62 + 0 + 10 +26774.99993 + 20 +9942.820363 + 30 +0.0 + 11 +26787.49993 + 21 +9964.470999 + 31 +0.0 + 0 +LINE + 5 +2374 + 8 +0 + 62 + 0 + 10 +26812.49993 + 20 +10007.772269 + 30 +0.0 + 11 +26820.0 + 21 +10020.762771 + 31 +0.0 + 0 +LINE + 5 +2375 + 8 +0 + 62 + 0 + 10 +26362.49993 + 20 +9185.048135 + 30 +0.0 + 11 +26374.99993 + 21 +9206.69877 + 31 +0.0 + 0 +LINE + 5 +2376 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +9838.897437 + 30 +0.0 + 11 +26749.99993 + 21 +9856.217823 + 31 +0.0 + 0 +LINE + 5 +2377 + 8 +0 + 62 + 0 + 10 +26774.99993 + 20 +9899.519093 + 30 +0.0 + 11 +26787.49993 + 21 +9921.169728 + 31 +0.0 + 0 +LINE + 5 +2378 + 8 +0 + 62 + 0 + 10 +26812.49993 + 20 +9964.470999 + 30 +0.0 + 11 +26820.0 + 21 +9977.461501 + 31 +0.0 + 0 +LINE + 5 +2379 + 8 +0 + 62 + 0 + 10 +26399.99993 + 20 +9206.69877 + 30 +0.0 + 11 +26412.49993 + 21 +9228.349405 + 31 +0.0 + 0 +LINE + 5 +237A + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +9795.596167 + 30 +0.0 + 11 +26749.99993 + 21 +9812.916553 + 31 +0.0 + 0 +LINE + 5 +237B + 8 +0 + 62 + 0 + 10 +26774.99993 + 20 +9856.217823 + 30 +0.0 + 11 +26787.49993 + 21 +9877.868458 + 31 +0.0 + 0 +LINE + 5 +237C + 8 +0 + 62 + 0 + 10 +26812.49993 + 20 +9921.169728 + 30 +0.0 + 11 +26820.0 + 21 +9934.160231 + 31 +0.0 + 0 +LINE + 5 +237D + 8 +0 + 62 + 0 + 10 +26403.811885 + 20 +9170.0 + 30 +0.0 + 11 +26412.49993 + 21 +9185.048135 + 31 +0.0 + 0 +LINE + 5 +237E + 8 +0 + 62 + 0 + 10 +26437.49993 + 20 +9228.349405 + 30 +0.0 + 11 +26449.999906 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +237F + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +9752.294897 + 30 +0.0 + 11 +26749.99993 + 21 +9769.615283 + 31 +0.0 + 0 +LINE + 5 +2380 + 8 +0 + 62 + 0 + 10 +26774.99993 + 20 +9812.916553 + 30 +0.0 + 11 +26787.49993 + 21 +9834.567188 + 31 +0.0 + 0 +LINE + 5 +2381 + 8 +0 + 62 + 0 + 10 +26812.49993 + 20 +9877.868458 + 30 +0.0 + 11 +26820.0 + 21 +9890.858961 + 31 +0.0 + 0 +LINE + 5 +2382 + 8 +0 + 62 + 0 + 10 +26437.49993 + 20 +9185.048135 + 30 +0.0 + 11 +26449.99993 + 21 +9206.69877 + 31 +0.0 + 0 +LINE + 5 +2383 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +9708.993627 + 30 +0.0 + 11 +26749.99993 + 21 +9726.314013 + 31 +0.0 + 0 +LINE + 5 +2384 + 8 +0 + 62 + 0 + 10 +26774.99993 + 20 +9769.615283 + 30 +0.0 + 11 +26787.49993 + 21 +9791.265918 + 31 +0.0 + 0 +LINE + 5 +2385 + 8 +0 + 62 + 0 + 10 +26812.49993 + 20 +9834.567188 + 30 +0.0 + 11 +26820.0 + 21 +9847.557691 + 31 +0.0 + 0 +LINE + 5 +2386 + 8 +0 + 62 + 0 + 10 +26474.99993 + 20 +9206.69877 + 30 +0.0 + 11 +26487.49993 + 21 +9228.349406 + 31 +0.0 + 0 +LINE + 5 +2387 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +9665.692357 + 30 +0.0 + 11 +26749.99993 + 21 +9683.012743 + 31 +0.0 + 0 +LINE + 5 +2388 + 8 +0 + 62 + 0 + 10 +26774.99993 + 20 +9726.314013 + 30 +0.0 + 11 +26787.49993 + 21 +9747.964648 + 31 +0.0 + 0 +LINE + 5 +2389 + 8 +0 + 62 + 0 + 10 +26812.49993 + 20 +9791.265918 + 30 +0.0 + 11 +26820.0 + 21 +9804.256421 + 31 +0.0 + 0 +LINE + 5 +238A + 8 +0 + 62 + 0 + 10 +26478.811884 + 20 +9170.0 + 30 +0.0 + 11 +26487.499929 + 21 +9185.048135 + 31 +0.0 + 0 +LINE + 5 +238B + 8 +0 + 62 + 0 + 10 +26512.499929 + 20 +9228.349406 + 30 +0.0 + 11 +26524.999906 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +238C + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +9622.391087 + 30 +0.0 + 11 +26749.999929 + 21 +9639.711472 + 31 +0.0 + 0 +LINE + 5 +238D + 8 +0 + 62 + 0 + 10 +26774.999929 + 20 +9683.012743 + 30 +0.0 + 11 +26787.499929 + 21 +9704.663378 + 31 +0.0 + 0 +LINE + 5 +238E + 8 +0 + 62 + 0 + 10 +26812.499929 + 20 +9747.964648 + 30 +0.0 + 11 +26820.0 + 21 +9760.955151 + 31 +0.0 + 0 +LINE + 5 +238F + 8 +0 + 62 + 0 + 10 +26512.499929 + 20 +9185.048135 + 30 +0.0 + 11 +26524.999929 + 21 +9206.698771 + 31 +0.0 + 0 +LINE + 5 +2390 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +9579.089817 + 30 +0.0 + 11 +26749.999929 + 21 +9596.410202 + 31 +0.0 + 0 +LINE + 5 +2391 + 8 +0 + 62 + 0 + 10 +26774.999929 + 20 +9639.711472 + 30 +0.0 + 11 +26787.499929 + 21 +9661.362108 + 31 +0.0 + 0 +LINE + 5 +2392 + 8 +0 + 62 + 0 + 10 +26812.499929 + 20 +9704.663378 + 30 +0.0 + 11 +26820.0 + 21 +9717.653881 + 31 +0.0 + 0 +LINE + 5 +2393 + 8 +0 + 62 + 0 + 10 +26549.999929 + 20 +9206.698771 + 30 +0.0 + 11 +26562.499929 + 21 +9228.349406 + 31 +0.0 + 0 +LINE + 5 +2394 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +9535.788547 + 30 +0.0 + 11 +26749.999929 + 21 +9553.108932 + 31 +0.0 + 0 +LINE + 5 +2395 + 8 +0 + 62 + 0 + 10 +26774.999929 + 20 +9596.410202 + 30 +0.0 + 11 +26787.499929 + 21 +9618.060837 + 31 +0.0 + 0 +LINE + 5 +2396 + 8 +0 + 62 + 0 + 10 +26812.499929 + 20 +9661.362108 + 30 +0.0 + 11 +26820.0 + 21 +9674.352611 + 31 +0.0 + 0 +LINE + 5 +2397 + 8 +0 + 62 + 0 + 10 +26553.811884 + 20 +9170.0 + 30 +0.0 + 11 +26562.499929 + 21 +9185.048136 + 31 +0.0 + 0 +LINE + 5 +2398 + 8 +0 + 62 + 0 + 10 +26587.499929 + 20 +9228.349406 + 30 +0.0 + 11 +26599.999906 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2399 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +9492.487277 + 30 +0.0 + 11 +26749.999929 + 21 +9509.807662 + 31 +0.0 + 0 +LINE + 5 +239A + 8 +0 + 62 + 0 + 10 +26774.999929 + 20 +9553.108932 + 30 +0.0 + 11 +26787.499929 + 21 +9574.759567 + 31 +0.0 + 0 +LINE + 5 +239B + 8 +0 + 62 + 0 + 10 +26812.499929 + 20 +9618.060837 + 30 +0.0 + 11 +26820.0 + 21 +9631.051341 + 31 +0.0 + 0 +LINE + 5 +239C + 8 +0 + 62 + 0 + 10 +26587.499929 + 20 +9185.048136 + 30 +0.0 + 11 +26599.999929 + 21 +9206.698771 + 31 +0.0 + 0 +LINE + 5 +239D + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +9449.186007 + 30 +0.0 + 11 +26749.999929 + 21 +9466.506392 + 31 +0.0 + 0 +LINE + 5 +239E + 8 +0 + 62 + 0 + 10 +26774.999929 + 20 +9509.807662 + 30 +0.0 + 11 +26787.499929 + 21 +9531.458297 + 31 +0.0 + 0 +LINE + 5 +239F + 8 +0 + 62 + 0 + 10 +26812.499929 + 20 +9574.759567 + 30 +0.0 + 11 +26820.0 + 21 +9587.750071 + 31 +0.0 + 0 +LINE + 5 +23A0 + 8 +0 + 62 + 0 + 10 +26624.999929 + 20 +9206.698771 + 30 +0.0 + 11 +26637.499929 + 21 +9228.349406 + 31 +0.0 + 0 +LINE + 5 +23A1 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +9405.884737 + 30 +0.0 + 11 +26749.999929 + 21 +9423.205122 + 31 +0.0 + 0 +LINE + 5 +23A2 + 8 +0 + 62 + 0 + 10 +26774.999929 + 20 +9466.506392 + 30 +0.0 + 11 +26787.499929 + 21 +9488.157027 + 31 +0.0 + 0 +LINE + 5 +23A3 + 8 +0 + 62 + 0 + 10 +26812.499929 + 20 +9531.458297 + 30 +0.0 + 11 +26820.0 + 21 +9544.448801 + 31 +0.0 + 0 +LINE + 5 +23A4 + 8 +0 + 62 + 0 + 10 +26628.811884 + 20 +9170.0 + 30 +0.0 + 11 +26637.499929 + 21 +9185.048136 + 31 +0.0 + 0 +LINE + 5 +23A5 + 8 +0 + 62 + 0 + 10 +26662.499929 + 20 +9228.349406 + 30 +0.0 + 11 +26674.999905 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +23A6 + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +9362.583467 + 30 +0.0 + 11 +26749.999929 + 21 +9379.903852 + 31 +0.0 + 0 +LINE + 5 +23A7 + 8 +0 + 62 + 0 + 10 +26774.999929 + 20 +9423.205122 + 30 +0.0 + 11 +26787.499929 + 21 +9444.855757 + 31 +0.0 + 0 +LINE + 5 +23A8 + 8 +0 + 62 + 0 + 10 +26812.499929 + 20 +9488.157027 + 30 +0.0 + 11 +26820.0 + 21 +9501.147531 + 31 +0.0 + 0 +LINE + 5 +23A9 + 8 +0 + 62 + 0 + 10 +26662.499929 + 20 +9185.048136 + 30 +0.0 + 11 +26674.999929 + 21 +9206.698771 + 31 +0.0 + 0 +LINE + 5 +23AA + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +9319.282197 + 30 +0.0 + 11 +26749.999929 + 21 +9336.602581 + 31 +0.0 + 0 +LINE + 5 +23AB + 8 +0 + 62 + 0 + 10 +26774.999929 + 20 +9379.903852 + 30 +0.0 + 11 +26787.499929 + 21 +9401.554487 + 31 +0.0 + 0 +LINE + 5 +23AC + 8 +0 + 62 + 0 + 10 +26812.499929 + 20 +9444.855757 + 30 +0.0 + 11 +26820.0 + 21 +9457.846261 + 31 +0.0 + 0 +LINE + 5 +23AD + 8 +0 + 62 + 0 + 10 +26699.999929 + 20 +9206.698771 + 30 +0.0 + 11 +26712.499929 + 21 +9228.349406 + 31 +0.0 + 0 +LINE + 5 +23AE + 8 +0 + 62 + 0 + 10 +26740.0 + 20 +9275.980927 + 30 +0.0 + 11 +26749.999929 + 21 +9293.301311 + 31 +0.0 + 0 +LINE + 5 +23AF + 8 +0 + 62 + 0 + 10 +26774.999929 + 20 +9336.602581 + 30 +0.0 + 11 +26787.499929 + 21 +9358.253217 + 31 +0.0 + 0 +LINE + 5 +23B0 + 8 +0 + 62 + 0 + 10 +26812.499929 + 20 +9401.554487 + 30 +0.0 + 11 +26820.0 + 21 +9414.544991 + 31 +0.0 + 0 +LINE + 5 +23B1 + 8 +0 + 62 + 0 + 10 +26703.811883 + 20 +9170.0 + 30 +0.0 + 11 +26712.499929 + 21 +9185.048136 + 31 +0.0 + 0 +LINE + 5 +23B2 + 8 +0 + 62 + 0 + 10 +26737.499929 + 20 +9228.349406 + 30 +0.0 + 11 +26749.999929 + 21 +9250.000041 + 31 +0.0 + 0 +LINE + 5 +23B3 + 8 +0 + 62 + 0 + 10 +26774.999929 + 20 +9293.301311 + 30 +0.0 + 11 +26787.499929 + 21 +9314.951946 + 31 +0.0 + 0 +LINE + 5 +23B4 + 8 +0 + 62 + 0 + 10 +26812.499929 + 20 +9358.253217 + 30 +0.0 + 11 +26820.0 + 21 +9371.243721 + 31 +0.0 + 0 +LINE + 5 +23B5 + 8 +0 + 62 + 0 + 10 +26737.499929 + 20 +9185.048136 + 30 +0.0 + 11 +26749.999929 + 21 +9206.698771 + 31 +0.0 + 0 +LINE + 5 +23B6 + 8 +0 + 62 + 0 + 10 +26774.999929 + 20 +9250.000041 + 30 +0.0 + 11 +26787.499929 + 21 +9271.650676 + 31 +0.0 + 0 +LINE + 5 +23B7 + 8 +0 + 62 + 0 + 10 +26812.499929 + 20 +9314.951946 + 30 +0.0 + 11 +26820.0 + 21 +9327.942451 + 31 +0.0 + 0 +LINE + 5 +23B8 + 8 +0 + 62 + 0 + 10 +26774.999929 + 20 +9206.698771 + 30 +0.0 + 11 +26787.499929 + 21 +9228.349406 + 31 +0.0 + 0 +LINE + 5 +23B9 + 8 +0 + 62 + 0 + 10 +26812.499929 + 20 +9271.650676 + 30 +0.0 + 11 +26820.0 + 21 +9284.641181 + 31 +0.0 + 0 +LINE + 5 +23BA + 8 +0 + 62 + 0 + 10 +26778.811883 + 20 +9170.0 + 30 +0.0 + 11 +26787.499928 + 21 +9185.048136 + 31 +0.0 + 0 +LINE + 5 +23BB + 8 +0 + 62 + 0 + 10 +26812.499928 + 20 +9228.349406 + 30 +0.0 + 11 +26820.0 + 21 +9241.339911 + 31 +0.0 + 0 +LINE + 5 +23BC + 8 +0 + 62 + 0 + 10 +26812.499928 + 20 +9185.048136 + 30 +0.0 + 11 +26820.0 + 21 +9198.038641 + 31 +0.0 + 0 +ENDBLK + 5 +23BD + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X52 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X52 + 1 + + 0 +LINE + 5 +23BF + 8 +0 + 62 + 0 + 10 +21912.5 + 20 +9228.349365 + 30 +0.0 + 11 +21937.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +23C0 + 8 +0 + 62 + 0 + 10 +21987.5 + 20 +9228.349365 + 30 +0.0 + 11 +22012.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +23C1 + 8 +0 + 62 + 0 + 10 +22062.5 + 20 +9228.349365 + 30 +0.0 + 11 +22087.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +23C2 + 8 +0 + 62 + 0 + 10 +22137.5 + 20 +9228.349365 + 30 +0.0 + 11 +22162.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +23C3 + 8 +0 + 62 + 0 + 10 +22212.5 + 20 +9228.349365 + 30 +0.0 + 11 +22237.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +23C4 + 8 +0 + 62 + 0 + 10 +22287.5 + 20 +9228.349365 + 30 +0.0 + 11 +22312.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +23C5 + 8 +0 + 62 + 0 + 10 +22362.5 + 20 +9228.349365 + 30 +0.0 + 11 +22387.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +23C6 + 8 +0 + 62 + 0 + 10 +22437.5 + 20 +9228.349365 + 30 +0.0 + 11 +22462.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +23C7 + 8 +0 + 62 + 0 + 10 +22512.5 + 20 +9228.349365 + 30 +0.0 + 11 +22537.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +23C8 + 8 +0 + 62 + 0 + 10 +22587.5 + 20 +9228.349365 + 30 +0.0 + 11 +22612.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +23C9 + 8 +0 + 62 + 0 + 10 +22662.5 + 20 +9228.349365 + 30 +0.0 + 11 +22687.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +23CA + 8 +0 + 62 + 0 + 10 +22737.5 + 20 +9228.349365 + 30 +0.0 + 11 +22762.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +23CB + 8 +0 + 62 + 0 + 10 +22812.5 + 20 +9228.349365 + 30 +0.0 + 11 +22837.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +23CC + 8 +0 + 62 + 0 + 10 +22887.5 + 20 +9228.349365 + 30 +0.0 + 11 +22912.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +23CD + 8 +0 + 62 + 0 + 10 +22962.5 + 20 +9228.349365 + 30 +0.0 + 11 +22987.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +23CE + 8 +0 + 62 + 0 + 10 +23037.5 + 20 +9228.349365 + 30 +0.0 + 11 +23062.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +23CF + 8 +0 + 62 + 0 + 10 +23112.5 + 20 +9228.349365 + 30 +0.0 + 11 +23137.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +23D0 + 8 +0 + 62 + 0 + 10 +23187.5 + 20 +9228.349365 + 30 +0.0 + 11 +23212.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +23D1 + 8 +0 + 62 + 0 + 10 +21875.0 + 20 +9206.69873 + 30 +0.0 + 11 +21900.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +23D2 + 8 +0 + 62 + 0 + 10 +21950.0 + 20 +9206.69873 + 30 +0.0 + 11 +21975.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +23D3 + 8 +0 + 62 + 0 + 10 +22025.0 + 20 +9206.69873 + 30 +0.0 + 11 +22050.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +23D4 + 8 +0 + 62 + 0 + 10 +22100.0 + 20 +9206.69873 + 30 +0.0 + 11 +22125.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +23D5 + 8 +0 + 62 + 0 + 10 +22175.0 + 20 +9206.69873 + 30 +0.0 + 11 +22200.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +23D6 + 8 +0 + 62 + 0 + 10 +22250.0 + 20 +9206.69873 + 30 +0.0 + 11 +22275.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +23D7 + 8 +0 + 62 + 0 + 10 +22325.0 + 20 +9206.69873 + 30 +0.0 + 11 +22350.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +23D8 + 8 +0 + 62 + 0 + 10 +22400.0 + 20 +9206.69873 + 30 +0.0 + 11 +22425.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +23D9 + 8 +0 + 62 + 0 + 10 +22475.0 + 20 +9206.69873 + 30 +0.0 + 11 +22500.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +23DA + 8 +0 + 62 + 0 + 10 +22550.0 + 20 +9206.69873 + 30 +0.0 + 11 +22575.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +23DB + 8 +0 + 62 + 0 + 10 +22625.0 + 20 +9206.69873 + 30 +0.0 + 11 +22650.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +23DC + 8 +0 + 62 + 0 + 10 +22700.0 + 20 +9206.69873 + 30 +0.0 + 11 +22725.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +23DD + 8 +0 + 62 + 0 + 10 +22775.0 + 20 +9206.69873 + 30 +0.0 + 11 +22800.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +23DE + 8 +0 + 62 + 0 + 10 +22850.0 + 20 +9206.69873 + 30 +0.0 + 11 +22875.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +23DF + 8 +0 + 62 + 0 + 10 +22925.0 + 20 +9206.69873 + 30 +0.0 + 11 +22950.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +23E0 + 8 +0 + 62 + 0 + 10 +23000.0 + 20 +9206.69873 + 30 +0.0 + 11 +23025.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +23E1 + 8 +0 + 62 + 0 + 10 +23075.0 + 20 +9206.69873 + 30 +0.0 + 11 +23100.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +23E2 + 8 +0 + 62 + 0 + 10 +23150.0 + 20 +9206.69873 + 30 +0.0 + 11 +23175.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +23E3 + 8 +0 + 62 + 0 + 10 +23225.0 + 20 +9206.69873 + 30 +0.0 + 11 +23250.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +23E4 + 8 +0 + 62 + 0 + 10 +21912.5 + 20 +9185.048095 + 30 +0.0 + 11 +21937.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +23E5 + 8 +0 + 62 + 0 + 10 +21987.5 + 20 +9185.048095 + 30 +0.0 + 11 +22012.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +23E6 + 8 +0 + 62 + 0 + 10 +22062.5 + 20 +9185.048095 + 30 +0.0 + 11 +22087.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +23E7 + 8 +0 + 62 + 0 + 10 +22137.5 + 20 +9185.048095 + 30 +0.0 + 11 +22162.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +23E8 + 8 +0 + 62 + 0 + 10 +22212.5 + 20 +9185.048095 + 30 +0.0 + 11 +22237.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +23E9 + 8 +0 + 62 + 0 + 10 +22287.5 + 20 +9185.048095 + 30 +0.0 + 11 +22312.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +23EA + 8 +0 + 62 + 0 + 10 +22362.5 + 20 +9185.048095 + 30 +0.0 + 11 +22387.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +23EB + 8 +0 + 62 + 0 + 10 +22437.5 + 20 +9185.048095 + 30 +0.0 + 11 +22462.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +23EC + 8 +0 + 62 + 0 + 10 +22512.5 + 20 +9185.048095 + 30 +0.0 + 11 +22537.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +23ED + 8 +0 + 62 + 0 + 10 +22587.5 + 20 +9185.048095 + 30 +0.0 + 11 +22612.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +23EE + 8 +0 + 62 + 0 + 10 +22662.5 + 20 +9185.048095 + 30 +0.0 + 11 +22687.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +23EF + 8 +0 + 62 + 0 + 10 +22737.5 + 20 +9185.048095 + 30 +0.0 + 11 +22762.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +23F0 + 8 +0 + 62 + 0 + 10 +22812.5 + 20 +9185.048095 + 30 +0.0 + 11 +22837.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +23F1 + 8 +0 + 62 + 0 + 10 +22887.5 + 20 +9185.048095 + 30 +0.0 + 11 +22912.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +23F2 + 8 +0 + 62 + 0 + 10 +22962.5 + 20 +9185.048095 + 30 +0.0 + 11 +22987.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +23F3 + 8 +0 + 62 + 0 + 10 +23037.5 + 20 +9185.048095 + 30 +0.0 + 11 +23062.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +23F4 + 8 +0 + 62 + 0 + 10 +23112.5 + 20 +9185.048095 + 30 +0.0 + 11 +23137.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +23F5 + 8 +0 + 62 + 0 + 10 +23187.5 + 20 +9185.048095 + 30 +0.0 + 11 +23212.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +23F6 + 8 +0 + 62 + 0 + 10 +22549.999943 + 20 +9206.698697 + 30 +0.0 + 11 +22537.499943 + 21 +9228.349332 + 31 +0.0 + 0 +LINE + 5 +23F7 + 8 +0 + 62 + 0 + 10 +22546.187945 + 20 +9170.0 + 30 +0.0 + 11 +22537.499943 + 21 +9185.048062 + 31 +0.0 + 0 +LINE + 5 +23F8 + 8 +0 + 62 + 0 + 10 +22512.499943 + 20 +9228.349332 + 30 +0.0 + 11 +22499.999943 + 21 +9249.999967 + 31 +0.0 + 0 +LINE + 5 +23F9 + 8 +0 + 62 + 0 + 10 +22512.499943 + 20 +9185.048062 + 30 +0.0 + 11 +22499.999943 + 21 +9206.698697 + 31 +0.0 + 0 +LINE + 5 +23FA + 8 +0 + 62 + 0 + 10 +22474.999943 + 20 +9249.999967 + 30 +0.0 + 11 +22474.999924 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +23FB + 8 +0 + 62 + 0 + 10 +22474.999943 + 20 +9206.698697 + 30 +0.0 + 11 +22462.499943 + 21 +9228.349332 + 31 +0.0 + 0 +LINE + 5 +23FC + 8 +0 + 62 + 0 + 10 +22471.187945 + 20 +9170.0 + 30 +0.0 + 11 +22462.499943 + 21 +9185.048062 + 31 +0.0 + 0 +LINE + 5 +23FD + 8 +0 + 62 + 0 + 10 +22437.499943 + 20 +9228.349332 + 30 +0.0 + 11 +22424.999943 + 21 +9249.999967 + 31 +0.0 + 0 +LINE + 5 +23FE + 8 +0 + 62 + 0 + 10 +22437.499943 + 20 +9185.048062 + 30 +0.0 + 11 +22424.999943 + 21 +9206.698697 + 31 +0.0 + 0 +LINE + 5 +23FF + 8 +0 + 62 + 0 + 10 +22399.999943 + 20 +9249.999967 + 30 +0.0 + 11 +22399.999924 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2400 + 8 +0 + 62 + 0 + 10 +22399.999943 + 20 +9206.698697 + 30 +0.0 + 11 +22387.499943 + 21 +9228.349332 + 31 +0.0 + 0 +LINE + 5 +2401 + 8 +0 + 62 + 0 + 10 +22396.187946 + 20 +9170.0 + 30 +0.0 + 11 +22387.499943 + 21 +9185.048062 + 31 +0.0 + 0 +LINE + 5 +2402 + 8 +0 + 62 + 0 + 10 +22362.499943 + 20 +9228.349332 + 30 +0.0 + 11 +22349.999943 + 21 +9249.999967 + 31 +0.0 + 0 +LINE + 5 +2403 + 8 +0 + 62 + 0 + 10 +22362.499943 + 20 +9185.048062 + 30 +0.0 + 11 +22349.999943 + 21 +9206.698697 + 31 +0.0 + 0 +LINE + 5 +2404 + 8 +0 + 62 + 0 + 10 +22324.999943 + 20 +9249.999967 + 30 +0.0 + 11 +22324.999924 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2405 + 8 +0 + 62 + 0 + 10 +22324.999943 + 20 +9206.698697 + 30 +0.0 + 11 +22312.499943 + 21 +9228.349332 + 31 +0.0 + 0 +LINE + 5 +2406 + 8 +0 + 62 + 0 + 10 +22321.187946 + 20 +9170.0 + 30 +0.0 + 11 +22312.499943 + 21 +9185.048062 + 31 +0.0 + 0 +LINE + 5 +2407 + 8 +0 + 62 + 0 + 10 +22287.499943 + 20 +9228.349332 + 30 +0.0 + 11 +22274.999943 + 21 +9249.999967 + 31 +0.0 + 0 +LINE + 5 +2408 + 8 +0 + 62 + 0 + 10 +22287.499943 + 20 +9185.048062 + 30 +0.0 + 11 +22274.999943 + 21 +9206.698697 + 31 +0.0 + 0 +LINE + 5 +2409 + 8 +0 + 62 + 0 + 10 +22249.999943 + 20 +9249.999967 + 30 +0.0 + 11 +22249.999925 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +240A + 8 +0 + 62 + 0 + 10 +22249.999944 + 20 +9206.698697 + 30 +0.0 + 11 +22237.499944 + 21 +9228.349332 + 31 +0.0 + 0 +LINE + 5 +240B + 8 +0 + 62 + 0 + 10 +22246.187946 + 20 +9170.0 + 30 +0.0 + 11 +22237.499944 + 21 +9185.048062 + 31 +0.0 + 0 +LINE + 5 +240C + 8 +0 + 62 + 0 + 10 +22212.499944 + 20 +9228.349332 + 30 +0.0 + 11 +22199.999944 + 21 +9249.999967 + 31 +0.0 + 0 +LINE + 5 +240D + 8 +0 + 62 + 0 + 10 +22212.499944 + 20 +9185.048062 + 30 +0.0 + 11 +22199.999944 + 21 +9206.698697 + 31 +0.0 + 0 +LINE + 5 +240E + 8 +0 + 62 + 0 + 10 +22174.999944 + 20 +9249.999968 + 30 +0.0 + 11 +22174.999925 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +240F + 8 +0 + 62 + 0 + 10 +22174.999944 + 20 +9206.698697 + 30 +0.0 + 11 +22162.499944 + 21 +9228.349332 + 31 +0.0 + 0 +LINE + 5 +2410 + 8 +0 + 62 + 0 + 10 +22171.187947 + 20 +9170.0 + 30 +0.0 + 11 +22162.499944 + 21 +9185.048062 + 31 +0.0 + 0 +LINE + 5 +2411 + 8 +0 + 62 + 0 + 10 +22137.499944 + 20 +9228.349333 + 30 +0.0 + 11 +22124.999944 + 21 +9249.999968 + 31 +0.0 + 0 +LINE + 5 +2412 + 8 +0 + 62 + 0 + 10 +22137.499944 + 20 +9185.048062 + 30 +0.0 + 11 +22124.999944 + 21 +9206.698697 + 31 +0.0 + 0 +LINE + 5 +2413 + 8 +0 + 62 + 0 + 10 +22099.999944 + 20 +9249.999968 + 30 +0.0 + 11 +22099.999925 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2414 + 8 +0 + 62 + 0 + 10 +22099.999944 + 20 +9206.698698 + 30 +0.0 + 11 +22087.499944 + 21 +9228.349333 + 31 +0.0 + 0 +LINE + 5 +2415 + 8 +0 + 62 + 0 + 10 +22096.187947 + 20 +9170.0 + 30 +0.0 + 11 +22087.499944 + 21 +9185.048062 + 31 +0.0 + 0 +LINE + 5 +2416 + 8 +0 + 62 + 0 + 10 +22062.499944 + 20 +9228.349333 + 30 +0.0 + 11 +22049.999944 + 21 +9249.999968 + 31 +0.0 + 0 +LINE + 5 +2417 + 8 +0 + 62 + 0 + 10 +22062.499944 + 20 +9185.048063 + 30 +0.0 + 11 +22049.999944 + 21 +9206.698698 + 31 +0.0 + 0 +LINE + 5 +2418 + 8 +0 + 62 + 0 + 10 +22024.999944 + 20 +9249.999968 + 30 +0.0 + 11 +22024.999926 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2419 + 8 +0 + 62 + 0 + 10 +22024.999944 + 20 +9206.698698 + 30 +0.0 + 11 +22012.499944 + 21 +9228.349333 + 31 +0.0 + 0 +LINE + 5 +241A + 8 +0 + 62 + 0 + 10 +22021.187947 + 20 +9170.0 + 30 +0.0 + 11 +22012.499944 + 21 +9185.048063 + 31 +0.0 + 0 +LINE + 5 +241B + 8 +0 + 62 + 0 + 10 +21987.499944 + 20 +9228.349333 + 30 +0.0 + 11 +21974.999944 + 21 +9249.999968 + 31 +0.0 + 0 +LINE + 5 +241C + 8 +0 + 62 + 0 + 10 +21987.499944 + 20 +9185.048063 + 30 +0.0 + 11 +21974.999944 + 21 +9206.698698 + 31 +0.0 + 0 +LINE + 5 +241D + 8 +0 + 62 + 0 + 10 +21949.999944 + 20 +9249.999968 + 30 +0.0 + 11 +21949.999926 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +241E + 8 +0 + 62 + 0 + 10 +21949.999945 + 20 +9206.698698 + 30 +0.0 + 11 +21937.499945 + 21 +9228.349333 + 31 +0.0 + 0 +LINE + 5 +241F + 8 +0 + 62 + 0 + 10 +21946.187948 + 20 +9170.0 + 30 +0.0 + 11 +21937.499945 + 21 +9185.048063 + 31 +0.0 + 0 +LINE + 5 +2420 + 8 +0 + 62 + 0 + 10 +21912.499945 + 20 +9228.349333 + 30 +0.0 + 11 +21899.999945 + 21 +9249.999968 + 31 +0.0 + 0 +LINE + 5 +2421 + 8 +0 + 62 + 0 + 10 +21912.499945 + 20 +9185.048063 + 30 +0.0 + 11 +21899.999945 + 21 +9206.698698 + 31 +0.0 + 0 +LINE + 5 +2422 + 8 +0 + 62 + 0 + 10 +21874.999945 + 20 +9249.999968 + 30 +0.0 + 11 +21874.999926 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2423 + 8 +0 + 62 + 0 + 10 +21874.999945 + 20 +9206.698698 + 30 +0.0 + 11 +21863.75 + 21 +9226.184174 + 31 +0.0 + 0 +LINE + 5 +2424 + 8 +0 + 62 + 0 + 10 +21871.187948 + 20 +9170.0 + 30 +0.0 + 11 +21863.75 + 21 +9182.882904 + 31 +0.0 + 0 +LINE + 5 +2425 + 8 +0 + 62 + 0 + 10 +22587.499942 + 20 +9185.048062 + 30 +0.0 + 11 +22574.999942 + 21 +9206.698697 + 31 +0.0 + 0 +LINE + 5 +2426 + 8 +0 + 62 + 0 + 10 +22549.999942 + 20 +9249.999967 + 30 +0.0 + 11 +22549.999923 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2427 + 8 +0 + 62 + 0 + 10 +22621.187945 + 20 +9170.0 + 30 +0.0 + 11 +22612.499942 + 21 +9185.048061 + 31 +0.0 + 0 +LINE + 5 +2428 + 8 +0 + 62 + 0 + 10 +22587.499942 + 20 +9228.349332 + 30 +0.0 + 11 +22574.999942 + 21 +9249.999967 + 31 +0.0 + 0 +LINE + 5 +2429 + 8 +0 + 62 + 0 + 10 +22624.999942 + 20 +9206.698697 + 30 +0.0 + 11 +22612.499942 + 21 +9228.349332 + 31 +0.0 + 0 +LINE + 5 +242A + 8 +0 + 62 + 0 + 10 +22662.499942 + 20 +9185.048061 + 30 +0.0 + 11 +22649.999942 + 21 +9206.698696 + 31 +0.0 + 0 +LINE + 5 +242B + 8 +0 + 62 + 0 + 10 +22624.999942 + 20 +9249.999967 + 30 +0.0 + 11 +22624.999923 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +242C + 8 +0 + 62 + 0 + 10 +22696.187944 + 20 +9170.0 + 30 +0.0 + 11 +22687.499942 + 21 +9185.048061 + 31 +0.0 + 0 +LINE + 5 +242D + 8 +0 + 62 + 0 + 10 +22662.499942 + 20 +9228.349332 + 30 +0.0 + 11 +22649.999942 + 21 +9249.999967 + 31 +0.0 + 0 +LINE + 5 +242E + 8 +0 + 62 + 0 + 10 +22699.999942 + 20 +9206.698696 + 30 +0.0 + 11 +22687.499942 + 21 +9228.349331 + 31 +0.0 + 0 +LINE + 5 +242F + 8 +0 + 62 + 0 + 10 +22737.499942 + 20 +9185.048061 + 30 +0.0 + 11 +22724.999942 + 21 +9206.698696 + 31 +0.0 + 0 +LINE + 5 +2430 + 8 +0 + 62 + 0 + 10 +22699.999942 + 20 +9249.999967 + 30 +0.0 + 11 +22699.999923 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2431 + 8 +0 + 62 + 0 + 10 +22771.187944 + 20 +9170.0 + 30 +0.0 + 11 +22762.499942 + 21 +9185.048061 + 31 +0.0 + 0 +LINE + 5 +2432 + 8 +0 + 62 + 0 + 10 +22737.499942 + 20 +9228.349331 + 30 +0.0 + 11 +22724.999942 + 21 +9249.999966 + 31 +0.0 + 0 +LINE + 5 +2433 + 8 +0 + 62 + 0 + 10 +22774.999942 + 20 +9206.698696 + 30 +0.0 + 11 +22762.499942 + 21 +9228.349331 + 31 +0.0 + 0 +LINE + 5 +2434 + 8 +0 + 62 + 0 + 10 +22812.499942 + 20 +9185.048061 + 30 +0.0 + 11 +22799.999942 + 21 +9206.698696 + 31 +0.0 + 0 +LINE + 5 +2435 + 8 +0 + 62 + 0 + 10 +22774.999942 + 20 +9249.999966 + 30 +0.0 + 11 +22774.999922 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2436 + 8 +0 + 62 + 0 + 10 +22846.187944 + 20 +9170.0 + 30 +0.0 + 11 +22837.499942 + 21 +9185.048061 + 31 +0.0 + 0 +LINE + 5 +2437 + 8 +0 + 62 + 0 + 10 +22812.499942 + 20 +9228.349331 + 30 +0.0 + 11 +22799.999942 + 21 +9249.999966 + 31 +0.0 + 0 +LINE + 5 +2438 + 8 +0 + 62 + 0 + 10 +22849.999942 + 20 +9206.698696 + 30 +0.0 + 11 +22837.499942 + 21 +9228.349331 + 31 +0.0 + 0 +LINE + 5 +2439 + 8 +0 + 62 + 0 + 10 +22887.499941 + 20 +9185.048061 + 30 +0.0 + 11 +22874.999941 + 21 +9206.698696 + 31 +0.0 + 0 +LINE + 5 +243A + 8 +0 + 62 + 0 + 10 +22849.999941 + 20 +9249.999966 + 30 +0.0 + 11 +22849.999922 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +243B + 8 +0 + 62 + 0 + 10 +22921.187943 + 20 +9170.0 + 30 +0.0 + 11 +22912.499941 + 21 +9185.048061 + 31 +0.0 + 0 +LINE + 5 +243C + 8 +0 + 62 + 0 + 10 +22887.499941 + 20 +9228.349331 + 30 +0.0 + 11 +22874.999941 + 21 +9249.999966 + 31 +0.0 + 0 +LINE + 5 +243D + 8 +0 + 62 + 0 + 10 +22924.999941 + 20 +9206.698696 + 30 +0.0 + 11 +22912.499941 + 21 +9228.349331 + 31 +0.0 + 0 +LINE + 5 +243E + 8 +0 + 62 + 0 + 10 +22962.499941 + 20 +9185.048061 + 30 +0.0 + 11 +22949.999941 + 21 +9206.698696 + 31 +0.0 + 0 +LINE + 5 +243F + 8 +0 + 62 + 0 + 10 +22924.999941 + 20 +9249.999966 + 30 +0.0 + 11 +22924.999922 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2440 + 8 +0 + 62 + 0 + 10 +22996.187943 + 20 +9170.0 + 30 +0.0 + 11 +22987.499941 + 21 +9185.048061 + 31 +0.0 + 0 +LINE + 5 +2441 + 8 +0 + 62 + 0 + 10 +22962.499941 + 20 +9228.349331 + 30 +0.0 + 11 +22949.999941 + 21 +9249.999966 + 31 +0.0 + 0 +LINE + 5 +2442 + 8 +0 + 62 + 0 + 10 +22999.999941 + 20 +9206.698696 + 30 +0.0 + 11 +22987.499941 + 21 +9228.349331 + 31 +0.0 + 0 +LINE + 5 +2443 + 8 +0 + 62 + 0 + 10 +23037.499941 + 20 +9185.048061 + 30 +0.0 + 11 +23024.999941 + 21 +9206.698696 + 31 +0.0 + 0 +LINE + 5 +2444 + 8 +0 + 62 + 0 + 10 +22999.999941 + 20 +9249.999966 + 30 +0.0 + 11 +22999.999921 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2445 + 8 +0 + 62 + 0 + 10 +23071.187943 + 20 +9170.0 + 30 +0.0 + 11 +23062.499941 + 21 +9185.048061 + 31 +0.0 + 0 +LINE + 5 +2446 + 8 +0 + 62 + 0 + 10 +23037.499941 + 20 +9228.349331 + 30 +0.0 + 11 +23024.999941 + 21 +9249.999966 + 31 +0.0 + 0 +LINE + 5 +2447 + 8 +0 + 62 + 0 + 10 +23074.999941 + 20 +9206.698696 + 30 +0.0 + 11 +23062.499941 + 21 +9228.349331 + 31 +0.0 + 0 +LINE + 5 +2448 + 8 +0 + 62 + 0 + 10 +23112.499941 + 20 +9185.048061 + 30 +0.0 + 11 +23099.999941 + 21 +9206.698696 + 31 +0.0 + 0 +LINE + 5 +2449 + 8 +0 + 62 + 0 + 10 +23074.999941 + 20 +9249.999966 + 30 +0.0 + 11 +23074.999921 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +244A + 8 +0 + 62 + 0 + 10 +23146.187942 + 20 +9170.0 + 30 +0.0 + 11 +23137.499941 + 21 +9185.04806 + 31 +0.0 + 0 +LINE + 5 +244B + 8 +0 + 62 + 0 + 10 +23112.499941 + 20 +9228.349331 + 30 +0.0 + 11 +23099.999941 + 21 +9249.999966 + 31 +0.0 + 0 +LINE + 5 +244C + 8 +0 + 62 + 0 + 10 +23149.999941 + 20 +9206.698696 + 30 +0.0 + 11 +23137.499941 + 21 +9228.349331 + 31 +0.0 + 0 +LINE + 5 +244D + 8 +0 + 62 + 0 + 10 +23187.499941 + 20 +9185.04806 + 30 +0.0 + 11 +23174.999941 + 21 +9206.698695 + 31 +0.0 + 0 +LINE + 5 +244E + 8 +0 + 62 + 0 + 10 +23149.999941 + 20 +9249.999966 + 30 +0.0 + 11 +23149.999921 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +244F + 8 +0 + 62 + 0 + 10 +23221.187942 + 20 +9170.0 + 30 +0.0 + 11 +23212.49994 + 21 +9185.04806 + 31 +0.0 + 0 +LINE + 5 +2450 + 8 +0 + 62 + 0 + 10 +23187.49994 + 20 +9228.349331 + 30 +0.0 + 11 +23174.99994 + 21 +9249.999966 + 31 +0.0 + 0 +LINE + 5 +2451 + 8 +0 + 62 + 0 + 10 +23224.99994 + 20 +9206.698695 + 30 +0.0 + 11 +23212.49994 + 21 +9228.34933 + 31 +0.0 + 0 +LINE + 5 +2452 + 8 +0 + 62 + 0 + 10 +23251.25 + 20 +9204.533528 + 30 +0.0 + 11 +23249.99994 + 21 +9206.698695 + 31 +0.0 + 0 +LINE + 5 +2453 + 8 +0 + 62 + 0 + 10 +23224.99994 + 20 +9249.999966 + 30 +0.0 + 11 +23224.99992 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2454 + 8 +0 + 62 + 0 + 10 +23251.25 + 20 +9247.834798 + 30 +0.0 + 11 +23249.99994 + 21 +9249.999965 + 31 +0.0 + 0 +LINE + 5 +2455 + 8 +0 + 62 + 0 + 10 +22537.499942 + 20 +9185.048128 + 30 +0.0 + 11 +22549.999942 + 21 +9206.698763 + 31 +0.0 + 0 +LINE + 5 +2456 + 8 +0 + 62 + 0 + 10 +22503.811902 + 20 +9170.0 + 30 +0.0 + 11 +22512.499942 + 21 +9185.048128 + 31 +0.0 + 0 +LINE + 5 +2457 + 8 +0 + 62 + 0 + 10 +22537.499942 + 20 +9228.349398 + 30 +0.0 + 11 +22549.999923 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2458 + 8 +0 + 62 + 0 + 10 +22499.999943 + 20 +9206.698763 + 30 +0.0 + 11 +22512.499943 + 21 +9228.349398 + 31 +0.0 + 0 +LINE + 5 +2459 + 8 +0 + 62 + 0 + 10 +22462.499943 + 20 +9185.048128 + 30 +0.0 + 11 +22474.999943 + 21 +9206.698763 + 31 +0.0 + 0 +LINE + 5 +245A + 8 +0 + 62 + 0 + 10 +22428.811902 + 20 +9170.0 + 30 +0.0 + 11 +22437.499943 + 21 +9185.048128 + 31 +0.0 + 0 +LINE + 5 +245B + 8 +0 + 62 + 0 + 10 +22462.499943 + 20 +9228.349398 + 30 +0.0 + 11 +22474.999924 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +245C + 8 +0 + 62 + 0 + 10 +22424.999943 + 20 +9206.698763 + 30 +0.0 + 11 +22437.499943 + 21 +9228.349398 + 31 +0.0 + 0 +LINE + 5 +245D + 8 +0 + 62 + 0 + 10 +22387.499943 + 20 +9185.048128 + 30 +0.0 + 11 +22399.999943 + 21 +9206.698763 + 31 +0.0 + 0 +LINE + 5 +245E + 8 +0 + 62 + 0 + 10 +22353.811902 + 20 +9170.0 + 30 +0.0 + 11 +22362.499943 + 21 +9185.048128 + 31 +0.0 + 0 +LINE + 5 +245F + 8 +0 + 62 + 0 + 10 +22387.499943 + 20 +9228.349398 + 30 +0.0 + 11 +22399.999924 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2460 + 8 +0 + 62 + 0 + 10 +22349.999943 + 20 +9206.698763 + 30 +0.0 + 11 +22362.499943 + 21 +9228.349398 + 31 +0.0 + 0 +LINE + 5 +2461 + 8 +0 + 62 + 0 + 10 +22312.499943 + 20 +9185.048128 + 30 +0.0 + 11 +22324.999943 + 21 +9206.698763 + 31 +0.0 + 0 +LINE + 5 +2462 + 8 +0 + 62 + 0 + 10 +22278.811903 + 20 +9170.0 + 30 +0.0 + 11 +22287.499943 + 21 +9185.048127 + 31 +0.0 + 0 +LINE + 5 +2463 + 8 +0 + 62 + 0 + 10 +22312.499943 + 20 +9228.349398 + 30 +0.0 + 11 +22324.999924 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2464 + 8 +0 + 62 + 0 + 10 +22274.999943 + 20 +9206.698763 + 30 +0.0 + 11 +22287.499943 + 21 +9228.349398 + 31 +0.0 + 0 +LINE + 5 +2465 + 8 +0 + 62 + 0 + 10 +22237.499943 + 20 +9185.048127 + 30 +0.0 + 11 +22249.999943 + 21 +9206.698762 + 31 +0.0 + 0 +LINE + 5 +2466 + 8 +0 + 62 + 0 + 10 +22203.811903 + 20 +9170.0 + 30 +0.0 + 11 +22212.499943 + 21 +9185.048127 + 31 +0.0 + 0 +LINE + 5 +2467 + 8 +0 + 62 + 0 + 10 +22237.499943 + 20 +9228.349398 + 30 +0.0 + 11 +22249.999925 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2468 + 8 +0 + 62 + 0 + 10 +22199.999944 + 20 +9206.698762 + 30 +0.0 + 11 +22212.499944 + 21 +9228.349397 + 31 +0.0 + 0 +LINE + 5 +2469 + 8 +0 + 62 + 0 + 10 +22162.499944 + 20 +9185.048127 + 30 +0.0 + 11 +22174.999944 + 21 +9206.698762 + 31 +0.0 + 0 +LINE + 5 +246A + 8 +0 + 62 + 0 + 10 +22128.811903 + 20 +9170.0 + 30 +0.0 + 11 +22137.499944 + 21 +9185.048127 + 31 +0.0 + 0 +LINE + 5 +246B + 8 +0 + 62 + 0 + 10 +22162.499944 + 20 +9228.349397 + 30 +0.0 + 11 +22174.999925 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +246C + 8 +0 + 62 + 0 + 10 +22124.999944 + 20 +9206.698762 + 30 +0.0 + 11 +22137.499944 + 21 +9228.349397 + 31 +0.0 + 0 +LINE + 5 +246D + 8 +0 + 62 + 0 + 10 +22087.499944 + 20 +9185.048127 + 30 +0.0 + 11 +22099.999944 + 21 +9206.698762 + 31 +0.0 + 0 +LINE + 5 +246E + 8 +0 + 62 + 0 + 10 +22053.811904 + 20 +9170.0 + 30 +0.0 + 11 +22062.499944 + 21 +9185.048127 + 31 +0.0 + 0 +LINE + 5 +246F + 8 +0 + 62 + 0 + 10 +22087.499944 + 20 +9228.349397 + 30 +0.0 + 11 +22099.999925 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2470 + 8 +0 + 62 + 0 + 10 +22049.999944 + 20 +9206.698762 + 30 +0.0 + 11 +22062.499944 + 21 +9228.349397 + 31 +0.0 + 0 +LINE + 5 +2471 + 8 +0 + 62 + 0 + 10 +22012.499944 + 20 +9185.048127 + 30 +0.0 + 11 +22024.999944 + 21 +9206.698762 + 31 +0.0 + 0 +LINE + 5 +2472 + 8 +0 + 62 + 0 + 10 +21978.811904 + 20 +9170.0 + 30 +0.0 + 11 +21987.499944 + 21 +9185.048127 + 31 +0.0 + 0 +LINE + 5 +2473 + 8 +0 + 62 + 0 + 10 +22012.499944 + 20 +9228.349397 + 30 +0.0 + 11 +22024.999926 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2474 + 8 +0 + 62 + 0 + 10 +21974.999944 + 20 +9206.698762 + 30 +0.0 + 11 +21987.499944 + 21 +9228.349397 + 31 +0.0 + 0 +LINE + 5 +2475 + 8 +0 + 62 + 0 + 10 +21937.499944 + 20 +9185.048127 + 30 +0.0 + 11 +21949.999944 + 21 +9206.698762 + 31 +0.0 + 0 +LINE + 5 +2476 + 8 +0 + 62 + 0 + 10 +21903.811904 + 20 +9170.0 + 30 +0.0 + 11 +21912.499944 + 21 +9185.048127 + 31 +0.0 + 0 +LINE + 5 +2477 + 8 +0 + 62 + 0 + 10 +21937.499944 + 20 +9228.349397 + 30 +0.0 + 11 +21949.999926 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2478 + 8 +0 + 62 + 0 + 10 +21899.999945 + 20 +9206.698762 + 30 +0.0 + 11 +21912.499945 + 21 +9228.349397 + 31 +0.0 + 0 +LINE + 5 +2479 + 8 +0 + 62 + 0 + 10 +21863.75 + 20 +9187.213286 + 30 +0.0 + 11 +21874.999945 + 21 +9206.698762 + 31 +0.0 + 0 +LINE + 5 +247A + 8 +0 + 62 + 0 + 10 +21863.75 + 20 +9230.514556 + 30 +0.0 + 11 +21874.999926 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +247B + 8 +0 + 62 + 0 + 10 +22574.999942 + 20 +9206.698763 + 30 +0.0 + 11 +22587.499942 + 21 +9228.349398 + 31 +0.0 + 0 +LINE + 5 +247C + 8 +0 + 62 + 0 + 10 +22578.811901 + 20 +9170.0 + 30 +0.0 + 11 +22587.499942 + 21 +9185.048128 + 31 +0.0 + 0 +LINE + 5 +247D + 8 +0 + 62 + 0 + 10 +22612.499942 + 20 +9228.349398 + 30 +0.0 + 11 +22624.999923 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +247E + 8 +0 + 62 + 0 + 10 +22612.499942 + 20 +9185.048128 + 30 +0.0 + 11 +22624.999942 + 21 +9206.698763 + 31 +0.0 + 0 +LINE + 5 +247F + 8 +0 + 62 + 0 + 10 +22649.999942 + 20 +9206.698763 + 30 +0.0 + 11 +22662.499942 + 21 +9228.349398 + 31 +0.0 + 0 +LINE + 5 +2480 + 8 +0 + 62 + 0 + 10 +22653.811901 + 20 +9170.0 + 30 +0.0 + 11 +22662.499942 + 21 +9185.048128 + 31 +0.0 + 0 +LINE + 5 +2481 + 8 +0 + 62 + 0 + 10 +22687.499942 + 20 +9228.349398 + 30 +0.0 + 11 +22699.999923 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2482 + 8 +0 + 62 + 0 + 10 +22687.499942 + 20 +9185.048128 + 30 +0.0 + 11 +22699.999942 + 21 +9206.698763 + 31 +0.0 + 0 +LINE + 5 +2483 + 8 +0 + 62 + 0 + 10 +22724.999942 + 20 +9206.698763 + 30 +0.0 + 11 +22737.499942 + 21 +9228.349398 + 31 +0.0 + 0 +LINE + 5 +2484 + 8 +0 + 62 + 0 + 10 +22728.811901 + 20 +9170.0 + 30 +0.0 + 11 +22737.499942 + 21 +9185.048128 + 31 +0.0 + 0 +LINE + 5 +2485 + 8 +0 + 62 + 0 + 10 +22762.499942 + 20 +9228.349399 + 30 +0.0 + 11 +22774.999922 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2486 + 8 +0 + 62 + 0 + 10 +22762.499942 + 20 +9185.048128 + 30 +0.0 + 11 +22774.999942 + 21 +9206.698763 + 31 +0.0 + 0 +LINE + 5 +2487 + 8 +0 + 62 + 0 + 10 +22799.999942 + 20 +9206.698764 + 30 +0.0 + 11 +22812.499942 + 21 +9228.349399 + 31 +0.0 + 0 +LINE + 5 +2488 + 8 +0 + 62 + 0 + 10 +22803.8119 + 20 +9170.0 + 30 +0.0 + 11 +22812.499941 + 21 +9185.048128 + 31 +0.0 + 0 +LINE + 5 +2489 + 8 +0 + 62 + 0 + 10 +22837.499941 + 20 +9228.349399 + 30 +0.0 + 11 +22849.999922 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +248A + 8 +0 + 62 + 0 + 10 +22837.499941 + 20 +9185.048129 + 30 +0.0 + 11 +22849.999941 + 21 +9206.698764 + 31 +0.0 + 0 +LINE + 5 +248B + 8 +0 + 62 + 0 + 10 +22874.999941 + 20 +9206.698764 + 30 +0.0 + 11 +22887.499941 + 21 +9228.349399 + 31 +0.0 + 0 +LINE + 5 +248C + 8 +0 + 62 + 0 + 10 +22878.8119 + 20 +9170.0 + 30 +0.0 + 11 +22887.499941 + 21 +9185.048129 + 31 +0.0 + 0 +LINE + 5 +248D + 8 +0 + 62 + 0 + 10 +22912.499941 + 20 +9228.349399 + 30 +0.0 + 11 +22924.999922 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +248E + 8 +0 + 62 + 0 + 10 +22912.499941 + 20 +9185.048129 + 30 +0.0 + 11 +22924.999941 + 21 +9206.698764 + 31 +0.0 + 0 +LINE + 5 +248F + 8 +0 + 62 + 0 + 10 +22949.999941 + 20 +9206.698764 + 30 +0.0 + 11 +22962.499941 + 21 +9228.349399 + 31 +0.0 + 0 +LINE + 5 +2490 + 8 +0 + 62 + 0 + 10 +22953.8119 + 20 +9170.0 + 30 +0.0 + 11 +22962.499941 + 21 +9185.048129 + 31 +0.0 + 0 +LINE + 5 +2491 + 8 +0 + 62 + 0 + 10 +22987.499941 + 20 +9228.349399 + 30 +0.0 + 11 +22999.999921 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2492 + 8 +0 + 62 + 0 + 10 +22987.499941 + 20 +9185.048129 + 30 +0.0 + 11 +22999.999941 + 21 +9206.698764 + 31 +0.0 + 0 +LINE + 5 +2493 + 8 +0 + 62 + 0 + 10 +23024.999941 + 20 +9206.698764 + 30 +0.0 + 11 +23037.499941 + 21 +9228.349399 + 31 +0.0 + 0 +LINE + 5 +2494 + 8 +0 + 62 + 0 + 10 +23028.811899 + 20 +9170.0 + 30 +0.0 + 11 +23037.499941 + 21 +9185.048129 + 31 +0.0 + 0 +LINE + 5 +2495 + 8 +0 + 62 + 0 + 10 +23062.499941 + 20 +9228.349399 + 30 +0.0 + 11 +23074.999921 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2496 + 8 +0 + 62 + 0 + 10 +23062.499941 + 20 +9185.048129 + 30 +0.0 + 11 +23074.999941 + 21 +9206.698764 + 31 +0.0 + 0 +LINE + 5 +2497 + 8 +0 + 62 + 0 + 10 +23099.999941 + 20 +9206.698764 + 30 +0.0 + 11 +23112.499941 + 21 +9228.349399 + 31 +0.0 + 0 +LINE + 5 +2498 + 8 +0 + 62 + 0 + 10 +23103.811899 + 20 +9170.0 + 30 +0.0 + 11 +23112.499941 + 21 +9185.048129 + 31 +0.0 + 0 +LINE + 5 +2499 + 8 +0 + 62 + 0 + 10 +23137.499941 + 20 +9228.349399 + 30 +0.0 + 11 +23149.999921 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +249A + 8 +0 + 62 + 0 + 10 +23137.49994 + 20 +9185.048129 + 30 +0.0 + 11 +23149.99994 + 21 +9206.698764 + 31 +0.0 + 0 +LINE + 5 +249B + 8 +0 + 62 + 0 + 10 +23174.99994 + 20 +9206.698764 + 30 +0.0 + 11 +23187.49994 + 21 +9228.349399 + 31 +0.0 + 0 +LINE + 5 +249C + 8 +0 + 62 + 0 + 10 +23178.811899 + 20 +9170.0 + 30 +0.0 + 11 +23187.49994 + 21 +9185.048129 + 31 +0.0 + 0 +LINE + 5 +249D + 8 +0 + 62 + 0 + 10 +23212.49994 + 20 +9228.349399 + 30 +0.0 + 11 +23224.99992 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +249E + 8 +0 + 62 + 0 + 10 +23212.49994 + 20 +9185.048129 + 30 +0.0 + 11 +23224.99994 + 21 +9206.698764 + 31 +0.0 + 0 +LINE + 5 +249F + 8 +0 + 62 + 0 + 10 +23249.99994 + 20 +9206.698764 + 30 +0.0 + 11 +23251.25 + 21 +9208.863932 + 31 +0.0 + 0 +ENDBLK + 5 +24A0 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X53 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X53 + 1 + + 0 +LINE + 5 +24A2 + 8 +0 + 62 + 0 + 10 +20412.5 + 20 +9228.349365 + 30 +0.0 + 11 +20437.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +24A3 + 8 +0 + 62 + 0 + 10 +20487.5 + 20 +9228.349365 + 30 +0.0 + 11 +20512.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +24A4 + 8 +0 + 62 + 0 + 10 +20562.5 + 20 +9228.349365 + 30 +0.0 + 11 +20587.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +24A5 + 8 +0 + 62 + 0 + 10 +20637.5 + 20 +9228.349365 + 30 +0.0 + 11 +20662.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +24A6 + 8 +0 + 62 + 0 + 10 +20712.5 + 20 +9228.349365 + 30 +0.0 + 11 +20737.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +24A7 + 8 +0 + 62 + 0 + 10 +20787.5 + 20 +9228.349365 + 30 +0.0 + 11 +20812.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +24A8 + 8 +0 + 62 + 0 + 10 +20862.5 + 20 +9228.349365 + 30 +0.0 + 11 +20887.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +24A9 + 8 +0 + 62 + 0 + 10 +20937.5 + 20 +9228.349365 + 30 +0.0 + 11 +20962.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +24AA + 8 +0 + 62 + 0 + 10 +21012.5 + 20 +9228.349365 + 30 +0.0 + 11 +21037.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +24AB + 8 +0 + 62 + 0 + 10 +21087.5 + 20 +9228.349365 + 30 +0.0 + 11 +21112.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +24AC + 8 +0 + 62 + 0 + 10 +21162.5 + 20 +9228.349365 + 30 +0.0 + 11 +21187.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +24AD + 8 +0 + 62 + 0 + 10 +21237.5 + 20 +9228.349365 + 30 +0.0 + 11 +21262.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +24AE + 8 +0 + 62 + 0 + 10 +21312.5 + 20 +9228.349365 + 30 +0.0 + 11 +21337.5 + 21 +9228.349365 + 31 +0.0 + 0 +LINE + 5 +24AF + 8 +0 + 62 + 0 + 10 +20375.0 + 20 +9206.69873 + 30 +0.0 + 11 +20400.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +24B0 + 8 +0 + 62 + 0 + 10 +20450.0 + 20 +9206.69873 + 30 +0.0 + 11 +20475.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +24B1 + 8 +0 + 62 + 0 + 10 +20525.0 + 20 +9206.69873 + 30 +0.0 + 11 +20550.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +24B2 + 8 +0 + 62 + 0 + 10 +20600.0 + 20 +9206.69873 + 30 +0.0 + 11 +20625.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +24B3 + 8 +0 + 62 + 0 + 10 +20675.0 + 20 +9206.69873 + 30 +0.0 + 11 +20700.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +24B4 + 8 +0 + 62 + 0 + 10 +20750.0 + 20 +9206.69873 + 30 +0.0 + 11 +20775.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +24B5 + 8 +0 + 62 + 0 + 10 +20825.0 + 20 +9206.69873 + 30 +0.0 + 11 +20850.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +24B6 + 8 +0 + 62 + 0 + 10 +20900.0 + 20 +9206.69873 + 30 +0.0 + 11 +20925.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +24B7 + 8 +0 + 62 + 0 + 10 +20975.0 + 20 +9206.69873 + 30 +0.0 + 11 +21000.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +24B8 + 8 +0 + 62 + 0 + 10 +21050.0 + 20 +9206.69873 + 30 +0.0 + 11 +21075.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +24B9 + 8 +0 + 62 + 0 + 10 +21125.0 + 20 +9206.69873 + 30 +0.0 + 11 +21150.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +24BA + 8 +0 + 62 + 0 + 10 +21200.0 + 20 +9206.69873 + 30 +0.0 + 11 +21225.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +24BB + 8 +0 + 62 + 0 + 10 +21275.0 + 20 +9206.69873 + 30 +0.0 + 11 +21300.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +24BC + 8 +0 + 62 + 0 + 10 +21350.0 + 20 +9206.69873 + 30 +0.0 + 11 +21375.0 + 21 +9206.69873 + 31 +0.0 + 0 +LINE + 5 +24BD + 8 +0 + 62 + 0 + 10 +20412.5 + 20 +9185.048095 + 30 +0.0 + 11 +20437.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +24BE + 8 +0 + 62 + 0 + 10 +20487.5 + 20 +9185.048095 + 30 +0.0 + 11 +20512.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +24BF + 8 +0 + 62 + 0 + 10 +20562.5 + 20 +9185.048095 + 30 +0.0 + 11 +20587.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +24C0 + 8 +0 + 62 + 0 + 10 +20637.5 + 20 +9185.048095 + 30 +0.0 + 11 +20662.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +24C1 + 8 +0 + 62 + 0 + 10 +20712.5 + 20 +9185.048095 + 30 +0.0 + 11 +20737.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +24C2 + 8 +0 + 62 + 0 + 10 +20787.5 + 20 +9185.048095 + 30 +0.0 + 11 +20812.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +24C3 + 8 +0 + 62 + 0 + 10 +20862.5 + 20 +9185.048095 + 30 +0.0 + 11 +20887.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +24C4 + 8 +0 + 62 + 0 + 10 +20937.5 + 20 +9185.048095 + 30 +0.0 + 11 +20962.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +24C5 + 8 +0 + 62 + 0 + 10 +21012.5 + 20 +9185.048095 + 30 +0.0 + 11 +21037.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +24C6 + 8 +0 + 62 + 0 + 10 +21087.5 + 20 +9185.048095 + 30 +0.0 + 11 +21112.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +24C7 + 8 +0 + 62 + 0 + 10 +21162.5 + 20 +9185.048095 + 30 +0.0 + 11 +21187.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +24C8 + 8 +0 + 62 + 0 + 10 +21237.5 + 20 +9185.048095 + 30 +0.0 + 11 +21262.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +24C9 + 8 +0 + 62 + 0 + 10 +21312.5 + 20 +9185.048095 + 30 +0.0 + 11 +21337.5 + 21 +9185.048095 + 31 +0.0 + 0 +LINE + 5 +24CA + 8 +0 + 62 + 0 + 10 +20862.499948 + 20 +9185.048065 + 30 +0.0 + 11 +20849.999948 + 21 +9206.6987 + 31 +0.0 + 0 +LINE + 5 +24CB + 8 +0 + 62 + 0 + 10 +20824.999948 + 20 +9249.99997 + 30 +0.0 + 11 +20824.999931 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +24CC + 8 +0 + 62 + 0 + 10 +20824.999948 + 20 +9206.6987 + 30 +0.0 + 11 +20812.499948 + 21 +9228.349335 + 31 +0.0 + 0 +LINE + 5 +24CD + 8 +0 + 62 + 0 + 10 +20821.187953 + 20 +9170.0 + 30 +0.0 + 11 +20812.499948 + 21 +9185.048065 + 31 +0.0 + 0 +LINE + 5 +24CE + 8 +0 + 62 + 0 + 10 +20787.499948 + 20 +9228.349335 + 30 +0.0 + 11 +20774.999948 + 21 +9249.99997 + 31 +0.0 + 0 +LINE + 5 +24CF + 8 +0 + 62 + 0 + 10 +20787.499948 + 20 +9185.048065 + 30 +0.0 + 11 +20774.999948 + 21 +9206.6987 + 31 +0.0 + 0 +LINE + 5 +24D0 + 8 +0 + 62 + 0 + 10 +20749.999948 + 20 +9249.99997 + 30 +0.0 + 11 +20749.999931 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +24D1 + 8 +0 + 62 + 0 + 10 +20749.999948 + 20 +9206.6987 + 30 +0.0 + 11 +20737.499948 + 21 +9228.349335 + 31 +0.0 + 0 +LINE + 5 +24D2 + 8 +0 + 62 + 0 + 10 +20746.187953 + 20 +9170.0 + 30 +0.0 + 11 +20737.499949 + 21 +9185.048065 + 31 +0.0 + 0 +LINE + 5 +24D3 + 8 +0 + 62 + 0 + 10 +20712.499949 + 20 +9228.349335 + 30 +0.0 + 11 +20699.999949 + 21 +9249.99997 + 31 +0.0 + 0 +LINE + 5 +24D4 + 8 +0 + 62 + 0 + 10 +20712.499949 + 20 +9185.048065 + 30 +0.0 + 11 +20699.999949 + 21 +9206.6987 + 31 +0.0 + 0 +LINE + 5 +24D5 + 8 +0 + 62 + 0 + 10 +20674.999949 + 20 +9249.99997 + 30 +0.0 + 11 +20674.999932 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +24D6 + 8 +0 + 62 + 0 + 10 +20674.999949 + 20 +9206.6987 + 30 +0.0 + 11 +20662.499949 + 21 +9228.349335 + 31 +0.0 + 0 +LINE + 5 +24D7 + 8 +0 + 62 + 0 + 10 +20671.187953 + 20 +9170.0 + 30 +0.0 + 11 +20662.499949 + 21 +9185.048065 + 31 +0.0 + 0 +LINE + 5 +24D8 + 8 +0 + 62 + 0 + 10 +20637.499949 + 20 +9228.349335 + 30 +0.0 + 11 +20624.999949 + 21 +9249.99997 + 31 +0.0 + 0 +LINE + 5 +24D9 + 8 +0 + 62 + 0 + 10 +20637.499949 + 20 +9185.048065 + 30 +0.0 + 11 +20624.999949 + 21 +9206.6987 + 31 +0.0 + 0 +LINE + 5 +24DA + 8 +0 + 62 + 0 + 10 +20599.999949 + 20 +9249.99997 + 30 +0.0 + 11 +20599.999932 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +24DB + 8 +0 + 62 + 0 + 10 +20599.999949 + 20 +9206.6987 + 30 +0.0 + 11 +20587.499949 + 21 +9228.349335 + 31 +0.0 + 0 +LINE + 5 +24DC + 8 +0 + 62 + 0 + 10 +20596.187954 + 20 +9170.0 + 30 +0.0 + 11 +20587.499949 + 21 +9185.048065 + 31 +0.0 + 0 +LINE + 5 +24DD + 8 +0 + 62 + 0 + 10 +20562.499949 + 20 +9228.349335 + 30 +0.0 + 11 +20549.999949 + 21 +9249.999971 + 31 +0.0 + 0 +LINE + 5 +24DE + 8 +0 + 62 + 0 + 10 +20562.499949 + 20 +9185.048065 + 30 +0.0 + 11 +20549.999949 + 21 +9206.6987 + 31 +0.0 + 0 +LINE + 5 +24DF + 8 +0 + 62 + 0 + 10 +20524.999949 + 20 +9249.999971 + 30 +0.0 + 11 +20524.999932 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +24E0 + 8 +0 + 62 + 0 + 10 +20524.999949 + 20 +9206.6987 + 30 +0.0 + 11 +20512.499949 + 21 +9228.349336 + 31 +0.0 + 0 +LINE + 5 +24E1 + 8 +0 + 62 + 0 + 10 +20521.187954 + 20 +9170.0 + 30 +0.0 + 11 +20512.499949 + 21 +9185.048065 + 31 +0.0 + 0 +LINE + 5 +24E2 + 8 +0 + 62 + 0 + 10 +20487.499949 + 20 +9228.349336 + 30 +0.0 + 11 +20474.999949 + 21 +9249.999971 + 31 +0.0 + 0 +LINE + 5 +24E3 + 8 +0 + 62 + 0 + 10 +20487.499949 + 20 +9185.048065 + 30 +0.0 + 11 +20474.999949 + 21 +9206.698701 + 31 +0.0 + 0 +LINE + 5 +24E4 + 8 +0 + 62 + 0 + 10 +20449.999949 + 20 +9249.999971 + 30 +0.0 + 11 +20449.999932 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +24E5 + 8 +0 + 62 + 0 + 10 +20449.999949 + 20 +9206.698701 + 30 +0.0 + 11 +20437.499949 + 21 +9228.349336 + 31 +0.0 + 0 +LINE + 5 +24E6 + 8 +0 + 62 + 0 + 10 +20446.187954 + 20 +9170.0 + 30 +0.0 + 11 +20437.49995 + 21 +9185.048066 + 31 +0.0 + 0 +LINE + 5 +24E7 + 8 +0 + 62 + 0 + 10 +20412.49995 + 20 +9228.349336 + 30 +0.0 + 11 +20399.99995 + 21 +9249.999971 + 31 +0.0 + 0 +LINE + 5 +24E8 + 8 +0 + 62 + 0 + 10 +20412.49995 + 20 +9185.048066 + 30 +0.0 + 11 +20399.99995 + 21 +9206.698701 + 31 +0.0 + 0 +LINE + 5 +24E9 + 8 +0 + 62 + 0 + 10 +20374.99995 + 20 +9249.999971 + 30 +0.0 + 11 +20374.999933 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +24EA + 8 +0 + 62 + 0 + 10 +20374.99995 + 20 +9206.698701 + 30 +0.0 + 11 +20363.75 + 21 +9226.184185 + 31 +0.0 + 0 +LINE + 5 +24EB + 8 +0 + 62 + 0 + 10 +20371.187955 + 20 +9170.0 + 30 +0.0 + 11 +20363.75 + 21 +9182.882915 + 31 +0.0 + 0 +LINE + 5 +24EC + 8 +0 + 62 + 0 + 10 +20896.187952 + 20 +9170.0 + 30 +0.0 + 11 +20887.499948 + 21 +9185.048065 + 31 +0.0 + 0 +LINE + 5 +24ED + 8 +0 + 62 + 0 + 10 +20862.499948 + 20 +9228.349335 + 30 +0.0 + 11 +20849.999948 + 21 +9249.99997 + 31 +0.0 + 0 +LINE + 5 +24EE + 8 +0 + 62 + 0 + 10 +20899.999948 + 20 +9206.6987 + 30 +0.0 + 11 +20887.499948 + 21 +9228.349335 + 31 +0.0 + 0 +LINE + 5 +24EF + 8 +0 + 62 + 0 + 10 +20937.499948 + 20 +9185.048065 + 30 +0.0 + 11 +20924.999948 + 21 +9206.6987 + 31 +0.0 + 0 +LINE + 5 +24F0 + 8 +0 + 62 + 0 + 10 +20899.999948 + 20 +9249.99997 + 30 +0.0 + 11 +20899.999931 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +24F1 + 8 +0 + 62 + 0 + 10 +20971.187952 + 20 +9170.0 + 30 +0.0 + 11 +20962.499948 + 21 +9185.048065 + 31 +0.0 + 0 +LINE + 5 +24F2 + 8 +0 + 62 + 0 + 10 +20937.499948 + 20 +9228.349335 + 30 +0.0 + 11 +20924.999948 + 21 +9249.99997 + 31 +0.0 + 0 +LINE + 5 +24F3 + 8 +0 + 62 + 0 + 10 +20974.999948 + 20 +9206.6987 + 30 +0.0 + 11 +20962.499948 + 21 +9228.349335 + 31 +0.0 + 0 +LINE + 5 +24F4 + 8 +0 + 62 + 0 + 10 +21012.499948 + 20 +9185.048064 + 30 +0.0 + 11 +20999.999948 + 21 +9206.6987 + 31 +0.0 + 0 +LINE + 5 +24F5 + 8 +0 + 62 + 0 + 10 +20974.999948 + 20 +9249.99997 + 30 +0.0 + 11 +20974.99993 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +24F6 + 8 +0 + 62 + 0 + 10 +21046.187952 + 20 +9170.0 + 30 +0.0 + 11 +21037.499948 + 21 +9185.048064 + 31 +0.0 + 0 +LINE + 5 +24F7 + 8 +0 + 62 + 0 + 10 +21012.499948 + 20 +9228.349335 + 30 +0.0 + 11 +20999.999948 + 21 +9249.99997 + 31 +0.0 + 0 +LINE + 5 +24F8 + 8 +0 + 62 + 0 + 10 +21049.999947 + 20 +9206.698699 + 30 +0.0 + 11 +21037.499947 + 21 +9228.349335 + 31 +0.0 + 0 +LINE + 5 +24F9 + 8 +0 + 62 + 0 + 10 +21087.499947 + 20 +9185.048064 + 30 +0.0 + 11 +21074.999947 + 21 +9206.698699 + 31 +0.0 + 0 +LINE + 5 +24FA + 8 +0 + 62 + 0 + 10 +21049.999947 + 20 +9249.99997 + 30 +0.0 + 11 +21049.99993 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +24FB + 8 +0 + 62 + 0 + 10 +21121.187951 + 20 +9170.0 + 30 +0.0 + 11 +21112.499947 + 21 +9185.048064 + 31 +0.0 + 0 +LINE + 5 +24FC + 8 +0 + 62 + 0 + 10 +21087.499947 + 20 +9228.349334 + 30 +0.0 + 11 +21074.999947 + 21 +9249.99997 + 31 +0.0 + 0 +LINE + 5 +24FD + 8 +0 + 62 + 0 + 10 +21124.999947 + 20 +9206.698699 + 30 +0.0 + 11 +21112.499947 + 21 +9228.349334 + 31 +0.0 + 0 +LINE + 5 +24FE + 8 +0 + 62 + 0 + 10 +21162.499947 + 20 +9185.048064 + 30 +0.0 + 11 +21149.999947 + 21 +9206.698699 + 31 +0.0 + 0 +LINE + 5 +24FF + 8 +0 + 62 + 0 + 10 +21124.999947 + 20 +9249.999969 + 30 +0.0 + 11 +21124.99993 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2500 + 8 +0 + 62 + 0 + 10 +21196.187951 + 20 +9170.0 + 30 +0.0 + 11 +21187.499947 + 21 +9185.048064 + 31 +0.0 + 0 +LINE + 5 +2501 + 8 +0 + 62 + 0 + 10 +21162.499947 + 20 +9228.349334 + 30 +0.0 + 11 +21149.999947 + 21 +9249.999969 + 31 +0.0 + 0 +LINE + 5 +2502 + 8 +0 + 62 + 0 + 10 +21199.999947 + 20 +9206.698699 + 30 +0.0 + 11 +21187.499947 + 21 +9228.349334 + 31 +0.0 + 0 +LINE + 5 +2503 + 8 +0 + 62 + 0 + 10 +21237.499947 + 20 +9185.048064 + 30 +0.0 + 11 +21224.999947 + 21 +9206.698699 + 31 +0.0 + 0 +LINE + 5 +2504 + 8 +0 + 62 + 0 + 10 +21199.999947 + 20 +9249.999969 + 30 +0.0 + 11 +21199.999929 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2505 + 8 +0 + 62 + 0 + 10 +21271.187951 + 20 +9170.0 + 30 +0.0 + 11 +21262.499947 + 21 +9185.048064 + 31 +0.0 + 0 +LINE + 5 +2506 + 8 +0 + 62 + 0 + 10 +21237.499947 + 20 +9228.349334 + 30 +0.0 + 11 +21224.999947 + 21 +9249.999969 + 31 +0.0 + 0 +LINE + 5 +2507 + 8 +0 + 62 + 0 + 10 +21274.999947 + 20 +9206.698699 + 30 +0.0 + 11 +21262.499947 + 21 +9228.349334 + 31 +0.0 + 0 +LINE + 5 +2508 + 8 +0 + 62 + 0 + 10 +21312.499947 + 20 +9185.048064 + 30 +0.0 + 11 +21299.999947 + 21 +9206.698699 + 31 +0.0 + 0 +LINE + 5 +2509 + 8 +0 + 62 + 0 + 10 +21274.999947 + 20 +9249.999969 + 30 +0.0 + 11 +21274.999929 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +250A + 8 +0 + 62 + 0 + 10 +21346.18795 + 20 +9170.0 + 30 +0.0 + 11 +21337.499947 + 21 +9185.048064 + 31 +0.0 + 0 +LINE + 5 +250B + 8 +0 + 62 + 0 + 10 +21312.499947 + 20 +9228.349334 + 30 +0.0 + 11 +21299.999947 + 21 +9249.999969 + 31 +0.0 + 0 +LINE + 5 +250C + 8 +0 + 62 + 0 + 10 +21349.999946 + 20 +9206.698699 + 30 +0.0 + 11 +21337.499946 + 21 +9228.349334 + 31 +0.0 + 0 +LINE + 5 +250D + 8 +0 + 62 + 0 + 10 +21376.25 + 20 +9204.533543 + 30 +0.0 + 11 +21374.999946 + 21 +9206.698699 + 31 +0.0 + 0 +LINE + 5 +250E + 8 +0 + 62 + 0 + 10 +21349.999946 + 20 +9249.999969 + 30 +0.0 + 11 +21349.999929 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +250F + 8 +0 + 62 + 0 + 10 +21376.25 + 20 +9247.834813 + 30 +0.0 + 11 +21374.999946 + 21 +9249.999969 + 31 +0.0 + 0 +LINE + 5 +2510 + 8 +0 + 62 + 0 + 10 +20849.999948 + 20 +9206.69876 + 30 +0.0 + 11 +20862.499948 + 21 +9228.349395 + 31 +0.0 + 0 +LINE + 5 +2511 + 8 +0 + 62 + 0 + 10 +20812.499948 + 20 +9185.048125 + 30 +0.0 + 11 +20824.999948 + 21 +9206.69876 + 31 +0.0 + 0 +LINE + 5 +2512 + 8 +0 + 62 + 0 + 10 +20778.811909 + 20 +9170.0 + 30 +0.0 + 11 +20787.499948 + 21 +9185.048125 + 31 +0.0 + 0 +LINE + 5 +2513 + 8 +0 + 62 + 0 + 10 +20812.499948 + 20 +9228.349395 + 30 +0.0 + 11 +20824.999931 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2514 + 8 +0 + 62 + 0 + 10 +20774.999948 + 20 +9206.69876 + 30 +0.0 + 11 +20787.499948 + 21 +9228.349395 + 31 +0.0 + 0 +LINE + 5 +2515 + 8 +0 + 62 + 0 + 10 +20737.499948 + 20 +9185.048125 + 30 +0.0 + 11 +20749.999948 + 21 +9206.69876 + 31 +0.0 + 0 +LINE + 5 +2516 + 8 +0 + 62 + 0 + 10 +20703.81191 + 20 +9170.0 + 30 +0.0 + 11 +20712.499948 + 21 +9185.048125 + 31 +0.0 + 0 +LINE + 5 +2517 + 8 +0 + 62 + 0 + 10 +20737.499948 + 20 +9228.349395 + 30 +0.0 + 11 +20749.999931 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2518 + 8 +0 + 62 + 0 + 10 +20699.999948 + 20 +9206.69876 + 30 +0.0 + 11 +20712.499948 + 21 +9228.349395 + 31 +0.0 + 0 +LINE + 5 +2519 + 8 +0 + 62 + 0 + 10 +20662.499949 + 20 +9185.048124 + 30 +0.0 + 11 +20674.999949 + 21 +9206.69876 + 31 +0.0 + 0 +LINE + 5 +251A + 8 +0 + 62 + 0 + 10 +20628.81191 + 20 +9170.0 + 30 +0.0 + 11 +20637.499949 + 21 +9185.048124 + 31 +0.0 + 0 +LINE + 5 +251B + 8 +0 + 62 + 0 + 10 +20662.499949 + 20 +9228.349395 + 30 +0.0 + 11 +20674.999932 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +251C + 8 +0 + 62 + 0 + 10 +20624.999949 + 20 +9206.698759 + 30 +0.0 + 11 +20637.499949 + 21 +9228.349395 + 31 +0.0 + 0 +LINE + 5 +251D + 8 +0 + 62 + 0 + 10 +20587.499949 + 20 +9185.048124 + 30 +0.0 + 11 +20599.999949 + 21 +9206.698759 + 31 +0.0 + 0 +LINE + 5 +251E + 8 +0 + 62 + 0 + 10 +20553.81191 + 20 +9170.0 + 30 +0.0 + 11 +20562.499949 + 21 +9185.048124 + 31 +0.0 + 0 +LINE + 5 +251F + 8 +0 + 62 + 0 + 10 +20587.499949 + 20 +9228.349394 + 30 +0.0 + 11 +20599.999932 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2520 + 8 +0 + 62 + 0 + 10 +20549.999949 + 20 +9206.698759 + 30 +0.0 + 11 +20562.499949 + 21 +9228.349394 + 31 +0.0 + 0 +LINE + 5 +2521 + 8 +0 + 62 + 0 + 10 +20512.499949 + 20 +9185.048124 + 30 +0.0 + 11 +20524.999949 + 21 +9206.698759 + 31 +0.0 + 0 +LINE + 5 +2522 + 8 +0 + 62 + 0 + 10 +20478.811911 + 20 +9170.0 + 30 +0.0 + 11 +20487.499949 + 21 +9185.048124 + 31 +0.0 + 0 +LINE + 5 +2523 + 8 +0 + 62 + 0 + 10 +20512.499949 + 20 +9228.349394 + 30 +0.0 + 11 +20524.999932 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2524 + 8 +0 + 62 + 0 + 10 +20474.999949 + 20 +9206.698759 + 30 +0.0 + 11 +20487.499949 + 21 +9228.349394 + 31 +0.0 + 0 +LINE + 5 +2525 + 8 +0 + 62 + 0 + 10 +20437.499949 + 20 +9185.048124 + 30 +0.0 + 11 +20449.999949 + 21 +9206.698759 + 31 +0.0 + 0 +LINE + 5 +2526 + 8 +0 + 62 + 0 + 10 +20403.811911 + 20 +9170.0 + 30 +0.0 + 11 +20412.499949 + 21 +9185.048124 + 31 +0.0 + 0 +LINE + 5 +2527 + 8 +0 + 62 + 0 + 10 +20437.499949 + 20 +9228.349394 + 30 +0.0 + 11 +20449.999932 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2528 + 8 +0 + 62 + 0 + 10 +20399.999949 + 20 +9206.698759 + 30 +0.0 + 11 +20412.499949 + 21 +9228.349394 + 31 +0.0 + 0 +LINE + 5 +2529 + 8 +0 + 62 + 0 + 10 +20363.75 + 20 +9187.213275 + 30 +0.0 + 11 +20374.99995 + 21 +9206.698759 + 31 +0.0 + 0 +LINE + 5 +252A + 8 +0 + 62 + 0 + 10 +20363.75 + 20 +9230.514545 + 30 +0.0 + 11 +20374.999933 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +252B + 8 +0 + 62 + 0 + 10 +20853.811909 + 20 +9170.0 + 30 +0.0 + 11 +20862.499948 + 21 +9185.048125 + 31 +0.0 + 0 +LINE + 5 +252C + 8 +0 + 62 + 0 + 10 +20887.499948 + 20 +9228.349395 + 30 +0.0 + 11 +20899.999931 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +252D + 8 +0 + 62 + 0 + 10 +20887.499948 + 20 +9185.048125 + 30 +0.0 + 11 +20899.999948 + 21 +9206.69876 + 31 +0.0 + 0 +LINE + 5 +252E + 8 +0 + 62 + 0 + 10 +20924.999948 + 20 +9206.69876 + 30 +0.0 + 11 +20937.499948 + 21 +9228.349395 + 31 +0.0 + 0 +LINE + 5 +252F + 8 +0 + 62 + 0 + 10 +20928.811909 + 20 +9170.0 + 30 +0.0 + 11 +20937.499948 + 21 +9185.048125 + 31 +0.0 + 0 +LINE + 5 +2530 + 8 +0 + 62 + 0 + 10 +20962.499948 + 20 +9228.349395 + 30 +0.0 + 11 +20974.99993 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2531 + 8 +0 + 62 + 0 + 10 +20962.499948 + 20 +9185.048125 + 30 +0.0 + 11 +20974.999948 + 21 +9206.69876 + 31 +0.0 + 0 +LINE + 5 +2532 + 8 +0 + 62 + 0 + 10 +20999.999947 + 20 +9206.69876 + 30 +0.0 + 11 +21012.499947 + 21 +9228.349395 + 31 +0.0 + 0 +LINE + 5 +2533 + 8 +0 + 62 + 0 + 10 +21003.811908 + 20 +9170.0 + 30 +0.0 + 11 +21012.499947 + 21 +9185.048125 + 31 +0.0 + 0 +LINE + 5 +2534 + 8 +0 + 62 + 0 + 10 +21037.499947 + 20 +9228.349395 + 30 +0.0 + 11 +21049.99993 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2535 + 8 +0 + 62 + 0 + 10 +21037.499947 + 20 +9185.048125 + 30 +0.0 + 11 +21049.999947 + 21 +9206.69876 + 31 +0.0 + 0 +LINE + 5 +2536 + 8 +0 + 62 + 0 + 10 +21074.999947 + 20 +9206.69876 + 30 +0.0 + 11 +21087.499947 + 21 +9228.349395 + 31 +0.0 + 0 +LINE + 5 +2537 + 8 +0 + 62 + 0 + 10 +21078.811908 + 20 +9170.0 + 30 +0.0 + 11 +21087.499947 + 21 +9185.048125 + 31 +0.0 + 0 +LINE + 5 +2538 + 8 +0 + 62 + 0 + 10 +21112.499947 + 20 +9228.349395 + 30 +0.0 + 11 +21124.99993 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2539 + 8 +0 + 62 + 0 + 10 +21112.499947 + 20 +9185.048125 + 30 +0.0 + 11 +21124.999947 + 21 +9206.69876 + 31 +0.0 + 0 +LINE + 5 +253A + 8 +0 + 62 + 0 + 10 +21149.999947 + 20 +9206.69876 + 30 +0.0 + 11 +21162.499947 + 21 +9228.349396 + 31 +0.0 + 0 +LINE + 5 +253B + 8 +0 + 62 + 0 + 10 +21153.811908 + 20 +9170.0 + 30 +0.0 + 11 +21162.499947 + 21 +9185.048125 + 31 +0.0 + 0 +LINE + 5 +253C + 8 +0 + 62 + 0 + 10 +21187.499947 + 20 +9228.349396 + 30 +0.0 + 11 +21199.999929 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +253D + 8 +0 + 62 + 0 + 10 +21187.499947 + 20 +9185.048125 + 30 +0.0 + 11 +21199.999947 + 21 +9206.698761 + 31 +0.0 + 0 +LINE + 5 +253E + 8 +0 + 62 + 0 + 10 +21224.999947 + 20 +9206.698761 + 30 +0.0 + 11 +21237.499947 + 21 +9228.349396 + 31 +0.0 + 0 +LINE + 5 +253F + 8 +0 + 62 + 0 + 10 +21228.811907 + 20 +9170.0 + 30 +0.0 + 11 +21237.499947 + 21 +9185.048126 + 31 +0.0 + 0 +LINE + 5 +2540 + 8 +0 + 62 + 0 + 10 +21262.499947 + 20 +9228.349396 + 30 +0.0 + 11 +21274.999929 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2541 + 8 +0 + 62 + 0 + 10 +21262.499947 + 20 +9185.048126 + 30 +0.0 + 11 +21274.999947 + 21 +9206.698761 + 31 +0.0 + 0 +LINE + 5 +2542 + 8 +0 + 62 + 0 + 10 +21299.999946 + 20 +9206.698761 + 30 +0.0 + 11 +21312.499946 + 21 +9228.349396 + 31 +0.0 + 0 +LINE + 5 +2543 + 8 +0 + 62 + 0 + 10 +21303.811907 + 20 +9170.0 + 30 +0.0 + 11 +21312.499946 + 21 +9185.048126 + 31 +0.0 + 0 +LINE + 5 +2544 + 8 +0 + 62 + 0 + 10 +21337.499946 + 20 +9228.349396 + 30 +0.0 + 11 +21349.999929 + 21 +9250.0 + 31 +0.0 + 0 +LINE + 5 +2545 + 8 +0 + 62 + 0 + 10 +21337.499946 + 20 +9185.048126 + 30 +0.0 + 11 +21349.999946 + 21 +9206.698761 + 31 +0.0 + 0 +LINE + 5 +2546 + 8 +0 + 62 + 0 + 10 +21374.999946 + 20 +9206.698761 + 30 +0.0 + 11 +21376.25 + 21 +9208.863917 + 31 +0.0 + 0 +ENDBLK + 5 +2547 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +MASSHILFSLINIE + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +MASSHILFSLINIE + 1 + + 0 +POLYLINE + 5 +2549 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +34A9 + 8 +0 + 10 +-150.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +34AA + 8 +0 + 10 +150.0 + 20 +0.0 + 30 +0.0 + 0 +SEQEND + 5 +34AB + 8 +0 + 0 +POLYLINE + 5 +254D + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +34AC + 8 +0 + 10 +0.0 + 20 +-350.0 + 30 +0.0 + 0 +VERTEX + 5 +34AD + 8 +0 + 10 +0.0 + 20 +350.0 + 30 +0.0 + 0 +SEQEND + 5 +34AE + 8 +0 + 0 +POLYLINE + 5 +2551 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +34AF + 8 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +34B0 + 8 +0 + 10 +53.033009 + 20 +53.033009 + 30 +0.0 + 0 +SEQEND + 5 +34B1 + 8 +0 + 0 +POLYLINE + 5 +2555 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +34B2 + 8 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +34B3 + 8 +0 + 10 +-53.033009 + 20 +-53.033009 + 30 +0.0 + 0 +SEQEND + 5 +34B4 + 8 +0 + 0 +ENDBLK + 5 +2559 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D55 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D55 + 1 + + 0 +LINE + 5 +255B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9746.0 + 20 +11975.0 + 30 +0.0 + 11 +12614.0 + 21 +11975.0 + 31 +0.0 + 0 +INSERT + 5 +255C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9745.0 + 20 +11975.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +255D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +12615.0 + 20 +11975.0 + 30 +0.0 + 0 +TEXT + 5 +255E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +10983.125 + 20 +12062.5 + 30 +0.0 + 40 +175.0 + 1 +2.87 + 41 +0.75 + 72 + 1 + 11 +11180.0 + 21 +12150.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2560 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9745.0 + 20 +12370.0 + 30 +0.0 + 0 +POINT + 5 +2561 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +12615.0 + 20 +12370.0 + 30 +0.0 + 0 +POINT + 5 +2562 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +12615.0 + 20 +11975.0 + 30 +0.0 + 0 +ENDBLK + 5 +2563 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D56 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D56 + 1 + + 0 +LINE + 5 +2565 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +13881.0 + 20 +11975.0 + 30 +0.0 + 11 +14119.0 + 21 +11975.0 + 31 +0.0 + 0 +INSERT + 5 +2566 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +13880.0 + 20 +11975.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2567 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +14120.0 + 20 +11975.0 + 30 +0.0 + 0 +TEXT + 5 +2568 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +13890.625 + 20 +12062.5 + 30 +0.0 + 40 +175.0 + 1 +25 + 41 +0.75 + 72 + 1 + 11 +14000.0 + 21 +12150.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2569 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +13880.0 + 20 +11955.0 + 30 +0.0 + 0 +POINT + 5 +256A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +14120.0 + 20 +11975.0 + 30 +0.0 + 0 +POINT + 5 +256B + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +14120.0 + 20 +11975.0 + 30 +0.0 + 0 +ENDBLK + 5 +256C + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D57 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D57 + 1 + + 0 +LINE + 5 +256E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +5371.0 + 20 +16165.0 + 30 +0.0 + 11 +7619.0 + 21 +16165.0 + 31 +0.0 + 0 +INSERT + 5 +256F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +5370.0 + 20 +16165.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2570 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +7620.0 + 20 +16165.0 + 30 +0.0 + 0 +TEXT + 5 +2571 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +6298.125 + 20 +16252.5 + 30 +0.0 + 40 +175.0 + 1 +2.25 + 41 +0.75 + 72 + 1 + 11 +6495.0 + 21 +16340.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2572 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5370.0 + 20 +16875.0 + 30 +0.0 + 0 +POINT + 5 +2573 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7620.0 + 20 +16875.0 + 30 +0.0 + 0 +POINT + 5 +2574 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7620.0 + 20 +16165.0 + 30 +0.0 + 0 +ENDBLK + 5 +2575 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D58 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D58 + 1 + + 0 +LINE + 5 +2577 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +7619.0 + 20 +16165.0 + 30 +0.0 + 11 +7618.0 + 21 +16165.0 + 31 +0.0 + 0 +LINE + 5 +2578 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +7741.0 + 20 +16165.0 + 30 +0.0 + 11 +7742.0 + 21 +16165.0 + 31 +0.0 + 0 +LINE + 5 +2579 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +7742.0 + 20 +16165.0 + 30 +0.0 + 11 +7917.0 + 21 +16165.0 + 31 +0.0 + 0 +INSERT + 5 +257A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +7620.0 + 20 +16165.0 + 30 +0.0 + 0 +INSERT + 5 +257B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +7740.0 + 20 +16165.0 + 30 +0.0 + 50 +180.0 + 0 +TEXT + 5 +257C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +7742.0 + 20 +16252.5 + 30 +0.0 + 40 +175.0 + 1 +12 + 41 +0.75 + 72 + 1 + 11 +7829.5 + 21 +16340.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +257D + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7620.0 + 20 +16875.0 + 30 +0.0 + 0 +POINT + 5 +257E + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7740.0 + 20 +16195.0 + 30 +0.0 + 0 +POINT + 5 +257F + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7740.0 + 20 +16165.0 + 30 +0.0 + 0 +ENDBLK + 5 +2580 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D59 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D59 + 1 + + 0 +LINE + 5 +2582 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +3500.0 + 20 +14616.0 + 30 +0.0 + 11 +3500.0 + 21 +16124.0 + 31 +0.0 + 0 +INSERT + 5 +2583 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +3500.0 + 20 +14615.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +2584 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +3500.0 + 20 +16125.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +2585 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +3412.5 + 20 +15216.875 + 30 +0.0 + 40 +175.0 + 1 +1.51 + 50 +90.0 + 41 +0.75 + 72 + 1 + 11 +3325.0 + 21 +15370.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2586 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5000.0 + 20 +14615.0 + 30 +0.0 + 0 +POINT + 5 +2587 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5000.0 + 20 +16125.0 + 30 +0.0 + 0 +POINT + 5 +2588 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +3500.0 + 20 +16125.0 + 30 +0.0 + 0 +ENDBLK + 5 +2589 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D60 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D60 + 1 + + 0 +LINE + 5 +258B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +3500.0 + 20 +16126.0 + 30 +0.0 + 11 +3500.0 + 21 +18239.0 + 31 +0.0 + 0 +INSERT + 5 +258C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +3500.0 + 20 +16125.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +258D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +3500.0 + 20 +18240.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +258E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +3412.5 + 20 +17029.375 + 30 +0.0 + 40 +175.0 + 1 +2.11 + 50 +90.0 + 41 +0.75 + 72 + 1 + 11 +3325.0 + 21 +17182.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +258F + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5000.0 + 20 +16125.0 + 30 +0.0 + 0 +POINT + 5 +2590 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5000.0 + 20 +18240.0 + 30 +0.0 + 0 +POINT + 5 +2591 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +3500.0 + 20 +18240.0 + 30 +0.0 + 0 +ENDBLK + 5 +2592 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D61 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D61 + 1 + + 0 +LINE + 5 +2594 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +3500.0 + 20 +18241.0 + 30 +0.0 + 11 +3500.0 + 21 +19374.0 + 31 +0.0 + 0 +INSERT + 5 +2595 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +3500.0 + 20 +18240.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +2596 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +3500.0 + 20 +19375.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +2597 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +3412.5 + 20 +18654.375 + 30 +0.0 + 40 +175.0 + 1 +1.13 + 50 +90.0 + 41 +0.75 + 72 + 1 + 11 +3325.0 + 21 +18807.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2598 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5000.0 + 20 +18240.0 + 30 +0.0 + 0 +POINT + 5 +2599 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5000.0 + 20 +19375.0 + 30 +0.0 + 0 +POINT + 5 +259A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +3500.0 + 20 +19375.0 + 30 +0.0 + 0 +ENDBLK + 5 +259B + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D62 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D62 + 1 + + 0 +LINE + 5 +259D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +3500.0 + 20 +19376.0 + 30 +0.0 + 11 +3500.0 + 21 +22114.0 + 31 +0.0 + 0 +INSERT + 5 +259E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +3500.0 + 20 +19375.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +259F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +3500.0 + 20 +22115.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +25A0 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +3412.5 + 20 +20548.125 + 30 +0.0 + 40 +175.0 + 1 +2.74 + 50 +90.0 + 41 +0.75 + 72 + 1 + 11 +3325.0 + 21 +20745.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +25A1 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5000.0 + 20 +19375.0 + 30 +0.0 + 0 +POINT + 5 +25A2 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5000.0 + 20 +22115.0 + 30 +0.0 + 0 +POINT + 5 +25A3 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +3500.0 + 20 +22115.0 + 30 +0.0 + 0 +ENDBLK + 5 +25A4 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D63 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D63 + 1 + + 0 +LINE + 5 +25A6 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +3500.0 + 20 +9251.0 + 30 +0.0 + 11 +3500.0 + 21 +14614.0 + 31 +0.0 + 0 +INSERT + 5 +25A7 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +3500.0 + 20 +9250.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +25A8 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +3500.0 + 20 +14615.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +25A9 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +3412.5 + 20 +11735.625 + 30 +0.0 + 40 +175.0 + 1 +5.36 + 50 +90.0 + 41 +0.75 + 72 + 1 + 11 +3325.0 + 21 +11932.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +25AA + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5000.0 + 20 +9250.0 + 30 +0.0 + 0 +POINT + 5 +25AB + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5000.0 + 20 +14615.0 + 30 +0.0 + 0 +POINT + 5 +25AC + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +3500.0 + 20 +14615.0 + 30 +0.0 + 0 +ENDBLK + 5 +25AD + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D64 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D64 + 1 + + 0 +LINE + 5 +25AF + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +5366.0 + 20 +18105.0 + 30 +0.0 + 11 +8114.0 + 21 +18105.0 + 31 +0.0 + 0 +INSERT + 5 +25B0 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +5365.0 + 20 +18105.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +25B1 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +8115.0 + 20 +18105.0 + 30 +0.0 + 0 +TEXT + 5 +25B2 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +6543.125 + 20 +18192.5 + 30 +0.0 + 40 +175.0 + 1 +2.75 + 41 +0.75 + 72 + 1 + 11 +6740.0 + 21 +18280.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +25B3 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5365.0 + 20 +17255.0 + 30 +0.0 + 0 +POINT + 5 +25B4 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8115.0 + 20 +17255.0 + 30 +0.0 + 0 +POINT + 5 +25B5 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8115.0 + 20 +18105.0 + 30 +0.0 + 0 +ENDBLK + 5 +25B6 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D65 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D65 + 1 + + 0 +LINE + 5 +25B8 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +8116.0 + 20 +18105.0 + 30 +0.0 + 11 +9004.0 + 21 +18105.0 + 31 +0.0 + 0 +INSERT + 5 +25B9 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +8115.0 + 20 +18105.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +25BA + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9005.0 + 20 +18105.0 + 30 +0.0 + 0 +TEXT + 5 +25BB + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +8450.625 + 20 +18192.5 + 30 +0.0 + 40 +175.0 + 1 +88 + 41 +0.75 + 72 + 1 + 11 +8560.0 + 21 +18280.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +25BC + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8115.0 + 20 +17255.0 + 30 +0.0 + 0 +POINT + 5 +25BD + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9005.0 + 20 +17185.0 + 30 +0.0 + 0 +POINT + 5 +25BE + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9005.0 + 20 +18105.0 + 30 +0.0 + 0 +ENDBLK + 5 +25BF + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D66 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D66 + 1 + + 0 +LINE + 5 +25C1 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9006.0 + 20 +18105.0 + 30 +0.0 + 11 +9749.0 + 21 +18105.0 + 31 +0.0 + 0 +INSERT + 5 +25C2 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9005.0 + 20 +18105.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +25C3 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9750.0 + 20 +18105.0 + 30 +0.0 + 0 +TEXT + 5 +25C4 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9268.125 + 20 +18192.5 + 30 +0.0 + 40 +175.0 + 1 +75 + 41 +0.75 + 72 + 1 + 11 +9377.5 + 21 +18280.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +25C5 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9005.0 + 20 +17185.0 + 30 +0.0 + 0 +POINT + 5 +25C6 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9750.0 + 20 +18100.0 + 30 +0.0 + 0 +POINT + 5 +25C7 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9750.0 + 20 +18105.0 + 30 +0.0 + 0 +ENDBLK + 5 +25C8 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D67 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D67 + 1 + + 0 +LINE + 5 +25CA + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +5001.0 + 20 +26015.0 + 30 +0.0 + 11 +26739.0 + 21 +26015.0 + 31 +0.0 + 0 +INSERT + 5 +25CB + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +5000.0 + 20 +26015.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +25CC + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +26740.0 + 20 +26015.0 + 30 +0.0 + 0 +TEXT + 5 +25CD + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +15629.375 + 20 +26102.5 + 30 +0.0 + 40 +175.0 + 1 +21.74 + 41 +0.75 + 72 + 1 + 11 +15870.0 + 21 +26190.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +25CE + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5000.0 + 20 +22115.0 + 30 +0.0 + 0 +POINT + 5 +25CF + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26740.0 + 20 +22115.0 + 30 +0.0 + 0 +POINT + 5 +25D0 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26740.0 + 20 +26015.0 + 30 +0.0 + 0 +ENDBLK + 5 +25D1 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D68 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D68 + 1 + + 0 +LINE + 5 +25D3 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +5366.0 + 20 +25315.0 + 30 +0.0 + 11 +9749.0 + 21 +25315.0 + 31 +0.0 + 0 +INSERT + 5 +25D4 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +5365.0 + 20 +25315.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +25D5 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9750.0 + 20 +25315.0 + 30 +0.0 + 0 +TEXT + 5 +25D6 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +7360.625 + 20 +25402.5 + 30 +0.0 + 40 +175.0 + 1 +4.38 + 41 +0.75 + 72 + 1 + 11 +7557.5 + 21 +25490.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +25D7 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5365.0 + 20 +22115.0 + 30 +0.0 + 0 +POINT + 5 +25D8 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9750.0 + 20 +21740.0 + 30 +0.0 + 0 +POINT + 5 +25D9 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9750.0 + 20 +25315.0 + 30 +0.0 + 0 +ENDBLK + 5 +25DA + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D69 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D69 + 1 + + 0 +LINE + 5 +25DC + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +5001.0 + 20 +25315.0 + 30 +0.0 + 11 +5364.0 + 21 +25315.0 + 31 +0.0 + 0 +INSERT + 5 +25DD + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +5000.0 + 20 +25315.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +25DE + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +5365.0 + 20 +25315.0 + 30 +0.0 + 0 +TEXT + 5 +25DF + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +5073.125 + 20 +25402.5 + 30 +0.0 + 40 +175.0 + 1 +36 + 41 +0.75 + 72 + 1 + 11 +5182.5 + 21 +25490.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +25E0 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5000.0 + 20 +22115.0 + 30 +0.0 + 0 +POINT + 5 +25E1 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5365.0 + 20 +22115.0 + 30 +0.0 + 0 +POINT + 5 +25E2 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5365.0 + 20 +25315.0 + 30 +0.0 + 0 +ENDBLK + 5 +25E3 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D70 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D70 + 1 + + 0 +LINE + 5 +25E5 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +10111.0 + 20 +25315.0 + 30 +0.0 + 11 +14874.0 + 21 +25315.0 + 31 +0.0 + 0 +INSERT + 5 +25E6 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +10110.0 + 20 +25315.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +25E7 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +14875.0 + 20 +25315.0 + 30 +0.0 + 0 +TEXT + 5 +25E8 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +12295.625 + 20 +25402.5 + 30 +0.0 + 40 +175.0 + 1 +4.76 + 41 +0.75 + 72 + 1 + 11 +12492.5 + 21 +25490.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +25E9 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +10110.0 + 20 +21745.0 + 30 +0.0 + 0 +POINT + 5 +25EA + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +14875.0 + 20 +21735.0 + 30 +0.0 + 0 +POINT + 5 +25EB + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +14875.0 + 20 +25315.0 + 30 +0.0 + 0 +ENDBLK + 5 +25EC + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D71 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D71 + 1 + + 0 +LINE + 5 +25EE + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9751.0 + 20 +25315.0 + 30 +0.0 + 11 +10109.0 + 21 +25315.0 + 31 +0.0 + 0 +INSERT + 5 +25EF + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9750.0 + 20 +25315.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +25F0 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +10110.0 + 20 +25315.0 + 30 +0.0 + 0 +TEXT + 5 +25F1 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9820.625 + 20 +25402.5 + 30 +0.0 + 40 +175.0 + 1 +36 + 41 +0.75 + 72 + 1 + 11 +9930.0 + 21 +25490.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +25F2 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9750.0 + 20 +21740.0 + 30 +0.0 + 0 +POINT + 5 +25F3 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +10110.0 + 20 +21745.0 + 30 +0.0 + 0 +POINT + 5 +25F4 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +10110.0 + 20 +25315.0 + 30 +0.0 + 0 +ENDBLK + 5 +25F5 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D72 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D72 + 1 + + 0 +LINE + 5 +25F7 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +14876.0 + 20 +25315.0 + 30 +0.0 + 11 +15239.0 + 21 +25315.0 + 31 +0.0 + 0 +INSERT + 5 +25F8 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +14875.0 + 20 +25315.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +25F9 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +15240.0 + 20 +25315.0 + 30 +0.0 + 0 +TEXT + 5 +25FA + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +14948.125 + 20 +25402.5 + 30 +0.0 + 40 +175.0 + 1 +36 + 41 +0.75 + 72 + 1 + 11 +15057.5 + 21 +25490.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +25FB + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +14875.0 + 20 +21735.0 + 30 +0.0 + 0 +POINT + 5 +25FC + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15240.0 + 20 +21750.0 + 30 +0.0 + 0 +POINT + 5 +25FD + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15240.0 + 20 +25315.0 + 30 +0.0 + 0 +ENDBLK + 5 +25FE + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D73 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D73 + 1 + + 0 +LINE + 5 +2600 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +15241.0 + 20 +25315.0 + 30 +0.0 + 11 +17614.0 + 21 +25315.0 + 31 +0.0 + 0 +INSERT + 5 +2601 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +15240.0 + 20 +25315.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2602 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +17615.0 + 20 +25315.0 + 30 +0.0 + 0 +TEXT + 5 +2603 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +16230.625 + 20 +25402.5 + 30 +0.0 + 40 +175.0 + 1 +2.38 + 41 +0.75 + 72 + 1 + 11 +16427.5 + 21 +25490.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2604 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15240.0 + 20 +21750.0 + 30 +0.0 + 0 +POINT + 5 +2605 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17615.0 + 20 +21735.0 + 30 +0.0 + 0 +POINT + 5 +2606 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17615.0 + 20 +25315.0 + 30 +0.0 + 0 +ENDBLK + 5 +2607 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D74 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D74 + 1 + + 0 +LINE + 5 +2609 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +17616.0 + 20 +25315.0 + 30 +0.0 + 11 +17994.0 + 21 +25315.0 + 31 +0.0 + 0 +INSERT + 5 +260A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +17615.0 + 20 +25315.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +260B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +17995.0 + 20 +25315.0 + 30 +0.0 + 0 +TEXT + 5 +260C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +17695.625 + 20 +25402.5 + 30 +0.0 + 40 +175.0 + 1 +36 + 41 +0.75 + 72 + 1 + 11 +17805.0 + 21 +25490.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +260D + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17615.0 + 20 +21735.0 + 30 +0.0 + 0 +POINT + 5 +260E + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17995.0 + 20 +21745.0 + 30 +0.0 + 0 +POINT + 5 +260F + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17995.0 + 20 +25315.0 + 30 +0.0 + 0 +ENDBLK + 5 +2610 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D75 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D75 + 1 + + 0 +LINE + 5 +2612 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +17996.0 + 20 +25315.0 + 30 +0.0 + 11 +22499.0 + 21 +25315.0 + 31 +0.0 + 0 +INSERT + 5 +2613 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +17995.0 + 20 +25315.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2614 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +22500.0 + 20 +25315.0 + 30 +0.0 + 0 +TEXT + 5 +2615 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +20072.5 + 20 +25402.5 + 30 +0.0 + 40 +175.0 + 1 +4.51 + 41 +0.75 + 72 + 1 + 11 +20247.5 + 21 +25490.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2616 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17995.0 + 20 +21745.0 + 30 +0.0 + 0 +POINT + 5 +2617 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +22500.0 + 20 +21750.0 + 30 +0.0 + 0 +POINT + 5 +2618 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +22500.0 + 20 +25315.0 + 30 +0.0 + 0 +ENDBLK + 5 +2619 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D76 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D76 + 1 + + 0 +LINE + 5 +261B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +22501.0 + 20 +25315.0 + 30 +0.0 + 11 +22864.0 + 21 +25315.0 + 31 +0.0 + 0 +INSERT + 5 +261C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +22500.0 + 20 +25315.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +261D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +22865.0 + 20 +25315.0 + 30 +0.0 + 0 +TEXT + 5 +261E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +22573.125 + 20 +25402.5 + 30 +0.0 + 40 +175.0 + 1 +36 + 41 +0.75 + 72 + 1 + 11 +22682.5 + 21 +25490.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +261F + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +22500.0 + 20 +21750.0 + 30 +0.0 + 0 +POINT + 5 +2620 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +22865.0 + 20 +21750.0 + 30 +0.0 + 0 +POINT + 5 +2621 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +22865.0 + 20 +25315.0 + 30 +0.0 + 0 +ENDBLK + 5 +2622 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D77 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D77 + 1 + + 0 +LINE + 5 +2624 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +22866.0 + 20 +25315.0 + 30 +0.0 + 11 +26369.0 + 21 +25315.0 + 31 +0.0 + 0 +INSERT + 5 +2625 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +22865.0 + 20 +25315.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2626 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +26370.0 + 20 +25315.0 + 30 +0.0 + 0 +TEXT + 5 +2627 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +24442.5 + 20 +25402.5 + 30 +0.0 + 40 +175.0 + 1 +3.51 + 41 +0.75 + 72 + 1 + 11 +24617.5 + 21 +25490.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2628 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +22865.0 + 20 +21750.0 + 30 +0.0 + 0 +POINT + 5 +2629 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26370.0 + 20 +21740.0 + 30 +0.0 + 0 +POINT + 5 +262A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26370.0 + 20 +25315.0 + 30 +0.0 + 0 +ENDBLK + 5 +262B + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D78 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D78 + 1 + + 0 +LINE + 5 +262D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +26371.0 + 20 +25315.0 + 30 +0.0 + 11 +26739.0 + 21 +25315.0 + 31 +0.0 + 0 +INSERT + 5 +262E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +26370.0 + 20 +25315.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +262F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +26740.0 + 20 +25315.0 + 30 +0.0 + 0 +TEXT + 5 +2630 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +26445.625 + 20 +25402.5 + 30 +0.0 + 40 +175.0 + 1 +36 + 41 +0.75 + 72 + 1 + 11 +26555.0 + 21 +25490.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2631 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26370.0 + 20 +21740.0 + 30 +0.0 + 0 +POINT + 5 +2632 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26740.0 + 20 +22000.0 + 30 +0.0 + 0 +POINT + 5 +2633 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26740.0 + 20 +25315.0 + 30 +0.0 + 0 +ENDBLK + 5 +2634 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D79 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D79 + 1 + + 0 +LINE + 5 +2636 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +25251.0 + 20 +24615.0 + 30 +0.0 + 11 +26739.0 + 21 +24615.0 + 31 +0.0 + 0 +INSERT + 5 +2637 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +25250.0 + 20 +24615.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2638 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +26740.0 + 20 +24615.0 + 30 +0.0 + 0 +TEXT + 5 +2639 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +25820.0 + 20 +24702.5 + 30 +0.0 + 40 +175.0 + 1 +1.49 + 41 +0.75 + 72 + 1 + 11 +25995.0 + 21 +24790.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +263A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +25250.0 + 20 +22115.0 + 30 +0.0 + 0 +POINT + 5 +263B + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26740.0 + 20 +22115.0 + 30 +0.0 + 0 +POINT + 5 +263C + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26740.0 + 20 +24615.0 + 30 +0.0 + 0 +ENDBLK + 5 +263D + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D80 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D80 + 1 + + 0 +LINE + 5 +263F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +19751.0 + 20 +24615.0 + 30 +0.0 + 11 +23364.0 + 21 +24615.0 + 31 +0.0 + 0 +INSERT + 5 +2640 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +19750.0 + 20 +24615.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2641 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +23365.0 + 20 +24615.0 + 30 +0.0 + 0 +TEXT + 5 +2642 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +21382.5 + 20 +24702.5 + 30 +0.0 + 40 +175.0 + 1 +3.61 + 41 +0.75 + 72 + 1 + 11 +21557.5 + 21 +24790.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2643 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +19750.0 + 20 +22115.0 + 30 +0.0 + 0 +POINT + 5 +2644 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +23365.0 + 20 +22115.0 + 30 +0.0 + 0 +POINT + 5 +2645 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +23365.0 + 20 +24615.0 + 30 +0.0 + 0 +ENDBLK + 5 +2646 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D81 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D81 + 1 + + 0 +LINE + 5 +2648 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +18736.0 + 20 +24615.0 + 30 +0.0 + 11 +19749.0 + 21 +24615.0 + 31 +0.0 + 0 +INSERT + 5 +2649 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18735.0 + 20 +24615.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +264A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +19750.0 + 20 +24615.0 + 30 +0.0 + 0 +TEXT + 5 +264B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +19100.3125 + 20 +24702.5 + 30 +0.0 + 40 +175.0 + 1 +1.01 + 41 +0.75 + 72 + 1 + 11 +19242.5 + 21 +24790.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +264C + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +18735.0 + 20 +22105.0 + 30 +0.0 + 0 +POINT + 5 +264D + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +19750.0 + 20 +22115.0 + 30 +0.0 + 0 +POINT + 5 +264E + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +19750.0 + 20 +24615.0 + 30 +0.0 + 0 +ENDBLK + 5 +264F + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D82 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D82 + 1 + + 0 +LINE + 5 +2651 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +16876.0 + 20 +24615.0 + 30 +0.0 + 11 +18734.0 + 21 +24615.0 + 31 +0.0 + 0 +INSERT + 5 +2652 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16875.0 + 20 +24615.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2653 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18735.0 + 20 +24615.0 + 30 +0.0 + 0 +TEXT + 5 +2654 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +17630.0 + 20 +24702.5 + 30 +0.0 + 40 +175.0 + 1 +1.86 + 41 +0.75 + 72 + 1 + 11 +17805.0 + 21 +24790.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2655 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16875.0 + 20 +22105.0 + 30 +0.0 + 0 +POINT + 5 +2656 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +18735.0 + 20 +22105.0 + 30 +0.0 + 0 +POINT + 5 +2657 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +18735.0 + 20 +24615.0 + 30 +0.0 + 0 +ENDBLK + 5 +2658 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D83 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D83 + 1 + + 0 +LINE + 5 +265A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +15861.0 + 20 +24615.0 + 30 +0.0 + 11 +16874.0 + 21 +24615.0 + 31 +0.0 + 0 +INSERT + 5 +265B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +15860.0 + 20 +24615.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +265C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16875.0 + 20 +24615.0 + 30 +0.0 + 0 +TEXT + 5 +265D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +16225.3125 + 20 +24702.5 + 30 +0.0 + 40 +175.0 + 1 +1.01 + 41 +0.75 + 72 + 1 + 11 +16367.5 + 21 +24790.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +265E + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15860.0 + 20 +22105.0 + 30 +0.0 + 0 +POINT + 5 +265F + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16875.0 + 20 +22105.0 + 30 +0.0 + 0 +POINT + 5 +2660 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16875.0 + 20 +24615.0 + 30 +0.0 + 0 +ENDBLK + 5 +2661 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D84 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D84 + 1 + + 0 +LINE + 5 +2663 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +11256.0 + 20 +24615.0 + 30 +0.0 + 11 +15859.0 + 21 +24615.0 + 31 +0.0 + 0 +INSERT + 5 +2664 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +11255.0 + 20 +24615.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2665 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +15860.0 + 20 +24615.0 + 30 +0.0 + 0 +TEXT + 5 +2666 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +13382.5 + 20 +24702.5 + 30 +0.0 + 40 +175.0 + 1 +4.61 + 41 +0.75 + 72 + 1 + 11 +13557.5 + 21 +24790.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2667 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +11255.0 + 20 +22105.0 + 30 +0.0 + 0 +POINT + 5 +2668 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15860.0 + 20 +22105.0 + 30 +0.0 + 0 +POINT + 5 +2669 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15860.0 + 20 +24615.0 + 30 +0.0 + 0 +ENDBLK + 5 +266A + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D85 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D85 + 1 + + 0 +LINE + 5 +266C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +10241.0 + 20 +24615.0 + 30 +0.0 + 11 +11254.0 + 21 +24615.0 + 31 +0.0 + 0 +INSERT + 5 +266D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +10240.0 + 20 +24615.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +266E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +11255.0 + 20 +24615.0 + 30 +0.0 + 0 +TEXT + 5 +266F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +10605.3125 + 20 +24702.5 + 30 +0.0 + 40 +175.0 + 1 +1.01 + 41 +0.75 + 72 + 1 + 11 +10747.5 + 21 +24790.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2670 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +10240.0 + 20 +22115.0 + 30 +0.0 + 0 +POINT + 5 +2671 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +11255.0 + 20 +22105.0 + 30 +0.0 + 0 +POINT + 5 +2672 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +11255.0 + 20 +24615.0 + 30 +0.0 + 0 +ENDBLK + 5 +2673 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D86 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D86 + 1 + + 0 +LINE + 5 +2675 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +8501.0 + 20 +24615.0 + 30 +0.0 + 11 +10239.0 + 21 +24615.0 + 31 +0.0 + 0 +INSERT + 5 +2676 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +8500.0 + 20 +24615.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2677 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +10240.0 + 20 +24615.0 + 30 +0.0 + 0 +TEXT + 5 +2678 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9195.0 + 20 +24702.5 + 30 +0.0 + 40 +175.0 + 1 +1.74 + 41 +0.75 + 72 + 1 + 11 +9370.0 + 21 +24790.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2679 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8500.0 + 20 +22115.0 + 30 +0.0 + 0 +POINT + 5 +267A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +10240.0 + 20 +22115.0 + 30 +0.0 + 0 +POINT + 5 +267B + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +10240.0 + 20 +24615.0 + 30 +0.0 + 0 +ENDBLK + 5 +267C + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D87 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D87 + 1 + + 0 +LINE + 5 +267E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +5001.0 + 20 +24615.0 + 30 +0.0 + 11 +6739.0 + 21 +24615.0 + 31 +0.0 + 0 +INSERT + 5 +267F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +5000.0 + 20 +24615.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2680 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +6740.0 + 20 +24615.0 + 30 +0.0 + 0 +TEXT + 5 +2681 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +5695.0 + 20 +24702.5 + 30 +0.0 + 40 +175.0 + 1 +1.74 + 41 +0.75 + 72 + 1 + 11 +5870.0 + 21 +24790.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2682 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5000.0 + 20 +22115.0 + 30 +0.0 + 0 +POINT + 5 +2683 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +6740.0 + 20 +22115.0 + 30 +0.0 + 0 +POINT + 5 +2684 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +6740.0 + 20 +24615.0 + 30 +0.0 + 0 +ENDBLK + 5 +2685 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D88 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D88 + 1 + + 0 +LINE + 5 +2687 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +23366.0 + 20 +24615.0 + 30 +0.0 + 11 +25249.0 + 21 +24615.0 + 31 +0.0 + 0 +INSERT + 5 +2688 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +23365.0 + 20 +24615.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2689 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +25250.0 + 20 +24615.0 + 30 +0.0 + 0 +TEXT + 5 +268A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +24132.5 + 20 +24702.5 + 30 +0.0 + 40 +175.0 + 1 +1.88 + 41 +0.75 + 72 + 1 + 11 +24307.5 + 21 +24790.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +268B + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +23365.0 + 20 +22115.0 + 30 +0.0 + 0 +POINT + 5 +268C + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +25250.0 + 20 +22115.0 + 30 +0.0 + 0 +POINT + 5 +268D + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +25250.0 + 20 +24615.0 + 30 +0.0 + 0 +ENDBLK + 5 +268E + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D89 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D89 + 1 + + 0 +LINE + 5 +2690 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +6741.0 + 20 +24615.0 + 30 +0.0 + 11 +8499.0 + 21 +24615.0 + 31 +0.0 + 0 +INSERT + 5 +2691 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +6740.0 + 20 +24615.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2692 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +8500.0 + 20 +24615.0 + 30 +0.0 + 0 +TEXT + 5 +2693 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +7445.0 + 20 +24702.5 + 30 +0.0 + 40 +175.0 + 1 +1.76 + 41 +0.75 + 72 + 1 + 11 +7620.0 + 21 +24790.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2694 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +6740.0 + 20 +22115.0 + 30 +0.0 + 0 +POINT + 5 +2695 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8500.0 + 20 +22115.0 + 30 +0.0 + 0 +POINT + 5 +2696 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8500.0 + 20 +24615.0 + 30 +0.0 + 0 +ENDBLK + 5 +2697 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D90 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D90 + 1 + + 0 +LINE + 5 +2699 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +2800.0 + 20 +9251.0 + 30 +0.0 + 11 +2800.0 + 21 +9614.0 + 31 +0.0 + 0 +INSERT + 5 +269A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +2800.0 + 20 +9250.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +269B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +2800.0 + 20 +9615.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +269C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +2712.5 + 20 +9323.125 + 30 +0.0 + 40 +175.0 + 1 +36 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +2625.0 + 21 +9432.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +269D + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5000.0 + 20 +9250.0 + 30 +0.0 + 0 +POINT + 5 +269E + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5000.0 + 20 +9615.0 + 30 +0.0 + 0 +POINT + 5 +269F + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +2800.0 + 20 +9615.0 + 30 +0.0 + 0 +ENDBLK + 5 +26A0 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D91 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D91 + 1 + + 0 +LINE + 5 +26A2 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +2800.0 + 20 +9616.0 + 30 +0.0 + 11 +2800.0 + 21 +14114.0 + 31 +0.0 + 0 +INSERT + 5 +26A3 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +2800.0 + 20 +9615.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +26A4 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +2800.0 + 20 +14115.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +26A5 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +2712.5 + 20 +11690.0 + 30 +0.0 + 40 +175.0 + 1 +4.51 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +2625.0 + 21 +11865.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +26A6 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5000.0 + 20 +9615.0 + 30 +0.0 + 0 +POINT + 5 +26A7 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5365.0 + 20 +14115.0 + 30 +0.0 + 0 +POINT + 5 +26A8 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +2800.0 + 20 +14115.0 + 30 +0.0 + 0 +ENDBLK + 5 +26A9 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D92 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D92 + 1 + + 0 +LINE + 5 +26AB + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +2800.0 + 20 +14116.0 + 30 +0.0 + 11 +2800.0 + 21 +14474.0 + 31 +0.0 + 0 +INSERT + 5 +26AC + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +2800.0 + 20 +14115.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +26AD + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +2800.0 + 20 +14475.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +26AE + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +2712.5 + 20 +14185.625 + 30 +0.0 + 40 +175.0 + 1 +36 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +2625.0 + 21 +14295.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +26AF + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5365.0 + 20 +14115.0 + 30 +0.0 + 0 +POINT + 5 +26B0 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5390.0 + 20 +14475.0 + 30 +0.0 + 0 +POINT + 5 +26B1 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +2800.0 + 20 +14475.0 + 30 +0.0 + 0 +ENDBLK + 5 +26B2 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D93 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D93 + 1 + + 0 +LINE + 5 +26B4 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +2800.0 + 20 +14476.0 + 30 +0.0 + 11 +2800.0 + 21 +16874.0 + 31 +0.0 + 0 +INSERT + 5 +26B5 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +2800.0 + 20 +14475.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +26B6 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +2800.0 + 20 +16875.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +26B7 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +2712.5 + 20 +15478.125 + 30 +0.0 + 40 +175.0 + 1 +2.38 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +2625.0 + 21 +15675.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +26B8 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5390.0 + 20 +14475.0 + 30 +0.0 + 0 +POINT + 5 +26B9 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5365.0 + 20 +16875.0 + 30 +0.0 + 0 +POINT + 5 +26BA + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +2800.0 + 20 +16875.0 + 30 +0.0 + 0 +ENDBLK + 5 +26BB + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D94 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D94 + 1 + + 0 +LINE + 5 +26BD + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +2800.0 + 20 +16876.0 + 30 +0.0 + 11 +2800.0 + 21 +17234.0 + 31 +0.0 + 0 +INSERT + 5 +26BE + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +2800.0 + 20 +16875.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +26BF + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +2800.0 + 20 +17235.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +26C0 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +2712.5 + 20 +16945.625 + 30 +0.0 + 40 +175.0 + 1 +36 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +2625.0 + 21 +17055.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +26C1 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5365.0 + 20 +16875.0 + 30 +0.0 + 0 +POINT + 5 +26C2 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5375.0 + 20 +17235.0 + 30 +0.0 + 0 +POINT + 5 +26C3 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +2800.0 + 20 +17235.0 + 30 +0.0 + 0 +ENDBLK + 5 +26C4 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D95 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D95 + 1 + + 0 +LINE + 5 +26C6 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +2800.0 + 20 +17236.0 + 30 +0.0 + 11 +2800.0 + 21 +21749.0 + 31 +0.0 + 0 +INSERT + 5 +26C7 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +2800.0 + 20 +17235.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +26C8 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +2800.0 + 20 +21750.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +26C9 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +2712.5 + 20 +19317.5 + 30 +0.0 + 40 +175.0 + 1 +4.51 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +2625.0 + 21 +19492.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +26CA + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5375.0 + 20 +17235.0 + 30 +0.0 + 0 +POINT + 5 +26CB + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5355.0 + 20 +21750.0 + 30 +0.0 + 0 +POINT + 5 +26CC + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +2800.0 + 20 +21750.0 + 30 +0.0 + 0 +ENDBLK + 5 +26CD + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D96 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D96 + 1 + + 0 +LINE + 5 +26CF + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +2800.0 + 20 +21751.0 + 30 +0.0 + 11 +2800.0 + 21 +22119.0 + 31 +0.0 + 0 +INSERT + 5 +26D0 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +2800.0 + 20 +21750.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +26D1 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +2800.0 + 20 +22120.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +26D2 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +2712.5 + 20 +21825.625 + 30 +0.0 + 40 +175.0 + 1 +36 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +2625.0 + 21 +21935.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +26D3 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5355.0 + 20 +21750.0 + 30 +0.0 + 0 +POINT + 5 +26D4 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5345.0 + 20 +22120.0 + 30 +0.0 + 0 +POINT + 5 +26D5 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +2800.0 + 20 +22120.0 + 30 +0.0 + 0 +ENDBLK + 5 +26D6 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D97 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D97 + 1 + + 0 +LINE + 5 +26D8 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +10121.0 + 20 +18105.0 + 30 +0.0 + 11 +13529.0 + 21 +18105.0 + 31 +0.0 + 0 +INSERT + 5 +26D9 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +10120.0 + 20 +18105.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +26DA + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +13530.0 + 20 +18105.0 + 30 +0.0 + 0 +TEXT + 5 +26DB + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +11650.0 + 20 +18192.5 + 30 +0.0 + 40 +175.0 + 1 +3.41 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +11825.0 + 21 +18280.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +26DC + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +10120.0 + 20 +17375.0 + 30 +0.0 + 0 +POINT + 5 +26DD + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +13530.0 + 20 +17375.0 + 30 +0.0 + 0 +POINT + 5 +26DE + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +13530.0 + 20 +18105.0 + 30 +0.0 + 0 +ENDBLK + 5 +26DF + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D98 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D98 + 1 + + 0 +LINE + 5 +26E1 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +14561.0 + 20 +18105.0 + 30 +0.0 + 11 +14884.0 + 21 +18105.0 + 31 +0.0 + 0 +INSERT + 5 +26E2 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +14560.0 + 20 +18105.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +26E3 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +14885.0 + 20 +18105.0 + 30 +0.0 + 0 +TEXT + 5 +26E4 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +14613.125 + 20 +18192.5 + 30 +0.0 + 40 +175.0 + 1 +32 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +14722.5 + 21 +18280.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +26E5 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +14560.0 + 20 +17375.0 + 30 +0.0 + 0 +POINT + 5 +26E6 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +14885.0 + 20 +17395.0 + 30 +0.0 + 0 +POINT + 5 +26E7 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +14885.0 + 20 +18105.0 + 30 +0.0 + 0 +ENDBLK + 5 +26E8 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D99 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D99 + 1 + + 0 +LINE + 5 +26EA + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +15236.0 + 20 +18110.0 + 30 +0.0 + 11 +15989.0 + 21 +18110.0 + 31 +0.0 + 0 +INSERT + 5 +26EB + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +15235.0 + 20 +18110.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +26EC + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +15990.0 + 20 +18110.0 + 30 +0.0 + 0 +TEXT + 5 +26ED + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +15503.125 + 20 +18197.5 + 30 +0.0 + 40 +175.0 + 1 +75 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +15612.5 + 21 +18285.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +26EE + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15235.0 + 20 +17380.0 + 30 +0.0 + 0 +POINT + 5 +26EF + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15990.0 + 20 +17380.0 + 30 +0.0 + 0 +POINT + 5 +26F0 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15990.0 + 20 +18110.0 + 30 +0.0 + 0 +ENDBLK + 5 +26F1 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D100 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D100 + 1 + + 0 +LINE + 5 +26F3 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +15991.0 + 20 +18110.0 + 30 +0.0 + 11 +16869.0 + 21 +18110.0 + 31 +0.0 + 0 +INSERT + 5 +26F4 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +15990.0 + 20 +18110.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +26F5 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16870.0 + 20 +18110.0 + 30 +0.0 + 0 +TEXT + 5 +26F6 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +16320.625 + 20 +18197.5 + 30 +0.0 + 40 +175.0 + 1 +88 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +16430.0 + 21 +18285.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +26F7 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15990.0 + 20 +17380.0 + 30 +0.0 + 0 +POINT + 5 +26F8 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16870.0 + 20 +17370.0 + 30 +0.0 + 0 +POINT + 5 +26F9 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16870.0 + 20 +18110.0 + 30 +0.0 + 0 +ENDBLK + 5 +26FA + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D101 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D101 + 1 + + 0 +LINE + 5 +26FC + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +16871.0 + 20 +18110.0 + 30 +0.0 + 11 +17624.0 + 21 +18110.0 + 31 +0.0 + 0 +INSERT + 5 +26FD + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16870.0 + 20 +18110.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +26FE + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +17625.0 + 20 +18110.0 + 30 +0.0 + 0 +TEXT + 5 +26FF + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +17138.125 + 20 +18197.5 + 30 +0.0 + 40 +175.0 + 1 +75 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +17247.5 + 21 +18285.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2700 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16870.0 + 20 +17370.0 + 30 +0.0 + 0 +POINT + 5 +2701 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17625.0 + 20 +17380.0 + 30 +0.0 + 0 +POINT + 5 +2702 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17625.0 + 20 +18110.0 + 30 +0.0 + 0 +ENDBLK + 5 +2703 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D102 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D102 + 1 + + 0 +LINE + 5 +2705 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +17986.0 + 20 +16810.0 + 30 +0.0 + 11 +21359.0 + 21 +16810.0 + 31 +0.0 + 0 +INSERT + 5 +2706 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +17985.0 + 20 +16810.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2707 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +21360.0 + 20 +16810.0 + 30 +0.0 + 0 +TEXT + 5 +2708 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +19475.625 + 20 +16897.5 + 30 +0.0 + 40 +175.0 + 1 +3.37 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +19672.5 + 21 +16985.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2709 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17985.0 + 20 +16005.0 + 30 +0.0 + 0 +POINT + 5 +270A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +21360.0 + 20 +16005.0 + 30 +0.0 + 0 +POINT + 5 +270B + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +21360.0 + 20 +16810.0 + 30 +0.0 + 0 +ENDBLK + 5 +270C + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D103 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D103 + 1 + + 0 +LINE + 5 +270E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +21361.0 + 20 +16810.0 + 30 +0.0 + 11 +22254.0 + 21 +16810.0 + 31 +0.0 + 0 +INSERT + 5 +270F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +21360.0 + 20 +16810.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2710 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +22255.0 + 20 +16810.0 + 30 +0.0 + 0 +TEXT + 5 +2711 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +21698.125 + 20 +16897.5 + 30 +0.0 + 40 +175.0 + 1 +88 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +21807.5 + 21 +16985.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2712 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +21360.0 + 20 +16005.0 + 30 +0.0 + 0 +POINT + 5 +2713 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +22255.0 + 20 +15975.0 + 30 +0.0 + 0 +POINT + 5 +2714 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +22255.0 + 20 +16810.0 + 30 +0.0 + 0 +ENDBLK + 5 +2715 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D104 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D104 + 1 + + 0 +LINE + 5 +2717 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +22256.0 + 20 +16810.0 + 30 +0.0 + 11 +22509.0 + 21 +16810.0 + 31 +0.0 + 0 +INSERT + 5 +2718 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +22255.0 + 20 +16810.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2719 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +22510.0 + 20 +16810.0 + 30 +0.0 + 0 +TEXT + 5 +271A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +22273.125 + 20 +16897.5 + 30 +0.0 + 40 +175.0 + 1 +25 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +22382.5 + 21 +16985.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +271B + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +22255.0 + 20 +15975.0 + 30 +0.0 + 0 +POINT + 5 +271C + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +22510.0 + 20 +16010.0 + 30 +0.0 + 0 +POINT + 5 +271D + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +22510.0 + 20 +16810.0 + 30 +0.0 + 0 +ENDBLK + 5 +271E + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D105 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D105 + 1 + + 0 +LINE + 5 +2720 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +24520.0 + 20 +15986.0 + 30 +0.0 + 11 +24520.0 + 21 +16244.0 + 31 +0.0 + 0 +INSERT + 5 +2721 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +24520.0 + 20 +15985.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +2722 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +24520.0 + 20 +16245.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +2723 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +24432.5 + 20 +16005.625 + 30 +0.0 + 40 +175.0 + 1 +25 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +24345.0 + 21 +16115.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2724 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +22865.0 + 20 +15985.0 + 30 +0.0 + 0 +POINT + 5 +2725 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +22865.0 + 20 +16245.0 + 30 +0.0 + 0 +POINT + 5 +2726 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +24520.0 + 20 +16245.0 + 30 +0.0 + 0 +ENDBLK + 5 +2727 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D106 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D106 + 1 + + 0 +LINE + 5 +2729 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +24520.0 + 20 +16246.0 + 30 +0.0 + 11 +24520.0 + 21 +17129.0 + 31 +0.0 + 0 +INSERT + 5 +272A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +24520.0 + 20 +16245.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +272B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +24520.0 + 20 +17130.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +272C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +24432.5 + 20 +16578.125 + 30 +0.0 + 40 +175.0 + 1 +88 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +24345.0 + 21 +16687.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +272D + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +22865.0 + 20 +16245.0 + 30 +0.0 + 0 +POINT + 5 +272E + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +22845.0 + 20 +17130.0 + 30 +0.0 + 0 +POINT + 5 +272F + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +24520.0 + 20 +17130.0 + 30 +0.0 + 0 +ENDBLK + 5 +2730 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D107 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D107 + 1 + + 0 +LINE + 5 +2732 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +24520.0 + 20 +17131.0 + 30 +0.0 + 11 +24520.0 + 21 +21739.0 + 31 +0.0 + 0 +INSERT + 5 +2733 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +24520.0 + 20 +17130.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +2734 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +24520.0 + 20 +21740.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +2735 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +24432.5 + 20 +19238.125 + 30 +0.0 + 40 +175.0 + 1 +4.62 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +24345.0 + 21 +19435.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2736 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +22845.0 + 20 +17130.0 + 30 +0.0 + 0 +POINT + 5 +2737 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +23355.0 + 20 +21740.0 + 30 +0.0 + 0 +POINT + 5 +2738 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +24520.0 + 20 +21740.0 + 30 +0.0 + 0 +ENDBLK + 5 +2739 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D108 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D108 + 1 + + 0 +LINE + 5 +273B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +28240.0 + 20 +9256.0 + 30 +0.0 + 11 +28240.0 + 21 +10359.0 + 31 +0.0 + 0 +INSERT + 5 +273C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +28240.0 + 20 +9255.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +273D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +28240.0 + 20 +10360.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +273E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +28152.5 + 20 +9676.25 + 30 +0.0 + 40 +175.0 + 1 +1.11 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +28065.0 + 21 +9807.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +273F + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26740.0 + 20 +9255.0 + 30 +0.0 + 0 +POINT + 5 +2740 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26740.0 + 20 +10360.0 + 30 +0.0 + 0 +POINT + 5 +2741 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +28240.0 + 20 +10360.0 + 30 +0.0 + 0 +ENDBLK + 5 +2742 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D109 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D109 + 1 + + 0 +LINE + 5 +2744 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +28240.0 + 20 +10361.0 + 30 +0.0 + 11 +28240.0 + 21 +12009.0 + 31 +0.0 + 0 +INSERT + 5 +2745 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +28240.0 + 20 +10360.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +2746 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +28240.0 + 20 +12010.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +2747 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +28152.5 + 20 +11010.0 + 30 +0.0 + 40 +175.0 + 1 +1.63 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +28065.0 + 21 +11185.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2748 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26740.0 + 20 +10360.0 + 30 +0.0 + 0 +POINT + 5 +2749 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26730.0 + 20 +12010.0 + 30 +0.0 + 0 +POINT + 5 +274A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +28240.0 + 20 +12010.0 + 30 +0.0 + 0 +ENDBLK + 5 +274B + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D110 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D110 + 1 + + 0 +LINE + 5 +274D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +28240.0 + 20 +12011.0 + 30 +0.0 + 11 +28240.0 + 21 +17729.0 + 31 +0.0 + 0 +INSERT + 5 +274E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +28240.0 + 20 +12010.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +274F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +28240.0 + 20 +17730.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +2750 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +28152.5 + 20 +14673.125 + 30 +0.0 + 40 +175.0 + 1 +5.74 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +28065.0 + 21 +14870.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2751 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26730.0 + 20 +12010.0 + 30 +0.0 + 0 +POINT + 5 +2752 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26725.0 + 20 +17730.0 + 30 +0.0 + 0 +POINT + 5 +2753 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +28240.0 + 20 +17730.0 + 30 +0.0 + 0 +ENDBLK + 5 +2754 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D111 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D111 + 1 + + 0 +LINE + 5 +2756 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +28240.0 + 20 +17731.0 + 30 +0.0 + 11 +28240.0 + 21 +18384.0 + 31 +0.0 + 0 +INSERT + 5 +2757 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +28240.0 + 20 +17730.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +2758 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +28240.0 + 20 +18385.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +2759 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +28152.5 + 20 +17948.125 + 30 +0.0 + 40 +175.0 + 1 +63 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +28065.0 + 21 +18057.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +275A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26725.0 + 20 +17730.0 + 30 +0.0 + 0 +POINT + 5 +275B + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26720.0 + 20 +18385.0 + 30 +0.0 + 0 +POINT + 5 +275C + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +28240.0 + 20 +18385.0 + 30 +0.0 + 0 +ENDBLK + 5 +275D + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D112 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D112 + 1 + + 0 +LINE + 5 +275F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +28240.0 + 20 +18386.0 + 30 +0.0 + 11 +28240.0 + 21 +22114.0 + 31 +0.0 + 0 +INSERT + 5 +2760 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +28240.0 + 20 +18385.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +2761 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +28240.0 + 20 +22115.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +2762 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +28152.5 + 20 +20053.125 + 30 +0.0 + 40 +175.0 + 1 +3.74 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +28065.0 + 21 +20250.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2763 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26720.0 + 20 +18385.0 + 30 +0.0 + 0 +POINT + 5 +2764 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26725.0 + 20 +22115.0 + 30 +0.0 + 0 +POINT + 5 +2765 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +28240.0 + 20 +22115.0 + 30 +0.0 + 0 +ENDBLK + 5 +2766 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D113 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D113 + 1 + + 0 +LINE + 5 +2768 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +28940.0 + 20 +9256.0 + 30 +0.0 + 11 +28940.0 + 21 +9614.0 + 31 +0.0 + 0 +INSERT + 5 +2769 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +28940.0 + 20 +9255.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +276A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +28940.0 + 20 +9615.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +276B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +28852.5 + 20 +9325.625 + 30 +0.0 + 40 +175.0 + 1 +36 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +28765.0 + 21 +9435.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +276C + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26685.0 + 20 +9255.0 + 30 +0.0 + 0 +POINT + 5 +276D + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26685.0 + 20 +9615.0 + 30 +0.0 + 0 +POINT + 5 +276E + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +28940.0 + 20 +9615.0 + 30 +0.0 + 0 +ENDBLK + 5 +276F + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D114 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D114 + 1 + + 0 +LINE + 5 +2771 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +28940.0 + 20 +9616.0 + 30 +0.0 + 11 +28940.0 + 21 +15624.0 + 31 +0.0 + 0 +INSERT + 5 +2772 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +28940.0 + 20 +9615.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +2773 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +28940.0 + 20 +15625.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +2774 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +28852.5 + 20 +12455.9375 + 30 +0.0 + 40 +175.0 + 1 +6.01 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +28765.0 + 21 +12620.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2775 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26685.0 + 20 +9615.0 + 30 +0.0 + 0 +POINT + 5 +2776 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26365.0 + 20 +15625.0 + 30 +0.0 + 0 +POINT + 5 +2777 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +28940.0 + 20 +15625.0 + 30 +0.0 + 0 +ENDBLK + 5 +2778 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D115 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D115 + 1 + + 0 +LINE + 5 +277A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +28940.0 + 20 +15626.0 + 30 +0.0 + 11 +28940.0 + 21 +15994.0 + 31 +0.0 + 0 +INSERT + 5 +277B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +28940.0 + 20 +15625.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +277C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +28940.0 + 20 +15995.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +277D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +28852.5 + 20 +15700.625 + 30 +0.0 + 40 +175.0 + 1 +36 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +28765.0 + 21 +15810.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +277E + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26365.0 + 20 +15625.0 + 30 +0.0 + 0 +POINT + 5 +277F + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26365.0 + 20 +15995.0 + 30 +0.0 + 0 +POINT + 5 +2780 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +28940.0 + 20 +15995.0 + 30 +0.0 + 0 +ENDBLK + 5 +2781 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D116 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D116 + 1 + + 0 +LINE + 5 +2783 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +28940.0 + 20 +15996.0 + 30 +0.0 + 11 +28940.0 + 21 +21744.0 + 31 +0.0 + 0 +INSERT + 5 +2784 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +28940.0 + 20 +15995.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +2785 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +28940.0 + 20 +21745.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +2786 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +28852.5 + 20 +18673.125 + 30 +0.0 + 40 +175.0 + 1 +5.76 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +28765.0 + 21 +18870.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2787 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26365.0 + 20 +15995.0 + 30 +0.0 + 0 +POINT + 5 +2788 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26370.0 + 20 +21745.0 + 30 +0.0 + 0 +POINT + 5 +2789 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +28940.0 + 20 +21745.0 + 30 +0.0 + 0 +ENDBLK + 5 +278A + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D117 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D117 + 1 + + 0 +LINE + 5 +278C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +28940.0 + 20 +21746.0 + 30 +0.0 + 11 +28940.0 + 21 +22114.0 + 31 +0.0 + 0 +INSERT + 5 +278D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +28940.0 + 20 +21745.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +278E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +28940.0 + 20 +22115.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +278F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +28852.5 + 20 +21820.625 + 30 +0.0 + 40 +175.0 + 1 +36 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +28765.0 + 21 +21930.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2790 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26370.0 + 20 +21745.0 + 30 +0.0 + 0 +POINT + 5 +2791 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26380.0 + 20 +22115.0 + 30 +0.0 + 0 +POINT + 5 +2792 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +28940.0 + 20 +22115.0 + 30 +0.0 + 0 +ENDBLK + 5 +2793 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D118 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D118 + 1 + + 0 +LINE + 5 +2795 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +29640.0 + 20 +9256.0 + 30 +0.0 + 11 +29640.0 + 21 +22114.0 + 31 +0.0 + 0 +INSERT + 5 +2796 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +29640.0 + 20 +9255.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +2797 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +29640.0 + 20 +22115.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +2798 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +29552.5 + 20 +15444.375 + 30 +0.0 + 40 +175.0 + 1 +12.86 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +29465.0 + 21 +15685.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2799 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26720.0 + 20 +9255.0 + 30 +0.0 + 0 +POINT + 5 +279A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26720.0 + 20 +22115.0 + 30 +0.0 + 0 +POINT + 5 +279B + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +29640.0 + 20 +22115.0 + 30 +0.0 + 0 +ENDBLK + 5 +279C + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D119 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D119 + 1 + + 0 +LINE + 5 +279E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +24520.0 + 20 +15624.0 + 30 +0.0 + 11 +24520.0 + 21 +15241.0 + 31 +0.0 + 0 +INSERT + 5 +279F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +24520.0 + 20 +15625.0 + 30 +0.0 + 50 +90.0 + 0 +INSERT + 5 +27A0 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +24520.0 + 20 +15240.0 + 30 +0.0 + 50 +270.0 + 0 +TEXT + 5 +27A1 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +24432.5 + 20 +15334.0625 + 30 +0.0 + 40 +175.0 + 1 +40 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +24345.0 + 21 +15432.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +27A2 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +22975.0 + 20 +15625.0 + 30 +0.0 + 0 +POINT + 5 +27A3 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +22975.0 + 20 +15240.0 + 30 +0.0 + 0 +POINT + 5 +27A4 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +24520.0 + 20 +15240.0 + 30 +0.0 + 0 +ENDBLK + 5 +27A5 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D120 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D120 + 1 + + 0 +LINE + 5 +27A7 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +24520.0 + 20 +15239.0 + 30 +0.0 + 11 +24520.0 + 21 +14361.0 + 31 +0.0 + 0 +INSERT + 5 +27A8 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +24520.0 + 20 +15240.0 + 30 +0.0 + 50 +90.0 + 0 +INSERT + 5 +27A9 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +24520.0 + 20 +14360.0 + 30 +0.0 + 50 +270.0 + 0 +TEXT + 5 +27AA + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +24432.5 + 20 +14690.625 + 30 +0.0 + 40 +175.0 + 1 +88 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +24345.0 + 21 +14800.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +27AB + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +22975.0 + 20 +15240.0 + 30 +0.0 + 0 +POINT + 5 +27AC + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +22960.0 + 20 +14360.0 + 30 +0.0 + 0 +POINT + 5 +27AD + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +24520.0 + 20 +14360.0 + 30 +0.0 + 0 +ENDBLK + 5 +27AE + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D121 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D121 + 1 + + 0 +LINE + 5 +27B0 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +24520.0 + 20 +14359.0 + 30 +0.0 + 11 +24520.0 + 21 +9626.0 + 31 +0.0 + 0 +INSERT + 5 +27B1 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +24520.0 + 20 +14360.0 + 30 +0.0 + 50 +90.0 + 0 +INSERT + 5 +27B2 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +24520.0 + 20 +9625.0 + 30 +0.0 + 50 +270.0 + 0 +TEXT + 5 +27B3 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +24432.5 + 20 +11795.625 + 30 +0.0 + 40 +175.0 + 1 +4.72 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +24345.0 + 21 +11992.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +27B4 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +22960.0 + 20 +14360.0 + 30 +0.0 + 0 +POINT + 5 +27B5 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +24375.0 + 20 +9625.0 + 30 +0.0 + 0 +POINT + 5 +27B6 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +24520.0 + 20 +9625.0 + 30 +0.0 + 0 +ENDBLK + 5 +27B7 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D122 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D122 + 1 + + 0 +LINE + 5 +27B9 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +13890.0 + 20 +17244.0 + 30 +0.0 + 11 +13890.0 + 21 +17243.0 + 31 +0.0 + 0 +LINE + 5 +27BA + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +13890.0 + 20 +17376.0 + 30 +0.0 + 11 +13890.0 + 21 +17377.0 + 31 +0.0 + 0 +LINE + 5 +27BB + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +13890.0 + 20 +17377.0 + 30 +0.0 + 11 +13890.0 + 21 +17552.0 + 31 +0.0 + 0 +INSERT + 5 +27BC + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +13890.0 + 20 +17245.0 + 30 +0.0 + 50 +90.0 + 0 +INSERT + 5 +27BD + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +13890.0 + 20 +17375.0 + 30 +0.0 + 50 +270.0 + 0 +TEXT + 5 +27BE + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +13802.5 + 20 +17377.0 + 30 +0.0 + 40 +175.0 + 1 +12 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +13715.0 + 21 +17464.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +27BF + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +14555.0 + 20 +17245.0 + 30 +0.0 + 0 +POINT + 5 +27C0 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +14555.0 + 20 +17375.0 + 30 +0.0 + 0 +POINT + 5 +27C1 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +13890.0 + 20 +17375.0 + 30 +0.0 + 0 +ENDBLK + 5 +27C2 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D123 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D123 + 1 + + 0 +LINE + 5 +27C4 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +13890.0 + 20 +17376.0 + 30 +0.0 + 11 +13890.0 + 21 +21749.0 + 31 +0.0 + 0 +INSERT + 5 +27C5 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +13890.0 + 20 +17375.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +27C6 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +13890.0 + 20 +21750.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +27C7 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +13802.5 + 20 +19365.625 + 30 +0.0 + 40 +175.0 + 1 +4.37 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +13715.0 + 21 +19562.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +27C8 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +14555.0 + 20 +17375.0 + 30 +0.0 + 0 +POINT + 5 +27C9 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +13890.0 + 20 +21750.0 + 30 +0.0 + 0 +POINT + 5 +27CA + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +13890.0 + 20 +21750.0 + 30 +0.0 + 0 +ENDBLK + 5 +27CB + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D124 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D124 + 1 + + 0 +LINE + 5 +27CD + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +10725.0 + 20 +15486.0 + 30 +0.0 + 11 +10725.0 + 21 +15739.0 + 31 +0.0 + 0 +INSERT + 5 +27CE + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +10725.0 + 20 +15485.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +27CF + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +10725.0 + 20 +15740.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +27D0 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +10637.5 + 20 +15503.125 + 30 +0.0 + 40 +175.0 + 1 +25 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +10550.0 + 21 +15612.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +27D1 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +10130.0 + 20 +15485.0 + 30 +0.0 + 0 +POINT + 5 +27D2 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +10130.0 + 20 +15740.0 + 30 +0.0 + 0 +POINT + 5 +27D3 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +10725.0 + 20 +15740.0 + 30 +0.0 + 0 +ENDBLK + 5 +27D4 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D125 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D125 + 1 + + 0 +LINE + 5 +27D6 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +10725.0 + 20 +16626.0 + 30 +0.0 + 11 +10725.0 + 21 +17254.0 + 31 +0.0 + 0 +INSERT + 5 +27D7 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +10725.0 + 20 +16625.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +27D8 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +10725.0 + 20 +17255.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +27D9 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +10637.5 + 20 +16830.625 + 30 +0.0 + 40 +175.0 + 1 +62 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +10550.0 + 21 +16940.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +27DA + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +10115.0 + 20 +16625.0 + 30 +0.0 + 0 +POINT + 5 +27DB + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +10715.0 + 20 +17255.0 + 30 +0.0 + 0 +POINT + 5 +27DC + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +10725.0 + 20 +17255.0 + 30 +0.0 + 0 +ENDBLK + 5 +27DD + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D126 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D126 + 1 + + 0 +LINE + 5 +27DF + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +8415.0 + 20 +16491.0 + 30 +0.0 + 11 +8415.0 + 21 +16879.0 + 31 +0.0 + 0 +INSERT + 5 +27E0 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +8415.0 + 20 +16490.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +27E1 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +8415.0 + 20 +16880.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +27E2 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +8327.5 + 20 +16586.5625 + 30 +0.0 + 40 +175.0 + 1 +40 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +8240.0 + 21 +16685.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +27E3 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7730.0 + 20 +16490.0 + 30 +0.0 + 0 +POINT + 5 +27E4 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8115.0 + 20 +16880.0 + 30 +0.0 + 0 +POINT + 5 +27E5 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8415.0 + 20 +16880.0 + 30 +0.0 + 0 +ENDBLK + 5 +27E6 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D127 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D127 + 1 + + 0 +LINE + 5 +27E8 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +8415.0 + 20 +15586.0 + 30 +0.0 + 11 +8415.0 + 21 +16489.0 + 31 +0.0 + 0 +INSERT + 5 +27E9 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +8415.0 + 20 +15585.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +27EA + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +8415.0 + 20 +16490.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +27EB + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +8327.5 + 20 +15928.125 + 30 +0.0 + 40 +175.0 + 1 +88 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +8240.0 + 21 +16037.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +27EC + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7730.0 + 20 +15585.0 + 30 +0.0 + 0 +POINT + 5 +27ED + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7730.0 + 20 +16490.0 + 30 +0.0 + 0 +POINT + 5 +27EE + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8415.0 + 20 +16490.0 + 30 +0.0 + 0 +ENDBLK + 5 +27EF + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D128 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D128 + 1 + + 0 +LINE + 5 +27F1 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +8415.0 + 20 +14491.0 + 30 +0.0 + 11 +8415.0 + 21 +15584.0 + 31 +0.0 + 0 +INSERT + 5 +27F2 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +8415.0 + 20 +14490.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +27F3 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +8415.0 + 20 +15585.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +27F4 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +8327.5 + 20 +14895.3125 + 30 +0.0 + 40 +175.0 + 1 +1.10 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +8240.0 + 21 +15037.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +27F5 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7730.0 + 20 +14490.0 + 30 +0.0 + 0 +POINT + 5 +27F6 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7730.0 + 20 +15585.0 + 30 +0.0 + 0 +POINT + 5 +27F7 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8415.0 + 20 +15585.0 + 30 +0.0 + 0 +ENDBLK + 5 +27F8 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D129 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D129 + 1 + + 0 +LINE + 5 +27FA + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +8405.0 + 20 +19981.0 + 30 +0.0 + 11 +8405.0 + 21 +20874.0 + 31 +0.0 + 0 +INSERT + 5 +27FB + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +8405.0 + 20 +19980.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +27FC + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +8405.0 + 20 +20875.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +27FD + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +8317.5 + 20 +20318.125 + 30 +0.0 + 40 +175.0 + 1 +88 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +8230.0 + 21 +20427.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +27FE + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9750.0 + 20 +19980.0 + 30 +0.0 + 0 +POINT + 5 +27FF + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9755.0 + 20 +20875.0 + 30 +0.0 + 0 +POINT + 5 +2800 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8405.0 + 20 +20875.0 + 30 +0.0 + 0 +ENDBLK + 5 +2801 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D130 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D130 + 1 + + 0 +LINE + 5 +2803 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +8405.0 + 20 +20876.0 + 30 +0.0 + 11 +8405.0 + 21 +21749.0 + 31 +0.0 + 0 +INSERT + 5 +2804 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +8405.0 + 20 +20875.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +2805 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +8405.0 + 20 +21750.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +2806 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +8317.5 + 20 +21203.125 + 30 +0.0 + 40 +175.0 + 1 +87 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +8230.0 + 21 +21312.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2807 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9755.0 + 20 +20875.0 + 30 +0.0 + 0 +POINT + 5 +2808 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9740.0 + 20 +21750.0 + 30 +0.0 + 0 +POINT + 5 +2809 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8405.0 + 20 +21750.0 + 30 +0.0 + 0 +ENDBLK + 5 +280A + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D131 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D131 + 1 + + 0 +LINE + 5 +280C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +8405.0 + 20 +17266.0 + 30 +0.0 + 11 +8405.0 + 21 +19979.0 + 31 +0.0 + 0 +INSERT + 5 +280D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +8405.0 + 20 +17265.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +280E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +8405.0 + 20 +19980.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +280F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +8317.5 + 20 +18031.875 + 30 +0.0 + 40 +175.0 + 1 + 2.75 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +8230.0 + 21 +18622.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2810 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9750.0 + 20 +17265.0 + 30 +0.0 + 0 +POINT + 5 +2811 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9750.0 + 20 +19980.0 + 30 +0.0 + 0 +POINT + 5 +2812 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8405.0 + 20 +19980.0 + 30 +0.0 + 0 +ENDBLK + 5 +2813 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D132 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D132 + 1 + + 0 +LINE + 5 +2815 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +15746.0 + 20 +16480.0 + 30 +0.0 + 11 +16374.0 + 21 +16480.0 + 31 +0.0 + 0 +INSERT + 5 +2816 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +15745.0 + 20 +16480.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2817 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16375.0 + 20 +16480.0 + 30 +0.0 + 0 +TEXT + 5 +2818 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +15972.5 + 20 +16567.5 + 30 +0.0 + 40 +175.0 + 1 +61 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +16060.0 + 21 +16655.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2819 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15745.0 + 20 +15815.0 + 30 +0.0 + 0 +POINT + 5 +281A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16375.0 + 20 +15815.0 + 30 +0.0 + 0 +POINT + 5 +281B + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16375.0 + 20 +16480.0 + 30 +0.0 + 0 +ENDBLK + 5 +281C + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D133 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D133 + 1 + + 0 +LINE + 5 +281E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +17386.0 + 20 +16480.0 + 30 +0.0 + 11 +17634.0 + 21 +16480.0 + 31 +0.0 + 0 +INSERT + 5 +281F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +17385.0 + 20 +16480.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2820 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +17635.0 + 20 +16480.0 + 30 +0.0 + 0 +TEXT + 5 +2821 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +17400.625 + 20 +16567.5 + 30 +0.0 + 40 +175.0 + 1 +25 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +17510.0 + 21 +16655.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2822 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17385.0 + 20 +15975.0 + 30 +0.0 + 0 +POINT + 5 +2823 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17635.0 + 20 +16015.0 + 30 +0.0 + 0 +POINT + 5 +2824 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17635.0 + 20 +16480.0 + 30 +0.0 + 0 +ENDBLK + 5 +2825 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D134 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D134 + 1 + + 0 +LINE + 5 +2827 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +16376.0 + 20 +16480.0 + 30 +0.0 + 11 +17384.0 + 21 +16480.0 + 31 +0.0 + 0 +INSERT + 5 +2828 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16375.0 + 20 +16480.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2829 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +17385.0 + 20 +16480.0 + 30 +0.0 + 0 +TEXT + 5 +282A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +16737.8125 + 20 +16567.5 + 30 +0.0 + 40 +175.0 + 1 +1.01 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +16880.0 + 21 +16655.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +282B + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16375.0 + 20 +15815.0 + 30 +0.0 + 0 +POINT + 5 +282C + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17385.0 + 20 +15975.0 + 30 +0.0 + 0 +POINT + 5 +282D + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17385.0 + 20 +16480.0 + 30 +0.0 + 0 +ENDBLK + 5 +282E + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D135 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D135 + 1 + + 0 +LINE + 5 +2830 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +10725.0 + 20 +15741.0 + 30 +0.0 + 11 +10725.0 + 21 +16624.0 + 31 +0.0 + 0 +INSERT + 5 +2831 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +10725.0 + 20 +15740.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +2832 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +10725.0 + 20 +16625.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +2833 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +10637.5 + 20 +15870.625 + 30 +0.0 + 40 +175.0 + 1 +88 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +10550.0 + 21 +15980.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2834 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +10130.0 + 20 +15740.0 + 30 +0.0 + 0 +POINT + 5 +2835 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +10115.0 + 20 +16625.0 + 30 +0.0 + 0 +POINT + 5 +2836 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +10725.0 + 20 +16625.0 + 30 +0.0 + 0 +ENDBLK + 5 +2837 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D136 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D136 + 1 + + 0 +LINE + 5 +2839 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +10106.0 + 20 +16480.0 + 30 +0.0 + 11 +15744.0 + 21 +16480.0 + 31 +0.0 + 0 +INSERT + 5 +283A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +10105.0 + 20 +16480.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +283B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +15745.0 + 20 +16480.0 + 30 +0.0 + 0 +TEXT + 5 +283C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +12728.125 + 20 +16567.5 + 30 +0.0 + 40 +175.0 + 1 +5.63 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +12925.0 + 21 +16655.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +283D + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +10105.0 + 20 +15495.0 + 30 +0.0 + 0 +POINT + 5 +283E + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15745.0 + 20 +15495.0 + 30 +0.0 + 0 +POINT + 5 +283F + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15745.0 + 20 +16480.0 + 30 +0.0 + 0 +ENDBLK + 5 +2840 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D137 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D137 + 1 + + 0 +LINE + 5 +2842 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +18650.0 + 20 +21744.0 + 30 +0.0 + 11 +18650.0 + 21 +18981.0 + 31 +0.0 + 0 +INSERT + 5 +2843 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18650.0 + 20 +21745.0 + 30 +0.0 + 50 +90.0 + 0 +INSERT + 5 +2844 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18650.0 + 20 +18980.0 + 30 +0.0 + 50 +270.0 + 0 +TEXT + 5 +2845 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +18562.5 + 20 +20165.625 + 30 +0.0 + 40 +175.0 + 1 +2.76 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +18475.0 + 21 +20362.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2846 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17990.0 + 20 +21745.0 + 30 +0.0 + 0 +POINT + 5 +2847 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17990.0 + 20 +18980.0 + 30 +0.0 + 0 +POINT + 5 +2848 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +18650.0 + 20 +18980.0 + 30 +0.0 + 0 +ENDBLK + 5 +2849 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D138 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D138 + 1 + + 0 +LINE + 5 +284B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +18650.0 + 20 +18979.0 + 30 +0.0 + 11 +18650.0 + 21 +17491.0 + 31 +0.0 + 0 +INSERT + 5 +284C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18650.0 + 20 +18980.0 + 30 +0.0 + 50 +90.0 + 0 +INSERT + 5 +284D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18650.0 + 20 +17490.0 + 30 +0.0 + 50 +270.0 + 0 +TEXT + 5 +284E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +18562.5 + 20 +18060.0 + 30 +0.0 + 40 +175.0 + 1 +1.49 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +18475.0 + 21 +18235.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +284F + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17990.0 + 20 +18980.0 + 30 +0.0 + 0 +POINT + 5 +2850 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17990.0 + 20 +17490.0 + 30 +0.0 + 0 +POINT + 5 +2851 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +18650.0 + 20 +17490.0 + 30 +0.0 + 0 +ENDBLK + 5 +2852 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D139 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D139 + 1 + + 0 +LINE + 5 +2854 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +15005.0 + 20 +15486.0 + 30 +0.0 + 11 +15005.0 + 21 +15994.0 + 31 +0.0 + 0 +INSERT + 5 +2855 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +15005.0 + 20 +15485.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +2856 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +15005.0 + 20 +15995.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +2857 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +14917.5 + 20 +15641.5625 + 30 +0.0 + 40 +175.0 + 1 +50 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +14830.0 + 21 +15740.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2858 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15005.0 + 20 +15485.0 + 30 +0.0 + 0 +POINT + 5 +2859 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15005.0 + 20 +15995.0 + 30 +0.0 + 0 +POINT + 5 +285A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15005.0 + 20 +15995.0 + 30 +0.0 + 0 +ENDBLK + 5 +285B + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D140 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D140 + 1 + + 0 +LINE + 5 +285D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +15005.0 + 20 +15996.0 + 30 +0.0 + 11 +15005.0 + 21 +17249.0 + 31 +0.0 + 0 +INSERT + 5 +285E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +15005.0 + 20 +15995.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +285F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +15005.0 + 20 +17250.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +2860 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +14917.5 + 20 +16580.0 + 30 +0.0 + 40 +175.0 + 1 +1.26 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +14830.0 + 21 +16755.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2861 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15005.0 + 20 +15995.0 + 30 +0.0 + 0 +POINT + 5 +2862 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15010.0 + 20 +17250.0 + 30 +0.0 + 0 +POINT + 5 +2863 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15005.0 + 20 +17250.0 + 30 +0.0 + 0 +ENDBLK + 5 +2864 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D141 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D141 + 1 + + 0 +LINE + 5 +2866 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +8745.0 + 20 +9611.0 + 30 +0.0 + 11 +8745.0 + 21 +12739.0 + 31 +0.0 + 0 +INSERT + 5 +2867 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +8745.0 + 20 +9610.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +2868 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +8745.0 + 20 +12740.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +2869 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +8657.5 + 20 +11000.0 + 30 +0.0 + 40 +175.0 + 1 +3.12 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +8570.0 + 21 +11175.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +286A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9010.0 + 20 +9610.0 + 30 +0.0 + 0 +POINT + 5 +286B + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9010.0 + 20 +12740.0 + 30 +0.0 + 0 +POINT + 5 +286C + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8745.0 + 20 +12740.0 + 30 +0.0 + 0 +ENDBLK + 5 +286D + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D142 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D142 + 1 + + 0 +LINE + 5 +286F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +8745.0 + 20 +12741.0 + 30 +0.0 + 11 +8745.0 + 21 +12994.0 + 31 +0.0 + 0 +INSERT + 5 +2870 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +8745.0 + 20 +12740.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +2871 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +8745.0 + 20 +12995.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +2872 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +8657.5 + 20 +12758.125 + 30 +0.0 + 40 +175.0 + 1 +25 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +8570.0 + 21 +12867.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2873 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9010.0 + 20 +12740.0 + 30 +0.0 + 0 +POINT + 5 +2874 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9745.0 + 20 +12995.0 + 30 +0.0 + 0 +POINT + 5 +2875 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8745.0 + 20 +12995.0 + 30 +0.0 + 0 +ENDBLK + 5 +2876 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D143 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D143 + 1 + + 0 +LINE + 5 +2878 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +8745.0 + 20 +12996.0 + 30 +0.0 + 11 +8745.0 + 21 +13874.0 + 31 +0.0 + 0 +INSERT + 5 +2879 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +8745.0 + 20 +12995.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +287A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +8745.0 + 20 +13875.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +287B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +8657.5 + 20 +13325.625 + 30 +0.0 + 40 +175.0 + 1 +88 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +8570.0 + 21 +13435.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +287C + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9745.0 + 20 +12995.0 + 30 +0.0 + 0 +POINT + 5 +287D + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9755.0 + 20 +13875.0 + 30 +0.0 + 0 +POINT + 5 +287E + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8745.0 + 20 +13875.0 + 30 +0.0 + 0 +ENDBLK + 5 +287F + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D144 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D144 + 1 + + 0 +LINE + 5 +2881 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +8745.0 + 20 +13876.0 + 30 +0.0 + 11 +8745.0 + 21 +14129.0 + 31 +0.0 + 0 +INSERT + 5 +2882 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +8745.0 + 20 +13875.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +2883 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +8745.0 + 20 +14130.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +2884 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +8657.5 + 20 +13893.125 + 30 +0.0 + 40 +175.0 + 1 +25 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +8570.0 + 21 +14002.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2885 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9755.0 + 20 +13875.0 + 30 +0.0 + 0 +POINT + 5 +2886 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9735.0 + 20 +14130.0 + 30 +0.0 + 0 +POINT + 5 +2887 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8745.0 + 20 +14130.0 + 30 +0.0 + 0 +ENDBLK + 5 +2888 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D145 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D145 + 1 + + 0 +LINE + 5 +288A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9371.0 + 20 +13450.0 + 30 +0.0 + 11 +9744.0 + 21 +13450.0 + 31 +0.0 + 0 +INSERT + 5 +288B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9370.0 + 20 +13450.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +288C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9745.0 + 20 +13450.0 + 30 +0.0 + 0 +TEXT + 5 +288D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9448.125 + 20 +13537.5 + 30 +0.0 + 40 +175.0 + 1 +37 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +9557.5 + 21 +13625.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +288E + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9370.0 + 20 +12745.0 + 30 +0.0 + 0 +POINT + 5 +288F + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9745.0 + 20 +12745.0 + 30 +0.0 + 0 +POINT + 5 +2890 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9745.0 + 20 +13450.0 + 30 +0.0 + 0 +ENDBLK + 5 +2891 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D146 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D146 + 1 + + 0 +LINE + 5 +2893 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +12616.0 + 20 +11975.0 + 30 +0.0 + 11 +13247.5 + 21 +11975.0 + 31 +0.0 + 0 +LINE + 5 +2894 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +13879.0 + 20 +11975.0 + 30 +0.0 + 11 +13247.5 + 21 +11975.0 + 31 +0.0 + 0 +INSERT + 5 +2895 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +12615.0 + 20 +11975.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2896 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +13880.0 + 20 +11975.0 + 30 +0.0 + 0 +TEXT + 5 +2897 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +12850.0 + 20 +12062.5 + 30 +0.0 + 40 +175.0 + 1 +1.26 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +13025.0 + 21 +12150.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2898 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +12615.0 + 20 +12370.0 + 30 +0.0 + 0 +POINT + 5 +2899 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +13880.0 + 20 +11955.0 + 30 +0.0 + 0 +POINT + 5 +289A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +13880.0 + 20 +11975.0 + 30 +0.0 + 0 +ENDBLK + 5 +289B + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D147 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D147 + 1 + + 0 +LINE + 5 +289D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +13590.0 + 20 +9611.0 + 30 +0.0 + 11 +13590.0 + 21 +12374.0 + 31 +0.0 + 0 +INSERT + 5 +289E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +13590.0 + 20 +9610.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +289F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +13590.0 + 20 +12375.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +28A0 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +13502.5 + 20 +10795.625 + 30 +0.0 + 40 +175.0 + 1 +2.76 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +13415.0 + 21 +10992.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +28A1 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +13775.0 + 20 +9610.0 + 30 +0.0 + 0 +POINT + 5 +28A2 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +13775.0 + 20 +12375.0 + 30 +0.0 + 0 +POINT + 5 +28A3 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +13590.0 + 20 +12375.0 + 30 +0.0 + 0 +ENDBLK + 5 +28A4 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D148 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D148 + 1 + + 0 +LINE + 5 +28A6 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +13590.0 + 20 +12376.0 + 30 +0.0 + 11 +13590.0 + 21 +12744.0 + 31 +0.0 + 0 +INSERT + 5 +28A7 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +13590.0 + 20 +12375.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +28A8 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +13590.0 + 20 +12745.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +28A9 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +13502.5 + 20 +12450.625 + 30 +0.0 + 40 +175.0 + 1 +36 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +13415.0 + 21 +12560.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +28AA + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +13775.0 + 20 +12375.0 + 30 +0.0 + 0 +POINT + 5 +28AB + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +13875.0 + 20 +12745.0 + 30 +0.0 + 0 +POINT + 5 +28AC + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +13590.0 + 20 +12745.0 + 30 +0.0 + 0 +ENDBLK + 5 +28AD + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D149 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D149 + 1 + + 0 +LINE + 5 +28AF + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +13590.0 + 20 +12746.0 + 30 +0.0 + 11 +13590.0 + 21 +13499.0 + 31 +0.0 + 0 +INSERT + 5 +28B0 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +13590.0 + 20 +12745.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +28B1 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +13590.0 + 20 +13500.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +28B2 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +13502.5 + 20 +13013.125 + 30 +0.0 + 40 +175.0 + 1 +76 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +13415.0 + 21 +13122.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +28B3 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +13880.0 + 20 +12745.0 + 30 +0.0 + 0 +POINT + 5 +28B4 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +13880.0 + 20 +13500.0 + 30 +0.0 + 0 +POINT + 5 +28B5 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +13590.0 + 20 +13500.0 + 30 +0.0 + 0 +ENDBLK + 5 +28B6 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D150 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D150 + 1 + + 0 +LINE + 5 +28B8 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +13590.0 + 20 +13501.0 + 30 +0.0 + 11 +13590.0 + 21 +13869.0 + 31 +0.0 + 0 +INSERT + 5 +28B9 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +13590.0 + 20 +13500.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +28BA + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +13590.0 + 20 +13870.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +28BB + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +13502.5 + 20 +13575.625 + 30 +0.0 + 40 +175.0 + 1 +36 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +13415.0 + 21 +13685.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +28BC + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +13880.0 + 20 +13500.0 + 30 +0.0 + 0 +POINT + 5 +28BD + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +14125.0 + 20 +13870.0 + 30 +0.0 + 0 +POINT + 5 +28BE + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +13590.0 + 20 +13870.0 + 30 +0.0 + 0 +ENDBLK + 5 +28BF + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D151 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D151 + 1 + + 0 +LINE + 5 +28C1 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +14484.0 + 20 +11975.0 + 30 +0.0 + 11 +14483.0 + 21 +11975.0 + 31 +0.0 + 0 +LINE + 5 +28C2 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +14621.0 + 20 +11975.0 + 30 +0.0 + 11 +14622.0 + 21 +11975.0 + 31 +0.0 + 0 +LINE + 5 +28C3 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +14622.0 + 20 +11975.0 + 30 +0.0 + 11 +14797.0 + 21 +11975.0 + 31 +0.0 + 0 +INSERT + 5 +28C4 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +14485.0 + 20 +11975.0 + 30 +0.0 + 0 +INSERT + 5 +28C5 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +14620.0 + 20 +11975.0 + 30 +0.0 + 50 +180.0 + 0 +TEXT + 5 +28C6 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +14622.0 + 20 +12062.5 + 30 +0.0 + 40 +175.0 + 1 +12 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +14709.5 + 21 +12150.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +28C7 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +14485.0 + 20 +13495.0 + 30 +0.0 + 0 +POINT + 5 +28C8 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +14620.0 + 20 +13495.0 + 30 +0.0 + 0 +POINT + 5 +28C9 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +14620.0 + 20 +11975.0 + 30 +0.0 + 0 +ENDBLK + 5 +28CA + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D152 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D152 + 1 + + 0 +LINE + 5 +28CC + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +15506.0 + 20 +11975.0 + 30 +0.0 + 11 +17619.0 + 21 +11975.0 + 31 +0.0 + 0 +INSERT + 5 +28CD + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +15505.0 + 20 +11975.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +28CE + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +17620.0 + 20 +11975.0 + 30 +0.0 + 0 +TEXT + 5 +28CF + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +16387.5 + 20 +12062.5 + 30 +0.0 + 40 +175.0 + 1 +2.12 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +16562.5 + 21 +12150.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +28D0 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15505.0 + 20 +11975.0 + 30 +0.0 + 0 +POINT + 5 +28D1 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17620.0 + 20 +11975.0 + 30 +0.0 + 0 +POINT + 5 +28D2 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17620.0 + 20 +11975.0 + 30 +0.0 + 0 +ENDBLK + 5 +28D3 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D153 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D153 + 1 + + 0 +LINE + 5 +28D5 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +16955.0 + 20 +9626.0 + 30 +0.0 + 11 +16955.0 + 21 +13499.0 + 31 +0.0 + 0 +INSERT + 5 +28D6 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16955.0 + 20 +9625.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +28D7 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16955.0 + 20 +13500.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +28D8 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +16867.5 + 20 +10923.125 + 30 +0.0 + 40 +175.0 + 1 +3.88 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +16780.0 + 21 +11120.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +28D9 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17360.0 + 20 +9625.0 + 30 +0.0 + 0 +POINT + 5 +28DA + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17360.0 + 20 +13500.0 + 30 +0.0 + 0 +POINT + 5 +28DB + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16955.0 + 20 +13500.0 + 30 +0.0 + 0 +ENDBLK + 5 +28DC + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D154 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D154 + 1 + + 0 +LINE + 5 +28DE + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +16850.0 + 20 +15634.0 + 30 +0.0 + 11 +16850.0 + 21 +15491.0 + 31 +0.0 + 0 +INSERT + 5 +28DF + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16850.0 + 20 +15635.0 + 30 +0.0 + 50 +90.0 + 0 +INSERT + 5 +28E0 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16850.0 + 20 +15490.0 + 30 +0.0 + 50 +270.0 + 0 +TEXT + 5 +28E1 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +16762.5 + 20 +15667.5 + 30 +0.0 + 40 +175.0 + 1 +13 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +16675.0 + 21 +15755.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +28E2 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16120.0 + 20 +15635.0 + 30 +0.0 + 0 +POINT + 5 +28E3 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16120.0 + 20 +15490.0 + 30 +0.0 + 0 +POINT + 5 +28E4 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16850.0 + 20 +15490.0 + 30 +0.0 + 0 +ENDBLK + 5 +28E5 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D155 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D155 + 1 + + 0 +LINE + 5 +28E7 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +16850.0 + 20 +13974.0 + 30 +0.0 + 11 +16850.0 + 21 +13866.0 + 31 +0.0 + 0 +INSERT + 5 +28E8 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16850.0 + 20 +13975.0 + 30 +0.0 + 50 +90.0 + 0 +INSERT + 5 +28E9 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16850.0 + 20 +13865.0 + 30 +0.0 + 50 +270.0 + 0 +TEXT + 5 +28EA + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +16762.5 + 20 +14012.5 + 30 +0.0 + 40 +175.0 + 1 +12 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +16675.0 + 21 +14100.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +28EB + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16125.0 + 20 +13975.0 + 30 +0.0 + 0 +POINT + 5 +28EC + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16120.0 + 20 +13865.0 + 30 +0.0 + 0 +POINT + 5 +28ED + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16850.0 + 20 +13865.0 + 30 +0.0 + 0 +ENDBLK + 5 +28EE + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D156 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D156 + 1 + + 0 +LINE + 5 +28F0 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +15746.0 + 20 +14495.0 + 30 +0.0 + 11 +16104.0 + 21 +14495.0 + 31 +0.0 + 0 +INSERT + 5 +28F1 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +15745.0 + 20 +14495.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +28F2 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16105.0 + 20 +14495.0 + 30 +0.0 + 0 +TEXT + 5 +28F3 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +15815.625 + 20 +14582.5 + 30 +0.0 + 40 +175.0 + 1 +36 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +15925.0 + 21 +14670.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +28F4 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15745.0 + 20 +13980.0 + 30 +0.0 + 0 +POINT + 5 +28F5 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16105.0 + 20 +13980.0 + 30 +0.0 + 0 +POINT + 5 +28F6 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16105.0 + 20 +14495.0 + 30 +0.0 + 0 +ENDBLK + 5 +28F7 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D157 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D157 + 1 + + 0 +LINE + 5 +28F9 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +21880.0 + 20 +13914.0 + 30 +0.0 + 11 +21880.0 + 21 +9626.0 + 31 +0.0 + 0 +INSERT + 5 +28FA + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +21880.0 + 20 +13915.0 + 30 +0.0 + 50 +90.0 + 0 +INSERT + 5 +28FB + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +21880.0 + 20 +9625.0 + 30 +0.0 + 50 +270.0 + 0 +TEXT + 5 +28FC + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +21792.5 + 20 +11584.0625 + 30 +0.0 + 40 +175.0 + 1 +4.30 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +21705.0 + 21 +11770.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +28FD + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +21565.0 + 20 +13915.0 + 30 +0.0 + 0 +POINT + 5 +28FE + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +21855.0 + 20 +9625.0 + 30 +0.0 + 0 +POINT + 5 +28FF + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +21880.0 + 20 +9625.0 + 30 +0.0 + 0 +ENDBLK + 5 +2900 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D158 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D158 + 1 + + 0 +LINE + 5 +2902 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +21880.0 + 20 +14044.0 + 30 +0.0 + 11 +21880.0 + 21 +13916.0 + 31 +0.0 + 0 +INSERT + 5 +2903 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +21880.0 + 20 +14045.0 + 30 +0.0 + 50 +90.0 + 0 +INSERT + 5 +2904 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +21880.0 + 20 +13915.0 + 30 +0.0 + 50 +270.0 + 0 +TEXT + 5 +2905 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +21792.5 + 20 +13627.5 + 30 +0.0 + 40 +175.0 + 1 +12 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +21705.0 + 21 +13715.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2906 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +21560.0 + 20 +14045.0 + 30 +0.0 + 0 +POINT + 5 +2907 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +21565.0 + 20 +13915.0 + 30 +0.0 + 0 +POINT + 5 +2908 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +21880.0 + 20 +13915.0 + 30 +0.0 + 0 +ENDBLK + 5 +2909 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D159 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D159 + 1 + + 0 +LINE + 5 +290B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +21880.0 + 20 +15249.0 + 30 +0.0 + 11 +21880.0 + 21 +14246.0 + 31 +0.0 + 0 +INSERT + 5 +290C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +21880.0 + 20 +15250.0 + 30 +0.0 + 50 +90.0 + 0 +INSERT + 5 +290D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +21880.0 + 20 +14245.0 + 30 +0.0 + 50 +270.0 + 0 +TEXT + 5 +290E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +21792.5 + 20 +14772.8125 + 30 +0.0 + 40 +175.0 + 1 +1.01 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +21705.0 + 21 +14915.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +290F + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +21235.0 + 20 +15250.0 + 30 +0.0 + 0 +POINT + 5 +2910 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +21225.0 + 20 +14245.0 + 30 +0.0 + 0 +POINT + 5 +2911 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +21880.0 + 20 +14245.0 + 30 +0.0 + 0 +ENDBLK + 5 +2912 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D160 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D160 + 1 + + 0 +LINE + 5 +2914 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +21880.0 + 20 +14244.0 + 30 +0.0 + 11 +21880.0 + 21 +14046.0 + 31 +0.0 + 0 +INSERT + 5 +2915 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +21880.0 + 20 +14245.0 + 30 +0.0 + 50 +90.0 + 0 +INSERT + 5 +2916 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +21880.0 + 20 +14045.0 + 30 +0.0 + 50 +270.0 + 0 +TEXT + 5 +2917 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +21792.5 + 20 +14291.5625 + 30 +0.0 + 40 +175.0 + 1 +20 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +21705.0 + 21 +14390.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2918 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +21225.0 + 20 +14245.0 + 30 +0.0 + 0 +POINT + 5 +2919 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +21560.0 + 20 +14045.0 + 30 +0.0 + 0 +POINT + 5 +291A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +21880.0 + 20 +14045.0 + 30 +0.0 + 0 +ENDBLK + 5 +291B + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D161 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D161 + 1 + + 0 +LINE + 5 +291D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +21880.0 + 20 +15634.0 + 30 +0.0 + 11 +21880.0 + 21 +15251.0 + 31 +0.0 + 0 +INSERT + 5 +291E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +21880.0 + 20 +15635.0 + 30 +0.0 + 50 +90.0 + 0 +INSERT + 5 +291F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +21880.0 + 20 +15250.0 + 30 +0.0 + 50 +270.0 + 0 +TEXT + 5 +2920 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +21792.5 + 20 +15280.625 + 30 +0.0 + 40 +175.0 + 1 +37 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +21705.0 + 21 +15390.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2921 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +21235.0 + 20 +15635.0 + 30 +0.0 + 0 +POINT + 5 +2922 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +21235.0 + 20 +15250.0 + 30 +0.0 + 0 +POINT + 5 +2923 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +21880.0 + 20 +15250.0 + 30 +0.0 + 0 +ENDBLK + 5 +2924 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D162 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D162 + 1 + + 0 +LINE + 5 +2926 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +22456.0 + 20 +12880.0 + 30 +0.0 + 11 +22849.0 + 21 +12880.0 + 31 +0.0 + 0 +INSERT + 5 +2927 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +22455.0 + 20 +12880.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2928 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +22850.0 + 20 +12880.0 + 30 +0.0 + 0 +TEXT + 5 +2929 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +22554.0625 + 20 +12967.5 + 30 +0.0 + 40 +175.0 + 1 +40 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +22652.5 + 21 +13055.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +292A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +22455.0 + 20 +13925.0 + 30 +0.0 + 0 +POINT + 5 +292B + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +22850.0 + 20 +12875.0 + 30 +0.0 + 0 +POINT + 5 +292C + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +22850.0 + 20 +12880.0 + 30 +0.0 + 0 +ENDBLK + 5 +292D + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D163 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D163 + 1 + + 0 +LINE + 5 +292F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +21566.0 + 20 +12880.0 + 30 +0.0 + 11 +22454.0 + 21 +12880.0 + 31 +0.0 + 0 +INSERT + 5 +2930 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +21565.0 + 20 +12880.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2931 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +22455.0 + 20 +12880.0 + 30 +0.0 + 0 +TEXT + 5 +2932 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +22030.625 + 20 +12967.5 + 30 +0.0 + 40 +175.0 + 1 +88 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +22140.0 + 21 +13055.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2933 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +21565.0 + 20 +13920.0 + 30 +0.0 + 0 +POINT + 5 +2934 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +22455.0 + 20 +13925.0 + 30 +0.0 + 0 +POINT + 5 +2935 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +22455.0 + 20 +12880.0 + 30 +0.0 + 0 +ENDBLK + 5 +2936 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D164 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D164 + 1 + + 0 +LINE + 5 +2938 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +21236.0 + 20 +12880.0 + 30 +0.0 + 11 +21564.0 + 21 +12880.0 + 31 +0.0 + 0 +INSERT + 5 +2939 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +21235.0 + 20 +12880.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +293A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +21565.0 + 20 +12880.0 + 30 +0.0 + 0 +TEXT + 5 +293B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +21270.625 + 20 +12967.5 + 30 +0.0 + 40 +175.0 + 1 +32 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +21380.0 + 21 +13055.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +293C + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +21235.0 + 20 +13920.0 + 30 +0.0 + 0 +POINT + 5 +293D + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +21565.0 + 20 +13920.0 + 30 +0.0 + 0 +POINT + 5 +293E + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +21565.0 + 20 +12880.0 + 30 +0.0 + 0 +ENDBLK + 5 +293F + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D165 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D165 + 1 + + 0 +LINE + 5 +2941 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +14621.0 + 20 +11975.0 + 30 +0.0 + 11 +15062.5 + 21 +11975.0 + 31 +0.0 + 0 +LINE + 5 +2942 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +15504.0 + 20 +11975.0 + 30 +0.0 + 11 +15062.5 + 21 +11975.0 + 31 +0.0 + 0 +INSERT + 5 +2943 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +14620.0 + 20 +11975.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2944 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +15505.0 + 20 +11975.0 + 30 +0.0 + 0 +TEXT + 5 +2945 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +15030.625 + 20 +12062.5 + 30 +0.0 + 40 +175.0 + 1 +88 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +15140.0 + 21 +12150.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2946 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +14620.0 + 20 +13495.0 + 30 +0.0 + 0 +POINT + 5 +2947 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15505.0 + 20 +11975.0 + 30 +0.0 + 0 +POINT + 5 +2948 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15505.0 + 20 +11975.0 + 30 +0.0 + 0 +ENDBLK + 5 +2949 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D166 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D166 + 1 + + 0 +LINE + 5 +294B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +16850.0 + 20 +15119.0 + 30 +0.0 + 11 +16850.0 + 21 +14996.0 + 31 +0.0 + 0 +INSERT + 5 +294C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16850.0 + 20 +15120.0 + 30 +0.0 + 50 +90.0 + 0 +INSERT + 5 +294D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16850.0 + 20 +14995.0 + 30 +0.0 + 50 +270.0 + 0 +TEXT + 5 +294E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +16762.5 + 20 +15147.5 + 30 +0.0 + 40 +175.0 + 1 +12 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +16675.0 + 21 +15235.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +294F + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15740.0 + 20 +15120.0 + 30 +0.0 + 0 +POINT + 5 +2950 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16110.0 + 20 +14995.0 + 30 +0.0 + 0 +POINT + 5 +2951 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16850.0 + 20 +14995.0 + 30 +0.0 + 0 +ENDBLK + 5 +2952 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D167 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D167 + 1 + + 0 +LINE + 5 +2954 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +16850.0 + 20 +14994.0 + 30 +0.0 + 11 +16850.0 + 21 +13976.0 + 31 +0.0 + 0 +INSERT + 5 +2955 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16850.0 + 20 +14995.0 + 30 +0.0 + 50 +90.0 + 0 +INSERT + 5 +2956 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16850.0 + 20 +13975.0 + 30 +0.0 + 50 +270.0 + 0 +TEXT + 5 +2957 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +16762.5 + 20 +14452.8125 + 30 +0.0 + 40 +175.0 + 1 +1.01 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +16675.0 + 21 +14595.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2958 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16110.0 + 20 +14995.0 + 30 +0.0 + 0 +POINT + 5 +2959 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16125.0 + 20 +13975.0 + 30 +0.0 + 0 +POINT + 5 +295A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16850.0 + 20 +13975.0 + 30 +0.0 + 0 +ENDBLK + 5 +295B + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D168 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D168 + 1 + + 0 +LINE + 5 +295D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +15005.0 + 20 +15484.0 + 30 +0.0 + 11 +15005.0 + 21 +15116.0 + 31 +0.0 + 0 +INSERT + 5 +295E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +15005.0 + 20 +15485.0 + 30 +0.0 + 50 +90.0 + 0 +INSERT + 5 +295F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +15005.0 + 20 +15115.0 + 30 +0.0 + 50 +270.0 + 0 +TEXT + 5 +2960 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +14902.5 + 20 +14765.625 + 30 +0.0 + 40 +175.0 + 1 +36 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +14815.0 + 21 +14875.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2961 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15005.0 + 20 +15485.0 + 30 +0.0 + 0 +POINT + 5 +2962 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15005.0 + 20 +15115.0 + 30 +0.0 + 0 +POINT + 5 +2963 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15005.0 + 20 +15115.0 + 30 +0.0 + 0 +ENDBLK + 5 +2964 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D169 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D169 + 1 + + 0 +LINE + 5 +2966 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +5001.0 + 20 +6000.0 + 30 +0.0 + 11 +7734.0 + 21 +6000.0 + 31 +0.0 + 0 +INSERT + 5 +2967 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +5000.0 + 20 +6000.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2968 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +7735.0 + 20 +6000.0 + 30 +0.0 + 0 +TEXT + 5 +2969 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +6170.625 + 20 +6087.5 + 30 +0.0 + 40 +175.0 + 1 +2.74 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +6367.5 + 21 +6175.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +296A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5000.0 + 20 +9250.0 + 30 +0.0 + 0 +POINT + 5 +296B + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7735.0 + 20 +9250.0 + 30 +0.0 + 0 +POINT + 5 +296C + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7735.0 + 20 +6000.0 + 30 +0.0 + 0 +ENDBLK + 5 +296D + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D170 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D170 + 1 + + 0 +LINE + 5 +296F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +7736.0 + 20 +6000.0 + 30 +0.0 + 11 +8749.0 + 21 +6000.0 + 31 +0.0 + 0 +INSERT + 5 +2970 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +7735.0 + 20 +6000.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2971 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +8750.0 + 20 +6000.0 + 30 +0.0 + 0 +TEXT + 5 +2972 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +8100.3125 + 20 +6087.5 + 30 +0.0 + 40 +175.0 + 1 +1.01 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +8242.5 + 21 +6175.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2973 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7735.0 + 20 +9250.0 + 30 +0.0 + 0 +POINT + 5 +2974 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8750.0 + 20 +9275.0 + 30 +0.0 + 0 +POINT + 5 +2975 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8750.0 + 20 +6000.0 + 30 +0.0 + 0 +ENDBLK + 5 +2976 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D171 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D171 + 1 + + 0 +LINE + 5 +2978 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +8751.0 + 20 +6000.0 + 30 +0.0 + 11 +9864.0 + 21 +6000.0 + 31 +0.0 + 0 +INSERT + 5 +2979 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +8750.0 + 20 +6000.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +297A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9865.0 + 20 +6000.0 + 30 +0.0 + 0 +TEXT + 5 +297B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9176.25 + 20 +6087.5 + 30 +0.0 + 40 +175.0 + 1 +1.11 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +9307.5 + 21 +6175.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +297C + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8750.0 + 20 +9275.0 + 30 +0.0 + 0 +POINT + 5 +297D + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9865.0 + 20 +9460.0 + 30 +0.0 + 0 +POINT + 5 +297E + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9865.0 + 20 +6000.0 + 30 +0.0 + 0 +ENDBLK + 5 +297F + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D172 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D172 + 1 + + 0 +LINE + 5 +2981 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9866.0 + 20 +6000.0 + 30 +0.0 + 11 +11239.0 + 21 +6000.0 + 31 +0.0 + 0 +INSERT + 5 +2982 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9865.0 + 20 +6000.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2983 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +11240.0 + 20 +6000.0 + 30 +0.0 + 0 +TEXT + 5 +2984 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +10377.5 + 20 +6087.5 + 30 +0.0 + 40 +175.0 + 1 +1.38 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +10552.5 + 21 +6175.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2985 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9865.0 + 20 +9460.0 + 30 +0.0 + 0 +POINT + 5 +2986 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +11240.0 + 20 +9435.0 + 30 +0.0 + 0 +POINT + 5 +2987 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +11240.0 + 20 +6000.0 + 30 +0.0 + 0 +ENDBLK + 5 +2988 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D173 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D173 + 1 + + 0 +LINE + 5 +298A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +11241.0 + 20 +6000.0 + 30 +0.0 + 11 +16109.0 + 21 +6000.0 + 31 +0.0 + 0 +INSERT + 5 +298B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +11240.0 + 20 +6000.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +298C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16110.0 + 20 +6000.0 + 30 +0.0 + 0 +TEXT + 5 +298D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +13478.125 + 20 +6087.5 + 30 +0.0 + 40 +175.0 + 1 +4.86 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +13675.0 + 21 +6175.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +298E + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +11240.0 + 20 +9435.0 + 30 +0.0 + 0 +POINT + 5 +298F + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16110.0 + 20 +9380.0 + 30 +0.0 + 0 +POINT + 5 +2990 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16110.0 + 20 +6000.0 + 30 +0.0 + 0 +ENDBLK + 5 +2991 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D174 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D174 + 1 + + 0 +LINE + 5 +2993 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +16111.0 + 20 +6000.0 + 30 +0.0 + 11 +17369.0 + 21 +6000.0 + 31 +0.0 + 0 +INSERT + 5 +2994 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16110.0 + 20 +6000.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2995 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +17370.0 + 20 +6000.0 + 30 +0.0 + 0 +TEXT + 5 +2996 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +16565.0 + 20 +6087.5 + 30 +0.0 + 40 +175.0 + 1 +1.26 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +16740.0 + 21 +6175.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2997 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16110.0 + 20 +9380.0 + 30 +0.0 + 0 +POINT + 5 +2998 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17370.0 + 20 +9460.0 + 30 +0.0 + 0 +POINT + 5 +2999 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17370.0 + 20 +6000.0 + 30 +0.0 + 0 +ENDBLK + 5 +299A + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D175 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D175 + 1 + + 0 +LINE + 5 +299C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +17371.0 + 20 +6000.0 + 30 +0.0 + 11 +18494.0 + 21 +6000.0 + 31 +0.0 + 0 +INSERT + 5 +299D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +17370.0 + 20 +6000.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +299E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18495.0 + 20 +6000.0 + 30 +0.0 + 0 +TEXT + 5 +299F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +17801.25 + 20 +6087.5 + 30 +0.0 + 40 +175.0 + 1 +1.11 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +17932.5 + 21 +6175.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +29A0 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17370.0 + 20 +9460.0 + 30 +0.0 + 0 +POINT + 5 +29A1 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +18495.0 + 20 +9420.0 + 30 +0.0 + 0 +POINT + 5 +29A2 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +18495.0 + 20 +6000.0 + 30 +0.0 + 0 +ENDBLK + 5 +29A3 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D176 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D176 + 1 + + 0 +LINE + 5 +29A5 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +18496.0 + 20 +6000.0 + 30 +0.0 + 11 +20369.0 + 21 +6000.0 + 31 +0.0 + 0 +INSERT + 5 +29A6 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18495.0 + 20 +6000.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +29A7 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +20370.0 + 20 +6000.0 + 30 +0.0 + 0 +TEXT + 5 +29A8 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +19257.5 + 20 +6087.5 + 30 +0.0 + 40 +175.0 + 1 +1.88 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +19432.5 + 21 +6175.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +29A9 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +18495.0 + 20 +9420.0 + 30 +0.0 + 0 +POINT + 5 +29AA + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +20370.0 + 20 +9390.0 + 30 +0.0 + 0 +POINT + 5 +29AB + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +20370.0 + 20 +6000.0 + 30 +0.0 + 0 +ENDBLK + 5 +29AC + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D177 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D177 + 1 + + 0 +LINE + 5 +29AE + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +20371.0 + 20 +6000.0 + 30 +0.0 + 11 +21369.0 + 21 +6000.0 + 31 +0.0 + 0 +INSERT + 5 +29AF + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +20370.0 + 20 +6000.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +29B0 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +21370.0 + 20 +6000.0 + 30 +0.0 + 0 +TEXT + 5 +29B1 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +20760.625 + 20 +6087.5 + 30 +0.0 + 40 +175.0 + 1 +99 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +20870.0 + 21 +6175.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +29B2 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +20370.0 + 20 +9390.0 + 30 +0.0 + 0 +POINT + 5 +29B3 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +21370.0 + 20 +9355.0 + 30 +0.0 + 0 +POINT + 5 +29B4 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +21370.0 + 20 +6000.0 + 30 +0.0 + 0 +ENDBLK + 5 +29B5 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D178 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D178 + 1 + + 0 +LINE + 5 +29B7 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +21371.0 + 20 +6000.0 + 30 +0.0 + 11 +21869.0 + 21 +6000.0 + 31 +0.0 + 0 +INSERT + 5 +29B8 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +21370.0 + 20 +6000.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +29B9 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +21870.0 + 20 +6000.0 + 30 +0.0 + 0 +TEXT + 5 +29BA + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +21532.5 + 20 +6087.5 + 30 +0.0 + 40 +175.0 + 1 +51 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +21620.0 + 21 +6175.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +29BB + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +21370.0 + 20 +9355.0 + 30 +0.0 + 0 +POINT + 5 +29BC + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +21870.0 + 20 +9360.0 + 30 +0.0 + 0 +POINT + 5 +29BD + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +21870.0 + 20 +6000.0 + 30 +0.0 + 0 +ENDBLK + 5 +29BE + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D179 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D179 + 1 + + 0 +LINE + 5 +29C0 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +21871.0 + 20 +6000.0 + 30 +0.0 + 11 +23239.0 + 21 +6000.0 + 31 +0.0 + 0 +INSERT + 5 +29C1 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +21870.0 + 20 +6000.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +29C2 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +23240.0 + 20 +6000.0 + 30 +0.0 + 0 +TEXT + 5 +29C3 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +22380.0 + 20 +6087.5 + 30 +0.0 + 40 +175.0 + 1 +1.36 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +22555.0 + 21 +6175.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +29C4 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +21870.0 + 20 +9360.0 + 30 +0.0 + 0 +POINT + 5 +29C5 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +23240.0 + 20 +9370.0 + 30 +0.0 + 0 +POINT + 5 +29C6 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +23240.0 + 20 +6000.0 + 30 +0.0 + 0 +ENDBLK + 5 +29C7 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D180 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D180 + 1 + + 0 +LINE + 5 +29C9 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +23241.0 + 20 +6000.0 + 30 +0.0 + 11 +25374.0 + 21 +6000.0 + 31 +0.0 + 0 +INSERT + 5 +29CA + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +23240.0 + 20 +6000.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +29CB + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +25375.0 + 20 +6000.0 + 30 +0.0 + 0 +TEXT + 5 +29CC + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +24132.5 + 20 +6087.5 + 30 +0.0 + 40 +175.0 + 1 +2.13 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +24307.5 + 21 +6175.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +29CD + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +23240.0 + 20 +9370.0 + 30 +0.0 + 0 +POINT + 5 +29CE + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +25375.0 + 20 +9440.0 + 30 +0.0 + 0 +POINT + 5 +29CF + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +25375.0 + 20 +6000.0 + 30 +0.0 + 0 +ENDBLK + 5 +29D0 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D181 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D181 + 1 + + 0 +LINE + 5 +29D2 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +25376.0 + 20 +6000.0 + 30 +0.0 + 11 +26739.0 + 21 +6000.0 + 31 +0.0 + 0 +INSERT + 5 +29D3 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +25375.0 + 20 +6000.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +29D4 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +26740.0 + 20 +6000.0 + 30 +0.0 + 0 +TEXT + 5 +29D5 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +25882.5 + 20 +6087.5 + 30 +0.0 + 40 +175.0 + 1 +1.36 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +26057.5 + 21 +6175.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +29D6 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +25375.0 + 20 +9440.0 + 30 +0.0 + 0 +POINT + 5 +29D7 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26740.0 + 20 +9330.0 + 30 +0.0 + 0 +POINT + 5 +29D8 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26740.0 + 20 +6000.0 + 30 +0.0 + 0 +ENDBLK + 5 +29D9 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D182 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D182 + 1 + + 0 +LINE + 5 +29DB + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +5001.0 + 20 +5300.0 + 30 +0.0 + 11 +5364.0 + 21 +5300.0 + 31 +0.0 + 0 +INSERT + 5 +29DC + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +5000.0 + 20 +5300.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +29DD + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +5365.0 + 20 +5300.0 + 30 +0.0 + 0 +TEXT + 5 +29DE + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +5073.125 + 20 +5387.5 + 30 +0.0 + 40 +175.0 + 1 +36 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +5182.5 + 21 +5475.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +29DF + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5000.0 + 20 +9250.0 + 30 +0.0 + 0 +POINT + 5 +29E0 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5365.0 + 20 +9250.0 + 30 +0.0 + 0 +POINT + 5 +29E1 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5365.0 + 20 +5300.0 + 30 +0.0 + 0 +ENDBLK + 5 +29E2 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D183 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D183 + 1 + + 0 +LINE + 5 +29E4 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +5366.0 + 20 +5300.0 + 30 +0.0 + 11 +9374.0 + 21 +5300.0 + 31 +0.0 + 0 +INSERT + 5 +29E5 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +5365.0 + 20 +5300.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +29E6 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9375.0 + 20 +5300.0 + 30 +0.0 + 0 +TEXT + 5 +29E7 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +7205.9375 + 20 +5387.5 + 30 +0.0 + 40 +175.0 + 1 +4.01 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +7370.0 + 21 +5475.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +29E8 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5365.0 + 20 +9250.0 + 30 +0.0 + 0 +POINT + 5 +29E9 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9375.0 + 20 +9645.0 + 30 +0.0 + 0 +POINT + 5 +29EA + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9375.0 + 20 +5300.0 + 30 +0.0 + 0 +ENDBLK + 5 +29EB + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D184 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D184 + 1 + + 0 +LINE + 5 +29ED + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9751.0 + 20 +5300.0 + 30 +0.0 + 11 +14124.0 + 21 +5300.0 + 31 +0.0 + 0 +INSERT + 5 +29EE + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9750.0 + 20 +5300.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +29EF + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +14125.0 + 20 +5300.0 + 30 +0.0 + 0 +TEXT + 5 +29F0 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +11740.625 + 20 +5387.5 + 30 +0.0 + 40 +175.0 + 1 +4.38 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +11937.5 + 21 +5475.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +29F1 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9750.0 + 20 +9635.0 + 30 +0.0 + 0 +POINT + 5 +29F2 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +14125.0 + 20 +9650.0 + 30 +0.0 + 0 +POINT + 5 +29F3 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +14125.0 + 20 +5300.0 + 30 +0.0 + 0 +ENDBLK + 5 +29F4 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D185 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D185 + 1 + + 0 +LINE + 5 +29F6 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +14126.0 + 20 +5300.0 + 30 +0.0 + 11 +14499.0 + 21 +5300.0 + 31 +0.0 + 0 +INSERT + 5 +29F7 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +14125.0 + 20 +5300.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +29F8 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +14500.0 + 20 +5300.0 + 30 +0.0 + 0 +TEXT + 5 +29F9 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +14203.125 + 20 +5387.5 + 30 +0.0 + 40 +175.0 + 1 +36 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +14312.5 + 21 +5475.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +29FA + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +14125.0 + 20 +9650.0 + 30 +0.0 + 0 +POINT + 5 +29FB + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +14500.0 + 20 +9660.0 + 30 +0.0 + 0 +POINT + 5 +29FC + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +14500.0 + 20 +5300.0 + 30 +0.0 + 0 +ENDBLK + 5 +29FD + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D186 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D186 + 1 + + 0 +LINE + 5 +29FF + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +14501.0 + 20 +5300.0 + 30 +0.0 + 11 +17629.0 + 21 +5300.0 + 31 +0.0 + 0 +INSERT + 5 +2A00 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +14500.0 + 20 +5300.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2A01 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +17630.0 + 20 +5300.0 + 30 +0.0 + 0 +TEXT + 5 +2A02 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +15890.0 + 20 +5387.5 + 30 +0.0 + 40 +175.0 + 1 +3.13 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +16065.0 + 21 +5475.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2A03 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +14500.0 + 20 +9660.0 + 30 +0.0 + 0 +POINT + 5 +2A04 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17630.0 + 20 +9660.0 + 30 +0.0 + 0 +POINT + 5 +2A05 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17630.0 + 20 +5300.0 + 30 +0.0 + 0 +ENDBLK + 5 +2A06 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D187 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D187 + 1 + + 0 +LINE + 5 +2A08 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +17631.0 + 20 +5300.0 + 30 +0.0 + 11 +17999.0 + 21 +5300.0 + 31 +0.0 + 0 +INSERT + 5 +2A09 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +17630.0 + 20 +5300.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2A0A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18000.0 + 20 +5300.0 + 30 +0.0 + 0 +TEXT + 5 +2A0B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +17705.625 + 20 +5387.5 + 30 +0.0 + 40 +175.0 + 1 +36 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +17815.0 + 21 +5475.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2A0C + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17630.0 + 20 +9660.0 + 30 +0.0 + 0 +POINT + 5 +2A0D + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +18000.0 + 20 +9630.0 + 30 +0.0 + 0 +POINT + 5 +2A0E + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +18000.0 + 20 +5300.0 + 30 +0.0 + 0 +ENDBLK + 5 +2A0F + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D188 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D188 + 1 + + 0 +LINE + 5 +2A11 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +18001.0 + 20 +5300.0 + 30 +0.0 + 11 +20869.0 + 21 +5300.0 + 31 +0.0 + 0 +INSERT + 5 +2A12 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18000.0 + 20 +5300.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2A13 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +20870.0 + 20 +5300.0 + 30 +0.0 + 0 +TEXT + 5 +2A14 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +19238.125 + 20 +5387.5 + 30 +0.0 + 40 +175.0 + 1 +2.88 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +19435.0 + 21 +5475.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2A15 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +18000.0 + 20 +9630.0 + 30 +0.0 + 0 +POINT + 5 +2A16 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +20870.0 + 20 +9630.0 + 30 +0.0 + 0 +POINT + 5 +2A17 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +20870.0 + 20 +5300.0 + 30 +0.0 + 0 +ENDBLK + 5 +2A18 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D189 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D189 + 1 + + 0 +LINE + 5 +2A1A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +20871.0 + 20 +5300.0 + 30 +0.0 + 11 +21239.0 + 21 +5300.0 + 31 +0.0 + 0 +INSERT + 5 +2A1B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +20870.0 + 20 +5300.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2A1C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +21240.0 + 20 +5300.0 + 30 +0.0 + 0 +TEXT + 5 +2A1D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +20945.625 + 20 +5387.5 + 30 +0.0 + 40 +175.0 + 1 +36 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +21055.0 + 21 +5475.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2A1E + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +20870.0 + 20 +9630.0 + 30 +0.0 + 0 +POINT + 5 +2A1F + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +21240.0 + 20 +9660.0 + 30 +0.0 + 0 +POINT + 5 +2A20 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +21240.0 + 20 +5300.0 + 30 +0.0 + 0 +ENDBLK + 5 +2A21 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D190 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D190 + 1 + + 0 +LINE + 5 +2A23 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +21241.0 + 20 +5300.0 + 30 +0.0 + 11 +22849.0 + 21 +5300.0 + 31 +0.0 + 0 +INSERT + 5 +2A24 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +21240.0 + 20 +5300.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2A25 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +22850.0 + 20 +5300.0 + 30 +0.0 + 0 +TEXT + 5 +2A26 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +21891.875 + 20 +5387.5 + 30 +0.0 + 40 +175.0 + 1 +1.61 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +22045.0 + 21 +5475.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2A27 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +21240.0 + 20 +9660.0 + 30 +0.0 + 0 +POINT + 5 +2A28 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +22850.0 + 20 +9645.0 + 30 +0.0 + 0 +POINT + 5 +2A29 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +22850.0 + 20 +5300.0 + 30 +0.0 + 0 +ENDBLK + 5 +2A2A + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D191 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D191 + 1 + + 0 +LINE + 5 +2A2C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +22976.0 + 20 +5300.0 + 30 +0.0 + 11 +26374.0 + 21 +5300.0 + 31 +0.0 + 0 +INSERT + 5 +2A2D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +22975.0 + 20 +5300.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2A2E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +26375.0 + 20 +5300.0 + 30 +0.0 + 0 +TEXT + 5 +2A2F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +24489.0625 + 20 +5387.5 + 30 +0.0 + 40 +175.0 + 1 +3.40 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +24675.0 + 21 +5475.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2A30 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +22975.0 + 20 +9650.0 + 30 +0.0 + 0 +POINT + 5 +2A31 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26375.0 + 20 +9670.0 + 30 +0.0 + 0 +POINT + 5 +2A32 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26375.0 + 20 +5300.0 + 30 +0.0 + 0 +ENDBLK + 5 +2A33 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D192 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D192 + 1 + + 0 +LINE + 5 +2A35 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +26376.0 + 20 +5300.0 + 30 +0.0 + 11 +26739.0 + 21 +5300.0 + 31 +0.0 + 0 +INSERT + 5 +2A36 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +26375.0 + 20 +5300.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2A37 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +26740.0 + 20 +5300.0 + 30 +0.0 + 0 +TEXT + 5 +2A38 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +26448.125 + 20 +5387.5 + 30 +0.0 + 40 +175.0 + 1 +36 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +26557.5 + 21 +5475.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2A39 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26375.0 + 20 +9670.0 + 30 +0.0 + 0 +POINT + 5 +2A3A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26740.0 + 20 +9690.0 + 30 +0.0 + 0 +POINT + 5 +2A3B + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26740.0 + 20 +5300.0 + 30 +0.0 + 0 +ENDBLK + 5 +2A3C + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D193 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D193 + 1 + + 0 +LINE + 5 +2A3E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +22851.0 + 20 +5300.0 + 30 +0.0 + 11 +22974.0 + 21 +5300.0 + 31 +0.0 + 0 +INSERT + 5 +2A3F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +22850.0 + 20 +5300.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2A40 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +22975.0 + 20 +5300.0 + 30 +0.0 + 0 +TEXT + 5 +2A41 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +23007.5 + 20 +5387.5 + 30 +0.0 + 40 +175.0 + 1 +12 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +23095.0 + 21 +5475.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2A42 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +22850.0 + 20 +9645.0 + 30 +0.0 + 0 +POINT + 5 +2A43 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +22975.0 + 20 +9650.0 + 30 +0.0 + 0 +POINT + 5 +2A44 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +22975.0 + 20 +5300.0 + 30 +0.0 + 0 +ENDBLK + 5 +2A45 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D194 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D194 + 1 + + 0 +LINE + 5 +2A47 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9376.0 + 20 +5300.0 + 30 +0.0 + 11 +9749.0 + 21 +5300.0 + 31 +0.0 + 0 +INSERT + 5 +2A48 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9375.0 + 20 +5300.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2A49 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9750.0 + 20 +5300.0 + 30 +0.0 + 0 +TEXT + 5 +2A4A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9453.125 + 20 +5387.5 + 30 +0.0 + 40 +175.0 + 1 +36 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +9562.5 + 21 +5475.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2A4B + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9375.0 + 20 +9645.0 + 30 +0.0 + 0 +POINT + 5 +2A4C + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9750.0 + 20 +9635.0 + 30 +0.0 + 0 +POINT + 5 +2A4D + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9750.0 + 20 +5300.0 + 30 +0.0 + 0 +ENDBLK + 5 +2A4E + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D195 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D195 + 1 + + 0 +LINE + 5 +2A50 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +5856.0 + 20 +8070.0 + 30 +0.0 + 11 +8854.0 + 21 +8070.0 + 31 +0.0 + 0 +INSERT + 5 +2A51 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +5855.0 + 20 +8070.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2A52 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +8855.0 + 20 +8070.0 + 30 +0.0 + 0 +TEXT + 5 +2A53 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +7455.0 + 20 +8157.5 + 30 +0.0 + 40 +175.0 + 1 +3.00 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +7630.0 + 21 +8245.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2A54 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5855.0 + 20 +9300.0 + 30 +0.0 + 0 +POINT + 5 +2A55 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8855.0 + 20 +8125.0 + 30 +0.0 + 0 +POINT + 5 +2A56 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8855.0 + 20 +8070.0 + 30 +0.0 + 0 +ENDBLK + 5 +2A57 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D196 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D196 + 1 + + 0 +LINE + 5 +2A59 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +4991.0 + 20 +8070.0 + 30 +0.0 + 11 +5854.0 + 21 +8070.0 + 31 +0.0 + 0 +INSERT + 5 +2A5A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +4990.0 + 20 +8070.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2A5B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +5855.0 + 20 +8070.0 + 30 +0.0 + 0 +TEXT + 5 +2A5C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +5165.625 + 20 +8157.5 + 30 +0.0 + 40 +175.0 + 1 +85 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +5275.0 + 21 +8245.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2A5D + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +4990.0 + 20 +9300.0 + 30 +0.0 + 0 +POINT + 5 +2A5E + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5855.0 + 20 +9300.0 + 30 +0.0 + 0 +POINT + 5 +2A5F + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5855.0 + 20 +8070.0 + 30 +0.0 + 0 +ENDBLK + 5 +2A60 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D197 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D197 + 1 + + 0 +LINE + 5 +2A62 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +2800.0 + 20 +9249.0 + 30 +0.0 + 11 +2800.0 + 21 +7646.0 + 31 +0.0 + 0 +INSERT + 5 +2A63 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +2800.0 + 20 +9250.0 + 30 +0.0 + 50 +90.0 + 0 +INSERT + 5 +2A64 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +2800.0 + 20 +7645.0 + 30 +0.0 + 50 +270.0 + 0 +TEXT + 5 +2A65 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +2712.5 + 20 +8283.4375 + 30 +0.0 + 40 +175.0 + 1 +1.60 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +2625.0 + 21 +8447.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2A66 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5000.0 + 20 +9250.0 + 30 +0.0 + 0 +POINT + 5 +2A67 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5000.0 + 20 +7645.0 + 30 +0.0 + 0 +POINT + 5 +2A68 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +2800.0 + 20 +7645.0 + 30 +0.0 + 0 +ENDBLK + 5 +2A69 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D198 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D198 + 1 + + 0 +LINE + 5 +2A6B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +26046.0 + 20 +8105.0 + 30 +0.0 + 11 +26744.0 + 21 +8105.0 + 31 +0.0 + 0 +INSERT + 5 +2A6C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +26045.0 + 20 +8105.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2A6D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +26745.0 + 20 +8105.0 + 30 +0.0 + 0 +TEXT + 5 +2A6E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +26296.5625 + 20 +8192.5 + 30 +0.0 + 40 +175.0 + 1 +70 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +26395.0 + 21 +8280.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2A6F + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26045.0 + 20 +8095.0 + 30 +0.0 + 0 +POINT + 5 +2A70 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26745.0 + 20 +9300.0 + 30 +0.0 + 0 +POINT + 5 +2A71 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26745.0 + 20 +8105.0 + 30 +0.0 + 0 +ENDBLK + 5 +2A72 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D199 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D199 + 1 + + 0 +LINE + 5 +2A74 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +23031.0 + 20 +8105.0 + 30 +0.0 + 11 +26044.0 + 21 +8105.0 + 31 +0.0 + 0 +INSERT + 5 +2A75 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +23030.0 + 20 +8105.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2A76 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +26045.0 + 20 +8105.0 + 30 +0.0 + 0 +TEXT + 5 +2A77 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +24670.0 + 20 +8192.5 + 30 +0.0 + 40 +175.0 + 1 +3.00 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +24845.0 + 21 +8280.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2A78 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +23030.0 + 20 +8095.0 + 30 +0.0 + 0 +POINT + 5 +2A79 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26045.0 + 20 +8095.0 + 30 +0.0 + 0 +POINT + 5 +2A7A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26045.0 + 20 +8105.0 + 30 +0.0 + 0 +ENDBLK + 5 +2A7B + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D200 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D200 + 1 + + 0 +LINE + 5 +2A7D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +28940.0 + 20 +9254.0 + 30 +0.0 + 11 +28940.0 + 21 +7646.0 + 31 +0.0 + 0 +INSERT + 5 +2A7E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +28940.0 + 20 +9255.0 + 30 +0.0 + 50 +90.0 + 0 +INSERT + 5 +2A7F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +28940.0 + 20 +7645.0 + 30 +0.0 + 50 +270.0 + 0 +TEXT + 5 +2A80 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +28852.5 + 20 +8285.9375 + 30 +0.0 + 40 +175.0 + 1 +1.60 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +28765.0 + 21 +8450.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2A81 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26040.0 + 20 +9255.0 + 30 +0.0 + 0 +POINT + 5 +2A82 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +26040.0 + 20 +7645.0 + 30 +0.0 + 0 +POINT + 5 +2A83 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +28940.0 + 20 +7645.0 + 30 +0.0 + 0 +ENDBLK + 5 +2A84 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D201 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D201 + 1 + + 0 +LINE + 5 +2A86 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +13531.0 + 20 +18105.0 + 30 +0.0 + 11 +14559.0 + 21 +18105.0 + 31 +0.0 + 0 +INSERT + 5 +2A87 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +13530.0 + 20 +18105.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2A88 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +14560.0 + 20 +18105.0 + 30 +0.0 + 0 +TEXT + 5 +2A89 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +14010.625 + 20 +18192.5 + 30 +0.0 + 40 +175.0 + 1 +88 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +14120.0 + 21 +18280.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2A8A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +13530.0 + 20 +17375.0 + 30 +0.0 + 0 +POINT + 5 +2A8B + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +14560.0 + 20 +17375.0 + 30 +0.0 + 0 +POINT + 5 +2A8C + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +14560.0 + 20 +18105.0 + 30 +0.0 + 0 +ENDBLK + 5 +2A8D + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X202 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X202 + 1 + + 0 +LINE + 5 +2A8F + 8 +0 + 62 + 0 + 10 +34220.0 + 20 +22560.097423 + 30 +0.0 + 11 +34589.902577 + 21 +22930.0 + 31 +0.0 + 0 +LINE + 5 +2A90 + 8 +0 + 62 + 0 + 10 +34220.0 + 20 +22913.650814 + 30 +0.0 + 11 +34236.349186 + 21 +22930.0 + 31 +0.0 + 0 +LINE + 5 +2A91 + 8 +0 + 62 + 0 + 10 +34443.455967 + 20 +22430.0 + 30 +0.0 + 11 +34943.455967 + 21 +22930.0 + 31 +0.0 + 0 +LINE + 5 +2A92 + 8 +0 + 62 + 0 + 10 +34797.009358 + 20 +22430.0 + 30 +0.0 + 11 +34970.0 + 21 +22602.990642 + 31 +0.0 + 0 +ENDBLK + 5 +2A93 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X203 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X203 + 1 + + 0 +LINE + 5 +2A95 + 8 +0 + 62 + 0 + 10 +34327.339444 + 20 +21430.0 + 30 +0.0 + 11 +34827.339444 + 21 +21930.0 + 31 +0.0 + 0 +LINE + 5 +2A96 + 8 +0 + 62 + 0 + 10 +34220.0 + 20 +21499.437252 + 30 +0.0 + 11 +34650.562748 + 21 +21930.0 + 31 +0.0 + 0 +LINE + 5 +2A97 + 8 +0 + 62 + 0 + 10 +34220.0 + 20 +21676.213947 + 30 +0.0 + 11 +34473.786053 + 21 +21930.0 + 31 +0.0 + 0 +LINE + 5 +2A98 + 8 +0 + 62 + 0 + 10 +34220.0 + 20 +21852.990642 + 30 +0.0 + 11 +34297.009358 + 21 +21930.0 + 31 +0.0 + 0 +LINE + 5 +2A99 + 8 +0 + 62 + 0 + 10 +34504.116139 + 20 +21430.0 + 30 +0.0 + 11 +34970.0 + 21 +21895.883861 + 31 +0.0 + 0 +LINE + 5 +2A9A + 8 +0 + 62 + 0 + 10 +34680.892834 + 20 +21430.0 + 30 +0.0 + 11 +34970.0 + 21 +21719.107166 + 31 +0.0 + 0 +LINE + 5 +2A9B + 8 +0 + 62 + 0 + 10 +34857.66953 + 20 +21430.0 + 30 +0.0 + 11 +34970.0 + 21 +21542.33047 + 31 +0.0 + 0 +ENDBLK + 5 +2A9C + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X204 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X204 + 1 + + 0 +LINE + 5 +2A9E + 8 +0 + 62 + 0 + 10 +34220.0 + 20 +20649.059328 + 30 +0.0 + 11 +34231.25 + 21 +20649.059328 + 31 +0.0 + 0 +LINE + 5 +2A9F + 8 +0 + 62 + 0 + 10 +34306.25 + 20 +20649.059328 + 30 +0.0 + 11 +34343.75 + 21 +20649.059328 + 31 +0.0 + 0 +LINE + 5 +2AA0 + 8 +0 + 62 + 0 + 10 +34418.75 + 20 +20649.059328 + 30 +0.0 + 11 +34456.25 + 21 +20649.059328 + 31 +0.0 + 0 +LINE + 5 +2AA1 + 8 +0 + 62 + 0 + 10 +34531.25 + 20 +20649.059328 + 30 +0.0 + 11 +34568.75 + 21 +20649.059328 + 31 +0.0 + 0 +LINE + 5 +2AA2 + 8 +0 + 62 + 0 + 10 +34643.75 + 20 +20649.059328 + 30 +0.0 + 11 +34681.25 + 21 +20649.059328 + 31 +0.0 + 0 +LINE + 5 +2AA3 + 8 +0 + 62 + 0 + 10 +34756.25 + 20 +20649.059328 + 30 +0.0 + 11 +34793.75 + 21 +20649.059328 + 31 +0.0 + 0 +LINE + 5 +2AA4 + 8 +0 + 62 + 0 + 10 +34868.75 + 20 +20649.059328 + 30 +0.0 + 11 +34906.25 + 21 +20649.059328 + 31 +0.0 + 0 +LINE + 5 +2AA5 + 8 +0 + 62 + 0 + 10 +34250.0 + 20 +20681.53528 + 30 +0.0 + 11 +34287.5 + 21 +20681.53528 + 31 +0.0 + 0 +LINE + 5 +2AA6 + 8 +0 + 62 + 0 + 10 +34362.5 + 20 +20681.53528 + 30 +0.0 + 11 +34400.0 + 21 +20681.53528 + 31 +0.0 + 0 +LINE + 5 +2AA7 + 8 +0 + 62 + 0 + 10 +34475.0 + 20 +20681.53528 + 30 +0.0 + 11 +34512.5 + 21 +20681.53528 + 31 +0.0 + 0 +LINE + 5 +2AA8 + 8 +0 + 62 + 0 + 10 +34587.5 + 20 +20681.53528 + 30 +0.0 + 11 +34625.0 + 21 +20681.53528 + 31 +0.0 + 0 +LINE + 5 +2AA9 + 8 +0 + 62 + 0 + 10 +34700.0 + 20 +20681.53528 + 30 +0.0 + 11 +34737.5 + 21 +20681.53528 + 31 +0.0 + 0 +LINE + 5 +2AAA + 8 +0 + 62 + 0 + 10 +34812.5 + 20 +20681.53528 + 30 +0.0 + 11 +34850.0 + 21 +20681.53528 + 31 +0.0 + 0 +LINE + 5 +2AAB + 8 +0 + 62 + 0 + 10 +34925.0 + 20 +20681.53528 + 30 +0.0 + 11 +34962.5 + 21 +20681.53528 + 31 +0.0 + 0 +LINE + 5 +2AAC + 8 +0 + 62 + 0 + 10 +34220.0 + 20 +20714.011233 + 30 +0.0 + 11 +34231.25 + 21 +20714.011233 + 31 +0.0 + 0 +LINE + 5 +2AAD + 8 +0 + 62 + 0 + 10 +34306.25 + 20 +20714.011233 + 30 +0.0 + 11 +34343.75 + 21 +20714.011233 + 31 +0.0 + 0 +LINE + 5 +2AAE + 8 +0 + 62 + 0 + 10 +34418.75 + 20 +20714.011233 + 30 +0.0 + 11 +34456.25 + 21 +20714.011233 + 31 +0.0 + 0 +LINE + 5 +2AAF + 8 +0 + 62 + 0 + 10 +34531.25 + 20 +20714.011233 + 30 +0.0 + 11 +34568.75 + 21 +20714.011233 + 31 +0.0 + 0 +LINE + 5 +2AB0 + 8 +0 + 62 + 0 + 10 +34643.75 + 20 +20714.011233 + 30 +0.0 + 11 +34681.25 + 21 +20714.011233 + 31 +0.0 + 0 +LINE + 5 +2AB1 + 8 +0 + 62 + 0 + 10 +34756.25 + 20 +20714.011233 + 30 +0.0 + 11 +34793.75 + 21 +20714.011233 + 31 +0.0 + 0 +LINE + 5 +2AB2 + 8 +0 + 62 + 0 + 10 +34868.75 + 20 +20714.011233 + 30 +0.0 + 11 +34906.25 + 21 +20714.011233 + 31 +0.0 + 0 +LINE + 5 +2AB3 + 8 +0 + 62 + 0 + 10 +34250.0 + 20 +20746.487185 + 30 +0.0 + 11 +34287.5 + 21 +20746.487185 + 31 +0.0 + 0 +LINE + 5 +2AB4 + 8 +0 + 62 + 0 + 10 +34362.5 + 20 +20746.487185 + 30 +0.0 + 11 +34400.0 + 21 +20746.487185 + 31 +0.0 + 0 +LINE + 5 +2AB5 + 8 +0 + 62 + 0 + 10 +34475.0 + 20 +20746.487185 + 30 +0.0 + 11 +34512.5 + 21 +20746.487185 + 31 +0.0 + 0 +LINE + 5 +2AB6 + 8 +0 + 62 + 0 + 10 +34587.5 + 20 +20746.487185 + 30 +0.0 + 11 +34625.0 + 21 +20746.487185 + 31 +0.0 + 0 +LINE + 5 +2AB7 + 8 +0 + 62 + 0 + 10 +34700.0 + 20 +20746.487185 + 30 +0.0 + 11 +34737.5 + 21 +20746.487185 + 31 +0.0 + 0 +LINE + 5 +2AB8 + 8 +0 + 62 + 0 + 10 +34812.5 + 20 +20746.487185 + 30 +0.0 + 11 +34850.0 + 21 +20746.487185 + 31 +0.0 + 0 +LINE + 5 +2AB9 + 8 +0 + 62 + 0 + 10 +34925.0 + 20 +20746.487185 + 30 +0.0 + 11 +34962.5 + 21 +20746.487185 + 31 +0.0 + 0 +LINE + 5 +2ABA + 8 +0 + 62 + 0 + 10 +34220.0 + 20 +20778.963138 + 30 +0.0 + 11 +34231.25 + 21 +20778.963138 + 31 +0.0 + 0 +LINE + 5 +2ABB + 8 +0 + 62 + 0 + 10 +34306.25 + 20 +20778.963138 + 30 +0.0 + 11 +34343.75 + 21 +20778.963138 + 31 +0.0 + 0 +LINE + 5 +2ABC + 8 +0 + 62 + 0 + 10 +34418.75 + 20 +20778.963138 + 30 +0.0 + 11 +34456.25 + 21 +20778.963138 + 31 +0.0 + 0 +LINE + 5 +2ABD + 8 +0 + 62 + 0 + 10 +34531.25 + 20 +20778.963138 + 30 +0.0 + 11 +34568.75 + 21 +20778.963138 + 31 +0.0 + 0 +LINE + 5 +2ABE + 8 +0 + 62 + 0 + 10 +34643.75 + 20 +20778.963138 + 30 +0.0 + 11 +34681.25 + 21 +20778.963138 + 31 +0.0 + 0 +LINE + 5 +2ABF + 8 +0 + 62 + 0 + 10 +34756.25 + 20 +20778.963138 + 30 +0.0 + 11 +34793.75 + 21 +20778.963138 + 31 +0.0 + 0 +LINE + 5 +2AC0 + 8 +0 + 62 + 0 + 10 +34868.75 + 20 +20778.963138 + 30 +0.0 + 11 +34906.25 + 21 +20778.963138 + 31 +0.0 + 0 +LINE + 5 +2AC1 + 8 +0 + 62 + 0 + 10 +34250.0 + 20 +20811.43909 + 30 +0.0 + 11 +34287.5 + 21 +20811.43909 + 31 +0.0 + 0 +LINE + 5 +2AC2 + 8 +0 + 62 + 0 + 10 +34362.5 + 20 +20811.43909 + 30 +0.0 + 11 +34400.0 + 21 +20811.43909 + 31 +0.0 + 0 +LINE + 5 +2AC3 + 8 +0 + 62 + 0 + 10 +34475.0 + 20 +20811.43909 + 30 +0.0 + 11 +34512.5 + 21 +20811.43909 + 31 +0.0 + 0 +LINE + 5 +2AC4 + 8 +0 + 62 + 0 + 10 +34587.5 + 20 +20811.43909 + 30 +0.0 + 11 +34625.0 + 21 +20811.43909 + 31 +0.0 + 0 +LINE + 5 +2AC5 + 8 +0 + 62 + 0 + 10 +34700.0 + 20 +20811.43909 + 30 +0.0 + 11 +34737.5 + 21 +20811.43909 + 31 +0.0 + 0 +LINE + 5 +2AC6 + 8 +0 + 62 + 0 + 10 +34812.5 + 20 +20811.43909 + 30 +0.0 + 11 +34850.0 + 21 +20811.43909 + 31 +0.0 + 0 +LINE + 5 +2AC7 + 8 +0 + 62 + 0 + 10 +34925.0 + 20 +20811.43909 + 30 +0.0 + 11 +34962.5 + 21 +20811.43909 + 31 +0.0 + 0 +LINE + 5 +2AC8 + 8 +0 + 62 + 0 + 10 +34220.0 + 20 +20843.915043 + 30 +0.0 + 11 +34231.25 + 21 +20843.915043 + 31 +0.0 + 0 +LINE + 5 +2AC9 + 8 +0 + 62 + 0 + 10 +34306.25 + 20 +20843.915043 + 30 +0.0 + 11 +34343.75 + 21 +20843.915043 + 31 +0.0 + 0 +LINE + 5 +2ACA + 8 +0 + 62 + 0 + 10 +34418.75 + 20 +20843.915043 + 30 +0.0 + 11 +34456.25 + 21 +20843.915043 + 31 +0.0 + 0 +LINE + 5 +2ACB + 8 +0 + 62 + 0 + 10 +34531.25 + 20 +20843.915043 + 30 +0.0 + 11 +34568.75 + 21 +20843.915043 + 31 +0.0 + 0 +LINE + 5 +2ACC + 8 +0 + 62 + 0 + 10 +34643.75 + 20 +20843.915043 + 30 +0.0 + 11 +34681.25 + 21 +20843.915043 + 31 +0.0 + 0 +LINE + 5 +2ACD + 8 +0 + 62 + 0 + 10 +34756.25 + 20 +20843.915043 + 30 +0.0 + 11 +34793.75 + 21 +20843.915043 + 31 +0.0 + 0 +LINE + 5 +2ACE + 8 +0 + 62 + 0 + 10 +34868.75 + 20 +20843.915043 + 30 +0.0 + 11 +34906.25 + 21 +20843.915043 + 31 +0.0 + 0 +LINE + 5 +2ACF + 8 +0 + 62 + 0 + 10 +34250.0 + 20 +20876.390995 + 30 +0.0 + 11 +34287.5 + 21 +20876.390995 + 31 +0.0 + 0 +LINE + 5 +2AD0 + 8 +0 + 62 + 0 + 10 +34362.5 + 20 +20876.390995 + 30 +0.0 + 11 +34400.0 + 21 +20876.390995 + 31 +0.0 + 0 +LINE + 5 +2AD1 + 8 +0 + 62 + 0 + 10 +34475.0 + 20 +20876.390995 + 30 +0.0 + 11 +34512.5 + 21 +20876.390995 + 31 +0.0 + 0 +LINE + 5 +2AD2 + 8 +0 + 62 + 0 + 10 +34587.5 + 20 +20876.390995 + 30 +0.0 + 11 +34625.0 + 21 +20876.390995 + 31 +0.0 + 0 +LINE + 5 +2AD3 + 8 +0 + 62 + 0 + 10 +34700.0 + 20 +20876.390995 + 30 +0.0 + 11 +34737.5 + 21 +20876.390995 + 31 +0.0 + 0 +LINE + 5 +2AD4 + 8 +0 + 62 + 0 + 10 +34812.5 + 20 +20876.390995 + 30 +0.0 + 11 +34850.0 + 21 +20876.390995 + 31 +0.0 + 0 +LINE + 5 +2AD5 + 8 +0 + 62 + 0 + 10 +34925.0 + 20 +20876.390995 + 30 +0.0 + 11 +34962.5 + 21 +20876.390995 + 31 +0.0 + 0 +LINE + 5 +2AD6 + 8 +0 + 62 + 0 + 10 +34220.0 + 20 +20908.866948 + 30 +0.0 + 11 +34231.25 + 21 +20908.866948 + 31 +0.0 + 0 +LINE + 5 +2AD7 + 8 +0 + 62 + 0 + 10 +34306.25 + 20 +20908.866948 + 30 +0.0 + 11 +34343.75 + 21 +20908.866948 + 31 +0.0 + 0 +LINE + 5 +2AD8 + 8 +0 + 62 + 0 + 10 +34418.75 + 20 +20908.866948 + 30 +0.0 + 11 +34456.25 + 21 +20908.866948 + 31 +0.0 + 0 +LINE + 5 +2AD9 + 8 +0 + 62 + 0 + 10 +34531.25 + 20 +20908.866948 + 30 +0.0 + 11 +34568.75 + 21 +20908.866948 + 31 +0.0 + 0 +LINE + 5 +2ADA + 8 +0 + 62 + 0 + 10 +34643.75 + 20 +20908.866948 + 30 +0.0 + 11 +34681.25 + 21 +20908.866948 + 31 +0.0 + 0 +LINE + 5 +2ADB + 8 +0 + 62 + 0 + 10 +34756.25 + 20 +20908.866948 + 30 +0.0 + 11 +34793.75 + 21 +20908.866948 + 31 +0.0 + 0 +LINE + 5 +2ADC + 8 +0 + 62 + 0 + 10 +34868.75 + 20 +20908.866948 + 30 +0.0 + 11 +34906.25 + 21 +20908.866948 + 31 +0.0 + 0 +LINE + 5 +2ADD + 8 +0 + 62 + 0 + 10 +34250.0 + 20 +20616.583375 + 30 +0.0 + 11 +34287.5 + 21 +20616.583375 + 31 +0.0 + 0 +LINE + 5 +2ADE + 8 +0 + 62 + 0 + 10 +34362.5 + 20 +20616.583375 + 30 +0.0 + 11 +34400.0 + 21 +20616.583375 + 31 +0.0 + 0 +LINE + 5 +2ADF + 8 +0 + 62 + 0 + 10 +34475.0 + 20 +20616.583375 + 30 +0.0 + 11 +34512.5 + 21 +20616.583375 + 31 +0.0 + 0 +LINE + 5 +2AE0 + 8 +0 + 62 + 0 + 10 +34587.5 + 20 +20616.583375 + 30 +0.0 + 11 +34625.0 + 21 +20616.583375 + 31 +0.0 + 0 +LINE + 5 +2AE1 + 8 +0 + 62 + 0 + 10 +34700.0 + 20 +20616.583375 + 30 +0.0 + 11 +34737.5 + 21 +20616.583375 + 31 +0.0 + 0 +LINE + 5 +2AE2 + 8 +0 + 62 + 0 + 10 +34812.5 + 20 +20616.583375 + 30 +0.0 + 11 +34850.0 + 21 +20616.583375 + 31 +0.0 + 0 +LINE + 5 +2AE3 + 8 +0 + 62 + 0 + 10 +34925.0 + 20 +20616.583375 + 30 +0.0 + 11 +34962.5 + 21 +20616.583375 + 31 +0.0 + 0 +LINE + 5 +2AE4 + 8 +0 + 62 + 0 + 10 +34220.0 + 20 +20584.107423 + 30 +0.0 + 11 +34231.25 + 21 +20584.107423 + 31 +0.0 + 0 +LINE + 5 +2AE5 + 8 +0 + 62 + 0 + 10 +34306.25 + 20 +20584.107423 + 30 +0.0 + 11 +34343.75 + 21 +20584.107423 + 31 +0.0 + 0 +LINE + 5 +2AE6 + 8 +0 + 62 + 0 + 10 +34418.75 + 20 +20584.107423 + 30 +0.0 + 11 +34456.25 + 21 +20584.107423 + 31 +0.0 + 0 +LINE + 5 +2AE7 + 8 +0 + 62 + 0 + 10 +34531.25 + 20 +20584.107423 + 30 +0.0 + 11 +34568.75 + 21 +20584.107423 + 31 +0.0 + 0 +LINE + 5 +2AE8 + 8 +0 + 62 + 0 + 10 +34643.75 + 20 +20584.107423 + 30 +0.0 + 11 +34681.25 + 21 +20584.107423 + 31 +0.0 + 0 +LINE + 5 +2AE9 + 8 +0 + 62 + 0 + 10 +34756.25 + 20 +20584.107423 + 30 +0.0 + 11 +34793.75 + 21 +20584.107423 + 31 +0.0 + 0 +LINE + 5 +2AEA + 8 +0 + 62 + 0 + 10 +34868.75 + 20 +20584.107423 + 30 +0.0 + 11 +34906.25 + 21 +20584.107423 + 31 +0.0 + 0 +LINE + 5 +2AEB + 8 +0 + 62 + 0 + 10 +34250.0 + 20 +20551.63147 + 30 +0.0 + 11 +34287.5 + 21 +20551.63147 + 31 +0.0 + 0 +LINE + 5 +2AEC + 8 +0 + 62 + 0 + 10 +34362.5 + 20 +20551.63147 + 30 +0.0 + 11 +34400.0 + 21 +20551.63147 + 31 +0.0 + 0 +LINE + 5 +2AED + 8 +0 + 62 + 0 + 10 +34475.0 + 20 +20551.63147 + 30 +0.0 + 11 +34512.5 + 21 +20551.63147 + 31 +0.0 + 0 +LINE + 5 +2AEE + 8 +0 + 62 + 0 + 10 +34587.5 + 20 +20551.63147 + 30 +0.0 + 11 +34625.0 + 21 +20551.63147 + 31 +0.0 + 0 +LINE + 5 +2AEF + 8 +0 + 62 + 0 + 10 +34700.0 + 20 +20551.63147 + 30 +0.0 + 11 +34737.5 + 21 +20551.63147 + 31 +0.0 + 0 +LINE + 5 +2AF0 + 8 +0 + 62 + 0 + 10 +34812.5 + 20 +20551.63147 + 30 +0.0 + 11 +34850.0 + 21 +20551.63147 + 31 +0.0 + 0 +LINE + 5 +2AF1 + 8 +0 + 62 + 0 + 10 +34925.0 + 20 +20551.63147 + 30 +0.0 + 11 +34962.5 + 21 +20551.63147 + 31 +0.0 + 0 +LINE + 5 +2AF2 + 8 +0 + 62 + 0 + 10 +34220.0 + 20 +20519.155518 + 30 +0.0 + 11 +34231.25 + 21 +20519.155518 + 31 +0.0 + 0 +LINE + 5 +2AF3 + 8 +0 + 62 + 0 + 10 +34306.25 + 20 +20519.155518 + 30 +0.0 + 11 +34343.75 + 21 +20519.155518 + 31 +0.0 + 0 +LINE + 5 +2AF4 + 8 +0 + 62 + 0 + 10 +34418.75 + 20 +20519.155518 + 30 +0.0 + 11 +34456.25 + 21 +20519.155518 + 31 +0.0 + 0 +LINE + 5 +2AF5 + 8 +0 + 62 + 0 + 10 +34531.25 + 20 +20519.155518 + 30 +0.0 + 11 +34568.75 + 21 +20519.155518 + 31 +0.0 + 0 +LINE + 5 +2AF6 + 8 +0 + 62 + 0 + 10 +34643.75 + 20 +20519.155518 + 30 +0.0 + 11 +34681.25 + 21 +20519.155518 + 31 +0.0 + 0 +LINE + 5 +2AF7 + 8 +0 + 62 + 0 + 10 +34756.25 + 20 +20519.155518 + 30 +0.0 + 11 +34793.75 + 21 +20519.155518 + 31 +0.0 + 0 +LINE + 5 +2AF8 + 8 +0 + 62 + 0 + 10 +34868.75 + 20 +20519.155518 + 30 +0.0 + 11 +34906.25 + 21 +20519.155518 + 31 +0.0 + 0 +LINE + 5 +2AF9 + 8 +0 + 62 + 0 + 10 +34250.0 + 20 +20486.679565 + 30 +0.0 + 11 +34287.5 + 21 +20486.679565 + 31 +0.0 + 0 +LINE + 5 +2AFA + 8 +0 + 62 + 0 + 10 +34362.5 + 20 +20486.679565 + 30 +0.0 + 11 +34400.0 + 21 +20486.679565 + 31 +0.0 + 0 +LINE + 5 +2AFB + 8 +0 + 62 + 0 + 10 +34475.0 + 20 +20486.679565 + 30 +0.0 + 11 +34512.5 + 21 +20486.679565 + 31 +0.0 + 0 +LINE + 5 +2AFC + 8 +0 + 62 + 0 + 10 +34587.5 + 20 +20486.679565 + 30 +0.0 + 11 +34625.0 + 21 +20486.679565 + 31 +0.0 + 0 +LINE + 5 +2AFD + 8 +0 + 62 + 0 + 10 +34700.0 + 20 +20486.679565 + 30 +0.0 + 11 +34737.5 + 21 +20486.679565 + 31 +0.0 + 0 +LINE + 5 +2AFE + 8 +0 + 62 + 0 + 10 +34812.5 + 20 +20486.679565 + 30 +0.0 + 11 +34850.0 + 21 +20486.679565 + 31 +0.0 + 0 +LINE + 5 +2AFF + 8 +0 + 62 + 0 + 10 +34925.0 + 20 +20486.679565 + 30 +0.0 + 11 +34962.5 + 21 +20486.679565 + 31 +0.0 + 0 +LINE + 5 +2B00 + 8 +0 + 62 + 0 + 10 +34220.0 + 20 +20454.203613 + 30 +0.0 + 11 +34231.25 + 21 +20454.203613 + 31 +0.0 + 0 +LINE + 5 +2B01 + 8 +0 + 62 + 0 + 10 +34306.25 + 20 +20454.203613 + 30 +0.0 + 11 +34343.75 + 21 +20454.203613 + 31 +0.0 + 0 +LINE + 5 +2B02 + 8 +0 + 62 + 0 + 10 +34418.75 + 20 +20454.203613 + 30 +0.0 + 11 +34456.25 + 21 +20454.203613 + 31 +0.0 + 0 +LINE + 5 +2B03 + 8 +0 + 62 + 0 + 10 +34531.25 + 20 +20454.203613 + 30 +0.0 + 11 +34568.75 + 21 +20454.203613 + 31 +0.0 + 0 +LINE + 5 +2B04 + 8 +0 + 62 + 0 + 10 +34643.75 + 20 +20454.203613 + 30 +0.0 + 11 +34681.25 + 21 +20454.203613 + 31 +0.0 + 0 +LINE + 5 +2B05 + 8 +0 + 62 + 0 + 10 +34756.25 + 20 +20454.203613 + 30 +0.0 + 11 +34793.75 + 21 +20454.203613 + 31 +0.0 + 0 +LINE + 5 +2B06 + 8 +0 + 62 + 0 + 10 +34868.75 + 20 +20454.203613 + 30 +0.0 + 11 +34906.25 + 21 +20454.203613 + 31 +0.0 + 0 +LINE + 5 +2B07 + 8 +0 + 62 + 0 + 10 +34699.999881 + 20 +20486.679546 + 30 +0.0 + 11 +34681.249881 + 21 +20519.155498 + 31 +0.0 + 0 +LINE + 5 +2B08 + 8 +0 + 62 + 0 + 10 +34643.749881 + 20 +20584.107404 + 30 +0.0 + 11 +34624.999881 + 21 +20616.583356 + 31 +0.0 + 0 +LINE + 5 +2B09 + 8 +0 + 62 + 0 + 10 +34587.499881 + 20 +20681.535261 + 30 +0.0 + 11 +34568.749881 + 21 +20714.011214 + 31 +0.0 + 0 +LINE + 5 +2B0A + 8 +0 + 62 + 0 + 10 +34531.249881 + 20 +20778.963119 + 30 +0.0 + 11 +34512.499881 + 21 +20811.439072 + 31 +0.0 + 0 +LINE + 5 +2B0B + 8 +0 + 62 + 0 + 10 +34474.999881 + 20 +20876.390977 + 30 +0.0 + 11 +34456.249881 + 21 +20908.86693 + 31 +0.0 + 0 +LINE + 5 +2B0C + 8 +0 + 62 + 0 + 10 +34695.223832 + 20 +20430.0 + 30 +0.0 + 11 +34681.249882 + 21 +20454.203593 + 31 +0.0 + 0 +LINE + 5 +2B0D + 8 +0 + 62 + 0 + 10 +34643.749882 + 20 +20519.155498 + 30 +0.0 + 11 +34624.999882 + 21 +20551.631451 + 31 +0.0 + 0 +LINE + 5 +2B0E + 8 +0 + 62 + 0 + 10 +34587.499882 + 20 +20616.583356 + 30 +0.0 + 11 +34568.749882 + 21 +20649.059309 + 31 +0.0 + 0 +LINE + 5 +2B0F + 8 +0 + 62 + 0 + 10 +34531.249882 + 20 +20714.011214 + 30 +0.0 + 11 +34512.499882 + 21 +20746.487167 + 31 +0.0 + 0 +LINE + 5 +2B10 + 8 +0 + 62 + 0 + 10 +34474.999882 + 20 +20811.439072 + 30 +0.0 + 11 +34456.249882 + 21 +20843.915025 + 31 +0.0 + 0 +LINE + 5 +2B11 + 8 +0 + 62 + 0 + 10 +34418.749882 + 20 +20908.86693 + 30 +0.0 + 11 +34406.548698 + 21 +20930.0 + 31 +0.0 + 0 +LINE + 5 +2B12 + 8 +0 + 62 + 0 + 10 +34643.749882 + 20 +20454.203593 + 30 +0.0 + 11 +34624.999882 + 21 +20486.679546 + 31 +0.0 + 0 +LINE + 5 +2B13 + 8 +0 + 62 + 0 + 10 +34587.499882 + 20 +20551.631451 + 30 +0.0 + 11 +34568.749882 + 21 +20584.107404 + 31 +0.0 + 0 +LINE + 5 +2B14 + 8 +0 + 62 + 0 + 10 +34531.249882 + 20 +20649.059309 + 30 +0.0 + 11 +34512.499882 + 21 +20681.535262 + 31 +0.0 + 0 +LINE + 5 +2B15 + 8 +0 + 62 + 0 + 10 +34474.999882 + 20 +20746.487167 + 30 +0.0 + 11 +34456.249882 + 21 +20778.96312 + 31 +0.0 + 0 +LINE + 5 +2B16 + 8 +0 + 62 + 0 + 10 +34418.749882 + 20 +20843.915025 + 30 +0.0 + 11 +34399.999882 + 21 +20876.390977 + 31 +0.0 + 0 +LINE + 5 +2B17 + 8 +0 + 62 + 0 + 10 +34587.499882 + 20 +20486.679546 + 30 +0.0 + 11 +34568.749882 + 21 +20519.155498 + 31 +0.0 + 0 +LINE + 5 +2B18 + 8 +0 + 62 + 0 + 10 +34531.249882 + 20 +20584.107404 + 30 +0.0 + 11 +34512.499882 + 21 +20616.583356 + 31 +0.0 + 0 +LINE + 5 +2B19 + 8 +0 + 62 + 0 + 10 +34474.999882 + 20 +20681.535262 + 30 +0.0 + 11 +34456.249882 + 21 +20714.011214 + 31 +0.0 + 0 +LINE + 5 +2B1A + 8 +0 + 62 + 0 + 10 +34418.749882 + 20 +20778.96312 + 30 +0.0 + 11 +34399.999882 + 21 +20811.439072 + 31 +0.0 + 0 +LINE + 5 +2B1B + 8 +0 + 62 + 0 + 10 +34362.499882 + 20 +20876.390978 + 30 +0.0 + 11 +34343.749882 + 21 +20908.86693 + 31 +0.0 + 0 +LINE + 5 +2B1C + 8 +0 + 62 + 0 + 10 +34582.723833 + 20 +20430.0 + 30 +0.0 + 11 +34568.749882 + 21 +20454.203593 + 31 +0.0 + 0 +LINE + 5 +2B1D + 8 +0 + 62 + 0 + 10 +34531.249882 + 20 +20519.155499 + 30 +0.0 + 11 +34512.499882 + 21 +20551.631451 + 31 +0.0 + 0 +LINE + 5 +2B1E + 8 +0 + 62 + 0 + 10 +34474.999882 + 20 +20616.583356 + 30 +0.0 + 11 +34456.249882 + 21 +20649.059309 + 31 +0.0 + 0 +LINE + 5 +2B1F + 8 +0 + 62 + 0 + 10 +34418.749882 + 20 +20714.011214 + 30 +0.0 + 11 +34399.999882 + 21 +20746.487167 + 31 +0.0 + 0 +LINE + 5 +2B20 + 8 +0 + 62 + 0 + 10 +34362.499882 + 20 +20811.439072 + 30 +0.0 + 11 +34343.749882 + 21 +20843.915025 + 31 +0.0 + 0 +LINE + 5 +2B21 + 8 +0 + 62 + 0 + 10 +34306.249882 + 20 +20908.86693 + 30 +0.0 + 11 +34294.048698 + 21 +20930.0 + 31 +0.0 + 0 +LINE + 5 +2B22 + 8 +0 + 62 + 0 + 10 +34531.249882 + 20 +20454.203593 + 30 +0.0 + 11 +34512.499882 + 21 +20486.679546 + 31 +0.0 + 0 +LINE + 5 +2B23 + 8 +0 + 62 + 0 + 10 +34474.999882 + 20 +20551.631451 + 30 +0.0 + 11 +34456.249882 + 21 +20584.107404 + 31 +0.0 + 0 +LINE + 5 +2B24 + 8 +0 + 62 + 0 + 10 +34418.749882 + 20 +20649.059309 + 30 +0.0 + 11 +34399.999882 + 21 +20681.535262 + 31 +0.0 + 0 +LINE + 5 +2B25 + 8 +0 + 62 + 0 + 10 +34362.499882 + 20 +20746.487167 + 30 +0.0 + 11 +34343.749882 + 21 +20778.96312 + 31 +0.0 + 0 +LINE + 5 +2B26 + 8 +0 + 62 + 0 + 10 +34306.249882 + 20 +20843.915025 + 30 +0.0 + 11 +34287.499882 + 21 +20876.390978 + 31 +0.0 + 0 +LINE + 5 +2B27 + 8 +0 + 62 + 0 + 10 +34474.999882 + 20 +20486.679546 + 30 +0.0 + 11 +34456.249882 + 21 +20519.155499 + 31 +0.0 + 0 +LINE + 5 +2B28 + 8 +0 + 62 + 0 + 10 +34418.749882 + 20 +20584.107404 + 30 +0.0 + 11 +34399.999882 + 21 +20616.583357 + 31 +0.0 + 0 +LINE + 5 +2B29 + 8 +0 + 62 + 0 + 10 +34362.499882 + 20 +20681.535262 + 30 +0.0 + 11 +34343.749882 + 21 +20714.011215 + 31 +0.0 + 0 +LINE + 5 +2B2A + 8 +0 + 62 + 0 + 10 +34306.249882 + 20 +20778.96312 + 30 +0.0 + 11 +34287.499882 + 21 +20811.439072 + 31 +0.0 + 0 +LINE + 5 +2B2B + 8 +0 + 62 + 0 + 10 +34249.999882 + 20 +20876.390978 + 30 +0.0 + 11 +34231.249882 + 21 +20908.86693 + 31 +0.0 + 0 +LINE + 5 +2B2C + 8 +0 + 62 + 0 + 10 +34470.223833 + 20 +20430.0 + 30 +0.0 + 11 +34456.249882 + 21 +20454.203593 + 31 +0.0 + 0 +LINE + 5 +2B2D + 8 +0 + 62 + 0 + 10 +34418.749882 + 20 +20519.155499 + 30 +0.0 + 11 +34399.999882 + 21 +20551.631451 + 31 +0.0 + 0 +LINE + 5 +2B2E + 8 +0 + 62 + 0 + 10 +34362.499882 + 20 +20616.583357 + 30 +0.0 + 11 +34343.749882 + 21 +20649.059309 + 31 +0.0 + 0 +LINE + 5 +2B2F + 8 +0 + 62 + 0 + 10 +34306.249882 + 20 +20714.011215 + 30 +0.0 + 11 +34287.499882 + 21 +20746.487167 + 31 +0.0 + 0 +LINE + 5 +2B30 + 8 +0 + 62 + 0 + 10 +34249.999882 + 20 +20811.439073 + 30 +0.0 + 11 +34231.249882 + 21 +20843.915025 + 31 +0.0 + 0 +LINE + 5 +2B31 + 8 +0 + 62 + 0 + 10 +34418.749882 + 20 +20454.203594 + 30 +0.0 + 11 +34399.999882 + 21 +20486.679546 + 31 +0.0 + 0 +LINE + 5 +2B32 + 8 +0 + 62 + 0 + 10 +34362.499882 + 20 +20551.631451 + 30 +0.0 + 11 +34343.749882 + 21 +20584.107404 + 31 +0.0 + 0 +LINE + 5 +2B33 + 8 +0 + 62 + 0 + 10 +34306.249882 + 20 +20649.059309 + 30 +0.0 + 11 +34287.499882 + 21 +20681.535262 + 31 +0.0 + 0 +LINE + 5 +2B34 + 8 +0 + 62 + 0 + 10 +34249.999882 + 20 +20746.487167 + 30 +0.0 + 11 +34231.249882 + 21 +20778.96312 + 31 +0.0 + 0 +LINE + 5 +2B35 + 8 +0 + 62 + 0 + 10 +34362.499883 + 20 +20486.679546 + 30 +0.0 + 11 +34343.749883 + 21 +20519.155499 + 31 +0.0 + 0 +LINE + 5 +2B36 + 8 +0 + 62 + 0 + 10 +34306.249883 + 20 +20584.107404 + 30 +0.0 + 11 +34287.499883 + 21 +20616.583357 + 31 +0.0 + 0 +LINE + 5 +2B37 + 8 +0 + 62 + 0 + 10 +34249.999883 + 20 +20681.535262 + 30 +0.0 + 11 +34231.249883 + 21 +20714.011215 + 31 +0.0 + 0 +LINE + 5 +2B38 + 8 +0 + 62 + 0 + 10 +34357.723834 + 20 +20430.0 + 30 +0.0 + 11 +34343.749883 + 21 +20454.203594 + 31 +0.0 + 0 +LINE + 5 +2B39 + 8 +0 + 62 + 0 + 10 +34306.249883 + 20 +20519.155499 + 30 +0.0 + 11 +34287.499883 + 21 +20551.631452 + 31 +0.0 + 0 +LINE + 5 +2B3A + 8 +0 + 62 + 0 + 10 +34249.999883 + 20 +20616.583357 + 30 +0.0 + 11 +34231.249883 + 21 +20649.05931 + 31 +0.0 + 0 +LINE + 5 +2B3B + 8 +0 + 62 + 0 + 10 +34306.249883 + 20 +20454.203594 + 30 +0.0 + 11 +34287.499883 + 21 +20486.679546 + 31 +0.0 + 0 +LINE + 5 +2B3C + 8 +0 + 62 + 0 + 10 +34249.999883 + 20 +20551.631452 + 30 +0.0 + 11 +34231.249883 + 21 +20584.107404 + 31 +0.0 + 0 +LINE + 5 +2B3D + 8 +0 + 62 + 0 + 10 +34249.999883 + 20 +20486.679546 + 30 +0.0 + 11 +34231.249883 + 21 +20519.155499 + 31 +0.0 + 0 +LINE + 5 +2B3E + 8 +0 + 62 + 0 + 10 +34245.223834 + 20 +20430.0 + 30 +0.0 + 11 +34231.249883 + 21 +20454.203594 + 31 +0.0 + 0 +LINE + 5 +2B3F + 8 +0 + 62 + 0 + 10 +34756.249881 + 20 +20454.203593 + 30 +0.0 + 11 +34737.499881 + 21 +20486.679546 + 31 +0.0 + 0 +LINE + 5 +2B40 + 8 +0 + 62 + 0 + 10 +34699.999881 + 20 +20551.631451 + 30 +0.0 + 11 +34681.249881 + 21 +20584.107403 + 31 +0.0 + 0 +LINE + 5 +2B41 + 8 +0 + 62 + 0 + 10 +34643.749881 + 20 +20649.059309 + 30 +0.0 + 11 +34624.999881 + 21 +20681.535261 + 31 +0.0 + 0 +LINE + 5 +2B42 + 8 +0 + 62 + 0 + 10 +34587.499881 + 20 +20746.487167 + 30 +0.0 + 11 +34568.749881 + 21 +20778.963119 + 31 +0.0 + 0 +LINE + 5 +2B43 + 8 +0 + 62 + 0 + 10 +34531.249881 + 20 +20843.915025 + 30 +0.0 + 11 +34512.499881 + 21 +20876.390977 + 31 +0.0 + 0 +LINE + 5 +2B44 + 8 +0 + 62 + 0 + 10 +34807.723832 + 20 +20430.0 + 30 +0.0 + 11 +34793.749881 + 21 +20454.203593 + 31 +0.0 + 0 +LINE + 5 +2B45 + 8 +0 + 62 + 0 + 10 +34756.249881 + 20 +20519.155498 + 30 +0.0 + 11 +34737.499881 + 21 +20551.631451 + 31 +0.0 + 0 +LINE + 5 +2B46 + 8 +0 + 62 + 0 + 10 +34699.999881 + 20 +20616.583356 + 30 +0.0 + 11 +34681.249881 + 21 +20649.059309 + 31 +0.0 + 0 +LINE + 5 +2B47 + 8 +0 + 62 + 0 + 10 +34643.749881 + 20 +20714.011214 + 30 +0.0 + 11 +34624.999881 + 21 +20746.487167 + 31 +0.0 + 0 +LINE + 5 +2B48 + 8 +0 + 62 + 0 + 10 +34587.499881 + 20 +20811.439072 + 30 +0.0 + 11 +34568.749881 + 21 +20843.915025 + 31 +0.0 + 0 +LINE + 5 +2B49 + 8 +0 + 62 + 0 + 10 +34531.249881 + 20 +20908.86693 + 30 +0.0 + 11 +34519.048697 + 21 +20930.0 + 31 +0.0 + 0 +LINE + 5 +2B4A + 8 +0 + 62 + 0 + 10 +34812.499881 + 20 +20486.679545 + 30 +0.0 + 11 +34793.749881 + 21 +20519.155498 + 31 +0.0 + 0 +LINE + 5 +2B4B + 8 +0 + 62 + 0 + 10 +34756.249881 + 20 +20584.107403 + 30 +0.0 + 11 +34737.499881 + 21 +20616.583356 + 31 +0.0 + 0 +LINE + 5 +2B4C + 8 +0 + 62 + 0 + 10 +34699.999881 + 20 +20681.535261 + 30 +0.0 + 11 +34681.249881 + 21 +20714.011214 + 31 +0.0 + 0 +LINE + 5 +2B4D + 8 +0 + 62 + 0 + 10 +34643.749881 + 20 +20778.963119 + 30 +0.0 + 11 +34624.999881 + 21 +20811.439072 + 31 +0.0 + 0 +LINE + 5 +2B4E + 8 +0 + 62 + 0 + 10 +34587.499881 + 20 +20876.390977 + 30 +0.0 + 11 +34568.749881 + 21 +20908.86693 + 31 +0.0 + 0 +LINE + 5 +2B4F + 8 +0 + 62 + 0 + 10 +34868.749881 + 20 +20454.203593 + 30 +0.0 + 11 +34849.999881 + 21 +20486.679545 + 31 +0.0 + 0 +LINE + 5 +2B50 + 8 +0 + 62 + 0 + 10 +34812.499881 + 20 +20551.631451 + 30 +0.0 + 11 +34793.749881 + 21 +20584.107403 + 31 +0.0 + 0 +LINE + 5 +2B51 + 8 +0 + 62 + 0 + 10 +34756.249881 + 20 +20649.059309 + 30 +0.0 + 11 +34737.499881 + 21 +20681.535261 + 31 +0.0 + 0 +LINE + 5 +2B52 + 8 +0 + 62 + 0 + 10 +34699.999881 + 20 +20746.487166 + 30 +0.0 + 11 +34681.249881 + 21 +20778.963119 + 31 +0.0 + 0 +LINE + 5 +2B53 + 8 +0 + 62 + 0 + 10 +34643.749881 + 20 +20843.915024 + 30 +0.0 + 11 +34624.999881 + 21 +20876.390977 + 31 +0.0 + 0 +LINE + 5 +2B54 + 8 +0 + 62 + 0 + 10 +34920.223832 + 20 +20430.0 + 30 +0.0 + 11 +34906.249881 + 21 +20454.203593 + 31 +0.0 + 0 +LINE + 5 +2B55 + 8 +0 + 62 + 0 + 10 +34868.749881 + 20 +20519.155498 + 30 +0.0 + 11 +34849.999881 + 21 +20551.631451 + 31 +0.0 + 0 +LINE + 5 +2B56 + 8 +0 + 62 + 0 + 10 +34812.499881 + 20 +20616.583356 + 30 +0.0 + 11 +34793.749881 + 21 +20649.059308 + 31 +0.0 + 0 +LINE + 5 +2B57 + 8 +0 + 62 + 0 + 10 +34756.249881 + 20 +20714.011214 + 30 +0.0 + 11 +34737.499881 + 21 +20746.487166 + 31 +0.0 + 0 +LINE + 5 +2B58 + 8 +0 + 62 + 0 + 10 +34699.999881 + 20 +20811.439072 + 30 +0.0 + 11 +34681.249881 + 21 +20843.915024 + 31 +0.0 + 0 +LINE + 5 +2B59 + 8 +0 + 62 + 0 + 10 +34643.749881 + 20 +20908.86693 + 30 +0.0 + 11 +34631.548697 + 21 +20930.0 + 31 +0.0 + 0 +LINE + 5 +2B5A + 8 +0 + 62 + 0 + 10 +34924.999881 + 20 +20486.679545 + 30 +0.0 + 11 +34906.249881 + 21 +20519.155498 + 31 +0.0 + 0 +LINE + 5 +2B5B + 8 +0 + 62 + 0 + 10 +34868.749881 + 20 +20584.107403 + 30 +0.0 + 11 +34849.999881 + 21 +20616.583356 + 31 +0.0 + 0 +LINE + 5 +2B5C + 8 +0 + 62 + 0 + 10 +34812.499881 + 20 +20681.535261 + 30 +0.0 + 11 +34793.749881 + 21 +20714.011214 + 31 +0.0 + 0 +LINE + 5 +2B5D + 8 +0 + 62 + 0 + 10 +34756.249881 + 20 +20778.963119 + 30 +0.0 + 11 +34737.499881 + 21 +20811.439072 + 31 +0.0 + 0 +LINE + 5 +2B5E + 8 +0 + 62 + 0 + 10 +34699.999881 + 20 +20876.390977 + 30 +0.0 + 11 +34681.249881 + 21 +20908.86693 + 31 +0.0 + 0 +LINE + 5 +2B5F + 8 +0 + 62 + 0 + 10 +34970.0 + 20 +20473.688957 + 30 +0.0 + 11 +34962.499881 + 21 +20486.679545 + 31 +0.0 + 0 +LINE + 5 +2B60 + 8 +0 + 62 + 0 + 10 +34924.999881 + 20 +20551.63145 + 30 +0.0 + 11 +34906.249881 + 21 +20584.107403 + 31 +0.0 + 0 +LINE + 5 +2B61 + 8 +0 + 62 + 0 + 10 +34868.749881 + 20 +20649.059308 + 30 +0.0 + 11 +34849.999881 + 21 +20681.535261 + 31 +0.0 + 0 +LINE + 5 +2B62 + 8 +0 + 62 + 0 + 10 +34812.499881 + 20 +20746.487166 + 30 +0.0 + 11 +34793.749881 + 21 +20778.963119 + 31 +0.0 + 0 +LINE + 5 +2B63 + 8 +0 + 62 + 0 + 10 +34756.249881 + 20 +20843.915024 + 30 +0.0 + 11 +34737.499881 + 21 +20876.390977 + 31 +0.0 + 0 +LINE + 5 +2B64 + 8 +0 + 62 + 0 + 10 +34970.0 + 20 +20538.640862 + 30 +0.0 + 11 +34962.49988 + 21 +20551.63145 + 31 +0.0 + 0 +LINE + 5 +2B65 + 8 +0 + 62 + 0 + 10 +34924.99988 + 20 +20616.583356 + 30 +0.0 + 11 +34906.24988 + 21 +20649.059308 + 31 +0.0 + 0 +LINE + 5 +2B66 + 8 +0 + 62 + 0 + 10 +34868.74988 + 20 +20714.011214 + 30 +0.0 + 11 +34849.99988 + 21 +20746.487166 + 31 +0.0 + 0 +LINE + 5 +2B67 + 8 +0 + 62 + 0 + 10 +34812.49988 + 20 +20811.439071 + 30 +0.0 + 11 +34793.74988 + 21 +20843.915024 + 31 +0.0 + 0 +LINE + 5 +2B68 + 8 +0 + 62 + 0 + 10 +34756.24988 + 20 +20908.866929 + 30 +0.0 + 11 +34744.048696 + 21 +20930.0 + 31 +0.0 + 0 +LINE + 5 +2B69 + 8 +0 + 62 + 0 + 10 +34970.0 + 20 +20603.592767 + 30 +0.0 + 11 +34962.49988 + 21 +20616.583356 + 31 +0.0 + 0 +LINE + 5 +2B6A + 8 +0 + 62 + 0 + 10 +34924.99988 + 20 +20681.535261 + 30 +0.0 + 11 +34906.24988 + 21 +20714.011213 + 31 +0.0 + 0 +LINE + 5 +2B6B + 8 +0 + 62 + 0 + 10 +34868.74988 + 20 +20778.963119 + 30 +0.0 + 11 +34849.99988 + 21 +20811.439071 + 31 +0.0 + 0 +LINE + 5 +2B6C + 8 +0 + 62 + 0 + 10 +34812.49988 + 20 +20876.390977 + 30 +0.0 + 11 +34793.74988 + 21 +20908.866929 + 31 +0.0 + 0 +LINE + 5 +2B6D + 8 +0 + 62 + 0 + 10 +34970.0 + 20 +20668.544672 + 30 +0.0 + 11 +34962.49988 + 21 +20681.535261 + 31 +0.0 + 0 +LINE + 5 +2B6E + 8 +0 + 62 + 0 + 10 +34924.99988 + 20 +20746.487166 + 30 +0.0 + 11 +34906.24988 + 21 +20778.963119 + 31 +0.0 + 0 +LINE + 5 +2B6F + 8 +0 + 62 + 0 + 10 +34868.74988 + 20 +20843.915024 + 30 +0.0 + 11 +34849.99988 + 21 +20876.390977 + 31 +0.0 + 0 +LINE + 5 +2B70 + 8 +0 + 62 + 0 + 10 +34970.0 + 20 +20733.496577 + 30 +0.0 + 11 +34962.49988 + 21 +20746.487166 + 31 +0.0 + 0 +LINE + 5 +2B71 + 8 +0 + 62 + 0 + 10 +34924.99988 + 20 +20811.439071 + 30 +0.0 + 11 +34906.24988 + 21 +20843.915024 + 31 +0.0 + 0 +LINE + 5 +2B72 + 8 +0 + 62 + 0 + 10 +34868.74988 + 20 +20908.866929 + 30 +0.0 + 11 +34856.548696 + 21 +20930.0 + 31 +0.0 + 0 +LINE + 5 +2B73 + 8 +0 + 62 + 0 + 10 +34970.0 + 20 +20798.448482 + 30 +0.0 + 11 +34962.49988 + 21 +20811.439071 + 31 +0.0 + 0 +LINE + 5 +2B74 + 8 +0 + 62 + 0 + 10 +34924.99988 + 20 +20876.390976 + 30 +0.0 + 11 +34906.24988 + 21 +20908.866929 + 31 +0.0 + 0 +LINE + 5 +2B75 + 8 +0 + 62 + 0 + 10 +34970.0 + 20 +20863.400387 + 30 +0.0 + 11 +34962.49988 + 21 +20876.390976 + 31 +0.0 + 0 +LINE + 5 +2B76 + 8 +0 + 62 + 0 + 10 +34970.0 + 20 +20928.352292 + 30 +0.0 + 11 +34969.048695 + 21 +20930.0 + 31 +0.0 + 0 +LINE + 5 +2B77 + 8 +0 + 62 + 0 + 10 +34456.249925 + 20 +20454.203705 + 30 +0.0 + 11 +34474.999925 + 21 +20486.679658 + 31 +0.0 + 0 +LINE + 5 +2B78 + 8 +0 + 62 + 0 + 10 +34512.499925 + 20 +20551.631563 + 30 +0.0 + 11 +34531.249925 + 21 +20584.107516 + 31 +0.0 + 0 +LINE + 5 +2B79 + 8 +0 + 62 + 0 + 10 +34568.749925 + 20 +20649.059421 + 30 +0.0 + 11 +34587.499925 + 21 +20681.535373 + 31 +0.0 + 0 +LINE + 5 +2B7A + 8 +0 + 62 + 0 + 10 +34624.999925 + 20 +20746.487279 + 30 +0.0 + 11 +34643.749925 + 21 +20778.963231 + 31 +0.0 + 0 +LINE + 5 +2B7B + 8 +0 + 62 + 0 + 10 +34681.249925 + 20 +20843.915137 + 30 +0.0 + 11 +34699.999925 + 21 +20876.391089 + 31 +0.0 + 0 +LINE + 5 +2B7C + 8 +0 + 62 + 0 + 10 +34404.775909 + 20 +20430.0 + 30 +0.0 + 11 +34418.749925 + 21 +20454.203705 + 31 +0.0 + 0 +LINE + 5 +2B7D + 8 +0 + 62 + 0 + 10 +34456.249925 + 20 +20519.15561 + 30 +0.0 + 11 +34474.999925 + 21 +20551.631563 + 31 +0.0 + 0 +LINE + 5 +2B7E + 8 +0 + 62 + 0 + 10 +34512.499925 + 20 +20616.583468 + 30 +0.0 + 11 +34531.249925 + 21 +20649.059421 + 31 +0.0 + 0 +LINE + 5 +2B7F + 8 +0 + 62 + 0 + 10 +34568.749925 + 20 +20714.011326 + 30 +0.0 + 11 +34587.499925 + 21 +20746.487279 + 31 +0.0 + 0 +LINE + 5 +2B80 + 8 +0 + 62 + 0 + 10 +34624.999925 + 20 +20811.439184 + 30 +0.0 + 11 +34643.749925 + 21 +20843.915137 + 31 +0.0 + 0 +LINE + 5 +2B81 + 8 +0 + 62 + 0 + 10 +34681.249925 + 20 +20908.867042 + 30 +0.0 + 11 +34693.451044 + 21 +20930.0 + 31 +0.0 + 0 +LINE + 5 +2B82 + 8 +0 + 62 + 0 + 10 +34399.999925 + 20 +20486.679657 + 30 +0.0 + 11 +34418.749925 + 21 +20519.15561 + 31 +0.0 + 0 +LINE + 5 +2B83 + 8 +0 + 62 + 0 + 10 +34456.249925 + 20 +20584.107515 + 30 +0.0 + 11 +34474.999925 + 21 +20616.583468 + 31 +0.0 + 0 +LINE + 5 +2B84 + 8 +0 + 62 + 0 + 10 +34512.499925 + 20 +20681.535373 + 30 +0.0 + 11 +34531.249925 + 21 +20714.011326 + 31 +0.0 + 0 +LINE + 5 +2B85 + 8 +0 + 62 + 0 + 10 +34568.749925 + 20 +20778.963231 + 30 +0.0 + 11 +34587.499925 + 21 +20811.439184 + 31 +0.0 + 0 +LINE + 5 +2B86 + 8 +0 + 62 + 0 + 10 +34624.999925 + 20 +20876.391089 + 30 +0.0 + 11 +34643.749925 + 21 +20908.867042 + 31 +0.0 + 0 +LINE + 5 +2B87 + 8 +0 + 62 + 0 + 10 +34343.749925 + 20 +20454.203705 + 30 +0.0 + 11 +34362.499925 + 21 +20486.679657 + 31 +0.0 + 0 +LINE + 5 +2B88 + 8 +0 + 62 + 0 + 10 +34399.999925 + 20 +20551.631563 + 30 +0.0 + 11 +34418.749925 + 21 +20584.107515 + 31 +0.0 + 0 +LINE + 5 +2B89 + 8 +0 + 62 + 0 + 10 +34456.249925 + 20 +20649.059421 + 30 +0.0 + 11 +34474.999925 + 21 +20681.535373 + 31 +0.0 + 0 +LINE + 5 +2B8A + 8 +0 + 62 + 0 + 10 +34512.499925 + 20 +20746.487279 + 30 +0.0 + 11 +34531.249925 + 21 +20778.963231 + 31 +0.0 + 0 +LINE + 5 +2B8B + 8 +0 + 62 + 0 + 10 +34568.749925 + 20 +20843.915136 + 30 +0.0 + 11 +34587.499925 + 21 +20876.391089 + 31 +0.0 + 0 +LINE + 5 +2B8C + 8 +0 + 62 + 0 + 10 +34292.27591 + 20 +20430.0 + 30 +0.0 + 11 +34306.249925 + 21 +20454.203705 + 31 +0.0 + 0 +LINE + 5 +2B8D + 8 +0 + 62 + 0 + 10 +34343.749925 + 20 +20519.15561 + 30 +0.0 + 11 +34362.499925 + 21 +20551.631563 + 31 +0.0 + 0 +LINE + 5 +2B8E + 8 +0 + 62 + 0 + 10 +34399.999925 + 20 +20616.583468 + 30 +0.0 + 11 +34418.749925 + 21 +20649.059421 + 31 +0.0 + 0 +LINE + 5 +2B8F + 8 +0 + 62 + 0 + 10 +34456.249925 + 20 +20714.011326 + 30 +0.0 + 11 +34474.999925 + 21 +20746.487278 + 31 +0.0 + 0 +LINE + 5 +2B90 + 8 +0 + 62 + 0 + 10 +34512.499925 + 20 +20811.439184 + 30 +0.0 + 11 +34531.249925 + 21 +20843.915136 + 31 +0.0 + 0 +LINE + 5 +2B91 + 8 +0 + 62 + 0 + 10 +34568.749925 + 20 +20908.867042 + 30 +0.0 + 11 +34580.951044 + 21 +20930.0 + 31 +0.0 + 0 +LINE + 5 +2B92 + 8 +0 + 62 + 0 + 10 +34287.499925 + 20 +20486.679657 + 30 +0.0 + 11 +34306.249925 + 21 +20519.15561 + 31 +0.0 + 0 +LINE + 5 +2B93 + 8 +0 + 62 + 0 + 10 +34343.749925 + 20 +20584.107515 + 30 +0.0 + 11 +34362.499925 + 21 +20616.583468 + 31 +0.0 + 0 +LINE + 5 +2B94 + 8 +0 + 62 + 0 + 10 +34399.999925 + 20 +20681.535373 + 30 +0.0 + 11 +34418.749925 + 21 +20714.011326 + 31 +0.0 + 0 +LINE + 5 +2B95 + 8 +0 + 62 + 0 + 10 +34456.249925 + 20 +20778.963231 + 30 +0.0 + 11 +34474.999925 + 21 +20811.439184 + 31 +0.0 + 0 +LINE + 5 +2B96 + 8 +0 + 62 + 0 + 10 +34512.499925 + 20 +20876.391089 + 30 +0.0 + 11 +34531.249925 + 21 +20908.867042 + 31 +0.0 + 0 +LINE + 5 +2B97 + 8 +0 + 62 + 0 + 10 +34231.249925 + 20 +20454.203705 + 30 +0.0 + 11 +34249.999925 + 21 +20486.679657 + 31 +0.0 + 0 +LINE + 5 +2B98 + 8 +0 + 62 + 0 + 10 +34287.499925 + 20 +20551.631562 + 30 +0.0 + 11 +34306.249925 + 21 +20584.107515 + 31 +0.0 + 0 +LINE + 5 +2B99 + 8 +0 + 62 + 0 + 10 +34343.749925 + 20 +20649.05942 + 30 +0.0 + 11 +34362.499925 + 21 +20681.535373 + 31 +0.0 + 0 +LINE + 5 +2B9A + 8 +0 + 62 + 0 + 10 +34399.999925 + 20 +20746.487278 + 30 +0.0 + 11 +34418.749925 + 21 +20778.963231 + 31 +0.0 + 0 +LINE + 5 +2B9B + 8 +0 + 62 + 0 + 10 +34456.249925 + 20 +20843.915136 + 30 +0.0 + 11 +34474.999925 + 21 +20876.391089 + 31 +0.0 + 0 +LINE + 5 +2B9C + 8 +0 + 62 + 0 + 10 +34231.249926 + 20 +20519.15561 + 30 +0.0 + 11 +34249.999926 + 21 +20551.631562 + 31 +0.0 + 0 +LINE + 5 +2B9D + 8 +0 + 62 + 0 + 10 +34287.499926 + 20 +20616.583468 + 30 +0.0 + 11 +34306.249926 + 21 +20649.05942 + 31 +0.0 + 0 +LINE + 5 +2B9E + 8 +0 + 62 + 0 + 10 +34343.749926 + 20 +20714.011326 + 30 +0.0 + 11 +34362.499926 + 21 +20746.487278 + 31 +0.0 + 0 +LINE + 5 +2B9F + 8 +0 + 62 + 0 + 10 +34399.999926 + 20 +20811.439184 + 30 +0.0 + 11 +34418.749926 + 21 +20843.915136 + 31 +0.0 + 0 +LINE + 5 +2BA0 + 8 +0 + 62 + 0 + 10 +34456.249926 + 20 +20908.867041 + 30 +0.0 + 11 +34468.451045 + 21 +20930.0 + 31 +0.0 + 0 +LINE + 5 +2BA1 + 8 +0 + 62 + 0 + 10 +34231.249926 + 20 +20584.107515 + 30 +0.0 + 11 +34249.999926 + 21 +20616.583468 + 31 +0.0 + 0 +LINE + 5 +2BA2 + 8 +0 + 62 + 0 + 10 +34287.499926 + 20 +20681.535373 + 30 +0.0 + 11 +34306.249926 + 21 +20714.011326 + 31 +0.0 + 0 +LINE + 5 +2BA3 + 8 +0 + 62 + 0 + 10 +34343.749926 + 20 +20778.963231 + 30 +0.0 + 11 +34362.499926 + 21 +20811.439183 + 31 +0.0 + 0 +LINE + 5 +2BA4 + 8 +0 + 62 + 0 + 10 +34399.999926 + 20 +20876.391089 + 30 +0.0 + 11 +34418.749926 + 21 +20908.867041 + 31 +0.0 + 0 +LINE + 5 +2BA5 + 8 +0 + 62 + 0 + 10 +34231.249926 + 20 +20649.05942 + 30 +0.0 + 11 +34249.999926 + 21 +20681.535373 + 31 +0.0 + 0 +LINE + 5 +2BA6 + 8 +0 + 62 + 0 + 10 +34287.499926 + 20 +20746.487278 + 30 +0.0 + 11 +34306.249926 + 21 +20778.963231 + 31 +0.0 + 0 +LINE + 5 +2BA7 + 8 +0 + 62 + 0 + 10 +34343.749926 + 20 +20843.915136 + 30 +0.0 + 11 +34362.499926 + 21 +20876.391089 + 31 +0.0 + 0 +LINE + 5 +2BA8 + 8 +0 + 62 + 0 + 10 +34231.249926 + 20 +20714.011325 + 30 +0.0 + 11 +34249.999926 + 21 +20746.487278 + 31 +0.0 + 0 +LINE + 5 +2BA9 + 8 +0 + 62 + 0 + 10 +34287.499926 + 20 +20811.439183 + 30 +0.0 + 11 +34306.249926 + 21 +20843.915136 + 31 +0.0 + 0 +LINE + 5 +2BAA + 8 +0 + 62 + 0 + 10 +34343.749926 + 20 +20908.867041 + 30 +0.0 + 11 +34355.951045 + 21 +20930.0 + 31 +0.0 + 0 +LINE + 5 +2BAB + 8 +0 + 62 + 0 + 10 +34231.249926 + 20 +20778.963231 + 30 +0.0 + 11 +34249.999926 + 21 +20811.439183 + 31 +0.0 + 0 +LINE + 5 +2BAC + 8 +0 + 62 + 0 + 10 +34287.499926 + 20 +20876.391089 + 30 +0.0 + 11 +34306.249926 + 21 +20908.867041 + 31 +0.0 + 0 +LINE + 5 +2BAD + 8 +0 + 62 + 0 + 10 +34231.249926 + 20 +20843.915136 + 30 +0.0 + 11 +34249.999926 + 21 +20876.391088 + 31 +0.0 + 0 +LINE + 5 +2BAE + 8 +0 + 62 + 0 + 10 +34231.249926 + 20 +20908.867041 + 30 +0.0 + 11 +34243.451046 + 21 +20930.0 + 31 +0.0 + 0 +LINE + 5 +2BAF + 8 +0 + 62 + 0 + 10 +34512.499925 + 20 +20486.679658 + 30 +0.0 + 11 +34531.249925 + 21 +20519.15561 + 31 +0.0 + 0 +LINE + 5 +2BB0 + 8 +0 + 62 + 0 + 10 +34568.749925 + 20 +20584.107516 + 30 +0.0 + 11 +34587.499925 + 21 +20616.583468 + 31 +0.0 + 0 +LINE + 5 +2BB1 + 8 +0 + 62 + 0 + 10 +34624.999925 + 20 +20681.535374 + 30 +0.0 + 11 +34643.749925 + 21 +20714.011326 + 31 +0.0 + 0 +LINE + 5 +2BB2 + 8 +0 + 62 + 0 + 10 +34681.249925 + 20 +20778.963231 + 30 +0.0 + 11 +34699.999925 + 21 +20811.439184 + 31 +0.0 + 0 +LINE + 5 +2BB3 + 8 +0 + 62 + 0 + 10 +34737.499925 + 20 +20876.391089 + 30 +0.0 + 11 +34756.249925 + 21 +20908.867042 + 31 +0.0 + 0 +LINE + 5 +2BB4 + 8 +0 + 62 + 0 + 10 +34517.275909 + 20 +20430.0 + 30 +0.0 + 11 +34531.249924 + 21 +20454.203705 + 31 +0.0 + 0 +LINE + 5 +2BB5 + 8 +0 + 62 + 0 + 10 +34568.749924 + 20 +20519.15561 + 30 +0.0 + 11 +34587.499924 + 21 +20551.631563 + 31 +0.0 + 0 +LINE + 5 +2BB6 + 8 +0 + 62 + 0 + 10 +34624.999924 + 20 +20616.583468 + 30 +0.0 + 11 +34643.749924 + 21 +20649.059421 + 31 +0.0 + 0 +LINE + 5 +2BB7 + 8 +0 + 62 + 0 + 10 +34681.249924 + 20 +20714.011326 + 30 +0.0 + 11 +34699.999924 + 21 +20746.487279 + 31 +0.0 + 0 +LINE + 5 +2BB8 + 8 +0 + 62 + 0 + 10 +34737.499924 + 20 +20811.439184 + 30 +0.0 + 11 +34756.249924 + 21 +20843.915137 + 31 +0.0 + 0 +LINE + 5 +2BB9 + 8 +0 + 62 + 0 + 10 +34793.749924 + 20 +20908.867042 + 30 +0.0 + 11 +34805.951043 + 21 +20930.0 + 31 +0.0 + 0 +LINE + 5 +2BBA + 8 +0 + 62 + 0 + 10 +34568.749924 + 20 +20454.203705 + 30 +0.0 + 11 +34587.499924 + 21 +20486.679658 + 31 +0.0 + 0 +LINE + 5 +2BBB + 8 +0 + 62 + 0 + 10 +34624.999924 + 20 +20551.631563 + 30 +0.0 + 11 +34643.749924 + 21 +20584.107516 + 31 +0.0 + 0 +LINE + 5 +2BBC + 8 +0 + 62 + 0 + 10 +34681.249924 + 20 +20649.059421 + 30 +0.0 + 11 +34699.999924 + 21 +20681.535374 + 31 +0.0 + 0 +LINE + 5 +2BBD + 8 +0 + 62 + 0 + 10 +34737.499924 + 20 +20746.487279 + 30 +0.0 + 11 +34756.249924 + 21 +20778.963232 + 31 +0.0 + 0 +LINE + 5 +2BBE + 8 +0 + 62 + 0 + 10 +34793.749924 + 20 +20843.915137 + 30 +0.0 + 11 +34812.499924 + 21 +20876.39109 + 31 +0.0 + 0 +LINE + 5 +2BBF + 8 +0 + 62 + 0 + 10 +34624.999924 + 20 +20486.679658 + 30 +0.0 + 11 +34643.749924 + 21 +20519.155611 + 31 +0.0 + 0 +LINE + 5 +2BC0 + 8 +0 + 62 + 0 + 10 +34681.249924 + 20 +20584.107516 + 30 +0.0 + 11 +34699.999924 + 21 +20616.583468 + 31 +0.0 + 0 +LINE + 5 +2BC1 + 8 +0 + 62 + 0 + 10 +34737.499924 + 20 +20681.535374 + 30 +0.0 + 11 +34756.249924 + 21 +20714.011326 + 31 +0.0 + 0 +LINE + 5 +2BC2 + 8 +0 + 62 + 0 + 10 +34793.749924 + 20 +20778.963232 + 30 +0.0 + 11 +34812.499924 + 21 +20811.439184 + 31 +0.0 + 0 +LINE + 5 +2BC3 + 8 +0 + 62 + 0 + 10 +34849.999924 + 20 +20876.39109 + 30 +0.0 + 11 +34868.749924 + 21 +20908.867042 + 31 +0.0 + 0 +LINE + 5 +2BC4 + 8 +0 + 62 + 0 + 10 +34629.775908 + 20 +20430.0 + 30 +0.0 + 11 +34643.749924 + 21 +20454.203705 + 31 +0.0 + 0 +LINE + 5 +2BC5 + 8 +0 + 62 + 0 + 10 +34681.249924 + 20 +20519.155611 + 30 +0.0 + 11 +34699.999924 + 21 +20551.631563 + 31 +0.0 + 0 +LINE + 5 +2BC6 + 8 +0 + 62 + 0 + 10 +34737.499924 + 20 +20616.583469 + 30 +0.0 + 11 +34756.249924 + 21 +20649.059421 + 31 +0.0 + 0 +LINE + 5 +2BC7 + 8 +0 + 62 + 0 + 10 +34793.749924 + 20 +20714.011326 + 30 +0.0 + 11 +34812.499924 + 21 +20746.487279 + 31 +0.0 + 0 +LINE + 5 +2BC8 + 8 +0 + 62 + 0 + 10 +34849.999924 + 20 +20811.439184 + 30 +0.0 + 11 +34868.749924 + 21 +20843.915137 + 31 +0.0 + 0 +LINE + 5 +2BC9 + 8 +0 + 62 + 0 + 10 +34906.249924 + 20 +20908.867042 + 30 +0.0 + 11 +34918.451043 + 21 +20930.0 + 31 +0.0 + 0 +LINE + 5 +2BCA + 8 +0 + 62 + 0 + 10 +34681.249924 + 20 +20454.203705 + 30 +0.0 + 11 +34699.999924 + 21 +20486.679658 + 31 +0.0 + 0 +LINE + 5 +2BCB + 8 +0 + 62 + 0 + 10 +34737.499924 + 20 +20551.631563 + 30 +0.0 + 11 +34756.249924 + 21 +20584.107516 + 31 +0.0 + 0 +LINE + 5 +2BCC + 8 +0 + 62 + 0 + 10 +34793.749924 + 20 +20649.059421 + 30 +0.0 + 11 +34812.499924 + 21 +20681.535374 + 31 +0.0 + 0 +LINE + 5 +2BCD + 8 +0 + 62 + 0 + 10 +34849.999924 + 20 +20746.487279 + 30 +0.0 + 11 +34868.749924 + 21 +20778.963232 + 31 +0.0 + 0 +LINE + 5 +2BCE + 8 +0 + 62 + 0 + 10 +34906.249924 + 20 +20843.915137 + 30 +0.0 + 11 +34924.999924 + 21 +20876.39109 + 31 +0.0 + 0 +LINE + 5 +2BCF + 8 +0 + 62 + 0 + 10 +34737.499924 + 20 +20486.679658 + 30 +0.0 + 11 +34756.249924 + 21 +20519.155611 + 31 +0.0 + 0 +LINE + 5 +2BD0 + 8 +0 + 62 + 0 + 10 +34793.749924 + 20 +20584.107516 + 30 +0.0 + 11 +34812.499924 + 21 +20616.583469 + 31 +0.0 + 0 +LINE + 5 +2BD1 + 8 +0 + 62 + 0 + 10 +34849.999924 + 20 +20681.535374 + 30 +0.0 + 11 +34868.749924 + 21 +20714.011327 + 31 +0.0 + 0 +LINE + 5 +2BD2 + 8 +0 + 62 + 0 + 10 +34906.249924 + 20 +20778.963232 + 30 +0.0 + 11 +34924.999924 + 21 +20811.439185 + 31 +0.0 + 0 +LINE + 5 +2BD3 + 8 +0 + 62 + 0 + 10 +34962.499924 + 20 +20876.39109 + 30 +0.0 + 11 +34970.0 + 21 +20889.381603 + 31 +0.0 + 0 +LINE + 5 +2BD4 + 8 +0 + 62 + 0 + 10 +34742.275908 + 20 +20430.0 + 30 +0.0 + 11 +34756.249924 + 21 +20454.203706 + 31 +0.0 + 0 +LINE + 5 +2BD5 + 8 +0 + 62 + 0 + 10 +34793.749924 + 20 +20519.155611 + 30 +0.0 + 11 +34812.499924 + 21 +20551.631563 + 31 +0.0 + 0 +LINE + 5 +2BD6 + 8 +0 + 62 + 0 + 10 +34849.999924 + 20 +20616.583469 + 30 +0.0 + 11 +34868.749924 + 21 +20649.059421 + 31 +0.0 + 0 +LINE + 5 +2BD7 + 8 +0 + 62 + 0 + 10 +34906.249924 + 20 +20714.011327 + 30 +0.0 + 11 +34924.999924 + 21 +20746.487279 + 31 +0.0 + 0 +LINE + 5 +2BD8 + 8 +0 + 62 + 0 + 10 +34962.499924 + 20 +20811.439185 + 30 +0.0 + 11 +34970.0 + 21 +20824.429698 + 31 +0.0 + 0 +LINE + 5 +2BD9 + 8 +0 + 62 + 0 + 10 +34793.749924 + 20 +20454.203706 + 30 +0.0 + 11 +34812.499924 + 21 +20486.679658 + 31 +0.0 + 0 +LINE + 5 +2BDA + 8 +0 + 62 + 0 + 10 +34849.999924 + 20 +20551.631564 + 30 +0.0 + 11 +34868.749924 + 21 +20584.107516 + 31 +0.0 + 0 +LINE + 5 +2BDB + 8 +0 + 62 + 0 + 10 +34906.249924 + 20 +20649.059421 + 30 +0.0 + 11 +34924.999924 + 21 +20681.535374 + 31 +0.0 + 0 +LINE + 5 +2BDC + 8 +0 + 62 + 0 + 10 +34962.499924 + 20 +20746.487279 + 30 +0.0 + 11 +34970.0 + 21 +20759.477793 + 31 +0.0 + 0 +LINE + 5 +2BDD + 8 +0 + 62 + 0 + 10 +34849.999923 + 20 +20486.679658 + 30 +0.0 + 11 +34868.749923 + 21 +20519.155611 + 31 +0.0 + 0 +LINE + 5 +2BDE + 8 +0 + 62 + 0 + 10 +34906.249923 + 20 +20584.107516 + 30 +0.0 + 11 +34924.999923 + 21 +20616.583469 + 31 +0.0 + 0 +LINE + 5 +2BDF + 8 +0 + 62 + 0 + 10 +34962.499923 + 20 +20681.535374 + 30 +0.0 + 11 +34970.0 + 21 +20694.525888 + 31 +0.0 + 0 +LINE + 5 +2BE0 + 8 +0 + 62 + 0 + 10 +34854.775907 + 20 +20430.0 + 30 +0.0 + 11 +34868.749923 + 21 +20454.203706 + 31 +0.0 + 0 +LINE + 5 +2BE1 + 8 +0 + 62 + 0 + 10 +34906.249923 + 20 +20519.155611 + 30 +0.0 + 11 +34924.999923 + 21 +20551.631564 + 31 +0.0 + 0 +LINE + 5 +2BE2 + 8 +0 + 62 + 0 + 10 +34962.499923 + 20 +20616.583469 + 30 +0.0 + 11 +34970.0 + 21 +20629.573983 + 31 +0.0 + 0 +LINE + 5 +2BE3 + 8 +0 + 62 + 0 + 10 +34906.249923 + 20 +20454.203706 + 30 +0.0 + 11 +34924.999923 + 21 +20486.679658 + 31 +0.0 + 0 +LINE + 5 +2BE4 + 8 +0 + 62 + 0 + 10 +34962.499923 + 20 +20551.631564 + 30 +0.0 + 11 +34970.0 + 21 +20564.622078 + 31 +0.0 + 0 +LINE + 5 +2BE5 + 8 +0 + 62 + 0 + 10 +34962.499923 + 20 +20486.679659 + 30 +0.0 + 11 +34970.0 + 21 +20499.670173 + 31 +0.0 + 0 +LINE + 5 +2BE6 + 8 +0 + 62 + 0 + 10 +34967.275907 + 20 +20430.0 + 30 +0.0 + 11 +34970.0 + 21 +20434.718268 + 31 +0.0 + 0 +ENDBLK + 5 +2BE7 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X205 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X205 + 1 + + 0 +LINE + 5 +2BE9 + 8 +0 + 62 + 0 + 10 +34271.883092 + 20 +19430.0 + 30 +0.0 + 11 +34771.883092 + 21 +19930.0 + 31 +0.0 + 0 +LINE + 5 +2BEA + 8 +0 + 62 + 0 + 10 +34220.0 + 20 +19554.893603 + 30 +0.0 + 11 +34595.106397 + 21 +19930.0 + 31 +0.0 + 0 +LINE + 5 +2BEB + 8 +0 + 62 + 0 + 10 +34220.0 + 20 +19731.670299 + 30 +0.0 + 11 +34418.329701 + 21 +19930.0 + 31 +0.0 + 0 +LINE + 5 +2BEC + 8 +0 + 62 + 0 + 10 +34220.0 + 20 +19908.446994 + 30 +0.0 + 11 +34241.553006 + 21 +19930.0 + 31 +0.0 + 0 +LINE + 5 +2BED + 8 +0 + 62 + 0 + 10 +34448.659787 + 20 +19430.0 + 30 +0.0 + 11 +34948.659787 + 21 +19930.0 + 31 +0.0 + 0 +LINE + 5 +2BEE + 8 +0 + 62 + 0 + 10 +34625.436483 + 20 +19430.0 + 30 +0.0 + 11 +34970.0 + 21 +19774.563517 + 31 +0.0 + 0 +LINE + 5 +2BEF + 8 +0 + 62 + 0 + 10 +34802.213178 + 20 +19430.0 + 30 +0.0 + 11 +34970.0 + 21 +19597.786822 + 31 +0.0 + 0 +LINE + 5 +2BF0 + 8 +0 + 62 + 0 + 10 +34771.533137 + 20 +19430.0 + 30 +0.0 + 11 +34271.533137 + 21 +19930.0 + 31 +0.0 + 0 +LINE + 5 +2BF1 + 8 +0 + 62 + 0 + 10 +34594.756442 + 20 +19430.0 + 30 +0.0 + 11 +34220.0 + 21 +19804.756442 + 31 +0.0 + 0 +LINE + 5 +2BF2 + 8 +0 + 62 + 0 + 10 +34417.979746 + 20 +19430.0 + 30 +0.0 + 11 +34220.0 + 21 +19627.979746 + 31 +0.0 + 0 +LINE + 5 +2BF3 + 8 +0 + 62 + 0 + 10 +34241.203051 + 20 +19430.0 + 30 +0.0 + 11 +34220.0 + 21 +19451.203051 + 31 +0.0 + 0 +LINE + 5 +2BF4 + 8 +0 + 62 + 0 + 10 +34948.309832 + 20 +19430.0 + 30 +0.0 + 11 +34448.309832 + 21 +19930.0 + 31 +0.0 + 0 +LINE + 5 +2BF5 + 8 +0 + 62 + 0 + 10 +34970.0 + 20 +19585.086528 + 30 +0.0 + 11 +34625.086528 + 21 +19930.0 + 31 +0.0 + 0 +LINE + 5 +2BF6 + 8 +0 + 62 + 0 + 10 +34970.0 + 20 +19761.863223 + 30 +0.0 + 11 +34801.863223 + 21 +19930.0 + 31 +0.0 + 0 +ENDBLK + 5 +2BF7 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D206 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D206 + 1 + + 0 +LINE + 5 +2BF9 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +33321.0 + 20 +5405.0 + 30 +0.0 + 11 +33894.0 + 21 +5405.0 + 31 +0.0 + 0 +INSERT + 5 +2BFA + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +33320.0 + 20 +5405.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2BFB + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +33895.0 + 20 +5405.0 + 30 +0.0 + 0 +TEXT + 5 +2BFC + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +33541.875 + 20 +5492.5 + 30 +0.0 + 40 +175.0 + 1 +11 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +33607.5 + 21 +5580.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2BFD + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +33320.0 + 20 +6755.0 + 30 +0.0 + 0 +POINT + 5 +2BFE + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +33895.0 + 20 +6755.0 + 30 +0.0 + 0 +POINT + 5 +2BFF + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +33895.0 + 20 +5405.0 + 30 +0.0 + 0 +ENDBLK + 5 +2C00 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D207 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D207 + 1 + + 0 +LINE + 5 +2C02 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +33896.0 + 20 +5405.0 + 30 +0.0 + 11 +34199.0 + 21 +5405.0 + 31 +0.0 + 0 +INSERT + 5 +2C03 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +33895.0 + 20 +5405.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2C04 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +34200.0 + 20 +5405.0 + 30 +0.0 + 0 +TEXT + 5 +2C05 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +34003.75 + 20 +5492.5 + 30 +0.0 + 40 +175.0 + 1 +6 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +34047.5 + 21 +5580.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2C06 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +33895.0 + 20 +6755.0 + 30 +0.0 + 0 +POINT + 5 +2C07 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +34200.0 + 20 +6775.0 + 30 +0.0 + 0 +POINT + 5 +2C08 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +34200.0 + 20 +5405.0 + 30 +0.0 + 0 +ENDBLK + 5 +2C09 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D208 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D208 + 1 + + 0 +LINE + 5 +2C0B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +34201.0 + 20 +5405.0 + 30 +0.0 + 11 +34599.0 + 21 +5405.0 + 31 +0.0 + 0 +INSERT + 5 +2C0C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +34200.0 + 20 +5405.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2C0D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +34600.0 + 20 +5405.0 + 30 +0.0 + 0 +TEXT + 5 +2C0E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +34356.25 + 20 +5492.5 + 30 +0.0 + 40 +175.0 + 1 +8 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +34400.0 + 21 +5580.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2C0F + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +34200.0 + 20 +6775.0 + 30 +0.0 + 0 +POINT + 5 +2C10 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +34600.0 + 20 +6775.0 + 30 +0.0 + 0 +POINT + 5 +2C11 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +34600.0 + 20 +5405.0 + 30 +0.0 + 0 +ENDBLK + 5 +2C12 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D209 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D209 + 1 + + 0 +LINE + 5 +2C14 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +34601.0 + 20 +5405.0 + 30 +0.0 + 11 +36424.0 + 21 +5405.0 + 31 +0.0 + 0 +INSERT + 5 +2C15 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +34600.0 + 20 +5405.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2C16 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +36425.0 + 20 +5405.0 + 30 +0.0 + 0 +TEXT + 5 +2C17 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +35403.125 + 20 +5492.5 + 30 +0.0 + 40 +175.0 + 1 +36 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +35512.5 + 21 +5580.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2C18 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +34600.0 + 20 +6775.0 + 30 +0.0 + 0 +POINT + 5 +2C19 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +36425.0 + 20 +6755.0 + 30 +0.0 + 0 +POINT + 5 +2C1A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +36425.0 + 20 +5405.0 + 30 +0.0 + 0 +ENDBLK + 5 +2C1B + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D210 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D210 + 1 + + 0 +LINE + 5 +2C1D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +36426.0 + 20 +5405.0 + 30 +0.0 + 11 +36504.0 + 21 +5405.0 + 31 +0.0 + 0 +INSERT + 5 +2C1E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +36425.0 + 20 +5405.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2C1F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +36505.0 + 20 +5405.0 + 30 +0.0 + 0 +TEXT + 5 +2C20 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +36558.125 + 20 +5492.5 + 30 +0.0 + 40 +175.0 + 1 +1 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +36580.0 + 21 +5580.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2C21 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +36425.0 + 20 +6755.0 + 30 +0.0 + 0 +POINT + 5 +2C22 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +36505.0 + 20 +6755.0 + 30 +0.0 + 0 +POINT + 5 +2C23 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +36505.0 + 20 +5405.0 + 30 +0.0 + 0 +ENDBLK + 5 +2C24 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D211 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D211 + 1 + + 0 +LINE + 5 +2C26 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +37996.0 + 20 +9155.0 + 30 +0.0 + 11 +38574.0 + 21 +9155.0 + 31 +0.0 + 0 +INSERT + 5 +2C27 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +37995.0 + 20 +9155.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2C28 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +38575.0 + 20 +9155.0 + 30 +0.0 + 0 +TEXT + 5 +2C29 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +38219.375 + 20 +9242.5 + 30 +0.0 + 40 +175.0 + 1 +11 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +38285.0 + 21 +9330.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2C2A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +37995.0 + 20 +10130.0 + 30 +0.0 + 0 +POINT + 5 +2C2B + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +38575.0 + 20 +10130.0 + 30 +0.0 + 0 +POINT + 5 +2C2C + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +38575.0 + 20 +9155.0 + 30 +0.0 + 0 +ENDBLK + 5 +2C2D + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D212 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D212 + 1 + + 0 +LINE + 5 +2C2F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +38576.0 + 20 +9155.0 + 30 +0.0 + 11 +39239.0 + 21 +9155.0 + 31 +0.0 + 0 +INSERT + 5 +2C30 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +38575.0 + 20 +9155.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2C31 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +39240.0 + 20 +9155.0 + 30 +0.0 + 0 +TEXT + 5 +2C32 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +38820.0 + 20 +9242.5 + 30 +0.0 + 40 +175.0 + 1 +13 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +38907.5 + 21 +9330.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2C33 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +38575.0 + 20 +10130.0 + 30 +0.0 + 0 +POINT + 5 +2C34 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +39240.0 + 20 +10720.0 + 30 +0.0 + 0 +POINT + 5 +2C35 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +39240.0 + 20 +9155.0 + 30 +0.0 + 0 +ENDBLK + 5 +2C36 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D213 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D213 + 1 + + 0 +LINE + 5 +2C38 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +39241.0 + 20 +9155.0 + 30 +0.0 + 11 +39834.0 + 21 +9155.0 + 31 +0.0 + 0 +INSERT + 5 +2C39 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +39240.0 + 20 +9155.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +2C3A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +39835.0 + 20 +9155.0 + 30 +0.0 + 0 +TEXT + 5 +2C3B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +39471.875 + 20 +9242.5 + 30 +0.0 + 40 +175.0 + 1 +11 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +39537.5 + 21 +9330.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2C3C + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +39240.0 + 20 +10720.0 + 30 +0.0 + 0 +POINT + 5 +2C3D + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +39835.0 + 20 +10125.0 + 30 +0.0 + 0 +POINT + 5 +2C3E + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +39835.0 + 20 +9155.0 + 30 +0.0 + 0 +ENDBLK + 5 +2C3F + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D214 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D214 + 1 + + 0 +LINE + 5 +2C41 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +40740.0 + 20 +13254.0 + 30 +0.0 + 11 +40740.0 + 21 +12626.0 + 31 +0.0 + 0 +INSERT + 5 +2C42 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +40740.0 + 20 +13255.0 + 30 +0.0 + 50 +90.0 + 0 +INSERT + 5 +2C43 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +40740.0 + 20 +12625.0 + 30 +0.0 + 50 +270.0 + 0 +TEXT + 5 +2C44 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +40652.5 + 20 +12852.5 + 30 +0.0 + 40 +175.0 + 1 +12 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +40565.0 + 21 +12940.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2C45 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +39815.0 + 20 +13255.0 + 30 +0.0 + 0 +POINT + 5 +2C46 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +39815.0 + 20 +12625.0 + 30 +0.0 + 0 +POINT + 5 +2C47 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +40740.0 + 20 +12625.0 + 30 +0.0 + 0 +ENDBLK + 5 +2C48 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D215 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D215 + 1 + + 0 +LINE + 5 +2C4A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +40740.0 + 20 +12624.0 + 30 +0.0 + 11 +40740.0 + 21 +11956.0 + 31 +0.0 + 0 +INSERT + 5 +2C4B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +40740.0 + 20 +12625.0 + 30 +0.0 + 50 +90.0 + 0 +INSERT + 5 +2C4C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +40740.0 + 20 +11955.0 + 30 +0.0 + 50 +270.0 + 0 +TEXT + 5 +2C4D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +40652.5 + 20 +12202.5 + 30 +0.0 + 40 +175.0 + 1 +13 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +40565.0 + 21 +12290.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2C4E + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +39815.0 + 20 +12625.0 + 30 +0.0 + 0 +POINT + 5 +2C4F + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +39250.0 + 20 +11955.0 + 30 +0.0 + 0 +POINT + 5 +2C50 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +40740.0 + 20 +11955.0 + 30 +0.0 + 0 +ENDBLK + 5 +2C51 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D216 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D216 + 1 + + 0 +LINE + 5 +2C53 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +40740.0 + 20 +11954.0 + 30 +0.0 + 11 +40740.0 + 21 +11366.0 + 31 +0.0 + 0 +INSERT + 5 +2C54 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +40740.0 + 20 +11955.0 + 30 +0.0 + 50 +90.0 + 0 +INSERT + 5 +2C55 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +40740.0 + 20 +11365.0 + 30 +0.0 + 50 +270.0 + 0 +TEXT + 5 +2C56 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +40652.5 + 20 +11594.375 + 30 +0.0 + 40 +175.0 + 1 +11 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +40565.0 + 21 +11660.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2C57 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +39250.0 + 20 +11955.0 + 30 +0.0 + 0 +POINT + 5 +2C58 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +39240.0 + 20 +11365.0 + 30 +0.0 + 0 +POINT + 5 +2C59 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +40740.0 + 20 +11365.0 + 30 +0.0 + 0 +ENDBLK + 5 +2C5A + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D217 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D217 + 1 + + 0 +LINE + 5 +2C5C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +40740.0 + 20 +11364.0 + 30 +0.0 + 11 +40740.0 + 21 +10706.0 + 31 +0.0 + 0 +INSERT + 5 +2C5D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +40740.0 + 20 +11365.0 + 30 +0.0 + 50 +90.0 + 0 +INSERT + 5 +2C5E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +40740.0 + 20 +10705.0 + 30 +0.0 + 50 +270.0 + 0 +TEXT + 5 +2C5F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +40652.5 + 20 +10947.5 + 30 +0.0 + 40 +175.0 + 1 +13 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +40565.0 + 21 +11035.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2C60 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +39240.0 + 20 +11365.0 + 30 +0.0 + 0 +POINT + 5 +2C61 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +39240.0 + 20 +10705.0 + 30 +0.0 + 0 +POINT + 5 +2C62 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +40740.0 + 20 +10705.0 + 30 +0.0 + 0 +ENDBLK + 5 +2C63 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X218 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X218 + 1 + + 0 +LINE + 5 +2C65 + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +9986.355394 + 30 +0.0 + 11 +34265.625 + 21 +9986.355394 + 31 +0.0 + 0 +LINE + 5 +2C66 + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +9986.355394 + 30 +0.0 + 11 +34546.875 + 21 +9986.355394 + 31 +0.0 + 0 +LINE + 5 +2C67 + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +10067.545275 + 30 +0.0 + 11 +34406.25 + 21 +10067.545275 + 31 +0.0 + 0 +LINE + 5 +2C68 + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +10067.545275 + 30 +0.0 + 11 +34600.0 + 21 +10067.545275 + 31 +0.0 + 0 +LINE + 5 +2C69 + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +10148.735156 + 30 +0.0 + 11 +34265.625 + 21 +10148.735156 + 31 +0.0 + 0 +LINE + 5 +2C6A + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +10148.735156 + 30 +0.0 + 11 +34546.875 + 21 +10148.735156 + 31 +0.0 + 0 +LINE + 5 +2C6B + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +10229.925038 + 30 +0.0 + 11 +34406.25 + 21 +10229.925038 + 31 +0.0 + 0 +LINE + 5 +2C6C + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +10229.925038 + 30 +0.0 + 11 +34600.0 + 21 +10229.925038 + 31 +0.0 + 0 +LINE + 5 +2C6D + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +10311.114919 + 30 +0.0 + 11 +34265.625 + 21 +10311.114919 + 31 +0.0 + 0 +LINE + 5 +2C6E + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +10311.114919 + 30 +0.0 + 11 +34546.875 + 21 +10311.114919 + 31 +0.0 + 0 +LINE + 5 +2C6F + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +10392.3048 + 30 +0.0 + 11 +34406.25 + 21 +10392.3048 + 31 +0.0 + 0 +LINE + 5 +2C70 + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +10392.3048 + 30 +0.0 + 11 +34600.0 + 21 +10392.3048 + 31 +0.0 + 0 +LINE + 5 +2C71 + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +10473.494681 + 30 +0.0 + 11 +34265.625 + 21 +10473.494681 + 31 +0.0 + 0 +LINE + 5 +2C72 + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +10473.494681 + 30 +0.0 + 11 +34546.875 + 21 +10473.494681 + 31 +0.0 + 0 +LINE + 5 +2C73 + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +10554.684563 + 30 +0.0 + 11 +34406.25 + 21 +10554.684563 + 31 +0.0 + 0 +LINE + 5 +2C74 + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +10554.684563 + 30 +0.0 + 11 +34600.0 + 21 +10554.684563 + 31 +0.0 + 0 +LINE + 5 +2C75 + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +10635.874444 + 30 +0.0 + 11 +34265.625 + 21 +10635.874444 + 31 +0.0 + 0 +LINE + 5 +2C76 + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +10635.874444 + 30 +0.0 + 11 +34546.875 + 21 +10635.874444 + 31 +0.0 + 0 +LINE + 5 +2C77 + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +10717.064325 + 30 +0.0 + 11 +34406.25 + 21 +10717.064325 + 31 +0.0 + 0 +LINE + 5 +2C78 + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +10717.064325 + 30 +0.0 + 11 +34600.0 + 21 +10717.064325 + 31 +0.0 + 0 +LINE + 5 +2C79 + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +10798.254206 + 30 +0.0 + 11 +34265.625 + 21 +10798.254206 + 31 +0.0 + 0 +LINE + 5 +2C7A + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +10798.254206 + 30 +0.0 + 11 +34546.875 + 21 +10798.254206 + 31 +0.0 + 0 +LINE + 5 +2C7B + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +10879.444088 + 30 +0.0 + 11 +34406.25 + 21 +10879.444088 + 31 +0.0 + 0 +LINE + 5 +2C7C + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +10879.444088 + 30 +0.0 + 11 +34600.0 + 21 +10879.444088 + 31 +0.0 + 0 +LINE + 5 +2C7D + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +10960.633969 + 30 +0.0 + 11 +34265.625 + 21 +10960.633969 + 31 +0.0 + 0 +LINE + 5 +2C7E + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +10960.633969 + 30 +0.0 + 11 +34546.875 + 21 +10960.633969 + 31 +0.0 + 0 +LINE + 5 +2C7F + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +11041.82385 + 30 +0.0 + 11 +34406.25 + 21 +11041.82385 + 31 +0.0 + 0 +LINE + 5 +2C80 + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +11041.82385 + 30 +0.0 + 11 +34600.0 + 21 +11041.82385 + 31 +0.0 + 0 +LINE + 5 +2C81 + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +11123.013731 + 30 +0.0 + 11 +34265.625 + 21 +11123.013731 + 31 +0.0 + 0 +LINE + 5 +2C82 + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +11123.013731 + 30 +0.0 + 11 +34546.875 + 21 +11123.013731 + 31 +0.0 + 0 +LINE + 5 +2C83 + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +11204.203613 + 30 +0.0 + 11 +34406.25 + 21 +11204.203613 + 31 +0.0 + 0 +LINE + 5 +2C84 + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +11204.203613 + 30 +0.0 + 11 +34600.0 + 21 +11204.203613 + 31 +0.0 + 0 +LINE + 5 +2C85 + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +11285.393494 + 30 +0.0 + 11 +34265.625 + 21 +11285.393494 + 31 +0.0 + 0 +LINE + 5 +2C86 + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +11285.393494 + 30 +0.0 + 11 +34546.875 + 21 +11285.393494 + 31 +0.0 + 0 +LINE + 5 +2C87 + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +11366.583375 + 30 +0.0 + 11 +34406.25 + 21 +11366.583375 + 31 +0.0 + 0 +LINE + 5 +2C88 + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +11366.583375 + 30 +0.0 + 11 +34600.0 + 21 +11366.583375 + 31 +0.0 + 0 +LINE + 5 +2C89 + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +11447.773256 + 30 +0.0 + 11 +34265.625 + 21 +11447.773256 + 31 +0.0 + 0 +LINE + 5 +2C8A + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +11447.773256 + 30 +0.0 + 11 +34546.875 + 21 +11447.773256 + 31 +0.0 + 0 +LINE + 5 +2C8B + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +11528.963138 + 30 +0.0 + 11 +34406.25 + 21 +11528.963138 + 31 +0.0 + 0 +LINE + 5 +2C8C + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +11528.963138 + 30 +0.0 + 11 +34600.0 + 21 +11528.963138 + 31 +0.0 + 0 +LINE + 5 +2C8D + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +11610.153019 + 30 +0.0 + 11 +34265.625 + 21 +11610.153019 + 31 +0.0 + 0 +LINE + 5 +2C8E + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +11610.153019 + 30 +0.0 + 11 +34546.875 + 21 +11610.153019 + 31 +0.0 + 0 +LINE + 5 +2C8F + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +11691.3429 + 30 +0.0 + 11 +34406.25 + 21 +11691.3429 + 31 +0.0 + 0 +LINE + 5 +2C90 + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +11691.3429 + 30 +0.0 + 11 +34600.0 + 21 +11691.3429 + 31 +0.0 + 0 +LINE + 5 +2C91 + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +11772.532781 + 30 +0.0 + 11 +34265.625 + 21 +11772.532781 + 31 +0.0 + 0 +LINE + 5 +2C92 + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +11772.532781 + 30 +0.0 + 11 +34546.875 + 21 +11772.532781 + 31 +0.0 + 0 +LINE + 5 +2C93 + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +11853.722663 + 30 +0.0 + 11 +34406.25 + 21 +11853.722663 + 31 +0.0 + 0 +LINE + 5 +2C94 + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +11853.722663 + 30 +0.0 + 11 +34600.0 + 21 +11853.722663 + 31 +0.0 + 0 +LINE + 5 +2C95 + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +11934.912544 + 30 +0.0 + 11 +34265.625 + 21 +11934.912544 + 31 +0.0 + 0 +LINE + 5 +2C96 + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +11934.912544 + 30 +0.0 + 11 +34546.875 + 21 +11934.912544 + 31 +0.0 + 0 +LINE + 5 +2C97 + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +12016.102425 + 30 +0.0 + 11 +34406.25 + 21 +12016.102425 + 31 +0.0 + 0 +LINE + 5 +2C98 + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +12016.102425 + 30 +0.0 + 11 +34600.0 + 21 +12016.102425 + 31 +0.0 + 0 +LINE + 5 +2C99 + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +12097.292306 + 30 +0.0 + 11 +34265.625 + 21 +12097.292306 + 31 +0.0 + 0 +LINE + 5 +2C9A + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +12097.292306 + 30 +0.0 + 11 +34546.875 + 21 +12097.292306 + 31 +0.0 + 0 +LINE + 5 +2C9B + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +12178.482188 + 30 +0.0 + 11 +34406.25 + 21 +12178.482188 + 31 +0.0 + 0 +LINE + 5 +2C9C + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +12178.482188 + 30 +0.0 + 11 +34600.0 + 21 +12178.482188 + 31 +0.0 + 0 +LINE + 5 +2C9D + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +12259.672069 + 30 +0.0 + 11 +34265.625 + 21 +12259.672069 + 31 +0.0 + 0 +LINE + 5 +2C9E + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +12259.672069 + 30 +0.0 + 11 +34546.875 + 21 +12259.672069 + 31 +0.0 + 0 +LINE + 5 +2C9F + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +12340.86195 + 30 +0.0 + 11 +34406.25 + 21 +12340.86195 + 31 +0.0 + 0 +LINE + 5 +2CA0 + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +12340.86195 + 30 +0.0 + 11 +34600.0 + 21 +12340.86195 + 31 +0.0 + 0 +LINE + 5 +2CA1 + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +12422.051831 + 30 +0.0 + 11 +34265.625 + 21 +12422.051831 + 31 +0.0 + 0 +LINE + 5 +2CA2 + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +12422.051831 + 30 +0.0 + 11 +34546.875 + 21 +12422.051831 + 31 +0.0 + 0 +LINE + 5 +2CA3 + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +12503.241713 + 30 +0.0 + 11 +34406.25 + 21 +12503.241713 + 31 +0.0 + 0 +LINE + 5 +2CA4 + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +12503.241713 + 30 +0.0 + 11 +34600.0 + 21 +12503.241713 + 31 +0.0 + 0 +LINE + 5 +2CA5 + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +12584.431594 + 30 +0.0 + 11 +34265.625 + 21 +12584.431594 + 31 +0.0 + 0 +LINE + 5 +2CA6 + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +12584.431594 + 30 +0.0 + 11 +34546.875 + 21 +12584.431594 + 31 +0.0 + 0 +LINE + 5 +2CA7 + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +12665.621475 + 30 +0.0 + 11 +34406.25 + 21 +12665.621475 + 31 +0.0 + 0 +LINE + 5 +2CA8 + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +12665.621475 + 30 +0.0 + 11 +34600.0 + 21 +12665.621475 + 31 +0.0 + 0 +LINE + 5 +2CA9 + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +12746.811356 + 30 +0.0 + 11 +34265.625 + 21 +12746.811356 + 31 +0.0 + 0 +LINE + 5 +2CAA + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +12746.811356 + 30 +0.0 + 11 +34546.875 + 21 +12746.811356 + 31 +0.0 + 0 +LINE + 5 +2CAB + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +12828.001238 + 30 +0.0 + 11 +34406.25 + 21 +12828.001238 + 31 +0.0 + 0 +LINE + 5 +2CAC + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +12828.001238 + 30 +0.0 + 11 +34600.0 + 21 +12828.001238 + 31 +0.0 + 0 +LINE + 5 +2CAD + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +12909.191119 + 30 +0.0 + 11 +34265.625 + 21 +12909.191119 + 31 +0.0 + 0 +LINE + 5 +2CAE + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +12909.191119 + 30 +0.0 + 11 +34546.875 + 21 +12909.191119 + 31 +0.0 + 0 +LINE + 5 +2CAF + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +12990.381 + 30 +0.0 + 11 +34406.25 + 21 +12990.381 + 31 +0.0 + 0 +LINE + 5 +2CB0 + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +12990.381 + 30 +0.0 + 11 +34600.0 + 21 +12990.381 + 31 +0.0 + 0 +LINE + 5 +2CB1 + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +13071.570881 + 30 +0.0 + 11 +34265.625 + 21 +13071.570881 + 31 +0.0 + 0 +LINE + 5 +2CB2 + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +13071.570881 + 30 +0.0 + 11 +34546.875 + 21 +13071.570881 + 31 +0.0 + 0 +LINE + 5 +2CB3 + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +13152.760763 + 30 +0.0 + 11 +34406.25 + 21 +13152.760763 + 31 +0.0 + 0 +LINE + 5 +2CB4 + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +13152.760763 + 30 +0.0 + 11 +34600.0 + 21 +13152.760763 + 31 +0.0 + 0 +LINE + 5 +2CB5 + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +13233.950644 + 30 +0.0 + 11 +34265.625 + 21 +13233.950644 + 31 +0.0 + 0 +LINE + 5 +2CB6 + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +13233.950644 + 30 +0.0 + 11 +34546.875 + 21 +13233.950644 + 31 +0.0 + 0 +LINE + 5 +2CB7 + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +9905.165513 + 30 +0.0 + 11 +34406.25 + 21 +9905.165513 + 31 +0.0 + 0 +LINE + 5 +2CB8 + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +9905.165513 + 30 +0.0 + 11 +34600.0 + 21 +9905.165513 + 31 +0.0 + 0 +LINE + 5 +2CB9 + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +9823.975631 + 30 +0.0 + 11 +34265.625 + 21 +9823.975631 + 31 +0.0 + 0 +LINE + 5 +2CBA + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +9823.975631 + 30 +0.0 + 11 +34546.875 + 21 +9823.975631 + 31 +0.0 + 0 +LINE + 5 +2CBB + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +9742.78575 + 30 +0.0 + 11 +34406.25 + 21 +9742.78575 + 31 +0.0 + 0 +LINE + 5 +2CBC + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +9742.78575 + 30 +0.0 + 11 +34600.0 + 21 +9742.78575 + 31 +0.0 + 0 +LINE + 5 +2CBD + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +9661.595869 + 30 +0.0 + 11 +34265.625 + 21 +9661.595869 + 31 +0.0 + 0 +LINE + 5 +2CBE + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +9661.595869 + 30 +0.0 + 11 +34546.875 + 21 +9661.595869 + 31 +0.0 + 0 +LINE + 5 +2CBF + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +9580.405988 + 30 +0.0 + 11 +34406.25 + 21 +9580.405988 + 31 +0.0 + 0 +LINE + 5 +2CC0 + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +9580.405988 + 30 +0.0 + 11 +34600.0 + 21 +9580.405988 + 31 +0.0 + 0 +LINE + 5 +2CC1 + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +9499.216106 + 30 +0.0 + 11 +34265.625 + 21 +9499.216106 + 31 +0.0 + 0 +LINE + 5 +2CC2 + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +9499.216106 + 30 +0.0 + 11 +34546.875 + 21 +9499.216106 + 31 +0.0 + 0 +LINE + 5 +2CC3 + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +9418.026225 + 30 +0.0 + 11 +34406.25 + 21 +9418.026225 + 31 +0.0 + 0 +LINE + 5 +2CC4 + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +9418.026225 + 30 +0.0 + 11 +34600.0 + 21 +9418.026225 + 31 +0.0 + 0 +LINE + 5 +2CC5 + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +9336.836344 + 30 +0.0 + 11 +34265.625 + 21 +9336.836344 + 31 +0.0 + 0 +LINE + 5 +2CC6 + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +9336.836344 + 30 +0.0 + 11 +34546.875 + 21 +9336.836344 + 31 +0.0 + 0 +LINE + 5 +2CC7 + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +9255.646463 + 30 +0.0 + 11 +34406.25 + 21 +9255.646463 + 31 +0.0 + 0 +LINE + 5 +2CC8 + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +9255.646463 + 30 +0.0 + 11 +34600.0 + 21 +9255.646463 + 31 +0.0 + 0 +LINE + 5 +2CC9 + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +9174.456581 + 30 +0.0 + 11 +34265.625 + 21 +9174.456581 + 31 +0.0 + 0 +LINE + 5 +2CCA + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +9174.456581 + 30 +0.0 + 11 +34546.875 + 21 +9174.456581 + 31 +0.0 + 0 +LINE + 5 +2CCB + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +9093.2667 + 30 +0.0 + 11 +34406.25 + 21 +9093.2667 + 31 +0.0 + 0 +LINE + 5 +2CCC + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +9093.2667 + 30 +0.0 + 11 +34600.0 + 21 +9093.2667 + 31 +0.0 + 0 +LINE + 5 +2CCD + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +9012.076819 + 30 +0.0 + 11 +34265.625 + 21 +9012.076819 + 31 +0.0 + 0 +LINE + 5 +2CCE + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +9012.076819 + 30 +0.0 + 11 +34546.875 + 21 +9012.076819 + 31 +0.0 + 0 +LINE + 5 +2CCF + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +8930.886938 + 30 +0.0 + 11 +34406.25 + 21 +8930.886938 + 31 +0.0 + 0 +LINE + 5 +2CD0 + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +8930.886938 + 30 +0.0 + 11 +34600.0 + 21 +8930.886938 + 31 +0.0 + 0 +LINE + 5 +2CD1 + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +8849.697056 + 30 +0.0 + 11 +34265.625 + 21 +8849.697056 + 31 +0.0 + 0 +LINE + 5 +2CD2 + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +8849.697056 + 30 +0.0 + 11 +34546.875 + 21 +8849.697056 + 31 +0.0 + 0 +LINE + 5 +2CD3 + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +8768.507175 + 30 +0.0 + 11 +34406.25 + 21 +8768.507175 + 31 +0.0 + 0 +LINE + 5 +2CD4 + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +8768.507175 + 30 +0.0 + 11 +34600.0 + 21 +8768.507175 + 31 +0.0 + 0 +LINE + 5 +2CD5 + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +8687.317294 + 30 +0.0 + 11 +34265.625 + 21 +8687.317294 + 31 +0.0 + 0 +LINE + 5 +2CD6 + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +8687.317294 + 30 +0.0 + 11 +34546.875 + 21 +8687.317294 + 31 +0.0 + 0 +LINE + 5 +2CD7 + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +8606.127413 + 30 +0.0 + 11 +34406.25 + 21 +8606.127413 + 31 +0.0 + 0 +LINE + 5 +2CD8 + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +8606.127413 + 30 +0.0 + 11 +34600.0 + 21 +8606.127413 + 31 +0.0 + 0 +LINE + 5 +2CD9 + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +8524.937531 + 30 +0.0 + 11 +34265.625 + 21 +8524.937531 + 31 +0.0 + 0 +LINE + 5 +2CDA + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +8524.937531 + 30 +0.0 + 11 +34546.875 + 21 +8524.937531 + 31 +0.0 + 0 +LINE + 5 +2CDB + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +8443.74765 + 30 +0.0 + 11 +34406.25 + 21 +8443.74765 + 31 +0.0 + 0 +LINE + 5 +2CDC + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +8443.74765 + 30 +0.0 + 11 +34600.0 + 21 +8443.74765 + 31 +0.0 + 0 +LINE + 5 +2CDD + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +8362.557769 + 30 +0.0 + 11 +34265.625 + 21 +8362.557769 + 31 +0.0 + 0 +LINE + 5 +2CDE + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +8362.557769 + 30 +0.0 + 11 +34546.875 + 21 +8362.557769 + 31 +0.0 + 0 +LINE + 5 +2CDF + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +8281.367888 + 30 +0.0 + 11 +34406.25 + 21 +8281.367888 + 31 +0.0 + 0 +LINE + 5 +2CE0 + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +8281.367888 + 30 +0.0 + 11 +34600.0 + 21 +8281.367888 + 31 +0.0 + 0 +LINE + 5 +2CE1 + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +8200.178006 + 30 +0.0 + 11 +34265.625 + 21 +8200.178006 + 31 +0.0 + 0 +LINE + 5 +2CE2 + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +8200.178006 + 30 +0.0 + 11 +34546.875 + 21 +8200.178006 + 31 +0.0 + 0 +LINE + 5 +2CE3 + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +8118.988125 + 30 +0.0 + 11 +34406.25 + 21 +8118.988125 + 31 +0.0 + 0 +LINE + 5 +2CE4 + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +8118.988125 + 30 +0.0 + 11 +34600.0 + 21 +8118.988125 + 31 +0.0 + 0 +LINE + 5 +2CE5 + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +8037.798244 + 30 +0.0 + 11 +34265.625 + 21 +8037.798244 + 31 +0.0 + 0 +LINE + 5 +2CE6 + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +8037.798244 + 30 +0.0 + 11 +34546.875 + 21 +8037.798244 + 31 +0.0 + 0 +LINE + 5 +2CE7 + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +7956.608363 + 30 +0.0 + 11 +34406.25 + 21 +7956.608363 + 31 +0.0 + 0 +LINE + 5 +2CE8 + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +7956.608363 + 30 +0.0 + 11 +34600.0 + 21 +7956.608363 + 31 +0.0 + 0 +LINE + 5 +2CE9 + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +7875.418481 + 30 +0.0 + 11 +34265.625 + 21 +7875.418481 + 31 +0.0 + 0 +LINE + 5 +2CEA + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +7875.418481 + 30 +0.0 + 11 +34546.875 + 21 +7875.418481 + 31 +0.0 + 0 +LINE + 5 +2CEB + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +7794.2286 + 30 +0.0 + 11 +34406.25 + 21 +7794.2286 + 31 +0.0 + 0 +LINE + 5 +2CEC + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +7794.2286 + 30 +0.0 + 11 +34600.0 + 21 +7794.2286 + 31 +0.0 + 0 +LINE + 5 +2CED + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +7713.038719 + 30 +0.0 + 11 +34265.625 + 21 +7713.038719 + 31 +0.0 + 0 +LINE + 5 +2CEE + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +7713.038719 + 30 +0.0 + 11 +34546.875 + 21 +7713.038719 + 31 +0.0 + 0 +LINE + 5 +2CEF + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +7631.848838 + 30 +0.0 + 11 +34406.25 + 21 +7631.848838 + 31 +0.0 + 0 +LINE + 5 +2CF0 + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +7631.848838 + 30 +0.0 + 11 +34600.0 + 21 +7631.848838 + 31 +0.0 + 0 +LINE + 5 +2CF1 + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +7550.658956 + 30 +0.0 + 11 +34265.625 + 21 +7550.658956 + 31 +0.0 + 0 +LINE + 5 +2CF2 + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +7550.658956 + 30 +0.0 + 11 +34546.875 + 21 +7550.658956 + 31 +0.0 + 0 +LINE + 5 +2CF3 + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +7469.469075 + 30 +0.0 + 11 +34406.25 + 21 +7469.469075 + 31 +0.0 + 0 +LINE + 5 +2CF4 + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +7469.469075 + 30 +0.0 + 11 +34600.0 + 21 +7469.469075 + 31 +0.0 + 0 +LINE + 5 +2CF5 + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +7388.279194 + 30 +0.0 + 11 +34265.625 + 21 +7388.279194 + 31 +0.0 + 0 +LINE + 5 +2CF6 + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +7388.279194 + 30 +0.0 + 11 +34546.875 + 21 +7388.279194 + 31 +0.0 + 0 +LINE + 5 +2CF7 + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +7307.089313 + 30 +0.0 + 11 +34406.25 + 21 +7307.089313 + 31 +0.0 + 0 +LINE + 5 +2CF8 + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +7307.089313 + 30 +0.0 + 11 +34600.0 + 21 +7307.089313 + 31 +0.0 + 0 +LINE + 5 +2CF9 + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +7225.899431 + 30 +0.0 + 11 +34265.625 + 21 +7225.899431 + 31 +0.0 + 0 +LINE + 5 +2CFA + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +7225.899431 + 30 +0.0 + 11 +34546.875 + 21 +7225.899431 + 31 +0.0 + 0 +LINE + 5 +2CFB + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +7144.70955 + 30 +0.0 + 11 +34406.25 + 21 +7144.70955 + 31 +0.0 + 0 +LINE + 5 +2CFC + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +7144.70955 + 30 +0.0 + 11 +34600.0 + 21 +7144.70955 + 31 +0.0 + 0 +LINE + 5 +2CFD + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +7063.519669 + 30 +0.0 + 11 +34265.625 + 21 +7063.519669 + 31 +0.0 + 0 +LINE + 5 +2CFE + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +7063.519669 + 30 +0.0 + 11 +34546.875 + 21 +7063.519669 + 31 +0.0 + 0 +LINE + 5 +2CFF + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +6982.329788 + 30 +0.0 + 11 +34406.25 + 21 +6982.329788 + 31 +0.0 + 0 +LINE + 5 +2D00 + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +6982.329788 + 30 +0.0 + 11 +34600.0 + 21 +6982.329788 + 31 +0.0 + 0 +LINE + 5 +2D01 + 8 +0 + 62 + 0 + 10 +34200.0 + 20 +6901.139906 + 30 +0.0 + 11 +34265.625 + 21 +6901.139906 + 31 +0.0 + 0 +LINE + 5 +2D02 + 8 +0 + 62 + 0 + 10 +34453.125 + 20 +6901.139906 + 30 +0.0 + 11 +34546.875 + 21 +6901.139906 + 31 +0.0 + 0 +LINE + 5 +2D03 + 8 +0 + 62 + 0 + 10 +34312.5 + 20 +6819.950025 + 30 +0.0 + 11 +34406.25 + 21 +6819.950025 + 31 +0.0 + 0 +LINE + 5 +2D04 + 8 +0 + 62 + 0 + 10 +34593.75 + 20 +6819.950025 + 30 +0.0 + 11 +34600.0 + 21 +6819.950025 + 31 +0.0 + 0 +LINE + 5 +2D05 + 8 +0 + 62 + 0 + 10 +34593.749868 + 20 +9580.405953 + 30 +0.0 + 11 +34546.874868 + 21 +9661.595835 + 31 +0.0 + 0 +LINE + 5 +2D06 + 8 +0 + 62 + 0 + 10 +34453.124868 + 20 +9823.975598 + 30 +0.0 + 11 +34406.249868 + 21 +9905.16548 + 31 +0.0 + 0 +LINE + 5 +2D07 + 8 +0 + 62 + 0 + 10 +34312.499868 + 20 +10067.545243 + 30 +0.0 + 11 +34265.624868 + 21 +10148.735125 + 31 +0.0 + 0 +LINE + 5 +2D08 + 8 +0 + 62 + 0 + 10 +34593.749869 + 20 +9418.02619 + 30 +0.0 + 11 +34546.874869 + 21 +9499.216072 + 31 +0.0 + 0 +LINE + 5 +2D09 + 8 +0 + 62 + 0 + 10 +34453.124869 + 20 +9661.595835 + 30 +0.0 + 11 +34406.249869 + 21 +9742.785717 + 31 +0.0 + 0 +LINE + 5 +2D0A + 8 +0 + 62 + 0 + 10 +34312.499869 + 20 +9905.16548 + 30 +0.0 + 11 +34265.624869 + 21 +9986.355362 + 31 +0.0 + 0 +LINE + 5 +2D0B + 8 +0 + 62 + 0 + 10 +34593.749869 + 20 +9255.646427 + 30 +0.0 + 11 +34546.874869 + 21 +9336.836309 + 31 +0.0 + 0 +LINE + 5 +2D0C + 8 +0 + 62 + 0 + 10 +34453.124869 + 20 +9499.216072 + 30 +0.0 + 11 +34406.249869 + 21 +9580.405954 + 31 +0.0 + 0 +LINE + 5 +2D0D + 8 +0 + 62 + 0 + 10 +34312.499869 + 20 +9742.785717 + 30 +0.0 + 11 +34265.624869 + 21 +9823.975599 + 31 +0.0 + 0 +LINE + 5 +2D0E + 8 +0 + 62 + 0 + 10 +34593.749869 + 20 +9093.266664 + 30 +0.0 + 11 +34546.874869 + 21 +9174.456546 + 31 +0.0 + 0 +LINE + 5 +2D0F + 8 +0 + 62 + 0 + 10 +34453.124869 + 20 +9336.836309 + 30 +0.0 + 11 +34406.249869 + 21 +9418.026191 + 31 +0.0 + 0 +LINE + 5 +2D10 + 8 +0 + 62 + 0 + 10 +34312.499869 + 20 +9580.405954 + 30 +0.0 + 11 +34265.624869 + 21 +9661.595836 + 31 +0.0 + 0 +LINE + 5 +2D11 + 8 +0 + 62 + 0 + 10 +34593.74987 + 20 +8930.886901 + 30 +0.0 + 11 +34546.87487 + 21 +9012.076783 + 31 +0.0 + 0 +LINE + 5 +2D12 + 8 +0 + 62 + 0 + 10 +34453.12487 + 20 +9174.456546 + 30 +0.0 + 11 +34406.24987 + 21 +9255.646428 + 31 +0.0 + 0 +LINE + 5 +2D13 + 8 +0 + 62 + 0 + 10 +34312.49987 + 20 +9418.026191 + 30 +0.0 + 11 +34265.62487 + 21 +9499.216073 + 31 +0.0 + 0 +LINE + 5 +2D14 + 8 +0 + 62 + 0 + 10 +34593.74987 + 20 +8768.507138 + 30 +0.0 + 11 +34546.87487 + 21 +8849.69702 + 31 +0.0 + 0 +LINE + 5 +2D15 + 8 +0 + 62 + 0 + 10 +34453.12487 + 20 +9012.076783 + 30 +0.0 + 11 +34406.24987 + 21 +9093.266665 + 31 +0.0 + 0 +LINE + 5 +2D16 + 8 +0 + 62 + 0 + 10 +34312.49987 + 20 +9255.646428 + 30 +0.0 + 11 +34265.62487 + 21 +9336.83631 + 31 +0.0 + 0 +LINE + 5 +2D17 + 8 +0 + 62 + 0 + 10 +34593.74987 + 20 +8606.127375 + 30 +0.0 + 11 +34546.87487 + 21 +8687.317257 + 31 +0.0 + 0 +LINE + 5 +2D18 + 8 +0 + 62 + 0 + 10 +34453.12487 + 20 +8849.69702 + 30 +0.0 + 11 +34406.24987 + 21 +8930.886902 + 31 +0.0 + 0 +LINE + 5 +2D19 + 8 +0 + 62 + 0 + 10 +34312.49987 + 20 +9093.266665 + 30 +0.0 + 11 +34265.62487 + 21 +9174.456546 + 31 +0.0 + 0 +LINE + 5 +2D1A + 8 +0 + 62 + 0 + 10 +34593.749871 + 20 +8443.747612 + 30 +0.0 + 11 +34546.874871 + 21 +8524.937494 + 31 +0.0 + 0 +LINE + 5 +2D1B + 8 +0 + 62 + 0 + 10 +34453.124871 + 20 +8687.317257 + 30 +0.0 + 11 +34406.249871 + 21 +8768.507139 + 31 +0.0 + 0 +LINE + 5 +2D1C + 8 +0 + 62 + 0 + 10 +34312.499871 + 20 +8930.886902 + 30 +0.0 + 11 +34265.624871 + 21 +9012.076783 + 31 +0.0 + 0 +LINE + 5 +2D1D + 8 +0 + 62 + 0 + 10 +34593.749871 + 20 +8281.367849 + 30 +0.0 + 11 +34546.874871 + 21 +8362.557731 + 31 +0.0 + 0 +LINE + 5 +2D1E + 8 +0 + 62 + 0 + 10 +34453.124871 + 20 +8524.937494 + 30 +0.0 + 11 +34406.249871 + 21 +8606.127376 + 31 +0.0 + 0 +LINE + 5 +2D1F + 8 +0 + 62 + 0 + 10 +34312.499871 + 20 +8768.507139 + 30 +0.0 + 11 +34265.624871 + 21 +8849.69702 + 31 +0.0 + 0 +LINE + 5 +2D20 + 8 +0 + 62 + 0 + 10 +34593.749871 + 20 +8118.988086 + 30 +0.0 + 11 +34546.874871 + 21 +8200.177968 + 31 +0.0 + 0 +LINE + 5 +2D21 + 8 +0 + 62 + 0 + 10 +34453.124871 + 20 +8362.557731 + 30 +0.0 + 11 +34406.249871 + 21 +8443.747613 + 31 +0.0 + 0 +LINE + 5 +2D22 + 8 +0 + 62 + 0 + 10 +34312.499871 + 20 +8606.127376 + 30 +0.0 + 11 +34265.624871 + 21 +8687.317257 + 31 +0.0 + 0 +LINE + 5 +2D23 + 8 +0 + 62 + 0 + 10 +34593.749872 + 20 +7956.608323 + 30 +0.0 + 11 +34546.874872 + 21 +8037.798205 + 31 +0.0 + 0 +LINE + 5 +2D24 + 8 +0 + 62 + 0 + 10 +34453.124872 + 20 +8200.177968 + 30 +0.0 + 11 +34406.249872 + 21 +8281.36785 + 31 +0.0 + 0 +LINE + 5 +2D25 + 8 +0 + 62 + 0 + 10 +34312.499872 + 20 +8443.747613 + 30 +0.0 + 11 +34265.624872 + 21 +8524.937494 + 31 +0.0 + 0 +LINE + 5 +2D26 + 8 +0 + 62 + 0 + 10 +34593.749872 + 20 +7794.22856 + 30 +0.0 + 11 +34546.874872 + 21 +7875.418442 + 31 +0.0 + 0 +LINE + 5 +2D27 + 8 +0 + 62 + 0 + 10 +34453.124872 + 20 +8037.798205 + 30 +0.0 + 11 +34406.249872 + 21 +8118.988087 + 31 +0.0 + 0 +LINE + 5 +2D28 + 8 +0 + 62 + 0 + 10 +34312.499872 + 20 +8281.36785 + 30 +0.0 + 11 +34265.624872 + 21 +8362.557731 + 31 +0.0 + 0 +LINE + 5 +2D29 + 8 +0 + 62 + 0 + 10 +34593.749872 + 20 +7631.848797 + 30 +0.0 + 11 +34546.874872 + 21 +7713.038679 + 31 +0.0 + 0 +LINE + 5 +2D2A + 8 +0 + 62 + 0 + 10 +34453.124872 + 20 +7875.418442 + 30 +0.0 + 11 +34406.249872 + 21 +7956.608323 + 31 +0.0 + 0 +LINE + 5 +2D2B + 8 +0 + 62 + 0 + 10 +34312.499872 + 20 +8118.988087 + 30 +0.0 + 11 +34265.624872 + 21 +8200.177968 + 31 +0.0 + 0 +LINE + 5 +2D2C + 8 +0 + 62 + 0 + 10 +34593.749872 + 20 +7469.469034 + 30 +0.0 + 11 +34546.874872 + 21 +7550.658916 + 31 +0.0 + 0 +LINE + 5 +2D2D + 8 +0 + 62 + 0 + 10 +34453.124872 + 20 +7713.038679 + 30 +0.0 + 11 +34406.249872 + 21 +7794.22856 + 31 +0.0 + 0 +LINE + 5 +2D2E + 8 +0 + 62 + 0 + 10 +34312.499872 + 20 +7956.608324 + 30 +0.0 + 11 +34265.624872 + 21 +8037.798205 + 31 +0.0 + 0 +LINE + 5 +2D2F + 8 +0 + 62 + 0 + 10 +34593.749873 + 20 +7307.089271 + 30 +0.0 + 11 +34546.874873 + 21 +7388.279153 + 31 +0.0 + 0 +LINE + 5 +2D30 + 8 +0 + 62 + 0 + 10 +34453.124873 + 20 +7550.658916 + 30 +0.0 + 11 +34406.249873 + 21 +7631.848797 + 31 +0.0 + 0 +LINE + 5 +2D31 + 8 +0 + 62 + 0 + 10 +34312.499873 + 20 +7794.228561 + 30 +0.0 + 11 +34265.624873 + 21 +7875.418442 + 31 +0.0 + 0 +LINE + 5 +2D32 + 8 +0 + 62 + 0 + 10 +34593.749873 + 20 +7144.709508 + 30 +0.0 + 11 +34546.874873 + 21 +7225.89939 + 31 +0.0 + 0 +LINE + 5 +2D33 + 8 +0 + 62 + 0 + 10 +34453.124873 + 20 +7388.279153 + 30 +0.0 + 11 +34406.249873 + 21 +7469.469034 + 31 +0.0 + 0 +LINE + 5 +2D34 + 8 +0 + 62 + 0 + 10 +34312.499873 + 20 +7631.848798 + 30 +0.0 + 11 +34265.624873 + 21 +7713.038679 + 31 +0.0 + 0 +LINE + 5 +2D35 + 8 +0 + 62 + 0 + 10 +34593.749873 + 20 +6982.329745 + 30 +0.0 + 11 +34546.874873 + 21 +7063.519627 + 31 +0.0 + 0 +LINE + 5 +2D36 + 8 +0 + 62 + 0 + 10 +34453.124873 + 20 +7225.89939 + 30 +0.0 + 11 +34406.249873 + 21 +7307.089271 + 31 +0.0 + 0 +LINE + 5 +2D37 + 8 +0 + 62 + 0 + 10 +34312.499873 + 20 +7469.469035 + 30 +0.0 + 11 +34265.624873 + 21 +7550.658916 + 31 +0.0 + 0 +LINE + 5 +2D38 + 8 +0 + 62 + 0 + 10 +34593.749874 + 20 +6819.949982 + 30 +0.0 + 11 +34546.874874 + 21 +6901.139863 + 31 +0.0 + 0 +LINE + 5 +2D39 + 8 +0 + 62 + 0 + 10 +34453.124874 + 20 +7063.519627 + 30 +0.0 + 11 +34406.249874 + 21 +7144.709508 + 31 +0.0 + 0 +LINE + 5 +2D3A + 8 +0 + 62 + 0 + 10 +34312.499874 + 20 +7307.089272 + 30 +0.0 + 11 +34265.624874 + 21 +7388.279153 + 31 +0.0 + 0 +LINE + 5 +2D3B + 8 +0 + 62 + 0 + 10 +34453.124874 + 20 +6901.139864 + 30 +0.0 + 11 +34406.249874 + 21 +6982.329745 + 31 +0.0 + 0 +LINE + 5 +2D3C + 8 +0 + 62 + 0 + 10 +34312.499874 + 20 +7144.709508 + 30 +0.0 + 11 +34265.624874 + 21 +7225.89939 + 31 +0.0 + 0 +LINE + 5 +2D3D + 8 +0 + 62 + 0 + 10 +34446.635515 + 20 +6750.0 + 30 +0.0 + 11 +34406.249874 + 21 +6819.949982 + 31 +0.0 + 0 +LINE + 5 +2D3E + 8 +0 + 62 + 0 + 10 +34312.499874 + 20 +6982.329745 + 30 +0.0 + 11 +34265.624874 + 21 +7063.519627 + 31 +0.0 + 0 +LINE + 5 +2D3F + 8 +0 + 62 + 0 + 10 +34312.499875 + 20 +6819.949982 + 30 +0.0 + 11 +34265.624875 + 21 +6901.139864 + 31 +0.0 + 0 +LINE + 5 +2D40 + 8 +0 + 62 + 0 + 10 +34593.749868 + 20 +9742.785716 + 30 +0.0 + 11 +34546.874868 + 21 +9823.975598 + 31 +0.0 + 0 +LINE + 5 +2D41 + 8 +0 + 62 + 0 + 10 +34453.124868 + 20 +9986.355361 + 30 +0.0 + 11 +34406.249868 + 21 +10067.545243 + 31 +0.0 + 0 +LINE + 5 +2D42 + 8 +0 + 62 + 0 + 10 +34312.499868 + 20 +10229.925006 + 30 +0.0 + 11 +34265.624868 + 21 +10311.114888 + 31 +0.0 + 0 +LINE + 5 +2D43 + 8 +0 + 62 + 0 + 10 +34593.749868 + 20 +9905.16548 + 30 +0.0 + 11 +34546.874868 + 21 +9986.355361 + 31 +0.0 + 0 +LINE + 5 +2D44 + 8 +0 + 62 + 0 + 10 +34453.124868 + 20 +10148.735124 + 30 +0.0 + 11 +34406.249868 + 21 +10229.925006 + 31 +0.0 + 0 +LINE + 5 +2D45 + 8 +0 + 62 + 0 + 10 +34312.499868 + 20 +10392.304769 + 30 +0.0 + 11 +34265.624868 + 21 +10473.494651 + 31 +0.0 + 0 +LINE + 5 +2D46 + 8 +0 + 62 + 0 + 10 +34593.749868 + 20 +10067.545243 + 30 +0.0 + 11 +34546.874868 + 21 +10148.735124 + 31 +0.0 + 0 +LINE + 5 +2D47 + 8 +0 + 62 + 0 + 10 +34453.124868 + 20 +10311.114887 + 30 +0.0 + 11 +34406.249868 + 21 +10392.304769 + 31 +0.0 + 0 +LINE + 5 +2D48 + 8 +0 + 62 + 0 + 10 +34312.499868 + 20 +10554.684532 + 30 +0.0 + 11 +34265.624868 + 21 +10635.874414 + 31 +0.0 + 0 +LINE + 5 +2D49 + 8 +0 + 62 + 0 + 10 +34593.749867 + 20 +10229.925006 + 30 +0.0 + 11 +34546.874867 + 21 +10311.114887 + 31 +0.0 + 0 +LINE + 5 +2D4A + 8 +0 + 62 + 0 + 10 +34453.124867 + 20 +10473.49465 + 30 +0.0 + 11 +34406.249867 + 21 +10554.684532 + 31 +0.0 + 0 +LINE + 5 +2D4B + 8 +0 + 62 + 0 + 10 +34312.499867 + 20 +10717.064295 + 30 +0.0 + 11 +34265.624867 + 21 +10798.254177 + 31 +0.0 + 0 +LINE + 5 +2D4C + 8 +0 + 62 + 0 + 10 +34593.749867 + 20 +10392.304769 + 30 +0.0 + 11 +34546.874867 + 21 +10473.49465 + 31 +0.0 + 0 +LINE + 5 +2D4D + 8 +0 + 62 + 0 + 10 +34453.124867 + 20 +10635.874413 + 30 +0.0 + 11 +34406.249867 + 21 +10717.064295 + 31 +0.0 + 0 +LINE + 5 +2D4E + 8 +0 + 62 + 0 + 10 +34312.499867 + 20 +10879.444058 + 30 +0.0 + 11 +34265.624867 + 21 +10960.63394 + 31 +0.0 + 0 +LINE + 5 +2D4F + 8 +0 + 62 + 0 + 10 +34593.749867 + 20 +10554.684532 + 30 +0.0 + 11 +34546.874867 + 21 +10635.874413 + 31 +0.0 + 0 +LINE + 5 +2D50 + 8 +0 + 62 + 0 + 10 +34453.124867 + 20 +10798.254176 + 30 +0.0 + 11 +34406.249867 + 21 +10879.444058 + 31 +0.0 + 0 +LINE + 5 +2D51 + 8 +0 + 62 + 0 + 10 +34312.499867 + 20 +11041.823821 + 30 +0.0 + 11 +34265.624867 + 21 +11123.013703 + 31 +0.0 + 0 +LINE + 5 +2D52 + 8 +0 + 62 + 0 + 10 +34593.749866 + 20 +10717.064295 + 30 +0.0 + 11 +34546.874866 + 21 +10798.254176 + 31 +0.0 + 0 +LINE + 5 +2D53 + 8 +0 + 62 + 0 + 10 +34453.124866 + 20 +10960.633939 + 30 +0.0 + 11 +34406.249866 + 21 +11041.823821 + 31 +0.0 + 0 +LINE + 5 +2D54 + 8 +0 + 62 + 0 + 10 +34312.499866 + 20 +11204.203584 + 30 +0.0 + 11 +34265.624866 + 21 +11285.393466 + 31 +0.0 + 0 +LINE + 5 +2D55 + 8 +0 + 62 + 0 + 10 +34593.749866 + 20 +10879.444058 + 30 +0.0 + 11 +34546.874866 + 21 +10960.633939 + 31 +0.0 + 0 +LINE + 5 +2D56 + 8 +0 + 62 + 0 + 10 +34453.124866 + 20 +11123.013703 + 30 +0.0 + 11 +34406.249866 + 21 +11204.203584 + 31 +0.0 + 0 +LINE + 5 +2D57 + 8 +0 + 62 + 0 + 10 +34312.499866 + 20 +11366.583347 + 30 +0.0 + 11 +34265.624866 + 21 +11447.773229 + 31 +0.0 + 0 +LINE + 5 +2D58 + 8 +0 + 62 + 0 + 10 +34593.749866 + 20 +11041.823821 + 30 +0.0 + 11 +34546.874866 + 21 +11123.013702 + 31 +0.0 + 0 +LINE + 5 +2D59 + 8 +0 + 62 + 0 + 10 +34453.124866 + 20 +11285.393466 + 30 +0.0 + 11 +34406.249866 + 21 +11366.583347 + 31 +0.0 + 0 +LINE + 5 +2D5A + 8 +0 + 62 + 0 + 10 +34312.499866 + 20 +11528.96311 + 30 +0.0 + 11 +34265.624866 + 21 +11610.152992 + 31 +0.0 + 0 +LINE + 5 +2D5B + 8 +0 + 62 + 0 + 10 +34593.749865 + 20 +11204.203584 + 30 +0.0 + 11 +34546.874865 + 21 +11285.393465 + 31 +0.0 + 0 +LINE + 5 +2D5C + 8 +0 + 62 + 0 + 10 +34453.124865 + 20 +11447.773229 + 30 +0.0 + 11 +34406.249865 + 21 +11528.96311 + 31 +0.0 + 0 +LINE + 5 +2D5D + 8 +0 + 62 + 0 + 10 +34312.499865 + 20 +11691.342873 + 30 +0.0 + 11 +34265.624865 + 21 +11772.532755 + 31 +0.0 + 0 +LINE + 5 +2D5E + 8 +0 + 62 + 0 + 10 +34593.749865 + 20 +11366.583347 + 30 +0.0 + 11 +34546.874865 + 21 +11447.773228 + 31 +0.0 + 0 +LINE + 5 +2D5F + 8 +0 + 62 + 0 + 10 +34453.124865 + 20 +11610.152992 + 30 +0.0 + 11 +34406.249865 + 21 +11691.342873 + 31 +0.0 + 0 +LINE + 5 +2D60 + 8 +0 + 62 + 0 + 10 +34312.499865 + 20 +11853.722636 + 30 +0.0 + 11 +34265.624865 + 21 +11934.912518 + 31 +0.0 + 0 +LINE + 5 +2D61 + 8 +0 + 62 + 0 + 10 +34593.749865 + 20 +11528.96311 + 30 +0.0 + 11 +34546.874865 + 21 +11610.152991 + 31 +0.0 + 0 +LINE + 5 +2D62 + 8 +0 + 62 + 0 + 10 +34453.124865 + 20 +11772.532755 + 30 +0.0 + 11 +34406.249865 + 21 +11853.722636 + 31 +0.0 + 0 +LINE + 5 +2D63 + 8 +0 + 62 + 0 + 10 +34312.499865 + 20 +12016.102399 + 30 +0.0 + 11 +34265.624865 + 21 +12097.292281 + 31 +0.0 + 0 +LINE + 5 +2D64 + 8 +0 + 62 + 0 + 10 +34593.749864 + 20 +11691.342873 + 30 +0.0 + 11 +34546.874864 + 21 +11772.532754 + 31 +0.0 + 0 +LINE + 5 +2D65 + 8 +0 + 62 + 0 + 10 +34453.124864 + 20 +11934.912518 + 30 +0.0 + 11 +34406.249864 + 21 +12016.102399 + 31 +0.0 + 0 +LINE + 5 +2D66 + 8 +0 + 62 + 0 + 10 +34312.499864 + 20 +12178.482162 + 30 +0.0 + 11 +34265.624864 + 21 +12259.672044 + 31 +0.0 + 0 +LINE + 5 +2D67 + 8 +0 + 62 + 0 + 10 +34593.749864 + 20 +11853.722636 + 30 +0.0 + 11 +34546.874864 + 21 +11934.912517 + 31 +0.0 + 0 +LINE + 5 +2D68 + 8 +0 + 62 + 0 + 10 +34453.124864 + 20 +12097.292281 + 30 +0.0 + 11 +34406.249864 + 21 +12178.482162 + 31 +0.0 + 0 +LINE + 5 +2D69 + 8 +0 + 62 + 0 + 10 +34312.499864 + 20 +12340.861926 + 30 +0.0 + 11 +34265.624864 + 21 +12422.051807 + 31 +0.0 + 0 +LINE + 5 +2D6A + 8 +0 + 62 + 0 + 10 +34593.749864 + 20 +12016.102399 + 30 +0.0 + 11 +34546.874864 + 21 +12097.292281 + 31 +0.0 + 0 +LINE + 5 +2D6B + 8 +0 + 62 + 0 + 10 +34453.124864 + 20 +12259.672044 + 30 +0.0 + 11 +34406.249864 + 21 +12340.861925 + 31 +0.0 + 0 +LINE + 5 +2D6C + 8 +0 + 62 + 0 + 10 +34312.499864 + 20 +12503.241689 + 30 +0.0 + 11 +34265.624864 + 21 +12584.43157 + 31 +0.0 + 0 +LINE + 5 +2D6D + 8 +0 + 62 + 0 + 10 +34593.749864 + 20 +12178.482162 + 30 +0.0 + 11 +34546.874864 + 21 +12259.672044 + 31 +0.0 + 0 +LINE + 5 +2D6E + 8 +0 + 62 + 0 + 10 +34453.124864 + 20 +12422.051807 + 30 +0.0 + 11 +34406.249864 + 21 +12503.241688 + 31 +0.0 + 0 +LINE + 5 +2D6F + 8 +0 + 62 + 0 + 10 +34312.499864 + 20 +12665.621452 + 30 +0.0 + 11 +34265.624864 + 21 +12746.811333 + 31 +0.0 + 0 +LINE + 5 +2D70 + 8 +0 + 62 + 0 + 10 +34593.749863 + 20 +12340.861925 + 30 +0.0 + 11 +34546.874863 + 21 +12422.051807 + 31 +0.0 + 0 +LINE + 5 +2D71 + 8 +0 + 62 + 0 + 10 +34453.124863 + 20 +12584.43157 + 30 +0.0 + 11 +34406.249863 + 21 +12665.621451 + 31 +0.0 + 0 +LINE + 5 +2D72 + 8 +0 + 62 + 0 + 10 +34312.499863 + 20 +12828.001215 + 30 +0.0 + 11 +34265.624863 + 21 +12909.191096 + 31 +0.0 + 0 +LINE + 5 +2D73 + 8 +0 + 62 + 0 + 10 +34593.749863 + 20 +12503.241688 + 30 +0.0 + 11 +34546.874863 + 21 +12584.43157 + 31 +0.0 + 0 +LINE + 5 +2D74 + 8 +0 + 62 + 0 + 10 +34453.124863 + 20 +12746.811333 + 30 +0.0 + 11 +34406.249863 + 21 +12828.001214 + 31 +0.0 + 0 +LINE + 5 +2D75 + 8 +0 + 62 + 0 + 10 +34312.499863 + 20 +12990.380978 + 30 +0.0 + 11 +34265.624863 + 21 +13071.570859 + 31 +0.0 + 0 +LINE + 5 +2D76 + 8 +0 + 62 + 0 + 10 +34593.749863 + 20 +12665.621451 + 30 +0.0 + 11 +34546.874863 + 21 +12746.811333 + 31 +0.0 + 0 +LINE + 5 +2D77 + 8 +0 + 62 + 0 + 10 +34453.124863 + 20 +12909.191096 + 30 +0.0 + 11 +34406.249863 + 21 +12990.380977 + 31 +0.0 + 0 +LINE + 5 +2D78 + 8 +0 + 62 + 0 + 10 +34312.499863 + 20 +13152.760741 + 30 +0.0 + 11 +34265.624863 + 21 +13233.950622 + 31 +0.0 + 0 +LINE + 5 +2D79 + 8 +0 + 62 + 0 + 10 +34593.749862 + 20 +12828.001214 + 30 +0.0 + 11 +34546.874862 + 21 +12909.191096 + 31 +0.0 + 0 +LINE + 5 +2D7A + 8 +0 + 62 + 0 + 10 +34453.124862 + 20 +13071.570859 + 30 +0.0 + 11 +34406.249862 + 21 +13152.760741 + 31 +0.0 + 0 +LINE + 5 +2D7B + 8 +0 + 62 + 0 + 10 +34593.749862 + 20 +12990.380977 + 30 +0.0 + 11 +34546.874862 + 21 +13071.570859 + 31 +0.0 + 0 +LINE + 5 +2D7C + 8 +0 + 62 + 0 + 10 +34453.124862 + 20 +13233.950622 + 30 +0.0 + 11 +34443.858749 + 21 +13250.0 + 31 +0.0 + 0 +LINE + 5 +2D7D + 8 +0 + 62 + 0 + 10 +34593.749862 + 20 +13152.76074 + 30 +0.0 + 11 +34546.874862 + 21 +13233.950622 + 31 +0.0 + 0 +LINE + 5 +2D7E + 8 +0 + 62 + 0 + 10 +34265.624906 + 20 +9823.975728 + 30 +0.0 + 11 +34312.499906 + 21 +9905.16561 + 31 +0.0 + 0 +LINE + 5 +2D7F + 8 +0 + 62 + 0 + 10 +34406.249906 + 20 +10067.545373 + 30 +0.0 + 11 +34453.124906 + 21 +10148.735255 + 31 +0.0 + 0 +LINE + 5 +2D80 + 8 +0 + 62 + 0 + 10 +34546.874906 + 20 +10311.115018 + 30 +0.0 + 11 +34593.749906 + 21 +10392.3049 + 31 +0.0 + 0 +LINE + 5 +2D81 + 8 +0 + 62 + 0 + 10 +34265.624907 + 20 +9986.355491 + 30 +0.0 + 11 +34312.499907 + 21 +10067.545373 + 31 +0.0 + 0 +LINE + 5 +2D82 + 8 +0 + 62 + 0 + 10 +34406.249907 + 20 +10229.925136 + 30 +0.0 + 11 +34453.124907 + 21 +10311.115018 + 31 +0.0 + 0 +LINE + 5 +2D83 + 8 +0 + 62 + 0 + 10 +34546.874907 + 20 +10473.494781 + 30 +0.0 + 11 +34593.749907 + 21 +10554.684663 + 31 +0.0 + 0 +LINE + 5 +2D84 + 8 +0 + 62 + 0 + 10 +34265.624907 + 20 +10148.735254 + 30 +0.0 + 11 +34312.499907 + 21 +10229.925136 + 31 +0.0 + 0 +LINE + 5 +2D85 + 8 +0 + 62 + 0 + 10 +34406.249907 + 20 +10392.304899 + 30 +0.0 + 11 +34453.124907 + 21 +10473.494781 + 31 +0.0 + 0 +LINE + 5 +2D86 + 8 +0 + 62 + 0 + 10 +34546.874907 + 20 +10635.874544 + 30 +0.0 + 11 +34593.749907 + 21 +10717.064426 + 31 +0.0 + 0 +LINE + 5 +2D87 + 8 +0 + 62 + 0 + 10 +34265.624907 + 20 +10311.115017 + 30 +0.0 + 11 +34312.499907 + 21 +10392.304899 + 31 +0.0 + 0 +LINE + 5 +2D88 + 8 +0 + 62 + 0 + 10 +34406.249907 + 20 +10554.684662 + 30 +0.0 + 11 +34453.124907 + 21 +10635.874544 + 31 +0.0 + 0 +LINE + 5 +2D89 + 8 +0 + 62 + 0 + 10 +34546.874907 + 20 +10798.254307 + 30 +0.0 + 11 +34593.749907 + 21 +10879.444189 + 31 +0.0 + 0 +LINE + 5 +2D8A + 8 +0 + 62 + 0 + 10 +34265.624908 + 20 +10473.49478 + 30 +0.0 + 11 +34312.499908 + 21 +10554.684662 + 31 +0.0 + 0 +LINE + 5 +2D8B + 8 +0 + 62 + 0 + 10 +34406.249908 + 20 +10717.064425 + 30 +0.0 + 11 +34453.124908 + 21 +10798.254307 + 31 +0.0 + 0 +LINE + 5 +2D8C + 8 +0 + 62 + 0 + 10 +34546.874908 + 20 +10960.63407 + 30 +0.0 + 11 +34593.749908 + 21 +11041.823952 + 31 +0.0 + 0 +LINE + 5 +2D8D + 8 +0 + 62 + 0 + 10 +34265.624908 + 20 +10635.874543 + 30 +0.0 + 11 +34312.499908 + 21 +10717.064425 + 31 +0.0 + 0 +LINE + 5 +2D8E + 8 +0 + 62 + 0 + 10 +34406.249908 + 20 +10879.444188 + 30 +0.0 + 11 +34453.124908 + 21 +10960.63407 + 31 +0.0 + 0 +LINE + 5 +2D8F + 8 +0 + 62 + 0 + 10 +34546.874908 + 20 +11123.013833 + 30 +0.0 + 11 +34593.749908 + 21 +11204.203715 + 31 +0.0 + 0 +LINE + 5 +2D90 + 8 +0 + 62 + 0 + 10 +34265.624908 + 20 +10798.254306 + 30 +0.0 + 11 +34312.499908 + 21 +10879.444188 + 31 +0.0 + 0 +LINE + 5 +2D91 + 8 +0 + 62 + 0 + 10 +34406.249908 + 20 +11041.823951 + 30 +0.0 + 11 +34453.124908 + 21 +11123.013833 + 31 +0.0 + 0 +LINE + 5 +2D92 + 8 +0 + 62 + 0 + 10 +34546.874908 + 20 +11285.393596 + 30 +0.0 + 11 +34593.749908 + 21 +11366.583478 + 31 +0.0 + 0 +LINE + 5 +2D93 + 8 +0 + 62 + 0 + 10 +34265.624908 + 20 +10960.63407 + 30 +0.0 + 11 +34312.499908 + 21 +11041.823951 + 31 +0.0 + 0 +LINE + 5 +2D94 + 8 +0 + 62 + 0 + 10 +34406.249908 + 20 +11204.203714 + 30 +0.0 + 11 +34453.124908 + 21 +11285.393596 + 31 +0.0 + 0 +LINE + 5 +2D95 + 8 +0 + 62 + 0 + 10 +34546.874908 + 20 +11447.773359 + 30 +0.0 + 11 +34593.749908 + 21 +11528.963241 + 31 +0.0 + 0 +LINE + 5 +2D96 + 8 +0 + 62 + 0 + 10 +34265.624909 + 20 +11123.013833 + 30 +0.0 + 11 +34312.499909 + 21 +11204.203714 + 31 +0.0 + 0 +LINE + 5 +2D97 + 8 +0 + 62 + 0 + 10 +34406.249909 + 20 +11366.583477 + 30 +0.0 + 11 +34453.124909 + 21 +11447.773359 + 31 +0.0 + 0 +LINE + 5 +2D98 + 8 +0 + 62 + 0 + 10 +34546.874909 + 20 +11610.153122 + 30 +0.0 + 11 +34593.749909 + 21 +11691.343004 + 31 +0.0 + 0 +LINE + 5 +2D99 + 8 +0 + 62 + 0 + 10 +34265.624909 + 20 +11285.393596 + 30 +0.0 + 11 +34312.499909 + 21 +11366.583477 + 31 +0.0 + 0 +LINE + 5 +2D9A + 8 +0 + 62 + 0 + 10 +34406.249909 + 20 +11528.96324 + 30 +0.0 + 11 +34453.124909 + 21 +11610.153122 + 31 +0.0 + 0 +LINE + 5 +2D9B + 8 +0 + 62 + 0 + 10 +34546.874909 + 20 +11772.532885 + 30 +0.0 + 11 +34593.749909 + 21 +11853.722767 + 31 +0.0 + 0 +LINE + 5 +2D9C + 8 +0 + 62 + 0 + 10 +34265.624909 + 20 +11447.773359 + 30 +0.0 + 11 +34312.499909 + 21 +11528.96324 + 31 +0.0 + 0 +LINE + 5 +2D9D + 8 +0 + 62 + 0 + 10 +34406.249909 + 20 +11691.343003 + 30 +0.0 + 11 +34453.124909 + 21 +11772.532885 + 31 +0.0 + 0 +LINE + 5 +2D9E + 8 +0 + 62 + 0 + 10 +34546.874909 + 20 +11934.912648 + 30 +0.0 + 11 +34593.749909 + 21 +12016.10253 + 31 +0.0 + 0 +LINE + 5 +2D9F + 8 +0 + 62 + 0 + 10 +34265.62491 + 20 +11610.153122 + 30 +0.0 + 11 +34312.49991 + 21 +11691.343003 + 31 +0.0 + 0 +LINE + 5 +2DA0 + 8 +0 + 62 + 0 + 10 +34406.24991 + 20 +11853.722766 + 30 +0.0 + 11 +34453.12491 + 21 +11934.912648 + 31 +0.0 + 0 +LINE + 5 +2DA1 + 8 +0 + 62 + 0 + 10 +34546.87491 + 20 +12097.292411 + 30 +0.0 + 11 +34593.74991 + 21 +12178.482293 + 31 +0.0 + 0 +LINE + 5 +2DA2 + 8 +0 + 62 + 0 + 10 +34265.62491 + 20 +11772.532885 + 30 +0.0 + 11 +34312.49991 + 21 +11853.722766 + 31 +0.0 + 0 +LINE + 5 +2DA3 + 8 +0 + 62 + 0 + 10 +34406.24991 + 20 +12016.102529 + 30 +0.0 + 11 +34453.12491 + 21 +12097.292411 + 31 +0.0 + 0 +LINE + 5 +2DA4 + 8 +0 + 62 + 0 + 10 +34546.87491 + 20 +12259.672174 + 30 +0.0 + 11 +34593.74991 + 21 +12340.862056 + 31 +0.0 + 0 +LINE + 5 +2DA5 + 8 +0 + 62 + 0 + 10 +34265.62491 + 20 +11934.912648 + 30 +0.0 + 11 +34312.49991 + 21 +12016.102529 + 31 +0.0 + 0 +LINE + 5 +2DA6 + 8 +0 + 62 + 0 + 10 +34406.24991 + 20 +12178.482293 + 30 +0.0 + 11 +34453.12491 + 21 +12259.672174 + 31 +0.0 + 0 +LINE + 5 +2DA7 + 8 +0 + 62 + 0 + 10 +34546.87491 + 20 +12422.051937 + 30 +0.0 + 11 +34593.74991 + 21 +12503.241819 + 31 +0.0 + 0 +LINE + 5 +2DA8 + 8 +0 + 62 + 0 + 10 +34265.624911 + 20 +12097.292411 + 30 +0.0 + 11 +34312.499911 + 21 +12178.482292 + 31 +0.0 + 0 +LINE + 5 +2DA9 + 8 +0 + 62 + 0 + 10 +34406.249911 + 20 +12340.862056 + 30 +0.0 + 11 +34453.124911 + 21 +12422.051937 + 31 +0.0 + 0 +LINE + 5 +2DAA + 8 +0 + 62 + 0 + 10 +34546.874911 + 20 +12584.4317 + 30 +0.0 + 11 +34593.749911 + 21 +12665.621582 + 31 +0.0 + 0 +LINE + 5 +2DAB + 8 +0 + 62 + 0 + 10 +34265.624911 + 20 +12259.672174 + 30 +0.0 + 11 +34312.499911 + 21 +12340.862055 + 31 +0.0 + 0 +LINE + 5 +2DAC + 8 +0 + 62 + 0 + 10 +34406.249911 + 20 +12503.241819 + 30 +0.0 + 11 +34453.124911 + 21 +12584.4317 + 31 +0.0 + 0 +LINE + 5 +2DAD + 8 +0 + 62 + 0 + 10 +34546.874911 + 20 +12746.811463 + 30 +0.0 + 11 +34593.749911 + 21 +12828.001345 + 31 +0.0 + 0 +LINE + 5 +2DAE + 8 +0 + 62 + 0 + 10 +34265.624911 + 20 +12422.051937 + 30 +0.0 + 11 +34312.499911 + 21 +12503.241818 + 31 +0.0 + 0 +LINE + 5 +2DAF + 8 +0 + 62 + 0 + 10 +34406.249911 + 20 +12665.621582 + 30 +0.0 + 11 +34453.124911 + 21 +12746.811463 + 31 +0.0 + 0 +LINE + 5 +2DB0 + 8 +0 + 62 + 0 + 10 +34546.874911 + 20 +12909.191226 + 30 +0.0 + 11 +34593.749911 + 21 +12990.381108 + 31 +0.0 + 0 +LINE + 5 +2DB1 + 8 +0 + 62 + 0 + 10 +34265.624912 + 20 +12584.4317 + 30 +0.0 + 11 +34312.499912 + 21 +12665.621581 + 31 +0.0 + 0 +LINE + 5 +2DB2 + 8 +0 + 62 + 0 + 10 +34406.249912 + 20 +12828.001345 + 30 +0.0 + 11 +34453.124912 + 21 +12909.191226 + 31 +0.0 + 0 +LINE + 5 +2DB3 + 8 +0 + 62 + 0 + 10 +34546.874912 + 20 +13071.570989 + 30 +0.0 + 11 +34593.749912 + 21 +13152.760871 + 31 +0.0 + 0 +LINE + 5 +2DB4 + 8 +0 + 62 + 0 + 10 +34265.624912 + 20 +12746.811463 + 30 +0.0 + 11 +34312.499912 + 21 +12828.001344 + 31 +0.0 + 0 +LINE + 5 +2DB5 + 8 +0 + 62 + 0 + 10 +34406.249912 + 20 +12990.381108 + 30 +0.0 + 11 +34453.124912 + 21 +13071.570989 + 31 +0.0 + 0 +LINE + 5 +2DB6 + 8 +0 + 62 + 0 + 10 +34546.874912 + 20 +13233.950752 + 30 +0.0 + 11 +34556.140949 + 21 +13250.0 + 31 +0.0 + 0 +LINE + 5 +2DB7 + 8 +0 + 62 + 0 + 10 +34265.624912 + 20 +12909.191226 + 30 +0.0 + 11 +34312.499912 + 21 +12990.381108 + 31 +0.0 + 0 +LINE + 5 +2DB8 + 8 +0 + 62 + 0 + 10 +34406.249912 + 20 +13152.760871 + 30 +0.0 + 11 +34453.124912 + 21 +13233.950752 + 31 +0.0 + 0 +LINE + 5 +2DB9 + 8 +0 + 62 + 0 + 10 +34265.624912 + 20 +13071.570989 + 30 +0.0 + 11 +34312.499912 + 21 +13152.760871 + 31 +0.0 + 0 +LINE + 5 +2DBA + 8 +0 + 62 + 0 + 10 +34265.624913 + 20 +13233.950752 + 30 +0.0 + 11 +34274.89095 + 21 +13250.0 + 31 +0.0 + 0 +LINE + 5 +2DBB + 8 +0 + 62 + 0 + 10 +34265.624906 + 20 +9661.595965 + 30 +0.0 + 11 +34312.499906 + 21 +9742.785847 + 31 +0.0 + 0 +LINE + 5 +2DBC + 8 +0 + 62 + 0 + 10 +34406.249906 + 20 +9905.16561 + 30 +0.0 + 11 +34453.124906 + 21 +9986.355492 + 31 +0.0 + 0 +LINE + 5 +2DBD + 8 +0 + 62 + 0 + 10 +34546.874906 + 20 +10148.735255 + 30 +0.0 + 11 +34593.749906 + 21 +10229.925136 + 31 +0.0 + 0 +LINE + 5 +2DBE + 8 +0 + 62 + 0 + 10 +34265.624906 + 20 +9499.216202 + 30 +0.0 + 11 +34312.499906 + 21 +9580.406084 + 31 +0.0 + 0 +LINE + 5 +2DBF + 8 +0 + 62 + 0 + 10 +34406.249906 + 20 +9742.785847 + 30 +0.0 + 11 +34453.124906 + 21 +9823.975729 + 31 +0.0 + 0 +LINE + 5 +2DC0 + 8 +0 + 62 + 0 + 10 +34546.874906 + 20 +9986.355492 + 30 +0.0 + 11 +34593.749906 + 21 +10067.545373 + 31 +0.0 + 0 +LINE + 5 +2DC1 + 8 +0 + 62 + 0 + 10 +34265.624905 + 20 +9336.836439 + 30 +0.0 + 11 +34312.499905 + 21 +9418.026321 + 31 +0.0 + 0 +LINE + 5 +2DC2 + 8 +0 + 62 + 0 + 10 +34406.249905 + 20 +9580.406084 + 30 +0.0 + 11 +34453.124905 + 21 +9661.595966 + 31 +0.0 + 0 +LINE + 5 +2DC3 + 8 +0 + 62 + 0 + 10 +34546.874905 + 20 +9823.975729 + 30 +0.0 + 11 +34593.749905 + 21 +9905.16561 + 31 +0.0 + 0 +LINE + 5 +2DC4 + 8 +0 + 62 + 0 + 10 +34265.624905 + 20 +9174.456676 + 30 +0.0 + 11 +34312.499905 + 21 +9255.646558 + 31 +0.0 + 0 +LINE + 5 +2DC5 + 8 +0 + 62 + 0 + 10 +34406.249905 + 20 +9418.026321 + 30 +0.0 + 11 +34453.124905 + 21 +9499.216203 + 31 +0.0 + 0 +LINE + 5 +2DC6 + 8 +0 + 62 + 0 + 10 +34546.874905 + 20 +9661.595966 + 30 +0.0 + 11 +34593.749905 + 21 +9742.785847 + 31 +0.0 + 0 +LINE + 5 +2DC7 + 8 +0 + 62 + 0 + 10 +34265.624905 + 20 +9012.076913 + 30 +0.0 + 11 +34312.499905 + 21 +9093.266795 + 31 +0.0 + 0 +LINE + 5 +2DC8 + 8 +0 + 62 + 0 + 10 +34406.249905 + 20 +9255.646558 + 30 +0.0 + 11 +34453.124905 + 21 +9336.83644 + 31 +0.0 + 0 +LINE + 5 +2DC9 + 8 +0 + 62 + 0 + 10 +34546.874905 + 20 +9499.216203 + 30 +0.0 + 11 +34593.749905 + 21 +9580.406084 + 31 +0.0 + 0 +LINE + 5 +2DCA + 8 +0 + 62 + 0 + 10 +34265.624904 + 20 +8849.69715 + 30 +0.0 + 11 +34312.499904 + 21 +8930.887032 + 31 +0.0 + 0 +LINE + 5 +2DCB + 8 +0 + 62 + 0 + 10 +34406.249904 + 20 +9093.266795 + 30 +0.0 + 11 +34453.124904 + 21 +9174.456677 + 31 +0.0 + 0 +LINE + 5 +2DCC + 8 +0 + 62 + 0 + 10 +34546.874904 + 20 +9336.83644 + 30 +0.0 + 11 +34593.749904 + 21 +9418.026321 + 31 +0.0 + 0 +LINE + 5 +2DCD + 8 +0 + 62 + 0 + 10 +34265.624904 + 20 +8687.317387 + 30 +0.0 + 11 +34312.499904 + 21 +8768.507269 + 31 +0.0 + 0 +LINE + 5 +2DCE + 8 +0 + 62 + 0 + 10 +34406.249904 + 20 +8930.887032 + 30 +0.0 + 11 +34453.124904 + 21 +9012.076913 + 31 +0.0 + 0 +LINE + 5 +2DCF + 8 +0 + 62 + 0 + 10 +34546.874904 + 20 +9174.456677 + 30 +0.0 + 11 +34593.749904 + 21 +9255.646558 + 31 +0.0 + 0 +LINE + 5 +2DD0 + 8 +0 + 62 + 0 + 10 +34265.624904 + 20 +8524.937624 + 30 +0.0 + 11 +34312.499904 + 21 +8606.127506 + 31 +0.0 + 0 +LINE + 5 +2DD1 + 8 +0 + 62 + 0 + 10 +34406.249904 + 20 +8768.507269 + 30 +0.0 + 11 +34453.124904 + 21 +8849.69715 + 31 +0.0 + 0 +LINE + 5 +2DD2 + 8 +0 + 62 + 0 + 10 +34546.874904 + 20 +9012.076914 + 30 +0.0 + 11 +34593.749904 + 21 +9093.266795 + 31 +0.0 + 0 +LINE + 5 +2DD3 + 8 +0 + 62 + 0 + 10 +34265.624904 + 20 +8362.557861 + 30 +0.0 + 11 +34312.499904 + 21 +8443.747743 + 31 +0.0 + 0 +LINE + 5 +2DD4 + 8 +0 + 62 + 0 + 10 +34406.249904 + 20 +8606.127506 + 30 +0.0 + 11 +34453.124904 + 21 +8687.317387 + 31 +0.0 + 0 +LINE + 5 +2DD5 + 8 +0 + 62 + 0 + 10 +34546.874904 + 20 +8849.697151 + 30 +0.0 + 11 +34593.749904 + 21 +8930.887032 + 31 +0.0 + 0 +LINE + 5 +2DD6 + 8 +0 + 62 + 0 + 10 +34265.624903 + 20 +8200.178098 + 30 +0.0 + 11 +34312.499903 + 21 +8281.36798 + 31 +0.0 + 0 +LINE + 5 +2DD7 + 8 +0 + 62 + 0 + 10 +34406.249903 + 20 +8443.747743 + 30 +0.0 + 11 +34453.124903 + 21 +8524.937624 + 31 +0.0 + 0 +LINE + 5 +2DD8 + 8 +0 + 62 + 0 + 10 +34546.874903 + 20 +8687.317388 + 30 +0.0 + 11 +34593.749903 + 21 +8768.507269 + 31 +0.0 + 0 +LINE + 5 +2DD9 + 8 +0 + 62 + 0 + 10 +34265.624903 + 20 +8037.798335 + 30 +0.0 + 11 +34312.499903 + 21 +8118.988217 + 31 +0.0 + 0 +LINE + 5 +2DDA + 8 +0 + 62 + 0 + 10 +34406.249903 + 20 +8281.36798 + 30 +0.0 + 11 +34453.124903 + 21 +8362.557861 + 31 +0.0 + 0 +LINE + 5 +2DDB + 8 +0 + 62 + 0 + 10 +34546.874903 + 20 +8524.937625 + 30 +0.0 + 11 +34593.749903 + 21 +8606.127506 + 31 +0.0 + 0 +LINE + 5 +2DDC + 8 +0 + 62 + 0 + 10 +34265.624903 + 20 +7875.418572 + 30 +0.0 + 11 +34312.499903 + 21 +7956.608454 + 31 +0.0 + 0 +LINE + 5 +2DDD + 8 +0 + 62 + 0 + 10 +34406.249903 + 20 +8118.988217 + 30 +0.0 + 11 +34453.124903 + 21 +8200.178098 + 31 +0.0 + 0 +LINE + 5 +2DDE + 8 +0 + 62 + 0 + 10 +34546.874903 + 20 +8362.557862 + 30 +0.0 + 11 +34593.749903 + 21 +8443.747743 + 31 +0.0 + 0 +LINE + 5 +2DDF + 8 +0 + 62 + 0 + 10 +34265.624902 + 20 +7713.038809 + 30 +0.0 + 11 +34312.499902 + 21 +7794.22869 + 31 +0.0 + 0 +LINE + 5 +2DE0 + 8 +0 + 62 + 0 + 10 +34406.249902 + 20 +7956.608454 + 30 +0.0 + 11 +34453.124902 + 21 +8037.798335 + 31 +0.0 + 0 +LINE + 5 +2DE1 + 8 +0 + 62 + 0 + 10 +34546.874902 + 20 +8200.178098 + 30 +0.0 + 11 +34593.749902 + 21 +8281.36798 + 31 +0.0 + 0 +LINE + 5 +2DE2 + 8 +0 + 62 + 0 + 10 +34265.624902 + 20 +7550.659046 + 30 +0.0 + 11 +34312.499902 + 21 +7631.848927 + 31 +0.0 + 0 +LINE + 5 +2DE3 + 8 +0 + 62 + 0 + 10 +34406.249902 + 20 +7794.228691 + 30 +0.0 + 11 +34453.124902 + 21 +7875.418572 + 31 +0.0 + 0 +LINE + 5 +2DE4 + 8 +0 + 62 + 0 + 10 +34546.874902 + 20 +8037.798335 + 30 +0.0 + 11 +34593.749902 + 21 +8118.988217 + 31 +0.0 + 0 +LINE + 5 +2DE5 + 8 +0 + 62 + 0 + 10 +34265.624902 + 20 +7388.279283 + 30 +0.0 + 11 +34312.499902 + 21 +7469.469164 + 31 +0.0 + 0 +LINE + 5 +2DE6 + 8 +0 + 62 + 0 + 10 +34406.249902 + 20 +7631.848928 + 30 +0.0 + 11 +34453.124902 + 21 +7713.038809 + 31 +0.0 + 0 +LINE + 5 +2DE7 + 8 +0 + 62 + 0 + 10 +34546.874902 + 20 +7875.418572 + 30 +0.0 + 11 +34593.749902 + 21 +7956.608454 + 31 +0.0 + 0 +LINE + 5 +2DE8 + 8 +0 + 62 + 0 + 10 +34265.624901 + 20 +7225.89952 + 30 +0.0 + 11 +34312.499901 + 21 +7307.089401 + 31 +0.0 + 0 +LINE + 5 +2DE9 + 8 +0 + 62 + 0 + 10 +34406.249901 + 20 +7469.469165 + 30 +0.0 + 11 +34453.124901 + 21 +7550.659046 + 31 +0.0 + 0 +LINE + 5 +2DEA + 8 +0 + 62 + 0 + 10 +34546.874901 + 20 +7713.038809 + 30 +0.0 + 11 +34593.749901 + 21 +7794.228691 + 31 +0.0 + 0 +LINE + 5 +2DEB + 8 +0 + 62 + 0 + 10 +34265.624901 + 20 +7063.519757 + 30 +0.0 + 11 +34312.499901 + 21 +7144.709638 + 31 +0.0 + 0 +LINE + 5 +2DEC + 8 +0 + 62 + 0 + 10 +34406.249901 + 20 +7307.089402 + 30 +0.0 + 11 +34453.124901 + 21 +7388.279283 + 31 +0.0 + 0 +LINE + 5 +2DED + 8 +0 + 62 + 0 + 10 +34546.874901 + 20 +7550.659046 + 30 +0.0 + 11 +34593.749901 + 21 +7631.848928 + 31 +0.0 + 0 +LINE + 5 +2DEE + 8 +0 + 62 + 0 + 10 +34265.624901 + 20 +6901.139994 + 30 +0.0 + 11 +34312.499901 + 21 +6982.329875 + 31 +0.0 + 0 +LINE + 5 +2DEF + 8 +0 + 62 + 0 + 10 +34406.249901 + 20 +7144.709639 + 30 +0.0 + 11 +34453.124901 + 21 +7225.89952 + 31 +0.0 + 0 +LINE + 5 +2DF0 + 8 +0 + 62 + 0 + 10 +34546.874901 + 20 +7388.279283 + 30 +0.0 + 11 +34593.749901 + 21 +7469.469165 + 31 +0.0 + 0 +LINE + 5 +2DF1 + 8 +0 + 62 + 0 + 10 +34272.114184 + 20 +6750.0 + 30 +0.0 + 11 +34312.4999 + 21 +6819.950112 + 31 +0.0 + 0 +LINE + 5 +2DF2 + 8 +0 + 62 + 0 + 10 +34406.2499 + 20 +6982.329875 + 30 +0.0 + 11 +34453.1249 + 21 +7063.519757 + 31 +0.0 + 0 +LINE + 5 +2DF3 + 8 +0 + 62 + 0 + 10 +34546.8749 + 20 +7225.89952 + 30 +0.0 + 11 +34593.7499 + 21 +7307.089402 + 31 +0.0 + 0 +LINE + 5 +2DF4 + 8 +0 + 62 + 0 + 10 +34406.2499 + 20 +6819.950112 + 30 +0.0 + 11 +34453.1249 + 21 +6901.139994 + 31 +0.0 + 0 +LINE + 5 +2DF5 + 8 +0 + 62 + 0 + 10 +34546.8749 + 20 +7063.519757 + 30 +0.0 + 11 +34593.7499 + 21 +7144.709639 + 31 +0.0 + 0 +LINE + 5 +2DF6 + 8 +0 + 62 + 0 + 10 +34546.8749 + 20 +6901.139994 + 30 +0.0 + 11 +34593.7499 + 21 +6982.329876 + 31 +0.0 + 0 +LINE + 5 +2DF7 + 8 +0 + 62 + 0 + 10 +34553.364183 + 20 +6750.0 + 30 +0.0 + 11 +34593.7499 + 21 +6819.950113 + 31 +0.0 + 0 +ENDBLK + 5 +2DF8 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X219 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X219 + 1 + + 0 +LINE + 5 +2DFA + 8 +0 + 62 + 0 + 10 +34600.0 + 20 +9320.932573 + 30 +0.0 + 11 +36425.0 + 21 +11145.932573 + 31 +0.0 + 0 +LINE + 5 +2DFB + 8 +0 + 62 + 0 + 10 +34600.0 + 20 +10469.981092 + 30 +0.0 + 11 +36425.0 + 21 +12294.981092 + 31 +0.0 + 0 +LINE + 5 +2DFC + 8 +0 + 62 + 0 + 10 +34600.0 + 20 +11619.029611 + 30 +0.0 + 11 +36230.970389 + 21 +13250.0 + 31 +0.0 + 0 +LINE + 5 +2DFD + 8 +0 + 62 + 0 + 10 +34600.0 + 20 +12768.078131 + 30 +0.0 + 11 +35081.921869 + 21 +13250.0 + 31 +0.0 + 0 +LINE + 5 +2DFE + 8 +0 + 62 + 0 + 10 +34600.0 + 20 +8171.884053 + 30 +0.0 + 11 +36425.0 + 21 +9996.884053 + 31 +0.0 + 0 +LINE + 5 +2DFF + 8 +0 + 62 + 0 + 10 +34600.0 + 20 +7022.835534 + 30 +0.0 + 11 +36425.0 + 21 +8847.835534 + 31 +0.0 + 0 +LINE + 5 +2E00 + 8 +0 + 62 + 0 + 10 +35476.212986 + 20 +6750.0 + 30 +0.0 + 11 +36425.0 + 21 +7698.787014 + 31 +0.0 + 0 +ENDBLK + 5 +2E01 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X220 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X220 + 1 + + 0 +LINE + 5 +2E03 + 8 +0 + 62 + 0 + 10 +33325.0 + 20 +9990.476221 + 30 +0.0 + 11 +33900.0 + 21 +10565.476221 + 31 +0.0 + 0 +LINE + 5 +2E04 + 8 +0 + 62 + 0 + 10 +33325.0 + 20 +10344.029611 + 30 +0.0 + 11 +33900.0 + 21 +10919.029611 + 31 +0.0 + 0 +LINE + 5 +2E05 + 8 +0 + 62 + 0 + 10 +33325.0 + 20 +10697.583002 + 30 +0.0 + 11 +33900.0 + 21 +11272.583002 + 31 +0.0 + 0 +LINE + 5 +2E06 + 8 +0 + 62 + 0 + 10 +33325.0 + 20 +11051.136393 + 30 +0.0 + 11 +33900.0 + 21 +11626.136393 + 31 +0.0 + 0 +LINE + 5 +2E07 + 8 +0 + 62 + 0 + 10 +33325.0 + 20 +11404.689783 + 30 +0.0 + 11 +33900.0 + 21 +11979.689783 + 31 +0.0 + 0 +LINE + 5 +2E08 + 8 +0 + 62 + 0 + 10 +33325.0 + 20 +11758.243174 + 30 +0.0 + 11 +33900.0 + 21 +12333.243174 + 31 +0.0 + 0 +LINE + 5 +2E09 + 8 +0 + 62 + 0 + 10 +33325.0 + 20 +12111.796564 + 30 +0.0 + 11 +33900.0 + 21 +12686.796564 + 31 +0.0 + 0 +LINE + 5 +2E0A + 8 +0 + 62 + 0 + 10 +33325.0 + 20 +12465.349955 + 30 +0.0 + 11 +33900.0 + 21 +13040.349955 + 31 +0.0 + 0 +LINE + 5 +2E0B + 8 +0 + 62 + 0 + 10 +33325.0 + 20 +12818.903346 + 30 +0.0 + 11 +33756.096654 + 21 +13250.0 + 31 +0.0 + 0 +LINE + 5 +2E0C + 8 +0 + 62 + 0 + 10 +33325.0 + 20 +13172.456736 + 30 +0.0 + 11 +33402.543264 + 21 +13250.0 + 31 +0.0 + 0 +LINE + 5 +2E0D + 8 +0 + 62 + 0 + 10 +33325.0 + 20 +9636.92283 + 30 +0.0 + 11 +33900.0 + 21 +10211.92283 + 31 +0.0 + 0 +LINE + 5 +2E0E + 8 +0 + 62 + 0 + 10 +33325.0 + 20 +9283.36944 + 30 +0.0 + 11 +33900.0 + 21 +9858.36944 + 31 +0.0 + 0 +LINE + 5 +2E0F + 8 +0 + 62 + 0 + 10 +33325.0 + 20 +8929.816049 + 30 +0.0 + 11 +33900.0 + 21 +9504.816049 + 31 +0.0 + 0 +LINE + 5 +2E10 + 8 +0 + 62 + 0 + 10 +33325.0 + 20 +8576.262658 + 30 +0.0 + 11 +33900.0 + 21 +9151.262658 + 31 +0.0 + 0 +LINE + 5 +2E11 + 8 +0 + 62 + 0 + 10 +33325.0 + 20 +8222.709268 + 30 +0.0 + 11 +33900.0 + 21 +8797.709268 + 31 +0.0 + 0 +LINE + 5 +2E12 + 8 +0 + 62 + 0 + 10 +33325.0 + 20 +7869.155877 + 30 +0.0 + 11 +33900.0 + 21 +8444.155877 + 31 +0.0 + 0 +LINE + 5 +2E13 + 8 +0 + 62 + 0 + 10 +33325.0 + 20 +7515.602487 + 30 +0.0 + 11 +33900.0 + 21 +8090.602487 + 31 +0.0 + 0 +LINE + 5 +2E14 + 8 +0 + 62 + 0 + 10 +33325.0 + 20 +7162.049096 + 30 +0.0 + 11 +33900.0 + 21 +7737.049096 + 31 +0.0 + 0 +LINE + 5 +2E15 + 8 +0 + 62 + 0 + 10 +33325.0 + 20 +6808.495706 + 30 +0.0 + 11 +33900.0 + 21 +7383.495706 + 31 +0.0 + 0 +LINE + 5 +2E16 + 8 +0 + 62 + 0 + 10 +33620.057685 + 20 +6750.0 + 30 +0.0 + 11 +33900.0 + 21 +7029.942315 + 31 +0.0 + 0 +ENDBLK + 5 +2E17 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D221 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D221 + 1 + + 0 +LINE + 5 +2E19 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +18355.0 + 20 +9656.0 + 30 +0.0 + 11 +18355.0 + 21 +10854.0 + 31 +0.0 + 0 +INSERT + 5 +2E1A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18355.0 + 20 +9655.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +2E1B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18355.0 + 20 +10855.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +2E1C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +18267.5 + 20 +10101.875 + 30 +0.0 + 40 +175.0 + 1 +1.21 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +18180.0 + 21 +10255.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2E1D + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +18365.0 + 20 +9655.0 + 30 +0.0 + 0 +POINT + 5 +2E1E + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +18355.0 + 20 +10855.0 + 30 +0.0 + 0 +POINT + 5 +2E1F + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +18355.0 + 20 +10855.0 + 30 +0.0 + 0 +ENDBLK + 5 +2E20 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D222 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D222 + 1 + + 0 +LINE + 5 +2E22 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +18455.0 + 20 +9626.0 + 30 +0.0 + 11 +18455.0 + 21 +9654.0 + 31 +0.0 + 0 +INSERT + 5 +2E23 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18455.0 + 20 +9625.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +2E24 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18455.0 + 20 +9655.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +2E25 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +18367.5 + 20 +9696.25 + 30 +0.0 + 40 +175.0 + 1 +3 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +18280.0 + 21 +9740.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2E26 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +18465.0 + 20 +9625.0 + 30 +0.0 + 0 +POINT + 5 +2E27 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +18465.0 + 20 +9655.0 + 30 +0.0 + 0 +POINT + 5 +2E28 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +18455.0 + 20 +9655.0 + 30 +0.0 + 0 +ENDBLK + 5 +2E29 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D223 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D223 + 1 + + 0 +LINE + 5 +2E2B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +18445.0 + 20 +13866.0 + 30 +0.0 + 11 +18445.0 + 21 +15624.0 + 31 +0.0 + 0 +INSERT + 5 +2E2C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18445.0 + 20 +13865.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +2E2D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18445.0 + 20 +15625.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +2E2E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +18357.5 + 20 +14570.0 + 30 +0.0 + 40 +175.0 + 1 +1.76 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 72 + 1 + 11 +18270.0 + 21 +14745.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +2E2F + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +18490.0 + 20 +13865.0 + 30 +0.0 + 0 +POINT + 5 +2E30 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +18490.0 + 20 +15625.0 + 30 +0.0 + 0 +POINT + 5 +2E31 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +18445.0 + 20 +15625.0 + 30 +0.0 + 0 +ENDBLK + 5 +2E32 + 8 +0 + 0 +ENDSEC + 0 +SECTION + 2 +ENTITIES + 0 +POLYLINE + 5 +2E33 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +34B5 + 8 +0 + 10 +1000.0 + 20 +250.0 + 30 +0.0 + 0 +VERTEX + 5 +34B6 + 8 +0 + 10 +41800.0 + 20 +250.0 + 30 +0.0 + 0 +VERTEX + 5 +34B7 + 8 +0 + 10 +41800.0 + 20 +29450.0 + 30 +0.0 + 0 +VERTEX + 5 +34B8 + 8 +0 + 10 +1000.0 + 20 +29450.0 + 30 +0.0 + 0 +SEQEND + 5 +34B9 + 8 +0 + 0 +POLYLINE + 5 +2E39 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +34BA + 8 +MAUERWERK + 10 +8750.0 + 20 +9250.0 + 30 +0.0 + 0 +VERTEX + 5 +34BB + 8 +MAUERWERK + 10 +9865.0 + 20 +9250.0 + 30 +0.0 + 0 +VERTEX + 5 +34BC + 8 +MAUERWERK + 10 +9865.0 + 20 +9615.0 + 30 +0.0 + 0 +VERTEX + 5 +34BD + 8 +MAUERWERK + 10 +9740.0 + 20 +9615.0 + 30 +0.0 + 0 +VERTEX + 5 +34BE + 8 +MAUERWERK + 10 +9740.0 + 20 +12375.0 + 30 +0.0 + 0 +VERTEX + 5 +34BF + 8 +MAUERWERK + 10 +12615.0 + 20 +12375.0 + 30 +0.0 + 0 +VERTEX + 5 +34C0 + 8 +MAUERWERK + 10 +12615.0 + 20 +12740.0 + 30 +0.0 + 0 +VERTEX + 5 +34C1 + 8 +MAUERWERK + 10 +10115.0 + 20 +12740.0 + 30 +0.0 + 0 +VERTEX + 5 +34C2 + 8 +MAUERWERK + 10 +10115.0 + 20 +12990.0 + 30 +0.0 + 0 +VERTEX + 5 +34C3 + 8 +MAUERWERK + 10 +9750.0 + 20 +12990.0 + 30 +0.0 + 0 +VERTEX + 5 +34C4 + 8 +MAUERWERK + 10 +9750.0 + 20 +12740.0 + 30 +0.0 + 0 +VERTEX + 5 +34C5 + 8 +MAUERWERK + 10 +9375.0 + 20 +12740.0 + 30 +0.0 + 0 +VERTEX + 5 +34C6 + 8 +MAUERWERK + 10 +9375.0 + 20 +9615.0 + 30 +0.0 + 0 +VERTEX + 5 +34C7 + 8 +MAUERWERK + 10 +8750.0 + 20 +9615.0 + 30 +0.0 + 0 +SEQEND + 5 +34C8 + 8 +MAUERWERK + 0 +POLYLINE + 5 +2E49 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +34C9 + 8 +MAUERWERK + 10 +5000.0 + 20 +16125.0 + 30 +0.0 + 0 +VERTEX + 5 +34CA + 8 +MAUERWERK + 10 +5365.0 + 20 +16125.0 + 30 +0.0 + 0 +VERTEX + 5 +34CB + 8 +MAUERWERK + 10 +5365.0 + 20 +16875.0 + 30 +0.0 + 0 +VERTEX + 5 +34CC + 8 +MAUERWERK + 10 +8115.0 + 20 +16875.0 + 30 +0.0 + 0 +VERTEX + 5 +34CD + 8 +MAUERWERK + 10 +8115.0 + 20 +17240.0 + 30 +0.0 + 0 +VERTEX + 5 +34CE + 8 +MAUERWERK + 10 +5365.0 + 20 +17240.0 + 30 +0.0 + 0 +VERTEX + 5 +34CF + 8 +MAUERWERK + 10 +5365.0 + 20 +18240.0 + 30 +0.0 + 0 +VERTEX + 5 +34D0 + 8 +MAUERWERK + 10 +5000.0 + 20 +18240.0 + 30 +0.0 + 0 +SEQEND + 5 +34D1 + 8 +MAUERWERK + 0 +POLYLINE + 5 +2E53 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +34D2 + 8 +MAUERWERK + 10 +5000.0 + 20 +19375.0 + 30 +0.0 + 0 +VERTEX + 5 +34D3 + 8 +MAUERWERK + 10 +5365.0 + 20 +19375.0 + 30 +0.0 + 0 +VERTEX + 5 +34D4 + 8 +MAUERWERK + 10 +5365.0 + 20 +21750.0 + 30 +0.0 + 0 +VERTEX + 5 +34D5 + 8 +MAUERWERK + 10 +6740.0 + 20 +21750.0 + 30 +0.0 + 0 +VERTEX + 5 +34D6 + 8 +MAUERWERK + 10 +6740.0 + 20 +22115.0 + 30 +0.0 + 0 +VERTEX + 5 +34D7 + 8 +MAUERWERK + 10 +5000.0 + 20 +22115.0 + 30 +0.0 + 0 +SEQEND + 5 +34D8 + 8 +MAUERWERK + 0 +POLYLINE + 5 +2E5B + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +34D9 + 8 +MAUERWERK + 10 +8500.0 + 20 +22115.0 + 30 +0.0 + 0 +VERTEX + 5 +34DA + 8 +MAUERWERK + 10 +8500.0 + 20 +21750.0 + 30 +0.0 + 0 +VERTEX + 5 +34DB + 8 +MAUERWERK + 10 +9750.0 + 20 +21750.0 + 30 +0.0 + 0 +VERTEX + 5 +34DC + 8 +MAUERWERK + 10 +9750.0 + 20 +20875.0 + 30 +0.0 + 0 +VERTEX + 5 +34DD + 8 +MAUERWERK + 10 +10115.0 + 20 +20875.0 + 30 +0.0 + 0 +VERTEX + 5 +34DE + 8 +MAUERWERK + 10 +10115.0 + 20 +21750.0 + 30 +0.0 + 0 +VERTEX + 5 +34DF + 8 +MAUERWERK + 10 +10240.0 + 20 +21750.0 + 30 +0.0 + 0 +VERTEX + 5 +34E0 + 8 +MAUERWERK + 10 +10240.0 + 20 +22115.0 + 30 +0.0 + 0 +SEQEND + 5 +34E1 + 8 +MAUERWERK + 0 +POLYLINE + 5 +2E65 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +34E2 + 8 +MAUERWERK + 10 +9750.0 + 20 +19990.0 + 30 +0.0 + 0 +VERTEX + 5 +34E3 + 8 +MAUERWERK + 10 +9750.0 + 20 +17240.0 + 30 +0.0 + 0 +VERTEX + 5 +34E4 + 8 +MAUERWERK + 10 +9000.0 + 20 +17240.0 + 30 +0.0 + 0 +VERTEX + 5 +34E5 + 8 +MAUERWERK + 10 +9000.0 + 20 +16875.0 + 30 +0.0 + 0 +VERTEX + 5 +34E6 + 8 +MAUERWERK + 10 +9750.0 + 20 +16875.0 + 30 +0.0 + 0 +VERTEX + 5 +34E7 + 8 +MAUERWERK + 10 +9750.0 + 20 +16625.0 + 30 +0.0 + 0 +VERTEX + 5 +34E8 + 8 +MAUERWERK + 10 +10115.0 + 20 +16625.0 + 30 +0.0 + 0 +VERTEX + 5 +34E9 + 8 +MAUERWERK + 10 +10115.0 + 20 +19990.0 + 30 +0.0 + 0 +SEQEND + 5 +34EA + 8 +MAUERWERK + 0 +POLYLINE + 5 +2E6F + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +34EB + 8 +MAUERWERK + 10 +11250.0 + 20 +22115.0 + 30 +0.0 + 0 +VERTEX + 5 +34EC + 8 +MAUERWERK + 10 +11250.0 + 20 +21750.0 + 30 +0.0 + 0 +VERTEX + 5 +34ED + 8 +MAUERWERK + 10 +14875.0 + 20 +21750.0 + 30 +0.0 + 0 +VERTEX + 5 +34EE + 8 +MAUERWERK + 10 +14875.0 + 20 +17250.0 + 30 +0.0 + 0 +VERTEX + 5 +34EF + 8 +MAUERWERK + 10 +15240.0 + 20 +17250.0 + 30 +0.0 + 0 +VERTEX + 5 +34F0 + 8 +MAUERWERK + 10 +15240.0 + 20 +21750.0 + 30 +0.0 + 0 +VERTEX + 5 +34F1 + 8 +MAUERWERK + 10 +15865.0 + 20 +21750.0 + 30 +0.0 + 0 +VERTEX + 5 +34F2 + 8 +MAUERWERK + 10 +15865.0 + 20 +22115.0 + 30 +0.0 + 0 +SEQEND + 5 +34F3 + 8 +MAUERWERK + 0 +POINT + 5 +2E79 + 8 +MAUERWERK + 10 +14875.0 + 20 +21125.0 + 30 +0.0 + 0 +POINT + 5 +2E7A + 8 +MAUERWERK + 10 +15240.0 + 20 +17625.0 + 30 +0.0 + 0 +POINT + 5 +2E7B + 8 +MAUERWERK + 10 +15730.0 + 20 +21750.0 + 30 +0.0 + 0 +POINT + 5 +2E7C + 8 +MAUERWERK + 10 +11750.0 + 20 +22115.0 + 30 +0.0 + 0 +POLYLINE + 5 +2E7D + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +34F4 + 8 +MAUERWERK + 10 +25250.0 + 20 +22115.0 + 30 +0.0 + 0 +VERTEX + 5 +34F5 + 8 +MAUERWERK + 10 +25250.0 + 20 +21750.0 + 30 +0.0 + 0 +VERTEX + 5 +34F6 + 8 +MAUERWERK + 10 +26375.0 + 20 +21750.0 + 30 +0.0 + 0 +VERTEX + 5 +34F7 + 8 +MAUERWERK + 10 +26375.0 + 20 +18375.0 + 30 +0.0 + 0 +VERTEX + 5 +34F8 + 8 +MAUERWERK + 10 +26740.0 + 20 +18375.0 + 30 +0.0 + 0 +VERTEX + 5 +34F9 + 8 +MAUERWERK + 10 +26740.0 + 20 +22115.0 + 30 +0.0 + 0 +SEQEND + 5 +34FA + 8 +MAUERWERK + 0 +POLYLINE + 5 +2E85 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +34FB + 8 +MAUERWERK + 10 +23365.0 + 20 +22115.0 + 30 +0.0 + 0 +VERTEX + 5 +34FC + 8 +MAUERWERK + 10 +19750.0 + 20 +22115.0 + 30 +0.0 + 0 +VERTEX + 5 +34FD + 8 +MAUERWERK + 10 +19750.0 + 20 +21750.0 + 30 +0.0 + 0 +VERTEX + 5 +34FE + 8 +MAUERWERK + 10 +22500.0 + 20 +21750.0 + 30 +0.0 + 0 +VERTEX + 5 +34FF + 8 +MAUERWERK + 10 +22500.0 + 20 +17125.0 + 30 +0.0 + 0 +VERTEX + 5 +3500 + 8 +MAUERWERK + 10 +22865.0 + 20 +17125.0 + 30 +0.0 + 0 +VERTEX + 5 +3501 + 8 +MAUERWERK + 10 +22865.0 + 20 +21750.0 + 30 +0.0 + 0 +VERTEX + 5 +3502 + 8 +MAUERWERK + 10 +23365.0 + 20 +21750.0 + 30 +0.0 + 0 +SEQEND + 5 +3503 + 8 +MAUERWERK + 0 +POLYLINE + 5 +2E8F + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +3504 + 8 +MAUERWERK + 10 +26375.0 + 20 +10365.0 + 30 +0.0 + 0 +VERTEX + 5 +3505 + 8 +MAUERWERK + 10 +26740.0 + 20 +10365.0 + 30 +0.0 + 0 +VERTEX + 5 +3506 + 8 +MAUERWERK + 10 +26740.0 + 20 +9250.0 + 30 +0.0 + 0 +VERTEX + 5 +3507 + 8 +MAUERWERK + 10 +25375.0 + 20 +9250.0 + 30 +0.0 + 0 +VERTEX + 5 +3508 + 8 +MAUERWERK + 10 +25375.0 + 20 +9615.0 + 30 +0.0 + 0 +VERTEX + 5 +3509 + 8 +MAUERWERK + 10 +26375.0 + 20 +9615.0 + 30 +0.0 + 0 +SEQEND + 5 +350A + 8 +MAUERWERK + 0 +POLYLINE + 5 +2E97 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +350B + 8 +MAUERWERK + 10 +23240.0 + 20 +9615.0 + 30 +0.0 + 0 +VERTEX + 5 +350C + 8 +MAUERWERK + 10 +21875.0 + 20 +9615.0 + 30 +0.0 + 0 +VERTEX + 5 +350D + 8 +MAUERWERK + 10 +21875.0 + 20 +9250.0 + 30 +0.0 + 0 +VERTEX + 5 +350E + 8 +MAUERWERK + 10 +23240.0 + 20 +9250.0 + 30 +0.0 + 0 +SEQEND + 5 +350F + 8 +MAUERWERK + 0 +POLYLINE + 5 +2E9D + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +3510 + 8 +MAUERWERK + 10 +21365.0 + 20 +9250.0 + 30 +0.0 + 0 +VERTEX + 5 +3511 + 8 +MAUERWERK + 10 +21365.0 + 20 +9615.0 + 30 +0.0 + 0 +VERTEX + 5 +3512 + 8 +MAUERWERK + 10 +21240.0 + 20 +9615.0 + 30 +0.0 + 0 +VERTEX + 5 +3513 + 8 +MAUERWERK + 10 +21240.0 + 20 +14240.0 + 30 +0.0 + 0 +VERTEX + 5 +3514 + 8 +MAUERWERK + 10 +20875.0 + 20 +14240.0 + 30 +0.0 + 0 +VERTEX + 5 +3515 + 8 +MAUERWERK + 10 +20875.0 + 20 +9615.0 + 30 +0.0 + 0 +VERTEX + 5 +3516 + 8 +MAUERWERK + 10 +20375.0 + 20 +9615.0 + 30 +0.0 + 0 +VERTEX + 5 +3517 + 8 +MAUERWERK + 10 +20375.0 + 20 +9250.0 + 30 +0.0 + 0 +SEQEND + 5 +3518 + 8 +MAUERWERK + 0 +POLYLINE + 5 +2EA7 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +3519 + 8 +MAUERWERK + 10 +11250.0 + 20 +9615.0 + 30 +0.0 + 0 +VERTEX + 5 +351A + 8 +MAUERWERK + 10 +11250.0 + 20 +9250.0 + 30 +0.0 + 0 +VERTEX + 5 +351B + 8 +MAUERWERK + 10 +16115.0 + 20 +9250.0 + 30 +0.0 + 0 +VERTEX + 5 +351C + 8 +MAUERWERK + 10 +16115.0 + 20 +9615.0 + 30 +0.0 + 0 +VERTEX + 5 +351D + 8 +MAUERWERK + 10 +14490.0 + 20 +9615.0 + 30 +0.0 + 0 +VERTEX + 5 +351E + 8 +MAUERWERK + 10 +14490.0 + 20 +13500.0 + 30 +0.0 + 0 +VERTEX + 5 +351F + 8 +MAUERWERK + 10 +14615.0 + 20 +13500.0 + 30 +0.0 + 0 +VERTEX + 5 +3520 + 8 +MAUERWERK + 10 +14615.0 + 20 +13865.0 + 30 +0.0 + 0 +VERTEX + 5 +3521 + 8 +MAUERWERK + 10 +14125.0 + 20 +13865.0 + 30 +0.0 + 0 +VERTEX + 5 +3522 + 8 +MAUERWERK + 10 +14125.0 + 20 +12740.0 + 30 +0.0 + 0 +VERTEX + 5 +3523 + 8 +MAUERWERK + 10 +13875.0 + 20 +12740.0 + 30 +0.0 + 0 +VERTEX + 5 +3524 + 8 +MAUERWERK + 10 +13875.0 + 20 +12375.0 + 30 +0.0 + 0 +VERTEX + 5 +3525 + 8 +MAUERWERK + 10 +14125.0 + 20 +12375.0 + 30 +0.0 + 0 +VERTEX + 5 +3526 + 8 +MAUERWERK + 10 +14125.0 + 20 +9615.0 + 30 +0.0 + 0 +SEQEND + 5 +3527 + 8 +MAUERWERK + 0 +POLYLINE + 5 +2EB7 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +3528 + 8 +MAUERWERK + 10 +18490.0 + 20 +9615.0 + 30 +0.0 + 0 +VERTEX + 5 +3529 + 8 +MAUERWERK + 10 +18490.0 + 20 +9250.0 + 30 +0.0 + 0 +VERTEX + 5 +352A + 8 +MAUERWERK + 10 +17375.0 + 20 +9250.0 + 30 +0.0 + 0 +VERTEX + 5 +352B + 8 +MAUERWERK + 10 +17375.0 + 20 +9615.0 + 30 +0.0 + 0 +VERTEX + 5 +352C + 8 +MAUERWERK + 10 +17625.0 + 20 +9615.0 + 30 +0.0 + 0 +VERTEX + 5 +352D + 8 +MAUERWERK + 10 +17625.0 + 20 +13500.0 + 30 +0.0 + 0 +VERTEX + 5 +352E + 8 +MAUERWERK + 10 +15500.0 + 20 +13500.0 + 30 +0.0 + 0 +VERTEX + 5 +352F + 8 +MAUERWERK + 10 +15500.0 + 20 +13865.0 + 30 +0.0 + 0 +VERTEX + 5 +3530 + 8 +MAUERWERK + 10 +15750.0 + 20 +13865.0 + 30 +0.0 + 0 +VERTEX + 5 +3531 + 8 +MAUERWERK + 10 +15750.0 + 20 +13990.0 + 30 +0.0 + 0 +VERTEX + 5 +3532 + 8 +MAUERWERK + 10 +16115.0 + 20 +13990.0 + 30 +0.0 + 0 +VERTEX + 5 +3533 + 8 +MAUERWERK + 10 +16115.0 + 20 +13865.0 + 30 +0.0 + 0 +VERTEX + 5 +3534 + 8 +MAUERWERK + 10 +17990.0 + 20 +13865.0 + 30 +0.0 + 0 +VERTEX + 5 +3535 + 8 +MAUERWERK + 10 +17990.0 + 20 +9615.0 + 30 +0.0 + 0 +SEQEND + 5 +3536 + 8 +MAUERWERK + 0 +POINT + 5 +2EC7 + 8 +MAUERWERK + 10 +5040.0 + 20 +9250.0 + 30 +0.0 + 0 +POINT + 5 +2EC8 + 8 +MAUERWERK + 10 +6050.0 + 20 +9250.0 + 30 +0.0 + 0 +POINT + 5 +2EC9 + 8 +MAUERWERK + 10 +7060.0 + 20 +9250.0 + 30 +0.0 + 0 +POINT + 5 +2ECA + 8 +MAUERWERK + 10 +7740.0 + 20 +9580.0 + 30 +0.0 + 0 +POINT + 5 +2ECB + 8 +MAUERWERK + 10 +6765.0 + 20 +9615.0 + 30 +0.0 + 0 +POINT + 5 +2ECC + 8 +MAUERWERK + 10 +5755.0 + 20 +9615.0 + 30 +0.0 + 0 +POINT + 5 +2ECD + 8 +MAUERWERK + 10 +5365.0 + 20 +10235.0 + 30 +0.0 + 0 +POINT + 5 +2ECE + 8 +MAUERWERK + 10 +5365.0 + 20 +11245.0 + 30 +0.0 + 0 +POINT + 5 +2ECF + 8 +MAUERWERK + 10 +5365.0 + 20 +12255.0 + 30 +0.0 + 0 +POINT + 5 +2ED0 + 8 +MAUERWERK + 10 +5365.0 + 20 +13265.0 + 30 +0.0 + 0 +POINT + 5 +2ED1 + 8 +MAUERWERK + 10 +5515.0 + 20 +14125.0 + 30 +0.0 + 0 +POINT + 5 +2ED2 + 8 +MAUERWERK + 10 +6525.0 + 20 +14125.0 + 30 +0.0 + 0 +POINT + 5 +2ED3 + 8 +MAUERWERK + 10 +7535.0 + 20 +14125.0 + 30 +0.0 + 0 +POINT + 5 +2ED4 + 8 +MAUERWERK + 10 +8545.0 + 20 +14125.0 + 30 +0.0 + 0 +POINT + 5 +2ED5 + 8 +MAUERWERK + 10 +9555.0 + 20 +14125.0 + 30 +0.0 + 0 +POINT + 5 +2ED6 + 8 +MAUERWERK + 10 +10115.0 + 20 +14075.0 + 30 +0.0 + 0 +POINT + 5 +2ED7 + 8 +MAUERWERK + 10 +10115.0 + 20 +15085.0 + 30 +0.0 + 0 +POINT + 5 +2ED8 + 8 +MAUERWERK + 10 +11085.0 + 20 +15125.0 + 30 +0.0 + 0 +POINT + 5 +2ED9 + 8 +MAUERWERK + 10 +12095.0 + 20 +15125.0 + 30 +0.0 + 0 +POINT + 5 +2EDA + 8 +MAUERWERK + 10 +13105.0 + 20 +15125.0 + 30 +0.0 + 0 +POINT + 5 +2EDB + 8 +MAUERWERK + 10 +14115.0 + 20 +15125.0 + 30 +0.0 + 0 +POINT + 5 +2EDC + 8 +MAUERWERK + 10 +15125.0 + 20 +15125.0 + 30 +0.0 + 0 +POINT + 5 +2EDD + 8 +MAUERWERK + 10 +16010.0 + 20 +15000.0 + 30 +0.0 + 0 +POINT + 5 +2EDE + 8 +MAUERWERK + 10 +16365.0 + 20 +15655.0 + 30 +0.0 + 0 +POINT + 5 +2EDF + 8 +MAUERWERK + 10 +15750.0 + 20 +15930.0 + 30 +0.0 + 0 +POINT + 5 +2EE0 + 8 +MAUERWERK + 10 +15180.0 + 20 +15490.0 + 30 +0.0 + 0 +POINT + 5 +2EE1 + 8 +MAUERWERK + 10 +14170.0 + 20 +15490.0 + 30 +0.0 + 0 +POINT + 5 +2EE2 + 8 +MAUERWERK + 10 +13160.0 + 20 +15490.0 + 30 +0.0 + 0 +POINT + 5 +2EE3 + 8 +MAUERWERK + 10 +12150.0 + 20 +15490.0 + 30 +0.0 + 0 +POINT + 5 +2EE4 + 8 +MAUERWERK + 10 +11140.0 + 20 +15490.0 + 30 +0.0 + 0 +POINT + 5 +2EE5 + 8 +MAUERWERK + 10 +10130.0 + 20 +15490.0 + 30 +0.0 + 0 +POINT + 5 +2EE6 + 8 +MAUERWERK + 10 +9750.0 + 20 +15360.0 + 30 +0.0 + 0 +POINT + 5 +2EE7 + 8 +MAUERWERK + 10 +9610.0 + 20 +14490.0 + 30 +0.0 + 0 +POINT + 5 +2EE8 + 8 +MAUERWERK + 10 +8600.0 + 20 +14490.0 + 30 +0.0 + 0 +POINT + 5 +2EE9 + 8 +MAUERWERK + 10 +7590.0 + 20 +14490.0 + 30 +0.0 + 0 +POINT + 5 +2EEA + 8 +MAUERWERK + 10 +6580.0 + 20 +14490.0 + 30 +0.0 + 0 +POINT + 5 +2EEB + 8 +MAUERWERK + 10 +5570.0 + 20 +14490.0 + 30 +0.0 + 0 +POINT + 5 +2EEC + 8 +MAUERWERK + 10 +5000.0 + 20 +14300.0 + 30 +0.0 + 0 +POINT + 5 +2EED + 8 +MAUERWERK + 10 +5000.0 + 20 +13290.0 + 30 +0.0 + 0 +POINT + 5 +2EEE + 8 +MAUERWERK + 10 +5000.0 + 20 +12280.0 + 30 +0.0 + 0 +POINT + 5 +2EEF + 8 +MAUERWERK + 10 +5000.0 + 20 +11270.0 + 30 +0.0 + 0 +POINT + 5 +2EF0 + 8 +MAUERWERK + 10 +5000.0 + 20 +10260.0 + 30 +0.0 + 0 +POINT + 5 +2EF1 + 8 +MAUERWERK + 10 +26740.0 + 20 +12395.0 + 30 +0.0 + 0 +POINT + 5 +2EF2 + 8 +MAUERWERK + 10 +26740.0 + 20 +15845.0 + 30 +0.0 + 0 +POINT + 5 +2EF3 + 8 +MAUERWERK + 10 +26375.0 + 20 +16550.0 + 30 +0.0 + 0 +POINT + 5 +2EF4 + 8 +MAUERWERK + 10 +23485.0 + 20 +15990.0 + 30 +0.0 + 0 +POINT + 5 +2EF5 + 8 +MAUERWERK + 10 +23100.0 + 20 +15625.0 + 30 +0.0 + 0 +POINT + 5 +2EF6 + 8 +MAUERWERK + 10 +26375.0 + 20 +15450.0 + 30 +0.0 + 0 +POLYLINE + 5 +2EF7 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +3537 + 8 +MAUERWERK + 10 +26375.0 + 20 +12000.0 + 30 +0.0 + 0 +VERTEX + 5 +3538 + 8 +MAUERWERK + 10 +26740.0 + 20 +12000.0 + 30 +0.0 + 0 +VERTEX + 5 +3539 + 8 +MAUERWERK + 10 +26740.0 + 20 +17740.0 + 30 +0.0 + 0 +VERTEX + 5 +353A + 8 +MAUERWERK + 10 +26375.0 + 20 +17740.0 + 30 +0.0 + 0 +VERTEX + 5 +353B + 8 +MAUERWERK + 10 +26375.0 + 20 +15990.0 + 30 +0.0 + 0 +VERTEX + 5 +353C + 8 +MAUERWERK + 10 +22865.0 + 20 +15990.0 + 30 +0.0 + 0 +VERTEX + 5 +353D + 8 +MAUERWERK + 10 +22865.0 + 20 +16240.0 + 30 +0.0 + 0 +VERTEX + 5 +353E + 8 +MAUERWERK + 10 +22500.0 + 20 +16240.0 + 30 +0.0 + 0 +VERTEX + 5 +353F + 8 +MAUERWERK + 10 +22500.0 + 20 +15990.0 + 30 +0.0 + 0 +VERTEX + 5 +3540 + 8 +MAUERWERK + 10 +22250.0 + 20 +15990.0 + 30 +0.0 + 0 +VERTEX + 5 +3541 + 8 +MAUERWERK + 10 +22250.0 + 20 +15625.0 + 30 +0.0 + 0 +VERTEX + 5 +3542 + 8 +MAUERWERK + 10 +26375.0 + 20 +15625.0 + 30 +0.0 + 0 +SEQEND + 5 +3543 + 8 +MAUERWERK + 0 +POLYLINE + 5 +2F05 + 8 +TRENNWAENDE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3544 + 8 +TRENNWAENDE + 10 +22850.0 + 20 +9615.0 + 30 +0.0 + 0 +VERTEX + 5 +3545 + 8 +TRENNWAENDE + 10 +22850.0 + 20 +13915.0 + 30 +0.0 + 0 +VERTEX + 5 +3546 + 8 +TRENNWAENDE + 10 +22450.0 + 20 +13915.0 + 30 +0.0 + 0 +VERTEX + 5 +3547 + 8 +TRENNWAENDE + 10 +22450.0 + 20 +14040.0 + 30 +0.0 + 0 +VERTEX + 5 +3548 + 8 +TRENNWAENDE + 10 +22850.0 + 20 +14040.0 + 30 +0.0 + 0 +VERTEX + 5 +3549 + 8 +TRENNWAENDE + 10 +22850.0 + 20 +14340.0 + 30 +0.0 + 0 +VERTEX + 5 +354A + 8 +TRENNWAENDE + 10 +22975.0 + 20 +14340.0 + 30 +0.0 + 0 +VERTEX + 5 +354B + 8 +TRENNWAENDE + 10 +22975.0 + 20 +9615.0 + 30 +0.0 + 0 +SEQEND + 5 +354C + 8 +TRENNWAENDE + 0 +POLYLINE + 5 +2F0F + 8 +TRENNWAENDE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +354D + 8 +TRENNWAENDE + 10 +22850.0 + 20 +15625.0 + 30 +0.0 + 0 +VERTEX + 5 +354E + 8 +TRENNWAENDE + 10 +22850.0 + 20 +15225.0 + 30 +0.0 + 0 +VERTEX + 5 +354F + 8 +TRENNWAENDE + 10 +22975.0 + 20 +15225.0 + 30 +0.0 + 0 +VERTEX + 5 +3550 + 8 +TRENNWAENDE + 10 +22975.0 + 20 +15625.0 + 30 +0.0 + 0 +SEQEND + 5 +3551 + 8 +TRENNWAENDE + 0 +POLYLINE + 5 +2F15 + 8 +TRENNWAENDE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +3552 + 8 +TRENNWAENDE + 10 +21240.0 + 20 +13915.0 + 30 +0.0 + 0 +VERTEX + 5 +3553 + 8 +TRENNWAENDE + 10 +21565.0 + 20 +13915.0 + 30 +0.0 + 0 +VERTEX + 5 +3554 + 8 +TRENNWAENDE + 10 +21565.0 + 20 +14040.0 + 30 +0.0 + 0 +VERTEX + 5 +3555 + 8 +TRENNWAENDE + 10 +21240.0 + 20 +14040.0 + 30 +0.0 + 0 +SEQEND + 5 +3556 + 8 +TRENNWAENDE + 0 +POLYLINE + 5 +2F1B + 8 +TRENNWAENDE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +3557 + 8 +TRENNWAENDE + 10 +10115.0 + 20 +17375.0 + 30 +0.0 + 0 +VERTEX + 5 +3558 + 8 +TRENNWAENDE + 10 +13525.0 + 20 +17375.0 + 30 +0.0 + 0 +VERTEX + 5 +3559 + 8 +TRENNWAENDE + 10 +13525.0 + 20 +17250.0 + 30 +0.0 + 0 +VERTEX + 5 +355A + 8 +TRENNWAENDE + 10 +10115.0 + 20 +17250.0 + 30 +0.0 + 0 +SEQEND + 5 +355B + 8 +TRENNWAENDE + 0 +POLYLINE + 5 +2F21 + 8 +TRENNWAENDE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +355C + 8 +TRENNWAENDE + 10 +14875.0 + 20 +17375.0 + 30 +0.0 + 0 +VERTEX + 5 +355D + 8 +TRENNWAENDE + 10 +14555.0 + 20 +17375.0 + 30 +0.0 + 0 +VERTEX + 5 +355E + 8 +TRENNWAENDE + 10 +14555.0 + 20 +17250.0 + 30 +0.0 + 0 +VERTEX + 5 +355F + 8 +TRENNWAENDE + 10 +14875.0 + 20 +17250.0 + 30 +0.0 + 0 +SEQEND + 5 +3560 + 8 +TRENNWAENDE + 0 +POLYLINE + 5 +2F27 + 8 +TRENNWAENDE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +3561 + 8 +TRENNWAENDE + 10 +15240.0 + 20 +17375.0 + 30 +0.0 + 0 +VERTEX + 5 +3562 + 8 +TRENNWAENDE + 10 +15990.0 + 20 +17375.0 + 30 +0.0 + 0 +VERTEX + 5 +3563 + 8 +TRENNWAENDE + 10 +15990.0 + 20 +17250.0 + 30 +0.0 + 0 +VERTEX + 5 +3564 + 8 +TRENNWAENDE + 10 +15240.0 + 20 +17250.0 + 30 +0.0 + 0 +SEQEND + 5 +3565 + 8 +TRENNWAENDE + 0 +POLYLINE + 5 +2F2D + 8 +TRENNWAENDE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +3566 + 8 +TRENNWAENDE + 10 +17625.0 + 20 +17375.0 + 30 +0.0 + 0 +VERTEX + 5 +3567 + 8 +TRENNWAENDE + 10 +16875.0 + 20 +17375.0 + 30 +0.0 + 0 +VERTEX + 5 +3568 + 8 +TRENNWAENDE + 10 +16875.0 + 20 +17250.0 + 30 +0.0 + 0 +VERTEX + 5 +3569 + 8 +TRENNWAENDE + 10 +17625.0 + 20 +17250.0 + 30 +0.0 + 0 +SEQEND + 5 +356A + 8 +TRENNWAENDE + 0 +POLYLINE + 5 +2F33 + 8 +TRENNWAENDE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +356B + 8 +TRENNWAENDE + 10 +7615.0 + 20 +16875.0 + 30 +0.0 + 0 +VERTEX + 5 +356C + 8 +TRENNWAENDE + 10 +7615.0 + 20 +16475.0 + 30 +0.0 + 0 +VERTEX + 5 +356D + 8 +TRENNWAENDE + 10 +7740.0 + 20 +16475.0 + 30 +0.0 + 0 +VERTEX + 5 +356E + 8 +TRENNWAENDE + 10 +7740.0 + 20 +16875.0 + 30 +0.0 + 0 +SEQEND + 5 +356F + 8 +TRENNWAENDE + 0 +POLYLINE + 5 +2F39 + 8 +TRENNWAENDE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3570 + 8 +TRENNWAENDE + 10 +7615.0 + 20 +14490.0 + 30 +0.0 + 0 +VERTEX + 5 +3571 + 8 +TRENNWAENDE + 10 +7615.0 + 20 +15590.0 + 30 +0.0 + 0 +VERTEX + 5 +3572 + 8 +TRENNWAENDE + 10 +7740.0 + 20 +15590.0 + 30 +0.0 + 0 +VERTEX + 5 +3573 + 8 +TRENNWAENDE + 10 +7740.0 + 20 +14490.0 + 30 +0.0 + 0 +SEQEND + 5 +3574 + 8 +TRENNWAENDE + 0 +POLYLINE + 5 +2F3F + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3575 + 8 +FENSTER + 10 +6740.0 + 20 +21738.696968 + 30 +0.0 + 0 +VERTEX + 5 +3576 + 8 +FENSTER + 10 +8505.0 + 20 +21738.696968 + 30 +0.0 + 0 +SEQEND + 5 +3577 + 8 +FENSTER + 0 +POLYLINE + 5 +2F43 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3578 + 8 +FENSTER + 10 +10240.0 + 20 +21738.750414 + 30 +0.0 + 0 +VERTEX + 5 +3579 + 8 +FENSTER + 10 +11250.0 + 20 +21738.750414 + 30 +0.0 + 0 +SEQEND + 5 +357A + 8 +FENSTER + 0 +POLYLINE + 5 +2F47 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +357B + 8 +FENSTER + 10 +15865.0 + 20 +21738.749579 + 30 +0.0 + 0 +VERTEX + 5 +357C + 8 +FENSTER + 10 +16880.0 + 20 +21738.749579 + 30 +0.0 + 0 +SEQEND + 5 +357D + 8 +FENSTER + 0 +POLYLINE + 5 +2F4B + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +357E + 8 +FENSTER + 10 +18740.0 + 20 +21738.72851 + 30 +0.0 + 0 +VERTEX + 5 +357F + 8 +FENSTER + 10 +19750.0 + 20 +21738.72851 + 30 +0.0 + 0 +SEQEND + 5 +3580 + 8 +FENSTER + 0 +POLYLINE + 5 +2F4F + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3581 + 8 +FENSTER + 10 +23365.0 + 20 +21738.76512 + 30 +0.0 + 0 +VERTEX + 5 +3582 + 8 +FENSTER + 10 +25255.0 + 20 +21738.76512 + 30 +0.0 + 0 +SEQEND + 5 +3583 + 8 +FENSTER + 0 +POLYLINE + 5 +2F53 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3584 + 8 +FENSTER + 10 +26363.699375 + 20 +18380.0 + 30 +0.0 + 0 +VERTEX + 5 +3585 + 8 +FENSTER + 10 +26363.699375 + 20 +17720.0 + 30 +0.0 + 0 +SEQEND + 5 +3586 + 8 +FENSTER + 0 +POLYLINE + 5 +2F57 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3587 + 8 +FENSTER + 10 +26363.746274 + 20 +12010.0 + 30 +0.0 + 0 +VERTEX + 5 +3588 + 8 +FENSTER + 10 +26363.746274 + 20 +10355.0 + 30 +0.0 + 0 +SEQEND + 5 +3589 + 8 +FENSTER + 0 +POLYLINE + 5 +2F5B + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +358A + 8 +FENSTER + 10 +23231.732275 + 20 +9626.249997 + 30 +0.0 + 0 +VERTEX + 5 +358B + 8 +FENSTER + 10 +25366.732275 + 20 +9626.249997 + 30 +0.0 + 0 +SEQEND + 5 +358C + 8 +FENSTER + 0 +POLYLINE + 5 +2F5F + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +358D + 8 +FENSTER + 10 +21360.0 + 20 +9626.287656 + 30 +0.0 + 0 +VERTEX + 5 +358E + 8 +FENSTER + 10 +21875.0 + 20 +9626.287656 + 30 +0.0 + 0 +SEQEND + 5 +358F + 8 +FENSTER + 0 +POLYLINE + 5 +2F63 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3590 + 8 +FENSTER + 10 +18480.0 + 20 +9626.31444 + 30 +0.0 + 0 +VERTEX + 5 +3591 + 8 +FENSTER + 10 +20380.0 + 20 +9626.31444 + 30 +0.0 + 0 +SEQEND + 5 +3592 + 8 +FENSTER + 0 +POLYLINE + 5 +2F67 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3593 + 8 +FENSTER + 10 +16109.83412 + 20 +9626.263541 + 30 +0.0 + 0 +VERTEX + 5 +3594 + 8 +FENSTER + 10 +17379.83412 + 20 +9626.263541 + 30 +0.0 + 0 +SEQEND + 5 +3595 + 8 +FENSTER + 0 +POLYLINE + 5 +2F6B + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3596 + 8 +FENSTER + 10 +9865.0 + 20 +9626.25 + 30 +0.0 + 0 +VERTEX + 5 +3597 + 8 +FENSTER + 10 +11260.0 + 20 +9626.25 + 30 +0.0 + 0 +SEQEND + 5 +3598 + 8 +FENSTER + 0 +LINE + 5 +2F6F + 8 +FENSTER + 10 +8755.0 + 20 +9615.0 + 30 +0.0 + 11 +8750.0 + 21 +9615.0 + 31 +0.0 + 0 +POLYLINE + 5 +2F70 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3599 + 8 +FENSTER + 10 +7730.0 + 20 +9626.281294 + 30 +0.0 + 0 +VERTEX + 5 +359A + 8 +FENSTER + 10 +8755.0 + 20 +9626.281294 + 30 +0.0 + 0 +SEQEND + 5 +359B + 8 +FENSTER + 0 +POLYLINE + 5 +2F74 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +359C + 8 +FENSTER + 10 +5376.25 + 20 +16130.0 + 30 +0.0 + 0 +VERTEX + 5 +359D + 8 +FENSTER + 10 +5376.25 + 20 +14615.0 + 30 +0.0 + 0 +SEQEND + 5 +359E + 8 +FENSTER + 0 +POLYLINE + 5 +2F78 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +359F + 8 +FENSTER + 10 +5376.260808 + 20 +19390.0 + 30 +0.0 + 0 +VERTEX + 5 +35A0 + 8 +FENSTER + 10 +5376.260808 + 20 +18230.0 + 30 +0.0 + 0 +SEQEND + 5 +35A1 + 8 +FENSTER + 0 +POLYLINE + 5 +2F7C + 8 +VORSATZSCHALLE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +35A2 + 8 +VORSATZSCHALLE + 10 +4745.0 + 20 +8995.0 + 30 +0.0 + 0 +VERTEX + 5 +35A3 + 8 +VORSATZSCHALLE + 10 +7740.0 + 20 +8995.0 + 30 +0.0 + 0 +VERTEX + 5 +35A4 + 8 +VORSATZSCHALLE + 10 +7740.0 + 20 +9110.0 + 30 +0.0 + 0 +VERTEX + 5 +35A5 + 8 +VORSATZSCHALLE + 10 +4860.0 + 20 +9110.0 + 30 +0.0 + 0 +VERTEX + 5 +35A6 + 8 +VORSATZSCHALLE + 10 +4860.0 + 20 +14615.0 + 30 +0.0 + 0 +VERTEX + 5 +35A7 + 8 +VORSATZSCHALLE + 10 +4745.0 + 20 +14615.0 + 30 +0.0 + 0 +SEQEND + 5 +35A8 + 8 +VORSATZSCHALLE + 0 +POLYLINE + 5 +2F84 + 8 +VORSATZSCHALLE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +35A9 + 8 +VORSATZSCHALLE + 10 +8750.0 + 20 +9110.0 + 30 +0.0 + 0 +VERTEX + 5 +35AA + 8 +VORSATZSCHALLE + 10 +8750.0 + 20 +8995.0 + 30 +0.0 + 0 +VERTEX + 5 +35AB + 8 +VORSATZSCHALLE + 10 +9865.0 + 20 +8995.0 + 30 +0.0 + 0 +VERTEX + 5 +35AC + 8 +VORSATZSCHALLE + 10 +9865.0 + 20 +9110.0 + 30 +0.0 + 0 +SEQEND + 5 +35AD + 8 +VORSATZSCHALLE + 0 +POLYLINE + 5 +2F8A + 8 +VORSATZSCHALLE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +35AE + 8 +VORSATZSCHALLE + 10 +11250.0 + 20 +9110.0 + 30 +0.0 + 0 +VERTEX + 5 +35AF + 8 +VORSATZSCHALLE + 10 +11250.0 + 20 +8995.0 + 30 +0.0 + 0 +VERTEX + 5 +35B0 + 8 +VORSATZSCHALLE + 10 +16115.0 + 20 +8995.0 + 30 +0.0 + 0 +VERTEX + 5 +35B1 + 8 +VORSATZSCHALLE + 10 +16115.0 + 20 +9110.0 + 30 +0.0 + 0 +SEQEND + 5 +35B2 + 8 +VORSATZSCHALLE + 0 +POLYLINE + 5 +2F90 + 8 +VORSATZSCHALLE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +35B3 + 8 +VORSATZSCHALLE + 10 +17375.0 + 20 +9110.0 + 30 +0.0 + 0 +VERTEX + 5 +35B4 + 8 +VORSATZSCHALLE + 10 +17375.0 + 20 +8995.0 + 30 +0.0 + 0 +VERTEX + 5 +35B5 + 8 +VORSATZSCHALLE + 10 +18490.0 + 20 +8995.0 + 30 +0.0 + 0 +VERTEX + 5 +35B6 + 8 +VORSATZSCHALLE + 10 +18490.0 + 20 +9110.0 + 30 +0.0 + 0 +SEQEND + 5 +35B7 + 8 +VORSATZSCHALLE + 0 +POLYLINE + 5 +2F96 + 8 +VORSATZSCHALLE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +35B8 + 8 +VORSATZSCHALLE + 10 +20375.0 + 20 +9110.0 + 30 +0.0 + 0 +VERTEX + 5 +35B9 + 8 +VORSATZSCHALLE + 10 +20375.0 + 20 +8995.0 + 30 +0.0 + 0 +VERTEX + 5 +35BA + 8 +VORSATZSCHALLE + 10 +21365.0 + 20 +8995.0 + 30 +0.0 + 0 +VERTEX + 5 +35BB + 8 +VORSATZSCHALLE + 10 +21365.0 + 20 +9110.0 + 30 +0.0 + 0 +SEQEND + 5 +35BC + 8 +VORSATZSCHALLE + 0 +POLYLINE + 5 +2F9C + 8 +VORSATZSCHALLE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +35BD + 8 +VORSATZSCHALLE + 10 +21875.0 + 20 +9110.0 + 30 +0.0 + 0 +VERTEX + 5 +35BE + 8 +VORSATZSCHALLE + 10 +21875.0 + 20 +8995.0 + 30 +0.0 + 0 +VERTEX + 5 +35BF + 8 +VORSATZSCHALLE + 10 +23240.0 + 20 +8995.0 + 30 +0.0 + 0 +VERTEX + 5 +35C0 + 8 +VORSATZSCHALLE + 10 +23240.0 + 20 +9110.0 + 30 +0.0 + 0 +SEQEND + 5 +35C1 + 8 +VORSATZSCHALLE + 0 +POLYLINE + 5 +2FA2 + 8 +VORSATZSCHALLE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +35C2 + 8 +VORSATZSCHALLE + 10 +26880.0 + 20 +10365.0 + 30 +0.0 + 0 +VERTEX + 5 +35C3 + 8 +VORSATZSCHALLE + 10 +26995.0 + 20 +10365.0 + 30 +0.0 + 0 +VERTEX + 5 +35C4 + 8 +VORSATZSCHALLE + 10 +26995.0 + 20 +8995.0 + 30 +0.0 + 0 +VERTEX + 5 +35C5 + 8 +VORSATZSCHALLE + 10 +25375.0 + 20 +8995.0 + 30 +0.0 + 0 +VERTEX + 5 +35C6 + 8 +VORSATZSCHALLE + 10 +25375.0 + 20 +9110.0 + 30 +0.0 + 0 +VERTEX + 5 +35C7 + 8 +VORSATZSCHALLE + 10 +26880.0 + 20 +9110.0 + 30 +0.0 + 0 +SEQEND + 5 +35C8 + 8 +VORSATZSCHALLE + 0 +POLYLINE + 5 +2FAA + 8 +VORSATZSCHALLE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +35C9 + 8 +VORSATZSCHALLE + 10 +26880.0 + 20 +12000.0 + 30 +0.0 + 0 +VERTEX + 5 +35CA + 8 +VORSATZSCHALLE + 10 +26995.0 + 20 +12000.0 + 30 +0.0 + 0 +VERTEX + 5 +35CB + 8 +VORSATZSCHALLE + 10 +26995.0 + 20 +17740.0 + 30 +0.0 + 0 +VERTEX + 5 +35CC + 8 +VORSATZSCHALLE + 10 +26880.0 + 20 +17740.0 + 30 +0.0 + 0 +SEQEND + 5 +35CD + 8 +VORSATZSCHALLE + 0 +POLYLINE + 5 +2FB0 + 8 +VORSATZSCHALLE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +35CE + 8 +VORSATZSCHALLE + 10 +26880.0 + 20 +18375.0 + 30 +0.0 + 0 +VERTEX + 5 +35CF + 8 +VORSATZSCHALLE + 10 +26995.0 + 20 +18375.0 + 30 +0.0 + 0 +VERTEX + 5 +35D0 + 8 +VORSATZSCHALLE + 10 +26995.0 + 20 +22370.0 + 30 +0.0 + 0 +VERTEX + 5 +35D1 + 8 +VORSATZSCHALLE + 10 +25250.0 + 20 +22370.0 + 30 +0.0 + 0 +VERTEX + 5 +35D2 + 8 +VORSATZSCHALLE + 10 +25250.0 + 20 +22255.0 + 30 +0.0 + 0 +VERTEX + 5 +35D3 + 8 +VORSATZSCHALLE + 10 +26880.0 + 20 +22255.0 + 30 +0.0 + 0 +SEQEND + 5 +35D4 + 8 +VORSATZSCHALLE + 0 +POLYLINE + 5 +2FB8 + 8 +VORSATZSCHALLE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +35D5 + 8 +VORSATZSCHALLE + 10 +4745.0 + 20 +19375.0 + 30 +0.0 + 0 +VERTEX + 5 +35D6 + 8 +VORSATZSCHALLE + 10 +4860.0 + 20 +19375.0 + 30 +0.0 + 0 +VERTEX + 5 +35D7 + 8 +VORSATZSCHALLE + 10 +4860.0 + 20 +22255.0 + 30 +0.0 + 0 +VERTEX + 5 +35D8 + 8 +VORSATZSCHALLE + 10 +6740.0 + 20 +22255.0 + 30 +0.0 + 0 +VERTEX + 5 +35D9 + 8 +VORSATZSCHALLE + 10 +6740.0 + 20 +22370.0 + 30 +0.0 + 0 +VERTEX + 5 +35DA + 8 +VORSATZSCHALLE + 10 +4745.0 + 20 +22370.0 + 30 +0.0 + 0 +SEQEND + 5 +35DB + 8 +VORSATZSCHALLE + 0 +POLYLINE + 5 +2FC0 + 8 +VORSATZSCHALLE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +35DC + 8 +VORSATZSCHALLE + 10 +8500.0 + 20 +22255.0 + 30 +0.0 + 0 +VERTEX + 5 +35DD + 8 +VORSATZSCHALLE + 10 +8500.0 + 20 +22370.0 + 30 +0.0 + 0 +VERTEX + 5 +35DE + 8 +VORSATZSCHALLE + 10 +10240.0 + 20 +22370.0 + 30 +0.0 + 0 +VERTEX + 5 +35DF + 8 +VORSATZSCHALLE + 10 +10240.0 + 20 +22255.0 + 30 +0.0 + 0 +SEQEND + 5 +35E0 + 8 +VORSATZSCHALLE + 0 +POLYLINE + 5 +2FC6 + 8 +VORSATZSCHALLE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +35E1 + 8 +VORSATZSCHALLE + 10 +11250.0 + 20 +22255.0 + 30 +0.0 + 0 +VERTEX + 5 +35E2 + 8 +VORSATZSCHALLE + 10 +11250.0 + 20 +22370.0 + 30 +0.0 + 0 +VERTEX + 5 +35E3 + 8 +VORSATZSCHALLE + 10 +15865.0 + 20 +22370.0 + 30 +0.0 + 0 +VERTEX + 5 +35E4 + 8 +VORSATZSCHALLE + 10 +15865.0 + 20 +22255.0 + 30 +0.0 + 0 +SEQEND + 5 +35E5 + 8 +VORSATZSCHALLE + 0 +POLYLINE + 5 +2FCC + 8 +VORSATZSCHALLE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +35E6 + 8 +VORSATZSCHALLE + 10 +16875.0 + 20 +22255.0 + 30 +0.0 + 0 +VERTEX + 5 +35E7 + 8 +VORSATZSCHALLE + 10 +16875.0 + 20 +22370.0 + 30 +0.0 + 0 +VERTEX + 5 +35E8 + 8 +VORSATZSCHALLE + 10 +18740.0 + 20 +22370.0 + 30 +0.0 + 0 +VERTEX + 5 +35E9 + 8 +VORSATZSCHALLE + 10 +18740.0 + 20 +22255.0 + 30 +0.0 + 0 +SEQEND + 5 +35EA + 8 +VORSATZSCHALLE + 0 +POLYLINE + 5 +2FD2 + 8 +VORSATZSCHALLE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +35EB + 8 +VORSATZSCHALLE + 10 +19750.0 + 20 +22255.0 + 30 +0.0 + 0 +VERTEX + 5 +35EC + 8 +VORSATZSCHALLE + 10 +19750.0 + 20 +22370.0 + 30 +0.0 + 0 +VERTEX + 5 +35ED + 8 +VORSATZSCHALLE + 10 +23365.0 + 20 +22370.0 + 30 +0.0 + 0 +VERTEX + 5 +35EE + 8 +VORSATZSCHALLE + 10 +23365.0 + 20 +22255.0 + 30 +0.0 + 0 +SEQEND + 5 +35EF + 8 +VORSATZSCHALLE + 0 +POLYLINE + 5 +2FD8 + 8 +VORSATZSCHALLE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +35F0 + 8 +VORSATZSCHALLE + 10 +4860.0 + 20 +18240.0 + 30 +0.0 + 0 +VERTEX + 5 +35F1 + 8 +VORSATZSCHALLE + 10 +4745.0 + 20 +18240.0 + 30 +0.0 + 0 +VERTEX + 5 +35F2 + 8 +VORSATZSCHALLE + 10 +4745.0 + 20 +16125.0 + 30 +0.0 + 0 +VERTEX + 5 +35F3 + 8 +VORSATZSCHALLE + 10 +4860.0 + 20 +16125.0 + 30 +0.0 + 0 +SEQEND + 5 +35F4 + 8 +VORSATZSCHALLE + 0 +POLYLINE + 5 +2FDE + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +35F5 + 8 +MAUERWERK + 10 +5000.0 + 20 +9250.0 + 30 +0.0 + 0 +VERTEX + 5 +35F6 + 8 +MAUERWERK + 10 +7740.0 + 20 +9250.0 + 30 +0.0 + 0 +SEQEND + 5 +35F7 + 8 +MAUERWERK + 0 +POLYLINE + 5 +2FE2 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +35F8 + 8 +MAUERWERK + 10 +7740.0 + 20 +9250.0 + 30 +0.0 + 0 +VERTEX + 5 +35F9 + 8 +MAUERWERK + 10 +7740.0 + 20 +9615.0 + 30 +0.0 + 0 +VERTEX + 5 +35FA + 8 +MAUERWERK + 10 +5365.0 + 20 +9615.0 + 30 +0.0 + 0 +VERTEX + 5 +35FB + 8 +MAUERWERK + 10 +5365.0 + 20 +14125.0 + 30 +0.0 + 0 +VERTEX + 5 +35FC + 8 +MAUERWERK + 10 +9750.0 + 20 +14125.0 + 30 +0.0 + 0 +VERTEX + 5 +35FD + 8 +MAUERWERK + 10 +9750.0 + 20 +13875.0 + 30 +0.0 + 0 +VERTEX + 5 +35FE + 8 +MAUERWERK + 10 +10115.0 + 20 +13875.0 + 30 +0.0 + 0 +VERTEX + 5 +35FF + 8 +MAUERWERK + 10 +10115.0 + 20 +15125.0 + 30 +0.0 + 0 +VERTEX + 5 +3600 + 8 +MAUERWERK + 10 +15750.0 + 20 +15125.0 + 30 +0.0 + 0 +VERTEX + 5 +3601 + 8 +MAUERWERK + 10 +15750.0 + 20 +15000.0 + 30 +0.0 + 0 +VERTEX + 5 +3602 + 8 +MAUERWERK + 10 +16115.0 + 20 +15000.0 + 30 +0.0 + 0 +VERTEX + 5 +3603 + 8 +MAUERWERK + 10 +16115.0 + 20 +15625.0 + 30 +0.0 + 0 +VERTEX + 5 +3604 + 8 +MAUERWERK + 10 +16365.0 + 20 +15625.0 + 30 +0.0 + 0 +VERTEX + 5 +3605 + 8 +MAUERWERK + 10 +16365.0 + 20 +15990.0 + 30 +0.0 + 0 +VERTEX + 5 +3606 + 8 +MAUERWERK + 10 +15750.0 + 20 +15990.0 + 30 +0.0 + 0 +VERTEX + 5 +3607 + 8 +MAUERWERK + 10 +15750.0 + 20 +15490.0 + 30 +0.0 + 0 +VERTEX + 5 +3608 + 8 +MAUERWERK + 10 +10115.0 + 20 +15490.0 + 30 +0.0 + 0 +VERTEX + 5 +3609 + 8 +MAUERWERK + 10 +10115.0 + 20 +15740.0 + 30 +0.0 + 0 +VERTEX + 5 +360A + 8 +MAUERWERK + 10 +9750.0 + 20 +15740.0 + 30 +0.0 + 0 +VERTEX + 5 +360B + 8 +MAUERWERK + 10 +9750.0 + 20 +14490.0 + 30 +0.0 + 0 +VERTEX + 5 +360C + 8 +MAUERWERK + 10 +5365.0 + 20 +14490.0 + 30 +0.0 + 0 +VERTEX + 5 +360D + 8 +MAUERWERK + 10 +5365.0 + 20 +14615.0 + 30 +0.0 + 0 +VERTEX + 5 +360E + 8 +MAUERWERK + 10 +5000.0 + 20 +14615.0 + 30 +0.0 + 0 +VERTEX + 5 +360F + 8 +MAUERWERK + 10 +5000.0 + 20 +9250.0 + 30 +0.0 + 0 +SEQEND + 5 +3610 + 8 +MAUERWERK + 0 +POLYLINE + 5 +2FFC + 8 +DAEMMUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3611 + 8 +DAEMMUNG + 10 +4920.0 + 20 +9170.0 + 30 +0.0 + 0 +VERTEX + 5 +3612 + 8 +DAEMMUNG + 10 +7751.25 + 20 +9170.0 + 30 +0.0 + 0 +VERTEX + 5 +3613 + 8 +DAEMMUNG + 10 +7751.25 + 20 +9250.0 + 30 +0.0 + 0 +VERTEX + 5 +3614 + 8 +DAEMMUNG + 10 +5000.0 + 20 +9250.0 + 30 +0.0 + 0 +VERTEX + 5 +3615 + 8 +DAEMMUNG + 10 +5000.0 + 20 +14626.25 + 30 +0.0 + 0 +VERTEX + 5 +3616 + 8 +DAEMMUNG + 10 +4920.0 + 20 +14626.25 + 30 +0.0 + 0 +SEQEND + 5 +3617 + 8 +DAEMMUNG + 0 +POLYLINE + 5 +3004 + 8 +DAEMMUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3618 + 8 +DAEMMUNG + 10 +8738.75 + 20 +9250.0 + 30 +0.0 + 0 +VERTEX + 5 +3619 + 8 +DAEMMUNG + 10 +8738.75 + 20 +9170.0 + 30 +0.0 + 0 +VERTEX + 5 +361A + 8 +DAEMMUNG + 10 +9876.25 + 20 +9170.0 + 30 +0.0 + 0 +VERTEX + 5 +361B + 8 +DAEMMUNG + 10 +9876.25 + 20 +9250.0 + 30 +0.0 + 0 +SEQEND + 5 +361C + 8 +DAEMMUNG + 0 +POLYLINE + 5 +300A + 8 +DAEMMUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +361D + 8 +DAEMMUNG + 10 +11238.75 + 20 +9250.0 + 30 +0.0 + 0 +VERTEX + 5 +361E + 8 +DAEMMUNG + 10 +11238.75 + 20 +9170.0 + 30 +0.0 + 0 +VERTEX + 5 +361F + 8 +DAEMMUNG + 10 +16126.25 + 20 +9170.0 + 30 +0.0 + 0 +VERTEX + 5 +3620 + 8 +DAEMMUNG + 10 +16126.25 + 20 +9250.0 + 30 +0.0 + 0 +SEQEND + 5 +3621 + 8 +DAEMMUNG + 0 +POLYLINE + 5 +3010 + 8 +DAEMMUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3622 + 8 +DAEMMUNG + 10 +17363.75 + 20 +9250.0 + 30 +0.0 + 0 +VERTEX + 5 +3623 + 8 +DAEMMUNG + 10 +17363.75 + 20 +9170.0 + 30 +0.0 + 0 +VERTEX + 5 +3624 + 8 +DAEMMUNG + 10 +18501.25 + 20 +9170.0 + 30 +0.0 + 0 +VERTEX + 5 +3625 + 8 +DAEMMUNG + 10 +18501.25 + 20 +9250.0 + 30 +0.0 + 0 +SEQEND + 5 +3626 + 8 +DAEMMUNG + 0 +POLYLINE + 5 +3016 + 8 +DAEMMUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3627 + 8 +DAEMMUNG + 10 +20363.75 + 20 +9250.0 + 30 +0.0 + 0 +VERTEX + 5 +3628 + 8 +DAEMMUNG + 10 +20363.75 + 20 +9170.0 + 30 +0.0 + 0 +VERTEX + 5 +3629 + 8 +DAEMMUNG + 10 +21376.25 + 20 +9170.0 + 30 +0.0 + 0 +VERTEX + 5 +362A + 8 +DAEMMUNG + 10 +21376.25 + 20 +9250.0 + 30 +0.0 + 0 +SEQEND + 5 +362B + 8 +DAEMMUNG + 0 +POLYLINE + 5 +301C + 8 +DAEMMUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +362C + 8 +DAEMMUNG + 10 +21863.75 + 20 +9250.0 + 30 +0.0 + 0 +VERTEX + 5 +362D + 8 +DAEMMUNG + 10 +21863.75 + 20 +9170.0 + 30 +0.0 + 0 +VERTEX + 5 +362E + 8 +DAEMMUNG + 10 +23251.25 + 20 +9170.0 + 30 +0.0 + 0 +VERTEX + 5 +362F + 8 +DAEMMUNG + 10 +23251.25 + 20 +9250.0 + 30 +0.0 + 0 +SEQEND + 5 +3630 + 8 +DAEMMUNG + 0 +POLYLINE + 5 +3022 + 8 +DAEMMUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3631 + 8 +DAEMMUNG + 10 +25363.75 + 20 +9250.0 + 30 +0.0 + 0 +VERTEX + 5 +3632 + 8 +DAEMMUNG + 10 +25363.75 + 20 +9170.0 + 30 +0.0 + 0 +VERTEX + 5 +3633 + 8 +DAEMMUNG + 10 +26820.0 + 20 +9170.0 + 30 +0.0 + 0 +VERTEX + 5 +3634 + 8 +DAEMMUNG + 10 +26820.0 + 20 +10376.25 + 30 +0.0 + 0 +VERTEX + 5 +3635 + 8 +DAEMMUNG + 10 +26740.0 + 20 +10376.25 + 30 +0.0 + 0 +VERTEX + 5 +3636 + 8 +DAEMMUNG + 10 +26740.0 + 20 +9250.0 + 30 +0.0 + 0 +SEQEND + 5 +3637 + 8 +DAEMMUNG + 0 +POLYLINE + 5 +302A + 8 +DAEMMUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3638 + 8 +DAEMMUNG + 10 +26740.0 + 20 +11990.0 + 30 +0.0 + 0 +VERTEX + 5 +3639 + 8 +DAEMMUNG + 10 +26820.0 + 20 +11990.0 + 30 +0.0 + 0 +VERTEX + 5 +363A + 8 +DAEMMUNG + 10 +26820.0 + 20 +17751.25 + 30 +0.0 + 0 +VERTEX + 5 +363B + 8 +DAEMMUNG + 10 +26740.0 + 20 +17751.25 + 30 +0.0 + 0 +SEQEND + 5 +363C + 8 +DAEMMUNG + 0 +POLYLINE + 5 +3030 + 8 +DAEMMUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +363D + 8 +DAEMMUNG + 10 +26820.0 + 20 +22195.0 + 30 +0.0 + 0 +VERTEX + 5 +363E + 8 +DAEMMUNG + 10 +26820.0 + 20 +18443.75 + 30 +0.0 + 0 +VERTEX + 5 +363F + 8 +DAEMMUNG + 10 +26820.0 + 20 +18363.75 + 30 +0.0 + 0 +VERTEX + 5 +3640 + 8 +DAEMMUNG + 10 +26740.0 + 20 +18363.75 + 30 +0.0 + 0 +VERTEX + 5 +3641 + 8 +DAEMMUNG + 10 +26740.0 + 20 +22115.0 + 30 +0.0 + 0 +VERTEX + 5 +3642 + 8 +DAEMMUNG + 10 +25238.75 + 20 +22115.0 + 30 +0.0 + 0 +VERTEX + 5 +3643 + 8 +DAEMMUNG + 10 +25238.75 + 20 +22195.0 + 30 +0.0 + 0 +SEQEND + 5 +3644 + 8 +DAEMMUNG + 0 +POLYLINE + 5 +3039 + 8 +DAEMMUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3645 + 8 +DAEMMUNG + 10 +4920.0 + 20 +22195.0 + 30 +0.0 + 0 +VERTEX + 5 +3646 + 8 +DAEMMUNG + 10 +4920.0 + 20 +19443.75 + 30 +0.0 + 0 +VERTEX + 5 +3647 + 8 +DAEMMUNG + 10 +4920.0 + 20 +19363.75 + 30 +0.0 + 0 +VERTEX + 5 +3648 + 8 +DAEMMUNG + 10 +5000.0 + 20 +19363.75 + 30 +0.0 + 0 +VERTEX + 5 +3649 + 8 +DAEMMUNG + 10 +5000.0 + 20 +22115.0 + 30 +0.0 + 0 +VERTEX + 5 +364A + 8 +DAEMMUNG + 10 +6751.25 + 20 +22115.0 + 30 +0.0 + 0 +VERTEX + 5 +364B + 8 +DAEMMUNG + 10 +6751.25 + 20 +22195.0 + 30 +0.0 + 0 +SEQEND + 5 +364C + 8 +DAEMMUNG + 0 +POLYLINE + 5 +3042 + 8 +DAEMMUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +364D + 8 +DAEMMUNG + 10 +8488.75 + 20 +22115.0 + 30 +0.0 + 0 +VERTEX + 5 +364E + 8 +DAEMMUNG + 10 +8488.75 + 20 +22195.0 + 30 +0.0 + 0 +VERTEX + 5 +364F + 8 +DAEMMUNG + 10 +10251.25 + 20 +22195.0 + 30 +0.0 + 0 +VERTEX + 5 +3650 + 8 +DAEMMUNG + 10 +10251.25 + 20 +22115.0 + 30 +0.0 + 0 +SEQEND + 5 +3651 + 8 +DAEMMUNG + 0 +POLYLINE + 5 +3048 + 8 +DAEMMUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3652 + 8 +DAEMMUNG + 10 +11238.75 + 20 +22115.0 + 30 +0.0 + 0 +VERTEX + 5 +3653 + 8 +DAEMMUNG + 10 +11238.75 + 20 +22195.0 + 30 +0.0 + 0 +VERTEX + 5 +3654 + 8 +DAEMMUNG + 10 +15876.25 + 20 +22195.0 + 30 +0.0 + 0 +VERTEX + 5 +3655 + 8 +DAEMMUNG + 10 +15876.25 + 20 +22115.0 + 30 +0.0 + 0 +SEQEND + 5 +3656 + 8 +DAEMMUNG + 0 +POLYLINE + 5 +304E + 8 +DAEMMUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3657 + 8 +DAEMMUNG + 10 +16863.75 + 20 +22115.0 + 30 +0.0 + 0 +VERTEX + 5 +3658 + 8 +DAEMMUNG + 10 +16863.75 + 20 +22195.0 + 30 +0.0 + 0 +VERTEX + 5 +3659 + 8 +DAEMMUNG + 10 +18751.25 + 20 +22195.0 + 30 +0.0 + 0 +VERTEX + 5 +365A + 8 +DAEMMUNG + 10 +18751.25 + 20 +22115.0 + 30 +0.0 + 0 +SEQEND + 5 +365B + 8 +DAEMMUNG + 0 +POLYLINE + 5 +3054 + 8 +DAEMMUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +365C + 8 +DAEMMUNG + 10 +19738.25 + 20 +22115.0 + 30 +0.0 + 0 +VERTEX + 5 +365D + 8 +DAEMMUNG + 10 +19738.25 + 20 +22195.0 + 30 +0.0 + 0 +VERTEX + 5 +365E + 8 +DAEMMUNG + 10 +23375.75 + 20 +22195.0 + 30 +0.0 + 0 +VERTEX + 5 +365F + 8 +DAEMMUNG + 10 +23375.75 + 20 +22115.0 + 30 +0.0 + 0 +SEQEND + 5 +3660 + 8 +DAEMMUNG + 0 +POLYLINE + 5 +305A + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3661 + 8 +FENSTER + 10 +6740.0 + 20 +22381.250308 + 30 +0.0 + 0 +VERTEX + 5 +3662 + 8 +FENSTER + 10 +8505.0 + 20 +22381.250308 + 30 +0.0 + 0 +SEQEND + 5 +3663 + 8 +FENSTER + 0 +POLYLINE + 5 +305E + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3664 + 8 +FENSTER + 10 +4733.794186 + 20 +19390.0 + 30 +0.0 + 0 +VERTEX + 5 +3665 + 8 +FENSTER + 10 +4733.794186 + 20 +18230.0 + 30 +0.0 + 0 +SEQEND + 5 +3666 + 8 +FENSTER + 0 +POLYLINE + 5 +3062 + 8 +DAEMMUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3667 + 8 +DAEMMUNG + 10 +4920.0 + 20 +16113.75 + 30 +0.0 + 0 +VERTEX + 5 +3668 + 8 +DAEMMUNG + 10 +5000.0 + 20 +16113.75 + 30 +0.0 + 0 +VERTEX + 5 +3669 + 8 +DAEMMUNG + 10 +5000.0 + 20 +18251.25 + 30 +0.0 + 0 +VERTEX + 5 +366A + 8 +DAEMMUNG + 10 +4920.0 + 20 +18251.25 + 30 +0.0 + 0 +SEQEND + 5 +366B + 8 +DAEMMUNG + 0 +POLYLINE + 5 +3068 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +366C + 8 +FENSTER + 10 +4860.00225 + 20 +18251.100556 + 30 +0.0 + 0 +VERTEX + 5 +366D + 8 +FENSTER + 10 +4923.297336 + 20 +18251.100556 + 30 +0.0 + 0 +SEQEND + 5 +366E + 8 +FENSTER + 0 +POLYLINE + 5 +306C + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +366F + 8 +FENSTER + 10 +4733.493167 + 20 +16130.0 + 30 +0.0 + 0 +VERTEX + 5 +3670 + 8 +FENSTER + 10 +4733.493167 + 20 +14615.0 + 30 +0.0 + 0 +SEQEND + 5 +3671 + 8 +FENSTER + 0 +POLYLINE + 5 +3070 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +3672 + 8 +FENSTER + 10 +4853.742083 + 20 +16125.0 + 30 +0.0 + 0 +VERTEX + 5 +3673 + 8 +FENSTER + 10 +5030.0 + 20 +16125.0 + 30 +0.0 + 0 +SEQEND + 5 +3674 + 8 +FENSTER + 0 +POLYLINE + 5 +3074 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +3675 + 8 +FENSTER + 10 +4859.902627 + 20 +14615.0 + 30 +0.0 + 0 +VERTEX + 5 +3676 + 8 +FENSTER + 10 +5020.0 + 20 +14615.0 + 30 +0.0 + 0 +SEQEND + 5 +3677 + 8 +FENSTER + 0 +POLYLINE + 5 +3078 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3678 + 8 +FENSTER + 10 +7730.0 + 20 +8981.423634 + 30 +0.0 + 0 +VERTEX + 5 +3679 + 8 +FENSTER + 10 +8755.0 + 20 +8981.423634 + 30 +0.0 + 0 +SEQEND + 5 +367A + 8 +FENSTER + 0 +POLYLINE + 5 +307C + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +367B + 8 +FENSTER + 10 +7740.0 + 20 +9111.199371 + 30 +0.0 + 0 +VERTEX + 5 +367C + 8 +FENSTER + 10 +7740.0 + 20 +9285.0 + 30 +0.0 + 0 +SEQEND + 5 +367D + 8 +FENSTER + 0 +POLYLINE + 5 +3080 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +367E + 8 +FENSTER + 10 +8750.0 + 20 +9060.0 + 30 +0.0 + 0 +VERTEX + 5 +367F + 8 +FENSTER + 10 +8750.0 + 20 +9280.0 + 30 +0.0 + 0 +SEQEND + 5 +3680 + 8 +FENSTER + 0 +POLYLINE + 5 +3084 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3681 + 8 +FENSTER + 10 +9865.0 + 20 +8984.334044 + 30 +0.0 + 0 +VERTEX + 5 +3682 + 8 +FENSTER + 10 +11260.0 + 20 +8984.334044 + 30 +0.0 + 0 +SEQEND + 5 +3683 + 8 +FENSTER + 0 +POLYLINE + 5 +3088 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +3684 + 8 +FENSTER + 10 +9865.0 + 20 +9295.0 + 30 +0.0 + 0 +VERTEX + 5 +3685 + 8 +FENSTER + 10 +9865.0 + 20 +9075.0 + 30 +0.0 + 0 +SEQEND + 5 +3686 + 8 +FENSTER + 0 +POLYLINE + 5 +308C + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +3687 + 8 +FENSTER + 10 +11250.0 + 20 +9350.0 + 30 +0.0 + 0 +VERTEX + 5 +3688 + 8 +FENSTER + 10 +11250.0 + 20 +9075.0 + 30 +0.0 + 0 +SEQEND + 5 +3689 + 8 +FENSTER + 0 +POLYLINE + 5 +3090 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +368A + 8 +FENSTER + 10 +16110.0 + 20 +8983.714374 + 30 +0.0 + 0 +VERTEX + 5 +368B + 8 +FENSTER + 10 +17380.0 + 20 +8983.714374 + 30 +0.0 + 0 +SEQEND + 5 +368C + 8 +FENSTER + 0 +POLYLINE + 5 +3094 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +368D + 8 +FENSTER + 10 +16115.0 + 20 +9310.0 + 30 +0.0 + 0 +VERTEX + 5 +368E + 8 +FENSTER + 10 +16115.0 + 20 +9087.237065 + 30 +0.0 + 0 +SEQEND + 5 +368F + 8 +FENSTER + 0 +POLYLINE + 5 +3098 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +3690 + 8 +FENSTER + 10 +17375.0 + 20 +9315.0 + 30 +0.0 + 0 +VERTEX + 5 +3691 + 8 +FENSTER + 10 +17375.0 + 20 +9110.026403 + 30 +0.0 + 0 +SEQEND + 5 +3692 + 8 +FENSTER + 0 +POLYLINE + 5 +309C + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3693 + 8 +FENSTER + 10 +18480.0 + 20 +8983.742222 + 30 +0.0 + 0 +VERTEX + 5 +3694 + 8 +FENSTER + 10 +20380.0 + 20 +8983.742222 + 30 +0.0 + 0 +SEQEND + 5 +3695 + 8 +FENSTER + 0 +POLYLINE + 5 +30A0 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +3696 + 8 +FENSTER + 10 +20375.0 + 20 +9280.0 + 30 +0.0 + 0 +VERTEX + 5 +3697 + 8 +FENSTER + 10 +20375.0 + 20 +9119.145747 + 30 +0.0 + 0 +SEQEND + 5 +3698 + 8 +FENSTER + 0 +POLYLINE + 5 +30A4 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +3699 + 8 +FENSTER + 10 +18490.0 + 20 +9320.0 + 30 +0.0 + 0 +VERTEX + 5 +369A + 8 +FENSTER + 10 +18490.0 + 20 +9122.747675 + 30 +0.0 + 0 +SEQEND + 5 +369B + 8 +FENSTER + 0 +POLYLINE + 5 +30A8 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +369C + 8 +FENSTER + 10 +21360.0 + 20 +8983.47638 + 30 +0.0 + 0 +VERTEX + 5 +369D + 8 +FENSTER + 10 +21875.0 + 20 +8983.47638 + 30 +0.0 + 0 +SEQEND + 5 +369E + 8 +FENSTER + 0 +POLYLINE + 5 +30AC + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +369F + 8 +FENSTER + 10 +21365.0 + 20 +9305.0 + 30 +0.0 + 0 +VERTEX + 5 +36A0 + 8 +FENSTER + 10 +21365.0 + 20 +9103.889231 + 30 +0.0 + 0 +SEQEND + 5 +36A1 + 8 +FENSTER + 0 +POLYLINE + 5 +30B0 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +36A2 + 8 +FENSTER + 10 +21875.0 + 20 +9300.0 + 30 +0.0 + 0 +VERTEX + 5 +36A3 + 8 +FENSTER + 10 +21875.0 + 20 +9108.078478 + 30 +0.0 + 0 +SEQEND + 5 +36A4 + 8 +FENSTER + 0 +POLYLINE + 5 +30B4 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +36A5 + 8 +FENSTER + 10 +23240.0 + 20 +9275.0 + 30 +0.0 + 0 +VERTEX + 5 +36A6 + 8 +FENSTER + 10 +23240.0 + 20 +9088.71261 + 30 +0.0 + 0 +SEQEND + 5 +36A7 + 8 +FENSTER + 0 +POLYLINE + 5 +30B8 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +36A8 + 8 +FENSTER + 10 +25375.0 + 20 +9295.0 + 30 +0.0 + 0 +VERTEX + 5 +36A9 + 8 +FENSTER + 10 +25375.0 + 20 +9081.046908 + 30 +0.0 + 0 +SEQEND + 5 +36AA + 8 +FENSTER + 0 +POLYLINE + 5 +30BC + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +36AB + 8 +FENSTER + 10 +23231.732275 + 20 +8983.756213 + 30 +0.0 + 0 +VERTEX + 5 +36AC + 8 +FENSTER + 10 +25366.732275 + 20 +8983.756213 + 30 +0.0 + 0 +SEQEND + 5 +36AD + 8 +FENSTER + 0 +POLYLINE + 5 +30C0 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +36AE + 8 +FENSTER + 10 +27006.25051 + 20 +12010.0 + 30 +0.0 + 0 +VERTEX + 5 +36AF + 8 +FENSTER + 10 +27006.25051 + 20 +10355.0 + 30 +0.0 + 0 +SEQEND + 5 +36B0 + 8 +FENSTER + 0 +POLYLINE + 5 +30C4 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +36B1 + 8 +FENSTER + 10 +26725.965803 + 20 +11999.707383 + 30 +0.0 + 0 +VERTEX + 5 +36B2 + 8 +FENSTER + 10 +26879.383708 + 20 +11999.707383 + 30 +0.0 + 0 +SEQEND + 5 +36B3 + 8 +FENSTER + 0 +POLYLINE + 5 +30C8 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +36B4 + 8 +FENSTER + 10 +26740.0 + 20 +10365.0 + 30 +0.0 + 0 +VERTEX + 5 +36B5 + 8 +FENSTER + 10 +26883.826117 + 20 +10365.0 + 30 +0.0 + 0 +SEQEND + 5 +36B6 + 8 +FENSTER + 0 +POLYLINE + 5 +30CC + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +36B7 + 8 +FENSTER + 10 +27006.264517 + 20 +18380.0 + 30 +0.0 + 0 +VERTEX + 5 +36B8 + 8 +FENSTER + 10 +27006.264517 + 20 +17720.0 + 30 +0.0 + 0 +SEQEND + 5 +36B9 + 8 +FENSTER + 0 +POLYLINE + 5 +30D0 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +36BA + 8 +FENSTER + 10 +26717.517718 + 20 +18375.099979 + 30 +0.0 + 0 +VERTEX + 5 +36BB + 8 +FENSTER + 10 +26865.113764 + 20 +18375.0 + 30 +0.0 + 0 +SEQEND + 5 +36BC + 8 +FENSTER + 0 +POLYLINE + 5 +30D4 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +36BD + 8 +FENSTER + 10 +26700.0 + 20 +17740.0 + 30 +0.0 + 0 +VERTEX + 5 +36BE + 8 +FENSTER + 10 +26875.171862 + 20 +17740.0 + 30 +0.0 + 0 +SEQEND + 5 +36BF + 8 +FENSTER + 0 +POLYLINE + 5 +30D8 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +36C0 + 8 +FENSTER + 10 +25250.0 + 20 +22261.196616 + 30 +0.0 + 0 +VERTEX + 5 +36C1 + 8 +FENSTER + 10 +25250.0 + 20 +22085.0 + 30 +0.0 + 0 +SEQEND + 5 +36C2 + 8 +FENSTER + 0 +POLYLINE + 5 +30DC + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +36C3 + 8 +FENSTER + 10 +23365.0 + 20 +22381.256088 + 30 +0.0 + 0 +VERTEX + 5 +36C4 + 8 +FENSTER + 10 +25255.0 + 20 +22381.256088 + 30 +0.0 + 0 +SEQEND + 5 +36C5 + 8 +FENSTER + 0 +POLYLINE + 5 +30E0 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +36C6 + 8 +FENSTER + 10 +23365.0 + 20 +22100.0 + 30 +0.0 + 0 +VERTEX + 5 +36C7 + 8 +FENSTER + 10 +23365.0 + 20 +22245.591735 + 30 +0.0 + 0 +SEQEND + 5 +36C8 + 8 +FENSTER + 0 +POLYLINE + 5 +30E4 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +36C9 + 8 +FENSTER + 10 +18740.0 + 20 +22381.306986 + 30 +0.0 + 0 +VERTEX + 5 +36CA + 8 +FENSTER + 10 +19750.0 + 20 +22381.306986 + 30 +0.0 + 0 +SEQEND + 5 +36CB + 8 +FENSTER + 0 +POLYLINE + 5 +30E8 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +36CC + 8 +FENSTER + 10 +19750.0 + 20 +22261.364123 + 30 +0.0 + 0 +VERTEX + 5 +36CD + 8 +FENSTER + 10 +19750.0 + 20 +22085.0 + 30 +0.0 + 0 +SEQEND + 5 +36CE + 8 +FENSTER + 0 +POLYLINE + 5 +30EC + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +36CF + 8 +FENSTER + 10 +18740.0 + 20 +22095.0 + 30 +0.0 + 0 +VERTEX + 5 +36D0 + 8 +FENSTER + 10 +18740.0 + 20 +22260.16654 + 30 +0.0 + 0 +SEQEND + 5 +36D1 + 8 +FENSTER + 0 +POLYLINE + 5 +30F0 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +36D2 + 8 +FENSTER + 10 +15865.0 + 20 +22381.251394 + 30 +0.0 + 0 +VERTEX + 5 +36D3 + 8 +FENSTER + 10 +16880.0 + 20 +22381.251394 + 30 +0.0 + 0 +SEQEND + 5 +36D4 + 8 +FENSTER + 0 +POLYLINE + 5 +30F4 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +36D5 + 8 +FENSTER + 10 +16875.0 + 20 +22253.739829 + 30 +0.0 + 0 +VERTEX + 5 +36D6 + 8 +FENSTER + 10 +16875.0 + 20 +22090.0 + 30 +0.0 + 0 +SEQEND + 5 +36D7 + 8 +FENSTER + 0 +POLYLINE + 5 +30F8 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +36D8 + 8 +FENSTER + 10 +15865.0 + 20 +22243.287727 + 30 +0.0 + 0 +VERTEX + 5 +36D9 + 8 +FENSTER + 10 +15865.0 + 20 +22080.0 + 30 +0.0 + 0 +SEQEND + 5 +36DA + 8 +FENSTER + 0 +POLYLINE + 5 +30FC + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +36DB + 8 +FENSTER + 10 +10240.0 + 20 +22381.250977 + 30 +0.0 + 0 +VERTEX + 5 +36DC + 8 +FENSTER + 10 +11250.0 + 20 +22381.250977 + 30 +0.0 + 0 +SEQEND + 5 +36DD + 8 +FENSTER + 0 +POLYLINE + 5 +3100 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +36DE + 8 +FENSTER + 10 +11250.025952 + 20 +22080.0 + 30 +0.0 + 0 +VERTEX + 5 +36DF + 8 +FENSTER + 10 +11250.0 + 20 +22247.225609 + 30 +0.0 + 0 +SEQEND + 5 +36E0 + 8 +FENSTER + 0 +POLYLINE + 5 +3104 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +36E1 + 8 +FENSTER + 10 +10240.0 + 20 +22080.0 + 30 +0.0 + 0 +VERTEX + 5 +36E2 + 8 +FENSTER + 10 +10240.0 + 20 +22243.476199 + 30 +0.0 + 0 +SEQEND + 5 +36E3 + 8 +FENSTER + 0 +POLYLINE + 5 +3108 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +36E4 + 8 +FENSTER + 10 +8500.0 + 20 +22252.650614 + 30 +0.0 + 0 +VERTEX + 5 +36E5 + 8 +FENSTER + 10 +8500.0 + 20 +22090.0 + 30 +0.0 + 0 +SEQEND + 5 +36E6 + 8 +FENSTER + 0 +POLYLINE + 5 +310C + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +36E7 + 8 +FENSTER + 10 +6740.0 + 20 +22243.580917 + 30 +0.0 + 0 +VERTEX + 5 +36E8 + 8 +FENSTER + 10 +6740.0 + 20 +22085.0 + 30 +0.0 + 0 +SEQEND + 5 +36E9 + 8 +FENSTER + 0 +POLYLINE + 5 +3110 + 8 +FENSTER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +36EA + 8 +FENSTER + 10 +4867.826474 + 20 +19363.745737 + 30 +0.0 + 0 +VERTEX + 5 +36EB + 8 +FENSTER + 10 +4932.844101 + 20 +19363.745737 + 30 +0.0 + 0 +SEQEND + 5 +36EC + 8 +FENSTER + 0 +POLYLINE + 5 +3114 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +36ED + 8 +MAUERWERK + 10 +21365.0 + 20 +15625.0 + 30 +0.0 + 0 +VERTEX + 5 +36EE + 8 +MAUERWERK + 10 +21365.0 + 20 +15990.0 + 30 +0.0 + 0 +VERTEX + 5 +36EF + 8 +MAUERWERK + 10 +17990.0 + 20 +15990.0 + 30 +0.0 + 0 +VERTEX + 5 +36F0 + 8 +MAUERWERK + 10 +17990.0 + 20 +18988.024968 + 30 +0.0 + 0 +SEQEND + 5 +36F1 + 8 +MAUERWERK + 0 +POLYLINE + 5 +311A + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +36F2 + 8 +MAUERWERK + 10 +17625.0 + 20 +18992.018547 + 30 +0.0 + 0 +VERTEX + 5 +36F3 + 8 +MAUERWERK + 10 +17625.0 + 20 +15990.0 + 30 +0.0 + 0 +VERTEX + 5 +36F4 + 8 +MAUERWERK + 10 +17375.0 + 20 +15990.0 + 30 +0.0 + 0 +VERTEX + 5 +36F5 + 8 +MAUERWERK + 10 +17375.0 + 20 +15625.0 + 30 +0.0 + 0 +VERTEX + 5 +36F6 + 8 +MAUERWERK + 10 +20875.0 + 20 +15625.0 + 30 +0.0 + 0 +VERTEX + 5 +36F7 + 8 +MAUERWERK + 10 +20875.0 + 20 +15250.0 + 30 +0.0 + 0 +VERTEX + 5 +36F8 + 8 +MAUERWERK + 10 +21240.0 + 20 +15250.0 + 30 +0.0 + 0 +VERTEX + 5 +36F9 + 8 +MAUERWERK + 10 +21240.0 + 20 +15625.0 + 30 +0.0 + 0 +VERTEX + 5 +36FA + 8 +MAUERWERK + 10 +21365.0 + 20 +15625.0 + 30 +0.0 + 0 +SEQEND + 5 +36FB + 8 +MAUERWERK + 0 +POLYLINE + 5 +3125 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +36FC + 8 +MAUERWERK + 10 +18740.0 + 20 +21750.0 + 30 +0.0 + 0 +VERTEX + 5 +36FD + 8 +MAUERWERK + 10 +18740.0 + 20 +22115.0 + 30 +0.0 + 0 +VERTEX + 5 +36FE + 8 +MAUERWERK + 10 +16875.0 + 20 +22115.0 + 30 +0.0 + 0 +VERTEX + 5 +36FF + 8 +MAUERWERK + 10 +16875.0 + 20 +21750.0 + 30 +0.0 + 0 +VERTEX + 5 +3700 + 8 +MAUERWERK + 10 +17625.0 + 20 +21750.0 + 30 +0.0 + 0 +VERTEX + 5 +3701 + 8 +MAUERWERK + 10 +17625.0 + 20 +18990.0 + 30 +0.0 + 0 +SEQEND + 5 +3702 + 8 +MAUERWERK + 0 +POLYLINE + 5 +312D + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +3703 + 8 +MAUERWERK + 10 +17990.0 + 20 +18990.0 + 30 +0.0 + 0 +VERTEX + 5 +3704 + 8 +MAUERWERK + 10 +17990.0 + 20 +21750.0 + 30 +0.0 + 0 +VERTEX + 5 +3705 + 8 +MAUERWERK + 10 +18740.0 + 20 +21750.0 + 30 +0.0 + 0 +SEQEND + 5 +3706 + 8 +MAUERWERK + 0 +POLYLINE + 5 +3132 + 8 +SCHORNSTEINE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3707 + 8 +SCHORNSTEINE + 10 +17875.0 + 20 +18865.0 + 30 +0.0 + 0 +VERTEX + 5 +3708 + 8 +SCHORNSTEINE + 10 +17740.0 + 20 +18865.0 + 30 +0.0 + 0 +VERTEX + 5 +3709 + 8 +SCHORNSTEINE + 10 +17740.0 + 20 +18730.0 + 30 +0.0 + 0 +VERTEX + 5 +370A + 8 +SCHORNSTEINE + 10 +17875.0 + 20 +18730.0 + 30 +0.0 + 0 +SEQEND + 5 +370B + 8 +SCHORNSTEINE + 0 +POLYLINE + 5 +3138 + 8 +SCHORNSTEINE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +370C + 8 +SCHORNSTEINE + 10 +17875.0 + 20 +18615.0 + 30 +0.0 + 0 +VERTEX + 5 +370D + 8 +SCHORNSTEINE + 10 +17740.0 + 20 +18615.0 + 30 +0.0 + 0 +VERTEX + 5 +370E + 8 +SCHORNSTEINE + 10 +17740.0 + 20 +18480.0 + 30 +0.0 + 0 +VERTEX + 5 +370F + 8 +SCHORNSTEINE + 10 +17875.0 + 20 +18480.0 + 30 +0.0 + 0 +SEQEND + 5 +3710 + 8 +SCHORNSTEINE + 0 +POLYLINE + 5 +313E + 8 +SCHORNSTEINE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3711 + 8 +SCHORNSTEINE + 10 +17875.0 + 20 +18240.0 + 30 +0.0 + 0 +VERTEX + 5 +3712 + 8 +SCHORNSTEINE + 10 +17740.0 + 20 +18240.0 + 30 +0.0 + 0 +VERTEX + 5 +3713 + 8 +SCHORNSTEINE + 10 +17740.0 + 20 +18105.0 + 30 +0.0 + 0 +VERTEX + 5 +3714 + 8 +SCHORNSTEINE + 10 +17875.0 + 20 +18105.0 + 30 +0.0 + 0 +SEQEND + 5 +3715 + 8 +SCHORNSTEINE + 0 +POLYLINE + 5 +3144 + 8 +SCHORNSTEINE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3716 + 8 +SCHORNSTEINE + 10 +17875.0 + 20 +17990.0 + 30 +0.0 + 0 +VERTEX + 5 +3717 + 8 +SCHORNSTEINE + 10 +17740.0 + 20 +17990.0 + 30 +0.0 + 0 +VERTEX + 5 +3718 + 8 +SCHORNSTEINE + 10 +17740.0 + 20 +17855.0 + 30 +0.0 + 0 +VERTEX + 5 +3719 + 8 +SCHORNSTEINE + 10 +17875.0 + 20 +17855.0 + 30 +0.0 + 0 +SEQEND + 5 +371A + 8 +SCHORNSTEINE + 0 +POLYLINE + 5 +314A + 8 +SCHORNSTEINE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +371B + 8 +SCHORNSTEINE + 10 +17875.0 + 20 +17740.0 + 30 +0.0 + 0 +VERTEX + 5 +371C + 8 +SCHORNSTEINE + 10 +17740.0 + 20 +17740.0 + 30 +0.0 + 0 +VERTEX + 5 +371D + 8 +SCHORNSTEINE + 10 +17740.0 + 20 +17605.0 + 30 +0.0 + 0 +VERTEX + 5 +371E + 8 +SCHORNSTEINE + 10 +17875.0 + 20 +17605.0 + 30 +0.0 + 0 +SEQEND + 5 +371F + 8 +SCHORNSTEINE + 0 +INSERT + 5 +3150 + 8 +SCHRAFFUR-MAUER + 2 +*X0 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +2000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +3151 + 8 +SCHRAFFUR-MAUER + 2 +*X1 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +2000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +3152 + 8 +SCHRAFFUR-MAUER + 2 +*X2 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +2000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +3153 + 8 +SCHRAFFUR-MAUER + 2 +*X3 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +2000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +3154 + 8 +SCHRAFFUR-MAUER + 2 +*X4 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +2000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +3155 + 8 +SCHRAFFUR-MAUER + 2 +*X5 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +2000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +3156 + 8 +SCHRAFFUR-MAUER + 2 +*X6 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +2000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +3157 + 8 +SCHRAFFUR-MAUER + 2 +*X7 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +2000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +3158 + 8 +SCHRAFFUR-MAUER + 2 +*X8 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +2000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +3159 + 8 +SCHRAFFUR-MAUER + 2 +*X9 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +2000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +315A + 8 +SCHRAFFUR-MAUER + 2 +*X10 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +2000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +315B + 8 +SCHRAFFUR-MAUER + 2 +*X11 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +2000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +315C + 8 +SCHRAFFUR-MAUER + 2 +*X12 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +2000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +315D + 8 +SCHRAFFUR-MAUER + 2 +*X13 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +2000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +315E + 8 +SCHRAFFUR-MAUER + 2 +*X14 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +2000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +315F + 8 +SCHRAFFUR-VORMAUER + 2 +*X15 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +1000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +3160 + 8 +SCHRAFFUR-VORMAUER + 2 +*X16 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +1000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +3161 + 8 +SCHRAFFUR-VORMAUER + 2 +*X17 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +1000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +3162 + 8 +SCHRAFFUR-VORMAUER + 2 +*X18 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +1000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +3163 + 8 +SCHRAFFUR-VORMAUER + 2 +*X19 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +1000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +3164 + 8 +SCHRAFFUR-VORMAUER + 2 +*X20 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +1000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +3165 + 8 +SCHRAFFUR-VORMAUER + 2 +*X21 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +1000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +3166 + 8 +SCHRAFFUR-VORMAUER + 2 +*X22 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +1000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +3167 + 8 +SCHRAFFUR-VORMAUER + 2 +*X23 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +1000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +3168 + 8 +SCHRAFFUR-VORMAUER + 2 +*X24 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +1000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +3169 + 8 +SCHRAFFUR-VORMAUER + 2 +*X25 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +1000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +316A + 8 +SCHRAFFUR-VORMAUER + 2 +*X26 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +1000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +316B + 8 +SCHRAFFUR-VORMAUER + 2 +*X27 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +1000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +316C + 8 +SCHRAFFUR-VORMAUER + 2 +*X28 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +1000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +316D + 8 +SCHRAFFUR-VORMAUER + 2 +*X29 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +1000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +316E + 8 +SCHRAFFUR-TRENNWAND + 2 +*X30 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI37,I +1040 +1000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +316F + 8 +SCHRAFFUR-TRENNWAND + 2 +*X31 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI37,I +1040 +1000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +3170 + 8 +SCHRAFFUR-TRENNWAND + 2 +*X32 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI37,I +1040 +1000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +3171 + 8 +SCHRAFFUR-TRENNWAND + 2 +*X33 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI37,I +1040 +1000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +3172 + 8 +SCHRAFFUR-TRENNWAND + 2 +*X34 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI37,I +1040 +1000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +3173 + 8 +SCHRAFFUR-TRENNWAND + 2 +*X35 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI37,I +1040 +1000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +3174 + 8 +SCHRAFFUR-TRENNWAND + 2 +*X36 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI37,I +1040 +1000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +3175 + 8 +SCHRAFFUR-TRENNWAND + 2 +*X37 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI37,I +1040 +1000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +3176 + 8 +SCHRAFFUR-TRENNWAND + 2 +*X38 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI37,I +1040 +1000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +3177 + 8 +SCHRAFFUR-DAEMMUNG + 2 +*X39 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +HONEY,I +1040 +200.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +3178 + 8 +SCHRAFFUR-DAEMMUNG + 2 +*X40 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +HONEY,I +1040 +200.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +3179 + 8 +SCHRAFFUR-DAEMMUNG + 2 +*X41 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +HONEY,I +1040 +200.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +317A + 8 +SCHRAFFUR-DAEMMUNG + 2 +*X42 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +HONEY,I +1040 +200.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +317B + 8 +SCHRAFFUR-DAEMMUNG + 2 +*X43 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +HONEY,I +1040 +200.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +317C + 8 +SCHRAFFUR-DAEMMUNG + 2 +*X44 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +HONEY,I +1040 +200.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +317D + 8 +SCHRAFFUR-DAEMMUNG + 2 +*X45 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +HONEY,I +1040 +200.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +317E + 8 +SCHRAFFUR-DAEMMUNG + 2 +*X46 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +HONEY,I +1040 +200.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +317F + 8 +SCHRAFFUR-DAEMMUNG + 2 +*X47 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +HONEY,I +1040 +200.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +3180 + 8 +SCHRAFFUR-DAEMMUNG + 2 +*X48 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +HONEY,I +1040 +200.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +3181 + 8 +SCHRAFFUR-DAEMMUNG + 2 +*X49 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +HONEY,I +1040 +200.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +3182 + 8 +SCHRAFFUR-DAEMMUNG + 2 +*X50 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +HONEY,I +1040 +200.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +3183 + 8 +SCHRAFFUR-DAEMMUNG + 2 +*X51 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +HONEY,I +1040 +200.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +3184 + 8 +SCHRAFFUR-DAEMMUNG + 2 +*X52 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +HONEY,I +1040 +200.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +3185 + 8 +SCHRAFFUR-DAEMMUNG + 2 +*X53 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +HONEY,I +1040 +200.0 +1040 +0.0 +1002 +} + 0 +POLYLINE + 5 +3186 + 8 +TREPPE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3720 + 8 +TREPPE + 10 +19380.0 + 20 +10855.0 + 30 +0.0 + 0 +VERTEX + 5 +3721 + 8 +TREPPE + 10 +19380.0 + 20 +13865.0 + 30 +0.0 + 0 +VERTEX + 5 +3722 + 8 +TREPPE + 10 +18040.0 + 20 +13865.0 + 30 +0.0 + 0 +VERTEX + 5 +3723 + 8 +TREPPE + 10 +18040.0 + 20 +10855.0 + 30 +0.0 + 0 +SEQEND + 5 +3724 + 8 +TREPPE + 0 +POLYLINE + 5 +318C + 8 +TREPPE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3725 + 8 +TREPPE + 10 +20825.0 + 20 +11156.0 + 30 +0.0 + 0 +VERTEX + 5 +3726 + 8 +TREPPE + 10 +19485.0 + 20 +11156.0 + 30 +0.0 + 0 +SEQEND + 5 +3727 + 8 +TREPPE + 0 +POLYLINE + 5 +3190 + 8 +TREPPE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3728 + 8 +TREPPE + 10 +19380.0 + 20 +11156.0 + 30 +0.0 + 0 +VERTEX + 5 +3729 + 8 +TREPPE + 10 +18040.0 + 20 +11156.0 + 30 +0.0 + 0 +SEQEND + 5 +372A + 8 +TREPPE + 0 +POLYLINE + 5 +3194 + 8 +TREPPE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +372B + 8 +TREPPE + 10 +19380.0 + 20 +11457.0 + 30 +0.0 + 0 +VERTEX + 5 +372C + 8 +TREPPE + 10 +18040.0 + 20 +11457.0 + 30 +0.0 + 0 +SEQEND + 5 +372D + 8 +TREPPE + 0 +POLYLINE + 5 +3198 + 8 +TREPPE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +372E + 8 +TREPPE + 10 +19380.0 + 20 +11758.0 + 30 +0.0 + 0 +VERTEX + 5 +372F + 8 +TREPPE + 10 +18040.0 + 20 +11758.0 + 30 +0.0 + 0 +SEQEND + 5 +3730 + 8 +TREPPE + 0 +POLYLINE + 5 +319C + 8 +TREPPE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3731 + 8 +TREPPE + 10 +19380.0 + 20 +12059.0 + 30 +0.0 + 0 +VERTEX + 5 +3732 + 8 +TREPPE + 10 +18040.0 + 20 +12059.0 + 30 +0.0 + 0 +SEQEND + 5 +3733 + 8 +TREPPE + 0 +POLYLINE + 5 +31A0 + 8 +TREPPE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3734 + 8 +TREPPE + 10 +19380.0 + 20 +12360.0 + 30 +0.0 + 0 +VERTEX + 5 +3735 + 8 +TREPPE + 10 +18040.0 + 20 +12360.0 + 30 +0.0 + 0 +SEQEND + 5 +3736 + 8 +TREPPE + 0 +POLYLINE + 5 +31A4 + 8 +TREPPE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +3737 + 8 +TREPPE + 10 +19380.0 + 20 +12661.0 + 30 +0.0 + 0 +VERTEX + 5 +3738 + 8 +TREPPE + 10 +18040.0 + 20 +12661.0 + 30 +0.0 + 0 +SEQEND + 5 +3739 + 8 +TREPPE + 0 +POLYLINE + 5 +31A8 + 8 +TREPPE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +373A + 8 +TREPPE + 10 +20825.0 + 20 +11457.0 + 30 +0.0 + 0 +VERTEX + 5 +373B + 8 +TREPPE + 10 +19485.0 + 20 +11457.0 + 30 +0.0 + 0 +SEQEND + 5 +373C + 8 +TREPPE + 0 +POLYLINE + 5 +31AC + 8 +TREPPE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +373D + 8 +TREPPE + 10 +19380.0 + 20 +12962.0 + 30 +0.0 + 0 +VERTEX + 5 +373E + 8 +TREPPE + 10 +18040.0 + 20 +12962.0 + 30 +0.0 + 0 +SEQEND + 5 +373F + 8 +TREPPE + 0 +POLYLINE + 5 +31B0 + 8 +TREPPE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +3740 + 8 +TREPPE + 10 +19380.0 + 20 +13263.0 + 30 +0.0 + 0 +VERTEX + 5 +3741 + 8 +TREPPE + 10 +18040.0 + 20 +13263.0 + 30 +0.0 + 0 +SEQEND + 5 +3742 + 8 +TREPPE + 0 +POLYLINE + 5 +31B4 + 8 +TREPPE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +3743 + 8 +TREPPE + 10 +19380.0 + 20 +13564.0 + 30 +0.0 + 0 +VERTEX + 5 +3744 + 8 +TREPPE + 10 +18040.0 + 20 +13564.0 + 30 +0.0 + 0 +SEQEND + 5 +3745 + 8 +TREPPE + 0 +POLYLINE + 5 +31B8 + 8 +TREPPE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3746 + 8 +TREPPE + 10 +20825.0 + 20 +13263.0 + 30 +0.0 + 0 +VERTEX + 5 +3747 + 8 +TREPPE + 10 +19485.0 + 20 +13263.0 + 30 +0.0 + 0 +SEQEND + 5 +3748 + 8 +TREPPE + 0 +POLYLINE + 5 +31BC + 8 +TREPPE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3749 + 8 +TREPPE + 10 +20825.0 + 20 +13564.0 + 30 +0.0 + 0 +VERTEX + 5 +374A + 8 +TREPPE + 10 +19485.0 + 20 +13564.0 + 30 +0.0 + 0 +SEQEND + 5 +374B + 8 +TREPPE + 0 +POLYLINE + 5 +31C0 + 8 +TREPPE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +374C + 8 +TREPPE + 10 +20826.354686 + 20 +12971.134203 + 30 +0.0 + 0 +VERTEX + 5 +374D + 8 +TREPPE + 10 +19481.657999 + 20 +11626.391689 + 30 +0.0 + 0 +SEQEND + 5 +374E + 8 +TREPPE + 0 +POLYLINE + 5 +31C4 + 8 +TREPPE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +374F + 8 +TREPPE + 10 +20827.970522 + 20 +12912.986847 + 30 +0.0 + 0 +VERTEX + 5 +3750 + 8 +TREPPE + 10 +19482.88825 + 20 +11567.710208 + 30 +0.0 + 0 +SEQEND + 5 +3751 + 8 +TREPPE + 0 +POLYLINE + 5 +31C8 + 8 +TREPPE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3752 + 8 +TREPPE + 10 +20825.0 + 20 +11758.0 + 30 +0.0 + 0 +VERTEX + 5 +3753 + 8 +TREPPE + 10 +19673.0 + 20 +11758.0 + 30 +0.0 + 0 +SEQEND + 5 +3754 + 8 +TREPPE + 0 +POLYLINE + 5 +31CC + 8 +TREPPE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3755 + 8 +TREPPE + 10 +19613.0 + 20 +11758.0 + 30 +0.0 + 0 +VERTEX + 5 +3756 + 8 +TREPPE + 10 +19485.0 + 20 +11758.0 + 30 +0.0 + 0 +SEQEND + 5 +3757 + 8 +TREPPE + 0 +POLYLINE + 5 +31D0 + 8 +TREPPE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3758 + 8 +TREPPE + 10 +20825.0 + 20 +12059.0 + 30 +0.0 + 0 +VERTEX + 5 +3759 + 8 +TREPPE + 10 +19974.0 + 20 +12059.0 + 30 +0.0 + 0 +SEQEND + 5 +375A + 8 +TREPPE + 0 +POLYLINE + 5 +31D4 + 8 +TREPPE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +375B + 8 +TREPPE + 10 +19914.0 + 20 +12059.0 + 30 +0.0 + 0 +VERTEX + 5 +375C + 8 +TREPPE + 10 +19485.0 + 20 +12059.0 + 30 +0.0 + 0 +SEQEND + 5 +375D + 8 +TREPPE + 0 +POLYLINE + 5 +31D8 + 8 +TREPPE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +375E + 8 +TREPPE + 10 +20825.0 + 20 +12360.0 + 30 +0.0 + 0 +VERTEX + 5 +375F + 8 +TREPPE + 10 +20275.0 + 20 +12360.0 + 30 +0.0 + 0 +SEQEND + 5 +3760 + 8 +TREPPE + 0 +POLYLINE + 5 +31DC + 8 +TREPPE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3761 + 8 +TREPPE + 10 +20215.0 + 20 +12360.0 + 30 +0.0 + 0 +VERTEX + 5 +3762 + 8 +TREPPE + 10 +19485.0 + 20 +12360.0 + 30 +0.0 + 0 +SEQEND + 5 +3763 + 8 +TREPPE + 0 +POLYLINE + 5 +31E0 + 8 +TREPPE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3764 + 8 +TREPPE + 10 +20825.0 + 20 +12661.0 + 30 +0.0 + 0 +VERTEX + 5 +3765 + 8 +TREPPE + 10 +20576.0 + 20 +12661.0 + 30 +0.0 + 0 +SEQEND + 5 +3766 + 8 +TREPPE + 0 +POLYLINE + 5 +31E4 + 8 +TREPPE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3767 + 8 +TREPPE + 10 +20516.0 + 20 +12661.0 + 30 +0.0 + 0 +VERTEX + 5 +3768 + 8 +TREPPE + 10 +19485.0 + 20 +12661.0 + 30 +0.0 + 0 +SEQEND + 5 +3769 + 8 +TREPPE + 0 +POLYLINE + 5 +31E8 + 8 +TREPPE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +376A + 8 +TREPPE + 10 +20825.0 + 20 +10855.0 + 30 +0.0 + 0 +VERTEX + 5 +376B + 8 +TREPPE + 10 +20825.0 + 20 +12910.0 + 30 +0.0 + 0 +SEQEND + 5 +376C + 8 +TREPPE + 0 +POLYLINE + 5 +31EC + 8 +TREPPE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +376D + 8 +TREPPE + 10 +20817.0 + 20 +12962.0 + 30 +0.0 + 0 +VERTEX + 5 +376E + 8 +TREPPE + 10 +19485.0 + 20 +12962.0 + 30 +0.0 + 0 +SEQEND + 5 +376F + 8 +TREPPE + 0 +POLYLINE + 5 +31F0 + 8 +TREPPE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3770 + 8 +TREPPE + 10 +20825.0 + 20 +12970.0 + 30 +0.0 + 0 +VERTEX + 5 +3771 + 8 +TREPPE + 10 +20825.0 + 20 +13865.0 + 30 +0.0 + 0 +VERTEX + 5 +3772 + 8 +TREPPE + 10 +19485.0 + 20 +13865.0 + 30 +0.0 + 0 +VERTEX + 5 +3773 + 8 +TREPPE + 10 +19485.0 + 20 +11629.733805 + 30 +0.0 + 0 +SEQEND + 5 +3774 + 8 +TREPPE + 0 +POLYLINE + 5 +31F6 + 8 +TREPPE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3775 + 8 +TREPPE + 10 +19485.0 + 20 +11569.822263 + 30 +0.0 + 0 +VERTEX + 5 +3776 + 8 +TREPPE + 10 +19485.0 + 20 +10855.0 + 30 +0.0 + 0 +VERTEX + 5 +3777 + 8 +TREPPE + 10 +20825.0 + 20 +10855.0 + 30 +0.0 + 0 +SEQEND + 5 +3778 + 8 +TREPPE + 0 +POLYLINE + 5 +31FB + 8 +TREPPE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +3779 + 8 +TREPPE + 10 +19372.305199 + 20 +10854.832899 + 30 +0.0 + 0 +VERTEX + 5 +377A + 8 +TREPPE + 10 +19495.0 + 20 +10854.832899 + 30 +0.0 + 0 +SEQEND + 5 +377B + 8 +TREPPE + 0 +POLYLINE + 5 +31FF + 8 +TREPPE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +377C + 8 +TREPPE + 10 +20155.0 + 20 +13865.0 + 30 +0.0 + 0 +VERTEX + 5 +377D + 8 +TREPPE + 10 +20155.0 + 20 +10510.0 + 30 +0.0 + 0 +VERTEX + 5 +377E + 8 +TREPPE + 10 +18710.0 + 20 +10510.0 + 30 +0.0 + 0 +VERTEX + 5 +377F + 8 +TREPPE + 10 +18710.0 + 20 +13865.0 + 30 +0.0 + 0 +SEQEND + 5 +3780 + 8 +TREPPE + 0 +SOLID + 5 +3205 + 8 +TREPPE + 10 +18710.0 + 20 +13870.0 + 30 +0.0 + 11 +18780.0 + 21 +13520.0 + 31 +0.0 + 12 +18640.0 + 22 +13520.0 + 32 +0.0 + 13 +18640.0 + 23 +13520.0 + 33 +0.0 + 0 +POINT + 5 +3206 + 8 +TREPPE + 10 +20155.0 + 20 +13870.0 + 30 +0.0 + 0 +POINT + 5 +3207 + 8 +TREPPE + 10 +20155.0 + 20 +13860.0 + 30 +0.0 + 0 +POINT + 5 +3208 + 8 +TREPPE + 10 +20155.0 + 20 +13865.0 + 30 +0.0 + 0 +POINT + 5 +3209 + 8 +TREPPE + 10 +20150.0 + 20 +13865.0 + 30 +0.0 + 0 +POINT + 5 +320A + 8 +TREPPE + 10 +20155.0 + 20 +13865.0 + 30 +0.0 + 0 +POINT + 5 +320B + 8 +TREPPE + 10 +20180.0 + 20 +13880.0 + 30 +0.0 + 0 +POINT + 5 +320C + 8 +TREPPE + 10 +20150.0 + 20 +13895.0 + 30 +0.0 + 0 +POINT + 5 +320D + 8 +TREPPE + 10 +20145.0 + 20 +13890.0 + 30 +0.0 + 0 +POINT + 5 +320E + 8 +TREPPE + 10 +20125.0 + 20 +13870.0 + 30 +0.0 + 0 +POLYLINE + 5 +320F + 8 +BALKONE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +3781 + 8 +BALKONE + 10 +5850.0 + 20 +8995.0 + 30 +0.0 + 0 +VERTEX + 5 +3782 + 8 +BALKONE + 10 +5850.0 + 20 +7645.0 + 30 +0.0 + 0 +VERTEX + 5 +3783 + 8 +BALKONE + 10 +8850.0 + 20 +7645.0 + 30 +0.0 + 0 +VERTEX + 5 +3784 + 8 +BALKONE + 10 +8850.0 + 20 +8995.0 + 30 +0.0 + 0 +SEQEND + 5 +3785 + 8 +BALKONE + 0 +POLYLINE + 5 +3215 + 8 +BALKONE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +3786 + 8 +BALKONE + 10 +26040.0 + 20 +8995.0 + 30 +0.0 + 0 +VERTEX + 5 +3787 + 8 +BALKONE + 10 +26040.0 + 20 +7645.0 + 30 +0.0 + 0 +VERTEX + 5 +3788 + 8 +BALKONE + 10 +23040.0 + 20 +7645.0 + 30 +0.0 + 0 +VERTEX + 5 +3789 + 8 +BALKONE + 10 +23040.0 + 20 +8995.0 + 30 +0.0 + 0 +SEQEND + 5 +378A + 8 +BALKONE + 0 +POLYLINE + 5 +321B + 8 +SCHNITTLINIEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +378B + 8 +SCHNITTLINIEN + 10 +23600.0 + 20 +6650.0 + 30 +0.0 + 0 +VERTEX + 5 +378C + 8 +SCHNITTLINIEN + 10 +23600.0 + 20 +13455.0 + 30 +0.0 + 0 +VERTEX + 5 +378D + 8 +SCHNITTLINIEN + 10 +21435.0 + 20 +13455.0 + 30 +0.0 + 0 +VERTEX + 5 +378E + 8 +SCHNITTLINIEN + 10 +21510.0 + 20 +23300.0 + 30 +0.0 + 0 +SEQEND + 5 +378F + 8 +SCHNITTLINIEN + 0 +POLYLINE + 5 +3221 + 8 +SCHNITTLINIEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +3790 + 8 +SCHNITTLINIEN + 10 +19720.0 + 20 +7250.0 + 30 +0.0 + 0 +VERTEX + 5 +3791 + 8 +SCHNITTLINIEN + 10 +19720.0 + 20 +15150.0 + 30 +0.0 + 0 +SEQEND + 5 +3792 + 8 +SCHNITTLINIEN + 0 +POLYLINE + 5 +3225 + 8 +SCHNITTLINIEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +3793 + 8 +SCHNITTLINIEN + 10 +5600.0 + 20 +6615.0 + 30 +0.0 + 0 +VERTEX + 5 +3794 + 8 +SCHNITTLINIEN + 10 +5600.0 + 20 +23830.0 + 30 +0.0 + 0 +SEQEND + 5 +3795 + 8 +SCHNITTLINIEN + 0 +SOLID + 5 +3229 + 8 +SCHNITTLINIEN + 10 +19135.0 + 20 +14835.0 + 30 +0.0 + 11 +19475.0 + 21 +14540.0 + 31 +0.0 + 12 +19475.0 + 22 +15130.0 + 32 +0.0 + 13 +19475.0 + 23 +15130.0 + 33 +0.0 + 0 +SOLID + 5 +322A + 8 +SCHNITTLINIEN + 10 +19135.0 + 20 +7600.0 + 30 +0.0 + 11 +19475.0 + 21 +7305.0 + 31 +0.0 + 12 +19475.0 + 22 +7895.0 + 32 +0.0 + 13 +19475.0 + 23 +7895.0 + 33 +0.0 + 0 +SOLID + 5 +322B + 8 +SCHNITTLINIEN + 10 +24245.0 + 20 +6990.0 + 30 +0.0 + 11 +23905.0 + 21 +7285.0 + 31 +0.0 + 12 +23905.0 + 22 +6695.0 + 32 +0.0 + 13 +23905.0 + 23 +6695.0 + 33 +0.0 + 0 +SOLID + 5 +322C + 8 +SCHNITTLINIEN + 10 +22060.0 + 20 +22925.0 + 30 +0.0 + 11 +21720.0 + 21 +23220.0 + 31 +0.0 + 12 +21720.0 + 22 +22630.0 + 32 +0.0 + 13 +21720.0 + 23 +22630.0 + 33 +0.0 + 0 +SOLID + 5 +322D + 8 +SCHNITTLINIEN + 10 +6285.0 + 20 +6940.0 + 30 +0.0 + 11 +5945.0 + 21 +7235.0 + 31 +0.0 + 12 +5945.0 + 22 +6645.0 + 32 +0.0 + 13 +5945.0 + 23 +6645.0 + 33 +0.0 + 0 +SOLID + 5 +322E + 8 +SCHNITTLINIEN + 10 +6285.0 + 20 +23535.0 + 30 +0.0 + 11 +5945.0 + 21 +23830.0 + 31 +0.0 + 12 +5945.0 + 22 +23240.0 + 32 +0.0 + 13 +5945.0 + 23 +23240.0 + 33 +0.0 + 0 +POLYLINE + 5 +322F + 8 +SPANNRICHTUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3796 + 8 +SPANNRICHTUNG + 10 +18955.0 + 20 +9925.0 + 30 +0.0 + 0 +VERTEX + 5 +3797 + 8 +SPANNRICHTUNG + 10 +18680.0 + 20 +10090.0 + 30 +0.0 + 0 +VERTEX + 5 +3798 + 8 +SPANNRICHTUNG + 10 +19549.211617 + 20 +10090.0 + 30 +0.0 + 0 +VERTEX + 5 +3799 + 8 +SPANNRICHTUNG + 10 +19263.423234 + 20 +10255.0 + 30 +0.0 + 0 +SEQEND + 5 +379A + 8 +SPANNRICHTUNG + 0 +POLYLINE + 5 +3235 + 8 +SPANNRICHTUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +379B + 8 +SPANNRICHTUNG + 10 +7260.0 + 20 +8869.211617 + 30 +0.0 + 0 +VERTEX + 5 +379C + 8 +SPANNRICHTUNG + 10 +7260.0 + 20 +8254.211617 + 30 +0.0 + 0 +VERTEX + 5 +379D + 8 +SPANNRICHTUNG + 10 +7375.0 + 20 +8455.0 + 30 +0.0 + 0 +SEQEND + 5 +379E + 8 +SPANNRICHTUNG + 0 +POLYLINE + 5 +323A + 8 +SPANNRICHTUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +379F + 8 +SPANNRICHTUNG + 10 +24405.0 + 20 +8795.0 + 30 +0.0 + 0 +VERTEX + 5 +37A0 + 8 +SPANNRICHTUNG + 10 +24405.0 + 20 +8290.0 + 30 +0.0 + 0 +VERTEX + 5 +37A1 + 8 +SPANNRICHTUNG + 10 +24525.0 + 20 +8460.788383 + 30 +0.0 + 0 +SEQEND + 5 +37A2 + 8 +SPANNRICHTUNG + 0 +LINE + 5 +323F + 8 +0 + 62 + 0 + 10 +17625.0 + 20 +17278.805922 + 30 +0.0 + 11 +17990.0 + 21 +17643.805922 + 31 +0.0 + 0 +LINE + 5 +3240 + 8 +0 + 62 + 0 + 10 +17625.0 + 20 +17632.359313 + 30 +0.0 + 11 +17847.640687 + 21 +17855.0 + 31 +0.0 + 0 +LINE + 5 +3241 + 8 +0 + 62 + 0 + 10 +17625.0 + 20 +17985.912703 + 30 +0.0 + 11 +17744.087297 + 21 +18105.0 + 31 +0.0 + 0 +LINE + 5 +3242 + 8 +0 + 62 + 0 + 10 +17625.0 + 20 +18339.466094 + 30 +0.0 + 11 +17765.533906 + 21 +18480.0 + 31 +0.0 + 0 +LINE + 5 +3243 + 8 +0 + 62 + 0 + 10 +17625.0 + 20 +18693.019485 + 30 +0.0 + 11 +17740.0 + 21 +18808.019485 + 31 +0.0 + 0 +LINE + 5 +3244 + 8 +0 + 62 + 0 + 10 +17625.0 + 20 +19046.572875 + 30 +0.0 + 11 +17990.0 + 21 +19411.572875 + 31 +0.0 + 0 +LINE + 5 +3245 + 8 +0 + 62 + 0 + 10 +17625.0 + 20 +19400.126266 + 30 +0.0 + 11 +17990.0 + 21 +19765.126266 + 31 +0.0 + 0 +LINE + 5 +3246 + 8 +0 + 62 + 0 + 10 +17625.0 + 20 +19753.679656 + 30 +0.0 + 11 +17990.0 + 21 +20118.679656 + 31 +0.0 + 0 +LINE + 5 +3247 + 8 +0 + 62 + 0 + 10 +17625.0 + 20 +20107.233047 + 30 +0.0 + 11 +17990.0 + 21 +20472.233047 + 31 +0.0 + 0 +LINE + 5 +3248 + 8 +0 + 62 + 0 + 10 +17625.0 + 20 +20460.786438 + 30 +0.0 + 11 +17990.0 + 21 +20825.786438 + 31 +0.0 + 0 +LINE + 5 +3249 + 8 +0 + 62 + 0 + 10 +17625.0 + 20 +20814.339828 + 30 +0.0 + 11 +17990.0 + 21 +21179.339828 + 31 +0.0 + 0 +LINE + 5 +324A + 8 +0 + 62 + 0 + 10 +18560.660172 + 20 +21750.0 + 30 +0.0 + 11 +18740.0 + 21 +21929.339828 + 31 +0.0 + 0 +LINE + 5 +324B + 8 +0 + 62 + 0 + 10 +17625.0 + 20 +21167.893219 + 30 +0.0 + 11 +17990.0 + 21 +21532.893219 + 31 +0.0 + 0 +LINE + 5 +324C + 8 +0 + 62 + 0 + 10 +18207.106781 + 20 +21750.0 + 30 +0.0 + 11 +18572.106781 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +324D + 8 +0 + 62 + 0 + 10 +17625.0 + 20 +21521.446609 + 30 +0.0 + 11 +18218.553391 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +324E + 8 +0 + 62 + 0 + 10 +17500.0 + 20 +21750.0 + 30 +0.0 + 11 +17865.0 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +324F + 8 +0 + 62 + 0 + 10 +17146.446609 + 20 +21750.0 + 30 +0.0 + 11 +17511.446609 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +3250 + 8 +0 + 62 + 0 + 10 +16875.0 + 20 +21832.106781 + 30 +0.0 + 11 +17157.893219 + 21 +22115.0 + 31 +0.0 + 0 +LINE + 5 +3251 + 8 +0 + 62 + 0 + 10 +17625.0 + 20 +16925.252532 + 30 +0.0 + 11 +17990.0 + 21 +17290.252532 + 31 +0.0 + 0 +LINE + 5 +3252 + 8 +0 + 62 + 0 + 10 +17625.0 + 20 +16571.699141 + 30 +0.0 + 11 +17990.0 + 21 +16936.699141 + 31 +0.0 + 0 +LINE + 5 +3253 + 8 +0 + 62 + 0 + 10 +17375.0 + 20 +15968.145751 + 30 +0.0 + 11 +17396.854249 + 21 +15990.0 + 31 +0.0 + 0 +LINE + 5 +3254 + 8 +0 + 62 + 0 + 10 +17625.0 + 20 +16218.145751 + 30 +0.0 + 11 +17990.0 + 21 +16583.145751 + 31 +0.0 + 0 +LINE + 5 +3255 + 8 +0 + 62 + 0 + 10 +17385.40764 + 20 +15625.0 + 30 +0.0 + 11 +17990.0 + 21 +16229.59236 + 31 +0.0 + 0 +LINE + 5 +3256 + 8 +0 + 62 + 0 + 10 +17738.961031 + 20 +15625.0 + 30 +0.0 + 11 +18103.961031 + 21 +15990.0 + 31 +0.0 + 0 +LINE + 5 +3257 + 8 +0 + 62 + 0 + 10 +18092.514421 + 20 +15625.0 + 30 +0.0 + 11 +18457.514421 + 21 +15990.0 + 31 +0.0 + 0 +LINE + 5 +3258 + 8 +0 + 62 + 0 + 10 +18446.067812 + 20 +15625.0 + 30 +0.0 + 11 +18811.067812 + 21 +15990.0 + 31 +0.0 + 0 +LINE + 5 +3259 + 8 +0 + 62 + 0 + 10 +18799.621202 + 20 +15625.0 + 30 +0.0 + 11 +19164.621202 + 21 +15990.0 + 31 +0.0 + 0 +LINE + 5 +325A + 8 +0 + 62 + 0 + 10 +19153.174593 + 20 +15625.0 + 30 +0.0 + 11 +19518.174593 + 21 +15990.0 + 31 +0.0 + 0 +LINE + 5 +325B + 8 +0 + 62 + 0 + 10 +19506.727984 + 20 +15625.0 + 30 +0.0 + 11 +19871.727984 + 21 +15990.0 + 31 +0.0 + 0 +LINE + 5 +325C + 8 +0 + 62 + 0 + 10 +19860.281374 + 20 +15625.0 + 30 +0.0 + 11 +20225.281374 + 21 +15990.0 + 31 +0.0 + 0 +LINE + 5 +325D + 8 +0 + 62 + 0 + 10 +20213.834765 + 20 +15625.0 + 30 +0.0 + 11 +20578.834765 + 21 +15990.0 + 31 +0.0 + 0 +LINE + 5 +325E + 8 +0 + 62 + 0 + 10 +20567.388155 + 20 +15625.0 + 30 +0.0 + 11 +20932.388155 + 21 +15990.0 + 31 +0.0 + 0 +LINE + 5 +325F + 8 +0 + 62 + 0 + 10 +20875.0 + 20 +15579.058454 + 30 +0.0 + 11 +21285.941546 + 21 +15990.0 + 31 +0.0 + 0 +LINE + 5 +3260 + 8 +0 + 62 + 0 + 10 +20899.494937 + 20 +15250.0 + 30 +0.0 + 11 +21240.0 + 21 +15590.505063 + 31 +0.0 + 0 +LINE + 5 +3261 + 8 +0 + 62 + 0 + 10 +21274.494937 + 20 +15625.0 + 30 +0.0 + 11 +21365.0 + 21 +15715.505063 + 31 +0.0 + 0 +LINE + 5 +3262 + 8 +0 + 62 + 0 + 10 +17796.980515 + 20 +18865.0 + 30 +0.0 + 11 +17990.0 + 21 +19058.019485 + 31 +0.0 + 0 +LINE + 5 +3263 + 8 +0 + 62 + 0 + 10 +17875.0 + 20 +18589.466094 + 30 +0.0 + 11 +17990.0 + 21 +18704.466094 + 31 +0.0 + 0 +LINE + 5 +3264 + 8 +0 + 62 + 0 + 10 +17875.0 + 20 +18235.912703 + 30 +0.0 + 11 +17990.0 + 21 +18350.912703 + 31 +0.0 + 0 +LINE + 5 +3265 + 8 +0 + 62 + 0 + 10 +17875.0 + 20 +17882.359313 + 30 +0.0 + 11 +17990.0 + 21 +17997.359313 + 31 +0.0 + 0 +POLYLINE + 5 +3266 + 8 +SCHORNSTEINE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +37A3 + 8 +SCHORNSTEINE + 10 +17875.0 + 20 +18105.0 + 30 +0.0 + 0 +VERTEX + 5 +37A4 + 8 +SCHORNSTEINE + 10 +17740.0 + 20 +18235.0 + 30 +0.0 + 0 +SEQEND + 5 +37A5 + 8 +SCHORNSTEINE + 0 +POLYLINE + 5 +326A + 8 +SCHORNSTEINE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +37A6 + 8 +SCHORNSTEINE + 10 +17740.0 + 20 +18110.0 + 30 +0.0 + 0 +VERTEX + 5 +37A7 + 8 +SCHORNSTEINE + 10 +17870.0 + 20 +18235.0 + 30 +0.0 + 0 +SEQEND + 5 +37A8 + 8 +SCHORNSTEINE + 0 +POLYLINE + 5 +326E + 8 +SCHORNSTEINE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +37A9 + 8 +SCHORNSTEINE + 10 +17875.0 + 20 +18485.0 + 30 +0.0 + 0 +VERTEX + 5 +37AA + 8 +SCHORNSTEINE + 10 +17745.0 + 20 +18610.0 + 30 +0.0 + 0 +SEQEND + 5 +37AB + 8 +SCHORNSTEINE + 0 +POLYLINE + 5 +3272 + 8 +SCHORNSTEINE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +37AC + 8 +SCHORNSTEINE + 10 +17745.0 + 20 +18485.0 + 30 +0.0 + 0 +VERTEX + 5 +37AD + 8 +SCHORNSTEINE + 10 +17875.0 + 20 +18610.0 + 30 +0.0 + 0 +SEQEND + 5 +37AE + 8 +SCHORNSTEINE + 0 +POLYLINE + 5 +3276 + 8 +SCHORNSTEINE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +37AF + 8 +SCHORNSTEINE + 10 +17740.0 + 20 +18865.0 + 30 +0.0 + 0 +VERTEX + 5 +37B0 + 8 +SCHORNSTEINE + 10 +17870.0 + 20 +18735.0 + 30 +0.0 + 0 +SEQEND + 5 +37B1 + 8 +SCHORNSTEINE + 0 +POLYLINE + 5 +327A + 8 +SCHORNSTEINE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +37B2 + 8 +SCHORNSTEINE + 10 +17745.0 + 20 +18735.0 + 30 +0.0 + 0 +VERTEX + 5 +37B3 + 8 +SCHORNSTEINE + 10 +17870.0 + 20 +18860.0 + 30 +0.0 + 0 +SEQEND + 5 +37B4 + 8 +SCHORNSTEINE + 0 +POLYLINE + 5 +327E + 8 +SCHORNSTEINE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +37B5 + 8 +SCHORNSTEINE + 10 +17740.0 + 20 +17990.0 + 30 +0.0 + 0 +VERTEX + 5 +37B6 + 8 +SCHORNSTEINE + 10 +17875.0 + 20 +17855.0 + 30 +0.0 + 0 +SEQEND + 5 +37B7 + 8 +SCHORNSTEINE + 0 +POLYLINE + 5 +3282 + 8 +SCHORNSTEINE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +37B8 + 8 +SCHORNSTEINE + 10 +17740.0 + 20 +17855.0 + 30 +0.0 + 0 +VERTEX + 5 +37B9 + 8 +SCHORNSTEINE + 10 +17875.0 + 20 +17990.0 + 30 +0.0 + 0 +SEQEND + 5 +37BA + 8 +SCHORNSTEINE + 0 +POLYLINE + 5 +3286 + 8 +SCHORNSTEINE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +37BB + 8 +SCHORNSTEINE + 10 +17740.0 + 20 +17605.0 + 30 +0.0 + 0 +VERTEX + 5 +37BC + 8 +SCHORNSTEINE + 10 +17875.0 + 20 +17740.0 + 30 +0.0 + 0 +SEQEND + 5 +37BD + 8 +SCHORNSTEINE + 0 +POLYLINE + 5 +328A + 8 +SCHORNSTEINE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +37BE + 8 +SCHORNSTEINE + 10 +17875.0 + 20 +17605.0 + 30 +0.0 + 0 +VERTEX + 5 +37BF + 8 +SCHORNSTEINE + 10 +17740.0 + 20 +17740.0 + 30 +0.0 + 0 +SEQEND + 5 +37C0 + 8 +SCHORNSTEINE + 0 +TEXT + 5 +328F + 8 +LEGENDE-70 + 10 +19900.0 + 20 +7445.0 + 30 +0.0 + 40 +350.0 + 1 +X + 0 +TEXT + 5 +3290 + 8 +LEGENDE-70 + 10 +19900.0 + 20 +14670.0 + 30 +0.0 + 40 +350.0 + 1 +X + 0 +TEXT + 5 +3291 + 8 +LEGENDE-70 + 10 +24485.0 + 20 +6780.0 + 30 +0.0 + 40 +350.0 + 1 +I + 0 +TEXT + 5 +3292 + 8 +LEGENDE-70 + 10 +22305.0 + 20 +22780.0 + 30 +0.0 + 40 +350.0 + 1 +I + 41 +0.5 + 0 +TEXT + 5 +3293 + 8 +LEGENDE-70 + 10 +6485.0 + 20 +6790.0 + 30 +0.0 + 40 +350.0 + 1 +S-DG + 0 +TEXT + 5 +3294 + 8 +LEGENDE-70 + 10 +6485.0 + 20 +23375.0 + 30 +0.0 + 40 +350.0 + 1 +S-DG + 0 +TEXT + 5 +3295 + 8 +LEGENDE-70 + 10 +7625.0 + 20 +22595.0 + 30 +0.0 + 40 +350.0 + 1 +S1 + 0 +TEXT + 5 +3296 + 8 +LEGENDE-70 + 10 +12955.0 + 20 +22580.0 + 30 +0.0 + 40 +350.0 + 1 +W21 + 0 +TEXT + 5 +3297 + 8 +LEGENDE-70 + 10 +20205.0 + 20 +22580.0 + 30 +0.0 + 40 +350.0 + 1 +W22 + 0 +TEXT + 5 +3298 + 8 +LEGENDE-70 + 10 +23890.0 + 20 +22580.0 + 30 +0.0 + 40 +350.0 + 1 +S2 + 0 +TEXT + 5 +3299 + 8 +LEGENDE-70 + 10 +4415.0 + 20 +20490.0 + 30 +0.0 + 40 +350.0 + 1 +W3 + 50 +90.0 + 0 +TEXT + 5 +329A + 8 +LEGENDE-70 + 10 +4465.0 + 20 +11340.0 + 30 +0.0 + 40 +350.0 + 1 +W4 + 50 +90.0 + 0 +TEXT + 5 +329B + 8 +LEGENDE-70 + 10 +6160.0 + 20 +17445.0 + 30 +0.0 + 40 +350.0 + 1 +W25 + 0 +TEXT + 5 +329C + 8 +LEGENDE-70 + 10 +6250.0 + 20 +14645.0 + 30 +0.0 + 40 +350.0 + 1 +W26 + 0 +TEXT + 5 +329D + 8 +LEGENDE-70 + 10 +9620.0 + 20 +18675.0 + 30 +0.0 + 40 +350.0 + 1 +W8 + 50 +90.0 + 0 +TEXT + 5 +329E + 8 +LEGENDE-70 + 10 +6160.0 + 20 +9930.0 + 30 +0.0 + 40 +350.0 + 1 +W23 + 0 +TEXT + 5 +329F + 8 +LEGENDE-70 + 10 +10605.0 + 20 +12890.0 + 30 +0.0 + 40 +350.0 + 1 +W28 + 0 +TEXT + 5 +32A0 + 8 +LEGENDE-70 + 10 +12015.0 + 20 +9895.0 + 30 +0.0 + 40 +350.0 + 1 +W24 + 0 +TEXT + 5 +32A1 + 8 +LEGENDE-70 + 10 +19000.0 + 20 +8415.0 + 30 +0.0 + 40 +350.0 + 1 +S4 + 0 +TEXT + 5 +32A2 + 8 +LEGENDE-70 + 10 +12440.0 + 20 +15605.0 + 30 +0.0 + 40 +350.0 + 1 +W27 + 0 +TEXT + 5 +32A3 + 8 +LEGENDE-70 + 10 +18965.0 + 20 +16115.0 + 30 +0.0 + 40 +350.0 + 1 +W29 + 0 +TEXT + 5 +32A4 + 8 +LEGENDE-70 + 10 +23160.0 + 20 +16090.0 + 30 +0.0 + 40 +350.0 + 1 +W30 + 0 +TEXT + 5 +32A5 + 8 +LEGENDE-70 + 10 +14705.0 + 20 +18675.0 + 30 +0.0 + 40 +350.0 + 1 +W7 + 50 +90.0 + 0 +TEXT + 5 +32A6 + 8 +LEGENDE-70 + 10 +17480.0 + 20 +18680.0 + 30 +0.0 + 40 +350.0 + 1 +W6 + 50 +90.0 + 0 +TEXT + 5 +32A7 + 8 +LEGENDE-70 + 10 +22355.0 + 20 +19100.0 + 30 +0.0 + 40 +350.0 + 1 +W5 + 50 +90.0 + 0 +TEXT + 5 +32A8 + 8 +LEGENDE-70 + 10 +26130.0 + 20 +19345.0 + 30 +0.0 + 40 +350.0 + 1 +W1 + 50 +90.0 + 0 +TEXT + 5 +32A9 + 8 +LEGENDE-70 + 10 +26060.0 + 20 +12355.0 + 30 +0.0 + 40 +350.0 + 1 +W2 + 50 +90.0 + 0 +TEXT + 5 +32AA + 8 +LEGENDE-70 + 10 +26095.0 + 20 +10705.0 + 30 +0.0 + 40 +350.0 + 1 +S3 + 50 +90.0 + 0 +TEXT + 5 +32AB + 8 +LEGENDE-70 + 10 +21655.0 + 20 +10070.0 + 30 +0.0 + 40 +350.0 + 1 +W29 + 50 +90.0 + 0 +TEXT + 5 +32AC + 8 +LEGENDE-70 + 10 +17500.0 + 20 +9915.0 + 30 +0.0 + 40 +350.0 + 1 +W11 + 50 +90.0 + 0 +TEXT + 5 +32AD + 8 +LEGENDE-70 + 10 +14035.0 + 20 +9905.0 + 30 +0.0 + 40 +350.0 + 1 +W10 + 50 +90.0 + 0 +DIMENSION + 5 +32AE + 8 +BEMASSUNG + 2 +*D87 + 10 +6740.0 + 20 +24615.0 + 30 +0.0 + 11 +5870.0 + 21 +24790.0 + 31 +0.0 + 1 +1.74 + 13 +5000.0 + 23 +22115.0 + 33 +0.0 + 14 +6740.0 + 24 +22115.0 + 34 +0.0 + 0 +DIMENSION + 5 +32AF + 8 +BEMASSUNG + 2 +*D89 + 10 +8500.0 + 20 +24615.0 + 30 +0.0 + 11 +7620.0 + 21 +24790.0 + 31 +0.0 + 1 +1.76 + 13 +6740.0 + 23 +22115.0 + 33 +0.0 + 14 +8500.0 + 24 +22115.0 + 34 +0.0 + 0 +DIMENSION + 5 +32B0 + 8 +BEMASSUNG + 2 +*D86 + 10 +10240.0 + 20 +24615.0 + 30 +0.0 + 11 +9370.0 + 21 +24790.0 + 31 +0.0 + 1 +1.74 + 13 +8500.0 + 23 +22115.0 + 33 +0.0 + 14 +10240.0 + 24 +22115.0 + 34 +0.0 + 0 +DIMENSION + 5 +32B1 + 8 +BEMASSUNG + 2 +*D85 + 10 +11255.0 + 20 +24615.0 + 30 +0.0 + 11 +10747.5 + 21 +24790.0 + 31 +0.0 + 1 +1.01 + 13 +10240.0 + 23 +22115.0 + 33 +0.0 + 14 +11255.0 + 24 +22105.0 + 34 +0.0 + 0 +DIMENSION + 5 +32B2 + 8 +BEMASSUNG + 2 +*D84 + 10 +15860.0 + 20 +24615.0 + 30 +0.0 + 11 +13557.5 + 21 +24790.0 + 31 +0.0 + 1 +4.61 + 13 +11255.0 + 23 +22105.0 + 33 +0.0 + 14 +15860.0 + 24 +22105.0 + 34 +0.0 + 0 +DIMENSION + 5 +32B3 + 8 +BEMASSUNG + 2 +*D83 + 10 +16875.0 + 20 +24615.0 + 30 +0.0 + 11 +16367.5 + 21 +24790.0 + 31 +0.0 + 1 +1.01 + 13 +15860.0 + 23 +22105.0 + 33 +0.0 + 14 +16875.0 + 24 +22105.0 + 34 +0.0 + 0 +DIMENSION + 5 +32B4 + 8 +BEMASSUNG + 2 +*D82 + 10 +18735.0 + 20 +24615.0 + 30 +0.0 + 11 +17805.0 + 21 +24790.0 + 31 +0.0 + 1 +1.86 + 13 +16875.0 + 23 +22105.0 + 33 +0.0 + 14 +18735.0 + 24 +22105.0 + 34 +0.0 + 0 +DIMENSION + 5 +32B5 + 8 +BEMASSUNG + 2 +*D81 + 10 +19750.0 + 20 +24615.0 + 30 +0.0 + 11 +19242.5 + 21 +24790.0 + 31 +0.0 + 1 +1.01 + 13 +18735.0 + 23 +22105.0 + 33 +0.0 + 14 +19750.0 + 24 +22115.0 + 34 +0.0 + 0 +DIMENSION + 5 +32B6 + 8 +BEMASSUNG + 2 +*D80 + 10 +23365.0 + 20 +24615.0 + 30 +0.0 + 11 +21557.5 + 21 +24790.0 + 31 +0.0 + 1 +3.61 + 13 +19750.0 + 23 +22115.0 + 33 +0.0 + 14 +23365.0 + 24 +22115.0 + 34 +0.0 + 0 +DIMENSION + 5 +32B7 + 8 +BEMASSUNG + 2 +*D88 + 10 +25250.0 + 20 +24615.0 + 30 +0.0 + 11 +24307.5 + 21 +24790.0 + 31 +0.0 + 1 +1.88 + 13 +23365.0 + 23 +22115.0 + 33 +0.0 + 14 +25250.0 + 24 +22115.0 + 34 +0.0 + 0 +DIMENSION + 5 +32B8 + 8 +BEMASSUNG + 2 +*D79 + 10 +26740.0 + 20 +24615.0 + 30 +0.0 + 11 +25995.0 + 21 +24790.0 + 31 +0.0 + 1 +1.49 + 13 +25250.0 + 23 +22115.0 + 33 +0.0 + 14 +26740.0 + 24 +22115.0 + 34 +0.0 + 0 +DIMENSION + 5 +32B9 + 8 +BEMASSUNG + 2 +*D69 + 10 +5365.0 + 20 +25315.0 + 30 +0.0 + 11 +5182.5 + 21 +25490.0 + 31 +0.0 + 1 +36 + 13 +5000.0 + 23 +22115.0 + 33 +0.0 + 14 +5365.0 + 24 +22115.0 + 34 +0.0 + 0 +DIMENSION + 5 +32BA + 8 +BEMASSUNG + 2 +*D68 + 10 +9750.0 + 20 +25315.0 + 30 +0.0 + 11 +7557.5 + 21 +25490.0 + 31 +0.0 + 1 +4.38 + 13 +5365.0 + 23 +22115.0 + 33 +0.0 + 14 +9750.0 + 24 +21740.0 + 34 +0.0 + 0 +DIMENSION + 5 +32BB + 8 +BEMASSUNG + 2 +*D71 + 10 +10110.0 + 20 +25315.0 + 30 +0.0 + 11 +9930.0 + 21 +25490.0 + 31 +0.0 + 1 +36 + 13 +9750.0 + 23 +21740.0 + 33 +0.0 + 14 +10110.0 + 24 +21745.0 + 34 +0.0 + 0 +DIMENSION + 5 +32BC + 8 +BEMASSUNG + 2 +*D70 + 10 +14875.0 + 20 +25315.0 + 30 +0.0 + 11 +12492.5 + 21 +25490.0 + 31 +0.0 + 1 +4.76 + 13 +10110.0 + 23 +21745.0 + 33 +0.0 + 14 +14875.0 + 24 +21735.0 + 34 +0.0 + 0 +DIMENSION + 5 +32BD + 8 +BEMASSUNG + 2 +*D72 + 10 +15240.0 + 20 +25315.0 + 30 +0.0 + 11 +15057.5 + 21 +25490.0 + 31 +0.0 + 1 +36 + 13 +14875.0 + 23 +21735.0 + 33 +0.0 + 14 +15240.0 + 24 +21750.0 + 34 +0.0 + 0 +DIMENSION + 5 +32BE + 8 +BEMASSUNG + 2 +*D73 + 10 +17615.0 + 20 +25315.0 + 30 +0.0 + 11 +16427.5 + 21 +25490.0 + 31 +0.0 + 1 +2.38 + 13 +15240.0 + 23 +21750.0 + 33 +0.0 + 14 +17615.0 + 24 +21735.0 + 34 +0.0 + 0 +DIMENSION + 5 +32BF + 8 +BEMASSUNG + 2 +*D74 + 10 +17995.0 + 20 +25315.0 + 30 +0.0 + 11 +17805.0 + 21 +25490.0 + 31 +0.0 + 1 +36 + 13 +17615.0 + 23 +21735.0 + 33 +0.0 + 14 +17995.0 + 24 +21745.0 + 34 +0.0 + 0 +DIMENSION + 5 +32C0 + 8 +BEMASSUNG + 2 +*D75 + 10 +22500.0 + 20 +25315.0 + 30 +0.0 + 11 +20247.5 + 21 +25490.0 + 31 +0.0 + 1 +4.51 + 13 +17995.0 + 23 +21745.0 + 33 +0.0 + 14 +22500.0 + 24 +21750.0 + 34 +0.0 + 0 +DIMENSION + 5 +32C1 + 8 +BEMASSUNG + 2 +*D76 + 10 +22865.0 + 20 +25315.0 + 30 +0.0 + 11 +22682.5 + 21 +25490.0 + 31 +0.0 + 1 +36 + 13 +22500.0 + 23 +21750.0 + 33 +0.0 + 14 +22865.0 + 24 +21750.0 + 34 +0.0 + 0 +DIMENSION + 5 +32C2 + 8 +BEMASSUNG + 2 +*D77 + 10 +26370.0 + 20 +25315.0 + 30 +0.0 + 11 +24617.5 + 21 +25490.0 + 31 +0.0 + 1 +3.51 + 13 +22865.0 + 23 +21750.0 + 33 +0.0 + 14 +26370.0 + 24 +21740.0 + 34 +0.0 + 0 +DIMENSION + 5 +32C3 + 8 +BEMASSUNG + 2 +*D78 + 10 +26740.0 + 20 +25315.0 + 30 +0.0 + 11 +26555.0 + 21 +25490.0 + 31 +0.0 + 1 +36 + 13 +26370.0 + 23 +21740.0 + 33 +0.0 + 14 +26740.0 + 24 +22000.0 + 34 +0.0 + 0 +DIMENSION + 5 +32C4 + 8 +BEMASSUNG + 2 +*D67 + 10 +26740.0 + 20 +26015.0 + 30 +0.0 + 11 +15870.0 + 21 +26190.0 + 31 +0.0 + 1 +21.74 + 13 +5000.0 + 23 +22115.0 + 33 +0.0 + 14 +26740.0 + 24 +22115.0 + 34 +0.0 + 0 +DIMENSION + 5 +32C5 + 8 +BEMASSUNG + 2 +*D63 + 10 +3500.0 + 20 +14615.0 + 30 +0.0 + 11 +3325.0 + 21 +11932.5 + 31 +0.0 + 1 +5.36 + 13 +5000.0 + 23 +9250.0 + 33 +0.0 + 14 +5000.0 + 24 +14615.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +32C6 + 8 +BEMASSUNG + 2 +*D59 + 10 +3500.0 + 20 +16125.0 + 30 +0.0 + 11 +3325.0 + 21 +15370.0 + 31 +0.0 + 1 +1.51 + 13 +5000.0 + 23 +14615.0 + 33 +0.0 + 14 +5000.0 + 24 +16125.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +32C7 + 8 +BEMASSUNG + 2 +*D60 + 10 +3500.0 + 20 +18240.0 + 30 +0.0 + 11 +3325.0 + 21 +17182.5 + 31 +0.0 + 1 +2.11 + 13 +5000.0 + 23 +16125.0 + 33 +0.0 + 14 +5000.0 + 24 +18240.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +32C8 + 8 +BEMASSUNG + 2 +*D61 + 10 +3500.0 + 20 +19375.0 + 30 +0.0 + 11 +3325.0 + 21 +18807.5 + 31 +0.0 + 1 +1.13 + 13 +5000.0 + 23 +18240.0 + 33 +0.0 + 14 +5000.0 + 24 +19375.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +32C9 + 8 +BEMASSUNG + 2 +*D62 + 10 +3500.0 + 20 +22115.0 + 30 +0.0 + 11 +3325.0 + 21 +20745.0 + 31 +0.0 + 1 +2.74 + 13 +5000.0 + 23 +19375.0 + 33 +0.0 + 14 +5000.0 + 24 +22115.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +32CA + 8 +BEMASSUNG + 2 +*D64 + 10 +8115.0 + 20 +18105.0 + 30 +0.0 + 11 +6740.0 + 21 +18280.0 + 31 +0.0 + 1 +2.75 + 13 +5365.0 + 23 +17255.0 + 33 +0.0 + 14 +8115.0 + 24 +17255.0 + 34 +0.0 + 0 +DIMENSION + 5 +32CB + 8 +BEMASSUNG + 2 +*D65 + 10 +9005.0 + 20 +18105.0 + 30 +0.0 + 11 +8560.0 + 21 +18280.0 + 31 +0.0 + 1 +88 + 13 +8115.0 + 23 +17255.0 + 33 +0.0 + 14 +9005.0 + 24 +17185.0 + 34 +0.0 + 0 +DIMENSION + 5 +32CC + 8 +BEMASSUNG + 2 +*D66 + 10 +9750.0 + 20 +18105.0 + 30 +0.0 + 11 +9377.5 + 21 +18280.0 + 31 +0.0 + 1 +75 + 13 +9005.0 + 23 +17185.0 + 33 +0.0 + 14 +9750.0 + 24 +18100.0 + 34 +0.0 + 0 +DIMENSION + 5 +32CD + 8 +BEMASSUNG + 2 +*D57 + 10 +7620.0 + 20 +16165.0 + 30 +0.0 + 11 +6495.0 + 21 +16340.0 + 31 +0.0 + 1 +2.25 + 13 +5370.0 + 23 +16875.0 + 33 +0.0 + 14 +7620.0 + 24 +16875.0 + 34 +0.0 + 0 +DIMENSION + 5 +32CE + 8 +BEMASSUNG + 2 +*D58 + 10 +7740.0 + 20 +16165.0 + 30 +0.0 + 11 +7829.5 + 21 +16340.0 + 31 +0.0 + 1 +12 + 13 +7620.0 + 23 +16875.0 + 33 +0.0 + 14 +7740.0 + 24 +16195.0 + 34 +0.0 + 0 +DIMENSION + 5 +32CF + 8 +BEMASSUNG + 2 +*D55 + 10 +12615.0 + 20 +11975.0 + 30 +0.0 + 11 +11180.0 + 21 +12150.0 + 31 +0.0 + 1 +2.87 + 13 +9745.0 + 23 +12370.0 + 33 +0.0 + 14 +12615.0 + 24 +12370.0 + 34 +0.0 + 0 +DIMENSION + 5 +32D0 + 8 +BEMASSUNG + 2 +*D146 + 10 +13880.0 + 20 +11975.0 + 30 +0.0 + 11 +13025.0 + 21 +12150.0 + 31 +0.0 + 70 + 128 + 1 +1.26 + 13 +12615.0 + 23 +12370.0 + 33 +0.0 + 14 +13880.0 + 24 +11955.0 + 34 +0.0 + 0 +DIMENSION + 5 +32D1 + 8 +BEMASSUNG + 2 +*D56 + 10 +14120.0 + 20 +11975.0 + 30 +0.0 + 11 +14000.0 + 21 +12150.0 + 31 +0.0 + 1 +25 + 13 +13880.0 + 23 +11955.0 + 33 +0.0 + 14 +14120.0 + 24 +11975.0 + 34 +0.0 + 0 +TEXT + 5 +32D2 + 8 +BEMASSUNG + 10 +26657.241299 + 20 +25517.290813 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 0 +TEXT + 5 +32D3 + 8 +BEMASSUNG + 10 +24515.928885 + 20 +24822.24712 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 0 +TEXT + 5 +32D4 + 8 +BEMASSUNG + 10 +22779.643546 + 20 +25526.273006 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 0 +TEXT + 5 +32D5 + 8 +BEMASSUNG + 10 +17917.639253 + 20 +25547.220539 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 0 +TEXT + 5 +32D6 + 8 +BEMASSUNG + 10 +15161.804721 + 20 +25526.273006 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 0 +TEXT + 5 +32D7 + 8 +BEMASSUNG + 10 +13778.648316 + 20 +24803.584125 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 0 +TEXT + 5 +32D8 + 8 +BEMASSUNG + 10 +17974.943526 + 20 +24816.921717 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 0 +TEXT + 5 +32D9 + 8 +BEMASSUNG + 10 +21747.188324 + 20 +24806.448018 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 0 +TEXT + 5 +32DA + 8 +BEMASSUNG + 10 +13778.648316 + 20 +24814.057823 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 0 +TEXT + 5 +32DB + 8 +BEMASSUNG + 10 +10027.360287 + 20 +25536.746704 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 0 +TEXT + 5 +32DC + 8 +BEMASSUNG + 10 +7772.360287 + 20 +25536.746704 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 0 +TEXT + 5 +32DD + 8 +BEMASSUNG + 10 +5267.360287 + 20 +25536.746704 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 0 +TEXT + 5 +32DE + 8 +BEMASSUNG + 10 +8675.0 + 20 +18331.746704 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 0 +TEXT + 5 +32DF + 8 +BEMASSUNG + 10 +2610.0 + 20 +22030.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 0 +TEXT + 5 +32E0 + 8 +BEMASSUNG + 10 +2610.0 + 20 +17160.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 0 +TEXT + 5 +32E1 + 8 +BEMASSUNG + 10 +3300.0 + 20 +19020.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 0 +TEXT + 5 +32E2 + 8 +BEMASSUNG + 10 +3300.0 + 20 +17365.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 0 +TEXT + 5 +32E3 + 8 +BEMASSUNG + 10 +2610.0 + 20 +14385.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 0 +TEXT + 5 +32E4 + 8 +BEMASSUNG + 10 +3300.0 + 20 +12135.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 0 +DIMENSION + 5 +32E5 + 8 +BEMASSUNG + 2 +*D90 + 10 +2800.0 + 20 +9615.0 + 30 +0.0 + 11 +2625.0 + 21 +9432.5 + 31 +0.0 + 1 +36 + 13 +5000.0 + 23 +9250.0 + 33 +0.0 + 14 +5000.0 + 24 +9615.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +32E6 + 8 +BEMASSUNG + 2 +*D91 + 10 +2800.0 + 20 +14115.0 + 30 +0.0 + 11 +2625.0 + 21 +11865.0 + 31 +0.0 + 1 +4.51 + 13 +5000.0 + 23 +9615.0 + 33 +0.0 + 14 +5365.0 + 24 +14115.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +32E7 + 8 +BEMASSUNG + 2 +*D92 + 10 +2800.0 + 20 +14475.0 + 30 +0.0 + 11 +2625.0 + 21 +14295.0 + 31 +0.0 + 1 +36 + 13 +5365.0 + 23 +14115.0 + 33 +0.0 + 14 +5390.0 + 24 +14475.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +32E8 + 8 +BEMASSUNG + 2 +*D93 + 10 +2800.0 + 20 +16875.0 + 30 +0.0 + 11 +2625.0 + 21 +15675.0 + 31 +0.0 + 1 +2.38 + 13 +5390.0 + 23 +14475.0 + 33 +0.0 + 14 +5365.0 + 24 +16875.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +32E9 + 8 +BEMASSUNG + 2 +*D94 + 10 +2800.0 + 20 +17235.0 + 30 +0.0 + 11 +2625.0 + 21 +17055.0 + 31 +0.0 + 1 +36 + 13 +5365.0 + 23 +16875.0 + 33 +0.0 + 14 +5375.0 + 24 +17235.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +32EA + 8 +BEMASSUNG + 2 +*D95 + 10 +2800.0 + 20 +21750.0 + 30 +0.0 + 11 +2625.0 + 21 +19492.5 + 31 +0.0 + 1 +4.51 + 13 +5375.0 + 23 +17235.0 + 33 +0.0 + 14 +5355.0 + 24 +21750.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +32EB + 8 +BEMASSUNG + 2 +*D96 + 10 +2800.0 + 20 +22120.0 + 30 +0.0 + 11 +2625.0 + 21 +21935.0 + 31 +0.0 + 1 +36 + 13 +5355.0 + 23 +21750.0 + 33 +0.0 + 14 +5345.0 + 24 +22120.0 + 34 +0.0 + 50 +90.0 + 0 +TEXT + 5 +32EC + 8 +BEMASSUNG + 10 +2610.0 + 20 +15890.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 0 +TEXT + 5 +32ED + 8 +BEMASSUNG + 10 +2610.0 + 20 +9525.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 0 +DIMENSION + 5 +32EE + 8 +BEMASSUNG + 2 +*D97 + 10 +13530.0 + 20 +18105.0 + 30 +0.0 + 11 +11825.0 + 21 +18280.0 + 31 +0.0 + 1 +3.41 + 13 +10120.0 + 23 +17375.0 + 33 +0.0 + 14 +13530.0 + 24 +17375.0 + 34 +0.0 + 0 +DIMENSION + 5 +32EF + 8 +BEMASSUNG + 2 +*D201 + 10 +14560.0 + 20 +18105.0 + 30 +0.0 + 11 +14120.0 + 21 +18280.0 + 31 +0.0 + 70 + 128 + 1 +88 + 13 +13530.0 + 23 +17375.0 + 33 +0.0 + 14 +14560.0 + 24 +17375.0 + 34 +0.0 + 0 +DIMENSION + 5 +32F0 + 8 +BEMASSUNG + 2 +*D98 + 10 +14885.0 + 20 +18105.0 + 30 +0.0 + 11 +14722.5 + 21 +18280.0 + 31 +0.0 + 1 +32 + 13 +14560.0 + 23 +17375.0 + 33 +0.0 + 14 +14885.0 + 24 +17395.0 + 34 +0.0 + 0 +DIMENSION + 5 +32F1 + 8 +BEMASSUNG + 2 +*D99 + 10 +15990.0 + 20 +18110.0 + 30 +0.0 + 11 +15612.5 + 21 +18285.0 + 31 +0.0 + 1 +75 + 13 +15235.0 + 23 +17380.0 + 33 +0.0 + 14 +15990.0 + 24 +17380.0 + 34 +0.0 + 0 +DIMENSION + 5 +32F2 + 8 +BEMASSUNG + 2 +*D100 + 10 +16870.0 + 20 +18110.0 + 30 +0.0 + 11 +16430.0 + 21 +18285.0 + 31 +0.0 + 1 +88 + 13 +15990.0 + 23 +17380.0 + 33 +0.0 + 14 +16870.0 + 24 +17370.0 + 34 +0.0 + 0 +DIMENSION + 5 +32F3 + 8 +BEMASSUNG + 2 +*D101 + 10 +17625.0 + 20 +18110.0 + 30 +0.0 + 11 +17247.5 + 21 +18285.0 + 31 +0.0 + 1 +75 + 13 +16870.0 + 23 +17370.0 + 33 +0.0 + 14 +17625.0 + 24 +17380.0 + 34 +0.0 + 0 +DIMENSION + 5 +32F4 + 8 +BEMASSUNG + 2 +*D102 + 10 +21360.0 + 20 +16810.0 + 30 +0.0 + 11 +19672.5 + 21 +16985.0 + 31 +0.0 + 1 +3.37 + 13 +17985.0 + 23 +16005.0 + 33 +0.0 + 14 +21360.0 + 24 +16005.0 + 34 +0.0 + 0 +DIMENSION + 5 +32F5 + 8 +BEMASSUNG + 2 +*D103 + 10 +22255.0 + 20 +16810.0 + 30 +0.0 + 11 +21807.5 + 21 +16985.0 + 31 +0.0 + 1 +88 + 13 +21360.0 + 23 +16005.0 + 33 +0.0 + 14 +22255.0 + 24 +15975.0 + 34 +0.0 + 0 +DIMENSION + 5 +32F6 + 8 +BEMASSUNG + 2 +*D104 + 10 +22510.0 + 20 +16810.0 + 30 +0.0 + 11 +22382.5 + 21 +16985.0 + 31 +0.0 + 1 +25 + 13 +22255.0 + 23 +15975.0 + 33 +0.0 + 14 +22510.0 + 24 +16010.0 + 34 +0.0 + 0 +TEXT + 5 +32F7 + 8 +BEMASSUNG + 10 +19890.0 + 20 +17015.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +32F8 + 8 +BEMASSUNG + 10 +21950.0 + 20 +17015.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +32F9 + 8 +BEMASSUNG + 10 +16570.0 + 20 +18305.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +32FA + 8 +BEMASSUNG + 10 +14250.0 + 20 +18305.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +DIMENSION + 5 +32FB + 8 +BEMASSUNG + 2 +*D105 + 10 +24520.0 + 20 +16245.0 + 30 +0.0 + 11 +24345.0 + 21 +16115.0 + 31 +0.0 + 1 +25 + 13 +22865.0 + 23 +15985.0 + 33 +0.0 + 14 +22865.0 + 24 +16245.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +32FC + 8 +BEMASSUNG + 2 +*D106 + 10 +24520.0 + 20 +17130.0 + 30 +0.0 + 11 +24345.0 + 21 +16687.5 + 31 +0.0 + 1 +88 + 13 +22865.0 + 23 +16245.0 + 33 +0.0 + 14 +22845.0 + 24 +17130.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +32FD + 8 +BEMASSUNG + 2 +*D107 + 10 +24520.0 + 20 +21740.0 + 30 +0.0 + 11 +24345.0 + 21 +19435.0 + 31 +0.0 + 1 +4.62 + 13 +22845.0 + 23 +17130.0 + 33 +0.0 + 14 +23355.0 + 24 +21740.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +32FE + 8 +BEMASSUNG + 2 +*D108 + 10 +28240.0 + 20 +10360.0 + 30 +0.0 + 11 +28065.0 + 21 +9807.5 + 31 +0.0 + 1 +1.11 + 13 +26740.0 + 23 +9255.0 + 33 +0.0 + 14 +26740.0 + 24 +10360.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +32FF + 8 +BEMASSUNG + 2 +*D109 + 10 +28240.0 + 20 +12010.0 + 30 +0.0 + 11 +28065.0 + 21 +11185.0 + 31 +0.0 + 1 +1.63 + 13 +26740.0 + 23 +10360.0 + 33 +0.0 + 14 +26730.0 + 24 +12010.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +3300 + 8 +BEMASSUNG + 2 +*D110 + 10 +28240.0 + 20 +17730.0 + 30 +0.0 + 11 +28065.0 + 21 +14870.0 + 31 +0.0 + 1 +5.74 + 13 +26730.0 + 23 +12010.0 + 33 +0.0 + 14 +26725.0 + 24 +17730.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +3301 + 8 +BEMASSUNG + 2 +*D111 + 10 +28240.0 + 20 +18385.0 + 30 +0.0 + 11 +28065.0 + 21 +18057.5 + 31 +0.0 + 1 +63 + 13 +26725.0 + 23 +17730.0 + 33 +0.0 + 14 +26720.0 + 24 +18385.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +3302 + 8 +BEMASSUNG + 2 +*D112 + 10 +28240.0 + 20 +22115.0 + 30 +0.0 + 11 +28065.0 + 21 +20250.0 + 31 +0.0 + 1 +3.74 + 13 +26720.0 + 23 +18385.0 + 33 +0.0 + 14 +26725.0 + 24 +22115.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +3303 + 8 +BEMASSUNG + 2 +*D113 + 10 +28940.0 + 20 +9615.0 + 30 +0.0 + 11 +28765.0 + 21 +9435.0 + 31 +0.0 + 1 +36 + 13 +26685.0 + 23 +9255.0 + 33 +0.0 + 14 +26685.0 + 24 +9615.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +3304 + 8 +BEMASSUNG + 2 +*D114 + 10 +28940.0 + 20 +15625.0 + 30 +0.0 + 11 +28765.0 + 21 +12620.0 + 31 +0.0 + 1 +6.01 + 13 +26685.0 + 23 +9615.0 + 33 +0.0 + 14 +26365.0 + 24 +15625.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +3305 + 8 +BEMASSUNG + 2 +*D115 + 10 +28940.0 + 20 +15995.0 + 30 +0.0 + 11 +28765.0 + 21 +15810.0 + 31 +0.0 + 1 +36 + 13 +26365.0 + 23 +15625.0 + 33 +0.0 + 14 +26365.0 + 24 +15995.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +3306 + 8 +BEMASSUNG + 2 +*D116 + 10 +28940.0 + 20 +21745.0 + 30 +0.0 + 11 +28765.0 + 21 +18870.0 + 31 +0.0 + 1 +5.76 + 13 +26365.0 + 23 +15995.0 + 33 +0.0 + 14 +26370.0 + 24 +21745.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +3307 + 8 +BEMASSUNG + 2 +*D117 + 10 +28940.0 + 20 +22115.0 + 30 +0.0 + 11 +28765.0 + 21 +21930.0 + 31 +0.0 + 1 +36 + 13 +26370.0 + 23 +21745.0 + 33 +0.0 + 14 +26380.0 + 24 +22115.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +3308 + 8 +BEMASSUNG + 2 +*D118 + 10 +29640.0 + 20 +22115.0 + 30 +0.0 + 11 +29465.0 + 21 +15685.0 + 31 +0.0 + 1 +12.86 + 13 +26720.0 + 23 +9255.0 + 33 +0.0 + 14 +26720.0 + 24 +22115.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +3309 + 8 +BEMASSUNG + 2 +*D119 + 10 +24520.0 + 20 +15240.0 + 30 +0.0 + 11 +24345.0 + 21 +15432.5 + 31 +0.0 + 1 +40 + 13 +22975.0 + 23 +15625.0 + 33 +0.0 + 14 +22975.0 + 24 +15240.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +330A + 8 +BEMASSUNG + 2 +*D120 + 10 +24520.0 + 20 +14360.0 + 30 +0.0 + 11 +24345.0 + 21 +14800.0 + 31 +0.0 + 1 +88 + 13 +22975.0 + 23 +15240.0 + 33 +0.0 + 14 +22960.0 + 24 +14360.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +330B + 8 +BEMASSUNG + 2 +*D121 + 10 +24520.0 + 20 +9625.0 + 30 +0.0 + 11 +24345.0 + 21 +11992.5 + 31 +0.0 + 1 +4.72 + 13 +22960.0 + 23 +14360.0 + 33 +0.0 + 14 +24375.0 + 24 +9625.0 + 34 +0.0 + 50 +90.0 + 0 +TEXT + 5 +330C + 8 +BEMASSUNG + 10 +24345.0 + 20 +12215.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +330D + 8 +BEMASSUNG + 10 +24345.0 + 20 +14955.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +330E + 8 +BEMASSUNG + 10 +28045.0 + 20 +11410.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +330F + 8 +BEMASSUNG + 10 +28045.0 + 20 +9975.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3310 + 8 +BEMASSUNG + 10 +28735.0 + 20 +9520.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3311 + 8 +BEMASSUNG + 10 +29445.0 + 20 +15915.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3312 + 8 +BEMASSUNG + 10 +28740.0 + 20 +15895.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3313 + 8 +BEMASSUNG + 10 +28045.0 + 20 +18230.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3314 + 8 +BEMASSUNG + 10 +28735.0 + 20 +22015.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3315 + 8 +BEMASSUNG + 10 +24345.0 + 20 +16845.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3316 + 8 +BEMASSUNG + 10 +24345.0 + 20 +19675.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 0 +DIMENSION + 5 +3317 + 8 +BEMASSUNG + 2 +*D128 + 10 +8415.0 + 20 +15585.0 + 30 +0.0 + 11 +8240.0 + 21 +15037.5 + 31 +0.0 + 1 +1.10 + 13 +7730.0 + 23 +14490.0 + 33 +0.0 + 14 +7730.0 + 24 +15585.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +3318 + 8 +BEMASSUNG + 2 +*D127 + 10 +8415.0 + 20 +16490.0 + 30 +0.0 + 11 +8240.0 + 21 +16037.5 + 31 +0.0 + 1 +88 + 13 +7730.0 + 23 +15585.0 + 33 +0.0 + 14 +7730.0 + 24 +16490.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +3319 + 8 +BEMASSUNG + 2 +*D126 + 10 +8415.0 + 20 +16880.0 + 30 +0.0 + 11 +8240.0 + 21 +16685.0 + 31 +0.0 + 1 +40 + 13 +7730.0 + 23 +16490.0 + 33 +0.0 + 14 +8115.0 + 24 +16880.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +331A + 8 +BEMASSUNG + 2 +*D131 + 10 +8405.0 + 20 +19980.0 + 30 +0.0 + 11 +8230.0 + 21 +18622.5 + 31 +0.0 + 1 + 2.75 + 13 +9750.0 + 23 +17265.0 + 33 +0.0 + 14 +9750.0 + 24 +19980.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +331B + 8 +BEMASSUNG + 2 +*D129 + 10 +8405.0 + 20 +20875.0 + 30 +0.0 + 11 +8230.0 + 21 +20427.5 + 31 +0.0 + 1 +88 + 13 +9750.0 + 23 +19980.0 + 33 +0.0 + 14 +9755.0 + 24 +20875.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +331C + 8 +BEMASSUNG + 2 +*D130 + 10 +8405.0 + 20 +21750.0 + 30 +0.0 + 11 +8230.0 + 21 +21312.5 + 31 +0.0 + 1 +87 + 13 +9755.0 + 23 +20875.0 + 33 +0.0 + 14 +9740.0 + 24 +21750.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +331D + 8 +BEMASSUNG + 2 +*D122 + 10 +13890.0 + 20 +17375.0 + 30 +0.0 + 11 +13715.0 + 21 +17464.5 + 31 +0.0 + 1 +12 + 13 +14555.0 + 23 +17245.0 + 33 +0.0 + 14 +14555.0 + 24 +17375.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +331E + 8 +BEMASSUNG + 2 +*D123 + 10 +13890.0 + 20 +21750.0 + 30 +0.0 + 11 +13715.0 + 21 +19562.5 + 31 +0.0 + 1 +4.37 + 13 +14555.0 + 23 +17375.0 + 33 +0.0 + 14 +13890.0 + 24 +21750.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +331F + 8 +BEMASSUNG + 2 +*D124 + 10 +10725.0 + 20 +15740.0 + 30 +0.0 + 11 +10550.0 + 21 +15612.5 + 31 +0.0 + 1 +25 + 13 +10130.0 + 23 +15485.0 + 33 +0.0 + 14 +10130.0 + 24 +15740.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +3320 + 8 +BEMASSUNG + 2 +*D135 + 10 +10725.0 + 20 +16625.0 + 30 +0.0 + 11 +10550.0 + 21 +15980.0 + 31 +0.0 + 70 + 128 + 1 +88 + 13 +10130.0 + 23 +15740.0 + 33 +0.0 + 14 +10115.0 + 24 +16625.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +3321 + 8 +BEMASSUNG + 2 +*D125 + 10 +10725.0 + 20 +17255.0 + 30 +0.0 + 11 +10550.0 + 21 +16940.0 + 31 +0.0 + 1 +62 + 13 +10115.0 + 23 +16625.0 + 33 +0.0 + 14 +10715.0 + 24 +17255.0 + 34 +0.0 + 50 +90.0 + 0 +TEXT + 5 +3322 + 8 +BEMASSUNG + 10 +8098.253296 + 20 +20592.360287 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 0 +TEXT + 5 +3323 + 8 +BEMASSUNG + 10 +8098.253296 + 20 +21482.360287 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 0 +TEXT + 5 +3324 + 8 +BEMASSUNG + 10 +8220.0 + 20 +16167.360287 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 0 +TEXT + 5 +3325 + 8 +BEMASSUNG + 10 +13693.253296 + 20 +19837.360287 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 0 +TEXT + 5 +3326 + 8 +BEMASSUNG + 10 +13693.253296 + 20 +17622.360287 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 0 +TEXT + 5 +3327 + 8 +BEMASSUNG + 10 +10515.0 + 20 +16120.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 0 +TEXT + 5 +3328 + 8 +BEMASSUNG + 10 +10528.253296 + 20 +17087.360287 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 0 +TEXT + 5 +3329 + 8 +BEMASSUNG + 10 +7950.0 + 20 +16366.746704 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 0 +DIMENSION + 5 +332A + 8 +BEMASSUNG + 2 +*D136 + 10 +15745.0 + 20 +16480.0 + 30 +0.0 + 11 +12925.0 + 21 +16655.0 + 31 +0.0 + 1 +5.63 + 13 +10105.0 + 23 +15495.0 + 33 +0.0 + 14 +15745.0 + 24 +15495.0 + 34 +0.0 + 0 +DIMENSION + 5 +332B + 8 +BEMASSUNG + 2 +*D132 + 10 +16375.0 + 20 +16480.0 + 30 +0.0 + 11 +16060.0 + 21 +16655.0 + 31 +0.0 + 1 +61 + 13 +15745.0 + 23 +15815.0 + 33 +0.0 + 14 +16375.0 + 24 +15815.0 + 34 +0.0 + 0 +DIMENSION + 5 +332C + 8 +BEMASSUNG + 2 +*D134 + 10 +17385.0 + 20 +16480.0 + 30 +0.0 + 11 +16880.0 + 21 +16655.0 + 31 +0.0 + 1 +1.01 + 13 +16375.0 + 23 +15815.0 + 33 +0.0 + 14 +17385.0 + 24 +15975.0 + 34 +0.0 + 0 +DIMENSION + 5 +332D + 8 +BEMASSUNG + 2 +*D133 + 10 +17635.0 + 20 +16480.0 + 30 +0.0 + 11 +17510.0 + 21 +16655.0 + 31 +0.0 + 1 +25 + 13 +17385.0 + 23 +15975.0 + 33 +0.0 + 14 +17635.0 + 24 +16015.0 + 34 +0.0 + 0 +DIMENSION + 5 +332E + 8 +BEMASSUNG + 2 +*D137 + 10 +18650.0 + 20 +18980.0 + 30 +0.0 + 11 +18475.0 + 21 +20362.5 + 31 +0.0 + 1 +2.76 + 13 +17990.0 + 23 +21745.0 + 33 +0.0 + 14 +17990.0 + 24 +18980.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +332F + 8 +BEMASSUNG + 2 +*D138 + 10 +18650.0 + 20 +17490.0 + 30 +0.0 + 11 +18475.0 + 21 +18235.0 + 31 +0.0 + 1 +1.49 + 13 +17990.0 + 23 +18980.0 + 33 +0.0 + 14 +17990.0 + 24 +17490.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +3330 + 8 +BEMASSUNG + 2 +*D139 + 10 +15005.0 + 20 +15995.0 + 30 +0.0 + 11 +14830.0 + 21 +15740.0 + 31 +0.0 + 1 +50 + 13 +15005.0 + 23 +15485.0 + 33 +0.0 + 14 +15005.0 + 24 +15995.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +3331 + 8 +BEMASSUNG + 2 +*D140 + 10 +15005.0 + 20 +17250.0 + 30 +0.0 + 11 +14830.0 + 21 +16755.0 + 31 +0.0 + 70 + 128 + 1 +1.26 + 13 +15005.0 + 23 +15995.0 + 33 +0.0 + 14 +15010.0 + 24 +17250.0 + 34 +0.0 + 50 +90.0 + 0 +TEXT + 5 +3332 + 8 +BEMASSUNG + 10 +13170.0 + 20 +16685.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3333 + 8 +BEMASSUNG + 10 +16175.0 + 20 +16685.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +DIMENSION + 5 +3334 + 8 +BEMASSUNG + 2 +*D141 + 10 +8745.0 + 20 +12740.0 + 30 +0.0 + 11 +8570.0 + 21 +11175.0 + 31 +0.0 + 1 +3.12 + 13 +9010.0 + 23 +9610.0 + 33 +0.0 + 14 +9010.0 + 24 +12740.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +3335 + 8 +BEMASSUNG + 2 +*D142 + 10 +8745.0 + 20 +12995.0 + 30 +0.0 + 11 +8570.0 + 21 +12867.5 + 31 +0.0 + 1 +25 + 13 +9010.0 + 23 +12740.0 + 33 +0.0 + 14 +9745.0 + 24 +12995.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +3336 + 8 +BEMASSUNG + 2 +*D143 + 10 +8745.0 + 20 +13875.0 + 30 +0.0 + 11 +8570.0 + 21 +13435.0 + 31 +0.0 + 1 +88 + 13 +9745.0 + 23 +12995.0 + 33 +0.0 + 14 +9755.0 + 24 +13875.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +3337 + 8 +BEMASSUNG + 2 +*D144 + 10 +8745.0 + 20 +14130.0 + 30 +0.0 + 11 +8570.0 + 21 +14002.5 + 31 +0.0 + 1 +25 + 13 +9755.0 + 23 +13875.0 + 33 +0.0 + 14 +9735.0 + 24 +14130.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +3338 + 8 +BEMASSUNG + 2 +*D145 + 10 +9745.0 + 20 +13450.0 + 30 +0.0 + 11 +9557.5 + 21 +13625.0 + 31 +0.0 + 1 +37 + 13 +9370.0 + 23 +12745.0 + 33 +0.0 + 14 +9745.0 + 24 +12745.0 + 34 +0.0 + 0 +DIMENSION + 5 +3339 + 8 +BEMASSUNG + 2 +*D147 + 10 +13590.0 + 20 +12375.0 + 30 +0.0 + 11 +13415.0 + 21 +10992.5 + 31 +0.0 + 1 +2.76 + 13 +13775.0 + 23 +9610.0 + 33 +0.0 + 14 +13775.0 + 24 +12375.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +333A + 8 +BEMASSUNG + 2 +*D148 + 10 +13590.0 + 20 +12745.0 + 30 +0.0 + 11 +13415.0 + 21 +12560.0 + 31 +0.0 + 1 +36 + 13 +13775.0 + 23 +12375.0 + 33 +0.0 + 14 +13875.0 + 24 +12745.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +333B + 8 +BEMASSUNG + 2 +*D149 + 10 +13590.0 + 20 +13500.0 + 30 +0.0 + 11 +13415.0 + 21 +13122.5 + 31 +0.0 + 1 +76 + 13 +13880.0 + 23 +12745.0 + 33 +0.0 + 14 +13880.0 + 24 +13500.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +333C + 8 +BEMASSUNG + 2 +*D150 + 10 +13590.0 + 20 +13870.0 + 30 +0.0 + 11 +13415.0 + 21 +13685.0 + 31 +0.0 + 1 +36 + 13 +13880.0 + 23 +13500.0 + 33 +0.0 + 14 +14125.0 + 24 +13870.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +333D + 8 +BEMASSUNG + 2 +*D151 + 10 +14620.0 + 20 +11975.0 + 30 +0.0 + 11 +14709.5 + 21 +12150.0 + 31 +0.0 + 1 +12 + 13 +14485.0 + 23 +13495.0 + 33 +0.0 + 14 +14620.0 + 24 +13495.0 + 34 +0.0 + 0 +DIMENSION + 5 +333E + 8 +BEMASSUNG + 2 +*D165 + 10 +15505.0 + 20 +11975.0 + 30 +0.0 + 11 +15140.0 + 21 +12150.0 + 31 +0.0 + 70 + 128 + 1 +88 + 13 +14620.0 + 23 +13495.0 + 33 +0.0 + 14 +15505.0 + 24 +11975.0 + 34 +0.0 + 0 +DIMENSION + 5 +333F + 8 +BEMASSUNG + 2 +*D152 + 10 +17620.0 + 20 +11975.0 + 30 +0.0 + 11 +16562.5 + 21 +12150.0 + 31 +0.0 + 1 +2.12 + 13 +15505.0 + 23 +11975.0 + 33 +0.0 + 14 +17620.0 + 24 +11975.0 + 34 +0.0 + 0 +TEXT + 5 +3340 + 8 +BEMASSUNG + 10 +11410.0 + 20 +12165.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3341 + 8 +BEMASSUNG + 10 +14815.0 + 20 +12165.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3342 + 8 +BEMASSUNG + 10 +15265.0 + 20 +12165.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3343 + 8 +BEMASSUNG + 10 +16775.0 + 20 +12165.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3344 + 8 +BEMASSUNG + 10 +9660.0 + 20 +13655.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3345 + 8 +BEMASSUNG + 10 +8545.0 + 20 +11432.360287 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 0 +TEXT + 5 +3346 + 8 +BEMASSUNG + 10 +8545.0 + 20 +13587.360287 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 0 +TEXT + 5 +3347 + 8 +BEMASSUNG + 10 +13385.0 + 20 +12657.360287 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 0 +TEXT + 5 +3348 + 8 +BEMASSUNG + 10 +13385.0 + 20 +13777.360287 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 0 +DIMENSION + 5 +3349 + 8 +BEMASSUNG + 2 +*D153 + 10 +16955.0 + 20 +13500.0 + 30 +0.0 + 11 +16780.0 + 21 +11120.0 + 31 +0.0 + 70 + 128 + 1 +3.88 + 13 +17360.0 + 23 +9625.0 + 33 +0.0 + 14 +17360.0 + 24 +13500.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +334A + 8 +BEMASSUNG + 2 +*D154 + 10 +16850.0 + 20 +15490.0 + 30 +0.0 + 11 +16675.0 + 21 +15755.0 + 31 +0.0 + 70 + 128 + 1 +13 + 13 +16120.0 + 23 +15635.0 + 33 +0.0 + 14 +16120.0 + 24 +15490.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +334B + 8 +BEMASSUNG + 2 +*D166 + 10 +16850.0 + 20 +14995.0 + 30 +0.0 + 11 +16675.0 + 21 +15235.0 + 31 +0.0 + 70 + 128 + 1 +12 + 13 +15740.0 + 23 +15120.0 + 33 +0.0 + 14 +16110.0 + 24 +14995.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +334C + 8 +BEMASSUNG + 2 +*D167 + 10 +16850.0 + 20 +13975.0 + 30 +0.0 + 11 +16675.0 + 21 +14595.0 + 31 +0.0 + 70 + 128 + 1 +1.01 + 13 +16110.0 + 23 +14995.0 + 33 +0.0 + 14 +16125.0 + 24 +13975.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +334D + 8 +BEMASSUNG + 2 +*D155 + 10 +16850.0 + 20 +13865.0 + 30 +0.0 + 11 +16675.0 + 21 +14100.0 + 31 +0.0 + 70 + 128 + 1 +12 + 13 +16125.0 + 23 +13975.0 + 33 +0.0 + 14 +16120.0 + 24 +13865.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +334E + 8 +BEMASSUNG + 2 +*D156 + 10 +16105.0 + 20 +14495.0 + 30 +0.0 + 11 +15925.0 + 21 +14670.0 + 31 +0.0 + 1 +36 + 13 +15745.0 + 23 +13980.0 + 33 +0.0 + 14 +16105.0 + 24 +13980.0 + 34 +0.0 + 0 +DIMENSION + 5 +334F + 8 +BEMASSUNG + 2 +*D161 + 10 +21880.0 + 20 +15250.0 + 30 +0.0 + 11 +21705.0 + 21 +15390.0 + 31 +0.0 + 70 + 128 + 1 +37 + 13 +21235.0 + 23 +15635.0 + 33 +0.0 + 14 +21235.0 + 24 +15250.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +3350 + 8 +BEMASSUNG + 2 +*D159 + 10 +21880.0 + 20 +14245.0 + 30 +0.0 + 11 +21705.0 + 21 +14915.0 + 31 +0.0 + 70 + 128 + 1 +1.01 + 13 +21235.0 + 23 +15250.0 + 33 +0.0 + 14 +21225.0 + 24 +14245.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +3351 + 8 +BEMASSUNG + 2 +*D160 + 10 +21880.0 + 20 +14045.0 + 30 +0.0 + 11 +21705.0 + 21 +14390.0 + 31 +0.0 + 70 + 128 + 1 +20 + 13 +21225.0 + 23 +14245.0 + 33 +0.0 + 14 +21560.0 + 24 +14045.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +3352 + 8 +BEMASSUNG + 2 +*D158 + 10 +21880.0 + 20 +13915.0 + 30 +0.0 + 11 +21705.0 + 21 +13715.0 + 31 +0.0 + 70 + 128 + 1 +12 + 13 +21560.0 + 23 +14045.0 + 33 +0.0 + 14 +21565.0 + 24 +13915.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +3353 + 8 +BEMASSUNG + 2 +*D157 + 10 +21880.0 + 20 +9625.0 + 30 +0.0 + 11 +21705.0 + 21 +11770.0 + 31 +0.0 + 1 +4.30 + 13 +21565.0 + 23 +13915.0 + 33 +0.0 + 14 +21855.0 + 24 +9625.0 + 34 +0.0 + 50 +90.0 + 0 +TEXT + 5 +3354 + 8 +BEMASSUNG + 10 +21705.0 + 20 +13820.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3355 + 8 +BEMASSUNG + 10 +21705.0 + 20 +15525.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 0 +DIMENSION + 5 +3356 + 8 +BEMASSUNG + 2 +*D164 + 10 +21565.0 + 20 +12880.0 + 30 +0.0 + 11 +21380.0 + 21 +13055.0 + 31 +0.0 + 70 + 128 + 1 +32 + 13 +21235.0 + 23 +13920.0 + 33 +0.0 + 14 +21565.0 + 24 +13920.0 + 34 +0.0 + 0 +DIMENSION + 5 +3357 + 8 +BEMASSUNG + 2 +*D163 + 10 +22455.0 + 20 +12880.0 + 30 +0.0 + 11 +22140.0 + 21 +13055.0 + 31 +0.0 + 70 + 128 + 1 +88 + 13 +21565.0 + 23 +13920.0 + 33 +0.0 + 14 +22455.0 + 24 +13925.0 + 34 +0.0 + 0 +DIMENSION + 5 +3358 + 8 +BEMASSUNG + 2 +*D162 + 10 +22850.0 + 20 +12880.0 + 30 +0.0 + 11 +22652.5 + 21 +13055.0 + 31 +0.0 + 1 +40 + 13 +22455.0 + 23 +13925.0 + 33 +0.0 + 14 +22850.0 + 24 +12875.0 + 34 +0.0 + 0 +TEXT + 5 +3359 + 8 +BEMASSUNG + 10 +16010.0 + 20 +14710.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +335A + 8 +BEMASSUNG + 10 +22275.0 + 20 +13100.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +335B + 8 +BEMASSUNG + 10 +21475.0 + 20 +13110.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +335C + 8 +BEMASSUNG + 10 +16775.0 + 20 +11355.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +335D + 8 +BEMASSUNG + 10 +16665.0 + 20 +14210.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +335E + 8 +BEMASSUNG + 10 +14785.0 + 20 +14980.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +335F + 8 +BEMASSUNG + 10 +16665.0 + 20 +15355.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3360 + 8 +BEMASSUNG + 10 +16665.0 + 20 +15860.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 0 +DIMENSION + 5 +3361 + 8 +BEMASSUNG + 2 +*D168 + 10 +15005.0 + 20 +15115.0 + 30 +0.0 + 11 +14815.0 + 21 +14875.0 + 31 +0.0 + 70 + 128 + 1 +36 + 13 +15005.0 + 23 +15485.0 + 33 +0.0 + 14 +15005.0 + 24 +15115.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +3362 + 8 +BEMASSUNG + 2 +*D169 + 10 +7735.0 + 20 +6000.0 + 30 +0.0 + 11 +6367.5 + 21 +6175.0 + 31 +0.0 + 1 +2.74 + 13 +5000.0 + 23 +9250.0 + 33 +0.0 + 14 +7735.0 + 24 +9250.0 + 34 +0.0 + 0 +DIMENSION + 5 +3363 + 8 +BEMASSUNG + 2 +*D170 + 10 +8750.0 + 20 +6000.0 + 30 +0.0 + 11 +8242.5 + 21 +6175.0 + 31 +0.0 + 1 +1.01 + 13 +7735.0 + 23 +9250.0 + 33 +0.0 + 14 +8750.0 + 24 +9275.0 + 34 +0.0 + 0 +DIMENSION + 5 +3364 + 8 +BEMASSUNG + 2 +*D171 + 10 +9865.0 + 20 +6000.0 + 30 +0.0 + 11 +9307.5 + 21 +6175.0 + 31 +0.0 + 1 +1.11 + 13 +8750.0 + 23 +9275.0 + 33 +0.0 + 14 +9865.0 + 24 +9460.0 + 34 +0.0 + 0 +DIMENSION + 5 +3365 + 8 +BEMASSUNG + 2 +*D172 + 10 +11240.0 + 20 +6000.0 + 30 +0.0 + 11 +10552.5 + 21 +6175.0 + 31 +0.0 + 1 +1.38 + 13 +9865.0 + 23 +9460.0 + 33 +0.0 + 14 +11240.0 + 24 +9435.0 + 34 +0.0 + 0 +DIMENSION + 5 +3366 + 8 +BEMASSUNG + 2 +*D173 + 10 +16110.0 + 20 +6000.0 + 30 +0.0 + 11 +13675.0 + 21 +6175.0 + 31 +0.0 + 1 +4.86 + 13 +11240.0 + 23 +9435.0 + 33 +0.0 + 14 +16110.0 + 24 +9380.0 + 34 +0.0 + 0 +DIMENSION + 5 +3367 + 8 +BEMASSUNG + 2 +*D174 + 10 +17370.0 + 20 +6000.0 + 30 +0.0 + 11 +16740.0 + 21 +6175.0 + 31 +0.0 + 1 +1.26 + 13 +16110.0 + 23 +9380.0 + 33 +0.0 + 14 +17370.0 + 24 +9460.0 + 34 +0.0 + 0 +DIMENSION + 5 +3368 + 8 +BEMASSUNG + 2 +*D175 + 10 +18495.0 + 20 +6000.0 + 30 +0.0 + 11 +17932.5 + 21 +6175.0 + 31 +0.0 + 1 +1.11 + 13 +17370.0 + 23 +9460.0 + 33 +0.0 + 14 +18495.0 + 24 +9420.0 + 34 +0.0 + 0 +DIMENSION + 5 +3369 + 8 +BEMASSUNG + 2 +*D176 + 10 +20370.0 + 20 +6000.0 + 30 +0.0 + 11 +19432.5 + 21 +6175.0 + 31 +0.0 + 1 +1.88 + 13 +18495.0 + 23 +9420.0 + 33 +0.0 + 14 +20370.0 + 24 +9390.0 + 34 +0.0 + 0 +DIMENSION + 5 +336A + 8 +BEMASSUNG + 2 +*D177 + 10 +21370.0 + 20 +6000.0 + 30 +0.0 + 11 +20870.0 + 21 +6175.0 + 31 +0.0 + 1 +99 + 13 +20370.0 + 23 +9390.0 + 33 +0.0 + 14 +21370.0 + 24 +9355.0 + 34 +0.0 + 0 +DIMENSION + 5 +336B + 8 +BEMASSUNG + 2 +*D178 + 10 +21870.0 + 20 +6000.0 + 30 +0.0 + 11 +21620.0 + 21 +6175.0 + 31 +0.0 + 1 +51 + 13 +21370.0 + 23 +9355.0 + 33 +0.0 + 14 +21870.0 + 24 +9360.0 + 34 +0.0 + 0 +DIMENSION + 5 +336C + 8 +BEMASSUNG + 2 +*D179 + 10 +23240.0 + 20 +6000.0 + 30 +0.0 + 11 +22555.0 + 21 +6175.0 + 31 +0.0 + 1 +1.36 + 13 +21870.0 + 23 +9360.0 + 33 +0.0 + 14 +23240.0 + 24 +9370.0 + 34 +0.0 + 0 +DIMENSION + 5 +336D + 8 +BEMASSUNG + 2 +*D180 + 10 +25375.0 + 20 +6000.0 + 30 +0.0 + 11 +24307.5 + 21 +6175.0 + 31 +0.0 + 1 +2.13 + 13 +23240.0 + 23 +9370.0 + 33 +0.0 + 14 +25375.0 + 24 +9440.0 + 34 +0.0 + 0 +DIMENSION + 5 +336E + 8 +BEMASSUNG + 2 +*D181 + 10 +26740.0 + 20 +6000.0 + 30 +0.0 + 11 +26057.5 + 21 +6175.0 + 31 +0.0 + 1 +1.36 + 13 +25375.0 + 23 +9440.0 + 33 +0.0 + 14 +26740.0 + 24 +9330.0 + 34 +0.0 + 0 +DIMENSION + 5 +336F + 8 +BEMASSUNG + 2 +*D182 + 10 +5365.0 + 20 +5300.0 + 30 +0.0 + 11 +5182.5 + 21 +5475.0 + 31 +0.0 + 1 +36 + 13 +5000.0 + 23 +9250.0 + 33 +0.0 + 14 +5365.0 + 24 +9250.0 + 34 +0.0 + 0 +DIMENSION + 5 +3370 + 8 +BEMASSUNG + 2 +*D183 + 10 +9375.0 + 20 +5300.0 + 30 +0.0 + 11 +7370.0 + 21 +5475.0 + 31 +0.0 + 1 +4.01 + 13 +5365.0 + 23 +9250.0 + 33 +0.0 + 14 +9375.0 + 24 +9645.0 + 34 +0.0 + 0 +DIMENSION + 5 +3371 + 8 +BEMASSUNG + 2 +*D194 + 10 +9750.0 + 20 +5300.0 + 30 +0.0 + 11 +9562.5 + 21 +5475.0 + 31 +0.0 + 70 + 128 + 1 +36 + 13 +9375.0 + 23 +9645.0 + 33 +0.0 + 14 +9750.0 + 24 +9635.0 + 34 +0.0 + 0 +DIMENSION + 5 +3372 + 8 +BEMASSUNG + 2 +*D184 + 10 +14125.0 + 20 +5300.0 + 30 +0.0 + 11 +11937.5 + 21 +5475.0 + 31 +0.0 + 1 +4.38 + 13 +9750.0 + 23 +9635.0 + 33 +0.0 + 14 +14125.0 + 24 +9650.0 + 34 +0.0 + 0 +DIMENSION + 5 +3373 + 8 +BEMASSUNG + 2 +*D185 + 10 +14500.0 + 20 +5300.0 + 30 +0.0 + 11 +14312.5 + 21 +5475.0 + 31 +0.0 + 1 +36 + 13 +14125.0 + 23 +9650.0 + 33 +0.0 + 14 +14500.0 + 24 +9660.0 + 34 +0.0 + 0 +DIMENSION + 5 +3374 + 8 +BEMASSUNG + 2 +*D186 + 10 +17630.0 + 20 +5300.0 + 30 +0.0 + 11 +16065.0 + 21 +5475.0 + 31 +0.0 + 1 +3.13 + 13 +14500.0 + 23 +9660.0 + 33 +0.0 + 14 +17630.0 + 24 +9660.0 + 34 +0.0 + 0 +DIMENSION + 5 +3375 + 8 +BEMASSUNG + 2 +*D187 + 10 +18000.0 + 20 +5300.0 + 30 +0.0 + 11 +17815.0 + 21 +5475.0 + 31 +0.0 + 1 +36 + 13 +17630.0 + 23 +9660.0 + 33 +0.0 + 14 +18000.0 + 24 +9630.0 + 34 +0.0 + 0 +DIMENSION + 5 +3376 + 8 +BEMASSUNG + 2 +*D188 + 10 +20870.0 + 20 +5300.0 + 30 +0.0 + 11 +19435.0 + 21 +5475.0 + 31 +0.0 + 1 +2.88 + 13 +18000.0 + 23 +9630.0 + 33 +0.0 + 14 +20870.0 + 24 +9630.0 + 34 +0.0 + 0 +DIMENSION + 5 +3377 + 8 +BEMASSUNG + 2 +*D189 + 10 +21240.0 + 20 +5300.0 + 30 +0.0 + 11 +21055.0 + 21 +5475.0 + 31 +0.0 + 1 +36 + 13 +20870.0 + 23 +9630.0 + 33 +0.0 + 14 +21240.0 + 24 +9660.0 + 34 +0.0 + 0 +DIMENSION + 5 +3378 + 8 +BEMASSUNG + 2 +*D190 + 10 +22850.0 + 20 +5300.0 + 30 +0.0 + 11 +22045.0 + 21 +5475.0 + 31 +0.0 + 1 +1.61 + 13 +21240.0 + 23 +9660.0 + 33 +0.0 + 14 +22850.0 + 24 +9645.0 + 34 +0.0 + 0 +DIMENSION + 5 +3379 + 8 +BEMASSUNG + 2 +*D193 + 10 +22975.0 + 20 +5300.0 + 30 +0.0 + 11 +23095.0 + 21 +5475.0 + 31 +0.0 + 70 + 128 + 1 +12 + 13 +22850.0 + 23 +9645.0 + 33 +0.0 + 14 +22975.0 + 24 +9650.0 + 34 +0.0 + 0 +DIMENSION + 5 +337A + 8 +BEMASSUNG + 2 +*D191 + 10 +26375.0 + 20 +5300.0 + 30 +0.0 + 11 +24675.0 + 21 +5475.0 + 31 +0.0 + 1 +3.40 + 13 +22975.0 + 23 +9650.0 + 33 +0.0 + 14 +26375.0 + 24 +9670.0 + 34 +0.0 + 0 +DIMENSION + 5 +337B + 8 +BEMASSUNG + 2 +*D192 + 10 +26740.0 + 20 +5300.0 + 30 +0.0 + 11 +26557.5 + 21 +5475.0 + 31 +0.0 + 1 +36 + 13 +26375.0 + 23 +9670.0 + 33 +0.0 + 14 +26740.0 + 24 +9690.0 + 34 +0.0 + 0 +TEXT + 5 +337C + 8 +BEMASSUNG + 10 +13900.0 + 20 +6185.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +337D + 8 +BEMASSUNG + 10 +10780.0 + 20 +6185.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +337E + 8 +BEMASSUNG + 10 +9485.0 + 20 +6185.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +337F + 8 +BEMASSUNG + 10 +18125.0 + 20 +6185.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3380 + 8 +BEMASSUNG + 10 +9650.0 + 20 +5510.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3381 + 8 +BEMASSUNG + 10 +12185.0 + 20 +5510.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3382 + 8 +BEMASSUNG + 10 +14410.0 + 20 +5510.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3383 + 8 +BEMASSUNG + 10 +16275.0 + 20 +5510.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3384 + 8 +BEMASSUNG + 10 +17915.0 + 20 +5510.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3385 + 8 +BEMASSUNG + 10 +19675.0 + 20 +5510.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3386 + 8 +BEMASSUNG + 10 +19640.0 + 20 +6185.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3387 + 8 +BEMASSUNG + 10 +22745.0 + 20 +6185.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3388 + 8 +BEMASSUNG + 10 +24530.0 + 20 +6185.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3389 + 8 +BEMASSUNG + 10 +26255.0 + 20 +6185.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +338A + 8 +BEMASSUNG + 10 +21140.0 + 20 +5510.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +338B + 8 +BEMASSUNG + 10 +26655.0 + 20 +5510.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +338C + 8 +BEMASSUNG + 10 +5265.0 + 20 +5510.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +DIMENSION + 5 +338D + 8 +BEMASSUNG + 2 +*D196 + 10 +5855.0 + 20 +8070.0 + 30 +0.0 + 11 +5275.0 + 21 +8245.0 + 31 +0.0 + 70 + 128 + 1 +85 + 13 +4990.0 + 23 +9300.0 + 33 +0.0 + 14 +5855.0 + 24 +9300.0 + 34 +0.0 + 0 +DIMENSION + 5 +338E + 8 +BEMASSUNG + 2 +*D195 + 10 +8855.0 + 20 +8070.0 + 30 +0.0 + 11 +7630.0 + 21 +8245.0 + 31 +0.0 + 70 + 128 + 1 +3.00 + 13 +5855.0 + 23 +9300.0 + 33 +0.0 + 14 +8855.0 + 24 +8125.0 + 34 +0.0 + 0 +DIMENSION + 5 +338F + 8 +BEMASSUNG + 2 +*D197 + 10 +2800.0 + 20 +7645.0 + 30 +0.0 + 11 +2625.0 + 21 +8447.5 + 31 +0.0 + 1 +1.60 + 13 +5000.0 + 23 +9250.0 + 33 +0.0 + 14 +5000.0 + 24 +7645.0 + 34 +0.0 + 50 +90.0 + 0 +TEXT + 5 +3390 + 8 +BEMASSUNG + 10 +2610.0 + 20 +8640.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 0 +DIMENSION + 5 +3391 + 8 +BEMASSUNG + 2 +*D199 + 10 +26045.0 + 20 +8105.0 + 30 +0.0 + 11 +24845.0 + 21 +8280.0 + 31 +0.0 + 70 + 128 + 1 +3.00 + 13 +23030.0 + 23 +8095.0 + 33 +0.0 + 14 +26045.0 + 24 +8095.0 + 34 +0.0 + 0 +DIMENSION + 5 +3392 + 8 +BEMASSUNG + 2 +*D198 + 10 +26745.0 + 20 +8105.0 + 30 +0.0 + 11 +26395.0 + 21 +8280.0 + 31 +0.0 + 1 +70 + 13 +26045.0 + 23 +8095.0 + 33 +0.0 + 14 +26745.0 + 24 +9300.0 + 34 +0.0 + 0 +DIMENSION + 5 +3393 + 8 +BEMASSUNG + 2 +*D200 + 10 +28940.0 + 20 +7645.0 + 30 +0.0 + 11 +28765.0 + 21 +8450.0 + 31 +0.0 + 1 +1.60 + 13 +26040.0 + 23 +9255.0 + 33 +0.0 + 14 +26040.0 + 24 +7645.0 + 34 +0.0 + 50 +90.0 + 0 +TEXT + 5 +3394 + 8 +BEMASSUNG + 10 +28735.0 + 20 +8665.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3395 + 8 +LEGENDE-70 + 10 +12585.0 + 20 +17620.0 + 30 +0.0 + 40 +350.0 + 1 +D3 + 41 +0.75 + 7 +STANDART + 0 +CIRCLE + 5 +3396 + 8 +DETAILS + 10 +11740.0 + 20 +17320.0 + 30 +0.0 + 40 +705.0 + 0 +CIRCLE + 5 +3397 + 8 +DETAILS + 10 +26645.0 + 20 +14310.0 + 30 +0.0 + 40 +705.0 + 0 +TEXT + 5 +3398 + 8 +LEGENDE-70 + 10 +34240.0 + 20 +23545.0 + 30 +0.0 + 40 +350.0 + 1 +LEGENDE + 41 +0.75 + 7 +STANDART + 0 +POLYLINE + 5 +3399 + 8 +LEGENDE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +37C1 + 8 +LEGENDE + 10 +34220.0 + 20 +22930.0 + 30 +0.0 + 0 +VERTEX + 5 +37C2 + 8 +LEGENDE + 10 +34970.0 + 20 +22930.0 + 30 +0.0 + 0 +VERTEX + 5 +37C3 + 8 +LEGENDE + 10 +34970.0 + 20 +22430.0 + 30 +0.0 + 0 +VERTEX + 5 +37C4 + 8 +LEGENDE + 10 +34220.0 + 20 +22430.0 + 30 +0.0 + 0 +SEQEND + 5 +37C5 + 8 +LEGENDE + 0 +POLYLINE + 5 +339F + 8 +LEGENDE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +37C6 + 8 +LEGENDE + 10 +34220.0 + 20 +21930.0 + 30 +0.0 + 0 +VERTEX + 5 +37C7 + 8 +LEGENDE + 10 +34970.0 + 20 +21930.0 + 30 +0.0 + 0 +VERTEX + 5 +37C8 + 8 +LEGENDE + 10 +34970.0 + 20 +21430.0 + 30 +0.0 + 0 +VERTEX + 5 +37C9 + 8 +LEGENDE + 10 +34220.0 + 20 +21430.0 + 30 +0.0 + 0 +SEQEND + 5 +37CA + 8 +LEGENDE + 0 +POLYLINE + 5 +33A5 + 8 +LEGENDE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +37CB + 8 +LEGENDE + 10 +34220.0 + 20 +20930.0 + 30 +0.0 + 0 +VERTEX + 5 +37CC + 8 +LEGENDE + 10 +34970.0 + 20 +20930.0 + 30 +0.0 + 0 +VERTEX + 5 +37CD + 8 +LEGENDE + 10 +34970.0 + 20 +20430.0 + 30 +0.0 + 0 +VERTEX + 5 +37CE + 8 +LEGENDE + 10 +34220.0 + 20 +20430.0 + 30 +0.0 + 0 +SEQEND + 5 +37CF + 8 +LEGENDE + 0 +POLYLINE + 5 +33AB + 8 +LEGENDE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +37D0 + 8 +LEGENDE + 10 +34220.0 + 20 +19930.0 + 30 +0.0 + 0 +VERTEX + 5 +37D1 + 8 +LEGENDE + 10 +34970.0 + 20 +19930.0 + 30 +0.0 + 0 +VERTEX + 5 +37D2 + 8 +LEGENDE + 10 +34970.0 + 20 +19430.0 + 30 +0.0 + 0 +VERTEX + 5 +37D3 + 8 +LEGENDE + 10 +34220.0 + 20 +19430.0 + 30 +0.0 + 0 +SEQEND + 5 +37D4 + 8 +LEGENDE + 0 +INSERT + 5 +33B1 + 8 +SCHRAFFUR-MAUER + 2 +*X202 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +2000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +33B2 + 8 +SCHRAFFUR-MAUER + 2 +*X203 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +1000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +33B3 + 8 +SCHRAFFUR-MAUER + 2 +*X204 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +HONEY,I +1040 +300.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +33B4 + 8 +SCHRAFFUR-MAUER + 2 +*X205 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI37,I +1040 +1000.0 +1040 +0.0 +1002 +} + 0 +TEXT + 5 +33B5 + 8 +LEGENDE-35 + 10 +35465.0 + 20 +22540.0 + 30 +0.0 + 40 +175.0 + 1 +DIN 105 Mz-20-1.8-NF + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +33B6 + 8 +LEGENDE-35 + 10 +35450.0 + 20 +21550.0 + 30 +0.0 + 40 +175.0 + 1 +DIN 105 KHLz-20-1.8-NF + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +33B7 + 8 +LEGENDE-35 + 10 +35465.0 + 20 +19530.0 + 30 +0.0 + 40 +175.0 + 1 +DIN 4109 LEICHTE TRENNWAND + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +33B8 + 8 +LEGENDE-35 + 10 +35450.0 + 20 +20535.0 + 30 +0.0 + 40 +175.0 + 1 +MINERALFASERDÄMMUNG + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +33B9 + 8 +LEGENDE-35 + 10 +34220.0 + 20 +17470.0 + 30 +0.0 + 40 +175.0 + 1 +TÜRHÖHE: + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +33BA + 8 +LEGENDE-35 + 10 +34225.0 + 20 +16970.0 + 30 +0.0 + 40 +175.0 + 1 +FENSTERHÖHE: + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +33BB + 8 +LEGENDE-35 + 10 +34225.0 + 20 +16470.0 + 30 +0.0 + 40 +175.0 + 1 +BRÜSTUNGSHÖHE: + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +33BC + 8 +LEGENDE-35 + 10 +34225.0 + 20 +16040.0 + 30 +0.0 + 40 +175.0 + 1 +TREPPE: + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +33BD + 8 +LEGENDE-70 + 10 +32670.0 + 20 +14005.0 + 30 +0.0 + 40 +350.0 + 1 +AUFBAU AUSSENWAND / SCHORNSTEIN + 41 +0.75 + 7 +STANDART + 0 +POLYLINE + 5 +33BE + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +37D5 + 8 +MAUERWERK + 10 +38575.0 + 20 +12625.0 + 30 +0.0 + 0 +VERTEX + 5 +37D6 + 8 +MAUERWERK + 10 +39250.0 + 20 +12625.0 + 30 +0.0 + 0 +VERTEX + 5 +37D7 + 8 +MAUERWERK + 10 +39250.0 + 20 +11950.0 + 30 +0.0 + 0 +VERTEX + 5 +37D8 + 8 +MAUERWERK + 10 +38575.0 + 20 +11950.0 + 30 +0.0 + 0 +SEQEND + 5 +37D9 + 8 +MAUERWERK + 0 +POLYLINE + 5 +33C4 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +37DA + 8 +MAUERWERK + 10 +38575.0 + 20 +11375.0 + 30 +0.0 + 0 +VERTEX + 5 +37DB + 8 +MAUERWERK + 10 +39250.0 + 20 +11375.0 + 30 +0.0 + 0 +VERTEX + 5 +37DC + 8 +MAUERWERK + 10 +39250.0 + 20 +10700.0 + 30 +0.0 + 0 +VERTEX + 5 +37DD + 8 +MAUERWERK + 10 +38575.0 + 20 +10700.0 + 30 +0.0 + 0 +SEQEND + 5 +37DE + 8 +MAUERWERK + 0 +POLYLINE + 5 +33CA + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +37DF + 8 +MAUERWERK + 10 +38570.0 + 20 +11950.0 + 30 +0.0 + 0 +VERTEX + 5 +37E0 + 8 +MAUERWERK + 10 +39250.0 + 20 +12630.0 + 30 +0.0 + 0 +SEQEND + 5 +37E1 + 8 +MAUERWERK + 0 +POLYLINE + 5 +33CE + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +37E2 + 8 +MAUERWERK + 10 +38570.0 + 20 +12630.0 + 30 +0.0 + 0 +VERTEX + 5 +37E3 + 8 +MAUERWERK + 10 +39250.0 + 20 +11950.0 + 30 +0.0 + 0 +SEQEND + 5 +37E4 + 8 +MAUERWERK + 0 +POLYLINE + 5 +33D2 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +37E5 + 8 +MAUERWERK + 10 +38575.0 + 20 +11380.0 + 30 +0.0 + 0 +VERTEX + 5 +37E6 + 8 +MAUERWERK + 10 +39250.0 + 20 +10705.0 + 30 +0.0 + 0 +SEQEND + 5 +37E7 + 8 +MAUERWERK + 0 +POLYLINE + 5 +33D6 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +37E8 + 8 +MAUERWERK + 10 +38575.0 + 20 +10705.0 + 30 +0.0 + 0 +VERTEX + 5 +37E9 + 8 +MAUERWERK + 10 +39245.0 + 20 +11375.0 + 30 +0.0 + 0 +SEQEND + 5 +37EA + 8 +MAUERWERK + 0 +POLYLINE + 5 +33DA + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +37EB + 8 +0 + 10 +32800.0 + 20 +250.0 + 30 +0.0 + 0 +VERTEX + 5 +37EC + 8 +0 + 10 +32800.0 + 20 +3000.0 + 30 +0.0 + 0 +VERTEX + 5 +37ED + 8 +0 + 10 +41800.0 + 20 +3000.0 + 30 +0.0 + 0 +SEQEND + 5 +37EE + 8 +0 + 0 +DIMENSION + 5 +33DF + 8 +BEMASSUNG + 2 +*D206 + 10 +33895.0 + 20 +5405.0 + 30 +0.0 + 11 +33607.5 + 21 +5580.0 + 31 +0.0 + 1 +11 + 13 +33320.0 + 23 +6755.0 + 33 +0.0 + 14 +33895.0 + 24 +6755.0 + 34 +0.0 + 0 +DIMENSION + 5 +33E0 + 8 +BEMASSUNG + 2 +*D207 + 10 +34200.0 + 20 +5405.0 + 30 +0.0 + 11 +34047.5 + 21 +5580.0 + 31 +0.0 + 1 +6 + 13 +33895.0 + 23 +6755.0 + 33 +0.0 + 14 +34200.0 + 24 +6775.0 + 34 +0.0 + 0 +DIMENSION + 5 +33E1 + 8 +BEMASSUNG + 2 +*D208 + 10 +34600.0 + 20 +5405.0 + 30 +0.0 + 11 +34400.0 + 21 +5580.0 + 31 +0.0 + 1 +8 + 13 +34200.0 + 23 +6775.0 + 33 +0.0 + 14 +34600.0 + 24 +6775.0 + 34 +0.0 + 0 +DIMENSION + 5 +33E2 + 8 +BEMASSUNG + 2 +*D209 + 10 +36425.0 + 20 +5405.0 + 30 +0.0 + 11 +35512.5 + 21 +5580.0 + 31 +0.0 + 1 +36 + 13 +34600.0 + 23 +6775.0 + 33 +0.0 + 14 +36425.0 + 24 +6755.0 + 34 +0.0 + 0 +DIMENSION + 5 +33E3 + 8 +BEMASSUNG + 2 +*D210 + 10 +36505.0 + 20 +5405.0 + 30 +0.0 + 11 +36580.0 + 21 +5580.0 + 31 +0.0 + 70 + 128 + 1 +1 + 13 +36425.0 + 23 +6755.0 + 33 +0.0 + 14 +36505.0 + 24 +6755.0 + 34 +0.0 + 0 +TEXT + 5 +33E4 + 8 +BEMASSUNG + 10 +33710.0 + 20 +5610.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +33E5 + 8 +BEMASSUNG + 10 +35655.0 + 20 +5610.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +33E6 + 8 +BEMASSUNG + 10 +36650.0 + 20 +5610.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +DIMENSION + 5 +33E7 + 8 +BEMASSUNG + 2 +*D211 + 10 +38575.0 + 20 +9155.0 + 30 +0.0 + 11 +38285.0 + 21 +9330.0 + 31 +0.0 + 1 +11 + 13 +37995.0 + 23 +10130.0 + 33 +0.0 + 14 +38575.0 + 24 +10130.0 + 34 +0.0 + 0 +DIMENSION + 5 +33E8 + 8 +BEMASSUNG + 2 +*D212 + 10 +39240.0 + 20 +9155.0 + 30 +0.0 + 11 +38907.5 + 21 +9330.0 + 31 +0.0 + 1 +13 + 13 +38575.0 + 23 +10130.0 + 33 +0.0 + 14 +39240.0 + 24 +10720.0 + 34 +0.0 + 0 +DIMENSION + 5 +33E9 + 8 +BEMASSUNG + 2 +*D213 + 10 +39835.0 + 20 +9155.0 + 30 +0.0 + 11 +39537.5 + 21 +9330.0 + 31 +0.0 + 1 +11 + 13 +39240.0 + 23 +10720.0 + 33 +0.0 + 14 +39835.0 + 24 +10125.0 + 34 +0.0 + 0 +DIMENSION + 5 +33EA + 8 +BEMASSUNG + 2 +*D214 + 10 +40740.0 + 20 +12625.0 + 30 +0.0 + 11 +40565.0 + 21 +12940.0 + 31 +0.0 + 1 +12 + 13 +39815.0 + 23 +13255.0 + 33 +0.0 + 14 +39815.0 + 24 +12625.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +33EB + 8 +BEMASSUNG + 2 +*D215 + 10 +40740.0 + 20 +11955.0 + 30 +0.0 + 11 +40565.0 + 21 +12290.0 + 31 +0.0 + 1 +13 + 13 +39815.0 + 23 +12625.0 + 33 +0.0 + 14 +39250.0 + 24 +11955.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +33EC + 8 +BEMASSUNG + 2 +*D216 + 10 +40740.0 + 20 +11365.0 + 30 +0.0 + 11 +40565.0 + 21 +11660.0 + 31 +0.0 + 1 +11 + 13 +39250.0 + 23 +11955.0 + 33 +0.0 + 14 +39240.0 + 24 +11365.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +33ED + 8 +BEMASSUNG + 2 +*D217 + 10 +40740.0 + 20 +10705.0 + 30 +0.0 + 11 +40565.0 + 21 +11035.0 + 31 +0.0 + 1 +13 + 13 +39240.0 + 23 +11365.0 + 33 +0.0 + 14 +39240.0 + 24 +10705.0 + 34 +0.0 + 50 +90.0 + 0 +TEXT + 5 +33EE + 8 +BEMASSUNG + 10 +40515.0 + 20 +13090.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +33EF + 8 +BEMASSUNG + 10 +38395.0 + 20 +9375.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +33F0 + 8 +BEMASSUNG + 10 +40515.0 + 20 +12420.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +33F1 + 8 +BEMASSUNG + 10 +40515.0 + 20 +11755.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +33F2 + 8 +BEMASSUNG + 10 +40515.0 + 20 +11160.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 50 +90.0 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +33F3 + 8 +BEMASSUNG + 10 +39030.0 + 20 +9375.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +33F4 + 8 +BEMASSUNG + 10 +39625.0 + 20 +9375.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +INSERT + 5 +33F5 + 8 +SCHRAFFUR-DAEMMUNG + 2 +*X218 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +HONEY,I +1040 +750.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +33F6 + 8 +SCHRAFFUR-DAEMMUNG + 2 +*X219 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +6500.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +33F7 + 8 +SCHRAFFUR-DAEMMUNG + 2 +*X220 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +2000.0 +1040 +0.0 +1002 +} + 0 +POLYLINE + 5 +33F8 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +37EF + 8 +DETAILS + 10 +32640.0 + 20 +13235.0 + 30 +0.0 + 0 +VERTEX + 5 +37F0 + 8 +DETAILS + 10 +37145.0 + 20 +13235.0 + 30 +0.0 + 0 +SEQEND + 5 +37F1 + 8 +DETAILS + 0 +POLYLINE + 5 +33FC + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +37F2 + 8 +DETAILS + 10 +32640.0 + 20 +6775.0 + 30 +0.0 + 0 +VERTEX + 5 +37F3 + 8 +DETAILS + 10 +37145.0 + 20 +6775.0 + 30 +0.0 + 0 +SEQEND + 5 +37F4 + 8 +DETAILS + 0 +POLYLINE + 5 +3400 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +37F5 + 8 +DETAILS + 10 +37595.0 + 20 +10140.0 + 30 +0.0 + 0 +VERTEX + 5 +37F6 + 8 +DETAILS + 10 +40290.0 + 20 +10140.0 + 30 +0.0 + 0 +SEQEND + 5 +37F7 + 8 +DETAILS + 0 +POLYLINE + 5 +3404 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +37F8 + 8 +MAUERWERK + 10 +33325.0 + 20 +13235.0 + 30 +0.0 + 0 +VERTEX + 5 +37F9 + 8 +MAUERWERK + 10 +33325.0 + 20 +6775.0 + 30 +0.0 + 0 +SEQEND + 5 +37FA + 8 +MAUERWERK + 0 +POLYLINE + 5 +3408 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +37FB + 8 +MAUERWERK + 10 +33900.0 + 20 +6775.0 + 30 +0.0 + 0 +VERTEX + 5 +37FC + 8 +MAUERWERK + 10 +33900.0 + 20 +13235.0 + 30 +0.0 + 0 +SEQEND + 5 +37FD + 8 +MAUERWERK + 0 +POLYLINE + 5 +340C + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +37FE + 8 +MAUERWERK + 10 +34200.0 + 20 +13235.0 + 30 +0.0 + 0 +VERTEX + 5 +37FF + 8 +MAUERWERK + 10 +34200.0 + 20 +6775.0 + 30 +0.0 + 0 +SEQEND + 5 +3800 + 8 +MAUERWERK + 0 +POLYLINE + 5 +3410 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +3801 + 8 +MAUERWERK + 10 +34600.0 + 20 +6775.0 + 30 +0.0 + 0 +VERTEX + 5 +3802 + 8 +MAUERWERK + 10 +34600.0 + 20 +13235.0 + 30 +0.0 + 0 +SEQEND + 5 +3803 + 8 +MAUERWERK + 0 +POLYLINE + 5 +3414 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +3804 + 8 +MAUERWERK + 10 +34600.0 + 20 +13235.0 + 30 +0.0 + 0 +VERTEX + 5 +3805 + 8 +MAUERWERK + 10 +34600.0 + 20 +6775.0 + 30 +0.0 + 0 +SEQEND + 5 +3806 + 8 +MAUERWERK + 0 +POLYLINE + 5 +3418 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +3807 + 8 +MAUERWERK + 10 +36425.0 + 20 +6775.0 + 30 +0.0 + 0 +VERTEX + 5 +3808 + 8 +MAUERWERK + 10 +36425.0 + 20 +13235.0 + 30 +0.0 + 0 +SEQEND + 5 +3809 + 8 +MAUERWERK + 0 +POLYLINE + 5 +341C + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +380A + 8 +MAUERWERK + 10 +36500.0 + 20 +13235.0 + 30 +0.0 + 0 +VERTEX + 5 +380B + 8 +MAUERWERK + 10 +36500.0 + 20 +6775.0 + 30 +0.0 + 0 +SEQEND + 5 +380C + 8 +MAUERWERK + 0 +POLYLINE + 5 +3420 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +380D + 8 +MAUERWERK + 10 +36425.0 + 20 +6775.0 + 30 +0.0 + 0 +VERTEX + 5 +380E + 8 +MAUERWERK + 10 +36425.0 + 20 +13235.0 + 30 +0.0 + 0 +SEQEND + 5 +380F + 8 +MAUERWERK + 0 +POLYLINE + 5 +3424 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +3810 + 8 +MAUERWERK + 10 +38000.0 + 20 +13250.0 + 30 +0.0 + 0 +VERTEX + 5 +3811 + 8 +MAUERWERK + 10 +39825.0 + 20 +13250.0 + 30 +0.0 + 0 +VERTEX + 5 +3812 + 8 +MAUERWERK + 10 +39825.0 + 20 +10140.0 + 30 +0.0 + 0 +SEQEND + 5 +3813 + 8 +MAUERWERK + 0 +POLYLINE + 5 +3429 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +3814 + 8 +MAUERWERK + 10 +38000.0 + 20 +10140.0 + 30 +0.0 + 0 +VERTEX + 5 +3815 + 8 +MAUERWERK + 10 +38000.0 + 20 +13250.0 + 30 +0.0 + 0 +SEQEND + 5 +3816 + 8 +MAUERWERK + 0 +POLYLINE + 5 +342D + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +3817 + 8 +MAUERWERK + 10 +3000.0 + 20 +1980.0 + 30 +0.0 + 0 +VERTEX + 5 +3818 + 8 +MAUERWERK + 10 +3000.0 + 20 +5500.0 + 30 +0.0 + 40 +122.5 + 41 +0.0 + 0 +VERTEX + 5 +3819 + 8 +MAUERWERK + 10 +3000.0 + 20 +5850.0 + 30 +0.0 + 40 +0.0 + 41 +0.0 + 0 +SEQEND + 5 +381A + 8 +MAUERWERK + 0 +POLYLINE + 5 +3432 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +381B + 8 +MAUERWERK + 10 +3000.0 + 20 +1980.0 + 30 +0.0 + 0 +VERTEX + 5 +381C + 8 +MAUERWERK + 10 +3000.0 + 20 +5500.0 + 30 +0.0 + 40 +122.5 + 41 +0.0 + 0 +VERTEX + 5 +381D + 8 +MAUERWERK + 10 +3000.0 + 20 +5850.0 + 30 +0.0 + 40 +0.0 + 41 +0.0 + 0 +SEQEND + 5 +381E + 8 +MAUERWERK + 0 +POLYLINE + 5 +3437 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +381F + 8 +MAUERWERK + 10 +2985.0 + 20 +1995.0 + 30 +0.0 + 0 +VERTEX + 5 +3820 + 8 +MAUERWERK + 10 +6505.0 + 20 +1995.0 + 30 +0.0 + 40 +122.5 + 41 +0.0 + 0 +VERTEX + 5 +3821 + 8 +MAUERWERK + 10 +6855.0 + 20 +1995.0 + 30 +0.0 + 40 +0.0 + 41 +0.0 + 0 +SEQEND + 5 +3822 + 8 +MAUERWERK + 0 +TEXT + 5 +343C + 8 +LEGENDE-70 + 10 +2550.0 + 20 +5330.0 + 30 +0.0 + 40 +350.0 + 1 +Y + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +343D + 8 +LEGENDE-70 + 10 +6625.0 + 20 +1385.0 + 30 +0.0 + 40 +350.0 + 1 +Z + 41 +0.75 + 7 +STANDART + 0 +POLYLINE + 5 +343E + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +3823 + 8 +0 + 10 +37300.0 + 20 +250.0 + 30 +0.0 + 0 +VERTEX + 5 +3824 + 8 +0 + 10 +37300.0 + 20 +3000.0 + 30 +0.0 + 0 +SEQEND + 5 +3825 + 8 +0 + 0 +POLYLINE + 5 +3442 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +3826 + 8 +0 + 10 +35050.0 + 20 +250.0 + 30 +0.0 + 0 +VERTEX + 5 +3827 + 8 +0 + 10 +35050.0 + 20 +3000.0 + 30 +0.0 + 0 +SEQEND + 5 +3828 + 8 +0 + 0 +POLYLINE + 5 +3446 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +3829 + 8 +0 + 10 +35050.0 + 20 +1000.0 + 30 +0.0 + 0 +VERTEX + 5 +382A + 8 +0 + 10 +41800.0 + 20 +1000.0 + 30 +0.0 + 0 +SEQEND + 5 +382B + 8 +0 + 0 +POLYLINE + 5 +344A + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +382C + 8 +0 + 10 +35050.0 + 20 +2250.0 + 30 +0.0 + 0 +VERTEX + 5 +382D + 8 +0 + 10 +41790.0 + 20 +2250.0 + 30 +0.0 + 0 +SEQEND + 5 +382E + 8 +0 + 0 +POLYLINE + 5 +344E + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +382F + 8 +0 + 10 +37300.0 + 20 +2750.0 + 30 +0.0 + 0 +VERTEX + 5 +3830 + 8 +0 + 10 +41800.0 + 20 +2750.0 + 30 +0.0 + 0 +SEQEND + 5 +3831 + 8 +0 + 0 +POLYLINE + 5 +3452 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +3832 + 8 +0 + 10 +35050.0 + 20 +500.0 + 30 +0.0 + 0 +VERTEX + 5 +3833 + 8 +0 + 10 +32790.0 + 20 +500.0 + 30 +0.0 + 0 +SEQEND + 5 +3834 + 8 +0 + 0 +POLYLINE + 5 +3456 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +3835 + 8 +0 + 10 +35050.0 + 20 +750.0 + 30 +0.0 + 0 +VERTEX + 5 +3836 + 8 +0 + 10 +32790.0 + 20 +750.0 + 30 +0.0 + 0 +SEQEND + 5 +3837 + 8 +0 + 0 +POLYLINE + 5 +345A + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +3838 + 8 +0 + 10 +35050.0 + 20 +1000.0 + 30 +0.0 + 0 +VERTEX + 5 +3839 + 8 +0 + 10 +32790.0 + 20 +1000.0 + 30 +0.0 + 0 +SEQEND + 5 +383A + 8 +0 + 0 +POLYLINE + 5 +345E + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +383B + 8 +0 + 10 +35050.0 + 20 +1250.0 + 30 +0.0 + 0 +VERTEX + 5 +383C + 8 +0 + 10 +32790.0 + 20 +1250.0 + 30 +0.0 + 0 +SEQEND + 5 +383D + 8 +0 + 0 +POLYLINE + 5 +3462 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +383E + 8 +0 + 10 +35050.0 + 20 +1500.0 + 30 +0.0 + 0 +VERTEX + 5 +383F + 8 +0 + 10 +32790.0 + 20 +1500.0 + 30 +0.0 + 0 +SEQEND + 5 +3840 + 8 +0 + 0 +POLYLINE + 5 +3466 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +3841 + 8 +0 + 10 +35050.0 + 20 +1750.0 + 30 +0.0 + 0 +VERTEX + 5 +3842 + 8 +0 + 10 +32790.0 + 20 +1750.0 + 30 +0.0 + 0 +SEQEND + 5 +3843 + 8 +0 + 0 +POLYLINE + 5 +346A + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +3844 + 8 +0 + 10 +35050.0 + 20 +2000.0 + 30 +0.0 + 0 +VERTEX + 5 +3845 + 8 +0 + 10 +32790.0 + 20 +2000.0 + 30 +0.0 + 0 +SEQEND + 5 +3846 + 8 +0 + 0 +POLYLINE + 5 +346E + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +3847 + 8 +0 + 10 +35050.0 + 20 +2250.0 + 30 +0.0 + 0 +VERTEX + 5 +3848 + 8 +0 + 10 +32790.0 + 20 +2250.0 + 30 +0.0 + 0 +SEQEND + 5 +3849 + 8 +0 + 0 +TEXT + 5 +3472 + 8 +LEGENDE-70 + 10 +37530.0 + 20 +1420.0 + 30 +0.0 + 40 +350.0 + 1 +GRUNDRISS 300/56 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3473 + 8 +LEGENDE-35 + 10 +37530.0 + 20 +485.0 + 30 +0.0 + 40 +175.0 + 1 +Name + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3474 + 8 +LEGENDE-35 + 10 +35640.0 + 20 +485.0 + 30 +0.0 + 40 +175.0 + 1 +001 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3475 + 8 +LEGENDE-35 + 10 +37455.0 + 20 +2375.0 + 30 +0.0 + 40 +175.0 + 1 +MASSTAB 1:50 + 41 +0.75 + 7 +STANDART + 0 +POLYLINE + 5 +3476 + 8 +LEGENDE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 41 +300.0 + 0 +VERTEX + 5 +384A + 8 +LEGENDE + 10 +20010.0 + 20 +9715.0 + 30 +0.0 + 0 +VERTEX + 5 +384B + 8 +LEGENDE + 10 +20010.0 + 20 +9865.0 + 30 +0.0 + 40 +300.0 + 0 +SEQEND + 5 +384C + 8 +LEGENDE + 0 +POLYLINE + 5 +347A + 8 +LEGENDE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 0 +VERTEX + 5 +384D + 8 +LEGENDE + 10 +20015.0 + 20 +10150.0 + 30 +0.0 + 0 +VERTEX + 5 +384E + 8 +LEGENDE + 10 +19865.0 + 20 +10300.0 + 30 +0.0 + 0 +VERTEX + 5 +384F + 8 +LEGENDE + 10 +20165.0 + 20 +10300.0 + 30 +0.0 + 0 +SEQEND + 5 +3850 + 8 +LEGENDE + 0 +DIMENSION + 5 +347F + 8 +BEMASSUNG + 2 +*D222 + 10 +18455.0 + 20 +9655.0 + 30 +0.0 + 11 +18280.0 + 21 +9740.0 + 31 +0.0 + 70 + 128 + 1 +3 + 13 +18465.0 + 23 +9625.0 + 33 +0.0 + 14 +18465.0 + 24 +9655.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +3480 + 8 +BEMASSUNG + 2 +*D221 + 10 +18455.0 + 20 +10855.0 + 30 +0.0 + 11 +18280.0 + 21 +10255.0 + 31 +0.0 + 12 +100.0 + 22 +0.0 + 32 +0.0 + 1 +1.21 + 13 +18465.0 + 23 +9655.0 + 33 +0.0 + 14 +18455.0 + 24 +10855.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +3481 + 8 +BEMASSUNG + 2 +*D223 + 10 +18455.0 + 20 +15625.0 + 30 +0.0 + 11 +18280.0 + 21 +14745.0 + 31 +0.0 + 12 +10.0 + 22 +0.0 + 32 +0.0 + 1 +1.76 + 13 +18500.0 + 23 +13865.0 + 33 +0.0 + 14 +18500.0 + 24 +15625.0 + 34 +0.0 + 50 +90.0 + 0 +TEXT + 5 +3482 + 8 +BEMASSUNG + 10 +36825.0 + 20 +17460.0 + 30 +0.0 + 40 +175.0 + 1 +2.28 ROH ; 2.16 FERTIG + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3483 + 8 +BEMASSUNG + 10 +36825.0 + 20 +16960.0 + 30 +0.0 + 40 +175.0 + 1 +1.23 NG ; 0.74 KG + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3484 + 8 +BEMASSUNG + 10 +36825.0 + 20 +16460.0 + 30 +0.0 + 40 +175.0 + 1 +1.05 NG ; 1.46 KG + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3485 + 8 +BEMASSUNG + 10 +36835.0 + 20 +16025.0 + 30 +0.0 + 40 +175.0 + 1 +9+9 x 16 /30 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3486 + 8 +BEMASSUNG + 10 +37840.0 + 20 +16070.0 + 30 +0.0 + 40 +125.0 + 1 +7 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3487 + 8 +BEMASSUNG + 10 +38345.0 + 20 +16100.0 + 30 +0.0 + 40 +125.0 + 1 +1 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3488 + 8 +BEMASSUNG + 10 +20190.0 + 20 +9805.0 + 30 +0.0 + 40 +175.0 + 1 ++1.50 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3489 + 8 +BEMASSUNG + 10 +20185.0 + 20 +10190.0 + 30 +0.0 + 40 +175.0 + 1 ++1.61 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +348A + 8 +BEMASSUNG + 10 +20660.0 + 20 +10325.0 + 30 +0.0 + 40 +125.0 + 1 +8 + 41 +0.75 + 7 +STANDART + 0 +POLYLINE + 5 +348B + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +3851 + 8 +0 + 10 +41050.0 + 20 +250.0 + 30 +0.0 + 0 +VERTEX + 5 +3852 + 8 +0 + 10 +41050.0 + 20 +990.0 + 30 +0.0 + 0 +SEQEND + 5 +3853 + 8 +0 + 0 +TEXT + 5 +348F + 8 +LEGENDE-35 + 10 +41110.0 + 20 +725.0 + 30 +0.0 + 40 +175.0 + 1 +BLATT + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3490 + 8 +LEGENDE-35 + 10 +41345.0 + 20 +335.0 + 30 +0.0 + 40 +175.0 + 1 +1 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3491 + 8 +BEMASSUNG + 10 +20660.0 + 20 +9930.0 + 30 +0.0 + 40 +125.0 + 1 +3 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +3492 + 8 +BEMASSUNG + 10 +20035.0 + 20 +19915.0 + 30 +0.0 + 40 +175.0 + 1 ++0.11 + 41 +0.75 + 7 +STANDART + 0 +POLYLINE + 5 +3493 + 8 +LEGENDE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 0 +VERTEX + 5 +3854 + 8 +LEGENDE + 10 +19865.0 + 20 +19875.0 + 30 +0.0 + 0 +VERTEX + 5 +3855 + 8 +LEGENDE + 10 +19715.0 + 20 +20025.0 + 30 +0.0 + 0 +VERTEX + 5 +3856 + 8 +LEGENDE + 10 +20015.0 + 20 +20025.0 + 30 +0.0 + 0 +SEQEND + 5 +3857 + 8 +LEGENDE + 0 +TEXT + 5 +3498 + 8 +BEMASSUNG + 10 +20040.0 + 20 +19530.0 + 30 +0.0 + 40 +175.0 + 1 +%%p0.00 + 41 +0.75 + 7 +STANDART + 0 +POLYLINE + 5 +3499 + 8 +LEGENDE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 41 +300.0 + 0 +VERTEX + 5 +3858 + 8 +LEGENDE + 10 +19860.0 + 20 +19440.0 + 30 +0.0 + 0 +VERTEX + 5 +3859 + 8 +LEGENDE + 10 +19860.0 + 20 +19590.0 + 30 +0.0 + 40 +300.0 + 0 +SEQEND + 5 +385A + 8 +LEGENDE + 0 +TEXT + 5 +349D + 8 +BEMASSUNG + 10 +20510.0 + 20 +20050.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +349E + 8 +BEMASSUNG + 10 +38485.0 + 20 +17580.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +349F + 8 +LEGENDE-35 + 10 +34225.0 + 20 +15640.0 + 30 +0.0 + 40 +175.0 + 1 +TREPPENFENSTERHÖHE: + 41 +0.75 + 7 +STANDART + 0 +TEXT + 5 +34A0 + 8 +BEMASSUNG + 10 +36825.0 + 20 +15620.0 + 30 +0.0 + 40 +175.0 + 1 +0.74 + 41 +0.75 + 7 +STANDART + 0 +POLYLINE + 5 +34A1 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 0 +VERTEX + 5 +385B + 8 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +385C + 8 +0 + 10 +42050.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +385D + 8 +0 + 10 +42050.0 + 20 +29700.0 + 30 +0.0 + 0 +VERTEX + 5 +385E + 8 +0 + 10 +0.0 + 20 +29700.0 + 30 +0.0 + 0 +SEQEND + 5 +385F + 8 +0 + 0 +TEXT + 5 +34A7 + 8 +BEMASSUNG + 10 +23200.0 + 20 +5495.0 + 30 +0.0 + 40 +125.0 + 1 +5 + 41 +0.75 + 7 +STANDART + 0 +VIEWPORT + 5 +328E + 67 + 1 + 8 +0 + 10 +6.790131 + 20 +4.5 + 30 +0.0 + 40 +13.580262 + 41 +9.0 + 68 + -1 + 69 + 1 +1001 +ACAD +1000 +MVIEW +1002 +{ +1070 + 16 +1010 +0.0 +1020 +0.0 +1030 +0.0 +1010 +0.0 +1020 +0.0 +1030 +1.0 +1040 +0.0 +1040 +9.0 +1040 +6.790131 +1040 +4.5 +1040 +50.0 +1040 +0.0 +1040 +0.0 +1070 + 0 +1070 + 100 +1070 + 1 +1070 + 1 +1070 + 1 +1070 + 0 +1070 + 0 +1070 + 2 +1040 +0.0 +1040 +0.0 +1040 +0.0 +1040 +5.0 +1040 +5.0 +1040 +10.0 +1040 +10.0 +1070 + 0 +1002 +{ +1002 +} +1002 +} + 0 +ENDSEC + 0 +EOF diff --git a/extensions/fablabchemnitz/dxf2papercraft/kabeja/samples/dxf/draft2.dxf b/extensions/fablabchemnitz/dxf2papercraft/kabeja/samples/dxf/draft2.dxf new file mode 100644 index 00000000..28c30f44 --- /dev/null +++ b/extensions/fablabchemnitz/dxf2papercraft/kabeja/samples/dxf/draft2.dxf @@ -0,0 +1,118370 @@ + 0 +SECTION + 2 +HEADER + 9 +$ACADVER + 1 +AC1009 + 9 +$INSBASE + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$EXTMIN + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$EXTMAX + 10 +26430.0 + 20 +14850.0 + 30 +0.0 + 9 +$LIMMIN + 10 +0.0 + 20 +0.0 + 9 +$LIMMAX + 10 +21025.0 + 20 +14850.0 + 9 +$ORTHOMODE + 70 + 1 + 9 +$REGENMODE + 70 + 1 + 9 +$FILLMODE + 70 + 1 + 9 +$QTEXTMODE + 70 + 0 + 9 +$MIRRTEXT + 70 + 1 + 9 +$DRAGMODE + 70 + 2 + 9 +$LTSCALE + 40 +175.0 + 9 +$OSMODE + 70 + 0 + 9 +$ATTMODE + 70 + 1 + 9 +$TEXTSIZE + 40 +87.5 + 9 +$TRACEWID + 40 +1.0 + 9 +$TEXTSTYLE + 7 +STANDARD + 9 +$CLAYER + 8 +DRAHTANKER + 9 +$CELTYPE + 6 +BYLAYER + 9 +$CECOLOR + 62 + 256 + 9 +$DIMSCALE + 40 +1.0 + 9 +$DIMASZ + 40 +1.0 + 9 +$DIMEXO + 40 +1.0 + 9 +$DIMDLI + 40 +3.0 + 9 +$DIMRND + 40 +0.0 + 9 +$DIMDLE + 40 +0.0 + 9 +$DIMEXE + 40 +0.5 + 9 +$DIMTP + 40 +0.0 + 9 +$DIMTM + 40 +0.0 + 9 +$DIMTXT + 40 +87.5 + 9 +$DIMCEN + 40 +-0.5 + 9 +$DIMTSZ + 40 +0.0 + 9 +$DIMTOL + 70 + 0 + 9 +$DIMLIM + 70 + 0 + 9 +$DIMTIH + 70 + 0 + 9 +$DIMTOH + 70 + 0 + 9 +$DIMSE1 + 70 + 1 + 9 +$DIMSE2 + 70 + 1 + 9 +$DIMTAD + 70 + 1 + 9 +$DIMZIN + 70 + 8 + 9 +$DIMBLK + 1 +MASSHILFSLINIE + 9 +$DIMASO + 70 + 1 + 9 +$DIMSHO + 70 + 0 + 9 +$DIMPOST + 1 + + 9 +$DIMAPOST + 1 + + 9 +$DIMALT + 70 + 0 + 9 +$DIMALTD + 70 + 2 + 9 +$DIMALTF + 40 +25.4 + 9 +$DIMLFAC + 40 +1.0 + 9 +$DIMTOFL + 70 + 1 + 9 +$DIMTVP + 40 +0.0 + 9 +$DIMTIX + 70 + 1 + 9 +$DIMSOXD + 70 + 0 + 9 +$DIMSAH + 70 + 0 + 9 +$DIMBLK1 + 1 + + 9 +$DIMBLK2 + 1 + + 9 +$DIMSTYLE + 2 +BEMASSUNG + 9 +$DIMCLRD + 70 + 0 + 9 +$DIMCLRE + 70 + 0 + 9 +$DIMCLRT + 70 + 0 + 9 +$DIMTFAC + 40 +1.0 + 9 +$DIMGAP + 40 +0.0 + 9 +$LUNITS + 70 + 2 + 9 +$LUPREC + 70 + 2 + 9 +$SKETCHINC + 40 +1.0 + 9 +$FILLETRAD + 40 +0.0 + 9 +$AUNITS + 70 + 0 + 9 +$AUPREC + 70 + 0 + 9 +$MENU + 1 +acad + 9 +$ELEVATION + 40 +0.0 + 9 +$PELEVATION + 40 +0.0 + 9 +$THICKNESS + 40 +0.0 + 9 +$LIMCHECK + 70 + 0 + 9 +$BLIPMODE + 70 + 1 + 9 +$CHAMFERA + 40 +0.0 + 9 +$CHAMFERB + 40 +0.0 + 9 +$SKPOLY + 70 + 0 + 9 +$TDCREATE + 40 +2450818.514433 + 9 +$TDUPDATE + 40 +2450818.976785 + 9 +$TDINDWG + 40 +0.011021 + 9 +$TDUSRTIMER + 40 +0.011021 + 9 +$USRTIMER + 70 + 1 + 9 +$ANGBASE + 50 +0.0 + 9 +$ANGDIR + 70 + 0 + 9 +$PDMODE + 70 + 0 + 9 +$PDSIZE + 40 +0.0 + 9 +$PLINEWID + 40 +8.75 + 9 +$COORDS + 70 + 2 + 9 +$SPLFRAME + 70 + 0 + 9 +$SPLINETYPE + 70 + 6 + 9 +$SPLINESEGS + 70 + 8 + 9 +$ATTDIA + 70 + 0 + 9 +$ATTREQ + 70 + 1 + 9 +$HANDLING + 70 + 1 + 9 +$HANDSEED + 5 +2A68 + 9 +$SURFTAB1 + 70 + 6 + 9 +$SURFTAB2 + 70 + 6 + 9 +$SURFTYPE + 70 + 6 + 9 +$SURFU + 70 + 6 + 9 +$SURFV + 70 + 6 + 9 +$UCSNAME + 2 +PAPIERURSPRUNG + 9 +$UCSORG + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSXDIR + 10 +1.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSYDIR + 10 +0.0 + 20 +1.0 + 30 +0.0 + 9 +$PUCSNAME + 2 + + 9 +$PUCSORG + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSXDIR + 10 +1.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSYDIR + 10 +0.0 + 20 +1.0 + 30 +0.0 + 9 +$USERI1 + 70 + 0 + 9 +$USERI2 + 70 + 0 + 9 +$USERI3 + 70 + 0 + 9 +$USERI4 + 70 + 0 + 9 +$USERI5 + 70 + 0 + 9 +$USERR1 + 40 +0.0 + 9 +$USERR2 + 40 +0.0 + 9 +$USERR3 + 40 +0.0 + 9 +$USERR4 + 40 +0.0 + 9 +$USERR5 + 40 +0.0 + 9 +$WORLDVIEW + 70 + 1 + 9 +$SHADEDGE + 70 + 3 + 9 +$SHADEDIF + 70 + 70 + 9 +$TILEMODE + 70 + 1 + 9 +$MAXACTVP + 70 + 16 + 9 +$PLIMCHECK + 70 + 0 + 9 +$PEXTMIN + 10 +1.000000E+020 + 20 +1.000000E+020 + 30 +1.000000E+020 + 9 +$PEXTMAX + 10 +-1.000000E+020 + 20 +-1.000000E+020 + 30 +-1.000000E+020 + 9 +$PLIMMIN + 10 +0.0 + 20 +0.0 + 9 +$PLIMMAX + 10 +12.0 + 20 +9.0 + 9 +$UNITMODE + 70 + 0 + 9 +$VISRETAIN + 70 + 0 + 9 +$PLINEGEN + 70 + 0 + 9 +$PSLTSCALE + 70 + 0 + 0 +ENDSEC + 0 +SECTION + 2 +TABLES + 0 +TABLE + 2 +VPORT + 70 + 3 + 0 +VPORT + 2 +*ACTIVE + 70 + 0 + 10 +0.0 + 20 +0.0 + 11 +1.0 + 21 +1.0 + 12 +13215.0 + 22 +8516.664786 + 13 +0.0 + 23 +0.0 + 14 +5.0 + 24 +5.0 + 15 +10.0 + 25 +10.0 + 16 +0.0 + 26 +0.0 + 36 +1.0 + 17 +0.0 + 27 +0.0 + 37 +0.0 + 40 +17033.329571 + 41 +1.551664 + 42 +50.0 + 43 +0.0 + 44 +0.0 + 50 +0.0 + 51 +0.0 + 71 + 0 + 72 + 100 + 73 + 1 + 74 + 1 + 75 + 1 + 76 + 0 + 77 + 0 + 78 + 1 + 0 +ENDTAB + 0 +TABLE + 2 +LTYPE + 70 + 25 + 0 +LTYPE + 2 +CONTINUOUS + 70 + 0 + 3 +Solid Line + 72 + 65 + 73 + 0 + 40 +0.0 + 0 +LTYPE + 2 +RAND + 70 + 0 + 3 +__ __ . __ __ . __ __ . __ __ . __ __ . __ __ . + 72 + 65 + 73 + 6 + 40 +1.75 + 49 +0.5 + 49 +-0.25 + 49 +0.5 + 49 +-0.25 + 49 +0.0 + 49 +-0.25 + 0 +LTYPE + 2 +RAND2 + 70 + 0 + 3 +__.__.__.__.__.__.__.__.__.__.__.__.__.__.__.__ + 72 + 65 + 73 + 6 + 40 +0.875 + 49 +0.25 + 49 +-0.125 + 49 +0.25 + 49 +-0.125 + 49 +0.0 + 49 +-0.125 + 0 +LTYPE + 2 +RANDX2 + 70 + 0 + 3 +____ ____ . ____ ____ . ____ ____ . __ + 72 + 65 + 73 + 6 + 40 +3.5 + 49 +1.0 + 49 +-0.5 + 49 +1.0 + 49 +-0.5 + 49 +0.0 + 49 +-0.5 + 0 +LTYPE + 2 +MITTE + 70 + 0 + 3 +____ _ ____ _ ____ _ ____ _ ____ _ ____ _ ____ + 72 + 65 + 73 + 4 + 40 +2.0 + 49 +1.25 + 49 +-0.25 + 49 +0.25 + 49 +-0.25 + 0 +LTYPE + 2 +MITTE2 + 70 + 0 + 3 +___ _ ___ _ ___ _ ___ _ ___ _ ___ _ ___ _ ___ _ + 72 + 65 + 73 + 4 + 40 +1.125 + 49 +0.75 + 49 +-0.125 + 49 +0.125 + 49 +-0.125 + 0 +LTYPE + 2 +MITTEX2 + 70 + 0 + 3 +________ __ ________ __ ________ __ _____ + 72 + 65 + 73 + 4 + 40 +4.0 + 49 +2.5 + 49 +-0.5 + 49 +0.5 + 49 +-0.5 + 0 +LTYPE + 2 +STRICHPUNKT + 70 + 0 + 3 +__ . __ . __ . __ . __ . __ . __ . __ . __ . __ + 72 + 65 + 73 + 4 + 40 +1.0 + 49 +0.5 + 49 +-0.25 + 49 +0.0 + 49 +-0.25 + 0 +LTYPE + 2 +STRICHPUNKT2 + 70 + 0 + 3 +_._._._._._._._._._._._._._._._._._._._._._._._ + 72 + 65 + 73 + 4 + 40 +0.5 + 49 +0.25 + 49 +-0.125 + 49 +0.0 + 49 +-0.125 + 0 +LTYPE + 2 +STRICHPUNKTX2 + 70 + 0 + 3 +____ . ____ . ____ . ____ . ____ . __ + 72 + 65 + 73 + 4 + 40 +2.0 + 49 +1.0 + 49 +-0.5 + 49 +0.0 + 49 +-0.5 + 0 +LTYPE + 2 +GESTRICHELT + 70 + 0 + 3 +__ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ + 72 + 65 + 73 + 2 + 40 +0.75 + 49 +0.5 + 49 +-0.25 + 0 +LTYPE + 2 +GESTRICHELT2 + 70 + 0 + 3 +_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ + 72 + 65 + 73 + 2 + 40 +0.375 + 49 +0.25 + 49 +-0.125 + 0 +LTYPE + 2 +GESTRICHELTX2 + 70 + 0 + 3 +____ ____ ____ ____ ____ ____ ____ ____ + 72 + 65 + 73 + 2 + 40 +1.5 + 49 +1.0 + 49 +-0.5 + 0 +LTYPE + 2 +GETRENNT + 70 + 0 + 3 +____ . . ____ . . ____ . . ____ . . ____ . . __ + 72 + 65 + 73 + 6 + 40 +1.25 + 49 +0.5 + 49 +-0.25 + 49 +0.0 + 49 +-0.25 + 49 +0.0 + 49 +-0.25 + 0 +LTYPE + 2 +GETRENNT2 + 70 + 0 + 3 +__..__..__..__..__..__..__..__..__..__..__..__. + 72 + 65 + 73 + 6 + 40 +0.625 + 49 +0.25 + 49 +-0.125 + 49 +0.0 + 49 +-0.125 + 49 +0.0 + 49 +-0.125 + 0 +LTYPE + 2 +GETRENNTX2 + 70 + 0 + 3 +________ . . ________ . . ________ . . + 72 + 65 + 73 + 6 + 40 +2.5 + 49 +1.0 + 49 +-0.5 + 49 +0.0 + 49 +-0.5 + 49 +0.0 + 49 +-0.5 + 0 +LTYPE + 2 +PUNKT + 70 + 0 + 3 +. . . . . . . . . . . . . . . . . . . . . . . . + 72 + 65 + 73 + 2 + 40 +0.25 + 49 +0.0 + 49 +-0.25 + 0 +LTYPE + 2 +PUNKT2 + 70 + 0 + 3 +............................................... + 72 + 65 + 73 + 2 + 40 +0.125 + 49 +0.0 + 49 +-0.125 + 0 +LTYPE + 2 +PUNKTX2 + 70 + 0 + 3 +. . . . . . . . . . . . . . . . + 72 + 65 + 73 + 2 + 40 +0.5 + 49 +0.0 + 49 +-0.5 + 0 +LTYPE + 2 +VERDECKT + 70 + 0 + 3 +__ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ + 72 + 65 + 73 + 2 + 40 +0.375 + 49 +0.25 + 49 +-0.125 + 0 +LTYPE + 2 +VERDECKT2 + 70 + 0 + 3 +_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ + 72 + 65 + 73 + 2 + 40 +0.1875 + 49 +0.125 + 49 +-0.0625 + 0 +LTYPE + 2 +VERDECKTX2 + 70 + 0 + 3 +____ ____ ____ ____ ____ ____ ____ ____ ____ __ + 72 + 65 + 73 + 2 + 40 +0.75 + 49 +0.5 + 49 +-0.25 + 0 +LTYPE + 2 +PHANTOM + 70 + 0 + 3 +______ __ __ ______ __ __ ______ __ __ + 72 + 65 + 73 + 6 + 40 +2.5 + 49 +1.25 + 49 +-0.25 + 49 +0.25 + 49 +-0.25 + 49 +0.25 + 49 +-0.25 + 0 +LTYPE + 2 +PHANTOM2 + 70 + 0 + 3 +___ _ _ ___ _ _ ___ _ _ ___ _ _ ___ _ _ ___ _ _ + 72 + 65 + 73 + 6 + 40 +1.25 + 49 +0.625 + 49 +-0.125 + 49 +0.125 + 49 +-0.125 + 49 +0.125 + 49 +-0.125 + 0 +LTYPE + 2 +PHANTOMX2 + 70 + 0 + 3 +____________ ____ ____ ____________ + 72 + 65 + 73 + 6 + 40 +5.0 + 49 +2.5 + 49 +-0.5 + 49 +0.5 + 49 +-0.5 + 49 +0.5 + 49 +-0.5 + 0 +ENDTAB + 0 +TABLE + 2 +LAYER + 70 + 22 + 0 +LAYER + 2 +0 + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +LAYER + 2 +MAUERWERK + 70 + 0 + 62 + 6 + 6 +CONTINUOUS + 0 +LAYER + 2 +VORSATZSCHALE + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +LAYER + 2 +PE-FOLIE + 70 + 0 + 62 + 1 + 6 +GESTRICHELTX2 + 0 +LAYER + 2 +FUNDAMENT + 70 + 0 + 62 + 8 + 6 +CONTINUOUS + 0 +LAYER + 2 +BEMASSUNG + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +LAYER + 2 +STUERTZE + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +LAYER + 2 +ESTRICH + 70 + 0 + 62 + 4 + 6 +CONTINUOUS + 0 +LAYER + 2 +DECKEN + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +LAYER + 2 +DAEMMUNG + 70 + 0 + 62 + 4 + 6 +CONTINUOUS + 0 +LAYER + 2 +TUEREN + 70 + 0 + 62 + 3 + 6 +CONTINUOUS + 0 +LAYER + 2 +ERDBODEN + 70 + 0 + 62 + 5 + 6 +CONTINUOUS + 0 +LAYER + 2 +SCHNITTKANTEN + 70 + 0 + 62 + 1 + 6 +GESTRICHELT + 0 +LAYER + 2 +TRENNWAND + 70 + 0 + 62 + 8 + 6 +CONTINUOUS + 0 +LAYER + 2 +LEGENDE-70 + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +LAYER + 2 +LEGENDE-35 + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +LAYER + 2 +DETAILS + 70 + 0 + 62 + 7 + 6 +GESTRICHELTX2 + 0 +LAYER + 2 +DRAHTANKER + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +LAYER + 2 +SCHRAFFUR + 70 + 0 + 62 + 2 + 6 +CONTINUOUS + 0 +LAYER + 2 +DEFPOINTS + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +LAYER + 2 +HOLZ + 70 + 0 + 62 + 5 + 6 +CONTINUOUS + 0 +LAYER + 2 +SCHORNSTEIN + 70 + 0 + 62 + 1 + 6 +CONTINUOUS + 0 +ENDTAB + 0 +TABLE + 2 +STYLE + 70 + 1 + 0 +STYLE + 2 +STANDARD + 70 + 0 + 40 +0.0 + 41 +1.0 + 50 +0.0 + 71 + 0 + 42 +87.5 + 3 +txt + 4 + + 0 +ENDTAB + 0 +TABLE + 2 +VIEW + 70 + 0 + 0 +ENDTAB + 0 +TABLE + 2 +UCS + 70 + 2 + 0 +UCS + 2 +LOKAL + 70 + 0 + 10 +4125.0 + 20 +5250.0 + 30 +0.0 + 11 +1.0 + 21 +0.0 + 31 +0.0 + 12 +0.0 + 22 +1.0 + 32 +0.0 + 0 +UCS + 2 +PAPIERURSPRUNG + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 11 +1.0 + 21 +0.0 + 31 +0.0 + 12 +0.0 + 22 +1.0 + 32 +0.0 + 0 +ENDTAB + 0 +TABLE + 2 +APPID + 70 + 1 + 0 +APPID + 2 +ACAD + 70 + 0 + 0 +ENDTAB + 0 +TABLE + 2 +DIMSTYLE + 70 + 1 + 0 +DIMSTYLE + 2 +BEMASSUNG + 70 + 0 + 3 + + 4 + + 5 +MASSHILFSLINIE + 6 + + 7 + + 40 +1.0 + 41 +1.0 + 42 +1.0 + 43 +3.0 + 44 +0.5 + 45 +0.0 + 46 +0.0 + 47 +0.0 + 48 +0.0 +140 +87.5 +141 +-0.5 +142 +0.0 +143 +25.4 +144 +1.0 +145 +0.0 +146 +1.0 +147 +0.0 + 71 + 0 + 72 + 0 + 73 + 0 + 74 + 0 + 75 + 1 + 76 + 1 + 77 + 1 + 78 + 8 +170 + 0 +171 + 2 +172 + 1 +173 + 0 +174 + 1 +175 + 0 +176 + 0 +177 + 0 +178 + 0 + 0 +ENDTAB + 0 +ENDSEC + 0 +SECTION + 2 +BLOCKS + 0 +BLOCK + 8 +0 + 2 +$MODEL_SPACE + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +$MODEL_SPACE + 1 + + 0 +ENDBLK + 5 +74 + 8 +0 + 0 +BLOCK + 67 + 1 + 8 +0 + 2 +$PAPER_SPACE + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +$PAPER_SPACE + 1 + + 0 +ENDBLK + 5 +72 + 67 + 1 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +RAHMEN50 + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +RAHMEN50 + 1 + + 0 +POLYLINE + 5 +78 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +1FFE + 8 +0 + 10 +1000.0 + 20 +250.0 + 30 +0.0 + 0 +VERTEX + 5 +1FFF + 8 +0 + 10 +41800.0 + 20 +250.0 + 30 +0.0 + 0 +VERTEX + 5 +2000 + 8 +0 + 10 +41800.0 + 20 +29450.0 + 30 +0.0 + 0 +VERTEX + 5 +2001 + 8 +0 + 10 +1000.0 + 20 +29450.0 + 30 +0.0 + 0 +SEQEND + 5 +2002 + 8 +0 + 0 +POLYLINE + 5 +7E + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +2003 + 8 +0 + 10 +32800.0 + 20 +250.0 + 30 +0.0 + 0 +VERTEX + 5 +2004 + 8 +0 + 10 +32800.0 + 20 +13250.0 + 30 +0.0 + 0 +VERTEX + 5 +2005 + 8 +0 + 10 +41800.0 + 20 +13250.0 + 30 +0.0 + 0 +SEQEND + 5 +2006 + 8 +0 + 0 +POLYLINE + 5 +83 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +2007 + 8 +0 + 10 +39550.0 + 20 +13250.0 + 30 +0.0 + 0 +VERTEX + 5 +2008 + 8 +0 + 10 +39550.0 + 20 +11000.0 + 30 +0.0 + 0 +SEQEND + 5 +2009 + 8 +0 + 0 +POLYLINE + 5 +87 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +200A + 8 +0 + 10 +41800.0 + 20 +12250.0 + 30 +0.0 + 0 +VERTEX + 5 +200B + 8 +0 + 10 +37300.0 + 20 +12250.0 + 30 +0.0 + 0 +SEQEND + 5 +200C + 8 +0 + 0 +POLYLINE + 5 +8B + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +200D + 8 +0 + 10 +41800.0 + 20 +11625.0 + 30 +0.0 + 0 +VERTEX + 5 +200E + 8 +0 + 10 +37300.0 + 20 +11625.0 + 30 +0.0 + 0 +SEQEND + 5 +200F + 8 +0 + 0 +POLYLINE + 5 +8F + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +2010 + 8 +0 + 10 +32800.0 + 20 +11000.0 + 30 +0.0 + 0 +VERTEX + 5 +2011 + 8 +0 + 10 +41800.0 + 20 +11000.0 + 30 +0.0 + 0 +SEQEND + 5 +2012 + 8 +0 + 0 +POLYLINE + 5 +93 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +2013 + 8 +0 + 10 +37300.0 + 20 +13250.0 + 30 +0.0 + 0 +VERTEX + 5 +2014 + 8 +0 + 10 +37300.0 + 20 +6500.0 + 30 +0.0 + 0 +SEQEND + 5 +2015 + 8 +0 + 0 +POLYLINE + 5 +97 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +2016 + 8 +0 + 10 +32800.0 + 20 +8750.0 + 30 +0.0 + 0 +VERTEX + 5 +2017 + 8 +0 + 10 +37300.0 + 20 +8750.0 + 30 +0.0 + 0 +SEQEND + 5 +2018 + 8 +0 + 0 +POLYLINE + 5 +9B + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +2019 + 8 +0 + 10 +32800.0 + 20 +6500.0 + 30 +0.0 + 0 +VERTEX + 5 +201A + 8 +0 + 10 +41800.0 + 20 +6500.0 + 30 +0.0 + 0 +SEQEND + 5 +201B + 8 +0 + 0 +POLYLINE + 5 +9F + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +201C + 8 +0 + 10 +41800.0 + 20 +2000.0 + 30 +0.0 + 0 +VERTEX + 5 +201D + 8 +0 + 10 +32800.0 + 20 +2000.0 + 30 +0.0 + 0 +SEQEND + 5 +201E + 8 +0 + 0 +POLYLINE + 5 +A3 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +201F + 8 +0 + 10 +41800.0 + 20 +950.0 + 30 +0.0 + 0 +VERTEX + 5 +2020 + 8 +0 + 10 +32800.0 + 20 +950.0 + 30 +0.0 + 0 +SEQEND + 5 +2021 + 8 +0 + 0 +POLYLINE + 5 +A7 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +2022 + 8 +0 + 10 +41800.0 + 20 +1300.0 + 30 +0.0 + 0 +VERTEX + 5 +2023 + 8 +0 + 10 +32800.0 + 20 +1300.0 + 30 +0.0 + 0 +SEQEND + 5 +2024 + 8 +0 + 0 +POLYLINE + 5 +AB + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +2025 + 8 +0 + 10 +41800.0 + 20 +1650.0 + 30 +0.0 + 0 +VERTEX + 5 +2026 + 8 +0 + 10 +32800.0 + 20 +1650.0 + 30 +0.0 + 0 +SEQEND + 5 +2027 + 8 +0 + 0 +POLYLINE + 5 +AF + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +2028 + 8 +0 + 10 +41800.0 + 20 +600.0 + 30 +0.0 + 0 +VERTEX + 5 +2029 + 8 +0 + 10 +32800.0 + 20 +600.0 + 30 +0.0 + 0 +SEQEND + 5 +202A + 8 +0 + 0 +POLYLINE + 5 +B3 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +202B + 8 +0 + 10 +35100.0 + 20 +250.0 + 30 +0.0 + 0 +VERTEX + 5 +202C + 8 +0 + 10 +35100.0 + 20 +2000.0 + 30 +0.0 + 0 +SEQEND + 5 +202D + 8 +0 + 0 +POLYLINE + 5 +B7 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +202E + 8 +0 + 10 +33950.0 + 20 +250.0 + 30 +0.0 + 0 +VERTEX + 5 +202F + 8 +0 + 10 +33950.0 + 20 +2000.0 + 30 +0.0 + 0 +SEQEND + 5 +2030 + 8 +0 + 0 +POLYLINE + 5 +BB + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +2031 + 8 +0 + 10 +40650.0 + 20 +250.0 + 30 +0.0 + 0 +VERTEX + 5 +2032 + 8 +0 + 10 +40650.0 + 20 +2000.0 + 30 +0.0 + 0 +SEQEND + 5 +2033 + 8 +0 + 0 +ENDBLK + 5 +BF + 8 +0 + 0 +BLOCK + 8 +0 + 2 +STURZ + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +STURZ + 1 + + 0 +POLYLINE + 5 +C1 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +2034 + 8 +MAUERWERK + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2035 + 8 +MAUERWERK + 10 +0.0 + 20 +-71.0 + 30 +0.0 + 0 +VERTEX + 5 +2036 + 8 +MAUERWERK + 10 +365.0 + 20 +-71.0 + 30 +0.0 + 0 +VERTEX + 5 +2037 + 8 +MAUERWERK + 10 +365.0 + 20 +0.0 + 30 +0.0 + 0 +SEQEND + 5 +2038 + 8 +MAUERWERK + 0 +POLYLINE + 5 +C7 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +2039 + 8 +MAUERWERK + 10 +40.0 + 20 +-1.0 + 30 +0.0 + 0 +VERTEX + 5 +203A + 8 +MAUERWERK + 10 +40.0 + 20 +-36.0 + 30 +0.0 + 0 +VERTEX + 5 +203B + 8 +MAUERWERK + 10 +80.0 + 20 +-36.0 + 30 +0.0 + 0 +VERTEX + 5 +203C + 8 +MAUERWERK + 10 +80.0 + 20 +-6.0 + 30 +0.0 + 0 +SEQEND + 5 +203D + 8 +MAUERWERK + 0 +POLYLINE + 5 +CD + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +203E + 8 +MAUERWERK + 10 +160.0 + 20 +-1.0 + 30 +0.0 + 0 +VERTEX + 5 +203F + 8 +MAUERWERK + 10 +160.0 + 20 +-36.0 + 30 +0.0 + 0 +VERTEX + 5 +2040 + 8 +MAUERWERK + 10 +200.0 + 20 +-36.0 + 30 +0.0 + 0 +VERTEX + 5 +2041 + 8 +MAUERWERK + 10 +200.0 + 20 +-6.0 + 30 +0.0 + 0 +SEQEND + 5 +2042 + 8 +MAUERWERK + 0 +POLYLINE + 5 +D3 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +2043 + 8 +MAUERWERK + 10 +285.0 + 20 +-1.0 + 30 +0.0 + 0 +VERTEX + 5 +2044 + 8 +MAUERWERK + 10 +285.0 + 20 +-36.0 + 30 +0.0 + 0 +VERTEX + 5 +2045 + 8 +MAUERWERK + 10 +325.0 + 20 +-36.0 + 30 +0.0 + 0 +VERTEX + 5 +2046 + 8 +MAUERWERK + 10 +325.0 + 20 +-6.0 + 30 +0.0 + 0 +SEQEND + 5 +2047 + 8 +MAUERWERK + 0 +POLYLINE + 5 +D9 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +2048 + 8 +MAUERWERK + 10 +121.0 + 20 +-71.0 + 30 +0.0 + 0 +VERTEX + 5 +2049 + 8 +MAUERWERK + 10 +121.0 + 20 +0.0 + 30 +0.0 + 0 +SEQEND + 5 +204A + 8 +MAUERWERK + 0 +POLYLINE + 5 +DD + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +204B + 8 +MAUERWERK + 10 +243.0 + 20 +-71.0 + 30 +0.0 + 0 +VERTEX + 5 +204C + 8 +MAUERWERK + 10 +243.0 + 20 +0.0 + 30 +0.0 + 0 +SEQEND + 5 +204D + 8 +MAUERWERK + 0 +ENDBLK + 5 +E1 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +MASSHILFSLINIE + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +MASSHILFSLINIE + 1 + + 0 +POLYLINE + 5 +E3 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +204E + 8 +0 + 10 +75.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +204F + 8 +0 + 10 +-75.0 + 20 +0.0 + 30 +0.0 + 0 +SEQEND + 5 +2050 + 8 +0 + 0 +POLYLINE + 5 +E7 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2051 + 8 +0 + 10 +0.0 + 20 +-175.0 + 30 +0.0 + 0 +VERTEX + 5 +2052 + 8 +0 + 10 +0.0 + 20 +175.0 + 30 +0.0 + 0 +SEQEND + 5 +2053 + 8 +0 + 0 +POLYLINE + 5 +EB + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2054 + 8 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2055 + 8 +0 + 10 +26.516504 + 20 +26.516504 + 30 +0.0 + 0 +SEQEND + 5 +2056 + 8 +0 + 0 +POLYLINE + 5 +EF + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2057 + 8 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2058 + 8 +0 + 10 +-26.516504 + 20 +-26.516504 + 30 +0.0 + 0 +SEQEND + 5 +2059 + 8 +0 + 0 +ENDBLK + 5 +F3 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X3 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X3 + 1 + + 0 +LINE + 5 +F5 + 8 +0 + 62 + 0 + 10 +10328.961031 + 20 +5090.0 + 30 +0.0 + 11 +10488.961031 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +F6 + 8 +0 + 62 + 0 + 10 +9904.696962 + 20 +5090.0 + 30 +0.0 + 11 +10064.696962 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +F7 + 8 +0 + 62 + 0 + 10 +9480.432893 + 20 +5090.0 + 30 +0.0 + 11 +9640.432893 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +F8 + 8 +0 + 62 + 0 + 10 +9056.168825 + 20 +5090.0 + 30 +0.0 + 11 +9216.168825 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +F9 + 8 +0 + 62 + 0 + 10 +8631.904756 + 20 +5090.0 + 30 +0.0 + 11 +8791.904756 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +FA + 8 +0 + 62 + 0 + 10 +8207.640687 + 20 +5090.0 + 30 +0.0 + 11 +8367.640687 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +FB + 8 +0 + 62 + 0 + 10 +7783.376618 + 20 +5090.0 + 30 +0.0 + 11 +7943.376618 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +FC + 8 +0 + 62 + 0 + 10 +7359.11255 + 20 +5090.0 + 30 +0.0 + 11 +7519.11255 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +FD + 8 +0 + 62 + 0 + 10 +6934.848481 + 20 +5090.0 + 30 +0.0 + 11 +7094.848481 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +FE + 8 +0 + 62 + 0 + 10 +6510.584412 + 20 +5090.0 + 30 +0.0 + 11 +6670.584412 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +FF + 8 +0 + 62 + 0 + 10 +6086.320344 + 20 +5090.0 + 30 +0.0 + 11 +6246.320344 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +100 + 8 +0 + 62 + 0 + 10 +5662.056275 + 20 +5090.0 + 30 +0.0 + 11 +5822.056275 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +101 + 8 +0 + 62 + 0 + 10 +5237.792206 + 20 +5090.0 + 30 +0.0 + 11 +5397.792206 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +102 + 8 +0 + 62 + 0 + 10 +4813.528137 + 20 +5090.0 + 30 +0.0 + 11 +4973.528137 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +103 + 8 +0 + 62 + 0 + 10 +4384.264069 + 20 +5085.0 + 30 +0.0 + 11 +4549.264069 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +104 + 8 +0 + 62 + 0 + 10 +10753.225099 + 20 +5090.0 + 30 +0.0 + 11 +10913.225099 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +105 + 8 +0 + 62 + 0 + 10 +11177.489168 + 20 +5090.0 + 30 +0.0 + 11 +11337.489168 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +106 + 8 +0 + 62 + 0 + 10 +11601.753237 + 20 +5090.0 + 30 +0.0 + 11 +11761.753237 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +107 + 8 +0 + 62 + 0 + 10 +12026.017306 + 20 +5090.0 + 30 +0.0 + 11 +12186.017306 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +108 + 8 +0 + 62 + 0 + 10 +12450.281374 + 20 +5090.0 + 30 +0.0 + 11 +12610.281374 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +109 + 8 +0 + 62 + 0 + 10 +12874.545443 + 20 +5090.0 + 30 +0.0 + 11 +13034.545443 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +10A + 8 +0 + 62 + 0 + 10 +13298.809512 + 20 +5090.0 + 30 +0.0 + 11 +13458.809512 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +10B + 8 +0 + 62 + 0 + 10 +13723.07358 + 20 +5090.0 + 30 +0.0 + 11 +13883.07358 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +10C + 8 +0 + 62 + 0 + 10 +14147.337649 + 20 +5090.0 + 30 +0.0 + 11 +14307.337649 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +10D + 8 +0 + 62 + 0 + 10 +14571.601718 + 20 +5090.0 + 30 +0.0 + 11 +14731.601718 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +10E + 8 +0 + 62 + 0 + 10 +14995.865787 + 20 +5090.0 + 30 +0.0 + 11 +15155.865787 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +10F + 8 +0 + 62 + 0 + 10 +15420.129855 + 20 +5090.0 + 30 +0.0 + 11 +15580.129855 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +110 + 8 +0 + 62 + 0 + 10 +15844.393924 + 20 +5090.0 + 30 +0.0 + 11 +16004.393924 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +111 + 8 +0 + 62 + 0 + 10 +16268.657993 + 20 +5090.0 + 30 +0.0 + 11 +16428.657993 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +112 + 8 +0 + 62 + 0 + 10 +16687.922061 + 20 +5085.0 + 30 +0.0 + 11 +16852.922061 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +113 + 8 +0 + 62 + 0 + 10 +10116.828996 + 20 +5090.0 + 30 +0.0 + 11 +10117.72997 + 21 +5090.900974 + 31 +0.0 + 0 +LINE + 5 +114 + 8 +0 + 62 + 0 + 10 +10170.762979 + 20 +5143.933983 + 30 +0.0 + 11 +10276.828996 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +115 + 8 +0 + 62 + 0 + 10 +9692.564927 + 20 +5090.0 + 30 +0.0 + 11 +9746.49891 + 21 +5143.933983 + 31 +0.0 + 0 +LINE + 5 +116 + 8 +0 + 62 + 0 + 10 +9799.531919 + 20 +5196.966991 + 30 +0.0 + 11 +9852.564927 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +117 + 8 +0 + 62 + 0 + 10 +9269.201833 + 20 +5090.900974 + 30 +0.0 + 11 +9375.26785 + 21 +5196.966991 + 31 +0.0 + 0 +LINE + 5 +118 + 8 +0 + 62 + 0 + 10 +8844.03679 + 20 +5090.0 + 30 +0.0 + 11 +8844.937764 + 21 +5090.900974 + 31 +0.0 + 0 +LINE + 5 +119 + 8 +0 + 62 + 0 + 10 +8897.970773 + 20 +5143.933983 + 30 +0.0 + 11 +9004.03679 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +11A + 8 +0 + 62 + 0 + 10 +8419.772721 + 20 +5090.0 + 30 +0.0 + 11 +8473.706704 + 21 +5143.933983 + 31 +0.0 + 0 +LINE + 5 +11B + 8 +0 + 62 + 0 + 10 +8526.739713 + 20 +5196.966991 + 30 +0.0 + 11 +8579.772721 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +11C + 8 +0 + 62 + 0 + 10 +7996.409627 + 20 +5090.900974 + 30 +0.0 + 11 +8102.475644 + 21 +5196.966991 + 31 +0.0 + 0 +LINE + 5 +11D + 8 +0 + 62 + 0 + 10 +7571.244584 + 20 +5090.0 + 30 +0.0 + 11 +7572.145558 + 21 +5090.900974 + 31 +0.0 + 0 +LINE + 5 +11E + 8 +0 + 62 + 0 + 10 +7625.178567 + 20 +5143.933983 + 30 +0.0 + 11 +7731.244584 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +11F + 8 +0 + 62 + 0 + 10 +7146.980515 + 20 +5090.0 + 30 +0.0 + 11 +7200.914498 + 21 +5143.933983 + 31 +0.0 + 0 +LINE + 5 +120 + 8 +0 + 62 + 0 + 10 +7253.947506 + 20 +5196.966991 + 30 +0.0 + 11 +7306.980515 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +121 + 8 +0 + 62 + 0 + 10 +6723.617421 + 20 +5090.900974 + 30 +0.0 + 11 +6829.683438 + 21 +5196.966991 + 31 +0.0 + 0 +LINE + 5 +122 + 8 +0 + 62 + 0 + 10 +6298.452378 + 20 +5090.0 + 30 +0.0 + 11 +6299.353352 + 21 +5090.900974 + 31 +0.0 + 0 +LINE + 5 +123 + 8 +0 + 62 + 0 + 10 +6352.38636 + 20 +5143.933983 + 30 +0.0 + 11 +6458.452378 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +124 + 8 +0 + 62 + 0 + 10 +5874.188309 + 20 +5090.0 + 30 +0.0 + 11 +5928.122292 + 21 +5143.933983 + 31 +0.0 + 0 +LINE + 5 +125 + 8 +0 + 62 + 0 + 10 +5981.1553 + 20 +5196.966991 + 30 +0.0 + 11 +6034.188309 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +126 + 8 +0 + 62 + 0 + 10 +5450.825214 + 20 +5090.900974 + 30 +0.0 + 11 +5556.891232 + 21 +5196.966991 + 31 +0.0 + 0 +LINE + 5 +127 + 8 +0 + 62 + 0 + 10 +5609.92424 + 20 +5250.0 + 30 +0.0 + 11 +5609.92424 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +128 + 8 +0 + 62 + 0 + 10 +5025.660171 + 20 +5090.0 + 30 +0.0 + 11 +5026.561146 + 21 +5090.900974 + 31 +0.0 + 0 +LINE + 5 +129 + 8 +0 + 62 + 0 + 10 +5079.594154 + 20 +5143.933983 + 30 +0.0 + 11 +5185.660171 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +12A + 8 +0 + 62 + 0 + 10 +4601.396103 + 20 +5090.0 + 30 +0.0 + 11 +4655.330086 + 21 +5143.933983 + 31 +0.0 + 0 +LINE + 5 +12B + 8 +0 + 62 + 0 + 10 +4708.363094 + 20 +5196.966991 + 30 +0.0 + 11 +4761.396103 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +12C + 8 +0 + 62 + 0 + 10 +4178.033008 + 20 +5090.900974 + 30 +0.0 + 11 +4284.099025 + 21 +5196.966991 + 31 +0.0 + 0 +LINE + 5 +12D + 8 +0 + 62 + 0 + 10 +4337.132034 + 20 +5250.0 + 30 +0.0 + 11 +4337.132034 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +12E + 8 +0 + 62 + 0 + 10 +10541.994039 + 20 +5090.900974 + 30 +0.0 + 11 +10648.060056 + 21 +5196.966991 + 31 +0.0 + 0 +LINE + 5 +12F + 8 +0 + 62 + 0 + 10 +10965.357133 + 20 +5090.0 + 30 +0.0 + 11 +11019.291116 + 21 +5143.933983 + 31 +0.0 + 0 +LINE + 5 +130 + 8 +0 + 62 + 0 + 10 +11072.324125 + 20 +5196.966991 + 30 +0.0 + 11 +11125.357133 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +131 + 8 +0 + 62 + 0 + 10 +11389.621202 + 20 +5090.0 + 30 +0.0 + 11 +11390.522176 + 21 +5090.900974 + 31 +0.0 + 0 +LINE + 5 +132 + 8 +0 + 62 + 0 + 10 +11443.555185 + 20 +5143.933983 + 30 +0.0 + 11 +11549.621202 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +133 + 8 +0 + 62 + 0 + 10 +11814.786245 + 20 +5090.900974 + 30 +0.0 + 11 +11920.852262 + 21 +5196.966991 + 31 +0.0 + 0 +LINE + 5 +134 + 8 +0 + 62 + 0 + 10 +12238.14934 + 20 +5090.0 + 30 +0.0 + 11 +12292.083322 + 21 +5143.933983 + 31 +0.0 + 0 +LINE + 5 +135 + 8 +0 + 62 + 0 + 10 +12345.116331 + 20 +5196.966991 + 30 +0.0 + 11 +12398.14934 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +136 + 8 +0 + 62 + 0 + 10 +12662.413408 + 20 +5090.0 + 30 +0.0 + 11 +12663.314382 + 21 +5090.900974 + 31 +0.0 + 0 +LINE + 5 +137 + 8 +0 + 62 + 0 + 10 +12716.347391 + 20 +5143.933983 + 30 +0.0 + 11 +12822.413408 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +138 + 8 +0 + 62 + 0 + 10 +13087.578451 + 20 +5090.900974 + 30 +0.0 + 11 +13193.644468 + 21 +5196.966991 + 31 +0.0 + 0 +LINE + 5 +139 + 8 +0 + 62 + 0 + 10 +13510.941546 + 20 +5090.0 + 30 +0.0 + 11 +13564.875528 + 21 +5143.933983 + 31 +0.0 + 0 +LINE + 5 +13A + 8 +0 + 62 + 0 + 10 +13617.908537 + 20 +5196.966991 + 30 +0.0 + 11 +13670.941546 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +13B + 8 +0 + 62 + 0 + 10 +13935.205614 + 20 +5090.0 + 30 +0.0 + 11 +13936.106589 + 21 +5090.900974 + 31 +0.0 + 0 +LINE + 5 +13C + 8 +0 + 62 + 0 + 10 +13989.139597 + 20 +5143.933983 + 30 +0.0 + 11 +14095.205614 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +13D + 8 +0 + 62 + 0 + 10 +14360.370657 + 20 +5090.900974 + 30 +0.0 + 11 +14466.436674 + 21 +5196.966991 + 31 +0.0 + 0 +LINE + 5 +13E + 8 +0 + 62 + 0 + 10 +14783.733752 + 20 +5090.0 + 30 +0.0 + 11 +14837.667735 + 21 +5143.933983 + 31 +0.0 + 0 +LINE + 5 +13F + 8 +0 + 62 + 0 + 10 +14890.700743 + 20 +5196.966991 + 30 +0.0 + 11 +14943.733752 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +140 + 8 +0 + 62 + 0 + 10 +15207.997821 + 20 +5090.0 + 30 +0.0 + 11 +15208.898795 + 21 +5090.900974 + 31 +0.0 + 0 +LINE + 5 +141 + 8 +0 + 62 + 0 + 10 +15261.931803 + 20 +5143.933983 + 30 +0.0 + 11 +15367.997821 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +142 + 8 +0 + 62 + 0 + 10 +15633.162863 + 20 +5090.900974 + 30 +0.0 + 11 +15739.228881 + 21 +5196.966991 + 31 +0.0 + 0 +LINE + 5 +143 + 8 +0 + 62 + 0 + 10 +16056.525958 + 20 +5090.0 + 30 +0.0 + 11 +16110.459941 + 21 +5143.933983 + 31 +0.0 + 0 +LINE + 5 +144 + 8 +0 + 62 + 0 + 10 +16163.492949 + 20 +5196.966991 + 30 +0.0 + 11 +16216.525958 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +145 + 8 +0 + 62 + 0 + 10 +16480.790027 + 20 +5090.0 + 30 +0.0 + 11 +16481.691001 + 21 +5090.900974 + 31 +0.0 + 0 +LINE + 5 +146 + 8 +0 + 62 + 0 + 10 +16534.724009 + 20 +5143.933983 + 30 +0.0 + 11 +16640.790027 + 21 +5250.0 + 31 +0.0 + 0 +LINE + 5 +147 + 8 +0 + 62 + 0 + 10 +16905.95507 + 20 +5090.900974 + 30 +0.0 + 11 +16990.0 + 21 +5174.945905 + 31 +0.0 + 0 +ENDBLK + 5 +148 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D4 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D4 + 1 + + 0 +LINE + 5 +14A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +3761.0 + 20 +3850.0 + 30 +0.0 + 11 +4129.0 + 21 +3850.0 + 31 +0.0 + 0 +INSERT + 5 +14B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +3760.0 + 20 +3850.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +14C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +4130.0 + 20 +3850.0 + 30 +0.0 + 0 +TEXT + 5 +14D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +3872.083333 + 20 +3893.75 + 30 +0.0 + 40 +87.5 + 1 +32 + 72 + 1 + 11 +3945.0 + 21 +3937.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +14F + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +3760.0 + 20 +3650.0 + 30 +0.0 + 0 +POINT + 5 +150 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +4130.0 + 20 +3650.0 + 30 +0.0 + 0 +POINT + 5 +151 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +4130.0 + 20 +3850.0 + 30 +0.0 + 0 +ENDBLK + 5 +152 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D5 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D5 + 1 + + 0 +LINE + 5 +154 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +7196.0 + 20 +3850.0 + 30 +0.0 + 11 +10554.0 + 21 +3850.0 + 31 +0.0 + 0 +INSERT + 5 +155 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +7195.0 + 20 +3850.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +156 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +10555.0 + 20 +3850.0 + 30 +0.0 + 0 +TEXT + 5 +157 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +8743.75 + 20 +3893.75 + 30 +0.0 + 40 +87.5 + 1 +3.37 + 72 + 1 + 11 +8875.0 + 21 +3937.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +158 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7195.0 + 20 +3855.0 + 30 +0.0 + 0 +POINT + 5 +159 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +10555.0 + 20 +4205.0 + 30 +0.0 + 0 +POINT + 5 +15A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +10555.0 + 20 +3850.0 + 30 +0.0 + 0 +ENDBLK + 5 +15B + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D6 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D6 + 1 + + 0 +LINE + 5 +15D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +10556.0 + 20 +3850.0 + 30 +0.0 + 11 +13939.0 + 21 +3850.0 + 31 +0.0 + 0 +INSERT + 5 +15E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +10555.0 + 20 +3850.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +15F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +13940.0 + 20 +3850.0 + 30 +0.0 + 0 +TEXT + 5 +160 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +12116.25 + 20 +3893.75 + 30 +0.0 + 40 +87.5 + 1 +3.37 + 72 + 1 + 11 +12247.5 + 21 +3937.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +161 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +10555.0 + 20 +4205.0 + 30 +0.0 + 0 +POINT + 5 +162 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +13940.0 + 20 +4365.0 + 30 +0.0 + 0 +POINT + 5 +163 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +13940.0 + 20 +3850.0 + 30 +0.0 + 0 +ENDBLK + 5 +164 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D7 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D7 + 1 + + 0 +LINE + 5 +166 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +16986.0 + 20 +3850.0 + 30 +0.0 + 11 +17359.0 + 21 +3850.0 + 31 +0.0 + 0 +INSERT + 5 +167 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16985.0 + 20 +3850.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +168 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +17360.0 + 20 +3850.0 + 30 +0.0 + 0 +TEXT + 5 +169 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +17099.583333 + 20 +3893.75 + 30 +0.0 + 40 +87.5 + 1 +32 + 72 + 1 + 11 +17172.5 + 21 +3937.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +16A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16985.0 + 20 +3840.0 + 30 +0.0 + 0 +POINT + 5 +16B + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17360.0 + 20 +4775.0 + 30 +0.0 + 0 +POINT + 5 +16C + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17360.0 + 20 +3850.0 + 30 +0.0 + 0 +ENDBLK + 5 +16D + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D8 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D8 + 1 + + 0 +LINE + 5 +16F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +4131.0 + 20 +3850.0 + 30 +0.0 + 11 +5889.0 + 21 +3850.0 + 31 +0.0 + 0 +INSERT + 5 +170 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +4130.0 + 20 +3850.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +171 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +5890.0 + 20 +3850.0 + 30 +0.0 + 0 +TEXT + 5 +172 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +4893.333333 + 20 +3893.75 + 30 +0.0 + 40 +87.5 + 1 +1.62 + 72 + 1 + 11 +5010.0 + 21 +3937.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +173 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +4130.0 + 20 +3650.0 + 30 +0.0 + 0 +POINT + 5 +174 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5890.0 + 20 +3860.0 + 30 +0.0 + 0 +POINT + 5 +175 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5890.0 + 20 +3850.0 + 30 +0.0 + 0 +ENDBLK + 5 +176 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D9 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D9 + 1 + + 0 +LINE + 5 +178 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +15226.0 + 20 +3850.0 + 30 +0.0 + 11 +16984.0 + 21 +3850.0 + 31 +0.0 + 0 +INSERT + 5 +179 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +15225.0 + 20 +3850.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +17A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16985.0 + 20 +3850.0 + 30 +0.0 + 0 +TEXT + 5 +17B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +15988.333333 + 20 +3893.75 + 30 +0.0 + 40 +87.5 + 1 +1.62 + 72 + 1 + 11 +16105.0 + 21 +3937.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +17C + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15225.0 + 20 +4035.0 + 30 +0.0 + 0 +POINT + 5 +17D + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16985.0 + 20 +3840.0 + 30 +0.0 + 0 +POINT + 5 +17E + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16985.0 + 20 +3850.0 + 30 +0.0 + 0 +ENDBLK + 5 +17F + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D10 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D10 + 1 + + 0 +LINE + 5 +181 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +13941.0 + 20 +3850.0 + 30 +0.0 + 11 +15224.0 + 21 +3850.0 + 31 +0.0 + 0 +INSERT + 5 +182 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +13940.0 + 20 +3850.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +183 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +15225.0 + 20 +3850.0 + 30 +0.0 + 0 +TEXT + 5 +184 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +14465.833333 + 20 +3893.75 + 30 +0.0 + 40 +87.5 + 1 +1.43 + 72 + 1 + 11 +14582.5 + 21 +3937.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +185 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +13940.0 + 20 +4365.0 + 30 +0.0 + 0 +POINT + 5 +186 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15225.0 + 20 +4035.0 + 30 +0.0 + 0 +POINT + 5 +187 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15225.0 + 20 +3850.0 + 30 +0.0 + 0 +ENDBLK + 5 +188 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D11 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D11 + 1 + + 0 +LINE + 5 +18A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +5891.0 + 20 +3850.0 + 30 +0.0 + 11 +7194.0 + 21 +3850.0 + 31 +0.0 + 0 +INSERT + 5 +18B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +5890.0 + 20 +3850.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +18C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +7195.0 + 20 +3850.0 + 30 +0.0 + 0 +TEXT + 5 +18D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +6425.833333 + 20 +3893.75 + 30 +0.0 + 40 +87.5 + 1 +1.43 + 72 + 1 + 11 +6542.5 + 21 +3937.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +18E + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5890.0 + 20 +3860.0 + 30 +0.0 + 0 +POINT + 5 +18F + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7195.0 + 20 +3855.0 + 30 +0.0 + 0 +POINT + 5 +190 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7195.0 + 20 +3850.0 + 30 +0.0 + 0 +ENDBLK + 5 +191 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D12 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D12 + 1 + + 0 +LINE + 5 +193 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +4131.0 + 20 +3500.0 + 30 +0.0 + 11 +4489.0 + 21 +3500.0 + 31 +0.0 + 0 +INSERT + 5 +194 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +4130.0 + 20 +3500.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +195 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +4490.0 + 20 +3500.0 + 30 +0.0 + 0 +TEXT + 5 +196 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +4237.083333 + 20 +3543.75 + 30 +0.0 + 40 +87.5 + 1 +36 + 72 + 1 + 11 +4310.0 + 21 +3587.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +197 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +4130.0 + 20 +2270.0 + 30 +0.0 + 0 +POINT + 5 +198 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +4490.0 + 20 +2270.0 + 30 +0.0 + 0 +POINT + 5 +199 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +4490.0 + 20 +3500.0 + 30 +0.0 + 0 +ENDBLK + 5 +19A + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D13 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D13 + 1 + + 0 +LINE + 5 +19C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +4491.0 + 20 +3500.0 + 30 +0.0 + 11 +8999.0 + 21 +3500.0 + 31 +0.0 + 0 +INSERT + 5 +19D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +4490.0 + 20 +3500.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +19E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9000.0 + 20 +3500.0 + 30 +0.0 + 0 +TEXT + 5 +19F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +6628.333333 + 20 +3543.75 + 30 +0.0 + 40 +87.5 + 1 +4.51 + 72 + 1 + 11 +6745.0 + 21 +3587.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +1A0 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +4490.0 + 20 +2270.0 + 30 +0.0 + 0 +POINT + 5 +1A1 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9000.0 + 20 +2625.0 + 30 +0.0 + 0 +POINT + 5 +1A2 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9000.0 + 20 +3500.0 + 30 +0.0 + 0 +ENDBLK + 5 +1A3 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D14 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D14 + 1 + + 0 +LINE + 5 +1A5 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9001.0 + 20 +3500.0 + 30 +0.0 + 11 +9364.0 + 21 +3500.0 + 31 +0.0 + 0 +INSERT + 5 +1A6 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9000.0 + 20 +3500.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +1A7 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9365.0 + 20 +3500.0 + 30 +0.0 + 0 +TEXT + 5 +1A8 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9109.583333 + 20 +3543.75 + 30 +0.0 + 40 +87.5 + 1 +36 + 72 + 1 + 11 +9182.5 + 21 +3587.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +1A9 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9000.0 + 20 +2625.0 + 30 +0.0 + 0 +POINT + 5 +1AA + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9365.0 + 20 +3175.0 + 30 +0.0 + 0 +POINT + 5 +1AB + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9365.0 + 20 +3500.0 + 30 +0.0 + 0 +ENDBLK + 5 +1AC + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D15 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D15 + 1 + + 0 +LINE + 5 +1AE + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9366.0 + 20 +3500.0 + 30 +0.0 + 11 +11744.0 + 21 +3500.0 + 31 +0.0 + 0 +INSERT + 5 +1AF + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9365.0 + 20 +3500.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +1B0 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +11745.0 + 20 +3500.0 + 30 +0.0 + 0 +TEXT + 5 +1B1 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +10423.75 + 20 +3543.75 + 30 +0.0 + 40 +87.5 + 1 +2.38 + 72 + 1 + 11 +10555.0 + 21 +3587.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +1B2 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9365.0 + 20 +3175.0 + 30 +0.0 + 0 +POINT + 5 +1B3 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +11745.0 + 20 +3620.0 + 30 +0.0 + 0 +POINT + 5 +1B4 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +11745.0 + 20 +3500.0 + 30 +0.0 + 0 +ENDBLK + 5 +1B5 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D16 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D16 + 1 + + 0 +LINE + 5 +1B7 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +11746.0 + 20 +3500.0 + 30 +0.0 + 11 +12114.0 + 21 +3500.0 + 31 +0.0 + 0 +INSERT + 5 +1B8 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +11745.0 + 20 +3500.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +1B9 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +12115.0 + 20 +3500.0 + 30 +0.0 + 0 +TEXT + 5 +1BA + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +11857.083333 + 20 +3543.75 + 30 +0.0 + 40 +87.5 + 1 +36 + 72 + 1 + 11 +11930.0 + 21 +3587.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +1BB + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +11745.0 + 20 +3620.0 + 30 +0.0 + 0 +POINT + 5 +1BC + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +12115.0 + 20 +3515.0 + 30 +0.0 + 0 +POINT + 5 +1BD + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +12115.0 + 20 +3500.0 + 30 +0.0 + 0 +ENDBLK + 5 +1BE + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D17 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D17 + 1 + + 0 +LINE + 5 +1C0 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +12116.0 + 20 +3500.0 + 30 +0.0 + 11 +16629.0 + 21 +3500.0 + 31 +0.0 + 0 +INSERT + 5 +1C1 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +12115.0 + 20 +3500.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +1C2 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16630.0 + 20 +3500.0 + 30 +0.0 + 0 +TEXT + 5 +1C3 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +14255.833333 + 20 +3543.75 + 30 +0.0 + 40 +87.5 + 1 +4.51 + 72 + 1 + 11 +14372.5 + 21 +3587.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +1C4 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +12115.0 + 20 +3515.0 + 30 +0.0 + 0 +POINT + 5 +1C5 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16630.0 + 20 +3675.0 + 30 +0.0 + 0 +POINT + 5 +1C6 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16630.0 + 20 +3500.0 + 30 +0.0 + 0 +ENDBLK + 5 +1C7 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D18 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D18 + 1 + + 0 +LINE + 5 +1C9 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +16631.0 + 20 +3500.0 + 30 +0.0 + 11 +16984.0 + 21 +3500.0 + 31 +0.0 + 0 +INSERT + 5 +1CA + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16630.0 + 20 +3500.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +1CB + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16985.0 + 20 +3500.0 + 30 +0.0 + 0 +TEXT + 5 +1CC + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +16734.583333 + 20 +3543.75 + 30 +0.0 + 40 +87.5 + 1 +36 + 72 + 1 + 11 +16807.5 + 21 +3587.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +1CD + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16630.0 + 20 +3675.0 + 30 +0.0 + 0 +POINT + 5 +1CE + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16985.0 + 20 +3525.0 + 30 +0.0 + 0 +POINT + 5 +1CF + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16985.0 + 20 +3500.0 + 30 +0.0 + 0 +ENDBLK + 5 +1D0 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D19 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D19 + 1 + + 0 +LINE + 5 +1D2 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +4131.0 + 20 +3150.0 + 30 +0.0 + 11 +16984.0 + 21 +3150.0 + 31 +0.0 + 0 +INSERT + 5 +1D3 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +4130.0 + 20 +3150.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +1D4 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16985.0 + 20 +3150.0 + 30 +0.0 + 0 +TEXT + 5 +1D5 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +10397.083333 + 20 +3193.75 + 30 +0.0 + 40 +87.5 + 1 +12.86 + 72 + 1 + 11 +10557.5 + 21 +3237.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +1D6 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +4130.0 + 20 +2890.0 + 30 +0.0 + 0 +POINT + 5 +1D7 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16985.0 + 20 +2890.0 + 30 +0.0 + 0 +POINT + 5 +1D8 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16985.0 + 20 +3150.0 + 30 +0.0 + 0 +ENDBLK + 5 +1D9 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +DREIECK + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +DREIECK + 1 + + 0 +POLYLINE + 5 +1DB + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 41 +175.0 + 0 +VERTEX + 5 +205A + 8 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +205B + 8 +0 + 10 +0.0 + 20 +87.5 + 30 +0.0 + 40 +175.0 + 0 +SEQEND + 5 +205C + 8 +0 + 0 +ENDBLK + 5 +1DF + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D21 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D21 + 1 + + 0 +LINE + 5 +1E1 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +2375.0 + 20 +5256.0 + 30 +0.0 + 11 +2375.0 + 21 +8299.0 + 31 +0.0 + 0 +INSERT + 5 +1E2 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +2375.0 + 20 +5255.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +1E3 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +2375.0 + 20 +8300.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +1E4 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +2331.25 + 20 +6660.833333 + 30 +0.0 + 40 +87.5 + 1 +3.00 + 50 +90.0 + 72 + 1 + 11 +2287.5 + 21 +6777.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +1E5 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +1140.0 + 20 +5255.0 + 30 +0.0 + 0 +POINT + 5 +1E6 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +1140.0 + 20 +8300.0 + 30 +0.0 + 0 +POINT + 5 +1E7 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +2375.0 + 20 +8300.0 + 30 +0.0 + 0 +ENDBLK + 5 +1E8 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D22 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D22 + 1 + + 0 +LINE + 5 +1EA + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +2375.0 + 20 +8301.0 + 30 +0.0 + 11 +2375.0 + 21 +10604.0 + 31 +0.0 + 0 +INSERT + 5 +1EB + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +2375.0 + 20 +8300.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +1EC + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +2375.0 + 20 +10605.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +1ED + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +2331.25 + 20 +9321.25 + 30 +0.0 + 40 +87.5 + 1 +2.36 + 50 +90.0 + 72 + 1 + 11 +2287.5 + 21 +9452.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +1EE + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +1140.0 + 20 +8300.0 + 30 +0.0 + 0 +POINT + 5 +1EF + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +10560.0 + 20 +10605.0 + 30 +0.0 + 0 +POINT + 5 +1F0 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +2375.0 + 20 +10605.0 + 30 +0.0 + 0 +ENDBLK + 5 +1F1 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D23 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D23 + 1 + + 0 +LINE + 5 +1F3 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +7251.0 + 20 +10505.0 + 30 +0.0 + 11 +8739.0 + 21 +10505.0 + 31 +0.0 + 0 +INSERT + 5 +1F4 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +7250.0 + 20 +10505.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +1F5 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +8740.0 + 20 +10505.0 + 30 +0.0 + 0 +TEXT + 5 +1F6 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +7878.333333 + 20 +10548.75 + 30 +0.0 + 40 +87.5 + 1 +1.49 + 72 + 1 + 11 +7995.0 + 21 +10592.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +1F7 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7250.0 + 20 +10195.0 + 30 +0.0 + 0 +POINT + 5 +1F8 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8740.0 + 20 +10195.0 + 30 +0.0 + 0 +POINT + 5 +1F9 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8740.0 + 20 +10505.0 + 30 +0.0 + 0 +ENDBLK + 5 +1FA + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D24 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D24 + 1 + + 0 +LINE + 5 +1FC + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +3373.151369 + 20 +7103.844606 + 30 +0.0 + 11 +6931.455372 + 21 +9327.784608 + 31 +0.0 + 0 +INSERT + 5 +1FD + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +3372.303371 + 20 +7103.314607 + 30 +0.0 + 50 +212.005383 + 0 +INSERT + 5 +1FE + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +6932.303371 + 20 +9328.314607 + 30 +0.0 + 50 +32.005383 + 0 +TEXT + 5 +1FF + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +5023.999461 + 20 +8187.216747 + 30 +0.0 + 40 +87.5 + 1 +4.20 + 50 +32.005383 + 72 + 1 + 11 +5105.928464 + 21 +8290.014458 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +200 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +3715.0 + 20 +6555.0 + 30 +0.0 + 0 +POINT + 5 +201 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7275.0 + 20 +8780.0 + 30 +0.0 + 0 +POINT + 5 +202 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +6932.303371 + 20 +9328.314607 + 30 +0.0 + 0 +ENDBLK + 5 +203 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D25 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D25 + 1 + + 0 +LINE + 5 +205 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +11023.279211 + 20 +11578.764241 + 30 +0.0 + 11 +14756.582322 + 21 +9249.822809 + 31 +0.0 + 0 +INSERT + 5 +206 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +11022.430766 + 20 +11579.293525 + 30 +0.0 + 50 +148.042904 + 0 +INSERT + 5 +207 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +14757.430766 + 20 +9249.293525 + 30 +0.0 + 50 +328.042904 + 0 +TEXT + 5 +208 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +12807.915158 + 20 +10517.022152 + 30 +0.0 + 40 +87.5 + 1 +4.40 + 50 +328.042904 + 72 + 1 + 11 +12936.243124 + 21 +10488.532433 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +209 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +10555.0 + 20 +10830.0 + 30 +0.0 + 0 +POINT + 5 +20A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +14290.0 + 20 +8500.0 + 30 +0.0 + 0 +POINT + 5 +20B + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +14757.430766 + 20 +9249.293525 + 30 +0.0 + 0 +ENDBLK + 5 +20C + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D26 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D26 + 1 + + 0 +LINE + 5 +20E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +13861.722804 + 20 +8965.83185 + 30 +0.0 + 11 +17354.730878 + 21 +8651.01138 + 31 +0.0 + 0 +INSERT + 5 +20F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +13860.726841 + 20 +8965.921615 + 30 +0.0 + 50 +174.849918 + 0 +INSERT + 5 +210 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +17355.726841 + 20 +8650.921615 + 30 +0.0 + 50 +354.849918 + 0 +TEXT + 5 +211 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +15495.958374 + 20 +8862.467568 + 30 +0.0 + 40 +87.5 + 1 +3.51 + 50 +354.849918 + 72 + 1 + 11 +15616.08127 + 21 +8895.568376 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +212 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +13830.0 + 20 +8625.0 + 30 +0.0 + 0 +POINT + 5 +213 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17325.0 + 20 +8310.0 + 30 +0.0 + 0 +POINT + 5 +214 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17355.726841 + 20 +8650.921615 + 30 +0.0 + 0 +ENDBLK + 5 +215 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +HOEHE + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +HOEHE + 1 + + 0 +POLYLINE + 5 +217 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 0 +VERTEX + 5 +205D + 8 +0 + 10 +0.019553 + 20 +0.17035 + 30 +0.0 + 0 +VERTEX + 5 +205E + 8 +0 + 10 +87.539037 + 20 +87.845238 + 30 +0.0 + 0 +VERTEX + 5 +205F + 8 +0 + 10 +-87.890695 + 20 +87.845238 + 30 +0.0 + 0 +SEQEND + 5 +2060 + 8 +0 + 0 +ENDBLK + 5 +21C + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D28 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D28 + 1 + + 0 +LINE + 5 +21E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +18125.0 + 20 +4501.0 + 30 +0.0 + 11 +18125.0 + 21 +5739.0 + 31 +0.0 + 0 +INSERT + 5 +21F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18125.0 + 20 +4500.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +220 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18125.0 + 20 +5740.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +221 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +18081.25 + 20 +5017.916667 + 30 +0.0 + 40 +87.5 + 1 +1.21 + 50 +90.0 + 72 + 1 + 11 +18037.5 + 21 +5120.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +222 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16970.0 + 20 +4500.0 + 30 +0.0 + 0 +POINT + 5 +223 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16970.0 + 20 +5740.0 + 30 +0.0 + 0 +POINT + 5 +224 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +18125.0 + 20 +5740.0 + 30 +0.0 + 0 +ENDBLK + 5 +225 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D29 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D29 + 1 + + 0 +LINE + 5 +227 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +18125.0 + 20 +5741.0 + 30 +0.0 + 11 +18125.0 + 21 +5949.0 + 31 +0.0 + 0 +INSERT + 5 +228 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18125.0 + 20 +5740.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +229 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18125.0 + 20 +5950.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +22A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +18081.25 + 20 +5786.666667 + 30 +0.0 + 40 +87.5 + 1 +18 + 50 +90.0 + 72 + 1 + 11 +18037.5 + 21 +5845.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +22B + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16970.0 + 20 +5740.0 + 30 +0.0 + 0 +POINT + 5 +22C + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +18120.0 + 20 +5950.0 + 30 +0.0 + 0 +POINT + 5 +22D + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +18125.0 + 20 +5950.0 + 30 +0.0 + 0 +ENDBLK + 5 +22E + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D30 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D30 + 1 + + 0 +LINE + 5 +230 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +18125.0 + 20 +5951.0 + 30 +0.0 + 11 +18125.0 + 21 +7359.0 + 31 +0.0 + 0 +INSERT + 5 +231 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18125.0 + 20 +5950.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +232 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18125.0 + 20 +7360.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +233 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +18081.25 + 20 +6545.625 + 30 +0.0 + 40 +87.5 + 1 +1.40 + 50 +90.0 + 72 + 1 + 11 +18037.5 + 21 +6655.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +234 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +18120.0 + 20 +5950.0 + 30 +0.0 + 0 +POINT + 5 +235 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16855.0 + 20 +7360.0 + 30 +0.0 + 0 +POINT + 5 +236 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +18125.0 + 20 +7360.0 + 30 +0.0 + 0 +ENDBLK + 5 +237 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D31 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D31 + 1 + + 0 +LINE + 5 +239 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +14290.0 + 20 +12856.0 + 30 +0.0 + 11 +14290.0 + 21 +13259.0 + 31 +0.0 + 0 +INSERT + 5 +23A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +14290.0 + 20 +12855.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +23B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +14290.0 + 20 +13260.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +23C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +14246.25 + 20 +12999.166667 + 30 +0.0 + 40 +87.5 + 1 +16 + 50 +90.0 + 72 + 1 + 11 +14202.5 + 21 +13057.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +23D + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +13590.0 + 20 +12855.0 + 30 +0.0 + 0 +POINT + 5 +23E + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +13560.0 + 20 +13260.0 + 30 +0.0 + 0 +POINT + 5 +23F + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +14290.0 + 20 +13260.0 + 30 +0.0 + 0 +ENDBLK + 5 +240 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D32 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D32 + 1 + + 0 +LINE + 5 +242 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +14290.0 + 20 +13261.0 + 30 +0.0 + 11 +14290.0 + 21 +13699.0 + 31 +0.0 + 0 +INSERT + 5 +243 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +14290.0 + 20 +13260.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +244 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +14290.0 + 20 +13700.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +245 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +14246.25 + 20 +13421.666667 + 30 +0.0 + 40 +87.5 + 1 +18 + 50 +90.0 + 72 + 1 + 11 +14202.5 + 21 +13480.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +246 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +13560.0 + 20 +13260.0 + 30 +0.0 + 0 +POINT + 5 +247 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +13580.0 + 20 +13700.0 + 30 +0.0 + 0 +POINT + 5 +248 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +14290.0 + 20 +13700.0 + 30 +0.0 + 0 +ENDBLK + 5 +249 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D33 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D33 + 1 + + 0 +LINE + 5 +24B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +14290.0 + 20 +13701.0 + 30 +0.0 + 11 +14290.0 + 21 +13774.0 + 31 +0.0 + 0 +INSERT + 5 +24C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +14290.0 + 20 +13700.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +24D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +14290.0 + 20 +13775.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +24E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +14246.25 + 20 +13805.833333 + 30 +0.0 + 40 +87.5 + 1 +3 + 50 +90.0 + 72 + 1 + 11 +14202.5 + 21 +13835.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +24F + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +13580.0 + 20 +13700.0 + 30 +0.0 + 0 +POINT + 5 +250 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +13590.0 + 20 +13775.0 + 30 +0.0 + 0 +POINT + 5 +251 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +14290.0 + 20 +13775.0 + 30 +0.0 + 0 +ENDBLK + 5 +252 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D34 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D34 + 1 + + 0 +LINE + 5 +254 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +14290.0 + 20 +12816.0 + 30 +0.0 + 11 +14290.0 + 21 +12854.0 + 31 +0.0 + 0 +INSERT + 5 +255 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +14290.0 + 20 +12815.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +256 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +14290.0 + 20 +12855.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +257 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +14246.25 + 20 +12710.416667 + 30 +0.0 + 40 +87.5 + 1 +1 + 50 +90.0 + 72 + 1 + 11 +14202.5 + 21 +12725.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +258 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +13590.0 + 20 +12815.0 + 30 +0.0 + 0 +POINT + 5 +259 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +13590.0 + 20 +12855.0 + 30 +0.0 + 0 +POINT + 5 +25A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +14290.0 + 20 +12855.0 + 30 +0.0 + 0 +ENDBLK + 5 +25B + 8 +0 + 0 +ENDSEC + 0 +SECTION + 2 +ENTITIES + 0 +POLYLINE + 5 +25C + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +2061 + 8 +0 + 10 +500.0 + 20 +125.0 + 30 +0.0 + 0 +VERTEX + 5 +2062 + 8 +0 + 10 +20900.0 + 20 +125.0 + 30 +0.0 + 0 +VERTEX + 5 +2063 + 8 +0 + 10 +20900.0 + 20 +14725.0 + 30 +0.0 + 0 +VERTEX + 5 +2064 + 8 +0 + 10 +500.0 + 20 +14725.0 + 30 +0.0 + 0 +SEQEND + 5 +2065 + 8 +0 + 0 +POLYLINE + 5 +262 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +2066 + 8 +0 + 10 +20900.0 + 20 +1500.0 + 30 +0.0 + 0 +VERTEX + 5 +2067 + 8 +0 + 10 +16275.0 + 20 +1500.0 + 30 +0.0 + 0 +VERTEX + 5 +2068 + 8 +0 + 10 +16275.0 + 20 +125.0 + 30 +0.0 + 0 +SEQEND + 5 +2069 + 8 +0 + 0 +POLYLINE + 5 +267 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +206A + 8 +0 + 10 +18650.0 + 20 +125.0 + 30 +0.0 + 0 +VERTEX + 5 +206B + 8 +0 + 10 +18650.0 + 20 +1495.0 + 30 +0.0 + 0 +SEQEND + 5 +206C + 8 +0 + 0 +POLYLINE + 5 +26B + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +206D + 8 +0 + 10 +17525.0 + 20 +125.0 + 30 +0.0 + 0 +VERTEX + 5 +206E + 8 +0 + 10 +17525.0 + 20 +1500.0 + 30 +0.0 + 0 +SEQEND + 5 +206F + 8 +0 + 0 +POLYLINE + 5 +26F + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +2070 + 8 +0 + 10 +17525.0 + 20 +500.0 + 30 +0.0 + 0 +VERTEX + 5 +2071 + 8 +0 + 10 +20900.0 + 20 +500.0 + 30 +0.0 + 0 +SEQEND + 5 +2072 + 8 +0 + 0 +POLYLINE + 5 +273 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +2073 + 8 +0 + 10 +17525.0 + 20 +1125.0 + 30 +0.0 + 0 +VERTEX + 5 +2074 + 8 +0 + 10 +20900.0 + 20 +1125.0 + 30 +0.0 + 0 +SEQEND + 5 +2075 + 8 +0 + 0 +POLYLINE + 5 +277 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +2076 + 8 +0 + 10 +17525.0 + 20 +250.0 + 30 +0.0 + 0 +VERTEX + 5 +2077 + 8 +0 + 10 +16275.0 + 20 +250.0 + 30 +0.0 + 0 +SEQEND + 5 +2078 + 8 +0 + 0 +POLYLINE + 5 +27B + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +2079 + 8 +0 + 10 +17525.0 + 20 +375.0 + 30 +0.0 + 0 +VERTEX + 5 +207A + 8 +0 + 10 +16275.0 + 20 +375.0 + 30 +0.0 + 0 +SEQEND + 5 +207B + 8 +0 + 0 +POLYLINE + 5 +27F + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +207C + 8 +0 + 10 +17525.0 + 20 +500.0 + 30 +0.0 + 0 +VERTEX + 5 +207D + 8 +0 + 10 +16275.0 + 20 +500.0 + 30 +0.0 + 0 +SEQEND + 5 +207E + 8 +0 + 0 +POLYLINE + 5 +283 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +207F + 8 +0 + 10 +17525.0 + 20 +625.0 + 30 +0.0 + 0 +VERTEX + 5 +2080 + 8 +0 + 10 +16275.0 + 20 +625.0 + 30 +0.0 + 0 +SEQEND + 5 +2081 + 8 +0 + 0 +POLYLINE + 5 +287 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +2082 + 8 +0 + 10 +17525.0 + 20 +750.0 + 30 +0.0 + 0 +VERTEX + 5 +2083 + 8 +0 + 10 +16275.0 + 20 +750.0 + 30 +0.0 + 0 +SEQEND + 5 +2084 + 8 +0 + 0 +POLYLINE + 5 +28B + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +2085 + 8 +0 + 10 +17525.0 + 20 +875.0 + 30 +0.0 + 0 +VERTEX + 5 +2086 + 8 +0 + 10 +16275.0 + 20 +875.0 + 30 +0.0 + 0 +SEQEND + 5 +2087 + 8 +0 + 0 +POLYLINE + 5 +28F + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +2088 + 8 +0 + 10 +17525.0 + 20 +1000.0 + 30 +0.0 + 0 +VERTEX + 5 +2089 + 8 +0 + 10 +16275.0 + 20 +1000.0 + 30 +0.0 + 0 +SEQEND + 5 +208A + 8 +0 + 0 +POLYLINE + 5 +293 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +208B + 8 +0 + 10 +17525.0 + 20 +1125.0 + 30 +0.0 + 0 +VERTEX + 5 +208C + 8 +0 + 10 +16275.0 + 20 +1125.0 + 30 +0.0 + 0 +SEQEND + 5 +208D + 8 +0 + 0 +POLYLINE + 5 +297 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +208E + 8 +0 + 10 +18650.0 + 20 +1375.0 + 30 +0.0 + 0 +VERTEX + 5 +208F + 8 +0 + 10 +20901.604101 + 20 +1375.0 + 30 +0.0 + 0 +SEQEND + 5 +2090 + 8 +0 + 0 +TEXT + 5 +29B + 8 +LEGENDE-35 + 10 +18745.266644 + 20 +1210.264338 + 30 +0.0 + 40 +87.5 + 1 +MASSTAB 1:25 + 0 +TEXT + 5 +29C + 8 +LEGENDE-35 + 10 +18730.0 + 20 +260.0 + 30 +0.0 + 40 +87.5 + 1 +Name + 0 +TEXT + 5 +29D + 8 +LEGENDE-35 + 10 +17705.0 + 20 +225.0 + 30 +0.0 + 40 +87.5 + 1 +001 + 0 +POLYLINE + 5 +29E + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +2091 + 8 +0 + 10 +20525.0 + 20 +125.0 + 30 +0.0 + 0 +VERTEX + 5 +2092 + 8 +0 + 10 +20525.0 + 20 +495.0 + 30 +0.0 + 0 +SEQEND + 5 +2093 + 8 +0 + 0 +TEXT + 5 +2A2 + 8 +LEGENDE-35 + 10 +20580.0 + 20 +365.0 + 30 +0.0 + 40 +87.5 + 1 +Blatt + 41 +0.75 + 0 +POLYLINE + 5 +2A3 + 8 +PE-FOLIE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +2094 + 8 +PE-FOLIE + 10 +4125.0 + 20 +4512.5 + 30 +0.0 + 0 +VERTEX + 5 +2095 + 8 +PE-FOLIE + 10 +16990.0 + 20 +4512.5 + 30 +0.0 + 0 +SEQEND + 5 +2096 + 8 +PE-FOLIE + 0 +POLYLINE + 5 +2A7 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +2097 + 8 +MAUERWERK + 10 +4125.0 + 20 +4525.0 + 30 +0.0 + 0 +VERTEX + 5 +2098 + 8 +MAUERWERK + 10 +4490.0 + 20 +4525.0 + 30 +0.0 + 0 +VERTEX + 5 +2099 + 8 +MAUERWERK + 10 +4490.0 + 20 +5740.0 + 30 +0.0 + 0 +VERTEX + 5 +209A + 8 +MAUERWERK + 10 +4125.0 + 20 +5740.0 + 30 +0.0 + 0 +SEQEND + 5 +209B + 8 +MAUERWERK + 0 +POLYLINE + 5 +2AD + 8 +PE-FOLIE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +209C + 8 +PE-FOLIE + 10 +4225.684022 + 20 +5752.778177 + 30 +0.0 + 0 +VERTEX + 5 +209D + 8 +PE-FOLIE + 10 +4490.0 + 20 +5752.223381 + 30 +0.0 + 0 +SEQEND + 5 +209E + 8 +PE-FOLIE + 0 +POLYLINE + 5 +2B1 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +209F + 8 +HOLZ + 10 +4217.5 + 20 +5765.0 + 30 +0.0 + 0 +VERTEX + 5 +20A0 + 8 +HOLZ + 10 +4397.5 + 20 +5765.0 + 30 +0.0 + 0 +VERTEX + 5 +20A1 + 8 +HOLZ + 10 +4397.5 + 20 +5945.0 + 30 +0.0 + 0 +VERTEX + 5 +20A2 + 8 +HOLZ + 10 +4217.5 + 20 +5945.0 + 30 +0.0 + 0 +SEQEND + 5 +20A3 + 8 +HOLZ + 0 +POLYLINE + 5 +2B7 + 8 +DECKEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +20A4 + 8 +DECKEN + 10 +4125.0 + 20 +4500.0 + 30 +0.0 + 0 +VERTEX + 5 +20A5 + 8 +DECKEN + 10 +4125.0 + 20 +4335.0 + 30 +0.0 + 0 +VERTEX + 5 +20A6 + 8 +DECKEN + 10 +4490.0 + 20 +4335.0 + 30 +0.0 + 0 +VERTEX + 5 +20A7 + 8 +DECKEN + 10 +4490.0 + 20 +4340.0 + 30 +0.0 + 0 +VERTEX + 5 +20A8 + 8 +DECKEN + 10 +16625.0 + 20 +4340.0 + 30 +0.0 + 0 +VERTEX + 5 +20A9 + 8 +DECKEN + 10 +16625.0 + 20 +4335.0 + 30 +0.0 + 0 +VERTEX + 5 +20AA + 8 +DECKEN + 10 +16990.0 + 20 +4335.0 + 30 +0.0 + 0 +VERTEX + 5 +20AB + 8 +DECKEN + 10 +16990.0 + 20 +4500.0 + 30 +0.0 + 0 +SEQEND + 5 +20AC + 8 +DECKEN + 0 +POLYLINE + 5 +2C1 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +20AD + 8 +HOLZ + 10 +7082.5 + 20 +7495.0 + 30 +0.0 + 0 +VERTEX + 5 +20AE + 8 +HOLZ + 10 +7282.5 + 20 +7495.0 + 30 +0.0 + 0 +VERTEX + 5 +20AF + 8 +HOLZ + 10 +7282.5 + 20 +7735.0 + 30 +0.0 + 0 +VERTEX + 5 +20B0 + 8 +HOLZ + 10 +7082.5 + 20 +7735.0 + 30 +0.0 + 0 +SEQEND + 5 +20B1 + 8 +HOLZ + 0 +POLYLINE + 5 +2C7 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +20B2 + 8 +HOLZ + 10 +4217.5 + 20 +5909.624648 + 30 +0.0 + 0 +VERTEX + 5 +20B3 + 8 +HOLZ + 10 +3804.997602 + 20 +5651.864542 + 30 +0.0 + 0 +VERTEX + 5 +20B4 + 8 +HOLZ + 10 +3711.310187 + 20 +5801.381599 + 30 +0.0 + 0 +VERTEX + 5 +20B5 + 8 +HOLZ + 10 +3790.312391 + 20 +5854.940316 + 30 +0.0 + 0 +VERTEX + 5 +20B6 + 8 +HOLZ + 10 +10557.5 + 20 +10083.548452 + 30 +0.0 + 0 +SEQEND + 5 +20B7 + 8 +HOLZ + 0 +POLYLINE + 5 +2CE + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +20B8 + 8 +HOLZ + 10 +14032.5 + 20 +7495.0 + 30 +0.0 + 0 +VERTEX + 5 +20B9 + 8 +HOLZ + 10 +13832.5 + 20 +7495.0 + 30 +0.0 + 0 +VERTEX + 5 +20BA + 8 +HOLZ + 10 +13832.5 + 20 +7735.0 + 30 +0.0 + 0 +VERTEX + 5 +20BB + 8 +HOLZ + 10 +14032.5 + 20 +7735.0 + 30 +0.0 + 0 +SEQEND + 5 +20BC + 8 +HOLZ + 0 +POLYLINE + 5 +2D4 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +20BD + 8 +HOLZ + 10 +16897.5 + 20 +5765.0 + 30 +0.0 + 0 +VERTEX + 5 +20BE + 8 +HOLZ + 10 +16717.5 + 20 +5765.0 + 30 +0.0 + 0 +VERTEX + 5 +20BF + 8 +HOLZ + 10 +16717.5 + 20 +5945.0 + 30 +0.0 + 0 +VERTEX + 5 +20C0 + 8 +HOLZ + 10 +16897.5 + 20 +5945.0 + 30 +0.0 + 0 +SEQEND + 5 +20C1 + 8 +HOLZ + 0 +POLYLINE + 5 +2DA + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +20C2 + 8 +MAUERWERK + 10 +16990.0 + 20 +4525.0 + 30 +0.0 + 0 +VERTEX + 5 +20C3 + 8 +MAUERWERK + 10 +16625.0 + 20 +4525.0 + 30 +0.0 + 0 +VERTEX + 5 +20C4 + 8 +MAUERWERK + 10 +16625.0 + 20 +5740.0 + 30 +0.0 + 0 +VERTEX + 5 +20C5 + 8 +MAUERWERK + 10 +16990.0 + 20 +5740.0 + 30 +0.0 + 0 +SEQEND + 5 +20C6 + 8 +MAUERWERK + 0 +POLYLINE + 5 +2E0 + 8 +PE-FOLIE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +20C7 + 8 +PE-FOLIE + 10 +16889.315978 + 20 +5752.778177 + 30 +0.0 + 0 +VERTEX + 5 +20C8 + 8 +PE-FOLIE + 10 +16625.0 + 20 +5752.223381 + 30 +0.0 + 0 +SEQEND + 5 +20C9 + 8 +PE-FOLIE + 0 +POLYLINE + 5 +2E4 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +20CA + 8 +HOLZ + 10 +10477.5 + 20 +9596.0 + 30 +0.0 + 0 +VERTEX + 5 +20CB + 8 +HOLZ + 10 +10477.5 + 20 +9856.0 + 30 +0.0 + 0 +VERTEX + 5 +20CC + 8 +HOLZ + 10 +10637.5 + 20 +9856.0 + 30 +0.0 + 0 +VERTEX + 5 +20CD + 8 +HOLZ + 10 +10637.5 + 20 +9596.0 + 30 +0.0 + 0 +SEQEND + 5 +20CE + 8 +HOLZ + 0 +POLYLINE + 5 +2EA + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +20CF + 8 +HOLZ + 10 +10557.5 + 20 +9871.296339 + 30 +0.0 + 0 +VERTEX + 5 +20D0 + 8 +HOLZ + 10 +10533.020741 + 20 +9856.0 + 30 +0.0 + 0 +SEQEND + 5 +20D1 + 8 +HOLZ + 0 +POLYLINE + 5 +2EE + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +20D2 + 8 +HOLZ + 10 +10477.5 + 20 +9821.306791 + 30 +0.0 + 0 +VERTEX + 5 +20D3 + 8 +HOLZ + 10 +7138.711204 + 20 +7735.0 + 30 +0.0 + 0 +SEQEND + 5 +20D4 + 8 +HOLZ + 0 +POLYLINE + 5 +2F2 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +20D5 + 8 +HOLZ + 10 +10557.5 + 20 +9871.296339 + 30 +0.0 + 0 +VERTEX + 5 +20D6 + 8 +HOLZ + 10 +10581.979259 + 20 +9856.0 + 30 +0.0 + 0 +SEQEND + 5 +20D7 + 8 +HOLZ + 0 +POLYLINE + 5 +2F6 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +20D8 + 8 +HOLZ + 10 +10637.5 + 20 +9821.306791 + 30 +0.0 + 0 +VERTEX + 5 +20D9 + 8 +HOLZ + 10 +13976.288796 + 20 +7735.0 + 30 +0.0 + 0 +SEQEND + 5 +20DA + 8 +HOLZ + 0 +POINT + 5 +2FA + 8 +HOLZ + 10 +6441.068013 + 20 +4525.0 + 30 +0.0 + 0 +POINT + 5 +2FB + 8 +HOLZ + 10 +8502.789103 + 20 +4525.0 + 30 +0.0 + 0 +POINT + 5 +2FC + 8 +HOLZ + 10 +10564.510193 + 20 +4525.0 + 30 +0.0 + 0 +POINT + 5 +2FD + 8 +HOLZ + 10 +12626.231282 + 20 +4525.0 + 30 +0.0 + 0 +POINT + 5 +2FE + 8 +HOLZ + 10 +14687.952372 + 20 +4525.0 + 30 +0.0 + 0 +POINT + 5 +2FF + 8 +HOLZ + 10 +16625.0 + 20 +4649.673462 + 30 +0.0 + 0 +POINT + 5 +300 + 8 +HOLZ + 10 +14618.605449 + 20 +4705.0 + 30 +0.0 + 0 +POINT + 5 +301 + 8 +HOLZ + 10 +12556.884359 + 20 +4705.0 + 30 +0.0 + 0 +POINT + 5 +302 + 8 +HOLZ + 10 +10495.163269 + 20 +4705.0 + 30 +0.0 + 0 +POINT + 5 +303 + 8 +HOLZ + 10 +8433.442179 + 20 +4705.0 + 30 +0.0 + 0 +POINT + 5 +304 + 8 +HOLZ + 10 +6371.72109 + 20 +4705.0 + 30 +0.0 + 0 +POLYLINE + 5 +305 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +20DB + 8 +HOLZ + 10 +5816.944191 + 20 +4705.004962 + 30 +0.0 + 0 +VERTEX + 5 +20DC + 8 +HOLZ + 10 +4490.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +20DD + 8 +HOLZ + 10 +4490.0 + 20 +4525.0 + 30 +0.0 + 0 +SEQEND + 5 +20DE + 8 +HOLZ + 0 +POLYLINE + 5 +30A + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +20DF + 8 +HOLZ + 10 +5827.147847 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +20E0 + 8 +HOLZ + 10 +5827.147628 + 20 +4704.999605 + 30 +0.0 + 0 +SEQEND + 5 +20E1 + 8 +HOLZ + 0 +POLYLINE + 5 +30E + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +20E2 + 8 +HOLZ + 10 +7082.5 + 20 +6974.383492 + 30 +0.0 + 0 +VERTEX + 5 +20E3 + 8 +HOLZ + 10 +5851.42476 + 20 +4748.886988 + 30 +0.0 + 0 +SEQEND + 5 +20E4 + 8 +HOLZ + 0 +POLYLINE + 5 +312 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +20E5 + 8 +HOLZ + 10 +7082.367224 + 20 +6974.411882 + 30 +0.0 + 0 +VERTEX + 5 +20E6 + 8 +HOLZ + 10 +7112.367224 + 20 +6974.411882 + 30 +0.0 + 0 +SEQEND + 5 +20E7 + 8 +HOLZ + 0 +POLYLINE + 5 +316 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +20E8 + 8 +HOLZ + 10 +7082.661895 + 20 +6599.209373 + 30 +0.0 + 0 +VERTEX + 5 +20E9 + 8 +HOLZ + 10 +7112.367224 + 20 +6974.411882 + 30 +0.0 + 0 +SEQEND + 5 +20EA + 8 +HOLZ + 0 +POLYLINE + 5 +31A + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +20EB + 8 +HOLZ + 10 +7082.5 + 20 +6602.538277 + 30 +0.0 + 0 +VERTEX + 5 +20EC + 8 +HOLZ + 10 +7082.5 + 20 +4705.0 + 30 +0.0 + 0 +SEQEND + 5 +20ED + 8 +HOLZ + 0 +POLYLINE + 5 +31E + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +20EE + 8 +HOLZ + 10 +5849.618529 + 20 +4751.014033 + 30 +0.0 + 0 +VERTEX + 5 +20EF + 8 +HOLZ + 10 +5855.0 + 20 +4751.014033 + 30 +0.0 + 0 +SEQEND + 5 +20F0 + 8 +HOLZ + 0 +POLYLINE + 5 +322 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +20F1 + 8 +HOLZ + 10 +5851.42476 + 20 +4748.886988 + 30 +0.0 + 0 +VERTEX + 5 +20F2 + 8 +HOLZ + 10 +5960.0 + 20 +4525.0 + 30 +0.0 + 0 +SEQEND + 5 +20F3 + 8 +HOLZ + 0 +POLYLINE + 5 +326 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +20F4 + 8 +HOLZ + 10 +5931.352872 + 20 +4893.378346 + 30 +0.0 + 0 +VERTEX + 5 +20F5 + 8 +HOLZ + 10 +6110.0 + 20 +4525.0 + 30 +0.0 + 0 +SEQEND + 5 +20F6 + 8 +HOLZ + 0 +POLYLINE + 5 +32A + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +20F7 + 8 +DETAILS + 10 +5915.076976 + 20 +4675.125425 + 30 +0.0 + 0 +VERTEX + 5 +20F8 + 8 +DETAILS + 10 +5937.538667 + 20 +4680.786371 + 30 +0.0 + 0 +SEQEND + 5 +20F9 + 8 +DETAILS + 0 +POLYLINE + 5 +32E + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +20FA + 8 +DETAILS + 10 +5950.234431 + 20 +4684.49526 + 30 +0.0 + 0 +VERTEX + 5 +20FB + 8 +DETAILS + 10 +5968.985132 + 20 +4689.37543 + 30 +0.0 + 0 +SEQEND + 5 +20FC + 8 +DETAILS + 0 +POLYLINE + 5 +332 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +20FD + 8 +DETAILS + 10 +5978.555795 + 20 +4691.522709 + 30 +0.0 + 0 +VERTEX + 5 +20FE + 8 +DETAILS + 10 +5995.157911 + 20 +4695.426764 + 30 +0.0 + 0 +SEQEND + 5 +20FF + 8 +DETAILS + 0 +POLYLINE + 5 +336 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2100 + 8 +DETAILS + 10 +6002.18946 + 20 +4696.793209 + 30 +0.0 + 0 +VERTEX + 5 +2101 + 8 +DETAILS + 10 +6017.81506 + 20 +4700.892544 + 30 +0.0 + 0 +SEQEND + 5 +2102 + 8 +DETAILS + 0 +POLYLINE + 5 +33A + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2103 + 8 +DETAILS + 10 +5910.389276 + 20 +4679.224761 + 30 +0.0 + 0 +VERTEX + 5 +2104 + 8 +DETAILS + 10 +5900.818613 + 20 +4691.132263 + 30 +0.0 + 0 +SEQEND + 5 +2105 + 8 +DETAILS + 0 +POLYLINE + 5 +33E + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2106 + 8 +DETAILS + 10 +5895.545024 + 20 +4697.574043 + 30 +0.0 + 0 +VERTEX + 5 +2107 + 8 +DETAILS + 10 +5886.169625 + 20 +4709.091158 + 30 +0.0 + 0 +SEQEND + 5 +2108 + 8 +DETAILS + 0 +POLYLINE + 5 +342 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2109 + 8 +DETAILS + 10 +5880.896036 + 20 +4714.16655 + 30 +0.0 + 0 +VERTEX + 5 +210A + 8 +DETAILS + 10 +5869.958135 + 20 +4726.854887 + 30 +0.0 + 0 +SEQEND + 5 +210B + 8 +DETAILS + 0 +POLYLINE + 5 +346 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +210C + 8 +HOLZ + 10 +5851.42476 + 20 +4748.886988 + 30 +0.0 + 0 +VERTEX + 5 +210D + 8 +HOLZ + 10 +5849.618529 + 20 +4751.014033 + 30 +0.0 + 0 +SEQEND + 5 +210E + 8 +HOLZ + 0 +POLYLINE + 5 +34A + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +210F + 8 +HOLZ + 10 +6023.95213 + 20 +4702.434546 + 30 +0.0 + 0 +VERTEX + 5 +2110 + 8 +HOLZ + 10 +6032.574688 + 20 +4704.574379 + 30 +0.0 + 0 +VERTEX + 5 +2111 + 8 +HOLZ + 10 +7082.5 + 20 +6602.538277 + 30 +0.0 + 0 +SEQEND + 5 +2112 + 8 +HOLZ + 0 +POLYLINE + 5 +34F + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2113 + 8 +HOLZ + 10 +5872.708223 + 20 +4704.999538 + 30 +0.0 + 0 +VERTEX + 5 +2114 + 8 +HOLZ + 10 +5555.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +2115 + 8 +HOLZ + 10 +5555.0 + 20 +4750.0 + 30 +0.0 + 0 +VERTEX + 5 +2116 + 8 +HOLZ + 10 +5855.0 + 20 +4750.0 + 30 +0.0 + 0 +SEQEND + 5 +2117 + 8 +HOLZ + 0 +POLYLINE + 5 +355 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2118 + 8 +HOLZ + 10 +14032.5 + 20 +6974.383492 + 30 +0.0 + 0 +VERTEX + 5 +2119 + 8 +HOLZ + 10 +15263.57524 + 20 +4748.886988 + 30 +0.0 + 0 +SEQEND + 5 +211A + 8 +HOLZ + 0 +POLYLINE + 5 +359 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +211B + 8 +HOLZ + 10 +15091.04787 + 20 +4702.434546 + 30 +0.0 + 0 +VERTEX + 5 +211C + 8 +HOLZ + 10 +15082.425312 + 20 +4704.574379 + 30 +0.0 + 0 +VERTEX + 5 +211D + 8 +HOLZ + 10 +14032.5 + 20 +6602.538277 + 30 +0.0 + 0 +SEQEND + 5 +211E + 8 +HOLZ + 0 +POLYLINE + 5 +35E + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +211F + 8 +HOLZ + 10 +14032.392092 + 20 +6600.0 + 30 +0.0 + 0 +VERTEX + 5 +2120 + 8 +HOLZ + 10 +14002.632776 + 20 +6974.411882 + 30 +0.0 + 0 +SEQEND + 5 +2121 + 8 +HOLZ + 0 +POLYLINE + 5 +362 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2122 + 8 +HOLZ + 10 +15242.291777 + 20 +4704.999538 + 30 +0.0 + 0 +VERTEX + 5 +2123 + 8 +HOLZ + 10 +15560.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +2124 + 8 +HOLZ + 10 +15560.0 + 20 +4750.0 + 30 +0.0 + 0 +VERTEX + 5 +2125 + 8 +HOLZ + 10 +15260.0 + 20 +4750.0 + 30 +0.0 + 0 +SEQEND + 5 +2126 + 8 +HOLZ + 0 +POLYLINE + 5 +368 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2127 + 8 +HOLZ + 10 +15183.647128 + 20 +4893.378346 + 30 +0.0 + 0 +VERTEX + 5 +2128 + 8 +HOLZ + 10 +15005.0 + 20 +4525.0 + 30 +0.0 + 0 +SEQEND + 5 +2129 + 8 +HOLZ + 0 +POLYLINE + 5 +36C + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +212A + 8 +HOLZ + 10 +15263.57524 + 20 +4748.886988 + 30 +0.0 + 0 +VERTEX + 5 +212B + 8 +HOLZ + 10 +15155.0 + 20 +4525.0 + 30 +0.0 + 0 +SEQEND + 5 +212C + 8 +HOLZ + 0 +POLYLINE + 5 +370 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +212D + 8 +HOLZ + 10 +14032.632776 + 20 +6974.411882 + 30 +0.0 + 0 +VERTEX + 5 +212E + 8 +HOLZ + 10 +14002.632776 + 20 +6974.411882 + 30 +0.0 + 0 +SEQEND + 5 +212F + 8 +HOLZ + 0 +POLYLINE + 5 +374 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2130 + 8 +HOLZ + 10 +14032.5 + 20 +6602.538277 + 30 +0.0 + 0 +VERTEX + 5 +2131 + 8 +HOLZ + 10 +14032.5 + 20 +4705.0 + 30 +0.0 + 0 +SEQEND + 5 +2132 + 8 +HOLZ + 0 +POLYLINE + 5 +378 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2133 + 8 +HOLZ + 10 +4490.0 + 20 +4525.0 + 30 +0.0 + 0 +VERTEX + 5 +2134 + 8 +HOLZ + 10 +16625.0 + 20 +4525.0 + 30 +0.0 + 0 +VERTEX + 5 +2135 + 8 +HOLZ + 10 +16625.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +2136 + 8 +HOLZ + 10 +15242.292001 + 20 +4705.0 + 30 +0.0 + 0 +SEQEND + 5 +2137 + 8 +HOLZ + 0 +POLYLINE + 5 +37E + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2138 + 8 +HOLZ + 10 +10557.5 + 20 +7515.0 + 30 +0.0 + 0 +VERTEX + 5 +2139 + 8 +HOLZ + 10 +7282.5 + 20 +7515.0 + 30 +0.0 + 0 +VERTEX + 5 +213A + 8 +HOLZ + 10 +7282.5 + 20 +7495.0 + 30 +0.0 + 0 +VERTEX + 5 +213B + 8 +HOLZ + 10 +7082.5 + 20 +7495.0 + 30 +0.0 + 0 +VERTEX + 5 +213C + 8 +HOLZ + 10 +7082.5 + 20 +7515.0 + 30 +0.0 + 0 +VERTEX + 5 +213D + 8 +HOLZ + 10 +6446.963223 + 20 +7515.0 + 30 +0.0 + 0 +SEQEND + 5 +213E + 8 +HOLZ + 0 +POLYLINE + 5 +386 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +213F + 8 +HOLZ + 10 +6190.909699 + 20 +7355.0 + 30 +0.0 + 0 +VERTEX + 5 +2140 + 8 +HOLZ + 10 +10557.5 + 20 +7355.0 + 30 +0.0 + 0 +SEQEND + 5 +2141 + 8 +HOLZ + 0 +POLYLINE + 5 +38A + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2142 + 8 +DETAILS + 10 +6545.0 + 20 +7365.0 + 30 +0.0 + 0 +VERTEX + 5 +2143 + 8 +DETAILS + 10 +6580.0 + 20 +7385.0 + 30 +0.0 + 0 +SEQEND + 5 +2144 + 8 +DETAILS + 0 +POLYLINE + 5 +38E + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2145 + 8 +HOLZ + 10 +7082.5 + 20 +7699.875341 + 30 +0.0 + 0 +VERTEX + 5 +2146 + 8 +HOLZ + 10 +6786.637608 + 20 +7515.0 + 30 +0.0 + 0 +SEQEND + 5 +2147 + 8 +HOLZ + 0 +POLYLINE + 5 +392 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2148 + 8 +HOLZ + 10 +6530.584083 + 20 +7355.0 + 30 +0.0 + 0 +VERTEX + 5 +2149 + 8 +HOLZ + 10 +4274.112397 + 20 +5945.0 + 30 +0.0 + 0 +SEQEND + 5 +214A + 8 +HOLZ + 0 +POLYLINE + 5 +396 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +214B + 8 +DETAILS + 10 +6595.0 + 20 +7395.0 + 30 +0.0 + 0 +VERTEX + 5 +214C + 8 +DETAILS + 10 +6630.0 + 20 +7415.0 + 30 +0.0 + 0 +SEQEND + 5 +214D + 8 +DETAILS + 0 +POLYLINE + 5 +39A + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +214E + 8 +DETAILS + 10 +6645.0 + 20 +7425.0 + 30 +0.0 + 0 +VERTEX + 5 +214F + 8 +DETAILS + 10 +6680.0 + 20 +7445.0 + 30 +0.0 + 0 +SEQEND + 5 +2150 + 8 +DETAILS + 0 +POLYLINE + 5 +39E + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2151 + 8 +DETAILS + 10 +6695.0 + 20 +7455.0 + 30 +0.0 + 0 +VERTEX + 5 +2152 + 8 +DETAILS + 10 +6730.0 + 20 +7475.0 + 30 +0.0 + 0 +SEQEND + 5 +2153 + 8 +DETAILS + 0 +POLYLINE + 5 +3A2 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2154 + 8 +DETAILS + 10 +6745.0 + 20 +7485.0 + 30 +0.0 + 0 +VERTEX + 5 +2155 + 8 +DETAILS + 10 +6780.0 + 20 +7505.0 + 30 +0.0 + 0 +SEQEND + 5 +2156 + 8 +DETAILS + 0 +POLYLINE + 5 +3A6 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2157 + 8 +HOLZ + 10 +7082.5 + 20 +7355.0 + 30 +0.0 + 0 +VERTEX + 5 +2158 + 8 +HOLZ + 10 +7082.5 + 20 +6974.383492 + 30 +0.0 + 0 +SEQEND + 5 +2159 + 8 +HOLZ + 0 +POLYLINE + 5 +3AA + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +215A + 8 +HOLZ + 10 +7282.5 + 20 +7495.0 + 30 +0.0 + 0 +VERTEX + 5 +215B + 8 +HOLZ + 10 +7082.5 + 20 +7495.0 + 30 +0.0 + 0 +SEQEND + 5 +215C + 8 +HOLZ + 0 +POLYLINE + 5 +3AE + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +215D + 8 +DETAILS + 10 +7282.396934 + 20 +7364.082396 + 30 +0.0 + 0 +VERTEX + 5 +215E + 8 +DETAILS + 10 +7282.396934 + 20 +7389.961937 + 30 +0.0 + 0 +SEQEND + 5 +215F + 8 +DETAILS + 0 +POLYLINE + 5 +3B2 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2160 + 8 +DETAILS + 10 +10317.5 + 20 +7366.578903 + 30 +0.0 + 0 +VERTEX + 5 +2161 + 8 +DETAILS + 10 +10317.5 + 20 +7396.578903 + 30 +0.0 + 0 +SEQEND + 5 +2162 + 8 +DETAILS + 0 +POLYLINE + 5 +3B6 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2163 + 8 +DETAILS + 10 +10317.5 + 20 +7419.321326 + 30 +0.0 + 0 +VERTEX + 5 +2164 + 8 +DETAILS + 10 +10317.5 + 20 +7449.321326 + 30 +0.0 + 0 +SEQEND + 5 +2165 + 8 +DETAILS + 0 +POLYLINE + 5 +3BA + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2166 + 8 +DETAILS + 10 +10317.5 + 20 +7473.337962 + 30 +0.0 + 0 +VERTEX + 5 +2167 + 8 +DETAILS + 10 +10317.5 + 20 +7503.337962 + 30 +0.0 + 0 +SEQEND + 5 +2168 + 8 +DETAILS + 0 +POLYLINE + 5 +3BE + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2169 + 8 +HOLZ + 10 +10477.5 + 20 +7355.0 + 30 +0.0 + 0 +VERTEX + 5 +216A + 8 +HOLZ + 10 +10477.5 + 20 +4705.0 + 30 +0.0 + 0 +SEQEND + 5 +216B + 8 +HOLZ + 0 +POLYLINE + 5 +3C2 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +216C + 8 +DETAILS + 10 +10477.555127 + 20 +7366.578903 + 30 +0.0 + 0 +VERTEX + 5 +216D + 8 +DETAILS + 10 +10477.555127 + 20 +7396.578903 + 30 +0.0 + 0 +SEQEND + 5 +216E + 8 +DETAILS + 0 +POLYLINE + 5 +3C6 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +216F + 8 +DETAILS + 10 +10477.555127 + 20 +7419.321326 + 30 +0.0 + 0 +VERTEX + 5 +2170 + 8 +DETAILS + 10 +10477.555127 + 20 +7449.321326 + 30 +0.0 + 0 +SEQEND + 5 +2171 + 8 +DETAILS + 0 +POLYLINE + 5 +3CA + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2172 + 8 +DETAILS + 10 +10477.555127 + 20 +7473.337962 + 30 +0.0 + 0 +VERTEX + 5 +2173 + 8 +DETAILS + 10 +10477.555127 + 20 +7503.337962 + 30 +0.0 + 0 +SEQEND + 5 +2174 + 8 +DETAILS + 0 +POLYLINE + 5 +3CE + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2175 + 8 +DETAILS + 10 +9567.5 + 20 +7366.578903 + 30 +0.0 + 0 +VERTEX + 5 +2176 + 8 +DETAILS + 10 +9567.5 + 20 +7396.578903 + 30 +0.0 + 0 +SEQEND + 5 +2177 + 8 +DETAILS + 0 +POLYLINE + 5 +3D2 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2178 + 8 +DETAILS + 10 +9567.5 + 20 +7419.321326 + 30 +0.0 + 0 +VERTEX + 5 +2179 + 8 +DETAILS + 10 +9567.5 + 20 +7449.321326 + 30 +0.0 + 0 +SEQEND + 5 +217A + 8 +DETAILS + 0 +POLYLINE + 5 +3D6 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +217B + 8 +DETAILS + 10 +9567.5 + 20 +7473.337962 + 30 +0.0 + 0 +VERTEX + 5 +217C + 8 +DETAILS + 10 +9567.5 + 20 +7503.337962 + 30 +0.0 + 0 +SEQEND + 5 +217D + 8 +DETAILS + 0 +POLYLINE + 5 +3DA + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +217E + 8 +DETAILS + 10 +9407.5 + 20 +7473.337962 + 30 +0.0 + 0 +VERTEX + 5 +217F + 8 +DETAILS + 10 +9407.5 + 20 +7503.337962 + 30 +0.0 + 0 +SEQEND + 5 +2180 + 8 +DETAILS + 0 +POLYLINE + 5 +3DE + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2181 + 8 +DETAILS + 10 +9407.5 + 20 +7419.321326 + 30 +0.0 + 0 +VERTEX + 5 +2182 + 8 +DETAILS + 10 +9407.5 + 20 +7449.321326 + 30 +0.0 + 0 +SEQEND + 5 +2183 + 8 +DETAILS + 0 +POLYLINE + 5 +3E2 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2184 + 8 +DETAILS + 10 +9407.5 + 20 +7366.578903 + 30 +0.0 + 0 +VERTEX + 5 +2185 + 8 +DETAILS + 10 +9407.5 + 20 +7396.578903 + 30 +0.0 + 0 +SEQEND + 5 +2186 + 8 +DETAILS + 0 +POLYLINE + 5 +3E6 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2187 + 8 +DETAILS + 10 +8657.5 + 20 +7366.578903 + 30 +0.0 + 0 +VERTEX + 5 +2188 + 8 +DETAILS + 10 +8657.5 + 20 +7396.578903 + 30 +0.0 + 0 +SEQEND + 5 +2189 + 8 +DETAILS + 0 +POLYLINE + 5 +3EA + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +218A + 8 +DETAILS + 10 +8657.5 + 20 +7419.321326 + 30 +0.0 + 0 +VERTEX + 5 +218B + 8 +DETAILS + 10 +8657.5 + 20 +7449.321326 + 30 +0.0 + 0 +SEQEND + 5 +218C + 8 +DETAILS + 0 +POLYLINE + 5 +3EE + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +218D + 8 +DETAILS + 10 +8657.5 + 20 +7473.337962 + 30 +0.0 + 0 +VERTEX + 5 +218E + 8 +DETAILS + 10 +8657.5 + 20 +7503.337962 + 30 +0.0 + 0 +SEQEND + 5 +218F + 8 +DETAILS + 0 +POLYLINE + 5 +3F2 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2190 + 8 +DETAILS + 10 +8497.5 + 20 +7473.337962 + 30 +0.0 + 0 +VERTEX + 5 +2191 + 8 +DETAILS + 10 +8497.5 + 20 +7503.337962 + 30 +0.0 + 0 +SEQEND + 5 +2192 + 8 +DETAILS + 0 +POLYLINE + 5 +3F6 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2193 + 8 +DETAILS + 10 +8497.5 + 20 +7419.321326 + 30 +0.0 + 0 +VERTEX + 5 +2194 + 8 +DETAILS + 10 +8497.5 + 20 +7449.321326 + 30 +0.0 + 0 +SEQEND + 5 +2195 + 8 +DETAILS + 0 +POLYLINE + 5 +3FA + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2196 + 8 +DETAILS + 10 +8497.5 + 20 +7366.578903 + 30 +0.0 + 0 +VERTEX + 5 +2197 + 8 +DETAILS + 10 +8497.5 + 20 +7396.578903 + 30 +0.0 + 0 +SEQEND + 5 +2198 + 8 +DETAILS + 0 +POLYLINE + 5 +3FE + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2199 + 8 +DETAILS + 10 +7897.5 + 20 +7366.578903 + 30 +0.0 + 0 +VERTEX + 5 +219A + 8 +DETAILS + 10 +7897.5 + 20 +7396.578903 + 30 +0.0 + 0 +SEQEND + 5 +219B + 8 +DETAILS + 0 +POLYLINE + 5 +402 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +219C + 8 +DETAILS + 10 +7897.5 + 20 +7419.321326 + 30 +0.0 + 0 +VERTEX + 5 +219D + 8 +DETAILS + 10 +7897.5 + 20 +7449.321326 + 30 +0.0 + 0 +SEQEND + 5 +219E + 8 +DETAILS + 0 +POLYLINE + 5 +406 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +219F + 8 +DETAILS + 10 +7897.5 + 20 +7473.337962 + 30 +0.0 + 0 +VERTEX + 5 +21A0 + 8 +DETAILS + 10 +7897.5 + 20 +7503.337962 + 30 +0.0 + 0 +SEQEND + 5 +21A1 + 8 +DETAILS + 0 +POLYLINE + 5 +40A + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21A2 + 8 +DETAILS + 10 +7737.5 + 20 +7473.337962 + 30 +0.0 + 0 +VERTEX + 5 +21A3 + 8 +DETAILS + 10 +7737.5 + 20 +7503.337962 + 30 +0.0 + 0 +SEQEND + 5 +21A4 + 8 +DETAILS + 0 +POLYLINE + 5 +40E + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21A5 + 8 +DETAILS + 10 +7737.5 + 20 +7419.321326 + 30 +0.0 + 0 +VERTEX + 5 +21A6 + 8 +DETAILS + 10 +7737.5 + 20 +7449.321326 + 30 +0.0 + 0 +SEQEND + 5 +21A7 + 8 +DETAILS + 0 +POLYLINE + 5 +412 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21A8 + 8 +DETAILS + 10 +7737.5 + 20 +7366.578903 + 30 +0.0 + 0 +VERTEX + 5 +21A9 + 8 +DETAILS + 10 +7737.5 + 20 +7396.578903 + 30 +0.0 + 0 +SEQEND + 5 +21AA + 8 +DETAILS + 0 +POLYLINE + 5 +416 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21AB + 8 +DETAILS + 10 +7282.323786 + 20 +7419.321326 + 30 +0.0 + 0 +VERTEX + 5 +21AC + 8 +DETAILS + 10 +7282.323786 + 20 +7449.321326 + 30 +0.0 + 0 +SEQEND + 5 +21AD + 8 +DETAILS + 0 +POLYLINE + 5 +41A + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21AE + 8 +DETAILS + 10 +7282.323786 + 20 +7473.337962 + 30 +0.0 + 0 +VERTEX + 5 +21AF + 8 +DETAILS + 10 +7282.323786 + 20 +7503.337962 + 30 +0.0 + 0 +SEQEND + 5 +21B0 + 8 +DETAILS + 0 +POLYLINE + 5 +41E + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21B1 + 8 +DETAILS + 10 +7442.323786 + 20 +7473.337962 + 30 +0.0 + 0 +VERTEX + 5 +21B2 + 8 +DETAILS + 10 +7442.323786 + 20 +7503.337962 + 30 +0.0 + 0 +SEQEND + 5 +21B3 + 8 +DETAILS + 0 +POLYLINE + 5 +422 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21B4 + 8 +DETAILS + 10 +7442.323786 + 20 +7419.321326 + 30 +0.0 + 0 +VERTEX + 5 +21B5 + 8 +DETAILS + 10 +7442.323786 + 20 +7449.321326 + 30 +0.0 + 0 +SEQEND + 5 +21B6 + 8 +DETAILS + 0 +POLYLINE + 5 +426 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21B7 + 8 +DETAILS + 10 +7442.396934 + 20 +7364.082396 + 30 +0.0 + 0 +VERTEX + 5 +21B8 + 8 +DETAILS + 10 +7442.396934 + 20 +7389.961937 + 30 +0.0 + 0 +SEQEND + 5 +21B9 + 8 +DETAILS + 0 +POLYLINE + 5 +42A + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21BA + 8 +DETAILS + 10 +7081.668956 + 20 +7473.337962 + 30 +0.0 + 0 +VERTEX + 5 +21BB + 8 +DETAILS + 10 +7081.668956 + 20 +7503.337962 + 30 +0.0 + 0 +SEQEND + 5 +21BC + 8 +DETAILS + 0 +POLYLINE + 5 +42E + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21BD + 8 +DETAILS + 10 +7081.668956 + 20 +7419.321326 + 30 +0.0 + 0 +VERTEX + 5 +21BE + 8 +DETAILS + 10 +7081.668956 + 20 +7449.321326 + 30 +0.0 + 0 +SEQEND + 5 +21BF + 8 +DETAILS + 0 +POLYLINE + 5 +432 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21C0 + 8 +DETAILS + 10 +7081.742105 + 20 +7364.082396 + 30 +0.0 + 0 +VERTEX + 5 +21C1 + 8 +DETAILS + 10 +7081.742105 + 20 +7389.961937 + 30 +0.0 + 0 +SEQEND + 5 +21C2 + 8 +DETAILS + 0 +POLYLINE + 5 +436 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +4.425 + 41 +4.425 + 0 +VERTEX + 5 +21C3 + 8 +DETAILS + 10 +6472.342783 + 20 +7441.053384 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +21C4 + 8 +DETAILS + 10 +6492.292783 + 20 +7441.053384 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +21C5 + 8 +DETAILS + 0 +POLYLINE + 5 +43A + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +4.35 + 41 +4.35 + 0 +VERTEX + 5 +21C6 + 8 +DETAILS + 10 +7146.51 + 20 +7425.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +21C7 + 8 +DETAILS + 10 +7158.49 + 20 +7425.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +21C8 + 8 +DETAILS + 0 +POLYLINE + 5 +43E + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +4.35 + 41 +4.35 + 0 +VERTEX + 5 +21C9 + 8 +DETAILS + 10 +7206.51 + 20 +7425.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +21CA + 8 +DETAILS + 10 +7218.49 + 20 +7425.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +21CB + 8 +DETAILS + 0 +POLYLINE + 5 +442 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21CC + 8 +HOLZ + 10 +14924.090301 + 20 +7355.0 + 30 +0.0 + 0 +VERTEX + 5 +21CD + 8 +HOLZ + 10 +10557.5 + 20 +7355.0 + 30 +0.0 + 0 +SEQEND + 5 +21CE + 8 +HOLZ + 0 +POLYLINE + 5 +446 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21CF + 8 +HOLZ + 10 +10557.5 + 20 +7515.0 + 30 +0.0 + 0 +VERTEX + 5 +21D0 + 8 +HOLZ + 10 +13832.5 + 20 +7515.0 + 30 +0.0 + 0 +VERTEX + 5 +21D1 + 8 +HOLZ + 10 +13832.5 + 20 +7495.0 + 30 +0.0 + 0 +VERTEX + 5 +21D2 + 8 +HOLZ + 10 +14032.5 + 20 +7495.0 + 30 +0.0 + 0 +VERTEX + 5 +21D3 + 8 +HOLZ + 10 +14032.5 + 20 +7515.0 + 30 +0.0 + 0 +VERTEX + 5 +21D4 + 8 +HOLZ + 10 +14668.036777 + 20 +7515.0 + 30 +0.0 + 0 +SEQEND + 5 +21D5 + 8 +HOLZ + 0 +POLYLINE + 5 +44E + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21D6 + 8 +HOLZ + 10 +13832.5 + 20 +7495.0 + 30 +0.0 + 0 +VERTEX + 5 +21D7 + 8 +HOLZ + 10 +14032.5 + 20 +7495.0 + 30 +0.0 + 0 +SEQEND + 5 +21D8 + 8 +HOLZ + 0 +POLYLINE + 5 +452 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21D9 + 8 +DETAILS + 10 +14520.0 + 20 +7395.0 + 30 +0.0 + 0 +VERTEX + 5 +21DA + 8 +DETAILS + 10 +14485.0 + 20 +7415.0 + 30 +0.0 + 0 +SEQEND + 5 +21DB + 8 +DETAILS + 0 +POLYLINE + 5 +456 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +4.425 + 41 +4.425 + 0 +VERTEX + 5 +21DC + 8 +DETAILS + 10 +14642.657217 + 20 +7441.053384 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +21DD + 8 +DETAILS + 10 +14622.707217 + 20 +7441.053384 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +21DE + 8 +DETAILS + 0 +POLYLINE + 5 +45A + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21DF + 8 +DETAILS + 10 +14570.0 + 20 +7365.0 + 30 +0.0 + 0 +VERTEX + 5 +21E0 + 8 +DETAILS + 10 +14535.0 + 20 +7385.0 + 30 +0.0 + 0 +SEQEND + 5 +21E1 + 8 +DETAILS + 0 +POLYLINE + 5 +45E + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21E2 + 8 +DETAILS + 10 +14370.0 + 20 +7485.0 + 30 +0.0 + 0 +VERTEX + 5 +21E3 + 8 +DETAILS + 10 +14336.69541 + 20 +7505.0 + 30 +0.0 + 0 +SEQEND + 5 +21E4 + 8 +DETAILS + 0 +POLYLINE + 5 +462 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21E5 + 8 +DETAILS + 10 +14420.0 + 20 +7455.0 + 30 +0.0 + 0 +VERTEX + 5 +21E6 + 8 +DETAILS + 10 +14385.0 + 20 +7476.807047 + 30 +0.0 + 0 +SEQEND + 5 +21E7 + 8 +DETAILS + 0 +POLYLINE + 5 +466 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21E8 + 8 +DETAILS + 10 +14470.0 + 20 +7425.0 + 30 +0.0 + 0 +VERTEX + 5 +21E9 + 8 +DETAILS + 10 +14435.0 + 20 +7446.929365 + 30 +0.0 + 0 +SEQEND + 5 +21EA + 8 +DETAILS + 0 +POLYLINE + 5 +46A + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +4.35 + 41 +4.35 + 0 +VERTEX + 5 +21EB + 8 +DETAILS + 10 +13908.49 + 20 +7425.0 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +21EC + 8 +DETAILS + 10 +13896.51 + 20 +7425.0 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +21ED + 8 +DETAILS + 0 +POLYLINE + 5 +46E + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +4.35 + 41 +4.35 + 0 +VERTEX + 5 +21EE + 8 +DETAILS + 10 +13968.49 + 20 +7425.0 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +21EF + 8 +DETAILS + 10 +13956.51 + 20 +7425.0 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +21F0 + 8 +DETAILS + 0 +POLYLINE + 5 +472 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21F1 + 8 +DETAILS + 10 +14033.257895 + 20 +7364.082396 + 30 +0.0 + 0 +VERTEX + 5 +21F2 + 8 +DETAILS + 10 +14033.257895 + 20 +7389.961937 + 30 +0.0 + 0 +SEQEND + 5 +21F3 + 8 +DETAILS + 0 +POLYLINE + 5 +476 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21F4 + 8 +DETAILS + 10 +14033.331044 + 20 +7419.321326 + 30 +0.0 + 0 +VERTEX + 5 +21F5 + 8 +DETAILS + 10 +14033.331044 + 20 +7449.321326 + 30 +0.0 + 0 +SEQEND + 5 +21F6 + 8 +DETAILS + 0 +POLYLINE + 5 +47A + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21F7 + 8 +DETAILS + 10 +14033.331044 + 20 +7473.337962 + 30 +0.0 + 0 +VERTEX + 5 +21F8 + 8 +DETAILS + 10 +14033.331044 + 20 +7503.337962 + 30 +0.0 + 0 +SEQEND + 5 +21F9 + 8 +DETAILS + 0 +POLYLINE + 5 +47E + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21FA + 8 +DETAILS + 10 +13832.676214 + 20 +7473.337962 + 30 +0.0 + 0 +VERTEX + 5 +21FB + 8 +DETAILS + 10 +13832.676214 + 20 +7503.337962 + 30 +0.0 + 0 +SEQEND + 5 +21FC + 8 +DETAILS + 0 +POLYLINE + 5 +482 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21FD + 8 +DETAILS + 10 +13832.676214 + 20 +7419.321326 + 30 +0.0 + 0 +VERTEX + 5 +21FE + 8 +DETAILS + 10 +13832.676214 + 20 +7449.321326 + 30 +0.0 + 0 +SEQEND + 5 +21FF + 8 +DETAILS + 0 +POLYLINE + 5 +486 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2200 + 8 +DETAILS + 10 +13832.603066 + 20 +7364.082396 + 30 +0.0 + 0 +VERTEX + 5 +2201 + 8 +DETAILS + 10 +13832.603066 + 20 +7389.961937 + 30 +0.0 + 0 +SEQEND + 5 +2202 + 8 +DETAILS + 0 +POLYLINE + 5 +48A + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2203 + 8 +DETAILS + 10 +13672.676214 + 20 +7419.321326 + 30 +0.0 + 0 +VERTEX + 5 +2204 + 8 +DETAILS + 10 +13672.676214 + 20 +7449.321326 + 30 +0.0 + 0 +SEQEND + 5 +2205 + 8 +DETAILS + 0 +POLYLINE + 5 +48E + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2206 + 8 +DETAILS + 10 +13672.676214 + 20 +7473.337962 + 30 +0.0 + 0 +VERTEX + 5 +2207 + 8 +DETAILS + 10 +13672.676214 + 20 +7503.337962 + 30 +0.0 + 0 +SEQEND + 5 +2208 + 8 +DETAILS + 0 +POLYLINE + 5 +492 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2209 + 8 +DETAILS + 10 +13672.603066 + 20 +7364.082396 + 30 +0.0 + 0 +VERTEX + 5 +220A + 8 +DETAILS + 10 +13672.603066 + 20 +7389.961937 + 30 +0.0 + 0 +SEQEND + 5 +220B + 8 +DETAILS + 0 +POLYLINE + 5 +496 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +220C + 8 +DETAILS + 10 +13377.5 + 20 +7473.337962 + 30 +0.0 + 0 +VERTEX + 5 +220D + 8 +DETAILS + 10 +13377.5 + 20 +7503.337962 + 30 +0.0 + 0 +SEQEND + 5 +220E + 8 +DETAILS + 0 +POLYLINE + 5 +49A + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +220F + 8 +DETAILS + 10 +13377.5 + 20 +7419.321326 + 30 +0.0 + 0 +VERTEX + 5 +2210 + 8 +DETAILS + 10 +13377.5 + 20 +7449.321326 + 30 +0.0 + 0 +SEQEND + 5 +2211 + 8 +DETAILS + 0 +POLYLINE + 5 +49E + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2212 + 8 +DETAILS + 10 +13377.5 + 20 +7366.578903 + 30 +0.0 + 0 +VERTEX + 5 +2213 + 8 +DETAILS + 10 +13377.5 + 20 +7396.578903 + 30 +0.0 + 0 +SEQEND + 5 +2214 + 8 +DETAILS + 0 +POLYLINE + 5 +4A2 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2215 + 8 +DETAILS + 10 +13217.5 + 20 +7366.578903 + 30 +0.0 + 0 +VERTEX + 5 +2216 + 8 +DETAILS + 10 +13217.5 + 20 +7396.578903 + 30 +0.0 + 0 +SEQEND + 5 +2217 + 8 +DETAILS + 0 +POLYLINE + 5 +4A6 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2218 + 8 +DETAILS + 10 +13217.5 + 20 +7419.321326 + 30 +0.0 + 0 +VERTEX + 5 +2219 + 8 +DETAILS + 10 +13217.5 + 20 +7449.321326 + 30 +0.0 + 0 +SEQEND + 5 +221A + 8 +DETAILS + 0 +POLYLINE + 5 +4AA + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +221B + 8 +DETAILS + 10 +13217.5 + 20 +7473.337962 + 30 +0.0 + 0 +VERTEX + 5 +221C + 8 +DETAILS + 10 +13217.5 + 20 +7503.337962 + 30 +0.0 + 0 +SEQEND + 5 +221D + 8 +DETAILS + 0 +POLYLINE + 5 +4AE + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +221E + 8 +DETAILS + 10 +12617.5 + 20 +7366.578903 + 30 +0.0 + 0 +VERTEX + 5 +221F + 8 +DETAILS + 10 +12617.5 + 20 +7396.578903 + 30 +0.0 + 0 +SEQEND + 5 +2220 + 8 +DETAILS + 0 +POLYLINE + 5 +4B2 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2221 + 8 +DETAILS + 10 +12617.5 + 20 +7419.321326 + 30 +0.0 + 0 +VERTEX + 5 +2222 + 8 +DETAILS + 10 +12617.5 + 20 +7449.321326 + 30 +0.0 + 0 +SEQEND + 5 +2223 + 8 +DETAILS + 0 +POLYLINE + 5 +4B6 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2224 + 8 +DETAILS + 10 +12617.5 + 20 +7473.337962 + 30 +0.0 + 0 +VERTEX + 5 +2225 + 8 +DETAILS + 10 +12617.5 + 20 +7503.337962 + 30 +0.0 + 0 +SEQEND + 5 +2226 + 8 +DETAILS + 0 +POLYLINE + 5 +4BA + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2227 + 8 +DETAILS + 10 +12457.5 + 20 +7473.337962 + 30 +0.0 + 0 +VERTEX + 5 +2228 + 8 +DETAILS + 10 +12457.5 + 20 +7503.337962 + 30 +0.0 + 0 +SEQEND + 5 +2229 + 8 +DETAILS + 0 +POLYLINE + 5 +4BE + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +222A + 8 +DETAILS + 10 +12457.5 + 20 +7419.321326 + 30 +0.0 + 0 +VERTEX + 5 +222B + 8 +DETAILS + 10 +12457.5 + 20 +7449.321326 + 30 +0.0 + 0 +SEQEND + 5 +222C + 8 +DETAILS + 0 +POLYLINE + 5 +4C2 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +222D + 8 +DETAILS + 10 +12457.5 + 20 +7366.578903 + 30 +0.0 + 0 +VERTEX + 5 +222E + 8 +DETAILS + 10 +12457.5 + 20 +7396.578903 + 30 +0.0 + 0 +SEQEND + 5 +222F + 8 +DETAILS + 0 +POLYLINE + 5 +4C6 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2230 + 8 +DETAILS + 10 +11707.5 + 20 +7366.578903 + 30 +0.0 + 0 +VERTEX + 5 +2231 + 8 +DETAILS + 10 +11707.5 + 20 +7396.578903 + 30 +0.0 + 0 +SEQEND + 5 +2232 + 8 +DETAILS + 0 +POLYLINE + 5 +4CA + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2233 + 8 +DETAILS + 10 +11707.5 + 20 +7419.321326 + 30 +0.0 + 0 +VERTEX + 5 +2234 + 8 +DETAILS + 10 +11707.5 + 20 +7449.321326 + 30 +0.0 + 0 +SEQEND + 5 +2235 + 8 +DETAILS + 0 +POLYLINE + 5 +4CE + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2236 + 8 +DETAILS + 10 +11707.5 + 20 +7473.337962 + 30 +0.0 + 0 +VERTEX + 5 +2237 + 8 +DETAILS + 10 +11707.5 + 20 +7503.337962 + 30 +0.0 + 0 +SEQEND + 5 +2238 + 8 +DETAILS + 0 +POLYLINE + 5 +4D2 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2239 + 8 +DETAILS + 10 +11547.5 + 20 +7473.337962 + 30 +0.0 + 0 +VERTEX + 5 +223A + 8 +DETAILS + 10 +11547.5 + 20 +7503.337962 + 30 +0.0 + 0 +SEQEND + 5 +223B + 8 +DETAILS + 0 +POLYLINE + 5 +4D6 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +223C + 8 +DETAILS + 10 +11547.5 + 20 +7419.321326 + 30 +0.0 + 0 +VERTEX + 5 +223D + 8 +DETAILS + 10 +11547.5 + 20 +7449.321326 + 30 +0.0 + 0 +SEQEND + 5 +223E + 8 +DETAILS + 0 +POLYLINE + 5 +4DA + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +223F + 8 +DETAILS + 10 +11547.5 + 20 +7366.578903 + 30 +0.0 + 0 +VERTEX + 5 +2240 + 8 +DETAILS + 10 +11547.5 + 20 +7396.578903 + 30 +0.0 + 0 +SEQEND + 5 +2241 + 8 +DETAILS + 0 +POLYLINE + 5 +4DE + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2242 + 8 +DETAILS + 10 +10637.444873 + 20 +7473.337962 + 30 +0.0 + 0 +VERTEX + 5 +2243 + 8 +DETAILS + 10 +10637.444873 + 20 +7503.337962 + 30 +0.0 + 0 +SEQEND + 5 +2244 + 8 +DETAILS + 0 +POLYLINE + 5 +4E2 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2245 + 8 +DETAILS + 10 +10637.444873 + 20 +7419.321326 + 30 +0.0 + 0 +VERTEX + 5 +2246 + 8 +DETAILS + 10 +10637.444873 + 20 +7449.321326 + 30 +0.0 + 0 +SEQEND + 5 +2247 + 8 +DETAILS + 0 +POLYLINE + 5 +4E6 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2248 + 8 +DETAILS + 10 +10637.444873 + 20 +7366.578903 + 30 +0.0 + 0 +VERTEX + 5 +2249 + 8 +DETAILS + 10 +10637.444873 + 20 +7396.578903 + 30 +0.0 + 0 +SEQEND + 5 +224A + 8 +DETAILS + 0 +POLYLINE + 5 +4EA + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +224B + 8 +DETAILS + 10 +10797.5 + 20 +7366.578903 + 30 +0.0 + 0 +VERTEX + 5 +224C + 8 +DETAILS + 10 +10797.5 + 20 +7396.578903 + 30 +0.0 + 0 +SEQEND + 5 +224D + 8 +DETAILS + 0 +POLYLINE + 5 +4EE + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +224E + 8 +DETAILS + 10 +10797.5 + 20 +7419.321326 + 30 +0.0 + 0 +VERTEX + 5 +224F + 8 +DETAILS + 10 +10797.5 + 20 +7449.321326 + 30 +0.0 + 0 +SEQEND + 5 +2250 + 8 +DETAILS + 0 +POLYLINE + 5 +4F2 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2251 + 8 +DETAILS + 10 +10797.5 + 20 +7473.337962 + 30 +0.0 + 0 +VERTEX + 5 +2252 + 8 +DETAILS + 10 +10797.5 + 20 +7503.337962 + 30 +0.0 + 0 +SEQEND + 5 +2253 + 8 +DETAILS + 0 +POLYLINE + 5 +4F6 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2254 + 8 +HOLZ + 10 +10477.5 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +2255 + 8 +HOLZ + 10 +10637.5 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +2256 + 8 +HOLZ + 10 +10637.5 + 20 +7355.0 + 30 +0.0 + 0 +SEQEND + 5 +2257 + 8 +HOLZ + 0 +POLYLINE + 5 +4FB + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2258 + 8 +HOLZ + 10 +10637.5 + 20 +7515.0 + 30 +0.0 + 0 +VERTEX + 5 +2259 + 8 +HOLZ + 10 +10637.5 + 20 +9596.0 + 30 +0.0 + 0 +VERTEX + 5 +225A + 8 +HOLZ + 10 +10477.5 + 20 +9596.0 + 30 +0.0 + 0 +VERTEX + 5 +225B + 8 +HOLZ + 10 +10477.5 + 20 +7515.0 + 30 +0.0 + 0 +SEQEND + 5 +225C + 8 +HOLZ + 0 +POLYLINE + 5 +501 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +225D + 8 +HOLZ + 10 +14032.5 + 20 +7355.0 + 30 +0.0 + 0 +VERTEX + 5 +225E + 8 +HOLZ + 10 +14032.5 + 20 +6974.383492 + 30 +0.0 + 0 +SEQEND + 5 +225F + 8 +HOLZ + 0 +POLYLINE + 5 +505 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2260 + 8 +HOLZ + 10 +13832.5 + 20 +7495.0 + 30 +0.0 + 0 +VERTEX + 5 +2261 + 8 +HOLZ + 10 +14032.5 + 20 +7495.0 + 30 +0.0 + 0 +SEQEND + 5 +2262 + 8 +HOLZ + 0 +POLYLINE + 5 +509 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2263 + 8 +HOLZ + 10 +14032.5 + 20 +7699.875341 + 30 +0.0 + 0 +VERTEX + 5 +2264 + 8 +HOLZ + 10 +14328.362392 + 20 +7515.0 + 30 +0.0 + 0 +SEQEND + 5 +2265 + 8 +HOLZ + 0 +POLYLINE + 5 +50D + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2266 + 8 +HOLZ + 10 +14584.415917 + 20 +7355.0 + 30 +0.0 + 0 +VERTEX + 5 +2267 + 8 +HOLZ + 10 +16840.887603 + 20 +5945.0 + 30 +0.0 + 0 +SEQEND + 5 +2268 + 8 +HOLZ + 0 +POLYLINE + 5 +511 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2269 + 8 +HOLZ + 10 +7366.802004 + 20 +7877.52091 + 30 +0.0 + 0 +VERTEX + 5 +226A + 8 +HOLZ + 10 +7271.416536 + 20 +8030.169567 + 30 +0.0 + 0 +SEQEND + 5 +226B + 8 +HOLZ + 0 +POLYLINE + 5 +515 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +226C + 8 +DETAILS + 10 +6915.0 + 20 +7605.0 + 30 +0.0 + 0 +VERTEX + 5 +226D + 8 +DETAILS + 10 +6895.0 + 20 +7635.0 + 30 +0.0 + 0 +SEQEND + 5 +226E + 8 +DETAILS + 0 +POLYLINE + 5 +519 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +226F + 8 +DETAILS + 10 +6877.414742 + 20 +7665.410305 + 30 +0.0 + 0 +VERTEX + 5 +2270 + 8 +DETAILS + 10 +6857.414742 + 20 +7695.410305 + 30 +0.0 + 0 +SEQEND + 5 +2271 + 8 +DETAILS + 0 +POLYLINE + 5 +51D + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2272 + 8 +DETAILS + 10 +6843.564541 + 20 +7719.608278 + 30 +0.0 + 0 +VERTEX + 5 +2273 + 8 +DETAILS + 10 +6823.564541 + 20 +7749.608278 + 30 +0.0 + 0 +SEQEND + 5 +2274 + 8 +DETAILS + 0 +POLYLINE + 5 +521 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2275 + 8 +DETAILS + 10 +14237.585258 + 20 +7665.410305 + 30 +0.0 + 0 +VERTEX + 5 +2276 + 8 +DETAILS + 10 +14257.585258 + 20 +7695.410305 + 30 +0.0 + 0 +SEQEND + 5 +2277 + 8 +DETAILS + 0 +POLYLINE + 5 +525 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2278 + 8 +DETAILS + 10 +14271.435459 + 20 +7719.608278 + 30 +0.0 + 0 +VERTEX + 5 +2279 + 8 +DETAILS + 10 +14291.435459 + 20 +7749.608278 + 30 +0.0 + 0 +SEQEND + 5 +227A + 8 +DETAILS + 0 +POLYLINE + 5 +529 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +227B + 8 +DETAILS + 10 +14200.0 + 20 +7605.0 + 30 +0.0 + 0 +VERTEX + 5 +227C + 8 +DETAILS + 10 +14220.0 + 20 +7635.0 + 30 +0.0 + 0 +SEQEND + 5 +227D + 8 +DETAILS + 0 +POLYLINE + 5 +52D + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +227E + 8 +HOLZ + 10 +13748.197996 + 20 +7877.52091 + 30 +0.0 + 0 +VERTEX + 5 +227F + 8 +HOLZ + 10 +13843.583464 + 20 +8030.169567 + 30 +0.0 + 0 +SEQEND + 5 +2280 + 8 +HOLZ + 0 +POLYLINE + 5 +531 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2281 + 8 +HOLZ + 10 +16897.5 + 20 +5909.624648 + 30 +0.0 + 0 +VERTEX + 5 +2282 + 8 +HOLZ + 10 +17310.002398 + 20 +5651.864542 + 30 +0.0 + 0 +VERTEX + 5 +2283 + 8 +HOLZ + 10 +17403.689813 + 20 +5801.381599 + 30 +0.0 + 0 +VERTEX + 5 +2284 + 8 +HOLZ + 10 +17324.687609 + 20 +5854.940316 + 30 +0.0 + 0 +VERTEX + 5 +2285 + 8 +HOLZ + 10 +10557.5 + 20 +10083.548452 + 30 +0.0 + 0 +SEQEND + 5 +2286 + 8 +HOLZ + 0 +POLYLINE + 5 +538 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2287 + 8 +DETAILS + 10 +10557.712995 + 20 +9910.919938 + 30 +0.0 + 0 +VERTEX + 5 +2288 + 8 +DETAILS + 10 +10467.712995 + 20 +9910.919938 + 30 +0.0 + 0 +VERTEX + 5 +2289 + 8 +DETAILS + 10 +10467.712995 + 20 +9980.919938 + 30 +0.0 + 0 +VERTEX + 5 +228A + 8 +DETAILS + 10 +10557.712995 + 20 +9980.919938 + 30 +0.0 + 0 +SEQEND + 5 +228B + 8 +DETAILS + 0 +POLYLINE + 5 +53E + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +228C + 8 +DETAILS + 10 +10557.287005 + 20 +9910.919938 + 30 +0.0 + 0 +VERTEX + 5 +228D + 8 +DETAILS + 10 +10647.287005 + 20 +9910.919938 + 30 +0.0 + 0 +VERTEX + 5 +228E + 8 +DETAILS + 10 +10647.287005 + 20 +9980.919938 + 30 +0.0 + 0 +VERTEX + 5 +228F + 8 +DETAILS + 10 +10557.287005 + 20 +9980.919938 + 30 +0.0 + 0 +SEQEND + 5 +2290 + 8 +DETAILS + 0 +POLYLINE + 5 +544 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2291 + 8 +HOLZ + 10 +10557.5 + 20 +9871.296339 + 30 +0.0 + 0 +VERTEX + 5 +2292 + 8 +HOLZ + 10 +10557.5 + 20 +9910.919938 + 30 +0.0 + 0 +SEQEND + 5 +2293 + 8 +HOLZ + 0 +POLYLINE + 5 +548 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2294 + 8 +HOLZ + 10 +10557.5 + 20 +9980.919938 + 30 +0.0 + 0 +VERTEX + 5 +2295 + 8 +HOLZ + 10 +10557.5 + 20 +10082.810074 + 30 +0.0 + 0 +SEQEND + 5 +2296 + 8 +HOLZ + 0 +POLYLINE + 5 +54C + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2297 + 8 +DETAILS + 10 +4250.817185 + 20 +5957.560333 + 30 +0.0 + 0 +VERTEX + 5 +2298 + 8 +DETAILS + 10 +4135.0 + 20 +5957.560333 + 30 +0.0 + 0 +VERTEX + 5 +2299 + 8 +DETAILS + 10 +4135.0 + 20 +6005.0 + 30 +0.0 + 0 +VERTEX + 5 +229A + 8 +DETAILS + 10 +4230.0 + 20 +6005.0 + 30 +0.0 + 0 +VERTEX + 5 +229B + 8 +DETAILS + 10 +4280.0 + 20 +5960.0 + 30 +0.0 + 0 +VERTEX + 5 +229C + 8 +DETAILS + 10 +4355.0 + 20 +5960.0 + 30 +0.0 + 0 +VERTEX + 5 +229D + 8 +DETAILS + 10 +4355.0 + 20 +5956.477785 + 30 +0.0 + 0 +SEQEND + 5 +229E + 8 +DETAILS + 0 +POLYLINE + 5 +555 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +229F + 8 +DETAILS + 10 +4158.9975 + 20 +5990.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +22A0 + 8 +DETAILS + 10 +4161.0025 + 20 +5990.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +22A1 + 8 +DETAILS + 0 +POLYLINE + 5 +559 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +22A2 + 8 +DETAILS + 10 +4158.9975 + 20 +5990.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +22A3 + 8 +DETAILS + 10 +4161.0025 + 20 +5990.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +22A4 + 8 +DETAILS + 0 +POLYLINE + 5 +55D + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +22A5 + 8 +DETAILS + 10 +4183.9975 + 20 +5990.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +22A6 + 8 +DETAILS + 10 +4186.0025 + 20 +5990.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +22A7 + 8 +DETAILS + 0 +POLYLINE + 5 +561 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +22A8 + 8 +DETAILS + 10 +4173.9975 + 20 +5970.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +22A9 + 8 +DETAILS + 10 +4176.0025 + 20 +5970.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +22AA + 8 +DETAILS + 0 +POLYLINE + 5 +565 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +22AB + 8 +DETAILS + 10 +4203.9975 + 20 +5970.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +22AC + 8 +DETAILS + 10 +4206.0025 + 20 +5970.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +22AD + 8 +DETAILS + 0 +POLYLINE + 5 +569 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +22AE + 8 +DETAILS + 10 +5928.9975 + 20 +4810.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +22AF + 8 +DETAILS + 10 +5931.0025 + 20 +4810.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +22B0 + 8 +DETAILS + 0 +POLYLINE + 5 +56D + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +22B1 + 8 +DETAILS + 10 +5903.9975 + 20 +4780.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +22B2 + 8 +DETAILS + 10 +5906.0025 + 20 +4780.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +22B3 + 8 +DETAILS + 0 +POLYLINE + 5 +571 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +22B4 + 8 +DETAILS + 10 +5883.9975 + 20 +4745.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +22B5 + 8 +DETAILS + 10 +5886.0025 + 20 +4745.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +22B6 + 8 +DETAILS + 0 +POLYLINE + 5 +575 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +22B7 + 8 +DETAILS + 10 +5928.9975 + 20 +4810.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +22B8 + 8 +DETAILS + 10 +5931.0025 + 20 +4810.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +22B9 + 8 +DETAILS + 0 +POLYLINE + 5 +579 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +22BA + 8 +DETAILS + 10 +5944.887167 + 20 +4778.814772 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +22BB + 8 +DETAILS + 10 +5946.892167 + 20 +4778.814772 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +22BC + 8 +DETAILS + 0 +POLYLINE + 5 +57D + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +22BD + 8 +DETAILS + 10 +5944.887167 + 20 +4778.814772 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +22BE + 8 +DETAILS + 10 +5946.892167 + 20 +4778.814772 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +22BF + 8 +DETAILS + 0 +POLYLINE + 5 +581 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +22C0 + 8 +DETAILS + 10 +5899.887167 + 20 +4713.814772 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +22C1 + 8 +DETAILS + 10 +5901.892167 + 20 +4713.814772 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +22C2 + 8 +DETAILS + 0 +POLYLINE + 5 +585 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +22C3 + 8 +DETAILS + 10 +5919.887167 + 20 +4748.814772 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +22C4 + 8 +DETAILS + 10 +5921.892167 + 20 +4748.814772 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +22C5 + 8 +DETAILS + 0 +POLYLINE + 5 +589 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +22C6 + 8 +DETAILS + 10 +5935.776835 + 20 +4717.629543 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +22C7 + 8 +DETAILS + 10 +5937.781835 + 20 +4717.629543 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +22C8 + 8 +DETAILS + 0 +POLYLINE + 5 +58D + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +22C9 + 8 +DETAILS + 10 +5960.776835 + 20 +4747.629543 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +22CA + 8 +DETAILS + 10 +5962.781835 + 20 +4747.629543 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +22CB + 8 +DETAILS + 0 +POLYLINE + 5 +591 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +22CC + 8 +DETAILS + 10 +5960.776835 + 20 +4747.629543 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +22CD + 8 +DETAILS + 10 +5962.781835 + 20 +4747.629543 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +22CE + 8 +DETAILS + 0 +POLYLINE + 5 +595 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +22CF + 8 +DETAILS + 10 +5976.666502 + 20 +4716.444315 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +22D0 + 8 +DETAILS + 10 +5978.671502 + 20 +4716.444315 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +22D1 + 8 +DETAILS + 0 +POLYLINE + 5 +599 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +22D2 + 8 +DETAILS + 10 +5976.666502 + 20 +4716.444315 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +22D3 + 8 +DETAILS + 10 +5978.671502 + 20 +4716.444315 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +22D4 + 8 +DETAILS + 0 +POLYLINE + 5 +59D + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +22D5 + 8 +DETAILS + 10 +5915.776835 + 20 +4682.629543 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +22D6 + 8 +DETAILS + 10 +5917.781835 + 20 +4682.629543 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +22D7 + 8 +DETAILS + 0 +POLYLINE + 5 +5A1 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +22D8 + 8 +DETAILS + 10 +5931.666502 + 20 +4651.444315 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +22D9 + 8 +DETAILS + 10 +5933.671502 + 20 +4651.444315 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +22DA + 8 +DETAILS + 0 +POLYLINE + 5 +5A5 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +22DB + 8 +DETAILS + 10 +5992.55617 + 20 +4685.259087 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +22DC + 8 +DETAILS + 10 +5994.56117 + 20 +4685.259087 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +22DD + 8 +DETAILS + 0 +POLYLINE + 5 +5A9 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +22DE + 8 +DETAILS + 10 +5992.55617 + 20 +4685.259087 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +22DF + 8 +DETAILS + 10 +5994.56117 + 20 +4685.259087 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +22E0 + 8 +DETAILS + 0 +POLYLINE + 5 +5AD + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +22E1 + 8 +DETAILS + 10 +5947.55617 + 20 +4620.259087 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +22E2 + 8 +DETAILS + 10 +5949.56117 + 20 +4620.259087 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +22E3 + 8 +DETAILS + 0 +POLYLINE + 5 +5B1 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +22E4 + 8 +DETAILS + 10 +5967.55617 + 20 +4655.259087 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +22E5 + 8 +DETAILS + 10 +5969.56117 + 20 +4655.259087 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +22E6 + 8 +DETAILS + 0 +POLYLINE + 5 +5B5 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +22E7 + 8 +DETAILS + 10 +6008.445837 + 20 +4654.073858 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +22E8 + 8 +DETAILS + 10 +6010.450837 + 20 +4654.073858 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +22E9 + 8 +DETAILS + 0 +POLYLINE + 5 +5B9 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +22EA + 8 +DETAILS + 10 +6008.445837 + 20 +4654.073858 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +22EB + 8 +DETAILS + 10 +6010.450837 + 20 +4654.073858 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +22EC + 8 +DETAILS + 0 +POLYLINE + 5 +5BD + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +22ED + 8 +DETAILS + 10 +5983.445837 + 20 +4624.073858 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +22EE + 8 +DETAILS + 10 +5985.450837 + 20 +4624.073858 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +22EF + 8 +DETAILS + 0 +POLYLINE + 5 +5C1 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +22F0 + 8 +DETAILS + 10 +6024.335505 + 20 +4622.88863 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +22F1 + 8 +DETAILS + 10 +6026.340505 + 20 +4622.88863 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +22F2 + 8 +DETAILS + 0 +POLYLINE + 5 +5C5 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +22F3 + 8 +DETAILS + 10 +6024.335505 + 20 +4622.88863 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +22F4 + 8 +DETAILS + 10 +6026.340505 + 20 +4622.88863 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +22F5 + 8 +DETAILS + 0 +POLYLINE + 5 +5C9 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +22F6 + 8 +DETAILS + 10 +5963.445837 + 20 +4589.073858 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +22F7 + 8 +DETAILS + 10 +5965.450837 + 20 +4589.073858 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +22F8 + 8 +DETAILS + 0 +POLYLINE + 5 +5CD + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +22F9 + 8 +DETAILS + 10 +5979.335505 + 20 +4557.88863 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +22FA + 8 +DETAILS + 10 +5981.340505 + 20 +4557.88863 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +22FB + 8 +DETAILS + 0 +POLYLINE + 5 +5D1 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +22FC + 8 +DETAILS + 10 +5999.335505 + 20 +4592.88863 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +22FD + 8 +DETAILS + 10 +6001.340505 + 20 +4592.88863 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +22FE + 8 +DETAILS + 0 +POLYLINE + 5 +5D5 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +22FF + 8 +DETAILS + 10 +6040.225172 + 20 +4591.703402 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2300 + 8 +DETAILS + 10 +6042.230172 + 20 +4591.703402 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2301 + 8 +DETAILS + 0 +POLYLINE + 5 +5D9 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +2302 + 8 +DETAILS + 10 +6040.225172 + 20 +4591.703402 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2303 + 8 +DETAILS + 10 +6042.230172 + 20 +4591.703402 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2304 + 8 +DETAILS + 0 +POLYLINE + 5 +5DD + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +2305 + 8 +DETAILS + 10 +6056.11484 + 20 +4560.518173 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2306 + 8 +DETAILS + 10 +6058.11984 + 20 +4560.518173 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2307 + 8 +DETAILS + 0 +POLYLINE + 5 +5E1 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +2308 + 8 +DETAILS + 10 +6056.11484 + 20 +4560.518173 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2309 + 8 +DETAILS + 10 +6058.11984 + 20 +4560.518173 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +230A + 8 +DETAILS + 0 +POLYLINE + 5 +5E5 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +230B + 8 +DETAILS + 10 +6015.225172 + 20 +4561.703402 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +230C + 8 +DETAILS + 10 +6017.230172 + 20 +4561.703402 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +230D + 8 +DETAILS + 0 +POLYLINE + 5 +5E9 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +230E + 8 +DETAILS + 10 +15122.44383 + 20 +4685.259087 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +230F + 8 +DETAILS + 10 +15120.43883 + 20 +4685.259087 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +2310 + 8 +DETAILS + 0 +POLYLINE + 5 +5ED + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +2311 + 8 +DETAILS + 10 +15122.44383 + 20 +4685.259087 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +2312 + 8 +DETAILS + 10 +15120.43883 + 20 +4685.259087 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +2313 + 8 +DETAILS + 0 +POLYLINE + 5 +5F1 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +2314 + 8 +DETAILS + 10 +15135.664495 + 20 +4557.88863 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +2315 + 8 +DETAILS + 10 +15133.659495 + 20 +4557.88863 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +2316 + 8 +DETAILS + 0 +POLYLINE + 5 +5F5 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +2317 + 8 +DETAILS + 10 +15151.554163 + 20 +4589.073858 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +2318 + 8 +DETAILS + 10 +15149.549163 + 20 +4589.073858 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +2319 + 8 +DETAILS + 0 +POLYLINE + 5 +5F9 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +231A + 8 +DETAILS + 10 +15131.554163 + 20 +4624.073858 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +231B + 8 +DETAILS + 10 +15129.549163 + 20 +4624.073858 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +231C + 8 +DETAILS + 0 +POLYLINE + 5 +5FD + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +231D + 8 +DETAILS + 10 +15167.44383 + 20 +4620.259087 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +231E + 8 +DETAILS + 10 +15165.43883 + 20 +4620.259087 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +231F + 8 +DETAILS + 0 +POLYLINE + 5 +601 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +2320 + 8 +DETAILS + 10 +15147.44383 + 20 +4655.259087 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +2321 + 8 +DETAILS + 10 +15145.43883 + 20 +4655.259087 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +2322 + 8 +DETAILS + 0 +POLYLINE + 5 +605 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +2323 + 8 +DETAILS + 10 +15183.333498 + 20 +4651.444315 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +2324 + 8 +DETAILS + 10 +15181.328498 + 20 +4651.444315 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +2325 + 8 +DETAILS + 0 +POLYLINE + 5 +609 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +2326 + 8 +DETAILS + 10 +15199.223165 + 20 +4682.629543 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +2327 + 8 +DETAILS + 10 +15197.218165 + 20 +4682.629543 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +2328 + 8 +DETAILS + 0 +POLYLINE + 5 +60D + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +2329 + 8 +DETAILS + 10 +15138.333498 + 20 +4716.444315 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +232A + 8 +DETAILS + 10 +15136.328498 + 20 +4716.444315 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +232B + 8 +DETAILS + 0 +POLYLINE + 5 +611 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +232C + 8 +DETAILS + 10 +15138.333498 + 20 +4716.444315 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +232D + 8 +DETAILS + 10 +15136.328498 + 20 +4716.444315 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +232E + 8 +DETAILS + 0 +POLYLINE + 5 +615 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +232F + 8 +DETAILS + 10 +15154.223165 + 20 +4747.629543 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +2330 + 8 +DETAILS + 10 +15152.218165 + 20 +4747.629543 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +2331 + 8 +DETAILS + 0 +POLYLINE + 5 +619 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +2332 + 8 +DETAILS + 10 +15154.223165 + 20 +4747.629543 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +2333 + 8 +DETAILS + 10 +15152.218165 + 20 +4747.629543 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +2334 + 8 +DETAILS + 0 +POLYLINE + 5 +61D + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +2335 + 8 +DETAILS + 10 +15179.223165 + 20 +4717.629543 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +2336 + 8 +DETAILS + 10 +15177.218165 + 20 +4717.629543 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +2337 + 8 +DETAILS + 0 +POLYLINE + 5 +621 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +2338 + 8 +DETAILS + 10 +15195.112833 + 20 +4748.814772 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +2339 + 8 +DETAILS + 10 +15193.107833 + 20 +4748.814772 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +233A + 8 +DETAILS + 0 +POLYLINE + 5 +625 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +233B + 8 +DETAILS + 10 +15215.112833 + 20 +4713.814772 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +233C + 8 +DETAILS + 10 +15213.107833 + 20 +4713.814772 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +233D + 8 +DETAILS + 0 +POLYLINE + 5 +629 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +233E + 8 +DETAILS + 10 +15170.112833 + 20 +4778.814772 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +233F + 8 +DETAILS + 10 +15168.107833 + 20 +4778.814772 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +2340 + 8 +DETAILS + 0 +POLYLINE + 5 +62D + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +2341 + 8 +DETAILS + 10 +15170.112833 + 20 +4778.814772 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +2342 + 8 +DETAILS + 10 +15168.107833 + 20 +4778.814772 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +2343 + 8 +DETAILS + 0 +POLYLINE + 5 +631 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +2344 + 8 +DETAILS + 10 +15186.0025 + 20 +4810.0 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +2345 + 8 +DETAILS + 10 +15183.9975 + 20 +4810.0 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +2346 + 8 +DETAILS + 0 +POLYLINE + 5 +635 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +2347 + 8 +DETAILS + 10 +15231.0025 + 20 +4745.0 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +2348 + 8 +DETAILS + 10 +15228.9975 + 20 +4745.0 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +2349 + 8 +DETAILS + 0 +POLYLINE + 5 +639 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +234A + 8 +DETAILS + 10 +15211.0025 + 20 +4780.0 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +234B + 8 +DETAILS + 10 +15208.9975 + 20 +4780.0 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +234C + 8 +DETAILS + 0 +POLYLINE + 5 +63D + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +234D + 8 +DETAILS + 10 +15186.0025 + 20 +4810.0 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +234E + 8 +DETAILS + 10 +15183.9975 + 20 +4810.0 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +234F + 8 +DETAILS + 0 +POLYLINE + 5 +641 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2350 + 8 +DETAILS + 10 +15234.103964 + 20 +4714.16655 + 30 +0.0 + 0 +VERTEX + 5 +2351 + 8 +DETAILS + 10 +15245.041865 + 20 +4726.854887 + 30 +0.0 + 0 +SEQEND + 5 +2352 + 8 +DETAILS + 0 +POLYLINE + 5 +645 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2353 + 8 +DETAILS + 10 +15219.454976 + 20 +4697.574043 + 30 +0.0 + 0 +VERTEX + 5 +2354 + 8 +DETAILS + 10 +15228.830375 + 20 +4709.091158 + 30 +0.0 + 0 +SEQEND + 5 +2355 + 8 +DETAILS + 0 +POLYLINE + 5 +649 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2356 + 8 +DETAILS + 10 +15204.610724 + 20 +4679.224761 + 30 +0.0 + 0 +VERTEX + 5 +2357 + 8 +DETAILS + 10 +15214.181387 + 20 +4691.132263 + 30 +0.0 + 0 +SEQEND + 5 +2358 + 8 +DETAILS + 0 +POLYLINE + 5 +64D + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2359 + 8 +DETAILS + 10 +15136.444205 + 20 +4691.522709 + 30 +0.0 + 0 +VERTEX + 5 +235A + 8 +DETAILS + 10 +15119.842089 + 20 +4695.426764 + 30 +0.0 + 0 +SEQEND + 5 +235B + 8 +DETAILS + 0 +POLYLINE + 5 +651 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +235C + 8 +DETAILS + 10 +15164.765569 + 20 +4684.49526 + 30 +0.0 + 0 +VERTEX + 5 +235D + 8 +DETAILS + 10 +15146.014868 + 20 +4689.37543 + 30 +0.0 + 0 +SEQEND + 5 +235E + 8 +DETAILS + 0 +POLYLINE + 5 +655 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +235F + 8 +DETAILS + 10 +15199.923024 + 20 +4675.125425 + 30 +0.0 + 0 +VERTEX + 5 +2360 + 8 +DETAILS + 10 +15177.461333 + 20 +4680.786371 + 30 +0.0 + 0 +SEQEND + 5 +2361 + 8 +DETAILS + 0 +POLYLINE + 5 +659 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +2362 + 8 +DETAILS + 10 +15099.774828 + 20 +4561.703402 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +2363 + 8 +DETAILS + 10 +15097.769828 + 20 +4561.703402 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +2364 + 8 +DETAILS + 0 +POLYLINE + 5 +65D + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +2365 + 8 +DETAILS + 10 +15058.88516 + 20 +4560.518173 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +2366 + 8 +DETAILS + 10 +15056.88016 + 20 +4560.518173 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +2367 + 8 +DETAILS + 0 +POLYLINE + 5 +661 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +2368 + 8 +DETAILS + 10 +15058.88516 + 20 +4560.518173 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +2369 + 8 +DETAILS + 10 +15056.88016 + 20 +4560.518173 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +236A + 8 +DETAILS + 0 +POLYLINE + 5 +665 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +236B + 8 +DETAILS + 10 +15074.774828 + 20 +4591.703402 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +236C + 8 +DETAILS + 10 +15072.769828 + 20 +4591.703402 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +236D + 8 +DETAILS + 0 +POLYLINE + 5 +669 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +236E + 8 +DETAILS + 10 +15074.774828 + 20 +4591.703402 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +236F + 8 +DETAILS + 10 +15072.769828 + 20 +4591.703402 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +2370 + 8 +DETAILS + 0 +POLYLINE + 5 +66D + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +2371 + 8 +DETAILS + 10 +15115.664495 + 20 +4592.88863 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +2372 + 8 +DETAILS + 10 +15113.659495 + 20 +4592.88863 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +2373 + 8 +DETAILS + 0 +POLYLINE + 5 +671 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +2374 + 8 +DETAILS + 10 +15090.664495 + 20 +4622.88863 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +2375 + 8 +DETAILS + 10 +15088.659495 + 20 +4622.88863 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +2376 + 8 +DETAILS + 0 +POLYLINE + 5 +675 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +2377 + 8 +DETAILS + 10 +15090.664495 + 20 +4622.88863 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +2378 + 8 +DETAILS + 10 +15088.659495 + 20 +4622.88863 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +2379 + 8 +DETAILS + 0 +POLYLINE + 5 +679 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +237A + 8 +DETAILS + 10 +15106.554163 + 20 +4654.073858 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +237B + 8 +DETAILS + 10 +15104.549163 + 20 +4654.073858 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +237C + 8 +DETAILS + 0 +POLYLINE + 5 +67D + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +237D + 8 +DETAILS + 10 +15106.554163 + 20 +4654.073858 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +237E + 8 +DETAILS + 10 +15104.549163 + 20 +4654.073858 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +237F + 8 +DETAILS + 0 +POLYLINE + 5 +681 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2380 + 8 +DETAILS + 10 +15112.81054 + 20 +4696.793209 + 30 +0.0 + 0 +VERTEX + 5 +2381 + 8 +DETAILS + 10 +15097.18494 + 20 +4700.892544 + 30 +0.0 + 0 +SEQEND + 5 +2382 + 8 +DETAILS + 0 +POLYLINE + 5 +685 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +2383 + 8 +DETAILS + 10 +10493.9975 + 20 +9965.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2384 + 8 +DETAILS + 10 +10496.0025 + 20 +9965.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2385 + 8 +DETAILS + 0 +POLYLINE + 5 +689 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +2386 + 8 +DETAILS + 10 +10513.9975 + 20 +9965.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2387 + 8 +DETAILS + 10 +10516.0025 + 20 +9965.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2388 + 8 +DETAILS + 0 +POLYLINE + 5 +68D + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +2389 + 8 +DETAILS + 10 +10538.9975 + 20 +9965.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +238A + 8 +DETAILS + 10 +10541.0025 + 20 +9965.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +238B + 8 +DETAILS + 0 +POLYLINE + 5 +691 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +238C + 8 +DETAILS + 10 +10503.9975 + 20 +9945.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +238D + 8 +DETAILS + 10 +10506.0025 + 20 +9945.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +238E + 8 +DETAILS + 0 +POLYLINE + 5 +695 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +238F + 8 +DETAILS + 10 +10528.9975 + 20 +9945.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2390 + 8 +DETAILS + 10 +10531.0025 + 20 +9945.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2391 + 8 +DETAILS + 0 +POLYLINE + 5 +699 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +2392 + 8 +DETAILS + 10 +10493.9975 + 20 +9925.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2393 + 8 +DETAILS + 10 +10496.0025 + 20 +9925.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2394 + 8 +DETAILS + 0 +POLYLINE + 5 +69D + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +2395 + 8 +DETAILS + 10 +10538.9975 + 20 +9925.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2396 + 8 +DETAILS + 10 +10541.0025 + 20 +9925.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2397 + 8 +DETAILS + 0 +POLYLINE + 5 +6A1 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +2398 + 8 +DETAILS + 10 +10513.9975 + 20 +9925.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2399 + 8 +DETAILS + 10 +10516.0025 + 20 +9925.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +239A + 8 +DETAILS + 0 +POLYLINE + 5 +6A5 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +239B + 8 +DETAILS + 10 +10573.9975 + 20 +9965.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +239C + 8 +DETAILS + 10 +10576.0025 + 20 +9965.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +239D + 8 +DETAILS + 0 +POLYLINE + 5 +6A9 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +239E + 8 +DETAILS + 10 +10598.9975 + 20 +9965.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +239F + 8 +DETAILS + 10 +10601.0025 + 20 +9965.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +23A0 + 8 +DETAILS + 0 +POLYLINE + 5 +6AD + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +23A1 + 8 +DETAILS + 10 +10618.9975 + 20 +9965.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +23A2 + 8 +DETAILS + 10 +10621.0025 + 20 +9965.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +23A3 + 8 +DETAILS + 0 +POLYLINE + 5 +6B1 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +23A4 + 8 +DETAILS + 10 +10583.9975 + 20 +9945.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +23A5 + 8 +DETAILS + 10 +10586.0025 + 20 +9945.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +23A6 + 8 +DETAILS + 0 +POLYLINE + 5 +6B5 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +23A7 + 8 +DETAILS + 10 +10608.9975 + 20 +9945.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +23A8 + 8 +DETAILS + 10 +10611.0025 + 20 +9945.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +23A9 + 8 +DETAILS + 0 +POLYLINE + 5 +6B9 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +23AA + 8 +DETAILS + 10 +10573.9975 + 20 +9925.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +23AB + 8 +DETAILS + 10 +10576.0025 + 20 +9925.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +23AC + 8 +DETAILS + 0 +POLYLINE + 5 +6BD + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +23AD + 8 +DETAILS + 10 +10598.9975 + 20 +9925.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +23AE + 8 +DETAILS + 10 +10601.0025 + 20 +9925.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +23AF + 8 +DETAILS + 0 +POLYLINE + 5 +6C1 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +23B0 + 8 +DETAILS + 10 +10618.9975 + 20 +9925.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +23B1 + 8 +DETAILS + 10 +10621.0025 + 20 +9925.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +23B2 + 8 +DETAILS + 0 +POLYLINE + 5 +6C5 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +23B3 + 8 +DETAILS + 10 +7115.817185 + 20 +7745.815039 + 30 +0.0 + 0 +VERTEX + 5 +23B4 + 8 +DETAILS + 10 +7000.0 + 20 +7745.815039 + 30 +0.0 + 0 +VERTEX + 5 +23B5 + 8 +DETAILS + 10 +7000.0 + 20 +7793.254706 + 30 +0.0 + 0 +VERTEX + 5 +23B6 + 8 +DETAILS + 10 +7095.0 + 20 +7793.254706 + 30 +0.0 + 0 +VERTEX + 5 +23B7 + 8 +DETAILS + 10 +7145.0 + 20 +7748.254706 + 30 +0.0 + 0 +VERTEX + 5 +23B8 + 8 +DETAILS + 10 +7220.0 + 20 +7748.254706 + 30 +0.0 + 0 +VERTEX + 5 +23B9 + 8 +DETAILS + 10 +7220.0 + 20 +7744.732491 + 30 +0.0 + 0 +SEQEND + 5 +23BA + 8 +DETAILS + 0 +POLYLINE + 5 +6CE + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +23BB + 8 +DETAILS + 10 +7068.9975 + 20 +7758.254706 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +23BC + 8 +DETAILS + 10 +7071.0025 + 20 +7758.254706 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +23BD + 8 +DETAILS + 0 +POLYLINE + 5 +6D2 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +23BE + 8 +DETAILS + 10 +7038.9975 + 20 +7758.254706 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +23BF + 8 +DETAILS + 10 +7041.0025 + 20 +7758.254706 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +23C0 + 8 +DETAILS + 0 +POLYLINE + 5 +6D6 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +23C1 + 8 +DETAILS + 10 +7048.9975 + 20 +7778.254706 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +23C2 + 8 +DETAILS + 10 +7051.0025 + 20 +7778.254706 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +23C3 + 8 +DETAILS + 0 +POLYLINE + 5 +6DA + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +23C4 + 8 +DETAILS + 10 +7023.9975 + 20 +7778.254706 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +23C5 + 8 +DETAILS + 10 +7026.0025 + 20 +7778.254706 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +23C6 + 8 +DETAILS + 0 +POLYLINE + 5 +6DE + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +23C7 + 8 +DETAILS + 10 +7023.9975 + 20 +7778.254706 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +23C8 + 8 +DETAILS + 10 +7026.0025 + 20 +7778.254706 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +23C9 + 8 +DETAILS + 0 +POLYLINE + 5 +6E2 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +23CA + 8 +DETAILS + 10 +16864.182815 + 20 +5957.560333 + 30 +0.0 + 0 +VERTEX + 5 +23CB + 8 +DETAILS + 10 +16980.0 + 20 +5957.560333 + 30 +0.0 + 0 +VERTEX + 5 +23CC + 8 +DETAILS + 10 +16980.0 + 20 +6005.0 + 30 +0.0 + 0 +VERTEX + 5 +23CD + 8 +DETAILS + 10 +16885.0 + 20 +6005.0 + 30 +0.0 + 0 +VERTEX + 5 +23CE + 8 +DETAILS + 10 +16835.0 + 20 +5960.0 + 30 +0.0 + 0 +VERTEX + 5 +23CF + 8 +DETAILS + 10 +16760.0 + 20 +5960.0 + 30 +0.0 + 0 +VERTEX + 5 +23D0 + 8 +DETAILS + 10 +16760.0 + 20 +5956.477785 + 30 +0.0 + 0 +SEQEND + 5 +23D1 + 8 +DETAILS + 0 +POLYLINE + 5 +6EB + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +23D2 + 8 +DETAILS + 10 +16911.0025 + 20 +5970.0 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +23D3 + 8 +DETAILS + 10 +16908.9975 + 20 +5970.0 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +23D4 + 8 +DETAILS + 0 +POLYLINE + 5 +6EF + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +23D5 + 8 +DETAILS + 10 +16941.0025 + 20 +5970.0 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +23D6 + 8 +DETAILS + 10 +16938.9975 + 20 +5970.0 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +23D7 + 8 +DETAILS + 0 +POLYLINE + 5 +6F3 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +23D8 + 8 +DETAILS + 10 +16931.0025 + 20 +5990.0 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +23D9 + 8 +DETAILS + 10 +16928.9975 + 20 +5990.0 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +23DA + 8 +DETAILS + 0 +POLYLINE + 5 +6F7 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +23DB + 8 +DETAILS + 10 +16956.0025 + 20 +5990.0 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +23DC + 8 +DETAILS + 10 +16953.9975 + 20 +5990.0 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +23DD + 8 +DETAILS + 0 +POLYLINE + 5 +6FB + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +23DE + 8 +DETAILS + 10 +16956.0025 + 20 +5990.0 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +23DF + 8 +DETAILS + 10 +16953.9975 + 20 +5990.0 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +23E0 + 8 +DETAILS + 0 +POLYLINE + 5 +6FF + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +23E1 + 8 +DETAILS + 10 +13999.182815 + 20 +7745.815039 + 30 +0.0 + 0 +VERTEX + 5 +23E2 + 8 +DETAILS + 10 +14115.0 + 20 +7745.815039 + 30 +0.0 + 0 +VERTEX + 5 +23E3 + 8 +DETAILS + 10 +14115.0 + 20 +7793.254706 + 30 +0.0 + 0 +VERTEX + 5 +23E4 + 8 +DETAILS + 10 +14020.0 + 20 +7793.254706 + 30 +0.0 + 0 +VERTEX + 5 +23E5 + 8 +DETAILS + 10 +13970.0 + 20 +7748.254706 + 30 +0.0 + 0 +VERTEX + 5 +23E6 + 8 +DETAILS + 10 +13895.0 + 20 +7748.254706 + 30 +0.0 + 0 +VERTEX + 5 +23E7 + 8 +DETAILS + 10 +13895.0 + 20 +7744.732491 + 30 +0.0 + 0 +SEQEND + 5 +23E8 + 8 +DETAILS + 0 +POLYLINE + 5 +708 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +23E9 + 8 +DETAILS + 10 +14091.0025 + 20 +7778.254706 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +23EA + 8 +DETAILS + 10 +14088.9975 + 20 +7778.254706 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +23EB + 8 +DETAILS + 0 +POLYLINE + 5 +70C + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +23EC + 8 +DETAILS + 10 +14091.0025 + 20 +7778.254706 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +23ED + 8 +DETAILS + 10 +14088.9975 + 20 +7778.254706 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +23EE + 8 +DETAILS + 0 +POLYLINE + 5 +710 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +23EF + 8 +DETAILS + 10 +14066.0025 + 20 +7778.254706 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +23F0 + 8 +DETAILS + 10 +14063.9975 + 20 +7778.254706 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +23F1 + 8 +DETAILS + 0 +POLYLINE + 5 +714 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +23F2 + 8 +DETAILS + 10 +14076.0025 + 20 +7758.254706 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +23F3 + 8 +DETAILS + 10 +14073.9975 + 20 +7758.254706 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +23F4 + 8 +DETAILS + 0 +POLYLINE + 5 +718 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +23F5 + 8 +DETAILS + 10 +14046.0025 + 20 +7758.254706 + 30 +0.0 + 42 +-1.0 + 0 +VERTEX + 5 +23F6 + 8 +DETAILS + 10 +14043.9975 + 20 +7758.254706 + 30 +0.0 + 42 +-1.0 + 0 +SEQEND + 5 +23F7 + 8 +DETAILS + 0 +POLYLINE + 5 +71C + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +23F8 + 8 +HOLZ + 10 +16757.5 + 20 +7365.0 + 30 +0.0 + 0 +VERTEX + 5 +23F9 + 8 +HOLZ + 10 +16757.5 + 20 +7485.0 + 30 +0.0 + 0 +VERTEX + 5 +23FA + 8 +HOLZ + 10 +16857.5 + 20 +7485.0 + 30 +0.0 + 0 +VERTEX + 5 +23FB + 8 +HOLZ + 10 +16857.5 + 20 +7365.0 + 30 +0.0 + 0 +SEQEND + 5 +23FC + 8 +HOLZ + 0 +POLYLINE + 5 +722 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +23FD + 8 +HOLZ + 10 +17310.0 + 20 +7425.4 + 30 +0.0 + 0 +VERTEX + 5 +23FE + 8 +HOLZ + 10 +16857.5 + 20 +7464.98862 + 30 +0.0 + 0 +SEQEND + 5 +23FF + 8 +HOLZ + 0 +POLYLINE + 5 +726 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2400 + 8 +DETAILS + 10 +16864.123694 + 20 +7434.615507 + 30 +0.0 + 0 +VERTEX + 5 +2401 + 8 +DETAILS + 10 +16864.123694 + 20 +7574.602207 + 30 +0.0 + 0 +VERTEX + 5 +2402 + 8 +DETAILS + 10 +16908.965186 + 20 +7574.602207 + 30 +0.0 + 0 +VERTEX + 5 +2403 + 8 +DETAILS + 10 +16908.965186 + 20 +7505.222869 + 30 +0.0 + 0 +VERTEX + 5 +2404 + 8 +DETAILS + 10 +16875.0 + 20 +7475.0 + 30 +0.0 + 0 +VERTEX + 5 +2405 + 8 +DETAILS + 10 +16875.0 + 20 +7410.0 + 30 +0.0 + 0 +VERTEX + 5 +2406 + 8 +DETAILS + 10 +16865.0 + 20 +7410.0 + 30 +0.0 + 0 +VERTEX + 5 +2407 + 8 +DETAILS + 10 +16865.0 + 20 +7450.0 + 30 +0.0 + 0 +SEQEND + 5 +2408 + 8 +DETAILS + 0 +POLYLINE + 5 +730 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +2409 + 8 +DETAILS + 10 +16878.9975 + 20 +7555.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +240A + 8 +DETAILS + 10 +16881.0025 + 20 +7555.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +240B + 8 +DETAILS + 0 +POLYLINE + 5 +734 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +240C + 8 +DETAILS + 10 +16893.9975 + 20 +7545.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +240D + 8 +DETAILS + 10 +16896.0025 + 20 +7545.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +240E + 8 +DETAILS + 0 +POLYLINE + 5 +738 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +240F + 8 +DETAILS + 10 +16893.9975 + 20 +7520.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2410 + 8 +DETAILS + 10 +16896.0025 + 20 +7520.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2411 + 8 +DETAILS + 0 +POLYLINE + 5 +73C + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +2412 + 8 +DETAILS + 10 +16878.9975 + 20 +7530.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2413 + 8 +DETAILS + 10 +16881.0025 + 20 +7530.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2414 + 8 +DETAILS + 0 +POLYLINE + 5 +740 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2415 + 8 +DETAILS + 10 +13820.0 + 20 +7670.0 + 30 +0.0 + 0 +VERTEX + 5 +2416 + 8 +DETAILS + 10 +13820.0 + 20 +7825.0 + 30 +0.0 + 0 +VERTEX + 5 +2417 + 8 +DETAILS + 10 +13832.258688 + 20 +7825.0 + 30 +0.0 + 0 +SEQEND + 5 +2418 + 8 +DETAILS + 0 +POLYLINE + 5 +745 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2419 + 8 +DETAILS + 10 +13880.0 + 20 +7795.167917 + 30 +0.0 + 0 +VERTEX + 5 +241A + 8 +DETAILS + 10 +13880.0 + 20 +7765.0 + 30 +0.0 + 0 +VERTEX + 5 +241B + 8 +DETAILS + 10 +13835.0 + 20 +7740.0 + 30 +0.0 + 0 +VERTEX + 5 +241C + 8 +DETAILS + 10 +13835.0 + 20 +7670.0 + 30 +0.0 + 0 +VERTEX + 5 +241D + 8 +DETAILS + 10 +13820.0 + 20 +7670.0 + 30 +0.0 + 0 +SEQEND + 5 +241E + 8 +DETAILS + 0 +POLYLINE + 5 +74C + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +241F + 8 +DETAILS + 10 +13836.69948 + 20 +7809.90568 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2420 + 8 +DETAILS + 10 +13838.70448 + 20 +7809.90568 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2421 + 8 +DETAILS + 0 +POLYLINE + 5 +750 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +2422 + 8 +DETAILS + 10 +13836.69948 + 20 +7776.50941 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2423 + 8 +DETAILS + 10 +13838.70448 + 20 +7776.50941 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2424 + 8 +DETAILS + 0 +POLYLINE + 5 +754 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.995 + 41 +1.995 + 0 +VERTEX + 5 +2425 + 8 +DETAILS + 10 +13859.918036 + 20 +7783.867891 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2426 + 8 +DETAILS + 10 +13861.923036 + 20 +7783.867891 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2427 + 8 +DETAILS + 0 +POLYLINE + 5 +758 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2428 + 8 +DETAILS + 10 +13830.0 + 20 +7840.0 + 30 +0.0 + 0 +VERTEX + 5 +2429 + 8 +DETAILS + 10 +13830.0 + 20 +7870.0 + 30 +0.0 + 0 +SEQEND + 5 +242A + 8 +DETAILS + 0 +POLYLINE + 5 +75C + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +242B + 8 +DETAILS + 10 +13840.0 + 20 +7870.0 + 30 +0.0 + 0 +VERTEX + 5 +242C + 8 +DETAILS + 10 +13878.476039 + 20 +7867.075464 + 30 +0.0 + 0 +SEQEND + 5 +242D + 8 +DETAILS + 0 +POLYLINE + 5 +760 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +242E + 8 +DETAILS + 10 +13901.727343 + 20 +7864.339587 + 30 +0.0 + 0 +VERTEX + 5 +242F + 8 +DETAILS + 10 +13940.203382 + 20 +7861.415051 + 30 +0.0 + 0 +SEQEND + 5 +2430 + 8 +DETAILS + 0 +POLYLINE + 5 +764 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2431 + 8 +DETAILS + 10 +13966.852553 + 20 +7858.679174 + 30 +0.0 + 0 +VERTEX + 5 +2432 + 8 +DETAILS + 10 +14005.328591 + 20 +7855.754638 + 30 +0.0 + 0 +SEQEND + 5 +2433 + 8 +DETAILS + 0 +POLYLINE + 5 +768 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2434 + 8 +DETAILS + 10 +14034.24295 + 20 +7853.018817 + 30 +0.0 + 0 +VERTEX + 5 +2435 + 8 +DETAILS + 10 +14072.718989 + 20 +7850.09428 + 30 +0.0 + 0 +SEQEND + 5 +2436 + 8 +DETAILS + 0 +POLYLINE + 5 +76C + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2437 + 8 +DETAILS + 10 +14101.067093 + 20 +7846.226376 + 30 +0.0 + 0 +VERTEX + 5 +2438 + 8 +DETAILS + 10 +14139.543132 + 20 +7843.30184 + 30 +0.0 + 0 +SEQEND + 5 +2439 + 8 +DETAILS + 0 +POLYLINE + 5 +770 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +243A + 8 +HOLZ + 10 +14143.126569 + 20 +7843.000301 + 30 +0.0 + 0 +VERTEX + 5 +243B + 8 +HOLZ + 10 +17322.201804 + 20 +7564.867258 + 30 +0.0 + 0 +VERTEX + 5 +243C + 8 +HOLZ + 10 +17310.0 + 20 +7425.4 + 30 +0.0 + 0 +SEQEND + 5 +243D + 8 +HOLZ + 0 +POLYLINE + 5 +775 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +243E + 8 +DETAILS + 10 +14034.80929 + 20 +7712.075419 + 30 +0.0 + 0 +VERTEX + 5 +243F + 8 +DETAILS + 10 +14073.285328 + 20 +7709.150883 + 30 +0.0 + 0 +SEQEND + 5 +2440 + 8 +DETAILS + 0 +POLYLINE + 5 +779 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2441 + 8 +DETAILS + 10 +14097.669312 + 20 +7706.981047 + 30 +0.0 + 0 +VERTEX + 5 +2442 + 8 +DETAILS + 10 +14136.14535 + 20 +7704.056511 + 30 +0.0 + 0 +SEQEND + 5 +2443 + 8 +DETAILS + 0 +POLYLINE + 5 +77D + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2444 + 8 +DETAILS + 10 +14163.927115 + 20 +7700.754648 + 30 +0.0 + 0 +VERTEX + 5 +2445 + 8 +DETAILS + 10 +14202.403154 + 20 +7697.830112 + 30 +0.0 + 0 +SEQEND + 5 +2446 + 8 +DETAILS + 0 +POLYLINE + 5 +781 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2447 + 8 +DETAILS + 10 +14238.113246 + 20 +7693.396167 + 30 +0.0 + 0 +VERTEX + 5 +2448 + 8 +DETAILS + 10 +14276.589284 + 20 +7690.471631 + 30 +0.0 + 0 +SEQEND + 5 +2449 + 8 +DETAILS + 0 +POLYLINE + 5 +785 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +244A + 8 +DETAILS + 10 +14308.90151 + 20 +7687.169768 + 30 +0.0 + 0 +VERTEX + 5 +244B + 8 +DETAILS + 10 +14347.377548 + 20 +7684.245232 + 30 +0.0 + 0 +SEQEND + 5 +244C + 8 +DETAILS + 0 +POLYLINE + 5 +789 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +244D + 8 +DETAILS + 10 +14384.126369 + 20 +7681.361169 + 30 +0.0 + 0 +VERTEX + 5 +244E + 8 +DETAILS + 10 +14422.602408 + 20 +7678.436633 + 30 +0.0 + 0 +SEQEND + 5 +244F + 8 +DETAILS + 0 +POLYLINE + 5 +78D + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2450 + 8 +HOLZ + 10 +16757.5 + 20 +7473.737487 + 30 +0.0 + 0 +VERTEX + 5 +2451 + 8 +HOLZ + 10 +14404.64467 + 20 +7679.585655 + 30 +0.0 + 0 +SEQEND + 5 +2452 + 8 +HOLZ + 0 +POLYLINE + 5 +791 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2453 + 8 +DETAILS + 10 +10325.0 + 20 +4710.0 + 30 +0.0 + 0 +VERTEX + 5 +2454 + 8 +DETAILS + 10 +10325.0 + 20 +4725.0 + 30 +0.0 + 0 +VERTEX + 5 +2455 + 8 +DETAILS + 10 +10455.0 + 20 +4725.0 + 30 +0.0 + 0 +VERTEX + 5 +2456 + 8 +DETAILS + 10 +10455.0 + 20 +4850.0 + 30 +0.0 + 0 +VERTEX + 5 +2457 + 8 +DETAILS + 10 +10475.0 + 20 +4850.0 + 30 +0.0 + 0 +SEQEND + 5 +2458 + 8 +DETAILS + 0 +POLYLINE + 5 +798 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2459 + 8 +DETAILS + 10 +10790.0 + 20 +4710.0 + 30 +0.0 + 0 +VERTEX + 5 +245A + 8 +DETAILS + 10 +10790.0 + 20 +4725.0 + 30 +0.0 + 0 +VERTEX + 5 +245B + 8 +DETAILS + 10 +10660.0 + 20 +4725.0 + 30 +0.0 + 0 +VERTEX + 5 +245C + 8 +DETAILS + 10 +10660.0 + 20 +4850.0 + 30 +0.0 + 0 +VERTEX + 5 +245D + 8 +DETAILS + 10 +10640.0 + 20 +4850.0 + 30 +0.0 + 0 +SEQEND + 5 +245E + 8 +DETAILS + 0 +POLYLINE + 5 +79F + 8 +SCHORNSTEIN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +245F + 8 +SCHORNSTEIN + 10 +8740.0 + 20 +8947.848405 + 30 +0.0 + 0 +VERTEX + 5 +2460 + 8 +SCHORNSTEIN + 10 +8740.0 + 20 +9445.0 + 30 +0.0 + 0 +VERTEX + 5 +2461 + 8 +SCHORNSTEIN + 10 +7250.0 + 20 +9445.0 + 30 +0.0 + 0 +VERTEX + 5 +2462 + 8 +SCHORNSTEIN + 10 +7250.0 + 20 +8016.79307 + 30 +0.0 + 0 +SEQEND + 5 +2463 + 8 +SCHORNSTEIN + 0 +POLYLINE + 5 +7A5 + 8 +SCHORNSTEIN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2464 + 8 +SCHORNSTEIN + 10 +8740.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +2465 + 8 +SCHORNSTEIN + 10 +8740.0 + 20 +7355.0 + 30 +0.0 + 0 +SEQEND + 5 +2466 + 8 +SCHORNSTEIN + 0 +POLYLINE + 5 +7A9 + 8 +SCHORNSTEIN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2467 + 8 +SCHORNSTEIN + 10 +8740.0 + 20 +7515.0 + 30 +0.0 + 0 +VERTEX + 5 +2468 + 8 +SCHORNSTEIN + 10 +8740.0 + 20 +8735.596292 + 30 +0.0 + 0 +SEQEND + 5 +2469 + 8 +SCHORNSTEIN + 0 +POLYLINE + 5 +7AD + 8 +SCHORNSTEIN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +246A + 8 +SCHORNSTEIN + 10 +12740.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +246B + 8 +SCHORNSTEIN + 10 +12740.0 + 20 +7355.0 + 30 +0.0 + 0 +VERTEX + 5 +246C + 8 +SCHORNSTEIN + 10 +14591.819725 + 20 +7355.0 + 30 +0.0 + 0 +SEQEND + 5 +246D + 8 +SCHORNSTEIN + 0 +POLYLINE + 5 +7B2 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +246E + 8 +DETAILS + 10 +4300.0 + 20 +5945.0 + 30 +0.0 + 0 +VERTEX + 5 +246F + 8 +DETAILS + 10 +4300.0 + 20 +5880.0 + 30 +0.0 + 0 +SEQEND + 5 +2470 + 8 +DETAILS + 0 +POLYLINE + 5 +7B6 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2471 + 8 +DETAILS + 10 +4300.0 + 20 +5820.0 + 30 +0.0 + 0 +VERTEX + 5 +2472 + 8 +DETAILS + 10 +4300.0 + 20 +5755.0 + 30 +0.0 + 0 +SEQEND + 5 +2473 + 8 +DETAILS + 0 +POLYLINE + 5 +7BA + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2474 + 8 +DETAILS + 10 +4300.0 + 20 +5695.0 + 30 +0.0 + 0 +VERTEX + 5 +2475 + 8 +DETAILS + 10 +4300.0 + 20 +5630.0 + 30 +0.0 + 0 +SEQEND + 5 +2476 + 8 +DETAILS + 0 +POLYLINE + 5 +7BE + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2477 + 8 +DETAILS + 10 +4300.0 + 20 +5545.0 + 30 +0.0 + 0 +VERTEX + 5 +2478 + 8 +DETAILS + 10 +4300.0 + 20 +5480.0 + 30 +0.0 + 0 +SEQEND + 5 +2479 + 8 +DETAILS + 0 +POLYLINE + 5 +7C2 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +247A + 8 +DETAILS + 10 +4300.0 + 20 +5415.0 + 30 +0.0 + 0 +VERTEX + 5 +247B + 8 +DETAILS + 10 +4300.0 + 20 +5350.0 + 30 +0.0 + 0 +SEQEND + 5 +247C + 8 +DETAILS + 0 +POLYLINE + 5 +7C6 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +247D + 8 +DETAILS + 10 +5635.0 + 20 +4750.0 + 30 +0.0 + 0 +VERTEX + 5 +247E + 8 +DETAILS + 10 +5635.0 + 20 +4730.0 + 30 +0.0 + 0 +SEQEND + 5 +247F + 8 +DETAILS + 0 +POLYLINE + 5 +7CA + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2480 + 8 +DETAILS + 10 +5750.0 + 20 +4710.0 + 30 +0.0 + 0 +VERTEX + 5 +2481 + 8 +DETAILS + 10 +5750.0 + 20 +4690.0 + 30 +0.0 + 0 +SEQEND + 5 +2482 + 8 +DETAILS + 0 +POLYLINE + 5 +7CE + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2483 + 8 +DETAILS + 10 +5635.0 + 20 +4710.0 + 30 +0.0 + 0 +VERTEX + 5 +2484 + 8 +DETAILS + 10 +5635.0 + 20 +4690.0 + 30 +0.0 + 0 +SEQEND + 5 +2485 + 8 +DETAILS + 0 +POLYLINE + 5 +7D2 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2486 + 8 +DETAILS + 10 +5635.0 + 20 +4670.0 + 30 +0.0 + 0 +VERTEX + 5 +2487 + 8 +DETAILS + 10 +5635.0 + 20 +4650.0 + 30 +0.0 + 0 +SEQEND + 5 +2488 + 8 +DETAILS + 0 +POLYLINE + 5 +7D6 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2489 + 8 +DETAILS + 10 +5635.0 + 20 +4630.0 + 30 +0.0 + 0 +VERTEX + 5 +248A + 8 +DETAILS + 10 +5635.0 + 20 +4610.0 + 30 +0.0 + 0 +SEQEND + 5 +248B + 8 +DETAILS + 0 +POLYLINE + 5 +7DA + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +248C + 8 +DETAILS + 10 +5750.0 + 20 +4750.0 + 30 +0.0 + 0 +VERTEX + 5 +248D + 8 +DETAILS + 10 +5750.0 + 20 +4730.0 + 30 +0.0 + 0 +SEQEND + 5 +248E + 8 +DETAILS + 0 +POLYLINE + 5 +7DE + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +248F + 8 +DETAILS + 10 +5750.0 + 20 +4670.0 + 30 +0.0 + 0 +VERTEX + 5 +2490 + 8 +DETAILS + 10 +5750.0 + 20 +4650.0 + 30 +0.0 + 0 +SEQEND + 5 +2491 + 8 +DETAILS + 0 +POLYLINE + 5 +7E2 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2492 + 8 +DETAILS + 10 +5750.0 + 20 +4630.0 + 30 +0.0 + 0 +VERTEX + 5 +2493 + 8 +DETAILS + 10 +5750.0 + 20 +4610.0 + 30 +0.0 + 0 +SEQEND + 5 +2494 + 8 +DETAILS + 0 +POLYLINE + 5 +7E6 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2495 + 8 +DETAILS + 10 +5635.0 + 20 +4590.0 + 30 +0.0 + 0 +VERTEX + 5 +2496 + 8 +DETAILS + 10 +5635.0 + 20 +4570.0 + 30 +0.0 + 0 +SEQEND + 5 +2497 + 8 +DETAILS + 0 +POLYLINE + 5 +7EA + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2498 + 8 +DETAILS + 10 +5635.0 + 20 +4545.0 + 30 +0.0 + 0 +VERTEX + 5 +2499 + 8 +DETAILS + 10 +5635.0 + 20 +4525.0 + 30 +0.0 + 0 +SEQEND + 5 +249A + 8 +DETAILS + 0 +POLYLINE + 5 +7EE + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +249B + 8 +DETAILS + 10 +5750.0 + 20 +4590.0 + 30 +0.0 + 0 +VERTEX + 5 +249C + 8 +DETAILS + 10 +5750.0 + 20 +4570.0 + 30 +0.0 + 0 +SEQEND + 5 +249D + 8 +DETAILS + 0 +POLYLINE + 5 +7F2 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +249E + 8 +DETAILS + 10 +5750.0 + 20 +4545.0 + 30 +0.0 + 0 +VERTEX + 5 +249F + 8 +DETAILS + 10 +5750.0 + 20 +4525.0 + 30 +0.0 + 0 +SEQEND + 5 +24A0 + 8 +DETAILS + 0 +POLYLINE + 5 +7F6 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +24A1 + 8 +DETAILS + 10 +15365.0 + 20 +4545.0 + 30 +0.0 + 0 +VERTEX + 5 +24A2 + 8 +DETAILS + 10 +15365.0 + 20 +4525.0 + 30 +0.0 + 0 +SEQEND + 5 +24A3 + 8 +DETAILS + 0 +POLYLINE + 5 +7FA + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +24A4 + 8 +DETAILS + 10 +15365.0 + 20 +4590.0 + 30 +0.0 + 0 +VERTEX + 5 +24A5 + 8 +DETAILS + 10 +15365.0 + 20 +4570.0 + 30 +0.0 + 0 +SEQEND + 5 +24A6 + 8 +DETAILS + 0 +POLYLINE + 5 +7FE + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +24A7 + 8 +DETAILS + 10 +15480.0 + 20 +4545.0 + 30 +0.0 + 0 +VERTEX + 5 +24A8 + 8 +DETAILS + 10 +15480.0 + 20 +4525.0 + 30 +0.0 + 0 +SEQEND + 5 +24A9 + 8 +DETAILS + 0 +POLYLINE + 5 +802 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +24AA + 8 +DETAILS + 10 +15480.0 + 20 +4590.0 + 30 +0.0 + 0 +VERTEX + 5 +24AB + 8 +DETAILS + 10 +15480.0 + 20 +4570.0 + 30 +0.0 + 0 +SEQEND + 5 +24AC + 8 +DETAILS + 0 +POLYLINE + 5 +806 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +24AD + 8 +DETAILS + 10 +15365.0 + 20 +4630.0 + 30 +0.0 + 0 +VERTEX + 5 +24AE + 8 +DETAILS + 10 +15365.0 + 20 +4610.0 + 30 +0.0 + 0 +SEQEND + 5 +24AF + 8 +DETAILS + 0 +POLYLINE + 5 +80A + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +24B0 + 8 +DETAILS + 10 +15480.0 + 20 +4630.0 + 30 +0.0 + 0 +VERTEX + 5 +24B1 + 8 +DETAILS + 10 +15480.0 + 20 +4610.0 + 30 +0.0 + 0 +SEQEND + 5 +24B2 + 8 +DETAILS + 0 +POLYLINE + 5 +80E + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +24B3 + 8 +DETAILS + 10 +15365.0 + 20 +4670.0 + 30 +0.0 + 0 +VERTEX + 5 +24B4 + 8 +DETAILS + 10 +15365.0 + 20 +4650.0 + 30 +0.0 + 0 +SEQEND + 5 +24B5 + 8 +DETAILS + 0 +POLYLINE + 5 +812 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +24B6 + 8 +DETAILS + 10 +15365.0 + 20 +4750.0 + 30 +0.0 + 0 +VERTEX + 5 +24B7 + 8 +DETAILS + 10 +15365.0 + 20 +4730.0 + 30 +0.0 + 0 +SEQEND + 5 +24B8 + 8 +DETAILS + 0 +POLYLINE + 5 +816 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +24B9 + 8 +DETAILS + 10 +15365.0 + 20 +4710.0 + 30 +0.0 + 0 +VERTEX + 5 +24BA + 8 +DETAILS + 10 +15365.0 + 20 +4690.0 + 30 +0.0 + 0 +SEQEND + 5 +24BB + 8 +DETAILS + 0 +POLYLINE + 5 +81A + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +24BC + 8 +DETAILS + 10 +15480.0 + 20 +4710.0 + 30 +0.0 + 0 +VERTEX + 5 +24BD + 8 +DETAILS + 10 +15480.0 + 20 +4690.0 + 30 +0.0 + 0 +SEQEND + 5 +24BE + 8 +DETAILS + 0 +POLYLINE + 5 +81E + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +24BF + 8 +DETAILS + 10 +15480.0 + 20 +4670.0 + 30 +0.0 + 0 +VERTEX + 5 +24C0 + 8 +DETAILS + 10 +15480.0 + 20 +4650.0 + 30 +0.0 + 0 +SEQEND + 5 +24C1 + 8 +DETAILS + 0 +POLYLINE + 5 +822 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +24C2 + 8 +DETAILS + 10 +15480.0 + 20 +4750.0 + 30 +0.0 + 0 +VERTEX + 5 +24C3 + 8 +DETAILS + 10 +15480.0 + 20 +4730.0 + 30 +0.0 + 0 +SEQEND + 5 +24C4 + 8 +DETAILS + 0 +POLYLINE + 5 +826 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +24C5 + 8 +DETAILS + 10 +16815.0 + 20 +5545.0 + 30 +0.0 + 0 +VERTEX + 5 +24C6 + 8 +DETAILS + 10 +16815.0 + 20 +5480.0 + 30 +0.0 + 0 +SEQEND + 5 +24C7 + 8 +DETAILS + 0 +POLYLINE + 5 +82A + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +24C8 + 8 +DETAILS + 10 +16815.0 + 20 +5415.0 + 30 +0.0 + 0 +VERTEX + 5 +24C9 + 8 +DETAILS + 10 +16815.0 + 20 +5350.0 + 30 +0.0 + 0 +SEQEND + 5 +24CA + 8 +DETAILS + 0 +POLYLINE + 5 +82E + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +24CB + 8 +DETAILS + 10 +16815.0 + 20 +5820.0 + 30 +0.0 + 0 +VERTEX + 5 +24CC + 8 +DETAILS + 10 +16815.0 + 20 +5755.0 + 30 +0.0 + 0 +SEQEND + 5 +24CD + 8 +DETAILS + 0 +POLYLINE + 5 +832 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +24CE + 8 +DETAILS + 10 +16815.0 + 20 +5695.0 + 30 +0.0 + 0 +VERTEX + 5 +24CF + 8 +DETAILS + 10 +16815.0 + 20 +5630.0 + 30 +0.0 + 0 +SEQEND + 5 +24D0 + 8 +DETAILS + 0 +POLYLINE + 5 +836 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +24D1 + 8 +DETAILS + 10 +16815.0 + 20 +5945.0 + 30 +0.0 + 0 +VERTEX + 5 +24D2 + 8 +DETAILS + 10 +16815.0 + 20 +5880.0 + 30 +0.0 + 0 +SEQEND + 5 +24D3 + 8 +DETAILS + 0 +POLYLINE + 5 +83A + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +24D4 + 8 +DETAILS + 10 +6925.0 + 20 +4710.0 + 30 +0.0 + 0 +VERTEX + 5 +24D5 + 8 +DETAILS + 10 +6925.0 + 20 +4725.0 + 30 +0.0 + 0 +VERTEX + 5 +24D6 + 8 +DETAILS + 10 +7055.0 + 20 +4725.0 + 30 +0.0 + 0 +VERTEX + 5 +24D7 + 8 +DETAILS + 10 +7055.0 + 20 +4850.0 + 30 +0.0 + 0 +VERTEX + 5 +24D8 + 8 +DETAILS + 10 +7075.0 + 20 +4850.0 + 30 +0.0 + 0 +SEQEND + 5 +24D9 + 8 +DETAILS + 0 +POLYLINE + 5 +841 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +24DA + 8 +DETAILS + 10 +7435.0 + 20 +4710.0 + 30 +0.0 + 0 +VERTEX + 5 +24DB + 8 +DETAILS + 10 +7435.0 + 20 +4725.0 + 30 +0.0 + 0 +VERTEX + 5 +24DC + 8 +DETAILS + 10 +7305.0 + 20 +4725.0 + 30 +0.0 + 0 +VERTEX + 5 +24DD + 8 +DETAILS + 10 +7305.0 + 20 +4850.0 + 30 +0.0 + 0 +VERTEX + 5 +24DE + 8 +DETAILS + 10 +7285.0 + 20 +4850.0 + 30 +0.0 + 0 +SEQEND + 5 +24DF + 8 +DETAILS + 0 +POLYLINE + 5 +848 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +24E0 + 8 +DETAILS + 10 +7055.0 + 20 +4825.0 + 30 +0.0 + 0 +VERTEX + 5 +24E1 + 8 +DETAILS + 10 +7065.0 + 20 +4825.0 + 30 +0.0 + 0 +VERTEX + 5 +24E2 + 8 +DETAILS + 10 +7075.0 + 20 +4825.0 + 30 +0.0 + 0 +SEQEND + 5 +24E3 + 8 +DETAILS + 0 +POLYLINE + 5 +84D + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +24E4 + 8 +DETAILS + 10 +7095.0 + 20 +4825.0 + 30 +0.0 + 0 +VERTEX + 5 +24E5 + 8 +DETAILS + 10 +7115.0 + 20 +4825.0 + 30 +0.0 + 0 +SEQEND + 5 +24E6 + 8 +DETAILS + 0 +POLYLINE + 5 +851 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +24E7 + 8 +DETAILS + 10 +7055.0 + 20 +4770.0 + 30 +0.0 + 0 +VERTEX + 5 +24E8 + 8 +DETAILS + 10 +7075.0 + 20 +4770.0 + 30 +0.0 + 0 +SEQEND + 5 +24E9 + 8 +DETAILS + 0 +POLYLINE + 5 +855 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +24EA + 8 +DETAILS + 10 +7095.0 + 20 +4770.0 + 30 +0.0 + 0 +VERTEX + 5 +24EB + 8 +DETAILS + 10 +7115.0 + 20 +4770.0 + 30 +0.0 + 0 +SEQEND + 5 +24EC + 8 +DETAILS + 0 +POLYLINE + 5 +859 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +24ED + 8 +DETAILS + 10 +7305.0 + 20 +4830.0 + 30 +0.0 + 0 +VERTEX + 5 +24EE + 8 +DETAILS + 10 +7290.0 + 20 +4830.0 + 30 +0.0 + 0 +SEQEND + 5 +24EF + 8 +DETAILS + 0 +POLYLINE + 5 +85D + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +24F0 + 8 +DETAILS + 10 +7270.0 + 20 +4830.0 + 30 +0.0 + 0 +VERTEX + 5 +24F1 + 8 +DETAILS + 10 +7250.0 + 20 +4830.0 + 30 +0.0 + 0 +SEQEND + 5 +24F2 + 8 +DETAILS + 0 +POLYLINE + 5 +861 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +24F3 + 8 +DETAILS + 10 +7305.0 + 20 +4760.0 + 30 +0.0 + 0 +VERTEX + 5 +24F4 + 8 +DETAILS + 10 +7290.0 + 20 +4760.0 + 30 +0.0 + 0 +SEQEND + 5 +24F5 + 8 +DETAILS + 0 +POLYLINE + 5 +865 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +24F6 + 8 +DETAILS + 10 +7270.0 + 20 +4760.0 + 30 +0.0 + 0 +VERTEX + 5 +24F7 + 8 +DETAILS + 10 +7250.0 + 20 +4760.0 + 30 +0.0 + 0 +SEQEND + 5 +24F8 + 8 +DETAILS + 0 +POLYLINE + 5 +869 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +24F9 + 8 +DETAILS + 10 +7030.0 + 20 +4725.0 + 30 +0.0 + 0 +VERTEX + 5 +24FA + 8 +DETAILS + 10 +7030.0 + 20 +4690.0 + 30 +0.0 + 0 +SEQEND + 5 +24FB + 8 +DETAILS + 0 +POLYLINE + 5 +86D + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +24FC + 8 +DETAILS + 10 +7030.0 + 20 +4675.0 + 30 +0.0 + 0 +VERTEX + 5 +24FD + 8 +DETAILS + 10 +7030.0 + 20 +4635.0 + 30 +0.0 + 0 +SEQEND + 5 +24FE + 8 +DETAILS + 0 +POLYLINE + 5 +871 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +24FF + 8 +DETAILS + 10 +7030.0 + 20 +4615.0 + 30 +0.0 + 0 +VERTEX + 5 +2500 + 8 +DETAILS + 10 +7030.0 + 20 +4590.0 + 30 +0.0 + 0 +SEQEND + 5 +2501 + 8 +DETAILS + 0 +POLYLINE + 5 +875 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2502 + 8 +DETAILS + 10 +6965.0 + 20 +4675.0 + 30 +0.0 + 0 +VERTEX + 5 +2503 + 8 +DETAILS + 10 +6965.0 + 20 +4635.0 + 30 +0.0 + 0 +SEQEND + 5 +2504 + 8 +DETAILS + 0 +POLYLINE + 5 +879 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2505 + 8 +DETAILS + 10 +6965.0 + 20 +4615.0 + 30 +0.0 + 0 +VERTEX + 5 +2506 + 8 +DETAILS + 10 +6965.0 + 20 +4590.0 + 30 +0.0 + 0 +SEQEND + 5 +2507 + 8 +DETAILS + 0 +POLYLINE + 5 +87D + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2508 + 8 +DETAILS + 10 +6965.0 + 20 +4725.0 + 30 +0.0 + 0 +VERTEX + 5 +2509 + 8 +DETAILS + 10 +6965.0 + 20 +4690.0 + 30 +0.0 + 0 +SEQEND + 5 +250A + 8 +DETAILS + 0 +POLYLINE + 5 +881 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +250B + 8 +DETAILS + 10 +7340.0 + 20 +4675.0 + 30 +0.0 + 0 +VERTEX + 5 +250C + 8 +DETAILS + 10 +7340.0 + 20 +4635.0 + 30 +0.0 + 0 +SEQEND + 5 +250D + 8 +DETAILS + 0 +POLYLINE + 5 +885 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +250E + 8 +DETAILS + 10 +7340.0 + 20 +4615.0 + 30 +0.0 + 0 +VERTEX + 5 +250F + 8 +DETAILS + 10 +7340.0 + 20 +4590.0 + 30 +0.0 + 0 +SEQEND + 5 +2510 + 8 +DETAILS + 0 +POLYLINE + 5 +889 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2511 + 8 +DETAILS + 10 +7340.0 + 20 +4725.0 + 30 +0.0 + 0 +VERTEX + 5 +2512 + 8 +DETAILS + 10 +7340.0 + 20 +4690.0 + 30 +0.0 + 0 +SEQEND + 5 +2513 + 8 +DETAILS + 0 +POLYLINE + 5 +88D + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2514 + 8 +DETAILS + 10 +7405.0 + 20 +4675.0 + 30 +0.0 + 0 +VERTEX + 5 +2515 + 8 +DETAILS + 10 +7405.0 + 20 +4635.0 + 30 +0.0 + 0 +SEQEND + 5 +2516 + 8 +DETAILS + 0 +POLYLINE + 5 +891 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2517 + 8 +DETAILS + 10 +7405.0 + 20 +4615.0 + 30 +0.0 + 0 +VERTEX + 5 +2518 + 8 +DETAILS + 10 +7405.0 + 20 +4590.0 + 30 +0.0 + 0 +SEQEND + 5 +2519 + 8 +DETAILS + 0 +POLYLINE + 5 +895 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +251A + 8 +DETAILS + 10 +7405.0 + 20 +4725.0 + 30 +0.0 + 0 +VERTEX + 5 +251B + 8 +DETAILS + 10 +7405.0 + 20 +4690.0 + 30 +0.0 + 0 +SEQEND + 5 +251C + 8 +DETAILS + 0 +POLYLINE + 5 +899 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +251D + 8 +DETAILS + 10 +14150.0 + 20 +4675.0 + 30 +0.0 + 0 +VERTEX + 5 +251E + 8 +DETAILS + 10 +14150.0 + 20 +4635.0 + 30 +0.0 + 0 +SEQEND + 5 +251F + 8 +DETAILS + 0 +POLYLINE + 5 +89D + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2520 + 8 +DETAILS + 10 +14085.0 + 20 +4675.0 + 30 +0.0 + 0 +VERTEX + 5 +2521 + 8 +DETAILS + 10 +14085.0 + 20 +4635.0 + 30 +0.0 + 0 +SEQEND + 5 +2522 + 8 +DETAILS + 0 +POLYLINE + 5 +8A1 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2523 + 8 +DETAILS + 10 +14150.0 + 20 +4615.0 + 30 +0.0 + 0 +VERTEX + 5 +2524 + 8 +DETAILS + 10 +14150.0 + 20 +4590.0 + 30 +0.0 + 0 +SEQEND + 5 +2525 + 8 +DETAILS + 0 +POLYLINE + 5 +8A5 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2526 + 8 +DETAILS + 10 +14085.0 + 20 +4615.0 + 30 +0.0 + 0 +VERTEX + 5 +2527 + 8 +DETAILS + 10 +14085.0 + 20 +4590.0 + 30 +0.0 + 0 +SEQEND + 5 +2528 + 8 +DETAILS + 0 +POLYLINE + 5 +8A9 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2529 + 8 +DETAILS + 10 +14190.0 + 20 +4710.0 + 30 +0.0 + 0 +VERTEX + 5 +252A + 8 +DETAILS + 10 +14190.0 + 20 +4725.0 + 30 +0.0 + 0 +VERTEX + 5 +252B + 8 +DETAILS + 10 +14060.0 + 20 +4725.0 + 30 +0.0 + 0 +VERTEX + 5 +252C + 8 +DETAILS + 10 +14060.0 + 20 +4850.0 + 30 +0.0 + 0 +VERTEX + 5 +252D + 8 +DETAILS + 10 +14040.0 + 20 +4850.0 + 30 +0.0 + 0 +SEQEND + 5 +252E + 8 +DETAILS + 0 +POLYLINE + 5 +8B0 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +252F + 8 +DETAILS + 10 +14150.0 + 20 +4725.0 + 30 +0.0 + 0 +VERTEX + 5 +2530 + 8 +DETAILS + 10 +14150.0 + 20 +4690.0 + 30 +0.0 + 0 +SEQEND + 5 +2531 + 8 +DETAILS + 0 +POLYLINE + 5 +8B4 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2532 + 8 +DETAILS + 10 +14085.0 + 20 +4725.0 + 30 +0.0 + 0 +VERTEX + 5 +2533 + 8 +DETAILS + 10 +14085.0 + 20 +4690.0 + 30 +0.0 + 0 +SEQEND + 5 +2534 + 8 +DETAILS + 0 +POLYLINE + 5 +8B8 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2535 + 8 +DETAILS + 10 +14020.0 + 20 +4770.0 + 30 +0.0 + 0 +VERTEX + 5 +2536 + 8 +DETAILS + 10 +14000.0 + 20 +4770.0 + 30 +0.0 + 0 +SEQEND + 5 +2537 + 8 +DETAILS + 0 +POLYLINE + 5 +8BC + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2538 + 8 +DETAILS + 10 +14060.0 + 20 +4770.0 + 30 +0.0 + 0 +VERTEX + 5 +2539 + 8 +DETAILS + 10 +14040.0 + 20 +4770.0 + 30 +0.0 + 0 +SEQEND + 5 +253A + 8 +DETAILS + 0 +POLYLINE + 5 +8C0 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +253B + 8 +DETAILS + 10 +14020.0 + 20 +4825.0 + 30 +0.0 + 0 +VERTEX + 5 +253C + 8 +DETAILS + 10 +14000.0 + 20 +4825.0 + 30 +0.0 + 0 +SEQEND + 5 +253D + 8 +DETAILS + 0 +POLYLINE + 5 +8C4 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +253E + 8 +DETAILS + 10 +14060.0 + 20 +4825.0 + 30 +0.0 + 0 +VERTEX + 5 +253F + 8 +DETAILS + 10 +14050.0 + 20 +4825.0 + 30 +0.0 + 0 +VERTEX + 5 +2540 + 8 +DETAILS + 10 +14040.0 + 20 +4825.0 + 30 +0.0 + 0 +SEQEND + 5 +2541 + 8 +DETAILS + 0 +POLYLINE + 5 +8C9 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2542 + 8 +DETAILS + 10 +13710.0 + 20 +4675.0 + 30 +0.0 + 0 +VERTEX + 5 +2543 + 8 +DETAILS + 10 +13710.0 + 20 +4635.0 + 30 +0.0 + 0 +SEQEND + 5 +2544 + 8 +DETAILS + 0 +POLYLINE + 5 +8CD + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2545 + 8 +DETAILS + 10 +13775.0 + 20 +4675.0 + 30 +0.0 + 0 +VERTEX + 5 +2546 + 8 +DETAILS + 10 +13775.0 + 20 +4635.0 + 30 +0.0 + 0 +SEQEND + 5 +2547 + 8 +DETAILS + 0 +POLYLINE + 5 +8D1 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2548 + 8 +DETAILS + 10 +13710.0 + 20 +4615.0 + 30 +0.0 + 0 +VERTEX + 5 +2549 + 8 +DETAILS + 10 +13710.0 + 20 +4590.0 + 30 +0.0 + 0 +SEQEND + 5 +254A + 8 +DETAILS + 0 +POLYLINE + 5 +8D5 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +254B + 8 +DETAILS + 10 +13775.0 + 20 +4615.0 + 30 +0.0 + 0 +VERTEX + 5 +254C + 8 +DETAILS + 10 +13775.0 + 20 +4590.0 + 30 +0.0 + 0 +SEQEND + 5 +254D + 8 +DETAILS + 0 +POLYLINE + 5 +8D9 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +254E + 8 +DETAILS + 10 +13680.0 + 20 +4710.0 + 30 +0.0 + 0 +VERTEX + 5 +254F + 8 +DETAILS + 10 +13680.0 + 20 +4725.0 + 30 +0.0 + 0 +VERTEX + 5 +2550 + 8 +DETAILS + 10 +13810.0 + 20 +4725.0 + 30 +0.0 + 0 +VERTEX + 5 +2551 + 8 +DETAILS + 10 +13810.0 + 20 +4850.0 + 30 +0.0 + 0 +VERTEX + 5 +2552 + 8 +DETAILS + 10 +13830.0 + 20 +4850.0 + 30 +0.0 + 0 +SEQEND + 5 +2553 + 8 +DETAILS + 0 +POLYLINE + 5 +8E0 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2554 + 8 +DETAILS + 10 +13710.0 + 20 +4725.0 + 30 +0.0 + 0 +VERTEX + 5 +2555 + 8 +DETAILS + 10 +13710.0 + 20 +4690.0 + 30 +0.0 + 0 +SEQEND + 5 +2556 + 8 +DETAILS + 0 +POLYLINE + 5 +8E4 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2557 + 8 +DETAILS + 10 +13775.0 + 20 +4725.0 + 30 +0.0 + 0 +VERTEX + 5 +2558 + 8 +DETAILS + 10 +13775.0 + 20 +4690.0 + 30 +0.0 + 0 +SEQEND + 5 +2559 + 8 +DETAILS + 0 +POLYLINE + 5 +8E8 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +255A + 8 +DETAILS + 10 +13845.0 + 20 +4760.0 + 30 +0.0 + 0 +VERTEX + 5 +255B + 8 +DETAILS + 10 +13865.0 + 20 +4760.0 + 30 +0.0 + 0 +SEQEND + 5 +255C + 8 +DETAILS + 0 +POLYLINE + 5 +8EC + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +255D + 8 +DETAILS + 10 +13810.0 + 20 +4760.0 + 30 +0.0 + 0 +VERTEX + 5 +255E + 8 +DETAILS + 10 +13825.0 + 20 +4760.0 + 30 +0.0 + 0 +SEQEND + 5 +255F + 8 +DETAILS + 0 +POLYLINE + 5 +8F0 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2560 + 8 +DETAILS + 10 +13845.0 + 20 +4830.0 + 30 +0.0 + 0 +VERTEX + 5 +2561 + 8 +DETAILS + 10 +13865.0 + 20 +4830.0 + 30 +0.0 + 0 +SEQEND + 5 +2562 + 8 +DETAILS + 0 +POLYLINE + 5 +8F4 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2563 + 8 +DETAILS + 10 +13810.0 + 20 +4830.0 + 30 +0.0 + 0 +VERTEX + 5 +2564 + 8 +DETAILS + 10 +13825.0 + 20 +4830.0 + 30 +0.0 + 0 +SEQEND + 5 +2565 + 8 +DETAILS + 0 +POLYLINE + 5 +8F8 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2566 + 8 +DETAILS + 10 +10430.0 + 20 +4675.0 + 30 +0.0 + 0 +VERTEX + 5 +2567 + 8 +DETAILS + 10 +10430.0 + 20 +4635.0 + 30 +0.0 + 0 +SEQEND + 5 +2568 + 8 +DETAILS + 0 +POLYLINE + 5 +8FC + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2569 + 8 +DETAILS + 10 +10365.0 + 20 +4675.0 + 30 +0.0 + 0 +VERTEX + 5 +256A + 8 +DETAILS + 10 +10365.0 + 20 +4635.0 + 30 +0.0 + 0 +SEQEND + 5 +256B + 8 +DETAILS + 0 +POLYLINE + 5 +900 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +256C + 8 +DETAILS + 10 +10430.0 + 20 +4615.0 + 30 +0.0 + 0 +VERTEX + 5 +256D + 8 +DETAILS + 10 +10430.0 + 20 +4590.0 + 30 +0.0 + 0 +SEQEND + 5 +256E + 8 +DETAILS + 0 +POLYLINE + 5 +904 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +256F + 8 +DETAILS + 10 +10365.0 + 20 +4615.0 + 30 +0.0 + 0 +VERTEX + 5 +2570 + 8 +DETAILS + 10 +10365.0 + 20 +4590.0 + 30 +0.0 + 0 +SEQEND + 5 +2571 + 8 +DETAILS + 0 +POLYLINE + 5 +908 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2572 + 8 +DETAILS + 10 +10430.0 + 20 +4725.0 + 30 +0.0 + 0 +VERTEX + 5 +2573 + 8 +DETAILS + 10 +10430.0 + 20 +4690.0 + 30 +0.0 + 0 +SEQEND + 5 +2574 + 8 +DETAILS + 0 +POLYLINE + 5 +90C + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2575 + 8 +DETAILS + 10 +10365.0 + 20 +4725.0 + 30 +0.0 + 0 +VERTEX + 5 +2576 + 8 +DETAILS + 10 +10365.0 + 20 +4690.0 + 30 +0.0 + 0 +SEQEND + 5 +2577 + 8 +DETAILS + 0 +POLYLINE + 5 +910 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2578 + 8 +DETAILS + 10 +10695.0 + 20 +4675.0 + 30 +0.0 + 0 +VERTEX + 5 +2579 + 8 +DETAILS + 10 +10695.0 + 20 +4635.0 + 30 +0.0 + 0 +SEQEND + 5 +257A + 8 +DETAILS + 0 +POLYLINE + 5 +914 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +257B + 8 +DETAILS + 10 +10760.0 + 20 +4675.0 + 30 +0.0 + 0 +VERTEX + 5 +257C + 8 +DETAILS + 10 +10760.0 + 20 +4635.0 + 30 +0.0 + 0 +SEQEND + 5 +257D + 8 +DETAILS + 0 +POLYLINE + 5 +918 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +257E + 8 +DETAILS + 10 +10695.0 + 20 +4615.0 + 30 +0.0 + 0 +VERTEX + 5 +257F + 8 +DETAILS + 10 +10695.0 + 20 +4590.0 + 30 +0.0 + 0 +SEQEND + 5 +2580 + 8 +DETAILS + 0 +POLYLINE + 5 +91C + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2581 + 8 +DETAILS + 10 +10760.0 + 20 +4615.0 + 30 +0.0 + 0 +VERTEX + 5 +2582 + 8 +DETAILS + 10 +10760.0 + 20 +4590.0 + 30 +0.0 + 0 +SEQEND + 5 +2583 + 8 +DETAILS + 0 +POLYLINE + 5 +920 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2584 + 8 +DETAILS + 10 +10695.0 + 20 +4725.0 + 30 +0.0 + 0 +VERTEX + 5 +2585 + 8 +DETAILS + 10 +10695.0 + 20 +4690.0 + 30 +0.0 + 0 +SEQEND + 5 +2586 + 8 +DETAILS + 0 +POLYLINE + 5 +924 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2587 + 8 +DETAILS + 10 +10760.0 + 20 +4725.0 + 30 +0.0 + 0 +VERTEX + 5 +2588 + 8 +DETAILS + 10 +10760.0 + 20 +4690.0 + 30 +0.0 + 0 +SEQEND + 5 +2589 + 8 +DETAILS + 0 +POLYLINE + 5 +928 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +258A + 8 +DETAILS + 10 +10455.0 + 20 +4835.0 + 30 +0.0 + 0 +VERTEX + 5 +258B + 8 +DETAILS + 10 +10475.0 + 20 +4835.0 + 30 +0.0 + 0 +SEQEND + 5 +258C + 8 +DETAILS + 0 +POLYLINE + 5 +92C + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +258D + 8 +DETAILS + 10 +10495.0 + 20 +4835.0 + 30 +0.0 + 0 +VERTEX + 5 +258E + 8 +DETAILS + 10 +10510.0 + 20 +4835.0 + 30 +0.0 + 0 +SEQEND + 5 +258F + 8 +DETAILS + 0 +POLYLINE + 5 +930 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2590 + 8 +DETAILS + 10 +10525.0 + 20 +4835.0 + 30 +0.0 + 0 +VERTEX + 5 +2591 + 8 +DETAILS + 10 +10540.0 + 20 +4835.0 + 30 +0.0 + 0 +SEQEND + 5 +2592 + 8 +DETAILS + 0 +POLYLINE + 5 +934 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2593 + 8 +DETAILS + 10 +10495.0 + 20 +4765.0 + 30 +0.0 + 0 +VERTEX + 5 +2594 + 8 +DETAILS + 10 +10510.0 + 20 +4765.0 + 30 +0.0 + 0 +SEQEND + 5 +2595 + 8 +DETAILS + 0 +POLYLINE + 5 +938 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2596 + 8 +DETAILS + 10 +10525.0 + 20 +4765.0 + 30 +0.0 + 0 +VERTEX + 5 +2597 + 8 +DETAILS + 10 +10540.0 + 20 +4765.0 + 30 +0.0 + 0 +SEQEND + 5 +2598 + 8 +DETAILS + 0 +POLYLINE + 5 +93C + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2599 + 8 +DETAILS + 10 +10455.0 + 20 +4765.0 + 30 +0.0 + 0 +VERTEX + 5 +259A + 8 +DETAILS + 10 +10475.0 + 20 +4765.0 + 30 +0.0 + 0 +SEQEND + 5 +259B + 8 +DETAILS + 0 +POLYLINE + 5 +940 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +259C + 8 +DETAILS + 10 +10660.0 + 20 +4825.0 + 30 +0.0 + 0 +VERTEX + 5 +259D + 8 +DETAILS + 10 +10635.0 + 20 +4825.0 + 30 +0.0 + 0 +SEQEND + 5 +259E + 8 +DETAILS + 0 +POLYLINE + 5 +944 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +259F + 8 +DETAILS + 10 +10620.0 + 20 +4825.0 + 30 +0.0 + 0 +VERTEX + 5 +25A0 + 8 +DETAILS + 10 +10605.0 + 20 +4825.0 + 30 +0.0 + 0 +SEQEND + 5 +25A1 + 8 +DETAILS + 0 +POLYLINE + 5 +948 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +25A2 + 8 +DETAILS + 10 +10590.0 + 20 +4825.0 + 30 +0.0 + 0 +VERTEX + 5 +25A3 + 8 +DETAILS + 10 +10575.0 + 20 +4825.0 + 30 +0.0 + 0 +SEQEND + 5 +25A4 + 8 +DETAILS + 0 +POLYLINE + 5 +94C + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +25A5 + 8 +DETAILS + 10 +10590.0 + 20 +4750.0 + 30 +0.0 + 0 +VERTEX + 5 +25A6 + 8 +DETAILS + 10 +10575.0 + 20 +4750.0 + 30 +0.0 + 0 +SEQEND + 5 +25A7 + 8 +DETAILS + 0 +POLYLINE + 5 +950 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +25A8 + 8 +DETAILS + 10 +10620.0 + 20 +4750.0 + 30 +0.0 + 0 +VERTEX + 5 +25A9 + 8 +DETAILS + 10 +10605.0 + 20 +4750.0 + 30 +0.0 + 0 +SEQEND + 5 +25AA + 8 +DETAILS + 0 +POLYLINE + 5 +954 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +25AB + 8 +DETAILS + 10 +10660.0 + 20 +4750.0 + 30 +0.0 + 0 +VERTEX + 5 +25AC + 8 +DETAILS + 10 +10635.0 + 20 +4750.0 + 30 +0.0 + 0 +SEQEND + 5 +25AD + 8 +DETAILS + 0 +POLYLINE + 5 +958 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +25AE + 8 +DETAILS + 10 +10395.0 + 20 +9990.0 + 30 +0.0 + 0 +VERTEX + 5 +25AF + 8 +DETAILS + 10 +10415.0 + 20 +9950.0 + 30 +0.0 + 0 +SEQEND + 5 +25B0 + 8 +DETAILS + 0 +POLYLINE + 5 +95C + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +25B1 + 8 +DETAILS + 10 +10425.0 + 20 +9930.0 + 30 +0.0 + 0 +VERTEX + 5 +25B2 + 8 +DETAILS + 10 +10445.0 + 20 +9890.0 + 30 +0.0 + 0 +SEQEND + 5 +25B3 + 8 +DETAILS + 0 +POLYLINE + 5 +960 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +25B4 + 8 +DETAILS + 10 +10460.0 + 20 +9865.0 + 30 +0.0 + 0 +VERTEX + 5 +25B5 + 8 +DETAILS + 10 +10480.0 + 20 +9825.0 + 30 +0.0 + 0 +SEQEND + 5 +25B6 + 8 +DETAILS + 0 +POLYLINE + 5 +964 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +25B7 + 8 +DETAILS + 10 +10490.0 + 20 +9805.0 + 30 +0.0 + 0 +VERTEX + 5 +25B8 + 8 +DETAILS + 10 +10510.0 + 20 +9765.0 + 30 +0.0 + 0 +SEQEND + 5 +25B9 + 8 +DETAILS + 0 +POLYLINE + 5 +968 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +25BA + 8 +DETAILS + 10 +10377.671942 + 20 +9982.673146 + 30 +0.0 + 0 +VERTEX + 5 +25BB + 8 +DETAILS + 10 +10408.95109 + 20 +10001.495886 + 30 +0.0 + 0 +SEQEND + 5 +25BC + 8 +DETAILS + 0 +POLYLINE + 5 +96C + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +25BD + 8 +DETAILS + 10 +10737.328058 + 20 +9982.673146 + 30 +0.0 + 0 +VERTEX + 5 +25BE + 8 +DETAILS + 10 +10706.04891 + 20 +10001.495886 + 30 +0.0 + 0 +SEQEND + 5 +25BF + 8 +DETAILS + 0 +POLYLINE + 5 +970 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +25C0 + 8 +DETAILS + 10 +10720.0 + 20 +9990.0 + 30 +0.0 + 0 +VERTEX + 5 +25C1 + 8 +DETAILS + 10 +10700.0 + 20 +9950.0 + 30 +0.0 + 0 +SEQEND + 5 +25C2 + 8 +DETAILS + 0 +POLYLINE + 5 +974 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +25C3 + 8 +DETAILS + 10 +10690.0 + 20 +9930.0 + 30 +0.0 + 0 +VERTEX + 5 +25C4 + 8 +DETAILS + 10 +10670.0 + 20 +9890.0 + 30 +0.0 + 0 +SEQEND + 5 +25C5 + 8 +DETAILS + 0 +POLYLINE + 5 +978 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +25C6 + 8 +DETAILS + 10 +10655.0 + 20 +9865.0 + 30 +0.0 + 0 +VERTEX + 5 +25C7 + 8 +DETAILS + 10 +10635.0 + 20 +9825.0 + 30 +0.0 + 0 +SEQEND + 5 +25C8 + 8 +DETAILS + 0 +POLYLINE + 5 +97C + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +25C9 + 8 +DETAILS + 10 +10625.0 + 20 +9805.0 + 30 +0.0 + 0 +VERTEX + 5 +25CA + 8 +DETAILS + 10 +10605.0 + 20 +9765.0 + 30 +0.0 + 0 +SEQEND + 5 +25CB + 8 +DETAILS + 0 +POLYLINE + 5 +980 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +25CC + 8 +DETAILS + 10 +13989.481111 + 20 +7852.54707 + 30 +0.0 + 0 +VERTEX + 5 +25CD + 8 +DETAILS + 10 +13957.62352 + 20 +7794.171745 + 30 +0.0 + 0 +SEQEND + 5 +25CE + 8 +DETAILS + 0 +POLYLINE + 5 +984 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +25CF + 8 +DETAILS + 10 +13936.385098 + 20 +7758.792741 + 30 +0.0 + 0 +VERTEX + 5 +25D0 + 8 +DETAILS + 10 +13904.527507 + 20 +7700.417416 + 30 +0.0 + 0 +SEQEND + 5 +25D1 + 8 +DETAILS + 0 +POLYLINE + 5 +988 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +25D2 + 8 +DETAILS + 10 +13893.908339 + 20 +7677.421095 + 30 +0.0 + 0 +VERTEX + 5 +25D3 + 8 +DETAILS + 10 +13862.050749 + 20 +7619.04577 + 30 +0.0 + 0 +SEQEND + 5 +25D4 + 8 +DETAILS + 0 +POLYLINE + 5 +98C + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +25D5 + 8 +DETAILS + 10 +13982.00818 + 20 +7864.830542 + 30 +0.0 + 0 +VERTEX + 5 +25D6 + 8 +DETAILS + 10 +14015.039986 + 20 +7863.115472 + 30 +0.0 + 0 +SEQEND + 5 +25D7 + 8 +DETAILS + 0 +POLYLINE + 5 +990 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +991 + 8 +HOLZ + 10 +4357.123981 + 20 +5770.33177 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +992 + 8 +HOLZ + 10 +4357.123981 + 20 +5770.33177 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +993 + 8 +HOLZ + 10 +4356.457573 + 20 +5778.229812 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +994 + 8 +HOLZ + 10 +4356.31141 + 20 +5784.905913 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +995 + 8 +HOLZ + 10 +4356.611169 + 20 +5790.504923 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +996 + 8 +HOLZ + 10 +4357.28253 + 20 +5795.171693 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +997 + 8 +HOLZ + 10 +4358.251173 + 20 +5799.051073 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +998 + 8 +HOLZ + 10 +4359.442778 + 20 +5802.287913 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +999 + 8 +HOLZ + 10 +4360.783023 + 20 +5805.027063 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +99A + 8 +HOLZ + 10 +4362.197588 + 20 +5807.413373 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +99B + 8 +HOLZ + 10 +4363.627635 + 20 +5809.571267 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +99C + 8 +HOLZ + 10 +4365.076263 + 20 +5811.543455 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +99D + 8 +HOLZ + 10 +4366.56205 + 20 +5813.352223 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +99E + 8 +HOLZ + 10 +4368.103578 + 20 +5815.019856 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +99F + 8 +HOLZ + 10 +4369.719427 + 20 +5816.568637 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9A0 + 8 +HOLZ + 10 +4371.428178 + 20 +5818.020852 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9A1 + 8 +HOLZ + 10 +4373.248411 + 20 +5819.398785 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9A2 + 8 +HOLZ + 10 +4375.198705 + 20 +5820.724721 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9A3 + 8 +HOLZ + 10 +4377.287733 + 20 +5822.014136 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9A4 + 8 +HOLZ + 10 +4379.484527 + 20 +5823.255266 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9A5 + 8 +HOLZ + 10 +4381.748211 + 20 +5824.429542 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9A6 + 8 +HOLZ + 10 +4384.037906 + 20 +5825.518393 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9A7 + 8 +HOLZ + 10 +4386.312738 + 20 +5826.503247 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9A8 + 8 +HOLZ + 10 +4388.531828 + 20 +5827.365534 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9A9 + 8 +HOLZ + 10 +4390.654301 + 20 +5828.086683 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9AA + 8 +HOLZ + 10 +4392.639279 + 20 +5828.648122 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9AB + 8 +HOLZ + 10 +4354.587174 + 20 +5793.151224 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +9AC + 8 +HOLZ + 10 +4362.197595 + 20 +5809.631928 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +9AD + 8 +HOLZ + 10 +4373.613183 + 20 +5821.041655 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +9AE + 8 +HOLZ + 10 +4387.565665 + 20 +5827.380404 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +9AF + 8 +HOLZ + 10 +4392.639279 + 20 +5828.648122 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +9B0 + 8 +HOLZ + 0 +POLYLINE + 5 +9B1 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +9B2 + 8 +HOLZ + 10 +4321.608683 + 20 +5771.599542 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +9B3 + 8 +HOLZ + 10 +4321.608683 + 20 +5771.599542 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9B4 + 8 +HOLZ + 10 +4321.807491 + 20 +5779.583626 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9B5 + 8 +HOLZ + 10 +4322.366755 + 20 +5786.505474 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9B6 + 8 +HOLZ + 10 +4323.230735 + 20 +5792.491368 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9B7 + 8 +HOLZ + 10 +4324.343689 + 20 +5797.667585 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9B8 + 8 +HOLZ + 10 +4325.649876 + 20 +5802.160408 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9B9 + 8 +HOLZ + 10 +4327.093557 + 20 +5806.096115 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9BA + 8 +HOLZ + 10 +4328.618989 + 20 +5809.600987 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9BB + 8 +HOLZ + 10 +4330.170431 + 20 +5812.801303 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9BC + 8 +HOLZ + 10 +4331.703293 + 20 +5815.804361 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9BD + 8 +HOLZ + 10 +4333.217572 + 20 +5818.641523 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9BE + 8 +HOLZ + 10 +4334.724419 + 20 +5821.325171 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9BF + 8 +HOLZ + 10 +4336.234981 + 20 +5823.867683 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9C0 + 8 +HOLZ + 10 +4337.760406 + 20 +5826.28144 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9C1 + 8 +HOLZ + 10 +4339.311844 + 20 +5828.578822 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9C2 + 8 +HOLZ + 10 +4340.900441 + 20 +5830.772209 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9C3 + 8 +HOLZ + 10 +4342.537348 + 20 +5832.873982 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9C4 + 8 +HOLZ + 10 +4344.232472 + 20 +5834.896519 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9C5 + 8 +HOLZ + 10 +4345.99077 + 20 +5836.852202 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9C6 + 8 +HOLZ + 10 +4347.815956 + 20 +5838.753411 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9C7 + 8 +HOLZ + 10 +4349.711747 + 20 +5840.612526 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9C8 + 8 +HOLZ + 10 +4351.681859 + 20 +5842.441927 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9C9 + 8 +HOLZ + 10 +4353.730006 + 20 +5844.253996 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9CA + 8 +HOLZ + 10 +4355.859905 + 20 +5846.061112 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9CB + 8 +HOLZ + 10 +4358.075272 + 20 +5847.875655 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9CC + 8 +HOLZ + 10 +4360.398404 + 20 +5849.707531 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9CD + 8 +HOLZ + 10 +4362.925915 + 20 +5851.556739 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9CE + 8 +HOLZ + 10 +4365.773005 + 20 +5853.420802 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9CF + 8 +HOLZ + 10 +4369.05487 + 20 +5855.297246 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9D0 + 8 +HOLZ + 10 +4372.886707 + 20 +5857.183594 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9D1 + 8 +HOLZ + 10 +4377.383714 + 20 +5859.07737 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9D2 + 8 +HOLZ + 10 +4382.661088 + 20 +5860.976098 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9D3 + 8 +HOLZ + 10 +4388.834025 + 20 +5862.877302 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9D4 + 8 +HOLZ + 10 +4321.608683 + 20 +5794.418995 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +9D5 + 8 +HOLZ + 10 +4330.48755 + 20 +5814.702906 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +9D6 + 8 +HOLZ + 10 +4341.903139 + 20 +5833.719153 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +9D7 + 8 +HOLZ + 10 +4357.123981 + 20 +5847.664369 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +9D8 + 8 +HOLZ + 10 +4371.076376 + 20 +5857.806324 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +9D9 + 8 +HOLZ + 10 +4388.834025 + 20 +5862.877302 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +9DA + 8 +HOLZ + 0 +POLYLINE + 5 +9DB + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +9DC + 8 +HOLZ + 10 +4279.75141 + 20 +5772.867259 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +9DD + 8 +HOLZ + 10 +4279.75141 + 20 +5772.867259 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9DE + 8 +HOLZ + 10 +4282.551229 + 20 +5787.268278 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9DF + 8 +HOLZ + 10 +4285.264341 + 20 +5799.293511 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9E0 + 8 +HOLZ + 10 +4287.922951 + 20 +5809.241324 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9E1 + 8 +HOLZ + 10 +4290.559265 + 20 +5817.410082 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9E2 + 8 +HOLZ + 10 +4293.205488 + 20 +5824.098151 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9E3 + 8 +HOLZ + 10 +4295.893827 + 20 +5829.603898 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9E4 + 8 +HOLZ + 10 +4298.656485 + 20 +5834.225689 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9E5 + 8 +HOLZ + 10 +4301.52567 + 20 +5838.261888 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9E6 + 8 +HOLZ + 10 +4304.519136 + 20 +5841.966294 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9E7 + 8 +HOLZ + 10 +4307.596831 + 20 +5845.414426 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9E8 + 8 +HOLZ + 10 +4310.704254 + 20 +5848.637235 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9E9 + 8 +HOLZ + 10 +4313.786903 + 20 +5851.665672 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9EA + 8 +HOLZ + 10 +4316.790277 + 20 +5854.530688 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9EB + 8 +HOLZ + 10 +4319.659874 + 20 +5857.263234 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9EC + 8 +HOLZ + 10 +4322.341191 + 20 +5859.894261 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9ED + 8 +HOLZ + 10 +4324.779727 + 20 +5862.454721 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9EE + 8 +HOLZ + 10 +4326.938735 + 20 +5864.96669 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9EF + 8 +HOLZ + 10 +4328.852485 + 20 +5867.416758 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9F0 + 8 +HOLZ + 10 +4330.573002 + 20 +5869.78264 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9F1 + 8 +HOLZ + 10 +4332.152309 + 20 +5872.042052 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9F2 + 8 +HOLZ + 10 +4333.642432 + 20 +5874.172708 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9F3 + 8 +HOLZ + 10 +4335.095396 + 20 +5876.152325 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9F4 + 8 +HOLZ + 10 +4336.563225 + 20 +5877.958618 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9F5 + 8 +HOLZ + 10 +4338.097943 + 20 +5879.569302 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9F6 + 8 +HOLZ + 10 +4339.742491 + 20 +5880.973235 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9F7 + 8 +HOLZ + 10 +4341.503476 + 20 +5882.203844 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9F8 + 8 +HOLZ + 10 +4343.37842 + 20 +5883.305698 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9F9 + 8 +HOLZ + 10 +4345.364844 + 20 +5884.323366 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9FA + 8 +HOLZ + 10 +4347.460271 + 20 +5885.301417 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9FB + 8 +HOLZ + 10 +4349.662224 + 20 +5886.28442 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9FC + 8 +HOLZ + 10 +4351.968225 + 20 +5887.316944 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9FD + 8 +HOLZ + 10 +4354.375795 + 20 +5888.443558 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9FE + 8 +HOLZ + 10 +4356.878947 + 20 +5889.700784 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9FF + 8 +HOLZ + 10 +4359.457658 + 20 +5891.092955 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A00 + 8 +HOLZ + 10 +4362.088392 + 20 +5892.616357 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A01 + 8 +HOLZ + 10 +4364.747615 + 20 +5894.267276 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A02 + 8 +HOLZ + 10 +4367.411793 + 20 +5896.041999 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A03 + 8 +HOLZ + 10 +4370.057391 + 20 +5897.93681 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A04 + 8 +HOLZ + 10 +4372.660876 + 20 +5899.947997 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A05 + 8 +HOLZ + 10 +4375.198713 + 20 +5902.071844 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A06 + 8 +HOLZ + 10 +4377.651909 + 20 +5904.30175 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A07 + 8 +HOLZ + 10 +4380.019638 + 20 +5906.619555 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A08 + 8 +HOLZ + 10 +4382.305616 + 20 +5909.004214 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A09 + 8 +HOLZ + 10 +4384.513559 + 20 +5911.434678 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A0A + 8 +HOLZ + 10 +4386.64718 + 20 +5913.889901 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A0B + 8 +HOLZ + 10 +4388.710197 + 20 +5916.348836 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A0C + 8 +HOLZ + 10 +4390.706325 + 20 +5918.790436 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A0D + 8 +HOLZ + 10 +4392.639279 + 20 +5921.193653 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A0E + 8 +HOLZ + 10 +4287.361831 + 20 +5814.702906 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A0F + 8 +HOLZ + 10 +4300.045866 + 20 +5841.32562 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A10 + 8 +HOLZ + 10 +4327.950743 + 20 +5862.877302 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A11 + 8 +HOLZ + 10 +4336.829525 + 20 +5881.893495 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A12 + 8 +HOLZ + 10 +4353.318814 + 20 +5886.964527 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A13 + 8 +HOLZ + 10 +4376.14999 + 20 +5900.909743 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A14 + 8 +HOLZ + 10 +4387.565665 + 20 +5914.854958 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A15 + 8 +HOLZ + 10 +4392.639279 + 20 +5921.193653 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +A16 + 8 +HOLZ + 0 +POLYLINE + 5 +A17 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +A18 + 8 +HOLZ + 10 +4258.188507 + 20 +5772.867259 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A19 + 8 +HOLZ + 10 +4258.188507 + 20 +5772.867259 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A1A + 8 +HOLZ + 10 +4260.622519 + 20 +5790.36708 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A1B + 8 +HOLZ + 10 +4263.153143 + 20 +5805.067707 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A1C + 8 +HOLZ + 10 +4265.758084 + 20 +5817.319501 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A1D + 8 +HOLZ + 10 +4268.415048 + 20 +5827.472828 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A1E + 8 +HOLZ + 10 +4271.101737 + 20 +5835.87805 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A1F + 8 +HOLZ + 10 +4273.795856 + 20 +5842.885532 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A20 + 8 +HOLZ + 10 +4276.475109 + 20 +5848.845638 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A21 + 8 +HOLZ + 10 +4279.117201 + 20 +5854.10873 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A22 + 8 +HOLZ + 10 +4281.703139 + 20 +5858.971524 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A23 + 8 +HOLZ + 10 +4284.227143 + 20 +5863.516144 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A24 + 8 +HOLZ + 10 +4286.686736 + 20 +5867.771063 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A25 + 8 +HOLZ + 10 +4289.07944 + 20 +5871.764757 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A26 + 8 +HOLZ + 10 +4291.402779 + 20 +5875.525701 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A27 + 8 +HOLZ + 10 +4293.654275 + 20 +5879.082368 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A28 + 8 +HOLZ + 10 +4295.831452 + 20 +5882.463234 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A29 + 8 +HOLZ + 10 +4297.931832 + 20 +5885.696774 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A2A + 8 +HOLZ + 10 +4299.95975 + 20 +5888.810842 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A2B + 8 +HOLZ + 10 +4301.946793 + 20 +5891.83082 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A2C + 8 +HOLZ + 10 +4303.93136 + 20 +5894.781467 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A2D + 8 +HOLZ + 10 +4305.951848 + 20 +5897.687546 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A2E + 8 +HOLZ + 10 +4308.046657 + 20 +5900.573815 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A2F + 8 +HOLZ + 10 +4310.254184 + 20 +5903.465037 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A30 + 8 +HOLZ + 10 +4312.612829 + 20 +5906.385972 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A31 + 8 +HOLZ + 10 +4315.16099 + 20 +5909.361381 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A32 + 8 +HOLZ + 10 +4317.937066 + 20 +5912.422628 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A33 + 8 +HOLZ + 10 +4320.979455 + 20 +5915.627487 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A34 + 8 +HOLZ + 10 +4324.326558 + 20 +5919.040335 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A35 + 8 +HOLZ + 10 +4328.016774 + 20 +5922.72555 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A36 + 8 +HOLZ + 10 +4332.088502 + 20 +5926.747508 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A37 + 8 +HOLZ + 10 +4336.580141 + 20 +5931.170587 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A38 + 8 +HOLZ + 10 +4341.530092 + 20 +5936.059165 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A39 + 8 +HOLZ + 10 +4346.976753 + 20 +5941.477618 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A3A + 8 +HOLZ + 10 +4264.530568 + 20 +5823.577144 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A3B + 8 +HOLZ + 10 +4279.75141 + 20 +5857.806324 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A3C + 8 +HOLZ + 10 +4298.777419 + 20 +5886.964527 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A3D + 8 +HOLZ + 10 +4312.729901 + 20 +5908.516209 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A3E + 8 +HOLZ + 10 +4331.755911 + 20 +5926.264685 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A3F + 8 +HOLZ + 10 +4346.976753 + 20 +5941.477618 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +A40 + 8 +HOLZ + 0 +POLYLINE + 5 +A41 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +A42 + 8 +HOLZ + 10 +4226.478463 + 20 +5795.686713 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A43 + 8 +HOLZ + 10 +4226.478463 + 20 +5795.686713 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A44 + 8 +HOLZ + 10 +4232.3155 + 20 +5811.513541 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A45 + 8 +HOLZ + 10 +4237.500996 + 20 +5824.962104 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A46 + 8 +HOLZ + 10 +4242.096887 + 20 +5836.328293 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A47 + 8 +HOLZ + 10 +4246.165104 + 20 +5845.907998 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A48 + 8 +HOLZ + 10 +4249.767582 + 20 +5853.997108 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A49 + 8 +HOLZ + 10 +4252.966253 + 20 +5860.891515 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A4A + 8 +HOLZ + 10 +4255.82305 + 20 +5866.887108 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A4B + 8 +HOLZ + 10 +4258.399908 + 20 +5872.279778 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A4C + 8 +HOLZ + 10 +4260.759378 + 20 +5877.322702 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A4D + 8 +HOLZ + 10 +4262.966491 + 20 +5882.098211 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A4E + 8 +HOLZ + 10 +4265.086897 + 20 +5886.64592 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A4F + 8 +HOLZ + 10 +4267.186246 + 20 +5891.005449 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A50 + 8 +HOLZ + 10 +4269.330188 + 20 +5895.216414 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A51 + 8 +HOLZ + 10 +4271.584372 + 20 +5899.318432 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A52 + 8 +HOLZ + 10 +4274.014449 + 20 +5903.351121 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A53 + 8 +HOLZ + 10 +4276.686069 + 20 +5907.354099 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A54 + 8 +HOLZ + 10 +4279.658688 + 20 +5911.361411 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A55 + 8 +HOLZ + 10 +4282.966988 + 20 +5915.384819 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A56 + 8 +HOLZ + 10 +4286.639457 + 20 +5919.430512 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A57 + 8 +HOLZ + 10 +4290.704585 + 20 +5923.50468 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A58 + 8 +HOLZ + 10 +4295.19086 + 20 +5927.613513 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A59 + 8 +HOLZ + 10 +4300.126771 + 20 +5931.763201 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A5A + 8 +HOLZ + 10 +4305.540806 + 20 +5935.959934 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A5B + 8 +HOLZ + 10 +4311.461454 + 20 +5940.209901 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A5C + 8 +HOLZ + 10 +4242.967665 + 20 +5841.32562 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A5D + 8 +HOLZ + 10 +4260.725314 + 20 +5875.5548 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A5E + 8 +HOLZ + 10 +4273.409349 + 20 +5907.248438 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A5F + 8 +HOLZ + 10 +4294.972252 + 20 +5928.800174 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A60 + 8 +HOLZ + 10 +4311.461454 + 20 +5940.209901 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +A61 + 8 +HOLZ + 0 +POLYLINE + 5 +A62 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +A63 + 8 +HOLZ + 10 +4225.210016 + 20 +5890.767733 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A64 + 8 +HOLZ + 10 +4225.210016 + 20 +5890.767733 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A65 + 8 +HOLZ + 10 +4232.077232 + 20 +5899.131894 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A66 + 8 +HOLZ + 10 +4239.24173 + 20 +5907.050362 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A67 + 8 +HOLZ + 10 +4246.525141 + 20 +5914.433999 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A68 + 8 +HOLZ + 10 +4253.749095 + 20 +5921.193667 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A69 + 8 +HOLZ + 10 +4260.735224 + 20 +5927.240229 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A6A + 8 +HOLZ + 10 +4267.305157 + 20 +5932.484547 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A6B + 8 +HOLZ + 10 +4273.280527 + 20 +5936.837483 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A6C + 8 +HOLZ + 10 +4278.482963 + 20 +5940.209901 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A6D + 8 +HOLZ + 10 +4242.967665 + 20 +5913.587187 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A6E + 8 +HOLZ + 10 +4265.798928 + 20 +5932.60338 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A6F + 8 +HOLZ + 10 +4278.482963 + 20 +5940.209901 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +A70 + 8 +HOLZ + 0 +POLYLINE + 5 +A71 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +A72 + 8 +HOLZ + 10 +16866.072109 + 20 +5770.995143 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A73 + 8 +HOLZ + 10 +16866.072109 + 20 +5770.995143 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A74 + 8 +HOLZ + 10 +16867.405513 + 20 +5776.882084 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A75 + 8 +HOLZ + 10 +16869.438562 + 20 +5782.457385 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A76 + 8 +HOLZ + 10 +16872.140837 + 20 +5787.835059 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A77 + 8 +HOLZ + 10 +16875.48192 + 20 +5793.129122 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A78 + 8 +HOLZ + 10 +16879.431392 + 20 +5798.453589 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A79 + 8 +HOLZ + 10 +16883.958833 + 20 +5803.922473 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A7A + 8 +HOLZ + 10 +16889.033824 + 20 +5809.64979 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A7B + 8 +HOLZ + 10 +16894.625947 + 20 +5815.749553 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A7C + 8 +HOLZ + 10 +16868.667952 + 20 +5787.21052 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A7D + 8 +HOLZ + 10 +16879.05115 + 20 +5798.885574 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A7E + 8 +HOLZ + 10 +16894.625947 + 20 +5815.749553 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +A7F + 8 +HOLZ + 0 +POLYLINE + 5 +A80 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +A81 + 8 +HOLZ + 10 +16828.432995 + 20 +5772.292347 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A82 + 8 +HOLZ + 10 +16828.432995 + 20 +5772.292347 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A83 + 8 +HOLZ + 10 +16831.680166 + 20 +5783.30086 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A84 + 8 +HOLZ + 10 +16834.637721 + 20 +5792.620692 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A85 + 8 +HOLZ + 10 +16837.350654 + 20 +5800.4482 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A86 + 8 +HOLZ + 10 +16839.863961 + 20 +5806.979743 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A87 + 8 +HOLZ + 10 +16842.222637 + 20 +5812.411681 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A88 + 8 +HOLZ + 10 +16844.471677 + 20 +5816.940371 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A89 + 8 +HOLZ + 10 +16846.656076 + 20 +5820.762172 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A8A + 8 +HOLZ + 10 +16848.82083 + 20 +5824.073443 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A8B + 8 +HOLZ + 10 +16851.003963 + 20 +5827.044888 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A8C + 8 +HOLZ + 10 +16853.215615 + 20 +5829.744601 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A8D + 8 +HOLZ + 10 +16855.458953 + 20 +5832.215018 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A8E + 8 +HOLZ + 10 +16857.737147 + 20 +5834.49858 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A8F + 8 +HOLZ + 10 +16860.053365 + 20 +5836.637723 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A90 + 8 +HOLZ + 10 +16862.410776 + 20 +5838.674887 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A91 + 8 +HOLZ + 10 +16864.812547 + 20 +5840.652511 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A92 + 8 +HOLZ + 10 +16867.261849 + 20 +5842.613031 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A93 + 8 +HOLZ + 10 +16869.776741 + 20 +5844.590654 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A94 + 8 +HOLZ + 10 +16872.434857 + 20 +5846.586644 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A95 + 8 +HOLZ + 10 +16875.328724 + 20 +5848.594034 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A96 + 8 +HOLZ + 10 +16878.550869 + 20 +5850.605856 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A97 + 8 +HOLZ + 10 +16882.193816 + 20 +5852.615142 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A98 + 8 +HOLZ + 10 +16886.350093 + 20 +5854.614924 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A99 + 8 +HOLZ + 10 +16891.112227 + 20 +5856.598234 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A9A + 8 +HOLZ + 10 +16896.572742 + 20 +5858.558103 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A9B + 8 +HOLZ + 10 +16837.518271 + 20 +5804.074499 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A9C + 8 +HOLZ + 10 +16848.55043 + 20 +5827.424607 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A9D + 8 +HOLZ + 10 +16866.72107 + 20 +5842.34278 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A9E + 8 +HOLZ + 10 +16880.997945 + 20 +5853.369233 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A9F + 8 +HOLZ + 10 +16896.572742 + 20 +5858.558103 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +AA0 + 8 +HOLZ + 0 +POLYLINE + 5 +AA1 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +AA2 + 8 +HOLZ + 10 +16790.79388 + 20 +5772.292347 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +AA3 + 8 +HOLZ + 10 +16790.79388 + 20 +5772.292347 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AA4 + 8 +HOLZ + 10 +16796.154895 + 20 +5786.184785 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AA5 + 8 +HOLZ + 10 +16801.072292 + 20 +5797.449826 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AA6 + 8 +HOLZ + 10 +16805.589166 + 20 +5806.439648 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AA7 + 8 +HOLZ + 10 +16809.74861 + 20 +5813.506429 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AA8 + 8 +HOLZ + 10 +16813.593721 + 20 +5819.002345 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AA9 + 8 +HOLZ + 10 +16817.167592 + 20 +5823.279574 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AAA + 8 +HOLZ + 10 +16820.513318 + 20 +5826.690294 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AAB + 8 +HOLZ + 10 +16823.673993 + 20 +5829.586682 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AAC + 8 +HOLZ + 10 +16826.684684 + 20 +5832.266865 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AAD + 8 +HOLZ + 10 +16829.548349 + 20 +5834.812763 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AAE + 8 +HOLZ + 10 +16832.259918 + 20 +5837.252248 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AAF + 8 +HOLZ + 10 +16834.814319 + 20 +5839.613189 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AB0 + 8 +HOLZ + 10 +16837.206482 + 20 +5841.923456 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AB1 + 8 +HOLZ + 10 +16839.431338 + 20 +5844.21092 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AB2 + 8 +HOLZ + 10 +16841.483816 + 20 +5846.503451 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AB3 + 8 +HOLZ + 10 +16843.358845 + 20 +5848.828919 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AB4 + 8 +HOLZ + 10 +16845.066249 + 20 +5851.21171 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AB5 + 8 +HOLZ + 10 +16846.675421 + 20 +5853.662277 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AB6 + 8 +HOLZ + 10 +16848.27065 + 20 +5856.187586 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AB7 + 8 +HOLZ + 10 +16849.936223 + 20 +5858.794605 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AB8 + 8 +HOLZ + 10 +16851.756429 + 20 +5861.490302 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AB9 + 8 +HOLZ + 10 +16853.815554 + 20 +5864.281645 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +ABA + 8 +HOLZ + 10 +16856.197887 + 20 +5867.175602 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +ABB + 8 +HOLZ + 10 +16858.987715 + 20 +5870.179139 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +ABC + 8 +HOLZ + 10 +16862.241864 + 20 +5873.30767 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +ABD + 8 +HOLZ + 10 +16865.907312 + 20 +5876.610391 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +ABE + 8 +HOLZ + 10 +16869.903573 + 20 +5880.144942 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +ABF + 8 +HOLZ + 10 +16874.150162 + 20 +5883.968963 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AC0 + 8 +HOLZ + 10 +16878.566594 + 20 +5888.140096 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AC1 + 8 +HOLZ + 10 +16883.072385 + 20 +5892.71598 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AC2 + 8 +HOLZ + 10 +16887.58705 + 20 +5897.754257 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AC3 + 8 +HOLZ + 10 +16892.030104 + 20 +5903.312568 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AC4 + 8 +HOLZ + 10 +16805.719716 + 20 +5813.155091 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +AC5 + 8 +HOLZ + 10 +16825.188191 + 20 +5831.316328 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +AC6 + 8 +HOLZ + 10 +16845.305713 + 20 +5848.180308 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +AC7 + 8 +HOLZ + 10 +16853.742029 + 20 +5868.935953 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +AC8 + 8 +HOLZ + 10 +16880.348985 + 20 +5887.745793 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +AC9 + 8 +HOLZ + 10 +16892.030104 + 20 +5903.312568 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +ACA + 8 +HOLZ + 0 +POLYLINE + 5 +ACB + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +ACC + 8 +HOLZ + 10 +16766.782681 + 20 +5772.292347 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +ACD + 8 +HOLZ + 10 +16766.782681 + 20 +5772.292347 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +ACE + 8 +HOLZ + 10 +16771.385228 + 20 +5793.065541 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +ACF + 8 +HOLZ + 10 +16775.921229 + 20 +5809.565734 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AD0 + 8 +HOLZ + 10 +16780.354562 + 20 +5822.384535 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AD1 + 8 +HOLZ + 10 +16784.649103 + 20 +5832.113549 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AD2 + 8 +HOLZ + 10 +16788.768731 + 20 +5839.344384 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AD3 + 8 +HOLZ + 10 +16792.677323 + 20 +5844.668647 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AD4 + 8 +HOLZ + 10 +16796.338756 + 20 +5848.677944 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AD5 + 8 +HOLZ + 10 +16799.716909 + 20 +5851.963883 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AD6 + 8 +HOLZ + 10 +16802.791925 + 20 +5855.022847 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AD7 + 8 +HOLZ + 10 +16805.609011 + 20 +5857.970329 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AD8 + 8 +HOLZ + 10 +16808.229638 + 20 +5860.826599 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AD9 + 8 +HOLZ + 10 +16810.71528 + 20 +5863.611925 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +ADA + 8 +HOLZ + 10 +16813.127408 + 20 +5866.346578 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +ADB + 8 +HOLZ + 10 +16815.527495 + 20 +5869.050827 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +ADC + 8 +HOLZ + 10 +16817.977014 + 20 +5871.74494 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +ADD + 8 +HOLZ + 10 +16820.537436 + 20 +5874.449188 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +ADE + 8 +HOLZ + 10 +16823.256926 + 20 +5877.17814 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +ADF + 8 +HOLZ + 10 +16826.130414 + 20 +5879.92356 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AE0 + 8 +HOLZ + 10 +16829.13952 + 20 +5882.671515 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AE1 + 8 +HOLZ + 10 +16832.265868 + 20 +5885.408068 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AE2 + 8 +HOLZ + 10 +16835.491078 + 20 +5888.119284 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AE3 + 8 +HOLZ + 10 +16838.796772 + 20 +5890.791229 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AE4 + 8 +HOLZ + 10 +16842.164572 + 20 +5893.409967 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AE5 + 8 +HOLZ + 10 +16845.576099 + 20 +5895.961564 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AE6 + 8 +HOLZ + 10 +16849.030085 + 20 +5898.490568 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AE7 + 8 +HOLZ + 10 +16852.593709 + 20 +5901.275472 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AE8 + 8 +HOLZ + 10 +16856.351256 + 20 +5904.653252 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AE9 + 8 +HOLZ + 10 +16860.387017 + 20 +5908.960883 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AEA + 8 +HOLZ + 10 +16864.785278 + 20 +5914.535343 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AEB + 8 +HOLZ + 10 +16869.630328 + 20 +5921.713606 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AEC + 8 +HOLZ + 10 +16875.006454 + 20 +5930.83265 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AED + 8 +HOLZ + 10 +16880.997945 + 20 +5942.229451 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AEE + 8 +HOLZ + 10 +16779.112761 + 20 +5833.910737 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +AEF + 8 +HOLZ + 10 +16803.123874 + 20 +5853.369233 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +AF0 + 8 +HOLZ + 10 +16818.698757 + 20 +5874.124878 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +AF1 + 8 +HOLZ + 10 +16845.305713 + 20 +5896.826385 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +AF2 + 8 +HOLZ + 10 +16864.125227 + 20 +5908.501439 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +AF3 + 8 +HOLZ + 10 +16880.997945 + 20 +5942.229451 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +AF4 + 8 +HOLZ + 0 +POLYLINE + 5 +AF5 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +AF6 + 8 +HOLZ + 10 +16733.037244 + 20 +5772.292347 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +AF7 + 8 +HOLZ + 10 +16733.037244 + 20 +5772.292347 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AF8 + 8 +HOLZ + 10 +16737.741193 + 20 +5791.253255 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AF9 + 8 +HOLZ + 10 +16742.135239 + 20 +5806.195155 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AFA + 8 +HOLZ + 10 +16746.244099 + 20 +5817.690019 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AFB + 8 +HOLZ + 10 +16750.092488 + 20 +5826.30982 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AFC + 8 +HOLZ + 10 +16753.705124 + 20 +5832.62653 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AFD + 8 +HOLZ + 10 +16757.106723 + 20 +5837.212121 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AFE + 8 +HOLZ + 10 +16760.322003 + 20 +5840.638567 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AFF + 8 +HOLZ + 10 +16763.37568 + 20 +5843.477839 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B00 + 8 +HOLZ + 10 +16766.291626 + 20 +5846.213865 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B01 + 8 +HOLZ + 10 +16769.090331 + 20 +5848.978395 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B02 + 8 +HOLZ + 10 +16771.791442 + 20 +5851.815135 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B03 + 8 +HOLZ + 10 +16774.414603 + 20 +5854.767789 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B04 + 8 +HOLZ + 10 +16776.97946 + 20 +5857.880064 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B05 + 8 +HOLZ + 10 +16779.505659 + 20 +5861.195664 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B06 + 8 +HOLZ + 10 +16782.012846 + 20 +5864.758295 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B07 + 8 +HOLZ + 10 +16784.520666 + 20 +5868.611661 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B08 + 8 +HOLZ + 10 +16787.050982 + 20 +5872.77635 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B09 + 8 +HOLZ + 10 +16789.634532 + 20 +5877.180468 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B0A + 8 +HOLZ + 10 +16792.30427 + 20 +5881.729004 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B0B + 8 +HOLZ + 10 +16795.09315 + 20 +5886.326946 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B0C + 8 +HOLZ + 10 +16798.034127 + 20 +5890.879283 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B0D + 8 +HOLZ + 10 +16801.160157 + 20 +5895.291002 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B0E + 8 +HOLZ + 10 +16804.504192 + 20 +5899.467092 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B0F + 8 +HOLZ + 10 +16808.099189 + 20 +5903.312541 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B10 + 8 +HOLZ + 10 +16811.964158 + 20 +5906.793778 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B11 + 8 +HOLZ + 10 +16816.062345 + 20 +5910.122997 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B12 + 8 +HOLZ + 10 +16820.343049 + 20 +5913.573832 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B13 + 8 +HOLZ + 10 +16824.755571 + 20 +5917.419917 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B14 + 8 +HOLZ + 10 +16829.249214 + 20 +5921.934887 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B15 + 8 +HOLZ + 10 +16833.773277 + 20 +5927.392377 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B16 + 8 +HOLZ + 10 +16838.277062 + 20 +5934.06602 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B17 + 8 +HOLZ + 10 +16842.70987 + 20 +5942.229451 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B18 + 8 +HOLZ + 10 +16746.016285 + 20 +5828.721866 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B19 + 8 +HOLZ + 10 +16764.835799 + 20 +5843.639985 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B1A + 8 +HOLZ + 10 +16784.30436 + 20 +5865.044287 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B1B + 8 +HOLZ + 10 +16805.070756 + 20 +5907.852837 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B1C + 8 +HOLZ + 10 +16831.028751 + 20 +5918.230687 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B1D + 8 +HOLZ + 10 +16842.70987 + 20 +5942.229451 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +B1E + 8 +HOLZ + 0 +POLYLINE + 5 +B1F + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +B20 + 8 +HOLZ + 10 +16722.005085 + 20 +5826.776005 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B21 + 8 +HOLZ + 10 +16722.005085 + 20 +5826.776005 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B22 + 8 +HOLZ + 10 +16727.794306 + 20 +5840.869336 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B23 + 8 +HOLZ + 10 +16733.032175 + 20 +5852.263693 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B24 + 8 +HOLZ + 10 +16737.775727 + 20 +5861.330891 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B25 + 8 +HOLZ + 10 +16742.081999 + 20 +5868.442743 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B26 + 8 +HOLZ + 10 +16746.008027 + 20 +5873.971063 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B27 + 8 +HOLZ + 10 +16749.610848 + 20 +5878.287663 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B28 + 8 +HOLZ + 10 +16752.947496 + 20 +5881.764358 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B29 + 8 +HOLZ + 10 +16756.07501 + 20 +5884.772961 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B2A + 8 +HOLZ + 10 +16759.041128 + 20 +5887.624056 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B2B + 8 +HOLZ + 10 +16761.856415 + 20 +5890.383305 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B2C + 8 +HOLZ + 10 +16764.522139 + 20 +5893.055144 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B2D + 8 +HOLZ + 10 +16767.039565 + 20 +5895.644006 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B2E + 8 +HOLZ + 10 +16769.409964 + 20 +5898.154326 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B2F + 8 +HOLZ + 10 +16771.634602 + 20 +5900.590536 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B30 + 8 +HOLZ + 10 +16773.714746 + 20 +5902.957071 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B31 + 8 +HOLZ + 10 +16775.651666 + 20 +5905.258365 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B32 + 8 +HOLZ + 10 +16777.449797 + 20 +5907.501385 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B33 + 8 +HOLZ + 10 +16779.12625 + 20 +5909.703234 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B34 + 8 +HOLZ + 10 +16780.701305 + 20 +5911.883547 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B35 + 8 +HOLZ + 10 +16782.195242 + 20 +5914.061961 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B36 + 8 +HOLZ + 10 +16783.628341 + 20 +5916.25811 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B37 + 8 +HOLZ + 10 +16785.020881 + 20 +5918.491632 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B38 + 8 +HOLZ + 10 +16786.393142 + 20 +5920.782161 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B39 + 8 +HOLZ + 10 +16787.765404 + 20 +5923.149334 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B3A + 8 +HOLZ + 10 +16789.150342 + 20 +5925.605607 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B3B + 8 +HOLZ + 10 +16790.53021 + 20 +5928.134723 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B3C + 8 +HOLZ + 10 +16791.879657 + 20 +5930.713245 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B3D + 8 +HOLZ + 10 +16793.173333 + 20 +5933.317736 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B3E + 8 +HOLZ + 10 +16794.385888 + 20 +5935.924759 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B3F + 8 +HOLZ + 10 +16795.49197 + 20 +5938.510878 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B40 + 8 +HOLZ + 10 +16796.466229 + 20 +5941.052656 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B41 + 8 +HOLZ + 10 +16797.283314 + 20 +5943.526655 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B42 + 8 +HOLZ + 10 +16738.228843 + 20 +5868.287351 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B43 + 8 +HOLZ + 10 +16757.697404 + 20 +5885.799932 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B44 + 8 +HOLZ + 10 +16777.165879 + 20 +5905.906976 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B45 + 8 +HOLZ + 10 +16787.549077 + 20 +5922.122353 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B46 + 8 +HOLZ + 10 +16795.336518 + 20 +5937.040526 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B47 + 8 +HOLZ + 10 +16797.283314 + 20 +5943.526655 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +B48 + 8 +HOLZ + 0 +POLYLINE + 5 +B49 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +B4A + 8 +HOLZ + 10 +16722.654046 + 20 +5900.069449 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B4B + 8 +HOLZ + 10 +16722.654046 + 20 +5900.069449 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B4C + 8 +HOLZ + 10 +16728.646699 + 20 +5905.654889 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B4D + 8 +HOLZ + 10 +16734.091797 + 20 +5910.822274 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B4E + 8 +HOLZ + 10 +16739.171859 + 20 +5915.70082 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B4F + 8 +HOLZ + 10 +16744.069403 + 20 +5920.419746 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B50 + 8 +HOLZ + 10 +16748.966946 + 20 +5925.108268 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B51 + 8 +HOLZ + 10 +16754.047008 + 20 +5929.895605 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B52 + 8 +HOLZ + 10 +16759.492106 + 20 +5934.910973 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B53 + 8 +HOLZ + 10 +16765.484759 + 20 +5940.283591 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B54 + 8 +HOLZ + 10 +16739.526764 + 20 +5915.636224 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B55 + 8 +HOLZ + 10 +16748.612041 + 20 +5925.365418 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B56 + 8 +HOLZ + 10 +16765.484759 + 20 +5940.283591 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +B57 + 8 +HOLZ + 0 +POLYLINE + 5 +B58 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +B59 + 8 +HOLZ + 10 +16829.244152 + 20 +7370.464201 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B5A + 8 +HOLZ + 10 +16829.244152 + 20 +7370.464201 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B5B + 8 +HOLZ + 10 +16832.420803 + 20 +7376.959742 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B5C + 8 +HOLZ + 10 +16835.636867 + 20 +7382.621595 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B5D + 8 +HOLZ + 10 +16838.879206 + 20 +7387.508841 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B5E + 8 +HOLZ + 10 +16842.134683 + 20 +7391.680559 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B5F + 8 +HOLZ + 10 +16845.390159 + 20 +7395.195827 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B60 + 8 +HOLZ + 10 +16848.632498 + 20 +7398.113726 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B61 + 8 +HOLZ + 10 +16851.848562 + 20 +7400.493335 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B62 + 8 +HOLZ + 10 +16855.025213 + 20 +7402.393733 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B63 + 8 +HOLZ + 10 +16837.650993 + 20 +7388.94974 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B64 + 8 +HOLZ + 10 +16846.618372 + 20 +7397.912438 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B65 + 8 +HOLZ + 10 +16855.025213 + 20 +7402.393733 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +B66 + 8 +HOLZ + 0 +POLYLINE + 5 +B67 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +B68 + 8 +HOLZ + 10 +16804.584079 + 20 +7369.90406 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B69 + 8 +HOLZ + 10 +16804.584079 + 20 +7369.90406 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B6A + 8 +HOLZ + 10 +16806.171295 + 20 +7379.880933 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B6B + 8 +HOLZ + 10 +16807.981824 + 20 +7388.118229 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B6C + 8 +HOLZ + 10 +16810.002528 + 20 +7394.845701 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B6D + 8 +HOLZ + 10 +16812.220271 + 20 +7400.293106 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B6E + 8 +HOLZ + 10 +16814.621917 + 20 +7404.690199 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B6F + 8 +HOLZ + 10 +16817.194329 + 20 +7408.266736 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B70 + 8 +HOLZ + 10 +16819.924372 + 20 +7411.252472 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B71 + 8 +HOLZ + 10 +16822.798909 + 20 +7413.877164 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B72 + 8 +HOLZ + 10 +16825.815749 + 20 +7416.342119 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B73 + 8 +HOLZ + 10 +16829.01649 + 20 +7418.734866 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B74 + 8 +HOLZ + 10 +16832.453673 + 20 +7421.114484 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B75 + 8 +HOLZ + 10 +16836.179841 + 20 +7423.540054 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B76 + 8 +HOLZ + 10 +16840.247537 + 20 +7426.070657 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B77 + 8 +HOLZ + 10 +16844.709302 + 20 +7428.765371 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B78 + 8 +HOLZ + 10 +16849.61768 + 20 +7431.68328 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B79 + 8 +HOLZ + 10 +16855.025213 + 20 +7434.883461 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B7A + 8 +HOLZ + 10 +16808.507231 + 20 +7399.032721 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B7B + 8 +HOLZ + 10 +16821.397761 + 20 +7415.277585 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B7C + 8 +HOLZ + 10 +16839.892881 + 20 +7425.920763 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B7D + 8 +HOLZ + 10 +16855.025213 + 20 +7434.883461 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +B7E + 8 +HOLZ + 0 +POLYLINE + 5 +B7F + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +B80 + 8 +HOLZ + 10 +16779.923918 + 20 +7371.024397 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B81 + 8 +HOLZ + 10 +16779.923918 + 20 +7371.024397 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B82 + 8 +HOLZ + 10 +16783.073289 + 20 +7380.470013 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B83 + 8 +HOLZ + 10 +16785.835705 + 20 +7388.34946 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B84 + 8 +HOLZ + 10 +16788.270825 + 20 +7394.855842 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B85 + 8 +HOLZ + 10 +16790.438305 + 20 +7400.182263 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B86 + 8 +HOLZ + 10 +16792.397805 + 20 +7404.521827 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B87 + 8 +HOLZ + 10 +16794.208983 + 20 +7408.067639 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B88 + 8 +HOLZ + 10 +16795.931496 + 20 +7411.012803 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B89 + 8 +HOLZ + 10 +16797.625002 + 20 +7413.550423 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B8A + 8 +HOLZ + 10 +16799.34615 + 20 +7415.850081 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B8B + 8 +HOLZ + 10 +16801.139546 + 20 +7417.987268 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B8C + 8 +HOLZ + 10 +16803.046784 + 20 +7420.013952 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B8D + 8 +HOLZ + 10 +16805.109463 + 20 +7421.982103 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B8E + 8 +HOLZ + 10 +16807.369177 + 20 +7423.943689 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B8F + 8 +HOLZ + 10 +16809.867521 + 20 +7425.950679 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B90 + 8 +HOLZ + 10 +16812.646094 + 20 +7428.055042 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B91 + 8 +HOLZ + 10 +16815.746489 + 20 +7430.308746 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B92 + 8 +HOLZ + 10 +16819.204009 + 20 +7432.748717 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B93 + 8 +HOLZ + 10 +16823.028781 + 20 +7435.351706 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B94 + 8 +HOLZ + 10 +16827.224637 + 20 +7438.079421 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B95 + 8 +HOLZ + 10 +16831.795409 + 20 +7440.89357 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B96 + 8 +HOLZ + 10 +16836.74493 + 20 +7443.75586 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B97 + 8 +HOLZ + 10 +16842.077033 + 20 +7446.628001 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B98 + 8 +HOLZ + 10 +16847.79555 + 20 +7449.471699 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B99 + 8 +HOLZ + 10 +16853.904312 + 20 +7452.248662 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B9A + 8 +HOLZ + 10 +16788.89121 + 20 +7398.47258 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B9B + 8 +HOLZ + 10 +16797.298051 + 20 +7415.837781 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B9C + 8 +HOLZ + 10 +16811.870019 + 20 +7428.161437 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B9D + 8 +HOLZ + 10 +16837.090543 + 20 +7444.966443 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B9E + 8 +HOLZ + 10 +16853.904312 + 20 +7452.248662 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +B9F + 8 +HOLZ + 0 +POLYLINE + 5 +BA0 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +BA1 + 8 +HOLZ + 10 +16764.231136 + 20 +7391.750556 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +BA2 + 8 +HOLZ + 10 +16764.231136 + 20 +7391.750556 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BA3 + 8 +HOLZ + 10 +16768.550394 + 20 +7399.914557 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BA4 + 8 +HOLZ + 10 +16772.303729 + 20 +7406.857569 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BA5 + 8 +HOLZ + 10 +16775.555722 + 20 +7412.724008 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BA6 + 8 +HOLZ + 10 +16778.370957 + 20 +7417.658294 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BA7 + 8 +HOLZ + 10 +16780.814017 + 20 +7421.804844 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BA8 + 8 +HOLZ + 10 +16782.949484 + 20 +7425.308078 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BA9 + 8 +HOLZ + 10 +16784.841941 + 20 +7428.312412 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BAA + 8 +HOLZ + 10 +16786.555971 + 20 +7430.962267 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BAB + 8 +HOLZ + 10 +16788.150867 + 20 +7433.380178 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BAC + 8 +HOLZ + 10 +16789.664758 + 20 +7435.601156 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BAD + 8 +HOLZ + 10 +16791.130484 + 20 +7437.638329 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BAE + 8 +HOLZ + 10 +16792.580884 + 20 +7439.504827 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BAF + 8 +HOLZ + 10 +16794.048799 + 20 +7441.213778 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BB0 + 8 +HOLZ + 10 +16795.567067 + 20 +7442.778311 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BB1 + 8 +HOLZ + 10 +16797.168529 + 20 +7444.211555 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BB2 + 8 +HOLZ + 10 +16798.886023 + 20 +7445.526639 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BB3 + 8 +HOLZ + 10 +16800.746095 + 20 +7446.737237 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BB4 + 8 +HOLZ + 10 +16802.750113 + 20 +7447.859216 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BB5 + 8 +HOLZ + 10 +16804.893153 + 20 +7448.908984 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BB6 + 8 +HOLZ + 10 +16807.170286 + 20 +7449.902955 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BB7 + 8 +HOLZ + 10 +16809.576589 + 20 +7450.857537 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BB8 + 8 +HOLZ + 10 +16812.107134 + 20 +7451.789143 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BB9 + 8 +HOLZ + 10 +16814.756995 + 20 +7452.714184 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BBA + 8 +HOLZ + 10 +16817.521248 + 20 +7453.649071 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BBB + 8 +HOLZ + 10 +16820.408284 + 20 +7454.640848 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BBC + 8 +HOLZ + 10 +16823.479767 + 20 +7455.859098 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BBD + 8 +HOLZ + 10 +16826.81068 + 20 +7457.504038 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BBE + 8 +HOLZ + 10 +16830.476005 + 20 +7459.775883 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BBF + 8 +HOLZ + 10 +16834.550724 + 20 +7462.874851 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BC0 + 8 +HOLZ + 10 +16839.109821 + 20 +7467.001157 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BC1 + 8 +HOLZ + 10 +16844.228276 + 20 +7472.355017 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BC2 + 8 +HOLZ + 10 +16849.981074 + 20 +7479.136649 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BC3 + 8 +HOLZ + 10 +16776.56113 + 20 +7415.277585 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +BC4 + 8 +HOLZ + 10 +16787.770309 + 20 +7433.202928 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +BC5 + 8 +HOLZ + 10 +16797.298051 + 20 +7446.646976 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +BC6 + 8 +HOLZ + 10 +16816.353622 + 20 +7453.369 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +BC7 + 8 +HOLZ + 10 +16833.727841 + 20 +7458.970632 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +BC8 + 8 +HOLZ + 10 +16849.981074 + 20 +7479.136649 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +BC9 + 8 +HOLZ + 0 +POLYLINE + 5 +BCA + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +BCB + 8 +HOLZ + 10 +16760.868348 + 20 +7439.924952 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +BCC + 8 +HOLZ + 10 +16760.868348 + 20 +7439.924952 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BCD + 8 +HOLZ + 10 +16767.126161 + 20 +7444.526376 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BCE + 8 +HOLZ + 10 +16772.521939 + 20 +7448.325291 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BCF + 8 +HOLZ + 10 +16777.165694 + 20 +7451.438218 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BD0 + 8 +HOLZ + 10 +16781.167439 + 20 +7453.981675 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BD1 + 8 +HOLZ + 10 +16784.637186 + 20 +7456.072182 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BD2 + 8 +HOLZ + 10 +16787.684947 + 20 +7457.826259 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BD3 + 8 +HOLZ + 10 +16790.420735 + 20 +7459.360426 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BD4 + 8 +HOLZ + 10 +16792.954561 + 20 +7460.791201 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BD5 + 8 +HOLZ + 10 +16795.386587 + 20 +7462.228539 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BD6 + 8 +HOLZ + 10 +16797.777564 + 20 +7463.756139 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BD7 + 8 +HOLZ + 10 +16800.178393 + 20 +7465.451133 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BD8 + 8 +HOLZ + 10 +16802.639973 + 20 +7467.390653 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BD9 + 8 +HOLZ + 10 +16805.213206 + 20 +7469.651832 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BDA + 8 +HOLZ + 10 +16807.948991 + 20 +7472.311802 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BDB + 8 +HOLZ + 10 +16810.898229 + 20 +7475.447697 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BDC + 8 +HOLZ + 10 +16814.11182 + 20 +7479.136649 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BDD + 8 +HOLZ + 10 +16778.803018 + 20 +7453.369 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +BDE + 8 +HOLZ + 10 +16793.935349 + 20 +7460.651165 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +BDF + 8 +HOLZ + 10 +16805.144529 + 20 +7468.493472 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +BE0 + 8 +HOLZ + 10 +16814.11182 + 20 +7479.136649 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +BE1 + 8 +HOLZ + 0 +POLYLINE + 5 +BE2 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +BE3 + 8 +HOLZ + 10 +16761.989248 + 20 +7465.132514 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +BE4 + 8 +HOLZ + 10 +16761.989248 + 20 +7465.132514 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BE5 + 8 +HOLZ + 10 +16766.821001 + 20 +7467.00009 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BE6 + 8 +HOLZ + 10 +16770.588761 + 20 +7468.519753 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BE7 + 8 +HOLZ + 10 +16773.594651 + 20 +7469.868742 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BE8 + 8 +HOLZ + 10 +16776.140792 + 20 +7471.224298 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BE9 + 8 +HOLZ + 10 +16778.529307 + 20 +7472.76366 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BEA + 8 +HOLZ + 10 +16781.062317 + 20 +7474.664069 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BEB + 8 +HOLZ + 10 +16784.041944 + 20 +7477.102765 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BEC + 8 +HOLZ + 10 +16787.770309 + 20 +7480.256987 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BED + 8 +HOLZ + 10 +16776.56113 + 20 +7470.734147 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +BEE + 8 +HOLZ + 10 +16787.770309 + 20 +7480.256987 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +BEF + 8 +HOLZ + 0 +POLYLINE + 5 +BF0 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +BF1 + 8 +HOLZ + 10 +13968.847437 + 20 +7499.096313 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +BF2 + 8 +HOLZ + 10 +13968.847437 + 20 +7499.096313 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BF3 + 8 +HOLZ + 10 +13972.584324 + 20 +7511.576045 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BF4 + 8 +HOLZ + 10 +13977.426682 + 20 +7523.460825 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BF5 + 8 +HOLZ + 10 +13983.346165 + 20 +7534.495679 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BF6 + 8 +HOLZ + 10 +13990.314429 + 20 +7544.425629 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BF7 + 8 +HOLZ + 10 +13998.303129 + 20 +7552.995699 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BF8 + 8 +HOLZ + 10 +14007.283921 + 20 +7559.950914 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BF9 + 8 +HOLZ + 10 +14017.228461 + 20 +7565.036295 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BFA + 8 +HOLZ + 10 +14028.108404 + 20 +7567.996868 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +BFB + 8 +HOLZ + 10 +13977.313314 + 20 +7532.942219 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +BFC + 8 +HOLZ + 10 +13997.873215 + 20 +7563.161731 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +BFD + 8 +HOLZ + 10 +14028.108404 + 20 +7567.996868 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +BFE + 8 +HOLZ + 0 +POLYLINE + 5 +BFF + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +C00 + 8 +HOLZ + 10 +13919.261672 + 20 +7503.93145 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +C01 + 8 +HOLZ + 10 +13919.261672 + 20 +7503.93145 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C02 + 8 +HOLZ + 10 +13927.256105 + 20 +7520.051484 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C03 + 8 +HOLZ + 10 +13934.122618 + 20 +7533.280596 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C04 + 8 +HOLZ + 10 +13940.037188 + 20 +7543.957575 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C05 + 8 +HOLZ + 10 +13945.175797 + 20 +7552.42121 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C06 + 8 +HOLZ + 10 +13949.714422 + 20 +7559.01029 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C07 + 8 +HOLZ + 10 +13953.829044 + 20 +7564.063605 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C08 + 8 +HOLZ + 10 +13957.695641 + 20 +7567.919943 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C09 + 8 +HOLZ + 10 +13961.490194 + 20 +7570.918094 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C0A + 8 +HOLZ + 10 +13965.360335 + 20 +7573.35671 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C0B + 8 +HOLZ + 10 +13969.340316 + 20 +7575.373906 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C0C + 8 +HOLZ + 10 +13973.436042 + 20 +7577.067657 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C0D + 8 +HOLZ + 10 +13977.653418 + 20 +7578.535942 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C0E + 8 +HOLZ + 10 +13981.998349 + 20 +7579.876738 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C0F + 8 +HOLZ + 10 +13986.476739 + 20 +7581.188022 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C10 + 8 +HOLZ + 10 +13991.094496 + 20 +7582.567772 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C11 + 8 +HOLZ + 10 +13995.857523 + 20 +7584.113965 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C12 + 8 +HOLZ + 10 +14000.758143 + 20 +7585.921627 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C13 + 8 +HOLZ + 10 +14005.734352 + 20 +7588.07398 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C14 + 8 +HOLZ + 10 +14010.710561 + 20 +7590.651296 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C15 + 8 +HOLZ + 10 +14015.611183 + 20 +7593.733844 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C16 + 8 +HOLZ + 10 +14020.36063 + 20 +7597.401897 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C17 + 8 +HOLZ + 10 +14024.883315 + 20 +7601.735726 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C18 + 8 +HOLZ + 10 +14029.10365 + 20 +7606.8156 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C19 + 8 +HOLZ + 10 +14032.946048 + 20 +7612.721792 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C1A + 8 +HOLZ + 10 +13942.240481 + 20 +7551.073915 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +C1B + 8 +HOLZ + 10 +13960.38156 + 20 +7576.458345 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +C1C + 8 +HOLZ + 10 +13994.244982 + 20 +7581.293482 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +C1D + 8 +HOLZ + 10 +14023.27076 + 20 +7595.798839 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +C1E + 8 +HOLZ + 10 +14032.946048 + 20 +7612.721792 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +C1F + 8 +HOLZ + 0 +POLYLINE + 5 +C20 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +C21 + 8 +HOLZ + 10 +13880.560693 + 20 +7501.513855 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +C22 + 8 +HOLZ + 10 +13880.560693 + 20 +7501.513855 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C23 + 8 +HOLZ + 10 +13884.959149 + 20 +7518.600103 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C24 + 8 +HOLZ + 10 +13889.103683 + 20 +7532.13319 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C25 + 8 +HOLZ + 10 +13893.02382 + 20 +7542.6396 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C26 + 8 +HOLZ + 10 +13896.749086 + 20 +7550.645812 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C27 + 8 +HOLZ + 10 +13900.309006 + 20 +7556.678309 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C28 + 8 +HOLZ + 10 +13903.733106 + 20 +7561.263573 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C29 + 8 +HOLZ + 10 +13907.05091 + 20 +7564.928084 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C2A + 8 +HOLZ + 10 +13910.291946 + 20 +7568.198325 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C2B + 8 +HOLZ + 10 +13913.485344 + 20 +7571.503588 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C2C + 8 +HOLZ + 10 +13916.658663 + 20 +7574.8844 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C2D + 8 +HOLZ + 10 +13919.839067 + 20 +7578.284099 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C2E + 8 +HOLZ + 10 +13923.053721 + 20 +7581.646025 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C2F + 8 +HOLZ + 10 +13926.32979 + 20 +7584.913515 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C30 + 8 +HOLZ + 10 +13929.694438 + 20 +7588.029908 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C31 + 8 +HOLZ + 10 +13933.174831 + 20 +7590.938542 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C32 + 8 +HOLZ + 10 +13936.798132 + 20 +7593.582755 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C33 + 8 +HOLZ + 10 +13940.58442 + 20 +7595.928313 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C34 + 8 +HOLZ + 10 +13944.525428 + 20 +7598.030699 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C35 + 8 +HOLZ + 10 +13948.605801 + 20 +7599.967821 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C36 + 8 +HOLZ + 10 +13952.810186 + 20 +7601.81759 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C37 + 8 +HOLZ + 10 +13957.123228 + 20 +7603.657915 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C38 + 8 +HOLZ + 10 +13961.529574 + 20 +7605.566705 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C39 + 8 +HOLZ + 10 +13966.01387 + 20 +7607.621871 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C3A + 8 +HOLZ + 10 +13970.560762 + 20 +7609.901322 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C3B + 8 +HOLZ + 10 +13975.197808 + 20 +7612.525071 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C3C + 8 +HOLZ + 10 +13980.124214 + 20 +7615.781541 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C3D + 8 +HOLZ + 10 +13985.582098 + 20 +7620.001258 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C3E + 8 +HOLZ + 10 +13991.813577 + 20 +7625.51475 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C3F + 8 +HOLZ + 10 +13999.060771 + 20 +7632.652543 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C40 + 8 +HOLZ + 10 +14007.565796 + 20 +7641.745163 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C41 + 8 +HOLZ + 10 +14017.570771 + 20 +7653.123136 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C42 + 8 +HOLZ + 10 +14029.317815 + 20 +7667.11699 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C43 + 8 +HOLZ + 10 +13892.654716 + 20 +7552.282713 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +C44 + 8 +HOLZ + 10 +13910.795882 + 20 +7566.78807 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +C45 + 8 +HOLZ + 10 +13934.984015 + 20 +7597.007637 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +C46 + 8 +HOLZ + 10 +13970.056848 + 20 +7606.677911 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +C47 + 8 +HOLZ + 10 +13995.454393 + 20 +7626.018405 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +C48 + 8 +HOLZ + 10 +14029.317815 + 20 +7667.11699 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +C49 + 8 +HOLZ + 0 +POLYLINE + 5 +C4A + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +C4B + 8 +HOLZ + 10 +13846.697271 + 20 +7505.140194 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +C4C + 8 +HOLZ + 10 +13846.697271 + 20 +7505.140194 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C4D + 8 +HOLZ + 10 +13854.93281 + 20 +7526.67025 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C4E + 8 +HOLZ + 10 +13862.4668 + 20 +7544.452374 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C4F + 8 +HOLZ + 10 +13869.391363 + 20 +7558.988257 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C50 + 8 +HOLZ + 10 +13875.798622 + 20 +7570.779591 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C51 + 8 +HOLZ + 10 +13881.7807 + 20 +7580.328068 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C52 + 8 +HOLZ + 10 +13887.429719 + 20 +7588.135379 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C53 + 8 +HOLZ + 10 +13892.837803 + 20 +7594.703216 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C54 + 8 +HOLZ + 10 +13898.097073 + 20 +7600.53327 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C55 + 8 +HOLZ + 10 +13903.281937 + 20 +7606.037913 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C56 + 8 +HOLZ + 10 +13908.395938 + 20 +7611.272232 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C57 + 8 +HOLZ + 10 +13913.424903 + 20 +7616.201994 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C58 + 8 +HOLZ + 10 +13918.354658 + 20 +7620.792966 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C59 + 8 +HOLZ + 10 +13923.171032 + 20 +7625.010914 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C5A + 8 +HOLZ + 10 +13927.85985 + 20 +7628.821607 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C5B + 8 +HOLZ + 10 +13932.406941 + 20 +7632.190809 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C5C + 8 +HOLZ + 10 +13936.798132 + 20 +7635.08429 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C5D + 8 +HOLZ + 10 +13941.03165 + 20 +7637.496145 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C5E + 8 +HOLZ + 10 +13945.155329 + 20 +7639.533797 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C5F + 8 +HOLZ + 10 +13949.229403 + 20 +7641.332998 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C60 + 8 +HOLZ + 10 +13953.314107 + 20 +7643.0295 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C61 + 8 +HOLZ + 10 +13957.469674 + 20 +7644.759054 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C62 + 8 +HOLZ + 10 +13961.756339 + 20 +7646.657414 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C63 + 8 +HOLZ + 10 +13966.234336 + 20 +7648.860332 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C64 + 8 +HOLZ + 10 +13970.963899 + 20 +7651.503559 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C65 + 8 +HOLZ + 10 +13976.015893 + 20 +7654.701206 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C66 + 8 +HOLZ + 10 +13981.503698 + 20 +7658.480816 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C67 + 8 +HOLZ + 10 +13987.551327 + 20 +7662.848292 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C68 + 8 +HOLZ + 10 +13994.282791 + 20 +7667.809536 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C69 + 8 +HOLZ + 10 +14001.822102 + 20 +7673.370448 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C6A + 8 +HOLZ + 10 +14010.29327 + 20 +7679.536931 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C6B + 8 +HOLZ + 10 +14019.820307 + 20 +7686.314887 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C6C + 8 +HOLZ + 10 +14030.527226 + 20 +7693.710217 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C6D + 8 +HOLZ + 10 +13869.675994 + 20 +7567.996868 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +C6E + 8 +HOLZ + 10 +13898.701772 + 20 +7603.051572 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +C6F + 8 +HOLZ + 10 +13938.612248 + 20 +7640.523817 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +C70 + 8 +HOLZ + 10 +13967.638026 + 20 +7645.3589 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +C71 + 8 +HOLZ + 10 +14000.292037 + 20 +7673.160925 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +C72 + 8 +HOLZ + 10 +14030.527226 + 20 +7693.710217 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +C73 + 8 +HOLZ + 0 +POLYLINE + 5 +C74 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +C75 + 8 +HOLZ + 10 +13829.765517 + 20 +7581.293482 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +C76 + 8 +HOLZ + 10 +13829.765517 + 20 +7581.293482 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C77 + 8 +HOLZ + 10 +13838.872879 + 20 +7587.179207 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C78 + 8 +HOLZ + 10 +13847.180663 + 20 +7593.022436 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C79 + 8 +HOLZ + 10 +13854.739656 + 20 +7598.780673 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C7A + 8 +HOLZ + 10 +13861.600642 + 20 +7604.411422 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C7B + 8 +HOLZ + 10 +13867.814407 + 20 +7609.872186 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C7C + 8 +HOLZ + 10 +13873.431738 + 20 +7615.120469 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C7D + 8 +HOLZ + 10 +13878.503418 + 20 +7620.113775 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C7E + 8 +HOLZ + 10 +13883.080234 + 20 +7624.809607 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C7F + 8 +HOLZ + 10 +13887.217696 + 20 +7629.178849 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C80 + 8 +HOLZ + 10 +13890.99021 + 20 +7633.245897 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C81 + 8 +HOLZ + 10 +13894.476908 + 20 +7637.048523 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C82 + 8 +HOLZ + 10 +13897.75692 + 20 +7640.624504 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C83 + 8 +HOLZ + 10 +13900.909377 + 20 +7644.011612 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C84 + 8 +HOLZ + 10 +13904.013411 + 20 +7647.247624 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C85 + 8 +HOLZ + 10 +13907.148151 + 20 +7650.370312 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C86 + 8 +HOLZ + 10 +13910.39273 + 20 +7653.417452 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C87 + 8 +HOLZ + 10 +13913.810728 + 20 +7656.422097 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C88 + 8 +HOLZ + 10 +13917.403521 + 20 +7659.39841 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C89 + 8 +HOLZ + 10 +13921.156939 + 20 +7662.355837 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C8A + 8 +HOLZ + 10 +13925.056808 + 20 +7665.30382 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C8B + 8 +HOLZ + 10 +13929.088956 + 20 +7668.251803 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C8C + 8 +HOLZ + 10 +13933.239209 + 20 +7671.20923 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C8D + 8 +HOLZ + 10 +13937.493397 + 20 +7674.185543 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C8E + 8 +HOLZ + 10 +13941.837344 + 20 +7677.190187 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C8F + 8 +HOLZ + 10 +13946.261998 + 20 +7680.224933 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C90 + 8 +HOLZ + 10 +13950.778775 + 20 +7683.260858 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C91 + 8 +HOLZ + 10 +13955.40421 + 20 +7686.26137 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C92 + 8 +HOLZ + 10 +13960.154838 + 20 +7689.189873 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C93 + 8 +HOLZ + 10 +13965.047193 + 20 +7692.009774 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C94 + 8 +HOLZ + 10 +13970.09781 + 20 +7694.684479 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C95 + 8 +HOLZ + 10 +13975.323225 + 20 +7697.177394 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C96 + 8 +HOLZ + 10 +13980.739972 + 20 +7699.451925 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C97 + 8 +HOLZ + 10 +13986.362223 + 20 +7701.505317 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C98 + 8 +HOLZ + 10 +13992.194703 + 20 +7703.470176 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C99 + 8 +HOLZ + 10 +13998.239773 + 20 +7705.512944 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C9A + 8 +HOLZ + 10 +14004.499795 + 20 +7707.800067 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C9B + 8 +HOLZ + 10 +14010.97713 + 20 +7710.497988 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C9C + 8 +HOLZ + 10 +14017.674142 + 20 +7713.773152 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C9D + 8 +HOLZ + 10 +14024.59319 + 20 +7717.792003 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C9E + 8 +HOLZ + 10 +14031.736637 + 20 +7722.720985 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C9F + 8 +HOLZ + 10 +13855.163062 + 20 +7597.007637 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +CA0 + 8 +HOLZ + 10 +13887.817072 + 20 +7628.435947 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +CA1 + 8 +HOLZ + 10 +13908.37706 + 20 +7653.820376 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +CA2 + 8 +HOLZ + 10 +13941.03107 + 20 +7676.787264 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +CA3 + 8 +HOLZ + 10 +13978.522725 + 20 +7702.171693 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +CA4 + 8 +HOLZ + 10 +14012.386147 + 20 +7708.215574 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +CA5 + 8 +HOLZ + 10 +14031.736637 + 20 +7722.720985 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +CA6 + 8 +HOLZ + 0 +POLYLINE + 5 +CA7 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +CA8 + 8 +HOLZ + 10 +13834.603161 + 20 +7640.523817 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +CA9 + 8 +HOLZ + 10 +13834.603161 + 20 +7640.523817 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CAA + 8 +HOLZ + 10 +13852.681671 + 20 +7649.258561 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CAB + 8 +HOLZ + 10 +13868.116967 + 20 +7657.366486 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CAC + 8 +HOLZ + 10 +13881.213763 + 20 +7664.90071 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CAD + 8 +HOLZ + 10 +13892.276773 + 20 +7671.914355 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CAE + 8 +HOLZ + 10 +13901.61071 + 20 +7678.460542 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CAF + 8 +HOLZ + 10 +13909.520288 + 20 +7684.592391 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CB0 + 8 +HOLZ + 10 +13916.310221 + 20 +7690.363023 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CB1 + 8 +HOLZ + 10 +13922.285221 + 20 +7695.825559 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CB2 + 8 +HOLZ + 10 +13927.71221 + 20 +7701.028397 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CB3 + 8 +HOLZ + 10 +13932.706929 + 20 +7706.001048 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CB4 + 8 +HOLZ + 10 +13937.347328 + 20 +7710.768301 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CB5 + 8 +HOLZ + 10 +13941.711356 + 20 +7715.354945 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CB6 + 8 +HOLZ + 10 +13945.876962 + 20 +7719.785768 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CB7 + 8 +HOLZ + 10 +13949.922095 + 20 +7724.08556 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CB8 + 8 +HOLZ + 10 +13953.924704 + 20 +7728.27911 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CB9 + 8 +HOLZ + 10 +13957.962738 + 20 +7732.391205 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CBA + 8 +HOLZ + 10 +13886.607661 + 20 +7664.699448 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +CBB + 8 +HOLZ + 10 +13927.727549 + 20 +7698.5453 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +CBC + 8 +HOLZ + 10 +13947.078126 + 20 +7721.512187 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +CBD + 8 +HOLZ + 10 +13957.962738 + 20 +7732.391205 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +CBE + 8 +HOLZ + 0 +POLYLINE + 5 +CBF + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +CC0 + 8 +HOLZ + 10 +13838.231394 + 20 +7688.87508 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +CC1 + 8 +HOLZ + 10 +13838.231394 + 20 +7688.87508 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CC2 + 8 +HOLZ + 10 +13846.267335 + 20 +7694.510555 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CC3 + 8 +HOLZ + 10 +13852.630892 + 20 +7699.055293 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CC4 + 8 +HOLZ + 10 +13857.917323 + 20 +7703.005084 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CC5 + 8 +HOLZ + 10 +13862.72188 + 20 +7706.855717 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CC6 + 8 +HOLZ + 10 +13867.63982 + 20 +7711.102982 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CC7 + 8 +HOLZ + 10 +13873.266398 + 20 +7716.242667 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CC8 + 8 +HOLZ + 10 +13880.196867 + 20 +7722.770564 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CC9 + 8 +HOLZ + 10 +13889.026483 + 20 +7731.182462 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CCA + 8 +HOLZ + 10 +13862.419528 + 20 +7705.798032 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +CCB + 8 +HOLZ + 10 +13889.026483 + 20 +7731.182462 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +CCC + 8 +HOLZ + 0 +POLYLINE + 5 +CCD + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +CCE + 8 +HOLZ + 10 +10599.835784 + 20 +9602.096746 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +CCF + 8 +HOLZ + 10 +10599.835784 + 20 +9602.096746 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CD0 + 8 +HOLZ + 10 +10602.226487 + 20 +9611.772071 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CD1 + 8 +HOLZ + 10 +10605.554665 + 20 +9620.19531 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CD2 + 8 +HOLZ + 10 +10609.629505 + 20 +9627.507427 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CD3 + 8 +HOLZ + 10 +10614.260195 + 20 +9633.849384 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CD4 + 8 +HOLZ + 10 +10619.255921 + 20 +9639.362146 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CD5 + 8 +HOLZ + 10 +10624.42587 + 20 +9644.186676 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CD6 + 8 +HOLZ + 10 +10629.57923 + 20 +9648.463938 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CD7 + 8 +HOLZ + 10 +10634.525187 + 20 +9652.334896 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CD8 + 8 +HOLZ + 10 +10604.791413 + 20 +9629.692363 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +CD9 + 8 +HOLZ + 10 +10621.782116 + 20 +9642.428781 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +CDA + 8 +HOLZ + 10 +10634.525187 + 20 +9652.334896 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +CDB + 8 +HOLZ + 0 +POLYLINE + 5 +CDC + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +CDD + 8 +HOLZ + 10 +10564.43847 + 20 +9598.558867 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +CDE + 8 +HOLZ + 10 +10564.43847 + 20 +9598.558867 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CDF + 8 +HOLZ + 10 +10567.127168 + 20 +9610.740767 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CE0 + 8 +HOLZ + 10 +10569.886377 + 20 +9620.922238 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CE1 + 8 +HOLZ + 10 +10572.720246 + 20 +9629.358257 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CE2 + 8 +HOLZ + 10 +10575.632926 + 20 +9636.303801 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CE3 + 8 +HOLZ + 10 +10578.628565 + 20 +9642.013846 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CE4 + 8 +HOLZ + 10 +10581.711313 + 20 +9646.743369 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CE5 + 8 +HOLZ + 10 +10584.885318 + 20 +9650.747347 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CE6 + 8 +HOLZ + 10 +10588.154729 + 20 +9654.280756 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CE7 + 8 +HOLZ + 10 +10591.555499 + 20 +9657.566787 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CE8 + 8 +HOLZ + 10 +10595.250786 + 20 +9660.70149 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CE9 + 8 +HOLZ + 10 +10599.43555 + 20 +9663.749126 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CEA + 8 +HOLZ + 10 +10604.304755 + 20 +9666.773958 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CEB + 8 +HOLZ + 10 +10610.053359 + 20 +9669.84025 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CEC + 8 +HOLZ + 10 +10616.876325 + 20 +9673.012265 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CED + 8 +HOLZ + 10 +10624.968614 + 20 +9676.354265 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CEE + 8 +HOLZ + 10 +10634.525187 + 20 +9679.930513 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CEF + 8 +HOLZ + 10 +10571.518002 + 20 +9633.937818 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +CF0 + 8 +HOLZ + 10 +10587.092799 + 20 +9656.580404 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +CF1 + 8 +HOLZ + 10 +10606.915316 + 20 +9670.024398 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +CF2 + 8 +HOLZ + 10 +10634.525187 + 20 +9679.930513 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +CF3 + 8 +HOLZ + 0 +POLYLINE + 5 +CF4 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +CF5 + 8 +HOLZ + 10 +10533.996873 + 20 +9602.096746 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +CF6 + 8 +HOLZ + 10 +10533.996873 + 20 +9602.096746 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CF7 + 8 +HOLZ + 10 +10538.100614 + 20 +9615.677576 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CF8 + 8 +HOLZ + 10 +10541.93819 + 20 +9626.8952 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CF9 + 8 +HOLZ + 10 +10545.542093 + 20 +9636.039836 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CFA + 8 +HOLZ + 10 +10548.944817 + 20 +9643.401703 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CFB + 8 +HOLZ + 10 +10552.178854 + 20 +9649.27102 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CFC + 8 +HOLZ + 10 +10555.276696 + 20 +9653.938004 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CFD + 8 +HOLZ + 10 +10558.270837 + 20 +9657.692875 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CFE + 8 +HOLZ + 10 +10561.193768 + 20 +9660.82585 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +CFF + 8 +HOLZ + 10 +10564.072913 + 20 +9663.587301 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D00 + 8 +HOLZ + 10 +10566.915416 + 20 +9666.068208 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D01 + 8 +HOLZ + 10 +10569.72335 + 20 +9668.319705 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D02 + 8 +HOLZ + 10 +10572.498791 + 20 +9670.392926 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D03 + 8 +HOLZ + 10 +10575.243811 + 20 +9672.339004 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D04 + 8 +HOLZ + 10 +10577.960485 + 20 +9674.209072 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D05 + 8 +HOLZ + 10 +10580.650888 + 20 +9676.054265 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D06 + 8 +HOLZ + 10 +10583.317092 + 20 +9677.925715 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D07 + 8 +HOLZ + 10 +10585.964976 + 20 +9679.860045 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D08 + 8 +HOLZ + 10 +10588.615625 + 20 +9681.835835 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D09 + 8 +HOLZ + 10 +10591.293928 + 20 +9683.817152 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D0A + 8 +HOLZ + 10 +10594.024773 + 20 +9685.768065 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D0B + 8 +HOLZ + 10 +10596.833049 + 20 +9687.652641 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D0C + 8 +HOLZ + 10 +10599.743644 + 20 +9689.43495 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D0D + 8 +HOLZ + 10 +10602.781448 + 20 +9691.07906 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D0E + 8 +HOLZ + 10 +10605.971349 + 20 +9692.549037 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D0F + 8 +HOLZ + 10 +10609.333166 + 20 +9693.822081 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D10 + 8 +HOLZ + 10 +10612.866439 + 20 +9694.927903 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D11 + 8 +HOLZ + 10 +10616.565638 + 20 +9695.909345 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D12 + 8 +HOLZ + 10 +10620.425235 + 20 +9696.809249 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D13 + 8 +HOLZ + 10 +10624.439699 + 20 +9697.670456 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D14 + 8 +HOLZ + 10 +10628.6035 + 20 +9698.535809 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D15 + 8 +HOLZ + 10 +10632.911111 + 20 +9699.448149 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D16 + 8 +HOLZ + 10 +10637.357 + 20 +9700.450318 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D17 + 8 +HOLZ + 10 +10545.323951 + 20 +9641.721205 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +D18 + 8 +HOLZ + 10 +10561.606744 + 20 +9664.363738 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +D19 + 8 +HOLZ + 10 +10583.553077 + 20 +9677.10021 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +D1A + 8 +HOLZ + 10 +10604.083503 + 20 +9694.789712 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +D1B + 8 +HOLZ + 10 +10625.321839 + 20 +9697.620015 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +D1C + 8 +HOLZ + 10 +10637.357 + 20 +9700.450318 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +D1D + 8 +HOLZ + 0 +POLYLINE + 5 +D1E + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +D1F + 8 +HOLZ + 10 +10512.050541 + 20 +9599.974019 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +D20 + 8 +HOLZ + 10 +10512.050541 + 20 +9599.974019 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D21 + 8 +HOLZ + 10 +10514.516463 + 20 +9613.557382 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D22 + 8 +HOLZ + 10 +10517.110292 + 20 +9624.792741 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D23 + 8 +HOLZ + 10 +10519.794002 + 20 +9633.985517 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D24 + 8 +HOLZ + 10 +10522.529569 + 20 +9641.441129 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D25 + 8 +HOLZ + 10 +10525.278966 + 20 +9647.464997 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D26 + 8 +HOLZ + 10 +10528.004168 + 20 +9652.362542 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D27 + 8 +HOLZ + 10 +10530.667149 + 20 +9656.439185 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D28 + 8 +HOLZ + 10 +10533.229884 + 20 +9660.000345 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D29 + 8 +HOLZ + 10 +10535.668635 + 20 +9663.304915 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D2A + 8 +HOLZ + 10 +10538.016819 + 20 +9666.425681 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D2B + 8 +HOLZ + 10 +10540.322138 + 20 +9669.3889 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D2C + 8 +HOLZ + 10 +10542.632296 + 20 +9672.22083 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D2D + 8 +HOLZ + 10 +10544.994997 + 20 +9674.947729 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D2E + 8 +HOLZ + 10 +10547.457944 + 20 +9677.595854 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D2F + 8 +HOLZ + 10 +10550.068842 + 20 +9680.191464 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D30 + 8 +HOLZ + 10 +10552.875394 + 20 +9682.760816 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D31 + 8 +HOLZ + 10 +10555.91355 + 20 +9685.32464 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D32 + 8 +HOLZ + 10 +10559.172249 + 20 +9687.881554 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D33 + 8 +HOLZ + 10 +10562.628674 + 20 +9690.424648 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D34 + 8 +HOLZ + 10 +10566.260013 + 20 +9692.947014 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D35 + 8 +HOLZ + 10 +10570.043448 + 20 +9695.44174 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D36 + 8 +HOLZ + 10 +10573.956165 + 20 +9697.901916 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D37 + 8 +HOLZ + 10 +10577.975349 + 20 +9700.320634 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D38 + 8 +HOLZ + 10 +10582.078185 + 20 +9702.690984 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D39 + 8 +HOLZ + 10 +10586.285183 + 20 +9705.006975 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D3A + 8 +HOLZ + 10 +10590.790153 + 20 +9707.266306 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D3B + 8 +HOLZ + 10 +10595.830232 + 20 +9709.467593 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D3C + 8 +HOLZ + 10 +10601.642554 + 20 +9711.609453 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D3D + 8 +HOLZ + 10 +10608.464256 + 20 +9713.690504 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D3E + 8 +HOLZ + 10 +10616.532474 + 20 +9715.709362 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D3F + 8 +HOLZ + 10 +10626.084343 + 20 +9717.664646 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D40 + 8 +HOLZ + 10 +10637.357 + 20 +9719.554972 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D41 + 8 +HOLZ + 10 +10518.421989 + 20 +9639.598478 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +D42 + 8 +HOLZ + 10 +10534.704783 + 20 +9662.24101 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +D43 + 8 +HOLZ + 10 +10550.27958 + 20 +9682.760816 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +D44 + 8 +HOLZ + 10 +10581.429261 + 20 +9703.280621 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +D45 + 8 +HOLZ + 10 +10604.791413 + 20 +9714.601942 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +D46 + 8 +HOLZ + 10 +10637.357 + 20 +9719.554972 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +D47 + 8 +HOLZ + 0 +POLYLINE + 5 +D48 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +D49 + 8 +HOLZ + 10 +10484.440583 + 20 +9638.890902 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +D4A + 8 +HOLZ + 10 +10484.440583 + 20 +9638.890902 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D4B + 8 +HOLZ + 10 +10493.309968 + 20 +9652.941146 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D4C + 8 +HOLZ + 10 +10501.370466 + 20 +9664.525917 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D4D + 8 +HOLZ + 10 +10508.676002 + 20 +9673.965837 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D4E + 8 +HOLZ + 10 +10515.280504 + 20 +9681.581528 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D4F + 8 +HOLZ + 10 +10521.237897 + 20 +9687.693614 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D50 + 8 +HOLZ + 10 +10526.602109 + 20 +9692.622714 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D51 + 8 +HOLZ + 10 +10531.427065 + 20 +9696.689452 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D52 + 8 +HOLZ + 10 +10535.766691 + 20 +9700.21445 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D53 + 8 +HOLZ + 10 +10539.679523 + 20 +9703.470882 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D54 + 8 +HOLZ + 10 +10543.242532 + 20 +9706.542126 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D55 + 8 +HOLZ + 10 +10546.537297 + 20 +9709.464116 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D56 + 8 +HOLZ + 10 +10549.645396 + 20 +9712.272784 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D57 + 8 +HOLZ + 10 +10552.64841 + 20 +9715.00406 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D58 + 8 +HOLZ + 10 +10555.627917 + 20 +9717.693877 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D59 + 8 +HOLZ + 10 +10558.665497 + 20 +9720.378166 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D5A + 8 +HOLZ + 10 +10561.842729 + 20 +9723.09286 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D5B + 8 +HOLZ + 10 +10565.221834 + 20 +9725.862142 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D5C + 8 +HOLZ + 10 +10568.787604 + 20 +9728.663211 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D5D + 8 +HOLZ + 10 +10572.50547 + 20 +9731.461516 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D5E + 8 +HOLZ + 10 +10576.340866 + 20 +9734.222508 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D5F + 8 +HOLZ + 10 +10580.259224 + 20 +9736.911637 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D60 + 8 +HOLZ + 10 +10584.225977 + 20 +9739.494352 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D61 + 8 +HOLZ + 10 +10588.206558 + 20 +9741.936104 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D62 + 8 +HOLZ + 10 +10592.166399 + 20 +9744.202343 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D63 + 8 +HOLZ + 10 +10596.104118 + 20 +9746.270036 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D64 + 8 +HOLZ + 10 +10600.151073 + 20 +9748.162215 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D65 + 8 +HOLZ + 10 +10604.471805 + 20 +9749.913431 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D66 + 8 +HOLZ + 10 +10609.230856 + 20 +9751.558232 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D67 + 8 +HOLZ + 10 +10614.592768 + 20 +9753.131168 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D68 + 8 +HOLZ + 10 +10620.722084 + 20 +9754.666788 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D69 + 8 +HOLZ + 10 +10627.783345 + 20 +9756.199642 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D6A + 8 +HOLZ + 10 +10635.941093 + 20 +9757.764279 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D6B + 8 +HOLZ + 10 +10509.218728 + 20 +9679.930513 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +D6C + 8 +HOLZ + 10 +10540.368322 + 20 +9702.573045 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +D6D + 8 +HOLZ + 10 +10559.482928 + 20 +9722.385275 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +D6E + 8 +HOLZ + 10 +10592.756338 + 20 +9746.443013 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +D6F + 8 +HOLZ + 10 +10612.578855 + 20 +9753.518825 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +D70 + 8 +HOLZ + 10 +10635.941093 + 20 +9757.764279 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +D71 + 8 +HOLZ + 0 +POLYLINE + 5 +D72 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +D73 + 8 +HOLZ + 10 +10479.484954 + 20 +9708.233705 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +D74 + 8 +HOLZ + 10 +10479.484954 + 20 +9708.233705 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D75 + 8 +HOLZ + 10 +10494.26461 + 20 +9721.832962 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D76 + 8 +HOLZ + 10 +10506.463441 + 20 +9732.648889 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D77 + 8 +HOLZ + 10 +10516.454086 + 20 +9741.082264 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D78 + 8 +HOLZ + 10 +10524.609184 + 20 +9747.533865 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D79 + 8 +HOLZ + 10 +10531.301376 + 20 +9752.404468 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D7A + 8 +HOLZ + 10 +10536.903301 + 20 +9756.09485 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D7B + 8 +HOLZ + 10 +10541.787599 + 20 +9759.005789 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D7C + 8 +HOLZ + 10 +10546.32691 + 20 +9761.538062 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D7D + 8 +HOLZ + 10 +10550.830269 + 20 +9764.019546 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D7E + 8 +HOLZ + 10 +10555.352294 + 20 +9766.486518 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D7F + 8 +HOLZ + 10 +10559.883997 + 20 +9768.902355 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D80 + 8 +HOLZ + 10 +10564.416392 + 20 +9771.230435 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D81 + 8 +HOLZ + 10 +10568.94049 + 20 +9773.434136 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D82 + 8 +HOLZ + 10 +10573.447306 + 20 +9775.476834 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D83 + 8 +HOLZ + 10 +10577.927852 + 20 +9777.321907 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D84 + 8 +HOLZ + 10 +10582.37314 + 20 +9778.932732 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D85 + 8 +HOLZ + 10 +10586.812554 + 20 +9780.28236 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D86 + 8 +HOLZ + 10 +10591.428956 + 20 +9781.382539 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D87 + 8 +HOLZ + 10 +10596.443577 + 20 +9782.254689 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D88 + 8 +HOLZ + 10 +10602.07765 + 20 +9782.920232 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D89 + 8 +HOLZ + 10 +10608.552406 + 20 +9783.400588 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D8A + 8 +HOLZ + 10 +10616.089078 + 20 +9783.717178 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D8B + 8 +HOLZ + 10 +10624.908898 + 20 +9783.891423 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D8C + 8 +HOLZ + 10 +10635.233097 + 20 +9783.944745 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D8D + 8 +HOLZ + 10 +10522.669709 + 20 +9748.56574 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +D8E + 8 +HOLZ + 10 +10546.031947 + 20 +9761.302212 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +D8F + 8 +HOLZ + 10 +10582.84508 + 20 +9781.822018 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +D90 + 8 +HOLZ + 10 +10605.499409 + 20 +9783.944745 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +D91 + 8 +HOLZ + 10 +10635.233097 + 20 +9783.944745 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +D92 + 8 +HOLZ + 0 +POLYLINE + 5 +D93 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +D94 + 8 +HOLZ + 10 +10475.945231 + 20 +9759.179431 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +D95 + 8 +HOLZ + 10 +10475.945231 + 20 +9759.179431 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D96 + 8 +HOLZ + 10 +10487.063251 + 20 +9767.498569 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D97 + 8 +HOLZ + 10 +10497.125569 + 20 +9774.521398 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D98 + 8 +HOLZ + 10 +10506.237963 + 20 +9780.410991 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D99 + 8 +HOLZ + 10 +10514.506211 + 20 +9785.330425 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D9A + 8 +HOLZ + 10 +10522.036091 + 20 +9789.442775 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D9B + 8 +HOLZ + 10 +10528.933379 + 20 +9792.911115 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D9C + 8 +HOLZ + 10 +10535.303855 + 20 +9795.898521 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D9D + 8 +HOLZ + 10 +10541.253296 + 20 +9798.568068 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D9E + 8 +HOLZ + 10 +10546.8778 + 20 +9801.057264 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +D9F + 8 +HOLZ + 10 +10552.23475 + 20 +9803.40135 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DA0 + 8 +HOLZ + 10 +10557.37185 + 20 +9805.610001 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DA1 + 8 +HOLZ + 10 +10562.336804 + 20 +9807.69289 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DA2 + 8 +HOLZ + 10 +10567.177313 + 20 +9809.659692 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DA3 + 8 +HOLZ + 10 +10571.941083 + 20 +9811.520081 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DA4 + 8 +HOLZ + 10 +10576.675817 + 20 +9813.283731 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DA5 + 8 +HOLZ + 10 +10581.429217 + 20 +9814.960316 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DA6 + 8 +HOLZ + 10 +10586.270075 + 20 +9816.55951 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DA7 + 8 +HOLZ + 10 +10591.351524 + 20 +9818.090987 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DA8 + 8 +HOLZ + 10 +10596.847785 + 20 +9819.564421 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DA9 + 8 +HOLZ + 10 +10602.933079 + 20 +9820.989484 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DAA + 8 +HOLZ + 10 +10609.781627 + 20 +9822.375851 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DAB + 8 +HOLZ + 10 +10617.56765 + 20 +9823.733195 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DAC + 8 +HOLZ + 10 +10626.465368 + 20 +9825.071189 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DAD + 8 +HOLZ + 10 +10636.649003 + 20 +9826.399507 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DAE + 8 +HOLZ + 10 +10507.094912 + 20 +9783.237169 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +DAF + 8 +HOLZ + 10 +10544.616041 + 20 +9800.219096 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +DB0 + 8 +HOLZ + 10 +10580.721264 + 20 +9815.785816 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +DB1 + 8 +HOLZ + 10 +10607.623226 + 20 +9822.861628 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +DB2 + 8 +HOLZ + 10 +10636.649003 + 20 +9826.399507 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +DB3 + 8 +HOLZ + 0 +POLYLINE + 5 +DB4 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +DB5 + 8 +HOLZ + 10 +10480.90086 + 20 +9803.756974 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +DB6 + 8 +HOLZ + 10 +10480.90086 + 20 +9803.756974 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DB7 + 8 +HOLZ + 10 +10493.990947 + 20 +9812.10005 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DB8 + 8 +HOLZ + 10 +10507.570513 + 20 +9819.290546 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DB9 + 8 +HOLZ + 10 +10521.332597 + 20 +9825.635266 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DBA + 8 +HOLZ + 10 +10534.970238 + 20 +9831.441011 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DBB + 8 +HOLZ + 10 +10548.176477 + 20 +9837.014583 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DBC + 8 +HOLZ + 10 +10560.644352 + 20 +9842.662783 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DBD + 8 +HOLZ + 10 +10572.066904 + 20 +9848.692413 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DBE + 8 +HOLZ + 10 +10582.13717 + 20 +9855.410276 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DBF + 8 +HOLZ + 10 +10514.882267 + 20 +9827.814658 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +DC0 + 8 +HOLZ + 10 +10557.359025 + 20 +9836.305622 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +DC1 + 8 +HOLZ + 10 +10582.13717 + 20 +9855.410276 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +DC2 + 8 +HOLZ + 0 +POLYLINE + 5 +DC3 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +DC4 + 8 +HOLZ + 10 +7247.888607 + 20 +7499.287951 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +DC5 + 8 +HOLZ + 10 +7247.888607 + 20 +7499.287951 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DC6 + 8 +HOLZ + 10 +7248.565208 + 20 +7513.656964 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DC7 + 8 +HOLZ + 10 +7249.407735 + 20 +7524.731313 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DC8 + 8 +HOLZ + 10 +7250.759099 + 20 +7533.284913 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DC9 + 8 +HOLZ + 10 +7252.96221 + 20 +7540.09168 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DCA + 8 +HOLZ + 10 +7256.35998 + 20 +7545.925528 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DCB + 8 +HOLZ + 10 +7261.29532 + 20 +7551.560374 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DCC + 8 +HOLZ + 10 +7268.111141 + 20 +7557.770131 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DCD + 8 +HOLZ + 10 +7277.150354 + 20 +7565.328716 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DCE + 8 +HOLZ + 10 +7249.776453 + 20 +7542.686129 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +DCF + 8 +HOLZ + 10 +7277.150354 + 20 +7565.328716 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +DD0 + 8 +HOLZ + 0 +POLYLINE + 5 +DD1 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +DD2 + 8 +HOLZ + 10 +7201.636156 + 20 +7498.34448 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +DD3 + 8 +HOLZ + 10 +7201.636156 + 20 +7498.34448 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DD4 + 8 +HOLZ + 10 +7204.310775 + 20 +7511.971844 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DD5 + 8 +HOLZ + 10 +7207.369788 + 20 +7523.9574 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DD6 + 8 +HOLZ + 10 +7210.799365 + 20 +7534.472514 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DD7 + 8 +HOLZ + 10 +7214.585681 + 20 +7543.688554 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DD8 + 8 +HOLZ + 10 +7218.714908 + 20 +7551.776889 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DD9 + 8 +HOLZ + 10 +7223.173219 + 20 +7558.908886 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DDA + 8 +HOLZ + 10 +7227.946787 + 20 +7565.255912 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DDB + 8 +HOLZ + 10 +7233.021785 + 20 +7570.989335 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DDC + 8 +HOLZ + 10 +7238.37701 + 20 +7576.262096 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DDD + 8 +HOLZ + 10 +7243.961765 + 20 +7581.153429 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DDE + 8 +HOLZ + 10 +7249.717976 + 20 +7585.724139 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DDF + 8 +HOLZ + 10 +7255.587568 + 20 +7590.035034 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DE0 + 8 +HOLZ + 10 +7261.512469 + 20 +7594.14692 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DE1 + 8 +HOLZ + 10 +7267.434605 + 20 +7598.120604 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DE2 + 8 +HOLZ + 10 +7273.295902 + 20 +7602.016892 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DE3 + 8 +HOLZ + 10 +7279.038287 + 20 +7605.896591 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DE4 + 8 +HOLZ + 10 +7208.243661 + 20 +7537.025523 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +DE5 + 8 +HOLZ + 10 +7229.954024 + 20 +7575.706511 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +DE6 + 8 +HOLZ + 10 +7263.93543 + 20 +7595.518795 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +DE7 + 8 +HOLZ + 10 +7279.038287 + 20 +7605.896591 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +DE8 + 8 +HOLZ + 0 +POLYLINE + 5 +DE9 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +DEA + 8 +HOLZ + 10 +7159.159397 + 20 +7495.514177 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +DEB + 8 +HOLZ + 10 +7159.159397 + 20 +7495.514177 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DEC + 8 +HOLZ + 10 +7163.800064 + 20 +7517.918869 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DED + 8 +HOLZ + 10 +7168.497885 + 20 +7535.977657 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DEE + 8 +HOLZ + 10 +7173.221519 + 20 +7550.253473 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DEF + 8 +HOLZ + 10 +7177.939624 + 20 +7561.309248 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DF0 + 8 +HOLZ + 10 +7182.620858 + 20 +7569.707915 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DF1 + 8 +HOLZ + 10 +7187.23388 + 20 +7576.012404 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DF2 + 8 +HOLZ + 10 +7191.747346 + 20 +7580.785646 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DF3 + 8 +HOLZ + 10 +7196.129916 + 20 +7584.590574 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DF4 + 8 +HOLZ + 10 +7200.367761 + 20 +7587.909962 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DF5 + 8 +HOLZ + 10 +7204.517111 + 20 +7590.905966 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DF6 + 8 +HOLZ + 10 +7208.651712 + 20 +7593.660582 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DF7 + 8 +HOLZ + 10 +7212.845308 + 20 +7596.255809 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DF8 + 8 +HOLZ + 10 +7217.171643 + 20 +7598.773645 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DF9 + 8 +HOLZ + 10 +7221.704461 + 20 +7601.296088 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DFA + 8 +HOLZ + 10 +7226.517508 + 20 +7603.905137 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DFB + 8 +HOLZ + 10 +7231.684528 + 20 +7606.682789 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DFC + 8 +HOLZ + 10 +7237.250688 + 20 +7609.693999 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DFD + 8 +HOLZ + 10 +7243.146855 + 20 +7612.93554 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DFE + 8 +HOLZ + 10 +7249.275317 + 20 +7616.387145 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +DFF + 8 +HOLZ + 10 +7255.538363 + 20 +7620.028542 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E00 + 8 +HOLZ + 10 +7261.838282 + 20 +7623.839463 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E01 + 8 +HOLZ + 10 +7268.077363 + 20 +7627.799638 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E02 + 8 +HOLZ + 10 +7274.157895 + 20 +7631.888797 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E03 + 8 +HOLZ + 10 +7279.982167 + 20 +7636.086671 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E04 + 8 +HOLZ + 10 +7171.430441 + 20 +7561.554942 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +E05 + 8 +HOLZ + 10 +7197.860463 + 20 +7588.914665 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +E06 + 8 +HOLZ + 10 +7227.122211 + 20 +7604.009704 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +E07 + 8 +HOLZ + 10 +7264.87931 + 20 +7624.765404 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +E08 + 8 +HOLZ + 10 +7279.982167 + 20 +7636.086671 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +E09 + 8 +HOLZ + 0 +POLYLINE + 5 +E0A + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +E0B + 8 +HOLZ + 10 +7113.850826 + 20 +7497.401064 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +E0C + 8 +HOLZ + 10 +7113.850826 + 20 +7497.401064 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E0D + 8 +HOLZ + 10 +7122.376448 + 20 +7530.001165 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E0E + 8 +HOLZ + 10 +7130.287227 + 20 +7555.568774 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E0F + 8 +HOLZ + 10 +7137.632018 + 20 +7575.07589 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E10 + 8 +HOLZ + 10 +7144.459677 + 20 +7589.494515 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E11 + 8 +HOLZ + 10 +7150.819059 + 20 +7599.796648 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E12 + 8 +HOLZ + 10 +7156.759018 + 20 +7606.95429 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E13 + 8 +HOLZ + 10 +7162.328411 + 20 +7611.939441 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E14 + 8 +HOLZ + 10 +7167.576092 + 20 +7615.724101 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E15 + 8 +HOLZ + 10 +7172.55783 + 20 +7619.123646 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E16 + 8 +HOLZ + 10 +7177.357049 + 20 +7622.326948 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E17 + 8 +HOLZ + 10 +7182.064087 + 20 +7625.366253 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E18 + 8 +HOLZ + 10 +7186.769279 + 20 +7628.273808 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E19 + 8 +HOLZ + 10 +7191.562965 + 20 +7631.08186 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E1A + 8 +HOLZ + 10 +7196.53548 + 20 +7633.822654 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E1B + 8 +HOLZ + 10 +7201.777163 + 20 +7636.528439 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E1C + 8 +HOLZ + 10 +7207.378351 + 20 +7639.231459 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E1D + 8 +HOLZ + 10 +7213.448278 + 20 +7641.9893 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E1E + 8 +HOLZ + 10 +7220.171765 + 20 +7644.960888 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E1F + 8 +HOLZ + 10 +7227.752532 + 20 +7648.330492 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E20 + 8 +HOLZ + 10 +7236.394297 + 20 +7652.282375 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E21 + 8 +HOLZ + 10 +7246.300778 + 20 +7657.000803 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E22 + 8 +HOLZ + 10 +7257.675694 + 20 +7662.670042 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E23 + 8 +HOLZ + 10 +7270.722764 + 20 +7669.474358 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E24 + 8 +HOLZ + 10 +7285.645706 + 20 +7677.598016 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E25 + 8 +HOLZ + 10 +7137.449035 + 20 +7594.575325 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +E26 + 8 +HOLZ + 10 +7170.486562 + 20 +7618.161328 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +E27 + 8 +HOLZ + 10 +7202.580035 + 20 +7638.916974 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +E28 + 8 +HOLZ + 10 +7243.168948 + 20 +7654.012013 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +E29 + 8 +HOLZ + 10 +7285.645706 + 20 +7677.598016 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +E2A + 8 +HOLZ + 0 +POLYLINE + 5 +E2B + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +E2C + 8 +HOLZ + 10 +7081.757265 + 20 +7554.950866 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +E2D + 8 +HOLZ + 10 +7081.757265 + 20 +7554.950866 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E2E + 8 +HOLZ + 10 +7096.185814 + 20 +7576.403985 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E2F + 8 +HOLZ + 10 +7107.895961 + 20 +7593.727712 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E30 + 8 +HOLZ + 10 +7117.310817 + 20 +7607.480373 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E31 + 8 +HOLZ + 10 +7124.853487 + 20 +7618.220291 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E32 + 8 +HOLZ + 10 +7130.947082 + 20 +7626.505792 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E33 + 8 +HOLZ + 10 +7136.014708 + 20 +7632.895201 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E34 + 8 +HOLZ + 10 +7140.479473 + 20 +7637.946841 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E35 + 8 +HOLZ + 10 +7144.764486 + 20 +7642.219039 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E36 + 8 +HOLZ + 10 +7149.217574 + 20 +7646.177371 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E37 + 8 +HOLZ + 10 +7153.885441 + 20 +7649.916428 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E38 + 8 +HOLZ + 10 +7158.739512 + 20 +7653.438051 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E39 + 8 +HOLZ + 10 +7163.751211 + 20 +7656.744083 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E3A + 8 +HOLZ + 10 +7168.891962 + 20 +7659.836368 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E3B + 8 +HOLZ + 10 +7174.133188 + 20 +7662.716746 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E3C + 8 +HOLZ + 10 +7179.446315 + 20 +7665.387061 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E3D + 8 +HOLZ + 10 +7184.802766 + 20 +7667.849156 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E3E + 8 +HOLZ + 10 +7190.181339 + 20 +7670.115928 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E3F + 8 +HOLZ + 10 +7195.590331 + 20 +7672.2445 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E40 + 8 +HOLZ + 10 +7201.045413 + 20 +7674.303051 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E41 + 8 +HOLZ + 10 +7206.562257 + 20 +7676.359759 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E42 + 8 +HOLZ + 10 +7212.156532 + 20 +7678.482802 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E43 + 8 +HOLZ + 10 +7217.843911 + 20 +7680.740358 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E44 + 8 +HOLZ + 10 +7223.640063 + 20 +7683.200607 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E45 + 8 +HOLZ + 10 +7229.560661 + 20 +7685.931726 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E46 + 8 +HOLZ + 10 +7235.616765 + 20 +7688.976096 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E47 + 8 +HOLZ + 10 +7241.801002 + 20 +7692.272911 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E48 + 8 +HOLZ + 10 +7248.101388 + 20 +7695.735565 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E49 + 8 +HOLZ + 10 +7254.50594 + 20 +7699.277456 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E4A + 8 +HOLZ + 10 +7261.002673 + 20 +7702.811977 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E4B + 8 +HOLZ + 10 +7267.579606 + 20 +7706.252526 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E4C + 8 +HOLZ + 10 +7274.224754 + 20 +7709.512497 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E4D + 8 +HOLZ + 10 +7280.926134 + 20 +7712.505286 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E4E + 8 +HOLZ + 10 +7124.234024 + 20 +7618.161328 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +E4F + 8 +HOLZ + 10 +7142.168694 + 20 +7644.577634 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +E50 + 8 +HOLZ + 10 +7184.645452 + 20 +7670.050524 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +E51 + 8 +HOLZ + 10 +7228.066091 + 20 +7682.315206 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +E52 + 8 +HOLZ + 10 +7262.991464 + 20 +7704.957739 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +E53 + 8 +HOLZ + 10 +7280.926134 + 20 +7712.505286 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +E54 + 8 +HOLZ + 0 +POLYLINE + 5 +E55 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +E56 + 8 +HOLZ + 10 +7080.813386 + 20 +7641.747331 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +E57 + 8 +HOLZ + 10 +7080.813386 + 20 +7641.747331 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E58 + 8 +HOLZ + 10 +7097.378513 + 20 +7651.155614 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E59 + 8 +HOLZ + 10 +7111.213259 + 20 +7658.992115 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E5A + 8 +HOLZ + 10 +7122.684499 + 20 +7665.453997 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E5B + 8 +HOLZ + 10 +7132.159113 + 20 +7670.738425 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E5C + 8 +HOLZ + 10 +7140.003977 + 20 +7675.04256 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E5D + 8 +HOLZ + 10 +7146.58597 + 20 +7678.563569 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E5E + 8 +HOLZ + 10 +7152.271968 + 20 +7681.498613 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E5F + 8 +HOLZ + 10 +7157.42885 + 20 +7684.044857 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E60 + 8 +HOLZ + 10 +7162.370489 + 20 +7686.376892 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E61 + 8 +HOLZ + 10 +7167.198746 + 20 +7688.57902 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E62 + 8 +HOLZ + 10 +7171.962475 + 20 +7690.712969 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E63 + 8 +HOLZ + 10 +7176.710535 + 20 +7692.840468 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E64 + 8 +HOLZ + 10 +7181.491779 + 20 +7695.023248 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E65 + 8 +HOLZ + 10 +7186.355065 + 20 +7697.323036 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E66 + 8 +HOLZ + 10 +7191.349248 + 20 +7699.801561 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E67 + 8 +HOLZ + 10 +7196.523184 + 20 +7702.520553 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E68 + 8 +HOLZ + 10 +7201.904529 + 20 +7705.52055 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E69 + 8 +HOLZ + 10 +7207.436128 + 20 +7708.757329 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E6A + 8 +HOLZ + 10 +7213.039629 + 20 +7712.165475 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E6B + 8 +HOLZ + 10 +7218.636677 + 20 +7715.679573 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E6C + 8 +HOLZ + 10 +7224.148917 + 20 +7719.234211 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E6D + 8 +HOLZ + 10 +7229.497997 + 20 +7722.763972 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E6E + 8 +HOLZ + 10 +7234.605561 + 20 +7726.203444 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E6F + 8 +HOLZ + 10 +7239.393255 + 20 +7729.487212 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E70 + 8 +HOLZ + 10 +7128.953683 + 20 +7669.107053 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +E71 + 8 +HOLZ + 10 +7159.159397 + 20 +7686.08898 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +E72 + 8 +HOLZ + 10 +7194.084684 + 20 +7699.297133 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +E73 + 8 +HOLZ + 10 +7227.122211 + 20 +7720.996249 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +E74 + 8 +HOLZ + 10 +7239.393255 + 20 +7729.487212 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +E75 + 8 +HOLZ + 0 +POLYLINE + 5 +E76 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +E77 + 8 +HOLZ + 10 +7087.420891 + 20 +7674.767713 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +E78 + 8 +HOLZ + 10 +7087.420891 + 20 +7674.767713 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E79 + 8 +HOLZ + 10 +7094.673635 + 20 +7686.136888 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E7A + 8 +HOLZ + 10 +7102.789194 + 20 +7695.140095 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E7B + 8 +HOLZ + 10 +7111.479964 + 20 +7702.33013 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E7C + 8 +HOLZ + 10 +7120.458342 + 20 +7708.259791 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E7D + 8 +HOLZ + 10 +7129.436724 + 20 +7713.481874 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E7E + 8 +HOLZ + 10 +7138.127506 + 20 +7718.549177 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E7F + 8 +HOLZ + 10 +7146.243086 + 20 +7724.014496 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E80 + 8 +HOLZ + 10 +7153.495858 + 20 +7730.430629 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +E81 + 8 +HOLZ + 10 +7105.355474 + 20 +7708.731512 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +E82 + 8 +HOLZ + 10 +7135.561188 + 20 +7711.561815 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +E83 + 8 +HOLZ + 10 +7153.495858 + 20 +7730.430629 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +E84 + 8 +HOLZ + 0 +POLYLINE + 5 +E85 + 8 +SCHNITTKANTEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +25D8 + 8 +SCHNITTKANTEN + 10 +3705.0 + 20 +3790.0 + 30 +0.0 + 0 +VERTEX + 5 +25D9 + 8 +SCHNITTKANTEN + 10 +17440.0 + 20 +3790.0 + 30 +0.0 + 0 +SEQEND + 5 +25DA + 8 +SCHNITTKANTEN + 0 +INSERT + 5 +E89 + 8 +SCHRAFFUR + 2 +*X3 + 10 +0.0 + 20 +-750.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI33,I +1040 +1200.0 +1040 +0.0 +1002 +} + 0 +LINE + 5 +E8A + 8 +0 + 62 + 0 + 10 +9248.630945 + 20 +3790.0 + 30 +0.0 + 11 +9365.0 + 21 +3906.369055 + 31 +0.0 + 0 +LINE + 5 +E8B + 8 +0 + 62 + 0 + 10 +9071.854249 + 20 +3790.0 + 30 +0.0 + 11 +9365.0 + 21 +4083.145751 + 31 +0.0 + 0 +LINE + 5 +E8C + 8 +0 + 62 + 0 + 10 +9000.0 + 20 +3894.922446 + 30 +0.0 + 11 +9365.0 + 21 +4259.922446 + 31 +0.0 + 0 +LINE + 5 +E8D + 8 +0 + 62 + 0 + 10 +9000.0 + 20 +4071.699141 + 30 +0.0 + 11 +9268.300859 + 21 +4340.0 + 31 +0.0 + 0 +LINE + 5 +E8E + 8 +0 + 62 + 0 + 10 +9000.0 + 20 +4248.475836 + 30 +0.0 + 11 +9091.524164 + 21 +4340.0 + 31 +0.0 + 0 +LINE + 5 +E8F + 8 +0 + 62 + 0 + 10 +4475.660172 + 20 +3790.0 + 30 +0.0 + 11 +4490.0 + 21 +3804.339828 + 31 +0.0 + 0 +LINE + 5 +E90 + 8 +0 + 62 + 0 + 10 +4298.883476 + 20 +3790.0 + 30 +0.0 + 11 +4490.0 + 21 +3981.116524 + 31 +0.0 + 0 +LINE + 5 +E91 + 8 +0 + 62 + 0 + 10 +4125.0 + 20 +3792.893219 + 30 +0.0 + 11 +4490.0 + 21 +4157.893219 + 31 +0.0 + 0 +LINE + 5 +E92 + 8 +0 + 62 + 0 + 10 +4125.0 + 20 +3969.669914 + 30 +0.0 + 11 +4490.0 + 21 +4334.669914 + 31 +0.0 + 0 +LINE + 5 +E93 + 8 +0 + 62 + 0 + 10 +4125.0 + 20 +4146.446609 + 30 +0.0 + 11 +4313.553391 + 21 +4335.0 + 31 +0.0 + 0 +LINE + 5 +E94 + 8 +0 + 62 + 0 + 10 +4125.0 + 20 +4323.223305 + 30 +0.0 + 11 +4136.776695 + 21 +4335.0 + 31 +0.0 + 0 +LINE + 5 +E95 + 8 +0 + 62 + 0 + 10 +4326.776695 + 20 +4525.0 + 30 +0.0 + 11 +4490.0 + 21 +4688.223305 + 31 +0.0 + 0 +LINE + 5 +E96 + 8 +0 + 62 + 0 + 10 +4150.0 + 20 +4525.0 + 30 +0.0 + 11 +4490.0 + 21 +4865.0 + 31 +0.0 + 0 +LINE + 5 +E97 + 8 +0 + 62 + 0 + 10 +4125.0 + 20 +4676.776695 + 30 +0.0 + 11 +4490.0 + 21 +5041.776695 + 31 +0.0 + 0 +LINE + 5 +E98 + 8 +0 + 62 + 0 + 10 +4125.0 + 20 +4853.553391 + 30 +0.0 + 11 +4490.0 + 21 +5218.553391 + 31 +0.0 + 0 +LINE + 5 +E99 + 8 +0 + 62 + 0 + 10 +4125.0 + 20 +5030.330086 + 30 +0.0 + 11 +4490.0 + 21 +5395.330086 + 31 +0.0 + 0 +LINE + 5 +E9A + 8 +0 + 62 + 0 + 10 +4125.0 + 20 +5207.106781 + 30 +0.0 + 11 +4490.0 + 21 +5572.106781 + 31 +0.0 + 0 +LINE + 5 +E9B + 8 +0 + 62 + 0 + 10 +4125.0 + 20 +5383.883476 + 30 +0.0 + 11 +4481.116524 + 21 +5740.0 + 31 +0.0 + 0 +LINE + 5 +E9C + 8 +0 + 62 + 0 + 10 +4125.0 + 20 +5560.660172 + 30 +0.0 + 11 +4304.339828 + 21 +5740.0 + 31 +0.0 + 0 +LINE + 5 +E9D + 8 +0 + 62 + 0 + 10 +4125.0 + 20 +5737.436867 + 30 +0.0 + 11 +4127.563133 + 21 +5740.0 + 31 +0.0 + 0 +LINE + 5 +E9E + 8 +0 + 62 + 0 + 10 +11750.0 + 20 +4170.048712 + 30 +0.0 + 11 +11919.951288 + 21 +4340.0 + 31 +0.0 + 0 +LINE + 5 +E9F + 8 +0 + 62 + 0 + 10 +11750.0 + 20 +3993.272016 + 30 +0.0 + 11 +12096.727984 + 21 +4340.0 + 31 +0.0 + 0 +LINE + 5 +EA0 + 8 +0 + 62 + 0 + 10 +11750.0 + 20 +3816.495321 + 30 +0.0 + 11 +12115.0 + 21 +4181.495321 + 31 +0.0 + 0 +LINE + 5 +EA1 + 8 +0 + 62 + 0 + 10 +11900.281374 + 20 +3790.0 + 30 +0.0 + 11 +12115.0 + 21 +4004.718626 + 31 +0.0 + 0 +LINE + 5 +EA2 + 8 +0 + 62 + 0 + 10 +12077.05807 + 20 +3790.0 + 30 +0.0 + 11 +12115.0 + 21 +3827.94193 + 31 +0.0 + 0 +LINE + 5 +EA3 + 8 +0 + 62 + 0 + 10 +16625.0 + 20 +5686.291501 + 30 +0.0 + 11 +16678.708499 + 21 +5740.0 + 31 +0.0 + 0 +LINE + 5 +EA4 + 8 +0 + 62 + 0 + 10 +16625.0 + 20 +5509.514806 + 30 +0.0 + 11 +16855.485194 + 21 +5740.0 + 31 +0.0 + 0 +LINE + 5 +EA5 + 8 +0 + 62 + 0 + 10 +16625.0 + 20 +5332.73811 + 30 +0.0 + 11 +16990.0 + 21 +5697.73811 + 31 +0.0 + 0 +LINE + 5 +EA6 + 8 +0 + 62 + 0 + 10 +16625.0 + 20 +5155.961415 + 30 +0.0 + 11 +16990.0 + 21 +5520.961415 + 31 +0.0 + 0 +LINE + 5 +EA7 + 8 +0 + 62 + 0 + 10 +16625.0 + 20 +4979.18472 + 30 +0.0 + 11 +16990.0 + 21 +5344.18472 + 31 +0.0 + 0 +LINE + 5 +EA8 + 8 +0 + 62 + 0 + 10 +16625.0 + 20 +4802.408025 + 30 +0.0 + 11 +16990.0 + 21 +5167.408025 + 31 +0.0 + 0 +LINE + 5 +EA9 + 8 +0 + 62 + 0 + 10 +16625.0 + 20 +4625.631329 + 30 +0.0 + 11 +16990.0 + 21 +4990.631329 + 31 +0.0 + 0 +LINE + 5 +EAA + 8 +0 + 62 + 0 + 10 +16701.145366 + 20 +4525.0 + 30 +0.0 + 11 +16990.0 + 21 +4813.854634 + 31 +0.0 + 0 +LINE + 5 +EAB + 8 +0 + 62 + 0 + 10 +16625.0 + 20 +4272.077939 + 30 +0.0 + 11 +16687.922061 + 21 +4335.0 + 31 +0.0 + 0 +LINE + 5 +EAC + 8 +0 + 62 + 0 + 10 +16877.922061 + 20 +4525.0 + 30 +0.0 + 11 +16990.0 + 21 +4637.077939 + 31 +0.0 + 0 +LINE + 5 +EAD + 8 +0 + 62 + 0 + 10 +16625.0 + 20 +4095.301243 + 30 +0.0 + 11 +16864.698757 + 21 +4335.0 + 31 +0.0 + 0 +LINE + 5 +EAE + 8 +0 + 62 + 0 + 10 +16625.0 + 20 +3918.524548 + 30 +0.0 + 11 +16990.0 + 21 +4283.524548 + 31 +0.0 + 0 +LINE + 5 +EAF + 8 +0 + 62 + 0 + 10 +16673.252147 + 20 +3790.0 + 30 +0.0 + 11 +16990.0 + 21 +4106.747853 + 31 +0.0 + 0 +LINE + 5 +EB0 + 8 +0 + 62 + 0 + 10 +16850.028843 + 20 +3790.0 + 30 +0.0 + 11 +16990.0 + 21 +3929.971157 + 31 +0.0 + 0 +LINE + 5 +EB1 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4196.89111 + 30 +0.0 + 11 +4075.0 + 21 +4196.89111 + 31 +0.0 + 0 +LINE + 5 +EB2 + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +4196.89111 + 30 +0.0 + 11 +17050.0 + 21 +4196.89111 + 31 +0.0 + 0 +LINE + 5 +EB3 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4218.541745 + 30 +0.0 + 11 +4112.5 + 21 +4218.541745 + 31 +0.0 + 0 +LINE + 5 +EB4 + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +4218.541745 + 30 +0.0 + 11 +17012.5 + 21 +4218.541745 + 31 +0.0 + 0 +LINE + 5 +EB5 + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +4218.541745 + 30 +0.0 + 11 +17070.0 + 21 +4218.541745 + 31 +0.0 + 0 +LINE + 5 +EB6 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4240.19238 + 30 +0.0 + 11 +4075.0 + 21 +4240.19238 + 31 +0.0 + 0 +LINE + 5 +EB7 + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +4240.19238 + 30 +0.0 + 11 +17050.0 + 21 +4240.19238 + 31 +0.0 + 0 +LINE + 5 +EB8 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4261.843015 + 30 +0.0 + 11 +4112.5 + 21 +4261.843015 + 31 +0.0 + 0 +LINE + 5 +EB9 + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +4261.843015 + 30 +0.0 + 11 +17012.5 + 21 +4261.843015 + 31 +0.0 + 0 +LINE + 5 +EBA + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +4261.843015 + 30 +0.0 + 11 +17070.0 + 21 +4261.843015 + 31 +0.0 + 0 +LINE + 5 +EBB + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4283.49365 + 30 +0.0 + 11 +4075.0 + 21 +4283.49365 + 31 +0.0 + 0 +LINE + 5 +EBC + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +4283.49365 + 30 +0.0 + 11 +17050.0 + 21 +4283.49365 + 31 +0.0 + 0 +LINE + 5 +EBD + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4305.144285 + 30 +0.0 + 11 +4112.5 + 21 +4305.144285 + 31 +0.0 + 0 +LINE + 5 +EBE + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +4305.144285 + 30 +0.0 + 11 +17012.5 + 21 +4305.144285 + 31 +0.0 + 0 +LINE + 5 +EBF + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +4305.144285 + 30 +0.0 + 11 +17070.0 + 21 +4305.144285 + 31 +0.0 + 0 +LINE + 5 +EC0 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4326.79492 + 30 +0.0 + 11 +4075.0 + 21 +4326.79492 + 31 +0.0 + 0 +LINE + 5 +EC1 + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +4326.79492 + 30 +0.0 + 11 +17050.0 + 21 +4326.79492 + 31 +0.0 + 0 +LINE + 5 +EC2 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4348.445555 + 30 +0.0 + 11 +4112.5 + 21 +4348.445555 + 31 +0.0 + 0 +LINE + 5 +EC3 + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +4348.445555 + 30 +0.0 + 11 +17012.5 + 21 +4348.445555 + 31 +0.0 + 0 +LINE + 5 +EC4 + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +4348.445555 + 30 +0.0 + 11 +17070.0 + 21 +4348.445555 + 31 +0.0 + 0 +LINE + 5 +EC5 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4370.09619 + 30 +0.0 + 11 +4075.0 + 21 +4370.09619 + 31 +0.0 + 0 +LINE + 5 +EC6 + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +4370.09619 + 30 +0.0 + 11 +17050.0 + 21 +4370.09619 + 31 +0.0 + 0 +LINE + 5 +EC7 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4391.746825 + 30 +0.0 + 11 +4112.5 + 21 +4391.746825 + 31 +0.0 + 0 +LINE + 5 +EC8 + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +4391.746825 + 30 +0.0 + 11 +17012.5 + 21 +4391.746825 + 31 +0.0 + 0 +LINE + 5 +EC9 + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +4391.746825 + 30 +0.0 + 11 +17070.0 + 21 +4391.746825 + 31 +0.0 + 0 +LINE + 5 +ECA + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4413.39746 + 30 +0.0 + 11 +4075.0 + 21 +4413.39746 + 31 +0.0 + 0 +LINE + 5 +ECB + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +4413.39746 + 30 +0.0 + 11 +17050.0 + 21 +4413.39746 + 31 +0.0 + 0 +LINE + 5 +ECC + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4435.048095 + 30 +0.0 + 11 +4112.5 + 21 +4435.048095 + 31 +0.0 + 0 +LINE + 5 +ECD + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +4435.048095 + 30 +0.0 + 11 +17012.5 + 21 +4435.048095 + 31 +0.0 + 0 +LINE + 5 +ECE + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +4435.048095 + 30 +0.0 + 11 +17070.0 + 21 +4435.048095 + 31 +0.0 + 0 +LINE + 5 +ECF + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4456.69873 + 30 +0.0 + 11 +4075.0 + 21 +4456.69873 + 31 +0.0 + 0 +LINE + 5 +ED0 + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +4456.69873 + 30 +0.0 + 11 +17050.0 + 21 +4456.69873 + 31 +0.0 + 0 +LINE + 5 +ED1 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4478.349365 + 30 +0.0 + 11 +4112.5 + 21 +4478.349365 + 31 +0.0 + 0 +LINE + 5 +ED2 + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +4478.349365 + 30 +0.0 + 11 +17012.5 + 21 +4478.349365 + 31 +0.0 + 0 +LINE + 5 +ED3 + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +4478.349365 + 30 +0.0 + 11 +17070.0 + 21 +4478.349365 + 31 +0.0 + 0 +LINE + 5 +ED4 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4500.0 + 30 +0.0 + 11 +4075.0 + 21 +4500.0 + 31 +0.0 + 0 +LINE + 5 +ED5 + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +4500.0 + 30 +0.0 + 11 +17050.0 + 21 +4500.0 + 31 +0.0 + 0 +LINE + 5 +ED6 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4521.650635 + 30 +0.0 + 11 +4112.5 + 21 +4521.650635 + 31 +0.0 + 0 +LINE + 5 +ED7 + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +4521.650635 + 30 +0.0 + 11 +17012.5 + 21 +4521.650635 + 31 +0.0 + 0 +LINE + 5 +ED8 + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +4521.650635 + 30 +0.0 + 11 +17070.0 + 21 +4521.650635 + 31 +0.0 + 0 +LINE + 5 +ED9 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4543.30127 + 30 +0.0 + 11 +4075.0 + 21 +4543.30127 + 31 +0.0 + 0 +LINE + 5 +EDA + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +4543.30127 + 30 +0.0 + 11 +17050.0 + 21 +4543.30127 + 31 +0.0 + 0 +LINE + 5 +EDB + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4564.951905 + 30 +0.0 + 11 +4112.5 + 21 +4564.951905 + 31 +0.0 + 0 +LINE + 5 +EDC + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +4564.951905 + 30 +0.0 + 11 +17012.5 + 21 +4564.951905 + 31 +0.0 + 0 +LINE + 5 +EDD + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +4564.951905 + 30 +0.0 + 11 +17070.0 + 21 +4564.951905 + 31 +0.0 + 0 +LINE + 5 +EDE + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4586.60254 + 30 +0.0 + 11 +4075.0 + 21 +4586.60254 + 31 +0.0 + 0 +LINE + 5 +EDF + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +4586.60254 + 30 +0.0 + 11 +17050.0 + 21 +4586.60254 + 31 +0.0 + 0 +LINE + 5 +EE0 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4608.253175 + 30 +0.0 + 11 +4112.5 + 21 +4608.253175 + 31 +0.0 + 0 +LINE + 5 +EE1 + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +4608.253175 + 30 +0.0 + 11 +17012.5 + 21 +4608.253175 + 31 +0.0 + 0 +LINE + 5 +EE2 + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +4608.253175 + 30 +0.0 + 11 +17070.0 + 21 +4608.253175 + 31 +0.0 + 0 +LINE + 5 +EE3 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4629.90381 + 30 +0.0 + 11 +4075.0 + 21 +4629.90381 + 31 +0.0 + 0 +LINE + 5 +EE4 + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +4629.90381 + 30 +0.0 + 11 +17050.0 + 21 +4629.90381 + 31 +0.0 + 0 +LINE + 5 +EE5 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4651.554445 + 30 +0.0 + 11 +4112.5 + 21 +4651.554445 + 31 +0.0 + 0 +LINE + 5 +EE6 + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +4651.554445 + 30 +0.0 + 11 +17012.5 + 21 +4651.554445 + 31 +0.0 + 0 +LINE + 5 +EE7 + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +4651.554445 + 30 +0.0 + 11 +17070.0 + 21 +4651.554445 + 31 +0.0 + 0 +LINE + 5 +EE8 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4673.20508 + 30 +0.0 + 11 +4075.0 + 21 +4673.20508 + 31 +0.0 + 0 +LINE + 5 +EE9 + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +4673.20508 + 30 +0.0 + 11 +17050.0 + 21 +4673.20508 + 31 +0.0 + 0 +LINE + 5 +EEA + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4694.855715 + 30 +0.0 + 11 +4112.5 + 21 +4694.855715 + 31 +0.0 + 0 +LINE + 5 +EEB + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +4694.855715 + 30 +0.0 + 11 +17012.5 + 21 +4694.855715 + 31 +0.0 + 0 +LINE + 5 +EEC + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +4694.855715 + 30 +0.0 + 11 +17070.0 + 21 +4694.855715 + 31 +0.0 + 0 +LINE + 5 +EED + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4716.50635 + 30 +0.0 + 11 +4075.0 + 21 +4716.50635 + 31 +0.0 + 0 +LINE + 5 +EEE + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +4716.50635 + 30 +0.0 + 11 +17050.0 + 21 +4716.50635 + 31 +0.0 + 0 +LINE + 5 +EEF + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4738.156985 + 30 +0.0 + 11 +4112.5 + 21 +4738.156985 + 31 +0.0 + 0 +LINE + 5 +EF0 + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +4738.156985 + 30 +0.0 + 11 +17012.5 + 21 +4738.156985 + 31 +0.0 + 0 +LINE + 5 +EF1 + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +4738.156985 + 30 +0.0 + 11 +17070.0 + 21 +4738.156985 + 31 +0.0 + 0 +LINE + 5 +EF2 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4759.80762 + 30 +0.0 + 11 +4075.0 + 21 +4759.80762 + 31 +0.0 + 0 +LINE + 5 +EF3 + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +4759.80762 + 30 +0.0 + 11 +17050.0 + 21 +4759.80762 + 31 +0.0 + 0 +LINE + 5 +EF4 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4781.458255 + 30 +0.0 + 11 +4112.5 + 21 +4781.458255 + 31 +0.0 + 0 +LINE + 5 +EF5 + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +4781.458255 + 30 +0.0 + 11 +17012.5 + 21 +4781.458255 + 31 +0.0 + 0 +LINE + 5 +EF6 + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +4781.458255 + 30 +0.0 + 11 +17070.0 + 21 +4781.458255 + 31 +0.0 + 0 +LINE + 5 +EF7 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4803.10889 + 30 +0.0 + 11 +4075.0 + 21 +4803.10889 + 31 +0.0 + 0 +LINE + 5 +EF8 + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +4803.10889 + 30 +0.0 + 11 +17050.0 + 21 +4803.10889 + 31 +0.0 + 0 +LINE + 5 +EF9 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4824.759525 + 30 +0.0 + 11 +4112.5 + 21 +4824.759525 + 31 +0.0 + 0 +LINE + 5 +EFA + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +4824.759525 + 30 +0.0 + 11 +17012.5 + 21 +4824.759525 + 31 +0.0 + 0 +LINE + 5 +EFB + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +4824.759525 + 30 +0.0 + 11 +17070.0 + 21 +4824.759525 + 31 +0.0 + 0 +LINE + 5 +EFC + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4846.41016 + 30 +0.0 + 11 +4075.0 + 21 +4846.41016 + 31 +0.0 + 0 +LINE + 5 +EFD + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +4846.41016 + 30 +0.0 + 11 +17050.0 + 21 +4846.41016 + 31 +0.0 + 0 +LINE + 5 +EFE + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4868.060795 + 30 +0.0 + 11 +4112.5 + 21 +4868.060795 + 31 +0.0 + 0 +LINE + 5 +EFF + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +4868.060795 + 30 +0.0 + 11 +17012.5 + 21 +4868.060795 + 31 +0.0 + 0 +LINE + 5 +F00 + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +4868.060795 + 30 +0.0 + 11 +17070.0 + 21 +4868.060795 + 31 +0.0 + 0 +LINE + 5 +F01 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4889.71143 + 30 +0.0 + 11 +4075.0 + 21 +4889.71143 + 31 +0.0 + 0 +LINE + 5 +F02 + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +4889.71143 + 30 +0.0 + 11 +17050.0 + 21 +4889.71143 + 31 +0.0 + 0 +LINE + 5 +F03 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4911.362065 + 30 +0.0 + 11 +4112.5 + 21 +4911.362065 + 31 +0.0 + 0 +LINE + 5 +F04 + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +4911.362065 + 30 +0.0 + 11 +17012.5 + 21 +4911.362065 + 31 +0.0 + 0 +LINE + 5 +F05 + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +4911.362065 + 30 +0.0 + 11 +17070.0 + 21 +4911.362065 + 31 +0.0 + 0 +LINE + 5 +F06 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4933.0127 + 30 +0.0 + 11 +4075.0 + 21 +4933.0127 + 31 +0.0 + 0 +LINE + 5 +F07 + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +4933.0127 + 30 +0.0 + 11 +17050.0 + 21 +4933.0127 + 31 +0.0 + 0 +LINE + 5 +F08 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4954.663335 + 30 +0.0 + 11 +4112.5 + 21 +4954.663335 + 31 +0.0 + 0 +LINE + 5 +F09 + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +4954.663335 + 30 +0.0 + 11 +17012.5 + 21 +4954.663335 + 31 +0.0 + 0 +LINE + 5 +F0A + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +4954.663335 + 30 +0.0 + 11 +17070.0 + 21 +4954.663335 + 31 +0.0 + 0 +LINE + 5 +F0B + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4976.31397 + 30 +0.0 + 11 +4075.0 + 21 +4976.31397 + 31 +0.0 + 0 +LINE + 5 +F0C + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +4976.31397 + 30 +0.0 + 11 +17050.0 + 21 +4976.31397 + 31 +0.0 + 0 +LINE + 5 +F0D + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4997.964605 + 30 +0.0 + 11 +4112.5 + 21 +4997.964605 + 31 +0.0 + 0 +LINE + 5 +F0E + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +4997.964605 + 30 +0.0 + 11 +17012.5 + 21 +4997.964605 + 31 +0.0 + 0 +LINE + 5 +F0F + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +4997.964605 + 30 +0.0 + 11 +17070.0 + 21 +4997.964605 + 31 +0.0 + 0 +LINE + 5 +F10 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +5019.61524 + 30 +0.0 + 11 +4075.0 + 21 +5019.61524 + 31 +0.0 + 0 +LINE + 5 +F11 + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +5019.61524 + 30 +0.0 + 11 +17050.0 + 21 +5019.61524 + 31 +0.0 + 0 +LINE + 5 +F12 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +5041.265875 + 30 +0.0 + 11 +4112.5 + 21 +5041.265875 + 31 +0.0 + 0 +LINE + 5 +F13 + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +5041.265875 + 30 +0.0 + 11 +17012.5 + 21 +5041.265875 + 31 +0.0 + 0 +LINE + 5 +F14 + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +5041.265875 + 30 +0.0 + 11 +17070.0 + 21 +5041.265875 + 31 +0.0 + 0 +LINE + 5 +F15 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +5062.91651 + 30 +0.0 + 11 +4075.0 + 21 +5062.91651 + 31 +0.0 + 0 +LINE + 5 +F16 + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +5062.91651 + 30 +0.0 + 11 +17050.0 + 21 +5062.91651 + 31 +0.0 + 0 +LINE + 5 +F17 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +5084.567145 + 30 +0.0 + 11 +4112.5 + 21 +5084.567145 + 31 +0.0 + 0 +LINE + 5 +F18 + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +5084.567145 + 30 +0.0 + 11 +17012.5 + 21 +5084.567145 + 31 +0.0 + 0 +LINE + 5 +F19 + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +5084.567145 + 30 +0.0 + 11 +17070.0 + 21 +5084.567145 + 31 +0.0 + 0 +LINE + 5 +F1A + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +5106.21778 + 30 +0.0 + 11 +4075.0 + 21 +5106.21778 + 31 +0.0 + 0 +LINE + 5 +F1B + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +5106.21778 + 30 +0.0 + 11 +17050.0 + 21 +5106.21778 + 31 +0.0 + 0 +LINE + 5 +F1C + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +5127.868415 + 30 +0.0 + 11 +4112.5 + 21 +5127.868415 + 31 +0.0 + 0 +LINE + 5 +F1D + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +5127.868415 + 30 +0.0 + 11 +17012.5 + 21 +5127.868415 + 31 +0.0 + 0 +LINE + 5 +F1E + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +5127.868415 + 30 +0.0 + 11 +17070.0 + 21 +5127.868415 + 31 +0.0 + 0 +LINE + 5 +F1F + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +5149.51905 + 30 +0.0 + 11 +4075.0 + 21 +5149.51905 + 31 +0.0 + 0 +LINE + 5 +F20 + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +5149.51905 + 30 +0.0 + 11 +17050.0 + 21 +5149.51905 + 31 +0.0 + 0 +LINE + 5 +F21 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +5171.169685 + 30 +0.0 + 11 +4112.5 + 21 +5171.169685 + 31 +0.0 + 0 +LINE + 5 +F22 + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +5171.169685 + 30 +0.0 + 11 +17012.5 + 21 +5171.169685 + 31 +0.0 + 0 +LINE + 5 +F23 + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +5171.169685 + 30 +0.0 + 11 +17070.0 + 21 +5171.169685 + 31 +0.0 + 0 +LINE + 5 +F24 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +5192.82032 + 30 +0.0 + 11 +4075.0 + 21 +5192.82032 + 31 +0.0 + 0 +LINE + 5 +F25 + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +5192.82032 + 30 +0.0 + 11 +17050.0 + 21 +5192.82032 + 31 +0.0 + 0 +LINE + 5 +F26 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +5214.470955 + 30 +0.0 + 11 +4112.5 + 21 +5214.470955 + 31 +0.0 + 0 +LINE + 5 +F27 + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +5214.470955 + 30 +0.0 + 11 +17012.5 + 21 +5214.470955 + 31 +0.0 + 0 +LINE + 5 +F28 + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +5214.470955 + 30 +0.0 + 11 +17070.0 + 21 +5214.470955 + 31 +0.0 + 0 +LINE + 5 +F29 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +5236.12159 + 30 +0.0 + 11 +4075.0 + 21 +5236.12159 + 31 +0.0 + 0 +LINE + 5 +F2A + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +5236.12159 + 30 +0.0 + 11 +17050.0 + 21 +5236.12159 + 31 +0.0 + 0 +LINE + 5 +F2B + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +5257.772225 + 30 +0.0 + 11 +4112.5 + 21 +5257.772225 + 31 +0.0 + 0 +LINE + 5 +F2C + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +5257.772225 + 30 +0.0 + 11 +17012.5 + 21 +5257.772225 + 31 +0.0 + 0 +LINE + 5 +F2D + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +5257.772225 + 30 +0.0 + 11 +17070.0 + 21 +5257.772225 + 31 +0.0 + 0 +LINE + 5 +F2E + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +5279.42286 + 30 +0.0 + 11 +4075.0 + 21 +5279.42286 + 31 +0.0 + 0 +LINE + 5 +F2F + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +5279.42286 + 30 +0.0 + 11 +17050.0 + 21 +5279.42286 + 31 +0.0 + 0 +LINE + 5 +F30 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +5301.073495 + 30 +0.0 + 11 +4112.5 + 21 +5301.073495 + 31 +0.0 + 0 +LINE + 5 +F31 + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +5301.073495 + 30 +0.0 + 11 +17012.5 + 21 +5301.073495 + 31 +0.0 + 0 +LINE + 5 +F32 + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +5301.073495 + 30 +0.0 + 11 +17070.0 + 21 +5301.073495 + 31 +0.0 + 0 +LINE + 5 +F33 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +5322.72413 + 30 +0.0 + 11 +4075.0 + 21 +5322.72413 + 31 +0.0 + 0 +LINE + 5 +F34 + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +5322.72413 + 30 +0.0 + 11 +17050.0 + 21 +5322.72413 + 31 +0.0 + 0 +LINE + 5 +F35 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +5344.374765 + 30 +0.0 + 11 +4112.5 + 21 +5344.374765 + 31 +0.0 + 0 +LINE + 5 +F36 + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +5344.374765 + 30 +0.0 + 11 +17012.5 + 21 +5344.374765 + 31 +0.0 + 0 +LINE + 5 +F37 + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +5344.374765 + 30 +0.0 + 11 +17070.0 + 21 +5344.374765 + 31 +0.0 + 0 +LINE + 5 +F38 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +5366.0254 + 30 +0.0 + 11 +4075.0 + 21 +5366.0254 + 31 +0.0 + 0 +LINE + 5 +F39 + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +5366.0254 + 30 +0.0 + 11 +17050.0 + 21 +5366.0254 + 31 +0.0 + 0 +LINE + 5 +F3A + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +5387.676035 + 30 +0.0 + 11 +4112.5 + 21 +5387.676035 + 31 +0.0 + 0 +LINE + 5 +F3B + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +5387.676035 + 30 +0.0 + 11 +17012.5 + 21 +5387.676035 + 31 +0.0 + 0 +LINE + 5 +F3C + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +5387.676035 + 30 +0.0 + 11 +17070.0 + 21 +5387.676035 + 31 +0.0 + 0 +LINE + 5 +F3D + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +5409.32667 + 30 +0.0 + 11 +4075.0 + 21 +5409.32667 + 31 +0.0 + 0 +LINE + 5 +F3E + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +5409.32667 + 30 +0.0 + 11 +17050.0 + 21 +5409.32667 + 31 +0.0 + 0 +LINE + 5 +F3F + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +5430.977305 + 30 +0.0 + 11 +4112.5 + 21 +5430.977305 + 31 +0.0 + 0 +LINE + 5 +F40 + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +5430.977305 + 30 +0.0 + 11 +17012.5 + 21 +5430.977305 + 31 +0.0 + 0 +LINE + 5 +F41 + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +5430.977305 + 30 +0.0 + 11 +17070.0 + 21 +5430.977305 + 31 +0.0 + 0 +LINE + 5 +F42 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +5452.62794 + 30 +0.0 + 11 +4075.0 + 21 +5452.62794 + 31 +0.0 + 0 +LINE + 5 +F43 + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +5452.62794 + 30 +0.0 + 11 +17050.0 + 21 +5452.62794 + 31 +0.0 + 0 +LINE + 5 +F44 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +5474.278575 + 30 +0.0 + 11 +4112.5 + 21 +5474.278575 + 31 +0.0 + 0 +LINE + 5 +F45 + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +5474.278575 + 30 +0.0 + 11 +17012.5 + 21 +5474.278575 + 31 +0.0 + 0 +LINE + 5 +F46 + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +5474.278575 + 30 +0.0 + 11 +17070.0 + 21 +5474.278575 + 31 +0.0 + 0 +LINE + 5 +F47 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +5495.92921 + 30 +0.0 + 11 +4075.0 + 21 +5495.92921 + 31 +0.0 + 0 +LINE + 5 +F48 + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +5495.92921 + 30 +0.0 + 11 +17050.0 + 21 +5495.92921 + 31 +0.0 + 0 +LINE + 5 +F49 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +5517.579845 + 30 +0.0 + 11 +4112.5 + 21 +5517.579845 + 31 +0.0 + 0 +LINE + 5 +F4A + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +5517.579845 + 30 +0.0 + 11 +17012.5 + 21 +5517.579845 + 31 +0.0 + 0 +LINE + 5 +F4B + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +5517.579845 + 30 +0.0 + 11 +17070.0 + 21 +5517.579845 + 31 +0.0 + 0 +LINE + 5 +F4C + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +5539.23048 + 30 +0.0 + 11 +4075.0 + 21 +5539.23048 + 31 +0.0 + 0 +LINE + 5 +F4D + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +5539.23048 + 30 +0.0 + 11 +17050.0 + 21 +5539.23048 + 31 +0.0 + 0 +LINE + 5 +F4E + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +5560.881115 + 30 +0.0 + 11 +4112.5 + 21 +5560.881115 + 31 +0.0 + 0 +LINE + 5 +F4F + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +5560.881115 + 30 +0.0 + 11 +17012.5 + 21 +5560.881115 + 31 +0.0 + 0 +LINE + 5 +F50 + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +5560.881115 + 30 +0.0 + 11 +17070.0 + 21 +5560.881115 + 31 +0.0 + 0 +LINE + 5 +F51 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +5582.53175 + 30 +0.0 + 11 +4075.0 + 21 +5582.53175 + 31 +0.0 + 0 +LINE + 5 +F52 + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +5582.53175 + 30 +0.0 + 11 +17050.0 + 21 +5582.53175 + 31 +0.0 + 0 +LINE + 5 +F53 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +5604.182385 + 30 +0.0 + 11 +4112.5 + 21 +5604.182385 + 31 +0.0 + 0 +LINE + 5 +F54 + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +5604.182385 + 30 +0.0 + 11 +17012.5 + 21 +5604.182385 + 31 +0.0 + 0 +LINE + 5 +F55 + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +5604.182385 + 30 +0.0 + 11 +17070.0 + 21 +5604.182385 + 31 +0.0 + 0 +LINE + 5 +F56 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +5625.83302 + 30 +0.0 + 11 +4075.0 + 21 +5625.83302 + 31 +0.0 + 0 +LINE + 5 +F57 + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +5625.83302 + 30 +0.0 + 11 +17050.0 + 21 +5625.83302 + 31 +0.0 + 0 +LINE + 5 +F58 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +5647.483655 + 30 +0.0 + 11 +4112.5 + 21 +5647.483655 + 31 +0.0 + 0 +LINE + 5 +F59 + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +5647.483655 + 30 +0.0 + 11 +17012.5 + 21 +5647.483655 + 31 +0.0 + 0 +LINE + 5 +F5A + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +5647.483655 + 30 +0.0 + 11 +17070.0 + 21 +5647.483655 + 31 +0.0 + 0 +LINE + 5 +F5B + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +5669.13429 + 30 +0.0 + 11 +4075.0 + 21 +5669.13429 + 31 +0.0 + 0 +LINE + 5 +F5C + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +5669.13429 + 30 +0.0 + 11 +17050.0 + 21 +5669.13429 + 31 +0.0 + 0 +LINE + 5 +F5D + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +5690.784925 + 30 +0.0 + 11 +4112.5 + 21 +5690.784925 + 31 +0.0 + 0 +LINE + 5 +F5E + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +5690.784925 + 30 +0.0 + 11 +17012.5 + 21 +5690.784925 + 31 +0.0 + 0 +LINE + 5 +F5F + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +5690.784925 + 30 +0.0 + 11 +17070.0 + 21 +5690.784925 + 31 +0.0 + 0 +LINE + 5 +F60 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +5712.43556 + 30 +0.0 + 11 +4075.0 + 21 +5712.43556 + 31 +0.0 + 0 +LINE + 5 +F61 + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +5712.43556 + 30 +0.0 + 11 +17050.0 + 21 +5712.43556 + 31 +0.0 + 0 +LINE + 5 +F62 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +5734.086195 + 30 +0.0 + 11 +4112.5 + 21 +5734.086195 + 31 +0.0 + 0 +LINE + 5 +F63 + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +5734.086195 + 30 +0.0 + 11 +17012.5 + 21 +5734.086195 + 31 +0.0 + 0 +LINE + 5 +F64 + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +5734.086195 + 30 +0.0 + 11 +17070.0 + 21 +5734.086195 + 31 +0.0 + 0 +LINE + 5 +F65 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4175.240475 + 30 +0.0 + 11 +4112.5 + 21 +4175.240475 + 31 +0.0 + 0 +LINE + 5 +F66 + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +4175.240475 + 30 +0.0 + 11 +17012.5 + 21 +4175.240475 + 31 +0.0 + 0 +LINE + 5 +F67 + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +4175.240475 + 30 +0.0 + 11 +17070.0 + 21 +4175.240475 + 31 +0.0 + 0 +LINE + 5 +F68 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4153.58984 + 30 +0.0 + 11 +4075.0 + 21 +4153.58984 + 31 +0.0 + 0 +LINE + 5 +F69 + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +4153.58984 + 30 +0.0 + 11 +17050.0 + 21 +4153.58984 + 31 +0.0 + 0 +LINE + 5 +F6A + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4131.939205 + 30 +0.0 + 11 +4112.5 + 21 +4131.939205 + 31 +0.0 + 0 +LINE + 5 +F6B + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +4131.939205 + 30 +0.0 + 11 +17012.5 + 21 +4131.939205 + 31 +0.0 + 0 +LINE + 5 +F6C + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +4131.939205 + 30 +0.0 + 11 +17070.0 + 21 +4131.939205 + 31 +0.0 + 0 +LINE + 5 +F6D + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4110.28857 + 30 +0.0 + 11 +4075.0 + 21 +4110.28857 + 31 +0.0 + 0 +LINE + 5 +F6E + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +4110.28857 + 30 +0.0 + 11 +17050.0 + 21 +4110.28857 + 31 +0.0 + 0 +LINE + 5 +F6F + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4088.637935 + 30 +0.0 + 11 +4112.5 + 21 +4088.637935 + 31 +0.0 + 0 +LINE + 5 +F70 + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +4088.637935 + 30 +0.0 + 11 +17012.5 + 21 +4088.637935 + 31 +0.0 + 0 +LINE + 5 +F71 + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +4088.637935 + 30 +0.0 + 11 +17070.0 + 21 +4088.637935 + 31 +0.0 + 0 +LINE + 5 +F72 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4066.9873 + 30 +0.0 + 11 +4075.0 + 21 +4066.9873 + 31 +0.0 + 0 +LINE + 5 +F73 + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +4066.9873 + 30 +0.0 + 11 +17050.0 + 21 +4066.9873 + 31 +0.0 + 0 +LINE + 5 +F74 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4045.336665 + 30 +0.0 + 11 +4112.5 + 21 +4045.336665 + 31 +0.0 + 0 +LINE + 5 +F75 + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +4045.336665 + 30 +0.0 + 11 +17012.5 + 21 +4045.336665 + 31 +0.0 + 0 +LINE + 5 +F76 + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +4045.336665 + 30 +0.0 + 11 +17070.0 + 21 +4045.336665 + 31 +0.0 + 0 +LINE + 5 +F77 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4023.68603 + 30 +0.0 + 11 +4075.0 + 21 +4023.68603 + 31 +0.0 + 0 +LINE + 5 +F78 + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +4023.68603 + 30 +0.0 + 11 +17050.0 + 21 +4023.68603 + 31 +0.0 + 0 +LINE + 5 +F79 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4002.035395 + 30 +0.0 + 11 +4112.5 + 21 +4002.035395 + 31 +0.0 + 0 +LINE + 5 +F7A + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +4002.035395 + 30 +0.0 + 11 +17012.5 + 21 +4002.035395 + 31 +0.0 + 0 +LINE + 5 +F7B + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +4002.035395 + 30 +0.0 + 11 +17070.0 + 21 +4002.035395 + 31 +0.0 + 0 +LINE + 5 +F7C + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +3980.38476 + 30 +0.0 + 11 +4075.0 + 21 +3980.38476 + 31 +0.0 + 0 +LINE + 5 +F7D + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +3980.38476 + 30 +0.0 + 11 +17050.0 + 21 +3980.38476 + 31 +0.0 + 0 +LINE + 5 +F7E + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +3958.734125 + 30 +0.0 + 11 +4112.5 + 21 +3958.734125 + 31 +0.0 + 0 +LINE + 5 +F7F + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +3958.734125 + 30 +0.0 + 11 +17012.5 + 21 +3958.734125 + 31 +0.0 + 0 +LINE + 5 +F80 + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +3958.734125 + 30 +0.0 + 11 +17070.0 + 21 +3958.734125 + 31 +0.0 + 0 +LINE + 5 +F81 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +3937.08349 + 30 +0.0 + 11 +4075.0 + 21 +3937.08349 + 31 +0.0 + 0 +LINE + 5 +F82 + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +3937.08349 + 30 +0.0 + 11 +17050.0 + 21 +3937.08349 + 31 +0.0 + 0 +LINE + 5 +F83 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +3915.432855 + 30 +0.0 + 11 +4112.5 + 21 +3915.432855 + 31 +0.0 + 0 +LINE + 5 +F84 + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +3915.432855 + 30 +0.0 + 11 +17012.5 + 21 +3915.432855 + 31 +0.0 + 0 +LINE + 5 +F85 + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +3915.432855 + 30 +0.0 + 11 +17070.0 + 21 +3915.432855 + 31 +0.0 + 0 +LINE + 5 +F86 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +3893.78222 + 30 +0.0 + 11 +4075.0 + 21 +3893.78222 + 31 +0.0 + 0 +LINE + 5 +F87 + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +3893.78222 + 30 +0.0 + 11 +17050.0 + 21 +3893.78222 + 31 +0.0 + 0 +LINE + 5 +F88 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +3872.131585 + 30 +0.0 + 11 +4112.5 + 21 +3872.131585 + 31 +0.0 + 0 +LINE + 5 +F89 + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +3872.131585 + 30 +0.0 + 11 +17012.5 + 21 +3872.131585 + 31 +0.0 + 0 +LINE + 5 +F8A + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +3872.131585 + 30 +0.0 + 11 +17070.0 + 21 +3872.131585 + 31 +0.0 + 0 +LINE + 5 +F8B + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +3850.48095 + 30 +0.0 + 11 +4075.0 + 21 +3850.48095 + 31 +0.0 + 0 +LINE + 5 +F8C + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +3850.48095 + 30 +0.0 + 11 +17050.0 + 21 +3850.48095 + 31 +0.0 + 0 +LINE + 5 +F8D + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +3828.830315 + 30 +0.0 + 11 +4112.5 + 21 +3828.830315 + 31 +0.0 + 0 +LINE + 5 +F8E + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +3828.830315 + 30 +0.0 + 11 +17012.5 + 21 +3828.830315 + 31 +0.0 + 0 +LINE + 5 +F8F + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +3828.830315 + 30 +0.0 + 11 +17070.0 + 21 +3828.830315 + 31 +0.0 + 0 +LINE + 5 +F90 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +3807.17968 + 30 +0.0 + 11 +4075.0 + 21 +3807.17968 + 31 +0.0 + 0 +LINE + 5 +F91 + 8 +0 + 62 + 0 + 10 +17025.0 + 20 +3807.17968 + 30 +0.0 + 11 +17050.0 + 21 +3807.17968 + 31 +0.0 + 0 +LINE + 5 +F92 + 8 +0 + 62 + 0 + 10 +16990.0 + 20 +3785.529045 + 30 +0.0 + 11 +17012.5 + 21 +3785.529045 + 31 +0.0 + 0 +LINE + 5 +F93 + 8 +0 + 62 + 0 + 10 +17062.5 + 20 +3785.529045 + 30 +0.0 + 11 +17070.0 + 21 +3785.529045 + 31 +0.0 + 0 +LINE + 5 +F94 + 8 +0 + 62 + 0 + 10 +4124.999998 + 20 +5712.435564 + 30 +0.0 + 11 +4112.499998 + 21 +5734.086199 + 31 +0.0 + 0 +LINE + 5 +F95 + 8 +0 + 62 + 0 + 10 +4124.999998 + 20 +5669.134294 + 30 +0.0 + 11 +4112.499998 + 21 +5690.784929 + 31 +0.0 + 0 +LINE + 5 +F96 + 8 +0 + 62 + 0 + 10 +4087.499998 + 20 +5734.086199 + 30 +0.0 + 11 +4084.085663 + 21 +5740.0 + 31 +0.0 + 0 +LINE + 5 +F97 + 8 +0 + 62 + 0 + 10 +4124.999998 + 20 +5625.833024 + 30 +0.0 + 11 +4112.499998 + 21 +5647.483659 + 31 +0.0 + 0 +LINE + 5 +F98 + 8 +0 + 62 + 0 + 10 +4087.499998 + 20 +5690.784929 + 30 +0.0 + 11 +4074.999998 + 21 +5712.435564 + 31 +0.0 + 0 +LINE + 5 +F99 + 8 +0 + 62 + 0 + 10 +4124.999998 + 20 +5582.531754 + 30 +0.0 + 11 +4112.499998 + 21 +5604.182389 + 31 +0.0 + 0 +LINE + 5 +F9A + 8 +0 + 62 + 0 + 10 +4087.499998 + 20 +5647.483659 + 30 +0.0 + 11 +4074.999998 + 21 +5669.134294 + 31 +0.0 + 0 +LINE + 5 +F9B + 8 +0 + 62 + 0 + 10 +4049.999998 + 20 +5712.435564 + 30 +0.0 + 11 +4045.0 + 21 +5721.095815 + 31 +0.0 + 0 +LINE + 5 +F9C + 8 +0 + 62 + 0 + 10 +4124.999998 + 20 +5539.230483 + 30 +0.0 + 11 +4112.499998 + 21 +5560.881119 + 31 +0.0 + 0 +LINE + 5 +F9D + 8 +0 + 62 + 0 + 10 +4087.499998 + 20 +5604.182389 + 30 +0.0 + 11 +4074.999998 + 21 +5625.833024 + 31 +0.0 + 0 +LINE + 5 +F9E + 8 +0 + 62 + 0 + 10 +4049.999998 + 20 +5669.134294 + 30 +0.0 + 11 +4045.0 + 21 +5677.794545 + 31 +0.0 + 0 +LINE + 5 +F9F + 8 +0 + 62 + 0 + 10 +4124.999998 + 20 +5495.929213 + 30 +0.0 + 11 +4112.499998 + 21 +5517.579848 + 31 +0.0 + 0 +LINE + 5 +FA0 + 8 +0 + 62 + 0 + 10 +4087.499998 + 20 +5560.881119 + 30 +0.0 + 11 +4074.999998 + 21 +5582.531754 + 31 +0.0 + 0 +LINE + 5 +FA1 + 8 +0 + 62 + 0 + 10 +4049.999998 + 20 +5625.833024 + 30 +0.0 + 11 +4045.0 + 21 +5634.493275 + 31 +0.0 + 0 +LINE + 5 +FA2 + 8 +0 + 62 + 0 + 10 +4124.999998 + 20 +5452.627943 + 30 +0.0 + 11 +4112.499998 + 21 +5474.278578 + 31 +0.0 + 0 +LINE + 5 +FA3 + 8 +0 + 62 + 0 + 10 +4087.499998 + 20 +5517.579848 + 30 +0.0 + 11 +4074.999998 + 21 +5539.230484 + 31 +0.0 + 0 +LINE + 5 +FA4 + 8 +0 + 62 + 0 + 10 +4049.999998 + 20 +5582.531754 + 30 +0.0 + 11 +4045.0 + 21 +5591.192005 + 31 +0.0 + 0 +LINE + 5 +FA5 + 8 +0 + 62 + 0 + 10 +4124.999998 + 20 +5409.326673 + 30 +0.0 + 11 +4112.499998 + 21 +5430.977308 + 31 +0.0 + 0 +LINE + 5 +FA6 + 8 +0 + 62 + 0 + 10 +4087.499998 + 20 +5474.278578 + 30 +0.0 + 11 +4074.999998 + 21 +5495.929213 + 31 +0.0 + 0 +LINE + 5 +FA7 + 8 +0 + 62 + 0 + 10 +4049.999998 + 20 +5539.230484 + 30 +0.0 + 11 +4045.0 + 21 +5547.890735 + 31 +0.0 + 0 +LINE + 5 +FA8 + 8 +0 + 62 + 0 + 10 +4124.999998 + 20 +5366.025403 + 30 +0.0 + 11 +4112.499998 + 21 +5387.676038 + 31 +0.0 + 0 +LINE + 5 +FA9 + 8 +0 + 62 + 0 + 10 +4087.499998 + 20 +5430.977308 + 30 +0.0 + 11 +4074.999998 + 21 +5452.627943 + 31 +0.0 + 0 +LINE + 5 +FAA + 8 +0 + 62 + 0 + 10 +4049.999998 + 20 +5495.929213 + 30 +0.0 + 11 +4045.0 + 21 +5504.589465 + 31 +0.0 + 0 +LINE + 5 +FAB + 8 +0 + 62 + 0 + 10 +4124.999998 + 20 +5322.724133 + 30 +0.0 + 11 +4112.499998 + 21 +5344.374768 + 31 +0.0 + 0 +LINE + 5 +FAC + 8 +0 + 62 + 0 + 10 +4087.499998 + 20 +5387.676038 + 30 +0.0 + 11 +4074.999998 + 21 +5409.326673 + 31 +0.0 + 0 +LINE + 5 +FAD + 8 +0 + 62 + 0 + 10 +4049.999998 + 20 +5452.627943 + 30 +0.0 + 11 +4045.0 + 21 +5461.288195 + 31 +0.0 + 0 +LINE + 5 +FAE + 8 +0 + 62 + 0 + 10 +4124.999999 + 20 +5279.422863 + 30 +0.0 + 11 +4112.499999 + 21 +5301.073498 + 31 +0.0 + 0 +LINE + 5 +FAF + 8 +0 + 62 + 0 + 10 +4087.499999 + 20 +5344.374768 + 30 +0.0 + 11 +4074.999999 + 21 +5366.025403 + 31 +0.0 + 0 +LINE + 5 +FB0 + 8 +0 + 62 + 0 + 10 +4049.999999 + 20 +5409.326673 + 30 +0.0 + 11 +4045.0 + 21 +5417.986925 + 31 +0.0 + 0 +LINE + 5 +FB1 + 8 +0 + 62 + 0 + 10 +4124.999999 + 20 +5236.121592 + 30 +0.0 + 11 +4112.499999 + 21 +5257.772228 + 31 +0.0 + 0 +LINE + 5 +FB2 + 8 +0 + 62 + 0 + 10 +4087.499999 + 20 +5301.073498 + 30 +0.0 + 11 +4074.999999 + 21 +5322.724133 + 31 +0.0 + 0 +LINE + 5 +FB3 + 8 +0 + 62 + 0 + 10 +4049.999999 + 20 +5366.025403 + 30 +0.0 + 11 +4045.0 + 21 +5374.685655 + 31 +0.0 + 0 +LINE + 5 +FB4 + 8 +0 + 62 + 0 + 10 +4124.999999 + 20 +5192.820322 + 30 +0.0 + 11 +4112.499999 + 21 +5214.470957 + 31 +0.0 + 0 +LINE + 5 +FB5 + 8 +0 + 62 + 0 + 10 +4087.499999 + 20 +5257.772228 + 30 +0.0 + 11 +4074.999999 + 21 +5279.422863 + 31 +0.0 + 0 +LINE + 5 +FB6 + 8 +0 + 62 + 0 + 10 +4049.999999 + 20 +5322.724133 + 30 +0.0 + 11 +4045.0 + 21 +5331.384385 + 31 +0.0 + 0 +LINE + 5 +FB7 + 8 +0 + 62 + 0 + 10 +4124.999999 + 20 +5149.519052 + 30 +0.0 + 11 +4112.499999 + 21 +5171.169687 + 31 +0.0 + 0 +LINE + 5 +FB8 + 8 +0 + 62 + 0 + 10 +4087.499999 + 20 +5214.470957 + 30 +0.0 + 11 +4074.999999 + 21 +5236.121593 + 31 +0.0 + 0 +LINE + 5 +FB9 + 8 +0 + 62 + 0 + 10 +4049.999999 + 20 +5279.422863 + 30 +0.0 + 11 +4045.0 + 21 +5288.083115 + 31 +0.0 + 0 +LINE + 5 +FBA + 8 +0 + 62 + 0 + 10 +4124.999999 + 20 +5106.217782 + 30 +0.0 + 11 +4112.499999 + 21 +5127.868417 + 31 +0.0 + 0 +LINE + 5 +FBB + 8 +0 + 62 + 0 + 10 +4087.499999 + 20 +5171.169687 + 30 +0.0 + 11 +4074.999999 + 21 +5192.820322 + 31 +0.0 + 0 +LINE + 5 +FBC + 8 +0 + 62 + 0 + 10 +4049.999999 + 20 +5236.121593 + 30 +0.0 + 11 +4045.0 + 21 +5244.781845 + 31 +0.0 + 0 +LINE + 5 +FBD + 8 +0 + 62 + 0 + 10 +4124.999999 + 20 +5062.916512 + 30 +0.0 + 11 +4112.499999 + 21 +5084.567147 + 31 +0.0 + 0 +LINE + 5 +FBE + 8 +0 + 62 + 0 + 10 +4087.499999 + 20 +5127.868417 + 30 +0.0 + 11 +4074.999999 + 21 +5149.519052 + 31 +0.0 + 0 +LINE + 5 +FBF + 8 +0 + 62 + 0 + 10 +4049.999999 + 20 +5192.820322 + 30 +0.0 + 11 +4045.0 + 21 +5201.480575 + 31 +0.0 + 0 +LINE + 5 +FC0 + 8 +0 + 62 + 0 + 10 +4124.999999 + 20 +5019.615242 + 30 +0.0 + 11 +4112.499999 + 21 +5041.265877 + 31 +0.0 + 0 +LINE + 5 +FC1 + 8 +0 + 62 + 0 + 10 +4087.499999 + 20 +5084.567147 + 30 +0.0 + 11 +4074.999999 + 21 +5106.217782 + 31 +0.0 + 0 +LINE + 5 +FC2 + 8 +0 + 62 + 0 + 10 +4049.999999 + 20 +5149.519052 + 30 +0.0 + 11 +4045.0 + 21 +5158.179305 + 31 +0.0 + 0 +LINE + 5 +FC3 + 8 +0 + 62 + 0 + 10 +4124.999999 + 20 +4976.313972 + 30 +0.0 + 11 +4112.499999 + 21 +4997.964607 + 31 +0.0 + 0 +LINE + 5 +FC4 + 8 +0 + 62 + 0 + 10 +4087.499999 + 20 +5041.265877 + 30 +0.0 + 11 +4074.999999 + 21 +5062.916512 + 31 +0.0 + 0 +LINE + 5 +FC5 + 8 +0 + 62 + 0 + 10 +4049.999999 + 20 +5106.217782 + 30 +0.0 + 11 +4045.0 + 21 +5114.878035 + 31 +0.0 + 0 +LINE + 5 +FC6 + 8 +0 + 62 + 0 + 10 +4124.999999 + 20 +4933.012701 + 30 +0.0 + 11 +4112.499999 + 21 +4954.663337 + 31 +0.0 + 0 +LINE + 5 +FC7 + 8 +0 + 62 + 0 + 10 +4087.499999 + 20 +4997.964607 + 30 +0.0 + 11 +4074.999999 + 21 +5019.615242 + 31 +0.0 + 0 +LINE + 5 +FC8 + 8 +0 + 62 + 0 + 10 +4049.999999 + 20 +5062.916512 + 30 +0.0 + 11 +4045.0 + 21 +5071.576765 + 31 +0.0 + 0 +LINE + 5 +FC9 + 8 +0 + 62 + 0 + 10 +4124.999999 + 20 +4889.711431 + 30 +0.0 + 11 +4112.499999 + 21 +4911.362066 + 31 +0.0 + 0 +LINE + 5 +FCA + 8 +0 + 62 + 0 + 10 +4087.499999 + 20 +4954.663337 + 30 +0.0 + 11 +4074.999999 + 21 +4976.313972 + 31 +0.0 + 0 +LINE + 5 +FCB + 8 +0 + 62 + 0 + 10 +4049.999999 + 20 +5019.615242 + 30 +0.0 + 11 +4045.0 + 21 +5028.275495 + 31 +0.0 + 0 +LINE + 5 +FCC + 8 +0 + 62 + 0 + 10 +4124.999999 + 20 +4846.410161 + 30 +0.0 + 11 +4112.499999 + 21 +4868.060796 + 31 +0.0 + 0 +LINE + 5 +FCD + 8 +0 + 62 + 0 + 10 +4087.499999 + 20 +4911.362066 + 30 +0.0 + 11 +4074.999999 + 21 +4933.012702 + 31 +0.0 + 0 +LINE + 5 +FCE + 8 +0 + 62 + 0 + 10 +4049.999999 + 20 +4976.313972 + 30 +0.0 + 11 +4045.0 + 21 +4984.974225 + 31 +0.0 + 0 +LINE + 5 +FCF + 8 +0 + 62 + 0 + 10 +4124.999999 + 20 +4803.108891 + 30 +0.0 + 11 +4112.499999 + 21 +4824.759526 + 31 +0.0 + 0 +LINE + 5 +FD0 + 8 +0 + 62 + 0 + 10 +4087.499999 + 20 +4868.060796 + 30 +0.0 + 11 +4074.999999 + 21 +4889.711431 + 31 +0.0 + 0 +LINE + 5 +FD1 + 8 +0 + 62 + 0 + 10 +4049.999999 + 20 +4933.012702 + 30 +0.0 + 11 +4045.0 + 21 +4941.672955 + 31 +0.0 + 0 +LINE + 5 +FD2 + 8 +0 + 62 + 0 + 10 +4125.0 + 20 +4759.807621 + 30 +0.0 + 11 +4112.5 + 21 +4781.458256 + 31 +0.0 + 0 +LINE + 5 +FD3 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4824.759526 + 30 +0.0 + 11 +4075.0 + 21 +4846.410161 + 31 +0.0 + 0 +LINE + 5 +FD4 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4889.711431 + 30 +0.0 + 11 +4045.0 + 21 +4898.371685 + 31 +0.0 + 0 +LINE + 5 +FD5 + 8 +0 + 62 + 0 + 10 +4125.0 + 20 +4716.506351 + 30 +0.0 + 11 +4112.5 + 21 +4738.156986 + 31 +0.0 + 0 +LINE + 5 +FD6 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4781.458256 + 30 +0.0 + 11 +4075.0 + 21 +4803.108891 + 31 +0.0 + 0 +LINE + 5 +FD7 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4846.410161 + 30 +0.0 + 11 +4045.0 + 21 +4855.070415 + 31 +0.0 + 0 +LINE + 5 +FD8 + 8 +0 + 62 + 0 + 10 +4125.0 + 20 +4673.205081 + 30 +0.0 + 11 +4112.5 + 21 +4694.855716 + 31 +0.0 + 0 +LINE + 5 +FD9 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4738.156986 + 30 +0.0 + 11 +4075.0 + 21 +4759.807621 + 31 +0.0 + 0 +LINE + 5 +FDA + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4803.108891 + 30 +0.0 + 11 +4045.0 + 21 +4811.769145 + 31 +0.0 + 0 +LINE + 5 +FDB + 8 +0 + 62 + 0 + 10 +4125.0 + 20 +4629.90381 + 30 +0.0 + 11 +4112.5 + 21 +4651.554446 + 31 +0.0 + 0 +LINE + 5 +FDC + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4694.855716 + 30 +0.0 + 11 +4075.0 + 21 +4716.506351 + 31 +0.0 + 0 +LINE + 5 +FDD + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4759.807621 + 30 +0.0 + 11 +4045.0 + 21 +4768.467875 + 31 +0.0 + 0 +LINE + 5 +FDE + 8 +0 + 62 + 0 + 10 +4125.0 + 20 +4586.60254 + 30 +0.0 + 11 +4112.5 + 21 +4608.253175 + 31 +0.0 + 0 +LINE + 5 +FDF + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4651.554446 + 30 +0.0 + 11 +4075.0 + 21 +4673.205081 + 31 +0.0 + 0 +LINE + 5 +FE0 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4716.506351 + 30 +0.0 + 11 +4045.0 + 21 +4725.166605 + 31 +0.0 + 0 +LINE + 5 +FE1 + 8 +0 + 62 + 0 + 10 +4125.0 + 20 +4543.30127 + 30 +0.0 + 11 +4112.5 + 21 +4564.951905 + 31 +0.0 + 0 +LINE + 5 +FE2 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4608.253175 + 30 +0.0 + 11 +4075.0 + 21 +4629.903811 + 31 +0.0 + 0 +LINE + 5 +FE3 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4673.205081 + 30 +0.0 + 11 +4045.0 + 21 +4681.865335 + 31 +0.0 + 0 +LINE + 5 +FE4 + 8 +0 + 62 + 0 + 10 +4125.0 + 20 +4500.0 + 30 +0.0 + 11 +4112.5 + 21 +4521.650635 + 31 +0.0 + 0 +LINE + 5 +FE5 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4564.951905 + 30 +0.0 + 11 +4075.0 + 21 +4586.60254 + 31 +0.0 + 0 +LINE + 5 +FE6 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4629.903811 + 30 +0.0 + 11 +4045.0 + 21 +4638.564065 + 31 +0.0 + 0 +LINE + 5 +FE7 + 8 +0 + 62 + 0 + 10 +4125.0 + 20 +4456.69873 + 30 +0.0 + 11 +4112.5 + 21 +4478.349365 + 31 +0.0 + 0 +LINE + 5 +FE8 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4521.650635 + 30 +0.0 + 11 +4075.0 + 21 +4543.30127 + 31 +0.0 + 0 +LINE + 5 +FE9 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4586.60254 + 30 +0.0 + 11 +4045.0 + 21 +4595.262795 + 31 +0.0 + 0 +LINE + 5 +FEA + 8 +0 + 62 + 0 + 10 +4125.0 + 20 +4413.39746 + 30 +0.0 + 11 +4112.5 + 21 +4435.048095 + 31 +0.0 + 0 +LINE + 5 +FEB + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4478.349365 + 30 +0.0 + 11 +4075.0 + 21 +4500.0 + 31 +0.0 + 0 +LINE + 5 +FEC + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4543.30127 + 30 +0.0 + 11 +4045.0 + 21 +4551.961525 + 31 +0.0 + 0 +LINE + 5 +FED + 8 +0 + 62 + 0 + 10 +4125.0 + 20 +4370.09619 + 30 +0.0 + 11 +4112.5 + 21 +4391.746825 + 31 +0.0 + 0 +LINE + 5 +FEE + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4435.048095 + 30 +0.0 + 11 +4075.0 + 21 +4456.69873 + 31 +0.0 + 0 +LINE + 5 +FEF + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4500.0 + 30 +0.0 + 11 +4045.0 + 21 +4508.660255 + 31 +0.0 + 0 +LINE + 5 +FF0 + 8 +0 + 62 + 0 + 10 +4125.0 + 20 +4326.79492 + 30 +0.0 + 11 +4112.5 + 21 +4348.445555 + 31 +0.0 + 0 +LINE + 5 +FF1 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4391.746825 + 30 +0.0 + 11 +4075.0 + 21 +4413.39746 + 31 +0.0 + 0 +LINE + 5 +FF2 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4456.69873 + 30 +0.0 + 11 +4045.0 + 21 +4465.358985 + 31 +0.0 + 0 +LINE + 5 +FF3 + 8 +0 + 62 + 0 + 10 +4125.0 + 20 +4283.49365 + 30 +0.0 + 11 +4112.5 + 21 +4305.144284 + 31 +0.0 + 0 +LINE + 5 +FF4 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4348.445555 + 30 +0.0 + 11 +4075.0 + 21 +4370.09619 + 31 +0.0 + 0 +LINE + 5 +FF5 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4413.39746 + 30 +0.0 + 11 +4045.0 + 21 +4422.057715 + 31 +0.0 + 0 +LINE + 5 +FF6 + 8 +0 + 62 + 0 + 10 +4125.0 + 20 +4240.19238 + 30 +0.0 + 11 +4112.5 + 21 +4261.843014 + 31 +0.0 + 0 +LINE + 5 +FF7 + 8 +0 + 62 + 0 + 10 +4087.5 + 20 +4305.144284 + 30 +0.0 + 11 +4075.0 + 21 +4326.79492 + 31 +0.0 + 0 +LINE + 5 +FF8 + 8 +0 + 62 + 0 + 10 +4050.0 + 20 +4370.09619 + 30 +0.0 + 11 +4045.0 + 21 +4378.756445 + 31 +0.0 + 0 +LINE + 5 +FF9 + 8 +0 + 62 + 0 + 10 +4125.0 + 20 +4196.89111 + 30 +0.0 + 11 +4112.500001 + 21 +4218.541744 + 31 +0.0 + 0 +LINE + 5 +FFA + 8 +0 + 62 + 0 + 10 +4087.500001 + 20 +4261.843014 + 30 +0.0 + 11 +4075.000001 + 21 +4283.493649 + 31 +0.0 + 0 +LINE + 5 +FFB + 8 +0 + 62 + 0 + 10 +4050.000001 + 20 +4326.79492 + 30 +0.0 + 11 +4045.0 + 21 +4335.455175 + 31 +0.0 + 0 +LINE + 5 +FFC + 8 +0 + 62 + 0 + 10 +4125.0 + 20 +4153.58984 + 30 +0.0 + 11 +4112.500001 + 21 +4175.240474 + 31 +0.0 + 0 +LINE + 5 +FFD + 8 +0 + 62 + 0 + 10 +4087.500001 + 20 +4218.541744 + 30 +0.0 + 11 +4075.000001 + 21 +4240.192379 + 31 +0.0 + 0 +LINE + 5 +FFE + 8 +0 + 62 + 0 + 10 +4050.000001 + 20 +4283.493649 + 30 +0.0 + 11 +4045.0 + 21 +4292.153905 + 31 +0.0 + 0 +LINE + 5 +FFF + 8 +0 + 62 + 0 + 10 +4125.0 + 20 +4110.28857 + 30 +0.0 + 11 +4112.500001 + 21 +4131.939204 + 31 +0.0 + 0 +LINE + 5 +1000 + 8 +0 + 62 + 0 + 10 +4087.500001 + 20 +4175.240474 + 30 +0.0 + 11 +4075.000001 + 21 +4196.891109 + 31 +0.0 + 0 +LINE + 5 +1001 + 8 +0 + 62 + 0 + 10 +4050.000001 + 20 +4240.192379 + 30 +0.0 + 11 +4045.0 + 21 +4248.852635 + 31 +0.0 + 0 +LINE + 5 +1002 + 8 +0 + 62 + 0 + 10 +4125.0 + 20 +4066.9873 + 30 +0.0 + 11 +4112.500001 + 21 +4088.637934 + 31 +0.0 + 0 +LINE + 5 +1003 + 8 +0 + 62 + 0 + 10 +4087.500001 + 20 +4131.939204 + 30 +0.0 + 11 +4075.000001 + 21 +4153.589839 + 31 +0.0 + 0 +LINE + 5 +1004 + 8 +0 + 62 + 0 + 10 +4050.000001 + 20 +4196.891109 + 30 +0.0 + 11 +4045.0 + 21 +4205.551365 + 31 +0.0 + 0 +LINE + 5 +1005 + 8 +0 + 62 + 0 + 10 +4125.0 + 20 +4023.68603 + 30 +0.0 + 11 +4112.500001 + 21 +4045.336664 + 31 +0.0 + 0 +LINE + 5 +1006 + 8 +0 + 62 + 0 + 10 +4087.500001 + 20 +4088.637934 + 30 +0.0 + 11 +4075.000001 + 21 +4110.288569 + 31 +0.0 + 0 +LINE + 5 +1007 + 8 +0 + 62 + 0 + 10 +4050.000001 + 20 +4153.589839 + 30 +0.0 + 11 +4045.0 + 21 +4162.250095 + 31 +0.0 + 0 +LINE + 5 +1008 + 8 +0 + 62 + 0 + 10 +4125.0 + 20 +3980.38476 + 30 +0.0 + 11 +4112.500001 + 21 +4002.035393 + 31 +0.0 + 0 +LINE + 5 +1009 + 8 +0 + 62 + 0 + 10 +4087.500001 + 20 +4045.336664 + 30 +0.0 + 11 +4075.000001 + 21 +4066.987299 + 31 +0.0 + 0 +LINE + 5 +100A + 8 +0 + 62 + 0 + 10 +4050.000001 + 20 +4110.288569 + 30 +0.0 + 11 +4045.0 + 21 +4118.948825 + 31 +0.0 + 0 +LINE + 5 +100B + 8 +0 + 62 + 0 + 10 +4125.0 + 20 +3937.08349 + 30 +0.0 + 11 +4112.500001 + 21 +3958.734123 + 31 +0.0 + 0 +LINE + 5 +100C + 8 +0 + 62 + 0 + 10 +4087.500001 + 20 +4002.035393 + 30 +0.0 + 11 +4075.000001 + 21 +4023.686029 + 31 +0.0 + 0 +LINE + 5 +100D + 8 +0 + 62 + 0 + 10 +4050.000001 + 20 +4066.987299 + 30 +0.0 + 11 +4045.0 + 21 +4075.647555 + 31 +0.0 + 0 +LINE + 5 +100E + 8 +0 + 62 + 0 + 10 +4125.0 + 20 +3893.78222 + 30 +0.0 + 11 +4112.500001 + 21 +3915.432853 + 31 +0.0 + 0 +LINE + 5 +100F + 8 +0 + 62 + 0 + 10 +4087.500001 + 20 +3958.734123 + 30 +0.0 + 11 +4075.000001 + 21 +3980.384758 + 31 +0.0 + 0 +LINE + 5 +1010 + 8 +0 + 62 + 0 + 10 +4050.000001 + 20 +4023.686029 + 30 +0.0 + 11 +4045.0 + 21 +4032.346285 + 31 +0.0 + 0 +LINE + 5 +1011 + 8 +0 + 62 + 0 + 10 +4125.0 + 20 +3850.48095 + 30 +0.0 + 11 +4112.500001 + 21 +3872.131583 + 31 +0.0 + 0 +LINE + 5 +1012 + 8 +0 + 62 + 0 + 10 +4087.500001 + 20 +3915.432853 + 30 +0.0 + 11 +4075.000001 + 21 +3937.083488 + 31 +0.0 + 0 +LINE + 5 +1013 + 8 +0 + 62 + 0 + 10 +4050.000001 + 20 +3980.384758 + 30 +0.0 + 11 +4045.0 + 21 +3989.045015 + 31 +0.0 + 0 +LINE + 5 +1014 + 8 +0 + 62 + 0 + 10 +4125.0 + 20 +3807.17968 + 30 +0.0 + 11 +4112.500001 + 21 +3828.830313 + 31 +0.0 + 0 +LINE + 5 +1015 + 8 +0 + 62 + 0 + 10 +4087.500001 + 20 +3872.131583 + 30 +0.0 + 11 +4075.000001 + 21 +3893.782218 + 31 +0.0 + 0 +LINE + 5 +1016 + 8 +0 + 62 + 0 + 10 +4050.000001 + 20 +3937.083488 + 30 +0.0 + 11 +4045.0 + 21 +3945.743745 + 31 +0.0 + 0 +LINE + 5 +1017 + 8 +0 + 62 + 0 + 10 +4087.500001 + 20 +3828.830313 + 30 +0.0 + 11 +4075.000001 + 21 +3850.480948 + 31 +0.0 + 0 +LINE + 5 +1018 + 8 +0 + 62 + 0 + 10 +4050.000001 + 20 +3893.782218 + 30 +0.0 + 11 +4045.0 + 21 +3902.442475 + 31 +0.0 + 0 +LINE + 5 +1019 + 8 +0 + 62 + 0 + 10 +4050.000001 + 20 +3850.480948 + 30 +0.0 + 11 +4045.0 + 21 +3859.141205 + 31 +0.0 + 0 +LINE + 5 +101A + 8 +0 + 62 + 0 + 10 +4050.000002 + 20 +3807.179678 + 30 +0.0 + 11 +4045.0 + 21 +3815.839935 + 31 +0.0 + 0 +LINE + 5 +101B + 8 +0 + 62 + 0 + 10 +17024.999959 + 20 +3807.179653 + 30 +0.0 + 11 +17012.499959 + 21 +3828.830288 + 31 +0.0 + 0 +LINE + 5 +101C + 8 +0 + 62 + 0 + 10 +17062.499959 + 20 +3785.529018 + 30 +0.0 + 11 +17049.999959 + 21 +3807.179653 + 31 +0.0 + 0 +LINE + 5 +101D + 8 +0 + 62 + 0 + 10 +17024.999959 + 20 +3850.480923 + 30 +0.0 + 11 +17012.499959 + 21 +3872.131559 + 31 +0.0 + 0 +LINE + 5 +101E + 8 +0 + 62 + 0 + 10 +17062.499959 + 20 +3828.830288 + 30 +0.0 + 11 +17049.999959 + 21 +3850.480923 + 31 +0.0 + 0 +LINE + 5 +101F + 8 +0 + 62 + 0 + 10 +17024.999959 + 20 +3893.782194 + 30 +0.0 + 11 +17012.499959 + 21 +3915.432829 + 31 +0.0 + 0 +LINE + 5 +1020 + 8 +0 + 62 + 0 + 10 +17062.499959 + 20 +3872.131558 + 30 +0.0 + 11 +17049.999959 + 21 +3893.782194 + 31 +0.0 + 0 +LINE + 5 +1021 + 8 +0 + 62 + 0 + 10 +17024.999959 + 20 +3937.083464 + 30 +0.0 + 11 +17012.499959 + 21 +3958.734099 + 31 +0.0 + 0 +LINE + 5 +1022 + 8 +0 + 62 + 0 + 10 +17062.499959 + 20 +3915.432829 + 30 +0.0 + 11 +17049.999959 + 21 +3937.083464 + 31 +0.0 + 0 +LINE + 5 +1023 + 8 +0 + 62 + 0 + 10 +17024.999959 + 20 +3980.384734 + 30 +0.0 + 11 +17012.499959 + 21 +4002.035369 + 31 +0.0 + 0 +LINE + 5 +1024 + 8 +0 + 62 + 0 + 10 +17062.499959 + 20 +3958.734099 + 30 +0.0 + 11 +17049.999959 + 21 +3980.384734 + 31 +0.0 + 0 +LINE + 5 +1025 + 8 +0 + 62 + 0 + 10 +17024.999959 + 20 +4023.686004 + 30 +0.0 + 11 +17012.499959 + 21 +4045.336639 + 31 +0.0 + 0 +LINE + 5 +1026 + 8 +0 + 62 + 0 + 10 +17062.499959 + 20 +4002.035369 + 30 +0.0 + 11 +17049.999959 + 21 +4023.686004 + 31 +0.0 + 0 +LINE + 5 +1027 + 8 +0 + 62 + 0 + 10 +17024.999959 + 20 +4066.987274 + 30 +0.0 + 11 +17012.499959 + 21 +4088.637909 + 31 +0.0 + 0 +LINE + 5 +1028 + 8 +0 + 62 + 0 + 10 +17062.499958 + 20 +4045.336639 + 30 +0.0 + 11 +17049.999958 + 21 +4066.987274 + 31 +0.0 + 0 +LINE + 5 +1029 + 8 +0 + 62 + 0 + 10 +17024.999958 + 20 +4110.288544 + 30 +0.0 + 11 +17012.499958 + 21 +4131.939179 + 31 +0.0 + 0 +LINE + 5 +102A + 8 +0 + 62 + 0 + 10 +17062.499958 + 20 +4088.637909 + 30 +0.0 + 11 +17049.999958 + 21 +4110.288544 + 31 +0.0 + 0 +LINE + 5 +102B + 8 +0 + 62 + 0 + 10 +17024.999958 + 20 +4153.589814 + 30 +0.0 + 11 +17012.499958 + 21 +4175.24045 + 31 +0.0 + 0 +LINE + 5 +102C + 8 +0 + 62 + 0 + 10 +17062.499958 + 20 +4131.939179 + 30 +0.0 + 11 +17049.999958 + 21 +4153.589814 + 31 +0.0 + 0 +LINE + 5 +102D + 8 +0 + 62 + 0 + 10 +17024.999958 + 20 +4196.891085 + 30 +0.0 + 11 +17012.499958 + 21 +4218.54172 + 31 +0.0 + 0 +LINE + 5 +102E + 8 +0 + 62 + 0 + 10 +17062.499958 + 20 +4175.240449 + 30 +0.0 + 11 +17049.999958 + 21 +4196.891085 + 31 +0.0 + 0 +LINE + 5 +102F + 8 +0 + 62 + 0 + 10 +17024.999958 + 20 +4240.192355 + 30 +0.0 + 11 +17012.499958 + 21 +4261.84299 + 31 +0.0 + 0 +LINE + 5 +1030 + 8 +0 + 62 + 0 + 10 +17062.499958 + 20 +4218.54172 + 30 +0.0 + 11 +17049.999958 + 21 +4240.192355 + 31 +0.0 + 0 +LINE + 5 +1031 + 8 +0 + 62 + 0 + 10 +17024.999958 + 20 +4283.493625 + 30 +0.0 + 11 +17012.499958 + 21 +4305.14426 + 31 +0.0 + 0 +LINE + 5 +1032 + 8 +0 + 62 + 0 + 10 +17062.499958 + 20 +4261.84299 + 30 +0.0 + 11 +17049.999958 + 21 +4283.493625 + 31 +0.0 + 0 +LINE + 5 +1033 + 8 +0 + 62 + 0 + 10 +17024.999958 + 20 +4326.794895 + 30 +0.0 + 11 +17012.499958 + 21 +4348.44553 + 31 +0.0 + 0 +LINE + 5 +1034 + 8 +0 + 62 + 0 + 10 +17062.499958 + 20 +4305.14426 + 30 +0.0 + 11 +17049.999958 + 21 +4326.794895 + 31 +0.0 + 0 +LINE + 5 +1035 + 8 +0 + 62 + 0 + 10 +17024.999958 + 20 +4370.096165 + 30 +0.0 + 11 +17012.499958 + 21 +4391.7468 + 31 +0.0 + 0 +LINE + 5 +1036 + 8 +0 + 62 + 0 + 10 +17062.499958 + 20 +4348.44553 + 30 +0.0 + 11 +17049.999958 + 21 +4370.096165 + 31 +0.0 + 0 +LINE + 5 +1037 + 8 +0 + 62 + 0 + 10 +17024.999958 + 20 +4413.397435 + 30 +0.0 + 11 +17012.499958 + 21 +4435.04807 + 31 +0.0 + 0 +LINE + 5 +1038 + 8 +0 + 62 + 0 + 10 +17062.499958 + 20 +4391.7468 + 30 +0.0 + 11 +17049.999958 + 21 +4413.397435 + 31 +0.0 + 0 +LINE + 5 +1039 + 8 +0 + 62 + 0 + 10 +17024.999958 + 20 +4456.698705 + 30 +0.0 + 11 +17012.499958 + 21 +4478.349341 + 31 +0.0 + 0 +LINE + 5 +103A + 8 +0 + 62 + 0 + 10 +17062.499958 + 20 +4435.04807 + 30 +0.0 + 11 +17049.999958 + 21 +4456.698705 + 31 +0.0 + 0 +LINE + 5 +103B + 8 +0 + 62 + 0 + 10 +17024.999958 + 20 +4499.999976 + 30 +0.0 + 11 +17012.499958 + 21 +4521.650611 + 31 +0.0 + 0 +LINE + 5 +103C + 8 +0 + 62 + 0 + 10 +17062.499958 + 20 +4478.34934 + 30 +0.0 + 11 +17049.999958 + 21 +4499.999976 + 31 +0.0 + 0 +LINE + 5 +103D + 8 +0 + 62 + 0 + 10 +17024.999958 + 20 +4543.301246 + 30 +0.0 + 11 +17012.499958 + 21 +4564.951881 + 31 +0.0 + 0 +LINE + 5 +103E + 8 +0 + 62 + 0 + 10 +17062.499958 + 20 +4521.650611 + 30 +0.0 + 11 +17049.999958 + 21 +4543.301246 + 31 +0.0 + 0 +LINE + 5 +103F + 8 +0 + 62 + 0 + 10 +17024.999958 + 20 +4586.602516 + 30 +0.0 + 11 +17012.499958 + 21 +4608.253151 + 31 +0.0 + 0 +LINE + 5 +1040 + 8 +0 + 62 + 0 + 10 +17062.499957 + 20 +4564.951881 + 30 +0.0 + 11 +17049.999957 + 21 +4586.602516 + 31 +0.0 + 0 +LINE + 5 +1041 + 8 +0 + 62 + 0 + 10 +17024.999957 + 20 +4629.903786 + 30 +0.0 + 11 +17012.499957 + 21 +4651.554421 + 31 +0.0 + 0 +LINE + 5 +1042 + 8 +0 + 62 + 0 + 10 +17062.499957 + 20 +4608.253151 + 30 +0.0 + 11 +17049.999957 + 21 +4629.903786 + 31 +0.0 + 0 +LINE + 5 +1043 + 8 +0 + 62 + 0 + 10 +17024.999957 + 20 +4673.205056 + 30 +0.0 + 11 +17012.499957 + 21 +4694.855691 + 31 +0.0 + 0 +LINE + 5 +1044 + 8 +0 + 62 + 0 + 10 +17062.499957 + 20 +4651.554421 + 30 +0.0 + 11 +17049.999957 + 21 +4673.205056 + 31 +0.0 + 0 +LINE + 5 +1045 + 8 +0 + 62 + 0 + 10 +17024.999957 + 20 +4716.506326 + 30 +0.0 + 11 +17012.499957 + 21 +4738.156961 + 31 +0.0 + 0 +LINE + 5 +1046 + 8 +0 + 62 + 0 + 10 +17062.499957 + 20 +4694.855691 + 30 +0.0 + 11 +17049.999957 + 21 +4716.506326 + 31 +0.0 + 0 +LINE + 5 +1047 + 8 +0 + 62 + 0 + 10 +17024.999957 + 20 +4759.807596 + 30 +0.0 + 11 +17012.499957 + 21 +4781.458232 + 31 +0.0 + 0 +LINE + 5 +1048 + 8 +0 + 62 + 0 + 10 +17062.499957 + 20 +4738.156961 + 30 +0.0 + 11 +17049.999957 + 21 +4759.807596 + 31 +0.0 + 0 +LINE + 5 +1049 + 8 +0 + 62 + 0 + 10 +17024.999957 + 20 +4803.108867 + 30 +0.0 + 11 +17012.499957 + 21 +4824.759502 + 31 +0.0 + 0 +LINE + 5 +104A + 8 +0 + 62 + 0 + 10 +17062.499957 + 20 +4781.458231 + 30 +0.0 + 11 +17049.999957 + 21 +4803.108867 + 31 +0.0 + 0 +LINE + 5 +104B + 8 +0 + 62 + 0 + 10 +17024.999957 + 20 +4846.410137 + 30 +0.0 + 11 +17012.499957 + 21 +4868.060772 + 31 +0.0 + 0 +LINE + 5 +104C + 8 +0 + 62 + 0 + 10 +17062.499957 + 20 +4824.759502 + 30 +0.0 + 11 +17049.999957 + 21 +4846.410137 + 31 +0.0 + 0 +LINE + 5 +104D + 8 +0 + 62 + 0 + 10 +17024.999957 + 20 +4889.711407 + 30 +0.0 + 11 +17012.499957 + 21 +4911.362042 + 31 +0.0 + 0 +LINE + 5 +104E + 8 +0 + 62 + 0 + 10 +17062.499957 + 20 +4868.060772 + 30 +0.0 + 11 +17049.999957 + 21 +4889.711407 + 31 +0.0 + 0 +LINE + 5 +104F + 8 +0 + 62 + 0 + 10 +17024.999957 + 20 +4933.012677 + 30 +0.0 + 11 +17012.499957 + 21 +4954.663312 + 31 +0.0 + 0 +LINE + 5 +1050 + 8 +0 + 62 + 0 + 10 +17062.499957 + 20 +4911.362042 + 30 +0.0 + 11 +17049.999957 + 21 +4933.012677 + 31 +0.0 + 0 +LINE + 5 +1051 + 8 +0 + 62 + 0 + 10 +17024.999957 + 20 +4976.313947 + 30 +0.0 + 11 +17012.499957 + 21 +4997.964582 + 31 +0.0 + 0 +LINE + 5 +1052 + 8 +0 + 62 + 0 + 10 +17062.499957 + 20 +4954.663312 + 30 +0.0 + 11 +17049.999957 + 21 +4976.313947 + 31 +0.0 + 0 +LINE + 5 +1053 + 8 +0 + 62 + 0 + 10 +17024.999957 + 20 +5019.615217 + 30 +0.0 + 11 +17012.499957 + 21 +5041.265852 + 31 +0.0 + 0 +LINE + 5 +1054 + 8 +0 + 62 + 0 + 10 +17062.499957 + 20 +4997.964582 + 30 +0.0 + 11 +17049.999957 + 21 +5019.615217 + 31 +0.0 + 0 +LINE + 5 +1055 + 8 +0 + 62 + 0 + 10 +17024.999957 + 20 +5062.916487 + 30 +0.0 + 11 +17012.499957 + 21 +5084.567123 + 31 +0.0 + 0 +LINE + 5 +1056 + 8 +0 + 62 + 0 + 10 +17062.499957 + 20 +5041.265852 + 30 +0.0 + 11 +17049.999957 + 21 +5062.916487 + 31 +0.0 + 0 +LINE + 5 +1057 + 8 +0 + 62 + 0 + 10 +17024.999957 + 20 +5106.217758 + 30 +0.0 + 11 +17012.499957 + 21 +5127.868393 + 31 +0.0 + 0 +LINE + 5 +1058 + 8 +0 + 62 + 0 + 10 +17062.499956 + 20 +5084.567122 + 30 +0.0 + 11 +17049.999956 + 21 +5106.217758 + 31 +0.0 + 0 +LINE + 5 +1059 + 8 +0 + 62 + 0 + 10 +17024.999956 + 20 +5149.519028 + 30 +0.0 + 11 +17012.499956 + 21 +5171.169663 + 31 +0.0 + 0 +LINE + 5 +105A + 8 +0 + 62 + 0 + 10 +17062.499956 + 20 +5127.868393 + 30 +0.0 + 11 +17049.999956 + 21 +5149.519028 + 31 +0.0 + 0 +LINE + 5 +105B + 8 +0 + 62 + 0 + 10 +17024.999956 + 20 +5192.820298 + 30 +0.0 + 11 +17012.499956 + 21 +5214.470933 + 31 +0.0 + 0 +LINE + 5 +105C + 8 +0 + 62 + 0 + 10 +17062.499956 + 20 +5171.169663 + 30 +0.0 + 11 +17049.999956 + 21 +5192.820298 + 31 +0.0 + 0 +LINE + 5 +105D + 8 +0 + 62 + 0 + 10 +17024.999956 + 20 +5236.121568 + 30 +0.0 + 11 +17012.499956 + 21 +5257.772203 + 31 +0.0 + 0 +LINE + 5 +105E + 8 +0 + 62 + 0 + 10 +17062.499956 + 20 +5214.470933 + 30 +0.0 + 11 +17049.999956 + 21 +5236.121568 + 31 +0.0 + 0 +LINE + 5 +105F + 8 +0 + 62 + 0 + 10 +17024.999956 + 20 +5279.422838 + 30 +0.0 + 11 +17012.499956 + 21 +5301.073473 + 31 +0.0 + 0 +LINE + 5 +1060 + 8 +0 + 62 + 0 + 10 +17062.499956 + 20 +5257.772203 + 30 +0.0 + 11 +17049.999956 + 21 +5279.422838 + 31 +0.0 + 0 +LINE + 5 +1061 + 8 +0 + 62 + 0 + 10 +17024.999956 + 20 +5322.724108 + 30 +0.0 + 11 +17012.499956 + 21 +5344.374743 + 31 +0.0 + 0 +LINE + 5 +1062 + 8 +0 + 62 + 0 + 10 +17062.499956 + 20 +5301.073473 + 30 +0.0 + 11 +17049.999956 + 21 +5322.724108 + 31 +0.0 + 0 +LINE + 5 +1063 + 8 +0 + 62 + 0 + 10 +17024.999956 + 20 +5366.025378 + 30 +0.0 + 11 +17012.499956 + 21 +5387.676014 + 31 +0.0 + 0 +LINE + 5 +1064 + 8 +0 + 62 + 0 + 10 +17062.499956 + 20 +5344.374743 + 30 +0.0 + 11 +17049.999956 + 21 +5366.025378 + 31 +0.0 + 0 +LINE + 5 +1065 + 8 +0 + 62 + 0 + 10 +17024.999956 + 20 +5409.326649 + 30 +0.0 + 11 +17012.499956 + 21 +5430.977284 + 31 +0.0 + 0 +LINE + 5 +1066 + 8 +0 + 62 + 0 + 10 +17062.499956 + 20 +5387.676013 + 30 +0.0 + 11 +17049.999956 + 21 +5409.326649 + 31 +0.0 + 0 +LINE + 5 +1067 + 8 +0 + 62 + 0 + 10 +17024.999956 + 20 +5452.627919 + 30 +0.0 + 11 +17012.499956 + 21 +5474.278554 + 31 +0.0 + 0 +LINE + 5 +1068 + 8 +0 + 62 + 0 + 10 +17062.499956 + 20 +5430.977284 + 30 +0.0 + 11 +17049.999956 + 21 +5452.627919 + 31 +0.0 + 0 +LINE + 5 +1069 + 8 +0 + 62 + 0 + 10 +17024.999956 + 20 +5495.929189 + 30 +0.0 + 11 +17012.499956 + 21 +5517.579824 + 31 +0.0 + 0 +LINE + 5 +106A + 8 +0 + 62 + 0 + 10 +17062.499956 + 20 +5474.278554 + 30 +0.0 + 11 +17049.999956 + 21 +5495.929189 + 31 +0.0 + 0 +LINE + 5 +106B + 8 +0 + 62 + 0 + 10 +17024.999956 + 20 +5539.230459 + 30 +0.0 + 11 +17012.499956 + 21 +5560.881094 + 31 +0.0 + 0 +LINE + 5 +106C + 8 +0 + 62 + 0 + 10 +17062.499956 + 20 +5517.579824 + 30 +0.0 + 11 +17049.999956 + 21 +5539.230459 + 31 +0.0 + 0 +LINE + 5 +106D + 8 +0 + 62 + 0 + 10 +17024.999956 + 20 +5582.531729 + 30 +0.0 + 11 +17012.499956 + 21 +5604.182364 + 31 +0.0 + 0 +LINE + 5 +106E + 8 +0 + 62 + 0 + 10 +17062.499956 + 20 +5560.881094 + 30 +0.0 + 11 +17049.999956 + 21 +5582.531729 + 31 +0.0 + 0 +LINE + 5 +106F + 8 +0 + 62 + 0 + 10 +17024.999956 + 20 +5625.832999 + 30 +0.0 + 11 +17012.499956 + 21 +5647.483634 + 31 +0.0 + 0 +LINE + 5 +1070 + 8 +0 + 62 + 0 + 10 +17062.499956 + 20 +5604.182364 + 30 +0.0 + 11 +17049.999956 + 21 +5625.832999 + 31 +0.0 + 0 +LINE + 5 +1071 + 8 +0 + 62 + 0 + 10 +17024.999956 + 20 +5669.134269 + 30 +0.0 + 11 +17012.499956 + 21 +5690.784905 + 31 +0.0 + 0 +LINE + 5 +1072 + 8 +0 + 62 + 0 + 10 +17062.499955 + 20 +5647.483634 + 30 +0.0 + 11 +17049.999955 + 21 +5669.134269 + 31 +0.0 + 0 +LINE + 5 +1073 + 8 +0 + 62 + 0 + 10 +17024.999955 + 20 +5712.43554 + 30 +0.0 + 11 +17012.499955 + 21 +5734.086175 + 31 +0.0 + 0 +LINE + 5 +1074 + 8 +0 + 62 + 0 + 10 +17062.499955 + 20 +5690.784904 + 30 +0.0 + 11 +17049.999955 + 21 +5712.43554 + 31 +0.0 + 0 +LINE + 5 +1075 + 8 +0 + 62 + 0 + 10 +17062.499955 + 20 +5734.086175 + 30 +0.0 + 11 +17059.085607 + 21 +5740.0 + 31 +0.0 + 0 +LINE + 5 +1076 + 8 +0 + 62 + 0 + 10 +4112.499999 + 20 +3785.529043 + 30 +0.0 + 11 +4124.999999 + 21 +3807.179678 + 31 +0.0 + 0 +LINE + 5 +1077 + 8 +0 + 62 + 0 + 10 +4112.499999 + 20 +3828.830313 + 30 +0.0 + 11 +4124.999999 + 21 +3850.480948 + 31 +0.0 + 0 +LINE + 5 +1078 + 8 +0 + 62 + 0 + 10 +4074.999999 + 20 +3807.179678 + 30 +0.0 + 11 +4087.499999 + 21 +3828.830313 + 31 +0.0 + 0 +LINE + 5 +1079 + 8 +0 + 62 + 0 + 10 +4112.499999 + 20 +3872.131583 + 30 +0.0 + 11 +4124.999999 + 21 +3893.782218 + 31 +0.0 + 0 +LINE + 5 +107A + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +3798.519425 + 30 +0.0 + 11 +4049.999999 + 21 +3807.179678 + 31 +0.0 + 0 +LINE + 5 +107B + 8 +0 + 62 + 0 + 10 +4074.999999 + 20 +3850.480948 + 30 +0.0 + 11 +4087.499999 + 21 +3872.131583 + 31 +0.0 + 0 +LINE + 5 +107C + 8 +0 + 62 + 0 + 10 +4112.499999 + 20 +3915.432853 + 30 +0.0 + 11 +4124.999999 + 21 +3937.083488 + 31 +0.0 + 0 +LINE + 5 +107D + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +3841.820695 + 30 +0.0 + 11 +4049.999999 + 21 +3850.480948 + 31 +0.0 + 0 +LINE + 5 +107E + 8 +0 + 62 + 0 + 10 +4074.999999 + 20 +3893.782218 + 30 +0.0 + 11 +4087.499999 + 21 +3915.432853 + 31 +0.0 + 0 +LINE + 5 +107F + 8 +0 + 62 + 0 + 10 +4112.499999 + 20 +3958.734123 + 30 +0.0 + 11 +4124.999999 + 21 +3980.384758 + 31 +0.0 + 0 +LINE + 5 +1080 + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +3885.121965 + 30 +0.0 + 11 +4049.999999 + 21 +3893.782218 + 31 +0.0 + 0 +LINE + 5 +1081 + 8 +0 + 62 + 0 + 10 +4074.999999 + 20 +3937.083488 + 30 +0.0 + 11 +4087.499999 + 21 +3958.734123 + 31 +0.0 + 0 +LINE + 5 +1082 + 8 +0 + 62 + 0 + 10 +4112.499999 + 20 +4002.035393 + 30 +0.0 + 11 +4124.999999 + 21 +4023.686028 + 31 +0.0 + 0 +LINE + 5 +1083 + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +3928.423235 + 30 +0.0 + 11 +4049.999999 + 21 +3937.083488 + 31 +0.0 + 0 +LINE + 5 +1084 + 8 +0 + 62 + 0 + 10 +4074.999999 + 20 +3980.384758 + 30 +0.0 + 11 +4087.499999 + 21 +4002.035393 + 31 +0.0 + 0 +LINE + 5 +1085 + 8 +0 + 62 + 0 + 10 +4112.499999 + 20 +4045.336663 + 30 +0.0 + 11 +4124.999999 + 21 +4066.987299 + 31 +0.0 + 0 +LINE + 5 +1086 + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +3971.724505 + 30 +0.0 + 11 +4049.999999 + 21 +3980.384758 + 31 +0.0 + 0 +LINE + 5 +1087 + 8 +0 + 62 + 0 + 10 +4074.999999 + 20 +4023.686028 + 30 +0.0 + 11 +4087.499999 + 21 +4045.336663 + 31 +0.0 + 0 +LINE + 5 +1088 + 8 +0 + 62 + 0 + 10 +4112.499999 + 20 +4088.637934 + 30 +0.0 + 11 +4124.999999 + 21 +4110.288569 + 31 +0.0 + 0 +LINE + 5 +1089 + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +4015.025775 + 30 +0.0 + 11 +4049.999999 + 21 +4023.686028 + 31 +0.0 + 0 +LINE + 5 +108A + 8 +0 + 62 + 0 + 10 +4074.999999 + 20 +4066.987298 + 30 +0.0 + 11 +4087.499999 + 21 +4088.637934 + 31 +0.0 + 0 +LINE + 5 +108B + 8 +0 + 62 + 0 + 10 +4112.499999 + 20 +4131.939204 + 30 +0.0 + 11 +4124.999999 + 21 +4153.589839 + 31 +0.0 + 0 +LINE + 5 +108C + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +4058.327045 + 30 +0.0 + 11 +4049.999999 + 21 +4066.987298 + 31 +0.0 + 0 +LINE + 5 +108D + 8 +0 + 62 + 0 + 10 +4074.999999 + 20 +4110.288569 + 30 +0.0 + 11 +4087.499999 + 21 +4131.939204 + 31 +0.0 + 0 +LINE + 5 +108E + 8 +0 + 62 + 0 + 10 +4112.499999 + 20 +4175.240474 + 30 +0.0 + 11 +4124.999999 + 21 +4196.891109 + 31 +0.0 + 0 +LINE + 5 +108F + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +4101.628315 + 30 +0.0 + 11 +4050.0 + 21 +4110.288569 + 31 +0.0 + 0 +LINE + 5 +1090 + 8 +0 + 62 + 0 + 10 +4075.0 + 20 +4153.589839 + 30 +0.0 + 11 +4087.5 + 21 +4175.240474 + 31 +0.0 + 0 +LINE + 5 +1091 + 8 +0 + 62 + 0 + 10 +4112.5 + 20 +4218.541744 + 30 +0.0 + 11 +4125.0 + 21 +4240.192379 + 31 +0.0 + 0 +LINE + 5 +1092 + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +4144.929585 + 30 +0.0 + 11 +4050.0 + 21 +4153.589839 + 31 +0.0 + 0 +LINE + 5 +1093 + 8 +0 + 62 + 0 + 10 +4075.0 + 20 +4196.891109 + 30 +0.0 + 11 +4087.5 + 21 +4218.541744 + 31 +0.0 + 0 +LINE + 5 +1094 + 8 +0 + 62 + 0 + 10 +4112.5 + 20 +4261.843014 + 30 +0.0 + 11 +4125.0 + 21 +4283.493649 + 31 +0.0 + 0 +LINE + 5 +1095 + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +4188.230855 + 30 +0.0 + 11 +4050.0 + 21 +4196.891109 + 31 +0.0 + 0 +LINE + 5 +1096 + 8 +0 + 62 + 0 + 10 +4075.0 + 20 +4240.192379 + 30 +0.0 + 11 +4087.5 + 21 +4261.843014 + 31 +0.0 + 0 +LINE + 5 +1097 + 8 +0 + 62 + 0 + 10 +4112.5 + 20 +4305.144284 + 30 +0.0 + 11 +4125.0 + 21 +4326.794919 + 31 +0.0 + 0 +LINE + 5 +1098 + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +4231.532125 + 30 +0.0 + 11 +4050.0 + 21 +4240.192379 + 31 +0.0 + 0 +LINE + 5 +1099 + 8 +0 + 62 + 0 + 10 +4075.0 + 20 +4283.493649 + 30 +0.0 + 11 +4087.5 + 21 +4305.144284 + 31 +0.0 + 0 +LINE + 5 +109A + 8 +0 + 62 + 0 + 10 +4112.5 + 20 +4348.445554 + 30 +0.0 + 11 +4125.0 + 21 +4370.09619 + 31 +0.0 + 0 +LINE + 5 +109B + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +4274.833395 + 30 +0.0 + 11 +4050.0 + 21 +4283.493649 + 31 +0.0 + 0 +LINE + 5 +109C + 8 +0 + 62 + 0 + 10 +4075.0 + 20 +4326.794919 + 30 +0.0 + 11 +4087.5 + 21 +4348.445554 + 31 +0.0 + 0 +LINE + 5 +109D + 8 +0 + 62 + 0 + 10 +4112.5 + 20 +4391.746825 + 30 +0.0 + 11 +4125.0 + 21 +4413.39746 + 31 +0.0 + 0 +LINE + 5 +109E + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +4318.134665 + 30 +0.0 + 11 +4050.0 + 21 +4326.794919 + 31 +0.0 + 0 +LINE + 5 +109F + 8 +0 + 62 + 0 + 10 +4075.0 + 20 +4370.096189 + 30 +0.0 + 11 +4087.5 + 21 +4391.746825 + 31 +0.0 + 0 +LINE + 5 +10A0 + 8 +0 + 62 + 0 + 10 +4112.5 + 20 +4435.048095 + 30 +0.0 + 11 +4125.0 + 21 +4456.69873 + 31 +0.0 + 0 +LINE + 5 +10A1 + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +4361.435935 + 30 +0.0 + 11 +4050.0 + 21 +4370.096189 + 31 +0.0 + 0 +LINE + 5 +10A2 + 8 +0 + 62 + 0 + 10 +4075.0 + 20 +4413.39746 + 30 +0.0 + 11 +4087.5 + 21 +4435.048095 + 31 +0.0 + 0 +LINE + 5 +10A3 + 8 +0 + 62 + 0 + 10 +4112.5 + 20 +4478.349365 + 30 +0.0 + 11 +4125.0 + 21 +4500.0 + 31 +0.0 + 0 +LINE + 5 +10A4 + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +4404.737205 + 30 +0.0 + 11 +4050.0 + 21 +4413.39746 + 31 +0.0 + 0 +LINE + 5 +10A5 + 8 +0 + 62 + 0 + 10 +4075.0 + 20 +4456.69873 + 30 +0.0 + 11 +4087.5 + 21 +4478.349365 + 31 +0.0 + 0 +LINE + 5 +10A6 + 8 +0 + 62 + 0 + 10 +4112.5 + 20 +4521.650635 + 30 +0.0 + 11 +4125.0 + 21 +4543.30127 + 31 +0.0 + 0 +LINE + 5 +10A7 + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +4448.038475 + 30 +0.0 + 11 +4050.0 + 21 +4456.69873 + 31 +0.0 + 0 +LINE + 5 +10A8 + 8 +0 + 62 + 0 + 10 +4075.0 + 20 +4500.0 + 30 +0.0 + 11 +4087.5 + 21 +4521.650635 + 31 +0.0 + 0 +LINE + 5 +10A9 + 8 +0 + 62 + 0 + 10 +4112.5 + 20 +4564.951905 + 30 +0.0 + 11 +4125.0 + 21 +4586.60254 + 31 +0.0 + 0 +LINE + 5 +10AA + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +4491.339745 + 30 +0.0 + 11 +4050.0 + 21 +4500.0 + 31 +0.0 + 0 +LINE + 5 +10AB + 8 +0 + 62 + 0 + 10 +4075.0 + 20 +4543.30127 + 30 +0.0 + 11 +4087.5 + 21 +4564.951905 + 31 +0.0 + 0 +LINE + 5 +10AC + 8 +0 + 62 + 0 + 10 +4112.5 + 20 +4608.253175 + 30 +0.0 + 11 +4125.0 + 21 +4629.90381 + 31 +0.0 + 0 +LINE + 5 +10AD + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +4534.641015 + 30 +0.0 + 11 +4050.0 + 21 +4543.30127 + 31 +0.0 + 0 +LINE + 5 +10AE + 8 +0 + 62 + 0 + 10 +4075.0 + 20 +4586.60254 + 30 +0.0 + 11 +4087.5 + 21 +4608.253175 + 31 +0.0 + 0 +LINE + 5 +10AF + 8 +0 + 62 + 0 + 10 +4112.5 + 20 +4651.554445 + 30 +0.0 + 11 +4125.0 + 21 +4673.20508 + 31 +0.0 + 0 +LINE + 5 +10B0 + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +4577.942285 + 30 +0.0 + 11 +4050.0 + 21 +4586.60254 + 31 +0.0 + 0 +LINE + 5 +10B1 + 8 +0 + 62 + 0 + 10 +4075.0 + 20 +4629.90381 + 30 +0.0 + 11 +4087.5 + 21 +4651.554445 + 31 +0.0 + 0 +LINE + 5 +10B2 + 8 +0 + 62 + 0 + 10 +4112.5 + 20 +4694.855716 + 30 +0.0 + 11 +4125.0 + 21 +4716.50635 + 31 +0.0 + 0 +LINE + 5 +10B3 + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +4621.243555 + 30 +0.0 + 11 +4050.0 + 21 +4629.90381 + 31 +0.0 + 0 +LINE + 5 +10B4 + 8 +0 + 62 + 0 + 10 +4075.0 + 20 +4673.20508 + 30 +0.0 + 11 +4087.5 + 21 +4694.855716 + 31 +0.0 + 0 +LINE + 5 +10B5 + 8 +0 + 62 + 0 + 10 +4112.5 + 20 +4738.156986 + 30 +0.0 + 11 +4125.0 + 21 +4759.80762 + 31 +0.0 + 0 +LINE + 5 +10B6 + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +4664.544825 + 30 +0.0 + 11 +4050.000001 + 21 +4673.20508 + 31 +0.0 + 0 +LINE + 5 +10B7 + 8 +0 + 62 + 0 + 10 +4075.000001 + 20 +4716.506351 + 30 +0.0 + 11 +4087.500001 + 21 +4738.156986 + 31 +0.0 + 0 +LINE + 5 +10B8 + 8 +0 + 62 + 0 + 10 +4112.500001 + 20 +4781.458256 + 30 +0.0 + 11 +4125.0 + 21 +4803.10889 + 31 +0.0 + 0 +LINE + 5 +10B9 + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +4707.846095 + 30 +0.0 + 11 +4050.000001 + 21 +4716.506351 + 31 +0.0 + 0 +LINE + 5 +10BA + 8 +0 + 62 + 0 + 10 +4075.000001 + 20 +4759.807621 + 30 +0.0 + 11 +4087.500001 + 21 +4781.458256 + 31 +0.0 + 0 +LINE + 5 +10BB + 8 +0 + 62 + 0 + 10 +4112.500001 + 20 +4824.759526 + 30 +0.0 + 11 +4125.0 + 21 +4846.41016 + 31 +0.0 + 0 +LINE + 5 +10BC + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +4751.147365 + 30 +0.0 + 11 +4050.000001 + 21 +4759.807621 + 31 +0.0 + 0 +LINE + 5 +10BD + 8 +0 + 62 + 0 + 10 +4075.000001 + 20 +4803.108891 + 30 +0.0 + 11 +4087.500001 + 21 +4824.759526 + 31 +0.0 + 0 +LINE + 5 +10BE + 8 +0 + 62 + 0 + 10 +4112.500001 + 20 +4868.060796 + 30 +0.0 + 11 +4125.0 + 21 +4889.71143 + 31 +0.0 + 0 +LINE + 5 +10BF + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +4794.448635 + 30 +0.0 + 11 +4050.000001 + 21 +4803.108891 + 31 +0.0 + 0 +LINE + 5 +10C0 + 8 +0 + 62 + 0 + 10 +4075.000001 + 20 +4846.410161 + 30 +0.0 + 11 +4087.500001 + 21 +4868.060796 + 31 +0.0 + 0 +LINE + 5 +10C1 + 8 +0 + 62 + 0 + 10 +4112.500001 + 20 +4911.362066 + 30 +0.0 + 11 +4125.0 + 21 +4933.0127 + 31 +0.0 + 0 +LINE + 5 +10C2 + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +4837.749905 + 30 +0.0 + 11 +4050.000001 + 21 +4846.410161 + 31 +0.0 + 0 +LINE + 5 +10C3 + 8 +0 + 62 + 0 + 10 +4075.000001 + 20 +4889.711431 + 30 +0.0 + 11 +4087.500001 + 21 +4911.362066 + 31 +0.0 + 0 +LINE + 5 +10C4 + 8 +0 + 62 + 0 + 10 +4112.500001 + 20 +4954.663336 + 30 +0.0 + 11 +4125.0 + 21 +4976.31397 + 31 +0.0 + 0 +LINE + 5 +10C5 + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +4881.051175 + 30 +0.0 + 11 +4050.000001 + 21 +4889.711431 + 31 +0.0 + 0 +LINE + 5 +10C6 + 8 +0 + 62 + 0 + 10 +4075.000001 + 20 +4933.012701 + 30 +0.0 + 11 +4087.500001 + 21 +4954.663336 + 31 +0.0 + 0 +LINE + 5 +10C7 + 8 +0 + 62 + 0 + 10 +4112.500001 + 20 +4997.964607 + 30 +0.0 + 11 +4125.0 + 21 +5019.61524 + 31 +0.0 + 0 +LINE + 5 +10C8 + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +4924.352445 + 30 +0.0 + 11 +4050.000001 + 21 +4933.012701 + 31 +0.0 + 0 +LINE + 5 +10C9 + 8 +0 + 62 + 0 + 10 +4075.000001 + 20 +4976.313971 + 30 +0.0 + 11 +4087.500001 + 21 +4997.964607 + 31 +0.0 + 0 +LINE + 5 +10CA + 8 +0 + 62 + 0 + 10 +4112.500001 + 20 +5041.265877 + 30 +0.0 + 11 +4125.0 + 21 +5062.91651 + 31 +0.0 + 0 +LINE + 5 +10CB + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +4967.653715 + 30 +0.0 + 11 +4050.000001 + 21 +4976.313971 + 31 +0.0 + 0 +LINE + 5 +10CC + 8 +0 + 62 + 0 + 10 +4075.000001 + 20 +5019.615242 + 30 +0.0 + 11 +4087.500001 + 21 +5041.265877 + 31 +0.0 + 0 +LINE + 5 +10CD + 8 +0 + 62 + 0 + 10 +4112.500001 + 20 +5084.567147 + 30 +0.0 + 11 +4125.0 + 21 +5106.21778 + 31 +0.0 + 0 +LINE + 5 +10CE + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +5010.954985 + 30 +0.0 + 11 +4050.000001 + 21 +5019.615242 + 31 +0.0 + 0 +LINE + 5 +10CF + 8 +0 + 62 + 0 + 10 +4075.000001 + 20 +5062.916512 + 30 +0.0 + 11 +4087.500001 + 21 +5084.567147 + 31 +0.0 + 0 +LINE + 5 +10D0 + 8 +0 + 62 + 0 + 10 +4112.500001 + 20 +5127.868417 + 30 +0.0 + 11 +4125.0 + 21 +5149.51905 + 31 +0.0 + 0 +LINE + 5 +10D1 + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +5054.256255 + 30 +0.0 + 11 +4050.000001 + 21 +5062.916512 + 31 +0.0 + 0 +LINE + 5 +10D2 + 8 +0 + 62 + 0 + 10 +4075.000001 + 20 +5106.217782 + 30 +0.0 + 11 +4087.500001 + 21 +5127.868417 + 31 +0.0 + 0 +LINE + 5 +10D3 + 8 +0 + 62 + 0 + 10 +4112.500001 + 20 +5171.169687 + 30 +0.0 + 11 +4125.0 + 21 +5192.82032 + 31 +0.0 + 0 +LINE + 5 +10D4 + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +5097.557525 + 30 +0.0 + 11 +4050.000001 + 21 +5106.217782 + 31 +0.0 + 0 +LINE + 5 +10D5 + 8 +0 + 62 + 0 + 10 +4075.000001 + 20 +5149.519052 + 30 +0.0 + 11 +4087.500001 + 21 +5171.169687 + 31 +0.0 + 0 +LINE + 5 +10D6 + 8 +0 + 62 + 0 + 10 +4112.500001 + 20 +5214.470957 + 30 +0.0 + 11 +4125.0 + 21 +5236.12159 + 31 +0.0 + 0 +LINE + 5 +10D7 + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +5140.858795 + 30 +0.0 + 11 +4050.000001 + 21 +5149.519052 + 31 +0.0 + 0 +LINE + 5 +10D8 + 8 +0 + 62 + 0 + 10 +4075.000001 + 20 +5192.820322 + 30 +0.0 + 11 +4087.500001 + 21 +5214.470957 + 31 +0.0 + 0 +LINE + 5 +10D9 + 8 +0 + 62 + 0 + 10 +4112.500001 + 20 +5257.772227 + 30 +0.0 + 11 +4125.0 + 21 +5279.42286 + 31 +0.0 + 0 +LINE + 5 +10DA + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +5184.160065 + 30 +0.0 + 11 +4050.000002 + 21 +5192.820322 + 31 +0.0 + 0 +LINE + 5 +10DB + 8 +0 + 62 + 0 + 10 +4075.000002 + 20 +5236.121592 + 30 +0.0 + 11 +4087.500002 + 21 +5257.772227 + 31 +0.0 + 0 +LINE + 5 +10DC + 8 +0 + 62 + 0 + 10 +4112.500002 + 20 +5301.073498 + 30 +0.0 + 11 +4125.0 + 21 +5322.72413 + 31 +0.0 + 0 +LINE + 5 +10DD + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +5227.461335 + 30 +0.0 + 11 +4050.000002 + 21 +5236.121592 + 31 +0.0 + 0 +LINE + 5 +10DE + 8 +0 + 62 + 0 + 10 +4075.000002 + 20 +5279.422862 + 30 +0.0 + 11 +4087.500002 + 21 +5301.073498 + 31 +0.0 + 0 +LINE + 5 +10DF + 8 +0 + 62 + 0 + 10 +4112.500002 + 20 +5344.374768 + 30 +0.0 + 11 +4125.0 + 21 +5366.0254 + 31 +0.0 + 0 +LINE + 5 +10E0 + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +5270.762605 + 30 +0.0 + 11 +4050.000002 + 21 +5279.422862 + 31 +0.0 + 0 +LINE + 5 +10E1 + 8 +0 + 62 + 0 + 10 +4075.000002 + 20 +5322.724133 + 30 +0.0 + 11 +4087.500002 + 21 +5344.374768 + 31 +0.0 + 0 +LINE + 5 +10E2 + 8 +0 + 62 + 0 + 10 +4112.500002 + 20 +5387.676038 + 30 +0.0 + 11 +4125.0 + 21 +5409.32667 + 31 +0.0 + 0 +LINE + 5 +10E3 + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +5314.063875 + 30 +0.0 + 11 +4050.000002 + 21 +5322.724133 + 31 +0.0 + 0 +LINE + 5 +10E4 + 8 +0 + 62 + 0 + 10 +4075.000002 + 20 +5366.025403 + 30 +0.0 + 11 +4087.500002 + 21 +5387.676038 + 31 +0.0 + 0 +LINE + 5 +10E5 + 8 +0 + 62 + 0 + 10 +4112.500002 + 20 +5430.977308 + 30 +0.0 + 11 +4125.0 + 21 +5452.62794 + 31 +0.0 + 0 +LINE + 5 +10E6 + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +5357.365145 + 30 +0.0 + 11 +4050.000002 + 21 +5366.025403 + 31 +0.0 + 0 +LINE + 5 +10E7 + 8 +0 + 62 + 0 + 10 +4075.000002 + 20 +5409.326673 + 30 +0.0 + 11 +4087.500002 + 21 +5430.977308 + 31 +0.0 + 0 +LINE + 5 +10E8 + 8 +0 + 62 + 0 + 10 +4112.500002 + 20 +5474.278578 + 30 +0.0 + 11 +4125.0 + 21 +5495.92921 + 31 +0.0 + 0 +LINE + 5 +10E9 + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +5400.666415 + 30 +0.0 + 11 +4050.000002 + 21 +5409.326673 + 31 +0.0 + 0 +LINE + 5 +10EA + 8 +0 + 62 + 0 + 10 +4075.000002 + 20 +5452.627943 + 30 +0.0 + 11 +4087.500002 + 21 +5474.278578 + 31 +0.0 + 0 +LINE + 5 +10EB + 8 +0 + 62 + 0 + 10 +4112.500002 + 20 +5517.579848 + 30 +0.0 + 11 +4125.0 + 21 +5539.23048 + 31 +0.0 + 0 +LINE + 5 +10EC + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +5443.967685 + 30 +0.0 + 11 +4050.000002 + 21 +5452.627943 + 31 +0.0 + 0 +LINE + 5 +10ED + 8 +0 + 62 + 0 + 10 +4075.000002 + 20 +5495.929213 + 30 +0.0 + 11 +4087.500002 + 21 +5517.579848 + 31 +0.0 + 0 +LINE + 5 +10EE + 8 +0 + 62 + 0 + 10 +4112.500002 + 20 +5560.881118 + 30 +0.0 + 11 +4125.0 + 21 +5582.53175 + 31 +0.0 + 0 +LINE + 5 +10EF + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +5487.268955 + 30 +0.0 + 11 +4050.000002 + 21 +5495.929213 + 31 +0.0 + 0 +LINE + 5 +10F0 + 8 +0 + 62 + 0 + 10 +4075.000002 + 20 +5539.230483 + 30 +0.0 + 11 +4087.500002 + 21 +5560.881118 + 31 +0.0 + 0 +LINE + 5 +10F1 + 8 +0 + 62 + 0 + 10 +4112.500002 + 20 +5604.182389 + 30 +0.0 + 11 +4125.0 + 21 +5625.83302 + 31 +0.0 + 0 +LINE + 5 +10F2 + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +5530.570225 + 30 +0.0 + 11 +4050.000002 + 21 +5539.230483 + 31 +0.0 + 0 +LINE + 5 +10F3 + 8 +0 + 62 + 0 + 10 +4075.000002 + 20 +5582.531753 + 30 +0.0 + 11 +4087.500002 + 21 +5604.182389 + 31 +0.0 + 0 +LINE + 5 +10F4 + 8 +0 + 62 + 0 + 10 +4112.500002 + 20 +5647.483659 + 30 +0.0 + 11 +4125.0 + 21 +5669.13429 + 31 +0.0 + 0 +LINE + 5 +10F5 + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +5573.871495 + 30 +0.0 + 11 +4050.000002 + 21 +5582.531753 + 31 +0.0 + 0 +LINE + 5 +10F6 + 8 +0 + 62 + 0 + 10 +4075.000002 + 20 +5625.833024 + 30 +0.0 + 11 +4087.500002 + 21 +5647.483659 + 31 +0.0 + 0 +LINE + 5 +10F7 + 8 +0 + 62 + 0 + 10 +4112.500002 + 20 +5690.784929 + 30 +0.0 + 11 +4125.0 + 21 +5712.43556 + 31 +0.0 + 0 +LINE + 5 +10F8 + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +5617.172765 + 30 +0.0 + 11 +4050.000002 + 21 +5625.833024 + 31 +0.0 + 0 +LINE + 5 +10F9 + 8 +0 + 62 + 0 + 10 +4075.000002 + 20 +5669.134294 + 30 +0.0 + 11 +4087.500002 + 21 +5690.784929 + 31 +0.0 + 0 +LINE + 5 +10FA + 8 +0 + 62 + 0 + 10 +4112.500002 + 20 +5734.086199 + 30 +0.0 + 11 +4115.914337 + 21 +5740.0 + 31 +0.0 + 0 +LINE + 5 +10FB + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +5660.474035 + 30 +0.0 + 11 +4050.000002 + 21 +5669.134294 + 31 +0.0 + 0 +LINE + 5 +10FC + 8 +0 + 62 + 0 + 10 +4075.000002 + 20 +5712.435564 + 30 +0.0 + 11 +4087.500002 + 21 +5734.086199 + 31 +0.0 + 0 +LINE + 5 +10FD + 8 +0 + 62 + 0 + 10 +4045.0 + 20 +5703.775305 + 30 +0.0 + 11 +4050.000003 + 21 +5712.435564 + 31 +0.0 + 0 +LINE + 5 +10FE + 8 +0 + 62 + 0 + 10 +17012.49996 + 20 +5734.086223 + 30 +0.0 + 11 +17015.914281 + 21 +5740.0 + 31 +0.0 + 0 +LINE + 5 +10FF + 8 +0 + 62 + 0 + 10 +17012.49996 + 20 +5690.784953 + 30 +0.0 + 11 +17024.99996 + 21 +5712.435588 + 31 +0.0 + 0 +LINE + 5 +1100 + 8 +0 + 62 + 0 + 10 +17012.49996 + 20 +5647.483683 + 30 +0.0 + 11 +17024.99996 + 21 +5669.134318 + 31 +0.0 + 0 +LINE + 5 +1101 + 8 +0 + 62 + 0 + 10 +17049.99996 + 20 +5712.435588 + 30 +0.0 + 11 +17062.49996 + 21 +5734.086224 + 31 +0.0 + 0 +LINE + 5 +1102 + 8 +0 + 62 + 0 + 10 +17012.49996 + 20 +5604.182413 + 30 +0.0 + 11 +17024.99996 + 21 +5625.833048 + 31 +0.0 + 0 +LINE + 5 +1103 + 8 +0 + 62 + 0 + 10 +17049.99996 + 20 +5669.134318 + 30 +0.0 + 11 +17062.49996 + 21 +5690.784953 + 31 +0.0 + 0 +LINE + 5 +1104 + 8 +0 + 62 + 0 + 10 +17012.49996 + 20 +5560.881143 + 30 +0.0 + 11 +17024.99996 + 21 +5582.531778 + 31 +0.0 + 0 +LINE + 5 +1105 + 8 +0 + 62 + 0 + 10 +17049.99996 + 20 +5625.833048 + 30 +0.0 + 11 +17062.49996 + 21 +5647.483683 + 31 +0.0 + 0 +LINE + 5 +1106 + 8 +0 + 62 + 0 + 10 +17012.49996 + 20 +5517.579873 + 30 +0.0 + 11 +17024.99996 + 21 +5539.230508 + 31 +0.0 + 0 +LINE + 5 +1107 + 8 +0 + 62 + 0 + 10 +17049.99996 + 20 +5582.531778 + 30 +0.0 + 11 +17062.49996 + 21 +5604.182413 + 31 +0.0 + 0 +LINE + 5 +1108 + 8 +0 + 62 + 0 + 10 +17012.49996 + 20 +5474.278603 + 30 +0.0 + 11 +17024.99996 + 21 +5495.929238 + 31 +0.0 + 0 +LINE + 5 +1109 + 8 +0 + 62 + 0 + 10 +17049.99996 + 20 +5539.230508 + 30 +0.0 + 11 +17062.49996 + 21 +5560.881143 + 31 +0.0 + 0 +LINE + 5 +110A + 8 +0 + 62 + 0 + 10 +17012.49996 + 20 +5430.977332 + 30 +0.0 + 11 +17024.99996 + 21 +5452.627968 + 31 +0.0 + 0 +LINE + 5 +110B + 8 +0 + 62 + 0 + 10 +17049.99996 + 20 +5495.929238 + 30 +0.0 + 11 +17062.49996 + 21 +5517.579873 + 31 +0.0 + 0 +LINE + 5 +110C + 8 +0 + 62 + 0 + 10 +17012.499959 + 20 +5387.676062 + 30 +0.0 + 11 +17024.999959 + 21 +5409.326697 + 31 +0.0 + 0 +LINE + 5 +110D + 8 +0 + 62 + 0 + 10 +17049.999959 + 20 +5452.627968 + 30 +0.0 + 11 +17062.499959 + 21 +5474.278603 + 31 +0.0 + 0 +LINE + 5 +110E + 8 +0 + 62 + 0 + 10 +17012.499959 + 20 +5344.374792 + 30 +0.0 + 11 +17024.999959 + 21 +5366.025427 + 31 +0.0 + 0 +LINE + 5 +110F + 8 +0 + 62 + 0 + 10 +17049.999959 + 20 +5409.326697 + 30 +0.0 + 11 +17062.499959 + 21 +5430.977333 + 31 +0.0 + 0 +LINE + 5 +1110 + 8 +0 + 62 + 0 + 10 +17012.499959 + 20 +5301.073522 + 30 +0.0 + 11 +17024.999959 + 21 +5322.724157 + 31 +0.0 + 0 +LINE + 5 +1111 + 8 +0 + 62 + 0 + 10 +17049.999959 + 20 +5366.025427 + 30 +0.0 + 11 +17062.499959 + 21 +5387.676062 + 31 +0.0 + 0 +LINE + 5 +1112 + 8 +0 + 62 + 0 + 10 +17012.499959 + 20 +5257.772252 + 30 +0.0 + 11 +17024.999959 + 21 +5279.422887 + 31 +0.0 + 0 +LINE + 5 +1113 + 8 +0 + 62 + 0 + 10 +17049.999959 + 20 +5322.724157 + 30 +0.0 + 11 +17062.499959 + 21 +5344.374792 + 31 +0.0 + 0 +LINE + 5 +1114 + 8 +0 + 62 + 0 + 10 +17012.499959 + 20 +5214.470982 + 30 +0.0 + 11 +17024.999959 + 21 +5236.121617 + 31 +0.0 + 0 +LINE + 5 +1115 + 8 +0 + 62 + 0 + 10 +17049.999959 + 20 +5279.422887 + 30 +0.0 + 11 +17062.499959 + 21 +5301.073522 + 31 +0.0 + 0 +LINE + 5 +1116 + 8 +0 + 62 + 0 + 10 +17012.499959 + 20 +5171.169712 + 30 +0.0 + 11 +17024.999959 + 21 +5192.820347 + 31 +0.0 + 0 +LINE + 5 +1117 + 8 +0 + 62 + 0 + 10 +17049.999959 + 20 +5236.121617 + 30 +0.0 + 11 +17062.499959 + 21 +5257.772252 + 31 +0.0 + 0 +LINE + 5 +1118 + 8 +0 + 62 + 0 + 10 +17012.499959 + 20 +5127.868441 + 30 +0.0 + 11 +17024.999959 + 21 +5149.519077 + 31 +0.0 + 0 +LINE + 5 +1119 + 8 +0 + 62 + 0 + 10 +17049.999959 + 20 +5192.820347 + 30 +0.0 + 11 +17062.499959 + 21 +5214.470982 + 31 +0.0 + 0 +LINE + 5 +111A + 8 +0 + 62 + 0 + 10 +17012.499959 + 20 +5084.567171 + 30 +0.0 + 11 +17024.999959 + 21 +5106.217806 + 31 +0.0 + 0 +LINE + 5 +111B + 8 +0 + 62 + 0 + 10 +17049.999959 + 20 +5149.519077 + 30 +0.0 + 11 +17062.499959 + 21 +5171.169712 + 31 +0.0 + 0 +LINE + 5 +111C + 8 +0 + 62 + 0 + 10 +17012.499959 + 20 +5041.265901 + 30 +0.0 + 11 +17024.999959 + 21 +5062.916536 + 31 +0.0 + 0 +LINE + 5 +111D + 8 +0 + 62 + 0 + 10 +17049.999959 + 20 +5106.217806 + 30 +0.0 + 11 +17062.499959 + 21 +5127.868442 + 31 +0.0 + 0 +LINE + 5 +111E + 8 +0 + 62 + 0 + 10 +17012.499959 + 20 +4997.964631 + 30 +0.0 + 11 +17024.999959 + 21 +5019.615266 + 31 +0.0 + 0 +LINE + 5 +111F + 8 +0 + 62 + 0 + 10 +17049.999959 + 20 +5062.916536 + 30 +0.0 + 11 +17062.499959 + 21 +5084.567171 + 31 +0.0 + 0 +LINE + 5 +1120 + 8 +0 + 62 + 0 + 10 +17012.499959 + 20 +4954.663361 + 30 +0.0 + 11 +17024.999959 + 21 +4976.313996 + 31 +0.0 + 0 +LINE + 5 +1121 + 8 +0 + 62 + 0 + 10 +17049.999959 + 20 +5019.615266 + 30 +0.0 + 11 +17062.499959 + 21 +5041.265901 + 31 +0.0 + 0 +LINE + 5 +1122 + 8 +0 + 62 + 0 + 10 +17012.499959 + 20 +4911.362091 + 30 +0.0 + 11 +17024.999959 + 21 +4933.012726 + 31 +0.0 + 0 +LINE + 5 +1123 + 8 +0 + 62 + 0 + 10 +17049.999959 + 20 +4976.313996 + 30 +0.0 + 11 +17062.499959 + 21 +4997.964631 + 31 +0.0 + 0 +LINE + 5 +1124 + 8 +0 + 62 + 0 + 10 +17012.499958 + 20 +4868.060821 + 30 +0.0 + 11 +17024.999958 + 21 +4889.711456 + 31 +0.0 + 0 +LINE + 5 +1125 + 8 +0 + 62 + 0 + 10 +17049.999958 + 20 +4933.012726 + 30 +0.0 + 11 +17062.499958 + 21 +4954.663361 + 31 +0.0 + 0 +LINE + 5 +1126 + 8 +0 + 62 + 0 + 10 +17012.499958 + 20 +4824.75955 + 30 +0.0 + 11 +17024.999958 + 21 +4846.410186 + 31 +0.0 + 0 +LINE + 5 +1127 + 8 +0 + 62 + 0 + 10 +17049.999958 + 20 +4889.711456 + 30 +0.0 + 11 +17062.499958 + 21 +4911.362091 + 31 +0.0 + 0 +LINE + 5 +1128 + 8 +0 + 62 + 0 + 10 +17012.499958 + 20 +4781.45828 + 30 +0.0 + 11 +17024.999958 + 21 +4803.108915 + 31 +0.0 + 0 +LINE + 5 +1129 + 8 +0 + 62 + 0 + 10 +17049.999958 + 20 +4846.410186 + 30 +0.0 + 11 +17062.499958 + 21 +4868.060821 + 31 +0.0 + 0 +LINE + 5 +112A + 8 +0 + 62 + 0 + 10 +17012.499958 + 20 +4738.15701 + 30 +0.0 + 11 +17024.999958 + 21 +4759.807645 + 31 +0.0 + 0 +LINE + 5 +112B + 8 +0 + 62 + 0 + 10 +17049.999958 + 20 +4803.108915 + 30 +0.0 + 11 +17062.499958 + 21 +4824.759551 + 31 +0.0 + 0 +LINE + 5 +112C + 8 +0 + 62 + 0 + 10 +17012.499958 + 20 +4694.85574 + 30 +0.0 + 11 +17024.999958 + 21 +4716.506375 + 31 +0.0 + 0 +LINE + 5 +112D + 8 +0 + 62 + 0 + 10 +17049.999958 + 20 +4759.807645 + 30 +0.0 + 11 +17062.499958 + 21 +4781.45828 + 31 +0.0 + 0 +LINE + 5 +112E + 8 +0 + 62 + 0 + 10 +17012.499958 + 20 +4651.55447 + 30 +0.0 + 11 +17024.999958 + 21 +4673.205105 + 31 +0.0 + 0 +LINE + 5 +112F + 8 +0 + 62 + 0 + 10 +17049.999958 + 20 +4716.506375 + 30 +0.0 + 11 +17062.499958 + 21 +4738.15701 + 31 +0.0 + 0 +LINE + 5 +1130 + 8 +0 + 62 + 0 + 10 +17012.499958 + 20 +4608.2532 + 30 +0.0 + 11 +17024.999958 + 21 +4629.903835 + 31 +0.0 + 0 +LINE + 5 +1131 + 8 +0 + 62 + 0 + 10 +17049.999958 + 20 +4673.205105 + 30 +0.0 + 11 +17062.499958 + 21 +4694.85574 + 31 +0.0 + 0 +LINE + 5 +1132 + 8 +0 + 62 + 0 + 10 +17012.499958 + 20 +4564.95193 + 30 +0.0 + 11 +17024.999958 + 21 +4586.602565 + 31 +0.0 + 0 +LINE + 5 +1133 + 8 +0 + 62 + 0 + 10 +17049.999958 + 20 +4629.903835 + 30 +0.0 + 11 +17062.499958 + 21 +4651.55447 + 31 +0.0 + 0 +LINE + 5 +1134 + 8 +0 + 62 + 0 + 10 +17012.499958 + 20 +4521.650659 + 30 +0.0 + 11 +17024.999958 + 21 +4543.301295 + 31 +0.0 + 0 +LINE + 5 +1135 + 8 +0 + 62 + 0 + 10 +17049.999958 + 20 +4586.602565 + 30 +0.0 + 11 +17062.499958 + 21 +4608.2532 + 31 +0.0 + 0 +LINE + 5 +1136 + 8 +0 + 62 + 0 + 10 +17012.499958 + 20 +4478.349389 + 30 +0.0 + 11 +17024.999958 + 21 +4500.000024 + 31 +0.0 + 0 +LINE + 5 +1137 + 8 +0 + 62 + 0 + 10 +17049.999958 + 20 +4543.301295 + 30 +0.0 + 11 +17062.499958 + 21 +4564.95193 + 31 +0.0 + 0 +LINE + 5 +1138 + 8 +0 + 62 + 0 + 10 +17012.499958 + 20 +4435.048119 + 30 +0.0 + 11 +17024.999958 + 21 +4456.698754 + 31 +0.0 + 0 +LINE + 5 +1139 + 8 +0 + 62 + 0 + 10 +17049.999958 + 20 +4500.000024 + 30 +0.0 + 11 +17062.499958 + 21 +4521.65066 + 31 +0.0 + 0 +LINE + 5 +113A + 8 +0 + 62 + 0 + 10 +17012.499958 + 20 +4391.746849 + 30 +0.0 + 11 +17024.999958 + 21 +4413.397484 + 31 +0.0 + 0 +LINE + 5 +113B + 8 +0 + 62 + 0 + 10 +17049.999958 + 20 +4456.698754 + 30 +0.0 + 11 +17062.499958 + 21 +4478.349389 + 31 +0.0 + 0 +LINE + 5 +113C + 8 +0 + 62 + 0 + 10 +17012.499957 + 20 +4348.445579 + 30 +0.0 + 11 +17024.999957 + 21 +4370.096214 + 31 +0.0 + 0 +LINE + 5 +113D + 8 +0 + 62 + 0 + 10 +17049.999957 + 20 +4413.397484 + 30 +0.0 + 11 +17062.499957 + 21 +4435.048119 + 31 +0.0 + 0 +LINE + 5 +113E + 8 +0 + 62 + 0 + 10 +17012.499957 + 20 +4305.144309 + 30 +0.0 + 11 +17024.999957 + 21 +4326.794944 + 31 +0.0 + 0 +LINE + 5 +113F + 8 +0 + 62 + 0 + 10 +17049.999957 + 20 +4370.096214 + 30 +0.0 + 11 +17062.499957 + 21 +4391.746849 + 31 +0.0 + 0 +LINE + 5 +1140 + 8 +0 + 62 + 0 + 10 +17012.499957 + 20 +4261.843039 + 30 +0.0 + 11 +17024.999957 + 21 +4283.493674 + 31 +0.0 + 0 +LINE + 5 +1141 + 8 +0 + 62 + 0 + 10 +17049.999957 + 20 +4326.794944 + 30 +0.0 + 11 +17062.499957 + 21 +4348.445579 + 31 +0.0 + 0 +LINE + 5 +1142 + 8 +0 + 62 + 0 + 10 +17012.499957 + 20 +4218.541768 + 30 +0.0 + 11 +17024.999957 + 21 +4240.192404 + 31 +0.0 + 0 +LINE + 5 +1143 + 8 +0 + 62 + 0 + 10 +17049.999957 + 20 +4283.493674 + 30 +0.0 + 11 +17062.499957 + 21 +4305.144309 + 31 +0.0 + 0 +LINE + 5 +1144 + 8 +0 + 62 + 0 + 10 +17012.499957 + 20 +4175.240498 + 30 +0.0 + 11 +17024.999957 + 21 +4196.891133 + 31 +0.0 + 0 +LINE + 5 +1145 + 8 +0 + 62 + 0 + 10 +17049.999957 + 20 +4240.192404 + 30 +0.0 + 11 +17062.499957 + 21 +4261.843039 + 31 +0.0 + 0 +LINE + 5 +1146 + 8 +0 + 62 + 0 + 10 +17012.499957 + 20 +4131.939228 + 30 +0.0 + 11 +17024.999957 + 21 +4153.589863 + 31 +0.0 + 0 +LINE + 5 +1147 + 8 +0 + 62 + 0 + 10 +17049.999957 + 20 +4196.891133 + 30 +0.0 + 11 +17062.499957 + 21 +4218.541769 + 31 +0.0 + 0 +LINE + 5 +1148 + 8 +0 + 62 + 0 + 10 +17012.499957 + 20 +4088.637958 + 30 +0.0 + 11 +17024.999957 + 21 +4110.288593 + 31 +0.0 + 0 +LINE + 5 +1149 + 8 +0 + 62 + 0 + 10 +17049.999957 + 20 +4153.589863 + 30 +0.0 + 11 +17062.499957 + 21 +4175.240498 + 31 +0.0 + 0 +LINE + 5 +114A + 8 +0 + 62 + 0 + 10 +17012.499957 + 20 +4045.336688 + 30 +0.0 + 11 +17024.999957 + 21 +4066.987323 + 31 +0.0 + 0 +LINE + 5 +114B + 8 +0 + 62 + 0 + 10 +17049.999957 + 20 +4110.288593 + 30 +0.0 + 11 +17062.499957 + 21 +4131.939228 + 31 +0.0 + 0 +LINE + 5 +114C + 8 +0 + 62 + 0 + 10 +17012.499957 + 20 +4002.035418 + 30 +0.0 + 11 +17024.999957 + 21 +4023.686053 + 31 +0.0 + 0 +LINE + 5 +114D + 8 +0 + 62 + 0 + 10 +17049.999957 + 20 +4066.987323 + 30 +0.0 + 11 +17062.499957 + 21 +4088.637958 + 31 +0.0 + 0 +LINE + 5 +114E + 8 +0 + 62 + 0 + 10 +17012.499957 + 20 +3958.734148 + 30 +0.0 + 11 +17024.999957 + 21 +3980.384783 + 31 +0.0 + 0 +LINE + 5 +114F + 8 +0 + 62 + 0 + 10 +17049.999957 + 20 +4023.686053 + 30 +0.0 + 11 +17062.499957 + 21 +4045.336688 + 31 +0.0 + 0 +LINE + 5 +1150 + 8 +0 + 62 + 0 + 10 +17012.499957 + 20 +3915.432877 + 30 +0.0 + 11 +17024.999957 + 21 +3937.083513 + 31 +0.0 + 0 +LINE + 5 +1151 + 8 +0 + 62 + 0 + 10 +17049.999957 + 20 +3980.384783 + 30 +0.0 + 11 +17062.499957 + 21 +4002.035418 + 31 +0.0 + 0 +LINE + 5 +1152 + 8 +0 + 62 + 0 + 10 +17012.499957 + 20 +3872.131607 + 30 +0.0 + 11 +17024.999957 + 21 +3893.782242 + 31 +0.0 + 0 +LINE + 5 +1153 + 8 +0 + 62 + 0 + 10 +17049.999957 + 20 +3937.083513 + 30 +0.0 + 11 +17062.499957 + 21 +3958.734148 + 31 +0.0 + 0 +LINE + 5 +1154 + 8 +0 + 62 + 0 + 10 +17012.499956 + 20 +3828.830337 + 30 +0.0 + 11 +17024.999956 + 21 +3850.480972 + 31 +0.0 + 0 +LINE + 5 +1155 + 8 +0 + 62 + 0 + 10 +17049.999956 + 20 +3893.782242 + 30 +0.0 + 11 +17062.499956 + 21 +3915.432878 + 31 +0.0 + 0 +LINE + 5 +1156 + 8 +0 + 62 + 0 + 10 +17012.499956 + 20 +3785.529067 + 30 +0.0 + 11 +17024.999956 + 21 +3807.179702 + 31 +0.0 + 0 +LINE + 5 +1157 + 8 +0 + 62 + 0 + 10 +17049.999956 + 20 +3850.480972 + 30 +0.0 + 11 +17062.499956 + 21 +3872.131607 + 31 +0.0 + 0 +LINE + 5 +1158 + 8 +0 + 62 + 0 + 10 +17049.999956 + 20 +3807.179702 + 30 +0.0 + 11 +17062.499956 + 21 +3828.830337 + 31 +0.0 + 0 +LINE + 5 +1159 + 8 +0 + 62 + 0 + 10 +3971.84659 + 20 +3790.0 + 30 +0.0 + 11 +3985.0 + 21 +3803.15341 + 31 +0.0 + 0 +LINE + 5 +115A + 8 +0 + 62 + 0 + 10 +3892.297077 + 20 +3790.0 + 30 +0.0 + 11 +3985.0 + 21 +3882.702923 + 31 +0.0 + 0 +LINE + 5 +115B + 8 +0 + 62 + 0 + 10 +3870.0 + 20 +3847.252436 + 30 +0.0 + 11 +3985.0 + 21 +3962.252436 + 31 +0.0 + 0 +LINE + 5 +115C + 8 +0 + 62 + 0 + 10 +3870.0 + 20 +3926.801948 + 30 +0.0 + 11 +3985.0 + 21 +4041.801948 + 31 +0.0 + 0 +LINE + 5 +115D + 8 +0 + 62 + 0 + 10 +3870.0 + 20 +4006.351461 + 30 +0.0 + 11 +3985.0 + 21 +4121.351461 + 31 +0.0 + 0 +LINE + 5 +115E + 8 +0 + 62 + 0 + 10 +3870.0 + 20 +4085.900974 + 30 +0.0 + 11 +3985.0 + 21 +4200.900974 + 31 +0.0 + 0 +LINE + 5 +115F + 8 +0 + 62 + 0 + 10 +3870.0 + 20 +4165.450487 + 30 +0.0 + 11 +3985.0 + 21 +4280.450487 + 31 +0.0 + 0 +LINE + 5 +1160 + 8 +0 + 62 + 0 + 10 +3870.0 + 20 +4245.0 + 30 +0.0 + 11 +3985.0 + 21 +4360.0 + 31 +0.0 + 0 +LINE + 5 +1161 + 8 +0 + 62 + 0 + 10 +3870.0 + 20 +4324.549513 + 30 +0.0 + 11 +3985.0 + 21 +4439.549513 + 31 +0.0 + 0 +LINE + 5 +1162 + 8 +0 + 62 + 0 + 10 +3870.0 + 20 +4404.099026 + 30 +0.0 + 11 +3985.0 + 21 +4519.099026 + 31 +0.0 + 0 +LINE + 5 +1163 + 8 +0 + 62 + 0 + 10 +3870.0 + 20 +4483.648539 + 30 +0.0 + 11 +3985.0 + 21 +4598.648539 + 31 +0.0 + 0 +LINE + 5 +1164 + 8 +0 + 62 + 0 + 10 +3870.0 + 20 +4563.198052 + 30 +0.0 + 11 +3985.0 + 21 +4678.198052 + 31 +0.0 + 0 +LINE + 5 +1165 + 8 +0 + 62 + 0 + 10 +3870.0 + 20 +4642.747564 + 30 +0.0 + 11 +3985.0 + 21 +4757.747564 + 31 +0.0 + 0 +LINE + 5 +1166 + 8 +0 + 62 + 0 + 10 +3870.0 + 20 +4722.297077 + 30 +0.0 + 11 +3985.0 + 21 +4837.297077 + 31 +0.0 + 0 +LINE + 5 +1167 + 8 +0 + 62 + 0 + 10 +3870.0 + 20 +4801.84659 + 30 +0.0 + 11 +3985.0 + 21 +4916.84659 + 31 +0.0 + 0 +LINE + 5 +1168 + 8 +0 + 62 + 0 + 10 +3870.0 + 20 +4881.396103 + 30 +0.0 + 11 +3985.0 + 21 +4996.396103 + 31 +0.0 + 0 +LINE + 5 +1169 + 8 +0 + 62 + 0 + 10 +3870.0 + 20 +4960.945616 + 30 +0.0 + 11 +3985.0 + 21 +5075.945616 + 31 +0.0 + 0 +LINE + 5 +116A + 8 +0 + 62 + 0 + 10 +3870.0 + 20 +5040.495129 + 30 +0.0 + 11 +3985.0 + 21 +5155.495129 + 31 +0.0 + 0 +LINE + 5 +116B + 8 +0 + 62 + 0 + 10 +3870.0 + 20 +5120.044642 + 30 +0.0 + 11 +3985.0 + 21 +5235.044642 + 31 +0.0 + 0 +LINE + 5 +116C + 8 +0 + 62 + 0 + 10 +3870.0 + 20 +5199.594155 + 30 +0.0 + 11 +3985.0 + 21 +5314.594155 + 31 +0.0 + 0 +LINE + 5 +116D + 8 +0 + 62 + 0 + 10 +3870.0 + 20 +5279.143667 + 30 +0.0 + 11 +3985.0 + 21 +5394.143667 + 31 +0.0 + 0 +LINE + 5 +116E + 8 +0 + 62 + 0 + 10 +3870.0 + 20 +5358.69318 + 30 +0.0 + 11 +3985.0 + 21 +5473.69318 + 31 +0.0 + 0 +LINE + 5 +116F + 8 +0 + 62 + 0 + 10 +3870.0 + 20 +5438.242693 + 30 +0.0 + 11 +3985.0 + 21 +5553.242693 + 31 +0.0 + 0 +LINE + 5 +1170 + 8 +0 + 62 + 0 + 10 +3870.0 + 20 +5517.792206 + 30 +0.0 + 11 +3985.0 + 21 +5632.792206 + 31 +0.0 + 0 +LINE + 5 +1171 + 8 +0 + 62 + 0 + 10 +3870.0 + 20 +5597.341719 + 30 +0.0 + 11 +3985.0 + 21 +5712.341719 + 31 +0.0 + 0 +LINE + 5 +1172 + 8 +0 + 62 + 0 + 10 +17130.0 + 20 +5731.672093 + 30 +0.0 + 11 +17138.327907 + 21 +5740.0 + 31 +0.0 + 0 +LINE + 5 +1173 + 8 +0 + 62 + 0 + 10 +17130.0 + 20 +5572.573067 + 30 +0.0 + 11 +17245.0 + 21 +5687.573067 + 31 +0.0 + 0 +LINE + 5 +1174 + 8 +0 + 62 + 0 + 10 +17130.0 + 20 +5493.023555 + 30 +0.0 + 11 +17245.0 + 21 +5608.023555 + 31 +0.0 + 0 +LINE + 5 +1175 + 8 +0 + 62 + 0 + 10 +17130.0 + 20 +5413.474042 + 30 +0.0 + 11 +17245.0 + 21 +5528.474042 + 31 +0.0 + 0 +LINE + 5 +1176 + 8 +0 + 62 + 0 + 10 +17130.0 + 20 +5333.924529 + 30 +0.0 + 11 +17245.0 + 21 +5448.924529 + 31 +0.0 + 0 +LINE + 5 +1177 + 8 +0 + 62 + 0 + 10 +17130.0 + 20 +5254.375016 + 30 +0.0 + 11 +17245.0 + 21 +5369.375016 + 31 +0.0 + 0 +LINE + 5 +1178 + 8 +0 + 62 + 0 + 10 +17130.0 + 20 +5174.825503 + 30 +0.0 + 11 +17245.0 + 21 +5289.825503 + 31 +0.0 + 0 +LINE + 5 +1179 + 8 +0 + 62 + 0 + 10 +17130.0 + 20 +5095.27599 + 30 +0.0 + 11 +17245.0 + 21 +5210.27599 + 31 +0.0 + 0 +LINE + 5 +117A + 8 +0 + 62 + 0 + 10 +17130.0 + 20 +5015.726477 + 30 +0.0 + 11 +17245.0 + 21 +5130.726477 + 31 +0.0 + 0 +LINE + 5 +117B + 8 +0 + 62 + 0 + 10 +17130.0 + 20 +4936.176964 + 30 +0.0 + 11 +17245.0 + 21 +5051.176964 + 31 +0.0 + 0 +LINE + 5 +117C + 8 +0 + 62 + 0 + 10 +17130.0 + 20 +4856.627452 + 30 +0.0 + 11 +17245.0 + 21 +4971.627452 + 31 +0.0 + 0 +LINE + 5 +117D + 8 +0 + 62 + 0 + 10 +17130.0 + 20 +4777.077939 + 30 +0.0 + 11 +17245.0 + 21 +4892.077939 + 31 +0.0 + 0 +LINE + 5 +117E + 8 +0 + 62 + 0 + 10 +17130.0 + 20 +4697.528426 + 30 +0.0 + 11 +17245.0 + 21 +4812.528426 + 31 +0.0 + 0 +LINE + 5 +117F + 8 +0 + 62 + 0 + 10 +17130.0 + 20 +4617.978913 + 30 +0.0 + 11 +17245.0 + 21 +4732.978913 + 31 +0.0 + 0 +LINE + 5 +1180 + 8 +0 + 62 + 0 + 10 +17130.0 + 20 +4538.4294 + 30 +0.0 + 11 +17245.0 + 21 +4653.4294 + 31 +0.0 + 0 +LINE + 5 +1181 + 8 +0 + 62 + 0 + 10 +17130.0 + 20 +4458.879887 + 30 +0.0 + 11 +17245.0 + 21 +4573.879887 + 31 +0.0 + 0 +LINE + 5 +1182 + 8 +0 + 62 + 0 + 10 +17130.0 + 20 +4379.330374 + 30 +0.0 + 11 +17245.0 + 21 +4494.330374 + 31 +0.0 + 0 +LINE + 5 +1183 + 8 +0 + 62 + 0 + 10 +17130.0 + 20 +4299.780861 + 30 +0.0 + 11 +17245.0 + 21 +4414.780861 + 31 +0.0 + 0 +LINE + 5 +1184 + 8 +0 + 62 + 0 + 10 +17130.0 + 20 +4220.231348 + 30 +0.0 + 11 +17245.0 + 21 +4335.231348 + 31 +0.0 + 0 +LINE + 5 +1185 + 8 +0 + 62 + 0 + 10 +17130.0 + 20 +4140.681836 + 30 +0.0 + 11 +17245.0 + 21 +4255.681836 + 31 +0.0 + 0 +LINE + 5 +1186 + 8 +0 + 62 + 0 + 10 +17130.0 + 20 +4061.132323 + 30 +0.0 + 11 +17245.0 + 21 +4176.132323 + 31 +0.0 + 0 +LINE + 5 +1187 + 8 +0 + 62 + 0 + 10 +17130.0 + 20 +3981.58281 + 30 +0.0 + 11 +17245.0 + 21 +4096.58281 + 31 +0.0 + 0 +LINE + 5 +1188 + 8 +0 + 62 + 0 + 10 +17130.0 + 20 +3902.033297 + 30 +0.0 + 11 +17245.0 + 21 +4017.033297 + 31 +0.0 + 0 +LINE + 5 +1189 + 8 +0 + 62 + 0 + 10 +17130.0 + 20 +3822.483784 + 30 +0.0 + 11 +17245.0 + 21 +3937.483784 + 31 +0.0 + 0 +LINE + 5 +118A + 8 +0 + 62 + 0 + 10 +17177.065729 + 20 +3790.0 + 30 +0.0 + 11 +17245.0 + 21 +3857.934271 + 31 +0.0 + 0 +POLYLINE + 5 +118B + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +25DB + 8 +MAUERWERK + 10 +4125.0 + 20 +4335.0 + 30 +0.0 + 0 +VERTEX + 5 +25DC + 8 +MAUERWERK + 10 +4125.0 + 20 +3790.0 + 30 +0.0 + 0 +SEQEND + 5 +25DD + 8 +MAUERWERK + 0 +POLYLINE + 5 +118F + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +25DE + 8 +MAUERWERK + 10 +4490.0 + 20 +3790.0 + 30 +0.0 + 0 +VERTEX + 5 +25DF + 8 +MAUERWERK + 10 +4490.0 + 20 +4335.0 + 30 +0.0 + 0 +VERTEX + 5 +25E0 + 8 +MAUERWERK + 10 +4125.0 + 20 +4335.0 + 30 +0.0 + 0 +SEQEND + 5 +25E1 + 8 +MAUERWERK + 0 +POLYLINE + 5 +1194 + 8 +DAEMMUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +25E2 + 8 +DAEMMUNG + 10 +4125.0 + 20 +5740.0 + 30 +0.0 + 0 +VERTEX + 5 +25E3 + 8 +DAEMMUNG + 10 +4045.0 + 20 +5740.0 + 30 +0.0 + 0 +VERTEX + 5 +25E4 + 8 +DAEMMUNG + 10 +4045.0 + 20 +3790.0 + 30 +0.0 + 0 +SEQEND + 5 +25E5 + 8 +DAEMMUNG + 0 +POLYLINE + 5 +1199 + 8 +DAEMMUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +25E6 + 8 +DAEMMUNG + 10 +4125.0 + 20 +3790.0 + 30 +0.0 + 0 +VERTEX + 5 +25E7 + 8 +DAEMMUNG + 10 +4125.0 + 20 +5740.0 + 30 +0.0 + 0 +SEQEND + 5 +25E8 + 8 +DAEMMUNG + 0 +POLYLINE + 5 +119D + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +25E9 + 8 +MAUERWERK + 10 +3870.0 + 20 +5692.482548 + 30 +0.0 + 0 +VERTEX + 5 +25EA + 8 +MAUERWERK + 10 +3870.0 + 20 +3790.0 + 30 +0.0 + 0 +SEQEND + 5 +25EB + 8 +MAUERWERK + 0 +POLYLINE + 5 +11A1 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +25EC + 8 +MAUERWERK + 10 +3985.0 + 20 +3790.0 + 30 +0.0 + 0 +VERTEX + 5 +25ED + 8 +MAUERWERK + 10 +3985.0 + 20 +5740.0 + 30 +0.0 + 0 +VERTEX + 5 +25EE + 8 +MAUERWERK + 10 +3946.043819 + 20 +5740.0 + 30 +0.0 + 0 +SEQEND + 5 +25EF + 8 +MAUERWERK + 0 +POLYLINE + 5 +11A6 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +25F0 + 8 +MAUERWERK + 10 +9000.0 + 20 +4340.0 + 30 +0.0 + 0 +VERTEX + 5 +25F1 + 8 +MAUERWERK + 10 +9000.0 + 20 +3790.0 + 30 +0.0 + 0 +SEQEND + 5 +25F2 + 8 +MAUERWERK + 0 +POLYLINE + 5 +11AA + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +25F3 + 8 +MAUERWERK + 10 +9365.0 + 20 +3790.0 + 30 +0.0 + 0 +VERTEX + 5 +25F4 + 8 +MAUERWERK + 10 +9365.0 + 20 +4340.0 + 30 +0.0 + 0 +VERTEX + 5 +25F5 + 8 +MAUERWERK + 10 +9000.0 + 20 +4340.0 + 30 +0.0 + 0 +SEQEND + 5 +25F6 + 8 +MAUERWERK + 0 +POLYLINE + 5 +11AF + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +25F7 + 8 +MAUERWERK + 10 +11750.0 + 20 +4340.0 + 30 +0.0 + 0 +VERTEX + 5 +25F8 + 8 +MAUERWERK + 10 +11750.0 + 20 +3790.0 + 30 +0.0 + 0 +SEQEND + 5 +25F9 + 8 +MAUERWERK + 0 +POLYLINE + 5 +11B3 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +25FA + 8 +MAUERWERK + 10 +12115.0 + 20 +3790.0 + 30 +0.0 + 0 +VERTEX + 5 +25FB + 8 +MAUERWERK + 10 +12115.0 + 20 +4340.0 + 30 +0.0 + 0 +VERTEX + 5 +25FC + 8 +MAUERWERK + 10 +11750.0 + 20 +4340.0 + 30 +0.0 + 0 +SEQEND + 5 +25FD + 8 +MAUERWERK + 0 +POLYLINE + 5 +11B8 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +25FE + 8 +MAUERWERK + 10 +16625.0 + 20 +4335.0 + 30 +0.0 + 0 +VERTEX + 5 +25FF + 8 +MAUERWERK + 10 +16625.0 + 20 +3790.0 + 30 +0.0 + 0 +SEQEND + 5 +2600 + 8 +MAUERWERK + 0 +POLYLINE + 5 +11BC + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +2601 + 8 +MAUERWERK + 10 +16990.0 + 20 +3790.0 + 30 +0.0 + 0 +VERTEX + 5 +2602 + 8 +MAUERWERK + 10 +16990.0 + 20 +4335.0 + 30 +0.0 + 0 +VERTEX + 5 +2603 + 8 +MAUERWERK + 10 +16625.0 + 20 +4335.0 + 30 +0.0 + 0 +SEQEND + 5 +2604 + 8 +MAUERWERK + 0 +POLYLINE + 5 +11C1 + 8 +DAEMMUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2605 + 8 +DAEMMUNG + 10 +16990.0 + 20 +5740.0 + 30 +0.0 + 0 +VERTEX + 5 +2606 + 8 +DAEMMUNG + 10 +17070.0 + 20 +5740.0 + 30 +0.0 + 0 +VERTEX + 5 +2607 + 8 +DAEMMUNG + 10 +17070.0 + 20 +3790.0 + 30 +0.0 + 0 +SEQEND + 5 +2608 + 8 +DAEMMUNG + 0 +POLYLINE + 5 +11C6 + 8 +DAEMMUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2609 + 8 +DAEMMUNG + 10 +16990.0 + 20 +3790.0 + 30 +0.0 + 0 +VERTEX + 5 +260A + 8 +DAEMMUNG + 10 +16990.0 + 20 +5740.0 + 30 +0.0 + 0 +SEQEND + 5 +260B + 8 +DAEMMUNG + 0 +POLYLINE + 5 +11CA + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +260C + 8 +MAUERWERK + 10 +17245.0 + 20 +5692.482548 + 30 +0.0 + 0 +VERTEX + 5 +260D + 8 +MAUERWERK + 10 +17245.0 + 20 +3790.0 + 30 +0.0 + 0 +SEQEND + 5 +260E + 8 +MAUERWERK + 0 +POLYLINE + 5 +11CE + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +260F + 8 +MAUERWERK + 10 +17130.0 + 20 +3790.0 + 30 +0.0 + 0 +VERTEX + 5 +2610 + 8 +MAUERWERK + 10 +17130.0 + 20 +5740.0 + 30 +0.0 + 0 +VERTEX + 5 +2611 + 8 +MAUERWERK + 10 +17168.956181 + 20 +5740.0 + 30 +0.0 + 0 +SEQEND + 5 +2612 + 8 +MAUERWERK + 0 +POLYLINE + 5 +11D3 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2613 + 8 +HOLZ + 10 +8490.0 + 20 +4525.0 + 30 +0.0 + 0 +VERTEX + 5 +2614 + 8 +HOLZ + 10 +8490.0 + 20 +4705.0 + 30 +0.0 + 0 +SEQEND + 5 +2615 + 8 +HOLZ + 0 +POLYLINE + 5 +11D7 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2616 + 8 +HOLZ + 10 +12625.0 + 20 +4525.0 + 30 +0.0 + 0 +VERTEX + 5 +2617 + 8 +HOLZ + 10 +12625.0 + 20 +4705.0 + 30 +0.0 + 0 +SEQEND + 5 +2618 + 8 +HOLZ + 0 +POLYLINE + 5 +11DB + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2619 + 8 +DETAILS + 10 +4795.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +261A + 8 +DETAILS + 10 +4795.0 + 20 +4680.0 + 30 +0.0 + 0 +SEQEND + 5 +261B + 8 +DETAILS + 0 +POLYLINE + 5 +11DF + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +261C + 8 +DETAILS + 10 +4795.0 + 20 +4665.0 + 30 +0.0 + 0 +VERTEX + 5 +261D + 8 +DETAILS + 10 +4795.0 + 20 +4640.0 + 30 +0.0 + 0 +SEQEND + 5 +261E + 8 +DETAILS + 0 +POLYLINE + 5 +11E3 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +261F + 8 +DETAILS + 10 +4795.0 + 20 +4625.0 + 30 +0.0 + 0 +VERTEX + 5 +2620 + 8 +DETAILS + 10 +4795.0 + 20 +4600.0 + 30 +0.0 + 0 +SEQEND + 5 +2621 + 8 +DETAILS + 0 +POLYLINE + 5 +11E7 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2622 + 8 +DETAILS + 10 +4795.0 + 20 +4585.0 + 30 +0.0 + 0 +VERTEX + 5 +2623 + 8 +DETAILS + 10 +4795.0 + 20 +4560.0 + 30 +0.0 + 0 +SEQEND + 5 +2624 + 8 +DETAILS + 0 +POLYLINE + 5 +11EB + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2625 + 8 +DETAILS + 10 +4795.0 + 20 +4540.0 + 30 +0.0 + 0 +VERTEX + 5 +2626 + 8 +DETAILS + 10 +4795.0 + 20 +4515.0 + 30 +0.0 + 0 +SEQEND + 5 +2627 + 8 +DETAILS + 0 +POLYLINE + 5 +11EF + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2628 + 8 +DETAILS + 10 +4795.0 + 20 +4485.0 + 30 +0.0 + 0 +VERTEX + 5 +2629 + 8 +DETAILS + 10 +4795.0 + 20 +4460.0 + 30 +0.0 + 0 +SEQEND + 5 +262A + 8 +DETAILS + 0 +POLYLINE + 5 +11F3 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +262B + 8 +DETAILS + 10 +4795.0 + 20 +4440.0 + 30 +0.0 + 0 +VERTEX + 5 +262C + 8 +DETAILS + 10 +4795.0 + 20 +4415.0 + 30 +0.0 + 0 +SEQEND + 5 +262D + 8 +DETAILS + 0 +POLYLINE + 5 +11F7 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +262E + 8 +DETAILS + 10 +4795.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +262F + 8 +DETAILS + 10 +4780.0 + 20 +4725.0 + 30 +0.0 + 0 +SEQEND + 5 +2630 + 8 +DETAILS + 0 +POLYLINE + 5 +11FB + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2631 + 8 +DETAILS + 10 +4795.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +2632 + 8 +DETAILS + 10 +4810.0 + 20 +4725.0 + 30 +0.0 + 0 +SEQEND + 5 +2633 + 8 +DETAILS + 0 +POLYLINE + 5 +11FF + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2634 + 8 +DETAILS + 10 +8105.0 + 20 +4665.0 + 30 +0.0 + 0 +VERTEX + 5 +2635 + 8 +DETAILS + 10 +8105.0 + 20 +4640.0 + 30 +0.0 + 0 +SEQEND + 5 +2636 + 8 +DETAILS + 0 +POLYLINE + 5 +1203 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2637 + 8 +DETAILS + 10 +8105.0 + 20 +4440.0 + 30 +0.0 + 0 +VERTEX + 5 +2638 + 8 +DETAILS + 10 +8105.0 + 20 +4415.0 + 30 +0.0 + 0 +SEQEND + 5 +2639 + 8 +DETAILS + 0 +POLYLINE + 5 +1207 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +263A + 8 +DETAILS + 10 +8105.0 + 20 +4485.0 + 30 +0.0 + 0 +VERTEX + 5 +263B + 8 +DETAILS + 10 +8105.0 + 20 +4460.0 + 30 +0.0 + 0 +SEQEND + 5 +263C + 8 +DETAILS + 0 +POLYLINE + 5 +120B + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +263D + 8 +DETAILS + 10 +8105.0 + 20 +4540.0 + 30 +0.0 + 0 +VERTEX + 5 +263E + 8 +DETAILS + 10 +8105.0 + 20 +4515.0 + 30 +0.0 + 0 +SEQEND + 5 +263F + 8 +DETAILS + 0 +POLYLINE + 5 +120F + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2640 + 8 +DETAILS + 10 +8105.0 + 20 +4585.0 + 30 +0.0 + 0 +VERTEX + 5 +2641 + 8 +DETAILS + 10 +8105.0 + 20 +4560.0 + 30 +0.0 + 0 +SEQEND + 5 +2642 + 8 +DETAILS + 0 +POLYLINE + 5 +1213 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2643 + 8 +DETAILS + 10 +8105.0 + 20 +4625.0 + 30 +0.0 + 0 +VERTEX + 5 +2644 + 8 +DETAILS + 10 +8105.0 + 20 +4600.0 + 30 +0.0 + 0 +SEQEND + 5 +2645 + 8 +DETAILS + 0 +POLYLINE + 5 +1217 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2646 + 8 +DETAILS + 10 +8105.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +2647 + 8 +DETAILS + 10 +8120.0 + 20 +4725.0 + 30 +0.0 + 0 +SEQEND + 5 +2648 + 8 +DETAILS + 0 +POLYLINE + 5 +121B + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2649 + 8 +DETAILS + 10 +8105.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +264A + 8 +DETAILS + 10 +8090.0 + 20 +4725.0 + 30 +0.0 + 0 +SEQEND + 5 +264B + 8 +DETAILS + 0 +POLYLINE + 5 +121F + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +264C + 8 +DETAILS + 10 +8105.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +264D + 8 +DETAILS + 10 +8105.0 + 20 +4680.0 + 30 +0.0 + 0 +SEQEND + 5 +264E + 8 +DETAILS + 0 +POLYLINE + 5 +1223 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +264F + 8 +DETAILS + 10 +6615.0 + 20 +4665.0 + 30 +0.0 + 0 +VERTEX + 5 +2650 + 8 +DETAILS + 10 +6615.0 + 20 +4640.0 + 30 +0.0 + 0 +SEQEND + 5 +2651 + 8 +DETAILS + 0 +POLYLINE + 5 +1227 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2652 + 8 +DETAILS + 10 +6615.0 + 20 +4440.0 + 30 +0.0 + 0 +VERTEX + 5 +2653 + 8 +DETAILS + 10 +6615.0 + 20 +4415.0 + 30 +0.0 + 0 +SEQEND + 5 +2654 + 8 +DETAILS + 0 +POLYLINE + 5 +122B + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2655 + 8 +DETAILS + 10 +6615.0 + 20 +4485.0 + 30 +0.0 + 0 +VERTEX + 5 +2656 + 8 +DETAILS + 10 +6615.0 + 20 +4460.0 + 30 +0.0 + 0 +SEQEND + 5 +2657 + 8 +DETAILS + 0 +POLYLINE + 5 +122F + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2658 + 8 +DETAILS + 10 +6615.0 + 20 +4540.0 + 30 +0.0 + 0 +VERTEX + 5 +2659 + 8 +DETAILS + 10 +6615.0 + 20 +4515.0 + 30 +0.0 + 0 +SEQEND + 5 +265A + 8 +DETAILS + 0 +POLYLINE + 5 +1233 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +265B + 8 +DETAILS + 10 +6615.0 + 20 +4585.0 + 30 +0.0 + 0 +VERTEX + 5 +265C + 8 +DETAILS + 10 +6615.0 + 20 +4560.0 + 30 +0.0 + 0 +SEQEND + 5 +265D + 8 +DETAILS + 0 +POLYLINE + 5 +1237 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +265E + 8 +DETAILS + 10 +6615.0 + 20 +4625.0 + 30 +0.0 + 0 +VERTEX + 5 +265F + 8 +DETAILS + 10 +6615.0 + 20 +4600.0 + 30 +0.0 + 0 +SEQEND + 5 +2660 + 8 +DETAILS + 0 +POLYLINE + 5 +123B + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2661 + 8 +DETAILS + 10 +6615.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +2662 + 8 +DETAILS + 10 +6630.0 + 20 +4725.0 + 30 +0.0 + 0 +SEQEND + 5 +2663 + 8 +DETAILS + 0 +POLYLINE + 5 +123F + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2664 + 8 +DETAILS + 10 +6615.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +2665 + 8 +DETAILS + 10 +6600.0 + 20 +4725.0 + 30 +0.0 + 0 +SEQEND + 5 +2666 + 8 +DETAILS + 0 +POLYLINE + 5 +1243 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2667 + 8 +DETAILS + 10 +6615.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +2668 + 8 +DETAILS + 10 +6615.0 + 20 +4680.0 + 30 +0.0 + 0 +SEQEND + 5 +2669 + 8 +DETAILS + 0 +POLYLINE + 5 +1247 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +266A + 8 +DETAILS + 10 +16320.0 + 20 +4665.0 + 30 +0.0 + 0 +VERTEX + 5 +266B + 8 +DETAILS + 10 +16320.0 + 20 +4640.0 + 30 +0.0 + 0 +SEQEND + 5 +266C + 8 +DETAILS + 0 +POLYLINE + 5 +124B + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +266D + 8 +DETAILS + 10 +16320.0 + 20 +4440.0 + 30 +0.0 + 0 +VERTEX + 5 +266E + 8 +DETAILS + 10 +16320.0 + 20 +4415.0 + 30 +0.0 + 0 +SEQEND + 5 +266F + 8 +DETAILS + 0 +POLYLINE + 5 +124F + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2670 + 8 +DETAILS + 10 +16320.0 + 20 +4485.0 + 30 +0.0 + 0 +VERTEX + 5 +2671 + 8 +DETAILS + 10 +16320.0 + 20 +4460.0 + 30 +0.0 + 0 +SEQEND + 5 +2672 + 8 +DETAILS + 0 +POLYLINE + 5 +1253 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2673 + 8 +DETAILS + 10 +16320.0 + 20 +4540.0 + 30 +0.0 + 0 +VERTEX + 5 +2674 + 8 +DETAILS + 10 +16320.0 + 20 +4515.0 + 30 +0.0 + 0 +SEQEND + 5 +2675 + 8 +DETAILS + 0 +POLYLINE + 5 +1257 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2676 + 8 +DETAILS + 10 +16320.0 + 20 +4585.0 + 30 +0.0 + 0 +VERTEX + 5 +2677 + 8 +DETAILS + 10 +16320.0 + 20 +4560.0 + 30 +0.0 + 0 +SEQEND + 5 +2678 + 8 +DETAILS + 0 +POLYLINE + 5 +125B + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2679 + 8 +DETAILS + 10 +16320.0 + 20 +4625.0 + 30 +0.0 + 0 +VERTEX + 5 +267A + 8 +DETAILS + 10 +16320.0 + 20 +4600.0 + 30 +0.0 + 0 +SEQEND + 5 +267B + 8 +DETAILS + 0 +POLYLINE + 5 +125F + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +267C + 8 +DETAILS + 10 +16320.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +267D + 8 +DETAILS + 10 +16305.0 + 20 +4725.0 + 30 +0.0 + 0 +SEQEND + 5 +267E + 8 +DETAILS + 0 +POLYLINE + 5 +1263 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +267F + 8 +DETAILS + 10 +16320.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +2680 + 8 +DETAILS + 10 +16335.0 + 20 +4725.0 + 30 +0.0 + 0 +SEQEND + 5 +2681 + 8 +DETAILS + 0 +POLYLINE + 5 +1267 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2682 + 8 +DETAILS + 10 +16320.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +2683 + 8 +DETAILS + 10 +16320.0 + 20 +4680.0 + 30 +0.0 + 0 +SEQEND + 5 +2684 + 8 +DETAILS + 0 +POLYLINE + 5 +126B + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2685 + 8 +DETAILS + 10 +14500.0 + 20 +4665.0 + 30 +0.0 + 0 +VERTEX + 5 +2686 + 8 +DETAILS + 10 +14500.0 + 20 +4640.0 + 30 +0.0 + 0 +SEQEND + 5 +2687 + 8 +DETAILS + 0 +POLYLINE + 5 +126F + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2688 + 8 +DETAILS + 10 +14500.0 + 20 +4625.0 + 30 +0.0 + 0 +VERTEX + 5 +2689 + 8 +DETAILS + 10 +14500.0 + 20 +4600.0 + 30 +0.0 + 0 +SEQEND + 5 +268A + 8 +DETAILS + 0 +POLYLINE + 5 +1273 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +268B + 8 +DETAILS + 10 +14500.0 + 20 +4585.0 + 30 +0.0 + 0 +VERTEX + 5 +268C + 8 +DETAILS + 10 +14500.0 + 20 +4560.0 + 30 +0.0 + 0 +SEQEND + 5 +268D + 8 +DETAILS + 0 +POLYLINE + 5 +1277 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +268E + 8 +DETAILS + 10 +14500.0 + 20 +4540.0 + 30 +0.0 + 0 +VERTEX + 5 +268F + 8 +DETAILS + 10 +14500.0 + 20 +4515.0 + 30 +0.0 + 0 +SEQEND + 5 +2690 + 8 +DETAILS + 0 +POLYLINE + 5 +127B + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2691 + 8 +DETAILS + 10 +14500.0 + 20 +4485.0 + 30 +0.0 + 0 +VERTEX + 5 +2692 + 8 +DETAILS + 10 +14500.0 + 20 +4460.0 + 30 +0.0 + 0 +SEQEND + 5 +2693 + 8 +DETAILS + 0 +POLYLINE + 5 +127F + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2694 + 8 +DETAILS + 10 +14500.0 + 20 +4440.0 + 30 +0.0 + 0 +VERTEX + 5 +2695 + 8 +DETAILS + 10 +14500.0 + 20 +4415.0 + 30 +0.0 + 0 +SEQEND + 5 +2696 + 8 +DETAILS + 0 +POLYLINE + 5 +1283 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2697 + 8 +DETAILS + 10 +14500.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +2698 + 8 +DETAILS + 10 +14515.0 + 20 +4725.0 + 30 +0.0 + 0 +SEQEND + 5 +2699 + 8 +DETAILS + 0 +POLYLINE + 5 +1287 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +269A + 8 +DETAILS + 10 +14500.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +269B + 8 +DETAILS + 10 +14500.0 + 20 +4680.0 + 30 +0.0 + 0 +SEQEND + 5 +269C + 8 +DETAILS + 0 +POLYLINE + 5 +128B + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +269D + 8 +DETAILS + 10 +14500.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +269E + 8 +DETAILS + 10 +14485.0 + 20 +4725.0 + 30 +0.0 + 0 +SEQEND + 5 +269F + 8 +DETAILS + 0 +POLYLINE + 5 +128F + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +26A0 + 8 +DETAILS + 10 +13010.0 + 20 +4665.0 + 30 +0.0 + 0 +VERTEX + 5 +26A1 + 8 +DETAILS + 10 +13010.0 + 20 +4640.0 + 30 +0.0 + 0 +SEQEND + 5 +26A2 + 8 +DETAILS + 0 +POLYLINE + 5 +1293 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +26A3 + 8 +DETAILS + 10 +13010.0 + 20 +4440.0 + 30 +0.0 + 0 +VERTEX + 5 +26A4 + 8 +DETAILS + 10 +13010.0 + 20 +4415.0 + 30 +0.0 + 0 +SEQEND + 5 +26A5 + 8 +DETAILS + 0 +POLYLINE + 5 +1297 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +26A6 + 8 +DETAILS + 10 +13010.0 + 20 +4485.0 + 30 +0.0 + 0 +VERTEX + 5 +26A7 + 8 +DETAILS + 10 +13010.0 + 20 +4460.0 + 30 +0.0 + 0 +SEQEND + 5 +26A8 + 8 +DETAILS + 0 +POLYLINE + 5 +129B + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +26A9 + 8 +DETAILS + 10 +13010.0 + 20 +4540.0 + 30 +0.0 + 0 +VERTEX + 5 +26AA + 8 +DETAILS + 10 +13010.0 + 20 +4515.0 + 30 +0.0 + 0 +SEQEND + 5 +26AB + 8 +DETAILS + 0 +POLYLINE + 5 +129F + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +26AC + 8 +DETAILS + 10 +13010.0 + 20 +4585.0 + 30 +0.0 + 0 +VERTEX + 5 +26AD + 8 +DETAILS + 10 +13010.0 + 20 +4560.0 + 30 +0.0 + 0 +SEQEND + 5 +26AE + 8 +DETAILS + 0 +POLYLINE + 5 +12A3 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +26AF + 8 +DETAILS + 10 +13010.0 + 20 +4625.0 + 30 +0.0 + 0 +VERTEX + 5 +26B0 + 8 +DETAILS + 10 +13010.0 + 20 +4600.0 + 30 +0.0 + 0 +SEQEND + 5 +26B1 + 8 +DETAILS + 0 +POLYLINE + 5 +12A7 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +26B2 + 8 +DETAILS + 10 +13010.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +26B3 + 8 +DETAILS + 10 +12995.0 + 20 +4725.0 + 30 +0.0 + 0 +SEQEND + 5 +26B4 + 8 +DETAILS + 0 +POLYLINE + 5 +12AB + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +26B5 + 8 +DETAILS + 10 +13010.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +26B6 + 8 +DETAILS + 10 +13025.0 + 20 +4725.0 + 30 +0.0 + 0 +SEQEND + 5 +26B7 + 8 +DETAILS + 0 +POLYLINE + 5 +12AF + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +26B8 + 8 +DETAILS + 10 +13010.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +26B9 + 8 +DETAILS + 10 +13010.0 + 20 +4680.0 + 30 +0.0 + 0 +SEQEND + 5 +26BA + 8 +DETAILS + 0 +POLYLINE + 5 +12B3 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +26BB + 8 +DETAILS + 10 +10155.0 + 20 +4665.0 + 30 +0.0 + 0 +VERTEX + 5 +26BC + 8 +DETAILS + 10 +10155.0 + 20 +4640.0 + 30 +0.0 + 0 +SEQEND + 5 +26BD + 8 +DETAILS + 0 +POLYLINE + 5 +12B7 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +26BE + 8 +DETAILS + 10 +10155.0 + 20 +4440.0 + 30 +0.0 + 0 +VERTEX + 5 +26BF + 8 +DETAILS + 10 +10155.0 + 20 +4415.0 + 30 +0.0 + 0 +SEQEND + 5 +26C0 + 8 +DETAILS + 0 +POLYLINE + 5 +12BB + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +26C1 + 8 +DETAILS + 10 +10155.0 + 20 +4485.0 + 30 +0.0 + 0 +VERTEX + 5 +26C2 + 8 +DETAILS + 10 +10155.0 + 20 +4460.0 + 30 +0.0 + 0 +SEQEND + 5 +26C3 + 8 +DETAILS + 0 +POLYLINE + 5 +12BF + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +26C4 + 8 +DETAILS + 10 +10155.0 + 20 +4540.0 + 30 +0.0 + 0 +VERTEX + 5 +26C5 + 8 +DETAILS + 10 +10155.0 + 20 +4515.0 + 30 +0.0 + 0 +SEQEND + 5 +26C6 + 8 +DETAILS + 0 +POLYLINE + 5 +12C3 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +26C7 + 8 +DETAILS + 10 +10155.0 + 20 +4585.0 + 30 +0.0 + 0 +VERTEX + 5 +26C8 + 8 +DETAILS + 10 +10155.0 + 20 +4560.0 + 30 +0.0 + 0 +SEQEND + 5 +26C9 + 8 +DETAILS + 0 +POLYLINE + 5 +12C7 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +26CA + 8 +DETAILS + 10 +10155.0 + 20 +4625.0 + 30 +0.0 + 0 +VERTEX + 5 +26CB + 8 +DETAILS + 10 +10155.0 + 20 +4600.0 + 30 +0.0 + 0 +SEQEND + 5 +26CC + 8 +DETAILS + 0 +POLYLINE + 5 +12CB + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +26CD + 8 +DETAILS + 10 +10155.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +26CE + 8 +DETAILS + 10 +10170.0 + 20 +4725.0 + 30 +0.0 + 0 +SEQEND + 5 +26CF + 8 +DETAILS + 0 +POLYLINE + 5 +12CF + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +26D0 + 8 +DETAILS + 10 +10155.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +26D1 + 8 +DETAILS + 10 +10140.0 + 20 +4725.0 + 30 +0.0 + 0 +SEQEND + 5 +26D2 + 8 +DETAILS + 0 +POLYLINE + 5 +12D3 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +26D3 + 8 +DETAILS + 10 +10155.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +26D4 + 8 +DETAILS + 10 +10155.0 + 20 +4680.0 + 30 +0.0 + 0 +SEQEND + 5 +26D5 + 8 +DETAILS + 0 +POLYLINE + 5 +12D7 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +26D6 + 8 +DETAILS + 10 +8840.0 + 20 +4665.0 + 30 +0.0 + 0 +VERTEX + 5 +26D7 + 8 +DETAILS + 10 +8840.0 + 20 +4640.0 + 30 +0.0 + 0 +SEQEND + 5 +26D8 + 8 +DETAILS + 0 +POLYLINE + 5 +12DB + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +26D9 + 8 +DETAILS + 10 +8840.0 + 20 +4625.0 + 30 +0.0 + 0 +VERTEX + 5 +26DA + 8 +DETAILS + 10 +8840.0 + 20 +4600.0 + 30 +0.0 + 0 +SEQEND + 5 +26DB + 8 +DETAILS + 0 +POLYLINE + 5 +12DF + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +26DC + 8 +DETAILS + 10 +8840.0 + 20 +4585.0 + 30 +0.0 + 0 +VERTEX + 5 +26DD + 8 +DETAILS + 10 +8840.0 + 20 +4560.0 + 30 +0.0 + 0 +SEQEND + 5 +26DE + 8 +DETAILS + 0 +POLYLINE + 5 +12E3 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +26DF + 8 +DETAILS + 10 +8840.0 + 20 +4540.0 + 30 +0.0 + 0 +VERTEX + 5 +26E0 + 8 +DETAILS + 10 +8840.0 + 20 +4515.0 + 30 +0.0 + 0 +SEQEND + 5 +26E1 + 8 +DETAILS + 0 +POLYLINE + 5 +12E7 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +26E2 + 8 +DETAILS + 10 +8840.0 + 20 +4485.0 + 30 +0.0 + 0 +VERTEX + 5 +26E3 + 8 +DETAILS + 10 +8840.0 + 20 +4460.0 + 30 +0.0 + 0 +SEQEND + 5 +26E4 + 8 +DETAILS + 0 +POLYLINE + 5 +12EB + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +26E5 + 8 +DETAILS + 10 +8840.0 + 20 +4440.0 + 30 +0.0 + 0 +VERTEX + 5 +26E6 + 8 +DETAILS + 10 +8840.0 + 20 +4415.0 + 30 +0.0 + 0 +SEQEND + 5 +26E7 + 8 +DETAILS + 0 +POLYLINE + 5 +12EF + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +26E8 + 8 +DETAILS + 10 +8840.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +26E9 + 8 +DETAILS + 10 +8840.0 + 20 +4680.0 + 30 +0.0 + 0 +SEQEND + 5 +26EA + 8 +DETAILS + 0 +POLYLINE + 5 +12F3 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +26EB + 8 +DETAILS + 10 +8840.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +26EC + 8 +DETAILS + 10 +8825.0 + 20 +4725.0 + 30 +0.0 + 0 +SEQEND + 5 +26ED + 8 +DETAILS + 0 +POLYLINE + 5 +12F7 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +26EE + 8 +DETAILS + 10 +8840.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +26EF + 8 +DETAILS + 10 +8855.0 + 20 +4725.0 + 30 +0.0 + 0 +SEQEND + 5 +26F0 + 8 +DETAILS + 0 +POLYLINE + 5 +12FB + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +26F1 + 8 +DETAILS + 10 +12275.0 + 20 +4665.0 + 30 +0.0 + 0 +VERTEX + 5 +26F2 + 8 +DETAILS + 10 +12275.0 + 20 +4640.0 + 30 +0.0 + 0 +SEQEND + 5 +26F3 + 8 +DETAILS + 0 +POLYLINE + 5 +12FF + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +26F4 + 8 +DETAILS + 10 +12275.0 + 20 +4440.0 + 30 +0.0 + 0 +VERTEX + 5 +26F5 + 8 +DETAILS + 10 +12275.0 + 20 +4415.0 + 30 +0.0 + 0 +SEQEND + 5 +26F6 + 8 +DETAILS + 0 +POLYLINE + 5 +1303 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +26F7 + 8 +DETAILS + 10 +12275.0 + 20 +4485.0 + 30 +0.0 + 0 +VERTEX + 5 +26F8 + 8 +DETAILS + 10 +12275.0 + 20 +4460.0 + 30 +0.0 + 0 +SEQEND + 5 +26F9 + 8 +DETAILS + 0 +POLYLINE + 5 +1307 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +26FA + 8 +DETAILS + 10 +12275.0 + 20 +4540.0 + 30 +0.0 + 0 +VERTEX + 5 +26FB + 8 +DETAILS + 10 +12275.0 + 20 +4515.0 + 30 +0.0 + 0 +SEQEND + 5 +26FC + 8 +DETAILS + 0 +POLYLINE + 5 +130B + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +26FD + 8 +DETAILS + 10 +12275.0 + 20 +4585.0 + 30 +0.0 + 0 +VERTEX + 5 +26FE + 8 +DETAILS + 10 +12275.0 + 20 +4560.0 + 30 +0.0 + 0 +SEQEND + 5 +26FF + 8 +DETAILS + 0 +POLYLINE + 5 +130F + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2700 + 8 +DETAILS + 10 +12275.0 + 20 +4625.0 + 30 +0.0 + 0 +VERTEX + 5 +2701 + 8 +DETAILS + 10 +12275.0 + 20 +4600.0 + 30 +0.0 + 0 +SEQEND + 5 +2702 + 8 +DETAILS + 0 +POLYLINE + 5 +1313 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2703 + 8 +DETAILS + 10 +12275.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +2704 + 8 +DETAILS + 10 +12260.0 + 20 +4725.0 + 30 +0.0 + 0 +SEQEND + 5 +2705 + 8 +DETAILS + 0 +POLYLINE + 5 +1317 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2706 + 8 +DETAILS + 10 +12275.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +2707 + 8 +DETAILS + 10 +12290.0 + 20 +4725.0 + 30 +0.0 + 0 +SEQEND + 5 +2708 + 8 +DETAILS + 0 +POLYLINE + 5 +131B + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2709 + 8 +DETAILS + 10 +12275.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +270A + 8 +DETAILS + 10 +12275.0 + 20 +4680.0 + 30 +0.0 + 0 +SEQEND + 5 +270B + 8 +DETAILS + 0 +POLYLINE + 5 +131F + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +270C + 8 +DETAILS + 10 +10960.0 + 20 +4665.0 + 30 +0.0 + 0 +VERTEX + 5 +270D + 8 +DETAILS + 10 +10960.0 + 20 +4640.0 + 30 +0.0 + 0 +SEQEND + 5 +270E + 8 +DETAILS + 0 +POLYLINE + 5 +1323 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +270F + 8 +DETAILS + 10 +10960.0 + 20 +4625.0 + 30 +0.0 + 0 +VERTEX + 5 +2710 + 8 +DETAILS + 10 +10960.0 + 20 +4600.0 + 30 +0.0 + 0 +SEQEND + 5 +2711 + 8 +DETAILS + 0 +POLYLINE + 5 +1327 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2712 + 8 +DETAILS + 10 +10960.0 + 20 +4585.0 + 30 +0.0 + 0 +VERTEX + 5 +2713 + 8 +DETAILS + 10 +10960.0 + 20 +4560.0 + 30 +0.0 + 0 +SEQEND + 5 +2714 + 8 +DETAILS + 0 +POLYLINE + 5 +132B + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2715 + 8 +DETAILS + 10 +10960.0 + 20 +4540.0 + 30 +0.0 + 0 +VERTEX + 5 +2716 + 8 +DETAILS + 10 +10960.0 + 20 +4515.0 + 30 +0.0 + 0 +SEQEND + 5 +2717 + 8 +DETAILS + 0 +POLYLINE + 5 +132F + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2718 + 8 +DETAILS + 10 +10960.0 + 20 +4485.0 + 30 +0.0 + 0 +VERTEX + 5 +2719 + 8 +DETAILS + 10 +10960.0 + 20 +4460.0 + 30 +0.0 + 0 +SEQEND + 5 +271A + 8 +DETAILS + 0 +POLYLINE + 5 +1333 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +271B + 8 +DETAILS + 10 +10960.0 + 20 +4440.0 + 30 +0.0 + 0 +VERTEX + 5 +271C + 8 +DETAILS + 10 +10960.0 + 20 +4415.0 + 30 +0.0 + 0 +SEQEND + 5 +271D + 8 +DETAILS + 0 +POLYLINE + 5 +1337 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +271E + 8 +DETAILS + 10 +10960.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +271F + 8 +DETAILS + 10 +10960.0 + 20 +4680.0 + 30 +0.0 + 0 +SEQEND + 5 +2720 + 8 +DETAILS + 0 +POLYLINE + 5 +133B + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2721 + 8 +DETAILS + 10 +10960.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +2722 + 8 +DETAILS + 10 +10975.0 + 20 +4725.0 + 30 +0.0 + 0 +SEQEND + 5 +2723 + 8 +DETAILS + 0 +POLYLINE + 5 +133F + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2724 + 8 +DETAILS + 10 +10960.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +2725 + 8 +DETAILS + 10 +10945.0 + 20 +4725.0 + 30 +0.0 + 0 +SEQEND + 5 +2726 + 8 +DETAILS + 0 +POLYLINE + 5 +1343 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2727 + 8 +DETAILS + 10 +6995.0 + 20 +6825.0 + 30 +0.0 + 0 +VERTEX + 5 +2728 + 8 +DETAILS + 10 +7040.0 + 20 +6805.0 + 30 +0.0 + 0 +SEQEND + 5 +2729 + 8 +DETAILS + 0 +POLYLINE + 5 +1347 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +272A + 8 +DETAILS + 10 +7060.0 + 20 +6795.0 + 30 +0.0 + 0 +VERTEX + 5 +272B + 8 +DETAILS + 10 +7105.0 + 20 +6775.0 + 30 +0.0 + 0 +SEQEND + 5 +272C + 8 +DETAILS + 0 +POLYLINE + 5 +134B + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +272D + 8 +DETAILS + 10 +7135.0 + 20 +6760.0 + 30 +0.0 + 0 +VERTEX + 5 +272E + 8 +DETAILS + 10 +7180.0 + 20 +6740.0 + 30 +0.0 + 0 +SEQEND + 5 +272F + 8 +DETAILS + 0 +POLYLINE + 5 +134F + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2730 + 8 +DETAILS + 10 +7210.0 + 20 +6725.0 + 30 +0.0 + 0 +VERTEX + 5 +2731 + 8 +DETAILS + 10 +7255.0 + 20 +6705.0 + 30 +0.0 + 0 +SEQEND + 5 +2732 + 8 +DETAILS + 0 +POLYLINE + 5 +1353 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2733 + 8 +DETAILS + 10 +7275.0 + 20 +6695.0 + 30 +0.0 + 0 +VERTEX + 5 +2734 + 8 +DETAILS + 10 +7282.5 + 20 +6691.666667 + 30 +0.0 + 0 +SEQEND + 5 +2735 + 8 +DETAILS + 0 +POLYLINE + 5 +1357 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2736 + 8 +DETAILS + 10 +6995.0 + 20 +6825.0 + 30 +0.0 + 0 +VERTEX + 5 +2737 + 8 +DETAILS + 10 +6985.0 + 20 +6855.0 + 30 +0.0 + 0 +SEQEND + 5 +2738 + 8 +DETAILS + 0 +POLYLINE + 5 +135B + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2739 + 8 +DETAILS + 10 +6995.0 + 20 +6825.0 + 30 +0.0 + 0 +VERTEX + 5 +273A + 8 +DETAILS + 10 +6965.0 + 20 +6815.0 + 30 +0.0 + 0 +SEQEND + 5 +273B + 8 +DETAILS + 0 +POLYLINE + 5 +135F + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +273C + 8 +DETAILS + 10 +7285.0 + 20 +6690.0 + 30 +0.0 + 0 +VERTEX + 5 +273D + 8 +DETAILS + 10 +7310.0 + 20 +6710.0 + 30 +0.0 + 0 +SEQEND + 5 +273E + 8 +DETAILS + 0 +POLYLINE + 5 +1363 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +273F + 8 +DETAILS + 10 +7285.0 + 20 +6690.0 + 30 +0.0 + 0 +VERTEX + 5 +2740 + 8 +DETAILS + 10 +7305.0 + 20 +6665.0 + 30 +0.0 + 0 +SEQEND + 5 +2741 + 8 +DETAILS + 0 +POLYLINE + 5 +1367 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2742 + 8 +DETAILS + 10 +13830.0 + 20 +6690.0 + 30 +0.0 + 0 +VERTEX + 5 +2743 + 8 +DETAILS + 10 +13810.0 + 20 +6665.0 + 30 +0.0 + 0 +SEQEND + 5 +2744 + 8 +DETAILS + 0 +POLYLINE + 5 +136B + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2745 + 8 +DETAILS + 10 +13905.0 + 20 +6725.0 + 30 +0.0 + 0 +VERTEX + 5 +2746 + 8 +DETAILS + 10 +13860.0 + 20 +6705.0 + 30 +0.0 + 0 +SEQEND + 5 +2747 + 8 +DETAILS + 0 +POLYLINE + 5 +136F + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2748 + 8 +DETAILS + 10 +14120.0 + 20 +6825.0 + 30 +0.0 + 0 +VERTEX + 5 +2749 + 8 +DETAILS + 10 +14075.0 + 20 +6805.0 + 30 +0.0 + 0 +SEQEND + 5 +274A + 8 +DETAILS + 0 +POLYLINE + 5 +1373 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +274B + 8 +DETAILS + 10 +14120.0 + 20 +6825.0 + 30 +0.0 + 0 +VERTEX + 5 +274C + 8 +DETAILS + 10 +14150.0 + 20 +6815.0 + 30 +0.0 + 0 +SEQEND + 5 +274D + 8 +DETAILS + 0 +POLYLINE + 5 +1377 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +274E + 8 +DETAILS + 10 +14120.0 + 20 +6825.0 + 30 +0.0 + 0 +VERTEX + 5 +274F + 8 +DETAILS + 10 +14130.0 + 20 +6855.0 + 30 +0.0 + 0 +SEQEND + 5 +2750 + 8 +DETAILS + 0 +POLYLINE + 5 +137B + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2751 + 8 +DETAILS + 10 +13980.0 + 20 +6760.0 + 30 +0.0 + 0 +VERTEX + 5 +2752 + 8 +DETAILS + 10 +13935.0 + 20 +6740.0 + 30 +0.0 + 0 +SEQEND + 5 +2753 + 8 +DETAILS + 0 +POLYLINE + 5 +137F + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2754 + 8 +DETAILS + 10 +14055.0 + 20 +6795.0 + 30 +0.0 + 0 +VERTEX + 5 +2755 + 8 +DETAILS + 10 +14010.0 + 20 +6775.0 + 30 +0.0 + 0 +SEQEND + 5 +2756 + 8 +DETAILS + 0 +POLYLINE + 5 +1383 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2757 + 8 +DETAILS + 10 +13830.0 + 20 +6690.0 + 30 +0.0 + 0 +VERTEX + 5 +2758 + 8 +DETAILS + 10 +13805.0 + 20 +6710.0 + 30 +0.0 + 0 +SEQEND + 5 +2759 + 8 +DETAILS + 0 +POLYLINE + 5 +1387 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +275A + 8 +DETAILS + 10 +13840.0 + 20 +6695.0 + 30 +0.0 + 0 +VERTEX + 5 +275B + 8 +DETAILS + 10 +13832.5 + 20 +6691.666667 + 30 +0.0 + 0 +SEQEND + 5 +275C + 8 +DETAILS + 0 +POLYLINE + 5 +138B + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +275D + 8 +DETAILS + 10 +3915.0 + 20 +3880.0 + 30 +0.0 + 0 +VERTEX + 5 +275E + 8 +DETAILS + 10 +3945.0 + 20 +3880.0 + 30 +0.0 + 0 +SEQEND + 5 +275F + 8 +DETAILS + 0 +POLYLINE + 5 +138F + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2760 + 8 +DETAILS + 10 +3960.0 + 20 +3880.0 + 30 +0.0 + 0 +VERTEX + 5 +2761 + 8 +DETAILS + 10 +3985.0 + 20 +3880.0 + 30 +0.0 + 0 +SEQEND + 5 +2762 + 8 +DETAILS + 0 +POLYLINE + 5 +1393 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2763 + 8 +DETAILS + 10 +3990.0 + 20 +3880.0 + 30 +0.0 + 0 +VERTEX + 5 +2764 + 8 +DETAILS + 10 +4045.0 + 20 +3880.0 + 30 +0.0 + 0 +SEQEND + 5 +2765 + 8 +DETAILS + 0 +POLYLINE + 5 +1397 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2766 + 8 +DETAILS + 10 +4060.0 + 20 +3880.0 + 30 +0.0 + 0 +VERTEX + 5 +2767 + 8 +DETAILS + 10 +4085.0 + 20 +3880.0 + 30 +0.0 + 0 +SEQEND + 5 +2768 + 8 +DETAILS + 0 +POLYLINE + 5 +139B + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2769 + 8 +DETAILS + 10 +4100.0 + 20 +3880.0 + 30 +0.0 + 0 +VERTEX + 5 +276A + 8 +DETAILS + 10 +4125.0 + 20 +3880.0 + 30 +0.0 + 0 +SEQEND + 5 +276B + 8 +DETAILS + 0 +POLYLINE + 5 +139F + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +276C + 8 +DETAILS + 10 +4145.0 + 20 +3880.0 + 30 +0.0 + 0 +VERTEX + 5 +276D + 8 +DETAILS + 10 +4165.0 + 20 +3880.0 + 30 +0.0 + 0 +SEQEND + 5 +276E + 8 +DETAILS + 0 +POLYLINE + 5 +13A3 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +276F + 8 +DETAILS + 10 +4185.0 + 20 +3880.0 + 30 +0.0 + 0 +VERTEX + 5 +2770 + 8 +DETAILS + 10 +4215.0 + 20 +3880.0 + 30 +0.0 + 0 +SEQEND + 5 +2771 + 8 +DETAILS + 0 +POLYLINE + 5 +13A7 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2772 + 8 +DETAILS + 10 +4005.0 + 20 +3910.0 + 30 +0.0 + 0 +VERTEX + 5 +2773 + 8 +DETAILS + 10 +4005.0 + 20 +3850.0 + 30 +0.0 + 0 +SEQEND + 5 +2774 + 8 +DETAILS + 0 +POLYLINE + 5 +13AB + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2775 + 8 +DETAILS + 10 +4035.646689 + 20 +3894.975816 + 30 +0.0 + 0 +VERTEX + 5 +2776 + 8 +DETAILS + 10 +4035.646689 + 20 +3864.975816 + 30 +0.0 + 0 +SEQEND + 5 +2777 + 8 +DETAILS + 0 +POLYLINE + 5 +13AF + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2778 + 8 +DETAILS + 10 +3915.0 + 20 +4184.005135 + 30 +0.0 + 0 +VERTEX + 5 +2779 + 8 +DETAILS + 10 +3945.0 + 20 +4184.005135 + 30 +0.0 + 0 +SEQEND + 5 +277A + 8 +DETAILS + 0 +POLYLINE + 5 +13B3 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +277B + 8 +DETAILS + 10 +3960.0 + 20 +4184.005135 + 30 +0.0 + 0 +VERTEX + 5 +277C + 8 +DETAILS + 10 +3985.0 + 20 +4184.005135 + 30 +0.0 + 0 +SEQEND + 5 +277D + 8 +DETAILS + 0 +POLYLINE + 5 +13B7 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +277E + 8 +DETAILS + 10 +3990.0 + 20 +4184.005135 + 30 +0.0 + 0 +VERTEX + 5 +277F + 8 +DETAILS + 10 +4045.0 + 20 +4184.005135 + 30 +0.0 + 0 +SEQEND + 5 +2780 + 8 +DETAILS + 0 +POLYLINE + 5 +13BB + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2781 + 8 +DETAILS + 10 +4005.0 + 20 +4214.005135 + 30 +0.0 + 0 +VERTEX + 5 +2782 + 8 +DETAILS + 10 +4005.0 + 20 +4154.005135 + 30 +0.0 + 0 +SEQEND + 5 +2783 + 8 +DETAILS + 0 +POLYLINE + 5 +13BF + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2784 + 8 +DETAILS + 10 +4035.646689 + 20 +4198.980952 + 30 +0.0 + 0 +VERTEX + 5 +2785 + 8 +DETAILS + 10 +4035.646689 + 20 +4168.980952 + 30 +0.0 + 0 +SEQEND + 5 +2786 + 8 +DETAILS + 0 +POLYLINE + 5 +13C3 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2787 + 8 +DETAILS + 10 +4060.0 + 20 +4184.005135 + 30 +0.0 + 0 +VERTEX + 5 +2788 + 8 +DETAILS + 10 +4085.0 + 20 +4184.005135 + 30 +0.0 + 0 +SEQEND + 5 +2789 + 8 +DETAILS + 0 +POLYLINE + 5 +13C7 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +278A + 8 +DETAILS + 10 +4100.0 + 20 +4184.005135 + 30 +0.0 + 0 +VERTEX + 5 +278B + 8 +DETAILS + 10 +4125.0 + 20 +4184.005135 + 30 +0.0 + 0 +SEQEND + 5 +278C + 8 +DETAILS + 0 +POLYLINE + 5 +13CB + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +278D + 8 +DETAILS + 10 +4145.0 + 20 +4184.005135 + 30 +0.0 + 0 +VERTEX + 5 +278E + 8 +DETAILS + 10 +4165.0 + 20 +4184.005135 + 30 +0.0 + 0 +SEQEND + 5 +278F + 8 +DETAILS + 0 +POLYLINE + 5 +13CF + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2790 + 8 +DETAILS + 10 +4185.0 + 20 +4184.005135 + 30 +0.0 + 0 +VERTEX + 5 +2791 + 8 +DETAILS + 10 +4215.0 + 20 +4184.005135 + 30 +0.0 + 0 +SEQEND + 5 +2792 + 8 +DETAILS + 0 +POLYLINE + 5 +13D3 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2793 + 8 +DETAILS + 10 +3915.0 + 20 +4647.638341 + 30 +0.0 + 0 +VERTEX + 5 +2794 + 8 +DETAILS + 10 +3945.0 + 20 +4647.638341 + 30 +0.0 + 0 +SEQEND + 5 +2795 + 8 +DETAILS + 0 +POLYLINE + 5 +13D7 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2796 + 8 +DETAILS + 10 +3960.0 + 20 +4647.638341 + 30 +0.0 + 0 +VERTEX + 5 +2797 + 8 +DETAILS + 10 +3985.0 + 20 +4647.638341 + 30 +0.0 + 0 +SEQEND + 5 +2798 + 8 +DETAILS + 0 +POLYLINE + 5 +13DB + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2799 + 8 +DETAILS + 10 +4005.0 + 20 +4677.638341 + 30 +0.0 + 0 +VERTEX + 5 +279A + 8 +DETAILS + 10 +4005.0 + 20 +4617.638341 + 30 +0.0 + 0 +SEQEND + 5 +279B + 8 +DETAILS + 0 +POLYLINE + 5 +13DF + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +279C + 8 +DETAILS + 10 +3990.0 + 20 +4647.638341 + 30 +0.0 + 0 +VERTEX + 5 +279D + 8 +DETAILS + 10 +4045.0 + 20 +4647.638341 + 30 +0.0 + 0 +SEQEND + 5 +279E + 8 +DETAILS + 0 +POLYLINE + 5 +13E3 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +279F + 8 +DETAILS + 10 +4035.646689 + 20 +4662.614157 + 30 +0.0 + 0 +VERTEX + 5 +27A0 + 8 +DETAILS + 10 +4035.646689 + 20 +4632.614157 + 30 +0.0 + 0 +SEQEND + 5 +27A1 + 8 +DETAILS + 0 +POLYLINE + 5 +13E7 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +27A2 + 8 +DETAILS + 10 +4060.0 + 20 +4647.638341 + 30 +0.0 + 0 +VERTEX + 5 +27A3 + 8 +DETAILS + 10 +4085.0 + 20 +4647.638341 + 30 +0.0 + 0 +SEQEND + 5 +27A4 + 8 +DETAILS + 0 +POLYLINE + 5 +13EB + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +27A5 + 8 +DETAILS + 10 +4100.0 + 20 +4647.638341 + 30 +0.0 + 0 +VERTEX + 5 +27A6 + 8 +DETAILS + 10 +4125.0 + 20 +4647.638341 + 30 +0.0 + 0 +SEQEND + 5 +27A7 + 8 +DETAILS + 0 +POLYLINE + 5 +13EF + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +27A8 + 8 +DETAILS + 10 +4185.0 + 20 +4647.638341 + 30 +0.0 + 0 +VERTEX + 5 +27A9 + 8 +DETAILS + 10 +4215.0 + 20 +4647.638341 + 30 +0.0 + 0 +SEQEND + 5 +27AA + 8 +DETAILS + 0 +POLYLINE + 5 +13F3 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +27AB + 8 +DETAILS + 10 +4145.0 + 20 +4647.638341 + 30 +0.0 + 0 +VERTEX + 5 +27AC + 8 +DETAILS + 10 +4165.0 + 20 +4647.638341 + 30 +0.0 + 0 +SEQEND + 5 +27AD + 8 +DETAILS + 0 +POLYLINE + 5 +13F7 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +27AE + 8 +DETAILS + 10 +3915.0 + 20 +4938.630057 + 30 +0.0 + 0 +VERTEX + 5 +27AF + 8 +DETAILS + 10 +3945.0 + 20 +4938.630057 + 30 +0.0 + 0 +SEQEND + 5 +27B0 + 8 +DETAILS + 0 +POLYLINE + 5 +13FB + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +27B1 + 8 +DETAILS + 10 +3960.0 + 20 +4938.630057 + 30 +0.0 + 0 +VERTEX + 5 +27B2 + 8 +DETAILS + 10 +3985.0 + 20 +4938.630057 + 30 +0.0 + 0 +SEQEND + 5 +27B3 + 8 +DETAILS + 0 +POLYLINE + 5 +13FF + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +27B4 + 8 +DETAILS + 10 +4005.0 + 20 +4968.630057 + 30 +0.0 + 0 +VERTEX + 5 +27B5 + 8 +DETAILS + 10 +4005.0 + 20 +4908.630057 + 30 +0.0 + 0 +SEQEND + 5 +27B6 + 8 +DETAILS + 0 +POLYLINE + 5 +1403 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +27B7 + 8 +DETAILS + 10 +3990.0 + 20 +4938.630057 + 30 +0.0 + 0 +VERTEX + 5 +27B8 + 8 +DETAILS + 10 +4045.0 + 20 +4938.630057 + 30 +0.0 + 0 +SEQEND + 5 +27B9 + 8 +DETAILS + 0 +POLYLINE + 5 +1407 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +27BA + 8 +DETAILS + 10 +4035.646689 + 20 +4953.605874 + 30 +0.0 + 0 +VERTEX + 5 +27BB + 8 +DETAILS + 10 +4035.646689 + 20 +4923.605874 + 30 +0.0 + 0 +SEQEND + 5 +27BC + 8 +DETAILS + 0 +POLYLINE + 5 +140B + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +27BD + 8 +DETAILS + 10 +4060.0 + 20 +4938.630057 + 30 +0.0 + 0 +VERTEX + 5 +27BE + 8 +DETAILS + 10 +4085.0 + 20 +4938.630057 + 30 +0.0 + 0 +SEQEND + 5 +27BF + 8 +DETAILS + 0 +POLYLINE + 5 +140F + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +27C0 + 8 +DETAILS + 10 +4100.0 + 20 +4938.630057 + 30 +0.0 + 0 +VERTEX + 5 +27C1 + 8 +DETAILS + 10 +4125.0 + 20 +4938.630057 + 30 +0.0 + 0 +SEQEND + 5 +27C2 + 8 +DETAILS + 0 +POLYLINE + 5 +1413 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +27C3 + 8 +DETAILS + 10 +4145.0 + 20 +4938.630057 + 30 +0.0 + 0 +VERTEX + 5 +27C4 + 8 +DETAILS + 10 +4165.0 + 20 +4938.630057 + 30 +0.0 + 0 +SEQEND + 5 +27C5 + 8 +DETAILS + 0 +POLYLINE + 5 +1417 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +27C6 + 8 +DETAILS + 10 +4185.0 + 20 +4938.630057 + 30 +0.0 + 0 +VERTEX + 5 +27C7 + 8 +DETAILS + 10 +4215.0 + 20 +4938.630057 + 30 +0.0 + 0 +SEQEND + 5 +27C8 + 8 +DETAILS + 0 +POLYLINE + 5 +141B + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +27C9 + 8 +DETAILS + 10 +3915.0 + 20 +5279.376847 + 30 +0.0 + 0 +VERTEX + 5 +27CA + 8 +DETAILS + 10 +3945.0 + 20 +5279.376847 + 30 +0.0 + 0 +SEQEND + 5 +27CB + 8 +DETAILS + 0 +POLYLINE + 5 +141F + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +27CC + 8 +DETAILS + 10 +3960.0 + 20 +5279.376847 + 30 +0.0 + 0 +VERTEX + 5 +27CD + 8 +DETAILS + 10 +3985.0 + 20 +5279.376847 + 30 +0.0 + 0 +SEQEND + 5 +27CE + 8 +DETAILS + 0 +POLYLINE + 5 +1423 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +27CF + 8 +DETAILS + 10 +4005.0 + 20 +5309.376847 + 30 +0.0 + 0 +VERTEX + 5 +27D0 + 8 +DETAILS + 10 +4005.0 + 20 +5249.376847 + 30 +0.0 + 0 +SEQEND + 5 +27D1 + 8 +DETAILS + 0 +POLYLINE + 5 +1427 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +27D2 + 8 +DETAILS + 10 +3990.0 + 20 +5279.376847 + 30 +0.0 + 0 +VERTEX + 5 +27D3 + 8 +DETAILS + 10 +4045.0 + 20 +5279.376847 + 30 +0.0 + 0 +SEQEND + 5 +27D4 + 8 +DETAILS + 0 +POLYLINE + 5 +142B + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +27D5 + 8 +DETAILS + 10 +4035.646689 + 20 +5294.352664 + 30 +0.0 + 0 +VERTEX + 5 +27D6 + 8 +DETAILS + 10 +4035.646689 + 20 +5264.352664 + 30 +0.0 + 0 +SEQEND + 5 +27D7 + 8 +DETAILS + 0 +POLYLINE + 5 +142F + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +27D8 + 8 +DETAILS + 10 +4060.0 + 20 +5279.376847 + 30 +0.0 + 0 +VERTEX + 5 +27D9 + 8 +DETAILS + 10 +4085.0 + 20 +5279.376847 + 30 +0.0 + 0 +SEQEND + 5 +27DA + 8 +DETAILS + 0 +POLYLINE + 5 +1433 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +27DB + 8 +DETAILS + 10 +4100.0 + 20 +5279.376847 + 30 +0.0 + 0 +VERTEX + 5 +27DC + 8 +DETAILS + 10 +4125.0 + 20 +5279.376847 + 30 +0.0 + 0 +SEQEND + 5 +27DD + 8 +DETAILS + 0 +POLYLINE + 5 +1437 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +27DE + 8 +DETAILS + 10 +4145.0 + 20 +5279.376847 + 30 +0.0 + 0 +VERTEX + 5 +27DF + 8 +DETAILS + 10 +4165.0 + 20 +5279.376847 + 30 +0.0 + 0 +SEQEND + 5 +27E0 + 8 +DETAILS + 0 +POLYLINE + 5 +143B + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +27E1 + 8 +DETAILS + 10 +4185.0 + 20 +5279.376847 + 30 +0.0 + 0 +VERTEX + 5 +27E2 + 8 +DETAILS + 10 +4215.0 + 20 +5279.376847 + 30 +0.0 + 0 +SEQEND + 5 +27E3 + 8 +DETAILS + 0 +POLYLINE + 5 +143F + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +27E4 + 8 +DETAILS + 10 +3915.0 + 20 +5668.370933 + 30 +0.0 + 0 +VERTEX + 5 +27E5 + 8 +DETAILS + 10 +3945.0 + 20 +5668.370933 + 30 +0.0 + 0 +SEQEND + 5 +27E6 + 8 +DETAILS + 0 +POLYLINE + 5 +1443 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +27E7 + 8 +DETAILS + 10 +3960.0 + 20 +5668.370933 + 30 +0.0 + 0 +VERTEX + 5 +27E8 + 8 +DETAILS + 10 +3985.0 + 20 +5668.370933 + 30 +0.0 + 0 +SEQEND + 5 +27E9 + 8 +DETAILS + 0 +POLYLINE + 5 +1447 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +27EA + 8 +DETAILS + 10 +4005.0 + 20 +5698.370933 + 30 +0.0 + 0 +VERTEX + 5 +27EB + 8 +DETAILS + 10 +4005.0 + 20 +5638.370933 + 30 +0.0 + 0 +SEQEND + 5 +27EC + 8 +DETAILS + 0 +POLYLINE + 5 +144B + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +27ED + 8 +DETAILS + 10 +3990.0 + 20 +5668.370933 + 30 +0.0 + 0 +VERTEX + 5 +27EE + 8 +DETAILS + 10 +4045.0 + 20 +5668.370933 + 30 +0.0 + 0 +SEQEND + 5 +27EF + 8 +DETAILS + 0 +POLYLINE + 5 +144F + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +27F0 + 8 +DETAILS + 10 +4035.646689 + 20 +5683.346749 + 30 +0.0 + 0 +VERTEX + 5 +27F1 + 8 +DETAILS + 10 +4035.646689 + 20 +5653.346749 + 30 +0.0 + 0 +SEQEND + 5 +27F2 + 8 +DETAILS + 0 +POLYLINE + 5 +1453 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +27F3 + 8 +DETAILS + 10 +4060.0 + 20 +5668.370933 + 30 +0.0 + 0 +VERTEX + 5 +27F4 + 8 +DETAILS + 10 +4085.0 + 20 +5668.370933 + 30 +0.0 + 0 +SEQEND + 5 +27F5 + 8 +DETAILS + 0 +POLYLINE + 5 +1457 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +27F6 + 8 +DETAILS + 10 +4100.0 + 20 +5668.370933 + 30 +0.0 + 0 +VERTEX + 5 +27F7 + 8 +DETAILS + 10 +4125.0 + 20 +5668.370933 + 30 +0.0 + 0 +SEQEND + 5 +27F8 + 8 +DETAILS + 0 +POLYLINE + 5 +145B + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +27F9 + 8 +DETAILS + 10 +4145.0 + 20 +5668.370933 + 30 +0.0 + 0 +VERTEX + 5 +27FA + 8 +DETAILS + 10 +4165.0 + 20 +5668.370933 + 30 +0.0 + 0 +SEQEND + 5 +27FB + 8 +DETAILS + 0 +POLYLINE + 5 +145F + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +27FC + 8 +DETAILS + 10 +4185.0 + 20 +5668.370933 + 30 +0.0 + 0 +VERTEX + 5 +27FD + 8 +DETAILS + 10 +4215.0 + 20 +5668.370933 + 30 +0.0 + 0 +SEQEND + 5 +27FE + 8 +DETAILS + 0 +POLYLINE + 5 +1463 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +27FF + 8 +DETAILS + 10 +17200.0 + 20 +4184.005135 + 30 +0.0 + 0 +VERTEX + 5 +2800 + 8 +DETAILS + 10 +17170.0 + 20 +4184.005135 + 30 +0.0 + 0 +SEQEND + 5 +2801 + 8 +DETAILS + 0 +POLYLINE + 5 +1467 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2802 + 8 +DETAILS + 10 +17155.0 + 20 +4184.005135 + 30 +0.0 + 0 +VERTEX + 5 +2803 + 8 +DETAILS + 10 +17130.0 + 20 +4184.005135 + 30 +0.0 + 0 +SEQEND + 5 +2804 + 8 +DETAILS + 0 +POLYLINE + 5 +146B + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2805 + 8 +DETAILS + 10 +17125.0 + 20 +4184.005135 + 30 +0.0 + 0 +VERTEX + 5 +2806 + 8 +DETAILS + 10 +17070.0 + 20 +4184.005135 + 30 +0.0 + 0 +SEQEND + 5 +2807 + 8 +DETAILS + 0 +POLYLINE + 5 +146F + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2808 + 8 +DETAILS + 10 +17110.0 + 20 +4214.005135 + 30 +0.0 + 0 +VERTEX + 5 +2809 + 8 +DETAILS + 10 +17110.0 + 20 +4154.005135 + 30 +0.0 + 0 +SEQEND + 5 +280A + 8 +DETAILS + 0 +POLYLINE + 5 +1473 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +280B + 8 +DETAILS + 10 +17079.353311 + 20 +4198.980952 + 30 +0.0 + 0 +VERTEX + 5 +280C + 8 +DETAILS + 10 +17079.353311 + 20 +4168.980952 + 30 +0.0 + 0 +SEQEND + 5 +280D + 8 +DETAILS + 0 +POLYLINE + 5 +1477 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +280E + 8 +DETAILS + 10 +17055.0 + 20 +4184.005135 + 30 +0.0 + 0 +VERTEX + 5 +280F + 8 +DETAILS + 10 +17030.0 + 20 +4184.005135 + 30 +0.0 + 0 +SEQEND + 5 +2810 + 8 +DETAILS + 0 +POLYLINE + 5 +147B + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2811 + 8 +DETAILS + 10 +17015.0 + 20 +4184.005135 + 30 +0.0 + 0 +VERTEX + 5 +2812 + 8 +DETAILS + 10 +16990.0 + 20 +4184.005135 + 30 +0.0 + 0 +SEQEND + 5 +2813 + 8 +DETAILS + 0 +POLYLINE + 5 +147F + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2814 + 8 +DETAILS + 10 +16970.0 + 20 +4184.005135 + 30 +0.0 + 0 +VERTEX + 5 +2815 + 8 +DETAILS + 10 +16950.0 + 20 +4184.005135 + 30 +0.0 + 0 +SEQEND + 5 +2816 + 8 +DETAILS + 0 +POLYLINE + 5 +1483 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2817 + 8 +DETAILS + 10 +16930.0 + 20 +4184.005135 + 30 +0.0 + 0 +VERTEX + 5 +2818 + 8 +DETAILS + 10 +16900.0 + 20 +4184.005135 + 30 +0.0 + 0 +SEQEND + 5 +2819 + 8 +DETAILS + 0 +POLYLINE + 5 +1487 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +281A + 8 +DETAILS + 10 +17200.0 + 20 +3880.0 + 30 +0.0 + 0 +VERTEX + 5 +281B + 8 +DETAILS + 10 +17170.0 + 20 +3880.0 + 30 +0.0 + 0 +SEQEND + 5 +281C + 8 +DETAILS + 0 +POLYLINE + 5 +148B + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +281D + 8 +DETAILS + 10 +17155.0 + 20 +3880.0 + 30 +0.0 + 0 +VERTEX + 5 +281E + 8 +DETAILS + 10 +17130.0 + 20 +3880.0 + 30 +0.0 + 0 +SEQEND + 5 +281F + 8 +DETAILS + 0 +POLYLINE + 5 +148F + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2820 + 8 +DETAILS + 10 +17125.0 + 20 +3880.0 + 30 +0.0 + 0 +VERTEX + 5 +2821 + 8 +DETAILS + 10 +17070.0 + 20 +3880.0 + 30 +0.0 + 0 +SEQEND + 5 +2822 + 8 +DETAILS + 0 +POLYLINE + 5 +1493 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2823 + 8 +DETAILS + 10 +17110.0 + 20 +3910.0 + 30 +0.0 + 0 +VERTEX + 5 +2824 + 8 +DETAILS + 10 +17110.0 + 20 +3850.0 + 30 +0.0 + 0 +SEQEND + 5 +2825 + 8 +DETAILS + 0 +POLYLINE + 5 +1497 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2826 + 8 +DETAILS + 10 +17079.353311 + 20 +3894.975816 + 30 +0.0 + 0 +VERTEX + 5 +2827 + 8 +DETAILS + 10 +17079.353311 + 20 +3864.975816 + 30 +0.0 + 0 +SEQEND + 5 +2828 + 8 +DETAILS + 0 +POLYLINE + 5 +149B + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2829 + 8 +DETAILS + 10 +17055.0 + 20 +3880.0 + 30 +0.0 + 0 +VERTEX + 5 +282A + 8 +DETAILS + 10 +17030.0 + 20 +3880.0 + 30 +0.0 + 0 +SEQEND + 5 +282B + 8 +DETAILS + 0 +POLYLINE + 5 +149F + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +282C + 8 +DETAILS + 10 +17015.0 + 20 +3880.0 + 30 +0.0 + 0 +VERTEX + 5 +282D + 8 +DETAILS + 10 +16990.0 + 20 +3880.0 + 30 +0.0 + 0 +SEQEND + 5 +282E + 8 +DETAILS + 0 +POLYLINE + 5 +14A3 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +282F + 8 +DETAILS + 10 +16970.0 + 20 +3880.0 + 30 +0.0 + 0 +VERTEX + 5 +2830 + 8 +DETAILS + 10 +16950.0 + 20 +3880.0 + 30 +0.0 + 0 +SEQEND + 5 +2831 + 8 +DETAILS + 0 +POLYLINE + 5 +14A7 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2832 + 8 +DETAILS + 10 +16930.0 + 20 +3880.0 + 30 +0.0 + 0 +VERTEX + 5 +2833 + 8 +DETAILS + 10 +16900.0 + 20 +3880.0 + 30 +0.0 + 0 +SEQEND + 5 +2834 + 8 +DETAILS + 0 +POLYLINE + 5 +14AB + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2835 + 8 +DETAILS + 10 +17200.0 + 20 +4938.630057 + 30 +0.0 + 0 +VERTEX + 5 +2836 + 8 +DETAILS + 10 +17170.0 + 20 +4938.630057 + 30 +0.0 + 0 +SEQEND + 5 +2837 + 8 +DETAILS + 0 +POLYLINE + 5 +14AF + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2838 + 8 +DETAILS + 10 +17155.0 + 20 +4938.630057 + 30 +0.0 + 0 +VERTEX + 5 +2839 + 8 +DETAILS + 10 +17130.0 + 20 +4938.630057 + 30 +0.0 + 0 +SEQEND + 5 +283A + 8 +DETAILS + 0 +POLYLINE + 5 +14B3 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +283B + 8 +DETAILS + 10 +17125.0 + 20 +4938.630057 + 30 +0.0 + 0 +VERTEX + 5 +283C + 8 +DETAILS + 10 +17070.0 + 20 +4938.630057 + 30 +0.0 + 0 +SEQEND + 5 +283D + 8 +DETAILS + 0 +POLYLINE + 5 +14B7 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +283E + 8 +DETAILS + 10 +17110.0 + 20 +4968.630057 + 30 +0.0 + 0 +VERTEX + 5 +283F + 8 +DETAILS + 10 +17110.0 + 20 +4908.630057 + 30 +0.0 + 0 +SEQEND + 5 +2840 + 8 +DETAILS + 0 +POLYLINE + 5 +14BB + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2841 + 8 +DETAILS + 10 +17079.353311 + 20 +4953.605874 + 30 +0.0 + 0 +VERTEX + 5 +2842 + 8 +DETAILS + 10 +17079.353311 + 20 +4923.605874 + 30 +0.0 + 0 +SEQEND + 5 +2843 + 8 +DETAILS + 0 +POLYLINE + 5 +14BF + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2844 + 8 +DETAILS + 10 +17055.0 + 20 +4938.630057 + 30 +0.0 + 0 +VERTEX + 5 +2845 + 8 +DETAILS + 10 +17030.0 + 20 +4938.630057 + 30 +0.0 + 0 +SEQEND + 5 +2846 + 8 +DETAILS + 0 +POLYLINE + 5 +14C3 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2847 + 8 +DETAILS + 10 +17015.0 + 20 +4938.630057 + 30 +0.0 + 0 +VERTEX + 5 +2848 + 8 +DETAILS + 10 +16990.0 + 20 +4938.630057 + 30 +0.0 + 0 +SEQEND + 5 +2849 + 8 +DETAILS + 0 +POLYLINE + 5 +14C7 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +284A + 8 +DETAILS + 10 +16970.0 + 20 +4938.630057 + 30 +0.0 + 0 +VERTEX + 5 +284B + 8 +DETAILS + 10 +16950.0 + 20 +4938.630057 + 30 +0.0 + 0 +SEQEND + 5 +284C + 8 +DETAILS + 0 +POLYLINE + 5 +14CB + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +284D + 8 +DETAILS + 10 +16930.0 + 20 +4938.630057 + 30 +0.0 + 0 +VERTEX + 5 +284E + 8 +DETAILS + 10 +16900.0 + 20 +4938.630057 + 30 +0.0 + 0 +SEQEND + 5 +284F + 8 +DETAILS + 0 +POLYLINE + 5 +14CF + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2850 + 8 +DETAILS + 10 +17200.0 + 20 +4647.638341 + 30 +0.0 + 0 +VERTEX + 5 +2851 + 8 +DETAILS + 10 +17170.0 + 20 +4647.638341 + 30 +0.0 + 0 +SEQEND + 5 +2852 + 8 +DETAILS + 0 +POLYLINE + 5 +14D3 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2853 + 8 +DETAILS + 10 +17155.0 + 20 +4647.638341 + 30 +0.0 + 0 +VERTEX + 5 +2854 + 8 +DETAILS + 10 +17130.0 + 20 +4647.638341 + 30 +0.0 + 0 +SEQEND + 5 +2855 + 8 +DETAILS + 0 +POLYLINE + 5 +14D7 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2856 + 8 +DETAILS + 10 +17125.0 + 20 +4647.638341 + 30 +0.0 + 0 +VERTEX + 5 +2857 + 8 +DETAILS + 10 +17070.0 + 20 +4647.638341 + 30 +0.0 + 0 +SEQEND + 5 +2858 + 8 +DETAILS + 0 +POLYLINE + 5 +14DB + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2859 + 8 +DETAILS + 10 +17110.0 + 20 +4677.638341 + 30 +0.0 + 0 +VERTEX + 5 +285A + 8 +DETAILS + 10 +17110.0 + 20 +4617.638341 + 30 +0.0 + 0 +SEQEND + 5 +285B + 8 +DETAILS + 0 +POLYLINE + 5 +14DF + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +285C + 8 +DETAILS + 10 +17079.353311 + 20 +4662.614157 + 30 +0.0 + 0 +VERTEX + 5 +285D + 8 +DETAILS + 10 +17079.353311 + 20 +4632.614157 + 30 +0.0 + 0 +SEQEND + 5 +285E + 8 +DETAILS + 0 +POLYLINE + 5 +14E3 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +285F + 8 +DETAILS + 10 +17055.0 + 20 +4647.638341 + 30 +0.0 + 0 +VERTEX + 5 +2860 + 8 +DETAILS + 10 +17030.0 + 20 +4647.638341 + 30 +0.0 + 0 +SEQEND + 5 +2861 + 8 +DETAILS + 0 +POLYLINE + 5 +14E7 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2862 + 8 +DETAILS + 10 +17015.0 + 20 +4647.638341 + 30 +0.0 + 0 +VERTEX + 5 +2863 + 8 +DETAILS + 10 +16990.0 + 20 +4647.638341 + 30 +0.0 + 0 +SEQEND + 5 +2864 + 8 +DETAILS + 0 +POLYLINE + 5 +14EB + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2865 + 8 +DETAILS + 10 +16970.0 + 20 +4647.638341 + 30 +0.0 + 0 +VERTEX + 5 +2866 + 8 +DETAILS + 10 +16950.0 + 20 +4647.638341 + 30 +0.0 + 0 +SEQEND + 5 +2867 + 8 +DETAILS + 0 +POLYLINE + 5 +14EF + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2868 + 8 +DETAILS + 10 +16930.0 + 20 +4647.638341 + 30 +0.0 + 0 +VERTEX + 5 +2869 + 8 +DETAILS + 10 +16900.0 + 20 +4647.638341 + 30 +0.0 + 0 +SEQEND + 5 +286A + 8 +DETAILS + 0 +POLYLINE + 5 +14F3 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +286B + 8 +DETAILS + 10 +17200.0 + 20 +5279.376847 + 30 +0.0 + 0 +VERTEX + 5 +286C + 8 +DETAILS + 10 +17170.0 + 20 +5279.376847 + 30 +0.0 + 0 +SEQEND + 5 +286D + 8 +DETAILS + 0 +POLYLINE + 5 +14F7 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +286E + 8 +DETAILS + 10 +17155.0 + 20 +5279.376847 + 30 +0.0 + 0 +VERTEX + 5 +286F + 8 +DETAILS + 10 +17130.0 + 20 +5279.376847 + 30 +0.0 + 0 +SEQEND + 5 +2870 + 8 +DETAILS + 0 +POLYLINE + 5 +14FB + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2871 + 8 +DETAILS + 10 +17110.0 + 20 +5309.376847 + 30 +0.0 + 0 +VERTEX + 5 +2872 + 8 +DETAILS + 10 +17110.0 + 20 +5249.376847 + 30 +0.0 + 0 +SEQEND + 5 +2873 + 8 +DETAILS + 0 +POLYLINE + 5 +14FF + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2874 + 8 +DETAILS + 10 +17125.0 + 20 +5279.376847 + 30 +0.0 + 0 +VERTEX + 5 +2875 + 8 +DETAILS + 10 +17070.0 + 20 +5279.376847 + 30 +0.0 + 0 +SEQEND + 5 +2876 + 8 +DETAILS + 0 +POLYLINE + 5 +1503 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2877 + 8 +DETAILS + 10 +17079.353311 + 20 +5294.352664 + 30 +0.0 + 0 +VERTEX + 5 +2878 + 8 +DETAILS + 10 +17079.353311 + 20 +5264.352664 + 30 +0.0 + 0 +SEQEND + 5 +2879 + 8 +DETAILS + 0 +POLYLINE + 5 +1507 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +287A + 8 +DETAILS + 10 +17055.0 + 20 +5279.376847 + 30 +0.0 + 0 +VERTEX + 5 +287B + 8 +DETAILS + 10 +17030.0 + 20 +5279.376847 + 30 +0.0 + 0 +SEQEND + 5 +287C + 8 +DETAILS + 0 +LINE + 5 +150B + 8 +0 + 62 + 0 + 10 +17065.0 + 20 +5279.42286 + 30 +0.0 + 11 +17040.0 + 21 +5279.42286 + 31 +0.0 + 0 +POLYLINE + 5 +150C + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +287D + 8 +DETAILS + 10 +17015.0 + 20 +5279.376847 + 30 +0.0 + 0 +VERTEX + 5 +287E + 8 +DETAILS + 10 +16990.0 + 20 +5279.376847 + 30 +0.0 + 0 +SEQEND + 5 +287F + 8 +DETAILS + 0 +POLYLINE + 5 +1510 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2880 + 8 +DETAILS + 10 +16970.0 + 20 +5279.376847 + 30 +0.0 + 0 +VERTEX + 5 +2881 + 8 +DETAILS + 10 +16950.0 + 20 +5279.376847 + 30 +0.0 + 0 +SEQEND + 5 +2882 + 8 +DETAILS + 0 +POLYLINE + 5 +1514 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2883 + 8 +DETAILS + 10 +16930.0 + 20 +5279.376847 + 30 +0.0 + 0 +VERTEX + 5 +2884 + 8 +DETAILS + 10 +16900.0 + 20 +5279.376847 + 30 +0.0 + 0 +SEQEND + 5 +2885 + 8 +DETAILS + 0 +POLYLINE + 5 +1518 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2886 + 8 +DETAILS + 10 +17200.0 + 20 +5668.370933 + 30 +0.0 + 0 +VERTEX + 5 +2887 + 8 +DETAILS + 10 +17170.0 + 20 +5668.370933 + 30 +0.0 + 0 +SEQEND + 5 +2888 + 8 +DETAILS + 0 +POLYLINE + 5 +151C + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2889 + 8 +DETAILS + 10 +17155.0 + 20 +5668.370933 + 30 +0.0 + 0 +VERTEX + 5 +288A + 8 +DETAILS + 10 +17130.0 + 20 +5668.370933 + 30 +0.0 + 0 +SEQEND + 5 +288B + 8 +DETAILS + 0 +POLYLINE + 5 +1520 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +288C + 8 +DETAILS + 10 +17110.0 + 20 +5698.370933 + 30 +0.0 + 0 +VERTEX + 5 +288D + 8 +DETAILS + 10 +17110.0 + 20 +5638.370933 + 30 +0.0 + 0 +SEQEND + 5 +288E + 8 +DETAILS + 0 +POLYLINE + 5 +1524 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +288F + 8 +DETAILS + 10 +17125.0 + 20 +5668.370933 + 30 +0.0 + 0 +VERTEX + 5 +2890 + 8 +DETAILS + 10 +17070.0 + 20 +5668.370933 + 30 +0.0 + 0 +SEQEND + 5 +2891 + 8 +DETAILS + 0 +POLYLINE + 5 +1528 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2892 + 8 +DETAILS + 10 +17079.353311 + 20 +5683.346749 + 30 +0.0 + 0 +VERTEX + 5 +2893 + 8 +DETAILS + 10 +17079.353311 + 20 +5653.346749 + 30 +0.0 + 0 +SEQEND + 5 +2894 + 8 +DETAILS + 0 +POLYLINE + 5 +152C + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2895 + 8 +DETAILS + 10 +17055.0 + 20 +5668.370933 + 30 +0.0 + 0 +VERTEX + 5 +2896 + 8 +DETAILS + 10 +17030.0 + 20 +5668.370933 + 30 +0.0 + 0 +SEQEND + 5 +2897 + 8 +DETAILS + 0 +POLYLINE + 5 +1530 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +2898 + 8 +DETAILS + 10 +17015.0 + 20 +5668.370933 + 30 +0.0 + 0 +VERTEX + 5 +2899 + 8 +DETAILS + 10 +16990.0 + 20 +5668.370933 + 30 +0.0 + 0 +SEQEND + 5 +289A + 8 +DETAILS + 0 +POLYLINE + 5 +1534 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +289B + 8 +DETAILS + 10 +16970.0 + 20 +5668.370933 + 30 +0.0 + 0 +VERTEX + 5 +289C + 8 +DETAILS + 10 +16950.0 + 20 +5668.370933 + 30 +0.0 + 0 +SEQEND + 5 +289D + 8 +DETAILS + 0 +POLYLINE + 5 +1538 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +289E + 8 +DETAILS + 10 +16930.0 + 20 +5668.370933 + 30 +0.0 + 0 +VERTEX + 5 +289F + 8 +DETAILS + 10 +16900.0 + 20 +5668.370933 + 30 +0.0 + 0 +SEQEND + 5 +28A0 + 8 +DETAILS + 0 +POLYLINE + 5 +153C + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +28A1 + 8 +HOLZ + 10 +7080.0 + 20 +6555.0 + 30 +0.0 + 0 +VERTEX + 5 +28A2 + 8 +HOLZ + 10 +7285.0 + 20 +6555.0 + 30 +0.0 + 0 +SEQEND + 5 +28A3 + 8 +HOLZ + 0 +POLYLINE + 5 +1540 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +28A4 + 8 +HOLZ + 10 +7285.0 + 20 +6281.0 + 30 +0.0 + 0 +VERTEX + 5 +28A5 + 8 +HOLZ + 10 +7080.0 + 20 +6281.0 + 30 +0.0 + 0 +SEQEND + 5 +28A6 + 8 +HOLZ + 0 +POLYLINE + 5 +1544 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1545 + 8 +HOLZ + 10 +7088.07284 + 20 +6503.677065 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1546 + 8 +HOLZ + 10 +7088.07284 + 20 +6503.677065 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1547 + 8 +HOLZ + 10 +7096.604084 + 20 +6503.761117 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1548 + 8 +HOLZ + 10 +7103.533424 + 20 +6503.996953 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1549 + 8 +HOLZ + 10 +7109.081304 + 20 +6504.360091 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +154A + 8 +HOLZ + 10 +7113.468172 + 20 +6504.826051 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +154B + 8 +HOLZ + 10 +7116.914472 + 20 +6505.370351 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +154C + 8 +HOLZ + 10 +7119.640651 + 20 +6505.968509 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +154D + 8 +HOLZ + 10 +7121.867154 + 20 +6506.596046 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +154E + 8 +HOLZ + 10 +7123.814428 + 20 +6507.22848 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +154F + 8 +HOLZ + 10 +7125.667401 + 20 +6507.845001 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1550 + 8 +HOLZ + 10 +7127.468938 + 20 +6508.439489 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1551 + 8 +HOLZ + 10 +7129.226388 + 20 +6509.009497 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1552 + 8 +HOLZ + 10 +7130.947096 + 20 +6509.552575 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1553 + 8 +HOLZ + 10 +7132.638412 + 20 +6510.066276 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1554 + 8 +HOLZ + 10 +7134.307684 + 20 +6510.548151 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1555 + 8 +HOLZ + 10 +7135.962258 + 20 +6510.995753 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1556 + 8 +HOLZ + 10 +7137.609483 + 20 +6511.406632 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1557 + 8 +HOLZ + 10 +7139.255482 + 20 +6511.78038 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1558 + 8 +HOLZ + 10 +7140.90148 + 20 +6512.124751 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1559 + 8 +HOLZ + 10 +7142.547477 + 20 +6512.449536 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +155A + 8 +HOLZ + 10 +7144.193473 + 20 +6512.764529 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +155B + 8 +HOLZ + 10 +7145.839469 + 20 +6513.079522 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +155C + 8 +HOLZ + 10 +7147.485464 + 20 +6513.404307 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +155D + 8 +HOLZ + 10 +7149.131458 + 20 +6513.748678 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +155E + 8 +HOLZ + 10 +7150.777452 + 20 +6514.122427 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +155F + 8 +HOLZ + 10 +7152.423447 + 20 +6514.533918 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1560 + 8 +HOLZ + 10 +7154.069441 + 20 +6514.985803 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1561 + 8 +HOLZ + 10 +7155.715435 + 20 +6515.479307 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1562 + 8 +HOLZ + 10 +7157.36143 + 20 +6516.015653 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1563 + 8 +HOLZ + 10 +7159.007424 + 20 +6516.596065 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1564 + 8 +HOLZ + 10 +7160.653418 + 20 +6517.221768 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1565 + 8 +HOLZ + 10 +7162.299413 + 20 +6517.893984 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1566 + 8 +HOLZ + 10 +7163.945407 + 20 +6518.613938 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1567 + 8 +HOLZ + 10 +7165.587727 + 20 +6519.382039 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1568 + 8 +HOLZ + 10 +7167.208003 + 20 +6520.195429 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1569 + 8 +HOLZ + 10 +7168.784189 + 20 +6521.050437 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +156A + 8 +HOLZ + 10 +7170.294242 + 20 +6521.943391 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +156B + 8 +HOLZ + 10 +7171.716117 + 20 +6522.870619 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +156C + 8 +HOLZ + 10 +7173.027769 + 20 +6523.828449 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +156D + 8 +HOLZ + 10 +7174.207154 + 20 +6524.813209 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +156E + 8 +HOLZ + 10 +7175.232227 + 20 +6525.821227 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +156F + 8 +HOLZ + 10 +7176.090946 + 20 +6526.849239 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1570 + 8 +HOLZ + 10 +7176.811273 + 20 +6527.895613 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1571 + 8 +HOLZ + 10 +7177.431175 + 20 +6528.959125 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1572 + 8 +HOLZ + 10 +7177.988618 + 20 +6530.03855 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1573 + 8 +HOLZ + 10 +7178.521567 + 20 +6531.132664 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1574 + 8 +HOLZ + 10 +7179.067987 + 20 +6532.240243 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1575 + 8 +HOLZ + 10 +7179.665844 + 20 +6533.360063 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1576 + 8 +HOLZ + 10 +7180.353103 + 20 +6534.4909 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1577 + 8 +HOLZ + 10 +7181.162016 + 20 +6535.627652 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1578 + 8 +HOLZ + 10 +7182.10197 + 20 +6536.749715 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1579 + 8 +HOLZ + 10 +7183.176642 + 20 +6537.832608 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +157A + 8 +HOLZ + 10 +7184.389704 + 20 +6538.851848 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +157B + 8 +HOLZ + 10 +7185.744832 + 20 +6539.782956 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +157C + 8 +HOLZ + 10 +7187.245699 + 20 +6540.601449 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +157D + 8 +HOLZ + 10 +7188.89598 + 20 +6541.282846 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +157E + 8 +HOLZ + 10 +7190.699349 + 20 +6541.802666 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +157F + 8 +HOLZ + 10 +7192.654582 + 20 +6542.144791 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1580 + 8 +HOLZ + 10 +7194.740858 + 20 +6542.326563 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1581 + 8 +HOLZ + 10 +7196.932459 + 20 +6542.373688 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1582 + 8 +HOLZ + 10 +7199.203666 + 20 +6542.31187 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1583 + 8 +HOLZ + 10 +7201.52876 + 20 +6542.166816 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1584 + 8 +HOLZ + 10 +7203.882022 + 20 +6541.96423 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1585 + 8 +HOLZ + 10 +7206.237734 + 20 +6541.729819 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1586 + 8 +HOLZ + 10 +7208.570176 + 20 +6541.489288 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1587 + 8 +HOLZ + 10 +7210.864754 + 20 +6541.266199 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1588 + 8 +HOLZ + 10 +7213.151372 + 20 +6541.075549 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1589 + 8 +HOLZ + 10 +7215.471056 + 20 +6540.930189 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +158A + 8 +HOLZ + 10 +7217.864835 + 20 +6540.842973 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +158B + 8 +HOLZ + 10 +7220.373737 + 20 +6540.826753 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +158C + 8 +HOLZ + 10 +7223.038787 + 20 +6540.894382 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +158D + 8 +HOLZ + 10 +7225.901015 + 20 +6541.058713 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +158E + 8 +HOLZ + 10 +7229.001448 + 20 +6541.332599 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +158F + 8 +HOLZ + 10 +7232.353149 + 20 +6541.734603 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1590 + 8 +HOLZ + 10 +7235.857325 + 20 +6542.306141 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1591 + 8 +HOLZ + 10 +7239.387218 + 20 +6543.094339 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1592 + 8 +HOLZ + 10 +7242.81607 + 20 +6544.146321 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1593 + 8 +HOLZ + 10 +7246.017125 + 20 +6545.509214 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1594 + 8 +HOLZ + 10 +7248.863625 + 20 +6547.230145 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1595 + 8 +HOLZ + 10 +7251.228812 + 20 +6549.356239 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1596 + 8 +HOLZ + 10 +7252.985928 + 20 +6551.934622 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1597 + 8 +HOLZ + 10 +7113.15465 + 20 +6503.677065 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1598 + 8 +HOLZ + 10 +7124.441455 + 20 +6507.43738 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1599 + 8 +HOLZ + 10 +7137.609498 + 20 +6511.824451 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +159A + 8 +HOLZ + 10 +7150.777452 + 20 +6513.704608 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +159B + 8 +HOLZ + 10 +7163.945407 + 20 +6518.091679 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +159C + 8 +HOLZ + 10 +7177.113361 + 20 +6525.612308 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +159D + 8 +HOLZ + 10 +7178.99451 + 20 +6534.386449 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +159E + 8 +HOLZ + 10 +7189.027217 + 20 +6543.787291 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +159F + 8 +HOLZ + 10 +7209.092717 + 20 +6541.280378 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +15A0 + 8 +HOLZ + 10 +7226.02297 + 20 +6540.026922 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +15A1 + 8 +HOLZ + 10 +7249.223718 + 20 +6544.413992 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +15A2 + 8 +HOLZ + 10 +7252.985928 + 20 +6551.934622 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +15A3 + 8 +HOLZ + 0 +POLYLINE + 5 +15A4 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +15A5 + 8 +HOLZ + 10 +7087.44579 + 20 +6449.778981 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +15A6 + 8 +HOLZ + 10 +7087.44579 + 20 +6449.778981 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15A7 + 8 +HOLZ + 10 +7096.078787 + 20 +6453.101106 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15A8 + 8 +HOLZ + 10 +7103.308894 + 20 +6455.204059 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15A9 + 8 +HOLZ + 10 +7109.34982 + 20 +6456.278796 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15AA + 8 +HOLZ + 10 +7114.415274 + 20 +6456.51627 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15AB + 8 +HOLZ + 10 +7118.718968 + 20 +6456.107435 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15AC + 8 +HOLZ + 10 +7122.474609 + 20 +6455.243247 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15AD + 8 +HOLZ + 10 +7125.895908 + 20 +6454.11466 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15AE + 8 +HOLZ + 10 +7129.196574 + 20 +6452.912627 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15AF + 8 +HOLZ + 10 +7132.549903 + 20 +6451.801379 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15B0 + 8 +HOLZ + 10 +7135.967528 + 20 +6450.838242 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15B1 + 8 +HOLZ + 10 +7139.420669 + 20 +6450.053817 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15B2 + 8 +HOLZ + 10 +7142.880547 + 20 +6449.478708 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15B3 + 8 +HOLZ + 10 +7146.31838 + 20 +6449.143516 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15B4 + 8 +HOLZ + 10 +7149.705388 + 20 +6449.078842 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15B5 + 8 +HOLZ + 10 +7153.012791 + 20 +6449.315289 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15B6 + 8 +HOLZ + 10 +7156.211809 + 20 +6449.883459 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15B7 + 8 +HOLZ + 10 +7159.277233 + 20 +6450.801712 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15B8 + 8 +HOLZ + 10 +7162.198144 + 20 +6452.039447 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15B9 + 8 +HOLZ + 10 +7164.967192 + 20 +6453.553821 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15BA + 8 +HOLZ + 10 +7167.577029 + 20 +6455.301992 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15BB + 8 +HOLZ + 10 +7170.020308 + 20 +6457.241117 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15BC + 8 +HOLZ + 10 +7172.28968 + 20 +6459.328354 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15BD + 8 +HOLZ + 10 +7174.377797 + 20 +6461.520861 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15BE + 8 +HOLZ + 10 +7176.27731 + 20 +6463.775794 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15BF + 8 +HOLZ + 10 +7177.98924 + 20 +6466.055616 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15C0 + 8 +HOLZ + 10 +7179.548084 + 20 +6468.344006 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15C1 + 8 +HOLZ + 10 +7180.996704 + 20 +6470.629948 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15C2 + 8 +HOLZ + 10 +7182.377966 + 20 +6472.902425 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15C3 + 8 +HOLZ + 10 +7183.734733 + 20 +6475.15042 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15C4 + 8 +HOLZ + 10 +7185.109871 + 20 +6477.362918 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15C5 + 8 +HOLZ + 10 +7186.546244 + 20 +6479.528901 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15C6 + 8 +HOLZ + 10 +7188.086715 + 20 +6481.637354 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15C7 + 8 +HOLZ + 10 +7189.763536 + 20 +6483.673383 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15C8 + 8 +HOLZ + 10 +7191.566501 + 20 +6485.606591 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15C9 + 8 +HOLZ + 10 +7193.474788 + 20 +6487.402704 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15CA + 8 +HOLZ + 10 +7195.467579 + 20 +6489.027448 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15CB + 8 +HOLZ + 10 +7197.524054 + 20 +6490.446549 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15CC + 8 +HOLZ + 10 +7199.623391 + 20 +6491.625733 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15CD + 8 +HOLZ + 10 +7201.744772 + 20 +6492.530726 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15CE + 8 +HOLZ + 10 +7203.867377 + 20 +6493.127253 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15CF + 8 +HOLZ + 10 +7205.9761 + 20 +6493.391651 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15D0 + 8 +HOLZ + 10 +7208.078698 + 20 +6493.342687 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15D1 + 8 +HOLZ + 10 +7210.188644 + 20 +6493.009739 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15D2 + 8 +HOLZ + 10 +7212.31941 + 20 +6492.422186 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15D3 + 8 +HOLZ + 10 +7214.484468 + 20 +6491.609405 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15D4 + 8 +HOLZ + 10 +7216.697289 + 20 +6490.600774 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15D5 + 8 +HOLZ + 10 +7218.971346 + 20 +6489.425671 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15D6 + 8 +HOLZ + 10 +7221.320112 + 20 +6488.113473 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15D7 + 8 +HOLZ + 10 +7223.751955 + 20 +6486.696618 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15D8 + 8 +HOLZ + 10 +7226.254831 + 20 +6485.219785 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15D9 + 8 +HOLZ + 10 +7228.811596 + 20 +6483.730712 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15DA + 8 +HOLZ + 10 +7231.405103 + 20 +6482.277137 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15DB + 8 +HOLZ + 10 +7234.018206 + 20 +6480.906799 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15DC + 8 +HOLZ + 10 +7236.633759 + 20 +6479.667436 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15DD + 8 +HOLZ + 10 +7239.234616 + 20 +6478.606786 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15DE + 8 +HOLZ + 10 +7241.803631 + 20 +6477.772589 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15DF + 8 +HOLZ + 10 +7244.323045 + 20 +6477.204421 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15E0 + 8 +HOLZ + 10 +7246.772651 + 20 +6476.909219 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15E1 + 8 +HOLZ + 10 +7249.131629 + 20 +6476.885759 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15E2 + 8 +HOLZ + 10 +7251.379159 + 20 +6477.132818 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15E3 + 8 +HOLZ + 10 +7253.494422 + 20 +6477.649171 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15E4 + 8 +HOLZ + 10 +7255.456597 + 20 +6478.433593 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15E5 + 8 +HOLZ + 10 +7257.244865 + 20 +6479.484862 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15E6 + 8 +HOLZ + 10 +7258.838406 + 20 +6480.801753 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15E7 + 8 +HOLZ + 10 +7260.224769 + 20 +6482.377533 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15E8 + 8 +HOLZ + 10 +7261.424977 + 20 +6484.183438 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15E9 + 8 +HOLZ + 10 +7262.468424 + 20 +6486.185193 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15EA + 8 +HOLZ + 10 +7263.384501 + 20 +6488.348525 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15EB + 8 +HOLZ + 10 +7264.202602 + 20 +6490.639159 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15EC + 8 +HOLZ + 10 +7264.95212 + 20 +6493.022823 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15ED + 8 +HOLZ + 10 +7265.662445 + 20 +6495.465242 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15EE + 8 +HOLZ + 10 +7266.362973 + 20 +6497.932143 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15EF + 8 +HOLZ + 10 +7267.078501 + 20 +6500.390985 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15F0 + 8 +HOLZ + 10 +7267.815461 + 20 +6502.816166 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15F1 + 8 +HOLZ + 10 +7268.57569 + 20 +6505.183816 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15F2 + 8 +HOLZ + 10 +7269.361024 + 20 +6507.470065 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15F3 + 8 +HOLZ + 10 +7270.173303 + 20 +6509.651045 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15F4 + 8 +HOLZ + 10 +7271.014362 + 20 +6511.702884 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15F5 + 8 +HOLZ + 10 +7271.886039 + 20 +6513.601715 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15F6 + 8 +HOLZ + 10 +7272.790173 + 20 +6515.323668 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15F7 + 8 +HOLZ + 10 +7273.73064 + 20 +6516.847524 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15F8 + 8 +HOLZ + 10 +7274.719485 + 20 +6518.162678 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15F9 + 8 +HOLZ + 10 +7275.770791 + 20 +6519.261171 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15FA + 8 +HOLZ + 10 +7276.898641 + 20 +6520.13505 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15FB + 8 +HOLZ + 10 +7278.117121 + 20 +6520.776357 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15FC + 8 +HOLZ + 10 +7279.440314 + 20 +6521.177137 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15FD + 8 +HOLZ + 10 +7280.882303 + 20 +6521.329434 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15FE + 8 +HOLZ + 10 +7282.457173 + 20 +6521.225293 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +15FF + 8 +HOLZ + 10 +7112.5276 + 20 +6460.43328 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1600 + 8 +HOLZ + 10 +7128.203753 + 20 +6451.659194 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1601 + 8 +HOLZ + 10 +7157.67491 + 20 +6446.018666 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1602 + 8 +HOLZ + 10 +7178.367461 + 20 +6463.566894 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1603 + 8 +HOLZ + 10 +7186.519106 + 20 +6482.368523 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1604 + 8 +HOLZ + 10 +7204.076408 + 20 +6496.783136 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1605 + 8 +HOLZ + 10 +7220.379523 + 20 +6489.262452 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1606 + 8 +HOLZ + 10 +7242.326172 + 20 +6474.847893 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1607 + 8 +HOLZ + 10 +7261.137574 + 20 +6477.981507 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1608 + 8 +HOLZ + 10 +7266.153971 + 20 +6498.036593 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1609 + 8 +HOLZ + 10 +7272.424379 + 20 +6517.464978 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +160A + 8 +HOLZ + 10 +7278.067826 + 20 +6521.851993 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +160B + 8 +HOLZ + 10 +7282.457173 + 20 +6521.225293 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +160C + 8 +HOLZ + 0 +POLYLINE + 5 +160D + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +160E + 8 +HOLZ + 10 +7085.564641 + 20 +6387.106811 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +160F + 8 +HOLZ + 10 +7085.564641 + 20 +6387.106811 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1610 + 8 +HOLZ + 10 +7098.873744 + 20 +6392.103355 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1611 + 8 +HOLZ + 10 +7109.443813 + 20 +6395.527584 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1612 + 8 +HOLZ + 10 +7117.680833 + 20 +6397.657973 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1613 + 8 +HOLZ + 10 +7123.990793 + 20 +6398.772997 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1614 + 8 +HOLZ + 10 +7128.779678 + 20 +6399.151133 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1615 + 8 +HOLZ + 10 +7132.453476 + 20 +6399.070855 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1616 + 8 +HOLZ + 10 +7135.418173 + 20 +6398.810638 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1617 + 8 +HOLZ + 10 +7138.079756 + 20 +6398.648959 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1618 + 8 +HOLZ + 10 +7140.769913 + 20 +6398.807984 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1619 + 8 +HOLZ + 10 +7143.52314 + 20 +6399.284655 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +161A + 8 +HOLZ + 10 +7146.299635 + 20 +6400.019603 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +161B + 8 +HOLZ + 10 +7149.059596 + 20 +6400.953463 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +161C + 8 +HOLZ + 10 +7151.763219 + 20 +6402.026866 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +161D + 8 +HOLZ + 10 +7154.370702 + 20 +6403.180446 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +161E + 8 +HOLZ + 10 +7156.842244 + 20 +6404.354835 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +161F + 8 +HOLZ + 10 +7159.138041 + 20 +6405.490667 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1620 + 8 +HOLZ + 10 +7161.230028 + 20 +6406.535613 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1621 + 8 +HOLZ + 10 +7163.137085 + 20 +6407.465497 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1622 + 8 +HOLZ + 10 +7164.889831 + 20 +6408.263182 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1623 + 8 +HOLZ + 10 +7166.518883 + 20 +6408.911532 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1624 + 8 +HOLZ + 10 +7168.054858 + 20 +6409.393408 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1625 + 8 +HOLZ + 10 +7169.528375 + 20 +6409.691674 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1626 + 8 +HOLZ + 10 +7170.970051 + 20 +6409.789194 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1627 + 8 +HOLZ + 10 +7172.410504 + 20 +6409.668828 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1628 + 8 +HOLZ + 10 +7173.87586 + 20 +6409.324662 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1629 + 8 +HOLZ + 10 +7175.374284 + 20 +6408.795662 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +162A + 8 +HOLZ + 10 +7176.909451 + 20 +6408.132014 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +162B + 8 +HOLZ + 10 +7178.485032 + 20 +6407.383905 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +162C + 8 +HOLZ + 10 +7180.104704 + 20 +6406.601522 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +162D + 8 +HOLZ + 10 +7181.772138 + 20 +6405.835052 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +162E + 8 +HOLZ + 10 +7183.49101 + 20 +6405.134681 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +162F + 8 +HOLZ + 10 +7185.264992 + 20 +6404.550598 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1630 + 8 +HOLZ + 10 +7187.094085 + 20 +6404.123603 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1631 + 8 +HOLZ + 10 +7188.963592 + 20 +6403.856961 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1632 + 8 +HOLZ + 10 +7190.855142 + 20 +6403.744551 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1633 + 8 +HOLZ + 10 +7192.750366 + 20 +6403.780254 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1634 + 8 +HOLZ + 10 +7194.630893 + 20 +6403.957948 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1635 + 8 +HOLZ + 10 +7196.478352 + 20 +6404.271513 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1636 + 8 +HOLZ + 10 +7198.274373 + 20 +6404.71483 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1637 + 8 +HOLZ + 10 +7200.000585 + 20 +6405.281776 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1638 + 8 +HOLZ + 10 +7201.646171 + 20 +6405.968068 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1639 + 8 +HOLZ + 10 +7203.230522 + 20 +6406.776767 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +163A + 8 +HOLZ + 10 +7204.780581 + 20 +6407.712768 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +163B + 8 +HOLZ + 10 +7206.323292 + 20 +6408.780968 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +163C + 8 +HOLZ + 10 +7207.885598 + 20 +6409.986263 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +163D + 8 +HOLZ + 10 +7209.494443 + 20 +6411.333549 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +163E + 8 +HOLZ + 10 +7211.17677 + 20 +6412.827723 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +163F + 8 +HOLZ + 10 +7212.959523 + 20 +6414.473681 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1640 + 8 +HOLZ + 10 +7214.860461 + 20 +6416.271423 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1641 + 8 +HOLZ + 10 +7216.860599 + 20 +6418.201365 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1642 + 8 +HOLZ + 10 +7218.931771 + 20 +6420.239024 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1643 + 8 +HOLZ + 10 +7221.045807 + 20 +6422.359919 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1644 + 8 +HOLZ + 10 +7223.17454 + 20 +6424.53957 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1645 + 8 +HOLZ + 10 +7225.289801 + 20 +6426.753496 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1646 + 8 +HOLZ + 10 +7227.363422 + 20 +6428.977214 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1647 + 8 +HOLZ + 10 +7229.367234 + 20 +6431.186243 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1648 + 8 +HOLZ + 10 +7231.284603 + 20 +6433.358755 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1649 + 8 +HOLZ + 10 +7233.145023 + 20 +6435.483529 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +164A + 8 +HOLZ + 10 +7234.989522 + 20 +6437.551997 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +164B + 8 +HOLZ + 10 +7236.859126 + 20 +6439.555589 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +164C + 8 +HOLZ + 10 +7238.794865 + 20 +6441.485737 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +164D + 8 +HOLZ + 10 +7240.837765 + 20 +6443.333873 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +164E + 8 +HOLZ + 10 +7243.028854 + 20 +6445.091429 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +164F + 8 +HOLZ + 10 +7245.409159 + 20 +6446.749836 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1650 + 8 +HOLZ + 10 +7248.020933 + 20 +6448.304197 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1651 + 8 +HOLZ + 10 +7250.911327 + 20 +6449.764305 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1652 + 8 +HOLZ + 10 +7254.128716 + 20 +6451.143625 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1653 + 8 +HOLZ + 10 +7257.721475 + 20 +6452.455621 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1654 + 8 +HOLZ + 10 +7261.73798 + 20 +6453.713759 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1655 + 8 +HOLZ + 10 +7266.226607 + 20 +6454.931502 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1656 + 8 +HOLZ + 10 +7271.235731 + 20 +6456.122316 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1657 + 8 +HOLZ + 10 +7276.813727 + 20 +6457.299666 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1658 + 8 +HOLZ + 10 +7125.068505 + 20 +6402.774881 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1659 + 8 +HOLZ + 10 +7136.982448 + 20 +6394.627496 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +165A + 8 +HOLZ + 10 +7161.437208 + 20 +6406.535196 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +165B + 8 +HOLZ + 10 +7172.096964 + 20 +6412.175723 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +165C + 8 +HOLZ + 10 +7184.637957 + 20 +6402.774881 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +165D + 8 +HOLZ + 10 +7200.94116 + 20 +6404.028338 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +165E + 8 +HOLZ + 10 +7211.600916 + 20 +6412.802424 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +165F + 8 +HOLZ + 10 +7230.412317 + 20 +6431.604053 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1660 + 8 +HOLZ + 10 +7242.953222 + 20 +6447.898824 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1661 + 8 +HOLZ + 10 +7261.137574 + 20 +6454.166052 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1662 + 8 +HOLZ + 10 +7276.813727 + 20 +6457.299666 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1663 + 8 +HOLZ + 0 +POLYLINE + 5 +1664 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1665 + 8 +HOLZ + 10 +7086.818741 + 20 +6345.116482 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1666 + 8 +HOLZ + 10 +7086.818741 + 20 +6345.116482 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1667 + 8 +HOLZ + 10 +7093.712069 + 20 +6344.816282 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1668 + 8 +HOLZ + 10 +7100.286362 + 20 +6345.241338 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1669 + 8 +HOLZ + 10 +7106.545906 + 20 +6346.264961 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +166A + 8 +HOLZ + 10 +7112.494987 + 20 +6347.76046 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +166B + 8 +HOLZ + 10 +7118.137892 + 20 +6349.601145 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +166C + 8 +HOLZ + 10 +7123.478908 + 20 +6351.660325 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +166D + 8 +HOLZ + 10 +7128.522322 + 20 +6353.81131 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +166E + 8 +HOLZ + 10 +7133.272419 + 20 +6355.92741 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +166F + 8 +HOLZ + 10 +7137.734916 + 20 +6357.900296 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1670 + 8 +HOLZ + 10 +7141.921243 + 20 +6359.695081 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1671 + 8 +HOLZ + 10 +7145.84426 + 20 +6361.29524 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1672 + 8 +HOLZ + 10 +7149.516825 + 20 +6362.684248 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1673 + 8 +HOLZ + 10 +7152.951799 + 20 +6363.845582 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1674 + 8 +HOLZ + 10 +7156.16204 + 20 +6364.762714 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1675 + 8 +HOLZ + 10 +7159.160409 + 20 +6365.419121 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1676 + 8 +HOLZ + 10 +7161.959764 + 20 +6365.798278 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1677 + 8 +HOLZ + 10 +7164.574292 + 20 +6365.892738 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1678 + 8 +HOLZ + 10 +7167.023486 + 20 +6365.731368 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1679 + 8 +HOLZ + 10 +7169.328166 + 20 +6365.352114 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +167A + 8 +HOLZ + 10 +7171.509151 + 20 +6364.792923 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +167B + 8 +HOLZ + 10 +7173.587262 + 20 +6364.091739 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +167C + 8 +HOLZ + 10 +7175.583317 + 20 +6363.286509 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +167D + 8 +HOLZ + 10 +7177.518138 + 20 +6362.415179 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +167E + 8 +HOLZ + 10 +7179.412543 + 20 +6361.515694 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +167F + 8 +HOLZ + 10 +7181.286333 + 20 +6360.620901 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1680 + 8 +HOLZ + 10 +7183.155224 + 20 +6359.743243 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1681 + 8 +HOLZ + 10 +7185.033912 + 20 +6358.890066 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1682 + 8 +HOLZ + 10 +7186.937095 + 20 +6358.068715 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1683 + 8 +HOLZ + 10 +7188.879468 + 20 +6357.286534 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1684 + 8 +HOLZ + 10 +7190.875729 + 20 +6356.550867 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1685 + 8 +HOLZ + 10 +7192.940573 + 20 +6355.86906 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1686 + 8 +HOLZ + 10 +7195.088696 + 20 +6355.248457 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1687 + 8 +HOLZ + 10 +7197.327857 + 20 +6354.699259 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1688 + 8 +HOLZ + 10 +7199.63805 + 20 +6354.243091 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1689 + 8 +HOLZ + 10 +7201.992333 + 20 +6353.904434 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +168A + 8 +HOLZ + 10 +7204.363762 + 20 +6353.707769 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +168B + 8 +HOLZ + 10 +7206.725393 + 20 +6353.677578 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +168C + 8 +HOLZ + 10 +7209.050283 + 20 +6353.838342 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +168D + 8 +HOLZ + 10 +7211.311488 + 20 +6354.214541 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +168E + 8 +HOLZ + 10 +7213.482065 + 20 +6354.830657 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +168F + 8 +HOLZ + 10 +7215.539764 + 20 +6355.702194 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1690 + 8 +HOLZ + 10 +7217.481117 + 20 +6356.808752 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1691 + 8 +HOLZ + 10 +7219.307348 + 20 +6358.120953 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1692 + 8 +HOLZ + 10 +7221.019682 + 20 +6359.609419 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1693 + 8 +HOLZ + 10 +7222.619343 + 20 +6361.244772 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1694 + 8 +HOLZ + 10 +7224.107557 + 20 +6362.997636 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1695 + 8 +HOLZ + 10 +7225.485548 + 20 +6364.838633 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1696 + 8 +HOLZ + 10 +7226.754542 + 20 +6366.738384 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1697 + 8 +HOLZ + 10 +7227.919641 + 20 +6368.671593 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1698 + 8 +HOLZ + 10 +7229.001461 + 20 +6370.629284 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1699 + 8 +HOLZ + 10 +7230.024496 + 20 +6372.606559 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +169A + 8 +HOLZ + 10 +7231.01324 + 20 +6374.598523 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +169B + 8 +HOLZ + 10 +7231.992185 + 20 +6376.600279 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +169C + 8 +HOLZ + 10 +7232.985827 + 20 +6378.60693 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +169D + 8 +HOLZ + 10 +7234.018659 + 20 +6380.613582 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +169E + 8 +HOLZ + 10 +7235.115175 + 20 +6382.615336 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +169F + 8 +HOLZ + 10 +7236.294969 + 20 +6384.609032 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16A0 + 8 +HOLZ + 10 +7237.558042 + 20 +6386.598443 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16A1 + 8 +HOLZ + 10 +7238.899495 + 20 +6388.589078 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16A2 + 8 +HOLZ + 10 +7240.314429 + 20 +6390.586444 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16A3 + 8 +HOLZ + 10 +7241.797946 + 20 +6392.596051 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16A4 + 8 +HOLZ + 10 +7243.345147 + 20 +6394.623408 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16A5 + 8 +HOLZ + 10 +7244.951132 + 20 +6396.674021 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16A6 + 8 +HOLZ + 10 +7246.611004 + 20 +6398.7534 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16A7 + 8 +HOLZ + 10 +7248.361299 + 20 +6400.86236 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16A8 + 8 +HOLZ + 10 +7250.404298 + 20 +6402.98295 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16A9 + 8 +HOLZ + 10 +7252.983717 + 20 +6405.092524 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16AA + 8 +HOLZ + 10 +7256.343272 + 20 +6407.168437 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16AB + 8 +HOLZ + 10 +7260.726679 + 20 +6409.188044 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16AC + 8 +HOLZ + 10 +7266.377654 + 20 +6411.1287 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16AD + 8 +HOLZ + 10 +7273.539914 + 20 +6412.967761 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16AE + 8 +HOLZ + 10 +7282.457173 + 20 +6414.682581 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16AF + 8 +HOLZ + 10 +7105.630142 + 20 +6343.236325 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +16B0 + 8 +HOLZ + 10 +7136.355399 + 20 +6357.650883 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +16B1 + 8 +HOLZ + 10 +7163.945407 + 20 +6368.931883 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +16B2 + 8 +HOLZ + 10 +7179.62156 + 20 +6361.411253 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +16B3 + 8 +HOLZ + 10 +7194.043614 + 20 +6354.517269 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +16B4 + 8 +HOLZ + 10 +7214.736164 + 20 +6352.010411 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +16B5 + 8 +HOLZ + 10 +7227.904118 + 20 +6366.425025 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +16B6 + 8 +HOLZ + 10 +7234.174615 + 20 +6382.719796 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +16B7 + 8 +HOLZ + 10 +7246.08847 + 20 +6398.387811 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +16B8 + 8 +HOLZ + 10 +7256.121176 + 20 +6410.295511 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +16B9 + 8 +HOLZ + 10 +7282.457173 + 20 +6414.682581 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +16BA + 8 +HOLZ + 0 +POLYLINE + 5 +16BB + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +16BC + 8 +HOLZ + 10 +7083.056443 + 20 +6308.766626 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +16BD + 8 +HOLZ + 10 +7083.056443 + 20 +6308.766626 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16BE + 8 +HOLZ + 10 +7092.901491 + 20 +6309.412614 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16BF + 8 +HOLZ + 10 +7100.973787 + 20 +6310.350545 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16C0 + 8 +HOLZ + 10 +7107.528682 + 20 +6311.490452 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16C1 + 8 +HOLZ + 10 +7112.821525 + 20 +6312.742363 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16C2 + 8 +HOLZ + 10 +7117.107666 + 20 +6314.016309 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16C3 + 8 +HOLZ + 10 +7120.642454 + 20 +6315.222321 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16C4 + 8 +HOLZ + 10 +7123.681241 + 20 +6316.270429 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16C5 + 8 +HOLZ + 10 +7126.479374 + 20 +6317.070664 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16C6 + 8 +HOLZ + 10 +7129.246687 + 20 +6317.555496 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16C7 + 8 +HOLZ + 10 +7132.010938 + 20 +6317.747164 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16C8 + 8 +HOLZ + 10 +7134.75437 + 20 +6317.690345 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16C9 + 8 +HOLZ + 10 +7137.459224 + 20 +6317.42972 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16CA + 8 +HOLZ + 10 +7140.107742 + 20 +6317.009965 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16CB + 8 +HOLZ + 10 +7142.682166 + 20 +6316.475761 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16CC + 8 +HOLZ + 10 +7145.164736 + 20 +6315.871786 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16CD + 8 +HOLZ + 10 +7147.537696 + 20 +6315.242718 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16CE + 8 +HOLZ + 10 +7149.791961 + 20 +6314.629461 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16CF + 8 +HOLZ + 10 +7151.953148 + 20 +6314.057824 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16D0 + 8 +HOLZ + 10 +7154.05555 + 20 +6313.549839 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16D1 + 8 +HOLZ + 10 +7156.133457 + 20 +6313.127539 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16D2 + 8 +HOLZ + 10 +7158.221162 + 20 +6312.812957 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16D3 + 8 +HOLZ + 10 +7160.352957 + 20 +6312.628127 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16D4 + 8 +HOLZ + 10 +7162.563133 + 20 +6312.59508 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16D5 + 8 +HOLZ + 10 +7164.885981 + 20 +6312.73585 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16D6 + 8 +HOLZ + 10 +7167.340894 + 20 +6313.064514 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16D7 + 8 +HOLZ + 10 +7169.88766 + 20 +6313.563323 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16D8 + 8 +HOLZ + 10 +7172.471167 + 20 +6314.20657 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16D9 + 8 +HOLZ + 10 +7175.036303 + 20 +6314.968552 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16DA + 8 +HOLZ + 10 +7177.527957 + 20 +6315.823562 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16DB + 8 +HOLZ + 10 +7179.891017 + 20 +6316.745895 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16DC + 8 +HOLZ + 10 +7182.070371 + 20 +6317.709846 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16DD + 8 +HOLZ + 10 +7184.010907 + 20 +6318.68971 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16DE + 8 +HOLZ + 10 +7185.696092 + 20 +6319.666308 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16DF + 8 +HOLZ + 10 +7187.263705 + 20 +6320.646578 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16E0 + 8 +HOLZ + 10 +7188.890101 + 20 +6321.643986 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16E1 + 8 +HOLZ + 10 +7190.75164 + 20 +6322.671995 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16E2 + 8 +HOLZ + 10 +7193.024677 + 20 +6323.74407 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16E3 + 8 +HOLZ + 10 +7195.885569 + 20 +6324.873677 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16E4 + 8 +HOLZ + 10 +7199.510675 + 20 +6326.074281 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16E5 + 8 +HOLZ + 10 +7204.076349 + 20 +6327.359346 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16E6 + 8 +HOLZ + 10 +7209.681693 + 20 +6328.728056 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16E7 + 8 +HOLZ + 10 +7216.116771 + 20 +6330.122472 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16E8 + 8 +HOLZ + 10 +7223.094391 + 20 +6331.470375 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16E9 + 8 +HOLZ + 10 +7230.327362 + 20 +6332.699544 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16EA + 8 +HOLZ + 10 +7237.528491 + 20 +6333.737758 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16EB + 8 +HOLZ + 10 +7244.410586 + 20 +6334.512798 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16EC + 8 +HOLZ + 10 +7250.686456 + 20 +6334.952444 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16ED + 8 +HOLZ + 10 +7256.068908 + 20 +6334.984476 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16EE + 8 +HOLZ + 10 +7260.358519 + 20 +6334.572171 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16EF + 8 +HOLZ + 10 +7263.70695 + 20 +6333.820799 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16F0 + 8 +HOLZ + 10 +7266.35363 + 20 +6332.871128 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16F1 + 8 +HOLZ + 10 +7268.537987 + 20 +6331.863927 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16F2 + 8 +HOLZ + 10 +7270.499451 + 20 +6330.939962 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16F3 + 8 +HOLZ + 10 +7272.477451 + 20 +6330.240002 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16F4 + 8 +HOLZ + 10 +7274.711416 + 20 +6329.904815 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16F5 + 8 +HOLZ + 10 +7277.440776 + 20 +6330.075168 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +16F6 + 8 +HOLZ + 10 +7111.90055 + 20 +6310.020028 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +16F7 + 8 +HOLZ + 10 +7126.322604 + 20 +6320.674326 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +16F8 + 8 +HOLZ + 10 +7148.896303 + 20 +6315.033799 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +16F9 + 8 +HOLZ + 10 +7163.318357 + 20 +6310.646783 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +16FA + 8 +HOLZ + 10 +7187.146156 + 20 +6318.794169 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +16FB + 8 +HOLZ + 10 +7192.162465 + 20 +6326.314798 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +16FC + 8 +HOLZ + 10 +7268.662081 + 20 +6340.102711 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +16FD + 8 +HOLZ + 10 +7269.289131 + 20 +6328.821712 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +16FE + 8 +HOLZ + 10 +7277.440776 + 20 +6330.075168 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +16FF + 8 +HOLZ + 0 +POLYLINE + 5 +1700 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1701 + 8 +HOLZ + 10 +14031.943557 + 20 +6308.766626 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1702 + 8 +HOLZ + 10 +14031.943557 + 20 +6308.766626 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1703 + 8 +HOLZ + 10 +14022.098509 + 20 +6309.412614 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1704 + 8 +HOLZ + 10 +14014.026213 + 20 +6310.350545 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1705 + 8 +HOLZ + 10 +14007.471318 + 20 +6311.490452 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1706 + 8 +HOLZ + 10 +14002.178475 + 20 +6312.742363 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1707 + 8 +HOLZ + 10 +13997.892334 + 20 +6314.016309 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1708 + 8 +HOLZ + 10 +13994.357546 + 20 +6315.222321 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1709 + 8 +HOLZ + 10 +13991.318759 + 20 +6316.270429 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +170A + 8 +HOLZ + 10 +13988.520626 + 20 +6317.070664 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +170B + 8 +HOLZ + 10 +13985.753313 + 20 +6317.555496 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +170C + 8 +HOLZ + 10 +13982.989062 + 20 +6317.747164 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +170D + 8 +HOLZ + 10 +13980.24563 + 20 +6317.690345 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +170E + 8 +HOLZ + 10 +13977.540776 + 20 +6317.42972 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +170F + 8 +HOLZ + 10 +13974.892258 + 20 +6317.009965 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1710 + 8 +HOLZ + 10 +13972.317834 + 20 +6316.475761 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1711 + 8 +HOLZ + 10 +13969.835264 + 20 +6315.871786 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1712 + 8 +HOLZ + 10 +13967.462304 + 20 +6315.242718 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1713 + 8 +HOLZ + 10 +13965.208039 + 20 +6314.629461 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1714 + 8 +HOLZ + 10 +13963.046852 + 20 +6314.057824 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1715 + 8 +HOLZ + 10 +13960.94445 + 20 +6313.549839 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1716 + 8 +HOLZ + 10 +13958.866543 + 20 +6313.127539 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1717 + 8 +HOLZ + 10 +13956.778838 + 20 +6312.812957 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1718 + 8 +HOLZ + 10 +13954.647043 + 20 +6312.628127 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1719 + 8 +HOLZ + 10 +13952.436867 + 20 +6312.59508 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +171A + 8 +HOLZ + 10 +13950.114019 + 20 +6312.73585 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +171B + 8 +HOLZ + 10 +13947.659106 + 20 +6313.064514 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +171C + 8 +HOLZ + 10 +13945.11234 + 20 +6313.563323 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +171D + 8 +HOLZ + 10 +13942.528833 + 20 +6314.20657 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +171E + 8 +HOLZ + 10 +13939.963697 + 20 +6314.968552 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +171F + 8 +HOLZ + 10 +13937.472043 + 20 +6315.823562 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1720 + 8 +HOLZ + 10 +13935.108983 + 20 +6316.745895 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1721 + 8 +HOLZ + 10 +13932.929629 + 20 +6317.709846 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1722 + 8 +HOLZ + 10 +13930.989093 + 20 +6318.68971 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1723 + 8 +HOLZ + 10 +13929.303908 + 20 +6319.666308 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1724 + 8 +HOLZ + 10 +13927.736295 + 20 +6320.646578 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1725 + 8 +HOLZ + 10 +13926.109899 + 20 +6321.643986 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1726 + 8 +HOLZ + 10 +13924.24836 + 20 +6322.671995 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1727 + 8 +HOLZ + 10 +13921.975323 + 20 +6323.74407 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1728 + 8 +HOLZ + 10 +13919.114431 + 20 +6324.873677 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1729 + 8 +HOLZ + 10 +13915.489325 + 20 +6326.074281 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +172A + 8 +HOLZ + 10 +13910.923651 + 20 +6327.359346 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +172B + 8 +HOLZ + 10 +13905.318307 + 20 +6328.728056 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +172C + 8 +HOLZ + 10 +13898.883229 + 20 +6330.122472 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +172D + 8 +HOLZ + 10 +13891.905609 + 20 +6331.470375 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +172E + 8 +HOLZ + 10 +13884.672638 + 20 +6332.699544 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +172F + 8 +HOLZ + 10 +13877.471509 + 20 +6333.737758 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1730 + 8 +HOLZ + 10 +13870.589414 + 20 +6334.512798 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1731 + 8 +HOLZ + 10 +13864.313544 + 20 +6334.952444 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1732 + 8 +HOLZ + 10 +13858.931092 + 20 +6334.984476 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1733 + 8 +HOLZ + 10 +13854.641481 + 20 +6334.572171 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1734 + 8 +HOLZ + 10 +13851.29305 + 20 +6333.820799 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1735 + 8 +HOLZ + 10 +13848.64637 + 20 +6332.871128 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1736 + 8 +HOLZ + 10 +13846.462013 + 20 +6331.863927 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1737 + 8 +HOLZ + 10 +13844.500549 + 20 +6330.939962 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1738 + 8 +HOLZ + 10 +13842.522549 + 20 +6330.240002 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1739 + 8 +HOLZ + 10 +13840.288584 + 20 +6329.904815 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +173A + 8 +HOLZ + 10 +13837.559224 + 20 +6330.075168 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +173B + 8 +HOLZ + 10 +14003.09945 + 20 +6310.020028 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +173C + 8 +HOLZ + 10 +13988.677396 + 20 +6320.674326 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +173D + 8 +HOLZ + 10 +13966.103697 + 20 +6315.033799 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +173E + 8 +HOLZ + 10 +13951.681643 + 20 +6310.646783 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +173F + 8 +HOLZ + 10 +13927.853844 + 20 +6318.794169 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1740 + 8 +HOLZ + 10 +13922.837535 + 20 +6326.314798 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1741 + 8 +HOLZ + 10 +13846.337919 + 20 +6340.102711 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1742 + 8 +HOLZ + 10 +13845.710869 + 20 +6328.821712 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1743 + 8 +HOLZ + 10 +13837.559224 + 20 +6330.075168 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1744 + 8 +HOLZ + 0 +POLYLINE + 5 +1745 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1746 + 8 +HOLZ + 10 +14028.181259 + 20 +6345.116482 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1747 + 8 +HOLZ + 10 +14028.181259 + 20 +6345.116482 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1748 + 8 +HOLZ + 10 +14021.287931 + 20 +6344.816282 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1749 + 8 +HOLZ + 10 +14014.713638 + 20 +6345.241338 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +174A + 8 +HOLZ + 10 +14008.454094 + 20 +6346.264961 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +174B + 8 +HOLZ + 10 +14002.505013 + 20 +6347.76046 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +174C + 8 +HOLZ + 10 +13996.862108 + 20 +6349.601145 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +174D + 8 +HOLZ + 10 +13991.521092 + 20 +6351.660325 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +174E + 8 +HOLZ + 10 +13986.477678 + 20 +6353.81131 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +174F + 8 +HOLZ + 10 +13981.727581 + 20 +6355.92741 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1750 + 8 +HOLZ + 10 +13977.265084 + 20 +6357.900296 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1751 + 8 +HOLZ + 10 +13973.078757 + 20 +6359.695081 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1752 + 8 +HOLZ + 10 +13969.15574 + 20 +6361.29524 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1753 + 8 +HOLZ + 10 +13965.483175 + 20 +6362.684248 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1754 + 8 +HOLZ + 10 +13962.048201 + 20 +6363.845582 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1755 + 8 +HOLZ + 10 +13958.83796 + 20 +6364.762714 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1756 + 8 +HOLZ + 10 +13955.839591 + 20 +6365.419121 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1757 + 8 +HOLZ + 10 +13953.040236 + 20 +6365.798278 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1758 + 8 +HOLZ + 10 +13950.425708 + 20 +6365.892738 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1759 + 8 +HOLZ + 10 +13947.976514 + 20 +6365.731368 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +175A + 8 +HOLZ + 10 +13945.671834 + 20 +6365.352114 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +175B + 8 +HOLZ + 10 +13943.490849 + 20 +6364.792923 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +175C + 8 +HOLZ + 10 +13941.412738 + 20 +6364.091739 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +175D + 8 +HOLZ + 10 +13939.416683 + 20 +6363.286509 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +175E + 8 +HOLZ + 10 +13937.481862 + 20 +6362.415179 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +175F + 8 +HOLZ + 10 +13935.587457 + 20 +6361.515694 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1760 + 8 +HOLZ + 10 +13933.713667 + 20 +6360.620901 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1761 + 8 +HOLZ + 10 +13931.844776 + 20 +6359.743243 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1762 + 8 +HOLZ + 10 +13929.966088 + 20 +6358.890066 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1763 + 8 +HOLZ + 10 +13928.062905 + 20 +6358.068715 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1764 + 8 +HOLZ + 10 +13926.120532 + 20 +6357.286534 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1765 + 8 +HOLZ + 10 +13924.124271 + 20 +6356.550867 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1766 + 8 +HOLZ + 10 +13922.059427 + 20 +6355.86906 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1767 + 8 +HOLZ + 10 +13919.911304 + 20 +6355.248457 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1768 + 8 +HOLZ + 10 +13917.672143 + 20 +6354.699259 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1769 + 8 +HOLZ + 10 +13915.36195 + 20 +6354.243091 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +176A + 8 +HOLZ + 10 +13913.007667 + 20 +6353.904434 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +176B + 8 +HOLZ + 10 +13910.636238 + 20 +6353.707769 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +176C + 8 +HOLZ + 10 +13908.274607 + 20 +6353.677578 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +176D + 8 +HOLZ + 10 +13905.949717 + 20 +6353.838342 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +176E + 8 +HOLZ + 10 +13903.688512 + 20 +6354.214541 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +176F + 8 +HOLZ + 10 +13901.517935 + 20 +6354.830657 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1770 + 8 +HOLZ + 10 +13899.460236 + 20 +6355.702194 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1771 + 8 +HOLZ + 10 +13897.518883 + 20 +6356.808752 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1772 + 8 +HOLZ + 10 +13895.692652 + 20 +6358.120953 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1773 + 8 +HOLZ + 10 +13893.980318 + 20 +6359.609419 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1774 + 8 +HOLZ + 10 +13892.380657 + 20 +6361.244772 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1775 + 8 +HOLZ + 10 +13890.892443 + 20 +6362.997636 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1776 + 8 +HOLZ + 10 +13889.514452 + 20 +6364.838633 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1777 + 8 +HOLZ + 10 +13888.245458 + 20 +6366.738384 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1778 + 8 +HOLZ + 10 +13887.080359 + 20 +6368.671593 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1779 + 8 +HOLZ + 10 +13885.998539 + 20 +6370.629284 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +177A + 8 +HOLZ + 10 +13884.975504 + 20 +6372.606559 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +177B + 8 +HOLZ + 10 +13883.98676 + 20 +6374.598523 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +177C + 8 +HOLZ + 10 +13883.007815 + 20 +6376.600279 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +177D + 8 +HOLZ + 10 +13882.014173 + 20 +6378.60693 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +177E + 8 +HOLZ + 10 +13880.981341 + 20 +6380.613582 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +177F + 8 +HOLZ + 10 +13879.884825 + 20 +6382.615336 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1780 + 8 +HOLZ + 10 +13878.705031 + 20 +6384.609032 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1781 + 8 +HOLZ + 10 +13877.441958 + 20 +6386.598443 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1782 + 8 +HOLZ + 10 +13876.100505 + 20 +6388.589078 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1783 + 8 +HOLZ + 10 +13874.685571 + 20 +6390.586444 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1784 + 8 +HOLZ + 10 +13873.202054 + 20 +6392.596051 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1785 + 8 +HOLZ + 10 +13871.654853 + 20 +6394.623408 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1786 + 8 +HOLZ + 10 +13870.048868 + 20 +6396.674021 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1787 + 8 +HOLZ + 10 +13868.388996 + 20 +6398.7534 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1788 + 8 +HOLZ + 10 +13866.638701 + 20 +6400.86236 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1789 + 8 +HOLZ + 10 +13864.595702 + 20 +6402.98295 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +178A + 8 +HOLZ + 10 +13862.016283 + 20 +6405.092524 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +178B + 8 +HOLZ + 10 +13858.656728 + 20 +6407.168437 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +178C + 8 +HOLZ + 10 +13854.273321 + 20 +6409.188044 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +178D + 8 +HOLZ + 10 +13848.622346 + 20 +6411.1287 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +178E + 8 +HOLZ + 10 +13841.460086 + 20 +6412.967761 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +178F + 8 +HOLZ + 10 +13832.542827 + 20 +6414.682581 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1790 + 8 +HOLZ + 10 +14009.369858 + 20 +6343.236325 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1791 + 8 +HOLZ + 10 +13978.644601 + 20 +6357.650883 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1792 + 8 +HOLZ + 10 +13951.054593 + 20 +6368.931883 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1793 + 8 +HOLZ + 10 +13935.37844 + 20 +6361.411253 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1794 + 8 +HOLZ + 10 +13920.956386 + 20 +6354.517269 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1795 + 8 +HOLZ + 10 +13900.263836 + 20 +6352.010411 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1796 + 8 +HOLZ + 10 +13887.095882 + 20 +6366.425025 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1797 + 8 +HOLZ + 10 +13880.825385 + 20 +6382.719796 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1798 + 8 +HOLZ + 10 +13868.91153 + 20 +6398.387811 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1799 + 8 +HOLZ + 10 +13858.878824 + 20 +6410.295511 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +179A + 8 +HOLZ + 10 +13832.542827 + 20 +6414.682581 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +179B + 8 +HOLZ + 0 +POLYLINE + 5 +179C + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +179D + 8 +HOLZ + 10 +14029.435359 + 20 +6387.106811 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +179E + 8 +HOLZ + 10 +14029.435359 + 20 +6387.106811 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +179F + 8 +HOLZ + 10 +14016.126256 + 20 +6392.103355 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17A0 + 8 +HOLZ + 10 +14005.556187 + 20 +6395.527584 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17A1 + 8 +HOLZ + 10 +13997.319167 + 20 +6397.657973 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17A2 + 8 +HOLZ + 10 +13991.009207 + 20 +6398.772997 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17A3 + 8 +HOLZ + 10 +13986.220322 + 20 +6399.151133 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17A4 + 8 +HOLZ + 10 +13982.546524 + 20 +6399.070855 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17A5 + 8 +HOLZ + 10 +13979.581827 + 20 +6398.810638 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17A6 + 8 +HOLZ + 10 +13976.920244 + 20 +6398.648959 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17A7 + 8 +HOLZ + 10 +13974.230087 + 20 +6398.807984 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17A8 + 8 +HOLZ + 10 +13971.47686 + 20 +6399.284655 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17A9 + 8 +HOLZ + 10 +13968.700365 + 20 +6400.019603 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17AA + 8 +HOLZ + 10 +13965.940404 + 20 +6400.953463 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17AB + 8 +HOLZ + 10 +13963.236781 + 20 +6402.026866 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17AC + 8 +HOLZ + 10 +13960.629298 + 20 +6403.180446 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17AD + 8 +HOLZ + 10 +13958.157756 + 20 +6404.354835 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17AE + 8 +HOLZ + 10 +13955.861959 + 20 +6405.490667 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17AF + 8 +HOLZ + 10 +13953.769972 + 20 +6406.535613 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17B0 + 8 +HOLZ + 10 +13951.862915 + 20 +6407.465497 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17B1 + 8 +HOLZ + 10 +13950.110169 + 20 +6408.263182 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17B2 + 8 +HOLZ + 10 +13948.481117 + 20 +6408.911532 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17B3 + 8 +HOLZ + 10 +13946.945142 + 20 +6409.393408 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17B4 + 8 +HOLZ + 10 +13945.471625 + 20 +6409.691674 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17B5 + 8 +HOLZ + 10 +13944.029949 + 20 +6409.789194 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17B6 + 8 +HOLZ + 10 +13942.589496 + 20 +6409.668828 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17B7 + 8 +HOLZ + 10 +13941.12414 + 20 +6409.324662 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17B8 + 8 +HOLZ + 10 +13939.625716 + 20 +6408.795662 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17B9 + 8 +HOLZ + 10 +13938.090549 + 20 +6408.132014 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17BA + 8 +HOLZ + 10 +13936.514968 + 20 +6407.383905 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17BB + 8 +HOLZ + 10 +13934.895296 + 20 +6406.601522 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17BC + 8 +HOLZ + 10 +13933.227862 + 20 +6405.835052 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17BD + 8 +HOLZ + 10 +13931.50899 + 20 +6405.134681 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17BE + 8 +HOLZ + 10 +13929.735008 + 20 +6404.550598 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17BF + 8 +HOLZ + 10 +13927.905915 + 20 +6404.123603 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17C0 + 8 +HOLZ + 10 +13926.036408 + 20 +6403.856961 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17C1 + 8 +HOLZ + 10 +13924.144858 + 20 +6403.744551 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17C2 + 8 +HOLZ + 10 +13922.249634 + 20 +6403.780254 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17C3 + 8 +HOLZ + 10 +13920.369107 + 20 +6403.957948 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17C4 + 8 +HOLZ + 10 +13918.521648 + 20 +6404.271513 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17C5 + 8 +HOLZ + 10 +13916.725627 + 20 +6404.71483 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17C6 + 8 +HOLZ + 10 +13914.999415 + 20 +6405.281776 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17C7 + 8 +HOLZ + 10 +13913.353829 + 20 +6405.968068 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17C8 + 8 +HOLZ + 10 +13911.769478 + 20 +6406.776767 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17C9 + 8 +HOLZ + 10 +13910.219419 + 20 +6407.712768 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17CA + 8 +HOLZ + 10 +13908.676708 + 20 +6408.780968 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17CB + 8 +HOLZ + 10 +13907.114402 + 20 +6409.986263 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17CC + 8 +HOLZ + 10 +13905.505557 + 20 +6411.333549 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17CD + 8 +HOLZ + 10 +13903.82323 + 20 +6412.827723 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17CE + 8 +HOLZ + 10 +13902.040477 + 20 +6414.473681 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17CF + 8 +HOLZ + 10 +13900.139539 + 20 +6416.271423 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17D0 + 8 +HOLZ + 10 +13898.139401 + 20 +6418.201365 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17D1 + 8 +HOLZ + 10 +13896.068229 + 20 +6420.239024 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17D2 + 8 +HOLZ + 10 +13893.954193 + 20 +6422.359919 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17D3 + 8 +HOLZ + 10 +13891.82546 + 20 +6424.53957 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17D4 + 8 +HOLZ + 10 +13889.710199 + 20 +6426.753496 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17D5 + 8 +HOLZ + 10 +13887.636578 + 20 +6428.977214 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17D6 + 8 +HOLZ + 10 +13885.632766 + 20 +6431.186243 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17D7 + 8 +HOLZ + 10 +13883.715397 + 20 +6433.358755 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17D8 + 8 +HOLZ + 10 +13881.854977 + 20 +6435.483529 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17D9 + 8 +HOLZ + 10 +13880.010478 + 20 +6437.551997 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17DA + 8 +HOLZ + 10 +13878.140874 + 20 +6439.555589 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17DB + 8 +HOLZ + 10 +13876.205135 + 20 +6441.485737 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17DC + 8 +HOLZ + 10 +13874.162235 + 20 +6443.333873 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17DD + 8 +HOLZ + 10 +13871.971146 + 20 +6445.091429 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17DE + 8 +HOLZ + 10 +13869.590841 + 20 +6446.749836 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17DF + 8 +HOLZ + 10 +13866.979067 + 20 +6448.304197 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17E0 + 8 +HOLZ + 10 +13864.088673 + 20 +6449.764305 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17E1 + 8 +HOLZ + 10 +13860.871284 + 20 +6451.143625 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17E2 + 8 +HOLZ + 10 +13857.278525 + 20 +6452.455621 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17E3 + 8 +HOLZ + 10 +13853.26202 + 20 +6453.713759 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17E4 + 8 +HOLZ + 10 +13848.773393 + 20 +6454.931502 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17E5 + 8 +HOLZ + 10 +13843.764269 + 20 +6456.122316 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17E6 + 8 +HOLZ + 10 +13838.186273 + 20 +6457.299666 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17E7 + 8 +HOLZ + 10 +13989.931495 + 20 +6402.774881 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +17E8 + 8 +HOLZ + 10 +13978.017552 + 20 +6394.627496 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +17E9 + 8 +HOLZ + 10 +13953.562792 + 20 +6406.535196 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +17EA + 8 +HOLZ + 10 +13942.903036 + 20 +6412.175723 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +17EB + 8 +HOLZ + 10 +13930.362043 + 20 +6402.774881 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +17EC + 8 +HOLZ + 10 +13914.05884 + 20 +6404.028338 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +17ED + 8 +HOLZ + 10 +13903.399084 + 20 +6412.802424 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +17EE + 8 +HOLZ + 10 +13884.587683 + 20 +6431.604053 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +17EF + 8 +HOLZ + 10 +13872.046778 + 20 +6447.898824 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +17F0 + 8 +HOLZ + 10 +13853.862426 + 20 +6454.166052 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +17F1 + 8 +HOLZ + 10 +13838.186273 + 20 +6457.299666 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +17F2 + 8 +HOLZ + 0 +POLYLINE + 5 +17F3 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +17F4 + 8 +HOLZ + 10 +14027.55421 + 20 +6449.778981 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +17F5 + 8 +HOLZ + 10 +14027.55421 + 20 +6449.778981 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17F6 + 8 +HOLZ + 10 +14018.921213 + 20 +6453.101106 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17F7 + 8 +HOLZ + 10 +14011.691106 + 20 +6455.204059 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17F8 + 8 +HOLZ + 10 +14005.65018 + 20 +6456.278796 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17F9 + 8 +HOLZ + 10 +14000.584726 + 20 +6456.51627 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17FA + 8 +HOLZ + 10 +13996.281032 + 20 +6456.107435 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17FB + 8 +HOLZ + 10 +13992.525391 + 20 +6455.243247 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17FC + 8 +HOLZ + 10 +13989.104092 + 20 +6454.11466 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17FD + 8 +HOLZ + 10 +13985.803426 + 20 +6452.912627 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17FE + 8 +HOLZ + 10 +13982.450097 + 20 +6451.801379 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +17FF + 8 +HOLZ + 10 +13979.032472 + 20 +6450.838242 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1800 + 8 +HOLZ + 10 +13975.579331 + 20 +6450.053817 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1801 + 8 +HOLZ + 10 +13972.119453 + 20 +6449.478708 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1802 + 8 +HOLZ + 10 +13968.68162 + 20 +6449.143516 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1803 + 8 +HOLZ + 10 +13965.294612 + 20 +6449.078842 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1804 + 8 +HOLZ + 10 +13961.987209 + 20 +6449.315289 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1805 + 8 +HOLZ + 10 +13958.788191 + 20 +6449.883459 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1806 + 8 +HOLZ + 10 +13955.722767 + 20 +6450.801712 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1807 + 8 +HOLZ + 10 +13952.801856 + 20 +6452.039447 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1808 + 8 +HOLZ + 10 +13950.032808 + 20 +6453.553821 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1809 + 8 +HOLZ + 10 +13947.422971 + 20 +6455.301992 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +180A + 8 +HOLZ + 10 +13944.979692 + 20 +6457.241117 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +180B + 8 +HOLZ + 10 +13942.71032 + 20 +6459.328354 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +180C + 8 +HOLZ + 10 +13940.622203 + 20 +6461.520861 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +180D + 8 +HOLZ + 10 +13938.72269 + 20 +6463.775794 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +180E + 8 +HOLZ + 10 +13937.01076 + 20 +6466.055616 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +180F + 8 +HOLZ + 10 +13935.451916 + 20 +6468.344006 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1810 + 8 +HOLZ + 10 +13934.003296 + 20 +6470.629948 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1811 + 8 +HOLZ + 10 +13932.622034 + 20 +6472.902425 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1812 + 8 +HOLZ + 10 +13931.265267 + 20 +6475.15042 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1813 + 8 +HOLZ + 10 +13929.890129 + 20 +6477.362918 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1814 + 8 +HOLZ + 10 +13928.453756 + 20 +6479.528901 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1815 + 8 +HOLZ + 10 +13926.913285 + 20 +6481.637354 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1816 + 8 +HOLZ + 10 +13925.236464 + 20 +6483.673383 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1817 + 8 +HOLZ + 10 +13923.433499 + 20 +6485.606591 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1818 + 8 +HOLZ + 10 +13921.525212 + 20 +6487.402704 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1819 + 8 +HOLZ + 10 +13919.532421 + 20 +6489.027448 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +181A + 8 +HOLZ + 10 +13917.475946 + 20 +6490.446549 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +181B + 8 +HOLZ + 10 +13915.376609 + 20 +6491.625733 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +181C + 8 +HOLZ + 10 +13913.255228 + 20 +6492.530726 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +181D + 8 +HOLZ + 10 +13911.132623 + 20 +6493.127253 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +181E + 8 +HOLZ + 10 +13909.0239 + 20 +6493.391651 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +181F + 8 +HOLZ + 10 +13906.921302 + 20 +6493.342687 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1820 + 8 +HOLZ + 10 +13904.811356 + 20 +6493.009739 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1821 + 8 +HOLZ + 10 +13902.68059 + 20 +6492.422186 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1822 + 8 +HOLZ + 10 +13900.515532 + 20 +6491.609405 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1823 + 8 +HOLZ + 10 +13898.302711 + 20 +6490.600774 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1824 + 8 +HOLZ + 10 +13896.028654 + 20 +6489.425671 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1825 + 8 +HOLZ + 10 +13893.679888 + 20 +6488.113473 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1826 + 8 +HOLZ + 10 +13891.248045 + 20 +6486.696618 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1827 + 8 +HOLZ + 10 +13888.745169 + 20 +6485.219785 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1828 + 8 +HOLZ + 10 +13886.188404 + 20 +6483.730712 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1829 + 8 +HOLZ + 10 +13883.594897 + 20 +6482.277137 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +182A + 8 +HOLZ + 10 +13880.981794 + 20 +6480.906799 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +182B + 8 +HOLZ + 10 +13878.366241 + 20 +6479.667436 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +182C + 8 +HOLZ + 10 +13875.765384 + 20 +6478.606786 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +182D + 8 +HOLZ + 10 +13873.196369 + 20 +6477.772589 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +182E + 8 +HOLZ + 10 +13870.676955 + 20 +6477.204421 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +182F + 8 +HOLZ + 10 +13868.227349 + 20 +6476.909219 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1830 + 8 +HOLZ + 10 +13865.868371 + 20 +6476.885759 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1831 + 8 +HOLZ + 10 +13863.620841 + 20 +6477.132818 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1832 + 8 +HOLZ + 10 +13861.505578 + 20 +6477.649171 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1833 + 8 +HOLZ + 10 +13859.543403 + 20 +6478.433593 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1834 + 8 +HOLZ + 10 +13857.755135 + 20 +6479.484862 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1835 + 8 +HOLZ + 10 +13856.161594 + 20 +6480.801753 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1836 + 8 +HOLZ + 10 +13854.775231 + 20 +6482.377533 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1837 + 8 +HOLZ + 10 +13853.575023 + 20 +6484.183438 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1838 + 8 +HOLZ + 10 +13852.531576 + 20 +6486.185193 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1839 + 8 +HOLZ + 10 +13851.615499 + 20 +6488.348525 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +183A + 8 +HOLZ + 10 +13850.797398 + 20 +6490.639159 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +183B + 8 +HOLZ + 10 +13850.04788 + 20 +6493.022823 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +183C + 8 +HOLZ + 10 +13849.337555 + 20 +6495.465242 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +183D + 8 +HOLZ + 10 +13848.637027 + 20 +6497.932143 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +183E + 8 +HOLZ + 10 +13847.921499 + 20 +6500.390985 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +183F + 8 +HOLZ + 10 +13847.184539 + 20 +6502.816166 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1840 + 8 +HOLZ + 10 +13846.42431 + 20 +6505.183816 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1841 + 8 +HOLZ + 10 +13845.638976 + 20 +6507.470065 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1842 + 8 +HOLZ + 10 +13844.826697 + 20 +6509.651045 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1843 + 8 +HOLZ + 10 +13843.985638 + 20 +6511.702884 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1844 + 8 +HOLZ + 10 +13843.113961 + 20 +6513.601715 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1845 + 8 +HOLZ + 10 +13842.209827 + 20 +6515.323668 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1846 + 8 +HOLZ + 10 +13841.26936 + 20 +6516.847524 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1847 + 8 +HOLZ + 10 +13840.280515 + 20 +6518.162678 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1848 + 8 +HOLZ + 10 +13839.229209 + 20 +6519.261171 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1849 + 8 +HOLZ + 10 +13838.101359 + 20 +6520.13505 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +184A + 8 +HOLZ + 10 +13836.882879 + 20 +6520.776357 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +184B + 8 +HOLZ + 10 +13835.559686 + 20 +6521.177137 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +184C + 8 +HOLZ + 10 +13834.117697 + 20 +6521.329434 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +184D + 8 +HOLZ + 10 +13832.542827 + 20 +6521.225293 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +184E + 8 +HOLZ + 10 +14002.4724 + 20 +6460.43328 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +184F + 8 +HOLZ + 10 +13986.796247 + 20 +6451.659194 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1850 + 8 +HOLZ + 10 +13957.32509 + 20 +6446.018666 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1851 + 8 +HOLZ + 10 +13936.632539 + 20 +6463.566894 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1852 + 8 +HOLZ + 10 +13928.480894 + 20 +6482.368523 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1853 + 8 +HOLZ + 10 +13910.923592 + 20 +6496.783136 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1854 + 8 +HOLZ + 10 +13894.620477 + 20 +6489.262452 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1855 + 8 +HOLZ + 10 +13872.673828 + 20 +6474.847893 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1856 + 8 +HOLZ + 10 +13853.862426 + 20 +6477.981507 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1857 + 8 +HOLZ + 10 +13848.846029 + 20 +6498.036593 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1858 + 8 +HOLZ + 10 +13842.575621 + 20 +6517.464978 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1859 + 8 +HOLZ + 10 +13836.932174 + 20 +6521.851993 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +185A + 8 +HOLZ + 10 +13832.542827 + 20 +6521.225293 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +185B + 8 +HOLZ + 0 +POLYLINE + 5 +185C + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +185D + 8 +HOLZ + 10 +14026.92716 + 20 +6503.677065 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +185E + 8 +HOLZ + 10 +14026.92716 + 20 +6503.677065 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +185F + 8 +HOLZ + 10 +14018.395916 + 20 +6503.761117 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1860 + 8 +HOLZ + 10 +14011.466576 + 20 +6503.996953 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1861 + 8 +HOLZ + 10 +14005.918696 + 20 +6504.360091 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1862 + 8 +HOLZ + 10 +14001.531828 + 20 +6504.826051 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1863 + 8 +HOLZ + 10 +13998.085528 + 20 +6505.370351 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1864 + 8 +HOLZ + 10 +13995.359349 + 20 +6505.968509 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1865 + 8 +HOLZ + 10 +13993.132846 + 20 +6506.596046 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1866 + 8 +HOLZ + 10 +13991.185572 + 20 +6507.22848 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1867 + 8 +HOLZ + 10 +13989.332599 + 20 +6507.845001 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1868 + 8 +HOLZ + 10 +13987.531062 + 20 +6508.439489 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1869 + 8 +HOLZ + 10 +13985.773612 + 20 +6509.009497 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +186A + 8 +HOLZ + 10 +13984.052904 + 20 +6509.552575 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +186B + 8 +HOLZ + 10 +13982.361588 + 20 +6510.066276 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +186C + 8 +HOLZ + 10 +13980.692316 + 20 +6510.548151 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +186D + 8 +HOLZ + 10 +13979.037742 + 20 +6510.995753 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +186E + 8 +HOLZ + 10 +13977.390517 + 20 +6511.406632 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +186F + 8 +HOLZ + 10 +13975.744518 + 20 +6511.78038 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1870 + 8 +HOLZ + 10 +13974.09852 + 20 +6512.124751 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1871 + 8 +HOLZ + 10 +13972.452523 + 20 +6512.449536 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1872 + 8 +HOLZ + 10 +13970.806527 + 20 +6512.764529 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1873 + 8 +HOLZ + 10 +13969.160531 + 20 +6513.079522 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1874 + 8 +HOLZ + 10 +13967.514536 + 20 +6513.404307 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1875 + 8 +HOLZ + 10 +13965.868542 + 20 +6513.748678 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1876 + 8 +HOLZ + 10 +13964.222548 + 20 +6514.122427 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1877 + 8 +HOLZ + 10 +13962.576553 + 20 +6514.533918 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1878 + 8 +HOLZ + 10 +13960.930559 + 20 +6514.985803 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1879 + 8 +HOLZ + 10 +13959.284565 + 20 +6515.479307 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +187A + 8 +HOLZ + 10 +13957.63857 + 20 +6516.015653 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +187B + 8 +HOLZ + 10 +13955.992576 + 20 +6516.596065 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +187C + 8 +HOLZ + 10 +13954.346582 + 20 +6517.221768 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +187D + 8 +HOLZ + 10 +13952.700587 + 20 +6517.893984 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +187E + 8 +HOLZ + 10 +13951.054593 + 20 +6518.613938 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +187F + 8 +HOLZ + 10 +13949.412273 + 20 +6519.382039 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1880 + 8 +HOLZ + 10 +13947.791997 + 20 +6520.195429 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1881 + 8 +HOLZ + 10 +13946.215811 + 20 +6521.050437 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1882 + 8 +HOLZ + 10 +13944.705758 + 20 +6521.943391 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1883 + 8 +HOLZ + 10 +13943.283883 + 20 +6522.870619 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1884 + 8 +HOLZ + 10 +13941.972231 + 20 +6523.828449 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1885 + 8 +HOLZ + 10 +13940.792846 + 20 +6524.813209 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1886 + 8 +HOLZ + 10 +13939.767773 + 20 +6525.821227 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1887 + 8 +HOLZ + 10 +13938.909054 + 20 +6526.849239 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1888 + 8 +HOLZ + 10 +13938.188727 + 20 +6527.895613 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1889 + 8 +HOLZ + 10 +13937.568825 + 20 +6528.959125 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +188A + 8 +HOLZ + 10 +13937.011382 + 20 +6530.03855 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +188B + 8 +HOLZ + 10 +13936.478433 + 20 +6531.132664 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +188C + 8 +HOLZ + 10 +13935.932013 + 20 +6532.240243 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +188D + 8 +HOLZ + 10 +13935.334156 + 20 +6533.360063 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +188E + 8 +HOLZ + 10 +13934.646897 + 20 +6534.4909 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +188F + 8 +HOLZ + 10 +13933.837984 + 20 +6535.627652 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1890 + 8 +HOLZ + 10 +13932.89803 + 20 +6536.749715 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1891 + 8 +HOLZ + 10 +13931.823358 + 20 +6537.832608 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1892 + 8 +HOLZ + 10 +13930.610296 + 20 +6538.851848 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1893 + 8 +HOLZ + 10 +13929.255168 + 20 +6539.782956 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1894 + 8 +HOLZ + 10 +13927.754301 + 20 +6540.601449 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1895 + 8 +HOLZ + 10 +13926.10402 + 20 +6541.282846 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1896 + 8 +HOLZ + 10 +13924.300651 + 20 +6541.802666 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1897 + 8 +HOLZ + 10 +13922.345418 + 20 +6542.144791 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1898 + 8 +HOLZ + 10 +13920.259142 + 20 +6542.326563 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1899 + 8 +HOLZ + 10 +13918.067541 + 20 +6542.373688 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +189A + 8 +HOLZ + 10 +13915.796334 + 20 +6542.31187 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +189B + 8 +HOLZ + 10 +13913.47124 + 20 +6542.166816 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +189C + 8 +HOLZ + 10 +13911.117978 + 20 +6541.96423 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +189D + 8 +HOLZ + 10 +13908.762266 + 20 +6541.729819 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +189E + 8 +HOLZ + 10 +13906.429824 + 20 +6541.489288 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +189F + 8 +HOLZ + 10 +13904.135246 + 20 +6541.266199 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +18A0 + 8 +HOLZ + 10 +13901.848628 + 20 +6541.075549 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +18A1 + 8 +HOLZ + 10 +13899.528944 + 20 +6540.930189 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +18A2 + 8 +HOLZ + 10 +13897.135165 + 20 +6540.842973 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +18A3 + 8 +HOLZ + 10 +13894.626263 + 20 +6540.826753 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +18A4 + 8 +HOLZ + 10 +13891.961213 + 20 +6540.894382 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +18A5 + 8 +HOLZ + 10 +13889.098985 + 20 +6541.058713 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +18A6 + 8 +HOLZ + 10 +13885.998552 + 20 +6541.332599 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +18A7 + 8 +HOLZ + 10 +13882.646851 + 20 +6541.734603 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +18A8 + 8 +HOLZ + 10 +13879.142675 + 20 +6542.306141 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +18A9 + 8 +HOLZ + 10 +13875.612782 + 20 +6543.094339 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +18AA + 8 +HOLZ + 10 +13872.18393 + 20 +6544.146321 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +18AB + 8 +HOLZ + 10 +13868.982875 + 20 +6545.509214 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +18AC + 8 +HOLZ + 10 +13866.136375 + 20 +6547.230145 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +18AD + 8 +HOLZ + 10 +13863.771188 + 20 +6549.356239 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +18AE + 8 +HOLZ + 10 +13862.014072 + 20 +6551.934622 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +18AF + 8 +HOLZ + 10 +14001.84535 + 20 +6503.677065 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +18B0 + 8 +HOLZ + 10 +13990.558545 + 20 +6507.43738 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +18B1 + 8 +HOLZ + 10 +13977.390502 + 20 +6511.824451 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +18B2 + 8 +HOLZ + 10 +13964.222548 + 20 +6513.704608 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +18B3 + 8 +HOLZ + 10 +13951.054593 + 20 +6518.091679 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +18B4 + 8 +HOLZ + 10 +13937.886639 + 20 +6525.612308 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +18B5 + 8 +HOLZ + 10 +13936.00549 + 20 +6534.386449 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +18B6 + 8 +HOLZ + 10 +13925.972783 + 20 +6543.787291 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +18B7 + 8 +HOLZ + 10 +13905.907283 + 20 +6541.280378 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +18B8 + 8 +HOLZ + 10 +13888.97703 + 20 +6540.026922 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +18B9 + 8 +HOLZ + 10 +13865.776282 + 20 +6544.413992 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +18BA + 8 +HOLZ + 10 +13862.014072 + 20 +6551.934622 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +18BB + 8 +HOLZ + 0 +POLYLINE + 5 +18BC + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +28A7 + 8 +HOLZ + 10 +13830.0 + 20 +6281.0 + 30 +0.0 + 0 +VERTEX + 5 +28A8 + 8 +HOLZ + 10 +14035.0 + 20 +6281.0 + 30 +0.0 + 0 +SEQEND + 5 +28A9 + 8 +HOLZ + 0 +POLYLINE + 5 +18C0 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +28AA + 8 +HOLZ + 10 +14035.0 + 20 +6555.0 + 30 +0.0 + 0 +VERTEX + 5 +28AB + 8 +HOLZ + 10 +13830.0 + 20 +6555.0 + 30 +0.0 + 0 +SEQEND + 5 +28AC + 8 +HOLZ + 0 +TEXT + 5 +18C4 + 8 +LEGENDE-70 + 10 +6615.0 + 20 +13995.0 + 30 +0.0 + 40 +175.0 + 1 +AUSSCHNITT DECKE NG/DG + 0 +TEXT + 5 +18C5 + 8 +LEGENDE-70 + 10 +8490.0 + 20 +13690.0 + 30 +0.0 + 40 +87.5 + 1 +M 1:10 + 0 +POLYLINE + 5 +18C6 + 8 +SCHNITTKANTEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +28AD + 8 +SCHNITTKANTEN + 10 +11555.0 + 20 +13995.0 + 30 +0.0 + 0 +VERTEX + 5 +28AE + 8 +SCHNITTKANTEN + 10 +11555.0 + 20 +12575.0 + 30 +0.0 + 0 +SEQEND + 5 +28AF + 8 +SCHNITTKANTEN + 0 +POLYLINE + 5 +18CA + 8 +SCHNITTKANTEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +28B0 + 8 +SCHNITTKANTEN + 10 +13605.0 + 20 +13995.0 + 30 +0.0 + 0 +VERTEX + 5 +28B1 + 8 +SCHNITTKANTEN + 10 +13605.0 + 20 +12575.0 + 30 +0.0 + 0 +SEQEND + 5 +28B2 + 8 +SCHNITTKANTEN + 0 +LINE + 5 +18CE + 8 +0 + 62 + 0 + 10 +11625.0 + 20 +13477.2413 + 30 +0.0 + 11 +11687.5 + 21 +13477.2413 + 31 +0.0 + 0 +LINE + 5 +18CF + 8 +0 + 62 + 0 + 10 +11812.5 + 20 +13477.2413 + 30 +0.0 + 11 +11875.0 + 21 +13477.2413 + 31 +0.0 + 0 +LINE + 5 +18D0 + 8 +0 + 62 + 0 + 10 +12000.0 + 20 +13477.2413 + 30 +0.0 + 11 +12062.5 + 21 +13477.2413 + 31 +0.0 + 0 +LINE + 5 +18D1 + 8 +0 + 62 + 0 + 10 +12187.5 + 20 +13477.2413 + 30 +0.0 + 11 +12250.0 + 21 +13477.2413 + 31 +0.0 + 0 +LINE + 5 +18D2 + 8 +0 + 62 + 0 + 10 +12375.0 + 20 +13477.2413 + 30 +0.0 + 11 +12437.5 + 21 +13477.2413 + 31 +0.0 + 0 +LINE + 5 +18D3 + 8 +0 + 62 + 0 + 10 +12562.5 + 20 +13477.2413 + 30 +0.0 + 11 +12625.0 + 21 +13477.2413 + 31 +0.0 + 0 +LINE + 5 +18D4 + 8 +0 + 62 + 0 + 10 +12750.0 + 20 +13477.2413 + 30 +0.0 + 11 +12812.5 + 21 +13477.2413 + 31 +0.0 + 0 +LINE + 5 +18D5 + 8 +0 + 62 + 0 + 10 +12937.5 + 20 +13477.2413 + 30 +0.0 + 11 +13000.0 + 21 +13477.2413 + 31 +0.0 + 0 +LINE + 5 +18D6 + 8 +0 + 62 + 0 + 10 +13125.0 + 20 +13477.2413 + 30 +0.0 + 11 +13187.5 + 21 +13477.2413 + 31 +0.0 + 0 +LINE + 5 +18D7 + 8 +0 + 62 + 0 + 10 +13312.5 + 20 +13477.2413 + 30 +0.0 + 11 +13375.0 + 21 +13477.2413 + 31 +0.0 + 0 +LINE + 5 +18D8 + 8 +0 + 62 + 0 + 10 +13500.0 + 20 +13477.2413 + 30 +0.0 + 11 +13562.5 + 21 +13477.2413 + 31 +0.0 + 0 +LINE + 5 +18D9 + 8 +0 + 62 + 0 + 10 +11555.0 + 20 +13531.367888 + 30 +0.0 + 11 +11593.75 + 21 +13531.367888 + 31 +0.0 + 0 +LINE + 5 +18DA + 8 +0 + 62 + 0 + 10 +11718.75 + 20 +13531.367888 + 30 +0.0 + 11 +11781.25 + 21 +13531.367888 + 31 +0.0 + 0 +LINE + 5 +18DB + 8 +0 + 62 + 0 + 10 +11906.25 + 20 +13531.367888 + 30 +0.0 + 11 +11968.75 + 21 +13531.367888 + 31 +0.0 + 0 +LINE + 5 +18DC + 8 +0 + 62 + 0 + 10 +12093.75 + 20 +13531.367888 + 30 +0.0 + 11 +12156.25 + 21 +13531.367888 + 31 +0.0 + 0 +LINE + 5 +18DD + 8 +0 + 62 + 0 + 10 +12281.25 + 20 +13531.367888 + 30 +0.0 + 11 +12343.75 + 21 +13531.367888 + 31 +0.0 + 0 +LINE + 5 +18DE + 8 +0 + 62 + 0 + 10 +12468.75 + 20 +13531.367888 + 30 +0.0 + 11 +12531.25 + 21 +13531.367888 + 31 +0.0 + 0 +LINE + 5 +18DF + 8 +0 + 62 + 0 + 10 +12656.25 + 20 +13531.367888 + 30 +0.0 + 11 +12718.75 + 21 +13531.367888 + 31 +0.0 + 0 +LINE + 5 +18E0 + 8 +0 + 62 + 0 + 10 +12843.75 + 20 +13531.367888 + 30 +0.0 + 11 +12906.25 + 21 +13531.367888 + 31 +0.0 + 0 +LINE + 5 +18E1 + 8 +0 + 62 + 0 + 10 +13031.25 + 20 +13531.367888 + 30 +0.0 + 11 +13093.75 + 21 +13531.367888 + 31 +0.0 + 0 +LINE + 5 +18E2 + 8 +0 + 62 + 0 + 10 +13218.75 + 20 +13531.367888 + 30 +0.0 + 11 +13281.25 + 21 +13531.367888 + 31 +0.0 + 0 +LINE + 5 +18E3 + 8 +0 + 62 + 0 + 10 +13406.25 + 20 +13531.367888 + 30 +0.0 + 11 +13468.75 + 21 +13531.367888 + 31 +0.0 + 0 +LINE + 5 +18E4 + 8 +0 + 62 + 0 + 10 +13593.75 + 20 +13531.367888 + 30 +0.0 + 11 +13605.0 + 21 +13531.367888 + 31 +0.0 + 0 +LINE + 5 +18E5 + 8 +0 + 62 + 0 + 10 +11625.0 + 20 +13585.494475 + 30 +0.0 + 11 +11687.5 + 21 +13585.494475 + 31 +0.0 + 0 +LINE + 5 +18E6 + 8 +0 + 62 + 0 + 10 +11812.5 + 20 +13585.494475 + 30 +0.0 + 11 +11875.0 + 21 +13585.494475 + 31 +0.0 + 0 +LINE + 5 +18E7 + 8 +0 + 62 + 0 + 10 +12000.0 + 20 +13585.494475 + 30 +0.0 + 11 +12062.5 + 21 +13585.494475 + 31 +0.0 + 0 +LINE + 5 +18E8 + 8 +0 + 62 + 0 + 10 +12187.5 + 20 +13585.494475 + 30 +0.0 + 11 +12250.0 + 21 +13585.494475 + 31 +0.0 + 0 +LINE + 5 +18E9 + 8 +0 + 62 + 0 + 10 +12375.0 + 20 +13585.494475 + 30 +0.0 + 11 +12437.5 + 21 +13585.494475 + 31 +0.0 + 0 +LINE + 5 +18EA + 8 +0 + 62 + 0 + 10 +12562.5 + 20 +13585.494475 + 30 +0.0 + 11 +12625.0 + 21 +13585.494475 + 31 +0.0 + 0 +LINE + 5 +18EB + 8 +0 + 62 + 0 + 10 +12750.0 + 20 +13585.494475 + 30 +0.0 + 11 +12812.5 + 21 +13585.494475 + 31 +0.0 + 0 +LINE + 5 +18EC + 8 +0 + 62 + 0 + 10 +12937.5 + 20 +13585.494475 + 30 +0.0 + 11 +13000.0 + 21 +13585.494475 + 31 +0.0 + 0 +LINE + 5 +18ED + 8 +0 + 62 + 0 + 10 +13125.0 + 20 +13585.494475 + 30 +0.0 + 11 +13187.5 + 21 +13585.494475 + 31 +0.0 + 0 +LINE + 5 +18EE + 8 +0 + 62 + 0 + 10 +13312.5 + 20 +13585.494475 + 30 +0.0 + 11 +13375.0 + 21 +13585.494475 + 31 +0.0 + 0 +LINE + 5 +18EF + 8 +0 + 62 + 0 + 10 +13500.0 + 20 +13585.494475 + 30 +0.0 + 11 +13562.5 + 21 +13585.494475 + 31 +0.0 + 0 +LINE + 5 +18F0 + 8 +0 + 62 + 0 + 10 +11555.0 + 20 +13639.621063 + 30 +0.0 + 11 +11593.75 + 21 +13639.621063 + 31 +0.0 + 0 +LINE + 5 +18F1 + 8 +0 + 62 + 0 + 10 +11718.75 + 20 +13639.621063 + 30 +0.0 + 11 +11781.25 + 21 +13639.621063 + 31 +0.0 + 0 +LINE + 5 +18F2 + 8 +0 + 62 + 0 + 10 +11906.25 + 20 +13639.621063 + 30 +0.0 + 11 +11968.75 + 21 +13639.621063 + 31 +0.0 + 0 +LINE + 5 +18F3 + 8 +0 + 62 + 0 + 10 +12093.75 + 20 +13639.621063 + 30 +0.0 + 11 +12156.25 + 21 +13639.621063 + 31 +0.0 + 0 +LINE + 5 +18F4 + 8 +0 + 62 + 0 + 10 +12281.25 + 20 +13639.621063 + 30 +0.0 + 11 +12343.75 + 21 +13639.621063 + 31 +0.0 + 0 +LINE + 5 +18F5 + 8 +0 + 62 + 0 + 10 +12468.75 + 20 +13639.621063 + 30 +0.0 + 11 +12531.25 + 21 +13639.621063 + 31 +0.0 + 0 +LINE + 5 +18F6 + 8 +0 + 62 + 0 + 10 +12656.25 + 20 +13639.621063 + 30 +0.0 + 11 +12718.75 + 21 +13639.621063 + 31 +0.0 + 0 +LINE + 5 +18F7 + 8 +0 + 62 + 0 + 10 +12843.75 + 20 +13639.621063 + 30 +0.0 + 11 +12906.25 + 21 +13639.621063 + 31 +0.0 + 0 +LINE + 5 +18F8 + 8 +0 + 62 + 0 + 10 +13031.25 + 20 +13639.621063 + 30 +0.0 + 11 +13093.75 + 21 +13639.621063 + 31 +0.0 + 0 +LINE + 5 +18F9 + 8 +0 + 62 + 0 + 10 +13218.75 + 20 +13639.621063 + 30 +0.0 + 11 +13281.25 + 21 +13639.621063 + 31 +0.0 + 0 +LINE + 5 +18FA + 8 +0 + 62 + 0 + 10 +13406.25 + 20 +13639.621063 + 30 +0.0 + 11 +13468.75 + 21 +13639.621063 + 31 +0.0 + 0 +LINE + 5 +18FB + 8 +0 + 62 + 0 + 10 +11625.0 + 20 +13693.74765 + 30 +0.0 + 11 +11687.5 + 21 +13693.74765 + 31 +0.0 + 0 +LINE + 5 +18FC + 8 +0 + 62 + 0 + 10 +11812.5 + 20 +13693.74765 + 30 +0.0 + 11 +11875.0 + 21 +13693.74765 + 31 +0.0 + 0 +LINE + 5 +18FD + 8 +0 + 62 + 0 + 10 +12000.0 + 20 +13693.74765 + 30 +0.0 + 11 +12062.5 + 21 +13693.74765 + 31 +0.0 + 0 +LINE + 5 +18FE + 8 +0 + 62 + 0 + 10 +12187.5 + 20 +13693.74765 + 30 +0.0 + 11 +12250.0 + 21 +13693.74765 + 31 +0.0 + 0 +LINE + 5 +18FF + 8 +0 + 62 + 0 + 10 +12375.0 + 20 +13693.74765 + 30 +0.0 + 11 +12437.5 + 21 +13693.74765 + 31 +0.0 + 0 +LINE + 5 +1900 + 8 +0 + 62 + 0 + 10 +12562.5 + 20 +13693.74765 + 30 +0.0 + 11 +12625.0 + 21 +13693.74765 + 31 +0.0 + 0 +LINE + 5 +1901 + 8 +0 + 62 + 0 + 10 +12750.0 + 20 +13693.74765 + 30 +0.0 + 11 +12812.5 + 21 +13693.74765 + 31 +0.0 + 0 +LINE + 5 +1902 + 8 +0 + 62 + 0 + 10 +12937.5 + 20 +13693.74765 + 30 +0.0 + 11 +13000.0 + 21 +13693.74765 + 31 +0.0 + 0 +LINE + 5 +1903 + 8 +0 + 62 + 0 + 10 +13125.0 + 20 +13693.74765 + 30 +0.0 + 11 +13187.5 + 21 +13693.74765 + 31 +0.0 + 0 +LINE + 5 +1904 + 8 +0 + 62 + 0 + 10 +13312.5 + 20 +13693.74765 + 30 +0.0 + 11 +13375.0 + 21 +13693.74765 + 31 +0.0 + 0 +LINE + 5 +1905 + 8 +0 + 62 + 0 + 10 +13500.0 + 20 +13693.74765 + 30 +0.0 + 11 +13562.5 + 21 +13693.74765 + 31 +0.0 + 0 +LINE + 5 +1906 + 8 +0 + 62 + 0 + 10 +11555.0 + 20 +13423.114713 + 30 +0.0 + 11 +11593.75 + 21 +13423.114713 + 31 +0.0 + 0 +LINE + 5 +1907 + 8 +0 + 62 + 0 + 10 +11718.75 + 20 +13423.114713 + 30 +0.0 + 11 +11781.25 + 21 +13423.114713 + 31 +0.0 + 0 +LINE + 5 +1908 + 8 +0 + 62 + 0 + 10 +11906.25 + 20 +13423.114713 + 30 +0.0 + 11 +11968.75 + 21 +13423.114713 + 31 +0.0 + 0 +LINE + 5 +1909 + 8 +0 + 62 + 0 + 10 +12093.75 + 20 +13423.114713 + 30 +0.0 + 11 +12156.25 + 21 +13423.114713 + 31 +0.0 + 0 +LINE + 5 +190A + 8 +0 + 62 + 0 + 10 +12281.25 + 20 +13423.114713 + 30 +0.0 + 11 +12343.75 + 21 +13423.114713 + 31 +0.0 + 0 +LINE + 5 +190B + 8 +0 + 62 + 0 + 10 +12468.75 + 20 +13423.114713 + 30 +0.0 + 11 +12531.25 + 21 +13423.114713 + 31 +0.0 + 0 +LINE + 5 +190C + 8 +0 + 62 + 0 + 10 +12656.25 + 20 +13423.114713 + 30 +0.0 + 11 +12718.75 + 21 +13423.114713 + 31 +0.0 + 0 +LINE + 5 +190D + 8 +0 + 62 + 0 + 10 +12843.75 + 20 +13423.114713 + 30 +0.0 + 11 +12906.25 + 21 +13423.114713 + 31 +0.0 + 0 +LINE + 5 +190E + 8 +0 + 62 + 0 + 10 +13031.25 + 20 +13423.114713 + 30 +0.0 + 11 +13093.75 + 21 +13423.114713 + 31 +0.0 + 0 +LINE + 5 +190F + 8 +0 + 62 + 0 + 10 +13218.75 + 20 +13423.114713 + 30 +0.0 + 11 +13281.25 + 21 +13423.114713 + 31 +0.0 + 0 +LINE + 5 +1910 + 8 +0 + 62 + 0 + 10 +13406.25 + 20 +13423.114713 + 30 +0.0 + 11 +13468.75 + 21 +13423.114713 + 31 +0.0 + 0 +LINE + 5 +1911 + 8 +0 + 62 + 0 + 10 +13593.75 + 20 +13423.114713 + 30 +0.0 + 11 +13605.0 + 21 +13423.114713 + 31 +0.0 + 0 +LINE + 5 +1912 + 8 +0 + 62 + 0 + 10 +11625.0 + 20 +13368.988125 + 30 +0.0 + 11 +11687.5 + 21 +13368.988125 + 31 +0.0 + 0 +LINE + 5 +1913 + 8 +0 + 62 + 0 + 10 +11812.5 + 20 +13368.988125 + 30 +0.0 + 11 +11875.0 + 21 +13368.988125 + 31 +0.0 + 0 +LINE + 5 +1914 + 8 +0 + 62 + 0 + 10 +12000.0 + 20 +13368.988125 + 30 +0.0 + 11 +12062.5 + 21 +13368.988125 + 31 +0.0 + 0 +LINE + 5 +1915 + 8 +0 + 62 + 0 + 10 +12187.5 + 20 +13368.988125 + 30 +0.0 + 11 +12250.0 + 21 +13368.988125 + 31 +0.0 + 0 +LINE + 5 +1916 + 8 +0 + 62 + 0 + 10 +12375.0 + 20 +13368.988125 + 30 +0.0 + 11 +12437.5 + 21 +13368.988125 + 31 +0.0 + 0 +LINE + 5 +1917 + 8 +0 + 62 + 0 + 10 +12562.5 + 20 +13368.988125 + 30 +0.0 + 11 +12625.0 + 21 +13368.988125 + 31 +0.0 + 0 +LINE + 5 +1918 + 8 +0 + 62 + 0 + 10 +12750.0 + 20 +13368.988125 + 30 +0.0 + 11 +12812.5 + 21 +13368.988125 + 31 +0.0 + 0 +LINE + 5 +1919 + 8 +0 + 62 + 0 + 10 +12937.5 + 20 +13368.988125 + 30 +0.0 + 11 +13000.0 + 21 +13368.988125 + 31 +0.0 + 0 +LINE + 5 +191A + 8 +0 + 62 + 0 + 10 +13125.0 + 20 +13368.988125 + 30 +0.0 + 11 +13187.5 + 21 +13368.988125 + 31 +0.0 + 0 +LINE + 5 +191B + 8 +0 + 62 + 0 + 10 +13312.5 + 20 +13368.988125 + 30 +0.0 + 11 +13375.0 + 21 +13368.988125 + 31 +0.0 + 0 +LINE + 5 +191C + 8 +0 + 62 + 0 + 10 +13500.0 + 20 +13368.988125 + 30 +0.0 + 11 +13562.5 + 21 +13368.988125 + 31 +0.0 + 0 +LINE + 5 +191D + 8 +0 + 62 + 0 + 10 +11555.0 + 20 +13314.861538 + 30 +0.0 + 11 +11593.75 + 21 +13314.861538 + 31 +0.0 + 0 +LINE + 5 +191E + 8 +0 + 62 + 0 + 10 +11718.75 + 20 +13314.861538 + 30 +0.0 + 11 +11781.25 + 21 +13314.861538 + 31 +0.0 + 0 +LINE + 5 +191F + 8 +0 + 62 + 0 + 10 +11906.25 + 20 +13314.861538 + 30 +0.0 + 11 +11968.75 + 21 +13314.861538 + 31 +0.0 + 0 +LINE + 5 +1920 + 8 +0 + 62 + 0 + 10 +12093.75 + 20 +13314.861538 + 30 +0.0 + 11 +12156.25 + 21 +13314.861538 + 31 +0.0 + 0 +LINE + 5 +1921 + 8 +0 + 62 + 0 + 10 +12281.25 + 20 +13314.861538 + 30 +0.0 + 11 +12343.75 + 21 +13314.861538 + 31 +0.0 + 0 +LINE + 5 +1922 + 8 +0 + 62 + 0 + 10 +12468.75 + 20 +13314.861538 + 30 +0.0 + 11 +12531.25 + 21 +13314.861538 + 31 +0.0 + 0 +LINE + 5 +1923 + 8 +0 + 62 + 0 + 10 +12656.25 + 20 +13314.861538 + 30 +0.0 + 11 +12718.75 + 21 +13314.861538 + 31 +0.0 + 0 +LINE + 5 +1924 + 8 +0 + 62 + 0 + 10 +12843.75 + 20 +13314.861538 + 30 +0.0 + 11 +12906.25 + 21 +13314.861538 + 31 +0.0 + 0 +LINE + 5 +1925 + 8 +0 + 62 + 0 + 10 +13031.25 + 20 +13314.861538 + 30 +0.0 + 11 +13093.75 + 21 +13314.861538 + 31 +0.0 + 0 +LINE + 5 +1926 + 8 +0 + 62 + 0 + 10 +13218.75 + 20 +13314.861538 + 30 +0.0 + 11 +13281.25 + 21 +13314.861538 + 31 +0.0 + 0 +LINE + 5 +1927 + 8 +0 + 62 + 0 + 10 +13406.25 + 20 +13314.861538 + 30 +0.0 + 11 +13468.75 + 21 +13314.861538 + 31 +0.0 + 0 +LINE + 5 +1928 + 8 +0 + 62 + 0 + 10 +13593.749953 + 20 +13639.621072 + 30 +0.0 + 11 +13562.499953 + 21 +13693.74766 + 31 +0.0 + 0 +LINE + 5 +1929 + 8 +0 + 62 + 0 + 10 +13593.749953 + 20 +13531.367897 + 30 +0.0 + 11 +13562.499953 + 21 +13585.494484 + 31 +0.0 + 0 +LINE + 5 +192A + 8 +0 + 62 + 0 + 10 +13499.999953 + 20 +13693.74766 + 30 +0.0 + 11 +13496.390163 + 21 +13700.0 + 31 +0.0 + 0 +LINE + 5 +192B + 8 +0 + 62 + 0 + 10 +13593.749954 + 20 +13423.114721 + 30 +0.0 + 11 +13562.499954 + 21 +13477.241309 + 31 +0.0 + 0 +LINE + 5 +192C + 8 +0 + 62 + 0 + 10 +13499.999954 + 20 +13585.494485 + 30 +0.0 + 11 +13468.749954 + 21 +13639.621072 + 31 +0.0 + 0 +LINE + 5 +192D + 8 +0 + 62 + 0 + 10 +13593.749954 + 20 +13314.861546 + 30 +0.0 + 11 +13562.499954 + 21 +13368.988134 + 31 +0.0 + 0 +LINE + 5 +192E + 8 +0 + 62 + 0 + 10 +13499.999954 + 20 +13477.241309 + 30 +0.0 + 11 +13468.749954 + 21 +13531.367897 + 31 +0.0 + 0 +LINE + 5 +192F + 8 +0 + 62 + 0 + 10 +13406.249954 + 20 +13639.621072 + 30 +0.0 + 11 +13374.999954 + 21 +13693.74766 + 31 +0.0 + 0 +LINE + 5 +1930 + 8 +0 + 62 + 0 + 10 +13499.999954 + 20 +13368.988134 + 30 +0.0 + 11 +13468.749954 + 21 +13423.114722 + 31 +0.0 + 0 +LINE + 5 +1931 + 8 +0 + 62 + 0 + 10 +13406.249954 + 20 +13531.367897 + 30 +0.0 + 11 +13374.999954 + 21 +13585.494485 + 31 +0.0 + 0 +LINE + 5 +1932 + 8 +0 + 62 + 0 + 10 +13312.499954 + 20 +13693.74766 + 30 +0.0 + 11 +13308.890164 + 21 +13700.0 + 31 +0.0 + 0 +LINE + 5 +1933 + 8 +0 + 62 + 0 + 10 +13491.467023 + 20 +13275.514429 + 30 +0.0 + 11 +13468.749954 + 21 +13314.861546 + 31 +0.0 + 0 +LINE + 5 +1934 + 8 +0 + 62 + 0 + 10 +13406.249954 + 20 +13423.114722 + 30 +0.0 + 11 +13374.999954 + 21 +13477.241309 + 31 +0.0 + 0 +LINE + 5 +1935 + 8 +0 + 62 + 0 + 10 +13312.499954 + 20 +13585.494485 + 30 +0.0 + 11 +13281.249954 + 21 +13639.621073 + 31 +0.0 + 0 +LINE + 5 +1936 + 8 +0 + 62 + 0 + 10 +13406.249954 + 20 +13314.861546 + 30 +0.0 + 11 +13374.999954 + 21 +13368.988134 + 31 +0.0 + 0 +LINE + 5 +1937 + 8 +0 + 62 + 0 + 10 +13312.499954 + 20 +13477.24131 + 30 +0.0 + 11 +13281.249954 + 21 +13531.367897 + 31 +0.0 + 0 +LINE + 5 +1938 + 8 +0 + 62 + 0 + 10 +13218.749954 + 20 +13639.621073 + 30 +0.0 + 11 +13187.499954 + 21 +13693.747661 + 31 +0.0 + 0 +LINE + 5 +1939 + 8 +0 + 62 + 0 + 10 +13312.499955 + 20 +13368.988134 + 30 +0.0 + 11 +13281.249955 + 21 +13423.114722 + 31 +0.0 + 0 +LINE + 5 +193A + 8 +0 + 62 + 0 + 10 +13218.749955 + 20 +13531.367897 + 30 +0.0 + 11 +13187.499955 + 21 +13585.494485 + 31 +0.0 + 0 +LINE + 5 +193B + 8 +0 + 62 + 0 + 10 +13124.999955 + 20 +13693.747661 + 30 +0.0 + 11 +13121.390165 + 21 +13700.0 + 31 +0.0 + 0 +LINE + 5 +193C + 8 +0 + 62 + 0 + 10 +13303.986181 + 20 +13275.481248 + 30 +0.0 + 11 +13281.249955 + 21 +13314.861547 + 31 +0.0 + 0 +LINE + 5 +193D + 8 +0 + 62 + 0 + 10 +13218.749955 + 20 +13423.114722 + 30 +0.0 + 11 +13187.499955 + 21 +13477.24131 + 31 +0.0 + 0 +LINE + 5 +193E + 8 +0 + 62 + 0 + 10 +13124.999955 + 20 +13585.494485 + 30 +0.0 + 11 +13093.749955 + 21 +13639.621073 + 31 +0.0 + 0 +LINE + 5 +193F + 8 +0 + 62 + 0 + 10 +13218.749955 + 20 +13314.861547 + 30 +0.0 + 11 +13187.499955 + 21 +13368.988134 + 31 +0.0 + 0 +LINE + 5 +1940 + 8 +0 + 62 + 0 + 10 +13124.999955 + 20 +13477.24131 + 30 +0.0 + 11 +13093.749955 + 21 +13531.367898 + 31 +0.0 + 0 +LINE + 5 +1941 + 8 +0 + 62 + 0 + 10 +13031.249955 + 20 +13639.621073 + 30 +0.0 + 11 +12999.999955 + 21 +13693.747661 + 31 +0.0 + 0 +LINE + 5 +1942 + 8 +0 + 62 + 0 + 10 +13124.999955 + 20 +13368.988135 + 30 +0.0 + 11 +13093.749955 + 21 +13423.114722 + 31 +0.0 + 0 +LINE + 5 +1943 + 8 +0 + 62 + 0 + 10 +13031.249955 + 20 +13531.367898 + 30 +0.0 + 11 +12999.999955 + 21 +13585.494486 + 31 +0.0 + 0 +LINE + 5 +1944 + 8 +0 + 62 + 0 + 10 +12937.499955 + 20 +13693.747661 + 30 +0.0 + 11 +12933.890166 + 21 +13700.0 + 31 +0.0 + 0 +LINE + 5 +1945 + 8 +0 + 62 + 0 + 10 +13116.505339 + 20 +13275.448066 + 30 +0.0 + 11 +13093.749955 + 21 +13314.861547 + 31 +0.0 + 0 +LINE + 5 +1946 + 8 +0 + 62 + 0 + 10 +13031.249955 + 20 +13423.114722 + 30 +0.0 + 11 +12999.999955 + 21 +13477.24131 + 31 +0.0 + 0 +LINE + 5 +1947 + 8 +0 + 62 + 0 + 10 +12937.499955 + 20 +13585.494486 + 30 +0.0 + 11 +12906.249955 + 21 +13639.621073 + 31 +0.0 + 0 +LINE + 5 +1948 + 8 +0 + 62 + 0 + 10 +13031.249956 + 20 +13314.861547 + 30 +0.0 + 11 +12999.999956 + 21 +13368.988135 + 31 +0.0 + 0 +LINE + 5 +1949 + 8 +0 + 62 + 0 + 10 +12937.499956 + 20 +13477.24131 + 30 +0.0 + 11 +12906.249956 + 21 +13531.367898 + 31 +0.0 + 0 +LINE + 5 +194A + 8 +0 + 62 + 0 + 10 +12843.749956 + 20 +13639.621073 + 30 +0.0 + 11 +12812.499956 + 21 +13693.747661 + 31 +0.0 + 0 +LINE + 5 +194B + 8 +0 + 62 + 0 + 10 +12937.499956 + 20 +13368.988135 + 30 +0.0 + 11 +12906.249956 + 21 +13423.114723 + 31 +0.0 + 0 +LINE + 5 +194C + 8 +0 + 62 + 0 + 10 +12843.749956 + 20 +13531.367898 + 30 +0.0 + 11 +12812.499956 + 21 +13585.494486 + 31 +0.0 + 0 +LINE + 5 +194D + 8 +0 + 62 + 0 + 10 +12749.999956 + 20 +13693.747661 + 30 +0.0 + 11 +12746.390166 + 21 +13700.0 + 31 +0.0 + 0 +LINE + 5 +194E + 8 +0 + 62 + 0 + 10 +12929.024498 + 20 +13275.414884 + 30 +0.0 + 11 +12906.249956 + 21 +13314.861547 + 31 +0.0 + 0 +LINE + 5 +194F + 8 +0 + 62 + 0 + 10 +12843.749956 + 20 +13423.114723 + 30 +0.0 + 11 +12812.499956 + 21 +13477.241311 + 31 +0.0 + 0 +LINE + 5 +1950 + 8 +0 + 62 + 0 + 10 +12749.999956 + 20 +13585.494486 + 30 +0.0 + 11 +12718.749956 + 21 +13639.621074 + 31 +0.0 + 0 +LINE + 5 +1951 + 8 +0 + 62 + 0 + 10 +12843.749956 + 20 +13314.861547 + 30 +0.0 + 11 +12812.499956 + 21 +13368.988135 + 31 +0.0 + 0 +LINE + 5 +1952 + 8 +0 + 62 + 0 + 10 +12749.999956 + 20 +13477.241311 + 30 +0.0 + 11 +12718.749956 + 21 +13531.367898 + 31 +0.0 + 0 +LINE + 5 +1953 + 8 +0 + 62 + 0 + 10 +12656.249956 + 20 +13639.621074 + 30 +0.0 + 11 +12624.999956 + 21 +13693.747662 + 31 +0.0 + 0 +LINE + 5 +1954 + 8 +0 + 62 + 0 + 10 +12749.999956 + 20 +13368.988135 + 30 +0.0 + 11 +12718.749956 + 21 +13423.114723 + 31 +0.0 + 0 +LINE + 5 +1955 + 8 +0 + 62 + 0 + 10 +12656.249956 + 20 +13531.367898 + 30 +0.0 + 11 +12624.999956 + 21 +13585.494486 + 31 +0.0 + 0 +LINE + 5 +1956 + 8 +0 + 62 + 0 + 10 +12562.499956 + 20 +13693.747662 + 30 +0.0 + 11 +12558.890167 + 21 +13700.0 + 31 +0.0 + 0 +LINE + 5 +1957 + 8 +0 + 62 + 0 + 10 +12741.543656 + 20 +13275.381702 + 30 +0.0 + 11 +12718.749957 + 21 +13314.861548 + 31 +0.0 + 0 +LINE + 5 +1958 + 8 +0 + 62 + 0 + 10 +12656.249957 + 20 +13423.114723 + 30 +0.0 + 11 +12624.999957 + 21 +13477.241311 + 31 +0.0 + 0 +LINE + 5 +1959 + 8 +0 + 62 + 0 + 10 +12562.499957 + 20 +13585.494486 + 30 +0.0 + 11 +12531.249957 + 21 +13639.621074 + 31 +0.0 + 0 +LINE + 5 +195A + 8 +0 + 62 + 0 + 10 +12656.249957 + 20 +13314.861548 + 30 +0.0 + 11 +12624.999957 + 21 +13368.988136 + 31 +0.0 + 0 +LINE + 5 +195B + 8 +0 + 62 + 0 + 10 +12562.499957 + 20 +13477.241311 + 30 +0.0 + 11 +12531.249957 + 21 +13531.367899 + 31 +0.0 + 0 +LINE + 5 +195C + 8 +0 + 62 + 0 + 10 +12468.749957 + 20 +13639.621074 + 30 +0.0 + 11 +12437.499957 + 21 +13693.747662 + 31 +0.0 + 0 +LINE + 5 +195D + 8 +0 + 62 + 0 + 10 +12562.499957 + 20 +13368.988136 + 30 +0.0 + 11 +12531.249957 + 21 +13423.114723 + 31 +0.0 + 0 +LINE + 5 +195E + 8 +0 + 62 + 0 + 10 +12468.749957 + 20 +13531.367899 + 30 +0.0 + 11 +12437.499957 + 21 +13585.494487 + 31 +0.0 + 0 +LINE + 5 +195F + 8 +0 + 62 + 0 + 10 +12374.999957 + 20 +13693.747662 + 30 +0.0 + 11 +12371.390168 + 21 +13700.0 + 31 +0.0 + 0 +LINE + 5 +1960 + 8 +0 + 62 + 0 + 10 +12554.062814 + 20 +13275.34852 + 30 +0.0 + 11 +12531.249957 + 21 +13314.861548 + 31 +0.0 + 0 +LINE + 5 +1961 + 8 +0 + 62 + 0 + 10 +12468.749957 + 20 +13423.114723 + 30 +0.0 + 11 +12437.499957 + 21 +13477.241311 + 31 +0.0 + 0 +LINE + 5 +1962 + 8 +0 + 62 + 0 + 10 +12374.999957 + 20 +13585.494487 + 30 +0.0 + 11 +12343.749957 + 21 +13639.621074 + 31 +0.0 + 0 +LINE + 5 +1963 + 8 +0 + 62 + 0 + 10 +12468.749957 + 20 +13314.861548 + 30 +0.0 + 11 +12437.499957 + 21 +13368.988136 + 31 +0.0 + 0 +LINE + 5 +1964 + 8 +0 + 62 + 0 + 10 +12374.999957 + 20 +13477.241311 + 30 +0.0 + 11 +12343.749957 + 21 +13531.367899 + 31 +0.0 + 0 +LINE + 5 +1965 + 8 +0 + 62 + 0 + 10 +12281.249957 + 20 +13639.621075 + 30 +0.0 + 11 +12249.999957 + 21 +13693.747662 + 31 +0.0 + 0 +LINE + 5 +1966 + 8 +0 + 62 + 0 + 10 +12374.999958 + 20 +13368.988136 + 30 +0.0 + 11 +12343.749958 + 21 +13423.114724 + 31 +0.0 + 0 +LINE + 5 +1967 + 8 +0 + 62 + 0 + 10 +12281.249958 + 20 +13531.367899 + 30 +0.0 + 11 +12249.999958 + 21 +13585.494487 + 31 +0.0 + 0 +LINE + 5 +1968 + 8 +0 + 62 + 0 + 10 +12187.499958 + 20 +13693.747662 + 30 +0.0 + 11 +12183.890169 + 21 +13700.0 + 31 +0.0 + 0 +LINE + 5 +1969 + 8 +0 + 62 + 0 + 10 +12366.581973 + 20 +13275.315338 + 30 +0.0 + 11 +12343.749958 + 21 +13314.861548 + 31 +0.0 + 0 +LINE + 5 +196A + 8 +0 + 62 + 0 + 10 +12281.249958 + 20 +13423.114724 + 30 +0.0 + 11 +12249.999958 + 21 +13477.241312 + 31 +0.0 + 0 +LINE + 5 +196B + 8 +0 + 62 + 0 + 10 +12187.499958 + 20 +13585.494487 + 30 +0.0 + 11 +12156.249958 + 21 +13639.621075 + 31 +0.0 + 0 +LINE + 5 +196C + 8 +0 + 62 + 0 + 10 +12281.249958 + 20 +13314.861548 + 30 +0.0 + 11 +12249.999958 + 21 +13368.988136 + 31 +0.0 + 0 +LINE + 5 +196D + 8 +0 + 62 + 0 + 10 +12187.499958 + 20 +13477.241312 + 30 +0.0 + 11 +12156.249958 + 21 +13531.367899 + 31 +0.0 + 0 +LINE + 5 +196E + 8 +0 + 62 + 0 + 10 +12093.749958 + 20 +13639.621075 + 30 +0.0 + 11 +12062.499958 + 21 +13693.747663 + 31 +0.0 + 0 +LINE + 5 +196F + 8 +0 + 62 + 0 + 10 +12187.499958 + 20 +13368.988136 + 30 +0.0 + 11 +12156.249958 + 21 +13423.114724 + 31 +0.0 + 0 +LINE + 5 +1970 + 8 +0 + 62 + 0 + 10 +12093.749958 + 20 +13531.3679 + 30 +0.0 + 11 +12062.499958 + 21 +13585.494487 + 31 +0.0 + 0 +LINE + 5 +1971 + 8 +0 + 62 + 0 + 10 +11999.999958 + 20 +13693.747663 + 30 +0.0 + 11 +11996.39017 + 21 +13700.0 + 31 +0.0 + 0 +LINE + 5 +1972 + 8 +0 + 62 + 0 + 10 +12179.101131 + 20 +13275.282157 + 30 +0.0 + 11 +12156.249958 + 21 +13314.861549 + 31 +0.0 + 0 +LINE + 5 +1973 + 8 +0 + 62 + 0 + 10 +12093.749958 + 20 +13423.114724 + 30 +0.0 + 11 +12062.499958 + 21 +13477.241312 + 31 +0.0 + 0 +LINE + 5 +1974 + 8 +0 + 62 + 0 + 10 +11999.999958 + 20 +13585.494487 + 30 +0.0 + 11 +11968.749958 + 21 +13639.621075 + 31 +0.0 + 0 +LINE + 5 +1975 + 8 +0 + 62 + 0 + 10 +12093.749959 + 20 +13314.861549 + 30 +0.0 + 11 +12062.499959 + 21 +13368.988137 + 31 +0.0 + 0 +LINE + 5 +1976 + 8 +0 + 62 + 0 + 10 +11999.999959 + 20 +13477.241312 + 30 +0.0 + 11 +11968.749959 + 21 +13531.3679 + 31 +0.0 + 0 +LINE + 5 +1977 + 8 +0 + 62 + 0 + 10 +11906.249959 + 20 +13639.621075 + 30 +0.0 + 11 +11874.999959 + 21 +13693.747663 + 31 +0.0 + 0 +LINE + 5 +1978 + 8 +0 + 62 + 0 + 10 +11999.999959 + 20 +13368.988137 + 30 +0.0 + 11 +11968.749959 + 21 +13423.114724 + 31 +0.0 + 0 +LINE + 5 +1979 + 8 +0 + 62 + 0 + 10 +11906.249959 + 20 +13531.3679 + 30 +0.0 + 11 +11874.999959 + 21 +13585.494488 + 31 +0.0 + 0 +LINE + 5 +197A + 8 +0 + 62 + 0 + 10 +11812.499959 + 20 +13693.747663 + 30 +0.0 + 11 +11808.89017 + 21 +13700.0 + 31 +0.0 + 0 +LINE + 5 +197B + 8 +0 + 62 + 0 + 10 +11991.620289 + 20 +13275.248975 + 30 +0.0 + 11 +11968.749959 + 21 +13314.861549 + 31 +0.0 + 0 +LINE + 5 +197C + 8 +0 + 62 + 0 + 10 +11906.249959 + 20 +13423.114725 + 30 +0.0 + 11 +11874.999959 + 21 +13477.241312 + 31 +0.0 + 0 +LINE + 5 +197D + 8 +0 + 62 + 0 + 10 +11812.499959 + 20 +13585.494488 + 30 +0.0 + 11 +11781.249959 + 21 +13639.621076 + 31 +0.0 + 0 +LINE + 5 +197E + 8 +0 + 62 + 0 + 10 +11906.249959 + 20 +13314.861549 + 30 +0.0 + 11 +11874.999959 + 21 +13368.988137 + 31 +0.0 + 0 +LINE + 5 +197F + 8 +0 + 62 + 0 + 10 +11812.499959 + 20 +13477.241312 + 30 +0.0 + 11 +11781.249959 + 21 +13531.3679 + 31 +0.0 + 0 +LINE + 5 +1980 + 8 +0 + 62 + 0 + 10 +11718.749959 + 20 +13639.621076 + 30 +0.0 + 11 +11687.499959 + 21 +13693.747663 + 31 +0.0 + 0 +LINE + 5 +1981 + 8 +0 + 62 + 0 + 10 +11812.499959 + 20 +13368.988137 + 30 +0.0 + 11 +11781.249959 + 21 +13423.114725 + 31 +0.0 + 0 +LINE + 5 +1982 + 8 +0 + 62 + 0 + 10 +11718.749959 + 20 +13531.3679 + 30 +0.0 + 11 +11687.499959 + 21 +13585.494488 + 31 +0.0 + 0 +LINE + 5 +1983 + 8 +0 + 62 + 0 + 10 +11624.999959 + 20 +13693.747663 + 30 +0.0 + 11 +11621.390171 + 21 +13700.0 + 31 +0.0 + 0 +LINE + 5 +1984 + 8 +0 + 62 + 0 + 10 +11804.139448 + 20 +13275.215793 + 30 +0.0 + 11 +11781.24996 + 21 +13314.861549 + 31 +0.0 + 0 +LINE + 5 +1985 + 8 +0 + 62 + 0 + 10 +11718.74996 + 20 +13423.114725 + 30 +0.0 + 11 +11687.49996 + 21 +13477.241313 + 31 +0.0 + 0 +LINE + 5 +1986 + 8 +0 + 62 + 0 + 10 +11624.99996 + 20 +13585.494488 + 30 +0.0 + 11 +11593.74996 + 21 +13639.621076 + 31 +0.0 + 0 +LINE + 5 +1987 + 8 +0 + 62 + 0 + 10 +11718.74996 + 20 +13314.86155 + 30 +0.0 + 11 +11687.49996 + 21 +13368.988137 + 31 +0.0 + 0 +LINE + 5 +1988 + 8 +0 + 62 + 0 + 10 +11624.99996 + 20 +13477.241313 + 30 +0.0 + 11 +11593.74996 + 21 +13531.367901 + 31 +0.0 + 0 +LINE + 5 +1989 + 8 +0 + 62 + 0 + 10 +11624.99996 + 20 +13368.988137 + 30 +0.0 + 11 +11593.74996 + 21 +13423.114725 + 31 +0.0 + 0 +LINE + 5 +198A + 8 +0 + 62 + 0 + 10 +11616.658606 + 20 +13275.182611 + 30 +0.0 + 11 +11593.74996 + 21 +13314.86155 + 31 +0.0 + 0 +LINE + 5 +198B + 8 +0 + 62 + 0 + 10 +13571.041026 + 20 +13275.528513 + 30 +0.0 + 11 +13593.749984 + 21 +13314.861582 + 31 +0.0 + 0 +LINE + 5 +198C + 8 +0 + 62 + 0 + 10 +13562.499984 + 20 +13368.988169 + 30 +0.0 + 11 +13593.749984 + 21 +13423.114757 + 31 +0.0 + 0 +LINE + 5 +198D + 8 +0 + 62 + 0 + 10 +13468.749985 + 20 +13314.861582 + 30 +0.0 + 11 +13499.999985 + 21 +13368.988169 + 31 +0.0 + 0 +LINE + 5 +198E + 8 +0 + 62 + 0 + 10 +13562.499985 + 20 +13477.241345 + 30 +0.0 + 11 +13593.749985 + 21 +13531.367933 + 31 +0.0 + 0 +LINE + 5 +198F + 8 +0 + 62 + 0 + 10 +13383.521866 + 20 +13275.495324 + 30 +0.0 + 11 +13406.249985 + 21 +13314.861581 + 31 +0.0 + 0 +LINE + 5 +1990 + 8 +0 + 62 + 0 + 10 +13468.749985 + 20 +13423.114757 + 30 +0.0 + 11 +13499.999985 + 21 +13477.241345 + 31 +0.0 + 0 +LINE + 5 +1991 + 8 +0 + 62 + 0 + 10 +13562.499985 + 20 +13585.49452 + 30 +0.0 + 11 +13593.749985 + 21 +13639.621108 + 31 +0.0 + 0 +LINE + 5 +1992 + 8 +0 + 62 + 0 + 10 +13374.999985 + 20 +13368.988169 + 30 +0.0 + 11 +13406.249985 + 21 +13423.114757 + 31 +0.0 + 0 +LINE + 5 +1993 + 8 +0 + 62 + 0 + 10 +13468.749985 + 20 +13531.367932 + 30 +0.0 + 11 +13499.999985 + 21 +13585.49452 + 31 +0.0 + 0 +LINE + 5 +1994 + 8 +0 + 62 + 0 + 10 +13562.499985 + 20 +13693.747696 + 30 +0.0 + 11 +13566.109755 + 21 +13700.0 + 31 +0.0 + 0 +LINE + 5 +1995 + 8 +0 + 62 + 0 + 10 +13281.249985 + 20 +13314.861581 + 30 +0.0 + 11 +13312.499985 + 21 +13368.988169 + 31 +0.0 + 0 +LINE + 5 +1996 + 8 +0 + 62 + 0 + 10 +13374.999985 + 20 +13477.241344 + 30 +0.0 + 11 +13406.249985 + 21 +13531.367932 + 31 +0.0 + 0 +LINE + 5 +1997 + 8 +0 + 62 + 0 + 10 +13468.749985 + 20 +13639.621108 + 30 +0.0 + 11 +13499.999985 + 21 +13693.747695 + 31 +0.0 + 0 +LINE + 5 +1998 + 8 +0 + 62 + 0 + 10 +13196.002705 + 20 +13275.462136 + 30 +0.0 + 11 +13218.749985 + 21 +13314.861581 + 31 +0.0 + 0 +LINE + 5 +1999 + 8 +0 + 62 + 0 + 10 +13281.249985 + 20 +13423.114757 + 30 +0.0 + 11 +13312.499985 + 21 +13477.241344 + 31 +0.0 + 0 +LINE + 5 +199A + 8 +0 + 62 + 0 + 10 +13374.999985 + 20 +13585.49452 + 30 +0.0 + 11 +13406.249985 + 21 +13639.621108 + 31 +0.0 + 0 +LINE + 5 +199B + 8 +0 + 62 + 0 + 10 +13187.499986 + 20 +13368.988169 + 30 +0.0 + 11 +13218.749986 + 21 +13423.114756 + 31 +0.0 + 0 +LINE + 5 +199C + 8 +0 + 62 + 0 + 10 +13281.249986 + 20 +13531.367932 + 30 +0.0 + 11 +13312.499986 + 21 +13585.49452 + 31 +0.0 + 0 +LINE + 5 +199D + 8 +0 + 62 + 0 + 10 +13374.999986 + 20 +13693.747695 + 30 +0.0 + 11 +13378.609756 + 21 +13700.0 + 31 +0.0 + 0 +LINE + 5 +199E + 8 +0 + 62 + 0 + 10 +13093.749986 + 20 +13314.861581 + 30 +0.0 + 11 +13124.999986 + 21 +13368.988169 + 31 +0.0 + 0 +LINE + 5 +199F + 8 +0 + 62 + 0 + 10 +13187.499986 + 20 +13477.241344 + 30 +0.0 + 11 +13218.749986 + 21 +13531.367932 + 31 +0.0 + 0 +LINE + 5 +19A0 + 8 +0 + 62 + 0 + 10 +13281.249986 + 20 +13639.621107 + 30 +0.0 + 11 +13312.499986 + 21 +13693.747695 + 31 +0.0 + 0 +LINE + 5 +19A1 + 8 +0 + 62 + 0 + 10 +13008.483544 + 20 +13275.428947 + 30 +0.0 + 11 +13031.249986 + 21 +13314.861581 + 31 +0.0 + 0 +LINE + 5 +19A2 + 8 +0 + 62 + 0 + 10 +13093.749986 + 20 +13423.114756 + 30 +0.0 + 11 +13124.999986 + 21 +13477.241344 + 31 +0.0 + 0 +LINE + 5 +19A3 + 8 +0 + 62 + 0 + 10 +13187.499986 + 20 +13585.494519 + 30 +0.0 + 11 +13218.749986 + 21 +13639.621107 + 31 +0.0 + 0 +LINE + 5 +19A4 + 8 +0 + 62 + 0 + 10 +12999.999986 + 20 +13368.988168 + 30 +0.0 + 11 +13031.249986 + 21 +13423.114756 + 31 +0.0 + 0 +LINE + 5 +19A5 + 8 +0 + 62 + 0 + 10 +13093.749986 + 20 +13531.367932 + 30 +0.0 + 11 +13124.999986 + 21 +13585.494519 + 31 +0.0 + 0 +LINE + 5 +19A6 + 8 +0 + 62 + 0 + 10 +13187.499986 + 20 +13693.747695 + 30 +0.0 + 11 +13191.109756 + 21 +13700.0 + 31 +0.0 + 0 +LINE + 5 +19A7 + 8 +0 + 62 + 0 + 10 +12906.249986 + 20 +13314.861581 + 30 +0.0 + 11 +12937.499986 + 21 +13368.988168 + 31 +0.0 + 0 +LINE + 5 +19A8 + 8 +0 + 62 + 0 + 10 +12999.999986 + 20 +13477.241344 + 30 +0.0 + 11 +13031.249986 + 21 +13531.367931 + 31 +0.0 + 0 +LINE + 5 +19A9 + 8 +0 + 62 + 0 + 10 +13093.749986 + 20 +13639.621107 + 30 +0.0 + 11 +13124.999986 + 21 +13693.747695 + 31 +0.0 + 0 +LINE + 5 +19AA + 8 +0 + 62 + 0 + 10 +12820.964384 + 20 +13275.395759 + 30 +0.0 + 11 +12843.749987 + 21 +13314.86158 + 31 +0.0 + 0 +LINE + 5 +19AB + 8 +0 + 62 + 0 + 10 +12906.249987 + 20 +13423.114756 + 30 +0.0 + 11 +12937.499987 + 21 +13477.241344 + 31 +0.0 + 0 +LINE + 5 +19AC + 8 +0 + 62 + 0 + 10 +12999.999987 + 20 +13585.494519 + 30 +0.0 + 11 +13031.249987 + 21 +13639.621107 + 31 +0.0 + 0 +LINE + 5 +19AD + 8 +0 + 62 + 0 + 10 +12812.499987 + 20 +13368.988168 + 30 +0.0 + 11 +12843.749987 + 21 +13423.114756 + 31 +0.0 + 0 +LINE + 5 +19AE + 8 +0 + 62 + 0 + 10 +12906.249987 + 20 +13531.367931 + 30 +0.0 + 11 +12937.499987 + 21 +13585.494519 + 31 +0.0 + 0 +LINE + 5 +19AF + 8 +0 + 62 + 0 + 10 +12999.999987 + 20 +13693.747694 + 30 +0.0 + 11 +13003.609757 + 21 +13700.0 + 31 +0.0 + 0 +LINE + 5 +19B0 + 8 +0 + 62 + 0 + 10 +12718.749987 + 20 +13314.86158 + 30 +0.0 + 11 +12749.999987 + 21 +13368.988168 + 31 +0.0 + 0 +LINE + 5 +19B1 + 8 +0 + 62 + 0 + 10 +12812.499987 + 20 +13477.241343 + 30 +0.0 + 11 +12843.749987 + 21 +13531.367931 + 31 +0.0 + 0 +LINE + 5 +19B2 + 8 +0 + 62 + 0 + 10 +12906.249987 + 20 +13639.621107 + 30 +0.0 + 11 +12937.499987 + 21 +13693.747694 + 31 +0.0 + 0 +LINE + 5 +19B3 + 8 +0 + 62 + 0 + 10 +12633.445223 + 20 +13275.36257 + 30 +0.0 + 11 +12656.249987 + 21 +13314.86158 + 31 +0.0 + 0 +LINE + 5 +19B4 + 8 +0 + 62 + 0 + 10 +12718.749987 + 20 +13423.114756 + 30 +0.0 + 11 +12749.999987 + 21 +13477.241343 + 31 +0.0 + 0 +LINE + 5 +19B5 + 8 +0 + 62 + 0 + 10 +12812.499987 + 20 +13585.494519 + 30 +0.0 + 11 +12843.749987 + 21 +13639.621106 + 31 +0.0 + 0 +LINE + 5 +19B6 + 8 +0 + 62 + 0 + 10 +12624.999988 + 20 +13368.988168 + 30 +0.0 + 11 +12656.249988 + 21 +13423.114755 + 31 +0.0 + 0 +LINE + 5 +19B7 + 8 +0 + 62 + 0 + 10 +12718.749988 + 20 +13531.367931 + 30 +0.0 + 11 +12749.999988 + 21 +13585.494519 + 31 +0.0 + 0 +LINE + 5 +19B8 + 8 +0 + 62 + 0 + 10 +12812.499988 + 20 +13693.747694 + 30 +0.0 + 11 +12816.109758 + 21 +13700.0 + 31 +0.0 + 0 +LINE + 5 +19B9 + 8 +0 + 62 + 0 + 10 +12531.249988 + 20 +13314.86158 + 30 +0.0 + 11 +12562.499988 + 21 +13368.988168 + 31 +0.0 + 0 +LINE + 5 +19BA + 8 +0 + 62 + 0 + 10 +12624.999988 + 20 +13477.241343 + 30 +0.0 + 11 +12656.249988 + 21 +13531.367931 + 31 +0.0 + 0 +LINE + 5 +19BB + 8 +0 + 62 + 0 + 10 +12718.749988 + 20 +13639.621106 + 30 +0.0 + 11 +12749.999988 + 21 +13693.747694 + 31 +0.0 + 0 +LINE + 5 +19BC + 8 +0 + 62 + 0 + 10 +12445.926063 + 20 +13275.329381 + 30 +0.0 + 11 +12468.749988 + 21 +13314.86158 + 31 +0.0 + 0 +LINE + 5 +19BD + 8 +0 + 62 + 0 + 10 +12531.249988 + 20 +13423.114755 + 30 +0.0 + 11 +12562.499988 + 21 +13477.241343 + 31 +0.0 + 0 +LINE + 5 +19BE + 8 +0 + 62 + 0 + 10 +12624.999988 + 20 +13585.494518 + 30 +0.0 + 11 +12656.249988 + 21 +13639.621106 + 31 +0.0 + 0 +LINE + 5 +19BF + 8 +0 + 62 + 0 + 10 +12437.499988 + 20 +13368.988167 + 30 +0.0 + 11 +12468.749988 + 21 +13423.114755 + 31 +0.0 + 0 +LINE + 5 +19C0 + 8 +0 + 62 + 0 + 10 +12531.249988 + 20 +13531.367931 + 30 +0.0 + 11 +12562.499988 + 21 +13585.494518 + 31 +0.0 + 0 +LINE + 5 +19C1 + 8 +0 + 62 + 0 + 10 +12624.999988 + 20 +13693.747694 + 30 +0.0 + 11 +12628.609759 + 21 +13700.0 + 31 +0.0 + 0 +LINE + 5 +19C2 + 8 +0 + 62 + 0 + 10 +12343.749988 + 20 +13314.861579 + 30 +0.0 + 11 +12374.999988 + 21 +13368.988167 + 31 +0.0 + 0 +LINE + 5 +19C3 + 8 +0 + 62 + 0 + 10 +12437.499988 + 20 +13477.241343 + 30 +0.0 + 11 +12468.749988 + 21 +13531.36793 + 31 +0.0 + 0 +LINE + 5 +19C4 + 8 +0 + 62 + 0 + 10 +12531.249988 + 20 +13639.621106 + 30 +0.0 + 11 +12562.499988 + 21 +13693.747694 + 31 +0.0 + 0 +LINE + 5 +19C5 + 8 +0 + 62 + 0 + 10 +12258.406902 + 20 +13275.296193 + 30 +0.0 + 11 +12281.249989 + 21 +13314.861579 + 31 +0.0 + 0 +LINE + 5 +19C6 + 8 +0 + 62 + 0 + 10 +12343.749989 + 20 +13423.114755 + 30 +0.0 + 11 +12374.999989 + 21 +13477.241343 + 31 +0.0 + 0 +LINE + 5 +19C7 + 8 +0 + 62 + 0 + 10 +12437.499989 + 20 +13585.494518 + 30 +0.0 + 11 +12468.749989 + 21 +13639.621106 + 31 +0.0 + 0 +LINE + 5 +19C8 + 8 +0 + 62 + 0 + 10 +12249.999989 + 20 +13368.988167 + 30 +0.0 + 11 +12281.249989 + 21 +13423.114755 + 31 +0.0 + 0 +LINE + 5 +19C9 + 8 +0 + 62 + 0 + 10 +12343.749989 + 20 +13531.36793 + 30 +0.0 + 11 +12374.999989 + 21 +13585.494518 + 31 +0.0 + 0 +LINE + 5 +19CA + 8 +0 + 62 + 0 + 10 +12437.499989 + 20 +13693.747693 + 30 +0.0 + 11 +12441.10976 + 21 +13700.0 + 31 +0.0 + 0 +LINE + 5 +19CB + 8 +0 + 62 + 0 + 10 +12156.249989 + 20 +13314.861579 + 30 +0.0 + 11 +12187.499989 + 21 +13368.988167 + 31 +0.0 + 0 +LINE + 5 +19CC + 8 +0 + 62 + 0 + 10 +12249.999989 + 20 +13477.241342 + 30 +0.0 + 11 +12281.249989 + 21 +13531.36793 + 31 +0.0 + 0 +LINE + 5 +19CD + 8 +0 + 62 + 0 + 10 +12343.749989 + 20 +13639.621106 + 30 +0.0 + 11 +12374.999989 + 21 +13693.747693 + 31 +0.0 + 0 +LINE + 5 +19CE + 8 +0 + 62 + 0 + 10 +12070.887741 + 20 +13275.263004 + 30 +0.0 + 11 +12093.749989 + 21 +13314.861579 + 31 +0.0 + 0 +LINE + 5 +19CF + 8 +0 + 62 + 0 + 10 +12156.249989 + 20 +13423.114754 + 30 +0.0 + 11 +12187.499989 + 21 +13477.241342 + 31 +0.0 + 0 +LINE + 5 +19D0 + 8 +0 + 62 + 0 + 10 +12249.999989 + 20 +13585.494518 + 30 +0.0 + 11 +12281.249989 + 21 +13639.621105 + 31 +0.0 + 0 +LINE + 5 +19D1 + 8 +0 + 62 + 0 + 10 +12062.499989 + 20 +13368.988167 + 30 +0.0 + 11 +12093.749989 + 21 +13423.114754 + 31 +0.0 + 0 +LINE + 5 +19D2 + 8 +0 + 62 + 0 + 10 +12156.249989 + 20 +13531.36793 + 30 +0.0 + 11 +12187.499989 + 21 +13585.494518 + 31 +0.0 + 0 +LINE + 5 +19D3 + 8 +0 + 62 + 0 + 10 +12249.999989 + 20 +13693.747693 + 30 +0.0 + 11 +12253.60976 + 21 +13700.0 + 31 +0.0 + 0 +LINE + 5 +19D4 + 8 +0 + 62 + 0 + 10 +11968.74999 + 20 +13314.861579 + 30 +0.0 + 11 +11999.99999 + 21 +13368.988167 + 31 +0.0 + 0 +LINE + 5 +19D5 + 8 +0 + 62 + 0 + 10 +12062.49999 + 20 +13477.241342 + 30 +0.0 + 11 +12093.74999 + 21 +13531.36793 + 31 +0.0 + 0 +LINE + 5 +19D6 + 8 +0 + 62 + 0 + 10 +12156.24999 + 20 +13639.621105 + 30 +0.0 + 11 +12187.49999 + 21 +13693.747693 + 31 +0.0 + 0 +LINE + 5 +19D7 + 8 +0 + 62 + 0 + 10 +11883.368581 + 20 +13275.229816 + 30 +0.0 + 11 +11906.24999 + 21 +13314.861579 + 31 +0.0 + 0 +LINE + 5 +19D8 + 8 +0 + 62 + 0 + 10 +11968.74999 + 20 +13423.114754 + 30 +0.0 + 11 +11999.99999 + 21 +13477.241342 + 31 +0.0 + 0 +LINE + 5 +19D9 + 8 +0 + 62 + 0 + 10 +12062.49999 + 20 +13585.494517 + 30 +0.0 + 11 +12093.74999 + 21 +13639.621105 + 31 +0.0 + 0 +LINE + 5 +19DA + 8 +0 + 62 + 0 + 10 +11874.99999 + 20 +13368.988166 + 30 +0.0 + 11 +11906.24999 + 21 +13423.114754 + 31 +0.0 + 0 +LINE + 5 +19DB + 8 +0 + 62 + 0 + 10 +11968.74999 + 20 +13531.367929 + 30 +0.0 + 11 +11999.99999 + 21 +13585.494517 + 31 +0.0 + 0 +LINE + 5 +19DC + 8 +0 + 62 + 0 + 10 +12062.49999 + 20 +13693.747693 + 30 +0.0 + 11 +12066.109761 + 21 +13700.0 + 31 +0.0 + 0 +LINE + 5 +19DD + 8 +0 + 62 + 0 + 10 +11781.24999 + 20 +13314.861578 + 30 +0.0 + 11 +11812.49999 + 21 +13368.988166 + 31 +0.0 + 0 +LINE + 5 +19DE + 8 +0 + 62 + 0 + 10 +11874.99999 + 20 +13477.241342 + 30 +0.0 + 11 +11906.24999 + 21 +13531.367929 + 31 +0.0 + 0 +LINE + 5 +19DF + 8 +0 + 62 + 0 + 10 +11968.74999 + 20 +13639.621105 + 30 +0.0 + 11 +11999.99999 + 21 +13693.747693 + 31 +0.0 + 0 +LINE + 5 +19E0 + 8 +0 + 62 + 0 + 10 +11695.84942 + 20 +13275.196627 + 30 +0.0 + 11 +11718.74999 + 21 +13314.861578 + 31 +0.0 + 0 +LINE + 5 +19E1 + 8 +0 + 62 + 0 + 10 +11781.24999 + 20 +13423.114754 + 30 +0.0 + 11 +11812.49999 + 21 +13477.241342 + 31 +0.0 + 0 +LINE + 5 +19E2 + 8 +0 + 62 + 0 + 10 +11874.99999 + 20 +13585.494517 + 30 +0.0 + 11 +11906.24999 + 21 +13639.621105 + 31 +0.0 + 0 +LINE + 5 +19E3 + 8 +0 + 62 + 0 + 10 +11687.499991 + 20 +13368.988166 + 30 +0.0 + 11 +11718.749991 + 21 +13423.114754 + 31 +0.0 + 0 +LINE + 5 +19E4 + 8 +0 + 62 + 0 + 10 +11781.249991 + 20 +13531.367929 + 30 +0.0 + 11 +11812.499991 + 21 +13585.494517 + 31 +0.0 + 0 +LINE + 5 +19E5 + 8 +0 + 62 + 0 + 10 +11874.999991 + 20 +13693.747692 + 30 +0.0 + 11 +11878.609762 + 21 +13700.0 + 31 +0.0 + 0 +LINE + 5 +19E6 + 8 +0 + 62 + 0 + 10 +11593.749991 + 20 +13314.861578 + 30 +0.0 + 11 +11624.999991 + 21 +13368.988166 + 31 +0.0 + 0 +LINE + 5 +19E7 + 8 +0 + 62 + 0 + 10 +11687.499991 + 20 +13477.241341 + 30 +0.0 + 11 +11718.749991 + 21 +13531.367929 + 31 +0.0 + 0 +LINE + 5 +19E8 + 8 +0 + 62 + 0 + 10 +11781.249991 + 20 +13639.621104 + 30 +0.0 + 11 +11812.499991 + 21 +13693.747692 + 31 +0.0 + 0 +LINE + 5 +19E9 + 8 +0 + 62 + 0 + 10 +11593.749991 + 20 +13423.114753 + 30 +0.0 + 11 +11624.999991 + 21 +13477.241341 + 31 +0.0 + 0 +LINE + 5 +19EA + 8 +0 + 62 + 0 + 10 +11687.499991 + 20 +13585.494517 + 30 +0.0 + 11 +11718.749991 + 21 +13639.621104 + 31 +0.0 + 0 +LINE + 5 +19EB + 8 +0 + 62 + 0 + 10 +11593.749991 + 20 +13531.367929 + 30 +0.0 + 11 +11624.999991 + 21 +13585.494517 + 31 +0.0 + 0 +LINE + 5 +19EC + 8 +0 + 62 + 0 + 10 +11687.499991 + 20 +13693.747692 + 30 +0.0 + 11 +11691.109763 + 21 +13700.0 + 31 +0.0 + 0 +LINE + 5 +19ED + 8 +0 + 62 + 0 + 10 +11593.749991 + 20 +13639.621104 + 30 +0.0 + 11 +11624.999991 + 21 +13693.747692 + 31 +0.0 + 0 +LINE + 5 +19EE + 8 +0 + 62 + 0 + 10 +12785.660172 + 20 +12850.0 + 30 +0.0 + 11 +13185.660172 + 21 +13250.0 + 31 +0.0 + 0 +LINE + 5 +19EF + 8 +0 + 62 + 0 + 10 +11725.0 + 20 +12850.0 + 30 +0.0 + 11 +12125.0 + 21 +13250.0 + 31 +0.0 + 0 +LINE + 5 +19F0 + 8 +0 + 62 + 0 + 10 +13315.990257 + 20 +12850.0 + 30 +0.0 + 11 +13405.776502 + 21 +12939.786245 + 31 +0.0 + 0 +LINE + 5 +19F1 + 8 +0 + 62 + 0 + 10 +13538.359024 + 20 +13072.368767 + 30 +0.0 + 11 +13605.0 + 21 +13139.009743 + 31 +0.0 + 0 +LINE + 5 +19F2 + 8 +0 + 62 + 0 + 10 +12255.330085 + 20 +12850.0 + 30 +0.0 + 11 +12477.698852 + 21 +13072.368767 + 31 +0.0 + 0 +LINE + 5 +19F3 + 8 +0 + 62 + 0 + 10 +12610.281373 + 20 +13204.951288 + 30 +0.0 + 11 +12655.330085 + 21 +13250.0 + 31 +0.0 + 0 +POLYLINE + 5 +19F4 + 8 +DECKEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +28B3 + 8 +DECKEN + 10 +13605.0 + 20 +13775.0 + 30 +0.0 + 0 +VERTEX + 5 +28B4 + 8 +DECKEN + 10 +11555.0 + 20 +13775.0 + 30 +0.0 + 0 +SEQEND + 5 +28B5 + 8 +DECKEN + 0 +POLYLINE + 5 +19F8 + 8 +DECKEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +28B6 + 8 +DECKEN + 10 +13605.0 + 20 +13700.0 + 30 +0.0 + 0 +VERTEX + 5 +28B7 + 8 +DECKEN + 10 +11555.0 + 20 +13700.0 + 30 +0.0 + 0 +SEQEND + 5 +28B8 + 8 +DECKEN + 0 +POLYLINE + 5 +19FC + 8 +DECKEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +28B9 + 8 +DECKEN + 10 +13605.0 + 20 +13250.0 + 30 +0.0 + 0 +VERTEX + 5 +28BA + 8 +DECKEN + 10 +11555.0 + 20 +13250.0 + 30 +0.0 + 0 +SEQEND + 5 +28BB + 8 +DECKEN + 0 +POLYLINE + 5 +1A00 + 8 +PE-FOLIE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +28BC + 8 +PE-FOLIE + 10 +11555.0 + 20 +13262.660165 + 30 +0.0 + 0 +VERTEX + 5 +28BD + 8 +PE-FOLIE + 10 +13605.0 + 20 +13262.869635 + 30 +0.0 + 0 +SEQEND + 5 +28BE + 8 +PE-FOLIE + 0 +POLYLINE + 5 +1A04 + 8 +DECKEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +28BF + 8 +DECKEN + 10 +11555.0 + 20 +13275.171698 + 30 +0.0 + 0 +VERTEX + 5 +28C0 + 8 +DECKEN + 10 +13605.0 + 20 +13275.534523 + 30 +0.0 + 0 +SEQEND + 5 +28C1 + 8 +DECKEN + 0 +POLYLINE + 5 +1A08 + 8 +DECKEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +28C2 + 8 +DECKEN + 10 +11555.0 + 20 +12850.0 + 30 +0.0 + 0 +VERTEX + 5 +28C3 + 8 +DECKEN + 10 +13605.0 + 20 +12850.0 + 30 +0.0 + 0 +SEQEND + 5 +28C4 + 8 +DECKEN + 0 +POLYLINE + 5 +1A0C + 8 +DECKEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +28C5 + 8 +DECKEN + 10 +11555.0 + 20 +13700.0 + 30 +0.0 + 0 +VERTEX + 5 +28C6 + 8 +DECKEN + 10 +13605.0 + 20 +13700.0 + 30 +0.0 + 0 +SEQEND + 5 +28C7 + 8 +DECKEN + 0 +POLYLINE + 5 +1A10 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +28C8 + 8 +DETAILS + 10 +11955.0 + 20 +13775.0 + 30 +0.0 + 0 +VERTEX + 5 +28C9 + 8 +DETAILS + 10 +11955.0 + 20 +13705.0 + 30 +0.0 + 0 +SEQEND + 5 +28CA + 8 +DETAILS + 0 +POLYLINE + 5 +1A14 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +28CB + 8 +DETAILS + 10 +12455.0 + 20 +13775.0 + 30 +0.0 + 0 +VERTEX + 5 +28CC + 8 +DETAILS + 10 +12455.0 + 20 +13705.0 + 30 +0.0 + 0 +SEQEND + 5 +28CD + 8 +DETAILS + 0 +POLYLINE + 5 +1A18 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +28CE + 8 +DETAILS + 10 +12955.0 + 20 +13775.0 + 30 +0.0 + 0 +VERTEX + 5 +28CF + 8 +DETAILS + 10 +12955.0 + 20 +13705.0 + 30 +0.0 + 0 +SEQEND + 5 +28D0 + 8 +DETAILS + 0 +POLYLINE + 5 +1A1C + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +28D1 + 8 +DETAILS + 10 +13455.0 + 20 +13775.0 + 30 +0.0 + 0 +VERTEX + 5 +28D2 + 8 +DETAILS + 10 +13455.0 + 20 +13705.0 + 30 +0.0 + 0 +SEQEND + 5 +28D3 + 8 +DETAILS + 0 +POLYLINE + 5 +1A20 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1A21 + 8 +DETAILS + 10 +11890.0 + 20 +13705.0 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A22 + 8 +DETAILS + 10 +11890.0 + 20 +13705.0 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A23 + 8 +DETAILS + 10 +11894.188794 + 20 +13710.344564 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A24 + 8 +DETAILS + 10 +11898.066408 + 20 +13715.005599 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A25 + 8 +DETAILS + 10 +11901.713079 + 20 +13719.023527 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A26 + 8 +DETAILS + 10 +11905.209046 + 20 +13722.438772 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A27 + 8 +DETAILS + 10 +11908.634546 + 20 +13725.291756 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A28 + 8 +DETAILS + 10 +11912.069816 + 20 +13727.622902 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A29 + 8 +DETAILS + 10 +11915.595095 + 20 +13729.472632 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A2A + 8 +DETAILS + 10 +11919.290621 + 20 +13730.88137 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A2B + 8 +DETAILS + 10 +11923.205515 + 20 +13731.897403 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A2C + 8 +DETAILS + 10 +11927.264437 + 20 +13732.600491 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A2D + 8 +DETAILS + 10 +11931.360931 + 20 +13733.078257 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A2E + 8 +DETAILS + 10 +11935.388541 + 20 +13733.418327 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A2F + 8 +DETAILS + 10 +11939.240811 + 20 +13733.708323 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A30 + 8 +DETAILS + 10 +11942.811284 + 20 +13734.035871 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A31 + 8 +DETAILS + 10 +11945.993506 + 20 +13734.488595 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A32 + 8 +DETAILS + 10 +11948.681019 + 20 +13735.15412 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A33 + 8 +DETAILS + 10 +11901.656347 + 20 +13720.199473 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A34 + 8 +DETAILS + 10 +11916.618791 + 20 +13735.15412 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A35 + 8 +DETAILS + 10 +11942.268556 + 20 +13733.017765 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A36 + 8 +DETAILS + 10 +11948.681019 + 20 +13735.15412 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1A37 + 8 +DETAILS + 0 +POLYLINE + 5 +1A38 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1A39 + 8 +DETAILS + 10 +11824.706963 + 20 +13711.653945 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A3A + 8 +DETAILS + 10 +11824.706963 + 20 +13711.653945 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A3B + 8 +DETAILS + 10 +11836.291966 + 20 +13722.373399 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A3C + 8 +DETAILS + 10 +11848.453085 + 20 +13730.914744 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A3D + 8 +DETAILS + 10 +11860.964881 + 20 +13737.903875 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A3E + 8 +DETAILS + 10 +11873.601919 + 20 +13743.966685 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A3F + 8 +DETAILS + 10 +11886.13876 + 20 +13749.729068 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A40 + 8 +DETAILS + 10 +11898.349969 + 20 +13755.816916 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A41 + 8 +DETAILS + 10 +11910.010106 + 20 +13762.856125 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A42 + 8 +DETAILS + 10 +11920.893737 + 20 +13771.472586 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A43 + 8 +DETAILS + 10 +11854.631763 + 20 +13743.699648 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A44 + 8 +DETAILS + 10 +11893.106455 + 20 +13745.836002 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A45 + 8 +DETAILS + 10 +11920.893737 + 20 +13771.472586 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1A46 + 8 +DETAILS + 0 +POLYLINE + 5 +1A47 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1A48 + 8 +DETAILS + 10 +11781.957237 + 20 +13707.381181 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A49 + 8 +DETAILS + 10 +11781.957237 + 20 +13707.381181 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A4A + 8 +DETAILS + 10 +11788.644191 + 20 +13716.832159 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A4B + 8 +DETAILS + 10 +11794.37303 + 20 +13724.505602 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A4C + 8 +DETAILS + 10 +11799.287786 + 20 +13730.626832 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A4D + 8 +DETAILS + 10 +11803.532488 + 20 +13735.42117 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A4E + 8 +DETAILS + 10 +11807.251167 + 20 +13739.113937 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A4F + 8 +DETAILS + 10 +11810.587853 + 20 +13741.930455 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A50 + 8 +DETAILS + 10 +11813.686577 + 20 +13744.096044 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A51 + 8 +DETAILS + 10 +11816.691369 + 20 +13745.836025 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A52 + 8 +DETAILS + 10 +11819.719124 + 20 +13747.343382 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A53 + 8 +DETAILS + 10 +11822.778191 + 20 +13748.681748 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A54 + 8 +DETAILS + 10 +11825.849784 + 20 +13749.882417 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A55 + 8 +DETAILS + 10 +11828.915115 + 20 +13750.976684 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A56 + 8 +DETAILS + 10 +11831.955398 + 20 +13751.995843 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A57 + 8 +DETAILS + 10 +11834.951846 + 20 +13752.97119 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A58 + 8 +DETAILS + 10 +11837.885673 + 20 +13753.934018 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A59 + 8 +DETAILS + 10 +11840.738092 + 20 +13754.915623 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A5A + 8 +DETAILS + 10 +11843.487185 + 20 +13755.943127 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A5B + 8 +DETAILS + 10 +11846.09851 + 20 +13757.026961 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A5C + 8 +DETAILS + 10 +11848.534492 + 20 +13758.173384 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A5D + 8 +DETAILS + 10 +11850.757559 + 20 +13759.388656 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A5E + 8 +DETAILS + 10 +11852.730136 + 20 +13760.679036 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A5F + 8 +DETAILS + 10 +11854.414649 + 20 +13762.050782 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A60 + 8 +DETAILS + 10 +11855.773526 + 20 +13763.510155 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A61 + 8 +DETAILS + 10 +11856.769192 + 20 +13765.063412 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A62 + 8 +DETAILS + 10 +11801.194627 + 20 +13735.15412 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A63 + 8 +DETAILS + 10 +11816.156983 + 20 +13747.972412 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A64 + 8 +DETAILS + 10 +11841.806836 + 20 +13754.38153 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A65 + 8 +DETAILS + 10 +11854.631763 + 20 +13760.790648 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A66 + 8 +DETAILS + 10 +11856.769192 + 20 +13765.063412 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1A67 + 8 +DETAILS + 0 +POLYLINE + 5 +1A68 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1A69 + 8 +DETAILS + 10 +11705.007765 + 20 +13705.244827 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A6A + 8 +DETAILS + 10 +11705.007765 + 20 +13705.244827 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A6B + 8 +DETAILS + 10 +11714.234036 + 20 +13713.343865 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A6C + 8 +DETAILS + 10 +11725.514287 + 20 +13721.568084 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A6D + 8 +DETAILS + 10 +11738.297451 + 20 +13729.842376 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A6E + 8 +DETAILS + 10 +11752.03246 + 20 +13738.091635 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A6F + 8 +DETAILS + 10 +11766.168245 + 20 +13746.240751 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A70 + 8 +DETAILS + 10 +11780.153737 + 20 +13754.214619 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A71 + 8 +DETAILS + 10 +11793.43787 + 20 +13761.93813 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A72 + 8 +DETAILS + 10 +11805.469573 + 20 +13769.336176 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A73 + 8 +DETAILS + 10 +11726.382672 + 20 +13726.608592 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A74 + 8 +DETAILS + 10 +11775.544774 + 20 +13750.108766 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A75 + 8 +DETAILS + 10 +11805.469573 + 20 +13769.336176 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1A76 + 8 +DETAILS + 0 +POLYLINE + 5 +1A77 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1A78 + 8 +DETAILS + 10 +11649.433201 + 20 +13711.653945 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A79 + 8 +DETAILS + 10 +11649.433201 + 20 +13711.653945 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A7A + 8 +DETAILS + 10 +11661.097526 + 20 +13721.146648 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A7B + 8 +DETAILS + 10 +11673.413115 + 20 +13729.112172 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A7C + 8 +DETAILS + 10 +11686.029285 + 20 +13736.026196 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A7D + 8 +DETAILS + 10 +11698.595357 + 20 +13742.364399 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A7E + 8 +DETAILS + 10 +11710.760649 + 20 +13748.60246 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A7F + 8 +DETAILS + 10 +11722.174478 + 20 +13755.216059 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A80 + 8 +DETAILS + 10 +11732.486165 + 20 +13762.680875 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A81 + 8 +DETAILS + 10 +11741.345028 + 20 +13771.472586 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A82 + 8 +DETAILS + 10 +11679.358 + 20 +13739.426884 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A83 + 8 +DETAILS + 10 +11719.970209 + 20 +13745.836002 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A84 + 8 +DETAILS + 10 +11741.345028 + 20 +13771.472586 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1A85 + 8 +DETAILS + 0 +POLYLINE + 5 +1A86 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1A87 + 8 +DETAILS + 10 +11587.446173 + 20 +13703.108417 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A88 + 8 +DETAILS + 10 +11587.446173 + 20 +13703.108417 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A89 + 8 +DETAILS + 10 +11593.758429 + 20 +13712.518711 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A8A + 8 +DETAILS + 10 +11599.870294 + 20 +13720.107657 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A8B + 8 +DETAILS + 10 +11605.781768 + 20 +13726.156908 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A8C + 8 +DETAILS + 10 +11611.492852 + 20 +13730.948113 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A8D + 8 +DETAILS + 10 +11617.003548 + 20 +13734.762927 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A8E + 8 +DETAILS + 10 +11622.313854 + 20 +13737.883 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A8F + 8 +DETAILS + 10 +11627.423774 + 20 +13740.589984 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A90 + 8 +DETAILS + 10 +11632.333306 + 20 +13743.165531 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A91 + 8 +DETAILS + 10 +11637.042452 + 20 +13745.85374 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A92 + 8 +DETAILS + 10 +11641.551211 + 20 +13748.748494 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A93 + 8 +DETAILS + 10 +11645.859581 + 20 +13751.906123 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A94 + 8 +DETAILS + 10 +11649.967561 + 20 +13755.382956 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A95 + 8 +DETAILS + 10 +11653.87515 + 20 +13759.235325 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A96 + 8 +DETAILS + 10 +11657.582346 + 20 +13763.519559 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A97 + 8 +DETAILS + 10 +11661.089149 + 20 +13768.291987 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A98 + 8 +DETAILS + 10 +11664.395556 + 20 +13773.60894 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A99 + 8 +DETAILS + 10 +11604.546046 + 20 +13730.881356 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A9A + 8 +DETAILS + 10 +11634.470757 + 20 +13741.563238 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A9B + 8 +DETAILS + 10 +11655.845664 + 20 +13758.654294 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A9C + 8 +DETAILS + 10 +11664.395556 + 20 +13773.60894 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1A9D + 8 +DETAILS + 0 +POLYLINE + 5 +1A9E + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1A9F + 8 +DETAILS + 10 +11563.933837 + 20 +13739.426884 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1AA0 + 8 +DETAILS + 10 +11563.933837 + 20 +13739.426884 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AA1 + 8 +DETAILS + 10 +11568.250531 + 20 +13740.883128 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AA2 + 8 +DETAILS + 10 +11572.016161 + 20 +13742.264266 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AA3 + 8 +DETAILS + 10 +11575.881991 + 20 +13743.895759 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AA4 + 8 +DETAILS + 10 +11580.499286 + 20 +13746.103074 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AA5 + 8 +DETAILS + 10 +11586.51931 + 20 +13749.211673 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AA6 + 8 +DETAILS + 10 +11594.593328 + 20 +13753.547022 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AA7 + 8 +DETAILS + 10 +11605.372603 + 20 +13759.434583 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AA8 + 8 +DETAILS + 10 +11619.508401 + 20 +13767.199822 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AA9 + 8 +DETAILS + 10 +11576.758675 + 20 +13743.699648 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1AAA + 8 +DETAILS + 10 +11619.508401 + 20 +13767.199822 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1AAB + 8 +DETAILS + 0 +POLYLINE + 5 +1AAC + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1AAD + 8 +DETAILS + 10 +12406.102815 + 20 +13703.108417 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1AAE + 8 +DETAILS + 10 +12406.102815 + 20 +13703.108417 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AAF + 8 +DETAILS + 10 +12411.797206 + 20 +13712.325728 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AB0 + 8 +DETAILS + 10 +12416.389457 + 20 +13719.565218 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AB1 + 8 +DETAILS + 10 +12420.380539 + 20 +13725.45278 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AB2 + 8 +DETAILS + 10 +12424.271425 + 20 +13730.614305 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AB3 + 8 +DETAILS + 10 +12428.563087 + 20 +13735.675685 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AB4 + 8 +DETAILS + 10 +12433.756497 + 20 +13741.262814 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AB5 + 8 +DETAILS + 10 +12440.352629 + 20 +13748.001583 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AB6 + 8 +DETAILS + 10 +12448.852453 + 20 +13756.517884 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AB7 + 8 +DETAILS + 10 +12423.202688 + 20 +13730.881356 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1AB8 + 8 +DETAILS + 10 +12448.852453 + 20 +13756.517884 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1AB9 + 8 +DETAILS + 0 +POLYLINE + 5 +1ABA + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1ABB + 8 +DETAILS + 10 +12324.878397 + 20 +13703.108417 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1ABC + 8 +DETAILS + 10 +12324.878397 + 20 +13703.108417 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1ABD + 8 +DETAILS + 10 +12327.77465 + 20 +13709.559281 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1ABE + 8 +DETAILS + 10 +12331.616488 + 20 +13714.658217 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1ABF + 8 +DETAILS + 10 +12336.347553 + 20 +13718.655583 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AC0 + 8 +DETAILS + 10 +12341.911484 + 20 +13721.801736 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AC1 + 8 +DETAILS + 10 +12348.251922 + 20 +13724.347033 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AC2 + 8 +DETAILS + 10 +12355.312509 + 20 +13726.54183 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AC3 + 8 +DETAILS + 10 +12363.036885 + 20 +13728.636486 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AC4 + 8 +DETAILS + 10 +12371.36869 + 20 +13730.881356 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AC5 + 8 +DETAILS + 10 +12380.201469 + 20 +13733.497589 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AC6 + 8 +DETAILS + 10 +12389.228374 + 20 +13736.5895 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AC7 + 8 +DETAILS + 10 +12398.092463 + 20 +13740.232197 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AC8 + 8 +DETAILS + 10 +12406.436791 + 20 +13744.500784 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AC9 + 8 +DETAILS + 10 +12413.904416 + 20 +13749.470369 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1ACA + 8 +DETAILS + 10 +12420.138394 + 20 +13755.216059 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1ACB + 8 +DETAILS + 10 +12424.781781 + 20 +13761.812959 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1ACC + 8 +DETAILS + 10 +12427.477634 + 20 +13769.336176 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1ACD + 8 +DETAILS + 10 +12331.290861 + 20 +13722.335828 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1ACE + 8 +DETAILS + 10 +12365.490606 + 20 +13726.608592 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1ACF + 8 +DETAILS + 10 +12423.202688 + 20 +13747.972412 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1AD0 + 8 +DETAILS + 10 +12427.477634 + 20 +13769.336176 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1AD1 + 8 +DETAILS + 0 +POLYLINE + 5 +1AD2 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1AD3 + 8 +DETAILS + 10 +12269.303745 + 20 +13707.381181 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1AD4 + 8 +DETAILS + 10 +12269.303745 + 20 +13707.381181 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AD5 + 8 +DETAILS + 10 +12277.74201 + 20 +13715.429115 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AD6 + 8 +DETAILS + 10 +12285.510224 + 20 +13722.093827 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AD7 + 8 +DETAILS + 10 +12292.739892 + 20 +13727.59438 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AD8 + 8 +DETAILS + 10 +12299.56252 + 20 +13732.149835 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AD9 + 8 +DETAILS + 10 +12306.109613 + 20 +13735.979255 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1ADA + 8 +DETAILS + 10 +12312.512675 + 20 +13739.301703 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1ADB + 8 +DETAILS + 10 +12318.903214 + 20 +13742.336239 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1ADC + 8 +DETAILS + 10 +12325.412733 + 20 +13745.301927 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1ADD + 8 +DETAILS + 10 +12332.114291 + 20 +13748.367758 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1ADE + 8 +DETAILS + 10 +12338.847159 + 20 +13751.502436 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1ADF + 8 +DETAILS + 10 +12345.392162 + 20 +13754.624596 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AE0 + 8 +DETAILS + 10 +12351.530124 + 20 +13757.652873 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AE1 + 8 +DETAILS + 10 +12357.041868 + 20 +13760.505899 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AE2 + 8 +DETAILS + 10 +12361.708218 + 20 +13763.10231 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AE3 + 8 +DETAILS + 10 +12365.309999 + 20 +13765.36074 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AE4 + 8 +DETAILS + 10 +12367.628035 + 20 +13767.199822 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AE5 + 8 +DETAILS + 10 +12292.816081 + 20 +13730.881356 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1AE6 + 8 +DETAILS + 10 +12322.74088 + 20 +13743.699648 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1AE7 + 8 +DETAILS + 10 +12363.353089 + 20 +13762.927058 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1AE8 + 8 +DETAILS + 10 +12367.628035 + 20 +13767.199822 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1AE9 + 8 +DETAILS + 0 +POLYLINE + 5 +1AEA + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1AEB + 8 +DETAILS + 10 +12209.454146 + 20 +13707.381181 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1AEC + 8 +DETAILS + 10 +12209.454146 + 20 +13707.381181 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AED + 8 +DETAILS + 10 +12216.567971 + 20 +13714.108481 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AEE + 8 +DETAILS + 10 +12223.481404 + 20 +13719.940755 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AEF + 8 +DETAILS + 10 +12230.194447 + 20 +13724.984405 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AF0 + 8 +DETAILS + 10 +12236.707098 + 20 +13729.345834 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AF1 + 8 +DETAILS + 10 +12243.01936 + 20 +13733.131441 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AF2 + 8 +DETAILS + 10 +12249.131232 + 20 +13736.44763 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AF3 + 8 +DETAILS + 10 +12255.042714 + 20 +13739.4008 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AF4 + 8 +DETAILS + 10 +12260.753808 + 20 +13742.097354 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AF5 + 8 +DETAILS + 10 +12266.256164 + 20 +13744.652039 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AF6 + 8 +DETAILS + 10 +12271.508035 + 20 +13747.212982 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AF7 + 8 +DETAILS + 10 +12276.459322 + 20 +13749.936657 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AF8 + 8 +DETAILS + 10 +12281.059929 + 20 +13752.979537 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AF9 + 8 +DETAILS + 10 +12285.259758 + 20 +13756.498097 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AFA + 8 +DETAILS + 10 +12289.00871 + 20 +13760.648809 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AFB + 8 +DETAILS + 10 +12292.25669 + 20 +13765.588148 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AFC + 8 +DETAILS + 10 +12294.953598 + 20 +13771.472586 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AFD + 8 +DETAILS + 10 +12228.691536 + 20 +13726.608592 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1AFE + 8 +DETAILS + 10 +12262.891281 + 20 +13743.699648 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1AFF + 8 +DETAILS + 10 +12288.541135 + 20 +13754.38153 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B00 + 8 +DETAILS + 10 +12294.953598 + 20 +13771.472586 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1B01 + 8 +DETAILS + 0 +POLYLINE + 5 +1B02 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1B03 + 8 +DETAILS + 10 +12153.879581 + 20 +13703.108417 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B04 + 8 +DETAILS + 10 +12153.879581 + 20 +13703.108417 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B05 + 8 +DETAILS + 10 +12157.937458 + 20 +13713.127923 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B06 + 8 +DETAILS + 10 +12162.09553 + 20 +13720.975579 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B07 + 8 +DETAILS + 10 +12166.353798 + 20 +13726.983107 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B08 + 8 +DETAILS + 10 +12170.712261 + 20 +13731.482233 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B09 + 8 +DETAILS + 10 +12175.17092 + 20 +13734.804679 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B0A + 8 +DETAILS + 10 +12179.729773 + 20 +13737.282169 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B0B + 8 +DETAILS + 10 +12184.388821 + 20 +13739.246428 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B0C + 8 +DETAILS + 10 +12189.148063 + 20 +13741.029177 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B0D + 8 +DETAILS + 10 +12194.0075 + 20 +13742.920415 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B0E + 8 +DETAILS + 10 +12198.967131 + 20 +13745.043234 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B0F + 8 +DETAILS + 10 +12204.026958 + 20 +13747.478999 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B10 + 8 +DETAILS + 10 +12209.186981 + 20 +13750.309077 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B11 + 8 +DETAILS + 10 +12214.447201 + 20 +13753.614832 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B12 + 8 +DETAILS + 10 +12219.807619 + 20 +13757.477631 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B13 + 8 +DETAILS + 10 +12225.268236 + 20 +13761.978839 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B14 + 8 +DETAILS + 10 +12230.829053 + 20 +13767.199822 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B15 + 8 +DETAILS + 10 +12164.566991 + 20 +13733.017765 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B16 + 8 +DETAILS + 10 +12188.079327 + 20 +13739.426884 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B17 + 8 +DETAILS + 10 +12215.866609 + 20 +13752.245176 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B18 + 8 +DETAILS + 10 +12230.829053 + 20 +13767.199822 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1B19 + 8 +DETAILS + 0 +POLYLINE + 5 +1B1A + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1B1B + 8 +DETAILS + 10 +12091.892553 + 20 +13705.244827 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B1C + 8 +DETAILS + 10 +12091.892553 + 20 +13705.244827 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B1D + 8 +DETAILS + 10 +12097.312442 + 20 +13714.469439 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B1E + 8 +DETAILS + 10 +12102.387913 + 20 +13721.559757 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B1F + 8 +DETAILS + 10 +12107.175327 + 20 +13726.885057 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B20 + 8 +DETAILS + 10 +12111.731043 + 20 +13730.814615 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B21 + 8 +DETAILS + 10 +12116.111419 + 20 +13733.717709 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B22 + 8 +DETAILS + 10 +12120.372816 + 20 +13735.963616 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B23 + 8 +DETAILS + 10 +12124.571592 + 20 +13737.921611 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B24 + 8 +DETAILS + 10 +12128.764107 + 20 +13739.960972 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B25 + 8 +DETAILS + 10 +12132.985846 + 20 +13742.388387 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B26 + 8 +DETAILS + 10 +12137.1888 + 20 +13745.260185 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B27 + 8 +DETAILS + 10 +12141.304084 + 20 +13748.57011 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B28 + 8 +DETAILS + 10 +12145.262814 + 20 +13752.311902 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B29 + 8 +DETAILS + 10 +12148.996108 + 20 +13756.479304 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B2A + 8 +DETAILS + 10 +12152.43508 + 20 +13761.066058 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B2B + 8 +DETAILS + 10 +12155.510848 + 20 +13766.065904 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B2C + 8 +DETAILS + 10 +12158.154527 + 20 +13771.472586 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B2D + 8 +DETAILS + 10 +12106.854909 + 20 +13733.017765 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B2E + 8 +DETAILS + 10 +12128.229728 + 20 +13735.15412 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B2F + 8 +DETAILS + 10 +12151.742064 + 20 +13756.517884 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B30 + 8 +DETAILS + 10 +12158.154527 + 20 +13771.472586 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1B31 + 8 +DETAILS + 0 +POLYLINE + 5 +1B32 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1B33 + 8 +DETAILS + 10 +12044.867881 + 20 +13709.517591 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B34 + 8 +DETAILS + 10 +12044.867881 + 20 +13709.517591 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B35 + 8 +DETAILS + 10 +12048.266133 + 20 +13716.809228 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B36 + 8 +DETAILS + 10 +12052.015072 + 20 +13722.786492 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B37 + 8 +DETAILS + 10 +12056.064599 + 20 +13727.637152 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B38 + 8 +DETAILS + 10 +12060.364616 + 20 +13731.548975 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B39 + 8 +DETAILS + 10 +12064.865025 + 20 +13734.709729 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B3A + 8 +DETAILS + 10 +12069.515729 + 20 +13737.307181 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B3B + 8 +DETAILS + 10 +12074.266629 + 20 +13739.5291 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B3C + 8 +DETAILS + 10 +12079.067626 + 20 +13741.563252 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B3D + 8 +DETAILS + 10 +12083.897848 + 20 +13743.58906 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B3E + 8 +DETAILS + 10 +12088.853311 + 20 +13745.752565 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B3F + 8 +DETAILS + 10 +12094.059258 + 20 +13748.191462 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B40 + 8 +DETAILS + 10 +12099.640932 + 20 +13751.043447 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B41 + 8 +DETAILS + 10 +12105.723573 + 20 +13754.446215 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B42 + 8 +DETAILS + 10 +12112.432425 + 20 +13758.537463 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B43 + 8 +DETAILS + 10 +12119.892729 + 20 +13763.454885 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B44 + 8 +DETAILS + 10 +12128.229728 + 20 +13769.336176 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B45 + 8 +DETAILS + 10 +12053.417773 + 20 +13730.881356 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B46 + 8 +DETAILS + 10 +12079.067626 + 20 +13741.563238 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B47 + 8 +DETAILS + 10 +12104.71748 + 20 +13752.245176 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B48 + 8 +DETAILS + 10 +12128.229728 + 20 +13769.336176 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1B49 + 8 +DETAILS + 0 +POLYLINE + 5 +1B4A + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1B4B + 8 +DETAILS + 10 +11989.293228 + 20 +13707.381181 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B4C + 8 +DETAILS + 10 +11989.293228 + 20 +13707.381181 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B4D + 8 +DETAILS + 10 +11995.563746 + 20 +13716.181229 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B4E + 8 +DETAILS + 10 +12004.188837 + 20 +13724.90617 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B4F + 8 +DETAILS + 10 +12014.316847 + 20 +13733.480897 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B50 + 8 +DETAILS + 10 +12025.096123 + 20 +13741.830303 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B51 + 8 +DETAILS + 10 +12035.67501 + 20 +13749.879282 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B52 + 8 +DETAILS + 10 +12045.201855 + 20 +13757.552727 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B53 + 8 +DETAILS + 10 +12052.825006 + 20 +13764.77553 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B54 + 8 +DETAILS + 10 +12057.692807 + 20 +13771.472586 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B55 + 8 +DETAILS + 10 +12002.118155 + 20 +13730.881356 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B56 + 8 +DETAILS + 10 +12049.142827 + 20 +13754.38153 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B57 + 8 +DETAILS + 10 +12057.692807 + 20 +13771.472586 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1B58 + 8 +DETAILS + 0 +POLYLINE + 5 +1B59 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +28D4 + 8 +DETAILS + 10 +11957.231 + 20 +13743.699648 + 30 +0.0 + 0 +VERTEX + 5 +28D5 + 8 +DETAILS + 10 +11997.843209 + 20 +13765.063412 + 30 +0.0 + 0 +VERTEX + 5 +28D6 + 8 +DETAILS + 10 +12002.118155 + 20 +13771.472586 + 30 +0.0 + 0 +SEQEND + 5 +28D7 + 8 +DETAILS + 0 +POLYLINE + 5 +1B5E + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1B5F + 8 +DETAILS + 10 +12653.879581 + 20 +13703.108417 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B60 + 8 +DETAILS + 10 +12653.879581 + 20 +13703.108417 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B61 + 8 +DETAILS + 10 +12657.937458 + 20 +13713.127923 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B62 + 8 +DETAILS + 10 +12662.09553 + 20 +13720.975579 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B63 + 8 +DETAILS + 10 +12666.353798 + 20 +13726.983107 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B64 + 8 +DETAILS + 10 +12670.712261 + 20 +13731.482233 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B65 + 8 +DETAILS + 10 +12675.17092 + 20 +13734.804679 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B66 + 8 +DETAILS + 10 +12679.729773 + 20 +13737.282169 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B67 + 8 +DETAILS + 10 +12684.388821 + 20 +13739.246428 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B68 + 8 +DETAILS + 10 +12689.148063 + 20 +13741.029177 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B69 + 8 +DETAILS + 10 +12694.0075 + 20 +13742.920415 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B6A + 8 +DETAILS + 10 +12698.967131 + 20 +13745.043234 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B6B + 8 +DETAILS + 10 +12704.026958 + 20 +13747.478999 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B6C + 8 +DETAILS + 10 +12709.186981 + 20 +13750.309077 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B6D + 8 +DETAILS + 10 +12714.447201 + 20 +13753.614832 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B6E + 8 +DETAILS + 10 +12719.807619 + 20 +13757.477631 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B6F + 8 +DETAILS + 10 +12725.268236 + 20 +13761.978839 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B70 + 8 +DETAILS + 10 +12730.829053 + 20 +13767.199822 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B71 + 8 +DETAILS + 10 +12664.566991 + 20 +13733.017765 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B72 + 8 +DETAILS + 10 +12688.079327 + 20 +13739.426884 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B73 + 8 +DETAILS + 10 +12715.866609 + 20 +13752.245176 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B74 + 8 +DETAILS + 10 +12730.829053 + 20 +13767.199822 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1B75 + 8 +DETAILS + 0 +POLYLINE + 5 +1B76 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1B77 + 8 +DETAILS + 10 +12591.892553 + 20 +13705.244827 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B78 + 8 +DETAILS + 10 +12591.892553 + 20 +13705.244827 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B79 + 8 +DETAILS + 10 +12597.312442 + 20 +13714.469439 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B7A + 8 +DETAILS + 10 +12602.387913 + 20 +13721.559757 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B7B + 8 +DETAILS + 10 +12607.175327 + 20 +13726.885057 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B7C + 8 +DETAILS + 10 +12611.731043 + 20 +13730.814615 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B7D + 8 +DETAILS + 10 +12616.111419 + 20 +13733.717709 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B7E + 8 +DETAILS + 10 +12620.372816 + 20 +13735.963616 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B7F + 8 +DETAILS + 10 +12624.571592 + 20 +13737.921611 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B80 + 8 +DETAILS + 10 +12628.764107 + 20 +13739.960972 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B81 + 8 +DETAILS + 10 +12632.985846 + 20 +13742.388387 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B82 + 8 +DETAILS + 10 +12637.1888 + 20 +13745.260185 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B83 + 8 +DETAILS + 10 +12641.304084 + 20 +13748.57011 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B84 + 8 +DETAILS + 10 +12645.262814 + 20 +13752.311902 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B85 + 8 +DETAILS + 10 +12648.996108 + 20 +13756.479304 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B86 + 8 +DETAILS + 10 +12652.43508 + 20 +13761.066058 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B87 + 8 +DETAILS + 10 +12655.510848 + 20 +13766.065904 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B88 + 8 +DETAILS + 10 +12658.154527 + 20 +13771.472586 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B89 + 8 +DETAILS + 10 +12606.854909 + 20 +13733.017765 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B8A + 8 +DETAILS + 10 +12628.229728 + 20 +13735.15412 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B8B + 8 +DETAILS + 10 +12651.742064 + 20 +13756.517884 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B8C + 8 +DETAILS + 10 +12658.154527 + 20 +13771.472586 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1B8D + 8 +DETAILS + 0 +POLYLINE + 5 +1B8E + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1B8F + 8 +DETAILS + 10 +12544.867881 + 20 +13709.517591 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B90 + 8 +DETAILS + 10 +12544.867881 + 20 +13709.517591 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B91 + 8 +DETAILS + 10 +12548.266133 + 20 +13716.809228 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B92 + 8 +DETAILS + 10 +12552.015072 + 20 +13722.786492 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B93 + 8 +DETAILS + 10 +12556.064599 + 20 +13727.637152 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B94 + 8 +DETAILS + 10 +12560.364616 + 20 +13731.548975 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B95 + 8 +DETAILS + 10 +12564.865025 + 20 +13734.709729 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B96 + 8 +DETAILS + 10 +12569.515729 + 20 +13737.307181 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B97 + 8 +DETAILS + 10 +12574.266629 + 20 +13739.5291 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B98 + 8 +DETAILS + 10 +12579.067626 + 20 +13741.563252 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B99 + 8 +DETAILS + 10 +12583.897848 + 20 +13743.58906 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B9A + 8 +DETAILS + 10 +12588.853311 + 20 +13745.752565 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B9B + 8 +DETAILS + 10 +12594.059258 + 20 +13748.191462 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B9C + 8 +DETAILS + 10 +12599.640932 + 20 +13751.043447 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B9D + 8 +DETAILS + 10 +12605.723573 + 20 +13754.446215 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B9E + 8 +DETAILS + 10 +12612.432425 + 20 +13758.537463 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B9F + 8 +DETAILS + 10 +12619.892729 + 20 +13763.454885 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BA0 + 8 +DETAILS + 10 +12628.229728 + 20 +13769.336176 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BA1 + 8 +DETAILS + 10 +12553.417773 + 20 +13730.881356 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1BA2 + 8 +DETAILS + 10 +12579.067626 + 20 +13741.563238 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1BA3 + 8 +DETAILS + 10 +12604.71748 + 20 +13752.245176 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1BA4 + 8 +DETAILS + 10 +12628.229728 + 20 +13769.336176 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1BA5 + 8 +DETAILS + 0 +POLYLINE + 5 +1BA6 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1BA7 + 8 +DETAILS + 10 +12489.293228 + 20 +13707.381181 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1BA8 + 8 +DETAILS + 10 +12489.293228 + 20 +13707.381181 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BA9 + 8 +DETAILS + 10 +12495.563746 + 20 +13716.181229 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BAA + 8 +DETAILS + 10 +12504.188837 + 20 +13724.90617 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BAB + 8 +DETAILS + 10 +12514.316847 + 20 +13733.480897 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BAC + 8 +DETAILS + 10 +12525.096123 + 20 +13741.830303 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BAD + 8 +DETAILS + 10 +12535.67501 + 20 +13749.879282 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BAE + 8 +DETAILS + 10 +12545.201855 + 20 +13757.552727 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BAF + 8 +DETAILS + 10 +12552.825006 + 20 +13764.77553 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BB0 + 8 +DETAILS + 10 +12557.692807 + 20 +13771.472586 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BB1 + 8 +DETAILS + 10 +12502.118155 + 20 +13730.881356 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1BB2 + 8 +DETAILS + 10 +12549.142827 + 20 +13754.38153 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1BB3 + 8 +DETAILS + 10 +12557.692807 + 20 +13771.472586 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1BB4 + 8 +DETAILS + 0 +POLYLINE + 5 +1BB5 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1BB6 + 8 +DETAILS + 10 +12824.878397 + 20 +13703.108417 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1BB7 + 8 +DETAILS + 10 +12824.878397 + 20 +13703.108417 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BB8 + 8 +DETAILS + 10 +12827.77465 + 20 +13709.559281 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BB9 + 8 +DETAILS + 10 +12831.616488 + 20 +13714.658217 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BBA + 8 +DETAILS + 10 +12836.347553 + 20 +13718.655583 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BBB + 8 +DETAILS + 10 +12841.911484 + 20 +13721.801736 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BBC + 8 +DETAILS + 10 +12848.251922 + 20 +13724.347033 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BBD + 8 +DETAILS + 10 +12855.312509 + 20 +13726.54183 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BBE + 8 +DETAILS + 10 +12863.036885 + 20 +13728.636486 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BBF + 8 +DETAILS + 10 +12871.36869 + 20 +13730.881356 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BC0 + 8 +DETAILS + 10 +12880.201469 + 20 +13733.497589 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BC1 + 8 +DETAILS + 10 +12889.228374 + 20 +13736.5895 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BC2 + 8 +DETAILS + 10 +12898.092463 + 20 +13740.232197 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BC3 + 8 +DETAILS + 10 +12906.436791 + 20 +13744.500784 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BC4 + 8 +DETAILS + 10 +12913.904416 + 20 +13749.470369 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BC5 + 8 +DETAILS + 10 +12920.138394 + 20 +13755.216059 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BC6 + 8 +DETAILS + 10 +12924.781781 + 20 +13761.812959 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BC7 + 8 +DETAILS + 10 +12927.477634 + 20 +13769.336176 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BC8 + 8 +DETAILS + 10 +12831.290861 + 20 +13722.335828 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1BC9 + 8 +DETAILS + 10 +12865.490606 + 20 +13726.608592 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1BCA + 8 +DETAILS + 10 +12923.202688 + 20 +13747.972412 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1BCB + 8 +DETAILS + 10 +12927.477634 + 20 +13769.336176 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1BCC + 8 +DETAILS + 0 +POLYLINE + 5 +1BCD + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1BCE + 8 +DETAILS + 10 +12769.303745 + 20 +13707.381181 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1BCF + 8 +DETAILS + 10 +12769.303745 + 20 +13707.381181 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BD0 + 8 +DETAILS + 10 +12777.74201 + 20 +13715.429115 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BD1 + 8 +DETAILS + 10 +12785.510224 + 20 +13722.093827 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BD2 + 8 +DETAILS + 10 +12792.739892 + 20 +13727.59438 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BD3 + 8 +DETAILS + 10 +12799.56252 + 20 +13732.149835 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BD4 + 8 +DETAILS + 10 +12806.109613 + 20 +13735.979255 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BD5 + 8 +DETAILS + 10 +12812.512675 + 20 +13739.301703 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BD6 + 8 +DETAILS + 10 +12818.903214 + 20 +13742.336239 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BD7 + 8 +DETAILS + 10 +12825.412733 + 20 +13745.301927 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BD8 + 8 +DETAILS + 10 +12832.114291 + 20 +13748.367758 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BD9 + 8 +DETAILS + 10 +12838.847159 + 20 +13751.502436 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BDA + 8 +DETAILS + 10 +12845.392162 + 20 +13754.624596 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BDB + 8 +DETAILS + 10 +12851.530124 + 20 +13757.652873 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BDC + 8 +DETAILS + 10 +12857.041868 + 20 +13760.505899 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BDD + 8 +DETAILS + 10 +12861.708218 + 20 +13763.10231 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BDE + 8 +DETAILS + 10 +12865.309999 + 20 +13765.36074 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BDF + 8 +DETAILS + 10 +12867.628035 + 20 +13767.199822 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BE0 + 8 +DETAILS + 10 +12792.816081 + 20 +13730.881356 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1BE1 + 8 +DETAILS + 10 +12822.74088 + 20 +13743.699648 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1BE2 + 8 +DETAILS + 10 +12863.353089 + 20 +13762.927058 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1BE3 + 8 +DETAILS + 10 +12867.628035 + 20 +13767.199822 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1BE4 + 8 +DETAILS + 0 +POLYLINE + 5 +1BE5 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1BE6 + 8 +DETAILS + 10 +12709.454146 + 20 +13707.381181 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1BE7 + 8 +DETAILS + 10 +12709.454146 + 20 +13707.381181 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BE8 + 8 +DETAILS + 10 +12716.567971 + 20 +13714.108481 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BE9 + 8 +DETAILS + 10 +12723.481404 + 20 +13719.940755 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BEA + 8 +DETAILS + 10 +12730.194447 + 20 +13724.984405 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BEB + 8 +DETAILS + 10 +12736.707098 + 20 +13729.345834 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BEC + 8 +DETAILS + 10 +12743.01936 + 20 +13733.131441 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BED + 8 +DETAILS + 10 +12749.131232 + 20 +13736.44763 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BEE + 8 +DETAILS + 10 +12755.042714 + 20 +13739.4008 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BEF + 8 +DETAILS + 10 +12760.753808 + 20 +13742.097354 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BF0 + 8 +DETAILS + 10 +12766.256164 + 20 +13744.652039 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BF1 + 8 +DETAILS + 10 +12771.508035 + 20 +13747.212982 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BF2 + 8 +DETAILS + 10 +12776.459322 + 20 +13749.936657 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BF3 + 8 +DETAILS + 10 +12781.059929 + 20 +13752.979537 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BF4 + 8 +DETAILS + 10 +12785.259758 + 20 +13756.498097 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BF5 + 8 +DETAILS + 10 +12789.00871 + 20 +13760.648809 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BF6 + 8 +DETAILS + 10 +12792.25669 + 20 +13765.588148 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BF7 + 8 +DETAILS + 10 +12794.953598 + 20 +13771.472586 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1BF8 + 8 +DETAILS + 10 +12728.691536 + 20 +13726.608592 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1BF9 + 8 +DETAILS + 10 +12762.891281 + 20 +13743.699648 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1BFA + 8 +DETAILS + 10 +12788.541135 + 20 +13754.38153 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1BFB + 8 +DETAILS + 10 +12794.953598 + 20 +13771.472586 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1BFC + 8 +DETAILS + 0 +POLYLINE + 5 +1BFD + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1BFE + 8 +DETAILS + 10 +12906.102815 + 20 +13703.108417 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1BFF + 8 +DETAILS + 10 +12906.102815 + 20 +13703.108417 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C00 + 8 +DETAILS + 10 +12911.797206 + 20 +13712.325728 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C01 + 8 +DETAILS + 10 +12916.389457 + 20 +13719.565218 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C02 + 8 +DETAILS + 10 +12920.380539 + 20 +13725.45278 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C03 + 8 +DETAILS + 10 +12924.271425 + 20 +13730.614305 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C04 + 8 +DETAILS + 10 +12928.563087 + 20 +13735.675685 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C05 + 8 +DETAILS + 10 +12933.756497 + 20 +13741.262814 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C06 + 8 +DETAILS + 10 +12940.352629 + 20 +13748.001583 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C07 + 8 +DETAILS + 10 +12948.852453 + 20 +13756.517884 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C08 + 8 +DETAILS + 10 +12923.202688 + 20 +13730.881356 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1C09 + 8 +DETAILS + 10 +12948.852453 + 20 +13756.517884 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1C0A + 8 +DETAILS + 0 +POLYLINE + 5 +1C0B + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +28D8 + 8 +DETAILS + 10 +12457.231 + 20 +13743.699648 + 30 +0.0 + 0 +VERTEX + 5 +28D9 + 8 +DETAILS + 10 +12497.843209 + 20 +13765.063412 + 30 +0.0 + 0 +VERTEX + 5 +28DA + 8 +DETAILS + 10 +12502.118155 + 20 +13771.472586 + 30 +0.0 + 0 +SEQEND + 5 +28DB + 8 +DETAILS + 0 +LINE + 5 +1C10 + 8 +0 + 62 + 0 + 10 +12562.49999 + 20 +13693.747693 + 30 +0.0 + 11 +12566.109761 + 21 +13700.0 + 31 +0.0 + 0 +LINE + 5 +1C11 + 8 +0 + 62 + 0 + 10 +12499.999958 + 20 +13693.747663 + 30 +0.0 + 11 +12496.39017 + 21 +13700.0 + 31 +0.0 + 0 +LINE + 5 +1C12 + 8 +0 + 62 + 0 + 10 +12500.0 + 20 +13693.74765 + 30 +0.0 + 11 +12562.5 + 21 +13693.74765 + 31 +0.0 + 0 +LINE + 5 +1C13 + 8 +0 + 62 + 0 + 10 +12749.999989 + 20 +13693.747693 + 30 +0.0 + 11 +12753.60976 + 21 +13700.0 + 31 +0.0 + 0 +LINE + 5 +1C14 + 8 +0 + 62 + 0 + 10 +12687.499958 + 20 +13693.747662 + 30 +0.0 + 11 +12683.890169 + 21 +13700.0 + 31 +0.0 + 0 +LINE + 5 +1C15 + 8 +0 + 62 + 0 + 10 +12687.5 + 20 +13693.74765 + 30 +0.0 + 11 +12750.0 + 21 +13693.74765 + 31 +0.0 + 0 +LINE + 5 +1C16 + 8 +0 + 62 + 0 + 10 +12937.499989 + 20 +13693.747693 + 30 +0.0 + 11 +12941.10976 + 21 +13700.0 + 31 +0.0 + 0 +LINE + 5 +1C17 + 8 +0 + 62 + 0 + 10 +12874.999957 + 20 +13693.747662 + 30 +0.0 + 11 +12871.390168 + 21 +13700.0 + 31 +0.0 + 0 +LINE + 5 +1C18 + 8 +0 + 62 + 0 + 10 +12875.0 + 20 +13693.74765 + 30 +0.0 + 11 +12937.5 + 21 +13693.74765 + 31 +0.0 + 0 +LINE + 5 +1C19 + 8 +0 + 62 + 0 + 10 +13062.49999 + 20 +13693.747693 + 30 +0.0 + 11 +13066.109761 + 21 +13700.0 + 31 +0.0 + 0 +POLYLINE + 5 +1C1A + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1C1B + 8 +DETAILS + 10 +13044.867881 + 20 +13709.517591 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1C1C + 8 +DETAILS + 10 +13044.867881 + 20 +13709.517591 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C1D + 8 +DETAILS + 10 +13048.266133 + 20 +13716.809228 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C1E + 8 +DETAILS + 10 +13052.015072 + 20 +13722.786492 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C1F + 8 +DETAILS + 10 +13056.064599 + 20 +13727.637152 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C20 + 8 +DETAILS + 10 +13060.364616 + 20 +13731.548975 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C21 + 8 +DETAILS + 10 +13064.865025 + 20 +13734.709729 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C22 + 8 +DETAILS + 10 +13069.515729 + 20 +13737.307181 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C23 + 8 +DETAILS + 10 +13074.266629 + 20 +13739.5291 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C24 + 8 +DETAILS + 10 +13079.067626 + 20 +13741.563252 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C25 + 8 +DETAILS + 10 +13083.897848 + 20 +13743.58906 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C26 + 8 +DETAILS + 10 +13088.853311 + 20 +13745.752565 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C27 + 8 +DETAILS + 10 +13094.059258 + 20 +13748.191462 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C28 + 8 +DETAILS + 10 +13099.640932 + 20 +13751.043447 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C29 + 8 +DETAILS + 10 +13105.723573 + 20 +13754.446215 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C2A + 8 +DETAILS + 10 +13112.432425 + 20 +13758.537463 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C2B + 8 +DETAILS + 10 +13119.892729 + 20 +13763.454885 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C2C + 8 +DETAILS + 10 +13128.229728 + 20 +13769.336176 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C2D + 8 +DETAILS + 10 +13053.417773 + 20 +13730.881356 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1C2E + 8 +DETAILS + 10 +13079.067626 + 20 +13741.563238 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1C2F + 8 +DETAILS + 10 +13104.71748 + 20 +13752.245176 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1C30 + 8 +DETAILS + 10 +13128.229728 + 20 +13769.336176 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1C31 + 8 +DETAILS + 0 +LINE + 5 +1C32 + 8 +0 + 62 + 0 + 10 +13062.5 + 20 +13693.74765 + 30 +0.0 + 11 +13125.0 + 21 +13693.74765 + 31 +0.0 + 0 +LINE + 5 +1C33 + 8 +0 + 62 + 0 + 10 +13000.0 + 20 +13693.74765 + 30 +0.0 + 11 +13062.5 + 21 +13693.74765 + 31 +0.0 + 0 +LINE + 5 +1C34 + 8 +0 + 62 + 0 + 10 +12999.999958 + 20 +13693.747663 + 30 +0.0 + 11 +12996.39017 + 21 +13700.0 + 31 +0.0 + 0 +POLYLINE + 5 +1C35 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +6.25 + 41 +6.25 + 0 +VERTEX + 5 +28DC + 8 +DETAILS + 10 +12957.231 + 20 +13743.699648 + 30 +0.0 + 0 +VERTEX + 5 +28DD + 8 +DETAILS + 10 +12997.843209 + 20 +13765.063412 + 30 +0.0 + 0 +VERTEX + 5 +28DE + 8 +DETAILS + 10 +13002.118155 + 20 +13771.472586 + 30 +0.0 + 0 +SEQEND + 5 +28DF + 8 +DETAILS + 0 +POLYLINE + 5 +1C3A + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1C3B + 8 +DETAILS + 10 +12989.293228 + 20 +13707.381181 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1C3C + 8 +DETAILS + 10 +12989.293228 + 20 +13707.381181 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C3D + 8 +DETAILS + 10 +12995.563746 + 20 +13716.181229 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C3E + 8 +DETAILS + 10 +13004.188837 + 20 +13724.90617 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C3F + 8 +DETAILS + 10 +13014.316847 + 20 +13733.480897 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C40 + 8 +DETAILS + 10 +13025.096123 + 20 +13741.830303 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C41 + 8 +DETAILS + 10 +13035.67501 + 20 +13749.879282 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C42 + 8 +DETAILS + 10 +13045.201855 + 20 +13757.552727 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C43 + 8 +DETAILS + 10 +13052.825006 + 20 +13764.77553 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C44 + 8 +DETAILS + 10 +13057.692807 + 20 +13771.472586 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C45 + 8 +DETAILS + 10 +13002.118155 + 20 +13730.881356 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1C46 + 8 +DETAILS + 10 +13049.142827 + 20 +13754.38153 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1C47 + 8 +DETAILS + 10 +13057.692807 + 20 +13771.472586 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1C48 + 8 +DETAILS + 0 +LINE + 5 +1C49 + 8 +0 + 62 + 0 + 10 +13062.499956 + 20 +13693.747662 + 30 +0.0 + 11 +13058.890167 + 21 +13700.0 + 31 +0.0 + 0 +POLYLINE + 5 +1C4A + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1C4B + 8 +DETAILS + 10 +13209.454146 + 20 +13707.381181 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1C4C + 8 +DETAILS + 10 +13209.454146 + 20 +13707.381181 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C4D + 8 +DETAILS + 10 +13216.567971 + 20 +13714.108481 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C4E + 8 +DETAILS + 10 +13223.481404 + 20 +13719.940755 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C4F + 8 +DETAILS + 10 +13230.194447 + 20 +13724.984405 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C50 + 8 +DETAILS + 10 +13236.707098 + 20 +13729.345834 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C51 + 8 +DETAILS + 10 +13243.01936 + 20 +13733.131441 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C52 + 8 +DETAILS + 10 +13249.131232 + 20 +13736.44763 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C53 + 8 +DETAILS + 10 +13255.042714 + 20 +13739.4008 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C54 + 8 +DETAILS + 10 +13260.753808 + 20 +13742.097354 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C55 + 8 +DETAILS + 10 +13266.256164 + 20 +13744.652039 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C56 + 8 +DETAILS + 10 +13271.508035 + 20 +13747.212982 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C57 + 8 +DETAILS + 10 +13276.459322 + 20 +13749.936657 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C58 + 8 +DETAILS + 10 +13281.059929 + 20 +13752.979537 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C59 + 8 +DETAILS + 10 +13285.259758 + 20 +13756.498097 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C5A + 8 +DETAILS + 10 +13289.00871 + 20 +13760.648809 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C5B + 8 +DETAILS + 10 +13292.25669 + 20 +13765.588148 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C5C + 8 +DETAILS + 10 +13294.953598 + 20 +13771.472586 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C5D + 8 +DETAILS + 10 +13228.691536 + 20 +13726.608592 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1C5E + 8 +DETAILS + 10 +13262.891281 + 20 +13743.699648 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1C5F + 8 +DETAILS + 10 +13288.541135 + 20 +13754.38153 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1C60 + 8 +DETAILS + 10 +13294.953598 + 20 +13771.472586 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1C61 + 8 +DETAILS + 0 +POLYLINE + 5 +1C62 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1C63 + 8 +DETAILS + 10 +13269.303745 + 20 +13707.381181 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1C64 + 8 +DETAILS + 10 +13269.303745 + 20 +13707.381181 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C65 + 8 +DETAILS + 10 +13277.74201 + 20 +13715.429115 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C66 + 8 +DETAILS + 10 +13285.510224 + 20 +13722.093827 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C67 + 8 +DETAILS + 10 +13292.739892 + 20 +13727.59438 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C68 + 8 +DETAILS + 10 +13299.56252 + 20 +13732.149835 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C69 + 8 +DETAILS + 10 +13306.109613 + 20 +13735.979255 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C6A + 8 +DETAILS + 10 +13312.512675 + 20 +13739.301703 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C6B + 8 +DETAILS + 10 +13318.903214 + 20 +13742.336239 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C6C + 8 +DETAILS + 10 +13325.412733 + 20 +13745.301927 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C6D + 8 +DETAILS + 10 +13332.114291 + 20 +13748.367758 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C6E + 8 +DETAILS + 10 +13338.847159 + 20 +13751.502436 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C6F + 8 +DETAILS + 10 +13345.392162 + 20 +13754.624596 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C70 + 8 +DETAILS + 10 +13351.530124 + 20 +13757.652873 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C71 + 8 +DETAILS + 10 +13357.041868 + 20 +13760.505899 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C72 + 8 +DETAILS + 10 +13361.708218 + 20 +13763.10231 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C73 + 8 +DETAILS + 10 +13365.309999 + 20 +13765.36074 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C74 + 8 +DETAILS + 10 +13367.628035 + 20 +13767.199822 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C75 + 8 +DETAILS + 10 +13292.816081 + 20 +13730.881356 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1C76 + 8 +DETAILS + 10 +13322.74088 + 20 +13743.699648 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1C77 + 8 +DETAILS + 10 +13363.353089 + 20 +13762.927058 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1C78 + 8 +DETAILS + 10 +13367.628035 + 20 +13767.199822 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1C79 + 8 +DETAILS + 0 +LINE + 5 +1C7A + 8 +0 + 62 + 0 + 10 +13250.0 + 20 +13693.74765 + 30 +0.0 + 11 +13312.5 + 21 +13693.74765 + 31 +0.0 + 0 +LINE + 5 +1C7B + 8 +0 + 62 + 0 + 10 +13187.5 + 20 +13693.74765 + 30 +0.0 + 11 +13250.0 + 21 +13693.74765 + 31 +0.0 + 0 +LINE + 5 +1C7C + 8 +0 + 62 + 0 + 10 +13187.499958 + 20 +13693.747662 + 30 +0.0 + 11 +13183.890169 + 21 +13700.0 + 31 +0.0 + 0 +LINE + 5 +1C7D + 8 +0 + 62 + 0 + 10 +13249.999989 + 20 +13693.747693 + 30 +0.0 + 11 +13253.60976 + 21 +13700.0 + 31 +0.0 + 0 +POLYLINE + 5 +1C7E + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1C7F + 8 +DETAILS + 10 +13091.892553 + 20 +13705.244827 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1C80 + 8 +DETAILS + 10 +13091.892553 + 20 +13705.244827 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C81 + 8 +DETAILS + 10 +13097.312442 + 20 +13714.469439 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C82 + 8 +DETAILS + 10 +13102.387913 + 20 +13721.559757 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C83 + 8 +DETAILS + 10 +13107.175327 + 20 +13726.885057 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C84 + 8 +DETAILS + 10 +13111.731043 + 20 +13730.814615 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C85 + 8 +DETAILS + 10 +13116.111419 + 20 +13733.717709 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C86 + 8 +DETAILS + 10 +13120.372816 + 20 +13735.963616 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C87 + 8 +DETAILS + 10 +13124.571592 + 20 +13737.921611 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C88 + 8 +DETAILS + 10 +13128.764107 + 20 +13739.960972 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C89 + 8 +DETAILS + 10 +13132.985846 + 20 +13742.388387 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C8A + 8 +DETAILS + 10 +13137.1888 + 20 +13745.260185 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C8B + 8 +DETAILS + 10 +13141.304084 + 20 +13748.57011 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C8C + 8 +DETAILS + 10 +13145.262814 + 20 +13752.311902 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C8D + 8 +DETAILS + 10 +13148.996108 + 20 +13756.479304 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C8E + 8 +DETAILS + 10 +13152.43508 + 20 +13761.066058 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C8F + 8 +DETAILS + 10 +13155.510848 + 20 +13766.065904 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C90 + 8 +DETAILS + 10 +13158.154527 + 20 +13771.472586 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C91 + 8 +DETAILS + 10 +13106.854909 + 20 +13733.017765 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1C92 + 8 +DETAILS + 10 +13128.229728 + 20 +13735.15412 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1C93 + 8 +DETAILS + 10 +13151.742064 + 20 +13756.517884 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1C94 + 8 +DETAILS + 10 +13158.154527 + 20 +13771.472586 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1C95 + 8 +DETAILS + 0 +POLYLINE + 5 +1C96 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1C97 + 8 +DETAILS + 10 +13153.879581 + 20 +13703.108417 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1C98 + 8 +DETAILS + 10 +13153.879581 + 20 +13703.108417 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C99 + 8 +DETAILS + 10 +13157.937458 + 20 +13713.127923 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C9A + 8 +DETAILS + 10 +13162.09553 + 20 +13720.975579 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C9B + 8 +DETAILS + 10 +13166.353798 + 20 +13726.983107 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C9C + 8 +DETAILS + 10 +13170.712261 + 20 +13731.482233 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C9D + 8 +DETAILS + 10 +13175.17092 + 20 +13734.804679 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C9E + 8 +DETAILS + 10 +13179.729773 + 20 +13737.282169 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1C9F + 8 +DETAILS + 10 +13184.388821 + 20 +13739.246428 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CA0 + 8 +DETAILS + 10 +13189.148063 + 20 +13741.029177 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CA1 + 8 +DETAILS + 10 +13194.0075 + 20 +13742.920415 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CA2 + 8 +DETAILS + 10 +13198.967131 + 20 +13745.043234 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CA3 + 8 +DETAILS + 10 +13204.026958 + 20 +13747.478999 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CA4 + 8 +DETAILS + 10 +13209.186981 + 20 +13750.309077 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CA5 + 8 +DETAILS + 10 +13214.447201 + 20 +13753.614832 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CA6 + 8 +DETAILS + 10 +13219.807619 + 20 +13757.477631 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CA7 + 8 +DETAILS + 10 +13225.268236 + 20 +13761.978839 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CA8 + 8 +DETAILS + 10 +13230.829053 + 20 +13767.199822 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CA9 + 8 +DETAILS + 10 +13164.566991 + 20 +13733.017765 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1CAA + 8 +DETAILS + 10 +13188.079327 + 20 +13739.426884 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1CAB + 8 +DETAILS + 10 +13215.866609 + 20 +13752.245176 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1CAC + 8 +DETAILS + 10 +13230.829053 + 20 +13767.199822 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1CAD + 8 +DETAILS + 0 +LINE + 5 +1CAE + 8 +0 + 62 + 0 + 10 +13124.999988 + 20 +13693.747694 + 30 +0.0 + 11 +13128.609759 + 21 +13700.0 + 31 +0.0 + 0 +LINE + 5 +1CAF + 8 +0 + 62 + 0 + 10 +13249.999956 + 20 +13693.747661 + 30 +0.0 + 11 +13246.390166 + 21 +13700.0 + 31 +0.0 + 0 +LINE + 5 +1CB0 + 8 +0 + 62 + 0 + 10 +13375.0 + 20 +13693.74765 + 30 +0.0 + 11 +13437.5 + 21 +13693.74765 + 31 +0.0 + 0 +LINE + 5 +1CB1 + 8 +0 + 62 + 0 + 10 +13374.999957 + 20 +13693.747662 + 30 +0.0 + 11 +13371.390168 + 21 +13700.0 + 31 +0.0 + 0 +LINE + 5 +1CB2 + 8 +0 + 62 + 0 + 10 +13437.499989 + 20 +13693.747693 + 30 +0.0 + 11 +13441.10976 + 21 +13700.0 + 31 +0.0 + 0 +POLYLINE + 5 +1CB3 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1CB4 + 8 +DETAILS + 10 +13406.102815 + 20 +13703.108417 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1CB5 + 8 +DETAILS + 10 +13406.102815 + 20 +13703.108417 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CB6 + 8 +DETAILS + 10 +13411.797206 + 20 +13712.325728 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CB7 + 8 +DETAILS + 10 +13416.389457 + 20 +13719.565218 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CB8 + 8 +DETAILS + 10 +13420.380539 + 20 +13725.45278 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CB9 + 8 +DETAILS + 10 +13424.271425 + 20 +13730.614305 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CBA + 8 +DETAILS + 10 +13428.563087 + 20 +13735.675685 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CBB + 8 +DETAILS + 10 +13433.756497 + 20 +13741.262814 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CBC + 8 +DETAILS + 10 +13440.352629 + 20 +13748.001583 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CBD + 8 +DETAILS + 10 +13448.852453 + 20 +13756.517884 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CBE + 8 +DETAILS + 10 +13423.202688 + 20 +13730.881356 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1CBF + 8 +DETAILS + 10 +13448.852453 + 20 +13756.517884 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1CC0 + 8 +DETAILS + 0 +POLYLINE + 5 +1CC1 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1CC2 + 8 +DETAILS + 10 +13324.878397 + 20 +13703.108417 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1CC3 + 8 +DETAILS + 10 +13324.878397 + 20 +13703.108417 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CC4 + 8 +DETAILS + 10 +13327.77465 + 20 +13709.559281 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CC5 + 8 +DETAILS + 10 +13331.616488 + 20 +13714.658217 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CC6 + 8 +DETAILS + 10 +13336.347553 + 20 +13718.655583 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CC7 + 8 +DETAILS + 10 +13341.911484 + 20 +13721.801736 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CC8 + 8 +DETAILS + 10 +13348.251922 + 20 +13724.347033 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CC9 + 8 +DETAILS + 10 +13355.312509 + 20 +13726.54183 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CCA + 8 +DETAILS + 10 +13363.036885 + 20 +13728.636486 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CCB + 8 +DETAILS + 10 +13371.36869 + 20 +13730.881356 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CCC + 8 +DETAILS + 10 +13380.201469 + 20 +13733.497589 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CCD + 8 +DETAILS + 10 +13389.228374 + 20 +13736.5895 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CCE + 8 +DETAILS + 10 +13398.092463 + 20 +13740.232197 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CCF + 8 +DETAILS + 10 +13406.436791 + 20 +13744.500784 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CD0 + 8 +DETAILS + 10 +13413.904416 + 20 +13749.470369 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CD1 + 8 +DETAILS + 10 +13420.138394 + 20 +13755.216059 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CD2 + 8 +DETAILS + 10 +13424.781781 + 20 +13761.812959 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CD3 + 8 +DETAILS + 10 +13427.477634 + 20 +13769.336176 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CD4 + 8 +DETAILS + 10 +13331.290861 + 20 +13722.335828 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1CD5 + 8 +DETAILS + 10 +13365.490606 + 20 +13726.608592 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1CD6 + 8 +DETAILS + 10 +13423.202688 + 20 +13747.972412 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1CD7 + 8 +DETAILS + 10 +13427.477634 + 20 +13769.336176 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1CD8 + 8 +DETAILS + 0 +LINE + 5 +1CD9 + 8 +0 + 62 + 0 + 10 +13312.499988 + 20 +13693.747694 + 30 +0.0 + 11 +13316.109758 + 21 +13700.0 + 31 +0.0 + 0 +LINE + 5 +1CDA + 8 +0 + 62 + 0 + 10 +13437.499955 + 20 +13693.747661 + 30 +0.0 + 11 +13433.890166 + 21 +13700.0 + 31 +0.0 + 0 +POLYLINE + 5 +1CDB + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1CDC + 8 +DETAILS + 10 +13459.882731 + 20 +13737.290529 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1CDD + 8 +DETAILS + 10 +13459.882731 + 20 +13737.290529 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CDE + 8 +DETAILS + 10 +13471.196368 + 20 +13738.062455 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CDF + 8 +DETAILS + 10 +13479.854848 + 20 +13739.059704 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CE0 + 8 +DETAILS + 10 +13486.409244 + 20 +13740.707882 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CE1 + 8 +DETAILS + 10 +13491.410624 + 20 +13743.432596 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CE2 + 8 +DETAILS + 10 +13495.41006 + 20 +13747.659453 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CE3 + 8 +DETAILS + 10 +13498.958621 + 20 +13753.814058 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CE4 + 8 +DETAILS + 10 +13502.607379 + 20 +13762.322019 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CE5 + 8 +DETAILS + 10 +13506.907403 + 20 +13773.60894 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CE6 + 8 +DETAILS + 10 +13494.082477 + 20 +13739.426884 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1CE7 + 8 +DETAILS + 10 +13506.907403 + 20 +13773.60894 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1CE8 + 8 +DETAILS + 0 +POLYLINE + 5 +1CE9 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1CEA + 8 +DETAILS + 10 +13491.945048 + 20 +13711.653945 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1CEB + 8 +DETAILS + 10 +13491.945048 + 20 +13711.653945 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CEC + 8 +DETAILS + 10 +13503.104222 + 20 +13718.60553 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CED + 8 +DETAILS + 10 +13513.887661 + 20 +13726.408325 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CEE + 8 +DETAILS + 10 +13523.919637 + 20 +13734.711832 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CEF + 8 +DETAILS + 10 +13532.824424 + 20 +13743.165552 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CF0 + 8 +DETAILS + 10 +13540.226294 + 20 +13751.418987 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CF1 + 8 +DETAILS + 10 +13545.749519 + 20 +13759.121636 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CF2 + 8 +DETAILS + 10 +13549.018374 + 20 +13765.923002 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CF3 + 8 +DETAILS + 10 +13549.657129 + 20 +13771.472586 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CF4 + 8 +DETAILS + 10 +13521.869847 + 20 +13728.745001 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1CF5 + 8 +DETAILS + 10 +13551.794558 + 20 +13758.654294 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1CF6 + 8 +DETAILS + 10 +13549.657129 + 20 +13771.472586 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1CF7 + 8 +DETAILS + 0 +POLYLINE + 5 +1CF8 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 40 +6.25 + 41 +6.25 + 75 + 6 + 0 +VERTEX + 5 +1CF9 + 8 +DETAILS + 10 +13558.207022 + 20 +13700.972063 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1CFA + 8 +DETAILS + 10 +13558.207022 + 20 +13700.972063 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CFB + 8 +DETAILS + 10 +13564.182168 + 20 +13711.412985 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CFC + 8 +DETAILS + 10 +13569.336973 + 20 +13720.408096 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CFD + 8 +DETAILS + 10 +13573.752844 + 20 +13728.113869 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CFE + 8 +DETAILS + 10 +13577.51119 + 20 +13734.686778 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1CFF + 8 +DETAILS + 10 +13580.693417 + 20 +13740.283297 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1D00 + 8 +DETAILS + 10 +13583.380933 + 20 +13745.059897 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1D01 + 8 +DETAILS + 10 +13585.655147 + 20 +13749.173052 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1D02 + 8 +DETAILS + 10 +13587.597464 + 20 +13752.779237 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1D03 + 8 +DETAILS + 10 +13589.272594 + 20 +13756.022405 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1D04 + 8 +DETAILS + 10 +13590.678449 + 20 +13758.996439 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1D05 + 8 +DETAILS + 10 +13591.796243 + 20 +13761.782706 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1D06 + 8 +DETAILS + 10 +13592.60719 + 20 +13764.46257 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1D07 + 8 +DETAILS + 10 +13593.092502 + 20 +13767.117395 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1D08 + 8 +DETAILS + 10 +13593.233393 + 20 +13769.828548 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1D09 + 8 +DETAILS + 10 +13593.011077 + 20 +13772.677393 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1D0A + 8 +DETAILS + 10 +13592.406767 + 20 +13775.745295 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1D0B + 8 +DETAILS + 10 +13575.306895 + 20 +13730.881356 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1D0C + 8 +DETAILS + 10 +13590.269338 + 20 +13756.517884 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1D0D + 8 +DETAILS + 10 +13594.544284 + 20 +13767.199822 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1D0E + 8 +DETAILS + 10 +13592.406767 + 20 +13775.745295 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1D0F + 8 +DETAILS + 0 +POLYLINE + 5 +1D10 + 8 +DECKEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +28E0 + 8 +DECKEN + 10 +11555.0 + 20 +12812.5 + 30 +0.0 + 0 +VERTEX + 5 +28E1 + 8 +DECKEN + 10 +13605.0 + 20 +12812.5 + 30 +0.0 + 0 +SEQEND + 5 +28E2 + 8 +DECKEN + 0 +TEXT + 5 +1D14 + 8 +DETAILS + 10 +9225.0 + 20 +13365.0 + 30 +0.0 + 40 +87.5 + 1 +DIELUNG + 0 +TEXT + 5 +1D15 + 8 +DETAILS + 10 +9225.0 + 20 +13115.0 + 30 +0.0 + 40 +87.5 + 1 +PS-WÄDÄ + 0 +TEXT + 5 +1D16 + 8 +DETAILS + 10 +9225.0 + 20 +12865.0 + 30 +0.0 + 40 +87.5 + 1 +GIPSPUTZ + 0 +POLYLINE + 5 +1D17 + 8 +BEMASSUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +28E3 + 8 +BEMASSUNG + 10 +10030.0 + 20 +13410.0 + 30 +0.0 + 0 +VERTEX + 5 +28E4 + 8 +BEMASSUNG + 10 +11075.0 + 20 +13410.0 + 30 +0.0 + 0 +VERTEX + 5 +28E5 + 8 +BEMASSUNG + 10 +11075.0 + 20 +13745.0 + 30 +0.0 + 0 +VERTEX + 5 +28E6 + 8 +BEMASSUNG + 10 +11375.0 + 20 +13745.0 + 30 +0.0 + 0 +SEQEND + 5 +28E7 + 8 +BEMASSUNG + 0 +POLYLINE + 5 +1D1D + 8 +BEMASSUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +28E8 + 8 +BEMASSUNG + 10 +10030.0 + 20 +13170.0 + 30 +0.0 + 0 +VERTEX + 5 +28E9 + 8 +BEMASSUNG + 10 +11250.0 + 20 +13170.0 + 30 +0.0 + 0 +VERTEX + 5 +28EA + 8 +BEMASSUNG + 10 +11250.0 + 20 +13470.0 + 30 +0.0 + 0 +VERTEX + 5 +28EB + 8 +BEMASSUNG + 10 +11375.0 + 20 +13470.0 + 30 +0.0 + 0 +SEQEND + 5 +28EC + 8 +BEMASSUNG + 0 +POLYLINE + 5 +1D23 + 8 +BEMASSUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +28ED + 8 +BEMASSUNG + 10 +10035.0 + 20 +12920.0 + 30 +0.0 + 0 +VERTEX + 5 +28EE + 8 +BEMASSUNG + 10 +11265.0 + 20 +12920.0 + 30 +0.0 + 0 +VERTEX + 5 +28EF + 8 +BEMASSUNG + 10 +11265.0 + 20 +12825.0 + 30 +0.0 + 0 +VERTEX + 5 +28F0 + 8 +BEMASSUNG + 10 +11375.0 + 20 +12825.0 + 30 +0.0 + 0 +SEQEND + 5 +28F1 + 8 +BEMASSUNG + 0 +DIMENSION + 5 +1D29 + 8 +BEMASSUNG + 2 +*D4 + 10 +4130.0 + 20 +3100.0 + 30 +0.0 + 11 +3945.0 + 21 +3187.5 + 31 +0.0 + 12 +0.0 + 22 +-750.0 + 32 +0.0 + 1 +32 + 13 +3760.0 + 23 +2900.0 + 33 +0.0 + 14 +4130.0 + 24 +2900.0 + 34 +0.0 + 0 +DIMENSION + 5 +1D2A + 8 +BEMASSUNG + 2 +*D8 + 10 +5890.0 + 20 +3100.0 + 30 +0.0 + 11 +5010.0 + 21 +3187.5 + 31 +0.0 + 12 +0.0 + 22 +-750.0 + 32 +0.0 + 1 +1.62 + 13 +4130.0 + 23 +2900.0 + 33 +0.0 + 14 +5890.0 + 24 +3110.0 + 34 +0.0 + 0 +DIMENSION + 5 +1D2B + 8 +BEMASSUNG + 2 +*D11 + 10 +7195.0 + 20 +3100.0 + 30 +0.0 + 11 +6542.5 + 21 +3187.5 + 31 +0.0 + 12 +0.0 + 22 +-750.0 + 32 +0.0 + 1 +1.43 + 13 +5890.0 + 23 +3110.0 + 33 +0.0 + 14 +7195.0 + 24 +3105.0 + 34 +0.0 + 0 +DIMENSION + 5 +1D2C + 8 +BEMASSUNG + 2 +*D5 + 10 +10555.0 + 20 +3100.0 + 30 +0.0 + 11 +8875.0 + 21 +3187.5 + 31 +0.0 + 12 +0.0 + 22 +-750.0 + 32 +0.0 + 1 +3.37 + 13 +7195.0 + 23 +3105.0 + 33 +0.0 + 14 +10555.0 + 24 +3455.0 + 34 +0.0 + 0 +DIMENSION + 5 +1D2D + 8 +BEMASSUNG + 2 +*D6 + 10 +13940.0 + 20 +3100.0 + 30 +0.0 + 11 +12247.5 + 21 +3187.5 + 31 +0.0 + 12 +0.0 + 22 +-750.0 + 32 +0.0 + 1 +3.37 + 13 +10555.0 + 23 +3455.0 + 33 +0.0 + 14 +13940.0 + 24 +3615.0 + 34 +0.0 + 0 +DIMENSION + 5 +1D2E + 8 +BEMASSUNG + 2 +*D10 + 10 +15225.0 + 20 +3100.0 + 30 +0.0 + 11 +14582.5 + 21 +3187.5 + 31 +0.0 + 12 +0.0 + 22 +-750.0 + 32 +0.0 + 1 +1.43 + 13 +13940.0 + 23 +3615.0 + 33 +0.0 + 14 +15225.0 + 24 +3285.0 + 34 +0.0 + 0 +DIMENSION + 5 +1D2F + 8 +BEMASSUNG + 2 +*D9 + 10 +16985.0 + 20 +3100.0 + 30 +0.0 + 11 +16105.0 + 21 +3187.5 + 31 +0.0 + 12 +0.0 + 22 +-750.0 + 32 +0.0 + 1 +1.62 + 13 +15225.0 + 23 +3285.0 + 33 +0.0 + 14 +16985.0 + 24 +3090.0 + 34 +0.0 + 0 +DIMENSION + 5 +1D30 + 8 +BEMASSUNG + 2 +*D7 + 10 +17360.0 + 20 +3100.0 + 30 +0.0 + 11 +17172.5 + 21 +3187.5 + 31 +0.0 + 12 +0.0 + 22 +-750.0 + 32 +0.0 + 1 +32 + 13 +16985.0 + 23 +3090.0 + 33 +0.0 + 14 +17360.0 + 24 +4025.0 + 34 +0.0 + 0 +TEXT + 5 +1D31 + 8 +BEMASSUNG + 10 +6685.0 + 20 +3220.0 + 30 +0.0 + 40 +62.5 + 1 +8 + 0 +TEXT + 5 +1D32 + 8 +BEMASSUNG + 10 +9020.0 + 20 +3220.0 + 30 +0.0 + 40 +62.5 + 1 +5 + 0 +TEXT + 5 +1D33 + 8 +BEMASSUNG + 10 +12400.0 + 20 +3220.0 + 30 +0.0 + 40 +62.5 + 1 +5 + 0 +TEXT + 5 +1D34 + 8 +BEMASSUNG + 10 +14715.0 + 20 +3220.0 + 30 +0.0 + 40 +62.5 + 1 +8 + 0 +DIMENSION + 5 +1D35 + 8 +BEMASSUNG + 2 +*D12 + 10 +4490.0 + 20 +2750.0 + 30 +0.0 + 11 +4310.0 + 21 +2837.5 + 31 +0.0 + 12 +0.0 + 22 +-750.0 + 32 +0.0 + 1 +36 + 13 +4130.0 + 23 +1520.0 + 33 +0.0 + 14 +4490.0 + 24 +1520.0 + 34 +0.0 + 0 +DIMENSION + 5 +1D36 + 8 +BEMASSUNG + 2 +*D13 + 10 +9000.0 + 20 +2750.0 + 30 +0.0 + 11 +6745.0 + 21 +2837.5 + 31 +0.0 + 12 +0.0 + 22 +-750.0 + 32 +0.0 + 1 +4.51 + 13 +4490.0 + 23 +1520.0 + 33 +0.0 + 14 +9000.0 + 24 +1875.0 + 34 +0.0 + 0 +DIMENSION + 5 +1D37 + 8 +BEMASSUNG + 2 +*D14 + 10 +9365.0 + 20 +2750.0 + 30 +0.0 + 11 +9182.5 + 21 +2837.5 + 31 +0.0 + 12 +0.0 + 22 +-750.0 + 32 +0.0 + 1 +36 + 13 +9000.0 + 23 +1875.0 + 33 +0.0 + 14 +9365.0 + 24 +2425.0 + 34 +0.0 + 0 +DIMENSION + 5 +1D38 + 8 +BEMASSUNG + 2 +*D15 + 10 +11745.0 + 20 +2750.0 + 30 +0.0 + 11 +10555.0 + 21 +2837.5 + 31 +0.0 + 12 +0.0 + 22 +-750.0 + 32 +0.0 + 1 +2.38 + 13 +9365.0 + 23 +2425.0 + 33 +0.0 + 14 +11745.0 + 24 +2870.0 + 34 +0.0 + 0 +DIMENSION + 5 +1D39 + 8 +BEMASSUNG + 2 +*D16 + 10 +12115.0 + 20 +2750.0 + 30 +0.0 + 11 +11930.0 + 21 +2837.5 + 31 +0.0 + 12 +0.0 + 22 +-750.0 + 32 +0.0 + 1 +36 + 13 +11745.0 + 23 +2870.0 + 33 +0.0 + 14 +12115.0 + 24 +2765.0 + 34 +0.0 + 0 +DIMENSION + 5 +1D3A + 8 +BEMASSUNG + 2 +*D17 + 10 +16630.0 + 20 +2750.0 + 30 +0.0 + 11 +14372.5 + 21 +2837.5 + 31 +0.0 + 12 +0.0 + 22 +-750.0 + 32 +0.0 + 1 +4.51 + 13 +12115.0 + 23 +2765.0 + 33 +0.0 + 14 +16630.0 + 24 +2925.0 + 34 +0.0 + 0 +DIMENSION + 5 +1D3B + 8 +BEMASSUNG + 2 +*D18 + 10 +16985.0 + 20 +2750.0 + 30 +0.0 + 11 +16807.5 + 21 +2837.5 + 31 +0.0 + 12 +0.0 + 22 +-750.0 + 32 +0.0 + 1 +36 + 13 +16630.0 + 23 +2925.0 + 33 +0.0 + 14 +16985.0 + 24 +2775.0 + 34 +0.0 + 0 +TEXT + 5 +1D3C + 8 +BEMASSUNG + 10 +12025.0 + 20 +2850.0 + 30 +0.0 + 40 +62.5 + 1 +5 + 0 +TEXT + 5 +1D3D + 8 +BEMASSUNG + 10 +16900.0 + 20 +2850.0 + 30 +0.0 + 40 +62.5 + 1 +5 + 0 +TEXT + 5 +1D3E + 8 +BEMASSUNG + 10 +10700.0 + 20 +2850.0 + 30 +0.0 + 40 +62.5 + 1 +5 + 0 +TEXT + 5 +1D3F + 8 +BEMASSUNG + 10 +9270.0 + 20 +2850.0 + 30 +0.0 + 40 +62.5 + 1 +5 + 0 +TEXT + 5 +1D40 + 8 +BEMASSUNG + 10 +4395.0 + 20 +2850.0 + 30 +0.0 + 40 +62.5 + 1 +5 + 0 +DIMENSION + 5 +1D41 + 8 +BEMASSUNG + 2 +*D19 + 10 +16985.0 + 20 +2400.0 + 30 +0.0 + 11 +10557.5 + 21 +2487.5 + 31 +0.0 + 12 +0.0 + 22 +-750.0 + 32 +0.0 + 1 +12.86 + 13 +4130.0 + 23 +2140.0 + 33 +0.0 + 14 +16985.0 + 24 +2140.0 + 34 +0.0 + 0 +TEXT + 5 +1D42 + 8 +BEMASSUNG + 10 +10725.0 + 20 +2505.0 + 30 +0.0 + 40 +62.5 + 1 +5 + 0 +DIMENSION + 5 +1D43 + 8 +LEGENDE-35 + 2 +*D21 + 10 +18245.0 + 20 +7545.0 + 30 +0.0 + 11 +18157.5 + 21 +6022.5 + 31 +0.0 + 12 +15870.0 + 22 +-755.0 + 32 +0.0 + 1 +3.00 + 13 +17010.0 + 23 +4500.0 + 33 +0.0 + 14 +17010.0 + 24 +7545.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +1D44 + 8 +LEGENDE-35 + 2 +*D22 + 10 +18245.0 + 20 +9850.0 + 30 +0.0 + 11 +18157.5 + 21 +8697.5 + 31 +0.0 + 12 +15870.0 + 22 +-755.0 + 32 +0.0 + 1 +2.36 + 13 +17010.0 + 23 +7545.0 + 33 +0.0 + 14 +26430.0 + 24 +9850.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +1D45 + 8 +LEGENDE-35 + 2 +*D23 + 10 +8740.0 + 20 +9755.0 + 30 +0.0 + 11 +7995.0 + 21 +9842.5 + 31 +0.0 + 12 +0.0 + 22 +-750.0 + 32 +0.0 + 1 +1.49 + 13 +7250.0 + 23 +9445.0 + 33 +0.0 + 14 +8740.0 + 24 +9445.0 + 34 +0.0 + 0 +DIMENSION + 5 +1D46 + 8 +LEGENDE-35 + 2 +*D24 + 10 +6932.303371 + 20 +8578.314607 + 30 +0.0 + 11 +5105.928464 + 21 +7540.014458 + 31 +0.0 + 12 +0.0 + 22 +-750.0 + 32 +0.0 + 70 + 1 + 1 +4.20 + 13 +3715.0 + 23 +5805.0 + 33 +0.0 + 14 +7275.0 + 24 +8030.0 + 34 +0.0 + 0 +DIMENSION + 5 +1D47 + 8 +LEGENDE-35 + 2 +*D25 + 10 +14757.430766 + 20 +8499.293525 + 30 +0.0 + 11 +12936.243124 + 21 +9738.532433 + 31 +0.0 + 12 +0.0 + 22 +-750.0 + 32 +0.0 + 70 + 1 + 1 +4.40 + 13 +10555.0 + 23 +10080.0 + 33 +0.0 + 14 +14290.0 + 24 +7750.0 + 34 +0.0 + 0 +DIMENSION + 5 +1D48 + 8 +LEGENDE-35 + 2 +*D26 + 10 +17355.726841 + 20 +7900.921615 + 30 +0.0 + 11 +15616.08127 + 21 +8145.568376 + 31 +0.0 + 12 +0.0 + 22 +-750.0 + 32 +0.0 + 70 + 1 + 1 +3.51 + 13 +13830.0 + 23 +7875.0 + 33 +0.0 + 14 +17325.0 + 24 +7560.0 + 34 +0.0 + 0 +INSERT + 5 +1D49 + 8 +0 + 2 +HOEHE + 10 +9865.0 + 20 +4720.0 + 30 +0.0 + 0 +INSERT + 5 +1D4A + 8 +0 + 2 +HOEHE + 10 +9865.0 + 20 +7520.0 + 30 +0.0 + 0 +INSERT + 5 +1D4B + 8 +0 + 2 +HOEHE + 10 +9875.0 + 20 +9855.0 + 30 +0.0 + 0 +DIMENSION + 5 +1D4C + 8 +0 + 2 +*D28 + 10 +17895.0 + 20 +5740.0 + 30 +0.0 + 11 +17807.5 + 21 +5120.0 + 31 +0.0 + 12 +-230.0 + 22 +0.0 + 32 +0.0 + 1 +1.21 + 13 +16740.0 + 23 +4500.0 + 33 +0.0 + 14 +16740.0 + 24 +5740.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +1D4D + 8 +0 + 2 +*D29 + 10 +17895.0 + 20 +5950.0 + 30 +0.0 + 11 +17807.5 + 21 +5845.0 + 31 +0.0 + 12 +-230.0 + 22 +0.0 + 32 +0.0 + 1 +18 + 13 +16740.0 + 23 +5740.0 + 33 +0.0 + 14 +17890.0 + 24 +5950.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +1D4E + 8 +0 + 2 +*D30 + 10 +17895.0 + 20 +7360.0 + 30 +0.0 + 11 +17807.5 + 21 +6655.0 + 31 +0.0 + 12 +-230.0 + 22 +0.0 + 32 +0.0 + 1 +1.40 + 13 +17890.0 + 23 +5950.0 + 33 +0.0 + 14 +16625.0 + 24 +7360.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +1D4F + 8 +0 + 2 +*D34 + 10 +14290.0 + 20 +12855.0 + 30 +0.0 + 11 +14202.5 + 21 +12725.0 + 31 +0.0 + 70 + 128 + 1 +1 + 13 +13590.0 + 23 +12815.0 + 33 +0.0 + 14 +13590.0 + 24 +12855.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +1D50 + 8 +0 + 2 +*D31 + 10 +14290.0 + 20 +13260.0 + 30 +0.0 + 11 +14202.5 + 21 +13057.5 + 31 +0.0 + 1 +16 + 13 +13590.0 + 23 +12855.0 + 33 +0.0 + 14 +13560.0 + 24 +13260.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +1D51 + 8 +0 + 2 +*D32 + 10 +14290.0 + 20 +13700.0 + 30 +0.0 + 11 +14202.5 + 21 +13480.0 + 31 +0.0 + 1 +18 + 13 +13560.0 + 23 +13260.0 + 33 +0.0 + 14 +13580.0 + 24 +13700.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +1D52 + 8 +0 + 2 +*D33 + 10 +14290.0 + 20 +13775.0 + 30 +0.0 + 11 +14202.5 + 21 +13835.0 + 31 +0.0 + 70 + 128 + 1 +3 + 13 +13580.0 + 23 +13700.0 + 33 +0.0 + 14 +13590.0 + 24 +13775.0 + 34 +0.0 + 50 +90.0 + 0 +TEXT + 5 +1D53 + 8 +0 + 10 +14185.0 + 20 +12740.0 + 30 +0.0 + 40 +62.5 + 1 +5 + 50 +90.0 + 0 +TEXT + 5 +1D54 + 8 +0 + 10 +17790.0 + 20 +5225.0 + 30 +0.0 + 40 +62.5 + 1 +5 + 50 +90.0 + 0 +POLYLINE + 5 +1D55 + 8 +BEMASSUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +28F2 + 8 +BEMASSUNG + 10 +9760.0 + 20 +9855.0 + 30 +0.0 + 0 +VERTEX + 5 +28F3 + 8 +BEMASSUNG + 10 +10120.0 + 20 +9855.0 + 30 +0.0 + 0 +SEQEND + 5 +28F4 + 8 +BEMASSUNG + 0 +TEXT + 5 +1D59 + 8 +BEMASSUNG + 10 +9790.0 + 20 +9960.0 + 30 +0.0 + 40 +87.5 + 1 ++5.36 + 0 +TEXT + 5 +1D5A + 8 +BEMASSUNG + 10 +9790.0 + 20 +7640.0 + 30 +0.0 + 40 +87.5 + 1 ++3.00 + 0 +TEXT + 5 +1D5B + 8 +BEMASSUNG + 10 +9790.0 + 20 +4830.0 + 30 +0.0 + 40 +87.5 + 1 ++0.18 + 0 +POLYLINE + 5 +1D5C + 8 +BEMASSUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +28F5 + 8 +BEMASSUNG + 10 +18345.0 + 20 +4500.0 + 30 +0.0 + 0 +VERTEX + 5 +28F6 + 8 +BEMASSUNG + 10 +19330.0 + 20 +4500.0 + 30 +0.0 + 0 +SEQEND + 5 +28F7 + 8 +BEMASSUNG + 0 +INSERT + 5 +1D60 + 8 +BEMASSUNG + 2 +DREIECK + 10 +19145.0 + 20 +4500.0 + 30 +0.0 + 0 +TEXT + 5 +1D61 + 8 +BEMASSUNG + 10 +19050.0 + 20 +4620.0 + 30 +0.0 + 40 +87.5 + 1 +%%p0.00 + 0 +CIRCLE + 5 +1D62 + 8 +BEMASSUNG + 10 +6130.0 + 20 +6420.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1D63 + 8 +BEMASSUNG + 10 +9200.0 + 20 +8505.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1D64 + 8 +BEMASSUNG + 10 +7910.0 + 20 +7750.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1D65 + 8 +BEMASSUNG + 10 +7910.0 + 20 +7060.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1D66 + 8 +BEMASSUNG + 10 +8520.0 + 20 +7750.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1D67 + 8 +BEMASSUNG + 10 +7910.0 + 20 +6600.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1D68 + 8 +BEMASSUNG + 10 +6270.0 + 20 +7750.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1D69 + 8 +BEMASSUNG + 10 +7910.0 + 20 +5145.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1D6A + 8 +BEMASSUNG + 10 +8350.0 + 20 +5145.0 + 30 +0.0 + 40 +125.0 + 0 +POLYLINE + 5 +1D6B + 8 +BEMASSUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +28F8 + 8 +BEMASSUNG + 10 +8350.0 + 20 +5020.0 + 30 +0.0 + 0 +VERTEX + 5 +28F9 + 8 +BEMASSUNG + 10 +8350.0 + 20 +4710.0 + 30 +0.0 + 0 +SEQEND + 5 +28FA + 8 +BEMASSUNG + 0 +POLYLINE + 5 +1D6F + 8 +BEMASSUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +28FB + 8 +BEMASSUNG + 10 +7785.0 + 20 +5140.0 + 30 +0.0 + 0 +VERTEX + 5 +28FC + 8 +BEMASSUNG + 10 +7280.0 + 20 +5140.0 + 30 +0.0 + 0 +SEQEND + 5 +28FD + 8 +BEMASSUNG + 0 +POLYLINE + 5 +1D73 + 8 +BEMASSUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +28FE + 8 +BEMASSUNG + 10 +7785.0 + 20 +6600.0 + 30 +0.0 + 0 +VERTEX + 5 +28FF + 8 +BEMASSUNG + 10 +7330.0 + 20 +6675.0 + 30 +0.0 + 0 +SEQEND + 5 +2900 + 8 +BEMASSUNG + 0 +POLYLINE + 5 +1D77 + 8 +BEMASSUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2901 + 8 +BEMASSUNG + 10 +7785.0 + 20 +7060.0 + 30 +0.0 + 0 +VERTEX + 5 +2902 + 8 +BEMASSUNG + 10 +7145.0 + 20 +7065.0 + 30 +0.0 + 0 +VERTEX + 5 +2903 + 8 +BEMASSUNG + 10 +7145.0 + 20 +7390.0 + 30 +0.0 + 0 +SEQEND + 5 +2904 + 8 +BEMASSUNG + 0 +POLYLINE + 5 +1D7C + 8 +BEMASSUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2905 + 8 +BEMASSUNG + 10 +7215.0 + 20 +7065.0 + 30 +0.0 + 0 +VERTEX + 5 +2906 + 8 +BEMASSUNG + 10 +7215.0 + 20 +7385.0 + 30 +0.0 + 0 +SEQEND + 5 +2907 + 8 +BEMASSUNG + 0 +POLYLINE + 5 +1D80 + 8 +BEMASSUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2908 + 8 +BEMASSUNG + 10 +7785.0 + 20 +7740.0 + 30 +0.0 + 0 +VERTEX + 5 +2909 + 8 +BEMASSUNG + 10 +7285.0 + 20 +7655.0 + 30 +0.0 + 0 +SEQEND + 5 +290A + 8 +BEMASSUNG + 0 +POLYLINE + 5 +1D84 + 8 +BEMASSUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +290B + 8 +BEMASSUNG + 10 +8450.0 + 20 +7650.0 + 30 +0.0 + 0 +VERTEX + 5 +290C + 8 +BEMASSUNG + 10 +8405.0 + 20 +7515.0 + 30 +0.0 + 0 +SEQEND + 5 +290D + 8 +BEMASSUNG + 0 +POLYLINE + 5 +1D88 + 8 +BEMASSUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +290E + 8 +BEMASSUNG + 10 +9105.0 + 20 +8585.0 + 30 +0.0 + 0 +VERTEX + 5 +290F + 8 +BEMASSUNG + 10 +8875.0 + 20 +8815.0 + 30 +0.0 + 0 +SEQEND + 5 +2910 + 8 +BEMASSUNG + 0 +POLYLINE + 5 +1D8C + 8 +BEMASSUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2911 + 8 +BEMASSUNG + 10 +6350.0 + 20 +7655.0 + 30 +0.0 + 0 +VERTEX + 5 +2912 + 8 +BEMASSUNG + 10 +6480.0 + 20 +7445.0 + 30 +0.0 + 0 +SEQEND + 5 +2913 + 8 +BEMASSUNG + 0 +POLYLINE + 5 +1D90 + 8 +BEMASSUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2914 + 8 +BEMASSUNG + 10 +6040.0 + 20 +6505.0 + 30 +0.0 + 0 +VERTEX + 5 +2915 + 8 +BEMASSUNG + 10 +5680.0 + 20 +6820.0 + 30 +0.0 + 0 +SEQEND + 5 +2916 + 8 +BEMASSUNG + 0 +CIRCLE + 5 +1D94 + 8 +BEMASSUNG + 10 +5020.0 + 20 +5845.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1D95 + 8 +BEMASSUNG + 10 +4000.0 + 20 +6410.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1D96 + 8 +BEMASSUNG + 10 +6810.0 + 20 +5445.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1D97 + 8 +BEMASSUNG + 10 +5785.0 + 20 +5210.0 + 30 +0.0 + 40 +125.0 + 0 +POLYLINE + 5 +1D98 + 8 +BEMASSUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2917 + 8 +BEMASSUNG + 10 +4101.10061 + 20 +6337.02211 + 30 +0.0 + 0 +VERTEX + 5 +2918 + 8 +BEMASSUNG + 10 +4205.0 + 20 +5995.0 + 30 +0.0 + 0 +SEQEND + 5 +2919 + 8 +BEMASSUNG + 0 +POLYLINE + 5 +1D9C + 8 +BEMASSUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +291A + 8 +BEMASSUNG + 10 +4895.0 + 20 +5845.0 + 30 +0.0 + 0 +VERTEX + 5 +291B + 8 +BEMASSUNG + 10 +4390.0 + 20 +5845.0 + 30 +0.0 + 0 +SEQEND + 5 +291C + 8 +BEMASSUNG + 0 +POLYLINE + 5 +1DA0 + 8 +BEMASSUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +291D + 8 +BEMASSUNG + 10 +5785.0 + 20 +5085.0 + 30 +0.0 + 0 +VERTEX + 5 +291E + 8 +BEMASSUNG + 10 +5890.0 + 20 +4820.0 + 30 +0.0 + 0 +SEQEND + 5 +291F + 8 +BEMASSUNG + 0 +POLYLINE + 5 +1DA4 + 8 +BEMASSUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2920 + 8 +BEMASSUNG + 10 +6685.0 + 20 +5445.0 + 30 +0.0 + 0 +VERTEX + 5 +2921 + 8 +BEMASSUNG + 10 +6435.0 + 20 +5445.0 + 30 +0.0 + 0 +SEQEND + 5 +2922 + 8 +BEMASSUNG + 0 +CIRCLE + 5 +1DA8 + 8 +BEMASSUNG + 10 +8980.0 + 20 +5145.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1DA9 + 8 +BEMASSUNG + 10 +9395.0 + 20 +5145.0 + 30 +0.0 + 40 +125.0 + 0 +POLYLINE + 5 +1DAA + 8 +BEMASSUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2923 + 8 +BEMASSUNG + 10 +8975.0 + 20 +5020.0 + 30 +0.0 + 0 +VERTEX + 5 +2924 + 8 +BEMASSUNG + 10 +8975.0 + 20 +4515.0 + 30 +0.0 + 0 +SEQEND + 5 +2925 + 8 +BEMASSUNG + 0 +POLYLINE + 5 +1DAE + 8 +BEMASSUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2926 + 8 +BEMASSUNG + 10 +9400.0 + 20 +5020.0 + 30 +0.0 + 0 +VERTEX + 5 +2927 + 8 +BEMASSUNG + 10 +9400.0 + 20 +4420.0 + 30 +0.0 + 0 +SEQEND + 5 +2928 + 8 +BEMASSUNG + 0 +TEXT + 5 +1DB2 + 8 +BEMASSUNG + 10 +9185.416667 + 20 +8461.25 + 30 +0.0 + 40 +87.5 + 1 +1 + 72 + 4 + 11 +9200.0 + 21 +8505.0 + 31 +0.0 + 0 +TEXT + 5 +1DB3 + 8 +BEMASSUNG + 10 +8500.833333 + 20 +7696.25 + 30 +0.0 + 40 +87.5 + 1 +3 + 72 + 4 + 11 +8530.0 + 21 +7740.0 + 31 +0.0 + 0 +TEXT + 5 +1DB4 + 8 +BEMASSUNG + 10 +7870.833333 + 20 +7716.25 + 30 +0.0 + 40 +87.5 + 1 +4 + 72 + 4 + 11 +7900.0 + 21 +7760.0 + 31 +0.0 + 0 +TEXT + 5 +1DB5 + 8 +BEMASSUNG + 10 +6105.833333 + 20 +6371.25 + 30 +0.0 + 40 +87.5 + 1 +2 + 72 + 4 + 11 +6135.0 + 21 +6415.0 + 31 +0.0 + 0 +TEXT + 5 +1DB6 + 8 +BEMASSUNG + 10 +6775.833333 + 20 +5406.25 + 30 +0.0 + 40 +87.5 + 1 +5 + 72 + 4 + 11 +6805.0 + 21 +5450.0 + 31 +0.0 + 0 +TEXT + 5 +1DB7 + 8 +BEMASSUNG + 10 +7885.833333 + 20 +5096.25 + 30 +0.0 + 40 +87.5 + 1 +6 + 72 + 4 + 11 +7915.0 + 21 +5140.0 + 31 +0.0 + 0 +TEXT + 5 +1DB8 + 8 +BEMASSUNG + 10 +5005.833333 + 20 +5791.25 + 30 +0.0 + 40 +87.5 + 1 +7 + 72 + 4 + 11 +5035.0 + 21 +5835.0 + 31 +0.0 + 0 +TEXT + 5 +1DB9 + 8 +BEMASSUNG + 10 +8315.833333 + 20 +5101.25 + 30 +0.0 + 40 +87.5 + 1 +8 + 72 + 4 + 11 +8345.0 + 21 +5145.0 + 31 +0.0 + 0 +TEXT + 5 +1DBA + 8 +LEGENDE-70 + 10 +1450.0 + 20 +13955.0 + 30 +0.0 + 40 +175.0 + 1 +LEGENDE + 0 +CIRCLE + 5 +1DBB + 8 +BEMASSUNG + 10 +1395.0 + 20 +13475.0 + 30 +0.0 + 40 +125.0 + 0 +TEXT + 5 +1DBC + 8 +LEGENDE-35 + 10 +1380.416667 + 20 +13426.25 + 30 +0.0 + 40 +87.5 + 1 +1 + 72 + 4 + 11 +1395.0 + 21 +13470.0 + 31 +0.0 + 0 +CIRCLE + 5 +1DBD + 8 +BEMASSUNG + 10 +1395.0 + 20 +13185.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1DBE + 8 +BEMASSUNG + 10 +1395.0 + 20 +12895.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1DBF + 8 +BEMASSUNG + 10 +1395.0 + 20 +12605.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1DC0 + 8 +BEMASSUNG + 10 +1395.0 + 20 +12315.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1DC1 + 8 +BEMASSUNG + 10 +1395.0 + 20 +12025.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1DC2 + 8 +BEMASSUNG + 10 +1395.0 + 20 +11735.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1DC3 + 8 +BEMASSUNG + 10 +1395.0 + 20 +11445.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1DC4 + 8 +BEMASSUNG + 10 +1395.0 + 20 +11155.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1DC5 + 8 +BEMASSUNG + 10 +1395.0 + 20 +10865.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1DC6 + 8 +BEMASSUNG + 10 +1395.0 + 20 +10575.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1DC7 + 8 +BEMASSUNG + 10 +1395.0 + 20 +10285.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1DC8 + 8 +BEMASSUNG + 10 +1395.0 + 20 +9995.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1DC9 + 8 +BEMASSUNG + 10 +1395.0 + 20 +9705.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1DCA + 8 +BEMASSUNG + 10 +1395.0 + 20 +9415.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1DCB + 8 +BEMASSUNG + 10 +1395.0 + 20 +9125.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1DCC + 8 +BEMASSUNG + 10 +1395.0 + 20 +8835.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1DCD + 8 +BEMASSUNG + 10 +1395.0 + 20 +8545.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1DCE + 8 +BEMASSUNG + 10 +1395.0 + 20 +8255.0 + 30 +0.0 + 40 +125.0 + 0 +TEXT + 5 +1DCF + 8 +LEGENDE-35 + 10 +1355.833333 + 20 +13146.25 + 30 +0.0 + 40 +87.5 + 1 +2 + 72 + 4 + 11 +1385.0 + 21 +13190.0 + 31 +0.0 + 0 +TEXT + 5 +1DD0 + 8 +LEGENDE-35 + 10 +1365.833333 + 20 +12856.25 + 30 +0.0 + 40 +87.5 + 1 +3 + 72 + 4 + 11 +1395.0 + 21 +12900.0 + 31 +0.0 + 0 +TEXT + 5 +1DD1 + 8 +LEGENDE-35 + 10 +1355.833333 + 20 +12556.25 + 30 +0.0 + 40 +87.5 + 1 +4 + 72 + 4 + 11 +1385.0 + 21 +12600.0 + 31 +0.0 + 0 +TEXT + 5 +1DD2 + 8 +LEGENDE-35 + 10 +1370.833333 + 20 +12271.25 + 30 +0.0 + 40 +87.5 + 1 +5 + 72 + 4 + 11 +1400.0 + 21 +12315.0 + 31 +0.0 + 0 +TEXT + 5 +1DD3 + 8 +LEGENDE-35 + 10 +1375.833333 + 20 +11996.25 + 30 +0.0 + 40 +87.5 + 1 +6 + 72 + 4 + 11 +1405.0 + 21 +12040.0 + 31 +0.0 + 0 +TEXT + 5 +1DD4 + 8 +LEGENDE-35 + 10 +1365.833333 + 20 +11701.25 + 30 +0.0 + 40 +87.5 + 1 +7 + 72 + 4 + 11 +1395.0 + 21 +11745.0 + 31 +0.0 + 0 +TEXT + 5 +1DD5 + 8 +LEGENDE-35 + 10 +1365.833333 + 20 +11401.25 + 30 +0.0 + 40 +87.5 + 1 +8 + 72 + 4 + 11 +1395.0 + 21 +11445.0 + 31 +0.0 + 0 +TEXT + 5 +1DD6 + 8 +LEGENDE-35 + 10 +1360.833333 + 20 +11096.25 + 30 +0.0 + 40 +87.5 + 1 +9 + 72 + 4 + 11 +1390.0 + 21 +11140.0 + 31 +0.0 + 0 +TEXT + 5 +1DD7 + 8 +LEGENDE-35 + 10 +1358.958333 + 20 +10826.25 + 30 +0.0 + 40 +87.5 + 1 +10 + 72 + 4 + 11 +1410.0 + 21 +10870.0 + 31 +0.0 + 0 +TEXT + 5 +1DD8 + 8 +LEGENDE-35 + 10 +1356.25 + 20 +10531.25 + 30 +0.0 + 40 +87.5 + 1 +11 + 72 + 4 + 11 +1400.0 + 21 +10575.0 + 31 +0.0 + 0 +TEXT + 5 +1DD9 + 8 +LEGENDE-35 + 10 +1341.666667 + 20 +10221.25 + 30 +0.0 + 40 +87.5 + 1 +12 + 72 + 4 + 11 +1400.0 + 21 +10265.0 + 31 +0.0 + 0 +TEXT + 5 +1DDA + 8 +LEGENDE-35 + 10 +1331.666667 + 20 +9951.25 + 30 +0.0 + 40 +87.5 + 1 +13 + 72 + 4 + 11 +1390.0 + 21 +9995.0 + 31 +0.0 + 0 +TEXT + 5 +1DDB + 8 +LEGENDE-35 + 10 +1336.666667 + 20 +9671.25 + 30 +0.0 + 40 +87.5 + 1 +14 + 72 + 4 + 11 +1395.0 + 21 +9715.0 + 31 +0.0 + 0 +TEXT + 5 +1DDC + 8 +LEGENDE-35 + 10 +1341.666667 + 20 +9376.25 + 30 +0.0 + 40 +87.5 + 1 +15 + 72 + 4 + 11 +1400.0 + 21 +9420.0 + 31 +0.0 + 0 +TEXT + 5 +1DDD + 8 +LEGENDE-35 + 10 +1331.666667 + 20 +9061.25 + 30 +0.0 + 40 +87.5 + 1 +16 + 72 + 4 + 11 +1390.0 + 21 +9105.0 + 31 +0.0 + 0 +TEXT + 5 +1DDE + 8 +LEGENDE-35 + 10 +1336.666667 + 20 +8781.25 + 30 +0.0 + 40 +87.5 + 1 +17 + 72 + 4 + 11 +1395.0 + 21 +8825.0 + 31 +0.0 + 0 +TEXT + 5 +1DDF + 8 +LEGENDE-35 + 10 +1341.666667 + 20 +8486.25 + 30 +0.0 + 40 +87.5 + 1 +18 + 72 + 4 + 11 +1400.0 + 21 +8530.0 + 31 +0.0 + 0 +TEXT + 5 +1DE0 + 8 +LEGENDE-35 + 10 +1316.666667 + 20 +8186.25 + 30 +0.0 + 40 +87.5 + 1 +19 + 72 + 4 + 11 +1375.0 + 21 +8230.0 + 31 +0.0 + 0 +TEXT + 5 +1DE1 + 8 +LEGENDE-35 + 10 +1621.834543 + 20 +13421.828626 + 30 +0.0 + 40 +87.5 + 1 +POS 2 + 72 + 4 + 11 +1826.00121 + 21 +13465.578626 + 31 +0.0 + 0 +TEXT + 5 +1DE2 + 8 +LEGENDE-35 + 10 +1621.988991 + 20 +13131.25 + 30 +0.0 + 40 +87.5 + 1 +POS 1 + 72 + 4 + 11 +1811.572324 + 21 +13175.0 + 31 +0.0 + 0 +TEXT + 5 +1DE3 + 8 +LEGENDE-35 + 10 +1621.666667 + 20 +12841.25 + 30 +0.0 + 40 +87.5 + 1 +POS 16 + 72 + 4 + 11 +1855.0 + 21 +12885.0 + 31 +0.0 + 0 +TEXT + 5 +1DE4 + 8 +LEGENDE-35 + 10 +1626.278865 + 20 +12551.25 + 30 +0.0 + 40 +87.5 + 1 +POS 8 + 72 + 4 + 11 +1830.445532 + 21 +12595.0 + 31 +0.0 + 0 +TEXT + 5 +1DE5 + 8 +LEGENDE-35 + 10 +1621.666667 + 20 +12261.25 + 30 +0.0 + 40 +87.5 + 1 +POS 17 + 72 + 4 + 11 +1855.0 + 21 +12305.0 + 31 +0.0 + 0 +TEXT + 5 +1DE6 + 8 +LEGENDE-35 + 10 +1621.666667 + 20 +11971.25 + 30 +0.0 + 40 +87.5 + 1 +POS 13 + 72 + 4 + 11 +1855.0 + 21 +12015.0 + 31 +0.0 + 0 +TEXT + 5 +1DE7 + 8 +LEGENDE-35 + 10 +1622.282372 + 20 +11681.720375 + 30 +0.0 + 40 +87.5 + 1 +POS 10 + 72 + 4 + 11 +1848.324039 + 21 +11725.470375 + 31 +0.0 + 0 +TEXT + 5 +1DE8 + 8 +LEGENDE-35 + 10 +1621.733705 + 20 +11391.25 + 30 +0.0 + 40 +87.5 + 1 +POS 24 + 72 + 4 + 11 +1869.650372 + 21 +11435.0 + 31 +0.0 + 0 +TEXT + 5 +1DE9 + 8 +LEGENDE-35 + 10 +1621.666667 + 20 +11101.25 + 30 +0.0 + 40 +87.5 + 1 +POS 12 + 72 + 4 + 11 +1855.0 + 21 +11145.0 + 31 +0.0 + 0 +TEXT + 5 +1DEA + 8 +LEGENDE-35 + 10 +1621.988991 + 20 +10811.25 + 30 +0.0 + 40 +87.5 + 1 +POS 7 + 72 + 4 + 11 +1826.155657 + 21 +10855.0 + 31 +0.0 + 0 +TEXT + 5 +1DEB + 8 +LEGENDE-35 + 10 +1622.561615 + 20 +10520.230592 + 30 +0.0 + 40 +87.5 + 1 +POS 20 + 72 + 4 + 11 +1863.186615 + 21 +10563.980592 + 31 +0.0 + 0 +TEXT + 5 +1DEC + 8 +LEGENDE-35 + 10 +1621.666667 + 20 +10231.25 + 30 +0.0 + 40 +87.5 + 1 +POS 21 + 72 + 4 + 11 +1855.0 + 21 +10275.0 + 31 +0.0 + 0 +TEXT + 5 +1DED + 8 +LEGENDE-35 + 10 +1623.060305 + 20 +9932.919087 + 30 +0.0 + 40 +87.5 + 1 +POS 22 + 72 + 4 + 11 +1870.976972 + 21 +9976.669087 + 31 +0.0 + 0 +CIRCLE + 5 +1DEE + 8 +BEMASSUNG + 10 +9405.0 + 20 +6665.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1DEF + 8 +BEMASSUNG + 10 +11240.0 + 20 +6665.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1DF0 + 8 +BEMASSUNG + 10 +11240.0 + 20 +5145.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1DF1 + 8 +BEMASSUNG + 10 +15760.0 + 20 +7130.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1DF2 + 8 +BEMASSUNG + 10 +17415.0 + 20 +7115.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1DF3 + 8 +BEMASSUNG + 10 +17415.0 + 20 +6280.0 + 30 +0.0 + 40 +125.0 + 0 +POLYLINE + 5 +1DF4 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2929 + 8 +LEGENDE-35 + 10 +15760.0 + 20 +7255.0 + 30 +0.0 + 0 +VERTEX + 5 +292A + 8 +LEGENDE-35 + 10 +15760.0 + 20 +7560.0 + 30 +0.0 + 0 +SEQEND + 5 +292B + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +1DF8 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +292C + 8 +LEGENDE-35 + 10 +17326.525084 + 20 +7203.265264 + 30 +0.0 + 0 +VERTEX + 5 +292D + 8 +LEGENDE-35 + 10 +16855.0 + 20 +7380.0 + 30 +0.0 + 0 +SEQEND + 5 +292E + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +1DFC + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +292F + 8 +LEGENDE-35 + 10 +17290.071118 + 20 +6280.793494 + 30 +0.0 + 0 +VERTEX + 5 +2930 + 8 +LEGENDE-35 + 10 +16860.21552 + 20 +6280.793494 + 30 +0.0 + 0 +SEQEND + 5 +2931 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +1E00 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2932 + 8 +LEGENDE-35 + 10 +11114.725311 + 20 +6665.664001 + 30 +0.0 + 0 +VERTEX + 5 +2933 + 8 +LEGENDE-35 + 10 +10638.838913 + 20 +6665.664001 + 30 +0.0 + 0 +SEQEND + 5 +2934 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +1E04 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2935 + 8 +LEGENDE-35 + 10 +11151.552386 + 20 +5056.67299 + 30 +0.0 + 0 +VERTEX + 5 +2936 + 8 +LEGENDE-35 + 10 +10663.322645 + 20 +4809.171305 + 30 +0.0 + 0 +SEQEND + 5 +2937 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +1E08 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2938 + 8 +LEGENDE-35 + 10 +9280.134358 + 20 +6665.854545 + 30 +0.0 + 0 +VERTEX + 5 +2939 + 8 +LEGENDE-35 + 10 +8740.758683 + 20 +6665.854545 + 30 +0.0 + 0 +SEQEND + 5 +293A + 8 +LEGENDE-35 + 0 +CIRCLE + 5 +1E0C + 8 +BEMASSUNG + 10 +10184.280346 + 20 +9332.034676 + 30 +0.0 + 40 +125.0 + 0 +POLYLINE + 5 +1E0D + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +293B + 8 +LEGENDE-35 + 10 +10257.568146 + 20 +9433.283077 + 30 +0.0 + 0 +VERTEX + 5 +293C + 8 +LEGENDE-35 + 10 +10475.477384 + 20 +9660.984177 + 30 +0.0 + 0 +SEQEND + 5 +293D + 8 +LEGENDE-35 + 0 +CIRCLE + 5 +1E11 + 8 +BEMASSUNG + 10 +5020.0 + 20 +5264.7418 + 30 +0.0 + 40 +125.0 + 0 +POLYLINE + 5 +1E12 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +293E + 8 +LEGENDE-35 + 10 +4894.359634 + 20 +5258.46652 + 30 +0.0 + 0 +VERTEX + 5 +293F + 8 +LEGENDE-35 + 10 +4485.394725 + 20 +5258.46652 + 30 +0.0 + 0 +SEQEND + 5 +2940 + 8 +LEGENDE-35 + 0 +TEXT + 5 +1E16 + 8 +LEGENDE-35 + 10 +11207.07242 + 20 +6614.037448 + 30 +0.0 + 40 +87.5 + 1 +9 + 72 + 4 + 11 +11236.239087 + 21 +6657.787448 + 31 +0.0 + 0 +TEXT + 5 +1E17 + 8 +LEGENDE-35 + 10 +10130.690719 + 20 +9283.383852 + 30 +0.0 + 40 +87.5 + 1 +10 + 72 + 4 + 11 +10181.732386 + 21 +9327.133852 + 31 +0.0 + 0 +TEXT + 5 +1E18 + 8 +LEGENDE-35 + 10 +15721.926243 + 20 +7083.643251 + 30 +0.0 + 40 +87.5 + 1 +11 + 72 + 4 + 11 +15765.676243 + 21 +7127.393251 + 31 +0.0 + 0 +TEXT + 5 +1E19 + 8 +LEGENDE-35 + 10 +17347.015724 + 20 +7067.763137 + 30 +0.0 + 40 +87.5 + 1 +12 + 72 + 4 + 11 +17405.349058 + 21 +7111.513137 + 31 +0.0 + 0 +TEXT + 5 +1E1A + 8 +LEGENDE-35 + 10 +17366.081614 + 20 +6235.646893 + 30 +0.0 + 40 +87.5 + 1 +13 + 72 + 4 + 11 +17424.414948 + 21 +6279.396893 + 31 +0.0 + 0 +TEXT + 5 +1E1B + 8 +LEGENDE-35 + 10 +9340.82076 + 20 +6613.831037 + 30 +0.0 + 40 +87.5 + 1 +14 + 72 + 4 + 11 +9399.154093 + 21 +6657.581037 + 31 +0.0 + 0 +CIRCLE + 5 +1E1C + 8 +BEMASSUNG + 10 +15605.0 + 20 +5145.0 + 30 +0.0 + 40 +125.0 + 0 +POLYLINE + 5 +1E1D + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2941 + 8 +LEGENDE-35 + 10 +15556.912309 + 20 +5029.691846 + 30 +0.0 + 0 +VERTEX + 5 +2942 + 8 +LEGENDE-35 + 10 +15520.0 + 20 +4750.0 + 30 +0.0 + 0 +SEQEND + 5 +2943 + 8 +LEGENDE-35 + 0 +TEXT + 5 +1E21 + 8 +LEGENDE-35 + 10 +4958.096108 + 20 +5218.924713 + 30 +0.0 + 40 +87.5 + 1 +15 + 72 + 4 + 11 +5016.429441 + 21 +5262.674713 + 31 +0.0 + 0 +TEXT + 5 +1E22 + 8 +LEGENDE-35 + 10 +8911.232818 + 20 +5104.715156 + 30 +0.0 + 40 +87.5 + 1 +16 + 72 + 4 + 11 +8969.566152 + 21 +5148.465156 + 31 +0.0 + 0 +TEXT + 5 +1E23 + 8 +LEGENDE-35 + 10 +9391.087606 + 20 +5148.088807 + 30 +0.0 + 40 +3.189831 + 1 +17 + 50 +44.985205 + 72 + 4 + 11 +9391.464211 + 21 +5150.720187 + 31 +0.0 + 0 +TEXT + 5 +1E24 + 8 +LEGENDE-35 + 10 +9341.666667 + 20 +5101.25 + 30 +0.0 + 40 +87.5 + 1 +17 + 72 + 4 + 11 +9400.0 + 21 +5145.0 + 31 +0.0 + 0 +TEXT + 5 +1E25 + 8 +LEGENDE-35 + 10 +2321.834543 + 20 +13421.828626 + 30 +0.0 + 40 +87.5 + 1 +SPARREN + 0 +TEXT + 5 +1E26 + 8 +LEGENDE-35 + 10 +2321.988991 + 20 +13131.25 + 30 +0.0 + 40 +87.5 + 1 +SPARREN + 0 +TEXT + 5 +1E27 + 8 +LEGENDE-35 + 10 +2321.666667 + 20 +12841.25 + 30 +0.0 + 40 +87.5 + 1 +ZANGE + 0 +TEXT + 5 +1E28 + 8 +LEGENDE-35 + 10 +2326.278865 + 20 +12551.25 + 30 +0.0 + 40 +87.5 + 1 +MITTELPFETTE + 0 +TEXT + 5 +1E29 + 8 +LEGENDE-35 + 10 +2321.666667 + 20 +12261.25 + 30 +0.0 + 40 +87.5 + 1 +STREBE + 0 +TEXT + 5 +1E2A + 8 +LEGENDE-35 + 10 +2321.666667 + 20 +11971.25 + 30 +0.0 + 40 +87.5 + 1 +STIEL + 0 +TEXT + 5 +1E2B + 8 +LEGENDE-35 + 10 +2322.282372 + 20 +11681.720375 + 30 +0.0 + 40 +87.5 + 1 +FUSSPFETTE + 0 +TEXT + 5 +1E2C + 8 +LEGENDE-35 + 10 +2321.733705 + 20 +11391.25 + 30 +0.0 + 40 +87.5 + 1 +FUSSCHWELLE + 0 +TEXT + 5 +1E2D + 8 +LEGENDE-35 + 10 +2321.666667 + 20 +11101.25 + 30 +0.0 + 40 +87.5 + 1 +STIEL + 0 +TEXT + 5 +1E2E + 8 +LEGENDE-35 + 10 +2321.988991 + 20 +10811.25 + 30 +0.0 + 40 +87.5 + 1 +FIRSTPFETTE + 0 +TEXT + 5 +1E2F + 8 +LEGENDE-35 + 10 +2322.561615 + 20 +10520.230592 + 30 +0.0 + 40 +87.5 + 1 +GAUBENSPARREN + 0 +TEXT + 5 +1E30 + 8 +LEGENDE-35 + 10 +2321.666667 + 20 +10231.25 + 30 +0.0 + 40 +87.5 + 1 +GAUBENSTURZ + 0 +TEXT + 5 +1E31 + 8 +LEGENDE-35 + 10 +2323.060305 + 20 +9932.919087 + 30 +0.0 + 40 +87.5 + 1 +GAUBENSTIEL + 0 +TEXT + 5 +1E32 + 8 +LEGENDE-35 + 10 +3633.834543 + 20 +13421.828626 + 30 +0.0 + 40 +87.5 + 1 +NH S10 + 0 +TEXT + 5 +1E33 + 8 +LEGENDE-35 + 10 +3633.834543 + 20 +13131.828626 + 30 +0.0 + 40 +87.5 + 1 +NH S10 + 0 +TEXT + 5 +1E34 + 8 +LEGENDE-35 + 10 +3633.834543 + 20 +12841.828626 + 30 +0.0 + 40 +87.5 + 1 +NH S10 + 0 +TEXT + 5 +1E35 + 8 +LEGENDE-35 + 10 +3633.834543 + 20 +12551.828626 + 30 +0.0 + 40 +87.5 + 1 +NH S10 + 0 +TEXT + 5 +1E36 + 8 +LEGENDE-35 + 10 +3633.834543 + 20 +12261.828626 + 30 +0.0 + 40 +87.5 + 1 +NH S10 + 0 +TEXT + 5 +1E37 + 8 +LEGENDE-35 + 10 +3633.834543 + 20 +11971.828626 + 30 +0.0 + 40 +87.5 + 1 +NH S10 + 0 +TEXT + 5 +1E38 + 8 +LEGENDE-35 + 10 +3633.834543 + 20 +11681.828626 + 30 +0.0 + 40 +87.5 + 1 +NH S10 + 0 +TEXT + 5 +1E39 + 8 +LEGENDE-35 + 10 +3633.834543 + 20 +11391.828626 + 30 +0.0 + 40 +87.5 + 1 +NH S10 + 0 +TEXT + 5 +1E3A + 8 +LEGENDE-35 + 10 +3633.834543 + 20 +11101.828626 + 30 +0.0 + 40 +87.5 + 1 +NH S10 + 0 +TEXT + 5 +1E3B + 8 +LEGENDE-35 + 10 +3633.834543 + 20 +10811.828626 + 30 +0.0 + 40 +87.5 + 1 +NH S10 + 0 +TEXT + 5 +1E3C + 8 +LEGENDE-35 + 10 +3633.834543 + 20 +10521.828626 + 30 +0.0 + 40 +87.5 + 1 +NH S10 + 0 +TEXT + 5 +1E3D + 8 +LEGENDE-35 + 10 +3633.834543 + 20 +10231.828626 + 30 +0.0 + 40 +87.5 + 1 +NH S10 + 0 +TEXT + 5 +1E3E + 8 +LEGENDE-35 + 10 +3633.834543 + 20 +9941.828626 + 30 +0.0 + 40 +87.5 + 1 +NH S10 + 0 +TEXT + 5 +1E3F + 8 +LEGENDE-35 + 10 +4233.834543 + 20 +13421.828626 + 30 +0.0 + 40 +87.5 + 1 +8/18 + 0 +TEXT + 5 +1E40 + 8 +LEGENDE-35 + 10 +4233.834543 + 20 +13131.828626 + 30 +0.0 + 40 +87.5 + 1 +8/18 + 0 +TEXT + 5 +1E41 + 8 +LEGENDE-35 + 10 +4230.0 + 20 +12835.0 + 30 +0.0 + 40 +87.5 + 1 +2x6/16 + 0 +TEXT + 5 +1E42 + 8 +LEGENDE-35 + 10 +4215.0 + 20 +12550.0 + 30 +0.0 + 40 +87.5 + 1 +24/20 + 0 +TEXT + 5 +1E43 + 8 +LEGENDE-35 + 10 +4215.0 + 20 +12260.0 + 30 +0.0 + 40 +87.5 + 1 +18/18 + 0 +TEXT + 5 +1E44 + 8 +LEGENDE-35 + 10 +4215.0 + 20 +11970.0 + 30 +0.0 + 40 +87.5 + 1 +18/20 + 0 +TEXT + 5 +1E45 + 8 +LEGENDE-35 + 10 +4215.0 + 20 +11680.0 + 30 +0.0 + 40 +87.5 + 1 +18/18 + 0 +TEXT + 5 +1E46 + 8 +LEGENDE-35 + 10 +4215.0 + 20 +11390.0 + 30 +0.0 + 40 +87.5 + 1 +18/18 + 0 +TEXT + 5 +1E47 + 8 +LEGENDE-35 + 10 +4215.0 + 20 +11100.0 + 30 +0.0 + 40 +87.5 + 1 +16/16 + 0 +TEXT + 5 +1E48 + 8 +LEGENDE-35 + 10 +4215.0 + 20 +10810.0 + 30 +0.0 + 40 +87.5 + 1 +16/26 + 0 +TEXT + 5 +1E49 + 8 +LEGENDE-35 + 10 +4215.0 + 20 +10520.0 + 30 +0.0 + 40 +87.5 + 1 +8/14 + 0 +TEXT + 5 +1E4A + 8 +LEGENDE-35 + 10 +4215.0 + 20 +10230.0 + 30 +0.0 + 40 +87.5 + 1 +10/12 + 0 +TEXT + 5 +1E4B + 8 +LEGENDE-35 + 10 +4230.0 + 20 +9925.0 + 30 +0.0 + 40 +87.5 + 1 +10/10 + 0 +TEXT + 5 +1E4C + 8 +LEGENDE-35 + 10 +1623.060305 + 20 +9642.919087 + 30 +0.0 + 40 +87.5 + 1 +SCHORNSTEIN 5 ZÜGE + 0 +TEXT + 5 +1E4D + 8 +LEGENDE-35 + 10 +1623.060305 + 20 +9352.919087 + 30 +0.0 + 40 +87.5 + 1 +MW DIN 105 Mz-20-1.8-NF + 0 +TEXT + 5 +1E4E + 8 +LEGENDE-35 + 10 +1623.060305 + 20 +9062.919087 + 30 +0.0 + 40 +87.5 + 1 +PE-FOLIE + 0 +TEXT + 5 +1E4F + 8 +LEGENDE-35 + 10 +1623.060305 + 20 +8772.919087 + 30 +0.0 + 40 +87.5 + 1 +STAHLBETONDECKE B25 ZWEIACHSIG GESPANNT + 0 +TEXT + 5 +1E50 + 8 +LEGENDE-35 + 10 +3941.666667 + 20 +6366.25 + 30 +0.0 + 40 +87.5 + 1 +18 + 72 + 4 + 11 +4000.0 + 21 +6410.0 + 31 +0.0 + 0 +TEXT + 5 +1E51 + 8 +LEGENDE-35 + 10 +6210.0 + 20 +7716.25 + 30 +0.0 + 40 +87.5 + 1 +19 + 72 + 4 + 11 +6268.333333 + 21 +7760.0 + 31 +0.0 + 0 +TEXT + 5 +1E52 + 8 +LEGENDE-35 + 10 +5709.375 + 20 +5166.25 + 30 +0.0 + 40 +87.5 + 1 +20 + 72 + 4 + 11 +5775.0 + 21 +5210.0 + 31 +0.0 + 0 +TEXT + 5 +1E53 + 8 +LEGENDE-35 + 10 +7851.666667 + 20 +7026.25 + 30 +0.0 + 40 +87.5 + 1 +21 + 72 + 4 + 11 +7910.0 + 21 +7070.0 + 31 +0.0 + 0 +TEXT + 5 +1E54 + 8 +LEGENDE-35 + 10 +7837.083333 + 20 +6571.25 + 30 +0.0 + 40 +87.5 + 1 +22 + 72 + 4 + 11 +7910.0 + 21 +6615.0 + 31 +0.0 + 0 +TEXT + 5 +1E55 + 8 +LEGENDE-35 + 10 +11167.083333 + 20 +5106.25 + 30 +0.0 + 40 +87.5 + 1 +23 + 72 + 4 + 11 +11240.0 + 21 +5150.0 + 31 +0.0 + 0 +TEXT + 5 +1E56 + 8 +LEGENDE-35 + 10 +15517.083333 + 20 +5096.25 + 30 +0.0 + 40 +87.5 + 1 +24 + 72 + 4 + 11 +15590.0 + 21 +5140.0 + 31 +0.0 + 0 +CIRCLE + 5 +1E57 + 8 +BEMASSUNG + 10 +13144.280346 + 20 +12312.034676 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1E58 + 8 +BEMASSUNG + 10 +13904.280346 + 20 +12312.034676 + 30 +0.0 + 40 +125.0 + 0 +POLYLINE + 5 +1E59 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2944 + 8 +LEGENDE-35 + 10 +13900.0 + 20 +12436.038075 + 30 +0.0 + 0 +VERTEX + 5 +2945 + 8 +LEGENDE-35 + 10 +13900.0 + 20 +13265.0 + 30 +0.0 + 0 +VERTEX + 5 +2946 + 8 +LEGENDE-35 + 10 +13525.0 + 20 +13265.0 + 30 +0.0 + 0 +SEQEND + 5 +2947 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +1E5E + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2948 + 8 +LEGENDE-35 + 10 +13145.0 + 20 +12436.644763 + 30 +0.0 + 0 +VERTEX + 5 +2949 + 8 +LEGENDE-35 + 10 +13145.0 + 20 +13000.0 + 30 +0.0 + 0 +SEQEND + 5 +294A + 8 +LEGENDE-35 + 0 +TEXT + 5 +1E62 + 8 +LEGENDE-35 + 10 +13084.403036 + 20 +12272.508045 + 30 +0.0 + 40 +87.5 + 1 +17 + 72 + 4 + 11 +13142.736369 + 21 +12316.258045 + 31 +0.0 + 0 +TEXT + 5 +1E63 + 8 +LEGENDE-35 + 10 +13847.287928 + 20 +12278.897646 + 30 +0.0 + 40 +87.5 + 1 +16 + 72 + 4 + 11 +13905.621261 + 21 +12322.647646 + 31 +0.0 + 0 +TEXT + 5 +1E64 + 8 +LEGENDE-35 + 10 +1623.060305 + 20 +8482.919087 + 30 +0.0 + 40 +87.5 + 1 +SPARRENPFETTENANKER TYP 170 / RNa 4.0x40 + 0 +TEXT + 5 +1E65 + 8 +LEGENDE-35 + 10 +1623.060305 + 20 +8192.919087 + 30 +0.0 + 40 +87.5 + 1 +PASSBOLZEN M20 + 0 +TEXT + 5 +1E66 + 8 +LEGENDE-35 + 10 +16710.0 + 20 +13421.828626 + 30 +0.0 + 40 +87.5 + 1 +LOCHBLECH + 72 + 4 + 11 +17089.166667 + 21 +13465.578626 + 31 +0.0 + 0 +TEXT + 5 +1E67 + 8 +LEGENDE-70 + 10 +16500.0 + 20 +13955.0 + 30 +0.0 + 40 +175.0 + 1 +LEGENDE + 0 +CIRCLE + 5 +1E68 + 8 +BEMASSUNG + 10 +16445.0 + 20 +13475.0 + 30 +0.0 + 40 +125.0 + 0 +TEXT + 5 +1E69 + 8 +LEGENDE-35 + 10 +16379.375 + 20 +13426.25 + 30 +0.0 + 40 +87.5 + 1 +20 + 72 + 4 + 11 +16445.0 + 21 +13470.0 + 31 +0.0 + 0 +CIRCLE + 5 +1E6A + 8 +BEMASSUNG + 10 +16395.0 + 20 +5145.0 + 30 +0.0 + 40 +125.0 + 0 +POLYLINE + 5 +1E6B + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +294B + 8 +LEGENDE-35 + 10 +16346.912309 + 20 +5029.691846 + 30 +0.0 + 0 +VERTEX + 5 +294C + 8 +LEGENDE-35 + 10 +16330.0 + 20 +4735.0 + 30 +0.0 + 0 +SEQEND + 5 +294D + 8 +LEGENDE-35 + 0 +TEXT + 5 +1E6F + 8 +LEGENDE-35 + 10 +16322.083333 + 20 +5106.25 + 30 +0.0 + 40 +87.5 + 1 +25 + 72 + 4 + 11 +16395.0 + 21 +5150.0 + 31 +0.0 + 0 +CIRCLE + 5 +1E70 + 8 +BEMASSUNG + 10 +16445.0 + 20 +13185.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1E71 + 8 +BEMASSUNG + 10 +16445.0 + 20 +12895.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1E72 + 8 +BEMASSUNG + 10 +16445.0 + 20 +12605.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1E73 + 8 +BEMASSUNG + 10 +16445.0 + 20 +12315.0 + 30 +0.0 + 40 +125.0 + 0 +CIRCLE + 5 +1E74 + 8 +BEMASSUNG + 10 +16445.0 + 20 +12025.0 + 30 +0.0 + 40 +125.0 + 0 +TEXT + 5 +1E75 + 8 +LEGENDE-35 + 10 +16371.666667 + 20 +13146.25 + 30 +0.0 + 40 +87.5 + 1 +21 + 72 + 4 + 11 +16430.0 + 21 +13190.0 + 31 +0.0 + 0 +TEXT + 5 +1E76 + 8 +LEGENDE-35 + 10 +16367.083333 + 20 +12850.0 + 30 +0.0 + 40 +87.5 + 1 +22 + 72 + 4 + 11 +16440.0 + 21 +12893.75 + 31 +0.0 + 0 +TEXT + 5 +1E77 + 8 +LEGENDE-35 + 10 +16372.083333 + 20 +12570.0 + 30 +0.0 + 40 +87.5 + 1 +23 + 72 + 4 + 11 +16445.0 + 21 +12613.75 + 31 +0.0 + 0 +TEXT + 5 +1E78 + 8 +LEGENDE-35 + 10 +16367.083333 + 20 +12266.25 + 30 +0.0 + 40 +87.5 + 1 +24 + 72 + 4 + 11 +16440.0 + 21 +12310.0 + 31 +0.0 + 0 +TEXT + 5 +1E79 + 8 +LEGENDE-35 + 10 +16372.083333 + 20 +11991.25 + 30 +0.0 + 40 +87.5 + 1 +25 + 72 + 4 + 11 +16445.0 + 21 +12035.0 + 31 +0.0 + 0 +TEXT + 5 +1E7A + 8 +LEGENDE-35 + 10 +16710.0 + 20 +13131.828626 + 30 +0.0 + 40 +87.5 + 1 +PASSBOLZEN M12 + 0 +TEXT + 5 +1E7B + 8 +LEGENDE-35 + 10 +16710.0 + 20 +12841.828626 + 30 +0.0 + 40 +87.5 + 1 +SICHERUNGSBOLZEN M10 + 0 +TEXT + 5 +1E7C + 8 +LEGENDE-35 + 10 +16710.0 + 20 +12551.828626 + 30 +0.0 + 40 +87.5 + 1 +WINKELVERBINDER TYP 90 /RNa 4.0x40 n=4/SCHENKEL + 0 +TEXT + 5 +1E7D + 8 +LEGENDE-35 + 10 +16710.0 + 20 +12261.828626 + 30 +0.0 + 40 +87.5 + 1 +KNAGGE NH S10 + 0 +TEXT + 5 +1E7E + 8 +LEGENDE-35 + 10 +16710.0 + 20 +11971.828626 + 30 +0.0 + 40 +87.5 + 1 +PETTENANKER M20 + 0 +POLYLINE + 5 +1E7F + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +294E + 8 +DETAILS + 10 +6065.0 + 20 +8300.0 + 30 +0.0 + 0 +VERTEX + 5 +294F + 8 +DETAILS + 10 +6065.0 + 20 +7240.0 + 30 +0.0 + 0 +VERTEX + 5 +2950 + 8 +DETAILS + 10 +8155.0 + 20 +7245.0 + 30 +0.0 + 0 +VERTEX + 5 +2951 + 8 +DETAILS + 10 +8155.0 + 20 +8300.0 + 30 +0.0 + 0 +SEQEND + 5 +2952 + 8 +DETAILS + 0 +TEXT + 5 +1E85 + 8 +DETAILS + 10 +6780.0 + 20 +8060.0 + 30 +0.0 + 40 +175.0 + 1 +D7 + 0 +POLYLINE + 5 +1E86 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +2953 + 8 +DETAILS + 10 +5415.0 + 20 +4950.0 + 30 +0.0 + 0 +VERTEX + 5 +2954 + 8 +DETAILS + 10 +5415.0 + 20 +3890.0 + 30 +0.0 + 0 +VERTEX + 5 +2955 + 8 +DETAILS + 10 +7505.0 + 20 +3890.0 + 30 +0.0 + 0 +VERTEX + 5 +2956 + 8 +DETAILS + 10 +7505.0 + 20 +4950.0 + 30 +0.0 + 0 +SEQEND + 5 +2957 + 8 +DETAILS + 0 +TEXT + 5 +1E8C + 8 +DETAILS + 10 +5480.0 + 20 +3980.0 + 30 +0.0 + 40 +175.0 + 1 +D7 + 0 +TEXT + 5 +1E8D + 8 +DETAILS + 10 +18905.0 + 20 +730.0 + 30 +0.0 + 40 +175.0 + 1 +SCHNITT DG + 0 +TEXT + 5 +1E8E + 8 +DETAILS + 10 +20650.0 + 20 +190.0 + 30 +0.0 + 40 +87.5 + 1 +4 + 0 +CIRCLE + 5 +1E8F + 8 +DETAILS + 10 +11365.0 + 20 +4515.0 + 30 +0.0 + 40 +322.374006 + 0 +TEXT + 5 +1E90 + 8 +DETAILS + 10 +10740.0 + 20 +4090.0 + 30 +0.0 + 40 +87.5 + 1 +AUSSCHNITT + 0 +TEXT + 5 +1E91 + 8 +DETAILS + 10 +10740.0 + 20 +3944.166667 + 30 +0.0 + 40 +87.5 + 1 + DECKE + 0 +POLYLINE + 5 +1E92 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 0 +VERTEX + 5 +2958 + 8 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2959 + 8 +0 + 10 +21025.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +295A + 8 +0 + 10 +21025.0 + 20 +14850.0 + 30 +0.0 + 0 +VERTEX + 5 +295B + 8 +0 + 10 +0.0 + 20 +14850.0 + 30 +0.0 + 0 +SEQEND + 5 +295C + 8 +0 + 0 +POLYLINE + 5 +1E98 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +5.9995 + 41 +5.9995 + 0 +VERTEX + 5 +295D + 8 +MAUERWERK + 10 +4211.99975 + 20 +4235.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +295E + 8 +MAUERWERK + 10 +4218.00025 + 20 +4235.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +295F + 8 +MAUERWERK + 0 +POLYLINE + 5 +1E9C + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +5.9995 + 41 +5.9995 + 0 +VERTEX + 5 +2960 + 8 +MAUERWERK + 10 +4361.99975 + 20 +4235.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2961 + 8 +MAUERWERK + 10 +4368.00025 + 20 +4235.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2962 + 8 +MAUERWERK + 0 +POLYLINE + 5 +1EA0 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +5.9995 + 41 +5.9995 + 0 +VERTEX + 5 +2963 + 8 +MAUERWERK + 10 +9091.99975 + 20 +4260.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2964 + 8 +MAUERWERK + 10 +9098.00025 + 20 +4260.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2965 + 8 +MAUERWERK + 0 +POLYLINE + 5 +1EA4 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +5.9995 + 41 +5.9995 + 0 +VERTEX + 5 +2966 + 8 +MAUERWERK + 10 +9236.99975 + 20 +4260.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2967 + 8 +MAUERWERK + 10 +9243.00025 + 20 +4260.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2968 + 8 +MAUERWERK + 0 +POLYLINE + 5 +1EA8 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +5.9995 + 41 +5.9995 + 0 +VERTEX + 5 +2969 + 8 +MAUERWERK + 10 +12011.99975 + 20 +4260.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +296A + 8 +MAUERWERK + 10 +12018.00025 + 20 +4260.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +296B + 8 +MAUERWERK + 0 +POLYLINE + 5 +1EAC + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +5.9995 + 41 +5.9995 + 0 +VERTEX + 5 +296C + 8 +MAUERWERK + 10 +11866.99975 + 20 +4260.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +296D + 8 +MAUERWERK + 10 +11873.00025 + 20 +4260.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +296E + 8 +MAUERWERK + 0 +POLYLINE + 5 +1EB0 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +5.9995 + 41 +5.9995 + 0 +VERTEX + 5 +296F + 8 +MAUERWERK + 10 +16726.99975 + 20 +4260.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2970 + 8 +MAUERWERK + 10 +16733.00025 + 20 +4260.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2971 + 8 +MAUERWERK + 0 +POLYLINE + 5 +1EB4 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +5.9995 + 41 +5.9995 + 0 +VERTEX + 5 +2972 + 8 +MAUERWERK + 10 +16871.99975 + 20 +4260.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2973 + 8 +MAUERWERK + 10 +16878.00025 + 20 +4260.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2974 + 8 +MAUERWERK + 0 +CIRCLE + 5 +1EB8 + 8 +BEMASSUNG + 10 +12700.0 + 20 +4095.0 + 30 +0.0 + 40 +125.0 + 0 +POLYLINE + 5 +1EB9 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2975 + 8 +0 + 10 +12580.0 + 20 +4130.0 + 30 +0.0 + 0 +VERTEX + 5 +2976 + 8 +0 + 10 +12020.0 + 20 +4255.0 + 30 +0.0 + 0 +SEQEND + 5 +2977 + 8 +0 + 0 +CIRCLE + 5 +1EBD + 8 +BEMASSUNG + 10 +16445.0 + 20 +11735.0 + 30 +0.0 + 40 +125.0 + 0 +TEXT + 5 +1EBE + 8 +BEMASSUNG + 10 +16372.083333 + 20 +11691.25 + 30 +0.0 + 40 +87.5 + 1 +26 + 72 + 4 + 11 +16445.0 + 21 +11735.0 + 31 +0.0 + 0 +TEXT + 5 +1EBF + 8 +BEMASSUNG + 10 +16710.0 + 20 +11681.828626 + 30 +0.0 + 40 +87.5 + 1 +RINGANKER BST III + 0 +TEXT + 5 +1EC0 + 8 +BEMASSUNG + 10 +12627.083333 + 20 +4051.25 + 30 +0.0 + 40 +87.5 + 1 +26 + 72 + 4 + 11 +12700.0 + 21 +4095.0 + 31 +0.0 + 0 +POLYLINE + 5 +1EC1 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2978 + 8 +HOLZ + 10 +16757.5 + 20 +5945.0 + 30 +0.0 + 0 +VERTEX + 5 +2979 + 8 +HOLZ + 10 +16757.5 + 20 +5997.106357 + 30 +0.0 + 0 +SEQEND + 5 +297A + 8 +HOLZ + 0 +POLYLINE + 5 +1EC5 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +297B + 8 +HOLZ + 10 +16757.5 + 20 +6209.35847 + 30 +0.0 + 0 +VERTEX + 5 +297C + 8 +HOLZ + 10 +16757.5 + 20 +7365.0 + 30 +0.0 + 0 +VERTEX + 5 +297D + 8 +HOLZ + 10 +16857.5 + 20 +7365.0 + 30 +0.0 + 0 +VERTEX + 5 +297E + 8 +HOLZ + 10 +16857.5 + 20 +6146.871535 + 30 +0.0 + 0 +SEQEND + 5 +297F + 8 +HOLZ + 0 +POLYLINE + 5 +1ECB + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2980 + 8 +HOLZ + 10 +16840.887603 + 20 +5945.0 + 30 +0.0 + 0 +VERTEX + 5 +2981 + 8 +HOLZ + 10 +16757.5 + 20 +5945.0 + 30 +0.0 + 0 +SEQEND + 5 +2982 + 8 +HOLZ + 0 +POLYLINE + 5 +1ECF + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2983 + 8 +DRAHTANKER + 10 +16756.759748 + 20 +6197.229936 + 30 +0.0 + 0 +VERTEX + 5 +2984 + 8 +DRAHTANKER + 10 +16756.759748 + 20 +6160.664852 + 30 +0.0 + 0 +SEQEND + 5 +2985 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1ED3 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2986 + 8 +DRAHTANKER + 10 +16756.759748 + 20 +6120.775653 + 30 +0.0 + 0 +VERTEX + 5 +2987 + 8 +DRAHTANKER + 10 +16756.759748 + 20 +6084.210569 + 30 +0.0 + 0 +SEQEND + 5 +2988 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1ED7 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2989 + 8 +DRAHTANKER + 10 +16756.759748 + 20 +6038.227117 + 30 +0.0 + 0 +VERTEX + 5 +298A + 8 +DRAHTANKER + 10 +16756.759748 + 20 +6001.662033 + 30 +0.0 + 0 +SEQEND + 5 +298B + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1EDB + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +298C + 8 +DRAHTANKER + 10 +16857.088667 + 20 +6146.814413 + 30 +0.0 + 0 +VERTEX + 5 +298D + 8 +DRAHTANKER + 10 +16857.088667 + 20 +6110.249329 + 30 +0.0 + 0 +SEQEND + 5 +298E + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1EDF + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +298F + 8 +DRAHTANKER + 10 +16857.088667 + 20 +6070.360068 + 30 +0.0 + 0 +VERTEX + 5 +2990 + 8 +DRAHTANKER + 10 +16857.088667 + 20 +6033.794984 + 30 +0.0 + 0 +SEQEND + 5 +2991 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1EE3 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2992 + 8 +DRAHTANKER + 10 +7135.0 + 20 +4825.0 + 30 +0.0 + 0 +VERTEX + 5 +2993 + 8 +DRAHTANKER + 10 +7230.0 + 20 +4825.0 + 30 +0.0 + 0 +VERTEX + 5 +2994 + 8 +DRAHTANKER + 10 +7230.0 + 20 +4610.0 + 30 +0.0 + 0 +VERTEX + 5 +2995 + 8 +DRAHTANKER + 10 +7135.0 + 20 +4610.0 + 30 +0.0 + 0 +SEQEND + 5 +2996 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1EE9 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2997 + 8 +HOLZ + 10 +7135.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +2998 + 8 +HOLZ + 10 +6032.810136 + 20 +4705.0 + 30 +0.0 + 0 +SEQEND + 5 +2999 + 8 +HOLZ + 0 +POLYLINE + 5 +1EED + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +299A + 8 +HOLZ + 10 +7082.5 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +299B + 8 +HOLZ + 10 +7135.0 + 20 +4705.0 + 30 +0.0 + 0 +SEQEND + 5 +299C + 8 +HOLZ + 0 +POLYLINE + 5 +1EF1 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +299D + 8 +HOLZ + 10 +7230.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +299E + 8 +HOLZ + 10 +7282.5 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +299F + 8 +HOLZ + 10 +7282.5 + 20 +7355.0 + 30 +0.0 + 0 +SEQEND + 5 +29A0 + 8 +HOLZ + 0 +POLYLINE + 5 +1EF6 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +29A1 + 8 +DRAHTANKER + 10 +7159.24975 + 20 +4805.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +29A2 + 8 +DRAHTANKER + 10 +7160.75025 + 20 +4805.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +29A3 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1EFA + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +29A4 + 8 +DRAHTANKER + 10 +7179.24975 + 20 +4805.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +29A5 + 8 +DRAHTANKER + 10 +7180.75025 + 20 +4805.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +29A6 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1EFE + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +29A7 + 8 +DRAHTANKER + 10 +7204.24975 + 20 +4805.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +29A8 + 8 +DRAHTANKER + 10 +7205.75025 + 20 +4805.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +29A9 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F02 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +29AA + 8 +DRAHTANKER + 10 +7159.24975 + 20 +4785.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +29AB + 8 +DRAHTANKER + 10 +7160.75025 + 20 +4785.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +29AC + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F06 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +29AD + 8 +DRAHTANKER + 10 +7179.24975 + 20 +4785.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +29AE + 8 +DRAHTANKER + 10 +7180.75025 + 20 +4785.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +29AF + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F0A + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +29B0 + 8 +DRAHTANKER + 10 +7204.24975 + 20 +4785.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +29B1 + 8 +DRAHTANKER + 10 +7205.75025 + 20 +4785.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +29B2 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F0E + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +29B3 + 8 +DRAHTANKER + 10 +7159.24975 + 20 +4765.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +29B4 + 8 +DRAHTANKER + 10 +7160.75025 + 20 +4765.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +29B5 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F12 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +29B6 + 8 +DRAHTANKER + 10 +7179.24975 + 20 +4765.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +29B7 + 8 +DRAHTANKER + 10 +7180.75025 + 20 +4765.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +29B8 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F16 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +29B9 + 8 +DRAHTANKER + 10 +7204.24975 + 20 +4765.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +29BA + 8 +DRAHTANKER + 10 +7205.75025 + 20 +4765.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +29BB + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F1A + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +29BC + 8 +DRAHTANKER + 10 +7159.24975 + 20 +4745.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +29BD + 8 +DRAHTANKER + 10 +7160.75025 + 20 +4745.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +29BE + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F1E + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +29BF + 8 +DRAHTANKER + 10 +7179.24975 + 20 +4745.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +29C0 + 8 +DRAHTANKER + 10 +7180.75025 + 20 +4745.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +29C1 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F22 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +29C2 + 8 +DRAHTANKER + 10 +7204.24975 + 20 +4745.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +29C3 + 8 +DRAHTANKER + 10 +7205.75025 + 20 +4745.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +29C4 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F26 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +29C5 + 8 +DRAHTANKER + 10 +7159.24975 + 20 +4725.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +29C6 + 8 +DRAHTANKER + 10 +7160.75025 + 20 +4725.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +29C7 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F2A + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +29C8 + 8 +DRAHTANKER + 10 +7179.24975 + 20 +4725.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +29C9 + 8 +DRAHTANKER + 10 +7180.75025 + 20 +4725.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +29CA + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F2E + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +29CB + 8 +DRAHTANKER + 10 +7204.24975 + 20 +4725.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +29CC + 8 +DRAHTANKER + 10 +7205.75025 + 20 +4725.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +29CD + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F32 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +29CE + 8 +DRAHTANKER + 10 +7159.24975 + 20 +4705.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +29CF + 8 +DRAHTANKER + 10 +7160.75025 + 20 +4705.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +29D0 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F36 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +29D1 + 8 +DRAHTANKER + 10 +7179.24975 + 20 +4705.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +29D2 + 8 +DRAHTANKER + 10 +7180.75025 + 20 +4705.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +29D3 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F3A + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +29D4 + 8 +DRAHTANKER + 10 +7204.24975 + 20 +4705.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +29D5 + 8 +DRAHTANKER + 10 +7205.75025 + 20 +4705.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +29D6 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F3E + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +29D7 + 8 +DRAHTANKER + 10 +7159.24975 + 20 +4685.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +29D8 + 8 +DRAHTANKER + 10 +7160.75025 + 20 +4685.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +29D9 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F42 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +29DA + 8 +DRAHTANKER + 10 +7179.24975 + 20 +4685.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +29DB + 8 +DRAHTANKER + 10 +7180.75025 + 20 +4685.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +29DC + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F46 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +29DD + 8 +DRAHTANKER + 10 +7204.24975 + 20 +4685.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +29DE + 8 +DRAHTANKER + 10 +7205.75025 + 20 +4685.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +29DF + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F4A + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +29E0 + 8 +DRAHTANKER + 10 +7159.24975 + 20 +4665.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +29E1 + 8 +DRAHTANKER + 10 +7160.75025 + 20 +4665.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +29E2 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F4E + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +29E3 + 8 +DRAHTANKER + 10 +7179.24975 + 20 +4665.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +29E4 + 8 +DRAHTANKER + 10 +7180.75025 + 20 +4665.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +29E5 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F52 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +29E6 + 8 +DRAHTANKER + 10 +7204.24975 + 20 +4665.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +29E7 + 8 +DRAHTANKER + 10 +7205.75025 + 20 +4665.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +29E8 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F56 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +29E9 + 8 +DRAHTANKER + 10 +7159.24975 + 20 +4645.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +29EA + 8 +DRAHTANKER + 10 +7160.75025 + 20 +4645.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +29EB + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F5A + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +29EC + 8 +DRAHTANKER + 10 +7179.24975 + 20 +4645.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +29ED + 8 +DRAHTANKER + 10 +7180.75025 + 20 +4645.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +29EE + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F5E + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +29EF + 8 +DRAHTANKER + 10 +7204.24975 + 20 +4645.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +29F0 + 8 +DRAHTANKER + 10 +7205.75025 + 20 +4645.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +29F1 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F62 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +29F2 + 8 +DRAHTANKER + 10 +7159.24975 + 20 +4625.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +29F3 + 8 +DRAHTANKER + 10 +7160.75025 + 20 +4625.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +29F4 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F66 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +29F5 + 8 +DRAHTANKER + 10 +7179.24975 + 20 +4625.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +29F6 + 8 +DRAHTANKER + 10 +7180.75025 + 20 +4625.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +29F7 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F6A + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +29F8 + 8 +DRAHTANKER + 10 +7204.24975 + 20 +4625.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +29F9 + 8 +DRAHTANKER + 10 +7205.75025 + 20 +4625.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +29FA + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F6E + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +29FB + 8 +DRAHTANKER + 10 +13880.0 + 20 +4825.0 + 30 +0.0 + 0 +VERTEX + 5 +29FC + 8 +DRAHTANKER + 10 +13975.0 + 20 +4825.0 + 30 +0.0 + 0 +VERTEX + 5 +29FD + 8 +DRAHTANKER + 10 +13975.0 + 20 +4610.0 + 30 +0.0 + 0 +VERTEX + 5 +29FE + 8 +DRAHTANKER + 10 +13880.0 + 20 +4610.0 + 30 +0.0 + 0 +SEQEND + 5 +29FF + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F74 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +2A00 + 8 +DRAHTANKER + 10 +13949.24975 + 20 +4625.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2A01 + 8 +DRAHTANKER + 10 +13950.75025 + 20 +4625.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2A02 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F78 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +2A03 + 8 +DRAHTANKER + 10 +13924.24975 + 20 +4625.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2A04 + 8 +DRAHTANKER + 10 +13925.75025 + 20 +4625.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2A05 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F7C + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +2A06 + 8 +DRAHTANKER + 10 +13904.24975 + 20 +4625.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2A07 + 8 +DRAHTANKER + 10 +13905.75025 + 20 +4625.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2A08 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F80 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +2A09 + 8 +DRAHTANKER + 10 +13949.24975 + 20 +4645.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2A0A + 8 +DRAHTANKER + 10 +13950.75025 + 20 +4645.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2A0B + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F84 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +2A0C + 8 +DRAHTANKER + 10 +13924.24975 + 20 +4645.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2A0D + 8 +DRAHTANKER + 10 +13925.75025 + 20 +4645.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2A0E + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F88 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +2A0F + 8 +DRAHTANKER + 10 +13904.24975 + 20 +4645.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2A10 + 8 +DRAHTANKER + 10 +13905.75025 + 20 +4645.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2A11 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F8C + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +2A12 + 8 +DRAHTANKER + 10 +13949.24975 + 20 +4665.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2A13 + 8 +DRAHTANKER + 10 +13950.75025 + 20 +4665.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2A14 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F90 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +2A15 + 8 +DRAHTANKER + 10 +13924.24975 + 20 +4665.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2A16 + 8 +DRAHTANKER + 10 +13925.75025 + 20 +4665.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2A17 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F94 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +2A18 + 8 +DRAHTANKER + 10 +13904.24975 + 20 +4665.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2A19 + 8 +DRAHTANKER + 10 +13905.75025 + 20 +4665.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2A1A + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F98 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +2A1B + 8 +DRAHTANKER + 10 +13949.24975 + 20 +4685.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2A1C + 8 +DRAHTANKER + 10 +13950.75025 + 20 +4685.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2A1D + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1F9C + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +2A1E + 8 +DRAHTANKER + 10 +13924.24975 + 20 +4685.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2A1F + 8 +DRAHTANKER + 10 +13925.75025 + 20 +4685.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2A20 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1FA0 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +2A21 + 8 +DRAHTANKER + 10 +13904.24975 + 20 +4685.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2A22 + 8 +DRAHTANKER + 10 +13905.75025 + 20 +4685.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2A23 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1FA4 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +2A24 + 8 +DRAHTANKER + 10 +13949.24975 + 20 +4705.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2A25 + 8 +DRAHTANKER + 10 +13950.75025 + 20 +4705.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2A26 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1FA8 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +2A27 + 8 +DRAHTANKER + 10 +13924.24975 + 20 +4705.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2A28 + 8 +DRAHTANKER + 10 +13925.75025 + 20 +4705.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2A29 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1FAC + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +2A2A + 8 +DRAHTANKER + 10 +13904.24975 + 20 +4705.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2A2B + 8 +DRAHTANKER + 10 +13905.75025 + 20 +4705.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2A2C + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1FB0 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +2A2D + 8 +DRAHTANKER + 10 +13949.24975 + 20 +4725.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2A2E + 8 +DRAHTANKER + 10 +13950.75025 + 20 +4725.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2A2F + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1FB4 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +2A30 + 8 +DRAHTANKER + 10 +13924.24975 + 20 +4725.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2A31 + 8 +DRAHTANKER + 10 +13925.75025 + 20 +4725.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2A32 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1FB8 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +2A33 + 8 +DRAHTANKER + 10 +13904.24975 + 20 +4725.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2A34 + 8 +DRAHTANKER + 10 +13905.75025 + 20 +4725.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2A35 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1FBC + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +2A36 + 8 +DRAHTANKER + 10 +13949.24975 + 20 +4745.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2A37 + 8 +DRAHTANKER + 10 +13950.75025 + 20 +4745.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2A38 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1FC0 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +2A39 + 8 +DRAHTANKER + 10 +13924.24975 + 20 +4745.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2A3A + 8 +DRAHTANKER + 10 +13925.75025 + 20 +4745.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2A3B + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1FC4 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +2A3C + 8 +DRAHTANKER + 10 +13904.24975 + 20 +4745.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2A3D + 8 +DRAHTANKER + 10 +13905.75025 + 20 +4745.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2A3E + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1FC8 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +2A3F + 8 +DRAHTANKER + 10 +13949.24975 + 20 +4765.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2A40 + 8 +DRAHTANKER + 10 +13950.75025 + 20 +4765.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2A41 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1FCC + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +2A42 + 8 +DRAHTANKER + 10 +13924.24975 + 20 +4765.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2A43 + 8 +DRAHTANKER + 10 +13925.75025 + 20 +4765.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2A44 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1FD0 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +2A45 + 8 +DRAHTANKER + 10 +13904.24975 + 20 +4765.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2A46 + 8 +DRAHTANKER + 10 +13905.75025 + 20 +4765.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2A47 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1FD4 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +2A48 + 8 +DRAHTANKER + 10 +13949.24975 + 20 +4785.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2A49 + 8 +DRAHTANKER + 10 +13950.75025 + 20 +4785.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2A4A + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1FD8 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +2A4B + 8 +DRAHTANKER + 10 +13924.24975 + 20 +4785.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2A4C + 8 +DRAHTANKER + 10 +13925.75025 + 20 +4785.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2A4D + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1FDC + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +2A4E + 8 +DRAHTANKER + 10 +13904.24975 + 20 +4785.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2A4F + 8 +DRAHTANKER + 10 +13905.75025 + 20 +4785.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2A50 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1FE0 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +2A51 + 8 +DRAHTANKER + 10 +13949.24975 + 20 +4805.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2A52 + 8 +DRAHTANKER + 10 +13950.75025 + 20 +4805.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2A53 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1FE4 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +2A54 + 8 +DRAHTANKER + 10 +13924.24975 + 20 +4805.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2A55 + 8 +DRAHTANKER + 10 +13925.75025 + 20 +4805.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2A56 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1FE8 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +1.4995 + 41 +1.4995 + 0 +VERTEX + 5 +2A57 + 8 +DRAHTANKER + 10 +13904.24975 + 20 +4805.0 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +2A58 + 8 +DRAHTANKER + 10 +13905.75025 + 20 +4805.0 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +2A59 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1FEC + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2A5A + 8 +HOLZ + 10 +15092.292001 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +2A5B + 8 +HOLZ + 10 +13975.0 + 20 +4705.0 + 30 +0.0 + 0 +SEQEND + 5 +2A5C + 8 +HOLZ + 0 +POLYLINE + 5 +1FF0 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2A5D + 8 +HOLZ + 10 +13880.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +2A5E + 8 +HOLZ + 10 +7230.0 + 20 +4705.0 + 30 +0.0 + 0 +SEQEND + 5 +2A5F + 8 +HOLZ + 0 +POLYLINE + 5 +1FF4 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2A60 + 8 +HOLZ + 10 +14032.5 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +2A61 + 8 +HOLZ + 10 +13975.0 + 20 +4705.0 + 30 +0.0 + 0 +SEQEND + 5 +2A62 + 8 +HOLZ + 0 +POLYLINE + 5 +1FF8 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2A63 + 8 +HOLZ + 10 +13880.0 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +2A64 + 8 +HOLZ + 10 +13832.5 + 20 +4705.0 + 30 +0.0 + 0 +VERTEX + 5 +2A65 + 8 +HOLZ + 10 +13832.5 + 20 +7355.0 + 30 +0.0 + 0 +SEQEND + 5 +2A66 + 8 +HOLZ + 0 +ENDSEC + 0 +EOF diff --git a/extensions/fablabchemnitz/dxf2papercraft/kabeja/samples/dxf/draft3.dxf b/extensions/fablabchemnitz/dxf2papercraft/kabeja/samples/dxf/draft3.dxf new file mode 100644 index 00000000..9f2a188d --- /dev/null +++ b/extensions/fablabchemnitz/dxf2papercraft/kabeja/samples/dxf/draft3.dxf @@ -0,0 +1,137444 @@ + 0 +SECTION + 2 +HEADER + 9 +$ACADVER + 1 +AC1009 + 9 +$INSBASE + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$EXTMIN + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$EXTMAX + 10 +21025.0 + 20 +14850.0 + 30 +0.0 + 9 +$LIMMIN + 10 +0.0 + 20 +0.0 + 9 +$LIMMAX + 10 +21025.0 + 20 +14850.0 + 9 +$ORTHOMODE + 70 + 1 + 9 +$REGENMODE + 70 + 1 + 9 +$FILLMODE + 70 + 1 + 9 +$QTEXTMODE + 70 + 0 + 9 +$MIRRTEXT + 70 + 1 + 9 +$DRAGMODE + 70 + 2 + 9 +$LTSCALE + 40 +175.0 + 9 +$OSMODE + 70 + 0 + 9 +$ATTMODE + 70 + 1 + 9 +$TEXTSIZE + 40 +175.0 + 9 +$TRACEWID + 40 +1.0 + 9 +$TEXTSTYLE + 7 +STANDARD + 9 +$CLAYER + 8 +LEGENDE-70 + 9 +$CELTYPE + 6 +BYLAYER + 9 +$CECOLOR + 62 + 256 + 9 +$DIMSCALE + 40 +1.0 + 9 +$DIMASZ + 40 +1.0 + 9 +$DIMEXO + 40 +1.0 + 9 +$DIMDLI + 40 +3.0 + 9 +$DIMRND + 40 +0.0 + 9 +$DIMDLE + 40 +0.0 + 9 +$DIMEXE + 40 +0.5 + 9 +$DIMTP + 40 +0.0 + 9 +$DIMTM + 40 +0.0 + 9 +$DIMTXT + 40 +87.5 + 9 +$DIMCEN + 40 +0.5 + 9 +$DIMTSZ + 40 +0.0 + 9 +$DIMTOL + 70 + 0 + 9 +$DIMLIM + 70 + 0 + 9 +$DIMTIH + 70 + 0 + 9 +$DIMTOH + 70 + 0 + 9 +$DIMSE1 + 70 + 1 + 9 +$DIMSE2 + 70 + 1 + 9 +$DIMTAD + 70 + 1 + 9 +$DIMZIN + 70 + 8 + 9 +$DIMBLK + 1 +MASSHILFSLINIE + 9 +$DIMASO + 70 + 1 + 9 +$DIMSHO + 70 + 0 + 9 +$DIMPOST + 1 + + 9 +$DIMAPOST + 1 + + 9 +$DIMALT + 70 + 0 + 9 +$DIMALTD + 70 + 2 + 9 +$DIMALTF + 40 +25.4 + 9 +$DIMLFAC + 40 +1.0 + 9 +$DIMTOFL + 70 + 1 + 9 +$DIMTVP + 40 +0.0 + 9 +$DIMTIX + 70 + 1 + 9 +$DIMSOXD + 70 + 0 + 9 +$DIMSAH + 70 + 0 + 9 +$DIMBLK1 + 1 + + 9 +$DIMBLK2 + 1 + + 9 +$DIMSTYLE + 2 +STANDARD + 9 +$DIMCLRD + 70 + 0 + 9 +$DIMCLRE + 70 + 0 + 9 +$DIMCLRT + 70 + 0 + 9 +$DIMTFAC + 40 +1.0 + 9 +$DIMGAP + 40 +0.0 + 9 +$LUNITS + 70 + 2 + 9 +$LUPREC + 70 + 2 + 9 +$SKETCHINC + 40 +1.0 + 9 +$FILLETRAD + 40 +0.0 + 9 +$AUNITS + 70 + 0 + 9 +$AUPREC + 70 + 0 + 9 +$MENU + 1 +acad + 9 +$ELEVATION + 40 +0.0 + 9 +$PELEVATION + 40 +0.0 + 9 +$THICKNESS + 40 +0.0 + 9 +$LIMCHECK + 70 + 0 + 9 +$BLIPMODE + 70 + 1 + 9 +$CHAMFERA + 40 +0.0 + 9 +$CHAMFERB + 40 +0.0 + 9 +$SKPOLY + 70 + 0 + 9 +$TDCREATE + 40 +2450820.494106 + 9 +$TDUPDATE + 40 +2450820.494106 + 9 +$TDINDWG + 40 +0.0 + 9 +$TDUSRTIMER + 40 +0.0 + 9 +$USRTIMER + 70 + 1 + 9 +$ANGBASE + 50 +0.0 + 9 +$ANGDIR + 70 + 0 + 9 +$PDMODE + 70 + 0 + 9 +$PDSIZE + 40 +0.0 + 9 +$PLINEWID + 40 +0.0 + 9 +$COORDS + 70 + 2 + 9 +$SPLFRAME + 70 + 0 + 9 +$SPLINETYPE + 70 + 6 + 9 +$SPLINESEGS + 70 + 8 + 9 +$ATTDIA + 70 + 0 + 9 +$ATTREQ + 70 + 1 + 9 +$HANDLING + 70 + 1 + 9 +$HANDSEED + 5 +2270 + 9 +$SURFTAB1 + 70 + 6 + 9 +$SURFTAB2 + 70 + 6 + 9 +$SURFTYPE + 70 + 6 + 9 +$SURFU + 70 + 6 + 9 +$SURFV + 70 + 6 + 9 +$UCSNAME + 2 +PAPIERURSPRUNG + 9 +$UCSORG + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSXDIR + 10 +1.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSYDIR + 10 +0.0 + 20 +1.0 + 30 +0.0 + 9 +$PUCSNAME + 2 + + 9 +$PUCSORG + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSXDIR + 10 +1.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSYDIR + 10 +0.0 + 20 +1.0 + 30 +0.0 + 9 +$USERI1 + 70 + 0 + 9 +$USERI2 + 70 + 0 + 9 +$USERI3 + 70 + 0 + 9 +$USERI4 + 70 + 0 + 9 +$USERI5 + 70 + 0 + 9 +$USERR1 + 40 +0.0 + 9 +$USERR2 + 40 +0.0 + 9 +$USERR3 + 40 +0.0 + 9 +$USERR4 + 40 +0.0 + 9 +$USERR5 + 40 +0.0 + 9 +$WORLDVIEW + 70 + 1 + 9 +$SHADEDGE + 70 + 3 + 9 +$SHADEDIF + 70 + 70 + 9 +$TILEMODE + 70 + 1 + 9 +$MAXACTVP + 70 + 16 + 9 +$PLIMCHECK + 70 + 0 + 9 +$PEXTMIN + 10 +1.000000E+020 + 20 +1.000000E+020 + 30 +1.000000E+020 + 9 +$PEXTMAX + 10 +-1.000000E+020 + 20 +-1.000000E+020 + 30 +-1.000000E+020 + 9 +$PLIMMIN + 10 +0.0 + 20 +0.0 + 9 +$PLIMMAX + 10 +12.0 + 20 +9.0 + 9 +$UNITMODE + 70 + 0 + 9 +$VISRETAIN + 70 + 0 + 9 +$PLINEGEN + 70 + 0 + 9 +$PSLTSCALE + 70 + 0 + 0 +ENDSEC + 0 +SECTION + 2 +TABLES + 0 +TABLE + 2 +VPORT + 70 + 3 + 0 +VPORT + 2 +*ACTIVE + 70 + 0 + 10 +0.0 + 20 +0.0 + 11 +1.0 + 21 +1.0 + 12 +11853.224688 + 22 +7639.042096 + 13 +0.0 + 23 +0.0 + 14 +5.0 + 24 +5.0 + 15 +10.0 + 25 +10.0 + 16 +0.0 + 26 +0.0 + 36 +1.0 + 17 +0.0 + 27 +0.0 + 37 +0.0 + 40 +15278.084191 + 41 +1.551664 + 42 +50.0 + 43 +0.0 + 44 +0.0 + 50 +0.0 + 51 +0.0 + 71 + 0 + 72 + 100 + 73 + 1 + 74 + 1 + 75 + 1 + 76 + 0 + 77 + 0 + 78 + 0 + 0 +ENDTAB + 0 +TABLE + 2 +LTYPE + 70 + 25 + 0 +LTYPE + 2 +CONTINUOUS + 70 + 0 + 3 +Solid line + 72 + 65 + 73 + 0 + 40 +0.0 + 0 +LTYPE + 2 +RAND + 70 + 0 + 3 +__ __ . __ __ . __ __ . __ __ . __ __ . __ __ . + 72 + 65 + 73 + 6 + 40 +1.75 + 49 +0.5 + 49 +-0.25 + 49 +0.5 + 49 +-0.25 + 49 +0.0 + 49 +-0.25 + 0 +LTYPE + 2 +RAND2 + 70 + 0 + 3 +__.__.__.__.__.__.__.__.__.__.__.__.__.__.__.__ + 72 + 65 + 73 + 6 + 40 +0.875 + 49 +0.25 + 49 +-0.125 + 49 +0.25 + 49 +-0.125 + 49 +0.0 + 49 +-0.125 + 0 +LTYPE + 2 +RANDX2 + 70 + 0 + 3 +____ ____ . ____ ____ . ____ ____ . __ + 72 + 65 + 73 + 6 + 40 +3.5 + 49 +1.0 + 49 +-0.5 + 49 +1.0 + 49 +-0.5 + 49 +0.0 + 49 +-0.5 + 0 +LTYPE + 2 +MITTE + 70 + 0 + 3 +____ _ ____ _ ____ _ ____ _ ____ _ ____ _ ____ + 72 + 65 + 73 + 4 + 40 +2.0 + 49 +1.25 + 49 +-0.25 + 49 +0.25 + 49 +-0.25 + 0 +LTYPE + 2 +MITTE2 + 70 + 0 + 3 +___ _ ___ _ ___ _ ___ _ ___ _ ___ _ ___ _ ___ _ + 72 + 65 + 73 + 4 + 40 +1.125 + 49 +0.75 + 49 +-0.125 + 49 +0.125 + 49 +-0.125 + 0 +LTYPE + 2 +MITTEX2 + 70 + 0 + 3 +________ __ ________ __ ________ __ _____ + 72 + 65 + 73 + 4 + 40 +4.0 + 49 +2.5 + 49 +-0.5 + 49 +0.5 + 49 +-0.5 + 0 +LTYPE + 2 +STRICHPUNKT + 70 + 0 + 3 +__ . __ . __ . __ . __ . __ . __ . __ . __ . __ + 72 + 65 + 73 + 4 + 40 +1.0 + 49 +0.5 + 49 +-0.25 + 49 +0.0 + 49 +-0.25 + 0 +LTYPE + 2 +STRICHPUNKT2 + 70 + 0 + 3 +_._._._._._._._._._._._._._._._._._._._._._._._ + 72 + 65 + 73 + 4 + 40 +0.5 + 49 +0.25 + 49 +-0.125 + 49 +0.0 + 49 +-0.125 + 0 +LTYPE + 2 +STRICHPUNKTX2 + 70 + 0 + 3 +____ . ____ . ____ . ____ . ____ . __ + 72 + 65 + 73 + 4 + 40 +2.0 + 49 +1.0 + 49 +-0.5 + 49 +0.0 + 49 +-0.5 + 0 +LTYPE + 2 +GESTRICHELT + 70 + 0 + 3 +__ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ + 72 + 65 + 73 + 2 + 40 +0.75 + 49 +0.5 + 49 +-0.25 + 0 +LTYPE + 2 +GESTRICHELT2 + 70 + 0 + 3 +_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ + 72 + 65 + 73 + 2 + 40 +0.375 + 49 +0.25 + 49 +-0.125 + 0 +LTYPE + 2 +GESTRICHELTX2 + 70 + 0 + 3 +____ ____ ____ ____ ____ ____ ____ ____ + 72 + 65 + 73 + 2 + 40 +1.5 + 49 +1.0 + 49 +-0.5 + 0 +LTYPE + 2 +GETRENNT + 70 + 0 + 3 +____ . . ____ . . ____ . . ____ . . ____ . . __ + 72 + 65 + 73 + 6 + 40 +1.25 + 49 +0.5 + 49 +-0.25 + 49 +0.0 + 49 +-0.25 + 49 +0.0 + 49 +-0.25 + 0 +LTYPE + 2 +GETRENNT2 + 70 + 0 + 3 +__..__..__..__..__..__..__..__..__..__..__..__. + 72 + 65 + 73 + 6 + 40 +0.625 + 49 +0.25 + 49 +-0.125 + 49 +0.0 + 49 +-0.125 + 49 +0.0 + 49 +-0.125 + 0 +LTYPE + 2 +GETRENNTX2 + 70 + 0 + 3 +________ . . ________ . . ________ . . + 72 + 65 + 73 + 6 + 40 +2.5 + 49 +1.0 + 49 +-0.5 + 49 +0.0 + 49 +-0.5 + 49 +0.0 + 49 +-0.5 + 0 +LTYPE + 2 +PUNKT + 70 + 0 + 3 +. . . . . . . . . . . . . . . . . . . . . . . . + 72 + 65 + 73 + 2 + 40 +0.25 + 49 +0.0 + 49 +-0.25 + 0 +LTYPE + 2 +PUNKT2 + 70 + 0 + 3 +............................................... + 72 + 65 + 73 + 2 + 40 +0.125 + 49 +0.0 + 49 +-0.125 + 0 +LTYPE + 2 +PUNKTX2 + 70 + 0 + 3 +. . . . . . . . . . . . . . . . + 72 + 65 + 73 + 2 + 40 +0.5 + 49 +0.0 + 49 +-0.5 + 0 +LTYPE + 2 +VERDECKT + 70 + 0 + 3 +__ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ + 72 + 65 + 73 + 2 + 40 +0.375 + 49 +0.25 + 49 +-0.125 + 0 +LTYPE + 2 +VERDECKT2 + 70 + 0 + 3 +_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ + 72 + 65 + 73 + 2 + 40 +0.1875 + 49 +0.125 + 49 +-0.0625 + 0 +LTYPE + 2 +VERDECKTX2 + 70 + 0 + 3 +____ ____ ____ ____ ____ ____ ____ ____ ____ __ + 72 + 65 + 73 + 2 + 40 +0.75 + 49 +0.5 + 49 +-0.25 + 0 +LTYPE + 2 +PHANTOM + 70 + 0 + 3 +______ __ __ ______ __ __ ______ __ __ + 72 + 65 + 73 + 6 + 40 +2.5 + 49 +1.25 + 49 +-0.25 + 49 +0.25 + 49 +-0.25 + 49 +0.25 + 49 +-0.25 + 0 +LTYPE + 2 +PHANTOM2 + 70 + 0 + 3 +___ _ _ ___ _ _ ___ _ _ ___ _ _ ___ _ _ ___ _ _ + 72 + 65 + 73 + 6 + 40 +1.25 + 49 +0.625 + 49 +-0.125 + 49 +0.125 + 49 +-0.125 + 49 +0.125 + 49 +-0.125 + 0 +LTYPE + 2 +PHANTOMX2 + 70 + 0 + 3 +____________ ____ ____ ____________ + 72 + 65 + 73 + 6 + 40 +5.0 + 49 +2.5 + 49 +-0.5 + 49 +0.5 + 49 +-0.5 + 49 +0.5 + 49 +-0.5 + 0 +ENDTAB + 0 +TABLE + 2 +LAYER + 70 + 20 + 0 +LAYER + 2 +0 + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +LAYER + 2 +MAUERWERK + 70 + 0 + 62 + 6 + 6 +CONTINUOUS + 0 +LAYER + 2 +VORSATZSCHALE + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +LAYER + 2 +PE-FOLIE + 70 + 0 + 62 + 1 + 6 +GESTRICHELTX2 + 0 +LAYER + 2 +FUNDAMENT + 70 + 0 + 62 + 8 + 6 +CONTINUOUS + 0 +LAYER + 2 +BEMASSUNG + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +LAYER + 2 +STUERTZE + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +LAYER + 2 +ESTRICH + 70 + 0 + 62 + 4 + 6 +CONTINUOUS + 0 +LAYER + 2 +DECKEN + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +LAYER + 2 +DAEMMUNG + 70 + 0 + 62 + 4 + 6 +CONTINUOUS + 0 +LAYER + 2 +TUEREN + 70 + 0 + 62 + 3 + 6 +CONTINUOUS + 0 +LAYER + 2 +ERDBODEN + 70 + 0 + 62 + 5 + 6 +CONTINUOUS + 0 +LAYER + 2 +SCHNITTKANTEN + 70 + 0 + 62 + 1 + 6 +GESTRICHELT + 0 +LAYER + 2 +TRENNWAND + 70 + 0 + 62 + 8 + 6 +CONTINUOUS + 0 +LAYER + 2 +LEGENDE-70 + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +LAYER + 2 +LEGENDE-35 + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +LAYER + 2 +DETAILS + 70 + 0 + 62 + 7 + 6 +GESTRICHELTX2 + 0 +LAYER + 2 +DRAHTANKER + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +LAYER + 2 +SCHRAFFUR + 70 + 0 + 62 + 2 + 6 +CONTINUOUS + 0 +LAYER + 2 +DEFPOINTS + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +ENDTAB + 0 +TABLE + 2 +STYLE + 70 + 1 + 0 +STYLE + 2 +STANDARD + 70 + 0 + 40 +0.0 + 41 +0.75 + 50 +0.0 + 71 + 0 + 42 +175.0 + 3 +C:\ACADWIN\FONTS\TXT.SHX + 4 + + 0 +ENDTAB + 0 +TABLE + 2 +VIEW + 70 + 2 + 0 +VIEW + 2 +OLE1 + 70 + 0 + 40 +2793.796699 + 10 +7175.0 + 20 +11246.898349 + 41 +4460.0 + 11 +0.0 + 21 +0.0 + 31 +1.0 + 12 +0.0 + 22 +0.0 + 32 +0.0 + 42 +50.0 + 43 +0.0 + 44 +0.0 + 50 +0.0 + 71 + 0 + 0 +VIEW + 2 +OLE2 + 70 + 0 + 40 +14850.0 + 10 +11853.224688 + 20 +7425.0 + 41 +23706.449376 + 11 +0.0 + 21 +0.0 + 31 +1.0 + 12 +0.0 + 22 +0.0 + 32 +0.0 + 42 +50.0 + 43 +0.0 + 44 +0.0 + 50 +0.0 + 71 + 0 + 0 +ENDTAB + 0 +TABLE + 2 +UCS + 70 + 2 + 0 +UCS + 2 +LOKAL + 70 + 0 + 10 +4125.0 + 20 +5250.0 + 30 +0.0 + 11 +1.0 + 21 +0.0 + 31 +0.0 + 12 +0.0 + 22 +1.0 + 32 +0.0 + 0 +UCS + 2 +PAPIERURSPRUNG + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 11 +1.0 + 21 +0.0 + 31 +0.0 + 12 +0.0 + 22 +1.0 + 32 +0.0 + 0 +ENDTAB + 0 +TABLE + 2 +APPID + 70 + 1 + 0 +APPID + 2 +ACAD + 70 + 0 + 0 +ENDTAB + 0 +TABLE + 2 +DIMSTYLE + 70 + 1 + 0 +DIMSTYLE + 2 +STANDARD + 70 + 0 + 3 + + 4 + + 5 + + 6 + + 7 + + 40 +1.0 + 41 +0.18 + 42 +0.0625 + 43 +0.38 + 44 +0.18 + 45 +0.0 + 46 +0.0 + 47 +0.0 + 48 +0.0 +140 +0.18 +141 +0.09 +142 +0.0 +143 +25.4 +144 +1.0 +145 +0.0 +146 +1.0 +147 +0.09 + 71 + 0 + 72 + 0 + 73 + 1 + 74 + 1 + 75 + 0 + 76 + 0 + 77 + 0 + 78 + 0 +170 + 0 +171 + 2 +172 + 0 +173 + 0 +174 + 0 +175 + 0 +176 + 0 +177 + 0 +178 + 0 + 0 +ENDTAB + 0 +ENDSEC + 0 +SECTION + 2 +BLOCKS + 0 +BLOCK + 8 +0 + 2 +$MODEL_SPACE + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +$MODEL_SPACE + 1 + + 0 +ENDBLK + 5 +BB + 8 +0 + 0 +BLOCK + 67 + 1 + 8 +0 + 2 +$PAPER_SPACE + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +$PAPER_SPACE + 1 + + 0 +ENDBLK + 5 +B9 + 67 + 1 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +RAHMEN50 + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +RAHMEN50 + 1 + + 0 +POLYLINE + 5 +BF + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +1E98 + 8 +0 + 10 +1000.0 + 20 +250.0 + 30 +0.0 + 0 +VERTEX + 5 +1E99 + 8 +0 + 10 +41800.0 + 20 +250.0 + 30 +0.0 + 0 +VERTEX + 5 +1E9A + 8 +0 + 10 +41800.0 + 20 +29450.0 + 30 +0.0 + 0 +VERTEX + 5 +1E9B + 8 +0 + 10 +1000.0 + 20 +29450.0 + 30 +0.0 + 0 +SEQEND + 5 +1E9C + 8 +0 + 0 +POLYLINE + 5 +C5 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +1E9D + 8 +0 + 10 +32800.0 + 20 +250.0 + 30 +0.0 + 0 +VERTEX + 5 +1E9E + 8 +0 + 10 +32800.0 + 20 +13250.0 + 30 +0.0 + 0 +VERTEX + 5 +1E9F + 8 +0 + 10 +41800.0 + 20 +13250.0 + 30 +0.0 + 0 +SEQEND + 5 +1EA0 + 8 +0 + 0 +POLYLINE + 5 +CA + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +1EA1 + 8 +0 + 10 +39550.0 + 20 +13250.0 + 30 +0.0 + 0 +VERTEX + 5 +1EA2 + 8 +0 + 10 +39550.0 + 20 +11000.0 + 30 +0.0 + 0 +SEQEND + 5 +1EA3 + 8 +0 + 0 +POLYLINE + 5 +CE + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +1EA4 + 8 +0 + 10 +41800.0 + 20 +12250.0 + 30 +0.0 + 0 +VERTEX + 5 +1EA5 + 8 +0 + 10 +37300.0 + 20 +12250.0 + 30 +0.0 + 0 +SEQEND + 5 +1EA6 + 8 +0 + 0 +POLYLINE + 5 +D2 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +1EA7 + 8 +0 + 10 +41800.0 + 20 +11625.0 + 30 +0.0 + 0 +VERTEX + 5 +1EA8 + 8 +0 + 10 +37300.0 + 20 +11625.0 + 30 +0.0 + 0 +SEQEND + 5 +1EA9 + 8 +0 + 0 +POLYLINE + 5 +D6 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +1EAA + 8 +0 + 10 +32800.0 + 20 +11000.0 + 30 +0.0 + 0 +VERTEX + 5 +1EAB + 8 +0 + 10 +41800.0 + 20 +11000.0 + 30 +0.0 + 0 +SEQEND + 5 +1EAC + 8 +0 + 0 +POLYLINE + 5 +DA + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +1EAD + 8 +0 + 10 +37300.0 + 20 +13250.0 + 30 +0.0 + 0 +VERTEX + 5 +1EAE + 8 +0 + 10 +37300.0 + 20 +6500.0 + 30 +0.0 + 0 +SEQEND + 5 +1EAF + 8 +0 + 0 +POLYLINE + 5 +DE + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +1EB0 + 8 +0 + 10 +32800.0 + 20 +8750.0 + 30 +0.0 + 0 +VERTEX + 5 +1EB1 + 8 +0 + 10 +37300.0 + 20 +8750.0 + 30 +0.0 + 0 +SEQEND + 5 +1EB2 + 8 +0 + 0 +POLYLINE + 5 +E2 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +1EB3 + 8 +0 + 10 +32800.0 + 20 +6500.0 + 30 +0.0 + 0 +VERTEX + 5 +1EB4 + 8 +0 + 10 +41800.0 + 20 +6500.0 + 30 +0.0 + 0 +SEQEND + 5 +1EB5 + 8 +0 + 0 +POLYLINE + 5 +E6 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +1EB6 + 8 +0 + 10 +41800.0 + 20 +2000.0 + 30 +0.0 + 0 +VERTEX + 5 +1EB7 + 8 +0 + 10 +32800.0 + 20 +2000.0 + 30 +0.0 + 0 +SEQEND + 5 +1EB8 + 8 +0 + 0 +POLYLINE + 5 +EA + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +1EB9 + 8 +0 + 10 +41800.0 + 20 +950.0 + 30 +0.0 + 0 +VERTEX + 5 +1EBA + 8 +0 + 10 +32800.0 + 20 +950.0 + 30 +0.0 + 0 +SEQEND + 5 +1EBB + 8 +0 + 0 +POLYLINE + 5 +EE + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +1EBC + 8 +0 + 10 +41800.0 + 20 +1300.0 + 30 +0.0 + 0 +VERTEX + 5 +1EBD + 8 +0 + 10 +32800.0 + 20 +1300.0 + 30 +0.0 + 0 +SEQEND + 5 +1EBE + 8 +0 + 0 +POLYLINE + 5 +F2 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +1EBF + 8 +0 + 10 +41800.0 + 20 +1650.0 + 30 +0.0 + 0 +VERTEX + 5 +1EC0 + 8 +0 + 10 +32800.0 + 20 +1650.0 + 30 +0.0 + 0 +SEQEND + 5 +1EC1 + 8 +0 + 0 +POLYLINE + 5 +F6 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +1EC2 + 8 +0 + 10 +41800.0 + 20 +600.0 + 30 +0.0 + 0 +VERTEX + 5 +1EC3 + 8 +0 + 10 +32800.0 + 20 +600.0 + 30 +0.0 + 0 +SEQEND + 5 +1EC4 + 8 +0 + 0 +POLYLINE + 5 +FA + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +1EC5 + 8 +0 + 10 +35100.0 + 20 +250.0 + 30 +0.0 + 0 +VERTEX + 5 +1EC6 + 8 +0 + 10 +35100.0 + 20 +2000.0 + 30 +0.0 + 0 +SEQEND + 5 +1EC7 + 8 +0 + 0 +POLYLINE + 5 +FE + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +1EC8 + 8 +0 + 10 +33950.0 + 20 +250.0 + 30 +0.0 + 0 +VERTEX + 5 +1EC9 + 8 +0 + 10 +33950.0 + 20 +2000.0 + 30 +0.0 + 0 +SEQEND + 5 +1ECA + 8 +0 + 0 +POLYLINE + 5 +102 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +1ECB + 8 +0 + 10 +40650.0 + 20 +250.0 + 30 +0.0 + 0 +VERTEX + 5 +1ECC + 8 +0 + 10 +40650.0 + 20 +2000.0 + 30 +0.0 + 0 +SEQEND + 5 +1ECD + 8 +0 + 0 +ENDBLK + 5 +106 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +STURZ + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +STURZ + 1 + + 0 +POLYLINE + 5 +108 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +1ECE + 8 +MAUERWERK + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1ECF + 8 +MAUERWERK + 10 +0.0 + 20 +-71.0 + 30 +0.0 + 0 +VERTEX + 5 +1ED0 + 8 +MAUERWERK + 10 +365.0 + 20 +-71.0 + 30 +0.0 + 0 +VERTEX + 5 +1ED1 + 8 +MAUERWERK + 10 +365.0 + 20 +0.0 + 30 +0.0 + 0 +SEQEND + 5 +1ED2 + 8 +MAUERWERK + 0 +POLYLINE + 5 +10E + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +1ED3 + 8 +MAUERWERK + 10 +40.0 + 20 +-1.0 + 30 +0.0 + 0 +VERTEX + 5 +1ED4 + 8 +MAUERWERK + 10 +40.0 + 20 +-36.0 + 30 +0.0 + 0 +VERTEX + 5 +1ED5 + 8 +MAUERWERK + 10 +80.0 + 20 +-36.0 + 30 +0.0 + 0 +VERTEX + 5 +1ED6 + 8 +MAUERWERK + 10 +80.0 + 20 +-6.0 + 30 +0.0 + 0 +SEQEND + 5 +1ED7 + 8 +MAUERWERK + 0 +POLYLINE + 5 +114 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +1ED8 + 8 +MAUERWERK + 10 +160.0 + 20 +-1.0 + 30 +0.0 + 0 +VERTEX + 5 +1ED9 + 8 +MAUERWERK + 10 +160.0 + 20 +-36.0 + 30 +0.0 + 0 +VERTEX + 5 +1EDA + 8 +MAUERWERK + 10 +200.0 + 20 +-36.0 + 30 +0.0 + 0 +VERTEX + 5 +1EDB + 8 +MAUERWERK + 10 +200.0 + 20 +-6.0 + 30 +0.0 + 0 +SEQEND + 5 +1EDC + 8 +MAUERWERK + 0 +POLYLINE + 5 +11A + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +1EDD + 8 +MAUERWERK + 10 +285.0 + 20 +-1.0 + 30 +0.0 + 0 +VERTEX + 5 +1EDE + 8 +MAUERWERK + 10 +285.0 + 20 +-36.0 + 30 +0.0 + 0 +VERTEX + 5 +1EDF + 8 +MAUERWERK + 10 +325.0 + 20 +-36.0 + 30 +0.0 + 0 +VERTEX + 5 +1EE0 + 8 +MAUERWERK + 10 +325.0 + 20 +-6.0 + 30 +0.0 + 0 +SEQEND + 5 +1EE1 + 8 +MAUERWERK + 0 +POLYLINE + 5 +120 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +1EE2 + 8 +MAUERWERK + 10 +121.0 + 20 +-71.0 + 30 +0.0 + 0 +VERTEX + 5 +1EE3 + 8 +MAUERWERK + 10 +121.0 + 20 +0.0 + 30 +0.0 + 0 +SEQEND + 5 +1EE4 + 8 +MAUERWERK + 0 +POLYLINE + 5 +124 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +1EE5 + 8 +MAUERWERK + 10 +243.0 + 20 +-71.0 + 30 +0.0 + 0 +VERTEX + 5 +1EE6 + 8 +MAUERWERK + 10 +243.0 + 20 +0.0 + 30 +0.0 + 0 +SEQEND + 5 +1EE7 + 8 +MAUERWERK + 0 +ENDBLK + 5 +128 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +MASSHILFSLINIE + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +MASSHILFSLINIE + 1 + + 0 +POLYLINE + 5 +12A + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1EE8 + 8 +0 + 10 +75.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1EE9 + 8 +0 + 10 +-75.0 + 20 +0.0 + 30 +0.0 + 0 +SEQEND + 5 +1EEA + 8 +0 + 0 +POLYLINE + 5 +12E + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1EEB + 8 +0 + 10 +0.0 + 20 +-175.0 + 30 +0.0 + 0 +VERTEX + 5 +1EEC + 8 +0 + 10 +0.0 + 20 +175.0 + 30 +0.0 + 0 +SEQEND + 5 +1EED + 8 +0 + 0 +POLYLINE + 5 +132 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1EEE + 8 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1EEF + 8 +0 + 10 +26.516504 + 20 +26.516504 + 30 +0.0 + 0 +SEQEND + 5 +1EF0 + 8 +0 + 0 +POLYLINE + 5 +136 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1EF1 + 8 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1EF2 + 8 +0 + 10 +-26.516504 + 20 +-26.516504 + 30 +0.0 + 0 +SEQEND + 5 +1EF3 + 8 +0 + 0 +ENDBLK + 5 +13A + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X3 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X3 + 1 + + 0 +LINE + 5 +13C + 8 +0 + 62 + 0 + 10 +7394.110755 + 20 +10965.0 + 30 +0.0 + 11 +7406.943533 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +13D + 8 +0 + 62 + 0 + 10 +7424.621202 + 20 +10995.510447 + 30 +0.0 + 11 +7442.298872 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +13E + 8 +0 + 62 + 0 + 10 +7459.976542 + 20 +11030.865787 + 30 +0.0 + 11 +7477.654211 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +13F + 8 +0 + 62 + 0 + 10 +7358.755416 + 20 +10965.0 + 30 +0.0 + 11 +7371.588194 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +140 + 8 +0 + 62 + 0 + 10 +7389.265863 + 20 +10995.510447 + 30 +0.0 + 11 +7406.943533 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +141 + 8 +0 + 62 + 0 + 10 +7424.621202 + 20 +11030.865787 + 30 +0.0 + 11 +7442.298872 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +142 + 8 +0 + 62 + 0 + 10 +7323.400077 + 20 +10965.0 + 30 +0.0 + 11 +7336.232855 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +143 + 8 +0 + 62 + 0 + 10 +7353.910524 + 20 +10995.510447 + 30 +0.0 + 11 +7371.588194 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +144 + 8 +0 + 62 + 0 + 10 +7389.265863 + 20 +11030.865787 + 30 +0.0 + 11 +7406.943533 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +145 + 8 +0 + 62 + 0 + 10 +7288.044738 + 20 +10965.0 + 30 +0.0 + 11 +7300.877516 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +146 + 8 +0 + 62 + 0 + 10 +7318.555185 + 20 +10995.510447 + 30 +0.0 + 11 +7336.232855 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +147 + 8 +0 + 62 + 0 + 10 +7353.910524 + 20 +11030.865787 + 30 +0.0 + 11 +7371.588194 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +148 + 8 +0 + 62 + 0 + 10 +7252.689399 + 20 +10965.0 + 30 +0.0 + 11 +7265.522177 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +149 + 8 +0 + 62 + 0 + 10 +7283.199846 + 20 +10995.510447 + 30 +0.0 + 11 +7300.877516 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +14A + 8 +0 + 62 + 0 + 10 +7318.555185 + 20 +11030.865787 + 30 +0.0 + 11 +7336.232855 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +14B + 8 +0 + 62 + 0 + 10 +7217.33406 + 20 +10965.0 + 30 +0.0 + 11 +7230.166838 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +14C + 8 +0 + 62 + 0 + 10 +7247.844507 + 20 +10995.510447 + 30 +0.0 + 11 +7265.522177 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +14D + 8 +0 + 62 + 0 + 10 +7283.199846 + 20 +11030.865787 + 30 +0.0 + 11 +7300.877516 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +14E + 8 +0 + 62 + 0 + 10 +7181.978721 + 20 +10965.0 + 30 +0.0 + 11 +7194.811499 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +14F + 8 +0 + 62 + 0 + 10 +7212.489168 + 20 +10995.510447 + 30 +0.0 + 11 +7230.166838 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +150 + 8 +0 + 62 + 0 + 10 +7247.844507 + 20 +11030.865787 + 30 +0.0 + 11 +7265.522177 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +151 + 8 +0 + 62 + 0 + 10 +7146.623382 + 20 +10965.0 + 30 +0.0 + 11 +7159.45616 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +152 + 8 +0 + 62 + 0 + 10 +7177.133829 + 20 +10995.510447 + 30 +0.0 + 11 +7194.811499 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +153 + 8 +0 + 62 + 0 + 10 +7212.489168 + 20 +11030.865787 + 30 +0.0 + 11 +7230.166838 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +154 + 8 +0 + 62 + 0 + 10 +7111.268043 + 20 +10965.0 + 30 +0.0 + 11 +7124.10082 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +155 + 8 +0 + 62 + 0 + 10 +7141.77849 + 20 +10995.510447 + 30 +0.0 + 11 +7159.45616 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +156 + 8 +0 + 62 + 0 + 10 +7177.133829 + 20 +11030.865787 + 30 +0.0 + 11 +7194.811499 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +157 + 8 +0 + 62 + 0 + 10 +7075.912703 + 20 +10965.0 + 30 +0.0 + 11 +7088.745481 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +158 + 8 +0 + 62 + 0 + 10 +7106.423151 + 20 +10995.510447 + 30 +0.0 + 11 +7124.10082 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +159 + 8 +0 + 62 + 0 + 10 +7141.77849 + 20 +11030.865787 + 30 +0.0 + 11 +7159.45616 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +15A + 8 +0 + 62 + 0 + 10 +7040.557364 + 20 +10965.0 + 30 +0.0 + 11 +7053.390142 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +15B + 8 +0 + 62 + 0 + 10 +7071.067812 + 20 +10995.510447 + 30 +0.0 + 11 +7088.745481 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +15C + 8 +0 + 62 + 0 + 10 +7106.423151 + 20 +11030.865787 + 30 +0.0 + 11 +7124.10082 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +15D + 8 +0 + 62 + 0 + 10 +7005.202025 + 20 +10965.0 + 30 +0.0 + 11 +7018.034803 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +15E + 8 +0 + 62 + 0 + 10 +7035.712473 + 20 +10995.510447 + 30 +0.0 + 11 +7053.390142 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +15F + 8 +0 + 62 + 0 + 10 +7071.067812 + 20 +11030.865787 + 30 +0.0 + 11 +7088.745481 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +160 + 8 +0 + 62 + 0 + 10 +6969.846686 + 20 +10965.0 + 30 +0.0 + 11 +6982.679464 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +161 + 8 +0 + 62 + 0 + 10 +7000.357134 + 20 +10995.510447 + 30 +0.0 + 11 +7018.034803 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +162 + 8 +0 + 62 + 0 + 10 +7035.712473 + 20 +11030.865787 + 30 +0.0 + 11 +7053.390142 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +163 + 8 +0 + 62 + 0 + 10 +6934.491347 + 20 +10965.0 + 30 +0.0 + 11 +6947.324125 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +164 + 8 +0 + 62 + 0 + 10 +6965.001795 + 20 +10995.510447 + 30 +0.0 + 11 +6982.679464 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +165 + 8 +0 + 62 + 0 + 10 +7000.357134 + 20 +11030.865787 + 30 +0.0 + 11 +7018.034803 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +166 + 8 +0 + 62 + 0 + 10 +6899.136008 + 20 +10965.0 + 30 +0.0 + 11 +6911.968786 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +167 + 8 +0 + 62 + 0 + 10 +6929.646456 + 20 +10995.510447 + 30 +0.0 + 11 +6947.324125 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +168 + 8 +0 + 62 + 0 + 10 +6965.001795 + 20 +11030.865787 + 30 +0.0 + 11 +6982.679464 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +169 + 8 +0 + 62 + 0 + 10 +6863.780669 + 20 +10965.0 + 30 +0.0 + 11 +6876.613447 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +16A + 8 +0 + 62 + 0 + 10 +6894.291117 + 20 +10995.510447 + 30 +0.0 + 11 +6911.968786 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +16B + 8 +0 + 62 + 0 + 10 +6929.646456 + 20 +11030.865787 + 30 +0.0 + 11 +6947.324125 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +16C + 8 +0 + 62 + 0 + 10 +6828.42533 + 20 +10965.0 + 30 +0.0 + 11 +6841.258108 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +16D + 8 +0 + 62 + 0 + 10 +6858.935778 + 20 +10995.510447 + 30 +0.0 + 11 +6876.613447 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +16E + 8 +0 + 62 + 0 + 10 +6894.291117 + 20 +11030.865787 + 30 +0.0 + 11 +6911.968786 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +16F + 8 +0 + 62 + 0 + 10 +6793.069991 + 20 +10965.0 + 30 +0.0 + 11 +6805.902769 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +170 + 8 +0 + 62 + 0 + 10 +6823.580438 + 20 +10995.510447 + 30 +0.0 + 11 +6841.258108 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +171 + 8 +0 + 62 + 0 + 10 +6858.935778 + 20 +11030.865787 + 30 +0.0 + 11 +6876.613447 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +172 + 8 +0 + 62 + 0 + 10 +6757.714652 + 20 +10965.0 + 30 +0.0 + 11 +6770.54743 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +173 + 8 +0 + 62 + 0 + 10 +6788.225099 + 20 +10995.510447 + 30 +0.0 + 11 +6805.902769 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +174 + 8 +0 + 62 + 0 + 10 +6823.580438 + 20 +11030.865787 + 30 +0.0 + 11 +6841.258108 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +175 + 8 +0 + 62 + 0 + 10 +6722.359313 + 20 +10965.0 + 30 +0.0 + 11 +6735.192091 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +176 + 8 +0 + 62 + 0 + 10 +6752.86976 + 20 +10995.510447 + 30 +0.0 + 11 +6770.54743 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +177 + 8 +0 + 62 + 0 + 10 +6788.225099 + 20 +11030.865787 + 30 +0.0 + 11 +6805.902769 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +178 + 8 +0 + 62 + 0 + 10 +6717.514421 + 20 +10995.510447 + 30 +0.0 + 11 +6735.192091 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +179 + 8 +0 + 62 + 0 + 10 +6752.86976 + 20 +11030.865787 + 30 +0.0 + 11 +6770.54743 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +17A + 8 +0 + 62 + 0 + 10 +6717.514421 + 20 +11030.865787 + 30 +0.0 + 11 +6735.192091 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +17B + 8 +0 + 62 + 0 + 10 +7429.466094 + 20 +10965.0 + 30 +0.0 + 11 +7442.298872 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +17C + 8 +0 + 62 + 0 + 10 +7459.976542 + 20 +10995.510447 + 30 +0.0 + 11 +7477.654211 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +17D + 8 +0 + 62 + 0 + 10 +7495.331881 + 20 +11030.865787 + 30 +0.0 + 11 +7513.00955 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +17E + 8 +0 + 62 + 0 + 10 +7464.821433 + 20 +10965.0 + 30 +0.0 + 11 +7477.654211 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +17F + 8 +0 + 62 + 0 + 10 +7495.331881 + 20 +10995.510447 + 30 +0.0 + 11 +7513.00955 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +180 + 8 +0 + 62 + 0 + 10 +7530.68722 + 20 +11030.865787 + 30 +0.0 + 11 +7548.364889 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +181 + 8 +0 + 62 + 0 + 10 +7500.176772 + 20 +10965.0 + 30 +0.0 + 11 +7513.00955 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +182 + 8 +0 + 62 + 0 + 10 +7530.68722 + 20 +10995.510447 + 30 +0.0 + 11 +7548.364889 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +183 + 8 +0 + 62 + 0 + 10 +7566.042559 + 20 +11030.865787 + 30 +0.0 + 11 +7583.720228 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +184 + 8 +0 + 62 + 0 + 10 +7535.532111 + 20 +10965.0 + 30 +0.0 + 11 +7548.364889 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +185 + 8 +0 + 62 + 0 + 10 +7566.042559 + 20 +10995.510447 + 30 +0.0 + 11 +7583.720228 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +186 + 8 +0 + 62 + 0 + 10 +7601.397898 + 20 +11030.865787 + 30 +0.0 + 11 +7619.075567 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +187 + 8 +0 + 62 + 0 + 10 +7570.88745 + 20 +10965.0 + 30 +0.0 + 11 +7583.720228 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +188 + 8 +0 + 62 + 0 + 10 +7601.397898 + 20 +10995.510447 + 30 +0.0 + 11 +7619.075567 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +189 + 8 +0 + 62 + 0 + 10 +7636.753237 + 20 +11030.865787 + 30 +0.0 + 11 +7654.430906 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +18A + 8 +0 + 62 + 0 + 10 +7606.242789 + 20 +10965.0 + 30 +0.0 + 11 +7619.075567 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +18B + 8 +0 + 62 + 0 + 10 +7636.753237 + 20 +10995.510447 + 30 +0.0 + 11 +7654.430906 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +18C + 8 +0 + 62 + 0 + 10 +7672.108576 + 20 +11030.865787 + 30 +0.0 + 11 +7689.786245 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +18D + 8 +0 + 62 + 0 + 10 +7641.598128 + 20 +10965.0 + 30 +0.0 + 11 +7654.430906 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +18E + 8 +0 + 62 + 0 + 10 +7672.108576 + 20 +10995.510447 + 30 +0.0 + 11 +7689.786245 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +18F + 8 +0 + 62 + 0 + 10 +7707.463915 + 20 +11030.865787 + 30 +0.0 + 11 +7725.141584 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +190 + 8 +0 + 62 + 0 + 10 +7676.953467 + 20 +10965.0 + 30 +0.0 + 11 +7689.786245 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +191 + 8 +0 + 62 + 0 + 10 +7707.463915 + 20 +10995.510447 + 30 +0.0 + 11 +7725.141584 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +192 + 8 +0 + 62 + 0 + 10 +7742.819254 + 20 +11030.865787 + 30 +0.0 + 11 +7760.496924 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +193 + 8 +0 + 62 + 0 + 10 +7712.308807 + 20 +10965.0 + 30 +0.0 + 11 +7725.141584 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +194 + 8 +0 + 62 + 0 + 10 +7742.819254 + 20 +10995.510447 + 30 +0.0 + 11 +7760.496924 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +195 + 8 +0 + 62 + 0 + 10 +7778.174593 + 20 +11030.865787 + 30 +0.0 + 11 +7795.852263 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +196 + 8 +0 + 62 + 0 + 10 +7747.664146 + 20 +10965.0 + 30 +0.0 + 11 +7760.496924 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +197 + 8 +0 + 62 + 0 + 10 +7778.174593 + 20 +10995.510447 + 30 +0.0 + 11 +7795.852263 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +198 + 8 +0 + 62 + 0 + 10 +7813.529932 + 20 +11030.865787 + 30 +0.0 + 11 +7831.207602 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +199 + 8 +0 + 62 + 0 + 10 +7783.019485 + 20 +10965.0 + 30 +0.0 + 11 +7795.852263 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +19A + 8 +0 + 62 + 0 + 10 +7813.529932 + 20 +10995.510447 + 30 +0.0 + 11 +7831.207602 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +19B + 8 +0 + 62 + 0 + 10 +7848.885271 + 20 +11030.865787 + 30 +0.0 + 11 +7866.562941 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +19C + 8 +0 + 62 + 0 + 10 +7818.374824 + 20 +10965.0 + 30 +0.0 + 11 +7831.207602 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +19D + 8 +0 + 62 + 0 + 10 +7848.885271 + 20 +10995.510447 + 30 +0.0 + 11 +7866.562941 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +19E + 8 +0 + 62 + 0 + 10 +7884.24061 + 20 +11030.865787 + 30 +0.0 + 11 +7901.91828 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +19F + 8 +0 + 62 + 0 + 10 +7853.730163 + 20 +10965.0 + 30 +0.0 + 11 +7866.562941 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +1A0 + 8 +0 + 62 + 0 + 10 +7884.24061 + 20 +10995.510447 + 30 +0.0 + 11 +7901.91828 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +1A1 + 8 +0 + 62 + 0 + 10 +7919.595949 + 20 +11030.865787 + 30 +0.0 + 11 +7937.273619 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +1A2 + 8 +0 + 62 + 0 + 10 +7889.085502 + 20 +10965.0 + 30 +0.0 + 11 +7901.91828 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +1A3 + 8 +0 + 62 + 0 + 10 +7919.595949 + 20 +10995.510447 + 30 +0.0 + 11 +7937.273619 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +1A4 + 8 +0 + 62 + 0 + 10 +7954.951288 + 20 +11030.865787 + 30 +0.0 + 11 +7972.628958 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +1A5 + 8 +0 + 62 + 0 + 10 +7924.440841 + 20 +10965.0 + 30 +0.0 + 11 +7937.273619 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +1A6 + 8 +0 + 62 + 0 + 10 +7954.951288 + 20 +10995.510447 + 30 +0.0 + 11 +7972.628958 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +1A7 + 8 +0 + 62 + 0 + 10 +7990.306627 + 20 +11030.865787 + 30 +0.0 + 11 +8007.984297 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +1A8 + 8 +0 + 62 + 0 + 10 +7959.79618 + 20 +10965.0 + 30 +0.0 + 11 +7972.628958 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +1A9 + 8 +0 + 62 + 0 + 10 +7990.306627 + 20 +10995.510447 + 30 +0.0 + 11 +8007.984297 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +1AA + 8 +0 + 62 + 0 + 10 +8025.661966 + 20 +11030.865787 + 30 +0.0 + 11 +8043.339636 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +1AB + 8 +0 + 62 + 0 + 10 +7995.151519 + 20 +10965.0 + 30 +0.0 + 11 +8007.984297 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +1AC + 8 +0 + 62 + 0 + 10 +8025.661966 + 20 +10995.510447 + 30 +0.0 + 11 +8043.339636 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +1AD + 8 +0 + 62 + 0 + 10 +8061.017306 + 20 +11030.865787 + 30 +0.0 + 11 +8078.694975 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +1AE + 8 +0 + 62 + 0 + 10 +8030.506858 + 20 +10965.0 + 30 +0.0 + 11 +8043.339636 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +1AF + 8 +0 + 62 + 0 + 10 +8061.017306 + 20 +10995.510447 + 30 +0.0 + 11 +8078.694975 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +1B0 + 8 +0 + 62 + 0 + 10 +8096.372645 + 20 +11030.865787 + 30 +0.0 + 11 +8114.050314 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +1B1 + 8 +0 + 62 + 0 + 10 +8065.862197 + 20 +10965.0 + 30 +0.0 + 11 +8078.694975 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +1B2 + 8 +0 + 62 + 0 + 10 +8096.372645 + 20 +10995.510447 + 30 +0.0 + 11 +8114.050314 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +1B3 + 8 +0 + 62 + 0 + 10 +8131.727984 + 20 +11030.865787 + 30 +0.0 + 11 +8149.405653 + 21 +11048.543456 + 31 +0.0 + 0 +LINE + 5 +1B4 + 8 +0 + 62 + 0 + 10 +8101.217536 + 20 +10965.0 + 30 +0.0 + 11 +8114.050314 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +1B5 + 8 +0 + 62 + 0 + 10 +8131.727984 + 20 +10995.510447 + 30 +0.0 + 11 +8149.405653 + 21 +11013.188117 + 31 +0.0 + 0 +LINE + 5 +1B6 + 8 +0 + 62 + 0 + 10 +8167.083323 + 20 +11030.865787 + 30 +0.0 + 11 +8175.0 + 21 +11038.782464 + 31 +0.0 + 0 +LINE + 5 +1B7 + 8 +0 + 62 + 0 + 10 +8136.572875 + 20 +10965.0 + 30 +0.0 + 11 +8149.405653 + 21 +10977.832778 + 31 +0.0 + 0 +LINE + 5 +1B8 + 8 +0 + 62 + 0 + 10 +8167.083323 + 20 +10995.510447 + 30 +0.0 + 11 +8175.0 + 21 +11003.427125 + 31 +0.0 + 0 +LINE + 5 +1B9 + 8 +0 + 62 + 0 + 10 +8171.928214 + 20 +10965.0 + 30 +0.0 + 11 +8175.0 + 21 +10968.071786 + 31 +0.0 + 0 +ENDBLK + 5 +1BA + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X4 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X4 + 1 + + 0 +LINE + 5 +1BC + 8 +0 + 62 + 0 + 10 +6750.0 + 20 +10868.61877 + 30 +0.0 + 11 +6775.0 + 21 +10868.61877 + 31 +0.0 + 0 +LINE + 5 +1BD + 8 +0 + 62 + 0 + 10 +6825.0 + 20 +10868.61877 + 30 +0.0 + 11 +6850.0 + 21 +10868.61877 + 31 +0.0 + 0 +LINE + 5 +1BE + 8 +0 + 62 + 0 + 10 +6900.0 + 20 +10868.61877 + 30 +0.0 + 11 +6925.0 + 21 +10868.61877 + 31 +0.0 + 0 +LINE + 5 +1BF + 8 +0 + 62 + 0 + 10 +6975.0 + 20 +10868.61877 + 30 +0.0 + 11 +7000.0 + 21 +10868.61877 + 31 +0.0 + 0 +LINE + 5 +1C0 + 8 +0 + 62 + 0 + 10 +7050.0 + 20 +10868.61877 + 30 +0.0 + 11 +7075.0 + 21 +10868.61877 + 31 +0.0 + 0 +LINE + 5 +1C1 + 8 +0 + 62 + 0 + 10 +7125.0 + 20 +10868.61877 + 30 +0.0 + 11 +7150.0 + 21 +10868.61877 + 31 +0.0 + 0 +LINE + 5 +1C2 + 8 +0 + 62 + 0 + 10 +7200.0 + 20 +10868.61877 + 30 +0.0 + 11 +7225.0 + 21 +10868.61877 + 31 +0.0 + 0 +LINE + 5 +1C3 + 8 +0 + 62 + 0 + 10 +7275.0 + 20 +10868.61877 + 30 +0.0 + 11 +7300.0 + 21 +10868.61877 + 31 +0.0 + 0 +LINE + 5 +1C4 + 8 +0 + 62 + 0 + 10 +7350.0 + 20 +10868.61877 + 30 +0.0 + 11 +7375.0 + 21 +10868.61877 + 31 +0.0 + 0 +LINE + 5 +1C5 + 8 +0 + 62 + 0 + 10 +7425.0 + 20 +10868.61877 + 30 +0.0 + 11 +7450.0 + 21 +10868.61877 + 31 +0.0 + 0 +LINE + 5 +1C6 + 8 +0 + 62 + 0 + 10 +7500.0 + 20 +10868.61877 + 30 +0.0 + 11 +7525.0 + 21 +10868.61877 + 31 +0.0 + 0 +LINE + 5 +1C7 + 8 +0 + 62 + 0 + 10 +7575.0 + 20 +10868.61877 + 30 +0.0 + 11 +7600.0 + 21 +10868.61877 + 31 +0.0 + 0 +LINE + 5 +1C8 + 8 +0 + 62 + 0 + 10 +7650.0 + 20 +10868.61877 + 30 +0.0 + 11 +7675.0 + 21 +10868.61877 + 31 +0.0 + 0 +LINE + 5 +1C9 + 8 +0 + 62 + 0 + 10 +7725.0 + 20 +10868.61877 + 30 +0.0 + 11 +7750.0 + 21 +10868.61877 + 31 +0.0 + 0 +LINE + 5 +1CA + 8 +0 + 62 + 0 + 10 +7800.0 + 20 +10868.61877 + 30 +0.0 + 11 +7825.0 + 21 +10868.61877 + 31 +0.0 + 0 +LINE + 5 +1CB + 8 +0 + 62 + 0 + 10 +7875.0 + 20 +10868.61877 + 30 +0.0 + 11 +7900.0 + 21 +10868.61877 + 31 +0.0 + 0 +LINE + 5 +1CC + 8 +0 + 62 + 0 + 10 +7950.0 + 20 +10868.61877 + 30 +0.0 + 11 +7975.0 + 21 +10868.61877 + 31 +0.0 + 0 +LINE + 5 +1CD + 8 +0 + 62 + 0 + 10 +8025.0 + 20 +10868.61877 + 30 +0.0 + 11 +8050.0 + 21 +10868.61877 + 31 +0.0 + 0 +LINE + 5 +1CE + 8 +0 + 62 + 0 + 10 +8100.0 + 20 +10868.61877 + 30 +0.0 + 11 +8125.0 + 21 +10868.61877 + 31 +0.0 + 0 +LINE + 5 +1CF + 8 +0 + 62 + 0 + 10 +6712.5 + 20 +10890.269405 + 30 +0.0 + 11 +6737.5 + 21 +10890.269405 + 31 +0.0 + 0 +LINE + 5 +1D0 + 8 +0 + 62 + 0 + 10 +6787.5 + 20 +10890.269405 + 30 +0.0 + 11 +6812.5 + 21 +10890.269405 + 31 +0.0 + 0 +LINE + 5 +1D1 + 8 +0 + 62 + 0 + 10 +6862.5 + 20 +10890.269405 + 30 +0.0 + 11 +6887.5 + 21 +10890.269405 + 31 +0.0 + 0 +LINE + 5 +1D2 + 8 +0 + 62 + 0 + 10 +6937.5 + 20 +10890.269405 + 30 +0.0 + 11 +6962.5 + 21 +10890.269405 + 31 +0.0 + 0 +LINE + 5 +1D3 + 8 +0 + 62 + 0 + 10 +7012.5 + 20 +10890.269405 + 30 +0.0 + 11 +7037.5 + 21 +10890.269405 + 31 +0.0 + 0 +LINE + 5 +1D4 + 8 +0 + 62 + 0 + 10 +7087.5 + 20 +10890.269405 + 30 +0.0 + 11 +7112.5 + 21 +10890.269405 + 31 +0.0 + 0 +LINE + 5 +1D5 + 8 +0 + 62 + 0 + 10 +7162.5 + 20 +10890.269405 + 30 +0.0 + 11 +7187.5 + 21 +10890.269405 + 31 +0.0 + 0 +LINE + 5 +1D6 + 8 +0 + 62 + 0 + 10 +7237.5 + 20 +10890.269405 + 30 +0.0 + 11 +7262.5 + 21 +10890.269405 + 31 +0.0 + 0 +LINE + 5 +1D7 + 8 +0 + 62 + 0 + 10 +7312.5 + 20 +10890.269405 + 30 +0.0 + 11 +7337.5 + 21 +10890.269405 + 31 +0.0 + 0 +LINE + 5 +1D8 + 8 +0 + 62 + 0 + 10 +7387.5 + 20 +10890.269405 + 30 +0.0 + 11 +7412.5 + 21 +10890.269405 + 31 +0.0 + 0 +LINE + 5 +1D9 + 8 +0 + 62 + 0 + 10 +7462.5 + 20 +10890.269405 + 30 +0.0 + 11 +7487.5 + 21 +10890.269405 + 31 +0.0 + 0 +LINE + 5 +1DA + 8 +0 + 62 + 0 + 10 +7537.5 + 20 +10890.269405 + 30 +0.0 + 11 +7562.5 + 21 +10890.269405 + 31 +0.0 + 0 +LINE + 5 +1DB + 8 +0 + 62 + 0 + 10 +7612.5 + 20 +10890.269405 + 30 +0.0 + 11 +7637.5 + 21 +10890.269405 + 31 +0.0 + 0 +LINE + 5 +1DC + 8 +0 + 62 + 0 + 10 +7687.5 + 20 +10890.269405 + 30 +0.0 + 11 +7712.5 + 21 +10890.269405 + 31 +0.0 + 0 +LINE + 5 +1DD + 8 +0 + 62 + 0 + 10 +7762.5 + 20 +10890.269405 + 30 +0.0 + 11 +7787.5 + 21 +10890.269405 + 31 +0.0 + 0 +LINE + 5 +1DE + 8 +0 + 62 + 0 + 10 +7837.5 + 20 +10890.269405 + 30 +0.0 + 11 +7862.5 + 21 +10890.269405 + 31 +0.0 + 0 +LINE + 5 +1DF + 8 +0 + 62 + 0 + 10 +7912.5 + 20 +10890.269405 + 30 +0.0 + 11 +7937.5 + 21 +10890.269405 + 31 +0.0 + 0 +LINE + 5 +1E0 + 8 +0 + 62 + 0 + 10 +7987.5 + 20 +10890.269405 + 30 +0.0 + 11 +8012.5 + 21 +10890.269405 + 31 +0.0 + 0 +LINE + 5 +1E1 + 8 +0 + 62 + 0 + 10 +8062.5 + 20 +10890.269405 + 30 +0.0 + 11 +8087.5 + 21 +10890.269405 + 31 +0.0 + 0 +LINE + 5 +1E2 + 8 +0 + 62 + 0 + 10 +8137.5 + 20 +10890.269405 + 30 +0.0 + 11 +8162.5 + 21 +10890.269405 + 31 +0.0 + 0 +LINE + 5 +1E3 + 8 +0 + 62 + 0 + 10 +6750.0 + 20 +10911.92004 + 30 +0.0 + 11 +6775.0 + 21 +10911.92004 + 31 +0.0 + 0 +LINE + 5 +1E4 + 8 +0 + 62 + 0 + 10 +6825.0 + 20 +10911.92004 + 30 +0.0 + 11 +6850.0 + 21 +10911.92004 + 31 +0.0 + 0 +LINE + 5 +1E5 + 8 +0 + 62 + 0 + 10 +6900.0 + 20 +10911.92004 + 30 +0.0 + 11 +6925.0 + 21 +10911.92004 + 31 +0.0 + 0 +LINE + 5 +1E6 + 8 +0 + 62 + 0 + 10 +6975.0 + 20 +10911.92004 + 30 +0.0 + 11 +7000.0 + 21 +10911.92004 + 31 +0.0 + 0 +LINE + 5 +1E7 + 8 +0 + 62 + 0 + 10 +7050.0 + 20 +10911.92004 + 30 +0.0 + 11 +7075.0 + 21 +10911.92004 + 31 +0.0 + 0 +LINE + 5 +1E8 + 8 +0 + 62 + 0 + 10 +7125.0 + 20 +10911.92004 + 30 +0.0 + 11 +7150.0 + 21 +10911.92004 + 31 +0.0 + 0 +LINE + 5 +1E9 + 8 +0 + 62 + 0 + 10 +7200.0 + 20 +10911.92004 + 30 +0.0 + 11 +7225.0 + 21 +10911.92004 + 31 +0.0 + 0 +LINE + 5 +1EA + 8 +0 + 62 + 0 + 10 +7275.0 + 20 +10911.92004 + 30 +0.0 + 11 +7300.0 + 21 +10911.92004 + 31 +0.0 + 0 +LINE + 5 +1EB + 8 +0 + 62 + 0 + 10 +7350.0 + 20 +10911.92004 + 30 +0.0 + 11 +7375.0 + 21 +10911.92004 + 31 +0.0 + 0 +LINE + 5 +1EC + 8 +0 + 62 + 0 + 10 +7425.0 + 20 +10911.92004 + 30 +0.0 + 11 +7450.0 + 21 +10911.92004 + 31 +0.0 + 0 +LINE + 5 +1ED + 8 +0 + 62 + 0 + 10 +7500.0 + 20 +10911.92004 + 30 +0.0 + 11 +7525.0 + 21 +10911.92004 + 31 +0.0 + 0 +LINE + 5 +1EE + 8 +0 + 62 + 0 + 10 +7575.0 + 20 +10911.92004 + 30 +0.0 + 11 +7600.0 + 21 +10911.92004 + 31 +0.0 + 0 +LINE + 5 +1EF + 8 +0 + 62 + 0 + 10 +7650.0 + 20 +10911.92004 + 30 +0.0 + 11 +7675.0 + 21 +10911.92004 + 31 +0.0 + 0 +LINE + 5 +1F0 + 8 +0 + 62 + 0 + 10 +7725.0 + 20 +10911.92004 + 30 +0.0 + 11 +7750.0 + 21 +10911.92004 + 31 +0.0 + 0 +LINE + 5 +1F1 + 8 +0 + 62 + 0 + 10 +7800.0 + 20 +10911.92004 + 30 +0.0 + 11 +7825.0 + 21 +10911.92004 + 31 +0.0 + 0 +LINE + 5 +1F2 + 8 +0 + 62 + 0 + 10 +7875.0 + 20 +10911.92004 + 30 +0.0 + 11 +7900.0 + 21 +10911.92004 + 31 +0.0 + 0 +LINE + 5 +1F3 + 8 +0 + 62 + 0 + 10 +7950.0 + 20 +10911.92004 + 30 +0.0 + 11 +7975.0 + 21 +10911.92004 + 31 +0.0 + 0 +LINE + 5 +1F4 + 8 +0 + 62 + 0 + 10 +8025.0 + 20 +10911.92004 + 30 +0.0 + 11 +8050.0 + 21 +10911.92004 + 31 +0.0 + 0 +LINE + 5 +1F5 + 8 +0 + 62 + 0 + 10 +8100.0 + 20 +10911.92004 + 30 +0.0 + 11 +8125.0 + 21 +10911.92004 + 31 +0.0 + 0 +LINE + 5 +1F6 + 8 +0 + 62 + 0 + 10 +6712.5 + 20 +10846.968135 + 30 +0.0 + 11 +6737.5 + 21 +10846.968135 + 31 +0.0 + 0 +LINE + 5 +1F7 + 8 +0 + 62 + 0 + 10 +6787.5 + 20 +10846.968135 + 30 +0.0 + 11 +6812.5 + 21 +10846.968135 + 31 +0.0 + 0 +LINE + 5 +1F8 + 8 +0 + 62 + 0 + 10 +6862.5 + 20 +10846.968135 + 30 +0.0 + 11 +6887.5 + 21 +10846.968135 + 31 +0.0 + 0 +LINE + 5 +1F9 + 8 +0 + 62 + 0 + 10 +6937.5 + 20 +10846.968135 + 30 +0.0 + 11 +6962.5 + 21 +10846.968135 + 31 +0.0 + 0 +LINE + 5 +1FA + 8 +0 + 62 + 0 + 10 +7012.5 + 20 +10846.968135 + 30 +0.0 + 11 +7037.5 + 21 +10846.968135 + 31 +0.0 + 0 +LINE + 5 +1FB + 8 +0 + 62 + 0 + 10 +7087.5 + 20 +10846.968135 + 30 +0.0 + 11 +7112.5 + 21 +10846.968135 + 31 +0.0 + 0 +LINE + 5 +1FC + 8 +0 + 62 + 0 + 10 +7162.5 + 20 +10846.968135 + 30 +0.0 + 11 +7187.5 + 21 +10846.968135 + 31 +0.0 + 0 +LINE + 5 +1FD + 8 +0 + 62 + 0 + 10 +7237.5 + 20 +10846.968135 + 30 +0.0 + 11 +7262.5 + 21 +10846.968135 + 31 +0.0 + 0 +LINE + 5 +1FE + 8 +0 + 62 + 0 + 10 +7312.5 + 20 +10846.968135 + 30 +0.0 + 11 +7337.5 + 21 +10846.968135 + 31 +0.0 + 0 +LINE + 5 +1FF + 8 +0 + 62 + 0 + 10 +7387.5 + 20 +10846.968135 + 30 +0.0 + 11 +7412.5 + 21 +10846.968135 + 31 +0.0 + 0 +LINE + 5 +200 + 8 +0 + 62 + 0 + 10 +7462.5 + 20 +10846.968135 + 30 +0.0 + 11 +7487.5 + 21 +10846.968135 + 31 +0.0 + 0 +LINE + 5 +201 + 8 +0 + 62 + 0 + 10 +7537.5 + 20 +10846.968135 + 30 +0.0 + 11 +7562.5 + 21 +10846.968135 + 31 +0.0 + 0 +LINE + 5 +202 + 8 +0 + 62 + 0 + 10 +7612.5 + 20 +10846.968135 + 30 +0.0 + 11 +7637.5 + 21 +10846.968135 + 31 +0.0 + 0 +LINE + 5 +203 + 8 +0 + 62 + 0 + 10 +7687.5 + 20 +10846.968135 + 30 +0.0 + 11 +7712.5 + 21 +10846.968135 + 31 +0.0 + 0 +LINE + 5 +204 + 8 +0 + 62 + 0 + 10 +7762.5 + 20 +10846.968135 + 30 +0.0 + 11 +7787.5 + 21 +10846.968135 + 31 +0.0 + 0 +LINE + 5 +205 + 8 +0 + 62 + 0 + 10 +7837.5 + 20 +10846.968135 + 30 +0.0 + 11 +7862.5 + 21 +10846.968135 + 31 +0.0 + 0 +LINE + 5 +206 + 8 +0 + 62 + 0 + 10 +7912.5 + 20 +10846.968135 + 30 +0.0 + 11 +7937.5 + 21 +10846.968135 + 31 +0.0 + 0 +LINE + 5 +207 + 8 +0 + 62 + 0 + 10 +7987.5 + 20 +10846.968135 + 30 +0.0 + 11 +8012.5 + 21 +10846.968135 + 31 +0.0 + 0 +LINE + 5 +208 + 8 +0 + 62 + 0 + 10 +8062.5 + 20 +10846.968135 + 30 +0.0 + 11 +8087.5 + 21 +10846.968135 + 31 +0.0 + 0 +LINE + 5 +209 + 8 +0 + 62 + 0 + 10 +8137.5 + 20 +10846.968135 + 30 +0.0 + 11 +8162.5 + 21 +10846.968135 + 31 +0.0 + 0 +LINE + 5 +20A + 8 +0 + 62 + 0 + 10 +7424.999955 + 20 +10868.618792 + 30 +0.0 + 11 +7412.499955 + 21 +10890.269427 + 31 +0.0 + 0 +LINE + 5 +20B + 8 +0 + 62 + 0 + 10 +7423.739901 + 20 +10827.5 + 30 +0.0 + 11 +7412.499955 + 21 +10846.968157 + 31 +0.0 + 0 +LINE + 5 +20C + 8 +0 + 62 + 0 + 10 +7387.499955 + 20 +10890.269427 + 30 +0.0 + 11 +7374.999955 + 21 +10911.920062 + 31 +0.0 + 0 +LINE + 5 +20D + 8 +0 + 62 + 0 + 10 +7387.499955 + 20 +10846.968157 + 30 +0.0 + 11 +7374.999955 + 21 +10868.618792 + 31 +0.0 + 0 +LINE + 5 +20E + 8 +0 + 62 + 0 + 10 +7349.999955 + 20 +10911.920062 + 30 +0.0 + 11 +7341.004874 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +20F + 8 +0 + 62 + 0 + 10 +7349.999955 + 20 +10868.618792 + 30 +0.0 + 11 +7337.499955 + 21 +10890.269427 + 31 +0.0 + 0 +LINE + 5 +210 + 8 +0 + 62 + 0 + 10 +7348.739901 + 20 +10827.5 + 30 +0.0 + 11 +7337.499955 + 21 +10846.968157 + 31 +0.0 + 0 +LINE + 5 +211 + 8 +0 + 62 + 0 + 10 +7312.499955 + 20 +10890.269427 + 30 +0.0 + 11 +7299.999955 + 21 +10911.920062 + 31 +0.0 + 0 +LINE + 5 +212 + 8 +0 + 62 + 0 + 10 +7312.499956 + 20 +10846.968157 + 30 +0.0 + 11 +7299.999956 + 21 +10868.618792 + 31 +0.0 + 0 +LINE + 5 +213 + 8 +0 + 62 + 0 + 10 +7274.999956 + 20 +10911.920062 + 30 +0.0 + 11 +7266.004874 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +214 + 8 +0 + 62 + 0 + 10 +7274.999956 + 20 +10868.618792 + 30 +0.0 + 11 +7262.499956 + 21 +10890.269427 + 31 +0.0 + 0 +LINE + 5 +215 + 8 +0 + 62 + 0 + 10 +7273.739901 + 20 +10827.5 + 30 +0.0 + 11 +7262.499956 + 21 +10846.968157 + 31 +0.0 + 0 +LINE + 5 +216 + 8 +0 + 62 + 0 + 10 +7237.499956 + 20 +10890.269427 + 30 +0.0 + 11 +7224.999956 + 21 +10911.920062 + 31 +0.0 + 0 +LINE + 5 +217 + 8 +0 + 62 + 0 + 10 +7237.499956 + 20 +10846.968157 + 30 +0.0 + 11 +7224.999956 + 21 +10868.618792 + 31 +0.0 + 0 +LINE + 5 +218 + 8 +0 + 62 + 0 + 10 +7199.999956 + 20 +10911.920062 + 30 +0.0 + 11 +7191.004874 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +219 + 8 +0 + 62 + 0 + 10 +7199.999956 + 20 +10868.618792 + 30 +0.0 + 11 +7187.499956 + 21 +10890.269427 + 31 +0.0 + 0 +LINE + 5 +21A + 8 +0 + 62 + 0 + 10 +7198.739902 + 20 +10827.5 + 30 +0.0 + 11 +7187.499956 + 21 +10846.968157 + 31 +0.0 + 0 +LINE + 5 +21B + 8 +0 + 62 + 0 + 10 +7162.499956 + 20 +10890.269427 + 30 +0.0 + 11 +7149.999956 + 21 +10911.920062 + 31 +0.0 + 0 +LINE + 5 +21C + 8 +0 + 62 + 0 + 10 +7162.499956 + 20 +10846.968157 + 30 +0.0 + 11 +7149.999956 + 21 +10868.618792 + 31 +0.0 + 0 +LINE + 5 +21D + 8 +0 + 62 + 0 + 10 +7124.999956 + 20 +10911.920062 + 30 +0.0 + 11 +7116.004875 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +21E + 8 +0 + 62 + 0 + 10 +7124.999956 + 20 +10868.618792 + 30 +0.0 + 11 +7112.499956 + 21 +10890.269427 + 31 +0.0 + 0 +LINE + 5 +21F + 8 +0 + 62 + 0 + 10 +7123.739902 + 20 +10827.5 + 30 +0.0 + 11 +7112.499956 + 21 +10846.968157 + 31 +0.0 + 0 +LINE + 5 +220 + 8 +0 + 62 + 0 + 10 +7087.499956 + 20 +10890.269427 + 30 +0.0 + 11 +7074.999956 + 21 +10911.920062 + 31 +0.0 + 0 +LINE + 5 +221 + 8 +0 + 62 + 0 + 10 +7087.499956 + 20 +10846.968157 + 30 +0.0 + 11 +7074.999956 + 21 +10868.618792 + 31 +0.0 + 0 +LINE + 5 +222 + 8 +0 + 62 + 0 + 10 +7049.999956 + 20 +10911.920062 + 30 +0.0 + 11 +7041.004875 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +223 + 8 +0 + 62 + 0 + 10 +7049.999956 + 20 +10868.618792 + 30 +0.0 + 11 +7037.499956 + 21 +10890.269427 + 31 +0.0 + 0 +LINE + 5 +224 + 8 +0 + 62 + 0 + 10 +7048.739902 + 20 +10827.5 + 30 +0.0 + 11 +7037.499956 + 21 +10846.968157 + 31 +0.0 + 0 +LINE + 5 +225 + 8 +0 + 62 + 0 + 10 +7012.499956 + 20 +10890.269427 + 30 +0.0 + 11 +6999.999956 + 21 +10911.920063 + 31 +0.0 + 0 +LINE + 5 +226 + 8 +0 + 62 + 0 + 10 +7012.499956 + 20 +10846.968157 + 30 +0.0 + 11 +6999.999956 + 21 +10868.618792 + 31 +0.0 + 0 +LINE + 5 +227 + 8 +0 + 62 + 0 + 10 +6974.999956 + 20 +10911.920063 + 30 +0.0 + 11 +6966.004875 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +228 + 8 +0 + 62 + 0 + 10 +6974.999957 + 20 +10868.618792 + 30 +0.0 + 11 +6962.499957 + 21 +10890.269428 + 31 +0.0 + 0 +LINE + 5 +229 + 8 +0 + 62 + 0 + 10 +6973.739903 + 20 +10827.5 + 30 +0.0 + 11 +6962.499957 + 21 +10846.968157 + 31 +0.0 + 0 +LINE + 5 +22A + 8 +0 + 62 + 0 + 10 +6937.499957 + 20 +10890.269428 + 30 +0.0 + 11 +6924.999957 + 21 +10911.920063 + 31 +0.0 + 0 +LINE + 5 +22B + 8 +0 + 62 + 0 + 10 +6937.499957 + 20 +10846.968157 + 30 +0.0 + 11 +6924.999957 + 21 +10868.618793 + 31 +0.0 + 0 +LINE + 5 +22C + 8 +0 + 62 + 0 + 10 +6899.999957 + 20 +10911.920063 + 30 +0.0 + 11 +6891.004876 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +22D + 8 +0 + 62 + 0 + 10 +6899.999957 + 20 +10868.618793 + 30 +0.0 + 11 +6887.499957 + 21 +10890.269428 + 31 +0.0 + 0 +LINE + 5 +22E + 8 +0 + 62 + 0 + 10 +6898.739903 + 20 +10827.5 + 30 +0.0 + 11 +6887.499957 + 21 +10846.968158 + 31 +0.0 + 0 +LINE + 5 +22F + 8 +0 + 62 + 0 + 10 +6862.499957 + 20 +10890.269428 + 30 +0.0 + 11 +6849.999957 + 21 +10911.920063 + 31 +0.0 + 0 +LINE + 5 +230 + 8 +0 + 62 + 0 + 10 +6862.499957 + 20 +10846.968158 + 30 +0.0 + 11 +6849.999957 + 21 +10868.618793 + 31 +0.0 + 0 +LINE + 5 +231 + 8 +0 + 62 + 0 + 10 +6824.999957 + 20 +10911.920063 + 30 +0.0 + 11 +6816.004876 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +232 + 8 +0 + 62 + 0 + 10 +6824.999957 + 20 +10868.618793 + 30 +0.0 + 11 +6812.499957 + 21 +10890.269428 + 31 +0.0 + 0 +LINE + 5 +233 + 8 +0 + 62 + 0 + 10 +6823.739903 + 20 +10827.5 + 30 +0.0 + 11 +6812.499957 + 21 +10846.968158 + 31 +0.0 + 0 +LINE + 5 +234 + 8 +0 + 62 + 0 + 10 +6787.499957 + 20 +10890.269428 + 30 +0.0 + 11 +6774.999957 + 21 +10911.920063 + 31 +0.0 + 0 +LINE + 5 +235 + 8 +0 + 62 + 0 + 10 +6787.499957 + 20 +10846.968158 + 30 +0.0 + 11 +6774.999957 + 21 +10868.618793 + 31 +0.0 + 0 +LINE + 5 +236 + 8 +0 + 62 + 0 + 10 +6749.999957 + 20 +10911.920063 + 30 +0.0 + 11 +6741.004876 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +237 + 8 +0 + 62 + 0 + 10 +6749.999957 + 20 +10868.618793 + 30 +0.0 + 11 +6737.499957 + 21 +10890.269428 + 31 +0.0 + 0 +LINE + 5 +238 + 8 +0 + 62 + 0 + 10 +6748.739904 + 20 +10827.5 + 30 +0.0 + 11 +6737.499957 + 21 +10846.968158 + 31 +0.0 + 0 +LINE + 5 +239 + 8 +0 + 62 + 0 + 10 +6712.499957 + 20 +10890.269428 + 30 +0.0 + 11 +6710.0 + 21 +10894.599481 + 31 +0.0 + 0 +LINE + 5 +23A + 8 +0 + 62 + 0 + 10 +6712.499957 + 20 +10846.968158 + 30 +0.0 + 11 +6710.0 + 21 +10851.298211 + 31 +0.0 + 0 +LINE + 5 +23B + 8 +0 + 62 + 0 + 10 +7462.499955 + 20 +10846.968156 + 30 +0.0 + 11 +7449.999955 + 21 +10868.618792 + 31 +0.0 + 0 +LINE + 5 +23C + 8 +0 + 62 + 0 + 10 +7424.999955 + 20 +10911.920062 + 30 +0.0 + 11 +7416.004873 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +23D + 8 +0 + 62 + 0 + 10 +7498.7399 + 20 +10827.5 + 30 +0.0 + 11 +7487.499955 + 21 +10846.968156 + 31 +0.0 + 0 +LINE + 5 +23E + 8 +0 + 62 + 0 + 10 +7462.499955 + 20 +10890.269427 + 30 +0.0 + 11 +7449.999955 + 21 +10911.920062 + 31 +0.0 + 0 +LINE + 5 +23F + 8 +0 + 62 + 0 + 10 +7499.999955 + 20 +10868.618791 + 30 +0.0 + 11 +7487.499955 + 21 +10890.269427 + 31 +0.0 + 0 +LINE + 5 +240 + 8 +0 + 62 + 0 + 10 +7537.499955 + 20 +10846.968156 + 30 +0.0 + 11 +7524.999955 + 21 +10868.618791 + 31 +0.0 + 0 +LINE + 5 +241 + 8 +0 + 62 + 0 + 10 +7499.999955 + 20 +10911.920062 + 30 +0.0 + 11 +7491.004873 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +242 + 8 +0 + 62 + 0 + 10 +7573.7399 + 20 +10827.5 + 30 +0.0 + 11 +7562.499955 + 21 +10846.968156 + 31 +0.0 + 0 +LINE + 5 +243 + 8 +0 + 62 + 0 + 10 +7537.499955 + 20 +10890.269426 + 30 +0.0 + 11 +7524.999955 + 21 +10911.920062 + 31 +0.0 + 0 +LINE + 5 +244 + 8 +0 + 62 + 0 + 10 +7574.999955 + 20 +10868.618791 + 30 +0.0 + 11 +7562.499955 + 21 +10890.269426 + 31 +0.0 + 0 +LINE + 5 +245 + 8 +0 + 62 + 0 + 10 +7612.499955 + 20 +10846.968156 + 30 +0.0 + 11 +7599.999955 + 21 +10868.618791 + 31 +0.0 + 0 +LINE + 5 +246 + 8 +0 + 62 + 0 + 10 +7574.999955 + 20 +10911.920061 + 30 +0.0 + 11 +7566.004873 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +247 + 8 +0 + 62 + 0 + 10 +7648.7399 + 20 +10827.5 + 30 +0.0 + 11 +7637.499954 + 21 +10846.968156 + 31 +0.0 + 0 +LINE + 5 +248 + 8 +0 + 62 + 0 + 10 +7612.499954 + 20 +10890.269426 + 30 +0.0 + 11 +7599.999954 + 21 +10911.920061 + 31 +0.0 + 0 +LINE + 5 +249 + 8 +0 + 62 + 0 + 10 +7649.999954 + 20 +10868.618791 + 30 +0.0 + 11 +7637.499954 + 21 +10890.269426 + 31 +0.0 + 0 +LINE + 5 +24A + 8 +0 + 62 + 0 + 10 +7687.499954 + 20 +10846.968156 + 30 +0.0 + 11 +7674.999954 + 21 +10868.618791 + 31 +0.0 + 0 +LINE + 5 +24B + 8 +0 + 62 + 0 + 10 +7649.999954 + 20 +10911.920061 + 30 +0.0 + 11 +7641.004872 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +24C + 8 +0 + 62 + 0 + 10 +7723.739899 + 20 +10827.5 + 30 +0.0 + 11 +7712.499954 + 21 +10846.968156 + 31 +0.0 + 0 +LINE + 5 +24D + 8 +0 + 62 + 0 + 10 +7687.499954 + 20 +10890.269426 + 30 +0.0 + 11 +7674.999954 + 21 +10911.920061 + 31 +0.0 + 0 +LINE + 5 +24E + 8 +0 + 62 + 0 + 10 +7724.999954 + 20 +10868.618791 + 30 +0.0 + 11 +7712.499954 + 21 +10890.269426 + 31 +0.0 + 0 +LINE + 5 +24F + 8 +0 + 62 + 0 + 10 +7762.499954 + 20 +10846.968156 + 30 +0.0 + 11 +7749.999954 + 21 +10868.618791 + 31 +0.0 + 0 +LINE + 5 +250 + 8 +0 + 62 + 0 + 10 +7724.999954 + 20 +10911.920061 + 30 +0.0 + 11 +7716.004872 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +251 + 8 +0 + 62 + 0 + 10 +7798.739899 + 20 +10827.5 + 30 +0.0 + 11 +7787.499954 + 21 +10846.968156 + 31 +0.0 + 0 +LINE + 5 +252 + 8 +0 + 62 + 0 + 10 +7762.499954 + 20 +10890.269426 + 30 +0.0 + 11 +7749.999954 + 21 +10911.920061 + 31 +0.0 + 0 +LINE + 5 +253 + 8 +0 + 62 + 0 + 10 +7799.999954 + 20 +10868.618791 + 30 +0.0 + 11 +7787.499954 + 21 +10890.269426 + 31 +0.0 + 0 +LINE + 5 +254 + 8 +0 + 62 + 0 + 10 +7837.499954 + 20 +10846.968156 + 30 +0.0 + 11 +7824.999954 + 21 +10868.618791 + 31 +0.0 + 0 +LINE + 5 +255 + 8 +0 + 62 + 0 + 10 +7799.999954 + 20 +10911.920061 + 30 +0.0 + 11 +7791.004872 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +256 + 8 +0 + 62 + 0 + 10 +7873.739899 + 20 +10827.5 + 30 +0.0 + 11 +7862.499954 + 21 +10846.968156 + 31 +0.0 + 0 +LINE + 5 +257 + 8 +0 + 62 + 0 + 10 +7837.499954 + 20 +10890.269426 + 30 +0.0 + 11 +7824.999954 + 21 +10911.920061 + 31 +0.0 + 0 +LINE + 5 +258 + 8 +0 + 62 + 0 + 10 +7874.999954 + 20 +10868.618791 + 30 +0.0 + 11 +7862.499954 + 21 +10890.269426 + 31 +0.0 + 0 +LINE + 5 +259 + 8 +0 + 62 + 0 + 10 +7912.499954 + 20 +10846.968156 + 30 +0.0 + 11 +7899.999954 + 21 +10868.618791 + 31 +0.0 + 0 +LINE + 5 +25A + 8 +0 + 62 + 0 + 10 +7874.999954 + 20 +10911.920061 + 30 +0.0 + 11 +7866.004871 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +25B + 8 +0 + 62 + 0 + 10 +7948.739898 + 20 +10827.5 + 30 +0.0 + 11 +7937.499953 + 21 +10846.968156 + 31 +0.0 + 0 +LINE + 5 +25C + 8 +0 + 62 + 0 + 10 +7912.499953 + 20 +10890.269426 + 30 +0.0 + 11 +7899.999953 + 21 +10911.920061 + 31 +0.0 + 0 +LINE + 5 +25D + 8 +0 + 62 + 0 + 10 +7949.999953 + 20 +10868.618791 + 30 +0.0 + 11 +7937.499953 + 21 +10890.269426 + 31 +0.0 + 0 +LINE + 5 +25E + 8 +0 + 62 + 0 + 10 +7987.499953 + 20 +10846.968155 + 30 +0.0 + 11 +7974.999953 + 21 +10868.618791 + 31 +0.0 + 0 +LINE + 5 +25F + 8 +0 + 62 + 0 + 10 +7949.999953 + 20 +10911.920061 + 30 +0.0 + 11 +7941.004871 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +260 + 8 +0 + 62 + 0 + 10 +8023.739898 + 20 +10827.5 + 30 +0.0 + 11 +8012.499953 + 21 +10846.968155 + 31 +0.0 + 0 +LINE + 5 +261 + 8 +0 + 62 + 0 + 10 +7987.499953 + 20 +10890.269426 + 30 +0.0 + 11 +7974.999953 + 21 +10911.920061 + 31 +0.0 + 0 +LINE + 5 +262 + 8 +0 + 62 + 0 + 10 +8024.999953 + 20 +10868.61879 + 30 +0.0 + 11 +8012.499953 + 21 +10890.269426 + 31 +0.0 + 0 +LINE + 5 +263 + 8 +0 + 62 + 0 + 10 +8062.499953 + 20 +10846.968155 + 30 +0.0 + 11 +8049.999953 + 21 +10868.61879 + 31 +0.0 + 0 +LINE + 5 +264 + 8 +0 + 62 + 0 + 10 +8024.999953 + 20 +10911.920061 + 30 +0.0 + 11 +8016.004871 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +265 + 8 +0 + 62 + 0 + 10 +8098.739898 + 20 +10827.5 + 30 +0.0 + 11 +8087.499953 + 21 +10846.968155 + 31 +0.0 + 0 +LINE + 5 +266 + 8 +0 + 62 + 0 + 10 +8062.499953 + 20 +10890.269425 + 30 +0.0 + 11 +8049.999953 + 21 +10911.920061 + 31 +0.0 + 0 +LINE + 5 +267 + 8 +0 + 62 + 0 + 10 +8099.999953 + 20 +10868.61879 + 30 +0.0 + 11 +8087.499953 + 21 +10890.269425 + 31 +0.0 + 0 +LINE + 5 +268 + 8 +0 + 62 + 0 + 10 +8137.499953 + 20 +10846.968155 + 30 +0.0 + 11 +8124.999953 + 21 +10868.61879 + 31 +0.0 + 0 +LINE + 5 +269 + 8 +0 + 62 + 0 + 10 +8099.999953 + 20 +10911.92006 + 30 +0.0 + 11 +8091.004871 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +26A + 8 +0 + 62 + 0 + 10 +8173.739897 + 20 +10827.5 + 30 +0.0 + 11 +8162.499953 + 21 +10846.968155 + 31 +0.0 + 0 +LINE + 5 +26B + 8 +0 + 62 + 0 + 10 +8137.499953 + 20 +10890.269425 + 30 +0.0 + 11 +8124.999953 + 21 +10911.92006 + 31 +0.0 + 0 +LINE + 5 +26C + 8 +0 + 62 + 0 + 10 +8174.999953 + 20 +10868.61879 + 30 +0.0 + 11 +8162.499953 + 21 +10890.269425 + 31 +0.0 + 0 +LINE + 5 +26D + 8 +0 + 62 + 0 + 10 +8174.999953 + 20 +10911.92006 + 30 +0.0 + 11 +8166.00487 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +26E + 8 +0 + 62 + 0 + 10 +7412.499996 + 20 +10846.968185 + 30 +0.0 + 11 +7424.999996 + 21 +10868.61882 + 31 +0.0 + 0 +LINE + 5 +26F + 8 +0 + 62 + 0 + 10 +7449.999996 + 20 +10911.92009 + 30 +0.0 + 11 +7458.995062 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +270 + 8 +0 + 62 + 0 + 10 +7376.260035 + 20 +10827.5 + 30 +0.0 + 11 +7387.499996 + 21 +10846.968185 + 31 +0.0 + 0 +LINE + 5 +271 + 8 +0 + 62 + 0 + 10 +7412.499996 + 20 +10890.269455 + 30 +0.0 + 11 +7424.999996 + 21 +10911.92009 + 31 +0.0 + 0 +LINE + 5 +272 + 8 +0 + 62 + 0 + 10 +7374.999996 + 20 +10868.61882 + 30 +0.0 + 11 +7387.499996 + 21 +10890.269455 + 31 +0.0 + 0 +LINE + 5 +273 + 8 +0 + 62 + 0 + 10 +7337.499996 + 20 +10846.968184 + 30 +0.0 + 11 +7349.999996 + 21 +10868.61882 + 31 +0.0 + 0 +LINE + 5 +274 + 8 +0 + 62 + 0 + 10 +7374.999996 + 20 +10911.92009 + 30 +0.0 + 11 +7383.995062 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +275 + 8 +0 + 62 + 0 + 10 +7301.260035 + 20 +10827.5 + 30 +0.0 + 11 +7312.499997 + 21 +10846.968184 + 31 +0.0 + 0 +LINE + 5 +276 + 8 +0 + 62 + 0 + 10 +7337.499997 + 20 +10890.269455 + 30 +0.0 + 11 +7349.999997 + 21 +10911.92009 + 31 +0.0 + 0 +LINE + 5 +277 + 8 +0 + 62 + 0 + 10 +7299.999997 + 20 +10868.618819 + 30 +0.0 + 11 +7312.499997 + 21 +10890.269455 + 31 +0.0 + 0 +LINE + 5 +278 + 8 +0 + 62 + 0 + 10 +7262.499997 + 20 +10846.968184 + 30 +0.0 + 11 +7274.999997 + 21 +10868.618819 + 31 +0.0 + 0 +LINE + 5 +279 + 8 +0 + 62 + 0 + 10 +7299.999997 + 20 +10911.92009 + 30 +0.0 + 11 +7308.995062 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +27A + 8 +0 + 62 + 0 + 10 +7226.260035 + 20 +10827.5 + 30 +0.0 + 11 +7237.499997 + 21 +10846.968184 + 31 +0.0 + 0 +LINE + 5 +27B + 8 +0 + 62 + 0 + 10 +7262.499997 + 20 +10890.269454 + 30 +0.0 + 11 +7274.999997 + 21 +10911.92009 + 31 +0.0 + 0 +LINE + 5 +27C + 8 +0 + 62 + 0 + 10 +7224.999997 + 20 +10868.618819 + 30 +0.0 + 11 +7237.499997 + 21 +10890.269454 + 31 +0.0 + 0 +LINE + 5 +27D + 8 +0 + 62 + 0 + 10 +7187.499997 + 20 +10846.968184 + 30 +0.0 + 11 +7199.999997 + 21 +10868.618819 + 31 +0.0 + 0 +LINE + 5 +27E + 8 +0 + 62 + 0 + 10 +7224.999997 + 20 +10911.920089 + 30 +0.0 + 11 +7233.995063 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +27F + 8 +0 + 62 + 0 + 10 +7151.260036 + 20 +10827.5 + 30 +0.0 + 11 +7162.499997 + 21 +10846.968184 + 31 +0.0 + 0 +LINE + 5 +280 + 8 +0 + 62 + 0 + 10 +7187.499997 + 20 +10890.269454 + 30 +0.0 + 11 +7199.999997 + 21 +10911.920089 + 31 +0.0 + 0 +LINE + 5 +281 + 8 +0 + 62 + 0 + 10 +7149.999997 + 20 +10868.618819 + 30 +0.0 + 11 +7162.499997 + 21 +10890.269454 + 31 +0.0 + 0 +LINE + 5 +282 + 8 +0 + 62 + 0 + 10 +7112.499997 + 20 +10846.968184 + 30 +0.0 + 11 +7124.999997 + 21 +10868.618819 + 31 +0.0 + 0 +LINE + 5 +283 + 8 +0 + 62 + 0 + 10 +7149.999997 + 20 +10911.920089 + 30 +0.0 + 11 +7158.995063 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +284 + 8 +0 + 62 + 0 + 10 +7076.260036 + 20 +10827.5 + 30 +0.0 + 11 +7087.499997 + 21 +10846.968184 + 31 +0.0 + 0 +LINE + 5 +285 + 8 +0 + 62 + 0 + 10 +7112.499997 + 20 +10890.269454 + 30 +0.0 + 11 +7124.999997 + 21 +10911.920089 + 31 +0.0 + 0 +LINE + 5 +286 + 8 +0 + 62 + 0 + 10 +7074.999997 + 20 +10868.618819 + 30 +0.0 + 11 +7087.499997 + 21 +10890.269454 + 31 +0.0 + 0 +LINE + 5 +287 + 8 +0 + 62 + 0 + 10 +7037.499997 + 20 +10846.968184 + 30 +0.0 + 11 +7049.999997 + 21 +10868.618819 + 31 +0.0 + 0 +LINE + 5 +288 + 8 +0 + 62 + 0 + 10 +7074.999997 + 20 +10911.920089 + 30 +0.0 + 11 +7083.995063 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +289 + 8 +0 + 62 + 0 + 10 +7001.260036 + 20 +10827.5 + 30 +0.0 + 11 +7012.499998 + 21 +10846.968184 + 31 +0.0 + 0 +LINE + 5 +28A + 8 +0 + 62 + 0 + 10 +7037.499998 + 20 +10890.269454 + 30 +0.0 + 11 +7049.999998 + 21 +10911.920089 + 31 +0.0 + 0 +LINE + 5 +28B + 8 +0 + 62 + 0 + 10 +6999.999998 + 20 +10868.618819 + 30 +0.0 + 11 +7012.499998 + 21 +10890.269454 + 31 +0.0 + 0 +LINE + 5 +28C + 8 +0 + 62 + 0 + 10 +6962.499998 + 20 +10846.968184 + 30 +0.0 + 11 +6974.999998 + 21 +10868.618819 + 31 +0.0 + 0 +LINE + 5 +28D + 8 +0 + 62 + 0 + 10 +6999.999998 + 20 +10911.920089 + 30 +0.0 + 11 +7008.995064 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +28E + 8 +0 + 62 + 0 + 10 +6926.260037 + 20 +10827.5 + 30 +0.0 + 11 +6937.499998 + 21 +10846.968184 + 31 +0.0 + 0 +LINE + 5 +28F + 8 +0 + 62 + 0 + 10 +6962.499998 + 20 +10890.269454 + 30 +0.0 + 11 +6974.999998 + 21 +10911.920089 + 31 +0.0 + 0 +LINE + 5 +290 + 8 +0 + 62 + 0 + 10 +6924.999998 + 20 +10868.618819 + 30 +0.0 + 11 +6937.499998 + 21 +10890.269454 + 31 +0.0 + 0 +LINE + 5 +291 + 8 +0 + 62 + 0 + 10 +6887.499998 + 20 +10846.968184 + 30 +0.0 + 11 +6899.999998 + 21 +10868.618819 + 31 +0.0 + 0 +LINE + 5 +292 + 8 +0 + 62 + 0 + 10 +6924.999998 + 20 +10911.920089 + 30 +0.0 + 11 +6933.995064 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +293 + 8 +0 + 62 + 0 + 10 +6851.260037 + 20 +10827.5 + 30 +0.0 + 11 +6862.499998 + 21 +10846.968184 + 31 +0.0 + 0 +LINE + 5 +294 + 8 +0 + 62 + 0 + 10 +6887.499998 + 20 +10890.269454 + 30 +0.0 + 11 +6899.999998 + 21 +10911.920089 + 31 +0.0 + 0 +LINE + 5 +295 + 8 +0 + 62 + 0 + 10 +6849.999998 + 20 +10868.618819 + 30 +0.0 + 11 +6862.499998 + 21 +10890.269454 + 31 +0.0 + 0 +LINE + 5 +296 + 8 +0 + 62 + 0 + 10 +6812.499998 + 20 +10846.968183 + 30 +0.0 + 11 +6824.999998 + 21 +10868.618819 + 31 +0.0 + 0 +LINE + 5 +297 + 8 +0 + 62 + 0 + 10 +6849.999998 + 20 +10911.920089 + 30 +0.0 + 11 +6858.995064 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +298 + 8 +0 + 62 + 0 + 10 +6776.260037 + 20 +10827.5 + 30 +0.0 + 11 +6787.499998 + 21 +10846.968183 + 31 +0.0 + 0 +LINE + 5 +299 + 8 +0 + 62 + 0 + 10 +6812.499998 + 20 +10890.269454 + 30 +0.0 + 11 +6824.999998 + 21 +10911.920089 + 31 +0.0 + 0 +LINE + 5 +29A + 8 +0 + 62 + 0 + 10 +6774.999998 + 20 +10868.618818 + 30 +0.0 + 11 +6787.499998 + 21 +10890.269454 + 31 +0.0 + 0 +LINE + 5 +29B + 8 +0 + 62 + 0 + 10 +6737.499998 + 20 +10846.968183 + 30 +0.0 + 11 +6749.999998 + 21 +10868.618818 + 31 +0.0 + 0 +LINE + 5 +29C + 8 +0 + 62 + 0 + 10 +6774.999998 + 20 +10911.920089 + 30 +0.0 + 11 +6783.995064 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +29D + 8 +0 + 62 + 0 + 10 +6710.0 + 20 +10842.638059 + 30 +0.0 + 11 +6712.499999 + 21 +10846.968183 + 31 +0.0 + 0 +LINE + 5 +29E + 8 +0 + 62 + 0 + 10 +6737.499999 + 20 +10890.269453 + 30 +0.0 + 11 +6749.999999 + 21 +10911.920089 + 31 +0.0 + 0 +LINE + 5 +29F + 8 +0 + 62 + 0 + 10 +6710.0 + 20 +10885.939329 + 30 +0.0 + 11 +6712.499999 + 21 +10890.269453 + 31 +0.0 + 0 +LINE + 5 +2A0 + 8 +0 + 62 + 0 + 10 +7449.999996 + 20 +10868.61882 + 30 +0.0 + 11 +7462.499996 + 21 +10890.269455 + 31 +0.0 + 0 +LINE + 5 +2A1 + 8 +0 + 62 + 0 + 10 +7451.260034 + 20 +10827.5 + 30 +0.0 + 11 +7462.499996 + 21 +10846.968185 + 31 +0.0 + 0 +LINE + 5 +2A2 + 8 +0 + 62 + 0 + 10 +7487.499996 + 20 +10890.269455 + 30 +0.0 + 11 +7499.999996 + 21 +10911.92009 + 31 +0.0 + 0 +LINE + 5 +2A3 + 8 +0 + 62 + 0 + 10 +7487.499996 + 20 +10846.968185 + 30 +0.0 + 11 +7499.999996 + 21 +10868.61882 + 31 +0.0 + 0 +LINE + 5 +2A4 + 8 +0 + 62 + 0 + 10 +7524.999996 + 20 +10911.92009 + 30 +0.0 + 11 +7533.995061 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +2A5 + 8 +0 + 62 + 0 + 10 +7524.999996 + 20 +10868.61882 + 30 +0.0 + 11 +7537.499996 + 21 +10890.269455 + 31 +0.0 + 0 +LINE + 5 +2A6 + 8 +0 + 62 + 0 + 10 +7526.260034 + 20 +10827.5 + 30 +0.0 + 11 +7537.499996 + 21 +10846.968185 + 31 +0.0 + 0 +LINE + 5 +2A7 + 8 +0 + 62 + 0 + 10 +7562.499996 + 20 +10890.269455 + 30 +0.0 + 11 +7574.999996 + 21 +10911.92009 + 31 +0.0 + 0 +LINE + 5 +2A8 + 8 +0 + 62 + 0 + 10 +7562.499996 + 20 +10846.968185 + 30 +0.0 + 11 +7574.999996 + 21 +10868.61882 + 31 +0.0 + 0 +LINE + 5 +2A9 + 8 +0 + 62 + 0 + 10 +7599.999996 + 20 +10911.92009 + 30 +0.0 + 11 +7608.995061 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +2AA + 8 +0 + 62 + 0 + 10 +7599.999996 + 20 +10868.61882 + 30 +0.0 + 11 +7612.499996 + 21 +10890.269455 + 31 +0.0 + 0 +LINE + 5 +2AB + 8 +0 + 62 + 0 + 10 +7601.260034 + 20 +10827.5 + 30 +0.0 + 11 +7612.499996 + 21 +10846.968185 + 31 +0.0 + 0 +LINE + 5 +2AC + 8 +0 + 62 + 0 + 10 +7637.499996 + 20 +10890.269455 + 30 +0.0 + 11 +7649.999996 + 21 +10911.92009 + 31 +0.0 + 0 +LINE + 5 +2AD + 8 +0 + 62 + 0 + 10 +7637.499995 + 20 +10846.968185 + 30 +0.0 + 11 +7649.999995 + 21 +10868.61882 + 31 +0.0 + 0 +LINE + 5 +2AE + 8 +0 + 62 + 0 + 10 +7674.999995 + 20 +10911.92009 + 30 +0.0 + 11 +7683.995061 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +2AF + 8 +0 + 62 + 0 + 10 +7674.999995 + 20 +10868.61882 + 30 +0.0 + 11 +7687.499995 + 21 +10890.269455 + 31 +0.0 + 0 +LINE + 5 +2B0 + 8 +0 + 62 + 0 + 10 +7676.260033 + 20 +10827.5 + 30 +0.0 + 11 +7687.499995 + 21 +10846.968185 + 31 +0.0 + 0 +LINE + 5 +2B1 + 8 +0 + 62 + 0 + 10 +7712.499995 + 20 +10890.269455 + 30 +0.0 + 11 +7724.999995 + 21 +10911.92009 + 31 +0.0 + 0 +LINE + 5 +2B2 + 8 +0 + 62 + 0 + 10 +7712.499995 + 20 +10846.968185 + 30 +0.0 + 11 +7724.999995 + 21 +10868.61882 + 31 +0.0 + 0 +LINE + 5 +2B3 + 8 +0 + 62 + 0 + 10 +7749.999995 + 20 +10911.92009 + 30 +0.0 + 11 +7758.99506 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +2B4 + 8 +0 + 62 + 0 + 10 +7749.999995 + 20 +10868.61882 + 30 +0.0 + 11 +7762.499995 + 21 +10890.269455 + 31 +0.0 + 0 +LINE + 5 +2B5 + 8 +0 + 62 + 0 + 10 +7751.260033 + 20 +10827.5 + 30 +0.0 + 11 +7762.499995 + 21 +10846.968185 + 31 +0.0 + 0 +LINE + 5 +2B6 + 8 +0 + 62 + 0 + 10 +7787.499995 + 20 +10890.269455 + 30 +0.0 + 11 +7799.999995 + 21 +10911.920091 + 31 +0.0 + 0 +LINE + 5 +2B7 + 8 +0 + 62 + 0 + 10 +7787.499995 + 20 +10846.968185 + 30 +0.0 + 11 +7799.999995 + 21 +10868.61882 + 31 +0.0 + 0 +LINE + 5 +2B8 + 8 +0 + 62 + 0 + 10 +7824.999995 + 20 +10911.920091 + 30 +0.0 + 11 +7833.99506 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +2B9 + 8 +0 + 62 + 0 + 10 +7824.999995 + 20 +10868.61882 + 30 +0.0 + 11 +7837.499995 + 21 +10890.269456 + 31 +0.0 + 0 +LINE + 5 +2BA + 8 +0 + 62 + 0 + 10 +7826.260033 + 20 +10827.5 + 30 +0.0 + 11 +7837.499995 + 21 +10846.968185 + 31 +0.0 + 0 +LINE + 5 +2BB + 8 +0 + 62 + 0 + 10 +7862.499995 + 20 +10890.269456 + 30 +0.0 + 11 +7874.999995 + 21 +10911.920091 + 31 +0.0 + 0 +LINE + 5 +2BC + 8 +0 + 62 + 0 + 10 +7862.499995 + 20 +10846.968185 + 30 +0.0 + 11 +7874.999995 + 21 +10868.618821 + 31 +0.0 + 0 +LINE + 5 +2BD + 8 +0 + 62 + 0 + 10 +7899.999995 + 20 +10911.920091 + 30 +0.0 + 11 +7908.99506 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +2BE + 8 +0 + 62 + 0 + 10 +7899.999995 + 20 +10868.618821 + 30 +0.0 + 11 +7912.499995 + 21 +10890.269456 + 31 +0.0 + 0 +LINE + 5 +2BF + 8 +0 + 62 + 0 + 10 +7901.260032 + 20 +10827.5 + 30 +0.0 + 11 +7912.499995 + 21 +10846.968186 + 31 +0.0 + 0 +LINE + 5 +2C0 + 8 +0 + 62 + 0 + 10 +7937.499995 + 20 +10890.269456 + 30 +0.0 + 11 +7949.999995 + 21 +10911.920091 + 31 +0.0 + 0 +LINE + 5 +2C1 + 8 +0 + 62 + 0 + 10 +7937.499995 + 20 +10846.968186 + 30 +0.0 + 11 +7949.999995 + 21 +10868.618821 + 31 +0.0 + 0 +LINE + 5 +2C2 + 8 +0 + 62 + 0 + 10 +7974.999995 + 20 +10911.920091 + 30 +0.0 + 11 +7983.995059 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +2C3 + 8 +0 + 62 + 0 + 10 +7974.999994 + 20 +10868.618821 + 30 +0.0 + 11 +7987.499994 + 21 +10890.269456 + 31 +0.0 + 0 +LINE + 5 +2C4 + 8 +0 + 62 + 0 + 10 +7976.260032 + 20 +10827.5 + 30 +0.0 + 11 +7987.499994 + 21 +10846.968186 + 31 +0.0 + 0 +LINE + 5 +2C5 + 8 +0 + 62 + 0 + 10 +8012.499994 + 20 +10890.269456 + 30 +0.0 + 11 +8024.999994 + 21 +10911.920091 + 31 +0.0 + 0 +LINE + 5 +2C6 + 8 +0 + 62 + 0 + 10 +8012.499994 + 20 +10846.968186 + 30 +0.0 + 11 +8024.999994 + 21 +10868.618821 + 31 +0.0 + 0 +LINE + 5 +2C7 + 8 +0 + 62 + 0 + 10 +8049.999994 + 20 +10911.920091 + 30 +0.0 + 11 +8058.995059 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +2C8 + 8 +0 + 62 + 0 + 10 +8049.999994 + 20 +10868.618821 + 30 +0.0 + 11 +8062.499994 + 21 +10890.269456 + 31 +0.0 + 0 +LINE + 5 +2C9 + 8 +0 + 62 + 0 + 10 +8051.260032 + 20 +10827.5 + 30 +0.0 + 11 +8062.499994 + 21 +10846.968186 + 31 +0.0 + 0 +LINE + 5 +2CA + 8 +0 + 62 + 0 + 10 +8087.499994 + 20 +10890.269456 + 30 +0.0 + 11 +8099.999994 + 21 +10911.920091 + 31 +0.0 + 0 +LINE + 5 +2CB + 8 +0 + 62 + 0 + 10 +8087.499994 + 20 +10846.968186 + 30 +0.0 + 11 +8099.999994 + 21 +10868.618821 + 31 +0.0 + 0 +LINE + 5 +2CC + 8 +0 + 62 + 0 + 10 +8124.999994 + 20 +10911.920091 + 30 +0.0 + 11 +8133.995059 + 21 +10927.5 + 31 +0.0 + 0 +LINE + 5 +2CD + 8 +0 + 62 + 0 + 10 +8124.999994 + 20 +10868.618821 + 30 +0.0 + 11 +8137.499994 + 21 +10890.269456 + 31 +0.0 + 0 +LINE + 5 +2CE + 8 +0 + 62 + 0 + 10 +8126.260031 + 20 +10827.5 + 30 +0.0 + 11 +8137.499994 + 21 +10846.968186 + 31 +0.0 + 0 +LINE + 5 +2CF + 8 +0 + 62 + 0 + 10 +8162.499994 + 20 +10890.269456 + 30 +0.0 + 11 +8174.999994 + 21 +10911.920091 + 31 +0.0 + 0 +LINE + 5 +2D0 + 8 +0 + 62 + 0 + 10 +8162.499994 + 20 +10846.968186 + 30 +0.0 + 11 +8174.999994 + 21 +10868.618821 + 31 +0.0 + 0 +ENDBLK + 5 +2D1 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X5 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X5 + 1 + + 0 +LINE + 5 +2D3 + 8 +0 + 62 + 0 + 10 +7458.755416 + 20 +11065.0 + 30 +0.0 + 11 +7521.255416 + 21 +11127.5 + 31 +0.0 + 0 +LINE + 5 +2D4 + 8 +0 + 62 + 0 + 10 +7246.623382 + 20 +11065.0 + 30 +0.0 + 11 +7309.123382 + 21 +11127.5 + 31 +0.0 + 0 +LINE + 5 +2D5 + 8 +0 + 62 + 0 + 10 +7034.491347 + 20 +11065.0 + 30 +0.0 + 11 +7096.991347 + 21 +11127.5 + 31 +0.0 + 0 +LINE + 5 +2D6 + 8 +0 + 62 + 0 + 10 +6822.359313 + 20 +11065.0 + 30 +0.0 + 11 +6884.859313 + 21 +11127.5 + 31 +0.0 + 0 +LINE + 5 +2D7 + 8 +0 + 62 + 0 + 10 +7670.88745 + 20 +11065.0 + 30 +0.0 + 11 +7733.38745 + 21 +11127.5 + 31 +0.0 + 0 +LINE + 5 +2D8 + 8 +0 + 62 + 0 + 10 +7883.019485 + 20 +11065.0 + 30 +0.0 + 11 +7945.519485 + 21 +11127.5 + 31 +0.0 + 0 +LINE + 5 +2D9 + 8 +0 + 62 + 0 + 10 +8095.151519 + 20 +11065.0 + 30 +0.0 + 11 +8157.651519 + 21 +11127.5 + 31 +0.0 + 0 +LINE + 5 +2DA + 8 +0 + 62 + 0 + 10 +7494.110755 + 20 +11065.0 + 30 +0.0 + 11 +7556.610755 + 21 +11127.5 + 31 +0.0 + 0 +LINE + 5 +2DB + 8 +0 + 62 + 0 + 10 +7281.978721 + 20 +11065.0 + 30 +0.0 + 11 +7344.478721 + 21 +11127.5 + 31 +0.0 + 0 +LINE + 5 +2DC + 8 +0 + 62 + 0 + 10 +7069.846686 + 20 +11065.0 + 30 +0.0 + 11 +7132.346686 + 21 +11127.5 + 31 +0.0 + 0 +LINE + 5 +2DD + 8 +0 + 62 + 0 + 10 +6857.714652 + 20 +11065.0 + 30 +0.0 + 11 +6920.214652 + 21 +11127.5 + 31 +0.0 + 0 +LINE + 5 +2DE + 8 +0 + 62 + 0 + 10 +7706.242789 + 20 +11065.0 + 30 +0.0 + 11 +7768.742789 + 21 +11127.5 + 31 +0.0 + 0 +LINE + 5 +2DF + 8 +0 + 62 + 0 + 10 +7918.374824 + 20 +11065.0 + 30 +0.0 + 11 +7980.874824 + 21 +11127.5 + 31 +0.0 + 0 +LINE + 5 +2E0 + 8 +0 + 62 + 0 + 10 +8130.506858 + 20 +11065.0 + 30 +0.0 + 11 +8175.0 + 21 +11109.493142 + 31 +0.0 + 0 +LINE + 5 +2E1 + 8 +0 + 62 + 0 + 10 +7529.466094 + 20 +11065.0 + 30 +0.0 + 11 +7591.966094 + 21 +11127.5 + 31 +0.0 + 0 +LINE + 5 +2E2 + 8 +0 + 62 + 0 + 10 +7317.33406 + 20 +11065.0 + 30 +0.0 + 11 +7379.83406 + 21 +11127.5 + 31 +0.0 + 0 +LINE + 5 +2E3 + 8 +0 + 62 + 0 + 10 +7105.202025 + 20 +11065.0 + 30 +0.0 + 11 +7167.702025 + 21 +11127.5 + 31 +0.0 + 0 +LINE + 5 +2E4 + 8 +0 + 62 + 0 + 10 +6893.069991 + 20 +11065.0 + 30 +0.0 + 11 +6955.569991 + 21 +11127.5 + 31 +0.0 + 0 +LINE + 5 +2E5 + 8 +0 + 62 + 0 + 10 +6710.0 + 20 +11094.062043 + 30 +0.0 + 11 +6743.437957 + 21 +11127.5 + 31 +0.0 + 0 +LINE + 5 +2E6 + 8 +0 + 62 + 0 + 10 +7741.598129 + 20 +11065.0 + 30 +0.0 + 11 +7804.098129 + 21 +11127.5 + 31 +0.0 + 0 +LINE + 5 +2E7 + 8 +0 + 62 + 0 + 10 +7953.730163 + 20 +11065.0 + 30 +0.0 + 11 +8016.230163 + 21 +11127.5 + 31 +0.0 + 0 +LINE + 5 +2E8 + 8 +0 + 62 + 0 + 10 +8165.862197 + 20 +11065.0 + 30 +0.0 + 11 +8175.0 + 21 +11074.137803 + 31 +0.0 + 0 +LINE + 5 +2E9 + 8 +0 + 62 + 0 + 10 +7564.821433 + 20 +11065.0 + 30 +0.0 + 11 +7627.321433 + 21 +11127.5 + 31 +0.0 + 0 +LINE + 5 +2EA + 8 +0 + 62 + 0 + 10 +7352.689399 + 20 +11065.0 + 30 +0.0 + 11 +7415.189399 + 21 +11127.5 + 31 +0.0 + 0 +LINE + 5 +2EB + 8 +0 + 62 + 0 + 10 +7140.557364 + 20 +11065.0 + 30 +0.0 + 11 +7203.057364 + 21 +11127.5 + 31 +0.0 + 0 +LINE + 5 +2EC + 8 +0 + 62 + 0 + 10 +6928.42533 + 20 +11065.0 + 30 +0.0 + 11 +6990.92533 + 21 +11127.5 + 31 +0.0 + 0 +LINE + 5 +2ED + 8 +0 + 62 + 0 + 10 +6716.293296 + 20 +11065.0 + 30 +0.0 + 11 +6778.793296 + 21 +11127.5 + 31 +0.0 + 0 +LINE + 5 +2EE + 8 +0 + 62 + 0 + 10 +7776.953468 + 20 +11065.0 + 30 +0.0 + 11 +7839.453468 + 21 +11127.5 + 31 +0.0 + 0 +LINE + 5 +2EF + 8 +0 + 62 + 0 + 10 +7989.085502 + 20 +11065.0 + 30 +0.0 + 11 +8051.585502 + 21 +11127.5 + 31 +0.0 + 0 +ENDBLK + 5 +2F0 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X6 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X6 + 1 + + 0 +LINE + 5 +2F2 + 8 +0 + 62 + 0 + 10 +5738.475836 + 20 +10865.0 + 30 +0.0 + 11 +6603.475836 + 21 +11730.0 + 31 +0.0 + 0 +LINE + 5 +2F3 + 8 +0 + 62 + 0 + 10 +5710.0 + 20 +11013.300859 + 30 +0.0 + 11 +6426.699141 + 21 +11730.0 + 31 +0.0 + 0 +LINE + 5 +2F4 + 8 +0 + 62 + 0 + 10 +5710.0 + 20 +11190.077554 + 30 +0.0 + 11 +6249.922446 + 21 +11730.0 + 31 +0.0 + 0 +LINE + 5 +2F5 + 8 +0 + 62 + 0 + 10 +5710.0 + 20 +11366.854249 + 30 +0.0 + 11 +6073.145751 + 21 +11730.0 + 31 +0.0 + 0 +LINE + 5 +2F6 + 8 +0 + 62 + 0 + 10 +5710.0 + 20 +11543.630945 + 30 +0.0 + 11 +5896.369055 + 21 +11730.0 + 31 +0.0 + 0 +LINE + 5 +2F7 + 8 +0 + 62 + 0 + 10 +5710.0 + 20 +11720.40764 + 30 +0.0 + 11 +5719.59236 + 21 +11730.0 + 31 +0.0 + 0 +LINE + 5 +2F8 + 8 +0 + 62 + 0 + 10 +5915.252532 + 20 +10865.0 + 30 +0.0 + 11 +6630.0 + 21 +11579.747468 + 31 +0.0 + 0 +LINE + 5 +2F9 + 8 +0 + 62 + 0 + 10 +6092.029227 + 20 +10865.0 + 30 +0.0 + 11 +6630.0 + 21 +11402.970773 + 31 +0.0 + 0 +LINE + 5 +2FA + 8 +0 + 62 + 0 + 10 +6268.805922 + 20 +10865.0 + 30 +0.0 + 11 +6630.0 + 21 +11226.194078 + 31 +0.0 + 0 +LINE + 5 +2FB + 8 +0 + 62 + 0 + 10 +6445.582618 + 20 +10865.0 + 30 +0.0 + 11 +6630.0 + 21 +11049.417382 + 31 +0.0 + 0 +LINE + 5 +2FC + 8 +0 + 62 + 0 + 10 +6622.359313 + 20 +10865.0 + 30 +0.0 + 11 +6630.0 + 21 +10872.640687 + 31 +0.0 + 0 +ENDBLK + 5 +2FD + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X7 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X7 + 1 + + 0 +LINE + 5 +2FF + 8 +0 + 62 + 0 + 10 +5512.5 + 20 +11193.378295 + 30 +0.0 + 11 +5537.5 + 21 +11193.378295 + 31 +0.0 + 0 +LINE + 5 +300 + 8 +0 + 62 + 0 + 10 +5587.5 + 20 +11193.378295 + 30 +0.0 + 11 +5612.5 + 21 +11193.378295 + 31 +0.0 + 0 +LINE + 5 +301 + 8 +0 + 62 + 0 + 10 +5662.5 + 20 +11193.378295 + 30 +0.0 + 11 +5687.5 + 21 +11193.378295 + 31 +0.0 + 0 +LINE + 5 +302 + 8 +0 + 62 + 0 + 10 +5550.0 + 20 +11215.02893 + 30 +0.0 + 11 +5575.0 + 21 +11215.02893 + 31 +0.0 + 0 +LINE + 5 +303 + 8 +0 + 62 + 0 + 10 +5625.0 + 20 +11215.02893 + 30 +0.0 + 11 +5650.0 + 21 +11215.02893 + 31 +0.0 + 0 +LINE + 5 +304 + 8 +0 + 62 + 0 + 10 +5700.0 + 20 +11215.02893 + 30 +0.0 + 11 +5710.0 + 21 +11215.02893 + 31 +0.0 + 0 +LINE + 5 +305 + 8 +0 + 62 + 0 + 10 +5512.5 + 20 +11236.679565 + 30 +0.0 + 11 +5537.5 + 21 +11236.679565 + 31 +0.0 + 0 +LINE + 5 +306 + 8 +0 + 62 + 0 + 10 +5587.5 + 20 +11236.679565 + 30 +0.0 + 11 +5612.5 + 21 +11236.679565 + 31 +0.0 + 0 +LINE + 5 +307 + 8 +0 + 62 + 0 + 10 +5662.5 + 20 +11236.679565 + 30 +0.0 + 11 +5687.5 + 21 +11236.679565 + 31 +0.0 + 0 +LINE + 5 +308 + 8 +0 + 62 + 0 + 10 +5550.0 + 20 +11258.3302 + 30 +0.0 + 11 +5575.0 + 21 +11258.3302 + 31 +0.0 + 0 +LINE + 5 +309 + 8 +0 + 62 + 0 + 10 +5625.0 + 20 +11258.3302 + 30 +0.0 + 11 +5650.0 + 21 +11258.3302 + 31 +0.0 + 0 +LINE + 5 +30A + 8 +0 + 62 + 0 + 10 +5700.0 + 20 +11258.3302 + 30 +0.0 + 11 +5710.0 + 21 +11258.3302 + 31 +0.0 + 0 +LINE + 5 +30B + 8 +0 + 62 + 0 + 10 +5512.5 + 20 +11279.980835 + 30 +0.0 + 11 +5537.5 + 21 +11279.980835 + 31 +0.0 + 0 +LINE + 5 +30C + 8 +0 + 62 + 0 + 10 +5587.5 + 20 +11279.980835 + 30 +0.0 + 11 +5612.5 + 21 +11279.980835 + 31 +0.0 + 0 +LINE + 5 +30D + 8 +0 + 62 + 0 + 10 +5662.5 + 20 +11279.980835 + 30 +0.0 + 11 +5687.5 + 21 +11279.980835 + 31 +0.0 + 0 +LINE + 5 +30E + 8 +0 + 62 + 0 + 10 +5550.0 + 20 +11301.63147 + 30 +0.0 + 11 +5575.0 + 21 +11301.63147 + 31 +0.0 + 0 +LINE + 5 +30F + 8 +0 + 62 + 0 + 10 +5625.0 + 20 +11301.63147 + 30 +0.0 + 11 +5650.0 + 21 +11301.63147 + 31 +0.0 + 0 +LINE + 5 +310 + 8 +0 + 62 + 0 + 10 +5700.0 + 20 +11301.63147 + 30 +0.0 + 11 +5710.0 + 21 +11301.63147 + 31 +0.0 + 0 +LINE + 5 +311 + 8 +0 + 62 + 0 + 10 +5512.5 + 20 +11323.282105 + 30 +0.0 + 11 +5537.5 + 21 +11323.282105 + 31 +0.0 + 0 +LINE + 5 +312 + 8 +0 + 62 + 0 + 10 +5587.5 + 20 +11323.282105 + 30 +0.0 + 11 +5612.5 + 21 +11323.282105 + 31 +0.0 + 0 +LINE + 5 +313 + 8 +0 + 62 + 0 + 10 +5662.5 + 20 +11323.282105 + 30 +0.0 + 11 +5687.5 + 21 +11323.282105 + 31 +0.0 + 0 +LINE + 5 +314 + 8 +0 + 62 + 0 + 10 +5550.0 + 20 +11344.93274 + 30 +0.0 + 11 +5575.0 + 21 +11344.93274 + 31 +0.0 + 0 +LINE + 5 +315 + 8 +0 + 62 + 0 + 10 +5625.0 + 20 +11344.93274 + 30 +0.0 + 11 +5650.0 + 21 +11344.93274 + 31 +0.0 + 0 +LINE + 5 +316 + 8 +0 + 62 + 0 + 10 +5700.0 + 20 +11344.93274 + 30 +0.0 + 11 +5710.0 + 21 +11344.93274 + 31 +0.0 + 0 +LINE + 5 +317 + 8 +0 + 62 + 0 + 10 +5512.5 + 20 +11366.583375 + 30 +0.0 + 11 +5537.5 + 21 +11366.583375 + 31 +0.0 + 0 +LINE + 5 +318 + 8 +0 + 62 + 0 + 10 +5587.5 + 20 +11366.583375 + 30 +0.0 + 11 +5612.5 + 21 +11366.583375 + 31 +0.0 + 0 +LINE + 5 +319 + 8 +0 + 62 + 0 + 10 +5662.5 + 20 +11366.583375 + 30 +0.0 + 11 +5687.5 + 21 +11366.583375 + 31 +0.0 + 0 +LINE + 5 +31A + 8 +0 + 62 + 0 + 10 +5550.0 + 20 +11388.23401 + 30 +0.0 + 11 +5575.0 + 21 +11388.23401 + 31 +0.0 + 0 +LINE + 5 +31B + 8 +0 + 62 + 0 + 10 +5625.0 + 20 +11388.23401 + 30 +0.0 + 11 +5650.0 + 21 +11388.23401 + 31 +0.0 + 0 +LINE + 5 +31C + 8 +0 + 62 + 0 + 10 +5700.0 + 20 +11388.23401 + 30 +0.0 + 11 +5710.0 + 21 +11388.23401 + 31 +0.0 + 0 +LINE + 5 +31D + 8 +0 + 62 + 0 + 10 +5512.5 + 20 +11409.884645 + 30 +0.0 + 11 +5537.5 + 21 +11409.884645 + 31 +0.0 + 0 +LINE + 5 +31E + 8 +0 + 62 + 0 + 10 +5587.5 + 20 +11409.884645 + 30 +0.0 + 11 +5612.5 + 21 +11409.884645 + 31 +0.0 + 0 +LINE + 5 +31F + 8 +0 + 62 + 0 + 10 +5662.5 + 20 +11409.884645 + 30 +0.0 + 11 +5687.5 + 21 +11409.884645 + 31 +0.0 + 0 +LINE + 5 +320 + 8 +0 + 62 + 0 + 10 +5550.0 + 20 +11431.53528 + 30 +0.0 + 11 +5575.0 + 21 +11431.53528 + 31 +0.0 + 0 +LINE + 5 +321 + 8 +0 + 62 + 0 + 10 +5625.0 + 20 +11431.53528 + 30 +0.0 + 11 +5650.0 + 21 +11431.53528 + 31 +0.0 + 0 +LINE + 5 +322 + 8 +0 + 62 + 0 + 10 +5700.0 + 20 +11431.53528 + 30 +0.0 + 11 +5710.0 + 21 +11431.53528 + 31 +0.0 + 0 +LINE + 5 +323 + 8 +0 + 62 + 0 + 10 +5512.5 + 20 +11453.185915 + 30 +0.0 + 11 +5537.5 + 21 +11453.185915 + 31 +0.0 + 0 +LINE + 5 +324 + 8 +0 + 62 + 0 + 10 +5587.5 + 20 +11453.185915 + 30 +0.0 + 11 +5612.5 + 21 +11453.185915 + 31 +0.0 + 0 +LINE + 5 +325 + 8 +0 + 62 + 0 + 10 +5662.5 + 20 +11453.185915 + 30 +0.0 + 11 +5687.5 + 21 +11453.185915 + 31 +0.0 + 0 +LINE + 5 +326 + 8 +0 + 62 + 0 + 10 +5550.0 + 20 +11474.83655 + 30 +0.0 + 11 +5575.0 + 21 +11474.83655 + 31 +0.0 + 0 +LINE + 5 +327 + 8 +0 + 62 + 0 + 10 +5625.0 + 20 +11474.83655 + 30 +0.0 + 11 +5650.0 + 21 +11474.83655 + 31 +0.0 + 0 +LINE + 5 +328 + 8 +0 + 62 + 0 + 10 +5700.0 + 20 +11474.83655 + 30 +0.0 + 11 +5710.0 + 21 +11474.83655 + 31 +0.0 + 0 +LINE + 5 +329 + 8 +0 + 62 + 0 + 10 +5512.5 + 20 +11496.487185 + 30 +0.0 + 11 +5537.5 + 21 +11496.487185 + 31 +0.0 + 0 +LINE + 5 +32A + 8 +0 + 62 + 0 + 10 +5587.5 + 20 +11496.487185 + 30 +0.0 + 11 +5612.5 + 21 +11496.487185 + 31 +0.0 + 0 +LINE + 5 +32B + 8 +0 + 62 + 0 + 10 +5662.5 + 20 +11496.487185 + 30 +0.0 + 11 +5687.5 + 21 +11496.487185 + 31 +0.0 + 0 +LINE + 5 +32C + 8 +0 + 62 + 0 + 10 +5550.0 + 20 +11518.13782 + 30 +0.0 + 11 +5575.0 + 21 +11518.13782 + 31 +0.0 + 0 +LINE + 5 +32D + 8 +0 + 62 + 0 + 10 +5625.0 + 20 +11518.13782 + 30 +0.0 + 11 +5650.0 + 21 +11518.13782 + 31 +0.0 + 0 +LINE + 5 +32E + 8 +0 + 62 + 0 + 10 +5700.0 + 20 +11518.13782 + 30 +0.0 + 11 +5710.0 + 21 +11518.13782 + 31 +0.0 + 0 +LINE + 5 +32F + 8 +0 + 62 + 0 + 10 +5512.5 + 20 +11539.788455 + 30 +0.0 + 11 +5537.5 + 21 +11539.788455 + 31 +0.0 + 0 +LINE + 5 +330 + 8 +0 + 62 + 0 + 10 +5587.5 + 20 +11539.788455 + 30 +0.0 + 11 +5612.5 + 21 +11539.788455 + 31 +0.0 + 0 +LINE + 5 +331 + 8 +0 + 62 + 0 + 10 +5662.5 + 20 +11539.788455 + 30 +0.0 + 11 +5687.5 + 21 +11539.788455 + 31 +0.0 + 0 +LINE + 5 +332 + 8 +0 + 62 + 0 + 10 +5550.0 + 20 +11561.43909 + 30 +0.0 + 11 +5575.0 + 21 +11561.43909 + 31 +0.0 + 0 +LINE + 5 +333 + 8 +0 + 62 + 0 + 10 +5625.0 + 20 +11561.43909 + 30 +0.0 + 11 +5650.0 + 21 +11561.43909 + 31 +0.0 + 0 +LINE + 5 +334 + 8 +0 + 62 + 0 + 10 +5700.0 + 20 +11561.43909 + 30 +0.0 + 11 +5710.0 + 21 +11561.43909 + 31 +0.0 + 0 +LINE + 5 +335 + 8 +0 + 62 + 0 + 10 +5512.5 + 20 +11583.089725 + 30 +0.0 + 11 +5537.5 + 21 +11583.089725 + 31 +0.0 + 0 +LINE + 5 +336 + 8 +0 + 62 + 0 + 10 +5587.5 + 20 +11583.089725 + 30 +0.0 + 11 +5612.5 + 21 +11583.089725 + 31 +0.0 + 0 +LINE + 5 +337 + 8 +0 + 62 + 0 + 10 +5662.5 + 20 +11583.089725 + 30 +0.0 + 11 +5687.5 + 21 +11583.089725 + 31 +0.0 + 0 +LINE + 5 +338 + 8 +0 + 62 + 0 + 10 +5550.0 + 20 +11604.74036 + 30 +0.0 + 11 +5575.0 + 21 +11604.74036 + 31 +0.0 + 0 +LINE + 5 +339 + 8 +0 + 62 + 0 + 10 +5625.0 + 20 +11604.74036 + 30 +0.0 + 11 +5650.0 + 21 +11604.74036 + 31 +0.0 + 0 +LINE + 5 +33A + 8 +0 + 62 + 0 + 10 +5700.0 + 20 +11604.74036 + 30 +0.0 + 11 +5710.0 + 21 +11604.74036 + 31 +0.0 + 0 +LINE + 5 +33B + 8 +0 + 62 + 0 + 10 +5512.5 + 20 +11626.390995 + 30 +0.0 + 11 +5537.5 + 21 +11626.390995 + 31 +0.0 + 0 +LINE + 5 +33C + 8 +0 + 62 + 0 + 10 +5587.5 + 20 +11626.390995 + 30 +0.0 + 11 +5612.5 + 21 +11626.390995 + 31 +0.0 + 0 +LINE + 5 +33D + 8 +0 + 62 + 0 + 10 +5662.5 + 20 +11626.390995 + 30 +0.0 + 11 +5687.5 + 21 +11626.390995 + 31 +0.0 + 0 +LINE + 5 +33E + 8 +0 + 62 + 0 + 10 +5550.0 + 20 +11648.04163 + 30 +0.0 + 11 +5575.0 + 21 +11648.04163 + 31 +0.0 + 0 +LINE + 5 +33F + 8 +0 + 62 + 0 + 10 +5625.0 + 20 +11648.04163 + 30 +0.0 + 11 +5650.0 + 21 +11648.04163 + 31 +0.0 + 0 +LINE + 5 +340 + 8 +0 + 62 + 0 + 10 +5700.0 + 20 +11648.04163 + 30 +0.0 + 11 +5710.0 + 21 +11648.04163 + 31 +0.0 + 0 +LINE + 5 +341 + 8 +0 + 62 + 0 + 10 +5512.5 + 20 +11669.692265 + 30 +0.0 + 11 +5537.5 + 21 +11669.692265 + 31 +0.0 + 0 +LINE + 5 +342 + 8 +0 + 62 + 0 + 10 +5587.5 + 20 +11669.692265 + 30 +0.0 + 11 +5612.5 + 21 +11669.692265 + 31 +0.0 + 0 +LINE + 5 +343 + 8 +0 + 62 + 0 + 10 +5662.5 + 20 +11669.692265 + 30 +0.0 + 11 +5687.5 + 21 +11669.692265 + 31 +0.0 + 0 +LINE + 5 +344 + 8 +0 + 62 + 0 + 10 +5550.0 + 20 +11691.3429 + 30 +0.0 + 11 +5575.0 + 21 +11691.3429 + 31 +0.0 + 0 +LINE + 5 +345 + 8 +0 + 62 + 0 + 10 +5625.0 + 20 +11691.3429 + 30 +0.0 + 11 +5650.0 + 21 +11691.3429 + 31 +0.0 + 0 +LINE + 5 +346 + 8 +0 + 62 + 0 + 10 +5700.0 + 20 +11691.3429 + 30 +0.0 + 11 +5710.0 + 21 +11691.3429 + 31 +0.0 + 0 +LINE + 5 +347 + 8 +0 + 62 + 0 + 10 +5512.5 + 20 +11712.993535 + 30 +0.0 + 11 +5537.5 + 21 +11712.993535 + 31 +0.0 + 0 +LINE + 5 +348 + 8 +0 + 62 + 0 + 10 +5587.5 + 20 +11712.993535 + 30 +0.0 + 11 +5612.5 + 21 +11712.993535 + 31 +0.0 + 0 +LINE + 5 +349 + 8 +0 + 62 + 0 + 10 +5662.5 + 20 +11712.993535 + 30 +0.0 + 11 +5687.5 + 21 +11712.993535 + 31 +0.0 + 0 +LINE + 5 +34A + 8 +0 + 62 + 0 + 10 +5550.0 + 20 +11171.72766 + 30 +0.0 + 11 +5575.0 + 21 +11171.72766 + 31 +0.0 + 0 +LINE + 5 +34B + 8 +0 + 62 + 0 + 10 +5625.0 + 20 +11171.72766 + 30 +0.0 + 11 +5650.0 + 21 +11171.72766 + 31 +0.0 + 0 +LINE + 5 +34C + 8 +0 + 62 + 0 + 10 +5700.0 + 20 +11171.72766 + 30 +0.0 + 11 +5710.0 + 21 +11171.72766 + 31 +0.0 + 0 +LINE + 5 +34D + 8 +0 + 62 + 0 + 10 +5512.5 + 20 +11150.077025 + 30 +0.0 + 11 +5537.5 + 21 +11150.077025 + 31 +0.0 + 0 +LINE + 5 +34E + 8 +0 + 62 + 0 + 10 +5587.5 + 20 +11150.077025 + 30 +0.0 + 11 +5612.5 + 21 +11150.077025 + 31 +0.0 + 0 +LINE + 5 +34F + 8 +0 + 62 + 0 + 10 +5662.5 + 20 +11150.077025 + 30 +0.0 + 11 +5687.5 + 21 +11150.077025 + 31 +0.0 + 0 +LINE + 5 +350 + 8 +0 + 62 + 0 + 10 +5550.0 + 20 +11128.42639 + 30 +0.0 + 11 +5575.0 + 21 +11128.42639 + 31 +0.0 + 0 +LINE + 5 +351 + 8 +0 + 62 + 0 + 10 +5625.0 + 20 +11128.42639 + 30 +0.0 + 11 +5650.0 + 21 +11128.42639 + 31 +0.0 + 0 +LINE + 5 +352 + 8 +0 + 62 + 0 + 10 +5700.0 + 20 +11128.42639 + 30 +0.0 + 11 +5710.0 + 21 +11128.42639 + 31 +0.0 + 0 +LINE + 5 +353 + 8 +0 + 62 + 0 + 10 +5512.5 + 20 +11106.775755 + 30 +0.0 + 11 +5537.5 + 21 +11106.775755 + 31 +0.0 + 0 +LINE + 5 +354 + 8 +0 + 62 + 0 + 10 +5587.5 + 20 +11106.775755 + 30 +0.0 + 11 +5612.5 + 21 +11106.775755 + 31 +0.0 + 0 +LINE + 5 +355 + 8 +0 + 62 + 0 + 10 +5662.5 + 20 +11106.775755 + 30 +0.0 + 11 +5687.5 + 21 +11106.775755 + 31 +0.0 + 0 +LINE + 5 +356 + 8 +0 + 62 + 0 + 10 +5550.0 + 20 +11085.12512 + 30 +0.0 + 11 +5575.0 + 21 +11085.12512 + 31 +0.0 + 0 +LINE + 5 +357 + 8 +0 + 62 + 0 + 10 +5625.0 + 20 +11085.12512 + 30 +0.0 + 11 +5650.0 + 21 +11085.12512 + 31 +0.0 + 0 +LINE + 5 +358 + 8 +0 + 62 + 0 + 10 +5700.0 + 20 +11085.12512 + 30 +0.0 + 11 +5710.0 + 21 +11085.12512 + 31 +0.0 + 0 +LINE + 5 +359 + 8 +0 + 62 + 0 + 10 +5512.5 + 20 +11063.474485 + 30 +0.0 + 11 +5537.5 + 21 +11063.474485 + 31 +0.0 + 0 +LINE + 5 +35A + 8 +0 + 62 + 0 + 10 +5587.5 + 20 +11063.474485 + 30 +0.0 + 11 +5612.5 + 21 +11063.474485 + 31 +0.0 + 0 +LINE + 5 +35B + 8 +0 + 62 + 0 + 10 +5662.5 + 20 +11063.474485 + 30 +0.0 + 11 +5687.5 + 21 +11063.474485 + 31 +0.0 + 0 +LINE + 5 +35C + 8 +0 + 62 + 0 + 10 +5550.0 + 20 +11041.82385 + 30 +0.0 + 11 +5575.0 + 21 +11041.82385 + 31 +0.0 + 0 +LINE + 5 +35D + 8 +0 + 62 + 0 + 10 +5625.0 + 20 +11041.82385 + 30 +0.0 + 11 +5650.0 + 21 +11041.82385 + 31 +0.0 + 0 +LINE + 5 +35E + 8 +0 + 62 + 0 + 10 +5700.0 + 20 +11041.82385 + 30 +0.0 + 11 +5710.0 + 21 +11041.82385 + 31 +0.0 + 0 +LINE + 5 +35F + 8 +0 + 62 + 0 + 10 +5512.5 + 20 +11020.173215 + 30 +0.0 + 11 +5537.5 + 21 +11020.173215 + 31 +0.0 + 0 +LINE + 5 +360 + 8 +0 + 62 + 0 + 10 +5587.5 + 20 +11020.173215 + 30 +0.0 + 11 +5612.5 + 21 +11020.173215 + 31 +0.0 + 0 +LINE + 5 +361 + 8 +0 + 62 + 0 + 10 +5662.5 + 20 +11020.173215 + 30 +0.0 + 11 +5687.5 + 21 +11020.173215 + 31 +0.0 + 0 +LINE + 5 +362 + 8 +0 + 62 + 0 + 10 +5550.0 + 20 +10998.52258 + 30 +0.0 + 11 +5575.0 + 21 +10998.52258 + 31 +0.0 + 0 +LINE + 5 +363 + 8 +0 + 62 + 0 + 10 +5625.0 + 20 +10998.52258 + 30 +0.0 + 11 +5650.0 + 21 +10998.52258 + 31 +0.0 + 0 +LINE + 5 +364 + 8 +0 + 62 + 0 + 10 +5700.0 + 20 +10998.52258 + 30 +0.0 + 11 +5710.0 + 21 +10998.52258 + 31 +0.0 + 0 +LINE + 5 +365 + 8 +0 + 62 + 0 + 10 +5512.5 + 20 +10976.871945 + 30 +0.0 + 11 +5537.5 + 21 +10976.871945 + 31 +0.0 + 0 +LINE + 5 +366 + 8 +0 + 62 + 0 + 10 +5587.5 + 20 +10976.871945 + 30 +0.0 + 11 +5612.5 + 21 +10976.871945 + 31 +0.0 + 0 +LINE + 5 +367 + 8 +0 + 62 + 0 + 10 +5662.5 + 20 +10976.871945 + 30 +0.0 + 11 +5687.5 + 21 +10976.871945 + 31 +0.0 + 0 +LINE + 5 +368 + 8 +0 + 62 + 0 + 10 +5550.0 + 20 +10955.22131 + 30 +0.0 + 11 +5575.0 + 21 +10955.22131 + 31 +0.0 + 0 +LINE + 5 +369 + 8 +0 + 62 + 0 + 10 +5625.0 + 20 +10955.22131 + 30 +0.0 + 11 +5650.0 + 21 +10955.22131 + 31 +0.0 + 0 +LINE + 5 +36A + 8 +0 + 62 + 0 + 10 +5700.0 + 20 +10955.22131 + 30 +0.0 + 11 +5710.0 + 21 +10955.22131 + 31 +0.0 + 0 +LINE + 5 +36B + 8 +0 + 62 + 0 + 10 +5512.5 + 20 +10933.570675 + 30 +0.0 + 11 +5537.5 + 21 +10933.570675 + 31 +0.0 + 0 +LINE + 5 +36C + 8 +0 + 62 + 0 + 10 +5587.5 + 20 +10933.570675 + 30 +0.0 + 11 +5612.5 + 21 +10933.570675 + 31 +0.0 + 0 +LINE + 5 +36D + 8 +0 + 62 + 0 + 10 +5662.5 + 20 +10933.570675 + 30 +0.0 + 11 +5687.5 + 21 +10933.570675 + 31 +0.0 + 0 +LINE + 5 +36E + 8 +0 + 62 + 0 + 10 +5550.0 + 20 +10911.92004 + 30 +0.0 + 11 +5575.0 + 21 +10911.92004 + 31 +0.0 + 0 +LINE + 5 +36F + 8 +0 + 62 + 0 + 10 +5625.0 + 20 +10911.92004 + 30 +0.0 + 11 +5650.0 + 21 +10911.92004 + 31 +0.0 + 0 +LINE + 5 +370 + 8 +0 + 62 + 0 + 10 +5700.0 + 20 +10911.92004 + 30 +0.0 + 11 +5710.0 + 21 +10911.92004 + 31 +0.0 + 0 +LINE + 5 +371 + 8 +0 + 62 + 0 + 10 +5512.5 + 20 +10890.269405 + 30 +0.0 + 11 +5537.5 + 21 +10890.269405 + 31 +0.0 + 0 +LINE + 5 +372 + 8 +0 + 62 + 0 + 10 +5587.5 + 20 +10890.269405 + 30 +0.0 + 11 +5612.5 + 21 +10890.269405 + 31 +0.0 + 0 +LINE + 5 +373 + 8 +0 + 62 + 0 + 10 +5662.5 + 20 +10890.269405 + 30 +0.0 + 11 +5687.5 + 21 +10890.269405 + 31 +0.0 + 0 +LINE + 5 +374 + 8 +0 + 62 + 0 + 10 +5550.0 + 20 +10868.61877 + 30 +0.0 + 11 +5575.0 + 21 +10868.61877 + 31 +0.0 + 0 +LINE + 5 +375 + 8 +0 + 62 + 0 + 10 +5625.0 + 20 +10868.61877 + 30 +0.0 + 11 +5650.0 + 21 +10868.61877 + 31 +0.0 + 0 +LINE + 5 +376 + 8 +0 + 62 + 0 + 10 +5700.0 + 20 +10868.61877 + 30 +0.0 + 11 +5710.0 + 21 +10868.61877 + 31 +0.0 + 0 +LINE + 5 +377 + 8 +0 + 62 + 0 + 10 +5512.5 + 20 +10846.968135 + 30 +0.0 + 11 +5537.5 + 21 +10846.968135 + 31 +0.0 + 0 +LINE + 5 +378 + 8 +0 + 62 + 0 + 10 +5587.5 + 20 +10846.968135 + 30 +0.0 + 11 +5612.5 + 21 +10846.968135 + 31 +0.0 + 0 +LINE + 5 +379 + 8 +0 + 62 + 0 + 10 +5662.5 + 20 +10846.968135 + 30 +0.0 + 11 +5687.5 + 21 +10846.968135 + 31 +0.0 + 0 +LINE + 5 +37A + 8 +0 + 62 + 0 + 10 +5550.0 + 20 +10825.3175 + 30 +0.0 + 11 +5575.0 + 21 +10825.3175 + 31 +0.0 + 0 +LINE + 5 +37B + 8 +0 + 62 + 0 + 10 +5625.0 + 20 +10825.3175 + 30 +0.0 + 11 +5650.0 + 21 +10825.3175 + 31 +0.0 + 0 +LINE + 5 +37C + 8 +0 + 62 + 0 + 10 +5512.5 + 20 +10803.666865 + 30 +0.0 + 11 +5537.5 + 21 +10803.666865 + 31 +0.0 + 0 +LINE + 5 +37D + 8 +0 + 62 + 0 + 10 +5587.5 + 20 +10803.666865 + 30 +0.0 + 11 +5612.5 + 21 +10803.666865 + 31 +0.0 + 0 +LINE + 5 +37E + 8 +0 + 62 + 0 + 10 +5550.0 + 20 +10782.01623 + 30 +0.0 + 11 +5575.0 + 21 +10782.01623 + 31 +0.0 + 0 +LINE + 5 +37F + 8 +0 + 62 + 0 + 10 +5512.5 + 20 +10760.365595 + 30 +0.0 + 11 +5537.5 + 21 +10760.365595 + 31 +0.0 + 0 +LINE + 5 +380 + 8 +0 + 62 + 0 + 10 +5587.5 + 20 +10760.365595 + 30 +0.0 + 11 +5598.291572 + 21 +10760.365595 + 31 +0.0 + 0 +LINE + 5 +381 + 8 +0 + 62 + 0 + 10 +5550.0 + 20 +10738.71496 + 30 +0.0 + 11 +5575.0 + 21 +10738.71496 + 31 +0.0 + 0 +LINE + 5 +382 + 8 +0 + 62 + 0 + 10 +5512.5 + 20 +10717.064325 + 30 +0.0 + 11 +5537.5 + 21 +10717.064325 + 31 +0.0 + 0 +LINE + 5 +383 + 8 +0 + 62 + 0 + 10 +5512.5 + 20 +10673.763055 + 30 +0.0 + 11 +5522.357461 + 21 +10673.763055 + 31 +0.0 + 0 +LINE + 5 +384 + 8 +0 + 62 + 0 + 10 +5699.999961 + 20 +10998.522605 + 30 +0.0 + 11 +5687.499961 + 21 +11020.17324 + 31 +0.0 + 0 +LINE + 5 +385 + 8 +0 + 62 + 0 + 10 +5662.499961 + 20 +11063.474511 + 30 +0.0 + 11 +5649.999961 + 21 +11085.125146 + 31 +0.0 + 0 +LINE + 5 +386 + 8 +0 + 62 + 0 + 10 +5624.999961 + 20 +11128.426416 + 30 +0.0 + 11 +5612.499961 + 21 +11150.077051 + 31 +0.0 + 0 +LINE + 5 +387 + 8 +0 + 62 + 0 + 10 +5587.499961 + 20 +11193.378321 + 30 +0.0 + 11 +5574.999961 + 21 +11215.028956 + 31 +0.0 + 0 +LINE + 5 +388 + 8 +0 + 62 + 0 + 10 +5549.999961 + 20 +11258.330226 + 30 +0.0 + 11 +5537.499961 + 21 +11279.980861 + 31 +0.0 + 0 +LINE + 5 +389 + 8 +0 + 62 + 0 + 10 +5512.499961 + 20 +11323.282132 + 30 +0.0 + 11 +5510.0 + 21 +11327.61219 + 31 +0.0 + 0 +LINE + 5 +38A + 8 +0 + 62 + 0 + 10 +5699.999961 + 20 +10955.221335 + 30 +0.0 + 11 +5687.499961 + 21 +10976.87197 + 31 +0.0 + 0 +LINE + 5 +38B + 8 +0 + 62 + 0 + 10 +5662.499961 + 20 +11020.17324 + 30 +0.0 + 11 +5649.999961 + 21 +11041.823875 + 31 +0.0 + 0 +LINE + 5 +38C + 8 +0 + 62 + 0 + 10 +5624.999961 + 20 +11085.125146 + 30 +0.0 + 11 +5612.499961 + 21 +11106.775781 + 31 +0.0 + 0 +LINE + 5 +38D + 8 +0 + 62 + 0 + 10 +5587.499961 + 20 +11150.077051 + 30 +0.0 + 11 +5574.999961 + 21 +11171.727686 + 31 +0.0 + 0 +LINE + 5 +38E + 8 +0 + 62 + 0 + 10 +5549.999961 + 20 +11215.028956 + 30 +0.0 + 11 +5537.499961 + 21 +11236.679591 + 31 +0.0 + 0 +LINE + 5 +38F + 8 +0 + 62 + 0 + 10 +5512.499961 + 20 +11279.980862 + 30 +0.0 + 11 +5510.0 + 21 +11284.31092 + 31 +0.0 + 0 +LINE + 5 +390 + 8 +0 + 62 + 0 + 10 +5699.999961 + 20 +10911.920065 + 30 +0.0 + 11 +5687.499961 + 21 +10933.5707 + 31 +0.0 + 0 +LINE + 5 +391 + 8 +0 + 62 + 0 + 10 +5662.499961 + 20 +10976.87197 + 30 +0.0 + 11 +5649.999961 + 21 +10998.522605 + 31 +0.0 + 0 +LINE + 5 +392 + 8 +0 + 62 + 0 + 10 +5624.999961 + 20 +11041.823876 + 30 +0.0 + 11 +5612.499961 + 21 +11063.474511 + 31 +0.0 + 0 +LINE + 5 +393 + 8 +0 + 62 + 0 + 10 +5587.499961 + 20 +11106.775781 + 30 +0.0 + 11 +5574.999961 + 21 +11128.426416 + 31 +0.0 + 0 +LINE + 5 +394 + 8 +0 + 62 + 0 + 10 +5549.999961 + 20 +11171.727686 + 30 +0.0 + 11 +5537.499961 + 21 +11193.378321 + 31 +0.0 + 0 +LINE + 5 +395 + 8 +0 + 62 + 0 + 10 +5512.499961 + 20 +11236.679591 + 30 +0.0 + 11 +5510.0 + 21 +11241.00965 + 31 +0.0 + 0 +LINE + 5 +396 + 8 +0 + 62 + 0 + 10 +5699.999961 + 20 +10868.618795 + 30 +0.0 + 11 +5687.499961 + 21 +10890.26943 + 31 +0.0 + 0 +LINE + 5 +397 + 8 +0 + 62 + 0 + 10 +5662.499961 + 20 +10933.5707 + 30 +0.0 + 11 +5649.999961 + 21 +10955.221335 + 31 +0.0 + 0 +LINE + 5 +398 + 8 +0 + 62 + 0 + 10 +5624.999961 + 20 +10998.522605 + 30 +0.0 + 11 +5612.499961 + 21 +11020.17324 + 31 +0.0 + 0 +LINE + 5 +399 + 8 +0 + 62 + 0 + 10 +5587.499961 + 20 +11063.474511 + 30 +0.0 + 11 +5574.999961 + 21 +11085.125146 + 31 +0.0 + 0 +LINE + 5 +39A + 8 +0 + 62 + 0 + 10 +5549.999961 + 20 +11128.426416 + 30 +0.0 + 11 +5537.499961 + 21 +11150.077051 + 31 +0.0 + 0 +LINE + 5 +39B + 8 +0 + 62 + 0 + 10 +5512.499961 + 20 +11193.378321 + 30 +0.0 + 11 +5510.0 + 21 +11197.70838 + 31 +0.0 + 0 +LINE + 5 +39C + 8 +0 + 62 + 0 + 10 +5688.636278 + 20 +10845.0 + 30 +0.0 + 11 +5687.499961 + 21 +10846.96816 + 31 +0.0 + 0 +LINE + 5 +39D + 8 +0 + 62 + 0 + 10 +5662.499961 + 20 +10890.26943 + 30 +0.0 + 11 +5649.999961 + 21 +10911.920065 + 31 +0.0 + 0 +LINE + 5 +39E + 8 +0 + 62 + 0 + 10 +5624.999961 + 20 +10955.221335 + 30 +0.0 + 11 +5612.499961 + 21 +10976.87197 + 31 +0.0 + 0 +LINE + 5 +39F + 8 +0 + 62 + 0 + 10 +5587.499961 + 20 +11020.173241 + 30 +0.0 + 11 +5574.999961 + 21 +11041.823876 + 31 +0.0 + 0 +LINE + 5 +3A0 + 8 +0 + 62 + 0 + 10 +5549.999961 + 20 +11085.125146 + 30 +0.0 + 11 +5537.499961 + 21 +11106.775781 + 31 +0.0 + 0 +LINE + 5 +3A1 + 8 +0 + 62 + 0 + 10 +5512.499961 + 20 +11150.077051 + 30 +0.0 + 11 +5510.0 + 21 +11154.40711 + 31 +0.0 + 0 +LINE + 5 +3A2 + 8 +0 + 62 + 0 + 10 +5662.499961 + 20 +10846.96816 + 30 +0.0 + 11 +5649.999961 + 21 +10868.618795 + 31 +0.0 + 0 +LINE + 5 +3A3 + 8 +0 + 62 + 0 + 10 +5624.999961 + 20 +10911.920065 + 30 +0.0 + 11 +5612.499961 + 21 +10933.5707 + 31 +0.0 + 0 +LINE + 5 +3A4 + 8 +0 + 62 + 0 + 10 +5587.499961 + 20 +10976.87197 + 30 +0.0 + 11 +5574.999961 + 21 +10998.522605 + 31 +0.0 + 0 +LINE + 5 +3A5 + 8 +0 + 62 + 0 + 10 +5549.999961 + 20 +11041.823876 + 30 +0.0 + 11 +5537.499961 + 21 +11063.474511 + 31 +0.0 + 0 +LINE + 5 +3A6 + 8 +0 + 62 + 0 + 10 +5512.499961 + 20 +11106.775781 + 30 +0.0 + 11 +5510.0 + 21 +11111.10584 + 31 +0.0 + 0 +LINE + 5 +3A7 + 8 +0 + 62 + 0 + 10 +5652.081294 + 20 +10821.71255 + 30 +0.0 + 11 +5649.999961 + 21 +10825.317525 + 31 +0.0 + 0 +LINE + 5 +3A8 + 8 +0 + 62 + 0 + 10 +5624.999961 + 20 +10868.618795 + 30 +0.0 + 11 +5612.499961 + 21 +10890.26943 + 31 +0.0 + 0 +LINE + 5 +3A9 + 8 +0 + 62 + 0 + 10 +5587.499961 + 20 +10933.5707 + 30 +0.0 + 11 +5574.999961 + 21 +10955.221335 + 31 +0.0 + 0 +LINE + 5 +3AA + 8 +0 + 62 + 0 + 10 +5549.999961 + 20 +10998.522606 + 30 +0.0 + 11 +5537.499961 + 21 +11020.173241 + 31 +0.0 + 0 +LINE + 5 +3AB + 8 +0 + 62 + 0 + 10 +5512.499961 + 20 +11063.474511 + 30 +0.0 + 11 +5510.0 + 21 +11067.80457 + 31 +0.0 + 0 +LINE + 5 +3AC + 8 +0 + 62 + 0 + 10 +5624.999961 + 20 +10825.317525 + 30 +0.0 + 11 +5612.499961 + 21 +10846.96816 + 31 +0.0 + 0 +LINE + 5 +3AD + 8 +0 + 62 + 0 + 10 +5587.499961 + 20 +10890.26943 + 30 +0.0 + 11 +5574.999961 + 21 +10911.920065 + 31 +0.0 + 0 +LINE + 5 +3AE + 8 +0 + 62 + 0 + 10 +5549.999961 + 20 +10955.221335 + 30 +0.0 + 11 +5537.499961 + 21 +10976.87197 + 31 +0.0 + 0 +LINE + 5 +3AF + 8 +0 + 62 + 0 + 10 +5512.499961 + 20 +11020.173241 + 30 +0.0 + 11 +5510.0 + 21 +11024.5033 + 31 +0.0 + 0 +LINE + 5 +3B0 + 8 +0 + 62 + 0 + 10 +5621.932945 + 20 +10787.328483 + 30 +0.0 + 11 +5612.499961 + 21 +10803.66689 + 31 +0.0 + 0 +LINE + 5 +3B1 + 8 +0 + 62 + 0 + 10 +5587.499961 + 20 +10846.96816 + 30 +0.0 + 11 +5574.999961 + 21 +10868.618795 + 31 +0.0 + 0 +LINE + 5 +3B2 + 8 +0 + 62 + 0 + 10 +5549.999961 + 20 +10911.920065 + 30 +0.0 + 11 +5537.499961 + 21 +10933.5707 + 31 +0.0 + 0 +LINE + 5 +3B3 + 8 +0 + 62 + 0 + 10 +5512.499961 + 20 +10976.871971 + 30 +0.0 + 11 +5510.0 + 21 +10981.20203 + 31 +0.0 + 0 +LINE + 5 +3B4 + 8 +0 + 62 + 0 + 10 +5587.499961 + 20 +10803.66689 + 30 +0.0 + 11 +5574.999961 + 21 +10825.317525 + 31 +0.0 + 0 +LINE + 5 +3B5 + 8 +0 + 62 + 0 + 10 +5549.999961 + 20 +10868.618795 + 30 +0.0 + 11 +5537.499961 + 21 +10890.26943 + 31 +0.0 + 0 +LINE + 5 +3B6 + 8 +0 + 62 + 0 + 10 +5512.499961 + 20 +10933.5707 + 30 +0.0 + 11 +5510.0 + 21 +10937.90076 + 31 +0.0 + 0 +LINE + 5 +3B7 + 8 +0 + 62 + 0 + 10 +5587.499961 + 20 +10760.36562 + 30 +0.0 + 11 +5574.999961 + 21 +10782.016255 + 31 +0.0 + 0 +LINE + 5 +3B8 + 8 +0 + 62 + 0 + 10 +5549.999961 + 20 +10825.317525 + 30 +0.0 + 11 +5537.499961 + 21 +10846.96816 + 31 +0.0 + 0 +LINE + 5 +3B9 + 8 +0 + 62 + 0 + 10 +5512.499961 + 20 +10890.26943 + 30 +0.0 + 11 +5510.0 + 21 +10894.59949 + 31 +0.0 + 0 +LINE + 5 +3BA + 8 +0 + 62 + 0 + 10 +5576.710421 + 20 +10735.752381 + 30 +0.0 + 11 +5574.999961 + 21 +10738.714985 + 31 +0.0 + 0 +LINE + 5 +3BB + 8 +0 + 62 + 0 + 10 +5549.999961 + 20 +10782.016255 + 30 +0.0 + 11 +5537.499961 + 21 +10803.66689 + 31 +0.0 + 0 +LINE + 5 +3BC + 8 +0 + 62 + 0 + 10 +5512.499961 + 20 +10846.96816 + 30 +0.0 + 11 +5510.0 + 21 +10851.29822 + 31 +0.0 + 0 +LINE + 5 +3BD + 8 +0 + 62 + 0 + 10 +5549.999961 + 20 +10738.714985 + 30 +0.0 + 11 +5537.499961 + 21 +10760.36562 + 31 +0.0 + 0 +LINE + 5 +3BE + 8 +0 + 62 + 0 + 10 +5512.499961 + 20 +10803.66689 + 30 +0.0 + 11 +5510.0 + 21 +10807.99695 + 31 +0.0 + 0 +LINE + 5 +3BF + 8 +0 + 62 + 0 + 10 +5546.562072 + 20 +10701.368314 + 30 +0.0 + 11 +5537.499962 + 21 +10717.06435 + 31 +0.0 + 0 +LINE + 5 +3C0 + 8 +0 + 62 + 0 + 10 +5512.499962 + 20 +10760.36562 + 30 +0.0 + 11 +5510.0 + 21 +10764.69568 + 31 +0.0 + 0 +LINE + 5 +3C1 + 8 +0 + 62 + 0 + 10 +5512.499962 + 20 +10717.06435 + 30 +0.0 + 11 +5510.0 + 21 +10721.39441 + 31 +0.0 + 0 +LINE + 5 +3C2 + 8 +0 + 62 + 0 + 10 +5512.499962 + 20 +10673.76308 + 30 +0.0 + 11 +5510.0 + 21 +10678.09314 + 31 +0.0 + 0 +LINE + 5 +3C3 + 8 +0 + 62 + 0 + 10 +5699.99996 + 20 +11041.823875 + 30 +0.0 + 11 +5687.49996 + 21 +11063.47451 + 31 +0.0 + 0 +LINE + 5 +3C4 + 8 +0 + 62 + 0 + 10 +5662.49996 + 20 +11106.775781 + 30 +0.0 + 11 +5649.99996 + 21 +11128.426416 + 31 +0.0 + 0 +LINE + 5 +3C5 + 8 +0 + 62 + 0 + 10 +5624.99996 + 20 +11171.727686 + 30 +0.0 + 11 +5612.49996 + 21 +11193.378321 + 31 +0.0 + 0 +LINE + 5 +3C6 + 8 +0 + 62 + 0 + 10 +5587.49996 + 20 +11236.679591 + 30 +0.0 + 11 +5574.99996 + 21 +11258.330226 + 31 +0.0 + 0 +LINE + 5 +3C7 + 8 +0 + 62 + 0 + 10 +5549.99996 + 20 +11301.631497 + 30 +0.0 + 11 +5537.49996 + 21 +11323.282132 + 31 +0.0 + 0 +LINE + 5 +3C8 + 8 +0 + 62 + 0 + 10 +5512.49996 + 20 +11366.583402 + 30 +0.0 + 11 +5510.0 + 21 +11370.91346 + 31 +0.0 + 0 +LINE + 5 +3C9 + 8 +0 + 62 + 0 + 10 +5699.99996 + 20 +11085.125146 + 30 +0.0 + 11 +5687.49996 + 21 +11106.775781 + 31 +0.0 + 0 +LINE + 5 +3CA + 8 +0 + 62 + 0 + 10 +5662.49996 + 20 +11150.077051 + 30 +0.0 + 11 +5649.99996 + 21 +11171.727686 + 31 +0.0 + 0 +LINE + 5 +3CB + 8 +0 + 62 + 0 + 10 +5624.99996 + 20 +11215.028956 + 30 +0.0 + 11 +5612.49996 + 21 +11236.679591 + 31 +0.0 + 0 +LINE + 5 +3CC + 8 +0 + 62 + 0 + 10 +5587.49996 + 20 +11279.980861 + 30 +0.0 + 11 +5574.99996 + 21 +11301.631496 + 31 +0.0 + 0 +LINE + 5 +3CD + 8 +0 + 62 + 0 + 10 +5549.99996 + 20 +11344.932767 + 30 +0.0 + 11 +5537.49996 + 21 +11366.583402 + 31 +0.0 + 0 +LINE + 5 +3CE + 8 +0 + 62 + 0 + 10 +5512.49996 + 20 +11409.884672 + 30 +0.0 + 11 +5510.0 + 21 +11414.21473 + 31 +0.0 + 0 +LINE + 5 +3CF + 8 +0 + 62 + 0 + 10 +5699.99996 + 20 +11128.426416 + 30 +0.0 + 11 +5687.49996 + 21 +11150.077051 + 31 +0.0 + 0 +LINE + 5 +3D0 + 8 +0 + 62 + 0 + 10 +5662.49996 + 20 +11193.378321 + 30 +0.0 + 11 +5649.99996 + 21 +11215.028956 + 31 +0.0 + 0 +LINE + 5 +3D1 + 8 +0 + 62 + 0 + 10 +5624.99996 + 20 +11258.330226 + 30 +0.0 + 11 +5612.49996 + 21 +11279.980861 + 31 +0.0 + 0 +LINE + 5 +3D2 + 8 +0 + 62 + 0 + 10 +5587.49996 + 20 +11323.282132 + 30 +0.0 + 11 +5574.99996 + 21 +11344.932767 + 31 +0.0 + 0 +LINE + 5 +3D3 + 8 +0 + 62 + 0 + 10 +5549.99996 + 20 +11388.234037 + 30 +0.0 + 11 +5537.49996 + 21 +11409.884672 + 31 +0.0 + 0 +LINE + 5 +3D4 + 8 +0 + 62 + 0 + 10 +5512.49996 + 20 +11453.185942 + 30 +0.0 + 11 +5510.0 + 21 +11457.516 + 31 +0.0 + 0 +LINE + 5 +3D5 + 8 +0 + 62 + 0 + 10 +5699.99996 + 20 +11171.727686 + 30 +0.0 + 11 +5687.49996 + 21 +11193.378321 + 31 +0.0 + 0 +LINE + 5 +3D6 + 8 +0 + 62 + 0 + 10 +5662.49996 + 20 +11236.679591 + 30 +0.0 + 11 +5649.99996 + 21 +11258.330226 + 31 +0.0 + 0 +LINE + 5 +3D7 + 8 +0 + 62 + 0 + 10 +5624.99996 + 20 +11301.631496 + 30 +0.0 + 11 +5612.49996 + 21 +11323.282131 + 31 +0.0 + 0 +LINE + 5 +3D8 + 8 +0 + 62 + 0 + 10 +5587.49996 + 20 +11366.583402 + 30 +0.0 + 11 +5574.99996 + 21 +11388.234037 + 31 +0.0 + 0 +LINE + 5 +3D9 + 8 +0 + 62 + 0 + 10 +5549.99996 + 20 +11431.535307 + 30 +0.0 + 11 +5537.49996 + 21 +11453.185942 + 31 +0.0 + 0 +LINE + 5 +3DA + 8 +0 + 62 + 0 + 10 +5512.49996 + 20 +11496.487212 + 30 +0.0 + 11 +5510.0 + 21 +11500.81727 + 31 +0.0 + 0 +LINE + 5 +3DB + 8 +0 + 62 + 0 + 10 +5699.99996 + 20 +11215.028956 + 30 +0.0 + 11 +5687.49996 + 21 +11236.679591 + 31 +0.0 + 0 +LINE + 5 +3DC + 8 +0 + 62 + 0 + 10 +5662.49996 + 20 +11279.980861 + 30 +0.0 + 11 +5649.99996 + 21 +11301.631496 + 31 +0.0 + 0 +LINE + 5 +3DD + 8 +0 + 62 + 0 + 10 +5624.99996 + 20 +11344.932767 + 30 +0.0 + 11 +5612.49996 + 21 +11366.583402 + 31 +0.0 + 0 +LINE + 5 +3DE + 8 +0 + 62 + 0 + 10 +5587.49996 + 20 +11409.884672 + 30 +0.0 + 11 +5574.99996 + 21 +11431.535307 + 31 +0.0 + 0 +LINE + 5 +3DF + 8 +0 + 62 + 0 + 10 +5549.99996 + 20 +11474.836577 + 30 +0.0 + 11 +5537.49996 + 21 +11496.487212 + 31 +0.0 + 0 +LINE + 5 +3E0 + 8 +0 + 62 + 0 + 10 +5512.49996 + 20 +11539.788482 + 30 +0.0 + 11 +5510.0 + 21 +11544.11854 + 31 +0.0 + 0 +LINE + 5 +3E1 + 8 +0 + 62 + 0 + 10 +5699.99996 + 20 +11258.330226 + 30 +0.0 + 11 +5687.49996 + 21 +11279.980861 + 31 +0.0 + 0 +LINE + 5 +3E2 + 8 +0 + 62 + 0 + 10 +5662.49996 + 20 +11323.282131 + 30 +0.0 + 11 +5649.99996 + 21 +11344.932766 + 31 +0.0 + 0 +LINE + 5 +3E3 + 8 +0 + 62 + 0 + 10 +5624.99996 + 20 +11388.234037 + 30 +0.0 + 11 +5612.49996 + 21 +11409.884672 + 31 +0.0 + 0 +LINE + 5 +3E4 + 8 +0 + 62 + 0 + 10 +5587.49996 + 20 +11453.185942 + 30 +0.0 + 11 +5574.99996 + 21 +11474.836577 + 31 +0.0 + 0 +LINE + 5 +3E5 + 8 +0 + 62 + 0 + 10 +5549.99996 + 20 +11518.137847 + 30 +0.0 + 11 +5537.49996 + 21 +11539.788482 + 31 +0.0 + 0 +LINE + 5 +3E6 + 8 +0 + 62 + 0 + 10 +5512.49996 + 20 +11583.089753 + 30 +0.0 + 11 +5510.0 + 21 +11587.41981 + 31 +0.0 + 0 +LINE + 5 +3E7 + 8 +0 + 62 + 0 + 10 +5699.99996 + 20 +11301.631496 + 30 +0.0 + 11 +5687.49996 + 21 +11323.282131 + 31 +0.0 + 0 +LINE + 5 +3E8 + 8 +0 + 62 + 0 + 10 +5662.49996 + 20 +11366.583402 + 30 +0.0 + 11 +5649.99996 + 21 +11388.234037 + 31 +0.0 + 0 +LINE + 5 +3E9 + 8 +0 + 62 + 0 + 10 +5624.99996 + 20 +11431.535307 + 30 +0.0 + 11 +5612.49996 + 21 +11453.185942 + 31 +0.0 + 0 +LINE + 5 +3EA + 8 +0 + 62 + 0 + 10 +5587.49996 + 20 +11496.487212 + 30 +0.0 + 11 +5574.99996 + 21 +11518.137847 + 31 +0.0 + 0 +LINE + 5 +3EB + 8 +0 + 62 + 0 + 10 +5549.99996 + 20 +11561.439117 + 30 +0.0 + 11 +5537.49996 + 21 +11583.089752 + 31 +0.0 + 0 +LINE + 5 +3EC + 8 +0 + 62 + 0 + 10 +5512.49996 + 20 +11626.391023 + 30 +0.0 + 11 +5510.0 + 21 +11630.72108 + 31 +0.0 + 0 +LINE + 5 +3ED + 8 +0 + 62 + 0 + 10 +5699.99996 + 20 +11344.932766 + 30 +0.0 + 11 +5687.49996 + 21 +11366.583401 + 31 +0.0 + 0 +LINE + 5 +3EE + 8 +0 + 62 + 0 + 10 +5662.49996 + 20 +11409.884672 + 30 +0.0 + 11 +5649.99996 + 21 +11431.535307 + 31 +0.0 + 0 +LINE + 5 +3EF + 8 +0 + 62 + 0 + 10 +5624.99996 + 20 +11474.836577 + 30 +0.0 + 11 +5612.49996 + 21 +11496.487212 + 31 +0.0 + 0 +LINE + 5 +3F0 + 8 +0 + 62 + 0 + 10 +5587.49996 + 20 +11539.788482 + 30 +0.0 + 11 +5574.99996 + 21 +11561.439117 + 31 +0.0 + 0 +LINE + 5 +3F1 + 8 +0 + 62 + 0 + 10 +5549.99996 + 20 +11604.740388 + 30 +0.0 + 11 +5537.49996 + 21 +11626.391023 + 31 +0.0 + 0 +LINE + 5 +3F2 + 8 +0 + 62 + 0 + 10 +5512.49996 + 20 +11669.692293 + 30 +0.0 + 11 +5510.0 + 21 +11674.02235 + 31 +0.0 + 0 +LINE + 5 +3F3 + 8 +0 + 62 + 0 + 10 +5699.99996 + 20 +11388.234037 + 30 +0.0 + 11 +5687.49996 + 21 +11409.884672 + 31 +0.0 + 0 +LINE + 5 +3F4 + 8 +0 + 62 + 0 + 10 +5662.49996 + 20 +11453.185942 + 30 +0.0 + 11 +5649.99996 + 21 +11474.836577 + 31 +0.0 + 0 +LINE + 5 +3F5 + 8 +0 + 62 + 0 + 10 +5624.99996 + 20 +11518.137847 + 30 +0.0 + 11 +5612.49996 + 21 +11539.788482 + 31 +0.0 + 0 +LINE + 5 +3F6 + 8 +0 + 62 + 0 + 10 +5587.49996 + 20 +11583.089752 + 30 +0.0 + 11 +5574.99996 + 21 +11604.740387 + 31 +0.0 + 0 +LINE + 5 +3F7 + 8 +0 + 62 + 0 + 10 +5549.99996 + 20 +11648.041658 + 30 +0.0 + 11 +5537.49996 + 21 +11669.692293 + 31 +0.0 + 0 +LINE + 5 +3F8 + 8 +0 + 62 + 0 + 10 +5512.49996 + 20 +11712.993563 + 30 +0.0 + 11 +5510.0 + 21 +11717.32362 + 31 +0.0 + 0 +LINE + 5 +3F9 + 8 +0 + 62 + 0 + 10 +5699.99996 + 20 +11431.535307 + 30 +0.0 + 11 +5687.49996 + 21 +11453.185942 + 31 +0.0 + 0 +LINE + 5 +3FA + 8 +0 + 62 + 0 + 10 +5662.49996 + 20 +11496.487212 + 30 +0.0 + 11 +5649.99996 + 21 +11518.137847 + 31 +0.0 + 0 +LINE + 5 +3FB + 8 +0 + 62 + 0 + 10 +5624.99996 + 20 +11561.439117 + 30 +0.0 + 11 +5612.49996 + 21 +11583.089752 + 31 +0.0 + 0 +LINE + 5 +3FC + 8 +0 + 62 + 0 + 10 +5587.49996 + 20 +11626.391023 + 30 +0.0 + 11 +5574.99996 + 21 +11648.041658 + 31 +0.0 + 0 +LINE + 5 +3FD + 8 +0 + 62 + 0 + 10 +5549.99996 + 20 +11691.342928 + 30 +0.0 + 11 +5537.49996 + 21 +11712.993563 + 31 +0.0 + 0 +LINE + 5 +3FE + 8 +0 + 62 + 0 + 10 +5699.99996 + 20 +11474.836577 + 30 +0.0 + 11 +5687.49996 + 21 +11496.487212 + 31 +0.0 + 0 +LINE + 5 +3FF + 8 +0 + 62 + 0 + 10 +5662.49996 + 20 +11539.788482 + 30 +0.0 + 11 +5649.99996 + 21 +11561.439117 + 31 +0.0 + 0 +LINE + 5 +400 + 8 +0 + 62 + 0 + 10 +5624.99996 + 20 +11604.740387 + 30 +0.0 + 11 +5612.49996 + 21 +11626.391022 + 31 +0.0 + 0 +LINE + 5 +401 + 8 +0 + 62 + 0 + 10 +5587.49996 + 20 +11669.692293 + 30 +0.0 + 11 +5574.99996 + 21 +11691.342928 + 31 +0.0 + 0 +LINE + 5 +402 + 8 +0 + 62 + 0 + 10 +5699.99996 + 20 +11518.137847 + 30 +0.0 + 11 +5687.49996 + 21 +11539.788482 + 31 +0.0 + 0 +LINE + 5 +403 + 8 +0 + 62 + 0 + 10 +5662.49996 + 20 +11583.089752 + 30 +0.0 + 11 +5649.99996 + 21 +11604.740387 + 31 +0.0 + 0 +LINE + 5 +404 + 8 +0 + 62 + 0 + 10 +5624.99996 + 20 +11648.041658 + 30 +0.0 + 11 +5612.49996 + 21 +11669.692293 + 31 +0.0 + 0 +LINE + 5 +405 + 8 +0 + 62 + 0 + 10 +5587.49996 + 20 +11712.993563 + 30 +0.0 + 11 +5577.681288 + 21 +11730.0 + 31 +0.0 + 0 +LINE + 5 +406 + 8 +0 + 62 + 0 + 10 +5699.999959 + 20 +11561.439117 + 30 +0.0 + 11 +5687.499959 + 21 +11583.089752 + 31 +0.0 + 0 +LINE + 5 +407 + 8 +0 + 62 + 0 + 10 +5662.499959 + 20 +11626.391022 + 30 +0.0 + 11 +5649.999959 + 21 +11648.041657 + 31 +0.0 + 0 +LINE + 5 +408 + 8 +0 + 62 + 0 + 10 +5624.999959 + 20 +11691.342928 + 30 +0.0 + 11 +5612.499959 + 21 +11712.993563 + 31 +0.0 + 0 +LINE + 5 +409 + 8 +0 + 62 + 0 + 10 +5699.999959 + 20 +11604.740387 + 30 +0.0 + 11 +5687.499959 + 21 +11626.391022 + 31 +0.0 + 0 +LINE + 5 +40A + 8 +0 + 62 + 0 + 10 +5662.499959 + 20 +11669.692293 + 30 +0.0 + 11 +5649.999959 + 21 +11691.342928 + 31 +0.0 + 0 +LINE + 5 +40B + 8 +0 + 62 + 0 + 10 +5699.999959 + 20 +11648.041657 + 30 +0.0 + 11 +5687.499959 + 21 +11669.692292 + 31 +0.0 + 0 +LINE + 5 +40C + 8 +0 + 62 + 0 + 10 +5662.499959 + 20 +11712.993563 + 30 +0.0 + 11 +5652.681288 + 21 +11730.0 + 31 +0.0 + 0 +LINE + 5 +40D + 8 +0 + 62 + 0 + 10 +5699.999959 + 20 +11691.342928 + 30 +0.0 + 11 +5687.499959 + 21 +11712.993563 + 31 +0.0 + 0 +LINE + 5 +40E + 8 +0 + 62 + 0 + 10 +5510.0 + 20 +11015.84313 + 30 +0.0 + 11 +5512.500003 + 21 +11020.173262 + 31 +0.0 + 0 +LINE + 5 +40F + 8 +0 + 62 + 0 + 10 +5537.500003 + 20 +11063.474532 + 30 +0.0 + 11 +5550.000003 + 21 +11085.125167 + 31 +0.0 + 0 +LINE + 5 +410 + 8 +0 + 62 + 0 + 10 +5575.000003 + 20 +11128.426437 + 30 +0.0 + 11 +5587.500003 + 21 +11150.077072 + 31 +0.0 + 0 +LINE + 5 +411 + 8 +0 + 62 + 0 + 10 +5612.500003 + 20 +11193.378342 + 30 +0.0 + 11 +5625.000003 + 21 +11215.028977 + 31 +0.0 + 0 +LINE + 5 +412 + 8 +0 + 62 + 0 + 10 +5650.000003 + 20 +11258.330248 + 30 +0.0 + 11 +5662.500003 + 21 +11279.980883 + 31 +0.0 + 0 +LINE + 5 +413 + 8 +0 + 62 + 0 + 10 +5687.500003 + 20 +11323.282153 + 30 +0.0 + 11 +5700.000003 + 21 +11344.932788 + 31 +0.0 + 0 +LINE + 5 +414 + 8 +0 + 62 + 0 + 10 +5510.0 + 20 +11059.1444 + 30 +0.0 + 11 +5512.500003 + 21 +11063.474532 + 31 +0.0 + 0 +LINE + 5 +415 + 8 +0 + 62 + 0 + 10 +5537.500003 + 20 +11106.775802 + 30 +0.0 + 11 +5550.000003 + 21 +11128.426437 + 31 +0.0 + 0 +LINE + 5 +416 + 8 +0 + 62 + 0 + 10 +5575.000003 + 20 +11171.727707 + 30 +0.0 + 11 +5587.500003 + 21 +11193.378342 + 31 +0.0 + 0 +LINE + 5 +417 + 8 +0 + 62 + 0 + 10 +5612.500003 + 20 +11236.679612 + 30 +0.0 + 11 +5625.000003 + 21 +11258.330248 + 31 +0.0 + 0 +LINE + 5 +418 + 8 +0 + 62 + 0 + 10 +5650.000003 + 20 +11301.631518 + 30 +0.0 + 11 +5662.500003 + 21 +11323.282153 + 31 +0.0 + 0 +LINE + 5 +419 + 8 +0 + 62 + 0 + 10 +5687.500003 + 20 +11366.583423 + 30 +0.0 + 11 +5700.000003 + 21 +11388.234058 + 31 +0.0 + 0 +LINE + 5 +41A + 8 +0 + 62 + 0 + 10 +5510.0 + 20 +11102.44567 + 30 +0.0 + 11 +5512.500003 + 21 +11106.775802 + 31 +0.0 + 0 +LINE + 5 +41B + 8 +0 + 62 + 0 + 10 +5537.500003 + 20 +11150.077072 + 30 +0.0 + 11 +5550.000003 + 21 +11171.727707 + 31 +0.0 + 0 +LINE + 5 +41C + 8 +0 + 62 + 0 + 10 +5575.000003 + 20 +11215.028977 + 30 +0.0 + 11 +5587.500003 + 21 +11236.679612 + 31 +0.0 + 0 +LINE + 5 +41D + 8 +0 + 62 + 0 + 10 +5612.500003 + 20 +11279.980883 + 30 +0.0 + 11 +5625.000003 + 21 +11301.631518 + 31 +0.0 + 0 +LINE + 5 +41E + 8 +0 + 62 + 0 + 10 +5650.000003 + 20 +11344.932788 + 30 +0.0 + 11 +5662.500003 + 21 +11366.583423 + 31 +0.0 + 0 +LINE + 5 +41F + 8 +0 + 62 + 0 + 10 +5687.500003 + 20 +11409.884693 + 30 +0.0 + 11 +5700.000003 + 21 +11431.535328 + 31 +0.0 + 0 +LINE + 5 +420 + 8 +0 + 62 + 0 + 10 +5510.0 + 20 +11145.74694 + 30 +0.0 + 11 +5512.500003 + 21 +11150.077072 + 31 +0.0 + 0 +LINE + 5 +421 + 8 +0 + 62 + 0 + 10 +5537.500003 + 20 +11193.378342 + 30 +0.0 + 11 +5550.000003 + 21 +11215.028977 + 31 +0.0 + 0 +LINE + 5 +422 + 8 +0 + 62 + 0 + 10 +5575.000003 + 20 +11258.330247 + 30 +0.0 + 11 +5587.500003 + 21 +11279.980883 + 31 +0.0 + 0 +LINE + 5 +423 + 8 +0 + 62 + 0 + 10 +5612.500003 + 20 +11323.282153 + 30 +0.0 + 11 +5625.000003 + 21 +11344.932788 + 31 +0.0 + 0 +LINE + 5 +424 + 8 +0 + 62 + 0 + 10 +5650.000003 + 20 +11388.234058 + 30 +0.0 + 11 +5662.500003 + 21 +11409.884693 + 31 +0.0 + 0 +LINE + 5 +425 + 8 +0 + 62 + 0 + 10 +5687.500003 + 20 +11453.185963 + 30 +0.0 + 11 +5700.000003 + 21 +11474.836598 + 31 +0.0 + 0 +LINE + 5 +426 + 8 +0 + 62 + 0 + 10 +5510.0 + 20 +11189.04821 + 30 +0.0 + 11 +5512.500003 + 21 +11193.378342 + 31 +0.0 + 0 +LINE + 5 +427 + 8 +0 + 62 + 0 + 10 +5537.500003 + 20 +11236.679612 + 30 +0.0 + 11 +5550.000003 + 21 +11258.330247 + 31 +0.0 + 0 +LINE + 5 +428 + 8 +0 + 62 + 0 + 10 +5575.000003 + 20 +11301.631518 + 30 +0.0 + 11 +5587.500003 + 21 +11323.282153 + 31 +0.0 + 0 +LINE + 5 +429 + 8 +0 + 62 + 0 + 10 +5612.500003 + 20 +11366.583423 + 30 +0.0 + 11 +5625.000003 + 21 +11388.234058 + 31 +0.0 + 0 +LINE + 5 +42A + 8 +0 + 62 + 0 + 10 +5650.000003 + 20 +11431.535328 + 30 +0.0 + 11 +5662.500003 + 21 +11453.185963 + 31 +0.0 + 0 +LINE + 5 +42B + 8 +0 + 62 + 0 + 10 +5687.500003 + 20 +11496.487233 + 30 +0.0 + 11 +5700.000003 + 21 +11518.137869 + 31 +0.0 + 0 +LINE + 5 +42C + 8 +0 + 62 + 0 + 10 +5510.0 + 20 +11232.34948 + 30 +0.0 + 11 +5512.500003 + 21 +11236.679612 + 31 +0.0 + 0 +LINE + 5 +42D + 8 +0 + 62 + 0 + 10 +5537.500003 + 20 +11279.980882 + 30 +0.0 + 11 +5550.000003 + 21 +11301.631518 + 31 +0.0 + 0 +LINE + 5 +42E + 8 +0 + 62 + 0 + 10 +5575.000003 + 20 +11344.932788 + 30 +0.0 + 11 +5587.500003 + 21 +11366.583423 + 31 +0.0 + 0 +LINE + 5 +42F + 8 +0 + 62 + 0 + 10 +5612.500003 + 20 +11409.884693 + 30 +0.0 + 11 +5625.000003 + 21 +11431.535328 + 31 +0.0 + 0 +LINE + 5 +430 + 8 +0 + 62 + 0 + 10 +5650.000003 + 20 +11474.836598 + 30 +0.0 + 11 +5662.500003 + 21 +11496.487233 + 31 +0.0 + 0 +LINE + 5 +431 + 8 +0 + 62 + 0 + 10 +5687.500003 + 20 +11539.788504 + 30 +0.0 + 11 +5700.000003 + 21 +11561.439139 + 31 +0.0 + 0 +LINE + 5 +432 + 8 +0 + 62 + 0 + 10 +5510.0 + 20 +11275.65075 + 30 +0.0 + 11 +5512.500003 + 21 +11279.980882 + 31 +0.0 + 0 +LINE + 5 +433 + 8 +0 + 62 + 0 + 10 +5537.500003 + 20 +11323.282153 + 30 +0.0 + 11 +5550.000003 + 21 +11344.932788 + 31 +0.0 + 0 +LINE + 5 +434 + 8 +0 + 62 + 0 + 10 +5575.000003 + 20 +11388.234058 + 30 +0.0 + 11 +5587.500003 + 21 +11409.884693 + 31 +0.0 + 0 +LINE + 5 +435 + 8 +0 + 62 + 0 + 10 +5612.500003 + 20 +11453.185963 + 30 +0.0 + 11 +5625.000003 + 21 +11474.836598 + 31 +0.0 + 0 +LINE + 5 +436 + 8 +0 + 62 + 0 + 10 +5650.000003 + 20 +11518.137868 + 30 +0.0 + 11 +5662.500003 + 21 +11539.788504 + 31 +0.0 + 0 +LINE + 5 +437 + 8 +0 + 62 + 0 + 10 +5687.500003 + 20 +11583.089774 + 30 +0.0 + 11 +5700.000003 + 21 +11604.740409 + 31 +0.0 + 0 +LINE + 5 +438 + 8 +0 + 62 + 0 + 10 +5510.0 + 20 +11318.95202 + 30 +0.0 + 11 +5512.500003 + 21 +11323.282153 + 31 +0.0 + 0 +LINE + 5 +439 + 8 +0 + 62 + 0 + 10 +5537.500003 + 20 +11366.583423 + 30 +0.0 + 11 +5550.000003 + 21 +11388.234058 + 31 +0.0 + 0 +LINE + 5 +43A + 8 +0 + 62 + 0 + 10 +5575.000003 + 20 +11431.535328 + 30 +0.0 + 11 +5587.500003 + 21 +11453.185963 + 31 +0.0 + 0 +LINE + 5 +43B + 8 +0 + 62 + 0 + 10 +5612.500003 + 20 +11496.487233 + 30 +0.0 + 11 +5625.000003 + 21 +11518.137868 + 31 +0.0 + 0 +LINE + 5 +43C + 8 +0 + 62 + 0 + 10 +5650.000003 + 20 +11561.439139 + 30 +0.0 + 11 +5662.500003 + 21 +11583.089774 + 31 +0.0 + 0 +LINE + 5 +43D + 8 +0 + 62 + 0 + 10 +5687.500003 + 20 +11626.391044 + 30 +0.0 + 11 +5700.000003 + 21 +11648.041679 + 31 +0.0 + 0 +LINE + 5 +43E + 8 +0 + 62 + 0 + 10 +5510.0 + 20 +11362.25329 + 30 +0.0 + 11 +5512.500003 + 21 +11366.583423 + 31 +0.0 + 0 +LINE + 5 +43F + 8 +0 + 62 + 0 + 10 +5537.500003 + 20 +11409.884693 + 30 +0.0 + 11 +5550.000003 + 21 +11431.535328 + 31 +0.0 + 0 +LINE + 5 +440 + 8 +0 + 62 + 0 + 10 +5575.000003 + 20 +11474.836598 + 30 +0.0 + 11 +5587.500003 + 21 +11496.487233 + 31 +0.0 + 0 +LINE + 5 +441 + 8 +0 + 62 + 0 + 10 +5612.500003 + 20 +11539.788503 + 30 +0.0 + 11 +5625.000003 + 21 +11561.439139 + 31 +0.0 + 0 +LINE + 5 +442 + 8 +0 + 62 + 0 + 10 +5650.000003 + 20 +11604.740409 + 30 +0.0 + 11 +5662.500003 + 21 +11626.391044 + 31 +0.0 + 0 +LINE + 5 +443 + 8 +0 + 62 + 0 + 10 +5687.500003 + 20 +11669.692314 + 30 +0.0 + 11 +5700.000003 + 21 +11691.342949 + 31 +0.0 + 0 +LINE + 5 +444 + 8 +0 + 62 + 0 + 10 +5510.0 + 20 +11405.55456 + 30 +0.0 + 11 +5512.500004 + 21 +11409.884693 + 31 +0.0 + 0 +LINE + 5 +445 + 8 +0 + 62 + 0 + 10 +5537.500004 + 20 +11453.185963 + 30 +0.0 + 11 +5550.000004 + 21 +11474.836598 + 31 +0.0 + 0 +LINE + 5 +446 + 8 +0 + 62 + 0 + 10 +5575.000004 + 20 +11518.137868 + 30 +0.0 + 11 +5587.500004 + 21 +11539.788503 + 31 +0.0 + 0 +LINE + 5 +447 + 8 +0 + 62 + 0 + 10 +5612.500004 + 20 +11583.089774 + 30 +0.0 + 11 +5625.000004 + 21 +11604.740409 + 31 +0.0 + 0 +LINE + 5 +448 + 8 +0 + 62 + 0 + 10 +5650.000004 + 20 +11648.041679 + 30 +0.0 + 11 +5662.500004 + 21 +11669.692314 + 31 +0.0 + 0 +LINE + 5 +449 + 8 +0 + 62 + 0 + 10 +5687.500004 + 20 +11712.993584 + 30 +0.0 + 11 +5697.318662 + 21 +11730.0 + 31 +0.0 + 0 +LINE + 5 +44A + 8 +0 + 62 + 0 + 10 +5510.0 + 20 +11448.85583 + 30 +0.0 + 11 +5512.500004 + 21 +11453.185963 + 31 +0.0 + 0 +LINE + 5 +44B + 8 +0 + 62 + 0 + 10 +5537.500004 + 20 +11496.487233 + 30 +0.0 + 11 +5550.000004 + 21 +11518.137868 + 31 +0.0 + 0 +LINE + 5 +44C + 8 +0 + 62 + 0 + 10 +5575.000004 + 20 +11561.439138 + 30 +0.0 + 11 +5587.500004 + 21 +11583.089774 + 31 +0.0 + 0 +LINE + 5 +44D + 8 +0 + 62 + 0 + 10 +5612.500004 + 20 +11626.391044 + 30 +0.0 + 11 +5625.000004 + 21 +11648.041679 + 31 +0.0 + 0 +LINE + 5 +44E + 8 +0 + 62 + 0 + 10 +5650.000004 + 20 +11691.342949 + 30 +0.0 + 11 +5662.500004 + 21 +11712.993584 + 31 +0.0 + 0 +LINE + 5 +44F + 8 +0 + 62 + 0 + 10 +5510.0 + 20 +11492.1571 + 30 +0.0 + 11 +5512.500004 + 21 +11496.487233 + 31 +0.0 + 0 +LINE + 5 +450 + 8 +0 + 62 + 0 + 10 +5537.500004 + 20 +11539.788503 + 30 +0.0 + 11 +5550.000004 + 21 +11561.439138 + 31 +0.0 + 0 +LINE + 5 +451 + 8 +0 + 62 + 0 + 10 +5575.000004 + 20 +11604.740409 + 30 +0.0 + 11 +5587.500004 + 21 +11626.391044 + 31 +0.0 + 0 +LINE + 5 +452 + 8 +0 + 62 + 0 + 10 +5612.500004 + 20 +11669.692314 + 30 +0.0 + 11 +5625.000004 + 21 +11691.342949 + 31 +0.0 + 0 +LINE + 5 +453 + 8 +0 + 62 + 0 + 10 +5510.0 + 20 +11535.45837 + 30 +0.0 + 11 +5512.500004 + 21 +11539.788503 + 31 +0.0 + 0 +LINE + 5 +454 + 8 +0 + 62 + 0 + 10 +5537.500004 + 20 +11583.089773 + 30 +0.0 + 11 +5550.000004 + 21 +11604.740409 + 31 +0.0 + 0 +LINE + 5 +455 + 8 +0 + 62 + 0 + 10 +5575.000004 + 20 +11648.041679 + 30 +0.0 + 11 +5587.500004 + 21 +11669.692314 + 31 +0.0 + 0 +LINE + 5 +456 + 8 +0 + 62 + 0 + 10 +5612.500004 + 20 +11712.993584 + 30 +0.0 + 11 +5622.318663 + 21 +11730.0 + 31 +0.0 + 0 +LINE + 5 +457 + 8 +0 + 62 + 0 + 10 +5510.0 + 20 +11578.75964 + 30 +0.0 + 11 +5512.500004 + 21 +11583.089773 + 31 +0.0 + 0 +LINE + 5 +458 + 8 +0 + 62 + 0 + 10 +5537.500004 + 20 +11626.391044 + 30 +0.0 + 11 +5550.000004 + 21 +11648.041679 + 31 +0.0 + 0 +LINE + 5 +459 + 8 +0 + 62 + 0 + 10 +5575.000004 + 20 +11691.342949 + 30 +0.0 + 11 +5587.500004 + 21 +11712.993584 + 31 +0.0 + 0 +LINE + 5 +45A + 8 +0 + 62 + 0 + 10 +5510.0 + 20 +11622.06091 + 30 +0.0 + 11 +5512.500004 + 21 +11626.391044 + 31 +0.0 + 0 +LINE + 5 +45B + 8 +0 + 62 + 0 + 10 +5537.500004 + 20 +11669.692314 + 30 +0.0 + 11 +5550.000004 + 21 +11691.342949 + 31 +0.0 + 0 +LINE + 5 +45C + 8 +0 + 62 + 0 + 10 +5510.0 + 20 +11665.36218 + 30 +0.0 + 11 +5512.500004 + 21 +11669.692314 + 31 +0.0 + 0 +LINE + 5 +45D + 8 +0 + 62 + 0 + 10 +5537.500004 + 20 +11712.993584 + 30 +0.0 + 11 +5547.318663 + 21 +11730.0 + 31 +0.0 + 0 +LINE + 5 +45E + 8 +0 + 62 + 0 + 10 +5510.0 + 20 +11708.66345 + 30 +0.0 + 11 +5512.500004 + 21 +11712.993584 + 31 +0.0 + 0 +LINE + 5 +45F + 8 +0 + 62 + 0 + 10 +5510.0 + 20 +10972.54186 + 30 +0.0 + 11 +5512.500003 + 21 +10976.871991 + 31 +0.0 + 0 +LINE + 5 +460 + 8 +0 + 62 + 0 + 10 +5537.500003 + 20 +11020.173262 + 30 +0.0 + 11 +5550.000003 + 21 +11041.823897 + 31 +0.0 + 0 +LINE + 5 +461 + 8 +0 + 62 + 0 + 10 +5575.000003 + 20 +11085.125167 + 30 +0.0 + 11 +5587.500003 + 21 +11106.775802 + 31 +0.0 + 0 +LINE + 5 +462 + 8 +0 + 62 + 0 + 10 +5612.500003 + 20 +11150.077072 + 30 +0.0 + 11 +5625.000003 + 21 +11171.727707 + 31 +0.0 + 0 +LINE + 5 +463 + 8 +0 + 62 + 0 + 10 +5650.000003 + 20 +11215.028977 + 30 +0.0 + 11 +5662.500003 + 21 +11236.679613 + 31 +0.0 + 0 +LINE + 5 +464 + 8 +0 + 62 + 0 + 10 +5687.500003 + 20 +11279.980883 + 30 +0.0 + 11 +5700.000003 + 21 +11301.631518 + 31 +0.0 + 0 +LINE + 5 +465 + 8 +0 + 62 + 0 + 10 +5510.0 + 20 +10929.24059 + 30 +0.0 + 11 +5512.500003 + 21 +10933.570721 + 31 +0.0 + 0 +LINE + 5 +466 + 8 +0 + 62 + 0 + 10 +5537.500003 + 20 +10976.871991 + 30 +0.0 + 11 +5550.000003 + 21 +10998.522627 + 31 +0.0 + 0 +LINE + 5 +467 + 8 +0 + 62 + 0 + 10 +5575.000003 + 20 +11041.823897 + 30 +0.0 + 11 +5587.500003 + 21 +11063.474532 + 31 +0.0 + 0 +LINE + 5 +468 + 8 +0 + 62 + 0 + 10 +5612.500003 + 20 +11106.775802 + 30 +0.0 + 11 +5625.000003 + 21 +11128.426437 + 31 +0.0 + 0 +LINE + 5 +469 + 8 +0 + 62 + 0 + 10 +5650.000003 + 20 +11171.727707 + 30 +0.0 + 11 +5662.500003 + 21 +11193.378342 + 31 +0.0 + 0 +LINE + 5 +46A + 8 +0 + 62 + 0 + 10 +5687.500003 + 20 +11236.679613 + 30 +0.0 + 11 +5700.000003 + 21 +11258.330248 + 31 +0.0 + 0 +LINE + 5 +46B + 8 +0 + 62 + 0 + 10 +5510.0 + 20 +10885.93932 + 30 +0.0 + 11 +5512.500003 + 21 +10890.269451 + 31 +0.0 + 0 +LINE + 5 +46C + 8 +0 + 62 + 0 + 10 +5537.500003 + 20 +10933.570721 + 30 +0.0 + 11 +5550.000003 + 21 +10955.221356 + 31 +0.0 + 0 +LINE + 5 +46D + 8 +0 + 62 + 0 + 10 +5575.000003 + 20 +10998.522627 + 30 +0.0 + 11 +5587.500003 + 21 +11020.173262 + 31 +0.0 + 0 +LINE + 5 +46E + 8 +0 + 62 + 0 + 10 +5612.500003 + 20 +11063.474532 + 30 +0.0 + 11 +5625.000003 + 21 +11085.125167 + 31 +0.0 + 0 +LINE + 5 +46F + 8 +0 + 62 + 0 + 10 +5650.000003 + 20 +11128.426437 + 30 +0.0 + 11 +5662.500003 + 21 +11150.077072 + 31 +0.0 + 0 +LINE + 5 +470 + 8 +0 + 62 + 0 + 10 +5687.500003 + 20 +11193.378342 + 30 +0.0 + 11 +5700.000003 + 21 +11215.028978 + 31 +0.0 + 0 +LINE + 5 +471 + 8 +0 + 62 + 0 + 10 +5510.0 + 20 +10842.63805 + 30 +0.0 + 11 +5512.500002 + 21 +10846.968181 + 31 +0.0 + 0 +LINE + 5 +472 + 8 +0 + 62 + 0 + 10 +5537.500002 + 20 +10890.269451 + 30 +0.0 + 11 +5550.000002 + 21 +10911.920086 + 31 +0.0 + 0 +LINE + 5 +473 + 8 +0 + 62 + 0 + 10 +5575.000002 + 20 +10955.221356 + 30 +0.0 + 11 +5587.500002 + 21 +10976.871992 + 31 +0.0 + 0 +LINE + 5 +474 + 8 +0 + 62 + 0 + 10 +5612.500002 + 20 +11020.173262 + 30 +0.0 + 11 +5625.000002 + 21 +11041.823897 + 31 +0.0 + 0 +LINE + 5 +475 + 8 +0 + 62 + 0 + 10 +5650.000002 + 20 +11085.125167 + 30 +0.0 + 11 +5662.500002 + 21 +11106.775802 + 31 +0.0 + 0 +LINE + 5 +476 + 8 +0 + 62 + 0 + 10 +5687.500002 + 20 +11150.077072 + 30 +0.0 + 11 +5700.000002 + 21 +11171.727707 + 31 +0.0 + 0 +LINE + 5 +477 + 8 +0 + 62 + 0 + 10 +5510.0 + 20 +10799.33678 + 30 +0.0 + 11 +5512.500002 + 21 +10803.666911 + 31 +0.0 + 0 +LINE + 5 +478 + 8 +0 + 62 + 0 + 10 +5537.500002 + 20 +10846.968181 + 30 +0.0 + 11 +5550.000002 + 21 +10868.618816 + 31 +0.0 + 0 +LINE + 5 +479 + 8 +0 + 62 + 0 + 10 +5575.000002 + 20 +10911.920086 + 30 +0.0 + 11 +5587.500002 + 21 +10933.570721 + 31 +0.0 + 0 +LINE + 5 +47A + 8 +0 + 62 + 0 + 10 +5612.500002 + 20 +10976.871992 + 30 +0.0 + 11 +5625.000002 + 21 +10998.522627 + 31 +0.0 + 0 +LINE + 5 +47B + 8 +0 + 62 + 0 + 10 +5650.000002 + 20 +11041.823897 + 30 +0.0 + 11 +5662.500002 + 21 +11063.474532 + 31 +0.0 + 0 +LINE + 5 +47C + 8 +0 + 62 + 0 + 10 +5687.500002 + 20 +11106.775802 + 30 +0.0 + 11 +5700.000002 + 21 +11128.426437 + 31 +0.0 + 0 +LINE + 5 +47D + 8 +0 + 62 + 0 + 10 +5510.0 + 20 +10756.03551 + 30 +0.0 + 11 +5512.500002 + 21 +10760.365641 + 31 +0.0 + 0 +LINE + 5 +47E + 8 +0 + 62 + 0 + 10 +5537.500002 + 20 +10803.666911 + 30 +0.0 + 11 +5550.000002 + 21 +10825.317546 + 31 +0.0 + 0 +LINE + 5 +47F + 8 +0 + 62 + 0 + 10 +5575.000002 + 20 +10868.618816 + 30 +0.0 + 11 +5587.500002 + 21 +10890.269451 + 31 +0.0 + 0 +LINE + 5 +480 + 8 +0 + 62 + 0 + 10 +5612.500002 + 20 +10933.570721 + 30 +0.0 + 11 +5625.000002 + 21 +10955.221357 + 31 +0.0 + 0 +LINE + 5 +481 + 8 +0 + 62 + 0 + 10 +5650.000002 + 20 +10998.522627 + 30 +0.0 + 11 +5662.500002 + 21 +11020.173262 + 31 +0.0 + 0 +LINE + 5 +482 + 8 +0 + 62 + 0 + 10 +5687.500002 + 20 +11063.474532 + 30 +0.0 + 11 +5700.000002 + 21 +11085.125167 + 31 +0.0 + 0 +LINE + 5 +483 + 8 +0 + 62 + 0 + 10 +5510.0 + 20 +10712.73424 + 30 +0.0 + 11 +5512.500002 + 21 +10717.064371 + 31 +0.0 + 0 +LINE + 5 +484 + 8 +0 + 62 + 0 + 10 +5537.500002 + 20 +10760.365641 + 30 +0.0 + 11 +5550.000002 + 21 +10782.016276 + 31 +0.0 + 0 +LINE + 5 +485 + 8 +0 + 62 + 0 + 10 +5575.000002 + 20 +10825.317546 + 30 +0.0 + 11 +5587.500002 + 21 +10846.968181 + 31 +0.0 + 0 +LINE + 5 +486 + 8 +0 + 62 + 0 + 10 +5612.500002 + 20 +10890.269451 + 30 +0.0 + 11 +5625.000002 + 21 +10911.920086 + 31 +0.0 + 0 +LINE + 5 +487 + 8 +0 + 62 + 0 + 10 +5650.000002 + 20 +10955.221357 + 30 +0.0 + 11 +5662.500002 + 21 +10976.871992 + 31 +0.0 + 0 +LINE + 5 +488 + 8 +0 + 62 + 0 + 10 +5687.500002 + 20 +11020.173262 + 30 +0.0 + 11 +5700.000002 + 21 +11041.823897 + 31 +0.0 + 0 +LINE + 5 +489 + 8 +0 + 62 + 0 + 10 +5510.0 + 20 +10669.43297 + 30 +0.0 + 11 +5512.500002 + 21 +10673.7631 + 31 +0.0 + 0 +LINE + 5 +48A + 8 +0 + 62 + 0 + 10 +5537.500002 + 20 +10717.064371 + 30 +0.0 + 11 +5550.000002 + 21 +10738.715006 + 31 +0.0 + 0 +LINE + 5 +48B + 8 +0 + 62 + 0 + 10 +5575.000002 + 20 +10782.016276 + 30 +0.0 + 11 +5587.500002 + 21 +10803.666911 + 31 +0.0 + 0 +LINE + 5 +48C + 8 +0 + 62 + 0 + 10 +5612.500002 + 20 +10846.968181 + 30 +0.0 + 11 +5625.000002 + 21 +10868.618816 + 31 +0.0 + 0 +LINE + 5 +48D + 8 +0 + 62 + 0 + 10 +5650.000002 + 20 +10911.920086 + 30 +0.0 + 11 +5662.500002 + 21 +10933.570722 + 31 +0.0 + 0 +LINE + 5 +48E + 8 +0 + 62 + 0 + 10 +5687.500002 + 20 +10976.871992 + 30 +0.0 + 11 +5700.000002 + 21 +10998.522627 + 31 +0.0 + 0 +LINE + 5 +48F + 8 +0 + 62 + 0 + 10 +5575.000002 + 20 +10738.715006 + 30 +0.0 + 11 +5587.500002 + 21 +10760.365641 + 31 +0.0 + 0 +LINE + 5 +490 + 8 +0 + 62 + 0 + 10 +5612.500002 + 20 +10803.666911 + 30 +0.0 + 11 +5625.000002 + 21 +10825.317546 + 31 +0.0 + 0 +LINE + 5 +491 + 8 +0 + 62 + 0 + 10 +5650.000002 + 20 +10868.618816 + 30 +0.0 + 11 +5662.500002 + 21 +10890.269451 + 31 +0.0 + 0 +LINE + 5 +492 + 8 +0 + 62 + 0 + 10 +5687.500002 + 20 +10933.570722 + 30 +0.0 + 11 +5700.000002 + 21 +10955.221357 + 31 +0.0 + 0 +LINE + 5 +493 + 8 +0 + 62 + 0 + 10 +5650.000002 + 20 +10825.317546 + 30 +0.0 + 11 +5662.500002 + 21 +10846.968181 + 31 +0.0 + 0 +LINE + 5 +494 + 8 +0 + 62 + 0 + 10 +5687.500002 + 20 +10890.269451 + 30 +0.0 + 11 +5700.000002 + 21 +10911.920087 + 31 +0.0 + 0 +LINE + 5 +495 + 8 +0 + 62 + 0 + 10 +5687.500002 + 20 +10846.968181 + 30 +0.0 + 11 +5700.000002 + 21 +10868.618816 + 31 +0.0 + 0 +ENDBLK + 5 +496 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X8 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X8 + 1 + + 0 +LINE + 5 +498 + 8 +0 + 62 + 0 + 10 +5550.0 + 20 +10652.11242 + 30 +0.0 + 11 +5575.0 + 21 +10652.11242 + 31 +0.0 + 0 +LINE + 5 +499 + 8 +0 + 62 + 0 + 10 +5625.0 + 20 +10652.11242 + 30 +0.0 + 11 +5650.0 + 21 +10652.11242 + 31 +0.0 + 0 +LINE + 5 +49A + 8 +0 + 62 + 0 + 10 +5700.0 + 20 +10652.11242 + 30 +0.0 + 11 +5710.0 + 21 +10652.11242 + 31 +0.0 + 0 +LINE + 5 +49B + 8 +0 + 62 + 0 + 10 +5522.357461 + 20 +10673.763055 + 30 +0.0 + 11 +5537.5 + 21 +10673.763055 + 31 +0.0 + 0 +LINE + 5 +49C + 8 +0 + 62 + 0 + 10 +5587.5 + 20 +10673.763055 + 30 +0.0 + 11 +5612.5 + 21 +10673.763055 + 31 +0.0 + 0 +LINE + 5 +49D + 8 +0 + 62 + 0 + 10 +5662.5 + 20 +10673.763055 + 30 +0.0 + 11 +5687.5 + 21 +10673.763055 + 31 +0.0 + 0 +LINE + 5 +49E + 8 +0 + 62 + 0 + 10 +5550.0 + 20 +10695.41369 + 30 +0.0 + 11 +5575.0 + 21 +10695.41369 + 31 +0.0 + 0 +LINE + 5 +49F + 8 +0 + 62 + 0 + 10 +5625.0 + 20 +10695.41369 + 30 +0.0 + 11 +5650.0 + 21 +10695.41369 + 31 +0.0 + 0 +LINE + 5 +4A0 + 8 +0 + 62 + 0 + 10 +5700.0 + 20 +10695.41369 + 30 +0.0 + 11 +5710.0 + 21 +10695.41369 + 31 +0.0 + 0 +LINE + 5 +4A1 + 8 +0 + 62 + 0 + 10 +5587.5 + 20 +10717.064325 + 30 +0.0 + 11 +5612.5 + 21 +10717.064325 + 31 +0.0 + 0 +LINE + 5 +4A2 + 8 +0 + 62 + 0 + 10 +5662.5 + 20 +10717.064325 + 30 +0.0 + 11 +5687.5 + 21 +10717.064325 + 31 +0.0 + 0 +LINE + 5 +4A3 + 8 +0 + 62 + 0 + 10 +5625.0 + 20 +10738.71496 + 30 +0.0 + 11 +5650.0 + 21 +10738.71496 + 31 +0.0 + 0 +LINE + 5 +4A4 + 8 +0 + 62 + 0 + 10 +5700.0 + 20 +10738.71496 + 30 +0.0 + 11 +5710.0 + 21 +10738.71496 + 31 +0.0 + 0 +LINE + 5 +4A5 + 8 +0 + 62 + 0 + 10 +5598.291572 + 20 +10760.365595 + 30 +0.0 + 11 +5612.5 + 21 +10760.365595 + 31 +0.0 + 0 +LINE + 5 +4A6 + 8 +0 + 62 + 0 + 10 +5662.5 + 20 +10760.365595 + 30 +0.0 + 11 +5687.5 + 21 +10760.365595 + 31 +0.0 + 0 +LINE + 5 +4A7 + 8 +0 + 62 + 0 + 10 +5625.0 + 20 +10782.01623 + 30 +0.0 + 11 +5650.0 + 21 +10782.01623 + 31 +0.0 + 0 +LINE + 5 +4A8 + 8 +0 + 62 + 0 + 10 +5700.0 + 20 +10782.01623 + 30 +0.0 + 11 +5710.0 + 21 +10782.01623 + 31 +0.0 + 0 +LINE + 5 +4A9 + 8 +0 + 62 + 0 + 10 +5662.5 + 20 +10803.666865 + 30 +0.0 + 11 +5687.5 + 21 +10803.666865 + 31 +0.0 + 0 +LINE + 5 +4AA + 8 +0 + 62 + 0 + 10 +5700.0 + 20 +10825.3175 + 30 +0.0 + 11 +5710.0 + 21 +10825.3175 + 31 +0.0 + 0 +LINE + 5 +4AB + 8 +0 + 62 + 0 + 10 +5512.5 + 20 +10630.461785 + 30 +0.0 + 11 +5537.5 + 21 +10630.461785 + 31 +0.0 + 0 +LINE + 5 +4AC + 8 +0 + 62 + 0 + 10 +5587.5 + 20 +10630.461785 + 30 +0.0 + 11 +5612.5 + 21 +10630.461785 + 31 +0.0 + 0 +LINE + 5 +4AD + 8 +0 + 62 + 0 + 10 +5662.5 + 20 +10630.461785 + 30 +0.0 + 11 +5687.5 + 21 +10630.461785 + 31 +0.0 + 0 +LINE + 5 +4AE + 8 +0 + 62 + 0 + 10 +5550.0 + 20 +10608.81115 + 30 +0.0 + 11 +5575.0 + 21 +10608.81115 + 31 +0.0 + 0 +LINE + 5 +4AF + 8 +0 + 62 + 0 + 10 +5512.5 + 20 +10587.160515 + 30 +0.0 + 11 +5537.5 + 21 +10587.160515 + 31 +0.0 + 0 +LINE + 5 +4B0 + 8 +0 + 62 + 0 + 10 +5587.5 + 20 +10587.160515 + 30 +0.0 + 11 +5605.0 + 21 +10587.160515 + 31 +0.0 + 0 +LINE + 5 +4B1 + 8 +0 + 62 + 0 + 10 +5550.0 + 20 +10565.50988 + 30 +0.0 + 11 +5575.0 + 21 +10565.50988 + 31 +0.0 + 0 +LINE + 5 +4B2 + 8 +0 + 62 + 0 + 10 +5512.5 + 20 +10543.859245 + 30 +0.0 + 11 +5537.5 + 21 +10543.859245 + 31 +0.0 + 0 +LINE + 5 +4B3 + 8 +0 + 62 + 0 + 10 +5587.5 + 20 +10543.859245 + 30 +0.0 + 11 +5605.0 + 21 +10543.859245 + 31 +0.0 + 0 +LINE + 5 +4B4 + 8 +0 + 62 + 0 + 10 +5550.0 + 20 +10522.20861 + 30 +0.0 + 11 +5575.0 + 21 +10522.20861 + 31 +0.0 + 0 +LINE + 5 +4B5 + 8 +0 + 62 + 0 + 10 +5512.5 + 20 +10500.557975 + 30 +0.0 + 11 +5537.5 + 21 +10500.557975 + 31 +0.0 + 0 +LINE + 5 +4B6 + 8 +0 + 62 + 0 + 10 +5587.5 + 20 +10500.557975 + 30 +0.0 + 11 +5605.0 + 21 +10500.557975 + 31 +0.0 + 0 +LINE + 5 +4B7 + 8 +0 + 62 + 0 + 10 +5550.0 + 20 +10478.90734 + 30 +0.0 + 11 +5575.0 + 21 +10478.90734 + 31 +0.0 + 0 +LINE + 5 +4B8 + 8 +0 + 62 + 0 + 10 +5621.426841 + 20 +10615.0 + 30 +0.0 + 11 +5612.499961 + 21 +10630.461809 + 31 +0.0 + 0 +LINE + 5 +4B9 + 8 +0 + 62 + 0 + 10 +5587.499961 + 20 +10673.763079 + 30 +0.0 + 11 +5574.999961 + 21 +10695.413715 + 31 +0.0 + 0 +LINE + 5 +4BA + 8 +0 + 62 + 0 + 10 +5587.499962 + 20 +10630.461809 + 30 +0.0 + 11 +5574.999962 + 21 +10652.112444 + 31 +0.0 + 0 +LINE + 5 +4BB + 8 +0 + 62 + 0 + 10 +5549.999962 + 20 +10695.413715 + 30 +0.0 + 11 +5546.562072 + 21 +10701.368314 + 31 +0.0 + 0 +LINE + 5 +4BC + 8 +0 + 62 + 0 + 10 +5587.499962 + 20 +10587.160539 + 30 +0.0 + 11 +5574.999962 + 21 +10608.811174 + 31 +0.0 + 0 +LINE + 5 +4BD + 8 +0 + 62 + 0 + 10 +5549.999962 + 20 +10652.112444 + 30 +0.0 + 11 +5537.499962 + 21 +10673.76308 + 31 +0.0 + 0 +LINE + 5 +4BE + 8 +0 + 62 + 0 + 10 +5587.499962 + 20 +10543.859269 + 30 +0.0 + 11 +5574.999962 + 21 +10565.509904 + 31 +0.0 + 0 +LINE + 5 +4BF + 8 +0 + 62 + 0 + 10 +5549.999962 + 20 +10608.811174 + 30 +0.0 + 11 +5537.499962 + 21 +10630.461809 + 31 +0.0 + 0 +LINE + 5 +4C0 + 8 +0 + 62 + 0 + 10 +5587.499962 + 20 +10500.557999 + 30 +0.0 + 11 +5574.999962 + 21 +10522.208634 + 31 +0.0 + 0 +LINE + 5 +4C1 + 8 +0 + 62 + 0 + 10 +5549.999962 + 20 +10565.509904 + 30 +0.0 + 11 +5537.499962 + 21 +10587.160539 + 31 +0.0 + 0 +LINE + 5 +4C2 + 8 +0 + 62 + 0 + 10 +5512.499962 + 20 +10630.461809 + 30 +0.0 + 11 +5510.0 + 21 +10634.79187 + 31 +0.0 + 0 +LINE + 5 +4C3 + 8 +0 + 62 + 0 + 10 +5575.812504 + 20 +10477.5 + 30 +0.0 + 11 +5574.999962 + 21 +10478.907364 + 31 +0.0 + 0 +LINE + 5 +4C4 + 8 +0 + 62 + 0 + 10 +5549.999962 + 20 +10522.208634 + 30 +0.0 + 11 +5537.499962 + 21 +10543.859269 + 31 +0.0 + 0 +LINE + 5 +4C5 + 8 +0 + 62 + 0 + 10 +5512.499962 + 20 +10587.160539 + 30 +0.0 + 11 +5510.0 + 21 +10591.4906 + 31 +0.0 + 0 +LINE + 5 +4C6 + 8 +0 + 62 + 0 + 10 +5549.999962 + 20 +10478.907364 + 30 +0.0 + 11 +5537.499962 + 21 +10500.557999 + 31 +0.0 + 0 +LINE + 5 +4C7 + 8 +0 + 62 + 0 + 10 +5512.499962 + 20 +10543.859269 + 30 +0.0 + 11 +5510.0 + 21 +10548.18933 + 31 +0.0 + 0 +LINE + 5 +4C8 + 8 +0 + 62 + 0 + 10 +5512.499962 + 20 +10500.557999 + 30 +0.0 + 11 +5510.0 + 21 +10504.88806 + 31 +0.0 + 0 +LINE + 5 +4C9 + 8 +0 + 62 + 0 + 10 +5624.999961 + 20 +10652.112444 + 30 +0.0 + 11 +5612.499961 + 21 +10673.763079 + 31 +0.0 + 0 +LINE + 5 +4CA + 8 +0 + 62 + 0 + 10 +5587.499961 + 20 +10717.06435 + 30 +0.0 + 11 +5576.710421 + 21 +10735.752381 + 31 +0.0 + 0 +LINE + 5 +4CB + 8 +0 + 62 + 0 + 10 +5662.499961 + 20 +10630.461809 + 30 +0.0 + 11 +5649.999961 + 21 +10652.112444 + 31 +0.0 + 0 +LINE + 5 +4CC + 8 +0 + 62 + 0 + 10 +5624.999961 + 20 +10695.413714 + 30 +0.0 + 11 +5612.499961 + 21 +10717.06435 + 31 +0.0 + 0 +LINE + 5 +4CD + 8 +0 + 62 + 0 + 10 +5696.426841 + 20 +10615.0 + 30 +0.0 + 11 +5687.499961 + 21 +10630.461809 + 31 +0.0 + 0 +LINE + 5 +4CE + 8 +0 + 62 + 0 + 10 +5662.499961 + 20 +10673.763079 + 30 +0.0 + 11 +5649.999961 + 21 +10695.413714 + 31 +0.0 + 0 +LINE + 5 +4CF + 8 +0 + 62 + 0 + 10 +5624.999961 + 20 +10738.714985 + 30 +0.0 + 11 +5612.499961 + 21 +10760.36562 + 31 +0.0 + 0 +LINE + 5 +4D0 + 8 +0 + 62 + 0 + 10 +5699.999961 + 20 +10652.112444 + 30 +0.0 + 11 +5687.499961 + 21 +10673.763079 + 31 +0.0 + 0 +LINE + 5 +4D1 + 8 +0 + 62 + 0 + 10 +5662.499961 + 20 +10717.064349 + 30 +0.0 + 11 +5649.999961 + 21 +10738.714985 + 31 +0.0 + 0 +LINE + 5 +4D2 + 8 +0 + 62 + 0 + 10 +5624.999961 + 20 +10782.016255 + 30 +0.0 + 11 +5621.932945 + 21 +10787.328483 + 31 +0.0 + 0 +LINE + 5 +4D3 + 8 +0 + 62 + 0 + 10 +5699.999961 + 20 +10695.413714 + 30 +0.0 + 11 +5687.499961 + 21 +10717.064349 + 31 +0.0 + 0 +LINE + 5 +4D4 + 8 +0 + 62 + 0 + 10 +5662.499961 + 20 +10760.36562 + 30 +0.0 + 11 +5649.999961 + 21 +10782.016255 + 31 +0.0 + 0 +LINE + 5 +4D5 + 8 +0 + 62 + 0 + 10 +5699.999961 + 20 +10738.714984 + 30 +0.0 + 11 +5687.499961 + 21 +10760.36562 + 31 +0.0 + 0 +LINE + 5 +4D6 + 8 +0 + 62 + 0 + 10 +5662.499961 + 20 +10803.66689 + 30 +0.0 + 11 +5652.081294 + 21 +10821.71255 + 31 +0.0 + 0 +LINE + 5 +4D7 + 8 +0 + 62 + 0 + 10 +5699.999961 + 20 +10782.016255 + 30 +0.0 + 11 +5687.499961 + 21 +10803.66689 + 31 +0.0 + 0 +LINE + 5 +4D8 + 8 +0 + 62 + 0 + 10 +5699.999961 + 20 +10825.317525 + 30 +0.0 + 11 +5688.636278 + 21 +10845.0 + 31 +0.0 + 0 +LINE + 5 +4D9 + 8 +0 + 62 + 0 + 10 +5537.500002 + 20 +10500.55802 + 30 +0.0 + 11 +5550.000002 + 21 +10522.208655 + 31 +0.0 + 0 +LINE + 5 +4DA + 8 +0 + 62 + 0 + 10 +5575.000002 + 20 +10565.509925 + 30 +0.0 + 11 +5587.500002 + 21 +10587.16056 + 31 +0.0 + 0 +LINE + 5 +4DB + 8 +0 + 62 + 0 + 10 +5612.500002 + 20 +10630.46183 + 30 +0.0 + 11 +5625.000002 + 21 +10652.112466 + 31 +0.0 + 0 +LINE + 5 +4DC + 8 +0 + 62 + 0 + 10 +5650.000002 + 20 +10695.413736 + 30 +0.0 + 11 +5662.500002 + 21 +10717.064371 + 31 +0.0 + 0 +LINE + 5 +4DD + 8 +0 + 62 + 0 + 10 +5687.500002 + 20 +10760.365641 + 30 +0.0 + 11 +5700.000002 + 21 +10782.016276 + 31 +0.0 + 0 +LINE + 5 +4DE + 8 +0 + 62 + 0 + 10 +5510.0 + 20 +10496.22789 + 30 +0.0 + 11 +5512.500002 + 21 +10500.55802 + 31 +0.0 + 0 +LINE + 5 +4DF + 8 +0 + 62 + 0 + 10 +5537.500002 + 20 +10543.85929 + 30 +0.0 + 11 +5550.000002 + 21 +10565.509925 + 31 +0.0 + 0 +LINE + 5 +4E0 + 8 +0 + 62 + 0 + 10 +5575.000002 + 20 +10608.811195 + 30 +0.0 + 11 +5587.500002 + 21 +10630.46183 + 31 +0.0 + 0 +LINE + 5 +4E1 + 8 +0 + 62 + 0 + 10 +5612.500002 + 20 +10673.763101 + 30 +0.0 + 11 +5625.000002 + 21 +10695.413736 + 31 +0.0 + 0 +LINE + 5 +4E2 + 8 +0 + 62 + 0 + 10 +5650.000002 + 20 +10738.715006 + 30 +0.0 + 11 +5662.500002 + 21 +10760.365641 + 31 +0.0 + 0 +LINE + 5 +4E3 + 8 +0 + 62 + 0 + 10 +5687.500002 + 20 +10803.666911 + 30 +0.0 + 11 +5700.000002 + 21 +10825.317546 + 31 +0.0 + 0 +LINE + 5 +4E4 + 8 +0 + 62 + 0 + 10 +5510.0 + 20 +10539.52916 + 30 +0.0 + 11 +5512.500002 + 21 +10543.85929 + 31 +0.0 + 0 +LINE + 5 +4E5 + 8 +0 + 62 + 0 + 10 +5537.500002 + 20 +10587.16056 + 30 +0.0 + 11 +5550.000002 + 21 +10608.811195 + 31 +0.0 + 0 +LINE + 5 +4E6 + 8 +0 + 62 + 0 + 10 +5575.000002 + 20 +10652.112465 + 30 +0.0 + 11 +5587.500002 + 21 +10673.763101 + 31 +0.0 + 0 +LINE + 5 +4E7 + 8 +0 + 62 + 0 + 10 +5612.500002 + 20 +10717.064371 + 30 +0.0 + 11 +5625.000002 + 21 +10738.715006 + 31 +0.0 + 0 +LINE + 5 +4E8 + 8 +0 + 62 + 0 + 10 +5650.000002 + 20 +10782.016276 + 30 +0.0 + 11 +5662.500002 + 21 +10803.666911 + 31 +0.0 + 0 +LINE + 5 +4E9 + 8 +0 + 62 + 0 + 10 +5510.0 + 20 +10582.83043 + 30 +0.0 + 11 +5512.500002 + 21 +10587.16056 + 31 +0.0 + 0 +LINE + 5 +4EA + 8 +0 + 62 + 0 + 10 +5537.500002 + 20 +10630.46183 + 30 +0.0 + 11 +5550.000002 + 21 +10652.112465 + 31 +0.0 + 0 +LINE + 5 +4EB + 8 +0 + 62 + 0 + 10 +5575.000002 + 20 +10695.413736 + 30 +0.0 + 11 +5587.500002 + 21 +10717.064371 + 31 +0.0 + 0 +LINE + 5 +4EC + 8 +0 + 62 + 0 + 10 +5612.500002 + 20 +10760.365641 + 30 +0.0 + 11 +5625.000002 + 21 +10782.016276 + 31 +0.0 + 0 +LINE + 5 +4ED + 8 +0 + 62 + 0 + 10 +5510.0 + 20 +10626.1317 + 30 +0.0 + 11 +5512.500002 + 21 +10630.46183 + 31 +0.0 + 0 +LINE + 5 +4EE + 8 +0 + 62 + 0 + 10 +5537.500002 + 20 +10673.7631 + 30 +0.0 + 11 +5550.000002 + 21 +10695.413736 + 31 +0.0 + 0 +LINE + 5 +4EF + 8 +0 + 62 + 0 + 10 +5549.187448 + 20 +10477.5 + 30 +0.0 + 11 +5550.000002 + 21 +10478.907385 + 31 +0.0 + 0 +LINE + 5 +4F0 + 8 +0 + 62 + 0 + 10 +5575.000002 + 20 +10522.208655 + 30 +0.0 + 11 +5587.500002 + 21 +10543.85929 + 31 +0.0 + 0 +LINE + 5 +4F1 + 8 +0 + 62 + 0 + 10 +5650.000002 + 20 +10652.112466 + 30 +0.0 + 11 +5662.500002 + 21 +10673.763101 + 31 +0.0 + 0 +LINE + 5 +4F2 + 8 +0 + 62 + 0 + 10 +5687.500002 + 20 +10717.064371 + 30 +0.0 + 11 +5700.000002 + 21 +10738.715006 + 31 +0.0 + 0 +LINE + 5 +4F3 + 8 +0 + 62 + 0 + 10 +5575.000002 + 20 +10478.907385 + 30 +0.0 + 11 +5587.500002 + 21 +10500.55802 + 31 +0.0 + 0 +LINE + 5 +4F4 + 8 +0 + 62 + 0 + 10 +5653.57311 + 20 +10615.0 + 30 +0.0 + 11 +5662.500002 + 21 +10630.461831 + 31 +0.0 + 0 +LINE + 5 +4F5 + 8 +0 + 62 + 0 + 10 +5687.500002 + 20 +10673.763101 + 30 +0.0 + 11 +5700.000002 + 21 +10695.413736 + 31 +0.0 + 0 +LINE + 5 +4F6 + 8 +0 + 62 + 0 + 10 +5687.500001 + 20 +10630.461831 + 30 +0.0 + 11 +5700.000001 + 21 +10652.112466 + 31 +0.0 + 0 +ENDBLK + 5 +4F7 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X9 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X9 + 1 + + 0 +LINE + 5 +4F9 + 8 +0 + 62 + 0 + 10 +5072.5 + 20 +11038.713466 + 30 +0.0 + 11 +5360.0 + 21 +11326.213466 + 31 +0.0 + 0 +LINE + 5 +4FA + 8 +0 + 62 + 0 + 10 +5072.5 + 20 +11118.262979 + 30 +0.0 + 11 +5360.0 + 21 +11405.762979 + 31 +0.0 + 0 +LINE + 5 +4FB + 8 +0 + 62 + 0 + 10 +5072.5 + 20 +11197.812492 + 30 +0.0 + 11 +5360.0 + 21 +11485.312492 + 31 +0.0 + 0 +LINE + 5 +4FC + 8 +0 + 62 + 0 + 10 +5072.5 + 20 +11277.362005 + 30 +0.0 + 11 +5360.0 + 21 +11564.862005 + 31 +0.0 + 0 +LINE + 5 +4FD + 8 +0 + 62 + 0 + 10 +5072.5 + 20 +11356.911518 + 30 +0.0 + 11 +5360.0 + 21 +11644.411518 + 31 +0.0 + 0 +LINE + 5 +4FE + 8 +0 + 62 + 0 + 10 +5072.5 + 20 +11436.461031 + 30 +0.0 + 11 +5360.0 + 21 +11723.961031 + 31 +0.0 + 0 +LINE + 5 +4FF + 8 +0 + 62 + 0 + 10 +5072.5 + 20 +11516.010544 + 30 +0.0 + 11 +5286.489456 + 21 +11730.0 + 31 +0.0 + 0 +LINE + 5 +500 + 8 +0 + 62 + 0 + 10 +5072.5 + 20 +11595.560056 + 30 +0.0 + 11 +5206.939944 + 21 +11730.0 + 31 +0.0 + 0 +LINE + 5 +501 + 8 +0 + 62 + 0 + 10 +5072.5 + 20 +11675.109569 + 30 +0.0 + 11 +5127.390431 + 21 +11730.0 + 31 +0.0 + 0 +LINE + 5 +502 + 8 +0 + 62 + 0 + 10 +5072.5 + 20 +10959.163953 + 30 +0.0 + 11 +5360.0 + 21 +11246.663953 + 31 +0.0 + 0 +LINE + 5 +503 + 8 +0 + 62 + 0 + 10 +5072.5 + 20 +10879.61444 + 30 +0.0 + 11 +5360.0 + 21 +11167.11444 + 31 +0.0 + 0 +LINE + 5 +504 + 8 +0 + 62 + 0 + 10 +5072.5 + 20 +10800.064928 + 30 +0.0 + 11 +5360.0 + 21 +11087.564928 + 31 +0.0 + 0 +LINE + 5 +505 + 8 +0 + 62 + 0 + 10 +5072.5 + 20 +10720.515415 + 30 +0.0 + 11 +5360.0 + 21 +11008.015415 + 31 +0.0 + 0 +LINE + 5 +506 + 8 +0 + 62 + 0 + 10 +5129.034098 + 20 +10697.5 + 30 +0.0 + 11 +5360.0 + 21 +10928.465902 + 31 +0.0 + 0 +LINE + 5 +507 + 8 +0 + 62 + 0 + 10 +5208.583611 + 20 +10697.5 + 30 +0.0 + 11 +5360.0 + 21 +10848.916389 + 31 +0.0 + 0 +LINE + 5 +508 + 8 +0 + 62 + 0 + 10 +5288.133124 + 20 +10697.5 + 30 +0.0 + 11 +5360.0 + 21 +10769.366876 + 31 +0.0 + 0 +ENDBLK + 5 +509 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X10 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X10 + 1 + + 0 +LINE + 5 +50B + 8 +0 + 62 + 0 + 10 +5134.281663 + 20 +10305.0 + 30 +0.0 + 11 +5311.781663 + 21 +10482.5 + 31 +0.0 + 0 +LINE + 5 +50C + 8 +0 + 62 + 0 + 10 +5072.5 + 20 +10322.76785 + 30 +0.0 + 11 +5232.23215 + 21 +10482.5 + 31 +0.0 + 0 +LINE + 5 +50D + 8 +0 + 62 + 0 + 10 +5072.5 + 20 +10402.317363 + 30 +0.0 + 11 +5152.682637 + 21 +10482.5 + 31 +0.0 + 0 +LINE + 5 +50E + 8 +0 + 62 + 0 + 10 +5072.5 + 20 +10481.866876 + 30 +0.0 + 11 +5073.133124 + 21 +10482.5 + 31 +0.0 + 0 +LINE + 5 +50F + 8 +0 + 62 + 0 + 10 +5213.831175 + 20 +10305.0 + 30 +0.0 + 11 +5360.0 + 21 +10451.168825 + 31 +0.0 + 0 +LINE + 5 +510 + 8 +0 + 62 + 0 + 10 +5293.380688 + 20 +10305.0 + 30 +0.0 + 11 +5360.0 + 21 +10371.619312 + 31 +0.0 + 0 +ENDBLK + 5 +511 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X11 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X11 + 1 + + 0 +ENDBLK + 5 +513 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X12 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X12 + 1 + + 0 +LINE + 5 +515 + 8 +0 + 62 + 0 + 10 +6641.639663 + 20 +11377.319025 + 30 +0.0 + 11 +6641.639663 + 21 +11377.319025 + 31 +0.0 + 0 +LINE + 5 +516 + 8 +0 + 62 + 0 + 10 +6665.757605 + 20 +11395.825373 + 30 +0.0 + 11 +6665.757605 + 21 +11395.825373 + 31 +0.0 + 0 +LINE + 5 +517 + 8 +0 + 62 + 0 + 10 +6640.379796 + 20 +11415.855501 + 30 +0.0 + 11 +6640.379796 + 21 +11415.855501 + 31 +0.0 + 0 +LINE + 5 +518 + 8 +0 + 62 + 0 + 10 +6664.497738 + 20 +11434.361848 + 30 +0.0 + 11 +6664.497738 + 21 +11434.361848 + 31 +0.0 + 0 +LINE + 5 +519 + 8 +0 + 62 + 0 + 10 +6639.119929 + 20 +11454.391976 + 30 +0.0 + 11 +6639.119929 + 21 +11454.391976 + 31 +0.0 + 0 +LINE + 5 +51A + 8 +0 + 62 + 0 + 10 +6663.23787 + 20 +11472.898324 + 30 +0.0 + 11 +6663.23787 + 21 +11472.898324 + 31 +0.0 + 0 +LINE + 5 +51B + 8 +0 + 62 + 0 + 10 +6637.860062 + 20 +11492.928452 + 30 +0.0 + 11 +6637.860062 + 21 +11492.928452 + 31 +0.0 + 0 +LINE + 5 +51C + 8 +0 + 62 + 0 + 10 +6661.978003 + 20 +11511.434799 + 30 +0.0 + 11 +6661.978003 + 21 +11511.434799 + 31 +0.0 + 0 +LINE + 5 +51D + 8 +0 + 62 + 0 + 10 +6636.600195 + 20 +11531.464927 + 30 +0.0 + 11 +6636.600195 + 21 +11531.464927 + 31 +0.0 + 0 +LINE + 5 +51E + 8 +0 + 62 + 0 + 10 +6660.718136 + 20 +11549.971274 + 30 +0.0 + 11 +6660.718136 + 21 +11549.971274 + 31 +0.0 + 0 +LINE + 5 +51F + 8 +0 + 62 + 0 + 10 +6635.340327 + 20 +11570.001402 + 30 +0.0 + 11 +6635.340327 + 21 +11570.001402 + 31 +0.0 + 0 +LINE + 5 +520 + 8 +0 + 62 + 0 + 10 +6659.458269 + 20 +11588.50775 + 30 +0.0 + 11 +6659.458269 + 21 +11588.50775 + 31 +0.0 + 0 +LINE + 5 +521 + 8 +0 + 62 + 0 + 10 +6634.08046 + 20 +11608.537878 + 30 +0.0 + 11 +6634.08046 + 21 +11608.537878 + 31 +0.0 + 0 +LINE + 5 +522 + 8 +0 + 62 + 0 + 10 +6658.198402 + 20 +11627.044225 + 30 +0.0 + 11 +6658.198402 + 21 +11627.044225 + 31 +0.0 + 0 +LINE + 5 +523 + 8 +0 + 62 + 0 + 10 +6632.820593 + 20 +11647.074353 + 30 +0.0 + 11 +6632.820593 + 21 +11647.074353 + 31 +0.0 + 0 +LINE + 5 +524 + 8 +0 + 62 + 0 + 10 +6656.938535 + 20 +11665.5807 + 30 +0.0 + 11 +6656.938535 + 21 +11665.5807 + 31 +0.0 + 0 +LINE + 5 +525 + 8 +0 + 62 + 0 + 10 +6631.560726 + 20 +11685.610828 + 30 +0.0 + 11 +6631.560726 + 21 +11685.610828 + 31 +0.0 + 0 +LINE + 5 +526 + 8 +0 + 62 + 0 + 10 +6655.678667 + 20 +11704.117176 + 30 +0.0 + 11 +6655.678667 + 21 +11704.117176 + 31 +0.0 + 0 +LINE + 5 +527 + 8 +0 + 62 + 0 + 10 +6630.300859 + 20 +11724.147304 + 30 +0.0 + 11 +6630.300859 + 21 +11724.147304 + 31 +0.0 + 0 +LINE + 5 +528 + 8 +0 + 62 + 0 + 10 +6642.89953 + 20 +11338.78255 + 30 +0.0 + 11 +6642.89953 + 21 +11338.78255 + 31 +0.0 + 0 +LINE + 5 +529 + 8 +0 + 62 + 0 + 10 +6667.017472 + 20 +11357.288897 + 30 +0.0 + 11 +6667.017472 + 21 +11357.288897 + 31 +0.0 + 0 +LINE + 5 +52A + 8 +0 + 62 + 0 + 10 +6644.159398 + 20 +11300.246075 + 30 +0.0 + 11 +6644.159398 + 21 +11300.246075 + 31 +0.0 + 0 +LINE + 5 +52B + 8 +0 + 62 + 0 + 10 +6645.419265 + 20 +11261.709599 + 30 +0.0 + 11 +6645.419265 + 21 +11261.709599 + 31 +0.0 + 0 +LINE + 5 +52C + 8 +0 + 62 + 0 + 10 +6646.679132 + 20 +11223.173124 + 30 +0.0 + 11 +6646.679132 + 21 +11223.173124 + 31 +0.0 + 0 +LINE + 5 +52D + 8 +0 + 62 + 0 + 10 +6647.938999 + 20 +11184.636648 + 30 +0.0 + 11 +6647.938999 + 21 +11184.636648 + 31 +0.0 + 0 +LINE + 5 +52E + 8 +0 + 62 + 0 + 10 +6649.198866 + 20 +11146.100173 + 30 +0.0 + 11 +6649.198866 + 21 +11146.100173 + 31 +0.0 + 0 +LINE + 5 +52F + 8 +0 + 62 + 0 + 10 +6650.458733 + 20 +11107.563698 + 30 +0.0 + 11 +6650.458733 + 21 +11107.563698 + 31 +0.0 + 0 +LINE + 5 +530 + 8 +0 + 62 + 0 + 10 +6651.718601 + 20 +11069.027222 + 30 +0.0 + 11 +6651.718601 + 21 +11069.027222 + 31 +0.0 + 0 +LINE + 5 +531 + 8 +0 + 62 + 0 + 10 +6636.528693 + 20 +11385.666777 + 30 +0.0 + 11 +6636.528693 + 21 +11385.666777 + 31 +0.0 + 0 +LINE + 5 +532 + 8 +0 + 62 + 0 + 10 +6646.938864 + 20 +11387.037302 + 30 +0.0 + 11 +6646.938864 + 21 +11387.037302 + 31 +0.0 + 0 +LINE + 5 +533 + 8 +0 + 62 + 0 + 10 +6663.198559 + 20 +11389.177932 + 30 +0.0 + 11 +6663.198559 + 21 +11389.177932 + 31 +0.0 + 0 +LINE + 5 +534 + 8 +0 + 62 + 0 + 10 +6644.758638 + 20 +11438.533281 + 30 +0.0 + 11 +6644.758638 + 21 +11438.533281 + 31 +0.0 + 0 +LINE + 5 +535 + 8 +0 + 62 + 0 + 10 +6653.484305 + 20 +11491.465048 + 30 +0.0 + 11 +6653.484305 + 21 +11491.465048 + 31 +0.0 + 0 +LINE + 5 +536 + 8 +0 + 62 + 0 + 10 +6663.894476 + 20 +11492.835573 + 30 +0.0 + 11 +6663.894476 + 21 +11492.835573 + 31 +0.0 + 0 +LINE + 5 +537 + 8 +0 + 62 + 0 + 10 +6635.044383 + 20 +11540.820397 + 30 +0.0 + 11 +6635.044383 + 21 +11540.820397 + 31 +0.0 + 0 +LINE + 5 +538 + 8 +0 + 62 + 0 + 10 +6645.454554 + 20 +11542.190922 + 30 +0.0 + 11 +6645.454554 + 21 +11542.190922 + 31 +0.0 + 0 +LINE + 5 +539 + 8 +0 + 62 + 0 + 10 +6661.71425 + 20 +11544.331551 + 30 +0.0 + 11 +6661.71425 + 21 +11544.331551 + 31 +0.0 + 0 +LINE + 5 +53A + 8 +0 + 62 + 0 + 10 +6643.274328 + 20 +11593.686901 + 30 +0.0 + 11 +6643.274328 + 21 +11593.686901 + 31 +0.0 + 0 +LINE + 5 +53B + 8 +0 + 62 + 0 + 10 +6651.999995 + 20 +11646.618667 + 30 +0.0 + 11 +6651.999995 + 21 +11646.618667 + 31 +0.0 + 0 +LINE + 5 +53C + 8 +0 + 62 + 0 + 10 +6662.410166 + 20 +11647.989192 + 30 +0.0 + 11 +6662.410166 + 21 +11647.989192 + 31 +0.0 + 0 +LINE + 5 +53D + 8 +0 + 62 + 0 + 10 +6633.560073 + 20 +11695.974016 + 30 +0.0 + 11 +6633.560073 + 21 +11695.974016 + 31 +0.0 + 0 +LINE + 5 +53E + 8 +0 + 62 + 0 + 10 +6643.970244 + 20 +11697.344541 + 30 +0.0 + 11 +6643.970244 + 21 +11697.344541 + 31 +0.0 + 0 +LINE + 5 +53F + 8 +0 + 62 + 0 + 10 +6660.22994 + 20 +11699.485171 + 30 +0.0 + 11 +6660.22994 + 21 +11699.485171 + 31 +0.0 + 0 +LINE + 5 +540 + 8 +0 + 62 + 0 + 10 +6654.968614 + 20 +11336.311428 + 30 +0.0 + 11 +6654.968614 + 21 +11336.311428 + 31 +0.0 + 0 +LINE + 5 +541 + 8 +0 + 62 + 0 + 10 +6665.378786 + 20 +11337.681953 + 30 +0.0 + 11 +6665.378786 + 21 +11337.681953 + 31 +0.0 + 0 +LINE + 5 +542 + 8 +0 + 62 + 0 + 10 +6646.242947 + 20 +11283.379662 + 30 +0.0 + 11 +6646.242947 + 21 +11283.379662 + 31 +0.0 + 0 +LINE + 5 +543 + 8 +0 + 62 + 0 + 10 +6638.013002 + 20 +11230.513158 + 30 +0.0 + 11 +6638.013002 + 21 +11230.513158 + 31 +0.0 + 0 +LINE + 5 +544 + 8 +0 + 62 + 0 + 10 +6648.423173 + 20 +11231.883683 + 30 +0.0 + 11 +6648.423173 + 21 +11231.883683 + 31 +0.0 + 0 +LINE + 5 +545 + 8 +0 + 62 + 0 + 10 +6664.682869 + 20 +11234.024313 + 30 +0.0 + 11 +6664.682869 + 21 +11234.024313 + 31 +0.0 + 0 +LINE + 5 +546 + 8 +0 + 62 + 0 + 10 +6656.452924 + 20 +11181.157809 + 30 +0.0 + 11 +6656.452924 + 21 +11181.157809 + 31 +0.0 + 0 +LINE + 5 +547 + 8 +0 + 62 + 0 + 10 +6666.863095 + 20 +11182.528334 + 30 +0.0 + 11 +6666.863095 + 21 +11182.528334 + 31 +0.0 + 0 +LINE + 5 +548 + 8 +0 + 62 + 0 + 10 +6631.467561 + 20 +11126.085413 + 30 +0.0 + 11 +6631.467561 + 21 +11126.085413 + 31 +0.0 + 0 +LINE + 5 +549 + 8 +0 + 62 + 0 + 10 +6647.727257 + 20 +11128.226042 + 30 +0.0 + 11 +6647.727257 + 21 +11128.226042 + 31 +0.0 + 0 +LINE + 5 +54A + 8 +0 + 62 + 0 + 10 +6639.497312 + 20 +11075.359539 + 30 +0.0 + 11 +6639.497312 + 21 +11075.359539 + 31 +0.0 + 0 +LINE + 5 +54B + 8 +0 + 62 + 0 + 10 +6649.907483 + 20 +11076.730064 + 30 +0.0 + 11 +6649.907483 + 21 +11076.730064 + 31 +0.0 + 0 +LINE + 5 +54C + 8 +0 + 62 + 0 + 10 +6666.167179 + 20 +11078.870693 + 30 +0.0 + 11 +6666.167179 + 21 +11078.870693 + 31 +0.0 + 0 +LINE + 5 +54D + 8 +0 + 62 + 0 + 10 +6647.718221 + 20 +11387.412193 + 30 +0.0 + 11 +6647.718221 + 21 +11387.412193 + 31 +0.0 + 0 +LINE + 5 +54E + 8 +0 + 62 + 0 + 10 +6656.152135 + 20 +11382.039197 + 30 +0.0 + 11 +6656.152135 + 21 +11382.039197 + 31 +0.0 + 0 +LINE + 5 +54F + 8 +0 + 62 + 0 + 10 +6631.565654 + 20 +11437.494237 + 30 +0.0 + 11 +6631.565654 + 21 +11437.494237 + 31 +0.0 + 0 +LINE + 5 +550 + 8 +0 + 62 + 0 + 10 +6639.999568 + 20 +11432.121241 + 30 +0.0 + 11 +6639.999568 + 21 +11432.121241 + 31 +0.0 + 0 +LINE + 5 +551 + 8 +0 + 62 + 0 + 10 +6654.209093 + 20 +11462.8605 + 30 +0.0 + 11 +6654.209093 + 21 +11462.8605 + 31 +0.0 + 0 +LINE + 5 +552 + 8 +0 + 62 + 0 + 10 +6638.056526 + 20 +11512.942545 + 30 +0.0 + 11 +6638.056526 + 21 +11512.942545 + 31 +0.0 + 0 +LINE + 5 +553 + 8 +0 + 62 + 0 + 10 +6661.543356 + 20 +11537.771508 + 30 +0.0 + 11 +6661.543356 + 21 +11537.771508 + 31 +0.0 + 0 +LINE + 5 +554 + 8 +0 + 62 + 0 + 10 +6645.390789 + 20 +11587.853552 + 30 +0.0 + 11 +6645.390789 + 21 +11587.853552 + 31 +0.0 + 0 +LINE + 5 +555 + 8 +0 + 62 + 0 + 10 +6653.824704 + 20 +11582.480556 + 30 +0.0 + 11 +6653.824704 + 21 +11582.480556 + 31 +0.0 + 0 +LINE + 5 +556 + 8 +0 + 62 + 0 + 10 +6637.672136 + 20 +11632.562601 + 30 +0.0 + 11 +6637.672136 + 21 +11632.562601 + 31 +0.0 + 0 +LINE + 5 +557 + 8 +0 + 62 + 0 + 10 +6651.881661 + 20 +11663.30186 + 30 +0.0 + 11 +6651.881661 + 21 +11663.30186 + 31 +0.0 + 0 +LINE + 5 +558 + 8 +0 + 62 + 0 + 10 +6635.729094 + 20 +11713.383904 + 30 +0.0 + 11 +6635.729094 + 21 +11713.383904 + 31 +0.0 + 0 +LINE + 5 +559 + 8 +0 + 62 + 0 + 10 +6663.870788 + 20 +11337.330148 + 30 +0.0 + 11 +6663.870788 + 21 +11337.330148 + 31 +0.0 + 0 +LINE + 5 +55A + 8 +0 + 62 + 0 + 10 +6640.383957 + 20 +11312.501185 + 30 +0.0 + 11 +6640.383957 + 21 +11312.501185 + 31 +0.0 + 0 +LINE + 5 +55B + 8 +0 + 62 + 0 + 10 +6656.536525 + 20 +11262.41914 + 30 +0.0 + 11 +6656.536525 + 21 +11262.41914 + 31 +0.0 + 0 +LINE + 5 +55C + 8 +0 + 62 + 0 + 10 +6633.893085 + 20 +11237.052878 + 30 +0.0 + 11 +6633.893085 + 21 +11237.052878 + 31 +0.0 + 0 +LINE + 5 +55D + 8 +0 + 62 + 0 + 10 +6642.327 + 20 +11231.679882 + 30 +0.0 + 11 +6642.327 + 21 +11231.679882 + 31 +0.0 + 0 +LINE + 5 +55E + 8 +0 + 62 + 0 + 10 +6650.045652 + 20 +11186.970833 + 30 +0.0 + 11 +6650.045652 + 21 +11186.970833 + 31 +0.0 + 0 +LINE + 5 +55F + 8 +0 + 62 + 0 + 10 +6658.479567 + 20 +11181.597837 + 30 +0.0 + 11 +6658.479567 + 21 +11181.597837 + 31 +0.0 + 0 +LINE + 5 +560 + 8 +0 + 62 + 0 + 10 +6666.19822 + 20 +11136.888788 + 30 +0.0 + 11 +6666.19822 + 21 +11136.888788 + 31 +0.0 + 0 +LINE + 5 +561 + 8 +0 + 62 + 0 + 10 +6642.711389 + 20 +11112.059825 + 30 +0.0 + 11 +6642.711389 + 21 +11112.059825 + 31 +0.0 + 0 +LINE + 5 +562 + 8 +0 + 62 + 0 + 10 +6635.339828 + 20 +11404.893992 + 30 +0.0 + 11 +6635.339828 + 21 +11404.893992 + 31 +0.0 + 0 +LINE + 5 +563 + 8 +0 + 62 + 0 + 10 +6639.026215 + 20 +11401.516041 + 30 +0.0 + 11 +6639.026215 + 21 +11401.516041 + 31 +0.0 + 0 +LINE + 5 +564 + 8 +0 + 62 + 0 + 10 +6656.42596 + 20 +11385.572112 + 30 +0.0 + 11 +6656.42596 + 21 +11385.572112 + 31 +0.0 + 0 +LINE + 5 +565 + 8 +0 + 62 + 0 + 10 +6634.563252 + 20 +11478.251254 + 30 +0.0 + 11 +6634.563252 + 21 +11478.251254 + 31 +0.0 + 0 +LINE + 5 +566 + 8 +0 + 62 + 0 + 10 +6654.46974 + 20 +11460.010319 + 30 +0.0 + 11 +6654.46974 + 21 +11460.010319 + 31 +0.0 + 0 +LINE + 5 +567 + 8 +0 + 62 + 0 + 10 +6658.156127 + 20 +11456.632368 + 30 +0.0 + 11 +6658.156127 + 21 +11456.632368 + 31 +0.0 + 0 +LINE + 5 +568 + 8 +0 + 62 + 0 + 10 +6632.607032 + 20 +11552.689461 + 30 +0.0 + 11 +6632.607032 + 21 +11552.689461 + 31 +0.0 + 0 +LINE + 5 +569 + 8 +0 + 62 + 0 + 10 +6636.293419 + 20 +11549.31151 + 30 +0.0 + 11 +6636.293419 + 21 +11549.31151 + 31 +0.0 + 0 +LINE + 5 +56A + 8 +0 + 62 + 0 + 10 +6653.693164 + 20 +11533.367581 + 30 +0.0 + 11 +6653.693164 + 21 +11533.367581 + 31 +0.0 + 0 +LINE + 5 +56B + 8 +0 + 62 + 0 + 10 +6631.830457 + 20 +11626.046723 + 30 +0.0 + 11 +6631.830457 + 21 +11626.046723 + 31 +0.0 + 0 +LINE + 5 +56C + 8 +0 + 62 + 0 + 10 +6651.736945 + 20 +11607.805788 + 30 +0.0 + 11 +6651.736945 + 21 +11607.805788 + 31 +0.0 + 0 +LINE + 5 +56D + 8 +0 + 62 + 0 + 10 +6655.423331 + 20 +11604.427837 + 30 +0.0 + 11 +6655.423331 + 21 +11604.427837 + 31 +0.0 + 0 +LINE + 5 +56E + 8 +0 + 62 + 0 + 10 +6633.560624 + 20 +11697.106979 + 30 +0.0 + 11 +6633.560624 + 21 +11697.106979 + 31 +0.0 + 0 +LINE + 5 +56F + 8 +0 + 62 + 0 + 10 +6650.960369 + 20 +11681.16305 + 30 +0.0 + 11 +6650.960369 + 21 +11681.16305 + 31 +0.0 + 0 +LINE + 5 +570 + 8 +0 + 62 + 0 + 10 +6637.296048 + 20 +11330.455785 + 30 +0.0 + 11 +6637.296048 + 21 +11330.455785 + 31 +0.0 + 0 +LINE + 5 +571 + 8 +0 + 62 + 0 + 10 +6657.202536 + 20 +11312.214849 + 30 +0.0 + 11 +6657.202536 + 21 +11312.214849 + 31 +0.0 + 0 +LINE + 5 +572 + 8 +0 + 62 + 0 + 10 +6660.888922 + 20 +11308.836898 + 30 +0.0 + 11 +6660.888922 + 21 +11308.836898 + 31 +0.0 + 0 +LINE + 5 +573 + 8 +0 + 62 + 0 + 10 +6638.072624 + 20 +11257.098523 + 30 +0.0 + 11 +6638.072624 + 21 +11257.098523 + 31 +0.0 + 0 +LINE + 5 +574 + 8 +0 + 62 + 0 + 10 +6641.75901 + 20 +11253.720572 + 30 +0.0 + 11 +6641.75901 + 21 +11253.720572 + 31 +0.0 + 0 +LINE + 5 +575 + 8 +0 + 62 + 0 + 10 +6659.158755 + 20 +11237.776643 + 30 +0.0 + 11 +6659.158755 + 21 +11237.776643 + 31 +0.0 + 0 +LINE + 5 +576 + 8 +0 + 62 + 0 + 10 +6640.028843 + 20 +11182.660316 + 30 +0.0 + 11 +6640.028843 + 21 +11182.660316 + 31 +0.0 + 0 +LINE + 5 +577 + 8 +0 + 62 + 0 + 10 +6659.935331 + 20 +11164.41938 + 30 +0.0 + 11 +6659.935331 + 21 +11164.41938 + 31 +0.0 + 0 +LINE + 5 +578 + 8 +0 + 62 + 0 + 10 +6663.621718 + 20 +11161.041429 + 30 +0.0 + 11 +6663.621718 + 21 +11161.041429 + 31 +0.0 + 0 +LINE + 5 +579 + 8 +0 + 62 + 0 + 10 +6640.805419 + 20 +11109.303053 + 30 +0.0 + 11 +6640.805419 + 21 +11109.303053 + 31 +0.0 + 0 +LINE + 5 +57A + 8 +0 + 62 + 0 + 10 +6644.491806 + 20 +11105.925102 + 30 +0.0 + 11 +6644.491806 + 21 +11105.925102 + 31 +0.0 + 0 +LINE + 5 +57B + 8 +0 + 62 + 0 + 10 +6661.891551 + 20 +11089.981173 + 30 +0.0 + 11 +6661.891551 + 21 +11089.981173 + 31 +0.0 + 0 +ENDBLK + 5 +57C + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X13 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X13 + 1 + + 0 +LINE + 5 +57E + 8 +0 + 62 + 0 + 10 +5708.446515 + 20 +9243.980421 + 30 +0.0 + 11 +6622.135223 + 21 +10157.669129 + 31 +0.0 + 0 +LINE + 5 +57F + 8 +0 + 62 + 0 + 10 +5708.446515 + 20 +9420.757116 + 30 +0.0 + 11 +6622.135223 + 21 +10334.445824 + 31 +0.0 + 0 +LINE + 5 +580 + 8 +0 + 62 + 0 + 10 +5708.446515 + 20 +9597.533811 + 30 +0.0 + 11 +6456.017848 + 21 +10345.105144 + 31 +0.0 + 0 +LINE + 5 +581 + 8 +0 + 62 + 0 + 10 +5708.446515 + 20 +9774.310507 + 30 +0.0 + 11 +6279.241152 + 21 +10345.105144 + 31 +0.0 + 0 +LINE + 5 +582 + 8 +0 + 62 + 0 + 10 +5708.446515 + 20 +9951.087202 + 30 +0.0 + 11 +6102.464457 + 21 +10345.105144 + 31 +0.0 + 0 +LINE + 5 +583 + 8 +0 + 62 + 0 + 10 +5708.446515 + 20 +10127.863897 + 30 +0.0 + 11 +5925.687762 + 21 +10345.105144 + 31 +0.0 + 0 +LINE + 5 +584 + 8 +0 + 62 + 0 + 10 +5708.446515 + 20 +10304.640593 + 30 +0.0 + 11 +5748.911066 + 21 +10345.105144 + 31 +0.0 + 0 +LINE + 5 +585 + 8 +0 + 62 + 0 + 10 +5731.668685 + 20 +9090.425896 + 30 +0.0 + 11 +6622.135223 + 21 +9980.892434 + 31 +0.0 + 0 +LINE + 5 +586 + 8 +0 + 62 + 0 + 10 +5908.445381 + 20 +9090.425896 + 30 +0.0 + 11 +6622.135223 + 21 +9804.115738 + 31 +0.0 + 0 +LINE + 5 +587 + 8 +0 + 62 + 0 + 10 +6085.222076 + 20 +9090.425896 + 30 +0.0 + 11 +6622.135223 + 21 +9627.339043 + 31 +0.0 + 0 +LINE + 5 +588 + 8 +0 + 62 + 0 + 10 +6261.998771 + 20 +9090.425896 + 30 +0.0 + 11 +6622.135223 + 21 +9450.562348 + 31 +0.0 + 0 +LINE + 5 +589 + 8 +0 + 62 + 0 + 10 +6438.775467 + 20 +9090.425896 + 30 +0.0 + 11 +6622.135223 + 21 +9273.785653 + 31 +0.0 + 0 +LINE + 5 +58A + 8 +0 + 62 + 0 + 10 +6615.552162 + 20 +9090.425896 + 30 +0.0 + 11 +6622.135223 + 21 +9097.008957 + 31 +0.0 + 0 +ENDBLK + 5 +58B + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X14 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X14 + 1 + + 0 +LINE + 5 +58D + 8 +0 + 62 + 0 + 10 +6632.8125 + 20 +10947.102322 + 30 +0.0 + 11 +6648.4375 + 21 +10947.102322 + 31 +0.0 + 0 +LINE + 5 +58E + 8 +0 + 62 + 0 + 10 +6679.6875 + 20 +10947.102322 + 30 +0.0 + 11 +6695.3125 + 21 +10947.102322 + 31 +0.0 + 0 +LINE + 5 +58F + 8 +0 + 62 + 0 + 10 +6656.25 + 20 +10960.633969 + 30 +0.0 + 11 +6671.875 + 21 +10960.633969 + 31 +0.0 + 0 +LINE + 5 +590 + 8 +0 + 62 + 0 + 10 +6703.125 + 20 +10960.633969 + 30 +0.0 + 11 +6710.0 + 21 +10960.633969 + 31 +0.0 + 0 +LINE + 5 +591 + 8 +0 + 62 + 0 + 10 +6632.8125 + 20 +10974.165616 + 30 +0.0 + 11 +6648.4375 + 21 +10974.165616 + 31 +0.0 + 0 +LINE + 5 +592 + 8 +0 + 62 + 0 + 10 +6679.6875 + 20 +10974.165616 + 30 +0.0 + 11 +6695.3125 + 21 +10974.165616 + 31 +0.0 + 0 +LINE + 5 +593 + 8 +0 + 62 + 0 + 10 +6656.25 + 20 +10987.697263 + 30 +0.0 + 11 +6671.875 + 21 +10987.697263 + 31 +0.0 + 0 +LINE + 5 +594 + 8 +0 + 62 + 0 + 10 +6703.125 + 20 +10987.697263 + 30 +0.0 + 11 +6710.0 + 21 +10987.697263 + 31 +0.0 + 0 +LINE + 5 +595 + 8 +0 + 62 + 0 + 10 +6632.8125 + 20 +11001.228909 + 30 +0.0 + 11 +6648.4375 + 21 +11001.228909 + 31 +0.0 + 0 +LINE + 5 +596 + 8 +0 + 62 + 0 + 10 +6679.6875 + 20 +11001.228909 + 30 +0.0 + 11 +6695.3125 + 21 +11001.228909 + 31 +0.0 + 0 +LINE + 5 +597 + 8 +0 + 62 + 0 + 10 +6656.25 + 20 +11014.760556 + 30 +0.0 + 11 +6671.875 + 21 +11014.760556 + 31 +0.0 + 0 +LINE + 5 +598 + 8 +0 + 62 + 0 + 10 +6703.125 + 20 +11014.760556 + 30 +0.0 + 11 +6710.0 + 21 +11014.760556 + 31 +0.0 + 0 +LINE + 5 +599 + 8 +0 + 62 + 0 + 10 +6632.8125 + 20 +11028.292203 + 30 +0.0 + 11 +6648.4375 + 21 +11028.292203 + 31 +0.0 + 0 +LINE + 5 +59A + 8 +0 + 62 + 0 + 10 +6679.6875 + 20 +11028.292203 + 30 +0.0 + 11 +6695.3125 + 21 +11028.292203 + 31 +0.0 + 0 +LINE + 5 +59B + 8 +0 + 62 + 0 + 10 +6656.25 + 20 +11041.82385 + 30 +0.0 + 11 +6671.875 + 21 +11041.82385 + 31 +0.0 + 0 +LINE + 5 +59C + 8 +0 + 62 + 0 + 10 +6703.125 + 20 +11041.82385 + 30 +0.0 + 11 +6710.0 + 21 +11041.82385 + 31 +0.0 + 0 +LINE + 5 +59D + 8 +0 + 62 + 0 + 10 +6632.8125 + 20 +11055.355497 + 30 +0.0 + 11 +6648.4375 + 21 +11055.355497 + 31 +0.0 + 0 +LINE + 5 +59E + 8 +0 + 62 + 0 + 10 +6679.6875 + 20 +11055.355497 + 30 +0.0 + 11 +6695.3125 + 21 +11055.355497 + 31 +0.0 + 0 +LINE + 5 +59F + 8 +0 + 62 + 0 + 10 +6656.25 + 20 +10933.570675 + 30 +0.0 + 11 +6671.875 + 21 +10933.570675 + 31 +0.0 + 0 +LINE + 5 +5A0 + 8 +0 + 62 + 0 + 10 +6703.125 + 20 +10933.570675 + 30 +0.0 + 11 +6710.0 + 21 +10933.570675 + 31 +0.0 + 0 +LINE + 5 +5A1 + 8 +0 + 62 + 0 + 10 +6632.8125 + 20 +10920.039028 + 30 +0.0 + 11 +6648.4375 + 21 +10920.039028 + 31 +0.0 + 0 +LINE + 5 +5A2 + 8 +0 + 62 + 0 + 10 +6679.6875 + 20 +10920.039028 + 30 +0.0 + 11 +6695.3125 + 21 +10920.039028 + 31 +0.0 + 0 +LINE + 5 +5A3 + 8 +0 + 62 + 0 + 10 +6656.25 + 20 +10906.507381 + 30 +0.0 + 11 +6671.875 + 21 +10906.507381 + 31 +0.0 + 0 +LINE + 5 +5A4 + 8 +0 + 62 + 0 + 10 +6703.125 + 20 +10906.507381 + 30 +0.0 + 11 +6710.0 + 21 +10906.507381 + 31 +0.0 + 0 +LINE + 5 +5A5 + 8 +0 + 62 + 0 + 10 +6632.8125 + 20 +10892.975734 + 30 +0.0 + 11 +6648.4375 + 21 +10892.975734 + 31 +0.0 + 0 +LINE + 5 +5A6 + 8 +0 + 62 + 0 + 10 +6679.6875 + 20 +10892.975734 + 30 +0.0 + 11 +6695.3125 + 21 +10892.975734 + 31 +0.0 + 0 +LINE + 5 +5A7 + 8 +0 + 62 + 0 + 10 +6656.25 + 20 +10879.444088 + 30 +0.0 + 11 +6671.875 + 21 +10879.444088 + 31 +0.0 + 0 +LINE + 5 +5A8 + 8 +0 + 62 + 0 + 10 +6703.125 + 20 +10879.444088 + 30 +0.0 + 11 +6710.0 + 21 +10879.444088 + 31 +0.0 + 0 +LINE + 5 +5A9 + 8 +0 + 62 + 0 + 10 +6632.8125 + 20 +10865.912441 + 30 +0.0 + 11 +6648.4375 + 21 +10865.912441 + 31 +0.0 + 0 +LINE + 5 +5AA + 8 +0 + 62 + 0 + 10 +6679.6875 + 20 +10865.912441 + 30 +0.0 + 11 +6695.3125 + 21 +10865.912441 + 31 +0.0 + 0 +LINE + 5 +5AB + 8 +0 + 62 + 0 + 10 +6656.25 + 20 +10852.380794 + 30 +0.0 + 11 +6671.875 + 21 +10852.380794 + 31 +0.0 + 0 +LINE + 5 +5AC + 8 +0 + 62 + 0 + 10 +6703.125 + 20 +10852.380794 + 30 +0.0 + 11 +6710.0 + 21 +10852.380794 + 31 +0.0 + 0 +LINE + 5 +5AD + 8 +0 + 62 + 0 + 10 +6632.8125 + 20 +10838.849147 + 30 +0.0 + 11 +6648.4375 + 21 +10838.849147 + 31 +0.0 + 0 +LINE + 5 +5AE + 8 +0 + 62 + 0 + 10 +6679.6875 + 20 +10838.849147 + 30 +0.0 + 11 +6695.3125 + 21 +10838.849147 + 31 +0.0 + 0 +LINE + 5 +5AF + 8 +0 + 62 + 0 + 10 +6703.124957 + 20 +10879.44411 + 30 +0.0 + 11 +6695.312457 + 21 +10892.975757 + 31 +0.0 + 0 +LINE + 5 +5B0 + 8 +0 + 62 + 0 + 10 +6679.687457 + 20 +10920.039051 + 30 +0.0 + 11 +6671.874957 + 21 +10933.570698 + 31 +0.0 + 0 +LINE + 5 +5B1 + 8 +0 + 62 + 0 + 10 +6656.249957 + 20 +10960.633992 + 30 +0.0 + 11 +6648.437457 + 21 +10974.165639 + 31 +0.0 + 0 +LINE + 5 +5B2 + 8 +0 + 62 + 0 + 10 +6632.812457 + 20 +11001.228933 + 30 +0.0 + 11 +6630.0 + 21 +11006.100252 + 31 +0.0 + 0 +LINE + 5 +5B3 + 8 +0 + 62 + 0 + 10 +6703.124957 + 20 +10852.380817 + 30 +0.0 + 11 +6695.312457 + 21 +10865.912464 + 31 +0.0 + 0 +LINE + 5 +5B4 + 8 +0 + 62 + 0 + 10 +6679.687457 + 20 +10892.975757 + 30 +0.0 + 11 +6671.874957 + 21 +10906.507404 + 31 +0.0 + 0 +LINE + 5 +5B5 + 8 +0 + 62 + 0 + 10 +6656.249957 + 20 +10933.570698 + 30 +0.0 + 11 +6648.437457 + 21 +10947.102345 + 31 +0.0 + 0 +LINE + 5 +5B6 + 8 +0 + 62 + 0 + 10 +6632.812457 + 20 +10974.165639 + 30 +0.0 + 11 +6630.0 + 21 +10979.036958 + 31 +0.0 + 0 +LINE + 5 +5B7 + 8 +0 + 62 + 0 + 10 +6700.421528 + 20 +10830.0 + 30 +0.0 + 11 +6695.312458 + 21 +10838.84917 + 31 +0.0 + 0 +LINE + 5 +5B8 + 8 +0 + 62 + 0 + 10 +6679.687458 + 20 +10865.912464 + 30 +0.0 + 11 +6671.874958 + 21 +10879.444111 + 31 +0.0 + 0 +LINE + 5 +5B9 + 8 +0 + 62 + 0 + 10 +6656.249958 + 20 +10906.507404 + 30 +0.0 + 11 +6648.437458 + 21 +10920.039051 + 31 +0.0 + 0 +LINE + 5 +5BA + 8 +0 + 62 + 0 + 10 +6632.812458 + 20 +10947.102345 + 30 +0.0 + 11 +6630.0 + 21 +10951.973665 + 31 +0.0 + 0 +LINE + 5 +5BB + 8 +0 + 62 + 0 + 10 +6679.687458 + 20 +10838.84917 + 30 +0.0 + 11 +6671.874958 + 21 +10852.380817 + 31 +0.0 + 0 +LINE + 5 +5BC + 8 +0 + 62 + 0 + 10 +6656.249958 + 20 +10879.444111 + 30 +0.0 + 11 +6648.437458 + 21 +10892.975757 + 31 +0.0 + 0 +LINE + 5 +5BD + 8 +0 + 62 + 0 + 10 +6632.812458 + 20 +10920.039051 + 30 +0.0 + 11 +6630.0 + 21 +10924.910371 + 31 +0.0 + 0 +LINE + 5 +5BE + 8 +0 + 62 + 0 + 10 +6656.249958 + 20 +10852.380817 + 30 +0.0 + 11 +6648.437458 + 21 +10865.912464 + 31 +0.0 + 0 +LINE + 5 +5BF + 8 +0 + 62 + 0 + 10 +6632.812458 + 20 +10892.975758 + 30 +0.0 + 11 +6630.0 + 21 +10897.847077 + 31 +0.0 + 0 +LINE + 5 +5C0 + 8 +0 + 62 + 0 + 10 +6653.546528 + 20 +10830.0 + 30 +0.0 + 11 +6648.437458 + 21 +10838.84917 + 31 +0.0 + 0 +LINE + 5 +5C1 + 8 +0 + 62 + 0 + 10 +6632.812458 + 20 +10865.912464 + 30 +0.0 + 11 +6630.0 + 21 +10870.783783 + 31 +0.0 + 0 +LINE + 5 +5C2 + 8 +0 + 62 + 0 + 10 +6632.812458 + 20 +10838.84917 + 30 +0.0 + 11 +6630.0 + 21 +10843.72049 + 31 +0.0 + 0 +LINE + 5 +5C3 + 8 +0 + 62 + 0 + 10 +6703.124957 + 20 +10906.507404 + 30 +0.0 + 11 +6695.312457 + 21 +10920.039051 + 31 +0.0 + 0 +LINE + 5 +5C4 + 8 +0 + 62 + 0 + 10 +6679.687457 + 20 +10947.102345 + 30 +0.0 + 11 +6671.874957 + 21 +10960.633992 + 31 +0.0 + 0 +LINE + 5 +5C5 + 8 +0 + 62 + 0 + 10 +6656.249957 + 20 +10987.697286 + 30 +0.0 + 11 +6648.437457 + 21 +11001.228933 + 31 +0.0 + 0 +LINE + 5 +5C6 + 8 +0 + 62 + 0 + 10 +6632.812457 + 20 +11028.292227 + 30 +0.0 + 11 +6630.0 + 21 +11033.163546 + 31 +0.0 + 0 +LINE + 5 +5C7 + 8 +0 + 62 + 0 + 10 +6703.124957 + 20 +10933.570698 + 30 +0.0 + 11 +6695.312457 + 21 +10947.102345 + 31 +0.0 + 0 +LINE + 5 +5C8 + 8 +0 + 62 + 0 + 10 +6679.687457 + 20 +10974.165639 + 30 +0.0 + 11 +6671.874957 + 21 +10987.697286 + 31 +0.0 + 0 +LINE + 5 +5C9 + 8 +0 + 62 + 0 + 10 +6656.249957 + 20 +11014.76058 + 30 +0.0 + 11 +6648.437457 + 21 +11028.292227 + 31 +0.0 + 0 +LINE + 5 +5CA + 8 +0 + 62 + 0 + 10 +6632.812457 + 20 +11055.355521 + 30 +0.0 + 11 +6630.0 + 21 +11060.22684 + 31 +0.0 + 0 +LINE + 5 +5CB + 8 +0 + 62 + 0 + 10 +6703.124957 + 20 +10960.633992 + 30 +0.0 + 11 +6695.312457 + 21 +10974.165639 + 31 +0.0 + 0 +LINE + 5 +5CC + 8 +0 + 62 + 0 + 10 +6679.687457 + 20 +11001.228933 + 30 +0.0 + 11 +6671.874957 + 21 +11014.76058 + 31 +0.0 + 0 +LINE + 5 +5CD + 8 +0 + 62 + 0 + 10 +6656.249957 + 20 +11041.823874 + 30 +0.0 + 11 +6648.437457 + 21 +11055.355521 + 31 +0.0 + 0 +LINE + 5 +5CE + 8 +0 + 62 + 0 + 10 +6703.124957 + 20 +10987.697286 + 30 +0.0 + 11 +6695.312457 + 21 +11001.228933 + 31 +0.0 + 0 +LINE + 5 +5CF + 8 +0 + 62 + 0 + 10 +6679.687457 + 20 +11028.292227 + 30 +0.0 + 11 +6671.874957 + 21 +11041.823874 + 31 +0.0 + 0 +LINE + 5 +5D0 + 8 +0 + 62 + 0 + 10 +6703.124957 + 20 +11014.76058 + 30 +0.0 + 11 +6695.312457 + 21 +11028.292227 + 31 +0.0 + 0 +LINE + 5 +5D1 + 8 +0 + 62 + 0 + 10 +6679.687457 + 20 +11055.35552 + 30 +0.0 + 11 +6674.119214 + 21 +11065.0 + 31 +0.0 + 0 +LINE + 5 +5D2 + 8 +0 + 62 + 0 + 10 +6703.124957 + 20 +11041.823874 + 30 +0.0 + 11 +6695.312457 + 21 +11055.35552 + 31 +0.0 + 0 +LINE + 5 +5D3 + 8 +0 + 62 + 0 + 10 +6630.0 + 20 +10888.104392 + 30 +0.0 + 11 +6632.812499 + 21 +10892.975783 + 31 +0.0 + 0 +LINE + 5 +5D4 + 8 +0 + 62 + 0 + 10 +6648.437499 + 20 +10920.039076 + 30 +0.0 + 11 +6656.249999 + 21 +10933.570723 + 31 +0.0 + 0 +LINE + 5 +5D5 + 8 +0 + 62 + 0 + 10 +6671.874999 + 20 +10960.634017 + 30 +0.0 + 11 +6679.687499 + 21 +10974.165664 + 31 +0.0 + 0 +LINE + 5 +5D6 + 8 +0 + 62 + 0 + 10 +6695.312499 + 20 +11001.228958 + 30 +0.0 + 11 +6703.124999 + 21 +11014.760605 + 31 +0.0 + 0 +LINE + 5 +5D7 + 8 +0 + 62 + 0 + 10 +6630.0 + 20 +10915.167685 + 30 +0.0 + 11 +6632.812499 + 21 +10920.039076 + 31 +0.0 + 0 +LINE + 5 +5D8 + 8 +0 + 62 + 0 + 10 +6648.437499 + 20 +10947.10237 + 30 +0.0 + 11 +6656.249999 + 21 +10960.634017 + 31 +0.0 + 0 +LINE + 5 +5D9 + 8 +0 + 62 + 0 + 10 +6671.874999 + 20 +10987.697311 + 30 +0.0 + 11 +6679.687499 + 21 +11001.228958 + 31 +0.0 + 0 +LINE + 5 +5DA + 8 +0 + 62 + 0 + 10 +6695.312499 + 20 +11028.292252 + 30 +0.0 + 11 +6703.124999 + 21 +11041.823899 + 31 +0.0 + 0 +LINE + 5 +5DB + 8 +0 + 62 + 0 + 10 +6630.0 + 20 +10942.230979 + 30 +0.0 + 11 +6632.812499 + 21 +10947.10237 + 31 +0.0 + 0 +LINE + 5 +5DC + 8 +0 + 62 + 0 + 10 +6648.437499 + 20 +10974.165664 + 30 +0.0 + 11 +6656.249999 + 21 +10987.697311 + 31 +0.0 + 0 +LINE + 5 +5DD + 8 +0 + 62 + 0 + 10 +6671.874999 + 20 +11014.760605 + 30 +0.0 + 11 +6679.687499 + 21 +11028.292252 + 31 +0.0 + 0 +LINE + 5 +5DE + 8 +0 + 62 + 0 + 10 +6695.312499 + 20 +11055.355546 + 30 +0.0 + 11 +6700.880727 + 21 +11065.0 + 31 +0.0 + 0 +LINE + 5 +5DF + 8 +0 + 62 + 0 + 10 +6630.0 + 20 +10969.294273 + 30 +0.0 + 11 +6632.812499 + 21 +10974.165664 + 31 +0.0 + 0 +LINE + 5 +5E0 + 8 +0 + 62 + 0 + 10 +6648.437499 + 20 +11001.228958 + 30 +0.0 + 11 +6656.249999 + 21 +11014.760605 + 31 +0.0 + 0 +LINE + 5 +5E1 + 8 +0 + 62 + 0 + 10 +6671.874999 + 20 +11041.823899 + 30 +0.0 + 11 +6679.687499 + 21 +11055.355546 + 31 +0.0 + 0 +LINE + 5 +5E2 + 8 +0 + 62 + 0 + 10 +6630.0 + 20 +10996.357567 + 30 +0.0 + 11 +6632.812499 + 21 +11001.228958 + 31 +0.0 + 0 +LINE + 5 +5E3 + 8 +0 + 62 + 0 + 10 +6648.437499 + 20 +11028.292252 + 30 +0.0 + 11 +6656.249999 + 21 +11041.823899 + 31 +0.0 + 0 +LINE + 5 +5E4 + 8 +0 + 62 + 0 + 10 +6630.0 + 20 +11023.42086 + 30 +0.0 + 11 +6632.812499 + 21 +11028.292252 + 31 +0.0 + 0 +LINE + 5 +5E5 + 8 +0 + 62 + 0 + 10 +6648.437499 + 20 +11055.355546 + 30 +0.0 + 11 +6654.005727 + 21 +11065.0 + 31 +0.0 + 0 +LINE + 5 +5E6 + 8 +0 + 62 + 0 + 10 +6630.0 + 20 +11050.484154 + 30 +0.0 + 11 +6632.812499 + 21 +11055.355546 + 31 +0.0 + 0 +LINE + 5 +5E7 + 8 +0 + 62 + 0 + 10 +6630.0 + 20 +10861.041098 + 30 +0.0 + 11 +6632.812499 + 21 +10865.912489 + 31 +0.0 + 0 +LINE + 5 +5E8 + 8 +0 + 62 + 0 + 10 +6648.437499 + 20 +10892.975783 + 30 +0.0 + 11 +6656.249999 + 21 +10906.50743 + 31 +0.0 + 0 +LINE + 5 +5E9 + 8 +0 + 62 + 0 + 10 +6671.874999 + 20 +10933.570723 + 30 +0.0 + 11 +6679.687499 + 21 +10947.10237 + 31 +0.0 + 0 +LINE + 5 +5EA + 8 +0 + 62 + 0 + 10 +6695.312499 + 20 +10974.165664 + 30 +0.0 + 11 +6703.124999 + 21 +10987.697311 + 31 +0.0 + 0 +LINE + 5 +5EB + 8 +0 + 62 + 0 + 10 +6630.0 + 20 +10833.977804 + 30 +0.0 + 11 +6632.812499 + 21 +10838.849195 + 31 +0.0 + 0 +LINE + 5 +5EC + 8 +0 + 62 + 0 + 10 +6648.437499 + 20 +10865.912489 + 30 +0.0 + 11 +6656.249999 + 21 +10879.444136 + 31 +0.0 + 0 +LINE + 5 +5ED + 8 +0 + 62 + 0 + 10 +6671.874999 + 20 +10906.50743 + 30 +0.0 + 11 +6679.687499 + 21 +10920.039077 + 31 +0.0 + 0 +LINE + 5 +5EE + 8 +0 + 62 + 0 + 10 +6695.312499 + 20 +10947.10237 + 30 +0.0 + 11 +6703.124999 + 21 +10960.634017 + 31 +0.0 + 0 +LINE + 5 +5EF + 8 +0 + 62 + 0 + 10 +6648.437499 + 20 +10838.849195 + 30 +0.0 + 11 +6656.249999 + 21 +10852.380842 + 31 +0.0 + 0 +LINE + 5 +5F0 + 8 +0 + 62 + 0 + 10 +6671.874999 + 20 +10879.444136 + 30 +0.0 + 11 +6679.687499 + 21 +10892.975783 + 31 +0.0 + 0 +LINE + 5 +5F1 + 8 +0 + 62 + 0 + 10 +6695.312499 + 20 +10920.039077 + 30 +0.0 + 11 +6703.124999 + 21 +10933.570724 + 31 +0.0 + 0 +LINE + 5 +5F2 + 8 +0 + 62 + 0 + 10 +6671.874999 + 20 +10852.380842 + 30 +0.0 + 11 +6679.687499 + 21 +10865.912489 + 31 +0.0 + 0 +LINE + 5 +5F3 + 8 +0 + 62 + 0 + 10 +6695.312499 + 20 +10892.975783 + 30 +0.0 + 11 +6703.124999 + 21 +10906.50743 + 31 +0.0 + 0 +LINE + 5 +5F4 + 8 +0 + 62 + 0 + 10 +6674.578413 + 20 +10830.0 + 30 +0.0 + 11 +6679.687499 + 21 +10838.849195 + 31 +0.0 + 0 +LINE + 5 +5F5 + 8 +0 + 62 + 0 + 10 +6695.312499 + 20 +10865.912489 + 30 +0.0 + 11 +6703.124999 + 21 +10879.444136 + 31 +0.0 + 0 +LINE + 5 +5F6 + 8 +0 + 62 + 0 + 10 +6695.312499 + 20 +10838.849195 + 30 +0.0 + 11 +6703.124999 + 21 +10852.380842 + 31 +0.0 + 0 +ENDBLK + 5 +5F7 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X15 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X15 + 1 + + 0 +LINE + 5 +5F9 + 8 +0 + 62 + 0 + 10 +6088.349571 + 20 +8740.0 + 30 +0.0 + 11 +6403.349571 + 21 +9055.0 + 31 +0.0 + 0 +LINE + 5 +5FA + 8 +0 + 62 + 0 + 10 +5911.572875 + 20 +8740.0 + 30 +0.0 + 11 +6226.572875 + 21 +9055.0 + 31 +0.0 + 0 +LINE + 5 +5FB + 8 +0 + 62 + 0 + 10 +5734.79618 + 20 +8740.0 + 30 +0.0 + 11 +6049.79618 + 21 +9055.0 + 31 +0.0 + 0 +LINE + 5 +5FC + 8 +0 + 62 + 0 + 10 +5710.0 + 20 +8891.980515 + 30 +0.0 + 11 +5873.019485 + 21 +9055.0 + 31 +0.0 + 0 +LINE + 5 +5FD + 8 +0 + 62 + 0 + 10 +6265.126266 + 20 +8740.0 + 30 +0.0 + 11 +6580.126266 + 21 +9055.0 + 31 +0.0 + 0 +LINE + 5 +5FE + 8 +0 + 62 + 0 + 10 +6441.902961 + 20 +8740.0 + 30 +0.0 + 11 +6624.287011 + 21 +8922.38405 + 31 +0.0 + 0 +LINE + 5 +5FF + 8 +0 + 62 + 0 + 10 +6618.679656 + 20 +8740.0 + 30 +0.0 + 11 +6623.331461 + 21 +8744.651805 + 31 +0.0 + 0 +ENDBLK + 5 +600 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D16 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D16 + 1 + + 0 +LINE + 5 +602 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9369.023561 + 20 +11771.335123 + 30 +0.0 + 11 +9369.023561 + 21 +11867.053132 + 31 +0.0 + 0 +INSERT + 5 +603 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9369.023561 + 20 +11770.335123 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +604 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9369.023561 + 20 +11868.053132 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +605 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9325.273561 + 20 +11797.319128 + 30 +0.0 + 40 +87.5 + 1 +4 + 50 +90.0 + 41 +0.75 + 72 + 1 + 11 +9281.523561 + 21 +11819.194128 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +607 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8592.462088 + 20 +11770.335123 + 30 +0.0 + 0 +POINT + 5 +608 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8592.462088 + 20 +11868.053132 + 30 +0.0 + 0 +POINT + 5 +609 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9369.023561 + 20 +11868.053132 + 30 +0.0 + 0 +ENDBLK + 5 +60A + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D17 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D17 + 1 + + 0 +LINE + 5 +60C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9369.023561 + 20 +11729.455992 + 30 +0.0 + 11 +9369.023561 + 21 +11769.335123 + 31 +0.0 + 0 +INSERT + 5 +60D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9369.023561 + 20 +11728.455992 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +60E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9369.023561 + 20 +11770.335123 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +60F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9325.273561 + 20 +11738.458057 + 30 +0.0 + 40 +87.5 + 1 +1 + 50 +90.0 + 41 +0.75 + 72 + 1 + 11 +9281.523561 + 21 +11749.395557 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +610 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8592.462088 + 20 +11728.455992 + 30 +0.0 + 0 +POINT + 5 +611 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8592.462088 + 20 +11770.335123 + 30 +0.0 + 0 +POINT + 5 +612 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9369.023561 + 20 +11770.335123 + 30 +0.0 + 0 +ENDBLK + 5 +613 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D18 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D18 + 1 + + 0 +LINE + 5 +615 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9369.023561 + 20 +11626.154251 + 30 +0.0 + 11 +9369.023561 + 21 +11727.455992 + 31 +0.0 + 0 +INSERT + 5 +616 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9369.023561 + 20 +11625.154251 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +617 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9369.023561 + 20 +11728.455992 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +618 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9325.273561 + 20 +11654.930121 + 30 +0.0 + 40 +87.5 + 1 +4 + 50 +90.0 + 41 +0.75 + 72 + 1 + 11 +9281.523561 + 21 +11676.805121 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +619 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8581.288492 + 20 +11625.154251 + 30 +0.0 + 0 +POINT + 5 +61A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8592.462088 + 20 +11728.455992 + 30 +0.0 + 0 +POINT + 5 +61B + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9369.023561 + 20 +11728.455992 + 30 +0.0 + 0 +ENDBLK + 5 +61C + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D19 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D19 + 1 + + 0 +LINE + 5 +61E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9369.023561 + 20 +11229.698587 + 30 +0.0 + 11 +9369.023561 + 21 +11624.154251 + 31 +0.0 + 0 +INSERT + 5 +61F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9369.023561 + 20 +11228.698587 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +620 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9369.023561 + 20 +11625.154251 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +621 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9325.273561 + 20 +11383.176419 + 30 +0.0 + 40 +87.5 + 1 +16 + 50 +90.0 + 41 +0.75 + 72 + 1 + 11 +9281.523561 + 21 +11426.926419 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +622 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8581.288492 + 20 +11228.698587 + 30 +0.0 + 0 +POINT + 5 +623 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8581.288492 + 20 +11625.154251 + 30 +0.0 + 0 +POINT + 5 +624 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9369.023561 + 20 +11625.154251 + 30 +0.0 + 0 +ENDBLK + 5 +625 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D20 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D20 + 1 + + 0 +LINE + 5 +627 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +6142.572752 + 20 +8884.916877 + 30 +0.0 + 11 +7051.902997 + 21 +8884.916877 + 31 +0.0 + 0 +INSERT + 5 +628 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +6141.572752 + 20 +8884.916877 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +629 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +7052.902997 + 20 +8884.916877 + 30 +0.0 + 0 +TEXT + 5 +62A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +6542.550375 + 20 +8928.666877 + 30 +0.0 + 40 +87.5 + 1 +36 + 41 +0.75 + 72 + 1 + 11 +6597.237875 + 21 +8972.416877 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +62B + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +6141.572752 + 20 +9555.000103 + 30 +0.0 + 0 +POINT + 5 +62C + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7052.902997 + 20 +9561.814406 + 30 +0.0 + 0 +POINT + 5 +62D + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7052.902997 + 20 +8884.916877 + 30 +0.0 + 0 +ENDBLK + 5 +62E + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D21 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D21 + 1 + + 0 +LINE + 5 +630 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +5502.376207 + 20 +13098.623281 + 30 +0.0 + 11 +5788.99228 + 21 +13098.623281 + 31 +0.0 + 0 +INSERT + 5 +631 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +5501.376207 + 20 +13098.623281 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +632 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +5789.99228 + 20 +13098.623281 + 30 +0.0 + 0 +TEXT + 5 +633 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +5612.871744 + 20 +13142.373281 + 30 +0.0 + 40 +87.5 + 1 +11 + 41 +0.75 + 72 + 1 + 11 +5645.684244 + 21 +13186.123281 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +634 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5501.376207 + 20 +12526.305162 + 30 +0.0 + 0 +POINT + 5 +635 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5789.99228 + 20 +12526.305162 + 30 +0.0 + 0 +POINT + 5 +636 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5789.99228 + 20 +13098.623281 + 30 +0.0 + 0 +ENDBLK + 5 +637 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D22 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D22 + 1 + + 0 +LINE + 5 +639 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +5790.99228 + 20 +13098.623281 + 30 +0.0 + 11 +5939.072764 + 21 +13098.623281 + 31 +0.0 + 0 +INSERT + 5 +63A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +5789.99228 + 20 +13098.623281 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +63B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +5940.072764 + 20 +13098.623281 + 30 +0.0 + 0 +TEXT + 5 +63C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +5843.157522 + 20 +13142.373281 + 30 +0.0 + 40 +87.5 + 1 +6 + 41 +0.75 + 72 + 1 + 11 +5865.032522 + 21 +13186.123281 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +63D + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5789.99228 + 20 +12526.305162 + 30 +0.0 + 0 +POINT + 5 +63E + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5940.072764 + 20 +12526.305162 + 30 +0.0 + 0 +POINT + 5 +63F + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5940.072764 + 20 +13098.623281 + 30 +0.0 + 0 +ENDBLK + 5 +640 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D23 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D23 + 1 + + 0 +LINE + 5 +642 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +5941.072764 + 20 +13098.623281 + 30 +0.0 + 11 +6139.949559 + 21 +13098.623281 + 31 +0.0 + 0 +INSERT + 5 +643 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +5940.072764 + 20 +13098.623281 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +644 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +6140.949559 + 20 +13098.623281 + 30 +0.0 + 0 +TEXT + 5 +645 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +6018.636162 + 20 +13142.373281 + 30 +0.0 + 40 +87.5 + 1 +8 + 41 +0.75 + 72 + 1 + 11 +6040.511162 + 21 +13186.123281 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +646 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5940.072764 + 20 +12526.305162 + 30 +0.0 + 0 +POINT + 5 +647 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +6140.949559 + 20 +12521.68964 + 30 +0.0 + 0 +POINT + 5 +648 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +6140.949559 + 20 +13098.623281 + 30 +0.0 + 0 +ENDBLK + 5 +649 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D24 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D24 + 1 + + 0 +LINE + 5 +64B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +6141.949559 + 20 +13098.623281 + 30 +0.0 + 11 +7061.212311 + 21 +13098.623281 + 31 +0.0 + 0 +INSERT + 5 +64C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +6140.949559 + 20 +13098.623281 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +64D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +7062.212311 + 20 +13098.623281 + 30 +0.0 + 0 +TEXT + 5 +64E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +6546.893435 + 20 +13142.373281 + 30 +0.0 + 40 +87.5 + 1 +36 + 41 +0.75 + 72 + 1 + 11 +6601.580935 + 21 +13186.123281 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +64F + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +6140.949559 + 20 +12521.68964 + 30 +0.0 + 0 +POINT + 5 +650 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7062.212311 + 20 +12523.997349 + 30 +0.0 + 0 +POINT + 5 +651 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7062.212311 + 20 +13098.623281 + 30 +0.0 + 0 +ENDBLK + 5 +652 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D25 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D25 + 1 + + 0 +LINE + 5 +654 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +7063.212311 + 20 +13098.623281 + 30 +0.0 + 11 +7098.155279 + 21 +13098.623281 + 31 +0.0 + 0 +INSERT + 5 +655 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +7062.212311 + 20 +13098.623281 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +656 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +7099.155279 + 20 +13098.623281 + 30 +0.0 + 0 +TEXT + 5 +657 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +7139.613455 + 20 +13142.373281 + 30 +0.0 + 40 +87.5 + 1 +1 + 41 +0.75 + 72 + 1 + 11 +7150.550955 + 21 +13186.123281 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +658 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7062.212311 + 20 +12523.997349 + 30 +0.0 + 0 +POINT + 5 +659 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7099.155279 + 20 +12519.381932 + 30 +0.0 + 0 +POINT + 5 +65A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7099.155279 + 20 +13098.623281 + 30 +0.0 + 0 +ENDBLK + 5 +65B + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D26 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D26 + 1 + + 0 +LINE + 5 +65D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +6101.665062 + 20 +8884.916877 + 30 +0.0 + 11 +6140.572752 + 21 +8884.916877 + 31 +0.0 + 0 +INSERT + 5 +65E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +6100.665062 + 20 +8884.916877 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +65F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +6141.572752 + 20 +8884.916877 + 30 +0.0 + 0 +TEXT + 5 +660 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +6029.0625 + 20 +8928.666877 + 30 +0.0 + 40 +87.5 + 1 +1 + 41 +0.75 + 72 + 1 + 11 +6040.0 + 21 +8972.416877 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +661 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +6100.665062 + 20 +9555.000103 + 30 +0.0 + 0 +POINT + 5 +662 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +6141.572752 + 20 +9555.000103 + 30 +0.0 + 0 +POINT + 5 +663 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +6141.572752 + 20 +8884.916877 + 30 +0.0 + 0 +ENDBLK + 5 +664 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D27 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D27 + 1 + + 0 +LINE + 5 +666 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +7053.902997 + 20 +8884.916877 + 30 +0.0 + 11 +7090.53801 + 21 +8884.916877 + 31 +0.0 + 0 +INSERT + 5 +667 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +7052.902997 + 20 +8884.916877 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +668 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +7091.53801 + 20 +8884.916877 + 30 +0.0 + 0 +TEXT + 5 +669 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +7134.0625 + 20 +8928.666877 + 30 +0.0 + 40 +87.5 + 1 +1 + 41 +0.75 + 72 + 1 + 11 +7145.0 + 21 +8972.416877 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +66A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7052.902997 + 20 +9561.814406 + 30 +0.0 + 0 +POINT + 5 +66B + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7091.53801 + 20 +9555.000103 + 30 +0.0 + 0 +POINT + 5 +66C + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7091.53801 + 20 +8884.916877 + 30 +0.0 + 0 +ENDBLK + 5 +66D + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D28 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D28 + 1 + + 0 +LINE + 5 +66F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9369.023561 + 20 +11869.053132 + 30 +0.0 + 11 +9369.023561 + 21 +11931.267711 + 31 +0.0 + 0 +INSERT + 5 +670 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9369.023561 + 20 +11868.053132 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +671 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9369.023561 + 20 +11932.267711 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +672 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9325.273561 + 20 +11958.125 + 30 +0.0 + 40 +87.5 + 1 +2 + 50 +90.0 + 41 +0.75 + 72 + 1 + 11 +9281.523561 + 21 +11980.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +673 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8592.462088 + 20 +11868.053132 + 30 +0.0 + 0 +POINT + 5 +674 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8595.255445 + 20 +11932.267711 + 30 +0.0 + 0 +POINT + 5 +675 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9369.023561 + 20 +11932.267711 + 30 +0.0 + 0 +ENDBLK + 5 +676 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D29 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D29 + 1 + + 0 +LINE + 5 +678 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +7730.0 + 20 +11229.0 + 30 +0.0 + 11 +7730.0 + 21 +11146.0 + 31 +0.0 + 0 +INSERT + 5 +679 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +7730.0 + 20 +11230.0 + 30 +0.0 + 50 +90.0 + 0 +INSERT + 5 +67A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +7730.0 + 20 +11145.0 + 30 +0.0 + 50 +270.0 + 0 +TEXT + 5 +67B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +7686.25 + 20 +11165.625 + 30 +0.0 + 40 +87.5 + 1 +3 + 50 +90.0 + 41 +0.75 + 72 + 1 + 11 +7642.5 + 21 +11187.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +67C + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7055.0 + 20 +11230.0 + 30 +0.0 + 0 +POINT + 5 +67D + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7055.0 + 20 +11145.0 + 30 +0.0 + 0 +POINT + 5 +67E + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7730.0 + 20 +11145.0 + 30 +0.0 + 0 +ENDBLK + 5 +67F + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X30 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X30 + 1 + + 0 +LINE + 5 +681 + 8 +0 + 62 + 0 + 10 +6427.766953 + 20 +4660.0 + 30 +0.0 + 11 +6862.141953 + 21 +5094.375 + 31 +0.0 + 0 +LINE + 5 +682 + 8 +0 + 62 + 0 + 10 +6250.990258 + 20 +4660.0 + 30 +0.0 + 11 +6685.365258 + 21 +5094.375 + 31 +0.0 + 0 +LINE + 5 +683 + 8 +0 + 62 + 0 + 10 +6215.0 + 20 +4800.786438 + 30 +0.0 + 11 +6508.588562 + 21 +5094.375 + 31 +0.0 + 0 +LINE + 5 +684 + 8 +0 + 62 + 0 + 10 +6215.0 + 20 +4977.563133 + 30 +0.0 + 11 +6331.811867 + 21 +5094.375 + 31 +0.0 + 0 +LINE + 5 +685 + 8 +0 + 62 + 0 + 10 +6604.543648 + 20 +4660.0 + 30 +0.0 + 11 +7038.918648 + 21 +5094.375 + 31 +0.0 + 0 +LINE + 5 +686 + 8 +0 + 62 + 0 + 10 +6781.320344 + 20 +4660.0 + 30 +0.0 + 11 +7125.0 + 21 +5003.679656 + 31 +0.0 + 0 +LINE + 5 +687 + 8 +0 + 62 + 0 + 10 +6958.097039 + 20 +4660.0 + 30 +0.0 + 11 +7126.991073 + 21 +4828.894034 + 31 +0.0 + 0 +ENDBLK + 5 +688 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X31 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X31 + 1 + + 0 +LINE + 5 +68A + 8 +0 + 62 + 0 + 10 +7126.991073 + 20 +4871.392875 + 30 +0.0 + 11 +7140.625 + 21 +4871.392875 + 31 +0.0 + 0 +LINE + 5 +68B + 8 +0 + 62 + 0 + 10 +7171.875 + 20 +4871.392875 + 30 +0.0 + 11 +7187.5 + 21 +4871.392875 + 31 +0.0 + 0 +LINE + 5 +68C + 8 +0 + 62 + 0 + 10 +7148.4375 + 20 +4884.924522 + 30 +0.0 + 11 +7164.0625 + 21 +4884.924522 + 31 +0.0 + 0 +LINE + 5 +68D + 8 +0 + 62 + 0 + 10 +7126.991073 + 20 +4898.456169 + 30 +0.0 + 11 +7140.625 + 21 +4898.456169 + 31 +0.0 + 0 +LINE + 5 +68E + 8 +0 + 62 + 0 + 10 +7171.875 + 20 +4898.456169 + 30 +0.0 + 11 +7187.5 + 21 +4898.456169 + 31 +0.0 + 0 +LINE + 5 +68F + 8 +0 + 62 + 0 + 10 +7148.4375 + 20 +4911.987816 + 30 +0.0 + 11 +7164.0625 + 21 +4911.987816 + 31 +0.0 + 0 +LINE + 5 +690 + 8 +0 + 62 + 0 + 10 +7126.991073 + 20 +4925.519463 + 30 +0.0 + 11 +7140.625 + 21 +4925.519463 + 31 +0.0 + 0 +LINE + 5 +691 + 8 +0 + 62 + 0 + 10 +7171.875 + 20 +4925.519463 + 30 +0.0 + 11 +7187.5 + 21 +4925.519463 + 31 +0.0 + 0 +LINE + 5 +692 + 8 +0 + 62 + 0 + 10 +7148.4375 + 20 +4939.051109 + 30 +0.0 + 11 +7164.0625 + 21 +4939.051109 + 31 +0.0 + 0 +LINE + 5 +693 + 8 +0 + 62 + 0 + 10 +7126.991073 + 20 +4952.582756 + 30 +0.0 + 11 +7140.625 + 21 +4952.582756 + 31 +0.0 + 0 +LINE + 5 +694 + 8 +0 + 62 + 0 + 10 +7171.875 + 20 +4952.582756 + 30 +0.0 + 11 +7187.5 + 21 +4952.582756 + 31 +0.0 + 0 +LINE + 5 +695 + 8 +0 + 62 + 0 + 10 +7148.4375 + 20 +4857.861228 + 30 +0.0 + 11 +7164.0625 + 21 +4857.861228 + 31 +0.0 + 0 +LINE + 5 +696 + 8 +0 + 62 + 0 + 10 +7126.991073 + 20 +4844.329581 + 30 +0.0 + 11 +7140.625 + 21 +4844.329581 + 31 +0.0 + 0 +LINE + 5 +697 + 8 +0 + 62 + 0 + 10 +7171.875 + 20 +4844.329581 + 30 +0.0 + 11 +7187.5 + 21 +4844.329581 + 31 +0.0 + 0 +LINE + 5 +698 + 8 +0 + 62 + 0 + 10 +7148.4375 + 20 +4830.797934 + 30 +0.0 + 11 +7164.0625 + 21 +4830.797934 + 31 +0.0 + 0 +LINE + 5 +699 + 8 +0 + 62 + 0 + 10 +7126.991073 + 20 +4817.266288 + 30 +0.0 + 11 +7140.625 + 21 +4817.266288 + 31 +0.0 + 0 +LINE + 5 +69A + 8 +0 + 62 + 0 + 10 +7171.875 + 20 +4817.266288 + 30 +0.0 + 11 +7187.5 + 21 +4817.266288 + 31 +0.0 + 0 +LINE + 5 +69B + 8 +0 + 62 + 0 + 10 +7148.4375 + 20 +4803.734641 + 30 +0.0 + 11 +7164.0625 + 21 +4803.734641 + 31 +0.0 + 0 +LINE + 5 +69C + 8 +0 + 62 + 0 + 10 +7190.160691 + 20 +4812.657781 + 30 +0.0 + 11 +7187.499967 + 21 +4817.26629 + 31 +0.0 + 0 +LINE + 5 +69D + 8 +0 + 62 + 0 + 10 +7171.874967 + 20 +4844.329584 + 30 +0.0 + 11 +7164.062467 + 21 +4857.86123 + 31 +0.0 + 0 +LINE + 5 +69E + 8 +0 + 62 + 0 + 10 +7148.437467 + 20 +4884.924524 + 30 +0.0 + 11 +7140.624967 + 21 +4898.456171 + 31 +0.0 + 0 +LINE + 5 +69F + 8 +0 + 62 + 0 + 10 +7171.874967 + 20 +4817.26629 + 30 +0.0 + 11 +7164.062467 + 21 +4830.797937 + 31 +0.0 + 0 +LINE + 5 +6A0 + 8 +0 + 62 + 0 + 10 +7148.437467 + 20 +4857.861231 + 30 +0.0 + 11 +7140.624967 + 21 +4871.392877 + 31 +0.0 + 0 +LINE + 5 +6A1 + 8 +0 + 62 + 0 + 10 +7169.105416 + 20 +4795.0 + 30 +0.0 + 11 +7164.062467 + 21 +4803.734643 + 31 +0.0 + 0 +LINE + 5 +6A2 + 8 +0 + 62 + 0 + 10 +7148.437467 + 20 +4830.797937 + 30 +0.0 + 11 +7140.624967 + 21 +4844.329584 + 31 +0.0 + 0 +LINE + 5 +6A3 + 8 +0 + 62 + 0 + 10 +7148.437467 + 20 +4803.734643 + 30 +0.0 + 11 +7140.624967 + 21 +4817.26629 + 31 +0.0 + 0 +LINE + 5 +6A4 + 8 +0 + 62 + 0 + 10 +7190.403153 + 20 +4839.301118 + 30 +0.0 + 11 +7187.499967 + 21 +4844.329584 + 31 +0.0 + 0 +LINE + 5 +6A5 + 8 +0 + 62 + 0 + 10 +7171.874967 + 20 +4871.392877 + 30 +0.0 + 11 +7164.062467 + 21 +4884.924524 + 31 +0.0 + 0 +LINE + 5 +6A6 + 8 +0 + 62 + 0 + 10 +7148.437467 + 20 +4911.987818 + 30 +0.0 + 11 +7140.624967 + 21 +4925.519465 + 31 +0.0 + 0 +LINE + 5 +6A7 + 8 +0 + 62 + 0 + 10 +7190.645615 + 20 +4865.944455 + 30 +0.0 + 11 +7187.499967 + 21 +4871.392877 + 31 +0.0 + 0 +LINE + 5 +6A8 + 8 +0 + 62 + 0 + 10 +7171.874967 + 20 +4898.456171 + 30 +0.0 + 11 +7164.062467 + 21 +4911.987818 + 31 +0.0 + 0 +LINE + 5 +6A9 + 8 +0 + 62 + 0 + 10 +7148.437467 + 20 +4939.051112 + 30 +0.0 + 11 +7140.624967 + 21 +4952.582759 + 31 +0.0 + 0 +LINE + 5 +6AA + 8 +0 + 62 + 0 + 10 +7190.888077 + 20 +4892.587792 + 30 +0.0 + 11 +7187.499967 + 21 +4898.456171 + 31 +0.0 + 0 +LINE + 5 +6AB + 8 +0 + 62 + 0 + 10 +7171.874967 + 20 +4925.519465 + 30 +0.0 + 11 +7164.062467 + 21 +4939.051112 + 31 +0.0 + 0 +LINE + 5 +6AC + 8 +0 + 62 + 0 + 10 +7191.130539 + 20 +4919.23113 + 30 +0.0 + 11 +7187.499967 + 21 +4925.519465 + 31 +0.0 + 0 +LINE + 5 +6AD + 8 +0 + 62 + 0 + 10 +7171.874967 + 20 +4952.582759 + 30 +0.0 + 11 +7167.80649 + 21 +4959.629568 + 31 +0.0 + 0 +LINE + 5 +6AE + 8 +0 + 62 + 0 + 10 +7191.373001 + 20 +4945.874467 + 30 +0.0 + 11 +7187.499967 + 21 +4952.582759 + 31 +0.0 + 0 +LINE + 5 +6AF + 8 +0 + 62 + 0 + 10 +7140.624986 + 20 +4871.392904 + 30 +0.0 + 11 +7148.437486 + 21 +4884.924551 + 31 +0.0 + 0 +LINE + 5 +6B0 + 8 +0 + 62 + 0 + 10 +7164.062486 + 20 +4911.987845 + 30 +0.0 + 11 +7171.874986 + 21 +4925.519492 + 31 +0.0 + 0 +LINE + 5 +6B1 + 8 +0 + 62 + 0 + 10 +7187.499986 + 20 +4952.582786 + 30 +0.0 + 11 +7191.497051 + 21 +4959.505907 + 31 +0.0 + 0 +LINE + 5 +6B2 + 8 +0 + 62 + 0 + 10 +7140.624986 + 20 +4898.456198 + 30 +0.0 + 11 +7148.437486 + 21 +4911.987845 + 31 +0.0 + 0 +LINE + 5 +6B3 + 8 +0 + 62 + 0 + 10 +7164.062486 + 20 +4939.051139 + 30 +0.0 + 11 +7171.874986 + 21 +4952.582786 + 31 +0.0 + 0 +LINE + 5 +6B4 + 8 +0 + 62 + 0 + 10 +7140.624986 + 20 +4925.519492 + 30 +0.0 + 11 +7148.437486 + 21 +4939.051139 + 31 +0.0 + 0 +LINE + 5 +6B5 + 8 +0 + 62 + 0 + 10 +7140.624986 + 20 +4952.582786 + 30 +0.0 + 11 +7144.693448 + 21 +4959.629568 + 31 +0.0 + 0 +LINE + 5 +6B6 + 8 +0 + 62 + 0 + 10 +7140.624986 + 20 +4844.329611 + 30 +0.0 + 11 +7148.437486 + 21 +4857.861258 + 31 +0.0 + 0 +LINE + 5 +6B7 + 8 +0 + 62 + 0 + 10 +7164.062486 + 20 +4884.924551 + 30 +0.0 + 11 +7171.874986 + 21 +4898.456198 + 31 +0.0 + 0 +LINE + 5 +6B8 + 8 +0 + 62 + 0 + 10 +7187.499986 + 20 +4925.519492 + 30 +0.0 + 11 +7191.246824 + 21 +4932.009206 + 31 +0.0 + 0 +LINE + 5 +6B9 + 8 +0 + 62 + 0 + 10 +7140.624986 + 20 +4817.266317 + 30 +0.0 + 11 +7148.437486 + 21 +4830.797964 + 31 +0.0 + 0 +LINE + 5 +6BA + 8 +0 + 62 + 0 + 10 +7164.062486 + 20 +4857.861258 + 30 +0.0 + 11 +7171.874986 + 21 +4871.392905 + 31 +0.0 + 0 +LINE + 5 +6BB + 8 +0 + 62 + 0 + 10 +7187.499986 + 20 +4898.456198 + 30 +0.0 + 11 +7190.996596 + 21 +4904.512504 + 31 +0.0 + 0 +LINE + 5 +6BC + 8 +0 + 62 + 0 + 10 +7143.394522 + 20 +4795.0 + 30 +0.0 + 11 +7148.437486 + 21 +4803.73467 + 31 +0.0 + 0 +LINE + 5 +6BD + 8 +0 + 62 + 0 + 10 +7164.062486 + 20 +4830.797964 + 30 +0.0 + 11 +7171.874986 + 21 +4844.329611 + 31 +0.0 + 0 +LINE + 5 +6BE + 8 +0 + 62 + 0 + 10 +7187.499986 + 20 +4871.392905 + 30 +0.0 + 11 +7190.746368 + 21 +4877.015803 + 31 +0.0 + 0 +LINE + 5 +6BF + 8 +0 + 62 + 0 + 10 +7164.062486 + 20 +4803.73467 + 30 +0.0 + 11 +7171.874986 + 21 +4817.266317 + 31 +0.0 + 0 +LINE + 5 +6C0 + 8 +0 + 62 + 0 + 10 +7187.499986 + 20 +4844.329611 + 30 +0.0 + 11 +7190.49614 + 21 +4849.519102 + 31 +0.0 + 0 +LINE + 5 +6C1 + 8 +0 + 62 + 0 + 10 +7187.499986 + 20 +4817.266317 + 30 +0.0 + 11 +7190.245912 + 21 +4822.0224 + 31 +0.0 + 0 +ENDBLK + 5 +6C2 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X32 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X32 + 1 + + 0 +LINE + 5 +6C4 + 8 +0 + 62 + 0 + 10 +7162.5 + 20 +4698.187795 + 30 +0.0 + 11 +7187.5 + 21 +4698.187795 + 31 +0.0 + 0 +LINE + 5 +6C5 + 8 +0 + 62 + 0 + 10 +7237.5 + 20 +4698.187795 + 30 +0.0 + 11 +7262.5 + 21 +4698.187795 + 31 +0.0 + 0 +LINE + 5 +6C6 + 8 +0 + 62 + 0 + 10 +7312.5 + 20 +4698.187795 + 30 +0.0 + 11 +7337.5 + 21 +4698.187795 + 31 +0.0 + 0 +LINE + 5 +6C7 + 8 +0 + 62 + 0 + 10 +7387.5 + 20 +4698.187795 + 30 +0.0 + 11 +7412.5 + 21 +4698.187795 + 31 +0.0 + 0 +LINE + 5 +6C8 + 8 +0 + 62 + 0 + 10 +7462.5 + 20 +4698.187795 + 30 +0.0 + 11 +7487.5 + 21 +4698.187795 + 31 +0.0 + 0 +LINE + 5 +6C9 + 8 +0 + 62 + 0 + 10 +7537.5 + 20 +4698.187795 + 30 +0.0 + 11 +7562.5 + 21 +4698.187795 + 31 +0.0 + 0 +LINE + 5 +6CA + 8 +0 + 62 + 0 + 10 +7612.5 + 20 +4698.187795 + 30 +0.0 + 11 +7637.5 + 21 +4698.187795 + 31 +0.0 + 0 +LINE + 5 +6CB + 8 +0 + 62 + 0 + 10 +7687.5 + 20 +4698.187795 + 30 +0.0 + 11 +7712.5 + 21 +4698.187795 + 31 +0.0 + 0 +LINE + 5 +6CC + 8 +0 + 62 + 0 + 10 +7762.5 + 20 +4698.187795 + 30 +0.0 + 11 +7787.5 + 21 +4698.187795 + 31 +0.0 + 0 +LINE + 5 +6CD + 8 +0 + 62 + 0 + 10 +7837.5 + 20 +4698.187795 + 30 +0.0 + 11 +7862.5 + 21 +4698.187795 + 31 +0.0 + 0 +LINE + 5 +6CE + 8 +0 + 62 + 0 + 10 +7912.5 + 20 +4698.187795 + 30 +0.0 + 11 +7937.5 + 21 +4698.187795 + 31 +0.0 + 0 +LINE + 5 +6CF + 8 +0 + 62 + 0 + 10 +7987.5 + 20 +4698.187795 + 30 +0.0 + 11 +8012.5 + 21 +4698.187795 + 31 +0.0 + 0 +LINE + 5 +6D0 + 8 +0 + 62 + 0 + 10 +8062.5 + 20 +4698.187795 + 30 +0.0 + 11 +8087.5 + 21 +4698.187795 + 31 +0.0 + 0 +LINE + 5 +6D1 + 8 +0 + 62 + 0 + 10 +8137.5 + 20 +4698.187795 + 30 +0.0 + 11 +8162.5 + 21 +4698.187795 + 31 +0.0 + 0 +LINE + 5 +6D2 + 8 +0 + 62 + 0 + 10 +8212.5 + 20 +4698.187795 + 30 +0.0 + 11 +8237.5 + 21 +4698.187795 + 31 +0.0 + 0 +LINE + 5 +6D3 + 8 +0 + 62 + 0 + 10 +8287.5 + 20 +4698.187795 + 30 +0.0 + 11 +8312.5 + 21 +4698.187795 + 31 +0.0 + 0 +LINE + 5 +6D4 + 8 +0 + 62 + 0 + 10 +8362.5 + 20 +4698.187795 + 30 +0.0 + 11 +8387.5 + 21 +4698.187795 + 31 +0.0 + 0 +LINE + 5 +6D5 + 8 +0 + 62 + 0 + 10 +8437.5 + 20 +4698.187795 + 30 +0.0 + 11 +8462.5 + 21 +4698.187795 + 31 +0.0 + 0 +LINE + 5 +6D6 + 8 +0 + 62 + 0 + 10 +8512.5 + 20 +4698.187795 + 30 +0.0 + 11 +8537.5 + 21 +4698.187795 + 31 +0.0 + 0 +LINE + 5 +6D7 + 8 +0 + 62 + 0 + 10 +7200.0 + 20 +4719.83843 + 30 +0.0 + 11 +7225.0 + 21 +4719.83843 + 31 +0.0 + 0 +LINE + 5 +6D8 + 8 +0 + 62 + 0 + 10 +7275.0 + 20 +4719.83843 + 30 +0.0 + 11 +7300.0 + 21 +4719.83843 + 31 +0.0 + 0 +LINE + 5 +6D9 + 8 +0 + 62 + 0 + 10 +7350.0 + 20 +4719.83843 + 30 +0.0 + 11 +7375.0 + 21 +4719.83843 + 31 +0.0 + 0 +LINE + 5 +6DA + 8 +0 + 62 + 0 + 10 +7425.0 + 20 +4719.83843 + 30 +0.0 + 11 +7450.0 + 21 +4719.83843 + 31 +0.0 + 0 +LINE + 5 +6DB + 8 +0 + 62 + 0 + 10 +7500.0 + 20 +4719.83843 + 30 +0.0 + 11 +7525.0 + 21 +4719.83843 + 31 +0.0 + 0 +LINE + 5 +6DC + 8 +0 + 62 + 0 + 10 +7575.0 + 20 +4719.83843 + 30 +0.0 + 11 +7600.0 + 21 +4719.83843 + 31 +0.0 + 0 +LINE + 5 +6DD + 8 +0 + 62 + 0 + 10 +7650.0 + 20 +4719.83843 + 30 +0.0 + 11 +7675.0 + 21 +4719.83843 + 31 +0.0 + 0 +LINE + 5 +6DE + 8 +0 + 62 + 0 + 10 +7725.0 + 20 +4719.83843 + 30 +0.0 + 11 +7750.0 + 21 +4719.83843 + 31 +0.0 + 0 +LINE + 5 +6DF + 8 +0 + 62 + 0 + 10 +7800.0 + 20 +4719.83843 + 30 +0.0 + 11 +7825.0 + 21 +4719.83843 + 31 +0.0 + 0 +LINE + 5 +6E0 + 8 +0 + 62 + 0 + 10 +7875.0 + 20 +4719.83843 + 30 +0.0 + 11 +7900.0 + 21 +4719.83843 + 31 +0.0 + 0 +LINE + 5 +6E1 + 8 +0 + 62 + 0 + 10 +7950.0 + 20 +4719.83843 + 30 +0.0 + 11 +7975.0 + 21 +4719.83843 + 31 +0.0 + 0 +LINE + 5 +6E2 + 8 +0 + 62 + 0 + 10 +8025.0 + 20 +4719.83843 + 30 +0.0 + 11 +8050.0 + 21 +4719.83843 + 31 +0.0 + 0 +LINE + 5 +6E3 + 8 +0 + 62 + 0 + 10 +8100.0 + 20 +4719.83843 + 30 +0.0 + 11 +8125.0 + 21 +4719.83843 + 31 +0.0 + 0 +LINE + 5 +6E4 + 8 +0 + 62 + 0 + 10 +8175.0 + 20 +4719.83843 + 30 +0.0 + 11 +8200.0 + 21 +4719.83843 + 31 +0.0 + 0 +LINE + 5 +6E5 + 8 +0 + 62 + 0 + 10 +8250.0 + 20 +4719.83843 + 30 +0.0 + 11 +8275.0 + 21 +4719.83843 + 31 +0.0 + 0 +LINE + 5 +6E6 + 8 +0 + 62 + 0 + 10 +8325.0 + 20 +4719.83843 + 30 +0.0 + 11 +8350.0 + 21 +4719.83843 + 31 +0.0 + 0 +LINE + 5 +6E7 + 8 +0 + 62 + 0 + 10 +8400.0 + 20 +4719.83843 + 30 +0.0 + 11 +8425.0 + 21 +4719.83843 + 31 +0.0 + 0 +LINE + 5 +6E8 + 8 +0 + 62 + 0 + 10 +8475.0 + 20 +4719.83843 + 30 +0.0 + 11 +8500.0 + 21 +4719.83843 + 31 +0.0 + 0 +LINE + 5 +6E9 + 8 +0 + 62 + 0 + 10 +8550.0 + 20 +4719.83843 + 30 +0.0 + 11 +8565.0 + 21 +4719.83843 + 31 +0.0 + 0 +LINE + 5 +6EA + 8 +0 + 62 + 0 + 10 +7162.5 + 20 +4741.489065 + 30 +0.0 + 11 +7187.5 + 21 +4741.489065 + 31 +0.0 + 0 +LINE + 5 +6EB + 8 +0 + 62 + 0 + 10 +7237.5 + 20 +4741.489065 + 30 +0.0 + 11 +7262.5 + 21 +4741.489065 + 31 +0.0 + 0 +LINE + 5 +6EC + 8 +0 + 62 + 0 + 10 +7312.5 + 20 +4741.489065 + 30 +0.0 + 11 +7337.5 + 21 +4741.489065 + 31 +0.0 + 0 +LINE + 5 +6ED + 8 +0 + 62 + 0 + 10 +7387.5 + 20 +4741.489065 + 30 +0.0 + 11 +7412.5 + 21 +4741.489065 + 31 +0.0 + 0 +LINE + 5 +6EE + 8 +0 + 62 + 0 + 10 +7462.5 + 20 +4741.489065 + 30 +0.0 + 11 +7487.5 + 21 +4741.489065 + 31 +0.0 + 0 +LINE + 5 +6EF + 8 +0 + 62 + 0 + 10 +7537.5 + 20 +4741.489065 + 30 +0.0 + 11 +7562.5 + 21 +4741.489065 + 31 +0.0 + 0 +LINE + 5 +6F0 + 8 +0 + 62 + 0 + 10 +7612.5 + 20 +4741.489065 + 30 +0.0 + 11 +7637.5 + 21 +4741.489065 + 31 +0.0 + 0 +LINE + 5 +6F1 + 8 +0 + 62 + 0 + 10 +7687.5 + 20 +4741.489065 + 30 +0.0 + 11 +7712.5 + 21 +4741.489065 + 31 +0.0 + 0 +LINE + 5 +6F2 + 8 +0 + 62 + 0 + 10 +7762.5 + 20 +4741.489065 + 30 +0.0 + 11 +7787.5 + 21 +4741.489065 + 31 +0.0 + 0 +LINE + 5 +6F3 + 8 +0 + 62 + 0 + 10 +7837.5 + 20 +4741.489065 + 30 +0.0 + 11 +7862.5 + 21 +4741.489065 + 31 +0.0 + 0 +LINE + 5 +6F4 + 8 +0 + 62 + 0 + 10 +7912.5 + 20 +4741.489065 + 30 +0.0 + 11 +7937.5 + 21 +4741.489065 + 31 +0.0 + 0 +LINE + 5 +6F5 + 8 +0 + 62 + 0 + 10 +7987.5 + 20 +4741.489065 + 30 +0.0 + 11 +8012.5 + 21 +4741.489065 + 31 +0.0 + 0 +LINE + 5 +6F6 + 8 +0 + 62 + 0 + 10 +8062.5 + 20 +4741.489065 + 30 +0.0 + 11 +8087.5 + 21 +4741.489065 + 31 +0.0 + 0 +LINE + 5 +6F7 + 8 +0 + 62 + 0 + 10 +8137.5 + 20 +4741.489065 + 30 +0.0 + 11 +8162.5 + 21 +4741.489065 + 31 +0.0 + 0 +LINE + 5 +6F8 + 8 +0 + 62 + 0 + 10 +8212.5 + 20 +4741.489065 + 30 +0.0 + 11 +8237.5 + 21 +4741.489065 + 31 +0.0 + 0 +LINE + 5 +6F9 + 8 +0 + 62 + 0 + 10 +8287.5 + 20 +4741.489065 + 30 +0.0 + 11 +8312.5 + 21 +4741.489065 + 31 +0.0 + 0 +LINE + 5 +6FA + 8 +0 + 62 + 0 + 10 +8362.5 + 20 +4741.489065 + 30 +0.0 + 11 +8387.5 + 21 +4741.489065 + 31 +0.0 + 0 +LINE + 5 +6FB + 8 +0 + 62 + 0 + 10 +8437.5 + 20 +4741.489065 + 30 +0.0 + 11 +8462.5 + 21 +4741.489065 + 31 +0.0 + 0 +LINE + 5 +6FC + 8 +0 + 62 + 0 + 10 +8512.5 + 20 +4741.489065 + 30 +0.0 + 11 +8537.5 + 21 +4741.489065 + 31 +0.0 + 0 +LINE + 5 +6FD + 8 +0 + 62 + 0 + 10 +7200.0 + 20 +4676.53716 + 30 +0.0 + 11 +7225.0 + 21 +4676.53716 + 31 +0.0 + 0 +LINE + 5 +6FE + 8 +0 + 62 + 0 + 10 +7275.0 + 20 +4676.53716 + 30 +0.0 + 11 +7300.0 + 21 +4676.53716 + 31 +0.0 + 0 +LINE + 5 +6FF + 8 +0 + 62 + 0 + 10 +7350.0 + 20 +4676.53716 + 30 +0.0 + 11 +7375.0 + 21 +4676.53716 + 31 +0.0 + 0 +LINE + 5 +700 + 8 +0 + 62 + 0 + 10 +7425.0 + 20 +4676.53716 + 30 +0.0 + 11 +7450.0 + 21 +4676.53716 + 31 +0.0 + 0 +LINE + 5 +701 + 8 +0 + 62 + 0 + 10 +7500.0 + 20 +4676.53716 + 30 +0.0 + 11 +7525.0 + 21 +4676.53716 + 31 +0.0 + 0 +LINE + 5 +702 + 8 +0 + 62 + 0 + 10 +7575.0 + 20 +4676.53716 + 30 +0.0 + 11 +7600.0 + 21 +4676.53716 + 31 +0.0 + 0 +LINE + 5 +703 + 8 +0 + 62 + 0 + 10 +7650.0 + 20 +4676.53716 + 30 +0.0 + 11 +7675.0 + 21 +4676.53716 + 31 +0.0 + 0 +LINE + 5 +704 + 8 +0 + 62 + 0 + 10 +7725.0 + 20 +4676.53716 + 30 +0.0 + 11 +7750.0 + 21 +4676.53716 + 31 +0.0 + 0 +LINE + 5 +705 + 8 +0 + 62 + 0 + 10 +7800.0 + 20 +4676.53716 + 30 +0.0 + 11 +7825.0 + 21 +4676.53716 + 31 +0.0 + 0 +LINE + 5 +706 + 8 +0 + 62 + 0 + 10 +7875.0 + 20 +4676.53716 + 30 +0.0 + 11 +7900.0 + 21 +4676.53716 + 31 +0.0 + 0 +LINE + 5 +707 + 8 +0 + 62 + 0 + 10 +7950.0 + 20 +4676.53716 + 30 +0.0 + 11 +7975.0 + 21 +4676.53716 + 31 +0.0 + 0 +LINE + 5 +708 + 8 +0 + 62 + 0 + 10 +8025.0 + 20 +4676.53716 + 30 +0.0 + 11 +8050.0 + 21 +4676.53716 + 31 +0.0 + 0 +LINE + 5 +709 + 8 +0 + 62 + 0 + 10 +8100.0 + 20 +4676.53716 + 30 +0.0 + 11 +8125.0 + 21 +4676.53716 + 31 +0.0 + 0 +LINE + 5 +70A + 8 +0 + 62 + 0 + 10 +8175.0 + 20 +4676.53716 + 30 +0.0 + 11 +8200.0 + 21 +4676.53716 + 31 +0.0 + 0 +LINE + 5 +70B + 8 +0 + 62 + 0 + 10 +8250.0 + 20 +4676.53716 + 30 +0.0 + 11 +8275.0 + 21 +4676.53716 + 31 +0.0 + 0 +LINE + 5 +70C + 8 +0 + 62 + 0 + 10 +8325.0 + 20 +4676.53716 + 30 +0.0 + 11 +8350.0 + 21 +4676.53716 + 31 +0.0 + 0 +LINE + 5 +70D + 8 +0 + 62 + 0 + 10 +8400.0 + 20 +4676.53716 + 30 +0.0 + 11 +8425.0 + 21 +4676.53716 + 31 +0.0 + 0 +LINE + 5 +70E + 8 +0 + 62 + 0 + 10 +8475.0 + 20 +4676.53716 + 30 +0.0 + 11 +8500.0 + 21 +4676.53716 + 31 +0.0 + 0 +LINE + 5 +70F + 8 +0 + 62 + 0 + 10 +8550.0 + 20 +4676.53716 + 30 +0.0 + 11 +8565.0 + 21 +4676.53716 + 31 +0.0 + 0 +LINE + 5 +710 + 8 +0 + 62 + 0 + 10 +7874.999965 + 20 +4676.53716 + 30 +0.0 + 11 +7862.499965 + 21 +4698.187796 + 31 +0.0 + 0 +LINE + 5 +711 + 8 +0 + 62 + 0 + 10 +7837.499965 + 20 +4741.489066 + 30 +0.0 + 11 +7829.699424 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +712 + 8 +0 + 62 + 0 + 10 +7837.499965 + 20 +4698.187796 + 30 +0.0 + 11 +7824.999965 + 21 +4719.838431 + 31 +0.0 + 0 +LINE + 5 +713 + 8 +0 + 62 + 0 + 10 +7834.5477 + 20 +4660.0 + 30 +0.0 + 11 +7824.999966 + 21 +4676.537161 + 31 +0.0 + 0 +LINE + 5 +714 + 8 +0 + 62 + 0 + 10 +7799.999966 + 20 +4719.838431 + 30 +0.0 + 11 +7787.499966 + 21 +4741.489066 + 31 +0.0 + 0 +LINE + 5 +715 + 8 +0 + 62 + 0 + 10 +7799.999966 + 20 +4676.537161 + 30 +0.0 + 11 +7787.499966 + 21 +4698.187796 + 31 +0.0 + 0 +LINE + 5 +716 + 8 +0 + 62 + 0 + 10 +7762.499966 + 20 +4741.489066 + 30 +0.0 + 11 +7754.699424 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +717 + 8 +0 + 62 + 0 + 10 +7762.499966 + 20 +4698.187796 + 30 +0.0 + 11 +7749.999966 + 21 +4719.838431 + 31 +0.0 + 0 +LINE + 5 +718 + 8 +0 + 62 + 0 + 10 +7759.5477 + 20 +4660.0 + 30 +0.0 + 11 +7749.999966 + 21 +4676.537161 + 31 +0.0 + 0 +LINE + 5 +719 + 8 +0 + 62 + 0 + 10 +7724.999966 + 20 +4719.838431 + 30 +0.0 + 11 +7712.499966 + 21 +4741.489066 + 31 +0.0 + 0 +LINE + 5 +71A + 8 +0 + 62 + 0 + 10 +7724.999966 + 20 +4676.537161 + 30 +0.0 + 11 +7712.499966 + 21 +4698.187796 + 31 +0.0 + 0 +LINE + 5 +71B + 8 +0 + 62 + 0 + 10 +7687.499966 + 20 +4741.489066 + 30 +0.0 + 11 +7679.699424 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +71C + 8 +0 + 62 + 0 + 10 +7687.499966 + 20 +4698.187796 + 30 +0.0 + 11 +7674.999966 + 21 +4719.838431 + 31 +0.0 + 0 +LINE + 5 +71D + 8 +0 + 62 + 0 + 10 +7684.5477 + 20 +4660.0 + 30 +0.0 + 11 +7674.999966 + 21 +4676.537161 + 31 +0.0 + 0 +LINE + 5 +71E + 8 +0 + 62 + 0 + 10 +7649.999966 + 20 +4719.838431 + 30 +0.0 + 11 +7637.499966 + 21 +4741.489066 + 31 +0.0 + 0 +LINE + 5 +71F + 8 +0 + 62 + 0 + 10 +7649.999966 + 20 +4676.537161 + 30 +0.0 + 11 +7637.499966 + 21 +4698.187796 + 31 +0.0 + 0 +LINE + 5 +720 + 8 +0 + 62 + 0 + 10 +7612.499966 + 20 +4741.489066 + 30 +0.0 + 11 +7604.699425 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +721 + 8 +0 + 62 + 0 + 10 +7612.499966 + 20 +4698.187796 + 30 +0.0 + 11 +7599.999966 + 21 +4719.838431 + 31 +0.0 + 0 +LINE + 5 +722 + 8 +0 + 62 + 0 + 10 +7609.547701 + 20 +4660.0 + 30 +0.0 + 11 +7599.999966 + 21 +4676.537161 + 31 +0.0 + 0 +LINE + 5 +723 + 8 +0 + 62 + 0 + 10 +7574.999966 + 20 +4719.838431 + 30 +0.0 + 11 +7562.499966 + 21 +4741.489066 + 31 +0.0 + 0 +LINE + 5 +724 + 8 +0 + 62 + 0 + 10 +7574.999966 + 20 +4676.537161 + 30 +0.0 + 11 +7562.499966 + 21 +4698.187796 + 31 +0.0 + 0 +LINE + 5 +725 + 8 +0 + 62 + 0 + 10 +7537.499966 + 20 +4741.489066 + 30 +0.0 + 11 +7529.699425 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +726 + 8 +0 + 62 + 0 + 10 +7537.499966 + 20 +4698.187796 + 30 +0.0 + 11 +7524.999966 + 21 +4719.838431 + 31 +0.0 + 0 +LINE + 5 +727 + 8 +0 + 62 + 0 + 10 +7534.547701 + 20 +4660.0 + 30 +0.0 + 11 +7524.999966 + 21 +4676.537161 + 31 +0.0 + 0 +LINE + 5 +728 + 8 +0 + 62 + 0 + 10 +7499.999966 + 20 +4719.838431 + 30 +0.0 + 11 +7487.499966 + 21 +4741.489066 + 31 +0.0 + 0 +LINE + 5 +729 + 8 +0 + 62 + 0 + 10 +7499.999967 + 20 +4676.537161 + 30 +0.0 + 11 +7487.499967 + 21 +4698.187796 + 31 +0.0 + 0 +LINE + 5 +72A + 8 +0 + 62 + 0 + 10 +7462.499967 + 20 +4741.489066 + 30 +0.0 + 11 +7454.699425 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +72B + 8 +0 + 62 + 0 + 10 +7462.499967 + 20 +4698.187796 + 30 +0.0 + 11 +7449.999967 + 21 +4719.838431 + 31 +0.0 + 0 +LINE + 5 +72C + 8 +0 + 62 + 0 + 10 +7459.547701 + 20 +4660.0 + 30 +0.0 + 11 +7449.999967 + 21 +4676.537161 + 31 +0.0 + 0 +LINE + 5 +72D + 8 +0 + 62 + 0 + 10 +7424.999967 + 20 +4719.838431 + 30 +0.0 + 11 +7412.499967 + 21 +4741.489067 + 31 +0.0 + 0 +LINE + 5 +72E + 8 +0 + 62 + 0 + 10 +7424.999967 + 20 +4676.537161 + 30 +0.0 + 11 +7412.499967 + 21 +4698.187796 + 31 +0.0 + 0 +LINE + 5 +72F + 8 +0 + 62 + 0 + 10 +7387.499967 + 20 +4741.489067 + 30 +0.0 + 11 +7379.699426 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +730 + 8 +0 + 62 + 0 + 10 +7387.499967 + 20 +4698.187796 + 30 +0.0 + 11 +7374.999967 + 21 +4719.838432 + 31 +0.0 + 0 +LINE + 5 +731 + 8 +0 + 62 + 0 + 10 +7384.547702 + 20 +4660.0 + 30 +0.0 + 11 +7374.999967 + 21 +4676.537161 + 31 +0.0 + 0 +LINE + 5 +732 + 8 +0 + 62 + 0 + 10 +7349.999967 + 20 +4719.838432 + 30 +0.0 + 11 +7337.499967 + 21 +4741.489067 + 31 +0.0 + 0 +LINE + 5 +733 + 8 +0 + 62 + 0 + 10 +7349.999967 + 20 +4676.537161 + 30 +0.0 + 11 +7337.499967 + 21 +4698.187797 + 31 +0.0 + 0 +LINE + 5 +734 + 8 +0 + 62 + 0 + 10 +7312.499967 + 20 +4741.489067 + 30 +0.0 + 11 +7304.699426 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +735 + 8 +0 + 62 + 0 + 10 +7312.499967 + 20 +4698.187797 + 30 +0.0 + 11 +7299.999967 + 21 +4719.838432 + 31 +0.0 + 0 +LINE + 5 +736 + 8 +0 + 62 + 0 + 10 +7309.547702 + 20 +4660.0 + 30 +0.0 + 11 +7299.999967 + 21 +4676.537162 + 31 +0.0 + 0 +LINE + 5 +737 + 8 +0 + 62 + 0 + 10 +7274.999967 + 20 +4719.838432 + 30 +0.0 + 11 +7262.499967 + 21 +4741.489067 + 31 +0.0 + 0 +LINE + 5 +738 + 8 +0 + 62 + 0 + 10 +7274.999967 + 20 +4676.537162 + 30 +0.0 + 11 +7262.499967 + 21 +4698.187797 + 31 +0.0 + 0 +LINE + 5 +739 + 8 +0 + 62 + 0 + 10 +7237.499967 + 20 +4741.489067 + 30 +0.0 + 11 +7229.699426 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +73A + 8 +0 + 62 + 0 + 10 +7237.499967 + 20 +4698.187797 + 30 +0.0 + 11 +7224.999967 + 21 +4719.838432 + 31 +0.0 + 0 +LINE + 5 +73B + 8 +0 + 62 + 0 + 10 +7234.547702 + 20 +4660.0 + 30 +0.0 + 11 +7224.999967 + 21 +4676.537162 + 31 +0.0 + 0 +LINE + 5 +73C + 8 +0 + 62 + 0 + 10 +7199.999967 + 20 +4719.838432 + 30 +0.0 + 11 +7187.499967 + 21 +4741.489067 + 31 +0.0 + 0 +LINE + 5 +73D + 8 +0 + 62 + 0 + 10 +7199.999968 + 20 +4676.537162 + 30 +0.0 + 11 +7187.499968 + 21 +4698.187797 + 31 +0.0 + 0 +LINE + 5 +73E + 8 +0 + 62 + 0 + 10 +7162.499968 + 20 +4741.489067 + 30 +0.0 + 11 +7160.0 + 21 +4745.819138 + 31 +0.0 + 0 +LINE + 5 +73F + 8 +0 + 62 + 0 + 10 +7162.499968 + 20 +4698.187797 + 30 +0.0 + 11 +7160.0 + 21 +4702.517868 + 31 +0.0 + 0 +LINE + 5 +740 + 8 +0 + 62 + 0 + 10 +7909.547699 + 20 +4660.0 + 30 +0.0 + 11 +7899.999965 + 21 +4676.53716 + 31 +0.0 + 0 +LINE + 5 +741 + 8 +0 + 62 + 0 + 10 +7874.999965 + 20 +4719.838431 + 30 +0.0 + 11 +7862.499965 + 21 +4741.489066 + 31 +0.0 + 0 +LINE + 5 +742 + 8 +0 + 62 + 0 + 10 +7912.499965 + 20 +4698.187795 + 30 +0.0 + 11 +7899.999965 + 21 +4719.838431 + 31 +0.0 + 0 +LINE + 5 +743 + 8 +0 + 62 + 0 + 10 +7949.999965 + 20 +4676.53716 + 30 +0.0 + 11 +7937.499965 + 21 +4698.187795 + 31 +0.0 + 0 +LINE + 5 +744 + 8 +0 + 62 + 0 + 10 +7912.499965 + 20 +4741.489066 + 30 +0.0 + 11 +7904.699423 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +745 + 8 +0 + 62 + 0 + 10 +7984.547699 + 20 +4660.0 + 30 +0.0 + 11 +7974.999965 + 21 +4676.53716 + 31 +0.0 + 0 +LINE + 5 +746 + 8 +0 + 62 + 0 + 10 +7949.999965 + 20 +4719.83843 + 30 +0.0 + 11 +7937.499965 + 21 +4741.489066 + 31 +0.0 + 0 +LINE + 5 +747 + 8 +0 + 62 + 0 + 10 +7987.499965 + 20 +4698.187795 + 30 +0.0 + 11 +7974.999965 + 21 +4719.83843 + 31 +0.0 + 0 +LINE + 5 +748 + 8 +0 + 62 + 0 + 10 +8024.999965 + 20 +4676.53716 + 30 +0.0 + 11 +8012.499965 + 21 +4698.187795 + 31 +0.0 + 0 +LINE + 5 +749 + 8 +0 + 62 + 0 + 10 +7987.499965 + 20 +4741.489065 + 30 +0.0 + 11 +7979.699423 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +74A + 8 +0 + 62 + 0 + 10 +8059.547699 + 20 +4660.0 + 30 +0.0 + 11 +8049.999965 + 21 +4676.53716 + 31 +0.0 + 0 +LINE + 5 +74B + 8 +0 + 62 + 0 + 10 +8024.999965 + 20 +4719.83843 + 30 +0.0 + 11 +8012.499965 + 21 +4741.489065 + 31 +0.0 + 0 +LINE + 5 +74C + 8 +0 + 62 + 0 + 10 +8062.499965 + 20 +4698.187795 + 30 +0.0 + 11 +8049.999965 + 21 +4719.83843 + 31 +0.0 + 0 +LINE + 5 +74D + 8 +0 + 62 + 0 + 10 +8099.999965 + 20 +4676.53716 + 30 +0.0 + 11 +8087.499965 + 21 +4698.187795 + 31 +0.0 + 0 +LINE + 5 +74E + 8 +0 + 62 + 0 + 10 +8062.499965 + 20 +4741.489065 + 30 +0.0 + 11 +8054.699423 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +74F + 8 +0 + 62 + 0 + 10 +8134.547698 + 20 +4660.0 + 30 +0.0 + 11 +8124.999965 + 21 +4676.53716 + 31 +0.0 + 0 +LINE + 5 +750 + 8 +0 + 62 + 0 + 10 +8099.999965 + 20 +4719.83843 + 30 +0.0 + 11 +8087.499965 + 21 +4741.489065 + 31 +0.0 + 0 +LINE + 5 +751 + 8 +0 + 62 + 0 + 10 +8137.499964 + 20 +4698.187795 + 30 +0.0 + 11 +8124.999964 + 21 +4719.83843 + 31 +0.0 + 0 +LINE + 5 +752 + 8 +0 + 62 + 0 + 10 +8174.999964 + 20 +4676.53716 + 30 +0.0 + 11 +8162.499964 + 21 +4698.187795 + 31 +0.0 + 0 +LINE + 5 +753 + 8 +0 + 62 + 0 + 10 +8137.499964 + 20 +4741.489065 + 30 +0.0 + 11 +8129.699422 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +754 + 8 +0 + 62 + 0 + 10 +8209.547698 + 20 +4660.0 + 30 +0.0 + 11 +8199.999964 + 21 +4676.53716 + 31 +0.0 + 0 +LINE + 5 +755 + 8 +0 + 62 + 0 + 10 +8174.999964 + 20 +4719.83843 + 30 +0.0 + 11 +8162.499964 + 21 +4741.489065 + 31 +0.0 + 0 +LINE + 5 +756 + 8 +0 + 62 + 0 + 10 +8212.499964 + 20 +4698.187795 + 30 +0.0 + 11 +8199.999964 + 21 +4719.83843 + 31 +0.0 + 0 +LINE + 5 +757 + 8 +0 + 62 + 0 + 10 +8249.999964 + 20 +4676.53716 + 30 +0.0 + 11 +8237.499964 + 21 +4698.187795 + 31 +0.0 + 0 +LINE + 5 +758 + 8 +0 + 62 + 0 + 10 +8212.499964 + 20 +4741.489065 + 30 +0.0 + 11 +8204.699422 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +759 + 8 +0 + 62 + 0 + 10 +8284.547698 + 20 +4660.0 + 30 +0.0 + 11 +8274.999964 + 21 +4676.53716 + 31 +0.0 + 0 +LINE + 5 +75A + 8 +0 + 62 + 0 + 10 +8249.999964 + 20 +4719.83843 + 30 +0.0 + 11 +8237.499964 + 21 +4741.489065 + 31 +0.0 + 0 +LINE + 5 +75B + 8 +0 + 62 + 0 + 10 +8287.499964 + 20 +4698.187795 + 30 +0.0 + 11 +8274.999964 + 21 +4719.83843 + 31 +0.0 + 0 +LINE + 5 +75C + 8 +0 + 62 + 0 + 10 +8324.999964 + 20 +4676.53716 + 30 +0.0 + 11 +8312.499964 + 21 +4698.187795 + 31 +0.0 + 0 +LINE + 5 +75D + 8 +0 + 62 + 0 + 10 +8287.499964 + 20 +4741.489065 + 30 +0.0 + 11 +8279.699422 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +75E + 8 +0 + 62 + 0 + 10 +8359.547697 + 20 +4660.0 + 30 +0.0 + 11 +8349.999964 + 21 +4676.53716 + 31 +0.0 + 0 +LINE + 5 +75F + 8 +0 + 62 + 0 + 10 +8324.999964 + 20 +4719.83843 + 30 +0.0 + 11 +8312.499964 + 21 +4741.489065 + 31 +0.0 + 0 +LINE + 5 +760 + 8 +0 + 62 + 0 + 10 +8362.499964 + 20 +4698.187795 + 30 +0.0 + 11 +8349.999964 + 21 +4719.83843 + 31 +0.0 + 0 +LINE + 5 +761 + 8 +0 + 62 + 0 + 10 +8399.999964 + 20 +4676.537159 + 30 +0.0 + 11 +8387.499964 + 21 +4698.187795 + 31 +0.0 + 0 +LINE + 5 +762 + 8 +0 + 62 + 0 + 10 +8362.499964 + 20 +4741.489065 + 30 +0.0 + 11 +8354.699421 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +763 + 8 +0 + 62 + 0 + 10 +8434.547697 + 20 +4660.0 + 30 +0.0 + 11 +8424.999964 + 21 +4676.537159 + 31 +0.0 + 0 +LINE + 5 +764 + 8 +0 + 62 + 0 + 10 +8399.999964 + 20 +4719.83843 + 30 +0.0 + 11 +8387.499964 + 21 +4741.489065 + 31 +0.0 + 0 +LINE + 5 +765 + 8 +0 + 62 + 0 + 10 +8437.499963 + 20 +4698.187794 + 30 +0.0 + 11 +8424.999963 + 21 +4719.83843 + 31 +0.0 + 0 +LINE + 5 +766 + 8 +0 + 62 + 0 + 10 +8474.999963 + 20 +4676.537159 + 30 +0.0 + 11 +8462.499963 + 21 +4698.187794 + 31 +0.0 + 0 +LINE + 5 +767 + 8 +0 + 62 + 0 + 10 +8437.499963 + 20 +4741.489065 + 30 +0.0 + 11 +8429.699421 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +768 + 8 +0 + 62 + 0 + 10 +8509.547697 + 20 +4660.0 + 30 +0.0 + 11 +8499.999963 + 21 +4676.537159 + 31 +0.0 + 0 +LINE + 5 +769 + 8 +0 + 62 + 0 + 10 +8474.999963 + 20 +4719.838429 + 30 +0.0 + 11 +8462.499963 + 21 +4741.489065 + 31 +0.0 + 0 +LINE + 5 +76A + 8 +0 + 62 + 0 + 10 +8512.499963 + 20 +4698.187794 + 30 +0.0 + 11 +8499.999963 + 21 +4719.838429 + 31 +0.0 + 0 +LINE + 5 +76B + 8 +0 + 62 + 0 + 10 +8549.999963 + 20 +4676.537159 + 30 +0.0 + 11 +8537.499963 + 21 +4698.187794 + 31 +0.0 + 0 +LINE + 5 +76C + 8 +0 + 62 + 0 + 10 +8512.499963 + 20 +4741.489064 + 30 +0.0 + 11 +8504.699421 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +76D + 8 +0 + 62 + 0 + 10 +8549.999963 + 20 +4719.838429 + 30 +0.0 + 11 +8537.499963 + 21 +4741.489064 + 31 +0.0 + 0 +LINE + 5 +76E + 8 +0 + 62 + 0 + 10 +7824.999983 + 20 +4676.53719 + 30 +0.0 + 11 +7837.499983 + 21 +4698.187825 + 31 +0.0 + 0 +LINE + 5 +76F + 8 +0 + 62 + 0 + 10 +7862.499983 + 20 +4741.489095 + 30 +0.0 + 11 +7870.300508 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +770 + 8 +0 + 62 + 0 + 10 +7790.452232 + 20 +4660.0 + 30 +0.0 + 11 +7799.999983 + 21 +4676.53719 + 31 +0.0 + 0 +LINE + 5 +771 + 8 +0 + 62 + 0 + 10 +7824.999983 + 20 +4719.83846 + 30 +0.0 + 11 +7837.499983 + 21 +4741.489095 + 31 +0.0 + 0 +LINE + 5 +772 + 8 +0 + 62 + 0 + 10 +7787.499983 + 20 +4698.187825 + 30 +0.0 + 11 +7799.999983 + 21 +4719.83846 + 31 +0.0 + 0 +LINE + 5 +773 + 8 +0 + 62 + 0 + 10 +7749.999983 + 20 +4676.53719 + 30 +0.0 + 11 +7762.499983 + 21 +4698.187825 + 31 +0.0 + 0 +LINE + 5 +774 + 8 +0 + 62 + 0 + 10 +7787.499983 + 20 +4741.489095 + 30 +0.0 + 11 +7795.300508 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +775 + 8 +0 + 62 + 0 + 10 +7715.452232 + 20 +4660.0 + 30 +0.0 + 11 +7724.999984 + 21 +4676.53719 + 31 +0.0 + 0 +LINE + 5 +776 + 8 +0 + 62 + 0 + 10 +7749.999984 + 20 +4719.83846 + 30 +0.0 + 11 +7762.499984 + 21 +4741.489095 + 31 +0.0 + 0 +LINE + 5 +777 + 8 +0 + 62 + 0 + 10 +7712.499984 + 20 +4698.187825 + 30 +0.0 + 11 +7724.999984 + 21 +4719.83846 + 31 +0.0 + 0 +LINE + 5 +778 + 8 +0 + 62 + 0 + 10 +7674.999984 + 20 +4676.53719 + 30 +0.0 + 11 +7687.499984 + 21 +4698.187825 + 31 +0.0 + 0 +LINE + 5 +779 + 8 +0 + 62 + 0 + 10 +7712.499984 + 20 +4741.489095 + 30 +0.0 + 11 +7720.300508 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +77A + 8 +0 + 62 + 0 + 10 +7640.452233 + 20 +4660.0 + 30 +0.0 + 11 +7649.999984 + 21 +4676.53719 + 31 +0.0 + 0 +LINE + 5 +77B + 8 +0 + 62 + 0 + 10 +7674.999984 + 20 +4719.83846 + 30 +0.0 + 11 +7687.499984 + 21 +4741.489095 + 31 +0.0 + 0 +LINE + 5 +77C + 8 +0 + 62 + 0 + 10 +7637.499984 + 20 +4698.187825 + 30 +0.0 + 11 +7649.999984 + 21 +4719.83846 + 31 +0.0 + 0 +LINE + 5 +77D + 8 +0 + 62 + 0 + 10 +7599.999984 + 20 +4676.53719 + 30 +0.0 + 11 +7612.499984 + 21 +4698.187825 + 31 +0.0 + 0 +LINE + 5 +77E + 8 +0 + 62 + 0 + 10 +7637.499984 + 20 +4741.489095 + 30 +0.0 + 11 +7645.300509 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +77F + 8 +0 + 62 + 0 + 10 +7565.452233 + 20 +4660.0 + 30 +0.0 + 11 +7574.999984 + 21 +4676.53719 + 31 +0.0 + 0 +LINE + 5 +780 + 8 +0 + 62 + 0 + 10 +7599.999984 + 20 +4719.83846 + 30 +0.0 + 11 +7612.499984 + 21 +4741.489095 + 31 +0.0 + 0 +LINE + 5 +781 + 8 +0 + 62 + 0 + 10 +7562.499984 + 20 +4698.187825 + 30 +0.0 + 11 +7574.999984 + 21 +4719.83846 + 31 +0.0 + 0 +LINE + 5 +782 + 8 +0 + 62 + 0 + 10 +7524.999984 + 20 +4676.53719 + 30 +0.0 + 11 +7537.499984 + 21 +4698.187825 + 31 +0.0 + 0 +LINE + 5 +783 + 8 +0 + 62 + 0 + 10 +7562.499984 + 20 +4741.489095 + 30 +0.0 + 11 +7570.300509 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +784 + 8 +0 + 62 + 0 + 10 +7490.452233 + 20 +4660.0 + 30 +0.0 + 11 +7499.999984 + 21 +4676.53719 + 31 +0.0 + 0 +LINE + 5 +785 + 8 +0 + 62 + 0 + 10 +7524.999984 + 20 +4719.83846 + 30 +0.0 + 11 +7537.499984 + 21 +4741.489095 + 31 +0.0 + 0 +LINE + 5 +786 + 8 +0 + 62 + 0 + 10 +7487.499984 + 20 +4698.187825 + 30 +0.0 + 11 +7499.999984 + 21 +4719.83846 + 31 +0.0 + 0 +LINE + 5 +787 + 8 +0 + 62 + 0 + 10 +7449.999984 + 20 +4676.537189 + 30 +0.0 + 11 +7462.499984 + 21 +4698.187825 + 31 +0.0 + 0 +LINE + 5 +788 + 8 +0 + 62 + 0 + 10 +7487.499984 + 20 +4741.489095 + 30 +0.0 + 11 +7495.300509 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +789 + 8 +0 + 62 + 0 + 10 +7415.452234 + 20 +4660.0 + 30 +0.0 + 11 +7424.999985 + 21 +4676.537189 + 31 +0.0 + 0 +LINE + 5 +78A + 8 +0 + 62 + 0 + 10 +7449.999985 + 20 +4719.83846 + 30 +0.0 + 11 +7462.499985 + 21 +4741.489095 + 31 +0.0 + 0 +LINE + 5 +78B + 8 +0 + 62 + 0 + 10 +7412.499985 + 20 +4698.187824 + 30 +0.0 + 11 +7424.999985 + 21 +4719.83846 + 31 +0.0 + 0 +LINE + 5 +78C + 8 +0 + 62 + 0 + 10 +7374.999985 + 20 +4676.537189 + 30 +0.0 + 11 +7387.499985 + 21 +4698.187824 + 31 +0.0 + 0 +LINE + 5 +78D + 8 +0 + 62 + 0 + 10 +7412.499985 + 20 +4741.489095 + 30 +0.0 + 11 +7420.30051 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +78E + 8 +0 + 62 + 0 + 10 +7340.452234 + 20 +4660.0 + 30 +0.0 + 11 +7349.999985 + 21 +4676.537189 + 31 +0.0 + 0 +LINE + 5 +78F + 8 +0 + 62 + 0 + 10 +7374.999985 + 20 +4719.838459 + 30 +0.0 + 11 +7387.499985 + 21 +4741.489095 + 31 +0.0 + 0 +LINE + 5 +790 + 8 +0 + 62 + 0 + 10 +7337.499985 + 20 +4698.187824 + 30 +0.0 + 11 +7349.999985 + 21 +4719.838459 + 31 +0.0 + 0 +LINE + 5 +791 + 8 +0 + 62 + 0 + 10 +7299.999985 + 20 +4676.537189 + 30 +0.0 + 11 +7312.499985 + 21 +4698.187824 + 31 +0.0 + 0 +LINE + 5 +792 + 8 +0 + 62 + 0 + 10 +7337.499985 + 20 +4741.489094 + 30 +0.0 + 11 +7345.30051 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +793 + 8 +0 + 62 + 0 + 10 +7265.452234 + 20 +4660.0 + 30 +0.0 + 11 +7274.999985 + 21 +4676.537189 + 31 +0.0 + 0 +LINE + 5 +794 + 8 +0 + 62 + 0 + 10 +7299.999985 + 20 +4719.838459 + 30 +0.0 + 11 +7312.499985 + 21 +4741.489094 + 31 +0.0 + 0 +LINE + 5 +795 + 8 +0 + 62 + 0 + 10 +7262.499985 + 20 +4698.187824 + 30 +0.0 + 11 +7274.999985 + 21 +4719.838459 + 31 +0.0 + 0 +LINE + 5 +796 + 8 +0 + 62 + 0 + 10 +7224.999985 + 20 +4676.537189 + 30 +0.0 + 11 +7237.499985 + 21 +4698.187824 + 31 +0.0 + 0 +LINE + 5 +797 + 8 +0 + 62 + 0 + 10 +7262.499985 + 20 +4741.489094 + 30 +0.0 + 11 +7270.30051 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +798 + 8 +0 + 62 + 0 + 10 +7190.452235 + 20 +4660.0 + 30 +0.0 + 11 +7199.999985 + 21 +4676.537189 + 31 +0.0 + 0 +LINE + 5 +799 + 8 +0 + 62 + 0 + 10 +7224.999985 + 20 +4719.838459 + 30 +0.0 + 11 +7237.499985 + 21 +4741.489094 + 31 +0.0 + 0 +LINE + 5 +79A + 8 +0 + 62 + 0 + 10 +7187.499985 + 20 +4698.187824 + 30 +0.0 + 11 +7199.999985 + 21 +4719.838459 + 31 +0.0 + 0 +LINE + 5 +79B + 8 +0 + 62 + 0 + 10 +7160.0 + 20 +4693.857722 + 30 +0.0 + 11 +7162.499985 + 21 +4698.187824 + 31 +0.0 + 0 +LINE + 5 +79C + 8 +0 + 62 + 0 + 10 +7187.499985 + 20 +4741.489094 + 30 +0.0 + 11 +7195.300511 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +79D + 8 +0 + 62 + 0 + 10 +7160.0 + 20 +4737.158992 + 30 +0.0 + 11 +7162.499985 + 21 +4741.489094 + 31 +0.0 + 0 +LINE + 5 +79E + 8 +0 + 62 + 0 + 10 +7862.499983 + 20 +4698.187825 + 30 +0.0 + 11 +7874.999983 + 21 +4719.83846 + 31 +0.0 + 0 +LINE + 5 +79F + 8 +0 + 62 + 0 + 10 +7865.452232 + 20 +4660.0 + 30 +0.0 + 11 +7874.999983 + 21 +4676.53719 + 31 +0.0 + 0 +LINE + 5 +7A0 + 8 +0 + 62 + 0 + 10 +7899.999983 + 20 +4719.83846 + 30 +0.0 + 11 +7912.499983 + 21 +4741.489096 + 31 +0.0 + 0 +LINE + 5 +7A1 + 8 +0 + 62 + 0 + 10 +7899.999983 + 20 +4676.53719 + 30 +0.0 + 11 +7912.499983 + 21 +4698.187825 + 31 +0.0 + 0 +LINE + 5 +7A2 + 8 +0 + 62 + 0 + 10 +7937.499983 + 20 +4741.489096 + 30 +0.0 + 11 +7945.300507 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +7A3 + 8 +0 + 62 + 0 + 10 +7937.499983 + 20 +4698.187825 + 30 +0.0 + 11 +7949.999983 + 21 +4719.838461 + 31 +0.0 + 0 +LINE + 5 +7A4 + 8 +0 + 62 + 0 + 10 +7940.452231 + 20 +4660.0 + 30 +0.0 + 11 +7949.999983 + 21 +4676.53719 + 31 +0.0 + 0 +LINE + 5 +7A5 + 8 +0 + 62 + 0 + 10 +7974.999983 + 20 +4719.838461 + 30 +0.0 + 11 +7987.499983 + 21 +4741.489096 + 31 +0.0 + 0 +LINE + 5 +7A6 + 8 +0 + 62 + 0 + 10 +7974.999983 + 20 +4676.53719 + 30 +0.0 + 11 +7987.499983 + 21 +4698.187826 + 31 +0.0 + 0 +LINE + 5 +7A7 + 8 +0 + 62 + 0 + 10 +8012.499983 + 20 +4741.489096 + 30 +0.0 + 11 +8020.300507 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +7A8 + 8 +0 + 62 + 0 + 10 +8012.499983 + 20 +4698.187826 + 30 +0.0 + 11 +8024.999983 + 21 +4719.838461 + 31 +0.0 + 0 +LINE + 5 +7A9 + 8 +0 + 62 + 0 + 10 +8015.452231 + 20 +4660.0 + 30 +0.0 + 11 +8024.999983 + 21 +4676.537191 + 31 +0.0 + 0 +LINE + 5 +7AA + 8 +0 + 62 + 0 + 10 +8049.999983 + 20 +4719.838461 + 30 +0.0 + 11 +8062.499983 + 21 +4741.489096 + 31 +0.0 + 0 +LINE + 5 +7AB + 8 +0 + 62 + 0 + 10 +8049.999982 + 20 +4676.537191 + 30 +0.0 + 11 +8062.499982 + 21 +4698.187826 + 31 +0.0 + 0 +LINE + 5 +7AC + 8 +0 + 62 + 0 + 10 +8087.499982 + 20 +4741.489096 + 30 +0.0 + 11 +8095.300507 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +7AD + 8 +0 + 62 + 0 + 10 +8087.499982 + 20 +4698.187826 + 30 +0.0 + 11 +8099.999982 + 21 +4719.838461 + 31 +0.0 + 0 +LINE + 5 +7AE + 8 +0 + 62 + 0 + 10 +8090.452231 + 20 +4660.0 + 30 +0.0 + 11 +8099.999982 + 21 +4676.537191 + 31 +0.0 + 0 +LINE + 5 +7AF + 8 +0 + 62 + 0 + 10 +8124.999982 + 20 +4719.838461 + 30 +0.0 + 11 +8137.499982 + 21 +4741.489096 + 31 +0.0 + 0 +LINE + 5 +7B0 + 8 +0 + 62 + 0 + 10 +8124.999982 + 20 +4676.537191 + 30 +0.0 + 11 +8137.499982 + 21 +4698.187826 + 31 +0.0 + 0 +LINE + 5 +7B1 + 8 +0 + 62 + 0 + 10 +8162.499982 + 20 +4741.489096 + 30 +0.0 + 11 +8170.300506 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +7B2 + 8 +0 + 62 + 0 + 10 +8162.499982 + 20 +4698.187826 + 30 +0.0 + 11 +8174.999982 + 21 +4719.838461 + 31 +0.0 + 0 +LINE + 5 +7B3 + 8 +0 + 62 + 0 + 10 +8165.45223 + 20 +4660.0 + 30 +0.0 + 11 +8174.999982 + 21 +4676.537191 + 31 +0.0 + 0 +LINE + 5 +7B4 + 8 +0 + 62 + 0 + 10 +8199.999982 + 20 +4719.838461 + 30 +0.0 + 11 +8212.499982 + 21 +4741.489096 + 31 +0.0 + 0 +LINE + 5 +7B5 + 8 +0 + 62 + 0 + 10 +8199.999982 + 20 +4676.537191 + 30 +0.0 + 11 +8212.499982 + 21 +4698.187826 + 31 +0.0 + 0 +LINE + 5 +7B6 + 8 +0 + 62 + 0 + 10 +8237.499982 + 20 +4741.489096 + 30 +0.0 + 11 +8245.300506 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +7B7 + 8 +0 + 62 + 0 + 10 +8237.499982 + 20 +4698.187826 + 30 +0.0 + 11 +8249.999982 + 21 +4719.838461 + 31 +0.0 + 0 +LINE + 5 +7B8 + 8 +0 + 62 + 0 + 10 +8240.45223 + 20 +4660.0 + 30 +0.0 + 11 +8249.999982 + 21 +4676.537191 + 31 +0.0 + 0 +LINE + 5 +7B9 + 8 +0 + 62 + 0 + 10 +8274.999982 + 20 +4719.838461 + 30 +0.0 + 11 +8287.499982 + 21 +4741.489096 + 31 +0.0 + 0 +LINE + 5 +7BA + 8 +0 + 62 + 0 + 10 +8274.999982 + 20 +4676.537191 + 30 +0.0 + 11 +8287.499982 + 21 +4698.187826 + 31 +0.0 + 0 +LINE + 5 +7BB + 8 +0 + 62 + 0 + 10 +8312.499982 + 20 +4741.489096 + 30 +0.0 + 11 +8320.300506 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +7BC + 8 +0 + 62 + 0 + 10 +8312.499982 + 20 +4698.187826 + 30 +0.0 + 11 +8324.999982 + 21 +4719.838461 + 31 +0.0 + 0 +LINE + 5 +7BD + 8 +0 + 62 + 0 + 10 +8315.45223 + 20 +4660.0 + 30 +0.0 + 11 +8324.999982 + 21 +4676.537191 + 31 +0.0 + 0 +LINE + 5 +7BE + 8 +0 + 62 + 0 + 10 +8349.999982 + 20 +4719.838461 + 30 +0.0 + 11 +8362.499982 + 21 +4741.489096 + 31 +0.0 + 0 +LINE + 5 +7BF + 8 +0 + 62 + 0 + 10 +8349.999981 + 20 +4676.537191 + 30 +0.0 + 11 +8362.499981 + 21 +4698.187826 + 31 +0.0 + 0 +LINE + 5 +7C0 + 8 +0 + 62 + 0 + 10 +8387.499981 + 20 +4741.489096 + 30 +0.0 + 11 +8395.300505 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +7C1 + 8 +0 + 62 + 0 + 10 +8387.499981 + 20 +4698.187826 + 30 +0.0 + 11 +8399.999981 + 21 +4719.838461 + 31 +0.0 + 0 +LINE + 5 +7C2 + 8 +0 + 62 + 0 + 10 +8390.45223 + 20 +4660.0 + 30 +0.0 + 11 +8399.999981 + 21 +4676.537191 + 31 +0.0 + 0 +LINE + 5 +7C3 + 8 +0 + 62 + 0 + 10 +8424.999981 + 20 +4719.838461 + 30 +0.0 + 11 +8437.499981 + 21 +4741.489097 + 31 +0.0 + 0 +LINE + 5 +7C4 + 8 +0 + 62 + 0 + 10 +8424.999981 + 20 +4676.537191 + 30 +0.0 + 11 +8437.499981 + 21 +4698.187826 + 31 +0.0 + 0 +LINE + 5 +7C5 + 8 +0 + 62 + 0 + 10 +8462.499981 + 20 +4741.489097 + 30 +0.0 + 11 +8470.300505 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +7C6 + 8 +0 + 62 + 0 + 10 +8462.499981 + 20 +4698.187826 + 30 +0.0 + 11 +8474.999981 + 21 +4719.838462 + 31 +0.0 + 0 +LINE + 5 +7C7 + 8 +0 + 62 + 0 + 10 +8465.452229 + 20 +4660.0 + 30 +0.0 + 11 +8474.999981 + 21 +4676.537191 + 31 +0.0 + 0 +LINE + 5 +7C8 + 8 +0 + 62 + 0 + 10 +8499.999981 + 20 +4719.838462 + 30 +0.0 + 11 +8512.499981 + 21 +4741.489097 + 31 +0.0 + 0 +LINE + 5 +7C9 + 8 +0 + 62 + 0 + 10 +8499.999981 + 20 +4676.537191 + 30 +0.0 + 11 +8512.499981 + 21 +4698.187827 + 31 +0.0 + 0 +LINE + 5 +7CA + 8 +0 + 62 + 0 + 10 +8537.499981 + 20 +4741.489097 + 30 +0.0 + 11 +8545.300505 + 21 +4755.0 + 31 +0.0 + 0 +LINE + 5 +7CB + 8 +0 + 62 + 0 + 10 +8537.499981 + 20 +4698.187827 + 30 +0.0 + 11 +8549.999981 + 21 +4719.838462 + 31 +0.0 + 0 +LINE + 5 +7CC + 8 +0 + 62 + 0 + 10 +8540.452229 + 20 +4660.0 + 30 +0.0 + 11 +8549.999981 + 21 +4676.537192 + 31 +0.0 + 0 +ENDBLK + 5 +7CD + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X33 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X33 + 1 + + 0 +LINE + 5 +7CF + 8 +0 + 62 + 0 + 10 +7813.529932 + 20 +4808.326112 + 30 +0.0 + 11 +7831.207602 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +7D0 + 8 +0 + 62 + 0 + 10 +7848.885271 + 20 +4843.681451 + 30 +0.0 + 11 +7866.562941 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +7D1 + 8 +0 + 62 + 0 + 10 +7884.24061 + 20 +4879.03679 + 30 +0.0 + 11 +7900.986327 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +7D2 + 8 +0 + 62 + 0 + 10 +7778.174593 + 20 +4808.326112 + 30 +0.0 + 11 +7795.852263 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +7D3 + 8 +0 + 62 + 0 + 10 +7813.529932 + 20 +4843.681451 + 30 +0.0 + 11 +7831.207602 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +7D4 + 8 +0 + 62 + 0 + 10 +7848.885271 + 20 +4879.03679 + 30 +0.0 + 11 +7865.630988 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +7D5 + 8 +0 + 62 + 0 + 10 +7742.819254 + 20 +4808.326112 + 30 +0.0 + 11 +7760.496924 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +7D6 + 8 +0 + 62 + 0 + 10 +7778.174593 + 20 +4843.681451 + 30 +0.0 + 11 +7795.852263 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +7D7 + 8 +0 + 62 + 0 + 10 +7813.529932 + 20 +4879.03679 + 30 +0.0 + 11 +7830.275649 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +7D8 + 8 +0 + 62 + 0 + 10 +7707.463915 + 20 +4808.326112 + 30 +0.0 + 11 +7725.141584 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +7D9 + 8 +0 + 62 + 0 + 10 +7742.819254 + 20 +4843.681451 + 30 +0.0 + 11 +7760.496924 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +7DA + 8 +0 + 62 + 0 + 10 +7778.174593 + 20 +4879.03679 + 30 +0.0 + 11 +7794.92031 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +7DB + 8 +0 + 62 + 0 + 10 +7672.108576 + 20 +4808.326112 + 30 +0.0 + 11 +7689.786245 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +7DC + 8 +0 + 62 + 0 + 10 +7707.463915 + 20 +4843.681451 + 30 +0.0 + 11 +7725.141584 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +7DD + 8 +0 + 62 + 0 + 10 +7742.819254 + 20 +4879.03679 + 30 +0.0 + 11 +7759.564971 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +7DE + 8 +0 + 62 + 0 + 10 +7636.753237 + 20 +4808.326112 + 30 +0.0 + 11 +7654.430906 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +7DF + 8 +0 + 62 + 0 + 10 +7672.108576 + 20 +4843.681451 + 30 +0.0 + 11 +7689.786245 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +7E0 + 8 +0 + 62 + 0 + 10 +7707.463915 + 20 +4879.03679 + 30 +0.0 + 11 +7724.209632 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +7E1 + 8 +0 + 62 + 0 + 10 +7601.397898 + 20 +4808.326112 + 30 +0.0 + 11 +7619.075567 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +7E2 + 8 +0 + 62 + 0 + 10 +7636.753237 + 20 +4843.681451 + 30 +0.0 + 11 +7654.430906 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +7E3 + 8 +0 + 62 + 0 + 10 +7672.108576 + 20 +4879.03679 + 30 +0.0 + 11 +7688.854293 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +7E4 + 8 +0 + 62 + 0 + 10 +7566.042559 + 20 +4808.326112 + 30 +0.0 + 11 +7583.720228 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +7E5 + 8 +0 + 62 + 0 + 10 +7601.397898 + 20 +4843.681451 + 30 +0.0 + 11 +7619.075567 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +7E6 + 8 +0 + 62 + 0 + 10 +7636.753237 + 20 +4879.03679 + 30 +0.0 + 11 +7653.498954 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +7E7 + 8 +0 + 62 + 0 + 10 +7530.68722 + 20 +4808.326112 + 30 +0.0 + 11 +7548.364889 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +7E8 + 8 +0 + 62 + 0 + 10 +7566.042559 + 20 +4843.681451 + 30 +0.0 + 11 +7583.720228 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +7E9 + 8 +0 + 62 + 0 + 10 +7601.397898 + 20 +4879.03679 + 30 +0.0 + 11 +7618.143615 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +7EA + 8 +0 + 62 + 0 + 10 +7495.331881 + 20 +4808.326112 + 30 +0.0 + 11 +7513.00955 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +7EB + 8 +0 + 62 + 0 + 10 +7530.68722 + 20 +4843.681451 + 30 +0.0 + 11 +7548.364889 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +7EC + 8 +0 + 62 + 0 + 10 +7566.042559 + 20 +4879.03679 + 30 +0.0 + 11 +7582.788276 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +7ED + 8 +0 + 62 + 0 + 10 +7459.976542 + 20 +4808.326112 + 30 +0.0 + 11 +7477.654211 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +7EE + 8 +0 + 62 + 0 + 10 +7495.331881 + 20 +4843.681451 + 30 +0.0 + 11 +7513.00955 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +7EF + 8 +0 + 62 + 0 + 10 +7530.68722 + 20 +4879.03679 + 30 +0.0 + 11 +7547.432936 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +7F0 + 8 +0 + 62 + 0 + 10 +7424.621202 + 20 +4808.326112 + 30 +0.0 + 11 +7442.298872 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +7F1 + 8 +0 + 62 + 0 + 10 +7459.976542 + 20 +4843.681451 + 30 +0.0 + 11 +7477.654211 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +7F2 + 8 +0 + 62 + 0 + 10 +7495.331881 + 20 +4879.03679 + 30 +0.0 + 11 +7512.077597 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +7F3 + 8 +0 + 62 + 0 + 10 +7389.265863 + 20 +4808.326112 + 30 +0.0 + 11 +7406.943533 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +7F4 + 8 +0 + 62 + 0 + 10 +7424.621202 + 20 +4843.681451 + 30 +0.0 + 11 +7442.298872 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +7F5 + 8 +0 + 62 + 0 + 10 +7459.976542 + 20 +4879.03679 + 30 +0.0 + 11 +7476.722258 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +7F6 + 8 +0 + 62 + 0 + 10 +7353.910524 + 20 +4808.326112 + 30 +0.0 + 11 +7371.588194 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +7F7 + 8 +0 + 62 + 0 + 10 +7389.265863 + 20 +4843.681451 + 30 +0.0 + 11 +7406.943533 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +7F8 + 8 +0 + 62 + 0 + 10 +7424.621202 + 20 +4879.03679 + 30 +0.0 + 11 +7441.366919 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +7F9 + 8 +0 + 62 + 0 + 10 +7318.555185 + 20 +4808.326112 + 30 +0.0 + 11 +7336.232855 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +7FA + 8 +0 + 62 + 0 + 10 +7353.910524 + 20 +4843.681451 + 30 +0.0 + 11 +7371.588194 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +7FB + 8 +0 + 62 + 0 + 10 +7389.265863 + 20 +4879.03679 + 30 +0.0 + 11 +7406.01158 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +7FC + 8 +0 + 62 + 0 + 10 +7283.199846 + 20 +4808.326112 + 30 +0.0 + 11 +7300.877516 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +7FD + 8 +0 + 62 + 0 + 10 +7318.555185 + 20 +4843.681451 + 30 +0.0 + 11 +7336.232855 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +7FE + 8 +0 + 62 + 0 + 10 +7353.910524 + 20 +4879.03679 + 30 +0.0 + 11 +7370.656241 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +7FF + 8 +0 + 62 + 0 + 10 +7247.844507 + 20 +4808.326112 + 30 +0.0 + 11 +7265.522177 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +800 + 8 +0 + 62 + 0 + 10 +7283.199846 + 20 +4843.681451 + 30 +0.0 + 11 +7300.877516 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +801 + 8 +0 + 62 + 0 + 10 +7318.555185 + 20 +4879.03679 + 30 +0.0 + 11 +7335.300902 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +802 + 8 +0 + 62 + 0 + 10 +7212.489168 + 20 +4808.326112 + 30 +0.0 + 11 +7230.166838 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +803 + 8 +0 + 62 + 0 + 10 +7247.844507 + 20 +4843.681451 + 30 +0.0 + 11 +7265.522177 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +804 + 8 +0 + 62 + 0 + 10 +7283.199846 + 20 +4879.03679 + 30 +0.0 + 11 +7299.945563 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +805 + 8 +0 + 62 + 0 + 10 +7191.15625 + 20 +4822.348533 + 30 +0.0 + 11 +7194.811499 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +806 + 8 +0 + 62 + 0 + 10 +7212.489168 + 20 +4843.681451 + 30 +0.0 + 11 +7230.166838 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +807 + 8 +0 + 62 + 0 + 10 +7247.844507 + 20 +4879.03679 + 30 +0.0 + 11 +7264.590224 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +808 + 8 +0 + 62 + 0 + 10 +7191.15625 + 20 +4857.703872 + 30 +0.0 + 11 +7194.811499 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +809 + 8 +0 + 62 + 0 + 10 +7212.489168 + 20 +4879.03679 + 30 +0.0 + 11 +7229.234885 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +80A + 8 +0 + 62 + 0 + 10 +7191.15625 + 20 +4893.059211 + 30 +0.0 + 11 +7193.879546 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +80B + 8 +0 + 62 + 0 + 10 +7848.885271 + 20 +4808.326112 + 30 +0.0 + 11 +7866.562941 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +80C + 8 +0 + 62 + 0 + 10 +7884.24061 + 20 +4843.681451 + 30 +0.0 + 11 +7901.91828 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +80D + 8 +0 + 62 + 0 + 10 +7919.595949 + 20 +4879.03679 + 30 +0.0 + 11 +7936.341666 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +80E + 8 +0 + 62 + 0 + 10 +7884.24061 + 20 +4808.326112 + 30 +0.0 + 11 +7901.91828 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +80F + 8 +0 + 62 + 0 + 10 +7919.595949 + 20 +4843.681451 + 30 +0.0 + 11 +7937.273619 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +810 + 8 +0 + 62 + 0 + 10 +7954.951288 + 20 +4879.03679 + 30 +0.0 + 11 +7971.697005 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +811 + 8 +0 + 62 + 0 + 10 +7919.595949 + 20 +4808.326112 + 30 +0.0 + 11 +7937.273619 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +812 + 8 +0 + 62 + 0 + 10 +7954.951288 + 20 +4843.681451 + 30 +0.0 + 11 +7972.628958 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +813 + 8 +0 + 62 + 0 + 10 +7990.306627 + 20 +4879.03679 + 30 +0.0 + 11 +8007.052344 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +814 + 8 +0 + 62 + 0 + 10 +7954.951288 + 20 +4808.326112 + 30 +0.0 + 11 +7972.628958 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +815 + 8 +0 + 62 + 0 + 10 +7990.306627 + 20 +4843.681451 + 30 +0.0 + 11 +8007.984297 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +816 + 8 +0 + 62 + 0 + 10 +8025.661966 + 20 +4879.03679 + 30 +0.0 + 11 +8042.407683 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +817 + 8 +0 + 62 + 0 + 10 +7990.306627 + 20 +4808.326112 + 30 +0.0 + 11 +8007.984297 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +818 + 8 +0 + 62 + 0 + 10 +8025.661966 + 20 +4843.681451 + 30 +0.0 + 11 +8043.339636 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +819 + 8 +0 + 62 + 0 + 10 +8061.017306 + 20 +4879.03679 + 30 +0.0 + 11 +8077.763022 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +81A + 8 +0 + 62 + 0 + 10 +8025.661966 + 20 +4808.326112 + 30 +0.0 + 11 +8043.339636 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +81B + 8 +0 + 62 + 0 + 10 +8061.017306 + 20 +4843.681451 + 30 +0.0 + 11 +8078.694975 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +81C + 8 +0 + 62 + 0 + 10 +8096.372645 + 20 +4879.03679 + 30 +0.0 + 11 +8113.118361 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +81D + 8 +0 + 62 + 0 + 10 +8061.017306 + 20 +4808.326112 + 30 +0.0 + 11 +8078.694975 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +81E + 8 +0 + 62 + 0 + 10 +8096.372645 + 20 +4843.681451 + 30 +0.0 + 11 +8114.050314 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +81F + 8 +0 + 62 + 0 + 10 +8131.727984 + 20 +4879.03679 + 30 +0.0 + 11 +8148.4737 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +820 + 8 +0 + 62 + 0 + 10 +8096.372645 + 20 +4808.326112 + 30 +0.0 + 11 +8114.050314 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +821 + 8 +0 + 62 + 0 + 10 +8131.727984 + 20 +4843.681451 + 30 +0.0 + 11 +8149.405653 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +822 + 8 +0 + 62 + 0 + 10 +8167.083323 + 20 +4879.03679 + 30 +0.0 + 11 +8183.82904 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +823 + 8 +0 + 62 + 0 + 10 +8131.727984 + 20 +4808.326112 + 30 +0.0 + 11 +8149.405653 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +824 + 8 +0 + 62 + 0 + 10 +8167.083323 + 20 +4843.681451 + 30 +0.0 + 11 +8184.760992 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +825 + 8 +0 + 62 + 0 + 10 +8202.438662 + 20 +4879.03679 + 30 +0.0 + 11 +8219.184379 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +826 + 8 +0 + 62 + 0 + 10 +8167.083323 + 20 +4808.326112 + 30 +0.0 + 11 +8184.760992 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +827 + 8 +0 + 62 + 0 + 10 +8202.438662 + 20 +4843.681451 + 30 +0.0 + 11 +8220.116331 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +828 + 8 +0 + 62 + 0 + 10 +8237.794001 + 20 +4879.03679 + 30 +0.0 + 11 +8254.539718 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +829 + 8 +0 + 62 + 0 + 10 +8202.438662 + 20 +4808.326112 + 30 +0.0 + 11 +8220.116331 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +82A + 8 +0 + 62 + 0 + 10 +8237.794001 + 20 +4843.681451 + 30 +0.0 + 11 +8255.47167 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +82B + 8 +0 + 62 + 0 + 10 +8273.14934 + 20 +4879.03679 + 30 +0.0 + 11 +8289.895057 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +82C + 8 +0 + 62 + 0 + 10 +8237.794001 + 20 +4808.326112 + 30 +0.0 + 11 +8255.47167 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +82D + 8 +0 + 62 + 0 + 10 +8273.14934 + 20 +4843.681451 + 30 +0.0 + 11 +8290.827009 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +82E + 8 +0 + 62 + 0 + 10 +8308.504679 + 20 +4879.03679 + 30 +0.0 + 11 +8325.250396 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +82F + 8 +0 + 62 + 0 + 10 +8273.14934 + 20 +4808.326112 + 30 +0.0 + 11 +8290.827009 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +830 + 8 +0 + 62 + 0 + 10 +8308.504679 + 20 +4843.681451 + 30 +0.0 + 11 +8326.182348 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +831 + 8 +0 + 62 + 0 + 10 +8343.860018 + 20 +4879.03679 + 30 +0.0 + 11 +8360.605735 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +832 + 8 +0 + 62 + 0 + 10 +8308.504679 + 20 +4808.326112 + 30 +0.0 + 11 +8326.182348 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +833 + 8 +0 + 62 + 0 + 10 +8343.860018 + 20 +4843.681451 + 30 +0.0 + 11 +8361.537688 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +834 + 8 +0 + 62 + 0 + 10 +8379.215357 + 20 +4879.03679 + 30 +0.0 + 11 +8395.961074 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +835 + 8 +0 + 62 + 0 + 10 +8343.860018 + 20 +4808.326112 + 30 +0.0 + 11 +8361.537688 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +836 + 8 +0 + 62 + 0 + 10 +8379.215357 + 20 +4843.681451 + 30 +0.0 + 11 +8396.893027 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +837 + 8 +0 + 62 + 0 + 10 +8414.570696 + 20 +4879.03679 + 30 +0.0 + 11 +8431.316413 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +838 + 8 +0 + 62 + 0 + 10 +8379.215357 + 20 +4808.326112 + 30 +0.0 + 11 +8396.893027 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +839 + 8 +0 + 62 + 0 + 10 +8414.570696 + 20 +4843.681451 + 30 +0.0 + 11 +8432.248366 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +83A + 8 +0 + 62 + 0 + 10 +8449.926035 + 20 +4879.03679 + 30 +0.0 + 11 +8466.671752 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +83B + 8 +0 + 62 + 0 + 10 +8414.570696 + 20 +4808.326112 + 30 +0.0 + 11 +8432.248366 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +83C + 8 +0 + 62 + 0 + 10 +8449.926035 + 20 +4843.681451 + 30 +0.0 + 11 +8467.603705 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +83D + 8 +0 + 62 + 0 + 10 +8485.281374 + 20 +4879.03679 + 30 +0.0 + 11 +8502.027091 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +83E + 8 +0 + 62 + 0 + 10 +8449.926035 + 20 +4808.326112 + 30 +0.0 + 11 +8467.603705 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +83F + 8 +0 + 62 + 0 + 10 +8485.281374 + 20 +4843.681451 + 30 +0.0 + 11 +8502.959044 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +840 + 8 +0 + 62 + 0 + 10 +8520.636713 + 20 +4879.03679 + 30 +0.0 + 11 +8537.38243 + 21 +4895.782507 + 31 +0.0 + 0 +LINE + 5 +841 + 8 +0 + 62 + 0 + 10 +8485.281374 + 20 +4808.326112 + 30 +0.0 + 11 +8502.959044 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +842 + 8 +0 + 62 + 0 + 10 +8520.636713 + 20 +4843.681451 + 30 +0.0 + 11 +8538.314383 + 21 +4861.359121 + 31 +0.0 + 0 +LINE + 5 +843 + 8 +0 + 62 + 0 + 10 +8555.992052 + 20 +4879.03679 + 30 +0.0 + 11 +8565.0 + 21 +4888.044738 + 31 +0.0 + 0 +LINE + 5 +844 + 8 +0 + 62 + 0 + 10 +8520.636713 + 20 +4808.326112 + 30 +0.0 + 11 +8538.314383 + 21 +4826.003782 + 31 +0.0 + 0 +LINE + 5 +845 + 8 +0 + 62 + 0 + 10 +8555.992052 + 20 +4843.681451 + 30 +0.0 + 11 +8565.0 + 21 +4852.689399 + 31 +0.0 + 0 +LINE + 5 +846 + 8 +0 + 62 + 0 + 10 +8555.992052 + 20 +4808.326112 + 30 +0.0 + 11 +8565.0 + 21 +4817.33406 + 31 +0.0 + 0 +ENDBLK + 5 +847 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X34 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X34 + 1 + + 0 +LINE + 5 +849 + 8 +0 + 62 + 0 + 10 +7652.716447 + 20 +4895.0 + 30 +0.0 + 11 +7712.716447 + 21 +4955.0 + 31 +0.0 + 0 +LINE + 5 +84A + 8 +0 + 62 + 0 + 10 +7440.584412 + 20 +4895.0 + 30 +0.0 + 11 +7500.584412 + 21 +4955.0 + 31 +0.0 + 0 +LINE + 5 +84B + 8 +0 + 62 + 0 + 10 +7228.452378 + 20 +4895.0 + 30 +0.0 + 11 +7288.452378 + 21 +4955.0 + 31 +0.0 + 0 +LINE + 5 +84C + 8 +0 + 62 + 0 + 10 +7864.848481 + 20 +4895.0 + 30 +0.0 + 11 +7924.848481 + 21 +4955.0 + 31 +0.0 + 0 +LINE + 5 +84D + 8 +0 + 62 + 0 + 10 +8076.980515 + 20 +4895.0 + 30 +0.0 + 11 +8136.980515 + 21 +4955.0 + 31 +0.0 + 0 +LINE + 5 +84E + 8 +0 + 62 + 0 + 10 +8289.11255 + 20 +4895.0 + 30 +0.0 + 11 +8349.11255 + 21 +4955.0 + 31 +0.0 + 0 +LINE + 5 +84F + 8 +0 + 62 + 0 + 10 +8501.244584 + 20 +4895.0 + 30 +0.0 + 11 +8561.244584 + 21 +4955.0 + 31 +0.0 + 0 +LINE + 5 +850 + 8 +0 + 62 + 0 + 10 +7688.071786 + 20 +4895.0 + 30 +0.0 + 11 +7748.071786 + 21 +4955.0 + 31 +0.0 + 0 +LINE + 5 +851 + 8 +0 + 62 + 0 + 10 +7475.939751 + 20 +4895.0 + 30 +0.0 + 11 +7535.939751 + 21 +4955.0 + 31 +0.0 + 0 +LINE + 5 +852 + 8 +0 + 62 + 0 + 10 +7263.807717 + 20 +4895.0 + 30 +0.0 + 11 +7323.807717 + 21 +4955.0 + 31 +0.0 + 0 +LINE + 5 +853 + 8 +0 + 62 + 0 + 10 +7900.20382 + 20 +4895.0 + 30 +0.0 + 11 +7960.20382 + 21 +4955.0 + 31 +0.0 + 0 +LINE + 5 +854 + 8 +0 + 62 + 0 + 10 +8112.335854 + 20 +4895.0 + 30 +0.0 + 11 +8172.335854 + 21 +4955.0 + 31 +0.0 + 0 +LINE + 5 +855 + 8 +0 + 62 + 0 + 10 +8324.467889 + 20 +4895.0 + 30 +0.0 + 11 +8384.467889 + 21 +4955.0 + 31 +0.0 + 0 +LINE + 5 +856 + 8 +0 + 62 + 0 + 10 +8536.599923 + 20 +4895.0 + 30 +0.0 + 11 +8570.0 + 21 +4928.400077 + 31 +0.0 + 0 +LINE + 5 +857 + 8 +0 + 62 + 0 + 10 +7723.427125 + 20 +4895.0 + 30 +0.0 + 11 +7783.427125 + 21 +4955.0 + 31 +0.0 + 0 +LINE + 5 +858 + 8 +0 + 62 + 0 + 10 +7511.29509 + 20 +4895.0 + 30 +0.0 + 11 +7571.29509 + 21 +4955.0 + 31 +0.0 + 0 +LINE + 5 +859 + 8 +0 + 62 + 0 + 10 +7299.163056 + 20 +4895.0 + 30 +0.0 + 11 +7359.163056 + 21 +4955.0 + 31 +0.0 + 0 +LINE + 5 +85A + 8 +0 + 62 + 0 + 10 +7935.559159 + 20 +4895.0 + 30 +0.0 + 11 +7995.559159 + 21 +4955.0 + 31 +0.0 + 0 +LINE + 5 +85B + 8 +0 + 62 + 0 + 10 +8147.691194 + 20 +4895.0 + 30 +0.0 + 11 +8207.691194 + 21 +4955.0 + 31 +0.0 + 0 +LINE + 5 +85C + 8 +0 + 62 + 0 + 10 +8359.823228 + 20 +4895.0 + 30 +0.0 + 11 +8419.823228 + 21 +4955.0 + 31 +0.0 + 0 +LINE + 5 +85D + 8 +0 + 62 + 0 + 10 +7758.782464 + 20 +4895.0 + 30 +0.0 + 11 +7818.782464 + 21 +4955.0 + 31 +0.0 + 0 +LINE + 5 +85E + 8 +0 + 62 + 0 + 10 +7546.650429 + 20 +4895.0 + 30 +0.0 + 11 +7606.650429 + 21 +4955.0 + 31 +0.0 + 0 +LINE + 5 +85F + 8 +0 + 62 + 0 + 10 +7334.518395 + 20 +4895.0 + 30 +0.0 + 11 +7394.518395 + 21 +4955.0 + 31 +0.0 + 0 +LINE + 5 +860 + 8 +0 + 62 + 0 + 10 +7970.914498 + 20 +4895.0 + 30 +0.0 + 11 +8030.914498 + 21 +4955.0 + 31 +0.0 + 0 +LINE + 5 +861 + 8 +0 + 62 + 0 + 10 +8183.046533 + 20 +4895.0 + 30 +0.0 + 11 +8243.046533 + 21 +4955.0 + 31 +0.0 + 0 +LINE + 5 +862 + 8 +0 + 62 + 0 + 10 +8395.178567 + 20 +4895.0 + 30 +0.0 + 11 +8455.178567 + 21 +4955.0 + 31 +0.0 + 0 +ENDBLK + 5 +863 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X35 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X35 + 1 + + 0 +LINE + 5 +865 + 8 +0 + 62 + 0 + 10 +6210.0 + 20 +5149.339828 + 30 +0.0 + 11 +6850.660172 + 21 +5790.0 + 31 +0.0 + 0 +LINE + 5 +866 + 8 +0 + 62 + 0 + 10 +6210.0 + 20 +5326.116524 + 30 +0.0 + 11 +6673.883476 + 21 +5790.0 + 31 +0.0 + 0 +LINE + 5 +867 + 8 +0 + 62 + 0 + 10 +6210.0 + 20 +5502.893219 + 30 +0.0 + 11 +6497.106781 + 21 +5790.0 + 31 +0.0 + 0 +LINE + 5 +868 + 8 +0 + 62 + 0 + 10 +6210.0 + 20 +5679.669914 + 30 +0.0 + 11 +6320.330086 + 21 +5790.0 + 31 +0.0 + 0 +LINE + 5 +869 + 8 +0 + 62 + 0 + 10 +6372.436867 + 20 +5135.0 + 30 +0.0 + 11 +7027.436867 + 21 +5790.0 + 31 +0.0 + 0 +LINE + 5 +86A + 8 +0 + 62 + 0 + 10 +6549.213562 + 20 +5135.0 + 30 +0.0 + 11 +7120.0 + 21 +5705.786438 + 31 +0.0 + 0 +LINE + 5 +86B + 8 +0 + 62 + 0 + 10 +6725.990258 + 20 +5135.0 + 30 +0.0 + 11 +7120.0 + 21 +5529.009742 + 31 +0.0 + 0 +LINE + 5 +86C + 8 +0 + 62 + 0 + 10 +6902.766953 + 20 +5135.0 + 30 +0.0 + 11 +7120.0 + 21 +5352.233047 + 31 +0.0 + 0 +LINE + 5 +86D + 8 +0 + 62 + 0 + 10 +7079.543648 + 20 +5135.0 + 30 +0.0 + 11 +7120.0 + 21 +5175.456352 + 31 +0.0 + 0 +ENDBLK + 5 +86E + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X36 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X36 + 1 + + 0 +LINE + 5 +870 + 8 +0 + 62 + 0 + 10 +6768.084412 + 20 +4222.5 + 30 +0.0 + 11 +7168.084412 + 21 +4622.5 + 31 +0.0 + 0 +LINE + 5 +871 + 8 +0 + 62 + 0 + 10 +6343.820344 + 20 +4222.5 + 30 +0.0 + 11 +6743.820344 + 21 +4622.5 + 31 +0.0 + 0 +LINE + 5 +872 + 8 +0 + 62 + 0 + 10 +6215.0 + 20 +4517.943725 + 30 +0.0 + 11 +6319.556275 + 21 +4622.5 + 31 +0.0 + 0 +LINE + 5 +873 + 8 +0 + 62 + 0 + 10 +7192.348481 + 20 +4222.5 + 30 +0.0 + 11 +7592.348481 + 21 +4622.5 + 31 +0.0 + 0 +LINE + 5 +874 + 8 +0 + 62 + 0 + 10 +7616.61255 + 20 +4222.5 + 30 +0.0 + 11 +8016.61255 + 21 +4622.5 + 31 +0.0 + 0 +LINE + 5 +875 + 8 +0 + 62 + 0 + 10 +8040.876618 + 20 +4222.5 + 30 +0.0 + 11 +8440.876618 + 21 +4622.5 + 31 +0.0 + 0 +LINE + 5 +876 + 8 +0 + 62 + 0 + 10 +8465.140687 + 20 +4222.5 + 30 +0.0 + 11 +8565.0 + 21 +4322.359313 + 31 +0.0 + 0 +LINE + 5 +877 + 8 +0 + 62 + 0 + 10 +6980.216446 + 20 +4222.5 + 30 +0.0 + 11 +7000.357133 + 21 +4242.640687 + 31 +0.0 + 0 +LINE + 5 +878 + 8 +0 + 62 + 0 + 10 +7053.390142 + 20 +4295.673696 + 30 +0.0 + 11 +7159.456159 + 21 +4401.739713 + 31 +0.0 + 0 +LINE + 5 +879 + 8 +0 + 62 + 0 + 10 +7212.489168 + 20 +4454.772721 + 30 +0.0 + 11 +7318.555185 + 21 +4560.838739 + 31 +0.0 + 0 +LINE + 5 +87A + 8 +0 + 62 + 0 + 10 +7371.588194 + 20 +4613.871747 + 30 +0.0 + 11 +7380.216446 + 21 +4622.5 + 31 +0.0 + 0 +LINE + 5 +87B + 8 +0 + 62 + 0 + 10 +6555.952378 + 20 +4222.5 + 30 +0.0 + 11 +6629.126073 + 21 +4295.673696 + 31 +0.0 + 0 +LINE + 5 +87C + 8 +0 + 62 + 0 + 10 +6682.159082 + 20 +4348.706704 + 30 +0.0 + 11 +6788.225099 + 21 +4454.772721 + 31 +0.0 + 0 +LINE + 5 +87D + 8 +0 + 62 + 0 + 10 +6841.258108 + 20 +4507.80573 + 30 +0.0 + 11 +6947.324125 + 21 +4613.871747 + 31 +0.0 + 0 +LINE + 5 +87E + 8 +0 + 62 + 0 + 10 +6215.0 + 20 +4305.811691 + 30 +0.0 + 11 +6257.895013 + 21 +4348.706704 + 31 +0.0 + 0 +LINE + 5 +87F + 8 +0 + 62 + 0 + 10 +6310.928022 + 20 +4401.739713 + 30 +0.0 + 11 +6416.994039 + 21 +4507.80573 + 31 +0.0 + 0 +LINE + 5 +880 + 8 +0 + 62 + 0 + 10 +6470.027048 + 20 +4560.838739 + 30 +0.0 + 11 +6531.688309 + 21 +4622.5 + 31 +0.0 + 0 +LINE + 5 +881 + 8 +0 + 62 + 0 + 10 +7424.621202 + 20 +4242.640687 + 30 +0.0 + 11 +7530.687219 + 21 +4348.706704 + 31 +0.0 + 0 +LINE + 5 +882 + 8 +0 + 62 + 0 + 10 +7583.720228 + 20 +4401.739713 + 30 +0.0 + 11 +7689.786245 + 21 +4507.80573 + 31 +0.0 + 0 +LINE + 5 +883 + 8 +0 + 62 + 0 + 10 +7742.819254 + 20 +4560.838739 + 30 +0.0 + 11 +7804.480515 + 21 +4622.5 + 31 +0.0 + 0 +LINE + 5 +884 + 8 +0 + 62 + 0 + 10 +7828.744584 + 20 +4222.5 + 30 +0.0 + 11 +7901.918279 + 21 +4295.673696 + 31 +0.0 + 0 +LINE + 5 +885 + 8 +0 + 62 + 0 + 10 +7954.951288 + 20 +4348.706704 + 30 +0.0 + 11 +8061.017305 + 21 +4454.772721 + 31 +0.0 + 0 +LINE + 5 +886 + 8 +0 + 62 + 0 + 10 +8114.050314 + 20 +4507.80573 + 30 +0.0 + 11 +8220.116331 + 21 +4613.871747 + 31 +0.0 + 0 +LINE + 5 +887 + 8 +0 + 62 + 0 + 10 +8253.008652 + 20 +4222.5 + 30 +0.0 + 11 +8273.14934 + 21 +4242.640687 + 31 +0.0 + 0 +LINE + 5 +888 + 8 +0 + 62 + 0 + 10 +8326.182348 + 20 +4295.673696 + 30 +0.0 + 11 +8432.248365 + 21 +4401.739713 + 31 +0.0 + 0 +LINE + 5 +889 + 8 +0 + 62 + 0 + 10 +8485.281374 + 20 +4454.772721 + 30 +0.0 + 11 +8565.0 + 21 +4534.491348 + 31 +0.0 + 0 +ENDBLK + 5 +88A + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X37 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X37 + 1 + + 0 +LINE + 5 +88C + 8 +0 + 62 + 0 + 10 +5833.630945 + 20 +2916.815472 + 30 +0.0 + 11 +5966.213466 + 21 +3049.397994 + 31 +0.0 + 0 +LINE + 5 +88D + 8 +0 + 62 + 0 + 10 +6098.795988 + 20 +3181.980515 + 30 +0.0 + 11 +6231.378509 + 21 +3314.563037 + 31 +0.0 + 0 +LINE + 5 +88E + 8 +0 + 62 + 0 + 10 +6363.961031 + 20 +3447.145558 + 30 +0.0 + 11 +6496.543552 + 21 +3579.72808 + 31 +0.0 + 0 +LINE + 5 +88F + 8 +0 + 62 + 0 + 10 +6629.126074 + 20 +3712.310601 + 30 +0.0 + 11 +6761.708595 + 21 +3844.893123 + 31 +0.0 + 0 +LINE + 5 +890 + 8 +0 + 62 + 0 + 10 +6894.291117 + 20 +3977.475644 + 30 +0.0 + 11 +7026.873638 + 21 +4110.058166 + 31 +0.0 + 0 +LINE + 5 +891 + 8 +0 + 62 + 0 + 10 +5568.465902 + 20 +2916.815472 + 30 +0.0 + 11 +5701.048423 + 21 +3049.397994 + 31 +0.0 + 0 +LINE + 5 +892 + 8 +0 + 62 + 0 + 10 +5833.630945 + 20 +3181.980515 + 30 +0.0 + 11 +5966.213466 + 21 +3314.563037 + 31 +0.0 + 0 +LINE + 5 +893 + 8 +0 + 62 + 0 + 10 +6098.795988 + 20 +3447.145558 + 30 +0.0 + 11 +6231.378509 + 21 +3579.72808 + 31 +0.0 + 0 +LINE + 5 +894 + 8 +0 + 62 + 0 + 10 +6363.961031 + 20 +3712.310601 + 30 +0.0 + 11 +6496.543552 + 21 +3844.893123 + 31 +0.0 + 0 +LINE + 5 +895 + 8 +0 + 62 + 0 + 10 +6629.126074 + 20 +3977.475644 + 30 +0.0 + 11 +6761.708595 + 21 +4110.058166 + 31 +0.0 + 0 +LINE + 5 +896 + 8 +0 + 62 + 0 + 10 +5421.25 + 20 +3034.764613 + 30 +0.0 + 11 +5435.88338 + 21 +3049.397994 + 31 +0.0 + 0 +LINE + 5 +897 + 8 +0 + 62 + 0 + 10 +5568.465902 + 20 +3181.980515 + 30 +0.0 + 11 +5701.048423 + 21 +3314.563037 + 31 +0.0 + 0 +LINE + 5 +898 + 8 +0 + 62 + 0 + 10 +5833.630945 + 20 +3447.145558 + 30 +0.0 + 11 +5966.213466 + 21 +3579.72808 + 31 +0.0 + 0 +LINE + 5 +899 + 8 +0 + 62 + 0 + 10 +6098.795988 + 20 +3712.310601 + 30 +0.0 + 11 +6231.378509 + 21 +3844.893123 + 31 +0.0 + 0 +LINE + 5 +89A + 8 +0 + 62 + 0 + 10 +6363.961031 + 20 +3977.475644 + 30 +0.0 + 11 +6496.543552 + 21 +4110.058166 + 31 +0.0 + 0 +LINE + 5 +89B + 8 +0 + 62 + 0 + 10 +5421.25 + 20 +3299.929656 + 30 +0.0 + 11 +5435.88338 + 21 +3314.563037 + 31 +0.0 + 0 +LINE + 5 +89C + 8 +0 + 62 + 0 + 10 +5568.465902 + 20 +3447.145558 + 30 +0.0 + 11 +5701.048423 + 21 +3579.72808 + 31 +0.0 + 0 +LINE + 5 +89D + 8 +0 + 62 + 0 + 10 +5833.630945 + 20 +3712.310601 + 30 +0.0 + 11 +5966.213466 + 21 +3844.893123 + 31 +0.0 + 0 +LINE + 5 +89E + 8 +0 + 62 + 0 + 10 +6098.795988 + 20 +3977.475644 + 30 +0.0 + 11 +6231.378509 + 21 +4110.058166 + 31 +0.0 + 0 +LINE + 5 +89F + 8 +0 + 62 + 0 + 10 +5421.25 + 20 +3565.094699 + 30 +0.0 + 11 +5435.88338 + 21 +3579.72808 + 31 +0.0 + 0 +LINE + 5 +8A0 + 8 +0 + 62 + 0 + 10 +5568.465902 + 20 +3712.310601 + 30 +0.0 + 11 +5701.048423 + 21 +3844.893123 + 31 +0.0 + 0 +LINE + 5 +8A1 + 8 +0 + 62 + 0 + 10 +5833.630945 + 20 +3977.475644 + 30 +0.0 + 11 +5966.213466 + 21 +4110.058166 + 31 +0.0 + 0 +LINE + 5 +8A2 + 8 +0 + 62 + 0 + 10 +5421.25 + 20 +3830.259742 + 30 +0.0 + 11 +5435.88338 + 21 +3844.893123 + 31 +0.0 + 0 +LINE + 5 +8A3 + 8 +0 + 62 + 0 + 10 +5568.465902 + 20 +3977.475644 + 30 +0.0 + 11 +5701.048423 + 21 +4110.058166 + 31 +0.0 + 0 +LINE + 5 +8A4 + 8 +0 + 62 + 0 + 10 +5421.25 + 20 +4095.424785 + 30 +0.0 + 11 +5435.88338 + 21 +4110.058166 + 31 +0.0 + 0 +LINE + 5 +8A5 + 8 +0 + 62 + 0 + 10 +6098.795988 + 20 +2916.815472 + 30 +0.0 + 11 +6231.378509 + 21 +3049.397994 + 31 +0.0 + 0 +LINE + 5 +8A6 + 8 +0 + 62 + 0 + 10 +6363.961031 + 20 +3181.980515 + 30 +0.0 + 11 +6496.543552 + 21 +3314.563037 + 31 +0.0 + 0 +LINE + 5 +8A7 + 8 +0 + 62 + 0 + 10 +6629.126074 + 20 +3447.145558 + 30 +0.0 + 11 +6761.708595 + 21 +3579.72808 + 31 +0.0 + 0 +LINE + 5 +8A8 + 8 +0 + 62 + 0 + 10 +6894.291117 + 20 +3712.310601 + 30 +0.0 + 11 +7026.873638 + 21 +3844.893123 + 31 +0.0 + 0 +LINE + 5 +8A9 + 8 +0 + 62 + 0 + 10 +7159.45616 + 20 +3977.475644 + 30 +0.0 + 11 +7292.038681 + 21 +4110.058166 + 31 +0.0 + 0 +LINE + 5 +8AA + 8 +0 + 62 + 0 + 10 +6363.961031 + 20 +2916.815472 + 30 +0.0 + 11 +6496.543552 + 21 +3049.397994 + 31 +0.0 + 0 +LINE + 5 +8AB + 8 +0 + 62 + 0 + 10 +6629.126074 + 20 +3181.980515 + 30 +0.0 + 11 +6761.708595 + 21 +3314.563037 + 31 +0.0 + 0 +LINE + 5 +8AC + 8 +0 + 62 + 0 + 10 +6894.291117 + 20 +3447.145558 + 30 +0.0 + 11 +7026.873638 + 21 +3579.72808 + 31 +0.0 + 0 +LINE + 5 +8AD + 8 +0 + 62 + 0 + 10 +7159.45616 + 20 +3712.310601 + 30 +0.0 + 11 +7292.038681 + 21 +3844.893123 + 31 +0.0 + 0 +LINE + 5 +8AE + 8 +0 + 62 + 0 + 10 +7424.621202 + 20 +3977.475644 + 30 +0.0 + 11 +7557.203724 + 21 +4110.058166 + 31 +0.0 + 0 +LINE + 5 +8AF + 8 +0 + 62 + 0 + 10 +6629.126074 + 20 +2916.815472 + 30 +0.0 + 11 +6761.708595 + 21 +3049.397994 + 31 +0.0 + 0 +LINE + 5 +8B0 + 8 +0 + 62 + 0 + 10 +6894.291117 + 20 +3181.980515 + 30 +0.0 + 11 +7026.873638 + 21 +3314.563037 + 31 +0.0 + 0 +LINE + 5 +8B1 + 8 +0 + 62 + 0 + 10 +7159.45616 + 20 +3447.145558 + 30 +0.0 + 11 +7292.038681 + 21 +3579.72808 + 31 +0.0 + 0 +LINE + 5 +8B2 + 8 +0 + 62 + 0 + 10 +7424.621202 + 20 +3712.310601 + 30 +0.0 + 11 +7557.203724 + 21 +3844.893123 + 31 +0.0 + 0 +LINE + 5 +8B3 + 8 +0 + 62 + 0 + 10 +7689.786245 + 20 +3977.475644 + 30 +0.0 + 11 +7822.368767 + 21 +4110.058166 + 31 +0.0 + 0 +LINE + 5 +8B4 + 8 +0 + 62 + 0 + 10 +6894.291117 + 20 +2916.815472 + 30 +0.0 + 11 +7026.873638 + 21 +3049.397994 + 31 +0.0 + 0 +LINE + 5 +8B5 + 8 +0 + 62 + 0 + 10 +7159.45616 + 20 +3181.980515 + 30 +0.0 + 11 +7292.038681 + 21 +3314.563037 + 31 +0.0 + 0 +LINE + 5 +8B6 + 8 +0 + 62 + 0 + 10 +7424.621202 + 20 +3447.145558 + 30 +0.0 + 11 +7557.203724 + 21 +3579.72808 + 31 +0.0 + 0 +LINE + 5 +8B7 + 8 +0 + 62 + 0 + 10 +7689.786245 + 20 +3712.310601 + 30 +0.0 + 11 +7822.368767 + 21 +3844.893123 + 31 +0.0 + 0 +LINE + 5 +8B8 + 8 +0 + 62 + 0 + 10 +7159.45616 + 20 +2916.815472 + 30 +0.0 + 11 +7292.038681 + 21 +3049.397994 + 31 +0.0 + 0 +LINE + 5 +8B9 + 8 +0 + 62 + 0 + 10 +7424.621202 + 20 +3181.980515 + 30 +0.0 + 11 +7557.203724 + 21 +3314.563037 + 31 +0.0 + 0 +LINE + 5 +8BA + 8 +0 + 62 + 0 + 10 +7689.786245 + 20 +3447.145558 + 30 +0.0 + 11 +7822.368767 + 21 +3579.72808 + 31 +0.0 + 0 +LINE + 5 +8BB + 8 +0 + 62 + 0 + 10 +7424.621202 + 20 +2916.815472 + 30 +0.0 + 11 +7557.203724 + 21 +3049.397994 + 31 +0.0 + 0 +LINE + 5 +8BC + 8 +0 + 62 + 0 + 10 +7689.786245 + 20 +3181.980515 + 30 +0.0 + 11 +7822.368767 + 21 +3314.563037 + 31 +0.0 + 0 +LINE + 5 +8BD + 8 +0 + 62 + 0 + 10 +7689.786245 + 20 +2916.815472 + 30 +0.0 + 11 +7822.368767 + 21 +3049.397994 + 31 +0.0 + 0 +ENDBLK + 5 +8BE + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X38 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X38 + 1 + + 0 +LINE + 5 +8C0 + 8 +0 + 62 + 0 + 10 +6000.0 + 20 +5022.94732 + 30 +0.0 + 11 +6025.0 + 21 +5022.94732 + 31 +0.0 + 0 +LINE + 5 +8C1 + 8 +0 + 62 + 0 + 10 +6075.0 + 20 +5022.94732 + 30 +0.0 + 11 +6100.0 + 21 +5022.94732 + 31 +0.0 + 0 +LINE + 5 +8C2 + 8 +0 + 62 + 0 + 10 +5968.4375 + 20 +5044.597955 + 30 +0.0 + 11 +5987.5 + 21 +5044.597955 + 31 +0.0 + 0 +LINE + 5 +8C3 + 8 +0 + 62 + 0 + 10 +6037.5 + 20 +5044.597955 + 30 +0.0 + 11 +6062.5 + 21 +5044.597955 + 31 +0.0 + 0 +LINE + 5 +8C4 + 8 +0 + 62 + 0 + 10 +6112.5 + 20 +5044.597955 + 30 +0.0 + 11 +6137.5 + 21 +5044.597955 + 31 +0.0 + 0 +LINE + 5 +8C5 + 8 +0 + 62 + 0 + 10 +6000.0 + 20 +5066.24859 + 30 +0.0 + 11 +6025.0 + 21 +5066.24859 + 31 +0.0 + 0 +LINE + 5 +8C6 + 8 +0 + 62 + 0 + 10 +6075.0 + 20 +5066.24859 + 30 +0.0 + 11 +6100.0 + 21 +5066.24859 + 31 +0.0 + 0 +LINE + 5 +8C7 + 8 +0 + 62 + 0 + 10 +5968.4375 + 20 +5087.899225 + 30 +0.0 + 11 +5987.5 + 21 +5087.899225 + 31 +0.0 + 0 +LINE + 5 +8C8 + 8 +0 + 62 + 0 + 10 +6037.5 + 20 +5087.899225 + 30 +0.0 + 11 +6062.5 + 21 +5087.899225 + 31 +0.0 + 0 +LINE + 5 +8C9 + 8 +0 + 62 + 0 + 10 +6112.5 + 20 +5087.899225 + 30 +0.0 + 11 +6137.5 + 21 +5087.899225 + 31 +0.0 + 0 +LINE + 5 +8CA + 8 +0 + 62 + 0 + 10 +6000.0 + 20 +5109.54986 + 30 +0.0 + 11 +6025.0 + 21 +5109.54986 + 31 +0.0 + 0 +LINE + 5 +8CB + 8 +0 + 62 + 0 + 10 +6075.0 + 20 +5109.54986 + 30 +0.0 + 11 +6100.0 + 21 +5109.54986 + 31 +0.0 + 0 +LINE + 5 +8CC + 8 +0 + 62 + 0 + 10 +5968.4375 + 20 +5131.200495 + 30 +0.0 + 11 +5987.5 + 21 +5131.200495 + 31 +0.0 + 0 +LINE + 5 +8CD + 8 +0 + 62 + 0 + 10 +6037.5 + 20 +5131.200495 + 30 +0.0 + 11 +6062.5 + 21 +5131.200495 + 31 +0.0 + 0 +LINE + 5 +8CE + 8 +0 + 62 + 0 + 10 +6112.5 + 20 +5131.200495 + 30 +0.0 + 11 +6137.5 + 21 +5131.200495 + 31 +0.0 + 0 +LINE + 5 +8CF + 8 +0 + 62 + 0 + 10 +6000.0 + 20 +5152.85113 + 30 +0.0 + 11 +6025.0 + 21 +5152.85113 + 31 +0.0 + 0 +LINE + 5 +8D0 + 8 +0 + 62 + 0 + 10 +6075.0 + 20 +5152.85113 + 30 +0.0 + 11 +6100.0 + 21 +5152.85113 + 31 +0.0 + 0 +LINE + 5 +8D1 + 8 +0 + 62 + 0 + 10 +6150.0 + 20 +5152.85113 + 30 +0.0 + 11 +6157.140452 + 21 +5152.85113 + 31 +0.0 + 0 +LINE + 5 +8D2 + 8 +0 + 62 + 0 + 10 +5968.4375 + 20 +5174.501765 + 30 +0.0 + 11 +5987.5 + 21 +5174.501765 + 31 +0.0 + 0 +LINE + 5 +8D3 + 8 +0 + 62 + 0 + 10 +6037.5 + 20 +5174.501765 + 30 +0.0 + 11 +6062.5 + 21 +5174.501765 + 31 +0.0 + 0 +LINE + 5 +8D4 + 8 +0 + 62 + 0 + 10 +6112.5 + 20 +5174.501765 + 30 +0.0 + 11 +6137.5 + 21 +5174.501765 + 31 +0.0 + 0 +LINE + 5 +8D5 + 8 +0 + 62 + 0 + 10 +6000.0 + 20 +5196.1524 + 30 +0.0 + 11 +6025.0 + 21 +5196.1524 + 31 +0.0 + 0 +LINE + 5 +8D6 + 8 +0 + 62 + 0 + 10 +6075.0 + 20 +5196.1524 + 30 +0.0 + 11 +6100.0 + 21 +5196.1524 + 31 +0.0 + 0 +LINE + 5 +8D7 + 8 +0 + 62 + 0 + 10 +6150.0 + 20 +5196.1524 + 30 +0.0 + 11 +6174.46096 + 21 +5196.1524 + 31 +0.0 + 0 +LINE + 5 +8D8 + 8 +0 + 62 + 0 + 10 +5968.4375 + 20 +5217.803035 + 30 +0.0 + 11 +5987.5 + 21 +5217.803035 + 31 +0.0 + 0 +LINE + 5 +8D9 + 8 +0 + 62 + 0 + 10 +6037.5 + 20 +5217.803035 + 30 +0.0 + 11 +6062.5 + 21 +5217.803035 + 31 +0.0 + 0 +LINE + 5 +8DA + 8 +0 + 62 + 0 + 10 +6112.5 + 20 +5217.803035 + 30 +0.0 + 11 +6137.5 + 21 +5217.803035 + 31 +0.0 + 0 +LINE + 5 +8DB + 8 +0 + 62 + 0 + 10 +6000.0 + 20 +5239.45367 + 30 +0.0 + 11 +6025.0 + 21 +5239.45367 + 31 +0.0 + 0 +LINE + 5 +8DC + 8 +0 + 62 + 0 + 10 +6075.0 + 20 +5239.45367 + 30 +0.0 + 11 +6100.0 + 21 +5239.45367 + 31 +0.0 + 0 +LINE + 5 +8DD + 8 +0 + 62 + 0 + 10 +6150.0 + 20 +5239.45367 + 30 +0.0 + 11 +6175.0 + 21 +5239.45367 + 31 +0.0 + 0 +LINE + 5 +8DE + 8 +0 + 62 + 0 + 10 +5968.4375 + 20 +5261.104305 + 30 +0.0 + 11 +5987.5 + 21 +5261.104305 + 31 +0.0 + 0 +LINE + 5 +8DF + 8 +0 + 62 + 0 + 10 +6037.5 + 20 +5261.104305 + 30 +0.0 + 11 +6062.5 + 21 +5261.104305 + 31 +0.0 + 0 +LINE + 5 +8E0 + 8 +0 + 62 + 0 + 10 +6112.5 + 20 +5261.104305 + 30 +0.0 + 11 +6137.5 + 21 +5261.104305 + 31 +0.0 + 0 +LINE + 5 +8E1 + 8 +0 + 62 + 0 + 10 +6000.0 + 20 +5282.75494 + 30 +0.0 + 11 +6025.0 + 21 +5282.75494 + 31 +0.0 + 0 +LINE + 5 +8E2 + 8 +0 + 62 + 0 + 10 +6075.0 + 20 +5282.75494 + 30 +0.0 + 11 +6100.0 + 21 +5282.75494 + 31 +0.0 + 0 +LINE + 5 +8E3 + 8 +0 + 62 + 0 + 10 +6150.0 + 20 +5282.75494 + 30 +0.0 + 11 +6175.0 + 21 +5282.75494 + 31 +0.0 + 0 +LINE + 5 +8E4 + 8 +0 + 62 + 0 + 10 +5968.4375 + 20 +5304.405575 + 30 +0.0 + 11 +5987.5 + 21 +5304.405575 + 31 +0.0 + 0 +LINE + 5 +8E5 + 8 +0 + 62 + 0 + 10 +6037.5 + 20 +5304.405575 + 30 +0.0 + 11 +6062.5 + 21 +5304.405575 + 31 +0.0 + 0 +LINE + 5 +8E6 + 8 +0 + 62 + 0 + 10 +6112.5 + 20 +5304.405575 + 30 +0.0 + 11 +6137.5 + 21 +5304.405575 + 31 +0.0 + 0 +LINE + 5 +8E7 + 8 +0 + 62 + 0 + 10 +6000.0 + 20 +5326.05621 + 30 +0.0 + 11 +6025.0 + 21 +5326.05621 + 31 +0.0 + 0 +LINE + 5 +8E8 + 8 +0 + 62 + 0 + 10 +6075.0 + 20 +5326.05621 + 30 +0.0 + 11 +6100.0 + 21 +5326.05621 + 31 +0.0 + 0 +LINE + 5 +8E9 + 8 +0 + 62 + 0 + 10 +6150.0 + 20 +5326.05621 + 30 +0.0 + 11 +6175.0 + 21 +5326.05621 + 31 +0.0 + 0 +LINE + 5 +8EA + 8 +0 + 62 + 0 + 10 +5968.4375 + 20 +5347.706845 + 30 +0.0 + 11 +5987.5 + 21 +5347.706845 + 31 +0.0 + 0 +LINE + 5 +8EB + 8 +0 + 62 + 0 + 10 +6037.5 + 20 +5347.706845 + 30 +0.0 + 11 +6062.5 + 21 +5347.706845 + 31 +0.0 + 0 +LINE + 5 +8EC + 8 +0 + 62 + 0 + 10 +6112.5 + 20 +5347.706845 + 30 +0.0 + 11 +6137.5 + 21 +5347.706845 + 31 +0.0 + 0 +LINE + 5 +8ED + 8 +0 + 62 + 0 + 10 +6000.0 + 20 +5369.35748 + 30 +0.0 + 11 +6025.0 + 21 +5369.35748 + 31 +0.0 + 0 +LINE + 5 +8EE + 8 +0 + 62 + 0 + 10 +6075.0 + 20 +5369.35748 + 30 +0.0 + 11 +6100.0 + 21 +5369.35748 + 31 +0.0 + 0 +LINE + 5 +8EF + 8 +0 + 62 + 0 + 10 +6150.0 + 20 +5369.35748 + 30 +0.0 + 11 +6175.0 + 21 +5369.35748 + 31 +0.0 + 0 +LINE + 5 +8F0 + 8 +0 + 62 + 0 + 10 +5968.4375 + 20 +5391.008115 + 30 +0.0 + 11 +5987.5 + 21 +5391.008115 + 31 +0.0 + 0 +LINE + 5 +8F1 + 8 +0 + 62 + 0 + 10 +6037.5 + 20 +5391.008115 + 30 +0.0 + 11 +6062.5 + 21 +5391.008115 + 31 +0.0 + 0 +LINE + 5 +8F2 + 8 +0 + 62 + 0 + 10 +6112.5 + 20 +5391.008115 + 30 +0.0 + 11 +6137.5 + 21 +5391.008115 + 31 +0.0 + 0 +LINE + 5 +8F3 + 8 +0 + 62 + 0 + 10 +6000.0 + 20 +5412.65875 + 30 +0.0 + 11 +6025.0 + 21 +5412.65875 + 31 +0.0 + 0 +LINE + 5 +8F4 + 8 +0 + 62 + 0 + 10 +6075.0 + 20 +5412.65875 + 30 +0.0 + 11 +6100.0 + 21 +5412.65875 + 31 +0.0 + 0 +LINE + 5 +8F5 + 8 +0 + 62 + 0 + 10 +6150.0 + 20 +5412.65875 + 30 +0.0 + 11 +6175.0 + 21 +5412.65875 + 31 +0.0 + 0 +LINE + 5 +8F6 + 8 +0 + 62 + 0 + 10 +5968.4375 + 20 +5434.309385 + 30 +0.0 + 11 +5987.5 + 21 +5434.309385 + 31 +0.0 + 0 +LINE + 5 +8F7 + 8 +0 + 62 + 0 + 10 +6037.5 + 20 +5434.309385 + 30 +0.0 + 11 +6062.5 + 21 +5434.309385 + 31 +0.0 + 0 +LINE + 5 +8F8 + 8 +0 + 62 + 0 + 10 +6112.5 + 20 +5434.309385 + 30 +0.0 + 11 +6137.5 + 21 +5434.309385 + 31 +0.0 + 0 +LINE + 5 +8F9 + 8 +0 + 62 + 0 + 10 +6000.0 + 20 +5455.96002 + 30 +0.0 + 11 +6025.0 + 21 +5455.96002 + 31 +0.0 + 0 +LINE + 5 +8FA + 8 +0 + 62 + 0 + 10 +6075.0 + 20 +5455.96002 + 30 +0.0 + 11 +6100.0 + 21 +5455.96002 + 31 +0.0 + 0 +LINE + 5 +8FB + 8 +0 + 62 + 0 + 10 +6150.0 + 20 +5455.96002 + 30 +0.0 + 11 +6175.0 + 21 +5455.96002 + 31 +0.0 + 0 +LINE + 5 +8FC + 8 +0 + 62 + 0 + 10 +5968.4375 + 20 +5477.610655 + 30 +0.0 + 11 +5987.5 + 21 +5477.610655 + 31 +0.0 + 0 +LINE + 5 +8FD + 8 +0 + 62 + 0 + 10 +6037.5 + 20 +5477.610655 + 30 +0.0 + 11 +6062.5 + 21 +5477.610655 + 31 +0.0 + 0 +LINE + 5 +8FE + 8 +0 + 62 + 0 + 10 +6112.5 + 20 +5477.610655 + 30 +0.0 + 11 +6137.5 + 21 +5477.610655 + 31 +0.0 + 0 +LINE + 5 +8FF + 8 +0 + 62 + 0 + 10 +6000.0 + 20 +5499.26129 + 30 +0.0 + 11 +6025.0 + 21 +5499.26129 + 31 +0.0 + 0 +LINE + 5 +900 + 8 +0 + 62 + 0 + 10 +6075.0 + 20 +5499.26129 + 30 +0.0 + 11 +6100.0 + 21 +5499.26129 + 31 +0.0 + 0 +LINE + 5 +901 + 8 +0 + 62 + 0 + 10 +6150.0 + 20 +5499.26129 + 30 +0.0 + 11 +6175.0 + 21 +5499.26129 + 31 +0.0 + 0 +LINE + 5 +902 + 8 +0 + 62 + 0 + 10 +5968.4375 + 20 +5520.911925 + 30 +0.0 + 11 +5987.5 + 21 +5520.911925 + 31 +0.0 + 0 +LINE + 5 +903 + 8 +0 + 62 + 0 + 10 +6037.5 + 20 +5520.911925 + 30 +0.0 + 11 +6062.5 + 21 +5520.911925 + 31 +0.0 + 0 +LINE + 5 +904 + 8 +0 + 62 + 0 + 10 +6112.5 + 20 +5520.911925 + 30 +0.0 + 11 +6137.5 + 21 +5520.911925 + 31 +0.0 + 0 +LINE + 5 +905 + 8 +0 + 62 + 0 + 10 +6000.0 + 20 +5542.56256 + 30 +0.0 + 11 +6025.0 + 21 +5542.56256 + 31 +0.0 + 0 +LINE + 5 +906 + 8 +0 + 62 + 0 + 10 +6075.0 + 20 +5542.56256 + 30 +0.0 + 11 +6100.0 + 21 +5542.56256 + 31 +0.0 + 0 +LINE + 5 +907 + 8 +0 + 62 + 0 + 10 +6150.0 + 20 +5542.56256 + 30 +0.0 + 11 +6175.0 + 21 +5542.56256 + 31 +0.0 + 0 +LINE + 5 +908 + 8 +0 + 62 + 0 + 10 +5968.4375 + 20 +5564.213195 + 30 +0.0 + 11 +5987.5 + 21 +5564.213195 + 31 +0.0 + 0 +LINE + 5 +909 + 8 +0 + 62 + 0 + 10 +6037.5 + 20 +5564.213195 + 30 +0.0 + 11 +6062.5 + 21 +5564.213195 + 31 +0.0 + 0 +LINE + 5 +90A + 8 +0 + 62 + 0 + 10 +6112.5 + 20 +5564.213195 + 30 +0.0 + 11 +6137.5 + 21 +5564.213195 + 31 +0.0 + 0 +LINE + 5 +90B + 8 +0 + 62 + 0 + 10 +6000.0 + 20 +5585.86383 + 30 +0.0 + 11 +6025.0 + 21 +5585.86383 + 31 +0.0 + 0 +LINE + 5 +90C + 8 +0 + 62 + 0 + 10 +6075.0 + 20 +5585.86383 + 30 +0.0 + 11 +6100.0 + 21 +5585.86383 + 31 +0.0 + 0 +LINE + 5 +90D + 8 +0 + 62 + 0 + 10 +6150.0 + 20 +5585.86383 + 30 +0.0 + 11 +6175.0 + 21 +5585.86383 + 31 +0.0 + 0 +LINE + 5 +90E + 8 +0 + 62 + 0 + 10 +5968.4375 + 20 +5607.514465 + 30 +0.0 + 11 +5987.5 + 21 +5607.514465 + 31 +0.0 + 0 +LINE + 5 +90F + 8 +0 + 62 + 0 + 10 +6037.5 + 20 +5607.514465 + 30 +0.0 + 11 +6062.5 + 21 +5607.514465 + 31 +0.0 + 0 +LINE + 5 +910 + 8 +0 + 62 + 0 + 10 +6112.5 + 20 +5607.514465 + 30 +0.0 + 11 +6137.5 + 21 +5607.514465 + 31 +0.0 + 0 +LINE + 5 +911 + 8 +0 + 62 + 0 + 10 +6000.0 + 20 +5629.1651 + 30 +0.0 + 11 +6025.0 + 21 +5629.1651 + 31 +0.0 + 0 +LINE + 5 +912 + 8 +0 + 62 + 0 + 10 +6075.0 + 20 +5629.1651 + 30 +0.0 + 11 +6100.0 + 21 +5629.1651 + 31 +0.0 + 0 +LINE + 5 +913 + 8 +0 + 62 + 0 + 10 +6150.0 + 20 +5629.1651 + 30 +0.0 + 11 +6175.0 + 21 +5629.1651 + 31 +0.0 + 0 +LINE + 5 +914 + 8 +0 + 62 + 0 + 10 +5968.4375 + 20 +5650.815735 + 30 +0.0 + 11 +5987.5 + 21 +5650.815735 + 31 +0.0 + 0 +LINE + 5 +915 + 8 +0 + 62 + 0 + 10 +6037.5 + 20 +5650.815735 + 30 +0.0 + 11 +6062.5 + 21 +5650.815735 + 31 +0.0 + 0 +LINE + 5 +916 + 8 +0 + 62 + 0 + 10 +6112.5 + 20 +5650.815735 + 30 +0.0 + 11 +6137.5 + 21 +5650.815735 + 31 +0.0 + 0 +LINE + 5 +917 + 8 +0 + 62 + 0 + 10 +6000.0 + 20 +5672.46637 + 30 +0.0 + 11 +6025.0 + 21 +5672.46637 + 31 +0.0 + 0 +LINE + 5 +918 + 8 +0 + 62 + 0 + 10 +6075.0 + 20 +5672.46637 + 30 +0.0 + 11 +6100.0 + 21 +5672.46637 + 31 +0.0 + 0 +LINE + 5 +919 + 8 +0 + 62 + 0 + 10 +6150.0 + 20 +5672.46637 + 30 +0.0 + 11 +6175.0 + 21 +5672.46637 + 31 +0.0 + 0 +LINE + 5 +91A + 8 +0 + 62 + 0 + 10 +5968.4375 + 20 +5694.117005 + 30 +0.0 + 11 +5987.5 + 21 +5694.117005 + 31 +0.0 + 0 +LINE + 5 +91B + 8 +0 + 62 + 0 + 10 +6037.5 + 20 +5694.117005 + 30 +0.0 + 11 +6062.5 + 21 +5694.117005 + 31 +0.0 + 0 +LINE + 5 +91C + 8 +0 + 62 + 0 + 10 +6112.5 + 20 +5694.117005 + 30 +0.0 + 11 +6137.5 + 21 +5694.117005 + 31 +0.0 + 0 +LINE + 5 +91D + 8 +0 + 62 + 0 + 10 +6000.0 + 20 +5715.76764 + 30 +0.0 + 11 +6025.0 + 21 +5715.76764 + 31 +0.0 + 0 +LINE + 5 +91E + 8 +0 + 62 + 0 + 10 +6075.0 + 20 +5715.76764 + 30 +0.0 + 11 +6100.0 + 21 +5715.76764 + 31 +0.0 + 0 +LINE + 5 +91F + 8 +0 + 62 + 0 + 10 +6150.0 + 20 +5715.76764 + 30 +0.0 + 11 +6175.0 + 21 +5715.76764 + 31 +0.0 + 0 +LINE + 5 +920 + 8 +0 + 62 + 0 + 10 +5968.4375 + 20 +5737.418275 + 30 +0.0 + 11 +5987.5 + 21 +5737.418275 + 31 +0.0 + 0 +LINE + 5 +921 + 8 +0 + 62 + 0 + 10 +6037.5 + 20 +5737.418275 + 30 +0.0 + 11 +6062.5 + 21 +5737.418275 + 31 +0.0 + 0 +LINE + 5 +922 + 8 +0 + 62 + 0 + 10 +6112.5 + 20 +5737.418275 + 30 +0.0 + 11 +6137.5 + 21 +5737.418275 + 31 +0.0 + 0 +LINE + 5 +923 + 8 +0 + 62 + 0 + 10 +6000.0 + 20 +5759.06891 + 30 +0.0 + 11 +6025.0 + 21 +5759.06891 + 31 +0.0 + 0 +LINE + 5 +924 + 8 +0 + 62 + 0 + 10 +6075.0 + 20 +5759.06891 + 30 +0.0 + 11 +6100.0 + 21 +5759.06891 + 31 +0.0 + 0 +LINE + 5 +925 + 8 +0 + 62 + 0 + 10 +6150.0 + 20 +5759.06891 + 30 +0.0 + 11 +6175.0 + 21 +5759.06891 + 31 +0.0 + 0 +LINE + 5 +926 + 8 +0 + 62 + 0 + 10 +5968.4375 + 20 +5780.719545 + 30 +0.0 + 11 +5987.5 + 21 +5780.719545 + 31 +0.0 + 0 +LINE + 5 +927 + 8 +0 + 62 + 0 + 10 +6037.5 + 20 +5780.719545 + 30 +0.0 + 11 +6062.5 + 21 +5780.719545 + 31 +0.0 + 0 +LINE + 5 +928 + 8 +0 + 62 + 0 + 10 +6112.5 + 20 +5780.719545 + 30 +0.0 + 11 +6137.5 + 21 +5780.719545 + 31 +0.0 + 0 +LINE + 5 +929 + 8 +0 + 62 + 0 + 10 +5968.4375 + 20 +5001.296685 + 30 +0.0 + 11 +5987.5 + 21 +5001.296685 + 31 +0.0 + 0 +LINE + 5 +92A + 8 +0 + 62 + 0 + 10 +6037.5 + 20 +5001.296685 + 30 +0.0 + 11 +6062.5 + 21 +5001.296685 + 31 +0.0 + 0 +LINE + 5 +92B + 8 +0 + 62 + 0 + 10 +6112.5 + 20 +5001.296685 + 30 +0.0 + 11 +6137.5 + 21 +5001.296685 + 31 +0.0 + 0 +LINE + 5 +92C + 8 +0 + 62 + 0 + 10 +6000.0 + 20 +4979.64605 + 30 +0.0 + 11 +6025.0 + 21 +4979.64605 + 31 +0.0 + 0 +LINE + 5 +92D + 8 +0 + 62 + 0 + 10 +6075.0 + 20 +4979.64605 + 30 +0.0 + 11 +6100.0 + 21 +4979.64605 + 31 +0.0 + 0 +LINE + 5 +92E + 8 +0 + 62 + 0 + 10 +5968.4375 + 20 +4957.995415 + 30 +0.0 + 11 +5987.5 + 21 +4957.995415 + 31 +0.0 + 0 +LINE + 5 +92F + 8 +0 + 62 + 0 + 10 +6037.5 + 20 +4957.995415 + 30 +0.0 + 11 +6062.5 + 21 +4957.995415 + 31 +0.0 + 0 +LINE + 5 +930 + 8 +0 + 62 + 0 + 10 +6112.5 + 20 +4957.995415 + 30 +0.0 + 11 +6137.5 + 21 +4957.995415 + 31 +0.0 + 0 +LINE + 5 +931 + 8 +0 + 62 + 0 + 10 +6000.0 + 20 +4936.34478 + 30 +0.0 + 11 +6025.0 + 21 +4936.34478 + 31 +0.0 + 0 +LINE + 5 +932 + 8 +0 + 62 + 0 + 10 +6075.0 + 20 +4936.34478 + 30 +0.0 + 11 +6100.0 + 21 +4936.34478 + 31 +0.0 + 0 +LINE + 5 +933 + 8 +0 + 62 + 0 + 10 +5968.4375 + 20 +4914.694145 + 30 +0.0 + 11 +5987.5 + 21 +4914.694145 + 31 +0.0 + 0 +LINE + 5 +934 + 8 +0 + 62 + 0 + 10 +6037.5 + 20 +4914.694145 + 30 +0.0 + 11 +6062.5 + 21 +4914.694145 + 31 +0.0 + 0 +LINE + 5 +935 + 8 +0 + 62 + 0 + 10 +6112.5 + 20 +4914.694145 + 30 +0.0 + 11 +6137.5 + 21 +4914.694145 + 31 +0.0 + 0 +LINE + 5 +936 + 8 +0 + 62 + 0 + 10 +6000.0 + 20 +4893.04351 + 30 +0.0 + 11 +6025.0 + 21 +4893.04351 + 31 +0.0 + 0 +LINE + 5 +937 + 8 +0 + 62 + 0 + 10 +6075.0 + 20 +4893.04351 + 30 +0.0 + 11 +6100.0 + 21 +4893.04351 + 31 +0.0 + 0 +LINE + 5 +938 + 8 +0 + 62 + 0 + 10 +5968.4375 + 20 +4871.392875 + 30 +0.0 + 11 +5987.5 + 21 +4871.392875 + 31 +0.0 + 0 +LINE + 5 +939 + 8 +0 + 62 + 0 + 10 +6037.5 + 20 +4871.392875 + 30 +0.0 + 11 +6062.5 + 21 +4871.392875 + 31 +0.0 + 0 +LINE + 5 +93A + 8 +0 + 62 + 0 + 10 +6112.5 + 20 +4871.392875 + 30 +0.0 + 11 +6137.5 + 21 +4871.392875 + 31 +0.0 + 0 +LINE + 5 +93B + 8 +0 + 62 + 0 + 10 +6000.0 + 20 +4849.74224 + 30 +0.0 + 11 +6025.0 + 21 +4849.74224 + 31 +0.0 + 0 +LINE + 5 +93C + 8 +0 + 62 + 0 + 10 +6075.0 + 20 +4849.74224 + 30 +0.0 + 11 +6100.0 + 21 +4849.74224 + 31 +0.0 + 0 +LINE + 5 +93D + 8 +0 + 62 + 0 + 10 +5968.4375 + 20 +4828.091605 + 30 +0.0 + 11 +5987.5 + 21 +4828.091605 + 31 +0.0 + 0 +LINE + 5 +93E + 8 +0 + 62 + 0 + 10 +6037.5 + 20 +4828.091605 + 30 +0.0 + 11 +6062.5 + 21 +4828.091605 + 31 +0.0 + 0 +LINE + 5 +93F + 8 +0 + 62 + 0 + 10 +6112.5 + 20 +4828.091605 + 30 +0.0 + 11 +6137.5 + 21 +4828.091605 + 31 +0.0 + 0 +LINE + 5 +940 + 8 +0 + 62 + 0 + 10 +6000.0 + 20 +4806.44097 + 30 +0.0 + 11 +6025.0 + 21 +4806.44097 + 31 +0.0 + 0 +LINE + 5 +941 + 8 +0 + 62 + 0 + 10 +6075.0 + 20 +4806.44097 + 30 +0.0 + 11 +6100.0 + 21 +4806.44097 + 31 +0.0 + 0 +LINE + 5 +942 + 8 +0 + 62 + 0 + 10 +5968.4375 + 20 +4784.790335 + 30 +0.0 + 11 +5987.5 + 21 +4784.790335 + 31 +0.0 + 0 +LINE + 5 +943 + 8 +0 + 62 + 0 + 10 +6037.5 + 20 +4784.790335 + 30 +0.0 + 11 +6062.5 + 21 +4784.790335 + 31 +0.0 + 0 +LINE + 5 +944 + 8 +0 + 62 + 0 + 10 +6112.5 + 20 +4784.790335 + 30 +0.0 + 11 +6137.5 + 21 +4784.790335 + 31 +0.0 + 0 +LINE + 5 +945 + 8 +0 + 62 + 0 + 10 +6000.0 + 20 +4763.1397 + 30 +0.0 + 11 +6025.0 + 21 +4763.1397 + 31 +0.0 + 0 +LINE + 5 +946 + 8 +0 + 62 + 0 + 10 +6075.0 + 20 +4763.1397 + 30 +0.0 + 11 +6100.0 + 21 +4763.1397 + 31 +0.0 + 0 +LINE + 5 +947 + 8 +0 + 62 + 0 + 10 +5968.4375 + 20 +4741.489065 + 30 +0.0 + 11 +5987.5 + 21 +4741.489065 + 31 +0.0 + 0 +LINE + 5 +948 + 8 +0 + 62 + 0 + 10 +6037.5 + 20 +4741.489065 + 30 +0.0 + 11 +6062.5 + 21 +4741.489065 + 31 +0.0 + 0 +LINE + 5 +949 + 8 +0 + 62 + 0 + 10 +6112.5 + 20 +4741.489065 + 30 +0.0 + 11 +6137.5 + 21 +4741.489065 + 31 +0.0 + 0 +LINE + 5 +94A + 8 +0 + 62 + 0 + 10 +6000.0 + 20 +4719.83843 + 30 +0.0 + 11 +6025.0 + 21 +4719.83843 + 31 +0.0 + 0 +LINE + 5 +94B + 8 +0 + 62 + 0 + 10 +6075.0 + 20 +4719.83843 + 30 +0.0 + 11 +6100.0 + 21 +4719.83843 + 31 +0.0 + 0 +LINE + 5 +94C + 8 +0 + 62 + 0 + 10 +5968.4375 + 20 +4698.187795 + 30 +0.0 + 11 +5987.5 + 21 +4698.187795 + 31 +0.0 + 0 +LINE + 5 +94D + 8 +0 + 62 + 0 + 10 +6037.5 + 20 +4698.187795 + 30 +0.0 + 11 +6062.5 + 21 +4698.187795 + 31 +0.0 + 0 +LINE + 5 +94E + 8 +0 + 62 + 0 + 10 +6112.5 + 20 +4698.187795 + 30 +0.0 + 11 +6137.5 + 21 +4698.187795 + 31 +0.0 + 0 +LINE + 5 +94F + 8 +0 + 62 + 0 + 10 +6000.0 + 20 +4676.53716 + 30 +0.0 + 11 +6025.0 + 21 +4676.53716 + 31 +0.0 + 0 +LINE + 5 +950 + 8 +0 + 62 + 0 + 10 +6075.0 + 20 +4676.53716 + 30 +0.0 + 11 +6100.0 + 21 +4676.53716 + 31 +0.0 + 0 +LINE + 5 +951 + 8 +0 + 62 + 0 + 10 +5968.4375 + 20 +4654.886525 + 30 +0.0 + 11 +5987.5 + 21 +4654.886525 + 31 +0.0 + 0 +LINE + 5 +952 + 8 +0 + 62 + 0 + 10 +6037.5 + 20 +4654.886525 + 30 +0.0 + 11 +6062.5 + 21 +4654.886525 + 31 +0.0 + 0 +LINE + 5 +953 + 8 +0 + 62 + 0 + 10 +6112.5 + 20 +4654.886525 + 30 +0.0 + 11 +6137.5 + 21 +4654.886525 + 31 +0.0 + 0 +LINE + 5 +954 + 8 +0 + 62 + 0 + 10 +6000.0 + 20 +4633.23589 + 30 +0.0 + 11 +6025.0 + 21 +4633.23589 + 31 +0.0 + 0 +LINE + 5 +955 + 8 +0 + 62 + 0 + 10 +6075.0 + 20 +4633.23589 + 30 +0.0 + 11 +6100.0 + 21 +4633.23589 + 31 +0.0 + 0 +LINE + 5 +956 + 8 +0 + 62 + 0 + 10 +5968.4375 + 20 +4611.585255 + 30 +0.0 + 11 +5987.5 + 21 +4611.585255 + 31 +0.0 + 0 +LINE + 5 +957 + 8 +0 + 62 + 0 + 10 +6037.5 + 20 +4611.585255 + 30 +0.0 + 11 +6062.5 + 21 +4611.585255 + 31 +0.0 + 0 +LINE + 5 +958 + 8 +0 + 62 + 0 + 10 +6112.5 + 20 +4611.585255 + 30 +0.0 + 11 +6137.5 + 21 +4611.585255 + 31 +0.0 + 0 +LINE + 5 +959 + 8 +0 + 62 + 0 + 10 +6000.0 + 20 +4589.93462 + 30 +0.0 + 11 +6025.0 + 21 +4589.93462 + 31 +0.0 + 0 +LINE + 5 +95A + 8 +0 + 62 + 0 + 10 +6075.0 + 20 +4589.93462 + 30 +0.0 + 11 +6100.0 + 21 +4589.93462 + 31 +0.0 + 0 +LINE + 5 +95B + 8 +0 + 62 + 0 + 10 +5968.4375 + 20 +4568.283985 + 30 +0.0 + 11 +5987.5 + 21 +4568.283985 + 31 +0.0 + 0 +LINE + 5 +95C + 8 +0 + 62 + 0 + 10 +6037.5 + 20 +4568.283985 + 30 +0.0 + 11 +6062.5 + 21 +4568.283985 + 31 +0.0 + 0 +LINE + 5 +95D + 8 +0 + 62 + 0 + 10 +6112.5 + 20 +4568.283985 + 30 +0.0 + 11 +6137.5 + 21 +4568.283985 + 31 +0.0 + 0 +LINE + 5 +95E + 8 +0 + 62 + 0 + 10 +6000.0 + 20 +4546.63335 + 30 +0.0 + 11 +6025.0 + 21 +4546.63335 + 31 +0.0 + 0 +LINE + 5 +95F + 8 +0 + 62 + 0 + 10 +6075.0 + 20 +4546.63335 + 30 +0.0 + 11 +6100.0 + 21 +4546.63335 + 31 +0.0 + 0 +LINE + 5 +960 + 8 +0 + 62 + 0 + 10 +5968.4375 + 20 +4524.982715 + 30 +0.0 + 11 +5987.5 + 21 +4524.982715 + 31 +0.0 + 0 +LINE + 5 +961 + 8 +0 + 62 + 0 + 10 +6037.5 + 20 +4524.982715 + 30 +0.0 + 11 +6062.5 + 21 +4524.982715 + 31 +0.0 + 0 +LINE + 5 +962 + 8 +0 + 62 + 0 + 10 +6112.5 + 20 +4524.982715 + 30 +0.0 + 11 +6137.5 + 21 +4524.982715 + 31 +0.0 + 0 +LINE + 5 +963 + 8 +0 + 62 + 0 + 10 +6000.0 + 20 +4503.33208 + 30 +0.0 + 11 +6025.0 + 21 +4503.33208 + 31 +0.0 + 0 +LINE + 5 +964 + 8 +0 + 62 + 0 + 10 +6075.0 + 20 +4503.33208 + 30 +0.0 + 11 +6100.0 + 21 +4503.33208 + 31 +0.0 + 0 +LINE + 5 +965 + 8 +0 + 62 + 0 + 10 +5968.4375 + 20 +4481.681445 + 30 +0.0 + 11 +5987.5 + 21 +4481.681445 + 31 +0.0 + 0 +LINE + 5 +966 + 8 +0 + 62 + 0 + 10 +6037.5 + 20 +4481.681445 + 30 +0.0 + 11 +6062.5 + 21 +4481.681445 + 31 +0.0 + 0 +LINE + 5 +967 + 8 +0 + 62 + 0 + 10 +6112.5 + 20 +4481.681445 + 30 +0.0 + 11 +6136.666968 + 21 +4481.681445 + 31 +0.0 + 0 +LINE + 5 +968 + 8 +0 + 62 + 0 + 10 +6000.0 + 20 +4460.03081 + 30 +0.0 + 11 +6025.0 + 21 +4460.03081 + 31 +0.0 + 0 +LINE + 5 +969 + 8 +0 + 62 + 0 + 10 +6075.0 + 20 +4460.03081 + 30 +0.0 + 11 +6100.0 + 21 +4460.03081 + 31 +0.0 + 0 +LINE + 5 +96A + 8 +0 + 62 + 0 + 10 +5968.4375 + 20 +4438.380175 + 30 +0.0 + 11 +5987.5 + 21 +4438.380175 + 31 +0.0 + 0 +LINE + 5 +96B + 8 +0 + 62 + 0 + 10 +6037.5 + 20 +4438.380175 + 30 +0.0 + 11 +6062.5 + 21 +4438.380175 + 31 +0.0 + 0 +LINE + 5 +96C + 8 +0 + 62 + 0 + 10 +6112.5 + 20 +4438.380175 + 30 +0.0 + 11 +6135.783269 + 21 +4438.380175 + 31 +0.0 + 0 +LINE + 5 +96D + 8 +0 + 62 + 0 + 10 +6000.0 + 20 +4416.72954 + 30 +0.0 + 11 +6025.0 + 21 +4416.72954 + 31 +0.0 + 0 +LINE + 5 +96E + 8 +0 + 62 + 0 + 10 +6075.0 + 20 +4416.72954 + 30 +0.0 + 11 +6100.0 + 21 +4416.72954 + 31 +0.0 + 0 +LINE + 5 +96F + 8 +0 + 62 + 0 + 10 +5968.4375 + 20 +4395.078905 + 30 +0.0 + 11 +5987.5 + 21 +4395.078905 + 31 +0.0 + 0 +LINE + 5 +970 + 8 +0 + 62 + 0 + 10 +6037.5 + 20 +4395.078905 + 30 +0.0 + 11 +6062.5 + 21 +4395.078905 + 31 +0.0 + 0 +LINE + 5 +971 + 8 +0 + 62 + 0 + 10 +6112.5 + 20 +4395.078905 + 30 +0.0 + 11 +6129.094686 + 21 +4395.078905 + 31 +0.0 + 0 +LINE + 5 +972 + 8 +0 + 62 + 0 + 10 +6000.0 + 20 +4373.42827 + 30 +0.0 + 11 +6025.0 + 21 +4373.42827 + 31 +0.0 + 0 +LINE + 5 +973 + 8 +0 + 62 + 0 + 10 +6075.0 + 20 +4373.42827 + 30 +0.0 + 11 +6100.0 + 21 +4373.42827 + 31 +0.0 + 0 +LINE + 5 +974 + 8 +0 + 62 + 0 + 10 +5968.4375 + 20 +4351.777635 + 30 +0.0 + 11 +5987.5 + 21 +4351.777635 + 31 +0.0 + 0 +LINE + 5 +975 + 8 +0 + 62 + 0 + 10 +6037.5 + 20 +4351.777635 + 30 +0.0 + 11 +6062.5 + 21 +4351.777635 + 31 +0.0 + 0 +LINE + 5 +976 + 8 +0 + 62 + 0 + 10 +6000.0 + 20 +4330.127 + 30 +0.0 + 11 +6025.0 + 21 +4330.127 + 31 +0.0 + 0 +LINE + 5 +977 + 8 +0 + 62 + 0 + 10 +5968.4375 + 20 +4308.476365 + 30 +0.0 + 11 +5987.5 + 21 +4308.476365 + 31 +0.0 + 0 +LINE + 5 +978 + 8 +0 + 62 + 0 + 10 +6145.230697 + 20 +4901.304139 + 30 +0.0 + 11 +6137.499971 + 21 +4914.694149 + 31 +0.0 + 0 +LINE + 5 +979 + 8 +0 + 62 + 0 + 10 +6112.499971 + 20 +4957.99542 + 30 +0.0 + 11 +6099.999971 + 21 +4979.646055 + 31 +0.0 + 0 +LINE + 5 +97A + 8 +0 + 62 + 0 + 10 +6074.999971 + 20 +5022.947325 + 30 +0.0 + 11 +6062.499971 + 21 +5044.59796 + 31 +0.0 + 0 +LINE + 5 +97B + 8 +0 + 62 + 0 + 10 +6037.499971 + 20 +5087.89923 + 30 +0.0 + 11 +6024.999971 + 21 +5109.549865 + 31 +0.0 + 0 +LINE + 5 +97C + 8 +0 + 62 + 0 + 10 +5999.999971 + 20 +5152.851136 + 30 +0.0 + 11 +5987.499971 + 21 +5174.501771 + 31 +0.0 + 0 +LINE + 5 +97D + 8 +0 + 62 + 0 + 10 +6144.377168 + 20 +4859.481224 + 30 +0.0 + 11 +6137.499971 + 21 +4871.392879 + 31 +0.0 + 0 +LINE + 5 +97E + 8 +0 + 62 + 0 + 10 +6112.499971 + 20 +4914.69415 + 30 +0.0 + 11 +6099.999971 + 21 +4936.344785 + 31 +0.0 + 0 +LINE + 5 +97F + 8 +0 + 62 + 0 + 10 +6074.999971 + 20 +4979.646055 + 30 +0.0 + 11 +6062.499971 + 21 +5001.29669 + 31 +0.0 + 0 +LINE + 5 +980 + 8 +0 + 62 + 0 + 10 +6037.499971 + 20 +5044.59796 + 30 +0.0 + 11 +6024.999971 + 21 +5066.248595 + 31 +0.0 + 0 +LINE + 5 +981 + 8 +0 + 62 + 0 + 10 +5999.999971 + 20 +5109.549865 + 30 +0.0 + 11 +5987.499971 + 21 +5131.2005 + 31 +0.0 + 0 +LINE + 5 +982 + 8 +0 + 62 + 0 + 10 +6143.523639 + 20 +4817.65831 + 30 +0.0 + 11 +6137.499971 + 21 +4828.091609 + 31 +0.0 + 0 +LINE + 5 +983 + 8 +0 + 62 + 0 + 10 +6112.499971 + 20 +4871.392879 + 30 +0.0 + 11 +6099.999971 + 21 +4893.043514 + 31 +0.0 + 0 +LINE + 5 +984 + 8 +0 + 62 + 0 + 10 +6074.999971 + 20 +4936.344785 + 30 +0.0 + 11 +6062.499971 + 21 +4957.99542 + 31 +0.0 + 0 +LINE + 5 +985 + 8 +0 + 62 + 0 + 10 +6037.499971 + 20 +5001.29669 + 30 +0.0 + 11 +6024.999971 + 21 +5022.947325 + 31 +0.0 + 0 +LINE + 5 +986 + 8 +0 + 62 + 0 + 10 +5999.999971 + 20 +5066.248595 + 30 +0.0 + 11 +5987.499971 + 21 +5087.89923 + 31 +0.0 + 0 +LINE + 5 +987 + 8 +0 + 62 + 0 + 10 +6142.67011 + 20 +4775.835395 + 30 +0.0 + 11 +6137.499971 + 21 +4784.790339 + 31 +0.0 + 0 +LINE + 5 +988 + 8 +0 + 62 + 0 + 10 +6112.499971 + 20 +4828.091609 + 30 +0.0 + 11 +6099.999971 + 21 +4849.742244 + 31 +0.0 + 0 +LINE + 5 +989 + 8 +0 + 62 + 0 + 10 +6074.999971 + 20 +4893.043515 + 30 +0.0 + 11 +6062.499971 + 21 +4914.69415 + 31 +0.0 + 0 +LINE + 5 +98A + 8 +0 + 62 + 0 + 10 +6037.499971 + 20 +4957.99542 + 30 +0.0 + 11 +6024.999971 + 21 +4979.646055 + 31 +0.0 + 0 +LINE + 5 +98B + 8 +0 + 62 + 0 + 10 +5999.999971 + 20 +5022.947325 + 30 +0.0 + 11 +5987.499971 + 21 +5044.59796 + 31 +0.0 + 0 +LINE + 5 +98C + 8 +0 + 62 + 0 + 10 +6141.816581 + 20 +4734.012481 + 30 +0.0 + 11 +6137.499971 + 21 +4741.489069 + 31 +0.0 + 0 +LINE + 5 +98D + 8 +0 + 62 + 0 + 10 +6112.499971 + 20 +4784.790339 + 30 +0.0 + 11 +6099.999971 + 21 +4806.440974 + 31 +0.0 + 0 +LINE + 5 +98E + 8 +0 + 62 + 0 + 10 +6074.999971 + 20 +4849.742244 + 30 +0.0 + 11 +6062.499971 + 21 +4871.392879 + 31 +0.0 + 0 +LINE + 5 +98F + 8 +0 + 62 + 0 + 10 +6037.499971 + 20 +4914.69415 + 30 +0.0 + 11 +6024.999971 + 21 +4936.344785 + 31 +0.0 + 0 +LINE + 5 +990 + 8 +0 + 62 + 0 + 10 +5999.999971 + 20 +4979.646055 + 30 +0.0 + 11 +5987.499971 + 21 +5001.29669 + 31 +0.0 + 0 +LINE + 5 +991 + 8 +0 + 62 + 0 + 10 +6140.963052 + 20 +4692.189566 + 30 +0.0 + 11 +6137.499971 + 21 +4698.187799 + 31 +0.0 + 0 +LINE + 5 +992 + 8 +0 + 62 + 0 + 10 +6112.499971 + 20 +4741.489069 + 30 +0.0 + 11 +6099.999971 + 21 +4763.139704 + 31 +0.0 + 0 +LINE + 5 +993 + 8 +0 + 62 + 0 + 10 +6074.999971 + 20 +4806.440974 + 30 +0.0 + 11 +6062.499971 + 21 +4828.091609 + 31 +0.0 + 0 +LINE + 5 +994 + 8 +0 + 62 + 0 + 10 +6037.499971 + 20 +4871.39288 + 30 +0.0 + 11 +6024.999971 + 21 +4893.043515 + 31 +0.0 + 0 +LINE + 5 +995 + 8 +0 + 62 + 0 + 10 +5999.999971 + 20 +4936.344785 + 30 +0.0 + 11 +5987.499971 + 21 +4957.99542 + 31 +0.0 + 0 +LINE + 5 +996 + 8 +0 + 62 + 0 + 10 +6140.109523 + 20 +4650.366651 + 30 +0.0 + 11 +6137.499971 + 21 +4654.886529 + 31 +0.0 + 0 +LINE + 5 +997 + 8 +0 + 62 + 0 + 10 +6112.499971 + 20 +4698.187799 + 30 +0.0 + 11 +6099.999971 + 21 +4719.838434 + 31 +0.0 + 0 +LINE + 5 +998 + 8 +0 + 62 + 0 + 10 +6074.999971 + 20 +4763.139704 + 30 +0.0 + 11 +6062.499971 + 21 +4784.790339 + 31 +0.0 + 0 +LINE + 5 +999 + 8 +0 + 62 + 0 + 10 +6037.499971 + 20 +4828.091609 + 30 +0.0 + 11 +6024.999971 + 21 +4849.742244 + 31 +0.0 + 0 +LINE + 5 +99A + 8 +0 + 62 + 0 + 10 +5999.999971 + 20 +4893.043515 + 30 +0.0 + 11 +5987.499971 + 21 +4914.69415 + 31 +0.0 + 0 +LINE + 5 +99B + 8 +0 + 62 + 0 + 10 +6139.255995 + 20 +4608.543737 + 30 +0.0 + 11 +6137.499971 + 21 +4611.585259 + 31 +0.0 + 0 +LINE + 5 +99C + 8 +0 + 62 + 0 + 10 +6112.499971 + 20 +4654.886529 + 30 +0.0 + 11 +6099.999971 + 21 +4676.537164 + 31 +0.0 + 0 +LINE + 5 +99D + 8 +0 + 62 + 0 + 10 +6074.999971 + 20 +4719.838434 + 30 +0.0 + 11 +6062.499971 + 21 +4741.489069 + 31 +0.0 + 0 +LINE + 5 +99E + 8 +0 + 62 + 0 + 10 +6037.499971 + 20 +4784.790339 + 30 +0.0 + 11 +6024.999971 + 21 +4806.440974 + 31 +0.0 + 0 +LINE + 5 +99F + 8 +0 + 62 + 0 + 10 +5999.999971 + 20 +4849.742245 + 30 +0.0 + 11 +5987.499971 + 21 +4871.39288 + 31 +0.0 + 0 +LINE + 5 +9A0 + 8 +0 + 62 + 0 + 10 +6138.402466 + 20 +4566.720822 + 30 +0.0 + 11 +6137.499971 + 21 +4568.283988 + 31 +0.0 + 0 +LINE + 5 +9A1 + 8 +0 + 62 + 0 + 10 +6112.499971 + 20 +4611.585259 + 30 +0.0 + 11 +6099.999971 + 21 +4633.235894 + 31 +0.0 + 0 +LINE + 5 +9A2 + 8 +0 + 62 + 0 + 10 +6074.999971 + 20 +4676.537164 + 30 +0.0 + 11 +6062.499971 + 21 +4698.187799 + 31 +0.0 + 0 +LINE + 5 +9A3 + 8 +0 + 62 + 0 + 10 +6037.499971 + 20 +4741.489069 + 30 +0.0 + 11 +6024.999971 + 21 +4763.139704 + 31 +0.0 + 0 +LINE + 5 +9A4 + 8 +0 + 62 + 0 + 10 +5999.999971 + 20 +4806.440974 + 30 +0.0 + 11 +5987.499971 + 21 +4828.091609 + 31 +0.0 + 0 +LINE + 5 +9A5 + 8 +0 + 62 + 0 + 10 +6137.548937 + 20 +4524.897907 + 30 +0.0 + 11 +6137.499971 + 21 +4524.982718 + 31 +0.0 + 0 +LINE + 5 +9A6 + 8 +0 + 62 + 0 + 10 +6112.499971 + 20 +4568.283988 + 30 +0.0 + 11 +6099.999971 + 21 +4589.934624 + 31 +0.0 + 0 +LINE + 5 +9A7 + 8 +0 + 62 + 0 + 10 +6074.999971 + 20 +4633.235894 + 30 +0.0 + 11 +6062.499971 + 21 +4654.886529 + 31 +0.0 + 0 +LINE + 5 +9A8 + 8 +0 + 62 + 0 + 10 +6037.499971 + 20 +4698.187799 + 30 +0.0 + 11 +6024.999971 + 21 +4719.838434 + 31 +0.0 + 0 +LINE + 5 +9A9 + 8 +0 + 62 + 0 + 10 +5999.999971 + 20 +4763.139704 + 30 +0.0 + 11 +5987.499971 + 21 +4784.790339 + 31 +0.0 + 0 +LINE + 5 +9AA + 8 +0 + 62 + 0 + 10 +6112.499971 + 20 +4524.982718 + 30 +0.0 + 11 +6099.999971 + 21 +4546.633353 + 31 +0.0 + 0 +LINE + 5 +9AB + 8 +0 + 62 + 0 + 10 +6074.999971 + 20 +4589.934624 + 30 +0.0 + 11 +6062.499971 + 21 +4611.585259 + 31 +0.0 + 0 +LINE + 5 +9AC + 8 +0 + 62 + 0 + 10 +6037.499971 + 20 +4654.886529 + 30 +0.0 + 11 +6024.999971 + 21 +4676.537164 + 31 +0.0 + 0 +LINE + 5 +9AD + 8 +0 + 62 + 0 + 10 +5999.999971 + 20 +4719.838434 + 30 +0.0 + 11 +5987.499971 + 21 +4741.489069 + 31 +0.0 + 0 +LINE + 5 +9AE + 8 +0 + 62 + 0 + 10 +6112.499971 + 20 +4481.681448 + 30 +0.0 + 11 +6099.999971 + 21 +4503.332083 + 31 +0.0 + 0 +LINE + 5 +9AF + 8 +0 + 62 + 0 + 10 +6074.999971 + 20 +4546.633353 + 30 +0.0 + 11 +6062.499971 + 21 +4568.283989 + 31 +0.0 + 0 +LINE + 5 +9B0 + 8 +0 + 62 + 0 + 10 +6037.499971 + 20 +4611.585259 + 30 +0.0 + 11 +6024.999971 + 21 +4633.235894 + 31 +0.0 + 0 +LINE + 5 +9B1 + 8 +0 + 62 + 0 + 10 +5999.999971 + 20 +4676.537164 + 30 +0.0 + 11 +5987.499971 + 21 +4698.187799 + 31 +0.0 + 0 +LINE + 5 +9B2 + 8 +0 + 62 + 0 + 10 +6112.499972 + 20 +4438.380178 + 30 +0.0 + 11 +6099.999972 + 21 +4460.030813 + 31 +0.0 + 0 +LINE + 5 +9B3 + 8 +0 + 62 + 0 + 10 +6074.999972 + 20 +4503.332083 + 30 +0.0 + 11 +6062.499972 + 21 +4524.982718 + 31 +0.0 + 0 +LINE + 5 +9B4 + 8 +0 + 62 + 0 + 10 +6037.499972 + 20 +4568.283989 + 30 +0.0 + 11 +6024.999972 + 21 +4589.934624 + 31 +0.0 + 0 +LINE + 5 +9B5 + 8 +0 + 62 + 0 + 10 +5999.999972 + 20 +4633.235894 + 30 +0.0 + 11 +5987.499972 + 21 +4654.886529 + 31 +0.0 + 0 +LINE + 5 +9B6 + 8 +0 + 62 + 0 + 10 +6112.499972 + 20 +4395.078908 + 30 +0.0 + 11 +6099.999972 + 21 +4416.729543 + 31 +0.0 + 0 +LINE + 5 +9B7 + 8 +0 + 62 + 0 + 10 +6074.999972 + 20 +4460.030813 + 30 +0.0 + 11 +6062.499972 + 21 +4481.681448 + 31 +0.0 + 0 +LINE + 5 +9B8 + 8 +0 + 62 + 0 + 10 +6037.499972 + 20 +4524.982718 + 30 +0.0 + 11 +6024.999972 + 21 +4546.633354 + 31 +0.0 + 0 +LINE + 5 +9B9 + 8 +0 + 62 + 0 + 10 +5999.999972 + 20 +4589.934624 + 30 +0.0 + 11 +5987.499972 + 21 +4611.585259 + 31 +0.0 + 0 +LINE + 5 +9BA + 8 +0 + 62 + 0 + 10 +6101.011502 + 20 +4371.676251 + 30 +0.0 + 11 +6099.999972 + 21 +4373.428273 + 31 +0.0 + 0 +LINE + 5 +9BB + 8 +0 + 62 + 0 + 10 +6074.999972 + 20 +4416.729543 + 30 +0.0 + 11 +6062.499972 + 21 +4438.380178 + 31 +0.0 + 0 +LINE + 5 +9BC + 8 +0 + 62 + 0 + 10 +6037.499972 + 20 +4481.681448 + 30 +0.0 + 11 +6024.999972 + 21 +4503.332083 + 31 +0.0 + 0 +LINE + 5 +9BD + 8 +0 + 62 + 0 + 10 +5999.999972 + 20 +4546.633354 + 30 +0.0 + 11 +5987.499972 + 21 +4568.283989 + 31 +0.0 + 0 +LINE + 5 +9BE + 8 +0 + 62 + 0 + 10 +6074.999972 + 20 +4373.428273 + 30 +0.0 + 11 +6062.499972 + 21 +4395.078908 + 31 +0.0 + 0 +LINE + 5 +9BF + 8 +0 + 62 + 0 + 10 +6037.499972 + 20 +4438.380178 + 30 +0.0 + 11 +6024.999972 + 21 +4460.030813 + 31 +0.0 + 0 +LINE + 5 +9C0 + 8 +0 + 62 + 0 + 10 +5999.999972 + 20 +4503.332083 + 30 +0.0 + 11 +5987.499972 + 21 +4524.982719 + 31 +0.0 + 0 +LINE + 5 +9C1 + 8 +0 + 62 + 0 + 10 +6067.253384 + 20 +4343.544487 + 30 +0.0 + 11 +6062.499972 + 21 +4351.777638 + 31 +0.0 + 0 +LINE + 5 +9C2 + 8 +0 + 62 + 0 + 10 +6037.499972 + 20 +4395.078908 + 30 +0.0 + 11 +6024.999972 + 21 +4416.729543 + 31 +0.0 + 0 +LINE + 5 +9C3 + 8 +0 + 62 + 0 + 10 +5999.999972 + 20 +4460.030813 + 30 +0.0 + 11 +5987.499972 + 21 +4481.681448 + 31 +0.0 + 0 +LINE + 5 +9C4 + 8 +0 + 62 + 0 + 10 +6037.499972 + 20 +4351.777638 + 30 +0.0 + 11 +6024.999972 + 21 +4373.428273 + 31 +0.0 + 0 +LINE + 5 +9C5 + 8 +0 + 62 + 0 + 10 +5999.999972 + 20 +4416.729543 + 30 +0.0 + 11 +5987.499972 + 21 +4438.380178 + 31 +0.0 + 0 +LINE + 5 +9C6 + 8 +0 + 62 + 0 + 10 +6032.277357 + 20 +4317.522202 + 30 +0.0 + 11 +6024.999972 + 21 +4330.127003 + 31 +0.0 + 0 +LINE + 5 +9C7 + 8 +0 + 62 + 0 + 10 +5999.999972 + 20 +4373.428273 + 30 +0.0 + 11 +5987.499972 + 21 +4395.078908 + 31 +0.0 + 0 +LINE + 5 +9C8 + 8 +0 + 62 + 0 + 10 +5999.999972 + 20 +4330.127003 + 30 +0.0 + 11 +5987.499972 + 21 +4351.777638 + 31 +0.0 + 0 +LINE + 5 +9C9 + 8 +0 + 62 + 0 + 10 +5994.945553 + 20 +4295.580243 + 30 +0.0 + 11 +5987.499972 + 21 +4308.476368 + 31 +0.0 + 0 +LINE + 5 +9CA + 8 +0 + 62 + 0 + 10 +6146.084226 + 20 +4943.127054 + 30 +0.0 + 11 +6137.499971 + 21 +4957.99542 + 31 +0.0 + 0 +LINE + 5 +9CB + 8 +0 + 62 + 0 + 10 +6112.499971 + 20 +5001.29669 + 30 +0.0 + 11 +6099.999971 + 21 +5022.947325 + 31 +0.0 + 0 +LINE + 5 +9CC + 8 +0 + 62 + 0 + 10 +6074.999971 + 20 +5066.248595 + 30 +0.0 + 11 +6062.499971 + 21 +5087.89923 + 31 +0.0 + 0 +LINE + 5 +9CD + 8 +0 + 62 + 0 + 10 +6037.499971 + 20 +5131.2005 + 30 +0.0 + 11 +6024.999971 + 21 +5152.851135 + 31 +0.0 + 0 +LINE + 5 +9CE + 8 +0 + 62 + 0 + 10 +5999.999971 + 20 +5196.152406 + 30 +0.0 + 11 +5987.499971 + 21 +5217.803041 + 31 +0.0 + 0 +LINE + 5 +9CF + 8 +0 + 62 + 0 + 10 +6146.937754 + 20 +4984.949968 + 30 +0.0 + 11 +6137.49997 + 21 +5001.29669 + 31 +0.0 + 0 +LINE + 5 +9D0 + 8 +0 + 62 + 0 + 10 +6112.49997 + 20 +5044.59796 + 30 +0.0 + 11 +6099.99997 + 21 +5066.248595 + 31 +0.0 + 0 +LINE + 5 +9D1 + 8 +0 + 62 + 0 + 10 +6074.99997 + 20 +5109.549865 + 30 +0.0 + 11 +6062.49997 + 21 +5131.2005 + 31 +0.0 + 0 +LINE + 5 +9D2 + 8 +0 + 62 + 0 + 10 +6037.49997 + 20 +5174.501771 + 30 +0.0 + 11 +6024.99997 + 21 +5196.152406 + 31 +0.0 + 0 +LINE + 5 +9D3 + 8 +0 + 62 + 0 + 10 +5999.99997 + 20 +5239.453676 + 30 +0.0 + 11 +5987.49997 + 21 +5261.104311 + 31 +0.0 + 0 +LINE + 5 +9D4 + 8 +0 + 62 + 0 + 10 +6147.791283 + 20 +5026.772883 + 30 +0.0 + 11 +6137.49997 + 21 +5044.59796 + 31 +0.0 + 0 +LINE + 5 +9D5 + 8 +0 + 62 + 0 + 10 +6112.49997 + 20 +5087.89923 + 30 +0.0 + 11 +6099.99997 + 21 +5109.549865 + 31 +0.0 + 0 +LINE + 5 +9D6 + 8 +0 + 62 + 0 + 10 +6074.99997 + 20 +5152.851135 + 30 +0.0 + 11 +6062.49997 + 21 +5174.50177 + 31 +0.0 + 0 +LINE + 5 +9D7 + 8 +0 + 62 + 0 + 10 +6037.49997 + 20 +5217.803041 + 30 +0.0 + 11 +6024.99997 + 21 +5239.453676 + 31 +0.0 + 0 +LINE + 5 +9D8 + 8 +0 + 62 + 0 + 10 +5999.99997 + 20 +5282.754946 + 30 +0.0 + 11 +5987.49997 + 21 +5304.405581 + 31 +0.0 + 0 +LINE + 5 +9D9 + 8 +0 + 62 + 0 + 10 +6148.644812 + 20 +5068.595798 + 30 +0.0 + 11 +6137.49997 + 21 +5087.89923 + 31 +0.0 + 0 +LINE + 5 +9DA + 8 +0 + 62 + 0 + 10 +6112.49997 + 20 +5131.2005 + 30 +0.0 + 11 +6099.99997 + 21 +5152.851135 + 31 +0.0 + 0 +LINE + 5 +9DB + 8 +0 + 62 + 0 + 10 +6074.99997 + 20 +5196.152406 + 30 +0.0 + 11 +6062.49997 + 21 +5217.803041 + 31 +0.0 + 0 +LINE + 5 +9DC + 8 +0 + 62 + 0 + 10 +6037.49997 + 20 +5261.104311 + 30 +0.0 + 11 +6024.99997 + 21 +5282.754946 + 31 +0.0 + 0 +LINE + 5 +9DD + 8 +0 + 62 + 0 + 10 +5999.99997 + 20 +5326.056216 + 30 +0.0 + 11 +5987.49997 + 21 +5347.706851 + 31 +0.0 + 0 +LINE + 5 +9DE + 8 +0 + 62 + 0 + 10 +6149.498341 + 20 +5110.418712 + 30 +0.0 + 11 +6137.49997 + 21 +5131.2005 + 31 +0.0 + 0 +LINE + 5 +9DF + 8 +0 + 62 + 0 + 10 +6112.49997 + 20 +5174.50177 + 30 +0.0 + 11 +6099.99997 + 21 +5196.152405 + 31 +0.0 + 0 +LINE + 5 +9E0 + 8 +0 + 62 + 0 + 10 +6074.99997 + 20 +5239.453676 + 30 +0.0 + 11 +6062.49997 + 21 +5261.104311 + 31 +0.0 + 0 +LINE + 5 +9E1 + 8 +0 + 62 + 0 + 10 +6037.49997 + 20 +5304.405581 + 30 +0.0 + 11 +6024.99997 + 21 +5326.056216 + 31 +0.0 + 0 +LINE + 5 +9E2 + 8 +0 + 62 + 0 + 10 +5999.99997 + 20 +5369.357486 + 30 +0.0 + 11 +5987.49997 + 21 +5391.008121 + 31 +0.0 + 0 +LINE + 5 +9E3 + 8 +0 + 62 + 0 + 10 +6149.99997 + 20 +5152.851135 + 30 +0.0 + 11 +6137.49997 + 21 +5174.50177 + 31 +0.0 + 0 +LINE + 5 +9E4 + 8 +0 + 62 + 0 + 10 +6112.49997 + 20 +5217.803041 + 30 +0.0 + 11 +6099.99997 + 21 +5239.453676 + 31 +0.0 + 0 +LINE + 5 +9E5 + 8 +0 + 62 + 0 + 10 +6074.99997 + 20 +5282.754946 + 30 +0.0 + 11 +6062.49997 + 21 +5304.405581 + 31 +0.0 + 0 +LINE + 5 +9E6 + 8 +0 + 62 + 0 + 10 +6037.49997 + 20 +5347.706851 + 30 +0.0 + 11 +6024.99997 + 21 +5369.357486 + 31 +0.0 + 0 +LINE + 5 +9E7 + 8 +0 + 62 + 0 + 10 +5999.99997 + 20 +5412.658756 + 30 +0.0 + 11 +5987.49997 + 21 +5434.309391 + 31 +0.0 + 0 +LINE + 5 +9E8 + 8 +0 + 62 + 0 + 10 +6149.99997 + 20 +5196.152405 + 30 +0.0 + 11 +6137.49997 + 21 +5217.80304 + 31 +0.0 + 0 +LINE + 5 +9E9 + 8 +0 + 62 + 0 + 10 +6112.49997 + 20 +5261.104311 + 30 +0.0 + 11 +6099.99997 + 21 +5282.754946 + 31 +0.0 + 0 +LINE + 5 +9EA + 8 +0 + 62 + 0 + 10 +6074.99997 + 20 +5326.056216 + 30 +0.0 + 11 +6062.49997 + 21 +5347.706851 + 31 +0.0 + 0 +LINE + 5 +9EB + 8 +0 + 62 + 0 + 10 +6037.49997 + 20 +5391.008121 + 30 +0.0 + 11 +6024.99997 + 21 +5412.658756 + 31 +0.0 + 0 +LINE + 5 +9EC + 8 +0 + 62 + 0 + 10 +5999.99997 + 20 +5455.960027 + 30 +0.0 + 11 +5987.49997 + 21 +5477.610662 + 31 +0.0 + 0 +LINE + 5 +9ED + 8 +0 + 62 + 0 + 10 +6149.99997 + 20 +5239.453676 + 30 +0.0 + 11 +6137.49997 + 21 +5261.104311 + 31 +0.0 + 0 +LINE + 5 +9EE + 8 +0 + 62 + 0 + 10 +6112.49997 + 20 +5304.405581 + 30 +0.0 + 11 +6099.99997 + 21 +5326.056216 + 31 +0.0 + 0 +LINE + 5 +9EF + 8 +0 + 62 + 0 + 10 +6074.99997 + 20 +5369.357486 + 30 +0.0 + 11 +6062.49997 + 21 +5391.008121 + 31 +0.0 + 0 +LINE + 5 +9F0 + 8 +0 + 62 + 0 + 10 +6037.49997 + 20 +5434.309391 + 30 +0.0 + 11 +6024.99997 + 21 +5455.960026 + 31 +0.0 + 0 +LINE + 5 +9F1 + 8 +0 + 62 + 0 + 10 +5999.99997 + 20 +5499.261297 + 30 +0.0 + 11 +5987.49997 + 21 +5520.911932 + 31 +0.0 + 0 +LINE + 5 +9F2 + 8 +0 + 62 + 0 + 10 +6175.0 + 20 +5239.453623 + 30 +0.0 + 11 +6174.99997 + 21 +5239.453675 + 31 +0.0 + 0 +LINE + 5 +9F3 + 8 +0 + 62 + 0 + 10 +6149.99997 + 20 +5282.754946 + 30 +0.0 + 11 +6137.49997 + 21 +5304.405581 + 31 +0.0 + 0 +LINE + 5 +9F4 + 8 +0 + 62 + 0 + 10 +6112.49997 + 20 +5347.706851 + 30 +0.0 + 11 +6099.99997 + 21 +5369.357486 + 31 +0.0 + 0 +LINE + 5 +9F5 + 8 +0 + 62 + 0 + 10 +6074.99997 + 20 +5412.658756 + 30 +0.0 + 11 +6062.49997 + 21 +5434.309391 + 31 +0.0 + 0 +LINE + 5 +9F6 + 8 +0 + 62 + 0 + 10 +6037.49997 + 20 +5477.610662 + 30 +0.0 + 11 +6024.99997 + 21 +5499.261297 + 31 +0.0 + 0 +LINE + 5 +9F7 + 8 +0 + 62 + 0 + 10 +5999.99997 + 20 +5542.562567 + 30 +0.0 + 11 +5987.49997 + 21 +5564.213202 + 31 +0.0 + 0 +LINE + 5 +9F8 + 8 +0 + 62 + 0 + 10 +6175.0 + 20 +5282.754893 + 30 +0.0 + 11 +6174.99997 + 21 +5282.754946 + 31 +0.0 + 0 +LINE + 5 +9F9 + 8 +0 + 62 + 0 + 10 +6149.99997 + 20 +5326.056216 + 30 +0.0 + 11 +6137.49997 + 21 +5347.706851 + 31 +0.0 + 0 +LINE + 5 +9FA + 8 +0 + 62 + 0 + 10 +6112.49997 + 20 +5391.008121 + 30 +0.0 + 11 +6099.99997 + 21 +5412.658756 + 31 +0.0 + 0 +LINE + 5 +9FB + 8 +0 + 62 + 0 + 10 +6074.99997 + 20 +5455.960026 + 30 +0.0 + 11 +6062.49997 + 21 +5477.610661 + 31 +0.0 + 0 +LINE + 5 +9FC + 8 +0 + 62 + 0 + 10 +6037.49997 + 20 +5520.911932 + 30 +0.0 + 11 +6024.99997 + 21 +5542.562567 + 31 +0.0 + 0 +LINE + 5 +9FD + 8 +0 + 62 + 0 + 10 +5999.99997 + 20 +5585.863837 + 30 +0.0 + 11 +5987.49997 + 21 +5607.514472 + 31 +0.0 + 0 +LINE + 5 +9FE + 8 +0 + 62 + 0 + 10 +6175.0 + 20 +5326.056163 + 30 +0.0 + 11 +6174.99997 + 21 +5326.056216 + 31 +0.0 + 0 +LINE + 5 +9FF + 8 +0 + 62 + 0 + 10 +6149.99997 + 20 +5369.357486 + 30 +0.0 + 11 +6137.49997 + 21 +5391.008121 + 31 +0.0 + 0 +LINE + 5 +A00 + 8 +0 + 62 + 0 + 10 +6112.49997 + 20 +5434.309391 + 30 +0.0 + 11 +6099.99997 + 21 +5455.960026 + 31 +0.0 + 0 +LINE + 5 +A01 + 8 +0 + 62 + 0 + 10 +6074.99997 + 20 +5499.261297 + 30 +0.0 + 11 +6062.49997 + 21 +5520.911932 + 31 +0.0 + 0 +LINE + 5 +A02 + 8 +0 + 62 + 0 + 10 +6037.49997 + 20 +5564.213202 + 30 +0.0 + 11 +6024.99997 + 21 +5585.863837 + 31 +0.0 + 0 +LINE + 5 +A03 + 8 +0 + 62 + 0 + 10 +5999.99997 + 20 +5629.165107 + 30 +0.0 + 11 +5987.49997 + 21 +5650.815742 + 31 +0.0 + 0 +LINE + 5 +A04 + 8 +0 + 62 + 0 + 10 +6175.0 + 20 +5369.357433 + 30 +0.0 + 11 +6174.99997 + 21 +5369.357486 + 31 +0.0 + 0 +LINE + 5 +A05 + 8 +0 + 62 + 0 + 10 +6149.99997 + 20 +5412.658756 + 30 +0.0 + 11 +6137.49997 + 21 +5434.309391 + 31 +0.0 + 0 +LINE + 5 +A06 + 8 +0 + 62 + 0 + 10 +6112.49997 + 20 +5477.610661 + 30 +0.0 + 11 +6099.99997 + 21 +5499.261296 + 31 +0.0 + 0 +LINE + 5 +A07 + 8 +0 + 62 + 0 + 10 +6074.99997 + 20 +5542.562567 + 30 +0.0 + 11 +6062.49997 + 21 +5564.213202 + 31 +0.0 + 0 +LINE + 5 +A08 + 8 +0 + 62 + 0 + 10 +6037.49997 + 20 +5607.514472 + 30 +0.0 + 11 +6024.99997 + 21 +5629.165107 + 31 +0.0 + 0 +LINE + 5 +A09 + 8 +0 + 62 + 0 + 10 +5999.99997 + 20 +5672.466377 + 30 +0.0 + 11 +5987.49997 + 21 +5694.117012 + 31 +0.0 + 0 +LINE + 5 +A0A + 8 +0 + 62 + 0 + 10 +6175.0 + 20 +5412.658703 + 30 +0.0 + 11 +6174.99997 + 21 +5412.658756 + 31 +0.0 + 0 +LINE + 5 +A0B + 8 +0 + 62 + 0 + 10 +6149.99997 + 20 +5455.960026 + 30 +0.0 + 11 +6137.49997 + 21 +5477.610661 + 31 +0.0 + 0 +LINE + 5 +A0C + 8 +0 + 62 + 0 + 10 +6112.49997 + 20 +5520.911932 + 30 +0.0 + 11 +6099.99997 + 21 +5542.562567 + 31 +0.0 + 0 +LINE + 5 +A0D + 8 +0 + 62 + 0 + 10 +6074.99997 + 20 +5585.863837 + 30 +0.0 + 11 +6062.49997 + 21 +5607.514472 + 31 +0.0 + 0 +LINE + 5 +A0E + 8 +0 + 62 + 0 + 10 +6037.49997 + 20 +5650.815742 + 30 +0.0 + 11 +6024.99997 + 21 +5672.466377 + 31 +0.0 + 0 +LINE + 5 +A0F + 8 +0 + 62 + 0 + 10 +5999.99997 + 20 +5715.767647 + 30 +0.0 + 11 +5987.49997 + 21 +5737.418282 + 31 +0.0 + 0 +LINE + 5 +A10 + 8 +0 + 62 + 0 + 10 +6175.0 + 20 +5455.959973 + 30 +0.0 + 11 +6174.999969 + 21 +5455.960026 + 31 +0.0 + 0 +LINE + 5 +A11 + 8 +0 + 62 + 0 + 10 +6149.999969 + 20 +5499.261296 + 30 +0.0 + 11 +6137.499969 + 21 +5520.911931 + 31 +0.0 + 0 +LINE + 5 +A12 + 8 +0 + 62 + 0 + 10 +6112.499969 + 20 +5564.213202 + 30 +0.0 + 11 +6099.999969 + 21 +5585.863837 + 31 +0.0 + 0 +LINE + 5 +A13 + 8 +0 + 62 + 0 + 10 +6074.999969 + 20 +5629.165107 + 30 +0.0 + 11 +6062.499969 + 21 +5650.815742 + 31 +0.0 + 0 +LINE + 5 +A14 + 8 +0 + 62 + 0 + 10 +6037.499969 + 20 +5694.117012 + 30 +0.0 + 11 +6024.999969 + 21 +5715.767647 + 31 +0.0 + 0 +LINE + 5 +A15 + 8 +0 + 62 + 0 + 10 +5999.999969 + 20 +5759.068918 + 30 +0.0 + 11 +5987.499969 + 21 +5780.719553 + 31 +0.0 + 0 +LINE + 5 +A16 + 8 +0 + 62 + 0 + 10 +6175.0 + 20 +5499.261243 + 30 +0.0 + 11 +6174.999969 + 21 +5499.261296 + 31 +0.0 + 0 +LINE + 5 +A17 + 8 +0 + 62 + 0 + 10 +6149.999969 + 20 +5542.562567 + 30 +0.0 + 11 +6137.499969 + 21 +5564.213202 + 31 +0.0 + 0 +LINE + 5 +A18 + 8 +0 + 62 + 0 + 10 +6112.499969 + 20 +5607.514472 + 30 +0.0 + 11 +6099.999969 + 21 +5629.165107 + 31 +0.0 + 0 +LINE + 5 +A19 + 8 +0 + 62 + 0 + 10 +6074.999969 + 20 +5672.466377 + 30 +0.0 + 11 +6062.499969 + 21 +5694.117012 + 31 +0.0 + 0 +LINE + 5 +A1A + 8 +0 + 62 + 0 + 10 +6037.499969 + 20 +5737.418282 + 30 +0.0 + 11 +6024.999969 + 21 +5759.068917 + 31 +0.0 + 0 +LINE + 5 +A1B + 8 +0 + 62 + 0 + 10 +6175.0 + 20 +5542.562513 + 30 +0.0 + 11 +6174.999969 + 21 +5542.562566 + 31 +0.0 + 0 +LINE + 5 +A1C + 8 +0 + 62 + 0 + 10 +6149.999969 + 20 +5585.863837 + 30 +0.0 + 11 +6137.499969 + 21 +5607.514472 + 31 +0.0 + 0 +LINE + 5 +A1D + 8 +0 + 62 + 0 + 10 +6112.499969 + 20 +5650.815742 + 30 +0.0 + 11 +6099.999969 + 21 +5672.466377 + 31 +0.0 + 0 +LINE + 5 +A1E + 8 +0 + 62 + 0 + 10 +6074.999969 + 20 +5715.767647 + 30 +0.0 + 11 +6062.499969 + 21 +5737.418282 + 31 +0.0 + 0 +LINE + 5 +A1F + 8 +0 + 62 + 0 + 10 +6037.499969 + 20 +5780.719553 + 30 +0.0 + 11 +6032.1419 + 21 +5790.0 + 31 +0.0 + 0 +LINE + 5 +A20 + 8 +0 + 62 + 0 + 10 +6175.0 + 20 +5585.863783 + 30 +0.0 + 11 +6174.999969 + 21 +5585.863837 + 31 +0.0 + 0 +LINE + 5 +A21 + 8 +0 + 62 + 0 + 10 +6149.999969 + 20 +5629.165107 + 30 +0.0 + 11 +6137.499969 + 21 +5650.815742 + 31 +0.0 + 0 +LINE + 5 +A22 + 8 +0 + 62 + 0 + 10 +6112.499969 + 20 +5694.117012 + 30 +0.0 + 11 +6099.999969 + 21 +5715.767647 + 31 +0.0 + 0 +LINE + 5 +A23 + 8 +0 + 62 + 0 + 10 +6074.999969 + 20 +5759.068917 + 30 +0.0 + 11 +6062.499969 + 21 +5780.719552 + 31 +0.0 + 0 +LINE + 5 +A24 + 8 +0 + 62 + 0 + 10 +6175.0 + 20 +5629.165053 + 30 +0.0 + 11 +6174.999969 + 21 +5629.165107 + 31 +0.0 + 0 +LINE + 5 +A25 + 8 +0 + 62 + 0 + 10 +6149.999969 + 20 +5672.466377 + 30 +0.0 + 11 +6137.499969 + 21 +5694.117012 + 31 +0.0 + 0 +LINE + 5 +A26 + 8 +0 + 62 + 0 + 10 +6112.499969 + 20 +5737.418282 + 30 +0.0 + 11 +6099.999969 + 21 +5759.068917 + 31 +0.0 + 0 +LINE + 5 +A27 + 8 +0 + 62 + 0 + 10 +6175.0 + 20 +5672.466323 + 30 +0.0 + 11 +6174.999969 + 21 +5672.466377 + 31 +0.0 + 0 +LINE + 5 +A28 + 8 +0 + 62 + 0 + 10 +6149.999969 + 20 +5715.767647 + 30 +0.0 + 11 +6137.499969 + 21 +5737.418282 + 31 +0.0 + 0 +LINE + 5 +A29 + 8 +0 + 62 + 0 + 10 +6112.499969 + 20 +5780.719552 + 30 +0.0 + 11 +6107.1419 + 21 +5790.0 + 31 +0.0 + 0 +LINE + 5 +A2A + 8 +0 + 62 + 0 + 10 +6175.0 + 20 +5715.767593 + 30 +0.0 + 11 +6174.999969 + 21 +5715.767647 + 31 +0.0 + 0 +LINE + 5 +A2B + 8 +0 + 62 + 0 + 10 +6149.999969 + 20 +5759.068917 + 30 +0.0 + 11 +6137.499969 + 21 +5780.719552 + 31 +0.0 + 0 +LINE + 5 +A2C + 8 +0 + 62 + 0 + 10 +6175.0 + 20 +5759.068863 + 30 +0.0 + 11 +6174.999969 + 21 +5759.068917 + 31 +0.0 + 0 +LINE + 5 +A2D + 8 +0 + 62 + 0 + 10 +5987.49999 + 20 +4914.694172 + 30 +0.0 + 11 +5999.99999 + 21 +4936.344808 + 31 +0.0 + 0 +LINE + 5 +A2E + 8 +0 + 62 + 0 + 10 +6024.99999 + 20 +4979.646078 + 30 +0.0 + 11 +6037.49999 + 21 +5001.296713 + 31 +0.0 + 0 +LINE + 5 +A2F + 8 +0 + 62 + 0 + 10 +6062.49999 + 20 +5044.597983 + 30 +0.0 + 11 +6074.99999 + 21 +5066.248618 + 31 +0.0 + 0 +LINE + 5 +A30 + 8 +0 + 62 + 0 + 10 +6099.99999 + 20 +5109.549888 + 30 +0.0 + 11 +6112.49999 + 21 +5131.200523 + 31 +0.0 + 0 +LINE + 5 +A31 + 8 +0 + 62 + 0 + 10 +6137.49999 + 20 +5174.501794 + 30 +0.0 + 11 +6149.99999 + 21 +5196.152429 + 31 +0.0 + 0 +LINE + 5 +A32 + 8 +0 + 62 + 0 + 10 +6174.99999 + 20 +5239.453699 + 30 +0.0 + 11 +6175.0 + 21 +5239.453717 + 31 +0.0 + 0 +LINE + 5 +A33 + 8 +0 + 62 + 0 + 10 +5987.49999 + 20 +4957.995443 + 30 +0.0 + 11 +5999.99999 + 21 +4979.646078 + 31 +0.0 + 0 +LINE + 5 +A34 + 8 +0 + 62 + 0 + 10 +6024.99999 + 20 +5022.947348 + 30 +0.0 + 11 +6037.49999 + 21 +5044.597983 + 31 +0.0 + 0 +LINE + 5 +A35 + 8 +0 + 62 + 0 + 10 +6062.49999 + 20 +5087.899253 + 30 +0.0 + 11 +6074.99999 + 21 +5109.549888 + 31 +0.0 + 0 +LINE + 5 +A36 + 8 +0 + 62 + 0 + 10 +6099.99999 + 20 +5152.851158 + 30 +0.0 + 11 +6112.49999 + 21 +5174.501794 + 31 +0.0 + 0 +LINE + 5 +A37 + 8 +0 + 62 + 0 + 10 +6137.49999 + 20 +5217.803064 + 30 +0.0 + 11 +6149.99999 + 21 +5239.453699 + 31 +0.0 + 0 +LINE + 5 +A38 + 8 +0 + 62 + 0 + 10 +6174.99999 + 20 +5282.754969 + 30 +0.0 + 11 +6175.0 + 21 +5282.754987 + 31 +0.0 + 0 +LINE + 5 +A39 + 8 +0 + 62 + 0 + 10 +5987.49999 + 20 +5001.296713 + 30 +0.0 + 11 +5999.99999 + 21 +5022.947348 + 31 +0.0 + 0 +LINE + 5 +A3A + 8 +0 + 62 + 0 + 10 +6024.99999 + 20 +5066.248618 + 30 +0.0 + 11 +6037.49999 + 21 +5087.899253 + 31 +0.0 + 0 +LINE + 5 +A3B + 8 +0 + 62 + 0 + 10 +6062.49999 + 20 +5131.200523 + 30 +0.0 + 11 +6074.99999 + 21 +5152.851158 + 31 +0.0 + 0 +LINE + 5 +A3C + 8 +0 + 62 + 0 + 10 +6099.99999 + 20 +5196.152429 + 30 +0.0 + 11 +6112.49999 + 21 +5217.803064 + 31 +0.0 + 0 +LINE + 5 +A3D + 8 +0 + 62 + 0 + 10 +6137.49999 + 20 +5261.104334 + 30 +0.0 + 11 +6149.99999 + 21 +5282.754969 + 31 +0.0 + 0 +LINE + 5 +A3E + 8 +0 + 62 + 0 + 10 +6174.99999 + 20 +5326.056239 + 30 +0.0 + 11 +6175.0 + 21 +5326.056257 + 31 +0.0 + 0 +LINE + 5 +A3F + 8 +0 + 62 + 0 + 10 +5987.49999 + 20 +5044.597983 + 30 +0.0 + 11 +5999.99999 + 21 +5066.248618 + 31 +0.0 + 0 +LINE + 5 +A40 + 8 +0 + 62 + 0 + 10 +6024.99999 + 20 +5109.549888 + 30 +0.0 + 11 +6037.49999 + 21 +5131.200523 + 31 +0.0 + 0 +LINE + 5 +A41 + 8 +0 + 62 + 0 + 10 +6062.49999 + 20 +5174.501793 + 30 +0.0 + 11 +6074.99999 + 21 +5196.152429 + 31 +0.0 + 0 +LINE + 5 +A42 + 8 +0 + 62 + 0 + 10 +6099.99999 + 20 +5239.453699 + 30 +0.0 + 11 +6112.49999 + 21 +5261.104334 + 31 +0.0 + 0 +LINE + 5 +A43 + 8 +0 + 62 + 0 + 10 +6137.49999 + 20 +5304.405604 + 30 +0.0 + 11 +6149.99999 + 21 +5326.056239 + 31 +0.0 + 0 +LINE + 5 +A44 + 8 +0 + 62 + 0 + 10 +6174.99999 + 20 +5369.357509 + 30 +0.0 + 11 +6175.0 + 21 +5369.357527 + 31 +0.0 + 0 +LINE + 5 +A45 + 8 +0 + 62 + 0 + 10 +5987.49999 + 20 +5087.899253 + 30 +0.0 + 11 +5999.99999 + 21 +5109.549888 + 31 +0.0 + 0 +LINE + 5 +A46 + 8 +0 + 62 + 0 + 10 +6024.99999 + 20 +5152.851158 + 30 +0.0 + 11 +6037.49999 + 21 +5174.501793 + 31 +0.0 + 0 +LINE + 5 +A47 + 8 +0 + 62 + 0 + 10 +6062.49999 + 20 +5217.803064 + 30 +0.0 + 11 +6074.99999 + 21 +5239.453699 + 31 +0.0 + 0 +LINE + 5 +A48 + 8 +0 + 62 + 0 + 10 +6099.99999 + 20 +5282.754969 + 30 +0.0 + 11 +6112.49999 + 21 +5304.405604 + 31 +0.0 + 0 +LINE + 5 +A49 + 8 +0 + 62 + 0 + 10 +6137.49999 + 20 +5347.706874 + 30 +0.0 + 11 +6149.99999 + 21 +5369.357509 + 31 +0.0 + 0 +LINE + 5 +A4A + 8 +0 + 62 + 0 + 10 +6174.99999 + 20 +5412.658779 + 30 +0.0 + 11 +6175.0 + 21 +5412.658797 + 31 +0.0 + 0 +LINE + 5 +A4B + 8 +0 + 62 + 0 + 10 +5987.49999 + 20 +5131.200523 + 30 +0.0 + 11 +5999.99999 + 21 +5152.851158 + 31 +0.0 + 0 +LINE + 5 +A4C + 8 +0 + 62 + 0 + 10 +6024.99999 + 20 +5196.152428 + 30 +0.0 + 11 +6037.49999 + 21 +5217.803064 + 31 +0.0 + 0 +LINE + 5 +A4D + 8 +0 + 62 + 0 + 10 +6062.49999 + 20 +5261.104334 + 30 +0.0 + 11 +6074.99999 + 21 +5282.754969 + 31 +0.0 + 0 +LINE + 5 +A4E + 8 +0 + 62 + 0 + 10 +6099.99999 + 20 +5326.056239 + 30 +0.0 + 11 +6112.49999 + 21 +5347.706874 + 31 +0.0 + 0 +LINE + 5 +A4F + 8 +0 + 62 + 0 + 10 +6137.49999 + 20 +5391.008144 + 30 +0.0 + 11 +6149.99999 + 21 +5412.658779 + 31 +0.0 + 0 +LINE + 5 +A50 + 8 +0 + 62 + 0 + 10 +6174.99999 + 20 +5455.96005 + 30 +0.0 + 11 +6175.0 + 21 +5455.960067 + 31 +0.0 + 0 +LINE + 5 +A51 + 8 +0 + 62 + 0 + 10 +5987.49999 + 20 +5174.501793 + 30 +0.0 + 11 +5999.99999 + 21 +5196.152428 + 31 +0.0 + 0 +LINE + 5 +A52 + 8 +0 + 62 + 0 + 10 +6024.99999 + 20 +5239.453699 + 30 +0.0 + 11 +6037.49999 + 21 +5261.104334 + 31 +0.0 + 0 +LINE + 5 +A53 + 8 +0 + 62 + 0 + 10 +6062.49999 + 20 +5304.405604 + 30 +0.0 + 11 +6074.99999 + 21 +5326.056239 + 31 +0.0 + 0 +LINE + 5 +A54 + 8 +0 + 62 + 0 + 10 +6099.99999 + 20 +5369.357509 + 30 +0.0 + 11 +6112.49999 + 21 +5391.008144 + 31 +0.0 + 0 +LINE + 5 +A55 + 8 +0 + 62 + 0 + 10 +6137.49999 + 20 +5434.309414 + 30 +0.0 + 11 +6149.99999 + 21 +5455.96005 + 31 +0.0 + 0 +LINE + 5 +A56 + 8 +0 + 62 + 0 + 10 +6174.99999 + 20 +5499.26132 + 30 +0.0 + 11 +6175.0 + 21 +5499.261337 + 31 +0.0 + 0 +LINE + 5 +A57 + 8 +0 + 62 + 0 + 10 +5987.49999 + 20 +5217.803063 + 30 +0.0 + 11 +5999.99999 + 21 +5239.453699 + 31 +0.0 + 0 +LINE + 5 +A58 + 8 +0 + 62 + 0 + 10 +6024.99999 + 20 +5282.754969 + 30 +0.0 + 11 +6037.49999 + 21 +5304.405604 + 31 +0.0 + 0 +LINE + 5 +A59 + 8 +0 + 62 + 0 + 10 +6062.49999 + 20 +5347.706874 + 30 +0.0 + 11 +6074.99999 + 21 +5369.357509 + 31 +0.0 + 0 +LINE + 5 +A5A + 8 +0 + 62 + 0 + 10 +6099.99999 + 20 +5412.658779 + 30 +0.0 + 11 +6112.49999 + 21 +5434.309414 + 31 +0.0 + 0 +LINE + 5 +A5B + 8 +0 + 62 + 0 + 10 +6137.49999 + 20 +5477.610685 + 30 +0.0 + 11 +6149.99999 + 21 +5499.26132 + 31 +0.0 + 0 +LINE + 5 +A5C + 8 +0 + 62 + 0 + 10 +6174.99999 + 20 +5542.56259 + 30 +0.0 + 11 +6175.0 + 21 +5542.562607 + 31 +0.0 + 0 +LINE + 5 +A5D + 8 +0 + 62 + 0 + 10 +5987.49999 + 20 +5261.104334 + 30 +0.0 + 11 +5999.99999 + 21 +5282.754969 + 31 +0.0 + 0 +LINE + 5 +A5E + 8 +0 + 62 + 0 + 10 +6024.99999 + 20 +5326.056239 + 30 +0.0 + 11 +6037.49999 + 21 +5347.706874 + 31 +0.0 + 0 +LINE + 5 +A5F + 8 +0 + 62 + 0 + 10 +6062.49999 + 20 +5391.008144 + 30 +0.0 + 11 +6074.99999 + 21 +5412.658779 + 31 +0.0 + 0 +LINE + 5 +A60 + 8 +0 + 62 + 0 + 10 +6099.99999 + 20 +5455.960049 + 30 +0.0 + 11 +6112.49999 + 21 +5477.610685 + 31 +0.0 + 0 +LINE + 5 +A61 + 8 +0 + 62 + 0 + 10 +6137.49999 + 20 +5520.911955 + 30 +0.0 + 11 +6149.99999 + 21 +5542.56259 + 31 +0.0 + 0 +LINE + 5 +A62 + 8 +0 + 62 + 0 + 10 +6174.99999 + 20 +5585.86386 + 30 +0.0 + 11 +6175.0 + 21 +5585.863877 + 31 +0.0 + 0 +LINE + 5 +A63 + 8 +0 + 62 + 0 + 10 +5987.49999 + 20 +5304.405604 + 30 +0.0 + 11 +5999.99999 + 21 +5326.056239 + 31 +0.0 + 0 +LINE + 5 +A64 + 8 +0 + 62 + 0 + 10 +6024.99999 + 20 +5369.357509 + 30 +0.0 + 11 +6037.49999 + 21 +5391.008144 + 31 +0.0 + 0 +LINE + 5 +A65 + 8 +0 + 62 + 0 + 10 +6062.49999 + 20 +5434.309414 + 30 +0.0 + 11 +6074.99999 + 21 +5455.960049 + 31 +0.0 + 0 +LINE + 5 +A66 + 8 +0 + 62 + 0 + 10 +6099.99999 + 20 +5499.26132 + 30 +0.0 + 11 +6112.49999 + 21 +5520.911955 + 31 +0.0 + 0 +LINE + 5 +A67 + 8 +0 + 62 + 0 + 10 +6137.49999 + 20 +5564.213225 + 30 +0.0 + 11 +6149.99999 + 21 +5585.86386 + 31 +0.0 + 0 +LINE + 5 +A68 + 8 +0 + 62 + 0 + 10 +6174.99999 + 20 +5629.16513 + 30 +0.0 + 11 +6175.0 + 21 +5629.165147 + 31 +0.0 + 0 +LINE + 5 +A69 + 8 +0 + 62 + 0 + 10 +5987.49999 + 20 +5347.706874 + 30 +0.0 + 11 +5999.99999 + 21 +5369.357509 + 31 +0.0 + 0 +LINE + 5 +A6A + 8 +0 + 62 + 0 + 10 +6024.99999 + 20 +5412.658779 + 30 +0.0 + 11 +6037.49999 + 21 +5434.309414 + 31 +0.0 + 0 +LINE + 5 +A6B + 8 +0 + 62 + 0 + 10 +6062.49999 + 20 +5477.610684 + 30 +0.0 + 11 +6074.99999 + 21 +5499.26132 + 31 +0.0 + 0 +LINE + 5 +A6C + 8 +0 + 62 + 0 + 10 +6099.99999 + 20 +5542.56259 + 30 +0.0 + 11 +6112.49999 + 21 +5564.213225 + 31 +0.0 + 0 +LINE + 5 +A6D + 8 +0 + 62 + 0 + 10 +6137.49999 + 20 +5607.514495 + 30 +0.0 + 11 +6149.99999 + 21 +5629.16513 + 31 +0.0 + 0 +LINE + 5 +A6E + 8 +0 + 62 + 0 + 10 +6174.99999 + 20 +5672.4664 + 30 +0.0 + 11 +6175.0 + 21 +5672.466417 + 31 +0.0 + 0 +LINE + 5 +A6F + 8 +0 + 62 + 0 + 10 +5987.499991 + 20 +5391.008144 + 30 +0.0 + 11 +5999.999991 + 21 +5412.658779 + 31 +0.0 + 0 +LINE + 5 +A70 + 8 +0 + 62 + 0 + 10 +6024.999991 + 20 +5455.960049 + 30 +0.0 + 11 +6037.499991 + 21 +5477.610684 + 31 +0.0 + 0 +LINE + 5 +A71 + 8 +0 + 62 + 0 + 10 +6062.499991 + 20 +5520.911955 + 30 +0.0 + 11 +6074.999991 + 21 +5542.56259 + 31 +0.0 + 0 +LINE + 5 +A72 + 8 +0 + 62 + 0 + 10 +6099.999991 + 20 +5585.86386 + 30 +0.0 + 11 +6112.499991 + 21 +5607.514495 + 31 +0.0 + 0 +LINE + 5 +A73 + 8 +0 + 62 + 0 + 10 +6137.499991 + 20 +5650.815765 + 30 +0.0 + 11 +6149.999991 + 21 +5672.4664 + 31 +0.0 + 0 +LINE + 5 +A74 + 8 +0 + 62 + 0 + 10 +6174.999991 + 20 +5715.76767 + 30 +0.0 + 11 +6175.0 + 21 +5715.767687 + 31 +0.0 + 0 +LINE + 5 +A75 + 8 +0 + 62 + 0 + 10 +5987.499991 + 20 +5434.309414 + 30 +0.0 + 11 +5999.999991 + 21 +5455.960049 + 31 +0.0 + 0 +LINE + 5 +A76 + 8 +0 + 62 + 0 + 10 +6024.999991 + 20 +5499.261319 + 30 +0.0 + 11 +6037.499991 + 21 +5520.911955 + 31 +0.0 + 0 +LINE + 5 +A77 + 8 +0 + 62 + 0 + 10 +6062.499991 + 20 +5564.213225 + 30 +0.0 + 11 +6074.999991 + 21 +5585.86386 + 31 +0.0 + 0 +LINE + 5 +A78 + 8 +0 + 62 + 0 + 10 +6099.999991 + 20 +5629.16513 + 30 +0.0 + 11 +6112.499991 + 21 +5650.815765 + 31 +0.0 + 0 +LINE + 5 +A79 + 8 +0 + 62 + 0 + 10 +6137.499991 + 20 +5694.117035 + 30 +0.0 + 11 +6149.999991 + 21 +5715.76767 + 31 +0.0 + 0 +LINE + 5 +A7A + 8 +0 + 62 + 0 + 10 +6174.999991 + 20 +5759.068941 + 30 +0.0 + 11 +6175.0 + 21 +5759.068957 + 31 +0.0 + 0 +LINE + 5 +A7B + 8 +0 + 62 + 0 + 10 +5987.499991 + 20 +5477.610684 + 30 +0.0 + 11 +5999.999991 + 21 +5499.261319 + 31 +0.0 + 0 +LINE + 5 +A7C + 8 +0 + 62 + 0 + 10 +6024.999991 + 20 +5542.56259 + 30 +0.0 + 11 +6037.499991 + 21 +5564.213225 + 31 +0.0 + 0 +LINE + 5 +A7D + 8 +0 + 62 + 0 + 10 +6062.499991 + 20 +5607.514495 + 30 +0.0 + 11 +6074.999991 + 21 +5629.16513 + 31 +0.0 + 0 +LINE + 5 +A7E + 8 +0 + 62 + 0 + 10 +6099.999991 + 20 +5672.4664 + 30 +0.0 + 11 +6112.499991 + 21 +5694.117035 + 31 +0.0 + 0 +LINE + 5 +A7F + 8 +0 + 62 + 0 + 10 +6137.499991 + 20 +5737.418305 + 30 +0.0 + 11 +6149.999991 + 21 +5759.068941 + 31 +0.0 + 0 +LINE + 5 +A80 + 8 +0 + 62 + 0 + 10 +5987.499991 + 20 +5520.911954 + 30 +0.0 + 11 +5999.999991 + 21 +5542.56259 + 31 +0.0 + 0 +LINE + 5 +A81 + 8 +0 + 62 + 0 + 10 +6024.999991 + 20 +5585.86386 + 30 +0.0 + 11 +6037.499991 + 21 +5607.514495 + 31 +0.0 + 0 +LINE + 5 +A82 + 8 +0 + 62 + 0 + 10 +6062.499991 + 20 +5650.815765 + 30 +0.0 + 11 +6074.999991 + 21 +5672.4664 + 31 +0.0 + 0 +LINE + 5 +A83 + 8 +0 + 62 + 0 + 10 +6099.999991 + 20 +5715.76767 + 30 +0.0 + 11 +6112.499991 + 21 +5737.418305 + 31 +0.0 + 0 +LINE + 5 +A84 + 8 +0 + 62 + 0 + 10 +6137.499991 + 20 +5780.719576 + 30 +0.0 + 11 +6142.858046 + 21 +5790.0 + 31 +0.0 + 0 +LINE + 5 +A85 + 8 +0 + 62 + 0 + 10 +5987.499991 + 20 +5564.213225 + 30 +0.0 + 11 +5999.999991 + 21 +5585.86386 + 31 +0.0 + 0 +LINE + 5 +A86 + 8 +0 + 62 + 0 + 10 +6024.999991 + 20 +5629.16513 + 30 +0.0 + 11 +6037.499991 + 21 +5650.815765 + 31 +0.0 + 0 +LINE + 5 +A87 + 8 +0 + 62 + 0 + 10 +6062.499991 + 20 +5694.117035 + 30 +0.0 + 11 +6074.999991 + 21 +5715.76767 + 31 +0.0 + 0 +LINE + 5 +A88 + 8 +0 + 62 + 0 + 10 +6099.999991 + 20 +5759.06894 + 30 +0.0 + 11 +6112.499991 + 21 +5780.719576 + 31 +0.0 + 0 +LINE + 5 +A89 + 8 +0 + 62 + 0 + 10 +5987.499991 + 20 +5607.514495 + 30 +0.0 + 11 +5999.999991 + 21 +5629.16513 + 31 +0.0 + 0 +LINE + 5 +A8A + 8 +0 + 62 + 0 + 10 +6024.999991 + 20 +5672.4664 + 30 +0.0 + 11 +6037.499991 + 21 +5694.117035 + 31 +0.0 + 0 +LINE + 5 +A8B + 8 +0 + 62 + 0 + 10 +6062.499991 + 20 +5737.418305 + 30 +0.0 + 11 +6074.999991 + 21 +5759.06894 + 31 +0.0 + 0 +LINE + 5 +A8C + 8 +0 + 62 + 0 + 10 +5987.499991 + 20 +5650.815765 + 30 +0.0 + 11 +5999.999991 + 21 +5672.4664 + 31 +0.0 + 0 +LINE + 5 +A8D + 8 +0 + 62 + 0 + 10 +6024.999991 + 20 +5715.76767 + 30 +0.0 + 11 +6037.499991 + 21 +5737.418305 + 31 +0.0 + 0 +LINE + 5 +A8E + 8 +0 + 62 + 0 + 10 +6062.499991 + 20 +5780.719575 + 30 +0.0 + 11 +6067.858047 + 21 +5790.0 + 31 +0.0 + 0 +LINE + 5 +A8F + 8 +0 + 62 + 0 + 10 +5987.499991 + 20 +5694.117035 + 30 +0.0 + 11 +5999.999991 + 21 +5715.76767 + 31 +0.0 + 0 +LINE + 5 +A90 + 8 +0 + 62 + 0 + 10 +6024.999991 + 20 +5759.06894 + 30 +0.0 + 11 +6037.499991 + 21 +5780.719575 + 31 +0.0 + 0 +LINE + 5 +A91 + 8 +0 + 62 + 0 + 10 +5987.499991 + 20 +5737.418305 + 30 +0.0 + 11 +5999.999991 + 21 +5759.06894 + 31 +0.0 + 0 +LINE + 5 +A92 + 8 +0 + 62 + 0 + 10 +5987.499991 + 20 +5780.719575 + 30 +0.0 + 11 +5992.858047 + 21 +5790.0 + 31 +0.0 + 0 +LINE + 5 +A93 + 8 +0 + 62 + 0 + 10 +5987.49999 + 20 +4871.392902 + 30 +0.0 + 11 +5999.99999 + 21 +4893.043537 + 31 +0.0 + 0 +LINE + 5 +A94 + 8 +0 + 62 + 0 + 10 +6024.99999 + 20 +4936.344808 + 30 +0.0 + 11 +6037.49999 + 21 +4957.995443 + 31 +0.0 + 0 +LINE + 5 +A95 + 8 +0 + 62 + 0 + 10 +6062.49999 + 20 +5001.296713 + 30 +0.0 + 11 +6074.99999 + 21 +5022.947348 + 31 +0.0 + 0 +LINE + 5 +A96 + 8 +0 + 62 + 0 + 10 +6099.99999 + 20 +5066.248618 + 30 +0.0 + 11 +6112.49999 + 21 +5087.899253 + 31 +0.0 + 0 +LINE + 5 +A97 + 8 +0 + 62 + 0 + 10 +6137.49999 + 20 +5131.200523 + 30 +0.0 + 11 +6149.99999 + 21 +5152.851159 + 31 +0.0 + 0 +LINE + 5 +A98 + 8 +0 + 62 + 0 + 10 +5987.49999 + 20 +4828.091632 + 30 +0.0 + 11 +5999.99999 + 21 +4849.742267 + 31 +0.0 + 0 +LINE + 5 +A99 + 8 +0 + 62 + 0 + 10 +6024.99999 + 20 +4893.043537 + 30 +0.0 + 11 +6037.49999 + 21 +4914.694173 + 31 +0.0 + 0 +LINE + 5 +A9A + 8 +0 + 62 + 0 + 10 +6062.49999 + 20 +4957.995443 + 30 +0.0 + 11 +6074.99999 + 21 +4979.646078 + 31 +0.0 + 0 +LINE + 5 +A9B + 8 +0 + 62 + 0 + 10 +6099.99999 + 20 +5022.947348 + 30 +0.0 + 11 +6112.49999 + 21 +5044.597983 + 31 +0.0 + 0 +LINE + 5 +A9C + 8 +0 + 62 + 0 + 10 +6137.49999 + 20 +5087.899253 + 30 +0.0 + 11 +6149.461578 + 21 +5108.617333 + 31 +0.0 + 0 +LINE + 5 +A9D + 8 +0 + 62 + 0 + 10 +5987.499989 + 20 +4784.790362 + 30 +0.0 + 11 +5999.999989 + 21 +4806.440997 + 31 +0.0 + 0 +LINE + 5 +A9E + 8 +0 + 62 + 0 + 10 +6024.999989 + 20 +4849.742267 + 30 +0.0 + 11 +6037.499989 + 21 +4871.392902 + 31 +0.0 + 0 +LINE + 5 +A9F + 8 +0 + 62 + 0 + 10 +6062.499989 + 20 +4914.694173 + 30 +0.0 + 11 +6074.999989 + 21 +4936.344808 + 31 +0.0 + 0 +LINE + 5 +AA0 + 8 +0 + 62 + 0 + 10 +6099.999989 + 20 +4979.646078 + 30 +0.0 + 11 +6112.499989 + 21 +5001.296713 + 31 +0.0 + 0 +LINE + 5 +AA1 + 8 +0 + 62 + 0 + 10 +6137.499989 + 20 +5044.597983 + 30 +0.0 + 11 +6148.545497 + 21 +5063.729364 + 31 +0.0 + 0 +LINE + 5 +AA2 + 8 +0 + 62 + 0 + 10 +5987.499989 + 20 +4741.489092 + 30 +0.0 + 11 +5999.999989 + 21 +4763.139727 + 31 +0.0 + 0 +LINE + 5 +AA3 + 8 +0 + 62 + 0 + 10 +6024.999989 + 20 +4806.440997 + 30 +0.0 + 11 +6037.499989 + 21 +4828.091632 + 31 +0.0 + 0 +LINE + 5 +AA4 + 8 +0 + 62 + 0 + 10 +6062.499989 + 20 +4871.392902 + 30 +0.0 + 11 +6074.999989 + 21 +4893.043538 + 31 +0.0 + 0 +LINE + 5 +AA5 + 8 +0 + 62 + 0 + 10 +6099.999989 + 20 +4936.344808 + 30 +0.0 + 11 +6112.499989 + 21 +4957.995443 + 31 +0.0 + 0 +LINE + 5 +AA6 + 8 +0 + 62 + 0 + 10 +6137.499989 + 20 +5001.296713 + 30 +0.0 + 11 +6147.629416 + 21 +5018.841395 + 31 +0.0 + 0 +LINE + 5 +AA7 + 8 +0 + 62 + 0 + 10 +5987.499989 + 20 +4698.187822 + 30 +0.0 + 11 +5999.999989 + 21 +4719.838457 + 31 +0.0 + 0 +LINE + 5 +AA8 + 8 +0 + 62 + 0 + 10 +6024.999989 + 20 +4763.139727 + 30 +0.0 + 11 +6037.499989 + 21 +4784.790362 + 31 +0.0 + 0 +LINE + 5 +AA9 + 8 +0 + 62 + 0 + 10 +6062.499989 + 20 +4828.091632 + 30 +0.0 + 11 +6074.999989 + 21 +4849.742267 + 31 +0.0 + 0 +LINE + 5 +AAA + 8 +0 + 62 + 0 + 10 +6099.999989 + 20 +4893.043538 + 30 +0.0 + 11 +6112.499989 + 21 +4914.694173 + 31 +0.0 + 0 +LINE + 5 +AAB + 8 +0 + 62 + 0 + 10 +6137.499989 + 20 +4957.995443 + 30 +0.0 + 11 +6146.713335 + 21 +4973.953426 + 31 +0.0 + 0 +LINE + 5 +AAC + 8 +0 + 62 + 0 + 10 +5987.499989 + 20 +4654.886552 + 30 +0.0 + 11 +5999.999989 + 21 +4676.537187 + 31 +0.0 + 0 +LINE + 5 +AAD + 8 +0 + 62 + 0 + 10 +6024.999989 + 20 +4719.838457 + 30 +0.0 + 11 +6037.499989 + 21 +4741.489092 + 31 +0.0 + 0 +LINE + 5 +AAE + 8 +0 + 62 + 0 + 10 +6062.499989 + 20 +4784.790362 + 30 +0.0 + 11 +6074.999989 + 21 +4806.440997 + 31 +0.0 + 0 +LINE + 5 +AAF + 8 +0 + 62 + 0 + 10 +6099.999989 + 20 +4849.742267 + 30 +0.0 + 11 +6112.499989 + 21 +4871.392903 + 31 +0.0 + 0 +LINE + 5 +AB0 + 8 +0 + 62 + 0 + 10 +6137.499989 + 20 +4914.694173 + 30 +0.0 + 11 +6145.797254 + 21 +4929.065457 + 31 +0.0 + 0 +LINE + 5 +AB1 + 8 +0 + 62 + 0 + 10 +5987.499989 + 20 +4611.585281 + 30 +0.0 + 11 +5999.999989 + 21 +4633.235917 + 31 +0.0 + 0 +LINE + 5 +AB2 + 8 +0 + 62 + 0 + 10 +6024.999989 + 20 +4676.537187 + 30 +0.0 + 11 +6037.499989 + 21 +4698.187822 + 31 +0.0 + 0 +LINE + 5 +AB3 + 8 +0 + 62 + 0 + 10 +6062.499989 + 20 +4741.489092 + 30 +0.0 + 11 +6074.999989 + 21 +4763.139727 + 31 +0.0 + 0 +LINE + 5 +AB4 + 8 +0 + 62 + 0 + 10 +6099.999989 + 20 +4806.440997 + 30 +0.0 + 11 +6112.499989 + 21 +4828.091632 + 31 +0.0 + 0 +LINE + 5 +AB5 + 8 +0 + 62 + 0 + 10 +6137.499989 + 20 +4871.392903 + 30 +0.0 + 11 +6144.881173 + 21 +4884.177489 + 31 +0.0 + 0 +LINE + 5 +AB6 + 8 +0 + 62 + 0 + 10 +5987.499989 + 20 +4568.284011 + 30 +0.0 + 11 +5999.999989 + 21 +4589.934646 + 31 +0.0 + 0 +LINE + 5 +AB7 + 8 +0 + 62 + 0 + 10 +6024.999989 + 20 +4633.235917 + 30 +0.0 + 11 +6037.499989 + 21 +4654.886552 + 31 +0.0 + 0 +LINE + 5 +AB8 + 8 +0 + 62 + 0 + 10 +6062.499989 + 20 +4698.187822 + 30 +0.0 + 11 +6074.999989 + 21 +4719.838457 + 31 +0.0 + 0 +LINE + 5 +AB9 + 8 +0 + 62 + 0 + 10 +6099.999989 + 20 +4763.139727 + 30 +0.0 + 11 +6112.499989 + 21 +4784.790362 + 31 +0.0 + 0 +LINE + 5 +ABA + 8 +0 + 62 + 0 + 10 +6137.499989 + 20 +4828.091632 + 30 +0.0 + 11 +6143.965092 + 21 +4839.28952 + 31 +0.0 + 0 +LINE + 5 +ABB + 8 +0 + 62 + 0 + 10 +5987.499989 + 20 +4524.982741 + 30 +0.0 + 11 +5999.999989 + 21 +4546.633376 + 31 +0.0 + 0 +LINE + 5 +ABC + 8 +0 + 62 + 0 + 10 +6024.999989 + 20 +4589.934646 + 30 +0.0 + 11 +6037.499989 + 21 +4611.585282 + 31 +0.0 + 0 +LINE + 5 +ABD + 8 +0 + 62 + 0 + 10 +6062.499989 + 20 +4654.886552 + 30 +0.0 + 11 +6074.999989 + 21 +4676.537187 + 31 +0.0 + 0 +LINE + 5 +ABE + 8 +0 + 62 + 0 + 10 +6099.999989 + 20 +4719.838457 + 30 +0.0 + 11 +6112.499989 + 21 +4741.489092 + 31 +0.0 + 0 +LINE + 5 +ABF + 8 +0 + 62 + 0 + 10 +6137.499989 + 20 +4784.790362 + 30 +0.0 + 11 +6143.049011 + 21 +4794.401551 + 31 +0.0 + 0 +LINE + 5 +AC0 + 8 +0 + 62 + 0 + 10 +5987.499989 + 20 +4481.681471 + 30 +0.0 + 11 +5999.999989 + 21 +4503.332106 + 31 +0.0 + 0 +LINE + 5 +AC1 + 8 +0 + 62 + 0 + 10 +6024.999989 + 20 +4546.633376 + 30 +0.0 + 11 +6037.499989 + 21 +4568.284011 + 31 +0.0 + 0 +LINE + 5 +AC2 + 8 +0 + 62 + 0 + 10 +6062.499989 + 20 +4611.585282 + 30 +0.0 + 11 +6074.999989 + 21 +4633.235917 + 31 +0.0 + 0 +LINE + 5 +AC3 + 8 +0 + 62 + 0 + 10 +6099.999989 + 20 +4676.537187 + 30 +0.0 + 11 +6112.499989 + 21 +4698.187822 + 31 +0.0 + 0 +LINE + 5 +AC4 + 8 +0 + 62 + 0 + 10 +6137.499989 + 20 +4741.489092 + 30 +0.0 + 11 +6142.13293 + 21 +4749.513582 + 31 +0.0 + 0 +LINE + 5 +AC5 + 8 +0 + 62 + 0 + 10 +5987.499989 + 20 +4438.380201 + 30 +0.0 + 11 +5999.999989 + 21 +4460.030836 + 31 +0.0 + 0 +LINE + 5 +AC6 + 8 +0 + 62 + 0 + 10 +6024.999989 + 20 +4503.332106 + 30 +0.0 + 11 +6037.499989 + 21 +4524.982741 + 31 +0.0 + 0 +LINE + 5 +AC7 + 8 +0 + 62 + 0 + 10 +6062.499989 + 20 +4568.284011 + 30 +0.0 + 11 +6074.999989 + 21 +4589.934647 + 31 +0.0 + 0 +LINE + 5 +AC8 + 8 +0 + 62 + 0 + 10 +6099.999989 + 20 +4633.235917 + 30 +0.0 + 11 +6112.499989 + 21 +4654.886552 + 31 +0.0 + 0 +LINE + 5 +AC9 + 8 +0 + 62 + 0 + 10 +6137.499989 + 20 +4698.187822 + 30 +0.0 + 11 +6141.216849 + 21 +4704.625613 + 31 +0.0 + 0 +LINE + 5 +ACA + 8 +0 + 62 + 0 + 10 +5987.499989 + 20 +4395.078931 + 30 +0.0 + 11 +5999.999989 + 21 +4416.729566 + 31 +0.0 + 0 +LINE + 5 +ACB + 8 +0 + 62 + 0 + 10 +6024.999989 + 20 +4460.030836 + 30 +0.0 + 11 +6037.499989 + 21 +4481.681471 + 31 +0.0 + 0 +LINE + 5 +ACC + 8 +0 + 62 + 0 + 10 +6062.499989 + 20 +4524.982741 + 30 +0.0 + 11 +6074.999989 + 21 +4546.633376 + 31 +0.0 + 0 +LINE + 5 +ACD + 8 +0 + 62 + 0 + 10 +6099.999989 + 20 +4589.934647 + 30 +0.0 + 11 +6112.499989 + 21 +4611.585282 + 31 +0.0 + 0 +LINE + 5 +ACE + 8 +0 + 62 + 0 + 10 +6137.499989 + 20 +4654.886552 + 30 +0.0 + 11 +6140.300768 + 21 +4659.737644 + 31 +0.0 + 0 +LINE + 5 +ACF + 8 +0 + 62 + 0 + 10 +5987.499989 + 20 +4351.777661 + 30 +0.0 + 11 +5999.999989 + 21 +4373.428296 + 31 +0.0 + 0 +LINE + 5 +AD0 + 8 +0 + 62 + 0 + 10 +6024.999989 + 20 +4416.729566 + 30 +0.0 + 11 +6037.499989 + 21 +4438.380201 + 31 +0.0 + 0 +LINE + 5 +AD1 + 8 +0 + 62 + 0 + 10 +6062.499989 + 20 +4481.681471 + 30 +0.0 + 11 +6074.999989 + 21 +4503.332106 + 31 +0.0 + 0 +LINE + 5 +AD2 + 8 +0 + 62 + 0 + 10 +6099.999989 + 20 +4546.633376 + 30 +0.0 + 11 +6112.499989 + 21 +4568.284012 + 31 +0.0 + 0 +LINE + 5 +AD3 + 8 +0 + 62 + 0 + 10 +6137.499989 + 20 +4611.585282 + 30 +0.0 + 11 +6139.384687 + 21 +4614.849676 + 31 +0.0 + 0 +LINE + 5 +AD4 + 8 +0 + 62 + 0 + 10 +5987.499989 + 20 +4308.47639 + 30 +0.0 + 11 +5999.999989 + 21 +4330.127026 + 31 +0.0 + 0 +LINE + 5 +AD5 + 8 +0 + 62 + 0 + 10 +6024.999989 + 20 +4373.428296 + 30 +0.0 + 11 +6037.499989 + 21 +4395.078931 + 31 +0.0 + 0 +LINE + 5 +AD6 + 8 +0 + 62 + 0 + 10 +6062.499989 + 20 +4438.380201 + 30 +0.0 + 11 +6074.999989 + 21 +4460.030836 + 31 +0.0 + 0 +LINE + 5 +AD7 + 8 +0 + 62 + 0 + 10 +6099.999989 + 20 +4503.332106 + 30 +0.0 + 11 +6112.499989 + 21 +4524.982741 + 31 +0.0 + 0 +LINE + 5 +AD8 + 8 +0 + 62 + 0 + 10 +6137.499989 + 20 +4568.284012 + 30 +0.0 + 11 +6138.468606 + 21 +4569.961707 + 31 +0.0 + 0 +LINE + 5 +AD9 + 8 +0 + 62 + 0 + 10 +6024.999988 + 20 +4330.127026 + 30 +0.0 + 11 +6037.499988 + 21 +4351.777661 + 31 +0.0 + 0 +LINE + 5 +ADA + 8 +0 + 62 + 0 + 10 +6062.499988 + 20 +4395.078931 + 30 +0.0 + 11 +6074.999988 + 21 +4416.729566 + 31 +0.0 + 0 +LINE + 5 +ADB + 8 +0 + 62 + 0 + 10 +6099.999988 + 20 +4460.030836 + 30 +0.0 + 11 +6112.499988 + 21 +4481.681471 + 31 +0.0 + 0 +LINE + 5 +ADC + 8 +0 + 62 + 0 + 10 +6137.499988 + 20 +4524.982741 + 30 +0.0 + 11 +6137.552525 + 21 +4525.073738 + 31 +0.0 + 0 +LINE + 5 +ADD + 8 +0 + 62 + 0 + 10 +6062.499988 + 20 +4351.777661 + 30 +0.0 + 11 +6074.999988 + 21 +4373.428296 + 31 +0.0 + 0 +LINE + 5 +ADE + 8 +0 + 62 + 0 + 10 +6099.999988 + 20 +4416.729566 + 30 +0.0 + 11 +6112.499988 + 21 +4438.380201 + 31 +0.0 + 0 +LINE + 5 +ADF + 8 +0 + 62 + 0 + 10 +6099.999988 + 20 +4373.428296 + 30 +0.0 + 11 +6112.499988 + 21 +4395.078931 + 31 +0.0 + 0 +ENDBLK + 5 +AE0 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D39 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D39 + 1 + + 0 +LINE + 5 +AE2 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9820.0 + 20 +2851.0 + 30 +0.0 + 11 +9820.0 + 21 +4224.0 + 31 +0.0 + 0 +INSERT + 5 +AE3 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9820.0 + 20 +2850.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +AE4 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9820.0 + 20 +4225.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +AE5 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9776.25 + 20 +3482.8125 + 30 +0.0 + 40 +87.5 + 1 +55 + 50 +90.0 + 41 +0.75 + 72 + 1 + 11 +9732.5 + 21 +3537.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +AE6 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7915.0 + 20 +2850.0 + 30 +0.0 + 0 +POINT + 5 +AE7 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7915.0 + 20 +4225.0 + 30 +0.0 + 0 +POINT + 5 +AE8 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9820.0 + 20 +4225.0 + 30 +0.0 + 0 +ENDBLK + 5 +AE9 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D40 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D40 + 1 + + 0 +LINE + 5 +AEB + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9820.0 + 20 +4226.0 + 30 +0.0 + 11 +9820.0 + 21 +4624.0 + 31 +0.0 + 0 +INSERT + 5 +AEC + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9820.0 + 20 +4225.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +AED + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9820.0 + 20 +4625.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +AEE + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9776.25 + 20 +4381.25 + 30 +0.0 + 40 +87.5 + 1 +16 + 50 +90.0 + 41 +0.75 + 72 + 1 + 11 +9732.5 + 21 +4425.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +AEF + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7915.0 + 20 +4225.0 + 30 +0.0 + 0 +POINT + 5 +AF0 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8530.0 + 20 +4625.0 + 30 +0.0 + 0 +POINT + 5 +AF1 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9820.0 + 20 +4625.0 + 30 +0.0 + 0 +ENDBLK + 5 +AF2 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D41 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D41 + 1 + + 0 +LINE + 5 +AF4 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9820.0 + 20 +4626.0 + 30 +0.0 + 11 +9820.0 + 21 +4779.0 + 31 +0.0 + 0 +INSERT + 5 +AF5 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9820.0 + 20 +4625.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +AF6 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9820.0 + 20 +4780.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +AF7 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9776.25 + 20 +4680.625 + 30 +0.0 + 40 +87.5 + 1 +4 + 50 +90.0 + 41 +0.75 + 72 + 1 + 11 +9732.5 + 21 +4702.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +AF8 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8530.0 + 20 +4625.0 + 30 +0.0 + 0 +POINT + 5 +AF9 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8555.0 + 20 +4780.0 + 30 +0.0 + 0 +POINT + 5 +AFA + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9820.0 + 20 +4780.0 + 30 +0.0 + 0 +ENDBLK + 5 +AFB + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D42 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D42 + 1 + + 0 +LINE + 5 +AFD + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9820.0 + 20 +4781.0 + 30 +0.0 + 11 +9820.0 + 21 +4899.0 + 31 +0.0 + 0 +INSERT + 5 +AFE + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9820.0 + 20 +4780.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +AFF + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9820.0 + 20 +4900.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +B00 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9776.25 + 20 +4818.125 + 30 +0.0 + 40 +87.5 + 1 +4 + 50 +90.0 + 41 +0.75 + 72 + 1 + 11 +9732.5 + 21 +4840.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +B01 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8555.0 + 20 +4780.0 + 30 +0.0 + 0 +POINT + 5 +B02 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8535.0 + 20 +4900.0 + 30 +0.0 + 0 +POINT + 5 +B03 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9820.0 + 20 +4900.0 + 30 +0.0 + 0 +ENDBLK + 5 +B04 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D43 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D43 + 1 + + 0 +LINE + 5 +B06 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +5966.0 + 20 +6435.0 + 30 +0.0 + 11 +6184.0 + 21 +6435.0 + 31 +0.0 + 0 +INSERT + 5 +B07 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +5965.0 + 20 +6435.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +B08 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +6185.0 + 20 +6435.0 + 30 +0.0 + 0 +TEXT + 5 +B09 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +6053.125 + 20 +6478.75 + 30 +0.0 + 40 +87.5 + 1 +8 + 41 +0.75 + 72 + 1 + 11 +6075.0 + 21 +6522.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +B0A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5965.0 + 20 +5775.0 + 30 +0.0 + 0 +POINT + 5 +B0B + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +6185.0 + 20 +5775.0 + 30 +0.0 + 0 +POINT + 5 +B0C + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +6185.0 + 20 +6435.0 + 30 +0.0 + 0 +ENDBLK + 5 +B0D + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D44 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D44 + 1 + + 0 +LINE + 5 +B0F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +6186.0 + 20 +6435.0 + 30 +0.0 + 11 +7124.0 + 21 +6435.0 + 31 +0.0 + 0 +INSERT + 5 +B10 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +6185.0 + 20 +6435.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +B11 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +7125.0 + 20 +6435.0 + 30 +0.0 + 0 +TEXT + 5 +B12 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +6600.3125 + 20 +6478.75 + 30 +0.0 + 40 +87.5 + 1 +36 + 41 +0.75 + 72 + 1 + 11 +6655.0 + 21 +6522.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +B13 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +6185.0 + 20 +5775.0 + 30 +0.0 + 0 +POINT + 5 +B14 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7125.0 + 20 +5780.0 + 30 +0.0 + 0 +POINT + 5 +B15 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7125.0 + 20 +6435.0 + 30 +0.0 + 0 +ENDBLK + 5 +B16 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D45 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D45 + 1 + + 0 +LINE + 5 +B18 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +5421.0 + 20 +1715.0 + 30 +0.0 + 11 +7919.0 + 21 +1715.0 + 31 +0.0 + 0 +INSERT + 5 +B19 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +5420.0 + 20 +1715.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +B1A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +7920.0 + 20 +1715.0 + 30 +0.0 + 0 +TEXT + 5 +B1B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +6604.375 + 20 +1758.75 + 30 +0.0 + 40 +87.5 + 1 +100 + 41 +0.75 + 72 + 1 + 11 +6670.0 + 21 +1802.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +B1C + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5420.0 + 20 +2850.0 + 30 +0.0 + 0 +POINT + 5 +B1D + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7920.0 + 20 +2850.0 + 30 +0.0 + 0 +POINT + 5 +B1E + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7920.0 + 20 +1715.0 + 30 +0.0 + 0 +ENDBLK + 5 +B1F + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D46 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D46 + 1 + + 0 +LINE + 5 +B21 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +3550.0 + 20 +4661.0 + 30 +0.0 + 11 +3550.0 + 21 +5094.0 + 31 +0.0 + 0 +INSERT + 5 +B22 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +3550.0 + 20 +4660.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +B23 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +3550.0 + 20 +5095.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +B24 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +3506.25 + 20 +4833.75 + 30 +0.0 + 40 +87.5 + 1 +16 + 50 +90.0 + 41 +0.75 + 72 + 1 + 11 +3462.5 + 21 +4877.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +B25 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +6220.0 + 20 +4660.0 + 30 +0.0 + 0 +POINT + 5 +B26 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +6220.0 + 20 +5095.0 + 30 +0.0 + 0 +POINT + 5 +B27 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +3550.0 + 20 +5095.0 + 30 +0.0 + 0 +ENDBLK + 5 +B28 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D47 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D47 + 1 + + 0 +LINE + 5 +B2A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +7126.0 + 20 +6435.0 + 30 +0.0 + 11 +7159.0 + 21 +6435.0 + 31 +0.0 + 0 +INSERT + 5 +B2B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +7125.0 + 20 +6435.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +B2C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +7160.0 + 20 +6435.0 + 30 +0.0 + 0 +TEXT + 5 +B2D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +7204.0625 + 20 +6478.75 + 30 +0.0 + 40 +87.5 + 1 +1 + 41 +0.75 + 72 + 1 + 11 +7215.0 + 21 +6522.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +B2E + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7125.0 + 20 +5780.0 + 30 +0.0 + 0 +POINT + 5 +B2F + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7160.0 + 20 +5785.0 + 30 +0.0 + 0 +POINT + 5 +B30 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7160.0 + 20 +6435.0 + 30 +0.0 + 0 +ENDBLK + 5 +B31 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D48 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D48 + 1 + + 0 +LINE + 5 +B33 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9820.0 + 20 +4901.0 + 30 +0.0 + 11 +9820.0 + 21 +4959.0 + 31 +0.0 + 0 +INSERT + 5 +B34 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9820.0 + 20 +4900.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +B35 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9820.0 + 20 +4960.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +B36 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9776.25 + 20 +4988.125 + 30 +0.0 + 40 +87.5 + 1 +2 + 50 +90.0 + 41 +0.75 + 72 + 1 + 11 +9732.5 + 21 +5010.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +B37 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8535.0 + 20 +4900.0 + 30 +0.0 + 0 +POINT + 5 +B38 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8540.0 + 20 +4960.0 + 30 +0.0 + 0 +POINT + 5 +B39 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9820.0 + 20 +4960.0 + 30 +0.0 + 0 +ENDBLK + 5 +B3A + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X51 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X51 + 1 + + 0 +LINE + 5 +B3C + 8 +0 + 62 + 0 + 10 +14124.696962 + 20 +8185.0 + 30 +0.0 + 11 +14924.696962 + 21 +8985.0 + 31 +0.0 + 0 +LINE + 5 +B3D + 8 +0 + 62 + 0 + 10 +13952.375735 + 20 +8755.140893 + 30 +0.0 + 11 +14182.234842 + 21 +8985.0 + 31 +0.0 + 0 +LINE + 5 +B3E + 8 +0 + 62 + 0 + 10 +14867.159082 + 20 +8185.0 + 30 +0.0 + 11 +15667.159082 + 21 +8985.0 + 31 +0.0 + 0 +LINE + 5 +B3F + 8 +0 + 62 + 0 + 10 +15609.621202 + 20 +8185.0 + 30 +0.0 + 11 +16409.621202 + 21 +8985.0 + 31 +0.0 + 0 +LINE + 5 +B40 + 8 +0 + 62 + 0 + 10 +16352.083323 + 20 +8185.0 + 30 +0.0 + 11 +16564.992137 + 21 +8397.908815 + 31 +0.0 + 0 +LINE + 5 +B41 + 8 +0 + 62 + 0 + 10 +14495.928021 + 20 +8185.0 + 30 +0.0 + 11 +14663.626874 + 21 +8352.698853 + 31 +0.0 + 0 +LINE + 5 +B42 + 8 +0 + 62 + 0 + 10 +14756.434639 + 20 +8445.506618 + 30 +0.0 + 11 +14942.050169 + 21 +8631.122148 + 31 +0.0 + 0 +LINE + 5 +B43 + 8 +0 + 62 + 0 + 10 +15034.857934 + 20 +8723.929913 + 30 +0.0 + 11 +15220.473464 + 21 +8909.545443 + 31 +0.0 + 0 +LINE + 5 +B44 + 8 +0 + 62 + 0 + 10 +13952.375735 + 20 +8383.909833 + 30 +0.0 + 11 +14013.972519 + 21 +8445.506618 + 31 +0.0 + 0 +LINE + 5 +B45 + 8 +0 + 62 + 0 + 10 +14106.780284 + 20 +8538.314383 + 30 +0.0 + 11 +14292.395814 + 21 +8723.929913 + 31 +0.0 + 0 +LINE + 5 +B46 + 8 +0 + 62 + 0 + 10 +14385.203579 + 20 +8816.737678 + 30 +0.0 + 11 +14553.465901 + 21 +8985.0 + 31 +0.0 + 0 +LINE + 5 +B47 + 8 +0 + 62 + 0 + 10 +15238.390142 + 20 +8185.0 + 30 +0.0 + 11 +15313.281229 + 21 +8259.891088 + 31 +0.0 + 0 +LINE + 5 +B48 + 8 +0 + 62 + 0 + 10 +15406.088994 + 20 +8352.698853 + 30 +0.0 + 11 +15591.704525 + 21 +8538.314383 + 31 +0.0 + 0 +LINE + 5 +B49 + 8 +0 + 62 + 0 + 10 +15684.51229 + 20 +8631.122148 + 30 +0.0 + 11 +15870.12782 + 21 +8816.737678 + 31 +0.0 + 0 +LINE + 5 +B4A + 8 +0 + 62 + 0 + 10 +15962.935585 + 20 +8909.545443 + 30 +0.0 + 11 +16038.390142 + 21 +8985.0 + 31 +0.0 + 0 +LINE + 5 +B4B + 8 +0 + 62 + 0 + 10 +16055.74335 + 20 +8259.891088 + 30 +0.0 + 11 +16241.35888 + 21 +8445.506618 + 31 +0.0 + 0 +LINE + 5 +B4C + 8 +0 + 62 + 0 + 10 +16334.166645 + 20 +8538.314383 + 30 +0.0 + 11 +16519.782175 + 21 +8723.929913 + 31 +0.0 + 0 +ENDBLK + 5 +B4D + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X54 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X54 + 1 + + 0 +LINE + 5 +B4F + 8 +0 + 62 + 0 + 10 +14934.375 + 20 +9206.932534 + 30 +0.0 + 11 +14953.125 + 21 +9206.932534 + 31 +0.0 + 0 +LINE + 5 +B50 + 8 +0 + 62 + 0 + 10 +14990.625 + 20 +9206.932534 + 30 +0.0 + 11 +15000.0 + 21 +9206.932534 + 31 +0.0 + 0 +LINE + 5 +B51 + 8 +0 + 62 + 0 + 10 +15625.0 + 20 +9206.932534 + 30 +0.0 + 11 +15628.125 + 21 +9206.932534 + 31 +0.0 + 0 +LINE + 5 +B52 + 8 +0 + 62 + 0 + 10 +15665.625 + 20 +9206.932534 + 30 +0.0 + 11 +15684.375 + 21 +9206.932534 + 31 +0.0 + 0 +LINE + 5 +B53 + 8 +0 + 62 + 0 + 10 +15721.875 + 20 +9206.932534 + 30 +0.0 + 11 +15725.0 + 21 +9206.932534 + 31 +0.0 + 0 +LINE + 5 +B54 + 8 +0 + 62 + 0 + 10 +14906.25 + 20 +9223.17051 + 30 +0.0 + 11 +14925.0 + 21 +9223.17051 + 31 +0.0 + 0 +LINE + 5 +B55 + 8 +0 + 62 + 0 + 10 +14962.5 + 20 +9223.17051 + 30 +0.0 + 11 +14981.25 + 21 +9223.17051 + 31 +0.0 + 0 +LINE + 5 +B56 + 8 +0 + 62 + 0 + 10 +15637.5 + 20 +9223.17051 + 30 +0.0 + 11 +15656.25 + 21 +9223.17051 + 31 +0.0 + 0 +LINE + 5 +B57 + 8 +0 + 62 + 0 + 10 +15693.75 + 20 +9223.17051 + 30 +0.0 + 11 +15712.5 + 21 +9223.17051 + 31 +0.0 + 0 +LINE + 5 +B58 + 8 +0 + 62 + 0 + 10 +14934.375 + 20 +9239.408486 + 30 +0.0 + 11 +14953.125 + 21 +9239.408486 + 31 +0.0 + 0 +LINE + 5 +B59 + 8 +0 + 62 + 0 + 10 +14990.625 + 20 +9239.408486 + 30 +0.0 + 11 +15000.0 + 21 +9239.408486 + 31 +0.0 + 0 +LINE + 5 +B5A + 8 +0 + 62 + 0 + 10 +15625.0 + 20 +9239.408486 + 30 +0.0 + 11 +15628.125 + 21 +9239.408486 + 31 +0.0 + 0 +LINE + 5 +B5B + 8 +0 + 62 + 0 + 10 +15665.625 + 20 +9239.408486 + 30 +0.0 + 11 +15684.375 + 21 +9239.408486 + 31 +0.0 + 0 +LINE + 5 +B5C + 8 +0 + 62 + 0 + 10 +15721.875 + 20 +9239.408486 + 30 +0.0 + 11 +15725.0 + 21 +9239.408486 + 31 +0.0 + 0 +LINE + 5 +B5D + 8 +0 + 62 + 0 + 10 +14906.25 + 20 +9255.646463 + 30 +0.0 + 11 +14925.0 + 21 +9255.646463 + 31 +0.0 + 0 +LINE + 5 +B5E + 8 +0 + 62 + 0 + 10 +14962.5 + 20 +9255.646463 + 30 +0.0 + 11 +14981.25 + 21 +9255.646463 + 31 +0.0 + 0 +LINE + 5 +B5F + 8 +0 + 62 + 0 + 10 +15637.5 + 20 +9255.646463 + 30 +0.0 + 11 +15656.25 + 21 +9255.646463 + 31 +0.0 + 0 +LINE + 5 +B60 + 8 +0 + 62 + 0 + 10 +15693.75 + 20 +9255.646463 + 30 +0.0 + 11 +15712.5 + 21 +9255.646463 + 31 +0.0 + 0 +LINE + 5 +B61 + 8 +0 + 62 + 0 + 10 +14934.375 + 20 +9271.884439 + 30 +0.0 + 11 +14953.125 + 21 +9271.884439 + 31 +0.0 + 0 +LINE + 5 +B62 + 8 +0 + 62 + 0 + 10 +14990.625 + 20 +9271.884439 + 30 +0.0 + 11 +15000.0 + 21 +9271.884439 + 31 +0.0 + 0 +LINE + 5 +B63 + 8 +0 + 62 + 0 + 10 +15625.0 + 20 +9271.884439 + 30 +0.0 + 11 +15628.125 + 21 +9271.884439 + 31 +0.0 + 0 +LINE + 5 +B64 + 8 +0 + 62 + 0 + 10 +15665.625 + 20 +9271.884439 + 30 +0.0 + 11 +15684.375 + 21 +9271.884439 + 31 +0.0 + 0 +LINE + 5 +B65 + 8 +0 + 62 + 0 + 10 +15721.875 + 20 +9271.884439 + 30 +0.0 + 11 +15725.0 + 21 +9271.884439 + 31 +0.0 + 0 +LINE + 5 +B66 + 8 +0 + 62 + 0 + 10 +14906.25 + 20 +9288.122415 + 30 +0.0 + 11 +14925.0 + 21 +9288.122415 + 31 +0.0 + 0 +LINE + 5 +B67 + 8 +0 + 62 + 0 + 10 +14962.5 + 20 +9288.122415 + 30 +0.0 + 11 +14981.25 + 21 +9288.122415 + 31 +0.0 + 0 +LINE + 5 +B68 + 8 +0 + 62 + 0 + 10 +15637.5 + 20 +9288.122415 + 30 +0.0 + 11 +15656.25 + 21 +9288.122415 + 31 +0.0 + 0 +LINE + 5 +B69 + 8 +0 + 62 + 0 + 10 +15693.75 + 20 +9288.122415 + 30 +0.0 + 11 +15712.5 + 21 +9288.122415 + 31 +0.0 + 0 +LINE + 5 +B6A + 8 +0 + 62 + 0 + 10 +14934.375 + 20 +9304.360391 + 30 +0.0 + 11 +14953.125 + 21 +9304.360391 + 31 +0.0 + 0 +LINE + 5 +B6B + 8 +0 + 62 + 0 + 10 +14990.625 + 20 +9304.360391 + 30 +0.0 + 11 +15000.0 + 21 +9304.360391 + 31 +0.0 + 0 +LINE + 5 +B6C + 8 +0 + 62 + 0 + 10 +15625.0 + 20 +9304.360391 + 30 +0.0 + 11 +15628.125 + 21 +9304.360391 + 31 +0.0 + 0 +LINE + 5 +B6D + 8 +0 + 62 + 0 + 10 +15665.625 + 20 +9304.360391 + 30 +0.0 + 11 +15684.375 + 21 +9304.360391 + 31 +0.0 + 0 +LINE + 5 +B6E + 8 +0 + 62 + 0 + 10 +15721.875 + 20 +9304.360391 + 30 +0.0 + 11 +15725.0 + 21 +9304.360391 + 31 +0.0 + 0 +LINE + 5 +B6F + 8 +0 + 62 + 0 + 10 +14906.25 + 20 +9320.598368 + 30 +0.0 + 11 +14925.0 + 21 +9320.598368 + 31 +0.0 + 0 +LINE + 5 +B70 + 8 +0 + 62 + 0 + 10 +14962.5 + 20 +9320.598368 + 30 +0.0 + 11 +14981.25 + 21 +9320.598368 + 31 +0.0 + 0 +LINE + 5 +B71 + 8 +0 + 62 + 0 + 10 +15637.5 + 20 +9320.598368 + 30 +0.0 + 11 +15656.25 + 21 +9320.598368 + 31 +0.0 + 0 +LINE + 5 +B72 + 8 +0 + 62 + 0 + 10 +15693.75 + 20 +9320.598368 + 30 +0.0 + 11 +15712.5 + 21 +9320.598368 + 31 +0.0 + 0 +LINE + 5 +B73 + 8 +0 + 62 + 0 + 10 +14934.375 + 20 +9336.836344 + 30 +0.0 + 11 +14953.125 + 21 +9336.836344 + 31 +0.0 + 0 +LINE + 5 +B74 + 8 +0 + 62 + 0 + 10 +14990.625 + 20 +9336.836344 + 30 +0.0 + 11 +15000.0 + 21 +9336.836344 + 31 +0.0 + 0 +LINE + 5 +B75 + 8 +0 + 62 + 0 + 10 +15625.0 + 20 +9336.836344 + 30 +0.0 + 11 +15628.125 + 21 +9336.836344 + 31 +0.0 + 0 +LINE + 5 +B76 + 8 +0 + 62 + 0 + 10 +15665.625 + 20 +9336.836344 + 30 +0.0 + 11 +15684.375 + 21 +9336.836344 + 31 +0.0 + 0 +LINE + 5 +B77 + 8 +0 + 62 + 0 + 10 +15721.875 + 20 +9336.836344 + 30 +0.0 + 11 +15725.0 + 21 +9336.836344 + 31 +0.0 + 0 +LINE + 5 +B78 + 8 +0 + 62 + 0 + 10 +14906.25 + 20 +9353.07432 + 30 +0.0 + 11 +14925.0 + 21 +9353.07432 + 31 +0.0 + 0 +LINE + 5 +B79 + 8 +0 + 62 + 0 + 10 +14962.5 + 20 +9353.07432 + 30 +0.0 + 11 +14981.25 + 21 +9353.07432 + 31 +0.0 + 0 +LINE + 5 +B7A + 8 +0 + 62 + 0 + 10 +15637.5 + 20 +9353.07432 + 30 +0.0 + 11 +15656.25 + 21 +9353.07432 + 31 +0.0 + 0 +LINE + 5 +B7B + 8 +0 + 62 + 0 + 10 +15693.75 + 20 +9353.07432 + 30 +0.0 + 11 +15712.5 + 21 +9353.07432 + 31 +0.0 + 0 +LINE + 5 +B7C + 8 +0 + 62 + 0 + 10 +14934.375 + 20 +9369.312296 + 30 +0.0 + 11 +14953.125 + 21 +9369.312296 + 31 +0.0 + 0 +LINE + 5 +B7D + 8 +0 + 62 + 0 + 10 +14990.625 + 20 +9369.312296 + 30 +0.0 + 11 +15000.0 + 21 +9369.312296 + 31 +0.0 + 0 +LINE + 5 +B7E + 8 +0 + 62 + 0 + 10 +15625.0 + 20 +9369.312296 + 30 +0.0 + 11 +15628.125 + 21 +9369.312296 + 31 +0.0 + 0 +LINE + 5 +B7F + 8 +0 + 62 + 0 + 10 +15665.625 + 20 +9369.312296 + 30 +0.0 + 11 +15684.375 + 21 +9369.312296 + 31 +0.0 + 0 +LINE + 5 +B80 + 8 +0 + 62 + 0 + 10 +15721.875 + 20 +9369.312296 + 30 +0.0 + 11 +15725.0 + 21 +9369.312296 + 31 +0.0 + 0 +LINE + 5 +B81 + 8 +0 + 62 + 0 + 10 +14906.25 + 20 +9385.550273 + 30 +0.0 + 11 +14925.0 + 21 +9385.550273 + 31 +0.0 + 0 +LINE + 5 +B82 + 8 +0 + 62 + 0 + 10 +14962.5 + 20 +9385.550273 + 30 +0.0 + 11 +14981.25 + 21 +9385.550273 + 31 +0.0 + 0 +LINE + 5 +B83 + 8 +0 + 62 + 0 + 10 +15637.5 + 20 +9385.550273 + 30 +0.0 + 11 +15656.25 + 21 +9385.550273 + 31 +0.0 + 0 +LINE + 5 +B84 + 8 +0 + 62 + 0 + 10 +15693.75 + 20 +9385.550273 + 30 +0.0 + 11 +15712.5 + 21 +9385.550273 + 31 +0.0 + 0 +LINE + 5 +B85 + 8 +0 + 62 + 0 + 10 +14934.375 + 20 +9401.788249 + 30 +0.0 + 11 +14953.125 + 21 +9401.788249 + 31 +0.0 + 0 +LINE + 5 +B86 + 8 +0 + 62 + 0 + 10 +14990.625 + 20 +9401.788249 + 30 +0.0 + 11 +15000.0 + 21 +9401.788249 + 31 +0.0 + 0 +LINE + 5 +B87 + 8 +0 + 62 + 0 + 10 +15625.0 + 20 +9401.788249 + 30 +0.0 + 11 +15628.125 + 21 +9401.788249 + 31 +0.0 + 0 +LINE + 5 +B88 + 8 +0 + 62 + 0 + 10 +15665.625 + 20 +9401.788249 + 30 +0.0 + 11 +15684.375 + 21 +9401.788249 + 31 +0.0 + 0 +LINE + 5 +B89 + 8 +0 + 62 + 0 + 10 +15721.875 + 20 +9401.788249 + 30 +0.0 + 11 +15725.0 + 21 +9401.788249 + 31 +0.0 + 0 +LINE + 5 +B8A + 8 +0 + 62 + 0 + 10 +14906.25 + 20 +9418.026225 + 30 +0.0 + 11 +14925.0 + 21 +9418.026225 + 31 +0.0 + 0 +LINE + 5 +B8B + 8 +0 + 62 + 0 + 10 +14962.5 + 20 +9418.026225 + 30 +0.0 + 11 +14981.25 + 21 +9418.026225 + 31 +0.0 + 0 +LINE + 5 +B8C + 8 +0 + 62 + 0 + 10 +15637.5 + 20 +9418.026225 + 30 +0.0 + 11 +15656.25 + 21 +9418.026225 + 31 +0.0 + 0 +LINE + 5 +B8D + 8 +0 + 62 + 0 + 10 +15693.75 + 20 +9418.026225 + 30 +0.0 + 11 +15712.5 + 21 +9418.026225 + 31 +0.0 + 0 +LINE + 5 +B8E + 8 +0 + 62 + 0 + 10 +14934.375 + 20 +9434.264201 + 30 +0.0 + 11 +14953.125 + 21 +9434.264201 + 31 +0.0 + 0 +LINE + 5 +B8F + 8 +0 + 62 + 0 + 10 +14990.625 + 20 +9434.264201 + 30 +0.0 + 11 +15000.0 + 21 +9434.264201 + 31 +0.0 + 0 +LINE + 5 +B90 + 8 +0 + 62 + 0 + 10 +15625.0 + 20 +9434.264201 + 30 +0.0 + 11 +15628.125 + 21 +9434.264201 + 31 +0.0 + 0 +LINE + 5 +B91 + 8 +0 + 62 + 0 + 10 +15665.625 + 20 +9434.264201 + 30 +0.0 + 11 +15684.375 + 21 +9434.264201 + 31 +0.0 + 0 +LINE + 5 +B92 + 8 +0 + 62 + 0 + 10 +15721.875 + 20 +9434.264201 + 30 +0.0 + 11 +15725.0 + 21 +9434.264201 + 31 +0.0 + 0 +LINE + 5 +B93 + 8 +0 + 62 + 0 + 10 +14906.25 + 20 +9190.694558 + 30 +0.0 + 11 +14925.0 + 21 +9190.694558 + 31 +0.0 + 0 +LINE + 5 +B94 + 8 +0 + 62 + 0 + 10 +14962.5 + 20 +9190.694558 + 30 +0.0 + 11 +14981.25 + 21 +9190.694558 + 31 +0.0 + 0 +LINE + 5 +B95 + 8 +0 + 62 + 0 + 10 +15637.5 + 20 +9190.694558 + 30 +0.0 + 11 +15656.25 + 21 +9190.694558 + 31 +0.0 + 0 +LINE + 5 +B96 + 8 +0 + 62 + 0 + 10 +15693.75 + 20 +9190.694558 + 30 +0.0 + 11 +15712.5 + 21 +9190.694558 + 31 +0.0 + 0 +LINE + 5 +B97 + 8 +0 + 62 + 0 + 10 +14934.375 + 20 +9174.456581 + 30 +0.0 + 11 +14953.125 + 21 +9174.456581 + 31 +0.0 + 0 +LINE + 5 +B98 + 8 +0 + 62 + 0 + 10 +14990.625 + 20 +9174.456581 + 30 +0.0 + 11 +15000.0 + 21 +9174.456581 + 31 +0.0 + 0 +LINE + 5 +B99 + 8 +0 + 62 + 0 + 10 +15625.0 + 20 +9174.456581 + 30 +0.0 + 11 +15628.125 + 21 +9174.456581 + 31 +0.0 + 0 +LINE + 5 +B9A + 8 +0 + 62 + 0 + 10 +15665.625 + 20 +9174.456581 + 30 +0.0 + 11 +15684.375 + 21 +9174.456581 + 31 +0.0 + 0 +LINE + 5 +B9B + 8 +0 + 62 + 0 + 10 +15721.875 + 20 +9174.456581 + 30 +0.0 + 11 +15725.0 + 21 +9174.456581 + 31 +0.0 + 0 +LINE + 5 +B9C + 8 +0 + 62 + 0 + 10 +14906.25 + 20 +9158.218605 + 30 +0.0 + 11 +14925.0 + 21 +9158.218605 + 31 +0.0 + 0 +LINE + 5 +B9D + 8 +0 + 62 + 0 + 10 +14962.5 + 20 +9158.218605 + 30 +0.0 + 11 +14981.25 + 21 +9158.218605 + 31 +0.0 + 0 +LINE + 5 +B9E + 8 +0 + 62 + 0 + 10 +15637.5 + 20 +9158.218605 + 30 +0.0 + 11 +15656.25 + 21 +9158.218605 + 31 +0.0 + 0 +LINE + 5 +B9F + 8 +0 + 62 + 0 + 10 +15693.75 + 20 +9158.218605 + 30 +0.0 + 11 +15712.5 + 21 +9158.218605 + 31 +0.0 + 0 +LINE + 5 +BA0 + 8 +0 + 62 + 0 + 10 +14934.375 + 20 +9141.980629 + 30 +0.0 + 11 +14953.125 + 21 +9141.980629 + 31 +0.0 + 0 +LINE + 5 +BA1 + 8 +0 + 62 + 0 + 10 +14990.625 + 20 +9141.980629 + 30 +0.0 + 11 +15000.0 + 21 +9141.980629 + 31 +0.0 + 0 +LINE + 5 +BA2 + 8 +0 + 62 + 0 + 10 +15625.0 + 20 +9141.980629 + 30 +0.0 + 11 +15628.125 + 21 +9141.980629 + 31 +0.0 + 0 +LINE + 5 +BA3 + 8 +0 + 62 + 0 + 10 +15665.625 + 20 +9141.980629 + 30 +0.0 + 11 +15684.375 + 21 +9141.980629 + 31 +0.0 + 0 +LINE + 5 +BA4 + 8 +0 + 62 + 0 + 10 +15721.875 + 20 +9141.980629 + 30 +0.0 + 11 +15725.0 + 21 +9141.980629 + 31 +0.0 + 0 +LINE + 5 +BA5 + 8 +0 + 62 + 0 + 10 +14906.25 + 20 +9125.742653 + 30 +0.0 + 11 +14925.0 + 21 +9125.742653 + 31 +0.0 + 0 +LINE + 5 +BA6 + 8 +0 + 62 + 0 + 10 +14962.5 + 20 +9125.742653 + 30 +0.0 + 11 +14981.25 + 21 +9125.742653 + 31 +0.0 + 0 +LINE + 5 +BA7 + 8 +0 + 62 + 0 + 10 +15637.5 + 20 +9125.742653 + 30 +0.0 + 11 +15656.25 + 21 +9125.742653 + 31 +0.0 + 0 +LINE + 5 +BA8 + 8 +0 + 62 + 0 + 10 +15693.75 + 20 +9125.742653 + 30 +0.0 + 11 +15712.5 + 21 +9125.742653 + 31 +0.0 + 0 +LINE + 5 +BA9 + 8 +0 + 62 + 0 + 10 +14934.375 + 20 +9109.504676 + 30 +0.0 + 11 +14953.125 + 21 +9109.504676 + 31 +0.0 + 0 +LINE + 5 +BAA + 8 +0 + 62 + 0 + 10 +14990.625 + 20 +9109.504676 + 30 +0.0 + 11 +15000.0 + 21 +9109.504676 + 31 +0.0 + 0 +LINE + 5 +BAB + 8 +0 + 62 + 0 + 10 +15625.0 + 20 +9109.504676 + 30 +0.0 + 11 +15628.125 + 21 +9109.504676 + 31 +0.0 + 0 +LINE + 5 +BAC + 8 +0 + 62 + 0 + 10 +15665.625 + 20 +9109.504676 + 30 +0.0 + 11 +15684.375 + 21 +9109.504676 + 31 +0.0 + 0 +LINE + 5 +BAD + 8 +0 + 62 + 0 + 10 +15721.875 + 20 +9109.504676 + 30 +0.0 + 11 +15725.0 + 21 +9109.504676 + 31 +0.0 + 0 +LINE + 5 +BAE + 8 +0 + 62 + 0 + 10 +14906.25 + 20 +9093.2667 + 30 +0.0 + 11 +14925.0 + 21 +9093.2667 + 31 +0.0 + 0 +LINE + 5 +BAF + 8 +0 + 62 + 0 + 10 +14962.5 + 20 +9093.2667 + 30 +0.0 + 11 +14981.25 + 21 +9093.2667 + 31 +0.0 + 0 +LINE + 5 +BB0 + 8 +0 + 62 + 0 + 10 +15637.5 + 20 +9093.2667 + 30 +0.0 + 11 +15656.25 + 21 +9093.2667 + 31 +0.0 + 0 +LINE + 5 +BB1 + 8 +0 + 62 + 0 + 10 +15693.75 + 20 +9093.2667 + 30 +0.0 + 11 +15712.5 + 21 +9093.2667 + 31 +0.0 + 0 +LINE + 5 +BB2 + 8 +0 + 62 + 0 + 10 +14934.375 + 20 +9077.028724 + 30 +0.0 + 11 +14953.125 + 21 +9077.028724 + 31 +0.0 + 0 +LINE + 5 +BB3 + 8 +0 + 62 + 0 + 10 +14990.625 + 20 +9077.028724 + 30 +0.0 + 11 +15000.0 + 21 +9077.028724 + 31 +0.0 + 0 +LINE + 5 +BB4 + 8 +0 + 62 + 0 + 10 +15625.0 + 20 +9077.028724 + 30 +0.0 + 11 +15628.125 + 21 +9077.028724 + 31 +0.0 + 0 +LINE + 5 +BB5 + 8 +0 + 62 + 0 + 10 +15665.625 + 20 +9077.028724 + 30 +0.0 + 11 +15684.375 + 21 +9077.028724 + 31 +0.0 + 0 +LINE + 5 +BB6 + 8 +0 + 62 + 0 + 10 +15721.875 + 20 +9077.028724 + 30 +0.0 + 11 +15725.0 + 21 +9077.028724 + 31 +0.0 + 0 +LINE + 5 +BB7 + 8 +0 + 62 + 0 + 10 +14906.25 + 20 +9060.790748 + 30 +0.0 + 11 +14925.0 + 21 +9060.790748 + 31 +0.0 + 0 +LINE + 5 +BB8 + 8 +0 + 62 + 0 + 10 +14962.5 + 20 +9060.790748 + 30 +0.0 + 11 +14981.25 + 21 +9060.790748 + 31 +0.0 + 0 +LINE + 5 +BB9 + 8 +0 + 62 + 0 + 10 +15637.5 + 20 +9060.790748 + 30 +0.0 + 11 +15656.25 + 21 +9060.790748 + 31 +0.0 + 0 +LINE + 5 +BBA + 8 +0 + 62 + 0 + 10 +15693.75 + 20 +9060.790748 + 30 +0.0 + 11 +15712.5 + 21 +9060.790748 + 31 +0.0 + 0 +LINE + 5 +BBB + 8 +0 + 62 + 0 + 10 +14934.375 + 20 +9044.552771 + 30 +0.0 + 11 +14953.125 + 21 +9044.552771 + 31 +0.0 + 0 +LINE + 5 +BBC + 8 +0 + 62 + 0 + 10 +14990.625 + 20 +9044.552771 + 30 +0.0 + 11 +15000.0 + 21 +9044.552771 + 31 +0.0 + 0 +LINE + 5 +BBD + 8 +0 + 62 + 0 + 10 +15625.0 + 20 +9044.552771 + 30 +0.0 + 11 +15628.125 + 21 +9044.552771 + 31 +0.0 + 0 +LINE + 5 +BBE + 8 +0 + 62 + 0 + 10 +15665.625 + 20 +9044.552771 + 30 +0.0 + 11 +15684.375 + 21 +9044.552771 + 31 +0.0 + 0 +LINE + 5 +BBF + 8 +0 + 62 + 0 + 10 +15721.875 + 20 +9044.552771 + 30 +0.0 + 11 +15725.0 + 21 +9044.552771 + 31 +0.0 + 0 +LINE + 5 +BC0 + 8 +0 + 62 + 0 + 10 +14906.25 + 20 +9028.314795 + 30 +0.0 + 11 +14925.0 + 21 +9028.314795 + 31 +0.0 + 0 +LINE + 5 +BC1 + 8 +0 + 62 + 0 + 10 +14962.5 + 20 +9028.314795 + 30 +0.0 + 11 +14981.25 + 21 +9028.314795 + 31 +0.0 + 0 +LINE + 5 +BC2 + 8 +0 + 62 + 0 + 10 +15637.5 + 20 +9028.314795 + 30 +0.0 + 11 +15656.25 + 21 +9028.314795 + 31 +0.0 + 0 +LINE + 5 +BC3 + 8 +0 + 62 + 0 + 10 +15693.75 + 20 +9028.314795 + 30 +0.0 + 11 +15712.5 + 21 +9028.314795 + 31 +0.0 + 0 +LINE + 5 +BC4 + 8 +0 + 62 + 0 + 10 +14934.375 + 20 +9012.076819 + 30 +0.0 + 11 +14953.125 + 21 +9012.076819 + 31 +0.0 + 0 +LINE + 5 +BC5 + 8 +0 + 62 + 0 + 10 +14990.625 + 20 +9012.076819 + 30 +0.0 + 11 +15000.0 + 21 +9012.076819 + 31 +0.0 + 0 +LINE + 5 +BC6 + 8 +0 + 62 + 0 + 10 +15625.0 + 20 +9012.076819 + 30 +0.0 + 11 +15628.125 + 21 +9012.076819 + 31 +0.0 + 0 +LINE + 5 +BC7 + 8 +0 + 62 + 0 + 10 +15665.625 + 20 +9012.076819 + 30 +0.0 + 11 +15684.375 + 21 +9012.076819 + 31 +0.0 + 0 +LINE + 5 +BC8 + 8 +0 + 62 + 0 + 10 +15721.875 + 20 +9012.076819 + 30 +0.0 + 11 +15725.0 + 21 +9012.076819 + 31 +0.0 + 0 +LINE + 5 +BC9 + 8 +0 + 62 + 0 + 10 +14906.25 + 20 +8995.838843 + 30 +0.0 + 11 +14925.0 + 21 +8995.838843 + 31 +0.0 + 0 +LINE + 5 +BCA + 8 +0 + 62 + 0 + 10 +14962.5 + 20 +8995.838843 + 30 +0.0 + 11 +14981.25 + 21 +8995.838843 + 31 +0.0 + 0 +LINE + 5 +BCB + 8 +0 + 62 + 0 + 10 +15637.5 + 20 +8995.838843 + 30 +0.0 + 11 +15656.25 + 21 +8995.838843 + 31 +0.0 + 0 +LINE + 5 +BCC + 8 +0 + 62 + 0 + 10 +15693.75 + 20 +8995.838843 + 30 +0.0 + 11 +15712.5 + 21 +8995.838843 + 31 +0.0 + 0 +LINE + 5 +BCD + 8 +0 + 62 + 0 + 10 +14990.624933 + 20 +9434.264204 + 30 +0.0 + 11 +14990.200121 + 21 +9435.0 + 31 +0.0 + 0 +LINE + 5 +BCE + 8 +0 + 62 + 0 + 10 +14990.624933 + 20 +9401.788251 + 30 +0.0 + 11 +14981.249933 + 21 +9418.026228 + 31 +0.0 + 0 +LINE + 5 +BCF + 8 +0 + 62 + 0 + 10 +14990.624933 + 20 +9369.312299 + 30 +0.0 + 11 +14981.249933 + 21 +9385.550275 + 31 +0.0 + 0 +LINE + 5 +BD0 + 8 +0 + 62 + 0 + 10 +14962.499933 + 20 +9418.026228 + 30 +0.0 + 11 +14953.124933 + 21 +9434.264204 + 31 +0.0 + 0 +LINE + 5 +BD1 + 8 +0 + 62 + 0 + 10 +14990.624933 + 20 +9336.836346 + 30 +0.0 + 11 +14981.249933 + 21 +9353.074322 + 31 +0.0 + 0 +LINE + 5 +BD2 + 8 +0 + 62 + 0 + 10 +14962.499933 + 20 +9385.550275 + 30 +0.0 + 11 +14953.124933 + 21 +9401.788251 + 31 +0.0 + 0 +LINE + 5 +BD3 + 8 +0 + 62 + 0 + 10 +14934.374933 + 20 +9434.264204 + 30 +0.0 + 11 +14933.950121 + 21 +9435.0 + 31 +0.0 + 0 +LINE + 5 +BD4 + 8 +0 + 62 + 0 + 10 +14990.624933 + 20 +9304.360393 + 30 +0.0 + 11 +14981.249933 + 21 +9320.59837 + 31 +0.0 + 0 +LINE + 5 +BD5 + 8 +0 + 62 + 0 + 10 +14962.499933 + 20 +9353.074322 + 30 +0.0 + 11 +14953.124933 + 21 +9369.312299 + 31 +0.0 + 0 +LINE + 5 +BD6 + 8 +0 + 62 + 0 + 10 +14934.374933 + 20 +9401.788251 + 30 +0.0 + 11 +14924.999933 + 21 +9418.026228 + 31 +0.0 + 0 +LINE + 5 +BD7 + 8 +0 + 62 + 0 + 10 +14990.624933 + 20 +9271.884441 + 30 +0.0 + 11 +14981.249933 + 21 +9288.122417 + 31 +0.0 + 0 +LINE + 5 +BD8 + 8 +0 + 62 + 0 + 10 +14962.499933 + 20 +9320.59837 + 30 +0.0 + 11 +14953.124933 + 21 +9336.836346 + 31 +0.0 + 0 +LINE + 5 +BD9 + 8 +0 + 62 + 0 + 10 +14934.374933 + 20 +9369.312299 + 30 +0.0 + 11 +14924.999933 + 21 +9385.550275 + 31 +0.0 + 0 +LINE + 5 +BDA + 8 +0 + 62 + 0 + 10 +14906.249933 + 20 +9418.026228 + 30 +0.0 + 11 +14900.0 + 21 +9428.85143 + 31 +0.0 + 0 +LINE + 5 +BDB + 8 +0 + 62 + 0 + 10 +14990.624933 + 20 +9239.408488 + 30 +0.0 + 11 +14981.249933 + 21 +9255.646464 + 31 +0.0 + 0 +LINE + 5 +BDC + 8 +0 + 62 + 0 + 10 +14962.499933 + 20 +9288.122417 + 30 +0.0 + 11 +14953.124933 + 21 +9304.360393 + 31 +0.0 + 0 +LINE + 5 +BDD + 8 +0 + 62 + 0 + 10 +14934.374933 + 20 +9336.836346 + 30 +0.0 + 11 +14924.999933 + 21 +9353.074322 + 31 +0.0 + 0 +LINE + 5 +BDE + 8 +0 + 62 + 0 + 10 +14906.249933 + 20 +9385.550275 + 30 +0.0 + 11 +14900.0 + 21 +9396.375477 + 31 +0.0 + 0 +LINE + 5 +BDF + 8 +0 + 62 + 0 + 10 +14990.624933 + 20 +9206.932536 + 30 +0.0 + 11 +14981.249933 + 21 +9223.170512 + 31 +0.0 + 0 +LINE + 5 +BE0 + 8 +0 + 62 + 0 + 10 +14962.499933 + 20 +9255.646465 + 30 +0.0 + 11 +14953.124933 + 21 +9271.884441 + 31 +0.0 + 0 +LINE + 5 +BE1 + 8 +0 + 62 + 0 + 10 +14934.374933 + 20 +9304.360393 + 30 +0.0 + 11 +14924.999933 + 21 +9320.59837 + 31 +0.0 + 0 +LINE + 5 +BE2 + 8 +0 + 62 + 0 + 10 +14906.249933 + 20 +9353.074322 + 30 +0.0 + 11 +14900.0 + 21 +9363.899525 + 31 +0.0 + 0 +LINE + 5 +BE3 + 8 +0 + 62 + 0 + 10 +14990.624934 + 20 +9174.456583 + 30 +0.0 + 11 +14981.249934 + 21 +9190.694559 + 31 +0.0 + 0 +LINE + 5 +BE4 + 8 +0 + 62 + 0 + 10 +14962.499934 + 20 +9223.170512 + 30 +0.0 + 11 +14953.124934 + 21 +9239.408488 + 31 +0.0 + 0 +LINE + 5 +BE5 + 8 +0 + 62 + 0 + 10 +14934.374934 + 20 +9271.884441 + 30 +0.0 + 11 +14924.999934 + 21 +9288.122417 + 31 +0.0 + 0 +LINE + 5 +BE6 + 8 +0 + 62 + 0 + 10 +14906.249934 + 20 +9320.59837 + 30 +0.0 + 11 +14900.0 + 21 +9331.423572 + 31 +0.0 + 0 +LINE + 5 +BE7 + 8 +0 + 62 + 0 + 10 +14990.624934 + 20 +9141.98063 + 30 +0.0 + 11 +14981.249934 + 21 +9158.218607 + 31 +0.0 + 0 +LINE + 5 +BE8 + 8 +0 + 62 + 0 + 10 +14962.499934 + 20 +9190.694559 + 30 +0.0 + 11 +14953.124934 + 21 +9206.932536 + 31 +0.0 + 0 +LINE + 5 +BE9 + 8 +0 + 62 + 0 + 10 +14934.374934 + 20 +9239.408488 + 30 +0.0 + 11 +14924.999934 + 21 +9255.646465 + 31 +0.0 + 0 +LINE + 5 +BEA + 8 +0 + 62 + 0 + 10 +14906.249934 + 20 +9288.122417 + 30 +0.0 + 11 +14900.0 + 21 +9298.94762 + 31 +0.0 + 0 +LINE + 5 +BEB + 8 +0 + 62 + 0 + 10 +14990.624934 + 20 +9109.504678 + 30 +0.0 + 11 +14981.249934 + 21 +9125.742654 + 31 +0.0 + 0 +LINE + 5 +BEC + 8 +0 + 62 + 0 + 10 +14962.499934 + 20 +9158.218607 + 30 +0.0 + 11 +14953.124934 + 21 +9174.456583 + 31 +0.0 + 0 +LINE + 5 +BED + 8 +0 + 62 + 0 + 10 +14934.374934 + 20 +9206.932536 + 30 +0.0 + 11 +14924.999934 + 21 +9223.170512 + 31 +0.0 + 0 +LINE + 5 +BEE + 8 +0 + 62 + 0 + 10 +14906.249934 + 20 +9255.646465 + 30 +0.0 + 11 +14900.0 + 21 +9266.471667 + 31 +0.0 + 0 +LINE + 5 +BEF + 8 +0 + 62 + 0 + 10 +14990.624934 + 20 +9077.028725 + 30 +0.0 + 11 +14981.249934 + 21 +9093.266701 + 31 +0.0 + 0 +LINE + 5 +BF0 + 8 +0 + 62 + 0 + 10 +14962.499934 + 20 +9125.742654 + 30 +0.0 + 11 +14953.124934 + 21 +9141.98063 + 31 +0.0 + 0 +LINE + 5 +BF1 + 8 +0 + 62 + 0 + 10 +14934.374934 + 20 +9174.456583 + 30 +0.0 + 11 +14924.999934 + 21 +9190.694559 + 31 +0.0 + 0 +LINE + 5 +BF2 + 8 +0 + 62 + 0 + 10 +14906.249934 + 20 +9223.170512 + 30 +0.0 + 11 +14900.0 + 21 +9233.995715 + 31 +0.0 + 0 +LINE + 5 +BF3 + 8 +0 + 62 + 0 + 10 +14990.624934 + 20 +9044.552773 + 30 +0.0 + 11 +14981.249934 + 21 +9060.790749 + 31 +0.0 + 0 +LINE + 5 +BF4 + 8 +0 + 62 + 0 + 10 +14962.499934 + 20 +9093.266701 + 30 +0.0 + 11 +14953.124934 + 21 +9109.504678 + 31 +0.0 + 0 +LINE + 5 +BF5 + 8 +0 + 62 + 0 + 10 +14934.374934 + 20 +9141.98063 + 30 +0.0 + 11 +14924.999934 + 21 +9158.218607 + 31 +0.0 + 0 +LINE + 5 +BF6 + 8 +0 + 62 + 0 + 10 +14906.249934 + 20 +9190.694559 + 30 +0.0 + 11 +14900.0 + 21 +9201.519762 + 31 +0.0 + 0 +LINE + 5 +BF7 + 8 +0 + 62 + 0 + 10 +14990.624934 + 20 +9012.07682 + 30 +0.0 + 11 +14981.249934 + 21 +9028.314796 + 31 +0.0 + 0 +LINE + 5 +BF8 + 8 +0 + 62 + 0 + 10 +14962.499934 + 20 +9060.790749 + 30 +0.0 + 11 +14953.124934 + 21 +9077.028725 + 31 +0.0 + 0 +LINE + 5 +BF9 + 8 +0 + 62 + 0 + 10 +14934.374934 + 20 +9109.504678 + 30 +0.0 + 11 +14924.999934 + 21 +9125.742654 + 31 +0.0 + 0 +LINE + 5 +BFA + 8 +0 + 62 + 0 + 10 +14906.249934 + 20 +9158.218607 + 30 +0.0 + 11 +14900.0 + 21 +9169.04381 + 31 +0.0 + 0 +LINE + 5 +BFB + 8 +0 + 62 + 0 + 10 +14987.507743 + 20 +8985.0 + 30 +0.0 + 11 +14981.249934 + 21 +8995.838844 + 31 +0.0 + 0 +LINE + 5 +BFC + 8 +0 + 62 + 0 + 10 +14962.499934 + 20 +9028.314796 + 30 +0.0 + 11 +14953.124934 + 21 +9044.552773 + 31 +0.0 + 0 +LINE + 5 +BFD + 8 +0 + 62 + 0 + 10 +14934.374934 + 20 +9077.028725 + 30 +0.0 + 11 +14924.999934 + 21 +9093.266702 + 31 +0.0 + 0 +LINE + 5 +BFE + 8 +0 + 62 + 0 + 10 +14906.249934 + 20 +9125.742654 + 30 +0.0 + 11 +14900.0 + 21 +9136.567857 + 31 +0.0 + 0 +LINE + 5 +BFF + 8 +0 + 62 + 0 + 10 +14962.499934 + 20 +8995.838844 + 30 +0.0 + 11 +14953.124934 + 21 +9012.07682 + 31 +0.0 + 0 +LINE + 5 +C00 + 8 +0 + 62 + 0 + 10 +14934.374934 + 20 +9044.552773 + 30 +0.0 + 11 +14924.999934 + 21 +9060.790749 + 31 +0.0 + 0 +LINE + 5 +C01 + 8 +0 + 62 + 0 + 10 +14906.249934 + 20 +9093.266702 + 30 +0.0 + 11 +14900.0 + 21 +9104.091905 + 31 +0.0 + 0 +LINE + 5 +C02 + 8 +0 + 62 + 0 + 10 +14934.374934 + 20 +9012.07682 + 30 +0.0 + 11 +14924.999934 + 21 +9028.314796 + 31 +0.0 + 0 +LINE + 5 +C03 + 8 +0 + 62 + 0 + 10 +14906.249934 + 20 +9060.790749 + 30 +0.0 + 11 +14900.0 + 21 +9071.615952 + 31 +0.0 + 0 +LINE + 5 +C04 + 8 +0 + 62 + 0 + 10 +14931.257743 + 20 +8985.0 + 30 +0.0 + 11 +14924.999934 + 21 +8995.838844 + 31 +0.0 + 0 +LINE + 5 +C05 + 8 +0 + 62 + 0 + 10 +14906.249934 + 20 +9028.314796 + 30 +0.0 + 11 +14900.0 + 21 +9039.14 + 31 +0.0 + 0 +LINE + 5 +C06 + 8 +0 + 62 + 0 + 10 +14906.249934 + 20 +8995.838844 + 30 +0.0 + 11 +14900.0 + 21 +9006.664047 + 31 +0.0 + 0 +LINE + 5 +C07 + 8 +0 + 62 + 0 + 10 +15637.499932 + 20 +8995.838842 + 30 +0.0 + 11 +15628.124932 + 21 +9012.076819 + 31 +0.0 + 0 +LINE + 5 +C08 + 8 +0 + 62 + 0 + 10 +15662.50774 + 20 +8985.0 + 30 +0.0 + 11 +15656.249932 + 21 +8995.838842 + 31 +0.0 + 0 +LINE + 5 +C09 + 8 +0 + 62 + 0 + 10 +15637.499932 + 20 +9028.314795 + 30 +0.0 + 11 +15628.124932 + 21 +9044.552771 + 31 +0.0 + 0 +LINE + 5 +C0A + 8 +0 + 62 + 0 + 10 +15665.624932 + 20 +9012.076819 + 30 +0.0 + 11 +15656.249932 + 21 +9028.314795 + 31 +0.0 + 0 +LINE + 5 +C0B + 8 +0 + 62 + 0 + 10 +15637.499932 + 20 +9060.790748 + 30 +0.0 + 11 +15628.124932 + 21 +9077.028724 + 31 +0.0 + 0 +LINE + 5 +C0C + 8 +0 + 62 + 0 + 10 +15693.749932 + 20 +8995.838842 + 30 +0.0 + 11 +15684.374932 + 21 +9012.076819 + 31 +0.0 + 0 +LINE + 5 +C0D + 8 +0 + 62 + 0 + 10 +15665.624932 + 20 +9044.552771 + 30 +0.0 + 11 +15656.249932 + 21 +9060.790748 + 31 +0.0 + 0 +LINE + 5 +C0E + 8 +0 + 62 + 0 + 10 +15637.499932 + 20 +9093.2667 + 30 +0.0 + 11 +15628.124932 + 21 +9109.504677 + 31 +0.0 + 0 +LINE + 5 +C0F + 8 +0 + 62 + 0 + 10 +15718.75774 + 20 +8985.0 + 30 +0.0 + 11 +15712.499931 + 21 +8995.838842 + 31 +0.0 + 0 +LINE + 5 +C10 + 8 +0 + 62 + 0 + 10 +15693.749931 + 20 +9028.314795 + 30 +0.0 + 11 +15684.374931 + 21 +9044.552771 + 31 +0.0 + 0 +LINE + 5 +C11 + 8 +0 + 62 + 0 + 10 +15665.624931 + 20 +9077.028724 + 30 +0.0 + 11 +15656.249931 + 21 +9093.2667 + 31 +0.0 + 0 +LINE + 5 +C12 + 8 +0 + 62 + 0 + 10 +15637.499931 + 20 +9125.742653 + 30 +0.0 + 11 +15628.124931 + 21 +9141.980629 + 31 +0.0 + 0 +LINE + 5 +C13 + 8 +0 + 62 + 0 + 10 +15721.874931 + 20 +9012.076819 + 30 +0.0 + 11 +15712.499931 + 21 +9028.314795 + 31 +0.0 + 0 +LINE + 5 +C14 + 8 +0 + 62 + 0 + 10 +15693.749931 + 20 +9060.790747 + 30 +0.0 + 11 +15684.374931 + 21 +9077.028724 + 31 +0.0 + 0 +LINE + 5 +C15 + 8 +0 + 62 + 0 + 10 +15665.624931 + 20 +9109.504676 + 30 +0.0 + 11 +15656.249931 + 21 +9125.742653 + 31 +0.0 + 0 +LINE + 5 +C16 + 8 +0 + 62 + 0 + 10 +15637.499931 + 20 +9158.218605 + 30 +0.0 + 11 +15628.124931 + 21 +9174.456582 + 31 +0.0 + 0 +LINE + 5 +C17 + 8 +0 + 62 + 0 + 10 +15721.874931 + 20 +9044.552771 + 30 +0.0 + 11 +15712.499931 + 21 +9060.790747 + 31 +0.0 + 0 +LINE + 5 +C18 + 8 +0 + 62 + 0 + 10 +15693.749931 + 20 +9093.2667 + 30 +0.0 + 11 +15684.374931 + 21 +9109.504676 + 31 +0.0 + 0 +LINE + 5 +C19 + 8 +0 + 62 + 0 + 10 +15665.624931 + 20 +9141.980629 + 30 +0.0 + 11 +15656.249931 + 21 +9158.218605 + 31 +0.0 + 0 +LINE + 5 +C1A + 8 +0 + 62 + 0 + 10 +15637.499931 + 20 +9190.694558 + 30 +0.0 + 11 +15628.124931 + 21 +9206.932534 + 31 +0.0 + 0 +LINE + 5 +C1B + 8 +0 + 62 + 0 + 10 +15721.874931 + 20 +9077.028724 + 30 +0.0 + 11 +15712.499931 + 21 +9093.2667 + 31 +0.0 + 0 +LINE + 5 +C1C + 8 +0 + 62 + 0 + 10 +15693.749931 + 20 +9125.742653 + 30 +0.0 + 11 +15684.374931 + 21 +9141.980629 + 31 +0.0 + 0 +LINE + 5 +C1D + 8 +0 + 62 + 0 + 10 +15665.624931 + 20 +9174.456582 + 30 +0.0 + 11 +15656.249931 + 21 +9190.694558 + 31 +0.0 + 0 +LINE + 5 +C1E + 8 +0 + 62 + 0 + 10 +15637.499931 + 20 +9223.170511 + 30 +0.0 + 11 +15628.124931 + 21 +9239.408487 + 31 +0.0 + 0 +LINE + 5 +C1F + 8 +0 + 62 + 0 + 10 +15721.874931 + 20 +9109.504676 + 30 +0.0 + 11 +15712.499931 + 21 +9125.742653 + 31 +0.0 + 0 +LINE + 5 +C20 + 8 +0 + 62 + 0 + 10 +15693.749931 + 20 +9158.218605 + 30 +0.0 + 11 +15684.374931 + 21 +9174.456582 + 31 +0.0 + 0 +LINE + 5 +C21 + 8 +0 + 62 + 0 + 10 +15665.624931 + 20 +9206.932534 + 30 +0.0 + 11 +15656.249931 + 21 +9223.170511 + 31 +0.0 + 0 +LINE + 5 +C22 + 8 +0 + 62 + 0 + 10 +15637.499931 + 20 +9255.646463 + 30 +0.0 + 11 +15628.124931 + 21 +9271.88444 + 31 +0.0 + 0 +LINE + 5 +C23 + 8 +0 + 62 + 0 + 10 +15721.874931 + 20 +9141.980629 + 30 +0.0 + 11 +15712.499931 + 21 +9158.218605 + 31 +0.0 + 0 +LINE + 5 +C24 + 8 +0 + 62 + 0 + 10 +15693.749931 + 20 +9190.694558 + 30 +0.0 + 11 +15684.374931 + 21 +9206.932534 + 31 +0.0 + 0 +LINE + 5 +C25 + 8 +0 + 62 + 0 + 10 +15665.624931 + 20 +9239.408487 + 30 +0.0 + 11 +15656.249931 + 21 +9255.646463 + 31 +0.0 + 0 +LINE + 5 +C26 + 8 +0 + 62 + 0 + 10 +15637.499931 + 20 +9288.122416 + 30 +0.0 + 11 +15628.124931 + 21 +9304.360392 + 31 +0.0 + 0 +LINE + 5 +C27 + 8 +0 + 62 + 0 + 10 +15721.874931 + 20 +9174.456582 + 30 +0.0 + 11 +15712.499931 + 21 +9190.694558 + 31 +0.0 + 0 +LINE + 5 +C28 + 8 +0 + 62 + 0 + 10 +15693.749931 + 20 +9223.170511 + 30 +0.0 + 11 +15684.374931 + 21 +9239.408487 + 31 +0.0 + 0 +LINE + 5 +C29 + 8 +0 + 62 + 0 + 10 +15665.624931 + 20 +9271.884439 + 30 +0.0 + 11 +15656.249931 + 21 +9288.122416 + 31 +0.0 + 0 +LINE + 5 +C2A + 8 +0 + 62 + 0 + 10 +15637.499931 + 20 +9320.598368 + 30 +0.0 + 11 +15628.124931 + 21 +9336.836345 + 31 +0.0 + 0 +LINE + 5 +C2B + 8 +0 + 62 + 0 + 10 +15721.874931 + 20 +9206.932534 + 30 +0.0 + 11 +15712.499931 + 21 +9223.17051 + 31 +0.0 + 0 +LINE + 5 +C2C + 8 +0 + 62 + 0 + 10 +15693.749931 + 20 +9255.646463 + 30 +0.0 + 11 +15684.374931 + 21 +9271.884439 + 31 +0.0 + 0 +LINE + 5 +C2D + 8 +0 + 62 + 0 + 10 +15665.624931 + 20 +9304.360392 + 30 +0.0 + 11 +15656.249931 + 21 +9320.598368 + 31 +0.0 + 0 +LINE + 5 +C2E + 8 +0 + 62 + 0 + 10 +15637.499931 + 20 +9353.074321 + 30 +0.0 + 11 +15628.124931 + 21 +9369.312297 + 31 +0.0 + 0 +LINE + 5 +C2F + 8 +0 + 62 + 0 + 10 +15721.874931 + 20 +9239.408487 + 30 +0.0 + 11 +15712.499931 + 21 +9255.646463 + 31 +0.0 + 0 +LINE + 5 +C30 + 8 +0 + 62 + 0 + 10 +15693.749931 + 20 +9288.122416 + 30 +0.0 + 11 +15684.374931 + 21 +9304.360392 + 31 +0.0 + 0 +LINE + 5 +C31 + 8 +0 + 62 + 0 + 10 +15665.624931 + 20 +9336.836345 + 30 +0.0 + 11 +15656.249931 + 21 +9353.074321 + 31 +0.0 + 0 +LINE + 5 +C32 + 8 +0 + 62 + 0 + 10 +15637.499931 + 20 +9385.550274 + 30 +0.0 + 11 +15628.124931 + 21 +9401.78825 + 31 +0.0 + 0 +LINE + 5 +C33 + 8 +0 + 62 + 0 + 10 +15721.874931 + 20 +9271.884439 + 30 +0.0 + 11 +15712.499931 + 21 +9288.122416 + 31 +0.0 + 0 +LINE + 5 +C34 + 8 +0 + 62 + 0 + 10 +15693.749931 + 20 +9320.598368 + 30 +0.0 + 11 +15684.374931 + 21 +9336.836345 + 31 +0.0 + 0 +LINE + 5 +C35 + 8 +0 + 62 + 0 + 10 +15665.624931 + 20 +9369.312297 + 30 +0.0 + 11 +15656.249931 + 21 +9385.550274 + 31 +0.0 + 0 +LINE + 5 +C36 + 8 +0 + 62 + 0 + 10 +15637.499931 + 20 +9418.026226 + 30 +0.0 + 11 +15628.124931 + 21 +9434.264203 + 31 +0.0 + 0 +LINE + 5 +C37 + 8 +0 + 62 + 0 + 10 +15721.874931 + 20 +9304.360392 + 30 +0.0 + 11 +15712.499931 + 21 +9320.598368 + 31 +0.0 + 0 +LINE + 5 +C38 + 8 +0 + 62 + 0 + 10 +15693.749931 + 20 +9353.074321 + 30 +0.0 + 11 +15684.374931 + 21 +9369.312297 + 31 +0.0 + 0 +LINE + 5 +C39 + 8 +0 + 62 + 0 + 10 +15665.624931 + 20 +9401.78825 + 30 +0.0 + 11 +15656.249931 + 21 +9418.026226 + 31 +0.0 + 0 +LINE + 5 +C3A + 8 +0 + 62 + 0 + 10 +15721.874931 + 20 +9336.836345 + 30 +0.0 + 11 +15712.499931 + 21 +9353.074321 + 31 +0.0 + 0 +LINE + 5 +C3B + 8 +0 + 62 + 0 + 10 +15693.749931 + 20 +9385.550274 + 30 +0.0 + 11 +15684.374931 + 21 +9401.78825 + 31 +0.0 + 0 +LINE + 5 +C3C + 8 +0 + 62 + 0 + 10 +15665.624931 + 20 +9434.264203 + 30 +0.0 + 11 +15665.200118 + 21 +9435.0 + 31 +0.0 + 0 +LINE + 5 +C3D + 8 +0 + 62 + 0 + 10 +15721.874931 + 20 +9369.312297 + 30 +0.0 + 11 +15712.499931 + 21 +9385.550274 + 31 +0.0 + 0 +LINE + 5 +C3E + 8 +0 + 62 + 0 + 10 +15693.749931 + 20 +9418.026226 + 30 +0.0 + 11 +15684.374931 + 21 +9434.264202 + 31 +0.0 + 0 +LINE + 5 +C3F + 8 +0 + 62 + 0 + 10 +15721.874931 + 20 +9401.78825 + 30 +0.0 + 11 +15712.499931 + 21 +9418.026226 + 31 +0.0 + 0 +LINE + 5 +C40 + 8 +0 + 62 + 0 + 10 +15721.874931 + 20 +9434.264202 + 30 +0.0 + 11 +15721.450118 + 21 +9435.0 + 31 +0.0 + 0 +LINE + 5 +C41 + 8 +0 + 62 + 0 + 10 +14981.249968 + 20 +8995.8389 + 30 +0.0 + 11 +14990.624968 + 21 +9012.076877 + 31 +0.0 + 0 +LINE + 5 +C42 + 8 +0 + 62 + 0 + 10 +14956.242126 + 20 +8985.0 + 30 +0.0 + 11 +14962.499968 + 21 +8995.8389 + 31 +0.0 + 0 +LINE + 5 +C43 + 8 +0 + 62 + 0 + 10 +14981.249968 + 20 +9028.314853 + 30 +0.0 + 11 +14990.624968 + 21 +9044.552829 + 31 +0.0 + 0 +LINE + 5 +C44 + 8 +0 + 62 + 0 + 10 +14953.124968 + 20 +9012.076877 + 30 +0.0 + 11 +14962.499968 + 21 +9028.314853 + 31 +0.0 + 0 +LINE + 5 +C45 + 8 +0 + 62 + 0 + 10 +14981.249968 + 20 +9060.790806 + 30 +0.0 + 11 +14990.624968 + 21 +9077.028782 + 31 +0.0 + 0 +LINE + 5 +C46 + 8 +0 + 62 + 0 + 10 +14924.999968 + 20 +8995.8389 + 30 +0.0 + 11 +14934.374968 + 21 +9012.076877 + 31 +0.0 + 0 +LINE + 5 +C47 + 8 +0 + 62 + 0 + 10 +14953.124968 + 20 +9044.552829 + 30 +0.0 + 11 +14962.499968 + 21 +9060.790806 + 31 +0.0 + 0 +LINE + 5 +C48 + 8 +0 + 62 + 0 + 10 +14981.249968 + 20 +9093.266758 + 30 +0.0 + 11 +14990.624968 + 21 +9109.504734 + 31 +0.0 + 0 +LINE + 5 +C49 + 8 +0 + 62 + 0 + 10 +14900.0 + 20 +8985.013638 + 30 +0.0 + 11 +14906.249968 + 21 +8995.8389 + 31 +0.0 + 0 +LINE + 5 +C4A + 8 +0 + 62 + 0 + 10 +14924.999968 + 20 +9028.314853 + 30 +0.0 + 11 +14934.374968 + 21 +9044.552829 + 31 +0.0 + 0 +LINE + 5 +C4B + 8 +0 + 62 + 0 + 10 +14953.124968 + 20 +9077.028782 + 30 +0.0 + 11 +14962.499968 + 21 +9093.266758 + 31 +0.0 + 0 +LINE + 5 +C4C + 8 +0 + 62 + 0 + 10 +14981.249968 + 20 +9125.742711 + 30 +0.0 + 11 +14990.624968 + 21 +9141.980687 + 31 +0.0 + 0 +LINE + 5 +C4D + 8 +0 + 62 + 0 + 10 +14900.0 + 20 +9017.48959 + 30 +0.0 + 11 +14906.249968 + 21 +9028.314853 + 31 +0.0 + 0 +LINE + 5 +C4E + 8 +0 + 62 + 0 + 10 +14924.999968 + 20 +9060.790805 + 30 +0.0 + 11 +14934.374968 + 21 +9077.028782 + 31 +0.0 + 0 +LINE + 5 +C4F + 8 +0 + 62 + 0 + 10 +14953.124968 + 20 +9109.504734 + 30 +0.0 + 11 +14962.499968 + 21 +9125.742711 + 31 +0.0 + 0 +LINE + 5 +C50 + 8 +0 + 62 + 0 + 10 +14981.249968 + 20 +9158.218663 + 30 +0.0 + 11 +14990.624968 + 21 +9174.45664 + 31 +0.0 + 0 +LINE + 5 +C51 + 8 +0 + 62 + 0 + 10 +14900.0 + 20 +9049.965543 + 30 +0.0 + 11 +14906.249968 + 21 +9060.790805 + 31 +0.0 + 0 +LINE + 5 +C52 + 8 +0 + 62 + 0 + 10 +14924.999968 + 20 +9093.266758 + 30 +0.0 + 11 +14934.374968 + 21 +9109.504734 + 31 +0.0 + 0 +LINE + 5 +C53 + 8 +0 + 62 + 0 + 10 +14953.124968 + 20 +9141.980687 + 30 +0.0 + 11 +14962.499968 + 21 +9158.218663 + 31 +0.0 + 0 +LINE + 5 +C54 + 8 +0 + 62 + 0 + 10 +14981.249968 + 20 +9190.694616 + 30 +0.0 + 11 +14990.624968 + 21 +9206.932592 + 31 +0.0 + 0 +LINE + 5 +C55 + 8 +0 + 62 + 0 + 10 +14900.0 + 20 +9082.441495 + 30 +0.0 + 11 +14906.249968 + 21 +9093.266758 + 31 +0.0 + 0 +LINE + 5 +C56 + 8 +0 + 62 + 0 + 10 +14924.999968 + 20 +9125.742711 + 30 +0.0 + 11 +14934.374968 + 21 +9141.980687 + 31 +0.0 + 0 +LINE + 5 +C57 + 8 +0 + 62 + 0 + 10 +14953.124968 + 20 +9174.45664 + 30 +0.0 + 11 +14962.499968 + 21 +9190.694616 + 31 +0.0 + 0 +LINE + 5 +C58 + 8 +0 + 62 + 0 + 10 +14981.249968 + 20 +9223.170569 + 30 +0.0 + 11 +14990.624968 + 21 +9239.408545 + 31 +0.0 + 0 +LINE + 5 +C59 + 8 +0 + 62 + 0 + 10 +14900.0 + 20 +9114.917448 + 30 +0.0 + 11 +14906.249968 + 21 +9125.742711 + 31 +0.0 + 0 +LINE + 5 +C5A + 8 +0 + 62 + 0 + 10 +14924.999968 + 20 +9158.218663 + 30 +0.0 + 11 +14934.374968 + 21 +9174.45664 + 31 +0.0 + 0 +LINE + 5 +C5B + 8 +0 + 62 + 0 + 10 +14953.124968 + 20 +9206.932592 + 30 +0.0 + 11 +14962.499968 + 21 +9223.170569 + 31 +0.0 + 0 +LINE + 5 +C5C + 8 +0 + 62 + 0 + 10 +14981.249968 + 20 +9255.646521 + 30 +0.0 + 11 +14990.624968 + 21 +9271.884498 + 31 +0.0 + 0 +LINE + 5 +C5D + 8 +0 + 62 + 0 + 10 +14900.0 + 20 +9147.3934 + 30 +0.0 + 11 +14906.249968 + 21 +9158.218663 + 31 +0.0 + 0 +LINE + 5 +C5E + 8 +0 + 62 + 0 + 10 +14924.999968 + 20 +9190.694616 + 30 +0.0 + 11 +14934.374968 + 21 +9206.932592 + 31 +0.0 + 0 +LINE + 5 +C5F + 8 +0 + 62 + 0 + 10 +14953.124968 + 20 +9239.408545 + 30 +0.0 + 11 +14962.499968 + 21 +9255.646521 + 31 +0.0 + 0 +LINE + 5 +C60 + 8 +0 + 62 + 0 + 10 +14981.249968 + 20 +9288.122474 + 30 +0.0 + 11 +14990.624968 + 21 +9304.36045 + 31 +0.0 + 0 +LINE + 5 +C61 + 8 +0 + 62 + 0 + 10 +14900.0 + 20 +9179.869353 + 30 +0.0 + 11 +14906.249969 + 21 +9190.694616 + 31 +0.0 + 0 +LINE + 5 +C62 + 8 +0 + 62 + 0 + 10 +14924.999969 + 20 +9223.170568 + 30 +0.0 + 11 +14934.374969 + 21 +9239.408545 + 31 +0.0 + 0 +LINE + 5 +C63 + 8 +0 + 62 + 0 + 10 +14953.124969 + 20 +9271.884497 + 30 +0.0 + 11 +14962.499969 + 21 +9288.122474 + 31 +0.0 + 0 +LINE + 5 +C64 + 8 +0 + 62 + 0 + 10 +14981.249969 + 20 +9320.598426 + 30 +0.0 + 11 +14990.624969 + 21 +9336.836403 + 31 +0.0 + 0 +LINE + 5 +C65 + 8 +0 + 62 + 0 + 10 +14900.0 + 20 +9212.345305 + 30 +0.0 + 11 +14906.249969 + 21 +9223.170568 + 31 +0.0 + 0 +LINE + 5 +C66 + 8 +0 + 62 + 0 + 10 +14924.999969 + 20 +9255.646521 + 30 +0.0 + 11 +14934.374969 + 21 +9271.884497 + 31 +0.0 + 0 +LINE + 5 +C67 + 8 +0 + 62 + 0 + 10 +14953.124969 + 20 +9304.36045 + 30 +0.0 + 11 +14962.499969 + 21 +9320.598426 + 31 +0.0 + 0 +LINE + 5 +C68 + 8 +0 + 62 + 0 + 10 +14981.249969 + 20 +9353.074379 + 30 +0.0 + 11 +14990.624969 + 21 +9369.312355 + 31 +0.0 + 0 +LINE + 5 +C69 + 8 +0 + 62 + 0 + 10 +14900.0 + 20 +9244.821258 + 30 +0.0 + 11 +14906.249969 + 21 +9255.646521 + 31 +0.0 + 0 +LINE + 5 +C6A + 8 +0 + 62 + 0 + 10 +14924.999969 + 20 +9288.122474 + 30 +0.0 + 11 +14934.374969 + 21 +9304.36045 + 31 +0.0 + 0 +LINE + 5 +C6B + 8 +0 + 62 + 0 + 10 +14953.124969 + 20 +9336.836403 + 30 +0.0 + 11 +14962.499969 + 21 +9353.074379 + 31 +0.0 + 0 +LINE + 5 +C6C + 8 +0 + 62 + 0 + 10 +14981.249969 + 20 +9385.550332 + 30 +0.0 + 11 +14990.624969 + 21 +9401.788308 + 31 +0.0 + 0 +LINE + 5 +C6D + 8 +0 + 62 + 0 + 10 +14900.0 + 20 +9277.29721 + 30 +0.0 + 11 +14906.249969 + 21 +9288.122474 + 31 +0.0 + 0 +LINE + 5 +C6E + 8 +0 + 62 + 0 + 10 +14924.999969 + 20 +9320.598426 + 30 +0.0 + 11 +14934.374969 + 21 +9336.836403 + 31 +0.0 + 0 +LINE + 5 +C6F + 8 +0 + 62 + 0 + 10 +14953.124969 + 20 +9369.312355 + 30 +0.0 + 11 +14962.499969 + 21 +9385.550332 + 31 +0.0 + 0 +LINE + 5 +C70 + 8 +0 + 62 + 0 + 10 +14981.249969 + 20 +9418.026284 + 30 +0.0 + 11 +14990.624969 + 21 +9434.264261 + 31 +0.0 + 0 +LINE + 5 +C71 + 8 +0 + 62 + 0 + 10 +14900.0 + 20 +9309.773163 + 30 +0.0 + 11 +14906.249969 + 21 +9320.598426 + 31 +0.0 + 0 +LINE + 5 +C72 + 8 +0 + 62 + 0 + 10 +14924.999969 + 20 +9353.074379 + 30 +0.0 + 11 +14934.374969 + 21 +9369.312355 + 31 +0.0 + 0 +LINE + 5 +C73 + 8 +0 + 62 + 0 + 10 +14953.124969 + 20 +9401.788308 + 30 +0.0 + 11 +14962.499969 + 21 +9418.026284 + 31 +0.0 + 0 +LINE + 5 +C74 + 8 +0 + 62 + 0 + 10 +14900.0 + 20 +9342.249115 + 30 +0.0 + 11 +14906.249969 + 21 +9353.074379 + 31 +0.0 + 0 +LINE + 5 +C75 + 8 +0 + 62 + 0 + 10 +14924.999969 + 20 +9385.550332 + 30 +0.0 + 11 +14934.374969 + 21 +9401.788308 + 31 +0.0 + 0 +LINE + 5 +C76 + 8 +0 + 62 + 0 + 10 +14953.124969 + 20 +9434.26426 + 30 +0.0 + 11 +14953.549748 + 21 +9435.0 + 31 +0.0 + 0 +LINE + 5 +C77 + 8 +0 + 62 + 0 + 10 +14900.0 + 20 +9374.725068 + 30 +0.0 + 11 +14906.249969 + 21 +9385.550331 + 31 +0.0 + 0 +LINE + 5 +C78 + 8 +0 + 62 + 0 + 10 +14924.999969 + 20 +9418.026284 + 30 +0.0 + 11 +14934.374969 + 21 +9434.26426 + 31 +0.0 + 0 +LINE + 5 +C79 + 8 +0 + 62 + 0 + 10 +14900.0 + 20 +9407.20102 + 30 +0.0 + 11 +14906.249969 + 21 +9418.026284 + 31 +0.0 + 0 +LINE + 5 +C7A + 8 +0 + 62 + 0 + 10 +15628.124967 + 20 +9434.264262 + 30 +0.0 + 11 +15628.549745 + 21 +9435.0 + 31 +0.0 + 0 +LINE + 5 +C7B + 8 +0 + 62 + 0 + 10 +15628.124967 + 20 +9401.788309 + 30 +0.0 + 11 +15637.499967 + 21 +9418.026285 + 31 +0.0 + 0 +LINE + 5 +C7C + 8 +0 + 62 + 0 + 10 +15628.124967 + 20 +9369.312357 + 30 +0.0 + 11 +15637.499967 + 21 +9385.550333 + 31 +0.0 + 0 +LINE + 5 +C7D + 8 +0 + 62 + 0 + 10 +15656.249967 + 20 +9418.026285 + 30 +0.0 + 11 +15665.624967 + 21 +9434.264262 + 31 +0.0 + 0 +LINE + 5 +C7E + 8 +0 + 62 + 0 + 10 +15628.124966 + 20 +9336.836404 + 30 +0.0 + 11 +15637.499966 + 21 +9353.07438 + 31 +0.0 + 0 +LINE + 5 +C7F + 8 +0 + 62 + 0 + 10 +15656.249966 + 20 +9385.550333 + 30 +0.0 + 11 +15665.624966 + 21 +9401.788309 + 31 +0.0 + 0 +LINE + 5 +C80 + 8 +0 + 62 + 0 + 10 +15684.374966 + 20 +9434.264262 + 30 +0.0 + 11 +15684.799745 + 21 +9435.0 + 31 +0.0 + 0 +LINE + 5 +C81 + 8 +0 + 62 + 0 + 10 +15628.124966 + 20 +9304.360451 + 30 +0.0 + 11 +15637.499966 + 21 +9320.598428 + 31 +0.0 + 0 +LINE + 5 +C82 + 8 +0 + 62 + 0 + 10 +15656.249966 + 20 +9353.07438 + 30 +0.0 + 11 +15665.624966 + 21 +9369.312357 + 31 +0.0 + 0 +LINE + 5 +C83 + 8 +0 + 62 + 0 + 10 +15684.374966 + 20 +9401.788309 + 30 +0.0 + 11 +15693.749966 + 21 +9418.026286 + 31 +0.0 + 0 +LINE + 5 +C84 + 8 +0 + 62 + 0 + 10 +15628.124966 + 20 +9271.884499 + 30 +0.0 + 11 +15637.499966 + 21 +9288.122475 + 31 +0.0 + 0 +LINE + 5 +C85 + 8 +0 + 62 + 0 + 10 +15656.249966 + 20 +9320.598428 + 30 +0.0 + 11 +15665.624966 + 21 +9336.836404 + 31 +0.0 + 0 +LINE + 5 +C86 + 8 +0 + 62 + 0 + 10 +15684.374966 + 20 +9369.312357 + 30 +0.0 + 11 +15693.749966 + 21 +9385.550333 + 31 +0.0 + 0 +LINE + 5 +C87 + 8 +0 + 62 + 0 + 10 +15712.499966 + 20 +9418.026286 + 30 +0.0 + 11 +15721.874966 + 21 +9434.264262 + 31 +0.0 + 0 +LINE + 5 +C88 + 8 +0 + 62 + 0 + 10 +15628.124966 + 20 +9239.408546 + 30 +0.0 + 11 +15637.499966 + 21 +9255.646522 + 31 +0.0 + 0 +LINE + 5 +C89 + 8 +0 + 62 + 0 + 10 +15656.249966 + 20 +9288.122475 + 30 +0.0 + 11 +15665.624966 + 21 +9304.360451 + 31 +0.0 + 0 +LINE + 5 +C8A + 8 +0 + 62 + 0 + 10 +15684.374966 + 20 +9336.836404 + 30 +0.0 + 11 +15693.749966 + 21 +9353.07438 + 31 +0.0 + 0 +LINE + 5 +C8B + 8 +0 + 62 + 0 + 10 +15712.499966 + 20 +9385.550333 + 30 +0.0 + 11 +15721.874966 + 21 +9401.788309 + 31 +0.0 + 0 +LINE + 5 +C8C + 8 +0 + 62 + 0 + 10 +15628.124966 + 20 +9206.932593 + 30 +0.0 + 11 +15637.499966 + 21 +9223.17057 + 31 +0.0 + 0 +LINE + 5 +C8D + 8 +0 + 62 + 0 + 10 +15656.249966 + 20 +9255.646522 + 30 +0.0 + 11 +15665.624966 + 21 +9271.884499 + 31 +0.0 + 0 +LINE + 5 +C8E + 8 +0 + 62 + 0 + 10 +15684.374966 + 20 +9304.360451 + 30 +0.0 + 11 +15693.749966 + 21 +9320.598428 + 31 +0.0 + 0 +LINE + 5 +C8F + 8 +0 + 62 + 0 + 10 +15712.499966 + 20 +9353.07438 + 30 +0.0 + 11 +15721.874966 + 21 +9369.312357 + 31 +0.0 + 0 +LINE + 5 +C90 + 8 +0 + 62 + 0 + 10 +15628.124966 + 20 +9174.456641 + 30 +0.0 + 11 +15637.499966 + 21 +9190.694617 + 31 +0.0 + 0 +LINE + 5 +C91 + 8 +0 + 62 + 0 + 10 +15656.249966 + 20 +9223.17057 + 30 +0.0 + 11 +15665.624966 + 21 +9239.408546 + 31 +0.0 + 0 +LINE + 5 +C92 + 8 +0 + 62 + 0 + 10 +15684.374966 + 20 +9271.884499 + 30 +0.0 + 11 +15693.749966 + 21 +9288.122475 + 31 +0.0 + 0 +LINE + 5 +C93 + 8 +0 + 62 + 0 + 10 +15712.499966 + 20 +9320.598428 + 30 +0.0 + 11 +15721.874966 + 21 +9336.836404 + 31 +0.0 + 0 +LINE + 5 +C94 + 8 +0 + 62 + 0 + 10 +15628.124966 + 20 +9141.980688 + 30 +0.0 + 11 +15637.499966 + 21 +9158.218665 + 31 +0.0 + 0 +LINE + 5 +C95 + 8 +0 + 62 + 0 + 10 +15656.249966 + 20 +9190.694617 + 30 +0.0 + 11 +15665.624966 + 21 +9206.932594 + 31 +0.0 + 0 +LINE + 5 +C96 + 8 +0 + 62 + 0 + 10 +15684.374966 + 20 +9239.408546 + 30 +0.0 + 11 +15693.749966 + 21 +9255.646523 + 31 +0.0 + 0 +LINE + 5 +C97 + 8 +0 + 62 + 0 + 10 +15712.499966 + 20 +9288.122475 + 30 +0.0 + 11 +15721.874966 + 21 +9304.360451 + 31 +0.0 + 0 +LINE + 5 +C98 + 8 +0 + 62 + 0 + 10 +15628.124966 + 20 +9109.504736 + 30 +0.0 + 11 +15637.499966 + 21 +9125.742712 + 31 +0.0 + 0 +LINE + 5 +C99 + 8 +0 + 62 + 0 + 10 +15656.249966 + 20 +9158.218665 + 30 +0.0 + 11 +15665.624966 + 21 +9174.456641 + 31 +0.0 + 0 +LINE + 5 +C9A + 8 +0 + 62 + 0 + 10 +15684.374966 + 20 +9206.932594 + 30 +0.0 + 11 +15693.749966 + 21 +9223.17057 + 31 +0.0 + 0 +LINE + 5 +C9B + 8 +0 + 62 + 0 + 10 +15712.499966 + 20 +9255.646523 + 30 +0.0 + 11 +15721.874966 + 21 +9271.884499 + 31 +0.0 + 0 +LINE + 5 +C9C + 8 +0 + 62 + 0 + 10 +15628.124966 + 20 +9077.028783 + 30 +0.0 + 11 +15637.499966 + 21 +9093.266759 + 31 +0.0 + 0 +LINE + 5 +C9D + 8 +0 + 62 + 0 + 10 +15656.249966 + 20 +9125.742712 + 30 +0.0 + 11 +15665.624966 + 21 +9141.980688 + 31 +0.0 + 0 +LINE + 5 +C9E + 8 +0 + 62 + 0 + 10 +15684.374966 + 20 +9174.456641 + 30 +0.0 + 11 +15693.749966 + 21 +9190.694617 + 31 +0.0 + 0 +LINE + 5 +C9F + 8 +0 + 62 + 0 + 10 +15712.499966 + 20 +9223.17057 + 30 +0.0 + 11 +15721.874966 + 21 +9239.408546 + 31 +0.0 + 0 +LINE + 5 +CA0 + 8 +0 + 62 + 0 + 10 +15628.124966 + 20 +9044.55283 + 30 +0.0 + 11 +15637.499966 + 21 +9060.790807 + 31 +0.0 + 0 +LINE + 5 +CA1 + 8 +0 + 62 + 0 + 10 +15656.249966 + 20 +9093.266759 + 30 +0.0 + 11 +15665.624966 + 21 +9109.504736 + 31 +0.0 + 0 +LINE + 5 +CA2 + 8 +0 + 62 + 0 + 10 +15684.374966 + 20 +9141.980688 + 30 +0.0 + 11 +15693.749966 + 21 +9158.218665 + 31 +0.0 + 0 +LINE + 5 +CA3 + 8 +0 + 62 + 0 + 10 +15712.499966 + 20 +9190.694617 + 30 +0.0 + 11 +15721.874966 + 21 +9206.932594 + 31 +0.0 + 0 +LINE + 5 +CA4 + 8 +0 + 62 + 0 + 10 +15628.124966 + 20 +9012.076878 + 30 +0.0 + 11 +15637.499966 + 21 +9028.314854 + 31 +0.0 + 0 +LINE + 5 +CA5 + 8 +0 + 62 + 0 + 10 +15656.249966 + 20 +9060.790807 + 30 +0.0 + 11 +15665.624966 + 21 +9077.028783 + 31 +0.0 + 0 +LINE + 5 +CA6 + 8 +0 + 62 + 0 + 10 +15684.374966 + 20 +9109.504736 + 30 +0.0 + 11 +15693.749966 + 21 +9125.742712 + 31 +0.0 + 0 +LINE + 5 +CA7 + 8 +0 + 62 + 0 + 10 +15712.499966 + 20 +9158.218665 + 30 +0.0 + 11 +15721.874966 + 21 +9174.456641 + 31 +0.0 + 0 +LINE + 5 +CA8 + 8 +0 + 62 + 0 + 10 +15631.242123 + 20 +8985.0 + 30 +0.0 + 11 +15637.499966 + 21 +8995.838902 + 31 +0.0 + 0 +LINE + 5 +CA9 + 8 +0 + 62 + 0 + 10 +15656.249966 + 20 +9028.314854 + 30 +0.0 + 11 +15665.624966 + 21 +9044.552831 + 31 +0.0 + 0 +LINE + 5 +CAA + 8 +0 + 62 + 0 + 10 +15684.374966 + 20 +9077.028783 + 30 +0.0 + 11 +15693.749966 + 21 +9093.266759 + 31 +0.0 + 0 +LINE + 5 +CAB + 8 +0 + 62 + 0 + 10 +15712.499966 + 20 +9125.742712 + 30 +0.0 + 11 +15721.874966 + 21 +9141.980688 + 31 +0.0 + 0 +LINE + 5 +CAC + 8 +0 + 62 + 0 + 10 +15656.249966 + 20 +8995.838902 + 30 +0.0 + 11 +15665.624966 + 21 +9012.076878 + 31 +0.0 + 0 +LINE + 5 +CAD + 8 +0 + 62 + 0 + 10 +15684.374966 + 20 +9044.552831 + 30 +0.0 + 11 +15693.749966 + 21 +9060.790807 + 31 +0.0 + 0 +LINE + 5 +CAE + 8 +0 + 62 + 0 + 10 +15712.499966 + 20 +9093.26676 + 30 +0.0 + 11 +15721.874966 + 21 +9109.504736 + 31 +0.0 + 0 +LINE + 5 +CAF + 8 +0 + 62 + 0 + 10 +15684.374966 + 20 +9012.076878 + 30 +0.0 + 11 +15693.749966 + 21 +9028.314854 + 31 +0.0 + 0 +LINE + 5 +CB0 + 8 +0 + 62 + 0 + 10 +15712.499966 + 20 +9060.790807 + 30 +0.0 + 11 +15721.874966 + 21 +9077.028783 + 31 +0.0 + 0 +LINE + 5 +CB1 + 8 +0 + 62 + 0 + 10 +15687.492123 + 20 +8985.0 + 30 +0.0 + 11 +15693.749966 + 21 +8995.838902 + 31 +0.0 + 0 +LINE + 5 +CB2 + 8 +0 + 62 + 0 + 10 +15712.499966 + 20 +9028.314854 + 30 +0.0 + 11 +15721.874966 + 21 +9044.552831 + 31 +0.0 + 0 +LINE + 5 +CB3 + 8 +0 + 62 + 0 + 10 +15712.499966 + 20 +8995.838902 + 30 +0.0 + 11 +15721.874966 + 21 +9012.076878 + 31 +0.0 + 0 +ENDBLK + 5 +CB4 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X57 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X57 + 1 + + 0 +LINE + 5 +CB6 + 8 +0 + 62 + 0 + 10 +15000.0 + 20 +9006.66416 + 30 +0.0 + 11 +15025.0 + 21 +9006.66416 + 31 +0.0 + 0 +LINE + 5 +CB7 + 8 +0 + 62 + 0 + 10 +15075.0 + 20 +9006.66416 + 30 +0.0 + 11 +15100.0 + 21 +9006.66416 + 31 +0.0 + 0 +LINE + 5 +CB8 + 8 +0 + 62 + 0 + 10 +15150.0 + 20 +9006.66416 + 30 +0.0 + 11 +15175.0 + 21 +9006.66416 + 31 +0.0 + 0 +LINE + 5 +CB9 + 8 +0 + 62 + 0 + 10 +15225.0 + 20 +9006.66416 + 30 +0.0 + 11 +15250.0 + 21 +9006.66416 + 31 +0.0 + 0 +LINE + 5 +CBA + 8 +0 + 62 + 0 + 10 +15300.0 + 20 +9006.66416 + 30 +0.0 + 11 +15325.0 + 21 +9006.66416 + 31 +0.0 + 0 +LINE + 5 +CBB + 8 +0 + 62 + 0 + 10 +15375.0 + 20 +9006.66416 + 30 +0.0 + 11 +15400.0 + 21 +9006.66416 + 31 +0.0 + 0 +LINE + 5 +CBC + 8 +0 + 62 + 0 + 10 +15450.0 + 20 +9006.66416 + 30 +0.0 + 11 +15475.0 + 21 +9006.66416 + 31 +0.0 + 0 +LINE + 5 +CBD + 8 +0 + 62 + 0 + 10 +15525.0 + 20 +9006.66416 + 30 +0.0 + 11 +15550.0 + 21 +9006.66416 + 31 +0.0 + 0 +LINE + 5 +CBE + 8 +0 + 62 + 0 + 10 +15600.0 + 20 +9006.66416 + 30 +0.0 + 11 +15625.0 + 21 +9006.66416 + 31 +0.0 + 0 +LINE + 5 +CBF + 8 +0 + 62 + 0 + 10 +15037.5 + 20 +9028.314795 + 30 +0.0 + 11 +15062.5 + 21 +9028.314795 + 31 +0.0 + 0 +LINE + 5 +CC0 + 8 +0 + 62 + 0 + 10 +15112.5 + 20 +9028.314795 + 30 +0.0 + 11 +15137.5 + 21 +9028.314795 + 31 +0.0 + 0 +LINE + 5 +CC1 + 8 +0 + 62 + 0 + 10 +15187.5 + 20 +9028.314795 + 30 +0.0 + 11 +15212.5 + 21 +9028.314795 + 31 +0.0 + 0 +LINE + 5 +CC2 + 8 +0 + 62 + 0 + 10 +15262.5 + 20 +9028.314795 + 30 +0.0 + 11 +15287.5 + 21 +9028.314795 + 31 +0.0 + 0 +LINE + 5 +CC3 + 8 +0 + 62 + 0 + 10 +15337.5 + 20 +9028.314795 + 30 +0.0 + 11 +15362.5 + 21 +9028.314795 + 31 +0.0 + 0 +LINE + 5 +CC4 + 8 +0 + 62 + 0 + 10 +15412.5 + 20 +9028.314795 + 30 +0.0 + 11 +15437.5 + 21 +9028.314795 + 31 +0.0 + 0 +LINE + 5 +CC5 + 8 +0 + 62 + 0 + 10 +15487.5 + 20 +9028.314795 + 30 +0.0 + 11 +15512.5 + 21 +9028.314795 + 31 +0.0 + 0 +LINE + 5 +CC6 + 8 +0 + 62 + 0 + 10 +15562.5 + 20 +9028.314795 + 30 +0.0 + 11 +15587.5 + 21 +9028.314795 + 31 +0.0 + 0 +LINE + 5 +CC7 + 8 +0 + 62 + 0 + 10 +15037.5 + 20 +8985.013525 + 30 +0.0 + 11 +15062.5 + 21 +8985.013525 + 31 +0.0 + 0 +LINE + 5 +CC8 + 8 +0 + 62 + 0 + 10 +15112.5 + 20 +8985.013525 + 30 +0.0 + 11 +15137.5 + 21 +8985.013525 + 31 +0.0 + 0 +LINE + 5 +CC9 + 8 +0 + 62 + 0 + 10 +15187.5 + 20 +8985.013525 + 30 +0.0 + 11 +15212.5 + 21 +8985.013525 + 31 +0.0 + 0 +LINE + 5 +CCA + 8 +0 + 62 + 0 + 10 +15262.5 + 20 +8985.013525 + 30 +0.0 + 11 +15287.5 + 21 +8985.013525 + 31 +0.0 + 0 +LINE + 5 +CCB + 8 +0 + 62 + 0 + 10 +15337.5 + 20 +8985.013525 + 30 +0.0 + 11 +15362.5 + 21 +8985.013525 + 31 +0.0 + 0 +LINE + 5 +CCC + 8 +0 + 62 + 0 + 10 +15412.5 + 20 +8985.013525 + 30 +0.0 + 11 +15437.5 + 21 +8985.013525 + 31 +0.0 + 0 +LINE + 5 +CCD + 8 +0 + 62 + 0 + 10 +15487.5 + 20 +8985.013525 + 30 +0.0 + 11 +15512.5 + 21 +8985.013525 + 31 +0.0 + 0 +LINE + 5 +CCE + 8 +0 + 62 + 0 + 10 +15562.5 + 20 +8985.013525 + 30 +0.0 + 11 +15587.5 + 21 +8985.013525 + 31 +0.0 + 0 +LINE + 5 +CCF + 8 +0 + 62 + 0 + 10 +15299.999933 + 20 +9006.664161 + 30 +0.0 + 11 +15287.499933 + 21 +9028.314796 + 31 +0.0 + 0 +LINE + 5 +CD0 + 8 +0 + 62 + 0 + 10 +15287.507742 + 20 +8985.0 + 30 +0.0 + 11 +15287.499933 + 21 +8985.013526 + 31 +0.0 + 0 +LINE + 5 +CD1 + 8 +0 + 62 + 0 + 10 +15262.499933 + 20 +9028.314796 + 30 +0.0 + 11 +15258.640228 + 21 +9035.0 + 31 +0.0 + 0 +LINE + 5 +CD2 + 8 +0 + 62 + 0 + 10 +15262.499933 + 20 +8985.013526 + 30 +0.0 + 11 +15249.999933 + 21 +9006.664161 + 31 +0.0 + 0 +LINE + 5 +CD3 + 8 +0 + 62 + 0 + 10 +15224.999933 + 20 +9006.664161 + 30 +0.0 + 11 +15212.499933 + 21 +9028.314796 + 31 +0.0 + 0 +LINE + 5 +CD4 + 8 +0 + 62 + 0 + 10 +15212.507742 + 20 +8985.0 + 30 +0.0 + 11 +15212.499933 + 21 +8985.013526 + 31 +0.0 + 0 +LINE + 5 +CD5 + 8 +0 + 62 + 0 + 10 +15187.499933 + 20 +9028.314796 + 30 +0.0 + 11 +15183.640229 + 21 +9035.0 + 31 +0.0 + 0 +LINE + 5 +CD6 + 8 +0 + 62 + 0 + 10 +15187.499933 + 20 +8985.013526 + 30 +0.0 + 11 +15174.999933 + 21 +9006.664161 + 31 +0.0 + 0 +LINE + 5 +CD7 + 8 +0 + 62 + 0 + 10 +15149.999933 + 20 +9006.664161 + 30 +0.0 + 11 +15137.499933 + 21 +9028.314796 + 31 +0.0 + 0 +LINE + 5 +CD8 + 8 +0 + 62 + 0 + 10 +15137.507743 + 20 +8985.0 + 30 +0.0 + 11 +15137.499933 + 21 +8985.013526 + 31 +0.0 + 0 +LINE + 5 +CD9 + 8 +0 + 62 + 0 + 10 +15112.499933 + 20 +9028.314796 + 30 +0.0 + 11 +15108.640229 + 21 +9035.0 + 31 +0.0 + 0 +LINE + 5 +CDA + 8 +0 + 62 + 0 + 10 +15112.499933 + 20 +8985.013526 + 30 +0.0 + 11 +15099.999933 + 21 +9006.664161 + 31 +0.0 + 0 +LINE + 5 +CDB + 8 +0 + 62 + 0 + 10 +15074.999934 + 20 +9006.664161 + 30 +0.0 + 11 +15062.499934 + 21 +9028.314796 + 31 +0.0 + 0 +LINE + 5 +CDC + 8 +0 + 62 + 0 + 10 +15062.507743 + 20 +8985.0 + 30 +0.0 + 11 +15062.499934 + 21 +8985.013526 + 31 +0.0 + 0 +LINE + 5 +CDD + 8 +0 + 62 + 0 + 10 +15037.499934 + 20 +9028.314796 + 30 +0.0 + 11 +15033.640229 + 21 +9035.0 + 31 +0.0 + 0 +LINE + 5 +CDE + 8 +0 + 62 + 0 + 10 +15037.499934 + 20 +8985.013526 + 30 +0.0 + 11 +15024.999934 + 21 +9006.664161 + 31 +0.0 + 0 +LINE + 5 +CDF + 8 +0 + 62 + 0 + 10 +15337.499933 + 20 +8985.013525 + 30 +0.0 + 11 +15324.999933 + 21 +9006.664161 + 31 +0.0 + 0 +LINE + 5 +CE0 + 8 +0 + 62 + 0 + 10 +15362.507742 + 20 +8985.0 + 30 +0.0 + 11 +15362.499933 + 21 +8985.013525 + 31 +0.0 + 0 +LINE + 5 +CE1 + 8 +0 + 62 + 0 + 10 +15337.499933 + 20 +9028.314796 + 30 +0.0 + 11 +15333.640228 + 21 +9035.0 + 31 +0.0 + 0 +LINE + 5 +CE2 + 8 +0 + 62 + 0 + 10 +15374.999933 + 20 +9006.66416 + 30 +0.0 + 11 +15362.499933 + 21 +9028.314796 + 31 +0.0 + 0 +LINE + 5 +CE3 + 8 +0 + 62 + 0 + 10 +15412.499932 + 20 +8985.013525 + 30 +0.0 + 11 +15399.999932 + 21 +9006.66416 + 31 +0.0 + 0 +LINE + 5 +CE4 + 8 +0 + 62 + 0 + 10 +15437.507741 + 20 +8985.0 + 30 +0.0 + 11 +15437.499932 + 21 +8985.013525 + 31 +0.0 + 0 +LINE + 5 +CE5 + 8 +0 + 62 + 0 + 10 +15412.499932 + 20 +9028.314795 + 30 +0.0 + 11 +15408.640228 + 21 +9035.0 + 31 +0.0 + 0 +LINE + 5 +CE6 + 8 +0 + 62 + 0 + 10 +15449.999932 + 20 +9006.66416 + 30 +0.0 + 11 +15437.499932 + 21 +9028.314795 + 31 +0.0 + 0 +LINE + 5 +CE7 + 8 +0 + 62 + 0 + 10 +15487.499932 + 20 +8985.013525 + 30 +0.0 + 11 +15474.999932 + 21 +9006.66416 + 31 +0.0 + 0 +LINE + 5 +CE8 + 8 +0 + 62 + 0 + 10 +15512.507741 + 20 +8985.0 + 30 +0.0 + 11 +15512.499932 + 21 +8985.013525 + 31 +0.0 + 0 +LINE + 5 +CE9 + 8 +0 + 62 + 0 + 10 +15487.499932 + 20 +9028.314795 + 30 +0.0 + 11 +15483.640227 + 21 +9035.0 + 31 +0.0 + 0 +LINE + 5 +CEA + 8 +0 + 62 + 0 + 10 +15524.999932 + 20 +9006.66416 + 30 +0.0 + 11 +15512.499932 + 21 +9028.314795 + 31 +0.0 + 0 +LINE + 5 +CEB + 8 +0 + 62 + 0 + 10 +15562.499932 + 20 +8985.013525 + 30 +0.0 + 11 +15549.999932 + 21 +9006.66416 + 31 +0.0 + 0 +LINE + 5 +CEC + 8 +0 + 62 + 0 + 10 +15587.507741 + 20 +8985.0 + 30 +0.0 + 11 +15587.499932 + 21 +8985.013525 + 31 +0.0 + 0 +LINE + 5 +CED + 8 +0 + 62 + 0 + 10 +15562.499932 + 20 +9028.314795 + 30 +0.0 + 11 +15558.640227 + 21 +9035.0 + 31 +0.0 + 0 +LINE + 5 +CEE + 8 +0 + 62 + 0 + 10 +15599.999932 + 20 +9006.66416 + 30 +0.0 + 11 +15587.499932 + 21 +9028.314795 + 31 +0.0 + 0 +LINE + 5 +CEF + 8 +0 + 62 + 0 + 10 +15625.0 + 20 +9006.664042 + 30 +0.0 + 11 +15624.999932 + 21 +9006.66416 + 31 +0.0 + 0 +LINE + 5 +CF0 + 8 +0 + 62 + 0 + 10 +15287.499967 + 20 +8985.013583 + 30 +0.0 + 11 +15299.999967 + 21 +9006.664218 + 31 +0.0 + 0 +LINE + 5 +CF1 + 8 +0 + 62 + 0 + 10 +15262.492125 + 20 +8985.0 + 30 +0.0 + 11 +15262.499967 + 21 +8985.013583 + 31 +0.0 + 0 +LINE + 5 +CF2 + 8 +0 + 62 + 0 + 10 +15287.499967 + 20 +9028.314854 + 30 +0.0 + 11 +15291.359638 + 21 +9035.0 + 31 +0.0 + 0 +LINE + 5 +CF3 + 8 +0 + 62 + 0 + 10 +15249.999967 + 20 +9006.664218 + 30 +0.0 + 11 +15262.499967 + 21 +9028.314853 + 31 +0.0 + 0 +LINE + 5 +CF4 + 8 +0 + 62 + 0 + 10 +15212.499967 + 20 +8985.013583 + 30 +0.0 + 11 +15224.999967 + 21 +9006.664218 + 31 +0.0 + 0 +LINE + 5 +CF5 + 8 +0 + 62 + 0 + 10 +15187.492125 + 20 +8985.0 + 30 +0.0 + 11 +15187.499967 + 21 +8985.013583 + 31 +0.0 + 0 +LINE + 5 +CF6 + 8 +0 + 62 + 0 + 10 +15212.499967 + 20 +9028.314853 + 30 +0.0 + 11 +15216.359638 + 21 +9035.0 + 31 +0.0 + 0 +LINE + 5 +CF7 + 8 +0 + 62 + 0 + 10 +15174.999967 + 20 +9006.664218 + 30 +0.0 + 11 +15187.499967 + 21 +9028.314853 + 31 +0.0 + 0 +LINE + 5 +CF8 + 8 +0 + 62 + 0 + 10 +15137.499967 + 20 +8985.013583 + 30 +0.0 + 11 +15149.999967 + 21 +9006.664218 + 31 +0.0 + 0 +LINE + 5 +CF9 + 8 +0 + 62 + 0 + 10 +15112.492125 + 20 +8985.0 + 30 +0.0 + 11 +15112.499967 + 21 +8985.013583 + 31 +0.0 + 0 +LINE + 5 +CFA + 8 +0 + 62 + 0 + 10 +15137.499967 + 20 +9028.314853 + 30 +0.0 + 11 +15141.359639 + 21 +9035.0 + 31 +0.0 + 0 +LINE + 5 +CFB + 8 +0 + 62 + 0 + 10 +15099.999968 + 20 +9006.664218 + 30 +0.0 + 11 +15112.499968 + 21 +9028.314853 + 31 +0.0 + 0 +LINE + 5 +CFC + 8 +0 + 62 + 0 + 10 +15062.499968 + 20 +8985.013583 + 30 +0.0 + 11 +15074.999968 + 21 +9006.664218 + 31 +0.0 + 0 +LINE + 5 +CFD + 8 +0 + 62 + 0 + 10 +15037.492126 + 20 +8985.0 + 30 +0.0 + 11 +15037.499968 + 21 +8985.013583 + 31 +0.0 + 0 +LINE + 5 +CFE + 8 +0 + 62 + 0 + 10 +15062.499968 + 20 +9028.314853 + 30 +0.0 + 11 +15066.359639 + 21 +9035.0 + 31 +0.0 + 0 +LINE + 5 +CFF + 8 +0 + 62 + 0 + 10 +15024.999968 + 20 +9006.664218 + 30 +0.0 + 11 +15037.499968 + 21 +9028.314853 + 31 +0.0 + 0 +LINE + 5 +D00 + 8 +0 + 62 + 0 + 10 +15324.999967 + 20 +9006.664219 + 30 +0.0 + 11 +15337.499967 + 21 +9028.314854 + 31 +0.0 + 0 +LINE + 5 +D01 + 8 +0 + 62 + 0 + 10 +15337.492124 + 20 +8985.0 + 30 +0.0 + 11 +15337.499967 + 21 +8985.013583 + 31 +0.0 + 0 +LINE + 5 +D02 + 8 +0 + 62 + 0 + 10 +15362.499967 + 20 +9028.314854 + 30 +0.0 + 11 +15366.359638 + 21 +9035.0 + 31 +0.0 + 0 +LINE + 5 +D03 + 8 +0 + 62 + 0 + 10 +15362.499967 + 20 +8985.013584 + 30 +0.0 + 11 +15374.999967 + 21 +9006.664219 + 31 +0.0 + 0 +LINE + 5 +D04 + 8 +0 + 62 + 0 + 10 +15399.999967 + 20 +9006.664219 + 30 +0.0 + 11 +15412.499967 + 21 +9028.314854 + 31 +0.0 + 0 +LINE + 5 +D05 + 8 +0 + 62 + 0 + 10 +15412.492124 + 20 +8985.0 + 30 +0.0 + 11 +15412.499966 + 21 +8985.013584 + 31 +0.0 + 0 +LINE + 5 +D06 + 8 +0 + 62 + 0 + 10 +15437.499966 + 20 +9028.314854 + 30 +0.0 + 11 +15441.359637 + 21 +9035.0 + 31 +0.0 + 0 +LINE + 5 +D07 + 8 +0 + 62 + 0 + 10 +15437.499966 + 20 +8985.013584 + 30 +0.0 + 11 +15449.999966 + 21 +9006.664219 + 31 +0.0 + 0 +LINE + 5 +D08 + 8 +0 + 62 + 0 + 10 +15474.999966 + 20 +9006.664219 + 30 +0.0 + 11 +15487.499966 + 21 +9028.314854 + 31 +0.0 + 0 +LINE + 5 +D09 + 8 +0 + 62 + 0 + 10 +15487.492124 + 20 +8985.0 + 30 +0.0 + 11 +15487.499966 + 21 +8985.013584 + 31 +0.0 + 0 +LINE + 5 +D0A + 8 +0 + 62 + 0 + 10 +15512.499966 + 20 +9028.314854 + 30 +0.0 + 11 +15516.359637 + 21 +9035.0 + 31 +0.0 + 0 +LINE + 5 +D0B + 8 +0 + 62 + 0 + 10 +15512.499966 + 20 +8985.013584 + 30 +0.0 + 11 +15524.999966 + 21 +9006.664219 + 31 +0.0 + 0 +LINE + 5 +D0C + 8 +0 + 62 + 0 + 10 +15549.999966 + 20 +9006.664219 + 30 +0.0 + 11 +15562.499966 + 21 +9028.314854 + 31 +0.0 + 0 +LINE + 5 +D0D + 8 +0 + 62 + 0 + 10 +15562.492123 + 20 +8985.0 + 30 +0.0 + 11 +15562.499966 + 21 +8985.013584 + 31 +0.0 + 0 +LINE + 5 +D0E + 8 +0 + 62 + 0 + 10 +15587.499966 + 20 +9028.314854 + 30 +0.0 + 11 +15591.359637 + 21 +9035.0 + 31 +0.0 + 0 +LINE + 5 +D0F + 8 +0 + 62 + 0 + 10 +15587.499966 + 20 +8985.013584 + 30 +0.0 + 11 +15599.999966 + 21 +9006.664219 + 31 +0.0 + 0 +LINE + 5 +D10 + 8 +0 + 62 + 0 + 10 +15624.999966 + 20 +9006.664219 + 30 +0.0 + 11 +15625.0 + 21 +9006.664278 + 31 +0.0 + 0 +ENDBLK + 5 +D11 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X67 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X67 + 1 + + 0 +LINE + 5 +D13 + 8 +0 + 62 + 0 + 10 +16023.225099 + 20 +9235.0 + 30 +0.0 + 11 +16069.001602 + 21 +9280.776503 + 31 +0.0 + 0 +LINE + 5 +D14 + 8 +0 + 62 + 0 + 10 +16122.034611 + 20 +9333.809512 + 30 +0.0 + 11 +16175.06762 + 21 +9386.84252 + 31 +0.0 + 0 +LINE + 5 +D15 + 8 +0 + 62 + 0 + 10 +15917.159082 + 20 +9235.0 + 30 +0.0 + 11 +15962.935585 + 21 +9280.776503 + 31 +0.0 + 0 +LINE + 5 +D16 + 8 +0 + 62 + 0 + 10 +16015.968594 + 20 +9333.809512 + 30 +0.0 + 11 +16069.001602 + 21 +9386.84252 + 31 +0.0 + 0 +LINE + 5 +D17 + 8 +0 + 62 + 0 + 10 +15811.093065 + 20 +9235.0 + 30 +0.0 + 11 +15856.869568 + 21 +9280.776503 + 31 +0.0 + 0 +LINE + 5 +D18 + 8 +0 + 62 + 0 + 10 +15909.902577 + 20 +9333.809512 + 30 +0.0 + 11 +15962.935585 + 21 +9386.84252 + 31 +0.0 + 0 +LINE + 5 +D19 + 8 +0 + 62 + 0 + 10 +15725.0 + 20 +9254.972952 + 30 +0.0 + 11 +15750.803551 + 21 +9280.776503 + 31 +0.0 + 0 +LINE + 5 +D1A + 8 +0 + 62 + 0 + 10 +15803.83656 + 20 +9333.809512 + 30 +0.0 + 11 +15856.869568 + 21 +9386.84252 + 31 +0.0 + 0 +LINE + 5 +D1B + 8 +0 + 62 + 0 + 10 +15725.0 + 20 +9361.038969 + 30 +0.0 + 11 +15750.803551 + 21 +9386.84252 + 31 +0.0 + 0 +LINE + 5 +D1C + 8 +0 + 62 + 0 + 10 +16129.291117 + 20 +9235.0 + 30 +0.0 + 11 +16175.06762 + 21 +9280.776503 + 31 +0.0 + 0 +LINE + 5 +D1D + 8 +0 + 62 + 0 + 10 +16228.100628 + 20 +9333.809512 + 30 +0.0 + 11 +16281.133637 + 21 +9386.84252 + 31 +0.0 + 0 +LINE + 5 +D1E + 8 +0 + 62 + 0 + 10 +16235.357134 + 20 +9235.0 + 30 +0.0 + 11 +16281.133637 + 21 +9280.776503 + 31 +0.0 + 0 +LINE + 5 +D1F + 8 +0 + 62 + 0 + 10 +16334.166645 + 20 +9333.809512 + 30 +0.0 + 11 +16387.199654 + 21 +9386.84252 + 31 +0.0 + 0 +LINE + 5 +D20 + 8 +0 + 62 + 0 + 10 +16341.423151 + 20 +9235.0 + 30 +0.0 + 11 +16387.199654 + 21 +9280.776503 + 31 +0.0 + 0 +LINE + 5 +D21 + 8 +0 + 62 + 0 + 10 +16440.232663 + 20 +9333.809512 + 30 +0.0 + 11 +16493.265671 + 21 +9386.84252 + 31 +0.0 + 0 +LINE + 5 +D22 + 8 +0 + 62 + 0 + 10 +16447.489168 + 20 +9235.0 + 30 +0.0 + 11 +16493.265671 + 21 +9280.776503 + 31 +0.0 + 0 +LINE + 5 +D23 + 8 +0 + 62 + 0 + 10 +16546.29868 + 20 +9333.809512 + 30 +0.0 + 11 +16564.992137 + 21 +9352.502969 + 31 +0.0 + 0 +LINE + 5 +D24 + 8 +0 + 62 + 0 + 10 +16553.555185 + 20 +9235.0 + 30 +0.0 + 11 +16564.992137 + 21 +9246.436952 + 31 +0.0 + 0 +ENDBLK + 5 +D25 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X69 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X69 + 1 + + 0 +LINE + 5 +D27 + 8 +0 + 62 + 0 + 10 +14642.386361 + 20 +12415.0 + 30 +0.0 + 11 +15442.386361 + 21 +13215.0 + 31 +0.0 + 0 +LINE + 5 +D28 + 8 +0 + 62 + 0 + 10 +13952.375735 + 20 +12467.451494 + 30 +0.0 + 11 +14699.92424 + 21 +13215.0 + 31 +0.0 + 0 +LINE + 5 +D29 + 8 +0 + 62 + 0 + 10 +13952.375735 + 20 +13209.913614 + 30 +0.0 + 11 +13957.46212 + 21 +13215.0 + 31 +0.0 + 0 +LINE + 5 +D2A + 8 +0 + 62 + 0 + 10 +15384.848481 + 20 +12415.0 + 30 +0.0 + 11 +16184.848481 + 21 +13215.0 + 31 +0.0 + 0 +LINE + 5 +D2B + 8 +0 + 62 + 0 + 10 +16127.310601 + 20 +12415.0 + 30 +0.0 + 11 +16564.992137 + 21 +12852.681536 + 31 +0.0 + 0 +LINE + 5 +D2C + 8 +0 + 62 + 0 + 10 +14271.1553 + 20 +12415.0 + 30 +0.0 + 11 +14385.203579 + 21 +12529.048279 + 31 +0.0 + 0 +LINE + 5 +D2D + 8 +0 + 62 + 0 + 10 +14478.011344 + 20 +12621.856044 + 30 +0.0 + 11 +14663.626874 + 21 +12807.471574 + 31 +0.0 + 0 +LINE + 5 +D2E + 8 +0 + 62 + 0 + 10 +14756.434639 + 20 +12900.279339 + 30 +0.0 + 11 +14942.050169 + 21 +13085.894869 + 31 +0.0 + 0 +LINE + 5 +D2F + 8 +0 + 62 + 0 + 10 +15034.857934 + 20 +13178.702634 + 30 +0.0 + 11 +15071.1553 + 21 +13215.0 + 31 +0.0 + 0 +LINE + 5 +D30 + 8 +0 + 62 + 0 + 10 +13952.375735 + 20 +12838.682555 + 30 +0.0 + 11 +14013.972519 + 21 +12900.279339 + 31 +0.0 + 0 +LINE + 5 +D31 + 8 +0 + 62 + 0 + 10 +14106.780284 + 20 +12993.087104 + 30 +0.0 + 11 +14292.395814 + 21 +13178.702634 + 31 +0.0 + 0 +LINE + 5 +D32 + 8 +0 + 62 + 0 + 10 +15013.61742 + 20 +12415.0 + 30 +0.0 + 11 +15034.857934 + 21 +12436.240514 + 31 +0.0 + 0 +LINE + 5 +D33 + 8 +0 + 62 + 0 + 10 +15127.665699 + 20 +12529.048279 + 30 +0.0 + 11 +15313.281229 + 21 +12714.663809 + 31 +0.0 + 0 +LINE + 5 +D34 + 8 +0 + 62 + 0 + 10 +15406.088994 + 20 +12807.471574 + 30 +0.0 + 11 +15591.704525 + 21 +12993.087104 + 31 +0.0 + 0 +LINE + 5 +D35 + 8 +0 + 62 + 0 + 10 +15684.51229 + 20 +13085.894869 + 30 +0.0 + 11 +15813.61742 + 21 +13215.0 + 31 +0.0 + 0 +LINE + 5 +D36 + 8 +0 + 62 + 0 + 10 +15777.320055 + 20 +12436.240514 + 30 +0.0 + 11 +15962.935585 + 21 +12621.856044 + 31 +0.0 + 0 +LINE + 5 +D37 + 8 +0 + 62 + 0 + 10 +16055.74335 + 20 +12714.663809 + 30 +0.0 + 11 +16241.35888 + 21 +12900.279339 + 31 +0.0 + 0 +LINE + 5 +D38 + 8 +0 + 62 + 0 + 10 +16334.166645 + 20 +12993.087104 + 30 +0.0 + 11 +16519.782175 + 21 +13178.702634 + 31 +0.0 + 0 +LINE + 5 +D39 + 8 +0 + 62 + 0 + 10 +16498.541661 + 20 +12415.0 + 30 +0.0 + 11 +16564.992137 + 21 +12481.450477 + 31 +0.0 + 0 +ENDBLK + 5 +D3A + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X71 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X71 + 1 + + 0 +LINE + 5 +D3C + 8 +0 + 62 + 0 + 10 +15013.596279 + 20 +11599.344022 + 30 +0.0 + 11 +15013.596279 + 21 +11599.344022 + 31 +0.0 + 0 +LINE + 5 +D3D + 8 +0 + 62 + 0 + 10 +15011.076544 + 20 +11676.416973 + 30 +0.0 + 11 +15011.076544 + 21 +11676.416973 + 31 +0.0 + 0 +LINE + 5 +D3E + 8 +0 + 62 + 0 + 10 +15008.55681 + 20 +11753.489924 + 30 +0.0 + 11 +15008.55681 + 21 +11753.489924 + 31 +0.0 + 0 +LINE + 5 +D3F + 8 +0 + 62 + 0 + 10 +15060.124777 + 20 +11793.059417 + 30 +0.0 + 11 +15060.124777 + 21 +11793.059417 + 31 +0.0 + 0 +LINE + 5 +D40 + 8 +0 + 62 + 0 + 10 +15006.037076 + 20 +11830.562874 + 30 +0.0 + 11 +15006.037076 + 21 +11830.562874 + 31 +0.0 + 0 +LINE + 5 +D41 + 8 +0 + 62 + 0 + 10 +15057.605043 + 20 +11870.132367 + 30 +0.0 + 11 +15057.605043 + 21 +11870.132367 + 31 +0.0 + 0 +LINE + 5 +D42 + 8 +0 + 62 + 0 + 10 +15003.517341 + 20 +11907.635825 + 30 +0.0 + 11 +15003.517341 + 21 +11907.635825 + 31 +0.0 + 0 +LINE + 5 +D43 + 8 +0 + 62 + 0 + 10 +15055.085309 + 20 +11947.205318 + 30 +0.0 + 11 +15055.085309 + 21 +11947.205318 + 31 +0.0 + 0 +LINE + 5 +D44 + 8 +0 + 62 + 0 + 10 +15000.997607 + 20 +11984.708776 + 30 +0.0 + 11 +15000.997607 + 21 +11984.708776 + 31 +0.0 + 0 +LINE + 5 +D45 + 8 +0 + 62 + 0 + 10 +15052.565574 + 20 +12024.278269 + 30 +0.0 + 11 +15052.565574 + 21 +12024.278269 + 31 +0.0 + 0 +LINE + 5 +D46 + 8 +0 + 62 + 0 + 10 +15050.04584 + 20 +12101.35122 + 30 +0.0 + 11 +15050.04584 + 21 +12101.35122 + 31 +0.0 + 0 +LINE + 5 +D47 + 8 +0 + 62 + 0 + 10 +15047.526106 + 20 +12178.42417 + 30 +0.0 + 11 +15047.526106 + 21 +12178.42417 + 31 +0.0 + 0 +LINE + 5 +D48 + 8 +0 + 62 + 0 + 10 +15045.006371 + 20 +12255.497121 + 30 +0.0 + 11 +15045.006371 + 21 +12255.497121 + 31 +0.0 + 0 +LINE + 5 +D49 + 8 +0 + 62 + 0 + 10 +15042.486637 + 20 +12332.570072 + 30 +0.0 + 11 +15042.486637 + 21 +12332.570072 + 31 +0.0 + 0 +LINE + 5 +D4A + 8 +0 + 62 + 0 + 10 +15016.116013 + 20 +11522.271071 + 30 +0.0 + 11 +15016.116013 + 21 +11522.271071 + 31 +0.0 + 0 +LINE + 5 +D4B + 8 +0 + 62 + 0 + 10 +15018.635747 + 20 +11445.198121 + 30 +0.0 + 11 +15018.635747 + 21 +11445.198121 + 31 +0.0 + 0 +LINE + 5 +D4C + 8 +0 + 62 + 0 + 10 +15021.155482 + 20 +11368.12517 + 30 +0.0 + 11 +15021.155482 + 21 +11368.12517 + 31 +0.0 + 0 +LINE + 5 +D4D + 8 +0 + 62 + 0 + 10 +15023.675216 + 20 +11291.052219 + 30 +0.0 + 11 +15023.675216 + 21 +11291.052219 + 31 +0.0 + 0 +LINE + 5 +D4E + 8 +0 + 62 + 0 + 10 +15026.19495 + 20 +11213.979268 + 30 +0.0 + 11 +15026.19495 + 21 +11213.979268 + 31 +0.0 + 0 +LINE + 5 +D4F + 8 +0 + 62 + 0 + 10 +15028.714685 + 20 +11136.906318 + 30 +0.0 + 11 +15028.714685 + 21 +11136.906318 + 31 +0.0 + 0 +LINE + 5 +D50 + 8 +0 + 62 + 0 + 10 +15031.234419 + 20 +11059.833367 + 30 +0.0 + 11 +15031.234419 + 21 +11059.833367 + 31 +0.0 + 0 +LINE + 5 +D51 + 8 +0 + 62 + 0 + 10 +15014.419867 + 20 +11608.325891 + 30 +0.0 + 11 +15014.419867 + 21 +11608.325891 + 31 +0.0 + 0 +LINE + 5 +D52 + 8 +0 + 62 + 0 + 10 +15031.871201 + 20 +11714.189424 + 30 +0.0 + 11 +15031.871201 + 21 +11714.189424 + 31 +0.0 + 0 +LINE + 5 +D53 + 8 +0 + 62 + 0 + 10 +15052.691544 + 20 +11716.930474 + 30 +0.0 + 11 +15052.691544 + 21 +11716.930474 + 31 +0.0 + 0 +LINE + 5 +D54 + 8 +0 + 62 + 0 + 10 +15015.8117 + 20 +11815.641172 + 30 +0.0 + 11 +15015.8117 + 21 +11815.641172 + 31 +0.0 + 0 +LINE + 5 +D55 + 8 +0 + 62 + 0 + 10 +15048.331091 + 20 +11819.922432 + 30 +0.0 + 11 +15048.331091 + 21 +11819.922432 + 31 +0.0 + 0 +LINE + 5 +D56 + 8 +0 + 62 + 0 + 10 +15011.451248 + 20 +11918.63313 + 30 +0.0 + 11 +15011.451248 + 21 +11918.63313 + 31 +0.0 + 0 +LINE + 5 +D57 + 8 +0 + 62 + 0 + 10 +15028.902582 + 20 +12024.496663 + 30 +0.0 + 11 +15028.902582 + 21 +12024.496663 + 31 +0.0 + 0 +LINE + 5 +D58 + 8 +0 + 62 + 0 + 10 +15049.722924 + 20 +12027.237713 + 30 +0.0 + 11 +15049.722924 + 21 +12027.237713 + 31 +0.0 + 0 +LINE + 5 +D59 + 8 +0 + 62 + 0 + 10 +15012.843081 + 20 +12125.948411 + 30 +0.0 + 11 +15012.843081 + 21 +12125.948411 + 31 +0.0 + 0 +LINE + 5 +D5A + 8 +0 + 62 + 0 + 10 +15045.362472 + 20 +12130.22967 + 30 +0.0 + 11 +15045.362472 + 21 +12130.22967 + 31 +0.0 + 0 +LINE + 5 +D5B + 8 +0 + 62 + 0 + 10 +15008.482628 + 20 +12228.940369 + 30 +0.0 + 11 +15008.482628 + 21 +12228.940369 + 31 +0.0 + 0 +LINE + 5 +D5C + 8 +0 + 62 + 0 + 10 +15025.933963 + 20 +12334.803902 + 30 +0.0 + 11 +15025.933963 + 21 +12334.803902 + 31 +0.0 + 0 +LINE + 5 +D5D + 8 +0 + 62 + 0 + 10 +15046.754305 + 20 +12337.544952 + 30 +0.0 + 11 +15046.754305 + 21 +12337.544952 + 31 +0.0 + 0 +LINE + 5 +D5E + 8 +0 + 62 + 0 + 10 +15018.780319 + 20 +11505.333934 + 30 +0.0 + 11 +15018.780319 + 21 +11505.333934 + 31 +0.0 + 0 +LINE + 5 +D5F + 8 +0 + 62 + 0 + 10 +15051.299711 + 20 +11509.615193 + 30 +0.0 + 11 +15051.299711 + 21 +11509.615193 + 31 +0.0 + 0 +LINE + 5 +D60 + 8 +0 + 62 + 0 + 10 +15034.839821 + 20 +11403.882185 + 30 +0.0 + 11 +15034.839821 + 21 +11403.882185 + 31 +0.0 + 0 +LINE + 5 +D61 + 8 +0 + 62 + 0 + 10 +15055.660163 + 20 +11406.623235 + 30 +0.0 + 11 +15055.660163 + 21 +11406.623235 + 31 +0.0 + 0 +LINE + 5 +D62 + 8 +0 + 62 + 0 + 10 +15017.388486 + 20 +11298.018652 + 30 +0.0 + 11 +15017.388486 + 21 +11298.018652 + 31 +0.0 + 0 +LINE + 5 +D63 + 8 +0 + 62 + 0 + 10 +15000.928596 + 20 +11192.285645 + 30 +0.0 + 11 +15000.928596 + 21 +11192.285645 + 31 +0.0 + 0 +LINE + 5 +D64 + 8 +0 + 62 + 0 + 10 +15021.748938 + 20 +11195.026695 + 30 +0.0 + 11 +15021.748938 + 21 +11195.026695 + 31 +0.0 + 0 +LINE + 5 +D65 + 8 +0 + 62 + 0 + 10 +15054.26833 + 20 +11199.307954 + 30 +0.0 + 11 +15054.26833 + 21 +11199.307954 + 31 +0.0 + 0 +LINE + 5 +D66 + 8 +0 + 62 + 0 + 10 +15037.80844 + 20 +11093.574947 + 30 +0.0 + 11 +15037.80844 + 21 +11093.574947 + 31 +0.0 + 0 +LINE + 5 +D67 + 8 +0 + 62 + 0 + 10 +15058.628782 + 20 +11096.315997 + 30 +0.0 + 11 +15058.628782 + 21 +11096.315997 + 31 +0.0 + 0 +LINE + 5 +D68 + 8 +0 + 62 + 0 + 10 +15012.821249 + 20 +11653.215041 + 30 +0.0 + 11 +15012.821249 + 21 +11653.215041 + 31 +0.0 + 0 +LINE + 5 +D69 + 8 +0 + 62 + 0 + 10 +15029.689078 + 20 +11642.469049 + 30 +0.0 + 11 +15029.689078 + 21 +11642.469049 + 31 +0.0 + 0 +LINE + 5 +D6A + 8 +0 + 62 + 0 + 10 +15058.108127 + 20 +11703.947567 + 30 +0.0 + 11 +15058.108127 + 21 +11703.947567 + 31 +0.0 + 0 +LINE + 5 +D6B + 8 +0 + 62 + 0 + 10 +15025.802993 + 20 +11804.111656 + 30 +0.0 + 11 +15025.802993 + 21 +11804.111656 + 31 +0.0 + 0 +LINE + 5 +D6C + 8 +0 + 62 + 0 + 10 +15040.47152 + 20 +11953.933671 + 30 +0.0 + 11 +15040.47152 + 21 +11953.933671 + 31 +0.0 + 0 +LINE + 5 +D6D + 8 +0 + 62 + 0 + 10 +15057.339349 + 20 +11943.187679 + 30 +0.0 + 11 +15057.339349 + 21 +11943.187679 + 31 +0.0 + 0 +LINE + 5 +D6E + 8 +0 + 62 + 0 + 10 +15008.166385 + 20 +12054.097761 + 30 +0.0 + 11 +15008.166385 + 21 +12054.097761 + 31 +0.0 + 0 +LINE + 5 +D6F + 8 +0 + 62 + 0 + 10 +15025.034214 + 20 +12043.351769 + 30 +0.0 + 11 +15025.034214 + 21 +12043.351769 + 31 +0.0 + 0 +LINE + 5 +D70 + 8 +0 + 62 + 0 + 10 +15053.453264 + 20 +12104.830286 + 30 +0.0 + 11 +15053.453264 + 21 +12104.830286 + 31 +0.0 + 0 +LINE + 5 +D71 + 8 +0 + 62 + 0 + 10 +15021.148129 + 20 +12204.994375 + 30 +0.0 + 11 +15021.148129 + 21 +12204.994375 + 31 +0.0 + 0 +LINE + 5 +D72 + 8 +0 + 62 + 0 + 10 +15035.816656 + 20 +12354.816391 + 30 +0.0 + 11 +15035.816656 + 21 +12354.816391 + 31 +0.0 + 0 +LINE + 5 +D73 + 8 +0 + 62 + 0 + 10 +15052.684485 + 20 +12344.070399 + 30 +0.0 + 11 +15052.684485 + 21 +12344.070399 + 31 +0.0 + 0 +LINE + 5 +D74 + 8 +0 + 62 + 0 + 10 +15045.126383 + 20 +11553.050952 + 30 +0.0 + 11 +15045.126383 + 21 +11553.050952 + 31 +0.0 + 0 +LINE + 5 +D75 + 8 +0 + 62 + 0 + 10 +15061.994212 + 20 +11542.30496 + 30 +0.0 + 11 +15061.994212 + 21 +11542.30496 + 31 +0.0 + 0 +LINE + 5 +D76 + 8 +0 + 62 + 0 + 10 +15030.457856 + 20 +11403.228937 + 30 +0.0 + 11 +15030.457856 + 21 +11403.228937 + 31 +0.0 + 0 +LINE + 5 +D77 + 8 +0 + 62 + 0 + 10 +15002.038806 + 20 +11341.750419 + 30 +0.0 + 11 +15002.038806 + 21 +11341.750419 + 31 +0.0 + 0 +LINE + 5 +D78 + 8 +0 + 62 + 0 + 10 +15017.476112 + 20 +11252.332322 + 30 +0.0 + 11 +15017.476112 + 21 +11252.332322 + 31 +0.0 + 0 +LINE + 5 +D79 + 8 +0 + 62 + 0 + 10 +15034.343941 + 20 +11241.58633 + 30 +0.0 + 11 +15034.343941 + 21 +11241.58633 + 31 +0.0 + 0 +LINE + 5 +D7A + 8 +0 + 62 + 0 + 10 +15049.781246 + 20 +11152.168233 + 30 +0.0 + 11 +15049.781246 + 21 +11152.168233 + 31 +0.0 + 0 +LINE + 5 +D7B + 8 +0 + 62 + 0 + 10 +15002.807585 + 20 +11102.510307 + 30 +0.0 + 11 +15002.807585 + 21 +11102.510307 + 31 +0.0 + 0 +LINE + 5 +D7C + 8 +0 + 62 + 0 + 10 +15035.112719 + 20 +11002.346217 + 30 +0.0 + 11 +15035.112719 + 21 +11002.346217 + 31 +0.0 + 0 +LINE + 5 +D7D + 8 +0 + 62 + 0 + 10 +15008.763723 + 20 +11627.900024 + 30 +0.0 + 11 +15008.763723 + 21 +11627.900024 + 31 +0.0 + 0 +LINE + 5 +D7E + 8 +0 + 62 + 0 + 10 +15016.136496 + 20 +11621.144122 + 30 +0.0 + 11 +15016.136496 + 21 +11621.144122 + 31 +0.0 + 0 +LINE + 5 +D7F + 8 +0 + 62 + 0 + 10 +15050.935986 + 20 +11589.256264 + 30 +0.0 + 11 +15050.935986 + 21 +11589.256264 + 31 +0.0 + 0 +LINE + 5 +D80 + 8 +0 + 62 + 0 + 10 +15007.210571 + 20 +11774.614549 + 30 +0.0 + 11 +15007.210571 + 21 +11774.614549 + 31 +0.0 + 0 +LINE + 5 +D81 + 8 +0 + 62 + 0 + 10 +15047.023547 + 20 +11738.132678 + 30 +0.0 + 11 +15047.023547 + 21 +11738.132678 + 31 +0.0 + 0 +LINE + 5 +D82 + 8 +0 + 62 + 0 + 10 +15054.39632 + 20 +11731.376775 + 30 +0.0 + 11 +15054.39632 + 21 +11731.376775 + 31 +0.0 + 0 +LINE + 5 +D83 + 8 +0 + 62 + 0 + 10 +15003.298132 + 20 +11923.490962 + 30 +0.0 + 11 +15003.298132 + 21 +11923.490962 + 31 +0.0 + 0 +LINE + 5 +D84 + 8 +0 + 62 + 0 + 10 +15010.670905 + 20 +11916.73506 + 30 +0.0 + 11 +15010.670905 + 21 +11916.73506 + 31 +0.0 + 0 +LINE + 5 +D85 + 8 +0 + 62 + 0 + 10 +15045.470395 + 20 +11884.847202 + 30 +0.0 + 11 +15045.470395 + 21 +11884.847202 + 31 +0.0 + 0 +LINE + 5 +D86 + 8 +0 + 62 + 0 + 10 +15001.74498 + 20 +12070.205487 + 30 +0.0 + 11 +15001.74498 + 21 +12070.205487 + 31 +0.0 + 0 +LINE + 5 +D87 + 8 +0 + 62 + 0 + 10 +15041.557956 + 20 +12033.723616 + 30 +0.0 + 11 +15041.557956 + 21 +12033.723616 + 31 +0.0 + 0 +LINE + 5 +D88 + 8 +0 + 62 + 0 + 10 +15048.930729 + 20 +12026.967714 + 30 +0.0 + 11 +15048.930729 + 21 +12026.967714 + 31 +0.0 + 0 +LINE + 5 +D89 + 8 +0 + 62 + 0 + 10 +15005.205314 + 20 +12212.325999 + 30 +0.0 + 11 +15005.205314 + 21 +12212.325999 + 31 +0.0 + 0 +LINE + 5 +D8A + 8 +0 + 62 + 0 + 10 +15040.004804 + 20 +12180.438141 + 30 +0.0 + 11 +15040.004804 + 21 +12180.438141 + 31 +0.0 + 0 +LINE + 5 +D8B + 8 +0 + 62 + 0 + 10 +15036.092365 + 20 +12329.314554 + 30 +0.0 + 11 +15036.092365 + 21 +12329.314554 + 31 +0.0 + 0 +LINE + 5 +D8C + 8 +0 + 62 + 0 + 10 +15043.465138 + 20 +12322.558652 + 30 +0.0 + 11 +15043.465138 + 21 +12322.558652 + 31 +0.0 + 0 +LINE + 5 +D8D + 8 +0 + 62 + 0 + 10 +15012.676162 + 20 +11479.02361 + 30 +0.0 + 11 +15012.676162 + 21 +11479.02361 + 31 +0.0 + 0 +LINE + 5 +D8E + 8 +0 + 62 + 0 + 10 +15052.489138 + 20 +11442.541739 + 30 +0.0 + 11 +15052.489138 + 21 +11442.541739 + 31 +0.0 + 0 +LINE + 5 +D8F + 8 +0 + 62 + 0 + 10 +15059.861912 + 20 +11435.785837 + 30 +0.0 + 11 +15059.861912 + 21 +11435.785837 + 31 +0.0 + 0 +LINE + 5 +D90 + 8 +0 + 62 + 0 + 10 +15014.229314 + 20 +11332.309085 + 30 +0.0 + 11 +15014.229314 + 21 +11332.309085 + 31 +0.0 + 0 +LINE + 5 +D91 + 8 +0 + 62 + 0 + 10 +15021.602087 + 20 +11325.553183 + 30 +0.0 + 11 +15021.602087 + 21 +11325.553183 + 31 +0.0 + 0 +LINE + 5 +D92 + 8 +0 + 62 + 0 + 10 +15056.401578 + 20 +11293.665326 + 30 +0.0 + 11 +15056.401578 + 21 +11293.665326 + 31 +0.0 + 0 +LINE + 5 +D93 + 8 +0 + 62 + 0 + 10 +15018.141753 + 20 +11183.432672 + 30 +0.0 + 11 +15018.141753 + 21 +11183.432672 + 31 +0.0 + 0 +LINE + 5 +D94 + 8 +0 + 62 + 0 + 10 +15057.954729 + 20 +11146.950801 + 30 +0.0 + 11 +15057.954729 + 21 +11146.950801 + 31 +0.0 + 0 +LINE + 5 +D95 + 8 +0 + 62 + 0 + 10 +15019.694905 + 20 +11036.718147 + 30 +0.0 + 11 +15019.694905 + 21 +11036.718147 + 31 +0.0 + 0 +LINE + 5 +D96 + 8 +0 + 62 + 0 + 10 +15027.067678 + 20 +11029.962245 + 30 +0.0 + 11 +15027.067678 + 21 +11029.962245 + 31 +0.0 + 0 +ENDBLK + 5 +D97 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X72 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X72 + 1 + + 0 +LINE + 5 +D99 + 8 +0 + 62 + 0 + 10 +15584.734698 + 20 +11721.568302 + 30 +0.0 + 11 +15584.734698 + 21 +11721.568302 + 31 +0.0 + 0 +LINE + 5 +D9A + 8 +0 + 62 + 0 + 10 +15582.214964 + 20 +11798.641252 + 30 +0.0 + 11 +15582.214964 + 21 +11798.641252 + 31 +0.0 + 0 +LINE + 5 +D9B + 8 +0 + 62 + 0 + 10 +15579.69523 + 20 +11875.714203 + 30 +0.0 + 11 +15579.69523 + 21 +11875.714203 + 31 +0.0 + 0 +LINE + 5 +D9C + 8 +0 + 62 + 0 + 10 +15577.175495 + 20 +11952.787154 + 30 +0.0 + 11 +15577.175495 + 21 +11952.787154 + 31 +0.0 + 0 +LINE + 5 +D9D + 8 +0 + 62 + 0 + 10 +15574.655761 + 20 +12029.860105 + 30 +0.0 + 11 +15574.655761 + 21 +12029.860105 + 31 +0.0 + 0 +LINE + 5 +D9E + 8 +0 + 62 + 0 + 10 +15572.136027 + 20 +12106.933056 + 30 +0.0 + 11 +15572.136027 + 21 +12106.933056 + 31 +0.0 + 0 +LINE + 5 +D9F + 8 +0 + 62 + 0 + 10 +15569.616292 + 20 +12184.006006 + 30 +0.0 + 11 +15569.616292 + 21 +12184.006006 + 31 +0.0 + 0 +LINE + 5 +DA0 + 8 +0 + 62 + 0 + 10 +15623.564319 + 20 +12225.401783 + 30 +0.0 + 11 +15623.564319 + 21 +12225.401783 + 31 +0.0 + 0 +LINE + 5 +DA1 + 8 +0 + 62 + 0 + 10 +15567.096558 + 20 +12261.078957 + 30 +0.0 + 11 +15567.096558 + 21 +12261.078957 + 31 +0.0 + 0 +LINE + 5 +DA2 + 8 +0 + 62 + 0 + 10 +15621.044585 + 20 +12302.474734 + 30 +0.0 + 11 +15621.044585 + 21 +12302.474734 + 31 +0.0 + 0 +LINE + 5 +DA3 + 8 +0 + 62 + 0 + 10 +15564.576824 + 20 +12338.151908 + 30 +0.0 + 11 +15564.576824 + 21 +12338.151908 + 31 +0.0 + 0 +LINE + 5 +DA4 + 8 +0 + 62 + 0 + 10 +15587.254433 + 20 +11644.495351 + 30 +0.0 + 11 +15587.254433 + 21 +11644.495351 + 31 +0.0 + 0 +LINE + 5 +DA5 + 8 +0 + 62 + 0 + 10 +15589.774167 + 20 +11567.4224 + 30 +0.0 + 11 +15589.774167 + 21 +11567.4224 + 31 +0.0 + 0 +LINE + 5 +DA6 + 8 +0 + 62 + 0 + 10 +15592.293901 + 20 +11490.349449 + 30 +0.0 + 11 +15592.293901 + 21 +11490.349449 + 31 +0.0 + 0 +LINE + 5 +DA7 + 8 +0 + 62 + 0 + 10 +15594.813636 + 20 +11413.276499 + 30 +0.0 + 11 +15594.813636 + 21 +11413.276499 + 31 +0.0 + 0 +LINE + 5 +DA8 + 8 +0 + 62 + 0 + 10 +15597.33337 + 20 +11336.203548 + 30 +0.0 + 11 +15597.33337 + 21 +11336.203548 + 31 +0.0 + 0 +LINE + 5 +DA9 + 8 +0 + 62 + 0 + 10 +15599.853104 + 20 +11259.130597 + 30 +0.0 + 11 +15599.853104 + 21 +11259.130597 + 31 +0.0 + 0 +LINE + 5 +DAA + 8 +0 + 62 + 0 + 10 +15602.372839 + 20 +11182.057646 + 30 +0.0 + 11 +15602.372839 + 21 +11182.057646 + 31 +0.0 + 0 +LINE + 5 +DAB + 8 +0 + 62 + 0 + 10 +15604.892573 + 20 +11104.984696 + 30 +0.0 + 11 +15604.892573 + 21 +11104.984696 + 31 +0.0 + 0 +LINE + 5 +DAC + 8 +0 + 62 + 0 + 10 +15607.412307 + 20 +11027.911745 + 30 +0.0 + 11 +15607.412307 + 21 +11027.911745 + 31 +0.0 + 0 +LINE + 5 +DAD + 8 +0 + 62 + 0 + 10 +15589.65427 + 20 +11580.490915 + 30 +0.0 + 11 +15589.65427 + 21 +11580.490915 + 31 +0.0 + 0 +LINE + 5 +DAE + 8 +0 + 62 + 0 + 10 +15607.105605 + 20 +11686.354449 + 30 +0.0 + 11 +15607.105605 + 21 +11686.354449 + 31 +0.0 + 0 +LINE + 5 +DAF + 8 +0 + 62 + 0 + 10 +15570.225761 + 20 +11785.065147 + 30 +0.0 + 11 +15570.225761 + 21 +11785.065147 + 31 +0.0 + 0 +LINE + 5 +DB0 + 8 +0 + 62 + 0 + 10 +15591.046103 + 20 +11787.806197 + 30 +0.0 + 11 +15591.046103 + 21 +11787.806197 + 31 +0.0 + 0 +LINE + 5 +DB1 + 8 +0 + 62 + 0 + 10 +15623.565495 + 20 +11792.087456 + 30 +0.0 + 11 +15623.565495 + 21 +11792.087456 + 31 +0.0 + 0 +LINE + 5 +DB2 + 8 +0 + 62 + 0 + 10 +15586.685651 + 20 +11890.798154 + 30 +0.0 + 11 +15586.685651 + 21 +11890.798154 + 31 +0.0 + 0 +LINE + 5 +DB3 + 8 +0 + 62 + 0 + 10 +15604.136986 + 20 +11996.661687 + 30 +0.0 + 11 +15604.136986 + 21 +11996.661687 + 31 +0.0 + 0 +LINE + 5 +DB4 + 8 +0 + 62 + 0 + 10 +15624.957328 + 20 +11999.402737 + 30 +0.0 + 11 +15624.957328 + 21 +11999.402737 + 31 +0.0 + 0 +LINE + 5 +DB5 + 8 +0 + 62 + 0 + 10 +15567.257142 + 20 +12095.372386 + 30 +0.0 + 11 +15567.257142 + 21 +12095.372386 + 31 +0.0 + 0 +LINE + 5 +DB6 + 8 +0 + 62 + 0 + 10 +15588.077484 + 20 +12098.113436 + 30 +0.0 + 11 +15588.077484 + 21 +12098.113436 + 31 +0.0 + 0 +LINE + 5 +DB7 + 8 +0 + 62 + 0 + 10 +15620.596875 + 20 +12102.394695 + 30 +0.0 + 11 +15620.596875 + 21 +12102.394695 + 31 +0.0 + 0 +LINE + 5 +DB8 + 8 +0 + 62 + 0 + 10 +15583.717032 + 20 +12201.105393 + 30 +0.0 + 11 +15583.717032 + 21 +12201.105393 + 31 +0.0 + 0 +LINE + 5 +DB9 + 8 +0 + 62 + 0 + 10 +15601.168366 + 20 +12306.968926 + 30 +0.0 + 11 +15601.168366 + 21 +12306.968926 + 31 +0.0 + 0 +LINE + 5 +DBA + 8 +0 + 62 + 0 + 10 +15621.988708 + 20 +12309.709976 + 30 +0.0 + 11 +15621.988708 + 21 +12309.709976 + 31 +0.0 + 0 +LINE + 5 +DBB + 8 +0 + 62 + 0 + 10 +15573.19438 + 20 +11474.757908 + 30 +0.0 + 11 +15573.19438 + 21 +11474.757908 + 31 +0.0 + 0 +LINE + 5 +DBC + 8 +0 + 62 + 0 + 10 +15594.014723 + 20 +11477.498958 + 30 +0.0 + 11 +15594.014723 + 21 +11477.498958 + 31 +0.0 + 0 +LINE + 5 +DBD + 8 +0 + 62 + 0 + 10 +15610.074224 + 20 +11376.04721 + 30 +0.0 + 11 +15610.074224 + 21 +11376.04721 + 31 +0.0 + 0 +LINE + 5 +DBE + 8 +0 + 62 + 0 + 10 +15592.622889 + 20 +11270.183676 + 30 +0.0 + 11 +15592.622889 + 21 +11270.183676 + 31 +0.0 + 0 +LINE + 5 +DBF + 8 +0 + 62 + 0 + 10 +15576.163 + 20 +11164.450669 + 30 +0.0 + 11 +15576.163 + 21 +11164.450669 + 31 +0.0 + 0 +LINE + 5 +DC0 + 8 +0 + 62 + 0 + 10 +15596.983342 + 20 +11167.191719 + 30 +0.0 + 11 +15596.983342 + 21 +11167.191719 + 31 +0.0 + 0 +LINE + 5 +DC1 + 8 +0 + 62 + 0 + 10 +15613.042843 + 20 +11065.739971 + 30 +0.0 + 11 +15613.042843 + 21 +11065.739971 + 31 +0.0 + 0 +LINE + 5 +DC2 + 8 +0 + 62 + 0 + 10 +15603.344487 + 20 +11754.510941 + 30 +0.0 + 11 +15603.344487 + 21 +11754.510941 + 31 +0.0 + 0 +LINE + 5 +DC3 + 8 +0 + 62 + 0 + 10 +15620.212315 + 20 +11743.764949 + 30 +0.0 + 11 +15620.212315 + 21 +11743.764949 + 31 +0.0 + 0 +LINE + 5 +DC4 + 8 +0 + 62 + 0 + 10 +15571.039352 + 20 +11854.675031 + 30 +0.0 + 11 +15571.039352 + 21 +11854.675031 + 31 +0.0 + 0 +LINE + 5 +DC5 + 8 +0 + 62 + 0 + 10 +15587.907181 + 20 +11843.929039 + 30 +0.0 + 11 +15587.907181 + 21 +11843.929039 + 31 +0.0 + 0 +LINE + 5 +DC6 + 8 +0 + 62 + 0 + 10 +15616.326231 + 20 +11905.407556 + 30 +0.0 + 11 +15616.326231 + 21 +11905.407556 + 31 +0.0 + 0 +LINE + 5 +DC7 + 8 +0 + 62 + 0 + 10 +15584.021096 + 20 +12005.571645 + 30 +0.0 + 11 +15584.021096 + 21 +12005.571645 + 31 +0.0 + 0 +LINE + 5 +DC8 + 8 +0 + 62 + 0 + 10 +15598.689623 + 20 +12155.393661 + 30 +0.0 + 11 +15598.689623 + 21 +12155.393661 + 31 +0.0 + 0 +LINE + 5 +DC9 + 8 +0 + 62 + 0 + 10 +15615.557452 + 20 +12144.647669 + 30 +0.0 + 11 +15615.557452 + 21 +12144.647669 + 31 +0.0 + 0 +LINE + 5 +DCA + 8 +0 + 62 + 0 + 10 +15566.384489 + 20 +12255.55775 + 30 +0.0 + 11 +15566.384489 + 21 +12255.55775 + 31 +0.0 + 0 +LINE + 5 +DCB + 8 +0 + 62 + 0 + 10 +15583.252318 + 20 +12244.811758 + 30 +0.0 + 11 +15583.252318 + 21 +12244.811758 + 31 +0.0 + 0 +LINE + 5 +DCC + 8 +0 + 62 + 0 + 10 +15611.671367 + 20 +12306.290275 + 30 +0.0 + 11 +15611.671367 + 21 +12306.290275 + 31 +0.0 + 0 +LINE + 5 +DCD + 8 +0 + 62 + 0 + 10 +15588.67596 + 20 +11604.688926 + 30 +0.0 + 11 +15588.67596 + 21 +11604.688926 + 31 +0.0 + 0 +LINE + 5 +DCE + 8 +0 + 62 + 0 + 10 +15620.981094 + 20 +11504.524837 + 30 +0.0 + 11 +15620.981094 + 21 +11504.524837 + 31 +0.0 + 0 +LINE + 5 +DCF + 8 +0 + 62 + 0 + 10 +15575.694215 + 20 +11453.792311 + 30 +0.0 + 11 +15575.694215 + 21 +11453.792311 + 31 +0.0 + 0 +LINE + 5 +DD0 + 8 +0 + 62 + 0 + 10 +15592.562044 + 20 +11443.046319 + 30 +0.0 + 11 +15592.562044 + 21 +11443.046319 + 31 +0.0 + 0 +LINE + 5 +DD1 + 8 +0 + 62 + 0 + 10 +15607.99935 + 20 +11353.628222 + 30 +0.0 + 11 +15607.99935 + 21 +11353.628222 + 31 +0.0 + 0 +LINE + 5 +DD2 + 8 +0 + 62 + 0 + 10 +15624.867179 + 20 +11342.88223 + 30 +0.0 + 11 +15624.867179 + 21 +11342.88223 + 31 +0.0 + 0 +LINE + 5 +DD3 + 8 +0 + 62 + 0 + 10 +15593.330823 + 20 +11203.806207 + 30 +0.0 + 11 +15593.330823 + 21 +11203.806207 + 31 +0.0 + 0 +LINE + 5 +DD4 + 8 +0 + 62 + 0 + 10 +15564.911773 + 20 +11142.327689 + 30 +0.0 + 11 +15564.911773 + 21 +11142.327689 + 31 +0.0 + 0 +LINE + 5 +DD5 + 8 +0 + 62 + 0 + 10 +15580.349079 + 20 +11052.909592 + 30 +0.0 + 11 +15580.349079 + 21 +11052.909592 + 31 +0.0 + 0 +LINE + 5 +DD6 + 8 +0 + 62 + 0 + 10 +15597.216908 + 20 +11042.1636 + 30 +0.0 + 11 +15597.216908 + 21 +11042.1636 + 31 +0.0 + 0 +LINE + 5 +DD7 + 8 +0 + 62 + 0 + 10 +15571.729219 + 20 +11693.202483 + 30 +0.0 + 11 +15571.729219 + 21 +11693.202483 + 31 +0.0 + 0 +LINE + 5 +DD8 + 8 +0 + 62 + 0 + 10 +15579.101993 + 20 +11686.446581 + 30 +0.0 + 11 +15579.101993 + 21 +11686.446581 + 31 +0.0 + 0 +LINE + 5 +DD9 + 8 +0 + 62 + 0 + 10 +15613.901483 + 20 +11654.558723 + 30 +0.0 + 11 +15613.901483 + 21 +11654.558723 + 31 +0.0 + 0 +LINE + 5 +DDA + 8 +0 + 62 + 0 + 10 +15570.176067 + 20 +11839.917008 + 30 +0.0 + 11 +15570.176067 + 21 +11839.917008 + 31 +0.0 + 0 +LINE + 5 +DDB + 8 +0 + 62 + 0 + 10 +15609.989044 + 20 +11803.435137 + 30 +0.0 + 11 +15609.989044 + 21 +11803.435137 + 31 +0.0 + 0 +LINE + 5 +DDC + 8 +0 + 62 + 0 + 10 +15617.361817 + 20 +11796.679235 + 30 +0.0 + 11 +15617.361817 + 21 +11796.679235 + 31 +0.0 + 0 +LINE + 5 +DDD + 8 +0 + 62 + 0 + 10 +15566.263628 + 20 +11988.793422 + 30 +0.0 + 11 +15566.263628 + 21 +11988.793422 + 31 +0.0 + 0 +LINE + 5 +DDE + 8 +0 + 62 + 0 + 10 +15573.636401 + 20 +11982.03752 + 30 +0.0 + 11 +15573.636401 + 21 +11982.03752 + 31 +0.0 + 0 +LINE + 5 +DDF + 8 +0 + 62 + 0 + 10 +15608.435892 + 20 +11950.149662 + 30 +0.0 + 11 +15608.435892 + 21 +11950.149662 + 31 +0.0 + 0 +LINE + 5 +DE0 + 8 +0 + 62 + 0 + 10 +15564.710476 + 20 +12135.507947 + 30 +0.0 + 11 +15564.710476 + 21 +12135.507947 + 31 +0.0 + 0 +LINE + 5 +DE1 + 8 +0 + 62 + 0 + 10 +15604.523452 + 20 +12099.026075 + 30 +0.0 + 11 +15604.523452 + 21 +12099.026075 + 31 +0.0 + 0 +LINE + 5 +DE2 + 8 +0 + 62 + 0 + 10 +15611.896226 + 20 +12092.270173 + 30 +0.0 + 11 +15611.896226 + 21 +12092.270173 + 31 +0.0 + 0 +LINE + 5 +DE3 + 8 +0 + 62 + 0 + 10 +15568.17081 + 20 +12277.628458 + 30 +0.0 + 11 +15568.17081 + 21 +12277.628458 + 31 +0.0 + 0 +LINE + 5 +DE4 + 8 +0 + 62 + 0 + 10 +15602.970301 + 20 +12245.7406 + 30 +0.0 + 11 +15602.970301 + 21 +12245.7406 + 31 +0.0 + 0 +LINE + 5 +DE5 + 8 +0 + 62 + 0 + 10 +15575.641659 + 20 +11544.32607 + 30 +0.0 + 11 +15575.641659 + 21 +11544.32607 + 31 +0.0 + 0 +LINE + 5 +DE6 + 8 +0 + 62 + 0 + 10 +15615.454635 + 20 +11507.844198 + 30 +0.0 + 11 +15615.454635 + 21 +11507.844198 + 31 +0.0 + 0 +LINE + 5 +DE7 + 8 +0 + 62 + 0 + 10 +15622.827408 + 20 +11501.088296 + 30 +0.0 + 11 +15622.827408 + 21 +11501.088296 + 31 +0.0 + 0 +LINE + 5 +DE8 + 8 +0 + 62 + 0 + 10 +15577.19481 + 20 +11397.611545 + 30 +0.0 + 11 +15577.19481 + 21 +11397.611545 + 31 +0.0 + 0 +LINE + 5 +DE9 + 8 +0 + 62 + 0 + 10 +15584.567584 + 20 +11390.855643 + 30 +0.0 + 11 +15584.567584 + 21 +11390.855643 + 31 +0.0 + 0 +LINE + 5 +DEA + 8 +0 + 62 + 0 + 10 +15619.367074 + 20 +11358.967785 + 30 +0.0 + 11 +15619.367074 + 21 +11358.967785 + 31 +0.0 + 0 +LINE + 5 +DEB + 8 +0 + 62 + 0 + 10 +15581.10725 + 20 +11248.735131 + 30 +0.0 + 11 +15581.10725 + 21 +11248.735131 + 31 +0.0 + 0 +LINE + 5 +DEC + 8 +0 + 62 + 0 + 10 +15620.920226 + 20 +11212.25326 + 30 +0.0 + 11 +15620.920226 + 21 +11212.25326 + 31 +0.0 + 0 +LINE + 5 +DED + 8 +0 + 62 + 0 + 10 +15582.660402 + 20 +11102.020606 + 30 +0.0 + 11 +15582.660402 + 21 +11102.020606 + 31 +0.0 + 0 +LINE + 5 +DEE + 8 +0 + 62 + 0 + 10 +15590.033175 + 20 +11095.264704 + 30 +0.0 + 11 +15590.033175 + 21 +11095.264704 + 31 +0.0 + 0 +LINE + 5 +DEF + 8 +0 + 62 + 0 + 10 +15624.832665 + 20 +11063.376846 + 30 +0.0 + 11 +15624.832665 + 21 +11063.376846 + 31 +0.0 + 0 +ENDBLK + 5 +DF0 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X73 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X73 + 1 + + 0 +LINE + 5 +DF2 + 8 +0 + 62 + 0 + 10 +15017.602141 + 20 +9785.270378 + 30 +0.0 + 11 +15017.602141 + 21 +9785.270378 + 31 +0.0 + 0 +LINE + 5 +DF3 + 8 +0 + 62 + 0 + 10 +15015.082407 + 20 +9862.343328 + 30 +0.0 + 11 +15015.082407 + 21 +9862.343328 + 31 +0.0 + 0 +LINE + 5 +DF4 + 8 +0 + 62 + 0 + 10 +15012.562672 + 20 +9939.416279 + 30 +0.0 + 11 +15012.562672 + 21 +9939.416279 + 31 +0.0 + 0 +LINE + 5 +DF5 + 8 +0 + 62 + 0 + 10 +15010.042938 + 20 +10016.48923 + 30 +0.0 + 11 +15010.042938 + 21 +10016.48923 + 31 +0.0 + 0 +LINE + 5 +DF6 + 8 +0 + 62 + 0 + 10 +15007.523204 + 20 +10093.562181 + 30 +0.0 + 11 +15007.523204 + 21 +10093.562181 + 31 +0.0 + 0 +LINE + 5 +DF7 + 8 +0 + 62 + 0 + 10 +15061.471231 + 20 +10134.957958 + 30 +0.0 + 11 +15061.471231 + 21 +10134.957958 + 31 +0.0 + 0 +LINE + 5 +DF8 + 8 +0 + 62 + 0 + 10 +15005.003469 + 20 +10170.635131 + 30 +0.0 + 11 +15005.003469 + 21 +10170.635131 + 31 +0.0 + 0 +LINE + 5 +DF9 + 8 +0 + 62 + 0 + 10 +15058.951497 + 20 +10212.030908 + 30 +0.0 + 11 +15058.951497 + 21 +10212.030908 + 31 +0.0 + 0 +LINE + 5 +DFA + 8 +0 + 62 + 0 + 10 +15002.483735 + 20 +10247.708082 + 30 +0.0 + 11 +15002.483735 + 21 +10247.708082 + 31 +0.0 + 0 +LINE + 5 +DFB + 8 +0 + 62 + 0 + 10 +15056.431762 + 20 +10289.103859 + 30 +0.0 + 11 +15056.431762 + 21 +10289.103859 + 31 +0.0 + 0 +LINE + 5 +DFC + 8 +0 + 62 + 0 + 10 +15053.912028 + 20 +10366.17681 + 30 +0.0 + 11 +15053.912028 + 21 +10366.17681 + 31 +0.0 + 0 +LINE + 5 +DFD + 8 +0 + 62 + 0 + 10 +15020.121875 + 20 +9708.197427 + 30 +0.0 + 11 +15020.121875 + 21 +9708.197427 + 31 +0.0 + 0 +LINE + 5 +DFE + 8 +0 + 62 + 0 + 10 +15022.64161 + 20 +9631.124476 + 30 +0.0 + 11 +15022.64161 + 21 +9631.124476 + 31 +0.0 + 0 +LINE + 5 +DFF + 8 +0 + 62 + 0 + 10 +15025.161344 + 20 +9554.051525 + 30 +0.0 + 11 +15025.161344 + 21 +9554.051525 + 31 +0.0 + 0 +LINE + 5 +E00 + 8 +0 + 62 + 0 + 10 +15027.681078 + 20 +9476.978574 + 30 +0.0 + 11 +15027.681078 + 21 +9476.978574 + 31 +0.0 + 0 +LINE + 5 +E01 + 8 +0 + 62 + 0 + 10 +15030.200813 + 20 +9399.905624 + 30 +0.0 + 11 +15030.200813 + 21 +9399.905624 + 31 +0.0 + 0 +LINE + 5 +E02 + 8 +0 + 62 + 0 + 10 +15032.720547 + 20 +9322.832673 + 30 +0.0 + 11 +15032.720547 + 21 +9322.832673 + 31 +0.0 + 0 +LINE + 5 +E03 + 8 +0 + 62 + 0 + 10 +15035.240281 + 20 +9245.759722 + 30 +0.0 + 11 +15035.240281 + 21 +9245.759722 + 31 +0.0 + 0 +LINE + 5 +E04 + 8 +0 + 62 + 0 + 10 +15037.760016 + 20 +9168.686771 + 30 +0.0 + 11 +15037.760016 + 21 +9168.686771 + 31 +0.0 + 0 +LINE + 5 +E05 + 8 +0 + 62 + 0 + 10 +15040.27975 + 20 +9091.613821 + 30 +0.0 + 11 +15040.27975 + 21 +9091.613821 + 31 +0.0 + 0 +LINE + 5 +E06 + 8 +0 + 62 + 0 + 10 +15015.771693 + 20 +9640.74945 + 30 +0.0 + 11 +15015.771693 + 21 +9640.74945 + 31 +0.0 + 0 +LINE + 5 +E07 + 8 +0 + 62 + 0 + 10 +15036.592035 + 20 +9643.4905 + 30 +0.0 + 11 +15036.592035 + 21 +9643.4905 + 31 +0.0 + 0 +LINE + 5 +E08 + 8 +0 + 62 + 0 + 10 +15032.231582 + 20 +9746.482458 + 30 +0.0 + 11 +15032.231582 + 21 +9746.482458 + 31 +0.0 + 0 +LINE + 5 +E09 + 8 +0 + 62 + 0 + 10 +15049.682917 + 20 +9852.345991 + 30 +0.0 + 11 +15049.682917 + 21 +9852.345991 + 31 +0.0 + 0 +LINE + 5 +E0A + 8 +0 + 62 + 0 + 10 +15012.803073 + 20 +9951.056689 + 30 +0.0 + 11 +15012.803073 + 21 +9951.056689 + 31 +0.0 + 0 +LINE + 5 +E0B + 8 +0 + 62 + 0 + 10 +15033.623415 + 20 +9953.797739 + 30 +0.0 + 11 +15033.623415 + 21 +9953.797739 + 31 +0.0 + 0 +LINE + 5 +E0C + 8 +0 + 62 + 0 + 10 +15029.262963 + 20 +10056.789696 + 30 +0.0 + 11 +15029.262963 + 21 +10056.789696 + 31 +0.0 + 0 +LINE + 5 +E0D + 8 +0 + 62 + 0 + 10 +15046.714298 + 20 +10162.65323 + 30 +0.0 + 11 +15046.714298 + 21 +10162.65323 + 31 +0.0 + 0 +LINE + 5 +E0E + 8 +0 + 62 + 0 + 10 +15009.834454 + 20 +10261.363928 + 30 +0.0 + 11 +15009.834454 + 21 +10261.363928 + 31 +0.0 + 0 +LINE + 5 +E0F + 8 +0 + 62 + 0 + 10 +15030.654796 + 20 +10264.104978 + 30 +0.0 + 11 +15030.654796 + 21 +10264.104978 + 31 +0.0 + 0 +LINE + 5 +E10 + 8 +0 + 62 + 0 + 10 +15026.294344 + 20 +10367.096935 + 30 +0.0 + 11 +15026.294344 + 21 +10367.096935 + 31 +0.0 + 0 +LINE + 5 +E11 + 8 +0 + 62 + 0 + 10 +15052.651536 + 20 +9542.038752 + 30 +0.0 + 11 +15052.651536 + 21 +9542.038752 + 31 +0.0 + 0 +LINE + 5 +E12 + 8 +0 + 62 + 0 + 10 +15002.68081 + 20 +9431.89396 + 30 +0.0 + 11 +15002.68081 + 21 +9431.89396 + 31 +0.0 + 0 +LINE + 5 +E13 + 8 +0 + 62 + 0 + 10 +15035.200202 + 20 +9436.175219 + 30 +0.0 + 11 +15035.200202 + 21 +9436.175219 + 31 +0.0 + 0 +LINE + 5 +E14 + 8 +0 + 62 + 0 + 10 +15018.740312 + 20 +9330.442211 + 30 +0.0 + 11 +15018.740312 + 21 +9330.442211 + 31 +0.0 + 0 +LINE + 5 +E15 + 8 +0 + 62 + 0 + 10 +15039.560654 + 20 +9333.183261 + 30 +0.0 + 11 +15039.560654 + 21 +9333.183261 + 31 +0.0 + 0 +LINE + 5 +E16 + 8 +0 + 62 + 0 + 10 +15001.288977 + 20 +9224.578678 + 30 +0.0 + 11 +15001.288977 + 21 +9224.578678 + 31 +0.0 + 0 +LINE + 5 +E17 + 8 +0 + 62 + 0 + 10 +15055.620156 + 20 +9231.731513 + 30 +0.0 + 11 +15055.620156 + 21 +9231.731513 + 31 +0.0 + 0 +LINE + 5 +E18 + 8 +0 + 62 + 0 + 10 +15005.649429 + 20 +9121.586721 + 30 +0.0 + 11 +15005.649429 + 21 +9121.586721 + 31 +0.0 + 0 +LINE + 5 +E19 + 8 +0 + 62 + 0 + 10 +15038.168821 + 20 +9125.86798 + 30 +0.0 + 11 +15038.168821 + 21 +9125.86798 + 31 +0.0 + 0 +LINE + 5 +E1A + 8 +0 + 62 + 0 + 10 +15036.095565 + 20 +9648.801445 + 30 +0.0 + 11 +15036.095565 + 21 +9648.801445 + 31 +0.0 + 0 +LINE + 5 +E1B + 8 +0 + 62 + 0 + 10 +15052.963394 + 20 +9638.055453 + 30 +0.0 + 11 +15052.963394 + 21 +9638.055453 + 31 +0.0 + 0 +LINE + 5 +E1C + 8 +0 + 62 + 0 + 10 +15003.790431 + 20 +9748.965534 + 30 +0.0 + 11 +15003.790431 + 21 +9748.965534 + 31 +0.0 + 0 +LINE + 5 +E1D + 8 +0 + 62 + 0 + 10 +15020.65826 + 20 +9738.219542 + 30 +0.0 + 11 +15020.65826 + 21 +9738.219542 + 31 +0.0 + 0 +LINE + 5 +E1E + 8 +0 + 62 + 0 + 10 +15049.077309 + 20 +9799.698059 + 30 +0.0 + 11 +15049.077309 + 21 +9799.698059 + 31 +0.0 + 0 +LINE + 5 +E1F + 8 +0 + 62 + 0 + 10 +15016.772175 + 20 +9899.862149 + 30 +0.0 + 11 +15016.772175 + 21 +9899.862149 + 31 +0.0 + 0 +LINE + 5 +E20 + 8 +0 + 62 + 0 + 10 +15031.440702 + 20 +10049.684164 + 30 +0.0 + 11 +15031.440702 + 21 +10049.684164 + 31 +0.0 + 0 +LINE + 5 +E21 + 8 +0 + 62 + 0 + 10 +15048.308531 + 20 +10038.938172 + 30 +0.0 + 11 +15048.308531 + 21 +10038.938172 + 31 +0.0 + 0 +LINE + 5 +E22 + 8 +0 + 62 + 0 + 10 +15016.003396 + 20 +10139.102261 + 30 +0.0 + 11 +15016.003396 + 21 +10139.102261 + 31 +0.0 + 0 +LINE + 5 +E23 + 8 +0 + 62 + 0 + 10 +15044.422446 + 20 +10200.580779 + 30 +0.0 + 11 +15044.422446 + 21 +10200.580779 + 31 +0.0 + 0 +LINE + 5 +E24 + 8 +0 + 62 + 0 + 10 +15012.117312 + 20 +10300.744868 + 30 +0.0 + 11 +15012.117312 + 21 +10300.744868 + 31 +0.0 + 0 +LINE + 5 +E25 + 8 +0 + 62 + 0 + 10 +15059.090973 + 20 +10350.402794 + 30 +0.0 + 11 +15059.090973 + 21 +10350.402794 + 31 +0.0 + 0 +LINE + 5 +E26 + 8 +0 + 62 + 0 + 10 +15021.427038 + 20 +9498.979429 + 30 +0.0 + 11 +15021.427038 + 21 +9498.979429 + 31 +0.0 + 0 +LINE + 5 +E27 + 8 +0 + 62 + 0 + 10 +15053.732173 + 20 +9398.81534 + 30 +0.0 + 11 +15053.732173 + 21 +9398.81534 + 31 +0.0 + 0 +LINE + 5 +E28 + 8 +0 + 62 + 0 + 10 +15008.445294 + 20 +9348.082815 + 30 +0.0 + 11 +15008.445294 + 21 +9348.082815 + 31 +0.0 + 0 +LINE + 5 +E29 + 8 +0 + 62 + 0 + 10 +15025.313123 + 20 +9337.336823 + 30 +0.0 + 11 +15025.313123 + 21 +9337.336823 + 31 +0.0 + 0 +LINE + 5 +E2A + 8 +0 + 62 + 0 + 10 +15040.750429 + 20 +9247.918726 + 30 +0.0 + 11 +15040.750429 + 21 +9247.918726 + 31 +0.0 + 0 +LINE + 5 +E2B + 8 +0 + 62 + 0 + 10 +15057.618258 + 20 +9237.172733 + 30 +0.0 + 11 +15057.618258 + 21 +9237.172733 + 31 +0.0 + 0 +LINE + 5 +E2C + 8 +0 + 62 + 0 + 10 +15026.081902 + 20 +9098.09671 + 30 +0.0 + 11 +15026.081902 + 21 +9098.09671 + 31 +0.0 + 0 +LINE + 5 +E2D + 8 +0 + 62 + 0 + 10 +15007.209885 + 20 +9595.245326 + 30 +0.0 + 11 +15007.209885 + 21 +9595.245326 + 31 +0.0 + 0 +LINE + 5 +E2E + 8 +0 + 62 + 0 + 10 +15047.022861 + 20 +9558.763455 + 30 +0.0 + 11 +15047.022861 + 21 +9558.763455 + 31 +0.0 + 0 +LINE + 5 +E2F + 8 +0 + 62 + 0 + 10 +15054.395634 + 20 +9552.007553 + 30 +0.0 + 11 +15054.395634 + 21 +9552.007553 + 31 +0.0 + 0 +LINE + 5 +E30 + 8 +0 + 62 + 0 + 10 +15003.297446 + 20 +9744.121739 + 30 +0.0 + 11 +15003.297446 + 21 +9744.121739 + 31 +0.0 + 0 +LINE + 5 +E31 + 8 +0 + 62 + 0 + 10 +15010.670219 + 20 +9737.365837 + 30 +0.0 + 11 +15010.670219 + 21 +9737.365837 + 31 +0.0 + 0 +LINE + 5 +E32 + 8 +0 + 62 + 0 + 10 +15045.469709 + 20 +9705.47798 + 30 +0.0 + 11 +15045.469709 + 21 +9705.47798 + 31 +0.0 + 0 +LINE + 5 +E33 + 8 +0 + 62 + 0 + 10 +15001.744294 + 20 +9890.836264 + 30 +0.0 + 11 +15001.744294 + 21 +9890.836264 + 31 +0.0 + 0 +LINE + 5 +E34 + 8 +0 + 62 + 0 + 10 +15041.55727 + 20 +9854.354393 + 30 +0.0 + 11 +15041.55727 + 21 +9854.354393 + 31 +0.0 + 0 +LINE + 5 +E35 + 8 +0 + 62 + 0 + 10 +15048.930043 + 20 +9847.598491 + 30 +0.0 + 11 +15048.930043 + 21 +9847.598491 + 31 +0.0 + 0 +LINE + 5 +E36 + 8 +0 + 62 + 0 + 10 +15005.204628 + 20 +10032.956776 + 30 +0.0 + 11 +15005.204628 + 21 +10032.956776 + 31 +0.0 + 0 +LINE + 5 +E37 + 8 +0 + 62 + 0 + 10 +15040.004118 + 20 +10001.068918 + 30 +0.0 + 11 +15040.004118 + 21 +10001.068918 + 31 +0.0 + 0 +LINE + 5 +E38 + 8 +0 + 62 + 0 + 10 +15036.091679 + 20 +10149.945332 + 30 +0.0 + 11 +15036.091679 + 21 +10149.945332 + 31 +0.0 + 0 +LINE + 5 +E39 + 8 +0 + 62 + 0 + 10 +15043.464452 + 20 +10143.18943 + 30 +0.0 + 11 +15043.464452 + 21 +10143.18943 + 31 +0.0 + 0 +LINE + 5 +E3A + 8 +0 + 62 + 0 + 10 +15034.538527 + 20 +10296.659856 + 30 +0.0 + 11 +15034.538527 + 21 +10296.659856 + 31 +0.0 + 0 +LINE + 5 +E3B + 8 +0 + 62 + 0 + 10 +15008.763037 + 20 +9448.530801 + 30 +0.0 + 11 +15008.763037 + 21 +9448.530801 + 31 +0.0 + 0 +LINE + 5 +E3C + 8 +0 + 62 + 0 + 10 +15016.13581 + 20 +9441.774899 + 30 +0.0 + 11 +15016.13581 + 21 +9441.774899 + 31 +0.0 + 0 +LINE + 5 +E3D + 8 +0 + 62 + 0 + 10 +15050.9353 + 20 +9409.887041 + 30 +0.0 + 11 +15050.9353 + 21 +9409.887041 + 31 +0.0 + 0 +LINE + 5 +E3E + 8 +0 + 62 + 0 + 10 +15012.675476 + 20 +9299.654387 + 30 +0.0 + 11 +15012.675476 + 21 +9299.654387 + 31 +0.0 + 0 +LINE + 5 +E3F + 8 +0 + 62 + 0 + 10 +15052.488452 + 20 +9263.172516 + 30 +0.0 + 11 +15052.488452 + 21 +9263.172516 + 31 +0.0 + 0 +LINE + 5 +E40 + 8 +0 + 62 + 0 + 10 +15059.861226 + 20 +9256.416614 + 30 +0.0 + 11 +15059.861226 + 21 +9256.416614 + 31 +0.0 + 0 +LINE + 5 +E41 + 8 +0 + 62 + 0 + 10 +15014.228628 + 20 +9152.939863 + 30 +0.0 + 11 +15014.228628 + 21 +9152.939863 + 31 +0.0 + 0 +LINE + 5 +E42 + 8 +0 + 62 + 0 + 10 +15021.601401 + 20 +9146.18396 + 30 +0.0 + 11 +15021.601401 + 21 +9146.18396 + 31 +0.0 + 0 +LINE + 5 +E43 + 8 +0 + 62 + 0 + 10 +15056.400892 + 20 +9114.296103 + 30 +0.0 + 11 +15056.400892 + 21 +9114.296103 + 31 +0.0 + 0 +ENDBLK + 5 +E44 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X74 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X74 + 1 + + 0 +LINE + 5 +E46 + 8 +0 + 62 + 0 + 10 +15599.492173 + 20 +9757.731838 + 30 +0.0 + 11 +15599.492173 + 21 +9757.731838 + 31 +0.0 + 0 +LINE + 5 +E47 + 8 +0 + 62 + 0 + 10 +15596.972439 + 20 +9834.804789 + 30 +0.0 + 11 +15596.972439 + 21 +9834.804789 + 31 +0.0 + 0 +LINE + 5 +E48 + 8 +0 + 62 + 0 + 10 +15594.452705 + 20 +9911.877739 + 30 +0.0 + 11 +15594.452705 + 21 +9911.877739 + 31 +0.0 + 0 +LINE + 5 +E49 + 8 +0 + 62 + 0 + 10 +15591.93297 + 20 +9988.95069 + 30 +0.0 + 11 +15591.93297 + 21 +9988.95069 + 31 +0.0 + 0 +LINE + 5 +E4A + 8 +0 + 62 + 0 + 10 +15589.413236 + 20 +10066.023641 + 30 +0.0 + 11 +15589.413236 + 21 +10066.023641 + 31 +0.0 + 0 +LINE + 5 +E4B + 8 +0 + 62 + 0 + 10 +15586.893502 + 20 +10143.096592 + 30 +0.0 + 11 +15586.893502 + 21 +10143.096592 + 31 +0.0 + 0 +LINE + 5 +E4C + 8 +0 + 62 + 0 + 10 +15584.373767 + 20 +10220.169542 + 30 +0.0 + 11 +15584.373767 + 21 +10220.169542 + 31 +0.0 + 0 +LINE + 5 +E4D + 8 +0 + 62 + 0 + 10 +15581.854033 + 20 +10297.242493 + 30 +0.0 + 11 +15581.854033 + 21 +10297.242493 + 31 +0.0 + 0 +LINE + 5 +E4E + 8 +0 + 62 + 0 + 10 +15579.334299 + 20 +10374.315444 + 30 +0.0 + 11 +15579.334299 + 21 +10374.315444 + 31 +0.0 + 0 +LINE + 5 +E4F + 8 +0 + 62 + 0 + 10 +15602.011908 + 20 +9680.658887 + 30 +0.0 + 11 +15602.011908 + 21 +9680.658887 + 31 +0.0 + 0 +LINE + 5 +E50 + 8 +0 + 62 + 0 + 10 +15604.531642 + 20 +9603.585936 + 30 +0.0 + 11 +15604.531642 + 21 +9603.585936 + 31 +0.0 + 0 +LINE + 5 +E51 + 8 +0 + 62 + 0 + 10 +15607.051376 + 20 +9526.512986 + 30 +0.0 + 11 +15607.051376 + 21 +9526.512986 + 31 +0.0 + 0 +LINE + 5 +E52 + 8 +0 + 62 + 0 + 10 +15609.571111 + 20 +9449.440035 + 30 +0.0 + 11 +15609.571111 + 21 +9449.440035 + 31 +0.0 + 0 +LINE + 5 +E53 + 8 +0 + 62 + 0 + 10 +15612.090845 + 20 +9372.367084 + 30 +0.0 + 11 +15612.090845 + 21 +9372.367084 + 31 +0.0 + 0 +LINE + 5 +E54 + 8 +0 + 62 + 0 + 10 +15563.042612 + 20 +9255.72464 + 30 +0.0 + 11 +15563.042612 + 21 +9255.72464 + 31 +0.0 + 0 +LINE + 5 +E55 + 8 +0 + 62 + 0 + 10 +15614.610579 + 20 +9295.294133 + 30 +0.0 + 11 +15614.610579 + 21 +9295.294133 + 31 +0.0 + 0 +LINE + 5 +E56 + 8 +0 + 62 + 0 + 10 +15565.562346 + 20 +9178.65169 + 30 +0.0 + 11 +15565.562346 + 21 +9178.65169 + 31 +0.0 + 0 +LINE + 5 +E57 + 8 +0 + 62 + 0 + 10 +15617.130314 + 20 +9218.221183 + 30 +0.0 + 11 +15617.130314 + 21 +9218.221183 + 31 +0.0 + 0 +LINE + 5 +E58 + 8 +0 + 62 + 0 + 10 +15568.082081 + 20 +9101.578739 + 30 +0.0 + 11 +15568.082081 + 21 +9101.578739 + 31 +0.0 + 0 +LINE + 5 +E59 + 8 +0 + 62 + 0 + 10 +15619.650048 + 20 +9141.148232 + 30 +0.0 + 11 +15619.650048 + 21 +9141.148232 + 31 +0.0 + 0 +LINE + 5 +E5A + 8 +0 + 62 + 0 + 10 +15622.169782 + 20 +9064.075281 + 30 +0.0 + 11 +15622.169782 + 21 +9064.075281 + 31 +0.0 + 0 +LINE + 5 +E5B + 8 +0 + 62 + 0 + 10 +15574.946594 + 20 +9714.366223 + 30 +0.0 + 11 +15574.946594 + 21 +9714.366223 + 31 +0.0 + 0 +LINE + 5 +E5C + 8 +0 + 62 + 0 + 10 +15607.465986 + 20 +9718.647482 + 30 +0.0 + 11 +15607.465986 + 21 +9718.647482 + 31 +0.0 + 0 +LINE + 5 +E5D + 8 +0 + 62 + 0 + 10 +15570.586142 + 20 +9817.35818 + 30 +0.0 + 11 +15570.586142 + 21 +9817.35818 + 31 +0.0 + 0 +LINE + 5 +E5E + 8 +0 + 62 + 0 + 10 +15624.91732 + 20 +9824.511015 + 30 +0.0 + 11 +15624.91732 + 21 +9824.511015 + 31 +0.0 + 0 +LINE + 5 +E5F + 8 +0 + 62 + 0 + 10 +15588.037477 + 20 +9923.221713 + 30 +0.0 + 11 +15588.037477 + 21 +9923.221713 + 31 +0.0 + 0 +LINE + 5 +E60 + 8 +0 + 62 + 0 + 10 +15608.857819 + 20 +9925.962763 + 30 +0.0 + 11 +15608.857819 + 21 +9925.962763 + 31 +0.0 + 0 +LINE + 5 +E61 + 8 +0 + 62 + 0 + 10 +15571.977975 + 20 +10024.673462 + 30 +0.0 + 11 +15571.977975 + 21 +10024.673462 + 31 +0.0 + 0 +LINE + 5 +E62 + 8 +0 + 62 + 0 + 10 +15604.497367 + 20 +10028.954721 + 30 +0.0 + 11 +15604.497367 + 21 +10028.954721 + 31 +0.0 + 0 +LINE + 5 +E63 + 8 +0 + 62 + 0 + 10 +15567.617523 + 20 +10127.665419 + 30 +0.0 + 11 +15567.617523 + 21 +10127.665419 + 31 +0.0 + 0 +LINE + 5 +E64 + 8 +0 + 62 + 0 + 10 +15621.948701 + 20 +10134.818254 + 30 +0.0 + 11 +15621.948701 + 21 +10134.818254 + 31 +0.0 + 0 +LINE + 5 +E65 + 8 +0 + 62 + 0 + 10 +15585.068857 + 20 +10233.528952 + 30 +0.0 + 11 +15585.068857 + 21 +10233.528952 + 31 +0.0 + 0 +LINE + 5 +E66 + 8 +0 + 62 + 0 + 10 +15605.8892 + 20 +10236.270002 + 30 +0.0 + 11 +15605.8892 + 21 +10236.270002 + 31 +0.0 + 0 +LINE + 5 +E67 + 8 +0 + 62 + 0 + 10 +15569.009356 + 20 +10334.9807 + 30 +0.0 + 11 +15569.009356 + 21 +10334.9807 + 31 +0.0 + 0 +LINE + 5 +E68 + 8 +0 + 62 + 0 + 10 +15601.528747 + 20 +10339.26196 + 30 +0.0 + 11 +15601.528747 + 21 +10339.26196 + 31 +0.0 + 0 +LINE + 5 +E69 + 8 +0 + 62 + 0 + 10 +15591.006096 + 20 +9612.914475 + 30 +0.0 + 11 +15591.006096 + 21 +9612.914475 + 31 +0.0 + 0 +LINE + 5 +E6A + 8 +0 + 62 + 0 + 10 +15611.826438 + 20 +9615.655525 + 30 +0.0 + 11 +15611.826438 + 21 +9615.655525 + 31 +0.0 + 0 +LINE + 5 +E6B + 8 +0 + 62 + 0 + 10 +15573.554761 + 20 +9507.050941 + 30 +0.0 + 11 +15573.554761 + 21 +9507.050941 + 31 +0.0 + 0 +LINE + 5 +E6C + 8 +0 + 62 + 0 + 10 +15577.915214 + 20 +9404.058984 + 30 +0.0 + 11 +15577.915214 + 21 +9404.058984 + 31 +0.0 + 0 +LINE + 5 +E6D + 8 +0 + 62 + 0 + 10 +15610.434605 + 20 +9408.340243 + 30 +0.0 + 11 +15610.434605 + 21 +9408.340243 + 31 +0.0 + 0 +LINE + 5 +E6E + 8 +0 + 62 + 0 + 10 +15593.974715 + 20 +9302.607236 + 30 +0.0 + 11 +15593.974715 + 21 +9302.607236 + 31 +0.0 + 0 +LINE + 5 +E6F + 8 +0 + 62 + 0 + 10 +15614.795057 + 20 +9305.348286 + 30 +0.0 + 11 +15614.795057 + 21 +9305.348286 + 31 +0.0 + 0 +LINE + 5 +E70 + 8 +0 + 62 + 0 + 10 +15576.523381 + 20 +9196.743702 + 30 +0.0 + 11 +15576.523381 + 21 +9196.743702 + 31 +0.0 + 0 +LINE + 5 +E71 + 8 +0 + 62 + 0 + 10 +15580.883833 + 20 +9093.751745 + 30 +0.0 + 11 +15580.883833 + 21 +9093.751745 + 31 +0.0 + 0 +LINE + 5 +E72 + 8 +0 + 62 + 0 + 10 +15613.403224 + 20 +9098.033004 + 30 +0.0 + 11 +15613.403224 + 21 +9098.033004 + 31 +0.0 + 0 +LINE + 5 +E73 + 8 +0 + 62 + 0 + 10 +15579.645142 + 20 +9700.439419 + 30 +0.0 + 11 +15579.645142 + 21 +9700.439419 + 31 +0.0 + 0 +LINE + 5 +E74 + 8 +0 + 62 + 0 + 10 +15594.313669 + 20 +9850.261434 + 30 +0.0 + 11 +15594.313669 + 21 +9850.261434 + 31 +0.0 + 0 +LINE + 5 +E75 + 8 +0 + 62 + 0 + 10 +15611.181498 + 20 +9839.515442 + 30 +0.0 + 11 +15611.181498 + 21 +9839.515442 + 31 +0.0 + 0 +LINE + 5 +E76 + 8 +0 + 62 + 0 + 10 +15578.876363 + 20 +9939.679531 + 30 +0.0 + 11 +15578.876363 + 21 +9939.679531 + 31 +0.0 + 0 +LINE + 5 +E77 + 8 +0 + 62 + 0 + 10 +15607.295413 + 20 +10001.158049 + 30 +0.0 + 11 +15607.295413 + 21 +10001.158049 + 31 +0.0 + 0 +LINE + 5 +E78 + 8 +0 + 62 + 0 + 10 +15574.990278 + 20 +10101.322138 + 30 +0.0 + 11 +15574.990278 + 21 +10101.322138 + 31 +0.0 + 0 +LINE + 5 +E79 + 8 +0 + 62 + 0 + 10 +15621.96394 + 20 +10150.980064 + 30 +0.0 + 11 +15621.96394 + 21 +10150.980064 + 31 +0.0 + 0 +LINE + 5 +E7A + 8 +0 + 62 + 0 + 10 +15589.658805 + 20 +10251.144153 + 30 +0.0 + 11 +15589.658805 + 21 +10251.144153 + 31 +0.0 + 0 +LINE + 5 +E7B + 8 +0 + 62 + 0 + 10 +15606.526634 + 20 +10240.398161 + 30 +0.0 + 11 +15606.526634 + 21 +10240.398161 + 31 +0.0 + 0 +LINE + 5 +E7C + 8 +0 + 62 + 0 + 10 +15574.2215 + 20 +10340.562251 + 30 +0.0 + 11 +15574.2215 + 21 +10340.562251 + 31 +0.0 + 0 +LINE + 5 +E7D + 8 +0 + 62 + 0 + 10 +15611.950276 + 20 +9600.275329 + 30 +0.0 + 11 +15611.950276 + 21 +9600.275329 + 31 +0.0 + 0 +LINE + 5 +E7E + 8 +0 + 62 + 0 + 10 +15566.663398 + 20 +9549.542804 + 30 +0.0 + 11 +15566.663398 + 21 +9549.542804 + 31 +0.0 + 0 +LINE + 5 +E7F + 8 +0 + 62 + 0 + 10 +15583.531227 + 20 +9538.796812 + 30 +0.0 + 11 +15583.531227 + 21 +9538.796812 + 31 +0.0 + 0 +LINE + 5 +E80 + 8 +0 + 62 + 0 + 10 +15598.968532 + 20 +9449.378715 + 30 +0.0 + 11 +15598.968532 + 21 +9449.378715 + 31 +0.0 + 0 +LINE + 5 +E81 + 8 +0 + 62 + 0 + 10 +15615.836361 + 20 +9438.632723 + 30 +0.0 + 11 +15615.836361 + 21 +9438.632723 + 31 +0.0 + 0 +LINE + 5 +E82 + 8 +0 + 62 + 0 + 10 +15584.300005 + 20 +9299.556699 + 30 +0.0 + 11 +15584.300005 + 21 +9299.556699 + 31 +0.0 + 0 +LINE + 5 +E83 + 8 +0 + 62 + 0 + 10 +15616.60514 + 20 +9199.39261 + 30 +0.0 + 11 +15616.60514 + 21 +9199.39261 + 31 +0.0 + 0 +LINE + 5 +E84 + 8 +0 + 62 + 0 + 10 +15571.318261 + 20 +9148.660085 + 30 +0.0 + 11 +15571.318261 + 21 +9148.660085 + 31 +0.0 + 0 +LINE + 5 +E85 + 8 +0 + 62 + 0 + 10 +15588.18609 + 20 +9137.914093 + 30 +0.0 + 11 +15588.18609 + 21 +9137.914093 + 31 +0.0 + 0 +LINE + 5 +E86 + 8 +0 + 62 + 0 + 10 +15603.623395 + 20 +9048.495996 + 30 +0.0 + 11 +15603.623395 + 21 +9048.495996 + 31 +0.0 + 0 +LINE + 5 +E87 + 8 +0 + 62 + 0 + 10 +15620.491224 + 20 +9037.750003 + 30 +0.0 + 11 +15620.491224 + 21 +9037.750003 + 31 +0.0 + 0 +LINE + 5 +E88 + 8 +0 + 62 + 0 + 10 +15570.175381 + 20 +9660.547785 + 30 +0.0 + 11 +15570.175381 + 21 +9660.547785 + 31 +0.0 + 0 +LINE + 5 +E89 + 8 +0 + 62 + 0 + 10 +15609.988358 + 20 +9624.065914 + 30 +0.0 + 11 +15609.988358 + 21 +9624.065914 + 31 +0.0 + 0 +LINE + 5 +E8A + 8 +0 + 62 + 0 + 10 +15617.361131 + 20 +9617.310012 + 30 +0.0 + 11 +15617.361131 + 21 +9617.310012 + 31 +0.0 + 0 +LINE + 5 +E8B + 8 +0 + 62 + 0 + 10 +15566.262942 + 20 +9809.424199 + 30 +0.0 + 11 +15566.262942 + 21 +9809.424199 + 31 +0.0 + 0 +LINE + 5 +E8C + 8 +0 + 62 + 0 + 10 +15573.635716 + 20 +9802.668297 + 30 +0.0 + 11 +15573.635716 + 21 +9802.668297 + 31 +0.0 + 0 +LINE + 5 +E8D + 8 +0 + 62 + 0 + 10 +15608.435206 + 20 +9770.780439 + 30 +0.0 + 11 +15608.435206 + 21 +9770.780439 + 31 +0.0 + 0 +LINE + 5 +E8E + 8 +0 + 62 + 0 + 10 +15564.70979 + 20 +9956.138724 + 30 +0.0 + 11 +15564.70979 + 21 +9956.138724 + 31 +0.0 + 0 +LINE + 5 +E8F + 8 +0 + 62 + 0 + 10 +15604.522766 + 20 +9919.656852 + 30 +0.0 + 11 +15604.522766 + 21 +9919.656852 + 31 +0.0 + 0 +LINE + 5 +E90 + 8 +0 + 62 + 0 + 10 +15611.89554 + 20 +9912.90095 + 30 +0.0 + 11 +15611.89554 + 21 +9912.90095 + 31 +0.0 + 0 +LINE + 5 +E91 + 8 +0 + 62 + 0 + 10 +15568.170124 + 20 +10098.259235 + 30 +0.0 + 11 +15568.170124 + 21 +10098.259235 + 31 +0.0 + 0 +LINE + 5 +E92 + 8 +0 + 62 + 0 + 10 +15602.969615 + 20 +10066.371377 + 30 +0.0 + 11 +15602.969615 + 21 +10066.371377 + 31 +0.0 + 0 +LINE + 5 +E93 + 8 +0 + 62 + 0 + 10 +15599.057175 + 20 +10215.247791 + 30 +0.0 + 11 +15599.057175 + 21 +10215.247791 + 31 +0.0 + 0 +LINE + 5 +E94 + 8 +0 + 62 + 0 + 10 +15606.429949 + 20 +10208.491889 + 30 +0.0 + 11 +15606.429949 + 21 +10208.491889 + 31 +0.0 + 0 +LINE + 5 +E95 + 8 +0 + 62 + 0 + 10 +15562.704533 + 20 +10393.850174 + 30 +0.0 + 11 +15562.704533 + 21 +10393.850174 + 31 +0.0 + 0 +LINE + 5 +E96 + 8 +0 + 62 + 0 + 10 +15597.504023 + 20 +10361.962316 + 30 +0.0 + 11 +15597.504023 + 21 +10361.962316 + 31 +0.0 + 0 +LINE + 5 +E97 + 8 +0 + 62 + 0 + 10 +15571.728533 + 20 +9513.83326 + 30 +0.0 + 11 +15571.728533 + 21 +9513.83326 + 31 +0.0 + 0 +LINE + 5 +E98 + 8 +0 + 62 + 0 + 10 +15579.101307 + 20 +9507.077358 + 30 +0.0 + 11 +15579.101307 + 21 +9507.077358 + 31 +0.0 + 0 +LINE + 5 +E99 + 8 +0 + 62 + 0 + 10 +15613.900797 + 20 +9475.1895 + 30 +0.0 + 11 +15613.900797 + 21 +9475.1895 + 31 +0.0 + 0 +LINE + 5 +E9A + 8 +0 + 62 + 0 + 10 +15575.640973 + 20 +9364.956847 + 30 +0.0 + 11 +15575.640973 + 21 +9364.956847 + 31 +0.0 + 0 +LINE + 5 +E9B + 8 +0 + 62 + 0 + 10 +15615.453949 + 20 +9328.474976 + 30 +0.0 + 11 +15615.453949 + 21 +9328.474976 + 31 +0.0 + 0 +LINE + 5 +E9C + 8 +0 + 62 + 0 + 10 +15622.826722 + 20 +9321.719073 + 30 +0.0 + 11 +15622.826722 + 21 +9321.719073 + 31 +0.0 + 0 +LINE + 5 +E9D + 8 +0 + 62 + 0 + 10 +15577.194125 + 20 +9218.242322 + 30 +0.0 + 11 +15577.194125 + 21 +9218.242322 + 31 +0.0 + 0 +LINE + 5 +E9E + 8 +0 + 62 + 0 + 10 +15584.566898 + 20 +9211.48642 + 30 +0.0 + 11 +15584.566898 + 21 +9211.48642 + 31 +0.0 + 0 +LINE + 5 +E9F + 8 +0 + 62 + 0 + 10 +15619.366388 + 20 +9179.598562 + 30 +0.0 + 11 +15619.366388 + 21 +9179.598562 + 31 +0.0 + 0 +LINE + 5 +EA0 + 8 +0 + 62 + 0 + 10 +15581.106564 + 20 +9069.365908 + 30 +0.0 + 11 +15581.106564 + 21 +9069.365908 + 31 +0.0 + 0 +ENDBLK + 5 +EA1 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X77 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X77 + 1 + + 0 +LINE + 5 +EA3 + 8 +0 + 62 + 0 + 10 +15093.75 + 20 +11637.216313 + 30 +0.0 + 11 +15156.25 + 21 +11637.216313 + 31 +0.0 + 0 +LINE + 5 +EA4 + 8 +0 + 62 + 0 + 10 +15281.25 + 20 +11637.216313 + 30 +0.0 + 11 +15343.75 + 21 +11637.216313 + 31 +0.0 + 0 +LINE + 5 +EA5 + 8 +0 + 62 + 0 + 10 +15187.5 + 20 +11691.3429 + 30 +0.0 + 11 +15250.0 + 21 +11691.3429 + 31 +0.0 + 0 +LINE + 5 +EA6 + 8 +0 + 62 + 0 + 10 +15375.0 + 20 +11691.3429 + 30 +0.0 + 11 +15437.5 + 21 +11691.3429 + 31 +0.0 + 0 +LINE + 5 +EA7 + 8 +0 + 62 + 0 + 10 +15093.75 + 20 +11745.469488 + 30 +0.0 + 11 +15156.25 + 21 +11745.469488 + 31 +0.0 + 0 +LINE + 5 +EA8 + 8 +0 + 62 + 0 + 10 +15281.25 + 20 +11745.469488 + 30 +0.0 + 11 +15343.75 + 21 +11745.469488 + 31 +0.0 + 0 +LINE + 5 +EA9 + 8 +0 + 62 + 0 + 10 +15187.5 + 20 +11799.596075 + 30 +0.0 + 11 +15250.0 + 21 +11799.596075 + 31 +0.0 + 0 +LINE + 5 +EAA + 8 +0 + 62 + 0 + 10 +15375.0 + 20 +11799.596075 + 30 +0.0 + 11 +15437.5 + 21 +11799.596075 + 31 +0.0 + 0 +LINE + 5 +EAB + 8 +0 + 62 + 0 + 10 +15093.75 + 20 +11853.722663 + 30 +0.0 + 11 +15156.25 + 21 +11853.722663 + 31 +0.0 + 0 +LINE + 5 +EAC + 8 +0 + 62 + 0 + 10 +15281.25 + 20 +11853.722663 + 30 +0.0 + 11 +15343.75 + 21 +11853.722663 + 31 +0.0 + 0 +LINE + 5 +EAD + 8 +0 + 62 + 0 + 10 +15187.5 + 20 +11907.84925 + 30 +0.0 + 11 +15250.0 + 21 +11907.84925 + 31 +0.0 + 0 +LINE + 5 +EAE + 8 +0 + 62 + 0 + 10 +15375.0 + 20 +11907.84925 + 30 +0.0 + 11 +15437.5 + 21 +11907.84925 + 31 +0.0 + 0 +LINE + 5 +EAF + 8 +0 + 62 + 0 + 10 +15093.75 + 20 +11961.975838 + 30 +0.0 + 11 +15156.25 + 21 +11961.975838 + 31 +0.0 + 0 +LINE + 5 +EB0 + 8 +0 + 62 + 0 + 10 +15281.25 + 20 +11961.975838 + 30 +0.0 + 11 +15343.75 + 21 +11961.975838 + 31 +0.0 + 0 +LINE + 5 +EB1 + 8 +0 + 62 + 0 + 10 +15187.5 + 20 +12016.102425 + 30 +0.0 + 11 +15250.0 + 21 +12016.102425 + 31 +0.0 + 0 +LINE + 5 +EB2 + 8 +0 + 62 + 0 + 10 +15375.0 + 20 +12016.102425 + 30 +0.0 + 11 +15437.5 + 21 +12016.102425 + 31 +0.0 + 0 +LINE + 5 +EB3 + 8 +0 + 62 + 0 + 10 +15093.75 + 20 +12070.229013 + 30 +0.0 + 11 +15156.25 + 21 +12070.229013 + 31 +0.0 + 0 +LINE + 5 +EB4 + 8 +0 + 62 + 0 + 10 +15281.25 + 20 +12070.229013 + 30 +0.0 + 11 +15343.75 + 21 +12070.229013 + 31 +0.0 + 0 +LINE + 5 +EB5 + 8 +0 + 62 + 0 + 10 +15187.5 + 20 +12124.3556 + 30 +0.0 + 11 +15250.0 + 21 +12124.3556 + 31 +0.0 + 0 +LINE + 5 +EB6 + 8 +0 + 62 + 0 + 10 +15375.0 + 20 +12124.3556 + 30 +0.0 + 11 +15437.5 + 21 +12124.3556 + 31 +0.0 + 0 +LINE + 5 +EB7 + 8 +0 + 62 + 0 + 10 +15093.75 + 20 +12178.482188 + 30 +0.0 + 11 +15156.25 + 21 +12178.482188 + 31 +0.0 + 0 +LINE + 5 +EB8 + 8 +0 + 62 + 0 + 10 +15281.25 + 20 +12178.482188 + 30 +0.0 + 11 +15343.75 + 21 +12178.482188 + 31 +0.0 + 0 +LINE + 5 +EB9 + 8 +0 + 62 + 0 + 10 +15187.5 + 20 +12232.608775 + 30 +0.0 + 11 +15250.0 + 21 +12232.608775 + 31 +0.0 + 0 +LINE + 5 +EBA + 8 +0 + 62 + 0 + 10 +15375.0 + 20 +12232.608775 + 30 +0.0 + 11 +15437.5 + 21 +12232.608775 + 31 +0.0 + 0 +LINE + 5 +EBB + 8 +0 + 62 + 0 + 10 +15093.75 + 20 +12286.735363 + 30 +0.0 + 11 +15156.25 + 21 +12286.735363 + 31 +0.0 + 0 +LINE + 5 +EBC + 8 +0 + 62 + 0 + 10 +15281.25 + 20 +12286.735363 + 30 +0.0 + 11 +15343.75 + 21 +12286.735363 + 31 +0.0 + 0 +LINE + 5 +EBD + 8 +0 + 62 + 0 + 10 +15187.5 + 20 +12340.86195 + 30 +0.0 + 11 +15250.0 + 21 +12340.86195 + 31 +0.0 + 0 +LINE + 5 +EBE + 8 +0 + 62 + 0 + 10 +15375.0 + 20 +12340.86195 + 30 +0.0 + 11 +15437.5 + 21 +12340.86195 + 31 +0.0 + 0 +LINE + 5 +EBF + 8 +0 + 62 + 0 + 10 +15187.5 + 20 +11583.089725 + 30 +0.0 + 11 +15250.0 + 21 +11583.089725 + 31 +0.0 + 0 +LINE + 5 +EC0 + 8 +0 + 62 + 0 + 10 +15375.0 + 20 +11583.089725 + 30 +0.0 + 11 +15437.5 + 21 +11583.089725 + 31 +0.0 + 0 +LINE + 5 +EC1 + 8 +0 + 62 + 0 + 10 +15093.75 + 20 +11528.963138 + 30 +0.0 + 11 +15156.25 + 21 +11528.963138 + 31 +0.0 + 0 +LINE + 5 +EC2 + 8 +0 + 62 + 0 + 10 +15281.25 + 20 +11528.963138 + 30 +0.0 + 11 +15343.75 + 21 +11528.963138 + 31 +0.0 + 0 +LINE + 5 +EC3 + 8 +0 + 62 + 0 + 10 +15187.5 + 20 +11474.83655 + 30 +0.0 + 11 +15250.0 + 21 +11474.83655 + 31 +0.0 + 0 +LINE + 5 +EC4 + 8 +0 + 62 + 0 + 10 +15375.0 + 20 +11474.83655 + 30 +0.0 + 11 +15437.5 + 21 +11474.83655 + 31 +0.0 + 0 +LINE + 5 +EC5 + 8 +0 + 62 + 0 + 10 +15093.75 + 20 +11420.709963 + 30 +0.0 + 11 +15156.25 + 21 +11420.709963 + 31 +0.0 + 0 +LINE + 5 +EC6 + 8 +0 + 62 + 0 + 10 +15281.25 + 20 +11420.709963 + 30 +0.0 + 11 +15343.75 + 21 +11420.709963 + 31 +0.0 + 0 +LINE + 5 +EC7 + 8 +0 + 62 + 0 + 10 +15187.5 + 20 +11366.583375 + 30 +0.0 + 11 +15250.0 + 21 +11366.583375 + 31 +0.0 + 0 +LINE + 5 +EC8 + 8 +0 + 62 + 0 + 10 +15375.0 + 20 +11366.583375 + 30 +0.0 + 11 +15437.5 + 21 +11366.583375 + 31 +0.0 + 0 +LINE + 5 +EC9 + 8 +0 + 62 + 0 + 10 +15093.75 + 20 +11312.456788 + 30 +0.0 + 11 +15156.25 + 21 +11312.456788 + 31 +0.0 + 0 +LINE + 5 +ECA + 8 +0 + 62 + 0 + 10 +15281.25 + 20 +11312.456788 + 30 +0.0 + 11 +15343.75 + 21 +11312.456788 + 31 +0.0 + 0 +LINE + 5 +ECB + 8 +0 + 62 + 0 + 10 +15187.5 + 20 +11258.3302 + 30 +0.0 + 11 +15250.0 + 21 +11258.3302 + 31 +0.0 + 0 +LINE + 5 +ECC + 8 +0 + 62 + 0 + 10 +15375.0 + 20 +11258.3302 + 30 +0.0 + 11 +15437.5 + 21 +11258.3302 + 31 +0.0 + 0 +LINE + 5 +ECD + 8 +0 + 62 + 0 + 10 +15093.75 + 20 +11204.203613 + 30 +0.0 + 11 +15156.25 + 21 +11204.203613 + 31 +0.0 + 0 +LINE + 5 +ECE + 8 +0 + 62 + 0 + 10 +15281.25 + 20 +11204.203613 + 30 +0.0 + 11 +15343.75 + 21 +11204.203613 + 31 +0.0 + 0 +LINE + 5 +ECF + 8 +0 + 62 + 0 + 10 +15187.5 + 20 +11150.077025 + 30 +0.0 + 11 +15250.0 + 21 +11150.077025 + 31 +0.0 + 0 +LINE + 5 +ED0 + 8 +0 + 62 + 0 + 10 +15375.0 + 20 +11150.077025 + 30 +0.0 + 11 +15437.5 + 21 +11150.077025 + 31 +0.0 + 0 +LINE + 5 +ED1 + 8 +0 + 62 + 0 + 10 +15093.75 + 20 +11095.950438 + 30 +0.0 + 11 +15156.25 + 21 +11095.950438 + 31 +0.0 + 0 +LINE + 5 +ED2 + 8 +0 + 62 + 0 + 10 +15281.25 + 20 +11095.950438 + 30 +0.0 + 11 +15343.75 + 21 +11095.950438 + 31 +0.0 + 0 +LINE + 5 +ED3 + 8 +0 + 62 + 0 + 10 +15187.5 + 20 +11041.82385 + 30 +0.0 + 11 +15250.0 + 21 +11041.82385 + 31 +0.0 + 0 +LINE + 5 +ED4 + 8 +0 + 62 + 0 + 10 +15375.0 + 20 +11041.82385 + 30 +0.0 + 11 +15437.5 + 21 +11041.82385 + 31 +0.0 + 0 +LINE + 5 +ED5 + 8 +0 + 62 + 0 + 10 +15465.0 + 20 +11318.951861 + 30 +0.0 + 11 +15437.499928 + 21 +11366.583383 + 31 +0.0 + 0 +LINE + 5 +ED6 + 8 +0 + 62 + 0 + 10 +15374.999928 + 20 +11474.836559 + 30 +0.0 + 11 +15343.749928 + 21 +11528.963146 + 31 +0.0 + 0 +LINE + 5 +ED7 + 8 +0 + 62 + 0 + 10 +15281.249928 + 20 +11637.216322 + 30 +0.0 + 11 +15249.999928 + 21 +11691.342909 + 31 +0.0 + 0 +LINE + 5 +ED8 + 8 +0 + 62 + 0 + 10 +15187.499928 + 20 +11799.596085 + 30 +0.0 + 11 +15156.249928 + 21 +11853.722673 + 31 +0.0 + 0 +LINE + 5 +ED9 + 8 +0 + 62 + 0 + 10 +15093.749928 + 20 +11961.975848 + 30 +0.0 + 11 +15090.0 + 21 +11968.470914 + 31 +0.0 + 0 +LINE + 5 +EDA + 8 +0 + 62 + 0 + 10 +15465.0 + 20 +11210.698686 + 30 +0.0 + 11 +15437.499928 + 21 +11258.330208 + 31 +0.0 + 0 +LINE + 5 +EDB + 8 +0 + 62 + 0 + 10 +15374.999928 + 20 +11366.583383 + 30 +0.0 + 11 +15343.749928 + 21 +11420.709971 + 31 +0.0 + 0 +LINE + 5 +EDC + 8 +0 + 62 + 0 + 10 +15281.249928 + 20 +11528.963146 + 30 +0.0 + 11 +15249.999928 + 21 +11583.089734 + 31 +0.0 + 0 +LINE + 5 +EDD + 8 +0 + 62 + 0 + 10 +15187.499928 + 20 +11691.34291 + 30 +0.0 + 11 +15156.249928 + 21 +11745.469497 + 31 +0.0 + 0 +LINE + 5 +EDE + 8 +0 + 62 + 0 + 10 +15093.749928 + 20 +11853.722673 + 30 +0.0 + 11 +15090.0 + 21 +11860.217739 + 31 +0.0 + 0 +LINE + 5 +EDF + 8 +0 + 62 + 0 + 10 +15465.0 + 20 +11102.445511 + 30 +0.0 + 11 +15437.499928 + 21 +11150.077032 + 31 +0.0 + 0 +LINE + 5 +EE0 + 8 +0 + 62 + 0 + 10 +15374.999928 + 20 +11258.330208 + 30 +0.0 + 11 +15343.749928 + 21 +11312.456796 + 31 +0.0 + 0 +LINE + 5 +EE1 + 8 +0 + 62 + 0 + 10 +15281.249928 + 20 +11420.709971 + 30 +0.0 + 11 +15249.999928 + 21 +11474.836559 + 31 +0.0 + 0 +LINE + 5 +EE2 + 8 +0 + 62 + 0 + 10 +15187.499928 + 20 +11583.089734 + 30 +0.0 + 11 +15156.249928 + 21 +11637.216322 + 31 +0.0 + 0 +LINE + 5 +EE3 + 8 +0 + 62 + 0 + 10 +15093.749928 + 20 +11745.469497 + 30 +0.0 + 11 +15090.0 + 21 +11751.964564 + 31 +0.0 + 0 +LINE + 5 +EE4 + 8 +0 + 62 + 0 + 10 +15461.646944 + 20 +11000.0 + 30 +0.0 + 11 +15437.499929 + 21 +11041.823857 + 31 +0.0 + 0 +LINE + 5 +EE5 + 8 +0 + 62 + 0 + 10 +15374.999929 + 20 +11150.077032 + 30 +0.0 + 11 +15343.749929 + 21 +11204.20362 + 31 +0.0 + 0 +LINE + 5 +EE6 + 8 +0 + 62 + 0 + 10 +15281.249929 + 20 +11312.456796 + 30 +0.0 + 11 +15249.999929 + 21 +11366.583383 + 31 +0.0 + 0 +LINE + 5 +EE7 + 8 +0 + 62 + 0 + 10 +15187.499929 + 20 +11474.836559 + 30 +0.0 + 11 +15156.249929 + 21 +11528.963147 + 31 +0.0 + 0 +LINE + 5 +EE8 + 8 +0 + 62 + 0 + 10 +15093.749929 + 20 +11637.216322 + 30 +0.0 + 11 +15090.0 + 21 +11643.711389 + 31 +0.0 + 0 +LINE + 5 +EE9 + 8 +0 + 62 + 0 + 10 +15374.999929 + 20 +11041.823857 + 30 +0.0 + 11 +15343.749929 + 21 +11095.950445 + 31 +0.0 + 0 +LINE + 5 +EEA + 8 +0 + 62 + 0 + 10 +15281.249929 + 20 +11204.20362 + 30 +0.0 + 11 +15249.999929 + 21 +11258.330208 + 31 +0.0 + 0 +LINE + 5 +EEB + 8 +0 + 62 + 0 + 10 +15187.499929 + 20 +11366.583384 + 30 +0.0 + 11 +15156.249929 + 21 +11420.709971 + 31 +0.0 + 0 +LINE + 5 +EEC + 8 +0 + 62 + 0 + 10 +15093.749929 + 20 +11528.963147 + 30 +0.0 + 11 +15090.0 + 21 +11535.458214 + 31 +0.0 + 0 +LINE + 5 +EED + 8 +0 + 62 + 0 + 10 +15281.249929 + 20 +11095.950445 + 30 +0.0 + 11 +15249.999929 + 21 +11150.077033 + 31 +0.0 + 0 +LINE + 5 +EEE + 8 +0 + 62 + 0 + 10 +15187.499929 + 20 +11258.330208 + 30 +0.0 + 11 +15156.249929 + 21 +11312.456796 + 31 +0.0 + 0 +LINE + 5 +EEF + 8 +0 + 62 + 0 + 10 +15093.749929 + 20 +11420.709971 + 30 +0.0 + 11 +15090.0 + 21 +11427.205039 + 31 +0.0 + 0 +LINE + 5 +EF0 + 8 +0 + 62 + 0 + 10 +15274.146944 + 20 +11000.0 + 30 +0.0 + 11 +15249.999929 + 21 +11041.823857 + 31 +0.0 + 0 +LINE + 5 +EF1 + 8 +0 + 62 + 0 + 10 +15187.499929 + 20 +11150.077033 + 30 +0.0 + 11 +15156.249929 + 21 +11204.203621 + 31 +0.0 + 0 +LINE + 5 +EF2 + 8 +0 + 62 + 0 + 10 +15093.749929 + 20 +11312.456796 + 30 +0.0 + 11 +15090.0 + 21 +11318.951864 + 31 +0.0 + 0 +LINE + 5 +EF3 + 8 +0 + 62 + 0 + 10 +15187.499929 + 20 +11041.823857 + 30 +0.0 + 11 +15156.249929 + 21 +11095.950445 + 31 +0.0 + 0 +LINE + 5 +EF4 + 8 +0 + 62 + 0 + 10 +15093.749929 + 20 +11204.203621 + 30 +0.0 + 11 +15090.0 + 21 +11210.698689 + 31 +0.0 + 0 +LINE + 5 +EF5 + 8 +0 + 62 + 0 + 10 +15093.74993 + 20 +11095.950445 + 30 +0.0 + 11 +15090.0 + 21 +11102.445514 + 31 +0.0 + 0 +LINE + 5 +EF6 + 8 +0 + 62 + 0 + 10 +15465.0 + 20 +11427.205036 + 30 +0.0 + 11 +15437.499928 + 21 +11474.836558 + 31 +0.0 + 0 +LINE + 5 +EF7 + 8 +0 + 62 + 0 + 10 +15374.999928 + 20 +11583.089734 + 30 +0.0 + 11 +15343.749928 + 21 +11637.216322 + 31 +0.0 + 0 +LINE + 5 +EF8 + 8 +0 + 62 + 0 + 10 +15281.249928 + 20 +11745.469497 + 30 +0.0 + 11 +15249.999928 + 21 +11799.596085 + 31 +0.0 + 0 +LINE + 5 +EF9 + 8 +0 + 62 + 0 + 10 +15187.499928 + 20 +11907.84926 + 30 +0.0 + 11 +15156.249928 + 21 +11961.975848 + 31 +0.0 + 0 +LINE + 5 +EFA + 8 +0 + 62 + 0 + 10 +15093.749928 + 20 +12070.229023 + 30 +0.0 + 11 +15090.0 + 21 +12076.724089 + 31 +0.0 + 0 +LINE + 5 +EFB + 8 +0 + 62 + 0 + 10 +15465.0 + 20 +11535.458211 + 30 +0.0 + 11 +15437.499927 + 21 +11583.089734 + 31 +0.0 + 0 +LINE + 5 +EFC + 8 +0 + 62 + 0 + 10 +15374.999927 + 20 +11691.342909 + 30 +0.0 + 11 +15343.749927 + 21 +11745.469497 + 31 +0.0 + 0 +LINE + 5 +EFD + 8 +0 + 62 + 0 + 10 +15281.249927 + 20 +11853.722672 + 30 +0.0 + 11 +15249.999927 + 21 +11907.84926 + 31 +0.0 + 0 +LINE + 5 +EFE + 8 +0 + 62 + 0 + 10 +15187.499927 + 20 +12016.102436 + 30 +0.0 + 11 +15156.249927 + 21 +12070.229023 + 31 +0.0 + 0 +LINE + 5 +EFF + 8 +0 + 62 + 0 + 10 +15093.749927 + 20 +12178.482199 + 30 +0.0 + 11 +15090.0 + 21 +12184.977264 + 31 +0.0 + 0 +LINE + 5 +F00 + 8 +0 + 62 + 0 + 10 +15465.0 + 20 +11643.711386 + 30 +0.0 + 11 +15437.499927 + 21 +11691.342909 + 31 +0.0 + 0 +LINE + 5 +F01 + 8 +0 + 62 + 0 + 10 +15374.999927 + 20 +11799.596085 + 30 +0.0 + 11 +15343.749927 + 21 +11853.722672 + 31 +0.0 + 0 +LINE + 5 +F02 + 8 +0 + 62 + 0 + 10 +15281.249927 + 20 +11961.975848 + 30 +0.0 + 11 +15249.999927 + 21 +12016.102436 + 31 +0.0 + 0 +LINE + 5 +F03 + 8 +0 + 62 + 0 + 10 +15187.499927 + 20 +12124.355611 + 30 +0.0 + 11 +15156.249927 + 21 +12178.482199 + 31 +0.0 + 0 +LINE + 5 +F04 + 8 +0 + 62 + 0 + 10 +15093.749927 + 20 +12286.735374 + 30 +0.0 + 11 +15090.0 + 21 +12293.230439 + 31 +0.0 + 0 +LINE + 5 +F05 + 8 +0 + 62 + 0 + 10 +15465.0 + 20 +11751.964561 + 30 +0.0 + 11 +15437.499927 + 21 +11799.596084 + 31 +0.0 + 0 +LINE + 5 +F06 + 8 +0 + 62 + 0 + 10 +15374.999927 + 20 +11907.84926 + 30 +0.0 + 11 +15343.749927 + 21 +11961.975848 + 31 +0.0 + 0 +LINE + 5 +F07 + 8 +0 + 62 + 0 + 10 +15281.249927 + 20 +12070.229023 + 30 +0.0 + 11 +15249.999927 + 21 +12124.355611 + 31 +0.0 + 0 +LINE + 5 +F08 + 8 +0 + 62 + 0 + 10 +15187.499927 + 20 +12232.608786 + 30 +0.0 + 11 +15156.249927 + 21 +12286.735374 + 31 +0.0 + 0 +LINE + 5 +F09 + 8 +0 + 62 + 0 + 10 +15465.0 + 20 +11860.217736 + 30 +0.0 + 11 +15437.499927 + 21 +11907.84926 + 31 +0.0 + 0 +LINE + 5 +F0A + 8 +0 + 62 + 0 + 10 +15374.999927 + 20 +12016.102435 + 30 +0.0 + 11 +15343.749927 + 21 +12070.229023 + 31 +0.0 + 0 +LINE + 5 +F0B + 8 +0 + 62 + 0 + 10 +15281.249927 + 20 +12178.482198 + 30 +0.0 + 11 +15249.999927 + 21 +12232.608786 + 31 +0.0 + 0 +LINE + 5 +F0C + 8 +0 + 62 + 0 + 10 +15187.499927 + 20 +12340.861962 + 30 +0.0 + 11 +15176.450575 + 21 +12360.0 + 31 +0.0 + 0 +LINE + 5 +F0D + 8 +0 + 62 + 0 + 10 +15465.0 + 20 +11968.470911 + 30 +0.0 + 11 +15437.499927 + 21 +12016.102435 + 31 +0.0 + 0 +LINE + 5 +F0E + 8 +0 + 62 + 0 + 10 +15374.999927 + 20 +12124.355611 + 30 +0.0 + 11 +15343.749927 + 21 +12178.482198 + 31 +0.0 + 0 +LINE + 5 +F0F + 8 +0 + 62 + 0 + 10 +15281.249927 + 20 +12286.735374 + 30 +0.0 + 11 +15249.999927 + 21 +12340.861962 + 31 +0.0 + 0 +LINE + 5 +F10 + 8 +0 + 62 + 0 + 10 +15465.0 + 20 +12076.724086 + 30 +0.0 + 11 +15437.499926 + 21 +12124.355611 + 31 +0.0 + 0 +LINE + 5 +F11 + 8 +0 + 62 + 0 + 10 +15374.999926 + 20 +12232.608786 + 30 +0.0 + 11 +15343.749926 + 21 +12286.735374 + 31 +0.0 + 0 +LINE + 5 +F12 + 8 +0 + 62 + 0 + 10 +15465.0 + 20 +12184.977261 + 30 +0.0 + 11 +15437.499926 + 21 +12232.608786 + 31 +0.0 + 0 +LINE + 5 +F13 + 8 +0 + 62 + 0 + 10 +15374.999926 + 20 +12340.861961 + 30 +0.0 + 11 +15363.950574 + 21 +12360.0 + 31 +0.0 + 0 +LINE + 5 +F14 + 8 +0 + 62 + 0 + 10 +15465.0 + 20 +12293.230436 + 30 +0.0 + 11 +15437.499926 + 21 +12340.861961 + 31 +0.0 + 0 +LINE + 5 +F15 + 8 +0 + 62 + 0 + 10 +15090.0 + 20 +11414.214886 + 30 +0.0 + 11 +15093.749972 + 21 +11420.710028 + 31 +0.0 + 0 +LINE + 5 +F16 + 8 +0 + 62 + 0 + 10 +15156.249972 + 20 +11528.963204 + 30 +0.0 + 11 +15187.499972 + 21 +11583.089792 + 31 +0.0 + 0 +LINE + 5 +F17 + 8 +0 + 62 + 0 + 10 +15249.999972 + 20 +11691.342967 + 30 +0.0 + 11 +15281.249972 + 21 +11745.469555 + 31 +0.0 + 0 +LINE + 5 +F18 + 8 +0 + 62 + 0 + 10 +15343.749972 + 20 +11853.72273 + 30 +0.0 + 11 +15374.999972 + 21 +11907.849318 + 31 +0.0 + 0 +LINE + 5 +F19 + 8 +0 + 62 + 0 + 10 +15437.499972 + 20 +12016.102494 + 30 +0.0 + 11 +15465.0 + 21 +12063.733939 + 31 +0.0 + 0 +LINE + 5 +F1A + 8 +0 + 62 + 0 + 10 +15090.0 + 20 +11522.468061 + 30 +0.0 + 11 +15093.749972 + 21 +11528.963204 + 31 +0.0 + 0 +LINE + 5 +F1B + 8 +0 + 62 + 0 + 10 +15156.249972 + 20 +11637.216379 + 30 +0.0 + 11 +15187.499972 + 21 +11691.342967 + 31 +0.0 + 0 +LINE + 5 +F1C + 8 +0 + 62 + 0 + 10 +15249.999972 + 20 +11799.596143 + 30 +0.0 + 11 +15281.249972 + 21 +11853.72273 + 31 +0.0 + 0 +LINE + 5 +F1D + 8 +0 + 62 + 0 + 10 +15343.749972 + 20 +11961.975906 + 30 +0.0 + 11 +15374.999972 + 21 +12016.102493 + 31 +0.0 + 0 +LINE + 5 +F1E + 8 +0 + 62 + 0 + 10 +15437.499972 + 20 +12124.355669 + 30 +0.0 + 11 +15465.0 + 21 +12171.987114 + 31 +0.0 + 0 +LINE + 5 +F1F + 8 +0 + 62 + 0 + 10 +15090.0 + 20 +11630.721236 + 30 +0.0 + 11 +15093.749973 + 21 +11637.216379 + 31 +0.0 + 0 +LINE + 5 +F20 + 8 +0 + 62 + 0 + 10 +15156.249973 + 20 +11745.469555 + 30 +0.0 + 11 +15187.499973 + 21 +11799.596142 + 31 +0.0 + 0 +LINE + 5 +F21 + 8 +0 + 62 + 0 + 10 +15249.999973 + 20 +11907.849318 + 30 +0.0 + 11 +15281.249973 + 21 +11961.975906 + 31 +0.0 + 0 +LINE + 5 +F22 + 8 +0 + 62 + 0 + 10 +15343.749973 + 20 +12070.229081 + 30 +0.0 + 11 +15374.999973 + 21 +12124.355669 + 31 +0.0 + 0 +LINE + 5 +F23 + 8 +0 + 62 + 0 + 10 +15437.499973 + 20 +12232.608844 + 30 +0.0 + 11 +15465.0 + 21 +12280.240289 + 31 +0.0 + 0 +LINE + 5 +F24 + 8 +0 + 62 + 0 + 10 +15090.0 + 20 +11738.974411 + 30 +0.0 + 11 +15093.749973 + 21 +11745.469555 + 31 +0.0 + 0 +LINE + 5 +F25 + 8 +0 + 62 + 0 + 10 +15156.249973 + 20 +11853.72273 + 30 +0.0 + 11 +15187.499973 + 21 +11907.849318 + 31 +0.0 + 0 +LINE + 5 +F26 + 8 +0 + 62 + 0 + 10 +15249.999973 + 20 +12016.102493 + 30 +0.0 + 11 +15281.249973 + 21 +12070.229081 + 31 +0.0 + 0 +LINE + 5 +F27 + 8 +0 + 62 + 0 + 10 +15343.749973 + 20 +12178.482256 + 30 +0.0 + 11 +15374.999973 + 21 +12232.608844 + 31 +0.0 + 0 +LINE + 5 +F28 + 8 +0 + 62 + 0 + 10 +15437.499973 + 20 +12340.86202 + 30 +0.0 + 11 +15448.549291 + 21 +12360.0 + 31 +0.0 + 0 +LINE + 5 +F29 + 8 +0 + 62 + 0 + 10 +15090.0 + 20 +11847.227586 + 30 +0.0 + 11 +15093.749973 + 21 +11853.72273 + 31 +0.0 + 0 +LINE + 5 +F2A + 8 +0 + 62 + 0 + 10 +15156.249973 + 20 +11961.975905 + 30 +0.0 + 11 +15187.499973 + 21 +12016.102493 + 31 +0.0 + 0 +LINE + 5 +F2B + 8 +0 + 62 + 0 + 10 +15249.999973 + 20 +12124.355669 + 30 +0.0 + 11 +15281.249973 + 21 +12178.482256 + 31 +0.0 + 0 +LINE + 5 +F2C + 8 +0 + 62 + 0 + 10 +15343.749973 + 20 +12286.735432 + 30 +0.0 + 11 +15374.999973 + 21 +12340.86202 + 31 +0.0 + 0 +LINE + 5 +F2D + 8 +0 + 62 + 0 + 10 +15090.0 + 20 +11955.480761 + 30 +0.0 + 11 +15093.749973 + 21 +11961.975905 + 31 +0.0 + 0 +LINE + 5 +F2E + 8 +0 + 62 + 0 + 10 +15156.249973 + 20 +12070.229081 + 30 +0.0 + 11 +15187.499973 + 21 +12124.355668 + 31 +0.0 + 0 +LINE + 5 +F2F + 8 +0 + 62 + 0 + 10 +15249.999973 + 20 +12232.608844 + 30 +0.0 + 11 +15281.249973 + 21 +12286.735432 + 31 +0.0 + 0 +LINE + 5 +F30 + 8 +0 + 62 + 0 + 10 +15090.0 + 20 +12063.733936 + 30 +0.0 + 11 +15093.749973 + 21 +12070.229081 + 31 +0.0 + 0 +LINE + 5 +F31 + 8 +0 + 62 + 0 + 10 +15156.249973 + 20 +12178.482256 + 30 +0.0 + 11 +15187.499973 + 21 +12232.608844 + 31 +0.0 + 0 +LINE + 5 +F32 + 8 +0 + 62 + 0 + 10 +15249.999973 + 20 +12340.862019 + 30 +0.0 + 11 +15261.049292 + 21 +12360.0 + 31 +0.0 + 0 +LINE + 5 +F33 + 8 +0 + 62 + 0 + 10 +15090.0 + 20 +12171.987111 + 30 +0.0 + 11 +15093.749974 + 21 +12178.482256 + 31 +0.0 + 0 +LINE + 5 +F34 + 8 +0 + 62 + 0 + 10 +15156.249974 + 20 +12286.735431 + 30 +0.0 + 11 +15187.499974 + 21 +12340.862019 + 31 +0.0 + 0 +LINE + 5 +F35 + 8 +0 + 62 + 0 + 10 +15090.0 + 20 +12280.240286 + 30 +0.0 + 11 +15093.749974 + 21 +12286.735431 + 31 +0.0 + 0 +LINE + 5 +F36 + 8 +0 + 62 + 0 + 10 +15090.0 + 20 +11305.961711 + 30 +0.0 + 11 +15093.749972 + 21 +11312.456853 + 31 +0.0 + 0 +LINE + 5 +F37 + 8 +0 + 62 + 0 + 10 +15156.249972 + 20 +11420.710029 + 30 +0.0 + 11 +15187.499972 + 21 +11474.836616 + 31 +0.0 + 0 +LINE + 5 +F38 + 8 +0 + 62 + 0 + 10 +15249.999972 + 20 +11583.089792 + 30 +0.0 + 11 +15281.249972 + 21 +11637.21638 + 31 +0.0 + 0 +LINE + 5 +F39 + 8 +0 + 62 + 0 + 10 +15343.749972 + 20 +11745.469555 + 30 +0.0 + 11 +15374.999972 + 21 +11799.596143 + 31 +0.0 + 0 +LINE + 5 +F3A + 8 +0 + 62 + 0 + 10 +15437.499972 + 20 +11907.849318 + 30 +0.0 + 11 +15465.0 + 21 +11955.480764 + 31 +0.0 + 0 +LINE + 5 +F3B + 8 +0 + 62 + 0 + 10 +15090.0 + 20 +11197.708536 + 30 +0.0 + 11 +15093.749972 + 21 +11204.203678 + 31 +0.0 + 0 +LINE + 5 +F3C + 8 +0 + 62 + 0 + 10 +15156.249972 + 20 +11312.456853 + 30 +0.0 + 11 +15187.499972 + 21 +11366.583441 + 31 +0.0 + 0 +LINE + 5 +F3D + 8 +0 + 62 + 0 + 10 +15249.999972 + 20 +11474.836616 + 30 +0.0 + 11 +15281.249972 + 21 +11528.963204 + 31 +0.0 + 0 +LINE + 5 +F3E + 8 +0 + 62 + 0 + 10 +15343.749972 + 20 +11637.21638 + 30 +0.0 + 11 +15374.999972 + 21 +11691.342967 + 31 +0.0 + 0 +LINE + 5 +F3F + 8 +0 + 62 + 0 + 10 +15437.499972 + 20 +11799.596143 + 30 +0.0 + 11 +15465.0 + 21 +11847.227589 + 31 +0.0 + 0 +LINE + 5 +F40 + 8 +0 + 62 + 0 + 10 +15090.0 + 20 +11089.455361 + 30 +0.0 + 11 +15093.749972 + 21 +11095.950502 + 31 +0.0 + 0 +LINE + 5 +F41 + 8 +0 + 62 + 0 + 10 +15156.249972 + 20 +11204.203678 + 30 +0.0 + 11 +15187.499972 + 21 +11258.330266 + 31 +0.0 + 0 +LINE + 5 +F42 + 8 +0 + 62 + 0 + 10 +15249.999972 + 20 +11366.583441 + 30 +0.0 + 11 +15281.249972 + 21 +11420.710029 + 31 +0.0 + 0 +LINE + 5 +F43 + 8 +0 + 62 + 0 + 10 +15343.749972 + 20 +11528.963204 + 30 +0.0 + 11 +15374.999972 + 21 +11583.089792 + 31 +0.0 + 0 +LINE + 5 +F44 + 8 +0 + 62 + 0 + 10 +15437.499972 + 20 +11691.342968 + 30 +0.0 + 11 +15465.0 + 21 +11738.974414 + 31 +0.0 + 0 +LINE + 5 +F45 + 8 +0 + 62 + 0 + 10 +15156.249971 + 20 +11095.950503 + 30 +0.0 + 11 +15187.499971 + 21 +11150.07709 + 31 +0.0 + 0 +LINE + 5 +F46 + 8 +0 + 62 + 0 + 10 +15249.999971 + 20 +11258.330266 + 30 +0.0 + 11 +15281.249971 + 21 +11312.456853 + 31 +0.0 + 0 +LINE + 5 +F47 + 8 +0 + 62 + 0 + 10 +15343.749971 + 20 +11420.710029 + 30 +0.0 + 11 +15374.999971 + 21 +11474.836617 + 31 +0.0 + 0 +LINE + 5 +F48 + 8 +0 + 62 + 0 + 10 +15437.499971 + 20 +11583.089792 + 30 +0.0 + 11 +15465.0 + 21 +11630.721239 + 31 +0.0 + 0 +LINE + 5 +F49 + 8 +0 + 62 + 0 + 10 +15163.352923 + 20 +11000.0 + 30 +0.0 + 11 +15187.499971 + 21 +11041.823915 + 31 +0.0 + 0 +LINE + 5 +F4A + 8 +0 + 62 + 0 + 10 +15249.999971 + 20 +11150.07709 + 30 +0.0 + 11 +15281.249971 + 21 +11204.203678 + 31 +0.0 + 0 +LINE + 5 +F4B + 8 +0 + 62 + 0 + 10 +15343.749971 + 20 +11312.456854 + 30 +0.0 + 11 +15374.999971 + 21 +11366.583441 + 31 +0.0 + 0 +LINE + 5 +F4C + 8 +0 + 62 + 0 + 10 +15437.499971 + 20 +11474.836617 + 30 +0.0 + 11 +15465.0 + 21 +11522.468064 + 31 +0.0 + 0 +LINE + 5 +F4D + 8 +0 + 62 + 0 + 10 +15249.999971 + 20 +11041.823915 + 30 +0.0 + 11 +15281.249971 + 21 +11095.950503 + 31 +0.0 + 0 +LINE + 5 +F4E + 8 +0 + 62 + 0 + 10 +15343.749971 + 20 +11204.203678 + 30 +0.0 + 11 +15374.999971 + 21 +11258.330266 + 31 +0.0 + 0 +LINE + 5 +F4F + 8 +0 + 62 + 0 + 10 +15437.499971 + 20 +11366.583441 + 30 +0.0 + 11 +15465.0 + 21 +11414.214889 + 31 +0.0 + 0 +LINE + 5 +F50 + 8 +0 + 62 + 0 + 10 +15343.749971 + 20 +11095.950503 + 30 +0.0 + 11 +15374.999971 + 21 +11150.077091 + 31 +0.0 + 0 +LINE + 5 +F51 + 8 +0 + 62 + 0 + 10 +15437.499971 + 20 +11258.330266 + 30 +0.0 + 11 +15465.0 + 21 +11305.961714 + 31 +0.0 + 0 +LINE + 5 +F52 + 8 +0 + 62 + 0 + 10 +15350.852922 + 20 +11000.0 + 30 +0.0 + 11 +15374.999971 + 21 +11041.823915 + 31 +0.0 + 0 +LINE + 5 +F53 + 8 +0 + 62 + 0 + 10 +15437.499971 + 20 +11150.077091 + 30 +0.0 + 11 +15465.0 + 21 +11197.708539 + 31 +0.0 + 0 +LINE + 5 +F54 + 8 +0 + 62 + 0 + 10 +15437.49997 + 20 +11041.823915 + 30 +0.0 + 11 +15465.0 + 21 +11089.455364 + 31 +0.0 + 0 +ENDBLK + 5 +F55 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X78 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X78 + 1 + + 0 +LINE + 5 +F57 + 8 +0 + 62 + 0 + 10 +15093.75 + 20 +9688.659163 + 30 +0.0 + 11 +15156.25 + 21 +9688.659163 + 31 +0.0 + 0 +LINE + 5 +F58 + 8 +0 + 62 + 0 + 10 +15281.25 + 20 +9688.659163 + 30 +0.0 + 11 +15343.75 + 21 +9688.659163 + 31 +0.0 + 0 +LINE + 5 +F59 + 8 +0 + 62 + 0 + 10 +15187.5 + 20 +9742.78575 + 30 +0.0 + 11 +15250.0 + 21 +9742.78575 + 31 +0.0 + 0 +LINE + 5 +F5A + 8 +0 + 62 + 0 + 10 +15375.0 + 20 +9742.78575 + 30 +0.0 + 11 +15437.5 + 21 +9742.78575 + 31 +0.0 + 0 +LINE + 5 +F5B + 8 +0 + 62 + 0 + 10 +15093.75 + 20 +9796.912338 + 30 +0.0 + 11 +15156.25 + 21 +9796.912338 + 31 +0.0 + 0 +LINE + 5 +F5C + 8 +0 + 62 + 0 + 10 +15281.25 + 20 +9796.912338 + 30 +0.0 + 11 +15343.75 + 21 +9796.912338 + 31 +0.0 + 0 +LINE + 5 +F5D + 8 +0 + 62 + 0 + 10 +15187.5 + 20 +9851.038925 + 30 +0.0 + 11 +15250.0 + 21 +9851.038925 + 31 +0.0 + 0 +LINE + 5 +F5E + 8 +0 + 62 + 0 + 10 +15375.0 + 20 +9851.038925 + 30 +0.0 + 11 +15437.5 + 21 +9851.038925 + 31 +0.0 + 0 +LINE + 5 +F5F + 8 +0 + 62 + 0 + 10 +15093.75 + 20 +9905.165513 + 30 +0.0 + 11 +15156.25 + 21 +9905.165513 + 31 +0.0 + 0 +LINE + 5 +F60 + 8 +0 + 62 + 0 + 10 +15281.25 + 20 +9905.165513 + 30 +0.0 + 11 +15343.75 + 21 +9905.165513 + 31 +0.0 + 0 +LINE + 5 +F61 + 8 +0 + 62 + 0 + 10 +15187.5 + 20 +9959.2921 + 30 +0.0 + 11 +15250.0 + 21 +9959.2921 + 31 +0.0 + 0 +LINE + 5 +F62 + 8 +0 + 62 + 0 + 10 +15375.0 + 20 +9959.2921 + 30 +0.0 + 11 +15437.5 + 21 +9959.2921 + 31 +0.0 + 0 +LINE + 5 +F63 + 8 +0 + 62 + 0 + 10 +15093.75 + 20 +10013.418688 + 30 +0.0 + 11 +15156.25 + 21 +10013.418688 + 31 +0.0 + 0 +LINE + 5 +F64 + 8 +0 + 62 + 0 + 10 +15281.25 + 20 +10013.418688 + 30 +0.0 + 11 +15343.75 + 21 +10013.418688 + 31 +0.0 + 0 +LINE + 5 +F65 + 8 +0 + 62 + 0 + 10 +15187.5 + 20 +10067.545275 + 30 +0.0 + 11 +15250.0 + 21 +10067.545275 + 31 +0.0 + 0 +LINE + 5 +F66 + 8 +0 + 62 + 0 + 10 +15375.0 + 20 +10067.545275 + 30 +0.0 + 11 +15437.5 + 21 +10067.545275 + 31 +0.0 + 0 +LINE + 5 +F67 + 8 +0 + 62 + 0 + 10 +15093.75 + 20 +10121.671863 + 30 +0.0 + 11 +15156.25 + 21 +10121.671863 + 31 +0.0 + 0 +LINE + 5 +F68 + 8 +0 + 62 + 0 + 10 +15281.25 + 20 +10121.671863 + 30 +0.0 + 11 +15343.75 + 21 +10121.671863 + 31 +0.0 + 0 +LINE + 5 +F69 + 8 +0 + 62 + 0 + 10 +15187.5 + 20 +10175.79845 + 30 +0.0 + 11 +15250.0 + 21 +10175.79845 + 31 +0.0 + 0 +LINE + 5 +F6A + 8 +0 + 62 + 0 + 10 +15375.0 + 20 +10175.79845 + 30 +0.0 + 11 +15437.5 + 21 +10175.79845 + 31 +0.0 + 0 +LINE + 5 +F6B + 8 +0 + 62 + 0 + 10 +15093.75 + 20 +10229.925038 + 30 +0.0 + 11 +15156.25 + 21 +10229.925038 + 31 +0.0 + 0 +LINE + 5 +F6C + 8 +0 + 62 + 0 + 10 +15281.25 + 20 +10229.925038 + 30 +0.0 + 11 +15343.75 + 21 +10229.925038 + 31 +0.0 + 0 +LINE + 5 +F6D + 8 +0 + 62 + 0 + 10 +15187.5 + 20 +10284.051625 + 30 +0.0 + 11 +15250.0 + 21 +10284.051625 + 31 +0.0 + 0 +LINE + 5 +F6E + 8 +0 + 62 + 0 + 10 +15375.0 + 20 +10284.051625 + 30 +0.0 + 11 +15437.5 + 21 +10284.051625 + 31 +0.0 + 0 +LINE + 5 +F6F + 8 +0 + 62 + 0 + 10 +15093.75 + 20 +10338.178213 + 30 +0.0 + 11 +15156.25 + 21 +10338.178213 + 31 +0.0 + 0 +LINE + 5 +F70 + 8 +0 + 62 + 0 + 10 +15281.25 + 20 +10338.178213 + 30 +0.0 + 11 +15343.75 + 21 +10338.178213 + 31 +0.0 + 0 +LINE + 5 +F71 + 8 +0 + 62 + 0 + 10 +15187.5 + 20 +10392.3048 + 30 +0.0 + 11 +15250.0 + 21 +10392.3048 + 31 +0.0 + 0 +LINE + 5 +F72 + 8 +0 + 62 + 0 + 10 +15375.0 + 20 +10392.3048 + 30 +0.0 + 11 +15437.5 + 21 +10392.3048 + 31 +0.0 + 0 +LINE + 5 +F73 + 8 +0 + 62 + 0 + 10 +15187.5 + 20 +9634.532575 + 30 +0.0 + 11 +15250.0 + 21 +9634.532575 + 31 +0.0 + 0 +LINE + 5 +F74 + 8 +0 + 62 + 0 + 10 +15375.0 + 20 +9634.532575 + 30 +0.0 + 11 +15437.5 + 21 +9634.532575 + 31 +0.0 + 0 +LINE + 5 +F75 + 8 +0 + 62 + 0 + 10 +15093.75 + 20 +9580.405988 + 30 +0.0 + 11 +15156.25 + 21 +9580.405988 + 31 +0.0 + 0 +LINE + 5 +F76 + 8 +0 + 62 + 0 + 10 +15281.25 + 20 +9580.405988 + 30 +0.0 + 11 +15343.75 + 21 +9580.405988 + 31 +0.0 + 0 +LINE + 5 +F77 + 8 +0 + 62 + 0 + 10 +15187.5 + 20 +9526.2794 + 30 +0.0 + 11 +15250.0 + 21 +9526.2794 + 31 +0.0 + 0 +LINE + 5 +F78 + 8 +0 + 62 + 0 + 10 +15375.0 + 20 +9526.2794 + 30 +0.0 + 11 +15437.5 + 21 +9526.2794 + 31 +0.0 + 0 +LINE + 5 +F79 + 8 +0 + 62 + 0 + 10 +15093.75 + 20 +9472.152813 + 30 +0.0 + 11 +15156.25 + 21 +9472.152813 + 31 +0.0 + 0 +LINE + 5 +F7A + 8 +0 + 62 + 0 + 10 +15281.25 + 20 +9472.152813 + 30 +0.0 + 11 +15343.75 + 21 +9472.152813 + 31 +0.0 + 0 +LINE + 5 +F7B + 8 +0 + 62 + 0 + 10 +15187.5 + 20 +9418.026225 + 30 +0.0 + 11 +15250.0 + 21 +9418.026225 + 31 +0.0 + 0 +LINE + 5 +F7C + 8 +0 + 62 + 0 + 10 +15375.0 + 20 +9418.026225 + 30 +0.0 + 11 +15437.5 + 21 +9418.026225 + 31 +0.0 + 0 +LINE + 5 +F7D + 8 +0 + 62 + 0 + 10 +15093.75 + 20 +9363.899638 + 30 +0.0 + 11 +15156.25 + 21 +9363.899638 + 31 +0.0 + 0 +LINE + 5 +F7E + 8 +0 + 62 + 0 + 10 +15281.25 + 20 +9363.899638 + 30 +0.0 + 11 +15343.75 + 21 +9363.899638 + 31 +0.0 + 0 +LINE + 5 +F7F + 8 +0 + 62 + 0 + 10 +15187.5 + 20 +9309.77305 + 30 +0.0 + 11 +15250.0 + 21 +9309.77305 + 31 +0.0 + 0 +LINE + 5 +F80 + 8 +0 + 62 + 0 + 10 +15375.0 + 20 +9309.77305 + 30 +0.0 + 11 +15437.5 + 21 +9309.77305 + 31 +0.0 + 0 +LINE + 5 +F81 + 8 +0 + 62 + 0 + 10 +15093.75 + 20 +9255.646463 + 30 +0.0 + 11 +15156.25 + 21 +9255.646463 + 31 +0.0 + 0 +LINE + 5 +F82 + 8 +0 + 62 + 0 + 10 +15281.25 + 20 +9255.646463 + 30 +0.0 + 11 +15343.75 + 21 +9255.646463 + 31 +0.0 + 0 +LINE + 5 +F83 + 8 +0 + 62 + 0 + 10 +15187.5 + 20 +9201.519875 + 30 +0.0 + 11 +15250.0 + 21 +9201.519875 + 31 +0.0 + 0 +LINE + 5 +F84 + 8 +0 + 62 + 0 + 10 +15375.0 + 20 +9201.519875 + 30 +0.0 + 11 +15437.5 + 21 +9201.519875 + 31 +0.0 + 0 +LINE + 5 +F85 + 8 +0 + 62 + 0 + 10 +15093.75 + 20 +9147.393288 + 30 +0.0 + 11 +15156.25 + 21 +9147.393288 + 31 +0.0 + 0 +LINE + 5 +F86 + 8 +0 + 62 + 0 + 10 +15281.25 + 20 +9147.393288 + 30 +0.0 + 11 +15343.75 + 21 +9147.393288 + 31 +0.0 + 0 +LINE + 5 +F87 + 8 +0 + 62 + 0 + 10 +15187.5 + 20 +9093.2667 + 30 +0.0 + 11 +15250.0 + 21 +9093.2667 + 31 +0.0 + 0 +LINE + 5 +F88 + 8 +0 + 62 + 0 + 10 +15375.0 + 20 +9093.2667 + 30 +0.0 + 11 +15437.5 + 21 +9093.2667 + 31 +0.0 + 0 +LINE + 5 +F89 + 8 +0 + 62 + 0 + 10 +15460.0 + 20 +9379.054965 + 30 +0.0 + 11 +15437.499932 + 21 +9418.026227 + 31 +0.0 + 0 +LINE + 5 +F8A + 8 +0 + 62 + 0 + 10 +15374.999932 + 20 +9526.279402 + 30 +0.0 + 11 +15343.749932 + 21 +9580.40599 + 31 +0.0 + 0 +LINE + 5 +F8B + 8 +0 + 62 + 0 + 10 +15281.249932 + 20 +9688.659165 + 30 +0.0 + 11 +15249.999932 + 21 +9742.785753 + 31 +0.0 + 0 +LINE + 5 +F8C + 8 +0 + 62 + 0 + 10 +15187.499932 + 20 +9851.038929 + 30 +0.0 + 11 +15156.249932 + 21 +9905.165516 + 31 +0.0 + 0 +LINE + 5 +F8D + 8 +0 + 62 + 0 + 10 +15093.749932 + 20 +10013.418692 + 30 +0.0 + 11 +15092.225606 + 21 +10016.058902 + 31 +0.0 + 0 +LINE + 5 +F8E + 8 +0 + 62 + 0 + 10 +15460.0 + 20 +9270.80179 + 30 +0.0 + 11 +15437.499932 + 21 +9309.773051 + 31 +0.0 + 0 +LINE + 5 +F8F + 8 +0 + 62 + 0 + 10 +15374.999932 + 20 +9418.026227 + 30 +0.0 + 11 +15343.749932 + 21 +9472.152815 + 31 +0.0 + 0 +LINE + 5 +F90 + 8 +0 + 62 + 0 + 10 +15281.249932 + 20 +9580.40599 + 30 +0.0 + 11 +15249.999932 + 21 +9634.532578 + 31 +0.0 + 0 +LINE + 5 +F91 + 8 +0 + 62 + 0 + 10 +15187.499932 + 20 +9742.785753 + 30 +0.0 + 11 +15156.249932 + 21 +9796.912341 + 31 +0.0 + 0 +LINE + 5 +F92 + 8 +0 + 62 + 0 + 10 +15093.749932 + 20 +9905.165516 + 30 +0.0 + 11 +15092.225606 + 21 +9907.805727 + 31 +0.0 + 0 +LINE + 5 +F93 + 8 +0 + 62 + 0 + 10 +15460.0 + 20 +9162.548615 + 30 +0.0 + 11 +15437.499932 + 21 +9201.519876 + 31 +0.0 + 0 +LINE + 5 +F94 + 8 +0 + 62 + 0 + 10 +15374.999932 + 20 +9309.773051 + 30 +0.0 + 11 +15343.749932 + 21 +9363.899639 + 31 +0.0 + 0 +LINE + 5 +F95 + 8 +0 + 62 + 0 + 10 +15281.249932 + 20 +9472.152815 + 30 +0.0 + 11 +15249.999932 + 21 +9526.279402 + 31 +0.0 + 0 +LINE + 5 +F96 + 8 +0 + 62 + 0 + 10 +15187.499932 + 20 +9634.532578 + 30 +0.0 + 11 +15156.249932 + 21 +9688.659166 + 31 +0.0 + 0 +LINE + 5 +F97 + 8 +0 + 62 + 0 + 10 +15093.749932 + 20 +9796.912341 + 30 +0.0 + 11 +15092.225606 + 21 +9799.552552 + 31 +0.0 + 0 +LINE + 5 +F98 + 8 +0 + 62 + 0 + 10 +15460.0 + 20 +9054.29544 + 30 +0.0 + 11 +15437.499932 + 21 +9093.266701 + 31 +0.0 + 0 +LINE + 5 +F99 + 8 +0 + 62 + 0 + 10 +15374.999932 + 20 +9201.519876 + 30 +0.0 + 11 +15343.749932 + 21 +9255.646464 + 31 +0.0 + 0 +LINE + 5 +F9A + 8 +0 + 62 + 0 + 10 +15281.249932 + 20 +9363.899639 + 30 +0.0 + 11 +15249.999932 + 21 +9418.026227 + 31 +0.0 + 0 +LINE + 5 +F9B + 8 +0 + 62 + 0 + 10 +15187.499932 + 20 +9526.279402 + 30 +0.0 + 11 +15156.249932 + 21 +9580.40599 + 31 +0.0 + 0 +LINE + 5 +F9C + 8 +0 + 62 + 0 + 10 +15093.749932 + 20 +9688.659166 + 30 +0.0 + 11 +15092.225606 + 21 +9691.299377 + 31 +0.0 + 0 +LINE + 5 +F9D + 8 +0 + 62 + 0 + 10 +15374.999932 + 20 +9093.266701 + 30 +0.0 + 11 +15343.749932 + 21 +9147.393288 + 31 +0.0 + 0 +LINE + 5 +F9E + 8 +0 + 62 + 0 + 10 +15281.249932 + 20 +9255.646464 + 30 +0.0 + 11 +15249.999932 + 21 +9309.773052 + 31 +0.0 + 0 +LINE + 5 +F9F + 8 +0 + 62 + 0 + 10 +15187.499932 + 20 +9418.026227 + 30 +0.0 + 11 +15156.249932 + 21 +9472.152815 + 31 +0.0 + 0 +LINE + 5 +FA0 + 8 +0 + 62 + 0 + 10 +15093.749932 + 20 +9580.40599 + 30 +0.0 + 11 +15092.225606 + 21 +9583.046202 + 31 +0.0 + 0 +LINE + 5 +FA1 + 8 +0 + 62 + 0 + 10 +15281.249933 + 20 +9147.393289 + 30 +0.0 + 11 +15249.999933 + 21 +9201.519876 + 31 +0.0 + 0 +LINE + 5 +FA2 + 8 +0 + 62 + 0 + 10 +15187.499933 + 20 +9309.773052 + 30 +0.0 + 11 +15156.249933 + 21 +9363.89964 + 31 +0.0 + 0 +LINE + 5 +FA3 + 8 +0 + 62 + 0 + 10 +15093.749933 + 20 +9472.152815 + 30 +0.0 + 11 +15092.225606 + 21 +9474.793027 + 31 +0.0 + 0 +LINE + 5 +FA4 + 8 +0 + 62 + 0 + 10 +15274.979974 + 20 +9050.0 + 30 +0.0 + 11 +15249.999933 + 21 +9093.266701 + 31 +0.0 + 0 +LINE + 5 +FA5 + 8 +0 + 62 + 0 + 10 +15187.499933 + 20 +9201.519876 + 30 +0.0 + 11 +15156.249933 + 21 +9255.646464 + 31 +0.0 + 0 +LINE + 5 +FA6 + 8 +0 + 62 + 0 + 10 +15093.749933 + 20 +9363.89964 + 30 +0.0 + 11 +15092.225606 + 21 +9366.539852 + 31 +0.0 + 0 +LINE + 5 +FA7 + 8 +0 + 62 + 0 + 10 +15187.499933 + 20 +9093.266701 + 30 +0.0 + 11 +15156.249933 + 21 +9147.393289 + 31 +0.0 + 0 +LINE + 5 +FA8 + 8 +0 + 62 + 0 + 10 +15093.749933 + 20 +9255.646464 + 30 +0.0 + 11 +15092.225606 + 21 +9258.286677 + 31 +0.0 + 0 +LINE + 5 +FA9 + 8 +0 + 62 + 0 + 10 +15093.749933 + 20 +9147.393289 + 30 +0.0 + 11 +15092.225606 + 21 +9150.033502 + 31 +0.0 + 0 +LINE + 5 +FAA + 8 +0 + 62 + 0 + 10 +15460.0 + 20 +9487.30814 + 30 +0.0 + 11 +15437.499931 + 21 +9526.279402 + 31 +0.0 + 0 +LINE + 5 +FAB + 8 +0 + 62 + 0 + 10 +15374.999931 + 20 +9634.532577 + 30 +0.0 + 11 +15343.749931 + 21 +9688.659165 + 31 +0.0 + 0 +LINE + 5 +FAC + 8 +0 + 62 + 0 + 10 +15281.249931 + 20 +9796.912341 + 30 +0.0 + 11 +15249.999931 + 21 +9851.038928 + 31 +0.0 + 0 +LINE + 5 +FAD + 8 +0 + 62 + 0 + 10 +15187.499931 + 20 +9959.292104 + 30 +0.0 + 11 +15156.249931 + 21 +10013.418692 + 31 +0.0 + 0 +LINE + 5 +FAE + 8 +0 + 62 + 0 + 10 +15093.749931 + 20 +10121.671867 + 30 +0.0 + 11 +15092.225606 + 21 +10124.312077 + 31 +0.0 + 0 +LINE + 5 +FAF + 8 +0 + 62 + 0 + 10 +15460.0 + 20 +9595.561315 + 30 +0.0 + 11 +15437.499931 + 21 +9634.532577 + 31 +0.0 + 0 +LINE + 5 +FB0 + 8 +0 + 62 + 0 + 10 +15374.999931 + 20 +9742.785753 + 30 +0.0 + 11 +15343.749931 + 21 +9796.912341 + 31 +0.0 + 0 +LINE + 5 +FB1 + 8 +0 + 62 + 0 + 10 +15281.249931 + 20 +9905.165516 + 30 +0.0 + 11 +15249.999931 + 21 +9959.292104 + 31 +0.0 + 0 +LINE + 5 +FB2 + 8 +0 + 62 + 0 + 10 +15187.499931 + 20 +10067.545279 + 30 +0.0 + 11 +15156.249931 + 21 +10121.671867 + 31 +0.0 + 0 +LINE + 5 +FB3 + 8 +0 + 62 + 0 + 10 +15093.749931 + 20 +10229.925042 + 30 +0.0 + 11 +15092.225606 + 21 +10232.565252 + 31 +0.0 + 0 +LINE + 5 +FB4 + 8 +0 + 62 + 0 + 10 +15460.0 + 20 +9703.81449 + 30 +0.0 + 11 +15437.499931 + 21 +9742.785753 + 31 +0.0 + 0 +LINE + 5 +FB5 + 8 +0 + 62 + 0 + 10 +15374.999931 + 20 +9851.038928 + 30 +0.0 + 11 +15343.749931 + 21 +9905.165516 + 31 +0.0 + 0 +LINE + 5 +FB6 + 8 +0 + 62 + 0 + 10 +15281.249931 + 20 +10013.418691 + 30 +0.0 + 11 +15249.999931 + 21 +10067.545279 + 31 +0.0 + 0 +LINE + 5 +FB7 + 8 +0 + 62 + 0 + 10 +15187.499931 + 20 +10175.798455 + 30 +0.0 + 11 +15156.249931 + 21 +10229.925042 + 31 +0.0 + 0 +LINE + 5 +FB8 + 8 +0 + 62 + 0 + 10 +15093.749931 + 20 +10338.178218 + 30 +0.0 + 11 +15092.225606 + 21 +10340.818427 + 31 +0.0 + 0 +LINE + 5 +FB9 + 8 +0 + 62 + 0 + 10 +15460.0 + 20 +9812.067665 + 30 +0.0 + 11 +15437.499931 + 21 +9851.038928 + 31 +0.0 + 0 +LINE + 5 +FBA + 8 +0 + 62 + 0 + 10 +15374.999931 + 20 +9959.292104 + 30 +0.0 + 11 +15343.749931 + 21 +10013.418691 + 31 +0.0 + 0 +LINE + 5 +FBB + 8 +0 + 62 + 0 + 10 +15281.249931 + 20 +10121.671867 + 30 +0.0 + 11 +15249.999931 + 21 +10175.798454 + 31 +0.0 + 0 +LINE + 5 +FBC + 8 +0 + 62 + 0 + 10 +15187.499931 + 20 +10284.05163 + 30 +0.0 + 11 +15156.249931 + 21 +10338.178218 + 31 +0.0 + 0 +LINE + 5 +FBD + 8 +0 + 62 + 0 + 10 +15460.0 + 20 +9920.32084 + 30 +0.0 + 11 +15437.499931 + 21 +9959.292103 + 31 +0.0 + 0 +LINE + 5 +FBE + 8 +0 + 62 + 0 + 10 +15374.999931 + 20 +10067.545279 + 30 +0.0 + 11 +15343.749931 + 21 +10121.671867 + 31 +0.0 + 0 +LINE + 5 +FBF + 8 +0 + 62 + 0 + 10 +15281.249931 + 20 +10229.925042 + 30 +0.0 + 11 +15249.999931 + 21 +10284.05163 + 31 +0.0 + 0 +LINE + 5 +FC0 + 8 +0 + 62 + 0 + 10 +15187.499931 + 20 +10392.304805 + 30 +0.0 + 11 +15182.174755 + 21 +10401.528279 + 31 +0.0 + 0 +LINE + 5 +FC1 + 8 +0 + 62 + 0 + 10 +15460.0 + 20 +10028.574015 + 30 +0.0 + 11 +15437.49993 + 21 +10067.545279 + 31 +0.0 + 0 +LINE + 5 +FC2 + 8 +0 + 62 + 0 + 10 +15374.99993 + 20 +10175.798454 + 30 +0.0 + 11 +15343.74993 + 21 +10229.925042 + 31 +0.0 + 0 +LINE + 5 +FC3 + 8 +0 + 62 + 0 + 10 +15281.24993 + 20 +10338.178217 + 30 +0.0 + 11 +15249.99993 + 21 +10392.304805 + 31 +0.0 + 0 +LINE + 5 +FC4 + 8 +0 + 62 + 0 + 10 +15460.0 + 20 +10136.82719 + 30 +0.0 + 11 +15437.49993 + 21 +10175.798454 + 31 +0.0 + 0 +LINE + 5 +FC5 + 8 +0 + 62 + 0 + 10 +15374.99993 + 20 +10284.05163 + 30 +0.0 + 11 +15343.74993 + 21 +10338.178217 + 31 +0.0 + 0 +LINE + 5 +FC6 + 8 +0 + 62 + 0 + 10 +15460.0 + 20 +10245.080365 + 30 +0.0 + 11 +15437.49993 + 21 +10284.051629 + 31 +0.0 + 0 +LINE + 5 +FC7 + 8 +0 + 62 + 0 + 10 +15374.99993 + 20 +10392.304805 + 30 +0.0 + 11 +15370.272138 + 21 +10400.493581 + 31 +0.0 + 0 +LINE + 5 +FC8 + 8 +0 + 62 + 0 + 10 +15460.0 + 20 +10353.33354 + 30 +0.0 + 11 +15437.49993 + 21 +10392.304805 + 31 +0.0 + 0 +LINE + 5 +FC9 + 8 +0 + 62 + 0 + 10 +15092.225606 + 20 +9469.512598 + 30 +0.0 + 11 +15093.749968 + 21 +9472.152872 + 31 +0.0 + 0 +LINE + 5 +FCA + 8 +0 + 62 + 0 + 10 +15156.249968 + 20 +9580.406048 + 30 +0.0 + 11 +15187.499968 + 21 +9634.532635 + 31 +0.0 + 0 +LINE + 5 +FCB + 8 +0 + 62 + 0 + 10 +15249.999968 + 20 +9742.785811 + 30 +0.0 + 11 +15281.249968 + 21 +9796.912399 + 31 +0.0 + 0 +LINE + 5 +FCC + 8 +0 + 62 + 0 + 10 +15343.749968 + 20 +9905.165574 + 30 +0.0 + 11 +15374.999968 + 21 +9959.292162 + 31 +0.0 + 0 +LINE + 5 +FCD + 8 +0 + 62 + 0 + 10 +15437.499968 + 20 +10067.545337 + 30 +0.0 + 11 +15460.0 + 21 +10106.516535 + 31 +0.0 + 0 +LINE + 5 +FCE + 8 +0 + 62 + 0 + 10 +15092.225606 + 20 +9577.765773 + 30 +0.0 + 11 +15093.749969 + 21 +9580.406047 + 31 +0.0 + 0 +LINE + 5 +FCF + 8 +0 + 62 + 0 + 10 +15156.249969 + 20 +9688.659223 + 30 +0.0 + 11 +15187.499969 + 21 +9742.785811 + 31 +0.0 + 0 +LINE + 5 +FD0 + 8 +0 + 62 + 0 + 10 +15249.999969 + 20 +9851.038986 + 30 +0.0 + 11 +15281.249969 + 21 +9905.165574 + 31 +0.0 + 0 +LINE + 5 +FD1 + 8 +0 + 62 + 0 + 10 +15343.749969 + 20 +10013.418749 + 30 +0.0 + 11 +15374.999969 + 21 +10067.545337 + 31 +0.0 + 0 +LINE + 5 +FD2 + 8 +0 + 62 + 0 + 10 +15437.499969 + 20 +10175.798513 + 30 +0.0 + 11 +15460.0 + 21 +10214.76971 + 31 +0.0 + 0 +LINE + 5 +FD3 + 8 +0 + 62 + 0 + 10 +15092.225606 + 20 +9686.018948 + 30 +0.0 + 11 +15093.749969 + 21 +9688.659223 + 31 +0.0 + 0 +LINE + 5 +FD4 + 8 +0 + 62 + 0 + 10 +15156.249969 + 20 +9796.912398 + 30 +0.0 + 11 +15187.499969 + 21 +9851.038986 + 31 +0.0 + 0 +LINE + 5 +FD5 + 8 +0 + 62 + 0 + 10 +15249.999969 + 20 +9959.292161 + 30 +0.0 + 11 +15281.249969 + 21 +10013.418749 + 31 +0.0 + 0 +LINE + 5 +FD6 + 8 +0 + 62 + 0 + 10 +15343.749969 + 20 +10121.671925 + 30 +0.0 + 11 +15374.999969 + 21 +10175.798512 + 31 +0.0 + 0 +LINE + 5 +FD7 + 8 +0 + 62 + 0 + 10 +15437.499969 + 20 +10284.051688 + 30 +0.0 + 11 +15460.0 + 21 +10323.022885 + 31 +0.0 + 0 +LINE + 5 +FD8 + 8 +0 + 62 + 0 + 10 +15092.225606 + 20 +9794.272123 + 30 +0.0 + 11 +15093.749969 + 21 +9796.912398 + 31 +0.0 + 0 +LINE + 5 +FD9 + 8 +0 + 62 + 0 + 10 +15156.249969 + 20 +9905.165574 + 30 +0.0 + 11 +15187.499969 + 21 +9959.292161 + 31 +0.0 + 0 +LINE + 5 +FDA + 8 +0 + 62 + 0 + 10 +15249.999969 + 20 +10067.545337 + 30 +0.0 + 11 +15281.249969 + 21 +10121.671925 + 31 +0.0 + 0 +LINE + 5 +FDB + 8 +0 + 62 + 0 + 10 +15343.749969 + 20 +10229.9251 + 30 +0.0 + 11 +15374.999969 + 21 +10284.051688 + 31 +0.0 + 0 +LINE + 5 +FDC + 8 +0 + 62 + 0 + 10 +15437.499969 + 20 +10392.304863 + 30 +0.0 + 11 +15441.999925 + 21 +10400.099016 + 31 +0.0 + 0 +LINE + 5 +FDD + 8 +0 + 62 + 0 + 10 +15092.225606 + 20 +9902.525298 + 30 +0.0 + 11 +15093.749969 + 21 +9905.165574 + 31 +0.0 + 0 +LINE + 5 +FDE + 8 +0 + 62 + 0 + 10 +15156.249969 + 20 +10013.418749 + 30 +0.0 + 11 +15187.499969 + 21 +10067.545337 + 31 +0.0 + 0 +LINE + 5 +FDF + 8 +0 + 62 + 0 + 10 +15249.999969 + 20 +10175.798512 + 30 +0.0 + 11 +15281.249969 + 21 +10229.9251 + 31 +0.0 + 0 +LINE + 5 +FE0 + 8 +0 + 62 + 0 + 10 +15343.749969 + 20 +10338.178275 + 30 +0.0 + 11 +15374.999969 + 21 +10392.304863 + 31 +0.0 + 0 +LINE + 5 +FE1 + 8 +0 + 62 + 0 + 10 +15092.225606 + 20 +10010.778473 + 30 +0.0 + 11 +15093.749969 + 21 +10013.418749 + 31 +0.0 + 0 +LINE + 5 +FE2 + 8 +0 + 62 + 0 + 10 +15156.249969 + 20 +10121.671924 + 30 +0.0 + 11 +15187.499969 + 21 +10175.798512 + 31 +0.0 + 0 +LINE + 5 +FE3 + 8 +0 + 62 + 0 + 10 +15249.999969 + 20 +10284.051688 + 30 +0.0 + 11 +15281.249969 + 21 +10338.178275 + 31 +0.0 + 0 +LINE + 5 +FE4 + 8 +0 + 62 + 0 + 10 +15092.225606 + 20 +10119.031648 + 30 +0.0 + 11 +15093.74997 + 21 +10121.671924 + 31 +0.0 + 0 +LINE + 5 +FE5 + 8 +0 + 62 + 0 + 10 +15156.24997 + 20 +10229.9251 + 30 +0.0 + 11 +15187.49997 + 21 +10284.051687 + 31 +0.0 + 0 +LINE + 5 +FE6 + 8 +0 + 62 + 0 + 10 +15249.99997 + 20 +10392.304863 + 30 +0.0 + 11 +15255.093527 + 21 +10401.127163 + 31 +0.0 + 0 +LINE + 5 +FE7 + 8 +0 + 62 + 0 + 10 +15092.225606 + 20 +10227.284823 + 30 +0.0 + 11 +15093.74997 + 21 +10229.9251 + 31 +0.0 + 0 +LINE + 5 +FE8 + 8 +0 + 62 + 0 + 10 +15156.24997 + 20 +10338.178275 + 30 +0.0 + 11 +15187.49997 + 21 +10392.304863 + 31 +0.0 + 0 +LINE + 5 +FE9 + 8 +0 + 62 + 0 + 10 +15092.225606 + 20 +10335.537998 + 30 +0.0 + 11 +15093.74997 + 21 +10338.178275 + 31 +0.0 + 0 +LINE + 5 +FEA + 8 +0 + 62 + 0 + 10 +15092.225606 + 20 +9361.259423 + 30 +0.0 + 11 +15093.749968 + 21 +9363.899697 + 31 +0.0 + 0 +LINE + 5 +FEB + 8 +0 + 62 + 0 + 10 +15156.249968 + 20 +9472.152872 + 30 +0.0 + 11 +15187.499968 + 21 +9526.27946 + 31 +0.0 + 0 +LINE + 5 +FEC + 8 +0 + 62 + 0 + 10 +15249.999968 + 20 +9634.532635 + 30 +0.0 + 11 +15281.249968 + 21 +9688.659223 + 31 +0.0 + 0 +LINE + 5 +FED + 8 +0 + 62 + 0 + 10 +15343.749968 + 20 +9796.912399 + 30 +0.0 + 11 +15374.999968 + 21 +9851.038986 + 31 +0.0 + 0 +LINE + 5 +FEE + 8 +0 + 62 + 0 + 10 +15437.499968 + 20 +9959.292162 + 30 +0.0 + 11 +15460.0 + 21 +9998.26336 + 31 +0.0 + 0 +LINE + 5 +FEF + 8 +0 + 62 + 0 + 10 +15092.225606 + 20 +9253.006248 + 30 +0.0 + 11 +15093.749968 + 21 +9255.646521 + 31 +0.0 + 0 +LINE + 5 +FF0 + 8 +0 + 62 + 0 + 10 +15156.249968 + 20 +9363.899697 + 30 +0.0 + 11 +15187.499968 + 21 +9418.026285 + 31 +0.0 + 0 +LINE + 5 +FF1 + 8 +0 + 62 + 0 + 10 +15249.999968 + 20 +9526.27946 + 30 +0.0 + 11 +15281.249968 + 21 +9580.406048 + 31 +0.0 + 0 +LINE + 5 +FF2 + 8 +0 + 62 + 0 + 10 +15343.749968 + 20 +9688.659223 + 30 +0.0 + 11 +15374.999968 + 21 +9742.785811 + 31 +0.0 + 0 +LINE + 5 +FF3 + 8 +0 + 62 + 0 + 10 +15437.499968 + 20 +9851.038986 + 30 +0.0 + 11 +15460.0 + 21 +9890.010185 + 31 +0.0 + 0 +LINE + 5 +FF4 + 8 +0 + 62 + 0 + 10 +15092.225606 + 20 +9144.753073 + 30 +0.0 + 11 +15093.749968 + 21 +9147.393346 + 31 +0.0 + 0 +LINE + 5 +FF5 + 8 +0 + 62 + 0 + 10 +15156.249968 + 20 +9255.646522 + 30 +0.0 + 11 +15187.499968 + 21 +9309.773109 + 31 +0.0 + 0 +LINE + 5 +FF6 + 8 +0 + 62 + 0 + 10 +15249.999968 + 20 +9418.026285 + 30 +0.0 + 11 +15281.249968 + 21 +9472.152872 + 31 +0.0 + 0 +LINE + 5 +FF7 + 8 +0 + 62 + 0 + 10 +15343.749968 + 20 +9580.406048 + 30 +0.0 + 11 +15374.999968 + 21 +9634.532636 + 31 +0.0 + 0 +LINE + 5 +FF8 + 8 +0 + 62 + 0 + 10 +15437.499968 + 20 +9742.785811 + 30 +0.0 + 11 +15460.0 + 21 +9781.75701 + 31 +0.0 + 0 +LINE + 5 +FF9 + 8 +0 + 62 + 0 + 10 +15156.249968 + 20 +9147.393346 + 30 +0.0 + 11 +15187.499968 + 21 +9201.519934 + 31 +0.0 + 0 +LINE + 5 +FFA + 8 +0 + 62 + 0 + 10 +15249.999968 + 20 +9309.773109 + 30 +0.0 + 11 +15281.249968 + 21 +9363.899697 + 31 +0.0 + 0 +LINE + 5 +FFB + 8 +0 + 62 + 0 + 10 +15343.749968 + 20 +9472.152873 + 30 +0.0 + 11 +15374.999968 + 21 +9526.27946 + 31 +0.0 + 0 +LINE + 5 +FFC + 8 +0 + 62 + 0 + 10 +15437.499968 + 20 +9634.532636 + 30 +0.0 + 11 +15460.0 + 21 +9673.503835 + 31 +0.0 + 0 +LINE + 5 +FFD + 8 +0 + 62 + 0 + 10 +15162.519893 + 20 +9050.0 + 30 +0.0 + 11 +15187.499967 + 21 +9093.266759 + 31 +0.0 + 0 +LINE + 5 +FFE + 8 +0 + 62 + 0 + 10 +15249.999967 + 20 +9201.519934 + 30 +0.0 + 11 +15281.249967 + 21 +9255.646522 + 31 +0.0 + 0 +LINE + 5 +FFF + 8 +0 + 62 + 0 + 10 +15343.749967 + 20 +9363.899697 + 30 +0.0 + 11 +15374.999967 + 21 +9418.026285 + 31 +0.0 + 0 +LINE + 5 +1000 + 8 +0 + 62 + 0 + 10 +15437.499967 + 20 +9526.27946 + 30 +0.0 + 11 +15460.0 + 21 +9565.25066 + 31 +0.0 + 0 +LINE + 5 +1001 + 8 +0 + 62 + 0 + 10 +15249.999967 + 20 +9093.266759 + 30 +0.0 + 11 +15281.249967 + 21 +9147.393346 + 31 +0.0 + 0 +LINE + 5 +1002 + 8 +0 + 62 + 0 + 10 +15343.749967 + 20 +9255.646522 + 30 +0.0 + 11 +15374.999967 + 21 +9309.77311 + 31 +0.0 + 0 +LINE + 5 +1003 + 8 +0 + 62 + 0 + 10 +15437.499967 + 20 +9418.026285 + 30 +0.0 + 11 +15460.0 + 21 +9456.997485 + 31 +0.0 + 0 +LINE + 5 +1004 + 8 +0 + 62 + 0 + 10 +15343.749967 + 20 +9147.393347 + 30 +0.0 + 11 +15374.999967 + 21 +9201.519934 + 31 +0.0 + 0 +LINE + 5 +1005 + 8 +0 + 62 + 0 + 10 +15437.499967 + 20 +9309.77311 + 30 +0.0 + 11 +15460.0 + 21 +9348.74431 + 31 +0.0 + 0 +LINE + 5 +1006 + 8 +0 + 62 + 0 + 10 +15350.019892 + 20 +9050.0 + 30 +0.0 + 11 +15374.999967 + 21 +9093.266759 + 31 +0.0 + 0 +LINE + 5 +1007 + 8 +0 + 62 + 0 + 10 +15437.499967 + 20 +9201.519934 + 30 +0.0 + 11 +15460.0 + 21 +9240.491135 + 31 +0.0 + 0 +LINE + 5 +1008 + 8 +0 + 62 + 0 + 10 +15437.499967 + 20 +9093.266759 + 30 +0.0 + 11 +15460.0 + 21 +9132.23796 + 31 +0.0 + 0 +ENDBLK + 5 +1009 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D79 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D79 + 1 + + 0 +LINE + 5 +100B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +15921.0 + 20 +7285.0 + 30 +0.0 + 11 +16019.0 + 21 +7285.0 + 31 +0.0 + 0 +INSERT + 5 +100C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +15920.0 + 20 +7285.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +100D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16020.0 + 20 +7285.0 + 30 +0.0 + 0 +TEXT + 5 +100E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +15948.125 + 20 +7328.75 + 30 +0.0 + 40 +87.5 + 1 +2 + 41 +0.75 + 72 + 1 + 11 +15970.0 + 21 +7372.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +100F + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15920.0 + 20 +8990.0 + 30 +0.0 + 0 +POINT + 5 +1010 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16020.0 + 20 +8990.0 + 30 +0.0 + 0 +POINT + 5 +1011 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16020.0 + 20 +7285.0 + 30 +0.0 + 0 +ENDBLK + 5 +1012 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D81 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D81 + 1 + + 0 +LINE + 5 +1014 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +16081.0 + 20 +7285.0 + 30 +0.0 + 11 +16584.0 + 21 +7285.0 + 31 +0.0 + 0 +INSERT + 5 +1015 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16080.0 + 20 +7285.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +1016 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16585.0 + 20 +7285.0 + 30 +0.0 + 0 +TEXT + 5 +1017 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +16310.625 + 20 +7328.75 + 30 +0.0 + 40 +87.5 + 1 +8 + 41 +0.75 + 72 + 1 + 11 +16332.5 + 21 +7372.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +1018 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16080.0 + 20 +9050.0 + 30 +0.0 + 0 +POINT + 5 +1019 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16585.0 + 20 +9065.0 + 30 +0.0 + 0 +POINT + 5 +101A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16585.0 + 20 +7285.0 + 30 +0.0 + 0 +ENDBLK + 5 +101B + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D83 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D83 + 1 + + 0 +LINE + 5 +101D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +16651.0 + 20 +7285.0 + 30 +0.0 + 11 +16749.0 + 21 +7285.0 + 31 +0.0 + 0 +INSERT + 5 +101E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16650.0 + 20 +7285.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +101F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16750.0 + 20 +7285.0 + 30 +0.0 + 0 +TEXT + 5 +1020 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +16678.125 + 20 +7328.75 + 30 +0.0 + 40 +87.5 + 1 +2 + 41 +0.75 + 72 + 1 + 11 +16700.0 + 21 +7372.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +1021 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16650.0 + 20 +9460.0 + 30 +0.0 + 0 +POINT + 5 +1022 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16750.0 + 20 +9000.0 + 30 +0.0 + 0 +POINT + 5 +1023 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16750.0 + 20 +7285.0 + 30 +0.0 + 0 +ENDBLK + 5 +1024 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D84 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D84 + 1 + + 0 +LINE + 5 +1026 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +18630.0 + 20 +8186.0 + 30 +0.0 + 11 +18630.0 + 21 +8984.0 + 31 +0.0 + 0 +INSERT + 5 +1027 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18630.0 + 20 +8185.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +1028 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18630.0 + 20 +8985.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +1029 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +18586.25 + 20 +8541.25 + 30 +0.0 + 40 +87.5 + 1 +16 + 50 +90.0 + 41 +0.75 + 72 + 1 + 11 +18542.5 + 21 +8585.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +102A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17570.0 + 20 +8185.0 + 30 +0.0 + 0 +POINT + 5 +102B + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17570.0 + 20 +8985.0 + 30 +0.0 + 0 +POINT + 5 +102C + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +18630.0 + 20 +8985.0 + 30 +0.0 + 0 +ENDBLK + 5 +102D + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D85 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D85 + 1 + + 0 +LINE + 5 +102F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +18630.0 + 20 +8986.0 + 30 +0.0 + 11 +18630.0 + 21 +9179.0 + 31 +0.0 + 0 +INSERT + 5 +1030 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18630.0 + 20 +8985.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +1031 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18630.0 + 20 +9180.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +1032 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +18586.25 + 20 +9060.625 + 30 +0.0 + 40 +87.5 + 1 +4 + 50 +90.0 + 41 +0.75 + 72 + 1 + 11 +18542.5 + 21 +9082.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +1033 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17570.0 + 20 +8985.0 + 30 +0.0 + 0 +POINT + 5 +1034 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17580.0 + 20 +9180.0 + 30 +0.0 + 0 +POINT + 5 +1035 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +18630.0 + 20 +9180.0 + 30 +0.0 + 0 +ENDBLK + 5 +1036 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D86 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D86 + 1 + + 0 +LINE + 5 +1038 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +18630.0 + 20 +9181.0 + 30 +0.0 + 11 +18630.0 + 21 +9239.0 + 31 +0.0 + 0 +INSERT + 5 +1039 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18630.0 + 20 +9180.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +103A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18630.0 + 20 +9240.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +103B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +18586.25 + 20 +9199.0625 + 30 +0.0 + 40 +87.5 + 1 +1 + 50 +90.0 + 41 +0.75 + 72 + 1 + 11 +18542.5 + 21 +9210.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +103C + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17580.0 + 20 +9180.0 + 30 +0.0 + 0 +POINT + 5 +103D + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17575.0 + 20 +9240.0 + 30 +0.0 + 0 +POINT + 5 +103E + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +18630.0 + 20 +9240.0 + 30 +0.0 + 0 +ENDBLK + 5 +103F + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D87 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D87 + 1 + + 0 +LINE + 5 +1041 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +18630.0 + 20 +9241.0 + 30 +0.0 + 11 +18630.0 + 21 +9434.0 + 31 +0.0 + 0 +INSERT + 5 +1042 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18630.0 + 20 +9240.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +1043 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18630.0 + 20 +9435.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +1044 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +18586.25 + 20 +9315.625 + 30 +0.0 + 40 +87.5 + 1 +4 + 50 +90.0 + 41 +0.75 + 72 + 1 + 11 +18542.5 + 21 +9337.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +1045 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17575.0 + 20 +9240.0 + 30 +0.0 + 0 +POINT + 5 +1046 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17585.0 + 20 +9435.0 + 30 +0.0 + 0 +POINT + 5 +1047 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +18630.0 + 20 +9435.0 + 30 +0.0 + 0 +ENDBLK + 5 +1048 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D93 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D93 + 1 + + 0 +LINE + 5 +104A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +16021.0 + 20 +7285.0 + 30 +0.0 + 11 +16079.0 + 21 +7285.0 + 31 +0.0 + 0 +INSERT + 5 +104B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16020.0 + 20 +7285.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +104C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16080.0 + 20 +7285.0 + 30 +0.0 + 0 +TEXT + 5 +104D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +16022.5 + 20 +7481.25 + 30 +0.0 + 40 +87.5 + 1 +1.25 + 41 +0.75 + 72 + 1 + 11 +16110.0 + 21 +7525.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +104E + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16020.0 + 20 +8990.0 + 30 +0.0 + 0 +POINT + 5 +104F + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16080.0 + 20 +9050.0 + 30 +0.0 + 0 +POINT + 5 +1050 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16080.0 + 20 +7285.0 + 30 +0.0 + 0 +ENDBLK + 5 +1051 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D95 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D95 + 1 + + 0 +LINE + 5 +1053 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +16586.0 + 20 +7285.0 + 30 +0.0 + 11 +16649.0 + 21 +7285.0 + 31 +0.0 + 0 +INSERT + 5 +1054 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16585.0 + 20 +7285.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +1055 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16650.0 + 20 +7285.0 + 30 +0.0 + 0 +TEXT + 5 +1056 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +16612.5 + 20 +7496.25 + 30 +0.0 + 40 +87.5 + 1 +1.25 + 41 +0.75 + 72 + 1 + 11 +16700.0 + 21 +7540.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +1057 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16585.0 + 20 +9065.0 + 30 +0.0 + 0 +POINT + 5 +1058 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16650.0 + 20 +9460.0 + 30 +0.0 + 0 +POINT + 5 +1059 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16650.0 + 20 +7285.0 + 30 +0.0 + 0 +ENDBLK + 5 +105A + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D96 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D96 + 1 + + 0 +LINE + 5 +105C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +18630.0 + 20 +9436.0 + 30 +0.0 + 11 +18630.0 + 21 +9559.0 + 31 +0.0 + 0 +INSERT + 5 +105D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18630.0 + 20 +9435.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +105E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18630.0 + 20 +9560.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +105F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +18586.25 + 20 +9598.125 + 30 +0.0 + 40 +87.5 + 1 +2 + 50 +90.0 + 41 +0.75 + 72 + 1 + 11 +18542.5 + 21 +9620.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +1060 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17585.0 + 20 +9435.0 + 30 +0.0 + 0 +POINT + 5 +1061 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17585.0 + 20 +9560.0 + 30 +0.0 + 0 +POINT + 5 +1062 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +18630.0 + 20 +9560.0 + 30 +0.0 + 0 +ENDBLK + 5 +1063 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D97 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D97 + 1 + + 0 +LINE + 5 +1065 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +15620.0 + 20 +9561.0 + 30 +0.0 + 11 +15620.0 + 21 +9859.0 + 31 +0.0 + 0 +INSERT + 5 +1066 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +15620.0 + 20 +9560.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +1067 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +15620.0 + 20 +9860.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +1068 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +15576.25 + 20 +9688.125 + 30 +0.0 + 40 +87.5 + 1 +6 + 50 +90.0 + 41 +0.75 + 72 + 1 + 11 +15532.5 + 21 +9710.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +1069 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15870.0 + 20 +9560.0 + 30 +0.0 + 0 +POINT + 5 +106A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15870.0 + 20 +9860.0 + 30 +0.0 + 0 +POINT + 5 +106B + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15620.0 + 20 +9860.0 + 30 +0.0 + 0 +ENDBLK + 5 +106C + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D98 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D98 + 1 + + 0 +LINE + 5 +106E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +16021.789473 + 20 +10121.000702 + 30 +0.0 + 11 +15872.582352 + 21 +10121.000702 + 31 +0.0 + 0 +INSERT + 5 +106F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16022.789473 + 20 +10121.000702 + 30 +0.0 + 0 +INSERT + 5 +1070 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +15871.582352 + 20 +10121.000702 + 30 +0.0 + 50 +180.0 + 0 +TEXT + 5 +1071 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +15925.310913 + 20 +10164.750702 + 30 +0.0 + 40 +87.5 + 1 +3 + 41 +0.75 + 72 + 1 + 11 +15947.185913 + 21 +10208.500702 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +1072 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16022.789473 + 20 +9960.24584 + 30 +0.0 + 0 +POINT + 5 +1073 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15871.582352 + 20 +9960.24584 + 30 +0.0 + 0 +POINT + 5 +1074 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15871.582352 + 20 +10121.000702 + 30 +0.0 + 0 +ENDBLK + 5 +1075 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D99 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D99 + 1 + + 0 +LINE + 5 +1077 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +16021.0 + 20 +13550.0 + 30 +0.0 + 11 +16649.0 + 21 +13550.0 + 31 +0.0 + 0 +INSERT + 5 +1078 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16020.0 + 20 +13550.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +1079 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16650.0 + 20 +13550.0 + 30 +0.0 + 0 +TEXT + 5 +107A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +16291.25 + 20 +13593.75 + 30 +0.0 + 40 +87.5 + 1 +12 + 41 +0.75 + 72 + 1 + 11 +16335.0 + 21 +13637.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +107B + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16020.0 + 20 +12320.0 + 30 +0.0 + 0 +POINT + 5 +107C + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16650.0 + 20 +12320.0 + 30 +0.0 + 0 +POINT + 5 +107D + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16650.0 + 20 +13550.0 + 30 +0.0 + 0 +ENDBLK + 5 +107E + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D103 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D103 + 1 + + 0 +LINE + 5 +1080 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +16020.357827 + 20 +12020.090071 + 30 +0.0 + 11 +15947.609987 + 21 +12020.090071 + 31 +0.0 + 0 +INSERT + 5 +1081 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +16021.357827 + 20 +12020.090071 + 30 +0.0 + 0 +INSERT + 5 +1082 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +15946.609987 + 20 +12020.090071 + 30 +0.0 + 50 +180.0 + 0 +TEXT + 5 +1083 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +15840.389563 + 20 +12063.840071 + 30 +0.0 + 40 +87.5 + 1 +1 + 41 +0.75 + 72 + 1 + 11 +15851.327063 + 21 +12107.590071 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +1084 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +16021.357827 + 20 +12209.009781 + 30 +0.0 + 0 +POINT + 5 +1085 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15946.609987 + 20 +12209.009781 + 30 +0.0 + 0 +POINT + 5 +1086 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +15946.609987 + 20 +12020.090071 + 30 +0.0 + 0 +ENDBLK + 5 +1087 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D105 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D105 + 1 + + 0 +LINE + 5 +1089 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +18624.167458 + 20 +12416.10418 + 30 +0.0 + 11 +18624.167458 + 21 +13214.0 + 31 +0.0 + 0 +INSERT + 5 +108A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18624.167458 + 20 +12415.10418 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +108B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18624.167458 + 20 +13215.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +108C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +18580.417458 + 20 +12771.30209 + 30 +0.0 + 40 +87.5 + 1 +16 + 50 +90.0 + 41 +0.75 + 72 + 1 + 11 +18536.667458 + 21 +12815.05209 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +108D + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17578.177313 + 20 +12415.10418 + 30 +0.0 + 0 +POINT + 5 +108E + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17570.0 + 20 +13215.0 + 30 +0.0 + 0 +POINT + 5 +108F + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +18624.167458 + 20 +13215.0 + 30 +0.0 + 0 +ENDBLK + 5 +1090 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D106 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D106 + 1 + + 0 +LINE + 5 +1092 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +18624.167458 + 20 +12341.808311 + 30 +0.0 + 11 +18624.167458 + 21 +12414.10418 + 31 +0.0 + 0 +INSERT + 5 +1093 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18624.167458 + 20 +12340.808311 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +1094 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +18624.167458 + 20 +12415.10418 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +1095 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +18580.417458 + 20 +12204.0625 + 30 +0.0 + 40 +87.5 + 1 +1 + 50 +90.0 + 41 +0.75 + 72 + 1 + 11 +18536.667458 + 21 +12215.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +1096 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17578.177313 + 20 +12340.808311 + 30 +0.0 + 0 +POINT + 5 +1097 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +17578.177313 + 20 +12415.10418 + 30 +0.0 + 0 +POINT + 5 +1098 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +18624.167458 + 20 +12415.10418 + 30 +0.0 + 0 +ENDBLK + 5 +1099 + 8 +0 + 0 +ENDSEC + 0 +SECTION + 2 +ENTITIES + 0 +POLYLINE + 5 +109A + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +1EF4 + 8 +0 + 10 +500.0 + 20 +125.0 + 30 +0.0 + 0 +VERTEX + 5 +1EF5 + 8 +0 + 10 +20900.0 + 20 +125.0 + 30 +0.0 + 0 +VERTEX + 5 +1EF6 + 8 +0 + 10 +20900.0 + 20 +14725.0 + 30 +0.0 + 0 +VERTEX + 5 +1EF7 + 8 +0 + 10 +500.0 + 20 +14725.0 + 30 +0.0 + 0 +SEQEND + 5 +1EF8 + 8 +0 + 0 +POLYLINE + 5 +10A0 + 8 +FUNDAMENT + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +1EF9 + 8 +FUNDAMENT + 10 +7921.25 + 20 +4222.5 + 30 +0.0 + 0 +VERTEX + 5 +1EFA + 8 +FUNDAMENT + 10 +5421.25 + 20 +4222.5 + 30 +0.0 + 0 +VERTEX + 5 +1EFB + 8 +FUNDAMENT + 10 +5421.25 + 20 +2847.5 + 30 +0.0 + 0 +VERTEX + 5 +1EFC + 8 +FUNDAMENT + 10 +7921.25 + 20 +2847.5 + 30 +0.0 + 0 +SEQEND + 5 +1EFD + 8 +FUNDAMENT + 0 +POLYLINE + 5 +10A6 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +1EFE + 8 +0 + 10 +20900.0 + 20 +1500.0 + 30 +0.0 + 0 +VERTEX + 5 +1EFF + 8 +0 + 10 +16275.0 + 20 +1500.0 + 30 +0.0 + 0 +VERTEX + 5 +1F00 + 8 +0 + 10 +16275.0 + 20 +125.0 + 30 +0.0 + 0 +SEQEND + 5 +1F01 + 8 +0 + 0 +POLYLINE + 5 +10AB + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +1F02 + 8 +MAUERWERK + 10 +6215.0 + 20 +4660.0 + 30 +0.0 + 0 +VERTEX + 5 +1F03 + 8 +MAUERWERK + 10 +7127.5 + 20 +4660.0 + 30 +0.0 + 0 +VERTEX + 5 +1F04 + 8 +MAUERWERK + 10 +7127.5 + 20 +5094.375 + 30 +0.0 + 0 +VERTEX + 5 +1F05 + 8 +MAUERWERK + 10 +6215.0 + 20 +5094.375 + 30 +0.0 + 0 +SEQEND + 5 +1F06 + 8 +MAUERWERK + 0 +POLYLINE + 5 +10B1 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +1F07 + 8 +MAUERWERK + 10 +6141.15625 + 20 +9890.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F08 + 8 +MAUERWERK + 10 +7053.65625 + 20 +9890.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F09 + 8 +MAUERWERK + 10 +7053.65625 + 20 +11143.282507 + 30 +0.0 + 0 +VERTEX + 5 +1F0A + 8 +MAUERWERK + 10 +6141.15625 + 20 +11143.282507 + 30 +0.0 + 0 +SEQEND + 5 +1F0B + 8 +MAUERWERK + 0 +POLYLINE + 5 +10B7 + 8 +VORSATZSCHALE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +1F0C + 8 +VORSATZSCHALE + 10 +5791.15625 + 20 +11105.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F0D + 8 +VORSATZSCHALE + 10 +5503.65625 + 20 +11105.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F0E + 8 +VORSATZSCHALE + 10 +5503.65625 + 20 +11283.282507 + 30 +0.0 + 0 +VERTEX + 5 +1F0F + 8 +VORSATZSCHALE + 10 +5791.15625 + 20 +11283.282507 + 30 +0.0 + 0 +SEQEND + 5 +1F10 + 8 +VORSATZSCHALE + 0 +POLYLINE + 5 +10BD + 8 +VORSATZSCHALE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +1F11 + 8 +VORSATZSCHALE + 10 +5791.15625 + 20 +11320.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F12 + 8 +VORSATZSCHALE + 10 +5503.65625 + 20 +11320.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F13 + 8 +VORSATZSCHALE + 10 +5503.65625 + 20 +11498.282507 + 30 +0.0 + 0 +VERTEX + 5 +1F14 + 8 +VORSATZSCHALE + 10 +5791.15625 + 20 +11498.282507 + 30 +0.0 + 0 +SEQEND + 5 +1F15 + 8 +VORSATZSCHALE + 0 +POLYLINE + 5 +10C3 + 8 +VORSATZSCHALE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1F16 + 8 +VORSATZSCHALE + 10 +5603.65625 + 20 +11090.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F17 + 8 +VORSATZSCHALE + 10 +5853.65625 + 20 +11090.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F18 + 8 +VORSATZSCHALE + 10 +5853.65625 + 20 +11278.282507 + 30 +0.0 + 0 +VERTEX + 5 +1F19 + 8 +VORSATZSCHALE + 10 +6141.15625 + 20 +11278.282507 + 30 +0.0 + 0 +VERTEX + 5 +1F1A + 8 +VORSATZSCHALE + 10 +6141.15625 + 20 +11190.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F1B + 8 +VORSATZSCHALE + 10 +6141.15625 + 20 +11130.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F1C + 8 +VORSATZSCHALE + 10 +5856.15625 + 20 +11130.782507 + 30 +0.0 + 0 +SEQEND + 5 +1F1D + 8 +VORSATZSCHALE + 0 +POLYLINE + 5 +10CC + 8 +VORSATZSCHALE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1F1E + 8 +VORSATZSCHALE + 10 +5503.65625 + 20 +11323.282507 + 30 +0.0 + 0 +VERTEX + 5 +1F1F + 8 +VORSATZSCHALE + 10 +5791.15625 + 20 +11495.782507 + 30 +0.0 + 0 +SEQEND + 5 +1F20 + 8 +VORSATZSCHALE + 0 +POLYLINE + 5 +10D0 + 8 +VORSATZSCHALE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1F21 + 8 +VORSATZSCHALE + 10 +5791.15625 + 20 +11323.282507 + 30 +0.0 + 0 +VERTEX + 5 +1F22 + 8 +VORSATZSCHALE + 10 +5501.15625 + 20 +11495.782507 + 30 +0.0 + 0 +SEQEND + 5 +1F23 + 8 +VORSATZSCHALE + 0 +POLYLINE + 5 +10D4 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1F24 + 8 +DRAHTANKER + 10 +5778.65625 + 20 +12065.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F25 + 8 +DRAHTANKER + 10 +5953.65625 + 20 +12065.782507 + 30 +0.0 + 0 +SEQEND + 5 +1F26 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +10D8 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1F27 + 8 +DRAHTANKER + 10 +6203.65625 + 20 +12065.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F28 + 8 +DRAHTANKER + 10 +6253.65625 + 20 +12065.782507 + 30 +0.0 + 0 +SEQEND + 5 +1F29 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +10DC + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1F2A + 8 +DRAHTANKER + 10 +6303.65625 + 20 +12065.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F2B + 8 +DRAHTANKER + 10 +6353.65625 + 20 +12065.782507 + 30 +0.0 + 0 +SEQEND + 5 +1F2C + 8 +DRAHTANKER + 0 +POLYLINE + 5 +10E0 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1F2D + 8 +DRAHTANKER + 10 +5591.15625 + 20 +12065.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F2E + 8 +DRAHTANKER + 10 +5641.15625 + 20 +12065.782507 + 30 +0.0 + 0 +SEQEND + 5 +1F2F + 8 +DRAHTANKER + 0 +POLYLINE + 5 +10E4 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1F30 + 8 +DRAHTANKER + 10 +5678.65625 + 20 +12065.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F31 + 8 +DRAHTANKER + 10 +5728.65625 + 20 +12065.782507 + 30 +0.0 + 0 +SEQEND + 5 +1F32 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +10E8 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1F33 + 8 +DRAHTANKER + 10 +5853.65625 + 20 +12140.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F34 + 8 +DRAHTANKER + 10 +5853.65625 + 20 +11990.782507 + 30 +0.0 + 0 +SEQEND + 5 +1F35 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +10EC + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1F36 + 8 +DRAHTANKER + 10 +5916.15625 + 20 +12115.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F37 + 8 +DRAHTANKER + 10 +5916.15625 + 20 +12020.782507 + 30 +0.0 + 0 +SEQEND + 5 +1F38 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +10F0 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1F39 + 8 +DRAHTANKER + 10 +5978.65625 + 20 +12065.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F3A + 8 +DRAHTANKER + 10 +6028.65625 + 20 +12065.782507 + 30 +0.0 + 0 +SEQEND + 5 +1F3B + 8 +DRAHTANKER + 0 +POLYLINE + 5 +10F4 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1F3C + 8 +DRAHTANKER + 10 +6053.65625 + 20 +12065.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F3D + 8 +DRAHTANKER + 10 +6103.65625 + 20 +12065.782507 + 30 +0.0 + 0 +SEQEND + 5 +1F3E + 8 +DRAHTANKER + 0 +POLYLINE + 5 +10F8 + 8 +ERDBODEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 5 + 40 +12.5 + 41 +12.5 + 75 + 6 + 0 +VERTEX + 5 +10F9 + 8 +ERDBODEN + 10 +4656.653978 + 20 +3326.420535 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +10FA + 8 +ERDBODEN + 10 +4611.533246 + 20 +3481.453371 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +10FB + 8 +ERDBODEN + 10 +4612.538438 + 20 +3494.15164 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +10FC + 8 +ERDBODEN + 10 +4615.344714 + 20 +3504.818406 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +10FD + 8 +ERDBODEN + 10 +4619.638123 + 20 +3513.536251 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +10FE + 8 +ERDBODEN + 10 +4625.104716 + 20 +3520.387756 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +10FF + 8 +ERDBODEN + 10 +4631.430541 + 20 +3525.455503 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1100 + 8 +ERDBODEN + 10 +4638.301649 + 20 +3528.822073 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1101 + 8 +ERDBODEN + 10 +4645.404088 + 20 +3530.570048 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1102 + 8 +ERDBODEN + 10 +4652.423909 + 20 +3530.782008 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1103 + 8 +ERDBODEN + 10 +4659.110502 + 20 +3529.543289 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1104 + 8 +ERDBODEN + 10 +4665.466621 + 20 +3526.950234 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1105 + 8 +ERDBODEN + 10 +4671.55836 + 20 +3523.101943 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1106 + 8 +ERDBODEN + 10 +4677.451815 + 20 +3518.097511 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1107 + 8 +ERDBODEN + 10 +4683.21308 + 20 +3512.036038 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1108 + 8 +ERDBODEN + 10 +4688.908251 + 20 +3505.01662 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1109 + 8 +ERDBODEN + 10 +4694.603421 + 20 +3497.138355 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +110A + 8 +ERDBODEN + 10 +4700.364687 + 20 +3488.500342 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +110B + 8 +ERDBODEN + 10 +4706.233356 + 20 +3479.201677 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +110C + 8 +ERDBODEN + 10 +4712.151597 + 20 +3469.341458 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +110D + 8 +ERDBODEN + 10 +4718.03679 + 20 +3459.018783 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +110E + 8 +ERDBODEN + 10 +4723.806317 + 20 +3448.33275 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +110F + 8 +ERDBODEN + 10 +4729.37756 + 20 +3437.382456 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1110 + 8 +ERDBODEN + 10 +4734.667899 + 20 +3426.266999 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1111 + 8 +ERDBODEN + 10 +4739.594718 + 20 +3415.085477 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1112 + 8 +ERDBODEN + 10 +4744.075396 + 20 +3403.936986 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1113 + 8 +ERDBODEN + 10 +4748.032823 + 20 +3392.917873 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1114 + 8 +ERDBODEN + 10 +4751.411921 + 20 +3382.113471 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1115 + 8 +ERDBODEN + 10 +4754.163118 + 20 +3371.606362 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1116 + 8 +ERDBODEN + 10 +4756.236843 + 20 +3361.479127 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1117 + 8 +ERDBODEN + 10 +4757.583525 + 20 +3351.814348 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1118 + 8 +ERDBODEN + 10 +4758.153593 + 20 +3342.694605 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1119 + 8 +ERDBODEN + 10 +4757.897475 + 20 +3334.202481 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +111A + 8 +ERDBODEN + 10 +4756.765602 + 20 +3326.420557 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +111B + 8 +ERDBODEN + 10 +4754.713908 + 20 +3319.431414 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +111C + 8 +ERDBODEN + 10 +4751.720364 + 20 +3313.317634 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +111D + 8 +ERDBODEN + 10 +4747.768444 + 20 +3308.161798 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +111E + 8 +ERDBODEN + 10 +4742.841626 + 20 +3304.046489 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +111F + 8 +ERDBODEN + 10 +4736.923385 + 20 +3301.054288 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1120 + 8 +ERDBODEN + 10 +4729.997199 + 20 +3299.267777 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1121 + 8 +ERDBODEN + 10 +4722.046542 + 20 +3298.769537 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1122 + 8 +ERDBODEN + 10 +4713.054893 + 20 +3299.64215 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1123 + 8 +ERDBODEN + 10 +4703.080082 + 20 +3301.899379 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1124 + 8 +ERDBODEN + 10 +4692.477371 + 20 +3305.279717 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1125 + 8 +ERDBODEN + 10 +4681.676376 + 20 +3309.452838 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1126 + 8 +ERDBODEN + 10 +4671.106712 + 20 +3314.088414 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1127 + 8 +ERDBODEN + 10 +4661.197997 + 20 +3318.856121 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1128 + 8 +ERDBODEN + 10 +4652.379846 + 20 +3323.425631 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1129 + 8 +ERDBODEN + 10 +4645.081876 + 20 +3327.466618 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +112A + 8 +ERDBODEN + 10 +4639.733703 + 20 +3330.648757 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +112B + 8 +ERDBODEN + 10 +4636.607969 + 20 +3332.784862 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +112C + 8 +ERDBODEN + 10 +4635.349413 + 20 +3334.260314 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +112D + 8 +ERDBODEN + 10 +4635.445802 + 20 +3335.603633 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +112E + 8 +ERDBODEN + 10 +4636.384899 + 20 +3337.343342 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +112F + 8 +ERDBODEN + 10 +4637.65447 + 20 +3340.007962 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1130 + 8 +ERDBODEN + 10 +4638.742281 + 20 +3344.126015 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1131 + 8 +ERDBODEN + 10 +4639.136096 + 20 +3350.226022 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1132 + 8 +ERDBODEN + 10 +4638.32368 + 20 +3358.836505 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1133 + 8 +ERDBODEN + 10 +4635.958037 + 20 +3370.290542 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1134 + 8 +ERDBODEN + 10 +4632.353115 + 20 +3384.139441 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1135 + 8 +ERDBODEN + 10 +4627.988103 + 20 +3399.739067 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1136 + 8 +ERDBODEN + 10 +4623.342187 + 20 +3416.445285 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1137 + 8 +ERDBODEN + 10 +4618.894557 + 20 +3433.61396 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1138 + 8 +ERDBODEN + 10 +4615.124398 + 20 +3450.600956 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1139 + 8 +ERDBODEN + 10 +4612.510898 + 20 +3466.762138 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +113A + 8 +ERDBODEN + 10 +4588.97288 + 20 +3504.003601 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +113B + 8 +ERDBODEN + 10 +4656.653978 + 20 +3546.28529 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +113C + 8 +ERDBODEN + 10 +4698.954664 + 20 +3495.54729 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +113D + 8 +ERDBODEN + 10 +4749.715487 + 20 +3402.527601 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +113E + 8 +ERDBODEN + 10 +4766.635762 + 20 +3317.964224 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +113F + 8 +ERDBODEN + 10 +4724.335076 + 20 +3284.138846 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1140 + 8 +ERDBODEN + 10 +4614.353292 + 20 +3343.33329 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1141 + 8 +ERDBODEN + 0 +POLYLINE + 5 +1142 + 8 +ERDBODEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 5 + 40 +12.5 + 41 +12.5 + 75 + 6 + 0 +VERTEX + 5 +1143 + 8 +ERDBODEN + 10 +4849.48898 + 20 +4097.413563 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1144 + 8 +ERDBODEN + 10 +4804.368248 + 20 +4252.446399 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1145 + 8 +ERDBODEN + 10 +4805.37344 + 20 +4265.144668 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1146 + 8 +ERDBODEN + 10 +4808.179716 + 20 +4275.811434 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1147 + 8 +ERDBODEN + 10 +4812.473126 + 20 +4284.529279 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1148 + 8 +ERDBODEN + 10 +4817.939718 + 20 +4291.380784 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1149 + 8 +ERDBODEN + 10 +4824.265543 + 20 +4296.448531 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +114A + 8 +ERDBODEN + 10 +4831.136651 + 20 +4299.815101 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +114B + 8 +ERDBODEN + 10 +4838.23909 + 20 +4301.563076 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +114C + 8 +ERDBODEN + 10 +4845.258911 + 20 +4301.775036 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +114D + 8 +ERDBODEN + 10 +4851.945504 + 20 +4300.536317 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +114E + 8 +ERDBODEN + 10 +4858.301623 + 20 +4297.943262 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +114F + 8 +ERDBODEN + 10 +4864.393362 + 20 +4294.094971 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1150 + 8 +ERDBODEN + 10 +4870.286817 + 20 +4289.090539 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1151 + 8 +ERDBODEN + 10 +4876.048083 + 20 +4283.029066 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1152 + 8 +ERDBODEN + 10 +4881.743253 + 20 +4276.009648 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1153 + 8 +ERDBODEN + 10 +4887.438424 + 20 +4268.131383 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1154 + 8 +ERDBODEN + 10 +4893.199689 + 20 +4259.49337 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1155 + 8 +ERDBODEN + 10 +4899.068358 + 20 +4250.194705 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1156 + 8 +ERDBODEN + 10 +4904.986599 + 20 +4240.334486 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1157 + 8 +ERDBODEN + 10 +4910.871792 + 20 +4230.011811 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1158 + 8 +ERDBODEN + 10 +4916.641319 + 20 +4219.325778 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1159 + 8 +ERDBODEN + 10 +4922.212562 + 20 +4208.375484 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +115A + 8 +ERDBODEN + 10 +4927.502902 + 20 +4197.260027 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +115B + 8 +ERDBODEN + 10 +4932.42972 + 20 +4186.078505 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +115C + 8 +ERDBODEN + 10 +4936.910398 + 20 +4174.930014 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +115D + 8 +ERDBODEN + 10 +4940.867825 + 20 +4163.910901 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +115E + 8 +ERDBODEN + 10 +4944.246923 + 20 +4153.106499 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +115F + 8 +ERDBODEN + 10 +4946.99812 + 20 +4142.59939 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1160 + 8 +ERDBODEN + 10 +4949.071845 + 20 +4132.472155 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1161 + 8 +ERDBODEN + 10 +4950.418527 + 20 +4122.807376 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1162 + 8 +ERDBODEN + 10 +4950.988595 + 20 +4113.687633 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1163 + 8 +ERDBODEN + 10 +4950.732478 + 20 +4105.195509 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1164 + 8 +ERDBODEN + 10 +4949.600604 + 20 +4097.413585 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1165 + 8 +ERDBODEN + 10 +4947.54891 + 20 +4090.424442 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1166 + 8 +ERDBODEN + 10 +4944.555366 + 20 +4084.310662 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1167 + 8 +ERDBODEN + 10 +4940.603446 + 20 +4079.154826 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1168 + 8 +ERDBODEN + 10 +4935.676628 + 20 +4075.039517 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1169 + 8 +ERDBODEN + 10 +4929.758387 + 20 +4072.047316 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +116A + 8 +ERDBODEN + 10 +4922.832201 + 20 +4070.260805 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +116B + 8 +ERDBODEN + 10 +4914.881545 + 20 +4069.762565 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +116C + 8 +ERDBODEN + 10 +4905.889895 + 20 +4070.635177 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +116D + 8 +ERDBODEN + 10 +4895.915085 + 20 +4072.892407 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +116E + 8 +ERDBODEN + 10 +4885.312373 + 20 +4076.272745 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +116F + 8 +ERDBODEN + 10 +4874.511378 + 20 +4080.445866 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1170 + 8 +ERDBODEN + 10 +4863.941714 + 20 +4085.081442 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1171 + 8 +ERDBODEN + 10 +4854.032999 + 20 +4089.849149 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1172 + 8 +ERDBODEN + 10 +4845.214848 + 20 +4094.418659 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1173 + 8 +ERDBODEN + 10 +4837.916878 + 20 +4098.459646 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1174 + 8 +ERDBODEN + 10 +4832.568705 + 20 +4101.641785 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1175 + 8 +ERDBODEN + 10 +4829.442971 + 20 +4103.77789 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1176 + 8 +ERDBODEN + 10 +4828.184416 + 20 +4105.253341 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1177 + 8 +ERDBODEN + 10 +4828.280804 + 20 +4106.596661 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1178 + 8 +ERDBODEN + 10 +4829.219901 + 20 +4108.33637 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1179 + 8 +ERDBODEN + 10 +4830.489473 + 20 +4111.00099 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +117A + 8 +ERDBODEN + 10 +4831.577283 + 20 +4115.119043 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +117B + 8 +ERDBODEN + 10 +4831.971098 + 20 +4121.21905 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +117C + 8 +ERDBODEN + 10 +4831.158683 + 20 +4129.829533 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +117D + 8 +ERDBODEN + 10 +4828.793039 + 20 +4141.28357 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +117E + 8 +ERDBODEN + 10 +4825.188117 + 20 +4155.132469 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +117F + 8 +ERDBODEN + 10 +4820.823105 + 20 +4170.732095 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1180 + 8 +ERDBODEN + 10 +4816.17719 + 20 +4187.438313 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1181 + 8 +ERDBODEN + 10 +4811.729559 + 20 +4204.606988 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1182 + 8 +ERDBODEN + 10 +4807.9594 + 20 +4221.593984 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1183 + 8 +ERDBODEN + 10 +4805.345901 + 20 +4237.755166 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1184 + 8 +ERDBODEN + 10 +4781.807882 + 20 +4274.996629 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1185 + 8 +ERDBODEN + 10 +4849.48898 + 20 +4317.278318 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1186 + 8 +ERDBODEN + 10 +4891.789666 + 20 +4266.540318 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1187 + 8 +ERDBODEN + 10 +4942.550489 + 20 +4173.520629 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1188 + 8 +ERDBODEN + 10 +4959.470764 + 20 +4088.957252 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1189 + 8 +ERDBODEN + 10 +4917.170078 + 20 +4055.131874 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +118A + 8 +ERDBODEN + 10 +4807.188294 + 20 +4114.326318 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +118B + 8 +ERDBODEN + 0 +POLYLINE + 5 +118C + 8 +ERDBODEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 5 + 40 +12.5 + 41 +12.5 + 75 + 6 + 0 +VERTEX + 5 +118D + 8 +ERDBODEN + 10 +5131.080443 + 20 +5303.451933 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +118E + 8 +ERDBODEN + 10 +5148.133859 + 20 +5425.619621 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +118F + 8 +ERDBODEN + 10 +5157.768082 + 20 +5434.151274 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1190 + 8 +ERDBODEN + 10 +5169.25088 + 20 +5440.602037 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1191 + 8 +ERDBODEN + 10 +5182.032676 + 20 +5445.021851 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1192 + 8 +ERDBODEN + 10 +5195.563894 + 20 +5447.460657 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1193 + 8 +ERDBODEN + 10 +5209.294959 + 20 +5447.968397 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1194 + 8 +ERDBODEN + 10 +5222.676295 + 20 +5446.59501 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1195 + 8 +ERDBODEN + 10 +5235.158326 + 20 +5443.390439 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1196 + 8 +ERDBODEN + 10 +5246.191475 + 20 +5438.404625 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1197 + 8 +ERDBODEN + 10 +5255.337193 + 20 +5431.723577 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1198 + 8 +ERDBODEN + 10 +5262.601031 + 20 +5423.577581 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1199 + 8 +ERDBODEN + 10 +5268.099564 + 20 +5414.232991 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +119A + 8 +ERDBODEN + 10 +5271.949371 + 20 +5403.956161 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +119B + 8 +ERDBODEN + 10 +5274.267026 + 20 +5393.013445 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +119C + 8 +ERDBODEN + 10 +5275.169108 + 20 +5381.671197 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +119D + 8 +ERDBODEN + 10 +5274.772191 + 20 +5370.195772 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +119E + 8 +ERDBODEN + 10 +5273.192854 + 20 +5358.853523 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +119F + 8 +ERDBODEN + 10 +5270.522691 + 20 +5347.896933 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11A0 + 8 +ERDBODEN + 10 +5266.753377 + 20 +5337.522992 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11A1 + 8 +ERDBODEN + 10 +5261.851604 + 20 +5327.914819 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11A2 + 8 +ERDBODEN + 10 +5255.784064 + 20 +5319.255532 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11A3 + 8 +ERDBODEN + 10 +5248.517451 + 20 +5311.728251 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11A4 + 8 +ERDBODEN + 10 +5240.018456 + 20 +5305.516094 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11A5 + 8 +ERDBODEN + 10 +5230.253774 + 20 +5300.802179 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11A6 + 8 +ERDBODEN + 10 +5219.190097 + 20 +5297.769626 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11A7 + 8 +ERDBODEN + 10 +5206.882936 + 20 +5296.512768 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11A8 + 8 +ERDBODEN + 10 +5193.743087 + 20 +5296.7708 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11A9 + 8 +ERDBODEN + 10 +5180.270164 + 20 +5298.194132 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11AA + 8 +ERDBODEN + 10 +5166.963779 + 20 +5300.433174 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11AB + 8 +ERDBODEN + 10 +5154.323547 + 20 +5303.138338 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11AC + 8 +ERDBODEN + 10 +5142.849082 + 20 +5305.960031 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11AD + 8 +ERDBODEN + 10 +5133.039997 + 20 +5308.548666 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11AE + 8 +ERDBODEN + 10 +5125.395907 + 20 +5310.554651 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11AF + 8 +ERDBODEN + 10 +5120.263765 + 20 +5311.7588 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11B0 + 8 +ERDBODEN + 10 +5117.379886 + 20 +5312.463535 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11B1 + 8 +ERDBODEN + 10 +5116.327925 + 20 +5313.101681 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11B2 + 8 +ERDBODEN + 10 +5116.691536 + 20 +5314.106064 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11B3 + 8 +ERDBODEN + 10 +5118.054374 + 20 +5315.909507 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11B4 + 8 +ERDBODEN + 10 +5120.000094 + 20 +5318.944838 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11B5 + 8 +ERDBODEN + 10 +5122.11235 + 20 +5323.64488 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11B6 + 8 +ERDBODEN + 10 +5123.974797 + 20 +5330.442459 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11B7 + 8 +ERDBODEN + 10 +5125.30432 + 20 +5339.601153 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11B8 + 8 +ERDBODEN + 10 +5126.350727 + 20 +5350.707561 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11B9 + 8 +ERDBODEN + 10 +5127.497056 + 20 +5363.179032 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11BA + 8 +ERDBODEN + 10 +5129.126344 + 20 +5376.432917 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11BB + 8 +ERDBODEN + 10 +5131.621631 + 20 +5389.886568 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11BC + 8 +ERDBODEN + 10 +5135.365953 + 20 +5402.957335 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11BD + 8 +ERDBODEN + 10 +5140.74235 + 20 +5415.062569 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11BE + 8 +ERDBODEN + 10 +5122.55359 + 20 +5448.348486 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +11BF + 8 +ERDBODEN + 10 +5267.50835 + 20 +5456.871851 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +11C0 + 8 +ERDBODEN + 10 +5284.561862 + 20 +5354.591863 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +11C1 + 8 +ERDBODEN + 10 +5233.401325 + 20 +5277.88184 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +11C2 + 8 +ERDBODEN + 10 +5096.973418 + 20 +5320.498533 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +11C3 + 8 +ERDBODEN + 0 +POLYLINE + 5 +11C4 + 8 +ERDBODEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 5 + 40 +12.5 + 41 +12.5 + 75 + 6 + 0 +VERTEX + 5 +11C5 + 8 +ERDBODEN + 10 +5357.134482 + 20 +4729.750892 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +11C6 + 8 +ERDBODEN + 10 +5220.362263 + 20 +4836.864477 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11C7 + 8 +ERDBODEN + 10 +5210.368175 + 20 +4854.385499 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11C8 + 8 +ERDBODEN + 10 +5202.538693 + 20 +4872.914014 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11C9 + 8 +ERDBODEN + 10 +5196.791197 + 20 +4892.136213 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11CA + 8 +ERDBODEN + 10 +5193.04307 + 20 +4911.738287 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11CB + 8 +ERDBODEN + 10 +5191.211693 + 20 +4931.406425 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11CC + 8 +ERDBODEN + 10 +5191.214447 + 20 +4950.826819 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11CD + 8 +ERDBODEN + 10 +5192.968713 + 20 +4969.685659 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11CE + 8 +ERDBODEN + 10 +5196.391874 + 20 +4987.669136 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11CF + 8 +ERDBODEN + 10 +5201.398557 + 20 +5004.490966 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11D0 + 8 +ERDBODEN + 10 +5207.892373 + 20 +5019.974978 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11D1 + 8 +ERDBODEN + 10 +5215.774181 + 20 +5033.972524 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11D2 + 8 +ERDBODEN + 10 +5224.944837 + 20 +5046.334958 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11D3 + 8 +ERDBODEN + 10 +5235.305201 + 20 +5056.913633 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11D4 + 8 +ERDBODEN + 10 +5246.756129 + 20 +5065.559904 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11D5 + 8 +ERDBODEN + 10 +5259.198479 + 20 +5072.125124 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11D6 + 8 +ERDBODEN + 10 +5272.533109 + 20 +5076.460647 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11D7 + 8 +ERDBODEN + 10 +5286.636092 + 20 +5078.486643 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11D8 + 8 +ERDBODEN + 10 +5301.284357 + 20 +5078.398556 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11D9 + 8 +ERDBODEN + 10 +5316.230049 + 20 +5076.460646 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11DA + 8 +ERDBODEN + 10 +5331.225311 + 20 +5072.937172 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11DB + 8 +ERDBODEN + 10 +5346.02229 + 20 +5068.092396 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11DC + 8 +ERDBODEN + 10 +5360.373128 + 20 +5062.190578 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11DD + 8 +ERDBODEN + 10 +5374.02997 + 20 +5055.495977 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11DE + 8 +ERDBODEN + 10 +5386.744962 + 20 +5048.272854 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11DF + 8 +ERDBODEN + 10 +5398.319818 + 20 +5040.711146 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11E0 + 8 +ERDBODEN + 10 +5408.754538 + 20 +5032.703498 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11E1 + 8 +ERDBODEN + 10 +5418.098693 + 20 +5024.068231 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11E2 + 8 +ERDBODEN + 10 +5426.401855 + 20 +5014.623666 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11E3 + 8 +ERDBODEN + 10 +5433.713595 + 20 +5004.188125 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11E4 + 8 +ERDBODEN + 10 +5440.083483 + 20 +4992.57993 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11E5 + 8 +ERDBODEN + 10 +5445.561092 + 20 +4979.617402 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11E6 + 8 +ERDBODEN + 10 +5450.195991 + 20 +4965.118861 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11E7 + 8 +ERDBODEN + 10 +5454.037753 + 20 +4948.987965 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11E8 + 8 +ERDBODEN + 10 +5457.135947 + 20 +4931.469703 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11E9 + 8 +ERDBODEN + 10 +5459.540147 + 20 +4912.894401 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11EA + 8 +ERDBODEN + 10 +5461.299921 + 20 +4893.592383 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11EB + 8 +ERDBODEN + 10 +5462.464842 + 20 +4873.893975 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11EC + 8 +ERDBODEN + 10 +5463.084481 + 20 +4854.1295 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11ED + 8 +ERDBODEN + 10 +5463.208409 + 20 +4834.629286 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11EE + 8 +ERDBODEN + 10 +5462.886197 + 20 +4815.723655 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11EF + 8 +ERDBODEN + 10 +5462.14263 + 20 +4797.720911 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11F0 + 8 +ERDBODEN + 10 +5460.903352 + 20 +4780.841273 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11F1 + 8 +ERDBODEN + 10 +5459.069221 + 20 +4765.282935 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11F2 + 8 +ERDBODEN + 10 +5456.541094 + 20 +4751.244094 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11F3 + 8 +ERDBODEN + 10 +5453.219829 + 20 +4738.922945 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11F4 + 8 +ERDBODEN + 10 +5449.006284 + 20 +4728.517684 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11F5 + 8 +ERDBODEN + 10 +5443.801317 + 20 +4720.226507 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11F6 + 8 +ERDBODEN + 10 +5437.505785 + 20 +4714.24761 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11F7 + 8 +ERDBODEN + 10 +5430.039824 + 20 +4710.710371 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11F8 + 8 +ERDBODEN + 10 +5421.40068 + 20 +4709.468896 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11F9 + 8 +ERDBODEN + 10 +5411.604877 + 20 +4710.308473 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11FA + 8 +ERDBODEN + 10 +5400.668938 + 20 +4713.01439 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11FB + 8 +ERDBODEN + 10 +5388.609387 + 20 +4717.371936 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11FC + 8 +ERDBODEN + 10 +5375.442747 + 20 +4723.166398 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11FD + 8 +ERDBODEN + 10 +5361.185543 + 20 +4730.183065 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11FE + 8 +ERDBODEN + 10 +5345.854299 + 20 +4738.207225 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +11FF + 8 +ERDBODEN + 10 +5329.531632 + 20 +4747.070963 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1200 + 8 +ERDBODEN + 10 +5312.56454 + 20 +4756.793547 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1201 + 8 +ERDBODEN + 10 +5295.366116 + 20 +4767.441042 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1202 + 8 +ERDBODEN + 10 +5278.349454 + 20 +4779.079515 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1203 + 8 +ERDBODEN + 10 +5261.927644 + 20 +4791.775029 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1204 + 8 +ERDBODEN + 10 +5246.513781 + 20 +4805.593651 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1205 + 8 +ERDBODEN + 10 +5232.520956 + 20 +4820.601445 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1206 + 8 +ERDBODEN + 10 +5196.391874 + 20 +4822.77058 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1207 + 8 +ERDBODEN + 10 +5179.4716 + 20 +5000.353647 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1208 + 8 +ERDBODEN + 10 +5264.072972 + 20 +5101.829646 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1209 + 8 +ERDBODEN + 10 +5399.435168 + 20 +5051.091647 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +120A + 8 +ERDBODEN + 10 +5458.656128 + 20 +4983.440891 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +120B + 8 +ERDBODEN + 10 +5467.116266 + 20 +4805.857959 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +120C + 8 +ERDBODEN + 10 +5450.195991 + 20 +4687.469203 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +120D + 8 +ERDBODEN + 0 +POLYLINE + 5 +120E + 8 +ERDBODEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 5 + 40 +12.5 + 41 +12.5 + 75 + 6 + 0 +VERTEX + 5 +120F + 8 +ERDBODEN + 10 +8330.442776 + 20 +3457.799361 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1210 + 8 +ERDBODEN + 10 +8281.725643 + 20 +3526.918659 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1211 + 8 +ERDBODEN + 10 +8280.743442 + 20 +3536.436061 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1212 + 8 +ERDBODEN + 10 +8281.234542 + 20 +3545.916645 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1213 + 8 +ERDBODEN + 10 +8283.051613 + 20 +3555.029052 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1214 + 8 +ERDBODEN + 10 +8286.047324 + 20 +3563.441919 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1215 + 8 +ERDBODEN + 10 +8290.074345 + 20 +3570.823888 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1216 + 8 +ERDBODEN + 10 +8294.985346 + 20 +3576.843599 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1217 + 8 +ERDBODEN + 10 +8300.632998 + 20 +3581.16969 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1218 + 8 +ERDBODEN + 10 +8306.86997 + 20 +3583.470801 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1219 + 8 +ERDBODEN + 10 +8313.545862 + 20 +3583.510686 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +121A + 8 +ERDBODEN + 10 +8320.497999 + 20 +3581.433548 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +121B + 8 +ERDBODEN + 10 +8327.560632 + 20 +3577.478701 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +121C + 8 +ERDBODEN + 10 +8334.568018 + 20 +3571.885463 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +121D + 8 +ERDBODEN + 10 +8341.354408 + 20 +3564.893149 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +121E + 8 +ERDBODEN + 10 +8347.754056 + 20 +3556.741075 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +121F + 8 +ERDBODEN + 10 +8353.601217 + 20 +3547.668557 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1220 + 8 +ERDBODEN + 10 +8358.730144 + 20 +3537.914911 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1221 + 8 +ERDBODEN + 10 +8363.005785 + 20 +3527.719452 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1222 + 8 +ERDBODEN + 10 +8366.415862 + 20 +3517.321497 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1223 + 8 +ERDBODEN + 10 +8368.978791 + 20 +3506.96036 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1224 + 8 +ERDBODEN + 10 +8370.712988 + 20 +3496.875357 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1225 + 8 +ERDBODEN + 10 +8371.63687 + 20 +3487.305803 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1226 + 8 +ERDBODEN + 10 +8371.768853 + 20 +3478.491014 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1227 + 8 +ERDBODEN + 10 +8371.127354 + 20 +3470.670306 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1228 + 8 +ERDBODEN + 10 +8369.730788 + 20 +3464.082992 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1229 + 8 +ERDBODEN + 10 +8367.619057 + 20 +3458.900891 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +122A + 8 +ERDBODEN + 10 +8364.918006 + 20 +3455.02582 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +122B + 8 +ERDBODEN + 10 +8361.774965 + 20 +3452.2921 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +122C + 8 +ERDBODEN + 10 +8358.337264 + 20 +3450.534051 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +122D + 8 +ERDBODEN + 10 +8354.752233 + 20 +3449.585992 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +122E + 8 +ERDBODEN + 10 +8351.167202 + 20 +3449.282243 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +122F + 8 +ERDBODEN + 10 +8347.729501 + 20 +3449.457125 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1230 + 8 +ERDBODEN + 10 +8344.58646 + 20 +3449.944957 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1231 + 8 +ERDBODEN + 10 +8341.83323 + 20 +3450.623013 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1232 + 8 +ERDBODEN + 10 +8339.356244 + 20 +3451.540384 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1233 + 8 +ERDBODEN + 10 +8336.989755 + 20 +3452.789115 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1234 + 8 +ERDBODEN + 10 +8334.568018 + 20 +3454.46125 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1235 + 8 +ERDBODEN + 10 +8331.925285 + 20 +3456.648834 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1236 + 8 +ERDBODEN + 10 +8328.895811 + 20 +3459.443913 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1237 + 8 +ERDBODEN + 10 +8325.313849 + 20 +3462.938531 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1238 + 8 +ERDBODEN + 10 +8321.013654 + 20 +3467.224732 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1239 + 8 +ERDBODEN + 10 +8315.909282 + 20 +3472.366949 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +123A + 8 +ERDBODEN + 10 +8310.234006 + 20 +3478.319158 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +123B + 8 +ERDBODEN + 10 +8304.300902 + 20 +3485.007725 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +123C + 8 +ERDBODEN + 10 +8298.423047 + 20 +3492.359012 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +123D + 8 +ERDBODEN + 10 +8292.913518 + 20 +3500.299385 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +123E + 8 +ERDBODEN + 10 +8288.085389 + 20 +3508.755208 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +123F + 8 +ERDBODEN + 10 +8284.251739 + 20 +3517.652844 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1240 + 8 +ERDBODEN + 10 +8264.438918 + 20 +3523.776875 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1241 + 8 +ERDBODEN + 10 +8302.155408 + 20 +3608.60509 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1242 + 8 +ERDBODEN + 10 +8368.159267 + 20 +3542.627575 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1243 + 8 +ERDBODEN + 10 +8377.58839 + 20 +3448.374076 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1244 + 8 +ERDBODEN + 10 +8339.871899 + 20 +3448.374076 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1245 + 8 +ERDBODEN + 0 +POLYLINE + 5 +1246 + 8 +ERDBODEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 5 + 40 +12.5 + 41 +12.5 + 75 + 6 + 0 +VERTEX + 5 +1247 + 8 +ERDBODEN + 10 +8031.123903 + 20 +3181.852322 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1248 + 8 +ERDBODEN + 10 +8020.184672 + 20 +3224.440612 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1249 + 8 +ERDBODEN + 10 +8021.711753 + 20 +3229.067238 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +124A + 8 +ERDBODEN + 10 +8024.088963 + 20 +3233.397113 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +124B + 8 +ERDBODEN + 10 +8027.248831 + 20 +3237.349306 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +124C + 8 +ERDBODEN + 10 +8031.123887 + 20 +3240.842883 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +124D + 8 +ERDBODEN + 10 +8035.64666 + 20 +3243.796911 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +124E + 8 +ERDBODEN + 10 +8040.74968 + 20 +3246.130458 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +124F + 8 +ERDBODEN + 10 +8046.365477 + 20 +3247.76259 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1250 + 8 +ERDBODEN + 10 +8052.42658 + 20 +3248.612376 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1251 + 8 +ERDBODEN + 10 +8058.849775 + 20 +3248.621364 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1252 + 8 +ERDBODEN + 10 +8065.488876 + 20 +3247.821027 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1253 + 8 +ERDBODEN + 10 +8072.181954 + 20 +3246.265322 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1254 + 8 +ERDBODEN + 10 +8078.76708 + 20 +3244.008204 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1255 + 8 +ERDBODEN + 10 +8085.082325 + 20 +3241.103629 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1256 + 8 +ERDBODEN + 10 +8090.965758 + 20 +3237.605552 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1257 + 8 +ERDBODEN + 10 +8096.255451 + 20 +3233.567929 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1258 + 8 +ERDBODEN + 10 +8100.789474 + 20 +3229.044716 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1259 + 8 +ERDBODEN + 10 +8104.434011 + 20 +3224.102233 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +125A + 8 +ERDBODEN + 10 +8107.167695 + 20 +3218.856256 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +125B + 8 +ERDBODEN + 10 +8108.997276 + 20 +3213.434929 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +125C + 8 +ERDBODEN + 10 +8109.929498 + 20 +3207.966393 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +125D + 8 +ERDBODEN + 10 +8109.97111 + 20 +3202.57879 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +125E + 8 +ERDBODEN + 10 +8109.128858 + 20 +3197.400262 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +125F + 8 +ERDBODEN + 10 +8107.40949 + 20 +3192.55895 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1260 + 8 +ERDBODEN + 10 +8104.819753 + 20 +3188.182998 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1261 + 8 +ERDBODEN + 10 +8101.390009 + 20 +3184.375818 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1262 + 8 +ERDBODEN + 10 +8097.245077 + 20 +3181.141905 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1263 + 8 +ERDBODEN + 10 +8092.533392 + 20 +3178.461028 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1264 + 8 +ERDBODEN + 10 +8087.403389 + 20 +3176.312954 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1265 + 8 +ERDBODEN + 10 +8082.003503 + 20 +3174.677449 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1266 + 8 +ERDBODEN + 10 +8076.482169 + 20 +3173.534282 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1267 + 8 +ERDBODEN + 10 +8070.987821 + 20 +3172.863218 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1268 + 8 +ERDBODEN + 10 +8065.668893 + 20 +3172.644027 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1269 + 8 +ERDBODEN + 10 +8060.645709 + 20 +3172.86097 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +126A + 8 +ERDBODEN + 10 +8055.92614 + 20 +3173.516297 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +126B + 8 +ERDBODEN + 10 +8051.489945 + 20 +3174.61675 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +126C + 8 +ERDBODEN + 10 +8047.316884 + 20 +3176.169075 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +126D + 8 +ERDBODEN + 10 +8043.386716 + 20 +3178.180016 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +126E + 8 +ERDBODEN + 10 +8039.679201 + 20 +3180.656316 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +126F + 8 +ERDBODEN + 10 +8036.174098 + 20 +3183.60472 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1270 + 8 +ERDBODEN + 10 +8032.851166 + 20 +3187.031972 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1271 + 8 +ERDBODEN + 10 +8029.709282 + 20 +3190.929079 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1272 + 8 +ERDBODEN + 10 +8026.823787 + 20 +3195.224103 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1273 + 8 +ERDBODEN + 10 +8024.28914 + 20 +3199.829366 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1274 + 8 +ERDBODEN + 10 +8022.199799 + 20 +3204.657193 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1275 + 8 +ERDBODEN + 10 +8020.650224 + 20 +3209.619907 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1276 + 8 +ERDBODEN + 10 +8019.734872 + 20 +3214.629832 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1277 + 8 +ERDBODEN + 10 +8019.548202 + 20 +3219.599293 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1278 + 8 +ERDBODEN + 10 +8010.396949 + 20 +3226.742664 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1279 + 8 +ERDBODEN + 10 +8048.396333 + 20 +3257.820693 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +127A + 8 +ERDBODEN + 10 +8110.577197 + 20 +3233.64882 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +127B + 8 +ERDBODEN + 10 +8114.031722 + 20 +3181.852322 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +127C + 8 +ERDBODEN + 10 +8062.214434 + 20 +3168.039879 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +127D + 8 +ERDBODEN + 0 +POLYLINE + 5 +127E + 8 +ERDBODEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 5 + 40 +12.5 + 41 +12.5 + 75 + 6 + 0 +VERTEX + 5 +127F + 8 +ERDBODEN + 10 +8107.122672 + 20 +3692.912321 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1280 + 8 +ERDBODEN + 10 +8162.970403 + 20 +3757.945847 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1281 + 8 +ERDBODEN + 10 +8170.097548 + 20 +3758.758536 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1282 + 8 +ERDBODEN + 10 +8177.130231 + 20 +3757.433265 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1283 + 8 +ERDBODEN + 10 +8183.920018 + 20 +3754.152131 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1284 + 8 +ERDBODEN + 10 +8190.318474 + 20 +3749.097232 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1285 + 8 +ERDBODEN + 10 +8196.177163 + 20 +3742.450666 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1286 + 8 +ERDBODEN + 10 +8201.347651 + 20 +3734.394532 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1287 + 8 +ERDBODEN + 10 +8205.681501 + 20 +3725.110926 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1288 + 8 +ERDBODEN + 10 +8209.030281 + 20 +3714.781946 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1289 + 8 +ERDBODEN + 10 +8211.269168 + 20 +3703.617792 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +128A + 8 +ERDBODEN + 10 +8212.367801 + 20 +3691.941069 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +128B + 8 +ERDBODEN + 10 +8212.319436 + 20 +3680.102482 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +128C + 8 +ERDBODEN + 10 +8211.117324 + 20 +3668.452737 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +128D + 8 +ERDBODEN + 10 +8208.75472 + 20 +3657.342542 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +128E + 8 +ERDBODEN + 10 +8205.224877 + 20 +3647.1226 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +128F + 8 +ERDBODEN + 10 +8200.52105 + 20 +3638.14362 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1290 + 8 +ERDBODEN + 10 +8194.636491 + 20 +3630.756306 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1291 + 8 +ERDBODEN + 10 +8187.616182 + 20 +3625.23268 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1292 + 8 +ERDBODEN + 10 +8179.712011 + 20 +3621.53003 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1293 + 8 +ERDBODEN + 10 +8171.227596 + 20 +3619.526956 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1294 + 8 +ERDBODEN + 10 +8162.466553 + 20 +3619.102061 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1295 + 8 +ERDBODEN + 10 +8153.732498 + 20 +3620.133946 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1296 + 8 +ERDBODEN + 10 +8145.329048 + 20 +3622.501214 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1297 + 8 +ERDBODEN + 10 +8137.55982 + 20 +3626.082467 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1298 + 8 +ERDBODEN + 10 +8130.72843 + 20 +3630.756306 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1299 + 8 +ERDBODEN + 10 +8125.083394 + 20 +3636.406953 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +129A + 8 +ERDBODEN + 10 +8120.652825 + 20 +3642.941112 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +129B + 8 +ERDBODEN + 10 +8117.409736 + 20 +3650.271106 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +129C + 8 +ERDBODEN + 10 +8115.32714 + 20 +3658.309257 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +129D + 8 +ERDBODEN + 10 +8114.37805 + 20 +3666.967888 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +129E + 8 +ERDBODEN + 10 +8114.535477 + 20 +3676.159323 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +129F + 8 +ERDBODEN + 10 +8115.772435 + 20 +3685.795885 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +12A0 + 8 +ERDBODEN + 10 +8118.061936 + 20 +3695.789897 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +12A1 + 8 +ERDBODEN + 10 +8121.36125 + 20 +3706.014339 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +12A2 + 8 +ERDBODEN + 10 +8125.564672 + 20 +3716.184825 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +12A3 + 8 +ERDBODEN + 10 +8130.550755 + 20 +3725.977626 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +12A4 + 8 +ERDBODEN + 10 +8136.19805 + 20 +3735.069014 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +12A5 + 8 +ERDBODEN + 10 +8142.38511 + 20 +3743.135258 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +12A6 + 8 +ERDBODEN + 10 +8148.990488 + 20 +3749.852631 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +12A7 + 8 +ERDBODEN + 10 +8155.892735 + 20 +3754.897404 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +12A8 + 8 +ERDBODEN + 10 +8162.394682 + 20 +3782.693135 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +12A9 + 8 +ERDBODEN + 10 +8221.121021 + 20 +3723.99022 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +12AA + 8 +ERDBODEN + 10 +8207.30292 + 20 +3610.037663 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +12AB + 8 +ERDBODEN + 10 +8117.486247 + 20 +3620.396963 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +12AC + 8 +ERDBODEN + 0 +POINT + 5 +12AD + 8 +ERDBODEN + 10 +4415.0 + 20 +3147.5 + 30 +0.0 + 0 +POINT + 5 +12AE + 8 +ERDBODEN + 10 +8302.5 + 20 +3972.5 + 30 +0.0 + 0 +POINT + 5 +12AF + 8 +ERDBODEN + 10 +8565.0 + 20 +3947.5 + 30 +0.0 + 0 +POLYLINE + 5 +12B0 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +37.4875 + 41 +37.4875 + 0 +VERTEX + 5 +1F3F + 8 +MAUERWERK + 10 +6322.4 + 20 +10965.782507 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +1F40 + 8 +MAUERWERK + 10 +6359.9125 + 20 +10965.782507 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +1F41 + 8 +MAUERWERK + 0 +POINT + 5 +12B4 + 8 +MAUERWERK + 10 +6353.65625 + 20 +10965.782507 + 30 +0.0 + 0 +POLYLINE + 5 +12B5 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +37.4875 + 41 +37.4875 + 0 +VERTEX + 5 +1F42 + 8 +MAUERWERK + 10 +6834.9 + 20 +10965.782507 + 30 +0.0 + 42 +1.0 + 0 +VERTEX + 5 +1F43 + 8 +MAUERWERK + 10 +6872.4125 + 20 +10965.782507 + 30 +0.0 + 42 +1.0 + 0 +SEQEND + 5 +1F44 + 8 +MAUERWERK + 0 +POINT + 5 +12B9 + 8 +MAUERWERK + 10 +6866.15625 + 20 +10965.782507 + 30 +0.0 + 0 +POLYLINE + 5 +12BA + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +1F45 + 8 +0 + 10 +18650.0 + 20 +125.0 + 30 +0.0 + 0 +VERTEX + 5 +1F46 + 8 +0 + 10 +18650.0 + 20 +1495.0 + 30 +0.0 + 0 +SEQEND + 5 +1F47 + 8 +0 + 0 +POLYLINE + 5 +12BE + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +1F48 + 8 +0 + 10 +17525.0 + 20 +125.0 + 30 +0.0 + 0 +VERTEX + 5 +1F49 + 8 +0 + 10 +17525.0 + 20 +1500.0 + 30 +0.0 + 0 +SEQEND + 5 +1F4A + 8 +0 + 0 +POLYLINE + 5 +12C2 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +1F4B + 8 +0 + 10 +17525.0 + 20 +500.0 + 30 +0.0 + 0 +VERTEX + 5 +1F4C + 8 +0 + 10 +20900.0 + 20 +500.0 + 30 +0.0 + 0 +SEQEND + 5 +1F4D + 8 +0 + 0 +POLYLINE + 5 +12C6 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +1F4E + 8 +0 + 10 +17525.0 + 20 +1125.0 + 30 +0.0 + 0 +VERTEX + 5 +1F4F + 8 +0 + 10 +20900.0 + 20 +1125.0 + 30 +0.0 + 0 +SEQEND + 5 +1F50 + 8 +0 + 0 +POLYLINE + 5 +12CA + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +1F51 + 8 +0 + 10 +17525.0 + 20 +250.0 + 30 +0.0 + 0 +VERTEX + 5 +1F52 + 8 +0 + 10 +16275.0 + 20 +250.0 + 30 +0.0 + 0 +SEQEND + 5 +1F53 + 8 +0 + 0 +POLYLINE + 5 +12CE + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +1F54 + 8 +0 + 10 +17525.0 + 20 +375.0 + 30 +0.0 + 0 +VERTEX + 5 +1F55 + 8 +0 + 10 +16275.0 + 20 +375.0 + 30 +0.0 + 0 +SEQEND + 5 +1F56 + 8 +0 + 0 +POLYLINE + 5 +12D2 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +1F57 + 8 +0 + 10 +17525.0 + 20 +500.0 + 30 +0.0 + 0 +VERTEX + 5 +1F58 + 8 +0 + 10 +16275.0 + 20 +500.0 + 30 +0.0 + 0 +SEQEND + 5 +1F59 + 8 +0 + 0 +POLYLINE + 5 +12D6 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +1F5A + 8 +0 + 10 +17525.0 + 20 +625.0 + 30 +0.0 + 0 +VERTEX + 5 +1F5B + 8 +0 + 10 +16275.0 + 20 +625.0 + 30 +0.0 + 0 +SEQEND + 5 +1F5C + 8 +0 + 0 +POLYLINE + 5 +12DA + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +1F5D + 8 +0 + 10 +17525.0 + 20 +750.0 + 30 +0.0 + 0 +VERTEX + 5 +1F5E + 8 +0 + 10 +16275.0 + 20 +750.0 + 30 +0.0 + 0 +SEQEND + 5 +1F5F + 8 +0 + 0 +POLYLINE + 5 +12DE + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +1F60 + 8 +0 + 10 +17525.0 + 20 +875.0 + 30 +0.0 + 0 +VERTEX + 5 +1F61 + 8 +0 + 10 +16275.0 + 20 +875.0 + 30 +0.0 + 0 +SEQEND + 5 +1F62 + 8 +0 + 0 +POLYLINE + 5 +12E2 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +1F63 + 8 +0 + 10 +17525.0 + 20 +1000.0 + 30 +0.0 + 0 +VERTEX + 5 +1F64 + 8 +0 + 10 +16275.0 + 20 +1000.0 + 30 +0.0 + 0 +SEQEND + 5 +1F65 + 8 +0 + 0 +POLYLINE + 5 +12E6 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +1F66 + 8 +0 + 10 +17525.0 + 20 +1125.0 + 30 +0.0 + 0 +VERTEX + 5 +1F67 + 8 +0 + 10 +16275.0 + 20 +1125.0 + 30 +0.0 + 0 +SEQEND + 5 +1F68 + 8 +0 + 0 +TEXT + 5 +12EA + 8 +LEGENDE-70 + 10 +19130.0 + 20 +730.0 + 30 +0.0 + 40 +175.0 + 1 +D1, D2, D3 + 41 +0.75 + 0 +POLYLINE + 5 +12EB + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +1F69 + 8 +0 + 10 +18650.0 + 20 +1375.0 + 30 +0.0 + 0 +VERTEX + 5 +1F6A + 8 +0 + 10 +20901.604101 + 20 +1375.0 + 30 +0.0 + 0 +SEQEND + 5 +1F6B + 8 +0 + 0 +TEXT + 5 +12EF + 8 +LEGENDE-35 + 10 +18745.266644 + 20 +1210.264338 + 30 +0.0 + 40 +87.5 + 1 +MASSTAB 1:10 1:5 + 0 +TEXT + 5 +12F0 + 8 +LEGENDE-35 + 10 +18730.0 + 20 +260.0 + 30 +0.0 + 40 +87.5 + 1 +Name + 0 +TEXT + 5 +12F1 + 8 +LEGENDE-35 + 10 +17705.0 + 20 +225.0 + 30 +0.0 + 40 +87.5 + 1 +001 + 0 +POLYLINE + 5 +12F2 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +1F6C + 8 +0 + 10 +20525.0 + 20 +125.0 + 30 +0.0 + 0 +VERTEX + 5 +1F6D + 8 +0 + 10 +20525.0 + 20 +495.0 + 30 +0.0 + 0 +SEQEND + 5 +1F6E + 8 +0 + 0 +TEXT + 5 +12F6 + 8 +LEGENDE-35 + 10 +20580.0 + 20 +365.0 + 30 +0.0 + 40 +87.5 + 1 +Blatt + 41 +0.75 + 0 +TEXT + 5 +12F7 + 8 +LEGENDE-35 + 10 +20670.0 + 20 +170.0 + 30 +0.0 + 40 +87.5 + 1 +6 + 0 +POLYLINE + 5 +12F8 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 0 +VERTEX + 5 +1F6F + 8 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1F70 + 8 +0 + 10 +21025.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1F71 + 8 +0 + 10 +21025.0 + 20 +14850.0 + 30 +0.0 + 0 +VERTEX + 5 +1F72 + 8 +0 + 10 +0.0 + 20 +14850.0 + 30 +0.0 + 0 +SEQEND + 5 +1F73 + 8 +0 + 0 +POLYLINE + 5 +12FE + 8 +ERDBODEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +1F74 + 8 +ERDBODEN + 10 +4517.777778 + 20 +2497.5 + 30 +0.0 + 0 +VERTEX + 5 +1F75 + 8 +ERDBODEN + 10 +4790.0 + 20 +2847.5 + 30 +0.0 + 0 +SEQEND + 5 +1F76 + 8 +ERDBODEN + 0 +POLYLINE + 5 +1302 + 8 +ERDBODEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +1F77 + 8 +ERDBODEN + 10 +4692.777778 + 20 +2497.5 + 30 +0.0 + 0 +VERTEX + 5 +1F78 + 8 +ERDBODEN + 10 +4965.0 + 20 +2847.5 + 30 +0.0 + 0 +SEQEND + 5 +1F79 + 8 +ERDBODEN + 0 +POLYLINE + 5 +1306 + 8 +SCHNITTKANTEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +1F7A + 8 +SCHNITTKANTEN + 10 +5321.15625 + 20 +12530.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F7B + 8 +SCHNITTKANTEN + 10 +7331.15625 + 20 +12530.782507 + 30 +0.0 + 0 +SEQEND + 5 +1F7C + 8 +SCHNITTKANTEN + 0 +POLYLINE + 5 +130A + 8 +VORSATZSCHALE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +1F7D + 8 +VORSATZSCHALE + 10 +6036.15625 + 20 +11275.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F7E + 8 +VORSATZSCHALE + 10 +6036.15625 + 20 +11415.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F7F + 8 +VORSATZSCHALE + 10 +6141.15625 + 20 +11415.782507 + 30 +0.0 + 0 +SEQEND + 5 +1F80 + 8 +VORSATZSCHALE + 0 +POLYLINE + 5 +130F + 8 +VORSATZSCHALE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1F81 + 8 +VORSATZSCHALE + 10 +6096.15625 + 20 +11275.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F82 + 8 +VORSATZSCHALE + 10 +6096.15625 + 20 +11335.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F83 + 8 +VORSATZSCHALE + 10 +6111.15625 + 20 +11345.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F84 + 8 +VORSATZSCHALE + 10 +6096.15625 + 20 +11360.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F85 + 8 +VORSATZSCHALE + 10 +6111.15625 + 20 +11370.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F86 + 8 +VORSATZSCHALE + 10 +6096.15625 + 20 +11380.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F87 + 8 +VORSATZSCHALE + 10 +6116.15625 + 20 +11395.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F88 + 8 +VORSATZSCHALE + 10 +6096.15625 + 20 +11410.782507 + 30 +0.0 + 0 +SEQEND + 5 +1F89 + 8 +VORSATZSCHALE + 0 +POLYLINE + 5 +1319 + 8 +VORSATZSCHALE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1F8A + 8 +VORSATZSCHALE + 10 +6026.15625 + 20 +11375.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F8B + 8 +VORSATZSCHALE + 10 +6066.15625 + 20 +11375.782507 + 30 +0.0 + 0 +SEQEND + 5 +1F8C + 8 +VORSATZSCHALE + 0 +POLYLINE + 5 +131D + 8 +VORSATZSCHALE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1F8D + 8 +VORSATZSCHALE + 10 +6091.15625 + 20 +11375.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F8E + 8 +VORSATZSCHALE + 10 +6121.15625 + 20 +11375.782507 + 30 +0.0 + 0 +SEQEND + 5 +1F8F + 8 +VORSATZSCHALE + 0 +POLYLINE + 5 +1321 + 8 +VORSATZSCHALE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1F90 + 8 +VORSATZSCHALE + 10 +6141.15625 + 20 +11375.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F91 + 8 +VORSATZSCHALE + 10 +6191.15625 + 20 +11375.782507 + 30 +0.0 + 0 +SEQEND + 5 +1F92 + 8 +VORSATZSCHALE + 0 +POLYLINE + 5 +1325 + 8 +VORSATZSCHALE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1F93 + 8 +VORSATZSCHALE + 10 +6216.15625 + 20 +11375.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F94 + 8 +VORSATZSCHALE + 10 +6271.15625 + 20 +11375.782507 + 30 +0.0 + 0 +SEQEND + 5 +1F95 + 8 +VORSATZSCHALE + 0 +POLYLINE + 5 +1329 + 8 +VORSATZSCHALE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1F96 + 8 +VORSATZSCHALE + 10 +6026.15625 + 20 +11375.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F97 + 8 +VORSATZSCHALE + 10 +6011.15625 + 20 +11390.782507 + 30 +0.0 + 0 +SEQEND + 5 +1F98 + 8 +VORSATZSCHALE + 0 +POLYLINE + 5 +132D + 8 +VORSATZSCHALE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1F99 + 8 +VORSATZSCHALE + 10 +6026.15625 + 20 +11375.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F9A + 8 +VORSATZSCHALE + 10 +6011.15625 + 20 +11360.782507 + 30 +0.0 + 0 +SEQEND + 5 +1F9B + 8 +VORSATZSCHALE + 0 +POLYLINE + 5 +1331 + 8 +VORSATZSCHALE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1F9C + 8 +VORSATZSCHALE + 10 +6026.15625 + 20 +11315.782507 + 30 +0.0 + 0 +VERTEX + 5 +1F9D + 8 +VORSATZSCHALE + 10 +6011.15625 + 20 +11300.782507 + 30 +0.0 + 0 +SEQEND + 5 +1F9E + 8 +VORSATZSCHALE + 0 +POLYLINE + 5 +1335 + 8 +VORSATZSCHALE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1F9F + 8 +VORSATZSCHALE + 10 +6026.15625 + 20 +11315.782507 + 30 +0.0 + 0 +VERTEX + 5 +1FA0 + 8 +VORSATZSCHALE + 10 +6011.15625 + 20 +11330.782507 + 30 +0.0 + 0 +SEQEND + 5 +1FA1 + 8 +VORSATZSCHALE + 0 +POLYLINE + 5 +1339 + 8 +VORSATZSCHALE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1FA2 + 8 +VORSATZSCHALE + 10 +6216.15625 + 20 +11315.782507 + 30 +0.0 + 0 +VERTEX + 5 +1FA3 + 8 +VORSATZSCHALE + 10 +6271.15625 + 20 +11315.782507 + 30 +0.0 + 0 +SEQEND + 5 +1FA4 + 8 +VORSATZSCHALE + 0 +POLYLINE + 5 +133D + 8 +VORSATZSCHALE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1FA5 + 8 +VORSATZSCHALE + 10 +6141.15625 + 20 +11315.782507 + 30 +0.0 + 0 +VERTEX + 5 +1FA6 + 8 +VORSATZSCHALE + 10 +6191.15625 + 20 +11315.782507 + 30 +0.0 + 0 +SEQEND + 5 +1FA7 + 8 +VORSATZSCHALE + 0 +POLYLINE + 5 +1341 + 8 +VORSATZSCHALE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1FA8 + 8 +VORSATZSCHALE + 10 +6091.15625 + 20 +11315.782507 + 30 +0.0 + 0 +VERTEX + 5 +1FA9 + 8 +VORSATZSCHALE + 10 +6121.15625 + 20 +11315.782507 + 30 +0.0 + 0 +SEQEND + 5 +1FAA + 8 +VORSATZSCHALE + 0 +POLYLINE + 5 +1345 + 8 +VORSATZSCHALE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1FAB + 8 +VORSATZSCHALE + 10 +6026.15625 + 20 +11315.782507 + 30 +0.0 + 0 +VERTEX + 5 +1FAC + 8 +VORSATZSCHALE + 10 +6066.15625 + 20 +11315.782507 + 30 +0.0 + 0 +SEQEND + 5 +1FAD + 8 +VORSATZSCHALE + 0 +POLYLINE + 5 +1349 + 8 +ESTRICH + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +1FAE + 8 +ESTRICH + 10 +7061.15625 + 20 +11865.782507 + 30 +0.0 + 0 +VERTEX + 5 +1FAF + 8 +ESTRICH + 10 +7141.15625 + 20 +11865.782507 + 30 +0.0 + 0 +VERTEX + 5 +1FB0 + 8 +ESTRICH + 10 +7141.15625 + 20 +11630.782507 + 30 +0.0 + 0 +VERTEX + 5 +1FB1 + 8 +ESTRICH + 10 +7061.15625 + 20 +11630.782507 + 30 +0.0 + 0 +SEQEND + 5 +1FB2 + 8 +ESTRICH + 0 +POLYLINE + 5 +134F + 8 +ESTRICH + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1FB3 + 8 +ESTRICH + 10 +7098.631736 + 20 +12115.796252 + 30 +0.0 + 0 +VERTEX + 5 +1FB4 + 8 +ESTRICH + 10 +7151.15625 + 20 +12075.782507 + 30 +0.0 + 0 +VERTEX + 5 +1FB5 + 8 +ESTRICH + 10 +7151.15625 + 20 +11930.782507 + 30 +0.0 + 0 +VERTEX + 5 +1FB6 + 8 +ESTRICH + 10 +7098.589174 + 20 +11965.768101 + 30 +0.0 + 0 +SEQEND + 5 +1FB7 + 8 +ESTRICH + 0 +POLYLINE + 5 +1355 + 8 +ESTRICH + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +1356 + 8 +ESTRICH + 10 +7133.193551 + 20 +11946.338012 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1357 + 8 +ESTRICH + 10 +7133.193551 + 20 +11946.338012 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1358 + 8 +ESTRICH + 10 +7134.786969 + 20 +11948.581252 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1359 + 8 +ESTRICH + 10 +7136.53263 + 20 +11950.598851 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +135A + 8 +ESTRICH + 10 +7138.414783 + 20 +11952.375069 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +135B + 8 +ESTRICH + 10 +7140.41768 + 20 +11953.894164 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +135C + 8 +ESTRICH + 10 +7142.525572 + 20 +11955.140395 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +135D + 8 +ESTRICH + 10 +7144.72271 + 20 +11956.098022 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +135E + 8 +ESTRICH + 10 +7146.993344 + 20 +11956.751303 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +135F + 8 +ESTRICH + 10 +7149.321725 + 20 +11957.084497 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1360 + 8 +ESTRICH + 10 +7137.225677 + 20 +11952.606847 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1361 + 8 +ESTRICH + 10 +7143.049712 + 20 +11956.636753 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1362 + 8 +ESTRICH + 10 +7149.321725 + 20 +11957.084497 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1363 + 8 +ESTRICH + 0 +POLYLINE + 5 +1364 + 8 +ESTRICH + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +1365 + 8 +ESTRICH + 10 +7119.305595 + 20 +11955.293416 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1366 + 8 +ESTRICH + 10 +7119.305595 + 20 +11955.293416 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1367 + 8 +ESTRICH + 10 +7121.931242 + 20 +11957.963663 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1368 + 8 +ESTRICH + 10 +7124.434832 + 20 +11960.283642 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1369 + 8 +ESTRICH + 10 +7126.820302 + 20 +11962.280904 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +136A + 8 +ESTRICH + 10 +7129.091589 + 20 +11963.982998 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +136B + 8 +ESTRICH + 10 +7131.252629 + 20 +11965.417476 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +136C + 8 +ESTRICH + 10 +7133.30736 + 20 +11966.611888 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +136D + 8 +ESTRICH + 10 +7135.259719 + 20 +11967.593784 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +136E + 8 +ESTRICH + 10 +7137.113641 + 20 +11968.390714 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +136F + 8 +ESTRICH + 10 +7138.876565 + 20 +11969.027606 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1370 + 8 +ESTRICH + 10 +7140.569925 + 20 +11969.518887 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1371 + 8 +ESTRICH + 10 +7142.218657 + 20 +11969.876362 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1372 + 8 +ESTRICH + 10 +7143.847698 + 20 +11970.111835 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1373 + 8 +ESTRICH + 10 +7145.481982 + 20 +11970.237112 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1374 + 8 +ESTRICH + 10 +7147.146446 + 20 +11970.263997 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1375 + 8 +ESTRICH + 10 +7148.866026 + 20 +11970.204294 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1376 + 8 +ESTRICH + 10 +7150.665656 + 20 +11970.069807 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1377 + 8 +ESTRICH + 10 +7126.473561 + 20 +11962.905588 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1378 + 8 +ESTRICH + 10 +7138.121632 + 20 +11970.069807 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1379 + 8 +ESTRICH + 10 +7145.737741 + 20 +11970.517655 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +137A + 8 +ESTRICH + 10 +7150.665656 + 20 +11970.069807 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +137B + 8 +ESTRICH + 0 +POLYLINE + 5 +137C + 8 +ESTRICH + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +137D + 8 +ESTRICH + 10 +7110.345553 + 20 +11962.009995 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +137E + 8 +ESTRICH + 10 +7110.345553 + 20 +11962.009995 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +137F + 8 +ESTRICH + 10 +7112.272548 + 20 +11966.339897 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1380 + 8 +ESTRICH + 10 +7114.337348 + 20 +11969.992893 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1381 + 8 +ESTRICH + 10 +7116.509767 + 20 +11973.068683 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1382 + 8 +ESTRICH + 10 +7118.759617 + 20 +11975.666967 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1383 + 8 +ESTRICH + 10 +7121.056713 + 20 +11977.887446 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1384 + 8 +ESTRICH + 10 +7123.370869 + 20 +11979.829818 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1385 + 8 +ESTRICH + 10 +7125.671897 + 20 +11981.593783 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1386 + 8 +ESTRICH + 10 +7127.929612 + 20 +11983.279041 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1387 + 8 +ESTRICH + 10 +7130.128701 + 20 +11984.973049 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1388 + 8 +ESTRICH + 10 +7132.313353 + 20 +11986.714284 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1389 + 8 +ESTRICH + 10 +7134.54263 + 20 +11988.528984 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +138A + 8 +ESTRICH + 10 +7136.875597 + 20 +11990.443384 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +138B + 8 +ESTRICH + 10 +7139.371314 + 20 +11992.483719 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +138C + 8 +ESTRICH + 10 +7142.088846 + 20 +11994.676225 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +138D + 8 +ESTRICH + 10 +7145.087255 + 20 +11997.047138 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +138E + 8 +ESTRICH + 10 +7148.425604 + 20 +11999.622693 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +138F + 8 +ESTRICH + 10 +7115.273634 + 20 +11974.547561 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1390 + 8 +ESTRICH + 10 +7128.713613 + 20 +11983.055117 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1391 + 8 +ESTRICH + 10 +7139.017586 + 20 +11992.458369 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1392 + 8 +ESTRICH + 10 +7148.425604 + 20 +11999.622693 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1393 + 8 +ESTRICH + 0 +POLYLINE + 5 +1394 + 8 +ESTRICH + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +1395 + 8 +ESTRICH + 10 +7102.281467 + 20 +11992.010521 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1396 + 8 +ESTRICH + 10 +7102.281467 + 20 +11992.010521 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1397 + 8 +ESTRICH + 10 +7107.166405 + 20 +11994.772161 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1398 + 8 +ESTRICH + 10 +7111.162773 + 20 +11997.354072 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1399 + 8 +ESTRICH + 10 +7114.41101 + 20 +11999.765439 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +139A + 8 +ESTRICH + 10 +7117.051554 + 20 +12002.015446 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +139B + 8 +ESTRICH + 10 +7119.224845 + 20 +12004.113277 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +139C + 8 +ESTRICH + 10 +7121.071321 + 20 +12006.068115 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +139D + 8 +ESTRICH + 10 +7122.731422 + 20 +12007.889144 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +139E + 8 +ESTRICH + 10 +7124.345587 + 20 +12009.585547 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +139F + 8 +ESTRICH + 10 +7126.045504 + 20 +12011.174381 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13A0 + 8 +ESTRICH + 10 +7127.92786 + 20 +12012.704182 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13A1 + 8 +ESTRICH + 10 +7130.080591 + 20 +12014.23136 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13A2 + 8 +ESTRICH + 10 +7132.591633 + 20 +12015.812325 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13A3 + 8 +ESTRICH + 10 +7135.548922 + 20 +12017.503485 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13A4 + 8 +ESTRICH + 10 +7139.040393 + 20 +12019.361251 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13A5 + 8 +ESTRICH + 10 +7143.153983 + 20 +12021.44203 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13A6 + 8 +ESTRICH + 10 +7147.977627 + 20 +12023.802232 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13A7 + 8 +ESTRICH + 10 +7116.617566 + 20 +11999.622693 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +13A8 + 8 +ESTRICH + 10 +7123.337555 + 20 +12010.816922 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +13A9 + 8 +ESTRICH + 10 +7134.089671 + 20 +12017.085653 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +13AA + 8 +ESTRICH + 10 +7147.977627 + 20 +12023.802232 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +13AB + 8 +ESTRICH + 0 +POLYLINE + 5 +13AC + 8 +ESTRICH + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +13AD + 8 +ESTRICH + 10 +7104.073541 + 20 +12010.369074 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +13AE + 8 +ESTRICH + 10 +7104.073541 + 20 +12010.369074 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13AF + 8 +ESTRICH + 10 +7108.149751 + 20 +12016.116179 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13B0 + 8 +ESTRICH + 10 +7111.693079 + 20 +12021.000103 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13B1 + 8 +ESTRICH + 10 +7114.779652 + 20 +12025.123171 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13B2 + 8 +ESTRICH + 10 +7117.485594 + 20 +12028.587703 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13B3 + 8 +ESTRICH + 10 +7119.887033 + 20 +12031.496023 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13B4 + 8 +ESTRICH + 10 +7122.060093 + 20 +12033.950452 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13B5 + 8 +ESTRICH + 10 +7124.080902 + 20 +12036.053313 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13B6 + 8 +ESTRICH + 10 +7126.025584 + 20 +12037.906929 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13B7 + 8 +ESTRICH + 10 +7127.970267 + 20 +12039.594381 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13B8 + 8 +ESTRICH + 10 +7129.991075 + 20 +12041.12179 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13B9 + 8 +ESTRICH + 10 +7132.164136 + 20 +12042.476038 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13BA + 8 +ESTRICH + 10 +7134.565574 + 20 +12043.644006 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13BB + 8 +ESTRICH + 10 +7137.271517 + 20 +12044.612574 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13BC + 8 +ESTRICH + 10 +7140.358089 + 20 +12045.368623 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13BD + 8 +ESTRICH + 10 +7143.901417 + 20 +12045.899035 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13BE + 8 +ESTRICH + 10 +7147.977627 + 20 +12046.190691 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13BF + 8 +ESTRICH + 10 +7115.721611 + 20 +12026.936546 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +13C0 + 8 +ESTRICH + 10 +7126.025584 + 20 +12039.474112 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +13C1 + 8 +ESTRICH + 10 +7136.329557 + 20 +12045.742946 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +13C2 + 8 +ESTRICH + 10 +7147.977627 + 20 +12046.190691 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +13C3 + 8 +ESTRICH + 0 +POLYLINE + 5 +13C4 + 8 +ESTRICH + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +13C5 + 8 +ESTRICH + 10 +7103.625564 + 20 +12045.295098 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +13C6 + 8 +ESTRICH + 10 +7103.625564 + 20 +12045.295098 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13C7 + 8 +ESTRICH + 10 +7108.895057 + 20 +12048.989859 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13C8 + 8 +ESTRICH + 10 +7113.651353 + 20 +12052.058879 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13C9 + 8 +ESTRICH + 10 +7117.948268 + 20 +12054.569062 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13CA + 8 +ESTRICH + 10 +7121.839616 + 20 +12056.587311 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13CB + 8 +ESTRICH + 10 +7125.37921 + 20 +12058.180527 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13CC + 8 +ESTRICH + 10 +7128.620865 + 20 +12059.415615 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13CD + 8 +ESTRICH + 10 +7131.618394 + 20 +12060.359478 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13CE + 8 +ESTRICH + 10 +7134.425612 + 20 +12061.079018 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13CF + 8 +ESTRICH + 10 +7137.079709 + 20 +12061.631517 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13D0 + 8 +ESTRICH + 10 +7139.551369 + 20 +12062.035779 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13D1 + 8 +ESTRICH + 10 +7141.794655 + 20 +12062.300986 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13D2 + 8 +ESTRICH + 10 +7143.763629 + 20 +12062.43632 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13D3 + 8 +ESTRICH + 10 +7145.412352 + 20 +12062.450963 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13D4 + 8 +ESTRICH + 10 +7146.694885 + 20 +12062.354098 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13D5 + 8 +ESTRICH + 10 +7147.56529 + 20 +12062.154906 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13D6 + 8 +ESTRICH + 10 +7147.977627 + 20 +12061.86257 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13D7 + 8 +ESTRICH + 10 +7118.40964 + 20 +12056.041583 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +13D8 + 8 +ESTRICH + 10 +7135.88158 + 20 +12062.758162 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +13D9 + 8 +ESTRICH + 10 +7147.52965 + 20 +12062.758162 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +13DA + 8 +ESTRICH + 10 +7147.977627 + 20 +12061.86257 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +13DB + 8 +ESTRICH + 0 +POLYLINE + 5 +13DC + 8 +ESTRICH + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +13DD + 8 +ESTRICH + 10 +7101.385512 + 20 +12073.056799 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +13DE + 8 +ESTRICH + 10 +7101.385512 + 20 +12073.056799 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13DF + 8 +ESTRICH + 10 +7106.187523 + 20 +12076.682689 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13E0 + 8 +ESTRICH + 10 +7111.073535 + 20 +12079.563461 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13E1 + 8 +ESTRICH + 10 +7115.875547 + 20 +12081.793568 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13E2 + 8 +ESTRICH + 10 +7120.425558 + 20 +12083.467463 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13E3 + 8 +ESTRICH + 10 +7124.555568 + 20 +12084.679597 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13E4 + 8 +ESTRICH + 10 +7128.097575 + 20 +12085.524423 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13E5 + 8 +ESTRICH + 10 +7130.883577 + 20 +12086.096392 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13E6 + 8 +ESTRICH + 10 +7132.745574 + 20 +12086.489957 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +13E7 + 8 +ESTRICH + 10 +7113.929537 + 20 +12083.803284 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +13E8 + 8 +ESTRICH + 10 +7129.16159 + 20 +12085.594365 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +13E9 + 8 +ESTRICH + 10 +7132.745574 + 20 +12086.489957 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +13EA + 8 +ESTRICH + 0 +POLYLINE + 5 +13EB + 8 +SCHNITTKANTEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +1FB8 + 8 +SCHNITTKANTEN + 10 +8606.15625 + 20 +12090.782507 + 30 +0.0 + 0 +VERTEX + 5 +1FB9 + 8 +SCHNITTKANTEN + 10 +8606.15625 + 20 +11075.782507 + 30 +0.0 + 0 +SEQEND + 5 +1FBA + 8 +SCHNITTKANTEN + 0 +POLYLINE + 5 +13EF + 8 +SCHNITTKANTEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +1FBB + 8 +SCHNITTKANTEN + 10 +5836.15625 + 20 +9540.782507 + 30 +0.0 + 0 +VERTEX + 5 +1FBC + 8 +SCHNITTKANTEN + 10 +7236.15625 + 20 +9540.782507 + 30 +0.0 + 0 +SEQEND + 5 +1FBD + 8 +SCHNITTKANTEN + 0 +INSERT + 5 +13F3 + 8 +SCHRAFFUR + 2 +*X3 + 10 +431.15625 + 20 +800.782507 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +DASH,I +1040 +200.0 +1040 +0.785398 +1002 +} + 0 +INSERT + 5 +13F4 + 8 +SCHRAFFUR + 2 +*X4 + 10 +431.15625 + 20 +800.782507 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +HONEY,I +1040 +200.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +13F5 + 8 +SCHRAFFUR + 2 +*X5 + 10 +431.15625 + 20 +800.782507 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI34,I +1040 +200.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +13F6 + 8 +SCHRAFFUR + 2 +*X6 + 10 +431.15625 + 20 +800.782507 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +1000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +13F7 + 8 +SCHRAFFUR + 2 +*X7 + 10 +431.15625 + 20 +800.782507 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +HONEY,I +1040 +200.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +13F8 + 8 +SCHRAFFUR + 2 +*X8 + 10 +431.15625 + 20 +800.782507 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +HONEY,I +1040 +200.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +13F9 + 8 +SCHRAFFUR + 2 +*X9 + 10 +431.15625 + 20 +800.782507 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +450.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +13FA + 8 +SCHRAFFUR + 2 +*X10 + 10 +431.15625 + 20 +800.782507 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +450.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +13FB + 8 +SCHRAFFUR + 2 +*X11 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +AR-SAND,I +1040 +450.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +13FC + 8 +SCHRAFFUR + 2 +*X12 + 10 +431.15625 + 20 +800.782507 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +AR-SAND,I +1040 +20.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +13FD + 8 +SCHRAFFUR + 2 +*X13 + 10 +431.15625 + 20 +800.782507 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +1000.0 +1040 +0.0 +1002 +} + 0 +POLYLINE + 5 +13FE + 8 +PE-FOLIE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +25.0 + 41 +25.0 + 0 +VERTEX + 5 +1FBE + 8 +PE-FOLIE + 10 +5503.65625 + 20 +11300.782507 + 30 +0.0 + 0 +VERTEX + 5 +1FBF + 8 +PE-FOLIE + 10 +5801.15625 + 20 +11300.782507 + 30 +0.0 + 0 +VERTEX + 5 +1FC0 + 8 +PE-FOLIE + 10 +6103.65625 + 20 +11645.782507 + 30 +0.0 + 0 +VERTEX + 5 +1FC1 + 8 +PE-FOLIE + 10 +7058.614038 + 20 +11645.782507 + 30 +0.0 + 0 +SEQEND + 5 +1FC2 + 8 +PE-FOLIE + 0 +INSERT + 5 +1404 + 8 +SCHRAFFUR + 2 +*X14 + 10 +431.15625 + 20 +800.782507 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +HONEY,I +1040 +125.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +1405 + 8 +SCHRAFFUR + 2 +*X15 + 10 +431.15625 + 20 +800.782507 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +1000.0 +1040 +0.0 +1002 +} + 0 +POLYLINE + 5 +1406 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1FC3 + 8 +MAUERWERK + 10 +7056.15625 + 20 +11225.782507 + 30 +0.0 + 0 +VERTEX + 5 +1FC4 + 8 +MAUERWERK + 10 +7093.65625 + 20 +11225.782507 + 30 +0.0 + 0 +VERTEX + 5 +1FC5 + 8 +MAUERWERK + 10 +7093.65625 + 20 +9540.782507 + 30 +0.0 + 0 +SEQEND + 5 +1FC6 + 8 +MAUERWERK + 0 +POLYLINE + 5 +140B + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1FC7 + 8 +MAUERWERK + 10 +7056.15625 + 20 +9540.782507 + 30 +0.0 + 0 +VERTEX + 5 +1FC8 + 8 +MAUERWERK + 10 +7056.15625 + 20 +11225.782507 + 30 +0.0 + 0 +SEQEND + 5 +1FC9 + 8 +MAUERWERK + 0 +POLYLINE + 5 +140F + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1FCA + 8 +MAUERWERK + 10 +6141.15625 + 20 +11130.782507 + 30 +0.0 + 0 +VERTEX + 5 +1FCB + 8 +MAUERWERK + 10 +6103.65625 + 20 +11130.782507 + 30 +0.0 + 0 +VERTEX + 5 +1FCC + 8 +MAUERWERK + 10 +6103.65625 + 20 +9540.782507 + 30 +0.0 + 0 +SEQEND + 5 +1FCD + 8 +MAUERWERK + 0 +POLYLINE + 5 +1414 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1FCE + 8 +MAUERWERK + 10 +6141.15625 + 20 +9540.782507 + 30 +0.0 + 0 +VERTEX + 5 +1FCF + 8 +MAUERWERK + 10 +6141.15625 + 20 +11130.782507 + 30 +0.0 + 0 +SEQEND + 5 +1FD0 + 8 +MAUERWERK + 0 +POLYLINE + 5 +1418 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +1FD1 + 8 +MAUERWERK + 10 +6141.15625 + 20 +9540.782507 + 30 +0.0 + 0 +VERTEX + 5 +1FD2 + 8 +MAUERWERK + 10 +6141.15625 + 20 +9855.782507 + 30 +0.0 + 0 +SEQEND + 5 +1FD3 + 8 +MAUERWERK + 0 +POLYLINE + 5 +141C + 8 +PE-FOLIE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +25.0 + 41 +25.0 + 0 +VERTEX + 5 +1FD4 + 8 +PE-FOLIE + 10 +7061.15625 + 20 +9870.782507 + 30 +0.0 + 0 +VERTEX + 5 +1FD5 + 8 +PE-FOLIE + 10 +6126.15625 + 20 +9870.782507 + 30 +0.0 + 0 +VERTEX + 5 +1FD6 + 8 +PE-FOLIE + 10 +6126.15625 + 20 +9540.782507 + 30 +0.0 + 0 +SEQEND + 5 +1FD7 + 8 +PE-FOLIE + 0 +POLYLINE + 5 +1421 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +1FD8 + 8 +MAUERWERK + 10 +6136.15625 + 20 +9855.782507 + 30 +0.0 + 0 +VERTEX + 5 +1FD9 + 8 +MAUERWERK + 10 +7056.15625 + 20 +9855.782507 + 30 +0.0 + 0 +VERTEX + 5 +1FDA + 8 +MAUERWERK + 10 +7054.462701 + 20 +9540.782507 + 30 +0.0 + 0 +SEQEND + 5 +1FDB + 8 +MAUERWERK + 0 +POLYLINE + 5 +1426 + 8 +DECKEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +1FDC + 8 +DECKEN + 10 +6141.15625 + 20 +11141.921786 + 30 +0.0 + 0 +VERTEX + 5 +1FDD + 8 +DECKEN + 10 +7053.65625 + 20 +11141.921786 + 30 +0.0 + 0 +VERTEX + 5 +1FDE + 8 +DECKEN + 10 +7053.65625 + 20 +11228.282507 + 30 +0.0 + 0 +VERTEX + 5 +1FDF + 8 +DECKEN + 10 +8606.15625 + 20 +11228.282507 + 30 +0.0 + 0 +SEQEND + 5 +1FE0 + 8 +DECKEN + 0 +POLYLINE + 5 +142C + 8 +DECKEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +1FE1 + 8 +DECKEN + 10 +8606.15625 + 20 +11628.282507 + 30 +0.0 + 0 +VERTEX + 5 +1FE2 + 8 +DECKEN + 10 +6141.15625 + 20 +11628.282507 + 30 +0.0 + 0 +VERTEX + 5 +1FE3 + 8 +DECKEN + 10 +6141.15625 + 20 +11141.921786 + 30 +0.0 + 0 +SEQEND + 5 +1FE4 + 8 +DECKEN + 0 +POLYLINE + 5 +1431 + 8 +ESTRICH + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +1FE5 + 8 +ESTRICH + 10 +8606.15625 + 20 +11728.282507 + 30 +0.0 + 0 +VERTEX + 5 +1FE6 + 8 +ESTRICH + 10 +7141.15625 + 20 +11728.282507 + 30 +0.0 + 0 +VERTEX + 5 +1FE7 + 8 +ESTRICH + 10 +7141.15625 + 20 +11628.282507 + 30 +0.0 + 0 +SEQEND + 5 +1FE8 + 8 +ESTRICH + 0 +POLYLINE + 5 +1436 + 8 +PE-FOLIE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +25.0 + 41 +25.0 + 0 +VERTEX + 5 +1FE9 + 8 +PE-FOLIE + 10 +7140.773723 + 20 +11745.782507 + 30 +0.0 + 0 +VERTEX + 5 +1FEA + 8 +PE-FOLIE + 10 +8606.15625 + 20 +11745.782507 + 30 +0.0 + 0 +SEQEND + 5 +1FEB + 8 +PE-FOLIE + 0 +POLYLINE + 5 +143A + 8 +ESTRICH + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +1FEC + 8 +ESTRICH + 10 +7141.15625 + 20 +11765.782507 + 30 +0.0 + 0 +VERTEX + 5 +1FED + 8 +ESTRICH + 10 +7141.15625 + 20 +11865.782507 + 30 +0.0 + 0 +VERTEX + 5 +1FEE + 8 +ESTRICH + 10 +8606.15625 + 20 +11865.782507 + 30 +0.0 + 0 +SEQEND + 5 +1FEF + 8 +ESTRICH + 0 +POLYLINE + 5 +143F + 8 +ESTRICH + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +1FF0 + 8 +ESTRICH + 10 +8606.15625 + 20 +11765.782507 + 30 +0.0 + 0 +VERTEX + 5 +1FF1 + 8 +ESTRICH + 10 +7141.15625 + 20 +11765.782507 + 30 +0.0 + 0 +SEQEND + 5 +1FF2 + 8 +ESTRICH + 0 +POLYLINE + 5 +1443 + 8 +ESTRICH + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +1FF3 + 8 +ESTRICH + 10 +7141.15625 + 20 +11865.782507 + 30 +0.0 + 0 +VERTEX + 5 +1FF4 + 8 +ESTRICH + 10 +7141.15625 + 20 +11928.282507 + 30 +0.0 + 0 +VERTEX + 5 +1FF5 + 8 +ESTRICH + 10 +8606.15625 + 20 +11928.282507 + 30 +0.0 + 0 +SEQEND + 5 +1FF6 + 8 +ESTRICH + 0 +POLYLINE + 5 +1448 + 8 +ESTRICH + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +1FF7 + 8 +ESTRICH + 10 +8606.15625 + 20 +11865.782507 + 30 +0.0 + 0 +VERTEX + 5 +1FF8 + 8 +ESTRICH + 10 +7141.15625 + 20 +11865.782507 + 30 +0.0 + 0 +SEQEND + 5 +1FF9 + 8 +ESTRICH + 0 +LINE + 5 +144C + 8 +0 + 62 + 0 + 10 +7462.0437 + 20 +11225.782507 + 30 +0.0 + 11 +7863.49178 + 21 +11627.230587 + 31 +0.0 + 0 +LINE + 5 +144D + 8 +0 + 62 + 0 + 10 +6957.779631 + 20 +11145.782507 + 30 +0.0 + 11 +7439.227711 + 21 +11627.230587 + 31 +0.0 + 0 +LINE + 5 +144E + 8 +0 + 62 + 0 + 10 +6533.515563 + 20 +11145.782507 + 30 +0.0 + 11 +7014.963642 + 21 +11627.230587 + 31 +0.0 + 0 +LINE + 5 +144F + 8 +0 + 62 + 0 + 10 +6141.15625 + 20 +11177.687263 + 30 +0.0 + 11 +6590.699573 + 21 +11627.230587 + 31 +0.0 + 0 +LINE + 5 +1450 + 8 +0 + 62 + 0 + 10 +6141.15625 + 20 +11601.951332 + 30 +0.0 + 11 +6166.435505 + 21 +11627.230587 + 31 +0.0 + 0 +LINE + 5 +1451 + 8 +0 + 62 + 0 + 10 +7886.307769 + 20 +11225.782507 + 30 +0.0 + 11 +8287.755848 + 21 +11627.230587 + 31 +0.0 + 0 +LINE + 5 +1452 + 8 +0 + 62 + 0 + 10 +8310.571837 + 20 +11225.782507 + 30 +0.0 + 11 +8606.15625 + 21 +11521.366919 + 31 +0.0 + 0 +LINE + 5 +1453 + 8 +0 + 62 + 0 + 10 +7696.678426 + 20 +11248.285199 + 30 +0.0 + 11 +7802.744443 + 21 +11354.351216 + 31 +0.0 + 0 +LINE + 5 +1454 + 8 +0 + 62 + 0 + 10 +7855.777452 + 20 +11407.384225 + 30 +0.0 + 11 +7961.843469 + 21 +11513.450242 + 31 +0.0 + 0 +LINE + 5 +1455 + 8 +0 + 62 + 0 + 10 +8014.876478 + 20 +11566.483251 + 30 +0.0 + 11 +8075.623814 + 21 +11627.230587 + 31 +0.0 + 0 +LINE + 5 +1456 + 8 +0 + 62 + 0 + 10 +7249.911665 + 20 +11225.782507 + 30 +0.0 + 11 +7272.414357 + 21 +11248.285199 + 31 +0.0 + 0 +LINE + 5 +1457 + 8 +0 + 62 + 0 + 10 +7325.447366 + 20 +11301.318208 + 30 +0.0 + 11 +7431.513383 + 21 +11407.384225 + 31 +0.0 + 0 +LINE + 5 +1458 + 8 +0 + 62 + 0 + 10 +7484.546392 + 20 +11460.417233 + 30 +0.0 + 11 +7590.612409 + 21 +11566.483251 + 31 +0.0 + 0 +LINE + 5 +1459 + 8 +0 + 62 + 0 + 10 +7643.645417 + 20 +11619.516259 + 30 +0.0 + 11 +7651.359745 + 21 +11627.230587 + 31 +0.0 + 0 +LINE + 5 +145A + 8 +0 + 62 + 0 + 10 +6795.11728 + 20 +11195.25219 + 30 +0.0 + 11 +6901.183297 + 21 +11301.318208 + 31 +0.0 + 0 +LINE + 5 +145B + 8 +0 + 62 + 0 + 10 +6954.216306 + 20 +11354.351216 + 30 +0.0 + 11 +7060.282323 + 21 +11460.417233 + 31 +0.0 + 0 +LINE + 5 +145C + 8 +0 + 62 + 0 + 10 +7113.315331 + 20 +11513.450242 + 30 +0.0 + 11 +7219.381349 + 21 +11619.516259 + 31 +0.0 + 0 +LINE + 5 +145D + 8 +0 + 62 + 0 + 10 +6321.383528 + 20 +11145.782507 + 30 +0.0 + 11 +6370.853211 + 21 +11195.25219 + 31 +0.0 + 0 +LINE + 5 +145E + 8 +0 + 62 + 0 + 10 +6423.88622 + 20 +11248.285199 + 30 +0.0 + 11 +6529.952237 + 21 +11354.351216 + 31 +0.0 + 0 +LINE + 5 +145F + 8 +0 + 62 + 0 + 10 +6582.985246 + 20 +11407.384225 + 30 +0.0 + 11 +6689.051263 + 21 +11513.450242 + 31 +0.0 + 0 +LINE + 5 +1460 + 8 +0 + 62 + 0 + 10 +6742.084271 + 20 +11566.483251 + 30 +0.0 + 11 +6802.831607 + 21 +11627.230587 + 31 +0.0 + 0 +LINE + 5 +1461 + 8 +0 + 62 + 0 + 10 +6141.15625 + 20 +11389.819298 + 30 +0.0 + 11 +6158.721177 + 21 +11407.384225 + 31 +0.0 + 0 +LINE + 5 +1462 + 8 +0 + 62 + 0 + 10 +6211.754185 + 20 +11460.417233 + 30 +0.0 + 11 +6317.820203 + 21 +11566.483251 + 31 +0.0 + 0 +LINE + 5 +1463 + 8 +0 + 62 + 0 + 10 +6370.853211 + 20 +11619.516259 + 30 +0.0 + 11 +6378.567539 + 21 +11627.230587 + 31 +0.0 + 0 +LINE + 5 +1464 + 8 +0 + 62 + 0 + 10 +8098.439803 + 20 +11225.782507 + 30 +0.0 + 11 +8173.975503 + 21 +11301.318208 + 31 +0.0 + 0 +LINE + 5 +1465 + 8 +0 + 62 + 0 + 10 +8227.008512 + 20 +11354.351216 + 30 +0.0 + 11 +8333.074529 + 21 +11460.417233 + 31 +0.0 + 0 +LINE + 5 +1466 + 8 +0 + 62 + 0 + 10 +8386.107538 + 20 +11513.450242 + 30 +0.0 + 11 +8492.173555 + 21 +11619.516259 + 31 +0.0 + 0 +LINE + 5 +1467 + 8 +0 + 62 + 0 + 10 +8522.703871 + 20 +11225.782507 + 30 +0.0 + 11 +8545.206563 + 21 +11248.285199 + 31 +0.0 + 0 +LINE + 5 +1468 + 8 +0 + 62 + 0 + 10 +8598.239572 + 20 +11301.318208 + 30 +0.0 + 11 +8606.15625 + 21 +11309.234885 + 31 +0.0 + 0 +POLYLINE + 5 +1469 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1FFA + 8 +MAUERWERK + 10 +7061.15625 + 20 +11865.782507 + 30 +0.0 + 0 +VERTEX + 5 +1FFB + 8 +MAUERWERK + 10 +7098.65625 + 20 +11865.782507 + 30 +0.0 + 0 +VERTEX + 5 +1FFC + 8 +MAUERWERK + 10 +7098.65625 + 20 +12530.782507 + 30 +0.0 + 0 +SEQEND + 5 +1FFD + 8 +MAUERWERK + 0 +POLYLINE + 5 +146E + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1FFE + 8 +MAUERWERK + 10 +7061.15625 + 20 +12530.782507 + 30 +0.0 + 0 +VERTEX + 5 +1FFF + 8 +MAUERWERK + 10 +7061.15625 + 20 +11865.782507 + 30 +0.0 + 0 +SEQEND + 5 +2000 + 8 +MAUERWERK + 0 +POLYLINE + 5 +1472 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +2001 + 8 +MAUERWERK + 10 +6141.15625 + 20 +12530.782507 + 30 +0.0 + 0 +VERTEX + 5 +2002 + 8 +MAUERWERK + 10 +6141.15625 + 20 +11664.071973 + 30 +0.0 + 0 +SEQEND + 5 +2003 + 8 +MAUERWERK + 0 +POLYLINE + 5 +1476 + 8 +DAEMMUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2004 + 8 +DAEMMUNG + 10 +5941.15625 + 20 +12530.782507 + 30 +0.0 + 0 +VERTEX + 5 +2005 + 8 +DAEMMUNG + 10 +5941.15625 + 20 +11278.282507 + 30 +0.0 + 0 +VERTEX + 5 +2006 + 8 +DAEMMUNG + 10 +6141.15625 + 20 +11278.282507 + 30 +0.0 + 0 +VERTEX + 5 +2007 + 8 +DAEMMUNG + 10 +6141.15625 + 20 +12530.782507 + 30 +0.0 + 0 +SEQEND + 5 +2008 + 8 +DAEMMUNG + 0 +POLYLINE + 5 +147C + 8 +VORSATZSCHALE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +2009 + 8 +VORSATZSCHALE + 10 +5791.15625 + 20 +12530.782507 + 30 +0.0 + 0 +VERTEX + 5 +200A + 8 +VORSATZSCHALE + 10 +5791.15625 + 20 +11498.282507 + 30 +0.0 + 0 +VERTEX + 5 +200B + 8 +VORSATZSCHALE + 10 +5503.65625 + 20 +11498.282507 + 30 +0.0 + 0 +SEQEND + 5 +200C + 8 +VORSATZSCHALE + 0 +POLYLINE + 5 +1481 + 8 +VORSATZSCHALE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +200D + 8 +VORSATZSCHALE + 10 +5503.65625 + 20 +11498.282507 + 30 +0.0 + 0 +VERTEX + 5 +200E + 8 +VORSATZSCHALE + 10 +5503.65625 + 20 +12530.782507 + 30 +0.0 + 0 +SEQEND + 5 +200F + 8 +VORSATZSCHALE + 0 +POLYLINE + 5 +1485 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +2010 + 8 +MAUERWERK + 10 +6141.15625 + 20 +11665.782507 + 30 +0.0 + 0 +VERTEX + 5 +2011 + 8 +MAUERWERK + 10 +7061.15625 + 20 +11665.782507 + 30 +0.0 + 0 +VERTEX + 5 +2012 + 8 +MAUERWERK + 10 +7061.15625 + 20 +12530.782507 + 30 +0.0 + 0 +SEQEND + 5 +2013 + 8 +MAUERWERK + 0 +POLYLINE + 5 +148A + 8 +ESTRICH + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +2014 + 8 +ESTRICH + 10 +7083.556019 + 20 +11628.282507 + 30 +0.0 + 0 +VERTEX + 5 +2015 + 8 +ESTRICH + 10 +8606.15625 + 20 +11628.282507 + 30 +0.0 + 0 +SEQEND + 5 +2016 + 8 +ESTRICH + 0 +LINE + 5 +148E + 8 +0 + 62 + 0 + 10 +6116.244194 + 20 +10101.004597 + 30 +0.0 + 11 +6116.244194 + 21 +10101.004597 + 31 +0.0 + 0 +LINE + 5 +148F + 8 +0 + 62 + 0 + 10 +6140.362135 + 20 +10119.510945 + 30 +0.0 + 11 +6140.362135 + 21 +10119.510945 + 31 +0.0 + 0 +LINE + 5 +1490 + 8 +0 + 62 + 0 + 10 +6114.984326 + 20 +10139.541073 + 30 +0.0 + 11 +6114.984326 + 21 +10139.541073 + 31 +0.0 + 0 +LINE + 5 +1491 + 8 +0 + 62 + 0 + 10 +6139.102268 + 20 +10158.04742 + 30 +0.0 + 11 +6139.102268 + 21 +10158.04742 + 31 +0.0 + 0 +LINE + 5 +1492 + 8 +0 + 62 + 0 + 10 +6113.724459 + 20 +10178.077548 + 30 +0.0 + 11 +6113.724459 + 21 +10178.077548 + 31 +0.0 + 0 +LINE + 5 +1493 + 8 +0 + 62 + 0 + 10 +6137.842401 + 20 +10196.583896 + 30 +0.0 + 11 +6137.842401 + 21 +10196.583896 + 31 +0.0 + 0 +LINE + 5 +1494 + 8 +0 + 62 + 0 + 10 +6112.464592 + 20 +10216.614023 + 30 +0.0 + 11 +6112.464592 + 21 +10216.614023 + 31 +0.0 + 0 +LINE + 5 +1495 + 8 +0 + 62 + 0 + 10 +6136.582534 + 20 +10235.120371 + 30 +0.0 + 11 +6136.582534 + 21 +10235.120371 + 31 +0.0 + 0 +LINE + 5 +1496 + 8 +0 + 62 + 0 + 10 +6111.204725 + 20 +10255.150499 + 30 +0.0 + 11 +6111.204725 + 21 +10255.150499 + 31 +0.0 + 0 +LINE + 5 +1497 + 8 +0 + 62 + 0 + 10 +6135.322666 + 20 +10273.656846 + 30 +0.0 + 11 +6135.322666 + 21 +10273.656846 + 31 +0.0 + 0 +LINE + 5 +1498 + 8 +0 + 62 + 0 + 10 +6109.944858 + 20 +10293.686974 + 30 +0.0 + 11 +6109.944858 + 21 +10293.686974 + 31 +0.0 + 0 +LINE + 5 +1499 + 8 +0 + 62 + 0 + 10 +6134.062799 + 20 +10312.193322 + 30 +0.0 + 11 +6134.062799 + 21 +10312.193322 + 31 +0.0 + 0 +LINE + 5 +149A + 8 +0 + 62 + 0 + 10 +6108.684991 + 20 +10332.22345 + 30 +0.0 + 11 +6108.684991 + 21 +10332.22345 + 31 +0.0 + 0 +LINE + 5 +149B + 8 +0 + 62 + 0 + 10 +6132.802932 + 20 +10350.729797 + 30 +0.0 + 11 +6132.802932 + 21 +10350.729797 + 31 +0.0 + 0 +LINE + 5 +149C + 8 +0 + 62 + 0 + 10 +6107.425123 + 20 +10370.759925 + 30 +0.0 + 11 +6107.425123 + 21 +10370.759925 + 31 +0.0 + 0 +LINE + 5 +149D + 8 +0 + 62 + 0 + 10 +6131.543065 + 20 +10389.266272 + 30 +0.0 + 11 +6131.543065 + 21 +10389.266272 + 31 +0.0 + 0 +LINE + 5 +149E + 8 +0 + 62 + 0 + 10 +6106.165256 + 20 +10409.2964 + 30 +0.0 + 11 +6106.165256 + 21 +10409.2964 + 31 +0.0 + 0 +LINE + 5 +149F + 8 +0 + 62 + 0 + 10 +6130.283198 + 20 +10427.802748 + 30 +0.0 + 11 +6130.283198 + 21 +10427.802748 + 31 +0.0 + 0 +LINE + 5 +14A0 + 8 +0 + 62 + 0 + 10 +6104.905389 + 20 +10447.832876 + 30 +0.0 + 11 +6104.905389 + 21 +10447.832876 + 31 +0.0 + 0 +LINE + 5 +14A1 + 8 +0 + 62 + 0 + 10 +6129.023331 + 20 +10466.339223 + 30 +0.0 + 11 +6129.023331 + 21 +10466.339223 + 31 +0.0 + 0 +LINE + 5 +14A2 + 8 +0 + 62 + 0 + 10 +6127.763464 + 20 +10504.875699 + 30 +0.0 + 11 +6127.763464 + 21 +10504.875699 + 31 +0.0 + 0 +LINE + 5 +14A3 + 8 +0 + 62 + 0 + 10 +6126.503596 + 20 +10543.412174 + 30 +0.0 + 11 +6126.503596 + 21 +10543.412174 + 31 +0.0 + 0 +LINE + 5 +14A4 + 8 +0 + 62 + 0 + 10 +6125.243729 + 20 +10581.948649 + 30 +0.0 + 11 +6125.243729 + 21 +10581.948649 + 31 +0.0 + 0 +LINE + 5 +14A5 + 8 +0 + 62 + 0 + 10 +6123.983862 + 20 +10620.485125 + 30 +0.0 + 11 +6123.983862 + 21 +10620.485125 + 31 +0.0 + 0 +LINE + 5 +14A6 + 8 +0 + 62 + 0 + 10 +6122.723995 + 20 +10659.0216 + 30 +0.0 + 11 +6122.723995 + 21 +10659.0216 + 31 +0.0 + 0 +LINE + 5 +14A7 + 8 +0 + 62 + 0 + 10 +6121.464128 + 20 +10697.558075 + 30 +0.0 + 11 +6121.464128 + 21 +10697.558075 + 31 +0.0 + 0 +LINE + 5 +14A8 + 8 +0 + 62 + 0 + 10 +6120.204261 + 20 +10736.094551 + 30 +0.0 + 11 +6120.204261 + 21 +10736.094551 + 31 +0.0 + 0 +LINE + 5 +14A9 + 8 +0 + 62 + 0 + 10 +6118.944393 + 20 +10774.631026 + 30 +0.0 + 11 +6118.944393 + 21 +10774.631026 + 31 +0.0 + 0 +LINE + 5 +14AA + 8 +0 + 62 + 0 + 10 +6117.684526 + 20 +10813.167502 + 30 +0.0 + 11 +6117.684526 + 21 +10813.167502 + 31 +0.0 + 0 +LINE + 5 +14AB + 8 +0 + 62 + 0 + 10 +6116.424659 + 20 +10851.703977 + 30 +0.0 + 11 +6116.424659 + 21 +10851.703977 + 31 +0.0 + 0 +LINE + 5 +14AC + 8 +0 + 62 + 0 + 10 +6115.164792 + 20 +10890.240452 + 30 +0.0 + 11 +6115.164792 + 21 +10890.240452 + 31 +0.0 + 0 +LINE + 5 +14AD + 8 +0 + 62 + 0 + 10 +6113.904925 + 20 +10928.776928 + 30 +0.0 + 11 +6113.904925 + 21 +10928.776928 + 31 +0.0 + 0 +LINE + 5 +14AE + 8 +0 + 62 + 0 + 10 +6140.878938 + 20 +10949.474816 + 30 +0.0 + 11 +6140.878938 + 21 +10949.474816 + 31 +0.0 + 0 +LINE + 5 +14AF + 8 +0 + 62 + 0 + 10 +6112.645058 + 20 +10967.313403 + 30 +0.0 + 11 +6112.645058 + 21 +10967.313403 + 31 +0.0 + 0 +LINE + 5 +14B0 + 8 +0 + 62 + 0 + 10 +6139.619071 + 20 +10988.011292 + 30 +0.0 + 11 +6139.619071 + 21 +10988.011292 + 31 +0.0 + 0 +LINE + 5 +14B1 + 8 +0 + 62 + 0 + 10 +6111.38519 + 20 +11005.849879 + 30 +0.0 + 11 +6111.38519 + 21 +11005.849879 + 31 +0.0 + 0 +LINE + 5 +14B2 + 8 +0 + 62 + 0 + 10 +6138.359204 + 20 +11026.547767 + 30 +0.0 + 11 +6138.359204 + 21 +11026.547767 + 31 +0.0 + 0 +LINE + 5 +14B3 + 8 +0 + 62 + 0 + 10 +6110.125323 + 20 +11044.386354 + 30 +0.0 + 11 +6110.125323 + 21 +11044.386354 + 31 +0.0 + 0 +LINE + 5 +14B4 + 8 +0 + 62 + 0 + 10 +6137.099337 + 20 +11065.084243 + 30 +0.0 + 11 +6137.099337 + 21 +11065.084243 + 31 +0.0 + 0 +LINE + 5 +14B5 + 8 +0 + 62 + 0 + 10 +6108.865456 + 20 +11082.922829 + 30 +0.0 + 11 +6108.865456 + 21 +11082.922829 + 31 +0.0 + 0 +LINE + 5 +14B6 + 8 +0 + 62 + 0 + 10 +6135.83947 + 20 +11103.620718 + 30 +0.0 + 11 +6135.83947 + 21 +11103.620718 + 31 +0.0 + 0 +LINE + 5 +14B7 + 8 +0 + 62 + 0 + 10 +6107.605589 + 20 +11121.459305 + 30 +0.0 + 11 +6107.605589 + 21 +11121.459305 + 31 +0.0 + 0 +LINE + 5 +14B8 + 8 +0 + 62 + 0 + 10 +6117.504061 + 20 +10062.468122 + 30 +0.0 + 11 +6117.504061 + 21 +10062.468122 + 31 +0.0 + 0 +LINE + 5 +14B9 + 8 +0 + 62 + 0 + 10 +6118.763928 + 20 +10023.931647 + 30 +0.0 + 11 +6118.763928 + 21 +10023.931647 + 31 +0.0 + 0 +LINE + 5 +14BA + 8 +0 + 62 + 0 + 10 +6120.023795 + 20 +9985.395171 + 30 +0.0 + 11 +6120.023795 + 21 +9985.395171 + 31 +0.0 + 0 +LINE + 5 +14BB + 8 +0 + 62 + 0 + 10 +6121.283662 + 20 +9946.858696 + 30 +0.0 + 11 +6121.283662 + 21 +9946.858696 + 31 +0.0 + 0 +LINE + 5 +14BC + 8 +0 + 62 + 0 + 10 +6122.543529 + 20 +9908.32222 + 30 +0.0 + 11 +6122.543529 + 21 +9908.32222 + 31 +0.0 + 0 +LINE + 5 +14BD + 8 +0 + 62 + 0 + 10 +6123.803397 + 20 +9869.785745 + 30 +0.0 + 11 +6123.803397 + 21 +9869.785745 + 31 +0.0 + 0 +LINE + 5 +14BE + 8 +0 + 62 + 0 + 10 +6125.063264 + 20 +9831.24927 + 30 +0.0 + 11 +6125.063264 + 21 +9831.24927 + 31 +0.0 + 0 +LINE + 5 +14BF + 8 +0 + 62 + 0 + 10 +6126.323131 + 20 +9792.712794 + 30 +0.0 + 11 +6126.323131 + 21 +9792.712794 + 31 +0.0 + 0 +LINE + 5 +14C0 + 8 +0 + 62 + 0 + 10 +6127.582998 + 20 +9754.176319 + 30 +0.0 + 11 +6127.582998 + 21 +9754.176319 + 31 +0.0 + 0 +LINE + 5 +14C1 + 8 +0 + 62 + 0 + 10 +6128.842865 + 20 +9715.639844 + 30 +0.0 + 11 +6128.842865 + 21 +9715.639844 + 31 +0.0 + 0 +LINE + 5 +14C2 + 8 +0 + 62 + 0 + 10 +6104.318749 + 20 +9657.318622 + 30 +0.0 + 11 +6104.318749 + 21 +9657.318622 + 31 +0.0 + 0 +LINE + 5 +14C3 + 8 +0 + 62 + 0 + 10 +6130.102732 + 20 +9677.103368 + 30 +0.0 + 11 +6130.102732 + 21 +9677.103368 + 31 +0.0 + 0 +LINE + 5 +14C4 + 8 +0 + 62 + 0 + 10 +6105.578616 + 20 +9618.782146 + 30 +0.0 + 11 +6105.578616 + 21 +9618.782146 + 31 +0.0 + 0 +LINE + 5 +14C5 + 8 +0 + 62 + 0 + 10 +6131.3626 + 20 +9638.566893 + 30 +0.0 + 11 +6131.3626 + 21 +9638.566893 + 31 +0.0 + 0 +LINE + 5 +14C6 + 8 +0 + 62 + 0 + 10 +6106.838483 + 20 +9580.245671 + 30 +0.0 + 11 +6106.838483 + 21 +9580.245671 + 31 +0.0 + 0 +LINE + 5 +14C7 + 8 +0 + 62 + 0 + 10 +6132.622467 + 20 +9600.030417 + 30 +0.0 + 11 +6132.622467 + 21 +9600.030417 + 31 +0.0 + 0 +LINE + 5 +14C8 + 8 +0 + 62 + 0 + 10 +6108.09835 + 20 +9541.709196 + 30 +0.0 + 11 +6108.09835 + 21 +9541.709196 + 31 +0.0 + 0 +LINE + 5 +14C9 + 8 +0 + 62 + 0 + 10 +6133.882334 + 20 +9561.493942 + 30 +0.0 + 11 +6133.882334 + 21 +9561.493942 + 31 +0.0 + 0 +LINE + 5 +14CA + 8 +0 + 62 + 0 + 10 +6109.913009 + 20 +10092.601806 + 30 +0.0 + 11 +6109.913009 + 21 +10092.601806 + 31 +0.0 + 0 +LINE + 5 +14CB + 8 +0 + 62 + 0 + 10 +6126.172705 + 20 +10094.742435 + 30 +0.0 + 11 +6126.172705 + 21 +10094.742435 + 31 +0.0 + 0 +LINE + 5 +14CC + 8 +0 + 62 + 0 + 10 +6107.732783 + 20 +10144.097784 + 30 +0.0 + 11 +6107.732783 + 21 +10144.097784 + 31 +0.0 + 0 +LINE + 5 +14CD + 8 +0 + 62 + 0 + 10 +6134.898372 + 20 +10147.674202 + 30 +0.0 + 11 +6134.898372 + 21 +10147.674202 + 31 +0.0 + 0 +LINE + 5 +14CE + 8 +0 + 62 + 0 + 10 +6116.45845 + 20 +10197.029551 + 30 +0.0 + 11 +6116.45845 + 21 +10197.029551 + 31 +0.0 + 0 +LINE + 5 +14CF + 8 +0 + 62 + 0 + 10 +6126.868621 + 20 +10198.400076 + 30 +0.0 + 11 +6126.868621 + 21 +10198.400076 + 31 +0.0 + 0 +LINE + 5 +14D0 + 8 +0 + 62 + 0 + 10 +6108.428699 + 20 +10247.755425 + 30 +0.0 + 11 +6108.428699 + 21 +10247.755425 + 31 +0.0 + 0 +LINE + 5 +14D1 + 8 +0 + 62 + 0 + 10 +6124.688395 + 20 +10249.896055 + 30 +0.0 + 11 +6124.688395 + 21 +10249.896055 + 31 +0.0 + 0 +LINE + 5 +14D2 + 8 +0 + 62 + 0 + 10 +6106.248473 + 20 +10299.251404 + 30 +0.0 + 11 +6106.248473 + 21 +10299.251404 + 31 +0.0 + 0 +LINE + 5 +14D3 + 8 +0 + 62 + 0 + 10 +6133.414063 + 20 +10302.827821 + 30 +0.0 + 11 +6133.414063 + 21 +10302.827821 + 31 +0.0 + 0 +LINE + 5 +14D4 + 8 +0 + 62 + 0 + 10 +6114.974141 + 20 +10352.18317 + 30 +0.0 + 11 +6114.974141 + 21 +10352.18317 + 31 +0.0 + 0 +LINE + 5 +14D5 + 8 +0 + 62 + 0 + 10 +6125.384312 + 20 +10353.553695 + 30 +0.0 + 11 +6125.384312 + 21 +10353.553695 + 31 +0.0 + 0 +LINE + 5 +14D6 + 8 +0 + 62 + 0 + 10 +6106.94439 + 20 +10402.909044 + 30 +0.0 + 11 +6106.94439 + 21 +10402.909044 + 31 +0.0 + 0 +LINE + 5 +14D7 + 8 +0 + 62 + 0 + 10 +6123.204086 + 20 +10405.049674 + 30 +0.0 + 11 +6123.204086 + 21 +10405.049674 + 31 +0.0 + 0 +LINE + 5 +14D8 + 8 +0 + 62 + 0 + 10 +6104.764164 + 20 +10454.405023 + 30 +0.0 + 11 +6104.764164 + 21 +10454.405023 + 31 +0.0 + 0 +LINE + 5 +14D9 + 8 +0 + 62 + 0 + 10 +6131.929753 + 20 +10457.981441 + 30 +0.0 + 11 +6131.929753 + 21 +10457.981441 + 31 +0.0 + 0 +LINE + 5 +14DA + 8 +0 + 62 + 0 + 10 +6113.489831 + 20 +10507.33679 + 30 +0.0 + 11 +6113.489831 + 21 +10507.33679 + 31 +0.0 + 0 +LINE + 5 +14DB + 8 +0 + 62 + 0 + 10 +6123.900002 + 20 +10508.707315 + 30 +0.0 + 11 +6123.900002 + 21 +10508.707315 + 31 +0.0 + 0 +LINE + 5 +14DC + 8 +0 + 62 + 0 + 10 +6140.159698 + 20 +10510.847944 + 30 +0.0 + 11 +6140.159698 + 21 +10510.847944 + 31 +0.0 + 0 +LINE + 5 +14DD + 8 +0 + 62 + 0 + 10 +6105.46008 + 20 +10558.062664 + 30 +0.0 + 11 +6105.46008 + 21 +10558.062664 + 31 +0.0 + 0 +LINE + 5 +14DE + 8 +0 + 62 + 0 + 10 +6121.719776 + 20 +10560.203293 + 30 +0.0 + 11 +6121.719776 + 21 +10560.203293 + 31 +0.0 + 0 +LINE + 5 +14DF + 8 +0 + 62 + 0 + 10 +6130.445443 + 20 +10613.13506 + 30 +0.0 + 11 +6130.445443 + 21 +10613.13506 + 31 +0.0 + 0 +LINE + 5 +14E0 + 8 +0 + 62 + 0 + 10 +6140.855614 + 20 +10614.505585 + 30 +0.0 + 11 +6140.855614 + 21 +10614.505585 + 31 +0.0 + 0 +LINE + 5 +14E1 + 8 +0 + 62 + 0 + 10 +6112.005521 + 20 +10662.490409 + 30 +0.0 + 11 +6112.005521 + 21 +10662.490409 + 31 +0.0 + 0 +LINE + 5 +14E2 + 8 +0 + 62 + 0 + 10 +6122.415692 + 20 +10663.860934 + 30 +0.0 + 11 +6122.415692 + 21 +10663.860934 + 31 +0.0 + 0 +LINE + 5 +14E3 + 8 +0 + 62 + 0 + 10 +6138.675388 + 20 +10666.001564 + 30 +0.0 + 11 +6138.675388 + 21 +10666.001564 + 31 +0.0 + 0 +LINE + 5 +14E4 + 8 +0 + 62 + 0 + 10 +6103.975771 + 20 +10713.216283 + 30 +0.0 + 11 +6103.975771 + 21 +10713.216283 + 31 +0.0 + 0 +LINE + 5 +14E5 + 8 +0 + 62 + 0 + 10 +6120.235466 + 20 +10715.356913 + 30 +0.0 + 11 +6120.235466 + 21 +10715.356913 + 31 +0.0 + 0 +LINE + 5 +14E6 + 8 +0 + 62 + 0 + 10 +6128.961134 + 20 +10768.28868 + 30 +0.0 + 11 +6128.961134 + 21 +10768.28868 + 31 +0.0 + 0 +LINE + 5 +14E7 + 8 +0 + 62 + 0 + 10 +6139.371305 + 20 +10769.659205 + 30 +0.0 + 11 +6139.371305 + 21 +10769.659205 + 31 +0.0 + 0 +LINE + 5 +14E8 + 8 +0 + 62 + 0 + 10 +6110.521212 + 20 +10817.644029 + 30 +0.0 + 11 +6110.521212 + 21 +10817.644029 + 31 +0.0 + 0 +LINE + 5 +14E9 + 8 +0 + 62 + 0 + 10 +6120.931383 + 20 +10819.014554 + 30 +0.0 + 11 +6120.931383 + 21 +10819.014554 + 31 +0.0 + 0 +LINE + 5 +14EA + 8 +0 + 62 + 0 + 10 +6137.191079 + 20 +10821.155183 + 30 +0.0 + 11 +6137.191079 + 21 +10821.155183 + 31 +0.0 + 0 +LINE + 5 +14EB + 8 +0 + 62 + 0 + 10 +6118.751157 + 20 +10870.510532 + 30 +0.0 + 11 +6118.751157 + 21 +10870.510532 + 31 +0.0 + 0 +LINE + 5 +14EC + 8 +0 + 62 + 0 + 10 +6127.476824 + 20 +10923.442299 + 30 +0.0 + 11 +6127.476824 + 21 +10923.442299 + 31 +0.0 + 0 +LINE + 5 +14ED + 8 +0 + 62 + 0 + 10 +6137.886995 + 20 +10924.812824 + 30 +0.0 + 11 +6137.886995 + 21 +10924.812824 + 31 +0.0 + 0 +LINE + 5 +14EE + 8 +0 + 62 + 0 + 10 +6109.036902 + 20 +10972.797648 + 30 +0.0 + 11 +6109.036902 + 21 +10972.797648 + 31 +0.0 + 0 +LINE + 5 +14EF + 8 +0 + 62 + 0 + 10 +6119.447073 + 20 +10974.168173 + 30 +0.0 + 11 +6119.447073 + 21 +10974.168173 + 31 +0.0 + 0 +LINE + 5 +14F0 + 8 +0 + 62 + 0 + 10 +6135.706769 + 20 +10976.308803 + 30 +0.0 + 11 +6135.706769 + 21 +10976.308803 + 31 +0.0 + 0 +LINE + 5 +14F1 + 8 +0 + 62 + 0 + 10 +6117.266847 + 20 +11025.664152 + 30 +0.0 + 11 +6117.266847 + 21 +11025.664152 + 31 +0.0 + 0 +LINE + 5 +14F2 + 8 +0 + 62 + 0 + 10 +6125.992514 + 20 +11078.595918 + 30 +0.0 + 11 +6125.992514 + 21 +11078.595918 + 31 +0.0 + 0 +LINE + 5 +14F3 + 8 +0 + 62 + 0 + 10 +6136.402685 + 20 +11079.966444 + 30 +0.0 + 11 +6136.402685 + 21 +11079.966444 + 31 +0.0 + 0 +LINE + 5 +14F4 + 8 +0 + 62 + 0 + 10 +6107.552593 + 20 +11127.951268 + 30 +0.0 + 11 +6107.552593 + 21 +11127.951268 + 31 +0.0 + 0 +LINE + 5 +14F5 + 8 +0 + 62 + 0 + 10 +6117.962764 + 20 +11129.321793 + 30 +0.0 + 11 +6117.962764 + 21 +11129.321793 + 31 +0.0 + 0 +LINE + 5 +14F6 + 8 +0 + 62 + 0 + 10 +6117.94276 + 20 +10041.875931 + 30 +0.0 + 11 +6117.94276 + 21 +10041.875931 + 31 +0.0 + 0 +LINE + 5 +14F7 + 8 +0 + 62 + 0 + 10 +6128.352931 + 20 +10043.246457 + 30 +0.0 + 11 +6128.352931 + 21 +10043.246457 + 31 +0.0 + 0 +LINE + 5 +14F8 + 8 +0 + 62 + 0 + 10 +6109.217093 + 20 +9988.944165 + 30 +0.0 + 11 +6109.217093 + 21 +9988.944165 + 31 +0.0 + 0 +LINE + 5 +14F9 + 8 +0 + 62 + 0 + 10 +6136.382682 + 20 +9992.520582 + 30 +0.0 + 11 +6136.382682 + 21 +9992.520582 + 31 +0.0 + 0 +LINE + 5 +14FA + 8 +0 + 62 + 0 + 10 +6111.397319 + 20 +9937.448186 + 30 +0.0 + 11 +6111.397319 + 21 +9937.448186 + 31 +0.0 + 0 +LINE + 5 +14FB + 8 +0 + 62 + 0 + 10 +6127.657014 + 20 +9939.588816 + 30 +0.0 + 11 +6127.657014 + 21 +9939.588816 + 31 +0.0 + 0 +LINE + 5 +14FC + 8 +0 + 62 + 0 + 10 +6119.42707 + 20 +9886.722312 + 30 +0.0 + 11 +6119.42707 + 21 +9886.722312 + 31 +0.0 + 0 +LINE + 5 +14FD + 8 +0 + 62 + 0 + 10 +6129.837241 + 20 +9888.092837 + 30 +0.0 + 11 +6129.837241 + 21 +9888.092837 + 31 +0.0 + 0 +LINE + 5 +14FE + 8 +0 + 62 + 0 + 10 +6110.701402 + 20 +9833.790545 + 30 +0.0 + 11 +6110.701402 + 21 +9833.790545 + 31 +0.0 + 0 +LINE + 5 +14FF + 8 +0 + 62 + 0 + 10 +6137.866991 + 20 +9837.366963 + 30 +0.0 + 11 +6137.866991 + 21 +9837.366963 + 31 +0.0 + 0 +LINE + 5 +1500 + 8 +0 + 62 + 0 + 10 +6112.881628 + 20 +9782.294567 + 30 +0.0 + 11 +6112.881628 + 21 +9782.294567 + 31 +0.0 + 0 +LINE + 5 +1501 + 8 +0 + 62 + 0 + 10 +6129.141324 + 20 +9784.435196 + 30 +0.0 + 11 +6129.141324 + 21 +9784.435196 + 31 +0.0 + 0 +LINE + 5 +1502 + 8 +0 + 62 + 0 + 10 +6120.911379 + 20 +9731.568693 + 30 +0.0 + 11 +6120.911379 + 21 +9731.568693 + 31 +0.0 + 0 +LINE + 5 +1503 + 8 +0 + 62 + 0 + 10 +6131.32155 + 20 +9732.939218 + 30 +0.0 + 11 +6131.32155 + 21 +9732.939218 + 31 +0.0 + 0 +LINE + 5 +1504 + 8 +0 + 62 + 0 + 10 +6112.185712 + 20 +9678.636926 + 30 +0.0 + 11 +6112.185712 + 21 +9678.636926 + 31 +0.0 + 0 +LINE + 5 +1505 + 8 +0 + 62 + 0 + 10 +6139.351301 + 20 +9682.213344 + 30 +0.0 + 11 +6139.351301 + 21 +9682.213344 + 31 +0.0 + 0 +LINE + 5 +1506 + 8 +0 + 62 + 0 + 10 +6103.955767 + 20 +9625.770422 + 30 +0.0 + 11 +6103.955767 + 21 +9625.770422 + 31 +0.0 + 0 +LINE + 5 +1507 + 8 +0 + 62 + 0 + 10 +6114.365938 + 20 +9627.140947 + 30 +0.0 + 11 +6114.365938 + 21 +9627.140947 + 31 +0.0 + 0 +LINE + 5 +1508 + 8 +0 + 62 + 0 + 10 +6130.625634 + 20 +9629.281577 + 30 +0.0 + 11 +6130.625634 + 21 +9629.281577 + 31 +0.0 + 0 +LINE + 5 +1509 + 8 +0 + 62 + 0 + 10 +6122.395689 + 20 +9576.415073 + 30 +0.0 + 11 +6122.395689 + 21 +9576.415073 + 31 +0.0 + 0 +LINE + 5 +150A + 8 +0 + 62 + 0 + 10 +6132.80586 + 20 +9577.785598 + 30 +0.0 + 11 +6132.80586 + 21 +9577.785598 + 31 +0.0 + 0 +LINE + 5 +150B + 8 +0 + 62 + 0 + 10 +6121.775959 + 20 +10131.888161 + 30 +0.0 + 11 +6121.775959 + 21 +10131.888161 + 31 +0.0 + 0 +LINE + 5 +150C + 8 +0 + 62 + 0 + 10 +6130.209873 + 20 +10126.515165 + 30 +0.0 + 11 +6130.209873 + 21 +10126.515165 + 31 +0.0 + 0 +LINE + 5 +150D + 8 +0 + 62 + 0 + 10 +6105.623391 + 20 +10181.970206 + 30 +0.0 + 11 +6105.623391 + 21 +10181.970206 + 31 +0.0 + 0 +LINE + 5 +150E + 8 +0 + 62 + 0 + 10 +6114.057306 + 20 +10176.59721 + 30 +0.0 + 11 +6114.057306 + 21 +10176.59721 + 31 +0.0 + 0 +LINE + 5 +150F + 8 +0 + 62 + 0 + 10 +6128.266831 + 20 +10207.336469 + 30 +0.0 + 11 +6128.266831 + 21 +10207.336469 + 31 +0.0 + 0 +LINE + 5 +1510 + 8 +0 + 62 + 0 + 10 +6112.114263 + 20 +10257.418513 + 30 +0.0 + 11 +6112.114263 + 21 +10257.418513 + 31 +0.0 + 0 +LINE + 5 +1511 + 8 +0 + 62 + 0 + 10 +6135.601094 + 20 +10282.247476 + 30 +0.0 + 11 +6135.601094 + 21 +10282.247476 + 31 +0.0 + 0 +LINE + 5 +1512 + 8 +0 + 62 + 0 + 10 +6119.448527 + 20 +10332.329521 + 30 +0.0 + 11 +6119.448527 + 21 +10332.329521 + 31 +0.0 + 0 +LINE + 5 +1513 + 8 +0 + 62 + 0 + 10 +6127.882441 + 20 +10326.956525 + 30 +0.0 + 11 +6127.882441 + 21 +10326.956525 + 31 +0.0 + 0 +LINE + 5 +1514 + 8 +0 + 62 + 0 + 10 +6111.729874 + 20 +10377.038569 + 30 +0.0 + 11 +6111.729874 + 21 +10377.038569 + 31 +0.0 + 0 +LINE + 5 +1515 + 8 +0 + 62 + 0 + 10 +6125.939399 + 20 +10407.777828 + 30 +0.0 + 11 +6125.939399 + 21 +10407.777828 + 31 +0.0 + 0 +LINE + 5 +1516 + 8 +0 + 62 + 0 + 10 +6109.786832 + 20 +10457.859873 + 30 +0.0 + 11 +6109.786832 + 21 +10457.859873 + 31 +0.0 + 0 +LINE + 5 +1517 + 8 +0 + 62 + 0 + 10 +6133.273662 + 20 +10482.688836 + 30 +0.0 + 11 +6133.273662 + 21 +10482.688836 + 31 +0.0 + 0 +LINE + 5 +1518 + 8 +0 + 62 + 0 + 10 +6117.121095 + 20 +10532.770881 + 30 +0.0 + 11 +6117.121095 + 21 +10532.770881 + 31 +0.0 + 0 +LINE + 5 +1519 + 8 +0 + 62 + 0 + 10 +6125.55501 + 20 +10527.397884 + 30 +0.0 + 11 +6125.55501 + 21 +10527.397884 + 31 +0.0 + 0 +LINE + 5 +151A + 8 +0 + 62 + 0 + 10 +6109.402442 + 20 +10577.479929 + 30 +0.0 + 11 +6109.402442 + 21 +10577.479929 + 31 +0.0 + 0 +LINE + 5 +151B + 8 +0 + 62 + 0 + 10 +6139.764535 + 20 +10558.137143 + 30 +0.0 + 11 +6139.764535 + 21 +10558.137143 + 31 +0.0 + 0 +LINE + 5 +151C + 8 +0 + 62 + 0 + 10 +6123.611967 + 20 +10608.219188 + 30 +0.0 + 11 +6123.611967 + 21 +10608.219188 + 31 +0.0 + 0 +LINE + 5 +151D + 8 +0 + 62 + 0 + 10 +6107.4594 + 20 +10658.301233 + 30 +0.0 + 11 +6107.4594 + 21 +10658.301233 + 31 +0.0 + 0 +LINE + 5 +151E + 8 +0 + 62 + 0 + 10 +6130.946231 + 20 +10683.130196 + 30 +0.0 + 11 +6130.946231 + 21 +10683.130196 + 31 +0.0 + 0 +LINE + 5 +151F + 8 +0 + 62 + 0 + 10 +6139.380145 + 20 +10677.7572 + 30 +0.0 + 11 +6139.380145 + 21 +10677.7572 + 31 +0.0 + 0 +LINE + 5 +1520 + 8 +0 + 62 + 0 + 10 +6114.793664 + 20 +10733.21224 + 30 +0.0 + 11 +6114.793664 + 21 +10733.21224 + 31 +0.0 + 0 +LINE + 5 +1521 + 8 +0 + 62 + 0 + 10 +6123.227578 + 20 +10727.839244 + 30 +0.0 + 11 +6123.227578 + 21 +10727.839244 + 31 +0.0 + 0 +LINE + 5 +1522 + 8 +0 + 62 + 0 + 10 +6107.075011 + 20 +10777.921289 + 30 +0.0 + 11 +6107.075011 + 21 +10777.921289 + 31 +0.0 + 0 +LINE + 5 +1523 + 8 +0 + 62 + 0 + 10 +6137.437103 + 20 +10758.578503 + 30 +0.0 + 11 +6137.437103 + 21 +10758.578503 + 31 +0.0 + 0 +LINE + 5 +1524 + 8 +0 + 62 + 0 + 10 +6121.284536 + 20 +10808.660548 + 30 +0.0 + 11 +6121.284536 + 21 +10808.660548 + 31 +0.0 + 0 +LINE + 5 +1525 + 8 +0 + 62 + 0 + 10 +6105.131968 + 20 +10858.742592 + 30 +0.0 + 11 +6105.131968 + 21 +10858.742592 + 31 +0.0 + 0 +LINE + 5 +1526 + 8 +0 + 62 + 0 + 10 +6128.618799 + 20 +10883.571555 + 30 +0.0 + 11 +6128.618799 + 21 +10883.571555 + 31 +0.0 + 0 +LINE + 5 +1527 + 8 +0 + 62 + 0 + 10 +6137.052714 + 20 +10878.198559 + 30 +0.0 + 11 +6137.052714 + 21 +10878.198559 + 31 +0.0 + 0 +LINE + 5 +1528 + 8 +0 + 62 + 0 + 10 +6112.466232 + 20 +10933.6536 + 30 +0.0 + 11 +6112.466232 + 21 +10933.6536 + 31 +0.0 + 0 +LINE + 5 +1529 + 8 +0 + 62 + 0 + 10 +6120.900146 + 20 +10928.280604 + 30 +0.0 + 11 +6120.900146 + 21 +10928.280604 + 31 +0.0 + 0 +LINE + 5 +152A + 8 +0 + 62 + 0 + 10 +6104.747579 + 20 +10978.362648 + 30 +0.0 + 11 +6104.747579 + 21 +10978.362648 + 31 +0.0 + 0 +LINE + 5 +152B + 8 +0 + 62 + 0 + 10 +6135.109671 + 20 +10959.019863 + 30 +0.0 + 11 +6135.109671 + 21 +10959.019863 + 31 +0.0 + 0 +LINE + 5 +152C + 8 +0 + 62 + 0 + 10 +6118.957104 + 20 +11009.101907 + 30 +0.0 + 11 +6118.957104 + 21 +11009.101907 + 31 +0.0 + 0 +LINE + 5 +152D + 8 +0 + 62 + 0 + 10 +6126.291367 + 20 +11084.012915 + 30 +0.0 + 11 +6126.291367 + 21 +11084.012915 + 31 +0.0 + 0 +LINE + 5 +152E + 8 +0 + 62 + 0 + 10 +6134.725282 + 20 +11078.639919 + 30 +0.0 + 11 +6134.725282 + 21 +11078.639919 + 31 +0.0 + 0 +LINE + 5 +152F + 8 +0 + 62 + 0 + 10 +6118.572715 + 20 +11128.721963 + 30 +0.0 + 11 +6118.572715 + 21 +11128.721963 + 31 +0.0 + 0 +LINE + 5 +1530 + 8 +0 + 62 + 0 + 10 +6137.928526 + 20 +10081.806117 + 30 +0.0 + 11 +6137.928526 + 21 +10081.806117 + 31 +0.0 + 0 +LINE + 5 +1531 + 8 +0 + 62 + 0 + 10 +6114.441695 + 20 +10056.977154 + 30 +0.0 + 11 +6114.441695 + 21 +10056.977154 + 31 +0.0 + 0 +LINE + 5 +1532 + 8 +0 + 62 + 0 + 10 +6130.594262 + 20 +10006.895109 + 30 +0.0 + 11 +6130.594262 + 21 +10006.895109 + 31 +0.0 + 0 +LINE + 5 +1533 + 8 +0 + 62 + 0 + 10 +6107.950823 + 20 +9981.528846 + 30 +0.0 + 11 +6107.950823 + 21 +9981.528846 + 31 +0.0 + 0 +LINE + 5 +1534 + 8 +0 + 62 + 0 + 10 +6116.384737 + 20 +9976.15585 + 30 +0.0 + 11 +6116.384737 + 21 +9976.15585 + 31 +0.0 + 0 +LINE + 5 +1535 + 8 +0 + 62 + 0 + 10 +6124.10339 + 20 +9931.446802 + 30 +0.0 + 11 +6124.10339 + 21 +9931.446802 + 31 +0.0 + 0 +LINE + 5 +1536 + 8 +0 + 62 + 0 + 10 +6132.537305 + 20 +9926.073806 + 30 +0.0 + 11 +6132.537305 + 21 +9926.073806 + 31 +0.0 + 0 +LINE + 5 +1537 + 8 +0 + 62 + 0 + 10 +6140.255957 + 20 +9881.364757 + 30 +0.0 + 11 +6140.255957 + 21 +9881.364757 + 31 +0.0 + 0 +LINE + 5 +1538 + 8 +0 + 62 + 0 + 10 +6116.769127 + 20 +9856.535794 + 30 +0.0 + 11 +6116.769127 + 21 +9856.535794 + 31 +0.0 + 0 +LINE + 5 +1539 + 8 +0 + 62 + 0 + 10 +6132.921694 + 20 +9806.453749 + 30 +0.0 + 11 +6132.921694 + 21 +9806.453749 + 31 +0.0 + 0 +LINE + 5 +153A + 8 +0 + 62 + 0 + 10 +6110.278255 + 20 +9781.087487 + 30 +0.0 + 11 +6110.278255 + 21 +9781.087487 + 31 +0.0 + 0 +LINE + 5 +153B + 8 +0 + 62 + 0 + 10 +6118.712169 + 20 +9775.714491 + 30 +0.0 + 11 +6118.712169 + 21 +9775.714491 + 31 +0.0 + 0 +LINE + 5 +153C + 8 +0 + 62 + 0 + 10 +6126.430822 + 20 +9731.005442 + 30 +0.0 + 11 +6126.430822 + 21 +9731.005442 + 31 +0.0 + 0 +LINE + 5 +153D + 8 +0 + 62 + 0 + 10 +6134.864736 + 20 +9725.632446 + 30 +0.0 + 11 +6134.864736 + 21 +9725.632446 + 31 +0.0 + 0 +LINE + 5 +153E + 8 +0 + 62 + 0 + 10 +6119.096558 + 20 +9656.094434 + 30 +0.0 + 11 +6119.096558 + 21 +9656.094434 + 31 +0.0 + 0 +LINE + 5 +153F + 8 +0 + 62 + 0 + 10 +6104.887034 + 20 +9625.355176 + 30 +0.0 + 11 +6104.887034 + 21 +9625.355176 + 31 +0.0 + 0 +LINE + 5 +1540 + 8 +0 + 62 + 0 + 10 +6135.249126 + 20 +9606.01239 + 30 +0.0 + 11 +6135.249126 + 21 +9606.01239 + 31 +0.0 + 0 +LINE + 5 +1541 + 8 +0 + 62 + 0 + 10 +6112.605686 + 20 +9580.646127 + 30 +0.0 + 11 +6112.605686 + 21 +9580.646127 + 31 +0.0 + 0 +LINE + 5 +1542 + 8 +0 + 62 + 0 + 10 +6121.039601 + 20 +9575.273131 + 30 +0.0 + 11 +6121.039601 + 21 +9575.273131 + 31 +0.0 + 0 +LINE + 5 +1543 + 8 +0 + 62 + 0 + 10 +6118.199199 + 20 +10096.15836 + 30 +0.0 + 11 +6118.199199 + 21 +10096.15836 + 31 +0.0 + 0 +LINE + 5 +1544 + 8 +0 + 62 + 0 + 10 +6121.885586 + 20 +10092.780409 + 30 +0.0 + 11 +6121.885586 + 21 +10092.780409 + 31 +0.0 + 0 +LINE + 5 +1545 + 8 +0 + 62 + 0 + 10 +6139.285331 + 20 +10076.836481 + 30 +0.0 + 11 +6139.285331 + 21 +10076.836481 + 31 +0.0 + 0 +LINE + 5 +1546 + 8 +0 + 62 + 0 + 10 +6117.422623 + 20 +10169.515623 + 30 +0.0 + 11 +6117.422623 + 21 +10169.515623 + 31 +0.0 + 0 +LINE + 5 +1547 + 8 +0 + 62 + 0 + 10 +6137.329111 + 20 +10151.274687 + 30 +0.0 + 11 +6137.329111 + 21 +10151.274687 + 31 +0.0 + 0 +LINE + 5 +1548 + 8 +0 + 62 + 0 + 10 +6141.015498 + 20 +10147.896736 + 30 +0.0 + 11 +6141.015498 + 21 +10147.896736 + 31 +0.0 + 0 +LINE + 5 +1549 + 8 +0 + 62 + 0 + 10 +6115.466404 + 20 +10243.95383 + 30 +0.0 + 11 +6115.466404 + 21 +10243.95383 + 31 +0.0 + 0 +LINE + 5 +154A + 8 +0 + 62 + 0 + 10 +6119.15279 + 20 +10240.575879 + 30 +0.0 + 11 +6119.15279 + 21 +10240.575879 + 31 +0.0 + 0 +LINE + 5 +154B + 8 +0 + 62 + 0 + 10 +6136.552535 + 20 +10224.63195 + 30 +0.0 + 11 +6136.552535 + 21 +10224.63195 + 31 +0.0 + 0 +LINE + 5 +154C + 8 +0 + 62 + 0 + 10 +6114.689828 + 20 +10317.311092 + 30 +0.0 + 11 +6114.689828 + 21 +10317.311092 + 31 +0.0 + 0 +LINE + 5 +154D + 8 +0 + 62 + 0 + 10 +6134.596316 + 20 +10299.070157 + 30 +0.0 + 11 +6134.596316 + 21 +10299.070157 + 31 +0.0 + 0 +LINE + 5 +154E + 8 +0 + 62 + 0 + 10 +6138.282702 + 20 +10295.692205 + 30 +0.0 + 11 +6138.282702 + 21 +10295.692205 + 31 +0.0 + 0 +LINE + 5 +154F + 8 +0 + 62 + 0 + 10 +6112.733608 + 20 +10391.749299 + 30 +0.0 + 11 +6112.733608 + 21 +10391.749299 + 31 +0.0 + 0 +LINE + 5 +1550 + 8 +0 + 62 + 0 + 10 +6116.419995 + 20 +10388.371348 + 30 +0.0 + 11 +6116.419995 + 21 +10388.371348 + 31 +0.0 + 0 +LINE + 5 +1551 + 8 +0 + 62 + 0 + 10 +6133.81974 + 20 +10372.427419 + 30 +0.0 + 11 +6133.81974 + 21 +10372.427419 + 31 +0.0 + 0 +LINE + 5 +1552 + 8 +0 + 62 + 0 + 10 +6111.957032 + 20 +10465.106561 + 30 +0.0 + 11 +6111.957032 + 21 +10465.106561 + 31 +0.0 + 0 +LINE + 5 +1553 + 8 +0 + 62 + 0 + 10 +6131.86352 + 20 +10446.865626 + 30 +0.0 + 11 +6131.86352 + 21 +10446.865626 + 31 +0.0 + 0 +LINE + 5 +1554 + 8 +0 + 62 + 0 + 10 +6135.549907 + 20 +10443.487675 + 30 +0.0 + 11 +6135.549907 + 21 +10443.487675 + 31 +0.0 + 0 +LINE + 5 +1555 + 8 +0 + 62 + 0 + 10 +6110.000812 + 20 +10539.544768 + 30 +0.0 + 11 +6110.000812 + 21 +10539.544768 + 31 +0.0 + 0 +LINE + 5 +1556 + 8 +0 + 62 + 0 + 10 +6113.687199 + 20 +10536.166817 + 30 +0.0 + 11 +6113.687199 + 21 +10536.166817 + 31 +0.0 + 0 +LINE + 5 +1557 + 8 +0 + 62 + 0 + 10 +6131.086944 + 20 +10520.222888 + 30 +0.0 + 11 +6131.086944 + 21 +10520.222888 + 31 +0.0 + 0 +LINE + 5 +1558 + 8 +0 + 62 + 0 + 10 +6109.224236 + 20 +10612.902031 + 30 +0.0 + 11 +6109.224236 + 21 +10612.902031 + 31 +0.0 + 0 +LINE + 5 +1559 + 8 +0 + 62 + 0 + 10 +6129.130725 + 20 +10594.661095 + 30 +0.0 + 11 +6129.130725 + 21 +10594.661095 + 31 +0.0 + 0 +LINE + 5 +155A + 8 +0 + 62 + 0 + 10 +6132.817111 + 20 +10591.283144 + 30 +0.0 + 11 +6132.817111 + 21 +10591.283144 + 31 +0.0 + 0 +LINE + 5 +155B + 8 +0 + 62 + 0 + 10 +6107.268017 + 20 +10687.340237 + 30 +0.0 + 11 +6107.268017 + 21 +10687.340237 + 31 +0.0 + 0 +LINE + 5 +155C + 8 +0 + 62 + 0 + 10 +6110.954404 + 20 +10683.962286 + 30 +0.0 + 11 +6110.954404 + 21 +10683.962286 + 31 +0.0 + 0 +LINE + 5 +155D + 8 +0 + 62 + 0 + 10 +6128.354149 + 20 +10668.018357 + 30 +0.0 + 11 +6128.354149 + 21 +10668.018357 + 31 +0.0 + 0 +LINE + 5 +155E + 8 +0 + 62 + 0 + 10 +6106.491441 + 20 +10760.6975 + 30 +0.0 + 11 +6106.491441 + 21 +10760.6975 + 31 +0.0 + 0 +LINE + 5 +155F + 8 +0 + 62 + 0 + 10 +6126.397929 + 20 +10742.456564 + 30 +0.0 + 11 +6126.397929 + 21 +10742.456564 + 31 +0.0 + 0 +LINE + 5 +1560 + 8 +0 + 62 + 0 + 10 +6130.084316 + 20 +10739.078613 + 30 +0.0 + 11 +6130.084316 + 21 +10739.078613 + 31 +0.0 + 0 +LINE + 5 +1561 + 8 +0 + 62 + 0 + 10 +6104.535221 + 20 +10835.135707 + 30 +0.0 + 11 +6104.535221 + 21 +10835.135707 + 31 +0.0 + 0 +LINE + 5 +1562 + 8 +0 + 62 + 0 + 10 +6108.221608 + 20 +10831.757756 + 30 +0.0 + 11 +6108.221608 + 21 +10831.757756 + 31 +0.0 + 0 +LINE + 5 +1563 + 8 +0 + 62 + 0 + 10 +6125.621353 + 20 +10815.813827 + 30 +0.0 + 11 +6125.621353 + 21 +10815.813827 + 31 +0.0 + 0 +LINE + 5 +1564 + 8 +0 + 62 + 0 + 10 +6103.758645 + 20 +10908.492969 + 30 +0.0 + 11 +6103.758645 + 21 +10908.492969 + 31 +0.0 + 0 +LINE + 5 +1565 + 8 +0 + 62 + 0 + 10 +6123.665133 + 20 +10890.252033 + 30 +0.0 + 11 +6123.665133 + 21 +10890.252033 + 31 +0.0 + 0 +LINE + 5 +1566 + 8 +0 + 62 + 0 + 10 +6127.35152 + 20 +10886.874082 + 30 +0.0 + 11 +6127.35152 + 21 +10886.874082 + 31 +0.0 + 0 +LINE + 5 +1567 + 8 +0 + 62 + 0 + 10 +6105.488812 + 20 +10979.553225 + 30 +0.0 + 11 +6105.488812 + 21 +10979.553225 + 31 +0.0 + 0 +LINE + 5 +1568 + 8 +0 + 62 + 0 + 10 +6122.888557 + 20 +10963.609296 + 30 +0.0 + 11 +6122.888557 + 21 +10963.609296 + 31 +0.0 + 0 +LINE + 5 +1569 + 8 +0 + 62 + 0 + 10 +6120.932338 + 20 +11038.047503 + 30 +0.0 + 11 +6120.932338 + 21 +11038.047503 + 31 +0.0 + 0 +LINE + 5 +156A + 8 +0 + 62 + 0 + 10 +6124.618724 + 20 +11034.669552 + 30 +0.0 + 11 +6124.618724 + 21 +11034.669552 + 31 +0.0 + 0 +LINE + 5 +156B + 8 +0 + 62 + 0 + 10 +6120.155762 + 20 +11111.404765 + 30 +0.0 + 11 +6120.155762 + 21 +11111.404765 + 31 +0.0 + 0 +LINE + 5 +156C + 8 +0 + 62 + 0 + 10 +6140.06225 + 20 +11093.163829 + 30 +0.0 + 11 +6140.06225 + 21 +11093.163829 + 31 +0.0 + 0 +LINE + 5 +156D + 8 +0 + 62 + 0 + 10 +6120.155419 + 20 +10021.720154 + 30 +0.0 + 11 +6120.155419 + 21 +10021.720154 + 31 +0.0 + 0 +LINE + 5 +156E + 8 +0 + 62 + 0 + 10 +6140.061907 + 20 +10003.479218 + 30 +0.0 + 11 +6140.061907 + 21 +10003.479218 + 31 +0.0 + 0 +LINE + 5 +156F + 8 +0 + 62 + 0 + 10 +6120.931995 + 20 +9948.362891 + 30 +0.0 + 11 +6120.931995 + 21 +9948.362891 + 31 +0.0 + 0 +LINE + 5 +1570 + 8 +0 + 62 + 0 + 10 +6124.618381 + 20 +9944.98494 + 30 +0.0 + 11 +6124.618381 + 21 +9944.98494 + 31 +0.0 + 0 +LINE + 5 +1571 + 8 +0 + 62 + 0 + 10 +6105.488469 + 20 +9889.868613 + 30 +0.0 + 11 +6105.488469 + 21 +9889.868613 + 31 +0.0 + 0 +LINE + 5 +1572 + 8 +0 + 62 + 0 + 10 +6122.888214 + 20 +9873.924684 + 30 +0.0 + 11 +6122.888214 + 21 +9873.924684 + 31 +0.0 + 0 +LINE + 5 +1573 + 8 +0 + 62 + 0 + 10 +6103.758302 + 20 +9818.808358 + 30 +0.0 + 11 +6103.758302 + 21 +9818.808358 + 31 +0.0 + 0 +LINE + 5 +1574 + 8 +0 + 62 + 0 + 10 +6123.66479 + 20 +9800.567422 + 30 +0.0 + 11 +6123.66479 + 21 +9800.567422 + 31 +0.0 + 0 +LINE + 5 +1575 + 8 +0 + 62 + 0 + 10 +6127.351177 + 20 +9797.189471 + 30 +0.0 + 11 +6127.351177 + 21 +9797.189471 + 31 +0.0 + 0 +LINE + 5 +1576 + 8 +0 + 62 + 0 + 10 +6104.534878 + 20 +9745.451095 + 30 +0.0 + 11 +6104.534878 + 21 +9745.451095 + 31 +0.0 + 0 +LINE + 5 +1577 + 8 +0 + 62 + 0 + 10 +6108.221265 + 20 +9742.073144 + 30 +0.0 + 11 +6108.221265 + 21 +9742.073144 + 31 +0.0 + 0 +LINE + 5 +1578 + 8 +0 + 62 + 0 + 10 +6125.62101 + 20 +9726.129215 + 30 +0.0 + 11 +6125.62101 + 21 +9726.129215 + 31 +0.0 + 0 +LINE + 5 +1579 + 8 +0 + 62 + 0 + 10 +6106.491098 + 20 +9671.012888 + 30 +0.0 + 11 +6106.491098 + 21 +9671.012888 + 31 +0.0 + 0 +LINE + 5 +157A + 8 +0 + 62 + 0 + 10 +6126.397586 + 20 +9652.771953 + 30 +0.0 + 11 +6126.397586 + 21 +9652.771953 + 31 +0.0 + 0 +LINE + 5 +157B + 8 +0 + 62 + 0 + 10 +6130.083973 + 20 +9649.394002 + 30 +0.0 + 11 +6130.083973 + 21 +9649.394002 + 31 +0.0 + 0 +LINE + 5 +157C + 8 +0 + 62 + 0 + 10 +6107.267674 + 20 +9597.655626 + 30 +0.0 + 11 +6107.267674 + 21 +9597.655626 + 31 +0.0 + 0 +LINE + 5 +157D + 8 +0 + 62 + 0 + 10 +6110.954061 + 20 +9594.277675 + 30 +0.0 + 11 +6110.954061 + 21 +9594.277675 + 31 +0.0 + 0 +LINE + 5 +157E + 8 +0 + 62 + 0 + 10 +6128.353806 + 20 +9578.333746 + 30 +0.0 + 11 +6128.353806 + 21 +9578.333746 + 31 +0.0 + 0 +LINE + 5 +157F + 8 +0 + 62 + 0 + 10 +7058.913332 + 20 +10192.288781 + 30 +0.0 + 11 +7058.913332 + 21 +10192.288781 + 31 +0.0 + 0 +LINE + 5 +1580 + 8 +0 + 62 + 0 + 10 +7083.031274 + 20 +10210.795128 + 30 +0.0 + 11 +7083.031274 + 21 +10210.795128 + 31 +0.0 + 0 +LINE + 5 +1581 + 8 +0 + 62 + 0 + 10 +7057.653465 + 20 +10230.825256 + 30 +0.0 + 11 +7057.653465 + 21 +10230.825256 + 31 +0.0 + 0 +LINE + 5 +1582 + 8 +0 + 62 + 0 + 10 +7081.771407 + 20 +10249.331604 + 30 +0.0 + 11 +7081.771407 + 21 +10249.331604 + 31 +0.0 + 0 +LINE + 5 +1583 + 8 +0 + 62 + 0 + 10 +7056.393598 + 20 +10269.361732 + 30 +0.0 + 11 +7056.393598 + 21 +10269.361732 + 31 +0.0 + 0 +LINE + 5 +1584 + 8 +0 + 62 + 0 + 10 +7080.51154 + 20 +10287.868079 + 30 +0.0 + 11 +7080.51154 + 21 +10287.868079 + 31 +0.0 + 0 +LINE + 5 +1585 + 8 +0 + 62 + 0 + 10 +7079.251672 + 20 +10326.404554 + 30 +0.0 + 11 +7079.251672 + 21 +10326.404554 + 31 +0.0 + 0 +LINE + 5 +1586 + 8 +0 + 62 + 0 + 10 +7077.991805 + 20 +10364.94103 + 30 +0.0 + 11 +7077.991805 + 21 +10364.94103 + 31 +0.0 + 0 +LINE + 5 +1587 + 8 +0 + 62 + 0 + 10 +7076.731938 + 20 +10403.477505 + 30 +0.0 + 11 +7076.731938 + 21 +10403.477505 + 31 +0.0 + 0 +LINE + 5 +1588 + 8 +0 + 62 + 0 + 10 +7075.472071 + 20 +10442.013981 + 30 +0.0 + 11 +7075.472071 + 21 +10442.013981 + 31 +0.0 + 0 +LINE + 5 +1589 + 8 +0 + 62 + 0 + 10 +7074.212204 + 20 +10480.550456 + 30 +0.0 + 11 +7074.212204 + 21 +10480.550456 + 31 +0.0 + 0 +LINE + 5 +158A + 8 +0 + 62 + 0 + 10 +7072.952337 + 20 +10519.086931 + 30 +0.0 + 11 +7072.952337 + 21 +10519.086931 + 31 +0.0 + 0 +LINE + 5 +158B + 8 +0 + 62 + 0 + 10 +7071.692469 + 20 +10557.623407 + 30 +0.0 + 11 +7071.692469 + 21 +10557.623407 + 31 +0.0 + 0 +LINE + 5 +158C + 8 +0 + 62 + 0 + 10 +7070.432602 + 20 +10596.159882 + 30 +0.0 + 11 +7070.432602 + 21 +10596.159882 + 31 +0.0 + 0 +LINE + 5 +158D + 8 +0 + 62 + 0 + 10 +7069.172735 + 20 +10634.696358 + 30 +0.0 + 11 +7069.172735 + 21 +10634.696358 + 31 +0.0 + 0 +LINE + 5 +158E + 8 +0 + 62 + 0 + 10 +7067.912868 + 20 +10673.232833 + 30 +0.0 + 11 +7067.912868 + 21 +10673.232833 + 31 +0.0 + 0 +LINE + 5 +158F + 8 +0 + 62 + 0 + 10 +7066.653001 + 20 +10711.769308 + 30 +0.0 + 11 +7066.653001 + 21 +10711.769308 + 31 +0.0 + 0 +LINE + 5 +1590 + 8 +0 + 62 + 0 + 10 +7093.627014 + 20 +10732.467197 + 30 +0.0 + 11 +7093.627014 + 21 +10732.467197 + 31 +0.0 + 0 +LINE + 5 +1591 + 8 +0 + 62 + 0 + 10 +7065.393134 + 20 +10750.305784 + 30 +0.0 + 11 +7065.393134 + 21 +10750.305784 + 31 +0.0 + 0 +LINE + 5 +1592 + 8 +0 + 62 + 0 + 10 +7092.367147 + 20 +10771.003672 + 30 +0.0 + 11 +7092.367147 + 21 +10771.003672 + 31 +0.0 + 0 +LINE + 5 +1593 + 8 +0 + 62 + 0 + 10 +7064.133266 + 20 +10788.842259 + 30 +0.0 + 11 +7064.133266 + 21 +10788.842259 + 31 +0.0 + 0 +LINE + 5 +1594 + 8 +0 + 62 + 0 + 10 +7091.10728 + 20 +10809.540148 + 30 +0.0 + 11 +7091.10728 + 21 +10809.540148 + 31 +0.0 + 0 +LINE + 5 +1595 + 8 +0 + 62 + 0 + 10 +7062.873399 + 20 +10827.378734 + 30 +0.0 + 11 +7062.873399 + 21 +10827.378734 + 31 +0.0 + 0 +LINE + 5 +1596 + 8 +0 + 62 + 0 + 10 +7089.847413 + 20 +10848.076623 + 30 +0.0 + 11 +7089.847413 + 21 +10848.076623 + 31 +0.0 + 0 +LINE + 5 +1597 + 8 +0 + 62 + 0 + 10 +7061.613532 + 20 +10865.91521 + 30 +0.0 + 11 +7061.613532 + 21 +10865.91521 + 31 +0.0 + 0 +LINE + 5 +1598 + 8 +0 + 62 + 0 + 10 +7088.587546 + 20 +10886.613098 + 30 +0.0 + 11 +7088.587546 + 21 +10886.613098 + 31 +0.0 + 0 +LINE + 5 +1599 + 8 +0 + 62 + 0 + 10 +7060.353665 + 20 +10904.451685 + 30 +0.0 + 11 +7060.353665 + 21 +10904.451685 + 31 +0.0 + 0 +LINE + 5 +159A + 8 +0 + 62 + 0 + 10 +7087.327678 + 20 +10925.149574 + 30 +0.0 + 11 +7087.327678 + 21 +10925.149574 + 31 +0.0 + 0 +LINE + 5 +159B + 8 +0 + 62 + 0 + 10 +7059.093798 + 20 +10942.988161 + 30 +0.0 + 11 +7059.093798 + 21 +10942.988161 + 31 +0.0 + 0 +LINE + 5 +159C + 8 +0 + 62 + 0 + 10 +7086.067811 + 20 +10963.686049 + 30 +0.0 + 11 +7086.067811 + 21 +10963.686049 + 31 +0.0 + 0 +LINE + 5 +159D + 8 +0 + 62 + 0 + 10 +7057.833931 + 20 +10981.524636 + 30 +0.0 + 11 +7057.833931 + 21 +10981.524636 + 31 +0.0 + 0 +LINE + 5 +159E + 8 +0 + 62 + 0 + 10 +7084.807944 + 20 +11002.222525 + 30 +0.0 + 11 +7084.807944 + 21 +11002.222525 + 31 +0.0 + 0 +LINE + 5 +159F + 8 +0 + 62 + 0 + 10 +7056.574063 + 20 +11020.061111 + 30 +0.0 + 11 +7056.574063 + 21 +11020.061111 + 31 +0.0 + 0 +LINE + 5 +15A0 + 8 +0 + 62 + 0 + 10 +7083.548077 + 20 +11040.759 + 30 +0.0 + 11 +7083.548077 + 21 +11040.759 + 31 +0.0 + 0 +LINE + 5 +15A1 + 8 +0 + 62 + 0 + 10 +7082.28821 + 20 +11079.295475 + 30 +0.0 + 11 +7082.28821 + 21 +11079.295475 + 31 +0.0 + 0 +LINE + 5 +15A2 + 8 +0 + 62 + 0 + 10 +7081.028343 + 20 +11117.831951 + 30 +0.0 + 11 +7081.028343 + 21 +11117.831951 + 31 +0.0 + 0 +LINE + 5 +15A3 + 8 +0 + 62 + 0 + 10 +7079.768476 + 20 +11156.368426 + 30 +0.0 + 11 +7079.768476 + 21 +11156.368426 + 31 +0.0 + 0 +LINE + 5 +15A4 + 8 +0 + 62 + 0 + 10 +7078.508608 + 20 +11194.904901 + 30 +0.0 + 11 +7078.508608 + 21 +11194.904901 + 31 +0.0 + 0 +LINE + 5 +15A5 + 8 +0 + 62 + 0 + 10 +7060.173199 + 20 +10153.752306 + 30 +0.0 + 11 +7060.173199 + 21 +10153.752306 + 31 +0.0 + 0 +LINE + 5 +15A6 + 8 +0 + 62 + 0 + 10 +7084.291141 + 20 +10172.258653 + 30 +0.0 + 11 +7084.291141 + 21 +10172.258653 + 31 +0.0 + 0 +LINE + 5 +15A7 + 8 +0 + 62 + 0 + 10 +7061.433067 + 20 +10115.21583 + 30 +0.0 + 11 +7061.433067 + 21 +10115.21583 + 31 +0.0 + 0 +LINE + 5 +15A8 + 8 +0 + 62 + 0 + 10 +7085.551008 + 20 +10133.722178 + 30 +0.0 + 11 +7085.551008 + 21 +10133.722178 + 31 +0.0 + 0 +LINE + 5 +15A9 + 8 +0 + 62 + 0 + 10 +7062.692934 + 20 +10076.679355 + 30 +0.0 + 11 +7062.692934 + 21 +10076.679355 + 31 +0.0 + 0 +LINE + 5 +15AA + 8 +0 + 62 + 0 + 10 +7086.810875 + 20 +10095.185702 + 30 +0.0 + 11 +7086.810875 + 21 +10095.185702 + 31 +0.0 + 0 +LINE + 5 +15AB + 8 +0 + 62 + 0 + 10 +7063.952801 + 20 +10038.142879 + 30 +0.0 + 11 +7063.952801 + 21 +10038.142879 + 31 +0.0 + 0 +LINE + 5 +15AC + 8 +0 + 62 + 0 + 10 +7088.070742 + 20 +10056.649227 + 30 +0.0 + 11 +7088.070742 + 21 +10056.649227 + 31 +0.0 + 0 +LINE + 5 +15AD + 8 +0 + 62 + 0 + 10 +7065.212668 + 20 +9999.606404 + 30 +0.0 + 11 +7065.212668 + 21 +9999.606404 + 31 +0.0 + 0 +LINE + 5 +15AE + 8 +0 + 62 + 0 + 10 +7089.33061 + 20 +10018.112751 + 30 +0.0 + 11 +7089.33061 + 21 +10018.112751 + 31 +0.0 + 0 +LINE + 5 +15AF + 8 +0 + 62 + 0 + 10 +7066.472535 + 20 +9961.069929 + 30 +0.0 + 11 +7066.472535 + 21 +9961.069929 + 31 +0.0 + 0 +LINE + 5 +15B0 + 8 +0 + 62 + 0 + 10 +7090.590477 + 20 +9979.576276 + 30 +0.0 + 11 +7090.590477 + 21 +9979.576276 + 31 +0.0 + 0 +LINE + 5 +15B1 + 8 +0 + 62 + 0 + 10 +7067.732402 + 20 +9922.533453 + 30 +0.0 + 11 +7067.732402 + 21 +9922.533453 + 31 +0.0 + 0 +LINE + 5 +15B2 + 8 +0 + 62 + 0 + 10 +7091.850344 + 20 +9941.039801 + 30 +0.0 + 11 +7091.850344 + 21 +9941.039801 + 31 +0.0 + 0 +LINE + 5 +15B3 + 8 +0 + 62 + 0 + 10 +7068.99227 + 20 +9883.996978 + 30 +0.0 + 11 +7068.99227 + 21 +9883.996978 + 31 +0.0 + 0 +LINE + 5 +15B4 + 8 +0 + 62 + 0 + 10 +7093.110211 + 20 +9902.503325 + 30 +0.0 + 11 +7093.110211 + 21 +9902.503325 + 31 +0.0 + 0 +LINE + 5 +15B5 + 8 +0 + 62 + 0 + 10 +7070.252137 + 20 +9845.460502 + 30 +0.0 + 11 +7070.252137 + 21 +9845.460502 + 31 +0.0 + 0 +LINE + 5 +15B6 + 8 +0 + 62 + 0 + 10 +7071.512004 + 20 +9806.924027 + 30 +0.0 + 11 +7071.512004 + 21 +9806.924027 + 31 +0.0 + 0 +LINE + 5 +15B7 + 8 +0 + 62 + 0 + 10 +7072.771871 + 20 +9768.387552 + 30 +0.0 + 11 +7072.771871 + 21 +9768.387552 + 31 +0.0 + 0 +LINE + 5 +15B8 + 8 +0 + 62 + 0 + 10 +7074.031738 + 20 +9729.851076 + 30 +0.0 + 11 +7074.031738 + 21 +9729.851076 + 31 +0.0 + 0 +LINE + 5 +15B9 + 8 +0 + 62 + 0 + 10 +7075.291605 + 20 +9691.314601 + 30 +0.0 + 11 +7075.291605 + 21 +9691.314601 + 31 +0.0 + 0 +LINE + 5 +15BA + 8 +0 + 62 + 0 + 10 +7076.551473 + 20 +9652.778126 + 30 +0.0 + 11 +7076.551473 + 21 +9652.778126 + 31 +0.0 + 0 +LINE + 5 +15BB + 8 +0 + 62 + 0 + 10 +7077.81134 + 20 +9614.24165 + 30 +0.0 + 11 +7077.81134 + 21 +9614.24165 + 31 +0.0 + 0 +LINE + 5 +15BC + 8 +0 + 62 + 0 + 10 +7079.071207 + 20 +9575.705175 + 30 +0.0 + 11 +7079.071207 + 21 +9575.705175 + 31 +0.0 + 0 +LINE + 5 +15BD + 8 +0 + 62 + 0 + 10 +7080.331074 + 20 +9537.168699 + 30 +0.0 + 11 +7080.331074 + 21 +9537.168699 + 31 +0.0 + 0 +LINE + 5 +15BE + 8 +0 + 62 + 0 + 10 +7068.541046 + 20 +10218.807581 + 30 +0.0 + 11 +7068.541046 + 21 +10218.807581 + 31 +0.0 + 0 +LINE + 5 +15BF + 8 +0 + 62 + 0 + 10 +7078.951217 + 20 +10220.178106 + 30 +0.0 + 11 +7078.951217 + 21 +10220.178106 + 31 +0.0 + 0 +LINE + 5 +15C0 + 8 +0 + 62 + 0 + 10 +7060.511295 + 20 +10269.533455 + 30 +0.0 + 11 +7060.511295 + 21 +10269.533455 + 31 +0.0 + 0 +LINE + 5 +15C1 + 8 +0 + 62 + 0 + 10 +7076.77099 + 20 +10271.674084 + 30 +0.0 + 11 +7076.77099 + 21 +10271.674084 + 31 +0.0 + 0 +LINE + 5 +15C2 + 8 +0 + 62 + 0 + 10 +7058.331069 + 20 +10321.029434 + 30 +0.0 + 11 +7058.331069 + 21 +10321.029434 + 31 +0.0 + 0 +LINE + 5 +15C3 + 8 +0 + 62 + 0 + 10 +7085.496658 + 20 +10324.605851 + 30 +0.0 + 11 +7085.496658 + 21 +10324.605851 + 31 +0.0 + 0 +LINE + 5 +15C4 + 8 +0 + 62 + 0 + 10 +7067.056736 + 20 +10373.9612 + 30 +0.0 + 11 +7067.056736 + 21 +10373.9612 + 31 +0.0 + 0 +LINE + 5 +15C5 + 8 +0 + 62 + 0 + 10 +7077.466907 + 20 +10375.331725 + 30 +0.0 + 11 +7077.466907 + 21 +10375.331725 + 31 +0.0 + 0 +LINE + 5 +15C6 + 8 +0 + 62 + 0 + 10 +7059.026985 + 20 +10424.687074 + 30 +0.0 + 11 +7059.026985 + 21 +10424.687074 + 31 +0.0 + 0 +LINE + 5 +15C7 + 8 +0 + 62 + 0 + 10 +7075.286681 + 20 +10426.827704 + 30 +0.0 + 11 +7075.286681 + 21 +10426.827704 + 31 +0.0 + 0 +LINE + 5 +15C8 + 8 +0 + 62 + 0 + 10 +7056.846759 + 20 +10476.183053 + 30 +0.0 + 11 +7056.846759 + 21 +10476.183053 + 31 +0.0 + 0 +LINE + 5 +15C9 + 8 +0 + 62 + 0 + 10 +7084.012348 + 20 +10479.759471 + 30 +0.0 + 11 +7084.012348 + 21 +10479.759471 + 31 +0.0 + 0 +LINE + 5 +15CA + 8 +0 + 62 + 0 + 10 +7065.572426 + 20 +10529.11482 + 30 +0.0 + 11 +7065.572426 + 21 +10529.11482 + 31 +0.0 + 0 +LINE + 5 +15CB + 8 +0 + 62 + 0 + 10 +7075.982597 + 20 +10530.485345 + 30 +0.0 + 11 +7075.982597 + 21 +10530.485345 + 31 +0.0 + 0 +LINE + 5 +15CC + 8 +0 + 62 + 0 + 10 +7092.242293 + 20 +10532.625974 + 30 +0.0 + 11 +7092.242293 + 21 +10532.625974 + 31 +0.0 + 0 +LINE + 5 +15CD + 8 +0 + 62 + 0 + 10 +7057.542675 + 20 +10579.840694 + 30 +0.0 + 11 +7057.542675 + 21 +10579.840694 + 31 +0.0 + 0 +LINE + 5 +15CE + 8 +0 + 62 + 0 + 10 +7073.802371 + 20 +10581.981323 + 30 +0.0 + 11 +7073.802371 + 21 +10581.981323 + 31 +0.0 + 0 +LINE + 5 +15CF + 8 +0 + 62 + 0 + 10 +7082.528039 + 20 +10634.91309 + 30 +0.0 + 11 +7082.528039 + 21 +10634.91309 + 31 +0.0 + 0 +LINE + 5 +15D0 + 8 +0 + 62 + 0 + 10 +7092.93821 + 20 +10636.283615 + 30 +0.0 + 11 +7092.93821 + 21 +10636.283615 + 31 +0.0 + 0 +LINE + 5 +15D1 + 8 +0 + 62 + 0 + 10 +7064.088117 + 20 +10684.268439 + 30 +0.0 + 11 +7064.088117 + 21 +10684.268439 + 31 +0.0 + 0 +LINE + 5 +15D2 + 8 +0 + 62 + 0 + 10 +7074.498288 + 20 +10685.638964 + 30 +0.0 + 11 +7074.498288 + 21 +10685.638964 + 31 +0.0 + 0 +LINE + 5 +15D3 + 8 +0 + 62 + 0 + 10 +7090.757983 + 20 +10687.779594 + 30 +0.0 + 11 +7090.757983 + 21 +10687.779594 + 31 +0.0 + 0 +LINE + 5 +15D4 + 8 +0 + 62 + 0 + 10 +7072.318062 + 20 +10737.134943 + 30 +0.0 + 11 +7072.318062 + 21 +10737.134943 + 31 +0.0 + 0 +LINE + 5 +15D5 + 8 +0 + 62 + 0 + 10 +7081.043729 + 20 +10790.06671 + 30 +0.0 + 11 +7081.043729 + 21 +10790.06671 + 31 +0.0 + 0 +LINE + 5 +15D6 + 8 +0 + 62 + 0 + 10 +7091.4539 + 20 +10791.437235 + 30 +0.0 + 11 +7091.4539 + 21 +10791.437235 + 31 +0.0 + 0 +LINE + 5 +15D7 + 8 +0 + 62 + 0 + 10 +7062.603807 + 20 +10839.422059 + 30 +0.0 + 11 +7062.603807 + 21 +10839.422059 + 31 +0.0 + 0 +LINE + 5 +15D8 + 8 +0 + 62 + 0 + 10 +7073.013978 + 20 +10840.792584 + 30 +0.0 + 11 +7073.013978 + 21 +10840.792584 + 31 +0.0 + 0 +LINE + 5 +15D9 + 8 +0 + 62 + 0 + 10 +7089.273674 + 20 +10842.933213 + 30 +0.0 + 11 +7089.273674 + 21 +10842.933213 + 31 +0.0 + 0 +LINE + 5 +15DA + 8 +0 + 62 + 0 + 10 +7070.833752 + 20 +10892.288562 + 30 +0.0 + 11 +7070.833752 + 21 +10892.288562 + 31 +0.0 + 0 +LINE + 5 +15DB + 8 +0 + 62 + 0 + 10 +7079.559419 + 20 +10945.220329 + 30 +0.0 + 11 +7079.559419 + 21 +10945.220329 + 31 +0.0 + 0 +LINE + 5 +15DC + 8 +0 + 62 + 0 + 10 +7089.96959 + 20 +10946.590854 + 30 +0.0 + 11 +7089.96959 + 21 +10946.590854 + 31 +0.0 + 0 +LINE + 5 +15DD + 8 +0 + 62 + 0 + 10 +7061.119497 + 20 +10994.575678 + 30 +0.0 + 11 +7061.119497 + 21 +10994.575678 + 31 +0.0 + 0 +LINE + 5 +15DE + 8 +0 + 62 + 0 + 10 +7071.529668 + 20 +10995.946203 + 30 +0.0 + 11 +7071.529668 + 21 +10995.946203 + 31 +0.0 + 0 +LINE + 5 +15DF + 8 +0 + 62 + 0 + 10 +7087.789364 + 20 +10998.086833 + 30 +0.0 + 11 +7087.789364 + 21 +10998.086833 + 31 +0.0 + 0 +LINE + 5 +15E0 + 8 +0 + 62 + 0 + 10 +7069.349442 + 20 +11047.442182 + 30 +0.0 + 11 +7069.349442 + 21 +11047.442182 + 31 +0.0 + 0 +LINE + 5 +15E1 + 8 +0 + 62 + 0 + 10 +7078.07511 + 20 +11100.373948 + 30 +0.0 + 11 +7078.07511 + 21 +11100.373948 + 31 +0.0 + 0 +LINE + 5 +15E2 + 8 +0 + 62 + 0 + 10 +7088.485281 + 20 +11101.744473 + 30 +0.0 + 11 +7088.485281 + 21 +11101.744473 + 31 +0.0 + 0 +LINE + 5 +15E3 + 8 +0 + 62 + 0 + 10 +7059.635188 + 20 +11149.729297 + 30 +0.0 + 11 +7059.635188 + 21 +11149.729297 + 31 +0.0 + 0 +LINE + 5 +15E4 + 8 +0 + 62 + 0 + 10 +7070.045359 + 20 +11151.099822 + 30 +0.0 + 11 +7070.045359 + 21 +11151.099822 + 31 +0.0 + 0 +LINE + 5 +15E5 + 8 +0 + 62 + 0 + 10 +7086.305055 + 20 +11153.240452 + 30 +0.0 + 11 +7086.305055 + 21 +11153.240452 + 31 +0.0 + 0 +LINE + 5 +15E6 + 8 +0 + 62 + 0 + 10 +7067.865133 + 20 +11202.595801 + 30 +0.0 + 11 +7067.865133 + 21 +11202.595801 + 31 +0.0 + 0 +LINE + 5 +15E7 + 8 +0 + 62 + 0 + 10 +7059.815378 + 20 +10165.875814 + 30 +0.0 + 11 +7059.815378 + 21 +10165.875814 + 31 +0.0 + 0 +LINE + 5 +15E8 + 8 +0 + 62 + 0 + 10 +7086.980967 + 20 +10169.452232 + 30 +0.0 + 11 +7086.980967 + 21 +10169.452232 + 31 +0.0 + 0 +LINE + 5 +15E9 + 8 +0 + 62 + 0 + 10 +7061.995604 + 20 +10114.379835 + 30 +0.0 + 11 +7061.995604 + 21 +10114.379835 + 31 +0.0 + 0 +LINE + 5 +15EA + 8 +0 + 62 + 0 + 10 +7078.2553 + 20 +10116.520465 + 30 +0.0 + 11 +7078.2553 + 21 +10116.520465 + 31 +0.0 + 0 +LINE + 5 +15EB + 8 +0 + 62 + 0 + 10 +7070.025355 + 20 +10063.653961 + 30 +0.0 + 11 +7070.025355 + 21 +10063.653961 + 31 +0.0 + 0 +LINE + 5 +15EC + 8 +0 + 62 + 0 + 10 +7080.435526 + 20 +10065.024486 + 30 +0.0 + 11 +7080.435526 + 21 +10065.024486 + 31 +0.0 + 0 +LINE + 5 +15ED + 8 +0 + 62 + 0 + 10 +7061.299688 + 20 +10010.722195 + 30 +0.0 + 11 +7061.299688 + 21 +10010.722195 + 31 +0.0 + 0 +LINE + 5 +15EE + 8 +0 + 62 + 0 + 10 +7088.465277 + 20 +10014.298612 + 30 +0.0 + 11 +7088.465277 + 21 +10014.298612 + 31 +0.0 + 0 +LINE + 5 +15EF + 8 +0 + 62 + 0 + 10 +7063.479914 + 20 +9959.226216 + 30 +0.0 + 11 +7063.479914 + 21 +9959.226216 + 31 +0.0 + 0 +LINE + 5 +15F0 + 8 +0 + 62 + 0 + 10 +7079.73961 + 20 +9961.366846 + 30 +0.0 + 11 +7079.73961 + 21 +9961.366846 + 31 +0.0 + 0 +LINE + 5 +15F1 + 8 +0 + 62 + 0 + 10 +7071.509665 + 20 +9908.500342 + 30 +0.0 + 11 +7071.509665 + 21 +9908.500342 + 31 +0.0 + 0 +LINE + 5 +15F2 + 8 +0 + 62 + 0 + 10 +7081.919836 + 20 +9909.870867 + 30 +0.0 + 11 +7081.919836 + 21 +9909.870867 + 31 +0.0 + 0 +LINE + 5 +15F3 + 8 +0 + 62 + 0 + 10 +7062.783997 + 20 +9855.568575 + 30 +0.0 + 11 +7062.783997 + 21 +9855.568575 + 31 +0.0 + 0 +LINE + 5 +15F4 + 8 +0 + 62 + 0 + 10 +7089.949587 + 20 +9859.144993 + 30 +0.0 + 11 +7089.949587 + 21 +9859.144993 + 31 +0.0 + 0 +LINE + 5 +15F5 + 8 +0 + 62 + 0 + 10 +7064.964224 + 20 +9804.072597 + 30 +0.0 + 11 +7064.964224 + 21 +9804.072597 + 31 +0.0 + 0 +LINE + 5 +15F6 + 8 +0 + 62 + 0 + 10 +7081.223919 + 20 +9806.213226 + 30 +0.0 + 11 +7081.223919 + 21 +9806.213226 + 31 +0.0 + 0 +LINE + 5 +15F7 + 8 +0 + 62 + 0 + 10 +7072.993974 + 20 +9753.346723 + 30 +0.0 + 11 +7072.993974 + 21 +9753.346723 + 31 +0.0 + 0 +LINE + 5 +15F8 + 8 +0 + 62 + 0 + 10 +7083.404145 + 20 +9754.717248 + 30 +0.0 + 11 +7083.404145 + 21 +9754.717248 + 31 +0.0 + 0 +LINE + 5 +15F9 + 8 +0 + 62 + 0 + 10 +7064.268307 + 20 +9700.414956 + 30 +0.0 + 11 +7064.268307 + 21 +9700.414956 + 31 +0.0 + 0 +LINE + 5 +15FA + 8 +0 + 62 + 0 + 10 +7091.433896 + 20 +9703.991373 + 30 +0.0 + 11 +7091.433896 + 21 +9703.991373 + 31 +0.0 + 0 +LINE + 5 +15FB + 8 +0 + 62 + 0 + 10 +7066.448533 + 20 +9648.918977 + 30 +0.0 + 11 +7066.448533 + 21 +9648.918977 + 31 +0.0 + 0 +LINE + 5 +15FC + 8 +0 + 62 + 0 + 10 +7082.708229 + 20 +9651.059607 + 30 +0.0 + 11 +7082.708229 + 21 +9651.059607 + 31 +0.0 + 0 +LINE + 5 +15FD + 8 +0 + 62 + 0 + 10 +7074.478284 + 20 +9598.193103 + 30 +0.0 + 11 +7074.478284 + 21 +9598.193103 + 31 +0.0 + 0 +LINE + 5 +15FE + 8 +0 + 62 + 0 + 10 +7084.888455 + 20 +9599.563628 + 30 +0.0 + 11 +7084.888455 + 21 +9599.563628 + 31 +0.0 + 0 +LINE + 5 +15FF + 8 +0 + 62 + 0 + 10 +7065.752617 + 20 +9545.261336 + 30 +0.0 + 11 +7065.752617 + 21 +9545.261336 + 31 +0.0 + 0 +LINE + 5 +1600 + 8 +0 + 62 + 0 + 10 +7092.918206 + 20 +9548.837754 + 30 +0.0 + 11 +7092.918206 + 21 +9548.837754 + 31 +0.0 + 0 +LINE + 5 +1601 + 8 +0 + 62 + 0 + 10 +7062.509389 + 20 +10209.034185 + 30 +0.0 + 11 +7062.509389 + 21 +10209.034185 + 31 +0.0 + 0 +LINE + 5 +1602 + 8 +0 + 62 + 0 + 10 +7085.99622 + 20 +10233.863148 + 30 +0.0 + 11 +7085.99622 + 21 +10233.863148 + 31 +0.0 + 0 +LINE + 5 +1603 + 8 +0 + 62 + 0 + 10 +7069.843653 + 20 +10283.945192 + 30 +0.0 + 11 +7069.843653 + 21 +10283.945192 + 31 +0.0 + 0 +LINE + 5 +1604 + 8 +0 + 62 + 0 + 10 +7078.277567 + 20 +10278.572196 + 30 +0.0 + 11 +7078.277567 + 21 +10278.572196 + 31 +0.0 + 0 +LINE + 5 +1605 + 8 +0 + 62 + 0 + 10 +7062.125 + 20 +10328.654241 + 30 +0.0 + 11 +7062.125 + 21 +10328.654241 + 31 +0.0 + 0 +LINE + 5 +1606 + 8 +0 + 62 + 0 + 10 +7092.487092 + 20 +10309.311455 + 30 +0.0 + 11 +7092.487092 + 21 +10309.311455 + 31 +0.0 + 0 +LINE + 5 +1607 + 8 +0 + 62 + 0 + 10 +7076.334525 + 20 +10359.3935 + 30 +0.0 + 11 +7076.334525 + 21 +10359.3935 + 31 +0.0 + 0 +LINE + 5 +1608 + 8 +0 + 62 + 0 + 10 +7060.181957 + 20 +10409.475544 + 30 +0.0 + 11 +7060.181957 + 21 +10409.475544 + 31 +0.0 + 0 +LINE + 5 +1609 + 8 +0 + 62 + 0 + 10 +7083.668788 + 20 +10434.304507 + 30 +0.0 + 11 +7083.668788 + 21 +10434.304507 + 31 +0.0 + 0 +LINE + 5 +160A + 8 +0 + 62 + 0 + 10 +7092.102703 + 20 +10428.931511 + 30 +0.0 + 11 +7092.102703 + 21 +10428.931511 + 31 +0.0 + 0 +LINE + 5 +160B + 8 +0 + 62 + 0 + 10 +7067.516221 + 20 +10484.386552 + 30 +0.0 + 11 +7067.516221 + 21 +10484.386552 + 31 +0.0 + 0 +LINE + 5 +160C + 8 +0 + 62 + 0 + 10 +7075.950135 + 20 +10479.013556 + 30 +0.0 + 11 +7075.950135 + 21 +10479.013556 + 31 +0.0 + 0 +LINE + 5 +160D + 8 +0 + 62 + 0 + 10 +7059.797568 + 20 +10529.095601 + 30 +0.0 + 11 +7059.797568 + 21 +10529.095601 + 31 +0.0 + 0 +LINE + 5 +160E + 8 +0 + 62 + 0 + 10 +7090.15966 + 20 +10509.752815 + 30 +0.0 + 11 +7090.15966 + 21 +10509.752815 + 31 +0.0 + 0 +LINE + 5 +160F + 8 +0 + 62 + 0 + 10 +7074.007093 + 20 +10559.834859 + 30 +0.0 + 11 +7074.007093 + 21 +10559.834859 + 31 +0.0 + 0 +LINE + 5 +1610 + 8 +0 + 62 + 0 + 10 +7057.854526 + 20 +10609.916904 + 30 +0.0 + 11 +7057.854526 + 21 +10609.916904 + 31 +0.0 + 0 +LINE + 5 +1611 + 8 +0 + 62 + 0 + 10 +7081.341357 + 20 +10634.745867 + 30 +0.0 + 11 +7081.341357 + 21 +10634.745867 + 31 +0.0 + 0 +LINE + 5 +1612 + 8 +0 + 62 + 0 + 10 +7089.775271 + 20 +10629.372871 + 30 +0.0 + 11 +7089.775271 + 21 +10629.372871 + 31 +0.0 + 0 +LINE + 5 +1613 + 8 +0 + 62 + 0 + 10 +7065.188789 + 20 +10684.827912 + 30 +0.0 + 11 +7065.188789 + 21 +10684.827912 + 31 +0.0 + 0 +LINE + 5 +1614 + 8 +0 + 62 + 0 + 10 +7073.622704 + 20 +10679.454916 + 30 +0.0 + 11 +7073.622704 + 21 +10679.454916 + 31 +0.0 + 0 +LINE + 5 +1615 + 8 +0 + 62 + 0 + 10 +7057.470137 + 20 +10729.53696 + 30 +0.0 + 11 +7057.470137 + 21 +10729.53696 + 31 +0.0 + 0 +LINE + 5 +1616 + 8 +0 + 62 + 0 + 10 +7087.832229 + 20 +10710.194174 + 30 +0.0 + 11 +7087.832229 + 21 +10710.194174 + 31 +0.0 + 0 +LINE + 5 +1617 + 8 +0 + 62 + 0 + 10 +7071.679661 + 20 +10760.276219 + 30 +0.0 + 11 +7071.679661 + 21 +10760.276219 + 31 +0.0 + 0 +LINE + 5 +1618 + 8 +0 + 62 + 0 + 10 +7079.013925 + 20 +10835.187227 + 30 +0.0 + 11 +7079.013925 + 21 +10835.187227 + 31 +0.0 + 0 +LINE + 5 +1619 + 8 +0 + 62 + 0 + 10 +7087.447839 + 20 +10829.814231 + 30 +0.0 + 11 +7087.447839 + 21 +10829.814231 + 31 +0.0 + 0 +LINE + 5 +161A + 8 +0 + 62 + 0 + 10 +7062.861358 + 20 +10885.269271 + 30 +0.0 + 11 +7062.861358 + 21 +10885.269271 + 31 +0.0 + 0 +LINE + 5 +161B + 8 +0 + 62 + 0 + 10 +7071.295272 + 20 +10879.896275 + 30 +0.0 + 11 +7071.295272 + 21 +10879.896275 + 31 +0.0 + 0 +LINE + 5 +161C + 8 +0 + 62 + 0 + 10 +7085.504797 + 20 +10910.635534 + 30 +0.0 + 11 +7085.504797 + 21 +10910.635534 + 31 +0.0 + 0 +LINE + 5 +161D + 8 +0 + 62 + 0 + 10 +7069.35223 + 20 +10960.717579 + 30 +0.0 + 11 +7069.35223 + 21 +10960.717579 + 31 +0.0 + 0 +LINE + 5 +161E + 8 +0 + 62 + 0 + 10 +7092.83906 + 20 +10985.546542 + 30 +0.0 + 11 +7092.83906 + 21 +10985.546542 + 31 +0.0 + 0 +LINE + 5 +161F + 8 +0 + 62 + 0 + 10 +7076.686493 + 20 +11035.628586 + 30 +0.0 + 11 +7076.686493 + 21 +11035.628586 + 31 +0.0 + 0 +LINE + 5 +1620 + 8 +0 + 62 + 0 + 10 +7085.120408 + 20 +11030.25559 + 30 +0.0 + 11 +7085.120408 + 21 +11030.25559 + 31 +0.0 + 0 +LINE + 5 +1621 + 8 +0 + 62 + 0 + 10 +7060.533926 + 20 +11085.710631 + 30 +0.0 + 11 +7060.533926 + 21 +11085.710631 + 31 +0.0 + 0 +LINE + 5 +1622 + 8 +0 + 62 + 0 + 10 +7068.96784 + 20 +11080.337635 + 30 +0.0 + 11 +7068.96784 + 21 +11080.337635 + 31 +0.0 + 0 +LINE + 5 +1623 + 8 +0 + 62 + 0 + 10 +7083.177365 + 20 +11111.076894 + 30 +0.0 + 11 +7083.177365 + 21 +11111.076894 + 31 +0.0 + 0 +LINE + 5 +1624 + 8 +0 + 62 + 0 + 10 +7067.024798 + 20 +11161.158938 + 30 +0.0 + 11 +7067.024798 + 21 +11161.158938 + 31 +0.0 + 0 +LINE + 5 +1625 + 8 +0 + 62 + 0 + 10 +7090.511629 + 20 +11185.987901 + 30 +0.0 + 11 +7090.511629 + 21 +11185.987901 + 31 +0.0 + 0 +LINE + 5 +1626 + 8 +0 + 62 + 0 + 10 +7078.661956 + 20 +10158.95214 + 30 +0.0 + 11 +7078.661956 + 21 +10158.95214 + 31 +0.0 + 0 +LINE + 5 +1627 + 8 +0 + 62 + 0 + 10 +7064.452432 + 20 +10128.212881 + 30 +0.0 + 11 +7064.452432 + 21 +10128.212881 + 31 +0.0 + 0 +LINE + 5 +1628 + 8 +0 + 62 + 0 + 10 +7072.171084 + 20 +10083.503833 + 30 +0.0 + 11 +7072.171084 + 21 +10083.503833 + 31 +0.0 + 0 +LINE + 5 +1629 + 8 +0 + 62 + 0 + 10 +7080.604999 + 20 +10078.130837 + 30 +0.0 + 11 +7080.604999 + 21 +10078.130837 + 31 +0.0 + 0 +LINE + 5 +162A + 8 +0 + 62 + 0 + 10 +7088.323652 + 20 +10033.421788 + 30 +0.0 + 11 +7088.323652 + 21 +10033.421788 + 31 +0.0 + 0 +LINE + 5 +162B + 8 +0 + 62 + 0 + 10 +7064.836821 + 20 +10008.592825 + 30 +0.0 + 11 +7064.836821 + 21 +10008.592825 + 31 +0.0 + 0 +LINE + 5 +162C + 8 +0 + 62 + 0 + 10 +7080.989388 + 20 +9958.51078 + 30 +0.0 + 11 +7080.989388 + 21 +9958.51078 + 31 +0.0 + 0 +LINE + 5 +162D + 8 +0 + 62 + 0 + 10 +7058.345949 + 20 +9933.144518 + 30 +0.0 + 11 +7058.345949 + 21 +9933.144518 + 31 +0.0 + 0 +LINE + 5 +162E + 8 +0 + 62 + 0 + 10 +7066.779863 + 20 +9927.771522 + 30 +0.0 + 11 +7066.779863 + 21 +9927.771522 + 31 +0.0 + 0 +LINE + 5 +162F + 8 +0 + 62 + 0 + 10 +7074.498516 + 20 +9883.062473 + 30 +0.0 + 11 +7074.498516 + 21 +9883.062473 + 31 +0.0 + 0 +LINE + 5 +1630 + 8 +0 + 62 + 0 + 10 +7082.93243 + 20 +9877.689477 + 30 +0.0 + 11 +7082.93243 + 21 +9877.689477 + 31 +0.0 + 0 +LINE + 5 +1631 + 8 +0 + 62 + 0 + 10 +7090.651083 + 20 +9832.980428 + 30 +0.0 + 11 +7090.651083 + 21 +9832.980428 + 31 +0.0 + 0 +LINE + 5 +1632 + 8 +0 + 62 + 0 + 10 +7067.164252 + 20 +9808.151465 + 30 +0.0 + 11 +7067.164252 + 21 +9808.151465 + 31 +0.0 + 0 +LINE + 5 +1633 + 8 +0 + 62 + 0 + 10 +7083.31682 + 20 +9758.069421 + 30 +0.0 + 11 +7083.31682 + 21 +9758.069421 + 31 +0.0 + 0 +LINE + 5 +1634 + 8 +0 + 62 + 0 + 10 +7060.67338 + 20 +9732.703158 + 30 +0.0 + 11 +7060.67338 + 21 +9732.703158 + 31 +0.0 + 0 +LINE + 5 +1635 + 8 +0 + 62 + 0 + 10 +7069.107295 + 20 +9727.330162 + 30 +0.0 + 11 +7069.107295 + 21 +9727.330162 + 31 +0.0 + 0 +LINE + 5 +1636 + 8 +0 + 62 + 0 + 10 +7076.825948 + 20 +9682.621113 + 30 +0.0 + 11 +7076.825948 + 21 +9682.621113 + 31 +0.0 + 0 +LINE + 5 +1637 + 8 +0 + 62 + 0 + 10 +7085.259862 + 20 +9677.248117 + 30 +0.0 + 11 +7085.259862 + 21 +9677.248117 + 31 +0.0 + 0 +LINE + 5 +1638 + 8 +0 + 62 + 0 + 10 +7092.978515 + 20 +9632.539069 + 30 +0.0 + 11 +7092.978515 + 21 +9632.539069 + 31 +0.0 + 0 +LINE + 5 +1639 + 8 +0 + 62 + 0 + 10 +7069.491684 + 20 +9607.710106 + 30 +0.0 + 11 +7069.491684 + 21 +9607.710106 + 31 +0.0 + 0 +LINE + 5 +163A + 8 +0 + 62 + 0 + 10 +7085.644251 + 20 +9557.628061 + 30 +0.0 + 11 +7085.644251 + 21 +9557.628061 + 31 +0.0 + 0 +LINE + 5 +163B + 8 +0 + 62 + 0 + 10 +7063.762596 + 20 +10174.102745 + 30 +0.0 + 11 +7063.762596 + 21 +10174.102745 + 31 +0.0 + 0 +LINE + 5 +163C + 8 +0 + 62 + 0 + 10 +7067.448983 + 20 +10170.724794 + 30 +0.0 + 11 +7067.448983 + 21 +10170.724794 + 31 +0.0 + 0 +LINE + 5 +163D + 8 +0 + 62 + 0 + 10 +7084.848728 + 20 +10154.780865 + 30 +0.0 + 11 +7084.848728 + 21 +10154.780865 + 31 +0.0 + 0 +LINE + 5 +163E + 8 +0 + 62 + 0 + 10 +7062.98602 + 20 +10247.460008 + 30 +0.0 + 11 +7062.98602 + 21 +10247.460008 + 31 +0.0 + 0 +LINE + 5 +163F + 8 +0 + 62 + 0 + 10 +7082.892508 + 20 +10229.219072 + 30 +0.0 + 11 +7082.892508 + 21 +10229.219072 + 31 +0.0 + 0 +LINE + 5 +1640 + 8 +0 + 62 + 0 + 10 +7086.578895 + 20 +10225.841121 + 30 +0.0 + 11 +7086.578895 + 21 +10225.841121 + 31 +0.0 + 0 +LINE + 5 +1641 + 8 +0 + 62 + 0 + 10 +7061.029801 + 20 +10321.898214 + 30 +0.0 + 11 +7061.029801 + 21 +10321.898214 + 31 +0.0 + 0 +LINE + 5 +1642 + 8 +0 + 62 + 0 + 10 +7064.716187 + 20 +10318.520263 + 30 +0.0 + 11 +7064.716187 + 21 +10318.520263 + 31 +0.0 + 0 +LINE + 5 +1643 + 8 +0 + 62 + 0 + 10 +7082.115932 + 20 +10302.576334 + 30 +0.0 + 11 +7082.115932 + 21 +10302.576334 + 31 +0.0 + 0 +LINE + 5 +1644 + 8 +0 + 62 + 0 + 10 +7060.253225 + 20 +10395.255477 + 30 +0.0 + 11 +7060.253225 + 21 +10395.255477 + 31 +0.0 + 0 +LINE + 5 +1645 + 8 +0 + 62 + 0 + 10 +7080.159713 + 20 +10377.014541 + 30 +0.0 + 11 +7080.159713 + 21 +10377.014541 + 31 +0.0 + 0 +LINE + 5 +1646 + 8 +0 + 62 + 0 + 10 +7083.846099 + 20 +10373.63659 + 30 +0.0 + 11 +7083.846099 + 21 +10373.63659 + 31 +0.0 + 0 +LINE + 5 +1647 + 8 +0 + 62 + 0 + 10 +7058.297005 + 20 +10469.693684 + 30 +0.0 + 11 +7058.297005 + 21 +10469.693684 + 31 +0.0 + 0 +LINE + 5 +1648 + 8 +0 + 62 + 0 + 10 +7061.983392 + 20 +10466.315733 + 30 +0.0 + 11 +7061.983392 + 21 +10466.315733 + 31 +0.0 + 0 +LINE + 5 +1649 + 8 +0 + 62 + 0 + 10 +7079.383137 + 20 +10450.371804 + 30 +0.0 + 11 +7079.383137 + 21 +10450.371804 + 31 +0.0 + 0 +LINE + 5 +164A + 8 +0 + 62 + 0 + 10 +7057.520429 + 20 +10543.050946 + 30 +0.0 + 11 +7057.520429 + 21 +10543.050946 + 31 +0.0 + 0 +LINE + 5 +164B + 8 +0 + 62 + 0 + 10 +7077.426917 + 20 +10524.81001 + 30 +0.0 + 11 +7077.426917 + 21 +10524.81001 + 31 +0.0 + 0 +LINE + 5 +164C + 8 +0 + 62 + 0 + 10 +7081.113304 + 20 +10521.432059 + 30 +0.0 + 11 +7081.113304 + 21 +10521.432059 + 31 +0.0 + 0 +LINE + 5 +164D + 8 +0 + 62 + 0 + 10 +7059.250596 + 20 +10614.111202 + 30 +0.0 + 11 +7059.250596 + 21 +10614.111202 + 31 +0.0 + 0 +LINE + 5 +164E + 8 +0 + 62 + 0 + 10 +7076.650341 + 20 +10598.167273 + 30 +0.0 + 11 +7076.650341 + 21 +10598.167273 + 31 +0.0 + 0 +LINE + 5 +164F + 8 +0 + 62 + 0 + 10 +7074.694121 + 20 +10672.60548 + 30 +0.0 + 11 +7074.694121 + 21 +10672.60548 + 31 +0.0 + 0 +LINE + 5 +1650 + 8 +0 + 62 + 0 + 10 +7078.380508 + 20 +10669.227529 + 30 +0.0 + 11 +7078.380508 + 21 +10669.227529 + 31 +0.0 + 0 +LINE + 5 +1651 + 8 +0 + 62 + 0 + 10 +7056.5178 + 20 +10761.906671 + 30 +0.0 + 11 +7056.5178 + 21 +10761.906671 + 31 +0.0 + 0 +LINE + 5 +1652 + 8 +0 + 62 + 0 + 10 +7073.917546 + 20 +10745.962742 + 30 +0.0 + 11 +7073.917546 + 21 +10745.962742 + 31 +0.0 + 0 +LINE + 5 +1653 + 8 +0 + 62 + 0 + 10 +7071.961326 + 20 +10820.400949 + 30 +0.0 + 11 +7071.961326 + 21 +10820.400949 + 31 +0.0 + 0 +LINE + 5 +1654 + 8 +0 + 62 + 0 + 10 +7075.647713 + 20 +10817.022998 + 30 +0.0 + 11 +7075.647713 + 21 +10817.022998 + 31 +0.0 + 0 +LINE + 5 +1655 + 8 +0 + 62 + 0 + 10 +7093.047458 + 20 +10801.079069 + 30 +0.0 + 11 +7093.047458 + 21 +10801.079069 + 31 +0.0 + 0 +LINE + 5 +1656 + 8 +0 + 62 + 0 + 10 +7071.18475 + 20 +10893.758211 + 30 +0.0 + 11 +7071.18475 + 21 +10893.758211 + 31 +0.0 + 0 +LINE + 5 +1657 + 8 +0 + 62 + 0 + 10 +7091.091238 + 20 +10875.517276 + 30 +0.0 + 11 +7091.091238 + 21 +10875.517276 + 31 +0.0 + 0 +LINE + 5 +1658 + 8 +0 + 62 + 0 + 10 +7069.22853 + 20 +10968.196418 + 30 +0.0 + 11 +7069.22853 + 21 +10968.196418 + 31 +0.0 + 0 +LINE + 5 +1659 + 8 +0 + 62 + 0 + 10 +7072.914917 + 20 +10964.818467 + 30 +0.0 + 11 +7072.914917 + 21 +10964.818467 + 31 +0.0 + 0 +LINE + 5 +165A + 8 +0 + 62 + 0 + 10 +7090.314662 + 20 +10948.874538 + 30 +0.0 + 11 +7090.314662 + 21 +10948.874538 + 31 +0.0 + 0 +LINE + 5 +165B + 8 +0 + 62 + 0 + 10 +7068.451954 + 20 +11041.553681 + 30 +0.0 + 11 +7068.451954 + 21 +11041.553681 + 31 +0.0 + 0 +LINE + 5 +165C + 8 +0 + 62 + 0 + 10 +7088.358442 + 20 +11023.312745 + 30 +0.0 + 11 +7088.358442 + 21 +11023.312745 + 31 +0.0 + 0 +LINE + 5 +165D + 8 +0 + 62 + 0 + 10 +7092.044829 + 20 +11019.934794 + 30 +0.0 + 11 +7092.044829 + 21 +11019.934794 + 31 +0.0 + 0 +LINE + 5 +165E + 8 +0 + 62 + 0 + 10 +7066.495735 + 20 +11115.991887 + 30 +0.0 + 11 +7066.495735 + 21 +11115.991887 + 31 +0.0 + 0 +LINE + 5 +165F + 8 +0 + 62 + 0 + 10 +7070.182121 + 20 +11112.613936 + 30 +0.0 + 11 +7070.182121 + 21 +11112.613936 + 31 +0.0 + 0 +LINE + 5 +1660 + 8 +0 + 62 + 0 + 10 +7087.581867 + 20 +11096.670007 + 30 +0.0 + 11 +7087.581867 + 21 +11096.670007 + 31 +0.0 + 0 +LINE + 5 +1661 + 8 +0 + 62 + 0 + 10 +7065.719159 + 20 +11189.34915 + 30 +0.0 + 11 +7065.719159 + 21 +11189.34915 + 31 +0.0 + 0 +LINE + 5 +1662 + 8 +0 + 62 + 0 + 10 +7085.625647 + 20 +11171.108214 + 30 +0.0 + 11 +7085.625647 + 21 +11171.108214 + 31 +0.0 + 0 +LINE + 5 +1663 + 8 +0 + 62 + 0 + 10 +7089.312034 + 20 +11167.730263 + 30 +0.0 + 11 +7089.312034 + 21 +11167.730263 + 31 +0.0 + 0 +LINE + 5 +1664 + 8 +0 + 62 + 0 + 10 +7065.718816 + 20 +10099.664538 + 30 +0.0 + 11 +7065.718816 + 21 +10099.664538 + 31 +0.0 + 0 +LINE + 5 +1665 + 8 +0 + 62 + 0 + 10 +7085.625304 + 20 +10081.423603 + 30 +0.0 + 11 +7085.625304 + 21 +10081.423603 + 31 +0.0 + 0 +LINE + 5 +1666 + 8 +0 + 62 + 0 + 10 +7089.311691 + 20 +10078.045652 + 30 +0.0 + 11 +7089.311691 + 21 +10078.045652 + 31 +0.0 + 0 +LINE + 5 +1667 + 8 +0 + 62 + 0 + 10 +7066.495392 + 20 +10026.307276 + 30 +0.0 + 11 +7066.495392 + 21 +10026.307276 + 31 +0.0 + 0 +LINE + 5 +1668 + 8 +0 + 62 + 0 + 10 +7070.181778 + 20 +10022.929325 + 30 +0.0 + 11 +7070.181778 + 21 +10022.929325 + 31 +0.0 + 0 +LINE + 5 +1669 + 8 +0 + 62 + 0 + 10 +7087.581524 + 20 +10006.985396 + 30 +0.0 + 11 +7087.581524 + 21 +10006.985396 + 31 +0.0 + 0 +LINE + 5 +166A + 8 +0 + 62 + 0 + 10 +7068.451611 + 20 +9951.869069 + 30 +0.0 + 11 +7068.451611 + 21 +9951.869069 + 31 +0.0 + 0 +LINE + 5 +166B + 8 +0 + 62 + 0 + 10 +7088.358099 + 20 +9933.628134 + 30 +0.0 + 11 +7088.358099 + 21 +9933.628134 + 31 +0.0 + 0 +LINE + 5 +166C + 8 +0 + 62 + 0 + 10 +7092.044486 + 20 +9930.250183 + 30 +0.0 + 11 +7092.044486 + 21 +9930.250183 + 31 +0.0 + 0 +LINE + 5 +166D + 8 +0 + 62 + 0 + 10 +7069.228187 + 20 +9878.511807 + 30 +0.0 + 11 +7069.228187 + 21 +9878.511807 + 31 +0.0 + 0 +LINE + 5 +166E + 8 +0 + 62 + 0 + 10 +7072.914574 + 20 +9875.133856 + 30 +0.0 + 11 +7072.914574 + 21 +9875.133856 + 31 +0.0 + 0 +LINE + 5 +166F + 8 +0 + 62 + 0 + 10 +7090.314319 + 20 +9859.189927 + 30 +0.0 + 11 +7090.314319 + 21 +9859.189927 + 31 +0.0 + 0 +LINE + 5 +1670 + 8 +0 + 62 + 0 + 10 +7071.184407 + 20 +9804.0736 + 30 +0.0 + 11 +7071.184407 + 21 +9804.0736 + 31 +0.0 + 0 +LINE + 5 +1671 + 8 +0 + 62 + 0 + 10 +7091.090895 + 20 +9785.832664 + 30 +0.0 + 11 +7091.090895 + 21 +9785.832664 + 31 +0.0 + 0 +LINE + 5 +1672 + 8 +0 + 62 + 0 + 10 +7071.960983 + 20 +9730.716337 + 30 +0.0 + 11 +7071.960983 + 21 +9730.716337 + 31 +0.0 + 0 +LINE + 5 +1673 + 8 +0 + 62 + 0 + 10 +7075.64737 + 20 +9727.338386 + 30 +0.0 + 11 +7075.64737 + 21 +9727.338386 + 31 +0.0 + 0 +LINE + 5 +1674 + 8 +0 + 62 + 0 + 10 +7093.047115 + 20 +9711.394458 + 30 +0.0 + 11 +7093.047115 + 21 +9711.394458 + 31 +0.0 + 0 +LINE + 5 +1675 + 8 +0 + 62 + 0 + 10 +7056.517457 + 20 +9672.22206 + 30 +0.0 + 11 +7056.517457 + 21 +9672.22206 + 31 +0.0 + 0 +LINE + 5 +1676 + 8 +0 + 62 + 0 + 10 +7073.917203 + 20 +9656.278131 + 30 +0.0 + 11 +7073.917203 + 21 +9656.278131 + 31 +0.0 + 0 +LINE + 5 +1677 + 8 +0 + 62 + 0 + 10 +7074.693779 + 20 +9582.920868 + 30 +0.0 + 11 +7074.693779 + 21 +9582.920868 + 31 +0.0 + 0 +LINE + 5 +1678 + 8 +0 + 62 + 0 + 10 +7078.380165 + 20 +9579.542917 + 30 +0.0 + 11 +7078.380165 + 21 +9579.542917 + 31 +0.0 + 0 +DIMENSION + 5 +1679 + 8 +BEMASSUNG + 2 +*D26 + 10 +6141.572752 + 20 +8884.916877 + 30 +0.0 + 11 +6040.0 + 21 +8972.416877 + 31 +0.0 + 70 + 128 + 1 +1 + 13 +6100.665062 + 23 +9555.000103 + 33 +0.0 + 14 +6141.572752 + 24 +9555.000103 + 34 +0.0 + 0 +DIMENSION + 5 +167A + 8 +BEMASSUNG + 2 +*D20 + 10 +7052.902997 + 20 +8884.916877 + 30 +0.0 + 11 +6597.237875 + 21 +8972.416877 + 31 +0.0 + 1 +36 + 13 +6141.572752 + 23 +9555.000103 + 33 +0.0 + 14 +7052.902997 + 24 +9561.814406 + 34 +0.0 + 0 +DIMENSION + 5 +167B + 8 +BEMASSUNG + 2 +*D27 + 10 +7091.53801 + 20 +8884.916877 + 30 +0.0 + 11 +7145.0 + 21 +8972.416877 + 31 +0.0 + 70 + 128 + 1 +1 + 13 +7052.902997 + 23 +9561.814406 + 33 +0.0 + 14 +7091.53801 + 24 +9555.000103 + 34 +0.0 + 0 +DIMENSION + 5 +167C + 8 +BEMASSUNG + 2 +*D21 + 10 +5789.99228 + 20 +13098.623281 + 30 +0.0 + 11 +5645.684244 + 21 +13186.123281 + 31 +0.0 + 1 +11 + 13 +5501.376207 + 23 +12526.305162 + 33 +0.0 + 14 +5789.99228 + 24 +12526.305162 + 34 +0.0 + 0 +DIMENSION + 5 +167D + 8 +BEMASSUNG + 2 +*D22 + 10 +5940.072764 + 20 +13098.623281 + 30 +0.0 + 11 +5865.032522 + 21 +13186.123281 + 31 +0.0 + 1 +6 + 13 +5789.99228 + 23 +12526.305162 + 33 +0.0 + 14 +5940.072764 + 24 +12526.305162 + 34 +0.0 + 0 +DIMENSION + 5 +167E + 8 +BEMASSUNG + 2 +*D23 + 10 +6140.949559 + 20 +13098.623281 + 30 +0.0 + 11 +6040.511162 + 21 +13186.123281 + 31 +0.0 + 1 +8 + 13 +5940.072764 + 23 +12526.305162 + 33 +0.0 + 14 +6140.949559 + 24 +12521.68964 + 34 +0.0 + 0 +DIMENSION + 5 +167F + 8 +BEMASSUNG + 2 +*D24 + 10 +7062.212311 + 20 +13098.623281 + 30 +0.0 + 11 +6601.580935 + 21 +13186.123281 + 31 +0.0 + 1 +36 + 13 +6140.949559 + 23 +12521.68964 + 33 +0.0 + 14 +7062.212311 + 24 +12523.997349 + 34 +0.0 + 0 +DIMENSION + 5 +1680 + 8 +BEMASSUNG + 2 +*D25 + 10 +7099.155279 + 20 +13098.623281 + 30 +0.0 + 11 +7150.550955 + 21 +13186.123281 + 31 +0.0 + 70 + 128 + 1 +1 + 13 +7062.212311 + 23 +12523.997349 + 33 +0.0 + 14 +7099.155279 + 24 +12519.381932 + 34 +0.0 + 0 +DIMENSION + 5 +1681 + 8 +BEMASSUNG + 2 +*D19 + 10 +9369.023561 + 20 +11625.154251 + 30 +0.0 + 11 +9281.523561 + 21 +11426.926419 + 31 +0.0 + 1 +16 + 13 +8581.288492 + 23 +11228.698587 + 33 +0.0 + 14 +8581.288492 + 24 +11625.154251 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +1682 + 8 +BEMASSUNG + 2 +*D18 + 10 +9369.023561 + 20 +11728.455992 + 30 +0.0 + 11 +9281.523561 + 21 +11676.805121 + 31 +0.0 + 1 +4 + 13 +8581.288492 + 23 +11625.154251 + 33 +0.0 + 14 +8592.462088 + 24 +11728.455992 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +1683 + 8 +BEMASSUNG + 2 +*D17 + 10 +9369.023561 + 20 +11770.335123 + 30 +0.0 + 11 +9281.523561 + 21 +11749.395557 + 31 +0.0 + 1 +1 + 13 +8592.462088 + 23 +11728.455992 + 33 +0.0 + 14 +8592.462088 + 24 +11770.335123 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +1684 + 8 +BEMASSUNG + 2 +*D16 + 10 +9369.023561 + 20 +11868.053132 + 30 +0.0 + 11 +9281.523561 + 21 +11819.194128 + 31 +0.0 + 1 +4 + 13 +8592.462088 + 23 +11770.335123 + 33 +0.0 + 14 +8592.462088 + 24 +11868.053132 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +1685 + 8 +BEMASSUNG + 2 +*D28 + 10 +9369.023561 + 20 +11932.267711 + 30 +0.0 + 11 +9281.523561 + 21 +11980.0 + 31 +0.0 + 70 + 128 + 1 +2 + 13 +8592.462088 + 23 +11868.053132 + 33 +0.0 + 14 +8595.255445 + 24 +11932.267711 + 34 +0.0 + 50 +90.0 + 0 +TEXT + 5 +1686 + 8 +BEMASSUNG + 10 +5683.312116 + 20 +13202.168147 + 30 +0.0 + 40 +62.5 + 1 +5 + 41 +0.75 + 0 +TEXT + 5 +1687 + 8 +BEMASSUNG + 10 +6673.312116 + 20 +13202.168147 + 30 +0.0 + 40 +62.5 + 1 +5 + 41 +0.75 + 0 +TEXT + 5 +1688 + 8 +BEMASSUNG + 10 +7168.312116 + 20 +13202.168147 + 30 +0.0 + 40 +62.5 + 1 +5 + 41 +0.75 + 0 +TEXT + 5 +1689 + 8 +BEMASSUNG + 10 +6050.0 + 20 +8995.0 + 30 +0.0 + 40 +62.5 + 1 +5 + 41 +0.75 + 0 +TEXT + 5 +168A + 8 +BEMASSUNG + 10 +7165.0 + 20 +8995.0 + 30 +0.0 + 40 +62.5 + 1 +5 + 41 +0.75 + 0 +TEXT + 5 +168B + 8 +BEMASSUNG + 10 +6665.0 + 20 +8995.0 + 30 +0.0 + 40 +62.5 + 1 +5 + 41 +0.75 + 0 +TEXT + 5 +168C + 8 +BEMASSUNG + 10 +9285.0 + 20 +12020.0 + 30 +0.0 + 40 +62.5 + 1 +5 + 50 +90.0 + 41 +0.75 + 0 +TEXT + 5 +168D + 8 +LEGENDE-35 + 10 +8505.0 + 20 +13515.0 + 30 +0.0 + 40 +87.5 + 1 +GIPSPUTZ + 41 +0.75 + 0 +TEXT + 5 +168E + 8 +LEGENDE-35 + 10 +8505.0 + 20 +13265.0 + 30 +0.0 + 40 +87.5 + 1 +ABSCHLUSSLEISTE + 41 +0.75 + 0 +TEXT + 5 +168F + 8 +LEGENDE-35 + 10 +8505.0 + 20 +13015.0 + 30 +0.0 + 40 +87.5 + 1 +NATURSTEINPLATTEN + 41 +0.75 + 0 +TEXT + 5 +1690 + 8 +LEGENDE-35 + 10 +8505.0 + 20 +12765.0 + 30 +0.0 + 40 +87.5 + 1 +ZEMENTESTRICH + 41 +0.75 + 0 +TEXT + 5 +1691 + 8 +LEGENDE-35 + 10 +8505.0 + 20 +12515.0 + 30 +0.0 + 40 +87.5 + 1 +DICHTUNGSBAHN (PE/ BITUMEN) + 41 +0.75 + 0 +TEXT + 5 +1692 + 8 +LEGENDE-35 + 10 +8505.0 + 20 +12265.0 + 30 +0.0 + 40 +87.5 + 1 +PS-WÄDÄ + 41 +0.75 + 0 +POLYLINE + 5 +1693 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2017 + 8 +LEGENDE-35 + 10 +8355.0 + 20 +13560.0 + 30 +0.0 + 0 +VERTEX + 5 +2018 + 8 +LEGENDE-35 + 10 +7420.0 + 20 +13560.0 + 30 +0.0 + 0 +VERTEX + 5 +2019 + 8 +LEGENDE-35 + 10 +7420.0 + 20 +12415.0 + 30 +0.0 + 0 +VERTEX + 5 +201A + 8 +LEGENDE-35 + 10 +7085.0 + 20 +12415.0 + 30 +0.0 + 0 +SEQEND + 5 +201B + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +1699 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +201C + 8 +LEGENDE-35 + 10 +8350.0 + 20 +13315.0 + 30 +0.0 + 0 +VERTEX + 5 +201D + 8 +LEGENDE-35 + 10 +7565.0 + 20 +13315.0 + 30 +0.0 + 0 +VERTEX + 5 +201E + 8 +LEGENDE-35 + 10 +7565.0 + 20 +12025.0 + 30 +0.0 + 0 +VERTEX + 5 +201F + 8 +LEGENDE-35 + 10 +7130.0 + 20 +12025.0 + 30 +0.0 + 0 +SEQEND + 5 +2020 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +169F + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2021 + 8 +LEGENDE-35 + 10 +8350.0 + 20 +13075.0 + 30 +0.0 + 0 +VERTEX + 5 +2022 + 8 +LEGENDE-35 + 10 +7720.0 + 20 +13075.0 + 30 +0.0 + 0 +VERTEX + 5 +2023 + 8 +LEGENDE-35 + 10 +7720.0 + 20 +11920.0 + 30 +0.0 + 0 +SEQEND + 5 +2024 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +16A4 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2025 + 8 +LEGENDE-35 + 10 +8345.0 + 20 +12800.0 + 30 +0.0 + 0 +VERTEX + 5 +2026 + 8 +LEGENDE-35 + 10 +7840.0 + 20 +12800.0 + 30 +0.0 + 0 +VERTEX + 5 +2027 + 8 +LEGENDE-35 + 10 +7840.0 + 20 +11835.0 + 30 +0.0 + 0 +SEQEND + 5 +2028 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +16A9 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2029 + 8 +LEGENDE-35 + 10 +8350.0 + 20 +12575.0 + 30 +0.0 + 0 +VERTEX + 5 +202A + 8 +LEGENDE-35 + 10 +7990.0 + 20 +12575.0 + 30 +0.0 + 0 +VERTEX + 5 +202B + 8 +LEGENDE-35 + 10 +7990.0 + 20 +11760.0 + 30 +0.0 + 0 +SEQEND + 5 +202C + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +16AE + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +202D + 8 +LEGENDE-35 + 10 +8350.0 + 20 +12325.0 + 30 +0.0 + 0 +VERTEX + 5 +202E + 8 +LEGENDE-35 + 10 +8120.0 + 20 +12325.0 + 30 +0.0 + 0 +VERTEX + 5 +202F + 8 +LEGENDE-35 + 10 +8120.0 + 20 +11690.0 + 30 +0.0 + 0 +SEQEND + 5 +2030 + 8 +LEGENDE-35 + 0 +TEXT + 5 +16B3 + 8 +LEGENDE-35 + 10 +8515.0 + 20 +10815.0 + 30 +0.0 + 40 +87.5 + 1 +GIPSPUTZ + 41 +0.75 + 0 +TEXT + 5 +16B4 + 8 +LEGENDE-35 + 10 +8515.0 + 20 +10565.0 + 30 +0.0 + 40 +87.5 + 1 +RINGANKER BST III + 41 +0.75 + 0 +TEXT + 5 +16B5 + 8 +LEGENDE-35 + 10 +8515.0 + 20 +10315.0 + 30 +0.0 + 40 +87.5 + 1 +DICHTUNGSBAHN (BITUMEN) + 41 +0.75 + 0 +POLYLINE + 5 +16B6 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2031 + 8 +LEGENDE-35 + 10 +8365.0 + 20 +10865.0 + 30 +0.0 + 0 +VERTEX + 5 +2032 + 8 +LEGENDE-35 + 10 +7080.0 + 20 +10865.0 + 30 +0.0 + 0 +SEQEND + 5 +2033 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +16BA + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2034 + 8 +LEGENDE-35 + 10 +8365.0 + 20 +10620.0 + 30 +0.0 + 0 +VERTEX + 5 +2035 + 8 +LEGENDE-35 + 10 +6850.0 + 20 +10620.0 + 30 +0.0 + 0 +VERTEX + 5 +2036 + 8 +LEGENDE-35 + 10 +6850.0 + 20 +10930.0 + 30 +0.0 + 0 +SEQEND + 5 +2037 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +16BF + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2038 + 8 +LEGENDE-35 + 10 +8365.0 + 20 +10375.0 + 30 +0.0 + 0 +VERTEX + 5 +2039 + 8 +LEGENDE-35 + 10 +7320.0 + 20 +10375.0 + 30 +0.0 + 0 +VERTEX + 5 +203A + 8 +LEGENDE-35 + 10 +7320.0 + 20 +9870.0 + 30 +0.0 + 0 +VERTEX + 5 +203B + 8 +LEGENDE-35 + 10 +7010.0 + 20 +9870.0 + 30 +0.0 + 0 +SEQEND + 5 +203C + 8 +LEGENDE-35 + 0 +TEXT + 5 +16C5 + 8 +LEGENDE-35 + 10 +2240.0 + 20 +12400.0 + 30 +0.0 + 40 +87.5 + 1 +VMW KHLz-20-1.8-NF + 41 +0.75 + 0 +TEXT + 5 +16C6 + 8 +LEGENDE-35 + 10 +2240.0 + 20 +12150.0 + 30 +0.0 + 40 +87.5 + 1 +MINERALFASER-WÄDÄ + 41 +0.75 + 0 +TEXT + 5 +16C7 + 8 +LEGENDE-35 + 10 +2240.0 + 20 +11900.0 + 30 +0.0 + 40 +87.5 + 1 +DRAHTANKER + 41 +0.75 + 0 +TEXT + 5 +16C8 + 8 +LEGENDE-35 + 10 +2240.0 + 20 +11650.0 + 30 +0.0 + 40 +87.5 + 1 +MW Mz-20-1.8-NF + 41 +0.75 + 0 +TEXT + 5 +16C9 + 8 +LEGENDE-35 + 10 +2240.0 + 20 +11400.0 + 30 +0.0 + 40 +87.5 + 1 +ENTLÜFTUNGSSTEIN + 41 +0.75 + 0 +TEXT + 5 +16CA + 8 +LEGENDE-35 + 10 +2240.0 + 20 +11150.0 + 30 +0.0 + 40 +87.5 + 1 +PE-FOLIE + 41 +0.75 + 0 +POLYLINE + 5 +16CB + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +203D + 8 +LEGENDE-35 + 10 +3635.0 + 20 +12455.0 + 30 +0.0 + 0 +VERTEX + 5 +203E + 8 +LEGENDE-35 + 10 +5615.0 + 20 +12455.0 + 30 +0.0 + 0 +SEQEND + 5 +203F + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +16CF + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2040 + 8 +LEGENDE-35 + 10 +3625.0 + 20 +12215.0 + 30 +0.0 + 0 +VERTEX + 5 +2041 + 8 +LEGENDE-35 + 10 +6025.0 + 20 +12215.0 + 30 +0.0 + 0 +SEQEND + 5 +2042 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +16D3 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2043 + 8 +LEGENDE-35 + 10 +3625.0 + 20 +11950.0 + 30 +0.0 + 0 +VERTEX + 5 +2044 + 8 +LEGENDE-35 + 10 +5880.0 + 20 +11950.0 + 30 +0.0 + 0 +VERTEX + 5 +2045 + 8 +LEGENDE-35 + 10 +5880.0 + 20 +12045.0 + 30 +0.0 + 0 +SEQEND + 5 +2046 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +16D8 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2047 + 8 +LEGENDE-35 + 10 +3625.0 + 20 +11680.0 + 30 +0.0 + 0 +VERTEX + 5 +2048 + 8 +LEGENDE-35 + 10 +6345.0 + 20 +11680.0 + 30 +0.0 + 0 +VERTEX + 5 +2049 + 8 +LEGENDE-35 + 10 +6345.0 + 20 +11810.0 + 30 +0.0 + 0 +SEQEND + 5 +204A + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +16DD + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +204B + 8 +LEGENDE-35 + 10 +3625.0 + 20 +11460.0 + 30 +0.0 + 0 +VERTEX + 5 +204C + 8 +LEGENDE-35 + 10 +5635.0 + 20 +11460.0 + 30 +0.0 + 0 +SEQEND + 5 +204D + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +16E1 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +204E + 8 +LEGENDE-35 + 10 +3625.0 + 20 +11215.0 + 30 +0.0 + 0 +VERTEX + 5 +204F + 8 +LEGENDE-35 + 10 +5175.0 + 20 +11215.0 + 30 +0.0 + 0 +VERTEX + 5 +2050 + 8 +LEGENDE-35 + 10 +5495.0 + 20 +11300.0 + 30 +0.0 + 0 +SEQEND + 5 +2051 + 8 +LEGENDE-35 + 0 +TEXT + 5 +16E6 + 8 +LEGENDE-35 + 10 +2940.0 + 20 +10805.0 + 30 +0.0 + 40 +87.5 + 1 +LAGERSCHIENE + 41 +0.75 + 0 +TEXT + 5 +16E7 + 8 +LEGENDE-35 + 10 +2940.0 + 20 +10555.0 + 30 +0.0 + 40 +87.5 + 1 +ANKERSCHIENE + 41 +0.75 + 0 +TEXT + 5 +16E8 + 8 +LEGENDE-35 + 10 +2940.0 + 20 +10305.0 + 30 +0.0 + 40 +87.5 + 1 +AUSSENPUTZ + 41 +0.75 + 0 +TEXT + 5 +16E9 + 8 +LEGENDE-35 + 10 +2940.0 + 20 +10055.0 + 30 +0.0 + 40 +87.5 + 1 +MW Mz-20-1.8-NF + 41 +0.75 + 0 +POLYLINE + 5 +16EA + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2052 + 8 +LEGENDE-35 + 10 +3920.0 + 20 +10850.0 + 30 +0.0 + 0 +VERTEX + 5 +2053 + 8 +LEGENDE-35 + 10 +5915.0 + 20 +10850.0 + 30 +0.0 + 0 +VERTEX + 5 +2054 + 8 +LEGENDE-35 + 10 +5915.0 + 20 +11155.0 + 30 +0.0 + 0 +SEQEND + 5 +2055 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +16EF + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2056 + 8 +LEGENDE-35 + 10 +3920.0 + 20 +10595.0 + 30 +0.0 + 0 +VERTEX + 5 +2057 + 8 +LEGENDE-35 + 10 +6050.0 + 20 +10595.0 + 30 +0.0 + 0 +VERTEX + 5 +2058 + 8 +LEGENDE-35 + 10 +6050.0 + 20 +11320.0 + 30 +0.0 + 0 +SEQEND + 5 +2059 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +16F4 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +205A + 8 +LEGENDE-35 + 10 +3920.0 + 20 +10360.0 + 30 +0.0 + 0 +VERTEX + 5 +205B + 8 +LEGENDE-35 + 10 +6115.0 + 20 +10360.0 + 30 +0.0 + 0 +SEQEND + 5 +205C + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +16F8 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +205D + 8 +LEGENDE-35 + 10 +3920.0 + 20 +10095.0 + 30 +0.0 + 0 +VERTEX + 5 +205E + 8 +LEGENDE-35 + 10 +6335.0 + 20 +10095.0 + 30 +0.0 + 0 +SEQEND + 5 +205F + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +16FC + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2060 + 8 +DRAHTANKER + 10 +7145.0 + 20 +12075.0 + 30 +0.0 + 0 +VERTEX + 5 +2061 + 8 +DRAHTANKER + 10 +7080.0 + 20 +12075.0 + 30 +0.0 + 0 +SEQEND + 5 +2062 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1700 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2063 + 8 +DRAHTANKER + 10 +7060.0 + 20 +12075.0 + 30 +0.0 + 0 +VERTEX + 5 +2064 + 8 +DRAHTANKER + 10 +7040.0 + 20 +12075.0 + 30 +0.0 + 0 +SEQEND + 5 +2065 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1704 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2066 + 8 +DRAHTANKER + 10 +7015.0 + 20 +12075.0 + 30 +0.0 + 0 +VERTEX + 5 +2067 + 8 +DRAHTANKER + 10 +6990.0 + 20 +12075.0 + 30 +0.0 + 0 +SEQEND + 5 +2068 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1708 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2069 + 8 +DRAHTANKER + 10 +7015.0 + 20 +11995.0 + 30 +0.0 + 0 +VERTEX + 5 +206A + 8 +DRAHTANKER + 10 +6990.0 + 20 +11995.0 + 30 +0.0 + 0 +SEQEND + 5 +206B + 8 +DRAHTANKER + 0 +POLYLINE + 5 +170C + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +206C + 8 +DRAHTANKER + 10 +7060.0 + 20 +11995.0 + 30 +0.0 + 0 +VERTEX + 5 +206D + 8 +DRAHTANKER + 10 +7040.0 + 20 +11995.0 + 30 +0.0 + 0 +SEQEND + 5 +206E + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1710 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +206F + 8 +DRAHTANKER + 10 +7150.0 + 20 +11995.0 + 30 +0.0 + 0 +VERTEX + 5 +2070 + 8 +DRAHTANKER + 10 +7080.0 + 20 +11995.0 + 30 +0.0 + 0 +SEQEND + 5 +2071 + 8 +DRAHTANKER + 0 +DIMENSION + 5 +1714 + 8 +DRAHTANKER + 2 +*D29 + 10 +7730.0 + 20 +11145.0 + 30 +0.0 + 11 +7642.5 + 21 +11187.5 + 31 +0.0 + 1 +3 + 13 +7055.0 + 23 +11230.0 + 33 +0.0 + 14 +7055.0 + 24 +11145.0 + 34 +0.0 + 50 +90.0 + 0 +POLYLINE + 5 +1715 + 8 +SCHRAFFUR + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 0 +VERTEX + 5 +2072 + 8 +SCHRAFFUR + 10 +7190.0 + 20 +4795.0 + 30 +0.0 + 0 +VERTEX + 5 +2073 + 8 +SCHRAFFUR + 10 +7126.991073 + 20 +4795.0 + 30 +0.0 + 0 +VERTEX + 5 +2074 + 8 +SCHRAFFUR + 10 +7126.991073 + 20 +4959.629568 + 30 +0.0 + 0 +VERTEX + 5 +2075 + 8 +SCHRAFFUR + 10 +7191.498177 + 20 +4959.629568 + 30 +0.0 + 0 +SEQEND + 5 +2076 + 8 +SCHRAFFUR + 0 +POLYLINE + 5 +171B + 8 +SCHNITTKANTEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +2077 + 8 +SCHNITTKANTEN + 10 +8565.0 + 20 +5100.0 + 30 +0.0 + 0 +VERTEX + 5 +2078 + 8 +SCHNITTKANTEN + 10 +8565.0 + 20 +3195.0 + 30 +0.0 + 0 +SEQEND + 5 +2079 + 8 +SCHNITTKANTEN + 0 +POLYLINE + 5 +171F + 8 +SCHNITTKANTEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +207A + 8 +SCHNITTKANTEN + 10 +5655.0 + 20 +5790.0 + 30 +0.0 + 0 +VERTEX + 5 +207B + 8 +SCHNITTKANTEN + 10 +7485.0 + 20 +5790.0 + 30 +0.0 + 0 +SEQEND + 5 +207C + 8 +SCHNITTKANTEN + 0 +INSERT + 5 +1723 + 8 +SCHRAFFUR + 2 +*X30 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +1000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +1724 + 8 +SCHRAFFUR + 2 +*X31 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +HONEY,I +1040 +125.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +1725 + 8 +SCHRAFFUR + 2 +*X32 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +HONEY,I +1040 +200.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +1726 + 8 +SCHRAFFUR + 2 +*X33 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +DASH,I +1040 +200.0 +1040 +0.785398 +1002 +} + 0 +INSERT + 5 +1727 + 8 +SCHRAFFUR + 2 +*X34 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI34,I +1040 +200.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +1728 + 8 +SCHRAFFUR + 2 +*X35 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +1000.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +1729 + 8 +SCHRAFFUR + 2 +*X36 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI33,I +1040 +1200.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +172A + 8 +SCHRAFFUR + 2 +*X37 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +DASH,I +1040 +1500.0 +1040 +0.785398 +1002 +} + 0 +INSERT + 5 +172B + 8 +SCHRAFFUR + 2 +*X38 + 10 +0.0 + 20 +0.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +HONEY,I +1040 +200.0 +1040 +0.0 +1002 +} + 0 +POLYLINE + 5 +172C + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +207D + 8 +MAUERWERK + 10 +7125.0 + 20 +4962.28 + 30 +0.0 + 0 +VERTEX + 5 +207E + 8 +MAUERWERK + 10 +7162.5 + 20 +4962.28 + 30 +0.0 + 0 +VERTEX + 5 +207F + 8 +MAUERWERK + 10 +7162.5 + 20 +5790.0 + 30 +0.0 + 0 +SEQEND + 5 +2080 + 8 +MAUERWERK + 0 +POLYLINE + 5 +1731 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2081 + 8 +MAUERWERK + 10 +7125.0 + 20 +5790.0 + 30 +0.0 + 0 +VERTEX + 5 +2082 + 8 +MAUERWERK + 10 +7125.0 + 20 +4962.28 + 30 +0.0 + 0 +SEQEND + 5 +2083 + 8 +MAUERWERK + 0 +POLYLINE + 5 +1735 + 8 +PE-FOLIE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +25.0 + 41 +25.0 + 0 +VERTEX + 5 +2084 + 8 +PE-FOLIE + 10 +6195.0 + 20 +5790.0 + 30 +0.0 + 0 +VERTEX + 5 +2085 + 8 +PE-FOLIE + 10 +6195.0 + 20 +5195.0 + 30 +0.0 + 0 +VERTEX + 5 +2086 + 8 +PE-FOLIE + 10 +6170.0 + 20 +5085.0 + 30 +0.0 + 0 +VERTEX + 5 +2087 + 8 +PE-FOLIE + 10 +6160.0 + 20 +4380.0 + 30 +0.0 + 0 +VERTEX + 5 +2088 + 8 +PE-FOLIE + 10 +6000.0 + 20 +4265.0 + 30 +0.0 + 0 +VERTEX + 5 +2089 + 8 +PE-FOLIE + 10 +5375.0 + 20 +4265.0 + 30 +0.0 + 0 +VERTEX + 5 +208A + 8 +PE-FOLIE + 10 +5375.0 + 20 +3275.0 + 30 +0.0 + 0 +SEQEND + 5 +208B + 8 +PE-FOLIE + 0 +POLYLINE + 5 +173E + 8 +DAEMMUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +208C + 8 +DAEMMUNG + 10 +6175.0 + 20 +5790.0 + 30 +0.0 + 0 +VERTEX + 5 +208D + 8 +DAEMMUNG + 10 +6175.0 + 20 +5197.5 + 30 +0.0 + 0 +VERTEX + 5 +208E + 8 +DAEMMUNG + 10 +6150.0 + 20 +5135.0 + 30 +0.0 + 0 +VERTEX + 5 +208F + 8 +DAEMMUNG + 10 +6135.0 + 20 +4400.0 + 30 +0.0 + 0 +VERTEX + 5 +2090 + 8 +DAEMMUNG + 10 +6045.0 + 20 +4325.0 + 30 +0.0 + 0 +VERTEX + 5 +2091 + 8 +DAEMMUNG + 10 +5968.4375 + 20 +4280.0 + 30 +0.0 + 0 +SEQEND + 5 +2092 + 8 +DAEMMUNG + 0 +POLYLINE + 5 +1746 + 8 +DAEMMUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2093 + 8 +DAEMMUNG + 10 +5968.4375 + 20 +4280.0 + 30 +0.0 + 0 +VERTEX + 5 +2094 + 8 +DAEMMUNG + 10 +5968.4375 + 20 +5790.0 + 30 +0.0 + 0 +SEQEND + 5 +2095 + 8 +DAEMMUNG + 0 +POLYLINE + 5 +174A + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +2096 + 8 +MAUERWERK + 10 +7125.0 + 20 +5790.0 + 30 +0.0 + 0 +VERTEX + 5 +2097 + 8 +MAUERWERK + 10 +7125.0 + 20 +5135.0 + 30 +0.0 + 0 +VERTEX + 5 +2098 + 8 +MAUERWERK + 10 +6215.0 + 20 +5135.0 + 30 +0.0 + 0 +VERTEX + 5 +2099 + 8 +MAUERWERK + 10 +6215.0 + 20 +5790.0 + 30 +0.0 + 0 +SEQEND + 5 +209A + 8 +MAUERWERK + 0 +POLYLINE + 5 +1750 + 8 +ESTRICH + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +209B + 8 +ESTRICH + 10 +7191.15625 + 20 +4895.782507 + 30 +0.0 + 0 +VERTEX + 5 +209C + 8 +ESTRICH + 10 +7191.15625 + 20 +4958.282507 + 30 +0.0 + 0 +VERTEX + 5 +209D + 8 +ESTRICH + 10 +8565.0 + 20 +4958.282507 + 30 +0.0 + 0 +SEQEND + 5 +209E + 8 +ESTRICH + 0 +POLYLINE + 5 +1755 + 8 +ESTRICH + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +209F + 8 +ESTRICH + 10 +7191.15625 + 20 +4795.782507 + 30 +0.0 + 0 +VERTEX + 5 +20A0 + 8 +ESTRICH + 10 +7191.15625 + 20 +4895.782507 + 30 +0.0 + 0 +VERTEX + 5 +20A1 + 8 +ESTRICH + 10 +8565.0 + 20 +4895.782507 + 30 +0.0 + 0 +SEQEND + 5 +20A2 + 8 +ESTRICH + 0 +POLYLINE + 5 +175A + 8 +ESTRICH + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +20A3 + 8 +ESTRICH + 10 +8565.0 + 20 +4795.782507 + 30 +0.0 + 0 +VERTEX + 5 +20A4 + 8 +ESTRICH + 10 +7190.0 + 20 +4795.782507 + 30 +0.0 + 0 +SEQEND + 5 +20A5 + 8 +ESTRICH + 0 +POLYLINE + 5 +175E + 8 +PE-FOLIE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +25.0 + 41 +25.0 + 0 +VERTEX + 5 +20A6 + 8 +PE-FOLIE + 10 +6195.0 + 20 +4670.0 + 30 +0.0 + 0 +VERTEX + 5 +20A7 + 8 +PE-FOLIE + 10 +6195.0 + 20 +5115.0 + 30 +0.0 + 0 +VERTEX + 5 +20A8 + 8 +PE-FOLIE + 10 +7145.0 + 20 +5115.0 + 30 +0.0 + 0 +VERTEX + 5 +20A9 + 8 +PE-FOLIE + 10 +7145.0 + 20 +4775.0 + 30 +0.0 + 0 +VERTEX + 5 +20AA + 8 +PE-FOLIE + 10 +8565.0 + 20 +4775.0 + 30 +0.0 + 0 +SEQEND + 5 +20AB + 8 +PE-FOLIE + 0 +POLYLINE + 5 +1765 + 8 +ESTRICH + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +20AC + 8 +ESTRICH + 10 +8565.0 + 20 +4755.0 + 30 +0.0 + 0 +VERTEX + 5 +20AD + 8 +ESTRICH + 10 +7160.0 + 20 +4755.0 + 30 +0.0 + 0 +VERTEX + 5 +20AE + 8 +ESTRICH + 10 +7160.0 + 20 +4655.0 + 30 +0.0 + 0 +SEQEND + 5 +20AF + 8 +ESTRICH + 0 +POLYLINE + 5 +176A + 8 +ESTRICH + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +20B0 + 8 +ESTRICH + 10 +7160.0 + 20 +4660.0 + 30 +0.0 + 0 +VERTEX + 5 +20B1 + 8 +ESTRICH + 10 +8565.0 + 20 +4660.0 + 30 +0.0 + 0 +SEQEND + 5 +20B2 + 8 +ESTRICH + 0 +POLYLINE + 5 +176E + 8 +PE-FOLIE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +25.0 + 41 +25.0 + 0 +VERTEX + 5 +20B3 + 8 +PE-FOLIE + 10 +8565.0 + 20 +4640.0 + 30 +0.0 + 0 +VERTEX + 5 +20B4 + 8 +PE-FOLIE + 10 +6602.5 + 20 +4640.0 + 30 +0.0 + 0 +VERTEX + 5 +20B5 + 8 +PE-FOLIE + 10 +6195.0 + 20 +4640.0 + 30 +0.0 + 0 +VERTEX + 5 +20B6 + 8 +PE-FOLIE + 10 +6195.0 + 20 +4410.0 + 30 +0.0 + 0 +VERTEX + 5 +20B7 + 8 +PE-FOLIE + 10 +6127.5 + 20 +4297.5 + 30 +0.0 + 0 +VERTEX + 5 +20B8 + 8 +PE-FOLIE + 10 +6000.0 + 20 +4240.0 + 30 +0.0 + 0 +VERTEX + 5 +20B9 + 8 +PE-FOLIE + 10 +5565.0 + 20 +4240.0 + 30 +0.0 + 0 +VERTEX + 5 +20BA + 8 +PE-FOLIE + 10 +5400.0 + 20 +4240.0 + 30 +0.0 + 0 +VERTEX + 5 +20BB + 8 +PE-FOLIE + 10 +5400.0 + 20 +3360.0 + 30 +0.0 + 0 +SEQEND + 5 +20BC + 8 +PE-FOLIE + 0 +POLYLINE + 5 +1779 + 8 +DECKEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +20BD + 8 +DECKEN + 10 +8565.0 + 20 +4622.5 + 30 +0.0 + 0 +VERTEX + 5 +20BE + 8 +DECKEN + 10 +6215.0 + 20 +4622.5 + 30 +0.0 + 0 +VERTEX + 5 +20BF + 8 +DECKEN + 10 +6215.0 + 20 +4222.5 + 30 +0.0 + 0 +SEQEND + 5 +20C0 + 8 +DECKEN + 0 +POLYLINE + 5 +177E + 8 +DECKEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +20C1 + 8 +DECKEN + 10 +6215.0 + 20 +4222.5 + 30 +0.0 + 0 +VERTEX + 5 +20C2 + 8 +DECKEN + 10 +8565.0 + 20 +4222.5 + 30 +0.0 + 0 +SEQEND + 5 +20C3 + 8 +DECKEN + 0 +POLYLINE + 5 +1782 + 8 +FUNDAMENT + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +20C4 + 8 +FUNDAMENT + 10 +7927.5 + 20 +2847.5 + 30 +0.0 + 0 +VERTEX + 5 +20C5 + 8 +FUNDAMENT + 10 +8565.0 + 20 +3485.0 + 30 +0.0 + 0 +SEQEND + 5 +20C6 + 8 +FUNDAMENT + 0 +POLYLINE + 5 +1786 + 8 +SCHNITTKANTEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +20C7 + 8 +SCHNITTKANTEN + 10 +4425.0 + 20 +3870.0 + 30 +0.0 + 0 +VERTEX + 5 +20C8 + 8 +SCHNITTKANTEN + 10 +4425.0 + 20 +2430.0 + 30 +0.0 + 0 +SEQEND + 5 +20C9 + 8 +SCHNITTKANTEN + 0 +POLYLINE + 5 +178A + 8 +ERDBODEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +20CA + 8 +ERDBODEN + 10 +5415.0 + 20 +2847.5 + 30 +0.0 + 0 +VERTEX + 5 +20CB + 8 +ERDBODEN + 10 +4425.0 + 20 +2847.5 + 30 +0.0 + 0 +SEQEND + 5 +20CC + 8 +ERDBODEN + 0 +POLYLINE + 5 +178E + 8 +ERDBODEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +20CD + 8 +ERDBODEN + 10 +4425.0 + 20 +2603.214286 + 30 +0.0 + 0 +VERTEX + 5 +20CE + 8 +ERDBODEN + 10 +4615.0 + 20 +2847.5 + 30 +0.0 + 0 +SEQEND + 5 +20CF + 8 +ERDBODEN + 0 +POLYLINE + 5 +1792 + 8 +ERDBODEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +20D0 + 8 +ERDBODEN + 10 +6440.0 + 20 +2603.214286 + 30 +0.0 + 0 +VERTEX + 5 +20D1 + 8 +ERDBODEN + 10 +6630.0 + 20 +2847.5 + 30 +0.0 + 0 +SEQEND + 5 +20D2 + 8 +ERDBODEN + 0 +POLYLINE + 5 +1796 + 8 +ERDBODEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +20D3 + 8 +ERDBODEN + 10 +6532.777778 + 20 +2497.5 + 30 +0.0 + 0 +VERTEX + 5 +20D4 + 8 +ERDBODEN + 10 +6805.0 + 20 +2847.5 + 30 +0.0 + 0 +SEQEND + 5 +20D5 + 8 +ERDBODEN + 0 +POLYLINE + 5 +179A + 8 +ERDBODEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +20D6 + 8 +ERDBODEN + 10 +6707.777778 + 20 +2497.5 + 30 +0.0 + 0 +VERTEX + 5 +20D7 + 8 +ERDBODEN + 10 +6980.0 + 20 +2847.5 + 30 +0.0 + 0 +SEQEND + 5 +20D8 + 8 +ERDBODEN + 0 +LINE + 5 +179E + 8 +0 + 62 + 0 + 10 +7146.942562 + 20 +5563.048321 + 30 +0.0 + 11 +7146.942562 + 21 +5563.048321 + 31 +0.0 + 0 +LINE + 5 +179F + 8 +0 + 62 + 0 + 10 +7145.682695 + 20 +5601.584796 + 30 +0.0 + 11 +7145.682695 + 21 +5601.584796 + 31 +0.0 + 0 +LINE + 5 +17A0 + 8 +0 + 62 + 0 + 10 +7144.422828 + 20 +5640.121271 + 30 +0.0 + 11 +7144.422828 + 21 +5640.121271 + 31 +0.0 + 0 +LINE + 5 +17A1 + 8 +0 + 62 + 0 + 10 +7143.162961 + 20 +5678.657747 + 30 +0.0 + 11 +7143.162961 + 21 +5678.657747 + 31 +0.0 + 0 +LINE + 5 +17A2 + 8 +0 + 62 + 0 + 10 +7141.903094 + 20 +5717.194222 + 30 +0.0 + 11 +7141.903094 + 21 +5717.194222 + 31 +0.0 + 0 +LINE + 5 +17A3 + 8 +0 + 62 + 0 + 10 +7140.643227 + 20 +5755.730697 + 30 +0.0 + 11 +7140.643227 + 21 +5755.730697 + 31 +0.0 + 0 +LINE + 5 +17A4 + 8 +0 + 62 + 0 + 10 +7148.20243 + 20 +5524.511845 + 30 +0.0 + 11 +7148.20243 + 21 +5524.511845 + 31 +0.0 + 0 +LINE + 5 +17A5 + 8 +0 + 62 + 0 + 10 +7149.462297 + 20 +5485.97537 + 30 +0.0 + 11 +7149.462297 + 21 +5485.97537 + 31 +0.0 + 0 +LINE + 5 +17A6 + 8 +0 + 62 + 0 + 10 +7150.722164 + 20 +5447.438894 + 30 +0.0 + 11 +7150.722164 + 21 +5447.438894 + 31 +0.0 + 0 +LINE + 5 +17A7 + 8 +0 + 62 + 0 + 10 +7126.198047 + 20 +5389.117673 + 30 +0.0 + 11 +7126.198047 + 21 +5389.117673 + 31 +0.0 + 0 +LINE + 5 +17A8 + 8 +0 + 62 + 0 + 10 +7151.982031 + 20 +5408.902419 + 30 +0.0 + 11 +7151.982031 + 21 +5408.902419 + 31 +0.0 + 0 +LINE + 5 +17A9 + 8 +0 + 62 + 0 + 10 +7127.457915 + 20 +5350.581197 + 30 +0.0 + 11 +7127.457915 + 21 +5350.581197 + 31 +0.0 + 0 +LINE + 5 +17AA + 8 +0 + 62 + 0 + 10 +7153.241898 + 20 +5370.365944 + 30 +0.0 + 11 +7153.241898 + 21 +5370.365944 + 31 +0.0 + 0 +LINE + 5 +17AB + 8 +0 + 62 + 0 + 10 +7128.717782 + 20 +5312.044722 + 30 +0.0 + 11 +7128.717782 + 21 +5312.044722 + 31 +0.0 + 0 +LINE + 5 +17AC + 8 +0 + 62 + 0 + 10 +7154.501765 + 20 +5331.829468 + 30 +0.0 + 11 +7154.501765 + 21 +5331.829468 + 31 +0.0 + 0 +LINE + 5 +17AD + 8 +0 + 62 + 0 + 10 +7129.977649 + 20 +5273.508246 + 30 +0.0 + 11 +7129.977649 + 21 +5273.508246 + 31 +0.0 + 0 +LINE + 5 +17AE + 8 +0 + 62 + 0 + 10 +7155.761633 + 20 +5293.292993 + 30 +0.0 + 11 +7155.761633 + 21 +5293.292993 + 31 +0.0 + 0 +LINE + 5 +17AF + 8 +0 + 62 + 0 + 10 +7131.237516 + 20 +5234.971771 + 30 +0.0 + 11 +7131.237516 + 21 +5234.971771 + 31 +0.0 + 0 +LINE + 5 +17B0 + 8 +0 + 62 + 0 + 10 +7157.0215 + 20 +5254.756518 + 30 +0.0 + 11 +7157.0215 + 21 +5254.756518 + 31 +0.0 + 0 +LINE + 5 +17B1 + 8 +0 + 62 + 0 + 10 +7132.497383 + 20 +5196.435296 + 30 +0.0 + 11 +7132.497383 + 21 +5196.435296 + 31 +0.0 + 0 +LINE + 5 +17B2 + 8 +0 + 62 + 0 + 10 +7158.281367 + 20 +5216.220042 + 30 +0.0 + 11 +7158.281367 + 21 +5216.220042 + 31 +0.0 + 0 +LINE + 5 +17B3 + 8 +0 + 62 + 0 + 10 +7133.75725 + 20 +5157.89882 + 30 +0.0 + 11 +7133.75725 + 21 +5157.89882 + 31 +0.0 + 0 +LINE + 5 +17B4 + 8 +0 + 62 + 0 + 10 +7159.541234 + 20 +5177.683567 + 30 +0.0 + 11 +7159.541234 + 21 +5177.683567 + 31 +0.0 + 0 +LINE + 5 +17B5 + 8 +0 + 62 + 0 + 10 +7135.017118 + 20 +5119.362345 + 30 +0.0 + 11 +7135.017118 + 21 +5119.362345 + 31 +0.0 + 0 +LINE + 5 +17B6 + 8 +0 + 62 + 0 + 10 +7160.801101 + 20 +5139.147091 + 30 +0.0 + 11 +7160.801101 + 21 +5139.147091 + 31 +0.0 + 0 +LINE + 5 +17B7 + 8 +0 + 62 + 0 + 10 +7136.276985 + 20 +5080.82587 + 30 +0.0 + 11 +7136.276985 + 21 +5080.82587 + 31 +0.0 + 0 +LINE + 5 +17B8 + 8 +0 + 62 + 0 + 10 +7162.060968 + 20 +5100.610616 + 30 +0.0 + 11 +7162.060968 + 21 +5100.610616 + 31 +0.0 + 0 +LINE + 5 +17B9 + 8 +0 + 62 + 0 + 10 +7137.536852 + 20 +5042.289394 + 30 +0.0 + 11 +7137.536852 + 21 +5042.289394 + 31 +0.0 + 0 +LINE + 5 +17BA + 8 +0 + 62 + 0 + 10 +7138.796719 + 20 +5003.752919 + 30 +0.0 + 11 +7138.796719 + 21 +5003.752919 + 31 +0.0 + 0 +LINE + 5 +17BB + 8 +0 + 62 + 0 + 10 +7140.056586 + 20 +4965.216443 + 30 +0.0 + 11 +7140.056586 + 21 +4965.216443 + 31 +0.0 + 0 +LINE + 5 +17BC + 8 +0 + 62 + 0 + 10 +7134.026277 + 20 +5547.900342 + 30 +0.0 + 11 +7134.026277 + 21 +5547.900342 + 31 +0.0 + 0 +LINE + 5 +17BD + 8 +0 + 62 + 0 + 10 +7150.285973 + 20 +5550.040971 + 30 +0.0 + 11 +7150.285973 + 21 +5550.040971 + 31 +0.0 + 0 +LINE + 5 +17BE + 8 +0 + 62 + 0 + 10 +7131.846051 + 20 +5599.39632 + 30 +0.0 + 11 +7131.846051 + 21 +5599.39632 + 31 +0.0 + 0 +LINE + 5 +17BF + 8 +0 + 62 + 0 + 10 +7159.01164 + 20 +5602.972738 + 30 +0.0 + 11 +7159.01164 + 21 +5602.972738 + 31 +0.0 + 0 +LINE + 5 +17C0 + 8 +0 + 62 + 0 + 10 +7140.571719 + 20 +5652.328087 + 30 +0.0 + 11 +7140.571719 + 21 +5652.328087 + 31 +0.0 + 0 +LINE + 5 +17C1 + 8 +0 + 62 + 0 + 10 +7150.98189 + 20 +5653.698612 + 30 +0.0 + 11 +7150.98189 + 21 +5653.698612 + 31 +0.0 + 0 +LINE + 5 +17C2 + 8 +0 + 62 + 0 + 10 +7132.541968 + 20 +5703.053961 + 30 +0.0 + 11 +7132.541968 + 21 +5703.053961 + 31 +0.0 + 0 +LINE + 5 +17C3 + 8 +0 + 62 + 0 + 10 +7148.801663 + 20 +5705.194591 + 30 +0.0 + 11 +7148.801663 + 21 +5705.194591 + 31 +0.0 + 0 +LINE + 5 +17C4 + 8 +0 + 62 + 0 + 10 +7130.361742 + 20 +5754.54994 + 30 +0.0 + 11 +7130.361742 + 21 +5754.54994 + 31 +0.0 + 0 +LINE + 5 +17C5 + 8 +0 + 62 + 0 + 10 +7157.527331 + 20 +5758.126357 + 30 +0.0 + 11 +7157.527331 + 21 +5758.126357 + 31 +0.0 + 0 +LINE + 5 +17C6 + 8 +0 + 62 + 0 + 10 +7142.056028 + 20 +5497.174468 + 30 +0.0 + 11 +7142.056028 + 21 +5497.174468 + 31 +0.0 + 0 +LINE + 5 +17C7 + 8 +0 + 62 + 0 + 10 +7152.466199 + 20 +5498.544993 + 30 +0.0 + 11 +7152.466199 + 21 +5498.544993 + 31 +0.0 + 0 +LINE + 5 +17C8 + 8 +0 + 62 + 0 + 10 +7133.330361 + 20 +5444.242701 + 30 +0.0 + 11 +7133.330361 + 21 +5444.242701 + 31 +0.0 + 0 +LINE + 5 +17C9 + 8 +0 + 62 + 0 + 10 +7160.49595 + 20 +5447.819119 + 30 +0.0 + 11 +7160.49595 + 21 +5447.819119 + 31 +0.0 + 0 +LINE + 5 +17CA + 8 +0 + 62 + 0 + 10 +7125.100416 + 20 +5391.376197 + 30 +0.0 + 11 +7125.100416 + 21 +5391.376197 + 31 +0.0 + 0 +LINE + 5 +17CB + 8 +0 + 62 + 0 + 10 +7135.510587 + 20 +5392.746722 + 30 +0.0 + 11 +7135.510587 + 21 +5392.746722 + 31 +0.0 + 0 +LINE + 5 +17CC + 8 +0 + 62 + 0 + 10 +7151.770283 + 20 +5394.887352 + 30 +0.0 + 11 +7151.770283 + 21 +5394.887352 + 31 +0.0 + 0 +LINE + 5 +17CD + 8 +0 + 62 + 0 + 10 +7143.540338 + 20 +5342.020848 + 30 +0.0 + 11 +7143.540338 + 21 +5342.020848 + 31 +0.0 + 0 +LINE + 5 +17CE + 8 +0 + 62 + 0 + 10 +7153.950509 + 20 +5343.391373 + 30 +0.0 + 11 +7153.950509 + 21 +5343.391373 + 31 +0.0 + 0 +LINE + 5 +17CF + 8 +0 + 62 + 0 + 10 +7134.81467 + 20 +5289.089081 + 30 +0.0 + 11 +7134.81467 + 21 +5289.089081 + 31 +0.0 + 0 +LINE + 5 +17D0 + 8 +0 + 62 + 0 + 10 +7161.98026 + 20 +5292.665499 + 30 +0.0 + 11 +7161.98026 + 21 +5292.665499 + 31 +0.0 + 0 +LINE + 5 +17D1 + 8 +0 + 62 + 0 + 10 +7126.584726 + 20 +5236.222578 + 30 +0.0 + 11 +7126.584726 + 21 +5236.222578 + 31 +0.0 + 0 +LINE + 5 +17D2 + 8 +0 + 62 + 0 + 10 +7136.994897 + 20 +5237.593103 + 30 +0.0 + 11 +7136.994897 + 21 +5237.593103 + 31 +0.0 + 0 +LINE + 5 +17D3 + 8 +0 + 62 + 0 + 10 +7153.254592 + 20 +5239.733732 + 30 +0.0 + 11 +7153.254592 + 21 +5239.733732 + 31 +0.0 + 0 +LINE + 5 +17D4 + 8 +0 + 62 + 0 + 10 +7145.024647 + 20 +5186.867229 + 30 +0.0 + 11 +7145.024647 + 21 +5186.867229 + 31 +0.0 + 0 +LINE + 5 +17D5 + 8 +0 + 62 + 0 + 10 +7155.434818 + 20 +5188.237754 + 30 +0.0 + 11 +7155.434818 + 21 +5188.237754 + 31 +0.0 + 0 +LINE + 5 +17D6 + 8 +0 + 62 + 0 + 10 +7136.29898 + 20 +5133.935462 + 30 +0.0 + 11 +7136.29898 + 21 +5133.935462 + 31 +0.0 + 0 +LINE + 5 +17D7 + 8 +0 + 62 + 0 + 10 +7128.069035 + 20 +5081.068958 + 30 +0.0 + 11 +7128.069035 + 21 +5081.068958 + 31 +0.0 + 0 +LINE + 5 +17D8 + 8 +0 + 62 + 0 + 10 +7138.479206 + 20 +5082.439483 + 30 +0.0 + 11 +7138.479206 + 21 +5082.439483 + 31 +0.0 + 0 +LINE + 5 +17D9 + 8 +0 + 62 + 0 + 10 +7154.738902 + 20 +5084.580113 + 30 +0.0 + 11 +7154.738902 + 21 +5084.580113 + 31 +0.0 + 0 +LINE + 5 +17DA + 8 +0 + 62 + 0 + 10 +7146.508957 + 20 +5031.713609 + 30 +0.0 + 11 +7146.508957 + 21 +5031.713609 + 31 +0.0 + 0 +LINE + 5 +17DB + 8 +0 + 62 + 0 + 10 +7156.919128 + 20 +5033.084134 + 30 +0.0 + 11 +7156.919128 + 21 +5033.084134 + 31 +0.0 + 0 +LINE + 5 +17DC + 8 +0 + 62 + 0 + 10 +7137.78329 + 20 +4978.781843 + 30 +0.0 + 11 +7137.78329 + 21 +4978.781843 + 31 +0.0 + 0 +LINE + 5 +17DD + 8 +0 + 62 + 0 + 10 +7127.706769 + 20 +5550.576067 + 30 +0.0 + 11 +7127.706769 + 21 +5550.576067 + 31 +0.0 + 0 +LINE + 5 +17DE + 8 +0 + 62 + 0 + 10 +7151.1936 + 20 +5575.40503 + 30 +0.0 + 11 +7151.1936 + 21 +5575.40503 + 31 +0.0 + 0 +LINE + 5 +17DF + 8 +0 + 62 + 0 + 10 +7159.627514 + 20 +5570.032034 + 30 +0.0 + 11 +7159.627514 + 21 +5570.032034 + 31 +0.0 + 0 +LINE + 5 +17E0 + 8 +0 + 62 + 0 + 10 +7135.041033 + 20 +5625.487075 + 30 +0.0 + 11 +7135.041033 + 21 +5625.487075 + 31 +0.0 + 0 +LINE + 5 +17E1 + 8 +0 + 62 + 0 + 10 +7143.474947 + 20 +5620.114079 + 30 +0.0 + 11 +7143.474947 + 21 +5620.114079 + 31 +0.0 + 0 +LINE + 5 +17E2 + 8 +0 + 62 + 0 + 10 +7127.32238 + 20 +5670.196123 + 30 +0.0 + 11 +7127.32238 + 21 +5670.196123 + 31 +0.0 + 0 +LINE + 5 +17E3 + 8 +0 + 62 + 0 + 10 +7157.684472 + 20 +5650.853337 + 30 +0.0 + 11 +7157.684472 + 21 +5650.853337 + 31 +0.0 + 0 +LINE + 5 +17E4 + 8 +0 + 62 + 0 + 10 +7141.531905 + 20 +5700.935382 + 30 +0.0 + 11 +7141.531905 + 21 +5700.935382 + 31 +0.0 + 0 +LINE + 5 +17E5 + 8 +0 + 62 + 0 + 10 +7125.379337 + 20 +5751.017427 + 30 +0.0 + 11 +7125.379337 + 21 +5751.017427 + 31 +0.0 + 0 +LINE + 5 +17E6 + 8 +0 + 62 + 0 + 10 +7148.866168 + 20 +5775.84639 + 30 +0.0 + 11 +7148.866168 + 21 +5775.84639 + 31 +0.0 + 0 +LINE + 5 +17E7 + 8 +0 + 62 + 0 + 10 +7157.300083 + 20 +5770.473394 + 30 +0.0 + 11 +7157.300083 + 21 +5770.473394 + 31 +0.0 + 0 +LINE + 5 +17E8 + 8 +0 + 62 + 0 + 10 +7143.859336 + 20 +5500.494022 + 30 +0.0 + 11 +7143.859336 + 21 +5500.494022 + 31 +0.0 + 0 +LINE + 5 +17E9 + 8 +0 + 62 + 0 + 10 +7129.649811 + 20 +5469.754764 + 30 +0.0 + 11 +7129.649811 + 21 +5469.754764 + 31 +0.0 + 0 +LINE + 5 +17EA + 8 +0 + 62 + 0 + 10 +7160.011904 + 20 +5450.411978 + 30 +0.0 + 11 +7160.011904 + 21 +5450.411978 + 31 +0.0 + 0 +LINE + 5 +17EB + 8 +0 + 62 + 0 + 10 +7137.368464 + 20 +5425.045715 + 30 +0.0 + 11 +7137.368464 + 21 +5425.045715 + 31 +0.0 + 0 +LINE + 5 +17EC + 8 +0 + 62 + 0 + 10 +7145.802379 + 20 +5419.672719 + 30 +0.0 + 11 +7145.802379 + 21 +5419.672719 + 31 +0.0 + 0 +LINE + 5 +17ED + 8 +0 + 62 + 0 + 10 +7153.521031 + 20 +5374.96367 + 30 +0.0 + 11 +7153.521031 + 21 +5374.96367 + 31 +0.0 + 0 +LINE + 5 +17EE + 8 +0 + 62 + 0 + 10 +7161.954946 + 20 +5369.590674 + 30 +0.0 + 11 +7161.954946 + 21 +5369.590674 + 31 +0.0 + 0 +LINE + 5 +17EF + 8 +0 + 62 + 0 + 10 +7130.034201 + 20 +5350.134707 + 30 +0.0 + 11 +7130.034201 + 21 +5350.134707 + 31 +0.0 + 0 +LINE + 5 +17F0 + 8 +0 + 62 + 0 + 10 +7146.186768 + 20 +5300.052663 + 30 +0.0 + 11 +7146.186768 + 21 +5300.052663 + 31 +0.0 + 0 +LINE + 5 +17F1 + 8 +0 + 62 + 0 + 10 +7131.977243 + 20 +5269.313404 + 30 +0.0 + 11 +7131.977243 + 21 +5269.313404 + 31 +0.0 + 0 +LINE + 5 +17F2 + 8 +0 + 62 + 0 + 10 +7162.339335 + 20 +5249.970618 + 30 +0.0 + 11 +7162.339335 + 21 +5249.970618 + 31 +0.0 + 0 +LINE + 5 +17F3 + 8 +0 + 62 + 0 + 10 +7139.695896 + 20 +5224.604355 + 30 +0.0 + 11 +7139.695896 + 21 +5224.604355 + 31 +0.0 + 0 +LINE + 5 +17F4 + 8 +0 + 62 + 0 + 10 +7148.12981 + 20 +5219.231359 + 30 +0.0 + 11 +7148.12981 + 21 +5219.231359 + 31 +0.0 + 0 +LINE + 5 +17F5 + 8 +0 + 62 + 0 + 10 +7155.848463 + 20 +5174.522311 + 30 +0.0 + 11 +7155.848463 + 21 +5174.522311 + 31 +0.0 + 0 +LINE + 5 +17F6 + 8 +0 + 62 + 0 + 10 +7132.361632 + 20 +5149.693348 + 30 +0.0 + 11 +7132.361632 + 21 +5149.693348 + 31 +0.0 + 0 +LINE + 5 +17F7 + 8 +0 + 62 + 0 + 10 +7148.5142 + 20 +5099.611303 + 30 +0.0 + 11 +7148.5142 + 21 +5099.611303 + 31 +0.0 + 0 +LINE + 5 +17F8 + 8 +0 + 62 + 0 + 10 +7125.87076 + 20 +5074.24504 + 30 +0.0 + 11 +7125.87076 + 21 +5074.24504 + 31 +0.0 + 0 +LINE + 5 +17F9 + 8 +0 + 62 + 0 + 10 +7134.304675 + 20 +5068.872044 + 30 +0.0 + 11 +7134.304675 + 21 +5068.872044 + 31 +0.0 + 0 +LINE + 5 +17FA + 8 +0 + 62 + 0 + 10 +7142.023328 + 20 +5024.162996 + 30 +0.0 + 11 +7142.023328 + 21 +5024.162996 + 31 +0.0 + 0 +LINE + 5 +17FB + 8 +0 + 62 + 0 + 10 +7150.457242 + 20 +5018.79 + 30 +0.0 + 11 +7150.457242 + 21 +5018.79 + 31 +0.0 + 0 +LINE + 5 +17FC + 8 +0 + 62 + 0 + 10 +7158.175895 + 20 +4974.080951 + 30 +0.0 + 11 +7158.175895 + 21 +4974.080951 + 31 +0.0 + 0 +LINE + 5 +17FD + 8 +0 + 62 + 0 + 10 +7127.249552 + 20 +5505.717148 + 30 +0.0 + 11 +7127.249552 + 21 +5505.717148 + 31 +0.0 + 0 +LINE + 5 +17FE + 8 +0 + 62 + 0 + 10 +7130.935939 + 20 +5502.339197 + 30 +0.0 + 11 +7130.935939 + 21 +5502.339197 + 31 +0.0 + 0 +LINE + 5 +17FF + 8 +0 + 62 + 0 + 10 +7148.335684 + 20 +5486.395268 + 30 +0.0 + 11 +7148.335684 + 21 +5486.395268 + 31 +0.0 + 0 +LINE + 5 +1800 + 8 +0 + 62 + 0 + 10 +7126.472976 + 20 +5579.074411 + 30 +0.0 + 11 +7126.472976 + 21 +5579.074411 + 31 +0.0 + 0 +LINE + 5 +1801 + 8 +0 + 62 + 0 + 10 +7146.379464 + 20 +5560.833475 + 30 +0.0 + 11 +7146.379464 + 21 +5560.833475 + 31 +0.0 + 0 +LINE + 5 +1802 + 8 +0 + 62 + 0 + 10 +7150.065851 + 20 +5557.455524 + 30 +0.0 + 11 +7150.065851 + 21 +5557.455524 + 31 +0.0 + 0 +LINE + 5 +1803 + 8 +0 + 62 + 0 + 10 +7128.203143 + 20 +5650.134666 + 30 +0.0 + 11 +7128.203143 + 21 +5650.134666 + 31 +0.0 + 0 +LINE + 5 +1804 + 8 +0 + 62 + 0 + 10 +7145.602888 + 20 +5634.190737 + 30 +0.0 + 11 +7145.602888 + 21 +5634.190737 + 31 +0.0 + 0 +LINE + 5 +1805 + 8 +0 + 62 + 0 + 10 +7143.646669 + 20 +5708.628944 + 30 +0.0 + 11 +7143.646669 + 21 +5708.628944 + 31 +0.0 + 0 +LINE + 5 +1806 + 8 +0 + 62 + 0 + 10 +7147.333055 + 20 +5705.250993 + 30 +0.0 + 11 +7147.333055 + 21 +5705.250993 + 31 +0.0 + 0 +LINE + 5 +1807 + 8 +0 + 62 + 0 + 10 +7142.870093 + 20 +5781.986207 + 30 +0.0 + 11 +7142.870093 + 21 +5781.986207 + 31 +0.0 + 0 +LINE + 5 +1808 + 8 +0 + 62 + 0 + 10 +7129.205772 + 20 +5431.278941 + 30 +0.0 + 11 +7129.205772 + 21 +5431.278941 + 31 +0.0 + 0 +LINE + 5 +1809 + 8 +0 + 62 + 0 + 10 +7149.11226 + 20 +5413.038006 + 30 +0.0 + 11 +7149.11226 + 21 +5413.038006 + 31 +0.0 + 0 +LINE + 5 +180A + 8 +0 + 62 + 0 + 10 +7152.798647 + 20 +5409.660055 + 30 +0.0 + 11 +7152.798647 + 21 +5409.660055 + 31 +0.0 + 0 +LINE + 5 +180B + 8 +0 + 62 + 0 + 10 +7129.982348 + 20 +5357.921679 + 30 +0.0 + 11 +7129.982348 + 21 +5357.921679 + 31 +0.0 + 0 +LINE + 5 +180C + 8 +0 + 62 + 0 + 10 +7133.668735 + 20 +5354.543728 + 30 +0.0 + 11 +7133.668735 + 21 +5354.543728 + 31 +0.0 + 0 +LINE + 5 +180D + 8 +0 + 62 + 0 + 10 +7151.06848 + 20 +5338.599799 + 30 +0.0 + 11 +7151.06848 + 21 +5338.599799 + 31 +0.0 + 0 +LINE + 5 +180E + 8 +0 + 62 + 0 + 10 +7131.938568 + 20 +5283.483472 + 30 +0.0 + 11 +7131.938568 + 21 +5283.483472 + 31 +0.0 + 0 +LINE + 5 +180F + 8 +0 + 62 + 0 + 10 +7151.845056 + 20 +5265.242536 + 30 +0.0 + 11 +7151.845056 + 21 +5265.242536 + 31 +0.0 + 0 +LINE + 5 +1810 + 8 +0 + 62 + 0 + 10 +7155.531442 + 20 +5261.864585 + 30 +0.0 + 11 +7155.531442 + 21 +5261.864585 + 31 +0.0 + 0 +LINE + 5 +1811 + 8 +0 + 62 + 0 + 10 +7132.715143 + 20 +5210.12621 + 30 +0.0 + 11 +7132.715143 + 21 +5210.12621 + 31 +0.0 + 0 +LINE + 5 +1812 + 8 +0 + 62 + 0 + 10 +7136.40153 + 20 +5206.748259 + 30 +0.0 + 11 +7136.40153 + 21 +5206.748259 + 31 +0.0 + 0 +LINE + 5 +1813 + 8 +0 + 62 + 0 + 10 +7153.801275 + 20 +5190.80433 + 30 +0.0 + 11 +7153.801275 + 21 +5190.80433 + 31 +0.0 + 0 +LINE + 5 +1814 + 8 +0 + 62 + 0 + 10 +7134.671363 + 20 +5135.688003 + 30 +0.0 + 11 +7134.671363 + 21 +5135.688003 + 31 +0.0 + 0 +LINE + 5 +1815 + 8 +0 + 62 + 0 + 10 +7154.577851 + 20 +5117.447067 + 30 +0.0 + 11 +7154.577851 + 21 +5117.447067 + 31 +0.0 + 0 +LINE + 5 +1816 + 8 +0 + 62 + 0 + 10 +7158.264238 + 20 +5114.069116 + 30 +0.0 + 11 +7158.264238 + 21 +5114.069116 + 31 +0.0 + 0 +LINE + 5 +1817 + 8 +0 + 62 + 0 + 10 +7135.447939 + 20 +5062.33074 + 30 +0.0 + 11 +7135.447939 + 21 +5062.33074 + 31 +0.0 + 0 +LINE + 5 +1818 + 8 +0 + 62 + 0 + 10 +7139.134326 + 20 +5058.952789 + 30 +0.0 + 11 +7139.134326 + 21 +5058.952789 + 31 +0.0 + 0 +LINE + 5 +1819 + 8 +0 + 62 + 0 + 10 +7156.534071 + 20 +5043.00886 + 30 +0.0 + 11 +7156.534071 + 21 +5043.00886 + 31 +0.0 + 0 +LINE + 5 +181A + 8 +0 + 62 + 0 + 10 +7137.404159 + 20 +4987.892534 + 30 +0.0 + 11 +7137.404159 + 21 +4987.892534 + 31 +0.0 + 0 +LINE + 5 +181B + 8 +0 + 62 + 0 + 10 +7157.310647 + 20 +4969.651598 + 30 +0.0 + 11 +7157.310647 + 21 +4969.651598 + 31 +0.0 + 0 +LINE + 5 +181C + 8 +0 + 62 + 0 + 10 +7160.997033 + 20 +4966.273647 + 30 +0.0 + 11 +7160.997033 + 21 +4966.273647 + 31 +0.0 + 0 +DIMENSION + 5 +181D + 8 +BEMASSUNG + 2 +*D39 + 10 +9820.0 + 20 +4225.0 + 30 +0.0 + 11 +9732.5 + 21 +3537.5 + 31 +0.0 + 1 +55 + 13 +7915.0 + 23 +2850.0 + 33 +0.0 + 14 +7915.0 + 24 +4225.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +181E + 8 +BEMASSUNG + 2 +*D40 + 10 +9820.0 + 20 +4625.0 + 30 +0.0 + 11 +9732.5 + 21 +4425.0 + 31 +0.0 + 1 +16 + 13 +7915.0 + 23 +4225.0 + 33 +0.0 + 14 +8530.0 + 24 +4625.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +181F + 8 +BEMASSUNG + 2 +*D41 + 10 +9820.0 + 20 +4780.0 + 30 +0.0 + 11 +9732.5 + 21 +4702.5 + 31 +0.0 + 1 +4 + 13 +8530.0 + 23 +4625.0 + 33 +0.0 + 14 +8555.0 + 24 +4780.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +1820 + 8 +BEMASSUNG + 2 +*D42 + 10 +9820.0 + 20 +4900.0 + 30 +0.0 + 11 +9732.5 + 21 +4840.0 + 31 +0.0 + 1 +4 + 13 +8555.0 + 23 +4780.0 + 33 +0.0 + 14 +8535.0 + 24 +4900.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +1821 + 8 +BEMASSUNG + 2 +*D48 + 10 +9820.0 + 20 +4960.0 + 30 +0.0 + 11 +9732.5 + 21 +5010.0 + 31 +0.0 + 70 + 128 + 1 +2 + 13 +8535.0 + 23 +4900.0 + 33 +0.0 + 14 +8540.0 + 24 +4960.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +1822 + 8 +BEMASSUNG + 2 +*D43 + 10 +6185.0 + 20 +6435.0 + 30 +0.0 + 11 +6075.0 + 21 +6522.5 + 31 +0.0 + 1 +8 + 13 +5965.0 + 23 +5775.0 + 33 +0.0 + 14 +6185.0 + 24 +5775.0 + 34 +0.0 + 0 +DIMENSION + 5 +1823 + 8 +BEMASSUNG + 2 +*D44 + 10 +7125.0 + 20 +6435.0 + 30 +0.0 + 11 +6655.0 + 21 +6522.5 + 31 +0.0 + 1 +36 + 13 +6185.0 + 23 +5775.0 + 33 +0.0 + 14 +7125.0 + 24 +5780.0 + 34 +0.0 + 0 +DIMENSION + 5 +1824 + 8 +BEMASSUNG + 2 +*D47 + 10 +7160.0 + 20 +6435.0 + 30 +0.0 + 11 +7215.0 + 21 +6522.5 + 31 +0.0 + 70 + 128 + 1 +1 + 13 +7125.0 + 23 +5780.0 + 33 +0.0 + 14 +7160.0 + 24 +5785.0 + 34 +0.0 + 0 +DIMENSION + 5 +1825 + 8 +BEMASSUNG + 2 +*D45 + 10 +7920.0 + 20 +1715.0 + 30 +0.0 + 11 +6670.0 + 21 +1802.5 + 31 +0.0 + 1 +100 + 13 +5420.0 + 23 +2850.0 + 33 +0.0 + 14 +7920.0 + 24 +2850.0 + 34 +0.0 + 0 +POINT + 5 +1826 + 8 +BEMASSUNG + 10 +6175.0 + 20 +5789.0709 + 30 +0.0 + 0 +POINT + 5 +1827 + 8 +BEMASSUNG + 10 +6175.0 + 20 +5769.0709 + 30 +0.0 + 0 +POINT + 5 +1828 + 8 +BEMASSUNG + 10 +6175.0 + 20 +5749.0709 + 30 +0.0 + 0 +POINT + 5 +1829 + 8 +BEMASSUNG + 10 +6175.0 + 20 +5729.0709 + 30 +0.0 + 0 +POINT + 5 +182A + 8 +BEMASSUNG + 10 +6175.0 + 20 +5709.0709 + 30 +0.0 + 0 +POINT + 5 +182B + 8 +BEMASSUNG + 10 +6175.0 + 20 +5689.0709 + 30 +0.0 + 0 +POINT + 5 +182C + 8 +BEMASSUNG + 10 +6175.0 + 20 +5669.0709 + 30 +0.0 + 0 +POINT + 5 +182D + 8 +BEMASSUNG + 10 +6175.0 + 20 +5649.0709 + 30 +0.0 + 0 +POINT + 5 +182E + 8 +BEMASSUNG + 10 +6175.0 + 20 +5629.0709 + 30 +0.0 + 0 +POINT + 5 +182F + 8 +BEMASSUNG + 10 +6175.0 + 20 +5609.0709 + 30 +0.0 + 0 +POINT + 5 +1830 + 8 +BEMASSUNG + 10 +6175.0 + 20 +5589.0709 + 30 +0.0 + 0 +POINT + 5 +1831 + 8 +BEMASSUNG + 10 +6175.0 + 20 +5569.0709 + 30 +0.0 + 0 +POINT + 5 +1832 + 8 +BEMASSUNG + 10 +6175.0 + 20 +5549.0709 + 30 +0.0 + 0 +POINT + 5 +1833 + 8 +BEMASSUNG + 10 +6175.0 + 20 +5529.0709 + 30 +0.0 + 0 +POINT + 5 +1834 + 8 +BEMASSUNG + 10 +6175.0 + 20 +5509.0709 + 30 +0.0 + 0 +POINT + 5 +1835 + 8 +BEMASSUNG + 10 +6175.0 + 20 +5489.0709 + 30 +0.0 + 0 +POINT + 5 +1836 + 8 +BEMASSUNG + 10 +6175.0 + 20 +5469.0709 + 30 +0.0 + 0 +POINT + 5 +1837 + 8 +BEMASSUNG + 10 +6175.0 + 20 +5449.0709 + 30 +0.0 + 0 +POINT + 5 +1838 + 8 +BEMASSUNG + 10 +6175.0 + 20 +5429.0709 + 30 +0.0 + 0 +POINT + 5 +1839 + 8 +BEMASSUNG + 10 +6175.0 + 20 +5409.0709 + 30 +0.0 + 0 +POINT + 5 +183A + 8 +BEMASSUNG + 10 +6175.0 + 20 +5389.0709 + 30 +0.0 + 0 +POINT + 5 +183B + 8 +BEMASSUNG + 10 +6175.0 + 20 +5369.0709 + 30 +0.0 + 0 +POINT + 5 +183C + 8 +BEMASSUNG + 10 +6175.0 + 20 +5349.0709 + 30 +0.0 + 0 +POINT + 5 +183D + 8 +BEMASSUNG + 10 +6175.0 + 20 +5329.0709 + 30 +0.0 + 0 +POINT + 5 +183E + 8 +BEMASSUNG + 10 +6175.0 + 20 +5309.0709 + 30 +0.0 + 0 +POINT + 5 +183F + 8 +BEMASSUNG + 10 +6175.0 + 20 +5289.0709 + 30 +0.0 + 0 +POINT + 5 +1840 + 8 +BEMASSUNG + 10 +6175.0 + 20 +5269.0709 + 30 +0.0 + 0 +POINT + 5 +1841 + 8 +BEMASSUNG + 10 +6175.0 + 20 +5249.0709 + 30 +0.0 + 0 +POINT + 5 +1842 + 8 +BEMASSUNG + 10 +6175.0 + 20 +5229.0709 + 30 +0.0 + 0 +POINT + 5 +1843 + 8 +BEMASSUNG + 10 +6175.0 + 20 +5209.0709 + 30 +0.0 + 0 +POINT + 5 +1844 + 8 +BEMASSUNG + 10 +6171.869511 + 20 +5189.673777 + 30 +0.0 + 0 +POINT + 5 +1845 + 8 +BEMASSUNG + 10 +6164.441697 + 20 +5171.104243 + 30 +0.0 + 0 +POINT + 5 +1846 + 8 +BEMASSUNG + 10 +6157.013884 + 20 +5152.534709 + 30 +0.0 + 0 +POINT + 5 +1847 + 8 +BEMASSUNG + 10 +6149.977259 + 20 +5133.885692 + 30 +0.0 + 0 +POINT + 5 +1848 + 8 +BEMASSUNG + 10 +6149.569181 + 20 +5113.889856 + 30 +0.0 + 0 +POINT + 5 +1849 + 8 +BEMASSUNG + 10 +6149.161102 + 20 +5093.894019 + 30 +0.0 + 0 +POINT + 5 +184A + 8 +BEMASSUNG + 10 +6148.753024 + 20 +5073.898183 + 30 +0.0 + 0 +POINT + 5 +184B + 8 +BEMASSUNG + 10 +6148.344946 + 20 +5053.902346 + 30 +0.0 + 0 +POINT + 5 +184C + 8 +BEMASSUNG + 10 +6147.936868 + 20 +5033.90651 + 30 +0.0 + 0 +POINT + 5 +184D + 8 +BEMASSUNG + 10 +6147.528789 + 20 +5013.910674 + 30 +0.0 + 0 +POINT + 5 +184E + 8 +BEMASSUNG + 10 +6147.120711 + 20 +4993.914837 + 30 +0.0 + 0 +POINT + 5 +184F + 8 +BEMASSUNG + 10 +6146.712633 + 20 +4973.919001 + 30 +0.0 + 0 +POINT + 5 +1850 + 8 +BEMASSUNG + 10 +6146.304554 + 20 +4953.923165 + 30 +0.0 + 0 +POINT + 5 +1851 + 8 +BEMASSUNG + 10 +6145.896476 + 20 +4933.927328 + 30 +0.0 + 0 +POINT + 5 +1852 + 8 +BEMASSUNG + 10 +6145.488398 + 20 +4913.931492 + 30 +0.0 + 0 +POINT + 5 +1853 + 8 +BEMASSUNG + 10 +6145.080319 + 20 +4893.935655 + 30 +0.0 + 0 +POINT + 5 +1854 + 8 +BEMASSUNG + 10 +6144.672241 + 20 +4873.939819 + 30 +0.0 + 0 +POINT + 5 +1855 + 8 +BEMASSUNG + 10 +6144.264163 + 20 +4853.943983 + 30 +0.0 + 0 +POINT + 5 +1856 + 8 +BEMASSUNG + 10 +6143.856085 + 20 +4833.948146 + 30 +0.0 + 0 +POINT + 5 +1857 + 8 +BEMASSUNG + 10 +6143.448006 + 20 +4813.95231 + 30 +0.0 + 0 +POINT + 5 +1858 + 8 +BEMASSUNG + 10 +6143.039928 + 20 +4793.956474 + 30 +0.0 + 0 +POINT + 5 +1859 + 8 +BEMASSUNG + 10 +6142.63185 + 20 +4773.960637 + 30 +0.0 + 0 +POINT + 5 +185A + 8 +BEMASSUNG + 10 +6142.223771 + 20 +4753.964801 + 30 +0.0 + 0 +POINT + 5 +185B + 8 +BEMASSUNG + 10 +6141.815693 + 20 +4733.968965 + 30 +0.0 + 0 +POINT + 5 +185C + 8 +BEMASSUNG + 10 +6141.407615 + 20 +4713.973128 + 30 +0.0 + 0 +POINT + 5 +185D + 8 +BEMASSUNG + 10 +6140.999537 + 20 +4693.977292 + 30 +0.0 + 0 +POINT + 5 +185E + 8 +BEMASSUNG + 10 +6140.591458 + 20 +4673.981455 + 30 +0.0 + 0 +POINT + 5 +185F + 8 +BEMASSUNG + 10 +6140.18338 + 20 +4653.985619 + 30 +0.0 + 0 +POINT + 5 +1860 + 8 +BEMASSUNG + 10 +6139.775302 + 20 +4633.989783 + 30 +0.0 + 0 +POINT + 5 +1861 + 8 +BEMASSUNG + 10 +6139.367223 + 20 +4613.993946 + 30 +0.0 + 0 +POINT + 5 +1862 + 8 +BEMASSUNG + 10 +6138.959145 + 20 +4593.99811 + 30 +0.0 + 0 +POINT + 5 +1863 + 8 +BEMASSUNG + 10 +6138.551067 + 20 +4574.002274 + 30 +0.0 + 0 +POINT + 5 +1864 + 8 +BEMASSUNG + 10 +6138.142989 + 20 +4554.006437 + 30 +0.0 + 0 +POINT + 5 +1865 + 8 +BEMASSUNG + 10 +6137.73491 + 20 +4534.010601 + 30 +0.0 + 0 +POINT + 5 +1866 + 8 +BEMASSUNG + 10 +6137.326832 + 20 +4514.014764 + 30 +0.0 + 0 +POINT + 5 +1867 + 8 +BEMASSUNG + 10 +6136.918754 + 20 +4494.018928 + 30 +0.0 + 0 +POINT + 5 +1868 + 8 +BEMASSUNG + 10 +6136.510675 + 20 +4474.023092 + 30 +0.0 + 0 +POINT + 5 +1869 + 8 +BEMASSUNG + 10 +6136.102597 + 20 +4454.027255 + 30 +0.0 + 0 +POINT + 5 +186A + 8 +BEMASSUNG + 10 +6135.694519 + 20 +4434.031419 + 30 +0.0 + 0 +POINT + 5 +186B + 8 +BEMASSUNG + 10 +6135.28644 + 20 +4414.035583 + 30 +0.0 + 0 +POINT + 5 +186C + 8 +BEMASSUNG + 10 +6130.420253 + 20 +4396.183544 + 30 +0.0 + 0 +POINT + 5 +186D + 8 +BEMASSUNG + 10 +6115.055827 + 20 +4383.379856 + 30 +0.0 + 0 +POINT + 5 +186E + 8 +BEMASSUNG + 10 +6099.691402 + 20 +4370.576168 + 30 +0.0 + 0 +POINT + 5 +186F + 8 +BEMASSUNG + 10 +6084.326976 + 20 +4357.77248 + 30 +0.0 + 0 +POINT + 5 +1870 + 8 +BEMASSUNG + 10 +6068.96255 + 20 +4344.968792 + 30 +0.0 + 0 +POINT + 5 +1871 + 8 +BEMASSUNG + 10 +6053.598125 + 20 +4332.165104 + 30 +0.0 + 0 +POINT + 5 +1872 + 8 +BEMASSUNG + 10 +6037.406706 + 20 +4320.537003 + 30 +0.0 + 0 +POINT + 5 +1873 + 8 +BEMASSUNG + 10 +6020.164405 + 20 +4310.402752 + 30 +0.0 + 0 +POINT + 5 +1874 + 8 +BEMASSUNG + 10 +6002.922103 + 20 +4300.268501 + 30 +0.0 + 0 +POINT + 5 +1875 + 8 +BEMASSUNG + 10 +5985.679802 + 20 +4290.134251 + 30 +0.0 + 0 +DIMENSION + 5 +1876 + 8 +BEMASSUNG + 2 +*D46 + 10 +4565.0 + 20 +5095.0 + 30 +0.0 + 11 +4477.5 + 21 +4877.5 + 31 +0.0 + 12 +1015.0 + 22 +0.0 + 32 +0.0 + 1 +16 + 13 +7235.0 + 23 +4660.0 + 33 +0.0 + 14 +7235.0 + 24 +5095.0 + 34 +0.0 + 50 +90.0 + 0 +TEXT + 5 +1877 + 8 +LEGENDE-35 + 10 +8505.0 + 20 +6355.0 + 30 +0.0 + 40 +87.5 + 1 +GIPSPUTZ + 41 +0.75 + 0 +TEXT + 5 +1878 + 8 +LEGENDE-35 + 10 +8505.0 + 20 +6105.0 + 30 +0.0 + 40 +87.5 + 1 +NATURSTEINPLATTEN + 41 +0.75 + 0 +TEXT + 5 +1879 + 8 +LEGENDE-35 + 10 +8505.0 + 20 +5855.0 + 30 +0.0 + 40 +87.5 + 1 +ZEMENTESTRICH + 41 +0.75 + 0 +TEXT + 5 +187A + 8 +LEGENDE-35 + 10 +8505.0 + 20 +5605.0 + 30 +0.0 + 40 +87.5 + 1 +PE-FOLIE + 41 +0.75 + 0 +TEXT + 5 +187B + 8 +LEGENDE-35 + 10 +8505.0 + 20 +5355.0 + 30 +0.0 + 40 +87.5 + 1 +PS-WÄDÄ + 41 +0.75 + 0 +POLYLINE + 5 +187C + 8 +BEMASSUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +20D9 + 8 +BEMASSUNG + 10 +8390.0 + 20 +6410.0 + 30 +0.0 + 0 +VERTEX + 5 +20DA + 8 +BEMASSUNG + 10 +7545.0 + 20 +6410.0 + 30 +0.0 + 0 +VERTEX + 5 +20DB + 8 +BEMASSUNG + 10 +7545.0 + 20 +5525.0 + 30 +0.0 + 0 +VERTEX + 5 +20DC + 8 +BEMASSUNG + 10 +7145.0 + 20 +5525.0 + 30 +0.0 + 0 +SEQEND + 5 +20DD + 8 +BEMASSUNG + 0 +POLYLINE + 5 +1882 + 8 +BEMASSUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +20DE + 8 +BEMASSUNG + 10 +8390.0 + 20 +6155.0 + 30 +0.0 + 0 +VERTEX + 5 +20DF + 8 +BEMASSUNG + 10 +7655.0 + 20 +6155.0 + 30 +0.0 + 0 +VERTEX + 5 +20E0 + 8 +BEMASSUNG + 10 +7655.0 + 20 +4940.0 + 30 +0.0 + 0 +SEQEND + 5 +20E1 + 8 +BEMASSUNG + 0 +POLYLINE + 5 +1887 + 8 +BEMASSUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +20E2 + 8 +BEMASSUNG + 10 +8385.0 + 20 +5890.0 + 30 +0.0 + 0 +VERTEX + 5 +20E3 + 8 +BEMASSUNG + 10 +7825.0 + 20 +5890.0 + 30 +0.0 + 0 +VERTEX + 5 +20E4 + 8 +BEMASSUNG + 10 +7825.0 + 20 +4855.0 + 30 +0.0 + 0 +SEQEND + 5 +20E5 + 8 +BEMASSUNG + 0 +POLYLINE + 5 +188C + 8 +BEMASSUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +20E6 + 8 +BEMASSUNG + 10 +8385.0 + 20 +5645.0 + 30 +0.0 + 0 +VERTEX + 5 +20E7 + 8 +BEMASSUNG + 10 +7910.0 + 20 +5645.0 + 30 +0.0 + 0 +VERTEX + 5 +20E8 + 8 +BEMASSUNG + 10 +7910.0 + 20 +4790.0 + 30 +0.0 + 0 +SEQEND + 5 +20E9 + 8 +BEMASSUNG + 0 +POLYLINE + 5 +1891 + 8 +BEMASSUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +20EA + 8 +BEMASSUNG + 10 +8010.0 + 20 +5645.0 + 30 +0.0 + 0 +VERTEX + 5 +20EB + 8 +BEMASSUNG + 10 +8010.0 + 20 +4655.0 + 30 +0.0 + 0 +SEQEND + 5 +20EC + 8 +BEMASSUNG + 0 +POLYLINE + 5 +1895 + 8 +BEMASSUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +20ED + 8 +BEMASSUNG + 10 +8380.0 + 20 +5405.0 + 30 +0.0 + 0 +VERTEX + 5 +20EE + 8 +BEMASSUNG + 10 +8125.0 + 20 +5405.0 + 30 +0.0 + 0 +VERTEX + 5 +20EF + 8 +BEMASSUNG + 10 +8125.0 + 20 +4715.0 + 30 +0.0 + 0 +SEQEND + 5 +20F0 + 8 +BEMASSUNG + 0 +TEXT + 5 +189A + 8 +BEMASSUNG + 10 +2330.0 + 20 +5700.0 + 30 +0.0 + 40 +87.5 + 1 +PS-HARTSCHAUM-WÄDÄ + 41 +0.75 + 0 +TEXT + 5 +189B + 8 +BEMASSUNG + 10 +2330.0 + 20 +5450.0 + 30 +0.0 + 40 +87.5 + 1 +DICHTUNGSBAHN (BITUMEN) + 41 +0.75 + 0 +TEXT + 5 +189C + 8 +BEMASSUNG + 10 +2330.0 + 20 +5200.0 + 30 +0.0 + 40 +87.5 + 1 +MW Mz-20-1.8-NF + 41 +0.75 + 0 +TEXT + 5 +189D + 8 +BEMASSUNG + 10 +2330.0 + 20 +4950.0 + 30 +0.0 + 40 +87.5 + 1 +MÖRTELKEHLE + 41 +0.75 + 0 +POLYLINE + 5 +189E + 8 +BEMASSUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +20F1 + 8 +BEMASSUNG + 10 +4005.0 + 20 +5735.0 + 30 +0.0 + 0 +VERTEX + 5 +20F2 + 8 +BEMASSUNG + 10 +6080.0 + 20 +5735.0 + 30 +0.0 + 0 +SEQEND + 5 +20F3 + 8 +BEMASSUNG + 0 +POLYLINE + 5 +18A2 + 8 +BEMASSUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +20F4 + 8 +BEMASSUNG + 10 +4010.0 + 20 +5500.0 + 30 +0.0 + 0 +VERTEX + 5 +20F5 + 8 +BEMASSUNG + 10 +6195.0 + 20 +5500.0 + 30 +0.0 + 0 +SEQEND + 5 +20F6 + 8 +BEMASSUNG + 0 +POLYLINE + 5 +18A6 + 8 +BEMASSUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +20F7 + 8 +BEMASSUNG + 10 +3390.0 + 20 +5270.0 + 30 +0.0 + 0 +VERTEX + 5 +20F8 + 8 +BEMASSUNG + 10 +6320.0 + 20 +5270.0 + 30 +0.0 + 0 +SEQEND + 5 +20F9 + 8 +BEMASSUNG + 0 +POLYLINE + 5 +18AA + 8 +BEMASSUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +20FA + 8 +BEMASSUNG + 10 +3355.0 + 20 +4990.0 + 30 +0.0 + 0 +VERTEX + 5 +20FB + 8 +BEMASSUNG + 10 +4255.0 + 20 +4450.0 + 30 +0.0 + 0 +VERTEX + 5 +20FC + 8 +BEMASSUNG + 10 +5770.0 + 20 +4450.0 + 30 +0.0 + 0 +VERTEX + 5 +20FD + 8 +BEMASSUNG + 10 +6140.0 + 20 +4265.0 + 30 +0.0 + 0 +SEQEND + 5 +20FE + 8 +BEMASSUNG + 0 +TEXT + 5 +18B0 + 8 +BEMASSUNG + 10 +9300.0 + 20 +2220.0 + 30 +0.0 + 40 +87.5 + 1 +ORTBETON B25 ZWEIACHSIG GESPANNT + 41 +0.75 + 0 +TEXT + 5 +18B1 + 8 +BEMASSUNG + 10 +9300.0 + 20 +1970.0 + 30 +0.0 + 40 +87.5 + 1 +KIES + 41 +0.75 + 0 +TEXT + 5 +18B2 + 8 +BEMASSUNG + 10 +9300.0 + 20 +1720.0 + 30 +0.0 + 40 +87.5 + 1 +FUNDAMENT B15 + 41 +0.75 + 0 +POLYLINE + 5 +18B3 + 8 +BEMASSUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +20FF + 8 +BEMASSUNG + 10 +9210.0 + 20 +2275.0 + 30 +0.0 + 0 +VERTEX + 5 +2100 + 8 +BEMASSUNG + 10 +8990.0 + 20 +2275.0 + 30 +0.0 + 0 +VERTEX + 5 +2101 + 8 +BEMASSUNG + 10 +8990.0 + 20 +4350.0 + 30 +0.0 + 0 +VERTEX + 5 +2102 + 8 +BEMASSUNG + 10 +8490.0 + 20 +4350.0 + 30 +0.0 + 0 +SEQEND + 5 +2103 + 8 +BEMASSUNG + 0 +POLYLINE + 5 +18B9 + 8 +BEMASSUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2104 + 8 +BEMASSUNG + 10 +9205.0 + 20 +2010.0 + 30 +0.0 + 0 +VERTEX + 5 +2105 + 8 +BEMASSUNG + 10 +8875.0 + 20 +2010.0 + 30 +0.0 + 0 +VERTEX + 5 +2106 + 8 +BEMASSUNG + 10 +8875.0 + 20 +3755.0 + 30 +0.0 + 0 +VERTEX + 5 +2107 + 8 +BEMASSUNG + 10 +8450.0 + 20 +3755.0 + 30 +0.0 + 0 +SEQEND + 5 +2108 + 8 +BEMASSUNG + 0 +POLYLINE + 5 +18BF + 8 +BEMASSUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2109 + 8 +BEMASSUNG + 10 +9200.0 + 20 +1765.0 + 30 +0.0 + 0 +VERTEX + 5 +210A + 8 +BEMASSUNG + 10 +8620.0 + 20 +1765.0 + 30 +0.0 + 0 +VERTEX + 5 +210B + 8 +BEMASSUNG + 10 +8620.0 + 20 +2490.0 + 30 +0.0 + 0 +VERTEX + 5 +210C + 8 +BEMASSUNG + 10 +7825.0 + 20 +2490.0 + 30 +0.0 + 0 +VERTEX + 5 +210D + 8 +BEMASSUNG + 10 +7520.0 + 20 +3165.0 + 30 +0.0 + 0 +SEQEND + 5 +210E + 8 +BEMASSUNG + 0 +TEXT + 5 +18C6 + 8 +BEMASSUNG + 10 +6725.0 + 20 +6540.0 + 30 +0.0 + 40 +62.5 + 1 +5 + 41 +0.75 + 0 +TEXT + 5 +18C7 + 8 +BEMASSUNG + 10 +7235.0 + 20 +6540.0 + 30 +0.0 + 40 +62.5 + 1 +5 + 41 +0.75 + 0 +TEXT + 5 +18C8 + 8 +BEMASSUNG + 10 +9735.0 + 20 +5050.0 + 30 +0.0 + 40 +62.5 + 1 +5 + 50 +90.0 + 41 +0.75 + 0 +TEXT + 5 +18C9 + 8 +LEGENDE-70 + 10 +2070.0 + 20 +7065.0 + 30 +0.0 + 40 +175.0 + 1 +KELLERFUSSBODENAUFBAU MIT FUNDAMENTENANSCHLUSS + 41 +0.75 + 0 +TEXT + 5 +18CA + 8 +LEGENDE-70 + 10 +2050.0 + 20 +14040.0 + 30 +0.0 + 40 +175.0 + 1 +GESCHOSSDECKENANSCHLUSS ÜBER KELLERGESCHOSS + 41 +0.75 + 0 +TEXT + 5 +18CB + 8 +LEGENDE-70 + 10 +7920.0 + 20 +14035.0 + 30 +0.0 + 40 +87.5 + 1 +M 1:10 + 41 +0.75 + 0 +TEXT + 5 +18CC + 8 +LEGENDE-70 + 10 +8240.0 + 20 +7065.0 + 30 +0.0 + 40 +87.5 + 1 +M 1:10 + 41 +0.75 + 0 +TEXT + 5 +18CD + 8 +LEGENDE-70 + 10 +12515.0 + 20 +11935.0 + 30 +0.0 + 40 +175.0 + 1 +LEICHTE TRENNWAND MIT FUSSBODEN- UND DECKENANSCHLUSS + 41 +0.75 + 0 +POLYLINE + 5 +18CE + 8 +DAEMMUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +210F + 8 +DAEMMUNG + 10 +15727.274018 + 20 +10310.0 + 30 +0.0 + 0 +VERTEX + 5 +2110 + 8 +DAEMMUNG + 10 +16352.274018 + 20 +10310.0 + 30 +0.0 + 0 +VERTEX + 5 +2111 + 8 +DAEMMUNG + 10 +16352.274018 + 20 +10260.0 + 30 +0.0 + 0 +VERTEX + 5 +2112 + 8 +DAEMMUNG + 10 +15727.274018 + 20 +10260.0 + 30 +0.0 + 0 +SEQEND + 5 +2113 + 8 +DAEMMUNG + 0 +POLYLINE + 5 +18D4 + 8 +TRENNWAND + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2114 + 8 +TRENNWAND + 10 +15812.274018 + 20 +10135.0 + 30 +0.0 + 0 +VERTEX + 5 +2115 + 8 +TRENNWAND + 10 +15812.274018 + 20 +10245.0 + 30 +0.0 + 0 +VERTEX + 5 +2116 + 8 +TRENNWAND + 10 +16267.274018 + 20 +10245.0 + 30 +0.0 + 0 +VERTEX + 5 +2117 + 8 +TRENNWAND + 10 +16267.274018 + 20 +10140.0 + 30 +0.0 + 0 +SEQEND + 5 +2118 + 8 +TRENNWAND + 0 +POLYLINE + 5 +18DA + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2119 + 8 +DRAHTANKER + 10 +16022.274018 + 20 +10240.0 + 30 +0.0 + 0 +VERTEX + 5 +211A + 8 +DRAHTANKER + 10 +16022.274018 + 20 +10285.0 + 30 +0.0 + 0 +SEQEND + 5 +211B + 8 +DRAHTANKER + 0 +POLYLINE + 5 +18DE + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +211C + 8 +DRAHTANKER + 10 +16022.274018 + 20 +10300.0 + 30 +0.0 + 0 +VERTEX + 5 +211D + 8 +DRAHTANKER + 10 +16022.274018 + 20 +10345.0 + 30 +0.0 + 0 +SEQEND + 5 +211E + 8 +DRAHTANKER + 0 +POLYLINE + 5 +18E2 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +211F + 8 +DRAHTANKER + 10 +16022.274018 + 20 +10370.0 + 30 +0.0 + 0 +VERTEX + 5 +2120 + 8 +DRAHTANKER + 10 +16022.274018 + 20 +10415.0 + 30 +0.0 + 0 +SEQEND + 5 +2121 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +18E6 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2122 + 8 +DRAHTANKER + 10 +16022.274018 + 20 +10445.0 + 30 +0.0 + 0 +VERTEX + 5 +2123 + 8 +DRAHTANKER + 10 +16022.274018 + 20 +10495.0 + 30 +0.0 + 0 +SEQEND + 5 +2124 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +18EA + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2125 + 8 +DRAHTANKER + 10 +16022.274018 + 20 +10520.0 + 30 +0.0 + 0 +VERTEX + 5 +2126 + 8 +DRAHTANKER + 10 +16022.274018 + 20 +10560.0 + 30 +0.0 + 0 +SEQEND + 5 +2127 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +18EE + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2128 + 8 +DRAHTANKER + 10 +16022.274018 + 20 +10245.0 + 30 +0.0 + 0 +VERTEX + 5 +2129 + 8 +DRAHTANKER + 10 +15992.274018 + 20 +10205.0 + 30 +0.0 + 0 +SEQEND + 5 +212A + 8 +DRAHTANKER + 0 +POLYLINE + 5 +18F2 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +212B + 8 +DRAHTANKER + 10 +16022.274018 + 20 +10245.0 + 30 +0.0 + 0 +VERTEX + 5 +212C + 8 +DRAHTANKER + 10 +16052.274018 + 20 +10205.0 + 30 +0.0 + 0 +SEQEND + 5 +212D + 8 +DRAHTANKER + 0 +POLYLINE + 5 +18F6 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +212E + 8 +MAUERWERK + 10 +15727.274018 + 20 +10310.0 + 30 +0.0 + 0 +VERTEX + 5 +212F + 8 +MAUERWERK + 10 +15652.274018 + 20 +10310.0 + 30 +0.0 + 0 +VERTEX + 5 +2130 + 8 +MAUERWERK + 10 +15652.274018 + 20 +10235.0 + 30 +0.0 + 0 +VERTEX + 5 +2131 + 8 +MAUERWERK + 10 +15727.274018 + 20 +10235.0 + 30 +0.0 + 0 +SEQEND + 5 +2132 + 8 +MAUERWERK + 0 +POLYLINE + 5 +18FC + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2133 + 8 +MAUERWERK + 10 +15652.274018 + 20 +10310.0 + 30 +0.0 + 0 +VERTEX + 5 +2134 + 8 +MAUERWERK + 10 +15727.274018 + 20 +10235.0 + 30 +0.0 + 0 +SEQEND + 5 +2135 + 8 +MAUERWERK + 0 +POLYLINE + 5 +1900 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2136 + 8 +MAUERWERK + 10 +15652.274018 + 20 +10235.0 + 30 +0.0 + 0 +VERTEX + 5 +2137 + 8 +MAUERWERK + 10 +15727.274018 + 20 +10310.0 + 30 +0.0 + 0 +SEQEND + 5 +2138 + 8 +MAUERWERK + 0 +POLYLINE + 5 +1904 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2139 + 8 +MAUERWERK + 10 +16427.274018 + 20 +10310.0 + 30 +0.0 + 0 +VERTEX + 5 +213A + 8 +MAUERWERK + 10 +16352.274018 + 20 +10310.0 + 30 +0.0 + 0 +VERTEX + 5 +213B + 8 +MAUERWERK + 10 +16352.274018 + 20 +10235.0 + 30 +0.0 + 0 +VERTEX + 5 +213C + 8 +MAUERWERK + 10 +16427.274018 + 20 +10235.0 + 30 +0.0 + 0 +SEQEND + 5 +213D + 8 +MAUERWERK + 0 +POLYLINE + 5 +190A + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +213E + 8 +MAUERWERK + 10 +16352.274018 + 20 +10235.0 + 30 +0.0 + 0 +VERTEX + 5 +213F + 8 +MAUERWERK + 10 +16427.274018 + 20 +10310.0 + 30 +0.0 + 0 +SEQEND + 5 +2140 + 8 +MAUERWERK + 0 +POLYLINE + 5 +190E + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2141 + 8 +MAUERWERK + 10 +16352.274018 + 20 +10310.0 + 30 +0.0 + 0 +VERTEX + 5 +2142 + 8 +MAUERWERK + 10 +16427.274018 + 20 +10235.0 + 30 +0.0 + 0 +SEQEND + 5 +2143 + 8 +MAUERWERK + 0 +POLYLINE + 5 +1912 + 8 +SCHNITTKANTEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +2144 + 8 +SCHNITTKANTEN + 10 +15527.274018 + 20 +8895.0 + 30 +0.0 + 0 +VERTEX + 5 +2145 + 8 +SCHNITTKANTEN + 10 +16562.274018 + 20 +8895.0 + 30 +0.0 + 0 +SEQEND + 5 +2146 + 8 +SCHNITTKANTEN + 0 +POLYLINE + 5 +1916 + 8 +TRENNWAND + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2147 + 8 +TRENNWAND + 10 +15727.274018 + 20 +10260.0 + 30 +0.0 + 0 +VERTEX + 5 +2148 + 8 +TRENNWAND + 10 +15727.274018 + 20 +8895.0 + 30 +0.0 + 0 +SEQEND + 5 +2149 + 8 +TRENNWAND + 0 +POLYLINE + 5 +191A + 8 +TRENNWAND + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +214A + 8 +TRENNWAND + 10 +15789.774018 + 20 +8895.0 + 30 +0.0 + 0 +VERTEX + 5 +214B + 8 +TRENNWAND + 10 +15789.774018 + 20 +10260.0 + 30 +0.0 + 0 +VERTEX + 5 +214C + 8 +TRENNWAND + 10 +15727.274018 + 20 +10260.0 + 30 +0.0 + 0 +SEQEND + 5 +214D + 8 +TRENNWAND + 0 +POLYLINE + 5 +191F + 8 +TRENNWAND + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +214E + 8 +TRENNWAND + 10 +15822.274018 + 20 +10230.0 + 30 +0.0 + 0 +VERTEX + 5 +214F + 8 +TRENNWAND + 10 +15822.274018 + 20 +8895.0 + 30 +0.0 + 0 +SEQEND + 5 +2150 + 8 +TRENNWAND + 0 +POLYLINE + 5 +1923 + 8 +TRENNWAND + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2151 + 8 +TRENNWAND + 10 +16257.274018 + 20 +10230.0 + 30 +0.0 + 0 +VERTEX + 5 +2152 + 8 +TRENNWAND + 10 +16257.274018 + 20 +8895.0 + 30 +0.0 + 0 +SEQEND + 5 +2153 + 8 +TRENNWAND + 0 +POLYLINE + 5 +1927 + 8 +TRENNWAND + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2154 + 8 +TRENNWAND + 10 +16189.774018 + 20 +10245.0 + 30 +0.0 + 0 +VERTEX + 5 +2155 + 8 +TRENNWAND + 10 +16189.774018 + 20 +8895.0 + 30 +0.0 + 0 +SEQEND + 5 +2156 + 8 +TRENNWAND + 0 +POLYLINE + 5 +192B + 8 +TRENNWAND + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2157 + 8 +TRENNWAND + 10 +16289.774018 + 20 +10260.0 + 30 +0.0 + 0 +VERTEX + 5 +2158 + 8 +TRENNWAND + 10 +16289.774018 + 20 +8895.0 + 30 +0.0 + 0 +SEQEND + 5 +2159 + 8 +TRENNWAND + 0 +POLYLINE + 5 +192F + 8 +TRENNWAND + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +215A + 8 +TRENNWAND + 10 +16352.274018 + 20 +8895.0 + 30 +0.0 + 0 +VERTEX + 5 +215B + 8 +TRENNWAND + 10 +16352.274018 + 20 +10260.0 + 30 +0.0 + 0 +VERTEX + 5 +215C + 8 +TRENNWAND + 10 +16289.774018 + 20 +10260.0 + 30 +0.0 + 0 +SEQEND + 5 +215D + 8 +TRENNWAND + 0 +POLYLINE + 5 +1934 + 8 +SCHNITTKANTEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +215E + 8 +SCHNITTKANTEN + 10 +14679.649752 + 20 +11227.792194 + 30 +0.0 + 0 +VERTEX + 5 +215F + 8 +SCHNITTKANTEN + 10 +14679.649752 + 20 +10053.885464 + 30 +0.0 + 0 +SEQEND + 5 +2160 + 8 +SCHNITTKANTEN + 0 +POLYLINE + 5 +1938 + 8 +SCHNITTKANTEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +2161 + 8 +SCHNITTKANTEN + 10 +17292.266155 + 20 +11231.666484 + 30 +0.0 + 0 +VERTEX + 5 +2162 + 8 +SCHNITTKANTEN + 10 +17292.266155 + 20 +10057.759754 + 30 +0.0 + 0 +SEQEND + 5 +2163 + 8 +SCHNITTKANTEN + 0 +POLYLINE + 5 +193C + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2164 + 8 +MAUERWERK + 10 +14679.649752 + 20 +10235.0 + 30 +0.0 + 0 +VERTEX + 5 +2165 + 8 +MAUERWERK + 10 +15727.274018 + 20 +10235.0 + 30 +0.0 + 0 +SEQEND + 5 +2166 + 8 +MAUERWERK + 0 +POLYLINE + 5 +1940 + 8 +DECKEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +2167 + 8 +DECKEN + 10 +14679.649752 + 20 +11110.0 + 30 +0.0 + 0 +VERTEX + 5 +2168 + 8 +DECKEN + 10 +17292.266155 + 20 +11110.0 + 30 +0.0 + 0 +SEQEND + 5 +2169 + 8 +DECKEN + 0 +POLYLINE + 5 +1944 + 8 +DECKEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +216A + 8 +DECKEN + 10 +17292.266155 + 20 +10310.0 + 30 +0.0 + 0 +VERTEX + 5 +216B + 8 +DECKEN + 10 +14679.649752 + 20 +10310.0 + 30 +0.0 + 0 +SEQEND + 5 +216C + 8 +DECKEN + 0 +POLYLINE + 5 +1948 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +216D + 8 +MAUERWERK + 10 +16352.274018 + 20 +10235.0 + 30 +0.0 + 0 +VERTEX + 5 +216E + 8 +MAUERWERK + 10 +17292.266155 + 20 +10235.0 + 30 +0.0 + 0 +SEQEND + 5 +216F + 8 +MAUERWERK + 0 +POLYLINE + 5 +194C + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2170 + 8 +MAUERWERK + 10 +17292.266155 + 20 +10310.0 + 30 +0.0 + 0 +VERTEX + 5 +2171 + 8 +MAUERWERK + 10 +14679.649752 + 20 +10310.0 + 30 +0.0 + 0 +SEQEND + 5 +2172 + 8 +MAUERWERK + 0 +POLYLINE + 5 +1950 + 8 +TRENNWAND + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2173 + 8 +TRENNWAND + 10 +15727.274018 + 20 +8930.0 + 30 +0.0 + 0 +VERTEX + 5 +2174 + 8 +TRENNWAND + 10 +15727.274018 + 20 +10295.0 + 30 +0.0 + 0 +SEQEND + 5 +2175 + 8 +TRENNWAND + 0 +POLYLINE + 5 +1954 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2176 + 8 +DRAHTANKER + 10 +16022.274018 + 20 +6670.0 + 30 +0.0 + 0 +VERTEX + 5 +2177 + 8 +DRAHTANKER + 10 +16022.274018 + 20 +6630.0 + 30 +0.0 + 0 +SEQEND + 5 +2178 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1958 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2179 + 8 +DRAHTANKER + 10 +16022.274018 + 20 +6945.0 + 30 +0.0 + 0 +VERTEX + 5 +217A + 8 +DRAHTANKER + 10 +16052.274018 + 20 +6985.0 + 30 +0.0 + 0 +SEQEND + 5 +217B + 8 +DRAHTANKER + 0 +POLYLINE + 5 +195C + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +217C + 8 +DRAHTANKER + 10 +16022.274018 + 20 +6945.0 + 30 +0.0 + 0 +VERTEX + 5 +217D + 8 +DRAHTANKER + 10 +15992.274018 + 20 +6985.0 + 30 +0.0 + 0 +SEQEND + 5 +217E + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1960 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +217F + 8 +DRAHTANKER + 10 +16022.274018 + 20 +6745.0 + 30 +0.0 + 0 +VERTEX + 5 +2180 + 8 +DRAHTANKER + 10 +16022.274018 + 20 +6695.0 + 30 +0.0 + 0 +SEQEND + 5 +2181 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1964 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2182 + 8 +DRAHTANKER + 10 +16022.274018 + 20 +6820.0 + 30 +0.0 + 0 +VERTEX + 5 +2183 + 8 +DRAHTANKER + 10 +16022.274018 + 20 +6775.0 + 30 +0.0 + 0 +SEQEND + 5 +2184 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1968 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2185 + 8 +DRAHTANKER + 10 +16022.274018 + 20 +6890.0 + 30 +0.0 + 0 +VERTEX + 5 +2186 + 8 +DRAHTANKER + 10 +16022.274018 + 20 +6845.0 + 30 +0.0 + 0 +SEQEND + 5 +2187 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +196C + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2188 + 8 +DRAHTANKER + 10 +16022.274018 + 20 +6950.0 + 30 +0.0 + 0 +VERTEX + 5 +2189 + 8 +DRAHTANKER + 10 +16022.274018 + 20 +6905.0 + 30 +0.0 + 0 +SEQEND + 5 +218A + 8 +DRAHTANKER + 0 +POLYLINE + 5 +1970 + 8 +DAEMMUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +218B + 8 +DAEMMUNG + 10 +15727.274018 + 20 +6880.0 + 30 +0.0 + 0 +VERTEX + 5 +218C + 8 +DAEMMUNG + 10 +16352.274018 + 20 +6880.0 + 30 +0.0 + 0 +VERTEX + 5 +218D + 8 +DAEMMUNG + 10 +16352.274018 + 20 +6930.0 + 30 +0.0 + 0 +VERTEX + 5 +218E + 8 +DAEMMUNG + 10 +15727.274018 + 20 +6930.0 + 30 +0.0 + 0 +SEQEND + 5 +218F + 8 +DAEMMUNG + 0 +POLYLINE + 5 +1976 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2190 + 8 +MAUERWERK + 10 +17292.266155 + 20 +6880.0 + 30 +0.0 + 0 +VERTEX + 5 +2191 + 8 +MAUERWERK + 10 +14679.649752 + 20 +6880.0 + 30 +0.0 + 0 +SEQEND + 5 +2192 + 8 +MAUERWERK + 0 +POLYLINE + 5 +197A + 8 +DECKEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +2193 + 8 +DECKEN + 10 +17292.266155 + 20 +6880.0 + 30 +0.0 + 0 +VERTEX + 5 +2194 + 8 +DECKEN + 10 +14679.649752 + 20 +6880.0 + 30 +0.0 + 0 +SEQEND + 5 +2195 + 8 +DECKEN + 0 +POLYLINE + 5 +197E + 8 +SCHNITTKANTEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +2196 + 8 +SCHNITTKANTEN + 10 +17292.266155 + 20 +5958.333516 + 30 +0.0 + 0 +VERTEX + 5 +2197 + 8 +SCHNITTKANTEN + 10 +17292.266155 + 20 +7585.0 + 30 +0.0 + 0 +SEQEND + 5 +2198 + 8 +SCHNITTKANTEN + 0 +POLYLINE + 5 +1982 + 8 +SCHNITTKANTEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +2199 + 8 +SCHNITTKANTEN + 10 +14679.649752 + 20 +5962.207806 + 30 +0.0 + 0 +VERTEX + 5 +219A + 8 +SCHNITTKANTEN + 10 +14679.649752 + 20 +7580.0 + 30 +0.0 + 0 +SEQEND + 5 +219B + 8 +SCHNITTKANTEN + 0 +POLYLINE + 5 +1986 + 8 +DECKEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +219C + 8 +DECKEN + 10 +14679.649752 + 20 +6080.0 + 30 +0.0 + 0 +VERTEX + 5 +219D + 8 +DECKEN + 10 +17292.266155 + 20 +6080.0 + 30 +0.0 + 0 +SEQEND + 5 +219E + 8 +DECKEN + 0 +POLYLINE + 5 +198A + 8 +TRENNWAND + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +219F + 8 +TRENNWAND + 10 +15727.274018 + 20 +8300.0 + 30 +0.0 + 0 +VERTEX + 5 +21A0 + 8 +TRENNWAND + 10 +15727.274018 + 20 +6930.0 + 30 +0.0 + 0 +SEQEND + 5 +21A1 + 8 +TRENNWAND + 0 +POLYLINE + 5 +198E + 8 +TRENNWAND + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21A2 + 8 +TRENNWAND + 10 +15822.274018 + 20 +6960.0 + 30 +0.0 + 0 +VERTEX + 5 +21A3 + 8 +TRENNWAND + 10 +15822.274018 + 20 +8295.0 + 30 +0.0 + 0 +SEQEND + 5 +21A4 + 8 +TRENNWAND + 0 +POLYLINE + 5 +1992 + 8 +TRENNWAND + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21A5 + 8 +TRENNWAND + 10 +15789.774018 + 20 +8295.0 + 30 +0.0 + 0 +VERTEX + 5 +21A6 + 8 +TRENNWAND + 10 +15789.774018 + 20 +6930.0 + 30 +0.0 + 0 +VERTEX + 5 +21A7 + 8 +TRENNWAND + 10 +15727.274018 + 20 +6930.0 + 30 +0.0 + 0 +SEQEND + 5 +21A8 + 8 +TRENNWAND + 0 +POLYLINE + 5 +1997 + 8 +TRENNWAND + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21A9 + 8 +TRENNWAND + 10 +16189.774018 + 20 +6945.0 + 30 +0.0 + 0 +VERTEX + 5 +21AA + 8 +TRENNWAND + 10 +16189.774018 + 20 +8295.0 + 30 +0.0 + 0 +SEQEND + 5 +21AB + 8 +TRENNWAND + 0 +POLYLINE + 5 +199B + 8 +TRENNWAND + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21AC + 8 +TRENNWAND + 10 +16257.274018 + 20 +6960.0 + 30 +0.0 + 0 +VERTEX + 5 +21AD + 8 +TRENNWAND + 10 +16257.274018 + 20 +8295.0 + 30 +0.0 + 0 +SEQEND + 5 +21AE + 8 +TRENNWAND + 0 +POLYLINE + 5 +199F + 8 +TRENNWAND + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21AF + 8 +TRENNWAND + 10 +16289.774018 + 20 +6930.0 + 30 +0.0 + 0 +VERTEX + 5 +21B0 + 8 +TRENNWAND + 10 +16289.774018 + 20 +8295.0 + 30 +0.0 + 0 +SEQEND + 5 +21B1 + 8 +TRENNWAND + 0 +POLYLINE + 5 +19A3 + 8 +TRENNWAND + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21B2 + 8 +TRENNWAND + 10 +16352.274018 + 20 +8295.0 + 30 +0.0 + 0 +VERTEX + 5 +21B3 + 8 +TRENNWAND + 10 +16352.274018 + 20 +6930.0 + 30 +0.0 + 0 +VERTEX + 5 +21B4 + 8 +TRENNWAND + 10 +16289.774018 + 20 +6930.0 + 30 +0.0 + 0 +SEQEND + 5 +21B5 + 8 +TRENNWAND + 0 +POLYLINE + 5 +19A8 + 8 +SCHNITTKANTEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +21B6 + 8 +SCHNITTKANTEN + 10 +15527.274018 + 20 +8295.0 + 30 +0.0 + 0 +VERTEX + 5 +21B7 + 8 +SCHNITTKANTEN + 10 +16562.274018 + 20 +8295.0 + 30 +0.0 + 0 +SEQEND + 5 +21B8 + 8 +SCHNITTKANTEN + 0 +POLYLINE + 5 +19AC + 8 +TRENNWAND + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21B9 + 8 +TRENNWAND + 10 +15812.274018 + 20 +7055.0 + 30 +0.0 + 0 +VERTEX + 5 +21BA + 8 +TRENNWAND + 10 +15812.274018 + 20 +6945.0 + 30 +0.0 + 0 +VERTEX + 5 +21BB + 8 +TRENNWAND + 10 +16267.274018 + 20 +6945.0 + 30 +0.0 + 0 +VERTEX + 5 +21BC + 8 +TRENNWAND + 10 +16267.274018 + 20 +7050.0 + 30 +0.0 + 0 +SEQEND + 5 +21BD + 8 +TRENNWAND + 0 +POLYLINE + 5 +19B2 + 8 +DAEMMUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21BE + 8 +DAEMMUNG + 10 +16352.274018 + 20 +6880.0 + 30 +0.0 + 0 +VERTEX + 5 +21BF + 8 +DAEMMUNG + 10 +16452.274018 + 20 +6880.0 + 30 +0.0 + 0 +VERTEX + 5 +21C0 + 8 +DAEMMUNG + 10 +16452.274018 + 20 +7330.0 + 30 +0.0 + 0 +VERTEX + 5 +21C1 + 8 +DAEMMUNG + 10 +16352.274018 + 20 +7330.0 + 30 +0.0 + 0 +SEQEND + 5 +21C2 + 8 +DAEMMUNG + 0 +POLYLINE + 5 +19B8 + 8 +DAEMMUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21C3 + 8 +DAEMMUNG + 10 +15627.274018 + 20 +6880.0 + 30 +0.0 + 0 +VERTEX + 5 +21C4 + 8 +DAEMMUNG + 10 +15727.274018 + 20 +6880.0 + 30 +0.0 + 0 +VERTEX + 5 +21C5 + 8 +DAEMMUNG + 10 +15727.274018 + 20 +7330.0 + 30 +0.0 + 0 +VERTEX + 5 +21C6 + 8 +DAEMMUNG + 10 +15627.274018 + 20 +7330.0 + 30 +0.0 + 0 +SEQEND + 5 +21C7 + 8 +DAEMMUNG + 0 +POLYLINE + 5 +19BE + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +21C8 + 8 +DRAHTANKER + 10 +15727.274018 + 20 +9630.0 + 30 +0.0 + 0 +VERTEX + 5 +21C9 + 8 +DRAHTANKER + 10 +15802.274018 + 20 +9630.0 + 30 +0.0 + 0 +SEQEND + 5 +21CA + 8 +DRAHTANKER + 0 +POLYLINE + 5 +19C2 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +21CB + 8 +DRAHTANKER + 10 +15827.274018 + 20 +9630.0 + 30 +0.0 + 0 +VERTEX + 5 +21CC + 8 +DRAHTANKER + 10 +15862.274018 + 20 +9630.0 + 30 +0.0 + 0 +SEQEND + 5 +21CD + 8 +DRAHTANKER + 0 +POLYLINE + 5 +19C6 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +21CE + 8 +DRAHTANKER + 10 +15827.274018 + 20 +9375.0 + 30 +0.0 + 0 +VERTEX + 5 +21CF + 8 +DRAHTANKER + 10 +15862.274018 + 20 +9375.0 + 30 +0.0 + 0 +SEQEND + 5 +21D0 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +19CA + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +21D1 + 8 +DRAHTANKER + 10 +15727.274018 + 20 +9375.0 + 30 +0.0 + 0 +VERTEX + 5 +21D2 + 8 +DRAHTANKER + 10 +15802.274018 + 20 +9375.0 + 30 +0.0 + 0 +SEQEND + 5 +21D3 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +19CE + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +21D4 + 8 +DRAHTANKER + 10 +15827.274018 + 20 +9120.0 + 30 +0.0 + 0 +VERTEX + 5 +21D5 + 8 +DRAHTANKER + 10 +15862.274018 + 20 +9120.0 + 30 +0.0 + 0 +SEQEND + 5 +21D6 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +19D2 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +21D7 + 8 +DRAHTANKER + 10 +15727.274018 + 20 +9120.0 + 30 +0.0 + 0 +VERTEX + 5 +21D8 + 8 +DRAHTANKER + 10 +15802.274018 + 20 +9120.0 + 30 +0.0 + 0 +SEQEND + 5 +21D9 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +19D6 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21DA + 8 +DRAHTANKER + 10 +16502.274018 + 20 +7455.0 + 30 +0.0 + 0 +VERTEX + 5 +21DB + 8 +DRAHTANKER + 10 +16502.274018 + 20 +7755.0 + 30 +0.0 + 0 +VERTEX + 5 +21DC + 8 +DRAHTANKER + 10 +16352.274018 + 20 +7855.0 + 30 +0.0 + 0 +VERTEX + 5 +21DD + 8 +DRAHTANKER + 10 +16352.274018 + 20 +7555.0 + 30 +0.0 + 0 +SEQEND + 5 +21DE + 8 +DRAHTANKER + 0 +POLYLINE + 5 +19DC + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21DF + 8 +DRAHTANKER + 10 +15577.274018 + 20 +7455.0 + 30 +0.0 + 0 +VERTEX + 5 +21E0 + 8 +DRAHTANKER + 10 +15577.274018 + 20 +7755.0 + 30 +0.0 + 0 +VERTEX + 5 +21E1 + 8 +DRAHTANKER + 10 +15727.274018 + 20 +7855.0 + 30 +0.0 + 0 +VERTEX + 5 +21E2 + 8 +DRAHTANKER + 10 +15727.274018 + 20 +7555.0 + 30 +0.0 + 0 +SEQEND + 5 +21E3 + 8 +DRAHTANKER + 0 +INSERT + 5 +19E2 + 8 +SCHRAFFUR + 2 +*X51 + 10 +727.274018 + 20 +-2105.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI33,I +1040 +2100.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +19E3 + 8 +SCHRAFFUR + 2 +*X54 + 10 +727.274018 + 20 +-2105.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +HONEY,I +1040 +150.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +19E4 + 8 +SCHRAFFUR + 2 +*X57 + 10 +727.274018 + 20 +-2105.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +HONEY,I +1040 +200.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +19E5 + 8 +SCHRAFFUR + 2 +*X67 + 10 +727.274018 + 20 +-2105.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +DASH,I +1040 +600.0 +1040 +0.785398 +1002 +} + 0 +POLYLINE + 5 +19E6 + 8 +SCHRAFFUR + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +19E7 + 8 +SCHRAFFUR + 10 +16462.274018 + 20 +7485.0 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +19E8 + 8 +SCHRAFFUR + 10 +16462.274018 + 20 +7485.0 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +19E9 + 8 +SCHRAFFUR + 10 +16462.277126 + 20 +7488.961798 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +19EA + 8 +SCHRAFFUR + 10 +16462.298881 + 20 +7493.256886 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +19EB + 8 +SCHRAFFUR + 10 +16462.357931 + 20 +7497.749801 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +19EC + 8 +SCHRAFFUR + 10 +16462.472923 + 20 +7502.305084 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +19ED + 8 +SCHRAFFUR + 10 +16462.662505 + 20 +7506.787274 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +19EE + 8 +SCHRAFFUR + 10 +16462.945324 + 20 +7511.060909 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +19EF + 8 +SCHRAFFUR + 10 +16463.340027 + 20 +7514.990529 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +19F0 + 8 +SCHRAFFUR + 10 +16463.865262 + 20 +7518.440674 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +19F1 + 8 +SCHRAFFUR + 10 +16464.539325 + 20 +7521.311501 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +19F2 + 8 +SCHRAFFUR + 10 +16465.379105 + 20 +7523.645652 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +19F3 + 8 +SCHRAFFUR + 10 +16466.401141 + 20 +7525.521386 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +19F4 + 8 +SCHRAFFUR + 10 +16467.621973 + 20 +7527.016964 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +19F5 + 8 +SCHRAFFUR + 10 +16469.058137 + 20 +7528.210645 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +19F6 + 8 +SCHRAFFUR + 10 +16470.726174 + 20 +7529.18069 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +19F7 + 8 +SCHRAFFUR + 10 +16472.642621 + 20 +7530.005359 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +19F8 + 8 +SCHRAFFUR + 10 +16474.824016 + 20 +7530.762911 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +19F9 + 8 +SCHRAFFUR + 10 +16477.28242 + 20 +7531.562481 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +19FA + 8 +SCHRAFFUR + 10 +16480.011972 + 20 +7532.636691 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +19FB + 8 +SCHRAFFUR + 10 +16483.002335 + 20 +7534.249039 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +19FC + 8 +SCHRAFFUR + 10 +16486.243169 + 20 +7536.663021 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +19FD + 8 +SCHRAFFUR + 10 +16489.724136 + 20 +7540.142135 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +19FE + 8 +SCHRAFFUR + 10 +16493.434897 + 20 +7544.949876 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +19FF + 8 +SCHRAFFUR + 10 +16497.365113 + 20 +7551.349741 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A00 + 8 +SCHRAFFUR + 10 +16501.504446 + 20 +7559.605228 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A01 + 8 +SCHRAFFUR + 10 +16462.274018 + 20 +7495.0 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A02 + 8 +SCHRAFFUR + 10 +16462.274018 + 20 +7525.0 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A03 + 8 +SCHRAFFUR + 10 +16471.821483 + 20 +7530.644041 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A04 + 8 +SCHRAFFUR + 10 +16490.196592 + 20 +7534.882215 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A05 + 8 +SCHRAFFUR + 10 +16501.504446 + 20 +7559.605228 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1A06 + 8 +SCHRAFFUR + 0 +POLYLINE + 5 +1A07 + 8 +SCHRAFFUR + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +1A08 + 8 +SCHRAFFUR + 10 +16418.816237 + 20 +7511.571982 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A09 + 8 +SCHRAFFUR + 10 +16418.816237 + 20 +7511.571982 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A0A + 8 +SCHRAFFUR + 10 +16426.410206 + 20 +7528.650092 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A0B + 8 +SCHRAFFUR + 10 +16433.7847 + 20 +7543.49941 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A0C + 8 +SCHRAFFUR + 10 +16440.885887 + 20 +7556.374477 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A0D + 8 +SCHRAFFUR + 10 +16447.659932 + 20 +7567.529834 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A0E + 8 +SCHRAFFUR + 10 +16454.053002 + 20 +7577.220024 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A0F + 8 +SCHRAFFUR + 10 +16460.011262 + 20 +7585.699586 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A10 + 8 +SCHRAFFUR + 10 +16465.480881 + 20 +7593.223064 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A11 + 8 +SCHRAFFUR + 10 +16470.408024 + 20 +7600.044997 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A12 + 8 +SCHRAFFUR + 10 +16474.776126 + 20 +7606.425446 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A13 + 8 +SCHRAFFUR + 10 +16478.717701 + 20 +7612.646547 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A14 + 8 +SCHRAFFUR + 10 +16482.40253 + 20 +7618.995953 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A15 + 8 +SCHRAFFUR + 10 +16486.000396 + 20 +7625.761318 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A16 + 8 +SCHRAFFUR + 10 +16489.68108 + 20 +7633.230297 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A17 + 8 +SCHRAFFUR + 10 +16493.614364 + 20 +7641.690543 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A18 + 8 +SCHRAFFUR + 10 +16497.970031 + 20 +7651.429711 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A19 + 8 +SCHRAFFUR + 10 +16502.917862 + 20 +7662.735455 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A1A + 8 +SCHRAFFUR + 10 +16439.311601 + 20 +7560.311591 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A1B + 8 +SCHRAFFUR + 10 +16476.768659 + 20 +7604.813025 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A1C + 8 +SCHRAFFUR + 10 +16488.783176 + 20 +7630.242346 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A1D + 8 +SCHRAFFUR + 10 +16502.917862 + 20 +7662.735455 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1A1E + 8 +SCHRAFFUR + 0 +POLYLINE + 5 +1A1F + 8 +SCHRAFFUR + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +1A20 + 8 +SCHRAFFUR + 10 +16383.479347 + 20 +7540.533224 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A21 + 8 +SCHRAFFUR + 10 +16383.479347 + 20 +7540.533224 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A22 + 8 +SCHRAFFUR + 10 +16390.766645 + 20 +7563.954186 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A23 + 8 +SCHRAFFUR + 10 +16397.783397 + 20 +7581.35099 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A24 + 8 +SCHRAFFUR + 10 +16404.524082 + 20 +7593.685928 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A25 + 8 +SCHRAFFUR + 10 +16410.983179 + 20 +7601.921293 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A26 + 8 +SCHRAFFUR + 10 +16417.155165 + 20 +7607.019377 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A27 + 8 +SCHRAFFUR + 10 +16423.034519 + 20 +7609.942473 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A28 + 8 +SCHRAFFUR + 10 +16428.615719 + 20 +7611.652874 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A29 + 8 +SCHRAFFUR + 10 +16433.893244 + 20 +7613.11287 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A2A + 8 +SCHRAFFUR + 10 +16438.868473 + 20 +7615.112992 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A2B + 8 +SCHRAFFUR + 10 +16443.570394 + 20 +7617.756711 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A2C + 8 +SCHRAFFUR + 10 +16448.034896 + 20 +7620.975736 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A2D + 8 +SCHRAFFUR + 10 +16452.297867 + 20 +7624.701775 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A2E + 8 +SCHRAFFUR + 10 +16456.395196 + 20 +7628.866536 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A2F + 8 +SCHRAFFUR + 10 +16460.362773 + 20 +7633.401728 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A30 + 8 +SCHRAFFUR + 10 +16464.236484 + 20 +7638.239059 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A31 + 8 +SCHRAFFUR + 10 +16468.052221 + 20 +7643.310237 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A32 + 8 +SCHRAFFUR + 10 +16471.850011 + 20 +7648.557664 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A33 + 8 +SCHRAFFUR + 10 +16475.686451 + 20 +7653.966508 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A34 + 8 +SCHRAFFUR + 10 +16479.622273 + 20 +7659.532629 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A35 + 8 +SCHRAFFUR + 10 +16483.718214 + 20 +7665.251891 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A36 + 8 +SCHRAFFUR + 10 +16488.035008 + 20 +7671.120153 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A37 + 8 +SCHRAFFUR + 10 +16492.633391 + 20 +7677.133277 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A38 + 8 +SCHRAFFUR + 10 +16497.574097 + 20 +7683.287124 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A39 + 8 +SCHRAFFUR + 10 +16502.917862 + 20 +7689.577555 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A3A + 8 +SCHRAFFUR + 10 +16403.26796 + 20 +7611.876704 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A3B + 8 +SCHRAFFUR + 10 +16437.191346 + 20 +7605.519388 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A3C + 8 +SCHRAFFUR + 10 +16468.287812 + 20 +7641.544309 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A3D + 8 +SCHRAFFUR + 10 +16488.076424 + 20 +7672.624638 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A3E + 8 +SCHRAFFUR + 10 +16502.917862 + 20 +7689.577555 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1A3F + 8 +SCHRAFFUR + 0 +POLYLINE + 5 +1A40 + 8 +SCHRAFFUR + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +1A41 + 8 +SCHRAFFUR + 10 +16353.796385 + 20 +7611.876704 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A42 + 8 +SCHRAFFUR + 10 +16353.796385 + 20 +7611.876704 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A43 + 8 +SCHRAFFUR + 10 +16364.119068 + 20 +7623.149898 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A44 + 8 +SCHRAFFUR + 10 +16373.4341 + 20 +7633.191084 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A45 + 8 +SCHRAFFUR + 10 +16381.860191 + 20 +7642.092697 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A46 + 8 +SCHRAFFUR + 10 +16389.516049 + 20 +7649.947172 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A47 + 8 +SCHRAFFUR + 10 +16396.520385 + 20 +7656.846943 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A48 + 8 +SCHRAFFUR + 10 +16402.991908 + 20 +7662.884445 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A49 + 8 +SCHRAFFUR + 10 +16409.049327 + 20 +7668.152112 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A4A + 8 +SCHRAFFUR + 10 +16414.811354 + 20 +7672.742379 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A4B + 8 +SCHRAFFUR + 10 +16420.378062 + 20 +7676.748371 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A4C + 8 +SCHRAFFUR + 10 +16425.774987 + 20 +7680.265971 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A4D + 8 +SCHRAFFUR + 10 +16431.009031 + 20 +7683.391755 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A4E + 8 +SCHRAFFUR + 10 +16436.087095 + 20 +7686.222298 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A4F + 8 +SCHRAFFUR + 10 +16441.016081 + 20 +7688.854172 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A50 + 8 +SCHRAFFUR + 10 +16445.80289 + 20 +7691.383953 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A51 + 8 +SCHRAFFUR + 10 +16450.454424 + 20 +7693.908216 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A52 + 8 +SCHRAFFUR + 10 +16454.977582 + 20 +7696.523534 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A53 + 8 +SCHRAFFUR + 10 +16459.409636 + 20 +7699.310617 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A54 + 8 +SCHRAFFUR + 10 +16463.909325 + 20 +7702.286709 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A55 + 8 +SCHRAFFUR + 10 +16468.665758 + 20 +7705.453192 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A56 + 8 +SCHRAFFUR + 10 +16473.868042 + 20 +7708.811444 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A57 + 8 +SCHRAFFUR + 10 +16479.705286 + 20 +7712.362846 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A58 + 8 +SCHRAFFUR + 10 +16486.366599 + 20 +7716.108778 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A59 + 8 +SCHRAFFUR + 10 +16494.041088 + 20 +7720.05062 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A5A + 8 +SCHRAFFUR + 10 +16502.917862 + 20 +7724.189751 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A5B + 8 +SCHRAFFUR + 10 +16382.772596 + 20 +7643.663396 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A5C + 8 +SCHRAFFUR + 10 +16416.695981 + 20 +7678.982009 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A5D + 8 +SCHRAFFUR + 10 +16456.273294 + 20 +7694.522147 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A5E + 8 +SCHRAFFUR + 10 +16477.475322 + 20 +7712.887788 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A5F + 8 +SCHRAFFUR + 10 +16502.917862 + 20 +7724.189751 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1A60 + 8 +SCHRAFFUR + 0 +POLYLINE + 5 +1A61 + 8 +SCHRAFFUR + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +1A62 + 8 +SCHRAFFUR + 10 +16355.209889 + 20 +7680.394734 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A63 + 8 +SCHRAFFUR + 10 +16355.209889 + 20 +7680.394734 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A64 + 8 +SCHRAFFUR + 10 +16370.368495 + 20 +7686.158137 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A65 + 8 +SCHRAFFUR + 10 +16382.328152 + 20 +7692.198847 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A66 + 8 +SCHRAFFUR + 10 +16391.699663 + 20 +7698.330615 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A67 + 8 +SCHRAFFUR + 10 +16399.09383 + 20 +7704.367189 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A68 + 8 +SCHRAFFUR + 10 +16405.121456 + 20 +7710.122319 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A69 + 8 +SCHRAFFUR + 10 +16410.393344 + 20 +7715.409755 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A6A + 8 +SCHRAFFUR + 10 +16415.520296 + 20 +7720.043246 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A6B + 8 +SCHRAFFUR + 10 +16421.113115 + 20 +7723.836542 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A6C + 8 +SCHRAFFUR + 10 +16427.643188 + 20 +7726.713763 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A6D + 8 +SCHRAFFUR + 10 +16435.024244 + 20 +7729.040512 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A6E + 8 +SCHRAFFUR + 10 +16443.030596 + 20 +7731.292761 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A6F + 8 +SCHRAFFUR + 10 +16451.436557 + 20 +7733.946485 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A70 + 8 +SCHRAFFUR + 10 +16460.01644 + 20 +7737.477655 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A71 + 8 +SCHRAFFUR + 10 +16468.544559 + 20 +7742.362247 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A72 + 8 +SCHRAFFUR + 10 +16476.795225 + 20 +7749.076232 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A73 + 8 +SCHRAFFUR + 10 +16484.542753 + 20 +7758.095585 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A74 + 8 +SCHRAFFUR + 10 +16400.44104 + 20 +7695.228509 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A75 + 8 +SCHRAFFUR + 10 +16409.628639 + 20 +7734.785297 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A76 + 8 +SCHRAFFUR + 10 +16464.754141 + 20 +7730.547067 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A77 + 8 +SCHRAFFUR + 10 +16484.542753 + 20 +7758.095585 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1A78 + 8 +SCHRAFFUR + 0 +POLYLINE + 5 +1A79 + 8 +SCHRAFFUR + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +1A7A + 8 +SCHRAFFUR + 10 +16349.555962 + 20 +7746.793622 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A7B + 8 +SCHRAFFUR + 10 +16349.555962 + 20 +7746.793622 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A7C + 8 +SCHRAFFUR + 10 +16362.461508 + 20 +7750.373419 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A7D + 8 +SCHRAFFUR + 10 +16372.828598 + 20 +7754.174648 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A7E + 8 +SCHRAFFUR + 10 +16381.067195 + 20 +7758.120739 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A7F + 8 +SCHRAFFUR + 10 +16387.58726 + 20 +7762.135122 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A80 + 8 +SCHRAFFUR + 10 +16392.798757 + 20 +7766.141228 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A81 + 8 +SCHRAFFUR + 10 +16397.111649 + 20 +7770.062486 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A82 + 8 +SCHRAFFUR + 10 +16400.935897 + 20 +7773.822326 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A83 + 8 +SCHRAFFUR + 10 +16404.681464 + 20 +7777.34418 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A84 + 8 +SCHRAFFUR + 10 +16408.664449 + 20 +7780.568031 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A85 + 8 +SCHRAFFUR + 10 +16412.825498 + 20 +7783.50009 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A86 + 8 +SCHRAFFUR + 10 +16417.011393 + 20 +7786.163121 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A87 + 8 +SCHRAFFUR + 10 +16421.068915 + 20 +7788.579887 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A88 + 8 +SCHRAFFUR + 10 +16424.844847 + 20 +7790.773153 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A89 + 8 +SCHRAFFUR + 10 +16428.185971 + 20 +7792.765683 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A8A + 8 +SCHRAFFUR + 10 +16430.939069 + 20 +7794.580242 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A8B + 8 +SCHRAFFUR + 10 +16432.950922 + 20 +7796.239593 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A8C + 8 +SCHRAFFUR + 10 +16387.719771 + 20 +7755.976443 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A8D + 8 +SCHRAFFUR + 10 +16401.147792 + 20 +7780.699456 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A8E + 8 +SCHRAFFUR + 10 +16428.710499 + 20 +7792.001364 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A8F + 8 +SCHRAFFUR + 10 +16432.950922 + 20 +7796.239593 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1A90 + 8 +SCHRAFFUR + 0 +POLYLINE + 5 +1A91 + 8 +SCHRAFFUR + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +1A92 + 8 +SCHRAFFUR + 10 +15622.997236 + 20 +7490.467393 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A93 + 8 +SCHRAFFUR + 10 +15622.997236 + 20 +7490.467393 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A94 + 8 +SCHRAFFUR + 10 +15615.341593 + 20 +7504.354359 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A95 + 8 +SCHRAFFUR + 10 +15609.54127 + 20 +7517.742398 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A96 + 8 +SCHRAFFUR + 10 +15604.98892 + 20 +7530.531721 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A97 + 8 +SCHRAFFUR + 10 +15601.077194 + 20 +7542.622542 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A98 + 8 +SCHRAFFUR + 10 +15597.198746 + 20 +7553.915072 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A99 + 8 +SCHRAFFUR + 10 +15592.746228 + 20 +7564.309522 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A9A + 8 +SCHRAFFUR + 10 +15587.112294 + 20 +7573.706106 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A9B + 8 +SCHRAFFUR + 10 +15579.689594 + 20 +7582.005035 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1A9C + 8 +SCHRAFFUR + 10 +15599.568565 + 20 +7528.075837 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A9D + 8 +SCHRAFFUR + 10 +15602.408343 + 20 +7561.426798 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1A9E + 8 +SCHRAFFUR + 10 +15579.689594 + 20 +7582.005035 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1A9F + 8 +SCHRAFFUR + 0 +POLYLINE + 5 +1AA0 + 8 +SCHRAFFUR + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +21E4 + 8 +SCHRAFFUR + 10 +15598.858555 + 20 +7476.27549 + 30 +0.0 + 0 +VERTEX + 5 +21E5 + 8 +SCHRAFFUR + 10 +15578.269661 + 20 +7482.661825 + 30 +0.0 + 0 +SEQEND + 5 +21E6 + 8 +SCHRAFFUR + 0 +POLYLINE + 5 +1AA4 + 8 +SCHRAFFUR + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +1AA5 + 8 +SCHRAFFUR + 10 +15674.824474 + 20 +7523.818299 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1AA6 + 8 +SCHRAFFUR + 10 +15674.824474 + 20 +7523.818299 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AA7 + 8 +SCHRAFFUR + 10 +15660.19296 + 20 +7537.328999 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AA8 + 8 +SCHRAFFUR + 10 +15648.492114 + 20 +7548.748336 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AA9 + 8 +SCHRAFFUR + 10 +15639.291385 + 20 +7558.313303 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AAA + 8 +SCHRAFFUR + 10 +15632.160219 + 20 +7566.260895 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AAB + 8 +SCHRAFFUR + 10 +15626.668066 + 20 +7572.828103 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AAC + 8 +SCHRAFFUR + 10 +15622.384372 + 20 +7578.251923 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AAD + 8 +SCHRAFFUR + 10 +15618.878587 + 20 +7582.769347 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AAE + 8 +SCHRAFFUR + 10 +15615.720157 + 20 +7586.617368 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AAF + 8 +SCHRAFFUR + 10 +15612.532611 + 20 +7589.973386 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AB0 + 8 +SCHRAFFUR + 10 +15609.155789 + 20 +7592.77642 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AB1 + 8 +SCHRAFFUR + 10 +15605.483614 + 20 +7594.905894 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AB2 + 8 +SCHRAFFUR + 10 +15601.410006 + 20 +7596.241233 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AB3 + 8 +SCHRAFFUR + 10 +15596.828887 + 20 +7596.661861 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AB4 + 8 +SCHRAFFUR + 10 +15591.634177 + 20 +7596.047203 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AB5 + 8 +SCHRAFFUR + 10 +15585.719798 + 20 +7594.276684 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AB6 + 8 +SCHRAFFUR + 10 +15578.979672 + 20 +7591.229728 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AB7 + 8 +SCHRAFFUR + 10 +15631.516833 + 20 +7562.845977 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1AB8 + 8 +SCHRAFFUR + 10 +15616.607582 + 20 +7591.229728 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1AB9 + 8 +SCHRAFFUR + 10 +15598.148632 + 20 +7601.164038 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1ABA + 8 +SCHRAFFUR + 10 +15578.979672 + 20 +7591.229728 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1ABB + 8 +SCHRAFFUR + 0 +POLYLINE + 5 +1ABC + 8 +SCHRAFFUR + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +1ABD + 8 +SCHRAFFUR + 10 +15706.062731 + 20 +7545.815716 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1ABE + 8 +SCHRAFFUR + 10 +15706.062731 + 20 +7545.815716 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1ABF + 8 +SCHRAFFUR + 10 +15693.916784 + 20 +7557.954466 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AC0 + 8 +SCHRAFFUR + 10 +15682.975136 + 20 +7568.883995 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AC1 + 8 +SCHRAFFUR + 10 +15673.144187 + 20 +7578.692309 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AC2 + 8 +SCHRAFFUR + 10 +15664.330341 + 20 +7587.467415 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AC3 + 8 +SCHRAFFUR + 10 +15656.439998 + 20 +7595.29732 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AC4 + 8 +SCHRAFFUR + 10 +15649.379561 + 20 +7602.270029 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AC5 + 8 +SCHRAFFUR + 10 +15643.05543 + 20 +7608.473549 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AC6 + 8 +SCHRAFFUR + 10 +15637.374008 + 20 +7613.995888 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AC7 + 8 +SCHRAFFUR + 10 +15632.244122 + 20 +7618.907379 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AC8 + 8 +SCHRAFFUR + 10 +15627.584308 + 20 +7623.207678 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AC9 + 8 +SCHRAFFUR + 10 +15623.315527 + 20 +7626.878766 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1ACA + 8 +SCHRAFFUR + 10 +15619.358741 + 20 +7629.902627 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1ACB + 8 +SCHRAFFUR + 10 +15615.63491 + 20 +7632.261243 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1ACC + 8 +SCHRAFFUR + 10 +15612.064996 + 20 +7633.936597 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1ACD + 8 +SCHRAFFUR + 10 +15608.56996 + 20 +7634.910671 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1ACE + 8 +SCHRAFFUR + 10 +15605.070764 + 20 +7635.16545 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1ACF + 8 +SCHRAFFUR + 10 +15601.515062 + 20 +7634.711672 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AD0 + 8 +SCHRAFFUR + 10 +15597.95728 + 20 +7633.675112 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AD1 + 8 +SCHRAFFUR + 10 +15594.478536 + 20 +7632.2103 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AD2 + 8 +SCHRAFFUR + 10 +15591.159948 + 20 +7630.471769 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AD3 + 8 +SCHRAFFUR + 10 +15588.082635 + 20 +7628.61405 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AD4 + 8 +SCHRAFFUR + 10 +15585.327714 + 20 +7626.791673 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AD5 + 8 +SCHRAFFUR + 10 +15582.976306 + 20 +7625.15917 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AD6 + 8 +SCHRAFFUR + 10 +15581.109527 + 20 +7623.871072 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AD7 + 8 +SCHRAFFUR + 10 +15671.984609 + 20 +7579.876239 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1AD8 + 8 +SCHRAFFUR + 10 +15631.516833 + 20 +7620.323096 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1AD9 + 8 +SCHRAFFUR + 10 +15605.958219 + 20 +7643.03013 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1ADA + 8 +SCHRAFFUR + 10 +15585.369325 + 20 +7626.709431 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1ADB + 8 +SCHRAFFUR + 10 +15581.109527 + 20 +7623.871072 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1ADC + 8 +SCHRAFFUR + 0 +POLYLINE + 5 +1ADD + 8 +SCHRAFFUR + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +1ADE + 8 +SCHRAFFUR + 10 +15725.941702 + 20 +7604.002452 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1ADF + 8 +SCHRAFFUR + 10 +15725.941702 + 20 +7604.002452 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AE0 + 8 +SCHRAFFUR + 10 +15700.682263 + 20 +7617.99683 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AE1 + 8 +SCHRAFFUR + 10 +15679.880187 + 20 +7630.207523 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AE2 + 8 +SCHRAFFUR + 10 +15662.934365 + 20 +7640.680267 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AE3 + 8 +SCHRAFFUR + 10 +15649.243686 + 20 +7649.460796 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AE4 + 8 +SCHRAFFUR + 10 +15638.207042 + 20 +7656.594848 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AE5 + 8 +SCHRAFFUR + 10 +15629.223321 + 20 +7662.128155 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AE6 + 8 +SCHRAFFUR + 10 +15621.691415 + 20 +7666.106455 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AE7 + 8 +SCHRAFFUR + 10 +15615.010213 + 20 +7668.575481 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AE8 + 8 +SCHRAFFUR + 10 +15608.690924 + 20 +7669.625319 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AE9 + 8 +SCHRAFFUR + 10 +15602.694029 + 20 +7669.523454 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AEA + 8 +SCHRAFFUR + 10 +15597.092329 + 20 +7668.581717 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AEB + 8 +SCHRAFFUR + 10 +15591.958622 + 20 +7667.111942 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AEC + 8 +SCHRAFFUR + 10 +15587.36571 + 20 +7665.425963 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AED + 8 +SCHRAFFUR + 10 +15583.386393 + 20 +7663.835613 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AEE + 8 +SCHRAFFUR + 10 +15580.093469 + 20 +7662.652725 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AEF + 8 +SCHRAFFUR + 10 +15577.559739 + 20 +7662.189133 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AF0 + 8 +SCHRAFFUR + 10 +15652.105726 + 20 +7643.739692 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1AF1 + 8 +SCHRAFFUR + 10 +15612.347872 + 20 +7684.186549 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1AF2 + 8 +SCHRAFFUR + 10 +15583.239382 + 20 +7662.189133 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1AF3 + 8 +SCHRAFFUR + 10 +15577.559739 + 20 +7662.189133 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1AF4 + 8 +SCHRAFFUR + 0 +POLYLINE + 5 +1AF5 + 8 +SCHRAFFUR + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +1AF6 + 8 +SCHRAFFUR + 10 +15727.361635 + 20 +7665.027547 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1AF7 + 8 +SCHRAFFUR + 10 +15727.361635 + 20 +7665.027547 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AF8 + 8 +SCHRAFFUR + 10 +15710.775638 + 20 +7675.986743 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AF9 + 8 +SCHRAFFUR + 10 +15696.508804 + 20 +7684.580167 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AFA + 8 +SCHRAFFUR + 10 +15684.284496 + 20 +7691.103021 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AFB + 8 +SCHRAFFUR + 10 +15673.82608 + 20 +7695.850507 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AFC + 8 +SCHRAFFUR + 10 +15664.856919 + 20 +7699.117825 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AFD + 8 +SCHRAFFUR + 10 +15657.100379 + 20 +7701.200179 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AFE + 8 +SCHRAFFUR + 10 +15650.279822 + 20 +7702.392769 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1AFF + 8 +SCHRAFFUR + 10 +15644.118615 + 20 +7702.990799 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B00 + 8 +SCHRAFFUR + 10 +15638.329028 + 20 +7703.227102 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B01 + 8 +SCHRAFFUR + 10 +15632.57896 + 20 +7703.085048 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B02 + 8 +SCHRAFFUR + 10 +15626.525217 + 20 +7702.485638 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B03 + 8 +SCHRAFFUR + 10 +15619.824605 + 20 +7701.349875 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B04 + 8 +SCHRAFFUR + 10 +15612.133931 + 20 +7699.598759 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B05 + 8 +SCHRAFFUR + 10 +15603.110001 + 20 +7697.153294 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B06 + 8 +SCHRAFFUR + 10 +15592.40962 + 20 +7693.934481 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B07 + 8 +SCHRAFFUR + 10 +15579.689594 + 20 +7689.863322 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B08 + 8 +SCHRAFFUR + 10 +15679.794195 + 20 +7697.668835 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B09 + 8 +SCHRAFFUR + 10 +15640.036341 + 20 +7706.183966 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B0A + 8 +SCHRAFFUR + 10 +15616.607582 + 20 +7701.926428 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B0B + 8 +SCHRAFFUR + 10 +15579.689594 + 20 +7689.863322 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1B0C + 8 +SCHRAFFUR + 0 +POLYLINE + 5 +1B0D + 8 +SCHRAFFUR + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +1B0E + 8 +SCHRAFFUR + 10 +15725.941702 + 20 +7707.6032 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B0F + 8 +SCHRAFFUR + 10 +15725.941702 + 20 +7707.6032 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B10 + 8 +SCHRAFFUR + 10 +15703.36193 + 20 +7712.899503 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B11 + 8 +SCHRAFFUR + 10 +15683.879232 + 20 +7717.177156 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B12 + 8 +SCHRAFFUR + 10 +15667.196172 + 20 +7720.581679 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B13 + 8 +SCHRAFFUR + 10 +15653.015314 + 20 +7723.258594 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B14 + 8 +SCHRAFFUR + 10 +15641.039221 + 20 +7725.353423 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B15 + 8 +SCHRAFFUR + 10 +15630.970458 + 20 +7727.011686 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B16 + 8 +SCHRAFFUR + 10 +15622.511588 + 20 +7728.378906 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B17 + 8 +SCHRAFFUR + 10 +15615.365174 + 20 +7729.600603 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B18 + 8 +SCHRAFFUR + 10 +15609.254582 + 20 +7730.804282 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B19 + 8 +SCHRAFFUR + 10 +15603.986374 + 20 +7732.04538 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B1A + 8 +SCHRAFFUR + 10 +15599.387916 + 20 +7733.361316 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B1B + 8 +SCHRAFFUR + 10 +15595.286571 + 20 +7734.789512 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B1C + 8 +SCHRAFFUR + 10 +15591.509703 + 20 +7736.367386 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B1D + 8 +SCHRAFFUR + 10 +15587.884676 + 20 +7738.13236 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B1E + 8 +SCHRAFFUR + 10 +15584.238856 + 20 +7740.121853 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B1F + 8 +SCHRAFFUR + 10 +15580.399605 + 20 +7742.373286 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B20 + 8 +SCHRAFFUR + 10 +15661.335157 + 20 +7723.214228 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B21 + 8 +SCHRAFFUR + 10 +15604.538286 + 20 +7729.600617 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B22 + 8 +SCHRAFFUR + 10 +15591.048968 + 20 +7735.986951 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B23 + 8 +SCHRAFFUR + 10 +15580.399605 + 20 +7742.373286 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1B24 + 8 +SCHRAFFUR + 0 +POLYLINE + 5 +1B25 + 8 +SCHRAFFUR + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +1B26 + 8 +SCHRAFFUR + 10 +15727.361635 + 20 +7735.277334 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B27 + 8 +SCHRAFFUR + 10 +15727.361635 + 20 +7735.277334 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B28 + 8 +SCHRAFFUR + 10 +15712.586592 + 20 +7738.939295 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B29 + 8 +SCHRAFFUR + 10 +15700.014234 + 20 +7742.486917 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B2A + 8 +SCHRAFFUR + 10 +15689.351287 + 20 +7745.938911 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B2B + 8 +SCHRAFFUR + 10 +15680.304474 + 20 +7749.313988 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B2C + 8 +SCHRAFFUR + 10 +15672.58052 + 20 +7752.630856 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B2D + 8 +SCHRAFFUR + 10 +15665.886151 + 20 +7755.908225 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B2E + 8 +SCHRAFFUR + 10 +15659.92809 + 20 +7759.164807 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B2F + 8 +SCHRAFFUR + 10 +15654.413062 + 20 +7762.41931 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B30 + 8 +SCHRAFFUR + 10 +15649.11019 + 20 +7765.672428 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B31 + 8 +SCHRAFFUR + 10 +15644.038194 + 20 +7768.852784 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B32 + 8 +SCHRAFFUR + 10 +15639.278192 + 20 +7771.870988 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B33 + 8 +SCHRAFFUR + 10 +15634.911303 + 20 +7774.637645 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B34 + 8 +SCHRAFFUR + 10 +15631.018644 + 20 +7777.063364 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B35 + 8 +SCHRAFFUR + 10 +15627.681335 + 20 +7779.058752 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B36 + 8 +SCHRAFFUR + 10 +15624.980493 + 20 +7780.534416 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B37 + 8 +SCHRAFFUR + 10 +15622.997236 + 20 +7781.400964 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B38 + 8 +SCHRAFFUR + 10 +15684.763916 + 20 +7745.211644 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B39 + 8 +SCHRAFFUR + 10 +15652.815648 + 20 +7762.241906 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B3A + 8 +SCHRAFFUR + 10 +15627.257034 + 20 +7779.981784 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B3B + 8 +SCHRAFFUR + 10 +15622.997236 + 20 +7781.400964 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1B3C + 8 +SCHRAFFUR + 0 +POLYLINE + 5 +1B3D + 8 +SCHRAFFUR + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +1B3E + 8 +SCHRAFFUR + 10 +15729.49149 + 20 +7773.59545 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B3F + 8 +SCHRAFFUR + 10 +15729.49149 + 20 +7773.59545 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B40 + 8 +SCHRAFFUR + 10 +15721.385872 + 20 +7775.409972 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B41 + 8 +SCHRAFFUR + 10 +15714.033198 + 20 +7777.135101 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B42 + 8 +SCHRAFFUR + 10 +15707.321153 + 20 +7778.781232 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B43 + 8 +SCHRAFFUR + 10 +15701.137417 + 20 +7780.35876 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B44 + 8 +SCHRAFFUR + 10 +15695.369672 + 20 +7781.878079 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B45 + 8 +SCHRAFFUR + 10 +15689.905602 + 20 +7783.349583 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B46 + 8 +SCHRAFFUR + 10 +15684.632888 + 20 +7784.783668 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B47 + 8 +SCHRAFFUR + 10 +15679.439212 + 20 +7786.190728 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B48 + 8 +SCHRAFFUR + 10 +15674.251082 + 20 +7787.582544 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B49 + 8 +SCHRAFFUR + 10 +15669.150311 + 20 +7788.976439 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B4A + 8 +SCHRAFFUR + 10 +15664.257535 + 20 +7790.391123 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B4B + 8 +SCHRAFFUR + 10 +15659.693393 + 20 +7791.845306 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B4C + 8 +SCHRAFFUR + 10 +15655.578522 + 20 +7793.357698 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B4D + 8 +SCHRAFFUR + 10 +15652.033561 + 20 +7794.947009 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B4E + 8 +SCHRAFFUR + 10 +15649.179147 + 20 +7796.631948 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B4F + 8 +SCHRAFFUR + 10 +15647.135917 + 20 +7798.431225 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B50 + 8 +SCHRAFFUR + 10 +15706.772742 + 20 +7778.562605 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B51 + 8 +SCHRAFFUR + 10 +15679.794195 + 20 +7786.368119 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B52 + 8 +SCHRAFFUR + 10 +15651.395716 + 20 +7793.46407 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B53 + 8 +SCHRAFFUR + 10 +15647.135917 + 20 +7798.431225 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1B54 + 8 +SCHRAFFUR + 0 +POLYLINE + 5 +1B55 + 8 +SCHRAFFUR + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +1B56 + 8 +SCHRAFFUR + 10 +15725.941702 + 20 +7806.236739 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B57 + 8 +SCHRAFFUR + 10 +15725.941702 + 20 +7806.236739 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B58 + 8 +SCHRAFFUR + 10 +15717.492883 + 20 +7810.466595 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B59 + 8 +SCHRAFFUR + 10 +15711.06579 + 20 +7813.731844 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B5A + 8 +SCHRAFFUR + 10 +15706.28603 + 20 +7816.265322 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B5B + 8 +SCHRAFFUR + 10 +15702.779208 + 20 +7818.299866 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B5C + 8 +SCHRAFFUR + 10 +15700.170932 + 20 +7820.068311 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B5D + 8 +SCHRAFFUR + 10 +15698.086807 + 20 +7821.803493 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B5E + 8 +SCHRAFFUR + 10 +15696.152439 + 20 +7823.738249 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B5F + 8 +SCHRAFFUR + 10 +15693.993435 + 20 +7826.105414 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1B60 + 8 +SCHRAFFUR + 10 +15700.383088 + 20 +7819.009462 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1B61 + 8 +SCHRAFFUR + 10 +15693.993435 + 20 +7826.105414 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1B62 + 8 +SCHRAFFUR + 0 +INSERT + 5 +1B63 + 8 +SCHRAFFUR + 2 +*X69 + 10 +727.274018 + 20 +-2105.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI33,I +1040 +2100.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +1B64 + 8 +SCHRAFFUR + 2 +*X71 + 10 +727.274018 + 20 +-2105.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +AR-SAND,I +1040 +40.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +1B65 + 8 +SCHRAFFUR + 2 +*X72 + 10 +727.274018 + 20 +-2105.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +AR-SAND,I +1040 +40.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +1B66 + 8 +SCHRAFFUR + 2 +*X73 + 10 +727.274018 + 20 +-2105.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +AR-SAND,I +1040 +40.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +1B67 + 8 +SCHRAFFUR + 2 +*X74 + 10 +727.274018 + 20 +-2105.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +AR-SAND,I +1040 +40.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +1B68 + 8 +SCHRAFFUR + 2 +*X77 + 10 +727.274018 + 20 +-2105.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +HONEY,I +1040 +500.0 +1040 +0.0 +1002 +} + 0 +LINE + 5 +1B69 + 8 +0 + 62 + 0 + 10 +15651.059073 + 20 +10235.245158 + 30 +0.0 + 11 +15651.059073 + 21 +10235.245158 + 31 +0.0 + 0 +LINE + 5 +1B6A + 8 +0 + 62 + 0 + 10 +15608.708252 + 20 +10262.003038 + 30 +0.0 + 11 +15608.708252 + 21 +10262.003038 + 31 +0.0 + 0 +LINE + 5 +1B6B + 8 +0 + 62 + 0 + 10 +15649.169272 + 20 +10293.049871 + 30 +0.0 + 11 +15649.169272 + 21 +10293.049871 + 31 +0.0 + 0 +LINE + 5 +1B6C + 8 +0 + 62 + 0 + 10 +15531.965563 + 20 +10262.371111 + 30 +0.0 + 11 +15531.965563 + 21 +10262.371111 + 31 +0.0 + 0 +LINE + 5 +1B6D + 8 +0 + 62 + 0 + 10 +15570.641538 + 20 +10292.04823 + 30 +0.0 + 11 +15570.641538 + 21 +10292.04823 + 31 +0.0 + 0 +LINE + 5 +1B6E + 8 +0 + 62 + 0 + 10 +15453.43783 + 20 +10261.36947 + 30 +0.0 + 11 +15453.43783 + 21 +10261.36947 + 31 +0.0 + 0 +LINE + 5 +1B6F + 8 +0 + 62 + 0 + 10 +15489.614742 + 20 +10289.128991 + 30 +0.0 + 11 +15489.614742 + 21 +10289.128991 + 31 +0.0 + 0 +LINE + 5 +1B70 + 8 +0 + 62 + 0 + 10 +15372.411033 + 20 +10258.45023 + 30 +0.0 + 11 +15372.411033 + 21 +10258.45023 + 31 +0.0 + 0 +LINE + 5 +1B71 + 8 +0 + 62 + 0 + 10 +15412.872054 + 20 +10289.497063 + 30 +0.0 + 11 +15412.872054 + 21 +10289.497063 + 31 +0.0 + 0 +LINE + 5 +1B72 + 8 +0 + 62 + 0 + 10 +15295.668345 + 20 +10258.818302 + 30 +0.0 + 11 +15295.668345 + 21 +10258.818302 + 31 +0.0 + 0 +LINE + 5 +1B73 + 8 +0 + 62 + 0 + 10 +15334.34432 + 20 +10288.495422 + 30 +0.0 + 11 +15334.34432 + 21 +10288.495422 + 31 +0.0 + 0 +LINE + 5 +1B74 + 8 +0 + 62 + 0 + 10 +15217.140611 + 20 +10257.816661 + 30 +0.0 + 11 +15217.140611 + 21 +10257.816661 + 31 +0.0 + 0 +LINE + 5 +1B75 + 8 +0 + 62 + 0 + 10 +15253.317524 + 20 +10285.576183 + 30 +0.0 + 11 +15253.317524 + 21 +10285.576183 + 31 +0.0 + 0 +LINE + 5 +1B76 + 8 +0 + 62 + 0 + 10 +15136.113815 + 20 +10254.897422 + 30 +0.0 + 11 +15136.113815 + 21 +10254.897422 + 31 +0.0 + 0 +LINE + 5 +1B77 + 8 +0 + 62 + 0 + 10 +15176.574835 + 20 +10285.944255 + 30 +0.0 + 11 +15176.574835 + 21 +10285.944255 + 31 +0.0 + 0 +LINE + 5 +1B78 + 8 +0 + 62 + 0 + 10 +15059.371127 + 20 +10255.265494 + 30 +0.0 + 11 +15059.371127 + 21 +10255.265494 + 31 +0.0 + 0 +LINE + 5 +1B79 + 8 +0 + 62 + 0 + 10 +15098.047102 + 20 +10284.942614 + 30 +0.0 + 11 +15098.047102 + 21 +10284.942614 + 31 +0.0 + 0 +LINE + 5 +1B7A + 8 +0 + 62 + 0 + 10 +14980.843393 + 20 +10254.263853 + 30 +0.0 + 11 +14980.843393 + 21 +10254.263853 + 31 +0.0 + 0 +LINE + 5 +1B7B + 8 +0 + 62 + 0 + 10 +15017.020306 + 20 +10282.023374 + 30 +0.0 + 11 +15017.020306 + 21 +10282.023374 + 31 +0.0 + 0 +LINE + 5 +1B7C + 8 +0 + 62 + 0 + 10 +14899.816597 + 20 +10251.344614 + 30 +0.0 + 11 +14899.816597 + 21 +10251.344614 + 31 +0.0 + 0 +LINE + 5 +1B7D + 8 +0 + 62 + 0 + 10 +14940.277617 + 20 +10282.391447 + 30 +0.0 + 11 +14940.277617 + 21 +10282.391447 + 31 +0.0 + 0 +LINE + 5 +1B7E + 8 +0 + 62 + 0 + 10 +14823.073908 + 20 +10251.712686 + 30 +0.0 + 11 +14823.073908 + 21 +10251.712686 + 31 +0.0 + 0 +LINE + 5 +1B7F + 8 +0 + 62 + 0 + 10 +14861.749884 + 20 +10281.389806 + 30 +0.0 + 11 +14861.749884 + 21 +10281.389806 + 31 +0.0 + 0 +LINE + 5 +1B80 + 8 +0 + 62 + 0 + 10 +14897.926796 + 20 +10309.149327 + 30 +0.0 + 11 +14897.926796 + 21 +10309.149327 + 31 +0.0 + 0 +LINE + 5 +1B81 + 8 +0 + 62 + 0 + 10 +14744.546175 + 20 +10250.711045 + 30 +0.0 + 11 +14744.546175 + 21 +10250.711045 + 31 +0.0 + 0 +LINE + 5 +1B82 + 8 +0 + 62 + 0 + 10 +14780.723087 + 20 +10278.470566 + 30 +0.0 + 11 +14780.723087 + 21 +10278.470566 + 31 +0.0 + 0 +LINE + 5 +1B83 + 8 +0 + 62 + 0 + 10 +14821.184108 + 20 +10309.517399 + 30 +0.0 + 11 +14821.184108 + 21 +10309.517399 + 31 +0.0 + 0 +LINE + 5 +1B84 + 8 +0 + 62 + 0 + 10 +14703.980399 + 20 +10278.838638 + 30 +0.0 + 11 +14703.980399 + 21 +10278.838638 + 31 +0.0 + 0 +LINE + 5 +1B85 + 8 +0 + 62 + 0 + 10 +14742.656374 + 20 +10308.515758 + 30 +0.0 + 11 +14742.656374 + 21 +10308.515758 + 31 +0.0 + 0 +LINE + 5 +1B86 + 8 +0 + 62 + 0 + 10 +16434.803615 + 20 +10303.340224 + 30 +0.0 + 11 +16434.803615 + 21 +10303.340224 + 31 +0.0 + 0 +LINE + 5 +1B87 + 8 +0 + 62 + 0 + 10 +16436.693416 + 20 +10245.535511 + 30 +0.0 + 11 +16436.693416 + 21 +10245.535511 + 31 +0.0 + 0 +LINE + 5 +1B88 + 8 +0 + 62 + 0 + 10 +16477.154436 + 20 +10276.582343 + 30 +0.0 + 11 +16477.154436 + 21 +10276.582343 + 31 +0.0 + 0 +LINE + 5 +1B89 + 8 +0 + 62 + 0 + 10 +16515.830411 + 20 +10306.259463 + 30 +0.0 + 11 +16515.830411 + 21 +10306.259463 + 31 +0.0 + 0 +LINE + 5 +1B8A + 8 +0 + 62 + 0 + 10 +16517.720212 + 20 +10248.45475 + 30 +0.0 + 11 +16517.720212 + 21 +10248.45475 + 31 +0.0 + 0 +LINE + 5 +1B8B + 8 +0 + 62 + 0 + 10 +16553.897125 + 20 +10276.214271 + 30 +0.0 + 11 +16553.897125 + 21 +10276.214271 + 31 +0.0 + 0 +LINE + 5 +1B8C + 8 +0 + 62 + 0 + 10 +16594.358145 + 20 +10307.261104 + 30 +0.0 + 11 +16594.358145 + 21 +10307.261104 + 31 +0.0 + 0 +LINE + 5 +1B8D + 8 +0 + 62 + 0 + 10 +16596.247946 + 20 +10249.456391 + 30 +0.0 + 11 +16596.247946 + 21 +10249.456391 + 31 +0.0 + 0 +LINE + 5 +1B8E + 8 +0 + 62 + 0 + 10 +16634.923921 + 20 +10279.133511 + 30 +0.0 + 11 +16634.923921 + 21 +10279.133511 + 31 +0.0 + 0 +LINE + 5 +1B8F + 8 +0 + 62 + 0 + 10 +16671.100833 + 20 +10306.893032 + 30 +0.0 + 11 +16671.100833 + 21 +10306.893032 + 31 +0.0 + 0 +LINE + 5 +1B90 + 8 +0 + 62 + 0 + 10 +16672.990634 + 20 +10249.088319 + 30 +0.0 + 11 +16672.990634 + 21 +10249.088319 + 31 +0.0 + 0 +LINE + 5 +1B91 + 8 +0 + 62 + 0 + 10 +16713.451654 + 20 +10280.135152 + 30 +0.0 + 11 +16713.451654 + 21 +10280.135152 + 31 +0.0 + 0 +LINE + 5 +1B92 + 8 +0 + 62 + 0 + 10 +16752.12763 + 20 +10309.812271 + 30 +0.0 + 11 +16752.12763 + 21 +10309.812271 + 31 +0.0 + 0 +LINE + 5 +1B93 + 8 +0 + 62 + 0 + 10 +16754.01743 + 20 +10252.007558 + 30 +0.0 + 11 +16754.01743 + 21 +10252.007558 + 31 +0.0 + 0 +LINE + 5 +1B94 + 8 +0 + 62 + 0 + 10 +16790.194343 + 20 +10279.767079 + 30 +0.0 + 11 +16790.194343 + 21 +10279.767079 + 31 +0.0 + 0 +LINE + 5 +1B95 + 8 +0 + 62 + 0 + 10 +16832.545164 + 20 +10253.009199 + 30 +0.0 + 11 +16832.545164 + 21 +10253.009199 + 31 +0.0 + 0 +LINE + 5 +1B96 + 8 +0 + 62 + 0 + 10 +16871.221139 + 20 +10282.686319 + 30 +0.0 + 11 +16871.221139 + 21 +10282.686319 + 31 +0.0 + 0 +LINE + 5 +1B97 + 8 +0 + 62 + 0 + 10 +16909.287852 + 20 +10252.641127 + 30 +0.0 + 11 +16909.287852 + 21 +10252.641127 + 31 +0.0 + 0 +LINE + 5 +1B98 + 8 +0 + 62 + 0 + 10 +16949.748873 + 20 +10283.68796 + 30 +0.0 + 11 +16949.748873 + 21 +10283.68796 + 31 +0.0 + 0 +LINE + 5 +1B99 + 8 +0 + 62 + 0 + 10 +16990.314649 + 20 +10255.560366 + 30 +0.0 + 11 +16990.314649 + 21 +10255.560366 + 31 +0.0 + 0 +LINE + 5 +1B9A + 8 +0 + 62 + 0 + 10 +17026.491561 + 20 +10283.319888 + 30 +0.0 + 11 +17026.491561 + 21 +10283.319888 + 31 +0.0 + 0 +LINE + 5 +1B9B + 8 +0 + 62 + 0 + 10 +17068.842382 + 20 +10256.562007 + 30 +0.0 + 11 +17068.842382 + 21 +10256.562007 + 31 +0.0 + 0 +LINE + 5 +1B9C + 8 +0 + 62 + 0 + 10 +17107.518357 + 20 +10286.239127 + 30 +0.0 + 11 +17107.518357 + 21 +10286.239127 + 31 +0.0 + 0 +LINE + 5 +1B9D + 8 +0 + 62 + 0 + 10 +17145.585071 + 20 +10256.193935 + 30 +0.0 + 11 +17145.585071 + 21 +10256.193935 + 31 +0.0 + 0 +LINE + 5 +1B9E + 8 +0 + 62 + 0 + 10 +17186.046091 + 20 +10287.240768 + 30 +0.0 + 11 +17186.046091 + 21 +10287.240768 + 31 +0.0 + 0 +LINE + 5 +1B9F + 8 +0 + 62 + 0 + 10 +17226.611867 + 20 +10259.113175 + 30 +0.0 + 11 +17226.611867 + 21 +10259.113175 + 31 +0.0 + 0 +LINE + 5 +1BA0 + 8 +0 + 62 + 0 + 10 +17262.788779 + 20 +10286.872696 + 30 +0.0 + 11 +17262.788779 + 21 +10286.872696 + 31 +0.0 + 0 +LINE + 5 +1BA1 + 8 +0 + 62 + 0 + 10 +16429.273755 + 20 +10292.918144 + 30 +0.0 + 11 +16429.273755 + 21 +10292.918144 + 31 +0.0 + 0 +LINE + 5 +1BA2 + 8 +0 + 62 + 0 + 10 +16453.663299 + 20 +10296.129089 + 30 +0.0 + 11 +16453.663299 + 21 +10296.129089 + 31 +0.0 + 0 +LINE + 5 +1BA3 + 8 +0 + 62 + 0 + 10 +16494.411683 + 20 +10301.493715 + 30 +0.0 + 11 +16494.411683 + 21 +10301.493715 + 31 +0.0 + 0 +LINE + 5 +1BA4 + 8 +0 + 62 + 0 + 10 +16510.026939 + 20 +10303.549503 + 30 +0.0 + 11 +16510.026939 + 21 +10303.549503 + 31 +0.0 + 0 +LINE + 5 +1BA5 + 8 +0 + 62 + 0 + 10 +16534.416483 + 20 +10306.760447 + 30 +0.0 + 11 +16534.416483 + 21 +10306.760447 + 31 +0.0 + 0 +LINE + 5 +1BA6 + 8 +0 + 62 + 0 + 10 +15416.960408 + 20 +10237.31908 + 30 +0.0 + 11 +15416.960408 + 21 +10237.31908 + 31 +0.0 + 0 +LINE + 5 +1BA7 + 8 +0 + 62 + 0 + 10 +15432.575665 + 20 +10239.374868 + 30 +0.0 + 11 +15432.575665 + 21 +10239.374868 + 31 +0.0 + 0 +LINE + 5 +1BA8 + 8 +0 + 62 + 0 + 10 +15456.965209 + 20 +10242.585812 + 30 +0.0 + 11 +15456.965209 + 21 +10242.585812 + 31 +0.0 + 0 +LINE + 5 +1BA9 + 8 +0 + 62 + 0 + 10 +15497.713592 + 20 +10247.950439 + 30 +0.0 + 11 +15497.713592 + 21 +10247.950439 + 31 +0.0 + 0 +LINE + 5 +1BAA + 8 +0 + 62 + 0 + 10 +15513.328849 + 20 +10250.006226 + 30 +0.0 + 11 +15513.328849 + 21 +10250.006226 + 31 +0.0 + 0 +LINE + 5 +1BAB + 8 +0 + 62 + 0 + 10 +15537.718392 + 20 +10253.21717 + 30 +0.0 + 11 +15537.718392 + 21 +10253.21717 + 31 +0.0 + 0 +LINE + 5 +1BAC + 8 +0 + 62 + 0 + 10 +15578.466776 + 20 +10258.581797 + 30 +0.0 + 11 +15578.466776 + 21 +10258.581797 + 31 +0.0 + 0 +LINE + 5 +1BAD + 8 +0 + 62 + 0 + 10 +15594.082033 + 20 +10260.637584 + 30 +0.0 + 11 +15594.082033 + 21 +10260.637584 + 31 +0.0 + 0 +LINE + 5 +1BAE + 8 +0 + 62 + 0 + 10 +15618.471576 + 20 +10263.848529 + 30 +0.0 + 11 +15618.471576 + 21 +10263.848529 + 31 +0.0 + 0 +LINE + 5 +1BAF + 8 +0 + 62 + 0 + 10 +14824.028238 + 20 +10236.932595 + 30 +0.0 + 11 +14824.028238 + 21 +10236.932595 + 31 +0.0 + 0 +LINE + 5 +1BB0 + 8 +0 + 62 + 0 + 10 +14839.643494 + 20 +10238.988383 + 30 +0.0 + 11 +14839.643494 + 21 +10238.988383 + 31 +0.0 + 0 +LINE + 5 +1BB1 + 8 +0 + 62 + 0 + 10 +14864.033038 + 20 +10242.199327 + 30 +0.0 + 11 +14864.033038 + 21 +10242.199327 + 31 +0.0 + 0 +LINE + 5 +1BB2 + 8 +0 + 62 + 0 + 10 +14904.781422 + 20 +10247.563954 + 30 +0.0 + 11 +14904.781422 + 21 +10247.563954 + 31 +0.0 + 0 +LINE + 5 +1BB3 + 8 +0 + 62 + 0 + 10 +14920.396678 + 20 +10249.619741 + 30 +0.0 + 11 +14920.396678 + 21 +10249.619741 + 31 +0.0 + 0 +LINE + 5 +1BB4 + 8 +0 + 62 + 0 + 10 +14944.786222 + 20 +10252.830686 + 30 +0.0 + 11 +14944.786222 + 21 +10252.830686 + 31 +0.0 + 0 +LINE + 5 +1BB5 + 8 +0 + 62 + 0 + 10 +14985.534606 + 20 +10258.195312 + 30 +0.0 + 11 +14985.534606 + 21 +10258.195312 + 31 +0.0 + 0 +LINE + 5 +1BB6 + 8 +0 + 62 + 0 + 10 +15001.149862 + 20 +10260.2511 + 30 +0.0 + 11 +15001.149862 + 21 +10260.2511 + 31 +0.0 + 0 +LINE + 5 +1BB7 + 8 +0 + 62 + 0 + 10 +15025.539406 + 20 +10263.462044 + 30 +0.0 + 11 +15025.539406 + 21 +10263.462044 + 31 +0.0 + 0 +LINE + 5 +1BB8 + 8 +0 + 62 + 0 + 10 +15066.28779 + 20 +10268.82667 + 30 +0.0 + 11 +15066.28779 + 21 +10268.82667 + 31 +0.0 + 0 +LINE + 5 +1BB9 + 8 +0 + 62 + 0 + 10 +15081.903046 + 20 +10270.882458 + 30 +0.0 + 11 +15081.903046 + 21 +10270.882458 + 31 +0.0 + 0 +LINE + 5 +1BBA + 8 +0 + 62 + 0 + 10 +15106.29259 + 20 +10274.093402 + 30 +0.0 + 11 +15106.29259 + 21 +10274.093402 + 31 +0.0 + 0 +LINE + 5 +1BBB + 8 +0 + 62 + 0 + 10 +15147.040974 + 20 +10279.458029 + 30 +0.0 + 11 +15147.040974 + 21 +10279.458029 + 31 +0.0 + 0 +LINE + 5 +1BBC + 8 +0 + 62 + 0 + 10 +15162.65623 + 20 +10281.513816 + 30 +0.0 + 11 +15162.65623 + 21 +10281.513816 + 31 +0.0 + 0 +LINE + 5 +1BBD + 8 +0 + 62 + 0 + 10 +15187.045774 + 20 +10284.724761 + 30 +0.0 + 11 +15187.045774 + 21 +10284.724761 + 31 +0.0 + 0 +LINE + 5 +1BBE + 8 +0 + 62 + 0 + 10 +15227.794158 + 20 +10290.089387 + 30 +0.0 + 11 +15227.794158 + 21 +10290.089387 + 31 +0.0 + 0 +LINE + 5 +1BBF + 8 +0 + 62 + 0 + 10 +15243.409414 + 20 +10292.145175 + 30 +0.0 + 11 +15243.409414 + 21 +10292.145175 + 31 +0.0 + 0 +LINE + 5 +1BC0 + 8 +0 + 62 + 0 + 10 +15267.798958 + 20 +10295.356119 + 30 +0.0 + 11 +15267.798958 + 21 +10295.356119 + 31 +0.0 + 0 +LINE + 5 +1BC1 + 8 +0 + 62 + 0 + 10 +15308.547342 + 20 +10300.720745 + 30 +0.0 + 11 +15308.547342 + 21 +10300.720745 + 31 +0.0 + 0 +LINE + 5 +1BC2 + 8 +0 + 62 + 0 + 10 +15324.162598 + 20 +10302.776533 + 30 +0.0 + 11 +15324.162598 + 21 +10302.776533 + 31 +0.0 + 0 +LINE + 5 +1BC3 + 8 +0 + 62 + 0 + 10 +15348.552142 + 20 +10305.987477 + 30 +0.0 + 11 +15348.552142 + 21 +10305.987477 + 31 +0.0 + 0 +LINE + 5 +1BC4 + 8 +0 + 62 + 0 + 10 +14715.615171 + 20 +10300.334261 + 30 +0.0 + 11 +14715.615171 + 21 +10300.334261 + 31 +0.0 + 0 +LINE + 5 +1BC5 + 8 +0 + 62 + 0 + 10 +14731.230428 + 20 +10302.390048 + 30 +0.0 + 11 +14731.230428 + 21 +10302.390048 + 31 +0.0 + 0 +LINE + 5 +1BC6 + 8 +0 + 62 + 0 + 10 +14755.619971 + 20 +10305.600992 + 30 +0.0 + 11 +14755.619971 + 21 +10305.600992 + 31 +0.0 + 0 +LINE + 5 +1BC7 + 8 +0 + 62 + 0 + 10 +16602.824749 + 20 +10238.09205 + 30 +0.0 + 11 +16602.824749 + 21 +10238.09205 + 31 +0.0 + 0 +LINE + 5 +1BC8 + 8 +0 + 62 + 0 + 10 +16618.440006 + 20 +10240.147838 + 30 +0.0 + 11 +16618.440006 + 21 +10240.147838 + 31 +0.0 + 0 +LINE + 5 +1BC9 + 8 +0 + 62 + 0 + 10 +16642.82955 + 20 +10243.358782 + 30 +0.0 + 11 +16642.82955 + 21 +10243.358782 + 31 +0.0 + 0 +LINE + 5 +1BCA + 8 +0 + 62 + 0 + 10 +16683.577933 + 20 +10248.723408 + 30 +0.0 + 11 +16683.577933 + 21 +10248.723408 + 31 +0.0 + 0 +LINE + 5 +1BCB + 8 +0 + 62 + 0 + 10 +16699.19319 + 20 +10250.779196 + 30 +0.0 + 11 +16699.19319 + 21 +10250.779196 + 31 +0.0 + 0 +LINE + 5 +1BCC + 8 +0 + 62 + 0 + 10 +16723.582734 + 20 +10253.99014 + 30 +0.0 + 11 +16723.582734 + 21 +10253.99014 + 31 +0.0 + 0 +LINE + 5 +1BCD + 8 +0 + 62 + 0 + 10 +16764.331117 + 20 +10259.354767 + 30 +0.0 + 11 +16764.331117 + 21 +10259.354767 + 31 +0.0 + 0 +LINE + 5 +1BCE + 8 +0 + 62 + 0 + 10 +16779.946374 + 20 +10261.410554 + 30 +0.0 + 11 +16779.946374 + 21 +10261.410554 + 31 +0.0 + 0 +LINE + 5 +1BCF + 8 +0 + 62 + 0 + 10 +16804.335917 + 20 +10264.621499 + 30 +0.0 + 11 +16804.335917 + 21 +10264.621499 + 31 +0.0 + 0 +LINE + 5 +1BD0 + 8 +0 + 62 + 0 + 10 +16845.084301 + 20 +10269.986125 + 30 +0.0 + 11 +16845.084301 + 21 +10269.986125 + 31 +0.0 + 0 +LINE + 5 +1BD1 + 8 +0 + 62 + 0 + 10 +16860.699558 + 20 +10272.041913 + 30 +0.0 + 11 +16860.699558 + 21 +10272.041913 + 31 +0.0 + 0 +LINE + 5 +1BD2 + 8 +0 + 62 + 0 + 10 +16885.089101 + 20 +10275.252857 + 30 +0.0 + 11 +16885.089101 + 21 +10275.252857 + 31 +0.0 + 0 +LINE + 5 +1BD3 + 8 +0 + 62 + 0 + 10 +16925.837485 + 20 +10280.617483 + 30 +0.0 + 11 +16925.837485 + 21 +10280.617483 + 31 +0.0 + 0 +LINE + 5 +1BD4 + 8 +0 + 62 + 0 + 10 +16941.452742 + 20 +10282.673271 + 30 +0.0 + 11 +16941.452742 + 21 +10282.673271 + 31 +0.0 + 0 +LINE + 5 +1BD5 + 8 +0 + 62 + 0 + 10 +16965.842285 + 20 +10285.884215 + 30 +0.0 + 11 +16965.842285 + 21 +10285.884215 + 31 +0.0 + 0 +LINE + 5 +1BD6 + 8 +0 + 62 + 0 + 10 +17006.590669 + 20 +10291.248842 + 30 +0.0 + 11 +17006.590669 + 21 +10291.248842 + 31 +0.0 + 0 +LINE + 5 +1BD7 + 8 +0 + 62 + 0 + 10 +17022.205926 + 20 +10293.304629 + 30 +0.0 + 11 +17022.205926 + 21 +10293.304629 + 31 +0.0 + 0 +LINE + 5 +1BD8 + 8 +0 + 62 + 0 + 10 +17046.595469 + 20 +10296.515574 + 30 +0.0 + 11 +17046.595469 + 21 +10296.515574 + 31 +0.0 + 0 +LINE + 5 +1BD9 + 8 +0 + 62 + 0 + 10 +17087.343853 + 20 +10301.8802 + 30 +0.0 + 11 +17087.343853 + 21 +10301.8802 + 31 +0.0 + 0 +LINE + 5 +1BDA + 8 +0 + 62 + 0 + 10 +17102.95911 + 20 +10303.935988 + 30 +0.0 + 11 +17102.95911 + 21 +10303.935988 + 31 +0.0 + 0 +LINE + 5 +1BDB + 8 +0 + 62 + 0 + 10 +17127.348653 + 20 +10307.146932 + 30 +0.0 + 11 +17127.348653 + 21 +10307.146932 + 31 +0.0 + 0 +LINE + 5 +1BDC + 8 +0 + 62 + 0 + 10 +17195.75692 + 20 +10238.478535 + 30 +0.0 + 11 +17195.75692 + 21 +10238.478535 + 31 +0.0 + 0 +LINE + 5 +1BDD + 8 +0 + 62 + 0 + 10 +17211.372176 + 20 +10240.534322 + 30 +0.0 + 11 +17211.372176 + 21 +10240.534322 + 31 +0.0 + 0 +LINE + 5 +1BDE + 8 +0 + 62 + 0 + 10 +17235.76172 + 20 +10243.745267 + 30 +0.0 + 11 +17235.76172 + 21 +10243.745267 + 31 +0.0 + 0 +LINE + 5 +1BDF + 8 +0 + 62 + 0 + 10 +17276.510104 + 20 +10249.109893 + 30 +0.0 + 11 +17276.510104 + 21 +10249.109893 + 31 +0.0 + 0 +LINE + 5 +1BE0 + 8 +0 + 62 + 0 + 10 +16429.360465 + 20 +10251.004792 + 30 +0.0 + 11 +16429.360465 + 21 +10251.004792 + 31 +0.0 + 0 +LINE + 5 +1BE1 + 8 +0 + 62 + 0 + 10 +16442.011337 + 20 +10242.945298 + 30 +0.0 + 11 +16442.011337 + 21 +10242.945298 + 31 +0.0 + 0 +LINE + 5 +1BE2 + 8 +0 + 62 + 0 + 10 +16463.325624 + 20 +10289.054186 + 30 +0.0 + 11 +16463.325624 + 21 +10289.054186 + 31 +0.0 + 0 +LINE + 5 +1BE3 + 8 +0 + 62 + 0 + 10 +16522.784721 + 20 +10251.174564 + 30 +0.0 + 11 +16522.784721 + 21 +10251.174564 + 31 +0.0 + 0 +LINE + 5 +1BE4 + 8 +0 + 62 + 0 + 10 +16535.435593 + 20 +10243.11507 + 30 +0.0 + 11 +16535.435593 + 21 +10243.11507 + 31 +0.0 + 0 +LINE + 5 +1BE5 + 8 +0 + 62 + 0 + 10 +16556.74988 + 20 +10289.223958 + 30 +0.0 + 11 +16556.74988 + 21 +10289.223958 + 31 +0.0 + 0 +LINE + 5 +1BE6 + 8 +0 + 62 + 0 + 10 +16616.208977 + 20 +10251.344335 + 30 +0.0 + 11 +16616.208977 + 21 +10251.344335 + 31 +0.0 + 0 +LINE + 5 +1BE7 + 8 +0 + 62 + 0 + 10 +16628.859848 + 20 +10243.284841 + 30 +0.0 + 11 +16628.859848 + 21 +10243.284841 + 31 +0.0 + 0 +LINE + 5 +1BE8 + 8 +0 + 62 + 0 + 10 +16650.174136 + 20 +10289.393729 + 30 +0.0 + 11 +16650.174136 + 21 +10289.393729 + 31 +0.0 + 0 +LINE + 5 +1BE9 + 8 +0 + 62 + 0 + 10 +16709.633233 + 20 +10251.514107 + 30 +0.0 + 11 +16709.633233 + 21 +10251.514107 + 31 +0.0 + 0 +LINE + 5 +1BEA + 8 +0 + 62 + 0 + 10 +16722.284104 + 20 +10243.454613 + 30 +0.0 + 11 +16722.284104 + 21 +10243.454613 + 31 +0.0 + 0 +LINE + 5 +1BEB + 8 +0 + 62 + 0 + 10 +16743.598392 + 20 +10289.563501 + 30 +0.0 + 11 +16743.598392 + 21 +10289.563501 + 31 +0.0 + 0 +LINE + 5 +1BEC + 8 +0 + 62 + 0 + 10 +16803.057488 + 20 +10251.683878 + 30 +0.0 + 11 +16803.057488 + 21 +10251.683878 + 31 +0.0 + 0 +LINE + 5 +1BED + 8 +0 + 62 + 0 + 10 +16815.70836 + 20 +10243.624384 + 30 +0.0 + 11 +16815.70836 + 21 +10243.624384 + 31 +0.0 + 0 +LINE + 5 +1BEE + 8 +0 + 62 + 0 + 10 +16837.022647 + 20 +10289.733272 + 30 +0.0 + 11 +16837.022647 + 21 +10289.733272 + 31 +0.0 + 0 +LINE + 5 +1BEF + 8 +0 + 62 + 0 + 10 +16896.481744 + 20 +10251.85365 + 30 +0.0 + 11 +16896.481744 + 21 +10251.85365 + 31 +0.0 + 0 +LINE + 5 +1BF0 + 8 +0 + 62 + 0 + 10 +16909.132616 + 20 +10243.794156 + 30 +0.0 + 11 +16909.132616 + 21 +10243.794156 + 31 +0.0 + 0 +LINE + 5 +1BF1 + 8 +0 + 62 + 0 + 10 +16930.446903 + 20 +10289.903044 + 30 +0.0 + 11 +16930.446903 + 21 +10289.903044 + 31 +0.0 + 0 +LINE + 5 +1BF2 + 8 +0 + 62 + 0 + 10 +16989.906 + 20 +10252.023422 + 30 +0.0 + 11 +16989.906 + 21 +10252.023422 + 31 +0.0 + 0 +LINE + 5 +1BF3 + 8 +0 + 62 + 0 + 10 +17002.556872 + 20 +10243.963928 + 30 +0.0 + 11 +17002.556872 + 21 +10243.963928 + 31 +0.0 + 0 +LINE + 5 +1BF4 + 8 +0 + 62 + 0 + 10 +17023.871159 + 20 +10290.072816 + 30 +0.0 + 11 +17023.871159 + 21 +10290.072816 + 31 +0.0 + 0 +LINE + 5 +1BF5 + 8 +0 + 62 + 0 + 10 +17083.330256 + 20 +10252.193193 + 30 +0.0 + 11 +17083.330256 + 21 +10252.193193 + 31 +0.0 + 0 +LINE + 5 +1BF6 + 8 +0 + 62 + 0 + 10 +17095.981128 + 20 +10244.133699 + 30 +0.0 + 11 +17095.981128 + 21 +10244.133699 + 31 +0.0 + 0 +LINE + 5 +1BF7 + 8 +0 + 62 + 0 + 10 +17117.295415 + 20 +10290.242587 + 30 +0.0 + 11 +17117.295415 + 21 +10290.242587 + 31 +0.0 + 0 +LINE + 5 +1BF8 + 8 +0 + 62 + 0 + 10 +17176.754512 + 20 +10252.362965 + 30 +0.0 + 11 +17176.754512 + 21 +10252.362965 + 31 +0.0 + 0 +LINE + 5 +1BF9 + 8 +0 + 62 + 0 + 10 +17189.405384 + 20 +10244.303471 + 30 +0.0 + 11 +17189.405384 + 21 +10244.303471 + 31 +0.0 + 0 +LINE + 5 +1BFA + 8 +0 + 62 + 0 + 10 +17210.719671 + 20 +10290.412359 + 30 +0.0 + 11 +17210.719671 + 21 +10290.412359 + 31 +0.0 + 0 +LINE + 5 +1BFB + 8 +0 + 62 + 0 + 10 +17270.178768 + 20 +10252.532737 + 30 +0.0 + 11 +17270.178768 + 21 +10252.532737 + 31 +0.0 + 0 +LINE + 5 +1BFC + 8 +0 + 62 + 0 + 10 +15622.507321 + 20 +10287.526242 + 30 +0.0 + 11 +15622.507321 + 21 +10287.526242 + 31 +0.0 + 0 +LINE + 5 +1BFD + 8 +0 + 62 + 0 + 10 +15529.083065 + 20 +10287.35647 + 30 +0.0 + 11 +15529.083065 + 21 +10287.35647 + 31 +0.0 + 0 +LINE + 5 +1BFE + 8 +0 + 62 + 0 + 10 +15588.542162 + 20 +10249.476848 + 30 +0.0 + 11 +15588.542162 + 21 +10249.476848 + 31 +0.0 + 0 +LINE + 5 +1BFF + 8 +0 + 62 + 0 + 10 +15601.193034 + 20 +10241.417353 + 30 +0.0 + 11 +15601.193034 + 21 +10241.417353 + 31 +0.0 + 0 +LINE + 5 +1C00 + 8 +0 + 62 + 0 + 10 +15435.65881 + 20 +10287.186698 + 30 +0.0 + 11 +15435.65881 + 21 +10287.186698 + 31 +0.0 + 0 +LINE + 5 +1C01 + 8 +0 + 62 + 0 + 10 +15495.117906 + 20 +10249.307076 + 30 +0.0 + 11 +15495.117906 + 21 +10249.307076 + 31 +0.0 + 0 +LINE + 5 +1C02 + 8 +0 + 62 + 0 + 10 +15507.768778 + 20 +10241.247582 + 30 +0.0 + 11 +15507.768778 + 21 +10241.247582 + 31 +0.0 + 0 +LINE + 5 +1C03 + 8 +0 + 62 + 0 + 10 +15342.234554 + 20 +10287.016927 + 30 +0.0 + 11 +15342.234554 + 21 +10287.016927 + 31 +0.0 + 0 +LINE + 5 +1C04 + 8 +0 + 62 + 0 + 10 +15401.693651 + 20 +10249.137304 + 30 +0.0 + 11 +15401.693651 + 21 +10249.137304 + 31 +0.0 + 0 +LINE + 5 +1C05 + 8 +0 + 62 + 0 + 10 +15414.344522 + 20 +10241.07781 + 30 +0.0 + 11 +15414.344522 + 21 +10241.07781 + 31 +0.0 + 0 +LINE + 5 +1C06 + 8 +0 + 62 + 0 + 10 +15248.810298 + 20 +10286.847155 + 30 +0.0 + 11 +15248.810298 + 21 +10286.847155 + 31 +0.0 + 0 +LINE + 5 +1C07 + 8 +0 + 62 + 0 + 10 +15308.269395 + 20 +10248.967533 + 30 +0.0 + 11 +15308.269395 + 21 +10248.967533 + 31 +0.0 + 0 +LINE + 5 +1C08 + 8 +0 + 62 + 0 + 10 +15320.920266 + 20 +10240.908039 + 30 +0.0 + 11 +15320.920266 + 21 +10240.908039 + 31 +0.0 + 0 +LINE + 5 +1C09 + 8 +0 + 62 + 0 + 10 +15155.386042 + 20 +10286.677384 + 30 +0.0 + 11 +15155.386042 + 21 +10286.677384 + 31 +0.0 + 0 +LINE + 5 +1C0A + 8 +0 + 62 + 0 + 10 +15214.845139 + 20 +10248.797761 + 30 +0.0 + 11 +15214.845139 + 21 +10248.797761 + 31 +0.0 + 0 +LINE + 5 +1C0B + 8 +0 + 62 + 0 + 10 +15227.496011 + 20 +10240.738267 + 30 +0.0 + 11 +15227.496011 + 21 +10240.738267 + 31 +0.0 + 0 +LINE + 5 +1C0C + 8 +0 + 62 + 0 + 10 +15061.961786 + 20 +10286.507612 + 30 +0.0 + 11 +15061.961786 + 21 +10286.507612 + 31 +0.0 + 0 +LINE + 5 +1C0D + 8 +0 + 62 + 0 + 10 +15121.420883 + 20 +10248.62799 + 30 +0.0 + 11 +15121.420883 + 21 +10248.62799 + 31 +0.0 + 0 +LINE + 5 +1C0E + 8 +0 + 62 + 0 + 10 +15134.071755 + 20 +10240.568495 + 30 +0.0 + 11 +15134.071755 + 21 +10240.568495 + 31 +0.0 + 0 +LINE + 5 +1C0F + 8 +0 + 62 + 0 + 10 +14968.53753 + 20 +10286.33784 + 30 +0.0 + 11 +14968.53753 + 21 +10286.33784 + 31 +0.0 + 0 +LINE + 5 +1C10 + 8 +0 + 62 + 0 + 10 +15027.996627 + 20 +10248.458218 + 30 +0.0 + 11 +15027.996627 + 21 +10248.458218 + 31 +0.0 + 0 +LINE + 5 +1C11 + 8 +0 + 62 + 0 + 10 +15040.647499 + 20 +10240.398724 + 30 +0.0 + 11 +15040.647499 + 21 +10240.398724 + 31 +0.0 + 0 +LINE + 5 +1C12 + 8 +0 + 62 + 0 + 10 +14875.113274 + 20 +10286.168069 + 30 +0.0 + 11 +14875.113274 + 21 +10286.168069 + 31 +0.0 + 0 +LINE + 5 +1C13 + 8 +0 + 62 + 0 + 10 +14934.572371 + 20 +10248.288446 + 30 +0.0 + 11 +14934.572371 + 21 +10248.288446 + 31 +0.0 + 0 +LINE + 5 +1C14 + 8 +0 + 62 + 0 + 10 +14947.223243 + 20 +10240.228952 + 30 +0.0 + 11 +14947.223243 + 21 +10240.228952 + 31 +0.0 + 0 +LINE + 5 +1C15 + 8 +0 + 62 + 0 + 10 +14781.689019 + 20 +10285.998297 + 30 +0.0 + 11 +14781.689019 + 21 +10285.998297 + 31 +0.0 + 0 +LINE + 5 +1C16 + 8 +0 + 62 + 0 + 10 +14841.148116 + 20 +10248.118675 + 30 +0.0 + 11 +14841.148116 + 21 +10248.118675 + 31 +0.0 + 0 +LINE + 5 +1C17 + 8 +0 + 62 + 0 + 10 +14853.798987 + 20 +10240.059181 + 30 +0.0 + 11 +14853.798987 + 21 +10240.059181 + 31 +0.0 + 0 +LINE + 5 +1C18 + 8 +0 + 62 + 0 + 10 +14747.72386 + 20 +10247.948903 + 30 +0.0 + 11 +14747.72386 + 21 +10247.948903 + 31 +0.0 + 0 +LINE + 5 +1C19 + 8 +0 + 62 + 0 + 10 +14760.374731 + 20 +10239.889409 + 30 +0.0 + 11 +14760.374731 + 21 +10239.889409 + 31 +0.0 + 0 +LINE + 5 +1C1A + 8 +0 + 62 + 0 + 10 +16450.879919 + 20 +10259.406297 + 30 +0.0 + 11 +16450.879919 + 21 +10259.406297 + 31 +0.0 + 0 +LINE + 5 +1C1B + 8 +0 + 62 + 0 + 10 +16514.964099 + 20 +10309.652458 + 30 +0.0 + 11 +16514.964099 + 21 +10309.652458 + 31 +0.0 + 0 +LINE + 5 +1C1C + 8 +0 + 62 + 0 + 10 +16541.063717 + 20 +10285.736564 + 30 +0.0 + 11 +16541.063717 + 21 +10285.736564 + 31 +0.0 + 0 +LINE + 5 +1C1D + 8 +0 + 62 + 0 + 10 +16570.923449 + 20 +10258.375161 + 30 +0.0 + 11 +16570.923449 + 21 +10258.375161 + 31 +0.0 + 0 +LINE + 5 +1C1E + 8 +0 + 62 + 0 + 10 +16576.453029 + 20 +10253.308234 + 30 +0.0 + 11 +16576.453029 + 21 +10253.308234 + 31 +0.0 + 0 +LINE + 5 +1C1F + 8 +0 + 62 + 0 + 10 +16661.107247 + 20 +10284.705428 + 30 +0.0 + 11 +16661.107247 + 21 +10284.705428 + 31 +0.0 + 0 +LINE + 5 +1C20 + 8 +0 + 62 + 0 + 10 +16666.636827 + 20 +10279.638501 + 30 +0.0 + 11 +16666.636827 + 21 +10279.638501 + 31 +0.0 + 0 +LINE + 5 +1C21 + 8 +0 + 62 + 0 + 10 +16692.736445 + 20 +10255.722608 + 30 +0.0 + 11 +16692.736445 + 21 +10255.722608 + 31 +0.0 + 0 +LINE + 5 +1C22 + 8 +0 + 62 + 0 + 10 +16756.820625 + 20 +10305.968768 + 30 +0.0 + 11 +16756.820625 + 21 +10305.968768 + 31 +0.0 + 0 +LINE + 5 +1C23 + 8 +0 + 62 + 0 + 10 +16782.920243 + 20 +10282.052875 + 30 +0.0 + 11 +16782.920243 + 21 +10282.052875 + 31 +0.0 + 0 +LINE + 5 +1C24 + 8 +0 + 62 + 0 + 10 +16812.779975 + 20 +10254.691472 + 30 +0.0 + 11 +16812.779975 + 21 +10254.691472 + 31 +0.0 + 0 +LINE + 5 +1C25 + 8 +0 + 62 + 0 + 10 +16818.309555 + 20 +10249.624545 + 30 +0.0 + 11 +16818.309555 + 21 +10249.624545 + 31 +0.0 + 0 +LINE + 5 +1C26 + 8 +0 + 62 + 0 + 10 +16873.104041 + 20 +10308.383142 + 30 +0.0 + 11 +16873.104041 + 21 +10308.383142 + 31 +0.0 + 0 +LINE + 5 +1C27 + 8 +0 + 62 + 0 + 10 +16902.963773 + 20 +10281.021738 + 30 +0.0 + 11 +16902.963773 + 21 +10281.021738 + 31 +0.0 + 0 +LINE + 5 +1C28 + 8 +0 + 62 + 0 + 10 +16908.493353 + 20 +10275.954812 + 30 +0.0 + 11 +16908.493353 + 21 +10275.954812 + 31 +0.0 + 0 +LINE + 5 +1C29 + 8 +0 + 62 + 0 + 10 +16934.592971 + 20 +10252.038919 + 30 +0.0 + 11 +16934.592971 + 21 +10252.038919 + 31 +0.0 + 0 +LINE + 5 +1C2A + 8 +0 + 62 + 0 + 10 +16993.147571 + 20 +10307.352005 + 30 +0.0 + 11 +16993.147571 + 21 +10307.352005 + 31 +0.0 + 0 +LINE + 5 +1C2B + 8 +0 + 62 + 0 + 10 +16998.677151 + 20 +10302.285079 + 30 +0.0 + 11 +16998.677151 + 21 +10302.285079 + 31 +0.0 + 0 +LINE + 5 +1C2C + 8 +0 + 62 + 0 + 10 +17024.776769 + 20 +10278.369186 + 30 +0.0 + 11 +17024.776769 + 21 +10278.369186 + 31 +0.0 + 0 +LINE + 5 +1C2D + 8 +0 + 62 + 0 + 10 +17054.636501 + 20 +10251.007782 + 30 +0.0 + 11 +17054.636501 + 21 +10251.007782 + 31 +0.0 + 0 +LINE + 5 +1C2E + 8 +0 + 62 + 0 + 10 +17060.166081 + 20 +10245.940856 + 30 +0.0 + 11 +17060.166081 + 21 +10245.940856 + 31 +0.0 + 0 +LINE + 5 +1C2F + 8 +0 + 62 + 0 + 10 +17114.960567 + 20 +10304.699452 + 30 +0.0 + 11 +17114.960567 + 21 +10304.699452 + 31 +0.0 + 0 +LINE + 5 +1C30 + 8 +0 + 62 + 0 + 10 +17144.820299 + 20 +10277.338049 + 30 +0.0 + 11 +17144.820299 + 21 +10277.338049 + 31 +0.0 + 0 +LINE + 5 +1C31 + 8 +0 + 62 + 0 + 10 +17150.349879 + 20 +10272.271122 + 30 +0.0 + 11 +17150.349879 + 21 +10272.271122 + 31 +0.0 + 0 +LINE + 5 +1C32 + 8 +0 + 62 + 0 + 10 +17176.449497 + 20 +10248.355229 + 30 +0.0 + 11 +17176.449497 + 21 +10248.355229 + 31 +0.0 + 0 +LINE + 5 +1C33 + 8 +0 + 62 + 0 + 10 +17235.004098 + 20 +10303.668316 + 30 +0.0 + 11 +17235.004098 + 21 +10303.668316 + 31 +0.0 + 0 +LINE + 5 +1C34 + 8 +0 + 62 + 0 + 10 +17240.533678 + 20 +10298.601389 + 30 +0.0 + 11 +17240.533678 + 21 +10298.601389 + 31 +0.0 + 0 +LINE + 5 +1C35 + 8 +0 + 62 + 0 + 10 +17266.633295 + 20 +10274.685496 + 30 +0.0 + 11 +17266.633295 + 21 +10274.685496 + 31 +0.0 + 0 +LINE + 5 +1C36 + 8 +0 + 62 + 0 + 10 +15573.637612 + 20 +10300.471322 + 30 +0.0 + 11 +15573.637612 + 21 +10300.471322 + 31 +0.0 + 0 +LINE + 5 +1C37 + 8 +0 + 62 + 0 + 10 +15603.497344 + 20 +10273.109919 + 30 +0.0 + 11 +15603.497344 + 21 +10273.109919 + 31 +0.0 + 0 +LINE + 5 +1C38 + 8 +0 + 62 + 0 + 10 +15609.026924 + 20 +10268.042992 + 30 +0.0 + 11 +15609.026924 + 21 +10268.042992 + 31 +0.0 + 0 +LINE + 5 +1C39 + 8 +0 + 62 + 0 + 10 +15635.126542 + 20 +10244.127099 + 30 +0.0 + 11 +15635.126542 + 21 +10244.127099 + 31 +0.0 + 0 +LINE + 5 +1C3A + 8 +0 + 62 + 0 + 10 +15451.824616 + 20 +10303.123875 + 30 +0.0 + 11 +15451.824616 + 21 +10303.123875 + 31 +0.0 + 0 +LINE + 5 +1C3B + 8 +0 + 62 + 0 + 10 +15457.354196 + 20 +10298.056948 + 30 +0.0 + 11 +15457.354196 + 21 +10298.056948 + 31 +0.0 + 0 +LINE + 5 +1C3C + 8 +0 + 62 + 0 + 10 +15483.453814 + 20 +10274.141055 + 30 +0.0 + 11 +15483.453814 + 21 +10274.141055 + 31 +0.0 + 0 +LINE + 5 +1C3D + 8 +0 + 62 + 0 + 10 +15513.313546 + 20 +10246.779652 + 30 +0.0 + 11 +15513.313546 + 21 +10246.779652 + 31 +0.0 + 0 +LINE + 5 +1C3E + 8 +0 + 62 + 0 + 10 +15518.843126 + 20 +10241.712725 + 30 +0.0 + 11 +15518.843126 + 21 +10241.712725 + 31 +0.0 + 0 +LINE + 5 +1C3F + 8 +0 + 62 + 0 + 10 +15331.781086 + 20 +10304.155011 + 30 +0.0 + 11 +15331.781086 + 21 +10304.155011 + 31 +0.0 + 0 +LINE + 5 +1C40 + 8 +0 + 62 + 0 + 10 +15361.640818 + 20 +10276.793608 + 30 +0.0 + 11 +15361.640818 + 21 +10276.793608 + 31 +0.0 + 0 +LINE + 5 +1C41 + 8 +0 + 62 + 0 + 10 +15367.170398 + 20 +10271.726681 + 30 +0.0 + 11 +15367.170398 + 21 +10271.726681 + 31 +0.0 + 0 +LINE + 5 +1C42 + 8 +0 + 62 + 0 + 10 +15393.270016 + 20 +10247.810788 + 30 +0.0 + 11 +15393.270016 + 21 +10247.810788 + 31 +0.0 + 0 +LINE + 5 +1C43 + 8 +0 + 62 + 0 + 10 +15209.96809 + 20 +10306.807564 + 30 +0.0 + 11 +15209.96809 + 21 +10306.807564 + 31 +0.0 + 0 +LINE + 5 +1C44 + 8 +0 + 62 + 0 + 10 +15215.49767 + 20 +10301.740638 + 30 +0.0 + 11 +15215.49767 + 21 +10301.740638 + 31 +0.0 + 0 +LINE + 5 +1C45 + 8 +0 + 62 + 0 + 10 +15241.597288 + 20 +10277.824744 + 30 +0.0 + 11 +15241.597288 + 21 +10277.824744 + 31 +0.0 + 0 +LINE + 5 +1C46 + 8 +0 + 62 + 0 + 10 +15271.45702 + 20 +10250.463341 + 30 +0.0 + 11 +15271.45702 + 21 +10250.463341 + 31 +0.0 + 0 +LINE + 5 +1C47 + 8 +0 + 62 + 0 + 10 +15276.9866 + 20 +10245.396415 + 30 +0.0 + 11 +15276.9866 + 21 +10245.396415 + 31 +0.0 + 0 +LINE + 5 +1C48 + 8 +0 + 62 + 0 + 10 +15089.92456 + 20 +10307.838701 + 30 +0.0 + 11 +15089.92456 + 21 +10307.838701 + 31 +0.0 + 0 +LINE + 5 +1C49 + 8 +0 + 62 + 0 + 10 +15119.784292 + 20 +10280.477297 + 30 +0.0 + 11 +15119.784292 + 21 +10280.477297 + 31 +0.0 + 0 +LINE + 5 +1C4A + 8 +0 + 62 + 0 + 10 +15125.313872 + 20 +10275.410371 + 30 +0.0 + 11 +15125.313872 + 21 +10275.410371 + 31 +0.0 + 0 +LINE + 5 +1C4B + 8 +0 + 62 + 0 + 10 +15151.41349 + 20 +10251.494478 + 30 +0.0 + 11 +15151.41349 + 21 +10251.494478 + 31 +0.0 + 0 +LINE + 5 +1C4C + 8 +0 + 62 + 0 + 10 +14973.641144 + 20 +10305.424327 + 30 +0.0 + 11 +14973.641144 + 21 +10305.424327 + 31 +0.0 + 0 +LINE + 5 +1C4D + 8 +0 + 62 + 0 + 10 +14999.740762 + 20 +10281.508434 + 30 +0.0 + 11 +14999.740762 + 21 +10281.508434 + 31 +0.0 + 0 +LINE + 5 +1C4E + 8 +0 + 62 + 0 + 10 +15029.600494 + 20 +10254.147031 + 30 +0.0 + 11 +15029.600494 + 21 +10254.147031 + 31 +0.0 + 0 +LINE + 5 +1C4F + 8 +0 + 62 + 0 + 10 +15035.130074 + 20 +10249.080104 + 30 +0.0 + 11 +15035.130074 + 21 +10249.080104 + 31 +0.0 + 0 +LINE + 5 +1C50 + 8 +0 + 62 + 0 + 10 +14877.927766 + 20 +10284.160987 + 30 +0.0 + 11 +14877.927766 + 21 +10284.160987 + 31 +0.0 + 0 +LINE + 5 +1C51 + 8 +0 + 62 + 0 + 10 +14883.457346 + 20 +10279.09406 + 30 +0.0 + 11 +14883.457346 + 21 +10279.09406 + 31 +0.0 + 0 +LINE + 5 +1C52 + 8 +0 + 62 + 0 + 10 +14909.556964 + 20 +10255.178167 + 30 +0.0 + 11 +14909.556964 + 21 +10255.178167 + 31 +0.0 + 0 +LINE + 5 +1C53 + 8 +0 + 62 + 0 + 10 +14731.784618 + 20 +10309.108017 + 30 +0.0 + 11 +14731.784618 + 21 +10309.108017 + 31 +0.0 + 0 +LINE + 5 +1C54 + 8 +0 + 62 + 0 + 10 +14757.884236 + 20 +10285.192123 + 30 +0.0 + 11 +14757.884236 + 21 +10285.192123 + 31 +0.0 + 0 +LINE + 5 +1C55 + 8 +0 + 62 + 0 + 10 +14787.743968 + 20 +10257.83072 + 30 +0.0 + 11 +14787.743968 + 21 +10257.83072 + 31 +0.0 + 0 +LINE + 5 +1C56 + 8 +0 + 62 + 0 + 10 +14793.273548 + 20 +10252.763793 + 30 +0.0 + 11 +14793.273548 + 21 +10252.763793 + 31 +0.0 + 0 +INSERT + 5 +1C57 + 8 +SCHRAFFUR + 2 +*X78 + 10 +727.274018 + 20 +-2105.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +HONEY,I +1040 +500.0 +1040 +0.0 +1002 +} + 0 +POLYLINE + 5 +1C58 + 8 +ESTRICH + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21E7 + 8 +ESTRICH + 10 +16452.274018 + 20 +7330.0 + 30 +0.0 + 0 +VERTEX + 5 +21E8 + 8 +ESTRICH + 10 +16452.274018 + 20 +7455.0 + 30 +0.0 + 0 +VERTEX + 5 +21E9 + 8 +ESTRICH + 10 +17292.266155 + 20 +7455.0 + 30 +0.0 + 0 +SEQEND + 5 +21EA + 8 +ESTRICH + 0 +POLYLINE + 5 +1C5D + 8 +ESTRICH + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21EB + 8 +ESTRICH + 10 +17292.266155 + 20 +7330.0 + 30 +0.0 + 0 +VERTEX + 5 +21EC + 8 +ESTRICH + 10 +16452.274018 + 20 +7330.0 + 30 +0.0 + 0 +SEQEND + 5 +21ED + 8 +ESTRICH + 0 +POLYLINE + 5 +1C61 + 8 +ESTRICH + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21EE + 8 +ESTRICH + 10 +16452.274018 + 20 +7130.0 + 30 +0.0 + 0 +VERTEX + 5 +21EF + 8 +ESTRICH + 10 +16452.274018 + 20 +7330.0 + 30 +0.0 + 0 +VERTEX + 5 +21F0 + 8 +ESTRICH + 10 +17292.266155 + 20 +7330.0 + 30 +0.0 + 0 +SEQEND + 5 +21F1 + 8 +ESTRICH + 0 +POLYLINE + 5 +1C66 + 8 +ESTRICH + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21F2 + 8 +ESTRICH + 10 +17292.266155 + 20 +7130.0 + 30 +0.0 + 0 +VERTEX + 5 +21F3 + 8 +ESTRICH + 10 +16452.274018 + 20 +7130.0 + 30 +0.0 + 0 +SEQEND + 5 +21F4 + 8 +ESTRICH + 0 +POLYLINE + 5 +1C6A + 8 +ESTRICH + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21F5 + 8 +ESTRICH + 10 +16452.274018 + 20 +7080.0 + 30 +0.0 + 0 +VERTEX + 5 +21F6 + 8 +ESTRICH + 10 +16452.274018 + 20 +7130.0 + 30 +0.0 + 0 +VERTEX + 5 +21F7 + 8 +ESTRICH + 10 +17292.266155 + 20 +7130.0 + 30 +0.0 + 0 +SEQEND + 5 +21F8 + 8 +ESTRICH + 0 +POLYLINE + 5 +1C6F + 8 +ESTRICH + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21F9 + 8 +ESTRICH + 10 +17292.266155 + 20 +7080.0 + 30 +0.0 + 0 +VERTEX + 5 +21FA + 8 +ESTRICH + 10 +16452.274018 + 20 +7080.0 + 30 +0.0 + 0 +SEQEND + 5 +21FB + 8 +ESTRICH + 0 +POLYLINE + 5 +1C73 + 8 +ESTRICH + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +21FC + 8 +ESTRICH + 10 +16452.274018 + 20 +6880.0 + 30 +0.0 + 0 +VERTEX + 5 +21FD + 8 +ESTRICH + 10 +16452.274018 + 20 +7080.0 + 30 +0.0 + 0 +VERTEX + 5 +21FE + 8 +ESTRICH + 10 +17292.266155 + 20 +7080.0 + 30 +0.0 + 0 +SEQEND + 5 +21FF + 8 +ESTRICH + 0 +POLYLINE + 5 +1C78 + 8 +ESTRICH + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2200 + 8 +ESTRICH + 10 +17292.266155 + 20 +6880.0 + 30 +0.0 + 0 +VERTEX + 5 +2201 + 8 +ESTRICH + 10 +16452.274018 + 20 +6880.0 + 30 +0.0 + 0 +SEQEND + 5 +2202 + 8 +ESTRICH + 0 +POLYLINE + 5 +1C7C + 8 +PE-FOLIE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +25.0 + 41 +25.0 + 0 +VERTEX + 5 +2203 + 8 +PE-FOLIE + 10 +16637.274018 + 20 +7115.0 + 30 +0.0 + 0 +VERTEX + 5 +2204 + 8 +PE-FOLIE + 10 +17292.266155 + 20 +7115.0 + 30 +0.0 + 0 +SEQEND + 5 +2205 + 8 +PE-FOLIE + 0 +POLYLINE + 5 +1C80 + 8 +PE-FOLIE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +25.0 + 41 +25.0 + 0 +VERTEX + 5 +2206 + 8 +PE-FOLIE + 10 +16457.274018 + 20 +7095.0 + 30 +0.0 + 0 +VERTEX + 5 +2207 + 8 +PE-FOLIE + 10 +17292.266155 + 20 +7095.0 + 30 +0.0 + 0 +SEQEND + 5 +2208 + 8 +PE-FOLIE + 0 +LINE + 5 +1C84 + 8 +0 + 62 + 0 + 10 +16526.235048 + 20 +7330.0 + 30 +0.0 + 11 +16651.235048 + 21 +7455.0 + 31 +0.0 + 0 +LINE + 5 +1C85 + 8 +0 + 62 + 0 + 10 +16950.499117 + 20 +7330.0 + 30 +0.0 + 11 +17075.499117 + 21 +7455.0 + 31 +0.0 + 0 +LINE + 5 +1C86 + 8 +0 + 62 + 0 + 10 +16596.945726 + 20 +7330.0 + 30 +0.0 + 11 +16721.945726 + 21 +7455.0 + 31 +0.0 + 0 +LINE + 5 +1C87 + 8 +0 + 62 + 0 + 10 +17021.209795 + 20 +7330.0 + 30 +0.0 + 11 +17146.209795 + 21 +7455.0 + 31 +0.0 + 0 +LINE + 5 +1C88 + 8 +0 + 62 + 0 + 10 +16667.656405 + 20 +7330.0 + 30 +0.0 + 11 +16792.656405 + 21 +7455.0 + 31 +0.0 + 0 +LINE + 5 +1C89 + 8 +0 + 62 + 0 + 10 +17091.920473 + 20 +7330.0 + 30 +0.0 + 11 +17216.920473 + 21 +7455.0 + 31 +0.0 + 0 +LINE + 5 +1C8A + 8 +0 + 62 + 0 + 10 +16738.367083 + 20 +7330.0 + 30 +0.0 + 11 +16863.367083 + 21 +7455.0 + 31 +0.0 + 0 +LINE + 5 +1C8B + 8 +0 + 62 + 0 + 10 +17162.631151 + 20 +7330.0 + 30 +0.0 + 11 +17287.631151 + 21 +7455.0 + 31 +0.0 + 0 +LINE + 5 +1C8C + 8 +0 + 62 + 0 + 10 +16452.274018 + 20 +6955.790748 + 30 +0.0 + 11 +16458.524018 + 21 +6955.790748 + 31 +0.0 + 0 +LINE + 5 +1C8D + 8 +0 + 62 + 0 + 10 +16533.524018 + 20 +6955.790748 + 30 +0.0 + 11 +16571.024018 + 21 +6955.790748 + 31 +0.0 + 0 +LINE + 5 +1C8E + 8 +0 + 62 + 0 + 10 +16646.024018 + 20 +6955.790748 + 30 +0.0 + 11 +16683.524018 + 21 +6955.790748 + 31 +0.0 + 0 +LINE + 5 +1C8F + 8 +0 + 62 + 0 + 10 +16758.524018 + 20 +6955.790748 + 30 +0.0 + 11 +16796.024018 + 21 +6955.790748 + 31 +0.0 + 0 +LINE + 5 +1C90 + 8 +0 + 62 + 0 + 10 +16871.024018 + 20 +6955.790748 + 30 +0.0 + 11 +16908.524018 + 21 +6955.790748 + 31 +0.0 + 0 +LINE + 5 +1C91 + 8 +0 + 62 + 0 + 10 +16983.524018 + 20 +6955.790748 + 30 +0.0 + 11 +17021.024018 + 21 +6955.790748 + 31 +0.0 + 0 +LINE + 5 +1C92 + 8 +0 + 62 + 0 + 10 +17096.024018 + 20 +6955.790748 + 30 +0.0 + 11 +17133.524018 + 21 +6955.790748 + 31 +0.0 + 0 +LINE + 5 +1C93 + 8 +0 + 62 + 0 + 10 +17208.524018 + 20 +6955.790748 + 30 +0.0 + 11 +17246.024018 + 21 +6955.790748 + 31 +0.0 + 0 +LINE + 5 +1C94 + 8 +0 + 62 + 0 + 10 +16477.274018 + 20 +6988.2667 + 30 +0.0 + 11 +16514.774018 + 21 +6988.2667 + 31 +0.0 + 0 +LINE + 5 +1C95 + 8 +0 + 62 + 0 + 10 +16589.774018 + 20 +6988.2667 + 30 +0.0 + 11 +16627.274018 + 21 +6988.2667 + 31 +0.0 + 0 +LINE + 5 +1C96 + 8 +0 + 62 + 0 + 10 +16702.274018 + 20 +6988.2667 + 30 +0.0 + 11 +16739.774018 + 21 +6988.2667 + 31 +0.0 + 0 +LINE + 5 +1C97 + 8 +0 + 62 + 0 + 10 +16814.774018 + 20 +6988.2667 + 30 +0.0 + 11 +16852.274018 + 21 +6988.2667 + 31 +0.0 + 0 +LINE + 5 +1C98 + 8 +0 + 62 + 0 + 10 +16927.274018 + 20 +6988.2667 + 30 +0.0 + 11 +16964.774018 + 21 +6988.2667 + 31 +0.0 + 0 +LINE + 5 +1C99 + 8 +0 + 62 + 0 + 10 +17039.774018 + 20 +6988.2667 + 30 +0.0 + 11 +17077.274018 + 21 +6988.2667 + 31 +0.0 + 0 +LINE + 5 +1C9A + 8 +0 + 62 + 0 + 10 +17152.274018 + 20 +6988.2667 + 30 +0.0 + 11 +17189.774018 + 21 +6988.2667 + 31 +0.0 + 0 +LINE + 5 +1C9B + 8 +0 + 62 + 0 + 10 +17264.774018 + 20 +6988.2667 + 30 +0.0 + 11 +17302.274018 + 21 +6988.2667 + 31 +0.0 + 0 +LINE + 5 +1C9C + 8 +0 + 62 + 0 + 10 +16452.274018 + 20 +7020.742653 + 30 +0.0 + 11 +16458.524018 + 21 +7020.742653 + 31 +0.0 + 0 +LINE + 5 +1C9D + 8 +0 + 62 + 0 + 10 +16533.524018 + 20 +7020.742653 + 30 +0.0 + 11 +16571.024018 + 21 +7020.742653 + 31 +0.0 + 0 +LINE + 5 +1C9E + 8 +0 + 62 + 0 + 10 +16646.024018 + 20 +7020.742653 + 30 +0.0 + 11 +16683.524018 + 21 +7020.742653 + 31 +0.0 + 0 +LINE + 5 +1C9F + 8 +0 + 62 + 0 + 10 +16758.524018 + 20 +7020.742653 + 30 +0.0 + 11 +16796.024018 + 21 +7020.742653 + 31 +0.0 + 0 +LINE + 5 +1CA0 + 8 +0 + 62 + 0 + 10 +16871.024018 + 20 +7020.742653 + 30 +0.0 + 11 +16908.524018 + 21 +7020.742653 + 31 +0.0 + 0 +LINE + 5 +1CA1 + 8 +0 + 62 + 0 + 10 +16983.524018 + 20 +7020.742653 + 30 +0.0 + 11 +17021.024018 + 21 +7020.742653 + 31 +0.0 + 0 +LINE + 5 +1CA2 + 8 +0 + 62 + 0 + 10 +17096.024018 + 20 +7020.742653 + 30 +0.0 + 11 +17133.524018 + 21 +7020.742653 + 31 +0.0 + 0 +LINE + 5 +1CA3 + 8 +0 + 62 + 0 + 10 +17208.524018 + 20 +7020.742653 + 30 +0.0 + 11 +17246.024018 + 21 +7020.742653 + 31 +0.0 + 0 +LINE + 5 +1CA4 + 8 +0 + 62 + 0 + 10 +16477.274018 + 20 +7053.218605 + 30 +0.0 + 11 +16514.774018 + 21 +7053.218605 + 31 +0.0 + 0 +LINE + 5 +1CA5 + 8 +0 + 62 + 0 + 10 +16589.774018 + 20 +7053.218605 + 30 +0.0 + 11 +16627.274018 + 21 +7053.218605 + 31 +0.0 + 0 +LINE + 5 +1CA6 + 8 +0 + 62 + 0 + 10 +16702.274018 + 20 +7053.218605 + 30 +0.0 + 11 +16739.774018 + 21 +7053.218605 + 31 +0.0 + 0 +LINE + 5 +1CA7 + 8 +0 + 62 + 0 + 10 +16814.774018 + 20 +7053.218605 + 30 +0.0 + 11 +16852.274018 + 21 +7053.218605 + 31 +0.0 + 0 +LINE + 5 +1CA8 + 8 +0 + 62 + 0 + 10 +16927.274018 + 20 +7053.218605 + 30 +0.0 + 11 +16964.774018 + 21 +7053.218605 + 31 +0.0 + 0 +LINE + 5 +1CA9 + 8 +0 + 62 + 0 + 10 +17039.774018 + 20 +7053.218605 + 30 +0.0 + 11 +17077.274018 + 21 +7053.218605 + 31 +0.0 + 0 +LINE + 5 +1CAA + 8 +0 + 62 + 0 + 10 +17152.274018 + 20 +7053.218605 + 30 +0.0 + 11 +17189.774018 + 21 +7053.218605 + 31 +0.0 + 0 +LINE + 5 +1CAB + 8 +0 + 62 + 0 + 10 +17264.774018 + 20 +7053.218605 + 30 +0.0 + 11 +17302.274018 + 21 +7053.218605 + 31 +0.0 + 0 +LINE + 5 +1CAC + 8 +0 + 62 + 0 + 10 +16477.274018 + 20 +6923.314795 + 30 +0.0 + 11 +16514.774018 + 21 +6923.314795 + 31 +0.0 + 0 +LINE + 5 +1CAD + 8 +0 + 62 + 0 + 10 +16589.774018 + 20 +6923.314795 + 30 +0.0 + 11 +16627.274018 + 21 +6923.314795 + 31 +0.0 + 0 +LINE + 5 +1CAE + 8 +0 + 62 + 0 + 10 +16702.274018 + 20 +6923.314795 + 30 +0.0 + 11 +16739.774018 + 21 +6923.314795 + 31 +0.0 + 0 +LINE + 5 +1CAF + 8 +0 + 62 + 0 + 10 +16814.774018 + 20 +6923.314795 + 30 +0.0 + 11 +16852.274018 + 21 +6923.314795 + 31 +0.0 + 0 +LINE + 5 +1CB0 + 8 +0 + 62 + 0 + 10 +16927.274018 + 20 +6923.314795 + 30 +0.0 + 11 +16964.774018 + 21 +6923.314795 + 31 +0.0 + 0 +LINE + 5 +1CB1 + 8 +0 + 62 + 0 + 10 +17039.774018 + 20 +6923.314795 + 30 +0.0 + 11 +17077.274018 + 21 +6923.314795 + 31 +0.0 + 0 +LINE + 5 +1CB2 + 8 +0 + 62 + 0 + 10 +17152.274018 + 20 +6923.314795 + 30 +0.0 + 11 +17189.774018 + 21 +6923.314795 + 31 +0.0 + 0 +LINE + 5 +1CB3 + 8 +0 + 62 + 0 + 10 +17264.774018 + 20 +6923.314795 + 30 +0.0 + 11 +17302.274018 + 21 +6923.314795 + 31 +0.0 + 0 +LINE + 5 +1CB4 + 8 +0 + 62 + 0 + 10 +16452.274018 + 20 +6890.838843 + 30 +0.0 + 11 +16458.524018 + 21 +6890.838843 + 31 +0.0 + 0 +LINE + 5 +1CB5 + 8 +0 + 62 + 0 + 10 +16533.524018 + 20 +6890.838843 + 30 +0.0 + 11 +16571.024018 + 21 +6890.838843 + 31 +0.0 + 0 +LINE + 5 +1CB6 + 8 +0 + 62 + 0 + 10 +16646.024018 + 20 +6890.838843 + 30 +0.0 + 11 +16683.524018 + 21 +6890.838843 + 31 +0.0 + 0 +LINE + 5 +1CB7 + 8 +0 + 62 + 0 + 10 +16758.524018 + 20 +6890.838843 + 30 +0.0 + 11 +16796.024018 + 21 +6890.838843 + 31 +0.0 + 0 +LINE + 5 +1CB8 + 8 +0 + 62 + 0 + 10 +16871.024018 + 20 +6890.838843 + 30 +0.0 + 11 +16908.524018 + 21 +6890.838843 + 31 +0.0 + 0 +LINE + 5 +1CB9 + 8 +0 + 62 + 0 + 10 +16983.524018 + 20 +6890.838843 + 30 +0.0 + 11 +17021.024018 + 21 +6890.838843 + 31 +0.0 + 0 +LINE + 5 +1CBA + 8 +0 + 62 + 0 + 10 +17096.024018 + 20 +6890.838843 + 30 +0.0 + 11 +17133.524018 + 21 +6890.838843 + 31 +0.0 + 0 +LINE + 5 +1CBB + 8 +0 + 62 + 0 + 10 +17208.524018 + 20 +6890.838843 + 30 +0.0 + 11 +17246.024018 + 21 +6890.838843 + 31 +0.0 + 0 +LINE + 5 +1CBC + 8 +0 + 62 + 0 + 10 +16983.523947 + 20 +6890.838841 + 30 +0.0 + 11 +16964.773947 + 21 +6923.314794 + 31 +0.0 + 0 +LINE + 5 +1CBD + 8 +0 + 62 + 0 + 10 +16927.273947 + 20 +6988.266699 + 30 +0.0 + 11 +16908.523947 + 21 +7020.742652 + 31 +0.0 + 0 +LINE + 5 +1CBE + 8 +0 + 62 + 0 + 10 +16927.273947 + 20 +6923.314794 + 30 +0.0 + 11 +16908.523947 + 21 +6955.790747 + 31 +0.0 + 0 +LINE + 5 +1CBF + 8 +0 + 62 + 0 + 10 +16871.023947 + 20 +7020.742652 + 30 +0.0 + 11 +16852.273947 + 21 +7053.218605 + 31 +0.0 + 0 +LINE + 5 +1CC0 + 8 +0 + 62 + 0 + 10 +16914.781756 + 20 +6880.0 + 30 +0.0 + 11 +16908.523948 + 21 +6890.838841 + 31 +0.0 + 0 +LINE + 5 +1CC1 + 8 +0 + 62 + 0 + 10 +16871.023948 + 20 +6955.790747 + 30 +0.0 + 11 +16852.273948 + 21 +6988.266699 + 31 +0.0 + 0 +LINE + 5 +1CC2 + 8 +0 + 62 + 0 + 10 +16814.773948 + 20 +7053.218605 + 30 +0.0 + 11 +16799.311702 + 21 +7080.0 + 31 +0.0 + 0 +LINE + 5 +1CC3 + 8 +0 + 62 + 0 + 10 +16871.023948 + 20 +6890.838841 + 30 +0.0 + 11 +16852.273948 + 21 +6923.314794 + 31 +0.0 + 0 +LINE + 5 +1CC4 + 8 +0 + 62 + 0 + 10 +16814.773948 + 20 +6988.266699 + 30 +0.0 + 11 +16796.023948 + 21 +7020.742652 + 31 +0.0 + 0 +LINE + 5 +1CC5 + 8 +0 + 62 + 0 + 10 +16814.773948 + 20 +6923.314794 + 30 +0.0 + 11 +16796.023948 + 21 +6955.790747 + 31 +0.0 + 0 +LINE + 5 +1CC6 + 8 +0 + 62 + 0 + 10 +16758.523948 + 20 +7020.742652 + 30 +0.0 + 11 +16739.773948 + 21 +7053.218605 + 31 +0.0 + 0 +LINE + 5 +1CC7 + 8 +0 + 62 + 0 + 10 +16802.281756 + 20 +6880.0 + 30 +0.0 + 11 +16796.023948 + 21 +6890.838842 + 31 +0.0 + 0 +LINE + 5 +1CC8 + 8 +0 + 62 + 0 + 10 +16758.523948 + 20 +6955.790747 + 30 +0.0 + 11 +16739.773948 + 21 +6988.2667 + 31 +0.0 + 0 +LINE + 5 +1CC9 + 8 +0 + 62 + 0 + 10 +16702.273948 + 20 +7053.218605 + 30 +0.0 + 11 +16686.811702 + 21 +7080.0 + 31 +0.0 + 0 +LINE + 5 +1CCA + 8 +0 + 62 + 0 + 10 +16758.523948 + 20 +6890.838842 + 30 +0.0 + 11 +16739.773948 + 21 +6923.314794 + 31 +0.0 + 0 +LINE + 5 +1CCB + 8 +0 + 62 + 0 + 10 +16702.273948 + 20 +6988.2667 + 30 +0.0 + 11 +16683.523948 + 21 +7020.742652 + 31 +0.0 + 0 +LINE + 5 +1CCC + 8 +0 + 62 + 0 + 10 +16702.273948 + 20 +6923.314794 + 30 +0.0 + 11 +16683.523948 + 21 +6955.790747 + 31 +0.0 + 0 +LINE + 5 +1CCD + 8 +0 + 62 + 0 + 10 +16646.023948 + 20 +7020.742652 + 30 +0.0 + 11 +16627.273948 + 21 +7053.218605 + 31 +0.0 + 0 +LINE + 5 +1CCE + 8 +0 + 62 + 0 + 10 +16689.781757 + 20 +6880.0 + 30 +0.0 + 11 +16683.523948 + 21 +6890.838842 + 31 +0.0 + 0 +LINE + 5 +1CCF + 8 +0 + 62 + 0 + 10 +16646.023948 + 20 +6955.790747 + 30 +0.0 + 11 +16627.273948 + 21 +6988.2667 + 31 +0.0 + 0 +LINE + 5 +1CD0 + 8 +0 + 62 + 0 + 10 +16589.773948 + 20 +7053.218605 + 30 +0.0 + 11 +16574.311703 + 21 +7080.0 + 31 +0.0 + 0 +LINE + 5 +1CD1 + 8 +0 + 62 + 0 + 10 +16646.023948 + 20 +6890.838842 + 30 +0.0 + 11 +16627.273948 + 21 +6923.314795 + 31 +0.0 + 0 +LINE + 5 +1CD2 + 8 +0 + 62 + 0 + 10 +16589.773948 + 20 +6988.2667 + 30 +0.0 + 11 +16571.023948 + 21 +7020.742652 + 31 +0.0 + 0 +LINE + 5 +1CD3 + 8 +0 + 62 + 0 + 10 +16589.773949 + 20 +6923.314795 + 30 +0.0 + 11 +16571.023949 + 21 +6955.790747 + 31 +0.0 + 0 +LINE + 5 +1CD4 + 8 +0 + 62 + 0 + 10 +16533.523949 + 20 +7020.742652 + 30 +0.0 + 11 +16514.773949 + 21 +7053.218605 + 31 +0.0 + 0 +LINE + 5 +1CD5 + 8 +0 + 62 + 0 + 10 +16577.281757 + 20 +6880.0 + 30 +0.0 + 11 +16571.023949 + 21 +6890.838842 + 31 +0.0 + 0 +LINE + 5 +1CD6 + 8 +0 + 62 + 0 + 10 +16533.523949 + 20 +6955.790747 + 30 +0.0 + 11 +16514.773949 + 21 +6988.2667 + 31 +0.0 + 0 +LINE + 5 +1CD7 + 8 +0 + 62 + 0 + 10 +16477.273949 + 20 +7053.218605 + 30 +0.0 + 11 +16461.811703 + 21 +7080.0 + 31 +0.0 + 0 +LINE + 5 +1CD8 + 8 +0 + 62 + 0 + 10 +16533.523949 + 20 +6890.838842 + 30 +0.0 + 11 +16514.773949 + 21 +6923.314795 + 31 +0.0 + 0 +LINE + 5 +1CD9 + 8 +0 + 62 + 0 + 10 +16477.273949 + 20 +6988.2667 + 30 +0.0 + 11 +16458.523949 + 21 +7020.742653 + 31 +0.0 + 0 +LINE + 5 +1CDA + 8 +0 + 62 + 0 + 10 +16477.273949 + 20 +6923.314795 + 30 +0.0 + 11 +16458.523949 + 21 +6955.790747 + 31 +0.0 + 0 +LINE + 5 +1CDB + 8 +0 + 62 + 0 + 10 +16464.781758 + 20 +6880.0 + 30 +0.0 + 11 +16458.523949 + 21 +6890.838842 + 31 +0.0 + 0 +LINE + 5 +1CDC + 8 +0 + 62 + 0 + 10 +17027.281755 + 20 +6880.0 + 30 +0.0 + 11 +17021.023947 + 21 +6890.838841 + 31 +0.0 + 0 +LINE + 5 +1CDD + 8 +0 + 62 + 0 + 10 +16983.523947 + 20 +6955.790746 + 30 +0.0 + 11 +16964.773947 + 21 +6988.266699 + 31 +0.0 + 0 +LINE + 5 +1CDE + 8 +0 + 62 + 0 + 10 +16927.273947 + 20 +7053.218604 + 30 +0.0 + 11 +16911.811701 + 21 +7080.0 + 31 +0.0 + 0 +LINE + 5 +1CDF + 8 +0 + 62 + 0 + 10 +17039.773947 + 20 +6923.314794 + 30 +0.0 + 11 +17021.023947 + 21 +6955.790746 + 31 +0.0 + 0 +LINE + 5 +1CE0 + 8 +0 + 62 + 0 + 10 +16983.523947 + 20 +7020.742652 + 30 +0.0 + 11 +16964.773947 + 21 +7053.218604 + 31 +0.0 + 0 +LINE + 5 +1CE1 + 8 +0 + 62 + 0 + 10 +17096.023947 + 20 +6890.838841 + 30 +0.0 + 11 +17077.273947 + 21 +6923.314794 + 31 +0.0 + 0 +LINE + 5 +1CE2 + 8 +0 + 62 + 0 + 10 +17039.773947 + 20 +6988.266699 + 30 +0.0 + 11 +17021.023947 + 21 +7020.742652 + 31 +0.0 + 0 +LINE + 5 +1CE3 + 8 +0 + 62 + 0 + 10 +17139.781755 + 20 +6880.0 + 30 +0.0 + 11 +17133.523947 + 21 +6890.838841 + 31 +0.0 + 0 +LINE + 5 +1CE4 + 8 +0 + 62 + 0 + 10 +17096.023947 + 20 +6955.790746 + 30 +0.0 + 11 +17077.273947 + 21 +6988.266699 + 31 +0.0 + 0 +LINE + 5 +1CE5 + 8 +0 + 62 + 0 + 10 +17039.773947 + 20 +7053.218604 + 30 +0.0 + 11 +17024.311701 + 21 +7080.0 + 31 +0.0 + 0 +LINE + 5 +1CE6 + 8 +0 + 62 + 0 + 10 +17152.273947 + 20 +6923.314794 + 30 +0.0 + 11 +17133.523947 + 21 +6955.790746 + 31 +0.0 + 0 +LINE + 5 +1CE7 + 8 +0 + 62 + 0 + 10 +17096.023947 + 20 +7020.742651 + 30 +0.0 + 11 +17077.273947 + 21 +7053.218604 + 31 +0.0 + 0 +LINE + 5 +1CE8 + 8 +0 + 62 + 0 + 10 +17208.523947 + 20 +6890.838841 + 30 +0.0 + 11 +17189.773947 + 21 +6923.314793 + 31 +0.0 + 0 +LINE + 5 +1CE9 + 8 +0 + 62 + 0 + 10 +17152.273947 + 20 +6988.266699 + 30 +0.0 + 11 +17133.523947 + 21 +7020.742651 + 31 +0.0 + 0 +LINE + 5 +1CEA + 8 +0 + 62 + 0 + 10 +17252.281754 + 20 +6880.0 + 30 +0.0 + 11 +17246.023946 + 21 +6890.838841 + 31 +0.0 + 0 +LINE + 5 +1CEB + 8 +0 + 62 + 0 + 10 +17208.523946 + 20 +6955.790746 + 30 +0.0 + 11 +17189.773946 + 21 +6988.266699 + 31 +0.0 + 0 +LINE + 5 +1CEC + 8 +0 + 62 + 0 + 10 +17152.273946 + 20 +7053.218604 + 30 +0.0 + 11 +17136.8117 + 21 +7080.0 + 31 +0.0 + 0 +LINE + 5 +1CED + 8 +0 + 62 + 0 + 10 +17264.773946 + 20 +6923.314793 + 30 +0.0 + 11 +17246.023946 + 21 +6955.790746 + 31 +0.0 + 0 +LINE + 5 +1CEE + 8 +0 + 62 + 0 + 10 +17208.523946 + 20 +7020.742651 + 30 +0.0 + 11 +17189.773946 + 21 +7053.218604 + 31 +0.0 + 0 +LINE + 5 +1CEF + 8 +0 + 62 + 0 + 10 +17264.773946 + 20 +6988.266699 + 30 +0.0 + 11 +17246.023946 + 21 +7020.742651 + 31 +0.0 + 0 +LINE + 5 +1CF0 + 8 +0 + 62 + 0 + 10 +17264.773946 + 20 +7053.218604 + 30 +0.0 + 11 +17249.3117 + 21 +7080.0 + 31 +0.0 + 0 +LINE + 5 +1CF1 + 8 +0 + 62 + 0 + 10 +16864.766138 + 20 +6880.0 + 30 +0.0 + 11 +16871.023982 + 21 +6890.838903 + 31 +0.0 + 0 +LINE + 5 +1CF2 + 8 +0 + 62 + 0 + 10 +16908.523982 + 20 +6955.790808 + 30 +0.0 + 11 +16927.273982 + 21 +6988.26676 + 31 +0.0 + 0 +LINE + 5 +1CF3 + 8 +0 + 62 + 0 + 10 +16964.773982 + 20 +7053.218666 + 30 +0.0 + 11 +16980.236192 + 21 +7080.0 + 31 +0.0 + 0 +LINE + 5 +1CF4 + 8 +0 + 62 + 0 + 10 +16852.273982 + 20 +6923.314855 + 30 +0.0 + 11 +16871.023982 + 21 +6955.790808 + 31 +0.0 + 0 +LINE + 5 +1CF5 + 8 +0 + 62 + 0 + 10 +16908.523982 + 20 +7020.742713 + 30 +0.0 + 11 +16927.273982 + 21 +7053.218666 + 31 +0.0 + 0 +LINE + 5 +1CF6 + 8 +0 + 62 + 0 + 10 +16796.023982 + 20 +6890.838902 + 30 +0.0 + 11 +16814.773982 + 21 +6923.314855 + 31 +0.0 + 0 +LINE + 5 +1CF7 + 8 +0 + 62 + 0 + 10 +16852.273982 + 20 +6988.26676 + 30 +0.0 + 11 +16871.023982 + 21 +7020.742713 + 31 +0.0 + 0 +LINE + 5 +1CF8 + 8 +0 + 62 + 0 + 10 +16752.266139 + 20 +6880.0 + 30 +0.0 + 11 +16758.523982 + 21 +6890.838902 + 31 +0.0 + 0 +LINE + 5 +1CF9 + 8 +0 + 62 + 0 + 10 +16796.023982 + 20 +6955.790808 + 30 +0.0 + 11 +16814.773982 + 21 +6988.26676 + 31 +0.0 + 0 +LINE + 5 +1CFA + 8 +0 + 62 + 0 + 10 +16852.273982 + 20 +7053.218666 + 30 +0.0 + 11 +16867.736193 + 21 +7080.0 + 31 +0.0 + 0 +LINE + 5 +1CFB + 8 +0 + 62 + 0 + 10 +16739.773982 + 20 +6923.314855 + 30 +0.0 + 11 +16758.523982 + 21 +6955.790808 + 31 +0.0 + 0 +LINE + 5 +1CFC + 8 +0 + 62 + 0 + 10 +16796.023982 + 20 +7020.742713 + 30 +0.0 + 11 +16814.773982 + 21 +7053.218665 + 31 +0.0 + 0 +LINE + 5 +1CFD + 8 +0 + 62 + 0 + 10 +16683.523982 + 20 +6890.838902 + 30 +0.0 + 11 +16702.273982 + 21 +6923.314855 + 31 +0.0 + 0 +LINE + 5 +1CFE + 8 +0 + 62 + 0 + 10 +16739.773982 + 20 +6988.26676 + 30 +0.0 + 11 +16758.523982 + 21 +7020.742713 + 31 +0.0 + 0 +LINE + 5 +1CFF + 8 +0 + 62 + 0 + 10 +16639.766139 + 20 +6880.0 + 30 +0.0 + 11 +16646.023982 + 21 +6890.838902 + 31 +0.0 + 0 +LINE + 5 +1D00 + 8 +0 + 62 + 0 + 10 +16683.523982 + 20 +6955.790807 + 30 +0.0 + 11 +16702.273982 + 21 +6988.26676 + 31 +0.0 + 0 +LINE + 5 +1D01 + 8 +0 + 62 + 0 + 10 +16739.773982 + 20 +7053.218665 + 30 +0.0 + 11 +16755.236193 + 21 +7080.0 + 31 +0.0 + 0 +LINE + 5 +1D02 + 8 +0 + 62 + 0 + 10 +16627.273983 + 20 +6923.314855 + 30 +0.0 + 11 +16646.023983 + 21 +6955.790807 + 31 +0.0 + 0 +LINE + 5 +1D03 + 8 +0 + 62 + 0 + 10 +16683.523983 + 20 +7020.742713 + 30 +0.0 + 11 +16702.273983 + 21 +7053.218665 + 31 +0.0 + 0 +LINE + 5 +1D04 + 8 +0 + 62 + 0 + 10 +16571.023983 + 20 +6890.838902 + 30 +0.0 + 11 +16589.773983 + 21 +6923.314855 + 31 +0.0 + 0 +LINE + 5 +1D05 + 8 +0 + 62 + 0 + 10 +16627.273983 + 20 +6988.26676 + 30 +0.0 + 11 +16646.023983 + 21 +7020.742713 + 31 +0.0 + 0 +LINE + 5 +1D06 + 8 +0 + 62 + 0 + 10 +16527.26614 + 20 +6880.0 + 30 +0.0 + 11 +16533.523983 + 21 +6890.838902 + 31 +0.0 + 0 +LINE + 5 +1D07 + 8 +0 + 62 + 0 + 10 +16571.023983 + 20 +6955.790807 + 30 +0.0 + 11 +16589.773983 + 21 +6988.26676 + 31 +0.0 + 0 +LINE + 5 +1D08 + 8 +0 + 62 + 0 + 10 +16627.273983 + 20 +7053.218665 + 30 +0.0 + 11 +16642.736194 + 21 +7080.0 + 31 +0.0 + 0 +LINE + 5 +1D09 + 8 +0 + 62 + 0 + 10 +16514.773983 + 20 +6923.314854 + 30 +0.0 + 11 +16533.523983 + 21 +6955.790807 + 31 +0.0 + 0 +LINE + 5 +1D0A + 8 +0 + 62 + 0 + 10 +16571.023983 + 20 +7020.742712 + 30 +0.0 + 11 +16589.773983 + 21 +7053.218665 + 31 +0.0 + 0 +LINE + 5 +1D0B + 8 +0 + 62 + 0 + 10 +16458.523983 + 20 +6890.838902 + 30 +0.0 + 11 +16477.273983 + 21 +6923.314854 + 31 +0.0 + 0 +LINE + 5 +1D0C + 8 +0 + 62 + 0 + 10 +16514.773983 + 20 +6988.26676 + 30 +0.0 + 11 +16533.523983 + 21 +7020.742712 + 31 +0.0 + 0 +LINE + 5 +1D0D + 8 +0 + 62 + 0 + 10 +16458.523983 + 20 +6955.790807 + 30 +0.0 + 11 +16477.273983 + 21 +6988.26676 + 31 +0.0 + 0 +LINE + 5 +1D0E + 8 +0 + 62 + 0 + 10 +16514.773983 + 20 +7053.218665 + 30 +0.0 + 11 +16530.236194 + 21 +7080.0 + 31 +0.0 + 0 +LINE + 5 +1D0F + 8 +0 + 62 + 0 + 10 +16458.523983 + 20 +7020.742712 + 30 +0.0 + 11 +16477.273983 + 21 +7053.218665 + 31 +0.0 + 0 +LINE + 5 +1D10 + 8 +0 + 62 + 0 + 10 +16908.523982 + 20 +6890.838903 + 30 +0.0 + 11 +16927.273982 + 21 +6923.314855 + 31 +0.0 + 0 +LINE + 5 +1D11 + 8 +0 + 62 + 0 + 10 +16964.773982 + 20 +6988.266761 + 30 +0.0 + 11 +16983.523982 + 21 +7020.742713 + 31 +0.0 + 0 +LINE + 5 +1D12 + 8 +0 + 62 + 0 + 10 +16964.773981 + 20 +6923.314855 + 30 +0.0 + 11 +16983.523981 + 21 +6955.790808 + 31 +0.0 + 0 +LINE + 5 +1D13 + 8 +0 + 62 + 0 + 10 +17021.023981 + 20 +7020.742713 + 30 +0.0 + 11 +17039.773981 + 21 +7053.218666 + 31 +0.0 + 0 +LINE + 5 +1D14 + 8 +0 + 62 + 0 + 10 +16977.266138 + 20 +6880.0 + 30 +0.0 + 11 +16983.523981 + 21 +6890.838903 + 31 +0.0 + 0 +LINE + 5 +1D15 + 8 +0 + 62 + 0 + 10 +17021.023981 + 20 +6955.790808 + 30 +0.0 + 11 +17039.773981 + 21 +6988.266761 + 31 +0.0 + 0 +LINE + 5 +1D16 + 8 +0 + 62 + 0 + 10 +17077.273981 + 20 +7053.218666 + 30 +0.0 + 11 +17092.736192 + 21 +7080.0 + 31 +0.0 + 0 +LINE + 5 +1D17 + 8 +0 + 62 + 0 + 10 +17021.023981 + 20 +6890.838903 + 30 +0.0 + 11 +17039.773981 + 21 +6923.314855 + 31 +0.0 + 0 +LINE + 5 +1D18 + 8 +0 + 62 + 0 + 10 +17077.273981 + 20 +6988.266761 + 30 +0.0 + 11 +17096.023981 + 21 +7020.742713 + 31 +0.0 + 0 +LINE + 5 +1D19 + 8 +0 + 62 + 0 + 10 +17077.273981 + 20 +6923.314856 + 30 +0.0 + 11 +17096.023981 + 21 +6955.790808 + 31 +0.0 + 0 +LINE + 5 +1D1A + 8 +0 + 62 + 0 + 10 +17133.523981 + 20 +7020.742713 + 30 +0.0 + 11 +17152.273981 + 21 +7053.218666 + 31 +0.0 + 0 +LINE + 5 +1D1B + 8 +0 + 62 + 0 + 10 +17089.766137 + 20 +6880.0 + 30 +0.0 + 11 +17096.023981 + 21 +6890.838903 + 31 +0.0 + 0 +LINE + 5 +1D1C + 8 +0 + 62 + 0 + 10 +17133.523981 + 20 +6955.790808 + 30 +0.0 + 11 +17152.273981 + 21 +6988.266761 + 31 +0.0 + 0 +LINE + 5 +1D1D + 8 +0 + 62 + 0 + 10 +17189.773981 + 20 +7053.218666 + 30 +0.0 + 11 +17205.236191 + 21 +7080.0 + 31 +0.0 + 0 +LINE + 5 +1D1E + 8 +0 + 62 + 0 + 10 +17133.523981 + 20 +6890.838903 + 30 +0.0 + 11 +17152.273981 + 21 +6923.314856 + 31 +0.0 + 0 +LINE + 5 +1D1F + 8 +0 + 62 + 0 + 10 +17189.773981 + 20 +6988.266761 + 30 +0.0 + 11 +17208.523981 + 21 +7020.742714 + 31 +0.0 + 0 +LINE + 5 +1D20 + 8 +0 + 62 + 0 + 10 +17189.773981 + 20 +6923.314856 + 30 +0.0 + 11 +17208.523981 + 21 +6955.790808 + 31 +0.0 + 0 +LINE + 5 +1D21 + 8 +0 + 62 + 0 + 10 +17246.023981 + 20 +7020.742714 + 30 +0.0 + 11 +17264.773981 + 21 +7053.218666 + 31 +0.0 + 0 +LINE + 5 +1D22 + 8 +0 + 62 + 0 + 10 +17202.266137 + 20 +6880.0 + 30 +0.0 + 11 +17208.523981 + 21 +6890.838903 + 31 +0.0 + 0 +LINE + 5 +1D23 + 8 +0 + 62 + 0 + 10 +17246.023981 + 20 +6955.790808 + 30 +0.0 + 11 +17264.773981 + 21 +6988.266761 + 31 +0.0 + 0 +LINE + 5 +1D24 + 8 +0 + 62 + 0 + 10 +17246.023981 + 20 +6890.838903 + 30 +0.0 + 11 +17264.773981 + 21 +6923.314856 + 31 +0.0 + 0 +LINE + 5 +1D25 + 8 +0 + 62 + 0 + 10 +14829.178773 + 20 +7330.0 + 30 +0.0 + 11 +14954.178773 + 21 +7455.0 + 31 +0.0 + 0 +LINE + 5 +1D26 + 8 +0 + 62 + 0 + 10 +15253.442842 + 20 +7330.0 + 30 +0.0 + 11 +15378.442842 + 21 +7455.0 + 31 +0.0 + 0 +LINE + 5 +1D27 + 8 +0 + 62 + 0 + 10 +14899.889451 + 20 +7330.0 + 30 +0.0 + 11 +15024.889451 + 21 +7455.0 + 31 +0.0 + 0 +LINE + 5 +1D28 + 8 +0 + 62 + 0 + 10 +15324.15352 + 20 +7330.0 + 30 +0.0 + 11 +15449.15352 + 21 +7455.0 + 31 +0.0 + 0 +LINE + 5 +1D29 + 8 +0 + 62 + 0 + 10 +14970.60013 + 20 +7330.0 + 30 +0.0 + 11 +15095.60013 + 21 +7455.0 + 31 +0.0 + 0 +LINE + 5 +1D2A + 8 +0 + 62 + 0 + 10 +15394.864199 + 20 +7330.0 + 30 +0.0 + 11 +15519.864199 + 21 +7455.0 + 31 +0.0 + 0 +LINE + 5 +1D2B + 8 +0 + 62 + 0 + 10 +15041.310808 + 20 +7330.0 + 30 +0.0 + 11 +15166.310808 + 21 +7455.0 + 31 +0.0 + 0 +LINE + 5 +1D2C + 8 +0 + 62 + 0 + 10 +14679.649752 + 20 +7392.603013 + 30 +0.0 + 11 +14742.046739 + 21 +7455.0 + 31 +0.0 + 0 +LINE + 5 +1D2D + 8 +0 + 62 + 0 + 10 +15465.574877 + 20 +7330.0 + 30 +0.0 + 11 +15590.574877 + 21 +7455.0 + 31 +0.0 + 0 +LINE + 5 +1D2E + 8 +0 + 62 + 0 + 10 +14947.376825 + 20 +7130.0 + 30 +0.0 + 11 +14993.153328 + 21 +7175.776503 + 31 +0.0 + 0 +LINE + 5 +1D2F + 8 +0 + 62 + 0 + 10 +15046.186337 + 20 +7228.809512 + 30 +0.0 + 11 +15099.219345 + 21 +7281.84252 + 31 +0.0 + 0 +LINE + 5 +1D30 + 8 +0 + 62 + 0 + 10 +14841.310808 + 20 +7130.0 + 30 +0.0 + 11 +14887.087311 + 21 +7175.776503 + 31 +0.0 + 0 +LINE + 5 +1D31 + 8 +0 + 62 + 0 + 10 +14940.120319 + 20 +7228.809512 + 30 +0.0 + 11 +14993.153328 + 21 +7281.84252 + 31 +0.0 + 0 +LINE + 5 +1D32 + 8 +0 + 62 + 0 + 10 +14735.244791 + 20 +7130.0 + 30 +0.0 + 11 +14781.021294 + 21 +7175.776503 + 31 +0.0 + 0 +LINE + 5 +1D33 + 8 +0 + 62 + 0 + 10 +14834.054302 + 20 +7228.809512 + 30 +0.0 + 11 +14887.087311 + 21 +7281.84252 + 31 +0.0 + 0 +LINE + 5 +1D34 + 8 +0 + 62 + 0 + 10 +14727.988285 + 20 +7228.809512 + 30 +0.0 + 11 +14781.021294 + 21 +7281.84252 + 31 +0.0 + 0 +LINE + 5 +1D35 + 8 +0 + 62 + 0 + 10 +15053.442842 + 20 +7130.0 + 30 +0.0 + 11 +15099.219345 + 21 +7175.776503 + 31 +0.0 + 0 +LINE + 5 +1D36 + 8 +0 + 62 + 0 + 10 +15152.252354 + 20 +7228.809512 + 30 +0.0 + 11 +15205.285362 + 21 +7281.84252 + 31 +0.0 + 0 +LINE + 5 +1D37 + 8 +0 + 62 + 0 + 10 +15159.508859 + 20 +7130.0 + 30 +0.0 + 11 +15205.285362 + 21 +7175.776503 + 31 +0.0 + 0 +LINE + 5 +1D38 + 8 +0 + 62 + 0 + 10 +15258.318371 + 20 +7228.809512 + 30 +0.0 + 11 +15311.35138 + 21 +7281.84252 + 31 +0.0 + 0 +LINE + 5 +1D39 + 8 +0 + 62 + 0 + 10 +15265.574877 + 20 +7130.0 + 30 +0.0 + 11 +15311.35138 + 21 +7175.776503 + 31 +0.0 + 0 +LINE + 5 +1D3A + 8 +0 + 62 + 0 + 10 +15364.384388 + 20 +7228.809512 + 30 +0.0 + 11 +15417.417397 + 21 +7281.84252 + 31 +0.0 + 0 +LINE + 5 +1D3B + 8 +0 + 62 + 0 + 10 +15371.640894 + 20 +7130.0 + 30 +0.0 + 11 +15417.417397 + 21 +7175.776503 + 31 +0.0 + 0 +LINE + 5 +1D3C + 8 +0 + 62 + 0 + 10 +15470.450405 + 20 +7228.809512 + 30 +0.0 + 11 +15523.483414 + 21 +7281.84252 + 31 +0.0 + 0 +LINE + 5 +1D3D + 8 +0 + 62 + 0 + 10 +15477.706911 + 20 +7130.0 + 30 +0.0 + 11 +15523.483414 + 21 +7175.776503 + 31 +0.0 + 0 +LINE + 5 +1D3E + 8 +0 + 62 + 0 + 10 +15576.516423 + 20 +7228.809512 + 30 +0.0 + 11 +15627.274018 + 21 +7279.567107 + 31 +0.0 + 0 +LINE + 5 +1D3F + 8 +0 + 62 + 0 + 10 +15583.772928 + 20 +7130.0 + 30 +0.0 + 11 +15627.274018 + 21 +7173.50109 + 31 +0.0 + 0 +LINE + 5 +1D40 + 8 +0 + 62 + 0 + 10 +14733.524018 + 20 +6955.790748 + 30 +0.0 + 11 +14771.024018 + 21 +6955.790748 + 31 +0.0 + 0 +LINE + 5 +1D41 + 8 +0 + 62 + 0 + 10 +14846.024018 + 20 +6955.790748 + 30 +0.0 + 11 +14883.524018 + 21 +6955.790748 + 31 +0.0 + 0 +LINE + 5 +1D42 + 8 +0 + 62 + 0 + 10 +14958.524018 + 20 +6955.790748 + 30 +0.0 + 11 +14996.024018 + 21 +6955.790748 + 31 +0.0 + 0 +LINE + 5 +1D43 + 8 +0 + 62 + 0 + 10 +15071.024018 + 20 +6955.790748 + 30 +0.0 + 11 +15108.524018 + 21 +6955.790748 + 31 +0.0 + 0 +LINE + 5 +1D44 + 8 +0 + 62 + 0 + 10 +15183.524018 + 20 +6955.790748 + 30 +0.0 + 11 +15221.024018 + 21 +6955.790748 + 31 +0.0 + 0 +LINE + 5 +1D45 + 8 +0 + 62 + 0 + 10 +15296.024018 + 20 +6955.790748 + 30 +0.0 + 11 +15333.524018 + 21 +6955.790748 + 31 +0.0 + 0 +LINE + 5 +1D46 + 8 +0 + 62 + 0 + 10 +15408.524018 + 20 +6955.790748 + 30 +0.0 + 11 +15446.024018 + 21 +6955.790748 + 31 +0.0 + 0 +LINE + 5 +1D47 + 8 +0 + 62 + 0 + 10 +15521.024018 + 20 +6955.790748 + 30 +0.0 + 11 +15558.524018 + 21 +6955.790748 + 31 +0.0 + 0 +LINE + 5 +1D48 + 8 +0 + 62 + 0 + 10 +14677.274018 + 20 +6988.2667 + 30 +0.0 + 11 +14714.774018 + 21 +6988.2667 + 31 +0.0 + 0 +LINE + 5 +1D49 + 8 +0 + 62 + 0 + 10 +14789.774018 + 20 +6988.2667 + 30 +0.0 + 11 +14827.274018 + 21 +6988.2667 + 31 +0.0 + 0 +LINE + 5 +1D4A + 8 +0 + 62 + 0 + 10 +14902.274018 + 20 +6988.2667 + 30 +0.0 + 11 +14939.774018 + 21 +6988.2667 + 31 +0.0 + 0 +LINE + 5 +1D4B + 8 +0 + 62 + 0 + 10 +15014.774018 + 20 +6988.2667 + 30 +0.0 + 11 +15052.274018 + 21 +6988.2667 + 31 +0.0 + 0 +LINE + 5 +1D4C + 8 +0 + 62 + 0 + 10 +15127.274018 + 20 +6988.2667 + 30 +0.0 + 11 +15164.774018 + 21 +6988.2667 + 31 +0.0 + 0 +LINE + 5 +1D4D + 8 +0 + 62 + 0 + 10 +15239.774018 + 20 +6988.2667 + 30 +0.0 + 11 +15277.274018 + 21 +6988.2667 + 31 +0.0 + 0 +LINE + 5 +1D4E + 8 +0 + 62 + 0 + 10 +15352.274018 + 20 +6988.2667 + 30 +0.0 + 11 +15389.774018 + 21 +6988.2667 + 31 +0.0 + 0 +LINE + 5 +1D4F + 8 +0 + 62 + 0 + 10 +15464.774018 + 20 +6988.2667 + 30 +0.0 + 11 +15502.274018 + 21 +6988.2667 + 31 +0.0 + 0 +LINE + 5 +1D50 + 8 +0 + 62 + 0 + 10 +15577.274018 + 20 +6988.2667 + 30 +0.0 + 11 +15614.774018 + 21 +6988.2667 + 31 +0.0 + 0 +LINE + 5 +1D51 + 8 +0 + 62 + 0 + 10 +14733.524018 + 20 +7020.742653 + 30 +0.0 + 11 +14771.024018 + 21 +7020.742653 + 31 +0.0 + 0 +LINE + 5 +1D52 + 8 +0 + 62 + 0 + 10 +14846.024018 + 20 +7020.742653 + 30 +0.0 + 11 +14883.524018 + 21 +7020.742653 + 31 +0.0 + 0 +LINE + 5 +1D53 + 8 +0 + 62 + 0 + 10 +14958.524018 + 20 +7020.742653 + 30 +0.0 + 11 +14996.024018 + 21 +7020.742653 + 31 +0.0 + 0 +LINE + 5 +1D54 + 8 +0 + 62 + 0 + 10 +15071.024018 + 20 +7020.742653 + 30 +0.0 + 11 +15108.524018 + 21 +7020.742653 + 31 +0.0 + 0 +LINE + 5 +1D55 + 8 +0 + 62 + 0 + 10 +15183.524018 + 20 +7020.742653 + 30 +0.0 + 11 +15221.024018 + 21 +7020.742653 + 31 +0.0 + 0 +LINE + 5 +1D56 + 8 +0 + 62 + 0 + 10 +15296.024018 + 20 +7020.742653 + 30 +0.0 + 11 +15333.524018 + 21 +7020.742653 + 31 +0.0 + 0 +LINE + 5 +1D57 + 8 +0 + 62 + 0 + 10 +15408.524018 + 20 +7020.742653 + 30 +0.0 + 11 +15446.024018 + 21 +7020.742653 + 31 +0.0 + 0 +LINE + 5 +1D58 + 8 +0 + 62 + 0 + 10 +15521.024018 + 20 +7020.742653 + 30 +0.0 + 11 +15558.524018 + 21 +7020.742653 + 31 +0.0 + 0 +LINE + 5 +1D59 + 8 +0 + 62 + 0 + 10 +14677.274018 + 20 +7053.218605 + 30 +0.0 + 11 +14714.774018 + 21 +7053.218605 + 31 +0.0 + 0 +LINE + 5 +1D5A + 8 +0 + 62 + 0 + 10 +14789.774018 + 20 +7053.218605 + 30 +0.0 + 11 +14827.274018 + 21 +7053.218605 + 31 +0.0 + 0 +LINE + 5 +1D5B + 8 +0 + 62 + 0 + 10 +14902.274018 + 20 +7053.218605 + 30 +0.0 + 11 +14939.774018 + 21 +7053.218605 + 31 +0.0 + 0 +LINE + 5 +1D5C + 8 +0 + 62 + 0 + 10 +15014.774018 + 20 +7053.218605 + 30 +0.0 + 11 +15052.274018 + 21 +7053.218605 + 31 +0.0 + 0 +LINE + 5 +1D5D + 8 +0 + 62 + 0 + 10 +15127.274018 + 20 +7053.218605 + 30 +0.0 + 11 +15164.774018 + 21 +7053.218605 + 31 +0.0 + 0 +LINE + 5 +1D5E + 8 +0 + 62 + 0 + 10 +15239.774018 + 20 +7053.218605 + 30 +0.0 + 11 +15277.274018 + 21 +7053.218605 + 31 +0.0 + 0 +LINE + 5 +1D5F + 8 +0 + 62 + 0 + 10 +15352.274018 + 20 +7053.218605 + 30 +0.0 + 11 +15389.774018 + 21 +7053.218605 + 31 +0.0 + 0 +LINE + 5 +1D60 + 8 +0 + 62 + 0 + 10 +15464.774018 + 20 +7053.218605 + 30 +0.0 + 11 +15502.274018 + 21 +7053.218605 + 31 +0.0 + 0 +LINE + 5 +1D61 + 8 +0 + 62 + 0 + 10 +15577.274018 + 20 +7053.218605 + 30 +0.0 + 11 +15614.774018 + 21 +7053.218605 + 31 +0.0 + 0 +LINE + 5 +1D62 + 8 +0 + 62 + 0 + 10 +14677.274018 + 20 +6923.314795 + 30 +0.0 + 11 +14714.774018 + 21 +6923.314795 + 31 +0.0 + 0 +LINE + 5 +1D63 + 8 +0 + 62 + 0 + 10 +14789.774018 + 20 +6923.314795 + 30 +0.0 + 11 +14827.274018 + 21 +6923.314795 + 31 +0.0 + 0 +LINE + 5 +1D64 + 8 +0 + 62 + 0 + 10 +14902.274018 + 20 +6923.314795 + 30 +0.0 + 11 +14939.774018 + 21 +6923.314795 + 31 +0.0 + 0 +LINE + 5 +1D65 + 8 +0 + 62 + 0 + 10 +15014.774018 + 20 +6923.314795 + 30 +0.0 + 11 +15052.274018 + 21 +6923.314795 + 31 +0.0 + 0 +LINE + 5 +1D66 + 8 +0 + 62 + 0 + 10 +15127.274018 + 20 +6923.314795 + 30 +0.0 + 11 +15164.774018 + 21 +6923.314795 + 31 +0.0 + 0 +LINE + 5 +1D67 + 8 +0 + 62 + 0 + 10 +15239.774018 + 20 +6923.314795 + 30 +0.0 + 11 +15277.274018 + 21 +6923.314795 + 31 +0.0 + 0 +LINE + 5 +1D68 + 8 +0 + 62 + 0 + 10 +15352.274018 + 20 +6923.314795 + 30 +0.0 + 11 +15389.774018 + 21 +6923.314795 + 31 +0.0 + 0 +LINE + 5 +1D69 + 8 +0 + 62 + 0 + 10 +15464.774018 + 20 +6923.314795 + 30 +0.0 + 11 +15502.274018 + 21 +6923.314795 + 31 +0.0 + 0 +LINE + 5 +1D6A + 8 +0 + 62 + 0 + 10 +15577.274018 + 20 +6923.314795 + 30 +0.0 + 11 +15614.774018 + 21 +6923.314795 + 31 +0.0 + 0 +LINE + 5 +1D6B + 8 +0 + 62 + 0 + 10 +14733.524018 + 20 +6890.838843 + 30 +0.0 + 11 +14771.024018 + 21 +6890.838843 + 31 +0.0 + 0 +LINE + 5 +1D6C + 8 +0 + 62 + 0 + 10 +14846.024018 + 20 +6890.838843 + 30 +0.0 + 11 +14883.524018 + 21 +6890.838843 + 31 +0.0 + 0 +LINE + 5 +1D6D + 8 +0 + 62 + 0 + 10 +14958.524018 + 20 +6890.838843 + 30 +0.0 + 11 +14996.024018 + 21 +6890.838843 + 31 +0.0 + 0 +LINE + 5 +1D6E + 8 +0 + 62 + 0 + 10 +15071.024018 + 20 +6890.838843 + 30 +0.0 + 11 +15108.524018 + 21 +6890.838843 + 31 +0.0 + 0 +LINE + 5 +1D6F + 8 +0 + 62 + 0 + 10 +15183.524018 + 20 +6890.838843 + 30 +0.0 + 11 +15221.024018 + 21 +6890.838843 + 31 +0.0 + 0 +LINE + 5 +1D70 + 8 +0 + 62 + 0 + 10 +15296.024018 + 20 +6890.838843 + 30 +0.0 + 11 +15333.524018 + 21 +6890.838843 + 31 +0.0 + 0 +LINE + 5 +1D71 + 8 +0 + 62 + 0 + 10 +15408.524018 + 20 +6890.838843 + 30 +0.0 + 11 +15446.024018 + 21 +6890.838843 + 31 +0.0 + 0 +LINE + 5 +1D72 + 8 +0 + 62 + 0 + 10 +15521.024018 + 20 +6890.838843 + 30 +0.0 + 11 +15558.524018 + 21 +6890.838843 + 31 +0.0 + 0 +LINE + 5 +1D73 + 8 +0 + 62 + 0 + 10 +15127.273953 + 20 +6923.314797 + 30 +0.0 + 11 +15108.523953 + 21 +6955.79075 + 31 +0.0 + 0 +LINE + 5 +1D74 + 8 +0 + 62 + 0 + 10 +15071.023953 + 20 +7020.742655 + 30 +0.0 + 11 +15052.273953 + 21 +7053.218608 + 31 +0.0 + 0 +LINE + 5 +1D75 + 8 +0 + 62 + 0 + 10 +15114.781763 + 20 +6880.0 + 30 +0.0 + 11 +15108.523953 + 21 +6890.838845 + 31 +0.0 + 0 +LINE + 5 +1D76 + 8 +0 + 62 + 0 + 10 +15071.023953 + 20 +6955.79075 + 30 +0.0 + 11 +15052.273953 + 21 +6988.266703 + 31 +0.0 + 0 +LINE + 5 +1D77 + 8 +0 + 62 + 0 + 10 +15014.773953 + 20 +7053.218608 + 30 +0.0 + 11 +14999.31171 + 21 +7080.0 + 31 +0.0 + 0 +LINE + 5 +1D78 + 8 +0 + 62 + 0 + 10 +15071.023954 + 20 +6890.838845 + 30 +0.0 + 11 +15052.273954 + 21 +6923.314797 + 31 +0.0 + 0 +LINE + 5 +1D79 + 8 +0 + 62 + 0 + 10 +15014.773954 + 20 +6988.266703 + 30 +0.0 + 11 +14996.023954 + 21 +7020.742655 + 31 +0.0 + 0 +LINE + 5 +1D7A + 8 +0 + 62 + 0 + 10 +15014.773954 + 20 +6923.314798 + 30 +0.0 + 11 +14996.023954 + 21 +6955.79075 + 31 +0.0 + 0 +LINE + 5 +1D7B + 8 +0 + 62 + 0 + 10 +14958.523954 + 20 +7020.742655 + 30 +0.0 + 11 +14939.773954 + 21 +7053.218608 + 31 +0.0 + 0 +LINE + 5 +1D7C + 8 +0 + 62 + 0 + 10 +15002.281764 + 20 +6880.0 + 30 +0.0 + 11 +14996.023954 + 21 +6890.838845 + 31 +0.0 + 0 +LINE + 5 +1D7D + 8 +0 + 62 + 0 + 10 +14958.523954 + 20 +6955.79075 + 30 +0.0 + 11 +14939.773954 + 21 +6988.266703 + 31 +0.0 + 0 +LINE + 5 +1D7E + 8 +0 + 62 + 0 + 10 +14902.273954 + 20 +7053.218608 + 30 +0.0 + 11 +14886.81171 + 21 +7080.0 + 31 +0.0 + 0 +LINE + 5 +1D7F + 8 +0 + 62 + 0 + 10 +14958.523954 + 20 +6890.838845 + 30 +0.0 + 11 +14939.773954 + 21 +6923.314798 + 31 +0.0 + 0 +LINE + 5 +1D80 + 8 +0 + 62 + 0 + 10 +14902.273954 + 20 +6988.266703 + 30 +0.0 + 11 +14883.523954 + 21 +7020.742656 + 31 +0.0 + 0 +LINE + 5 +1D81 + 8 +0 + 62 + 0 + 10 +14902.273954 + 20 +6923.314798 + 30 +0.0 + 11 +14883.523954 + 21 +6955.79075 + 31 +0.0 + 0 +LINE + 5 +1D82 + 8 +0 + 62 + 0 + 10 +14846.023954 + 20 +7020.742656 + 30 +0.0 + 11 +14827.273954 + 21 +7053.218608 + 31 +0.0 + 0 +LINE + 5 +1D83 + 8 +0 + 62 + 0 + 10 +14889.781764 + 20 +6880.0 + 30 +0.0 + 11 +14883.523954 + 21 +6890.838845 + 31 +0.0 + 0 +LINE + 5 +1D84 + 8 +0 + 62 + 0 + 10 +14846.023954 + 20 +6955.79075 + 30 +0.0 + 11 +14827.273954 + 21 +6988.266703 + 31 +0.0 + 0 +LINE + 5 +1D85 + 8 +0 + 62 + 0 + 10 +14789.773954 + 20 +7053.218608 + 30 +0.0 + 11 +14774.311711 + 21 +7080.0 + 31 +0.0 + 0 +LINE + 5 +1D86 + 8 +0 + 62 + 0 + 10 +14846.023954 + 20 +6890.838845 + 30 +0.0 + 11 +14827.273954 + 21 +6923.314798 + 31 +0.0 + 0 +LINE + 5 +1D87 + 8 +0 + 62 + 0 + 10 +14789.773954 + 20 +6988.266703 + 30 +0.0 + 11 +14771.023954 + 21 +7020.742656 + 31 +0.0 + 0 +LINE + 5 +1D88 + 8 +0 + 62 + 0 + 10 +14789.773954 + 20 +6923.314798 + 30 +0.0 + 11 +14771.023954 + 21 +6955.790751 + 31 +0.0 + 0 +LINE + 5 +1D89 + 8 +0 + 62 + 0 + 10 +14733.523954 + 20 +7020.742656 + 30 +0.0 + 11 +14714.773954 + 21 +7053.218609 + 31 +0.0 + 0 +LINE + 5 +1D8A + 8 +0 + 62 + 0 + 10 +14777.281765 + 20 +6880.0 + 30 +0.0 + 11 +14771.023955 + 21 +6890.838845 + 31 +0.0 + 0 +LINE + 5 +1D8B + 8 +0 + 62 + 0 + 10 +14733.523955 + 20 +6955.790751 + 30 +0.0 + 11 +14714.773955 + 21 +6988.266703 + 31 +0.0 + 0 +LINE + 5 +1D8C + 8 +0 + 62 + 0 + 10 +14733.523955 + 20 +6890.838845 + 30 +0.0 + 11 +14714.773955 + 21 +6923.314798 + 31 +0.0 + 0 +LINE + 5 +1D8D + 8 +0 + 62 + 0 + 10 +15183.523953 + 20 +6890.838845 + 30 +0.0 + 11 +15164.773953 + 21 +6923.314797 + 31 +0.0 + 0 +LINE + 5 +1D8E + 8 +0 + 62 + 0 + 10 +15127.273953 + 20 +6988.266703 + 30 +0.0 + 11 +15108.523953 + 21 +7020.742655 + 31 +0.0 + 0 +LINE + 5 +1D8F + 8 +0 + 62 + 0 + 10 +15227.281763 + 20 +6880.0 + 30 +0.0 + 11 +15221.023953 + 21 +6890.838845 + 31 +0.0 + 0 +LINE + 5 +1D90 + 8 +0 + 62 + 0 + 10 +15183.523953 + 20 +6955.79075 + 30 +0.0 + 11 +15164.773953 + 21 +6988.266702 + 31 +0.0 + 0 +LINE + 5 +1D91 + 8 +0 + 62 + 0 + 10 +15127.273953 + 20 +7053.218608 + 30 +0.0 + 11 +15111.811709 + 21 +7080.0 + 31 +0.0 + 0 +LINE + 5 +1D92 + 8 +0 + 62 + 0 + 10 +15239.773953 + 20 +6923.314797 + 30 +0.0 + 11 +15221.023953 + 21 +6955.79075 + 31 +0.0 + 0 +LINE + 5 +1D93 + 8 +0 + 62 + 0 + 10 +15183.523953 + 20 +7020.742655 + 30 +0.0 + 11 +15164.773953 + 21 +7053.218608 + 31 +0.0 + 0 +LINE + 5 +1D94 + 8 +0 + 62 + 0 + 10 +15296.023953 + 20 +6890.838844 + 30 +0.0 + 11 +15277.273953 + 21 +6923.314797 + 31 +0.0 + 0 +LINE + 5 +1D95 + 8 +0 + 62 + 0 + 10 +15239.773953 + 20 +6988.266702 + 30 +0.0 + 11 +15221.023953 + 21 +7020.742655 + 31 +0.0 + 0 +LINE + 5 +1D96 + 8 +0 + 62 + 0 + 10 +15339.781762 + 20 +6880.0 + 30 +0.0 + 11 +15333.523953 + 21 +6890.838844 + 31 +0.0 + 0 +LINE + 5 +1D97 + 8 +0 + 62 + 0 + 10 +15296.023953 + 20 +6955.79075 + 30 +0.0 + 11 +15277.273953 + 21 +6988.266702 + 31 +0.0 + 0 +LINE + 5 +1D98 + 8 +0 + 62 + 0 + 10 +15239.773953 + 20 +7053.218608 + 30 +0.0 + 11 +15224.311709 + 21 +7080.0 + 31 +0.0 + 0 +LINE + 5 +1D99 + 8 +0 + 62 + 0 + 10 +15352.273953 + 20 +6923.314797 + 30 +0.0 + 11 +15333.523953 + 21 +6955.79075 + 31 +0.0 + 0 +LINE + 5 +1D9A + 8 +0 + 62 + 0 + 10 +15296.023953 + 20 +7020.742655 + 30 +0.0 + 11 +15277.273953 + 21 +7053.218607 + 31 +0.0 + 0 +LINE + 5 +1D9B + 8 +0 + 62 + 0 + 10 +15408.523952 + 20 +6890.838844 + 30 +0.0 + 11 +15389.773952 + 21 +6923.314797 + 31 +0.0 + 0 +LINE + 5 +1D9C + 8 +0 + 62 + 0 + 10 +15352.273952 + 20 +6988.266702 + 30 +0.0 + 11 +15333.523952 + 21 +7020.742655 + 31 +0.0 + 0 +LINE + 5 +1D9D + 8 +0 + 62 + 0 + 10 +15452.281762 + 20 +6880.0 + 30 +0.0 + 11 +15446.023952 + 21 +6890.838844 + 31 +0.0 + 0 +LINE + 5 +1D9E + 8 +0 + 62 + 0 + 10 +15408.523952 + 20 +6955.790749 + 30 +0.0 + 11 +15389.773952 + 21 +6988.266702 + 31 +0.0 + 0 +LINE + 5 +1D9F + 8 +0 + 62 + 0 + 10 +15352.273952 + 20 +7053.218607 + 30 +0.0 + 11 +15336.811708 + 21 +7080.0 + 31 +0.0 + 0 +LINE + 5 +1DA0 + 8 +0 + 62 + 0 + 10 +15464.773952 + 20 +6923.314797 + 30 +0.0 + 11 +15446.023952 + 21 +6955.790749 + 31 +0.0 + 0 +LINE + 5 +1DA1 + 8 +0 + 62 + 0 + 10 +15408.523952 + 20 +7020.742655 + 30 +0.0 + 11 +15389.773952 + 21 +7053.218607 + 31 +0.0 + 0 +LINE + 5 +1DA2 + 8 +0 + 62 + 0 + 10 +15521.023952 + 20 +6890.838844 + 30 +0.0 + 11 +15502.273952 + 21 +6923.314797 + 31 +0.0 + 0 +LINE + 5 +1DA3 + 8 +0 + 62 + 0 + 10 +15464.773952 + 20 +6988.266702 + 30 +0.0 + 11 +15446.023952 + 21 +7020.742655 + 31 +0.0 + 0 +LINE + 5 +1DA4 + 8 +0 + 62 + 0 + 10 +15564.781761 + 20 +6880.0 + 30 +0.0 + 11 +15558.523952 + 21 +6890.838844 + 31 +0.0 + 0 +LINE + 5 +1DA5 + 8 +0 + 62 + 0 + 10 +15521.023952 + 20 +6955.790749 + 30 +0.0 + 11 +15502.273952 + 21 +6988.266702 + 31 +0.0 + 0 +LINE + 5 +1DA6 + 8 +0 + 62 + 0 + 10 +15464.773952 + 20 +7053.218607 + 30 +0.0 + 11 +15449.311708 + 21 +7080.0 + 31 +0.0 + 0 +LINE + 5 +1DA7 + 8 +0 + 62 + 0 + 10 +15577.273952 + 20 +6923.314796 + 30 +0.0 + 11 +15558.523952 + 21 +6955.790749 + 31 +0.0 + 0 +LINE + 5 +1DA8 + 8 +0 + 62 + 0 + 10 +15521.023952 + 20 +7020.742654 + 30 +0.0 + 11 +15502.273952 + 21 +7053.218607 + 31 +0.0 + 0 +LINE + 5 +1DA9 + 8 +0 + 62 + 0 + 10 +15627.274018 + 20 +6901.664047 + 30 +0.0 + 11 +15614.773952 + 21 +6923.314796 + 31 +0.0 + 0 +LINE + 5 +1DAA + 8 +0 + 62 + 0 + 10 +15577.273952 + 20 +6988.266702 + 30 +0.0 + 11 +15558.523952 + 21 +7020.742654 + 31 +0.0 + 0 +LINE + 5 +1DAB + 8 +0 + 62 + 0 + 10 +15627.274018 + 20 +6966.615952 + 30 +0.0 + 11 +15614.773952 + 21 +6988.266702 + 31 +0.0 + 0 +LINE + 5 +1DAC + 8 +0 + 62 + 0 + 10 +15577.273952 + 20 +7053.218607 + 30 +0.0 + 11 +15561.811707 + 21 +7080.0 + 31 +0.0 + 0 +LINE + 5 +1DAD + 8 +0 + 62 + 0 + 10 +15627.274018 + 20 +7031.567857 + 30 +0.0 + 11 +15614.773952 + 21 +7053.218607 + 31 +0.0 + 0 +LINE + 5 +1DAE + 8 +0 + 62 + 0 + 10 +15064.766146 + 20 +6880.0 + 30 +0.0 + 11 +15071.023988 + 21 +6890.838899 + 31 +0.0 + 0 +LINE + 5 +1DAF + 8 +0 + 62 + 0 + 10 +15108.523988 + 20 +6955.790804 + 30 +0.0 + 11 +15127.273988 + 21 +6988.266757 + 31 +0.0 + 0 +LINE + 5 +1DB0 + 8 +0 + 62 + 0 + 10 +15164.773988 + 20 +7053.218662 + 30 +0.0 + 11 +15180.2362 + 21 +7080.0 + 31 +0.0 + 0 +LINE + 5 +1DB1 + 8 +0 + 62 + 0 + 10 +15052.273988 + 20 +6923.314852 + 30 +0.0 + 11 +15071.023988 + 21 +6955.790804 + 31 +0.0 + 0 +LINE + 5 +1DB2 + 8 +0 + 62 + 0 + 10 +15108.523988 + 20 +7020.74271 + 30 +0.0 + 11 +15127.273988 + 21 +7053.218662 + 31 +0.0 + 0 +LINE + 5 +1DB3 + 8 +0 + 62 + 0 + 10 +14996.023988 + 20 +6890.838899 + 30 +0.0 + 11 +15014.773988 + 21 +6923.314852 + 31 +0.0 + 0 +LINE + 5 +1DB4 + 8 +0 + 62 + 0 + 10 +15052.273988 + 20 +6988.266757 + 30 +0.0 + 11 +15071.023988 + 21 +7020.74271 + 31 +0.0 + 0 +LINE + 5 +1DB5 + 8 +0 + 62 + 0 + 10 +14952.266147 + 20 +6880.0 + 30 +0.0 + 11 +14958.523988 + 21 +6890.838899 + 31 +0.0 + 0 +LINE + 5 +1DB6 + 8 +0 + 62 + 0 + 10 +14996.023988 + 20 +6955.790804 + 30 +0.0 + 11 +15014.773988 + 21 +6988.266757 + 31 +0.0 + 0 +LINE + 5 +1DB7 + 8 +0 + 62 + 0 + 10 +15052.273988 + 20 +7053.218662 + 30 +0.0 + 11 +15067.736201 + 21 +7080.0 + 31 +0.0 + 0 +LINE + 5 +1DB8 + 8 +0 + 62 + 0 + 10 +14939.773988 + 20 +6923.314851 + 30 +0.0 + 11 +14958.523988 + 21 +6955.790804 + 31 +0.0 + 0 +LINE + 5 +1DB9 + 8 +0 + 62 + 0 + 10 +14996.023988 + 20 +7020.742709 + 30 +0.0 + 11 +15014.773988 + 21 +7053.218662 + 31 +0.0 + 0 +LINE + 5 +1DBA + 8 +0 + 62 + 0 + 10 +14883.523988 + 20 +6890.838899 + 30 +0.0 + 11 +14902.273988 + 21 +6923.314851 + 31 +0.0 + 0 +LINE + 5 +1DBB + 8 +0 + 62 + 0 + 10 +14939.773988 + 20 +6988.266757 + 30 +0.0 + 11 +14958.523988 + 21 +7020.742709 + 31 +0.0 + 0 +LINE + 5 +1DBC + 8 +0 + 62 + 0 + 10 +14839.766147 + 20 +6880.0 + 30 +0.0 + 11 +14846.023988 + 21 +6890.838899 + 31 +0.0 + 0 +LINE + 5 +1DBD + 8 +0 + 62 + 0 + 10 +14883.523988 + 20 +6955.790804 + 30 +0.0 + 11 +14902.273988 + 21 +6988.266757 + 31 +0.0 + 0 +LINE + 5 +1DBE + 8 +0 + 62 + 0 + 10 +14939.773988 + 20 +7053.218662 + 30 +0.0 + 11 +14955.236201 + 21 +7080.0 + 31 +0.0 + 0 +LINE + 5 +1DBF + 8 +0 + 62 + 0 + 10 +14827.273988 + 20 +6923.314851 + 30 +0.0 + 11 +14846.023988 + 21 +6955.790804 + 31 +0.0 + 0 +LINE + 5 +1DC0 + 8 +0 + 62 + 0 + 10 +14883.523988 + 20 +7020.742709 + 30 +0.0 + 11 +14902.273988 + 21 +7053.218662 + 31 +0.0 + 0 +LINE + 5 +1DC1 + 8 +0 + 62 + 0 + 10 +14771.023989 + 20 +6890.838899 + 30 +0.0 + 11 +14789.773989 + 21 +6923.314851 + 31 +0.0 + 0 +LINE + 5 +1DC2 + 8 +0 + 62 + 0 + 10 +14827.273989 + 20 +6988.266756 + 30 +0.0 + 11 +14846.023989 + 21 +7020.742709 + 31 +0.0 + 0 +LINE + 5 +1DC3 + 8 +0 + 62 + 0 + 10 +14727.266148 + 20 +6880.0 + 30 +0.0 + 11 +14733.523989 + 21 +6890.838898 + 31 +0.0 + 0 +LINE + 5 +1DC4 + 8 +0 + 62 + 0 + 10 +14771.023989 + 20 +6955.790804 + 30 +0.0 + 11 +14789.773989 + 21 +6988.266756 + 31 +0.0 + 0 +LINE + 5 +1DC5 + 8 +0 + 62 + 0 + 10 +14827.273989 + 20 +7053.218662 + 30 +0.0 + 11 +14842.736202 + 21 +7080.0 + 31 +0.0 + 0 +LINE + 5 +1DC6 + 8 +0 + 62 + 0 + 10 +14714.773989 + 20 +6923.314851 + 30 +0.0 + 11 +14733.523989 + 21 +6955.790804 + 31 +0.0 + 0 +LINE + 5 +1DC7 + 8 +0 + 62 + 0 + 10 +14771.023989 + 20 +7020.742709 + 30 +0.0 + 11 +14789.773989 + 21 +7053.218662 + 31 +0.0 + 0 +LINE + 5 +1DC8 + 8 +0 + 62 + 0 + 10 +14714.773989 + 20 +6988.266756 + 30 +0.0 + 11 +14733.523989 + 21 +7020.742709 + 31 +0.0 + 0 +LINE + 5 +1DC9 + 8 +0 + 62 + 0 + 10 +14714.773989 + 20 +7053.218661 + 30 +0.0 + 11 +14730.236202 + 21 +7080.0 + 31 +0.0 + 0 +LINE + 5 +1DCA + 8 +0 + 62 + 0 + 10 +15108.523988 + 20 +6890.838899 + 30 +0.0 + 11 +15127.273988 + 21 +6923.314852 + 31 +0.0 + 0 +LINE + 5 +1DCB + 8 +0 + 62 + 0 + 10 +15164.773988 + 20 +6988.266757 + 30 +0.0 + 11 +15183.523988 + 21 +7020.74271 + 31 +0.0 + 0 +LINE + 5 +1DCC + 8 +0 + 62 + 0 + 10 +15164.773987 + 20 +6923.314852 + 30 +0.0 + 11 +15183.523987 + 21 +6955.790805 + 31 +0.0 + 0 +LINE + 5 +1DCD + 8 +0 + 62 + 0 + 10 +15221.023987 + 20 +7020.74271 + 30 +0.0 + 11 +15239.773987 + 21 +7053.218662 + 31 +0.0 + 0 +LINE + 5 +1DCE + 8 +0 + 62 + 0 + 10 +15177.266146 + 20 +6880.0 + 30 +0.0 + 11 +15183.523987 + 21 +6890.838899 + 31 +0.0 + 0 +LINE + 5 +1DCF + 8 +0 + 62 + 0 + 10 +15221.023987 + 20 +6955.790805 + 30 +0.0 + 11 +15239.773987 + 21 +6988.266757 + 31 +0.0 + 0 +LINE + 5 +1DD0 + 8 +0 + 62 + 0 + 10 +15277.273987 + 20 +7053.218663 + 30 +0.0 + 11 +15292.7362 + 21 +7080.0 + 31 +0.0 + 0 +LINE + 5 +1DD1 + 8 +0 + 62 + 0 + 10 +15221.023987 + 20 +6890.838899 + 30 +0.0 + 11 +15239.773987 + 21 +6923.314852 + 31 +0.0 + 0 +LINE + 5 +1DD2 + 8 +0 + 62 + 0 + 10 +15277.273987 + 20 +6988.266757 + 30 +0.0 + 11 +15296.023987 + 21 +7020.74271 + 31 +0.0 + 0 +LINE + 5 +1DD3 + 8 +0 + 62 + 0 + 10 +15277.273987 + 20 +6923.314852 + 30 +0.0 + 11 +15296.023987 + 21 +6955.790805 + 31 +0.0 + 0 +LINE + 5 +1DD4 + 8 +0 + 62 + 0 + 10 +15333.523987 + 20 +7020.74271 + 30 +0.0 + 11 +15352.273987 + 21 +7053.218663 + 31 +0.0 + 0 +LINE + 5 +1DD5 + 8 +0 + 62 + 0 + 10 +15289.766145 + 20 +6880.0 + 30 +0.0 + 11 +15296.023987 + 21 +6890.8389 + 31 +0.0 + 0 +LINE + 5 +1DD6 + 8 +0 + 62 + 0 + 10 +15333.523987 + 20 +6955.790805 + 30 +0.0 + 11 +15352.273987 + 21 +6988.266757 + 31 +0.0 + 0 +LINE + 5 +1DD7 + 8 +0 + 62 + 0 + 10 +15389.773987 + 20 +7053.218663 + 30 +0.0 + 11 +15405.236199 + 21 +7080.0 + 31 +0.0 + 0 +LINE + 5 +1DD8 + 8 +0 + 62 + 0 + 10 +15333.523987 + 20 +6890.8389 + 30 +0.0 + 11 +15352.273987 + 21 +6923.314852 + 31 +0.0 + 0 +LINE + 5 +1DD9 + 8 +0 + 62 + 0 + 10 +15389.773987 + 20 +6988.266758 + 30 +0.0 + 11 +15408.523987 + 21 +7020.74271 + 31 +0.0 + 0 +LINE + 5 +1DDA + 8 +0 + 62 + 0 + 10 +15389.773987 + 20 +6923.314852 + 30 +0.0 + 11 +15408.523987 + 21 +6955.790805 + 31 +0.0 + 0 +LINE + 5 +1DDB + 8 +0 + 62 + 0 + 10 +15446.023987 + 20 +7020.74271 + 30 +0.0 + 11 +15464.773987 + 21 +7053.218663 + 31 +0.0 + 0 +LINE + 5 +1DDC + 8 +0 + 62 + 0 + 10 +15402.266145 + 20 +6880.0 + 30 +0.0 + 11 +15408.523987 + 21 +6890.8389 + 31 +0.0 + 0 +LINE + 5 +1DDD + 8 +0 + 62 + 0 + 10 +15446.023987 + 20 +6955.790805 + 30 +0.0 + 11 +15464.773987 + 21 +6988.266758 + 31 +0.0 + 0 +LINE + 5 +1DDE + 8 +0 + 62 + 0 + 10 +15502.273987 + 20 +7053.218663 + 30 +0.0 + 11 +15517.736199 + 21 +7080.0 + 31 +0.0 + 0 +LINE + 5 +1DDF + 8 +0 + 62 + 0 + 10 +15446.023986 + 20 +6890.8389 + 30 +0.0 + 11 +15464.773986 + 21 +6923.314852 + 31 +0.0 + 0 +LINE + 5 +1DE0 + 8 +0 + 62 + 0 + 10 +15502.273986 + 20 +6988.266758 + 30 +0.0 + 11 +15521.023986 + 21 +7020.74271 + 31 +0.0 + 0 +LINE + 5 +1DE1 + 8 +0 + 62 + 0 + 10 +15502.273986 + 20 +6923.314853 + 30 +0.0 + 11 +15521.023986 + 21 +6955.790805 + 31 +0.0 + 0 +LINE + 5 +1DE2 + 8 +0 + 62 + 0 + 10 +15558.523986 + 20 +7020.74271 + 30 +0.0 + 11 +15577.273986 + 21 +7053.218663 + 31 +0.0 + 0 +LINE + 5 +1DE3 + 8 +0 + 62 + 0 + 10 +15514.766144 + 20 +6880.0 + 30 +0.0 + 11 +15521.023986 + 21 +6890.8389 + 31 +0.0 + 0 +LINE + 5 +1DE4 + 8 +0 + 62 + 0 + 10 +15558.523986 + 20 +6955.790805 + 30 +0.0 + 11 +15577.273986 + 21 +6988.266758 + 31 +0.0 + 0 +LINE + 5 +1DE5 + 8 +0 + 62 + 0 + 10 +15614.773986 + 20 +7053.218663 + 30 +0.0 + 11 +15627.274018 + 21 +7074.869353 + 31 +0.0 + 0 +LINE + 5 +1DE6 + 8 +0 + 62 + 0 + 10 +15558.523986 + 20 +6890.8389 + 30 +0.0 + 11 +15577.273986 + 21 +6923.314853 + 31 +0.0 + 0 +LINE + 5 +1DE7 + 8 +0 + 62 + 0 + 10 +15614.773986 + 20 +6988.266758 + 30 +0.0 + 11 +15627.274018 + 21 +7009.917448 + 31 +0.0 + 0 +LINE + 5 +1DE8 + 8 +0 + 62 + 0 + 10 +15614.773986 + 20 +6923.314853 + 30 +0.0 + 11 +15627.274018 + 21 +6944.965543 + 31 +0.0 + 0 +LINE + 5 +1DE9 + 8 +0 + 62 + 0 + 10 +15627.266144 + 20 +6880.0 + 30 +0.0 + 11 +15627.274018 + 21 +6880.013638 + 31 +0.0 + 0 +POLYLINE + 5 +1DEA + 8 +ESTRICH + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2209 + 8 +ESTRICH + 10 +14679.649752 + 20 +7455.0 + 30 +0.0 + 0 +VERTEX + 5 +220A + 8 +ESTRICH + 10 +15627.274018 + 20 +7455.0 + 30 +0.0 + 0 +VERTEX + 5 +220B + 8 +ESTRICH + 10 +15627.274018 + 20 +7330.0 + 30 +0.0 + 0 +VERTEX + 5 +220C + 8 +ESTRICH + 10 +14679.649752 + 20 +7330.0 + 30 +0.0 + 0 +SEQEND + 5 +220D + 8 +ESTRICH + 0 +POLYLINE + 5 +1DF0 + 8 +ESTRICH + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +220E + 8 +ESTRICH + 10 +14679.649752 + 20 +7330.0 + 30 +0.0 + 0 +VERTEX + 5 +220F + 8 +ESTRICH + 10 +15627.274018 + 20 +7330.0 + 30 +0.0 + 0 +VERTEX + 5 +2210 + 8 +ESTRICH + 10 +15627.274018 + 20 +7130.0 + 30 +0.0 + 0 +VERTEX + 5 +2211 + 8 +ESTRICH + 10 +14679.649752 + 20 +7130.0 + 30 +0.0 + 0 +SEQEND + 5 +2212 + 8 +ESTRICH + 0 +POLYLINE + 5 +1DF6 + 8 +ESTRICH + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2213 + 8 +ESTRICH + 10 +14679.649752 + 20 +7130.0 + 30 +0.0 + 0 +VERTEX + 5 +2214 + 8 +ESTRICH + 10 +15627.274018 + 20 +7130.0 + 30 +0.0 + 0 +VERTEX + 5 +2215 + 8 +ESTRICH + 10 +15627.274018 + 20 +7080.0 + 30 +0.0 + 0 +VERTEX + 5 +2216 + 8 +ESTRICH + 10 +14679.649752 + 20 +7080.0 + 30 +0.0 + 0 +SEQEND + 5 +2217 + 8 +ESTRICH + 0 +POLYLINE + 5 +1DFC + 8 +ESTRICH + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +2218 + 8 +ESTRICH + 10 +14679.649752 + 20 +7080.0 + 30 +0.0 + 0 +VERTEX + 5 +2219 + 8 +ESTRICH + 10 +15627.274018 + 20 +7080.0 + 30 +0.0 + 0 +VERTEX + 5 +221A + 8 +ESTRICH + 10 +15627.274018 + 20 +6880.0 + 30 +0.0 + 0 +VERTEX + 5 +221B + 8 +ESTRICH + 10 +14679.649752 + 20 +6880.0 + 30 +0.0 + 0 +SEQEND + 5 +221C + 8 +ESTRICH + 0 +POLYLINE + 5 +1E02 + 8 +PE-FOLIE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +25.0 + 41 +25.0 + 0 +VERTEX + 5 +221D + 8 +PE-FOLIE + 10 +15447.274018 + 20 +7115.0 + 30 +0.0 + 0 +VERTEX + 5 +221E + 8 +PE-FOLIE + 10 +14679.649752 + 20 +7115.0 + 30 +0.0 + 0 +SEQEND + 5 +221F + 8 +PE-FOLIE + 0 +POLYLINE + 5 +1E06 + 8 +PE-FOLIE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +25.0 + 41 +25.0 + 0 +VERTEX + 5 +2220 + 8 +PE-FOLIE + 10 +15622.274018 + 20 +7095.0 + 30 +0.0 + 0 +VERTEX + 5 +2221 + 8 +PE-FOLIE + 10 +14679.649752 + 20 +7095.0 + 30 +0.0 + 0 +SEQEND + 5 +2222 + 8 +PE-FOLIE + 0 +DIMENSION + 5 +1E0A + 8 +BEMASSUNG + 2 +*D79 + 10 +15725.0 + 20 +5180.0 + 30 +0.0 + 11 +15675.0 + 21 +5267.5 + 31 +0.0 + 12 +-295.0 + 22 +-2105.0 + 32 +0.0 + 1 +2 + 13 +15625.0 + 23 +6885.0 + 33 +0.0 + 14 +15725.0 + 24 +6885.0 + 34 +0.0 + 0 +DIMENSION + 5 +1E0B + 8 +BEMASSUNG + 2 +*D93 + 10 +15785.0 + 20 +5180.0 + 30 +0.0 + 11 +15815.0 + 21 +5420.0 + 31 +0.0 + 12 +-295.0 + 22 +-2105.0 + 32 +0.0 + 70 + 128 + 1 +1.25 + 13 +15725.0 + 23 +6885.0 + 33 +0.0 + 14 +15785.0 + 24 +6945.0 + 34 +0.0 + 0 +DIMENSION + 5 +1E0C + 8 +BEMASSUNG + 2 +*D81 + 10 +16290.0 + 20 +5180.0 + 30 +0.0 + 11 +16037.5 + 21 +5267.5 + 31 +0.0 + 12 +-295.0 + 22 +-2105.0 + 32 +0.0 + 1 +8 + 13 +15785.0 + 23 +6945.0 + 33 +0.0 + 14 +16290.0 + 24 +6960.0 + 34 +0.0 + 0 +DIMENSION + 5 +1E0D + 8 +BEMASSUNG + 2 +*D95 + 10 +16355.0 + 20 +5180.0 + 30 +0.0 + 11 +16405.0 + 21 +5435.0 + 31 +0.0 + 12 +-295.0 + 22 +-2105.0 + 32 +0.0 + 70 + 128 + 1 +1.25 + 13 +16290.0 + 23 +6960.0 + 33 +0.0 + 14 +16355.0 + 24 +7355.0 + 34 +0.0 + 0 +DIMENSION + 5 +1E0E + 8 +BEMASSUNG + 2 +*D83 + 10 +16455.0 + 20 +5180.0 + 30 +0.0 + 11 +16405.0 + 21 +5267.5 + 31 +0.0 + 12 +-295.0 + 22 +-2105.0 + 32 +0.0 + 1 +2 + 13 +16355.0 + 23 +7355.0 + 33 +0.0 + 14 +16455.0 + 24 +6895.0 + 34 +0.0 + 0 +DIMENSION + 5 +1E0F + 8 +BEMASSUNG + 2 +*D84 + 10 +18335.0 + 20 +6880.0 + 30 +0.0 + 11 +18247.5 + 21 +6480.0 + 31 +0.0 + 12 +-295.0 + 22 +-2105.0 + 32 +0.0 + 1 +16 + 13 +17275.0 + 23 +6080.0 + 33 +0.0 + 14 +17275.0 + 24 +6880.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +1E10 + 8 +BEMASSUNG + 2 +*D85 + 10 +18335.0 + 20 +7075.0 + 30 +0.0 + 11 +18247.5 + 21 +6977.5 + 31 +0.0 + 12 +-295.0 + 22 +-2105.0 + 32 +0.0 + 1 +4 + 13 +17275.0 + 23 +6880.0 + 33 +0.0 + 14 +17285.0 + 24 +7075.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +1E11 + 8 +BEMASSUNG + 2 +*D86 + 10 +18335.0 + 20 +7135.0 + 30 +0.0 + 11 +18247.5 + 21 +7105.0 + 31 +0.0 + 12 +-295.0 + 22 +-2105.0 + 32 +0.0 + 1 +1 + 13 +17285.0 + 23 +7075.0 + 33 +0.0 + 14 +17280.0 + 24 +7135.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +1E12 + 8 +BEMASSUNG + 2 +*D87 + 10 +18335.0 + 20 +7330.0 + 30 +0.0 + 11 +18247.5 + 21 +7232.5 + 31 +0.0 + 12 +-295.0 + 22 +-2105.0 + 32 +0.0 + 1 +4 + 13 +17280.0 + 23 +7135.0 + 33 +0.0 + 14 +17290.0 + 24 +7330.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +1E13 + 8 +BEMASSUNG + 2 +*D96 + 10 +18335.0 + 20 +7455.0 + 30 +0.0 + 11 +18247.5 + 21 +7515.0 + 31 +0.0 + 12 +-295.0 + 22 +-2105.0 + 32 +0.0 + 70 + 128 + 1 +2 + 13 +17290.0 + 23 +7330.0 + 33 +0.0 + 14 +17290.0 + 24 +7455.0 + 34 +0.0 + 50 +90.0 + 0 +TEXT + 5 +1E14 + 8 +BEMASSUNG + 10 +18235.0 + 20 +7550.0 + 30 +0.0 + 40 +62.5 + 1 +5 + 50 +90.0 + 41 +0.75 + 0 +DIMENSION + 5 +1E15 + 8 +BEMASSUNG + 2 +*D97 + 10 +15325.0 + 20 +7755.0 + 30 +0.0 + 11 +15237.5 + 21 +7605.0 + 31 +0.0 + 12 +-295.0 + 22 +-2105.0 + 32 +0.0 + 1 +6 + 13 +15575.0 + 23 +7455.0 + 33 +0.0 + 14 +15575.0 + 24 +7755.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +1E16 + 8 +BEMASSUNG + 2 +*D98 + 10 +15576.582352 + 20 +8016.000702 + 30 +0.0 + 11 +15652.185913 + 21 +8103.500702 + 31 +0.0 + 12 +-295.0 + 22 +-2105.0 + 32 +0.0 + 1 +3 + 13 +15727.789473 + 23 +7855.24584 + 33 +0.0 + 14 +15576.582352 + 24 +7855.24584 + 34 +0.0 + 0 +DIMENSION + 5 +1E17 + 8 +BEMASSUNG + 2 +*D99 + 10 +16355.0 + 20 +11445.0 + 30 +0.0 + 11 +16040.0 + 21 +11532.5 + 31 +0.0 + 12 +-295.0 + 22 +-2105.0 + 32 +0.0 + 1 +12 + 13 +15725.0 + 23 +10215.0 + 33 +0.0 + 14 +16355.0 + 24 +10215.0 + 34 +0.0 + 0 +TEXT + 5 +1E18 + 8 +BEMASSUNG + 10 +16100.0 + 20 +11560.0 + 30 +0.0 + 40 +62.5 + 1 +5 + 41 +0.75 + 0 +DIMENSION + 5 +1E19 + 8 +BEMASSUNG + 2 +*D103 + 10 +15651.609987 + 20 +9915.090071 + 30 +0.0 + 11 +15556.327063 + 21 +10002.590071 + 31 +0.0 + 12 +-295.0 + 22 +-2105.0 + 32 +0.0 + 70 + 128 + 1 +1 + 13 +15726.357827 + 23 +10104.009781 + 33 +0.0 + 14 +15651.609987 + 24 +10104.009781 + 34 +0.0 + 0 +TEXT + 5 +1E1A + 8 +BEMASSUNG + 10 +15578.007216 + 20 +10019.89264 + 30 +0.0 + 40 +62.5 + 1 +5 + 41 +0.75 + 0 +DIMENSION + 5 +1E1B + 8 +BEMASSUNG + 2 +*D106 + 10 +18329.167458 + 20 +10310.10418 + 30 +0.0 + 11 +18241.667458 + 21 +10110.0 + 31 +0.0 + 12 +-295.0 + 22 +-2105.0 + 32 +0.0 + 70 + 128 + 1 +1 + 13 +17283.177313 + 23 +10235.808311 + 33 +0.0 + 14 +17283.177313 + 24 +10310.10418 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +1E1C + 8 +BEMASSUNG + 2 +*D105 + 10 +18329.167458 + 20 +11110.0 + 30 +0.0 + 11 +18241.667458 + 21 +10710.05209 + 31 +0.0 + 12 +-295.0 + 22 +-2105.0 + 32 +0.0 + 1 +16 + 13 +17283.177313 + 23 +10310.10418 + 33 +0.0 + 14 +17275.0 + 24 +11110.0 + 34 +0.0 + 50 +90.0 + 0 +TEXT + 5 +1E1D + 8 +BEMASSUNG + 10 +18230.0 + 20 +10126.343497 + 30 +0.0 + 40 +62.5 + 1 +5 + 50 +90.0 + 41 +0.75 + 0 +TEXT + 5 +1E1E + 8 +LEGENDE-35 + 10 +17615.0 + 20 +9680.0 + 30 +0.0 + 40 +87.5 + 1 +GIPSPUTZ + 41 +0.75 + 0 +TEXT + 5 +1E1F + 8 +LEGENDE-35 + 10 +17615.0 + 20 +9430.0 + 30 +0.0 + 40 +87.5 + 1 +PVC-LEISTE + 41 +0.75 + 0 +TEXT + 5 +1E20 + 8 +LEGENDE-35 + 10 +17615.0 + 20 +9180.0 + 30 +0.0 + 40 +87.5 + 1 +U-PROFIL + 41 +0.75 + 0 +TEXT + 5 +1E21 + 8 +LEGENDE-35 + 10 +17615.0 + 20 +8930.0 + 30 +0.0 + 40 +87.5 + 1 +C-PROFIL + 41 +0.75 + 0 +TEXT + 5 +1E22 + 8 +LEGENDE-35 + 10 +17615.0 + 20 +8680.0 + 30 +0.0 + 40 +87.5 + 1 +GIPSKARTON + 41 +0.75 + 0 +TEXT + 5 +1E23 + 8 +LEGENDE-35 + 10 +17615.0 + 20 +8430.0 + 30 +0.0 + 40 +87.5 + 1 +MINERALFASER-WÄDÄ + 41 +0.75 + 0 +TEXT + 5 +1E24 + 8 +LEGENDE-35 + 10 +17615.0 + 20 +8180.0 + 30 +0.0 + 40 +87.5 + 1 +ABSCHLUSSLEISTE + 41 +0.75 + 0 +TEXT + 5 +1E25 + 8 +LEGENDE-35 + 10 +17615.0 + 20 +7930.0 + 30 +0.0 + 40 +87.5 + 1 +NATURSTEIN + 41 +0.75 + 0 +POLYLINE + 5 +1E26 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2223 + 8 +LEGENDE-35 + 10 +17480.0 + 20 +9725.0 + 30 +0.0 + 0 +VERTEX + 5 +2224 + 8 +LEGENDE-35 + 10 +17040.0 + 20 +9725.0 + 30 +0.0 + 0 +VERTEX + 5 +2225 + 8 +LEGENDE-35 + 10 +17040.0 + 20 +10265.0 + 30 +0.0 + 0 +SEQEND + 5 +2226 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +1E2B + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2227 + 8 +LEGENDE-35 + 10 +17480.0 + 20 +9475.0 + 30 +0.0 + 0 +VERTEX + 5 +2228 + 8 +LEGENDE-35 + 10 +16400.0 + 20 +9475.0 + 30 +0.0 + 0 +VERTEX + 5 +2229 + 8 +LEGENDE-35 + 10 +16400.0 + 20 +10265.0 + 30 +0.0 + 0 +SEQEND + 5 +222A + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +1E30 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +222B + 8 +LEGENDE-35 + 10 +17485.0 + 20 +9215.0 + 30 +0.0 + 0 +VERTEX + 5 +222C + 8 +LEGENDE-35 + 10 +16215.0 + 20 +9215.0 + 30 +0.0 + 0 +VERTEX + 5 +222D + 8 +LEGENDE-35 + 10 +16215.0 + 20 +10240.0 + 30 +0.0 + 0 +SEQEND + 5 +222E + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +1E35 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +222F + 8 +LEGENDE-35 + 10 +17480.0 + 20 +8965.0 + 30 +0.0 + 0 +VERTEX + 5 +2230 + 8 +LEGENDE-35 + 10 +16230.0 + 20 +8965.0 + 30 +0.0 + 0 +SEQEND + 5 +2231 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +1E39 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2232 + 8 +LEGENDE-35 + 10 +17480.0 + 20 +8720.0 + 30 +0.0 + 0 +VERTEX + 5 +2233 + 8 +LEGENDE-35 + 10 +16635.0 + 20 +8720.0 + 30 +0.0 + 0 +VERTEX + 5 +2234 + 8 +LEGENDE-35 + 10 +16310.0 + 20 +8320.0 + 30 +0.0 + 0 +SEQEND + 5 +2235 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +1E3E + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2236 + 8 +LEGENDE-35 + 10 +17475.0 + 20 +8475.0 + 30 +0.0 + 0 +VERTEX + 5 +2237 + 8 +LEGENDE-35 + 10 +16775.0 + 20 +8475.0 + 30 +0.0 + 0 +VERTEX + 5 +2238 + 8 +LEGENDE-35 + 10 +16105.0 + 20 +7755.0 + 30 +0.0 + 0 +SEQEND + 5 +2239 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +1E43 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +223A + 8 +LEGENDE-35 + 10 +17475.0 + 20 +8240.0 + 30 +0.0 + 0 +VERTEX + 5 +223B + 8 +LEGENDE-35 + 10 +16855.0 + 20 +8240.0 + 30 +0.0 + 0 +VERTEX + 5 +223C + 8 +LEGENDE-35 + 10 +16450.0 + 20 +7775.0 + 30 +0.0 + 0 +SEQEND + 5 +223D + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +1E48 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +223E + 8 +LEGENDE-35 + 10 +17480.0 + 20 +7975.0 + 30 +0.0 + 0 +VERTEX + 5 +223F + 8 +LEGENDE-35 + 10 +17015.0 + 20 +7975.0 + 30 +0.0 + 0 +VERTEX + 5 +2240 + 8 +LEGENDE-35 + 10 +16790.0 + 20 +7415.0 + 30 +0.0 + 0 +SEQEND + 5 +2241 + 8 +LEGENDE-35 + 0 +TEXT + 5 +1E4D + 8 +LEGENDE-35 + 10 +18250.0 + 20 +5620.0 + 30 +0.0 + 40 +87.5 + 1 +ZEMENTESTRICH + 41 +0.75 + 0 +TEXT + 5 +1E4E + 8 +LEGENDE-35 + 10 +18250.0 + 20 +5370.0 + 30 +0.0 + 40 +87.5 + 1 +DICHTUNGSBAHN (BITUMEN/ PE-FOLIE) + 41 +0.75 + 0 +TEXT + 5 +1E4F + 8 +LEGENDE-35 + 10 +18250.0 + 20 +5120.0 + 30 +0.0 + 40 +87.5 + 1 +PS-HARTSCHAUM WÄDÄ + 41 +0.75 + 0 +TEXT + 5 +1E50 + 8 +LEGENDE-35 + 10 +18250.0 + 20 +4870.0 + 30 +0.0 + 40 +87.5 + 1 +STAHLBETONDECKE B25 + 41 +0.75 + 0 +TEXT + 5 +1E51 + 8 +LEGENDE-35 + 10 +18250.0 + 20 +4724.166667 + 30 +0.0 + 40 +87.5 + 1 +ZWEIACHSIG GESPANNT + 41 +0.75 + 0 +POLYLINE + 5 +1E52 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2242 + 8 +LEGENDE-35 + 10 +18160.0 + 20 +5675.0 + 30 +0.0 + 0 +VERTEX + 5 +2243 + 8 +LEGENDE-35 + 10 +17880.0 + 20 +5675.0 + 30 +0.0 + 0 +VERTEX + 5 +2244 + 8 +LEGENDE-35 + 10 +17880.0 + 20 +7245.0 + 30 +0.0 + 0 +VERTEX + 5 +2245 + 8 +LEGENDE-35 + 10 +17260.0 + 20 +7245.0 + 30 +0.0 + 0 +SEQEND + 5 +2246 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +1E58 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2247 + 8 +LEGENDE-35 + 10 +18160.0 + 20 +5420.0 + 30 +0.0 + 0 +VERTEX + 5 +2248 + 8 +LEGENDE-35 + 10 +17740.0 + 20 +5420.0 + 30 +0.0 + 0 +VERTEX + 5 +2249 + 8 +LEGENDE-35 + 10 +17740.0 + 20 +7105.0 + 30 +0.0 + 0 +VERTEX + 5 +224A + 8 +LEGENDE-35 + 10 +17240.0 + 20 +7105.0 + 30 +0.0 + 0 +SEQEND + 5 +224B + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +1E5E + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +224C + 8 +LEGENDE-35 + 10 +18160.0 + 20 +5185.0 + 30 +0.0 + 0 +VERTEX + 5 +224D + 8 +LEGENDE-35 + 10 +17580.0 + 20 +5185.0 + 30 +0.0 + 0 +VERTEX + 5 +224E + 8 +LEGENDE-35 + 10 +17580.0 + 20 +6950.0 + 30 +0.0 + 0 +VERTEX + 5 +224F + 8 +LEGENDE-35 + 10 +17200.0 + 20 +6950.0 + 30 +0.0 + 0 +SEQEND + 5 +2250 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +1E64 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2251 + 8 +LEGENDE-35 + 10 +18160.0 + 20 +4815.0 + 30 +0.0 + 0 +VERTEX + 5 +2252 + 8 +LEGENDE-35 + 10 +17165.0 + 20 +4815.0 + 30 +0.0 + 0 +VERTEX + 5 +2253 + 8 +LEGENDE-35 + 10 +17165.0 + 20 +6250.0 + 30 +0.0 + 0 +SEQEND + 5 +2254 + 8 +LEGENDE-35 + 0 +TEXT + 5 +1E69 + 8 +LEGENDE-35 + 10 +12520.0 + 20 +9760.0 + 30 +0.0 + 40 +87.5 + 1 +STAHLBETONDECKE B25 + 41 +0.75 + 0 +TEXT + 5 +1E6A + 8 +LEGENDE-35 + 10 +12520.0 + 20 +9614.166667 + 30 +0.0 + 40 +87.5 + 1 +ZWEIACHSIG GESPANNT + 41 +0.75 + 0 +TEXT + 5 +1E6B + 8 +LEGENDE-35 + 10 +13175.0 + 20 +9105.0 + 30 +0.0 + 40 +87.5 + 1 +SCHNELLBAUSCHRAUBEN xn + 41 +0.75 + 0 +TEXT + 5 +1E6C + 8 +LEGENDE-35 + 10 +13000.0 + 20 +10655.0 + 30 +0.0 + 40 +87.5 + 1 +ELASTOMER-BAND + 41 +0.75 + 0 +TEXT + 5 +1E6D + 8 +LEGENDE-35 + 10 +13305.0 + 20 +6280.0 + 30 +0.0 + 40 +87.5 + 1 +ELASTOMER-BAND + 41 +0.75 + 0 +POLYLINE + 5 +1E6E + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2255 + 8 +LEGENDE-35 + 10 +14335.0 + 20 +6330.0 + 30 +0.0 + 0 +VERTEX + 5 +2256 + 8 +LEGENDE-35 + 10 +15635.0 + 20 +6330.0 + 30 +0.0 + 0 +VERTEX + 5 +2257 + 8 +LEGENDE-35 + 10 +15850.0 + 20 +6900.0 + 30 +0.0 + 0 +SEQEND + 5 +2258 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +1E73 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2259 + 8 +LEGENDE-35 + 10 +14030.0 + 20 +10685.0 + 30 +0.0 + 0 +VERTEX + 5 +225A + 8 +LEGENDE-35 + 10 +15530.0 + 20 +10685.0 + 30 +0.0 + 0 +VERTEX + 5 +225B + 8 +LEGENDE-35 + 10 +15890.0 + 20 +10295.0 + 30 +0.0 + 0 +SEQEND + 5 +225C + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +1E78 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +225D + 8 +LEGENDE-35 + 10 +13820.0 + 20 +9725.0 + 30 +0.0 + 0 +VERTEX + 5 +225E + 8 +LEGENDE-35 + 10 +14470.0 + 20 +9725.0 + 30 +0.0 + 0 +VERTEX + 5 +225F + 8 +LEGENDE-35 + 10 +14470.0 + 20 +10490.0 + 30 +0.0 + 0 +VERTEX + 5 +2260 + 8 +LEGENDE-35 + 10 +14915.0 + 20 +10490.0 + 30 +0.0 + 0 +SEQEND + 5 +2261 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +1E7E + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2262 + 8 +LEGENDE-35 + 10 +14760.0 + 20 +9130.0 + 30 +0.0 + 0 +VERTEX + 5 +2263 + 8 +LEGENDE-35 + 10 +15345.0 + 20 +9130.0 + 30 +0.0 + 0 +VERTEX + 5 +2264 + 8 +LEGENDE-35 + 10 +15345.0 + 20 +9375.0 + 30 +0.0 + 0 +VERTEX + 5 +2265 + 8 +LEGENDE-35 + 10 +15675.0 + 20 +9375.0 + 30 +0.0 + 0 +SEQEND + 5 +2266 + 8 +LEGENDE-35 + 0 +TEXT + 5 +1E84 + 8 +LEGENDE-35 + 10 +13305.0 + 20 +6030.0 + 30 +0.0 + 40 +87.5 + 1 +SCHLAGSCHRAUBEN + 41 +0.75 + 0 +POLYLINE + 5 +1E85 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +2267 + 8 +LEGENDE-35 + 10 +14370.0 + 20 +6065.0 + 30 +0.0 + 0 +VERTEX + 5 +2268 + 8 +LEGENDE-35 + 10 +15925.0 + 20 +6240.0 + 30 +0.0 + 0 +VERTEX + 5 +2269 + 8 +LEGENDE-35 + 10 +16000.0 + 20 +6690.0 + 30 +0.0 + 0 +SEQEND + 5 +226A + 8 +LEGENDE-35 + 0 +TEXT + 5 +1E8A + 8 +LEGENDE-35 + 10 +12600.0 + 20 +10980.0 + 30 +0.0 + 40 +87.5 + 1 +SCHLAGSCHRAUBEN + 41 +0.75 + 0 +POLYLINE + 5 +1E8B + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +226B + 8 +LEGENDE-35 + 10 +13625.0 + 20 +11015.0 + 30 +0.0 + 0 +VERTEX + 5 +226C + 8 +LEGENDE-35 + 10 +15805.0 + 20 +10850.0 + 30 +0.0 + 0 +VERTEX + 5 +226D + 8 +LEGENDE-35 + 10 +16005.0 + 20 +10515.0 + 30 +0.0 + 0 +SEQEND + 5 +226E + 8 +LEGENDE-35 + 0 +TEXT + 5 +1E90 + 8 +LEGENDE-35 + 10 +14280.0 + 20 +4165.0 + 30 +0.0 + 40 +87.5 + 1 +METALSTÄNDERABSTAND: 62 + 41 +0.75 + 0 +TEXT + 5 +1E91 + 8 +LEGENDE-35 + 10 +15830.0 + 20 +4215.0 + 30 +0.0 + 40 +62.5 + 1 +5 + 41 +0.75 + 0 +TEXT + 5 +1E92 + 8 +LEGENDE-35 + 10 +19475.0 + 20 +11935.0 + 30 +0.0 + 40 +87.5 + 1 +M 1:5 + 41 +0.75 + 0 +TEXT + 5 +1E93 + 8 +LEGENDE-70 + 10 +2045.0 + 20 +13695.0 + 30 +0.0 + 40 +175.0 + 1 +D2 + 41 +0.75 + 0 +TEXT + 5 +1E94 + 8 +LEGENDE-70 + 10 +2070.0 + 20 +6635.0 + 30 +0.0 + 40 +175.0 + 1 +D1 + 41 +0.75 + 0 +TEXT + 5 +1E95 + 8 +LEGENDE-70 + 10 +12515.0 + 20 +11540.0 + 30 +0.0 + 40 +175.0 + 1 +D3 + 41 +0.75 + 0 +ENDSEC + 0 +EOF diff --git a/extensions/fablabchemnitz/dxf2papercraft/kabeja/samples/dxf/draft4.dxf b/extensions/fablabchemnitz/dxf2papercraft/kabeja/samples/dxf/draft4.dxf new file mode 100644 index 00000000..5256540f --- /dev/null +++ b/extensions/fablabchemnitz/dxf2papercraft/kabeja/samples/dxf/draft4.dxf @@ -0,0 +1,77318 @@ + 0 +SECTION + 2 +HEADER + 9 +$ACADVER + 1 +AC1009 + 9 +$INSBASE + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$EXTMIN + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$EXTMAX + 10 +21025.0 + 20 +14850.0 + 30 +0.0 + 9 +$LIMMIN + 10 +0.0 + 20 +0.0 + 9 +$LIMMAX + 10 +21025.0 + 20 +14850.0 + 9 +$ORTHOMODE + 70 + 0 + 9 +$REGENMODE + 70 + 1 + 9 +$FILLMODE + 70 + 1 + 9 +$QTEXTMODE + 70 + 0 + 9 +$MIRRTEXT + 70 + 1 + 9 +$DRAGMODE + 70 + 2 + 9 +$LTSCALE + 40 +175.0 + 9 +$OSMODE + 70 + 0 + 9 +$ATTMODE + 70 + 1 + 9 +$TEXTSIZE + 40 +175.0 + 9 +$TRACEWID + 40 +1.0 + 9 +$TEXTSTYLE + 7 +STANDARD + 9 +$CLAYER + 8 +LEGENDE-70 + 9 +$CELTYPE + 6 +BYLAYER + 9 +$CECOLOR + 62 + 256 + 9 +$DIMSCALE + 40 +1.0 + 9 +$DIMASZ + 40 +1.0 + 9 +$DIMEXO + 40 +1.0 + 9 +$DIMDLI + 40 +3.0 + 9 +$DIMRND + 40 +0.0 + 9 +$DIMDLE + 40 +0.0 + 9 +$DIMEXE + 40 +0.5 + 9 +$DIMTP + 40 +0.0 + 9 +$DIMTM + 40 +0.0 + 9 +$DIMTXT + 40 +87.5 + 9 +$DIMCEN + 40 +-0.5 + 9 +$DIMTSZ + 40 +0.0 + 9 +$DIMTOL + 70 + 0 + 9 +$DIMLIM + 70 + 0 + 9 +$DIMTIH + 70 + 0 + 9 +$DIMTOH + 70 + 0 + 9 +$DIMSE1 + 70 + 1 + 9 +$DIMSE2 + 70 + 1 + 9 +$DIMTAD + 70 + 1 + 9 +$DIMZIN + 70 + 8 + 9 +$DIMBLK + 1 +MASSHILFSLINIE + 9 +$DIMASO + 70 + 1 + 9 +$DIMSHO + 70 + 0 + 9 +$DIMPOST + 1 + + 9 +$DIMAPOST + 1 + + 9 +$DIMALT + 70 + 0 + 9 +$DIMALTD + 70 + 2 + 9 +$DIMALTF + 40 +25.4 + 9 +$DIMLFAC + 40 +1.0 + 9 +$DIMTOFL + 70 + 1 + 9 +$DIMTVP + 40 +0.0 + 9 +$DIMTIX + 70 + 1 + 9 +$DIMSOXD + 70 + 0 + 9 +$DIMSAH + 70 + 0 + 9 +$DIMBLK1 + 1 + + 9 +$DIMBLK2 + 1 + + 9 +$DIMSTYLE + 2 +BEMASSUNG + 9 +$DIMCLRD + 70 + 0 + 9 +$DIMCLRE + 70 + 0 + 9 +$DIMCLRT + 70 + 0 + 9 +$DIMTFAC + 40 +1.0 + 9 +$DIMGAP + 40 +0.0 + 9 +$LUNITS + 70 + 2 + 9 +$LUPREC + 70 + 2 + 9 +$SKETCHINC + 40 +1.0 + 9 +$FILLETRAD + 40 +0.0 + 9 +$AUNITS + 70 + 0 + 9 +$AUPREC + 70 + 0 + 9 +$MENU + 1 +acad + 9 +$ELEVATION + 40 +0.0 + 9 +$PELEVATION + 40 +0.0 + 9 +$THICKNESS + 40 +0.0 + 9 +$LIMCHECK + 70 + 0 + 9 +$BLIPMODE + 70 + 1 + 9 +$CHAMFERA + 40 +0.0 + 9 +$CHAMFERB + 40 +0.0 + 9 +$SKPOLY + 70 + 0 + 9 +$TDCREATE + 40 +2450818.858134 + 9 +$TDUPDATE + 40 +2450820.494744 + 9 +$TDINDWG + 40 +0.466052 + 9 +$TDUSRTIMER + 40 +0.466052 + 9 +$USRTIMER + 70 + 1 + 9 +$ANGBASE + 50 +0.0 + 9 +$ANGDIR + 70 + 0 + 9 +$PDMODE + 70 + 0 + 9 +$PDSIZE + 40 +0.0 + 9 +$PLINEWID + 40 +0.0 + 9 +$COORDS + 70 + 2 + 9 +$SPLFRAME + 70 + 0 + 9 +$SPLINETYPE + 70 + 6 + 9 +$SPLINESEGS + 70 + 8 + 9 +$ATTDIA + 70 + 0 + 9 +$ATTREQ + 70 + 1 + 9 +$HANDLING + 70 + 1 + 9 +$HANDSEED + 5 +1751 + 9 +$SURFTAB1 + 70 + 6 + 9 +$SURFTAB2 + 70 + 6 + 9 +$SURFTYPE + 70 + 6 + 9 +$SURFU + 70 + 6 + 9 +$SURFV + 70 + 6 + 9 +$UCSNAME + 2 +PAPIERURSPRUNG + 9 +$UCSORG + 10 +4005.0 + 20 +5370.0 + 30 +0.0 + 9 +$UCSXDIR + 10 +1.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSYDIR + 10 +0.0 + 20 +1.0 + 30 +0.0 + 9 +$PUCSNAME + 2 + + 9 +$PUCSORG + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSXDIR + 10 +1.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSYDIR + 10 +0.0 + 20 +1.0 + 30 +0.0 + 9 +$USERI1 + 70 + 0 + 9 +$USERI2 + 70 + 0 + 9 +$USERI3 + 70 + 0 + 9 +$USERI4 + 70 + 0 + 9 +$USERI5 + 70 + 0 + 9 +$USERR1 + 40 +0.0 + 9 +$USERR2 + 40 +0.0 + 9 +$USERR3 + 40 +0.0 + 9 +$USERR4 + 40 +0.0 + 9 +$USERR5 + 40 +0.0 + 9 +$WORLDVIEW + 70 + 1 + 9 +$SHADEDGE + 70 + 3 + 9 +$SHADEDIF + 70 + 70 + 9 +$TILEMODE + 70 + 1 + 9 +$MAXACTVP + 70 + 16 + 9 +$PLIMCHECK + 70 + 0 + 9 +$PEXTMIN + 10 +1.000000E+020 + 20 +1.000000E+020 + 30 +1.000000E+020 + 9 +$PEXTMAX + 10 +-1.000000E+020 + 20 +-1.000000E+020 + 30 +-1.000000E+020 + 9 +$PLIMMIN + 10 +0.0 + 20 +0.0 + 9 +$PLIMMAX + 10 +12.0 + 20 +9.0 + 9 +$UNITMODE + 70 + 0 + 9 +$VISRETAIN + 70 + 0 + 9 +$PLINEGEN + 70 + 0 + 9 +$PSLTSCALE + 70 + 0 + 0 +ENDSEC + 0 +SECTION + 2 +TABLES + 0 +TABLE + 2 +VPORT + 70 + 3 + 0 +VPORT + 2 +*ACTIVE + 70 + 0 + 10 +0.0 + 20 +0.0 + 11 +1.0 + 21 +1.0 + 12 +11853.224688 + 22 +7639.042096 + 13 +0.0 + 23 +0.0 + 14 +5.0 + 24 +5.0 + 15 +10.0 + 25 +10.0 + 16 +0.0 + 26 +0.0 + 36 +1.0 + 17 +0.0 + 27 +0.0 + 37 +0.0 + 40 +15278.084191 + 41 +1.551664 + 42 +50.0 + 43 +0.0 + 44 +0.0 + 50 +0.0 + 51 +0.0 + 71 + 0 + 72 + 100 + 73 + 1 + 74 + 1 + 75 + 0 + 76 + 0 + 77 + 0 + 78 + 1 + 0 +ENDTAB + 0 +TABLE + 2 +LTYPE + 70 + 25 + 0 +LTYPE + 2 +CONTINUOUS + 70 + 0 + 3 +Solid Line + 72 + 65 + 73 + 0 + 40 +0.0 + 0 +LTYPE + 2 +RAND + 70 + 0 + 3 +__ __ . __ __ . __ __ . __ __ . __ __ . __ __ . + 72 + 65 + 73 + 6 + 40 +1.75 + 49 +0.5 + 49 +-0.25 + 49 +0.5 + 49 +-0.25 + 49 +0.0 + 49 +-0.25 + 0 +LTYPE + 2 +RAND2 + 70 + 0 + 3 +__.__.__.__.__.__.__.__.__.__.__.__.__.__.__.__ + 72 + 65 + 73 + 6 + 40 +0.875 + 49 +0.25 + 49 +-0.125 + 49 +0.25 + 49 +-0.125 + 49 +0.0 + 49 +-0.125 + 0 +LTYPE + 2 +RANDX2 + 70 + 0 + 3 +____ ____ . ____ ____ . ____ ____ . __ + 72 + 65 + 73 + 6 + 40 +3.5 + 49 +1.0 + 49 +-0.5 + 49 +1.0 + 49 +-0.5 + 49 +0.0 + 49 +-0.5 + 0 +LTYPE + 2 +MITTE + 70 + 0 + 3 +____ _ ____ _ ____ _ ____ _ ____ _ ____ _ ____ + 72 + 65 + 73 + 4 + 40 +2.0 + 49 +1.25 + 49 +-0.25 + 49 +0.25 + 49 +-0.25 + 0 +LTYPE + 2 +MITTE2 + 70 + 0 + 3 +___ _ ___ _ ___ _ ___ _ ___ _ ___ _ ___ _ ___ _ + 72 + 65 + 73 + 4 + 40 +1.125 + 49 +0.75 + 49 +-0.125 + 49 +0.125 + 49 +-0.125 + 0 +LTYPE + 2 +MITTEX2 + 70 + 0 + 3 +________ __ ________ __ ________ __ _____ + 72 + 65 + 73 + 4 + 40 +4.0 + 49 +2.5 + 49 +-0.5 + 49 +0.5 + 49 +-0.5 + 0 +LTYPE + 2 +STRICHPUNKT + 70 + 0 + 3 +__ . __ . __ . __ . __ . __ . __ . __ . __ . __ + 72 + 65 + 73 + 4 + 40 +1.0 + 49 +0.5 + 49 +-0.25 + 49 +0.0 + 49 +-0.25 + 0 +LTYPE + 2 +STRICHPUNKT2 + 70 + 0 + 3 +_._._._._._._._._._._._._._._._._._._._._._._._ + 72 + 65 + 73 + 4 + 40 +0.5 + 49 +0.25 + 49 +-0.125 + 49 +0.0 + 49 +-0.125 + 0 +LTYPE + 2 +STRICHPUNKTX2 + 70 + 0 + 3 +____ . ____ . ____ . ____ . ____ . __ + 72 + 65 + 73 + 4 + 40 +2.0 + 49 +1.0 + 49 +-0.5 + 49 +0.0 + 49 +-0.5 + 0 +LTYPE + 2 +GESTRICHELT + 70 + 0 + 3 +__ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ + 72 + 65 + 73 + 2 + 40 +0.75 + 49 +0.5 + 49 +-0.25 + 0 +LTYPE + 2 +GESTRICHELT2 + 70 + 0 + 3 +_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ + 72 + 65 + 73 + 2 + 40 +0.375 + 49 +0.25 + 49 +-0.125 + 0 +LTYPE + 2 +GESTRICHELTX2 + 70 + 0 + 3 +____ ____ ____ ____ ____ ____ ____ ____ + 72 + 65 + 73 + 2 + 40 +1.5 + 49 +1.0 + 49 +-0.5 + 0 +LTYPE + 2 +GETRENNT + 70 + 0 + 3 +____ . . ____ . . ____ . . ____ . . ____ . . __ + 72 + 65 + 73 + 6 + 40 +1.25 + 49 +0.5 + 49 +-0.25 + 49 +0.0 + 49 +-0.25 + 49 +0.0 + 49 +-0.25 + 0 +LTYPE + 2 +GETRENNT2 + 70 + 0 + 3 +__..__..__..__..__..__..__..__..__..__..__..__. + 72 + 65 + 73 + 6 + 40 +0.625 + 49 +0.25 + 49 +-0.125 + 49 +0.0 + 49 +-0.125 + 49 +0.0 + 49 +-0.125 + 0 +LTYPE + 2 +GETRENNTX2 + 70 + 0 + 3 +________ . . ________ . . ________ . . + 72 + 65 + 73 + 6 + 40 +2.5 + 49 +1.0 + 49 +-0.5 + 49 +0.0 + 49 +-0.5 + 49 +0.0 + 49 +-0.5 + 0 +LTYPE + 2 +PUNKT + 70 + 0 + 3 +. . . . . . . . . . . . . . . . . . . . . . . . + 72 + 65 + 73 + 2 + 40 +0.25 + 49 +0.0 + 49 +-0.25 + 0 +LTYPE + 2 +PUNKT2 + 70 + 0 + 3 +............................................... + 72 + 65 + 73 + 2 + 40 +0.125 + 49 +0.0 + 49 +-0.125 + 0 +LTYPE + 2 +PUNKTX2 + 70 + 0 + 3 +. . . . . . . . . . . . . . . . + 72 + 65 + 73 + 2 + 40 +0.5 + 49 +0.0 + 49 +-0.5 + 0 +LTYPE + 2 +VERDECKT + 70 + 0 + 3 +__ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ + 72 + 65 + 73 + 2 + 40 +0.375 + 49 +0.25 + 49 +-0.125 + 0 +LTYPE + 2 +VERDECKT2 + 70 + 0 + 3 +_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ + 72 + 65 + 73 + 2 + 40 +0.1875 + 49 +0.125 + 49 +-0.0625 + 0 +LTYPE + 2 +VERDECKTX2 + 70 + 0 + 3 +____ ____ ____ ____ ____ ____ ____ ____ ____ __ + 72 + 65 + 73 + 2 + 40 +0.75 + 49 +0.5 + 49 +-0.25 + 0 +LTYPE + 2 +PHANTOM + 70 + 0 + 3 +______ __ __ ______ __ __ ______ __ __ + 72 + 65 + 73 + 6 + 40 +2.5 + 49 +1.25 + 49 +-0.25 + 49 +0.25 + 49 +-0.25 + 49 +0.25 + 49 +-0.25 + 0 +LTYPE + 2 +PHANTOM2 + 70 + 0 + 3 +___ _ _ ___ _ _ ___ _ _ ___ _ _ ___ _ _ ___ _ _ + 72 + 65 + 73 + 6 + 40 +1.25 + 49 +0.625 + 49 +-0.125 + 49 +0.125 + 49 +-0.125 + 49 +0.125 + 49 +-0.125 + 0 +LTYPE + 2 +PHANTOMX2 + 70 + 0 + 3 +____________ ____ ____ ____________ + 72 + 65 + 73 + 6 + 40 +5.0 + 49 +2.5 + 49 +-0.5 + 49 +0.5 + 49 +-0.5 + 49 +0.5 + 49 +-0.5 + 0 +ENDTAB + 0 +TABLE + 2 +LAYER + 70 + 24 + 0 +LAYER + 2 +0 + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +LAYER + 2 +MAUERWERK + 70 + 0 + 62 + 6 + 6 +CONTINUOUS + 0 +LAYER + 2 +VORSATZSCHALE + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +LAYER + 2 +PE-FOLIE + 70 + 0 + 62 + 1 + 6 +GESTRICHELTX2 + 0 +LAYER + 2 +FUNDAMENT + 70 + 0 + 62 + 8 + 6 +CONTINUOUS + 0 +LAYER + 2 +BEMASSUNG + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +LAYER + 2 +STUERTZE + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +LAYER + 2 +ESTRICH + 70 + 0 + 62 + 4 + 6 +CONTINUOUS + 0 +LAYER + 2 +DECKEN + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +LAYER + 2 +DAEMMUNG + 70 + 0 + 62 + 4 + 6 +CONTINUOUS + 0 +LAYER + 2 +TUEREN + 70 + 0 + 62 + 3 + 6 +CONTINUOUS + 0 +LAYER + 2 +ERDBODEN + 70 + 0 + 62 + 5 + 6 +CONTINUOUS + 0 +LAYER + 2 +SCHNITTKANTEN + 70 + 0 + 62 + 1 + 6 +GESTRICHELT + 0 +LAYER + 2 +TRENNWAND + 70 + 0 + 62 + 8 + 6 +CONTINUOUS + 0 +LAYER + 2 +LEGENDE-70 + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +LAYER + 2 +LEGENDE-35 + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +LAYER + 2 +DETAILS + 70 + 0 + 62 + 7 + 6 +GESTRICHELTX2 + 0 +LAYER + 2 +DRAHTANKER + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +LAYER + 2 +SCHRAFFUR + 70 + 0 + 62 + 2 + 6 +CONTINUOUS + 0 +LAYER + 2 +DEFPOINTS + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +LAYER + 2 +HOLZ + 70 + 0 + 62 + 5 + 6 +CONTINUOUS + 0 +LAYER + 2 +SCHORNSTEIN + 70 + 0 + 62 + 1 + 6 +CONTINUOUS + 0 +LAYER + 2 +DACHZIEGEL + 70 + 0 + 62 + 8 + 6 +CONTINUOUS + 0 +LAYER + 2 +REGENRINNE + 70 + 0 + 62 + 3 + 6 +CONTINUOUS + 0 +ENDTAB + 0 +TABLE + 2 +STYLE + 70 + 1 + 0 +STYLE + 2 +STANDARD + 70 + 0 + 40 +0.0 + 41 +1.0 + 50 +0.0 + 71 + 0 + 42 +175.0 + 3 +txt + 4 + + 0 +ENDTAB + 0 +TABLE + 2 +VIEW + 70 + 0 + 0 +ENDTAB + 0 +TABLE + 2 +UCS + 70 + 3 + 0 +UCS + 2 +LOKAL + 70 + 0 + 10 +4125.0 + 20 +5250.0 + 30 +0.0 + 11 +1.0 + 21 +0.0 + 31 +0.0 + 12 +0.0 + 22 +1.0 + 32 +0.0 + 0 +UCS + 2 +PAPIERURSPRUNG + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 11 +1.0 + 21 +0.0 + 31 +0.0 + 12 +0.0 + 22 +1.0 + 32 +0.0 + 0 +UCS + 2 +ZANGE_SPARREN + 70 + 0 + 10 +2640.0 + 20 +2615.0 + 30 +0.0 + 11 +1.0 + 21 +0.0 + 31 +0.0 + 12 +0.0 + 22 +1.0 + 32 +0.0 + 0 +ENDTAB + 0 +TABLE + 2 +APPID + 70 + 1 + 0 +APPID + 2 +ACAD + 70 + 0 + 0 +ENDTAB + 0 +TABLE + 2 +DIMSTYLE + 70 + 1 + 0 +DIMSTYLE + 2 +BEMASSUNG + 70 + 0 + 3 + + 4 + + 5 +MASSHILFSLINIE + 6 + + 7 + + 40 +1.0 + 41 +1.0 + 42 +1.0 + 43 +3.0 + 44 +0.5 + 45 +0.0 + 46 +0.0 + 47 +0.0 + 48 +0.0 +140 +87.5 +141 +-0.5 +142 +0.0 +143 +25.4 +144 +1.0 +145 +0.0 +146 +1.0 +147 +0.0 + 71 + 0 + 72 + 0 + 73 + 0 + 74 + 0 + 75 + 1 + 76 + 1 + 77 + 1 + 78 + 8 +170 + 0 +171 + 2 +172 + 1 +173 + 0 +174 + 1 +175 + 0 +176 + 0 +177 + 0 +178 + 0 + 0 +ENDTAB + 0 +ENDSEC + 0 +SECTION + 2 +BLOCKS + 0 +BLOCK + 8 +0 + 2 +$MODEL_SPACE + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +$MODEL_SPACE + 1 + + 0 +ENDBLK + 5 +7C + 8 +0 + 0 +BLOCK + 67 + 1 + 8 +0 + 2 +$PAPER_SPACE + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +$PAPER_SPACE + 1 + + 0 +ENDBLK + 5 +7A + 67 + 1 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +RAHMEN50 + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +RAHMEN50 + 1 + + 0 +POLYLINE + 5 +80 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +1392 + 8 +0 + 10 +1000.0 + 20 +250.0 + 30 +0.0 + 0 +VERTEX + 5 +1393 + 8 +0 + 10 +41800.0 + 20 +250.0 + 30 +0.0 + 0 +VERTEX + 5 +1394 + 8 +0 + 10 +41800.0 + 20 +29450.0 + 30 +0.0 + 0 +VERTEX + 5 +1395 + 8 +0 + 10 +1000.0 + 20 +29450.0 + 30 +0.0 + 0 +SEQEND + 5 +1396 + 8 +0 + 0 +POLYLINE + 5 +86 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +1397 + 8 +0 + 10 +32800.0 + 20 +250.0 + 30 +0.0 + 0 +VERTEX + 5 +1398 + 8 +0 + 10 +32800.0 + 20 +13250.0 + 30 +0.0 + 0 +VERTEX + 5 +1399 + 8 +0 + 10 +41800.0 + 20 +13250.0 + 30 +0.0 + 0 +SEQEND + 5 +139A + 8 +0 + 0 +POLYLINE + 5 +8B + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +139B + 8 +0 + 10 +39550.0 + 20 +13250.0 + 30 +0.0 + 0 +VERTEX + 5 +139C + 8 +0 + 10 +39550.0 + 20 +11000.0 + 30 +0.0 + 0 +SEQEND + 5 +139D + 8 +0 + 0 +POLYLINE + 5 +8F + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +139E + 8 +0 + 10 +41800.0 + 20 +12250.0 + 30 +0.0 + 0 +VERTEX + 5 +139F + 8 +0 + 10 +37300.0 + 20 +12250.0 + 30 +0.0 + 0 +SEQEND + 5 +13A0 + 8 +0 + 0 +POLYLINE + 5 +93 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +13A1 + 8 +0 + 10 +41800.0 + 20 +11625.0 + 30 +0.0 + 0 +VERTEX + 5 +13A2 + 8 +0 + 10 +37300.0 + 20 +11625.0 + 30 +0.0 + 0 +SEQEND + 5 +13A3 + 8 +0 + 0 +POLYLINE + 5 +97 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +13A4 + 8 +0 + 10 +32800.0 + 20 +11000.0 + 30 +0.0 + 0 +VERTEX + 5 +13A5 + 8 +0 + 10 +41800.0 + 20 +11000.0 + 30 +0.0 + 0 +SEQEND + 5 +13A6 + 8 +0 + 0 +POLYLINE + 5 +9B + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +13A7 + 8 +0 + 10 +37300.0 + 20 +13250.0 + 30 +0.0 + 0 +VERTEX + 5 +13A8 + 8 +0 + 10 +37300.0 + 20 +6500.0 + 30 +0.0 + 0 +SEQEND + 5 +13A9 + 8 +0 + 0 +POLYLINE + 5 +9F + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +13AA + 8 +0 + 10 +32800.0 + 20 +8750.0 + 30 +0.0 + 0 +VERTEX + 5 +13AB + 8 +0 + 10 +37300.0 + 20 +8750.0 + 30 +0.0 + 0 +SEQEND + 5 +13AC + 8 +0 + 0 +POLYLINE + 5 +A3 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +13AD + 8 +0 + 10 +32800.0 + 20 +6500.0 + 30 +0.0 + 0 +VERTEX + 5 +13AE + 8 +0 + 10 +41800.0 + 20 +6500.0 + 30 +0.0 + 0 +SEQEND + 5 +13AF + 8 +0 + 0 +POLYLINE + 5 +A7 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +13B0 + 8 +0 + 10 +41800.0 + 20 +2000.0 + 30 +0.0 + 0 +VERTEX + 5 +13B1 + 8 +0 + 10 +32800.0 + 20 +2000.0 + 30 +0.0 + 0 +SEQEND + 5 +13B2 + 8 +0 + 0 +POLYLINE + 5 +AB + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +13B3 + 8 +0 + 10 +41800.0 + 20 +950.0 + 30 +0.0 + 0 +VERTEX + 5 +13B4 + 8 +0 + 10 +32800.0 + 20 +950.0 + 30 +0.0 + 0 +SEQEND + 5 +13B5 + 8 +0 + 0 +POLYLINE + 5 +AF + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +13B6 + 8 +0 + 10 +41800.0 + 20 +1300.0 + 30 +0.0 + 0 +VERTEX + 5 +13B7 + 8 +0 + 10 +32800.0 + 20 +1300.0 + 30 +0.0 + 0 +SEQEND + 5 +13B8 + 8 +0 + 0 +POLYLINE + 5 +B3 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +13B9 + 8 +0 + 10 +41800.0 + 20 +1650.0 + 30 +0.0 + 0 +VERTEX + 5 +13BA + 8 +0 + 10 +32800.0 + 20 +1650.0 + 30 +0.0 + 0 +SEQEND + 5 +13BB + 8 +0 + 0 +POLYLINE + 5 +B7 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +13BC + 8 +0 + 10 +41800.0 + 20 +600.0 + 30 +0.0 + 0 +VERTEX + 5 +13BD + 8 +0 + 10 +32800.0 + 20 +600.0 + 30 +0.0 + 0 +SEQEND + 5 +13BE + 8 +0 + 0 +POLYLINE + 5 +BB + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +13BF + 8 +0 + 10 +35100.0 + 20 +250.0 + 30 +0.0 + 0 +VERTEX + 5 +13C0 + 8 +0 + 10 +35100.0 + 20 +2000.0 + 30 +0.0 + 0 +SEQEND + 5 +13C1 + 8 +0 + 0 +POLYLINE + 5 +BF + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +13C2 + 8 +0 + 10 +33950.0 + 20 +250.0 + 30 +0.0 + 0 +VERTEX + 5 +13C3 + 8 +0 + 10 +33950.0 + 20 +2000.0 + 30 +0.0 + 0 +SEQEND + 5 +13C4 + 8 +0 + 0 +POLYLINE + 5 +C3 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +13C5 + 8 +0 + 10 +40650.0 + 20 +250.0 + 30 +0.0 + 0 +VERTEX + 5 +13C6 + 8 +0 + 10 +40650.0 + 20 +2000.0 + 30 +0.0 + 0 +SEQEND + 5 +13C7 + 8 +0 + 0 +ENDBLK + 5 +C7 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +STURZ + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +STURZ + 1 + + 0 +POLYLINE + 5 +C9 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +13C8 + 8 +MAUERWERK + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +13C9 + 8 +MAUERWERK + 10 +0.0 + 20 +-71.0 + 30 +0.0 + 0 +VERTEX + 5 +13CA + 8 +MAUERWERK + 10 +365.0 + 20 +-71.0 + 30 +0.0 + 0 +VERTEX + 5 +13CB + 8 +MAUERWERK + 10 +365.0 + 20 +0.0 + 30 +0.0 + 0 +SEQEND + 5 +13CC + 8 +MAUERWERK + 0 +POLYLINE + 5 +CF + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +13CD + 8 +MAUERWERK + 10 +40.0 + 20 +-1.0 + 30 +0.0 + 0 +VERTEX + 5 +13CE + 8 +MAUERWERK + 10 +40.0 + 20 +-36.0 + 30 +0.0 + 0 +VERTEX + 5 +13CF + 8 +MAUERWERK + 10 +80.0 + 20 +-36.0 + 30 +0.0 + 0 +VERTEX + 5 +13D0 + 8 +MAUERWERK + 10 +80.0 + 20 +-6.0 + 30 +0.0 + 0 +SEQEND + 5 +13D1 + 8 +MAUERWERK + 0 +POLYLINE + 5 +D5 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +13D2 + 8 +MAUERWERK + 10 +160.0 + 20 +-1.0 + 30 +0.0 + 0 +VERTEX + 5 +13D3 + 8 +MAUERWERK + 10 +160.0 + 20 +-36.0 + 30 +0.0 + 0 +VERTEX + 5 +13D4 + 8 +MAUERWERK + 10 +200.0 + 20 +-36.0 + 30 +0.0 + 0 +VERTEX + 5 +13D5 + 8 +MAUERWERK + 10 +200.0 + 20 +-6.0 + 30 +0.0 + 0 +SEQEND + 5 +13D6 + 8 +MAUERWERK + 0 +POLYLINE + 5 +DB + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +13D7 + 8 +MAUERWERK + 10 +285.0 + 20 +-1.0 + 30 +0.0 + 0 +VERTEX + 5 +13D8 + 8 +MAUERWERK + 10 +285.0 + 20 +-36.0 + 30 +0.0 + 0 +VERTEX + 5 +13D9 + 8 +MAUERWERK + 10 +325.0 + 20 +-36.0 + 30 +0.0 + 0 +VERTEX + 5 +13DA + 8 +MAUERWERK + 10 +325.0 + 20 +-6.0 + 30 +0.0 + 0 +SEQEND + 5 +13DB + 8 +MAUERWERK + 0 +POLYLINE + 5 +E1 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +13DC + 8 +MAUERWERK + 10 +121.0 + 20 +-71.0 + 30 +0.0 + 0 +VERTEX + 5 +13DD + 8 +MAUERWERK + 10 +121.0 + 20 +0.0 + 30 +0.0 + 0 +SEQEND + 5 +13DE + 8 +MAUERWERK + 0 +POLYLINE + 5 +E5 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +13DF + 8 +MAUERWERK + 10 +243.0 + 20 +-71.0 + 30 +0.0 + 0 +VERTEX + 5 +13E0 + 8 +MAUERWERK + 10 +243.0 + 20 +0.0 + 30 +0.0 + 0 +SEQEND + 5 +13E1 + 8 +MAUERWERK + 0 +ENDBLK + 5 +E9 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +MASSHILFSLINIE + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +MASSHILFSLINIE + 1 + + 0 +POLYLINE + 5 +EB + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +13E2 + 8 +0 + 10 +75.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +13E3 + 8 +0 + 10 +-75.0 + 20 +0.0 + 30 +0.0 + 0 +SEQEND + 5 +13E4 + 8 +0 + 0 +POLYLINE + 5 +EF + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +13E5 + 8 +0 + 10 +0.0 + 20 +-175.0 + 30 +0.0 + 0 +VERTEX + 5 +13E6 + 8 +0 + 10 +0.0 + 20 +175.0 + 30 +0.0 + 0 +SEQEND + 5 +13E7 + 8 +0 + 0 +POLYLINE + 5 +F3 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +13E8 + 8 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +13E9 + 8 +0 + 10 +26.516504 + 20 +26.516504 + 30 +0.0 + 0 +SEQEND + 5 +13EA + 8 +0 + 0 +POLYLINE + 5 +F7 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +13EB + 8 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +13EC + 8 +0 + 10 +-26.516504 + 20 +-26.516504 + 30 +0.0 + 0 +SEQEND + 5 +13ED + 8 +0 + 0 +ENDBLK + 5 +FB + 8 +0 + 0 +BLOCK + 8 +0 + 2 +DREIECK + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +DREIECK + 1 + + 0 +POLYLINE + 5 +FD + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 41 +175.0 + 0 +VERTEX + 5 +13EE + 8 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +13EF + 8 +0 + 10 +0.0 + 20 +87.5 + 30 +0.0 + 40 +175.0 + 0 +SEQEND + 5 +13F0 + 8 +0 + 0 +ENDBLK + 5 +101 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +HOEHE + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +HOEHE + 1 + + 0 +POLYLINE + 5 +103 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 0 +VERTEX + 5 +13F1 + 8 +0 + 10 +0.019553 + 20 +0.17035 + 30 +0.0 + 0 +VERTEX + 5 +13F2 + 8 +0 + 10 +87.539037 + 20 +87.845238 + 30 +0.0 + 0 +VERTEX + 5 +13F3 + 8 +0 + 10 +-87.890695 + 20 +87.845238 + 30 +0.0 + 0 +SEQEND + 5 +13F4 + 8 +0 + 0 +ENDBLK + 5 +108 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X5 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X5 + 1 + + 0 +LINE + 5 +10A + 8 +0 + 62 + 0 + 10 +5645.0 + 20 +8986.079541 + 30 +0.0 + 11 +5932.5 + 21 +9273.579541 + 31 +0.0 + 0 +LINE + 5 +10B + 8 +0 + 62 + 0 + 10 +5645.0 + 20 +9065.629054 + 30 +0.0 + 11 +5932.5 + 21 +9353.129054 + 31 +0.0 + 0 +LINE + 5 +10C + 8 +0 + 62 + 0 + 10 +5645.0 + 20 +9145.178567 + 30 +0.0 + 11 +5932.5 + 21 +9432.678567 + 31 +0.0 + 0 +LINE + 5 +10D + 8 +0 + 62 + 0 + 10 +5645.0 + 20 +9224.72808 + 30 +0.0 + 11 +5932.5 + 21 +9512.22808 + 31 +0.0 + 0 +LINE + 5 +10E + 8 +0 + 62 + 0 + 10 +5645.0 + 20 +9304.277593 + 30 +0.0 + 11 +5932.5 + 21 +9591.777593 + 31 +0.0 + 0 +LINE + 5 +10F + 8 +0 + 62 + 0 + 10 +5645.0 + 20 +9383.827106 + 30 +0.0 + 11 +5932.5 + 21 +9671.327106 + 31 +0.0 + 0 +LINE + 5 +110 + 8 +0 + 62 + 0 + 10 +5645.0 + 20 +9463.376618 + 30 +0.0 + 11 +5932.5 + 21 +9750.876618 + 31 +0.0 + 0 +LINE + 5 +111 + 8 +0 + 62 + 0 + 10 +5645.0 + 20 +9542.926131 + 30 +0.0 + 11 +5932.5 + 21 +9830.426131 + 31 +0.0 + 0 +LINE + 5 +112 + 8 +0 + 62 + 0 + 10 +5645.0 + 20 +9622.475644 + 30 +0.0 + 11 +5932.5 + 21 +9909.975644 + 31 +0.0 + 0 +LINE + 5 +113 + 8 +0 + 62 + 0 + 10 +5645.0 + 20 +9702.025157 + 30 +0.0 + 11 +5910.474843 + 21 +9967.5 + 31 +0.0 + 0 +LINE + 5 +114 + 8 +0 + 62 + 0 + 10 +5645.0 + 20 +9781.57467 + 30 +0.0 + 11 +5830.92533 + 21 +9967.5 + 31 +0.0 + 0 +LINE + 5 +115 + 8 +0 + 62 + 0 + 10 +5645.0 + 20 +9861.124183 + 30 +0.0 + 11 +5751.375817 + 21 +9967.5 + 31 +0.0 + 0 +LINE + 5 +116 + 8 +0 + 62 + 0 + 10 +5645.0 + 20 +9940.673696 + 30 +0.0 + 11 +5671.826304 + 21 +9967.5 + 31 +0.0 + 0 +LINE + 5 +117 + 8 +0 + 62 + 0 + 10 +5645.0 + 20 +8906.530028 + 30 +0.0 + 11 +5932.5 + 21 +9194.030028 + 31 +0.0 + 0 +LINE + 5 +118 + 8 +0 + 62 + 0 + 10 +5645.0 + 20 +8826.980515 + 30 +0.0 + 11 +5932.5 + 21 +9114.480515 + 31 +0.0 + 0 +LINE + 5 +119 + 8 +0 + 62 + 0 + 10 +5645.0 + 20 +8747.431002 + 30 +0.0 + 11 +5932.5 + 21 +9034.931002 + 31 +0.0 + 0 +LINE + 5 +11A + 8 +0 + 62 + 0 + 10 +5645.0 + 20 +8667.88149 + 30 +0.0 + 11 +5932.5 + 21 +8955.38149 + 31 +0.0 + 0 +LINE + 5 +11B + 8 +0 + 62 + 0 + 10 +5645.0 + 20 +8588.331977 + 30 +0.0 + 11 +5932.5 + 21 +8875.831977 + 31 +0.0 + 0 +LINE + 5 +11C + 8 +0 + 62 + 0 + 10 +5645.0 + 20 +8508.782464 + 30 +0.0 + 11 +5932.5 + 21 +8796.282464 + 31 +0.0 + 0 +LINE + 5 +11D + 8 +0 + 62 + 0 + 10 +5645.0 + 20 +8429.232951 + 30 +0.0 + 11 +5932.5 + 21 +8716.732951 + 31 +0.0 + 0 +LINE + 5 +11E + 8 +0 + 62 + 0 + 10 +5645.0 + 20 +8349.683438 + 30 +0.0 + 11 +5932.5 + 21 +8637.183438 + 31 +0.0 + 0 +LINE + 5 +11F + 8 +0 + 62 + 0 + 10 +5684.866075 + 20 +8310.0 + 30 +0.0 + 11 +5932.5 + 21 +8557.633925 + 31 +0.0 + 0 +LINE + 5 +120 + 8 +0 + 62 + 0 + 10 +5764.415588 + 20 +8310.0 + 30 +0.0 + 11 +5932.5 + 21 +8478.084412 + 31 +0.0 + 0 +LINE + 5 +121 + 8 +0 + 62 + 0 + 10 +5843.965101 + 20 +8310.0 + 30 +0.0 + 11 +5932.5 + 21 +8398.534899 + 31 +0.0 + 0 +LINE + 5 +122 + 8 +0 + 62 + 0 + 10 +5923.514613 + 20 +8310.0 + 30 +0.0 + 11 +5932.5 + 21 +8318.985387 + 31 +0.0 + 0 +ENDBLK + 5 +123 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X6 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X6 + 1 + + 0 +LINE + 5 +125 + 8 +0 + 62 + 0 + 10 +6282.5 + 20 +8615.952378 + 30 +0.0 + 11 +7195.0 + 21 +9528.452378 + 31 +0.0 + 0 +LINE + 5 +126 + 8 +0 + 62 + 0 + 10 +6282.5 + 20 +8828.084412 + 30 +0.0 + 11 +7195.0 + 21 +9740.584412 + 31 +0.0 + 0 +LINE + 5 +127 + 8 +0 + 62 + 0 + 10 +6282.5 + 20 +9040.216447 + 30 +0.0 + 11 +7195.0 + 21 +9952.716447 + 31 +0.0 + 0 +LINE + 5 +128 + 8 +0 + 62 + 0 + 10 +6282.5 + 20 +9252.348481 + 30 +0.0 + 11 +6997.651519 + 21 +9967.5 + 31 +0.0 + 0 +LINE + 5 +129 + 8 +0 + 62 + 0 + 10 +6282.5 + 20 +9464.480515 + 30 +0.0 + 11 +6785.519485 + 21 +9967.5 + 31 +0.0 + 0 +LINE + 5 +12A + 8 +0 + 62 + 0 + 10 +6282.5 + 20 +9676.61255 + 30 +0.0 + 11 +6573.38745 + 21 +9967.5 + 31 +0.0 + 0 +LINE + 5 +12B + 8 +0 + 62 + 0 + 10 +6282.5 + 20 +9888.744584 + 30 +0.0 + 11 +6361.255416 + 21 +9967.5 + 31 +0.0 + 0 +LINE + 5 +12C + 8 +0 + 62 + 0 + 10 +6282.5 + 20 +8403.820344 + 30 +0.0 + 11 +7195.0 + 21 +9316.320344 + 31 +0.0 + 0 +LINE + 5 +12D + 8 +0 + 62 + 0 + 10 +6400.811691 + 20 +8310.0 + 30 +0.0 + 11 +7195.0 + 21 +9104.188309 + 31 +0.0 + 0 +LINE + 5 +12E + 8 +0 + 62 + 0 + 10 +6612.943725 + 20 +8310.0 + 30 +0.0 + 11 +7195.0 + 21 +8892.056275 + 31 +0.0 + 0 +LINE + 5 +12F + 8 +0 + 62 + 0 + 10 +6825.07576 + 20 +8310.0 + 30 +0.0 + 11 +7195.0 + 21 +8679.92424 + 31 +0.0 + 0 +LINE + 5 +130 + 8 +0 + 62 + 0 + 10 +7037.207794 + 20 +8310.0 + 30 +0.0 + 11 +7195.0 + 21 +8467.792206 + 31 +0.0 + 0 +ENDBLK + 5 +131 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D7 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D7 + 1 + + 0 +LINE + 5 +133 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +5641.0 + 20 +7565.0 + 30 +0.0 + 11 +5934.0 + 21 +7565.0 + 31 +0.0 + 0 +INSERT + 5 +134 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +5640.0 + 20 +7565.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +135 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +5935.0 + 20 +7565.0 + 30 +0.0 + 0 +TEXT + 5 +136 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +5743.75 + 20 +7608.75 + 30 +0.0 + 40 +87.5 + 1 +11 + 72 + 1 + 11 +5787.5 + 21 +7652.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +138 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5640.0 + 20 +8330.0 + 30 +0.0 + 0 +POINT + 5 +139 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5935.0 + 20 +8330.0 + 30 +0.0 + 0 +POINT + 5 +13A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5935.0 + 20 +7565.0 + 30 +0.0 + 0 +ENDBLK + 5 +13B + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D8 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D8 + 1 + + 0 +LINE + 5 +13D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +5936.0 + 20 +7565.0 + 30 +0.0 + 11 +6079.0 + 21 +7565.0 + 31 +0.0 + 0 +INSERT + 5 +13E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +5935.0 + 20 +7565.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +13F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +6080.0 + 20 +7565.0 + 30 +0.0 + 0 +TEXT + 5 +140 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +5978.333333 + 20 +7608.75 + 30 +0.0 + 40 +87.5 + 1 +6 + 72 + 1 + 11 +6007.5 + 21 +7652.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +141 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +5935.0 + 20 +8330.0 + 30 +0.0 + 0 +POINT + 5 +142 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +6080.0 + 20 +8315.0 + 30 +0.0 + 0 +POINT + 5 +143 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +6080.0 + 20 +7565.0 + 30 +0.0 + 0 +ENDBLK + 5 +144 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D9 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D9 + 1 + + 0 +LINE + 5 +146 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +6081.0 + 20 +7565.0 + 30 +0.0 + 11 +6279.0 + 21 +7565.0 + 31 +0.0 + 0 +INSERT + 5 +147 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +6080.0 + 20 +7565.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +148 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +6280.0 + 20 +7565.0 + 30 +0.0 + 0 +TEXT + 5 +149 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +6150.833333 + 20 +7608.75 + 30 +0.0 + 40 +87.5 + 1 +8 + 72 + 1 + 11 +6180.0 + 21 +7652.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +14A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +6080.0 + 20 +8315.0 + 30 +0.0 + 0 +POINT + 5 +14B + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +6280.0 + 20 +8345.0 + 30 +0.0 + 0 +POINT + 5 +14C + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +6280.0 + 20 +7565.0 + 30 +0.0 + 0 +ENDBLK + 5 +14D + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D10 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D10 + 1 + + 0 +LINE + 5 +14F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +6281.0 + 20 +7565.0 + 30 +0.0 + 11 +7194.0 + 21 +7565.0 + 31 +0.0 + 0 +INSERT + 5 +150 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +6280.0 + 20 +7565.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +151 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +7195.0 + 20 +7565.0 + 30 +0.0 + 0 +TEXT + 5 +152 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +6664.583333 + 20 +7608.75 + 30 +0.0 + 40 +87.5 + 1 +36 + 72 + 1 + 11 +6737.5 + 21 +7652.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +153 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +6280.0 + 20 +8345.0 + 30 +0.0 + 0 +POINT + 5 +154 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7195.0 + 20 +8330.0 + 30 +0.0 + 0 +POINT + 5 +155 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7195.0 + 20 +7565.0 + 30 +0.0 + 0 +ENDBLK + 5 +156 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X11 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X11 + 1 + + 0 +LINE + 5 +158 + 8 +0 + 62 + 0 + 10 +7219.973556 + 20 +9095.369053 + 30 +0.0 + 11 +7219.973556 + 21 +9095.369053 + 31 +0.0 + 0 +LINE + 5 +159 + 8 +0 + 62 + 0 + 10 +7218.398722 + 20 +9143.539647 + 30 +0.0 + 11 +7218.398722 + 21 +9143.539647 + 31 +0.0 + 0 +LINE + 5 +15A + 8 +0 + 62 + 0 + 10 +7216.823888 + 20 +9191.710242 + 30 +0.0 + 11 +7216.823888 + 21 +9191.710242 + 31 +0.0 + 0 +LINE + 5 +15B + 8 +0 + 62 + 0 + 10 +7215.249055 + 20 +9239.880836 + 30 +0.0 + 11 +7215.249055 + 21 +9239.880836 + 31 +0.0 + 0 +LINE + 5 +15C + 8 +0 + 62 + 0 + 10 +7213.674221 + 20 +9288.05143 + 30 +0.0 + 11 +7213.674221 + 21 +9288.05143 + 31 +0.0 + 0 +LINE + 5 +15D + 8 +0 + 62 + 0 + 10 +7212.099387 + 20 +9336.222024 + 30 +0.0 + 11 +7212.099387 + 21 +9336.222024 + 31 +0.0 + 0 +LINE + 5 +15E + 8 +0 + 62 + 0 + 10 +7210.524553 + 20 +9384.392619 + 30 +0.0 + 11 +7210.524553 + 21 +9384.392619 + 31 +0.0 + 0 +LINE + 5 +15F + 8 +0 + 62 + 0 + 10 +7208.949719 + 20 +9432.563213 + 30 +0.0 + 11 +7208.949719 + 21 +9432.563213 + 31 +0.0 + 0 +LINE + 5 +160 + 8 +0 + 62 + 0 + 10 +7207.374885 + 20 +9480.733807 + 30 +0.0 + 11 +7207.374885 + 21 +9480.733807 + 31 +0.0 + 0 +LINE + 5 +161 + 8 +0 + 62 + 0 + 10 +7205.800051 + 20 +9528.904401 + 30 +0.0 + 11 +7205.800051 + 21 +9528.904401 + 31 +0.0 + 0 +LINE + 5 +162 + 8 +0 + 62 + 0 + 10 +7204.225217 + 20 +9577.074996 + 30 +0.0 + 11 +7204.225217 + 21 +9577.074996 + 31 +0.0 + 0 +LINE + 5 +163 + 8 +0 + 62 + 0 + 10 +7202.650383 + 20 +9625.24559 + 30 +0.0 + 11 +7202.650383 + 21 +9625.24559 + 31 +0.0 + 0 +LINE + 5 +164 + 8 +0 + 62 + 0 + 10 +7201.075549 + 20 +9673.416184 + 30 +0.0 + 11 +7201.075549 + 21 +9673.416184 + 31 +0.0 + 0 +LINE + 5 +165 + 8 +0 + 62 + 0 + 10 +7199.500715 + 20 +9721.586778 + 30 +0.0 + 11 +7199.500715 + 21 +9721.586778 + 31 +0.0 + 0 +LINE + 5 +166 + 8 +0 + 62 + 0 + 10 +7197.925881 + 20 +9769.757372 + 30 +0.0 + 11 +7197.925881 + 21 +9769.757372 + 31 +0.0 + 0 +LINE + 5 +167 + 8 +0 + 62 + 0 + 10 +7231.643398 + 20 +9795.629733 + 30 +0.0 + 11 +7231.643398 + 21 +9795.629733 + 31 +0.0 + 0 +LINE + 5 +168 + 8 +0 + 62 + 0 + 10 +7196.351047 + 20 +9817.927967 + 30 +0.0 + 11 +7196.351047 + 21 +9817.927967 + 31 +0.0 + 0 +LINE + 5 +169 + 8 +0 + 62 + 0 + 10 +7230.068564 + 20 +9843.800327 + 30 +0.0 + 11 +7230.068564 + 21 +9843.800327 + 31 +0.0 + 0 +LINE + 5 +16A + 8 +0 + 62 + 0 + 10 +7228.49373 + 20 +9891.970922 + 30 +0.0 + 11 +7228.49373 + 21 +9891.970922 + 31 +0.0 + 0 +LINE + 5 +16B + 8 +0 + 62 + 0 + 10 +7226.918896 + 20 +9940.141516 + 30 +0.0 + 11 +7226.918896 + 21 +9940.141516 + 31 +0.0 + 0 +LINE + 5 +16C + 8 +0 + 62 + 0 + 10 +7221.54839 + 20 +9047.198459 + 30 +0.0 + 11 +7221.54839 + 21 +9047.198459 + 31 +0.0 + 0 +LINE + 5 +16D + 8 +0 + 62 + 0 + 10 +7223.123224 + 20 +8999.027865 + 30 +0.0 + 11 +7223.123224 + 21 +8999.027865 + 31 +0.0 + 0 +LINE + 5 +16E + 8 +0 + 62 + 0 + 10 +7224.698058 + 20 +8950.857271 + 30 +0.0 + 11 +7224.698058 + 21 +8950.857271 + 31 +0.0 + 0 +LINE + 5 +16F + 8 +0 + 62 + 0 + 10 +7196.125465 + 20 +8879.553742 + 30 +0.0 + 11 +7196.125465 + 21 +8879.553742 + 31 +0.0 + 0 +LINE + 5 +170 + 8 +0 + 62 + 0 + 10 +7226.272892 + 20 +8902.686676 + 30 +0.0 + 11 +7226.272892 + 21 +8902.686676 + 31 +0.0 + 0 +LINE + 5 +171 + 8 +0 + 62 + 0 + 10 +7197.700299 + 20 +8831.383148 + 30 +0.0 + 11 +7197.700299 + 21 +8831.383148 + 31 +0.0 + 0 +LINE + 5 +172 + 8 +0 + 62 + 0 + 10 +7227.847726 + 20 +8854.516082 + 30 +0.0 + 11 +7227.847726 + 21 +8854.516082 + 31 +0.0 + 0 +LINE + 5 +173 + 8 +0 + 62 + 0 + 10 +7199.275133 + 20 +8783.212554 + 30 +0.0 + 11 +7199.275133 + 21 +8783.212554 + 31 +0.0 + 0 +LINE + 5 +174 + 8 +0 + 62 + 0 + 10 +7229.42256 + 20 +8806.345488 + 30 +0.0 + 11 +7229.42256 + 21 +8806.345488 + 31 +0.0 + 0 +LINE + 5 +175 + 8 +0 + 62 + 0 + 10 +7200.849967 + 20 +8735.041959 + 30 +0.0 + 11 +7200.849967 + 21 +8735.041959 + 31 +0.0 + 0 +LINE + 5 +176 + 8 +0 + 62 + 0 + 10 +7230.997394 + 20 +8758.174894 + 30 +0.0 + 11 +7230.997394 + 21 +8758.174894 + 31 +0.0 + 0 +LINE + 5 +177 + 8 +0 + 62 + 0 + 10 +7202.424801 + 20 +8686.871365 + 30 +0.0 + 11 +7202.424801 + 21 +8686.871365 + 31 +0.0 + 0 +LINE + 5 +178 + 8 +0 + 62 + 0 + 10 +7203.999635 + 20 +8638.700771 + 30 +0.0 + 11 +7203.999635 + 21 +8638.700771 + 31 +0.0 + 0 +LINE + 5 +179 + 8 +0 + 62 + 0 + 10 +7205.574469 + 20 +8590.530177 + 30 +0.0 + 11 +7205.574469 + 21 +8590.530177 + 31 +0.0 + 0 +LINE + 5 +17A + 8 +0 + 62 + 0 + 10 +7207.149303 + 20 +8542.359582 + 30 +0.0 + 11 +7207.149303 + 21 +8542.359582 + 31 +0.0 + 0 +LINE + 5 +17B + 8 +0 + 62 + 0 + 10 +7208.724137 + 20 +8494.188988 + 30 +0.0 + 11 +7208.724137 + 21 +8494.188988 + 31 +0.0 + 0 +LINE + 5 +17C + 8 +0 + 62 + 0 + 10 +7210.298971 + 20 +8446.018394 + 30 +0.0 + 11 +7210.298971 + 21 +8446.018394 + 31 +0.0 + 0 +LINE + 5 +17D + 8 +0 + 62 + 0 + 10 +7211.873805 + 20 +8397.8478 + 30 +0.0 + 11 +7211.873805 + 21 +8397.8478 + 31 +0.0 + 0 +LINE + 5 +17E + 8 +0 + 62 + 0 + 10 +7213.448639 + 20 +8349.677206 + 30 +0.0 + 11 +7213.448639 + 21 +8349.677206 + 31 +0.0 + 0 +LINE + 5 +17F + 8 +0 + 62 + 0 + 10 +7210.18492 + 20 +9105.06306 + 30 +0.0 + 11 +7210.18492 + 21 +9105.06306 + 31 +0.0 + 0 +LINE + 5 +180 + 8 +0 + 62 + 0 + 10 +7221.092005 + 20 +9171.227768 + 30 +0.0 + 11 +7221.092005 + 21 +9171.227768 + 31 +0.0 + 0 +LINE + 5 +181 + 8 +0 + 62 + 0 + 10 +7198.042102 + 20 +9232.921954 + 30 +0.0 + 11 +7198.042102 + 21 +9232.921954 + 31 +0.0 + 0 +LINE + 5 +182 + 8 +0 + 62 + 0 + 10 +7211.054816 + 20 +9234.635111 + 30 +0.0 + 11 +7211.054816 + 21 +9234.635111 + 31 +0.0 + 0 +LINE + 5 +183 + 8 +0 + 62 + 0 + 10 +7231.379436 + 20 +9237.310898 + 30 +0.0 + 11 +7231.379436 + 21 +9237.310898 + 31 +0.0 + 0 +LINE + 5 +184 + 8 +0 + 62 + 0 + 10 +7208.329533 + 20 +9299.005084 + 30 +0.0 + 11 +7208.329533 + 21 +9299.005084 + 31 +0.0 + 0 +LINE + 5 +185 + 8 +0 + 62 + 0 + 10 +7219.236618 + 20 +9365.169792 + 30 +0.0 + 11 +7219.236618 + 21 +9365.169792 + 31 +0.0 + 0 +LINE + 5 +186 + 8 +0 + 62 + 0 + 10 +7232.249331 + 20 +9366.882949 + 30 +0.0 + 11 +7232.249331 + 21 +9366.882949 + 31 +0.0 + 0 +LINE + 5 +187 + 8 +0 + 62 + 0 + 10 +7196.186715 + 20 +9426.863979 + 30 +0.0 + 11 +7196.186715 + 21 +9426.863979 + 31 +0.0 + 0 +LINE + 5 +188 + 8 +0 + 62 + 0 + 10 +7209.199429 + 20 +9428.577135 + 30 +0.0 + 11 +7209.199429 + 21 +9428.577135 + 31 +0.0 + 0 +LINE + 5 +189 + 8 +0 + 62 + 0 + 10 +7229.524049 + 20 +9431.252922 + 30 +0.0 + 11 +7229.524049 + 21 +9431.252922 + 31 +0.0 + 0 +LINE + 5 +18A + 8 +0 + 62 + 0 + 10 +7206.474146 + 20 +9492.947108 + 30 +0.0 + 11 +7206.474146 + 21 +9492.947108 + 31 +0.0 + 0 +LINE + 5 +18B + 8 +0 + 62 + 0 + 10 +7217.381231 + 20 +9559.111817 + 30 +0.0 + 11 +7217.381231 + 21 +9559.111817 + 31 +0.0 + 0 +LINE + 5 +18C + 8 +0 + 62 + 0 + 10 +7230.393944 + 20 +9560.824973 + 30 +0.0 + 11 +7230.393944 + 21 +9560.824973 + 31 +0.0 + 0 +LINE + 5 +18D + 8 +0 + 62 + 0 + 10 +7207.344042 + 20 +9622.519159 + 30 +0.0 + 11 +7207.344042 + 21 +9622.519159 + 31 +0.0 + 0 +LINE + 5 +18E + 8 +0 + 62 + 0 + 10 +7227.668662 + 20 +9625.194946 + 30 +0.0 + 11 +7227.668662 + 21 +9625.194946 + 31 +0.0 + 0 +LINE + 5 +18F + 8 +0 + 62 + 0 + 10 +7204.618759 + 20 +9686.889132 + 30 +0.0 + 11 +7204.618759 + 21 +9686.889132 + 31 +0.0 + 0 +LINE + 5 +190 + 8 +0 + 62 + 0 + 10 +7215.525843 + 20 +9753.053841 + 30 +0.0 + 11 +7215.525843 + 21 +9753.053841 + 31 +0.0 + 0 +LINE + 5 +191 + 8 +0 + 62 + 0 + 10 +7228.538557 + 20 +9754.766997 + 30 +0.0 + 11 +7228.538557 + 21 +9754.766997 + 31 +0.0 + 0 +LINE + 5 +192 + 8 +0 + 62 + 0 + 10 +7205.488655 + 20 +9816.461183 + 30 +0.0 + 11 +7205.488655 + 21 +9816.461183 + 31 +0.0 + 0 +LINE + 5 +193 + 8 +0 + 62 + 0 + 10 +7225.813275 + 20 +9819.13697 + 30 +0.0 + 11 +7225.813275 + 21 +9819.13697 + 31 +0.0 + 0 +LINE + 5 +194 + 8 +0 + 62 + 0 + 10 +7202.763372 + 20 +9880.831157 + 30 +0.0 + 11 +7202.763372 + 21 +9880.831157 + 31 +0.0 + 0 +LINE + 5 +195 + 8 +0 + 62 + 0 + 10 +7213.670456 + 20 +9946.995865 + 30 +0.0 + 11 +7213.670456 + 21 +9946.995865 + 31 +0.0 + 0 +LINE + 5 +196 + 8 +0 + 62 + 0 + 10 +7226.68317 + 20 +9948.709021 + 30 +0.0 + 11 +7226.68317 + 21 +9948.709021 + 31 +0.0 + 0 +LINE + 5 +197 + 8 +0 + 62 + 0 + 10 +7199.897489 + 20 +9038.97993 + 30 +0.0 + 11 +7199.897489 + 21 +9038.97993 + 31 +0.0 + 0 +LINE + 5 +198 + 8 +0 + 62 + 0 + 10 +7212.910203 + 20 +9040.693086 + 30 +0.0 + 11 +7212.910203 + 21 +9040.693086 + 31 +0.0 + 0 +LINE + 5 +199 + 8 +0 + 62 + 0 + 10 +7222.947392 + 20 +8977.285744 + 30 +0.0 + 11 +7222.947392 + 21 +8977.285744 + 31 +0.0 + 0 +LINE + 5 +19A + 8 +0 + 62 + 0 + 10 +7212.040307 + 20 +8911.121035 + 30 +0.0 + 11 +7212.040307 + 21 +8911.121035 + 31 +0.0 + 0 +LINE + 5 +19B + 8 +0 + 62 + 0 + 10 +7201.752876 + 20 +8845.037906 + 30 +0.0 + 11 +7201.752876 + 21 +8845.037906 + 31 +0.0 + 0 +LINE + 5 +19C + 8 +0 + 62 + 0 + 10 +7214.76559 + 20 +8846.751062 + 30 +0.0 + 11 +7214.76559 + 21 +8846.751062 + 31 +0.0 + 0 +LINE + 5 +19D + 8 +0 + 62 + 0 + 10 +7224.802779 + 20 +8783.343719 + 30 +0.0 + 11 +7224.802779 + 21 +8783.343719 + 31 +0.0 + 0 +LINE + 5 +19E + 8 +0 + 62 + 0 + 10 +7213.895695 + 20 +8717.179011 + 30 +0.0 + 11 +7213.895695 + 21 +8717.179011 + 31 +0.0 + 0 +LINE + 5 +19F + 8 +0 + 62 + 0 + 10 +7203.608263 + 20 +8651.095881 + 30 +0.0 + 11 +7203.608263 + 21 +8651.095881 + 31 +0.0 + 0 +LINE + 5 +1A0 + 8 +0 + 62 + 0 + 10 +7216.620977 + 20 +8652.809038 + 30 +0.0 + 11 +7216.620977 + 21 +8652.809038 + 31 +0.0 + 0 +LINE + 5 +1A1 + 8 +0 + 62 + 0 + 10 +7226.658166 + 20 +8589.401695 + 30 +0.0 + 11 +7226.658166 + 21 +8589.401695 + 31 +0.0 + 0 +LINE + 5 +1A2 + 8 +0 + 62 + 0 + 10 +7195.426462 + 20 +8520.5612 + 30 +0.0 + 11 +7195.426462 + 21 +8520.5612 + 31 +0.0 + 0 +LINE + 5 +1A3 + 8 +0 + 62 + 0 + 10 +7215.751082 + 20 +8523.236987 + 30 +0.0 + 11 +7215.751082 + 21 +8523.236987 + 31 +0.0 + 0 +LINE + 5 +1A4 + 8 +0 + 62 + 0 + 10 +7205.46365 + 20 +8457.153857 + 30 +0.0 + 11 +7205.46365 + 21 +8457.153857 + 31 +0.0 + 0 +LINE + 5 +1A5 + 8 +0 + 62 + 0 + 10 +7218.476364 + 20 +8458.867013 + 30 +0.0 + 11 +7218.476364 + 21 +8458.867013 + 31 +0.0 + 0 +LINE + 5 +1A6 + 8 +0 + 62 + 0 + 10 +7228.513553 + 20 +8395.459671 + 30 +0.0 + 11 +7228.513553 + 21 +8395.459671 + 31 +0.0 + 0 +LINE + 5 +1A7 + 8 +0 + 62 + 0 + 10 +7197.281849 + 20 +8326.619175 + 30 +0.0 + 11 +7197.281849 + 21 +8326.619175 + 31 +0.0 + 0 +LINE + 5 +1A8 + 8 +0 + 62 + 0 + 10 +7217.606469 + 20 +8329.294962 + 30 +0.0 + 11 +7217.606469 + 21 +8329.294962 + 31 +0.0 + 0 +LINE + 5 +1A9 + 8 +0 + 62 + 0 + 10 +7220.221079 + 20 +9158.506548 + 30 +0.0 + 11 +7220.221079 + 21 +9158.506548 + 31 +0.0 + 0 +LINE + 5 +1AA + 8 +0 + 62 + 0 + 10 +7230.763472 + 20 +9151.790303 + 30 +0.0 + 11 +7230.763472 + 21 +9151.790303 + 31 +0.0 + 0 +LINE + 5 +1AB + 8 +0 + 62 + 0 + 10 +7200.03037 + 20 +9221.109104 + 30 +0.0 + 11 +7200.03037 + 21 +9221.109104 + 31 +0.0 + 0 +LINE + 5 +1AC + 8 +0 + 62 + 0 + 10 +7210.572763 + 20 +9214.392859 + 30 +0.0 + 11 +7210.572763 + 21 +9214.392859 + 31 +0.0 + 0 +LINE + 5 +1AD + 8 +0 + 62 + 0 + 10 +7228.334669 + 20 +9252.816933 + 30 +0.0 + 11 +7228.334669 + 21 +9252.816933 + 31 +0.0 + 0 +LINE + 5 +1AE + 8 +0 + 62 + 0 + 10 +7208.14396 + 20 +9315.419488 + 30 +0.0 + 11 +7208.14396 + 21 +9315.419488 + 31 +0.0 + 0 +LINE + 5 +1AF + 8 +0 + 62 + 0 + 10 +7217.311789 + 20 +9409.058248 + 30 +0.0 + 11 +7217.311789 + 21 +9409.058248 + 31 +0.0 + 0 +LINE + 5 +1B0 + 8 +0 + 62 + 0 + 10 +7227.854182 + 20 +9402.342003 + 30 +0.0 + 11 +7227.854182 + 21 +9402.342003 + 31 +0.0 + 0 +LINE + 5 +1B1 + 8 +0 + 62 + 0 + 10 +7197.12108 + 20 +9471.660804 + 30 +0.0 + 11 +7197.12108 + 21 +9471.660804 + 31 +0.0 + 0 +LINE + 5 +1B2 + 8 +0 + 62 + 0 + 10 +7207.663473 + 20 +9464.944559 + 30 +0.0 + 11 +7207.663473 + 21 +9464.944559 + 31 +0.0 + 0 +LINE + 5 +1B3 + 8 +0 + 62 + 0 + 10 +7225.425379 + 20 +9503.368632 + 30 +0.0 + 11 +7225.425379 + 21 +9503.368632 + 31 +0.0 + 0 +LINE + 5 +1B4 + 8 +0 + 62 + 0 + 10 +7205.23467 + 20 +9565.971188 + 30 +0.0 + 11 +7205.23467 + 21 +9565.971188 + 31 +0.0 + 0 +LINE + 5 +1B5 + 8 +0 + 62 + 0 + 10 +7214.402499 + 20 +9659.609948 + 30 +0.0 + 11 +7214.402499 + 21 +9659.609948 + 31 +0.0 + 0 +LINE + 5 +1B6 + 8 +0 + 62 + 0 + 10 +7224.944892 + 20 +9652.893702 + 30 +0.0 + 11 +7224.944892 + 21 +9652.893702 + 31 +0.0 + 0 +LINE + 5 +1B7 + 8 +0 + 62 + 0 + 10 +7204.754183 + 20 +9715.496258 + 30 +0.0 + 11 +7204.754183 + 21 +9715.496258 + 31 +0.0 + 0 +LINE + 5 +1B8 + 8 +0 + 62 + 0 + 10 +7222.516089 + 20 +9753.920332 + 30 +0.0 + 11 +7222.516089 + 21 +9753.920332 + 31 +0.0 + 0 +LINE + 5 +1B9 + 8 +0 + 62 + 0 + 10 +7202.32538 + 20 +9816.522888 + 30 +0.0 + 11 +7202.32538 + 21 +9816.522888 + 31 +0.0 + 0 +LINE + 5 +1BA + 8 +0 + 62 + 0 + 10 +7231.683919 + 20 +9847.559091 + 30 +0.0 + 11 +7231.683919 + 21 +9847.559091 + 31 +0.0 + 0 +LINE + 5 +1BB + 8 +0 + 62 + 0 + 10 +7211.49321 + 20 +9910.161647 + 30 +0.0 + 11 +7211.49321 + 21 +9910.161647 + 31 +0.0 + 0 +LINE + 5 +1BC + 8 +0 + 62 + 0 + 10 +7222.035603 + 20 +9903.445402 + 30 +0.0 + 11 +7222.035603 + 21 +9903.445402 + 31 +0.0 + 0 +LINE + 5 +1BD + 8 +0 + 62 + 0 + 10 +7201.844894 + 20 +9966.047958 + 30 +0.0 + 11 +7201.844894 + 21 +9966.047958 + 31 +0.0 + 0 +LINE + 5 +1BE + 8 +0 + 62 + 0 + 10 +7211.053249 + 20 +9064.867789 + 30 +0.0 + 11 +7211.053249 + 21 +9064.867789 + 31 +0.0 + 0 +LINE + 5 +1BF + 8 +0 + 62 + 0 + 10 +7231.243958 + 20 +9002.265233 + 30 +0.0 + 11 +7231.243958 + 21 +9002.265233 + 31 +0.0 + 0 +LINE + 5 +1C0 + 8 +0 + 62 + 0 + 10 +7202.939659 + 20 +8970.557405 + 30 +0.0 + 11 +7202.939659 + 21 +8970.557405 + 31 +0.0 + 0 +LINE + 5 +1C1 + 8 +0 + 62 + 0 + 10 +7213.482052 + 20 +8963.84116 + 30 +0.0 + 11 +7213.482052 + 21 +8963.84116 + 31 +0.0 + 0 +LINE + 5 +1C2 + 8 +0 + 62 + 0 + 10 +7223.130368 + 20 +8907.954849 + 30 +0.0 + 11 +7223.130368 + 21 +8907.954849 + 31 +0.0 + 0 +LINE + 5 +1C3 + 8 +0 + 62 + 0 + 10 +7213.962539 + 20 +8814.316089 + 30 +0.0 + 11 +7213.962539 + 21 +8814.316089 + 31 +0.0 + 0 +LINE + 5 +1C4 + 8 +0 + 62 + 0 + 10 +7196.200633 + 20 +8775.892016 + 30 +0.0 + 11 +7196.200633 + 21 +8775.892016 + 31 +0.0 + 0 +LINE + 5 +1C5 + 8 +0 + 62 + 0 + 10 +7205.848949 + 20 +8720.005705 + 30 +0.0 + 11 +7205.848949 + 21 +8720.005705 + 31 +0.0 + 0 +LINE + 5 +1C6 + 8 +0 + 62 + 0 + 10 +7216.391342 + 20 +8713.28946 + 30 +0.0 + 11 +7216.391342 + 21 +8713.28946 + 31 +0.0 + 0 +LINE + 5 +1C7 + 8 +0 + 62 + 0 + 10 +7226.039658 + 20 +8657.403149 + 30 +0.0 + 11 +7226.039658 + 21 +8657.403149 + 31 +0.0 + 0 +LINE + 5 +1C8 + 8 +0 + 62 + 0 + 10 +7196.681119 + 20 +8626.366945 + 30 +0.0 + 11 +7196.681119 + 21 +8626.366945 + 31 +0.0 + 0 +LINE + 5 +1C9 + 8 +0 + 62 + 0 + 10 +7216.871828 + 20 +8563.76439 + 30 +0.0 + 11 +7216.871828 + 21 +8563.76439 + 31 +0.0 + 0 +LINE + 5 +1CA + 8 +0 + 62 + 0 + 10 +7199.109922 + 20 +8525.340316 + 30 +0.0 + 11 +7199.109922 + 21 +8525.340316 + 31 +0.0 + 0 +LINE + 5 +1CB + 8 +0 + 62 + 0 + 10 +7208.758238 + 20 +8469.454005 + 30 +0.0 + 11 +7208.758238 + 21 +8469.454005 + 31 +0.0 + 0 +LINE + 5 +1CC + 8 +0 + 62 + 0 + 10 +7219.300631 + 20 +8462.73776 + 30 +0.0 + 11 +7219.300631 + 21 +8462.73776 + 31 +0.0 + 0 +LINE + 5 +1CD + 8 +0 + 62 + 0 + 10 +7228.948947 + 20 +8406.85145 + 30 +0.0 + 11 +7228.948947 + 21 +8406.85145 + 31 +0.0 + 0 +LINE + 5 +1CE + 8 +0 + 62 + 0 + 10 +7199.590409 + 20 +8375.815246 + 30 +0.0 + 11 +7199.590409 + 21 +8375.815246 + 31 +0.0 + 0 +LINE + 5 +1CF + 8 +0 + 62 + 0 + 10 +7219.781118 + 20 +8313.21269 + 30 +0.0 + 11 +7219.781118 + 21 +8313.21269 + 31 +0.0 + 0 +LINE + 5 +1D0 + 8 +0 + 62 + 0 + 10 +7206.897665 + 20 +9077.542164 + 30 +0.0 + 11 +7206.897665 + 21 +9077.542164 + 31 +0.0 + 0 +LINE + 5 +1D1 + 8 +0 + 62 + 0 + 10 +7231.780775 + 20 +9054.740994 + 30 +0.0 + 11 +7231.780775 + 21 +9054.740994 + 31 +0.0 + 0 +LINE + 5 +1D2 + 8 +0 + 62 + 0 + 10 +7204.45239 + 20 +9170.589922 + 30 +0.0 + 11 +7204.45239 + 21 +9170.589922 + 31 +0.0 + 0 +LINE + 5 +1D3 + 8 +0 + 62 + 0 + 10 +7209.060374 + 20 +9166.367484 + 30 +0.0 + 11 +7209.060374 + 21 +9166.367484 + 31 +0.0 + 0 +LINE + 5 +1D4 + 8 +0 + 62 + 0 + 10 +7230.810055 + 20 +9146.437572 + 30 +0.0 + 11 +7230.810055 + 21 +9146.437572 + 31 +0.0 + 0 +LINE + 5 +1D5 + 8 +0 + 62 + 0 + 10 +7203.48167 + 20 +9262.2865 + 30 +0.0 + 11 +7203.48167 + 21 +9262.2865 + 31 +0.0 + 0 +LINE + 5 +1D6 + 8 +0 + 62 + 0 + 10 +7228.364781 + 20 +9239.485331 + 30 +0.0 + 11 +7228.364781 + 21 +9239.485331 + 31 +0.0 + 0 +LINE + 5 +1D7 + 8 +0 + 62 + 0 + 10 +7201.036396 + 20 +9355.334259 + 30 +0.0 + 11 +7201.036396 + 21 +9355.334259 + 31 +0.0 + 0 +LINE + 5 +1D8 + 8 +0 + 62 + 0 + 10 +7205.644379 + 20 +9351.11182 + 30 +0.0 + 11 +7205.644379 + 21 +9351.11182 + 31 +0.0 + 0 +LINE + 5 +1D9 + 8 +0 + 62 + 0 + 10 +7227.394061 + 20 +9331.181909 + 30 +0.0 + 11 +7227.394061 + 21 +9331.181909 + 31 +0.0 + 0 +LINE + 5 +1DA + 8 +0 + 62 + 0 + 10 +7200.065676 + 20 +9447.030837 + 30 +0.0 + 11 +7200.065676 + 21 +9447.030837 + 31 +0.0 + 0 +LINE + 5 +1DB + 8 +0 + 62 + 0 + 10 +7224.948786 + 20 +9424.229667 + 30 +0.0 + 11 +7224.948786 + 21 +9424.229667 + 31 +0.0 + 0 +LINE + 5 +1DC + 8 +0 + 62 + 0 + 10 +7229.556769 + 20 +9420.007229 + 30 +0.0 + 11 +7229.556769 + 21 +9420.007229 + 31 +0.0 + 0 +LINE + 5 +1DD + 8 +0 + 62 + 0 + 10 +7197.620401 + 20 +9540.078595 + 30 +0.0 + 11 +7197.620401 + 21 +9540.078595 + 31 +0.0 + 0 +LINE + 5 +1DE + 8 +0 + 62 + 0 + 10 +7202.228385 + 20 +9535.856157 + 30 +0.0 + 11 +7202.228385 + 21 +9535.856157 + 31 +0.0 + 0 +LINE + 5 +1DF + 8 +0 + 62 + 0 + 10 +7223.978066 + 20 +9515.926246 + 30 +0.0 + 11 +7223.978066 + 21 +9515.926246 + 31 +0.0 + 0 +LINE + 5 +1E0 + 8 +0 + 62 + 0 + 10 +7196.649681 + 20 +9631.775174 + 30 +0.0 + 11 +7196.649681 + 21 +9631.775174 + 31 +0.0 + 0 +LINE + 5 +1E1 + 8 +0 + 62 + 0 + 10 +7221.532792 + 20 +9608.974004 + 30 +0.0 + 11 +7221.532792 + 21 +9608.974004 + 31 +0.0 + 0 +LINE + 5 +1E2 + 8 +0 + 62 + 0 + 10 +7226.140775 + 20 +9604.751565 + 30 +0.0 + 11 +7226.140775 + 21 +9604.751565 + 31 +0.0 + 0 +LINE + 5 +1E3 + 8 +0 + 62 + 0 + 10 +7198.81239 + 20 +9720.600493 + 30 +0.0 + 11 +7198.81239 + 21 +9720.600493 + 31 +0.0 + 0 +LINE + 5 +1E4 + 8 +0 + 62 + 0 + 10 +7220.562072 + 20 +9700.670582 + 30 +0.0 + 11 +7220.562072 + 21 +9700.670582 + 31 +0.0 + 0 +LINE + 5 +1E5 + 8 +0 + 62 + 0 + 10 +7218.116797 + 20 +9793.718341 + 30 +0.0 + 11 +7218.116797 + 21 +9793.718341 + 31 +0.0 + 0 +LINE + 5 +1E6 + 8 +0 + 62 + 0 + 10 +7222.72478 + 20 +9789.495902 + 30 +0.0 + 11 +7222.72478 + 21 +9789.495902 + 31 +0.0 + 0 +LINE + 5 +1E7 + 8 +0 + 62 + 0 + 10 +7195.396396 + 20 +9905.34483 + 30 +0.0 + 11 +7195.396396 + 21 +9905.34483 + 31 +0.0 + 0 +LINE + 5 +1E8 + 8 +0 + 62 + 0 + 10 +7217.146077 + 20 +9885.414919 + 30 +0.0 + 11 +7217.146077 + 21 +9885.414919 + 31 +0.0 + 0 +LINE + 5 +1E9 + 8 +0 + 62 + 0 + 10 +7207.868385 + 20 +8985.845586 + 30 +0.0 + 11 +7207.868385 + 21 +8985.845586 + 31 +0.0 + 0 +LINE + 5 +1EA + 8 +0 + 62 + 0 + 10 +7212.476368 + 20 +8981.623147 + 30 +0.0 + 11 +7212.476368 + 21 +8981.623147 + 31 +0.0 + 0 +LINE + 5 +1EB + 8 +0 + 62 + 0 + 10 +7210.313659 + 20 +8892.797827 + 30 +0.0 + 11 +7210.313659 + 21 +8892.797827 + 31 +0.0 + 0 +LINE + 5 +1EC + 8 +0 + 62 + 0 + 10 +7211.284379 + 20 +8801.101249 + 30 +0.0 + 11 +7211.284379 + 21 +8801.101249 + 31 +0.0 + 0 +LINE + 5 +1ED + 8 +0 + 62 + 0 + 10 +7215.892363 + 20 +8796.878811 + 30 +0.0 + 11 +7215.892363 + 21 +8796.878811 + 31 +0.0 + 0 +LINE + 5 +1EE + 8 +0 + 62 + 0 + 10 +7213.729654 + 20 +8708.053491 + 30 +0.0 + 11 +7213.729654 + 21 +8708.053491 + 31 +0.0 + 0 +LINE + 5 +1EF + 8 +0 + 62 + 0 + 10 +7214.700374 + 20 +8616.356913 + 30 +0.0 + 11 +7214.700374 + 21 +8616.356913 + 31 +0.0 + 0 +LINE + 5 +1F0 + 8 +0 + 62 + 0 + 10 +7219.308357 + 20 +8612.134474 + 30 +0.0 + 11 +7219.308357 + 21 +8612.134474 + 31 +0.0 + 0 +LINE + 5 +1F1 + 8 +0 + 62 + 0 + 10 +7195.395967 + 20 +8543.239065 + 30 +0.0 + 11 +7195.395967 + 21 +8543.239065 + 31 +0.0 + 0 +LINE + 5 +1F2 + 8 +0 + 62 + 0 + 10 +7217.145648 + 20 +8523.309154 + 30 +0.0 + 11 +7217.145648 + 21 +8523.309154 + 31 +0.0 + 0 +LINE + 5 +1F3 + 8 +0 + 62 + 0 + 10 +7218.116368 + 20 +8431.612576 + 30 +0.0 + 11 +7218.116368 + 21 +8431.612576 + 31 +0.0 + 0 +LINE + 5 +1F4 + 8 +0 + 62 + 0 + 10 +7222.724352 + 20 +8427.390137 + 30 +0.0 + 11 +7222.724352 + 21 +8427.390137 + 31 +0.0 + 0 +LINE + 5 +1F5 + 8 +0 + 62 + 0 + 10 +7198.811961 + 20 +8358.494729 + 30 +0.0 + 11 +7198.811961 + 21 +8358.494729 + 31 +0.0 + 0 +LINE + 5 +1F6 + 8 +0 + 62 + 0 + 10 +7220.561643 + 20 +8338.564818 + 30 +0.0 + 11 +7220.561643 + 21 +8338.564818 + 31 +0.0 + 0 +ENDBLK + 5 +1F7 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D14 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D14 + 1 + + 0 +LINE + 5 +1F9 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +7196.0 + 20 +7565.0 + 30 +0.0 + 11 +7229.0 + 21 +7565.0 + 31 +0.0 + 0 +INSERT + 5 +1FA + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +7195.0 + 20 +7565.0 + 30 +0.0 + 50 +180.0 + 0 +INSERT + 5 +1FB + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +7230.0 + 20 +7565.0 + 30 +0.0 + 0 +TEXT + 5 +1FC + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +7265.416667 + 20 +7608.75 + 30 +0.0 + 40 +87.5 + 1 +1 + 72 + 1 + 11 +7280.0 + 21 +7652.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +1FD + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7195.0 + 20 +8330.0 + 30 +0.0 + 0 +POINT + 5 +1FE + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7230.0 + 20 +8320.0 + 30 +0.0 + 0 +POINT + 5 +1FF + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +7230.0 + 20 +7565.0 + 30 +0.0 + 0 +ENDBLK + 5 +200 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D16 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D16 + 1 + + 0 +LINE + 5 +202 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9678.828818 + 20 +12690.02817 + 30 +0.0 + 11 +9837.780624 + 21 +12431.731487 + 31 +0.0 + 0 +INSERT + 5 +203 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9678.304721 + 20 +12690.879828 + 30 +0.0 + 50 +121.607502 + 0 +INSERT + 5 +204 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9838.304721 + 20 +12430.879828 + 30 +0.0 + 50 +301.607502 + 0 +TEXT + 5 +205 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9764.992423 + 20 +12633.489159 + 30 +0.0 + 40 +87.5 + 1 +16 + 50 +301.607502 + 72 + 1 + 11 +9832.824824 + 21 +12606.738353 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +206 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8905.0 + 20 +12215.0 + 30 +0.0 + 0 +POINT + 5 +207 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9065.0 + 20 +11955.0 + 30 +0.0 + 0 +POINT + 5 +208 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9838.304721 + 20 +12430.879828 + 30 +0.0 + 0 +ENDBLK + 5 +209 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D23 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D23 + 1 + + 0 +LINE + 5 +20B + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9578.676069 + 20 +12216.985896 + 30 +0.0 + 11 +9549.785469 + 21 +12260.321796 + 31 +0.0 + 0 +INSERT + 5 +20C + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9579.230769 + 20 +12216.153846 + 30 +0.0 + 50 +303.690068 + 0 +INSERT + 5 +20D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9549.230769 + 20 +12261.153846 + 30 +0.0 + 50 +123.690068 + 0 +TEXT + 5 +20E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9632.419044 + 20 +12225.0 + 30 +0.0 + 40 +87.5 + 1 +2 + 50 +303.690068 + 72 + 1 + 11 +9685.0 + 21 +12225.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +20F + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9105.0 + 20 +11900.0 + 30 +0.0 + 0 +POINT + 5 +210 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9075.0 + 20 +11945.0 + 30 +0.0 + 0 +POINT + 5 +211 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9549.230769 + 20 +12261.153846 + 30 +0.0 + 0 +ENDBLK + 5 +212 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D24 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D24 + 1 + + 0 +LINE + 5 +214 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9548.676069 + 20 +12261.985896 + 30 +0.0 + 11 +9282.093162 + 21 +12661.860257 + 31 +0.0 + 0 +INSERT + 5 +215 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9549.230769 + 20 +12261.153846 + 30 +0.0 + 50 +303.690068 + 0 +INSERT + 5 +216 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9281.538462 + 20 +12662.692308 + 30 +0.0 + 50 +123.690068 + 0 +TEXT + 5 +217 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9419.429304 + 20 +12534.727478 + 30 +0.0 + 40 +87.5 + 1 +18 + 50 +303.690068 + 72 + 1 + 11 +9488.189016 + 21 +12510.459344 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +218 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9075.0 + 20 +11945.0 + 30 +0.0 + 0 +POINT + 5 +219 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8820.0 + 20 +12355.0 + 30 +0.0 + 0 +POINT + 5 +21A + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9281.538462 + 20 +12662.692308 + 30 +0.0 + 0 +ENDBLK + 5 +21B + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D25 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D25 + 1 + + 0 +LINE + 5 +21D + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9280.983761 + 20 +12663.524358 + 30 +0.0 + 11 +9233.631623 + 21 +12734.552565 + 31 +0.0 + 0 +INSERT + 5 +21E + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9281.538462 + 20 +12662.692308 + 30 +0.0 + 50 +303.690068 + 0 +INSERT + 5 +21F + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9233.076923 + 20 +12735.384615 + 30 +0.0 + 50 +123.690068 + 0 +TEXT + 5 +220 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9277.531137 + 20 +12747.574729 + 30 +0.0 + 40 +87.5 + 1 +3 + 50 +303.690068 + 72 + 1 + 11 +9330.112093 + 21 +12747.574729 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +221 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8820.0 + 20 +12355.0 + 30 +0.0 + 0 +POINT + 5 +222 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8775.0 + 20 +12430.0 + 30 +0.0 + 0 +POINT + 5 +223 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9233.076923 + 20 +12735.384615 + 30 +0.0 + 0 +ENDBLK + 5 +224 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*X26 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*X26 + 1 + + 0 +LINE + 5 +226 + 8 +0 + 62 + 0 + 10 +5126.85938 + 20 +4347.007496 + 30 +0.0 + 11 +5158.125 + 21 +4347.007496 + 31 +0.0 + 0 +LINE + 5 +227 + 8 +0 + 62 + 0 + 10 +5270.625 + 20 +4347.007496 + 30 +0.0 + 11 +5326.875 + 21 +4347.007496 + 31 +0.0 + 0 +LINE + 5 +228 + 8 +0 + 62 + 0 + 10 +5439.375 + 20 +4347.007496 + 30 +0.0 + 11 +5495.625 + 21 +4347.007496 + 31 +0.0 + 0 +LINE + 5 +229 + 8 +0 + 62 + 0 + 10 +5608.125 + 20 +4347.007496 + 30 +0.0 + 11 +5664.375 + 21 +4347.007496 + 31 +0.0 + 0 +LINE + 5 +22A + 8 +0 + 62 + 0 + 10 +5776.875 + 20 +4347.007496 + 30 +0.0 + 11 +5833.125 + 21 +4347.007496 + 31 +0.0 + 0 +LINE + 5 +22B + 8 +0 + 62 + 0 + 10 +5945.625 + 20 +4347.007496 + 30 +0.0 + 11 +6001.875 + 21 +4347.007496 + 31 +0.0 + 0 +LINE + 5 +22C + 8 +0 + 62 + 0 + 10 +6114.375 + 20 +4347.007496 + 30 +0.0 + 11 +6170.625 + 21 +4347.007496 + 31 +0.0 + 0 +LINE + 5 +22D + 8 +0 + 62 + 0 + 10 +6283.125 + 20 +4347.007496 + 30 +0.0 + 11 +6339.375 + 21 +4347.007496 + 31 +0.0 + 0 +LINE + 5 +22E + 8 +0 + 62 + 0 + 10 +6451.875 + 20 +4347.007496 + 30 +0.0 + 11 +6508.125 + 21 +4347.007496 + 31 +0.0 + 0 +LINE + 5 +22F + 8 +0 + 62 + 0 + 10 +6620.625 + 20 +4347.007496 + 30 +0.0 + 11 +6676.875 + 21 +4347.007496 + 31 +0.0 + 0 +LINE + 5 +230 + 8 +0 + 62 + 0 + 10 +6789.375 + 20 +4347.007496 + 30 +0.0 + 11 +6845.625 + 21 +4347.007496 + 31 +0.0 + 0 +LINE + 5 +231 + 8 +0 + 62 + 0 + 10 +6958.125 + 20 +4347.007496 + 30 +0.0 + 11 +7014.375 + 21 +4347.007496 + 31 +0.0 + 0 +LINE + 5 +232 + 8 +0 + 62 + 0 + 10 +7126.875 + 20 +4347.007496 + 30 +0.0 + 11 +7183.125 + 21 +4347.007496 + 31 +0.0 + 0 +LINE + 5 +233 + 8 +0 + 62 + 0 + 10 +7295.625 + 20 +4347.007496 + 30 +0.0 + 11 +7351.875 + 21 +4347.007496 + 31 +0.0 + 0 +LINE + 5 +234 + 8 +0 + 62 + 0 + 10 +7464.375 + 20 +4347.007496 + 30 +0.0 + 11 +7520.625 + 21 +4347.007496 + 31 +0.0 + 0 +LINE + 5 +235 + 8 +0 + 62 + 0 + 10 +7633.125 + 20 +4347.007496 + 30 +0.0 + 11 +7689.375 + 21 +4347.007496 + 31 +0.0 + 0 +LINE + 5 +236 + 8 +0 + 62 + 0 + 10 +7801.875 + 20 +4347.007496 + 30 +0.0 + 11 +7858.125 + 21 +4347.007496 + 31 +0.0 + 0 +LINE + 5 +237 + 8 +0 + 62 + 0 + 10 +7970.625 + 20 +4347.007496 + 30 +0.0 + 11 +8026.875 + 21 +4347.007496 + 31 +0.0 + 0 +LINE + 5 +238 + 8 +0 + 62 + 0 + 10 +8139.375 + 20 +4347.007496 + 30 +0.0 + 11 +8195.625 + 21 +4347.007496 + 31 +0.0 + 0 +LINE + 5 +239 + 8 +0 + 62 + 0 + 10 +8308.125 + 20 +4347.007496 + 30 +0.0 + 11 +8364.375 + 21 +4347.007496 + 31 +0.0 + 0 +LINE + 5 +23A + 8 +0 + 62 + 0 + 10 +8476.875 + 20 +4347.007496 + 30 +0.0 + 11 +8533.125 + 21 +4347.007496 + 31 +0.0 + 0 +LINE + 5 +23B + 8 +0 + 62 + 0 + 10 +8645.625 + 20 +4347.007496 + 30 +0.0 + 11 +8701.875 + 21 +4347.007496 + 31 +0.0 + 0 +LINE + 5 +23C + 8 +0 + 62 + 0 + 10 +8814.375 + 20 +4347.007496 + 30 +0.0 + 11 +8845.0 + 21 +4347.007496 + 31 +0.0 + 0 +LINE + 5 +23D + 8 +0 + 62 + 0 + 10 +5186.25 + 20 +4395.721425 + 30 +0.0 + 11 +5242.5 + 21 +4395.721425 + 31 +0.0 + 0 +LINE + 5 +23E + 8 +0 + 62 + 0 + 10 +5355.0 + 20 +4395.721425 + 30 +0.0 + 11 +5411.25 + 21 +4395.721425 + 31 +0.0 + 0 +LINE + 5 +23F + 8 +0 + 62 + 0 + 10 +5523.75 + 20 +4395.721425 + 30 +0.0 + 11 +5580.0 + 21 +4395.721425 + 31 +0.0 + 0 +LINE + 5 +240 + 8 +0 + 62 + 0 + 10 +5692.5 + 20 +4395.721425 + 30 +0.0 + 11 +5748.75 + 21 +4395.721425 + 31 +0.0 + 0 +LINE + 5 +241 + 8 +0 + 62 + 0 + 10 +5861.25 + 20 +4395.721425 + 30 +0.0 + 11 +5917.5 + 21 +4395.721425 + 31 +0.0 + 0 +LINE + 5 +242 + 8 +0 + 62 + 0 + 10 +6030.0 + 20 +4395.721425 + 30 +0.0 + 11 +6086.25 + 21 +4395.721425 + 31 +0.0 + 0 +LINE + 5 +243 + 8 +0 + 62 + 0 + 10 +6198.75 + 20 +4395.721425 + 30 +0.0 + 11 +6255.0 + 21 +4395.721425 + 31 +0.0 + 0 +LINE + 5 +244 + 8 +0 + 62 + 0 + 10 +6367.5 + 20 +4395.721425 + 30 +0.0 + 11 +6423.75 + 21 +4395.721425 + 31 +0.0 + 0 +LINE + 5 +245 + 8 +0 + 62 + 0 + 10 +6536.25 + 20 +4395.721425 + 30 +0.0 + 11 +6592.5 + 21 +4395.721425 + 31 +0.0 + 0 +LINE + 5 +246 + 8 +0 + 62 + 0 + 10 +6705.0 + 20 +4395.721425 + 30 +0.0 + 11 +6761.25 + 21 +4395.721425 + 31 +0.0 + 0 +LINE + 5 +247 + 8 +0 + 62 + 0 + 10 +6873.75 + 20 +4395.721425 + 30 +0.0 + 11 +6930.0 + 21 +4395.721425 + 31 +0.0 + 0 +LINE + 5 +248 + 8 +0 + 62 + 0 + 10 +7042.5 + 20 +4395.721425 + 30 +0.0 + 11 +7098.75 + 21 +4395.721425 + 31 +0.0 + 0 +LINE + 5 +249 + 8 +0 + 62 + 0 + 10 +7211.25 + 20 +4395.721425 + 30 +0.0 + 11 +7267.5 + 21 +4395.721425 + 31 +0.0 + 0 +LINE + 5 +24A + 8 +0 + 62 + 0 + 10 +7380.0 + 20 +4395.721425 + 30 +0.0 + 11 +7436.25 + 21 +4395.721425 + 31 +0.0 + 0 +LINE + 5 +24B + 8 +0 + 62 + 0 + 10 +7548.75 + 20 +4395.721425 + 30 +0.0 + 11 +7605.0 + 21 +4395.721425 + 31 +0.0 + 0 +LINE + 5 +24C + 8 +0 + 62 + 0 + 10 +7717.5 + 20 +4395.721425 + 30 +0.0 + 11 +7773.75 + 21 +4395.721425 + 31 +0.0 + 0 +LINE + 5 +24D + 8 +0 + 62 + 0 + 10 +7886.25 + 20 +4395.721425 + 30 +0.0 + 11 +7942.5 + 21 +4395.721425 + 31 +0.0 + 0 +LINE + 5 +24E + 8 +0 + 62 + 0 + 10 +8055.0 + 20 +4395.721425 + 30 +0.0 + 11 +8111.25 + 21 +4395.721425 + 31 +0.0 + 0 +LINE + 5 +24F + 8 +0 + 62 + 0 + 10 +8223.75 + 20 +4395.721425 + 30 +0.0 + 11 +8280.0 + 21 +4395.721425 + 31 +0.0 + 0 +LINE + 5 +250 + 8 +0 + 62 + 0 + 10 +8392.5 + 20 +4395.721425 + 30 +0.0 + 11 +8448.75 + 21 +4395.721425 + 31 +0.0 + 0 +LINE + 5 +251 + 8 +0 + 62 + 0 + 10 +8561.25 + 20 +4395.721425 + 30 +0.0 + 11 +8617.5 + 21 +4395.721425 + 31 +0.0 + 0 +LINE + 5 +252 + 8 +0 + 62 + 0 + 10 +8730.0 + 20 +4395.721425 + 30 +0.0 + 11 +8786.25 + 21 +4395.721425 + 31 +0.0 + 0 +LINE + 5 +253 + 8 +0 + 62 + 0 + 10 +5126.85938 + 20 +4444.435354 + 30 +0.0 + 11 +5158.125 + 21 +4444.435354 + 31 +0.0 + 0 +LINE + 5 +254 + 8 +0 + 62 + 0 + 10 +5270.625 + 20 +4444.435354 + 30 +0.0 + 11 +5326.875 + 21 +4444.435354 + 31 +0.0 + 0 +LINE + 5 +255 + 8 +0 + 62 + 0 + 10 +5439.375 + 20 +4444.435354 + 30 +0.0 + 11 +5495.625 + 21 +4444.435354 + 31 +0.0 + 0 +LINE + 5 +256 + 8 +0 + 62 + 0 + 10 +5608.125 + 20 +4444.435354 + 30 +0.0 + 11 +5664.375 + 21 +4444.435354 + 31 +0.0 + 0 +LINE + 5 +257 + 8 +0 + 62 + 0 + 10 +5776.875 + 20 +4444.435354 + 30 +0.0 + 11 +5833.125 + 21 +4444.435354 + 31 +0.0 + 0 +LINE + 5 +258 + 8 +0 + 62 + 0 + 10 +5945.625 + 20 +4444.435354 + 30 +0.0 + 11 +6001.875 + 21 +4444.435354 + 31 +0.0 + 0 +LINE + 5 +259 + 8 +0 + 62 + 0 + 10 +6114.375 + 20 +4444.435354 + 30 +0.0 + 11 +6170.625 + 21 +4444.435354 + 31 +0.0 + 0 +LINE + 5 +25A + 8 +0 + 62 + 0 + 10 +6283.125 + 20 +4444.435354 + 30 +0.0 + 11 +6339.375 + 21 +4444.435354 + 31 +0.0 + 0 +LINE + 5 +25B + 8 +0 + 62 + 0 + 10 +6451.875 + 20 +4444.435354 + 30 +0.0 + 11 +6508.125 + 21 +4444.435354 + 31 +0.0 + 0 +LINE + 5 +25C + 8 +0 + 62 + 0 + 10 +6620.625 + 20 +4444.435354 + 30 +0.0 + 11 +6676.875 + 21 +4444.435354 + 31 +0.0 + 0 +LINE + 5 +25D + 8 +0 + 62 + 0 + 10 +6789.375 + 20 +4444.435354 + 30 +0.0 + 11 +6845.625 + 21 +4444.435354 + 31 +0.0 + 0 +LINE + 5 +25E + 8 +0 + 62 + 0 + 10 +6958.125 + 20 +4444.435354 + 30 +0.0 + 11 +7014.375 + 21 +4444.435354 + 31 +0.0 + 0 +LINE + 5 +25F + 8 +0 + 62 + 0 + 10 +7126.875 + 20 +4444.435354 + 30 +0.0 + 11 +7183.125 + 21 +4444.435354 + 31 +0.0 + 0 +LINE + 5 +260 + 8 +0 + 62 + 0 + 10 +7295.625 + 20 +4444.435354 + 30 +0.0 + 11 +7351.875 + 21 +4444.435354 + 31 +0.0 + 0 +LINE + 5 +261 + 8 +0 + 62 + 0 + 10 +7464.375 + 20 +4444.435354 + 30 +0.0 + 11 +7520.625 + 21 +4444.435354 + 31 +0.0 + 0 +LINE + 5 +262 + 8 +0 + 62 + 0 + 10 +7633.125 + 20 +4444.435354 + 30 +0.0 + 11 +7689.375 + 21 +4444.435354 + 31 +0.0 + 0 +LINE + 5 +263 + 8 +0 + 62 + 0 + 10 +7801.875 + 20 +4444.435354 + 30 +0.0 + 11 +7858.125 + 21 +4444.435354 + 31 +0.0 + 0 +LINE + 5 +264 + 8 +0 + 62 + 0 + 10 +7970.625 + 20 +4444.435354 + 30 +0.0 + 11 +8026.875 + 21 +4444.435354 + 31 +0.0 + 0 +LINE + 5 +265 + 8 +0 + 62 + 0 + 10 +8139.375 + 20 +4444.435354 + 30 +0.0 + 11 +8195.625 + 21 +4444.435354 + 31 +0.0 + 0 +LINE + 5 +266 + 8 +0 + 62 + 0 + 10 +8308.125 + 20 +4444.435354 + 30 +0.0 + 11 +8364.375 + 21 +4444.435354 + 31 +0.0 + 0 +LINE + 5 +267 + 8 +0 + 62 + 0 + 10 +8476.875 + 20 +4444.435354 + 30 +0.0 + 11 +8533.125 + 21 +4444.435354 + 31 +0.0 + 0 +LINE + 5 +268 + 8 +0 + 62 + 0 + 10 +8645.625 + 20 +4444.435354 + 30 +0.0 + 11 +8701.875 + 21 +4444.435354 + 31 +0.0 + 0 +LINE + 5 +269 + 8 +0 + 62 + 0 + 10 +8814.375 + 20 +4444.435354 + 30 +0.0 + 11 +8845.0 + 21 +4444.435354 + 31 +0.0 + 0 +LINE + 5 +26A + 8 +0 + 62 + 0 + 10 +5186.25 + 20 +4298.293568 + 30 +0.0 + 11 +5242.5 + 21 +4298.293568 + 31 +0.0 + 0 +LINE + 5 +26B + 8 +0 + 62 + 0 + 10 +5355.0 + 20 +4298.293568 + 30 +0.0 + 11 +5411.25 + 21 +4298.293568 + 31 +0.0 + 0 +LINE + 5 +26C + 8 +0 + 62 + 0 + 10 +5523.75 + 20 +4298.293568 + 30 +0.0 + 11 +5580.0 + 21 +4298.293568 + 31 +0.0 + 0 +LINE + 5 +26D + 8 +0 + 62 + 0 + 10 +5692.5 + 20 +4298.293568 + 30 +0.0 + 11 +5748.75 + 21 +4298.293568 + 31 +0.0 + 0 +LINE + 5 +26E + 8 +0 + 62 + 0 + 10 +5861.25 + 20 +4298.293568 + 30 +0.0 + 11 +5917.5 + 21 +4298.293568 + 31 +0.0 + 0 +LINE + 5 +26F + 8 +0 + 62 + 0 + 10 +6030.0 + 20 +4298.293568 + 30 +0.0 + 11 +6086.25 + 21 +4298.293568 + 31 +0.0 + 0 +LINE + 5 +270 + 8 +0 + 62 + 0 + 10 +6198.75 + 20 +4298.293568 + 30 +0.0 + 11 +6255.0 + 21 +4298.293568 + 31 +0.0 + 0 +LINE + 5 +271 + 8 +0 + 62 + 0 + 10 +6367.5 + 20 +4298.293568 + 30 +0.0 + 11 +6423.75 + 21 +4298.293568 + 31 +0.0 + 0 +LINE + 5 +272 + 8 +0 + 62 + 0 + 10 +6536.25 + 20 +4298.293568 + 30 +0.0 + 11 +6592.5 + 21 +4298.293568 + 31 +0.0 + 0 +LINE + 5 +273 + 8 +0 + 62 + 0 + 10 +6705.0 + 20 +4298.293568 + 30 +0.0 + 11 +6761.25 + 21 +4298.293568 + 31 +0.0 + 0 +LINE + 5 +274 + 8 +0 + 62 + 0 + 10 +6873.75 + 20 +4298.293568 + 30 +0.0 + 11 +6930.0 + 21 +4298.293568 + 31 +0.0 + 0 +LINE + 5 +275 + 8 +0 + 62 + 0 + 10 +7042.5 + 20 +4298.293568 + 30 +0.0 + 11 +7098.75 + 21 +4298.293568 + 31 +0.0 + 0 +LINE + 5 +276 + 8 +0 + 62 + 0 + 10 +7211.25 + 20 +4298.293568 + 30 +0.0 + 11 +7267.5 + 21 +4298.293568 + 31 +0.0 + 0 +LINE + 5 +277 + 8 +0 + 62 + 0 + 10 +7380.0 + 20 +4298.293568 + 30 +0.0 + 11 +7436.25 + 21 +4298.293568 + 31 +0.0 + 0 +LINE + 5 +278 + 8 +0 + 62 + 0 + 10 +7548.75 + 20 +4298.293568 + 30 +0.0 + 11 +7605.0 + 21 +4298.293568 + 31 +0.0 + 0 +LINE + 5 +279 + 8 +0 + 62 + 0 + 10 +7717.5 + 20 +4298.293568 + 30 +0.0 + 11 +7773.75 + 21 +4298.293568 + 31 +0.0 + 0 +LINE + 5 +27A + 8 +0 + 62 + 0 + 10 +7886.25 + 20 +4298.293568 + 30 +0.0 + 11 +7942.5 + 21 +4298.293568 + 31 +0.0 + 0 +LINE + 5 +27B + 8 +0 + 62 + 0 + 10 +8055.0 + 20 +4298.293568 + 30 +0.0 + 11 +8111.25 + 21 +4298.293568 + 31 +0.0 + 0 +LINE + 5 +27C + 8 +0 + 62 + 0 + 10 +8223.75 + 20 +4298.293568 + 30 +0.0 + 11 +8280.0 + 21 +4298.293568 + 31 +0.0 + 0 +LINE + 5 +27D + 8 +0 + 62 + 0 + 10 +8392.5 + 20 +4298.293568 + 30 +0.0 + 11 +8448.75 + 21 +4298.293568 + 31 +0.0 + 0 +LINE + 5 +27E + 8 +0 + 62 + 0 + 10 +8561.25 + 20 +4298.293568 + 30 +0.0 + 11 +8617.5 + 21 +4298.293568 + 31 +0.0 + 0 +LINE + 5 +27F + 8 +0 + 62 + 0 + 10 +8730.0 + 20 +4298.293568 + 30 +0.0 + 11 +8786.25 + 21 +4298.293568 + 31 +0.0 + 0 +LINE + 5 +280 + 8 +0 + 62 + 0 + 10 +5126.85938 + 20 +4249.579639 + 30 +0.0 + 11 +5158.125 + 21 +4249.579639 + 31 +0.0 + 0 +LINE + 5 +281 + 8 +0 + 62 + 0 + 10 +5270.625 + 20 +4249.579639 + 30 +0.0 + 11 +5326.875 + 21 +4249.579639 + 31 +0.0 + 0 +LINE + 5 +282 + 8 +0 + 62 + 0 + 10 +5439.375 + 20 +4249.579639 + 30 +0.0 + 11 +5495.625 + 21 +4249.579639 + 31 +0.0 + 0 +LINE + 5 +283 + 8 +0 + 62 + 0 + 10 +5608.125 + 20 +4249.579639 + 30 +0.0 + 11 +5664.375 + 21 +4249.579639 + 31 +0.0 + 0 +LINE + 5 +284 + 8 +0 + 62 + 0 + 10 +5776.875 + 20 +4249.579639 + 30 +0.0 + 11 +5833.125 + 21 +4249.579639 + 31 +0.0 + 0 +LINE + 5 +285 + 8 +0 + 62 + 0 + 10 +5945.625 + 20 +4249.579639 + 30 +0.0 + 11 +6001.875 + 21 +4249.579639 + 31 +0.0 + 0 +LINE + 5 +286 + 8 +0 + 62 + 0 + 10 +6114.375 + 20 +4249.579639 + 30 +0.0 + 11 +6170.625 + 21 +4249.579639 + 31 +0.0 + 0 +LINE + 5 +287 + 8 +0 + 62 + 0 + 10 +6283.125 + 20 +4249.579639 + 30 +0.0 + 11 +6339.375 + 21 +4249.579639 + 31 +0.0 + 0 +LINE + 5 +288 + 8 +0 + 62 + 0 + 10 +6451.875 + 20 +4249.579639 + 30 +0.0 + 11 +6508.125 + 21 +4249.579639 + 31 +0.0 + 0 +LINE + 5 +289 + 8 +0 + 62 + 0 + 10 +6620.625 + 20 +4249.579639 + 30 +0.0 + 11 +6676.875 + 21 +4249.579639 + 31 +0.0 + 0 +LINE + 5 +28A + 8 +0 + 62 + 0 + 10 +6789.375 + 20 +4249.579639 + 30 +0.0 + 11 +6845.625 + 21 +4249.579639 + 31 +0.0 + 0 +LINE + 5 +28B + 8 +0 + 62 + 0 + 10 +6958.125 + 20 +4249.579639 + 30 +0.0 + 11 +7014.375 + 21 +4249.579639 + 31 +0.0 + 0 +LINE + 5 +28C + 8 +0 + 62 + 0 + 10 +7126.875 + 20 +4249.579639 + 30 +0.0 + 11 +7183.125 + 21 +4249.579639 + 31 +0.0 + 0 +LINE + 5 +28D + 8 +0 + 62 + 0 + 10 +7295.625 + 20 +4249.579639 + 30 +0.0 + 11 +7351.875 + 21 +4249.579639 + 31 +0.0 + 0 +LINE + 5 +28E + 8 +0 + 62 + 0 + 10 +7464.375 + 20 +4249.579639 + 30 +0.0 + 11 +7520.625 + 21 +4249.579639 + 31 +0.0 + 0 +LINE + 5 +28F + 8 +0 + 62 + 0 + 10 +7633.125 + 20 +4249.579639 + 30 +0.0 + 11 +7689.375 + 21 +4249.579639 + 31 +0.0 + 0 +LINE + 5 +290 + 8 +0 + 62 + 0 + 10 +7801.875 + 20 +4249.579639 + 30 +0.0 + 11 +7858.125 + 21 +4249.579639 + 31 +0.0 + 0 +LINE + 5 +291 + 8 +0 + 62 + 0 + 10 +7970.625 + 20 +4249.579639 + 30 +0.0 + 11 +8026.875 + 21 +4249.579639 + 31 +0.0 + 0 +LINE + 5 +292 + 8 +0 + 62 + 0 + 10 +8139.375 + 20 +4249.579639 + 30 +0.0 + 11 +8195.625 + 21 +4249.579639 + 31 +0.0 + 0 +LINE + 5 +293 + 8 +0 + 62 + 0 + 10 +8308.125 + 20 +4249.579639 + 30 +0.0 + 11 +8364.375 + 21 +4249.579639 + 31 +0.0 + 0 +LINE + 5 +294 + 8 +0 + 62 + 0 + 10 +8476.875 + 20 +4249.579639 + 30 +0.0 + 11 +8533.125 + 21 +4249.579639 + 31 +0.0 + 0 +LINE + 5 +295 + 8 +0 + 62 + 0 + 10 +8645.625 + 20 +4249.579639 + 30 +0.0 + 11 +8701.875 + 21 +4249.579639 + 31 +0.0 + 0 +LINE + 5 +296 + 8 +0 + 62 + 0 + 10 +8814.375 + 20 +4249.579639 + 30 +0.0 + 11 +8845.0 + 21 +4249.579639 + 31 +0.0 + 0 +LINE + 5 +297 + 8 +0 + 62 + 0 + 10 +5186.25 + 20 +4200.86571 + 30 +0.0 + 11 +5242.5 + 21 +4200.86571 + 31 +0.0 + 0 +LINE + 5 +298 + 8 +0 + 62 + 0 + 10 +5355.0 + 20 +4200.86571 + 30 +0.0 + 11 +5411.25 + 21 +4200.86571 + 31 +0.0 + 0 +LINE + 5 +299 + 8 +0 + 62 + 0 + 10 +5523.75 + 20 +4200.86571 + 30 +0.0 + 11 +5580.0 + 21 +4200.86571 + 31 +0.0 + 0 +LINE + 5 +29A + 8 +0 + 62 + 0 + 10 +5692.5 + 20 +4200.86571 + 30 +0.0 + 11 +5748.75 + 21 +4200.86571 + 31 +0.0 + 0 +LINE + 5 +29B + 8 +0 + 62 + 0 + 10 +5861.25 + 20 +4200.86571 + 30 +0.0 + 11 +5917.5 + 21 +4200.86571 + 31 +0.0 + 0 +LINE + 5 +29C + 8 +0 + 62 + 0 + 10 +6030.0 + 20 +4200.86571 + 30 +0.0 + 11 +6086.25 + 21 +4200.86571 + 31 +0.0 + 0 +LINE + 5 +29D + 8 +0 + 62 + 0 + 10 +6198.75 + 20 +4200.86571 + 30 +0.0 + 11 +6255.0 + 21 +4200.86571 + 31 +0.0 + 0 +LINE + 5 +29E + 8 +0 + 62 + 0 + 10 +6367.5 + 20 +4200.86571 + 30 +0.0 + 11 +6423.75 + 21 +4200.86571 + 31 +0.0 + 0 +LINE + 5 +29F + 8 +0 + 62 + 0 + 10 +6536.25 + 20 +4200.86571 + 30 +0.0 + 11 +6592.5 + 21 +4200.86571 + 31 +0.0 + 0 +LINE + 5 +2A0 + 8 +0 + 62 + 0 + 10 +6705.0 + 20 +4200.86571 + 30 +0.0 + 11 +6761.25 + 21 +4200.86571 + 31 +0.0 + 0 +LINE + 5 +2A1 + 8 +0 + 62 + 0 + 10 +6873.75 + 20 +4200.86571 + 30 +0.0 + 11 +6930.0 + 21 +4200.86571 + 31 +0.0 + 0 +LINE + 5 +2A2 + 8 +0 + 62 + 0 + 10 +7042.5 + 20 +4200.86571 + 30 +0.0 + 11 +7098.75 + 21 +4200.86571 + 31 +0.0 + 0 +LINE + 5 +2A3 + 8 +0 + 62 + 0 + 10 +7211.25 + 20 +4200.86571 + 30 +0.0 + 11 +7267.5 + 21 +4200.86571 + 31 +0.0 + 0 +LINE + 5 +2A4 + 8 +0 + 62 + 0 + 10 +7380.0 + 20 +4200.86571 + 30 +0.0 + 11 +7436.25 + 21 +4200.86571 + 31 +0.0 + 0 +LINE + 5 +2A5 + 8 +0 + 62 + 0 + 10 +7548.75 + 20 +4200.86571 + 30 +0.0 + 11 +7605.0 + 21 +4200.86571 + 31 +0.0 + 0 +LINE + 5 +2A6 + 8 +0 + 62 + 0 + 10 +7717.5 + 20 +4200.86571 + 30 +0.0 + 11 +7773.75 + 21 +4200.86571 + 31 +0.0 + 0 +LINE + 5 +2A7 + 8 +0 + 62 + 0 + 10 +7886.25 + 20 +4200.86571 + 30 +0.0 + 11 +7942.5 + 21 +4200.86571 + 31 +0.0 + 0 +LINE + 5 +2A8 + 8 +0 + 62 + 0 + 10 +8055.0 + 20 +4200.86571 + 30 +0.0 + 11 +8111.25 + 21 +4200.86571 + 31 +0.0 + 0 +LINE + 5 +2A9 + 8 +0 + 62 + 0 + 10 +8223.75 + 20 +4200.86571 + 30 +0.0 + 11 +8280.0 + 21 +4200.86571 + 31 +0.0 + 0 +LINE + 5 +2AA + 8 +0 + 62 + 0 + 10 +8392.5 + 20 +4200.86571 + 30 +0.0 + 11 +8448.75 + 21 +4200.86571 + 31 +0.0 + 0 +LINE + 5 +2AB + 8 +0 + 62 + 0 + 10 +8561.25 + 20 +4200.86571 + 30 +0.0 + 11 +8617.5 + 21 +4200.86571 + 31 +0.0 + 0 +LINE + 5 +2AC + 8 +0 + 62 + 0 + 10 +8730.0 + 20 +4200.86571 + 30 +0.0 + 11 +8786.25 + 21 +4200.86571 + 31 +0.0 + 0 +LINE + 5 +2AD + 8 +0 + 62 + 0 + 10 +7042.499992 + 20 +4200.8657 + 30 +0.0 + 11 +7014.374992 + 21 +4249.579629 + 31 +0.0 + 0 +LINE + 5 +2AE + 8 +0 + 62 + 0 + 10 +6958.124992 + 20 +4347.007487 + 30 +0.0 + 11 +6929.999992 + 21 +4395.721416 + 31 +0.0 + 0 +LINE + 5 +2AF + 8 +0 + 62 + 0 + 10 +6958.124992 + 20 +4249.579629 + 30 +0.0 + 11 +6929.999992 + 21 +4298.293558 + 31 +0.0 + 0 +LINE + 5 +2B0 + 8 +0 + 62 + 0 + 10 +6873.749992 + 20 +4395.721416 + 30 +0.0 + 11 +6845.624992 + 21 +4444.435345 + 31 +0.0 + 0 +LINE + 5 +2B1 + 8 +0 + 62 + 0 + 10 +6934.62201 + 20 +4192.860132 + 30 +0.0 + 11 +6929.999993 + 21 +4200.865701 + 31 +0.0 + 0 +LINE + 5 +2B2 + 8 +0 + 62 + 0 + 10 +6873.749993 + 20 +4298.293559 + 30 +0.0 + 11 +6845.624993 + 21 +4347.007488 + 31 +0.0 + 0 +LINE + 5 +2B3 + 8 +0 + 62 + 0 + 10 +6789.374993 + 20 +4444.435345 + 30 +0.0 + 11 +6761.416929 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +2B4 + 8 +0 + 62 + 0 + 10 +6873.749993 + 20 +4200.865701 + 30 +0.0 + 11 +6845.624993 + 21 +4249.57963 + 31 +0.0 + 0 +LINE + 5 +2B5 + 8 +0 + 62 + 0 + 10 +6789.374993 + 20 +4347.007488 + 30 +0.0 + 11 +6761.249993 + 21 +4395.721417 + 31 +0.0 + 0 +LINE + 5 +2B6 + 8 +0 + 62 + 0 + 10 +6789.374993 + 20 +4249.57963 + 30 +0.0 + 11 +6761.249993 + 21 +4298.293559 + 31 +0.0 + 0 +LINE + 5 +2B7 + 8 +0 + 62 + 0 + 10 +6704.999993 + 20 +4395.721417 + 30 +0.0 + 11 +6676.874993 + 21 +4444.435346 + 31 +0.0 + 0 +LINE + 5 +2B8 + 8 +0 + 62 + 0 + 10 +6765.87201 + 20 +4192.860132 + 30 +0.0 + 11 +6761.249993 + 21 +4200.865701 + 31 +0.0 + 0 +LINE + 5 +2B9 + 8 +0 + 62 + 0 + 10 +6704.999993 + 20 +4298.293559 + 30 +0.0 + 11 +6676.874993 + 21 +4347.007488 + 31 +0.0 + 0 +LINE + 5 +2BA + 8 +0 + 62 + 0 + 10 +6620.624993 + 20 +4444.435346 + 30 +0.0 + 11 +6592.66693 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +2BB + 8 +0 + 62 + 0 + 10 +6704.999993 + 20 +4200.865701 + 30 +0.0 + 11 +6676.874993 + 21 +4249.57963 + 31 +0.0 + 0 +LINE + 5 +2BC + 8 +0 + 62 + 0 + 10 +6620.624993 + 20 +4347.007488 + 30 +0.0 + 11 +6592.499993 + 21 +4395.721417 + 31 +0.0 + 0 +LINE + 5 +2BD + 8 +0 + 62 + 0 + 10 +6620.624994 + 20 +4249.57963 + 30 +0.0 + 11 +6592.499994 + 21 +4298.293559 + 31 +0.0 + 0 +LINE + 5 +2BE + 8 +0 + 62 + 0 + 10 +6536.249994 + 20 +4395.721417 + 30 +0.0 + 11 +6508.124994 + 21 +4444.435346 + 31 +0.0 + 0 +LINE + 5 +2BF + 8 +0 + 62 + 0 + 10 +6597.122011 + 20 +4192.860132 + 30 +0.0 + 11 +6592.499994 + 21 +4200.865701 + 31 +0.0 + 0 +LINE + 5 +2C0 + 8 +0 + 62 + 0 + 10 +6536.249994 + 20 +4298.293559 + 30 +0.0 + 11 +6508.124994 + 21 +4347.007488 + 31 +0.0 + 0 +LINE + 5 +2C1 + 8 +0 + 62 + 0 + 10 +6451.874994 + 20 +4444.435346 + 30 +0.0 + 11 +6423.91693 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +2C2 + 8 +0 + 62 + 0 + 10 +6536.249994 + 20 +4200.865701 + 30 +0.0 + 11 +6508.124994 + 21 +4249.57963 + 31 +0.0 + 0 +LINE + 5 +2C3 + 8 +0 + 62 + 0 + 10 +6451.874994 + 20 +4347.007488 + 30 +0.0 + 11 +6423.749994 + 21 +4395.721417 + 31 +0.0 + 0 +LINE + 5 +2C4 + 8 +0 + 62 + 0 + 10 +6451.874994 + 20 +4249.57963 + 30 +0.0 + 11 +6423.749994 + 21 +4298.293559 + 31 +0.0 + 0 +LINE + 5 +2C5 + 8 +0 + 62 + 0 + 10 +6367.499994 + 20 +4395.721417 + 30 +0.0 + 11 +6339.374994 + 21 +4444.435346 + 31 +0.0 + 0 +LINE + 5 +2C6 + 8 +0 + 62 + 0 + 10 +6428.372012 + 20 +4192.860132 + 30 +0.0 + 11 +6423.749994 + 21 +4200.865702 + 31 +0.0 + 0 +LINE + 5 +2C7 + 8 +0 + 62 + 0 + 10 +6367.499994 + 20 +4298.29356 + 30 +0.0 + 11 +6339.374994 + 21 +4347.007488 + 31 +0.0 + 0 +LINE + 5 +2C8 + 8 +0 + 62 + 0 + 10 +6283.124994 + 20 +4444.435346 + 30 +0.0 + 11 +6255.166931 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +2C9 + 8 +0 + 62 + 0 + 10 +6367.499994 + 20 +4200.865702 + 30 +0.0 + 11 +6339.374994 + 21 +4249.579631 + 31 +0.0 + 0 +LINE + 5 +2CA + 8 +0 + 62 + 0 + 10 +6283.124994 + 20 +4347.007489 + 30 +0.0 + 11 +6254.999994 + 21 +4395.721418 + 31 +0.0 + 0 +LINE + 5 +2CB + 8 +0 + 62 + 0 + 10 +6283.124995 + 20 +4249.579631 + 30 +0.0 + 11 +6254.999995 + 21 +4298.29356 + 31 +0.0 + 0 +LINE + 5 +2CC + 8 +0 + 62 + 0 + 10 +6198.749995 + 20 +4395.721418 + 30 +0.0 + 11 +6170.624995 + 21 +4444.435347 + 31 +0.0 + 0 +LINE + 5 +2CD + 8 +0 + 62 + 0 + 10 +6259.622013 + 20 +4192.860132 + 30 +0.0 + 11 +6254.999995 + 21 +4200.865702 + 31 +0.0 + 0 +LINE + 5 +2CE + 8 +0 + 62 + 0 + 10 +6198.749995 + 20 +4298.29356 + 30 +0.0 + 11 +6170.624995 + 21 +4347.007489 + 31 +0.0 + 0 +LINE + 5 +2CF + 8 +0 + 62 + 0 + 10 +6114.374995 + 20 +4444.435347 + 30 +0.0 + 11 +6086.416932 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +2D0 + 8 +0 + 62 + 0 + 10 +6198.749995 + 20 +4200.865702 + 30 +0.0 + 11 +6170.624995 + 21 +4249.579631 + 31 +0.0 + 0 +LINE + 5 +2D1 + 8 +0 + 62 + 0 + 10 +6114.374995 + 20 +4347.007489 + 30 +0.0 + 11 +6086.249995 + 21 +4395.721418 + 31 +0.0 + 0 +LINE + 5 +2D2 + 8 +0 + 62 + 0 + 10 +6114.374995 + 20 +4249.579631 + 30 +0.0 + 11 +6086.249995 + 21 +4298.29356 + 31 +0.0 + 0 +LINE + 5 +2D3 + 8 +0 + 62 + 0 + 10 +6029.999995 + 20 +4395.721418 + 30 +0.0 + 11 +6001.874995 + 21 +4444.435347 + 31 +0.0 + 0 +LINE + 5 +2D4 + 8 +0 + 62 + 0 + 10 +6090.872013 + 20 +4192.860132 + 30 +0.0 + 11 +6086.249995 + 21 +4200.865702 + 31 +0.0 + 0 +LINE + 5 +2D5 + 8 +0 + 62 + 0 + 10 +6029.999995 + 20 +4298.29356 + 30 +0.0 + 11 +6001.874995 + 21 +4347.007489 + 31 +0.0 + 0 +LINE + 5 +2D6 + 8 +0 + 62 + 0 + 10 +5945.624995 + 20 +4444.435347 + 30 +0.0 + 11 +5917.666933 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +2D7 + 8 +0 + 62 + 0 + 10 +6029.999996 + 20 +4200.865702 + 30 +0.0 + 11 +6001.874996 + 21 +4249.579631 + 31 +0.0 + 0 +LINE + 5 +2D8 + 8 +0 + 62 + 0 + 10 +5945.624996 + 20 +4347.007489 + 30 +0.0 + 11 +5917.499996 + 21 +4395.721418 + 31 +0.0 + 0 +LINE + 5 +2D9 + 8 +0 + 62 + 0 + 10 +5945.624996 + 20 +4249.579631 + 30 +0.0 + 11 +5917.499996 + 21 +4298.29356 + 31 +0.0 + 0 +LINE + 5 +2DA + 8 +0 + 62 + 0 + 10 +5861.249996 + 20 +4395.721418 + 30 +0.0 + 11 +5833.124996 + 21 +4444.435347 + 31 +0.0 + 0 +LINE + 5 +2DB + 8 +0 + 62 + 0 + 10 +5922.122014 + 20 +4192.860132 + 30 +0.0 + 11 +5917.499996 + 21 +4200.865703 + 31 +0.0 + 0 +LINE + 5 +2DC + 8 +0 + 62 + 0 + 10 +5861.249996 + 20 +4298.29356 + 30 +0.0 + 11 +5833.124996 + 21 +4347.007489 + 31 +0.0 + 0 +LINE + 5 +2DD + 8 +0 + 62 + 0 + 10 +5776.874996 + 20 +4444.435347 + 30 +0.0 + 11 +5748.916933 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +2DE + 8 +0 + 62 + 0 + 10 +5861.249996 + 20 +4200.865703 + 30 +0.0 + 11 +5833.124996 + 21 +4249.579632 + 31 +0.0 + 0 +LINE + 5 +2DF + 8 +0 + 62 + 0 + 10 +5776.874996 + 20 +4347.00749 + 30 +0.0 + 11 +5748.749996 + 21 +4395.721419 + 31 +0.0 + 0 +LINE + 5 +2E0 + 8 +0 + 62 + 0 + 10 +5776.874996 + 20 +4249.579632 + 30 +0.0 + 11 +5748.749996 + 21 +4298.293561 + 31 +0.0 + 0 +LINE + 5 +2E1 + 8 +0 + 62 + 0 + 10 +5692.499996 + 20 +4395.721419 + 30 +0.0 + 11 +5664.374996 + 21 +4444.435348 + 31 +0.0 + 0 +LINE + 5 +2E2 + 8 +0 + 62 + 0 + 10 +5753.372015 + 20 +4192.860132 + 30 +0.0 + 11 +5748.749996 + 21 +4200.865703 + 31 +0.0 + 0 +LINE + 5 +2E3 + 8 +0 + 62 + 0 + 10 +5692.499996 + 20 +4298.293561 + 30 +0.0 + 11 +5664.374996 + 21 +4347.00749 + 31 +0.0 + 0 +LINE + 5 +2E4 + 8 +0 + 62 + 0 + 10 +5608.124996 + 20 +4444.435348 + 30 +0.0 + 11 +5580.166934 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +2E5 + 8 +0 + 62 + 0 + 10 +5692.499997 + 20 +4200.865703 + 30 +0.0 + 11 +5664.374997 + 21 +4249.579632 + 31 +0.0 + 0 +LINE + 5 +2E6 + 8 +0 + 62 + 0 + 10 +5608.124997 + 20 +4347.00749 + 30 +0.0 + 11 +5579.999997 + 21 +4395.721419 + 31 +0.0 + 0 +LINE + 5 +2E7 + 8 +0 + 62 + 0 + 10 +5608.124997 + 20 +4249.579632 + 30 +0.0 + 11 +5579.999997 + 21 +4298.293561 + 31 +0.0 + 0 +LINE + 5 +2E8 + 8 +0 + 62 + 0 + 10 +5523.749997 + 20 +4395.721419 + 30 +0.0 + 11 +5495.624997 + 21 +4444.435348 + 31 +0.0 + 0 +LINE + 5 +2E9 + 8 +0 + 62 + 0 + 10 +5584.622016 + 20 +4192.860132 + 30 +0.0 + 11 +5579.999997 + 21 +4200.865703 + 31 +0.0 + 0 +LINE + 5 +2EA + 8 +0 + 62 + 0 + 10 +5523.749997 + 20 +4298.293561 + 30 +0.0 + 11 +5495.624997 + 21 +4347.00749 + 31 +0.0 + 0 +LINE + 5 +2EB + 8 +0 + 62 + 0 + 10 +5439.374997 + 20 +4444.435348 + 30 +0.0 + 11 +5411.416935 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +2EC + 8 +0 + 62 + 0 + 10 +5523.749997 + 20 +4200.865703 + 30 +0.0 + 11 +5495.624997 + 21 +4249.579632 + 31 +0.0 + 0 +LINE + 5 +2ED + 8 +0 + 62 + 0 + 10 +5439.374997 + 20 +4347.00749 + 30 +0.0 + 11 +5411.249997 + 21 +4395.721419 + 31 +0.0 + 0 +LINE + 5 +2EE + 8 +0 + 62 + 0 + 10 +5439.374997 + 20 +4249.579632 + 30 +0.0 + 11 +5411.249997 + 21 +4298.293561 + 31 +0.0 + 0 +LINE + 5 +2EF + 8 +0 + 62 + 0 + 10 +5354.999997 + 20 +4395.721419 + 30 +0.0 + 11 +5326.874997 + 21 +4444.435348 + 31 +0.0 + 0 +LINE + 5 +2F0 + 8 +0 + 62 + 0 + 10 +5415.872016 + 20 +4192.860132 + 30 +0.0 + 11 +5411.249998 + 21 +4200.865704 + 31 +0.0 + 0 +LINE + 5 +2F1 + 8 +0 + 62 + 0 + 10 +5354.999998 + 20 +4298.293561 + 30 +0.0 + 11 +5326.874998 + 21 +4347.00749 + 31 +0.0 + 0 +LINE + 5 +2F2 + 8 +0 + 62 + 0 + 10 +5270.624998 + 20 +4444.435348 + 30 +0.0 + 11 +5242.666935 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +2F3 + 8 +0 + 62 + 0 + 10 +5354.999998 + 20 +4200.865704 + 30 +0.0 + 11 +5326.874998 + 21 +4249.579633 + 31 +0.0 + 0 +LINE + 5 +2F4 + 8 +0 + 62 + 0 + 10 +5270.624998 + 20 +4347.007491 + 30 +0.0 + 11 +5242.499998 + 21 +4395.721419 + 31 +0.0 + 0 +LINE + 5 +2F5 + 8 +0 + 62 + 0 + 10 +5270.624998 + 20 +4249.579633 + 30 +0.0 + 11 +5242.499998 + 21 +4298.293562 + 31 +0.0 + 0 +LINE + 5 +2F6 + 8 +0 + 62 + 0 + 10 +5186.249998 + 20 +4395.72142 + 30 +0.0 + 11 +5158.124998 + 21 +4444.435349 + 31 +0.0 + 0 +LINE + 5 +2F7 + 8 +0 + 62 + 0 + 10 +5247.122017 + 20 +4192.860132 + 30 +0.0 + 11 +5242.499998 + 21 +4200.865704 + 31 +0.0 + 0 +LINE + 5 +2F8 + 8 +0 + 62 + 0 + 10 +5186.249998 + 20 +4298.293562 + 30 +0.0 + 11 +5158.124998 + 21 +4347.007491 + 31 +0.0 + 0 +LINE + 5 +2F9 + 8 +0 + 62 + 0 + 10 +5186.249998 + 20 +4200.865704 + 30 +0.0 + 11 +5158.124998 + 21 +4249.579633 + 31 +0.0 + 0 +LINE + 5 +2FA + 8 +0 + 62 + 0 + 10 +7103.372009 + 20 +4192.860132 + 30 +0.0 + 11 +7098.749992 + 21 +4200.8657 + 31 +0.0 + 0 +LINE + 5 +2FB + 8 +0 + 62 + 0 + 10 +7042.499992 + 20 +4298.293558 + 30 +0.0 + 11 +7014.374992 + 21 +4347.007487 + 31 +0.0 + 0 +LINE + 5 +2FC + 8 +0 + 62 + 0 + 10 +6958.124992 + 20 +4444.435345 + 30 +0.0 + 11 +6930.166928 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +2FD + 8 +0 + 62 + 0 + 10 +7126.874992 + 20 +4249.579629 + 30 +0.0 + 11 +7098.749992 + 21 +4298.293558 + 31 +0.0 + 0 +LINE + 5 +2FE + 8 +0 + 62 + 0 + 10 +7042.499992 + 20 +4395.721416 + 30 +0.0 + 11 +7014.374992 + 21 +4444.435345 + 31 +0.0 + 0 +LINE + 5 +2FF + 8 +0 + 62 + 0 + 10 +7211.249992 + 20 +4200.8657 + 30 +0.0 + 11 +7183.124992 + 21 +4249.579629 + 31 +0.0 + 0 +LINE + 5 +300 + 8 +0 + 62 + 0 + 10 +7126.874992 + 20 +4347.007487 + 30 +0.0 + 11 +7098.749992 + 21 +4395.721416 + 31 +0.0 + 0 +LINE + 5 +301 + 8 +0 + 62 + 0 + 10 +7272.122008 + 20 +4192.860132 + 30 +0.0 + 11 +7267.499992 + 21 +4200.8657 + 31 +0.0 + 0 +LINE + 5 +302 + 8 +0 + 62 + 0 + 10 +7211.249992 + 20 +4298.293558 + 30 +0.0 + 11 +7183.124992 + 21 +4347.007487 + 31 +0.0 + 0 +LINE + 5 +303 + 8 +0 + 62 + 0 + 10 +7126.874992 + 20 +4444.435345 + 30 +0.0 + 11 +7098.916927 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +304 + 8 +0 + 62 + 0 + 10 +7295.624991 + 20 +4249.579629 + 30 +0.0 + 11 +7267.499991 + 21 +4298.293558 + 31 +0.0 + 0 +LINE + 5 +305 + 8 +0 + 62 + 0 + 10 +7211.249991 + 20 +4395.721416 + 30 +0.0 + 11 +7183.124991 + 21 +4444.435345 + 31 +0.0 + 0 +LINE + 5 +306 + 8 +0 + 62 + 0 + 10 +7379.999991 + 20 +4200.8657 + 30 +0.0 + 11 +7351.874991 + 21 +4249.579629 + 31 +0.0 + 0 +LINE + 5 +307 + 8 +0 + 62 + 0 + 10 +7295.624991 + 20 +4347.007487 + 30 +0.0 + 11 +7267.499991 + 21 +4395.721416 + 31 +0.0 + 0 +LINE + 5 +308 + 8 +0 + 62 + 0 + 10 +7440.872007 + 20 +4192.860132 + 30 +0.0 + 11 +7436.249991 + 21 +4200.8657 + 31 +0.0 + 0 +LINE + 5 +309 + 8 +0 + 62 + 0 + 10 +7379.999991 + 20 +4298.293558 + 30 +0.0 + 11 +7351.874991 + 21 +4347.007487 + 31 +0.0 + 0 +LINE + 5 +30A + 8 +0 + 62 + 0 + 10 +7295.624991 + 20 +4444.435344 + 30 +0.0 + 11 +7267.666927 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +30B + 8 +0 + 62 + 0 + 10 +7464.374991 + 20 +4249.579629 + 30 +0.0 + 11 +7436.249991 + 21 +4298.293557 + 31 +0.0 + 0 +LINE + 5 +30C + 8 +0 + 62 + 0 + 10 +7379.999991 + 20 +4395.721415 + 30 +0.0 + 11 +7351.874991 + 21 +4444.435344 + 31 +0.0 + 0 +LINE + 5 +30D + 8 +0 + 62 + 0 + 10 +7548.749991 + 20 +4200.865699 + 30 +0.0 + 11 +7520.624991 + 21 +4249.579628 + 31 +0.0 + 0 +LINE + 5 +30E + 8 +0 + 62 + 0 + 10 +7464.374991 + 20 +4347.007486 + 30 +0.0 + 11 +7436.249991 + 21 +4395.721415 + 31 +0.0 + 0 +LINE + 5 +30F + 8 +0 + 62 + 0 + 10 +7609.622007 + 20 +4192.860132 + 30 +0.0 + 11 +7604.99999 + 21 +4200.865699 + 31 +0.0 + 0 +LINE + 5 +310 + 8 +0 + 62 + 0 + 10 +7548.74999 + 20 +4298.293557 + 30 +0.0 + 11 +7520.62499 + 21 +4347.007486 + 31 +0.0 + 0 +LINE + 5 +311 + 8 +0 + 62 + 0 + 10 +7464.37499 + 20 +4444.435344 + 30 +0.0 + 11 +7436.416926 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +312 + 8 +0 + 62 + 0 + 10 +7633.12499 + 20 +4249.579628 + 30 +0.0 + 11 +7604.99999 + 21 +4298.293557 + 31 +0.0 + 0 +LINE + 5 +313 + 8 +0 + 62 + 0 + 10 +7548.74999 + 20 +4395.721415 + 30 +0.0 + 11 +7520.62499 + 21 +4444.435344 + 31 +0.0 + 0 +LINE + 5 +314 + 8 +0 + 62 + 0 + 10 +7717.49999 + 20 +4200.865699 + 30 +0.0 + 11 +7689.37499 + 21 +4249.579628 + 31 +0.0 + 0 +LINE + 5 +315 + 8 +0 + 62 + 0 + 10 +7633.12499 + 20 +4347.007486 + 30 +0.0 + 11 +7604.99999 + 21 +4395.721415 + 31 +0.0 + 0 +LINE + 5 +316 + 8 +0 + 62 + 0 + 10 +7778.372006 + 20 +4192.860132 + 30 +0.0 + 11 +7773.74999 + 21 +4200.865699 + 31 +0.0 + 0 +LINE + 5 +317 + 8 +0 + 62 + 0 + 10 +7717.49999 + 20 +4298.293557 + 30 +0.0 + 11 +7689.37499 + 21 +4347.007486 + 31 +0.0 + 0 +LINE + 5 +318 + 8 +0 + 62 + 0 + 10 +7633.12499 + 20 +4444.435344 + 30 +0.0 + 11 +7605.166925 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +319 + 8 +0 + 62 + 0 + 10 +7801.87499 + 20 +4249.579628 + 30 +0.0 + 11 +7773.74999 + 21 +4298.293557 + 31 +0.0 + 0 +LINE + 5 +31A + 8 +0 + 62 + 0 + 10 +7717.49999 + 20 +4395.721415 + 30 +0.0 + 11 +7689.37499 + 21 +4444.435344 + 31 +0.0 + 0 +LINE + 5 +31B + 8 +0 + 62 + 0 + 10 +7886.249989 + 20 +4200.865699 + 30 +0.0 + 11 +7858.124989 + 21 +4249.579628 + 31 +0.0 + 0 +LINE + 5 +31C + 8 +0 + 62 + 0 + 10 +7801.874989 + 20 +4347.007486 + 30 +0.0 + 11 +7773.749989 + 21 +4395.721415 + 31 +0.0 + 0 +LINE + 5 +31D + 8 +0 + 62 + 0 + 10 +7947.122005 + 20 +4192.860132 + 30 +0.0 + 11 +7942.499989 + 21 +4200.865699 + 31 +0.0 + 0 +LINE + 5 +31E + 8 +0 + 62 + 0 + 10 +7886.249989 + 20 +4298.293557 + 30 +0.0 + 11 +7858.124989 + 21 +4347.007486 + 31 +0.0 + 0 +LINE + 5 +31F + 8 +0 + 62 + 0 + 10 +7801.874989 + 20 +4444.435344 + 30 +0.0 + 11 +7773.916924 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +320 + 8 +0 + 62 + 0 + 10 +7970.624989 + 20 +4249.579628 + 30 +0.0 + 11 +7942.499989 + 21 +4298.293557 + 31 +0.0 + 0 +LINE + 5 +321 + 8 +0 + 62 + 0 + 10 +7886.249989 + 20 +4395.721414 + 30 +0.0 + 11 +7858.124989 + 21 +4444.435343 + 31 +0.0 + 0 +LINE + 5 +322 + 8 +0 + 62 + 0 + 10 +8054.999989 + 20 +4200.865699 + 30 +0.0 + 11 +8026.874989 + 21 +4249.579627 + 31 +0.0 + 0 +LINE + 5 +323 + 8 +0 + 62 + 0 + 10 +7970.624989 + 20 +4347.007485 + 30 +0.0 + 11 +7942.499989 + 21 +4395.721414 + 31 +0.0 + 0 +LINE + 5 +324 + 8 +0 + 62 + 0 + 10 +8115.872004 + 20 +4192.860132 + 30 +0.0 + 11 +8111.249989 + 21 +4200.865698 + 31 +0.0 + 0 +LINE + 5 +325 + 8 +0 + 62 + 0 + 10 +8054.999989 + 20 +4298.293556 + 30 +0.0 + 11 +8026.874989 + 21 +4347.007485 + 31 +0.0 + 0 +LINE + 5 +326 + 8 +0 + 62 + 0 + 10 +7970.624989 + 20 +4444.435343 + 30 +0.0 + 11 +7942.666924 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +327 + 8 +0 + 62 + 0 + 10 +8139.374989 + 20 +4249.579627 + 30 +0.0 + 11 +8111.249989 + 21 +4298.293556 + 31 +0.0 + 0 +LINE + 5 +328 + 8 +0 + 62 + 0 + 10 +8054.999989 + 20 +4395.721414 + 30 +0.0 + 11 +8026.874989 + 21 +4444.435343 + 31 +0.0 + 0 +LINE + 5 +329 + 8 +0 + 62 + 0 + 10 +8223.749988 + 20 +4200.865698 + 30 +0.0 + 11 +8195.624988 + 21 +4249.579627 + 31 +0.0 + 0 +LINE + 5 +32A + 8 +0 + 62 + 0 + 10 +8139.374988 + 20 +4347.007485 + 30 +0.0 + 11 +8111.249988 + 21 +4395.721414 + 31 +0.0 + 0 +LINE + 5 +32B + 8 +0 + 62 + 0 + 10 +8284.622004 + 20 +4192.860132 + 30 +0.0 + 11 +8279.999988 + 21 +4200.865698 + 31 +0.0 + 0 +LINE + 5 +32C + 8 +0 + 62 + 0 + 10 +8223.749988 + 20 +4298.293556 + 30 +0.0 + 11 +8195.624988 + 21 +4347.007485 + 31 +0.0 + 0 +LINE + 5 +32D + 8 +0 + 62 + 0 + 10 +8139.374988 + 20 +4444.435343 + 30 +0.0 + 11 +8111.416923 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +32E + 8 +0 + 62 + 0 + 10 +8308.124988 + 20 +4249.579627 + 30 +0.0 + 11 +8279.999988 + 21 +4298.293556 + 31 +0.0 + 0 +LINE + 5 +32F + 8 +0 + 62 + 0 + 10 +8223.749988 + 20 +4395.721414 + 30 +0.0 + 11 +8195.624988 + 21 +4444.435343 + 31 +0.0 + 0 +LINE + 5 +330 + 8 +0 + 62 + 0 + 10 +8392.499988 + 20 +4200.865698 + 30 +0.0 + 11 +8364.374988 + 21 +4249.579627 + 31 +0.0 + 0 +LINE + 5 +331 + 8 +0 + 62 + 0 + 10 +8308.124988 + 20 +4347.007485 + 30 +0.0 + 11 +8279.999988 + 21 +4395.721414 + 31 +0.0 + 0 +LINE + 5 +332 + 8 +0 + 62 + 0 + 10 +8453.372003 + 20 +4192.860132 + 30 +0.0 + 11 +8448.749988 + 21 +4200.865698 + 31 +0.0 + 0 +LINE + 5 +333 + 8 +0 + 62 + 0 + 10 +8392.499988 + 20 +4298.293556 + 30 +0.0 + 11 +8364.374988 + 21 +4347.007485 + 31 +0.0 + 0 +LINE + 5 +334 + 8 +0 + 62 + 0 + 10 +8308.124988 + 20 +4444.435343 + 30 +0.0 + 11 +8280.166922 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +335 + 8 +0 + 62 + 0 + 10 +8476.874987 + 20 +4249.579627 + 30 +0.0 + 11 +8448.749987 + 21 +4298.293556 + 31 +0.0 + 0 +LINE + 5 +336 + 8 +0 + 62 + 0 + 10 +8392.499987 + 20 +4395.721414 + 30 +0.0 + 11 +8364.374987 + 21 +4444.435342 + 31 +0.0 + 0 +LINE + 5 +337 + 8 +0 + 62 + 0 + 10 +8561.249987 + 20 +4200.865698 + 30 +0.0 + 11 +8533.124987 + 21 +4249.579627 + 31 +0.0 + 0 +LINE + 5 +338 + 8 +0 + 62 + 0 + 10 +8476.874987 + 20 +4347.007484 + 30 +0.0 + 11 +8448.749987 + 21 +4395.721413 + 31 +0.0 + 0 +LINE + 5 +339 + 8 +0 + 62 + 0 + 10 +8622.122002 + 20 +4192.860132 + 30 +0.0 + 11 +8617.499987 + 21 +4200.865697 + 31 +0.0 + 0 +LINE + 5 +33A + 8 +0 + 62 + 0 + 10 +8561.249987 + 20 +4298.293555 + 30 +0.0 + 11 +8533.124987 + 21 +4347.007484 + 31 +0.0 + 0 +LINE + 5 +33B + 8 +0 + 62 + 0 + 10 +8476.874987 + 20 +4444.435342 + 30 +0.0 + 11 +8448.916921 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +33C + 8 +0 + 62 + 0 + 10 +8645.624987 + 20 +4249.579626 + 30 +0.0 + 11 +8617.499987 + 21 +4298.293555 + 31 +0.0 + 0 +LINE + 5 +33D + 8 +0 + 62 + 0 + 10 +8561.249987 + 20 +4395.721413 + 30 +0.0 + 11 +8533.124987 + 21 +4444.435342 + 31 +0.0 + 0 +LINE + 5 +33E + 8 +0 + 62 + 0 + 10 +8729.999987 + 20 +4200.865697 + 30 +0.0 + 11 +8701.874987 + 21 +4249.579626 + 31 +0.0 + 0 +LINE + 5 +33F + 8 +0 + 62 + 0 + 10 +8645.624987 + 20 +4347.007484 + 30 +0.0 + 11 +8617.499987 + 21 +4395.721413 + 31 +0.0 + 0 +LINE + 5 +340 + 8 +0 + 62 + 0 + 10 +8790.872001 + 20 +4192.860132 + 30 +0.0 + 11 +8786.249987 + 21 +4200.865697 + 31 +0.0 + 0 +LINE + 5 +341 + 8 +0 + 62 + 0 + 10 +8729.999987 + 20 +4298.293555 + 30 +0.0 + 11 +8701.874987 + 21 +4347.007484 + 31 +0.0 + 0 +LINE + 5 +342 + 8 +0 + 62 + 0 + 10 +8645.624987 + 20 +4444.435342 + 30 +0.0 + 11 +8617.666921 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +343 + 8 +0 + 62 + 0 + 10 +8814.374986 + 20 +4249.579626 + 30 +0.0 + 11 +8786.249986 + 21 +4298.293555 + 31 +0.0 + 0 +LINE + 5 +344 + 8 +0 + 62 + 0 + 10 +8729.999986 + 20 +4395.721413 + 30 +0.0 + 11 +8701.874986 + 21 +4444.435342 + 31 +0.0 + 0 +LINE + 5 +345 + 8 +0 + 62 + 0 + 10 +8814.374986 + 20 +4347.007484 + 30 +0.0 + 11 +8786.249986 + 21 +4395.721413 + 31 +0.0 + 0 +LINE + 5 +346 + 8 +0 + 62 + 0 + 10 +8814.374986 + 20 +4444.435342 + 30 +0.0 + 11 +8786.41692 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +347 + 8 +0 + 62 + 0 + 10 +6869.127965 + 20 +4192.860132 + 30 +0.0 + 11 +6873.749988 + 21 +4200.865712 + 31 +0.0 + 0 +LINE + 5 +348 + 8 +0 + 62 + 0 + 10 +6929.999988 + 20 +4298.29357 + 30 +0.0 + 11 +6958.124988 + 21 +4347.007498 + 31 +0.0 + 0 +LINE + 5 +349 + 8 +0 + 62 + 0 + 10 +7014.374988 + 20 +4444.435356 + 30 +0.0 + 11 +7042.333046 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +34A + 8 +0 + 62 + 0 + 10 +6845.624989 + 20 +4249.57964 + 30 +0.0 + 11 +6873.749989 + 21 +4298.293569 + 31 +0.0 + 0 +LINE + 5 +34B + 8 +0 + 62 + 0 + 10 +6929.999989 + 20 +4395.721427 + 30 +0.0 + 11 +6958.124989 + 21 +4444.435356 + 31 +0.0 + 0 +LINE + 5 +34C + 8 +0 + 62 + 0 + 10 +6761.249989 + 20 +4200.865711 + 30 +0.0 + 11 +6789.374989 + 21 +4249.57964 + 31 +0.0 + 0 +LINE + 5 +34D + 8 +0 + 62 + 0 + 10 +6845.624989 + 20 +4347.007498 + 30 +0.0 + 11 +6873.749989 + 21 +4395.721427 + 31 +0.0 + 0 +LINE + 5 +34E + 8 +0 + 62 + 0 + 10 +6700.377966 + 20 +4192.860132 + 30 +0.0 + 11 +6704.999989 + 21 +4200.865711 + 31 +0.0 + 0 +LINE + 5 +34F + 8 +0 + 62 + 0 + 10 +6761.249989 + 20 +4298.293569 + 30 +0.0 + 11 +6789.374989 + 21 +4347.007498 + 31 +0.0 + 0 +LINE + 5 +350 + 8 +0 + 62 + 0 + 10 +6845.624989 + 20 +4444.435356 + 30 +0.0 + 11 +6873.583047 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +351 + 8 +0 + 62 + 0 + 10 +6676.874989 + 20 +4249.57964 + 30 +0.0 + 11 +6704.999989 + 21 +4298.293569 + 31 +0.0 + 0 +LINE + 5 +352 + 8 +0 + 62 + 0 + 10 +6761.249989 + 20 +4395.721427 + 30 +0.0 + 11 +6789.374989 + 21 +4444.435356 + 31 +0.0 + 0 +LINE + 5 +353 + 8 +0 + 62 + 0 + 10 +6592.499989 + 20 +4200.865711 + 30 +0.0 + 11 +6620.624989 + 21 +4249.57964 + 31 +0.0 + 0 +LINE + 5 +354 + 8 +0 + 62 + 0 + 10 +6676.874989 + 20 +4347.007498 + 30 +0.0 + 11 +6704.999989 + 21 +4395.721427 + 31 +0.0 + 0 +LINE + 5 +355 + 8 +0 + 62 + 0 + 10 +6531.627967 + 20 +4192.860132 + 30 +0.0 + 11 +6536.249989 + 21 +4200.865711 + 31 +0.0 + 0 +LINE + 5 +356 + 8 +0 + 62 + 0 + 10 +6592.499989 + 20 +4298.293569 + 30 +0.0 + 11 +6620.624989 + 21 +4347.007498 + 31 +0.0 + 0 +LINE + 5 +357 + 8 +0 + 62 + 0 + 10 +6676.874989 + 20 +4444.435356 + 30 +0.0 + 11 +6704.833047 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +358 + 8 +0 + 62 + 0 + 10 +6508.12499 + 20 +4249.57964 + 30 +0.0 + 11 +6536.24999 + 21 +4298.293569 + 31 +0.0 + 0 +LINE + 5 +359 + 8 +0 + 62 + 0 + 10 +6592.49999 + 20 +4395.721427 + 30 +0.0 + 11 +6620.62499 + 21 +4444.435356 + 31 +0.0 + 0 +LINE + 5 +35A + 8 +0 + 62 + 0 + 10 +6423.74999 + 20 +4200.865711 + 30 +0.0 + 11 +6451.87499 + 21 +4249.57964 + 31 +0.0 + 0 +LINE + 5 +35B + 8 +0 + 62 + 0 + 10 +6508.12499 + 20 +4347.007498 + 30 +0.0 + 11 +6536.24999 + 21 +4395.721427 + 31 +0.0 + 0 +LINE + 5 +35C + 8 +0 + 62 + 0 + 10 +6362.877967 + 20 +4192.860132 + 30 +0.0 + 11 +6367.49999 + 21 +4200.865711 + 31 +0.0 + 0 +LINE + 5 +35D + 8 +0 + 62 + 0 + 10 +6423.74999 + 20 +4298.293569 + 30 +0.0 + 11 +6451.87499 + 21 +4347.007498 + 31 +0.0 + 0 +LINE + 5 +35E + 8 +0 + 62 + 0 + 10 +6508.12499 + 20 +4444.435355 + 30 +0.0 + 11 +6536.083048 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +35F + 8 +0 + 62 + 0 + 10 +6339.37499 + 20 +4249.579639 + 30 +0.0 + 11 +6367.49999 + 21 +4298.293568 + 31 +0.0 + 0 +LINE + 5 +360 + 8 +0 + 62 + 0 + 10 +6423.74999 + 20 +4395.721426 + 30 +0.0 + 11 +6451.87499 + 21 +4444.435355 + 31 +0.0 + 0 +LINE + 5 +361 + 8 +0 + 62 + 0 + 10 +6254.99999 + 20 +4200.86571 + 30 +0.0 + 11 +6283.12499 + 21 +4249.579639 + 31 +0.0 + 0 +LINE + 5 +362 + 8 +0 + 62 + 0 + 10 +6339.37499 + 20 +4347.007497 + 30 +0.0 + 11 +6367.49999 + 21 +4395.721426 + 31 +0.0 + 0 +LINE + 5 +363 + 8 +0 + 62 + 0 + 10 +6194.127968 + 20 +4192.860132 + 30 +0.0 + 11 +6198.749991 + 21 +4200.86571 + 31 +0.0 + 0 +LINE + 5 +364 + 8 +0 + 62 + 0 + 10 +6254.999991 + 20 +4298.293568 + 30 +0.0 + 11 +6283.124991 + 21 +4347.007497 + 31 +0.0 + 0 +LINE + 5 +365 + 8 +0 + 62 + 0 + 10 +6339.374991 + 20 +4444.435355 + 30 +0.0 + 11 +6367.333049 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +366 + 8 +0 + 62 + 0 + 10 +6170.624991 + 20 +4249.579639 + 30 +0.0 + 11 +6198.749991 + 21 +4298.293568 + 31 +0.0 + 0 +LINE + 5 +367 + 8 +0 + 62 + 0 + 10 +6254.999991 + 20 +4395.721426 + 30 +0.0 + 11 +6283.124991 + 21 +4444.435355 + 31 +0.0 + 0 +LINE + 5 +368 + 8 +0 + 62 + 0 + 10 +6086.249991 + 20 +4200.86571 + 30 +0.0 + 11 +6114.374991 + 21 +4249.579639 + 31 +0.0 + 0 +LINE + 5 +369 + 8 +0 + 62 + 0 + 10 +6170.624991 + 20 +4347.007497 + 30 +0.0 + 11 +6198.749991 + 21 +4395.721426 + 31 +0.0 + 0 +LINE + 5 +36A + 8 +0 + 62 + 0 + 10 +6025.377969 + 20 +4192.860132 + 30 +0.0 + 11 +6029.999991 + 21 +4200.86571 + 31 +0.0 + 0 +LINE + 5 +36B + 8 +0 + 62 + 0 + 10 +6086.249991 + 20 +4298.293568 + 30 +0.0 + 11 +6114.374991 + 21 +4347.007497 + 31 +0.0 + 0 +LINE + 5 +36C + 8 +0 + 62 + 0 + 10 +6170.624991 + 20 +4444.435355 + 30 +0.0 + 11 +6198.58305 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +36D + 8 +0 + 62 + 0 + 10 +6001.874991 + 20 +4249.579639 + 30 +0.0 + 11 +6029.999991 + 21 +4298.293568 + 31 +0.0 + 0 +LINE + 5 +36E + 8 +0 + 62 + 0 + 10 +6086.249991 + 20 +4395.721426 + 30 +0.0 + 11 +6114.374991 + 21 +4444.435355 + 31 +0.0 + 0 +LINE + 5 +36F + 8 +0 + 62 + 0 + 10 +5917.499992 + 20 +4200.86571 + 30 +0.0 + 11 +5945.624992 + 21 +4249.579639 + 31 +0.0 + 0 +LINE + 5 +370 + 8 +0 + 62 + 0 + 10 +6001.874992 + 20 +4347.007497 + 30 +0.0 + 11 +6029.999992 + 21 +4395.721426 + 31 +0.0 + 0 +LINE + 5 +371 + 8 +0 + 62 + 0 + 10 +5856.627969 + 20 +4192.860132 + 30 +0.0 + 11 +5861.249992 + 21 +4200.86571 + 31 +0.0 + 0 +LINE + 5 +372 + 8 +0 + 62 + 0 + 10 +5917.499992 + 20 +4298.293568 + 30 +0.0 + 11 +5945.624992 + 21 +4347.007497 + 31 +0.0 + 0 +LINE + 5 +373 + 8 +0 + 62 + 0 + 10 +6001.874992 + 20 +4444.435354 + 30 +0.0 + 11 +6029.83305 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +374 + 8 +0 + 62 + 0 + 10 +5833.124992 + 20 +4249.579639 + 30 +0.0 + 11 +5861.249992 + 21 +4298.293568 + 31 +0.0 + 0 +LINE + 5 +375 + 8 +0 + 62 + 0 + 10 +5917.499992 + 20 +4395.721425 + 30 +0.0 + 11 +5945.624992 + 21 +4444.435354 + 31 +0.0 + 0 +LINE + 5 +376 + 8 +0 + 62 + 0 + 10 +5748.749992 + 20 +4200.865709 + 30 +0.0 + 11 +5776.874992 + 21 +4249.579638 + 31 +0.0 + 0 +LINE + 5 +377 + 8 +0 + 62 + 0 + 10 +5833.124992 + 20 +4347.007496 + 30 +0.0 + 11 +5861.249992 + 21 +4395.721425 + 31 +0.0 + 0 +LINE + 5 +378 + 8 +0 + 62 + 0 + 10 +5687.87797 + 20 +4192.860132 + 30 +0.0 + 11 +5692.499992 + 21 +4200.865709 + 31 +0.0 + 0 +LINE + 5 +379 + 8 +0 + 62 + 0 + 10 +5748.749992 + 20 +4298.293567 + 30 +0.0 + 11 +5776.874992 + 21 +4347.007496 + 31 +0.0 + 0 +LINE + 5 +37A + 8 +0 + 62 + 0 + 10 +5833.124992 + 20 +4444.435354 + 30 +0.0 + 11 +5861.083051 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +37B + 8 +0 + 62 + 0 + 10 +5664.374992 + 20 +4249.579638 + 30 +0.0 + 11 +5692.499992 + 21 +4298.293567 + 31 +0.0 + 0 +LINE + 5 +37C + 8 +0 + 62 + 0 + 10 +5748.749992 + 20 +4395.721425 + 30 +0.0 + 11 +5776.874992 + 21 +4444.435354 + 31 +0.0 + 0 +LINE + 5 +37D + 8 +0 + 62 + 0 + 10 +5579.999993 + 20 +4200.865709 + 30 +0.0 + 11 +5608.124993 + 21 +4249.579638 + 31 +0.0 + 0 +LINE + 5 +37E + 8 +0 + 62 + 0 + 10 +5664.374993 + 20 +4347.007496 + 30 +0.0 + 11 +5692.499993 + 21 +4395.721425 + 31 +0.0 + 0 +LINE + 5 +37F + 8 +0 + 62 + 0 + 10 +5519.127971 + 20 +4192.860132 + 30 +0.0 + 11 +5523.749993 + 21 +4200.865709 + 31 +0.0 + 0 +LINE + 5 +380 + 8 +0 + 62 + 0 + 10 +5579.999993 + 20 +4298.293567 + 30 +0.0 + 11 +5608.124993 + 21 +4347.007496 + 31 +0.0 + 0 +LINE + 5 +381 + 8 +0 + 62 + 0 + 10 +5664.374993 + 20 +4444.435354 + 30 +0.0 + 11 +5692.333052 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +382 + 8 +0 + 62 + 0 + 10 +5495.624993 + 20 +4249.579638 + 30 +0.0 + 11 +5523.749993 + 21 +4298.293567 + 31 +0.0 + 0 +LINE + 5 +383 + 8 +0 + 62 + 0 + 10 +5579.999993 + 20 +4395.721425 + 30 +0.0 + 11 +5608.124993 + 21 +4444.435354 + 31 +0.0 + 0 +LINE + 5 +384 + 8 +0 + 62 + 0 + 10 +5411.249993 + 20 +4200.865709 + 30 +0.0 + 11 +5439.374993 + 21 +4249.579638 + 31 +0.0 + 0 +LINE + 5 +385 + 8 +0 + 62 + 0 + 10 +5495.624993 + 20 +4347.007496 + 30 +0.0 + 11 +5523.749993 + 21 +4395.721425 + 31 +0.0 + 0 +LINE + 5 +386 + 8 +0 + 62 + 0 + 10 +5350.377972 + 20 +4192.860132 + 30 +0.0 + 11 +5354.999993 + 21 +4200.865709 + 31 +0.0 + 0 +LINE + 5 +387 + 8 +0 + 62 + 0 + 10 +5411.249993 + 20 +4298.293567 + 30 +0.0 + 11 +5439.374993 + 21 +4347.007496 + 31 +0.0 + 0 +LINE + 5 +388 + 8 +0 + 62 + 0 + 10 +5495.624993 + 20 +4444.435354 + 30 +0.0 + 11 +5523.583052 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +389 + 8 +0 + 62 + 0 + 10 +5326.874994 + 20 +4249.579638 + 30 +0.0 + 11 +5354.999994 + 21 +4298.293567 + 31 +0.0 + 0 +LINE + 5 +38A + 8 +0 + 62 + 0 + 10 +5411.249994 + 20 +4395.721424 + 30 +0.0 + 11 +5439.374994 + 21 +4444.435353 + 31 +0.0 + 0 +LINE + 5 +38B + 8 +0 + 62 + 0 + 10 +5242.499994 + 20 +4200.865709 + 30 +0.0 + 11 +5270.624994 + 21 +4249.579637 + 31 +0.0 + 0 +LINE + 5 +38C + 8 +0 + 62 + 0 + 10 +5326.874994 + 20 +4347.007495 + 30 +0.0 + 11 +5354.999994 + 21 +4395.721424 + 31 +0.0 + 0 +LINE + 5 +38D + 8 +0 + 62 + 0 + 10 +5181.627972 + 20 +4192.860132 + 30 +0.0 + 11 +5186.249994 + 21 +4200.865708 + 31 +0.0 + 0 +LINE + 5 +38E + 8 +0 + 62 + 0 + 10 +5242.499994 + 20 +4298.293566 + 30 +0.0 + 11 +5270.624994 + 21 +4347.007495 + 31 +0.0 + 0 +LINE + 5 +38F + 8 +0 + 62 + 0 + 10 +5326.874994 + 20 +4444.435353 + 30 +0.0 + 11 +5354.833053 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +390 + 8 +0 + 62 + 0 + 10 +5158.124994 + 20 +4249.579637 + 30 +0.0 + 11 +5186.249994 + 21 +4298.293566 + 31 +0.0 + 0 +LINE + 5 +391 + 8 +0 + 62 + 0 + 10 +5242.499994 + 20 +4395.721424 + 30 +0.0 + 11 +5270.624994 + 21 +4444.435353 + 31 +0.0 + 0 +LINE + 5 +392 + 8 +0 + 62 + 0 + 10 +5158.124994 + 20 +4347.007495 + 30 +0.0 + 11 +5186.249994 + 21 +4395.721424 + 31 +0.0 + 0 +LINE + 5 +393 + 8 +0 + 62 + 0 + 10 +5158.124994 + 20 +4444.435353 + 30 +0.0 + 11 +5186.083054 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +394 + 8 +0 + 62 + 0 + 10 +6929.999988 + 20 +4200.865712 + 30 +0.0 + 11 +6958.124988 + 21 +4249.579641 + 31 +0.0 + 0 +LINE + 5 +395 + 8 +0 + 62 + 0 + 10 +7014.374988 + 20 +4347.007499 + 30 +0.0 + 11 +7042.499988 + 21 +4395.721428 + 31 +0.0 + 0 +LINE + 5 +396 + 8 +0 + 62 + 0 + 10 +7014.374988 + 20 +4249.579641 + 30 +0.0 + 11 +7042.499988 + 21 +4298.29357 + 31 +0.0 + 0 +LINE + 5 +397 + 8 +0 + 62 + 0 + 10 +7098.749988 + 20 +4395.721428 + 30 +0.0 + 11 +7126.874988 + 21 +4444.435357 + 31 +0.0 + 0 +LINE + 5 +398 + 8 +0 + 62 + 0 + 10 +7037.877964 + 20 +4192.860132 + 30 +0.0 + 11 +7042.499988 + 21 +4200.865712 + 31 +0.0 + 0 +LINE + 5 +399 + 8 +0 + 62 + 0 + 10 +7098.749988 + 20 +4298.29357 + 30 +0.0 + 11 +7126.874988 + 21 +4347.007499 + 31 +0.0 + 0 +LINE + 5 +39A + 8 +0 + 62 + 0 + 10 +7183.124988 + 20 +4444.435357 + 30 +0.0 + 11 +7211.083045 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +39B + 8 +0 + 62 + 0 + 10 +7098.749988 + 20 +4200.865712 + 30 +0.0 + 11 +7126.874988 + 21 +4249.579641 + 31 +0.0 + 0 +LINE + 5 +39C + 8 +0 + 62 + 0 + 10 +7183.124988 + 20 +4347.007499 + 30 +0.0 + 11 +7211.249988 + 21 +4395.721428 + 31 +0.0 + 0 +LINE + 5 +39D + 8 +0 + 62 + 0 + 10 +7183.124987 + 20 +4249.579641 + 30 +0.0 + 11 +7211.249987 + 21 +4298.29357 + 31 +0.0 + 0 +LINE + 5 +39E + 8 +0 + 62 + 0 + 10 +7267.499987 + 20 +4395.721428 + 30 +0.0 + 11 +7295.624987 + 21 +4444.435357 + 31 +0.0 + 0 +LINE + 5 +39F + 8 +0 + 62 + 0 + 10 +7206.627964 + 20 +4192.860132 + 30 +0.0 + 11 +7211.249987 + 21 +4200.865712 + 31 +0.0 + 0 +LINE + 5 +3A0 + 8 +0 + 62 + 0 + 10 +7267.499987 + 20 +4298.29357 + 30 +0.0 + 11 +7295.624987 + 21 +4347.007499 + 31 +0.0 + 0 +LINE + 5 +3A1 + 8 +0 + 62 + 0 + 10 +7351.874987 + 20 +4444.435357 + 30 +0.0 + 11 +7379.833044 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +3A2 + 8 +0 + 62 + 0 + 10 +7267.499987 + 20 +4200.865712 + 30 +0.0 + 11 +7295.624987 + 21 +4249.579641 + 31 +0.0 + 0 +LINE + 5 +3A3 + 8 +0 + 62 + 0 + 10 +7351.874987 + 20 +4347.007499 + 30 +0.0 + 11 +7379.999987 + 21 +4395.721428 + 31 +0.0 + 0 +LINE + 5 +3A4 + 8 +0 + 62 + 0 + 10 +7351.874987 + 20 +4249.579641 + 30 +0.0 + 11 +7379.999987 + 21 +4298.29357 + 31 +0.0 + 0 +LINE + 5 +3A5 + 8 +0 + 62 + 0 + 10 +7436.249987 + 20 +4395.721428 + 30 +0.0 + 11 +7464.374987 + 21 +4444.435357 + 31 +0.0 + 0 +LINE + 5 +3A6 + 8 +0 + 62 + 0 + 10 +7375.377963 + 20 +4192.860132 + 30 +0.0 + 11 +7379.999987 + 21 +4200.865713 + 31 +0.0 + 0 +LINE + 5 +3A7 + 8 +0 + 62 + 0 + 10 +7436.249987 + 20 +4298.29357 + 30 +0.0 + 11 +7464.374987 + 21 +4347.007499 + 31 +0.0 + 0 +LINE + 5 +3A8 + 8 +0 + 62 + 0 + 10 +7520.624987 + 20 +4444.435357 + 30 +0.0 + 11 +7548.583044 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +3A9 + 8 +0 + 62 + 0 + 10 +7436.249987 + 20 +4200.865713 + 30 +0.0 + 11 +7464.374987 + 21 +4249.579642 + 31 +0.0 + 0 +LINE + 5 +3AA + 8 +0 + 62 + 0 + 10 +7520.624987 + 20 +4347.0075 + 30 +0.0 + 11 +7548.749987 + 21 +4395.721429 + 31 +0.0 + 0 +LINE + 5 +3AB + 8 +0 + 62 + 0 + 10 +7520.624986 + 20 +4249.579642 + 30 +0.0 + 11 +7548.749986 + 21 +4298.293571 + 31 +0.0 + 0 +LINE + 5 +3AC + 8 +0 + 62 + 0 + 10 +7604.999986 + 20 +4395.721429 + 30 +0.0 + 11 +7633.124986 + 21 +4444.435358 + 31 +0.0 + 0 +LINE + 5 +3AD + 8 +0 + 62 + 0 + 10 +7544.127962 + 20 +4192.860132 + 30 +0.0 + 11 +7548.749986 + 21 +4200.865713 + 31 +0.0 + 0 +LINE + 5 +3AE + 8 +0 + 62 + 0 + 10 +7604.999986 + 20 +4298.293571 + 30 +0.0 + 11 +7633.124986 + 21 +4347.0075 + 31 +0.0 + 0 +LINE + 5 +3AF + 8 +0 + 62 + 0 + 10 +7689.374986 + 20 +4444.435358 + 30 +0.0 + 11 +7717.333043 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +3B0 + 8 +0 + 62 + 0 + 10 +7604.999986 + 20 +4200.865713 + 30 +0.0 + 11 +7633.124986 + 21 +4249.579642 + 31 +0.0 + 0 +LINE + 5 +3B1 + 8 +0 + 62 + 0 + 10 +7689.374986 + 20 +4347.0075 + 30 +0.0 + 11 +7717.499986 + 21 +4395.721429 + 31 +0.0 + 0 +LINE + 5 +3B2 + 8 +0 + 62 + 0 + 10 +7689.374986 + 20 +4249.579642 + 30 +0.0 + 11 +7717.499986 + 21 +4298.293571 + 31 +0.0 + 0 +LINE + 5 +3B3 + 8 +0 + 62 + 0 + 10 +7773.749986 + 20 +4395.721429 + 30 +0.0 + 11 +7801.874986 + 21 +4444.435358 + 31 +0.0 + 0 +LINE + 5 +3B4 + 8 +0 + 62 + 0 + 10 +7712.877961 + 20 +4192.860132 + 30 +0.0 + 11 +7717.499986 + 21 +4200.865713 + 31 +0.0 + 0 +LINE + 5 +3B5 + 8 +0 + 62 + 0 + 10 +7773.749986 + 20 +4298.293571 + 30 +0.0 + 11 +7801.874986 + 21 +4347.0075 + 31 +0.0 + 0 +LINE + 5 +3B6 + 8 +0 + 62 + 0 + 10 +7858.124986 + 20 +4444.435358 + 30 +0.0 + 11 +7886.083042 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +3B7 + 8 +0 + 62 + 0 + 10 +7773.749985 + 20 +4200.865713 + 30 +0.0 + 11 +7801.874985 + 21 +4249.579642 + 31 +0.0 + 0 +LINE + 5 +3B8 + 8 +0 + 62 + 0 + 10 +7858.124985 + 20 +4347.0075 + 30 +0.0 + 11 +7886.249985 + 21 +4395.721429 + 31 +0.0 + 0 +LINE + 5 +3B9 + 8 +0 + 62 + 0 + 10 +7858.124985 + 20 +4249.579642 + 30 +0.0 + 11 +7886.249985 + 21 +4298.293571 + 31 +0.0 + 0 +LINE + 5 +3BA + 8 +0 + 62 + 0 + 10 +7942.499985 + 20 +4395.721429 + 30 +0.0 + 11 +7970.624985 + 21 +4444.435358 + 31 +0.0 + 0 +LINE + 5 +3BB + 8 +0 + 62 + 0 + 10 +7881.627961 + 20 +4192.860132 + 30 +0.0 + 11 +7886.249985 + 21 +4200.865714 + 31 +0.0 + 0 +LINE + 5 +3BC + 8 +0 + 62 + 0 + 10 +7942.499985 + 20 +4298.293571 + 30 +0.0 + 11 +7970.624985 + 21 +4347.0075 + 31 +0.0 + 0 +LINE + 5 +3BD + 8 +0 + 62 + 0 + 10 +8026.874985 + 20 +4444.435358 + 30 +0.0 + 11 +8054.833041 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +3BE + 8 +0 + 62 + 0 + 10 +7942.499985 + 20 +4200.865714 + 30 +0.0 + 11 +7970.624985 + 21 +4249.579643 + 31 +0.0 + 0 +LINE + 5 +3BF + 8 +0 + 62 + 0 + 10 +8026.874985 + 20 +4347.007501 + 30 +0.0 + 11 +8054.999985 + 21 +4395.721429 + 31 +0.0 + 0 +LINE + 5 +3C0 + 8 +0 + 62 + 0 + 10 +8026.874985 + 20 +4249.579643 + 30 +0.0 + 11 +8054.999985 + 21 +4298.293572 + 31 +0.0 + 0 +LINE + 5 +3C1 + 8 +0 + 62 + 0 + 10 +8111.249985 + 20 +4395.72143 + 30 +0.0 + 11 +8139.374985 + 21 +4444.435359 + 31 +0.0 + 0 +LINE + 5 +3C2 + 8 +0 + 62 + 0 + 10 +8050.37796 + 20 +4192.860132 + 30 +0.0 + 11 +8054.999985 + 21 +4200.865714 + 31 +0.0 + 0 +LINE + 5 +3C3 + 8 +0 + 62 + 0 + 10 +8111.249985 + 20 +4298.293572 + 30 +0.0 + 11 +8139.374985 + 21 +4347.007501 + 31 +0.0 + 0 +LINE + 5 +3C4 + 8 +0 + 62 + 0 + 10 +8195.624985 + 20 +4444.435359 + 30 +0.0 + 11 +8223.583041 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +3C5 + 8 +0 + 62 + 0 + 10 +8111.249984 + 20 +4200.865714 + 30 +0.0 + 11 +8139.374984 + 21 +4249.579643 + 31 +0.0 + 0 +LINE + 5 +3C6 + 8 +0 + 62 + 0 + 10 +8195.624984 + 20 +4347.007501 + 30 +0.0 + 11 +8223.749984 + 21 +4395.72143 + 31 +0.0 + 0 +LINE + 5 +3C7 + 8 +0 + 62 + 0 + 10 +8195.624984 + 20 +4249.579643 + 30 +0.0 + 11 +8223.749984 + 21 +4298.293572 + 31 +0.0 + 0 +LINE + 5 +3C8 + 8 +0 + 62 + 0 + 10 +8279.999984 + 20 +4395.72143 + 30 +0.0 + 11 +8308.124984 + 21 +4444.435359 + 31 +0.0 + 0 +LINE + 5 +3C9 + 8 +0 + 62 + 0 + 10 +8219.127959 + 20 +4192.860132 + 30 +0.0 + 11 +8223.749984 + 21 +4200.865714 + 31 +0.0 + 0 +LINE + 5 +3CA + 8 +0 + 62 + 0 + 10 +8279.999984 + 20 +4298.293572 + 30 +0.0 + 11 +8308.124984 + 21 +4347.007501 + 31 +0.0 + 0 +LINE + 5 +3CB + 8 +0 + 62 + 0 + 10 +8364.374984 + 20 +4444.435359 + 30 +0.0 + 11 +8392.33304 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +3CC + 8 +0 + 62 + 0 + 10 +8279.999984 + 20 +4200.865714 + 30 +0.0 + 11 +8308.124984 + 21 +4249.579643 + 31 +0.0 + 0 +LINE + 5 +3CD + 8 +0 + 62 + 0 + 10 +8364.374984 + 20 +4347.007501 + 30 +0.0 + 11 +8392.499984 + 21 +4395.72143 + 31 +0.0 + 0 +LINE + 5 +3CE + 8 +0 + 62 + 0 + 10 +8364.374984 + 20 +4249.579643 + 30 +0.0 + 11 +8392.499984 + 21 +4298.293572 + 31 +0.0 + 0 +LINE + 5 +3CF + 8 +0 + 62 + 0 + 10 +8448.749984 + 20 +4395.72143 + 30 +0.0 + 11 +8476.874984 + 21 +4444.435359 + 31 +0.0 + 0 +LINE + 5 +3D0 + 8 +0 + 62 + 0 + 10 +8387.877958 + 20 +4192.860132 + 30 +0.0 + 11 +8392.499983 + 21 +4200.865714 + 31 +0.0 + 0 +LINE + 5 +3D1 + 8 +0 + 62 + 0 + 10 +8448.749983 + 20 +4298.293572 + 30 +0.0 + 11 +8476.874983 + 21 +4347.007501 + 31 +0.0 + 0 +LINE + 5 +3D2 + 8 +0 + 62 + 0 + 10 +8533.124983 + 20 +4444.435359 + 30 +0.0 + 11 +8561.083039 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +3D3 + 8 +0 + 62 + 0 + 10 +8448.749983 + 20 +4200.865715 + 30 +0.0 + 11 +8476.874983 + 21 +4249.579644 + 31 +0.0 + 0 +LINE + 5 +3D4 + 8 +0 + 62 + 0 + 10 +8533.124983 + 20 +4347.007501 + 30 +0.0 + 11 +8561.249983 + 21 +4395.72143 + 31 +0.0 + 0 +LINE + 5 +3D5 + 8 +0 + 62 + 0 + 10 +8533.124983 + 20 +4249.579644 + 30 +0.0 + 11 +8561.249983 + 21 +4298.293573 + 31 +0.0 + 0 +LINE + 5 +3D6 + 8 +0 + 62 + 0 + 10 +8617.499983 + 20 +4395.721431 + 30 +0.0 + 11 +8645.624983 + 21 +4444.435359 + 31 +0.0 + 0 +LINE + 5 +3D7 + 8 +0 + 62 + 0 + 10 +8556.627958 + 20 +4192.860132 + 30 +0.0 + 11 +8561.249983 + 21 +4200.865715 + 31 +0.0 + 0 +LINE + 5 +3D8 + 8 +0 + 62 + 0 + 10 +8617.499983 + 20 +4298.293573 + 30 +0.0 + 11 +8645.624983 + 21 +4347.007502 + 31 +0.0 + 0 +LINE + 5 +3D9 + 8 +0 + 62 + 0 + 10 +8701.874983 + 20 +4444.43536 + 30 +0.0 + 11 +8729.833038 + 21 +4492.860132 + 31 +0.0 + 0 +LINE + 5 +3DA + 8 +0 + 62 + 0 + 10 +8617.499983 + 20 +4200.865715 + 30 +0.0 + 11 +8645.624983 + 21 +4249.579644 + 31 +0.0 + 0 +LINE + 5 +3DB + 8 +0 + 62 + 0 + 10 +8701.874983 + 20 +4347.007502 + 30 +0.0 + 11 +8729.999983 + 21 +4395.721431 + 31 +0.0 + 0 +LINE + 5 +3DC + 8 +0 + 62 + 0 + 10 +8701.874982 + 20 +4249.579644 + 30 +0.0 + 11 +8729.999982 + 21 +4298.293573 + 31 +0.0 + 0 +LINE + 5 +3DD + 8 +0 + 62 + 0 + 10 +8786.249982 + 20 +4395.721431 + 30 +0.0 + 11 +8814.374982 + 21 +4444.43536 + 31 +0.0 + 0 +LINE + 5 +3DE + 8 +0 + 62 + 0 + 10 +8725.377957 + 20 +4192.860132 + 30 +0.0 + 11 +8729.999982 + 21 +4200.865715 + 31 +0.0 + 0 +LINE + 5 +3DF + 8 +0 + 62 + 0 + 10 +8786.249982 + 20 +4298.293573 + 30 +0.0 + 11 +8814.374982 + 21 +4347.007502 + 31 +0.0 + 0 +LINE + 5 +3E0 + 8 +0 + 62 + 0 + 10 +8786.249982 + 20 +4200.865715 + 30 +0.0 + 11 +8814.374982 + 21 +4249.579644 + 31 +0.0 + 0 +ENDBLK + 5 +3E1 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D30 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D30 + 1 + + 0 +LINE + 5 +3E3 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9400.0 + 20 +4191.0 + 30 +0.0 + 11 +9400.0 + 21 +4489.0 + 31 +0.0 + 0 +INSERT + 5 +3E4 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9400.0 + 20 +4190.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +3E5 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +9400.0 + 20 +4490.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +3E6 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9356.25 + 20 +4281.666667 + 30 +0.0 + 40 +87.5 + 1 +12 + 50 +90.0 + 72 + 1 + 11 +9312.5 + 21 +4340.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +3E7 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8840.0 + 20 +4190.0 + 30 +0.0 + 0 +POINT + 5 +3E8 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8840.0 + 20 +4490.0 + 30 +0.0 + 0 +POINT + 5 +3E9 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +9400.0 + 20 +4490.0 + 30 +0.0 + 0 +ENDBLK + 5 +3EA + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D33 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D33 + 1 + + 0 +LINE + 5 +3EC + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +10003.0 + 20 +4661.0 + 30 +0.0 + 11 +10003.0 + 21 +4749.0 + 31 +0.0 + 0 +INSERT + 5 +3ED + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +10003.0 + 20 +4660.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +3EE + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +10003.0 + 20 +4750.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +3EF + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9959.25 + 20 +4675.833333 + 30 +0.0 + 40 +87.5 + 1 +3 + 50 +90.0 + 72 + 1 + 11 +9915.5 + 21 +4705.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +3F0 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8835.0 + 20 +4660.0 + 30 +0.0 + 0 +POINT + 5 +3F1 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8830.0 + 20 +4750.0 + 30 +0.0 + 0 +POINT + 5 +3F2 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +10003.0 + 20 +4750.0 + 30 +0.0 + 0 +ENDBLK + 5 +3F3 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D34 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D34 + 1 + + 0 +LINE + 5 +3F5 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +10003.0 + 20 +4751.0 + 30 +0.0 + 11 +10003.0 + 21 +4824.0 + 31 +0.0 + 0 +INSERT + 5 +3F6 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +10003.0 + 20 +4750.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +3F7 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +10003.0 + 20 +4825.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +3F8 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9959.25 + 20 +4758.333333 + 30 +0.0 + 40 +87.5 + 1 +3 + 50 +90.0 + 72 + 1 + 11 +9915.5 + 21 +4787.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +3F9 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8830.0 + 20 +4750.0 + 30 +0.0 + 0 +POINT + 5 +3FA + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8820.0 + 20 +4825.0 + 30 +0.0 + 0 +POINT + 5 +3FB + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +10003.0 + 20 +4825.0 + 30 +0.0 + 0 +ENDBLK + 5 +3FC + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D35 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D35 + 1 + + 0 +LINE + 5 +3FE + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +10003.017251 + 20 +4116.0 + 30 +0.0 + 11 +10003.017251 + 21 +4174.0 + 31 +0.0 + 0 +INSERT + 5 +3FF + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +10003.017251 + 20 +4115.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +400 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +10003.017251 + 20 +4175.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +401 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9959.267251 + 20 +4035.833333 + 30 +0.0 + 40 +87.5 + 1 +2 + 50 +90.0 + 72 + 1 + 11 +9915.517251 + 21 +4065.0 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +402 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8828.017251 + 20 +4115.0 + 30 +0.0 + 0 +POINT + 5 +403 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8828.017251 + 20 +4175.0 + 30 +0.0 + 0 +POINT + 5 +404 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +10003.017251 + 20 +4175.0 + 30 +0.0 + 0 +ENDBLK + 5 +405 + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D37 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D37 + 1 + + 0 +LINE + 5 +407 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +10003.0 + 20 +4176.0 + 30 +0.0 + 11 +10003.0 + 21 +4659.0 + 31 +0.0 + 0 +INSERT + 5 +408 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +10003.0 + 20 +4175.0 + 30 +0.0 + 50 +270.0 + 0 +INSERT + 5 +409 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +10003.0 + 20 +4660.0 + 30 +0.0 + 50 +90.0 + 0 +TEXT + 5 +40A + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +9959.25 + 20 +4359.166667 + 30 +0.0 + 40 +87.5 + 1 +18 + 50 +90.0 + 72 + 1 + 11 +9915.5 + 21 +4417.5 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +40B + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8825.0 + 20 +4175.0 + 30 +0.0 + 0 +POINT + 5 +40C + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +8835.0 + 20 +4660.0 + 30 +0.0 + 0 +POINT + 5 +40D + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +10003.0 + 20 +4660.0 + 30 +0.0 + 0 +ENDBLK + 5 +40E + 8 +0 + 0 +BLOCK + 8 +0 + 2 +*D39 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D39 + 1 + + 0 +LINE + 5 +410 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +3356.72129 + 20 +4461.423158 + 30 +0.0 + 11 +3309.180412 + 21 +4461.423158 + 31 +0.0 + 0 +INSERT + 5 +411 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +3357.72129 + 20 +4461.423158 + 30 +0.0 + 0 +INSERT + 5 +412 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 2 +MASSHILFSLINIE + 10 +3308.180412 + 20 +4461.423158 + 30 +0.0 + 50 +180.0 + 0 +TEXT + 5 +413 + 8 +0 + 6 +BYBLOCK + 62 + 0 + 10 +3225.416667 + 20 +4505.173158 + 30 +0.0 + 40 +87.5 + 1 +1 + 72 + 1 + 11 +3240.0 + 21 +4548.923158 + 31 +0.0 + 73 + 2 + 0 +POINT + 5 +414 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +3357.72129 + 20 +4496.083823 + 30 +0.0 + 0 +POINT + 5 +415 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +3308.180412 + 20 +4496.083823 + 30 +0.0 + 0 +POINT + 5 +416 + 8 +DEFPOINTS + 6 +BYBLOCK + 62 + 0 + 10 +3308.180412 + 20 +4461.423158 + 30 +0.0 + 0 +ENDBLK + 5 +417 + 8 +0 + 0 +ENDSEC + 0 +SECTION + 2 +ENTITIES + 0 +POLYLINE + 5 +418 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +13F5 + 8 +0 + 10 +500.0 + 20 +125.0 + 30 +0.0 + 0 +VERTEX + 5 +13F6 + 8 +0 + 10 +20900.0 + 20 +125.0 + 30 +0.0 + 0 +VERTEX + 5 +13F7 + 8 +0 + 10 +20900.0 + 20 +14725.0 + 30 +0.0 + 0 +VERTEX + 5 +13F8 + 8 +0 + 10 +500.0 + 20 +14725.0 + 30 +0.0 + 0 +SEQEND + 5 +13F9 + 8 +0 + 0 +POLYLINE + 5 +41E + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +13FA + 8 +0 + 10 +20900.0 + 20 +1500.0 + 30 +0.0 + 0 +VERTEX + 5 +13FB + 8 +0 + 10 +16275.0 + 20 +1500.0 + 30 +0.0 + 0 +VERTEX + 5 +13FC + 8 +0 + 10 +16275.0 + 20 +125.0 + 30 +0.0 + 0 +SEQEND + 5 +13FD + 8 +0 + 0 +POLYLINE + 5 +423 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +13FE + 8 +0 + 10 +18650.0 + 20 +125.0 + 30 +0.0 + 0 +VERTEX + 5 +13FF + 8 +0 + 10 +18650.0 + 20 +1495.0 + 30 +0.0 + 0 +SEQEND + 5 +1400 + 8 +0 + 0 +POLYLINE + 5 +427 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +1401 + 8 +0 + 10 +17525.0 + 20 +125.0 + 30 +0.0 + 0 +VERTEX + 5 +1402 + 8 +0 + 10 +17525.0 + 20 +1500.0 + 30 +0.0 + 0 +SEQEND + 5 +1403 + 8 +0 + 0 +POLYLINE + 5 +42B + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +1404 + 8 +0 + 10 +17525.0 + 20 +500.0 + 30 +0.0 + 0 +VERTEX + 5 +1405 + 8 +0 + 10 +20900.0 + 20 +500.0 + 30 +0.0 + 0 +SEQEND + 5 +1406 + 8 +0 + 0 +POLYLINE + 5 +42F + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +1407 + 8 +0 + 10 +17525.0 + 20 +1125.0 + 30 +0.0 + 0 +VERTEX + 5 +1408 + 8 +0 + 10 +20900.0 + 20 +1125.0 + 30 +0.0 + 0 +SEQEND + 5 +1409 + 8 +0 + 0 +POLYLINE + 5 +433 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +140A + 8 +0 + 10 +17525.0 + 20 +250.0 + 30 +0.0 + 0 +VERTEX + 5 +140B + 8 +0 + 10 +16275.0 + 20 +250.0 + 30 +0.0 + 0 +SEQEND + 5 +140C + 8 +0 + 0 +POLYLINE + 5 +437 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +140D + 8 +0 + 10 +17525.0 + 20 +375.0 + 30 +0.0 + 0 +VERTEX + 5 +140E + 8 +0 + 10 +16275.0 + 20 +375.0 + 30 +0.0 + 0 +SEQEND + 5 +140F + 8 +0 + 0 +POLYLINE + 5 +43B + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +1410 + 8 +0 + 10 +17525.0 + 20 +500.0 + 30 +0.0 + 0 +VERTEX + 5 +1411 + 8 +0 + 10 +16275.0 + 20 +500.0 + 30 +0.0 + 0 +SEQEND + 5 +1412 + 8 +0 + 0 +POLYLINE + 5 +43F + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +1413 + 8 +0 + 10 +17525.0 + 20 +625.0 + 30 +0.0 + 0 +VERTEX + 5 +1414 + 8 +0 + 10 +16275.0 + 20 +625.0 + 30 +0.0 + 0 +SEQEND + 5 +1415 + 8 +0 + 0 +POLYLINE + 5 +443 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +1416 + 8 +0 + 10 +17525.0 + 20 +750.0 + 30 +0.0 + 0 +VERTEX + 5 +1417 + 8 +0 + 10 +16275.0 + 20 +750.0 + 30 +0.0 + 0 +SEQEND + 5 +1418 + 8 +0 + 0 +POLYLINE + 5 +447 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +1419 + 8 +0 + 10 +17525.0 + 20 +875.0 + 30 +0.0 + 0 +VERTEX + 5 +141A + 8 +0 + 10 +16275.0 + 20 +875.0 + 30 +0.0 + 0 +SEQEND + 5 +141B + 8 +0 + 0 +POLYLINE + 5 +44B + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +141C + 8 +0 + 10 +17525.0 + 20 +1000.0 + 30 +0.0 + 0 +VERTEX + 5 +141D + 8 +0 + 10 +16275.0 + 20 +1000.0 + 30 +0.0 + 0 +SEQEND + 5 +141E + 8 +0 + 0 +POLYLINE + 5 +44F + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +141F + 8 +0 + 10 +17525.0 + 20 +1125.0 + 30 +0.0 + 0 +VERTEX + 5 +1420 + 8 +0 + 10 +16275.0 + 20 +1125.0 + 30 +0.0 + 0 +SEQEND + 5 +1421 + 8 +0 + 0 +POLYLINE + 5 +453 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +1422 + 8 +0 + 10 +18650.0 + 20 +1375.0 + 30 +0.0 + 0 +VERTEX + 5 +1423 + 8 +0 + 10 +20901.604101 + 20 +1375.0 + 30 +0.0 + 0 +SEQEND + 5 +1424 + 8 +0 + 0 +TEXT + 5 +457 + 8 +LEGENDE-35 + 10 +18745.266644 + 20 +1210.264338 + 30 +0.0 + 40 +87.5 + 1 +MASSTAB 1:10 + 0 +TEXT + 5 +458 + 8 +LEGENDE-35 + 10 +18730.0 + 20 +260.0 + 30 +0.0 + 40 +87.5 + 1 +Name + 0 +TEXT + 5 +459 + 8 +LEGENDE-35 + 10 +17705.0 + 20 +225.0 + 30 +0.0 + 40 +87.5 + 1 +001 + 0 +POLYLINE + 5 +45A + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +17.5 + 41 +17.5 + 0 +VERTEX + 5 +1425 + 8 +0 + 10 +20525.0 + 20 +125.0 + 30 +0.0 + 0 +VERTEX + 5 +1426 + 8 +0 + 10 +20525.0 + 20 +495.0 + 30 +0.0 + 0 +SEQEND + 5 +1427 + 8 +0 + 0 +TEXT + 5 +45E + 8 +LEGENDE-35 + 10 +20580.0 + 20 +365.0 + 30 +0.0 + 40 +87.5 + 1 +Blatt + 41 +0.75 + 0 +POLYLINE + 5 +45F + 8 +PE-FOLIE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +25.0 + 41 +25.0 + 0 +VERTEX + 5 +1428 + 8 +PE-FOLIE + 10 +5741.85938 + 20 +9370.360132 + 30 +0.0 + 0 +VERTEX + 5 +1429 + 8 +PE-FOLIE + 10 +6451.85938 + 20 +9370.360132 + 30 +0.0 + 0 +SEQEND + 5 +142A + 8 +PE-FOLIE + 0 +POLYLINE + 5 +463 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +142B + 8 +HOLZ + 10 +5770.60938 + 20 +9390.360132 + 30 +0.0 + 0 +VERTEX + 5 +142C + 8 +HOLZ + 10 +6220.60938 + 20 +9390.360132 + 30 +0.0 + 0 +VERTEX + 5 +142D + 8 +HOLZ + 10 +6220.60938 + 20 +9840.360132 + 30 +0.0 + 0 +VERTEX + 5 +142E + 8 +HOLZ + 10 +5770.60938 + 20 +9840.360132 + 30 +0.0 + 0 +SEQEND + 5 +142F + 8 +HOLZ + 0 +POLYLINE + 5 +469 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +46A + 8 +HOLZ + 10 +6121.85938 + 20 +9390.360132 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +46B + 8 +HOLZ + 10 +6121.85938 + 20 +9390.360132 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +46C + 8 +HOLZ + 10 +6119.470475 + 20 +9414.504988 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +46D + 8 +HOLZ + 10 +6118.561831 + 20 +9434.501562 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +46E + 8 +HOLZ + 10 +6118.921982 + 20 +9450.868185 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +46F + 8 +HOLZ + 10 +6120.339462 + 20 +9464.123187 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +470 + 8 +HOLZ + 10 +6122.602805 + 20 +9474.784896 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +471 + 8 +HOLZ + 10 +6125.500544 + 20 +9483.371642 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +472 + 8 +HOLZ + 10 +6128.821214 + 20 +9490.401756 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +473 + 8 +HOLZ + 10 +6132.353349 + 20 +9496.393566 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +474 + 8 +HOLZ + 10 +6135.928468 + 20 +9501.788299 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +475 + 8 +HOLZ + 10 +6139.550036 + 20 +9506.71877 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +476 + 8 +HOLZ + 10 +6143.264505 + 20 +9511.24069 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +477 + 8 +HOLZ + 10 +6147.118326 + 20 +9515.409771 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +478 + 8 +HOLZ + 10 +6151.157949 + 20 +9519.281725 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +479 + 8 +HOLZ + 10 +6155.429825 + 20 +9522.912262 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +47A + 8 +HOLZ + 10 +6159.980407 + 20 +9526.357096 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +47B + 8 +HOLZ + 10 +6164.856144 + 20 +9529.671936 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +47C + 8 +HOLZ + 10 +6170.095123 + 20 +9532.897189 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +47D + 8 +HOLZ + 10 +6175.701977 + 20 +9536.012043 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +47E + 8 +HOLZ + 10 +6181.672971 + 20 +9538.980379 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +47F + 8 +HOLZ + 10 +6188.004371 + 20 +9541.766077 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +480 + 8 +HOLZ + 10 +6194.692446 + 20 +9544.33302 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +481 + 8 +HOLZ + 10 +6201.733461 + 20 +9546.64509 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +482 + 8 +HOLZ + 10 +6209.123684 + 20 +9548.666166 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +483 + 8 +HOLZ + 10 +6216.85938 + 20 +9550.360132 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +484 + 8 +HOLZ + 10 +6113.327314 + 20 +9460.738192 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +485 + 8 +HOLZ + 10 +6132.353367 + 20 +9501.939953 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +486 + 8 +HOLZ + 10 +6160.892338 + 20 +9530.46427 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +487 + 8 +HOLZ + 10 +6195.773542 + 20 +9546.311143 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +488 + 8 +HOLZ + 10 +6216.85938 + 20 +9550.360132 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +489 + 8 +HOLZ + 0 +POLYLINE + 5 +48A + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +48B + 8 +HOLZ + 10 +6026.85938 + 20 +9390.360132 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +48C + 8 +HOLZ + 10 +6026.85938 + 20 +9390.360132 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +48D + 8 +HOLZ + 10 +6028.683878 + 20 +9415.766253 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +48E + 8 +HOLZ + 10 +6031.079611 + 20 +9437.163364 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +48F + 8 +HOLZ + 10 +6033.954356 + 20 +9455.060511 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +490 + 8 +HOLZ + 10 +6037.215889 + 20 +9469.966739 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +491 + 8 +HOLZ + 10 +6040.771989 + 20 +9482.391095 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +492 + 8 +HOLZ + 10 +6044.530432 + 20 +9492.842625 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +493 + 8 +HOLZ + 10 +6048.398997 + 20 +9501.830374 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +494 + 8 +HOLZ + 10 +6052.285459 + 20 +9509.86339 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +495 + 8 +HOLZ + 10 +6056.117612 + 20 +9517.371034 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +496 + 8 +HOLZ + 10 +6059.903311 + 20 +9524.46394 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +497 + 8 +HOLZ + 10 +6063.670428 + 20 +9531.173059 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +498 + 8 +HOLZ + 10 +6067.446832 + 20 +9537.529339 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +499 + 8 +HOLZ + 10 +6071.260396 + 20 +9543.563732 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +49A + 8 +HOLZ + 10 +6075.138989 + 20 +9549.307188 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +49B + 8 +HOLZ + 10 +6079.110483 + 20 +9554.790656 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +49C + 8 +HOLZ + 10 +6083.202749 + 20 +9560.045086 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +49D + 8 +HOLZ + 10 +6087.440561 + 20 +9565.10143 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +49E + 8 +HOLZ + 10 +6091.836305 + 20 +9569.990637 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +49F + 8 +HOLZ + 10 +6096.399271 + 20 +9574.743659 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4A0 + 8 +HOLZ + 10 +6101.138748 + 20 +9579.391446 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4A1 + 8 +HOLZ + 10 +6106.064026 + 20 +9583.96495 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4A2 + 8 +HOLZ + 10 +6111.184395 + 20 +9588.495122 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4A3 + 8 +HOLZ + 10 +6116.509143 + 20 +9593.012912 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4A4 + 8 +HOLZ + 10 +6122.047561 + 20 +9597.549271 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4A5 + 8 +HOLZ + 10 +6127.900145 + 20 +9602.129559 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4A6 + 8 +HOLZ + 10 +6134.532214 + 20 +9606.756772 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4A7 + 8 +HOLZ + 10 +6142.500298 + 20 +9611.428315 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4A8 + 8 +HOLZ + 10 +6152.360922 + 20 +9616.141591 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4A9 + 8 +HOLZ + 10 +6164.670616 + 20 +9620.894007 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4AA + 8 +HOLZ + 10 +6179.985905 + 20 +9625.682966 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4AB + 8 +HOLZ + 10 +6198.863317 + 20 +9630.505873 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4AC + 8 +HOLZ + 10 +6221.85938 + 20 +9635.360132 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4AD + 8 +HOLZ + 10 +6030.881087 + 20 +9463.907621 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +4AE + 8 +HOLZ + 10 +6053.078256 + 20 +9514.617397 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +4AF + 8 +HOLZ + 10 +6081.617227 + 20 +9562.158016 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +4B0 + 8 +HOLZ + 10 +6119.669332 + 20 +9597.021055 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +4B1 + 8 +HOLZ + 10 +6154.55032 + 20 +9622.375943 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +4B2 + 8 +HOLZ + 10 +6221.85938 + 20 +9635.360132 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +4B3 + 8 +HOLZ + 0 +POLYLINE + 5 +4B4 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +4B5 + 8 +HOLZ + 10 +5921.85938 + 20 +9390.360132 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +4B6 + 8 +HOLZ + 10 +5921.85938 + 20 +9390.360132 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4B7 + 8 +HOLZ + 10 +5930.304183 + 20 +9432.854706 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4B8 + 8 +HOLZ + 10 +5938.173042 + 20 +9467.79641 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4B9 + 8 +HOLZ + 10 +5945.597782 + 20 +9496.161648 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4BA + 8 +HOLZ + 10 +5952.710227 + 20 +9518.926818 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4BB + 8 +HOLZ + 10 +5959.642202 + 20 +9537.068323 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4BC + 8 +HOLZ + 10 +5966.525532 + 20 +9551.562564 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4BD + 8 +HOLZ + 10 +5973.492042 + 20 +9563.38594 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4BE + 8 +HOLZ + 10 +5980.673556 + 20 +9573.514854 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4BF + 8 +HOLZ + 10 +5988.157219 + 20 +9582.775868 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4C0 + 8 +HOLZ + 10 +5995.851457 + 20 +9591.396197 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4C1 + 8 +HOLZ + 10 +6003.620015 + 20 +9599.453219 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4C2 + 8 +HOLZ + 10 +6011.326639 + 20 +9607.024312 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4C3 + 8 +HOLZ + 10 +6018.835073 + 20 +9614.186852 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4C4 + 8 +HOLZ + 10 +6026.009064 + 20 +9621.018218 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4C5 + 8 +HOLZ + 10 +6032.712358 + 20 +9627.595786 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4C6 + 8 +HOLZ + 10 +6038.808699 + 20 +9633.996934 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4C7 + 8 +HOLZ + 10 +6044.206219 + 20 +9640.276858 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4C8 + 8 +HOLZ + 10 +6048.990594 + 20 +9646.402028 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4C9 + 8 +HOLZ + 10 +6053.291885 + 20 +9652.316733 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4CA + 8 +HOLZ + 10 +6057.240153 + 20 +9657.965262 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4CB + 8 +HOLZ + 10 +6060.965461 + 20 +9663.291903 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4CC + 8 +HOLZ + 10 +6064.59787 + 20 +9668.240945 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4CD + 8 +HOLZ + 10 +6068.267441 + 20 +9672.756676 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4CE + 8 +HOLZ + 10 +6072.104237 + 20 +9676.783387 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4CF + 8 +HOLZ + 10 +6076.215608 + 20 +9680.29322 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4D0 + 8 +HOLZ + 10 +6080.61807 + 20 +9683.369742 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4D1 + 8 +HOLZ + 10 +6085.305429 + 20 +9686.124377 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4D2 + 8 +HOLZ + 10 +6090.27149 + 20 +9688.668547 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4D3 + 8 +HOLZ + 10 +6095.510059 + 20 +9691.113674 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4D4 + 8 +HOLZ + 10 +6101.014941 + 20 +9693.571182 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4D5 + 8 +HOLZ + 10 +6106.779942 + 20 +9696.152492 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4D6 + 8 +HOLZ + 10 +6112.798867 + 20 +9698.969027 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4D7 + 8 +HOLZ + 10 +6119.056749 + 20 +9702.112092 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4D8 + 8 +HOLZ + 10 +6125.503525 + 20 +9705.59252 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4D9 + 8 +HOLZ + 10 +6132.08036 + 20 +9709.401025 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4DA + 8 +HOLZ + 10 +6138.728417 + 20 +9713.528324 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4DB + 8 +HOLZ + 10 +6145.388862 + 20 +9717.965129 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4DC + 8 +HOLZ + 10 +6152.002858 + 20 +9722.702158 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4DD + 8 +HOLZ + 10 +6158.51157 + 20 +9727.730124 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4DE + 8 +HOLZ + 10 +6164.856162 + 20 +9733.039743 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4DF + 8 +HOLZ + 10 +6171.00756 + 20 +9738.642817 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4E0 + 8 +HOLZ + 10 +6177.055739 + 20 +9744.635506 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4E1 + 8 +HOLZ + 10 +6183.120436 + 20 +9751.135056 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4E2 + 8 +HOLZ + 10 +6189.321387 + 20 +9758.258713 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4E3 + 8 +HOLZ + 10 +6195.778329 + 20 +9766.123724 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4E4 + 8 +HOLZ + 10 +6202.610998 + 20 +9774.847335 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4E5 + 8 +HOLZ + 10 +6209.939131 + 20 +9784.546794 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4E6 + 8 +HOLZ + 10 +6217.882464 + 20 +9795.339347 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4E7 + 8 +HOLZ + 10 +5945.263958 + 20 +9514.617397 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +4E8 + 8 +HOLZ + 10 +5976.974046 + 20 +9581.174182 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +4E9 + 8 +HOLZ + 10 +6046.736239 + 20 +9635.053387 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +4EA + 8 +HOLZ + 10 +6068.933192 + 20 +9682.59387 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +4EB + 8 +HOLZ + 10 +6110.156414 + 20 +9695.27145 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +4EC + 8 +HOLZ + 10 +6167.234355 + 20 +9730.134489 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +4ED + 8 +HOLZ + 10 +6195.773542 + 20 +9764.997528 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +4EE + 8 +HOLZ + 10 +6217.882464 + 20 +9795.339347 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +4EF + 8 +HOLZ + 0 +POLYLINE + 5 +4F0 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +4F1 + 8 +HOLZ + 10 +5876.85938 + 20 +9390.360132 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +4F2 + 8 +HOLZ + 10 +5876.85938 + 20 +9390.360132 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4F3 + 8 +HOLZ + 10 +5881.449573 + 20 +9440.601711 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4F4 + 8 +HOLZ + 10 +5886.652796 + 20 +9482.231899 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4F5 + 8 +HOLZ + 10 +5892.360239 + 20 +9516.357091 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4F6 + 8 +HOLZ + 10 +5898.463091 + 20 +9544.083684 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4F7 + 8 +HOLZ + 10 +5904.852541 + 20 +9566.518071 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4F8 + 8 +HOLZ + 10 +5911.419781 + 20 +9584.766649 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4F9 + 8 +HOLZ + 10 +5918.055998 + 20 +9599.935812 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4FA + 8 +HOLZ + 10 +5924.652383 + 20 +9613.131957 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4FB + 8 +HOLZ + 10 +5931.117229 + 20 +9625.288943 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4FC + 8 +HOLZ + 10 +5937.427238 + 20 +9636.650492 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4FD + 8 +HOLZ + 10 +5943.57622 + 20 +9647.28779 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4FE + 8 +HOLZ + 10 +5949.557981 + 20 +9657.272026 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +4FF + 8 +HOLZ + 10 +5955.366328 + 20 +9666.674384 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +500 + 8 +HOLZ + 10 +5960.995068 + 20 +9675.566053 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +501 + 8 +HOLZ + 10 +5966.43801 + 20 +9684.018218 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +502 + 8 +HOLZ + 10 +5971.688959 + 20 +9692.102067 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +503 + 8 +HOLZ + 10 +5976.758755 + 20 +9699.887238 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +504 + 8 +HOLZ + 10 +5981.726363 + 20 +9707.437182 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +505 + 8 +HOLZ + 10 +5986.68778 + 20 +9714.813801 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +506 + 8 +HOLZ + 10 +5991.739 + 20 +9722.078996 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +507 + 8 +HOLZ + 10 +5996.976022 + 20 +9729.29467 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +508 + 8 +HOLZ + 10 +6002.49484 + 20 +9736.522725 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +509 + 8 +HOLZ + 10 +6008.391453 + 20 +9743.825063 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +50A + 8 +HOLZ + 10 +6014.761855 + 20 +9751.263585 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +50B + 8 +HOLZ + 10 +6021.711326 + 20 +9758.929289 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +50C + 8 +HOLZ + 10 +6029.382274 + 20 +9767.029544 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +50D + 8 +HOLZ + 10 +6037.92639 + 20 +9775.800814 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +50E + 8 +HOLZ + 10 +6047.495364 + 20 +9785.479562 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +50F + 8 +HOLZ + 10 +6058.240886 + 20 +9796.302254 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +510 + 8 +HOLZ + 10 +6070.314647 + 20 +9808.505353 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +511 + 8 +HOLZ + 10 +6083.868337 + 20 +9822.325322 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +512 + 8 +HOLZ + 10 +6099.053648 + 20 +9837.998627 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +513 + 8 +HOLZ + 10 +5888.1858 + 20 +9536.802992 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +514 + 8 +HOLZ + 10 +5926.237906 + 20 +9622.375943 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +515 + 8 +HOLZ + 10 +5973.802929 + 20 +9695.27145 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +516 + 8 +HOLZ + 10 +6008.684134 + 20 +9749.150655 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +517 + 8 +HOLZ + 10 +6056.249157 + 20 +9793.521845 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +518 + 8 +HOLZ + 10 +6099.053648 + 20 +9837.998627 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +519 + 8 +HOLZ + 0 +POLYLINE + 5 +51A + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +51B + 8 +HOLZ + 10 +5771.85938 + 20 +9450.360132 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +51C + 8 +HOLZ + 10 +5771.85938 + 20 +9450.360132 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +51D + 8 +HOLZ + 10 +5793.44836 + 20 +9495.445046 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +51E + 8 +HOLZ + 10 +5811.669743 + 20 +9533.213 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +51F + 8 +HOLZ + 10 +5826.926755 + 20 +9564.599619 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +520 + 8 +HOLZ + 10 +5839.622622 + 20 +9590.540529 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +521 + 8 +HOLZ + 10 +5850.160569 + 20 +9611.971354 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +522 + 8 +HOLZ + 10 +5858.943822 + 20 +9629.827721 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +523 + 8 +HOLZ + 10 +5866.375607 + 20 +9645.045254 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +524 + 8 +HOLZ + 10 +5872.85915 + 20 +9658.559578 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +525 + 8 +HOLZ + 10 +5878.757825 + 20 +9671.166888 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +526 + 8 +HOLZ + 10 +5884.275608 + 20 +9683.105659 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +527 + 8 +HOLZ + 10 +5889.576623 + 20 +9694.474933 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +528 + 8 +HOLZ + 10 +5894.824995 + 20 +9705.373755 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +529 + 8 +HOLZ + 10 +5900.18485 + 20 +9715.901166 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +52A + 8 +HOLZ + 10 +5905.820311 + 20 +9726.156212 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +52B + 8 +HOLZ + 10 +5911.895504 + 20 +9736.237935 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +52C + 8 +HOLZ + 10 +5918.574553 + 20 +9746.24538 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +52D + 8 +HOLZ + 10 +5926.023967 + 20 +9756.280543 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +52E + 8 +HOLZ + 10 +5934.419785 + 20 +9766.457245 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +52F + 8 +HOLZ + 10 +5943.940432 + 20 +9776.89226 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +530 + 8 +HOLZ + 10 +5954.76433 + 20 +9787.702361 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +531 + 8 +HOLZ + 10 +5967.069903 + 20 +9799.004323 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +532 + 8 +HOLZ + 10 +5981.035575 + 20 +9810.91492 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +533 + 8 +HOLZ + 10 +5996.839768 + 20 +9823.550926 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +534 + 8 +HOLZ + 10 +6014.660907 + 20 +9837.029115 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +535 + 8 +HOLZ + 10 +5834.278543 + 20 +9581.174182 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +536 + 8 +HOLZ + 10 +5878.672666 + 20 +9666.747133 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +537 + 8 +HOLZ + 10 +5910.382753 + 20 +9745.981227 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +538 + 8 +HOLZ + 10 +5964.290011 + 20 +9799.860567 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +539 + 8 +HOLZ + 10 +6014.660907 + 20 +9837.029115 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +53A + 8 +HOLZ + 0 +POLYLINE + 5 +53B + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +53C + 8 +HOLZ + 10 +5770.836181 + 20 +9684.213 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +53D + 8 +HOLZ + 10 +5770.836181 + 20 +9684.213 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +53E + 8 +HOLZ + 10 +5794.334578 + 20 +9711.937864 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +53F + 8 +HOLZ + 10 +5817.271329 + 20 +9737.016925 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +540 + 8 +HOLZ + 10 +5839.681434 + 20 +9759.623879 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +541 + 8 +HOLZ + 10 +5861.59989 + 20 +9779.932417 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +542 + 8 +HOLZ + 10 +5883.061696 + 20 +9798.116234 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +543 + 8 +HOLZ + 10 +5904.101852 + 20 +9814.349022 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +544 + 8 +HOLZ + 10 +5924.755356 + 20 +9828.804476 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +545 + 8 +HOLZ + 10 +5945.057205 + 20 +9841.656289 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +546 + 8 +HOLZ + 10 +5834.278543 + 20 +9761.8281 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +547 + 8 +HOLZ + 10 +5891.356701 + 20 +9809.368583 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +548 + 8 +HOLZ + 10 +5945.057205 + 20 +9841.656289 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +549 + 8 +HOLZ + 0 +LINE + 5 +54A + 8 +0 + 62 + 0 + 10 +5539.35938 + 20 +9346.4523 + 30 +0.0 + 11 +5545.767212 + 21 +9352.860132 + 31 +0.0 + 0 +POLYLINE + 5 +54B + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1430 + 8 +DETAILS + 10 +5014.35938 + 20 +9173.787465 + 30 +0.0 + 0 +VERTEX + 5 +1431 + 8 +DETAILS + 10 +5089.35938 + 20 +9173.787465 + 30 +0.0 + 0 +SEQEND + 5 +1432 + 8 +DETAILS + 0 +POLYLINE + 5 +54F + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1433 + 8 +DETAILS + 10 +5126.85938 + 20 +9173.787465 + 30 +0.0 + 0 +VERTEX + 5 +1434 + 8 +DETAILS + 10 +5189.35938 + 20 +9173.787465 + 30 +0.0 + 0 +SEQEND + 5 +1435 + 8 +DETAILS + 0 +POLYLINE + 5 +553 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1436 + 8 +DETAILS + 10 +5239.35938 + 20 +9248.787465 + 30 +0.0 + 0 +VERTEX + 5 +1437 + 8 +DETAILS + 10 +5239.35938 + 20 +9098.787465 + 30 +0.0 + 0 +SEQEND + 5 +1438 + 8 +DETAILS + 0 +POLYLINE + 5 +557 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1439 + 8 +DETAILS + 10 +5201.85938 + 20 +9173.787465 + 30 +0.0 + 0 +VERTEX + 5 +143A + 8 +DETAILS + 10 +5339.35938 + 20 +9173.787465 + 30 +0.0 + 0 +SEQEND + 5 +143B + 8 +DETAILS + 0 +POLYLINE + 5 +55B + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +143C + 8 +DETAILS + 10 +5315.976103 + 20 +9211.227005 + 30 +0.0 + 0 +VERTEX + 5 +143D + 8 +DETAILS + 10 +5315.976103 + 20 +9136.227005 + 30 +0.0 + 0 +SEQEND + 5 +143E + 8 +DETAILS + 0 +POLYLINE + 5 +55F + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +143F + 8 +DETAILS + 10 +5376.85938 + 20 +9173.787465 + 30 +0.0 + 0 +VERTEX + 5 +1440 + 8 +DETAILS + 10 +5439.35938 + 20 +9173.787465 + 30 +0.0 + 0 +SEQEND + 5 +1441 + 8 +DETAILS + 0 +POLYLINE + 5 +563 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1442 + 8 +DETAILS + 10 +5476.85938 + 20 +9173.787465 + 30 +0.0 + 0 +VERTEX + 5 +1443 + 8 +DETAILS + 10 +5539.35938 + 20 +9173.787465 + 30 +0.0 + 0 +SEQEND + 5 +1444 + 8 +DETAILS + 0 +POLYLINE + 5 +567 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1445 + 8 +DETAILS + 10 +5589.35938 + 20 +9173.787465 + 30 +0.0 + 0 +VERTEX + 5 +1446 + 8 +DETAILS + 10 +5639.35938 + 20 +9173.787465 + 30 +0.0 + 0 +SEQEND + 5 +1447 + 8 +DETAILS + 0 +POLYLINE + 5 +56B + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1448 + 8 +DETAILS + 10 +5689.35938 + 20 +9173.787465 + 30 +0.0 + 0 +VERTEX + 5 +1449 + 8 +DETAILS + 10 +5764.35938 + 20 +9173.787465 + 30 +0.0 + 0 +SEQEND + 5 +144A + 8 +DETAILS + 0 +TEXT + 5 +56F + 8 +DETAILS + 10 +19314.561908 + 20 +739.032659 + 30 +0.0 + 40 +175.0 + 1 +D5, D6 + 0 +TEXT + 5 +570 + 8 +DETAILS + 10 +20650.0 + 20 +190.0 + 30 +0.0 + 40 +87.5 + 1 +7 + 0 +POLYLINE + 5 +571 + 8 +0 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 0 +VERTEX + 5 +144B + 8 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +144C + 8 +0 + 10 +21025.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +144D + 8 +0 + 10 +21025.0 + 20 +14850.0 + 30 +0.0 + 0 +VERTEX + 5 +144E + 8 +0 + 10 +0.0 + 20 +14850.0 + 30 +0.0 + 0 +SEQEND + 5 +144F + 8 +0 + 0 +POLYLINE + 5 +577 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1450 + 8 +HOLZ + 10 +8170.220909 + 20 +11219.211493 + 30 +0.0 + 0 +VERTEX + 5 +1451 + 8 +HOLZ + 10 +8196.954253 + 20 +11181.512755 + 30 +0.0 + 0 +SEQEND + 5 +1452 + 8 +HOLZ + 0 +POLYLINE + 5 +57B + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +57C + 8 +HOLZ + 10 +8338.266005 + 20 +11319.10669 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +57D + 8 +HOLZ + 10 +8338.266005 + 20 +11319.10669 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +57E + 8 +HOLZ + 10 +8342.035779 + 20 +11311.900175 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +57F + 8 +HOLZ + 10 +8344.511624 + 20 +11305.08464 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +580 + 8 +HOLZ + 10 +8345.92424 + 20 +11298.730265 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +581 + 8 +HOLZ + 10 +8346.504328 + 20 +11292.907229 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +582 + 8 +HOLZ + 10 +8346.482586 + 20 +11287.685712 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +583 + 8 +HOLZ + 10 +8346.089716 + 20 +11283.135893 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +584 + 8 +HOLZ + 10 +8345.556418 + 20 +11279.32795 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +585 + 8 +HOLZ + 10 +8345.11339 + 20 +11276.332064 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +586 + 8 +HOLZ + 10 +8350.24904 + 20 +11299.430389 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +587 + 8 +HOLZ + 10 +8345.969369 + 20 +11283.175971 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +588 + 8 +HOLZ + 10 +8345.11339 + 20 +11276.332064 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +589 + 8 +HOLZ + 0 +POLYLINE + 5 +58A + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +58B + 8 +HOLZ + 10 +8305.74037 + 20 +11299.430389 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +58C + 8 +HOLZ + 10 +8305.74037 + 20 +11299.430389 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +58D + 8 +HOLZ + 10 +8309.073828 + 20 +11292.913922 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +58E + 8 +HOLZ + 10 +8311.384183 + 20 +11286.277152 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +58F + 8 +HOLZ + 10 +8312.691492 + 20 +11279.640384 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +590 + 8 +HOLZ + 10 +8313.015814 + 20 +11273.123922 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +591 + 8 +HOLZ + 10 +8312.377207 + 20 +11266.848069 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +592 + 8 +HOLZ + 10 +8310.795729 + 20 +11260.933129 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +593 + 8 +HOLZ + 10 +8308.291438 + 20 +11255.499407 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +594 + 8 +HOLZ + 10 +8304.884392 + 20 +11250.667205 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +595 + 8 +HOLZ + 10 +8316.011559 + 20 +11282.320483 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +596 + 8 +HOLZ + 10 +8315.155692 + 20 +11262.644112 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +597 + 8 +HOLZ + 10 +8304.884392 + 20 +11250.667205 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +598 + 8 +HOLZ + 0 +POLYLINE + 5 +599 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +59A + 8 +HOLZ + 10 +8267.223218 + 20 +11277.187553 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +59B + 8 +HOLZ + 10 +8267.223218 + 20 +11277.187553 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +59C + 8 +HOLZ + 10 +8268.597397 + 20 +11270.221623 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +59D + 8 +HOLZ + 10 +8269.550299 + 20 +11263.967492 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +59E + 8 +HOLZ + 10 +8270.142107 + 20 +11258.254729 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +59F + 8 +HOLZ + 10 +8270.433 + 20 +11252.912906 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5A0 + 8 +HOLZ + 10 +8270.483159 + 20 +11247.77159 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5A1 + 8 +HOLZ + 10 +8270.352765 + 20 +11242.660353 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5A2 + 8 +HOLZ + 10 +8270.102 + 20 +11237.408763 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5A3 + 8 +HOLZ + 10 +8269.791043 + 20 +11231.846392 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5A4 + 8 +HOLZ + 10 +8271.50289 + 20 +11257.511182 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +5A5 + 8 +HOLZ + 10 +8270.647022 + 20 +11247.245252 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +5A6 + 8 +HOLZ + 10 +8269.791043 + 20 +11231.846392 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +5A7 + 8 +HOLZ + 0 +POLYLINE + 5 +5A8 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +5A9 + 8 +HOLZ + 10 +8239.833234 + 20 +11260.933135 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +5AA + 8 +HOLZ + 10 +8239.833234 + 20 +11260.933135 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5AB + 8 +HOLZ + 10 +8239.544043 + 20 +11251.841854 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5AC + 8 +HOLZ + 10 +8239.284938 + 20 +11244.665406 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5AD + 8 +HOLZ + 10 +8239.005766 + 20 +11238.752144 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5AE + 8 +HOLZ + 10 +8238.656374 + 20 +11233.450424 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5AF + 8 +HOLZ + 10 +8238.18661 + 20 +11228.108599 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5B0 + 8 +HOLZ + 10 +8237.546322 + 20 +11222.075025 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5B1 + 8 +HOLZ + 10 +8236.685357 + 20 +11214.698055 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5B2 + 8 +HOLZ + 10 +8235.553563 + 20 +11205.326044 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5B3 + 8 +HOLZ + 10 +8238.977366 + 20 +11233.557369 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +5B4 + 8 +HOLZ + 10 +8235.553563 + 20 +11205.326044 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +5B5 + 8 +HOLZ + 0 +POLYLINE + 5 +5B6 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +5B7 + 8 +HOLZ + 10 +8200.460214 + 20 +11235.268345 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +5B8 + 8 +HOLZ + 10 +8200.460214 + 20 +11235.268345 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5B9 + 8 +HOLZ + 10 +8199.977065 + 20 +11229.233113 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5BA + 8 +HOLZ + 10 +8199.162913 + 20 +11223.398383 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5BB + 8 +HOLZ + 10 +8198.007728 + 20 +11217.884458 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5BC + 8 +HOLZ + 10 +8196.501479 + 20 +11212.811646 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5BD + 8 +HOLZ + 10 +8194.634135 + 20 +11208.300251 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5BE + 8 +HOLZ + 10 +8192.395665 + 20 +11204.470579 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5BF + 8 +HOLZ + 10 +8189.776037 + 20 +11201.442936 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5C0 + 8 +HOLZ + 10 +8186.765222 + 20 +11199.337626 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5C1 + 8 +HOLZ + 10 +8199.604235 + 20 +11219.013997 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +5C2 + 8 +HOLZ + 10 +8195.324564 + 20 +11203.615068 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +5C3 + 8 +HOLZ + 10 +8186.765222 + 20 +11199.337626 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +5C4 + 8 +HOLZ + 0 +POLYLINE + 5 +5C5 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +5C6 + 8 +HOLZ + 10 +7934.784334 + 20 +11066.123965 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +5C7 + 8 +HOLZ + 10 +7934.784334 + 20 +11066.123965 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5C8 + 8 +HOLZ + 10 +7936.370836 + 20 +11060.068685 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5C9 + 8 +HOLZ + 10 +7937.365534 + 20 +11054.093606 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5CA + 8 +HOLZ + 10 +7937.898827 + 20 +11048.198728 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5CB + 8 +HOLZ + 10 +7938.101113 + 20 +11042.38405 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5CC + 8 +HOLZ + 10 +7938.102789 + 20 +11036.64957 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5CD + 8 +HOLZ + 10 +7938.034253 + 20 +11030.995289 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5CE + 8 +HOLZ + 10 +7938.025904 + 20 +11025.421204 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5CF + 8 +HOLZ + 10 +7938.208138 + 20 +11019.927316 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5D0 + 8 +HOLZ + 10 +7939.919984 + 20 +11049.869616 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +5D1 + 8 +HOLZ + 10 +7937.352159 + 20 +11034.470757 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +5D2 + 8 +HOLZ + 10 +7938.208138 + 20 +11019.927316 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +5D3 + 8 +HOLZ + 0 +POLYLINE + 5 +5D4 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +5D5 + 8 +HOLZ + 10 +7964.742144 + 20 +11073.823429 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +5D6 + 8 +HOLZ + 10 +7964.742144 + 20 +11073.823429 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5D7 + 8 +HOLZ + 10 +7965.310531 + 20 +11068.69883 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5D8 + 8 +HOLZ + 10 +7965.758554 + 20 +11064.586786 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5D9 + 8 +HOLZ + 10 +7966.126338 + 20 +11061.056208 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5DA + 8 +HOLZ + 10 +7966.454004 + 20 +11057.676009 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5DB + 8 +HOLZ + 10 +7966.781675 + 20 +11054.015098 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5DC + 8 +HOLZ + 10 +7967.149475 + 20 +11049.642389 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5DD + 8 +HOLZ + 10 +7967.597524 + 20 +11044.126793 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5DE + 8 +HOLZ + 10 +7968.165948 + 20 +11037.037222 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5DF + 8 +HOLZ + 10 +7966.45399 + 20 +11058.42457 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +5E0 + 8 +HOLZ + 10 +7968.165948 + 20 +11037.037222 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +5E1 + 8 +HOLZ + 0 +POLYLINE + 5 +5E2 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1453 + 8 +HOLZ + 10 +7958.208885 + 20 +11086.731677 + 30 +0.0 + 0 +VERTEX + 5 +1454 + 8 +HOLZ + 10 +7984.942229 + 20 +11049.032938 + 30 +0.0 + 0 +SEQEND + 5 +1455 + 8 +HOLZ + 0 +POLYLINE + 5 +5E6 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +5E7 + 8 +HOLZ + 10 +7776.436166 + 20 +10970.308713 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +5E8 + 8 +HOLZ + 10 +7776.436166 + 20 +10970.308713 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5E9 + 8 +HOLZ + 10 +7775.953017 + 20 +10964.273481 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5EA + 8 +HOLZ + 10 +7775.138865 + 20 +10958.43875 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5EB + 8 +HOLZ + 10 +7773.98368 + 20 +10952.924826 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5EC + 8 +HOLZ + 10 +7772.477431 + 20 +10947.852014 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5ED + 8 +HOLZ + 10 +7770.610087 + 20 +10943.340619 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5EE + 8 +HOLZ + 10 +7768.371617 + 20 +10939.510947 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5EF + 8 +HOLZ + 10 +7765.751989 + 20 +10936.483303 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5F0 + 8 +HOLZ + 10 +7762.741174 + 20 +10934.377994 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5F1 + 8 +HOLZ + 10 +7775.580187 + 20 +10954.054365 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +5F2 + 8 +HOLZ + 10 +7771.300516 + 20 +10938.655436 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +5F3 + 8 +HOLZ + 10 +7762.741174 + 20 +10934.377994 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +5F4 + 8 +HOLZ + 0 +POLYLINE + 5 +5F5 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +5F6 + 8 +HOLZ + 10 +7815.809186 + 20 +10995.973503 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +5F7 + 8 +HOLZ + 10 +7815.809186 + 20 +10995.973503 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5F8 + 8 +HOLZ + 10 +7815.519995 + 20 +10986.882222 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5F9 + 8 +HOLZ + 10 +7815.26089 + 20 +10979.705773 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5FA + 8 +HOLZ + 10 +7814.981718 + 20 +10973.792512 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5FB + 8 +HOLZ + 10 +7814.632326 + 20 +10968.490792 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5FC + 8 +HOLZ + 10 +7814.162562 + 20 +10963.148967 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5FD + 8 +HOLZ + 10 +7813.522274 + 20 +10957.115393 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5FE + 8 +HOLZ + 10 +7812.661309 + 20 +10949.738423 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +5FF + 8 +HOLZ + 10 +7811.529514 + 20 +10940.366412 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +600 + 8 +HOLZ + 10 +7814.953318 + 20 +10968.597737 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +601 + 8 +HOLZ + 10 +7811.529514 + 20 +10940.366412 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +602 + 8 +HOLZ + 0 +POLYLINE + 5 +603 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +604 + 8 +HOLZ + 10 +7843.19917 + 20 +11012.227921 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +605 + 8 +HOLZ + 10 +7843.19917 + 20 +11012.227921 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +606 + 8 +HOLZ + 10 +7844.573349 + 20 +11005.261991 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +607 + 8 +HOLZ + 10 +7845.526251 + 20 +10999.00786 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +608 + 8 +HOLZ + 10 +7846.118059 + 20 +10993.295097 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +609 + 8 +HOLZ + 10 +7846.408952 + 20 +10987.953273 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +60A + 8 +HOLZ + 10 +7846.459111 + 20 +10982.811958 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +60B + 8 +HOLZ + 10 +7846.328717 + 20 +10977.700721 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +60C + 8 +HOLZ + 10 +7846.077952 + 20 +10972.449131 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +60D + 8 +HOLZ + 10 +7845.766995 + 20 +10966.88676 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +60E + 8 +HOLZ + 10 +7847.478842 + 20 +10992.551549 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +60F + 8 +HOLZ + 10 +7846.622974 + 20 +10982.28562 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +610 + 8 +HOLZ + 10 +7845.766995 + 20 +10966.88676 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +611 + 8 +HOLZ + 0 +POLYLINE + 5 +612 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +613 + 8 +HOLZ + 10 +7865.453505 + 20 +11025.915804 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +614 + 8 +HOLZ + 10 +7865.453505 + 20 +11025.915804 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +615 + 8 +HOLZ + 10 +7866.147298 + 20 +11017.917273 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +616 + 8 +HOLZ + 10 +7865.868123 + 20 +11010.530287 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +617 + 8 +HOLZ + 10 +7864.926928 + 20 +11003.644567 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +618 + 8 +HOLZ + 10 +7863.634661 + 20 +10997.149834 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +619 + 8 +HOLZ + 10 +7862.302271 + 20 +10990.935808 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +61A + 8 +HOLZ + 10 +7861.240704 + 20 +10984.89221 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +61B + 8 +HOLZ + 10 +7860.760909 + 20 +10978.90876 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +61C + 8 +HOLZ + 10 +7861.173834 + 20 +10972.875178 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +61D + 8 +HOLZ + 10 +7868.877309 + 20 +11003.672967 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +61E + 8 +HOLZ + 10 +7858.606009 + 20 +10989.129596 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +61F + 8 +HOLZ + 10 +7861.173834 + 20 +10972.875178 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +620 + 8 +HOLZ + 0 +POLYLINE + 5 +621 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +622 + 8 +HOLZ + 10 +7898.835007 + 20 +11045.592175 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +623 + 8 +HOLZ + 10 +7898.835007 + 20 +11045.592175 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +624 + 8 +HOLZ + 10 +7902.991002 + 20 +11039.465025 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +625 + 8 +HOLZ + 10 +7905.923263 + 20 +11033.307804 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +626 + 8 +HOLZ + 10 +7907.77222 + 20 +11027.17064 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +627 + 8 +HOLZ + 10 +7908.678304 + 20 +11021.103656 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +628 + 8 +HOLZ + 10 +7908.781944 + 20 +11015.156978 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +629 + 8 +HOLZ + 10 +7908.22357 + 20 +11009.380732 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +62A + 8 +HOLZ + 10 +7907.143613 + 20 +11003.825043 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +62B + 8 +HOLZ + 10 +7905.682503 + 20 +10998.540037 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +62C + 8 +HOLZ + 10 +7911.674132 + 20 +11029.337757 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +62D + 8 +HOLZ + 10 +7909.962175 + 20 +11012.227921 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +62E + 8 +HOLZ + 10 +7905.682503 + 20 +10998.540037 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +62F + 8 +HOLZ + 0 +POLYLINE + 5 +630 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1456 + 8 +HOLZ + 10 +7746.196861 + 20 +10954.251861 + 30 +0.0 + 0 +VERTEX + 5 +1457 + 8 +HOLZ + 10 +7772.930205 + 20 +10916.553122 + 30 +0.0 + 0 +SEQEND + 5 +1458 + 8 +HOLZ + 0 +POLYLINE + 5 +634 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +635 + 8 +HOLZ + 10 +8162.203308 + 20 +11212.291733 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +636 + 8 +HOLZ + 10 +8162.203308 + 20 +11212.291733 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +637 + 8 +HOLZ + 10 +8163.363487 + 20 +11203.070098 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +638 + 8 +HOLZ + 10 +8164.26288 + 20 +11194.660521 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +639 + 8 +HOLZ + 10 +8164.881423 + 20 +11187.073023 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +63A + 8 +HOLZ + 10 +8165.199053 + 20 +11180.31763 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +63B + 8 +HOLZ + 10 +8165.195706 + 20 +11174.404365 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +63C + 8 +HOLZ + 10 +8164.85132 + 20 +11169.343251 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +63D + 8 +HOLZ + 10 +8164.145831 + 20 +11165.144313 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +63E + 8 +HOLZ + 10 +8163.059176 + 20 +11161.817573 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +63F + 8 +HOLZ + 10 +8165.627001 + 20 +11186.626874 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +640 + 8 +HOLZ + 10 +8166.482979 + 20 +11169.517038 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +641 + 8 +HOLZ + 10 +8163.059176 + 20 +11161.817573 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +642 + 8 +HOLZ + 0 +POLYLINE + 5 +643 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +644 + 8 +HOLZ + 10 +8126.253981 + 20 +11186.626874 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +645 + 8 +HOLZ + 10 +8126.253981 + 20 +11186.626874 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +646 + 8 +HOLZ + 10 +8130.023755 + 20 +11179.420359 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +647 + 8 +HOLZ + 10 +8132.4996 + 20 +11172.604824 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +648 + 8 +HOLZ + 10 +8133.912216 + 20 +11166.250449 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +649 + 8 +HOLZ + 10 +8134.492304 + 20 +11160.427413 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +64A + 8 +HOLZ + 10 +8134.470562 + 20 +11155.205896 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +64B + 8 +HOLZ + 10 +8134.077692 + 20 +11150.656077 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +64C + 8 +HOLZ + 10 +8133.544394 + 20 +11146.848134 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +64D + 8 +HOLZ + 10 +8133.101366 + 20 +11143.852248 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +64E + 8 +HOLZ + 10 +8138.237016 + 20 +11166.950573 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +64F + 8 +HOLZ + 10 +8133.957345 + 20 +11150.696155 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +650 + 8 +HOLZ + 10 +8133.101366 + 20 +11143.852248 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +651 + 8 +HOLZ + 0 +POLYLINE + 5 +652 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +653 + 8 +HOLZ + 10 +8093.728346 + 20 +11166.950573 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +654 + 8 +HOLZ + 10 +8093.728346 + 20 +11166.950573 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +655 + 8 +HOLZ + 10 +8097.061804 + 20 +11160.434106 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +656 + 8 +HOLZ + 10 +8099.372159 + 20 +11153.797336 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +657 + 8 +HOLZ + 10 +8100.679468 + 20 +11147.160568 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +658 + 8 +HOLZ + 10 +8101.00379 + 20 +11140.644106 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +659 + 8 +HOLZ + 10 +8100.365183 + 20 +11134.368253 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +65A + 8 +HOLZ + 10 +8098.783705 + 20 +11128.453313 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +65B + 8 +HOLZ + 10 +8096.279414 + 20 +11123.019591 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +65C + 8 +HOLZ + 10 +8092.872368 + 20 +11118.187389 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +65D + 8 +HOLZ + 10 +8103.999535 + 20 +11149.840667 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +65E + 8 +HOLZ + 10 +8103.143668 + 20 +11130.164295 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +65F + 8 +HOLZ + 10 +8092.872368 + 20 +11118.187389 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +660 + 8 +HOLZ + 0 +POLYLINE + 5 +661 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +662 + 8 +HOLZ + 10 +8055.211194 + 20 +11144.707737 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +663 + 8 +HOLZ + 10 +8055.211194 + 20 +11144.707737 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +664 + 8 +HOLZ + 10 +8056.585373 + 20 +11137.741807 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +665 + 8 +HOLZ + 10 +8057.538275 + 20 +11131.487676 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +666 + 8 +HOLZ + 10 +8058.130083 + 20 +11125.774913 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +667 + 8 +HOLZ + 10 +8058.420976 + 20 +11120.433089 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +668 + 8 +HOLZ + 10 +8058.471135 + 20 +11115.291774 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +669 + 8 +HOLZ + 10 +8058.340741 + 20 +11110.180537 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +66A + 8 +HOLZ + 10 +8058.089976 + 20 +11104.928947 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +66B + 8 +HOLZ + 10 +8057.779019 + 20 +11099.366576 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +66C + 8 +HOLZ + 10 +8059.490866 + 20 +11125.031365 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +66D + 8 +HOLZ + 10 +8058.634998 + 20 +11114.765436 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +66E + 8 +HOLZ + 10 +8057.779019 + 20 +11099.366576 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +66F + 8 +HOLZ + 0 +POLYLINE + 5 +670 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +671 + 8 +HOLZ + 10 +8027.82121 + 20 +11128.453319 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +672 + 8 +HOLZ + 10 +8027.82121 + 20 +11128.453319 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +673 + 8 +HOLZ + 10 +8027.532019 + 20 +11119.362038 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +674 + 8 +HOLZ + 10 +8027.272914 + 20 +11112.18559 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +675 + 8 +HOLZ + 10 +8026.993742 + 20 +11106.272328 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +676 + 8 +HOLZ + 10 +8026.64435 + 20 +11100.970608 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +677 + 8 +HOLZ + 10 +8026.174586 + 20 +11095.628783 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +678 + 8 +HOLZ + 10 +8025.534298 + 20 +11089.595209 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +679 + 8 +HOLZ + 10 +8024.673333 + 20 +11082.218239 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +67A + 8 +HOLZ + 10 +8023.541538 + 20 +11072.846228 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +67B + 8 +HOLZ + 10 +8026.965342 + 20 +11101.077553 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +67C + 8 +HOLZ + 10 +8023.541538 + 20 +11072.846228 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +67D + 8 +HOLZ + 0 +POLYLINE + 5 +67E + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +67F + 8 +HOLZ + 10 +7988.44819 + 20 +11102.788529 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +680 + 8 +HOLZ + 10 +7988.44819 + 20 +11102.788529 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +681 + 8 +HOLZ + 10 +7987.965041 + 20 +11096.753297 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +682 + 8 +HOLZ + 10 +7987.150889 + 20 +11090.918567 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +683 + 8 +HOLZ + 10 +7985.995704 + 20 +11085.404642 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +684 + 8 +HOLZ + 10 +7984.489455 + 20 +11080.33183 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +685 + 8 +HOLZ + 10 +7982.622111 + 20 +11075.820435 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +686 + 8 +HOLZ + 10 +7980.383641 + 20 +11071.990763 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +687 + 8 +HOLZ + 10 +7977.764013 + 20 +11068.963119 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +688 + 8 +HOLZ + 10 +7974.753198 + 20 +11066.85781 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +689 + 8 +HOLZ + 10 +7987.592211 + 20 +11086.534181 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +68A + 8 +HOLZ + 10 +7983.31254 + 20 +11071.135252 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +68B + 8 +HOLZ + 10 +7974.753198 + 20 +11066.85781 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +68C + 8 +HOLZ + 0 +POLYLINE + 5 +68D + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +68E + 8 +HOLZ + 10 +7510.760286 + 20 +10801.164332 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +68F + 8 +HOLZ + 10 +7510.760286 + 20 +10801.164332 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +690 + 8 +HOLZ + 10 +7512.346787 + 20 +10795.109053 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +691 + 8 +HOLZ + 10 +7513.341486 + 20 +10789.133974 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +692 + 8 +HOLZ + 10 +7513.874779 + 20 +10783.239096 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +693 + 8 +HOLZ + 10 +7514.077065 + 20 +10777.424418 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +694 + 8 +HOLZ + 10 +7514.078741 + 20 +10771.689938 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +695 + 8 +HOLZ + 10 +7514.010205 + 20 +10766.035656 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +696 + 8 +HOLZ + 10 +7514.001856 + 20 +10760.461572 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +697 + 8 +HOLZ + 10 +7514.18409 + 20 +10754.967683 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +698 + 8 +HOLZ + 10 +7515.895936 + 20 +10784.909984 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +699 + 8 +HOLZ + 10 +7513.328111 + 20 +10769.511125 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +69A + 8 +HOLZ + 10 +7514.18409 + 20 +10754.967683 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +69B + 8 +HOLZ + 0 +POLYLINE + 5 +69C + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +69D + 8 +HOLZ + 10 +7540.718096 + 20 +10808.863797 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +69E + 8 +HOLZ + 10 +7540.718096 + 20 +10808.863797 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +69F + 8 +HOLZ + 10 +7541.286482 + 20 +10803.739198 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6A0 + 8 +HOLZ + 10 +7541.734506 + 20 +10799.627154 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6A1 + 8 +HOLZ + 10 +7542.10229 + 20 +10796.096576 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6A2 + 8 +HOLZ + 10 +7542.429956 + 20 +10792.716376 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6A3 + 8 +HOLZ + 10 +7542.757627 + 20 +10789.055466 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6A4 + 8 +HOLZ + 10 +7543.125426 + 20 +10784.682757 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6A5 + 8 +HOLZ + 10 +7543.573476 + 20 +10779.167161 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6A6 + 8 +HOLZ + 10 +7544.141899 + 20 +10772.07759 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6A7 + 8 +HOLZ + 10 +7542.429942 + 20 +10793.464937 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +6A8 + 8 +HOLZ + 10 +7544.141899 + 20 +10772.07759 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +6A9 + 8 +HOLZ + 0 +POLYLINE + 5 +6AA + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1459 + 8 +HOLZ + 10 +7534.184837 + 20 +10821.772045 + 30 +0.0 + 0 +VERTEX + 5 +145A + 8 +HOLZ + 10 +7560.918181 + 20 +10784.073306 + 30 +0.0 + 0 +SEQEND + 5 +145B + 8 +HOLZ + 0 +POLYLINE + 5 +6AE + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +6AF + 8 +HOLZ + 10 +6948.930558 + 20 +10452.366355 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +6B0 + 8 +HOLZ + 10 +6948.930558 + 20 +10452.366355 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6B1 + 8 +HOLZ + 10 +6948.84028 + 20 +10444.610101 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6B2 + 8 +HOLZ + 10 +6948.529325 + 20 +10437.315014 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6B3 + 8 +HOLZ + 10 +6947.937513 + 20 +10430.380839 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6B4 + 8 +HOLZ + 10 +6947.004662 + 20 +10423.707322 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6B5 + 8 +HOLZ + 10 +6945.670592 + 20 +10417.194209 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6B6 + 8 +HOLZ + 10 +6943.875122 + 20 +10410.741246 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6B7 + 8 +HOLZ + 10 +6941.558071 + 20 +10404.248179 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6B8 + 8 +HOLZ + 10 +6938.659259 + 20 +10397.614753 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6B9 + 8 +HOLZ + 10 +6948.930558 + 20 +10430.979008 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +6BA + 8 +HOLZ + 10 +6947.218601 + 20 +10415.580148 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +6BB + 8 +HOLZ + 10 +6938.659259 + 20 +10397.614753 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +6BC + 8 +HOLZ + 0 +POLYLINE + 5 +6BD + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +145C + 8 +HOLZ + 10 +6898.148764 + 20 +10424.332597 + 30 +0.0 + 0 +VERTEX + 5 +145D + 8 +HOLZ + 10 +6924.882109 + 20 +10386.633858 + 30 +0.0 + 0 +SEQEND + 5 +145E + 8 +HOLZ + 0 +POLYLINE + 5 +6C1 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +6C2 + 8 +HOLZ + 10 +6980.600214 + 20 +10472.898215 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +6C3 + 8 +HOLZ + 10 +6980.600214 + 20 +10472.898215 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6C4 + 8 +HOLZ + 10 +6984.256331 + 20 +10462.699121 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6C5 + 8 +HOLZ + 10 +6986.899366 + 20 +10454.825902 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6C6 + 8 +HOLZ + 10 +6988.559411 + 20 +10448.717141 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6C7 + 8 +HOLZ + 10 +6989.266554 + 20 +10443.81142 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6C8 + 8 +HOLZ + 10 +6989.050887 + 20 +10439.547322 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6C9 + 8 +HOLZ + 10 +6987.9425 + 20 +10435.363429 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6CA + 8 +HOLZ + 10 +6985.971484 + 20 +10430.698324 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6CB + 8 +HOLZ + 10 +6983.167928 + 20 +10424.990589 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6CC + 8 +HOLZ + 10 +6991.727382 + 20 +10442.100426 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +6CD + 8 +HOLZ + 10 +6983.167928 + 20 +10424.990589 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +6CE + 8 +HOLZ + 0 +POLYLINE + 5 +6CF + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +6D0 + 8 +HOLZ + 10 +7140.400094 + 20 +10572.869265 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +6D1 + 8 +HOLZ + 10 +7140.400094 + 20 +10572.869265 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6D2 + 8 +HOLZ + 10 +7139.916945 + 20 +10566.834033 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6D3 + 8 +HOLZ + 10 +7139.102793 + 20 +10560.999302 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6D4 + 8 +HOLZ + 10 +7137.947608 + 20 +10555.485378 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6D5 + 8 +HOLZ + 10 +7136.441359 + 20 +10550.412566 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6D6 + 8 +HOLZ + 10 +7134.574015 + 20 +10545.901171 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6D7 + 8 +HOLZ + 10 +7132.335545 + 20 +10542.071499 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6D8 + 8 +HOLZ + 10 +7129.715917 + 20 +10539.043855 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6D9 + 8 +HOLZ + 10 +7126.705102 + 20 +10536.938546 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6DA + 8 +HOLZ + 10 +7139.544115 + 20 +10556.614917 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +6DB + 8 +HOLZ + 10 +7135.264444 + 20 +10541.215988 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +6DC + 8 +HOLZ + 10 +7126.705102 + 20 +10536.938546 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +6DD + 8 +HOLZ + 0 +POLYLINE + 5 +6DE + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +6DF + 8 +HOLZ + 10 +7160.942582 + 20 +10584.846171 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +6E0 + 8 +HOLZ + 10 +7160.942582 + 20 +10584.846171 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6E1 + 8 +HOLZ + 10 +7160.852304 + 20 +10577.089917 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6E2 + 8 +HOLZ + 10 +7160.541349 + 20 +10569.79483 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6E3 + 8 +HOLZ + 10 +7159.949537 + 20 +10562.860655 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6E4 + 8 +HOLZ + 10 +7159.016686 + 20 +10556.187138 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6E5 + 8 +HOLZ + 10 +7157.682616 + 20 +10549.674025 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6E6 + 8 +HOLZ + 10 +7155.887146 + 20 +10543.221062 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6E7 + 8 +HOLZ + 10 +7153.570095 + 20 +10536.727995 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6E8 + 8 +HOLZ + 10 +7150.671283 + 20 +10530.094569 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6E9 + 8 +HOLZ + 10 +7160.942582 + 20 +10563.458824 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +6EA + 8 +HOLZ + 10 +7159.230625 + 20 +10548.059964 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +6EB + 8 +HOLZ + 10 +7150.671283 + 20 +10530.094569 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +6EC + 8 +HOLZ + 0 +POLYLINE + 5 +6ED + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +6EE + 8 +HOLZ + 10 +7192.612238 + 20 +10605.378031 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +6EF + 8 +HOLZ + 10 +7192.612238 + 20 +10605.378031 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6F0 + 8 +HOLZ + 10 +7196.268355 + 20 +10595.178937 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6F1 + 8 +HOLZ + 10 +7198.911391 + 20 +10587.305718 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6F2 + 8 +HOLZ + 10 +7200.571435 + 20 +10581.196957 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6F3 + 8 +HOLZ + 10 +7201.278578 + 20 +10576.291236 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6F4 + 8 +HOLZ + 10 +7201.062911 + 20 +10572.027138 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6F5 + 8 +HOLZ + 10 +7199.954524 + 20 +10567.843245 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6F6 + 8 +HOLZ + 10 +7197.983508 + 20 +10563.17814 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6F7 + 8 +HOLZ + 10 +7195.179952 + 20 +10557.470405 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6F8 + 8 +HOLZ + 10 +7203.739406 + 20 +10574.580242 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +6F9 + 8 +HOLZ + 10 +7195.179952 + 20 +10557.470405 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +6FA + 8 +HOLZ + 0 +POLYLINE + 5 +6FB + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +6FC + 8 +HOLZ + 10 +7229.417433 + 20 +10628.476355 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +6FD + 8 +HOLZ + 10 +7229.417433 + 20 +10628.476355 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6FE + 8 +HOLZ + 10 +7230.111226 + 20 +10620.477824 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +6FF + 8 +HOLZ + 10 +7229.832051 + 20 +10613.090839 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +700 + 8 +HOLZ + 10 +7228.890856 + 20 +10606.205119 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +701 + 8 +HOLZ + 10 +7227.598589 + 20 +10599.710386 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +702 + 8 +HOLZ + 10 +7226.266198 + 20 +10593.49636 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +703 + 8 +HOLZ + 10 +7225.204632 + 20 +10587.452761 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +704 + 8 +HOLZ + 10 +7224.724837 + 20 +10581.469311 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +705 + 8 +HOLZ + 10 +7225.137762 + 20 +10575.43573 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +706 + 8 +HOLZ + 10 +7232.841237 + 20 +10606.233519 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +707 + 8 +HOLZ + 10 +7222.569937 + 20 +10591.690148 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +708 + 8 +HOLZ + 10 +7225.137762 + 20 +10575.43573 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +709 + 8 +HOLZ + 0 +POLYLINE + 5 +70A + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +70B + 8 +HOLZ + 10 +7050.786911 + 20 +10515.672911 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +70C + 8 +HOLZ + 10 +7050.786911 + 20 +10515.672911 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +70D + 8 +HOLZ + 10 +7054.942906 + 20 +10509.54576 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +70E + 8 +HOLZ + 10 +7057.875167 + 20 +10503.38854 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +70F + 8 +HOLZ + 10 +7059.724124 + 20 +10497.251375 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +710 + 8 +HOLZ + 10 +7060.630208 + 20 +10491.184391 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +711 + 8 +HOLZ + 10 +7060.733848 + 20 +10485.237714 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +712 + 8 +HOLZ + 10 +7060.175474 + 20 +10479.461468 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +713 + 8 +HOLZ + 10 +7059.095517 + 20 +10473.905779 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +714 + 8 +HOLZ + 10 +7057.634407 + 20 +10468.620773 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +715 + 8 +HOLZ + 10 +7063.626036 + 20 +10499.418493 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +716 + 8 +HOLZ + 10 +7061.914078 + 20 +10482.308656 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +717 + 8 +HOLZ + 10 +7057.634407 + 20 +10468.620773 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +718 + 8 +HOLZ + 0 +POLYLINE + 5 +719 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +71A + 8 +HOLZ + 10 +7017.405409 + 20 +10495.996539 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +71B + 8 +HOLZ + 10 +7017.405409 + 20 +10495.996539 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +71C + 8 +HOLZ + 10 +7018.099202 + 20 +10487.998008 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +71D + 8 +HOLZ + 10 +7017.820027 + 20 +10480.611023 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +71E + 8 +HOLZ + 10 +7016.878832 + 20 +10473.725303 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +71F + 8 +HOLZ + 10 +7015.586565 + 20 +10467.23057 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +720 + 8 +HOLZ + 10 +7014.254174 + 20 +10461.016544 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +721 + 8 +HOLZ + 10 +7013.192608 + 20 +10454.972945 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +722 + 8 +HOLZ + 10 +7012.712813 + 20 +10448.989495 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +723 + 8 +HOLZ + 10 +7013.125738 + 20 +10442.955914 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +724 + 8 +HOLZ + 10 +7020.829213 + 20 +10473.753703 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +725 + 8 +HOLZ + 10 +7010.557913 + 20 +10459.210332 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +726 + 8 +HOLZ + 10 +7013.125738 + 20 +10442.955914 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +727 + 8 +HOLZ + 0 +POLYLINE + 5 +728 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +145F + 8 +HOLZ + 10 +7110.160788 + 20 +10556.812413 + 30 +0.0 + 0 +VERTEX + 5 +1460 + 8 +HOLZ + 10 +7136.894133 + 20 +10519.113674 + 30 +0.0 + 0 +SEQEND + 5 +1461 + 8 +HOLZ + 0 +POLYLINE + 5 +72C + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +72D + 8 +HOLZ + 10 +7116.694048 + 20 +10543.904165 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +72E + 8 +HOLZ + 10 +7116.694048 + 20 +10543.904165 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +72F + 8 +HOLZ + 10 +7117.262434 + 20 +10538.779566 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +730 + 8 +HOLZ + 10 +7117.710458 + 20 +10534.667522 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +731 + 8 +HOLZ + 10 +7118.078242 + 20 +10531.136944 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +732 + 8 +HOLZ + 10 +7118.405908 + 20 +10527.756744 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +733 + 8 +HOLZ + 10 +7118.733579 + 20 +10524.095834 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +734 + 8 +HOLZ + 10 +7119.101378 + 20 +10519.723125 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +735 + 8 +HOLZ + 10 +7119.549428 + 20 +10514.207529 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +736 + 8 +HOLZ + 10 +7120.117851 + 20 +10507.117957 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +737 + 8 +HOLZ + 10 +7118.405894 + 20 +10528.505305 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +738 + 8 +HOLZ + 10 +7120.117851 + 20 +10507.117957 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +739 + 8 +HOLZ + 0 +POLYLINE + 5 +73A + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +73B + 8 +HOLZ + 10 +7086.736238 + 20 +10536.2047 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +73C + 8 +HOLZ + 10 +7086.736238 + 20 +10536.2047 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +73D + 8 +HOLZ + 10 +7088.322739 + 20 +10530.149421 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +73E + 8 +HOLZ + 10 +7089.317438 + 20 +10524.174342 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +73F + 8 +HOLZ + 10 +7089.850731 + 20 +10518.279464 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +740 + 8 +HOLZ + 10 +7090.053017 + 20 +10512.464786 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +741 + 8 +HOLZ + 10 +7090.054693 + 20 +10506.730306 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +742 + 8 +HOLZ + 10 +7089.986157 + 20 +10501.076024 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +743 + 8 +HOLZ + 10 +7089.977808 + 20 +10495.50194 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +744 + 8 +HOLZ + 10 +7090.160042 + 20 +10490.008051 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +745 + 8 +HOLZ + 10 +7091.871888 + 20 +10519.950352 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +746 + 8 +HOLZ + 10 +7089.304063 + 20 +10504.551492 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +747 + 8 +HOLZ + 10 +7090.160042 + 20 +10490.008051 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +748 + 8 +HOLZ + 0 +POLYLINE + 5 +749 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +74A + 8 +HOLZ + 10 +7262.798935 + 20 +10648.152727 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +74B + 8 +HOLZ + 10 +7262.798935 + 20 +10648.152727 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +74C + 8 +HOLZ + 10 +7266.95493 + 20 +10642.025576 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +74D + 8 +HOLZ + 10 +7269.887191 + 20 +10635.868356 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +74E + 8 +HOLZ + 10 +7271.736148 + 20 +10629.731191 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +74F + 8 +HOLZ + 10 +7272.642232 + 20 +10623.664207 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +750 + 8 +HOLZ + 10 +7272.745872 + 20 +10617.71753 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +751 + 8 +HOLZ + 10 +7272.187498 + 20 +10611.941284 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +752 + 8 +HOLZ + 10 +7271.107541 + 20 +10606.385595 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +753 + 8 +HOLZ + 10 +7269.646431 + 20 +10601.100589 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +754 + 8 +HOLZ + 10 +7275.63806 + 20 +10631.898309 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +755 + 8 +HOLZ + 10 +7273.926102 + 20 +10614.788472 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +756 + 8 +HOLZ + 10 +7269.646431 + 20 +10601.100589 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +757 + 8 +HOLZ + 0 +POLYLINE + 5 +758 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +759 + 8 +HOLZ + 10 +7298.748262 + 20 +10668.684516 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +75A + 8 +HOLZ + 10 +7298.748262 + 20 +10668.684516 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +75B + 8 +HOLZ + 10 +7300.334763 + 20 +10662.629237 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +75C + 8 +HOLZ + 10 +7301.329462 + 20 +10656.654158 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +75D + 8 +HOLZ + 10 +7301.862755 + 20 +10650.75928 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +75E + 8 +HOLZ + 10 +7302.065041 + 20 +10644.944602 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +75F + 8 +HOLZ + 10 +7302.066717 + 20 +10639.210122 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +760 + 8 +HOLZ + 10 +7301.998181 + 20 +10633.55584 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +761 + 8 +HOLZ + 10 +7301.989832 + 20 +10627.981756 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +762 + 8 +HOLZ + 10 +7302.172066 + 20 +10622.487867 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +763 + 8 +HOLZ + 10 +7303.883912 + 20 +10652.430168 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +764 + 8 +HOLZ + 10 +7301.316087 + 20 +10637.031309 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +765 + 8 +HOLZ + 10 +7302.172066 + 20 +10622.487867 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +766 + 8 +HOLZ + 0 +POLYLINE + 5 +767 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +768 + 8 +HOLZ + 10 +7328.706072 + 20 +10676.383981 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +769 + 8 +HOLZ + 10 +7328.706072 + 20 +10676.383981 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +76A + 8 +HOLZ + 10 +7329.274458 + 20 +10671.259382 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +76B + 8 +HOLZ + 10 +7329.722482 + 20 +10667.147338 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +76C + 8 +HOLZ + 10 +7330.090266 + 20 +10663.61676 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +76D + 8 +HOLZ + 10 +7330.417932 + 20 +10660.23656 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +76E + 8 +HOLZ + 10 +7330.745603 + 20 +10656.57565 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +76F + 8 +HOLZ + 10 +7331.113402 + 20 +10652.202941 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +770 + 8 +HOLZ + 10 +7331.561452 + 20 +10646.687345 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +771 + 8 +HOLZ + 10 +7332.129875 + 20 +10639.597774 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +772 + 8 +HOLZ + 10 +7330.417918 + 20 +10660.985121 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +773 + 8 +HOLZ + 10 +7332.129875 + 20 +10639.597774 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +774 + 8 +HOLZ + 0 +POLYLINE + 5 +775 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +776 + 8 +HOLZ + 10 +7372.954607 + 20 +10717.325988 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +777 + 8 +HOLZ + 10 +7372.954607 + 20 +10717.325988 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +778 + 8 +HOLZ + 10 +7372.864328 + 20 +10709.569733 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +779 + 8 +HOLZ + 10 +7372.553373 + 20 +10702.274646 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +77A + 8 +HOLZ + 10 +7371.961561 + 20 +10695.340471 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +77B + 8 +HOLZ + 10 +7371.02871 + 20 +10688.666954 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +77C + 8 +HOLZ + 10 +7369.69464 + 20 +10682.153841 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +77D + 8 +HOLZ + 10 +7367.89917 + 20 +10675.700878 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +77E + 8 +HOLZ + 10 +7365.582119 + 20 +10669.207811 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +77F + 8 +HOLZ + 10 +7362.683307 + 20 +10662.574385 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +780 + 8 +HOLZ + 10 +7372.954607 + 20 +10695.93864 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +781 + 8 +HOLZ + 10 +7371.242649 + 20 +10680.53978 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +782 + 8 +HOLZ + 10 +7362.683307 + 20 +10662.574385 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +783 + 8 +HOLZ + 0 +POLYLINE + 5 +784 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +785 + 8 +HOLZ + 10 +7404.624262 + 20 +10737.857847 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +786 + 8 +HOLZ + 10 +7404.624262 + 20 +10737.857847 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +787 + 8 +HOLZ + 10 +7408.280379 + 20 +10727.658753 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +788 + 8 +HOLZ + 10 +7410.923415 + 20 +10719.785534 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +789 + 8 +HOLZ + 10 +7412.583459 + 20 +10713.676773 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +78A + 8 +HOLZ + 10 +7413.290602 + 20 +10708.771052 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +78B + 8 +HOLZ + 10 +7413.074935 + 20 +10704.506954 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +78C + 8 +HOLZ + 10 +7411.966548 + 20 +10700.323061 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +78D + 8 +HOLZ + 10 +7409.995532 + 20 +10695.657956 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +78E + 8 +HOLZ + 10 +7407.191976 + 20 +10689.950221 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +78F + 8 +HOLZ + 10 +7415.75143 + 20 +10707.060058 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +790 + 8 +HOLZ + 10 +7407.191976 + 20 +10689.950221 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +791 + 8 +HOLZ + 0 +POLYLINE + 5 +792 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +793 + 8 +HOLZ + 10 +7441.429457 + 20 +10760.956172 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +794 + 8 +HOLZ + 10 +7441.429457 + 20 +10760.956172 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +795 + 8 +HOLZ + 10 +7442.12325 + 20 +10752.95764 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +796 + 8 +HOLZ + 10 +7441.844075 + 20 +10745.570655 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +797 + 8 +HOLZ + 10 +7440.90288 + 20 +10738.684935 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +798 + 8 +HOLZ + 10 +7439.610613 + 20 +10732.190202 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +799 + 8 +HOLZ + 10 +7438.278223 + 20 +10725.976176 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +79A + 8 +HOLZ + 10 +7437.216656 + 20 +10719.932578 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +79B + 8 +HOLZ + 10 +7436.736861 + 20 +10713.949127 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +79C + 8 +HOLZ + 10 +7437.149786 + 20 +10707.915546 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +79D + 8 +HOLZ + 10 +7444.853261 + 20 +10738.713335 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +79E + 8 +HOLZ + 10 +7434.581961 + 20 +10724.169964 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +79F + 8 +HOLZ + 10 +7437.149786 + 20 +10707.915546 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +7A0 + 8 +HOLZ + 0 +POLYLINE + 5 +7A1 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +7A2 + 8 +HOLZ + 10 +7474.810959 + 20 +10780.632543 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +7A3 + 8 +HOLZ + 10 +7474.810959 + 20 +10780.632543 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7A4 + 8 +HOLZ + 10 +7478.966954 + 20 +10774.505392 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7A5 + 8 +HOLZ + 10 +7481.899215 + 20 +10768.348172 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7A6 + 8 +HOLZ + 10 +7483.748172 + 20 +10762.211007 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7A7 + 8 +HOLZ + 10 +7484.654256 + 20 +10756.144023 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7A8 + 8 +HOLZ + 10 +7484.757896 + 20 +10750.197346 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7A9 + 8 +HOLZ + 10 +7484.199522 + 20 +10744.4211 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7AA + 8 +HOLZ + 10 +7483.119565 + 20 +10738.865411 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7AB + 8 +HOLZ + 10 +7481.658455 + 20 +10733.580405 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7AC + 8 +HOLZ + 10 +7487.650084 + 20 +10764.378125 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +7AD + 8 +HOLZ + 10 +7485.938126 + 20 +10747.268288 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +7AE + 8 +HOLZ + 10 +7481.658455 + 20 +10733.580405 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +7AF + 8 +HOLZ + 0 +POLYLINE + 5 +7B0 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1462 + 8 +HOLZ + 10 +7322.172813 + 20 +10689.292229 + 30 +0.0 + 0 +VERTEX + 5 +1463 + 8 +HOLZ + 10 +7348.906157 + 20 +10651.59349 + 30 +0.0 + 0 +SEQEND + 5 +1464 + 8 +HOLZ + 0 +POLYLINE + 5 +7B4 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +7B5 + 8 +HOLZ + 10 +7752.73012 + 20 +10941.343613 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +7B6 + 8 +HOLZ + 10 +7752.73012 + 20 +10941.343613 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7B7 + 8 +HOLZ + 10 +7753.298506 + 20 +10936.219014 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7B8 + 8 +HOLZ + 10 +7753.74653 + 20 +10932.10697 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7B9 + 8 +HOLZ + 10 +7754.114314 + 20 +10928.576392 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7BA + 8 +HOLZ + 10 +7754.44198 + 20 +10925.196192 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7BB + 8 +HOLZ + 10 +7754.769651 + 20 +10921.535282 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7BC + 8 +HOLZ + 10 +7755.137451 + 20 +10917.162573 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7BD + 8 +HOLZ + 10 +7755.5855 + 20 +10911.646977 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7BE + 8 +HOLZ + 10 +7756.153924 + 20 +10904.557406 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7BF + 8 +HOLZ + 10 +7754.441966 + 20 +10925.944753 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +7C0 + 8 +HOLZ + 10 +7756.153924 + 20 +10904.557406 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +7C1 + 8 +HOLZ + 0 +POLYLINE + 5 +7C2 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +7C3 + 8 +HOLZ + 10 +7722.77231 + 20 +10933.644149 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +7C4 + 8 +HOLZ + 10 +7722.77231 + 20 +10933.644149 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7C5 + 8 +HOLZ + 10 +7724.358811 + 20 +10927.588869 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7C6 + 8 +HOLZ + 10 +7725.35351 + 20 +10921.61379 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7C7 + 8 +HOLZ + 10 +7725.886803 + 20 +10915.718912 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7C8 + 8 +HOLZ + 10 +7726.089089 + 20 +10909.904234 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7C9 + 8 +HOLZ + 10 +7726.090765 + 20 +10904.169754 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7CA + 8 +HOLZ + 10 +7726.022229 + 20 +10898.515472 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7CB + 8 +HOLZ + 10 +7726.01388 + 20 +10892.941388 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7CC + 8 +HOLZ + 10 +7726.196114 + 20 +10887.4475 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7CD + 8 +HOLZ + 10 +7727.90796 + 20 +10917.3898 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +7CE + 8 +HOLZ + 10 +7725.340135 + 20 +10901.990941 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +7CF + 8 +HOLZ + 10 +7726.196114 + 20 +10887.4475 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +7D0 + 8 +HOLZ + 0 +POLYLINE + 5 +7D1 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +7D2 + 8 +HOLZ + 10 +7686.822983 + 20 +10913.112359 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +7D3 + 8 +HOLZ + 10 +7686.822983 + 20 +10913.112359 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7D4 + 8 +HOLZ + 10 +7690.978978 + 20 +10906.985209 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7D5 + 8 +HOLZ + 10 +7693.911239 + 20 +10900.827988 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7D6 + 8 +HOLZ + 10 +7695.760196 + 20 +10894.690823 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7D7 + 8 +HOLZ + 10 +7696.66628 + 20 +10888.62384 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7D8 + 8 +HOLZ + 10 +7696.76992 + 20 +10882.677162 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7D9 + 8 +HOLZ + 10 +7696.211546 + 20 +10876.900916 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7DA + 8 +HOLZ + 10 +7695.131589 + 20 +10871.345227 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7DB + 8 +HOLZ + 10 +7693.670479 + 20 +10866.060221 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7DC + 8 +HOLZ + 10 +7699.662108 + 20 +10896.857941 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +7DD + 8 +HOLZ + 10 +7697.95015 + 20 +10879.748104 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +7DE + 8 +HOLZ + 10 +7693.670479 + 20 +10866.060221 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +7DF + 8 +HOLZ + 0 +POLYLINE + 5 +7E0 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +7E1 + 8 +HOLZ + 10 +7653.441481 + 20 +10893.435988 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +7E2 + 8 +HOLZ + 10 +7653.441481 + 20 +10893.435988 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7E3 + 8 +HOLZ + 10 +7654.135274 + 20 +10885.437457 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7E4 + 8 +HOLZ + 10 +7653.856099 + 20 +10878.050471 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7E5 + 8 +HOLZ + 10 +7652.914904 + 20 +10871.164751 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7E6 + 8 +HOLZ + 10 +7651.622637 + 20 +10864.670018 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7E7 + 8 +HOLZ + 10 +7650.290247 + 20 +10858.455992 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7E8 + 8 +HOLZ + 10 +7649.22868 + 20 +10852.412394 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7E9 + 8 +HOLZ + 10 +7648.748885 + 20 +10846.428943 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7EA + 8 +HOLZ + 10 +7649.16181 + 20 +10840.395362 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7EB + 8 +HOLZ + 10 +7656.865285 + 20 +10871.193151 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +7EC + 8 +HOLZ + 10 +7646.593985 + 20 +10856.64978 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +7ED + 8 +HOLZ + 10 +7649.16181 + 20 +10840.395362 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +7EE + 8 +HOLZ + 0 +POLYLINE + 5 +7EF + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +7F0 + 8 +HOLZ + 10 +7616.636286 + 20 +10870.337663 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +7F1 + 8 +HOLZ + 10 +7616.636286 + 20 +10870.337663 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7F2 + 8 +HOLZ + 10 +7620.292403 + 20 +10860.138569 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7F3 + 8 +HOLZ + 10 +7622.935439 + 20 +10852.26535 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7F4 + 8 +HOLZ + 10 +7624.595483 + 20 +10846.156589 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7F5 + 8 +HOLZ + 10 +7625.302626 + 20 +10841.250868 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7F6 + 8 +HOLZ + 10 +7625.086959 + 20 +10836.98677 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7F7 + 8 +HOLZ + 10 +7623.978572 + 20 +10832.802877 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7F8 + 8 +HOLZ + 10 +7622.007556 + 20 +10828.137772 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7F9 + 8 +HOLZ + 10 +7619.204 + 20 +10822.430037 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +7FA + 8 +HOLZ + 10 +7627.763454 + 20 +10839.539874 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +7FB + 8 +HOLZ + 10 +7619.204 + 20 +10822.430037 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +7FC + 8 +HOLZ + 0 +POLYLINE + 5 +7FD + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +7FE + 8 +HOLZ + 10 +7584.966631 + 20 +10849.805804 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +7FF + 8 +HOLZ + 10 +7584.966631 + 20 +10849.805804 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +800 + 8 +HOLZ + 10 +7584.876352 + 20 +10842.04955 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +801 + 8 +HOLZ + 10 +7584.565397 + 20 +10834.754462 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +802 + 8 +HOLZ + 10 +7583.973585 + 20 +10827.820287 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +803 + 8 +HOLZ + 10 +7583.040734 + 20 +10821.14677 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +804 + 8 +HOLZ + 10 +7581.706664 + 20 +10814.633657 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +805 + 8 +HOLZ + 10 +7579.911194 + 20 +10808.180694 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +806 + 8 +HOLZ + 10 +7577.594143 + 20 +10801.687627 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +807 + 8 +HOLZ + 10 +7574.695331 + 20 +10795.054202 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +808 + 8 +HOLZ + 10 +7584.966631 + 20 +10828.418456 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +809 + 8 +HOLZ + 10 +7583.254673 + 20 +10813.019596 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +80A + 8 +HOLZ + 10 +7574.695331 + 20 +10795.054202 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +80B + 8 +HOLZ + 0 +POLYLINE + 5 +80C + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1465 + 8 +HOLZ + 10 +6474.124716 + 20 +10159.372965 + 30 +0.0 + 0 +VERTEX + 5 +1466 + 8 +HOLZ + 10 +6500.858061 + 20 +10121.674226 + 30 +0.0 + 0 +SEQEND + 5 +1467 + 8 +HOLZ + 0 +POLYLINE + 5 +810 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +811 + 8 +HOLZ + 10 +6504.364022 + 20 +10175.429817 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +812 + 8 +HOLZ + 10 +6504.364022 + 20 +10175.429817 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +813 + 8 +HOLZ + 10 +6503.880872 + 20 +10169.394585 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +814 + 8 +HOLZ + 10 +6503.066721 + 20 +10163.559854 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +815 + 8 +HOLZ + 10 +6501.911536 + 20 +10158.04593 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +816 + 8 +HOLZ + 10 +6500.405287 + 20 +10152.973117 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +817 + 8 +HOLZ + 10 +6498.537943 + 20 +10148.461722 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +818 + 8 +HOLZ + 10 +6496.299473 + 20 +10144.632051 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +819 + 8 +HOLZ + 10 +6493.679845 + 20 +10141.604407 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +81A + 8 +HOLZ + 10 +6490.66903 + 20 +10139.499098 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +81B + 8 +HOLZ + 10 +6503.508043 + 20 +10159.175469 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +81C + 8 +HOLZ + 10 +6499.228372 + 20 +10143.776539 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +81D + 8 +HOLZ + 10 +6490.66903 + 20 +10139.499098 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +81E + 8 +HOLZ + 0 +POLYLINE + 5 +81F + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +820 + 8 +HOLZ + 10 +6662.71219 + 20 +10271.245068 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +821 + 8 +HOLZ + 10 +6662.71219 + 20 +10271.245068 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +822 + 8 +HOLZ + 10 +6664.298691 + 20 +10265.189789 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +823 + 8 +HOLZ + 10 +6665.29339 + 20 +10259.21471 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +824 + 8 +HOLZ + 10 +6665.826683 + 20 +10253.319832 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +825 + 8 +HOLZ + 10 +6666.028969 + 20 +10247.505154 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +826 + 8 +HOLZ + 10 +6666.030645 + 20 +10241.770674 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +827 + 8 +HOLZ + 10 +6665.962109 + 20 +10236.116392 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +828 + 8 +HOLZ + 10 +6665.953759 + 20 +10230.542308 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +829 + 8 +HOLZ + 10 +6666.135994 + 20 +10225.048419 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +82A + 8 +HOLZ + 10 +6667.84784 + 20 +10254.99072 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +82B + 8 +HOLZ + 10 +6665.280015 + 20 +10239.59186 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +82C + 8 +HOLZ + 10 +6666.135994 + 20 +10225.048419 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +82D + 8 +HOLZ + 0 +POLYLINE + 5 +82E + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +82F + 8 +HOLZ + 10 +6692.67 + 20 +10278.944533 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +830 + 8 +HOLZ + 10 +6692.67 + 20 +10278.944533 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +831 + 8 +HOLZ + 10 +6693.238386 + 20 +10273.819934 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +832 + 8 +HOLZ + 10 +6693.68641 + 20 +10269.70789 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +833 + 8 +HOLZ + 10 +6694.054194 + 20 +10266.177312 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +834 + 8 +HOLZ + 10 +6694.38186 + 20 +10262.797112 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +835 + 8 +HOLZ + 10 +6694.709531 + 20 +10259.136202 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +836 + 8 +HOLZ + 10 +6695.07733 + 20 +10254.763493 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +837 + 8 +HOLZ + 10 +6695.52538 + 20 +10249.247897 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +838 + 8 +HOLZ + 10 +6696.093803 + 20 +10242.158325 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +839 + 8 +HOLZ + 10 +6694.381846 + 20 +10263.545673 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +83A + 8 +HOLZ + 10 +6696.093803 + 20 +10242.158325 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +83B + 8 +HOLZ + 0 +POLYLINE + 5 +83C + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1468 + 8 +HOLZ + 10 +6686.13674 + 20 +10291.852781 + 30 +0.0 + 0 +VERTEX + 5 +1469 + 8 +HOLZ + 10 +6712.870085 + 20 +10254.154042 + 30 +0.0 + 0 +SEQEND + 5 +146A + 8 +HOLZ + 0 +POLYLINE + 5 +840 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +841 + 8 +HOLZ + 10 +6593.381361 + 20 +10231.036907 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +842 + 8 +HOLZ + 10 +6593.381361 + 20 +10231.036907 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +843 + 8 +HOLZ + 10 +6594.075154 + 20 +10223.038376 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +844 + 8 +HOLZ + 10 +6593.795979 + 20 +10215.651391 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +845 + 8 +HOLZ + 10 +6592.854784 + 20 +10208.765671 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +846 + 8 +HOLZ + 10 +6591.562517 + 20 +10202.270938 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +847 + 8 +HOLZ + 10 +6590.230126 + 20 +10196.056912 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +848 + 8 +HOLZ + 10 +6589.168559 + 20 +10190.013313 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +849 + 8 +HOLZ + 10 +6588.688765 + 20 +10184.029863 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +84A + 8 +HOLZ + 10 +6589.10169 + 20 +10177.996282 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +84B + 8 +HOLZ + 10 +6596.805165 + 20 +10208.794071 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +84C + 8 +HOLZ + 10 +6586.533865 + 20 +10194.2507 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +84D + 8 +HOLZ + 10 +6589.10169 + 20 +10177.996282 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +84E + 8 +HOLZ + 0 +POLYLINE + 5 +84F + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +850 + 8 +HOLZ + 10 +6626.762863 + 20 +10250.713278 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +851 + 8 +HOLZ + 10 +6626.762863 + 20 +10250.713278 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +852 + 8 +HOLZ + 10 +6630.918858 + 20 +10244.586128 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +853 + 8 +HOLZ + 10 +6633.851119 + 20 +10238.428908 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +854 + 8 +HOLZ + 10 +6635.700076 + 20 +10232.291743 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +855 + 8 +HOLZ + 10 +6636.60616 + 20 +10226.224759 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +856 + 8 +HOLZ + 10 +6636.7098 + 20 +10220.278082 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +857 + 8 +HOLZ + 10 +6636.151426 + 20 +10214.501836 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +858 + 8 +HOLZ + 10 +6635.071469 + 20 +10208.946147 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +859 + 8 +HOLZ + 10 +6633.610359 + 20 +10203.661141 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +85A + 8 +HOLZ + 10 +6639.601988 + 20 +10234.458861 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +85B + 8 +HOLZ + 10 +6637.89003 + 20 +10217.349024 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +85C + 8 +HOLZ + 10 +6633.610359 + 20 +10203.661141 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +85D + 8 +HOLZ + 0 +POLYLINE + 5 +85E + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +85F + 8 +HOLZ + 10 +6768.58819 + 20 +10340.418399 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +860 + 8 +HOLZ + 10 +6768.58819 + 20 +10340.418399 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +861 + 8 +HOLZ + 10 +6772.244307 + 20 +10330.219305 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +862 + 8 +HOLZ + 10 +6774.887342 + 20 +10322.346086 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +863 + 8 +HOLZ + 10 +6776.547387 + 20 +10316.237325 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +864 + 8 +HOLZ + 10 +6777.25453 + 20 +10311.331604 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +865 + 8 +HOLZ + 10 +6777.038863 + 20 +10307.067506 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +866 + 8 +HOLZ + 10 +6775.930476 + 20 +10302.883613 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +867 + 8 +HOLZ + 10 +6773.95946 + 20 +10298.218508 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +868 + 8 +HOLZ + 10 +6771.155904 + 20 +10292.510773 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +869 + 8 +HOLZ + 10 +6779.715358 + 20 +10309.62061 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +86A + 8 +HOLZ + 10 +6771.155904 + 20 +10292.510773 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +86B + 8 +HOLZ + 0 +POLYLINE + 5 +86C + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +86D + 8 +HOLZ + 10 +6736.918534 + 20 +10319.886539 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +86E + 8 +HOLZ + 10 +6736.918534 + 20 +10319.886539 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +86F + 8 +HOLZ + 10 +6736.828256 + 20 +10312.130285 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +870 + 8 +HOLZ + 10 +6736.517301 + 20 +10304.835198 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +871 + 8 +HOLZ + 10 +6735.925489 + 20 +10297.901023 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +872 + 8 +HOLZ + 10 +6734.992638 + 20 +10291.227506 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +873 + 8 +HOLZ + 10 +6733.658568 + 20 +10284.714393 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +874 + 8 +HOLZ + 10 +6731.863098 + 20 +10278.26143 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +875 + 8 +HOLZ + 10 +6729.546047 + 20 +10271.768363 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +876 + 8 +HOLZ + 10 +6726.647235 + 20 +10265.134937 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +877 + 8 +HOLZ + 10 +6736.918534 + 20 +10298.499192 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +878 + 8 +HOLZ + 10 +6735.206577 + 20 +10283.100332 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +879 + 8 +HOLZ + 10 +6726.647235 + 20 +10265.134937 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +87A + 8 +HOLZ + 0 +POLYLINE + 5 +87B + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +87C + 8 +HOLZ + 10 +6543.737041 + 20 +10201.094606 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +87D + 8 +HOLZ + 10 +6543.737041 + 20 +10201.094606 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +87E + 8 +HOLZ + 10 +6543.447851 + 20 +10192.003326 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +87F + 8 +HOLZ + 10 +6543.188746 + 20 +10184.826877 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +880 + 8 +HOLZ + 10 +6542.909574 + 20 +10178.913616 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +881 + 8 +HOLZ + 10 +6542.560182 + 20 +10173.611895 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +882 + 8 +HOLZ + 10 +6542.090418 + 20 +10168.270071 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +883 + 8 +HOLZ + 10 +6541.45013 + 20 +10162.236497 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +884 + 8 +HOLZ + 10 +6540.589165 + 20 +10154.859527 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +885 + 8 +HOLZ + 10 +6539.45737 + 20 +10145.487516 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +886 + 8 +HOLZ + 10 +6542.881174 + 20 +10173.71884 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +887 + 8 +HOLZ + 10 +6539.45737 + 20 +10145.487516 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +888 + 8 +HOLZ + 0 +POLYLINE + 5 +889 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +88A + 8 +HOLZ + 10 +6838.774887 + 20 +10383.193094 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +88B + 8 +HOLZ + 10 +6838.774887 + 20 +10383.193094 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +88C + 8 +HOLZ + 10 +6842.930882 + 20 +10377.065944 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +88D + 8 +HOLZ + 10 +6845.863143 + 20 +10370.908724 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +88E + 8 +HOLZ + 10 +6847.7121 + 20 +10364.771559 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +88F + 8 +HOLZ + 10 +6848.618184 + 20 +10358.704575 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +890 + 8 +HOLZ + 10 +6848.721824 + 20 +10352.757898 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +891 + 8 +HOLZ + 10 +6848.16345 + 20 +10346.981652 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +892 + 8 +HOLZ + 10 +6847.083493 + 20 +10341.425963 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +893 + 8 +HOLZ + 10 +6845.622383 + 20 +10336.140957 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +894 + 8 +HOLZ + 10 +6851.614012 + 20 +10366.938677 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +895 + 8 +HOLZ + 10 +6849.902054 + 20 +10349.82884 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +896 + 8 +HOLZ + 10 +6845.622383 + 20 +10336.140957 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +897 + 8 +HOLZ + 0 +POLYLINE + 5 +898 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +899 + 8 +HOLZ + 10 +6805.393385 + 20 +10363.516723 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +89A + 8 +HOLZ + 10 +6805.393385 + 20 +10363.516723 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +89B + 8 +HOLZ + 10 +6806.087178 + 20 +10355.518192 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +89C + 8 +HOLZ + 10 +6805.808003 + 20 +10348.131207 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +89D + 8 +HOLZ + 10 +6804.866808 + 20 +10341.245487 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +89E + 8 +HOLZ + 10 +6803.574541 + 20 +10334.750754 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +89F + 8 +HOLZ + 10 +6802.24215 + 20 +10328.536728 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8A0 + 8 +HOLZ + 10 +6801.180584 + 20 +10322.493129 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8A1 + 8 +HOLZ + 10 +6800.700789 + 20 +10316.509679 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8A2 + 8 +HOLZ + 10 +6801.113714 + 20 +10310.476098 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8A3 + 8 +HOLZ + 10 +6808.817189 + 20 +10341.273887 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +8A4 + 8 +HOLZ + 10 +6798.545889 + 20 +10326.730516 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +8A5 + 8 +HOLZ + 10 +6801.113714 + 20 +10310.476098 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +8A6 + 8 +HOLZ + 0 +POLYLINE + 5 +8A7 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +146B + 8 +HOLZ + 10 +6898.148764 + 20 +10424.332597 + 30 +0.0 + 0 +VERTEX + 5 +146C + 8 +HOLZ + 10 +6924.882109 + 20 +10386.633858 + 30 +0.0 + 0 +SEQEND + 5 +146D + 8 +HOLZ + 0 +POLYLINE + 5 +8AB + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +8AC + 8 +HOLZ + 10 +6904.682024 + 20 +10411.424349 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +8AD + 8 +HOLZ + 10 +6904.682024 + 20 +10411.424349 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8AE + 8 +HOLZ + 10 +6905.25041 + 20 +10406.29975 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8AF + 8 +HOLZ + 10 +6905.698434 + 20 +10402.187706 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8B0 + 8 +HOLZ + 10 +6906.066218 + 20 +10398.657128 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8B1 + 8 +HOLZ + 10 +6906.393884 + 20 +10395.276928 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8B2 + 8 +HOLZ + 10 +6906.721555 + 20 +10391.616018 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8B3 + 8 +HOLZ + 10 +6907.089354 + 20 +10387.243309 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8B4 + 8 +HOLZ + 10 +6907.537404 + 20 +10381.727713 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8B5 + 8 +HOLZ + 10 +6908.105827 + 20 +10374.638141 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8B6 + 8 +HOLZ + 10 +6906.39387 + 20 +10396.025489 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +8B7 + 8 +HOLZ + 10 +6908.105827 + 20 +10374.638141 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +8B8 + 8 +HOLZ + 0 +POLYLINE + 5 +8B9 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +8BA + 8 +HOLZ + 10 +6874.724214 + 20 +10403.724884 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +8BB + 8 +HOLZ + 10 +6874.724214 + 20 +10403.724884 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8BC + 8 +HOLZ + 10 +6876.310715 + 20 +10397.669605 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8BD + 8 +HOLZ + 10 +6877.305414 + 20 +10391.694526 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8BE + 8 +HOLZ + 10 +6877.838707 + 20 +10385.799648 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8BF + 8 +HOLZ + 10 +6878.040993 + 20 +10379.98497 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8C0 + 8 +HOLZ + 10 +6878.042669 + 20 +10374.25049 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8C1 + 8 +HOLZ + 10 +6877.974133 + 20 +10368.596208 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8C2 + 8 +HOLZ + 10 +6877.965784 + 20 +10363.022124 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8C3 + 8 +HOLZ + 10 +6878.148018 + 20 +10357.528235 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8C4 + 8 +HOLZ + 10 +6879.859864 + 20 +10387.470536 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +8C5 + 8 +HOLZ + 10 +6877.292039 + 20 +10372.071676 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +8C6 + 8 +HOLZ + 10 +6878.148018 + 20 +10357.528235 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +8C7 + 8 +HOLZ + 0 +POLYLINE + 5 +8C8 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +8C9 + 8 +HOLZ + 10 +6100.882462 + 20 +9922.447091 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +8CA + 8 +HOLZ + 10 +6100.882462 + 20 +9922.447091 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8CB + 8 +HOLZ + 10 +6100.792184 + 20 +9914.690837 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8CC + 8 +HOLZ + 10 +6100.481229 + 20 +9907.39575 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8CD + 8 +HOLZ + 10 +6099.889417 + 20 +9900.461575 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8CE + 8 +HOLZ + 10 +6098.956566 + 20 +9893.788058 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8CF + 8 +HOLZ + 10 +6097.622496 + 20 +9887.274945 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8D0 + 8 +HOLZ + 10 +6095.827026 + 20 +9880.821982 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8D1 + 8 +HOLZ + 10 +6093.509975 + 20 +9874.328915 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8D2 + 8 +HOLZ + 10 +6090.611162 + 20 +9867.695489 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8D3 + 8 +HOLZ + 10 +6100.882462 + 20 +9901.059743 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +8D4 + 8 +HOLZ + 10 +6099.170505 + 20 +9885.660884 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +8D5 + 8 +HOLZ + 10 +6090.611162 + 20 +9867.695489 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +8D6 + 8 +HOLZ + 0 +POLYLINE + 5 +8D7 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +8D8 + 8 +HOLZ + 10 +6132.552118 + 20 +9942.978951 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +8D9 + 8 +HOLZ + 10 +6132.552118 + 20 +9942.978951 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8DA + 8 +HOLZ + 10 +6136.208235 + 20 +9932.779856 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8DB + 8 +HOLZ + 10 +6138.85127 + 20 +9924.906638 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8DC + 8 +HOLZ + 10 +6140.511314 + 20 +9918.797876 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8DD + 8 +HOLZ + 10 +6141.218458 + 20 +9913.892156 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8DE + 8 +HOLZ + 10 +6141.002791 + 20 +9909.628057 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8DF + 8 +HOLZ + 10 +6139.894404 + 20 +9905.444165 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8E0 + 8 +HOLZ + 10 +6137.923388 + 20 +9900.77906 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8E1 + 8 +HOLZ + 10 +6135.119832 + 20 +9895.071325 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8E2 + 8 +HOLZ + 10 +6143.679286 + 20 +9912.181161 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +8E3 + 8 +HOLZ + 10 +6135.119832 + 20 +9895.071325 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +8E4 + 8 +HOLZ + 0 +POLYLINE + 5 +8E5 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +8E6 + 8 +HOLZ + 10 +6169.357313 + 20 +9966.077275 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +8E7 + 8 +HOLZ + 10 +6169.357313 + 20 +9966.077275 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8E8 + 8 +HOLZ + 10 +6170.051106 + 20 +9958.078744 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8E9 + 8 +HOLZ + 10 +6169.771931 + 20 +9950.691758 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8EA + 8 +HOLZ + 10 +6168.830736 + 20 +9943.806039 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8EB + 8 +HOLZ + 10 +6167.538469 + 20 +9937.311306 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8EC + 8 +HOLZ + 10 +6166.206078 + 20 +9931.09728 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8ED + 8 +HOLZ + 10 +6165.144511 + 20 +9925.053681 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8EE + 8 +HOLZ + 10 +6164.664716 + 20 +9919.070231 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8EF + 8 +HOLZ + 10 +6165.077642 + 20 +9913.03665 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8F0 + 8 +HOLZ + 10 +6172.781116 + 20 +9943.834439 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +8F1 + 8 +HOLZ + 10 +6162.509817 + 20 +9929.291068 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +8F2 + 8 +HOLZ + 10 +6165.077642 + 20 +9913.03665 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +8F3 + 8 +HOLZ + 0 +POLYLINE + 5 +8F4 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +146E + 8 +HOLZ + 10 +6262.112692 + 20 +10026.893149 + 30 +0.0 + 0 +VERTEX + 5 +146F + 8 +HOLZ + 10 +6288.846037 + 20 +9989.19441 + 30 +0.0 + 0 +SEQEND + 5 +1470 + 8 +HOLZ + 0 +POLYLINE + 5 +8F8 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +8F9 + 8 +HOLZ + 10 +6268.645952 + 20 +10013.984901 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +8FA + 8 +HOLZ + 10 +6268.645952 + 20 +10013.984901 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8FB + 8 +HOLZ + 10 +6269.214338 + 20 +10008.860302 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8FC + 8 +HOLZ + 10 +6269.662362 + 20 +10004.748258 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8FD + 8 +HOLZ + 10 +6270.030146 + 20 +10001.21768 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8FE + 8 +HOLZ + 10 +6270.357812 + 20 +9997.83748 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +8FF + 8 +HOLZ + 10 +6270.685483 + 20 +9994.17657 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +900 + 8 +HOLZ + 10 +6271.053282 + 20 +9989.803861 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +901 + 8 +HOLZ + 10 +6271.501332 + 20 +9984.288265 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +902 + 8 +HOLZ + 10 +6272.069755 + 20 +9977.198693 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +903 + 8 +HOLZ + 10 +6270.357798 + 20 +9998.586041 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +904 + 8 +HOLZ + 10 +6272.069755 + 20 +9977.198693 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +905 + 8 +HOLZ + 0 +POLYLINE + 5 +906 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +907 + 8 +HOLZ + 10 +6234.370229 + 20 +10008.81155 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +908 + 8 +HOLZ + 10 +6234.370229 + 20 +10008.81155 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +909 + 8 +HOLZ + 10 +6237.381979 + 20 +10001.922455 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +90A + 8 +HOLZ + 10 +6239.447722 + 20 +9995.320782 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +90B + 8 +HOLZ + 10 +6240.748457 + 20 +9988.976927 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +90C + 8 +HOLZ + 10 +6241.465181 + 20 +9982.861286 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +90D + 8 +HOLZ + 10 +6241.778894 + 20 +9976.944255 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +90E + 8 +HOLZ + 10 +6241.870594 + 20 +9971.196231 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +90F + 8 +HOLZ + 10 +6241.921278 + 20 +9965.587609 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +910 + 8 +HOLZ + 10 +6242.111946 + 20 +9960.088787 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +911 + 8 +HOLZ + 10 +6243.823792 + 20 +9990.031088 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +912 + 8 +HOLZ + 10 +6241.255967 + 20 +9974.632228 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +913 + 8 +HOLZ + 10 +6242.111946 + 20 +9960.088787 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +914 + 8 +HOLZ + 0 +POLYLINE + 5 +915 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +916 + 8 +HOLZ + 10 +6202.738815 + 20 +9985.753646 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +917 + 8 +HOLZ + 10 +6202.738815 + 20 +9985.753646 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +918 + 8 +HOLZ + 10 +6206.89481 + 20 +9979.626496 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +919 + 8 +HOLZ + 10 +6209.827071 + 20 +9973.469276 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +91A + 8 +HOLZ + 10 +6211.676028 + 20 +9967.332111 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +91B + 8 +HOLZ + 10 +6212.582111 + 20 +9961.265127 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +91C + 8 +HOLZ + 10 +6212.685751 + 20 +9955.318449 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +91D + 8 +HOLZ + 10 +6212.127378 + 20 +9949.542204 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +91E + 8 +HOLZ + 10 +6211.047421 + 20 +9943.986515 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +91F + 8 +HOLZ + 10 +6209.586311 + 20 +9938.701509 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +920 + 8 +HOLZ + 10 +6215.57794 + 20 +9969.499229 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +921 + 8 +HOLZ + 10 +6213.865982 + 20 +9952.389392 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +922 + 8 +HOLZ + 10 +6209.586311 + 20 +9938.701509 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +923 + 8 +HOLZ + 0 +POLYLINE + 5 +924 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +925 + 8 +HOLZ + 10 +6450.700166 + 20 +10138.765252 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +926 + 8 +HOLZ + 10 +6450.700166 + 20 +10138.765252 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +927 + 8 +HOLZ + 10 +6452.286667 + 20 +10132.709973 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +928 + 8 +HOLZ + 10 +6453.281366 + 20 +10126.734894 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +929 + 8 +HOLZ + 10 +6453.814659 + 20 +10120.840016 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +92A + 8 +HOLZ + 10 +6454.016945 + 20 +10115.025338 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +92B + 8 +HOLZ + 10 +6454.018621 + 20 +10109.290858 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +92C + 8 +HOLZ + 10 +6453.950085 + 20 +10103.636576 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +92D + 8 +HOLZ + 10 +6453.941735 + 20 +10098.062491 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +92E + 8 +HOLZ + 10 +6454.12397 + 20 +10092.568603 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +92F + 8 +HOLZ + 10 +6455.835816 + 20 +10122.510904 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +930 + 8 +HOLZ + 10 +6453.267991 + 20 +10107.112044 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +931 + 8 +HOLZ + 10 +6454.12397 + 20 +10092.568603 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +932 + 8 +HOLZ + 0 +POLYLINE + 5 +933 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +934 + 8 +HOLZ + 10 +6381.369337 + 20 +10098.557091 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +935 + 8 +HOLZ + 10 +6381.369337 + 20 +10098.557091 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +936 + 8 +HOLZ + 10 +6382.06313 + 20 +10090.55856 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +937 + 8 +HOLZ + 10 +6381.783955 + 20 +10083.171574 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +938 + 8 +HOLZ + 10 +6380.84276 + 20 +10076.285855 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +939 + 8 +HOLZ + 10 +6379.550493 + 20 +10069.791122 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +93A + 8 +HOLZ + 10 +6378.218102 + 20 +10063.577096 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +93B + 8 +HOLZ + 10 +6377.156535 + 20 +10057.533497 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +93C + 8 +HOLZ + 10 +6376.676741 + 20 +10051.550047 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +93D + 8 +HOLZ + 10 +6377.089666 + 20 +10045.516466 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +93E + 8 +HOLZ + 10 +6384.79314 + 20 +10076.314255 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +93F + 8 +HOLZ + 10 +6374.521841 + 20 +10061.770884 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +940 + 8 +HOLZ + 10 +6377.089666 + 20 +10045.516466 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +941 + 8 +HOLZ + 0 +POLYLINE + 5 +942 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +943 + 8 +HOLZ + 10 +6414.750839 + 20 +10118.233462 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +944 + 8 +HOLZ + 10 +6414.750839 + 20 +10118.233462 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +945 + 8 +HOLZ + 10 +6418.906834 + 20 +10112.106312 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +946 + 8 +HOLZ + 10 +6421.839095 + 20 +10105.949092 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +947 + 8 +HOLZ + 10 +6423.688052 + 20 +10099.811927 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +948 + 8 +HOLZ + 10 +6424.594135 + 20 +10093.744943 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +949 + 8 +HOLZ + 10 +6424.697775 + 20 +10087.798266 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +94A + 8 +HOLZ + 10 +6424.139402 + 20 +10082.02202 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +94B + 8 +HOLZ + 10 +6423.059445 + 20 +10076.466331 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +94C + 8 +HOLZ + 10 +6421.598335 + 20 +10071.181325 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +94D + 8 +HOLZ + 10 +6427.589964 + 20 +10101.979045 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +94E + 8 +HOLZ + 10 +6425.878006 + 20 +10084.869208 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +94F + 8 +HOLZ + 10 +6421.598335 + 20 +10071.181325 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +950 + 8 +HOLZ + 0 +POLYLINE + 5 +951 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +952 + 8 +HOLZ + 10 +6312.894486 + 20 +10054.926907 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +953 + 8 +HOLZ + 10 +6312.894486 + 20 +10054.926907 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +954 + 8 +HOLZ + 10 +6312.804208 + 20 +10047.170653 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +955 + 8 +HOLZ + 10 +6312.493253 + 20 +10039.875566 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +956 + 8 +HOLZ + 10 +6311.901441 + 20 +10032.941391 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +957 + 8 +HOLZ + 10 +6310.96859 + 20 +10026.267874 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +958 + 8 +HOLZ + 10 +6309.63452 + 20 +10019.754761 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +959 + 8 +HOLZ + 10 +6307.83905 + 20 +10013.301798 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +95A + 8 +HOLZ + 10 +6305.521999 + 20 +10006.808731 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +95B + 8 +HOLZ + 10 +6302.623186 + 20 +10000.175305 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +95C + 8 +HOLZ + 10 +6312.894486 + 20 +10033.539559 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +95D + 8 +HOLZ + 10 +6311.182529 + 20 +10018.1407 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +95E + 8 +HOLZ + 10 +6302.623186 + 20 +10000.175305 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +95F + 8 +HOLZ + 0 +POLYLINE + 5 +960 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +961 + 8 +HOLZ + 10 +6344.564142 + 20 +10075.458767 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +962 + 8 +HOLZ + 10 +6344.564142 + 20 +10075.458767 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +963 + 8 +HOLZ + 10 +6348.220259 + 20 +10065.259673 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +964 + 8 +HOLZ + 10 +6350.863294 + 20 +10057.386454 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +965 + 8 +HOLZ + 10 +6352.523339 + 20 +10051.277692 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +966 + 8 +HOLZ + 10 +6353.230482 + 20 +10046.371972 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +967 + 8 +HOLZ + 10 +6353.014815 + 20 +10042.107874 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +968 + 8 +HOLZ + 10 +6351.906428 + 20 +10037.923981 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +969 + 8 +HOLZ + 10 +6349.935412 + 20 +10033.258876 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +96A + 8 +HOLZ + 10 +6347.131856 + 20 +10027.551141 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +96B + 8 +HOLZ + 10 +6355.69131 + 20 +10044.660978 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +96C + 8 +HOLZ + 10 +6347.131856 + 20 +10027.551141 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +96D + 8 +HOLZ + 0 +POLYLINE + 5 +96E + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1471 + 8 +HOLZ + 10 +6474.124716 + 20 +10159.372965 + 30 +0.0 + 0 +VERTEX + 5 +1472 + 8 +HOLZ + 10 +6500.858061 + 20 +10121.674226 + 30 +0.0 + 0 +SEQEND + 5 +1473 + 8 +HOLZ + 0 +POLYLINE + 5 +972 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1474 + 8 +HOLZ + 10 +6050.100668 + 20 +9894.413333 + 30 +0.0 + 0 +VERTEX + 5 +1475 + 8 +HOLZ + 10 +6076.834013 + 20 +9856.714594 + 30 +0.0 + 0 +SEQEND + 5 +1476 + 8 +HOLZ + 0 +POLYLINE + 5 +976 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +977 + 8 +HOLZ + 10 +6042.825133 + 20 +9892.292137 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +978 + 8 +HOLZ + 10 +6042.825133 + 20 +9892.292137 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +979 + 8 +HOLZ + 10 +6042.535943 + 20 +9883.200856 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +97A + 8 +HOLZ + 10 +6042.276838 + 20 +9876.024408 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +97B + 8 +HOLZ + 10 +6041.997665 + 20 +9870.111146 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +97C + 8 +HOLZ + 10 +6041.648273 + 20 +9864.809426 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +97D + 8 +HOLZ + 10 +6041.17851 + 20 +9859.467602 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +97E + 8 +HOLZ + 10 +6040.538221 + 20 +9853.434027 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +97F + 8 +HOLZ + 10 +6039.677256 + 20 +9846.057058 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +980 + 8 +HOLZ + 10 +6038.545462 + 20 +9836.685047 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +981 + 8 +HOLZ + 10 +6041.969266 + 20 +9864.916371 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +982 + 8 +HOLZ + 10 +6038.545462 + 20 +9836.685047 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +983 + 8 +HOLZ + 0 +POLYLINE + 5 +984 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1477 + 8 +HOLZ + 10 +6005.4236 + 20 +9868.597785 + 30 +0.0 + 0 +VERTEX + 5 +1478 + 8 +HOLZ + 10 +6004.94045 + 20 +9862.562553 + 30 +0.0 + 0 +VERTEX + 5 +1479 + 8 +HOLZ + 10 +6004.126299 + 20 +9856.727822 + 30 +0.0 + 0 +VERTEX + 5 +147A + 8 +HOLZ + 10 +6002.971114 + 20 +9851.213898 + 30 +0.0 + 0 +VERTEX + 5 +147B + 8 +HOLZ + 10 +6001.464865 + 20 +9846.141085 + 30 +0.0 + 0 +VERTEX + 5 +147C + 8 +HOLZ + 10 +5999.597521 + 20 +9841.62969 + 30 +0.0 + 0 +VERTEX + 5 +147D + 8 +HOLZ + 10 +5998.855455 + 20 +9840.360132 + 30 +0.0 + 0 +SEQEND + 5 +147E + 8 +HOLZ + 0 +POLYLINE + 5 +98D + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +147F + 8 +HOLZ + 10 +4446.342791 + 20 +9574.389715 + 30 +0.0 + 0 +VERTEX + 5 +1480 + 8 +HOLZ + 10 +4361.85938 + 20 +9710.360132 + 30 +0.0 + 0 +VERTEX + 5 +1481 + 8 +HOLZ + 10 +4471.85938 + 20 +9770.360132 + 30 +0.0 + 0 +VERTEX + 5 +1482 + 8 +HOLZ + 10 +4552.348803 + 20 +9640.629623 + 30 +0.0 + 0 +SEQEND + 5 +1483 + 8 +HOLZ + 0 +POLYLINE + 5 +993 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +994 + 8 +HOLZ + 10 +4419.014832 + 20 +9699.411535 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +995 + 8 +HOLZ + 10 +4419.014832 + 20 +9699.411535 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +996 + 8 +HOLZ + 10 +4420.597374 + 20 +9686.947504 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +997 + 8 +HOLZ + 10 +4421.639538 + 20 +9675.93016 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +998 + 8 +HOLZ + 10 +4422.141324 + 20 +9666.108742 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +999 + 8 +HOLZ + 10 +4422.10273 + 20 +9657.232493 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +99A + 8 +HOLZ + 10 +4421.523754 + 20 +9649.050653 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +99B + 8 +HOLZ + 10 +4420.404395 + 20 +9641.312461 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +99C + 8 +HOLZ + 10 +4418.744653 + 20 +9633.767158 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +99D + 8 +HOLZ + 10 +4416.544525 + 20 +9626.163986 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +99E + 8 +HOLZ + 10 +4423.955446 + 20 +9664.022305 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +99F + 8 +HOLZ + 10 +4423.132047 + 20 +9646.73917 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +9A0 + 8 +HOLZ + 10 +4416.544525 + 20 +9626.163986 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +9A1 + 8 +HOLZ + 0 +POLYLINE + 5 +9A2 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +9A3 + 8 +HOLZ + 10 +4444.5413 + 20 +9717.5177 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +9A4 + 8 +HOLZ + 10 +4444.5413 + 20 +9717.5177 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9A5 + 8 +HOLZ + 10 +4448.560337 + 20 +9702.188804 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9A6 + 8 +HOLZ + 10 +4451.450376 + 20 +9689.326515 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9A7 + 8 +HOLZ + 10 +4453.356159 + 20 +9678.619796 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9A8 + 8 +HOLZ + 10 +4454.422431 + 20 +9669.757608 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9A9 + 8 +HOLZ + 10 +4454.793934 + 20 +9662.428912 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9AA + 8 +HOLZ + 10 +4454.615412 + 20 +9656.322671 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9AB + 8 +HOLZ + 10 +4454.031607 + 20 +9651.127845 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9AC + 8 +HOLZ + 10 +4453.187264 + 20 +9646.533395 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9AD + 8 +HOLZ + 10 +4452.191743 + 20 +9642.233106 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9AE + 8 +HOLZ + 10 +4451.012879 + 20 +9637.940051 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9AF + 8 +HOLZ + 10 +4449.583126 + 20 +9633.372124 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9B0 + 8 +HOLZ + 10 +4447.834936 + 20 +9628.247221 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9B1 + 8 +HOLZ + 10 +4445.700763 + 20 +9622.283237 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9B2 + 8 +HOLZ + 10 +4443.113059 + 20 +9615.198068 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9B3 + 8 +HOLZ + 10 +4440.004277 + 20 +9606.709608 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9B4 + 8 +HOLZ + 10 +4436.30687 + 20 +9596.535754 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9B5 + 8 +HOLZ + 10 +4456.892724 + 20 +9673.075353 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +9B6 + 8 +HOLZ + 10 +4454.422417 + 20 +9643.447121 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +9B7 + 8 +HOLZ + 10 +4447.011496 + 20 +9626.163986 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +9B8 + 8 +HOLZ + 10 +4436.30687 + 20 +9596.535754 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +9B9 + 8 +HOLZ + 0 +POLYLINE + 5 +9BA + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +9BB + 8 +HOLZ + 10 +4467.597351 + 20 +9734.800836 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +9BC + 8 +HOLZ + 10 +4467.597351 + 20 +9734.800836 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9BD + 8 +HOLZ + 10 +4471.688771 + 20 +9717.675229 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9BE + 8 +HOLZ + 10 +4475.317014 + 20 +9703.115088 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9BF + 8 +HOLZ + 10 +4478.482079 + 20 +9690.792495 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9C0 + 8 +HOLZ + 10 +4481.183966 + 20 +9680.379534 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9C1 + 8 +HOLZ + 10 +4483.422674 + 20 +9671.548289 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9C2 + 8 +HOLZ + 10 +4485.198203 + 20 +9663.970842 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9C3 + 8 +HOLZ + 10 +4486.510553 + 20 +9657.319276 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9C4 + 8 +HOLZ + 10 +4487.359723 + 20 +9651.265676 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9C5 + 8 +HOLZ + 10 +4487.729631 + 20 +9645.490162 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9C6 + 8 +HOLZ + 10 +4487.539862 + 20 +9639.705003 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9C7 + 8 +HOLZ + 10 +4486.693921 + 20 +9633.630506 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9C8 + 8 +HOLZ + 10 +4485.095311 + 20 +9626.986978 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9C9 + 8 +HOLZ + 10 +4482.647536 + 20 +9619.494727 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9CA + 8 +HOLZ + 10 +4479.2541 + 20 +9610.874058 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9CB + 8 +HOLZ + 10 +4474.818506 + 20 +9600.845279 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9CC + 8 +HOLZ + 10 +4469.244259 + 20 +9589.128696 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9CD + 8 +HOLZ + 10 +4479.125376 + 20 +9685.420449 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +9CE + 8 +HOLZ + 10 +4492.300309 + 20 +9648.38516 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +9CF + 8 +HOLZ + 10 +4485.712898 + 20 +9622.871937 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +9D0 + 8 +HOLZ + 10 +4469.244259 + 20 +9589.128696 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +9D1 + 8 +HOLZ + 0 +POLYLINE + 5 +9D2 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +9D3 + 8 +HOLZ + 10 +4508.768949 + 20 +9705.995564 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +9D4 + 8 +HOLZ + 10 +4508.768949 + 20 +9705.995564 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9D5 + 8 +HOLZ + 10 +4510.327368 + 20 +9689.92285 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9D6 + 8 +HOLZ + 10 +4511.355062 + 20 +9675.094284 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9D7 + 8 +HOLZ + 10 +4511.938874 + 20 +9661.596669 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9D8 + 8 +HOLZ + 10 +4512.165648 + 20 +9649.516808 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9D9 + 8 +HOLZ + 10 +4512.12223 + 20 +9638.941502 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9DA + 8 +HOLZ + 10 +4511.895462 + 20 +9629.957553 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9DB + 8 +HOLZ + 10 +4511.572189 + 20 +9622.651765 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9DC + 8 +HOLZ + 10 +4511.239256 + 20 +9617.110938 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9DD + 8 +HOLZ + 10 +4513.709563 + 20 +9661.553286 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +9DE + 8 +HOLZ + 10 +4512.062765 + 20 +9629.456035 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +9DF + 8 +HOLZ + 10 +4511.239256 + 20 +9617.110938 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +9E0 + 8 +HOLZ + 0 +POLYLINE + 5 +9E1 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1484 + 8 +HOLZ + 10 +4955.171649 + 20 +9892.341274 + 30 +0.0 + 0 +VERTEX + 5 +1485 + 8 +HOLZ + 10 +4915.427704 + 20 +9955.944881 + 30 +0.0 + 0 +VERTEX + 5 +1486 + 8 +HOLZ + 10 +5021.433716 + 20 +10022.184789 + 30 +0.0 + 0 +VERTEX + 5 +1487 + 8 +HOLZ + 10 +5061.177661 + 20 +9958.581182 + 30 +0.0 + 0 +SEQEND + 5 +1488 + 8 +HOLZ + 0 +POLYLINE + 5 +9E7 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +9E8 + 8 +HOLZ + 10 +4942.18729 + 20 +9971.599966 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +9E9 + 8 +HOLZ + 10 +4942.18729 + 20 +9971.599966 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9EA + 8 +HOLZ + 10 +4942.867744 + 20 +9964.308362 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9EB + 8 +HOLZ + 10 +4942.150914 + 20 +9959.979998 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9EC + 8 +HOLZ + 10 +4940.337987 + 20 +9957.68412 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9ED + 8 +HOLZ + 10 +4937.730148 + 20 +9956.489972 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9EE + 8 +HOLZ + 10 +4934.628582 + 20 +9955.466796 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9EF + 8 +HOLZ + 10 +4931.334476 + 20 +9953.683837 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9F0 + 8 +HOLZ + 10 +4928.149014 + 20 +9950.210338 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9F1 + 8 +HOLZ + 10 +4925.373383 + 20 +9944.115544 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9F2 + 8 +HOLZ + 10 +4946.132598 + 20 +9947.377359 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +9F3 + 8 +HOLZ + 10 +4931.960905 + 20 +9964.690728 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +9F4 + 8 +HOLZ + 10 +4925.373383 + 20 +9944.115544 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +9F5 + 8 +HOLZ + 0 +POLYLINE + 5 +9F6 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +9F7 + 8 +HOLZ + 10 +5020.528802 + 20 +10019.48189 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +9F8 + 8 +HOLZ + 10 +5020.528802 + 20 +10019.48189 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9F9 + 8 +HOLZ + 10 +5024.42641 + 20 +10004.069081 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9FA + 8 +HOLZ + 10 +5026.279178 + 20 +9989.966034 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9FB + 8 +HOLZ + 10 +5026.544499 + 20 +9977.21221 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9FC + 8 +HOLZ + 10 +5025.679765 + 20 +9965.847067 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9FD + 8 +HOLZ + 10 +5024.142367 + 20 +9955.910065 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9FE + 8 +HOLZ + 10 +5022.389698 + 20 +9947.440663 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +9FF + 8 +HOLZ + 10 +5020.87915 + 20 +9940.47832 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A00 + 8 +HOLZ + 10 +5020.068113 + 20 +9935.062497 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A01 + 8 +HOLZ + 10 +5034.055445 + 20 +9976.66979 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A02 + 8 +HOLZ + 10 +5020.891623 + 20 +9947.407593 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A03 + 8 +HOLZ + 10 +5020.068113 + 20 +9935.062497 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +A04 + 8 +HOLZ + 0 +POLYLINE + 5 +A05 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +A06 + 8 +HOLZ + 10 +4968.113282 + 20 +9989.062739 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A07 + 8 +HOLZ + 10 +4968.113282 + 20 +9989.062739 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A08 + 8 +HOLZ + 10 +4968.355733 + 20 +9988.319535 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A09 + 8 +HOLZ + 10 +4968.996122 + 20 +9986.232954 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A0A + 8 +HOLZ + 10 +4969.904005 + 20 +9983.017539 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A0B + 8 +HOLZ + 10 +4970.948938 + 20 +9978.887836 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A0C + 8 +HOLZ + 10 +4972.000475 + 20 +9974.058388 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A0D + 8 +HOLZ + 10 +4972.928174 + 20 +9968.743741 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A0E + 8 +HOLZ + 10 +4973.601589 + 20 +9963.158438 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A0F + 8 +HOLZ + 10 +4973.890277 + 20 +9957.517024 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A10 + 8 +HOLZ + 10 +4973.660744 + 20 +9951.99181 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A11 + 8 +HOLZ + 10 +4972.767307 + 20 +9946.586171 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A12 + 8 +HOLZ + 10 +4971.061235 + 20 +9941.261248 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A13 + 8 +HOLZ + 10 +4968.393795 + 20 +9935.978182 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A14 + 8 +HOLZ + 10 +4964.616256 + 20 +9930.698114 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A15 + 8 +HOLZ + 10 +4959.579886 + 20 +9925.382186 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A16 + 8 +HOLZ + 10 +4953.135954 + 20 +9919.991538 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A17 + 8 +HOLZ + 10 +4945.135727 + 20 +9914.487313 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A18 + 8 +HOLZ + 10 +4968.113282 + 20 +9989.062739 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A19 + 8 +HOLZ + 10 +4979.385448 + 20 +9955.827065 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A1A + 8 +HOLZ + 10 +4968.676929 + 20 +9929.351227 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A1B + 8 +HOLZ + 10 +4945.135727 + 20 +9914.487313 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +A1C + 8 +HOLZ + 0 +POLYLINE + 5 +A1D + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +A1E + 8 +HOLZ + 10 +4996.857288 + 20 +10003.708989 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A1F + 8 +HOLZ + 10 +4996.857288 + 20 +10003.708989 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A20 + 8 +HOLZ + 10 +4994.48105 + 20 +10002.665294 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A21 + 8 +HOLZ + 10 +4993.79012 + 20 +9999.983679 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A22 + 8 +HOLZ + 10 +4994.425238 + 20 +9995.959246 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A23 + 8 +HOLZ + 10 +4996.027143 + 20 +9990.887097 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A24 + 8 +HOLZ + 10 +4998.236574 + 20 +9985.062334 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A25 + 8 +HOLZ + 10 +5000.694271 + 20 +9978.780058 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A26 + 8 +HOLZ + 10 +5003.040972 + 20 +9972.335372 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A27 + 8 +HOLZ + 10 +5004.917418 + 20 +9966.023377 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A28 + 8 +HOLZ + 10 +5005.999865 + 20 +9960.044183 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A29 + 8 +HOLZ + 10 +5006.106635 + 20 +9954.217928 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A2A + 8 +HOLZ + 10 +5005.09157 + 20 +9948.269756 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A2B + 8 +HOLZ + 10 +5002.80851 + 20 +9941.924815 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A2C + 8 +HOLZ + 10 +4999.111294 + 20 +9934.908248 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A2D + 8 +HOLZ + 10 +4993.853763 + 20 +9926.945202 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A2E + 8 +HOLZ + 10 +4986.889757 + 20 +9917.760823 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A2F + 8 +HOLZ + 10 +4978.073117 + 20 +9907.080255 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A30 + 8 +HOLZ + 10 +4987.954234 + 20 +10003.372008 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A31 + 8 +HOLZ + 10 +5013.765592 + 20 +9961.460249 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A32 + 8 +HOLZ + 10 +5004.184256 + 20 +9937.801003 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A33 + 8 +HOLZ + 10 +4978.073117 + 20 +9907.080255 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +A34 + 8 +HOLZ + 0 +POLYLINE + 5 +A35 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1489 + 8 +HOLZ + 10 +5591.207721 + 20 +10289.780722 + 30 +0.0 + 0 +VERTEX + 5 +148A + 8 +HOLZ + 10 +5551.463776 + 20 +10353.384329 + 30 +0.0 + 0 +VERTEX + 5 +148B + 8 +HOLZ + 10 +5657.469788 + 20 +10419.624237 + 30 +0.0 + 0 +VERTEX + 5 +148C + 8 +HOLZ + 10 +5697.213733 + 20 +10356.02063 + 30 +0.0 + 0 +SEQEND + 5 +148D + 8 +HOLZ + 0 +POLYLINE + 5 +A3B + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +A3C + 8 +HOLZ + 10 +5656.564874 + 20 +10416.921338 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A3D + 8 +HOLZ + 10 +5656.564874 + 20 +10416.921338 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A3E + 8 +HOLZ + 10 +5660.462482 + 20 +10401.508529 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A3F + 8 +HOLZ + 10 +5662.31525 + 20 +10387.405482 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A40 + 8 +HOLZ + 10 +5662.580571 + 20 +10374.651658 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A41 + 8 +HOLZ + 10 +5661.715837 + 20 +10363.286515 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A42 + 8 +HOLZ + 10 +5660.17844 + 20 +10353.349513 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A43 + 8 +HOLZ + 10 +5658.42577 + 20 +10344.880111 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A44 + 8 +HOLZ + 10 +5656.915222 + 20 +10337.917769 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A45 + 8 +HOLZ + 10 +5656.104185 + 20 +10332.501945 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A46 + 8 +HOLZ + 10 +5670.091517 + 20 +10374.109238 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A47 + 8 +HOLZ + 10 +5656.927695 + 20 +10344.847041 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A48 + 8 +HOLZ + 10 +5656.104185 + 20 +10332.501945 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +A49 + 8 +HOLZ + 0 +POLYLINE + 5 +A4A + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +A4B + 8 +HOLZ + 10 +5632.89336 + 20 +10401.148437 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A4C + 8 +HOLZ + 10 +5632.89336 + 20 +10401.148437 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A4D + 8 +HOLZ + 10 +5630.517122 + 20 +10400.104742 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A4E + 8 +HOLZ + 10 +5629.826193 + 20 +10397.423127 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A4F + 8 +HOLZ + 10 +5630.46131 + 20 +10393.398694 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A50 + 8 +HOLZ + 10 +5632.063215 + 20 +10388.326545 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A51 + 8 +HOLZ + 10 +5634.272646 + 20 +10382.501782 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A52 + 8 +HOLZ + 10 +5636.730343 + 20 +10376.219506 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A53 + 8 +HOLZ + 10 +5639.077044 + 20 +10369.77482 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A54 + 8 +HOLZ + 10 +5640.95349 + 20 +10363.462825 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A55 + 8 +HOLZ + 10 +5642.035937 + 20 +10357.483631 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A56 + 8 +HOLZ + 10 +5642.142708 + 20 +10351.657376 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A57 + 8 +HOLZ + 10 +5641.127642 + 20 +10345.709204 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A58 + 8 +HOLZ + 10 +5638.844582 + 20 +10339.364263 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A59 + 8 +HOLZ + 10 +5635.147366 + 20 +10332.347696 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A5A + 8 +HOLZ + 10 +5629.889835 + 20 +10324.384651 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A5B + 8 +HOLZ + 10 +5622.925829 + 20 +10315.200271 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A5C + 8 +HOLZ + 10 +5614.109189 + 20 +10304.519703 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A5D + 8 +HOLZ + 10 +5623.990306 + 20 +10400.811456 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A5E + 8 +HOLZ + 10 +5649.801664 + 20 +10358.899697 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A5F + 8 +HOLZ + 10 +5640.220329 + 20 +10335.240451 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A60 + 8 +HOLZ + 10 +5614.109189 + 20 +10304.519703 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +A61 + 8 +HOLZ + 0 +POLYLINE + 5 +A62 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +A63 + 8 +HOLZ + 10 +5604.149354 + 20 +10386.502187 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A64 + 8 +HOLZ + 10 +5604.149354 + 20 +10386.502187 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A65 + 8 +HOLZ + 10 +5604.391805 + 20 +10385.758983 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A66 + 8 +HOLZ + 10 +5605.032194 + 20 +10383.672402 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A67 + 8 +HOLZ + 10 +5605.940077 + 20 +10380.456987 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A68 + 8 +HOLZ + 10 +5606.98501 + 20 +10376.327284 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A69 + 8 +HOLZ + 10 +5608.036548 + 20 +10371.497836 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A6A + 8 +HOLZ + 10 +5608.964246 + 20 +10366.183189 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A6B + 8 +HOLZ + 10 +5609.637662 + 20 +10360.597886 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A6C + 8 +HOLZ + 10 +5609.926349 + 20 +10354.956472 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A6D + 8 +HOLZ + 10 +5609.696816 + 20 +10349.431258 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A6E + 8 +HOLZ + 10 +5608.803379 + 20 +10344.025619 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A6F + 8 +HOLZ + 10 +5607.097307 + 20 +10338.700696 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A70 + 8 +HOLZ + 10 +5604.429867 + 20 +10333.41763 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A71 + 8 +HOLZ + 10 +5600.652328 + 20 +10328.137562 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A72 + 8 +HOLZ + 10 +5595.615958 + 20 +10322.821634 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A73 + 8 +HOLZ + 10 +5589.172026 + 20 +10317.430986 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A74 + 8 +HOLZ + 10 +5581.171799 + 20 +10311.926761 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A75 + 8 +HOLZ + 10 +5604.149354 + 20 +10386.502187 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A76 + 8 +HOLZ + 10 +5615.42152 + 20 +10353.266514 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A77 + 8 +HOLZ + 10 +5604.713001 + 20 +10326.790675 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A78 + 8 +HOLZ + 10 +5581.171799 + 20 +10311.926761 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +A79 + 8 +HOLZ + 0 +POLYLINE + 5 +A7A + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +A7B + 8 +HOLZ + 10 +5578.223362 + 20 +10369.039414 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A7C + 8 +HOLZ + 10 +5578.223362 + 20 +10369.039414 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A7D + 8 +HOLZ + 10 +5578.903816 + 20 +10361.74781 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A7E + 8 +HOLZ + 10 +5578.186986 + 20 +10357.419447 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A7F + 8 +HOLZ + 10 +5576.374059 + 20 +10355.123569 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A80 + 8 +HOLZ + 10 +5573.76622 + 20 +10353.92942 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A81 + 8 +HOLZ + 10 +5570.664654 + 20 +10352.906244 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A82 + 8 +HOLZ + 10 +5567.370548 + 20 +10351.123285 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A83 + 8 +HOLZ + 10 +5564.185086 + 20 +10347.649787 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A84 + 8 +HOLZ + 10 +5561.409455 + 20 +10341.554992 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A85 + 8 +HOLZ + 10 +5582.16867 + 20 +10344.816808 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A86 + 8 +HOLZ + 10 +5567.996977 + 20 +10362.130177 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A87 + 8 +HOLZ + 10 +5561.409455 + 20 +10341.554992 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +A88 + 8 +HOLZ + 0 +POLYLINE + 5 +A89 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +148E + 8 +HOLZ + 10 +6227.243793 + 20 +10687.22017 + 30 +0.0 + 0 +VERTEX + 5 +148F + 8 +HOLZ + 10 +6187.499848 + 20 +10750.823777 + 30 +0.0 + 0 +VERTEX + 5 +1490 + 8 +HOLZ + 10 +6293.50586 + 20 +10817.063685 + 30 +0.0 + 0 +VERTEX + 5 +1491 + 8 +HOLZ + 10 +6333.249805 + 20 +10753.460078 + 30 +0.0 + 0 +SEQEND + 5 +1492 + 8 +HOLZ + 0 +POLYLINE + 5 +A8F + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +A90 + 8 +HOLZ + 10 +6292.600946 + 20 +10814.360786 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A91 + 8 +HOLZ + 10 +6292.600946 + 20 +10814.360786 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A92 + 8 +HOLZ + 10 +6296.498554 + 20 +10798.947977 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A93 + 8 +HOLZ + 10 +6298.351322 + 20 +10784.844931 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A94 + 8 +HOLZ + 10 +6298.616643 + 20 +10772.091106 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A95 + 8 +HOLZ + 10 +6297.751909 + 20 +10760.725963 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A96 + 8 +HOLZ + 10 +6296.214512 + 20 +10750.788961 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A97 + 8 +HOLZ + 10 +6294.461843 + 20 +10742.319559 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A98 + 8 +HOLZ + 10 +6292.951294 + 20 +10735.357217 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A99 + 8 +HOLZ + 10 +6292.140257 + 20 +10729.941393 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +A9A + 8 +HOLZ + 10 +6306.127589 + 20 +10771.548686 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A9B + 8 +HOLZ + 10 +6292.963767 + 20 +10742.28649 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +A9C + 8 +HOLZ + 10 +6292.140257 + 20 +10729.941393 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +A9D + 8 +HOLZ + 0 +POLYLINE + 5 +A9E + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +A9F + 8 +HOLZ + 10 +6268.929432 + 20 +10798.587885 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +AA0 + 8 +HOLZ + 10 +6268.929432 + 20 +10798.587885 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AA1 + 8 +HOLZ + 10 +6266.553194 + 20 +10797.54419 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AA2 + 8 +HOLZ + 10 +6265.862265 + 20 +10794.862575 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AA3 + 8 +HOLZ + 10 +6266.497383 + 20 +10790.838142 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AA4 + 8 +HOLZ + 10 +6268.099287 + 20 +10785.765993 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AA5 + 8 +HOLZ + 10 +6270.308718 + 20 +10779.94123 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AA6 + 8 +HOLZ + 10 +6272.766415 + 20 +10773.658954 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AA7 + 8 +HOLZ + 10 +6275.113117 + 20 +10767.214268 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AA8 + 8 +HOLZ + 10 +6276.989563 + 20 +10760.902274 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AA9 + 8 +HOLZ + 10 +6278.072009 + 20 +10754.923079 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AAA + 8 +HOLZ + 10 +6278.17878 + 20 +10749.096824 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AAB + 8 +HOLZ + 10 +6277.163715 + 20 +10743.148653 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AAC + 8 +HOLZ + 10 +6274.880654 + 20 +10736.803711 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AAD + 8 +HOLZ + 10 +6271.183438 + 20 +10729.787145 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AAE + 8 +HOLZ + 10 +6265.925907 + 20 +10721.824099 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AAF + 8 +HOLZ + 10 +6258.961901 + 20 +10712.639719 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AB0 + 8 +HOLZ + 10 +6250.145261 + 20 +10701.959151 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AB1 + 8 +HOLZ + 10 +6260.026378 + 20 +10798.250904 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +AB2 + 8 +HOLZ + 10 +6285.837736 + 20 +10756.339146 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +AB3 + 8 +HOLZ + 10 +6276.256401 + 20 +10732.679899 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +AB4 + 8 +HOLZ + 10 +6250.145261 + 20 +10701.959151 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +AB5 + 8 +HOLZ + 0 +POLYLINE + 5 +AB6 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +AB7 + 8 +HOLZ + 10 +6240.185426 + 20 +10783.941635 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +AB8 + 8 +HOLZ + 10 +6240.185426 + 20 +10783.941635 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AB9 + 8 +HOLZ + 10 +6240.427877 + 20 +10783.198431 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +ABA + 8 +HOLZ + 10 +6241.068266 + 20 +10781.11185 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +ABB + 8 +HOLZ + 10 +6241.976149 + 20 +10777.896435 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +ABC + 8 +HOLZ + 10 +6243.021082 + 20 +10773.766732 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +ABD + 8 +HOLZ + 10 +6244.07262 + 20 +10768.937284 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +ABE + 8 +HOLZ + 10 +6245.000318 + 20 +10763.622637 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +ABF + 8 +HOLZ + 10 +6245.673734 + 20 +10758.037334 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AC0 + 8 +HOLZ + 10 +6245.962421 + 20 +10752.39592 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AC1 + 8 +HOLZ + 10 +6245.732888 + 20 +10746.870707 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AC2 + 8 +HOLZ + 10 +6244.839451 + 20 +10741.465067 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AC3 + 8 +HOLZ + 10 +6243.133379 + 20 +10736.140144 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AC4 + 8 +HOLZ + 10 +6240.465939 + 20 +10730.857078 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AC5 + 8 +HOLZ + 10 +6236.6884 + 20 +10725.577011 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AC6 + 8 +HOLZ + 10 +6231.65203 + 20 +10720.261082 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AC7 + 8 +HOLZ + 10 +6225.208098 + 20 +10714.870435 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AC8 + 8 +HOLZ + 10 +6217.207872 + 20 +10709.366209 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AC9 + 8 +HOLZ + 10 +6240.185426 + 20 +10783.941635 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +ACA + 8 +HOLZ + 10 +6251.457592 + 20 +10750.705962 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +ACB + 8 +HOLZ + 10 +6240.749074 + 20 +10724.230123 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +ACC + 8 +HOLZ + 10 +6217.207872 + 20 +10709.366209 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +ACD + 8 +HOLZ + 0 +POLYLINE + 5 +ACE + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +ACF + 8 +HOLZ + 10 +6214.259434 + 20 +10766.478863 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +AD0 + 8 +HOLZ + 10 +6214.259434 + 20 +10766.478863 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AD1 + 8 +HOLZ + 10 +6214.939888 + 20 +10759.187258 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AD2 + 8 +HOLZ + 10 +6214.223058 + 20 +10754.858895 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AD3 + 8 +HOLZ + 10 +6212.410131 + 20 +10752.563017 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AD4 + 8 +HOLZ + 10 +6209.802292 + 20 +10751.368868 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AD5 + 8 +HOLZ + 10 +6206.700726 + 20 +10750.345692 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AD6 + 8 +HOLZ + 10 +6203.40662 + 20 +10748.562733 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AD7 + 8 +HOLZ + 10 +6200.221158 + 20 +10745.089235 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AD8 + 8 +HOLZ + 10 +6197.445527 + 20 +10738.994441 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AD9 + 8 +HOLZ + 10 +6218.204742 + 20 +10742.256256 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +ADA + 8 +HOLZ + 10 +6204.033049 + 20 +10759.569625 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +ADB + 8 +HOLZ + 10 +6197.445527 + 20 +10738.994441 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +ADC + 8 +HOLZ + 0 +POLYLINE + 5 +ADD + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +ADE + 8 +HOLZ + 10 +6850.295507 + 20 +11163.918311 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +ADF + 8 +HOLZ + 10 +6850.295507 + 20 +11163.918311 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AE0 + 8 +HOLZ + 10 +6850.97596 + 20 +11156.626706 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AE1 + 8 +HOLZ + 10 +6850.259131 + 20 +11152.298343 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AE2 + 8 +HOLZ + 10 +6848.446203 + 20 +11150.002465 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AE3 + 8 +HOLZ + 10 +6845.838364 + 20 +11148.808316 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AE4 + 8 +HOLZ + 10 +6842.736798 + 20 +11147.78514 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AE5 + 8 +HOLZ + 10 +6839.442692 + 20 +11146.002181 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AE6 + 8 +HOLZ + 10 +6836.25723 + 20 +11142.528683 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AE7 + 8 +HOLZ + 10 +6833.481599 + 20 +11136.433889 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AE8 + 8 +HOLZ + 10 +6854.240815 + 20 +11139.695704 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +AE9 + 8 +HOLZ + 10 +6840.069121 + 20 +11157.009073 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +AEA + 8 +HOLZ + 10 +6833.481599 + 20 +11136.433889 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +AEB + 8 +HOLZ + 0 +POLYLINE + 5 +AEC + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +AED + 8 +HOLZ + 10 +6876.221498 + 20 +11181.381083 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +AEE + 8 +HOLZ + 10 +6876.221498 + 20 +11181.381083 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AEF + 8 +HOLZ + 10 +6876.463949 + 20 +11180.63788 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AF0 + 8 +HOLZ + 10 +6877.104338 + 20 +11178.551298 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AF1 + 8 +HOLZ + 10 +6878.012221 + 20 +11175.335884 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AF2 + 8 +HOLZ + 10 +6879.057154 + 20 +11171.20618 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AF3 + 8 +HOLZ + 10 +6880.108692 + 20 +11166.376733 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AF4 + 8 +HOLZ + 10 +6881.036391 + 20 +11161.062085 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AF5 + 8 +HOLZ + 10 +6881.709806 + 20 +11155.476782 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AF6 + 8 +HOLZ + 10 +6881.998493 + 20 +11149.835369 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AF7 + 8 +HOLZ + 10 +6881.76896 + 20 +11144.310155 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AF8 + 8 +HOLZ + 10 +6880.875523 + 20 +11138.904516 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AF9 + 8 +HOLZ + 10 +6879.169451 + 20 +11133.579592 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AFA + 8 +HOLZ + 10 +6876.502011 + 20 +11128.296526 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AFB + 8 +HOLZ + 10 +6872.724472 + 20 +11123.016459 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AFC + 8 +HOLZ + 10 +6867.688102 + 20 +11117.70053 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AFD + 8 +HOLZ + 10 +6861.24417 + 20 +11112.309883 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AFE + 8 +HOLZ + 10 +6853.243944 + 20 +11106.805657 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +AFF + 8 +HOLZ + 10 +6876.221498 + 20 +11181.381083 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B00 + 8 +HOLZ + 10 +6887.493664 + 20 +11148.14541 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B01 + 8 +HOLZ + 10 +6876.785146 + 20 +11121.669571 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B02 + 8 +HOLZ + 10 +6853.243944 + 20 +11106.805657 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +B03 + 8 +HOLZ + 0 +POLYLINE + 5 +B04 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +B05 + 8 +HOLZ + 10 +6904.965504 + 20 +11196.027333 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B06 + 8 +HOLZ + 10 +6904.965504 + 20 +11196.027333 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B07 + 8 +HOLZ + 10 +6902.589266 + 20 +11194.983638 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B08 + 8 +HOLZ + 10 +6901.898337 + 20 +11192.302023 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B09 + 8 +HOLZ + 10 +6902.533455 + 20 +11188.27759 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B0A + 8 +HOLZ + 10 +6904.135359 + 20 +11183.205441 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B0B + 8 +HOLZ + 10 +6906.34479 + 20 +11177.380678 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B0C + 8 +HOLZ + 10 +6908.802487 + 20 +11171.098403 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B0D + 8 +HOLZ + 10 +6911.149189 + 20 +11164.653716 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B0E + 8 +HOLZ + 10 +6913.025635 + 20 +11158.341722 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B0F + 8 +HOLZ + 10 +6914.108081 + 20 +11152.362528 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B10 + 8 +HOLZ + 10 +6914.214852 + 20 +11146.536272 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B11 + 8 +HOLZ + 10 +6913.199787 + 20 +11140.588101 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B12 + 8 +HOLZ + 10 +6910.916726 + 20 +11134.243159 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B13 + 8 +HOLZ + 10 +6907.21951 + 20 +11127.226593 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B14 + 8 +HOLZ + 10 +6901.961979 + 20 +11119.263547 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B15 + 8 +HOLZ + 10 +6894.997973 + 20 +11110.079167 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B16 + 8 +HOLZ + 10 +6886.181333 + 20 +11099.398599 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B17 + 8 +HOLZ + 10 +6896.06245 + 20 +11195.690352 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B18 + 8 +HOLZ + 10 +6921.873808 + 20 +11153.778594 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B19 + 8 +HOLZ + 10 +6912.292473 + 20 +11130.119347 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B1A + 8 +HOLZ + 10 +6886.181333 + 20 +11099.398599 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +B1B + 8 +HOLZ + 0 +POLYLINE + 5 +B1C + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +B1D + 8 +HOLZ + 10 +6928.637018 + 20 +11211.800234 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B1E + 8 +HOLZ + 10 +6928.637018 + 20 +11211.800234 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B1F + 8 +HOLZ + 10 +6932.534626 + 20 +11196.387425 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B20 + 8 +HOLZ + 10 +6934.387394 + 20 +11182.284379 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B21 + 8 +HOLZ + 10 +6934.652716 + 20 +11169.530554 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B22 + 8 +HOLZ + 10 +6933.787981 + 20 +11158.165412 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B23 + 8 +HOLZ + 10 +6932.250584 + 20 +11148.228409 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B24 + 8 +HOLZ + 10 +6930.497915 + 20 +11139.759007 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B25 + 8 +HOLZ + 10 +6928.987366 + 20 +11132.796665 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B26 + 8 +HOLZ + 10 +6928.17633 + 20 +11127.380841 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B27 + 8 +HOLZ + 10 +6942.163662 + 20 +11168.988135 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B28 + 8 +HOLZ + 10 +6928.999839 + 20 +11139.725938 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B29 + 8 +HOLZ + 10 +6928.17633 + 20 +11127.380841 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +B2A + 8 +HOLZ + 0 +POLYLINE + 5 +B2B + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1493 + 8 +HOLZ + 10 +6863.279865 + 20 +11084.659618 + 30 +0.0 + 0 +VERTEX + 5 +1494 + 8 +HOLZ + 10 +6823.53592 + 20 +11148.263225 + 30 +0.0 + 0 +VERTEX + 5 +1495 + 8 +HOLZ + 10 +6929.541932 + 20 +11214.503133 + 30 +0.0 + 0 +VERTEX + 5 +1496 + 8 +HOLZ + 10 +6969.285877 + 20 +11150.899526 + 30 +0.0 + 0 +SEQEND + 5 +1497 + 8 +HOLZ + 0 +POLYLINE + 5 +B31 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1498 + 8 +HOLZ + 10 +7499.315937 + 20 +11482.099066 + 30 +0.0 + 0 +VERTEX + 5 +1499 + 8 +HOLZ + 10 +7459.571992 + 20 +11545.702674 + 30 +0.0 + 0 +VERTEX + 5 +149A + 8 +HOLZ + 10 +7565.578004 + 20 +11611.942582 + 30 +0.0 + 0 +VERTEX + 5 +149B + 8 +HOLZ + 10 +7605.321949 + 20 +11548.338974 + 30 +0.0 + 0 +SEQEND + 5 +149C + 8 +HOLZ + 0 +POLYLINE + 5 +B37 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +B38 + 8 +HOLZ + 10 +7486.331579 + 20 +11561.357759 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B39 + 8 +HOLZ + 10 +7486.331579 + 20 +11561.357759 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B3A + 8 +HOLZ + 10 +7487.012032 + 20 +11554.066154 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B3B + 8 +HOLZ + 10 +7486.295203 + 20 +11549.737791 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B3C + 8 +HOLZ + 10 +7484.482275 + 20 +11547.441913 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B3D + 8 +HOLZ + 10 +7481.874436 + 20 +11546.247764 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B3E + 8 +HOLZ + 10 +7478.772871 + 20 +11545.224589 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B3F + 8 +HOLZ + 10 +7475.478764 + 20 +11543.44163 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B40 + 8 +HOLZ + 10 +7472.293302 + 20 +11539.968131 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B41 + 8 +HOLZ + 10 +7469.517671 + 20 +11533.873337 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B42 + 8 +HOLZ + 10 +7490.276887 + 20 +11537.135152 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B43 + 8 +HOLZ + 10 +7476.105193 + 20 +11554.448521 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B44 + 8 +HOLZ + 10 +7469.517671 + 20 +11533.873337 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +B45 + 8 +HOLZ + 0 +POLYLINE + 5 +B46 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +B47 + 8 +HOLZ + 10 +7512.257571 + 20 +11578.820531 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B48 + 8 +HOLZ + 10 +7512.257571 + 20 +11578.820531 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B49 + 8 +HOLZ + 10 +7512.500021 + 20 +11578.077328 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B4A + 8 +HOLZ + 10 +7513.14041 + 20 +11575.990746 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B4B + 8 +HOLZ + 10 +7514.048293 + 20 +11572.775332 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B4C + 8 +HOLZ + 10 +7515.093226 + 20 +11568.645628 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B4D + 8 +HOLZ + 10 +7516.144764 + 20 +11563.816181 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B4E + 8 +HOLZ + 10 +7517.072463 + 20 +11558.501533 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B4F + 8 +HOLZ + 10 +7517.745878 + 20 +11552.91623 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B50 + 8 +HOLZ + 10 +7518.034565 + 20 +11547.274817 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B51 + 8 +HOLZ + 10 +7517.805032 + 20 +11541.749603 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B52 + 8 +HOLZ + 10 +7516.911596 + 20 +11536.343964 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B53 + 8 +HOLZ + 10 +7515.205523 + 20 +11531.019041 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B54 + 8 +HOLZ + 10 +7512.538083 + 20 +11525.735975 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B55 + 8 +HOLZ + 10 +7508.760544 + 20 +11520.455907 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B56 + 8 +HOLZ + 10 +7503.724174 + 20 +11515.139979 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B57 + 8 +HOLZ + 10 +7497.280242 + 20 +11509.749331 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B58 + 8 +HOLZ + 10 +7489.280016 + 20 +11504.245105 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B59 + 8 +HOLZ + 10 +7512.257571 + 20 +11578.820531 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B5A + 8 +HOLZ + 10 +7523.529736 + 20 +11545.584858 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B5B + 8 +HOLZ + 10 +7512.821218 + 20 +11519.109019 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B5C + 8 +HOLZ + 10 +7489.280016 + 20 +11504.245105 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +B5D + 8 +HOLZ + 0 +POLYLINE + 5 +B5E + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +B5F + 8 +HOLZ + 10 +7541.001576 + 20 +11593.466782 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B60 + 8 +HOLZ + 10 +7541.001576 + 20 +11593.466782 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B61 + 8 +HOLZ + 10 +7538.625338 + 20 +11592.423086 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B62 + 8 +HOLZ + 10 +7537.934409 + 20 +11589.741472 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B63 + 8 +HOLZ + 10 +7538.569527 + 20 +11585.717039 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B64 + 8 +HOLZ + 10 +7540.171432 + 20 +11580.64489 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B65 + 8 +HOLZ + 10 +7542.380863 + 20 +11574.820126 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B66 + 8 +HOLZ + 10 +7544.838559 + 20 +11568.537851 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B67 + 8 +HOLZ + 10 +7547.185261 + 20 +11562.093165 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B68 + 8 +HOLZ + 10 +7549.061707 + 20 +11555.78117 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B69 + 8 +HOLZ + 10 +7550.144153 + 20 +11549.801976 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B6A + 8 +HOLZ + 10 +7550.250924 + 20 +11543.97572 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B6B + 8 +HOLZ + 10 +7549.235859 + 20 +11538.027549 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B6C + 8 +HOLZ + 10 +7546.952798 + 20 +11531.682607 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B6D + 8 +HOLZ + 10 +7543.255582 + 20 +11524.666041 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B6E + 8 +HOLZ + 10 +7537.998051 + 20 +11516.702995 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B6F + 8 +HOLZ + 10 +7531.034045 + 20 +11507.518615 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B70 + 8 +HOLZ + 10 +7522.217405 + 20 +11496.838047 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B71 + 8 +HOLZ + 10 +7532.098522 + 20 +11593.1298 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B72 + 8 +HOLZ + 10 +7557.90988 + 20 +11551.218042 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B73 + 8 +HOLZ + 10 +7548.328545 + 20 +11527.558795 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B74 + 8 +HOLZ + 10 +7522.217405 + 20 +11496.838047 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +B75 + 8 +HOLZ + 0 +POLYLINE + 5 +B76 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +B77 + 8 +HOLZ + 10 +7564.673091 + 20 +11609.239682 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B78 + 8 +HOLZ + 10 +7564.673091 + 20 +11609.239682 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B79 + 8 +HOLZ + 10 +7568.570698 + 20 +11593.826873 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B7A + 8 +HOLZ + 10 +7570.423467 + 20 +11579.723827 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B7B + 8 +HOLZ + 10 +7570.688788 + 20 +11566.970003 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B7C + 8 +HOLZ + 10 +7569.824053 + 20 +11555.60486 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B7D + 8 +HOLZ + 10 +7568.286656 + 20 +11545.667858 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B7E + 8 +HOLZ + 10 +7566.533987 + 20 +11537.198456 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B7F + 8 +HOLZ + 10 +7565.023438 + 20 +11530.236113 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B80 + 8 +HOLZ + 10 +7564.212402 + 20 +11524.820289 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +B81 + 8 +HOLZ + 10 +7578.199734 + 20 +11566.427583 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B82 + 8 +HOLZ + 10 +7565.035912 + 20 +11537.165386 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +B83 + 8 +HOLZ + 10 +7564.212402 + 20 +11524.820289 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +B84 + 8 +HOLZ + 0 +POLYLINE + 5 +B85 + 8 +DACHZIEGEL + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +149D + 8 +DACHZIEGEL + 10 +7569.799701 + 20 +11626.488957 + 30 +0.0 + 0 +VERTEX + 5 +149E + 8 +DACHZIEGEL + 10 +7603.921761 + 20 +11571.715136 + 30 +0.0 + 0 +VERTEX + 5 +149F + 8 +DACHZIEGEL + 10 +7653.553961 + 20 +11602.71917 + 30 +0.0 + 0 +VERTEX + 5 +14A0 + 8 +DACHZIEGEL + 10 +7632.873924 + 20 +11684.363141 + 30 +0.0 + 0 +VERTEX + 5 +14A1 + 8 +DACHZIEGEL + 10 +7570.833703 + 20 +11714.333651 + 30 +0.0 + 0 +VERTEX + 5 +14A2 + 8 +DACHZIEGEL + 10 +7539.813648 + 20 +11694.697819 + 30 +0.0 + 0 +VERTEX + 5 +14A3 + 8 +DACHZIEGEL + 10 +7538.779646 + 20 +11663.693785 + 30 +0.0 + 0 +VERTEX + 5 +14A4 + 8 +DACHZIEGEL + 10 +7512.9296 + 20 +11649.225221 + 30 +0.0 + 0 +VERTEX + 5 +14A5 + 8 +DACHZIEGEL + 10 +7489.147558 + 20 +11659.559899 + 30 +0.0 + 0 +VERTEX + 5 +14A6 + 8 +DACHZIEGEL + 10 +7461.229397 + 20 +11641.990975 + 30 +0.0 + 0 +VERTEX + 5 +14A7 + 8 +DACHZIEGEL + 10 +7459.161394 + 20 +11616.154279 + 30 +0.0 + 0 +VERTEX + 5 +14A8 + 8 +DACHZIEGEL + 10 +6736.224318 + 20 +11283.235231 + 30 +0.0 + 0 +VERTEX + 5 +14A9 + 8 +DACHZIEGEL + 10 +6781.259162 + 20 +11210.253272 + 30 +0.0 + 0 +VERTEX + 5 +14AA + 8 +DACHZIEGEL + 10 +6811.396774 + 20 +11224.597085 + 30 +0.0 + 0 +VERTEX + 5 +14AB + 8 +DACHZIEGEL + 10 +6812.114315 + 20 +11258.305081 + 30 +0.0 + 0 +VERTEX + 5 +14AC + 8 +DACHZIEGEL + 10 +6849.427559 + 20 +11279.103575 + 30 +0.0 + 0 +VERTEX + 5 +14AD + 8 +DACHZIEGEL + 10 +6873.824621 + 20 +11266.911369 + 30 +0.0 + 0 +VERTEX + 5 +14AE + 8 +DACHZIEGEL + 10 +6892.481243 + 20 +11274.083275 + 30 +0.0 + 0 +VERTEX + 5 +14AF + 8 +DACHZIEGEL + 10 +6894.633977 + 20 +11310.659964 + 30 +0.0 + 0 +VERTEX + 5 +14B0 + 8 +DACHZIEGEL + 10 +7572.874908 + 20 +11627.370984 + 30 +0.0 + 0 +SEQEND + 5 +14B1 + 8 +DACHZIEGEL + 0 +POLYLINE + 5 +B9B + 8 +DACHZIEGEL + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +14B2 + 8 +DACHZIEGEL + 10 +6297.727557 + 20 +10831.610061 + 30 +0.0 + 0 +VERTEX + 5 +14B3 + 8 +DACHZIEGEL + 10 +6331.849617 + 20 +10776.83624 + 30 +0.0 + 0 +VERTEX + 5 +14B4 + 8 +DACHZIEGEL + 10 +6381.481816 + 20 +10807.840274 + 30 +0.0 + 0 +VERTEX + 5 +14B5 + 8 +DACHZIEGEL + 10 +6360.80178 + 20 +10889.484244 + 30 +0.0 + 0 +VERTEX + 5 +14B6 + 8 +DACHZIEGEL + 10 +6298.761559 + 20 +10919.454755 + 30 +0.0 + 0 +VERTEX + 5 +14B7 + 8 +DACHZIEGEL + 10 +6267.741504 + 20 +10899.818922 + 30 +0.0 + 0 +VERTEX + 5 +14B8 + 8 +DACHZIEGEL + 10 +6266.707502 + 20 +10868.814888 + 30 +0.0 + 0 +VERTEX + 5 +14B9 + 8 +DACHZIEGEL + 10 +6240.857456 + 20 +10854.346325 + 30 +0.0 + 0 +VERTEX + 5 +14BA + 8 +DACHZIEGEL + 10 +6217.075414 + 20 +10864.681003 + 30 +0.0 + 0 +VERTEX + 5 +14BB + 8 +DACHZIEGEL + 10 +6189.157253 + 20 +10847.112078 + 30 +0.0 + 0 +VERTEX + 5 +14BC + 8 +DACHZIEGEL + 10 +6187.089249 + 20 +10821.275383 + 30 +0.0 + 0 +VERTEX + 5 +14BD + 8 +DACHZIEGEL + 10 +5464.152174 + 20 +10488.356335 + 30 +0.0 + 0 +VERTEX + 5 +14BE + 8 +DACHZIEGEL + 10 +5509.187018 + 20 +10415.374375 + 30 +0.0 + 0 +VERTEX + 5 +14BF + 8 +DACHZIEGEL + 10 +5539.32463 + 20 +10429.718189 + 30 +0.0 + 0 +VERTEX + 5 +14C0 + 8 +DACHZIEGEL + 10 +5540.042171 + 20 +10463.426184 + 30 +0.0 + 0 +VERTEX + 5 +14C1 + 8 +DACHZIEGEL + 10 +5577.355415 + 20 +10484.224679 + 30 +0.0 + 0 +VERTEX + 5 +14C2 + 8 +DACHZIEGEL + 10 +5601.752476 + 20 +10472.032472 + 30 +0.0 + 0 +VERTEX + 5 +14C3 + 8 +DACHZIEGEL + 10 +5620.409099 + 20 +10479.204379 + 30 +0.0 + 0 +VERTEX + 5 +14C4 + 8 +DACHZIEGEL + 10 +5622.561833 + 20 +10515.781068 + 30 +0.0 + 0 +VERTEX + 5 +14C5 + 8 +DACHZIEGEL + 10 +6300.802764 + 20 +10832.492088 + 30 +0.0 + 0 +SEQEND + 5 +14C6 + 8 +DACHZIEGEL + 0 +POLYLINE + 5 +BB1 + 8 +DACHZIEGEL + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +14C7 + 8 +DACHZIEGEL + 10 +6933.763629 + 20 +11229.049509 + 30 +0.0 + 0 +VERTEX + 5 +14C8 + 8 +DACHZIEGEL + 10 +6967.885689 + 20 +11174.275688 + 30 +0.0 + 0 +VERTEX + 5 +14C9 + 8 +DACHZIEGEL + 10 +7017.517888 + 20 +11205.279722 + 30 +0.0 + 0 +VERTEX + 5 +14CA + 8 +DACHZIEGEL + 10 +6996.837852 + 20 +11286.923693 + 30 +0.0 + 0 +VERTEX + 5 +14CB + 8 +DACHZIEGEL + 10 +6934.797631 + 20 +11316.894203 + 30 +0.0 + 0 +VERTEX + 5 +14CC + 8 +DACHZIEGEL + 10 +6903.777576 + 20 +11297.258371 + 30 +0.0 + 0 +VERTEX + 5 +14CD + 8 +DACHZIEGEL + 10 +6902.743574 + 20 +11266.254336 + 30 +0.0 + 0 +VERTEX + 5 +14CE + 8 +DACHZIEGEL + 10 +6876.893528 + 20 +11251.785773 + 30 +0.0 + 0 +VERTEX + 5 +14CF + 8 +DACHZIEGEL + 10 +6853.111486 + 20 +11262.120451 + 30 +0.0 + 0 +VERTEX + 5 +14D0 + 8 +DACHZIEGEL + 10 +6825.193325 + 20 +11244.551526 + 30 +0.0 + 0 +VERTEX + 5 +14D1 + 8 +DACHZIEGEL + 10 +6823.125322 + 20 +11218.714831 + 30 +0.0 + 0 +VERTEX + 5 +14D2 + 8 +DACHZIEGEL + 10 +6100.188246 + 20 +10885.795783 + 30 +0.0 + 0 +VERTEX + 5 +14D3 + 8 +DACHZIEGEL + 10 +6145.22309 + 20 +10812.813824 + 30 +0.0 + 0 +VERTEX + 5 +14D4 + 8 +DACHZIEGEL + 10 +6175.360702 + 20 +10827.157637 + 30 +0.0 + 0 +VERTEX + 5 +14D5 + 8 +DACHZIEGEL + 10 +6176.078243 + 20 +10860.865633 + 30 +0.0 + 0 +VERTEX + 5 +14D6 + 8 +DACHZIEGEL + 10 +6213.391487 + 20 +10881.664127 + 30 +0.0 + 0 +VERTEX + 5 +14D7 + 8 +DACHZIEGEL + 10 +6237.788549 + 20 +10869.471921 + 30 +0.0 + 0 +VERTEX + 5 +14D8 + 8 +DACHZIEGEL + 10 +6256.445171 + 20 +10876.643827 + 30 +0.0 + 0 +VERTEX + 5 +14D9 + 8 +DACHZIEGEL + 10 +6258.597905 + 20 +10913.220516 + 30 +0.0 + 0 +VERTEX + 5 +14DA + 8 +DACHZIEGEL + 10 +6936.838836 + 20 +11229.931536 + 30 +0.0 + 0 +SEQEND + 5 +14DB + 8 +DACHZIEGEL + 0 +POLYLINE + 5 +BC7 + 8 +DACHZIEGEL + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +14DC + 8 +DACHZIEGEL + 10 +5025.655413 + 20 +10036.731165 + 30 +0.0 + 0 +VERTEX + 5 +14DD + 8 +DACHZIEGEL + 10 +5059.777473 + 20 +9981.957343 + 30 +0.0 + 0 +VERTEX + 5 +14DE + 8 +DACHZIEGEL + 10 +5109.409672 + 20 +10012.961377 + 30 +0.0 + 0 +VERTEX + 5 +14DF + 8 +DACHZIEGEL + 10 +5088.729635 + 20 +10094.605348 + 30 +0.0 + 0 +VERTEX + 5 +14E0 + 8 +DACHZIEGEL + 10 +5026.689414 + 20 +10124.575859 + 30 +0.0 + 0 +VERTEX + 5 +14E1 + 8 +DACHZIEGEL + 10 +4995.669359 + 20 +10104.940026 + 30 +0.0 + 0 +VERTEX + 5 +14E2 + 8 +DACHZIEGEL + 10 +4994.635358 + 20 +10073.935992 + 30 +0.0 + 0 +VERTEX + 5 +14E3 + 8 +DACHZIEGEL + 10 +4968.785312 + 20 +10059.467429 + 30 +0.0 + 0 +VERTEX + 5 +14E4 + 8 +DACHZIEGEL + 10 +4945.00327 + 20 +10069.802107 + 30 +0.0 + 0 +VERTEX + 5 +14E5 + 8 +DACHZIEGEL + 10 +4917.085109 + 20 +10052.233182 + 30 +0.0 + 0 +VERTEX + 5 +14E6 + 8 +DACHZIEGEL + 10 +4915.017105 + 20 +10026.396487 + 30 +0.0 + 0 +VERTEX + 5 +14E7 + 8 +DACHZIEGEL + 10 +4192.08003 + 20 +9693.477439 + 30 +0.0 + 0 +VERTEX + 5 +14E8 + 8 +DACHZIEGEL + 10 +4237.114874 + 20 +9620.495479 + 30 +0.0 + 0 +VERTEX + 5 +14E9 + 8 +DACHZIEGEL + 10 +4267.252486 + 20 +9634.839292 + 30 +0.0 + 0 +VERTEX + 5 +14EA + 8 +DACHZIEGEL + 10 +4267.970027 + 20 +9668.547288 + 30 +0.0 + 0 +VERTEX + 5 +14EB + 8 +DACHZIEGEL + 10 +4305.283271 + 20 +9689.345782 + 30 +0.0 + 0 +VERTEX + 5 +14EC + 8 +DACHZIEGEL + 10 +4329.680332 + 20 +9677.153576 + 30 +0.0 + 0 +VERTEX + 5 +14ED + 8 +DACHZIEGEL + 10 +4348.336954 + 20 +9684.325483 + 30 +0.0 + 0 +VERTEX + 5 +14EE + 8 +DACHZIEGEL + 10 +4350.489689 + 20 +9720.902172 + 30 +0.0 + 0 +VERTEX + 5 +14EF + 8 +DACHZIEGEL + 10 +5028.73062 + 20 +10037.613191 + 30 +0.0 + 0 +SEQEND + 5 +14F0 + 8 +DACHZIEGEL + 0 +POLYLINE + 5 +BDD + 8 +DACHZIEGEL + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +14F1 + 8 +DACHZIEGEL + 10 +5661.691485 + 20 +10434.170613 + 30 +0.0 + 0 +VERTEX + 5 +14F2 + 8 +DACHZIEGEL + 10 +5695.813545 + 20 +10379.396791 + 30 +0.0 + 0 +VERTEX + 5 +14F3 + 8 +DACHZIEGEL + 10 +5745.445744 + 20 +10410.400826 + 30 +0.0 + 0 +VERTEX + 5 +14F4 + 8 +DACHZIEGEL + 10 +5724.765708 + 20 +10492.044796 + 30 +0.0 + 0 +VERTEX + 5 +14F5 + 8 +DACHZIEGEL + 10 +5662.725486 + 20 +10522.015307 + 30 +0.0 + 0 +VERTEX + 5 +14F6 + 8 +DACHZIEGEL + 10 +5631.705431 + 20 +10502.379474 + 30 +0.0 + 0 +VERTEX + 5 +14F7 + 8 +DACHZIEGEL + 10 +5630.67143 + 20 +10471.37544 + 30 +0.0 + 0 +VERTEX + 5 +14F8 + 8 +DACHZIEGEL + 10 +5604.821384 + 20 +10456.906877 + 30 +0.0 + 0 +VERTEX + 5 +14F9 + 8 +DACHZIEGEL + 10 +5581.039342 + 20 +10467.241555 + 30 +0.0 + 0 +VERTEX + 5 +14FA + 8 +DACHZIEGEL + 10 +5553.121181 + 20 +10449.67263 + 30 +0.0 + 0 +VERTEX + 5 +14FB + 8 +DACHZIEGEL + 10 +5551.053177 + 20 +10423.835935 + 30 +0.0 + 0 +VERTEX + 5 +14FC + 8 +DACHZIEGEL + 10 +4828.116102 + 20 +10090.916887 + 30 +0.0 + 0 +VERTEX + 5 +14FD + 8 +DACHZIEGEL + 10 +4873.150946 + 20 +10017.934927 + 30 +0.0 + 0 +VERTEX + 5 +14FE + 8 +DACHZIEGEL + 10 +4903.288558 + 20 +10032.27874 + 30 +0.0 + 0 +VERTEX + 5 +14FF + 8 +DACHZIEGEL + 10 +4904.006099 + 20 +10065.986736 + 30 +0.0 + 0 +VERTEX + 5 +1500 + 8 +DACHZIEGEL + 10 +4941.319343 + 20 +10086.785231 + 30 +0.0 + 0 +VERTEX + 5 +1501 + 8 +DACHZIEGEL + 10 +4965.716404 + 20 +10074.593024 + 30 +0.0 + 0 +VERTEX + 5 +1502 + 8 +DACHZIEGEL + 10 +4984.373027 + 20 +10081.764931 + 30 +0.0 + 0 +VERTEX + 5 +1503 + 8 +DACHZIEGEL + 10 +4986.525761 + 20 +10118.34162 + 30 +0.0 + 0 +VERTEX + 5 +1504 + 8 +DACHZIEGEL + 10 +5664.766692 + 20 +10435.052639 + 30 +0.0 + 0 +SEQEND + 5 +1505 + 8 +DACHZIEGEL + 0 +POLYLINE + 5 +BF3 + 8 +REGENRINNE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +1506 + 8 +REGENRINNE + 10 +4751.85938 + 20 +9780.360132 + 30 +0.0 + 0 +VERTEX + 5 +1507 + 8 +REGENRINNE + 10 +4370.237737 + 20 +9541.896463 + 30 +0.0 + 0 +SEQEND + 5 +1508 + 8 +REGENRINNE + 0 +POLYLINE + 5 +BF7 + 8 +REGENRINNE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +1509 + 8 +REGENRINNE + 10 +4370.237737 + 20 +9541.896463 + 30 +0.0 + 0 +VERTEX + 5 +150A + 8 +REGENRINNE + 10 +4370.237737 + 20 +9435.360132 + 30 +0.0 + 0 +SEQEND + 5 +150B + 8 +REGENRINNE + 0 +ARC + 5 +BFB + 8 +REGENRINNE + 10 +4178.34201 + 20 +9422.824462 + 30 +0.0 + 40 +188.933697 + 50 +163.855305 + 51 +3.804345 + 0 +ARC + 5 +BFC + 8 +REGENRINNE + 10 +3985.192714 + 20 +9473.693466 + 30 +0.0 + 40 +11.785113 + 50 +8.130102 + 51 +225.0 + 0 +ARC + 5 +BFD + 8 +REGENRINNE + 10 +3974.716523 + 20 +9464.645847 + 30 +0.0 + 40 +12.876969 + 50 +176.82017 + 51 +56.309932 + 0 +POLYLINE + 5 +BFE + 8 +REGENRINNE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +BFF + 8 +REGENRINNE + 10 +3961.85938 + 20 +9465.360132 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +C00 + 8 +REGENRINNE + 10 +3961.85938 + 20 +9465.360132 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C01 + 8 +REGENRINNE + 10 +3963.73438 + 20 +9472.181421 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C02 + 8 +REGENRINNE + 10 +3965.60938 + 20 +9477.742945 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C03 + 8 +REGENRINNE + 10 +3967.48438 + 20 +9482.191187 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C04 + 8 +REGENRINNE + 10 +3969.35938 + 20 +9485.672632 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C05 + 8 +REGENRINNE + 10 +3971.23438 + 20 +9488.333765 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C06 + 8 +REGENRINNE + 10 +3973.10938 + 20 +9490.32107 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C07 + 8 +REGENRINNE + 10 +3974.98438 + 20 +9491.781031 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C08 + 8 +REGENRINNE + 10 +3976.85938 + 20 +9492.860132 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C09 + 8 +REGENRINNE + 10 +3978.736822 + 20 +9493.682886 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C0A + 8 +REGENRINNE + 10 +3980.628911 + 20 +9494.285914 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C0B + 8 +REGENRINNE + 10 +3982.550298 + 20 +9494.683863 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C0C + 8 +REGENRINNE + 10 +3984.51563 + 20 +9494.891382 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C0D + 8 +REGENRINNE + 10 +3986.539556 + 20 +9494.923121 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C0E + 8 +REGENRINNE + 10 +3988.636724 + 20 +9494.793726 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C0F + 8 +REGENRINNE + 10 +3990.821783 + 20 +9494.517847 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C10 + 8 +REGENRINNE + 10 +3993.10938 + 20 +9494.110132 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C11 + 8 +REGENRINNE + 10 +3995.494634 + 20 +9493.560816 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C12 + 8 +REGENRINNE + 10 +3997.894536 + 20 +9492.762476 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C13 + 8 +REGENRINNE + 10 +4000.206548 + 20 +9491.583277 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C14 + 8 +REGENRINNE + 10 +4002.32813 + 20 +9489.891382 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C15 + 8 +REGENRINNE + 10 +4004.156743 + 20 +9487.554957 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C16 + 8 +REGENRINNE + 10 +4005.589849 + 20 +9484.442164 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C17 + 8 +REGENRINNE + 10 +4006.524908 + 20 +9480.421168 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C18 + 8 +REGENRINNE + 10 +4006.85938 + 20 +9475.360132 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +C19 + 8 +REGENRINNE + 10 +3966.85938 + 20 +9485.360132 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +C1A + 8 +REGENRINNE + 10 +3976.85938 + 20 +9495.360132 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +C1B + 8 +REGENRINNE + 10 +3991.85938 + 20 +9495.360132 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +C1C + 8 +REGENRINNE + 10 +4006.85938 + 20 +9490.360132 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +C1D + 8 +REGENRINNE + 10 +4006.85938 + 20 +9475.360132 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +C1E + 8 +REGENRINNE + 0 +ARC + 5 +C1F + 8 +REGENRINNE + 10 +4177.065242 + 20 +9431.201026 + 30 +0.0 + 40 +175.841014 + 50 +165.455559 + 51 +6.255194 + 0 +ARC + 5 +C20 + 8 +REGENRINNE + 10 +4339.35938 + 20 +9450.360132 + 30 +0.0 + 40 +12.5 + 50 +0.0 + 51 +180.0 + 0 +LINE + 5 +C21 + 8 +REGENRINNE + 10 +4326.85938 + 20 +9450.360132 + 30 +0.0 + 11 +4326.85938 + 21 +9435.360132 + 31 +0.0 + 0 +POLYLINE + 5 +C22 + 8 +REGENRINNE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +150C + 8 +REGENRINNE + 10 +4356.85938 + 20 +9535.360132 + 30 +0.0 + 0 +VERTEX + 5 +150D + 8 +REGENRINNE + 10 +4356.85938 + 20 +9500.360132 + 30 +0.0 + 0 +VERTEX + 5 +150E + 8 +REGENRINNE + 10 +4316.85938 + 20 +9460.360132 + 30 +0.0 + 0 +VERTEX + 5 +150F + 8 +REGENRINNE + 10 +4316.85938 + 20 +9435.360132 + 30 +0.0 + 0 +SEQEND + 5 +1510 + 8 +REGENRINNE + 0 +ARC + 5 +C28 + 8 +REGENRINNE + 10 +4326.85938 + 20 +9431.193466 + 30 +0.0 + 40 +10.833333 + 50 +157.380135 + 51 +22.619865 + 0 +POLYLINE + 5 +C29 + 8 +REGENRINNE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1511 + 8 +REGENRINNE + 10 +4351.85938 + 20 +9525.360132 + 30 +0.0 + 0 +VERTEX + 5 +1512 + 8 +REGENRINNE + 10 +4366.85938 + 20 +9525.360132 + 30 +0.0 + 0 +SEQEND + 5 +1513 + 8 +REGENRINNE + 0 +POLYLINE + 5 +C2D + 8 +REGENRINNE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1514 + 8 +REGENRINNE + 10 +4351.85938 + 20 +9510.360132 + 30 +0.0 + 0 +VERTEX + 5 +1515 + 8 +REGENRINNE + 10 +4371.85938 + 20 +9510.360132 + 30 +0.0 + 0 +SEQEND + 5 +1516 + 8 +REGENRINNE + 0 +POLYLINE + 5 +C31 + 8 +SCHNITTKANTEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +1517 + 8 +SCHNITTKANTEN + 10 +4736.85938 + 20 +7695.360132 + 30 +0.0 + 0 +VERTEX + 5 +1518 + 8 +SCHNITTKANTEN + 10 +6636.85938 + 20 +7695.360132 + 30 +0.0 + 0 +SEQEND + 5 +1519 + 8 +SCHNITTKANTEN + 0 +POLYLINE + 5 +C35 + 8 +SCHNITTKANTEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +151A + 8 +SCHNITTKANTEN + 10 +8531.85938 + 20 +11010.360132 + 30 +0.0 + 0 +VERTEX + 5 +151B + 8 +SCHNITTKANTEN + 10 +7842.964337 + 20 +12112.822657 + 30 +0.0 + 0 +SEQEND + 5 +151C + 8 +SCHNITTKANTEN + 0 +POLYLINE + 5 +C39 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +151D + 8 +HOLZ + 10 +5339.505129 + 20 +9482.537918 + 30 +0.0 + 0 +VERTEX + 5 +151E + 8 +HOLZ + 10 +5131.977291 + 20 +9352.860132 + 30 +0.0 + 0 +SEQEND + 5 +151F + 8 +HOLZ + 0 +POLYLINE + 5 +C3D + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1520 + 8 +DETAILS + 10 +5315.976103 + 20 +8261.227005 + 30 +0.0 + 0 +VERTEX + 5 +1521 + 8 +DETAILS + 10 +5315.976103 + 20 +8186.227005 + 30 +0.0 + 0 +SEQEND + 5 +1522 + 8 +DETAILS + 0 +POLYLINE + 5 +C41 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1523 + 8 +DETAILS + 10 +5239.35938 + 20 +8298.787465 + 30 +0.0 + 0 +VERTEX + 5 +1524 + 8 +DETAILS + 10 +5239.35938 + 20 +8148.787465 + 30 +0.0 + 0 +SEQEND + 5 +1525 + 8 +DETAILS + 0 +POLYLINE + 5 +C45 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1526 + 8 +DETAILS + 10 +5126.85938 + 20 +8223.787465 + 30 +0.0 + 0 +VERTEX + 5 +1527 + 8 +DETAILS + 10 +5189.35938 + 20 +8223.787465 + 30 +0.0 + 0 +SEQEND + 5 +1528 + 8 +DETAILS + 0 +POLYLINE + 5 +C49 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1529 + 8 +DETAILS + 10 +5014.35938 + 20 +8223.787465 + 30 +0.0 + 0 +VERTEX + 5 +152A + 8 +DETAILS + 10 +5089.35938 + 20 +8223.787465 + 30 +0.0 + 0 +SEQEND + 5 +152B + 8 +DETAILS + 0 +POLYLINE + 5 +C4D + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +152C + 8 +DETAILS + 10 +5376.85938 + 20 +8223.787465 + 30 +0.0 + 0 +VERTEX + 5 +152D + 8 +DETAILS + 10 +5439.35938 + 20 +8223.787465 + 30 +0.0 + 0 +SEQEND + 5 +152E + 8 +DETAILS + 0 +POLYLINE + 5 +C51 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +152F + 8 +DETAILS + 10 +5201.85938 + 20 +8223.787465 + 30 +0.0 + 0 +VERTEX + 5 +1530 + 8 +DETAILS + 10 +5339.35938 + 20 +8223.787465 + 30 +0.0 + 0 +SEQEND + 5 +1531 + 8 +DETAILS + 0 +POLYLINE + 5 +C55 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1532 + 8 +DETAILS + 10 +5689.35938 + 20 +8223.787465 + 30 +0.0 + 0 +VERTEX + 5 +1533 + 8 +DETAILS + 10 +5764.35938 + 20 +8223.787465 + 30 +0.0 + 0 +SEQEND + 5 +1534 + 8 +DETAILS + 0 +POLYLINE + 5 +C59 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1535 + 8 +DETAILS + 10 +5589.35938 + 20 +8223.787465 + 30 +0.0 + 0 +VERTEX + 5 +1536 + 8 +DETAILS + 10 +5639.35938 + 20 +8223.787465 + 30 +0.0 + 0 +SEQEND + 5 +1537 + 8 +DETAILS + 0 +POLYLINE + 5 +C5D + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1538 + 8 +DETAILS + 10 +5476.85938 + 20 +8223.787465 + 30 +0.0 + 0 +VERTEX + 5 +1539 + 8 +DETAILS + 10 +5539.35938 + 20 +8223.787465 + 30 +0.0 + 0 +SEQEND + 5 +153A + 8 +DETAILS + 0 +INSERT + 5 +C61 + 8 +SCHRAFFUR + 2 +*X5 + 10 +-743.14062 + 20 +-614.639868 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +450.0 +1040 +0.0 +1002 +} + 0 +INSERT + 5 +C62 + 8 +SCHRAFFUR + 2 +*X6 + 10 +-743.14062 + 20 +-614.639868 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +1200.0 +1040 +0.0 +1002 +} + 0 +POLYLINE + 5 +C63 + 8 +DACHZIEGEL + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +153B + 8 +DACHZIEGEL + 10 +7947.477152 + 20 +11945.56719 + 30 +0.0 + 0 +VERTEX + 5 +153C + 8 +DACHZIEGEL + 10 +7372.26039 + 20 +11680.67468 + 30 +0.0 + 0 +VERTEX + 5 +153D + 8 +DACHZIEGEL + 10 +7417.295234 + 20 +11607.69272 + 30 +0.0 + 0 +VERTEX + 5 +153E + 8 +DACHZIEGEL + 10 +7447.432846 + 20 +11622.036533 + 30 +0.0 + 0 +VERTEX + 5 +153F + 8 +DACHZIEGEL + 10 +7448.150387 + 20 +11655.744529 + 30 +0.0 + 0 +VERTEX + 5 +1540 + 8 +DACHZIEGEL + 10 +7485.463631 + 20 +11676.543023 + 30 +0.0 + 0 +VERTEX + 5 +1541 + 8 +DACHZIEGEL + 10 +7509.860693 + 20 +11664.350817 + 30 +0.0 + 0 +VERTEX + 5 +1542 + 8 +DACHZIEGEL + 10 +7528.517315 + 20 +11671.522724 + 30 +0.0 + 0 +VERTEX + 5 +1543 + 8 +DACHZIEGEL + 10 +7530.670049 + 20 +11708.099412 + 30 +0.0 + 0 +VERTEX + 5 +1544 + 8 +DACHZIEGEL + 10 +7968.197842 + 20 +11912.407155 + 30 +0.0 + 0 +SEQEND + 5 +1545 + 8 +DACHZIEGEL + 0 +POLYLINE + 5 +C6F + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1546 + 8 +HOLZ + 10 +4486.086736 + 20 +9510.786108 + 30 +0.0 + 0 +VERTEX + 5 +1547 + 8 +HOLZ + 10 +8069.652157 + 20 +11750.046311 + 30 +0.0 + 0 +SEQEND + 5 +1548 + 8 +HOLZ + 0 +POLYLINE + 5 +C73 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1549 + 8 +HOLZ + 10 +8029.908213 + 20 +11813.649918 + 30 +0.0 + 0 +VERTEX + 5 +154A + 8 +HOLZ + 10 +4446.342791 + 20 +9574.389715 + 30 +0.0 + 0 +VERTEX + 5 +154B + 8 +HOLZ + 10 +4486.086736 + 20 +9510.786108 + 30 +0.0 + 0 +SEQEND + 5 +154C + 8 +HOLZ + 0 +POLYLINE + 5 +C78 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +154D + 8 +HOLZ + 10 +4901.85938 + 20 +9209.066503 + 30 +0.0 + 0 +VERTEX + 5 +154E + 8 +HOLZ + 10 +4739.353384 + 20 +9107.521486 + 30 +0.0 + 0 +VERTEX + 5 +154F + 8 +HOLZ + 10 +4505.134848 + 20 +9481.314131 + 30 +0.0 + 0 +VERTEX + 5 +1550 + 8 +HOLZ + 10 +4702.640358 + 20 +9615.210923 + 30 +0.0 + 0 +VERTEX + 5 +1551 + 8 +HOLZ + 10 +8083.535338 + 20 +11727.828578 + 30 +0.0 + 0 +SEQEND + 5 +1552 + 8 +HOLZ + 0 +POLYLINE + 5 +C7F + 8 +PE-FOLIE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +25.0 + 41 +25.0 + 0 +VERTEX + 5 +1553 + 8 +PE-FOLIE + 10 +4488.893741 + 20 +9491.569591 + 30 +0.0 + 0 +VERTEX + 5 +1554 + 8 +PE-FOLIE + 10 +8075.530951 + 20 +11740.638274 + 30 +0.0 + 0 +SEQEND + 5 +1555 + 8 +PE-FOLIE + 0 +POLYLINE + 5 +C83 + 8 +DAEMMUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1556 + 8 +DAEMMUNG + 10 +8162.82995 + 20 +11600.930672 + 30 +0.0 + 0 +VERTEX + 5 +1557 + 8 +DAEMMUNG + 10 +5333.043986 + 20 +9831.572016 + 30 +0.0 + 0 +VERTEX + 5 +1558 + 8 +DAEMMUNG + 10 +5341.298947 + 20 +9352.860132 + 30 +0.0 + 0 +SEQEND + 5 +1559 + 8 +DAEMMUNG + 0 +POLYLINE + 5 +C88 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +155A + 8 +HOLZ + 10 +8321.999007 + 20 +11346.206934 + 30 +0.0 + 0 +VERTEX + 5 +155B + 8 +HOLZ + 10 +5912.140374 + 20 +9840.360132 + 30 +0.0 + 0 +SEQEND + 5 +155C + 8 +HOLZ + 0 +POLYLINE + 5 +C8C + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +155D + 8 +HOLZ + 10 +8360.89771 + 20 +11283.955996 + 30 +0.0 + 0 +VERTEX + 5 +155E + 8 +HOLZ + 10 +6050.661403 + 20 +9840.360132 + 30 +0.0 + 0 +SEQEND + 5 +155F + 8 +HOLZ + 0 +POLYLINE + 5 +C90 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1560 + 8 +HOLZ + 10 +5956.34925 + 20 +9840.360132 + 30 +0.0 + 0 +VERTEX + 5 +1561 + 8 +HOLZ + 10 +8336.428273 + 20 +11323.115282 + 30 +0.0 + 0 +SEQEND + 5 +1562 + 8 +HOLZ + 0 +POLYLINE + 5 +C94 + 8 +PE-FOLIE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +25.0 + 41 +25.0 + 0 +VERTEX + 5 +1563 + 8 +PE-FOLIE + 10 +8327.649049 + 20 +11337.164977 + 30 +0.0 + 0 +VERTEX + 5 +1564 + 8 +PE-FOLIE + 10 +5932.260573 + 20 +9840.360132 + 30 +0.0 + 0 +SEQEND + 5 +1565 + 8 +PE-FOLIE + 0 +LINE + 5 +C98 + 8 +0 + 62 + 0 + 10 +5339.626437 + 20 +9712.713027 + 30 +0.0 + 11 +5388.10938 + 21 +9712.713027 + 31 +0.0 + 0 +LINE + 5 +C99 + 8 +0 + 62 + 0 + 10 +5500.60938 + 20 +9712.713027 + 30 +0.0 + 11 +5556.85938 + 21 +9712.713027 + 31 +0.0 + 0 +LINE + 5 +C9A + 8 +0 + 62 + 0 + 10 +5669.35938 + 20 +9712.713027 + 30 +0.0 + 11 +5725.60938 + 21 +9712.713027 + 31 +0.0 + 0 +LINE + 5 +C9B + 8 +0 + 62 + 0 + 10 +5416.23438 + 20 +9761.426956 + 30 +0.0 + 11 +5472.48438 + 21 +9761.426956 + 31 +0.0 + 0 +LINE + 5 +C9C + 8 +0 + 62 + 0 + 10 +5584.98438 + 20 +9761.426956 + 30 +0.0 + 11 +5641.23438 + 21 +9761.426956 + 31 +0.0 + 0 +LINE + 5 +C9D + 8 +0 + 62 + 0 + 10 +5753.73438 + 20 +9761.426956 + 30 +0.0 + 11 +5770.340609 + 21 +9761.426956 + 31 +0.0 + 0 +LINE + 5 +C9E + 8 +0 + 62 + 0 + 10 +5339.979617 + 20 +9810.140885 + 30 +0.0 + 11 +5388.10938 + 21 +9810.140885 + 31 +0.0 + 0 +LINE + 5 +C9F + 8 +0 + 62 + 0 + 10 +5500.60938 + 20 +9810.140885 + 30 +0.0 + 11 +5556.85938 + 21 +9810.140885 + 31 +0.0 + 0 +LINE + 5 +CA0 + 8 +0 + 62 + 0 + 10 +5669.35938 + 20 +9810.140885 + 30 +0.0 + 11 +5725.60938 + 21 +9810.140885 + 31 +0.0 + 0 +LINE + 5 +CA1 + 8 +0 + 62 + 0 + 10 +5416.23438 + 20 +9858.854814 + 30 +0.0 + 11 +5472.48438 + 21 +9858.854814 + 31 +0.0 + 0 +LINE + 5 +CA2 + 8 +0 + 62 + 0 + 10 +5584.98438 + 20 +9858.854814 + 30 +0.0 + 11 +5641.23438 + 21 +9858.854814 + 31 +0.0 + 0 +LINE + 5 +CA3 + 8 +0 + 62 + 0 + 10 +5753.73438 + 20 +9858.854814 + 30 +0.0 + 11 +5809.98438 + 21 +9858.854814 + 31 +0.0 + 0 +LINE + 5 +CA4 + 8 +0 + 62 + 0 + 10 +5922.48438 + 20 +9858.854814 + 30 +0.0 + 11 +5951.087016 + 21 +9858.854814 + 31 +0.0 + 0 +LINE + 5 +CA5 + 8 +0 + 62 + 0 + 10 +5500.60938 + 20 +9907.568742 + 30 +0.0 + 11 +5556.85938 + 21 +9907.568742 + 31 +0.0 + 0 +LINE + 5 +CA6 + 8 +0 + 62 + 0 + 10 +5669.35938 + 20 +9907.568742 + 30 +0.0 + 11 +5725.60938 + 21 +9907.568742 + 31 +0.0 + 0 +LINE + 5 +CA7 + 8 +0 + 62 + 0 + 10 +5838.10938 + 20 +9907.568742 + 30 +0.0 + 11 +5894.35938 + 21 +9907.568742 + 31 +0.0 + 0 +LINE + 5 +CA8 + 8 +0 + 62 + 0 + 10 +6006.85938 + 20 +9907.568742 + 30 +0.0 + 11 +6028.067539 + 21 +9907.568742 + 31 +0.0 + 0 +LINE + 5 +CA9 + 8 +0 + 62 + 0 + 10 +5584.98438 + 20 +9956.282671 + 30 +0.0 + 11 +5641.23438 + 21 +9956.282671 + 31 +0.0 + 0 +LINE + 5 +CAA + 8 +0 + 62 + 0 + 10 +5753.73438 + 20 +9956.282671 + 30 +0.0 + 11 +5809.98438 + 21 +9956.282671 + 31 +0.0 + 0 +LINE + 5 +CAB + 8 +0 + 62 + 0 + 10 +5922.48438 + 20 +9956.282671 + 30 +0.0 + 11 +5978.73438 + 21 +9956.282671 + 31 +0.0 + 0 +LINE + 5 +CAC + 8 +0 + 62 + 0 + 10 +6091.23438 + 20 +9956.282671 + 30 +0.0 + 11 +6105.048062 + 21 +9956.282671 + 31 +0.0 + 0 +LINE + 5 +CAD + 8 +0 + 62 + 0 + 10 +5669.35938 + 20 +10004.9966 + 30 +0.0 + 11 +5725.60938 + 21 +10004.9966 + 31 +0.0 + 0 +LINE + 5 +CAE + 8 +0 + 62 + 0 + 10 +5838.10938 + 20 +10004.9966 + 30 +0.0 + 11 +5894.35938 + 21 +10004.9966 + 31 +0.0 + 0 +LINE + 5 +CAF + 8 +0 + 62 + 0 + 10 +6006.85938 + 20 +10004.9966 + 30 +0.0 + 11 +6063.10938 + 21 +10004.9966 + 31 +0.0 + 0 +LINE + 5 +CB0 + 8 +0 + 62 + 0 + 10 +6175.60938 + 20 +10004.9966 + 30 +0.0 + 11 +6182.028585 + 21 +10004.9966 + 31 +0.0 + 0 +LINE + 5 +CB1 + 8 +0 + 62 + 0 + 10 +5753.73438 + 20 +10053.710529 + 30 +0.0 + 11 +5809.98438 + 21 +10053.710529 + 31 +0.0 + 0 +LINE + 5 +CB2 + 8 +0 + 62 + 0 + 10 +5922.48438 + 20 +10053.710529 + 30 +0.0 + 11 +5978.73438 + 21 +10053.710529 + 31 +0.0 + 0 +LINE + 5 +CB3 + 8 +0 + 62 + 0 + 10 +6091.23438 + 20 +10053.710529 + 30 +0.0 + 11 +6147.48438 + 21 +10053.710529 + 31 +0.0 + 0 +LINE + 5 +CB4 + 8 +0 + 62 + 0 + 10 +5838.10938 + 20 +10102.424457 + 30 +0.0 + 11 +5894.35938 + 21 +10102.424457 + 31 +0.0 + 0 +LINE + 5 +CB5 + 8 +0 + 62 + 0 + 10 +6006.85938 + 20 +10102.424457 + 30 +0.0 + 11 +6063.10938 + 21 +10102.424457 + 31 +0.0 + 0 +LINE + 5 +CB6 + 8 +0 + 62 + 0 + 10 +6175.60938 + 20 +10102.424457 + 30 +0.0 + 11 +6231.85938 + 21 +10102.424457 + 31 +0.0 + 0 +LINE + 5 +CB7 + 8 +0 + 62 + 0 + 10 +5922.48438 + 20 +10151.138386 + 30 +0.0 + 11 +5978.73438 + 21 +10151.138386 + 31 +0.0 + 0 +LINE + 5 +CB8 + 8 +0 + 62 + 0 + 10 +6091.23438 + 20 +10151.138386 + 30 +0.0 + 11 +6147.48438 + 21 +10151.138386 + 31 +0.0 + 0 +LINE + 5 +CB9 + 8 +0 + 62 + 0 + 10 +6259.98438 + 20 +10151.138386 + 30 +0.0 + 11 +6316.23438 + 21 +10151.138386 + 31 +0.0 + 0 +LINE + 5 +CBA + 8 +0 + 62 + 0 + 10 +6006.85938 + 20 +10199.852315 + 30 +0.0 + 11 +6063.10938 + 21 +10199.852315 + 31 +0.0 + 0 +LINE + 5 +CBB + 8 +0 + 62 + 0 + 10 +6175.60938 + 20 +10199.852315 + 30 +0.0 + 11 +6231.85938 + 21 +10199.852315 + 31 +0.0 + 0 +LINE + 5 +CBC + 8 +0 + 62 + 0 + 10 +6344.35938 + 20 +10199.852315 + 30 +0.0 + 11 +6400.60938 + 21 +10199.852315 + 31 +0.0 + 0 +LINE + 5 +CBD + 8 +0 + 62 + 0 + 10 +6091.23438 + 20 +10248.566244 + 30 +0.0 + 11 +6147.48438 + 21 +10248.566244 + 31 +0.0 + 0 +LINE + 5 +CBE + 8 +0 + 62 + 0 + 10 +6259.98438 + 20 +10248.566244 + 30 +0.0 + 11 +6316.23438 + 21 +10248.566244 + 31 +0.0 + 0 +LINE + 5 +CBF + 8 +0 + 62 + 0 + 10 +6428.73438 + 20 +10248.566244 + 30 +0.0 + 11 +6484.98438 + 21 +10248.566244 + 31 +0.0 + 0 +LINE + 5 +CC0 + 8 +0 + 62 + 0 + 10 +6175.60938 + 20 +10297.280172 + 30 +0.0 + 11 +6231.85938 + 21 +10297.280172 + 31 +0.0 + 0 +LINE + 5 +CC1 + 8 +0 + 62 + 0 + 10 +6344.35938 + 20 +10297.280172 + 30 +0.0 + 11 +6400.60938 + 21 +10297.280172 + 31 +0.0 + 0 +LINE + 5 +CC2 + 8 +0 + 62 + 0 + 10 +6513.10938 + 20 +10297.280172 + 30 +0.0 + 11 +6569.35938 + 21 +10297.280172 + 31 +0.0 + 0 +LINE + 5 +CC3 + 8 +0 + 62 + 0 + 10 +6259.98438 + 20 +10345.994101 + 30 +0.0 + 11 +6316.23438 + 21 +10345.994101 + 31 +0.0 + 0 +LINE + 5 +CC4 + 8 +0 + 62 + 0 + 10 +6428.73438 + 20 +10345.994101 + 30 +0.0 + 11 +6484.98438 + 21 +10345.994101 + 31 +0.0 + 0 +LINE + 5 +CC5 + 8 +0 + 62 + 0 + 10 +6597.48438 + 20 +10345.994101 + 30 +0.0 + 11 +6653.73438 + 21 +10345.994101 + 31 +0.0 + 0 +LINE + 5 +CC6 + 8 +0 + 62 + 0 + 10 +6344.35938 + 20 +10394.70803 + 30 +0.0 + 11 +6400.60938 + 21 +10394.70803 + 31 +0.0 + 0 +LINE + 5 +CC7 + 8 +0 + 62 + 0 + 10 +6513.10938 + 20 +10394.70803 + 30 +0.0 + 11 +6569.35938 + 21 +10394.70803 + 31 +0.0 + 0 +LINE + 5 +CC8 + 8 +0 + 62 + 0 + 10 +6681.85938 + 20 +10394.70803 + 30 +0.0 + 11 +6738.10938 + 21 +10394.70803 + 31 +0.0 + 0 +LINE + 5 +CC9 + 8 +0 + 62 + 0 + 10 +6315.424265 + 20 +10443.421959 + 30 +0.0 + 11 +6316.23438 + 21 +10443.421959 + 31 +0.0 + 0 +LINE + 5 +CCA + 8 +0 + 62 + 0 + 10 +6428.73438 + 20 +10443.421959 + 30 +0.0 + 11 +6484.98438 + 21 +10443.421959 + 31 +0.0 + 0 +LINE + 5 +CCB + 8 +0 + 62 + 0 + 10 +6597.48438 + 20 +10443.421959 + 30 +0.0 + 11 +6653.73438 + 21 +10443.421959 + 31 +0.0 + 0 +LINE + 5 +CCC + 8 +0 + 62 + 0 + 10 +6766.23438 + 20 +10443.421959 + 30 +0.0 + 11 +6822.48438 + 21 +10443.421959 + 31 +0.0 + 0 +LINE + 5 +CCD + 8 +0 + 62 + 0 + 10 +6393.446207 + 20 +10492.135887 + 30 +0.0 + 11 +6400.60938 + 21 +10492.135887 + 31 +0.0 + 0 +LINE + 5 +CCE + 8 +0 + 62 + 0 + 10 +6513.10938 + 20 +10492.135887 + 30 +0.0 + 11 +6569.35938 + 21 +10492.135887 + 31 +0.0 + 0 +LINE + 5 +CCF + 8 +0 + 62 + 0 + 10 +6681.85938 + 20 +10492.135887 + 30 +0.0 + 11 +6738.10938 + 21 +10492.135887 + 31 +0.0 + 0 +LINE + 5 +CD0 + 8 +0 + 62 + 0 + 10 +6850.60938 + 20 +10492.135887 + 30 +0.0 + 11 +6906.85938 + 21 +10492.135887 + 31 +0.0 + 0 +LINE + 5 +CD1 + 8 +0 + 62 + 0 + 10 +6471.46815 + 20 +10540.849816 + 30 +0.0 + 11 +6484.98438 + 21 +10540.849816 + 31 +0.0 + 0 +LINE + 5 +CD2 + 8 +0 + 62 + 0 + 10 +6597.48438 + 20 +10540.849816 + 30 +0.0 + 11 +6653.73438 + 21 +10540.849816 + 31 +0.0 + 0 +LINE + 5 +CD3 + 8 +0 + 62 + 0 + 10 +6766.23438 + 20 +10540.849816 + 30 +0.0 + 11 +6822.48438 + 21 +10540.849816 + 31 +0.0 + 0 +LINE + 5 +CD4 + 8 +0 + 62 + 0 + 10 +6934.98438 + 20 +10540.849816 + 30 +0.0 + 11 +6991.23438 + 21 +10540.849816 + 31 +0.0 + 0 +LINE + 5 +CD5 + 8 +0 + 62 + 0 + 10 +6549.490092 + 20 +10589.563745 + 30 +0.0 + 11 +6569.35938 + 21 +10589.563745 + 31 +0.0 + 0 +LINE + 5 +CD6 + 8 +0 + 62 + 0 + 10 +6681.85938 + 20 +10589.563745 + 30 +0.0 + 11 +6738.10938 + 21 +10589.563745 + 31 +0.0 + 0 +LINE + 5 +CD7 + 8 +0 + 62 + 0 + 10 +6850.60938 + 20 +10589.563745 + 30 +0.0 + 11 +6906.85938 + 21 +10589.563745 + 31 +0.0 + 0 +LINE + 5 +CD8 + 8 +0 + 62 + 0 + 10 +7019.35938 + 20 +10589.563745 + 30 +0.0 + 11 +7075.60938 + 21 +10589.563745 + 31 +0.0 + 0 +LINE + 5 +CD9 + 8 +0 + 62 + 0 + 10 +6627.512035 + 20 +10638.277674 + 30 +0.0 + 11 +6653.73438 + 21 +10638.277674 + 31 +0.0 + 0 +LINE + 5 +CDA + 8 +0 + 62 + 0 + 10 +6766.23438 + 20 +10638.277674 + 30 +0.0 + 11 +6822.48438 + 21 +10638.277674 + 31 +0.0 + 0 +LINE + 5 +CDB + 8 +0 + 62 + 0 + 10 +6934.98438 + 20 +10638.277674 + 30 +0.0 + 11 +6991.23438 + 21 +10638.277674 + 31 +0.0 + 0 +LINE + 5 +CDC + 8 +0 + 62 + 0 + 10 +7103.73438 + 20 +10638.277674 + 30 +0.0 + 11 +7159.98438 + 21 +10638.277674 + 31 +0.0 + 0 +LINE + 5 +CDD + 8 +0 + 62 + 0 + 10 +6705.533977 + 20 +10686.991602 + 30 +0.0 + 11 +6738.10938 + 21 +10686.991602 + 31 +0.0 + 0 +LINE + 5 +CDE + 8 +0 + 62 + 0 + 10 +6850.60938 + 20 +10686.991602 + 30 +0.0 + 11 +6906.85938 + 21 +10686.991602 + 31 +0.0 + 0 +LINE + 5 +CDF + 8 +0 + 62 + 0 + 10 +7019.35938 + 20 +10686.991602 + 30 +0.0 + 11 +7075.60938 + 21 +10686.991602 + 31 +0.0 + 0 +LINE + 5 +CE0 + 8 +0 + 62 + 0 + 10 +7188.10938 + 20 +10686.991602 + 30 +0.0 + 11 +7244.35938 + 21 +10686.991602 + 31 +0.0 + 0 +LINE + 5 +CE1 + 8 +0 + 62 + 0 + 10 +6783.55592 + 20 +10735.705531 + 30 +0.0 + 11 +6822.48438 + 21 +10735.705531 + 31 +0.0 + 0 +LINE + 5 +CE2 + 8 +0 + 62 + 0 + 10 +6934.98438 + 20 +10735.705531 + 30 +0.0 + 11 +6991.23438 + 21 +10735.705531 + 31 +0.0 + 0 +LINE + 5 +CE3 + 8 +0 + 62 + 0 + 10 +7103.73438 + 20 +10735.705531 + 30 +0.0 + 11 +7159.98438 + 21 +10735.705531 + 31 +0.0 + 0 +LINE + 5 +CE4 + 8 +0 + 62 + 0 + 10 +7272.48438 + 20 +10735.705531 + 30 +0.0 + 11 +7328.73438 + 21 +10735.705531 + 31 +0.0 + 0 +LINE + 5 +CE5 + 8 +0 + 62 + 0 + 10 +6861.577862 + 20 +10784.41946 + 30 +0.0 + 11 +6906.85938 + 21 +10784.41946 + 31 +0.0 + 0 +LINE + 5 +CE6 + 8 +0 + 62 + 0 + 10 +7019.35938 + 20 +10784.41946 + 30 +0.0 + 11 +7075.60938 + 21 +10784.41946 + 31 +0.0 + 0 +LINE + 5 +CE7 + 8 +0 + 62 + 0 + 10 +7188.10938 + 20 +10784.41946 + 30 +0.0 + 11 +7244.35938 + 21 +10784.41946 + 31 +0.0 + 0 +LINE + 5 +CE8 + 8 +0 + 62 + 0 + 10 +7356.85938 + 20 +10784.41946 + 30 +0.0 + 11 +7413.10938 + 21 +10784.41946 + 31 +0.0 + 0 +LINE + 5 +CE9 + 8 +0 + 62 + 0 + 10 +6939.599804 + 20 +10833.133389 + 30 +0.0 + 11 +6991.23438 + 21 +10833.133389 + 31 +0.0 + 0 +LINE + 5 +CEA + 8 +0 + 62 + 0 + 10 +7103.73438 + 20 +10833.133389 + 30 +0.0 + 11 +7159.98438 + 21 +10833.133389 + 31 +0.0 + 0 +LINE + 5 +CEB + 8 +0 + 62 + 0 + 10 +7272.48438 + 20 +10833.133389 + 30 +0.0 + 11 +7328.73438 + 21 +10833.133389 + 31 +0.0 + 0 +LINE + 5 +CEC + 8 +0 + 62 + 0 + 10 +7441.23438 + 20 +10833.133389 + 30 +0.0 + 11 +7490.697474 + 21 +10833.133389 + 31 +0.0 + 0 +LINE + 5 +CED + 8 +0 + 62 + 0 + 10 +7019.35938 + 20 +10881.847317 + 30 +0.0 + 11 +7075.60938 + 21 +10881.847317 + 31 +0.0 + 0 +LINE + 5 +CEE + 8 +0 + 62 + 0 + 10 +7188.10938 + 20 +10881.847317 + 30 +0.0 + 11 +7244.35938 + 21 +10881.847317 + 31 +0.0 + 0 +LINE + 5 +CEF + 8 +0 + 62 + 0 + 10 +7356.85938 + 20 +10881.847317 + 30 +0.0 + 11 +7413.10938 + 21 +10881.847317 + 31 +0.0 + 0 +LINE + 5 +CF0 + 8 +0 + 62 + 0 + 10 +7525.60938 + 20 +10881.847317 + 30 +0.0 + 11 +7567.677996 + 21 +10881.847317 + 31 +0.0 + 0 +LINE + 5 +CF1 + 8 +0 + 62 + 0 + 10 +7103.73438 + 20 +10930.561246 + 30 +0.0 + 11 +7159.98438 + 21 +10930.561246 + 31 +0.0 + 0 +LINE + 5 +CF2 + 8 +0 + 62 + 0 + 10 +7272.48438 + 20 +10930.561246 + 30 +0.0 + 11 +7328.73438 + 21 +10930.561246 + 31 +0.0 + 0 +LINE + 5 +CF3 + 8 +0 + 62 + 0 + 10 +7441.23438 + 20 +10930.561246 + 30 +0.0 + 11 +7497.48438 + 21 +10930.561246 + 31 +0.0 + 0 +LINE + 5 +CF4 + 8 +0 + 62 + 0 + 10 +7609.98438 + 20 +10930.561246 + 30 +0.0 + 11 +7644.658519 + 21 +10930.561246 + 31 +0.0 + 0 +LINE + 5 +CF5 + 8 +0 + 62 + 0 + 10 +7188.10938 + 20 +10979.275175 + 30 +0.0 + 11 +7244.35938 + 21 +10979.275175 + 31 +0.0 + 0 +LINE + 5 +CF6 + 8 +0 + 62 + 0 + 10 +7356.85938 + 20 +10979.275175 + 30 +0.0 + 11 +7413.10938 + 21 +10979.275175 + 31 +0.0 + 0 +LINE + 5 +CF7 + 8 +0 + 62 + 0 + 10 +7525.60938 + 20 +10979.275175 + 30 +0.0 + 11 +7581.85938 + 21 +10979.275175 + 31 +0.0 + 0 +LINE + 5 +CF8 + 8 +0 + 62 + 0 + 10 +7694.35938 + 20 +10979.275175 + 30 +0.0 + 11 +7721.639042 + 21 +10979.275175 + 31 +0.0 + 0 +LINE + 5 +CF9 + 8 +0 + 62 + 0 + 10 +7272.48438 + 20 +11027.989104 + 30 +0.0 + 11 +7328.73438 + 21 +11027.989104 + 31 +0.0 + 0 +LINE + 5 +CFA + 8 +0 + 62 + 0 + 10 +7441.23438 + 20 +11027.989104 + 30 +0.0 + 11 +7497.48438 + 21 +11027.989104 + 31 +0.0 + 0 +LINE + 5 +CFB + 8 +0 + 62 + 0 + 10 +7609.98438 + 20 +11027.989104 + 30 +0.0 + 11 +7666.23438 + 21 +11027.989104 + 31 +0.0 + 0 +LINE + 5 +CFC + 8 +0 + 62 + 0 + 10 +7778.73438 + 20 +11027.989104 + 30 +0.0 + 11 +7798.619565 + 21 +11027.989104 + 31 +0.0 + 0 +LINE + 5 +CFD + 8 +0 + 62 + 0 + 10 +7356.85938 + 20 +11076.703032 + 30 +0.0 + 11 +7413.10938 + 21 +11076.703032 + 31 +0.0 + 0 +LINE + 5 +CFE + 8 +0 + 62 + 0 + 10 +7525.60938 + 20 +11076.703032 + 30 +0.0 + 11 +7581.85938 + 21 +11076.703032 + 31 +0.0 + 0 +LINE + 5 +CFF + 8 +0 + 62 + 0 + 10 +7694.35938 + 20 +11076.703032 + 30 +0.0 + 11 +7750.60938 + 21 +11076.703032 + 31 +0.0 + 0 +LINE + 5 +D00 + 8 +0 + 62 + 0 + 10 +7863.10938 + 20 +11076.703032 + 30 +0.0 + 11 +7875.600088 + 21 +11076.703032 + 31 +0.0 + 0 +LINE + 5 +D01 + 8 +0 + 62 + 0 + 10 +7441.23438 + 20 +11125.416961 + 30 +0.0 + 11 +7497.48438 + 21 +11125.416961 + 31 +0.0 + 0 +LINE + 5 +D02 + 8 +0 + 62 + 0 + 10 +7609.98438 + 20 +11125.416961 + 30 +0.0 + 11 +7666.23438 + 21 +11125.416961 + 31 +0.0 + 0 +LINE + 5 +D03 + 8 +0 + 62 + 0 + 10 +7778.73438 + 20 +11125.416961 + 30 +0.0 + 11 +7834.98438 + 21 +11125.416961 + 31 +0.0 + 0 +LINE + 5 +D04 + 8 +0 + 62 + 0 + 10 +7947.48438 + 20 +11125.416961 + 30 +0.0 + 11 +7952.580611 + 21 +11125.416961 + 31 +0.0 + 0 +LINE + 5 +D05 + 8 +0 + 62 + 0 + 10 +7525.60938 + 20 +11174.13089 + 30 +0.0 + 11 +7581.85938 + 21 +11174.13089 + 31 +0.0 + 0 +LINE + 5 +D06 + 8 +0 + 62 + 0 + 10 +7694.35938 + 20 +11174.13089 + 30 +0.0 + 11 +7750.60938 + 21 +11174.13089 + 31 +0.0 + 0 +LINE + 5 +D07 + 8 +0 + 62 + 0 + 10 +7863.10938 + 20 +11174.13089 + 30 +0.0 + 11 +7919.35938 + 21 +11174.13089 + 31 +0.0 + 0 +LINE + 5 +D08 + 8 +0 + 62 + 0 + 10 +7609.98438 + 20 +11222.844819 + 30 +0.0 + 11 +7666.23438 + 21 +11222.844819 + 31 +0.0 + 0 +LINE + 5 +D09 + 8 +0 + 62 + 0 + 10 +7778.73438 + 20 +11222.844819 + 30 +0.0 + 11 +7834.98438 + 21 +11222.844819 + 31 +0.0 + 0 +LINE + 5 +D0A + 8 +0 + 62 + 0 + 10 +7947.48438 + 20 +11222.844819 + 30 +0.0 + 11 +8003.73438 + 21 +11222.844819 + 31 +0.0 + 0 +LINE + 5 +D0B + 8 +0 + 62 + 0 + 10 +7694.35938 + 20 +11271.558747 + 30 +0.0 + 11 +7750.60938 + 21 +11271.558747 + 31 +0.0 + 0 +LINE + 5 +D0C + 8 +0 + 62 + 0 + 10 +7863.10938 + 20 +11271.558747 + 30 +0.0 + 11 +7919.35938 + 21 +11271.558747 + 31 +0.0 + 0 +LINE + 5 +D0D + 8 +0 + 62 + 0 + 10 +8031.85938 + 20 +11271.558747 + 30 +0.0 + 11 +8088.10938 + 21 +11271.558747 + 31 +0.0 + 0 +LINE + 5 +D0E + 8 +0 + 62 + 0 + 10 +7778.73438 + 20 +11320.272676 + 30 +0.0 + 11 +7834.98438 + 21 +11320.272676 + 31 +0.0 + 0 +LINE + 5 +D0F + 8 +0 + 62 + 0 + 10 +7947.48438 + 20 +11320.272676 + 30 +0.0 + 11 +8003.73438 + 21 +11320.272676 + 31 +0.0 + 0 +LINE + 5 +D10 + 8 +0 + 62 + 0 + 10 +8116.23438 + 20 +11320.272676 + 30 +0.0 + 11 +8172.48438 + 21 +11320.272676 + 31 +0.0 + 0 +LINE + 5 +D11 + 8 +0 + 62 + 0 + 10 +7863.10938 + 20 +11368.986605 + 30 +0.0 + 11 +7919.35938 + 21 +11368.986605 + 31 +0.0 + 0 +LINE + 5 +D12 + 8 +0 + 62 + 0 + 10 +8031.85938 + 20 +11368.986605 + 30 +0.0 + 11 +8088.10938 + 21 +11368.986605 + 31 +0.0 + 0 +LINE + 5 +D13 + 8 +0 + 62 + 0 + 10 +8200.60938 + 20 +11368.986605 + 30 +0.0 + 11 +8256.85938 + 21 +11368.986605 + 31 +0.0 + 0 +LINE + 5 +D14 + 8 +0 + 62 + 0 + 10 +7947.48438 + 20 +11417.700534 + 30 +0.0 + 11 +8003.73438 + 21 +11417.700534 + 31 +0.0 + 0 +LINE + 5 +D15 + 8 +0 + 62 + 0 + 10 +8116.23438 + 20 +11417.700534 + 30 +0.0 + 11 +8172.48438 + 21 +11417.700534 + 31 +0.0 + 0 +LINE + 5 +D16 + 8 +0 + 62 + 0 + 10 +8031.85938 + 20 +11466.414462 + 30 +0.0 + 11 +8088.10938 + 21 +11466.414462 + 31 +0.0 + 0 +LINE + 5 +D17 + 8 +0 + 62 + 0 + 10 +8200.60938 + 20 +11466.414462 + 30 +0.0 + 11 +8256.85938 + 21 +11466.414462 + 31 +0.0 + 0 +LINE + 5 +D18 + 8 +0 + 62 + 0 + 10 +8116.23438 + 20 +11515.128391 + 30 +0.0 + 11 +8172.48438 + 21 +11515.128391 + 31 +0.0 + 0 +LINE + 5 +D19 + 8 +0 + 62 + 0 + 10 +5416.23438 + 20 +9663.999099 + 30 +0.0 + 11 +5472.48438 + 21 +9663.999099 + 31 +0.0 + 0 +LINE + 5 +D1A + 8 +0 + 62 + 0 + 10 +5584.98438 + 20 +9663.999099 + 30 +0.0 + 11 +5641.23438 + 21 +9663.999099 + 31 +0.0 + 0 +LINE + 5 +D1B + 8 +0 + 62 + 0 + 10 +5753.73438 + 20 +9663.999099 + 30 +0.0 + 11 +5768.793321 + 21 +9663.999099 + 31 +0.0 + 0 +LINE + 5 +D1C + 8 +0 + 62 + 0 + 10 +5339.273257 + 20 +9615.28517 + 30 +0.0 + 11 +5388.10938 + 21 +9615.28517 + 31 +0.0 + 0 +LINE + 5 +D1D + 8 +0 + 62 + 0 + 10 +5500.60938 + 20 +9615.28517 + 30 +0.0 + 11 +5556.85938 + 21 +9615.28517 + 31 +0.0 + 0 +LINE + 5 +D1E + 8 +0 + 62 + 0 + 10 +5669.35938 + 20 +9615.28517 + 30 +0.0 + 11 +5725.60938 + 21 +9615.28517 + 31 +0.0 + 0 +LINE + 5 +D1F + 8 +0 + 62 + 0 + 10 +5416.23438 + 20 +9566.571241 + 30 +0.0 + 11 +5472.48438 + 21 +9566.571241 + 31 +0.0 + 0 +LINE + 5 +D20 + 8 +0 + 62 + 0 + 10 +5584.98438 + 20 +9566.571241 + 30 +0.0 + 11 +5641.23438 + 21 +9566.571241 + 31 +0.0 + 0 +LINE + 5 +D21 + 8 +0 + 62 + 0 + 10 +5753.73438 + 20 +9566.571241 + 30 +0.0 + 11 +5767.246033 + 21 +9566.571241 + 31 +0.0 + 0 +LINE + 5 +D22 + 8 +0 + 62 + 0 + 10 +5338.920076 + 20 +9517.857312 + 30 +0.0 + 11 +5388.10938 + 21 +9517.857312 + 31 +0.0 + 0 +LINE + 5 +D23 + 8 +0 + 62 + 0 + 10 +5500.60938 + 20 +9517.857312 + 30 +0.0 + 11 +5556.85938 + 21 +9517.857312 + 31 +0.0 + 0 +LINE + 5 +D24 + 8 +0 + 62 + 0 + 10 +5669.35938 + 20 +9517.857312 + 30 +0.0 + 11 +5725.60938 + 21 +9517.857312 + 31 +0.0 + 0 +LINE + 5 +D25 + 8 +0 + 62 + 0 + 10 +5416.23438 + 20 +9469.143384 + 30 +0.0 + 11 +5472.48438 + 21 +9469.143384 + 31 +0.0 + 0 +LINE + 5 +D26 + 8 +0 + 62 + 0 + 10 +5584.98438 + 20 +9469.143384 + 30 +0.0 + 11 +5641.23438 + 21 +9469.143384 + 31 +0.0 + 0 +LINE + 5 +D27 + 8 +0 + 62 + 0 + 10 +5753.73438 + 20 +9469.143384 + 30 +0.0 + 11 +5765.698745 + 21 +9469.143384 + 31 +0.0 + 0 +LINE + 5 +D28 + 8 +0 + 62 + 0 + 10 +5338.566896 + 20 +9420.429455 + 30 +0.0 + 11 +5388.10938 + 21 +9420.429455 + 31 +0.0 + 0 +LINE + 5 +D29 + 8 +0 + 62 + 0 + 10 +5500.60938 + 20 +9420.429455 + 30 +0.0 + 11 +5556.85938 + 21 +9420.429455 + 31 +0.0 + 0 +LINE + 5 +D2A + 8 +0 + 62 + 0 + 10 +5669.35938 + 20 +9420.429455 + 30 +0.0 + 11 +5725.60938 + 21 +9420.429455 + 31 +0.0 + 0 +LINE + 5 +D2B + 8 +0 + 62 + 0 + 10 +5416.23438 + 20 +9371.715526 + 30 +0.0 + 11 +5472.48438 + 21 +9371.715526 + 31 +0.0 + 0 +LINE + 5 +D2C + 8 +0 + 62 + 0 + 10 +5584.98438 + 20 +9371.715526 + 30 +0.0 + 11 +5641.23438 + 21 +9371.715526 + 31 +0.0 + 0 +LINE + 5 +D2D + 8 +0 + 62 + 0 + 10 +5753.73438 + 20 +9371.715526 + 30 +0.0 + 11 +5764.151457 + 21 +9371.715526 + 31 +0.0 + 0 +LINE + 5 +D2E + 8 +0 + 62 + 0 + 10 +5338.213716 + 20 +9323.001597 + 30 +0.0 + 11 +5388.10938 + 21 +9323.001597 + 31 +0.0 + 0 +LINE + 5 +D2F + 8 +0 + 62 + 0 + 10 +5500.60938 + 20 +9323.001597 + 30 +0.0 + 11 +5540.489283 + 21 +9323.001597 + 31 +0.0 + 0 +LINE + 5 +D30 + 8 +0 + 62 + 0 + 10 +5416.23438 + 20 +9274.287669 + 30 +0.0 + 11 +5472.48438 + 21 +9274.287669 + 31 +0.0 + 0 +LINE + 5 +D31 + 8 +0 + 62 + 0 + 10 +5337.860536 + 20 +9225.57374 + 30 +0.0 + 11 +5388.10938 + 21 +9225.57374 + 31 +0.0 + 0 +LINE + 5 +D32 + 8 +0 + 62 + 0 + 10 +5500.60938 + 20 +9225.57374 + 30 +0.0 + 11 +5540.489283 + 21 +9225.57374 + 31 +0.0 + 0 +LINE + 5 +D33 + 8 +0 + 62 + 0 + 10 +5416.23438 + 20 +9176.859811 + 30 +0.0 + 11 +5472.48438 + 21 +9176.859811 + 31 +0.0 + 0 +LINE + 5 +D34 + 8 +0 + 62 + 0 + 10 +5337.507355 + 20 +9128.145882 + 30 +0.0 + 11 +5388.10938 + 21 +9128.145882 + 31 +0.0 + 0 +LINE + 5 +D35 + 8 +0 + 62 + 0 + 10 +5500.60938 + 20 +9128.145882 + 30 +0.0 + 11 +5540.489283 + 21 +9128.145882 + 31 +0.0 + 0 +LINE + 5 +D36 + 8 +0 + 62 + 0 + 10 +5416.23438 + 20 +9079.431954 + 30 +0.0 + 11 +5472.48438 + 21 +9079.431954 + 31 +0.0 + 0 +LINE + 5 +D37 + 8 +0 + 62 + 0 + 10 +5337.154175 + 20 +9030.718025 + 30 +0.0 + 11 +5388.10938 + 21 +9030.718025 + 31 +0.0 + 0 +LINE + 5 +D38 + 8 +0 + 62 + 0 + 10 +5500.60938 + 20 +9030.718025 + 30 +0.0 + 11 +5540.489283 + 21 +9030.718025 + 31 +0.0 + 0 +LINE + 5 +D39 + 8 +0 + 62 + 0 + 10 +5416.23438 + 20 +8982.004096 + 30 +0.0 + 11 +5472.48438 + 21 +8982.004096 + 31 +0.0 + 0 +LINE + 5 +D3A + 8 +0 + 62 + 0 + 10 +5336.800995 + 20 +8933.290167 + 30 +0.0 + 11 +5388.10938 + 21 +8933.290167 + 31 +0.0 + 0 +LINE + 5 +D3B + 8 +0 + 62 + 0 + 10 +5500.60938 + 20 +8933.290167 + 30 +0.0 + 11 +5540.489283 + 21 +8933.290167 + 31 +0.0 + 0 +LINE + 5 +D3C + 8 +0 + 62 + 0 + 10 +5416.23438 + 20 +8884.576239 + 30 +0.0 + 11 +5472.48438 + 21 +8884.576239 + 31 +0.0 + 0 +LINE + 5 +D3D + 8 +0 + 62 + 0 + 10 +5336.447815 + 20 +8835.86231 + 30 +0.0 + 11 +5388.10938 + 21 +8835.86231 + 31 +0.0 + 0 +LINE + 5 +D3E + 8 +0 + 62 + 0 + 10 +5500.60938 + 20 +8835.86231 + 30 +0.0 + 11 +5540.489283 + 21 +8835.86231 + 31 +0.0 + 0 +LINE + 5 +D3F + 8 +0 + 62 + 0 + 10 +5416.23438 + 20 +8787.148381 + 30 +0.0 + 11 +5472.48438 + 21 +8787.148381 + 31 +0.0 + 0 +LINE + 5 +D40 + 8 +0 + 62 + 0 + 10 +5336.094635 + 20 +8738.434452 + 30 +0.0 + 11 +5388.10938 + 21 +8738.434452 + 31 +0.0 + 0 +LINE + 5 +D41 + 8 +0 + 62 + 0 + 10 +5500.60938 + 20 +8738.434452 + 30 +0.0 + 11 +5540.489283 + 21 +8738.434452 + 31 +0.0 + 0 +LINE + 5 +D42 + 8 +0 + 62 + 0 + 10 +5416.23438 + 20 +8689.720524 + 30 +0.0 + 11 +5472.48438 + 21 +8689.720524 + 31 +0.0 + 0 +LINE + 5 +D43 + 8 +0 + 62 + 0 + 10 +5335.741454 + 20 +8641.006595 + 30 +0.0 + 11 +5388.10938 + 21 +8641.006595 + 31 +0.0 + 0 +LINE + 5 +D44 + 8 +0 + 62 + 0 + 10 +5500.60938 + 20 +8641.006595 + 30 +0.0 + 11 +5540.489283 + 21 +8641.006595 + 31 +0.0 + 0 +LINE + 5 +D45 + 8 +0 + 62 + 0 + 10 +5416.23438 + 20 +8592.292666 + 30 +0.0 + 11 +5472.48438 + 21 +8592.292666 + 31 +0.0 + 0 +LINE + 5 +D46 + 8 +0 + 62 + 0 + 10 +5335.388274 + 20 +8543.578737 + 30 +0.0 + 11 +5388.10938 + 21 +8543.578737 + 31 +0.0 + 0 +LINE + 5 +D47 + 8 +0 + 62 + 0 + 10 +5500.60938 + 20 +8543.578737 + 30 +0.0 + 11 +5540.489283 + 21 +8543.578737 + 31 +0.0 + 0 +LINE + 5 +D48 + 8 +0 + 62 + 0 + 10 +5416.23438 + 20 +8494.864809 + 30 +0.0 + 11 +5472.48438 + 21 +8494.864809 + 31 +0.0 + 0 +LINE + 5 +D49 + 8 +0 + 62 + 0 + 10 +5335.035094 + 20 +8446.15088 + 30 +0.0 + 11 +5388.10938 + 21 +8446.15088 + 31 +0.0 + 0 +LINE + 5 +D4A + 8 +0 + 62 + 0 + 10 +5500.60938 + 20 +8446.15088 + 30 +0.0 + 11 +5540.489283 + 21 +8446.15088 + 31 +0.0 + 0 +LINE + 5 +D4B + 8 +0 + 62 + 0 + 10 +5416.23438 + 20 +8397.436951 + 30 +0.0 + 11 +5472.48438 + 21 +8397.436951 + 31 +0.0 + 0 +LINE + 5 +D4C + 8 +0 + 62 + 0 + 10 +5334.681914 + 20 +8348.723022 + 30 +0.0 + 11 +5388.10938 + 21 +8348.723022 + 31 +0.0 + 0 +LINE + 5 +D4D + 8 +0 + 62 + 0 + 10 +5500.60938 + 20 +8348.723022 + 30 +0.0 + 11 +5540.489283 + 21 +8348.723022 + 31 +0.0 + 0 +LINE + 5 +D4E + 8 +0 + 62 + 0 + 10 +5416.23438 + 20 +8300.009094 + 30 +0.0 + 11 +5472.48438 + 21 +8300.009094 + 31 +0.0 + 0 +LINE + 5 +D4F + 8 +0 + 62 + 0 + 10 +5334.328733 + 20 +8251.295165 + 30 +0.0 + 11 +5388.10938 + 21 +8251.295165 + 31 +0.0 + 0 +LINE + 5 +D50 + 8 +0 + 62 + 0 + 10 +5500.60938 + 20 +8251.295165 + 30 +0.0 + 11 +5540.489283 + 21 +8251.295165 + 31 +0.0 + 0 +LINE + 5 +D51 + 8 +0 + 62 + 0 + 10 +5416.23438 + 20 +8202.581236 + 30 +0.0 + 11 +5472.48438 + 21 +8202.581236 + 31 +0.0 + 0 +LINE + 5 +D52 + 8 +0 + 62 + 0 + 10 +5333.975553 + 20 +8153.867307 + 30 +0.0 + 11 +5388.10938 + 21 +8153.867307 + 31 +0.0 + 0 +LINE + 5 +D53 + 8 +0 + 62 + 0 + 10 +5500.60938 + 20 +8153.867307 + 30 +0.0 + 11 +5540.489283 + 21 +8153.867307 + 31 +0.0 + 0 +LINE + 5 +D54 + 8 +0 + 62 + 0 + 10 +5416.23438 + 20 +8105.153379 + 30 +0.0 + 11 +5472.48438 + 21 +8105.153379 + 31 +0.0 + 0 +LINE + 5 +D55 + 8 +0 + 62 + 0 + 10 +5333.622373 + 20 +8056.43945 + 30 +0.0 + 11 +5388.10938 + 21 +8056.43945 + 31 +0.0 + 0 +LINE + 5 +D56 + 8 +0 + 62 + 0 + 10 +5500.60938 + 20 +8056.43945 + 30 +0.0 + 11 +5540.489283 + 21 +8056.43945 + 31 +0.0 + 0 +LINE + 5 +D57 + 8 +0 + 62 + 0 + 10 +5416.23438 + 20 +8007.725521 + 30 +0.0 + 11 +5472.48438 + 21 +8007.725521 + 31 +0.0 + 0 +LINE + 5 +D58 + 8 +0 + 62 + 0 + 10 +5333.269193 + 20 +7959.011592 + 30 +0.0 + 11 +5388.10938 + 21 +7959.011592 + 31 +0.0 + 0 +LINE + 5 +D59 + 8 +0 + 62 + 0 + 10 +5500.60938 + 20 +7959.011592 + 30 +0.0 + 11 +5540.489283 + 21 +7959.011592 + 31 +0.0 + 0 +LINE + 5 +D5A + 8 +0 + 62 + 0 + 10 +5416.23438 + 20 +7910.297664 + 30 +0.0 + 11 +5472.48438 + 21 +7910.297664 + 31 +0.0 + 0 +LINE + 5 +D5B + 8 +0 + 62 + 0 + 10 +5332.916012 + 20 +7861.583735 + 30 +0.0 + 11 +5388.10938 + 21 +7861.583735 + 31 +0.0 + 0 +LINE + 5 +D5C + 8 +0 + 62 + 0 + 10 +5500.60938 + 20 +7861.583735 + 30 +0.0 + 11 +5540.489283 + 21 +7861.583735 + 31 +0.0 + 0 +LINE + 5 +D5D + 8 +0 + 62 + 0 + 10 +5416.23438 + 20 +7812.869806 + 30 +0.0 + 11 +5472.48438 + 21 +7812.869806 + 31 +0.0 + 0 +LINE + 5 +D5E + 8 +0 + 62 + 0 + 10 +5332.562832 + 20 +7764.155877 + 30 +0.0 + 11 +5388.10938 + 21 +7764.155877 + 31 +0.0 + 0 +LINE + 5 +D5F + 8 +0 + 62 + 0 + 10 +5500.60938 + 20 +7764.155877 + 30 +0.0 + 11 +5540.489283 + 21 +7764.155877 + 31 +0.0 + 0 +LINE + 5 +D60 + 8 +0 + 62 + 0 + 10 +5416.23438 + 20 +7715.441949 + 30 +0.0 + 11 +5472.48438 + 21 +7715.441949 + 31 +0.0 + 0 +LINE + 5 +D61 + 8 +0 + 62 + 0 + 10 +6589.308685 + 20 +10262.726907 + 30 +0.0 + 11 +6569.359336 + 21 +10297.280194 + 31 +0.0 + 0 +LINE + 5 +D62 + 8 +0 + 62 + 0 + 10 +6513.109336 + 20 +10394.708052 + 30 +0.0 + 11 +6484.984336 + 21 +10443.421981 + 31 +0.0 + 0 +LINE + 5 +D63 + 8 +0 + 62 + 0 + 10 +6513.109336 + 20 +10297.280194 + 30 +0.0 + 11 +6484.984336 + 21 +10345.994123 + 31 +0.0 + 0 +LINE + 5 +D64 + 8 +0 + 62 + 0 + 10 +6428.734336 + 20 +10443.421981 + 30 +0.0 + 11 +6400.609336 + 21 +10492.13591 + 31 +0.0 + 0 +LINE + 5 +D65 + 8 +0 + 62 + 0 + 10 +6506.912361 + 20 +10210.585813 + 30 +0.0 + 11 +6484.984336 + 21 +10248.566266 + 31 +0.0 + 0 +LINE + 5 +D66 + 8 +0 + 62 + 0 + 10 +6428.734336 + 20 +10345.994123 + 30 +0.0 + 11 +6400.609336 + 21 +10394.708052 + 31 +0.0 + 0 +LINE + 5 +D67 + 8 +0 + 62 + 0 + 10 +6428.734336 + 20 +10248.566266 + 30 +0.0 + 11 +6400.609336 + 21 +10297.280195 + 31 +0.0 + 0 +LINE + 5 +D68 + 8 +0 + 62 + 0 + 10 +6344.359336 + 20 +10394.708053 + 30 +0.0 + 11 +6316.234336 + 21 +10443.421982 + 31 +0.0 + 0 +LINE + 5 +D69 + 8 +0 + 62 + 0 + 10 +6424.516036 + 20 +10158.444719 + 30 +0.0 + 11 +6400.609336 + 21 +10199.852337 + 31 +0.0 + 0 +LINE + 5 +D6A + 8 +0 + 62 + 0 + 10 +6344.359336 + 20 +10297.280195 + 30 +0.0 + 11 +6316.234336 + 21 +10345.994124 + 31 +0.0 + 0 +LINE + 5 +D6B + 8 +0 + 62 + 0 + 10 +6344.359336 + 20 +10199.852337 + 30 +0.0 + 11 +6316.234336 + 21 +10248.566266 + 31 +0.0 + 0 +LINE + 5 +D6C + 8 +0 + 62 + 0 + 10 +6259.984336 + 20 +10345.994124 + 30 +0.0 + 11 +6233.328032 + 21 +10392.164198 + 31 +0.0 + 0 +LINE + 5 +D6D + 8 +0 + 62 + 0 + 10 +6342.119711 + 20 +10106.303624 + 30 +0.0 + 11 +6316.234337 + 21 +10151.138408 + 31 +0.0 + 0 +LINE + 5 +D6E + 8 +0 + 62 + 0 + 10 +6259.984337 + 20 +10248.566266 + 30 +0.0 + 11 +6231.859337 + 21 +10297.280195 + 31 +0.0 + 0 +LINE + 5 +D6F + 8 +0 + 62 + 0 + 10 +6259.984337 + 20 +10151.138408 + 30 +0.0 + 11 +6231.859337 + 21 +10199.852337 + 31 +0.0 + 0 +LINE + 5 +D70 + 8 +0 + 62 + 0 + 10 +6175.609337 + 20 +10297.280195 + 30 +0.0 + 11 +6150.636356 + 21 +10340.534666 + 31 +0.0 + 0 +LINE + 5 +D71 + 8 +0 + 62 + 0 + 10 +6259.723386 + 20 +10054.16253 + 30 +0.0 + 11 +6231.859337 + 21 +10102.424479 + 31 +0.0 + 0 +LINE + 5 +D72 + 8 +0 + 62 + 0 + 10 +6175.609337 + 20 +10199.852337 + 30 +0.0 + 11 +6147.484337 + 21 +10248.566266 + 31 +0.0 + 0 +LINE + 5 +D73 + 8 +0 + 62 + 0 + 10 +6175.609337 + 20 +10102.424479 + 30 +0.0 + 11 +6147.484337 + 21 +10151.138408 + 31 +0.0 + 0 +LINE + 5 +D74 + 8 +0 + 62 + 0 + 10 +6091.234337 + 20 +10248.566266 + 30 +0.0 + 11 +6067.944681 + 21 +10288.905134 + 31 +0.0 + 0 +LINE + 5 +D75 + 8 +0 + 62 + 0 + 10 +6175.609337 + 20 +10004.996622 + 30 +0.0 + 11 +6147.484337 + 21 +10053.710551 + 31 +0.0 + 0 +LINE + 5 +D76 + 8 +0 + 62 + 0 + 10 +6091.234337 + 20 +10151.138408 + 30 +0.0 + 11 +6063.109337 + 21 +10199.852337 + 31 +0.0 + 0 +LINE + 5 +D77 + 8 +0 + 62 + 0 + 10 +6091.234338 + 20 +10053.710551 + 30 +0.0 + 11 +6063.109338 + 21 +10102.42448 + 31 +0.0 + 0 +LINE + 5 +D78 + 8 +0 + 62 + 0 + 10 +6006.859338 + 20 +10199.852338 + 30 +0.0 + 11 +5985.253006 + 21 +10237.275602 + 31 +0.0 + 0 +LINE + 5 +D79 + 8 +0 + 62 + 0 + 10 +6091.234338 + 20 +9956.282693 + 30 +0.0 + 11 +6063.109338 + 21 +10004.996622 + 31 +0.0 + 0 +LINE + 5 +D7A + 8 +0 + 62 + 0 + 10 +6006.859338 + 20 +10102.42448 + 30 +0.0 + 11 +5978.734338 + 21 +10151.138409 + 31 +0.0 + 0 +LINE + 5 +D7B + 8 +0 + 62 + 0 + 10 +6006.859338 + 20 +10004.996622 + 30 +0.0 + 11 +5978.734338 + 21 +10053.710551 + 31 +0.0 + 0 +LINE + 5 +D7C + 8 +0 + 62 + 0 + 10 +5922.484338 + 20 +10151.138409 + 30 +0.0 + 11 +5902.561331 + 21 +10185.64607 + 31 +0.0 + 0 +LINE + 5 +D7D + 8 +0 + 62 + 0 + 10 +6006.859338 + 20 +9907.568764 + 30 +0.0 + 11 +5978.734338 + 21 +9956.282693 + 31 +0.0 + 0 +LINE + 5 +D7E + 8 +0 + 62 + 0 + 10 +5922.484338 + 20 +10053.710551 + 30 +0.0 + 11 +5894.359338 + 21 +10102.42448 + 31 +0.0 + 0 +LINE + 5 +D7F + 8 +0 + 62 + 0 + 10 +5922.484338 + 20 +9956.282693 + 30 +0.0 + 11 +5894.359338 + 21 +10004.996622 + 31 +0.0 + 0 +LINE + 5 +D80 + 8 +0 + 62 + 0 + 10 +5838.109338 + 20 +10102.42448 + 30 +0.0 + 11 +5819.869655 + 21 +10134.016538 + 31 +0.0 + 0 +LINE + 5 +D81 + 8 +0 + 62 + 0 + 10 +5922.484339 + 20 +9858.854835 + 30 +0.0 + 11 +5894.359339 + 21 +9907.568764 + 31 +0.0 + 0 +LINE + 5 +D82 + 8 +0 + 62 + 0 + 10 +5838.109339 + 20 +10004.996622 + 30 +0.0 + 11 +5809.984339 + 21 +10053.710551 + 31 +0.0 + 0 +LINE + 5 +D83 + 8 +0 + 62 + 0 + 10 +5838.109339 + 20 +9907.568764 + 30 +0.0 + 11 +5809.984339 + 21 +9956.282693 + 31 +0.0 + 0 +LINE + 5 +D84 + 8 +0 + 62 + 0 + 10 +5753.734339 + 20 +10053.710551 + 30 +0.0 + 11 +5737.17798 + 21 +10082.387006 + 31 +0.0 + 0 +LINE + 5 +D85 + 8 +0 + 62 + 0 + 10 +5814.116984 + 20 +9851.696884 + 30 +0.0 + 11 +5809.984339 + 21 +9858.854836 + 31 +0.0 + 0 +LINE + 5 +D86 + 8 +0 + 62 + 0 + 10 +5753.734339 + 20 +9956.282693 + 30 +0.0 + 11 +5725.609339 + 21 +10004.996622 + 31 +0.0 + 0 +LINE + 5 +D87 + 8 +0 + 62 + 0 + 10 +5753.734339 + 20 +9858.854836 + 30 +0.0 + 11 +5725.609339 + 21 +9907.568765 + 31 +0.0 + 0 +LINE + 5 +D88 + 8 +0 + 62 + 0 + 10 +5669.359339 + 20 +10004.996623 + 30 +0.0 + 11 +5654.486305 + 21 +10030.757474 + 31 +0.0 + 0 +LINE + 5 +D89 + 8 +0 + 62 + 0 + 10 +5753.734339 + 20 +9761.426978 + 30 +0.0 + 11 +5725.609339 + 21 +9810.140907 + 31 +0.0 + 0 +LINE + 5 +D8A + 8 +0 + 62 + 0 + 10 +5669.359339 + 20 +9907.568765 + 30 +0.0 + 11 +5641.234339 + 21 +9956.282694 + 31 +0.0 + 0 +LINE + 5 +D8B + 8 +0 + 62 + 0 + 10 +5753.734339 + 20 +9663.99912 + 30 +0.0 + 11 +5725.609339 + 21 +9712.713049 + 31 +0.0 + 0 +LINE + 5 +D8C + 8 +0 + 62 + 0 + 10 +5669.359339 + 20 +9810.140907 + 30 +0.0 + 11 +5641.234339 + 21 +9858.854836 + 31 +0.0 + 0 +LINE + 5 +D8D + 8 +0 + 62 + 0 + 10 +5584.984339 + 20 +9956.282694 + 30 +0.0 + 11 +5571.794629 + 21 +9979.127942 + 31 +0.0 + 0 +LINE + 5 +D8E + 8 +0 + 62 + 0 + 10 +5753.73434 + 20 +9566.571262 + 30 +0.0 + 11 +5725.60934 + 21 +9615.285191 + 31 +0.0 + 0 +LINE + 5 +D8F + 8 +0 + 62 + 0 + 10 +5669.35934 + 20 +9712.713049 + 30 +0.0 + 11 +5641.23434 + 21 +9761.426978 + 31 +0.0 + 0 +LINE + 5 +D90 + 8 +0 + 62 + 0 + 10 +5584.98434 + 20 +9858.854836 + 30 +0.0 + 11 +5556.85934 + 21 +9907.568765 + 31 +0.0 + 0 +LINE + 5 +D91 + 8 +0 + 62 + 0 + 10 +5753.73434 + 20 +9469.143404 + 30 +0.0 + 11 +5725.60934 + 21 +9517.857333 + 31 +0.0 + 0 +LINE + 5 +D92 + 8 +0 + 62 + 0 + 10 +5669.35934 + 20 +9615.285191 + 30 +0.0 + 11 +5641.23434 + 21 +9663.99912 + 31 +0.0 + 0 +LINE + 5 +D93 + 8 +0 + 62 + 0 + 10 +5584.98434 + 20 +9761.426978 + 30 +0.0 + 11 +5556.85934 + 21 +9810.140907 + 31 +0.0 + 0 +LINE + 5 +D94 + 8 +0 + 62 + 0 + 10 +5500.60934 + 20 +9907.568765 + 30 +0.0 + 11 +5489.102954 + 21 +9927.49841 + 31 +0.0 + 0 +LINE + 5 +D95 + 8 +0 + 62 + 0 + 10 +5753.73434 + 20 +9371.715547 + 30 +0.0 + 11 +5725.60934 + 21 +9420.429476 + 31 +0.0 + 0 +LINE + 5 +D96 + 8 +0 + 62 + 0 + 10 +5669.35934 + 20 +9517.857333 + 30 +0.0 + 11 +5641.23434 + 21 +9566.571262 + 31 +0.0 + 0 +LINE + 5 +D97 + 8 +0 + 62 + 0 + 10 +5584.98434 + 20 +9663.99912 + 30 +0.0 + 11 +5556.85934 + 21 +9712.713049 + 31 +0.0 + 0 +LINE + 5 +D98 + 8 +0 + 62 + 0 + 10 +5500.60934 + 20 +9810.140907 + 30 +0.0 + 11 +5472.48434 + 21 +9858.854836 + 31 +0.0 + 0 +LINE + 5 +D99 + 8 +0 + 62 + 0 + 10 +5669.35934 + 20 +9420.429476 + 30 +0.0 + 11 +5641.23434 + 21 +9469.143405 + 31 +0.0 + 0 +LINE + 5 +D9A + 8 +0 + 62 + 0 + 10 +5584.98434 + 20 +9566.571263 + 30 +0.0 + 11 +5556.85934 + 21 +9615.285191 + 31 +0.0 + 0 +LINE + 5 +D9B + 8 +0 + 62 + 0 + 10 +5500.60934 + 20 +9712.713049 + 30 +0.0 + 11 +5472.48434 + 21 +9761.426978 + 31 +0.0 + 0 +LINE + 5 +D9C + 8 +0 + 62 + 0 + 10 +5416.23434 + 20 +9858.854836 + 30 +0.0 + 11 +5406.411279 + 21 +9875.868877 + 31 +0.0 + 0 +LINE + 5 +D9D + 8 +0 + 62 + 0 + 10 +5649.957554 + 20 +9356.606497 + 30 +0.0 + 11 +5641.23434 + 21 +9371.715547 + 31 +0.0 + 0 +LINE + 5 +D9E + 8 +0 + 62 + 0 + 10 +5584.98434 + 20 +9469.143405 + 30 +0.0 + 11 +5556.85934 + 21 +9517.857334 + 31 +0.0 + 0 +LINE + 5 +D9F + 8 +0 + 62 + 0 + 10 +5500.60934 + 20 +9615.285192 + 30 +0.0 + 11 +5472.48434 + 21 +9663.999121 + 31 +0.0 + 0 +LINE + 5 +DA0 + 8 +0 + 62 + 0 + 10 +5416.23434 + 20 +9761.426978 + 30 +0.0 + 11 +5388.10934 + 21 +9810.140907 + 31 +0.0 + 0 +LINE + 5 +DA1 + 8 +0 + 62 + 0 + 10 +5584.984341 + 20 +9371.715547 + 30 +0.0 + 11 +5556.859341 + 21 +9420.429476 + 31 +0.0 + 0 +LINE + 5 +DA2 + 8 +0 + 62 + 0 + 10 +5500.609341 + 20 +9517.857334 + 30 +0.0 + 11 +5472.484341 + 21 +9566.571263 + 31 +0.0 + 0 +LINE + 5 +DA3 + 8 +0 + 62 + 0 + 10 +5416.234341 + 20 +9663.999121 + 30 +0.0 + 11 +5388.109341 + 21 +9712.71305 + 31 +0.0 + 0 +LINE + 5 +DA4 + 8 +0 + 62 + 0 + 10 +5500.609341 + 20 +9420.429476 + 30 +0.0 + 11 +5472.484341 + 21 +9469.143405 + 31 +0.0 + 0 +LINE + 5 +DA5 + 8 +0 + 62 + 0 + 10 +5416.234341 + 20 +9566.571263 + 30 +0.0 + 11 +5388.109341 + 21 +9615.285192 + 31 +0.0 + 0 +LINE + 5 +DA6 + 8 +0 + 62 + 0 + 10 +5500.609341 + 20 +9323.001618 + 30 +0.0 + 11 +5472.484341 + 21 +9371.715547 + 31 +0.0 + 0 +LINE + 5 +DA7 + 8 +0 + 62 + 0 + 10 +5416.234341 + 20 +9469.143405 + 30 +0.0 + 11 +5388.109341 + 21 +9517.857334 + 31 +0.0 + 0 +LINE + 5 +DA8 + 8 +0 + 62 + 0 + 10 +5500.609341 + 20 +9225.57376 + 30 +0.0 + 11 +5472.484341 + 21 +9274.287689 + 31 +0.0 + 0 +LINE + 5 +DA9 + 8 +0 + 62 + 0 + 10 +5416.234341 + 20 +9371.715547 + 30 +0.0 + 11 +5388.109341 + 21 +9420.429476 + 31 +0.0 + 0 +LINE + 5 +DAA + 8 +0 + 62 + 0 + 10 +5500.609341 + 20 +9128.145902 + 30 +0.0 + 11 +5472.484341 + 21 +9176.859831 + 31 +0.0 + 0 +LINE + 5 +DAB + 8 +0 + 62 + 0 + 10 +5416.234341 + 20 +9274.287689 + 30 +0.0 + 11 +5388.109341 + 21 +9323.001618 + 31 +0.0 + 0 +LINE + 5 +DAC + 8 +0 + 62 + 0 + 10 +5500.609341 + 20 +9030.718045 + 30 +0.0 + 11 +5472.484341 + 21 +9079.431974 + 31 +0.0 + 0 +LINE + 5 +DAD + 8 +0 + 62 + 0 + 10 +5416.234341 + 20 +9176.859832 + 30 +0.0 + 11 +5388.109341 + 21 +9225.573761 + 31 +0.0 + 0 +LINE + 5 +DAE + 8 +0 + 62 + 0 + 10 +5500.609342 + 20 +8933.290187 + 30 +0.0 + 11 +5472.484342 + 21 +8982.004116 + 31 +0.0 + 0 +LINE + 5 +DAF + 8 +0 + 62 + 0 + 10 +5416.234342 + 20 +9079.431974 + 30 +0.0 + 11 +5388.109342 + 21 +9128.145903 + 31 +0.0 + 0 +LINE + 5 +DB0 + 8 +0 + 62 + 0 + 10 +5500.609342 + 20 +8835.862329 + 30 +0.0 + 11 +5472.484342 + 21 +8884.576258 + 31 +0.0 + 0 +LINE + 5 +DB1 + 8 +0 + 62 + 0 + 10 +5416.234342 + 20 +8982.004116 + 30 +0.0 + 11 +5388.109342 + 21 +9030.718045 + 31 +0.0 + 0 +LINE + 5 +DB2 + 8 +0 + 62 + 0 + 10 +5500.609342 + 20 +8738.434471 + 30 +0.0 + 11 +5472.484342 + 21 +8787.1484 + 31 +0.0 + 0 +LINE + 5 +DB3 + 8 +0 + 62 + 0 + 10 +5416.234342 + 20 +8884.576258 + 30 +0.0 + 11 +5388.109342 + 21 +8933.290187 + 31 +0.0 + 0 +LINE + 5 +DB4 + 8 +0 + 62 + 0 + 10 +5500.609342 + 20 +8641.006613 + 30 +0.0 + 11 +5472.484342 + 21 +8689.720542 + 31 +0.0 + 0 +LINE + 5 +DB5 + 8 +0 + 62 + 0 + 10 +5416.234342 + 20 +8787.1484 + 30 +0.0 + 11 +5388.109342 + 21 +8835.862329 + 31 +0.0 + 0 +LINE + 5 +DB6 + 8 +0 + 62 + 0 + 10 +5500.609342 + 20 +8543.578756 + 30 +0.0 + 11 +5472.484342 + 21 +8592.292685 + 31 +0.0 + 0 +LINE + 5 +DB7 + 8 +0 + 62 + 0 + 10 +5416.234342 + 20 +8689.720542 + 30 +0.0 + 11 +5388.109342 + 21 +8738.434471 + 31 +0.0 + 0 +LINE + 5 +DB8 + 8 +0 + 62 + 0 + 10 +5500.609343 + 20 +8446.150898 + 30 +0.0 + 11 +5472.484343 + 21 +8494.864827 + 31 +0.0 + 0 +LINE + 5 +DB9 + 8 +0 + 62 + 0 + 10 +5416.234343 + 20 +8592.292685 + 30 +0.0 + 11 +5388.109343 + 21 +8641.006614 + 31 +0.0 + 0 +LINE + 5 +DBA + 8 +0 + 62 + 0 + 10 +5500.609343 + 20 +8348.72304 + 30 +0.0 + 11 +5472.484343 + 21 +8397.436969 + 31 +0.0 + 0 +LINE + 5 +DBB + 8 +0 + 62 + 0 + 10 +5416.234343 + 20 +8494.864827 + 30 +0.0 + 11 +5388.109343 + 21 +8543.578756 + 31 +0.0 + 0 +LINE + 5 +DBC + 8 +0 + 62 + 0 + 10 +5500.609343 + 20 +8251.295182 + 30 +0.0 + 11 +5472.484343 + 21 +8300.009111 + 31 +0.0 + 0 +LINE + 5 +DBD + 8 +0 + 62 + 0 + 10 +5416.234343 + 20 +8397.436969 + 30 +0.0 + 11 +5388.109343 + 21 +8446.150898 + 31 +0.0 + 0 +LINE + 5 +DBE + 8 +0 + 62 + 0 + 10 +5500.609343 + 20 +8153.867324 + 30 +0.0 + 11 +5472.484343 + 21 +8202.581253 + 31 +0.0 + 0 +LINE + 5 +DBF + 8 +0 + 62 + 0 + 10 +5416.234343 + 20 +8300.009111 + 30 +0.0 + 11 +5388.109343 + 21 +8348.72304 + 31 +0.0 + 0 +LINE + 5 +DC0 + 8 +0 + 62 + 0 + 10 +5500.609343 + 20 +8056.439466 + 30 +0.0 + 11 +5472.484343 + 21 +8105.153395 + 31 +0.0 + 0 +LINE + 5 +DC1 + 8 +0 + 62 + 0 + 10 +5416.234343 + 20 +8202.581253 + 30 +0.0 + 11 +5388.109343 + 21 +8251.295182 + 31 +0.0 + 0 +LINE + 5 +DC2 + 8 +0 + 62 + 0 + 10 +5500.609344 + 20 +7959.011609 + 30 +0.0 + 11 +5472.484344 + 21 +8007.725538 + 31 +0.0 + 0 +LINE + 5 +DC3 + 8 +0 + 62 + 0 + 10 +5416.234344 + 20 +8105.153396 + 30 +0.0 + 11 +5388.109344 + 21 +8153.867325 + 31 +0.0 + 0 +LINE + 5 +DC4 + 8 +0 + 62 + 0 + 10 +5500.609344 + 20 +7861.583751 + 30 +0.0 + 11 +5472.484344 + 21 +7910.29768 + 31 +0.0 + 0 +LINE + 5 +DC5 + 8 +0 + 62 + 0 + 10 +5416.234344 + 20 +8007.725538 + 30 +0.0 + 11 +5388.109344 + 21 +8056.439467 + 31 +0.0 + 0 +LINE + 5 +DC6 + 8 +0 + 62 + 0 + 10 +5500.609344 + 20 +7764.155893 + 30 +0.0 + 11 +5472.484344 + 21 +7812.869822 + 31 +0.0 + 0 +LINE + 5 +DC7 + 8 +0 + 62 + 0 + 10 +5416.234344 + 20 +7910.29768 + 30 +0.0 + 11 +5388.109344 + 21 +7959.011609 + 31 +0.0 + 0 +LINE + 5 +DC8 + 8 +0 + 62 + 0 + 10 +5476.783717 + 20 +7707.995231 + 30 +0.0 + 11 +5472.484344 + 21 +7715.441964 + 31 +0.0 + 0 +LINE + 5 +DC9 + 8 +0 + 62 + 0 + 10 +5416.234344 + 20 +7812.869822 + 30 +0.0 + 11 +5388.109344 + 21 +7861.583751 + 31 +0.0 + 0 +LINE + 5 +DCA + 8 +0 + 62 + 0 + 10 +5416.234344 + 20 +7715.441964 + 30 +0.0 + 11 +5388.109344 + 21 +7764.155893 + 31 +0.0 + 0 +LINE + 5 +DCB + 8 +0 + 62 + 0 + 10 +6597.484335 + 20 +10345.994123 + 30 +0.0 + 11 +6569.359335 + 21 +10394.708052 + 31 +0.0 + 0 +LINE + 5 +DCC + 8 +0 + 62 + 0 + 10 +6513.109335 + 20 +10492.13591 + 30 +0.0 + 11 +6484.984335 + 21 +10540.849839 + 31 +0.0 + 0 +LINE + 5 +DCD + 8 +0 + 62 + 0 + 10 +6671.70501 + 20 +10314.868001 + 30 +0.0 + 11 +6653.734335 + 21 +10345.994123 + 31 +0.0 + 0 +LINE + 5 +DCE + 8 +0 + 62 + 0 + 10 +6597.484335 + 20 +10443.421981 + 30 +0.0 + 11 +6569.359335 + 21 +10492.13591 + 31 +0.0 + 0 +LINE + 5 +DCF + 8 +0 + 62 + 0 + 10 +6681.859335 + 20 +10394.708052 + 30 +0.0 + 11 +6653.734335 + 21 +10443.421981 + 31 +0.0 + 0 +LINE + 5 +DD0 + 8 +0 + 62 + 0 + 10 +6597.484335 + 20 +10540.849839 + 30 +0.0 + 11 +6569.359335 + 21 +10589.563768 + 31 +0.0 + 0 +LINE + 5 +DD1 + 8 +0 + 62 + 0 + 10 +6754.101335 + 20 +10367.009095 + 30 +0.0 + 11 +6738.109335 + 21 +10394.708052 + 31 +0.0 + 0 +LINE + 5 +DD2 + 8 +0 + 62 + 0 + 10 +6681.859335 + 20 +10492.13591 + 30 +0.0 + 11 +6653.734335 + 21 +10540.849839 + 31 +0.0 + 0 +LINE + 5 +DD3 + 8 +0 + 62 + 0 + 10 +6766.234335 + 20 +10443.421981 + 30 +0.0 + 11 +6738.109335 + 21 +10492.13591 + 31 +0.0 + 0 +LINE + 5 +DD4 + 8 +0 + 62 + 0 + 10 +6681.859335 + 20 +10589.563768 + 30 +0.0 + 11 +6653.734335 + 21 +10638.277697 + 31 +0.0 + 0 +LINE + 5 +DD5 + 8 +0 + 62 + 0 + 10 +6836.49766 + 20 +10419.15019 + 30 +0.0 + 11 +6822.484334 + 21 +10443.421981 + 31 +0.0 + 0 +LINE + 5 +DD6 + 8 +0 + 62 + 0 + 10 +6766.234334 + 20 +10540.849838 + 30 +0.0 + 11 +6738.109334 + 21 +10589.563767 + 31 +0.0 + 0 +LINE + 5 +DD7 + 8 +0 + 62 + 0 + 10 +6850.609334 + 20 +10492.135909 + 30 +0.0 + 11 +6822.484334 + 21 +10540.849838 + 31 +0.0 + 0 +LINE + 5 +DD8 + 8 +0 + 62 + 0 + 10 +6766.234334 + 20 +10638.277696 + 30 +0.0 + 11 +6738.109334 + 21 +10686.991625 + 31 +0.0 + 0 +LINE + 5 +DD9 + 8 +0 + 62 + 0 + 10 +6918.893984 + 20 +10471.291284 + 30 +0.0 + 11 +6906.859334 + 21 +10492.135909 + 31 +0.0 + 0 +LINE + 5 +DDA + 8 +0 + 62 + 0 + 10 +6850.609334 + 20 +10589.563767 + 30 +0.0 + 11 +6822.484334 + 21 +10638.277696 + 31 +0.0 + 0 +LINE + 5 +DDB + 8 +0 + 62 + 0 + 10 +6934.984334 + 20 +10540.849838 + 30 +0.0 + 11 +6906.859334 + 21 +10589.563767 + 31 +0.0 + 0 +LINE + 5 +DDC + 8 +0 + 62 + 0 + 10 +6850.609334 + 20 +10686.991625 + 30 +0.0 + 11 +6822.484334 + 21 +10735.705554 + 31 +0.0 + 0 +LINE + 5 +DDD + 8 +0 + 62 + 0 + 10 +7001.290309 + 20 +10523.432378 + 30 +0.0 + 11 +6991.234334 + 21 +10540.849838 + 31 +0.0 + 0 +LINE + 5 +DDE + 8 +0 + 62 + 0 + 10 +6934.984334 + 20 +10638.277696 + 30 +0.0 + 11 +6906.859334 + 21 +10686.991625 + 31 +0.0 + 0 +LINE + 5 +DDF + 8 +0 + 62 + 0 + 10 +7019.359334 + 20 +10589.563767 + 30 +0.0 + 11 +6991.234334 + 21 +10638.277696 + 31 +0.0 + 0 +LINE + 5 +DE0 + 8 +0 + 62 + 0 + 10 +6934.984334 + 20 +10735.705554 + 30 +0.0 + 11 +6906.859334 + 21 +10784.419483 + 31 +0.0 + 0 +LINE + 5 +DE1 + 8 +0 + 62 + 0 + 10 +7083.686634 + 20 +10575.573472 + 30 +0.0 + 11 +7075.609333 + 21 +10589.563767 + 31 +0.0 + 0 +LINE + 5 +DE2 + 8 +0 + 62 + 0 + 10 +7019.359333 + 20 +10686.991625 + 30 +0.0 + 11 +6991.234333 + 21 +10735.705554 + 31 +0.0 + 0 +LINE + 5 +DE3 + 8 +0 + 62 + 0 + 10 +7103.734333 + 20 +10638.277696 + 30 +0.0 + 11 +7075.609333 + 21 +10686.991625 + 31 +0.0 + 0 +LINE + 5 +DE4 + 8 +0 + 62 + 0 + 10 +7019.359333 + 20 +10784.419483 + 30 +0.0 + 11 +6991.234333 + 21 +10833.133412 + 31 +0.0 + 0 +LINE + 5 +DE5 + 8 +0 + 62 + 0 + 10 +7166.082959 + 20 +10627.714566 + 30 +0.0 + 11 +7159.984333 + 21 +10638.277696 + 31 +0.0 + 0 +LINE + 5 +DE6 + 8 +0 + 62 + 0 + 10 +7103.734333 + 20 +10735.705553 + 30 +0.0 + 11 +7075.609333 + 21 +10784.419482 + 31 +0.0 + 0 +LINE + 5 +DE7 + 8 +0 + 62 + 0 + 10 +7019.359333 + 20 +10881.84734 + 30 +0.0 + 11 +7018.898947 + 21 +10882.644752 + 31 +0.0 + 0 +LINE + 5 +DE8 + 8 +0 + 62 + 0 + 10 +7188.109333 + 20 +10686.991624 + 30 +0.0 + 11 +7159.984333 + 21 +10735.705553 + 31 +0.0 + 0 +LINE + 5 +DE9 + 8 +0 + 62 + 0 + 10 +7103.734333 + 20 +10833.133411 + 30 +0.0 + 11 +7075.609333 + 21 +10881.84734 + 31 +0.0 + 0 +LINE + 5 +DEA + 8 +0 + 62 + 0 + 10 +7248.479283 + 20 +10679.85566 + 30 +0.0 + 11 +7244.359333 + 21 +10686.991624 + 31 +0.0 + 0 +LINE + 5 +DEB + 8 +0 + 62 + 0 + 10 +7188.109333 + 20 +10784.419482 + 30 +0.0 + 11 +7159.984333 + 21 +10833.133411 + 31 +0.0 + 0 +LINE + 5 +DEC + 8 +0 + 62 + 0 + 10 +7103.734333 + 20 +10930.561269 + 30 +0.0 + 11 +7101.590622 + 21 +10934.274284 + 31 +0.0 + 0 +LINE + 5 +DED + 8 +0 + 62 + 0 + 10 +7272.484332 + 20 +10735.705553 + 30 +0.0 + 11 +7244.359332 + 21 +10784.419482 + 31 +0.0 + 0 +LINE + 5 +DEE + 8 +0 + 62 + 0 + 10 +7188.109332 + 20 +10881.84734 + 30 +0.0 + 11 +7159.984332 + 21 +10930.561269 + 31 +0.0 + 0 +LINE + 5 +DEF + 8 +0 + 62 + 0 + 10 +7330.875608 + 20 +10731.996755 + 30 +0.0 + 11 +7328.734332 + 21 +10735.705553 + 31 +0.0 + 0 +LINE + 5 +DF0 + 8 +0 + 62 + 0 + 10 +7272.484332 + 20 +10833.133411 + 30 +0.0 + 11 +7244.359332 + 21 +10881.84734 + 31 +0.0 + 0 +LINE + 5 +DF1 + 8 +0 + 62 + 0 + 10 +7188.109332 + 20 +10979.275198 + 30 +0.0 + 11 +7184.282298 + 21 +10985.903817 + 31 +0.0 + 0 +LINE + 5 +DF2 + 8 +0 + 62 + 0 + 10 +7356.859332 + 20 +10784.419482 + 30 +0.0 + 11 +7328.734332 + 21 +10833.133411 + 31 +0.0 + 0 +LINE + 5 +DF3 + 8 +0 + 62 + 0 + 10 +7272.484332 + 20 +10930.561269 + 30 +0.0 + 11 +7244.359332 + 21 +10979.275198 + 31 +0.0 + 0 +LINE + 5 +DF4 + 8 +0 + 62 + 0 + 10 +7413.271933 + 20 +10784.137849 + 30 +0.0 + 11 +7413.109332 + 21 +10784.419482 + 31 +0.0 + 0 +LINE + 5 +DF5 + 8 +0 + 62 + 0 + 10 +7356.859332 + 20 +10881.84734 + 30 +0.0 + 11 +7328.734332 + 21 +10930.561269 + 31 +0.0 + 0 +LINE + 5 +DF6 + 8 +0 + 62 + 0 + 10 +7272.484332 + 20 +11027.989127 + 30 +0.0 + 11 +7266.973973 + 21 +11037.533349 + 31 +0.0 + 0 +LINE + 5 +DF7 + 8 +0 + 62 + 0 + 10 +7441.234332 + 20 +10833.133411 + 30 +0.0 + 11 +7413.109332 + 21 +10881.84734 + 31 +0.0 + 0 +LINE + 5 +DF8 + 8 +0 + 62 + 0 + 10 +7356.859332 + 20 +10979.275198 + 30 +0.0 + 11 +7328.734332 + 21 +11027.989127 + 31 +0.0 + 0 +LINE + 5 +DF9 + 8 +0 + 62 + 0 + 10 +7441.234332 + 20 +10930.561268 + 30 +0.0 + 11 +7413.109332 + 21 +10979.275197 + 31 +0.0 + 0 +LINE + 5 +DFA + 8 +0 + 62 + 0 + 10 +7356.859332 + 20 +11076.703055 + 30 +0.0 + 11 +7349.665648 + 21 +11089.162881 + 31 +0.0 + 0 +LINE + 5 +DFB + 8 +0 + 62 + 0 + 10 +7525.609331 + 20 +10881.847339 + 30 +0.0 + 11 +7497.484331 + 21 +10930.561268 + 31 +0.0 + 0 +LINE + 5 +DFC + 8 +0 + 62 + 0 + 10 +7441.234331 + 20 +11027.989126 + 30 +0.0 + 11 +7413.109331 + 21 +11076.703055 + 31 +0.0 + 0 +LINE + 5 +DFD + 8 +0 + 62 + 0 + 10 +7525.609331 + 20 +10979.275197 + 30 +0.0 + 11 +7497.484331 + 21 +11027.989126 + 31 +0.0 + 0 +LINE + 5 +DFE + 8 +0 + 62 + 0 + 10 +7441.234331 + 20 +11125.416984 + 30 +0.0 + 11 +7432.357323 + 21 +11140.792413 + 31 +0.0 + 0 +LINE + 5 +DFF + 8 +0 + 62 + 0 + 10 +7609.984331 + 20 +10930.561268 + 30 +0.0 + 11 +7581.859331 + 21 +10979.275197 + 31 +0.0 + 0 +LINE + 5 +E00 + 8 +0 + 62 + 0 + 10 +7525.609331 + 20 +11076.703055 + 30 +0.0 + 11 +7497.484331 + 21 +11125.416984 + 31 +0.0 + 0 +LINE + 5 +E01 + 8 +0 + 62 + 0 + 10 +7609.984331 + 20 +11027.989126 + 30 +0.0 + 11 +7581.859331 + 21 +11076.703055 + 31 +0.0 + 0 +LINE + 5 +E02 + 8 +0 + 62 + 0 + 10 +7525.609331 + 20 +11174.130913 + 30 +0.0 + 11 +7515.048999 + 21 +11192.421945 + 31 +0.0 + 0 +LINE + 5 +E03 + 8 +0 + 62 + 0 + 10 +7694.359331 + 20 +10979.275197 + 30 +0.0 + 11 +7666.234331 + 21 +11027.989126 + 31 +0.0 + 0 +LINE + 5 +E04 + 8 +0 + 62 + 0 + 10 +7609.984331 + 20 +11125.416984 + 30 +0.0 + 11 +7581.859331 + 21 +11174.130913 + 31 +0.0 + 0 +LINE + 5 +E05 + 8 +0 + 62 + 0 + 10 +7694.35933 + 20 +11076.703055 + 30 +0.0 + 11 +7666.23433 + 21 +11125.416984 + 31 +0.0 + 0 +LINE + 5 +E06 + 8 +0 + 62 + 0 + 10 +7609.98433 + 20 +11222.844842 + 30 +0.0 + 11 +7597.740674 + 21 +11244.051477 + 31 +0.0 + 0 +LINE + 5 +E07 + 8 +0 + 62 + 0 + 10 +7778.73433 + 20 +11027.989126 + 30 +0.0 + 11 +7750.60933 + 21 +11076.703055 + 31 +0.0 + 0 +LINE + 5 +E08 + 8 +0 + 62 + 0 + 10 +7694.35933 + 20 +11174.130913 + 30 +0.0 + 11 +7666.23433 + 21 +11222.844842 + 31 +0.0 + 0 +LINE + 5 +E09 + 8 +0 + 62 + 0 + 10 +7778.73433 + 20 +11125.416983 + 30 +0.0 + 11 +7750.60933 + 21 +11174.130912 + 31 +0.0 + 0 +LINE + 5 +E0A + 8 +0 + 62 + 0 + 10 +7694.35933 + 20 +11271.55877 + 30 +0.0 + 11 +7680.432349 + 21 +11295.681009 + 31 +0.0 + 0 +LINE + 5 +E0B + 8 +0 + 62 + 0 + 10 +7863.10933 + 20 +11076.703054 + 30 +0.0 + 11 +7834.98433 + 21 +11125.416983 + 31 +0.0 + 0 +LINE + 5 +E0C + 8 +0 + 62 + 0 + 10 +7778.73433 + 20 +11222.844841 + 30 +0.0 + 11 +7750.60933 + 21 +11271.55877 + 31 +0.0 + 0 +LINE + 5 +E0D + 8 +0 + 62 + 0 + 10 +7863.10933 + 20 +11174.130912 + 30 +0.0 + 11 +7834.98433 + 21 +11222.844841 + 31 +0.0 + 0 +LINE + 5 +E0E + 8 +0 + 62 + 0 + 10 +7778.73433 + 20 +11320.272699 + 30 +0.0 + 11 +7763.124024 + 21 +11347.310541 + 31 +0.0 + 0 +LINE + 5 +E0F + 8 +0 + 62 + 0 + 10 +7947.484329 + 20 +11125.416983 + 30 +0.0 + 11 +7919.359329 + 21 +11174.130912 + 31 +0.0 + 0 +LINE + 5 +E10 + 8 +0 + 62 + 0 + 10 +7863.109329 + 20 +11271.55877 + 30 +0.0 + 11 +7834.984329 + 21 +11320.272699 + 31 +0.0 + 0 +LINE + 5 +E11 + 8 +0 + 62 + 0 + 10 +7947.484329 + 20 +11222.844841 + 30 +0.0 + 11 +7919.359329 + 21 +11271.55877 + 31 +0.0 + 0 +LINE + 5 +E12 + 8 +0 + 62 + 0 + 10 +7863.109329 + 20 +11368.986628 + 30 +0.0 + 11 +7845.8157 + 21 +11398.940073 + 31 +0.0 + 0 +LINE + 5 +E13 + 8 +0 + 62 + 0 + 10 +8031.244368 + 20 +11175.196055 + 30 +0.0 + 11 +8003.734329 + 21 +11222.844841 + 31 +0.0 + 0 +LINE + 5 +E14 + 8 +0 + 62 + 0 + 10 +7947.484329 + 20 +11320.272699 + 30 +0.0 + 11 +7919.359329 + 21 +11368.986628 + 31 +0.0 + 0 +LINE + 5 +E15 + 8 +0 + 62 + 0 + 10 +8031.859329 + 20 +11271.55877 + 30 +0.0 + 11 +8003.734329 + 21 +11320.272699 + 31 +0.0 + 0 +LINE + 5 +E16 + 8 +0 + 62 + 0 + 10 +7947.484329 + 20 +11417.700557 + 30 +0.0 + 11 +7928.507375 + 21 +11450.569605 + 31 +0.0 + 0 +LINE + 5 +E17 + 8 +0 + 62 + 0 + 10 +8113.640693 + 20 +11227.337149 + 30 +0.0 + 11 +8088.109329 + 21 +11271.55877 + 31 +0.0 + 0 +LINE + 5 +E18 + 8 +0 + 62 + 0 + 10 +8031.859329 + 20 +11368.986628 + 30 +0.0 + 11 +8003.734329 + 21 +11417.700557 + 31 +0.0 + 0 +LINE + 5 +E19 + 8 +0 + 62 + 0 + 10 +8116.234329 + 20 +11320.272698 + 30 +0.0 + 11 +8088.109329 + 21 +11368.986627 + 31 +0.0 + 0 +LINE + 5 +E1A + 8 +0 + 62 + 0 + 10 +8031.859329 + 20 +11466.414485 + 30 +0.0 + 11 +8011.19905 + 21 +11502.199137 + 31 +0.0 + 0 +LINE + 5 +E1B + 8 +0 + 62 + 0 + 10 +8196.037018 + 20 +11279.478243 + 30 +0.0 + 11 +8172.484328 + 21 +11320.272698 + 31 +0.0 + 0 +LINE + 5 +E1C + 8 +0 + 62 + 0 + 10 +8116.234328 + 20 +11417.700556 + 30 +0.0 + 11 +8088.109328 + 21 +11466.414485 + 31 +0.0 + 0 +LINE + 5 +E1D + 8 +0 + 62 + 0 + 10 +8200.609328 + 20 +11368.986627 + 30 +0.0 + 11 +8172.484328 + 21 +11417.700556 + 31 +0.0 + 0 +LINE + 5 +E1E + 8 +0 + 62 + 0 + 10 +8116.234328 + 20 +11515.128414 + 30 +0.0 + 11 +8093.890726 + 21 +11553.828669 + 31 +0.0 + 0 +LINE + 5 +E1F + 8 +0 + 62 + 0 + 10 +8278.433343 + 20 +11331.619338 + 30 +0.0 + 11 +8256.859328 + 21 +11368.986627 + 31 +0.0 + 0 +LINE + 5 +E20 + 8 +0 + 62 + 0 + 10 +8200.609328 + 20 +11466.414485 + 30 +0.0 + 11 +8172.484328 + 21 +11515.128414 + 31 +0.0 + 0 +LINE + 5 +E21 + 8 +0 + 62 + 0 + 10 +7590.023219 + 20 +10895.987564 + 30 +0.0 + 11 +7609.984375 + 21 +10930.5613 + 31 +0.0 + 0 +LINE + 5 +E22 + 8 +0 + 62 + 0 + 10 +7666.234375 + 20 +11027.989158 + 30 +0.0 + 11 +7694.359375 + 21 +11076.703087 + 31 +0.0 + 0 +LINE + 5 +E23 + 8 +0 + 62 + 0 + 10 +7750.609375 + 20 +11174.130945 + 30 +0.0 + 11 +7778.734375 + 21 +11222.844874 + 31 +0.0 + 0 +LINE + 5 +E24 + 8 +0 + 62 + 0 + 10 +7834.984375 + 20 +11320.272731 + 30 +0.0 + 11 +7863.109375 + 21 +11368.98666 + 31 +0.0 + 0 +LINE + 5 +E25 + 8 +0 + 62 + 0 + 10 +7501.391389 + 20 +10839.900589 + 30 +0.0 + 11 +7525.609375 + 21 +10881.847371 + 31 +0.0 + 0 +LINE + 5 +E26 + 8 +0 + 62 + 0 + 10 +7581.859375 + 20 +10979.275229 + 30 +0.0 + 11 +7609.984375 + 21 +11027.989158 + 31 +0.0 + 0 +LINE + 5 +E27 + 8 +0 + 62 + 0 + 10 +7666.234375 + 20 +11125.417016 + 30 +0.0 + 11 +7694.359375 + 21 +11174.130944 + 31 +0.0 + 0 +LINE + 5 +E28 + 8 +0 + 62 + 0 + 10 +7750.609375 + 20 +11271.558802 + 30 +0.0 + 11 +7778.734375 + 21 +11320.272731 + 31 +0.0 + 0 +LINE + 5 +E29 + 8 +0 + 62 + 0 + 10 +7413.109375 + 20 +10784.419513 + 30 +0.0 + 11 +7441.234375 + 21 +10833.133442 + 31 +0.0 + 0 +LINE + 5 +E2A + 8 +0 + 62 + 0 + 10 +7497.484375 + 20 +10930.5613 + 30 +0.0 + 11 +7525.609375 + 21 +10979.275229 + 31 +0.0 + 0 +LINE + 5 +E2B + 8 +0 + 62 + 0 + 10 +7581.859375 + 20 +11076.703086 + 30 +0.0 + 11 +7609.984375 + 21 +11125.417015 + 31 +0.0 + 0 +LINE + 5 +E2C + 8 +0 + 62 + 0 + 10 +7666.234375 + 20 +11222.844873 + 30 +0.0 + 11 +7694.359375 + 21 +11271.558802 + 31 +0.0 + 0 +LINE + 5 +E2D + 8 +0 + 62 + 0 + 10 +7328.734375 + 20 +10735.705584 + 30 +0.0 + 11 +7356.859375 + 21 +10784.419513 + 31 +0.0 + 0 +LINE + 5 +E2E + 8 +0 + 62 + 0 + 10 +7413.109375 + 20 +10881.84737 + 30 +0.0 + 11 +7441.234375 + 21 +10930.561299 + 31 +0.0 + 0 +LINE + 5 +E2F + 8 +0 + 62 + 0 + 10 +7497.484375 + 20 +11027.989157 + 30 +0.0 + 11 +7525.609375 + 21 +11076.703086 + 31 +0.0 + 0 +LINE + 5 +E30 + 8 +0 + 62 + 0 + 10 +7581.859375 + 20 +11174.130944 + 30 +0.0 + 11 +7609.984375 + 21 +11222.844873 + 31 +0.0 + 0 +LINE + 5 +E31 + 8 +0 + 62 + 0 + 10 +7244.359375 + 20 +10686.991655 + 30 +0.0 + 11 +7272.484375 + 21 +10735.705583 + 31 +0.0 + 0 +LINE + 5 +E32 + 8 +0 + 62 + 0 + 10 +7328.734375 + 20 +10833.133441 + 30 +0.0 + 11 +7356.859375 + 21 +10881.84737 + 31 +0.0 + 0 +LINE + 5 +E33 + 8 +0 + 62 + 0 + 10 +7413.109375 + 20 +10979.275228 + 30 +0.0 + 11 +7441.234375 + 21 +11027.989157 + 31 +0.0 + 0 +LINE + 5 +E34 + 8 +0 + 62 + 0 + 10 +7497.484375 + 20 +11125.417015 + 30 +0.0 + 11 +7525.609375 + 21 +11174.130944 + 31 +0.0 + 0 +LINE + 5 +E35 + 8 +0 + 62 + 0 + 10 +5472.484376 + 20 +7715.441988 + 30 +0.0 + 11 +5500.609376 + 21 +7764.155917 + 31 +0.0 + 0 +LINE + 5 +E36 + 8 +0 + 62 + 0 + 10 +7159.984376 + 20 +10638.277725 + 30 +0.0 + 11 +7188.109376 + 21 +10686.991654 + 31 +0.0 + 0 +LINE + 5 +E37 + 8 +0 + 62 + 0 + 10 +7244.359376 + 20 +10784.419512 + 30 +0.0 + 11 +7272.484376 + 21 +10833.133441 + 31 +0.0 + 0 +LINE + 5 +E38 + 8 +0 + 62 + 0 + 10 +7328.734376 + 20 +10930.561299 + 30 +0.0 + 11 +7356.859376 + 21 +10979.275228 + 31 +0.0 + 0 +LINE + 5 +E39 + 8 +0 + 62 + 0 + 10 +7413.109376 + 20 +11076.703086 + 30 +0.0 + 11 +7441.234376 + 21 +11125.417015 + 31 +0.0 + 0 +LINE + 5 +E3A + 8 +0 + 62 + 0 + 10 +5411.934989 + 20 +7707.995231 + 30 +0.0 + 11 +5416.234376 + 21 +7715.441988 + 31 +0.0 + 0 +LINE + 5 +E3B + 8 +0 + 62 + 0 + 10 +5472.484376 + 20 +7812.869846 + 30 +0.0 + 11 +5500.609376 + 21 +7861.583774 + 31 +0.0 + 0 +LINE + 5 +E3C + 8 +0 + 62 + 0 + 10 +7075.609376 + 20 +10589.563796 + 30 +0.0 + 11 +7103.734376 + 21 +10638.277725 + 31 +0.0 + 0 +LINE + 5 +E3D + 8 +0 + 62 + 0 + 10 +7159.984376 + 20 +10735.705583 + 30 +0.0 + 11 +7188.109376 + 21 +10784.419512 + 31 +0.0 + 0 +LINE + 5 +E3E + 8 +0 + 62 + 0 + 10 +7244.359376 + 20 +10881.84737 + 30 +0.0 + 11 +7272.484376 + 21 +10930.561299 + 31 +0.0 + 0 +LINE + 5 +E3F + 8 +0 + 62 + 0 + 10 +7328.734376 + 20 +11027.989157 + 30 +0.0 + 11 +7356.859376 + 21 +11076.703086 + 31 +0.0 + 0 +LINE + 5 +E40 + 8 +0 + 62 + 0 + 10 +5388.109376 + 20 +7764.155916 + 30 +0.0 + 11 +5416.234376 + 21 +7812.869845 + 31 +0.0 + 0 +LINE + 5 +E41 + 8 +0 + 62 + 0 + 10 +5472.484376 + 20 +7910.297703 + 30 +0.0 + 11 +5500.609376 + 21 +7959.011632 + 31 +0.0 + 0 +LINE + 5 +E42 + 8 +0 + 62 + 0 + 10 +6991.234376 + 20 +10540.849867 + 30 +0.0 + 11 +7019.359376 + 21 +10589.563796 + 31 +0.0 + 0 +LINE + 5 +E43 + 8 +0 + 62 + 0 + 10 +7075.609376 + 20 +10686.991654 + 30 +0.0 + 11 +7103.734376 + 21 +10735.705583 + 31 +0.0 + 0 +LINE + 5 +E44 + 8 +0 + 62 + 0 + 10 +7159.984376 + 20 +10833.133441 + 30 +0.0 + 11 +7188.109376 + 21 +10881.84737 + 31 +0.0 + 0 +LINE + 5 +E45 + 8 +0 + 62 + 0 + 10 +7244.359376 + 20 +10979.275228 + 30 +0.0 + 11 +7272.484376 + 21 +11027.989157 + 31 +0.0 + 0 +LINE + 5 +E46 + 8 +0 + 62 + 0 + 10 +5388.109376 + 20 +7861.583774 + 30 +0.0 + 11 +5416.234376 + 21 +7910.297703 + 31 +0.0 + 0 +LINE + 5 +E47 + 8 +0 + 62 + 0 + 10 +5472.484376 + 20 +8007.725561 + 30 +0.0 + 11 +5500.609376 + 21 +8056.43949 + 31 +0.0 + 0 +LINE + 5 +E48 + 8 +0 + 62 + 0 + 10 +6906.859376 + 20 +10492.135938 + 30 +0.0 + 11 +6934.984376 + 21 +10540.849867 + 31 +0.0 + 0 +LINE + 5 +E49 + 8 +0 + 62 + 0 + 10 +6991.234376 + 20 +10638.277725 + 30 +0.0 + 11 +7019.359376 + 21 +10686.991654 + 31 +0.0 + 0 +LINE + 5 +E4A + 8 +0 + 62 + 0 + 10 +7075.609376 + 20 +10784.419512 + 30 +0.0 + 11 +7103.734376 + 21 +10833.133441 + 31 +0.0 + 0 +LINE + 5 +E4B + 8 +0 + 62 + 0 + 10 +7159.984376 + 20 +10930.561299 + 30 +0.0 + 11 +7188.109376 + 21 +10979.275228 + 31 +0.0 + 0 +LINE + 5 +E4C + 8 +0 + 62 + 0 + 10 +5388.109376 + 20 +7959.011632 + 30 +0.0 + 11 +5416.234376 + 21 +8007.725561 + 31 +0.0 + 0 +LINE + 5 +E4D + 8 +0 + 62 + 0 + 10 +5472.484376 + 20 +8105.153419 + 30 +0.0 + 11 +5500.609376 + 21 +8153.867348 + 31 +0.0 + 0 +LINE + 5 +E4E + 8 +0 + 62 + 0 + 10 +6822.484376 + 20 +10443.422009 + 30 +0.0 + 11 +6850.609376 + 21 +10492.135938 + 31 +0.0 + 0 +LINE + 5 +E4F + 8 +0 + 62 + 0 + 10 +6906.859376 + 20 +10589.563796 + 30 +0.0 + 11 +6934.984376 + 21 +10638.277725 + 31 +0.0 + 0 +LINE + 5 +E50 + 8 +0 + 62 + 0 + 10 +6991.234376 + 20 +10735.705583 + 30 +0.0 + 11 +7019.359376 + 21 +10784.419512 + 31 +0.0 + 0 +LINE + 5 +E51 + 8 +0 + 62 + 0 + 10 +7075.609376 + 20 +10881.84737 + 30 +0.0 + 11 +7103.734376 + 21 +10930.561299 + 31 +0.0 + 0 +LINE + 5 +E52 + 8 +0 + 62 + 0 + 10 +5388.109377 + 20 +8056.43949 + 30 +0.0 + 11 +5416.234377 + 21 +8105.153419 + 31 +0.0 + 0 +LINE + 5 +E53 + 8 +0 + 62 + 0 + 10 +5472.484377 + 20 +8202.581277 + 30 +0.0 + 11 +5500.609377 + 21 +8251.295206 + 31 +0.0 + 0 +LINE + 5 +E54 + 8 +0 + 62 + 0 + 10 +6738.109377 + 20 +10394.70808 + 30 +0.0 + 11 +6766.234377 + 21 +10443.422009 + 31 +0.0 + 0 +LINE + 5 +E55 + 8 +0 + 62 + 0 + 10 +6822.484377 + 20 +10540.849867 + 30 +0.0 + 11 +6850.609377 + 21 +10589.563796 + 31 +0.0 + 0 +LINE + 5 +E56 + 8 +0 + 62 + 0 + 10 +6906.859377 + 20 +10686.991654 + 30 +0.0 + 11 +6934.984377 + 21 +10735.705583 + 31 +0.0 + 0 +LINE + 5 +E57 + 8 +0 + 62 + 0 + 10 +6991.234377 + 20 +10833.133441 + 30 +0.0 + 11 +7019.359377 + 21 +10881.84737 + 31 +0.0 + 0 +LINE + 5 +E58 + 8 +0 + 62 + 0 + 10 +5388.109377 + 20 +8153.867348 + 30 +0.0 + 11 +5416.234377 + 21 +8202.581277 + 31 +0.0 + 0 +LINE + 5 +E59 + 8 +0 + 62 + 0 + 10 +5472.484377 + 20 +8300.009135 + 30 +0.0 + 11 +5500.609377 + 21 +8348.723064 + 31 +0.0 + 0 +LINE + 5 +E5A + 8 +0 + 62 + 0 + 10 +6653.734377 + 20 +10345.994151 + 30 +0.0 + 11 +6681.859377 + 21 +10394.70808 + 31 +0.0 + 0 +LINE + 5 +E5B + 8 +0 + 62 + 0 + 10 +6738.109377 + 20 +10492.135938 + 30 +0.0 + 11 +6766.234377 + 21 +10540.849867 + 31 +0.0 + 0 +LINE + 5 +E5C + 8 +0 + 62 + 0 + 10 +6822.484377 + 20 +10638.277725 + 30 +0.0 + 11 +6850.609377 + 21 +10686.991654 + 31 +0.0 + 0 +LINE + 5 +E5D + 8 +0 + 62 + 0 + 10 +6906.859377 + 20 +10784.419512 + 30 +0.0 + 11 +6932.382789 + 21 +10828.627359 + 31 +0.0 + 0 +LINE + 5 +E5E + 8 +0 + 62 + 0 + 10 +5388.109377 + 20 +8251.295206 + 30 +0.0 + 11 +5416.234377 + 21 +8300.009135 + 31 +0.0 + 0 +LINE + 5 +E5F + 8 +0 + 62 + 0 + 10 +5472.484377 + 20 +8397.436992 + 30 +0.0 + 11 +5500.609377 + 21 +8446.150921 + 31 +0.0 + 0 +LINE + 5 +E60 + 8 +0 + 62 + 0 + 10 +6569.359377 + 20 +10297.280222 + 30 +0.0 + 11 +6597.484377 + 21 +10345.994151 + 31 +0.0 + 0 +LINE + 5 +E61 + 8 +0 + 62 + 0 + 10 +6653.734377 + 20 +10443.422009 + 30 +0.0 + 11 +6681.859377 + 21 +10492.135938 + 31 +0.0 + 0 +LINE + 5 +E62 + 8 +0 + 62 + 0 + 10 +6738.109377 + 20 +10589.563796 + 30 +0.0 + 11 +6766.234377 + 21 +10638.277725 + 31 +0.0 + 0 +LINE + 5 +E63 + 8 +0 + 62 + 0 + 10 +6822.484377 + 20 +10735.705583 + 30 +0.0 + 11 +6844.426814 + 21 +10773.710999 + 31 +0.0 + 0 +LINE + 5 +E64 + 8 +0 + 62 + 0 + 10 +5388.109377 + 20 +8348.723063 + 30 +0.0 + 11 +5416.234377 + 21 +8397.436992 + 31 +0.0 + 0 +LINE + 5 +E65 + 8 +0 + 62 + 0 + 10 +5472.484377 + 20 +8494.86485 + 30 +0.0 + 11 +5500.609377 + 21 +8543.578779 + 31 +0.0 + 0 +LINE + 5 +E66 + 8 +0 + 62 + 0 + 10 +6484.984377 + 20 +10248.566293 + 30 +0.0 + 11 +6513.109377 + 21 +10297.280222 + 31 +0.0 + 0 +LINE + 5 +E67 + 8 +0 + 62 + 0 + 10 +6569.359377 + 20 +10394.70808 + 30 +0.0 + 11 +6597.484377 + 21 +10443.422009 + 31 +0.0 + 0 +LINE + 5 +E68 + 8 +0 + 62 + 0 + 10 +6653.734377 + 20 +10540.849867 + 30 +0.0 + 11 +6681.859377 + 21 +10589.563796 + 31 +0.0 + 0 +LINE + 5 +E69 + 8 +0 + 62 + 0 + 10 +6738.109377 + 20 +10686.991654 + 30 +0.0 + 11 +6756.470839 + 21 +10718.794639 + 31 +0.0 + 0 +LINE + 5 +E6A + 8 +0 + 62 + 0 + 10 +5388.109377 + 20 +8446.150921 + 30 +0.0 + 11 +5416.234377 + 21 +8494.86485 + 31 +0.0 + 0 +LINE + 5 +E6B + 8 +0 + 62 + 0 + 10 +5472.484377 + 20 +8592.292708 + 30 +0.0 + 11 +5500.609377 + 21 +8641.006637 + 31 +0.0 + 0 +LINE + 5 +E6C + 8 +0 + 62 + 0 + 10 +6400.609377 + 20 +10199.852364 + 30 +0.0 + 11 +6428.734377 + 21 +10248.566293 + 31 +0.0 + 0 +LINE + 5 +E6D + 8 +0 + 62 + 0 + 10 +6484.984377 + 20 +10345.994151 + 30 +0.0 + 11 +6513.109377 + 21 +10394.70808 + 31 +0.0 + 0 +LINE + 5 +E6E + 8 +0 + 62 + 0 + 10 +6569.359377 + 20 +10492.135938 + 30 +0.0 + 11 +6597.484377 + 21 +10540.849867 + 31 +0.0 + 0 +LINE + 5 +E6F + 8 +0 + 62 + 0 + 10 +6653.734377 + 20 +10638.277725 + 30 +0.0 + 11 +6668.514864 + 21 +10663.878278 + 31 +0.0 + 0 +LINE + 5 +E70 + 8 +0 + 62 + 0 + 10 +5388.109377 + 20 +8543.578779 + 30 +0.0 + 11 +5416.234377 + 21 +8592.292708 + 31 +0.0 + 0 +LINE + 5 +E71 + 8 +0 + 62 + 0 + 10 +5472.484377 + 20 +8689.720566 + 30 +0.0 + 11 +5500.609377 + 21 +8738.434495 + 31 +0.0 + 0 +LINE + 5 +E72 + 8 +0 + 62 + 0 + 10 +6316.234377 + 20 +10151.138435 + 30 +0.0 + 11 +6344.359377 + 21 +10199.852364 + 31 +0.0 + 0 +LINE + 5 +E73 + 8 +0 + 62 + 0 + 10 +6400.609377 + 20 +10297.280222 + 30 +0.0 + 11 +6428.734377 + 21 +10345.994151 + 31 +0.0 + 0 +LINE + 5 +E74 + 8 +0 + 62 + 0 + 10 +6484.984377 + 20 +10443.422009 + 30 +0.0 + 11 +6513.109377 + 21 +10492.135938 + 31 +0.0 + 0 +LINE + 5 +E75 + 8 +0 + 62 + 0 + 10 +6569.359377 + 20 +10589.563795 + 30 +0.0 + 11 +6580.558889 + 21 +10608.961918 + 31 +0.0 + 0 +LINE + 5 +E76 + 8 +0 + 62 + 0 + 10 +5388.109378 + 20 +8641.006637 + 30 +0.0 + 11 +5416.234378 + 21 +8689.720566 + 31 +0.0 + 0 +LINE + 5 +E77 + 8 +0 + 62 + 0 + 10 +5472.484378 + 20 +8787.148424 + 30 +0.0 + 11 +5500.609378 + 21 +8835.862353 + 31 +0.0 + 0 +LINE + 5 +E78 + 8 +0 + 62 + 0 + 10 +6171.913944 + 20 +9998.595969 + 30 +0.0 + 11 +6175.609378 + 21 +10004.996648 + 31 +0.0 + 0 +LINE + 5 +E79 + 8 +0 + 62 + 0 + 10 +6231.859378 + 20 +10102.424506 + 30 +0.0 + 11 +6259.984378 + 21 +10151.138435 + 31 +0.0 + 0 +LINE + 5 +E7A + 8 +0 + 62 + 0 + 10 +6316.234378 + 20 +10248.566293 + 30 +0.0 + 11 +6344.359378 + 21 +10297.280222 + 31 +0.0 + 0 +LINE + 5 +E7B + 8 +0 + 62 + 0 + 10 +6400.609378 + 20 +10394.708079 + 30 +0.0 + 11 +6428.734378 + 21 +10443.422008 + 31 +0.0 + 0 +LINE + 5 +E7C + 8 +0 + 62 + 0 + 10 +6484.984378 + 20 +10540.849866 + 30 +0.0 + 11 +6492.602913 + 21 +10554.045557 + 31 +0.0 + 0 +LINE + 5 +E7D + 8 +0 + 62 + 0 + 10 +5388.109378 + 20 +8738.434495 + 30 +0.0 + 11 +5416.234378 + 21 +8787.148424 + 31 +0.0 + 0 +LINE + 5 +E7E + 8 +0 + 62 + 0 + 10 +5472.484378 + 20 +8884.576282 + 30 +0.0 + 11 +5500.609378 + 21 +8933.29021 + 31 +0.0 + 0 +LINE + 5 +E7F + 8 +0 + 62 + 0 + 10 +6083.282115 + 20 +9942.508995 + 30 +0.0 + 11 +6091.234378 + 21 +9956.282719 + 31 +0.0 + 0 +LINE + 5 +E80 + 8 +0 + 62 + 0 + 10 +6147.484378 + 20 +10053.710577 + 30 +0.0 + 11 +6175.609378 + 21 +10102.424506 + 31 +0.0 + 0 +LINE + 5 +E81 + 8 +0 + 62 + 0 + 10 +6231.859378 + 20 +10199.852364 + 30 +0.0 + 11 +6259.984378 + 21 +10248.566292 + 31 +0.0 + 0 +LINE + 5 +E82 + 8 +0 + 62 + 0 + 10 +6316.234378 + 20 +10345.99415 + 30 +0.0 + 11 +6344.359378 + 21 +10394.708079 + 31 +0.0 + 0 +LINE + 5 +E83 + 8 +0 + 62 + 0 + 10 +6400.609378 + 20 +10492.135937 + 30 +0.0 + 11 +6404.646938 + 21 +10499.129197 + 31 +0.0 + 0 +LINE + 5 +E84 + 8 +0 + 62 + 0 + 10 +5748.950757 + 20 +9363.430097 + 30 +0.0 + 11 +5753.734378 + 21 +9371.715571 + 31 +0.0 + 0 +LINE + 5 +E85 + 8 +0 + 62 + 0 + 10 +5388.109378 + 20 +8835.862352 + 30 +0.0 + 11 +5416.234378 + 21 +8884.576281 + 31 +0.0 + 0 +LINE + 5 +E86 + 8 +0 + 62 + 0 + 10 +5472.484378 + 20 +8982.004139 + 30 +0.0 + 11 +5500.609378 + 21 +9030.718068 + 31 +0.0 + 0 +LINE + 5 +E87 + 8 +0 + 62 + 0 + 10 +5994.650285 + 20 +9886.42202 + 30 +0.0 + 11 +6006.859378 + 21 +9907.56879 + 31 +0.0 + 0 +LINE + 5 +E88 + 8 +0 + 62 + 0 + 10 +6063.109378 + 20 +10004.996648 + 30 +0.0 + 11 +6091.234378 + 21 +10053.710577 + 31 +0.0 + 0 +LINE + 5 +E89 + 8 +0 + 62 + 0 + 10 +6147.484378 + 20 +10151.138434 + 30 +0.0 + 11 +6175.609378 + 21 +10199.852363 + 31 +0.0 + 0 +LINE + 5 +E8A + 8 +0 + 62 + 0 + 10 +6231.859378 + 20 +10297.280221 + 30 +0.0 + 11 +6259.984378 + 21 +10345.99415 + 31 +0.0 + 0 +LINE + 5 +E8B + 8 +0 + 62 + 0 + 10 +6316.234378 + 20 +10443.422008 + 30 +0.0 + 11 +6316.690963 + 21 +10444.212837 + 31 +0.0 + 0 +LINE + 5 +E8C + 8 +0 + 62 + 0 + 10 +5725.609378 + 20 +9420.4295 + 30 +0.0 + 11 +5753.734378 + 21 +9469.143429 + 31 +0.0 + 0 +LINE + 5 +E8D + 8 +0 + 62 + 0 + 10 +5388.109378 + 20 +8933.29021 + 30 +0.0 + 11 +5416.234378 + 21 +8982.004139 + 31 +0.0 + 0 +LINE + 5 +E8E + 8 +0 + 62 + 0 + 10 +5472.484378 + 20 +9079.431997 + 30 +0.0 + 11 +5500.609378 + 21 +9128.145926 + 31 +0.0 + 0 +LINE + 5 +E8F + 8 +0 + 62 + 0 + 10 +5921.034166 + 20 +9856.34302 + 30 +0.0 + 11 +5922.484378 + 21 +9858.854861 + 31 +0.0 + 0 +LINE + 5 +E90 + 8 +0 + 62 + 0 + 10 +5978.734378 + 20 +9956.282718 + 30 +0.0 + 11 +6006.859378 + 21 +10004.996647 + 31 +0.0 + 0 +LINE + 5 +E91 + 8 +0 + 62 + 0 + 10 +6063.109378 + 20 +10102.424505 + 30 +0.0 + 11 +6091.234378 + 21 +10151.138434 + 31 +0.0 + 0 +LINE + 5 +E92 + 8 +0 + 62 + 0 + 10 +6147.484378 + 20 +10248.566292 + 30 +0.0 + 11 +6175.609378 + 21 +10297.280221 + 31 +0.0 + 0 +LINE + 5 +E93 + 8 +0 + 62 + 0 + 10 +5641.234378 + 20 +9371.715571 + 30 +0.0 + 11 +5669.359378 + 21 +9420.4295 + 31 +0.0 + 0 +LINE + 5 +E94 + 8 +0 + 62 + 0 + 10 +5725.609378 + 20 +9517.857358 + 30 +0.0 + 11 +5753.734378 + 21 +9566.571287 + 31 +0.0 + 0 +LINE + 5 +E95 + 8 +0 + 62 + 0 + 10 +5388.109378 + 20 +9030.718068 + 30 +0.0 + 11 +5416.234378 + 21 +9079.431997 + 31 +0.0 + 0 +LINE + 5 +E96 + 8 +0 + 62 + 0 + 10 +5472.484378 + 20 +9176.859855 + 30 +0.0 + 11 +5500.609378 + 21 +9225.573784 + 31 +0.0 + 0 +LINE + 5 +E97 + 8 +0 + 62 + 0 + 10 +5894.359378 + 20 +9907.568789 + 30 +0.0 + 11 +5922.484378 + 21 +9956.282718 + 31 +0.0 + 0 +LINE + 5 +E98 + 8 +0 + 62 + 0 + 10 +5978.734378 + 20 +10053.710576 + 30 +0.0 + 11 +6006.859378 + 21 +10102.424505 + 31 +0.0 + 0 +LINE + 5 +E99 + 8 +0 + 62 + 0 + 10 +6063.109378 + 20 +10199.852363 + 30 +0.0 + 11 +6091.234378 + 21 +10248.566292 + 31 +0.0 + 0 +LINE + 5 +E9A + 8 +0 + 62 + 0 + 10 +5573.206717 + 20 +9351.316063 + 30 +0.0 + 11 +5584.984378 + 21 +9371.715571 + 31 +0.0 + 0 +LINE + 5 +E9B + 8 +0 + 62 + 0 + 10 +5641.234378 + 20 +9469.143429 + 30 +0.0 + 11 +5669.359378 + 21 +9517.857358 + 31 +0.0 + 0 +LINE + 5 +E9C + 8 +0 + 62 + 0 + 10 +5725.609378 + 20 +9615.285216 + 30 +0.0 + 11 +5753.734378 + 21 +9663.999145 + 31 +0.0 + 0 +LINE + 5 +E9D + 8 +0 + 62 + 0 + 10 +5388.109379 + 20 +9128.145926 + 30 +0.0 + 11 +5416.234379 + 21 +9176.859855 + 31 +0.0 + 0 +LINE + 5 +E9E + 8 +0 + 62 + 0 + 10 +5472.484379 + 20 +9274.287713 + 30 +0.0 + 11 +5500.609379 + 21 +9323.001642 + 31 +0.0 + 0 +LINE + 5 +E9F + 8 +0 + 62 + 0 + 10 +5556.859379 + 20 +9420.4295 + 30 +0.0 + 11 +5584.984379 + 21 +9469.143429 + 31 +0.0 + 0 +LINE + 5 +EA0 + 8 +0 + 62 + 0 + 10 +5641.234379 + 20 +9566.571287 + 30 +0.0 + 11 +5669.359379 + 21 +9615.285216 + 31 +0.0 + 0 +LINE + 5 +EA1 + 8 +0 + 62 + 0 + 10 +5725.609379 + 20 +9712.713073 + 30 +0.0 + 11 +5753.734379 + 21 +9761.427002 + 31 +0.0 + 0 +LINE + 5 +EA2 + 8 +0 + 62 + 0 + 10 +5809.984379 + 20 +9858.85486 + 30 +0.0 + 11 +5838.109379 + 21 +9907.568789 + 31 +0.0 + 0 +LINE + 5 +EA3 + 8 +0 + 62 + 0 + 10 +5894.359379 + 20 +10004.996647 + 30 +0.0 + 11 +5922.484379 + 21 +10053.710576 + 31 +0.0 + 0 +LINE + 5 +EA4 + 8 +0 + 62 + 0 + 10 +5978.734379 + 20 +10151.138434 + 30 +0.0 + 11 +6006.859379 + 21 +10199.852363 + 31 +0.0 + 0 +LINE + 5 +EA5 + 8 +0 + 62 + 0 + 10 +5388.109379 + 20 +9225.573784 + 30 +0.0 + 11 +5416.234379 + 21 +9274.287713 + 31 +0.0 + 0 +LINE + 5 +EA6 + 8 +0 + 62 + 0 + 10 +5472.484379 + 20 +9371.715571 + 30 +0.0 + 11 +5500.609379 + 21 +9420.4295 + 31 +0.0 + 0 +LINE + 5 +EA7 + 8 +0 + 62 + 0 + 10 +5556.859379 + 20 +9517.857358 + 30 +0.0 + 11 +5584.984379 + 21 +9566.571286 + 31 +0.0 + 0 +LINE + 5 +EA8 + 8 +0 + 62 + 0 + 10 +5641.234379 + 20 +9663.999144 + 30 +0.0 + 11 +5669.359379 + 21 +9712.713073 + 31 +0.0 + 0 +LINE + 5 +EA9 + 8 +0 + 62 + 0 + 10 +5725.609379 + 20 +9810.140931 + 30 +0.0 + 11 +5753.734379 + 21 +9858.85486 + 31 +0.0 + 0 +LINE + 5 +EAA + 8 +0 + 62 + 0 + 10 +5809.984379 + 20 +9956.282718 + 30 +0.0 + 11 +5838.109379 + 21 +10004.996647 + 31 +0.0 + 0 +LINE + 5 +EAB + 8 +0 + 62 + 0 + 10 +5894.359379 + 20 +10102.424505 + 30 +0.0 + 11 +5922.484379 + 21 +10151.138434 + 31 +0.0 + 0 +LINE + 5 +EAC + 8 +0 + 62 + 0 + 10 +5388.109379 + 20 +9323.001642 + 30 +0.0 + 11 +5416.234379 + 21 +9371.715571 + 31 +0.0 + 0 +LINE + 5 +EAD + 8 +0 + 62 + 0 + 10 +5472.484379 + 20 +9469.143428 + 30 +0.0 + 11 +5500.609379 + 21 +9517.857357 + 31 +0.0 + 0 +LINE + 5 +EAE + 8 +0 + 62 + 0 + 10 +5556.859379 + 20 +9615.285215 + 30 +0.0 + 11 +5584.984379 + 21 +9663.999144 + 31 +0.0 + 0 +LINE + 5 +EAF + 8 +0 + 62 + 0 + 10 +5641.234379 + 20 +9761.427002 + 30 +0.0 + 11 +5669.359379 + 21 +9810.140931 + 31 +0.0 + 0 +LINE + 5 +EB0 + 8 +0 + 62 + 0 + 10 +5725.609379 + 20 +9907.568789 + 30 +0.0 + 11 +5753.734379 + 21 +9956.282718 + 31 +0.0 + 0 +LINE + 5 +EB1 + 8 +0 + 62 + 0 + 10 +5809.984379 + 20 +10053.710576 + 30 +0.0 + 11 +5838.109379 + 21 +10102.424505 + 31 +0.0 + 0 +LINE + 5 +EB2 + 8 +0 + 62 + 0 + 10 +5388.109379 + 20 +9420.429499 + 30 +0.0 + 11 +5416.234379 + 21 +9469.143428 + 31 +0.0 + 0 +LINE + 5 +EB3 + 8 +0 + 62 + 0 + 10 +5472.484379 + 20 +9566.571286 + 30 +0.0 + 11 +5500.609379 + 21 +9615.285215 + 31 +0.0 + 0 +LINE + 5 +EB4 + 8 +0 + 62 + 0 + 10 +5556.859379 + 20 +9712.713073 + 30 +0.0 + 11 +5584.984379 + 21 +9761.427002 + 31 +0.0 + 0 +LINE + 5 +EB5 + 8 +0 + 62 + 0 + 10 +5641.234379 + 20 +9858.85486 + 30 +0.0 + 11 +5669.359379 + 21 +9907.568789 + 31 +0.0 + 0 +LINE + 5 +EB6 + 8 +0 + 62 + 0 + 10 +5725.609379 + 20 +10004.996647 + 30 +0.0 + 11 +5753.734379 + 21 +10053.710576 + 31 +0.0 + 0 +LINE + 5 +EB7 + 8 +0 + 62 + 0 + 10 +5388.109379 + 20 +9517.857357 + 30 +0.0 + 11 +5416.234379 + 21 +9566.571286 + 31 +0.0 + 0 +LINE + 5 +EB8 + 8 +0 + 62 + 0 + 10 +5472.484379 + 20 +9663.999144 + 30 +0.0 + 11 +5500.609379 + 21 +9712.713073 + 31 +0.0 + 0 +LINE + 5 +EB9 + 8 +0 + 62 + 0 + 10 +5556.859379 + 20 +9810.140931 + 30 +0.0 + 11 +5584.984379 + 21 +9858.85486 + 31 +0.0 + 0 +LINE + 5 +EBA + 8 +0 + 62 + 0 + 10 +5641.234379 + 20 +9956.282718 + 30 +0.0 + 11 +5669.359379 + 21 +10004.996647 + 31 +0.0 + 0 +LINE + 5 +EBB + 8 +0 + 62 + 0 + 10 +5388.109379 + 20 +9615.285215 + 30 +0.0 + 11 +5416.234379 + 21 +9663.999144 + 31 +0.0 + 0 +LINE + 5 +EBC + 8 +0 + 62 + 0 + 10 +5472.484379 + 20 +9761.427002 + 30 +0.0 + 11 +5500.609379 + 21 +9810.140931 + 31 +0.0 + 0 +LINE + 5 +EBD + 8 +0 + 62 + 0 + 10 +5556.859379 + 20 +9907.568789 + 30 +0.0 + 11 +5584.984379 + 21 +9956.282718 + 31 +0.0 + 0 +LINE + 5 +EBE + 8 +0 + 62 + 0 + 10 +5388.10938 + 20 +9712.713073 + 30 +0.0 + 11 +5416.23438 + 21 +9761.427002 + 31 +0.0 + 0 +LINE + 5 +EBF + 8 +0 + 62 + 0 + 10 +5472.48438 + 20 +9858.85486 + 30 +0.0 + 11 +5500.60938 + 21 +9907.568789 + 31 +0.0 + 0 +LINE + 5 +EC0 + 8 +0 + 62 + 0 + 10 +5388.10938 + 20 +9810.140931 + 30 +0.0 + 11 +5416.23438 + 21 +9858.85486 + 31 +0.0 + 0 +LINE + 5 +EC1 + 8 +0 + 62 + 0 + 10 +7678.655049 + 20 +10952.074539 + 30 +0.0 + 11 +7694.359374 + 21 +10979.275229 + 31 +0.0 + 0 +LINE + 5 +EC2 + 8 +0 + 62 + 0 + 10 +7750.609374 + 20 +11076.703087 + 30 +0.0 + 11 +7778.734374 + 21 +11125.417016 + 31 +0.0 + 0 +LINE + 5 +EC3 + 8 +0 + 62 + 0 + 10 +7834.984374 + 20 +11222.844874 + 30 +0.0 + 11 +7863.109374 + 21 +11271.558803 + 31 +0.0 + 0 +LINE + 5 +EC4 + 8 +0 + 62 + 0 + 10 +7919.359374 + 20 +11368.986661 + 30 +0.0 + 11 +7947.484374 + 21 +11417.70059 + 31 +0.0 + 0 +LINE + 5 +EC5 + 8 +0 + 62 + 0 + 10 +7767.286878 + 20 +11008.161513 + 30 +0.0 + 11 +7778.734374 + 21 +11027.989158 + 31 +0.0 + 0 +LINE + 5 +EC6 + 8 +0 + 62 + 0 + 10 +7834.984374 + 20 +11125.417016 + 30 +0.0 + 11 +7863.109374 + 21 +11174.130945 + 31 +0.0 + 0 +LINE + 5 +EC7 + 8 +0 + 62 + 0 + 10 +7919.359374 + 20 +11271.558803 + 30 +0.0 + 11 +7947.484374 + 21 +11320.272732 + 31 +0.0 + 0 +LINE + 5 +EC8 + 8 +0 + 62 + 0 + 10 +8003.734374 + 20 +11417.70059 + 30 +0.0 + 11 +8031.859374 + 21 +11466.414519 + 31 +0.0 + 0 +LINE + 5 +EC9 + 8 +0 + 62 + 0 + 10 +7855.918708 + 20 +11064.248488 + 30 +0.0 + 11 +7863.109374 + 21 +11076.703087 + 31 +0.0 + 0 +LINE + 5 +ECA + 8 +0 + 62 + 0 + 10 +7919.359374 + 20 +11174.130945 + 30 +0.0 + 11 +7947.484374 + 21 +11222.844874 + 31 +0.0 + 0 +LINE + 5 +ECB + 8 +0 + 62 + 0 + 10 +8003.734374 + 20 +11320.272732 + 30 +0.0 + 11 +8031.859374 + 21 +11368.986661 + 31 +0.0 + 0 +LINE + 5 +ECC + 8 +0 + 62 + 0 + 10 +8088.109374 + 20 +11466.414519 + 30 +0.0 + 11 +8116.234374 + 21 +11515.128448 + 31 +0.0 + 0 +LINE + 5 +ECD + 8 +0 + 62 + 0 + 10 +7944.550538 + 20 +11120.335463 + 30 +0.0 + 11 +7947.484374 + 21 +11125.417016 + 31 +0.0 + 0 +LINE + 5 +ECE + 8 +0 + 62 + 0 + 10 +8003.734374 + 20 +11222.844874 + 30 +0.0 + 11 +8031.859374 + 21 +11271.558803 + 31 +0.0 + 0 +LINE + 5 +ECF + 8 +0 + 62 + 0 + 10 +8088.109374 + 20 +11368.986661 + 30 +0.0 + 11 +8116.234374 + 21 +11417.70059 + 31 +0.0 + 0 +LINE + 5 +ED0 + 8 +0 + 62 + 0 + 10 +8172.484374 + 20 +11515.128448 + 30 +0.0 + 11 +8200.609374 + 21 +11563.842377 + 31 +0.0 + 0 +LINE + 5 +ED1 + 8 +0 + 62 + 0 + 10 +8088.109374 + 20 +11271.558803 + 30 +0.0 + 11 +8116.234374 + 21 +11320.272732 + 31 +0.0 + 0 +LINE + 5 +ED2 + 8 +0 + 62 + 0 + 10 +8172.484374 + 20 +11417.70059 + 30 +0.0 + 11 +8200.609374 + 21 +11466.414519 + 31 +0.0 + 0 +LINE + 5 +ED3 + 8 +0 + 62 + 0 + 10 +8172.484374 + 20 +11320.272732 + 30 +0.0 + 11 +8200.609374 + 21 +11368.986661 + 31 +0.0 + 0 +LINE + 5 +ED4 + 8 +0 + 62 + 0 + 10 +8256.859373 + 20 +11368.986661 + 30 +0.0 + 11 +8284.984373 + 21 +11417.70059 + 31 +0.0 + 0 +POLYLINE + 5 +ED5 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +1566 + 8 +MAUERWERK + 10 +6451.85938 + 20 +7695.360132 + 30 +0.0 + 0 +VERTEX + 5 +1567 + 8 +MAUERWERK + 10 +6451.85938 + 20 +9352.860132 + 30 +0.0 + 0 +VERTEX + 5 +1568 + 8 +MAUERWERK + 10 +5539.35938 + 20 +9352.860132 + 30 +0.0 + 0 +VERTEX + 5 +1569 + 8 +MAUERWERK + 10 +5539.35938 + 20 +7695.360132 + 30 +0.0 + 0 +SEQEND + 5 +156A + 8 +MAUERWERK + 0 +POLYLINE + 5 +EDB + 8 +DAEMMUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +156B + 8 +DAEMMUNG + 10 +5341.298947 + 20 +9352.860132 + 30 +0.0 + 0 +VERTEX + 5 +156C + 8 +DAEMMUNG + 10 +5341.298947 + 20 +9352.860132 + 30 +0.0 + 0 +VERTEX + 5 +156D + 8 +DAEMMUNG + 10 +5339.686394 + 20 +7695.360132 + 30 +0.0 + 0 +SEQEND + 5 +156E + 8 +DAEMMUNG + 0 +POLYLINE + 5 +EE0 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +156F + 8 +MAUERWERK + 10 +5189.35938 + 20 +7695.360132 + 30 +0.0 + 0 +VERTEX + 5 +1570 + 8 +MAUERWERK + 10 +5189.35938 + 20 +9352.860132 + 30 +0.0 + 0 +VERTEX + 5 +1571 + 8 +MAUERWERK + 10 +4901.85938 + 20 +9352.860132 + 30 +0.0 + 0 +SEQEND + 5 +1572 + 8 +MAUERWERK + 0 +POLYLINE + 5 +EE5 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1573 + 8 +MAUERWERK + 10 +4901.85938 + 20 +9352.860132 + 30 +0.0 + 0 +VERTEX + 5 +1574 + 8 +MAUERWERK + 10 +4901.85938 + 20 +7695.360132 + 30 +0.0 + 0 +SEQEND + 5 +1575 + 8 +MAUERWERK + 0 +POLYLINE + 5 +EE9 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1576 + 8 +DETAILS + 10 +5944.428582 + 20 +9841.809571 + 30 +0.0 + 0 +VERTEX + 5 +1577 + 8 +DETAILS + 10 +5944.428582 + 20 +8900.360132 + 30 +0.0 + 0 +VERTEX + 5 +1578 + 8 +DETAILS + 10 +5866.85938 + 20 +8785.360132 + 30 +0.0 + 0 +VERTEX + 5 +1579 + 8 +DETAILS + 10 +5901.85938 + 20 +8750.360132 + 30 +0.0 + 0 +VERTEX + 5 +157A + 8 +DETAILS + 10 +5971.85938 + 20 +8860.922104 + 30 +0.0 + 0 +VERTEX + 5 +157B + 8 +DETAILS + 10 +6034.112202 + 20 +8750.360132 + 30 +0.0 + 0 +VERTEX + 5 +157C + 8 +DETAILS + 10 +6071.85938 + 20 +8785.360132 + 30 +0.0 + 0 +VERTEX + 5 +157D + 8 +DETAILS + 10 +5995.676335 + 20 +8901.899153 + 30 +0.0 + 0 +VERTEX + 5 +157E + 8 +DETAILS + 10 +5995.676335 + 20 +9834.126374 + 30 +0.0 + 0 +SEQEND + 5 +157F + 8 +DETAILS + 0 +POLYLINE + 5 +EF4 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +1580 + 8 +DRAHTANKER + 10 +5926.85938 + 20 +9865.360132 + 30 +0.0 + 0 +VERTEX + 5 +1581 + 8 +DRAHTANKER + 10 +6016.85938 + 20 +9865.360132 + 30 +0.0 + 0 +SEQEND + 5 +1582 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +EF8 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +35.0 + 41 +35.0 + 0 +VERTEX + 5 +1583 + 8 +DRAHTANKER + 10 +5946.85938 + 20 +9895.360132 + 30 +0.0 + 0 +VERTEX + 5 +1584 + 8 +DRAHTANKER + 10 +5996.85938 + 20 +9895.360132 + 30 +0.0 + 0 +SEQEND + 5 +1585 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +EFC + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +1586 + 8 +DRAHTANKER + 10 +4361.85938 + 20 +9690.360132 + 30 +0.0 + 0 +VERTEX + 5 +1587 + 8 +DRAHTANKER + 10 +4901.85938 + 20 +8826.179487 + 30 +0.0 + 0 +SEQEND + 5 +1588 + 8 +DRAHTANKER + 0 +DIMENSION + 5 +F00 + 8 +DRAHTANKER + 2 +*D7 + 10 +5191.85938 + 20 +6950.360132 + 30 +0.0 + 11 +5044.35938 + 21 +7037.860132 + 31 +0.0 + 12 +-743.14062 + 22 +-614.639868 + 32 +0.0 + 1 +11 + 13 +4896.85938 + 23 +7715.360132 + 33 +0.0 + 14 +5191.85938 + 24 +7715.360132 + 34 +0.0 + 0 +DIMENSION + 5 +F01 + 8 +DRAHTANKER + 2 +*D8 + 10 +5336.85938 + 20 +6950.360132 + 30 +0.0 + 11 +5264.35938 + 21 +7037.860132 + 31 +0.0 + 12 +-743.14062 + 22 +-614.639868 + 32 +0.0 + 1 +6 + 13 +5191.85938 + 23 +7715.360132 + 33 +0.0 + 14 +5336.85938 + 24 +7700.360132 + 34 +0.0 + 0 +DIMENSION + 5 +F02 + 8 +DRAHTANKER + 2 +*D9 + 10 +5536.85938 + 20 +6950.360132 + 30 +0.0 + 11 +5436.85938 + 21 +7037.860132 + 31 +0.0 + 12 +-743.14062 + 22 +-614.639868 + 32 +0.0 + 1 +8 + 13 +5336.85938 + 23 +7700.360132 + 33 +0.0 + 14 +5536.85938 + 24 +7730.360132 + 34 +0.0 + 0 +DIMENSION + 5 +F03 + 8 +DRAHTANKER + 2 +*D10 + 10 +6451.85938 + 20 +6950.360132 + 30 +0.0 + 11 +5994.35938 + 21 +7037.860132 + 31 +0.0 + 12 +-743.14062 + 22 +-614.639868 + 32 +0.0 + 1 +36 + 13 +5536.85938 + 23 +7730.360132 + 33 +0.0 + 14 +6451.85938 + 24 +7715.360132 + 34 +0.0 + 0 +TEXT + 5 +F04 + 8 +DRAHTANKER + 10 +5101.85938 + 20 +7055.360132 + 30 +0.0 + 40 +62.5 + 1 +5 + 0 +TEXT + 5 +F05 + 8 +DRAHTANKER + 10 +6086.85938 + 20 +7055.360132 + 30 +0.0 + 40 +62.5 + 1 +5 + 0 +INSERT + 5 +F06 + 8 +SCHRAFFUR + 2 +*X11 + 10 +-743.14062 + 20 +-614.639868 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +AR-SAND,I +1040 +25.0 +1040 +0.0 +1002 +} + 0 +POLYLINE + 5 +F07 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1589 + 8 +MAUERWERK + 10 +6451.85938 + 20 +9352.860132 + 30 +0.0 + 0 +VERTEX + 5 +158A + 8 +MAUERWERK + 10 +6489.35938 + 20 +9352.860132 + 30 +0.0 + 0 +VERTEX + 5 +158B + 8 +MAUERWERK + 10 +6489.35938 + 20 +7695.360132 + 30 +0.0 + 0 +SEQEND + 5 +158C + 8 +MAUERWERK + 0 +DIMENSION + 5 +F0C + 8 +BEMASSUNG + 2 +*D14 + 10 +6486.85938 + 20 +6950.360132 + 30 +0.0 + 11 +6536.85938 + 21 +7037.860132 + 31 +0.0 + 12 +-743.14062 + 22 +-614.639868 + 32 +0.0 + 70 + 128 + 1 +1 + 13 +6451.85938 + 23 +7715.360132 + 33 +0.0 + 14 +6486.85938 + 24 +7705.360132 + 34 +0.0 + 0 +TEXT + 5 +F0D + 8 +DRAHTANKER + 10 +6561.85938 + 20 +7055.360132 + 30 +0.0 + 40 +62.5 + 1 +5 + 0 +DIMENSION + 5 +F0E + 8 +BEMASSUNG + 2 +*D16 + 10 +9095.164101 + 20 +11816.239961 + 30 +0.0 + 11 +9089.684204 + 21 +11992.098485 + 31 +0.0 + 12 +-743.14062 + 22 +-614.639868 + 32 +0.0 + 70 + 1 + 1 +16 + 13 +8161.85938 + 23 +11600.360132 + 33 +0.0 + 14 +8321.85938 + 24 +11340.360132 + 34 +0.0 + 0 +DIMENSION + 5 +F0F + 8 +BEMASSUNG + 2 +*D23 + 10 +9416.684779 + 20 +12028.055849 + 30 +0.0 + 11 +9552.454009 + 21 +11991.902003 + 31 +0.0 + 12 +-132.545991 + 22 +-233.097997 + 32 +0.0 + 70 + 129 + 1 +2 + 13 +8972.454009 + 23 +11666.902003 + 33 +0.0 + 14 +8942.454009 + 24 +11711.902003 + 34 +0.0 + 0 +DIMENSION + 5 +F10 + 8 +BEMASSUNG + 2 +*D24 + 10 +9148.992471 + 20 +12429.59431 + 30 +0.0 + 11 +9355.643026 + 21 +12277.361347 + 31 +0.0 + 12 +-132.545991 + 22 +-233.097997 + 32 +0.0 + 1 +18 + 13 +8942.454009 + 23 +11711.902003 + 33 +0.0 + 14 +8687.454009 + 24 +12121.902003 + 34 +0.0 + 50 +303.690068 + 0 +DIMENSION + 5 +F11 + 8 +BEMASSUNG + 2 +*D25 + 10 +9100.530932 + 20 +12502.286618 + 30 +0.0 + 11 +9197.566102 + 21 +12514.476731 + 31 +0.0 + 12 +-132.545991 + 22 +-233.097997 + 32 +0.0 + 1 +3 + 13 +8687.454009 + 23 +12121.902003 + 33 +0.0 + 14 +8642.454009 + 24 +12196.902003 + 34 +0.0 + 50 +303.690068 + 0 +DIMENSION + 5 +F12 + 8 +BEMASSUNG + 2 +*D25 + 10 +9052.228064 + 20 +12575.056944 + 30 +0.0 + 11 +9149.263234 + 21 +12587.247057 + 31 +0.0 + 12 +-180.848859 + 22 +-160.327671 + 32 +0.0 + 1 +3 + 13 +8639.151141 + 23 +12194.672329 + 33 +0.0 + 14 +8594.151141 + 24 +12269.672329 + 34 +0.0 + 50 +303.690068 + 0 +TEXT + 5 +F13 + 8 +BEMASSUNG + 10 +8609.794424 + 20 +10563.995813 + 30 +0.0 + 40 +87.5 + 1 +SCHALUNG + 0 +TEXT + 5 +F14 + 8 +LEGENDE-35 + 10 +8609.794424 + 20 +10313.995813 + 30 +0.0 + 40 +87.5 + 1 +PE-FOLIE + 0 +TEXT + 5 +F15 + 8 +LEGENDE-35 + 10 +8609.794424 + 20 +10110.0 + 30 +0.0 + 40 +87.5 + 1 +MINERALFASER WÄDÄ + 0 +TEXT + 5 +F16 + 8 +LEGENDE-35 + 10 +8609.794424 + 20 +9860.0 + 30 +0.0 + 40 +87.5 + 1 +FUSSPFETTE POS 10 NH S10 18/18 + 0 +TEXT + 5 +F17 + 8 +LEGENDE-35 + 10 +8609.794424 + 20 +9610.0 + 30 +0.0 + 40 +87.5 + 1 +SPARRENPFETTENANKER M15 + 0 +TEXT + 5 +F18 + 8 +LEGENDE-35 + 10 +8609.794424 + 20 +9360.0 + 30 +0.0 + 40 +87.5 + 1 +MW Mz-20-1.8-NF + 0 +TEXT + 5 +F19 + 8 +LEGENDE-35 + 10 +8609.794424 + 20 +9110.0 + 30 +0.0 + 40 +87.5 + 1 +GIPSPUTZ + 0 +POLYLINE + 5 +F1A + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +158D + 8 +LEGENDE-35 + 10 +8455.0 + 20 +10625.0 + 30 +0.0 + 0 +VERTEX + 5 +158E + 8 +LEGENDE-35 + 10 +7280.0 + 20 +10625.0 + 30 +0.0 + 0 +SEQEND + 5 +158F + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +F1E + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1590 + 8 +LEGENDE-35 + 10 +8455.0 + 20 +10360.0 + 30 +0.0 + 0 +VERTEX + 5 +1591 + 8 +LEGENDE-35 + 10 +6770.0 + 20 +10360.0 + 30 +0.0 + 0 +SEQEND + 5 +1592 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +F22 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1593 + 8 +LEGENDE-35 + 10 +8455.0 + 20 +10165.0 + 30 +0.0 + 0 +VERTEX + 5 +1594 + 8 +LEGENDE-35 + 10 +6285.0 + 20 +10165.0 + 30 +0.0 + 0 +SEQEND + 5 +1595 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +F26 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1596 + 8 +LEGENDE-35 + 10 +8445.0 + 20 +9905.0 + 30 +0.0 + 0 +VERTEX + 5 +1597 + 8 +LEGENDE-35 + 10 +6660.0 + 20 +9905.0 + 30 +0.0 + 0 +VERTEX + 5 +1598 + 8 +LEGENDE-35 + 10 +6660.0 + 20 +9690.0 + 30 +0.0 + 0 +VERTEX + 5 +1599 + 8 +LEGENDE-35 + 10 +6165.0 + 20 +9690.0 + 30 +0.0 + 0 +SEQEND + 5 +159A + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +F2C + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +159B + 8 +LEGENDE-35 + 10 +8440.0 + 20 +9665.0 + 30 +0.0 + 0 +VERTEX + 5 +159C + 8 +LEGENDE-35 + 10 +6965.0 + 20 +9665.0 + 30 +0.0 + 0 +VERTEX + 5 +159D + 8 +LEGENDE-35 + 10 +6965.0 + 20 +9480.0 + 30 +0.0 + 0 +VERTEX + 5 +159E + 8 +LEGENDE-35 + 10 +5990.0 + 20 +9480.0 + 30 +0.0 + 0 +SEQEND + 5 +159F + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +F32 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +15A0 + 8 +LEGENDE-35 + 10 +8440.0 + 20 +9415.0 + 30 +0.0 + 0 +VERTEX + 5 +15A1 + 8 +LEGENDE-35 + 10 +7245.0 + 20 +9415.0 + 30 +0.0 + 0 +VERTEX + 5 +15A2 + 8 +LEGENDE-35 + 10 +7245.0 + 20 +9105.0 + 30 +0.0 + 0 +VERTEX + 5 +15A3 + 8 +LEGENDE-35 + 10 +6205.0 + 20 +9105.0 + 30 +0.0 + 0 +SEQEND + 5 +15A4 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +F38 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +15A5 + 8 +LEGENDE-35 + 10 +8440.0 + 20 +9160.0 + 30 +0.0 + 0 +VERTEX + 5 +15A6 + 8 +LEGENDE-35 + 10 +7650.0 + 20 +9160.0 + 30 +0.0 + 0 +VERTEX + 5 +15A7 + 8 +LEGENDE-35 + 10 +7650.0 + 20 +8735.0 + 30 +0.0 + 0 +VERTEX + 5 +15A8 + 8 +LEGENDE-35 + 10 +6460.0 + 20 +8735.0 + 30 +0.0 + 0 +SEQEND + 5 +15A9 + 8 +LEGENDE-35 + 0 +TEXT + 5 +F3E + 8 +LEGENDE-35 + 10 +1875.0 + 20 +11555.0 + 30 +0.0 + 40 +87.5 + 1 +FALZZIEGEL + 0 +TEXT + 5 +F3F + 8 +LEGENDE-35 + 10 +1875.0 + 20 +11305.0 + 30 +0.0 + 40 +87.5 + 1 +LATTUNG NH S10 3/5 + 0 +TEXT + 5 +F40 + 8 +LEGENDE-35 + 10 +1875.0 + 20 +11055.0 + 30 +0.0 + 40 +87.5 + 1 +KONTERLATTUNG NH S10 3/5 + 0 +TEXT + 5 +F41 + 8 +LEGENDE-35 + 10 +1875.0 + 20 +10805.0 + 30 +0.0 + 40 +87.5 + 1 +PE-FOLIE + 0 +POLYLINE + 5 +F42 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +15AA + 8 +LEGENDE-35 + 10 +3285.0 + 20 +11595.0 + 30 +0.0 + 0 +VERTEX + 5 +15AB + 8 +LEGENDE-35 + 10 +7415.0 + 20 +11595.0 + 30 +0.0 + 0 +SEQEND + 5 +15AC + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +F46 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +15AD + 8 +LEGENDE-35 + 10 +3530.0 + 20 +11350.0 + 30 +0.0 + 0 +VERTEX + 5 +15AE + 8 +LEGENDE-35 + 10 +6475.0 + 20 +11350.0 + 30 +0.0 + 0 +VERTEX + 5 +15AF + 8 +LEGENDE-35 + 10 +6900.0 + 20 +11145.0 + 30 +0.0 + 0 +SEQEND + 5 +15B0 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +F4B + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +15B1 + 8 +LEGENDE-35 + 10 +4045.0 + 20 +11090.0 + 30 +0.0 + 0 +VERTEX + 5 +15B2 + 8 +LEGENDE-35 + 10 +6245.0 + 20 +11090.0 + 30 +0.0 + 0 +VERTEX + 5 +15B3 + 8 +LEGENDE-35 + 10 +6685.0 + 20 +10930.0 + 30 +0.0 + 0 +SEQEND + 5 +15B4 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +F50 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +15B5 + 8 +LEGENDE-35 + 10 +2665.0 + 20 +10840.0 + 30 +0.0 + 0 +VERTEX + 5 +15B6 + 8 +LEGENDE-35 + 10 +5500.0 + 20 +10840.0 + 30 +0.0 + 0 +VERTEX + 5 +15B7 + 8 +LEGENDE-35 + 10 +6230.0 + 20 +10590.0 + 30 +0.0 + 0 +SEQEND + 5 +15B8 + 8 +LEGENDE-35 + 0 +TEXT + 5 +F55 + 8 +LEGENDE-35 + 10 +1340.0 + 20 +8350.0 + 30 +0.0 + 40 +87.5 + 1 +REGENRINNE %%c15cm KUPFER + 0 +TEXT + 5 +F56 + 8 +LEGENDE-35 + 10 +1340.0 + 20 +8100.0 + 30 +0.0 + 40 +87.5 + 1 +LOCHBLECH KUPFER + 0 +TEXT + 5 +F57 + 8 +LEGENDE-35 + 10 +1340.0 + 20 +7850.0 + 30 +0.0 + 40 +87.5 + 1 +SPARREN POS 1 NH S10 8/18 + 0 +TEXT + 5 +F58 + 8 +LEGENDE-35 + 10 +1340.0 + 20 +7600.0 + 30 +0.0 + 40 +87.5 + 1 +VMW KHLz-20-1.8-NF + 0 +POLYLINE + 5 +F59 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +15B9 + 8 +LEGENDE-35 + 10 +3355.0 + 20 +8405.0 + 30 +0.0 + 0 +VERTEX + 5 +15BA + 8 +LEGENDE-35 + 10 +4090.0 + 20 +8405.0 + 30 +0.0 + 0 +VERTEX + 5 +15BB + 8 +LEGENDE-35 + 10 +4090.0 + 20 +9240.0 + 30 +0.0 + 0 +SEQEND + 5 +15BC + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +F5E + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +15BD + 8 +LEGENDE-35 + 10 +2845.0 + 20 +8140.0 + 30 +0.0 + 0 +VERTEX + 5 +15BE + 8 +LEGENDE-35 + 10 +4495.0 + 20 +8140.0 + 30 +0.0 + 0 +VERTEX + 5 +15BF + 8 +LEGENDE-35 + 10 +4495.0 + 20 +9415.0 + 30 +0.0 + 0 +SEQEND + 5 +15C0 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +F63 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +15C1 + 8 +LEGENDE-35 + 10 +3590.0 + 20 +7885.0 + 30 +0.0 + 0 +VERTEX + 5 +15C2 + 8 +LEGENDE-35 + 10 +4755.0 + 20 +7885.0 + 30 +0.0 + 0 +VERTEX + 5 +15C3 + 8 +LEGENDE-35 + 10 +4755.0 + 20 +9400.0 + 30 +0.0 + 0 +SEQEND + 5 +15C4 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +F68 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +15C5 + 8 +LEGENDE-35 + 10 +2935.0 + 20 +7650.0 + 30 +0.0 + 0 +VERTEX + 5 +15C6 + 8 +LEGENDE-35 + 10 +4540.0 + 20 +7650.0 + 30 +0.0 + 0 +VERTEX + 5 +15C7 + 8 +LEGENDE-35 + 10 +4975.0 + 20 +7885.0 + 30 +0.0 + 0 +SEQEND + 5 +15C8 + 8 +LEGENDE-35 + 0 +TEXT + 5 +F6D + 8 +LEGENDE-70 + 10 +4205.0 + 20 +13630.0 + 30 +0.0 + 40 +175.0 + 1 +D5 TRAUFPUNKT + DACHEINDECKUNG + 0 +POLYLINE + 5 +F6E + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +15C9 + 8 +MAUERWERK + 10 +10391.85938 + 20 +4212.860132 + 30 +0.0 + 0 +VERTEX + 5 +15CA + 8 +MAUERWERK + 10 +10391.85938 + 20 +2555.360132 + 30 +0.0 + 0 +SEQEND + 5 +15CB + 8 +MAUERWERK + 0 +INSERT + 5 +F72 + 8 +SCHRAFFUR + 2 +*X5 + 10 +4746.85938 + 20 +-5754.639868 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +450.0 +1040 +0.0 +1002 +} + 0 +POLYLINE + 5 +F73 + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +15CC + 8 +MAUERWERK + 10 +10679.35938 + 20 +2555.360132 + 30 +0.0 + 0 +VERTEX + 5 +15CD + 8 +MAUERWERK + 10 +10679.35938 + 20 +4212.860132 + 30 +0.0 + 0 +VERTEX + 5 +15CE + 8 +MAUERWERK + 10 +10391.85938 + 20 +4212.860132 + 30 +0.0 + 0 +SEQEND + 5 +15CF + 8 +MAUERWERK + 0 +DIMENSION + 5 +F78 + 8 +DRAHTANKER + 2 +*D10 + 10 +11941.85938 + 20 +1810.360132 + 30 +0.0 + 11 +11484.35938 + 21 +1897.860132 + 31 +0.0 + 12 +4746.85938 + 22 +-5754.639868 + 32 +0.0 + 1 +36 + 13 +11026.85938 + 23 +2590.360132 + 33 +0.0 + 14 +11941.85938 + 24 +2575.360132 + 34 +0.0 + 0 +INSERT + 5 +F79 + 8 +SCHRAFFUR + 2 +*X6 + 10 +4746.85938 + 20 +-5754.639868 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +ANSI31,I +1040 +1200.0 +1040 +0.0 +1002 +} + 0 +POLYLINE + 5 +F7A + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +15D0 + 8 +MAUERWERK + 10 +11941.85938 + 20 +2555.360132 + 30 +0.0 + 0 +VERTEX + 5 +15D1 + 8 +MAUERWERK + 10 +11941.85938 + 20 +4212.860132 + 30 +0.0 + 0 +VERTEX + 5 +15D2 + 8 +MAUERWERK + 10 +11029.35938 + 20 +4212.860132 + 30 +0.0 + 0 +VERTEX + 5 +15D3 + 8 +MAUERWERK + 10 +11029.35938 + 20 +2555.360132 + 30 +0.0 + 0 +SEQEND + 5 +15D4 + 8 +MAUERWERK + 0 +LINE + 5 +F80 + 8 +0 + 62 + 0 + 10 +10962.484376 + 20 +2867.725561 + 30 +0.0 + 11 +10990.609376 + 21 +2916.43949 + 31 +0.0 + 0 +LINE + 5 +F81 + 8 +0 + 62 + 0 + 10 +10906.234344 + 20 +2867.725538 + 30 +0.0 + 11 +10878.109344 + 21 +2916.439467 + 31 +0.0 + 0 +POLYLINE + 5 +F82 + 8 +DAEMMUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +15D5 + 8 +DAEMMUNG + 10 +10831.298947 + 20 +4212.860132 + 30 +0.0 + 0 +VERTEX + 5 +15D6 + 8 +DAEMMUNG + 10 +10831.298947 + 20 +4212.860132 + 30 +0.0 + 0 +VERTEX + 5 +15D7 + 8 +DAEMMUNG + 10 +10829.686394 + 20 +2555.360132 + 30 +0.0 + 0 +SEQEND + 5 +15D8 + 8 +DAEMMUNG + 0 +DIMENSION + 5 +F87 + 8 +DRAHTANKER + 2 +*D8 + 10 +10826.85938 + 20 +1810.360132 + 30 +0.0 + 11 +10754.35938 + 21 +1897.860132 + 31 +0.0 + 12 +4746.85938 + 22 +-5754.639868 + 32 +0.0 + 1 +6 + 13 +10681.85938 + 23 +2575.360132 + 33 +0.0 + 14 +10826.85938 + 24 +2560.360132 + 34 +0.0 + 0 +DIMENSION + 5 +F88 + 8 +DRAHTANKER + 2 +*D9 + 10 +11026.85938 + 20 +1810.360132 + 30 +0.0 + 11 +10926.85938 + 21 +1897.860132 + 31 +0.0 + 12 +4746.85938 + 22 +-5754.639868 + 32 +0.0 + 1 +8 + 13 +10826.85938 + 23 +2560.360132 + 33 +0.0 + 14 +11026.85938 + 24 +2590.360132 + 34 +0.0 + 0 +TEXT + 5 +F89 + 8 +DRAHTANKER + 10 +10591.85938 + 20 +1915.360132 + 30 +0.0 + 40 +62.5 + 1 +5 + 0 +LINE + 5 +F8A + 8 +0 + 62 + 0 + 10 +10906.23438 + 20 +2867.725521 + 30 +0.0 + 11 +10962.48438 + 21 +2867.725521 + 31 +0.0 + 0 +LINE + 5 +F8B + 8 +0 + 62 + 0 + 10 +10906.23438 + 20 +2770.297664 + 30 +0.0 + 11 +10962.48438 + 21 +2770.297664 + 31 +0.0 + 0 +LINE + 5 +F8C + 8 +0 + 62 + 0 + 10 +10906.23438 + 20 +2672.869806 + 30 +0.0 + 11 +10962.48438 + 21 +2672.869806 + 31 +0.0 + 0 +LINE + 5 +F8D + 8 +0 + 62 + 0 + 10 +10906.23438 + 20 +2575.441949 + 30 +0.0 + 11 +10962.48438 + 21 +2575.441949 + 31 +0.0 + 0 +LINE + 5 +F8E + 8 +0 + 62 + 0 + 10 +10823.269193 + 20 +2819.011592 + 30 +0.0 + 11 +10878.10938 + 21 +2819.011592 + 31 +0.0 + 0 +LINE + 5 +F8F + 8 +0 + 62 + 0 + 10 +10822.916012 + 20 +2721.583735 + 30 +0.0 + 11 +10878.10938 + 21 +2721.583735 + 31 +0.0 + 0 +LINE + 5 +F90 + 8 +0 + 62 + 0 + 10 +10906.234344 + 20 +2770.29768 + 30 +0.0 + 11 +10878.109344 + 21 +2819.011609 + 31 +0.0 + 0 +LINE + 5 +F91 + 8 +0 + 62 + 0 + 10 +10906.234344 + 20 +2672.869822 + 30 +0.0 + 11 +10878.109344 + 21 +2721.583751 + 31 +0.0 + 0 +LINE + 5 +F92 + 8 +0 + 62 + 0 + 10 +10878.109376 + 20 +2721.583774 + 30 +0.0 + 11 +10906.234376 + 21 +2770.297703 + 31 +0.0 + 0 +LINE + 5 +F93 + 8 +0 + 62 + 0 + 10 +10878.109376 + 20 +2819.011632 + 30 +0.0 + 11 +10906.234376 + 21 +2867.725561 + 31 +0.0 + 0 +LINE + 5 +F94 + 8 +0 + 62 + 0 + 10 +10822.562832 + 20 +2624.155877 + 30 +0.0 + 11 +10878.10938 + 21 +2624.155877 + 31 +0.0 + 0 +LINE + 5 +F95 + 8 +0 + 62 + 0 + 10 +10906.234344 + 20 +2575.441964 + 30 +0.0 + 11 +10878.109344 + 21 +2624.155893 + 31 +0.0 + 0 +LINE + 5 +F96 + 8 +0 + 62 + 0 + 10 +10901.934989 + 20 +2567.995231 + 30 +0.0 + 11 +10906.234376 + 21 +2575.441988 + 31 +0.0 + 0 +LINE + 5 +F97 + 8 +0 + 62 + 0 + 10 +10878.109376 + 20 +2624.155916 + 30 +0.0 + 11 +10906.234376 + 21 +2672.869845 + 31 +0.0 + 0 +LINE + 5 +F98 + 8 +0 + 62 + 0 + 10 +10990.60938 + 20 +2819.011592 + 30 +0.0 + 11 +11030.489283 + 21 +2819.011592 + 31 +0.0 + 0 +LINE + 5 +F99 + 8 +0 + 62 + 0 + 10 +10990.60938 + 20 +2721.583735 + 30 +0.0 + 11 +11030.489283 + 21 +2721.583735 + 31 +0.0 + 0 +LINE + 5 +F9A + 8 +0 + 62 + 0 + 10 +10990.609344 + 20 +2819.011609 + 30 +0.0 + 11 +10962.484344 + 21 +2867.725538 + 31 +0.0 + 0 +LINE + 5 +F9B + 8 +0 + 62 + 0 + 10 +10990.609344 + 20 +2721.583751 + 30 +0.0 + 11 +10962.484344 + 21 +2770.29768 + 31 +0.0 + 0 +LINE + 5 +F9C + 8 +0 + 62 + 0 + 10 +10962.484376 + 20 +2672.869846 + 30 +0.0 + 11 +10990.609376 + 21 +2721.583774 + 31 +0.0 + 0 +LINE + 5 +F9D + 8 +0 + 62 + 0 + 10 +10962.484376 + 20 +2770.297703 + 30 +0.0 + 11 +10990.609376 + 21 +2819.011632 + 31 +0.0 + 0 +LINE + 5 +F9E + 8 +0 + 62 + 0 + 10 +10990.60938 + 20 +2624.155877 + 30 +0.0 + 11 +11030.489283 + 21 +2624.155877 + 31 +0.0 + 0 +LINE + 5 +F9F + 8 +0 + 62 + 0 + 10 +10966.783717 + 20 +2567.995231 + 30 +0.0 + 11 +10962.484344 + 21 +2575.441964 + 31 +0.0 + 0 +LINE + 5 +FA0 + 8 +0 + 62 + 0 + 10 +10962.484376 + 20 +2575.441988 + 30 +0.0 + 11 +10990.609376 + 21 +2624.155917 + 31 +0.0 + 0 +LINE + 5 +FA1 + 8 +0 + 62 + 0 + 10 +10990.609344 + 20 +2624.155893 + 30 +0.0 + 11 +10962.484344 + 21 +2672.869822 + 31 +0.0 + 0 +LINE + 5 +FA2 + 8 +0 + 62 + 0 + 10 +10962.484377 + 20 +3549.720566 + 30 +0.0 + 11 +10990.609377 + 21 +3598.434495 + 31 +0.0 + 0 +LINE + 5 +FA3 + 8 +0 + 62 + 0 + 10 +10906.234342 + 20 +3549.720542 + 30 +0.0 + 11 +10878.109342 + 21 +3598.434471 + 31 +0.0 + 0 +POLYLINE + 5 +FA4 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +15D9 + 8 +DETAILS + 10 +10691.85938 + 20 +3083.787465 + 30 +0.0 + 0 +VERTEX + 5 +15DA + 8 +DETAILS + 10 +10829.35938 + 20 +3083.787465 + 30 +0.0 + 0 +SEQEND + 5 +15DB + 8 +DETAILS + 0 +POLYLINE + 5 +FA8 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +15DC + 8 +DETAILS + 10 +10504.35938 + 20 +3083.787465 + 30 +0.0 + 0 +VERTEX + 5 +15DD + 8 +DETAILS + 10 +10579.35938 + 20 +3083.787465 + 30 +0.0 + 0 +SEQEND + 5 +15DE + 8 +DETAILS + 0 +POLYLINE + 5 +FAC + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +15DF + 8 +DETAILS + 10 +10729.35938 + 20 +3158.787465 + 30 +0.0 + 0 +VERTEX + 5 +15E0 + 8 +DETAILS + 10 +10729.35938 + 20 +3008.787465 + 30 +0.0 + 0 +SEQEND + 5 +15E1 + 8 +DETAILS + 0 +POLYLINE + 5 +FB0 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +15E2 + 8 +DETAILS + 10 +10616.85938 + 20 +3083.787465 + 30 +0.0 + 0 +VERTEX + 5 +15E3 + 8 +DETAILS + 10 +10679.35938 + 20 +3083.787465 + 30 +0.0 + 0 +SEQEND + 5 +15E4 + 8 +DETAILS + 0 +LINE + 5 +FB4 + 8 +0 + 62 + 0 + 10 +10990.609343 + 20 +3208.72304 + 30 +0.0 + 11 +10962.484343 + 21 +3257.436969 + 31 +0.0 + 0 +LINE + 5 +FB5 + 8 +0 + 62 + 0 + 10 +10878.109377 + 20 +3208.723063 + 30 +0.0 + 11 +10906.234377 + 21 +3257.436992 + 31 +0.0 + 0 +LINE + 5 +FB6 + 8 +0 + 62 + 0 + 10 +10906.23438 + 20 +3160.009094 + 30 +0.0 + 11 +10962.48438 + 21 +3160.009094 + 31 +0.0 + 0 +LINE + 5 +FB7 + 8 +0 + 62 + 0 + 10 +10906.23438 + 20 +3062.581236 + 30 +0.0 + 11 +10962.48438 + 21 +3062.581236 + 31 +0.0 + 0 +LINE + 5 +FB8 + 8 +0 + 62 + 0 + 10 +10906.23438 + 20 +2965.153379 + 30 +0.0 + 11 +10962.48438 + 21 +2965.153379 + 31 +0.0 + 0 +POLYLINE + 5 +FB9 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +15E5 + 8 +DETAILS + 10 +10805.976103 + 20 +3121.227005 + 30 +0.0 + 0 +VERTEX + 5 +15E6 + 8 +DETAILS + 10 +10805.976103 + 20 +3046.227005 + 30 +0.0 + 0 +SEQEND + 5 +15E7 + 8 +DETAILS + 0 +POLYLINE + 5 +FBD + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +15E8 + 8 +DETAILS + 10 +10866.85938 + 20 +3083.787465 + 30 +0.0 + 0 +VERTEX + 5 +15E9 + 8 +DETAILS + 10 +10929.35938 + 20 +3083.787465 + 30 +0.0 + 0 +SEQEND + 5 +15EA + 8 +DETAILS + 0 +LINE + 5 +FC1 + 8 +0 + 62 + 0 + 10 +10824.681914 + 20 +3208.723022 + 30 +0.0 + 11 +10878.10938 + 21 +3208.723022 + 31 +0.0 + 0 +LINE + 5 +FC2 + 8 +0 + 62 + 0 + 10 +10824.328733 + 20 +3111.295165 + 30 +0.0 + 11 +10878.10938 + 21 +3111.295165 + 31 +0.0 + 0 +LINE + 5 +FC3 + 8 +0 + 62 + 0 + 10 +10823.975553 + 20 +3013.867307 + 30 +0.0 + 11 +10878.10938 + 21 +3013.867307 + 31 +0.0 + 0 +LINE + 5 +FC4 + 8 +0 + 62 + 0 + 10 +10906.234343 + 20 +3160.009111 + 30 +0.0 + 11 +10878.109343 + 21 +3208.72304 + 31 +0.0 + 0 +LINE + 5 +FC5 + 8 +0 + 62 + 0 + 10 +10906.234343 + 20 +3062.581253 + 30 +0.0 + 11 +10878.109343 + 21 +3111.295182 + 31 +0.0 + 0 +LINE + 5 +FC6 + 8 +0 + 62 + 0 + 10 +10878.109377 + 20 +3013.867348 + 30 +0.0 + 11 +10906.234377 + 21 +3062.581277 + 31 +0.0 + 0 +LINE + 5 +FC7 + 8 +0 + 62 + 0 + 10 +10878.109377 + 20 +3111.295206 + 30 +0.0 + 11 +10906.234377 + 21 +3160.009135 + 31 +0.0 + 0 +LINE + 5 +FC8 + 8 +0 + 62 + 0 + 10 +10823.622373 + 20 +2916.43945 + 30 +0.0 + 11 +10878.10938 + 21 +2916.43945 + 31 +0.0 + 0 +LINE + 5 +FC9 + 8 +0 + 62 + 0 + 10 +10878.109377 + 20 +2916.43949 + 30 +0.0 + 11 +10906.234377 + 21 +2965.153419 + 31 +0.0 + 0 +LINE + 5 +FCA + 8 +0 + 62 + 0 + 10 +10906.234344 + 20 +2965.153396 + 30 +0.0 + 11 +10878.109344 + 21 +3013.867325 + 31 +0.0 + 0 +POLYLINE + 5 +FCB + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +15EB + 8 +DETAILS + 10 +11079.35938 + 20 +3083.787465 + 30 +0.0 + 0 +VERTEX + 5 +15EC + 8 +DETAILS + 10 +11129.35938 + 20 +3083.787465 + 30 +0.0 + 0 +SEQEND + 5 +15ED + 8 +DETAILS + 0 +POLYLINE + 5 +FCF + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +15EE + 8 +DETAILS + 10 +10966.85938 + 20 +3083.787465 + 30 +0.0 + 0 +VERTEX + 5 +15EF + 8 +DETAILS + 10 +11029.35938 + 20 +3083.787465 + 30 +0.0 + 0 +SEQEND + 5 +15F0 + 8 +DETAILS + 0 +LINE + 5 +FD3 + 8 +0 + 62 + 0 + 10 +10990.60938 + 20 +3208.723022 + 30 +0.0 + 11 +11030.489283 + 21 +3208.723022 + 31 +0.0 + 0 +LINE + 5 +FD4 + 8 +0 + 62 + 0 + 10 +10990.60938 + 20 +3111.295165 + 30 +0.0 + 11 +11030.489283 + 21 +3111.295165 + 31 +0.0 + 0 +LINE + 5 +FD5 + 8 +0 + 62 + 0 + 10 +10990.60938 + 20 +3013.867307 + 30 +0.0 + 11 +11030.489283 + 21 +3013.867307 + 31 +0.0 + 0 +LINE + 5 +FD6 + 8 +0 + 62 + 0 + 10 +10990.609343 + 20 +3111.295182 + 30 +0.0 + 11 +10962.484343 + 21 +3160.009111 + 31 +0.0 + 0 +LINE + 5 +FD7 + 8 +0 + 62 + 0 + 10 +10990.609343 + 20 +3013.867324 + 30 +0.0 + 11 +10962.484343 + 21 +3062.581253 + 31 +0.0 + 0 +LINE + 5 +FD8 + 8 +0 + 62 + 0 + 10 +10962.484377 + 20 +3062.581277 + 30 +0.0 + 11 +10990.609377 + 21 +3111.295206 + 31 +0.0 + 0 +LINE + 5 +FD9 + 8 +0 + 62 + 0 + 10 +10962.484377 + 20 +3160.009135 + 30 +0.0 + 11 +10990.609377 + 21 +3208.723064 + 31 +0.0 + 0 +LINE + 5 +FDA + 8 +0 + 62 + 0 + 10 +10990.60938 + 20 +2916.43945 + 30 +0.0 + 11 +11030.489283 + 21 +2916.43945 + 31 +0.0 + 0 +LINE + 5 +FDB + 8 +0 + 62 + 0 + 10 +10990.609343 + 20 +2916.439466 + 30 +0.0 + 11 +10962.484343 + 21 +2965.153395 + 31 +0.0 + 0 +LINE + 5 +FDC + 8 +0 + 62 + 0 + 10 +10962.484376 + 20 +2965.153419 + 30 +0.0 + 11 +10990.609376 + 21 +3013.867348 + 31 +0.0 + 0 +LINE + 5 +FDD + 8 +0 + 62 + 0 + 10 +10906.23438 + 20 +3549.720524 + 30 +0.0 + 11 +10962.48438 + 21 +3549.720524 + 31 +0.0 + 0 +LINE + 5 +FDE + 8 +0 + 62 + 0 + 10 +10906.23438 + 20 +3452.292666 + 30 +0.0 + 11 +10962.48438 + 21 +3452.292666 + 31 +0.0 + 0 +LINE + 5 +FDF + 8 +0 + 62 + 0 + 10 +10906.23438 + 20 +3354.864809 + 30 +0.0 + 11 +10962.48438 + 21 +3354.864809 + 31 +0.0 + 0 +LINE + 5 +FE0 + 8 +0 + 62 + 0 + 10 +10906.23438 + 20 +3257.436951 + 30 +0.0 + 11 +10962.48438 + 21 +3257.436951 + 31 +0.0 + 0 +LINE + 5 +FE1 + 8 +0 + 62 + 0 + 10 +10825.741454 + 20 +3501.006595 + 30 +0.0 + 11 +10878.10938 + 21 +3501.006595 + 31 +0.0 + 0 +LINE + 5 +FE2 + 8 +0 + 62 + 0 + 10 +10825.388274 + 20 +3403.578737 + 30 +0.0 + 11 +10878.10938 + 21 +3403.578737 + 31 +0.0 + 0 +LINE + 5 +FE3 + 8 +0 + 62 + 0 + 10 +10906.234343 + 20 +3452.292685 + 30 +0.0 + 11 +10878.109343 + 21 +3501.006614 + 31 +0.0 + 0 +LINE + 5 +FE4 + 8 +0 + 62 + 0 + 10 +10906.234343 + 20 +3354.864827 + 30 +0.0 + 11 +10878.109343 + 21 +3403.578756 + 31 +0.0 + 0 +LINE + 5 +FE5 + 8 +0 + 62 + 0 + 10 +10878.109377 + 20 +3403.578779 + 30 +0.0 + 11 +10906.234377 + 21 +3452.292708 + 31 +0.0 + 0 +LINE + 5 +FE6 + 8 +0 + 62 + 0 + 10 +10878.109378 + 20 +3501.006637 + 30 +0.0 + 11 +10906.234378 + 21 +3549.720566 + 31 +0.0 + 0 +LINE + 5 +FE7 + 8 +0 + 62 + 0 + 10 +10825.035094 + 20 +3306.15088 + 30 +0.0 + 11 +10878.10938 + 21 +3306.15088 + 31 +0.0 + 0 +LINE + 5 +FE8 + 8 +0 + 62 + 0 + 10 +10906.234343 + 20 +3257.436969 + 30 +0.0 + 11 +10878.109343 + 21 +3306.150898 + 31 +0.0 + 0 +LINE + 5 +FE9 + 8 +0 + 62 + 0 + 10 +10878.109377 + 20 +3306.150921 + 30 +0.0 + 11 +10906.234377 + 21 +3354.86485 + 31 +0.0 + 0 +LINE + 5 +FEA + 8 +0 + 62 + 0 + 10 +10990.60938 + 20 +3501.006595 + 30 +0.0 + 11 +11030.489283 + 21 +3501.006595 + 31 +0.0 + 0 +LINE + 5 +FEB + 8 +0 + 62 + 0 + 10 +10990.60938 + 20 +3403.578737 + 30 +0.0 + 11 +11030.489283 + 21 +3403.578737 + 31 +0.0 + 0 +LINE + 5 +FEC + 8 +0 + 62 + 0 + 10 +10990.609342 + 20 +3501.006613 + 30 +0.0 + 11 +10962.484342 + 21 +3549.720542 + 31 +0.0 + 0 +LINE + 5 +FED + 8 +0 + 62 + 0 + 10 +10990.609342 + 20 +3403.578756 + 30 +0.0 + 11 +10962.484342 + 21 +3452.292685 + 31 +0.0 + 0 +LINE + 5 +FEE + 8 +0 + 62 + 0 + 10 +10962.484377 + 20 +3354.86485 + 30 +0.0 + 11 +10990.609377 + 21 +3403.578779 + 31 +0.0 + 0 +LINE + 5 +FEF + 8 +0 + 62 + 0 + 10 +10962.484377 + 20 +3452.292708 + 30 +0.0 + 11 +10990.609377 + 21 +3501.006637 + 31 +0.0 + 0 +LINE + 5 +FF0 + 8 +0 + 62 + 0 + 10 +10990.60938 + 20 +3306.15088 + 30 +0.0 + 11 +11030.489283 + 21 +3306.15088 + 31 +0.0 + 0 +LINE + 5 +FF1 + 8 +0 + 62 + 0 + 10 +10962.484377 + 20 +3257.436992 + 30 +0.0 + 11 +10990.609377 + 21 +3306.150921 + 31 +0.0 + 0 +LINE + 5 +FF2 + 8 +0 + 62 + 0 + 10 +10990.609343 + 20 +3306.150898 + 30 +0.0 + 11 +10962.484343 + 21 +3354.864827 + 31 +0.0 + 0 +POLYLINE + 5 +FF3 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +15F1 + 8 +DETAILS + 10 +10691.85938 + 20 +4033.787465 + 30 +0.0 + 0 +VERTEX + 5 +15F2 + 8 +DETAILS + 10 +10829.35938 + 20 +4033.787465 + 30 +0.0 + 0 +SEQEND + 5 +15F3 + 8 +DETAILS + 0 +POLYLINE + 5 +FF7 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +15F4 + 8 +DETAILS + 10 +10504.35938 + 20 +4033.787465 + 30 +0.0 + 0 +VERTEX + 5 +15F5 + 8 +DETAILS + 10 +10579.35938 + 20 +4033.787465 + 30 +0.0 + 0 +SEQEND + 5 +15F6 + 8 +DETAILS + 0 +POLYLINE + 5 +FFB + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +15F7 + 8 +DETAILS + 10 +10616.85938 + 20 +4033.787465 + 30 +0.0 + 0 +VERTEX + 5 +15F8 + 8 +DETAILS + 10 +10679.35938 + 20 +4033.787465 + 30 +0.0 + 0 +SEQEND + 5 +15F9 + 8 +DETAILS + 0 +POLYLINE + 5 +FFF + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +15FA + 8 +DETAILS + 10 +10729.35938 + 20 +4108.787465 + 30 +0.0 + 0 +VERTEX + 5 +15FB + 8 +DETAILS + 10 +10729.35938 + 20 +3958.787465 + 30 +0.0 + 0 +SEQEND + 5 +15FC + 8 +DETAILS + 0 +LINE + 5 +1003 + 8 +0 + 62 + 0 + 10 +10990.609341 + 20 +3890.718045 + 30 +0.0 + 11 +10962.484341 + 21 +3939.431974 + 31 +0.0 + 0 +LINE + 5 +1004 + 8 +0 + 62 + 0 + 10 +10878.109378 + 20 +3890.718068 + 30 +0.0 + 11 +10906.234378 + 21 +3939.431997 + 31 +0.0 + 0 +LINE + 5 +1005 + 8 +0 + 62 + 0 + 10 +10906.23438 + 20 +3842.004096 + 30 +0.0 + 11 +10962.48438 + 21 +3842.004096 + 31 +0.0 + 0 +LINE + 5 +1006 + 8 +0 + 62 + 0 + 10 +10906.23438 + 20 +3744.576239 + 30 +0.0 + 11 +10962.48438 + 21 +3744.576239 + 31 +0.0 + 0 +LINE + 5 +1007 + 8 +0 + 62 + 0 + 10 +10906.23438 + 20 +3647.148381 + 30 +0.0 + 11 +10962.48438 + 21 +3647.148381 + 31 +0.0 + 0 +LINE + 5 +1008 + 8 +0 + 62 + 0 + 10 +10827.154175 + 20 +3890.718025 + 30 +0.0 + 11 +10878.10938 + 21 +3890.718025 + 31 +0.0 + 0 +LINE + 5 +1009 + 8 +0 + 62 + 0 + 10 +10826.800995 + 20 +3793.290167 + 30 +0.0 + 11 +10878.10938 + 21 +3793.290167 + 31 +0.0 + 0 +LINE + 5 +100A + 8 +0 + 62 + 0 + 10 +10826.447815 + 20 +3695.86231 + 30 +0.0 + 11 +10878.10938 + 21 +3695.86231 + 31 +0.0 + 0 +LINE + 5 +100B + 8 +0 + 62 + 0 + 10 +10906.234342 + 20 +3842.004116 + 30 +0.0 + 11 +10878.109342 + 21 +3890.718045 + 31 +0.0 + 0 +LINE + 5 +100C + 8 +0 + 62 + 0 + 10 +10906.234342 + 20 +3744.576258 + 30 +0.0 + 11 +10878.109342 + 21 +3793.290187 + 31 +0.0 + 0 +LINE + 5 +100D + 8 +0 + 62 + 0 + 10 +10878.109378 + 20 +3695.862352 + 30 +0.0 + 11 +10906.234378 + 21 +3744.576281 + 31 +0.0 + 0 +LINE + 5 +100E + 8 +0 + 62 + 0 + 10 +10878.109378 + 20 +3793.29021 + 30 +0.0 + 11 +10906.234378 + 21 +3842.004139 + 31 +0.0 + 0 +LINE + 5 +100F + 8 +0 + 62 + 0 + 10 +10826.094635 + 20 +3598.434452 + 30 +0.0 + 11 +10878.10938 + 21 +3598.434452 + 31 +0.0 + 0 +LINE + 5 +1010 + 8 +0 + 62 + 0 + 10 +10878.109378 + 20 +3598.434495 + 30 +0.0 + 11 +10906.234378 + 21 +3647.148424 + 31 +0.0 + 0 +LINE + 5 +1011 + 8 +0 + 62 + 0 + 10 +10906.234342 + 20 +3647.1484 + 30 +0.0 + 11 +10878.109342 + 21 +3695.862329 + 31 +0.0 + 0 +LINE + 5 +1012 + 8 +0 + 62 + 0 + 10 +10990.60938 + 20 +3890.718025 + 30 +0.0 + 11 +11030.489283 + 21 +3890.718025 + 31 +0.0 + 0 +LINE + 5 +1013 + 8 +0 + 62 + 0 + 10 +10990.60938 + 20 +3793.290167 + 30 +0.0 + 11 +11030.489283 + 21 +3793.290167 + 31 +0.0 + 0 +LINE + 5 +1014 + 8 +0 + 62 + 0 + 10 +10990.60938 + 20 +3695.86231 + 30 +0.0 + 11 +11030.489283 + 21 +3695.86231 + 31 +0.0 + 0 +LINE + 5 +1015 + 8 +0 + 62 + 0 + 10 +10990.609342 + 20 +3793.290187 + 30 +0.0 + 11 +10962.484342 + 21 +3842.004116 + 31 +0.0 + 0 +LINE + 5 +1016 + 8 +0 + 62 + 0 + 10 +10990.609342 + 20 +3695.862329 + 30 +0.0 + 11 +10962.484342 + 21 +3744.576258 + 31 +0.0 + 0 +LINE + 5 +1017 + 8 +0 + 62 + 0 + 10 +10962.484378 + 20 +3744.576282 + 30 +0.0 + 11 +10990.609378 + 21 +3793.29021 + 31 +0.0 + 0 +LINE + 5 +1018 + 8 +0 + 62 + 0 + 10 +10962.484378 + 20 +3842.004139 + 30 +0.0 + 11 +10990.609378 + 21 +3890.718068 + 31 +0.0 + 0 +LINE + 5 +1019 + 8 +0 + 62 + 0 + 10 +10990.60938 + 20 +3598.434452 + 30 +0.0 + 11 +11030.489283 + 21 +3598.434452 + 31 +0.0 + 0 +LINE + 5 +101A + 8 +0 + 62 + 0 + 10 +10990.609342 + 20 +3598.434471 + 30 +0.0 + 11 +10962.484342 + 21 +3647.1484 + 31 +0.0 + 0 +LINE + 5 +101B + 8 +0 + 62 + 0 + 10 +10962.484378 + 20 +3647.148424 + 30 +0.0 + 11 +10990.609378 + 21 +3695.862353 + 31 +0.0 + 0 +LINE + 5 +101C + 8 +0 + 62 + 0 + 10 +10906.23438 + 20 +4231.715526 + 30 +0.0 + 11 +10962.48438 + 21 +4231.715526 + 31 +0.0 + 0 +LINE + 5 +101D + 8 +0 + 62 + 0 + 10 +10906.23438 + 20 +4134.287669 + 30 +0.0 + 11 +10962.48438 + 21 +4134.287669 + 31 +0.0 + 0 +LINE + 5 +101E + 8 +0 + 62 + 0 + 10 +10906.23438 + 20 +4036.859811 + 30 +0.0 + 11 +10962.48438 + 21 +4036.859811 + 31 +0.0 + 0 +LINE + 5 +101F + 8 +0 + 62 + 0 + 10 +10906.23438 + 20 +3939.431954 + 30 +0.0 + 11 +10962.48438 + 21 +3939.431954 + 31 +0.0 + 0 +POLYLINE + 5 +1020 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +15FD + 8 +DETAILS + 10 +10866.85938 + 20 +4033.787465 + 30 +0.0 + 0 +VERTEX + 5 +15FE + 8 +DETAILS + 10 +10929.35938 + 20 +4033.787465 + 30 +0.0 + 0 +SEQEND + 5 +15FF + 8 +DETAILS + 0 +LINE + 5 +1024 + 8 +0 + 62 + 0 + 10 +10828.213716 + 20 +4183.001597 + 30 +0.0 + 11 +10878.10938 + 21 +4183.001597 + 31 +0.0 + 0 +LINE + 5 +1025 + 8 +0 + 62 + 0 + 10 +10827.860536 + 20 +4085.57374 + 30 +0.0 + 11 +10878.10938 + 21 +4085.57374 + 31 +0.0 + 0 +LINE + 5 +1026 + 8 +0 + 62 + 0 + 10 +10906.234341 + 20 +4134.287689 + 30 +0.0 + 11 +10878.109341 + 21 +4183.001618 + 31 +0.0 + 0 +LINE + 5 +1027 + 8 +0 + 62 + 0 + 10 +10906.234341 + 20 +4036.859832 + 30 +0.0 + 11 +10878.109341 + 21 +4085.573761 + 31 +0.0 + 0 +LINE + 5 +1028 + 8 +0 + 62 + 0 + 10 +10878.109379 + 20 +4085.573784 + 30 +0.0 + 11 +10906.234379 + 21 +4134.287713 + 31 +0.0 + 0 +LINE + 5 +1029 + 8 +0 + 62 + 0 + 10 +10878.109379 + 20 +4183.001642 + 30 +0.0 + 11 +10906.234379 + 21 +4231.715571 + 31 +0.0 + 0 +LINE + 5 +102A + 8 +0 + 62 + 0 + 10 +10827.507355 + 20 +3988.145882 + 30 +0.0 + 11 +10878.10938 + 21 +3988.145882 + 31 +0.0 + 0 +LINE + 5 +102B + 8 +0 + 62 + 0 + 10 +10906.234342 + 20 +3939.431974 + 30 +0.0 + 11 +10878.109342 + 21 +3988.145903 + 31 +0.0 + 0 +POLYLINE + 5 +102C + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1600 + 8 +DETAILS + 10 +10805.976103 + 20 +4071.227005 + 30 +0.0 + 0 +VERTEX + 5 +1601 + 8 +DETAILS + 10 +10805.976103 + 20 +3996.227005 + 30 +0.0 + 0 +SEQEND + 5 +1602 + 8 +DETAILS + 0 +LINE + 5 +1030 + 8 +0 + 62 + 0 + 10 +10878.109379 + 20 +3988.145926 + 30 +0.0 + 11 +10906.234379 + 21 +4036.859855 + 31 +0.0 + 0 +LINE + 5 +1031 + 8 +0 + 62 + 0 + 10 +11029.35938 + 20 +4206.4523 + 30 +0.0 + 11 +11035.767212 + 21 +4212.860132 + 31 +0.0 + 0 +POLYLINE + 5 +1032 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1603 + 8 +DETAILS + 10 +10966.85938 + 20 +4033.787465 + 30 +0.0 + 0 +VERTEX + 5 +1604 + 8 +DETAILS + 10 +11029.35938 + 20 +4033.787465 + 30 +0.0 + 0 +SEQEND + 5 +1605 + 8 +DETAILS + 0 +POLYLINE + 5 +1036 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1606 + 8 +DETAILS + 10 +11079.35938 + 20 +4033.787465 + 30 +0.0 + 0 +VERTEX + 5 +1607 + 8 +DETAILS + 10 +11129.35938 + 20 +4033.787465 + 30 +0.0 + 0 +SEQEND + 5 +1608 + 8 +DETAILS + 0 +LINE + 5 +103A + 8 +0 + 62 + 0 + 10 +10990.60938 + 20 +4183.001597 + 30 +0.0 + 11 +11030.489283 + 21 +4183.001597 + 31 +0.0 + 0 +LINE + 5 +103B + 8 +0 + 62 + 0 + 10 +10990.60938 + 20 +4085.57374 + 30 +0.0 + 11 +11030.489283 + 21 +4085.57374 + 31 +0.0 + 0 +LINE + 5 +103C + 8 +0 + 62 + 0 + 10 +10990.609341 + 20 +4183.001618 + 30 +0.0 + 11 +10962.484341 + 21 +4231.715547 + 31 +0.0 + 0 +LINE + 5 +103D + 8 +0 + 62 + 0 + 10 +10990.609341 + 20 +4085.57376 + 30 +0.0 + 11 +10962.484341 + 21 +4134.287689 + 31 +0.0 + 0 +LINE + 5 +103E + 8 +0 + 62 + 0 + 10 +10962.484378 + 20 +4036.859855 + 30 +0.0 + 11 +10990.609378 + 21 +4085.573784 + 31 +0.0 + 0 +LINE + 5 +103F + 8 +0 + 62 + 0 + 10 +10962.484379 + 20 +4134.287713 + 30 +0.0 + 11 +10990.609379 + 21 +4183.001642 + 31 +0.0 + 0 +LINE + 5 +1040 + 8 +0 + 62 + 0 + 10 +10990.60938 + 20 +3988.145882 + 30 +0.0 + 11 +11030.489283 + 21 +3988.145882 + 31 +0.0 + 0 +LINE + 5 +1041 + 8 +0 + 62 + 0 + 10 +10962.484378 + 20 +3939.431997 + 30 +0.0 + 11 +10990.609378 + 21 +3988.145926 + 31 +0.0 + 0 +LINE + 5 +1042 + 8 +0 + 62 + 0 + 10 +10990.609341 + 20 +3988.145902 + 30 +0.0 + 11 +10962.484341 + 21 +4036.859831 + 31 +0.0 + 0 +DIMENSION + 5 +1043 + 8 +BEMASSUNG + 2 +*D14 + 10 +11976.85938 + 20 +1810.360132 + 30 +0.0 + 11 +12026.85938 + 21 +1897.860132 + 31 +0.0 + 12 +4746.85938 + 22 +-5754.639868 + 32 +0.0 + 70 + 128 + 1 +1 + 13 +11941.85938 + 23 +2575.360132 + 33 +0.0 + 14 +11976.85938 + 24 +2565.360132 + 34 +0.0 + 0 +TEXT + 5 +1044 + 8 +DRAHTANKER + 10 +11576.85938 + 20 +1915.360132 + 30 +0.0 + 40 +62.5 + 1 +5 + 0 +TEXT + 5 +1045 + 8 +DRAHTANKER + 10 +12051.85938 + 20 +1915.360132 + 30 +0.0 + 40 +62.5 + 1 +5 + 0 +POLYLINE + 5 +1046 + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1609 + 8 +DETAILS + 10 +11179.35938 + 20 +3083.787465 + 30 +0.0 + 0 +VERTEX + 5 +160A + 8 +DETAILS + 10 +11254.35938 + 20 +3083.787465 + 30 +0.0 + 0 +SEQEND + 5 +160B + 8 +DETAILS + 0 +POLYLINE + 5 +104A + 8 +DETAILS + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +160C + 8 +DETAILS + 10 +11179.35938 + 20 +4033.787465 + 30 +0.0 + 0 +VERTEX + 5 +160D + 8 +DETAILS + 10 +11254.35938 + 20 +4033.787465 + 30 +0.0 + 0 +SEQEND + 5 +160E + 8 +DETAILS + 0 +DIMENSION + 5 +104E + 8 +DRAHTANKER + 2 +*D7 + 10 +10681.85938 + 20 +1810.360132 + 30 +0.0 + 11 +10534.35938 + 21 +1897.860132 + 31 +0.0 + 12 +4746.85938 + 22 +-5754.639868 + 32 +0.0 + 1 +11 + 13 +10386.85938 + 23 +2575.360132 + 33 +0.0 + 14 +10681.85938 + 24 +2575.360132 + 34 +0.0 + 0 +POLYLINE + 5 +104F + 8 +SCHNITTKANTEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +160F + 8 +SCHNITTKANTEN + 10 +10226.85938 + 20 +2555.360132 + 30 +0.0 + 0 +VERTEX + 5 +1610 + 8 +SCHNITTKANTEN + 10 +12126.85938 + 20 +2555.360132 + 30 +0.0 + 0 +SEQEND + 5 +1611 + 8 +SCHNITTKANTEN + 0 +POLYLINE + 5 +1053 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +1612 + 8 +HOLZ + 10 +11961.85938 + 20 +4212.860132 + 30 +0.0 + 0 +VERTEX + 5 +1613 + 8 +HOLZ + 10 +12161.85938 + 20 +4212.860132 + 30 +0.0 + 0 +VERTEX + 5 +1614 + 8 +HOLZ + 10 +12161.85938 + 20 +3762.860132 + 30 +0.0 + 0 +VERTEX + 5 +1615 + 8 +HOLZ + 10 +11961.85938 + 20 +3762.860132 + 30 +0.0 + 0 +SEQEND + 5 +1616 + 8 +HOLZ + 0 +LINE + 5 +1059 + 8 +0 + 62 + 0 + 10 +11966.832937 + 20 +3340.729186 + 30 +0.0 + 11 +11966.832937 + 21 +3340.729186 + 31 +0.0 + 0 +LINE + 5 +105A + 8 +0 + 62 + 0 + 10 +11965.258103 + 20 +3388.89978 + 30 +0.0 + 11 +11965.258103 + 21 +3388.89978 + 31 +0.0 + 0 +LINE + 5 +105B + 8 +0 + 62 + 0 + 10 +11963.683269 + 20 +3437.070374 + 30 +0.0 + 11 +11963.683269 + 21 +3437.070374 + 31 +0.0 + 0 +LINE + 5 +105C + 8 +0 + 62 + 0 + 10 +11962.108435 + 20 +3485.240968 + 30 +0.0 + 11 +11962.108435 + 21 +3485.240968 + 31 +0.0 + 0 +LINE + 5 +105D + 8 +0 + 62 + 0 + 10 +11960.533601 + 20 +3533.411563 + 30 +0.0 + 11 +11960.533601 + 21 +3533.411563 + 31 +0.0 + 0 +LINE + 5 +105E + 8 +0 + 62 + 0 + 10 +11958.958767 + 20 +3581.582157 + 30 +0.0 + 11 +11958.958767 + 21 +3581.582157 + 31 +0.0 + 0 +LINE + 5 +105F + 8 +0 + 62 + 0 + 10 +11957.383933 + 20 +3629.752751 + 30 +0.0 + 11 +11957.383933 + 21 +3629.752751 + 31 +0.0 + 0 +LINE + 5 +1060 + 8 +0 + 62 + 0 + 10 +11955.809099 + 20 +3677.923345 + 30 +0.0 + 11 +11955.809099 + 21 +3677.923345 + 31 +0.0 + 0 +LINE + 5 +1061 + 8 +0 + 62 + 0 + 10 +11954.234265 + 20 +3726.093939 + 30 +0.0 + 11 +11954.234265 + 21 +3726.093939 + 31 +0.0 + 0 +LINE + 5 +1062 + 8 +0 + 62 + 0 + 10 +11968.407771 + 20 +3292.558591 + 30 +0.0 + 11 +11968.407771 + 21 +3292.558591 + 31 +0.0 + 0 +LINE + 5 +1063 + 8 +0 + 62 + 0 + 10 +11969.982604 + 20 +3244.387997 + 30 +0.0 + 11 +11969.982604 + 21 +3244.387997 + 31 +0.0 + 0 +LINE + 5 +1064 + 8 +0 + 62 + 0 + 10 +11971.557438 + 20 +3196.217403 + 30 +0.0 + 11 +11971.557438 + 21 +3196.217403 + 31 +0.0 + 0 +LINE + 5 +1065 + 8 +0 + 62 + 0 + 10 +11942.984845 + 20 +3124.913874 + 30 +0.0 + 11 +11942.984845 + 21 +3124.913874 + 31 +0.0 + 0 +LINE + 5 +1066 + 8 +0 + 62 + 0 + 10 +11973.132272 + 20 +3148.046809 + 30 +0.0 + 11 +11973.132272 + 21 +3148.046809 + 31 +0.0 + 0 +LINE + 5 +1067 + 8 +0 + 62 + 0 + 10 +11944.559679 + 20 +3076.74328 + 30 +0.0 + 11 +11944.559679 + 21 +3076.74328 + 31 +0.0 + 0 +LINE + 5 +1068 + 8 +0 + 62 + 0 + 10 +11974.707106 + 20 +3099.876215 + 30 +0.0 + 11 +11974.707106 + 21 +3099.876215 + 31 +0.0 + 0 +LINE + 5 +1069 + 8 +0 + 62 + 0 + 10 +11946.134513 + 20 +3028.572686 + 30 +0.0 + 11 +11946.134513 + 21 +3028.572686 + 31 +0.0 + 0 +LINE + 5 +106A + 8 +0 + 62 + 0 + 10 +11976.28194 + 20 +3051.70562 + 30 +0.0 + 11 +11976.28194 + 21 +3051.70562 + 31 +0.0 + 0 +LINE + 5 +106B + 8 +0 + 62 + 0 + 10 +11947.709347 + 20 +2980.402092 + 30 +0.0 + 11 +11947.709347 + 21 +2980.402092 + 31 +0.0 + 0 +LINE + 5 +106C + 8 +0 + 62 + 0 + 10 +11977.856774 + 20 +3003.535026 + 30 +0.0 + 11 +11977.856774 + 21 +3003.535026 + 31 +0.0 + 0 +LINE + 5 +106D + 8 +0 + 62 + 0 + 10 +11949.284181 + 20 +2932.231498 + 30 +0.0 + 11 +11949.284181 + 21 +2932.231498 + 31 +0.0 + 0 +LINE + 5 +106E + 8 +0 + 62 + 0 + 10 +11950.859015 + 20 +2884.060903 + 30 +0.0 + 11 +11950.859015 + 21 +2884.060903 + 31 +0.0 + 0 +LINE + 5 +106F + 8 +0 + 62 + 0 + 10 +11952.433849 + 20 +2835.890309 + 30 +0.0 + 11 +11952.433849 + 21 +2835.890309 + 31 +0.0 + 0 +LINE + 5 +1070 + 8 +0 + 62 + 0 + 10 +11954.008683 + 20 +2787.719715 + 30 +0.0 + 11 +11954.008683 + 21 +2787.719715 + 31 +0.0 + 0 +LINE + 5 +1071 + 8 +0 + 62 + 0 + 10 +11955.583517 + 20 +2739.549121 + 30 +0.0 + 11 +11955.583517 + 21 +2739.549121 + 31 +0.0 + 0 +LINE + 5 +1072 + 8 +0 + 62 + 0 + 10 +11957.158351 + 20 +2691.378526 + 30 +0.0 + 11 +11957.158351 + 21 +2691.378526 + 31 +0.0 + 0 +LINE + 5 +1073 + 8 +0 + 62 + 0 + 10 +11958.733185 + 20 +2643.207932 + 30 +0.0 + 11 +11958.733185 + 21 +2643.207932 + 31 +0.0 + 0 +LINE + 5 +1074 + 8 +0 + 62 + 0 + 10 +11960.308019 + 20 +2595.037338 + 30 +0.0 + 11 +11960.308019 + 21 +2595.037338 + 31 +0.0 + 0 +LINE + 5 +1075 + 8 +0 + 62 + 0 + 10 +11957.044301 + 20 +3350.423192 + 30 +0.0 + 11 +11957.044301 + 21 +3350.423192 + 31 +0.0 + 0 +LINE + 5 +1076 + 8 +0 + 62 + 0 + 10 +11967.951385 + 20 +3416.5879 + 30 +0.0 + 11 +11967.951385 + 21 +3416.5879 + 31 +0.0 + 0 +LINE + 5 +1077 + 8 +0 + 62 + 0 + 10 +11944.901482 + 20 +3478.282087 + 30 +0.0 + 11 +11944.901482 + 21 +3478.282087 + 31 +0.0 + 0 +LINE + 5 +1078 + 8 +0 + 62 + 0 + 10 +11957.914196 + 20 +3479.995243 + 30 +0.0 + 11 +11957.914196 + 21 +3479.995243 + 31 +0.0 + 0 +LINE + 5 +1079 + 8 +0 + 62 + 0 + 10 +11978.238816 + 20 +3482.67103 + 30 +0.0 + 11 +11978.238816 + 21 +3482.67103 + 31 +0.0 + 0 +LINE + 5 +107A + 8 +0 + 62 + 0 + 10 +11955.188914 + 20 +3544.365216 + 30 +0.0 + 11 +11955.188914 + 21 +3544.365216 + 31 +0.0 + 0 +LINE + 5 +107B + 8 +0 + 62 + 0 + 10 +11966.095998 + 20 +3610.529925 + 30 +0.0 + 11 +11966.095998 + 21 +3610.529925 + 31 +0.0 + 0 +LINE + 5 +107C + 8 +0 + 62 + 0 + 10 +11979.108712 + 20 +3612.243081 + 30 +0.0 + 11 +11979.108712 + 21 +3612.243081 + 31 +0.0 + 0 +LINE + 5 +107D + 8 +0 + 62 + 0 + 10 +11943.046095 + 20 +3672.224111 + 30 +0.0 + 11 +11943.046095 + 21 +3672.224111 + 31 +0.0 + 0 +LINE + 5 +107E + 8 +0 + 62 + 0 + 10 +11956.058809 + 20 +3673.937267 + 30 +0.0 + 11 +11956.058809 + 21 +3673.937267 + 31 +0.0 + 0 +LINE + 5 +107F + 8 +0 + 62 + 0 + 10 +11976.383429 + 20 +3676.613054 + 30 +0.0 + 11 +11976.383429 + 21 +3676.613054 + 31 +0.0 + 0 +LINE + 5 +1080 + 8 +0 + 62 + 0 + 10 +11953.333527 + 20 +3738.307241 + 30 +0.0 + 11 +11953.333527 + 21 +3738.307241 + 31 +0.0 + 0 +LINE + 5 +1081 + 8 +0 + 62 + 0 + 10 +11946.756869 + 20 +3284.340062 + 30 +0.0 + 11 +11946.756869 + 21 +3284.340062 + 31 +0.0 + 0 +LINE + 5 +1082 + 8 +0 + 62 + 0 + 10 +11959.769583 + 20 +3286.053219 + 30 +0.0 + 11 +11959.769583 + 21 +3286.053219 + 31 +0.0 + 0 +LINE + 5 +1083 + 8 +0 + 62 + 0 + 10 +11969.806772 + 20 +3222.645876 + 30 +0.0 + 11 +11969.806772 + 21 +3222.645876 + 31 +0.0 + 0 +LINE + 5 +1084 + 8 +0 + 62 + 0 + 10 +11958.899688 + 20 +3156.481168 + 30 +0.0 + 11 +11958.899688 + 21 +3156.481168 + 31 +0.0 + 0 +LINE + 5 +1085 + 8 +0 + 62 + 0 + 10 +11948.612257 + 20 +3090.398038 + 30 +0.0 + 11 +11948.612257 + 21 +3090.398038 + 31 +0.0 + 0 +LINE + 5 +1086 + 8 +0 + 62 + 0 + 10 +11961.62497 + 20 +3092.111194 + 30 +0.0 + 11 +11961.62497 + 21 +3092.111194 + 31 +0.0 + 0 +LINE + 5 +1087 + 8 +0 + 62 + 0 + 10 +11971.662159 + 20 +3028.703852 + 30 +0.0 + 11 +11971.662159 + 21 +3028.703852 + 31 +0.0 + 0 +LINE + 5 +1088 + 8 +0 + 62 + 0 + 10 +11960.755075 + 20 +2962.539143 + 30 +0.0 + 11 +11960.755075 + 21 +2962.539143 + 31 +0.0 + 0 +LINE + 5 +1089 + 8 +0 + 62 + 0 + 10 +11950.467644 + 20 +2896.456014 + 30 +0.0 + 11 +11950.467644 + 21 +2896.456014 + 31 +0.0 + 0 +LINE + 5 +108A + 8 +0 + 62 + 0 + 10 +11963.480357 + 20 +2898.16917 + 30 +0.0 + 11 +11963.480357 + 21 +2898.16917 + 31 +0.0 + 0 +LINE + 5 +108B + 8 +0 + 62 + 0 + 10 +11973.517546 + 20 +2834.761827 + 30 +0.0 + 11 +11973.517546 + 21 +2834.761827 + 31 +0.0 + 0 +LINE + 5 +108C + 8 +0 + 62 + 0 + 10 +11942.285842 + 20 +2765.921332 + 30 +0.0 + 11 +11942.285842 + 21 +2765.921332 + 31 +0.0 + 0 +LINE + 5 +108D + 8 +0 + 62 + 0 + 10 +11962.610462 + 20 +2768.597119 + 30 +0.0 + 11 +11962.610462 + 21 +2768.597119 + 31 +0.0 + 0 +LINE + 5 +108E + 8 +0 + 62 + 0 + 10 +11952.323031 + 20 +2702.513989 + 30 +0.0 + 11 +11952.323031 + 21 +2702.513989 + 31 +0.0 + 0 +LINE + 5 +108F + 8 +0 + 62 + 0 + 10 +11965.335744 + 20 +2704.227146 + 30 +0.0 + 11 +11965.335744 + 21 +2704.227146 + 31 +0.0 + 0 +LINE + 5 +1090 + 8 +0 + 62 + 0 + 10 +11975.372933 + 20 +2640.819803 + 30 +0.0 + 11 +11975.372933 + 21 +2640.819803 + 31 +0.0 + 0 +LINE + 5 +1091 + 8 +0 + 62 + 0 + 10 +11944.141229 + 20 +2571.979308 + 30 +0.0 + 11 +11944.141229 + 21 +2571.979308 + 31 +0.0 + 0 +LINE + 5 +1092 + 8 +0 + 62 + 0 + 10 +11964.465849 + 20 +2574.655095 + 30 +0.0 + 11 +11964.465849 + 21 +2574.655095 + 31 +0.0 + 0 +LINE + 5 +1093 + 8 +0 + 62 + 0 + 10 +11967.080459 + 20 +3403.866681 + 30 +0.0 + 11 +11967.080459 + 21 +3403.866681 + 31 +0.0 + 0 +LINE + 5 +1094 + 8 +0 + 62 + 0 + 10 +11977.622852 + 20 +3397.150436 + 30 +0.0 + 11 +11977.622852 + 21 +3397.150436 + 31 +0.0 + 0 +LINE + 5 +1095 + 8 +0 + 62 + 0 + 10 +11946.88975 + 20 +3466.469237 + 30 +0.0 + 11 +11946.88975 + 21 +3466.469237 + 31 +0.0 + 0 +LINE + 5 +1096 + 8 +0 + 62 + 0 + 10 +11957.432143 + 20 +3459.752991 + 30 +0.0 + 11 +11957.432143 + 21 +3459.752991 + 31 +0.0 + 0 +LINE + 5 +1097 + 8 +0 + 62 + 0 + 10 +11975.194049 + 20 +3498.177065 + 30 +0.0 + 11 +11975.194049 + 21 +3498.177065 + 31 +0.0 + 0 +LINE + 5 +1098 + 8 +0 + 62 + 0 + 10 +11955.00334 + 20 +3560.779621 + 30 +0.0 + 11 +11955.00334 + 21 +3560.779621 + 31 +0.0 + 0 +LINE + 5 +1099 + 8 +0 + 62 + 0 + 10 +11964.171169 + 20 +3654.41838 + 30 +0.0 + 11 +11964.171169 + 21 +3654.41838 + 31 +0.0 + 0 +LINE + 5 +109A + 8 +0 + 62 + 0 + 10 +11974.713562 + 20 +3647.702135 + 30 +0.0 + 11 +11974.713562 + 21 +3647.702135 + 31 +0.0 + 0 +LINE + 5 +109B + 8 +0 + 62 + 0 + 10 +11943.98046 + 20 +3717.020936 + 30 +0.0 + 11 +11943.98046 + 21 +3717.020936 + 31 +0.0 + 0 +LINE + 5 +109C + 8 +0 + 62 + 0 + 10 +11954.522853 + 20 +3710.304691 + 30 +0.0 + 11 +11954.522853 + 21 +3710.304691 + 31 +0.0 + 0 +LINE + 5 +109D + 8 +0 + 62 + 0 + 10 +11972.284759 + 20 +3748.728765 + 30 +0.0 + 11 +11972.284759 + 21 +3748.728765 + 31 +0.0 + 0 +LINE + 5 +109E + 8 +0 + 62 + 0 + 10 +11957.912629 + 20 +3310.227921 + 30 +0.0 + 11 +11957.912629 + 21 +3310.227921 + 31 +0.0 + 0 +LINE + 5 +109F + 8 +0 + 62 + 0 + 10 +11978.103338 + 20 +3247.625365 + 30 +0.0 + 11 +11978.103338 + 21 +3247.625365 + 31 +0.0 + 0 +LINE + 5 +10A0 + 8 +0 + 62 + 0 + 10 +11949.799039 + 20 +3215.917537 + 30 +0.0 + 11 +11949.799039 + 21 +3215.917537 + 31 +0.0 + 0 +LINE + 5 +10A1 + 8 +0 + 62 + 0 + 10 +11960.341432 + 20 +3209.201292 + 30 +0.0 + 11 +11960.341432 + 21 +3209.201292 + 31 +0.0 + 0 +LINE + 5 +10A2 + 8 +0 + 62 + 0 + 10 +11969.989748 + 20 +3153.314981 + 30 +0.0 + 11 +11969.989748 + 21 +3153.314981 + 31 +0.0 + 0 +LINE + 5 +10A3 + 8 +0 + 62 + 0 + 10 +11960.821919 + 20 +3059.676222 + 30 +0.0 + 11 +11960.821919 + 21 +3059.676222 + 31 +0.0 + 0 +LINE + 5 +10A4 + 8 +0 + 62 + 0 + 10 +11943.060013 + 20 +3021.252148 + 30 +0.0 + 11 +11943.060013 + 21 +3021.252148 + 31 +0.0 + 0 +LINE + 5 +10A5 + 8 +0 + 62 + 0 + 10 +11952.708329 + 20 +2965.365837 + 30 +0.0 + 11 +11952.708329 + 21 +2965.365837 + 31 +0.0 + 0 +LINE + 5 +10A6 + 8 +0 + 62 + 0 + 10 +11963.250722 + 20 +2958.649592 + 30 +0.0 + 11 +11963.250722 + 21 +2958.649592 + 31 +0.0 + 0 +LINE + 5 +10A7 + 8 +0 + 62 + 0 + 10 +11972.899038 + 20 +2902.763282 + 30 +0.0 + 11 +11972.899038 + 21 +2902.763282 + 31 +0.0 + 0 +LINE + 5 +10A8 + 8 +0 + 62 + 0 + 10 +11943.5405 + 20 +2871.727078 + 30 +0.0 + 11 +11943.5405 + 21 +2871.727078 + 31 +0.0 + 0 +LINE + 5 +10A9 + 8 +0 + 62 + 0 + 10 +11963.731209 + 20 +2809.124522 + 30 +0.0 + 11 +11963.731209 + 21 +2809.124522 + 31 +0.0 + 0 +LINE + 5 +10AA + 8 +0 + 62 + 0 + 10 +11945.969303 + 20 +2770.700449 + 30 +0.0 + 11 +11945.969303 + 21 +2770.700449 + 31 +0.0 + 0 +LINE + 5 +10AB + 8 +0 + 62 + 0 + 10 +11955.617618 + 20 +2714.814138 + 30 +0.0 + 11 +11955.617618 + 21 +2714.814138 + 31 +0.0 + 0 +LINE + 5 +10AC + 8 +0 + 62 + 0 + 10 +11966.160012 + 20 +2708.097893 + 30 +0.0 + 11 +11966.160012 + 21 +2708.097893 + 31 +0.0 + 0 +LINE + 5 +10AD + 8 +0 + 62 + 0 + 10 +11975.808328 + 20 +2652.211582 + 30 +0.0 + 11 +11975.808328 + 21 +2652.211582 + 31 +0.0 + 0 +LINE + 5 +10AE + 8 +0 + 62 + 0 + 10 +11946.449789 + 20 +2621.175378 + 30 +0.0 + 11 +11946.449789 + 21 +2621.175378 + 31 +0.0 + 0 +LINE + 5 +10AF + 8 +0 + 62 + 0 + 10 +11966.640498 + 20 +2558.572822 + 30 +0.0 + 11 +11966.640498 + 21 +2558.572822 + 31 +0.0 + 0 +LINE + 5 +10B0 + 8 +0 + 62 + 0 + 10 +11953.757045 + 20 +3322.902296 + 30 +0.0 + 11 +11953.757045 + 21 +3322.902296 + 31 +0.0 + 0 +LINE + 5 +10B1 + 8 +0 + 62 + 0 + 10 +11978.640155 + 20 +3300.101127 + 30 +0.0 + 11 +11978.640155 + 21 +3300.101127 + 31 +0.0 + 0 +LINE + 5 +10B2 + 8 +0 + 62 + 0 + 10 +11951.311771 + 20 +3415.950055 + 30 +0.0 + 11 +11951.311771 + 21 +3415.950055 + 31 +0.0 + 0 +LINE + 5 +10B3 + 8 +0 + 62 + 0 + 10 +11955.919754 + 20 +3411.727616 + 30 +0.0 + 11 +11955.919754 + 21 +3411.727616 + 31 +0.0 + 0 +LINE + 5 +10B4 + 8 +0 + 62 + 0 + 10 +11977.669435 + 20 +3391.797705 + 30 +0.0 + 11 +11977.669435 + 21 +3391.797705 + 31 +0.0 + 0 +LINE + 5 +10B5 + 8 +0 + 62 + 0 + 10 +11950.341051 + 20 +3507.646633 + 30 +0.0 + 11 +11950.341051 + 21 +3507.646633 + 31 +0.0 + 0 +LINE + 5 +10B6 + 8 +0 + 62 + 0 + 10 +11975.224161 + 20 +3484.845463 + 30 +0.0 + 11 +11975.224161 + 21 +3484.845463 + 31 +0.0 + 0 +LINE + 5 +10B7 + 8 +0 + 62 + 0 + 10 +11947.895776 + 20 +3600.694391 + 30 +0.0 + 11 +11947.895776 + 21 +3600.694391 + 31 +0.0 + 0 +LINE + 5 +10B8 + 8 +0 + 62 + 0 + 10 +11952.503759 + 20 +3596.471953 + 30 +0.0 + 11 +11952.503759 + 21 +3596.471953 + 31 +0.0 + 0 +LINE + 5 +10B9 + 8 +0 + 62 + 0 + 10 +11974.253441 + 20 +3576.542041 + 30 +0.0 + 11 +11974.253441 + 21 +3576.542041 + 31 +0.0 + 0 +LINE + 5 +10BA + 8 +0 + 62 + 0 + 10 +11946.925056 + 20 +3692.390969 + 30 +0.0 + 11 +11946.925056 + 21 +3692.390969 + 31 +0.0 + 0 +LINE + 5 +10BB + 8 +0 + 62 + 0 + 10 +11971.808166 + 20 +3669.5898 + 30 +0.0 + 11 +11971.808166 + 21 +3669.5898 + 31 +0.0 + 0 +LINE + 5 +10BC + 8 +0 + 62 + 0 + 10 +11976.41615 + 20 +3665.367361 + 30 +0.0 + 11 +11976.41615 + 21 +3665.367361 + 31 +0.0 + 0 +LINE + 5 +10BD + 8 +0 + 62 + 0 + 10 +11954.727765 + 20 +3231.205718 + 30 +0.0 + 11 +11954.727765 + 21 +3231.205718 + 31 +0.0 + 0 +LINE + 5 +10BE + 8 +0 + 62 + 0 + 10 +11959.335748 + 20 +3226.983279 + 30 +0.0 + 11 +11959.335748 + 21 +3226.983279 + 31 +0.0 + 0 +LINE + 5 +10BF + 8 +0 + 62 + 0 + 10 +11957.17304 + 20 +3138.15796 + 30 +0.0 + 11 +11957.17304 + 21 +3138.15796 + 31 +0.0 + 0 +LINE + 5 +10C0 + 8 +0 + 62 + 0 + 10 +11958.14376 + 20 +3046.461382 + 30 +0.0 + 11 +11958.14376 + 21 +3046.461382 + 31 +0.0 + 0 +LINE + 5 +10C1 + 8 +0 + 62 + 0 + 10 +11962.751743 + 20 +3042.238943 + 30 +0.0 + 11 +11962.751743 + 21 +3042.238943 + 31 +0.0 + 0 +LINE + 5 +10C2 + 8 +0 + 62 + 0 + 10 +11960.589034 + 20 +2953.413623 + 30 +0.0 + 11 +11960.589034 + 21 +2953.413623 + 31 +0.0 + 0 +LINE + 5 +10C3 + 8 +0 + 62 + 0 + 10 +11961.559754 + 20 +2861.717045 + 30 +0.0 + 11 +11961.559754 + 21 +2861.717045 + 31 +0.0 + 0 +LINE + 5 +10C4 + 8 +0 + 62 + 0 + 10 +11966.167737 + 20 +2857.494606 + 30 +0.0 + 11 +11966.167737 + 21 +2857.494606 + 31 +0.0 + 0 +LINE + 5 +10C5 + 8 +0 + 62 + 0 + 10 +11942.255347 + 20 +2788.599198 + 30 +0.0 + 11 +11942.255347 + 21 +2788.599198 + 31 +0.0 + 0 +LINE + 5 +10C6 + 8 +0 + 62 + 0 + 10 +11964.005029 + 20 +2768.669287 + 30 +0.0 + 11 +11964.005029 + 21 +2768.669287 + 31 +0.0 + 0 +LINE + 5 +10C7 + 8 +0 + 62 + 0 + 10 +11964.975749 + 20 +2676.972709 + 30 +0.0 + 11 +11964.975749 + 21 +2676.972709 + 31 +0.0 + 0 +LINE + 5 +10C8 + 8 +0 + 62 + 0 + 10 +11969.583732 + 20 +2672.75027 + 30 +0.0 + 11 +11969.583732 + 21 +2672.75027 + 31 +0.0 + 0 +LINE + 5 +10C9 + 8 +0 + 62 + 0 + 10 +11945.671342 + 20 +2603.854861 + 30 +0.0 + 11 +11945.671342 + 21 +2603.854861 + 31 +0.0 + 0 +LINE + 5 +10CA + 8 +0 + 62 + 0 + 10 +11967.421023 + 20 +2583.92495 + 30 +0.0 + 11 +11967.421023 + 21 +2583.92495 + 31 +0.0 + 0 +POLYLINE + 5 +10CB + 8 +MAUERWERK + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1617 + 8 +MAUERWERK + 10 +11979.35938 + 20 +3762.860132 + 30 +0.0 + 0 +VERTEX + 5 +1618 + 8 +MAUERWERK + 10 +11979.35938 + 20 +2555.360132 + 30 +0.0 + 0 +SEQEND + 5 +1619 + 8 +MAUERWERK + 0 +POLYLINE + 5 +10CF + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +161A + 8 +HOLZ + 10 +12000.0 + 20 +4245.0 + 30 +0.0 + 0 +VERTEX + 5 +161B + 8 +HOLZ + 10 +12125.0 + 20 +4245.0 + 30 +0.0 + 0 +VERTEX + 5 +161C + 8 +HOLZ + 10 +12125.0 + 20 +4320.0 + 30 +0.0 + 0 +VERTEX + 5 +161D + 8 +HOLZ + 10 +12000.0 + 20 +4320.0 + 30 +0.0 + 0 +SEQEND + 5 +161E + 8 +HOLZ + 0 +POLYLINE + 5 +10D5 + 8 +SCHRAFFUR + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +10D6 + 8 +SCHRAFFUR + 10 +11959.834281 + 20 +4181.180794 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +10D7 + 8 +SCHRAFFUR + 10 +11959.834281 + 20 +4181.180794 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +10D8 + 8 +SCHRAFFUR + 10 +11972.973317 + 20 +4180.978442 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +10D9 + 8 +SCHRAFFUR + 10 +11984.290301 + 20 +4182.232985 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +10DA + 8 +SCHRAFFUR + 10 +11993.906706 + 20 +4184.823014 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +10DB + 8 +SCHRAFFUR + 10 +12001.943999 + 20 +4188.627122 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +10DC + 8 +SCHRAFFUR + 10 +12008.523651 + 20 +4193.523899 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +10DD + 8 +SCHRAFFUR + 10 +12013.767133 + 20 +4199.391937 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +10DE + 8 +SCHRAFFUR + 10 +12017.795915 + 20 +4206.109827 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +10DF + 8 +SCHRAFFUR + 10 +12020.731465 + 20 +4213.55616 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +10E0 + 8 +SCHRAFFUR + 10 +11997.409084 + 20 +4178.590741 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +10E1 + 8 +SCHRAFFUR + 10 +12014.252997 + 20 +4192.835933 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +10E2 + 8 +SCHRAFFUR + 10 +12020.731465 + 20 +4213.55616 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +10E3 + 8 +SCHRAFFUR + 0 +POLYLINE + 5 +10E4 + 8 +SCHRAFFUR + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +10E5 + 8 +SCHRAFFUR + 10 +11963.721362 + 20 +4113.840075 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +10E6 + 8 +SCHRAFFUR + 10 +11963.721362 + 20 +4113.840075 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +10E7 + 8 +SCHRAFFUR + 10 +11991.496953 + 20 +4116.53822 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +10E8 + 8 +SCHRAFFUR + 10 +12013.195231 + 20 +4119.763732 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +10E9 + 8 +SCHRAFFUR + 10 +12029.662693 + 20 +4123.497641 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +10EA + 8 +SCHRAFFUR + 10 +12041.745834 + 20 +4127.720977 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +10EB + 8 +SCHRAFFUR + 10 +12050.291151 + 20 +4132.414769 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +10EC + 8 +SCHRAFFUR + 10 +12056.14514 + 20 +4137.560046 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +10ED + 8 +SCHRAFFUR + 10 +12060.154298 + 20 +4143.137839 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +10EE + 8 +SCHRAFFUR + 10 +12063.16512 + 20 +4149.129177 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +10EF + 8 +SCHRAFFUR + 10 +12065.884918 + 20 +4155.525206 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +10F0 + 8 +SCHRAFFUR + 10 +12068.464264 + 20 +4162.357545 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +10F1 + 8 +SCHRAFFUR + 10 +12070.914546 + 20 +4169.667925 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +10F2 + 8 +SCHRAFFUR + 10 +12073.247151 + 20 +4177.498082 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +10F3 + 8 +SCHRAFFUR + 10 +12075.473466 + 20 +4185.889749 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +10F4 + 8 +SCHRAFFUR + 10 +12077.604879 + 20 +4194.884661 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +10F5 + 8 +SCHRAFFUR + 10 +12079.652777 + 20 +4204.524551 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +10F6 + 8 +SCHRAFFUR + 10 +12081.628546 + 20 +4214.851153 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +10F7 + 8 +SCHRAFFUR + 10 +12046.64513 + 20 +4120.315109 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +10F8 + 8 +SCHRAFFUR + 10 +12064.784737 + 20 +4144.920382 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +10F9 + 8 +SCHRAFFUR + 10 +12076.445875 + 20 +4186.360834 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +10FA + 8 +SCHRAFFUR + 10 +12081.628546 + 20 +4214.851153 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +10FB + 8 +SCHRAFFUR + 0 +POLYLINE + 5 +10FC + 8 +SCHRAFFUR + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +10FD + 8 +SCHRAFFUR + 10 +11961.129974 + 20 +4058.154431 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +10FE + 8 +SCHRAFFUR + 10 +11961.129974 + 20 +4058.154431 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +10FF + 8 +SCHRAFFUR + 10 +11996.480368 + 20 +4058.919551 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1100 + 8 +SCHRAFFUR + 10 +12024.557727 + 20 +4061.118799 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1101 + 8 +SCHRAFFUR + 10 +12046.47047 + 20 +4064.608001 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1102 + 8 +SCHRAFFUR + 10 +12063.327013 + 20 +4069.242988 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1103 + 8 +SCHRAFFUR + 10 +12076.235773 + 20 +4074.879588 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1104 + 8 +SCHRAFFUR + 10 +12086.305165 + 20 +4081.373629 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1105 + 8 +SCHRAFFUR + 10 +12094.643606 + 20 +4088.58094 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1106 + 8 +SCHRAFFUR + 10 +12102.359514 + 20 +4096.35735 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1107 + 8 +SCHRAFFUR + 10 +12110.325956 + 20 +4104.657331 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1108 + 8 +SCHRAFFUR + 10 +12118.474603 + 20 +4113.829929 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1109 + 8 +SCHRAFFUR + 10 +12126.501778 + 20 +4124.322834 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +110A + 8 +SCHRAFFUR + 10 +12134.103803 + 20 +4136.583735 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +110B + 8 +SCHRAFFUR + 10 +12140.977003 + 20 +4151.060323 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +110C + 8 +SCHRAFFUR + 10 +12146.817698 + 20 +4168.200287 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +110D + 8 +SCHRAFFUR + 10 +12151.322213 + 20 +4188.451316 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +110E + 8 +SCHRAFFUR + 10 +12154.186869 + 20 +4212.261101 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +110F + 8 +SCHRAFFUR + 10 +12066.080327 + 20 +4058.154431 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1110 + 8 +SCHRAFFUR + 10 +12097.176766 + 20 +4091.82479 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1111 + 8 +SCHRAFFUR + 10 +12149.004199 + 20 +4143.625388 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1112 + 8 +SCHRAFFUR + 10 +12154.186869 + 20 +4212.261101 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1113 + 8 +SCHRAFFUR + 0 +POLYLINE + 5 +1114 + 8 +SCHRAFFUR + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +1115 + 8 +SCHRAFFUR + 10 +11962.425668 + 20 +4016.713978 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1116 + 8 +SCHRAFFUR + 10 +11962.425668 + 20 +4016.713978 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1117 + 8 +SCHRAFFUR + 10 +11989.394607 + 20 +4018.213237 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1118 + 8 +SCHRAFFUR + 10 +12012.370212 + 20 +4019.845284 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1119 + 8 +SCHRAFFUR + 10 +12031.914283 + 20 +4021.682205 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +111A + 8 +SCHRAFFUR + 10 +12048.588619 + 20 +4023.796088 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +111B + 8 +SCHRAFFUR + 10 +12062.95502 + 20 +4026.259017 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +111C + 8 +SCHRAFFUR + 10 +12075.575286 + 20 +4029.143078 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +111D + 8 +SCHRAFFUR + 10 +12087.011217 + 20 +4032.520358 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +111E + 8 +SCHRAFFUR + 10 +12097.824612 + 20 +4036.462943 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +111F + 8 +SCHRAFFUR + 10 +12108.443149 + 20 +4041.015095 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1120 + 8 +SCHRAFFUR + 10 +12118.75801 + 20 +4046.109788 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1121 + 8 +SCHRAFFUR + 10 +12128.526255 + 20 +4051.652172 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1122 + 8 +SCHRAFFUR + 10 +12137.504944 + 20 +4057.547396 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1123 + 8 +SCHRAFFUR + 10 +12145.451137 + 20 +4063.700612 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1124 + 8 +SCHRAFFUR + 10 +12152.121893 + 20 +4070.016968 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1125 + 8 +SCHRAFFUR + 10 +12157.274274 + 20 +4076.401615 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1126 + 8 +SCHRAFFUR + 10 +12160.665337 + 20 +4082.759703 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1127 + 8 +SCHRAFFUR + 10 +12040.166662 + 20 +4020.599025 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1128 + 8 +SCHRAFFUR + 10 +12098.472459 + 20 +4029.664112 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1129 + 8 +SCHRAFFUR + 10 +12154.186869 + 20 +4065.924524 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +112A + 8 +SCHRAFFUR + 10 +12160.665337 + 20 +4082.759703 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +112B + 8 +SCHRAFFUR + 0 +POLYLINE + 5 +112C + 8 +SCHRAFFUR + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +112D + 8 +SCHRAFFUR + 10 +11962.425668 + 20 +3944.193219 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +112E + 8 +SCHRAFFUR + 10 +11962.425668 + 20 +3944.193219 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +112F + 8 +SCHRAFFUR + 10 +11991.2445 + 20 +3946.267259 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1130 + 8 +SCHRAFFUR + 10 +12020.002607 + 20 +3951.315788 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1131 + 8 +SCHRAFFUR + 10 +12048.15337 + 20 +3959.035285 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1132 + 8 +SCHRAFFUR + 10 +12075.150169 + 20 +3969.122232 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1133 + 8 +SCHRAFFUR + 10 +12100.446385 + 20 +3981.273109 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1134 + 8 +SCHRAFFUR + 10 +12123.495398 + 20 +3995.184396 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1135 + 8 +SCHRAFFUR + 10 +12143.750589 + 20 +4010.552574 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1136 + 8 +SCHRAFFUR + 10 +12160.665337 + 20 +4027.074124 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1137 + 8 +SCHRAFFUR + 10 +12038.870968 + 20 +3945.488213 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1138 + 8 +SCHRAFFUR + 10 +12120.499147 + 20 +3981.748625 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1139 + 8 +SCHRAFFUR + 10 +12160.665337 + 20 +4027.074124 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +113A + 8 +SCHRAFFUR + 0 +POLYLINE + 5 +113B + 8 +SCHRAFFUR + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +113C + 8 +SCHRAFFUR + 10 +11962.425668 + 20 +3876.852501 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +113D + 8 +SCHRAFFUR + 10 +11962.425668 + 20 +3876.852501 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +113E + 8 +SCHRAFFUR + 10 +11994.590017 + 20 +3878.463679 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +113F + 8 +SCHRAFFUR + 10 +12025.630761 + 20 +3883.185925 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1140 + 8 +SCHRAFFUR + 10 +12055.031653 + 20 +3890.852305 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1141 + 8 +SCHRAFFUR + 10 +12082.276445 + 20 +3901.295883 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1142 + 8 +SCHRAFFUR + 10 +12106.848888 + 20 +3914.349726 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1143 + 8 +SCHRAFFUR + 10 +12128.232734 + 20 +3929.846899 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1144 + 8 +SCHRAFFUR + 10 +12145.911735 + 20 +3947.620468 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1145 + 8 +SCHRAFFUR + 10 +12159.369644 + 20 +3967.503498 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1146 + 8 +SCHRAFFUR + 10 +12049.236517 + 20 +3876.852501 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1147 + 8 +SCHRAFFUR + 10 +12129.568898 + 20 +3911.817854 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1148 + 8 +SCHRAFFUR + 10 +12159.369644 + 20 +3967.503498 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1149 + 8 +SCHRAFFUR + 0 +POLYLINE + 5 +114A + 8 +SCHRAFFUR + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +114B + 8 +SCHRAFFUR + 10 +11962.425668 + 20 +3801.741689 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +114C + 8 +SCHRAFFUR + 10 +11962.425668 + 20 +3801.741689 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +114D + 8 +SCHRAFFUR + 10 +12000.817887 + 20 +3808.307806 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +114E + 8 +SCHRAFFUR + 10 +12036.097434 + 20 +3817.119965 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +114F + 8 +SCHRAFFUR + 10 +12067.94545 + 20 +3827.874647 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1150 + 8 +SCHRAFFUR + 10 +12096.043073 + 20 +3840.268332 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1151 + 8 +SCHRAFFUR + 10 +12120.071442 + 20 +3853.997501 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1152 + 8 +SCHRAFFUR + 10 +12139.711696 + 20 +3868.758634 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1153 + 8 +SCHRAFFUR + 10 +12154.644976 + 20 +3884.248211 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1154 + 8 +SCHRAFFUR + 10 +12164.552418 + 20 +3900.162714 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1155 + 8 +SCHRAFFUR + 10 +12068.671714 + 20 +3815.986816 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1156 + 8 +SCHRAFFUR + 10 +12145.117118 + 20 +3857.427268 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1157 + 8 +SCHRAFFUR + 10 +12164.552418 + 20 +3900.162714 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1158 + 8 +SCHRAFFUR + 0 +POLYLINE + 5 +1159 + 8 +SCHRAFFUR + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +115A + 8 +SCHRAFFUR + 10 +12044.053743 + 20 +3765.481277 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +115B + 8 +SCHRAFFUR + 10 +12044.053743 + 20 +3765.481277 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +115C + 8 +SCHRAFFUR + 10 +12069.792828 + 20 +3774.116385 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +115D + 8 +SCHRAFFUR + 10 +12089.625412 + 20 +3781.142845 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +115E + 8 +SCHRAFFUR + 10 +12104.933219 + 20 +3787.380157 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +115F + 8 +SCHRAFFUR + 10 +12117.097977 + 20 +3793.647823 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1160 + 8 +SCHRAFFUR + 10 +12127.501411 + 20 +3800.765344 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1161 + 8 +SCHRAFFUR + 10 +12137.525248 + 20 +3809.552221 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1162 + 8 +SCHRAFFUR + 10 +12148.551212 + 20 +3820.827955 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1163 + 8 +SCHRAFFUR + 10 +12161.961031 + 20 +3835.412048 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1164 + 8 +SCHRAFFUR + 10 +12121.79484 + 20 +3791.381543 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1165 + 8 +SCHRAFFUR + 10 +12161.961031 + 20 +3835.412048 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1166 + 8 +SCHRAFFUR + 0 +POLYLINE + 5 +1167 + 8 +SCHRAFFUR + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +1168 + 8 +SCHRAFFUR + 10 +12002.591859 + 20 +4296.436999 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1169 + 8 +SCHRAFFUR + 10 +12002.591859 + 20 +4296.436999 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +116A + 8 +SCHRAFFUR + 10 +12011.168168 + 20 +4297.327329 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +116B + 8 +SCHRAFFUR + 10 +12017.755401 + 20 +4298.217657 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +116C + 8 +SCHRAFFUR + 10 +12022.793888 + 20 +4299.350798 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +116D + 8 +SCHRAFFUR + 10 +12026.723957 + 20 +4300.969567 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +116E + 8 +SCHRAFFUR + 10 +12029.98594 + 20 +4303.316779 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +116F + 8 +SCHRAFFUR + 10 +12033.020165 + 20 +4306.635249 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1170 + 8 +SCHRAFFUR + 10 +12036.266963 + 20 +4311.167793 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1171 + 8 +SCHRAFFUR + 10 +12040.166662 + 20 +4317.157225 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1172 + 8 +SCHRAFFUR + 10 +12028.505523 + 20 +4299.027052 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1173 + 8 +SCHRAFFUR + 10 +12040.166662 + 20 +4317.157225 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1174 + 8 +SCHRAFFUR + 0 +POLYLINE + 5 +1175 + 8 +SCHRAFFUR + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +1176 + 8 +SCHRAFFUR + 10 +12002.591859 + 20 +4273.126785 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1177 + 8 +SCHRAFFUR + 10 +12002.591859 + 20 +4273.126785 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1178 + 8 +SCHRAFFUR + 10 +12015.644852 + 20 +4274.335796 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1179 + 8 +SCHRAFFUR + 10 +12027.574253 + 20 +4276.971346 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +117A + 8 +SCHRAFFUR + 10 +12038.349692 + 20 +4281.003085 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +117B + 8 +SCHRAFFUR + 10 +12047.940798 + 20 +4286.400659 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +117C + 8 +SCHRAFFUR + 10 +12056.3172 + 20 +4293.133717 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +117D + 8 +SCHRAFFUR + 10 +12063.44853 + 20 +4301.171907 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +117E + 8 +SCHRAFFUR + 10 +12069.304416 + 20 +4310.484876 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +117F + 8 +SCHRAFFUR + 10 +12073.854488 + 20 +4321.042272 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1180 + 8 +SCHRAFFUR + 10 +12038.870968 + 20 +4274.421779 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1181 + 8 +SCHRAFFUR + 10 +12063.489043 + 20 +4291.256959 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1182 + 8 +SCHRAFFUR + 10 +12073.854488 + 20 +4321.042272 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1183 + 8 +SCHRAFFUR + 0 +POLYLINE + 5 +1184 + 8 +SCHRAFFUR + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +1185 + 8 +SCHRAFFUR + 10 +12036.279685 + 20 +4248.521513 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1186 + 8 +SCHRAFFUR + 10 +12036.279685 + 20 +4248.521513 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1187 + 8 +SCHRAFFUR + 10 +12050.977598 + 20 +4253.387936 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1188 + 8 +SCHRAFFUR + 10 +12063.974923 + 20 +4259.286322 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1189 + 8 +SCHRAFFUR + 10 +12075.271663 + 20 +4266.277373 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +118A + 8 +SCHRAFFUR + 10 +12084.867819 + 20 +4274.421795 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +118B + 8 +SCHRAFFUR + 10 +12092.763391 + 20 +4283.780293 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +118C + 8 +SCHRAFFUR + 10 +12098.958382 + 20 +4294.413569 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +118D + 8 +SCHRAFFUR + 10 +12103.452791 + 20 +4306.38233 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +118E + 8 +SCHRAFFUR + 10 +12106.246621 + 20 +4319.747278 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +118F + 8 +SCHRAFFUR + 10 +12077.741569 + 20 +4260.176652 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1190 + 8 +SCHRAFFUR + 10 +12101.063847 + 20 +4282.191872 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1191 + 8 +SCHRAFFUR + 10 +12106.246621 + 20 +4319.747278 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1192 + 8 +SCHRAFFUR + 0 +POLYLINE + 5 +1193 + 8 +SCHRAFFUR + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +1194 + 8 +SCHRAFFUR + 10 +12099.768153 + 20 +4248.521513 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1195 + 8 +SCHRAFFUR + 10 +12099.768153 + 20 +4248.521513 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1196 + 8 +SCHRAFFUR + 10 +12104.492845 + 20 +4253.709163 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1197 + 8 +SCHRAFFUR + 10 +12108.169855 + 20 +4257.971078 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1198 + 8 +SCHRAFFUR + 10 +12111.087674 + 20 +4261.838418 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1199 + 8 +SCHRAFFUR + 10 +12113.534794 + 20 +4265.84234 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +119A + 8 +SCHRAFFUR + 10 +12115.799707 + 20 +4270.514002 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +119B + 8 +SCHRAFFUR + 10 +12118.170905 + 20 +4276.384562 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +119C + 8 +SCHRAFFUR + 10 +12120.93688 + 20 +4283.985179 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +119D + 8 +SCHRAFFUR + 10 +12124.386124 + 20 +4293.847012 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +119E + 8 +SCHRAFFUR + 10 +12114.020679 + 20 +4264.061699 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +119F + 8 +SCHRAFFUR + 10 +12124.386124 + 20 +4293.847012 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +11A0 + 8 +SCHRAFFUR + 0 +POLYLINE + 5 +11A1 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +161F + 8 +DRAHTANKER + 10 +10640.0 + 20 +4405.0 + 30 +0.0 + 0 +VERTEX + 5 +1620 + 8 +DRAHTANKER + 10 +10745.0 + 20 +4405.0 + 30 +0.0 + 0 +VERTEX + 5 +1621 + 8 +DRAHTANKER + 10 +10745.0 + 20 +4420.0 + 30 +0.0 + 0 +VERTEX + 5 +1622 + 8 +DRAHTANKER + 10 +10670.0 + 20 +4420.0 + 30 +0.0 + 0 +SEQEND + 5 +1623 + 8 +DRAHTANKER + 0 +POLYLINE + 5 +11A7 + 8 +DRAHTANKER + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +1624 + 8 +DRAHTANKER + 10 +10675.0 + 20 +4405.0 + 30 +0.0 + 0 +VERTEX + 5 +1625 + 8 +DRAHTANKER + 10 +10620.0 + 20 +4405.0 + 30 +0.0 + 0 +VERTEX + 5 +1626 + 8 +DRAHTANKER + 10 +10620.0 + 20 +4250.0 + 30 +0.0 + 0 +VERTEX + 5 +1627 + 8 +DRAHTANKER + 10 +10390.0 + 20 +4250.0 + 30 +0.0 + 0 +VERTEX + 5 +1628 + 8 +DRAHTANKER + 10 +10390.0 + 20 +4505.0 + 30 +0.0 + 0 +VERTEX + 5 +1629 + 8 +DRAHTANKER + 10 +10325.0 + 20 +4505.0 + 30 +0.0 + 0 +VERTEX + 5 +162A + 8 +DRAHTANKER + 10 +10325.0 + 20 +4525.0 + 30 +0.0 + 0 +VERTEX + 5 +162B + 8 +DRAHTANKER + 10 +10325.0 + 20 +4430.0 + 30 +0.0 + 0 +SEQEND + 5 +162C + 8 +DRAHTANKER + 0 +POLYLINE + 5 +11B1 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +162D + 8 +HOLZ + 10 +10380.0 + 20 +4495.0 + 30 +0.0 + 0 +VERTEX + 5 +162E + 8 +HOLZ + 10 +10342.5 + 20 +4495.0 + 30 +0.0 + 0 +VERTEX + 5 +162F + 8 +HOLZ + 10 +10342.5 + 20 +4195.0 + 30 +0.0 + 0 +VERTEX + 5 +1630 + 8 +HOLZ + 10 +10380.0 + 20 +4195.0 + 30 +0.0 + 0 +SEQEND + 5 +1631 + 8 +HOLZ + 0 +POLYLINE + 5 +11B7 + 8 +DACHZIEGEL + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1632 + 8 +DACHZIEGEL + 10 +11520.0 + 20 +4440.0 + 30 +0.0 + 0 +VERTEX + 5 +1633 + 8 +DACHZIEGEL + 10 +11500.0 + 20 +4420.0 + 30 +0.0 + 0 +VERTEX + 5 +1634 + 8 +DACHZIEGEL + 10 +11095.0 + 20 +4420.0 + 30 +0.0 + 0 +VERTEX + 5 +1635 + 8 +DACHZIEGEL + 10 +11070.0 + 20 +4435.0 + 30 +0.0 + 0 +VERTEX + 5 +1636 + 8 +DACHZIEGEL + 10 +11045.0 + 20 +4435.0 + 30 +0.0 + 0 +VERTEX + 5 +1637 + 8 +DACHZIEGEL + 10 +11040.0 + 20 +4420.0 + 30 +0.0 + 0 +VERTEX + 5 +1638 + 8 +DACHZIEGEL + 10 +11040.0 + 20 +4475.0 + 30 +0.0 + 0 +VERTEX + 5 +1639 + 8 +DACHZIEGEL + 10 +11060.0 + 20 +4460.0 + 30 +0.0 + 0 +VERTEX + 5 +163A + 8 +DACHZIEGEL + 10 +11080.0 + 20 +4475.0 + 30 +0.0 + 0 +VERTEX + 5 +163B + 8 +DACHZIEGEL + 10 +11105.0 + 20 +4445.0 + 30 +0.0 + 0 +VERTEX + 5 +163C + 8 +DACHZIEGEL + 10 +11455.0 + 20 +4445.0 + 30 +0.0 + 0 +VERTEX + 5 +163D + 8 +DACHZIEGEL + 10 +11515.0 + 20 +4535.0 + 30 +0.0 + 0 +VERTEX + 5 +163E + 8 +DACHZIEGEL + 10 +11560.0 + 20 +4535.0 + 30 +0.0 + 0 +VERTEX + 5 +163F + 8 +DACHZIEGEL + 10 +11580.0 + 20 +4495.0 + 30 +0.0 + 0 +VERTEX + 5 +1640 + 8 +DACHZIEGEL + 10 +11560.0 + 20 +4475.0 + 30 +0.0 + 0 +VERTEX + 5 +1641 + 8 +DACHZIEGEL + 10 +11535.0 + 20 +4500.0 + 30 +0.0 + 0 +VERTEX + 5 +1642 + 8 +DACHZIEGEL + 10 +11525.0 + 20 +4475.0 + 30 +0.0 + 0 +SEQEND + 5 +1643 + 8 +DACHZIEGEL + 0 +POLYLINE + 5 +11CA + 8 +DACHZIEGEL + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1644 + 8 +DACHZIEGEL + 10 +10790.0 + 20 +4450.0 + 30 +0.0 + 0 +VERTEX + 5 +1645 + 8 +DACHZIEGEL + 10 +10635.0 + 20 +4450.0 + 30 +0.0 + 0 +VERTEX + 5 +1646 + 8 +DACHZIEGEL + 10 +10575.0 + 20 +4540.0 + 30 +0.0 + 0 +VERTEX + 5 +1647 + 8 +DACHZIEGEL + 10 +10530.0 + 20 +4540.0 + 30 +0.0 + 0 +VERTEX + 5 +1648 + 8 +DACHZIEGEL + 10 +10510.0 + 20 +4500.0 + 30 +0.0 + 0 +VERTEX + 5 +1649 + 8 +DACHZIEGEL + 10 +10530.0 + 20 +4480.0 + 30 +0.0 + 0 +VERTEX + 5 +164A + 8 +DACHZIEGEL + 10 +10555.0 + 20 +4505.0 + 30 +0.0 + 0 +VERTEX + 5 +164B + 8 +DACHZIEGEL + 10 +10565.0 + 20 +4480.0 + 30 +0.0 + 0 +VERTEX + 5 +164C + 8 +DACHZIEGEL + 10 +10570.0 + 20 +4445.0 + 30 +0.0 + 0 +VERTEX + 5 +164D + 8 +DACHZIEGEL + 10 +10590.0 + 20 +4425.0 + 30 +0.0 + 0 +VERTEX + 5 +164E + 8 +DACHZIEGEL + 10 +10790.0 + 20 +4425.0 + 30 +0.0 + 0 +SEQEND + 5 +164F + 8 +DACHZIEGEL + 0 +POLYLINE + 5 +11D7 + 8 +DACHZIEGEL + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1650 + 8 +DACHZIEGEL + 10 +10780.0 + 20 +4450.0 + 30 +0.0 + 0 +VERTEX + 5 +1651 + 8 +DACHZIEGEL + 10 +10955.0 + 20 +4450.0 + 30 +0.0 + 0 +VERTEX + 5 +1652 + 8 +DACHZIEGEL + 10 +11015.0 + 20 +4540.0 + 30 +0.0 + 0 +VERTEX + 5 +1653 + 8 +DACHZIEGEL + 10 +11060.0 + 20 +4540.0 + 30 +0.0 + 0 +VERTEX + 5 +1654 + 8 +DACHZIEGEL + 10 +11080.0 + 20 +4500.0 + 30 +0.0 + 0 +VERTEX + 5 +1655 + 8 +DACHZIEGEL + 10 +11060.0 + 20 +4480.0 + 30 +0.0 + 0 +VERTEX + 5 +1656 + 8 +DACHZIEGEL + 10 +11035.0 + 20 +4505.0 + 30 +0.0 + 0 +VERTEX + 5 +1657 + 8 +DACHZIEGEL + 10 +11025.0 + 20 +4480.0 + 30 +0.0 + 0 +VERTEX + 5 +1658 + 8 +DACHZIEGEL + 10 +11020.0 + 20 +4445.0 + 30 +0.0 + 0 +VERTEX + 5 +1659 + 8 +DACHZIEGEL + 10 +11000.0 + 20 +4425.0 + 30 +0.0 + 0 +VERTEX + 5 +165A + 8 +DACHZIEGEL + 10 +10780.0 + 20 +4425.0 + 30 +0.0 + 0 +SEQEND + 5 +165B + 8 +DACHZIEGEL + 0 +POLYLINE + 5 +11E4 + 8 +DACHZIEGEL + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +165C + 8 +DACHZIEGEL + 10 +12020.0 + 20 +4440.0 + 30 +0.0 + 0 +VERTEX + 5 +165D + 8 +DACHZIEGEL + 10 +12000.0 + 20 +4420.0 + 30 +0.0 + 0 +VERTEX + 5 +165E + 8 +DACHZIEGEL + 10 +11595.0 + 20 +4420.0 + 30 +0.0 + 0 +VERTEX + 5 +165F + 8 +DACHZIEGEL + 10 +11570.0 + 20 +4435.0 + 30 +0.0 + 0 +VERTEX + 5 +1660 + 8 +DACHZIEGEL + 10 +11545.0 + 20 +4435.0 + 30 +0.0 + 0 +VERTEX + 5 +1661 + 8 +DACHZIEGEL + 10 +11540.0 + 20 +4420.0 + 30 +0.0 + 0 +VERTEX + 5 +1662 + 8 +DACHZIEGEL + 10 +11540.0 + 20 +4475.0 + 30 +0.0 + 0 +VERTEX + 5 +1663 + 8 +DACHZIEGEL + 10 +11560.0 + 20 +4460.0 + 30 +0.0 + 0 +VERTEX + 5 +1664 + 8 +DACHZIEGEL + 10 +11580.0 + 20 +4475.0 + 30 +0.0 + 0 +VERTEX + 5 +1665 + 8 +DACHZIEGEL + 10 +11605.0 + 20 +4445.0 + 30 +0.0 + 0 +VERTEX + 5 +1666 + 8 +DACHZIEGEL + 10 +11955.0 + 20 +4445.0 + 30 +0.0 + 0 +VERTEX + 5 +1667 + 8 +DACHZIEGEL + 10 +12015.0 + 20 +4535.0 + 30 +0.0 + 0 +VERTEX + 5 +1668 + 8 +DACHZIEGEL + 10 +12060.0 + 20 +4535.0 + 30 +0.0 + 0 +VERTEX + 5 +1669 + 8 +DACHZIEGEL + 10 +12080.0 + 20 +4495.0 + 30 +0.0 + 0 +VERTEX + 5 +166A + 8 +DACHZIEGEL + 10 +12060.0 + 20 +4475.0 + 30 +0.0 + 0 +VERTEX + 5 +166B + 8 +DACHZIEGEL + 10 +12035.0 + 20 +4500.0 + 30 +0.0 + 0 +VERTEX + 5 +166C + 8 +DACHZIEGEL + 10 +12025.0 + 20 +4475.0 + 30 +0.0 + 0 +SEQEND + 5 +166D + 8 +DACHZIEGEL + 0 +POLYLINE + 5 +11F7 + 8 +DACHZIEGEL + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +166E + 8 +DACHZIEGEL + 10 +13020.0 + 20 +4440.0 + 30 +0.0 + 0 +VERTEX + 5 +166F + 8 +DACHZIEGEL + 10 +13000.0 + 20 +4420.0 + 30 +0.0 + 0 +VERTEX + 5 +1670 + 8 +DACHZIEGEL + 10 +12595.0 + 20 +4420.0 + 30 +0.0 + 0 +VERTEX + 5 +1671 + 8 +DACHZIEGEL + 10 +12570.0 + 20 +4435.0 + 30 +0.0 + 0 +VERTEX + 5 +1672 + 8 +DACHZIEGEL + 10 +12545.0 + 20 +4435.0 + 30 +0.0 + 0 +VERTEX + 5 +1673 + 8 +DACHZIEGEL + 10 +12540.0 + 20 +4420.0 + 30 +0.0 + 0 +VERTEX + 5 +1674 + 8 +DACHZIEGEL + 10 +12540.0 + 20 +4475.0 + 30 +0.0 + 0 +VERTEX + 5 +1675 + 8 +DACHZIEGEL + 10 +12560.0 + 20 +4460.0 + 30 +0.0 + 0 +VERTEX + 5 +1676 + 8 +DACHZIEGEL + 10 +12580.0 + 20 +4475.0 + 30 +0.0 + 0 +VERTEX + 5 +1677 + 8 +DACHZIEGEL + 10 +12605.0 + 20 +4445.0 + 30 +0.0 + 0 +VERTEX + 5 +1678 + 8 +DACHZIEGEL + 10 +12955.0 + 20 +4445.0 + 30 +0.0 + 0 +VERTEX + 5 +1679 + 8 +DACHZIEGEL + 10 +13015.0 + 20 +4535.0 + 30 +0.0 + 0 +VERTEX + 5 +167A + 8 +DACHZIEGEL + 10 +13060.0 + 20 +4535.0 + 30 +0.0 + 0 +VERTEX + 5 +167B + 8 +DACHZIEGEL + 10 +13080.0 + 20 +4495.0 + 30 +0.0 + 0 +VERTEX + 5 +167C + 8 +DACHZIEGEL + 10 +13060.0 + 20 +4475.0 + 30 +0.0 + 0 +VERTEX + 5 +167D + 8 +DACHZIEGEL + 10 +13035.0 + 20 +4500.0 + 30 +0.0 + 0 +VERTEX + 5 +167E + 8 +DACHZIEGEL + 10 +13025.0 + 20 +4475.0 + 30 +0.0 + 0 +SEQEND + 5 +167F + 8 +DACHZIEGEL + 0 +POLYLINE + 5 +120A + 8 +DACHZIEGEL + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1680 + 8 +DACHZIEGEL + 10 +12520.0 + 20 +4440.0 + 30 +0.0 + 0 +VERTEX + 5 +1681 + 8 +DACHZIEGEL + 10 +12500.0 + 20 +4420.0 + 30 +0.0 + 0 +VERTEX + 5 +1682 + 8 +DACHZIEGEL + 10 +12095.0 + 20 +4420.0 + 30 +0.0 + 0 +VERTEX + 5 +1683 + 8 +DACHZIEGEL + 10 +12070.0 + 20 +4435.0 + 30 +0.0 + 0 +VERTEX + 5 +1684 + 8 +DACHZIEGEL + 10 +12045.0 + 20 +4435.0 + 30 +0.0 + 0 +VERTEX + 5 +1685 + 8 +DACHZIEGEL + 10 +12040.0 + 20 +4420.0 + 30 +0.0 + 0 +VERTEX + 5 +1686 + 8 +DACHZIEGEL + 10 +12040.0 + 20 +4475.0 + 30 +0.0 + 0 +VERTEX + 5 +1687 + 8 +DACHZIEGEL + 10 +12060.0 + 20 +4460.0 + 30 +0.0 + 0 +VERTEX + 5 +1688 + 8 +DACHZIEGEL + 10 +12080.0 + 20 +4475.0 + 30 +0.0 + 0 +VERTEX + 5 +1689 + 8 +DACHZIEGEL + 10 +12105.0 + 20 +4445.0 + 30 +0.0 + 0 +VERTEX + 5 +168A + 8 +DACHZIEGEL + 10 +12455.0 + 20 +4445.0 + 30 +0.0 + 0 +VERTEX + 5 +168B + 8 +DACHZIEGEL + 10 +12515.0 + 20 +4535.0 + 30 +0.0 + 0 +VERTEX + 5 +168C + 8 +DACHZIEGEL + 10 +12560.0 + 20 +4535.0 + 30 +0.0 + 0 +VERTEX + 5 +168D + 8 +DACHZIEGEL + 10 +12580.0 + 20 +4495.0 + 30 +0.0 + 0 +VERTEX + 5 +168E + 8 +DACHZIEGEL + 10 +12560.0 + 20 +4475.0 + 30 +0.0 + 0 +VERTEX + 5 +168F + 8 +DACHZIEGEL + 10 +12535.0 + 20 +4500.0 + 30 +0.0 + 0 +VERTEX + 5 +1690 + 8 +DACHZIEGEL + 10 +12525.0 + 20 +4475.0 + 30 +0.0 + 0 +SEQEND + 5 +1691 + 8 +DACHZIEGEL + 0 +POLYLINE + 5 +121D + 8 +DACHZIEGEL + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1692 + 8 +DACHZIEGEL + 10 +14020.0 + 20 +4440.0 + 30 +0.0 + 0 +VERTEX + 5 +1693 + 8 +DACHZIEGEL + 10 +14000.0 + 20 +4420.0 + 30 +0.0 + 0 +VERTEX + 5 +1694 + 8 +DACHZIEGEL + 10 +13595.0 + 20 +4420.0 + 30 +0.0 + 0 +VERTEX + 5 +1695 + 8 +DACHZIEGEL + 10 +13570.0 + 20 +4435.0 + 30 +0.0 + 0 +VERTEX + 5 +1696 + 8 +DACHZIEGEL + 10 +13545.0 + 20 +4435.0 + 30 +0.0 + 0 +VERTEX + 5 +1697 + 8 +DACHZIEGEL + 10 +13540.0 + 20 +4420.0 + 30 +0.0 + 0 +VERTEX + 5 +1698 + 8 +DACHZIEGEL + 10 +13540.0 + 20 +4475.0 + 30 +0.0 + 0 +VERTEX + 5 +1699 + 8 +DACHZIEGEL + 10 +13560.0 + 20 +4460.0 + 30 +0.0 + 0 +VERTEX + 5 +169A + 8 +DACHZIEGEL + 10 +13580.0 + 20 +4475.0 + 30 +0.0 + 0 +VERTEX + 5 +169B + 8 +DACHZIEGEL + 10 +13605.0 + 20 +4445.0 + 30 +0.0 + 0 +VERTEX + 5 +169C + 8 +DACHZIEGEL + 10 +13955.0 + 20 +4445.0 + 30 +0.0 + 0 +VERTEX + 5 +169D + 8 +DACHZIEGEL + 10 +14015.0 + 20 +4535.0 + 30 +0.0 + 0 +VERTEX + 5 +169E + 8 +DACHZIEGEL + 10 +14060.0 + 20 +4535.0 + 30 +0.0 + 0 +VERTEX + 5 +169F + 8 +DACHZIEGEL + 10 +14080.0 + 20 +4495.0 + 30 +0.0 + 0 +VERTEX + 5 +16A0 + 8 +DACHZIEGEL + 10 +14060.0 + 20 +4475.0 + 30 +0.0 + 0 +VERTEX + 5 +16A1 + 8 +DACHZIEGEL + 10 +14035.0 + 20 +4500.0 + 30 +0.0 + 0 +VERTEX + 5 +16A2 + 8 +DACHZIEGEL + 10 +14025.0 + 20 +4475.0 + 30 +0.0 + 0 +SEQEND + 5 +16A3 + 8 +DACHZIEGEL + 0 +POLYLINE + 5 +1230 + 8 +DACHZIEGEL + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +16A4 + 8 +DACHZIEGEL + 10 +13520.0 + 20 +4440.0 + 30 +0.0 + 0 +VERTEX + 5 +16A5 + 8 +DACHZIEGEL + 10 +13500.0 + 20 +4420.0 + 30 +0.0 + 0 +VERTEX + 5 +16A6 + 8 +DACHZIEGEL + 10 +13095.0 + 20 +4420.0 + 30 +0.0 + 0 +VERTEX + 5 +16A7 + 8 +DACHZIEGEL + 10 +13070.0 + 20 +4435.0 + 30 +0.0 + 0 +VERTEX + 5 +16A8 + 8 +DACHZIEGEL + 10 +13045.0 + 20 +4435.0 + 30 +0.0 + 0 +VERTEX + 5 +16A9 + 8 +DACHZIEGEL + 10 +13040.0 + 20 +4420.0 + 30 +0.0 + 0 +VERTEX + 5 +16AA + 8 +DACHZIEGEL + 10 +13040.0 + 20 +4475.0 + 30 +0.0 + 0 +VERTEX + 5 +16AB + 8 +DACHZIEGEL + 10 +13060.0 + 20 +4460.0 + 30 +0.0 + 0 +VERTEX + 5 +16AC + 8 +DACHZIEGEL + 10 +13080.0 + 20 +4475.0 + 30 +0.0 + 0 +VERTEX + 5 +16AD + 8 +DACHZIEGEL + 10 +13105.0 + 20 +4445.0 + 30 +0.0 + 0 +VERTEX + 5 +16AE + 8 +DACHZIEGEL + 10 +13455.0 + 20 +4445.0 + 30 +0.0 + 0 +VERTEX + 5 +16AF + 8 +DACHZIEGEL + 10 +13515.0 + 20 +4535.0 + 30 +0.0 + 0 +VERTEX + 5 +16B0 + 8 +DACHZIEGEL + 10 +13560.0 + 20 +4535.0 + 30 +0.0 + 0 +VERTEX + 5 +16B1 + 8 +DACHZIEGEL + 10 +13580.0 + 20 +4495.0 + 30 +0.0 + 0 +VERTEX + 5 +16B2 + 8 +DACHZIEGEL + 10 +13560.0 + 20 +4475.0 + 30 +0.0 + 0 +VERTEX + 5 +16B3 + 8 +DACHZIEGEL + 10 +13535.0 + 20 +4500.0 + 30 +0.0 + 0 +VERTEX + 5 +16B4 + 8 +DACHZIEGEL + 10 +13525.0 + 20 +4475.0 + 30 +0.0 + 0 +SEQEND + 5 +16B5 + 8 +DACHZIEGEL + 0 +POLYLINE + 5 +1243 + 8 +DACHZIEGEL + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +16B6 + 8 +DACHZIEGEL + 10 +15020.0 + 20 +4440.0 + 30 +0.0 + 0 +VERTEX + 5 +16B7 + 8 +DACHZIEGEL + 10 +15000.0 + 20 +4420.0 + 30 +0.0 + 0 +VERTEX + 5 +16B8 + 8 +DACHZIEGEL + 10 +14595.0 + 20 +4420.0 + 30 +0.0 + 0 +VERTEX + 5 +16B9 + 8 +DACHZIEGEL + 10 +14570.0 + 20 +4435.0 + 30 +0.0 + 0 +VERTEX + 5 +16BA + 8 +DACHZIEGEL + 10 +14545.0 + 20 +4435.0 + 30 +0.0 + 0 +VERTEX + 5 +16BB + 8 +DACHZIEGEL + 10 +14540.0 + 20 +4420.0 + 30 +0.0 + 0 +VERTEX + 5 +16BC + 8 +DACHZIEGEL + 10 +14540.0 + 20 +4475.0 + 30 +0.0 + 0 +VERTEX + 5 +16BD + 8 +DACHZIEGEL + 10 +14560.0 + 20 +4460.0 + 30 +0.0 + 0 +VERTEX + 5 +16BE + 8 +DACHZIEGEL + 10 +14580.0 + 20 +4475.0 + 30 +0.0 + 0 +VERTEX + 5 +16BF + 8 +DACHZIEGEL + 10 +14605.0 + 20 +4445.0 + 30 +0.0 + 0 +VERTEX + 5 +16C0 + 8 +DACHZIEGEL + 10 +14955.0 + 20 +4445.0 + 30 +0.0 + 0 +VERTEX + 5 +16C1 + 8 +DACHZIEGEL + 10 +15015.0 + 20 +4535.0 + 30 +0.0 + 0 +VERTEX + 5 +16C2 + 8 +DACHZIEGEL + 10 +15060.0 + 20 +4535.0 + 30 +0.0 + 0 +VERTEX + 5 +16C3 + 8 +DACHZIEGEL + 10 +15080.0 + 20 +4495.0 + 30 +0.0 + 0 +VERTEX + 5 +16C4 + 8 +DACHZIEGEL + 10 +15060.0 + 20 +4475.0 + 30 +0.0 + 0 +VERTEX + 5 +16C5 + 8 +DACHZIEGEL + 10 +15035.0 + 20 +4500.0 + 30 +0.0 + 0 +VERTEX + 5 +16C6 + 8 +DACHZIEGEL + 10 +15025.0 + 20 +4475.0 + 30 +0.0 + 0 +SEQEND + 5 +16C7 + 8 +DACHZIEGEL + 0 +POLYLINE + 5 +1256 + 8 +DACHZIEGEL + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +16C8 + 8 +DACHZIEGEL + 10 +14520.0 + 20 +4440.0 + 30 +0.0 + 0 +VERTEX + 5 +16C9 + 8 +DACHZIEGEL + 10 +14500.0 + 20 +4420.0 + 30 +0.0 + 0 +VERTEX + 5 +16CA + 8 +DACHZIEGEL + 10 +14095.0 + 20 +4420.0 + 30 +0.0 + 0 +VERTEX + 5 +16CB + 8 +DACHZIEGEL + 10 +14070.0 + 20 +4435.0 + 30 +0.0 + 0 +VERTEX + 5 +16CC + 8 +DACHZIEGEL + 10 +14045.0 + 20 +4435.0 + 30 +0.0 + 0 +VERTEX + 5 +16CD + 8 +DACHZIEGEL + 10 +14040.0 + 20 +4420.0 + 30 +0.0 + 0 +VERTEX + 5 +16CE + 8 +DACHZIEGEL + 10 +14040.0 + 20 +4475.0 + 30 +0.0 + 0 +VERTEX + 5 +16CF + 8 +DACHZIEGEL + 10 +14060.0 + 20 +4460.0 + 30 +0.0 + 0 +VERTEX + 5 +16D0 + 8 +DACHZIEGEL + 10 +14080.0 + 20 +4475.0 + 30 +0.0 + 0 +VERTEX + 5 +16D1 + 8 +DACHZIEGEL + 10 +14105.0 + 20 +4445.0 + 30 +0.0 + 0 +VERTEX + 5 +16D2 + 8 +DACHZIEGEL + 10 +14455.0 + 20 +4445.0 + 30 +0.0 + 0 +VERTEX + 5 +16D3 + 8 +DACHZIEGEL + 10 +14515.0 + 20 +4535.0 + 30 +0.0 + 0 +VERTEX + 5 +16D4 + 8 +DACHZIEGEL + 10 +14560.0 + 20 +4535.0 + 30 +0.0 + 0 +VERTEX + 5 +16D5 + 8 +DACHZIEGEL + 10 +14580.0 + 20 +4495.0 + 30 +0.0 + 0 +VERTEX + 5 +16D6 + 8 +DACHZIEGEL + 10 +14560.0 + 20 +4475.0 + 30 +0.0 + 0 +VERTEX + 5 +16D7 + 8 +DACHZIEGEL + 10 +14535.0 + 20 +4500.0 + 30 +0.0 + 0 +VERTEX + 5 +16D8 + 8 +DACHZIEGEL + 10 +14525.0 + 20 +4475.0 + 30 +0.0 + 0 +SEQEND + 5 +16D9 + 8 +DACHZIEGEL + 0 +POLYLINE + 5 +1269 + 8 +DACHZIEGEL + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 1 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +16DA + 8 +DACHZIEGEL + 10 +15520.0 + 20 +4440.0 + 30 +0.0 + 0 +VERTEX + 5 +16DB + 8 +DACHZIEGEL + 10 +15500.0 + 20 +4420.0 + 30 +0.0 + 0 +VERTEX + 5 +16DC + 8 +DACHZIEGEL + 10 +15095.0 + 20 +4420.0 + 30 +0.0 + 0 +VERTEX + 5 +16DD + 8 +DACHZIEGEL + 10 +15070.0 + 20 +4435.0 + 30 +0.0 + 0 +VERTEX + 5 +16DE + 8 +DACHZIEGEL + 10 +15045.0 + 20 +4435.0 + 30 +0.0 + 0 +VERTEX + 5 +16DF + 8 +DACHZIEGEL + 10 +15040.0 + 20 +4420.0 + 30 +0.0 + 0 +VERTEX + 5 +16E0 + 8 +DACHZIEGEL + 10 +15040.0 + 20 +4475.0 + 30 +0.0 + 0 +VERTEX + 5 +16E1 + 8 +DACHZIEGEL + 10 +15060.0 + 20 +4460.0 + 30 +0.0 + 0 +VERTEX + 5 +16E2 + 8 +DACHZIEGEL + 10 +15080.0 + 20 +4475.0 + 30 +0.0 + 0 +VERTEX + 5 +16E3 + 8 +DACHZIEGEL + 10 +15105.0 + 20 +4445.0 + 30 +0.0 + 0 +VERTEX + 5 +16E4 + 8 +DACHZIEGEL + 10 +15455.0 + 20 +4445.0 + 30 +0.0 + 0 +VERTEX + 5 +16E5 + 8 +DACHZIEGEL + 10 +15515.0 + 20 +4535.0 + 30 +0.0 + 0 +VERTEX + 5 +16E6 + 8 +DACHZIEGEL + 10 +15560.0 + 20 +4535.0 + 30 +0.0 + 0 +VERTEX + 5 +16E7 + 8 +DACHZIEGEL + 10 +15580.0 + 20 +4495.0 + 30 +0.0 + 0 +VERTEX + 5 +16E8 + 8 +DACHZIEGEL + 10 +15560.0 + 20 +4475.0 + 30 +0.0 + 0 +VERTEX + 5 +16E9 + 8 +DACHZIEGEL + 10 +15535.0 + 20 +4500.0 + 30 +0.0 + 0 +VERTEX + 5 +16EA + 8 +DACHZIEGEL + 10 +15525.0 + 20 +4475.0 + 30 +0.0 + 0 +SEQEND + 5 +16EB + 8 +DACHZIEGEL + 0 +POLYLINE + 5 +127C + 8 +SCHNITTKANTEN + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +12.5 + 41 +12.5 + 0 +VERTEX + 5 +16EC + 8 +SCHNITTKANTEN + 10 +15880.0 + 20 +4780.0 + 30 +0.0 + 0 +VERTEX + 5 +16ED + 8 +SCHNITTKANTEN + 10 +15880.0 + 20 +3410.0 + 30 +0.0 + 0 +SEQEND + 5 +16EE + 8 +SCHNITTKANTEN + 0 +INSERT + 5 +1280 + 8 +SCHRAFFUR + 2 +*X26 + 10 +7035.0 + 20 +-430.0 + 30 +0.0 +1001 +ACAD +1000 +HATCH +1002 +{ +1070 + 16 +1000 +HONEY,I +1040 +450.0 +1040 +0.0 +1002 +} + 0 +POLYLINE + 5 +1281 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +16EF + 8 +HOLZ + 10 +11979.307123 + 20 +3735.0 + 30 +0.0 + 0 +VERTEX + 5 +16F0 + 8 +HOLZ + 10 +11979.307123 + 20 +3685.0 + 30 +0.0 + 0 +VERTEX + 5 +16F1 + 8 +HOLZ + 10 +15880.0 + 20 +3685.0 + 30 +0.0 + 0 +SEQEND + 5 +16F2 + 8 +HOLZ + 0 +POLYLINE + 5 +1286 + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +16F3 + 8 +HOLZ + 10 +15880.0 + 20 +3735.0 + 30 +0.0 + 0 +VERTEX + 5 +16F4 + 8 +HOLZ + 10 +11979.307123 + 20 +3735.0 + 30 +0.0 + 0 +SEQEND + 5 +16F5 + 8 +HOLZ + 0 +POLYLINE + 5 +128A + 8 +PE-FOLIE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +25.0 + 41 +25.0 + 0 +VERTEX + 5 +16F6 + 8 +PE-FOLIE + 10 +11985.0 + 20 +3750.0 + 30 +0.0 + 0 +VERTEX + 5 +16F7 + 8 +PE-FOLIE + 10 +15880.0 + 20 +3750.0 + 30 +0.0 + 0 +SEQEND + 5 +16F8 + 8 +PE-FOLIE + 0 +POLYLINE + 5 +128E + 8 +DAEMMUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +16F9 + 8 +DAEMMUNG + 10 +12161.85938 + 20 +3762.860132 + 30 +0.0 + 0 +VERTEX + 5 +16FA + 8 +DAEMMUNG + 10 +12161.85938 + 20 +4062.860132 + 30 +0.0 + 0 +VERTEX + 5 +16FB + 8 +DAEMMUNG + 10 +15880.0 + 20 +4062.860132 + 30 +0.0 + 0 +SEQEND + 5 +16FC + 8 +DAEMMUNG + 0 +POLYLINE + 5 +1293 + 8 +DAEMMUNG + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +16FD + 8 +DAEMMUNG + 10 +15880.0 + 20 +3762.860132 + 30 +0.0 + 0 +VERTEX + 5 +16FE + 8 +DAEMMUNG + 10 +12161.85938 + 20 +3762.860132 + 30 +0.0 + 0 +SEQEND + 5 +16FF + 8 +DAEMMUNG + 0 +POLYLINE + 5 +1297 + 8 +PE-FOLIE + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +25.0 + 41 +25.0 + 0 +VERTEX + 5 +1700 + 8 +PE-FOLIE + 10 +10395.0 + 20 +4230.0 + 30 +0.0 + 0 +VERTEX + 5 +1701 + 8 +PE-FOLIE + 10 +15880.0 + 20 +4230.0 + 30 +0.0 + 0 +SEQEND + 5 +1702 + 8 +PE-FOLIE + 0 +POLYLINE + 5 +129B + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1703 + 8 +HOLZ + 10 +10630.0 + 20 +4320.0 + 30 +0.0 + 0 +VERTEX + 5 +1704 + 8 +HOLZ + 10 +15880.0 + 20 +4320.0 + 30 +0.0 + 0 +SEQEND + 5 +1705 + 8 +HOLZ + 0 +POLYLINE + 5 +129F + 8 +HOLZ + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +1706 + 8 +HOLZ + 10 +15880.0 + 20 +4395.0 + 30 +0.0 + 0 +VERTEX + 5 +1707 + 8 +HOLZ + 10 +10630.0 + 20 +4395.0 + 30 +0.0 + 0 +VERTEX + 5 +1708 + 8 +HOLZ + 10 +10630.0 + 20 +4320.0 + 30 +0.0 + 0 +SEQEND + 5 +1709 + 8 +HOLZ + 0 +POLYLINE + 5 +12A4 + 8 +DACHZIEGEL + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +8.75 + 41 +8.75 + 0 +VERTEX + 5 +170A + 8 +DACHZIEGEL + 10 +15880.0 + 20 +4420.0 + 30 +0.0 + 0 +VERTEX + 5 +170B + 8 +DACHZIEGEL + 10 +15595.0 + 20 +4420.0 + 30 +0.0 + 0 +VERTEX + 5 +170C + 8 +DACHZIEGEL + 10 +15570.0 + 20 +4435.0 + 30 +0.0 + 0 +VERTEX + 5 +170D + 8 +DACHZIEGEL + 10 +15545.0 + 20 +4435.0 + 30 +0.0 + 0 +VERTEX + 5 +170E + 8 +DACHZIEGEL + 10 +15540.0 + 20 +4420.0 + 30 +0.0 + 0 +VERTEX + 5 +170F + 8 +DACHZIEGEL + 10 +15540.0 + 20 +4475.0 + 30 +0.0 + 0 +VERTEX + 5 +1710 + 8 +DACHZIEGEL + 10 +15560.0 + 20 +4460.0 + 30 +0.0 + 0 +VERTEX + 5 +1711 + 8 +DACHZIEGEL + 10 +15580.0 + 20 +4475.0 + 30 +0.0 + 0 +VERTEX + 5 +1712 + 8 +DACHZIEGEL + 10 +15605.0 + 20 +4445.0 + 30 +0.0 + 0 +VERTEX + 5 +1713 + 8 +DACHZIEGEL + 10 +15880.0 + 20 +4445.0 + 30 +0.0 + 0 +SEQEND + 5 +1714 + 8 +DACHZIEGEL + 0 +LINE + 5 +12B0 + 8 +0 + 62 + 0 + 10 +11992.0 + 20 +3700.0 + 30 +0.0 + 11 +12592.0 + 21 +3700.0 + 31 +0.0 + 0 +LINE + 5 +12B1 + 8 +0 + 62 + 0 + 10 +12672.0 + 20 +3700.0 + 30 +0.0 + 11 +12872.0 + 21 +3700.0 + 31 +0.0 + 0 +LINE + 5 +12B2 + 8 +0 + 62 + 0 + 10 +12912.0 + 20 +3700.0 + 30 +0.0 + 11 +13512.0 + 21 +3700.0 + 31 +0.0 + 0 +LINE + 5 +12B3 + 8 +0 + 62 + 0 + 10 +13592.0 + 20 +3700.0 + 30 +0.0 + 11 +13792.0 + 21 +3700.0 + 31 +0.0 + 0 +LINE + 5 +12B4 + 8 +0 + 62 + 0 + 10 +13832.0 + 20 +3700.0 + 30 +0.0 + 11 +14432.0 + 21 +3700.0 + 31 +0.0 + 0 +LINE + 5 +12B5 + 8 +0 + 62 + 0 + 10 +14512.0 + 20 +3700.0 + 30 +0.0 + 11 +14712.0 + 21 +3700.0 + 31 +0.0 + 0 +LINE + 5 +12B6 + 8 +0 + 62 + 0 + 10 +14752.0 + 20 +3700.0 + 30 +0.0 + 11 +15352.0 + 21 +3700.0 + 31 +0.0 + 0 +LINE + 5 +12B7 + 8 +0 + 62 + 0 + 10 +15432.0 + 20 +3700.0 + 30 +0.0 + 11 +15632.0 + 21 +3700.0 + 31 +0.0 + 0 +LINE + 5 +12B8 + 8 +0 + 62 + 0 + 10 +15672.0 + 20 +3700.0 + 30 +0.0 + 11 +15880.0 + 21 +3700.0 + 31 +0.0 + 0 +LINE + 5 +12B9 + 8 +0 + 62 + 0 + 10 +12028.0 + 20 +3714.4 + 30 +0.0 + 11 +12188.0 + 21 +3714.4 + 31 +0.0 + 0 +LINE + 5 +12BA + 8 +0 + 62 + 0 + 10 +12228.0 + 20 +3714.4 + 30 +0.0 + 11 +12548.0 + 21 +3714.4 + 31 +0.0 + 0 +LINE + 5 +12BB + 8 +0 + 62 + 0 + 10 +12604.0 + 20 +3714.4 + 30 +0.0 + 11 +12764.0 + 21 +3714.4 + 31 +0.0 + 0 +LINE + 5 +12BC + 8 +0 + 62 + 0 + 10 +12804.0 + 20 +3714.4 + 30 +0.0 + 11 +13124.0 + 21 +3714.4 + 31 +0.0 + 0 +LINE + 5 +12BD + 8 +0 + 62 + 0 + 10 +13180.0 + 20 +3714.4 + 30 +0.0 + 11 +13340.0 + 21 +3714.4 + 31 +0.0 + 0 +LINE + 5 +12BE + 8 +0 + 62 + 0 + 10 +13380.0 + 20 +3714.4 + 30 +0.0 + 11 +13700.0 + 21 +3714.4 + 31 +0.0 + 0 +LINE + 5 +12BF + 8 +0 + 62 + 0 + 10 +13756.0 + 20 +3714.4 + 30 +0.0 + 11 +13916.0 + 21 +3714.4 + 31 +0.0 + 0 +LINE + 5 +12C0 + 8 +0 + 62 + 0 + 10 +13956.0 + 20 +3714.4 + 30 +0.0 + 11 +14276.0 + 21 +3714.4 + 31 +0.0 + 0 +LINE + 5 +12C1 + 8 +0 + 62 + 0 + 10 +14332.0 + 20 +3714.4 + 30 +0.0 + 11 +14492.0 + 21 +3714.4 + 31 +0.0 + 0 +LINE + 5 +12C2 + 8 +0 + 62 + 0 + 10 +14532.0 + 20 +3714.4 + 30 +0.0 + 11 +14852.0 + 21 +3714.4 + 31 +0.0 + 0 +LINE + 5 +12C3 + 8 +0 + 62 + 0 + 10 +14908.0 + 20 +3714.4 + 30 +0.0 + 11 +15068.0 + 21 +3714.4 + 31 +0.0 + 0 +LINE + 5 +12C4 + 8 +0 + 62 + 0 + 10 +15108.0 + 20 +3714.4 + 30 +0.0 + 11 +15428.0 + 21 +3714.4 + 31 +0.0 + 0 +LINE + 5 +12C5 + 8 +0 + 62 + 0 + 10 +15484.0 + 20 +3714.4 + 30 +0.0 + 11 +15644.0 + 21 +3714.4 + 31 +0.0 + 0 +LINE + 5 +12C6 + 8 +0 + 62 + 0 + 10 +15684.0 + 20 +3714.4 + 30 +0.0 + 11 +15880.0 + 21 +3714.4 + 31 +0.0 + 0 +LINE + 5 +12C7 + 8 +0 + 62 + 0 + 10 +11979.35938 + 20 +3687.6 + 30 +0.0 + 11 +11980.0 + 21 +3687.6 + 31 +0.0 + 0 +LINE + 5 +12C8 + 8 +0 + 62 + 0 + 10 +12020.0 + 20 +3687.6 + 30 +0.0 + 11 +12340.0 + 21 +3687.6 + 31 +0.0 + 0 +LINE + 5 +12C9 + 8 +0 + 62 + 0 + 10 +12396.0 + 20 +3687.6 + 30 +0.0 + 11 +12556.0 + 21 +3687.6 + 31 +0.0 + 0 +LINE + 5 +12CA + 8 +0 + 62 + 0 + 10 +12596.0 + 20 +3687.6 + 30 +0.0 + 11 +12916.0 + 21 +3687.6 + 31 +0.0 + 0 +LINE + 5 +12CB + 8 +0 + 62 + 0 + 10 +12972.0 + 20 +3687.6 + 30 +0.0 + 11 +13132.0 + 21 +3687.6 + 31 +0.0 + 0 +LINE + 5 +12CC + 8 +0 + 62 + 0 + 10 +13172.0 + 20 +3687.6 + 30 +0.0 + 11 +13492.0 + 21 +3687.6 + 31 +0.0 + 0 +LINE + 5 +12CD + 8 +0 + 62 + 0 + 10 +13548.0 + 20 +3687.6 + 30 +0.0 + 11 +13708.0 + 21 +3687.6 + 31 +0.0 + 0 +LINE + 5 +12CE + 8 +0 + 62 + 0 + 10 +13748.0 + 20 +3687.6 + 30 +0.0 + 11 +14068.0 + 21 +3687.6 + 31 +0.0 + 0 +LINE + 5 +12CF + 8 +0 + 62 + 0 + 10 +14124.0 + 20 +3687.6 + 30 +0.0 + 11 +14284.0 + 21 +3687.6 + 31 +0.0 + 0 +LINE + 5 +12D0 + 8 +0 + 62 + 0 + 10 +14324.0 + 20 +3687.6 + 30 +0.0 + 11 +14644.0 + 21 +3687.6 + 31 +0.0 + 0 +LINE + 5 +12D1 + 8 +0 + 62 + 0 + 10 +14700.0 + 20 +3687.6 + 30 +0.0 + 11 +14860.0 + 21 +3687.6 + 31 +0.0 + 0 +LINE + 5 +12D2 + 8 +0 + 62 + 0 + 10 +14900.0 + 20 +3687.6 + 30 +0.0 + 11 +15220.0 + 21 +3687.6 + 31 +0.0 + 0 +LINE + 5 +12D3 + 8 +0 + 62 + 0 + 10 +15276.0 + 20 +3687.6 + 30 +0.0 + 11 +15436.0 + 21 +3687.6 + 31 +0.0 + 0 +LINE + 5 +12D4 + 8 +0 + 62 + 0 + 10 +15476.0 + 20 +3687.6 + 30 +0.0 + 11 +15796.0 + 21 +3687.6 + 31 +0.0 + 0 +LINE + 5 +12D5 + 8 +0 + 62 + 0 + 10 +15852.0 + 20 +3687.6 + 30 +0.0 + 11 +15880.0 + 21 +3687.6 + 31 +0.0 + 0 +DIMENSION + 5 +12D6 + 8 +BEMASSUNG + 2 +*D30 + 10 +16435.0 + 20 +4060.0 + 30 +0.0 + 11 +16347.5 + 21 +3910.0 + 31 +0.0 + 12 +7035.0 + 22 +-430.0 + 32 +0.0 + 1 +12 + 13 +15875.0 + 23 +3760.0 + 33 +0.0 + 14 +15875.0 + 24 +4060.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +12D7 + 8 +BEMASSUNG + 2 +*D35 + 10 +17038.017251 + 20 +3745.0 + 30 +0.0 + 11 +16950.517251 + 21 +3635.0 + 31 +0.0 + 12 +7035.0 + 22 +-430.0 + 32 +0.0 + 70 + 128 + 1 +2 + 13 +15863.017251 + 23 +3685.0 + 33 +0.0 + 14 +15863.017251 + 24 +3745.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +12D8 + 8 +BEMASSUNG + 2 +*D37 + 10 +17038.0 + 20 +4230.0 + 30 +0.0 + 11 +16950.5 + 21 +3987.5 + 31 +0.0 + 12 +7035.0 + 22 +-430.0 + 32 +0.0 + 1 +18 + 13 +15860.0 + 23 +3745.0 + 33 +0.0 + 14 +15870.0 + 24 +4230.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +12D9 + 8 +BEMASSUNG + 2 +*D33 + 10 +17038.0 + 20 +4320.0 + 30 +0.0 + 11 +16950.5 + 21 +4275.0 + 31 +0.0 + 12 +7035.0 + 22 +-430.0 + 32 +0.0 + 1 +3 + 13 +15870.0 + 23 +4230.0 + 33 +0.0 + 14 +15865.0 + 24 +4320.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +12DA + 8 +BEMASSUNG + 2 +*D34 + 10 +17038.0 + 20 +4395.0 + 30 +0.0 + 11 +16950.5 + 21 +4357.5 + 31 +0.0 + 12 +7035.0 + 22 +-430.0 + 32 +0.0 + 1 +3 + 13 +15865.0 + 23 +4320.0 + 33 +0.0 + 14 +15855.0 + 24 +4395.0 + 34 +0.0 + 50 +90.0 + 0 +DIMENSION + 5 +12DB + 8 +BEMASSUNG + 2 +*D39 + 10 +10343.180412 + 20 +3936.423158 + 30 +0.0 + 11 +10275.0 + 21 +4023.923158 + 31 +0.0 + 12 +7035.0 + 22 +-525.0 + 32 +0.0 + 70 + 128 + 1 +1 + 13 +10392.72129 + 23 +3971.083823 + 33 +0.0 + 14 +10343.180412 + 24 +3971.083823 + 34 +0.0 + 0 +TEXT + 5 +12DC + 8 +BEMASSUNG + 10 +10290.0 + 20 +4040.0 + 30 +0.0 + 40 +62.5 + 1 +5 + 0 +TEXT + 5 +12DD + 8 +BEMASSUNG + 10 +13460.0 + 20 +6885.0 + 30 +0.0 + 40 +87.5 + 1 +FALZZIEGEL + 0 +TEXT + 5 +12DE + 8 +BEMASSUNG + 10 +13460.0 + 20 +6635.0 + 30 +0.0 + 40 +87.5 + 1 +KONTERLATTUNG NH S10 3/5 + 0 +TEXT + 5 +12DF + 8 +BEMASSUNG + 10 +13460.0 + 20 +6385.0 + 30 +0.0 + 40 +87.5 + 1 +LATTUNG NH S10 3/5 + 0 +TEXT + 5 +12E0 + 8 +BEMASSUNG + 10 +13460.0 + 20 +6135.0 + 30 +0.0 + 40 +87.5 + 1 +PE-FOLIE + 0 +TEXT + 5 +12E1 + 8 +BEMASSUNG + 10 +13460.0 + 20 +5885.0 + 30 +0.0 + 40 +87.5 + 1 +MINRALFASER-WÄDÄ + 0 +POLYLINE + 5 +12E2 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1715 + 8 +LEGENDE-35 + 10 +13365.0 + 20 +6930.0 + 30 +0.0 + 0 +VERTEX + 5 +1716 + 8 +LEGENDE-35 + 10 +11580.0 + 20 +6930.0 + 30 +0.0 + 0 +VERTEX + 5 +1717 + 8 +LEGENDE-35 + 10 +11580.0 + 20 +4520.0 + 30 +0.0 + 0 +SEQEND + 5 +1718 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +12E7 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1719 + 8 +LEGENDE-35 + 10 +13365.0 + 20 +6695.0 + 30 +0.0 + 0 +VERTEX + 5 +171A + 8 +LEGENDE-35 + 10 +12065.0 + 20 +6695.0 + 30 +0.0 + 0 +VERTEX + 5 +171B + 8 +LEGENDE-35 + 10 +12065.0 + 20 +4335.0 + 30 +0.0 + 0 +SEQEND + 5 +171C + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +12EC + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +171D + 8 +LEGENDE-35 + 10 +13365.0 + 20 +6440.0 + 30 +0.0 + 0 +VERTEX + 5 +171E + 8 +LEGENDE-35 + 10 +12460.0 + 20 +6440.0 + 30 +0.0 + 0 +VERTEX + 5 +171F + 8 +LEGENDE-35 + 10 +12460.0 + 20 +4360.0 + 30 +0.0 + 0 +SEQEND + 5 +1720 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +12F1 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1721 + 8 +LEGENDE-35 + 10 +13365.0 + 20 +6200.0 + 30 +0.0 + 0 +VERTEX + 5 +1722 + 8 +LEGENDE-35 + 10 +12815.0 + 20 +6200.0 + 30 +0.0 + 0 +VERTEX + 5 +1723 + 8 +LEGENDE-35 + 10 +12815.0 + 20 +4260.0 + 30 +0.0 + 0 +SEQEND + 5 +1724 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +12F6 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1725 + 8 +LEGENDE-35 + 10 +13360.0 + 20 +5925.0 + 30 +0.0 + 0 +VERTEX + 5 +1726 + 8 +LEGENDE-35 + 10 +13110.0 + 20 +5925.0 + 30 +0.0 + 0 +VERTEX + 5 +1727 + 8 +LEGENDE-35 + 10 +13110.0 + 20 +3915.0 + 30 +0.0 + 0 +SEQEND + 5 +1728 + 8 +LEGENDE-35 + 0 +TEXT + 5 +12FB + 8 +LEGENDE-35 + 10 +14190.0 + 20 +2995.0 + 30 +0.0 + 40 +87.5 + 1 +SCHALUNG + 0 +TEXT + 5 +12FC + 8 +LEGENDE-35 + 10 +14190.0 + 20 +2745.0 + 30 +0.0 + 40 +87.5 + 1 +SPARREN POS 1 NH S10 8/18 + 0 +TEXT + 5 +12FD + 8 +LEGENDE-35 + 10 +14190.0 + 20 +2495.0 + 30 +0.0 + 40 +87.5 + 1 +GIPSPUTZ + 0 +POLYLINE + 5 +12FE + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1729 + 8 +LEGENDE-35 + 10 +14035.0 + 20 +3030.0 + 30 +0.0 + 0 +VERTEX + 5 +172A + 8 +LEGENDE-35 + 10 +13310.0 + 20 +3030.0 + 30 +0.0 + 0 +VERTEX + 5 +172B + 8 +LEGENDE-35 + 10 +13310.0 + 20 +3700.0 + 30 +0.0 + 0 +SEQEND + 5 +172C + 8 +LEGENDE-35 + 0 +TEXT + 5 +1303 + 8 +LEGENDE-35 + 10 +14175.0 + 20 +3225.0 + 30 +0.0 + 40 +87.5 + 1 +PE-FOLIE + 0 +POLYLINE + 5 +1304 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +172D + 8 +LEGENDE-35 + 10 +14025.0 + 20 +3260.0 + 30 +0.0 + 0 +VERTEX + 5 +172E + 8 +LEGENDE-35 + 10 +13585.0 + 20 +3260.0 + 30 +0.0 + 0 +VERTEX + 5 +172F + 8 +LEGENDE-35 + 10 +13585.0 + 20 +3750.0 + 30 +0.0 + 0 +SEQEND + 5 +1730 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +1309 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1731 + 8 +LEGENDE-35 + 10 +14030.0 + 20 +2800.0 + 30 +0.0 + 0 +VERTEX + 5 +1732 + 8 +LEGENDE-35 + 10 +12065.0 + 20 +2800.0 + 30 +0.0 + 0 +VERTEX + 5 +1733 + 8 +LEGENDE-35 + 10 +12065.0 + 20 +3920.0 + 30 +0.0 + 0 +SEQEND + 5 +1734 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +130E + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1735 + 8 +LEGENDE-35 + 10 +14030.0 + 20 +2545.0 + 30 +0.0 + 0 +VERTEX + 5 +1736 + 8 +LEGENDE-35 + 10 +12330.0 + 20 +2545.0 + 30 +0.0 + 0 +VERTEX + 5 +1737 + 8 +LEGENDE-35 + 10 +11960.0 + 20 +2710.0 + 30 +0.0 + 0 +SEQEND + 5 +1738 + 8 +LEGENDE-35 + 0 +TEXT + 5 +1313 + 8 +LEGENDE-35 + 10 +7030.0 + 20 +4475.0 + 30 +0.0 + 40 +87.5 + 1 +BLECHKEHLE + 0 +TEXT + 5 +1314 + 8 +LEGENDE-35 + 10 +7030.0 + 20 +4225.0 + 30 +0.0 + 40 +87.5 + 1 +GESIMSBRETT + 0 +TEXT + 5 +1315 + 8 +LEGENDE-35 + 10 +7420.0 + 20 +3590.0 + 30 +0.0 + 40 +87.5 + 1 +VMW KHLz-20-1.8-NF + 0 +TEXT + 5 +1316 + 8 +LEGENDE-35 + 10 +7420.0 + 20 +3340.0 + 30 +0.0 + 40 +87.5 + 1 +MW Mz-20-1.8-NF + 0 +TEXT + 5 +1317 + 8 +LEGENDE-35 + 10 +7420.0 + 20 +3090.0 + 30 +0.0 + 40 +87.5 + 1 +MINERALFASER-WÄDÄ + 0 +POLYLINE + 5 +1318 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1739 + 8 +LEGENDE-35 + 10 +7960.0 + 20 +4515.0 + 30 +0.0 + 0 +VERTEX + 5 +173A + 8 +LEGENDE-35 + 10 +10070.0 + 20 +4515.0 + 30 +0.0 + 0 +VERTEX + 5 +173B + 8 +LEGENDE-35 + 10 +10070.0 + 20 +4935.0 + 30 +0.0 + 0 +VERTEX + 5 +173C + 8 +LEGENDE-35 + 10 +10465.0 + 20 +4935.0 + 30 +0.0 + 0 +VERTEX + 5 +173D + 8 +LEGENDE-35 + 10 +10465.0 + 20 +4410.0 + 30 +0.0 + 0 +SEQEND + 5 +173E + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +131F + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +173F + 8 +LEGENDE-35 + 10 +8020.0 + 20 +4275.0 + 30 +0.0 + 0 +VERTEX + 5 +1740 + 8 +LEGENDE-35 + 10 +10355.0 + 20 +4275.0 + 30 +0.0 + 0 +SEQEND + 5 +1741 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +1323 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1742 + 8 +LEGENDE-35 + 10 +9040.0 + 20 +3625.0 + 30 +0.0 + 0 +VERTEX + 5 +1743 + 8 +LEGENDE-35 + 10 +10510.0 + 20 +3625.0 + 30 +0.0 + 0 +SEQEND + 5 +1744 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +1327 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1745 + 8 +LEGENDE-35 + 10 +8700.0 + 20 +3390.0 + 30 +0.0 + 0 +VERTEX + 5 +1746 + 8 +LEGENDE-35 + 10 +11225.0 + 20 +3390.0 + 30 +0.0 + 0 +SEQEND + 5 +1747 + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +132B + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +1748 + 8 +LEGENDE-35 + 10 +8975.0 + 20 +3140.0 + 30 +0.0 + 0 +VERTEX + 5 +1749 + 8 +LEGENDE-35 + 10 +10310.0 + 20 +3140.0 + 30 +0.0 + 0 +VERTEX + 5 +174A + 8 +LEGENDE-35 + 10 +10910.0 + 20 +3265.0 + 30 +0.0 + 0 +SEQEND + 5 +174B + 8 +LEGENDE-35 + 0 +TEXT + 5 +1330 + 8 +LEGENDE-35 + 10 +7420.0 + 20 +2840.0 + 30 +0.0 + 40 +87.5 + 1 +ABSTANDHALTER + 0 +POLYLINE + 5 +1331 + 8 +LEGENDE-35 + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +VERTEX + 5 +174C + 8 +LEGENDE-35 + 10 +8620.0 + 20 +2890.0 + 30 +0.0 + 0 +VERTEX + 5 +174D + 8 +LEGENDE-35 + 10 +10755.0 + 20 +2890.0 + 30 +0.0 + 0 +VERTEX + 5 +174E + 8 +LEGENDE-35 + 10 +10755.0 + 20 +3050.0 + 30 +0.0 + 0 +SEQEND + 5 +174F + 8 +LEGENDE-35 + 0 +POLYLINE + 5 +1336 + 8 +SCHRAFFUR + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +1337 + 8 +SCHRAFFUR + 10 +10345.0 + 20 +4455.0 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1338 + 8 +SCHRAFFUR + 10 +10345.0 + 20 +4455.0 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1339 + 8 +SCHRAFFUR + 10 +10350.041633 + 20 +4458.734896 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +133A + 8 +SCHRAFFUR + 10 +10354.589582 + 20 +4463.956186 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +133B + 8 +SCHRAFFUR + 10 +10358.588819 + 20 +4470.052247 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +133C + 8 +SCHRAFFUR + 10 +10361.984318 + 20 +4476.411454 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +133D + 8 +SCHRAFFUR + 10 +10364.721051 + 20 +4482.422183 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +133E + 8 +SCHRAFFUR + 10 +10366.743989 + 20 +4487.47281 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +133F + 8 +SCHRAFFUR + 10 +10367.998105 + 20 +4490.951711 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1340 + 8 +SCHRAFFUR + 10 +10368.428373 + 20 +4492.247261 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1341 + 8 +SCHRAFFUR + 10 +10359.053685 + 20 +4462.434196 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1342 + 8 +SCHRAFFUR + 10 +10368.428373 + 20 +4492.247261 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1343 + 8 +SCHRAFFUR + 10 +10368.428373 + 20 +4492.247261 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1344 + 8 +SCHRAFFUR + 0 +POLYLINE + 5 +1345 + 8 +SCHRAFFUR + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +1346 + 8 +SCHRAFFUR + 10 +10344.565635 + 20 +4407.067149 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1347 + 8 +SCHRAFFUR + 10 +10344.565635 + 20 +4407.067149 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1348 + 8 +SCHRAFFUR + 10 +10350.57126 + 20 +4411.658898 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1349 + 8 +SCHRAFFUR + 10 +10355.857812 + 20 +4417.608199 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +134A + 8 +SCHRAFFUR + 10 +10360.505189 + 20 +4424.675485 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +134B + 8 +SCHRAFFUR + 10 +10364.593286 + 20 +4432.621188 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +134C + 8 +SCHRAFFUR + 10 +10368.202001 + 20 +4441.205741 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +134D + 8 +SCHRAFFUR + 10 +10371.411229 + 20 +4450.189576 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +134E + 8 +SCHRAFFUR + 10 +10374.300869 + 20 +4459.333125 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +134F + 8 +SCHRAFFUR + 10 +10376.950816 + 20 +4468.396822 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1350 + 8 +SCHRAFFUR + 10 +10361.610418 + 20 +4417.288794 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1351 + 8 +SCHRAFFUR + 10 +10370.132861 + 20 +4444.546383 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1352 + 8 +SCHRAFFUR + 10 +10376.950816 + 20 +4468.396822 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1353 + 8 +SCHRAFFUR + 0 +POLYLINE + 5 +1354 + 8 +SCHRAFFUR + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +1355 + 8 +SCHRAFFUR + 10 +10345.417879 + 20 +4355.959121 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1356 + 8 +SCHRAFFUR + 10 +10345.417879 + 20 +4355.959121 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1357 + 8 +SCHRAFFUR + 10 +10350.907497 + 20 +4361.139812 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1358 + 8 +SCHRAFFUR + 10 +10355.937709 + 20 +4367.059167 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1359 + 8 +SCHRAFFUR + 10 +10360.608385 + 20 +4373.657295 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +135A + 8 +SCHRAFFUR + 10 +10365.019395 + 20 +4380.874307 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +135B + 8 +SCHRAFFUR + 10 +10369.27061 + 20 +4388.650312 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +135C + 8 +SCHRAFFUR + 10 +10373.461899 + 20 +4396.925419 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +135D + 8 +SCHRAFFUR + 10 +10377.693131 + 20 +4405.63974 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +135E + 8 +SCHRAFFUR + 10 +10382.064178 + 20 +4414.733383 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +135F + 8 +SCHRAFFUR + 10 +10360.758174 + 20 +4368.736177 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1360 + 8 +SCHRAFFUR + 10 +10370.132861 + 20 +4390.03114 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1361 + 8 +SCHRAFFUR + 10 +10382.064178 + 20 +4414.733383 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1362 + 8 +SCHRAFFUR + 0 +POLYLINE + 5 +1363 + 8 +SCHRAFFUR + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +1364 + 8 +SCHRAFFUR + 10 +10341.156658 + 20 +4309.961916 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1365 + 8 +SCHRAFFUR + 10 +10341.156658 + 20 +4309.961916 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1366 + 8 +SCHRAFFUR + 10 +10350.005317 + 20 +4314.542 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1367 + 8 +SCHRAFFUR + 10 +10357.455771 + 20 +4320.888911 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1368 + 8 +SCHRAFFUR + 10 +10363.627865 + 20 +4328.453636 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1369 + 8 +SCHRAFFUR + 10 +10368.641447 + 20 +4336.68716 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +136A + 8 +SCHRAFFUR + 10 +10372.61636 + 20 +4345.040468 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +136B + 8 +SCHRAFFUR + 10 +10375.672451 + 20 +4352.964548 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +136C + 8 +SCHRAFFUR + 10 +10377.929566 + 20 +4359.910384 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +136D + 8 +SCHRAFFUR + 10 +10379.507549 + 20 +4365.328962 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +136E + 8 +SCHRAFFUR + 10 +10366.723884 + 20 +4319.331691 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +136F + 8 +SCHRAFFUR + 10 +10376.098572 + 20 +4353.403775 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1370 + 8 +SCHRAFFUR + 10 +10379.507549 + 20 +4365.328962 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1371 + 8 +SCHRAFFUR + 0 +POLYLINE + 5 +1372 + 8 +SCHRAFFUR + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +1373 + 8 +SCHRAFFUR + 10 +10342.008902 + 20 +4258.002084 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1374 + 8 +SCHRAFFUR + 10 +10342.008902 + 20 +4258.002084 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1375 + 8 +SCHRAFFUR + 10 +10349.171382 + 20 +4262.322634 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1376 + 8 +SCHRAFFUR + 10 +10355.365109 + 20 +4267.491661 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1377 + 8 +SCHRAFFUR + 10 +10360.659991 + 20 +4273.319504 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1378 + 8 +SCHRAFFUR + 10 +10365.125939 + 20 +4279.616506 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1379 + 8 +SCHRAFFUR + 10 +10368.832861 + 20 +4286.193005 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +137A + 8 +SCHRAFFUR + 10 +10371.850668 + 20 +4292.859343 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +137B + 8 +SCHRAFFUR + 10 +10374.249268 + 20 +4299.42586 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +137C + 8 +SCHRAFFUR + 10 +10376.098572 + 20 +4305.702897 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +137D + 8 +SCHRAFFUR + 10 +10362.462662 + 20 +4268.223663 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +137E + 8 +SCHRAFFUR + 10 +10371.83735 + 20 +4289.518691 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +137F + 8 +SCHRAFFUR + 10 +10376.098572 + 20 +4305.702897 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +1380 + 8 +SCHRAFFUR + 0 +POLYLINE + 5 +1381 + 8 +SCHRAFFUR + 66 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 70 + 4 + 75 + 6 + 0 +VERTEX + 5 +1382 + 8 +SCHRAFFUR + 10 +10342.861146 + 20 +4210.301271 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +1383 + 8 +SCHRAFFUR + 10 +10342.861146 + 20 +4210.301271 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1384 + 8 +SCHRAFFUR + 10 +10350.235023 + 20 +4214.828117 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1385 + 8 +SCHRAFFUR + 10 +10356.470363 + 20 +4220.003799 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1386 + 8 +SCHRAFFUR + 10 +10361.706987 + 20 +4225.678584 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1387 + 8 +SCHRAFFUR + 10 +10366.084714 + 20 +4231.702742 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1388 + 8 +SCHRAFFUR + 10 +10369.743365 + 20 +4237.926541 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +1389 + 8 +SCHRAFFUR + 10 +10372.822759 + 20 +4244.20025 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +138A + 8 +SCHRAFFUR + 10 +10375.462718 + 20 +4250.374139 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +138B + 8 +SCHRAFFUR + 10 +10377.80306 + 20 +4256.298476 + 30 +0.0 + 70 + 8 + 0 +VERTEX + 5 +138C + 8 +SCHRAFFUR + 10 +10364.167151 + 20 +4221.374654 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +138D + 8 +SCHRAFFUR + 10 +10371.83735 + 20 +4240.966074 + 30 +0.0 + 70 + 16 + 0 +VERTEX + 5 +138E + 8 +SCHRAFFUR + 10 +10377.80306 + 20 +4256.298476 + 30 +0.0 + 70 + 16 + 0 +SEQEND + 5 +138F + 8 +SCHRAFFUR + 0 +TEXT + 5 +1390 + 8 +LEGENDE-70 + 10 +13304.009936 + 20 +7784.937687 + 30 +0.0 + 40 +175.0 + 1 +D6 ORTGANG + 0 +ENDSEC + 0 +EOF diff --git a/extensions/fablabchemnitz/dxf2papercraft/kabeja/samples/dxf/hatch_1.dxf b/extensions/fablabchemnitz/dxf2papercraft/kabeja/samples/dxf/hatch_1.dxf new file mode 100644 index 00000000..768d654d --- /dev/null +++ b/extensions/fablabchemnitz/dxf2papercraft/kabeja/samples/dxf/hatch_1.dxf @@ -0,0 +1,1816 @@ + 0 +SECTION + 2 +HEADER + 9 +$ACADVER + 1 +AC1014 + 9 +$ACADMAINTVER + 70 + 0 + 9 +$DWGCODEPAGE + 3 +ANSI_1252 + 9 +$INSBASE + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$EXTMIN + 10 +46.500056 + 20 +65.682692 + 30 +0.0 + 9 +$EXTMAX + 10 +349.399865 + 20 +259.875 + 30 +0.0 + 9 +$LIMMIN + 10 +0.0 + 20 +0.0 + 9 +$LIMMAX + 10 +420.0 + 20 +297.0 + 9 +$ORTHOMODE + 70 + 0 + 9 +$REGENMODE + 70 + 1 + 9 +$FILLMODE + 70 + 1 + 9 +$QTEXTMODE + 70 + 0 + 9 +$MIRRTEXT + 70 + 1 + 9 +$DRAGMODE + 70 + 2 + 9 +$LTSCALE + 40 +1.0 + 9 +$OSMODE + 70 + 0 + 9 +$ATTMODE + 70 + 1 + 9 +$TEXTSIZE + 40 +2.5 + 9 +$TRACEWID + 40 +1.0 + 9 +$TEXTSTYLE + 7 +STANDARD + 9 +$CLAYER + 8 +0 + 9 +$CELTYPE + 6 +BYLAYER + 9 +$CECOLOR + 62 + 256 + 9 +$CELTSCALE + 40 +1.0 + 9 +$DELOBJ + 70 + 1 + 9 +$DISPSILH + 70 + 0 + 9 +$DIMSCALE + 40 +1.0 + 9 +$DIMASZ + 40 +2.5 + 9 +$DIMEXO + 40 +0.625 + 9 +$DIMDLI + 40 +3.75 + 9 +$DIMRND + 40 +0.0 + 9 +$DIMDLE + 40 +0.0 + 9 +$DIMEXE + 40 +1.25 + 9 +$DIMTP + 40 +0.0 + 9 +$DIMTM + 40 +0.0 + 9 +$DIMTXT + 40 +2.5 + 9 +$DIMCEN + 40 +2.5 + 9 +$DIMTSZ + 40 +0.0 + 9 +$DIMTOL + 70 + 0 + 9 +$DIMLIM + 70 + 0 + 9 +$DIMTIH + 70 + 0 + 9 +$DIMTOH + 70 + 0 + 9 +$DIMSE1 + 70 + 0 + 9 +$DIMSE2 + 70 + 0 + 9 +$DIMTAD + 70 + 1 + 9 +$DIMZIN + 70 + 8 + 9 +$DIMBLK + 1 + + 9 +$DIMASO + 70 + 1 + 9 +$DIMSHO + 70 + 1 + 9 +$DIMPOST + 1 + + 9 +$DIMAPOST + 1 + + 9 +$DIMALT + 70 + 0 + 9 +$DIMALTD + 70 + 4 + 9 +$DIMALTF + 40 +0.0394 + 9 +$DIMLFAC + 40 +1.0 + 9 +$DIMTOFL + 70 + 1 + 9 +$DIMTVP + 40 +0.0 + 9 +$DIMTIX + 70 + 0 + 9 +$DIMSOXD + 70 + 0 + 9 +$DIMSAH + 70 + 0 + 9 +$DIMBLK1 + 1 + + 9 +$DIMBLK2 + 1 + + 9 +$DIMSTYLE + 2 +STANDARD + 9 +$DIMCLRD + 70 + 0 + 9 +$DIMCLRE + 70 + 0 + 9 +$DIMCLRT + 70 + 0 + 9 +$DIMTFAC + 40 +1.0 + 9 +$DIMGAP + 40 +0.625 + 9 +$DIMJUST + 70 + 0 + 9 +$DIMSD1 + 70 + 0 + 9 +$DIMSD2 + 70 + 0 + 9 +$DIMTOLJ + 70 + 1 + 9 +$DIMTZIN + 70 + 0 + 9 +$DIMALTZ + 70 + 0 + 9 +$DIMALTTZ + 70 + 0 + 9 +$DIMFIT + 70 + 3 + 9 +$DIMUPT + 70 + 0 + 9 +$DIMUNIT + 70 + 8 + 9 +$DIMDEC + 70 + 4 + 9 +$DIMTDEC + 70 + 4 + 9 +$DIMALTU + 70 + 8 + 9 +$DIMALTTD + 70 + 4 + 9 +$DIMTXSTY + 7 +STANDARD + 9 +$DIMAUNIT + 70 + 0 + 9 +$LUNITS + 70 + 2 + 9 +$LUPREC + 70 + 4 + 9 +$SKETCHINC + 40 +1.0 + 9 +$FILLETRAD + 40 +10.0 + 9 +$AUNITS + 70 + 0 + 9 +$AUPREC + 70 + 0 + 9 +$MENU + 1 +. + 9 +$ELEVATION + 40 +0.0 + 9 +$PELEVATION + 40 +0.0 + 9 +$THICKNESS + 40 +0.0 + 9 +$LIMCHECK + 70 + 0 + 9 +$BLIPMODE + 70 + 0 + 9 +$CHAMFERA + 40 +10.0 + 9 +$CHAMFERB + 40 +10.0 + 9 +$CHAMFERC + 40 +20.0 + 9 +$CHAMFERD + 40 +0.0 + 9 +$SKPOLY + 70 + 0 + 9 +$TDCREATE + 40 +2454014.587737731 + 9 +$TDUPDATE + 40 +2454014.589464236 + 9 +$TDINDWG + 40 +0.0017265046 + 9 +$TDUSRTIMER + 40 +0.0017265046 + 9 +$USRTIMER + 70 + 1 + 9 +$ANGBASE + 50 +0.0 + 9 +$ANGDIR + 70 + 0 + 9 +$PDMODE + 70 + 0 + 9 +$PDSIZE + 40 +0.0 + 9 +$PLINEWID + 40 +0.0 + 9 +$COORDS + 70 + 1 + 9 +$SPLFRAME + 70 + 0 + 9 +$SPLINETYPE + 70 + 6 + 9 +$SPLINESEGS + 70 + 8 + 9 +$ATTDIA + 70 + 0 + 9 +$ATTREQ + 70 + 1 + 9 +$HANDLING + 70 + 1 + 9 +$HANDSEED + 5 +3B + 9 +$SURFTAB1 + 70 + 6 + 9 +$SURFTAB2 + 70 + 6 + 9 +$SURFTYPE + 70 + 6 + 9 +$SURFU + 70 + 6 + 9 +$SURFV + 70 + 6 + 9 +$UCSNAME + 2 + + 9 +$UCSORG + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSXDIR + 10 +1.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSYDIR + 10 +0.0 + 20 +1.0 + 30 +0.0 + 9 +$PUCSNAME + 2 + + 9 +$PUCSORG + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSXDIR + 10 +1.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSYDIR + 10 +0.0 + 20 +1.0 + 30 +0.0 + 9 +$USERI1 + 70 + 0 + 9 +$USERI2 + 70 + 0 + 9 +$USERI3 + 70 + 0 + 9 +$USERI4 + 70 + 0 + 9 +$USERI5 + 70 + 0 + 9 +$USERR1 + 40 +0.0 + 9 +$USERR2 + 40 +0.0 + 9 +$USERR3 + 40 +0.0 + 9 +$USERR4 + 40 +0.0 + 9 +$USERR5 + 40 +0.0 + 9 +$WORLDVIEW + 70 + 1 + 9 +$SHADEDGE + 70 + 3 + 9 +$SHADEDIF + 70 + 70 + 9 +$TILEMODE + 70 + 1 + 9 +$MAXACTVP + 70 + 48 + 9 +$PINSBASE + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PLIMCHECK + 70 + 0 + 9 +$PEXTMIN + 10 +1.000000E+20 + 20 +1.000000E+20 + 30 +1.000000E+20 + 9 +$PEXTMAX + 10 +-1.000000E+20 + 20 +-1.000000E+20 + 30 +-1.000000E+20 + 9 +$PLIMMIN + 10 +0.0 + 20 +0.0 + 9 +$PLIMMAX + 10 +420.0 + 20 +297.0 + 9 +$UNITMODE + 70 + 0 + 9 +$VISRETAIN + 70 + 1 + 9 +$PLINEGEN + 70 + 0 + 9 +$PSLTSCALE + 70 + 1 + 9 +$TREEDEPTH + 70 + 3020 + 9 +$PICKSTYLE + 70 + 1 + 9 +$CMLSTYLE + 2 +STANDARD + 9 +$CMLJUST + 70 + 0 + 9 +$CMLSCALE + 40 +20.0 + 9 +$PROXYGRAPHICS + 70 + 1 + 9 +$MEASUREMENT + 70 + 1 + 0 +ENDSEC + 0 +SECTION + 2 +CLASSES + 0 +CLASS + 1 +LWPOLYLINE + 2 +AcDbPolyline + 3 +"AutoCAD" + 90 + 0 +280 + 0 +281 + 1 + 0 +CLASS + 1 +DICTIONARYVAR + 2 +AcDbDictionaryVar + 3 +"AutoCAD" + 90 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +HATCH + 2 +AcDbHatch + 3 +"ACAD_SEDONA" + 90 + 0 +280 + 0 +281 + 1 + 0 +ENDSEC + 0 +SECTION + 2 +TABLES + 0 +TABLE + 2 +VPORT + 5 +8 +100 +AcDbSymbolTable + 70 + 2 + 0 +VPORT + 5 +3A +100 +AcDbSymbolTableRecord +100 +AcDbViewportTableRecord + 2 +*ACTIVE + 70 + 0 + 10 +0.0 + 20 +0.0 + 11 +1.0 + 21 +1.0 + 12 +230.422067 + 22 +148.5 + 13 +0.0 + 23 +0.0 + 14 +10.0 + 24 +10.0 + 15 +10.0 + 25 +10.0 + 16 +0.0 + 26 +0.0 + 36 +1.0 + 17 +0.0 + 27 +0.0 + 37 +0.0 + 40 +297.0 + 41 +1.551664 + 42 +50.0 + 43 +0.0 + 44 +0.0 + 50 +0.0 + 51 +0.0 + 71 + 0 + 72 + 100 + 73 + 1 + 74 + 1 + 75 + 0 + 76 + 0 + 77 + 0 + 78 + 0 + 0 +ENDTAB + 0 +TABLE + 2 +LTYPE + 5 +5 +100 +AcDbSymbolTable + 70 + 1 + 0 +LTYPE + 5 +12 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +BYBLOCK + 70 + 0 + 3 + + 72 + 65 + 73 + 0 + 40 +0.0 + 0 +LTYPE + 5 +13 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +BYLAYER + 70 + 0 + 3 + + 72 + 65 + 73 + 0 + 40 +0.0 + 0 +LTYPE + 5 +14 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +CONTINUOUS + 70 + 0 + 3 +Solid line + 72 + 65 + 73 + 0 + 40 +0.0 + 0 +ENDTAB + 0 +TABLE + 2 +LAYER + 5 +2 +100 +AcDbSymbolTable + 70 + 1 + 0 +LAYER + 5 +E +100 +AcDbSymbolTableRecord +100 +AcDbLayerTableRecord + 2 +0 + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +ENDTAB + 0 +TABLE + 2 +STYLE + 5 +3 +100 +AcDbSymbolTable + 70 + 1 + 0 +STYLE + 5 +F +100 +AcDbSymbolTableRecord +100 +AcDbTextStyleTableRecord + 2 +STANDARD + 70 + 0 + 40 +0.0 + 41 +1.0 + 50 +0.0 + 71 + 0 + 42 +2.5 + 3 +txt + 4 + + 0 +ENDTAB + 0 +TABLE + 2 +VIEW + 5 +6 +100 +AcDbSymbolTable + 70 + 0 + 0 +ENDTAB + 0 +TABLE + 2 +UCS + 5 +7 +100 +AcDbSymbolTable + 70 + 0 + 0 +ENDTAB + 0 +TABLE + 2 +APPID + 5 +9 +100 +AcDbSymbolTable + 70 + 1 + 0 +APPID + 5 +10 +100 +AcDbSymbolTableRecord +100 +AcDbRegAppTableRecord + 2 +ACAD + 70 + 0 + 0 +ENDTAB + 0 +TABLE + 2 +DIMSTYLE + 5 +A +100 +AcDbSymbolTable + 70 + 1 + 0 +DIMSTYLE +105 +1D +100 +AcDbSymbolTableRecord +100 +AcDbDimStyleTableRecord + 2 +STANDARD + 70 + 0 + 3 + + 4 + + 5 + + 6 + + 7 + + 40 +1.0 + 41 +0.18 + 42 +0.0625 + 43 +0.38 + 44 +0.18 + 45 +0.0 + 46 +0.0 + 47 +0.0 + 48 +0.0 +140 +0.18 +141 +0.09 +142 +0.0 +143 +25.4 +144 +1.0 +145 +0.0 +146 +1.0 +147 +0.09 + 71 + 0 + 72 + 0 + 73 + 1 + 74 + 1 + 75 + 0 + 76 + 0 + 77 + 0 + 78 + 0 +170 + 0 +171 + 2 +172 + 0 +173 + 0 +174 + 0 +175 + 0 +176 + 0 +177 + 0 +178 + 0 +270 + 2 +271 + 4 +272 + 4 +273 + 2 +274 + 2 +340 +F +275 + 0 +280 + 0 +281 + 0 +282 + 0 +283 + 1 +284 + 0 +285 + 0 +286 + 0 +287 + 3 +288 + 0 + 0 +ENDTAB + 0 +TABLE + 2 +BLOCK_RECORD + 5 +1 +100 +AcDbSymbolTable + 70 + 0 + 0 +BLOCK_RECORD + 5 +18 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +*MODEL_SPACE + 0 +BLOCK_RECORD + 5 +15 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +*PAPER_SPACE + 0 +ENDTAB + 0 +ENDSEC + 0 +SECTION + 2 +BLOCKS + 0 +BLOCK + 5 +19 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +*MODEL_SPACE + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*MODEL_SPACE + 1 + + 0 +ENDBLK + 5 +1A +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +16 +100 +AcDbEntity + 67 + 1 + 8 +0 +100 +AcDbBlockBegin + 2 +*PAPER_SPACE + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*PAPER_SPACE + 1 + + 0 +ENDBLK + 5 +17 +100 +AcDbEntity + 67 + 1 + 8 +0 +100 +AcDbBlockEnd + 0 +ENDSEC + 0 +SECTION + 2 +ENTITIES + 0 +LWPOLYLINE + 5 +20 +102 +{ACAD_REACTORS +330 +39 +102 +} +100 +AcDbEntity + 8 +0 +100 +AcDbPolyline + 90 + 4 + 70 + 1 + 43 +0.0 + 10 +46.500056 + 20 +259.875 + 10 +349.399865 + 20 +259.875 + 10 +349.399865 + 20 +65.682692 + 10 +46.500056 + 20 +65.682692 + 0 +CIRCLE + 5 +21 +102 +{ACAD_REACTORS +330 +39 +102 +} +100 +AcDbEntity + 8 +0 +100 +AcDbCircle + 10 +79.231939 + 20 +225.086539 + 30 +0.0 + 40 +24.021373 + 0 +ELLIPSE + 5 +22 +102 +{ACAD_REACTORS +330 +39 +102 +} +100 +AcDbEntity + 8 +0 +100 +AcDbEllipse + 10 +218.732109 + 20 +147.721154 + 30 +0.0 + 11 +-25.19835455225825 + 21 +12.98076909778717 + 31 +0.0 +210 +0.0 +220 +0.0 +230 +0.9999999999999998 + 40 +0.3253 + 41 +0.0 + 42 +6.283185307179586 + 0 +HATCH + 5 +39 +100 +AcDbEntity + 8 +0 +100 +AcDbHatch + 10 +0.0 + 20 +0.0 + 30 +0.0 +210 +0.0 +220 +0.0 +230 +1.0 + 2 +AR-RSHKE + 70 + 0 + 71 + 1 + 91 + 3 + 92 + 7 + 72 + 0 + 73 + 1 + 93 + 4 + 10 +349.399864802863 + 20 +259.8750000345757 + 10 +46.50005623029779 + 20 +259.8750000345757 + 10 +46.50005623029779 + 20 +65.682691980556 + 10 +349.3998648028629 + 20 +65.682691980556 + 97 + 1 +330 +20 + 92 + 20 + 93 + 1 + 72 + 3 + 10 +218.732109 + 20 +147.721154 + 11 +-25.198355 + 21 +12.980769 + 40 +0.3253 + 50 +0.0 + 51 +360.0 + 73 + 1 + 97 + 1 +330 +22 + 92 + 22 + 72 + 1 + 73 + 1 + 93 + 2 + 10 +55.21056564949481 + 20 +225.0865387142047 + 42 +-1.0 + 10 +103.2533117502446 + 20 +225.0865387142047 + 42 +-1.0 + 97 + 1 +330 +21 + 75 + 0 + 76 + 1 + 52 +0.0 + 41 +0.1 + 77 + 0 + 78 + 9 + 53 +0.0 + 43 +0.0 + 44 +0.0 + 45 +64.77000000000001 + 46 +30.48 + 79 + 6 + 49 +15.24 + 49 +-12.7 + 49 +17.78 + 49 +-7.62 + 49 +22.86 + 49 +-10.16 + 53 +0.0 + 43 +15.24 + 44 +1.27 + 45 +64.77000000000001 + 46 +30.48 + 79 + 4 + 49 +12.7 + 49 +-48.26 + 49 +10.16 + 49 +-15.24 + 53 +0.0 + 43 +45.72 + 44 +-1.905 + 45 +64.77000000000001 + 46 +30.48 + 79 + 2 + 49 +7.62 + 49 +-78.74 + 53 +90.0 + 43 +0.0 + 44 +0.0 + 45 +-21.59 + 46 +30.48 + 79 + 2 + 49 +29.21 + 49 +-92.71 + 53 +90.0 + 43 +15.24 + 44 +0.0 + 45 +-21.59 + 46 +30.48 + 79 + 2 + 49 +28.575 + 49 +-93.345 + 53 +90.0 + 43 +27.94 + 44 +0.0 + 45 +-21.59 + 46 +30.48 + 79 + 2 + 49 +26.67 + 49 +-95.25 + 53 +90.0 + 43 +45.72 + 44 +-1.905 + 45 +-21.59 + 46 +30.48 + 79 + 2 + 49 +29.21 + 49 +-92.71 + 53 +90.0 + 43 +53.34 + 44 +-1.905 + 45 +-21.59 + 46 +30.48 + 79 + 2 + 49 +29.21 + 49 +-92.71 + 53 +90.0 + 43 +76.2 + 44 +0.0 + 45 +-21.59 + 46 +30.48 + 79 + 2 + 49 +27.94 + 49 +-93.98 + 47 +0.519231 + 98 + 3 + 10 +211.718134 + 20 +222.490385 + 10 +211.718134 + 20 +222.490385 + 10 +211.718134 + 20 +222.490385 + 0 +ENDSEC + 0 +SECTION + 2 +OBJECTS + 0 +DICTIONARY + 5 +C +100 +AcDbDictionary + 3 +ACAD_GROUP +350 +D + 3 +ACAD_MLINESTYLE +350 +1B + 3 +ACDBVARIABLEDICTIONARY +350 +24 + 0 +DICTIONARY + 5 +D +102 +{ACAD_REACTORS +330 +C +102 +} +100 +AcDbDictionary + 0 +DICTIONARY + 5 +1B +102 +{ACAD_REACTORS +330 +C +102 +} +100 +AcDbDictionary + 3 +STANDARD +350 +1C + 0 +DICTIONARY + 5 +24 +102 +{ACAD_REACTORS +330 +C +102 +} +100 +AcDbDictionary + 3 +SORTENTS +350 +25 + 0 +MLINESTYLE + 5 +1C +102 +{ACAD_REACTORS +330 +1B +102 +} +100 +AcDbMlineStyle + 2 +STANDARD + 70 + 0 + 3 + + 62 + 256 + 51 +90.0 + 52 +90.0 + 71 + 2 + 49 +0.5 + 62 + 256 + 6 +BYLAYER + 49 +-0.5 + 62 + 256 + 6 +BYLAYER + 0 +DICTIONARYVAR + 5 +25 +102 +{ACAD_REACTORS +330 +24 +102 +} +100 +DictionaryVariables +280 + 0 + 1 +96 + 0 +ENDSEC + 0 +EOF diff --git a/extensions/fablabchemnitz/dxf2papercraft/kabeja/samples/dxf/hatch_16.dxf b/extensions/fablabchemnitz/dxf2papercraft/kabeja/samples/dxf/hatch_16.dxf new file mode 100644 index 00000000..52d690c2 --- /dev/null +++ b/extensions/fablabchemnitz/dxf2papercraft/kabeja/samples/dxf/hatch_16.dxf @@ -0,0 +1,4930 @@ + 0 +SECTION + 2 +HEADER + 9 +$ACADVER + 1 +AC1014 + 9 +$ACADMAINTVER + 70 + 0 + 9 +$DWGCODEPAGE + 3 +ANSI_1252 + 9 +$INSBASE + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$EXTMIN + 10 +-0.012816 + 20 +-0.009063 + 30 +-0.001526 + 9 +$EXTMAX + 10 +460.003053 + 20 +260.006425 + 30 +0.0 + 9 +$LIMMIN + 10 +0.0 + 20 +0.0 + 9 +$LIMMAX + 10 +420.0 + 20 +297.0 + 9 +$ORTHOMODE + 70 + 0 + 9 +$REGENMODE + 70 + 1 + 9 +$FILLMODE + 70 + 1 + 9 +$QTEXTMODE + 70 + 0 + 9 +$MIRRTEXT + 70 + 1 + 9 +$DRAGMODE + 70 + 2 + 9 +$LTSCALE + 40 +1.0 + 9 +$OSMODE + 70 + 0 + 9 +$ATTMODE + 70 + 1 + 9 +$TEXTSIZE + 40 +2.5 + 9 +$TRACEWID + 40 +1.0 + 9 +$TEXTSTYLE + 7 +STANDARD + 9 +$CLAYER + 8 +0 + 9 +$CELTYPE + 6 +BYLAYER + 9 +$CECOLOR + 62 + 256 + 9 +$CELTSCALE + 40 +1.0 + 9 +$DELOBJ + 70 + 1 + 9 +$DISPSILH + 70 + 0 + 9 +$DIMSCALE + 40 +1.0 + 9 +$DIMASZ + 40 +2.5 + 9 +$DIMEXO + 40 +0.625 + 9 +$DIMDLI + 40 +3.75 + 9 +$DIMRND + 40 +0.0 + 9 +$DIMDLE + 40 +0.0 + 9 +$DIMEXE + 40 +1.25 + 9 +$DIMTP + 40 +0.0 + 9 +$DIMTM + 40 +0.0 + 9 +$DIMTXT + 40 +2.5 + 9 +$DIMCEN + 40 +2.5 + 9 +$DIMTSZ + 40 +0.0 + 9 +$DIMTOL + 70 + 0 + 9 +$DIMLIM + 70 + 0 + 9 +$DIMTIH + 70 + 0 + 9 +$DIMTOH + 70 + 0 + 9 +$DIMSE1 + 70 + 0 + 9 +$DIMSE2 + 70 + 0 + 9 +$DIMTAD + 70 + 1 + 9 +$DIMZIN + 70 + 8 + 9 +$DIMBLK + 1 + + 9 +$DIMASO + 70 + 1 + 9 +$DIMSHO + 70 + 1 + 9 +$DIMPOST + 1 + + 9 +$DIMAPOST + 1 + + 9 +$DIMALT + 70 + 0 + 9 +$DIMALTD + 70 + 4 + 9 +$DIMALTF + 40 +0.0394 + 9 +$DIMLFAC + 40 +1.0 + 9 +$DIMTOFL + 70 + 1 + 9 +$DIMTVP + 40 +0.0 + 9 +$DIMTIX + 70 + 0 + 9 +$DIMSOXD + 70 + 0 + 9 +$DIMSAH + 70 + 0 + 9 +$DIMBLK1 + 1 + + 9 +$DIMBLK2 + 1 + + 9 +$DIMSTYLE + 2 +STANDARD + 9 +$DIMCLRD + 70 + 0 + 9 +$DIMCLRE + 70 + 0 + 9 +$DIMCLRT + 70 + 0 + 9 +$DIMTFAC + 40 +1.0 + 9 +$DIMGAP + 40 +0.625 + 9 +$DIMJUST + 70 + 0 + 9 +$DIMSD1 + 70 + 0 + 9 +$DIMSD2 + 70 + 0 + 9 +$DIMTOLJ + 70 + 1 + 9 +$DIMTZIN + 70 + 0 + 9 +$DIMALTZ + 70 + 0 + 9 +$DIMALTTZ + 70 + 0 + 9 +$DIMFIT + 70 + 3 + 9 +$DIMUPT + 70 + 0 + 9 +$DIMUNIT + 70 + 8 + 9 +$DIMDEC + 70 + 4 + 9 +$DIMTDEC + 70 + 4 + 9 +$DIMALTU + 70 + 8 + 9 +$DIMALTTD + 70 + 4 + 9 +$DIMTXSTY + 7 +STANDARD + 9 +$DIMAUNIT + 70 + 0 + 9 +$LUNITS + 70 + 2 + 9 +$LUPREC + 70 + 4 + 9 +$SKETCHINC + 40 +1.0 + 9 +$FILLETRAD + 40 +10.0 + 9 +$AUNITS + 70 + 0 + 9 +$AUPREC + 70 + 0 + 9 +$MENU + 1 +. + 9 +$ELEVATION + 40 +0.0 + 9 +$PELEVATION + 40 +0.0 + 9 +$THICKNESS + 40 +0.0 + 9 +$LIMCHECK + 70 + 0 + 9 +$BLIPMODE + 70 + 0 + 9 +$CHAMFERA + 40 +10.0 + 9 +$CHAMFERB + 40 +10.0 + 9 +$CHAMFERC + 40 +20.0 + 9 +$CHAMFERD + 40 +0.0 + 9 +$SKPOLY + 70 + 0 + 9 +$TDCREATE + 40 +2453993.462424306 + 9 +$TDUPDATE + 40 +2453993.471010185 + 9 +$TDINDWG + 40 +0.0085858796 + 9 +$TDUSRTIMER + 40 +0.0085858796 + 9 +$USRTIMER + 70 + 1 + 9 +$ANGBASE + 50 +0.0 + 9 +$ANGDIR + 70 + 0 + 9 +$PDMODE + 70 + 0 + 9 +$PDSIZE + 40 +0.0 + 9 +$PLINEWID + 40 +0.0 + 9 +$COORDS + 70 + 1 + 9 +$SPLFRAME + 70 + 0 + 9 +$SPLINETYPE + 70 + 6 + 9 +$SPLINESEGS + 70 + 8 + 9 +$ATTDIA + 70 + 0 + 9 +$ATTREQ + 70 + 1 + 9 +$HANDLING + 70 + 1 + 9 +$HANDSEED + 5 +74 + 9 +$SURFTAB1 + 70 + 6 + 9 +$SURFTAB2 + 70 + 6 + 9 +$SURFTYPE + 70 + 6 + 9 +$SURFU + 70 + 6 + 9 +$SURFV + 70 + 6 + 9 +$UCSNAME + 2 + + 9 +$UCSORG + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSXDIR + 10 +1.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSYDIR + 10 +0.0 + 20 +1.0 + 30 +0.0 + 9 +$PUCSNAME + 2 + + 9 +$PUCSORG + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSXDIR + 10 +1.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSYDIR + 10 +0.0 + 20 +1.0 + 30 +0.0 + 9 +$USERI1 + 70 + 0 + 9 +$USERI2 + 70 + 0 + 9 +$USERI3 + 70 + 0 + 9 +$USERI4 + 70 + 0 + 9 +$USERI5 + 70 + 0 + 9 +$USERR1 + 40 +0.0 + 9 +$USERR2 + 40 +0.0 + 9 +$USERR3 + 40 +0.0 + 9 +$USERR4 + 40 +0.0 + 9 +$USERR5 + 40 +0.0 + 9 +$WORLDVIEW + 70 + 1 + 9 +$SHADEDGE + 70 + 3 + 9 +$SHADEDIF + 70 + 70 + 9 +$TILEMODE + 70 + 1 + 9 +$MAXACTVP + 70 + 48 + 9 +$PINSBASE + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PLIMCHECK + 70 + 0 + 9 +$PEXTMIN + 10 +1.000000E+20 + 20 +1.000000E+20 + 30 +1.000000E+20 + 9 +$PEXTMAX + 10 +-1.000000E+20 + 20 +-1.000000E+20 + 30 +-1.000000E+20 + 9 +$PLIMMIN + 10 +0.0 + 20 +0.0 + 9 +$PLIMMAX + 10 +420.0 + 20 +297.0 + 9 +$UNITMODE + 70 + 0 + 9 +$VISRETAIN + 70 + 1 + 9 +$PLINEGEN + 70 + 0 + 9 +$PSLTSCALE + 70 + 1 + 9 +$TREEDEPTH + 70 + 3020 + 9 +$PICKSTYLE + 70 + 1 + 9 +$CMLSTYLE + 2 +STANDARD + 9 +$CMLJUST + 70 + 0 + 9 +$CMLSCALE + 40 +20.0 + 9 +$PROXYGRAPHICS + 70 + 1 + 9 +$MEASUREMENT + 70 + 1 + 0 +ENDSEC + 0 +SECTION + 2 +CLASSES + 0 +CLASS + 1 +LWPOLYLINE + 2 +AcDbPolyline + 3 +"AutoCAD" + 90 + 0 +280 + 0 +281 + 1 + 0 +CLASS + 1 +DICTIONARYVAR + 2 +AcDbDictionaryVar + 3 +"AutoCAD" + 90 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +HATCH + 2 +AcDbHatch + 3 +"ACAD_SEDONA" + 90 + 0 +280 + 0 +281 + 1 + 0 +ENDSEC + 0 +SECTION + 2 +TABLES + 0 +TABLE + 2 +VPORT + 5 +8 +100 +AcDbSymbolTable + 70 + 4 + 0 +VPORT + 5 +73 +100 +AcDbSymbolTableRecord +100 +AcDbViewportTableRecord + 2 +*ACTIVE + 70 + 0 + 10 +0.0 + 20 +0.0 + 11 +1.0 + 21 +1.0 + 12 +229.995118 + 22 +178.148646 + 13 +0.0 + 23 +0.0 + 14 +10.0 + 24 +10.0 + 15 +10.0 + 25 +10.0 + 16 +0.0 + 26 +0.0 + 36 +1.0 + 17 +0.0 + 27 +0.0 + 37 +0.0 + 40 +299.676809 + 41 +1.578711 + 42 +50.0 + 43 +0.0 + 44 +0.0 + 50 +0.0 + 51 +0.0 + 71 + 0 + 72 + 100 + 73 + 1 + 74 + 1 + 75 + 0 + 76 + 0 + 77 + 0 + 78 + 0 + 0 +ENDTAB + 0 +TABLE + 2 +LTYPE + 5 +5 +100 +AcDbSymbolTable + 70 + 1 + 0 +LTYPE + 5 +12 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +BYBLOCK + 70 + 0 + 3 + + 72 + 65 + 73 + 0 + 40 +0.0 + 0 +LTYPE + 5 +13 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +BYLAYER + 70 + 0 + 3 + + 72 + 65 + 73 + 0 + 40 +0.0 + 0 +LTYPE + 5 +14 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +CONTINUOUS + 70 + 0 + 3 +Solid line + 72 + 65 + 73 + 0 + 40 +0.0 + 0 +ENDTAB + 0 +TABLE + 2 +LAYER + 5 +2 +100 +AcDbSymbolTable + 70 + 1 + 0 +LAYER + 5 +E +100 +AcDbSymbolTableRecord +100 +AcDbLayerTableRecord + 2 +0 + 70 + 0 + 62 + 7 + 6 +CONTINUOUS + 0 +ENDTAB + 0 +TABLE + 2 +STYLE + 5 +3 +100 +AcDbSymbolTable + 70 + 1 + 0 +STYLE + 5 +F +100 +AcDbSymbolTableRecord +100 +AcDbTextStyleTableRecord + 2 +STANDARD + 70 + 0 + 40 +0.0 + 41 +1.0 + 50 +0.0 + 71 + 0 + 42 +2.5 + 3 +txt + 4 + + 0 +ENDTAB + 0 +TABLE + 2 +VIEW + 5 +6 +100 +AcDbSymbolTable + 70 + 0 + 0 +ENDTAB + 0 +TABLE + 2 +UCS + 5 +7 +100 +AcDbSymbolTable + 70 + 0 + 0 +ENDTAB + 0 +TABLE + 2 +APPID + 5 +9 +100 +AcDbSymbolTable + 70 + 1 + 0 +APPID + 5 +10 +100 +AcDbSymbolTableRecord +100 +AcDbRegAppTableRecord + 2 +ACAD + 70 + 0 + 0 +ENDTAB + 0 +TABLE + 2 +DIMSTYLE + 5 +A +100 +AcDbSymbolTable + 70 + 1 + 0 +DIMSTYLE +105 +1D +100 +AcDbSymbolTableRecord +100 +AcDbDimStyleTableRecord + 2 +STANDARD + 70 + 0 + 3 + + 4 + + 5 + + 6 + + 7 + + 40 +1.0 + 41 +0.18 + 42 +0.0625 + 43 +0.38 + 44 +0.18 + 45 +0.0 + 46 +0.0 + 47 +0.0 + 48 +0.0 +140 +0.18 +141 +0.09 +142 +0.0 +143 +25.4 +144 +1.0 +145 +0.0 +146 +1.0 +147 +0.09 + 71 + 0 + 72 + 0 + 73 + 1 + 74 + 1 + 75 + 0 + 76 + 0 + 77 + 0 + 78 + 0 +170 + 0 +171 + 2 +172 + 0 +173 + 0 +174 + 0 +175 + 0 +176 + 0 +177 + 0 +178 + 0 +270 + 2 +271 + 4 +272 + 4 +273 + 2 +274 + 2 +340 +F +275 + 0 +280 + 0 +281 + 0 +282 + 0 +283 + 1 +284 + 0 +285 + 0 +286 + 0 +287 + 3 +288 + 0 + 0 +ENDTAB + 0 +TABLE + 2 +BLOCK_RECORD + 5 +1 +100 +AcDbSymbolTable + 70 + 0 + 0 +BLOCK_RECORD + 5 +18 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +*MODEL_SPACE + 0 +BLOCK_RECORD + 5 +15 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +*PAPER_SPACE + 0 +ENDTAB + 0 +ENDSEC + 0 +SECTION + 2 +BLOCKS + 0 +BLOCK + 5 +19 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +*MODEL_SPACE + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*MODEL_SPACE + 1 + + 0 +ENDBLK + 5 +1A +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +16 +100 +AcDbEntity + 67 + 1 + 8 +0 +100 +AcDbBlockBegin + 2 +*PAPER_SPACE + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*PAPER_SPACE + 1 + + 0 +ENDBLK + 5 +17 +100 +AcDbEntity + 67 + 1 + 8 +0 +100 +AcDbBlockEnd + 0 +ENDSEC + 0 +SECTION + 2 +ENTITIES + 0 +LWPOLYLINE + 5 +31 +102 +{ACAD_REACTORS +330 +6D +102 +} +100 +AcDbEntity + 8 +0 +100 +AcDbPolyline + 90 + 4 + 70 + 1 + 43 +0.0 + 10 +0.0 + 20 +0.0 + 10 +100.0 + 20 +0.0 + 10 +100.0 + 20 +50.0 + 10 +0.0 + 20 +50.0 + 0 +LWPOLYLINE + 5 +41 +102 +{ACAD_REACTORS +330 +62 +102 +} +100 +AcDbEntity + 8 +0 +100 +AcDbPolyline + 90 + 4 + 70 + 1 + 43 +0.0 + 10 +0.0 + 20 +70.0 + 10 +100.0 + 20 +70.0 + 10 +100.0 + 20 +120.0 + 10 +0.0 + 20 +120.0 + 0 +LWPOLYLINE + 5 +42 +102 +{ACAD_REACTORS +330 +5B +102 +} +100 +AcDbEntity + 8 +0 +100 +AcDbPolyline + 90 + 4 + 70 + 1 + 43 +0.0 + 10 +0.0 + 20 +140.0 + 10 +100.0 + 20 +140.0 + 10 +100.0 + 20 +190.0 + 10 +0.0 + 20 +190.0 + 0 +LWPOLYLINE + 5 +43 +102 +{ACAD_REACTORS +330 +52 +102 +} +100 +AcDbEntity + 8 +0 +100 +AcDbPolyline + 90 + 4 + 70 + 1 + 43 +0.0 + 10 +0.0 + 20 +210.0 + 10 +100.0 + 20 +210.0 + 10 +100.0 + 20 +260.0 + 10 +0.0 + 20 +260.0 + 0 +LWPOLYLINE + 5 +44 +102 +{ACAD_REACTORS +330 +6E +102 +} +100 +AcDbEntity + 8 +0 +100 +AcDbPolyline + 90 + 4 + 70 + 1 + 43 +0.0 + 10 +120.0 + 20 +0.0 + 10 +220.0 + 20 +0.0 + 10 +220.0 + 20 +50.0 + 10 +120.0 + 20 +50.0 + 0 +LWPOLYLINE + 5 +45 +102 +{ACAD_REACTORS +330 +66 +102 +} +100 +AcDbEntity + 8 +0 +100 +AcDbPolyline + 90 + 4 + 70 + 1 + 43 +0.0 + 10 +120.0 + 20 +70.0 + 10 +220.0 + 20 +70.0 + 10 +220.0 + 20 +120.0 + 10 +120.0 + 20 +120.0 + 0 +LWPOLYLINE + 5 +46 +102 +{ACAD_REACTORS +330 +5C +102 +} +100 +AcDbEntity + 8 +0 +100 +AcDbPolyline + 90 + 4 + 70 + 1 + 43 +0.0 + 10 +120.0 + 20 +140.0 + 10 +220.0 + 20 +140.0 + 10 +220.0 + 20 +190.0 + 10 +120.0 + 20 +190.0 + 0 +LWPOLYLINE + 5 +47 +102 +{ACAD_REACTORS +330 +53 +102 +} +100 +AcDbEntity + 8 +0 +100 +AcDbPolyline + 90 + 4 + 70 + 1 + 43 +0.0 + 10 +120.0 + 20 +210.0 + 10 +220.0 + 20 +210.0 + 10 +220.0 + 20 +260.0 + 10 +120.0 + 20 +260.0 + 0 +LWPOLYLINE + 5 +48 +102 +{ACAD_REACTORS +330 +70 +102 +} +100 +AcDbEntity + 8 +0 +100 +AcDbPolyline + 90 + 4 + 70 + 1 + 43 +0.0 + 10 +240.0 + 20 +0.0 + 10 +340.0 + 20 +0.0 + 10 +340.0 + 20 +50.0 + 10 +240.0 + 20 +50.0 + 0 +LWPOLYLINE + 5 +49 +102 +{ACAD_REACTORS +330 +68 +102 +} +100 +AcDbEntity + 8 +0 +100 +AcDbPolyline + 90 + 4 + 70 + 1 + 43 +0.0 + 10 +240.0 + 20 +70.0 + 10 +340.0 + 20 +70.0 + 10 +340.0 + 20 +120.0 + 10 +240.0 + 20 +120.0 + 0 +LWPOLYLINE + 5 +4A +102 +{ACAD_REACTORS +330 +5D +102 +} +100 +AcDbEntity + 8 +0 +100 +AcDbPolyline + 90 + 4 + 70 + 1 + 43 +0.0 + 10 +240.0 + 20 +140.0 + 10 +340.0 + 20 +140.0 + 10 +340.0 + 20 +190.0 + 10 +240.0 + 20 +190.0 + 0 +LWPOLYLINE + 5 +4B +102 +{ACAD_REACTORS +330 +54 +102 +} +100 +AcDbEntity + 8 +0 +100 +AcDbPolyline + 90 + 4 + 70 + 1 + 43 +0.0 + 10 +240.0 + 20 +210.0 + 10 +340.0 + 20 +210.0 + 10 +340.0 + 20 +260.0 + 10 +240.0 + 20 +260.0 + 0 +LWPOLYLINE + 5 +4C +102 +{ACAD_REACTORS +330 +71 +102 +} +100 +AcDbEntity + 8 +0 +100 +AcDbPolyline + 90 + 4 + 70 + 1 + 43 +0.0 + 10 +360.0 + 20 +0.0 + 10 +460.0 + 20 +0.0 + 10 +460.0 + 20 +50.0 + 10 +360.0 + 20 +50.0 + 0 +LWPOLYLINE + 5 +4D +102 +{ACAD_REACTORS +330 +6B +102 +} +100 +AcDbEntity + 8 +0 +100 +AcDbPolyline + 90 + 4 + 70 + 1 + 43 +0.0 + 10 +360.0 + 20 +70.0 + 10 +460.0 + 20 +70.0 + 10 +460.0 + 20 +120.0 + 10 +360.0 + 20 +120.0 + 0 +LWPOLYLINE + 5 +4E +102 +{ACAD_REACTORS +330 +60 +102 +} +100 +AcDbEntity + 8 +0 +100 +AcDbPolyline + 90 + 4 + 70 + 1 + 43 +0.0 + 10 +360.0 + 20 +140.0 + 10 +460.0 + 20 +140.0 + 10 +460.0 + 20 +190.0 + 10 +360.0 + 20 +190.0 + 0 +LWPOLYLINE + 5 +4F +102 +{ACAD_REACTORS +330 +57 +102 +} +100 +AcDbEntity + 8 +0 +100 +AcDbPolyline + 90 + 4 + 70 + 1 + 43 +0.0 + 10 +360.0 + 20 +210.0 + 10 +460.0 + 20 +210.0 + 10 +460.0 + 20 +260.0 + 10 +360.0 + 20 +260.0 + 0 +HATCH + 5 +52 +100 +AcDbEntity + 8 +0 +100 +AcDbHatch + 10 +0.0 + 20 +0.0 + 30 +0.0 +210 +0.0 +220 +0.0 +230 +1.0 + 2 +ANGLE + 70 + 0 + 71 + 1 + 91 + 1 + 92 + 1 + 93 + 4 + 72 + 1 + 10 +0.0 + 20 +210.0 + 11 +100.0 + 21 +210.0 + 72 + 1 + 10 +100.0 + 20 +210.0 + 11 +100.0 + 21 +260.0 + 72 + 1 + 10 +100.0 + 20 +260.0 + 11 +0.0 + 21 +260.0 + 72 + 1 + 10 +0.0 + 20 +260.0 + 11 +0.0 + 21 +210.0 + 97 + 1 +330 +43 + 75 + 0 + 76 + 1 + 52 +0.0 + 41 +1.0 + 77 + 0 + 78 + 2 + 53 +0.0 + 43 +0.0 + 44 +0.0 + 45 +0.0 + 46 +6.985 + 79 + 2 + 49 +5.08 + 49 +-1.905 + 53 +90.0 + 43 +0.0 + 44 +0.0 + 45 +-6.985 + 46 +0.0000000000000004 + 79 + 2 + 49 +5.08 + 49 +-1.905 + 98 + 1 + 10 +0.0 + 20 +0.0 + 0 +HATCH + 5 +53 +100 +AcDbEntity + 8 +0 +100 +AcDbHatch + 10 +0.0 + 20 +0.0 + 30 +0.0 +210 +0.0 +220 +0.0 +230 +1.0 + 2 +ANSI31 + 70 + 0 + 71 + 1 + 91 + 1 + 92 + 1 + 93 + 4 + 72 + 1 + 10 +120.0 + 20 +210.0 + 11 +220.0 + 21 +210.0 + 72 + 1 + 10 +220.0 + 20 +210.0 + 11 +220.0 + 21 +260.0 + 72 + 1 + 10 +220.0 + 20 +260.0 + 11 +120.0 + 21 +260.0 + 72 + 1 + 10 +120.0 + 20 +260.0 + 11 +120.0 + 21 +210.0 + 97 + 1 +330 +47 + 75 + 0 + 76 + 1 + 52 +0.0 + 41 +1.0 + 77 + 0 + 78 + 1 + 53 +45.0 + 43 +0.0 + 44 +0.0 + 45 +-2.245064030267287 + 46 +2.245064030267288 + 79 + 0 + 98 + 1 + 10 +0.0 + 20 +0.0 + 0 +HATCH + 5 +54 +100 +AcDbEntity + 8 +0 +100 +AcDbHatch + 10 +0.0 + 20 +0.0 + 30 +0.0 +210 +0.0 +220 +0.0 +230 +1.0 + 2 +ANSI32 + 70 + 0 + 71 + 1 + 91 + 1 + 92 + 1 + 93 + 4 + 72 + 1 + 10 +240.0 + 20 +210.0 + 11 +340.0 + 21 +210.0 + 72 + 1 + 10 +340.0 + 20 +210.0 + 11 +340.0 + 21 +260.0 + 72 + 1 + 10 +340.0 + 20 +260.0 + 11 +240.0 + 21 +260.0 + 72 + 1 + 10 +240.0 + 20 +260.0 + 11 +240.0 + 21 +210.0 + 97 + 1 +330 +4B + 75 + 0 + 76 + 1 + 52 +0.0 + 41 +1.0 + 77 + 0 + 78 + 2 + 53 +45.0 + 43 +0.0 + 44 +0.0 + 45 +-6.735192090801865 + 46 +6.735192090801866 + 79 + 0 + 53 +45.0 + 43 +4.49013 + 44 +0.0 + 45 +-6.735192090801865 + 46 +6.735192090801866 + 79 + 0 + 98 + 1 + 10 +0.0 + 20 +0.0 + 0 +HATCH + 5 +57 +100 +AcDbEntity + 8 +0 +100 +AcDbHatch + 10 +0.0 + 20 +0.0 + 30 +0.0 +210 +0.0 +220 +0.0 +230 +1.0 + 2 +ANSI33 + 70 + 0 + 71 + 1 + 91 + 1 + 92 + 1 + 93 + 4 + 72 + 1 + 10 +360.0 + 20 +210.0 + 11 +460.0 + 21 +210.0 + 72 + 1 + 10 +460.0 + 20 +210.0 + 11 +460.0 + 21 +260.0 + 72 + 1 + 10 +460.0 + 20 +260.0 + 11 +360.0 + 21 +260.0 + 72 + 1 + 10 +360.0 + 20 +260.0 + 11 +360.0 + 21 +210.0 + 97 + 1 +330 +4F + 75 + 0 + 76 + 1 + 52 +0.0 + 41 +1.0 + 77 + 0 + 78 + 2 + 53 +45.0 + 43 +0.0 + 44 +0.0 + 45 +-4.490128060534575 + 46 +4.490128060534576 + 79 + 0 + 53 +45.0 + 43 +4.49013 + 44 +0.0 + 45 +-4.490128060534575 + 46 +4.490128060534576 + 79 + 2 + 49 +3.175 + 49 +-1.5875 + 98 + 1 + 10 +0.0 + 20 +0.0 + 0 +HATCH + 5 +5B +100 +AcDbEntity + 8 +0 +100 +AcDbHatch + 10 +0.0 + 20 +0.0 + 30 +0.0 +210 +0.0 +220 +0.0 +230 +1.0 + 2 +AR-CONC + 70 + 0 + 71 + 1 + 91 + 1 + 92 + 1 + 93 + 4 + 72 + 1 + 10 +0.0 + 20 +140.0 + 11 +100.0 + 21 +140.0 + 72 + 1 + 10 +100.0 + 20 +140.0 + 11 +100.0 + 21 +190.0 + 72 + 1 + 10 +100.0 + 20 +190.0 + 11 +0.0 + 21 +190.0 + 72 + 1 + 10 +0.0 + 20 +190.0 + 11 +0.0 + 21 +140.0 + 97 + 1 +330 +42 + 75 + 0 + 76 + 1 + 52 +0.0 + 41 +0.1 + 77 + 0 + 78 + 13 + 53 +50.0 + 43 +0.0 + 44 +0.0 + 45 +18.2184668996004 + 46 +-1.593908553890308 + 79 + 2 + 49 +1.905 + 49 +-20.955 + 53 +355.0 + 43 +0.0 + 44 +0.0 + 45 +-3.524282597566699 + 46 +19.10566428821799 + 79 + 2 + 49 +1.524 + 49 +-16.764 + 53 +100.451 + 43 +1.5182 + 44 +-0.132825 + 45 +14.69425016659592 + 46 +17.51166878202918 + 79 + 2 + 49 +1.619 + 49 +-17.809 + 53 +46.1842 + 43 +0.0 + 44 +5.08 + 45 +27.10790408921299 + 46 +-4.204232793272715 + 79 + 2 + 49 +2.8575 + 49 +-31.4325 + 53 +96.6356 + 43 +2.25899 + 44 +4.72965 + 45 +23.74042344662371 + 46 +24.74255558900492 + 79 + 2 + 49 +2.4285 + 49 +-26.7135 + 53 +351.184 + 43 +0.0 + 44 +5.08 + 45 +23.74046058139339 + 46 +24.74251178605976 + 79 + 2 + 49 +2.286 + 49 +-25.146 + 53 +21.0 + 43 +2.54 + 44 +3.81 + 45 +15.16148798353833 + 46 +-10.22655185167625 + 79 + 2 + 49 +1.905 + 49 +-20.955 + 53 +326.0 + 43 +2.54 + 44 +3.81 + 45 +6.180202834764707 + 46 +18.41879661223192 + 79 + 2 + 49 +1.524 + 49 +-16.764 + 53 +71.4514 + 43 +3.80345 + 44 +2.95779 + 45 +21.34164907701245 + 46 +8.192285771605744 + 79 + 2 + 49 +1.619 + 49 +-17.809 + 53 +37.5 + 43 +0.0 + 44 +0.0 + 45 +0.3088603250591817 + 46 +8.455503887315311 + 79 + 6 + 49 +0.0 + 49 +-16.5608 + 49 +0.0 + 49 +-17.018 + 49 +0.0 + 49 +-16.8275 + 53 +7.5 + 43 +0.0 + 44 +0.0 + 45 +6.681966251030575 + 46 +10.01805748181195 + 79 + 6 + 49 +0.0 + 49 +-9.7028 + 49 +0.0 + 49 +-16.1798 + 49 +0.0 + 49 +-6.4135 + 53 +327.5 + 43 +-5.6642 + 44 +0.0 + 45 +13.55905951668714 + 46 +-0.5728743992673459 + 79 + 6 + 49 +0.0 + 49 +-6.35 + 49 +0.0 + 49 +-19.812 + 49 +0.0 + 49 +-26.289 + 53 +317.5 + 43 +-8.2042 + 44 +0.0 + 45 +14.8129181386018 + 46 +2.542649103333301 + 79 + 6 + 49 +0.0 + 49 +-8.255 + 49 +0.0 + 49 +-13.1572 + 49 +0.0 + 49 +-18.669 + 98 + 1 + 10 +0.0 + 20 +0.0 + 0 +HATCH + 5 +5C +100 +AcDbEntity + 8 +0 +100 +AcDbHatch + 10 +0.0 + 20 +0.0 + 30 +0.0 +210 +0.0 +220 +0.0 +230 +1.0 + 2 +AR-B816 + 70 + 0 + 71 + 1 + 91 + 1 + 92 + 1 + 93 + 4 + 72 + 1 + 10 +120.0 + 20 +140.0 + 11 +220.0 + 21 +140.0 + 72 + 1 + 10 +220.0 + 20 +140.0 + 11 +220.0 + 21 +190.0 + 72 + 1 + 10 +220.0 + 20 +190.0 + 11 +120.0 + 21 +190.0 + 72 + 1 + 10 +120.0 + 20 +190.0 + 11 +120.0 + 21 +140.0 + 97 + 1 +330 +46 + 75 + 0 + 76 + 1 + 52 +0.0 + 41 +0.1 + 77 + 0 + 78 + 2 + 53 +0.0 + 43 +0.0 + 44 +0.0 + 45 +0.0 + 46 +20.32 + 79 + 0 + 53 +90.0 + 43 +0.0 + 44 +0.0 + 45 +-20.32 + 46 +20.32 + 79 + 2 + 49 +20.32 + 49 +-20.32 + 98 + 1 + 10 +0.0 + 20 +0.0 + 0 +HATCH + 5 +5D +100 +AcDbEntity + 8 +0 +100 +AcDbHatch + 10 +0.0 + 20 +0.0 + 30 +0.0 +210 +0.0 +220 +0.0 +230 +1.0 + 2 +AR-PARQ1 + 70 + 0 + 71 + 1 + 91 + 1 + 92 + 1 + 93 + 4 + 72 + 1 + 10 +240.0 + 20 +140.0 + 11 +340.0 + 21 +140.0 + 72 + 1 + 10 +340.0 + 20 +140.0 + 11 +340.0 + 21 +190.0 + 72 + 1 + 10 +340.0 + 20 +190.0 + 11 +240.0 + 21 +190.0 + 72 + 1 + 10 +240.0 + 20 +190.0 + 11 +240.0 + 21 +140.0 + 97 + 1 +330 +4A + 75 + 0 + 76 + 1 + 52 +0.0 + 41 +0.1 + 77 + 0 + 78 + 14 + 53 +90.0 + 43 +0.0 + 44 +0.0 + 45 +-30.48 + 46 +30.48 + 79 + 2 + 49 +30.48 + 49 +-30.48 + 53 +90.0 + 43 +5.08 + 44 +0.0 + 45 +-30.48 + 46 +30.48 + 79 + 2 + 49 +30.48 + 49 +-30.48 + 53 +90.0 + 43 +10.16 + 44 +0.0 + 45 +-30.48 + 46 +30.48 + 79 + 2 + 49 +30.48 + 49 +-30.48 + 53 +90.0 + 43 +15.24 + 44 +0.0 + 45 +-30.48 + 46 +30.48 + 79 + 2 + 49 +30.48 + 49 +-30.48 + 53 +90.0 + 43 +20.32 + 44 +0.0 + 45 +-30.48 + 46 +30.48 + 79 + 2 + 49 +30.48 + 49 +-30.48 + 53 +90.0 + 43 +25.4 + 44 +0.0 + 45 +-30.48 + 46 +30.48 + 79 + 2 + 49 +30.48 + 49 +-30.48 + 53 +90.0 + 43 +30.48 + 44 +0.0 + 45 +-30.48 + 46 +30.48 + 79 + 2 + 49 +30.48 + 49 +-30.48 + 53 +0.0 + 43 +0.0 + 44 +30.48 + 45 +30.48 + 46 +-30.48 + 79 + 2 + 49 +30.48 + 49 +-30.48 + 53 +0.0 + 43 +0.0 + 44 +35.56 + 45 +30.48 + 46 +-30.48 + 79 + 2 + 49 +30.48 + 49 +-30.48 + 53 +0.0 + 43 +0.0 + 44 +40.64 + 45 +30.48 + 46 +-30.48 + 79 + 2 + 49 +30.48 + 49 +-30.48 + 53 +0.0 + 43 +0.0 + 44 +45.72 + 45 +30.48 + 46 +-30.48 + 79 + 2 + 49 +30.48 + 49 +-30.48 + 53 +0.0 + 43 +0.0 + 44 +50.8 + 45 +30.48 + 46 +-30.48 + 79 + 2 + 49 +30.48 + 49 +-30.48 + 53 +0.0 + 43 +0.0 + 44 +55.88 + 45 +30.48 + 46 +-30.48 + 79 + 2 + 49 +30.48 + 49 +-30.48 + 53 +0.0 + 43 +0.0 + 44 +60.96 + 45 +30.48 + 46 +-30.48 + 79 + 2 + 49 +30.48 + 49 +-30.48 + 98 + 1 + 10 +0.0 + 20 +0.0 + 0 +HATCH + 5 +60 +100 +AcDbEntity + 8 +0 +100 +AcDbHatch + 10 +0.0 + 20 +0.0 + 30 +0.0 +210 +0.0 +220 +0.0 +230 +1.0 + 2 +AR-RROOF + 70 + 0 + 71 + 1 + 91 + 1 + 92 + 1 + 93 + 4 + 72 + 1 + 10 +360.0 + 20 +140.0 + 11 +460.0 + 21 +140.0 + 72 + 1 + 10 +460.0 + 20 +140.0 + 11 +460.0 + 21 +190.0 + 72 + 1 + 10 +460.0 + 20 +190.0 + 11 +360.0 + 21 +190.0 + 72 + 1 + 10 +360.0 + 20 +190.0 + 11 +360.0 + 21 +140.0 + 97 + 1 +330 +4E + 75 + 0 + 76 + 1 + 52 +0.0 + 41 +0.5 + 77 + 0 + 78 + 3 + 53 +0.0 + 43 +0.0 + 44 +0.0 + 45 +27.94 + 46 +12.7 + 79 + 4 + 49 +190.5 + 49 +-25.4 + 49 +63.5 + 49 +-12.7 + 53 +0.0 + 43 +16.891 + 44 +6.35 + 45 +-12.7 + 46 +16.89099999999999 + 79 + 4 + 49 +38.1 + 49 +-4.191 + 49 +76.2 + 49 +-9.525 + 53 +0.0 + 43 +6.35 + 44 +10.795 + 45 +66.04 + 46 +8.509 + 79 + 4 + 49 +101.6 + 49 +-17.78 + 49 +50.8 + 49 +-12.7 + 98 + 1 + 10 +0.0 + 20 +0.0 + 0 +HATCH + 5 +62 +100 +AcDbEntity + 8 +0 +100 +AcDbHatch + 10 +0.0 + 20 +0.0 + 30 +0.0 +210 +0.0 +220 +0.0 +230 +1.0 + 2 +ANSI38 + 70 + 0 + 71 + 1 + 91 + 1 + 92 + 1 + 93 + 4 + 72 + 1 + 10 +0.0 + 20 +70.0 + 11 +100.0 + 21 +70.0 + 72 + 1 + 10 +100.0 + 20 +70.0 + 11 +100.0 + 21 +120.0 + 72 + 1 + 10 +100.0 + 20 +120.0 + 11 +0.0 + 21 +120.0 + 72 + 1 + 10 +0.0 + 20 +120.0 + 11 +0.0 + 21 +70.0 + 97 + 1 +330 +41 + 75 + 0 + 76 + 1 + 52 +0.0 + 41 +1.0 + 77 + 0 + 78 + 2 + 53 +45.0 + 43 +0.0 + 44 +0.0 + 45 +-2.245064030267287 + 46 +2.245064030267288 + 79 + 0 + 53 +135.0 + 43 +0.0 + 44 +0.0 + 45 +-6.735192090801864 + 46 +2.245064030267288 + 79 + 2 + 49 +7.9375 + 49 +-4.7625 + 98 + 1 + 10 +0.0 + 20 +0.0 + 0 +HATCH + 5 +66 +100 +AcDbEntity + 8 +0 +100 +AcDbHatch + 10 +0.0 + 20 +0.0 + 30 +0.0 +210 +0.0 +220 +0.0 +230 +1.0 + 2 +AR-RSHKE + 70 + 0 + 71 + 1 + 91 + 1 + 92 + 1 + 93 + 4 + 72 + 1 + 10 +120.0 + 20 +70.0 + 11 +220.0 + 21 +70.0 + 72 + 1 + 10 +220.0 + 20 +70.0 + 11 +220.0 + 21 +120.0 + 72 + 1 + 10 +220.0 + 20 +120.0 + 11 +120.0 + 21 +120.0 + 72 + 1 + 10 +120.0 + 20 +120.0 + 11 +120.0 + 21 +70.0 + 97 + 1 +330 +45 + 75 + 0 + 76 + 1 + 52 +0.0 + 41 +0.02 + 77 + 0 + 78 + 9 + 53 +0.0 + 43 +0.0 + 44 +0.0 + 45 +12.954 + 46 +6.096 + 79 + 6 + 49 +3.048 + 49 +-2.54 + 49 +3.556 + 49 +-1.524 + 49 +4.572 + 49 +-2.032 + 53 +0.0 + 43 +3.048 + 44 +0.254 + 45 +12.954 + 46 +6.096 + 79 + 4 + 49 +2.54 + 49 +-9.652 + 49 +2.032 + 49 +-3.048 + 53 +0.0 + 43 +9.144 + 44 +-0.381 + 45 +12.954 + 46 +6.096 + 79 + 2 + 49 +1.524 + 49 +-15.748 + 53 +90.0 + 43 +0.0 + 44 +0.0 + 45 +-4.317999999999999 + 46 +6.096 + 79 + 2 + 49 +5.842 + 49 +-18.542 + 53 +90.0 + 43 +3.048 + 44 +0.0 + 45 +-4.317999999999999 + 46 +6.096 + 79 + 2 + 49 +5.715 + 49 +-18.669 + 53 +90.0 + 43 +5.588 + 44 +0.0 + 45 +-4.317999999999999 + 46 +6.096 + 79 + 2 + 49 +5.334 + 49 +-19.05 + 53 +90.0 + 43 +9.144 + 44 +-0.381 + 45 +-4.317999999999999 + 46 +6.096 + 79 + 2 + 49 +5.842 + 49 +-18.542 + 53 +90.0 + 43 +10.668 + 44 +-0.381 + 45 +-4.317999999999999 + 46 +6.096 + 79 + 2 + 49 +5.842 + 49 +-18.542 + 53 +90.0 + 43 +15.24 + 44 +0.0 + 45 +-4.317999999999999 + 46 +6.096 + 79 + 2 + 49 +5.588 + 49 +-18.796 + 98 + 1 + 10 +0.0 + 20 +0.0 + 0 +HATCH + 5 +68 +100 +AcDbEntity + 8 +0 +100 +AcDbHatch + 10 +0.0 + 20 +0.0 + 30 +0.0 +210 +0.0 +220 +0.0 +230 +1.0 + 2 +ESCHER + 70 + 0 + 71 + 1 + 91 + 1 + 92 + 1 + 93 + 4 + 72 + 1 + 10 +240.0 + 20 +70.0 + 11 +340.0 + 21 +70.0 + 72 + 1 + 10 +340.0 + 20 +70.0 + 11 +340.0 + 21 +120.0 + 72 + 1 + 10 +340.0 + 20 +120.0 + 11 +240.0 + 21 +120.0 + 72 + 1 + 10 +240.0 + 20 +120.0 + 11 +240.0 + 21 +70.0 + 97 + 1 +330 +49 + 75 + 0 + 76 + 1 + 52 +0.0 + 41 +1.0 + 77 + 0 + 78 + 21 + 53 +60.0 + 43 +0.0 + 44 +0.0 + 45 +-30.48003957099593 + 46 +0.0000228463251588 + 79 + 2 + 49 +27.94 + 49 +-2.54 + 53 +180.0 + 43 +0.0 + 44 +0.0 + 45 +15.23999999999999 + 46 +-26.3965 + 79 + 2 + 49 +27.94 + 49 +-2.54 + 53 +300.0 + 43 +0.0 + 44 +0.0 + 45 +30.48003957099593 + 46 +0.0000228463251588 + 79 + 2 + 49 +27.94 + 49 +-2.54 + 53 +60.0 + 43 +2.54 + 44 +0.0 + 45 +-30.48003957099593 + 46 +0.0000228463251588 + 79 + 2 + 49 +5.08 + 49 +-25.4 + 53 +300.0 + 43 +2.54 + 44 +0.0 + 45 +30.48003957099593 + 46 +0.0000228463251588 + 79 + 2 + 49 +5.08 + 49 +-25.4 + 53 +60.0 + 43 +-1.27 + 44 +2.1997 + 45 +-30.48003957099593 + 46 +0.0000228463251588 + 79 + 2 + 49 +5.08 + 49 +-25.4 + 53 +180.0 + 43 +-1.27 + 44 +2.1997 + 45 +15.23999999999999 + 46 +-26.3965 + 79 + 2 + 49 +5.08 + 49 +-25.4 + 53 +300.0 + 43 +-1.27 + 44 +-2.1997 + 45 +30.48003957099593 + 46 +0.0000228463251588 + 79 + 2 + 49 +5.08 + 49 +-25.4 + 53 +180.0 + 43 +-1.27 + 44 +-2.1997 + 45 +15.23999999999999 + 46 +-26.3965 + 79 + 2 + 49 +5.08 + 49 +-25.4 + 53 +60.0 + 43 +-10.16 + 44 +0.0 + 45 +-30.48003957099593 + 46 +0.0000228463251588 + 79 + 2 + 49 +5.08 + 49 +-25.4 + 53 +300.0 + 43 +-10.16 + 44 +0.0 + 45 +30.48003957099593 + 46 +0.0000228463251588 + 79 + 2 + 49 +5.08 + 49 +-25.4 + 53 +60.0 + 43 +5.08 + 44 +-8.79882 + 45 +-30.48003957099593 + 46 +0.0000228463251588 + 79 + 2 + 49 +5.08 + 49 +-25.4 + 53 +180.0 + 43 +5.08 + 44 +-8.79882 + 45 +15.23999999999999 + 46 +-26.3965 + 79 + 2 + 49 +5.08 + 49 +-25.4 + 53 +300.0 + 43 +5.08 + 44 +8.79882 + 45 +30.48003957099593 + 46 +0.0000228463251588 + 79 + 2 + 49 +5.08 + 49 +-25.4 + 53 +180.0 + 43 +5.08 + 44 +8.79882 + 45 +15.23999999999999 + 46 +-26.3965 + 79 + 2 + 49 +5.08 + 49 +-25.4 + 53 +0.0 + 43 +5.08 + 44 +4.39941 + 45 +-15.24 + 46 +26.3965 + 79 + 2 + 49 +17.78 + 49 +-12.7 + 53 +0.0 + 43 +5.08 + 44 +-4.39941 + 45 +-15.24 + 46 +26.3965 + 79 + 2 + 49 +17.78 + 49 +-12.7 + 53 +120.0 + 43 +1.27 + 44 +6.59911 + 45 +-30.48003957099593 + 46 +-0.0000228463251482 + 79 + 2 + 49 +17.78 + 49 +-12.7 + 53 +120.0 + 43 +-6.35 + 44 +2.1997 + 45 +-30.48003957099593 + 46 +-0.0000228463251482 + 79 + 2 + 49 +17.78 + 49 +-12.7 + 53 +240.0 + 43 +-6.35 + 44 +-2.1997 + 45 +15.24003957099592 + 46 +-26.39647715367485 + 79 + 2 + 49 +17.78 + 49 +-12.7 + 53 +240.0 + 43 +1.27 + 44 +-6.59911 + 45 +15.24003957099592 + 46 +-26.39647715367485 + 79 + 2 + 49 +17.78 + 49 +-12.7 + 98 + 1 + 10 +0.0 + 20 +0.0 + 0 +HATCH + 5 +6B +100 +AcDbEntity + 8 +0 +100 +AcDbHatch + 10 +0.0 + 20 +0.0 + 30 +0.0 +210 +0.0 +220 +0.0 +230 +1.0 + 2 +HONEY + 70 + 0 + 71 + 1 + 91 + 1 + 92 + 1 + 93 + 4 + 72 + 1 + 10 +360.0 + 20 +70.0 + 11 +460.0 + 21 +70.0 + 72 + 1 + 10 +460.0 + 20 +70.0 + 11 +460.0 + 21 +120.0 + 72 + 1 + 10 +460.0 + 20 +120.0 + 11 +360.0 + 21 +120.0 + 72 + 1 + 10 +360.0 + 20 +120.0 + 11 +360.0 + 21 +70.0 + 97 + 1 +330 +4D + 75 + 0 + 76 + 1 + 52 +0.0 + 41 +3.0 + 77 + 0 + 78 + 3 + 53 +0.0 + 43 +0.0 + 44 +0.0 + 45 +14.2875 + 46 +8.248889999999999 + 79 + 2 + 49 +9.525 + 49 +-19.05 + 53 +120.0 + 43 +0.0 + 44 +0.0 + 45 +-14.28749829302341 + 46 +8.248892956570172 + 79 + 2 + 49 +9.525 + 49 +-19.05 + 53 +60.0 + 43 +0.0 + 44 +0.0 + 45 +0.0000017069765841 + 46 +16.49778295657016 + 79 + 2 + 49 +-19.05 + 49 +9.525 + 98 + 1 + 10 +0.0 + 20 +0.0 + 0 +HATCH + 5 +6D +100 +AcDbEntity + 8 +0 +100 +AcDbHatch + 10 +0.0 + 20 +0.0 + 30 +0.0 +210 +0.0 +220 +0.0 +230 +1.0 + 2 +STARS + 70 + 0 + 71 + 1 + 91 + 1 + 92 + 1 + 93 + 4 + 72 + 1 + 10 +0.0 + 20 +0.0 + 11 +100.0 + 21 +0.0 + 72 + 1 + 10 +100.0 + 20 +0.0 + 11 +100.0 + 21 +50.0 + 72 + 1 + 10 +100.0 + 20 +50.0 + 11 +0.0 + 21 +50.0 + 72 + 1 + 10 +0.0 + 20 +50.0 + 11 +0.0 + 21 +0.0 + 97 + 1 +330 +31 + 75 + 0 + 76 + 1 + 52 +0.0 + 41 +1.0 + 77 + 0 + 78 + 3 + 53 +0.0 + 43 +0.0 + 44 +0.0 + 45 +0.0 + 46 +5.499259999999999 + 79 + 2 + 49 +3.175 + 49 +-3.175 + 53 +60.0 + 43 +0.0 + 44 +0.0 + 45 +-4.762498862015611 + 46 +2.74963 + 79 + 2 + 49 +3.175 + 49 +-3.175 + 53 +120.0 + 43 +1.5875 + 44 +2.74963 + 45 +-4.762498862015611 + 46 +-2.749629999999998 + 79 + 2 + 49 +3.175 + 49 +-3.175 + 98 + 1 + 10 +0.0 + 20 +0.0 + 0 +HATCH + 5 +6E +100 +AcDbEntity + 8 +0 +100 +AcDbHatch + 10 +0.0 + 20 +0.0 + 30 +0.0 +210 +0.0 +220 +0.0 +230 +1.0 + 2 +ZIGZAG + 70 + 0 + 71 + 1 + 91 + 1 + 92 + 1 + 93 + 4 + 72 + 1 + 10 +120.0 + 20 +0.0 + 11 +220.0 + 21 +0.0 + 72 + 1 + 10 +220.0 + 20 +0.0 + 11 +220.0 + 21 +50.0 + 72 + 1 + 10 +220.0 + 20 +50.0 + 11 +120.0 + 21 +50.0 + 72 + 1 + 10 +120.0 + 20 +50.0 + 11 +120.0 + 21 +0.0 + 97 + 1 +330 +44 + 75 + 0 + 76 + 1 + 52 +0.0 + 41 +1.0 + 77 + 0 + 78 + 2 + 53 +0.0 + 43 +0.0 + 44 +0.0 + 45 +3.174999999999999 + 46 +3.174999999999999 + 79 + 2 + 49 +3.175 + 49 +-3.175 + 53 +90.0 + 43 +3.175 + 44 +0.0 + 45 +-3.174999999999999 + 46 +3.174999999999999 + 79 + 2 + 49 +3.175 + 49 +-3.175 + 98 + 1 + 10 +0.0 + 20 +0.0 + 0 +HATCH + 5 +70 +100 +AcDbEntity + 8 +0 +100 +AcDbHatch + 10 +0.0 + 20 +0.0 + 30 +0.0 +210 +0.0 +220 +0.0 +230 +1.0 + 2 +HOUND + 70 + 0 + 71 + 1 + 91 + 1 + 92 + 1 + 93 + 4 + 72 + 1 + 10 +240.0 + 20 +0.0 + 11 +340.0 + 21 +0.0 + 72 + 1 + 10 +340.0 + 20 +0.0 + 11 +340.0 + 21 +50.0 + 72 + 1 + 10 +340.0 + 20 +50.0 + 11 +240.0 + 21 +50.0 + 72 + 1 + 10 +240.0 + 20 +50.0 + 11 +240.0 + 21 +0.0 + 97 + 1 +330 +48 + 75 + 0 + 76 + 1 + 52 +0.0 + 41 +2.0 + 77 + 0 + 78 + 2 + 53 +0.0 + 43 +0.0 + 44 +0.0 + 45 +12.7 + 46 +3.174999999999999 + 79 + 2 + 49 +50.8 + 49 +-25.4 + 53 +90.0 + 43 +0.0 + 44 +0.0 + 45 +-3.175 + 46 +-12.7 + 79 + 2 + 49 +50.8 + 49 +-25.4 + 98 + 1 + 10 +0.0 + 20 +0.0 + 0 +HATCH + 5 +71 +100 +AcDbEntity + 8 +0 +100 +AcDbHatch + 10 +0.0 + 20 +0.0 + 30 +0.0 +210 +0.0 +220 +0.0 +230 +1.0 + 2 +NET3 + 70 + 0 + 71 + 1 + 91 + 1 + 92 + 1 + 93 + 4 + 72 + 1 + 10 +360.0 + 20 +0.0 + 11 +460.0 + 21 +0.0 + 72 + 1 + 10 +460.0 + 20 +0.0 + 11 +460.0 + 21 +50.0 + 72 + 1 + 10 +460.0 + 20 +50.0 + 11 +360.0 + 21 +50.0 + 72 + 1 + 10 +360.0 + 20 +50.0 + 11 +360.0 + 21 +0.0 + 97 + 1 +330 +4C + 75 + 0 + 76 + 1 + 52 +0.0 + 41 +2.0 + 77 + 0 + 78 + 3 + 53 +0.0 + 43 +0.0 + 44 +0.0 + 45 +0.0 + 46 +6.349999999999999 + 79 + 0 + 53 +60.0 + 43 +0.0 + 44 +0.0 + 45 +-5.499261314031184 + 46 +3.175 + 79 + 0 + 53 +120.0 + 43 +0.0 + 44 +0.0 + 45 +-5.499261314031185 + 46 +-3.174999999999998 + 79 + 0 + 98 + 1 + 10 +0.0 + 20 +0.0 + 0 +ENDSEC + 0 +SECTION + 2 +OBJECTS + 0 +DICTIONARY + 5 +C +100 +AcDbDictionary + 3 +ACAD_GROUP +350 +D + 3 +ACAD_MLINESTYLE +350 +1B + 3 +ACDBVARIABLEDICTIONARY +350 +50 + 0 +DICTIONARY + 5 +D +102 +{ACAD_REACTORS +330 +C +102 +} +100 +AcDbDictionary + 0 +DICTIONARY + 5 +1B +102 +{ACAD_REACTORS +330 +C +102 +} +100 +AcDbDictionary + 3 +STANDARD +350 +1C + 0 +DICTIONARY + 5 +50 +102 +{ACAD_REACTORS +330 +C +102 +} +100 +AcDbDictionary + 3 +SORTENTS +350 +51 + 0 +MLINESTYLE + 5 +1C +102 +{ACAD_REACTORS +330 +1B +102 +} +100 +AcDbMlineStyle + 2 +STANDARD + 70 + 0 + 3 + + 62 + 256 + 51 +90.0 + 52 +90.0 + 71 + 2 + 49 +0.5 + 62 + 256 + 6 +BYLAYER + 49 +-0.5 + 62 + 256 + 6 +BYLAYER + 0 +DICTIONARYVAR + 5 +51 +102 +{ACAD_REACTORS +330 +50 +102 +} +100 +DictionaryVariables +280 + 0 + 1 +96 + 0 +ENDSEC + 0 +EOF diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/dxf_dwg_importer.inx b/extensions/fablabchemnitz/dxf_dwg_importer/dxf_dwg_importer.inx new file mode 100644 index 00000000..73a7e927 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/dxf_dwg_importer.inx @@ -0,0 +1,197 @@ + + + DXF/DWG Importer + fablabchemnitz.de.dxf_dwg_importer + + + + + + + + + + + + true + 0.0 + + + + + + + + C:\Users\ + true + + + + C:\Program Files\ODA\ODAFileConverter_title 21.6.0\ODAFileConverter.exe + true + + + + + + + + + + + + + + + true + false + true + + + + + true + + true + + + + + + + + + + + + false + + + + + + + true + true + true + true + true + true + true + true + + + + true + true + true + true + true + true + true + true + + + + + + + true + true + true + true + true + true + true + true + + + + true + true + true + true + true + true + true + true + + + + + + + C:\Program Files (x86)\sK1 Project\UniConvertor-1.1.6\uniconvertor.cmd + + + 0.100 + false + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ../000_about_fablabchemnitz.svg + + + + all + + + + + + + + diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/dxf_dwg_importer.py b/extensions/fablabchemnitz/dxf_dwg_importer/dxf_dwg_importer.py new file mode 100644 index 00000000..1059f811 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/dxf_dwg_importer.py @@ -0,0 +1,448 @@ +#!/usr/bin/env python3 + +""" +Extension for InkScape 1.0 + +Import any DWG or DXF file using ODA File Converter, sk1 UniConvertor, ezdxf and more tools. + +Author: Mario Voigt / FabLab Chemnitz +Mail: mario.voigt@stadtfabrikanten.org +Date: 23.08.2020 +Last patch: 04.04.2021 +License: GNU GPL v3 + +Module licenses +- ezdxf (https://github.com/mozman/ezdxf) - MIT License +- node.js (https://raw.githubusercontent.com/nodejs/node/master/LICENSE) - MIT License +- https://github.com/bjnortier/dxf - MIT License +- ODA File Converter - not bundled (due to restrictions by vendor) +- sk1 UniConvertor (https://github.com/sk1project/uniconvertor) - AGPL v3.0 - not bundled +- kabeja (http://kabeja.sourceforge.net/) - Apache v2 +- vpype (https://github.com/abey79/vpype) - MIT License +- vpype-dxf (https://github.com/tatarize/vpype-dxf) - MIT License + +ToDos: +- change copy commands to movefile commands (put into temp. sub directories where the input file is located). We need to copy files in this script because ODA File Converter will process whole dirs instead of single files only.DXF files can be really large, which slows the process) +- vpype will crash because inkscape(ObjectToPath) fails -> lines have missing style attribute? +""" + +import inkex +import sys +import os +import re +import subprocess +import tempfile +from lxml import etree +from subprocess import Popen, PIPE +import shutil +from shutil import which +from pathlib import Path +from mimetypes import MimeTypes +import urllib.request as urllib + +#ezdxf related imports +import matplotlib.pyplot as plt +import ezdxf +from ezdxf.addons.drawing import RenderContext, Frontend +#from ezdxf.addons.drawing.matplotlib_backend import MatplotlibBackend for older ezdxf library 0.14.1 +from ezdxf.addons.drawing.matplotlib import MatplotlibBackend #for recent ezdxf library 0.15.2 +from ezdxf.addons import Importer + +class DXFDWGImport(inkex.EffectExtension): + + def add_arguments(self, pars): + #blank tabs + pars.add_argument("--tab") + + #general + pars.add_argument("--inputfile") + pars.add_argument("--dxf_to_svg_parser", default="bjnortier", help="Choose a DXF to SVG parser") + pars.add_argument("--resizetoimport", type=inkex.Boolean, default=True, help="Resize the canvas to the imported drawing's bounding box") + pars.add_argument("--extraborder", type=float, default=0.0) + pars.add_argument("--extraborder_units") + + #ODA File Converter + pars.add_argument("--oda_fileconverter", default=r"C:\Program Files\ODA\oda_fileconverter_title 21.6.0\oda_fileconverter.exe", help="Full path to 'oda_fileconverter.exe'") + pars.add_argument("--oda_hidewindow", type=inkex.Boolean, default=True, help="Hide ODA GUI window") + pars.add_argument("--oda_outputformat", default="ACAD2018_DXF", help="ODA AutoCAD Output version") + pars.add_argument("--oda_keepconverted_dxf", type=inkex.Boolean, default=True, help="Keep ODA converted DXF file") + pars.add_argument("--oda_skip_dxf_to_dxf", type=inkex.Boolean, default=False, help="Skip conversion from DXF to DXF") + pars.add_argument("--oda_audit_repair", type=inkex.Boolean, default=True, help="Perform audit / autorepair") + + #sk1 UniConvertor + pars.add_argument("--sk1_uniconverter", default=r"C:\Program Files (x86)\sK1 Project\UniConvertor-1.1.6\uniconvertor.cmd", help="Full path to 'uniconvertor.cmd'") + pars.add_argument("--opendironerror", type=inkex.Boolean, default=True, help="Open containing output directory on conversion errors") + + #ezdxf preprocessing + pars.add_argument("--ezdxf_output_version", default="SAME", help="ezdxf output version") + pars.add_argument("--ezdfx_keep_preprocessed", type=inkex.Boolean, default=True, help="Keep ezdxf preprocessed DXF file") + pars.add_argument("--ezdxf_preprocessing", type=inkex.Boolean, default=True) + pars.add_argument("--allentities", type=inkex.Boolean, default=True) + + #vpype-dxf (dread) + pars.add_argument("--vpype_quantization", type=float, default=0.1, help="Maximum length of segments approximating curved elements (default 0.1mm)") + pars.add_argument("--vpype_simplify", type=inkex.Boolean, default=False, help="Simplify curved elements") + pars.add_argument("--vpype_parallel", type=inkex.Boolean, default=False, help="Multiprocessing curve conversion") + + #sk1 compatible entities + pars.add_argument("--THREE_DFACE", type=inkex.Boolean, default=True) #3DFACE + pars.add_argument("--ARC", type=inkex.Boolean, default=True) + pars.add_argument("--BLOCK", type=inkex.Boolean, default=True) + pars.add_argument("--CIRCLE", type=inkex.Boolean, default=True) + pars.add_argument("--ELLIPSE", type=inkex.Boolean, default=True) + pars.add_argument("--LINE", type=inkex.Boolean, default=True) + pars.add_argument("--LWPOLYLINE", type=inkex.Boolean, default=True) + pars.add_argument("--POINT", type=inkex.Boolean, default=True) + pars.add_argument("--POLYLINE", type=inkex.Boolean, default=True) + pars.add_argument("--POP_TRAFO", type=inkex.Boolean, default=True) + pars.add_argument("--SEQEND", type=inkex.Boolean, default=True) + pars.add_argument("--SOLID", type=inkex.Boolean, default=True) + pars.add_argument("--SPLINE", type=inkex.Boolean, default=True) + pars.add_argument("--TABLE", type=inkex.Boolean, default=True) + pars.add_argument("--VERTEX", type=inkex.Boolean, default=True) + pars.add_argument("--VIEWPORT", type=inkex.Boolean, default=True) + + #other entities + pars.add_argument("--THREE_DSOLID", type=inkex.Boolean, default=True) #3DSOLID + pars.add_argument("--ATTRIB", type=inkex.Boolean, default=True) + pars.add_argument("--BODY", type=inkex.Boolean, default=True) + pars.add_argument("--ARC_DIMENSION", type=inkex.Boolean, default=True) + pars.add_argument("--HATCH", type=inkex.Boolean, default=True) + pars.add_argument("--IMAGE", type=inkex.Boolean, default=True) + pars.add_argument("--INSERT", type=inkex.Boolean, default=True) + pars.add_argument("--MESH", type=inkex.Boolean, default=True) + pars.add_argument("--MTEXT", type=inkex.Boolean, default=True) + pars.add_argument("--RAY", type=inkex.Boolean, default=True) + pars.add_argument("--REGION", type=inkex.Boolean, default=True) + pars.add_argument("--SHAPE", type=inkex.Boolean, default=True) + pars.add_argument("--SURFACE", type=inkex.Boolean, default=True) + pars.add_argument("--TRACE", type=inkex.Boolean, default=True) + pars.add_argument("--UNDERLAY", type=inkex.Boolean, default=True) + pars.add_argument("--XLINE", type=inkex.Boolean, default=True) + + def openExplorer(self, temp_output_dir): + DETACHED_PROCESS = 0x00000008 + if os.name == 'nt': + subprocess.Popen(["explorer", temp_output_dir], close_fds=True, creationflags=DETACHED_PROCESS).wait() + else: + subprocess.Popen(["xdg-open", temp_output_dir], close_fds=True, start_new_session=True).wait() + + def effect(self): + #get input file and copy it to some new temporary directory + inputfile = self.options.inputfile + if not os.path.exists(inputfile): + self.msg("The input file does not exist. Please select a *.dxf or *.dwg file and try again.") + exit(1) + temp_input_dir = os.path.join(tempfile.gettempdir(),"dxfdwg_input") + shutil.rmtree(temp_input_dir, ignore_errors=True) #remove the input directory before doing new job + if not os.path.exists(temp_input_dir): + os.mkdir(temp_input_dir) #recreate blank dir + shutil.copy2(inputfile, os.path.join(temp_input_dir, Path(inputfile).name)) # complete target filename given + + #Prepapre output conversion + outputfilebase = os.path.splitext(os.path.basename(inputfile))[0] + inputfile_ending = os.path.splitext(os.path.basename(inputfile))[1] + temp_output_dir = os.path.join(tempfile.gettempdir(),"dxfdwg_output") + shutil.rmtree(temp_output_dir, ignore_errors=True) #remove the output directory before doing new job + if not os.path.exists(temp_output_dir): + os.mkdir(temp_output_dir) + + #Prepare some more options for proceeding + autocad_version = self.options.oda_outputformat.split("_")[0] + autocad_format = self.options.oda_outputformat.split("_")[1] + self.options.oda_audit_repair = "1" if self.options.oda_audit_repair else "0" #overwrite string bool with int value + entityspace = [] + if self.options.allentities or self.options.THREE_DFACE: entityspace.append("3DFACE") + if self.options.allentities or self.options.ARC: entityspace.append("ARC") + if self.options.allentities or self.options.BLOCK: entityspace.append("BLOCK") + if self.options.allentities or self.options.CIRCLE: entityspace.append("CIRCLE") + if self.options.allentities or self.options.ELLIPSE: entityspace.append("ELLIPSE") + if self.options.allentities or self.options.LINE: entityspace.append("LINE") + if self.options.allentities or self.options.LWPOLYLINE: entityspace.append("LWPOLYLINE") + if self.options.allentities or self.options.POINT: entityspace.append("POINT") + if self.options.allentities or self.options.POLYLINE: entityspace.append("POLYLINE") + if self.options.allentities or self.options.POP_TRAFO: entityspace.append("POP_TRAFO") + if self.options.allentities or self.options.SEQEND: entityspace.append("SEQEND") + if self.options.allentities or self.options.SOLID: entityspace.append("SOLID") + if self.options.allentities or self.options.SPLINE: entityspace.append("SPLINE") + if self.options.allentities or self.options.TABLE: entityspace.append("TABLE") + if self.options.allentities or self.options.VERTEX: entityspace.append("VERTEX") + if self.options.allentities or self.options.VIEWPORT: entityspace.append("VIEWPORT") + + if self.options.allentities or self.options.THREE_DSOLID: entityspace.append("3DSOLID") + if self.options.allentities or self.options.ATTRIB: entityspace.append("ATTRIB") + if self.options.allentities or self.options.BODY: entityspace.append("BODY") + if self.options.allentities or self.options.ARC_DIMENSION: entityspace.append("ARC_DIMENSION") + if self.options.allentities or self.options.HATCH: entityspace.append("HATCH") + if self.options.allentities or self.options.IMAGE: entityspace.append("IMAGE") + if self.options.allentities or self.options.INSERT: entityspace.append("INSERT") + if self.options.allentities or self.options.MESH: entityspace.append("MESH") + if self.options.allentities or self.options.MTEXT: entityspace.append("MTEXT") + if self.options.allentities or self.options.RAY: entityspace.append("RAY") + if self.options.allentities or self.options.REGION: entityspace.append("REGION") + if self.options.allentities or self.options.SHAPE: entityspace.append("SHAPE") + if self.options.allentities or self.options.SURFACE: entityspace.append("SURFACE") + if self.options.allentities or self.options.TRACE: entityspace.append("TRACE") + if self.options.allentities or self.options.UNDERLAY: entityspace.append("UNDERLAY") + if self.options.allentities or self.options.XLINE: entityspace.append("XLINE") + + #ODA to ezdxf mapping + oda_ezdxf_mapping = [] + oda_ezdxf_mapping.append(["ACAD9", "R12", "AC1004"]) #this mapping is not supported directly. so we use the lowest possible which is R12 + oda_ezdxf_mapping.append(["ACAD10", "R12", "AC1006"]) #this mapping is not supported directly. so we use the lowest possible which is R12 + oda_ezdxf_mapping.append(["ACAD12", "R12", "AC1009"]) + oda_ezdxf_mapping.append(["ACAD13", "R2000","AC1012"]) #R13 was overwritten by R2000 which points to AC1015 instead of AC1014 (see documentation) + oda_ezdxf_mapping.append(["ACAD14", "R2000","AC1014"]) #R14 was overwritten by R2000 which points to AC1015 instead of AC1014 (see documentation) + oda_ezdxf_mapping.append(["ACAD2000","R2000","AC1015"]) + oda_ezdxf_mapping.append(["ACAD2004","R2004","AC1018"]) + oda_ezdxf_mapping.append(["ACAD2007","R2007","AC1021"]) + oda_ezdxf_mapping.append(["ACAD2010","R2010","AC1024"]) + oda_ezdxf_mapping.append(["ACAD2013","R2013","AC1027"]) + oda_ezdxf_mapping.append(["ACAD2018","R2018","AC1032"]) + + ezdxf_autocad_format = None + for oe in oda_ezdxf_mapping: + if oe[0] == autocad_version: + ezdxf_autocad_format = oe[1] + break + if ezdxf_autocad_format is None: + self.msg("ezdxf conversion format version unknown") + + #Prepare DXF and SVG paths + dxf_file = os.path.join(temp_output_dir, outputfilebase + ".dxf") + svg_file = os.path.join(temp_output_dir, outputfilebase + ".svg") + + # Run ODA File Converter + if self.options.oda_skip_dxf_to_dxf == False or inputfile_ending == ".dwg": + # Executable test (check for proper configuration by checking mime type. Should return octet stream for a binary executable) + if os.name == "nt" and "application/octet-stream" not in str(MimeTypes().guess_type(urllib.pathname2url(self.options.oda_fileconverter))): + self.msg("You selected to use ODA File Converter but it is not configured properly. Check for installation and path location or select 'Skip conversion from DXF to DXF'. You can download ODA Converter from 'https://www.opendesign.com/guestfiles/oda_file_converter'. You need to install it in order to use it.") + exit(1) + elif os.path.isfile(self.options.oda_fileconverter) == False: + self.msg("You selected to use ODA File Converter but it is not configured properly. Check for installation and path location or select 'Skip conversion from DXF to DXF'. You can download ODA Converter from 'https://www.opendesign.com/guestfiles/oda_file_converter'. You need to install it in order to use it.") + exit(1) + else: + # Build and run ODA File Converter command + oda_cmd = [self.options.oda_fileconverter, temp_input_dir, temp_output_dir, autocad_version, autocad_format, "0", self.options.oda_audit_repair] + if os.name == 'nt' and self.options.oda_hidewindow: + info = subprocess.STARTUPINFO() #hide the ODA File Converter window because it is annoying (does not work for Linux :-() + info.dwFlags = 1 + info.wShowWindow = 0 + proc = subprocess.Popen(oda_cmd, startupinfo=info, shell=False, stdout=PIPE, stderr=PIPE) + else: + proc = subprocess.Popen(oda_cmd, shell=False, stdout=PIPE, stderr=PIPE) + stdout, stderr = proc.communicate() + if proc.returncode != 0 or (len(stderr) > 0 and stderr != b"Quit (core dumped)\n"): + self.msg("ODAFileConverter failed: %d %s %s" % (proc.returncode, stdout, stderr)) + if os.name != 'nt': + self.msg("If the error message above contains a warning about wrong/missing Qt version please install the required version. You can get the installer from 'https://download.qt.io/archive/qt/'. Sadly you will need to create a free account to install. After installation please configure the shell script '/usr/bin/ODAFileConverter' to add a preceding line with content similar to 'LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/Qt5.14.2/5.14.2/gcc_64/lib/'.") + exit(1) + # check if ODA converted successfully. This is the case if no error file was created + oda_errorfile = os.path.join(temp_output_dir, Path(inputfile).name + ".err") + if os.path.exists(oda_errorfile): + self.msg("ODA File Converter failed to process the file. Cannot continue DXF/DWG import. The error message is:") + errormessage = open(oda_errorfile, 'r') + errorlines = errormessage.readlines() + for errorline in errorlines: + self.msg(errorline.strip()) + errormessage.close() + exit(1) + + # Do some movings/copies of skipped or processed DXF + if self.options.oda_skip_dxf_to_dxf: #if true we need to move the file to simulate "processed" + shutil.move(os.path.join(temp_input_dir, Path(inputfile).name), os.path.join(temp_output_dir, Path(inputfile).name)) + + if self.options.oda_keepconverted_dxf: + shutil.copy2(dxf_file, os.path.join(os.path.dirname(inputfile), outputfilebase + "_oda.dxf")) # complete target filename given + + # Preprocessing DXF to DXF (entity filter) by using ezdxf the first time + if self.options.ezdxf_preprocessing: + # uniconverter does not handle all entities. we parse the file to exlude stuff which lets uniconverter fail + dxf = ezdxf.readfile(dxf_file) + modelspace = dxf.modelspace() + allowed_entities = [] + # supported entities by UniConverter- impossible: MTEXT TEXT INSERT and a lot of others + query_string = str(entityspace)[1:-1].replace("'","").replace(",","") + if query_string != "": + for e in modelspace.query(query_string): + allowed_entities.append(e) + #self.msg(ezdxf_autocad_format) + #self.msg(self.options.ezdxf_output_version) + if self.options.ezdxf_output_version == "SAME": + doc = ezdxf.new(ezdxf_autocad_format) + else: + doc = ezdxf.new(self.options.ezdxf_output_version) #use the string values from inx file. Required to match the values from ezdxf library. See Python reference + msp = doc.modelspace() + for e in allowed_entities: + msp.add_foreign_entity(e) + doc.saveas(dxf_file) + if self.options.ezdfx_keep_preprocessed: + shutil.copy2(dxf_file, os.path.join(os.path.dirname(inputfile), outputfilebase + "_ezdxf.dxf")) # complete target filename given + + # Make SVG from DXF + if self.options.dxf_to_svg_parser == "sk1": + if os.name != "nt": + self.msg("You selected sk1 UniConvertor but you are not running on a Windows platform. On Linux uniconverter 1.1.X can be installed using the now obsolete Python 2.7, but it will not run correctly because you finally will fail at installing liblcms1-dev library on newer systems. That leads to uncompilable sk1libs package. Unfortunately sk1 UniConvertor 2.X does not support dxf format. So please use another DXF to SVG converter.") + exit(1) + sk1_command_ending = os.path.splitext(os.path.splitext(os.path.basename(self.options.sk1_uniconverter))[1])[0] + if sk1_command_ending != ".cmd": + self.msg("You selected sk1 UniConverter but it was not configured properly. Check the path to the executable.") + exit(1) + uniconverter_cmd = [self.options.sk1_uniconverter, dxf_file, svg_file] + #self.msg(uniconverter_cmd) + proc = subprocess.Popen(uniconverter_cmd, shell=False, stdout=PIPE, stderr=PIPE) + stdout, stderr = proc.communicate() + if proc.returncode != 0: + self.msg("UniConverter failed: %d %s %s" % (proc.returncode, stdout, stderr)) + if self.options.opendironerror: + self.openExplorer(temp_output_dir) + + elif self.options.dxf_to_svg_parser == "bjnortier": + if which("node") is None: + self.msg("NodeJS executable not found on path. Please check your installation.") + exit(1) + else: + bjnortier_cmd = ["node", os.path.join("node_modules","dxf","lib","cli.js"), dxf_file, svg_file] + #self.msg(bjnortier_cmd) + proc = subprocess.Popen(bjnortier_cmd, shell=False, stdout=PIPE, stderr=PIPE) + stdout, stderr = proc.communicate() + if proc.returncode != 0: + self.msg("node.js DXF to SVG conversion failed: %d %s %s" % (proc.returncode, stdout, stderr)) + if self.options.opendironerror: + self.openExplorer(temp_output_dir) + + elif self.options.dxf_to_svg_parser == "kabeja": + wd = os.path.join(os.getcwd(), "kabeja") + #self.msg(wd) + proc = subprocess.Popen("java -jar launcher.jar -nogui -pipeline svg " + dxf_file + " " + svg_file, cwd=wd, shell=True, stdout=PIPE, stderr=PIPE) + stdout, stderr = proc.communicate() + if proc.returncode != 0: + self.msg("kabeja failed: %d %s %s" % (proc.returncode, stdout, stderr)) + if self.options.opendironerror: + self.openExplorer(temp_output_dir) + + elif self.options.dxf_to_svg_parser == "vpype_dxf": + try: + from inkex.command import inkscape + import vpype + from vpype_cli import execute + except Exception as e: + self.msg("Error importing vpype. Did you properly install the vpype and vpype-dxf python modules?") + exit(1) + doc = vpype.Document() #create new vpype document + command = "dread --quantization " + str(self.options.vpype_quantization) + if self.options.vpype_simplify is True: + command += " --simplify" + if self.options.vpype_parallel is True: + command += " --parallel" + #command += " '" + inputfile + "'" + command += " '" + dxf_file + "'" + + #self.msg(command) + doc = execute(command, doc) + if doc.length() == 0: + self.msg('No lines left after vpype conversion. Conversion result is empty. Cannot continue') + exit(1) + # save the vpype document to new svg file and close it afterwards + output_fileIO = open(svg_file, "w", encoding="utf-8") + vpype.write_svg(output_fileIO, doc, page_size=None, center=False, source_string='', layer_label_format='%d', show_pen_up=False, color_mode='layer') + output_fileIO.close() + # convert vpype polylines/lines/polygons to regular paths again. We need to use "--with-gui" to respond to "WARNING: ignoring verb FileSave - GUI required for this verb." + cli_output = inkscape(svg_file, "--with-gui", actions="EditSelectAllInAllLayers;EditUnlinkClone;ObjectToPath;FileSave;FileQuit") + if len(cli_output) > 0: + self.debug(_("Inkscape returned the following output when trying to run the vpype object to path back-conversion:")) + self.debug(cli_output) + + elif self.options.dxf_to_svg_parser == "ezdxf": + try: + doc = ezdxf.readfile(dxf_file) + msp = doc.modelspace() + #for e in msp: #loop through entities + # self.msg(e) + #doc.header['$DIMSCALE'] = 0.2 does not apply to the plot :-( + #self.msg(doc.header['$DIMSCALE']) + #self.msg(doc.header['$MEASUREMENT']) + auditor = doc.audit() #audit & repair DXF document before rendering + # The auditor.errors attribute stores severe errors, which *may* raise exceptions when rendering. + if len(auditor.errors) == 0: + fig = plt.figure() + ax = plt.axes([0., 0., 1., 1.], xticks=[], yticks=[]) + #ax = plt.axes([0., 0., 1., 1.], frameon=False, xticks=[], yticks=[]) + ax.patches = [] + #plt.axis('off') + plt.margins(0, 0) + plt.gca().xaxis.set_major_locator(plt.NullLocator()) + plt.gca().yaxis.set_major_locator(plt.NullLocator()) + plt.subplots_adjust(top=1, bottom=0, right=1, left=0, hspace=0, wspace=0) + out = MatplotlibBackend(fig.add_axes(ax)) + Frontend(RenderContext(doc), out).draw_layout(msp, finalize=True) + #plt.show() + #fig.savefig(os.path.join(temp_output_dir, outputfilebase + ".png"), dpi=300) + fig.savefig(svg_file) #see https://matplotlib.org/3.1.1/api/_as_gen/matplotlib.pyplot.savefig.html + except IOError: + self.msg("Not a DXF file or a generic I/O error.") + exit(1) + except ezdxf.DXFStructureError: + self.msg("Invalid or corrupted DXF file.") + exit(1) + + elif self.options.dxf_to_svg_parser == "legacy": + self.msg("The selected legacy DXF to SVG parser is not supported by this extension yet. Use File > Import > *.dxf. This calls the \"dxf_input.inx\" extension.") + exit(1) + else: + self.msg("undefined parser") + exit(1) + + # Write the generated SVG into InkScape's canvas + try: + stream = open(svg_file, 'r') + except FileNotFoundError as e: + self.msg("There was no SVG output generated. Cannot continue") + exit(1) + p = etree.XMLParser(huge_tree=True) + doc = etree.parse(stream, parser=etree.XMLParser(huge_tree=True)).getroot() + stream.close() + docGroup = self.document.getroot().add(inkex.Group(id=self.svg.get_unique_id("dxf_dwg_import-" + self.options.dxf_to_svg_parser + "-"))) + + if self.options.dxf_to_svg_parser == "ezdxf": + parent = doc.xpath("//svg:g[@id = 'axes_1']", namespaces=inkex.NSS)[0] + for element in parent: + docGroup.append(element) + elif self.options.dxf_to_svg_parser == "kabeja": + parent = doc.xpath("//svg:g[@id = 'draft']", namespaces=inkex.NSS)[0] + for element in parent: + docGroup.append(element) + else: + for element in doc.getchildren(): + docGroup.append(element) + + #get children of the doc and move them one group above - we don't do this for bjnortier tool because this has different structure which we don't want to disturb + if self.options.dxf_to_svg_parser == "sk1": + elements = [] + emptyGroup = None + for firstGroup in doc.getchildren(): + emptyGroup = firstGroup + for element in firstGroup.getchildren(): + elements.append(element) + #break #only one cycle - could be bad idea or not + for element in elements: + doc.set('id', self.svg.get_unique_id('dxf_dwg_import')) + doc.insert(doc.index(firstGroup), element) + + if emptyGroup is not None: + emptyGroup.getparent().remove(emptyGroup) + + #adjust viewport and width/height to have the import at the center of the canvas + if self.options.resizetoimport: + bbox = docGroup.bounding_box() + if bbox is not None: + root = self.document.getroot(); + offset = self.svg.unittouu(str(self.options.extraborder) + self.options.extraborder_units) + root.set('viewBox', '%f %f %f %f' % (bbox.left - offset, bbox.top - offset, bbox.width + 2 * offset, bbox.height + 2 * offset)) + root.set('width', bbox.width + 2 * offset) + root.set('height', bbox.height + 2 * offset) + else: + self.msg("Error finding bounding box. Skipped that step ...") + +if __name__ == '__main__': + DXFDWGImport().run() \ No newline at end of file diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/INSTALL b/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/INSTALL new file mode 100644 index 00000000..bd46c089 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/INSTALL @@ -0,0 +1,26 @@ +Binary-package: +--------------- + +Windows: + * double-click "kabeja.exe" + +Linux/Unix: + * sh kabeja.sh + or: + * chmod a=rx kabeja.sh (only ones) + * ./kabeja.sh + +Other: + * java -jar launcher.jar + +Buidling: +--------- + +You need Ant for building (http://ant.apache.org). + +If you want to build the Cocoon-block you have to copy blocks.propterties +to local.blocks.properties and edit this file (set the path to the Cocoon-libraries). + +try: + +ant diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/README b/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/README new file mode 100644 index 00000000..ca9acf66 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/README @@ -0,0 +1,148 @@ +Kabeja is a small library for parsing DXF-Files and converting +this to SVG. It is licensed under the Apache Software License 2.0. + + +Limitation: +----------- +There are not all Entities of DXF supported yet. Text-Entities generate problems too. + +Supported: + + + *Arc + *Attrib + *Polyline + *Circle + *Line + *Blocks/Insert + *Text + *MText + *LWPolyline + *Solid + *Trace + *Ellipse + *Dimension + *Image + *Leader + *XLine + *Ray + *Hatch + *Spline + *MLine + +Planned: + + + + * Tolerance + + +You can use Kabeja from CLI (Command Line Interface) or embed in your application. + +GUI: +---- +Windows: + * double-click "kabeja.exe" + +Linux: + * sh kabeja.sh + + or: + + * chmod a=rx kabeja.sh (only ones) + * ./kabeja.sh + +Other: + * java -jar launcher.jar + + + +CLI: +---- +in the Kabeja-folder try: + + * Help and pipeline list + + java -jar launcher.jar --help + + * Convert to svg + + java -jar launcher.jar -nogui -pipeline svg myfile.dxf result.svg + + * Convert to pdf|jpeg|png|... + + java -jar launcher.jar -nogui -pipeline myfile.dxf + + +Normally Java uses 64 MB of your memory, to setup more use the following commandline +switch: + +java -Xmx256m -jar ..... + + + +GUI-Viewer: +----------- +in the 'lib'-folder try: + + java -jar kabeja-svgview.jar + + + +Cocoon 2.1 (XML-Publishing-Framework http://cocoon.apache.org/2.1): +------------------------------------------------------------------- + +Copy the 'kabeja.jar' and 'kabeja-svg2dxf-cocoon.jar' to your WEB-INF/lib-folder +of your Cocoon-Webapplication. Then you can use Kabeja as Generator like: + + +in your sitemap/subsitemap: + +snippet: +-------- + + + ..... + + + + + + + +.... + + + + + + + ... + + + + + + + + .... + + + + +Note: DXF-drafts often real large drafts, so the SVGDocument will consume a lot of memory. The Generator is +Cacheable so the first run will take more time. + + + + +Feedback and Help +----------------- + +Any help and feedback are greatly appreciated. + +Mail: simon.mieth@gmx.de + + + + diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/conf/parser.xml b/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/conf/parser.xml new file mode 100644 index 00000000..6e3c47fd --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/conf/parser.xml @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/conf/process.xml b/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/conf/process.xml new file mode 100644 index 00000000..840caa96 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/conf/process.xml @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/conf/ui.xml b/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/conf/ui.xml new file mode 100644 index 00000000..29672b10 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/conf/ui.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/doc/userguide.pdf b/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/doc/userguide.pdf new file mode 100644 index 00000000..d8911349 --- /dev/null +++ b/extensions/fablabchemnitz/dxf_dwg_importer/kabeja/doc/userguide.pdf @@ -0,0 +1,1000 @@ +%PDF-1.3 +%ª«¬­ +4 0 obj +<< /Type /Info +/Producer (FOP 0.20.5) >> +endobj +5 0 obj +<< /Length 112 /Filter [ /ASCII85Decode /FlateDecode ] + >> +stream +Garg^iR2p+<%p5Z1Je?Kj"^U3a]o#Wl!/rM#!ck#?t,8-jCLh;`e=bc,R[K>=W=Z*Ail1!t_?Bqt$5,r~> +endstream +endobj +6 0 obj +<< /Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595 842 ] +/Resources 3 0 R +/Contents 5 0 R +>> +endobj +7 0 obj +<< /Length 1506 /Filter [ /ASCII85Decode /FlateDecode ] + >> +stream +Gb"/k?$#!`'Sc)P'tt(mlfq^FAb.q8FuJ$.Cj2c@K`a)Q$b"YFD"caf!cp'6b3nW'=bk)/JCeid0]taMGqF"u)Z4];""ZbQN042KV?7e\o7mE7=bmn*,j$8f1)S8g5E85'rCd`S2af.e+%LU^I6Pr_>%_t8%/pZ)DqE6sFgIPa'b:n9!eG?ipq";203,.;gK&dPT,).?kNeGj@);3_coe-sKu+m;^.c)S@Y4aB1usT4('LjlpL5%GGf2u&KNr+h*RA>%?B3Jc0#+Kpn>(=)>mqn[J@QM];(.lpj$c"uUtKht@8c6i0'jolP[iH>EY;8sO?S'o?N.,ZEQ%nl(JDVu2BfPp0"9nHRLuo#iY=RTM&oosQT^Shi!BQd\\M]1A51-:5+fmKA>No"\cpYuC^`/n.Q.8Xbb,1*>h^g6m"f/TnT\,b$Rk7=ONO+L2q&Jq+$YN=1Z=&3k`hD&#iJF)o`2Rb*^N\n3Uf'dgkL']sp;d1A/YB+OOFBR=&S>%g!7W]X"Z96Sb%9F1J%9gXN\`]GU?cT'@kP-tboa[8D7nSE#KO@6gG5?ul9&<-Z#(I;/SFa9.2o/mu[3().MY1**dH^c?d!gYE+nGC:PL`@N$J=:g;cbWf/aOb?CgP%ehR0^"dIFn9^=3@m]30%A&d#S`7PclsGp8H`)M5#edsT'Q3(qs@Zl<:(MP7_+K>!Q4jaT[oFnZg0+pX6b2_]^DpNj-WWkEs_pfl.L;g)Zi">JlQMJt6a:Y01&,H*Tr:jMkb"B#AI\HkS8fT`kWlMuEkn+GS?b5CGgbFr9\o4hhq@@.'Z%`30Q_+2/bXotMEjqAA'5Q%(u3*r\6L]'ZYfS#c-%2ZX:ToW'3W>j#JJE`]%IOT>B9,W.G._kB""&``1*0]7/OWfN8ferrRK)>71~> +endstream +endobj +8 0 obj +<< /Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595 842 ] +/Resources 3 0 R +/Contents 7 0 R +>> +endobj +9 0 obj +<< /Length 883 /Filter [ /ASCII85Decode /FlateDecode ] + >> +stream +Gb"0T9lJK7(^KPW5)#'PTuQOSgt:g;`f#@YBG0qoFb"7g8G)a"OAR\YCDqa&4U0a[Spf%9hS>;q>?IJ30baHPa$q_09;-+?oM/SL3;m?'_?r==#e">ut*oorf=+G5W_+/VNmPi0;X:;APd#=PeVp4'+#_q_-F4fe2Y@`.o&'BuH/L,mb?V7YgC%Wbl"iY:Z/Ml*,$ep#=[5X4tXt<^Ztnh2U/48/_:a$\8]02iZ[Pu/JY+fWT"4eR`FZ6'9YDM5mQ5D]?3W*i1g4@bX`=N2MC##\3MM,Fb5U_l_L8U7DsFO/=bU:Vn89)cgSK=P\3n2f9#cS7D6%ARr$Vh/`%Pe$D!(+7MRCu*0SucY-CCRRTm?1%3!b^s259AZdP'``OjHE5_mk3I=p^0b[m5Ge#1fI_^"J"DeU$3oP9aCCO0@l;Mjs>XkrX-M~> +endstream +endobj +10 0 obj +<< /Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595 842 ] +/Resources 3 0 R +/Contents 9 0 R +>> +endobj +11 0 obj +<< /Length 167 /Filter [ /ASCII85Decode /FlateDecode ] + >> +stream +GapXOYn"W)&4?3h$BOSiEClU(Z;q#P2PahLCpXoZ"$uiLaacO!H+#gS*K8i#S>?N2jiA&A1ca-]R!`Gr;E1=%=Qr/YdJg(`M$:>rC+)Y7&TdZ>V.uG5W#NfDRN;C.g*m8RiAOq*9-(;/;;0B9qE?"ELcatY0DtlUPTVs~> +endstream +endobj +12 0 obj +<< /Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595 842 ] +/Resources 3 0 R +/Contents 11 0 R +>> +endobj +13 0 obj +<< /Length 1912 /Filter [ /ASCII85Decode /FlateDecode ] + >> +stream +Gat%$bBDVu&DcY&\5RcML%>2`Y"kE*Vjk+qde)$p5U'kbTa1iJ/\>BI+[H_C>-o`(@:BMdg_gOg@!K@jrVXL<*1,=/2I"kcrQ;B]piEMr+L[V=OWBT=:9$Z^8lDb@g%l0:1il$b%/ZM3>T;Y/AC8%8D85=6JB_nM.]VoS6k:FRrrVRoZM9f'q6\'N)`HhF5OuPfA/:\E[hPH(]X#GM4N;6fM3E#47tE45m=pJ+gJl8X*LpN%cpr6nnk"n%\_lTQb*UB)j(%#WLh&F$W,X_a@Xipg!ReT\=%Oe/D%[;Ro=&E*3T!b'!?!O%3P>Cg!V$1RQ8p9A9H==Oom=@0i!+.J7T-p;Gb4V.VgQ^a5lTXB4mgq'T)+;=l1KZoN4)(XPiOd7A)F6$J9k%rQ7+h1b((f,/\Un8:SK6oc2CPiisK'X>fS1B4.5Aq:n,%CK5l(AGBZK_`,NVMFm"r0p'J.2P16S7Q4U\N\sF&B*sS1l?R3XkgX]#Sd17k43IZKnc;J-DIK*bb,gKZbZQfFC'U!Ipl01<(uj^S8g-cBkr7'*]^?<hSfZ=J%3nD_]4'9/39a7TUrnt=9f7Qsl^EUZ['#;r7a8BHcp9tu2J/g=U)Kc5Ef&.'U!M$_9fI_IN?.\Def;)o7g/8+k6P\"+)3"koVK-]n3]f.5e&WA05S9Q2`n`i[@"Q0ApVm^mh!2j3I1&%cL'R.4n#qg[IibciEN(I&Do6/cQcmI&B0l(+s:t!rK/rP^_0?R'`M\P26d&XJa^DMAlJYUiq@I&CS&N,loqo[8VVXaTgS1,YmZ7&.['7C!S"s7ih!?]i5AVKUa=r?eK!7QSN4p5`12^\*^dL>c4L/C(iO6=S"f%8VHifKUXYnE2:-*MU"XP[$s.bHe%Q@W7HjCHPWJF'3do6'CLg"B+Oouo*ZpMq)UoUbA-3FC0jL_n74Djrn%6jS@2]eK+lj@s!-4l+J0p-9Z4g-cVTd`?g8G`@=DW:(5u +endstream +endobj +14 0 obj +<< /Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595 842 ] +/Resources 3 0 R +/Contents 13 0 R +/Annots 15 0 R +>> +endobj +15 0 obj +[ +16 0 R +] +endobj +16 0 obj +<< /Type /Annot +/Subtype /Link +/Rect [ 194.776 497.355 208.276 488.355 ] +/C [ 0 0 0 ] +/Border [ 0 0 0 ] +/A << /URI (http://ant.apache.org) +/S /URI >> +/H /I +>> +endobj +17 0 obj +<< /Length 893 /Filter [ /ASCII85Decode /FlateDecode ] + >> +stream +GauHIbAu;j']&X:ZjU#=kUeg<,]/9"(7ils3i*5)aC+9<'da6:?c`h3h5&/';*87Ni;5M.*p[.XK/`D[\%NK2LdjWB#q=l,#Y6d?nfu"kO/Oe;%_`*XJ0>!^$Jf1P3%8)da=TkIIkQffNX1l>8'!a_lc7E0V@SS-;bTd*,GI0Z9OJ'd9;VI`rEj1jUl\h29K9i)6B#rD=J`5\7D!Zm5K\'AW_F2/g`8\N](F7qf3eXQ=b9WNQ?NW8$8mJSAg:[E:JD!ED'-$eW3>>lho\')pZa6p9[IF705a:,n@g5dg\^Ua^cBc.0W'dJ6+$umPpFr42oBQ2^-QNQn?G:oTV?d!j2ho.d1E"ekJbi=,>XL3T]1b>]Xre*hPc*k3%9NQnZ'2ldmc#O8[&#mU.hX0nQ2U=P<.E\@J4*@)3S^`obKHI7k^2OQN">Rne!NV@R:7HPg7,pBO!aQukE9W@@;H";T2^9\u,"&lCL3lQ)%[$4^E]h^J`reeLo1maUZs=LlS[&I)L4E4O&?2an)+&cC7Kpl>?b1$t\0$D#2eT`rVjjep:$X?)iCfGoU=Uk2U&UilN)6jm\l^M@KC/?<.])k63ND`C]"7Vgf/hg'oVJF:6h[P.:bEl>7;7"i1^mZY8"0Eb*etmEWr>ioRd#09L=DG>SNG'm.4-a5Q3\_J+bUt\FOHb@F'N(dn]Dd?Q`aF,0O%kbJ.YHl(CT~> +endstream +endobj +18 0 obj +<> +stream +Gb"-Vktfh's6p!F5B*e)/tL2K_WSf16B``j)A>G(#U.,'UG7afVT-WE[W.-s4h.mPTP`NZ"T`U/E2b&L$_i/"MJTTeg[#lsYTNN-IQm;>)^r#5!0;JE-i"f#L3\c#Qq'B3Z*03C`Y`3E0ub&?N%r>8M\GEq=HUj'"4E_A%,.61)T).Psuc.#_M,0&8OM2sl["b5[toD2EnTD\!pd".jR_7[P,0AmaWA-MASijN55m5Or,GpM)7L>jCrlD,L+tSdnaVC>i/cW-aNTjjr1Y\>%jUb^U@_'(O6O?X%tbXs7;@u(9f5K7N%rZ?D8d?%N%r3\8JGGa6g2,]]=/sT#)dX.sH0bt`DS!rVH`#+sqnaVC>TM;&cldL*,@]rT#ouXto!?DG,)0A:1XO*Z7dmM0sBO68/D8gA2=>7eY2N4o?MN9u\"`<$qgfBB=0uW65N3T@>O$AR,D;8/:Dl_8Z.X`C-X/'r4SQ%'&*F:/U96nr9l(sUhAM_>XUF]>BI>\qPZR%g70G_%[PBM?mY>=NXWP1Rlf/]K+5pq;F#b;\k1j"&&An5mcEEb.U/`Lgj`n480`uigS&mjl$j5CDn;nI'rBbamj,Sn?Uu'_,O)pa=%\fs1WG$A1fI>$M\os1,sM;^(:<=iG't:4:[IbR^-;AE3M6I?-\IEbSJ=1BFF'e(4ie8$1VXVkLd;gjOUD%shN0S^?3I%UFKgi:#t8?Z-JM]/q.^f)l*cYWY.BfA,2!d*$P*(^?#LgFE?PhU`.kI=CDF$\7+/NkTDplK`tom^aIe-$hlGq(C4L,C3e@Inkf5-Km1kGP?VO=Qr2Lq>"d'M*rD_DOlX$e'%jB"TR!;'>XG@(jhI$Hh7%WqD08,oo;OC)PSrQk=)l4Mho557F18U(2(0_>Y2_?$JDn+'[T^R)]*aIV#;gB7EK1d%,s`E>Wm^(a5)YIL]jL^)hHijL&*fn.t9gPXaCgPUe6'=S^c'bS\+gfE32PI%A\GaXgaC6kkGrF=0t083D]YJHsHpL-AS4`Lkla#o*%HQL&@fE^p%mPJ#cF3CfR2Cs`r,LYP_?+43=b\^H!H\[DjghmV-+SPLO$WW-O+.?D7_aecXT#1D-_nqdfL:qe>_62NH2`;]Kp<;E8&+l!-_4J7CGmp=Wk8=]`P$!?cdfhIe5sI+h2?WUNRD7o;%,BeDGFI3lL57mqlUod4aj!,dX!8)9U=k+PMVDl41V`Uor`>"!8`05R;rE":)C_:e+rLNklOtT:^'M;]n[?mARMb=*k?JFW"@?u[lg>cQGjS*puW8MSa1o]f.KUAjb36/>`^An?i/d:nD[c"iG>Y)cK0?\H%%`P_s:UIsk47hGV_JR8/77=Hb[hZ@e[hZ@e&PX`m.rHj]RO,JG\?.)l>BNPTP5`G@qHl/Ghib'jJb%6QO(%S#!a$(J=E,N,@P?iZX(j`/X`Zlp@hTR-2o+0O46/60iHRgPX>lCG92?9>:?RI#=E<^*Ua_^FPBTrN/tS!a)V=@ZFLD;f`g)B1q#45Q/3?u75G!*-92?;=i\U%3q8p+MjE.Zc<#$rJ;[Q/m^O^_hDV0*0!g]?+KZ.S]@+!X_pu0^A=Ea6]/3WS?^5je!$\b_Pk#tb%QOi))Z@YUE5F[Xau*B/YHHn,f:+I*a9e8h,u`6_@-5s>]:h'%S*/"^kjH3E9q9@*-p6HLGE%$X0BLNX3STA,C,"WmgUX;@*.XW=Ea6MX?:MBiZoOIq?j;?P"lN.,"e319q6*m'/(b:fRAidj>?h1i6/0%fp&$C2aTKdB6\_m2Y5i.iNpYiKaM2"pT.gn!'$r5]7JEo]+UE&&Ma4S0%_S9Sm1q>us(cA$0PF(&@%4tJd%?o[]kIQ3i"5G#rHmuP/57E>#X]9C5'j09tN-+akK])/-W@+]W_#Nd,LKLJCP@,^'L=E-;6Y30#^Ts#"#h(FIo7pa*m,B$u3nJkYY/.\WUkCeY'Jn'M=nF0WfNW'1^\7[VQ[D944NX*G2R[!JChjot_)`KtbpYM,+Vp`lmI6J!R$Y'X4%En^XM&$:rRl@qZ?KlA0:(p_uR&Gr[L[\qZnmX)&iBC/.7qf(NA6>rPdg^^H/(A)TJEKW^jBoM!4[)*casr!SIm8[AJ!\$(6Ns^`?kt:Spmd.R]_5pSG6_HjP5UfQlbYGkp3/f\^B76gc\Lu`h1kS=b+[>B#IY+0Z,7):r:L3ZI=:&CqOt'm%pmb2@/7W#OB_1)3e&5NFnEJHMn)[4ie4ACc*2TQ6`BJ=K-HAMWiZYX3VjSY*de+e@(p`4#.XRo&0:KH;KAm9lKA7W.kf+=hOAZ8JOt-s?eZf$f/c9do%Q:4c5d\lk?^"_$lVd"UrKSkbE2D!E>QJW(X5MFL#&n_YJ[a7hmPLHZVuci4)c@(`PKP(jFW)VB/.'N4LjTZduZ*H:+_,Aaqh$l`+qi4"qk#[&/YhsGmo$P0rcY@,2_4Rj=6rjW?JV;ouMl&MRg6cY#.'-/Vb@Ic'Yqi7^'IK.2tdbLs+@DQ;2&@F_9(B3t4iNK?/nFskg2nY"D(-EDZ`H-ILF3X[LQ/QZ!JpgF'>LGlXp%f@;/UK/;l043U8?9r'-gigqR12r4`^4rluB,Hs8XJOnMHO`kskMj%(lmbZ9C2*:NLJU9%Y?>LNJ`FM9qSofeBHOo8Y4Im=o_ho@r&[$)g7,<*ZCYT0U\Yduh7WlMm\V3n-Sj?oRA!e?b$aq=X6b2"VWV<#P9h-;,f_65#jjub08JUSTFqG^BIB[8&:l=rpH]R"b%S,l3$'?4Vo1WB>_8,quM:RbTiJoqZQ'Zp(&]:OpBkdIfhnVc[k*4?DnF3iiQ=/+pXF(Hir7HHOGa-(m^[+a54V+UMjSm_^>0SfJ?WUpc7P.U2SSuU8)X7nVJI-Yla]4eReOT8A=%N#qS7=)I@dei54Le\0U]F99/2OU=1EmnE;BiZgJIMMg\upHZae]".1&)G`[_52dj<5/"Mj+8if+WN9ECO_4hT47h)pB\()0V`6HeQnQ4.T37ii`Wo^\K[[Pk[N&1-3HsiHRkF1lFHu:HP.rHkT/"UO^+1ca#l#j-8s&I6Z`GIK=*uJYU\bNs")pU>"&,=p\gf@cu>I@#`;P*MWMYJb@k5LJQiI.L7INA"XSZq6m0$N4%"6TT3)kqer#E_+9_i4UUjLM/U>SD7qRKmBq!@".H*fTP(m$P$ddgjLgaIqQYXlVesAf6rJ1OY6&0j7d9;mqE?<.2c/X4/?@aZD>r:a,&"S*A#uHgfAf5Ro\^@Vut>pEs:q3a)ZO:XgkKbiTHB*kAp9o!6bu0u%9"H\#flRD7[bZJ\XZ%D4lSZS;D:%Qk_mt[A@->X"fRD2On&,C.[Kb[YMpGd[oL4Rl:5,Xkf-"Po%E"K9TB#($r%f[0qd,n;*1grgcSa_n3*XZCrqh*Lh=eXgq$r'p8V>CR)\BF;/qcZ#K8=A'+`)KdKPsJ;W9=UCp\,Uc?&%i#=!;,?@gLh:*MTtf5ie4]nE\bO:tjS-5G!60+jh_M]&=jsUM+31%1%m+$$3Q11&UR_Yl,_u7:1h\>>l[B[n@:dJ'Yq!%j5\()FXLP)a^;!JadMjTQa]&[PS9I@L1_7#=>m`JFG/T0]RWmH*3Q[Xr2`)l$':]#GU,E_:KXS+Cn9>iQln(IO$fZ6=VboI!6?Zm`^EIR+DoGf/oA+-P&Q;]Jf,)BonC')j:dU0s;^9G8>jJIfuIWZ9U'!n5XgBM]DN<\f23l2[_r]1*JJTm!14h`%+2k*e_JG2XG_n@BhKElZG-/I/@3eeiOGKm662PGSpHG+5T@DVSLO+2X.Gf8^cjs@moL:%MkThgfE32Ht8]qkF1oGS1Wp`[c4_&L7^i)CF5Wg`ZK0rSVu6[gPXaCgPY/$eoT+2"4!3REEdEe"iJY0cSZB^2<,3,rQ`B!`GP:e[T/Mj.cj9HV/Jq[=27h14>ab,]204@V7fUWHpYqI4V2T)cR&0@#ETf\i5fZm.rht7&fG!6/E9R'5@K^I'=OI\&`J(CD_kcS/XbUWt`^Xu%tG3"1&,\6XbR'S"R"t!>D/k#'OL2Y\@6MREn#'hmEGei4$.ZB/W3?,-<:XWk>TQEKJl(MTTkD9ZaDC]TT+pq*#o\OsEZ?9P3Fl65)FE%%5h*A$&@qXniR^F.[It;fYDG&_pi[a4Xbqc#2.sk,@BD^"@B30hGlMp'^r9%Udmo/&0G2Q'&cE5OYiZ(AY;8GM7P9nt-R>RK9/6SUed=a$:a0US9D/A99RpD,#`*9c%4*k"?73+uW_WW%BHQbuZ$.o-M`kceWWhYh9R*IEA]>'dC(kL[ZnI+C_ZC0,(n\'$T6Z)O8-]$maA'd2bpa2=I0CfR?&"1!9+Vhd&a"tTrnf[W7BJag=F1JKiB:r+6-ru-hlaQo5>(rWg+OaD3^%SDE*I]+)Iq_r^5?pi^d(/=/7dqkWfr\!(jncfT<=].>[hZ@e[hXB=:"$TI.uEG@dJP'H[c4`a,nGqs=7DaG9-/'GS;Z-ZgFB/1eXY1[E$Mt3r;J;S"Fg'e!(k[d6Y<-MEU@JFb,6o.2W=-r-%5Z]mdFETsJeD1urFL2S,eJWmtc;)b53hWf8?t*A!+CDLoklu=bi0@koB11&,8O\USJDUJ^0k'jIp;G+g\KWH9,"*])&$gIam'$/cpcY7r`f>lf\qoU)U[)gS+Yp'D-K7T`=Q7+MSrX1AY#IjLD+o(BWu0d+-eOJNu0X+kd$QNm:r:"T0rmHdoh?1N&9Qde%bXJDPE3h499q6Y]X.bZT96\?39CLhLD\[c4_>U03*&MVF$CMVF#E-5F!)[hTM"'&6OC<^F-q^0Qp*WL63%h:2sOD*IHrG=(ZQ4n.'p=?(cj)!p+a$iKu6fX^lTd#S>-r^$J]G%_\C[UF:]^ZNF0.qhL:VPY<#ac'NMD6l7M[;TOcc's"RraSKJ:;3Sf+W].[LRps)%TV^rXSG*Ga+EJ'_fm\Us2LK]ee1k8MkOgHZk?#4t-eIcQjYNqt`df)P5R0HT(8GlUe>f]F3mhem$g*qk(bBJ]JFH3\pl^FISB!.A=kCY)>.0<_OXL6U1%cmS2]8T/qT'5,t(-O0EsgOUCni:k%&)$%0';$+R+IXnWIJF7EMapfsRR+L`)peb&_DD5NmTfH*;&Y3C)3;&tbQMVF$CMVDll5/ctr4BF5,CD7$7[c4`aIfH(ce8kfJ!sm41^!8L8"*.Uc>6WE_R^;EE>feAoQeM[-^CM<55CE.s=5`Uo^ub+'VN'oWj)MugP0<6GkF#+Rf?W9iAnqRR[gbH+s)?b2+6ZfgFZL!B*Bj\!&(gli*'q0'IpVX-381s9!3Pjm$J_02lo.AMQHu`ZA+G9^o6ST\]P:phfZfMFTkMj$sY/rblq*F/,8"5&77*rtUo?HcNK\%TqkqsDUJ_`MBI]oFdrq$e,+4Z-kY`qZ:_7l*)JNc0Y3NQJr!q]TEn,!L\5CB*ke>Ku)]31c&k$ANVA>B*jNeINqO`H1QSPBSWs.rMEGg/deM;#^OkRjIK5kn$2WiQOp6@JUekd=oL*_[,/%Ue8\ZNBD\?-TXN%r?)\Dt#<:A8TOGK[rq"^n_uKFM`M2s;>UF&N0CX>\F$ktcn[`$*BfFIlH'qL`sDe)5l/E!T;GqWoU51V8Y<3Op#u!Io<\/sa^MMCrtB?bZE*D0uef'DC]TTDC]TT`Y`3E0fK$@X_,ec3e./M['Wr.WOWlb>:lLt">.kmct]h:IS.B>^kJUq.7C`n[>Z=.))I>TF-8.)^$osg%B3[^Xf&WuY??AQ8u)^?:QkMhlHfBANl)]DN%r?)Vs-!>oD`!fcSM1b.jY)C&kQGKAU\6o(]GL*;L0qZ[VBMjK"BNF8@i.2F4QidDC]TTDC`^D@uN,XCiN[!>B*k]gfB@g`Y`3%b]-i]pMKTjWd%(IT+?p@bu!"g&,"1!d*PSo9o\gBhp;K8N%rQ#IX5I:t*bsHM9>If0Wbk,LeEe(h8N08ZPn?-bskfIVPm$,F_Hmq[D\sd\!Im\pC)5gu"*7Kj!4N]P'k<1W`n9p@gPS^AgfE32N%r><,Gde@-FH;FT99s)cW[6S6&'j=h2_'3&dX^GRr0ub&?PFqY(UX;$gT#+^NVHl72obCU*.@^5m9Z=!t;$@XK(ILc6JYB#5]SE3_6V0iu'G_L9gsUq/U1,N'.=m(pDkWu2cqm[C`C96hs-niH-m$)H8`0!d+mD/Y@Z3%](`Q!AUs&\8G#M.7?f2]g^Zc$5H(N'8tcnCobEb]f;#6q>L$haXC?>6[j#*NX,p,X3^[IFAC<.rHkT/&iE9N!4:X<\A9jWJfMggPXaC0ub&?1F?ui(UqrE`GIL+f3>A7LQm`An9P2pE4Vaj@KVt;"5Yq#[+aMCNjXh^R$77\!?b6N%rc:Q[b9X93,HBI`GNS2`>E*DZ!`UHC?2n,^2Vk.gfE32N%r^eah5(Sh_sdjVWgcQ0o37S@UHTds?.pa@QLt/2&$`+YI%3SrT;tc\D)AO+X3C]?Ft6gDoH(NE\?39C(h8LZ(p8$KqYXZJ6+)CE'2gs/CY3U=KLBG=cl[(6])%p5r/E-j_*OS=G[/hVbM-,lNqVQS[rl*Q#tiIIsfdbn\C!PHS$LZn-[TLI8Uk/0ubOaIH'4NFJk)[bKZeO5G]H9QLp$.D@lc2q3q!"oiq>BAP3V5UU4@UlWGh('lK729)hF,Cpa5)hFh;*)G-Rhl?>HDr?[jB\6%B,eOt3eb9ah4@jV(']eaRtl_MSL6)d]7+mG!D/Esj10BoLe)eP[[H7jVdC]9.H$$mRa9.RBls4(eh^r;'T^hq&-`GNR2@uR[#Nn]HGMVF$CMVF"C`Y`3%r,Gq\>B*llN,<_5E=mHNIW2j2L,M9[l`E3/]:dhdLK8]@p9\%J_"$A`9-8E6AT7B=//7.eLV1i5BIJ9/?:u#X*6mD`fKe%dX478_Aac>bI3Gu,#@LqD3UC._]:cal,/P\XQm6/AW/@`)#O6TS&d8IZae>m6@D&$+#-P@rMI!N,tX`9?]^-jh%tBk\uc`@o-O>N\pt]pY9^fQYGF!'7+09B=OV?U="TO+afU""*@q_s[?=9.4o69L=jlR)K;?!G46`lC]2E:.hW?iH9hFfG'iLp)fCMW27ae3-HC4h+O0"[&s(irPHFG.jHCOS'\Z*:DqL>B8_9rB$*Y\^c't4pe'k<1W`e#RU.rHkT.rHkT.rHlW(h8Ma5Ahuh.rMC*[]MmJ?%dkmDnot+J^;pPA*Fbi6@a8:f^a0qMMNV%0ZX)#b4pS<7E`i@:Ks%r?DO?>e'q4ca*Q%cMGkRrlsB4Xn5Q:N%r?_ba6^qWfo_%UL0jAS_c(!EkV!WP.iR5J94i??(`j3dKMI/8sf0AT\c7S8Va!g\Lo#<*Z\BV-/DUqOtL*IO`ciDX6.B9ro;S?Uj'>OJ90.%8O(YYfP"r4K"@7[8@i.2gfE32gfB@g`Yb39\?39C\?39C\?39C(h8LZ2ZC4g\?39CB'QgnZT8,Mm_8jrY64-7-a\)?K>-3B];Go!S"$+NW>>-(fB$ZH^Uk&Kh#@K1>o2Gs?QlZPQiA/%J,\>[?b_/7WtmtmVKH9j\=ok2'M?Qk^_^Yhh,YT/".WCFPh.h1S,*>FfWY[V',*Y2EGuEF#huA90ub&?m(Y?kBLk@a0=0)>_WLeSRe4er3Ji2QT82`JN[c>\**&0Y<4s@OLjlNRP.h15mYb)n>tIP>GrOu2cu5U"0n4E'(OA7,42LjV\l4ndqAQUW8M?hli6nU'GEdPE=-C9a9j\"qX/*3pYAg)/mi/I>kGb9/;_@6*p"AREknhHh+6q15q%$6hH!O=WUj+?adUd*,DM/pJrdGGu>B*ke>;=,7@r/1)[c4aT[c4aT[c4`)N%r?)puAgB[c4`an_5O(h$)/BA[Arjd*W"KFr0fCp4CQWKY"$]d-l*)r>)m`NSq.XK8f[hiPM9"GlM:Te3=Crg*[L%k4UR_Z76iANd>Zs]hhs3"n0XW_;!?A2Q%#>Fr*-?*[n(+JD@/>#[=VNgFlA3qt8q6-sUqMr*aD6^0J%50Z[F!Q.&%*u`E;j/ebZUJBgfE32gfB@g`YeTiEEf[SM;*pBMVF"C`Y`3l4DlZ-+`U]ioKAG&d:1jm7qKWQUN*?Qh'-[it,2o0h-*V8u#l'rji,mVf@J@S7P4qdRMW+]>7ZEF[1L&g3G^p.#5%(Tmo=f-:Ud.SWh(rb(h;pidWqQ_P4dL^H+?UT9r@RE5Pc:j$;!IV\$4GJ^)T_ReX&DD/Bn#11&[jeiSX5C8`i6]]gDZ59b!*/^TsN0W=]d3('(fY[hZ@e@uN.^VCHI62Bd'EEEdEe0ub&?CmN+Y`?ljJX'jdb@I#R4>hU^4=<,]8fa0RG&)')Hi,H9$VQg;>)scEoqAlfN]O8"T_<2;YX2PBoWuHH[#(rfcXL;_SZ.QnXn:JR:K$ofK-nd0&%Y#FBC^u*R#u6sug\)YlC>Egt_p?*7MUcK-h`oRu9)na+h,`Z.Rl\P+@uR\m:7inU85jObo]`hK;)CL=fB:fKBCG\Zs"42!;Rg7DA8D<'cWgA>dX,:bAUXfK^=0fF7"51@?DZ3%%!?\M:t8YY$$Qc-gPXaCgPR`*(h6JZ[hYBo\?39C\?-TXN%m66j0iD1'":jpD_&M*'(3C5O2he0Ws7:i]#!?G6>'@9<7Wlk6[]WDh+e1m5Rs^8#nDa,jn+)Di<;lT$^rXO\$$H]%\GH+;Z@Is8P'MYQ^0m,HTO4SG0iroF4e;]0AQ-n4Q(s?MZ]3I:b[[oD';'n^@H#oG'Mrni3s0r?F"7=S#2B7edYH5Bl]p6DLK]XbOuQ3_6dP%_/XNXgkJM@uN-#JT4n6>CH=WXgkLCXVbQ,0fJX_[c4alno7k;osS$=&*NEC6Xukpr9XMu[+JgF'j,W,<7NlFb,QRI/Ie3[$eXhui,B$Y"e6('Ye_]&`[:%[ZWY*gMVl1(P0u,T\$puaYL2G7X'jaG,Ulb35'\3oiCq)W'B8'T3fMS@uO.253j#uGqS>#Xm=m6@_T_Dp_6%*G[8aqk^(%D^5ZrfeQ,a=s%bINeC?m5H9TPUP6frEgfE32N%rmbTJ$2O$5E[_?(h7C%<$>81dS6MZd:]@p8Y;''n:X*2kKBK8biq^DpQ'c!X!-N3R_`uJEEdEe0ub&?Cbk"Y)DZ32)'$-9fXKD"6o]<6)g#;0I;R?XC'1*C%3/,%PZ?=m$:CX#?k$%@%Z)?=f4bD%0aGWrF7+UWW-7d)Vd,MGbk+XtWh@6iWL(I%^M'Q%R-gMgbp05aD/];_+3YO/qEN`>E*DZ0C*NgS$ngs"uG*oYCCK6(btg`G$YMo,\l[KX0iBs.:V05P'U'eWg]4p'/%/\?39C(h8LZp:50I%2lY*%$')"gPXaC0ub&?P7b:SOE"LLi4,o/rZ:Fs="5TRIg:sm/YK;VWblL%k2n"hX/e*72FBi)'/VU+6UQL"\_.$Y9eA\IKSJV96W5KlMC'M(]NK/B;fe^I0ZY!/AiW=RA()RFEa/FEaQ25o1t=/A7n.P_N%rE*D0uhis8[jsKq/6ke:Wd(jg@N*s`GNR2@uN.^(`P5J.rHlW(h8LZ`n:(H[Mo%OP.sojdc1D5gKb#]!ubAqi-%2uC2!]dX!+g1,,Zm]op@BgR]i0mlhLUAk-!/TFdJnrE_H6@S"qF^:JLLb).SU[`e(IHf3<[u?W'(l\=G>CH7O9i#&Yr/X3$CVCsM2>B;lF;\o]P=@>>7e;6q[d,[:VK(Ia06s)8gqA"dY@PA=%S=FI<=6/paV\NH0c!^tZ)q8+i3qXRqXT'V0f$[3%bt+?;=,7@uO.2\?.*#>;]Qb@'R((bjJaJ)B's0&C0K1H_k0FEfn;%Y&0bP\p8'HTS58%GJr2C8lnlZbehlo,h#hL%K77lWYV(Is]OE=^/PZCAeXYrdUV!X=j>Q$,oPn$G7Uj,K2\O_sf8Cs\fUta=-l&h2ZAP95&!i];MD,i1<96q!=79038l[&7:[[#>#2V=SYYd]5-D1R8QJAC:N:Kod1gjXn3D/cun:4pIG!P?ei(:sYQ/o5``_r1[/blKGp)]X/cK[&c^QdZ$pRffa8K>ZdT]@-q0_e]hGn>p#;g7YkRp`EY/G*)%U^Ps#5]%t`unU]6Y"@rLZs2a-]i4l&Otjrnqi&%e\?39C\?39C\?39C(h8N0n],LcD8gA2D8gA2D8gA2(h8Ma5AmO$g/e&jWMlb7Y^]-d?]UnY$ej<<6+<,>&Uf5Y#"_>'BZAFfN@a[a14R7?.D;1\HhYke)BZ4lO\:1%\,PO%VIHMK/6)Ci9Z00E&&RGcLubWU\NmTE&?MhS4H7.>VI.S^B"XB+2R3bGMuZ`9fSE&%]@VloUDFE9SYDqL9h]a%.!gs30SFp:*i&VZf`FG\b#RRoXR&&1@[R+YqHjY:*6u/L5VC]iPNRWE&fo^oHWPY'B.C$.hJ=l*qV3Z(G:8f7'B`XV-gAI)1d7I3hLL+oJ27>PD9gDFD2B&&gZ:?(2;^ge-7'Kf*.t;s](ejbE,"+68Zq6Z-H8ZHN18Wi?/A/,etCU)gP_g*!/]a=MCbIcNqO(NO9mTHAGcmXhN\4(MDR5sLN2l24Vn'cqU&h?GtTm05T/WsZUTLM%o^fU)@MXEHPXpu`DP>oq?/0f?FB5[Q4AQSH8IWRYG[o4;*/Xe7c$@^UjaH:FPd_u+g2rMJ]nK'?iMm4PWTIB`b@0kdiF@B+fK1<(/@T+SOI[hZ@e[hZ@e[hZ@e@uN-#rj])?XgkLCXgkLCXgkJM@uR\_a)*\FgF=`g_P.H5mRk!OR1+X1+11e75^.E*o_/&'+sIH>06As&%UDYcP()JJV!CM%KRQ>PaTsQ+dN,6Xd_!eP@=<]iq,==?h$*YlX"HtN9=719q52p3-g;Er?d]&AJC6Z+IIY]@8_9Re%Xl1C0hE1Cc4bWLoGZtg<$CMN\1?eSUqR_Y12GiAm=L-b4H92?V@4;Gq-A$JVOVY5BUBL&)kh4a"[!@k5&ueVWDjbpdrh.V-^hFET[t-Y.bKSk.ZT1-VctqX$"`4FRmp!0Rn:&o6\"i4a$o!p)H8:%*UZer$M"NLDu8D3"8WD(V]*O7)g'RCj^5,EEdEeEEdEeEEdEe0ub&?j,_rPgPXaCgPXaCgPXaC0ub%LJ)"('[B8SEL-W]T#^BSL!Z%tF!)IYW_YVNHiQ(%1+SXtR(ub-g\l6hr7A'2;VfZ/-Ab>(Kq@T8Gk&$s`6`t?)Y+O.oD<^',:T]cm-1e$V([,YZ3[NTVqB"uXP&;du8_;:O^>;K>RU0?LV@uF+Dm`NlQ^F2MQ&^u#8`,/+n)l`'^Uq4YlDAZ!dda7dWC50OPq.j]oiCnp@,=p/4^9rUG,H/%-Da":I/l%GrK(%8"u!!Xn5[D3\=NF*mQ<9fHW()h+r3L2[0(Ro8q=smAIpbD.AYbDL$.nC+MZ&.s7muShGu\rk*(".p&8`/\,?TFXn9KL>;'FNhKX;qE$*efq,G1a)J*o9jUi9HL-G[BeBI777]V&*H=Zp@_](]9Qn(i0[@N:9?109l?;dN8eoI^tcmpL(JPOrs'E1WC8A/-t7DijRjTijRjTijRjT@Z3%]`ZMZ)[hZ@e[hZ@e[hZ@e@uN-#rj])-r&r]-k!q\-XTVBEmt]1P06D;[5u4DP\'GQs&YWSR;!%qWT@.B7q@O_mqPkWc)3Kq:>n_N3kV_6RV:VdbefU&o8O$d8iRP,pXqKPk*Kn,A]=oaE9esK?9"1)"$bC5VBM!Es(.k,clH>X!9):ZVeDln4d"E/7#dnY2+L3F!;geA`8"2-8Z-oD`r]EULW4n[9^9NQ$16NE'ne;!;7d(!dt[0#_*!R+unC6qI$0"&n@]45,7eo^6BQg7BEqWk?#l*,a7#Dq2m0uhiSMqa-DMVF$CMVF$CMVF"C`Y]YEgfE32gfE32gfE32gfB@g`n:(H[[Qc(2)d!)b,TJjl)OQ@oBILcq(idEDd3fA"^)BX*WdR&/);s(VTepQK_2>;$I,1u^Y2>QL7(7`_FqcjL2WZZ"7!"aDd%&8V&cH*h;.`5g\$>/LS;GTm$s:_?'8*]In]*fQL7\";+u_?U\L*2[BI'fD3a#2%[g<\6\Ptib,nK:m=C5/Eql8F_]Z.q&WS,AJORa`_3)YMaK'!-Y$g_0(4@>#uAD*E5RK]"@iD9%1HQ7ImeEWkmOBF8Y[.nqG3r*X8,Z)Ut>OdQeUKbYJ((oI4IRQRRaj=5AOcH$,CBm4k"'3hUbBC/=+BEA6^C7f]Ec'_]=Vr2I=7!eb\F2SDoSs78q5t69)APY\m4m(=@pq08RLk-?..>\kptT6P:AB[)iG$D2/(<*=Au#XK_;8!e`0#!E(#PKKE>Un=OX9iC._gKLC7o2kRd9(DV+WgVk1f5qj`80*gUG%iDnh"13HGTP+eXP2!;gkuLcL4h@:BM3!Q%1@+X0#M+sWgiDU_on\6pI2>.=hRJ+l)Wq0jco=M=i;Y#l"Frk&S=Y?D#IfDc'&^I?&kc.bM_P^\\H'ao@us+J/eg]n)Y++dumNl.h0Vr@",3&mOl"ICbg6gBr;E;f&2\:#kJmbGMa&+2T6-]aiaer'sXaa"B"?b_9'DtBX#U^/G"b+Po?"rccB@@Z)pmrX32@5rVm&JS2++KO4-OI$mIQ$,DnPs`&(]@&JK<3ut(U!bN7;AgR%;ZheC55iZEtF8[%f-MPH*u7#jagL0*Up_q!BRiu.Xa*>S'[5;!G+^b7pacR6[!#W*(YG[<`^6m>i+GHF``2biJ,?Q)gM9$0Q;=#BCUtu\?ZR3K`4-]IS*Fs=#I-@=K+)`hdnM],cNo$1;tT6!7^uk?AQGF=1^E*PVUr@BkC>\HoJfnk1cmaldFA=.XtFC1[XgUu168MfVc__TgfE32gfE32gfE32gf@AL*,2:ACGZ:W\YduhB(H4pWTW9LijRjTijRjT$3o9dUUhLa.rMCjI'1j:OQW'=kF0X7A>YrVgM.XCX(JCAoKW/4ftA'#FpBi\21a$6JQ@QBjp?RgA[&`"_6SAT'K48tLOcbL:,#&A3\2XgkLCXgkLCXiC1;Fu3ROD8g?L+m0d,!I6;hCR1K+S-PQIk;$D!gPXaCgPXaCgPXa#C4Fcok0(<;\?.+=>iRphcc'tMP&lWSJ@"EDk0%^J"nT1nG[(e1DsH_3H(_Fm!k\He#Q'OQJ\?h6_-]^lL3IBE3dbtr:&,Ykj5)coY7;O4"$&$lJA,Tna5r%qDC`?B%1-+._<^@d]W8;)I]Yuii-hF(nnVI&TZ.%e2:g/*(kQ>k53mP)`Fc%a2'rEtZ4*Y(g'0u'%R[?+5.U!6osWQaY:<^!YL3a]FY4Nj$YrF*\BJX#C(qJ5VeQIcY:=G\6@Q$W$6!1=Y0I%mIFAdGl4CGO26>d*E4sMM21rR]hHM__D4Y]Rnp:r\brGQMYCEZJ@=o(s=$#_bqU#6S5X*&%`GH>p\?5brhVbj%[ebO/MVDlJgf?g2j1oNND8gA2D8gA2D8g?LoM+GU+sNc-_/2%][["R57doMG49#Yd,O;Bp9#I8ZZr.VX4uS#!*=Lp"M4K'Zb$J%i\/*DjK"A_m3X*VhLOoNdiga53aB@I$a/;VK8Z'piTcCZ8@a%Fqu[`fV*](V4"t$JIWor-H5^&g-QT@ch>mMSe8%!/069/83i$)o"]$nZ+Yi3gkbkRi9f8`D%-PWil_#?1Fu:"4Y$?Nn=0Fq_aq[I/d\Z8-C.]s\POqfEX`"%]V+>pk.p%nmg9mscqe:Kt;Qmt!bK8,]f`;2!Ms11N&L2_9iL'WN/kIFeSrr:ZPHIb"gGMcO'7N3LZ#W#[\BG6D8gA2D8gA2D=op8OnbH4kMj%(s'.j1^qj*nD8g?\1EO"?[hZ@e[hZC&k<)8oF'>/nk6h30"j$cM?Qlo/o\W]hT2*8B.q!M/K>l:_3l1+G&FDeJipQX_SY*`n3lXS%r3O-%k8e2/k8H4c!Z+b+6^+8MoT:EGfaS^r]=e:d*\VV,h49;m[+irWK>8qk:++\rej8rF/uKBTX6__`\6U_+fPFA`:]SI'7F9oR#Ii.c0"K0t>NjK(^P.-IdVF<"SIP&E^'22:q^<@lnCh^`\ZP^6D%8WiGk_7[5'dKPNuR`.k2-YD\Qd=NZJ'/'Z!"mhGI638QcB9;Fg]TEdL>uY@?iCgc(KQrq?Np2n%\2)r"4":040>+pc.L&kluXQ%m@V>d+R4YJaT,gZum;Z=0;K!KKs/tFEMe[:X\,Unjd-;5ErG#HX>qYb2K*cTX1\_Lks'PV_\;nS_[,q@"EqXc@J0+s5`'%4$eAlF'EWgEE`V6\[\cOXgkLCXgkKhLqWk,.rHkT.rHkT.rHkT.rHkT.jC_Xj0kEEgIe(<-iH:'hWr4Aqqf5>s+,6\X'Fc'(V]Bm!!*-0!JZ0@0T7,60H:p\K*955!lmh5T*.o7iOC/YELc/(G?M@cX"3UDP1?Co[eHZdKj;'S@ILhs8tYp.8agSa-Ce@?X&Rj_u8-^Y-Nn_Jg^27Rmk71,+k^M.n\3>Lch<[DllB"!d?;CGH.&Xb(^!>':``fiJ+!,!>X<47q7M0U[s;78En1&oe`t"CW\sKBZ&6-5&%XlDp+&[!M7e?+la:4#SYFe5W;JI15t"9/%9D5^b-?pHa5'YHJ`P%h1j2N7Bh=HKf0D76t4re[`Lef[X5O8J$CKQ-4,STFX(Y&;KNO$uW-[[:*`kqWe>:5IA;V&K>K'qLUn5aBC<3#@YCTXARlq+7d=rlIoUsB*I5Slnhu)5>3(!L^$<+6p%`u`o*UdC7r?-NVU?n1:$:KfJfd1kk8bDDUJS\+/>nR1Y&#Vs'l@(+L>LT[UNIGXk6ZjX-U>oD:NEEY#f\H=+*8>Cb)sE2RV(tU[Q)oDAf;Zk/Eja4I*%oFl%DGHH5AGIUcq->qg\!8)i_WlR]]ZVXd\KQ%h>XA0q\B?FA?`2@%EN7+GH$`5HBr>ds3CA!o-,nO$G]m7n8""`iTX9T(@)UT518m4d%BXie)Xm3(3YmNjh/b/)H4Iqa;TGWZ-m90S`%-",)[_K[j()NV]f^A&=%Fp&!O!Vktf56QK1qqo6)54r"PkjSKNT6]k^n/p!T$i]D48"oqZB7I^J,6NR;BWr#EdV0Q(_GCoGU[96fJ*&$Ck\,aH'3!7"=Fro8KCIT3n"Jc,?*B:3*H7[T%m$cS#oI[l"oL%mM84]A6$V/PgL8j5G,PL]FPN.AmF$Pnk>%Y#?_'._A]R_8:IA/*#`kT@"j``'$bO`m_l9VOX\_0",p\CKm+4>lCgJ^nc^\m=ff\=pYNugIds8MZJT\f;/=!JgPfK^J"2`EN#:ED_,FZ59g%7.+sYl%=lhr_MmYIsWCeFA/kRb3k4RX<2]^?\e"'l;Fn10:\[f;hq&fW+7;jU*oeHGu%=W'>9_/D0H[4U7Ze0^(0PqE5Z%"sM`YD8iqm>Ht<_IoCqZF4F>,'usM,X',(;$\'+"DiZH?U,1&)o2'(.5,F07pq,IpA[pUSp3-H9\'@r#:()A`cGJ.oUrofW^$@9YKq3;P_/!)^GP&ZB%98sG.^ogJ3d[M@A$rlQ]AA>@bn&+;Bn%&@@k"oA56k\t'\#oE,TMHaQigj'#X&+J=4"4h:kpV#hc##Z!@oEbi50jI^@Lt0\7f%7ahKqJSY--RTd]9rl\C*[]eH%66d(>%m]Km+3'.@&=;GJtfr&Jd_"i7/I.mC!iEHNt^qa]j>ZV,Mfc=-T@,JaB$of#e%U7JHaNO<^b::dO/9T\1@c:'8!sW]>DAdqdD=IJGMbg:7c6RH=dNgJl$s6csJT+VP[cOR=Q/-?&!DA+1.dLW'C1C3C1C]MM;SO[^BCq1Gc@Vs8E,iO[oC83'KM5orduM8,*N:8dHSN'?%h6%)udK34]ZPs4hYuatLm\4fdmSg"BDB/%-2IMJ^>@@U$+>#U/8`L2Fo<@U$+>fN)f=[M@PSD++^Re\eh1\[FPDjB\-Dk6s.U<_SGB81Iu$\W)QGZQ#mM87llrQHVTG]i7$#PGubE[@?fN=?Ho_,qDcu]MdEf7VHQmoL0B'FO8?>rFf3.ck$_0U]UY/>GNpF=D=_fAQYS(9J`[p:guBj8Np])5(t0jV\?8h9m="FSS6/D":bWeBD_MC9Ao)^@-icIo2[$fp$9n@=Vd[FYJTB*YT#)2upik*;XO(;eIc"$Q%RUg!aHt<_@@U$+>#U-!ifN,-'<_a(;IIJYlU.Ns=C5mBce(&,gTic&h3f@Z,$iO*CG4l?]?U"*9r;@]YJPJ07?eb/Vr:tu[KV*[A*5;:'??l2!7JOY#&&L^i"X!O8KCDqQr>JF+c,0LkrrIB!mW/YIsrYrp:e81m*>i1^-7u[aj!ZNTii0CTMRFkUt4@/D=GlGB]K+?%&qj]Tns;V7q44eYb@*WdcgT!bMuF=-O&SnVP/LSZ3QE9K]0Ib&)@3,0RViUK.n@Pi8:,R!p\%26ZUN=Sq-pp5i0ke>TURTL!89*7)"pPZ*A4#cV]#7hi,,D0Lq>;??)$MdrMBWHYLYFtQtc=&-b$L2jdIH63)i#n9=i^\C4.+G]:FK#^5oSWt4T:U91SiLj)55=`A_,I7,_@)\__O9)&W1Q$iT"1B;6cZL+cf^"!JsMZ!fn!O,:ES*?HK_&0_Ci[[)EQ`TXNrXFKTJ(4cb"K@Dd-X01h4FQmPtX-@@U$+>fN)f=[M@PS&43CPD:L+QV4I2.JYUS-`M(=IXAPTncX\nZm.`M#muP7l1]tL:pO2PY5Q)>nm3q<=(kFpJa\SVfMS^0:h$a8^YCApQX7e,,G!^*i"F'4f"Xg21iHOb#$XTBmLNidV8'i?86@GJV*JO>REumR$[JMj!$HM,N?+](.-NFOt'9'^Q3sc]j$0\XX@Yro?e_]h"Yr*:;'f,M[*+%mrL\aNYos@S->Nth>)t0DS=$9+l$oh)(0$S])d#(5b?JGa;ef%>S3"C(uQ+#5HJ,^qpnFJ1"^jA66YQ+S155a;^_S_Eu!<;T=T:jeZ@+=b_iSI>^2`qR[M'S#_4`GRf*$4nE"Pj#[-[b%K:Z9!2h?RD7r&6M>jd3]4af!rn3Kdoa.N,7r6BM(LAThQ+7@eW?+=P9]C;-tr<_>.b:Yaskg%_*Y\Rd;pH7'$4o[Nk$L[k+%0#S3Zgc#m]+aW0qeold$H%sjKji.,b@rIijm"'4$G'V+NRjCZV-0LeX)sg1#Y,CGL-`Q`4['+B3I_o]>:o$eE+L='VkthL/shYYJ7df4siB7kaH7PmM1>,&4/9@a>G*_?\>V@@U$+>#U-!ifN'TUB8fM-q$(kq+bk'U$N\Z6fe>HM4b_HO@tgE0dS6aIA<245%##pF[2u!u+,#21#bF"q'&%L7#%aIWd.emQ*Ee&&S/Hq7KCeThSN"B?GC:DoFoOTYYipX2Q44''HK!f'0FZ"]Y''g!+Wp=Z*-e`0'TVl]_Vb:T-h.*UhhHXZnJs=NRt(OoL7W>s?L$a*\el%&"./pLkRZ>8q<)+;-Vdou[t"/LnF4iOi.47f_"kqle:c6Hb%b/FGUkr/klIFj06qDZ[VZWe%F;rl^&'__i6H8Wk9'U69Er2WZ9>@%[$?*6l13U^kfqb&BUCfb(?/mkht`A,j/iB3)_Q@eGiiHse3D!8b@TV;6rD#3_Zd4[7MA@dnCZ(#+U_`O95[Z)uYZCb)q/+bYr?YcZPYCb)q/gPTje[UNIGXU$)GHIu9#doI'jkNsM`WlK[#hO#.8=$9D?\JTl2*nPC-X:h:Dog[l,3:9r8@Q4T_Ajc(b5PuDSH/"nZjJn"W5Gurf`]"^jTn;;CQkdBB:2_7GWBcSIZT9_W"HLB<0e=GS4FI@81>nQ]@rCT+kn,Q]so#!nG(nNj>"f?>kE-]D[Rs3,Y\>F;i0IpY.#@@U$+>fN)f=[M@PS&43CPD:L+QV)J^1Fl*cj3#ch-F5XiM(_4eOE-TrcH<\H?*M!"=q^)Dag_5JA;aECO(krrN\6"Dh*:]=gi`Mgi41??Y]k11Nj#VGF[nSLW-`/bc?4*Wb:>g]hh>5E&].3&E;n7u)k-11ihqM23nM=:U:F/JngI6-j9O>W6M(nF>Bu"Cn,o(jA*F6.bPJQf(]t+:MBb(l?m!'_FcaqY:AJr#>-UDAF,%(=4PYQI0,AVhM?@@4s]kR#%T4'hgpNlL)0"b4`Y9s6:CS[^6/>YokT1]N%r+Y&K;<<-VNt/c8r%0-Hff=6H7GcJ*8'T0EUZ4g$HQFU0$QI1^pN7_Rl/Z.&Atlfj>`nqI#\O^KO!)o$Qc5_^hbO0(#+U_`O95[Z)uYZKFgJmKPe]:@U$+>fN)f=[M@PSD++^Re\eh1d^CX:@WhFjX8iD#M2"J_d9UoYdY$fVROllQH+)gla;c%XsKC\SKKH#`%SQ0OhSIA?K7r'%B]C6sL;q4Jq.hoZs8$+-?/!Dll&uWUO@gTnj-OlL!hg,Jul&(5kF`7K)JGB\hL*FjXY9e*)rs5qrAW?CVX@@e#s8EJ'Pg/dfdY5OPMplF#:6ad`aMJ^>@@U$+>fN)f=63nb#_RS70k'4;V5$phH"r2VDlYHl0Y7MI3Js#9SB'&dP2>aqFLLks1[osY7d1:j-3uShRR$(XB4djYbLdt\B9984DDV^@`QD"][T(Q6WP%=(KB3k2LOi($ZKK#!\L#HB4kjb,SkrSfRY3<+&6(S$MCE'5?:_"A<")KbQo#=&OE$-(T%V@>RZ%Q:>pet1Tedq:9M(KT*]-6I;2`[q3IWaoP7)Y\=Qc;2(r7s=lGH]6l6R5Kg)3>$jMA;6/Uie#23+(B4'K?[9@.t]K2R"Y:rTT+_281\P>mq_Ye*Q(CP?IrlS%9f^QV]*,f?*]Q5G#A<12Tb@jNg$'BQf8$pSHN3JZXjN3?5,&-Z,!sMHk)5r%lkn6"(A^Qgcr8_CY-OcXeH;gPn#Z8(f$3J+ZS3+kqlk`O95[Z)n#\MJ^>@,(pN5+`&[;(#+U_`O768[M@PSD++^RA4,!MXj^O@aHg5AblkFDI2IOD;>Pfla:jcps&,IB#k?U)kIpNKGOi)iPk4n(pLkRa%9:aHE-NN1(MCC"H=dLZM=O`m(M>'AiS;X.<:gj%K1B\LYG_'A>"9DEraBpq<4Ni%#'qM?*U$Ja/9Fa3Q-Hk/YL:6`[M@PSD,gdVX')m]#-VK?&OHb#fN'TQJ#XI-bXnj+*Y5@(j#edK*>fj.ajd!KgZGsY2!#U-!8@9^"=fN+!_+K`4]Co]=">7j1-+\`KJ^q:_58U/a/+)iDMW=I83+&6*HK'9AtO@YKg6[=QN_nk'DEoNLM@`)[BiM5a_DiVL1#s@jrkH=9'#*6Lu.6RP-kO?j+nMTf7GkcoPBZk^=f<;A!)t/4Q3?/kWK=2GINY?uGg/`OB4Y,TI'!LR38t6l9[YTSJ63p^)r=V=;N!e](gT`kWX3JMiU.lleW[)C263na18RYi.Xk6Zr]4G33KPa-`+bV[$Cb)qoD=>:^Zm5(B6gqjF:]eoI@]o]d(k]/G"J#)(>LN?4XS_S?H>A1&7uXNh+V9B0\d..k^k"d!$Fck6Eag'/>A7<,1U4BRT!?Na1[k<8#U+k_X[$Z281oo5c@:XfIhi$@6GY!-N%%U:S5=L5I4i&n)Z>NmS<:WjL/KAC>oIEHqjODeZND8*Q+e`u6BQD[cAg-h=+W%IleBKKme[3.CB3o4U>W68YSXYpXCWW?[8Z)u0(D+,?M[T0ZO[N_N]YcZPYCb)q/gPTi:#[gjo4)?E6l3l@(D,j;7"YBuUm3mAZcnQA4A=sSha)ls%Xia`aL9%XoH(&^lDJUj+m7m;EJ[bbiKG$8\'4\3=CO!?JkjN##U*_/?sBnHJ:fMDQ#`.maN@#.>9$W]"^*8)`G,]FS)Q65eooIe='>]&n,cD&J92C[D@6%uF!:eSM9oaG+N3@^`GAbR7fae=;(b;rWqa/I'lL1'S'DZuAc"0;K#`P0?GgS^Rf>e5q6&RndH7IQ`:s4DCI\-M'3uEjSp.;X,gg4LE+3e/Iqk=qUTp4=tJ#Cb)q/gPTm07K9dhK?pu8>ESd![V?gTSVMuIMZ#G5kP[NbBuD:L\33X[kWXg&YLL2GHTYcZPY2/0+a*J4TX^'fi'g>i[K@Kr\b=`Lt\o:%L:^<'=YB!Ss)-B`)AUPE=K,YY$j0UH.$iFj4nnge\P!ZL4>GTm;-4sXnChbWqt!;CNXDZh/k];*\E5-l]nVZW,6*K%V/cY;ld>^:LCee?;^`'3%Y!2n;qUETI8BA$'fBG;KK32b]&#!\6%&Gaub;_JmZ#VpkA3#iCRHTkS/Inr(M?3n-M#[3`A2kG7#u2#DN&.T*YH.@RoCohh-4fIT1Pa\4b1Ej__m+K)USB?c-UagPTje[UNIGXk6ZjWuD)J(#+U_e^X!%[V?0%(^e=Ajj"p78E\pV?+3.k`Qk$d?oSdSh7Wo0?t]].;t4r>Y.'F\gL?Z,4(:;U,;E7_8F3je,8Q9J$:D8P\np2IX)[+E_R%)m_OlJh_Z'o=KGT?e/I&0tq2I,4XN]WoAt#,tTZfpMbN9ERg\O?>@UaBoH3%MNXJ-+BD"qU8pQg4*I.L["%:Rp5#E@m]sUn2KfN)f='=Lp,_7$B&#GgHt<_@@U$+>fN'>8X4Do?<_nicj>Ht:K"1As!Wg^@'fT*!GLMn1m$MBOSPCrte:5S5T;O2:Bc<]ptP@pOPEpE![\81hU:]p!cn)"Sh4F%_!s1g9r^ktE.P(Yo?m=lc3!Hf17J-1#^fEHCW>L=[8kRU,@^%_I.%Lc,uIjbNe^L=mkH2XJ`:_0&hY!/f_XoZMM.]2@gXj$)QoeRn`\[seEOQZk>3O(T()2@9WPW7;f/7EUp0d:+4(T(eP@@3<.#u\-sFY'a*e1GYi.(m^3J:"s.d(lh[]1CW(#+U_`O95[Z)uYZ2ZdfrFl.I#S$E''>HtfN)f=[M@Q^7Y#?`mQ5?!;`5b7/%4![T/'KYSBhAnWd<;uCoa"`[gG)L\9Is-39Q@=q*5oPpg*QTq*34EG9S\&cp9;)K9ki#$?BAY]@"Cgkd*Oio)5SOtTnVk!GQf3--d\(,UoD1$DSXke!g_)Rqm`o(Ye!U%CT5SRPmm"ILE8t1WRFCgIk#ZC[!G-_p=*,a)^>\5*U;V1[M1r-H?;3hEFYDq>,pq4!D,.aS!\,pa^>\7lP&O">F$b_o=-NgLnsImjo15-k2^T/t5Rj[c1[!]T!sda'YJ1PXm!B\cqT:=-n(u[To?TQ)p!3:"#^Z^q:&.RNpOtg(p:e#pSl]9O0>6j!4FH?(h#I(0nA,&%n?"Y,K_o*5$e)@?eFh6UHt<_Ht:K'D&/4>;\0P/%-2IMJ^>@@U#8(@U$5]CobugK5JT9C.ujHNc!=fYcZPY[:q-Q$=?$e5+G`4\U%PZ]Fd+HN\/4Yd597^)MY`fg^U/E2Uk5D(G0mTcJ.9af7=Gsng+.`_iMVMp)J`A9+cF'*WHS@H$LL%nODH]4*JMUNrocJiO.Xh4*SRkNs0I:lY^snI6WFH4S]LIj,:^!DcPDi949OVa-Ye$e:XR!WuhQ-Yd6ZFaL3Rq;lo(!T(m=dZZ:2TZi(:Mk!7a]>(DpHKtfKmccGkC)uQ1_98"C:(pa;:0$\*;i-[`E:6nT)&.;\8U8onF7kIK5\En)Z926SqO<7f`V9Hf]2H9iN^EFK5XBXr9jC^T<+:BoEV4bH"rYGW1c-2d#R:VbFG6tk56E/F1I;I[;(3O(cU\WN&N;V5#d/%-2IMJ^>@@U#s]!Fn=4[V?f7@@U$+>f"HSgT42"^%W&1g(P?SD[UNIk(Ub(5WjZd;g,nc?OnnJb8*B7s%P:*,n3RtPc9(,L;Bprc?*LR;$]`L;Tft4i++b_Y5rcSdX``KT':plt?a/MIU^p4H,&h!G/37`dhL_MDTf)+6Km>9(:`"8!2?:c5CoAjdX"@B"DGl6kQc.F*joM-ugt"=_[B3Jj7*)edVH.Q1hmkdiAPu&,\u6phc-)MVM7PFFFuHg9k2ia0u"S;j"nC6,I:`l*qR>0+6*"EAf6%:QoHi!SH,T;ADSN6q&JH431#=B[0e]AIYRnUV_jXencaes2?=L_qSgk8rlbLH/0/8)`LI",uCF6?:+o7@b;#,fnQ;9m4U`9Egl$JUGT`O95[Z)uYZCo_-UJo/K8@U#8)XgT+U(#+U_`O95[Z)uYZbA=5V7J?u?MJ^>@11=C(1MeSM7PrrlQc8r/3N$S7`o**mY0I[?*L*1*IdkaLTnIm'7Tl$a0<1^$\%gFB<\;C(Okr>Vm*A>+-)A@_7BAeW+V:@OV)j&i[$QA0`bid+89r&_bWMr"Eo!3_9Y=D"D/9d\<9M&h!12K?&"'/>2:d^rN7h;1C_U"CRugj"?h(+JtD/uA>R%hl)XIGdt)O`$[R99:"V$[/?l6k#ht5R`O95[Z)uYZCb)qoe%rIr@9^"="L_=j^p[]VZ)uYZCb)q/gPTjuFKhlJfN)f=JSipsYcZPY[:u\'lRQoR#PLjGY[\j[]-`-6F!:TG-A/H7Y+6$]Uq#q>?'?GAhS^SiEA\"`-SVG#[V>dXpA:WhFdha!9CQER!"=NId'6m07FcJ&TJ.aX1TrDs0>i)=4\(nV67+!j@:!I0BGA-?ZX/l&&P?:mIjnV8F@2>"b%*$$Z9s*?B*HC_U3cE"4MEcbUi]&&J7Z??kPP+ZMS@#`g#j#d]@IeF?Rc&,+P3/XT:GTgmV]Or$ke:;G,F8a:oq>Wllea_FFM&BmJjZZ3H.+R$AF?gnC;r>\*q_mX#YZ)uYZCb)q/gPTjuFKhn"fN)f=[M@PSD:Na4Xk6Zj/%/F[_RXp3q8OK9+t]#7eX7s*PT2p&7I#s%BQ4Im*cYf[k9Q?Fb:jG5$/G^#+1qD!^#L]s,78qY2:KDS!jf#j\5MY>>"YQhJ&%?KTGU':O3heQ4X-AncYF$&/_3j>a=9M[8?.i9E^p[]VOnur'@Tt]:\u9GGk(7Hh[]6L4CoA/ccbFo7T'VktB86?RglPV0^pE%2TdA=,`__t?Zc\`fGqm5uDbO6gh.MJ.ep)Yj$d\NA_7#q4(j$t)5sJma'iV0Al4q;B*D<7/e6h,&#K!%Ko0PJ/qN[`J!WJ)JOC2ClQBP;1]'IQ4I&OBu43?gee]jF2qL,%^EQjp&PNG2m-p8jJe+AmoR;bPJ]1M6#FAQ;5E2cb1>+:ON-Z9LL+%T1XrsBGBTl$+QL"5ojmof%pmXffY3^U+dDm^sBdj*9pTjM-j=&"?jcA_Fqa#61;XmCN5\[Mnpcm54XH$#QHu]@5ggm_7!fWZ)uYZCb)q/gPTijUVXBJ>;^"\YcX?7[M@PSD8iqm>Ht<_bXL`4@Qj@PTfhl?=Q/WgHttPn'gO$+e(_"$-R57'GqKjlO]Zmi!3)d!+'cU>l=!g+"fb>uY)`I35#HY,NY5Qd%QdiN/]A78LJUX>4KTF>*Yo\1#!?]IrDBprsC$joLl+0LKYtk_Lp@A=_TtdV64]cGJ+m&^2iii6(?Gf?Gr2iE)pP_3O+Eb[salATdk8b-]i,2@Wa[NPsr/aYrY,nLpQLO$9C5R*T@%r6."AV34[D_4JcFiMA&kTe,b,-C'RHIS`)V!6/5,DVTqAYR2F2Mmf-A$*R[UNIGXk6Zj/%-2Il:+/81>@\'eHhNM`jTV[fN)f=[M@PSD8iqm>Ht;J1itCWXk6[6J@T'(X!WO;`O;eDXn4BdZ!B_?)#BdO>dEC!')F.\^M:fidC1Qkb&DFj>ik6e_g9jE"d`7#L9Koci_Yu^)fVJ;6sqDSKQb-AfiH)AWi^C&/j[7sc-*Y@5u5ZMrZXg#^IO^4ZbDLro#BRAon@8%[UNGu8:%MBfN*N>K=Gk<.`:S=2>.I%um*3`hlARVAh*=#he@h@_HXM)c*rV^?!lTJ'\=`sKYfmE2jeVH.Qa,KpES#Xr[OXqT],E)8MFkeuUpR,7H46/fFBc+gRW%&nlZmMGLjo!]"hX)rXZjJhl=r^bE5)sb[-'WW\0,?#+q]o2PZK\m163RqnKo6p7pE_a+g[+0uUJdr5O/ne:eUpG#K@M1jq[lcTGo[rTYnM7YrH"1Ug0`-0=G/@@U$+>fN'pLCb)q/gPTjU'sOgm&1;^P2\6]HQ&^<4_bF8+5mF45ge1@6k]Pfg%4*[E(2(o_M)@Dfu'btho-"u5"*5:Pal(<0S#S_H6;3oT?.LAef6nG&>W_Oj!\;lH7fVZLpLDTC.*$$ofuo<^V5kZR6OKVsMg#_*Kd0)W2O'Ak$J;XG2U]C[J\L>?;J!o&TL`O;Mq,MQs=fN)f=;I@Z(c*h(c2$.Tp-A?/n'V&eLE"fEEg^DS!XlT%?o'(_^ghGTU^!\H3!/;A,^."IT%P![0p9joTiljk4t5X,bSAWAbTA7W=m1o&)2#dfb8@L3.L!5^FM(W.Q-1kRc,#8,X73#Oq^IKDUHt;F8;Si%[M8gZX*'JB`LN:*JiX@qWd;l@`jTV7fN)f=[M@U>fiIEJITs(ZC.O13#IY?JCo_]>E5e?6\UljOgT#SD/]P560%a3@X6R]/3A>,:i&_1)5Wb9RNJm@`'2?;6,RqXg=/S+H=?UfVW`S7N>;%LmJpNNcGBZD7`'UmQKP[\uC-LLs0*Hu;5o3Pi#lR7ZmgNIHf9DG)4.HhZH6fF-"YL4UNLX,-+Q-d/>lfh^$]q5XXlINTL;MA+B3V<1!*=E'Z0RbOs^h)oB$m>HtHt:K"1As!MJ^m3%FV9B`O95[Z)n;2$FU](MJ^l\YcZPY2/+SS@Qei.0MJ?A0Tf,JPc4VI8S2?kQ%c2S2,f7a]L^ecJot0:h=%=pmd_W%=dVgnG'8&FeH6@D[d+ucD7*9R[aGa!H@oZiVgK-j@f24YBA+S^rn35("`6*pRI6]aT*>1A9NSbW=5DuR[UNIGXW"<-[UfX.YWQa&F^\LZXU(m,Cb)q/gSuu9>Ht<_VZE9"`nao.OK8PB1%.ls;WAbJ7_+X1X"DY0u1S1Kuje@Io_!T#]'QFF!N?H58AFShn`-beN.7c=30.J+^T^e-:J@`O95[dHsg2PAO;.gM3-n77[kr>Ht4sr\OOk6#XPSc`jX^ocgP6^]7%CpgkmMpi72Y_[N=6-H8[\%>A7s=7A(-adSnrm_Dq^h7W5us.qleeM5O![#*asi'%U-P4_XicAmS?(k@_-0)?dJ`gPTiJ@Ag?32C[Bq?.`1o.mdtWgPTje[]1io/%-2IWkqM>>A[9He[huefN*[T'"/P0MJZ?pfN)ghR^?'kI-8S_cqZ.0E$>g&M2[gUiG6bgbt'Tk:D6kJ9r,aeCXP)+b!J1YJ=diH"iH0RN*^jdCPJ>rZm/-ZM.^3IR=jI#HB#2*CF%l=Et?=?Y-A\",Vs41V:Ji-XX`VUN/6GgX-:ao4->(q\pC&eLKuK5[T,&iC+HK\s#+2uCA$`P\u;M1]uR<_2BiuCBUMM$?4?%,HmJVod/1NB`-Pb?jnY[E8Yrm.Y&[AGBh@q1QOre-2sC4X`s)&k=EG_Rp6*iQkau\$.d5[RE]mGRFDL)_?,*&u^*)X.SeCZ"l$A&e^Q7Vt?b5Lo4?jrfoIC\[(Ub(5MJ^>@@U$+>fN)f=6>?e\C=BDhRN8gOgPTje[UNIGXk6Zj.mdtVgM53AXdU9=(#,`8D5HY^oIfc)dP)M][@AKNKjFY>XI+!5IB\/)%"mMl(gj$Q8\c?.Ga)9la0[5JS_ArC46]e/d%ZA`!si5(brduodR5UCAr(Qo?mfk>8E\a2((;SdRVNt#dmiJ6:$?ek%Zf'28fR!kX;@mPcYVaV)KlZj'>_+d>Ht<_VHZN6ODrc`h5h,#URHC(os]oNEcn3TI1S-$U,NtfQf">pair@f%ZkLDo8-XG!ga-!k$,AW%U*)$1lVFi\J6dl-&DpN@,,BstXf@.neYKFOfN,CsX4R(fKp05!SFXYWoMTpn;bKtBZ=Sd6GJY/9?&Ga]hbY,<`bRp^?)=s*NuU.U&U`e$O2-IG0\ipS2k45qi9[0An,;e&i*/^36#EY??PlOa*E]\G,rT?=)dti&`M>-g-[\cNm0ghT?2`-U,EQcM0"#FE1NR#Wc9`n-6+C9H8'mGnM,)H^YhfOHDc$0$>9@qSg/^-?H5#suKG&@@>PO&J?!69`'%5Ku;a;YU=-_6Ajt*rR*G^RN0g0;@$t]ZKdmo(X"[03VDdWMj4=<6;ga)+,lb+1)(q(16MJ^>@@U$+>fN)f=6FHs()&O43(adX93f^_m"XAL4_8t*14!:BhL&g_5;Y7g%4+3'=CuUAONPdZXGgM)h`'6K90qMRTd+aSfE?6hQ:umd,*/kMdOi[Nnt>W`8#dXPcu:ogiXCp$+?A-IWOrREh.n:]KTe2SEM3[K'=NACgKF6.2+knl?K?I5qgsbjJh<'4X1+5*L!=,Oc+g_Z1Vq7pNs+@@U$+>fN*Ze7Y#@+m'*VEP@6!V16QOq34(H0gM#cnRlDh2S)@sWTBa8fU=_jQXbs)X>7CsdlZN/T*u/lph[oc6kWOBm"nR,?bB(;"6dQdA*tmEEg'"Od9"-M$"5lr5Qbj79S_+p,omK-@0D'ZN[lfHt:9+cQKVWnCfbZ)uYZCb)q/gPTje[N^A]!c4oLLMb#=W_$Dti>?t$XeW+;49.$p>>QEP4Q[H4U@@TsF2)@EoQPJXb;>LfOOK&IPoriK]"b`EX4*=]Oh#N5Dd5[[^"[]VrGH%uIX16$R+r"5A,k@3B7$L_YMXX(#ho:eO/'Po;.'d86lQ@Wnl[]64,/B`TqTES\Io.W;]57>g0cbXZ)Y35[p`Hc]S^]R@AG\O4)Y((VSB*[S<3I&8V&mjoCK\$E3>rNVi6afuL[;)`K_(01X/I4CW\"KYJ(PI8Dk!/N?oH*?X$24_;KO5+2$'%j0HKe**_C^ArZ<6S3Y,>3HPs2KXpm%M1>0^Rg63t+f?sBnLcMF\%tj8?\TYpBj]nUV_5gUR0=G7D7Fm;6FKlK[;%34%+Sco`f\!A)'euAqMfiIFU[UNGQ63q9CfN)f=[M@U>fiIFU[UNGQ63q9CfN)ghC>)95;ci\t%##@6.@br13sGRX!X%+u@52QYiuk1kmMh!3C(^!%4mkBcqE=.^.]925P7_b!oW%Wu6oci7`b6+0cJ2'6b5Y=]1Ka)ufF8E`"Z4/H_jk\\Pg(bmheCo`HE_L-!%%"5-DA15[Zu."O:_%&E`!YgXpCX-[2NruNCMi!HesDl3X8pEqdE]UcPeIEpVVo(a+.t&`ch!@mtF[5L7RP#;LX6GZlLMW2`5mPuo&Jh1NRgK_pEaKG(\8S"M]qh^OerGmPpl&k-aHt:9.>D\.85mF7@U$+>)PoaP\s_OXbs)X>Nr!<(Bu=^7!b)bQ[(Gj@U^@JV.[6]rEF&c+7iH7@N'<1FO6G$"hU?*#b9\;Qq+"pZmDTKirTl\g$?a1SE'#P3PrXK<-6Pr@:MjsB(-.8`\5LjlJtn0=`;\H1Hb2=A;`YcV*-6!AEEfN+hV>Ht:9=^bMHdOMK'fN)ghL1u`M>q`Wd.G.[;.md:hQk$U==RRh&BW7/[_fu>]t-4Nm-SkR$i1*`r-YB\3tb2l3"RnF3lpK#hpOo<#a1jZO9GP"/TMScS'qg!1h*l)R-?r<]+Wm#X!/"4daErP](0EdEJdK]=\QsL!Sr5>1'p"KD")gXq`Nj7qXcf64rE`;960qVH.Q1MpWjC#l6_')WjJ]Sqp"_e==OS`:,0r`)?ta;9dR1<%sq"PKFonD>/8/)J,CVp3![C$g-IQt"NpY9Od?j/*:#B)dWe4,?XH$G#k54Auk04j[l^I+^FU?=l.VJ>c;Ej6((aVB%qYdQe\G9Wj^<4YY6:f@0>Ht<_d>I@0Ug/$bFMqcEbng.D,j93g.I-'l%XLcd!N"_U-:'jrQKa<4=-@FW)n@@U"uk_R:Ya2.0XnXk6Zj/%-2IMJ^>@,5$Y,77_40[UNIkVQIf8LQ92I,RK+NoG[BO/!:I-0GI)[@VSggX"sdIBFmX0,cK;QD7Cu-M-=NQTC5p&K*+%mpJK`ck%0[m/WgHttQ%mU6ThWmJbU^Aa0[GilmeW1DLq_[":uuNDS3]09A'W8FGt"3hOR6[U=;4AT.a:F=+!H<%"5A]M`O95[Z)uYZCo_$t7jaLfN)f=[M@PSD8iqm>8>&a+tWfLMNGEb[UNIkUocsa(qt.N0O,%*i.@5!j._fhSkr+>MofmZd8\tAldS@/%(^c'--PuYpY6"GqT!YrH=7-:G/p.mC>K?QHNrE\e/Z-e^[H`G*^9fMqX#N30N6e(Q<;doV?pA:m>uFT/RR31.e/6o$@8g6]\M0J6ad*in7,Z;;ld@TdtQY?>jk[1%P0Af`U";0\==L(lcVp0-`Q<%Y='\%\@aA4_-,'k-m=S#3Qt)+g/1.#h)]P4O0HLY'*p#l[M@PSD8iqm>Ht<_Ht<_7jb?fN)ghg5NL]@W:f8@rTj4JJ8%$)Q3Kf39,pS&NK092MNqRH"nc0B73XU$U;18_7T17$2j'T4+-=#0>J\-k^GMSZf/^p%(tooHf;<7]E'+%pea!m9L.EC;r040pP,\go-R_/P&PRn$JRW.'XPBO*RH^P-)^cSkeRga;6UaY*rHcA+HchY^XIMgglZ,N1`$7m]XAUD)tGPM6Nu(+kq_m[/)k@q0R^"-d2km)b?6,&jclYMJ^>@@U$+>fN)f=[M@@U$+>fN)f=dMf?l#cTIn/%/GPg+$K#iG8=N_U1dW%XVZ(`"Ri7Md\TZk_SZp*buIbL(Vh(k3A]$l>ce"95hZ0p[![1ZV.P&l5Y3Jq,cPM]RPpe]s\G8q9Kl8UOR>*?#\`3-N`t'H>f_h]W*SP`OHb;'+5;_eBneZ+U@:`c*f+!U^SYj?5?\qjLGflPRS0cZ@D)kgc1bprb"L"%P.2YjKdoNmshu#8$#WE9:F-tLji"sQ3GS3>:fN)f=[M@PSD8iqm>HP-3DD9^DCb%i\!k&iuMJ^>@@U$+>fN'M=WuDJU(#+V-Xak9-[]7_iY\2AlLZWG50H5Vu]?8[mQg:e,2CuMIm5jPo1)ka\?%XhALS5`o+PWo`>.)nfT]Zb)TVSu,?>Gtb<7,0>\-Op$XePL:=)!ebKrF36k3_/N)L]cpYAuO>X5G&kfj"aD_.SVjdk!UqWaF08mYbW'lAPF\pHHtRa8fT<_^GY4q0=O-o?:Rh?>e:fN)f=[M@Ps%+nTsX7\^5-"'rb0Pme4@9^"=fN)f=[M@PSD8iq5"1As!CAgqP$.r91%,5N&fN)ghR^?)AMSN2XI$D@*adIf45F.D1lb20>e.kf7rn^SdN@6.3H4P2$gUl1lg3h`RLoio\ShN$hk$T%sD7.QNY!GqC`#cT=Ob,X!arR_KQ0sp%lqMh816;1OLZ]8^MaNpL#or(7/D]T7uD7XufN)f=[M@PSD,ic9/%3ttB,e;0%E5nY[H9#TIY]KMDJDYn]Z($0f^c0t2)1nF.(=]6CVC]7&4&:N;qkOD)GJ1G"bI:jO_p36T][T(I"*PMr'sXluWE!/:\b$1qJt?LpfL8I>)#/asF70ic(A`i9'BpVm]esn#lX^Rrd'X]*oHIG!T+]mt5aW:`KQ8thX!%__Ne/h81?Qc&1mE@WT?3nedsq<\=CSe+^3.g\S*T.c$+R:pI;k`Yk?TT0&,i$`Z24=_Hf8V0I0i!Hcbi^3"(rse0Y;XS\aI[n%A3Xc-2>Pkmm5,l_*gBj-RUI49P0r8\\][EjJ8lCT#`hHF;:p`U)toa&=MPrF^jqOFlF%_O=%rZ!&!eWQl0Af\>7j[gPTje[UNIGXk6Zj/%/F]YcZPYCb&BdgSu+!(#+U_`O95[Z)uYZCo[nN>Ht<_\((PY*Br3.8L0K_:'_=JlpBMR$@N\&"fUL%qS6UtB79a'F/0q[cf..;P',QR/FNgn]QY3-/gi5H9=]J;MY06RfBTG<3-@'ctmWE!.k%5aCq692C!1Qm%ZA6u:(lX&RkY+jGqB4CIkXY\M*bkL(-iQ=c$YYQAQK_+dCY]/8KT9#LN+UfVVIege*iP*q<_GY(o(1n_'XZOCG+4r@*HC\'%K$t[K9?XDC4Mq)k@2OhI@4JSboq(Ca04j)=7s"0p:Qf[=3!Q_"'q!)q_m#>YF#-*q#%B4N>#(BLgpq2bQ26_j8ZY._N!js/eOqH7"BLKm7oDQnT>h$t,kOV]%tG9?f[bRi`O95[D*^RoXk);ZCo_\d>HtrfN.CLh_^o"+PjX&:k*2QYifD>D$]%Yu(MrR/J,]\#(I6ZrS:I"'/F.]-6`eKaDo*Y@sip!:M$Kfb!Z_@GO=6-loacYC-$qH^r]_-HaJYsu/>4leEBbA_IC$PUW-b[`L`/LJGiR*K5N[L=sHKr<_88Z+@9f[84ZodRFsGsQMbjAt]&JK]?hAM_L`PKp?d(/;W!=U/P>CZr?dF<:/JcGF*M#=G1I4Ru5Sro)fRQq=KsJ2[KFk9Eer.[OFq6\D^!PKAY3UAIJi`tcU,e`Kc\*(m!pX>ar[.ssi8g>HaBH6sq-l]=S*pY_$Y`b&G[Xk6Zj/%-2IMJYer&[iG/$F$YR7^0!qfN)f=[M@PSD8iqm>EL[K>Ht:1gPTeMgM2FZ`O;dD><.f_I-g*1i,>60rSudBL6"Os_A`IL\!LBmIS"pL[]FuU\+h.p7+=_uHM1?`[]KYcFp,sC42eQWVH.OK(A*bZ8$(o'`Vcl4$0@,n0OJ/3`$O9.CbnLIW8(6?^;(@TV\63flph:l)+0&K^TuD#ZCDT7E+F2)k*L-c(UYZpN"<1M/@(R@2SB1(43(`;TMrif*cmmAM8T@c]f5hNjLENZrrV),=6JjRS-r]fJcGfPJcNW;n\Gb>iP;[+(c!@-YTXC;+Wj)B!m1FhXO"1#lY*-)Ll8d#j:!u0)NllrcJJHT?.IJ2]m"Vdqi[4[eZ%dlj-Qa&l=+m[c1Ed[M[(A-Q'E4!)&X/bJJ$^OZpDaA^^hKs!5A9Z&b*L6[0/V(%>*+YI^Rn1d6+Y7(6HDbCHg.e*cUI(cj-Vu54-DV#m8DDjd6QY%eV87mq4J!X#AdkDFM#YpC4]6YL'E8=H1+g7[l'p/_d)Vs.SQQ%ml<_QS>#MX>N\eX&d*^I4"$/MUokZ2f+ZP0nbhQG(!e1-LkJ3ig^#8M#1Z5OYT*;uWr7BlS-_:LV3$g\4/096!3Q:U1i>5;f>&ht"1=TA'q3/Pt5C;tsDB=9CN(qTLN\H#^+V3d;i=(,FFr<5LKTpD1Ioc@IQ+p1YXk1=gni;uM;OLS]=-^6oI];lAQ2ab0B4seOBP*&tmU6e:?nW,r]9*@i/1lM1V&7jA6pY92!g637h(2#*,WKTHln8,[U>W#9`hB[K&FkHkN_!q9\qm.<.jdU9=jutn?Sri;ir/%pq36Hd&l#D/%QJOMJbklU0H$IQpZRF7CT!q0tfo_C=B.kZ6XNbH22<]S[+?1:BlU]VZ<=&NLb0)-<5'O]TP%W[dT0[#/,SR.XqV7ATCAq)i?F(?eHl_9ed851`k_PdagSaDJ#2[O+Epcc>AdHQP6nP:hKbd0?n=I(aEMeT_-t[KgW&kIFuG3LBS:IE]rFK8i\,h("q'\WtBLi[QYt).]PA[['+hZM.Ke+g:MU4S_^"$?L^Q8q5o4l')@iXg77!+ERR[d/`0,fh)pZYNCBe&Md&k,a1ZYbuT?SLtCq3F_r63;+aKd;uoJE!V5bih>k7EWk/^E>%HN8Yq7tW/o-$O6j:ZJQKb`\Sd"5]!MlUhb,Na/WgBq##N&_Pl'>C]`84><#9o07V_B*qgN4sW(#=ab7CT!qdB/eRKPj5fU0B?8_\'LT\"[*SXlrf-/%QJOME+Ao4W#6)DC4tBB!b?=<[gHbMDC+KAXicu1k#J3bo#_1e[oAYmA8'EC9upOb$2)lr?TDp11IKL%F=U(YJu(Wa.O8R;SSeKa)d>SG^pRBSGp*X^Q3ZJ-KgH5bCnsAT9u6ZNIsI9V/gbc'[;F9Yo`L>PTW>+s2&d$e;89.[qaBokZ2dU\eX%YDFM$D%MQDgh26*hoF0QU9t-j$%EYaC`>X!__Ag;a>!B(oXNiB?a6pff4Q)`Y>T_.4JUI:9>Gbs6g[fsF?!]6+#;g9:kQa1e$Wr\sU_maD`>#K8!;0.>G$;\'gHLWnaK;HL^U)=i_ASYDD6(=G,2WlW.PcOq/%8Mb:g$cFa$WWqT+^GgV(_)ue!Tu9<3mgI`ru/Y\s94XH5_.SeJ7B%]7]3/l&C?lU?%N>!OZ9]]:mk[Y5lIZJ6l])Lu=nB)mn3_k=sW#Dg*Zncfr^OCC9]kYV_!L;e`FP'[odgWk^TmI$3(+`@A$D?DnmGB^+]]7e0tT;-N/rAg,HS+;I7SVS;O6_0X/s*G?k0d#K=V-D?LkZ2dU\eX%YDT*S0\eX%YDT25Yh'sDU(#=ab7CT!qdB2V5bX%q,dB2V59`NJA_P(2]XbPk:V)ik_[5WWka=Ks=C4(=;d&m.W=Dh]MUfG@Aj=NBc$p4=bl@$<:4se8Aft"fB[H&2'/\.1B7K:lQ\**jP4r:o!DKVUMa]^/3&*:_]2&mPET?Y>#E32%&*"Qkgmt!m,%"b[WT[%kG%pnW<]O`T'DG8W^*7H:'."P"$!BSO?W)QHp(>f:-ZNWCN5*.EH[H?h3DPa8WY;Gh.Me$BuoEW-l;B9MNAAXJ+dt_2M8XJrM6FW[ndB2V5F=Xp;h2:G(h.f/r/%QI:@-CWS6ardodB2V5F=Xp;h2:G(h.f/r/%QI:@-CWS6ardo%G.^gIe@j10KifG4q5]cE"9b3k]?7@W,(T5eS-Mu9cFq8$Q>lOl@oV(cF`tp_BRY@[p`B(?E#kW+J0!5C\emV#O8/g#-!s7cl7&!VDGiH:=?@olD@?j]p7Kq$AB+c>D4ja[ouV=U@PT^9LVFl+/h<(nujP#;Y^]c+/sWl7:)*\q36afi;+shT62W:ae/Nm,];T5LBS:b6E4Zjbod62*n3RI6;Wc'^Erl5j;[624nX4!\_=^#5H.N:P&Q/>Q4b8C\iPUp34Q$&?('e./*MS(^H,5&OB19Rp[,3pTJ1G>`KVoD[[.b@X;W9=J-68`.]R]=+[4L``B_'bV;WC(Ec-A]_9JD"T<7pU6nZ3O@>be8*>A26?GkCBulapJo0M2^Z!X7S1AH0*s")k(!q-.IjQ/IcLK^h]?'=#8HDqm\icHkRcKbr[TXfZZie7oL7USL,SPNQR?`.]CoU%XdUd:jKg+tQDp&*R,*UH=0&m7kDFM%/>LBS:'^F[GDr%[E]`[4UM5A%M\%A5Y%9/o?2J?(.Ko0u<^4('K,D6V1L$k#OEekNF^^*U7h]l-HZD<;sI^IdirO@2o&/M[ZM(0-4#:O@NKc(#=ab7CT!qdB2V5%qb$+F=ZaGmf0.g0aEDMeMD:t\eX%YDFM%/>LBPobgcBfZr'aB"A';$4ZM's8G$'m&B0aQbWA+E:r?Aplj&()2N5!JcG$H*s/`Im?=1=%+n6a^aC1L)!kgk+B^D603<;p.a$S&Feqe&mBVBRD#U`s$Hs.:deW-hA%(FjGW.F15X]V8;)O_rrddEnX<8%_X\,(3-Wf45JQIoDJ2jQ!gU\LecA1qk3W+IFa]\[EndkEMW?n\AaKrI@"c]AajN0!WmK0:tJWSme=-qm_Eblkh7,KkJYhApLBS:]%$eS>LBP_*P,61F=XrQOPHiCSp]Ju=@nfE4QWo@/G\Xt5s/9PX3'Y+@O5"Znqtp`S8i*f#QF>8O+XWbo,kg3rp1"8^7,A"qm.r-\_&h8`5A2JX#i=\l09\l_O&"I*r=rq_<,&FXt#jpr`/(7.O%]=XR_b$G?&08oIm5cpWe8eLg0hUar;i!WVfkVk`UIbb$K1B6n:pLd2:.Oo`##nj%A'DqZ7o%h),#;fm.]j=e'Wm+gTLBS:]j1gBFg_=P>B[`>tSIS^Jr7Q7.Br[5@[X:O`P>IJ"Tlh8t5EXZT_B/V3Rg",LqJD;P2u56$u-^E7k.XR,)#4;X.910E85p]Q:%JB51FM)SU>_3T8%?u`d[UaI_^'Yqf^'$(fGJ:"NpbcokpMBT$g7TB!mb,8bVK0C+%Q``jt.WVaeDY6k+?fNB'P'u?qWU_3FbNC[-,KRQ[q_#!#Q5r#;5IkX=D%L_<(Nc5i+J7o2"?a*9Ao".Cl88gf_dqLCLp%MCbhcn]DbD[p0l.5BSS@d]q3=t<[4K[>\NhM11'W\3N.\3h1s9:MXLamt?d#&f\!$%Kfs':.Y^O)0=f1G6Q.R^N%aZ(.5c)g/or=)9fqLBS:LBS:8d2RXS7CU]3\"[(9)Z>e\=6N\,/%X8Nf3=N?i3DGuJ=4Z6c\Bd$7^7m)c'"fGk*XoIK6^lM#NkGTp+FCu`54tZ"D?RBJ=4ZVc^'XknbEWd'5sp(K#2GlJ96X%odgrLNIlPU#OYM=Ac^^;S7/sn$kBRRBh)`+7Ac_5Ub&N^W,/H7X!CY&[;Q\__r_aOaA8Kl:4h7.?NY-Ec\]im\kqPNN1dEEtc'T#puf["n@FP:huM-@XJqB0#k`[fE)m1R0M?/!CgtH_2W5o5ZZmcKNt*.RI18p]/im\I>Y(Fi3b-J9Y[t?-MDKR4k;;.;fY(:u?!922-L+\st"35OME$"+\Z8hK`%2XF\UQ;PCXuAoD'-=/2qAan,uFg3-;2Zh.im^>LBR5(V8-/UMIgkU2_HdU0F2Rd&lM4_f`"MT=Y(Mf(*3rXT0^"nilR`R"uQ+eA2fB?T_glY&uN4cRT>m?nrk.n67HRKOS36UL6ALT."L28='VYL8sL^C)W&T7"DdIWL*j2X)NgTSfnog&#KQ,FueE7hT*j=(F=\BU:Q#i$g/HQ:qg,WP#3>3@8G%X.X=:6.>MBc;#-Sb"X"*YZK!p=H71tYG4Vb30jff^LXm7f.qp$Z"9j,OB\gfYAJnU%kQQ%isL,qV36U;SPM)qC::tD8d8D+$Ugu:,ob?L#*=OcDnl6'puq!#0JbKmf%2iHT"*V(*h!?T9t[EijRj46J`&5V)[_jd*%sF67Or9h$"t2.KR+\cOA"!oRfS[A2.&UYB@MoqC<2,)F*k>_?1Wh9^1iJ@SY]N%dpZK^-j$L$S&IX\ZE\_Ao"'*p5*^#J?5E+PuF/V"X%\/DhWAgpR.VE!A1biJgl$#<9S5-!BL`Ikk2a6:@\lSG2&WF[i/.TTptDtY4fcBSL/.FlK"]tqE7?J(%ZoBpJ;LOV&F@^rDXP"We<)nen"q]F5@m.?ik^aKnubSg7FnE[.l*N?8k%Y#s-O\T?.)7'A"GAfpBPpsVd%QNkZ2dU\eX$n5F?>2[N^]&\"[)tMU8Kh^#Jld&mU@ia=DiVp"!"ZS9TB1e6S+0gfR1$>B`_eQTL,[+E4Aj#q3j:e#gJ)Qj$.[b1,GKB-L.m!8oJ$a[M*D$T>'=OImoj8$W=#sOH5`Yh.hRa\dGmSE^1Zq=a/?*#ggb)=\[hc(6C,a4'`K?%c/cp[k=h$!mrX3e]GeF?_UNJ:n]N'ha,`^J116YC*$>H-4n;Q>gIq:V?.aL"Tj``DFIoX4>%j#%;r43SJc(FQcbI/%QJOMJbklP0g>VB]rK=X&BeF(#=ab7CT!qdB2V5F=Xp;hUXlrf-/%X9Yh5X:cJ04^U$1R<#pVG=^?NJJ$SpgPmGjb8!_6XqB<*VX.>W\Hh%(_?5)OieJFR'H_iA0>7\2B;6T=.fln!\lC^WG:R9]d:[.hmFGnmqMit=>R\LQS"&.tc8.]"!9@(*.dHbbP1k>s1Z6:?O!P(TIB7]8E%[a*u!Wu=QdqW)0RG7m"X-3SWXU,#i2LnkZ6k+F=Xp;h26)=[sHCf\"[*SXU_\*=jBeN",qMJbklU0H$I*jj:rkZ5T@X$RDoZ9HsA%?_I(Mc@Xsl*B8HWVBFca!#RRC'/FB'-=LLpU,VI[9dF+WgF,`@4V7.OXepI[T!;'@NNSr5dq)UDKR;c*?9K&U2Q,Gk?1rEK3U#>AF5O&+(&#nrUl(VEdSdMC8I+lLX$=W"#=R'\&r5"i15(0!n1k9c0[P?Q4+m?B=eM=Wl\bYZb$C@eN0Y\)aO,D?jGSY+6jMB\J$#FIT6.9q+>[9"V]G67^_9LAB=^?ibH(G>\aE6KeM&n:EIKKn:=+/]l/.gSMouk/'p]uuXaKGgNh=lPO#bkPNXlrf-X&Iq!F=Xp;hLBS:I2rGk&2N_$_',?@)!5nFC@5Ji1&4(9*[SO.%oeop>pZYAW^s_cpq"6F)i$UbA"XA3uTMR4mV.^Pobf@NEc6epG(^2-6\kZj;Uj_;9(74j+J,Dg@]b(@W[5_iDVQ:o9;C_7-.h6V*V1e<;]`.a2E9Y'F5VR%UUP,`K3n%uC%t;*p$:h-kkYqJK3\:IQ[K6C(DuToepH,k#e%aT;PLH"/H[>uK0)/+8Xb(4CeV2CaJ^3lsaFZ"S__V?4'V)JCs2T\gA>Kt\BR.'ktSm:cJ__,FjTsXlrf-.rp-4>P/E\l9P^3MJbkl3n,J>Fjo`[)e&O>=GtBQa^MDQHdG2KX.PV='Q;6Bf8[>5JIJAhAup1f)iLW!Od2e^p;ZXNmHJKg]6#t"l?cIo'jMFpg\_EA0R?$fnQ2)k@2m+B%sEfa(]K>6^p%)J+^07t?2dK!',Sd'mR$f&;,#"5,DV@1nB]McZ>5c&:LEmCSG1OTU):bJ2EA$#gpk;L-8_BrBPhZ/e8D,;]C5bpli[T^ICp=M3lK<[]p?N?La6?ufgCOfA2"6r>bLbhYQ%fXsEYVadXcitBIACRnboN1J2n9TsZ\"[*SX\P@FcJhuU0H$IkZ2f+#;($J\eX&dZoQ3QXV]fnBBWCZ3-6[^(#=ab7CRTi6FW[n*QP;C(?EV\nEZDnJ5"YcWL+f4[PY>D5GR3q;iF0Y`qjT!Yo'n]LH#j]o:AQNcDLgF1";i66!$>O=#4o/_?ts-k>^CSqN/an=3TeHhZf&jR7<%qr!graj%STZ:J[rm.0K#*qPLJ8oG%q[AbU(("kUMsjh?"dI3"'>q2So$]cf;dQ#k$JM"Z$fR@!69$bY7lGqp#X)3jK!&kB=YKO4M+jj>OOId6*ecf`lKi6&7.i^nl6FJ^d?HYg:AQVg#rC`0QI!NN&ldTBT)>mdEW\r6,pYR+VTUdi2]m@'8:s[^Da;QIHU3b&cM4H,p="R6!4!;78"Oc3O[__l8!n8`;i6&5Ql:^H69-8\!UBV^GjgnIdBp9Vl1V"!sAfKqqah+\XjAPhP/6O*`;gD80+5(2aH="@^kZ2dU\eVb?d&hVKDKXMt\"[*SXlrf-/%V"!DFM%/>ESdbh5Y,ONrbT[^3]l;eCjEb1=ajaik+]!gDrZ6mV*3+-6+&*Wm]a'tN'Y&7Ao+NJ#up'N>.Q%T)0iFu5O<*nEF^"radk**4f%9X]ZY>%Xc6MY*A8R@.]JC9X='o=h#/PmAq[c`uOi8fYd9f0ME("td7_Ge;G^J3$J;d#pP:m0ml_[i9"8R2BXlCIY\kVii$T&;/4T;ZUn:1J[A"ZtAJO82t\$!]co_8o`RG7pCdnht5A>i/#e2$6(T1)cVPk`)JQ(;e]\"[*SXlrf-/*LBS:)7n@\6ao,B%WYnA7CO0hFK5WiF=Xp;h26)=\"[*_cd8eSSY$R\(UUSjjc0JTlf$+?-oXdP2B4M0nFEJ@Xgg1)X[oU>ta?"S/h$*<-M][NEhO=aoDQeZH\!FkTCMQ,c,@Gn8%G\M%!i@/3Q"%$6Flrp)p:LL0#rp1XFV>B,2gbK2/kW:eM=XW.h6HX/:oC=f>+e0;=Mt'gYgB%2'A6IX%Peh6D)+&I6Ki@3t?/aLk1[`8bS:DS"AC8oA`$0QY4+Gcb0kGJ*($Uq5J6qGe0C=T6^a`/!liT"2+H^oAIc4Dh-aCn0RS?;t#:p55o>:jb9&:HdB>2IeVW%i6CFk")kmF!Vjq2=2DtK9lNUBrFu`lcK.?ud0;As#Q(IsU=mq2)n<&3rl[l-72HD+V;EEUfg,L&@%"/"()BRt44=2]DQJ@VAdnn'L:6'U=IX/s5\_H5R4hlo"6d-Pj>_LBS:i_?]k0YWtXV7[2s>-`#r1_f_SQCCnW9MUQKR>)`%`Y^PGhm6&=6IAm>bfuD<_fC=8WnDL1ki`j3PmUoJ@2`*\71e5gcNS3adecFu@R0sZOa7H\=m'o2(>Xjc7CP:$>W"/%QJOW_Kss>LBS:<^U#.V2fisPrF5-[=PE^1)rsGJ;2k]7Y#]WZjt)?`cPH^D_sa8SH:>3305Fu7ahG0*@K`jno<-aJ`D&!=I<\\^ic\jRT@UQJ6QlB[V,IW[m#B1q5@mH+'Sco[IX,?&Dq2I('rTXC_P]S^I%hDqhl6QAl_0lD?>*,)GQi;A-Z5&#NY.jf*':E-1K2uhZRks1fTJq:eNU`Q;_1*/dltfK.8WdPXk0kQ)mTVIC`&g;<^q!Q1O98K7n,2\"[*SXlrf-/#HtCLBRa%]3IXXlrf-/%QJOMJgCTKl0>g)PeKt/%QJOWp='((#=abF_nOeJeroX&X;SkW&.1E2X6sbBI[gpY5;2`f!$lW)BVbc@=aS2qBWtWCk,1.k>s35,HT,oG&R]>D76dp-7F0Q32hM'AU76!8`$;"ADP9Ja&R?&BZ9.qVc#T?'X#@%b5:X[!g[m`nScGY@#-R!M:6n-gB)jrcqG"n$Co9NFP6HAiMaWs"c^>9,J@/%QJOMJbklU0B?86ardo%8mbK(#=abeTES%MJbklU0H$IkZ2dUVCQa=]%%o,Tj,pHkZ1soe#hh7FK8i\eT3BM"M']W;`6n<;H)(nasP161f'4W!+\`FTQ%tF0!i--8J"eYe<*s(WY%mBh^O=lcFMH-:3!IC""oO95[ho_3XO=qJZEd@`h48]meJ8Q)3h!b;gY[I:^XCH;&_gBuqe?&pWoor3>a!"4^1i,g$/I9'Bh+ERec#uS<(Rg)E^aE11ka9K1:FK9bN;r^pLnR,T+j!-WNINk/Ig'*J)#Ai,u]o&N`^>U=&)FH$Zr7;pd%CW_9TNJ:H@)m`(hC9:4!Rl"=S4AlBRjoTUd78#df+,j',Vl[I6rEr:6uWIDeKI;hU0H$IkZ2dU\eW[MFK>@mkZ/d(&@rV4MJgse0\qV(7CT!qdB2V5F=X4=FK>@mkZ/d(&@rV4MJgse0\qV(7CO2$>1OSa&Ya[^$ooCKhZZ@sD24n\"I,a*\K1*E`^@q=$"?uVE(AR7ZrsZis[_Yu\Y(&BOZCR837#Wdu>h@u:?K%+*1(_%;&lAtU_!j'Ai+ESZm+:r(i!`d@!ZHKn1Q"+e#e5n*%"<.IEk3hU0H$IkZ2dU\eX&dCo'o2#H9f@Wb;4UXlrf-/%Sa\d&m/"DFM%/>LBS:'H(#],%Q73B&/Wc[0%NpC786WB6/q-HoOHJ$26`ArK0ObY1LN@K#$4<,_,nAM/b#ZFp^1-\.tCDXr#)`Q.*5+Bku7Lc5kdihJ$_s3fl+8UoIgEH4f3GA^E.[5dq)UDUl(FqIIB)3-#DL.PbVYU8gCi*i+J*$qX1ICrZXi]6TK1Q%3_ZJ8Feh]ibJt\d*-0(^&1sK.Yk?#.KZZRDAE10Nb[X827P218%mX^rCO5`&G-@E\%6-[g@YA8>^QF22\b5>%LXOP/N_MJbklU0H$IkZ2=NF=Xp;h26)=\"[)t[a;/?dsR[o+sZ.VZJ'!WhKorMWNY4M!e<)7--t(&&phTW6@I%_6HB3X<^C\[bK'tN_c`tr'%0.<=mh9!r\MJc3O*#mGrh',-p5Bh5c*576OV8O4K%U\mL:,OId"Te9lFfib0sM$3UEb1eD$lEm6JfH$'D>66BZ0J*)9BGapF"2fb^n\E)'L%_^JY7Z$kD"jbk_@5sQ,1VuV_Y0nXn7D4iYrs?e$D?K?iYI;G./te?3r&Mf+/q)?:q'E=a)>ETosf6VmbW;A?lUn'bbge)q\a1Um#B:j-j.K6U%HOINRD2;^umirh3QDXlrf-/%QJOl:ctN7CT!qdB2V5FK8=Q\eX%YDFM%/>LBRuFQcbI/%QJOMJbkl3[LJ(dB//h<_rYi2))dB!4,m@71%1T'u@aVWLM.2_;(?rAe?S1Qb_rk%P2GY_07!?^\C!1._o>,k9;i@+k0XmVYdUL)AAe?RDk10oJ@AaH!XXY%#_H+tFUt\hUC0okCJ5G.mOd_;*7mP.tr%:RM$Kj]u/)=a30kHo?4tJ'\A;';jSmtM+Cs)u$lWI'*)aMtP2%?26h'+N](J#@+?-m/3BA3o02X=acC(*M*&[8sV%1ZGIFk,Tp(6J?(@bV+7"W(G>?l@0`V1D7djkR^"`gOL'LVu4HT1.EiXhJooRb'HdhrJKrCDN>JPD%i2G1e`JO\^QaVH\[t314^"*=oWfNC]FZlCan34@IM#<<5\-IB\d&lM4F=Xp;h26)m(.5R*>LBS:OPttgHF6S%/W`"(W#0Y!DLP?i6KgrkWIFh;To0Q1EY#M$e4(2NWtI'4m9OeUbH+U[Q]'YV`Z=TF7?"#%HY/ZLoO.J*,7YQXLD(`r8R!&:q+=+H\*D(_oGu"f1Z+\(n=Kq=hP-k9/6S013F]UFY"&fM^FPNK[/radqd]G.C/9GO9b>6k&tXh5!b%5kVo0\G7*0+J*9pT/%QJOMJbkl3fB\9dB2V5F=Xp;hLBS:QO87\(!ZpFg@e^28+Nk3ZN;,Ij#OE_Nq\H;9H(WU_GbEYMTXjM@n3.>"t;$YhO0lu&/?XCb)kQ9d15P!5k1H.Y'p10l#82@UVLc`R=PMC#$W$l?HJ"$!Fk]QOsi`\V"?2@Y6[+4Qae5g@g)/FoR"%%_5a5oXLPm;NU0rh3QDXlrf-/%QJOl3rAaeMD:t]%'VD\"[*SXc=:1(#=ab7CT!qdB1\jkZ0i6\"[(9-$1ZK(#A/BTj,pHNoO19@N"5V#5I`;YCXm'gYc6\")^Mii+=586EcLBc`O#HOB8STdY\aK2S0"XbcQJE\aH4Z[gM:!F=W2)S_-t;jm(A,JSgl!ZolKl[#]T^>iij6Y6*DTghYGjlSUtCf)V57"+g[sb"ACj'T`W$Y\ld.*#.YKhaCQV690f2mLMCkKZD&P,u!lrJ[O[R%.oYfGH__rmWI'\de^rqf0edK"X+H/MeA+G3??\-."O]K#O#4I4Fh>"BB<+V'n;S=d(EFsl)[>!*87sZ!di%++E,NLD?AR1"*ps#BRtCZ"WYQ]\0+aqq;@?QPC>iKNKMOOHqM-:-*sK7'p)6p6K`"4lKM+<>e^;$48mJ6k1]P/N_MJdR,d&m"/\"[(I4`i3ceT'A:k,YdPG.-0+abg8qb!,'qfgW2_K2fC\BTVhDeV/*qjP>=C-XQtp;AJ9a=]!>?!So5q#LKRWMu$8orig^S5_ehSXQlCdBd^p.)d(+fNSjLCcf=tL\Hbg$50rrYXS8c9k+F+A(>SPE7;Bm@FuHsE]UACB"E3l"WTXZPg,/$!@qWf6:[D1Y()>9,28X*]uXk#V>B4$'eSA=,!6l9O66I=!IP>djkDGme_+D'8VQ5s:M(/B\[FA+p`f^8%Bm=g,0+<\ZmL3tJ-cQ'qkg(7.=l@Kt\nPV#4(_*dej5Uk"TK1=/b\mo3%m8pj5t\"[*SXiUHmDUftRX*YGieaJ927CO0lF=Xp;hLBS:4XOS5c.tl]1]!gdP)X`C*md7?VQ-V]_YR7O95s$Soh#[OjiJoh>Lu6F:A@i=K[;7k7MtHeK4((H[0#R/J)8@!e$."i(kU,J)OE%$IE,OBSA(7RA3E#Ye3j8/"9]2`c"'E>?a,GQnFJc>l'k@jdGBm+rRKC0;6&Vngct3OY="q<(rQe\(K@Ah26)=[lSXA6FW[ndB/EF\lI)'Xh%7m\'dXQC=B_&e<6FKq#Y.uI^nSHmVbM]eM4KV9B\FNsg'&&3a4+*0VZKn"Q9cj]#&>^_ZWY5'[^PoqUXfX7M@&XH$UVJDq\ur49a?KQ#&^i3#5\8%'j>7HSs\J!4ERWNOYbor,?mFaoT`&Y+O=Fl$e>1gM(C>T#8iFYW)l^?6Spn5gm?n`%O"t,[4'O*IJmNfHQ>6BkUq\09]1$4U4![/=]!815^j:Pc7FI45usVW5A>+-jXCp77CL@RV'<+ub8*19Tj,pHkZ2dU\eX&dS:tk21N]\#'@LBS:=hW]s)$c@/dT"Q!Mj@^C8")se^\kfMEi5LBS:YrKV^m,Ge#ClEc^AsU#$l'Z,kZ2dU\eX%YDFM%/>FiOUXlrf-X$_SY7CT!q*A_df\eX%YDFM%/>FjBmXlrf-X$_SY7CT!q*A_df]%'X4W_f^GQX7?2lBVerQ3WkUO6hC3R5Q`n(GsGLQ;8a@;n*p1koE=A@OGI%+h*gJ$q65SZ[KikkCE1Zl.C*YE9L?9U[CmuXo-8'ML;uBDSA:Em^t[`rq^Ef!Fs_.^tRQRR!`fbjC^7kQrjToLhmXHX&S`GIFK0Y]9VbE5YOf"UY`4@-=$Yn8.Q6el<`O&\CDpfG6W(<:Mj==,\n]p!jZ?N-'ePImj4P5Na;M?F>b"H=q.+dD?J\)1'6ao#+3'/!.OR`B>FGQ31.=`$F2`>+Npj.[q[oTi,utRT958*5Te>uZ9A)iS*oWsDFM%/>LBS:LBS:]P9"^=lQI/\BPmmT.;)"jjBgTj.2M\iXYRFZ5]BW.2CE:ZOtbUa'%3QXB_=0KfrZr7]o@1L"8HdQ"Jc%LC=N9HY!2h,@kDER`am4]R^F.)mEn[Cr+8N[jAW7LIeV#NT=KhVJ9rL.\f:JDd,u>7G`s]%%@4,e"-CqE`*u[i/78h$$^9]gNkDI8'MqA*@^-#)UfLJJr%P;jVD)AO=](&$H(XF'AV6Mk>RB%qi`RV&:EA[bT.NY`JKHmE,*r\5af[!2O"N,jRWNb@q@?MJbkl,52>RLBR5)7gR=MJblN%s4kDTj-?:d&lM4FK6X?DFM%/>9,MA/%X8-ge)1[^NoJRYhV-Mg-1h_@ll:#-u?pc%9TcoW?H26Nd#p$15>jTl_J<d>Gg.Q[)(DE/1?g!5WTk?.NH$"ccEQTDJ+p`-eKSJ9o.l>S]-Ya+>0Jt5jF9TDl!<&=o_[KAipD#[[)2j*p,-<\6t9em"hb2p4/!F4.pUSIEg.2#]M6+u+Ts/pB8Kl2$060M@IeueSj]?3q1K_'7h5TZ$:?55;dD=Dm(o^U_;W'sQiX4[RIA-(JU(]d(#!Ck*F^e\>427R\c3Z*3V*4.e-gII["e!UPoGOg9uVrIDo66<9MdZa+?cDr\%qdg4:o!]HE3X2>P4#f4#.P5IF3]Ae3)sW)n3W:`#AF9hu*qET1LZMIgsIuAF@SK0\\0%o/^#RWjXNt79$')DQ!tE+2=ncD#tU*V+6GWW,L)W>'q.-8s>6o,g\tR\oUPV<$e^lDWSBFd)W8a&OM*6F^_;W[-/,@ZpjK.I(W[oSSA*fZDokI,JfVLqah*;llYF7\pnVJVkJi&"$+,6-,6HN\boMsWN$[D3)1F:c"mF6\NR;@aT\t+HE1TZf6%f,&gdA'+;M:aoQqMSA7;i2jOPk9>oS_r:''$KrPq\s")be9#$,WEJ@=#%O]qNqjZA1*JIE[LfcnU4TZ:=Vi"80ITj,pHkZ2dU\eX&d]S15l\"[(I.l7EP0`a7Gn&i7#09h=K`uLSr,FHP7.VOs@+hQS+uDTZlBAD.I*-U$cen\.i0"'.Vr1ANr%Gn?eh24>M5S-"Ie7.>M2*,VH^QFH=([e"6(r%E>e(/u2%'gjYJ)!Y%?GPE$D#cFITk2;@T!f#?8i0V/dU?DWQ*qOGh8JMf_gki;icCZIuk2EtVj)Jf\eEkal,hgU9@B-*8AL0h&\e.Q*JkPsO1TR7mV68RB^/h%d*)aIQ@;q;Le[I9ljPA7K*YPfjf'alL8\'pY[^Ib'V;]=#$Kg@[@;-L5&SEX"LH$`koIJmUY3!kA4*"BZaK#P)AeeAlDd50=GgQ`&.+d:aMu'c!k4lUsL6-Km\"E^=:bndR,HRAX!gWf:1"<3'$75H9skJ9^\)rM8+i.$8;'re/Hj!Qq6JG`FZ?!7H(eH.s`qH5NG]6Ot&[0bnV6.;gaO:f9.^V'Kl++4@;/^8kgGDU3+\"[*SXlrf-/%X:,$f-\X7CPmRUkG5*"uu.]3_HGfXJ]iA.pW29;bNc_We4cS%-UaNd&hVlO'ATm`2tr;2So7N#5H3Is#651!f=<*E:pV35Wg951"l$OO6a6)9Z)naIA-X:KDDC%\5fM=!4bK@B7a(NW[-KY(/-uEckO#-#:-R_^huK#X'&?ZY5>1ZN3[P+t+7#+S8e3=5V]f"Lch`oDR1t=^G1NjagSKj(2,&+I?2e7=j-.J;*f%d&T%",H3.6-@oC#:P[^t:3b\c/*.sG,nn(8D,;i"^nJma6uH3_YfXXpc]2+]lN+KG"MNUU^`F65J]HspBRF>08>kiK`'CAu#5cJ^^L!8j?@!J=W!/-+$T&cZWW@^k:tLkn=Xk@?Z5P?`g'*,a$JDXhelt^Ihqh"V'-Pq[4no['rpq-]IV`3GMdQ;nQsZ?c4o,cHMJbklU0H$IkZ2f+o,"tQh26)mW6h[1gU0H$IkZ2f+o+nnPh26)mW6h[1g)N%b\b>n&MMf4-e?4B:;.u?#`9b]lE;$+pf'h.dP+=6AC!Q9/%?mXe'c0tSFi0Cc)K@jcOX=$VJ/Q)/n/V)BB4BUIa!',9a;=Q[2"rRcQKTEbY:"4Sj-].5U^rT1`jNBEroi=4C\*>!YXn:?oDKY!iWuuG2"ap4)IgYIq"lf%mE;>J(5\b`gR%=c:CsLM5Y4$WgKXN<',;V0oBE6_2gG3&BW*#o+QD4ao(bUWHjFH?<5"a)LL?hUJ;r3!0<3%X5nuSpgJ8Lc@(7TT@%@Ta,":h+Ko2V2:H_(P/iiD>N(e3'`KQU`2SEd[A;\>HokH"!"oZA1Hq,VN:$f6],B_60EuTOSA$SG7ba^r$omI*pMoEB"E^'g7>P:e$:P:C'@W"T]sre5BXU">(Yeg5R->tOZd*]%?N(uJ_MWq52oULb5mW9!\(M:RNQ]4^[APp1HQ6TdchP0f7@MAJZ+Ym\Zo6Va<8rHeU?/[O5BG62q:M8fX:m6JO?Q'>*#`cbH-?(fG\Fj(3oJ*(I@um(7;j!&+i$;`N=aT;O,9ZRNN5G"?hLrHfeB*#uBr4*8QKi7CT!qdB2V5k:Ld+\eX%YDFM%/>Fe1G91nhe1np_)*IH+X'fAJTI>B4?.o7;$IEo7Bj;!fVsGdo`CN8.YDE7$"c+h5[Kl9WIi+FRa5$VkJUS:(bBNH'7.+fQFF/-FF!tP8nFW(*mh%+Tj.38@GE@/d6'rg;rI,Zo0]adZ4&(WkYm0aTR=tI1H-e,qDS-J%t=jKqtWG\C3RU@;M$>QFIUfeV%%A[CnH4r-+(+<67^fG6U!`;gdirn2QFV$=K[p(b0g'T.hnm$=m'ssMY#`M(B+5?Jqf'CG@-a0#$W2`S<ndO]RR$'s0ZJUER_5GnXl="UNPhI=)<.$_t@)H/\_XQeNr9S;Hg7?GV,_,dE9IeqJ#@!Q2`gq7k>[#HsTc.1WBPZjC)7AEMKa3Zna\!$@HF6oUdgTX#RU0H$IkZ2dU]%)'6h26)=\"[*SXlre5&\8_5MJbklU0H$Ic#t*.-*Lb?1Njm1VJnUa0&K&qS@r%6i@c/G2mtImoBnm%6i7?j$%PS,T*"W!7IM(<]rgZlCC5r9$MRHY0MSt,R(p]O5C%r]a[fZjhSt!;37AF!L\_d`E\h\Wc"W9U_'==1>.X?DZe\;3gXRV'\aamn@L6.9j>Yf'6#Y,\SlCFsJ8b+Rm0Q[u:?1=&Y6e%i,55&*)_XjI9fe5d@:.!_al)aLO_l;=-TF;8&mH5jNmjsAqF/gsdp?o]g#bo:&+]*^$q2V?Y1KB:/a0^9F8_HT_>823_j)NaW2JL[VL=I<7pqYICg#AVG`KPKcZG[J:'trh$qWh]*LHS,*t1&jnDeA[9`t2]EM3F(!rm@5X$h!\QE_N\Q3*Bnsb:!,=S/n8qRq/Et'ZP2aB"ImUCI#b?n8Yj/mZ$lIf/R(i5T[__+1\6#GLfk11mQ'qL>mqZqO9+e^DkIkV;]>gTC)]at"hplQ.N*Fmu_E^BV\YoAIo/&WEgR]=8k7!dS?n-)\h"phu-%_Q&^r=@P.8`)@c(>$@$i\)U%6]!;R\Q]kf4=s]3mXj!Gdf#Ls0f4`"HHt-.u!DV9"2_BFmJcb,.R:"*H:]M'R9)K2=TWJ^'=T1994UWM%!Kl."Kr:g*a06iitWX?.]AA,>2DjRcn5Qc9)rS\HFOu4UJPt$fLlH#acHcJ]X$3&7%hWj[Gf,kT5OLG'oU!_/^g['AWgBYlpF6?NF*c)dmq?"(I1&YW00"/mfM!Z'@-_RpH3?YmcG3$F!<:Gm@#:XajM)%3eG:&6hmY'&\!&?3L_C>9G\j"BXKQ""R"J0R@42gq;onj\cM7o_plg\\/,Vhs\Y72OKqlJLd)-J_jju`>u1qPQEAYs$(jKp)D%tVX=C:^VfL_#6>5M#RhOS$mRHX+:&Sg"rYWmr;2'ka:'g[a>S"GM)/;J,k8g=/^(1G=dJE!Ml^1uWI8,EOeOakC[^*7Hf[c^Y353o50\+dA2d`eNU+BYWigZWWd6^l8^8i7+Il@/S_!E:Do*?uE+ISp>Gdpgj7&E96!m^_LVGooS=J[XPScba/;OUY`+F0!0/p[,jId9388;\ccoC]`Xl$c@:GfTj&WsOTa');rGm&PCO%pPI9S-m-*($K/+tb=99pAfd1\g"3-[M^:'HS->bb,u?e!LBT2X;S94Hmc)(\lo<pKKtS9&02^1Wf^5%6(X<']QJnXHkYcjlf99Oa_j6osY#s9FeP]?,KO"9qZ_BS9I5n\c`_3k7kTdOSr9A:pX0?2]6#"](t./>Na0/*N#CZ9$"J!5%UGM'#Hj"E^qn1p/5LV^V01Qr_3%BcT_HlOd!,"@3-t9*8>N.L/05%:X3/McWi)H]<^T%K@/S.apkSnHI;ips+1QXX&f&%d+<=QS2hG5\#0J$krf'-n)"RL*7t?g*BjI`mbJ=I+5@7t^UF:bgUeDp4ELYsIuhX`0UF6kkG]^JeGGA&'XG5*3DfcSRbTEcJ*3=:*+m0>#"p4C"GHU7-"O26P!4eQH6DU7`2Tmbiu?QV8=q`So0B-0+AD\"h5k>Q>sk90!Cqbb/#?/Xf&IA$>M+`R)#6#bi)@F4W1-fF'JhLNKELNagC-]T/O#QY*:*jL5<8cs*P2aZo[4Lokl'Q"_O_..lrFn:hJ.LW!SeO+%UOGBAT6+=bAuEZd)).!2%+nVUPA9rf.;Oi^A?UVRTVLg/%Lr#8o>raP$<'5jAp:O\WtrBDC)c,8*!]k/%Lr#8o>ralF+d9jAp:O\WtrBDUjcgXlNO-I=jZ`;Q1Kmd!Hc!m5o*R!sa.uJ:kP5^k(@k@"7&OYcl!Ab)a$`SY]/AR!@WL*[%iqtYYU12(aps^"%lFp[$1tI)>Q*;jC\I2LS?@'.[=THa%mj;"dY$c:b!a+;UHm\6'Ve_Trb-1]:F0_^)Tb!R/lR@@NbeFb>l0pddhg.O&BsK_!\(I4p"jJipmuTZ*\mK"PCT+iZ]cdkJ:&>+^e_:?p5X9YQ,GO".jjL1H>$k$#j>Q7DNJn+`>8sB/*`nF)s.QYHHlNXG'mV>,qE?l7R?TCYp2X7rBW^P$?&1jAp<%DN!:BDC)cT>KO#.raP$?&1jAt(P\WtrBDC)cT>KO#$&\41^WYr9<-IX(Y:Bk@l5U=#K-<'LYRTafD6)6-]NA+?GMZK6VcQn[F?]A`6%`Fj3FnMbeqAQfVN`uK'!#9hs5qG#$P,T=\8u=j7R/h9.b/g]bLL7X$PjIes]k_$UGqdc5!P\<#^B5\_f>7!l*<_QnGJN0]4og_e0bBlq$(/:+,#_uZ.P_#KNiC*E_"(q.fXLTn+;,\"Z03$l)BT$Ej*-Gd+>Prg7)@C6'SoFX#"1o^mZn<@JuQks'gs7@?uk6b?nnC>iug*3#%CLC&=o6kQd2-,ObjAU[?cUEDH9"lm(qK?2[n\9@cW3.:9U\:&W>SG;:j\9@R$i.-bU`^+l4:J?:P,\BFF4(W0l2W-hMG?jc`5U9`Pl4.4nZ<:Ya.#:>?_:3K-h]oFS\U^XZ]4E=e7R6d&PICPtgXO.n&<5HG/7EX84dtPghDf/<(Z!,nERbn2NT4Y(K@AubU9PD'V(t;R<>i>Iop@\CQ\rs"JP^t``Agq#KI;WAX6q/ehLk";9dS"4L@&U%EC/X@t(!'>D0O9^6d>]p]am(Wt+kNBXr[:,/e8V?,NJ9*kT_"d[M\2n^@g`F$/HMLeYe9%8mVWfn[:P$?&1`#9l0$B*\S9k%$4\Q-8'>LeYe9%8mVWfn[:P$9g,NQWYW-FoiU\0G<#ORGFdjld6TI.r#5@U%t>$(F,Su!\P$=EV?egH?3$M`PiprI_R+pCdV$Em((Up_#Oh)*(OU%EAb.FF==Ac)cFgjo=^91&.XogQ9&_j7KTjX]8e5PZb\r:4GR3B77`(eE#rpndnd?[N"cT:Gtq4-+uiger[Y6iQa[mB%bF$B*\3DC)dW49t-%HHE:h6uKCZO^#4&\Q+:'X[F2NXZAF^/%Lr#Wq.4+>O*TEWY2kmRRD&D2WRmJ,.A2-+LgXoaK=N(c+$b9R0JdA'"kr$)bA:f6$.D_,\@fWP"]LSWm$(YHHH=t-G+kSAcWl9FWSK\.53P6#NSpNO^!Np8l[RTMt?,G?&(_AIgZ,3a_/HSF6Wng6IBH#"JnpY_/R'd0=A#Wl4='KO!%WJ@IM!"^%>*h4$62+2%i"0t+>Oo;'l@&XM=!?MW!?"V:OihNc[]%RMc(FQ5-DA`T:,prc^b9nC^Jn02?@-3j"55aG6j`:n0BE3K:RqaK#O:7OI'7l,>P3N\WtrBDC*jO\Q*5%i>IeJ.RW:n@c.;GnnraoMVA07\mXA)O7LGntA1EV8=&YV]\eB6m=)MU*IO.2Hr3WK7Q;'in/&^t:cW=Ngm8.MQoRa08l]Rj_'c<]tLf[g:-s/77K[\a2XJD@r,VA$m^da48$7:HkBSf8#,HL`Nb!X?4PeF.g%UpE%&Bat#mH'DYTV2T*t['"EC1(rXEA_;R`d5g_c=hqN2dPe5A`%Ge[ApY43l-kucT"Y:Kp26?5s"l(jq49TipH5F6"q'GP,CKl=-](1q29-7a&L8G\GE@hYag@ZL8g#qKFY)S&/pcMs-Q^>&/12(MB>ErC(@8h&seONTki4#>6'lraP$?&1jAp,Sge)J7,.@p3p?k\;.kRkmq4DKXl`*e:GUtE.5e^&MK#_36hFY8*&b)KZbnWLubMPcK!&u70#.L*bHNA)EEF?tl.O2F&*_pE/&%D(1=tG4%6GT0O4p"YqDM.ue_,Fb*Hp>\`(-o8,-:hG^"f:=!7T%[?+^/"'TE7C&9c9Cl:_>fa$t]1TC;J3P\=jo]kjjYHo6H2/:-7PR%>^gjYR_"&2+YB#]pc^,0S#EL=YbQmoPnB=qqV8WKac=K:MFqLsJ8on-3SBlc7EXRMR@K:0u2[@ta9/@kJETnh&oXh$;;D&2trV8=4]J]t[B(M\&?n<*#bi])N=3lG<3u^gKo:XlnbPuu$2I3j&I1L@[fTu(FYY23if^aal!\!09TK&8CQTdG?Gf&,#>9KP@"B/Ak6+QFF$-L65\?7W,U\O^#r0jAp:O\WtsM*KaRJX]j^bn`2OZp?jQK:ChfK>&GK[Ft;#/Bn,No04Y+>MC(d6>4sRF+_()Ip/b[nTgTT2F[U+MY5fk!GYsg`.\903b)tJZ130Fq.?uE%l`KqjCAXHG^/+g+KbE=l".N(F6S%9f4Ylh^ck;]0E9gf.Bgjn@5WpLJ]2);=$F4rr3Zlc/1@^c.Bed^Y(/;k^Gq-'cO+:Uo75/XdW4C(ULIAreU'VjHd#^ESntn%pFH!=N>"9kUdJf^;7:M^VAi1ogWgF[usrQL>8e8jAo8*[p"^2XlNMJDC)cT>KO"u3H?X\Q/&AojAtpt\#L@WeQP@Y-+2iT)e1B7`D't]RaK8in5%&hW-$/Z\0XJ"9iCqQ&I/\[%5^IS`bUmGCXQ-S+*s\R);kWLm=b#QcF2mSE+t/Kcqb[,*3FDg3*.eN!VViFcS`2eBTgAe1qXstO][U!]3:8,l*YY>5qLDr="EH*&HXgkF9QilJH(#O?kQ]MkS4p6+Q*olDS^;o'^."?i?hn:\hE``:N\,-LnBAN3Wnh0fYGJ:9e\0fS0WQ5To="0iD:6dK&LQ$NQ7IdVZU9$f?033!b5=g1j<9XJAKC5J7hc=mUju!m&om=9KB+@fs$("h],H`rmf1(KO#.4W3sj>;*kgFa&,c@bmc%O@qgN((Nl@P^$+R*L.-nQ$5%QsaPYC]uR'B%&@rArU-c;*l]j'MkU\OH#`#9F$0/Y@M(9[Cq6hu<$Si5m?r$M^ZHAe%d>`1#;d[(PXph!!6Uc=X+HOR0@QhliiJAAHEK!+LeA0go>+:09m>IfsI17;d>od"r%%bIl3e.Z""]R`_'@:8p%Leb[@hWfBreBb\(`&nkq-53^n_AH'"Xnn`7!Rp#JL2Pp@W?SK>#=A@ul*Wg`2jf%t*>E&4oV!So?6D!;*.fGREpQd9$a?O%IWKYscAu/>2Ct#q?.p*8mtS@luaVNhHH1*\9[[%ltf&i/igq0Rm`.(Fr;=N:n0hqdZOF,(GS,U'jk[C!D*[HqZ([JVa"gOm4J+URsE)lp3j,I`h?afXW)E\"\#QUPfBE9('c;kB"d\r^6a>:j]F*gBm:4`W'`Q/"uL-+B%AF]md+%7bIET4m-.ZWq5p4Gk0u5t'q#(IOj"/M7:mPrS\X`>$B3!f^a"ni%3.Q\*rMYV57#7QC%02RO+U),Dh-5;#(5qk?O)!l/cks!A1@a(s6AKm'Bf8/k8sC"\20NU%mTbI37)^dn3!J&R=O?"\=JulD/[a.!)-+>gQ@#$LLn9+1D`>$R/q?/Wf^Lc%I9Ulpg#&Xl85tZr*-&[miARGn<`VX1OjAaNk4ok6:cCU>E"[=5;ffZP2jG7euJ:o(e9CIpm"HG(1Z`09*s:prh``]NSI-D-+B%AafXW)>o'tN_i\0*F*ZJDN0),_WpZ$S.A%KgQ/"uL-+B%AafW-*EiXp>[p%tc['pkqO]tiA-+?c91NG"VG`_Q$cY2/$"BWWB?skOYmHnTi+:YIk(&a^.*#hCD?NBV,)K9*-XXYR)WZ",!@QVn<]Ld+d3D7!M&L=/n5HqN[=pHXe9`@%Q4*Ij5@'r-X=,48;Igicj$6)-K/%Lr#8o>raP$<'3=Eh;U]ocO$7H@Kb;'*8JebFl^>HMu-))SG_)/o^V]#$ea'#$49W/)[SR,6:m6UcO`\YnNeF-B\gH5JNBbQYsdXVnH`Z/+7ikqCZ"T(N2c.s&^1E)9W/i^%Ht8,\]cQCLACtNhi>IebCFW>XX[^YiYmoq8dTp_Xha&QCi9pR>fI-QN,::do+B86b;hgM_?67n`P2&DQ2_E@PN%/lDflRS%Y-./cT8dq,L^)VChg]i=h(BHcWUZH6]n^>KO#.KO"u-upiKTQIfo/@lOgl6!_bnrEe.fmrQ:4`*tg<)a)]5[NsXM!lc&?nieqg5nnSW:?J!HSWj']%(FkA^E*mfre!='jfD;U\^qsk]>+.!ss-7L*IgOsAXf?E*iAb?Sfl>oUE;5.B?a]NH8@.eeB._G6C:T%Hr$>Gu^P.[*Y8+J?_Jc\a[eO>rZ-6G+ppfa\aK=N(E\"\cge)J7XcZi,j]6CP[j=EdjAo9MKtidT.A%KgQ/"uL-+B%AafW-3EiZ_*8oEb!KLgdOWbSm0=)ohQ1F'Al>IE%arpndTi8jP63&-p+-\l14f:jIJiIKt?@c5m8"IpBjJhu"gi7Ph)TST-W%QJnh!npqTR#tX5;qGL:gs@<+I]abuE;X\(3NO\s`1KI2&d(PB>+['2ZAOcF>_5O'*>BJ!fXOqXG?bO!q/A3#hASWFY087/ah-LqU@l15:7pfZsFI]k7FUXp<@a7/8@RaGY]1`7'oMhXQa)MJTBIgkZ242q5iK>4S+fCI_dfCG]gf?8*k_0l4W9CVsQiHNgP0;UFE/%Lr#WoK1FafXW)c,J:?DRCb!P$?&1WXTS1DRFS9^GoC3\WtrBDUiaJXlNN'X6/F-0"5#I>KO#.`FjG?i3Dr6@3EEN'j`rGPokY0?Mb^5`_,IV@]V9o>qmlMSC*E.JYXI$f8a3Q/&t0sst.`//jnI!'g^=MYB2*L:[QT+\dP>LhWJrh<#uO^#r0jAo9B>HL>:jAseT[p#EFXd8$KE\"\cge)Ilp5rS$XlNM_OB\hUFlZTR,.CaJaK:che1#t>T=!(0239^%5HNI'D9`),oWgZGLl*BQBeFDJSN<`LBRC4##BE\"\cge)I\Zmp)H\Q)SoXmDGIF;k)Rl0#n/Ie,e^Qd9LQs7P_*j!F3E1Rl36T6WHTfp7Ias+*LV('MT6(QWH2mL0``Lj>a$Sq7SQ;:b6=G/g_HhP'nechgR]Xu;Ru$7df;`a<.ibpY\<4S:LCAfBdP$?&1`&]'NWYW-F]Ai!Wga0Fm>KO"[Vf^W;`SY@CW,aE!ebVdR-+@WG>OeH&J,7LLV(LH;VUr8/(LDMG@*;d4`@]i[VCc#32at4Hd[&M$VCc^'D[!fE2L'65>N"T,o3b^g!$etQN81H/YRC4cV-EI,D]BqFl_f-r;2lJ,;BA%+ouD1-LglYJ!h?[a35-p=:&'Jp>:dbD;p-IR%d#BE\X#m1I_U6+o"/QTI]Cup(%h#ZaBcN31R<3KoR;bS8o>ra''k2*WbUTqD3*Ie8T#i`P$<'J"b#H4SK,2*ge)H1ed&`ce]=lH*kBgage)H1\*DlYqT,d"3H?X\i>I_[2a$*4)0A6nNBd\&9!BZSH-L](B)o/Q3F7E4bG0Ck-K3oNV+?CO]s:#(:f^9DNS/24`W'`3KrV&[N"Ni]`;MQZ623!&"(IiPNT(K\lCkX#'-ceaK6A@D]_/fGRY&)m4N;8Okq^$00ppIa/ap*YD/cB[k=oZRFPdQP,WpPpQafSb+kO[\^@aW8Kb^=jCdgH2Sc^kBSnPcDHOBY^SDUi\m]SW\!6Bk*eX#(APlF^$j\V-iu9'u.E/^=m]?*sJTE\"\cge+XaEiU[P>I>u%.qSZ([o1dD`#>DH/!'X*-pLV6#1-)AM4=JNb^(?CL"!3uW#NQ3r$_Jr$[^RX*0@q,pJ*$5IO=^Sd/m%`fB?m(Nrl1:/IDJQ;DV_XNqYfQ:]eg=`df@51i,g!WM:kG8T>&9\4e&RfmW:N?e.]^:[+1&+C?[M>Ws:"b6'sr?WbMRShRc]J9quf-,:-o>Wlb5H:koU"ShSs[jU*`fj.p=-F7quYO6H-b^$uYQ8IZ'Q'#9"MP;Lkk:b?YKe/TMQ5qA]0alV;fk^]Mo#2>kn)&QoAnJB"::-B?K'A[,ONj'+_I=#ElH@ca0>.&m\C*SIpsJtm`?M6o?IJDa>d_?/%G"us0b:d0G-M>JX&J16!fjNR+pI%.Q'#9"MP;Lkkqr>@`fJ%l-spDaA:qRu?Mfsq:UcpNkEO$D;*Ie;Zm!nu4ZMZ_moDgiXa:.@N#R0):Bc?I'6?i1NrHL`n[>:>#8@MZ>_<=S9^oLqMj-4:Hm!UPE%B.njooi?VYafR$;[o*o/;3]@_ge)H1[ust;XlNN?U*tnn1`s8nge)H1[ust;XV=3$'Lc_"E\"\#9AD"cb^ee"eh4S8+f?o"#NTDSNgJ8P)NUL+..GJ"00pWT8FMm'c'T&9/IpssZ(#C919"gQPYLaE4+_$V)r.+e$HJD0j8`gAX=RH&AHjI&X`Oj!gJOkcrlE[sRUPjV;i+6It>E"9uAXh"YQ_Y][*bHKG>Tj%t08hTF+%(TBUO^#r0jAp:O\Wrm;9".9-[BUpbP$?&1jAp:O\Wrm;MUIoT>A^I_XlNNbFfR*4D$RNoBlGjdCWq@ad9/.9SI(+r!q'e2/C4"Z3-aqT07k-QEH#\;i;$*NK4k1r$2j!7rrjf[J+o$(%$$o>&&.PS@ph-Z"TRZV%tO1p$9[h)_dI^G$>rWd_/KAK!dN\3Xl,%cq%'_(aD#U7+q7"Oo:We!=sfO9\"Y\:G'%U*,EWj_ip7sV[n7q*5]0R>\Wrm;8iJ&7n[mB2WS[3FCsLK%Y9^j,[p-";GYCZk[QJT2L*O0j>KO#.KO#.4#A>i8loS!Q3qH0Jkd/0JNfe-YC/RnS)rj,2h1nCd$!!`:R[tE'"8!pYQ#_4n`IVh=(@X4TERYi9A"h$@_cVhgfQnh$sAR>MfN10+EJ&*rd_bf"_.hI/DfN%/Om:JA-+'i5%o)#=&+aoAK8V/b#UOIfb#rM=6%W%\Em*`UMpsW27Xr2J,,N244M5P8Rj7%$/_d)rhfTibUi8gT]`-P?V$VDP\b=dZmC.35Jg8;&3F!/F.8Wra;A;RaZH0.+B]N37/%Lr#8o>ra;A;Ps3\#0N%2udBgo;Z<'hcf%9s;;6Y)L<7jZD^WOUS`TOp2"58^LfkeHoKn&Hc*P-btH%;h-+ao$&V&ohHK3T1FU.d1j*41CgSC:4hHH3RC!R#(pDAi:>+q\2p&Z/C10I0lZY`'O7-MJ1GgV?uUK3>eZa5(N1WdgY3BH^(UU87MC:sTmn2&O.Q:GH(F@YCm)a/3l\WtrBDC)cT>:GH(.%Lp[eOGVT8oE1<>?/mLKAP;RqK?iWKNu]78^W@E\"\#CYDp/eS+#EE\"\cge)I\.#QFnO^#r0>1:c;X%(P]l`K0GJH'n)#<6ul%Sg8)!,afF4U+YeNuP?S)cQ(BaVn:-noTApfZVk7-Z13Gam/u*Y>9^Zk6=16R/o2e'6:.raK6.F;7\NQ[/8HCP@paj'j\7P>#L'NMDpYN4?[SOjVO54[X?E<=+A^dQYDAgpoo?d6[j[$/[&Zp3&_AU*tn[ge)J7<-dP*NM](uC+;(KrqP2BE+CX80GFV;K+W(PkT,Tc$r%V'bq[Tcj$mNCDmJkJ=2E1\f3f:4)2a'UP"c'n,*`QVPXBr88_EF\Wrm;8iMHbmaj&GdOL(ZOYqSP]ZEhACN0_89"3MgTe?;s_XFk<23(iM=ZYq]pP+CNDpHnbZ`%oFL*O0j>A]aRafVR3DP\b=U+gU<\Q)9H[q[mC/%O2bWL)D?>3&_AU*p?n[ust',]]r?diiTD8^2eK[VQ2(/rtV%=2r#fU\DnZkd`GLNa.S]Z*k9&f&9ePj*muZi@C,M;#a,tpQ's@b9Ps/\H*77Aj@i6!ck?aaK6.F;7\3(FT:.%gTo_BYIX.Ugp4ukUnu1+q!<"Z[CCo*jH]n6]p=9d*n0\S2OP@5="S8$"M%OMO]ut#K61nBjAo8*[o*o/;&Hj/go<468T*'ljAt+"+Pg3S\Q.2$XV=3$'Llsd[qa/QP$9f4%WSQ1oJH?f+(##;ht_L#>Mf1sp_[grB=G,NCtZP+ea-Qt>$f_HXOeuBb<'mN`[a,7#-[Lj#b4)&)8p#^OA?#b7Vop(VX<^D5RbV'q4q0QJ\SKO!N'"M#[BsV$s0o8:;Z?dib'7K2aT1jAqP.>:GH(FAqtuk&R9l/FQd!CG,'[G.DFt[(JGK(YpQVnH)->nltl>IqJ^ip"JM'fW$FEXlNN'/$V:ZXf=j.V'q4q0QJ\SW?7qa1E_kfOBY^SDP\b=dS8\qH],i^8#n9$_jPI:lEV-#-DH-3$g4l]Zg>&D`#=DH/Q7.n*;LKooRkafS_Y\Q-P0>D\>kgo>,M=ej#5lQ4BrK9Kq$Jn-VGprnt,4)JW_UZi]=(q$/o@"Rf+h=6B474mVo+h/]T2)S%7b:^\(YfBXXYR);A;Ps(qGpeW\l)e>;[>0Q/$,l+h+J1ge(EX7:G7XEi[cU:i=fs3b5p(1c5Blf_-r=bi_6;Xqn;`:Q6)lNI3m*TOqnkb\Rcbk40X/E7g[AG7eeQ/XmE8>?+.1V'q5L:#VlE]9]'nIat1jeFICu:FtD-4Op2(`q"2;Y??;[>0Q/$,l+h+J1ge(EX7:G7XEi[b",e6pMO^#r02B6b"pX&sBHCu)f5biajk+\t]7[hOd!Qf@=[s,tVAN"T7:/V/V'^jNj!.bnc"+HZ_GX3/Mc'Lbm1+FIX>?H8m^afpHuAGLe14nt%K^s\OCb,lSBgo@]C>Et=T:mt!=rOqO_i\/G2KGiREiZ4&>:GH(-uu@7\Q)9I[q[mni`<#rY^P^3@(@"eTEpEJ-/dsgSPQLY8t]YFat4dK\>=f8bl1d_YB9qHr7B(1T0jf(%.J-L:S^8!h!4iE0KE&7D/lV>b99M15Gq_>S@R;s.Z0rKlP2Up[ocg_#u2M?0YHU-$P/ik:P:;j-H"_]ub6!mGH_^k%tL^W\(F7MKqkQ<^Yn]n;!@f!HP6@O^#46\Q+Vgr7B(1?Z%1!;A;PsQBpT4Ei[ce@br<_]DBbmoFf:oi\dNjQCV8s8;D*1dt7UAY\>`QBs.MrG?F)Rk-\\M_9C0nDJ4gDH[sZ(XKbMntq+VQX7(Ag5CpUXemX#+[qZ3eui3S>-hh=%O%#C:U'm(7cN?oc0k_E2);.m>;[G3Q/"uL-+B%A.>jjA=l`V(X%"ENEiZ(d.;kEB"`J;5$.?/<+>]>fl.K7]2b1"o>VY@V=2i]?OdQ=7/mSVkIc2G(4rFNPa%h.U/--frB!NPI=TJ-FX%["4eQhQF)c"]`YWSnqJ@&1YhC8VjaY[[r>J9Pm+./EJJ5Tf)?le'\iM6:#V3XUYh2;68HZ8Wd.>jiJSK0o4jT4S=_1iQ5;+O%;\:)OBXR_\WtrBDC)cT>:GH(F@YCmEiZ)"&ot%MdpBM@V:#D/3UkbR*Iq@'l%OX%=Z!E,g*nQWU_dbnP*uW4R4S-gk8siKkrJ8.QbNks`hpQ755tVMMPn;$9E!e*Dg_kp4L&u<9Z6*Z1pp_u^!Ra:eL;_PE7g[AHP+W^kshfO#5a^WLV`b-&M,LumI!h$'`utc)sfbD/[VXAK6`FU8*U#?esBB6'Lc/oKWP#aq3h$_nP`S.iP@NI?.\Z1iA"TUek8njRN(;=SMdQ56&Dc+I\f*I4*6:1Ohk>;,uUA^.i%=5Je[Y$`M=^Ojkc$oi7h,2b4,)ioiQh'rS7HbUB`gj9Ajo@rHDZd1cTnAj_-e'C2[rq+F@i&P7leqLa2cfVcr>Pp3O>I`u0(B5n>^Z$QLjVaCgM@oD0?Y."6Nu%0[PJn?0^\Y8_UccA^Ii#E0jQA_7r5oNhIk^3-*qYH-?e&-as/T>G*&8-n3i/,X$OP#:X'A;-L:!u\Pu#JGp;]"5M3*%;Zpp8"pn?fAI_Oo2cJuD/HA/^q/_Au:/9An?696`p_*`\>Y8%\AODg5BhI3b[+meM9dWE4%^+2R*BIu+7fCEiL?W;Nl>"3*pr5]:lq1^a$g>s3)':@sSr=_0DIg8+7niK*S-+B%AafXW).t1LAj#uHL'iL!P?hl2K/TNAPeS!IMs/MA?LQ$nJ:8t)/6GiraP$?&1jAr=G-g[C5O^$@\;7T\d@rrge)Il&`"oo"#b(G%h)7ZK'UF9M%$mX3=U_?B#3ut%(J%>l.hd;(`l>&S!10/pr_JY!Ij\4hh&n_oQ>+mkRRCCK+A(<`4k*Wi#f`04`GIO)RR3/9edM>4I#s!VP]?`(#5=L#05%r!c]0&a[?iMC;&/%+!(N+WsbgYJj_@$;OKB"m?!:H5U)d"Ba\iBIo2LcAuS\4eUR"JiPI3\4u(4ui^/5Ze9i>,cR^P/"^MfFY.`f.n:MJ)(T=:DX!YHgAgg*Pk?RjFlpr6KfR/KpmuQM@NX?#5M3#%Ye0ILBrMLR&I#`Ih=1OSco`id_I%*Ih#b>(dSIUj$RQ.H=V`ACU.nZPGd4GTQl5#jE%1A_o1iJG7k772fqml8(9$$gp'&OIranc5Y87r6u!P6ip-2\3'N:P1mEr!nfmafRT)\WtrBDT2AeCYV?r-+@(Fl@,)T.Nu9a>KO#.raP$?&1G^F^s8*Z5F!%qm6>j3RW0:H-X]?CArh:Q'bBKK6_Lt%cjAqP.>BPp0^%CG>E-4"DK#,ja$Ef=^K7VDY\2p'bCBg6fl<#B`kHli>,=s*iDGJH,_)hsBol_<[)bkmWd3Q4[Q3'EtP2PV=b#nOeX[gR45lXq)p]81]3.CQ.TNa"/7*mEmHK22Wi8$OD_:]Lb^f+&-!rU@PIf[_B"ePSd00gkL#/&@?[u=Pd&%mC/\RY/JHp;9(/'1SHr)B:is1.6sKtfZ\@DR2#?M&^u4O4J[UkM&5D[WVi$F7hP-h4j&G6cDGGXB.2\Ea7?Ba^PU]_YPB/qr5/pgs>p>5/qFqg<)QRH9%>:HX#Ir5?h*[6eI8hQ9oSD&.9qcch"p=ghFW$$HZFpP0M*_d<>=KoNlWE$5G+`h::HQHiT]@:<[Bq9SL]EL5i?4O6_00D^gm`tf/JMjFCK]On/)\`*FVAc@f"7ib+::1b;ck]uH[-Z-$_Of=C8pV0kQBP'pq7-Y_Zol7=a4$N%!4eBM8o>raP$9)M/%Lr#8o>raP$?&1jAmcU[ust;XlNN'/%Lr#8o>raP$?&1jAp<%js.A#3k'G*opt%#bs]@L'Y&68@Dp"XgIWUn0&03F3k#a[dRY:H]cI:=DT'B1gF7+#AfP'iSH=FRZ[hF!1bfNd%7e7"OYga$AQqhJpjVBK\T021Wju,F^;7O21jJW0@pmp&e)3l+r%cq'l,V`Ea=Rs_a2#T"GR1)X8\d>3?043a^1I'hi@L>7iOcli>J>#a"ZcDA-$V+^F2!t_Z1+-EQ3T!hp%,Ta718:$HnW6EiPUkN_LoU=H.VVSKf/P'p_V-:/_n$)h1fJplQGY[qrB\qW,ETIja]$79sbP*Q:ORO%J=M8J.:!Hl2kIdd>lTK(C)FJC&@:>e6]=EWF#N.D\b9Q>l-clH+FofW#S(HOc]I68OMork3IH-mq,tla!VhO_frs&R3N.8*O$\d\H(@F4oi>D0!B&,JFjUK(:GZ3(al#@]2O'DN<@CsKCn7gm2J`M@CQA)e%Ma8`]2pl4F[Hl^%r,W#.O-=`nSa5>2QQ/2=3(Q#BI5f^I9^)CNQKVA-$Obnhj:(h^VX6Wd-+E.FjAp:O\WtrBDC)cT>KO#.#4K/;+hi:N"R_"A/S)5Fk+7KT);Gg)Qp!WHJInlcb&?#?c]Mn'EUJpoq,,73"3kH7O1ULu33jllq>VZL&iL$Pr^G-Gnec9'0mlR_mD((^[=T&ecFWs=GNYKUmm1!FfA[`$iPO7XB-7lt^+23*ja3D6C;/*J#[b&c/)`5gcM]q>nS^Sil[;Ot=>+t6k>?_InI\V(J"`u8dR?LO;h*5%e;%c16o2^?kc&S_*Fmn&+Gc4,#9K]mta-kM_6V4Hg"kfW\b5B;tUs$GuCZYOq-u\;LkJp'$MNS%iCj7B,@\^K`2eYU$8tdu]bRI8M[PI$g3KNucM;5+8ga\_`!RG];%ZV#mK"e9_E-s&H0K9e$'EuOqIDM-[CcONj!ur8X"t)[^abt[:CO'q'Rf3M<)X7>!*Yr'-&$]88c85>(+>NUnRt;g(nZpa]*!.4jR1>A.mQTCMMV>\Loe"t+?ekP*IGIMJ7YSN+eU@ckVb^Q3_W_)Fn_MH>cd/L;O7AG$Gmh671Q^cNr"[Dm2h&LLX3?4pRPeEBlXe^U>[>c("?k0I1/?@m%X+')?0SrbJt66>q$O%p+%1d8W5%b\BD+eK'GHcq0uAW?-mhHsOJbk#fOYf`2GYK;bu+Z<.VNR'40K&MOpOB]i/7(4;JP$?b%ge)H1[ust;XlNN'X#5ml8o>sC"6?E;]VVLo7.://ADk>&X)R#=lVU]r/]tfA6^=r8M5Ea%u[^TNa"lb^qK1p`T'%CqcmZ.Y7VsS]`#J!oaTVZN?_R,/uW-cU.rrX,SbKmdgA\SMM.tZFP\0E+[C2h/W6P(RC.]@_T/DB&q-qY?KMJ;b+T%NQWpqFQ&S%q9%hgrT)Ng$b,oa+HQ%*b&1\IfjCh7s((siMdO9=R^*=2Kr]tqb07C3kIoc]n.N>b4:a#oj,ga8?Y@E)*PHtdaS@;)b3L!B80d.H_^R!pi>*3#+5!LEZ!]\KMcj`H/-]1AnHRs>pYtQ"LT!-8f$o1^Rg\Y/*bkkZbS_Y].dk03EfghR17Y^mI1m"NB<^_L?Aj_Wr;FV11M6bY)pGcX63)>en>YV1lYe*@0U\_L'np^#K>1DoRkD[?l=@Z%unB=6JH\6F;t/cbHLMfi#uqhs25jn:p$K;u_[F;XFFXaICo<.%dl2^.!r%oA%3KkEE$65I51EaK=N(?%q(6)KI@=Q/"uL-+B%AafXW)EiX>=ge)J7a.+i_r@/p$7Yj_L,YlEL7EMjaXY#.i*HUV,\hXe4mSdTbXhXb6-"(:#c6#bgM5U;HnnTYI!kuNXc!ke3b1%>0nZf(Db.j17;JVhGnLr?#1'oN0@fH`Geooiq#0DGt=1aD#>-gggHkB6b:Hn"PI4N?[e_jAl[Mk;'cpPtk+n5h/':WQ`/k?]OH`LiQ@B03F/UG[_fiVSiQ.^g0ekki4U$Z!S2rTY6F$>O9]DIEi3DrDK3GkV@?u/j#.6O!03;C&-5C^,Q8o>raP$?&1<]p3>PUuE!946&T0pMdc^A%p%P:fW0;p3XdHcW>M6uI+&44m#ge)H16ri;K63n`f&9T/*g(8-Z2AH7\9H%l`QaV;N?@1j&nFE(;Jlgg_!T)VG'C[4Qah(SrQW/RdiE#unji<["/8n^j*g@9%$&+(32+e<8LZ0Pf;O!J;DUh(bop+%/p$,TNkkYX0l[VsJ2AW=E#"*8S[o/H5M;5+bFR(HV>O0hAlI#8>m+)3:H>P34Y766AWdEQZhdFc@;IJ86Dh7q9o#Ul#=g'r!iD?^hR8nrF76u#B!i@_O+?g_L;s>]dP_lRdQ&(%!&4-XG6jJfG`'?/E=[=5f'9LE<.[Ad]DPc.7O]r,8KFgIpjAp:O7B&4d.j9QW63rY-Wqia62q[0TBu'CBWDip=4aJ)%7kHk>DWt)aX$2cq!N[iXQXNLM5%Wld]\aXJ9)@WoI'^/u_oC"ZJc])X4cCl6Wq)A@IGmdXW"VfpN8)>Dl!&r#0ahZeZBcBdRhd>!BXFn/7K_,`LeVib:p&Qj3O[eHl.EkOGr-;5TY222UUpHJPJ6<4u6aeP#Sh&G8Yk&tn71`MA71P2&ZIV;+"l>BS5d>P1n-m^EP'?E0@WV0[!7HHE;MH5(CM&i&`E,;:P?Z/2Pcg)&8dHSn&0ce=Al`q&\Wq2"7rBW+&4-X76[0]uJ=[%p2iEiW2t>$$X4eZ'e_5F5S3hl;[4QV`;a([eU4DUQPCh@qr9!-I^TMVQPbGX&@+lV9.lmdhTDneRMdS`nI>qKX=3#/RMQq[&SCe)>m4+Z)2;^(PJTe*c.ni6@($?U*1ncV;pW;)r7WjaV9O^bLA\HqW0BG@Q"U=opfU@P-s?b78];W8_1j&iucJDi/jRP(E`F1oq[ld[QNkpd9:9g9/.2e)Jdl,3k*5^W9$/-d*&iHSI'#AOBo8!X0-'6V)h<\UfK?Y/a$hgd'i5rW?mO0X3$:r[-FBfC>SD_kZ1r>`K.RQXlNN?U+#bEC3_If]OCba67sFjW_?oD2LcdY2IFGDchL\OA!Zs.b!%?c(@LDeU0)<'%1kF]5"lW?-Q8?Fda:@X_PFNc6Kfu2m'Z)X.!+-eNUH7K30Z+IeM5<_8@md\:j3H'LfRY;p,jF;9NH%?Yh-O>JB1hAXBU3I)WrS?ZZ%SbMTFn^UJU.jW?&RB_eRVo0a&`VWD#7hmRoFol)DO0/!9>q4?^*>lNRM+04T%Q604Xkjfr+B/38cStEUlbjohu0.d-7q5*1%bHG1Mg[].'D_/YGq7Yl#/l,\2++)<(8'@MUJ$qIXnQZ"Pnq,sl$icPJ0=e`3fkbrQZGlC7j`QnK/Y#gY[;Zqk]PZ?aZJDh(nug.gbBkl1><]9=kjjkt'?f96cQ3lt-Fm][A\ZChb9>&;QQAfglKPVp[2cZGYai(jE]Its@l\0^CZ1TNQ4'":Q:mOeQ7FTdQE-<;QYVmqMr/QmEms$Wgp2mKN*=4Pitahm3-r+Z/=fH8\WtrB;&!RD7;aE\P$?&1jAp:O\WtrBDP\b=dX:+VE\"\cge)H1[ustO=)PuqYU>WSn>iI9#p+QV;,GH[iDCEZiZ$bs>g"rKjB<'sr)D_X9?=cb:OBU*B+Co60>&rZ8Duq9isQW#*e+TV_(GYRO?QYYV,aM>_AKlk8;Y5I!'0>&l.(Q(iA@jAp:O\WtrBDC)cT>KO#.raP$?&1jAp:O\Q/$7`Q>okKu8sio+4Rc><)Eh0ocg+$dfV'_cmG>8.W?-T6!Xr;8'^67cQ;If0)O$3.:?tp3dOIGRUK5[ESR`7;4;n/%Lr#8o>raP$?&1jAp:O\Wrm;bsuXt[ust;XlNN'/%Lr#8o>ra;A>u'aK=N(E\"\cge)H1[usrQYhk8`0hr83"oNru^X^G-5OT'/1U*e^3B@njacF.I%^"Yk<-T,ULFul@XS1E]u+4IH-#/2mqs2aQR3e'HrG*T_=Fg:HjfO0oqn]:8uj/FP$?&1jAp:O\WtrBDC)cT>:GHXI,n=K/%Lr#8o>raP$?&1jAp:O78]M7ge)H1[ust;XlNN'/%J[IDT-Q_nNQ'1Jtn?1]P-dYCgOj,\`G=W(5safXW)E\"\cge)H1[usrEMUHn5KO#.GV-L,8;m!ac82fC3W#OTE@Shto.e<raP$?&1jAp:O\WtrB;3^2f[ust;XlNN'/%Lr#8o>raP$9AmdX:+VE\"\cge)H1[ust;XVu./^81ZZ5+fB>K"r`Q+0[k^04-md3D8?.MiUKE]D921m_EHg+7G`/n--b>3@?h7HZBMO?^t*bNR)D1bl6mTlhO*g?OD2DEYj5E@W8Ue@^U"T?SB0E92Uq>7rBW^P$?&1jAp:O\WtrBDC)bi'W(WHXlNN'/%Lr#8o>raP$?&1jAq/41`s8nge)H1[ust;XlNN'Ws7AE@@(/p)0HtdGB#+L/Y%]OP_W0L.UF\QAG?AfbCp0cBW7gcI,SjT?=/Uo>-+lB.>lQRe8iUOXlNN'/%Lr#8o>raP$>%HKr@Y2l8mSdP$?&1'W%!lb8ht>P$?&1jAp:O\WtrBDRJ14U+T`OlX7J#DC)biPYOt*GF[G\DC)cT>KO#.1/ekGqJ,'OLlD](k9NrpeIfb`Tk%5O2"(7@j@d1NKqj$J0m/,pJ,#eWo\.8[3VPnC\`mDho11)ekI:o3O?JHA)5rj[pm!JH+3>GobEfo\Wp5GT>oZD!l\5*"j1cB_-X+R>>_B0Ku_Q0\:mQ:]nu_gMd+T)3.^$(*^cd`(:k6GMHf@D._j/"(>\8"/rdDA/X"*Q9aTY@0.nDcjWuFqXdB[/HJMJW>C!%POfTRh&BUrkX[4;60":D77A\`,6FT"_H:$E0.ofkm`@[Sde#gp*:pR`LcrK`_,G"JD@.[ga0Fm>KO#.JrhE;-iL0YZ@':mSeUP*ub^N3K[AYU'Z2,(grfta#q\EDJr6WF/'7:+sKqkK1CU%396?!ae_d`Cp&$>+hSri((CF^;bZg[!ZMW%'W+!`#mi<.Y<]rp2u)3DSI6K2ds`@N/9o*9@!a^]R"eP_@;MX&g1pd*?\;p53rL\:5I't?.UmBOu4<`V<+[>-E+[>_EOa'3B9ZSD)DW,=W^Pbugb@2kArg[3l?[I"r/)OXaEVt;A+X&!S%7u%'L,?o;(_`YNM@p),#m<]$V3D`$Uk4_WBgFW`9*cr?5X8Hd#pPiM5aKiIpT9-9gTM5"n!Dr(rTR`SGFQ/#n)KPV:NP^E=m!qrch$:jRB0hc-pPkN:J%62/%>/Zb(Wpq!II)fr7Gn$nlpD#^8tP.9nI9%Mjp"/XSh;Ua*,L5HV'F:lp'e0=]s<&^V3URRn3&B>@-0fA9.F%VAJkOmVJcgr)ZT:I3mrUI]H\ps*j-4D4k65\8mSfMZ,Pi1f=7hOGIkhQ+#+AI18-'R3*,[odjtQF4s5jBe+%sXgFA%dT5'o>@"5SlOIY[VJ*$(CmVTA8R#o0U91ef[aJ418m?#1A'n=A4F(ZZ-VrU.N8%_;U1HH-q=6;H5!LKWPQTgkb9aVk/M"T->98'+>Bs!@Wb-["b>1cSem-SKNH_YNMb-QJ/qd?WAp@_^;H^qfSV@J-AL$nOtlGr2Hen=)I?J4D=ICM4a&\02XG[K!Vb1%Und8,^j]Ipe0'aMMBB"!,!%9Kt^O0`jDkA_OoRiF>7c`c]Hrp98]2VB$0Cf[.qQ%eonYIl@^#3NmJ/@%V8LZ(6FX8@2VGd5/:HVMqg=ndIsB(hKXot)r7Q/7crSlcQg.)sb)9p`cY6b:rdr[$_pd3aF3$`'#MNod>A:/:aD.fXiQ>3^EE3S04H?jRh`u%$1fj>8hKHccj%Sk9/afIQd!%gcZH"lV]pgR$j[]2qS5*8tAYIgm_e&M9DWO`]pr"f%T@H]eH>M3MUm+tI&^@J%I5#/#XL9f1DCTAQ4G@DHc%/(K"s"B].KI8m%)>UAlHmiQ$_?[KFq68b3RXOV8h"!_PTp:]=c*CC,M%8=`\LsMDg,CDMH-8^gWr5H`']OMsBg+mG+3pD&"eAh1W\+)qYO6l&I3'tG5M,#shXam[;\,65;>/>megE,aHsZ6jR5WYlk0n#<[Mnrulo[@.kChVNrrg'!<.+jiB_=kZ]G#EgUJDp%UO3F=KlZ*En#)*A@t/C\4!BC:f1KDgJ\R"AA.A-E`dIrek!+9Xmk=Y7aX9)eZDq7[Got7ko#MV??WK@4HBVq5-TAO4:?gN)O)'22aW]&=<\"R&6(?,%=k/]^?PB[7>c_%Q]l.AD73"hpgsSo?h*+J?DsMI@&%Gock^^lGVJ3*DbV,JL[g[,MXnK!bEf7B[s/Pc7Br_\WX".nb4YL)FBrabO<`boADWrL[:0[,=0fgGbeW@5fIqqZdoLg=N"/Bq208t#II2Q1II"(O4,u'V">Kt=R9?_JFbnk=`^?!SkQ[G3DB!?baE[o-hQ06VKoD\EIdW]<;[lp5PjRR(4hq"@mj_S>uC/uPuR$I\pq9>)!k8UeW7-@4o-[ClYmI"oYq/5UO1r#V+qlTFoP1Nd\!;UC)h^pk.I]klAjN^n/_C&,X%_mJXc6op[Q@*=n<]+s5XRgQ\q_0hkZfUWG\FR4oo1,D6XC3/(HS!A*;rWI=^*EXG8iA&hJ=:?$q'UquY4_RTE^RsH&Eh[:Aarq!b]Zl1+"G35.6]1P8*\N`e1/GTrF51huQN0A2aR1:%^6.bUlUj=DM0Q,>7N>b>Nh"+`8KrbT\CF3s&7qPVbO5K?Qk\==DB>rgm,_jPR=IQb:hbK;0(.K=,b:Pa>ZLf+C=i8jU]Me;Ok67>>/`r2eFQ^3U=ZsAL+,6<_jHJZ2JR:'5_b>`(d`\+lT!'+lI=h3SV8%0pDR,(BQYaWZQTT:@hoPZTQ@@ubn%uk;b*Q%;^7+;Ml`IOZ[aJ4VX0&a/d8nsn>A5TqS[KHbc7@r.8KBnVPjLj(TgYOdU1F,4c9(3Nmn;jHc:+9_JQpkQbPIHBBp%-88bb;epj?C+@,`e.,b+8-Hp6h:Z2)7PBSMRh$o9GTeUao*a[9^o&5,3RJan)*B4O9gtn$1Y.LI>/fbPG&WqW,=OLK:"M]SLUk/1Xqn),Yk]F!YUh(!Gqf\%JnTqOM4ld,dc#BI4e0PcS;ccK0bPV`U4`AIW_QAeCHujHbjn/F0tqcX7NN7o#gj.rpn^js6A6IBR2Ce&$C,oNBt)931CIaeUH-@?-s2ieo+(j#iV&X^%TfXiR,)P2oc6hrB?B2o$lt6Bi7:Zl!"nu0;`-%*"r$\h9AL/k4Wd3YV4l)@9Oa"/p:0qUZS1H2*Pm_6Qu.OcU5IhG7'&l(')"hApX>b6D9&=aDtd7qS'Y[u!6'H10#r14L1_:<4[CYfY=7*9N@XFNH*@]"I\+lcJP.=7a_)a2tqeDY]W^hg0"YIBjTuLadg!b\uT>mtY6[XY`oS0%'Dhm[V%^j?5,VSB&`iV+1(BR;ZUJIDtn9q#U1b>7G9sD5FA?:i3&2[$A)JA5U)V6.*>YR,/(F9HH'o'EnugjAKQbII5![k-Qo)h)97rVW2c7F)D0AL6Zt5C5<'T$']G2U8Zi*tb"VrWc%rj0"QSls-?MA`_3?T1n`pT3O18'h_bBQBE]8*@:$AJ+_,3ns5Ms:mTYp2LVdk&FK3`b@E-/a"g*0ST@?_Q5gN_B?XUDI??NT^Lf(L%cipgPcSWR.LXKeRlP?RSBCs0F="\nq+lI(3En,Fam?(;Uob:,fc->)kLmti2`iJuRp12CjTV.>P-W2TRHJh?MWOMr?dG%PW+9s)1XFfVI[#&`XA@iS[oKj\D3aEDZXPquAeFjSm2U7OeL\*-V(91]^W;JM;fYNA&Z[aJ418mD7a[aJ3l0;Ye*[$A('BWK>18m?![D=qu(8m;>2PdVJkK!m^]iSlWW'jk.Y-iT?;!W6T.RNjF*4s0P^F]iB5oqBEE0ZBQmae#+17frjM&>b[T>ba)jZAC%.TEhE8X,?p:!jN]d`dY#(VTC\\gO_rE;p^JNj[N$l5U1@Y@2N,YK5-fP,J9_@j>FALRP`e82jBS$mpd7b^Vb+5o)GH.QAci*f['ET[rR=%5O/+01e2fQo/X2KlX)*oY.PVKe"'u+Moar>8a2k@SJP-5dHmKQRX/#Ks$`mdAKYWoSEFs2an)+[Rp5GUanfO4k9*>bjq>sEp6E=RAB8iGYfr1j/^:Ph29a3UII\C&q5kXDg#Tf!F"57SjgPjmfjjhn7fQ[brtAsMSiHfA,U:PM+m&\)Ym,=mk%8?M8f7(#/0QjH!%@rn>I9,21V6'_a>7G;I.qu&ddoP1;5IAt7dT5'/+LK[\[^oAng9OrZm-EWN[VHV^q_R3pX1GY1[u%ii]rb=eALhWJYH$ohg?mVLYHQp-bHq4^B90Y'\"0XkG#h@j8%BO@BRe,Dp]9%i3S-M:hBMga4fDom*$B)UUogeqXgUZ&Br_?0XU^W)dT-@AXbO45Q*f)MBIdqB+LK[mdT5'/+LK[\[^o@d$Mjn8h`5V_453ddF5q,@j'u9Go>aB3Op=X0$@9H/jX0`P=NS?BpY4@'WMeaumbRhoXf(/Zp3bapg!X]OgcR(gqQ$X!)>&-#L%OG(7*8$#R(%g?ML96X+7T!,XThXfeJ%G/s#HG;l4t[RFC@l=su_D$?T7L:#K-J'79KHMuZIfB/LABN8+Dr`raY:%V1`REr($b>GE`T"OQA^C*\A%SY'Q1[/M73(/1?&,m(!/EjE%;Dl:51e4`LItcVelE$L+"c43!3K596+^(;mb):[K6F/VJ*"RD$9n>9[Qm.g'Rf[R%g^;ZkWQ@0L]1TBe'/`@#DB2dT->J^_CWCUoaUsJ192e86Z)p!)p8TOL>2j!2aG1+`.A_!)1d@6eVkI!19L_L9qZq!&-iG%;@S!.ZNPC.MP0!!#s)eW@3@!!&m0X!)<`!!#^?<^YRJ!!&C\XbO1t!!"]A>7G9s!!$Da[MmRp!!'eKD)J,k!!%Nug1j/_!<<*u[+18H!WW4tBWE:n"TSNrd8iWg$31'nU900W'`\4f79^48.f]QWMRFGO6+^(;mb):[K6F/VJ*"RD$9n>9[Qm.g'Rf[R%g^;ZkWQ@0L]1TBe'/`@#DB2dT->J^_CWCUoaUsJ192e86Z)p!)p8TOL>2j!2aG1+`.A_!)1d@6eVkI!19L_L9qZq!&-iG%;@S!.ZNPC.MP0!!#s)eW@3@!!&m0X!)<`!!#^?<^YRJ!!&C\XbO1t!!"]A>7G9s!!$Da[MmRp!!'eKD)J,k!!%Nug1j/_!<<*u[+18H!WW4tBWE:n"TSNrd8iWg$31'nU900W'`\4f79^48.f]QWMRFGO6+^(;mb):[K6F/VJ*"RD$9n>9[Qm.g'Rf[R%g^;ZkWQ@0L]1TBe'/`@#DB2dT->J^_CWCUoaUsJ192e86Z)p!)p8TOL>2j!2aG1+`.A_!)1d@6eVkI!19L_L9qZq!&-iG%;@S!.ZNPC.MP0!!#s)eW@3@!!&m0X!)<`!!#^?<^YRJ!!&C\XbO1t!!"]A>7G9s!!$Da[MmRp!!'eKD)J,k!!%Nug1j/_!<<*u[+18H!WW4tBWE:n"TSNrd8iWg$31'nU900W'`\4f79^48.f]QWMRFGO6+^(;mb):[K6F/VJ*"RD$9n>9[Qm.g'Rf[R%g^;ZkWQ@0L]1TBe'/`@#DB2dT->J^_CWCUoaUsJ192e86Z)p!)p8Tck3Y8R1#@IEU)&1A__;&D9L:,!!%!)4L_tsr22j!2aG1TqcG)e#,toj0m][?&#ch!.\Q,D=scH?b(.LgbQ7%[K6F/enM0.D$9n>9[Qm.8'k<2S2dp8[+293]QkBU>e[iZ!!(replgm,X\P0Tk:\ArPI>dPH!\%fr,'h^g'Rf[Y#a7K>6+^(qkpRihcBb`5#O:QX&J16/0f"SVT)nc^MOj,!<<+[M)U`*'m6M2J+;MR2JK4iQ04K8QFE3V7q+kjBe'/`\2n:RD$9n>m%:_TD6&$,2p1=,8'>L]Fab3@c^nI_\Jf,+SmTK?!!(sP4*Tg'A!=@DF^$ek^Fnt+8WUe\ng)&GXgAfC!*j*BQ*p_o!;92m?.i9A9>4X+S)k%>T8U,Z!!$K.Xe&[%<*ike?'67cOlT)c,mg?KZkWQ@>TL2:[K6F/p.nm%gZh3&%>Ouu=?BIdp'!!$(ICR\^T_j0shYq!*n?+>Fi9CIMqVPpt(l&`#J/K`XBq[jf\0jP4V;(,Yo%(8XMo*[K6F/N\t[MXT/?OrR4eK[ai?;\pUu7[="iVs7BAFj6f]jI2UqSoZ/d_S:>JqVpF3!W,^hpO-akDq$37+nsj,*L1(pR@2N(^G[ME`T"DLkmp:H'2Q,_ItH:AJg/1(kuH9=3Jrkg<))X__;M:0T>skCU^De.6f9UQS[_.jW!;Gb2])brae4kg$`(`'5kI0):q%C%El9\VI,90h=S]u>kb>3C>?L]-U$dTL1(pR@2O`-*;=IO1LIbQ)fBup14Jo92_6RA+?BSnWR!p6k2Ynt-mm+=%g;&]oo`7a`M9Ouu=?,[hHR35`niA]aql/_@h4&cnh%uZN5U*pErK],hlWDE.-qq/PY]FfPADjQi!#+-P;S?S;@]npcqX^&M+s=$@#YL/!K[#j"msd<'QTHj?NbiacMTq!OfuC#BlEA>&UJ>O5_LKQ-VZW;tBsMfe))7s&8JqPi"%L.0!SY_nQEBL9EMi?6eB3iVWd>/!K[#j"msd<'QTHj?NbiacM/lgZ&,54%idl.prn3D1HJCrdgW:Xk*0db"!@^/+RD0&!T^545k"t(FWpWh,gm!-V6em*&$G4^pZ6&_!]ZP6eVka1:I:m`VBa^T=3J#8n@TfZ2-=\5Amdm*basH!!&%]5/ZjF'`D48ISnY`J'e$+D$9n>CdM@.doHGK^a?G=L/oqGlIiR:Is!sV!!&%]:$2AeRsI=?l\hc$Tre:pJ/-dQ6eVkI!*Gqsp8i2s-N,fumr/7,?l/0NWkV,"CqFqPNj\uhJ8:IZ3^DC+!!'0)g1khJZ82L]JE(G"c#Kl +endstream +endobj +19 0 obj +<< /Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595 842 ] +/Resources 3 0 R +/Contents 17 0 R +>> +endobj +20 0 obj +<< /Length 2198 /Filter [ /ASCII85Decode /FlateDecode ] + >> +stream +GasaqhfG8H&:X@\_=XSG9W[ehd"fgj9p=gIYEtaRg>#s$!?9]8"iPs3a7n3C!YS[FSbd5f;0d'6X&fLnX%Ee>?1ogDN@;Y!oIRLjlG,)h\r6Xsc]/?G^GPFo+%r"Q:)ED\CGolLT+1i\U@q\:mF1k,i`haAugA_2%pSi,6.mEj*qn$+WhH^@e$mR@T1Y^X-S?@pJVB=HT`-u)G$L@/E`?VG:.4>U.dn[2<^F/lcabhQRU[?/GRL/D3tm0$fi%kA-ZeX=!f0?[So.O>OdD@rf=bF(7lM^TYlQ9p49-7V$M*6*6)YJ80Mqj=45P>EV?-Ds^ikuPj`[?mK1M`thNI#>0[/0:Xe#92;#oM(Mc^th\lM$amTdLXW]ofBTL.Y;Y0*N")*6"8>7MiXcodIcWSC/"#QK(7?Zio:>-oAE8Lq%S/KsSjun^j]+h(&hK_X"'ALYpqI%ioR]Y27[>Rc/:U&!3#%,-FVI+2]OD`l4))$htGM\sL&_KR/X11#ITb,lG-r(1ag[oRu5[m8aIX=6S=*QI]WV(UJCZS:9p(YKo)3L!%=-![L7GP^QLd`2"fs[4fT+S@?V([UL;kQQ+8C`bE[if^&TR.L_o*D_ieUA3T7hhm1mPcs&g*]Anq?)$atk2C3bhZ-O1U9+N!@=#$P]?cE2q(K3!DiSXE*`SiN#-c:^9J3_P8_p&!%Hp,GI(6]76CN]5eThtj8F]i%hqNNnBOO]*!]1b=.R;6G5q?i^*6:mWlLXFj%G6U;rp,E<24U32X'!9HB^L)ujb_D%dCTgA$\4=s2uH$Ai-YV%1Jp;clc)odmuE;Hk`=%U,pfHOT["LXiS*jIGYM?u:$JOVn.Da_$KVWVr2^q7X'ok5HuT'%f1firJ[a@j6!e$0di+m5r^ZtjF),9G!f=UFo.kk64-0\0oGi+3=b<$YTq/*J&/0^ufT1L6'&a)__(-Y.-u`f'6j+D$Si7@fZ;CE.pe,,ER=-n352T[^'(oMI[]dEjiEq([07;I=B9$)qjPMS;\Be"H9.&rh/`KOt/W@8bT"&`Ole039iU]-L_2T29oL/=L-HG8QI)USGm(/2O.[0A(?TJa5c3I%0"@3UoDuR8fG(UG2sVL#:K'P1FT*"LuMW9D2!hGl?WG0Gs).U&1OA\;K#,>5m;T[8H;5p5BA0m2)*8N(]fp)U(@,P0\GaC#o@JBPVLDUl;Ae8QrT]=(AJ"Oi<>QPcmkP;o:K@moW:jNb,8SpL]FLT8?:b$CqmcORcE2htdF"WjCr:Y42&fHo?Feq6M+fRi/\9'tme?-4,#aG'r`:j9XI6YK0*H_C(=cR)tFX1)-=HGEH-DbQ!(LN_DrLa(H'?V3\XR\!>ZC"pep/c2ljf.T);NjMk]EZC.mOakk+B=NXMg^:_XgTfZ^lA"l +endstream +endobj +21 0 obj +<> +stream +Gb"-6l&Si`rr)j5I/eifUX+S]"!?;'-6sjk`0fi9W'/2gU7q!fbH`\BZ7O2)Y-3T6F5/Adl@-/mbH`\BZ7P>rlEs=Z7O2)/Bb?#8n;iTQbAYq=dEW%Q=X3aaPNprO\Jig/m^;_=/iojc.a4;#g*D6K!M,0AQcoEC!fc/aKho%7@nu[C\UQSo3CR%nP;53K0[VQr_#1h782::F^+Q?Q=Z>Hf/Aq+%@''U=Ouu.]iA4g>?R7lnLr6l/&+ODmj7*nu]B]u$=g6:L1"3]QDZ7O2)/Bb?#8n;iTQbAYq=dEW%Q=X3aaPNqu.bS+H?U++:O_b1"dZQ3%`am8b#W``C,j93oTqI$(#;"%:*r8Sfe2=N_lZSER+3PS2ihE!eGV8?neE>h`G(9dJQ@UB7[Xpu$eq7S1Or[ZuGL0`!5*8Zo_r6d'#`"#Ak"*Am*^ScrSOjf>t8!gI7]`/8NmqMfp`5\Zk6pT8S3Q!?))E#+>hO$5s@WO%N*3]p69rA_e'kg;^G"Tp"R\b8Rgp\$EKK/?9l`g;^G"Tp"R\b8Rgp[jip,i]=htW0W=ULZCrAq(#&qe=Id@Db\U@THAd"$i246X.V*tb8MGu68[1LZ7P"3UOWbQ$b>rsKlnBeFY2WZKC;Q3%G0Z=%Zp%P6G!"\Z9>_#3I%Ycp.n(=b6oAQ;m;,d=L6%i/7.^nPS;L1DeWAC`^Mk^X0,J/&7s7i#,_K>lADYcK;`Q<%S5U9+anCC4HHFi(HL'NeU]%P4[&K*Bd/0P=T*/?VQsjjeX\\>CX3C,1;Qm"25gGdf.+QDq-CDqAmog*&8'sAV+[jE?qGJJ/?V_q<94-non?UK?r9pF6?U!i<=+&)YcM:MKKM3TYdq:Hk'@Yuj+%V!*!6-0%C2WR(W_+qeHlVaZ[c!KK!$!!Rh\pPY]B=qY^B(nTrKi@\foFf^ne!-*kW@u`TD@rR(IXM\e2SR>n<7PUqktA%:E=]"tZcg$ma/N'f?G.l./>.U8eMNY=aF9>70;j/PUb@Q;sj!_Whh;\`Ff=SX7k`JgFW"$!Whuj37@1&#]utk,eMIgknPd5r1iS6Gl+t1UJ+)m&c$:A'4lnciJ'VJDlD\.7GHRjHD@Io_'5R2DHgGiS#@W,grFk[&ce!ehg*H3t@r8Sa7hTF\i:qTe=RoMB1>gW#6s"j4@0]T4_i1Ff2J`kTAJ`kWDJ/?coJ`jd=JJZpL^u)jc#@:Ze"J/nc!ACUV#;s1AsAD*p?m?%'TQ9n;j,F'U/:o6aWq\s^:+&PUr@"ja;H"e*47)pWuu)tJML?J&'b9'5q*#ocVdX?R^BS6gYAE'OYM^tUR$MsJ\9X?-mj^@!9AgUbklL!S(s^O:PLN;<>Ui;I"$&q21j^jBX+k`$+%4U:uVhCmfZ+9)Nlc1h]pq"$N8m]R(MKmrO_C%1YQ1Z5%q%H,_&B>LV8VnqZc%H,'heq!d+G8SP+;[)%XV&m9RHPW^:=qB3N89jHe#/Fu$\G[EBpm23Sp6ILBr+d5OGA1n#i`C5R4re!npl3>7F!sl#lu?YrRW44li5.ju3pFT(NS\[cT-.npV7>^?-D[mXsE4M]Wo?dloko?MN_QSH.-iSd!HB4TV/Qpc+YP[N8-qP5`pXV#13-eFpk;m%,DVnpht:4Qt@8glUIg/A;"fCrhCks3>-,K4Id59>b<2a:pUf9oQ$5*Z[+/'_tWX?@"^9mIEMGC:L!q-=o_pb!M!#-WI,P43l#bkNe482ANj0k'ah%e/i^[:%.H>JTPDS%st)>JZg_cQmmf)U/!U%%."L3ACL1*16Cd(6$Ioc[j\+B#'AoS%tOg$2=C8%JVo=hf@lbgUREEeq7Rfp4S0S(1q5E`bo^+N%kFNhTF]t(isJ$De3iuD`-UbTeY[f`SSboar#28@;f^q2$i'=,NsLds6qamfuUpkbWhcujF:6_M5q.7X?$J*TD'@nq"-)pdA\dMM:5c3';k^94>QjM0^@W]i:2#O-G3Of*a=%T@F]'Gl.m!ZX,\'-bg>q5WY8e"WcJKI:P-?a3X21'q`"$CR7grbnMB+HIHSD9Di]Mm::5_rn(*$nRneSPhYA&5q>)etSSJ=3O.QSk\(?7Rh=.KI-h`D8oXf;IJ*a\u?s)9W9Ao/Q5qW!bGCX)o@Z=6_iRC.U,%YM66G(;#[m/dsa=Vo[U##R1JSudqe9cMsF,h5r&<6*q[i,IAgT/@7)f2>1)E`_9_BFu6X[;.Cr*VN.]bjQMHYc]_]n5_2Pif"Y\/N+1tZR#?Gd>'n!7G%+oYQ$`;/J$CnYI'g/tb#Oq!`md\"ANRGWXRbBAIDbBAGd]O(c:Xk/u]#8/_UEsHhMmWf[:dJf#BOkFNL\=ANR`(V,\XfodXVabk^U7#X,HRjFn@uM9Tm&fWVN%qdSp/^lf"4?3Qr[hW/aY4`W15LE"H#(c6s02nn0RGagIr6j*2"t3n[_;e3@u8ld)RSQ5i-];FR/bGZ@.`eki;U7npV!gFY_`2>mLJS@`g@nnR>Al,q#rl7B2?D"SUk'Sm$o)(gqVHm=5I0eC==3]_:LVtD[rSZV!3@6CGtP]A#@HOI%oFQi?."@ZN]jWNoT&[\NbX]q\??s?j!q!r^gMcVq]#:Qfip@c#$kCcb%$@qK$'<4(!S./(];'g\65d936`P:]:GQj9hQgmK@cOjgQAiFp3hP?m6FBm6`R>_&cFCkNCA"G4h[+:tQEunkihS\TpcD*Rn?-^TIt-8,Do4?c"!>/K@P_5J^sJ@hD#$]KC@.c*=a`[kbtY4P3lk>8^pg-1%c#XmE0Er&-COgpYj>fio>(DC+YOm&^K@>8;a'KoQE.qhJC--GHhggct7/0R?JGGl3Qi6%*5fBPttD6;'*ohg-?N[pK>tRh-f$N?bt0jdpV\n>"-p1=\TcXKYR%'[m#po%Z_Rgi&^mVYBN1IQogbIasE6lu`_5O?6^cbIG#Q,QfA)L$gp%Cc2Sgj,[];Me3c[C0P4>c4KnA%7P"aM33u@r;J:XmE1VXbQa31re>EfN[$5).ROfm&fWV#/aZQ#P"u:2[7e9eHYQ%Lm)1P#0+sG$gqB++,kX0C[f-h\_t:QF21/lk(.O$k(9kek(?NlcN=^'h#YO?XT`4sm/^_[m07(WW!/rU0kR@%o>[pSN.,8\+Na65]PZTP$*Sp[q=@t0*=kgEGKVnEO/9j\k7(u.:AK>;g?dh>2Fs!Wu!Fn`3aJE^j1JVWB(!VcP6*OpImLLAX(&&:?WhZn@$>93K(8;rqeE5[u@i%O]1K;Ur6"3&L5eprp6CB3CRR[.peoM5K@n@f]'"sYM1$)Rs@)RM'ZP9=$>RM"6e)AZKnRMpN'HRiUMc&99#]p1>7QGDA"hTF]t(h8:;HRjFnA'?NU]p6:]Fn&KA5t?NM#&Ocpr*LrS^J9(SU'"fYJpi2R0R!F:^lReF3.G";2rIhK(*3IN(EEi&!"UX7#KA;g(q]9&i3s'G+,Jut5R6W\[mn/*Ra(rW"OpT?J]1-qrJQ\dd0oZ##8cc!R(Eei1d>F(K)OVYq$4a'"h!:)"hVS&q>7tkY2[#1[r;ips2Htd:k2L+k_8oMfQk45Si(]-DrAG8q\&&["lnaq-G6TF@GWX+@$b*aL3`R^M]8N7>dtT/HXdk:B]1!dDVblmi;?b4G/=02iS)Hbk^Wcqed-MY4l:Sj*4'TK(jg+RH&ZeOp40CUpB"+PA%UmLDFQe\4rF=RQf&JHC4H$%lX,2>SpqPMR.i`\2.[(25P(q/f=skDnJ-m@:g5k1M\KX4ej?4<],,0ao6,0m^hd^_qLCb\^b[lSUhn;%6-pm]$8N[Xlh3(Rn6b:s;i?`m,^W$,aKDY478BADf;JVRk8#f^1t*-!Wp.#\IkmTR)D1NmpVd%iD8r4PUl]d9mC@HL$5DY>D2G%ST)62q4Z+7qi1XU!)Vm0O40/W@B.]p/[\TEF$P!U[#UXTg57"$3(W%V7nP.sidnX8^sDrOWpfciG06!R"khAT'FsE?*=+*H3D/g0<67>pjQ52X!ua01"Iu/R895W7kM^CA&\RgNO_D>PHWul932'0=;$M:$n'rI[i5T\TZHPC94[Ka2-3=^qq=7$Y=Ro#X@6Cr!O"#@E'68+Bf;E&UQ$T.gL/]#J>f-=ZKNs"7+J`T`W:ij^letWJ--:RJ:l_%''JB`88hL;ZB?Z=Z:>l$TL).QWIr;Pt500l-qm&B=elciJnG@*,a\&+Ih.s.;X"Ejn:*mFln7k*E.l_/cFE.8XJ6_s0D@!$2Mo+_Z&GWZZX=HRf=@XFMT/L;2-G%0I)d02%h)-_S/<]iAD@2CLS+)QZ43K%m,eYI>>lCer/5`TcaZ:g"_b3ifg63A.aK[N\c]"o>.[eiNR7?[m&&Pqp2#DF9C=fo%s]N@@n[3N/6Xf5k!@,5-?$d+>3m=q3%C]a/_UaY40ZTG?[P8Xb^2Osn3]sn3$/Mm5^U/X7gk6U7ZY=pjJX&B$`o,djhV_Q1j"EutnCjeq4,=UH-ji`bPP:CmQ*bOZj%PHJ(A6LO0B@V(Ke;BOD*,]ajSqEOhK3LsGdnN*"Q$gE5%WJ<,hV2h#WLKDUoV)2Y]WP.Y7D#3gVoJj>oVl8mUb`W=N?FifaC^nS\1&S;a^BbA5&2]d=K[CrUC@GHYYUT:,Ek&YZ(8E1>UnF7%-T%19dj)85'>"%Bu;)"=E5'4JkW$j+e&Pprn:+fH:c.'[mN?O!SL-rTi`)nNW.`_HHUtU:s^M%-(fID3Y%]G;E`t9>ja>o/(%'fjlYN42XYiN\oh'n4Hi?-V4'Yh67]C6:\N=ZK$:)2JA%5]Pqg9,p/^lfp/Ze^d,&LSG01m3/@gW(X]!iD93cfoHRjFn@uRB$HRjFnH`OsjBQ#a:46;M*QJ=n%6mC>E'TBrVF6>RGH7:sKCWQIKdE*38=G"u&PgEuq.+.8XouUEB!T:La$(X]WB[2`;]GH3E:IdK+9*^f^=li,o=Xl`=)X5gK;,Y,>ehR:(mZ6'9X\Od\%>O=TBXA#]hLI8i,RK;KiHJWS.cORUe.WF86VRmANj#Pi`_S1iq(/LS#GAF_;pQ-Ou1Q;.Y<#Ql99:$>ppE`q)QCC`RqCJNf?4q,keT`q7`$/%Wqi*OA'G/406nGlu6%,1*q0:J?XTXgm.1hLbNg][H49"t(`-[@A;cK>h9H1T8aTLltJAHl94F=&(H:`EHdA\$[>%"pCfPtH[p68Q]9oll7r9KJNr*?H"kp/^lf2m^oA%0I(RUN%4WN-2<+?AF()`k5;RPg3V5%[aY;-()=>*ADifgL*cap1!-c+f0"?.V6ngK`B>D"69e@+=pR)*]L3/h:EU^S:rK/X9He_!37j(D)ad]#5ZjRMr"NGHi[c0fEJ7WdGE-<,qB#:l+i!I&X*!uKkbfj!-6%BJ%)N=7fE(Wd0NJA^>@\Q&ac>7Gs+@rF4AfNSe'p/^lfIDOd_hTF\iO96!m7C!"Vi,H2)DUj:2lFe`/;p!8IYpW#Qnq]JbETK[Q3SBYC@`?AE>p7C?1_/"fLUeb&q]Q_6;(hdTs"O7c8JotF;"=e-;"8S1,dh!%mj-Lo1=c7>R&($f#@jj).:&m8"C;P`qKePOZA,DBIl<;OrmOnQ?hdK*N)FFs*#'3a-DJb/8q'=q)R.A#CF)&1dc5d;jQ1:LMu$jphfH_X]\E-gJ0!gm=kD6gDnlZs:,j"6R_7FT>`LCKI9R;eWcGR(;RGBJ4[CPR"qRU=tbKe&NQC,.c5[U'\X2BF\5O7LJ>mQcrOG)TppF6_M58.#MEo:OA%*nA3Tq`$]o;='^0Zd.I"?q@T&\9&Ms`u/T%.kg.?UGA#";;FPWtQ'[Cn&hF,=Sn,,UNClNBq'H?uJ-,:enj`1I&,B0mm`JO-%APb-B,]VIkL%^1/2[OfN'tVCh2pL`\@,\DV+I-^Hr4md'>2A&XhTF]thTF]tgqMEFfj!-6fj!-6fj!-6fj!-6fj!-6))H6uXmE1VXmE1VXmE1VX_q$Tn!%ltagW>?6,fI?#&hKZ<_]P%i"Dco,S":i>S/]i1PeUbU8Kf(mB!3U$B8"0EhlX0EEJik6'7&h[7<\cjRc&J/j=lD]R0l^1A=g-gE^H6/m\!*..L?nE0V%%XmE14YFk3am&bU"PWlL0AIVGg>M366>M34dZ+%$JZFB,&m&fWVm&fWV/;pgCZF@-KZF@DSDe3iuDq/3#:N)N*DTP[,'AX\IZJGt85H#`]H!'8L6"fL&5ifuc9M252J-5at&6n23`J^B@Le5h7,fX9A'k`]&ef_t@@rfslGJhMgP`DE&Q<(d\4FLZMO0GXc&*'UP@T>o$kob7+LdrS<\80SBd!hYjN4`p?.(#KLq*GHKhf]%]o$-+P`Ck_f-50cPAo;L("YHinJ;_O-QS*itM\cAs6>=!W!S4FN$5=F/SH7tk!IXG17aTk<)4\I/^jtSO2I3#Q)&-$('-<_>(uPR4q\0AhJ.7c=B0e`=$nbfK!/9Q9^c8<8().+XTWRTJ6Kl5n(GC@%QLd7I%l,9>WU3"Wcq>u$)kj&D/qR':"f-58KPV-;(ipo=pSYC+GC\6P(BQaHR>&(n>Qh1rD;`4'6X]bsc\'g?(I7L8r1W@9/p.5=$:dbTq0'QnjA9J1Nn).H1q;1X)/t8<[Trka]t(N[0W?Q6.%G2X:"^LGJ)LI=F2UVrG2XW)Ir2[T2;/,e,M!VY<[2GTCUn[)XS_R8:pSt.]JC(J5j*dGeq<+CQ\!F-`D1-^&4iZ4%]p"%*gc\"5\t3Q=_g[j9T_pnmudd]mg6K2WW]DHJoKMC%"a*E!7dr\e:fZGu/mDiGYsT>BS-Gb21:tb.:;YDe3iuDe3iuDe3iuD`(qU>M366>M34`QG&QsQ+`HrQ+`HrQ+b_`FZmE<-I>\dJp;rC8!>egk_UGTcoV"G\@!*\TM:JCkYFQr?2^`sr'q%tgWhup``U:QgYh)Q,'2?4kD6`8.b=aS/=AgD\GMkE_7Hha"`Gqq$6FZg0ehRka2+B;N!.=*^'iS\:&4B'h:rK(h=(kUY[do^Geuj&iNYt)p#5-]NR0',5Z>B7cs(LBFt2AVRL1'c__7:i!$^7TODbA`\MfO`^&[R@3=7Tc"n1T=f4KRUX1*_%6Spfd.C9/b`hBtBi1>;a"#'WMCQj!;GF\;^sgbd2UI[ad'6aoZtu\D+l1DR_F:]sX,Wdj>P6d@Zhflh^tF)?i*B0l*QiI;]Bp*!s@6o$]%ksF(+rbn(+iho\2O?<^]"];A^1rT\POapF4p-GJD4pcahJiU#e6[uqXcRO_88WkhVm,Wj'^9o`IMSQ?bQS\*V@`LCB+`RJ43.VoMM8FKkGOoHn@7(Q8U"BZ<"^<%cF36:5o%[e7YD%%PZhOEt*ZMfXc2E=;o-,-Nk1!j#Y[?B4Kp8-&6*VS.!cuAl-cW'u9?=.lc,4!pU\n_6Kl'hDjAZE%7+XGDs$>S7p,uAad>DhPQP/FSo2UL0#LFB'bXEH4XaD-HReb8&31n;Wkmd`]Q63eS*dg273RU_6J_738Kf(]_5juZ@H$HV\,]>l,F_$Q(D^6JPgXK$b0>UpA?4Er.N,+ag3Fh9ueJ+Rp*VtL'%/6o5?lKi$/oOM>AR7qOD58"rn8(UT#.#)sitF)d,j9PVY$HgVg^cDCs,<)^Yls*>]5rF7^pj3Ed;j,b:*VBH&o?bc"l%%_kC=n)0Prr]dNjp41kXoM3T2?R7q$iP5:+n3G"l/7%uq(LC1\H^DbSSHB"idK4A#:CDt!B(W`>-)u/L\l[5j7=q=#J/R%p@ep*H$de^;!*eu,h)XTEjDY^gi;L_i+,1bS8-7M*oR8XC%`JR_'bk)$1>@ecf!lp(;M67Z%`<.hLh_(@/P[J_9$b4^mU06`b%6a=9-hLp+lEBk#]?)5(5C!:,ZY!KLnsj"%Q,fhUHJHrYR24EtpZu.Y&,+mK":QAU6%(4!hS1b]QFE/qVbLhZ^u;*+[L5hdEq&ZF@-KZF;Tu1\OlCK(pcfk"2J?!'b[qbI<"$.LhtsEXMU9J,Thc,lUllPbA$Z0o;=_Xn"boe\;>P)>$jhIY3&(,+iqd#fFTAAp_@@M'oh/^]VF9_rDKdm:X^[t5H9=qL-LIY42:*Y%+kcJJ5iLh@_9iXS.!Yr-b@*/>L??N`+0MP/ck9R7t?7gA@@[B/[F[9]u\RLAa,m);J*3-+L^%NINn#7"&f'$`ndJjZG6i.K@j"cl?G!le$+$kAn)Jbqo$"=?lm)N8t*&TFg8"7@6m*_^g+$E1#O!%tkJcD1Km["hCh^u>,@3)lLPAL\cSOI+1&@60k_fhlq]fL="(qu!nX@4YUKLo+YM_DaRNn%dYLqE'U>lha,?hT'V+*e873,oFII2KoI8^k4#[JNH>[!f'S7^qnLEJJOri-YEeEnEGU*XpsI/C*7mA3l>f&#HtQ)2%J,K_;R2'>sQ7<4d/GsPm4>fprAs/s.-b9Ctr2%`f?YsfQ9VY2h@sSrtB@6]PQ-=i9*7G@+(;&^^Dg/$GQG3$F'/tof9h8Hg#Pih"Bh8^dAb^K5W[J%">/S'oX(r&b*LoHn#;s^@2c&0^3:j\Eh^:#lQ(DZ4>p4Vph;L^Qnd!S`Il7&(cG$f-Z\s'^(eY4GZZ[#>V/3*@'tV%mMrU9R-JLYiM?4i5h;p(if:ui3g*'_:XMiJ.X"rJO?@+i5M&^%3Cr01mkn""k[26!6.g%":h&A!b957"s0B.1gi6_4d,nB5Q;Ak^?QM"GC90Z'0(*6&PRFs.X5XDj++U!"*,1=1jJ1hpOI9O]k:i\IG!BQca8;W9ATj:/t^WfphuUBS\:<%Q+`HrQ+`H*43QL'hTF]thTF]thTF]Thm0_s\$EKK\$@R-hTF]thTF]thTF]thQ#JET&(smJ[t3XlM40J/cuee#YG>uK!JsPF;$IZckUmff)j5TAO'>o-9-F'REilBBQd/X%<2,MD,NC^kKFbQi%^668mLHSI[3]FR>DefUSBmMAsdcJb>P)$.O\XYGJOY'Pd"Y@jS?oL"bQN_]9P&45_=%)rjqp&[hY`%!We5esUlop^9[Du0Qcg`jEFef'9H1W=hn$+_%F$'\bVh`@*O(H/a'03k6p7B?X?$/klL$h-m:H4I=]KfA!QNb%M2a?'t\@X5WC'*'^%]oPF1Y?h$%<`dG,Y/M/O(H/1j10gf.Br\o)Urq1]:3*H1OuCpP1`%,FfC%h9n9@WlY%4'4';QqNi#(Hl&MVSfPs#o1(RLMSOZS.@*e?oq"7H.fQB$Ep/i!\H*fXT_!\B$oCqT2Q3T43]F,W6Bi+@s8:&hCb21:tMV).d>FF4WHRjFnHRjFnHRjFnHRjFnH`M0%ZaVDnDe2TgfN[$5fj!-6fj!-6finnYDjAtFEh;Lk.JYdHiUN20\#MN0"tX#j*%Y:%_AHcV.1;Ih/6_`o=SC<5Se/N9&fb'H@#T>#!A&FF#XiSJs+=agCL3udeD@EVJHW2VpZ]Qab+^T[t/B$)o1#lR=l-^Uo[f3[M?ts)^]^1$*`u)&!K[03ATf8=E>a,3!W&R6g7+h4^eeX#?-+C9p$d,rCA0+J]c><-(eSkSBJBnD20(HejDI%rD4Q>4scQEPK4:e\ZVM5Y*WD]:?d$cBJ5]&/(@^:=JcIP*rtEd=g?$WbL3GP,]#K*!^@c$q"3=cJ:H.D`*4PRn3ueq!Id5$"i^(/=eF>jBDCI^3=IeJGkDdJ.=OY!oAl[giX!laq[0"T9.5TpE24-Vm=R?C>Toue"2brC4AD!]_=88ZM.%2Cu3d-8ET.#omnkQ,u6iai9;)nMohGT!oh$jI9GbcmPoK+aXCC?bSVtC?XiDW3*<;APEu^M1mbcS;h+t(uBafsI*s"%PUe_UE5Hu8ii&2mU$BUAME"a_bHX5UVU)86.K(WQOsE&\!5)=KP3.sidn.sidn.sidn.sidnX'7Ghs5H#2!tL*:2rbokDe3iuDe3iuDe3iuDe3j0h7Zh1KBr9mEd9s_RrR*L$/)DClO,X,@%ZFfhr4$l^"k<7kY!B1gs"H-!67$4A+D)B8&LZ&liKE&r!H&bQU@g:Wu0b#n!-U)_U_un<`T"0VAAC[Q'JC;Wt/;.IE`8+ESIXLY((Z%s%j^ac9K;HQ7PF7Z'4Eh&oX0HYK/_JS'%c.%^ZP38@FV"8HlX2[)9F;L6!0b16DK#3gb9qWe#BW39*%k9*ci`!+fj!-6fj!-6fj!-6finVPT()GS%d8EQ3.(h^>M366>M366>M366>M36:]\Y,8-7GM4!nK&t8b\l#'N;=E3Isa\;*^-$J.CdnPm#UKntloa$/00cMd8osSCOZ!O'HBf%9KF,Og61%S*://2P&-GY1<`09q^E\C`Kl'+EH$d+E]d&;Xb1Iu0MJ9QlS.fD^FR7pCoUl'A?[Mc:Y;n7REc!k]/ruOu?dLQLp^IS.$>inS,l)``_Wog6/5'OlNQ-Qf@6D&:f<@H\[b22DqYsS.b%d8G\,bVhNWU-bRXa71N]p69r^""4JhTF]thTF]t!?LZQ%VTc\.XN[mX59mlDe3iuDtV/V\$EI]*o>&F/Bb=MbHe3X-%5Z!De3iu=dEW%Q=X3"?Y+.eDe3(;AQb=1=k:B"De3iu=dEW%Q=X4M^h%FqDe3(;AQb=1=k:B"De3iu=dEW%Q=X4M^h%FqDe3(;AQb=1=k:B"De3iu=dEW%Q=X4M^h%FqDe3(;AQb=1=k:B"Dfm)6'a(bPdm6@Rjd'I\Q=X3bAIVJ(TTV1I]p69rAQb=1=dEW%I?V@0]p3/3Q=X3bAQ],%^"&,5<`u(Ih\c!(bH`\BZ7O2)DDo0HoUheA5p\/!hTF]tZ7O2)/Bb?#R-^sAXXqZ$/Bb=Mb8RnWX_tAPb3-)R'pK6gOW/SBQ=X3bAQb=1%>lbAd6u>cH,#WXQ"=*aAQb=1=V]*9WiYQh/Bb=MbH`\BlBCS:b3B1YK0Ae)`Z'3"Q=X3bAQb=1%BeE:h@.QiF26YThTE,TbH`\BZE+CEDcJ96/'G4LbH`\BZMGqqX&<4fDcP5Q^$8'nWF]4uAQb=1=bEG!61e47DfsUeb-ESAZ7O2)X?Oe`WiYQh/Bb=MbH`\BlBCS:b0&S`Z7O2)/Bb?#50;Z]XR*&?bH`\BZ7O2aPO,Eob21:H/Bb=MbHe35akj&!m&_h^Z7O2)/Bd=Bm&eFQhTE,TbH`\BZE-73hQ![DXXqZ$/Bb=MbNb;XXiefCb-ESAZ7O2)X?Ob_WiYQh/Bb=MbH`\BlBCS:b0&S`Z7O2)/Bb?#50;Z]XR*&?bH`\BZ7O2aPO,Eob21:H/Bb=MbHe35akj&!m&_h^Z7O2)/Bd=Bm&eFQhTE,TbH`\BZE-73hQ![DXXqZ$/Bb=MbNb;XXiefCb-ESAZ7O2)X?Ob_WiYQh/Bb=MbH`\BlBCS:b0&S`Z7O2)/Bb?#50;Z]XR*&?bH`\BZ7O2aPO,EoC1t9q4,*@l$u50f1-q@N5,]bU*Q1'6dN][@3CqJ*dmYH^;J-^hZh-fN6BEO.I@-E3'oC/`=Uf6)a?+P85!k:kljP&R8'S\_*YQAq_Wc/@ZfEO:[Q'J[=,Co1b!H*O_`RtFah&eG6.$)4iePIQh;gP%:2Va7Im\E/")AG]pJUQfHPSbc^i/(dPu&USIZrNTSd9?%,/cJ*,1_[/A]d[P>!7mV'$eHK/M/hg0nMts7C5Gk`NqgX^i'q:=8U5Wapk6WqP]QV,s@9.]I0TY(DNng*5k,9!0@9+-"aIaI7lc_'C'!Q-@nSB>4&H'AT-+6Dq3#^_:.eR>4&HYXmE0-95hcuKb\*#g4Pi>;ijaTbek]<^*8G66^(KW6!Ci@3=o.]k$p]G8&^LH1]iln(OCXYK_LM8R$MktUlk?B8ie8]R<^c`,C+NeP<"^%(8PSK5I%:16!F*(TS=R9Z$1X'd`B(BRDe7d0o5eIUch#6EZ&h':e)(\:'YdYAeHJ4%W%HMdd)Om&[hi,"gV:`:s?gIUu$DKP`;=\ZT:WIn+IkEl?e/jku\BQ*cd\bb=,\sPlA:;U>T%@"S?hA%LgKTr#L"]bMX.`*7H`J[j?pU--:2lFSBTWbT(4EQ86QdU=Z_>^_E!fORTW.40&C]s7f#cAoQ?/%U#+:FmE"T6B[Xi:0(RuXt^-L%)Eq+$Y@oLajOUnJtK(ce/8*t1X`lRF3DREJ68NiXN2?$`@FGr^rLBMnB"4fCU%k33h:[!h_:cs`\R4EqY1']'#[!]D_'BHs=)[*ZmW0=!6f@Us=p5.e3d7tUTeFPJ[hCZg,g?gmoI8iL'j,I$F"`178N%,Sf:/&l#8B9TL+G[3-rN)Rh\(>4-07?A##8=b$Z%S3YC:5MZf)O]3[94G&N[4==-9O\uI9JTCSgM,`i\fe[Oh@@2t.qo,-fbgN1ZrOMCR`,'lemfbLVl0JW5j8_Nkq'Z]N\@U.E]sfXJ=d)2jlgSAk2BiGn#6[*XuE^O&YHpOQp.MBFTh$JBi+7"N[T(I2RpK(@1jq!:&7%E:Zp"PS\"WQN3((lFW[Fr8El$fMUg(REqR`!X:H[\Fp^1`ok>8t>F!@f.N[:"lDhPJFd?@5]iCuDeaI'fAT)-uAT)-uAT)-uAT)-uV#ftcb$JK:FNWI_hPu@tXmE1VXmE0mg08^ChTF]thTF\)>OmVGmA@t6?M+SR6EGf6c`.?#4'1aC?__1qc6U!Y+];s]C*X=Ji,fn%8tHc#_.oOoh3t.%Fk4u$;pWnF\<8t:*fO>6`UOp.SV*Pq/I!1-DoErkkOgpGCa`'%)MasGeLBV?+,^rcXAmf)([4\MI+SE;:Nb$hOMRmuaMJAG:i`A5_JUlcc+>R*rqbpsDjaMWsgq#37CH9o?#M37$mmLmd-/d]2T)4(4hF4^%X\:a=FeZ!qNC3\m;G,5;L?YOnk:=A:(BC+g%HOeQ$ssDV87I>M366>M366>M366>M34\;J1?WGb.G:7P9J%\$EKK\'cO.WP+S1Q+`HrQ+`HrQ+b`@&.9KkDl&)>7p+=WO_0XO!0uT"7k4%04Mk6,,O8L&;Db[#iQm-$]u/'?1MRtgZV;_jMVYB8oa(#WaE(15R]i%LPi2!\-1>Kp"0('9=HW2M.95C\EQ@FLX%':hdC)F,.iUiDlC]hGO&Fs77?QTY,HJZBG..i_6Z+HCAVsAXHo'`*-j]AQAUh#[;\9emA"_U+8m/cggr8eO!IbBD%MbIEM>Wu]0M,e#CptijH;AV`MA=9eLa+6\h4@N!-E8bn&i_3$n[(!fuoge5Em1&<@2^2T^N6?R%2O1^FkA1`''0HX;E2\c6Eo[aum=XLXo\7QZY5#00(d\7$]$^CgY^NA0/-=CeUBLR>2`t1gm+C\d;HmLOH2Z+nD]s(8TuGUJmTjQR6/S>B^ZZBF/YSe_'hZ"C.L^D01UV,^O[*Yo4+Ukm@IaL\7.F@p(+lW*/e=@n-\*$4'k4u*aqA=2_m@d30[GVeW)S9mRKCf$h^&,ZSCQYUlr#FE<*F;'s[g7:$SiM`\Uq'c2bmM0O[u;nIlV[.:;Z5!c\(ego;-@8`"SoB;u/[,*:<[93_7o;JL[pe4OXc3[MrF*YQ4+d:P?&PLD8X(OjJHp5/bdkoBK$cC,f,L`?_KsG/KF`W:J`L*(eQLFIu(Q>G"W$m[=4\MDAOcdF(qPOep9)3r\Zr"2lpKJ)3p/\$L=j1]#<@W?rlQNqKH`KngX5@"/hTF]thTF]Te)&7(8k&lCfN[$5fj!-6?*Um(V)@VA3pj%u?WDG'HRjFnH`Kng.sica#s;[8AT.6shMR@kB''N;,HO#*5n8a1LgqtK:lRsE12AahD%d5So9`ho`G:N>+D2WN&K6b/F5oric9.gO`lJ>K1G7*b3f?Jmbe'?S,>r/dk2V2A,!U+^Ic:P%CUB4"E:[`$Re077-LD-!&WR"mKshJ-FrZ^uFF9&44N="IlQtl.NhV`cTgeM!VO,1JR\%JKjUi7H=blV#qq>D)7-a:%U0X6`mm1fDaMp&[V=p6NN*9l.J^HsF^+E'j!Fha=\og<_UTL5lb-'7fiG+I4-,!1s!'5RrR75KDl]S-.J@Zra%)CU`>:_N0\CT*?noR\SQV?p%Lbt[2:F4i!0,l?`V>cf.'j,ANTnK:Q$@0hAM-]--f&08I6B]A^9Dcm:aEkkr=Bo^*=X_tfBi#G/p)'7!9MYLMB@9]C27(6+7p:#]':!I6\QU9Q@2r-1W]8D(Kj]V:XV.-.lEopVd,+&f]iDQ.XmE1VXmE0mfN[$5fj!-6fj!-6fj",T]KghEX7fTMZF@-KZF@-K\mfShDe3iuD`&BgMBA(cj=5DDl`d(M`6=K7NpM9m76XtUVahM%W]n]!\r+sO;!dpK,3pk3Lam,D8B!D7ZF>ti\]J&-[3-Y&N6h4HTiN_G?!k;A+boX#5*7+3YZF@-K\m_nR\mfU./UK!pX!.+9RtB;9RYOJ(K.;_Z1VXE0-Kumj,LYru&a:t$Fh1sYTDThD]96puhU0cZX@c)d<>%\<3+8W>3`,#:%%4"J<5D'HAJOZddu+/bamB-()@2^:#;If5j03n1_HL]^f$h]&_?%IH,[+4(kFr&_cf/6'D\%(ur#!$m0od$l:=4JoqF:QCN]%:63&[=f">qE-"="GZ\)N==8.mH!2Pcnn7cIBW/6p=Tk\ZI@'>`#q!k/_asR7El_Q!@^m^EQ*7!_0W6W;,.Vk+UUL7;o"ECLs*Y^66R0FOr0ao5riS\hrF,O&N4TZ>L_W,+jd+bH#LCOiUIUO&8W/(^/[>`$G!uPl?c9Ksle^(*A#Z'`D>jj7!`)3nSOf;L4T#HDa\h1L9?1ViBMW6Cr6AnM[g0tcbAR1(,A;q6O,-iSS\";G`O[e7iS?#mAYq^D#d4WeG%[6il3n2\fWr8i;bE?1PjDBs,K3c)ecf2()A[+GaS(QYH&i#6>F-('nYtuH!SC#cEn;4#0JlUo+bCGQ#VhH"P,'+-q?,q$IU\F+[ogI$!mZ17mlYj!<>kV3P;+k<]qX*p/Y8]Xh&(^Fk,?khTF]thPsfRVMkBO=jLQ$CE1U#)`f12Fc))6S`Yc>N\gg6;j54p,5\JdB+;FS=pbIp0Y+(PV.$M/E/r6m[=stJBOcME_%EKAO,*h9"TD(uQ*<@o9Z!+/FaD8d%5CZNQ8O5lX/Lf_`':\SG,jn5h<0XM366>P01eX/kqph6OMq\$EKK\*C?0lD<`%:F("W&L`",;V>8[Z+'"a^"&Bg1PnTPMV23Vg0nL)"=X-k8XL*_E7t>46&RGs:713\gFgBH=TpV8H?:eagXHhuD@AcLG:k)0AGutMNk#uD7BDk,=-(,X=8U^H*ra:SbTc7>5+`Y1o,">8(AWBc-E34j)>('H:XJK-SGS^0^7l\I?ct?q.2sIo?($"F6AnFs%S*,1YX%DKYM,]bHW$XsA0^-Lf]b$D`unXUK>TqBiVR-=TiY+?&!&5-L$F)D)'j_(`B&Ad]#eCj<[Z6e?PPhYKloD2A/iiJjYHWS"]LU]F)>;ogEUrcKa\TR5qQcQ7H]EMS,-MGKdC8HSM33iMV&j@?1l:fdO)QhHIA*S1VQSt\`#dDR4\Jke=q.("98H,e,"K!pFfs2"f#rnTTJecnoE'.u`i5r#INL,GFFI2WHNQ.3I^iUSBUY`T;Mr_n6\9UY4+'1SZIt=n7NN4J'kj:_*81\*^cGY4WO+5T=ta[4#JH->SuuRp7j@AUZ`&m4^.6TZA>+C;U8(/LYft"9Uoh3ckd'DArW*'8CWQ/la0XpU/LQ\%HDS4;Q''`KOnjcdEak!/Fu[>r+HP^fO%6\d:9+t07n$U6@l8:.7Q-0=Al^dpmaWm:O]L"XK0qtpNdk5$>@(s<8:r_h0_ko7O)R\7,b:'>C>u2@B/fGO-IQ5O\"HFCG?2r*Q+7[104VCCkYq+q\ohjEI5WfOB6>!4C?V7)2QqS^S/$spZf8;qmk:!P,Tb?-P^:oL+AJjBdP9'Cd@3ZK>C+C'nLT$f;R'&FX%n#B?E0^*T3djRNZ"?]$Mq/U-?4#l[$&_V$;>H^h^a`5C+:]$(+Uc")F_,f)<9.WDb<[En$M8gh>VKZQ/VBWX-GSfk1UhH8hSTX2<4D^jOTohPH&:&W<$!)D@[pJ,q3PSn'KgsX9I$EjSKMN/m5ZT`t/aK#FiDi;B96]6,;C,h]p69r]p69r]p692VnJA/Q+`HrQ+^1Z[MT`NWoO43OhFcJ$e2NLXfgA^Fj&XAe)%*/p/^lfp/^lfp/V:Cd!@2_,j]+9%]^M9NTmRP]CeA<+4=pi9"gL]7<-M-->DYK3X(Mq=*M"=AS,ABTfqY<_Qja:m#[fo1i`5fEba6Z$g^@M0r`6qhpTIc;Ym`SYCg-g.,c^-:Nl\Y$5RFLZFRcl'%6*HnICH=oGs=WU@*N$n\'IK2#FF)Gld=g6F3U:QN05d-ZVB:"fkpJ%D,4M@:+LMka@CNf(1S:Y.XK2We1B]0Q,.C(Yb-QS_sn1J-J9%'@"e\X2=&U4LancplBUV(JkQJDD71A_'@'0Peb4A3f9S,K?O8:Z3k)KlX,5N3Rf@\5i"5b`'ak*Eq/GOk11mb,@DQgRRZKqc"@ZbT(mNlEc>F7p^<,WFp-,E7nH\9&%DCWq7ihX6V7$AT)-uAT)-uAT)-uV&*f`FiE4;>P;+kBlKZ?hp@Bok+/PEH<)?hX`un=>6AWZ+s4tYdrhdqV)'R+1l>OPU`,Afkj.KE*GK3#'u)Ru\$"bZ6UIu7X+H/DA01-/aR5bClEjQeVsBE2oi[s\iA*d41@c+NLbY^3dm:jk*u>$*HK6P"5LHAJ_V[k]l6Q=Q='pGrk*trGr&T$]S+ZT0&1S/S>'S%u8_?EW!%)**Tr>RF`0na4e_\UGFgIWBe(YEHDN'add4H^%4UQ:,6'EBbJImp2X[g+W%VX7J/.o&@E)on#R`$O$eh*sc?5?eauJ/^VG5);6nP=F(e_&CXR[ohX&?3!H`L%!ZFs89^""3i5$28sp/[aX)4B?:em#C:/r9-leJL&;`3&>5>FrP\81PID.QNPY[SZM_eEAL.Tr%GX.7eA?^%TX_9.rdo(,:j;&S%D>K-CgorBe60)kP#2qM-G#"D;kJ#1Wc21'`>9"coVNed\_nYo<=:V.-.lRTGjGqWO!I@H7J7"sFU>;N4<"cV1XR\mfUNqlsRJFkPWohTF^?LM366>M366>M366>M36R_cs,8pXUk*$N2NXN_Cd>+]M$DIcXI?/Y/seT:FHU3h@SETcT&l+75"DMuIr_U<"NTl_>2QW./Go4#O_us>^`ua#FWM\]W$$EnFVN>Mu69Mh%%6A*$k@gFr&6.T=+qG>M;9PH\_\_=m7K[LT`<7F90;&iV9+YdD6UO18u5AR)D=6?O:Mhn&B.dF(B%_6jBd]a^UDc60V"Ko_:ru'X=a\a+q&dChF5]4c@XN:6B/N&K2`3!8N(([pGl1]%5$VemMMNp8he<73_&Z?tOiP79Yu9?(ddONN#9NV.JoCVtFI7H&tljl`IZddKtmbVFu_905DUM@33-[XCQ!!M,#Pkp5+nVZ`)H1(T;s3Z6,B(Cd[@Dd#,K\d)Qntf6%.is@cq,RimaZ)c&pmID'\:=^?luoFXl?Xq.[@]tooKqtDe3iuDe3iuDe3iuDe3iuDe3iuDe3i%WE;Re4%n=r8bQ1dm&dj1DfsUeWa#0tp/^lfp/^lfp/X+;[t_BG(fX(=rcl&V;5k3;`u>pci@1l27@.W5R;U>"Q%U5X@A021$A3WQZ@e:;@/2Qt\%pIR(go!Tq:6CVb>XUh=I%B,SM8N]/A*odCH,:nGUT"9%kl*^,F*V$[V"Qj,m3D6SQ-Lh.[_8*=Lk)kRuPc0bMauK)qV6[RfbMK6up/]d4HL:E,AJYbYF1Uc8?F@mO8r]_@a%MZKGZHJ(aOn\AKW8"&g<.s7[uApYeBng]0-(:DkG@h^\-g)IF$C5385ZqFVhN5+Dqq'MHe'%i`<[2dr%UDI^.:!j>RtuK1.\E!om=Q'7^Gac\r5oB=\_+L*MYD)ZocD'nLcmbPC[Sg/Ge]30'D272!QUCCPV',3/ja4cccMBsCP-]ZS1VcTVHkX6:LoHWdY&M]IqFMM7fb5?M_+MK8gN"Ab.7DZ*FoNT+2n^Q(r"Kot>6DD.#hH7QiI2[ZPYHmdTCfg`gN_rL`X34HsP`sUrM5"qV[C)'E&NST"AZ#]=p-JEYG_TtiBASUU7Qk)6`3AT(B)pi:n0nnHkNpZPj?-()*5N=j!eRlK*]cM-JME'esd180Vpd[u+D/Xl;__$<>g_2J4G0IZUFPb0PJqE"&a\Ice["sgZ4`1F^SY!Vc^M3H$&L+UTK0Q&'KM:P-WP?%\7h6TcSp614X`$$9k08WBA2/"1'Ag4F2r(g2";,[4`QhoE8,9+cRaRsobkGq5*4,\<"0`%";iZqiFLIq/51OURpD"%VXCVEF7J!H/R`UP0XBUg5EI-?@9Gel:"M]$Ij5+UIGkMj5akZ22jQ->p4%EN?TLga[2!8_be5ogmm'5&M+EMHe'%SgSD5)RsF@6p,Ii]=?AnEN;afl=KQVh!.(@omEOQXl2&]X!+MYqFO29rs`-YAtY+O%;6DD*mMY+K1nobeilkh\XnA)3#1I?9P3[@TWIeo3`?h^H4tcgK;rc8umlL)rq]CY6T=!+`K^d8:n,FUl6_&q&Jh>K'5V\e\YsG.EK_QGmTM)[1_^g\'SW^a=gV*pZk`pJS%m(rB\$DA9jl+q3pr]ZRH_-9khB\`-#&g[$i[jgh9]dddN6kK!6$;p=Nea&uukl)_I7JBa*YbS!r=_D(W;Pg1H!eYtS2;fspekBXg6-6E0SJCXAc/!naC=,(271k:=_RCL.ErpoNUFWD*b%)N7Kp,N_fK>2M\AEZS%+$;t!Zi^.mY<(1M%s)FQ0BLaPT,WobDVqc;8DYErU"''/p>ai.PMT^U8CehS-1IYPO(\_$H7'4'T2'L()&Jc7X$Ecq]AVDU:.tQcMq@+0V#N3QA:*nNiqKD@r:d`U`p*HHg'u6i`o00*`goJZT:kofLI:WKI:LF4kGaqc<1=**Z`?s^u62UXWe)OqZC_55Km;"bYEc'N@Wsi[pht'Un0iQ68#8)(mkg_.Et7l(B6APD]6>YL\*"a;Tl3%TH%7\B6]>;S`6;e4nV16D(b7!D?A`ZJ.qU640m!MgG/R:S;3]B_-eg#FEiD^H)p%O1rZRLENA8p,&l=P$XB*>X16\)EN?TLga[2a(Uo9+`NA-#E@]#gr5>`*j&XJBLWYQ[`N:2<>K*`(19T78O=*"U!&hS(_3Z_qAW!%UTG0fb\c66Pr-&2n)CB\/'CUg2>(\?FVlor&"io6$t3`-]k3#l?=j!h;!r^/U1"\9*Fl'VF1l(+d-Jpi4]E7$)Q(Q[5]\UK8_JYfgM4?G@-D_]Io>G4cXN.Ag2Tkis485'Z2_ZMdWu%Lj/Tm&X+DIXB1mo@i9j/aCBq@5mDVS3C9";lh*Jg:VSj5K2rWS@;ZsghIH'a/psmA&j.kNOVt9c=,KXDABX<>K*`(K*^&j]K!4a6#u;2s"q6%-cEUPK.l0SQG/>E>#r_pB!6ZX's+>#X2F',6g;o#,.HV._Z'.tL$L:m:"p3)NPcI_Y?/6<"t3M,4;h55Ec:tV);:upWC(FnfTU+!W$&>r8L'Wk:rAI8%]Vd4K+QlX0O_2`Z=@Y4:9a190d_Y),).kk1:s*G%"nqeF)'O@bA>\H_[Q1q$@5Meag5>IFL[cl[n:JBQQa<=K5\+.t\'D:lMDP;GHCiYqr8(ueT>M-F9FtWm%DY6P_7,080[1RDZ\5h<6DABX,,]5K-<_iaS>4!bmM-JfVXWE:&`NA-#ENAuH$XdhakT#nXd.TcCRXi%X_rdh5EJmo9OYlCIW33?Zc,=6._JR&R'+B5OW8?_eW!F6"e\.ru8clIs*ZhV+8r*KZ<76LLN]3#ViMD.4q6A0H0-d(s6Qa@;5-6i;@]7d3gfGaQ74O1E<7U<(EQuhd(:tp10]$(T^CDR,A)3"c9RaW";8BXZNlRoO>I:%dNi.b?$Aj)qp`0W90roZ@/p9sBn^`h,r&Y+,M6AjC$NIFIO#Udr'9P@%B0s-qb(X[->jE\%7;^j&VMVeJ$Vd\CEd]XY+Uo#NAd(X%2/MEN?TLga[1V[u+Bac4\oi>M[9#SfhonM-E+S[u+BQ'"93fuQD\^gN'4F`X(:$:sV)R/qd/;X:o)*[Kou!Tg*mPtt0@k`9qgk(cDABoBB5V_^E\b_lO&@Z7Z0kF-`BUOZ[TNNl4L_72J%_?lqA]aLBG=MgbIXb"MT7<;a`C*pnqC!:S-"bXK0AqI!ZCmA#$2ea'F.WO_4mZo(0uj3QFdo,l$:"alG![tEn>?+c9+nu/,BCG'_ZDL-7u7CVdkP'#;&*&3!jo%'D:LrkUhhJ7hiLFV/d&Ai`>E3SO4JM+q.7m&uN?)CO(&Ap%k1HEH@K1VG>.c=F<L=kkKE't9')`NA-#ENA8DBSpUcX$q#c,5:0F6b"O5:WsBZ>#*j&DABX<>M),6PkXXa8N-R:&4#1DM4Da)R"^B&8=?ldOX`J?BtI-/@L;O2)<]=c4e(HL=Wli5Tp43b($('/d`"i:s"(4GG?3%jIDWPTCVj1*`+!]b\Vf=.Ia/BBlV!TZT:VpUbQ+6'BG@W=Pa0BoocBT,`J/qH,&XfY\CEHc.W0B'ghKdIHkVGgEpECF&"(pD-.(frh\q3[,)=<5haf6M?ZYW)8LjpY[Ijj$fS1R"`+^n+HV">Te\"jkfUb4J]"IVuE]o9]K6LYp*5d:119b>.G=d.QE8*Dk5rMW\19D?kED`[*tFIQah"53>o.(A#13Ylc7DQRF1MHC\[f\sB7G,!nN^>D;h`fLaF``JZJiV23f+]NHFFs#YrZB)&cQlCOI"HX-qWS\q*&IY1^$03?dA3^4[34mdBn>C!2"Pejd3N!g\NeWH/uL!r)#0:#/4VfZDZ@:jZ.>2WPSa,:rD"nYd0[-U2=C15qM[?%2C<;V[u+D/Xl&gV?\CC\$X16\Y3TNffl4UR`>K*`(jWo_%A%F$AKH8'nHWT.*j!gGOEslE6RBb%O;MRFpjj'20=,!n%s[sFt"PDusm/^@SrB@t01q`faU*-[h)<"Od*mTGcpTbT[Y7=CoH/U&euWfu?JZb#%+O@/L88:k&@PZDt%`ICP>MFR]Lm(Q=jPu%n&%lR[&`P4V;YP@2*YJIcg(>\Z$<8`>Rs%dV`i`=5GdC@`f;fSl8\CJd.Ynj,M\%7W)`NA-#EN:JFn[MTS.W-!1MHe'%\.Z9>XIl4=MW4D3ga[47#d#)URbTU8XfdLb`NA-#EN@3\'&lsDn9EaR)A53OXk]e(>LD-fOBeKCE.mKeJu@gf`69g1!r$uqM?o-UquZ\";kL:@#>fqZtMH\O)OfDQTB2[IWVN-N(e.(\X-O;7rCrQmV;f/uiKMdO#9MnkW9Os!V7e^H8cqKLcF.bW_qO4,L&iKCJh\eKk8OJiC88[.[VZ;n!1N-DF$$76WLP8?;%kFdCtn$t@T;/hGYa>9WY;NF.FGr+\=?YXQ'1Lr64\94lW(%85oH*0u3mNh9L%B^6u03.oa7tDM33.'F`+QXKjR3ItBU<^j4P8tf46f5St5-O&;"O1A<%id[TZG'B9ls5B7_KeU_AENA2G0,h=rIGF)gC5bn#\(VPEMHaBGLq0%P'eaMO!%sSTr[sAh!HG1)5X$=V+i`:'"\CC\$X120b.W0An[;l.cUWC)<*4J$Bo`Qoa2TCLIHkZRI<_Skb:4?f2E[HlH/8Nrl3oL^K.sB?hOJQ(+1%dIrJ>R3Yh=10EI@LnV@2"g\!Pl:#I#.VAoVh7^^eUl/XB7oP?:9[m#ORKVDnUmf:IE6hh^DqEJB1df<*8T"[DEQ\:2)qLZ4E[7'Bl8G@M`MF8`T_NY(DXQAHo[b\3\6<,3!jK]9qI#r/Z:1N.t421/aA+V\nCsc%&:UHMDLVg:h4?Fm1[u7p*].A@76(-tuHeM[4Ybhiha/C/[YdDKQc)H6@)?[sB<;FW\)M>K*`(enX120b.W-!1)YjTLiV0'0V;QRR`H96ScT_ST8?NMt"8h9L%`9ml>".]Zp(C1)G4dm\>[d'fM:nqKZ/uPhB?*s3\L0_0S"?O*gu]0WU([5U\[sRH^F"8R*`@^bjTa;^qSF6Q`B)'lc3l-/[;Y)HHIfd@Id+B;46dLSLC*]Fob1aX\>A]H)kDAD[/pcpN:Qs>+&SIZ:eAkCNFtXjtX`7%4`0EBp<)0o*2^LMHe'^c'?(VZM;dm+`$#[qb/+$-HB%NO]Cu4rnLEYY"YEr'Kd%NXcn-bSW*Bo(aZ!kGat]0T-JTnR(A27Di>^&)i(,J3G-#SUKj=XG6dVq+A0fB,N#40mKj#.K&nGuGc`5b@=Juq(^1=2,,?uPHbD9A.#EE#*$C)13H5K*`(ce[sPsE3I+2$S^IncJ#A0Fl?s@$;g%dJ<`lA^$/__ce`V9us'agNc&$5R[u.2\&nht4`ru+kEUFcNn\HCjVq8KZ3'qN1UP`P1$pBYqf.'i/Olu?/GG6Hs^BYkio2!b-DQdL`d"56HZ#7M^<(q!!'Q3_W,.IL4KJ4BdGPuJkaYL^m/Oi#\oK8GMjb%nB:?O!ISjHk%UL%B"+"rGQ6YD[ej\\T*0bl[qicGor]1oDtITKpRns`5&:X3/r-Z1dZ(ueTJ`3$Iu4NFQVEN?TL,An7*MHe'%i`:'"\5h<6DH0r07o.C!\CEHVX1PlAga[1V[u+D/XlB8fF.gPi]hT%>iG54$k#'H2N"#$F3W1VmJq'@h/1g3O@)pT>8>t443/8fNggZ=WahYd(h32oQV#'iEPpI.^e3^I\Wa8ZF0D?S0s`l)mbr'"45n)iKsbosQp?PP`Y0INq$LGRd6^4D7@ngpD>PYcW[sUl(Z@B*p/KXY@WYe-/@93,\%bcj*_YN`^KV>HYJ43Lsro:uC:OTV/l/Jh"$i$-Ea+]R4o/M;ZY0I10na8!$BD%u3S9j_:#,miX[os8u`i\NBGTn=?I5PnbM-Gu",0-fqG5o3'"'i/2k6!?sR9_\in:3]L+c[0S//B=eY=u\^L)NLton/B,4a>UW\U/9LedA7AW,:ik8X6%:%6ASj"&@VuIi`>#\,Asn5EN9Z1<[#D`6@cRGGhn0[XiRbbjiP[3=W?>m`1>0(In5"u8Nj_X'Q`^dDWO9m."pD)3nrru0\`1<+:G[9"HH\l'=S=bSaBOk3B$R"H;_u#ENAT?;097sqdHoriBS/r^Bkmh\gD;0Jih_lG&qKbiUs"6HfJ/cFee/:X7sMJHbt=bgjTnrDKX2qcD:[^\CD@bjLc6'aYFbEjOdb7'?tJ%qm42CZA2psFG/89U=X86+k+uZr[cju`2tAC>D3&sWt=8k+iLM"CI6fk$fY215hmiB\5`fSX72Ph\(ZFDh.k9!L(HZW+bUD-+`9//ga[sg63n`f0LX]2P.4Kt+bUCn#[rP!eKf.8&4-XGKFl!3EN;[j<[!,-63n`f+lZOd`2u?3+bUCn#XcP4-Abr\&4-XGKFilo>>5a>$6b'663n_C&\"2SDA>JD+bUCn(aUPJjRi#U+j463orsXX8m/Kb-QV+bUD]Lg*Rd[gF:3&4-XG$k]t;,]4>`#U+j465Una2+cRQKFgHU+bVO;ghN"^<D3VT#U+j4L59&.'"82kKFgHU+UeslRNubc63n`f&4.3XDDb#@.YJ@"#U+jT7,2O?\5`eXKFgHU@>MGD,]Tjr63n`f&AeuuX%D;O+bUCn#U+jEi`;8]X[3::KFgHU6c?)R3NZKtjqj#,C](4]DU!f%LB@KT/<"O[mPj/BifMZ6Lm]d*NPrra^NrK7nY=+O)**j%2NH)(IaB6@4nfp"cHe^6\DipkVlpm%`=Em+j$.JWepED9nK0]E13Q%O:koE_\S!JnTs87&004Sbc=qK'BB/`GT"Z,PRNuc.8_e'D\CEd]X\MFB.W4oMgo;]=[706hb;nt8l>4D@Q4p`r,]5J2ghIqj<[T/1't8K7DH.@Zg7n1ojd^L,FZ/5[b;l\/IC[0.pL_";0'*J(:3"QG7A)cm=_64,maV_/r;'j&U%!Y'd9I`*BYlCKqJ6QOVh%EX:Q=3'XT9f4+,"MSh?i[rAD-n[BH+2N#Q4C2h-"o_XW7(O.[[.Xq6S=-T=6\AJ*VqC$<9C`s:iJMY2jM4s3o>?qoO=q2.aXYqJC[56kkDKUe?m7uI%7Yt?/iiL/%&b69_RNT?ghJjIFfV]&p^-/61l@!0hXIm6O@-5?76H5H68Dn15#2S-\=b4@TsWIfm-pclf?^W>CF.pXqo?_AFk?fNGaEg`>T7[`bEQ3OdPl?bDRF+A,V9KrYU"Y#iL4EAB56_"%t2E7jY3bG%YIt#8Y@.)?+bYK\El&Bh9)!Z`.M8/Fne^A?7UN>5uSP90rl+Oi>f-F.gl&di43F2SM5nHU\Hn1qMAE.-Z4'`>BN;dEN;fj>Fgkc2Xd0X0]#:_^+i:b>VSoT38DG\4ogmm'rOCCX3/;LS\CGK,Ic=DO3S(=f\:@cqL,%niq!B\8*-eECIAu1h015:-Z-admG@DuJ@fJ5`#t8jhD:V=R-hUr!/53o\LKj.+.`o[h)J^(lLE^4k4.0.kB"t(7Nm?ZG0]P5?Yl[//$iDuui#=ljlk-^A^+kE+&LiD>=ldlBAV)V@V4;G?:->k\$(unY\`Gr@i.uBkIj&VXIA1VV@+1HQ([D(K`h!.@c>E.VJj&X>H_RNSn<(l"]3H;+A_&0YM/<7?e>"S@^*k0jf,%GVnqmb/YX7c,qi`8!1ghINn(q3ZY&]Uq6Tj$GVb;n.UMN$Lpo?)2C@tuC=_WT!*ThB!2Ooa]ahr=/m++gljMXBuH9I"S!*r^qQ8]gGLj,[*<14?bDqgo@;?[M]R-T,'3qDH.Ct_EN:['RiR[%79hEaX6%:%%OZ/%:G_[.Jh(iA9AJfXi`8,W0Q&b9_k,j%oeZ78]L:d\bDBG?1#)&V`%Bt`M-DRpeSqR7Mo+.d&,2ep9LM%)q[-\rVC/n=MD_PLmH-M(s3`"rDJ`LX%@=a6F,3Q;">gHU&)Q'4T0<]gOZcY+edi_SV;B,Q)F[*^R@i"C,si*0p'dAVpi1p+P-H5&]V4nuU:n)-GE(U]ml$[FbcZ3gZ]1RUj'+(T>iE1I='Tmdj3cr.^Y^I)OR7V:I&9b?JkH-72D#u"UX@Q5k+dn[9\aA)]\ch,-g[4]S^:,iX+c$E2"Z%JlC,65H0CBc\CGDAk#K::XfdLb]be/8>;bD@5E/la9\_+8[2Z97\CGWZk.W3dm>Q$Br[4u[%\CGK,>2iT+Gr=B7^#-G])]Ce=U#Hh%]nJ/A4$=/gVU.8$kQ_P]DB.WU)@XVC.e4n`]KnIRO_8PPHc!j2r]_YI`ss/rfqlJ)r&B6^`1d`go"86K(>7o&0C9RPLg/[r7H5GVWtXLel>`ld`2sNI=@%Ii`cu')C98YRZ3M%7,2N4)oW@p8DIs*.i6lp>:m%r+r`\`X^26i`]Z"W-RYRJID-oq]lu\CJmCXm2hH,n[Vt`3$V->Q$Ht[23h`/\#N(11#urSq>rll%d'C_Z.fNB/a.7>\!d'D,8C$Wc,G'(T">up6;pTbOPM7iMYOH$miJ#?Y^XEqUmjC>J4K"i?+NucN+"#+Nu!ek!D2>$r(`O<=u*I/(^K2Xa9PZMbW-cKq%"c5B#YK]!0S-31cf`(/N30l(*g*pYi9.*T"<3cg1s3%c^UA`2tY3X14FdMHcX,\CJmCXYqJCFZ=BA9AJe8`3&$"ENE)D$EN.7s4,"s`8:CA,/H$MT1>JVmL!T.9FgPZe]u+82C36`3,tulh!3\)FUD/F.rMbb\CDmCog%rJi=WjM=#WF%M?uZCYi"`Mk6=!?!3)Bae^6R6ht/7iE:R6i`=[LX`ik)DWS-Na>f^qF3D3Vo5&:JgJ.ID6QHr3p1)p9"#'-#1A&JX.>)OD+`UKE8jpq&@\*&ga[2a#.K37Vfs?W+e=O>,>C/a+mLD.-(Y7dlH`jjQ>DVD5*l_ZXWrVW5mJ(W\7cpPLu)>fIaZ.LWJ+@@nnH*g/R3.AMbC*&DupPknt6`I[3r29+>R@d")lC,65cCEIfQmt8R*1PJ%^>>6Dq3/=RQ[g#iM_?uuiloHF_Tf@:@#S;A-Z7I;5B3b$\CFp(XfdLbm7c;M;rUi5'=S=P,\mk/\CGWZS+BU->p4IkBAE]5%L2/j'.LgO.X@m>i@Wk"E-/T4NFS@c*>h:N*@k]DUh>6W_R?UL"2%"X^5Gq<]^u(g6B+tiP_k8/'1t)0Q+:g\5anrX#d@G(KMn%[sEab>O>,>C/a+mLD.-(Y9[nC_78$9cL4dj**FRtHqBUIoCuL;bjgek_O0LtA%R?t7/.9%-gIUU3plmp/Bhj)>0acTb)b^)m,oO0[50c&Cb3s2%14KqGK!gUsmtl6)DLuBSMJXhEMUa207e9T->p4IEN;fj>9-Jo.Ki,jMH_Y[DH5_Ai`=[LXgT?iF\UY+BAus]'"9ol\5`fhXqeELcM?:R.n*5f4^iXZ*kqOM7cTRfL&>bR3a3McpiPOTNM3f=VrL-?RA%_'riJI'5/?J)#[u^nk94`N1T,@GrXf?u0[%D(NONd1(V+0f4Gd;@I=pP7:_S5`;&&M9kH,N&Sfp4MHPF)hTuZ1of>Oe+LaR'T\(ZhOeMV?ISV^S]'=S;LgnWk0bDBHR&5V(2DRCF'X)$]q3to*W#8ap`@Z4MC-Z0Y#\4=N?Q?,E2"[-)U[H8ROK5p8)?DL$AimrI9[F.A_.IrNX_QirENB%p>?qoOg6oJ$VSoSH-Z0Y#`3$HjDH.@ZMHfIDh!1?:nPjMO4j%2nFXt`m*0U.iTIo/(2/>ninD2)f&^J:3`KK:+hp@,,DDfpqB6,S*]cV+sF]^0qa1@Q9XUK,Hhq=.$`=?U!Qc/4-:h?reiC_m?3H;+I^i?Ebe^h[@/odq0esZpgDRCp5X2BcuFV;0p;;tVrX/CbX>na]9CusZUi`=k"-D2sM<]+Ye"VA/sPdo9&`2u(W>MU]IX/"I-g0jlR=qDc&@?t)EkMqQ0grcZ+?V0AGah3mPW&C6(TuW(Mon9jhm^0$]h0TbE?4H:9MZOYqJ5Lht3)!c-:>uqHSr>[A-CGnJCsM"EkH0&6E)06g%lgJ%j3q%&HpbC5ARLg.j#?KtRm+MVZQea9Aj$#O)a\2Zp1h"jd`\!V$@lPgVNTsT+QkTgGOBs4]uME5j4`:I%>\rG1E3.JY.KR9<"EcJ#\9(DnSI(aMjlHJjTU^hd]q:KNM^pb6MU,rbgn:LGa"tRdBa\@3*@iAj[2NX)$]qEN?U7M-IY8\(YHJ.>V2&'";%>go?RJeP4s?>?HZ#X6#l4)slEfOqqJL(j\$T]Pf]+Y+?NQV-q]hUms0B36^Xrc)X:.'R&M_m]$"D;'bE\>kqdF-Qqcd4$]ART#b"a)dN2^j4J/fMa*/MC_!pIrK-/"?4[Jt3*U;Mph"$mj!SiIe[KUHnn+ZLOgrpfDRDQGX%D;ObDBG_Z@_5C#P#!/=;@egf')o\2".Bj]_SIMC?qoO]#:^oa):P`nQt7R[tB_S%ri5k+s+lqUE!CFSU@G7'_#56ikY$W%Y^n?q[IFkIjNrg3+c&9$s3G1d8QIi3RAG"W75+H1(bVs^)T+M[@FbW-#WB@h!,N]H@iZW-#U+PEN;[j(FV;0pFlHGAWu$Rr?/emG\gHOdo$V#ip6>+l:PX-XfdLb9bOq(S<8[ka/rAfDKS;*<]^u(RNudYS@I)tX09'oYdb=TRSDQeDY4'NX%V75H/_jp&\#?iX`c(02+cS<3H;)sF?GaY86#'LL].tGEop)K&8a$Dj"0TE_kt4?7C1AIl5#c-o+jD#3&\,M-Is$?6F,#[sEV8eKo+@4)q;mi`=6Z>LaEC'">G(i`?qoO]#:^o-Z1e5ghJihX-u@Ei`W/MhEQu-a;#np-hu(JF's5\39/..J2,mHTa/uM$>@$5hHf6nV%",]qhXi[D.[ZPjnMo^6H4on90/\V@^MNZ\?V2sms*CH#*j&DRD^)*k.R`DKS;*@$b;m=A(!B<;Z.Wa2B);?mK?*^Kk]A1WSDQ8Q#,*CN>+'lL4`B#BLPms1X17.ip6D>7&iacO:#,"H\([Bs`+L%h-j]F$#.NH<)CP'[L*%cOCQh\HUVRZd-h)m1%eK(B1I`5:l<=^Q6&qI&k*G#s[i-k\=2*.&7=DO?e00/FkE#`\FnhrU]N5"s_mbHk=LW>:KWl%06uf9h`3&$">N=]Oh(#SGXnEoUFbs>iNqWNnX1.+iEN9XO-#U*oEN?V"f!m\,[u)\UX*oe.?/ensj#oZ_lKu)]ga[tWM-Fi5q;$oY:Q*a&c`\;cVO^pYVfd_Pj9sp^X2V':*j$jcET=Zj4UXe].;;Y^U2^M"MPAq_gd>6+n[R+,EN;afC3TI,1D>SZ_/@!7-mfMplR]Dp0RfP@9RcoQL*$Z/brp,ROnkS&gHAkRhPZb]&).NEiD1EalHiZc>.H%Mck]/\gbL4pNVhr\CGWZk]/\gbL4pNVhr\CGWZ%;V^pKl?XcTGQF^'N3:2hhrN85W6bkGK[K_Q^+gNs%UkNa#d&\%9M[G/oAEMf5h@V>.oQ&&gP9.+U%l=jSAC3h2Q4,)9E[>D74QDS-eAG[?%`Dmc+FeKf.8R\HNWcVI>!KS`oM6/:`<\([C_eX7jA+1GEKh!3F"]CB3Lj*;6VXd0X0RNucN;cM93q<<`k0QF-FLg+0EJ5?!2r9I14>4R]eT+tN\)IblkC7CaSZSe3(5JTtgu(]\4aA*#D2-$VVQdt$br=UPNP\r_nOsXJaUd800)A'-GhhSQ\CDmC[24cfD_HMOa/nB'7@8dH`M\d-ZGVX73^oWC&<"SiFfXLYG>A]m+E$kpYh]f6nZYNP[ghAsS@;ZsghQEMU8%Qbga[3L/odp*'"?SM\CF:b\([(VeLO#B.W-!1lDZ0r't9')X\7I7KZ("d+`;E9`2tpDDY;-`[u+DGS6NQ(I'5hWJ%G0VL;o=1H@e*hjD[3r#n&GkBEsc)I.82Ncck`i`:'"\5gj,n8')RMHd2Lh!0R2XnI<#(q7'_SEIE4EoL-'$ur>Xe]kXi90k)W2ngrX7>G5.$C`GAmg2+0]th,l%^Ri.<6JW*MTpZ-[P2jE>[3sSMV>9F3l8DW20#ZighM'4d,<'+>(A)?qDjEL8PF">g,+-42iJ_`l!kt"iUj.7[%2;X^7FMi?mL*>E,?eMq=>DBtnn_;o\E4R2cuN$Fa2e3&ndbePY+_:crl.&Opc3o*tET`3#==[u+Cl6JQ<2)^j_uZ*`Vg(];[4(H'^%Jo[@FbWEoL,>X&Xs[9kNE243tFec39/2SJa?e=5m8e/!DK'X/!0HTm5k<,)kMDa/tYKXBQDWlhT@`d>a4SiRB@#"Q'l9(pa!NNA!.!ah2V)(33A:?God<:-#1_`HN4^N(V\4ErEPg)a!V&K7Y(Fac_h]9V;B)p)ddECeNL6)U=:"p[8q`?gGi_8@W^)t.+]gcScQoInRANf*Ni3F%Kgs,_u-<-,k7#:l4(3M`FSE0bB:la_dS#D.-e#rZe!UJJ(pVUjI%NFT!r_Mj&SZ)2!NENI5pkRE03<&(!qe4DABX4\5h>L$l"nNghIPd0Q)"IEN;afC(90'>7e94I(Y9583Li*[u+BUga[2a#)^MbDDd;m(q2P`\CDmC[0EOOX.Jdi)XmKgP1\,>k,Dc0PijV/cGtOS\PWC;QL\ta-D0)ElDn3*l*h`l?40`kH18Q>7c@+bsU:Oojha=F3ipu%?4qkRa3qFQP6i3OgnEHC'IEWDKS\/C?O+,R>DN;-]!gePQb"Fmb[Q\tQAK\(ZGDeV_;Ii`7jS&ojsfi`8.=*k.#2p#AZ#>E.W?`3#&/BWcF&jOOd"jg`hVSCXgVhtY6iGt5(hi&eEej(n1%i>amCcDlf/B.41FXS)d?(dD>+S\t5'Oe3\Prj1?M]]S%)F1;<8't%>A7K;$noqP!#F-eYg8iC`lFUSk<8XX8m//]Z%fF6NN9_GWL=#Xqd@!]s*%3`q(*XbA9&d=61SX3(1X=,L3F0lQ4Y7=Ng'bftuKD2O5b[_V:UXa.O^PO-tWE$`H)Q4p`2NgC(8d.o,DV0M8:MQHLSG*nkDYR'8n$Wj'ss6MWVYDHIXp7L_M+3NQ6eRIN=POjj='XrBthTcLdr2eM;RhN9b'Gi-5J_Q`"o6+Igfs;.H8r-\'kHo+A63n`f&4/?(EN;[j<[!,-63n`f+lZOd`2u?3+bUCn#XcP4-Abr\&4-XGKFilo>>5a>$6b'663n_C&\"2SDA>JD+bUCn(aUPJjRi#U+j463orsXX8m/Kb-QV+bUD]Lg*Rd[gF:3&4-XG$k]t;,]4>`#U+j465Una2+cRQKFgHU+bVO;ghN"^<D3VT#U+j4L59&.'"82kKFgHU+UeslRNubc63n`f&4.3XDDb#@.YJ@"#U+jT7,2O?\5`eXKFgHU@>MGD,]Tjr63n`f&AeuuX%D;O+bUCn#U+jEi`;8]X[3::KFgHU6c?)RM-GZF63n`f&;H!F9bOoB+bUCn#U'Tg\!eR['g`0LKFgHe,&T9[Z#4\;gg9Tpean$JqSJWE?)&cZ#;5:SW"_[fSfIIbV[0rd;aoW9W`uN/gJJZ_#[CUhNgVC\NDd^DPLZCIMeoKFJ"/o(MB[nK)B6hHO_6%&Pkkq!#LO\'(%2gA7Mb@j!8q/GeQ&BGoJ5.:SRHhN]ep57#*HqRD)Z8Y^!gYgC2%`Pkj==(.`'#rB+4K!4E7E;i`;8B09"QmD3B8>2U;4sOlti1-U1&X[@SiL0AIb5UaAMQ+CjH[lh+.7RR)eY5#jNOorpF8'4q'ucH4IXqDr6s-ft0ou!dgnKB?O]Rqp)o[?p.<8:.7=.2R-=[aT3A6tuHKR_!1r3?eE+Q/q(V>p>=K>V]V\jC]A+&U64``rP7,7&G&rg,GnMj4i=,XJ5.#5c?6[=\r:!s^6l:X]7:Kg3,I*5rE[P[T]3qTqg&\#?kWQ2-Dl,fqUMCV-o5htW;[sFdE4cM3b;47%8.B7SuKLHQUPlt1>b'`"01>&jYk(Fq8\CEG^)Rla,ELnf5--UaO%0Q]crl[#0ho=P>tZu=,Qj*\CDmCogDAu)J+`!1?ZVT<:@I*M^DOV$*L@pq7+sdY[dFO#t5JHX(t8u=LTJ=o4C4B.H2eRas,4WLL,[ma,A0rJ9l7W;r04<2Mt*T$92#V7@oErEM_=]oOQ0#(HnHo]6fFJ*Bb]#QDC+rpQUo&?1aGSWoKBKW^sh5D`1#Z&FAY)-B51&'`_DH3%1TGZ1=YUX1G*HX83UMX]EASoe]p9_k,^h<,YP?(>4LJFk0Y,->li4df^&8>>6m&Iu56>FQ7X+k.&r*`3&J1u<+tYmWOk](=siJGT)*C7r1rk@#%=HU;C@9(WpqA(=$6\`DC&)HZ,.E2j+4Am0F5;ft1%S?>V";;&LR)a[*E1?j(iE[,e+N7SoUptP0?l]H,p&:&N3(uhq4O1Gr`3%)bU\e+%Q^$WUQ_;t#\C4p]ji?0m71P^rh:Xo+&V^J19`RkbD@7Zd[tZ]bI-?i>1Dg@UfA\()>O'BsF$Q3$5lhi`1s':7]Mur:4>>2U!]CH$ElHiH^%_(S[AKq%TA*EG(W,N9S+l)m?]%4aBdn)YRc\mlrP_EUU%`(SG4a!?a;MJY@>?qoOMHe'%i`=YB3,TJ?>-^qk#MFo;h8cXh8Aa&9>@$5hcZfAueMSt"ghKdI`@K,Qs@G#(:,=Gqc'("r:<&eAM`>+]@^M#U-S>;g(\]*\?qf=(9d?s5jPecACmi%d751![nkq9dPnLB0.OU[TV%S)U/(!`3Qk6Iu+KsOgcYpTs^C`=ZtI]i$@jlD$JMd88II:P#`KbgK(\4(mj.EFV06(#Nk/8N2AS3SBFaP7/A7C_GSij)Kn[hmut73+-on5G+I$@+V8-$Fbb%!uL-)L.*L`V1oLfu]plVc\!\@IY+k+m`@]Y9Soo=WPq"cEmULLL)fCLNe>2oNYHs<:P]o7?bO4&!No4kl8B5ORXh/TSF>K5g7Ndi>&2)N(&USbX`G9>@aMU0#A0\+88\TPsC=S/5nbSVnDD:*M2/jW"s/1S]ts<&538.(XObT/\a1`Jp<1)I1A@Mic3QgqVNC%TRCcf%`(f3nX5/S9`N<1_+h/oN?P*-7i%_b\0DrE.JYTR,f(esX&o),+!KHVE7_HUgUpm06&P94P`5I&3o]_(fLC?gRY<$n(eT=6"e-d&u88K0FA*PO[=!^7"^F1o>_di%3phHqb:*_Mel3eK_\/ks1.X.%>r'.-ISXNaWV8%<\d#*j&DABXT>]HgSAXlK*]sEN?TLga[3l:#,"tDY6-4\s;m)E$-b)KVbM7:Me/FbMc16P/*(W-"#f+u:!=%),)8?+jC:T:gu`X_U/+,k_p`?4N2@-bkk3X\%(E'Mqt@rE0jZIdUFE[(=Nbi@%8Dcm&V0M9:P*3(U,3pa-)haM$W"Yp%2K#a>8ekT?_n).;>;[rO#+M-n_V^tSt?=*PB%M/^nou.h+bL]0uXUpQJr&Db^st6r%jc_aJ$@'5-GTV,_4K1o4$j]@cO^IB&e/qMMbUi-Z0[.MHe'%Y)-B%Xl^=ZS8Ek\([(V89Se>K*_Q->jR-H7I.UX?t]W;iZ"$U>9f#(*GBPbjPjkc]9kE\]&cLh0\B`S/(#jnbBI$O=5OB7+q/Js!QW0KP$bFT?7I6k%PNIZ&<+Ik-*/FL4t9#5M>Nl-[LA[PpOP]8CZf:#Y^_6#Ks4:XYl/<5OLb=3Zlr24;nSF?-BO^eHh\^HgI>XT"t?H]Kb"QS9LX\E5gQQ[RP`$UXF'L\5iIU";5j1jH/B*iT,kTDq(dW*&72t'h?f!]]f8A?I/K9s&Qp1O2+H+GCn60R(:(Gd`W).r(VE+\/hBa"RBn!T*m>gnKNc*37JI[K$tX\+Z"u0PUi?5J?eId`ettSTO>7h?2)!Dni,NY3i#9V/XU()OCat&\tZ]41dOnd(u8`Q9i.?2!u<#^:bCjS.i4VOL;'?eJ:JHVTBG1AYgLdTO=Mk74`bO-1!Dd1k9U/1K>e1%'Y1.XB>4-[#ErdrSr#IFF\UZV'"<00DABX,,]4@+MH^h6XmY4M)\]\!9u9]FXY+Uo\=U>3'D;Gqtd4We[tT3;eq&8+b%\,Cp1-Vjcm8rbk9l57>EK\0:a*!O\+o_8h1dW%>jVCpbUmj+Ve*"UYWl17j$$r7Y#V"$i[MTO5LO2ra0f+C0b4i4G`TNlA+VK*PF/o"!:_%hYg>i+jtmFKqlE*l90mJ>L\*W*pPT1ra-*soadbgL`,HdYd'?+S0]Do"-W$l#O.G11N.ojm2q3<_9M\c+RsHHp`EEX&LcnNK'h(7WTAijNOb>69>O8F2Tc#<`05ufHi`=6Z>M[?%i`;&KeU?4&DABW1M-F9F*6>FIG?;ieVIGKXl>H/C(Q1CDpIi,@a6[ogQSK>4a!OJkf,P^09_GlDc:3cqu<2!ETY'*ugNb7*lI)J_221%XiiGX:WoC^hYFKX'CjU0B?qI#E"S7Hf;@R@OTY.?;je`D[Jtlc$M!;]EBi*m-s7q'$jq1B1.-T!Sd@qi.34br=:A'=Wj'`NA-#GB'Ygi`:8CX-XF-]#:^/->jR-H6dAC[u+CP7,080eW8HADKR&1H@Y"nXmY4MEN;RaC6H*WA-(^kpMm7ceZFAYbPmU1=FaMC]Hu_'YML4FVWA0.1$;fO`eThXZ@Os^9EZ[`DXf^$kNAoO(!a"[R2gI/eV^+Pgd8(COLCob0Q%S4S&tqiVl2tc'^&EY8B#N-km8D`4t#HA%I]7$`.>8RC101oEJVt)gh4lh%Y+V%`BRr.D;H(`5B:e!@)@fOsX&=>Bn\MOs?M%8J(FZVk.4C*21lI2rf!>#+qE#f]!/QlgKi^tZ`Fj-Rq*NCUY]&Q`AL(duHOZrWdP&s'/7AKKK.7:TTC%iZW.:uF<^Yf'-LOgnEH.W3d(ga[3L&TOj'8eJOi>OBF%gr^N3G_6Jk;/nbD>E>Q3qTq,=&9l^V*Dl(hf.cf7mV)D-P&l'qP@0:ICn]B3W(34d,m;Zb&rZObt3f6arc"Mct8caXZaW[`b[`!4k4Z-Y#[sB<;FW\)=+Dqq'MH^h6XlIY-n\57$EHu;SbVQuC7=TJ0#fA_S7LF2C*M,=lGq1Z=c^:oMC_7iF_E6_l^'/=/FuZ&59@VsGYAn-b&f,)<#e`;'DjDBQ8:i0:ApurZ[ouP^.W-!1MHe'%i`:'":?#;oX0%4_X[q4sDABX4\5h<6DT.mN]TM9,mqE,.@Ik=I9#ij$jjd7Rj">[uR0FjtB\i8(03]@(JBECdubZnT5psTH/U87,VW#qYM!>8[#_WJ(g>JZD*q1oS:e+njIBbbMSEtb7Vn[-U,DFL:[O;9c2`='%S=CCtdeub;?R$"mIEB%[uOh3sjh6I.)>PT:U0i]iZC@P`MT#Za127/Ii_lNUG,^>4FiEA6`(M-l)VSROLpeM2+*4K*Hga[478DNL!\5h>LV8TLE+E"T$.7bY#FW\*X->ms_>K*]cM-F7![u+D'Pdo6Z`2tpL"\HY7mc.@(`2tY3X!]$]\CEIW\s;G>3WQSQ(?G+Ls#W,C#Z!N'_E^4'g[X(rf+"oOGSBUDMGH-8;T93-';<[2XO;I/9k?5[R64mQZ+WBJcK5QTjXE6@9>TY!Q!:[fIkR/dGU_U0^@k11.)&A5#lMFogpR-oiLYRD,FAkZf/u$T_&4tF;0GA#0,kVP/P'e'*Wi[I@)#;SH@.I:SHNBV.,:PCH/'kYoF47sJJmTl&t\[hU*#OZnaLg.hU7K6&[I>$[UrYYh^ril8bYDW-K9tQ0,_5dlWHqnbB`dKq>C&((;BrIT'(50/Qd]kc7tI9V3-YeOr3P?Le'QVr8`0n@2P%VVLdTPsO0nK\O?g`A#%(5("O!O6=(qGhcS_0`G]8IXE1F=Lt+@KqVC`V0Ib["Sna?Y[c+%-])%Z-Z4'`>K*]_EN?TLga[2A6aak7i`7!1\*AXeh6dM%[u+D/X_?h+]h(:.?[QjE(mm^.EJiXLjE->kPoQlNWt#mAk$SiN]?j.=2kfFa5f-4gMTlYqOaKKdDo8/(pE1>#EC0U@[.HJ(#NR66Ld'8@J^,>ju'MhRuM/cW!`Q\$#,9_dE6'dS^EW1VV0JD%pu5K.')`s8_te2&?;(>T=FLjRu\[R!j*o.jp6cu564`C$-CZ/)&8-/gm1/QPtt^S/k-nCO+U?$9[02K*T9ji":\EK@R/h=ZN(/Ee[$Aua^8YpV?t>ECT1;f)+uPhP%EMr>.uOgOTZ*0sfNFfo[CJh(pLMW7L0':;ePs3\W"jlZ7Li9p[;3+r*?@MQ;eo^7GY*bG_V`FQq&Il3[C'N[C/@2q+]]7d)H*k-0CSeuf\>5eIMO9A;9qVd=dSMhec`T^-\?r4%lH*.k93>NaPRIp(5BnrURe^rO9:^SJka)]!L-u<)tF+1U0J"!*8L;kt^RU=Yt/YVaQE1#8-M21iOPhl#=HKLX,4bsH:#tE'@3V:8R7,>Al\mot7DKS\/.W4n\EN?^]eH9flqmb2J[8F<_>**FQl4URP=Xi?2PJjT_PrNZ\WQXu.1H`g*(R83&s"b.mR6\[,("QQIjcdjnrh+k(H7a6]-'`+*$GfjoCg:\gVT5gdVW;XjQNDZ*GB'^eLs3PSc5+N8.Q-k=/;mnSiQEN`TjbLFo!K*]_EN?V";dged't;nQ\5h=!Pm[9Lk#U8P;rUjPEN9?((%SqCeG<&dtq$-k^JGPsZs1ImD#(]"fTJgI(qC8)[+YNo'CpAD/bWJP/Yl.p)2!Fli#bE"+`@nT#uimZJDD@DT`[!Le&moG,X1"VK*`(K*`(n$&s/eRLZnff-M_@HMk7i`?D3'0jb((dn4N/`^Y-@=J7sPF9NM(aA1L""3d?g]\8%QcVZ&!Hr_-VtAq)?*f&0b.#9%Dm6<%eihU/=gG6W;G3#Y]lB0QodY'8_.)/HZ0J:#1__)5f5,fmY+L!$6m6=RTa?#TZke`"@$5hEN?TLga[3lLg/]SXl(d;Z"['J)2uo!_!..VlMC>0ehQ?]ldH+)'Gf@UWh[o;Mjn,+i;[p"5%H_"tPV+;*sE8!Ue#lZloO.<_+h*maP]NaMIQ5a`;1XqqYiX5DB#[)O\/cp*%atkWr-pIH9qt&k&6)'<18jU]<4$B`#RJRbpM6a`<)'@K6pE(dJ6!_^SABYDd1%XhVNt[6dj.#NhoR!QKX?M`!r&iSsAIUt6u6a!pl\D?=ZeSbtCHg1IP.g9e4M9C0I/Rim?R,WUF'M66FY)-B=a/pD=>K*^N-u%HdDRE^3#83##`NG-'\CDmC2'-hoC*2G9pMm5=i`:'"(J5UTMHfK!q11roms_>E-ZC\(ZVD\J82uL=+&o`YZZJfM(iq^;I>%Y)0DgSA4PO"8m*$W?8.#GhDE1rKpIg9KWS[;*_QlCs8Ck^4o@E\`MYQ7h_kc-n?hYb9i"q@CAI^8:iOkmR6;p/G.fIO9@^t(1];3Or&m_k`BVl$<>jkdR#t)jWe^C9"`u[R/))XOO'=#3i(db,30O:"J5rEYg6N6$+lJ=>`^i+a"$0K@Gt8Z+1dFjV;B[AM^a@Im8cCNa=XG(O=1\VDFKZq[rT\]c*%:b0nfM"N%dqsmOcX7`AY-&BCJmb_#A@0@5sD.*:hC4A\u&jQ9Qb>;dL"UQuc0>76MHAk_^R>INdr055.Rk$s6\MX`P7i[G?RpH7kJIQt7pLV?1^n<*FLOgrpemVHmDa[G/iGB'[nlqM"VS'^)M+NeXfCk1JT^)[OVo2]+WKC_2=,q8hif"HS&2nYl_l'8A#bf:#o3aP=Z48pE^bH"R4=BM"r*4&7Rg0jQb*MW8FpB$N4''Sd-SOKQPW#?Re'KcH7:oh787h%;EonMn#!r!+1jQn+]S6k6chDo/i?hdI4LB3J)I9*V,-X#nK^g8J8tb_a:"M9kW#V&-75-*2Y^,6[@]'+rd<;f$e?bX0NiH^G.rOS3.!mA_\,Lo7nME.l@UIV1>!1Hslf'2M#PbHSTd5>Q`11t`Z83'/<2@IKZ_gMarJMla4,oYfrcYfH,2g%]03>Q+i=V[ICQR?0;/pe1LU+cF=bq#T3-.mB!SC_Vlg:SrK>n(jt0IU4lk_W!#:=l\io=,N'Vp\\3dVY'fHVY!,(dW0eaNm(mncKYma([##J=RgZd_K`gfc$MW*N!!a;%n?9a(6(CAKJ'PLcC$%$3]=HL^K__s>:^SP/'^6h]#NO8hVbYPdQ5=j&ZVQiqkP0>Qr7%CM@#8HoRp`1b--j7RiLlLf"rGs.j&]6I:CTGFAX;%[os8u`i\6$EN?V"IG?;i't9')4^UIW3:fNT[p"p(eT)XNh!/%tC+i+7DABX<>K*`4j&U0#\5h>Lq#YTUR4#k]eV_;IQK+@m*`F1&`ZW$UB=Gc&`Tg%f\e;_)a;E&b4LC,M)?3m3YGlkFF(U(->_Jf"fQ<7e2pudnlGr3Pk7f4*]isH$C4MGK$+'nDsOXo9]:h7F&67)r0TE,6J:\ibj:YI4?HqZ`O5FmlnZZ0]M4&VJ8234pJlONd;fB.%F3@=.7B]2OK49\]5MoApa75IqUbZN]HGcn=S_dGPf9q29usP"+trS3=X]&t[Gc%^[:uZW2fY=mRHEifW40\[V**r!*6NG-L[a7+GeOE%CFfYl2,R7*$+#9SBQB]jouFFXXF16GcnZI?*d3"0G*S\mV\gu:$%jb'h@-sYEr+cjAcBP#Kb]'>0>=$p'ec3h5OEClROaZLGN0R>qT/#K$NMc)7BHbAr0/$+q"C3\Q).G00$^N\a$+A2p+6fFoJ!7$Rq*k08u;)rUP?7IU(43[@$5hEN?TLh!01EIeOS">H.`.bemm39'JXbu5^!prCKmBpd+-.]Ejm+Mt>fTPG\_XOM'5W+Y1RAX$);EH/m!Hq9L"YT%\@>Q,E+?T23r@#*i+#TF:H9#K&O]VjkdVT$!*MPB5n0L__;6qAD(@W&Hoj_S!A#X0H>o"^`H[/A$f0D'Haj+@R.E5HS5WS9'7kH-l*(N/?A#jap("EoHP><.ID@Ghs:]!i#lQV65o.4-6W-@I/dQ,urfhdH1M5[Xfc/Q0Wk*!UfIW`XtaUW9KoVnC?O'RlBXR!*_3h2W!b1933+S`io'8ZV&5I\/l5cGK>`RJ6!'Ek9,CRXdg%8@V=?Et4<6ni/-<`N`!S(<21@28T+Eb2o@-F(O=O,mg4+Sen(D_Oaiso,'O\>2[H76h:pE'Hq_OF+c\J:q^D`97WXl>:h4?FW\)=+Du)i`:'"\5a-\jbd8:'">H1>K*]_EN?V",B9bWga[3lLg,!c't9')]o_GS'?%"*ENA9mj)M+mh!,2@lW4%^_>6T$=o-fTHZS0fjgC9$R5_k4+AoQt//*3-56u0&\+/7J*8n"T&Y*$Z:6HjNJP<@9@LQUN]qh2i,faoFAfd!)*_M_^)ifcRE';&lhH/T)%8jX#YP=Eu3UCLSUce&hdkfhC3I0e1Vb"0C"]pMXpaS@Rj-fDkQ/^9k'X65@clnt1U(eFU0tVn%Ok^(glf]-35''HV,14O3p&aE$Wrf;T.mmkQVMemr?3h,u0mXJ((ZAF6m]/^O.#'GKj5/4J">Nhc.`$bK.-XPW\AE.(J`BeS+jmf"ga[1V[sAh!MHe'%i`=A=\([7[L"cAHQQ%CN+X%abbA)5;P`404,m3=;qSt.8!0V&su7K5'2a1ouocP,Fs%4[75f[q#'UqBa6CpE*n>!UcSSpmEm,?2Gb,I5/FlO>OD&[Ufd!t@18lRB.C&[DN/7uUSCpdVr$q9ochO>YXl9F('/5o>)nR[&3F;+^%2BRb*5BK3oRcYeiBghk]`4(`Xt<4Kim\F_Mmpil2XG+cqU_Kc`e58!7-K*\G__H?>uW1/Vorkc4tpL:Vu[!6f2N's8*^3If@oDj1/9,/X]emc3=1:@9!LDLtF=+-R:H_Ii>#Tn9qhZhOt.crd`PY/:U,hQDm3P%58,2e;)XWn@e"#UpWq#cXk6WO)cRii*>Ua!BC\ECe1.5Vr(n=RYfq63A%'!#oR<;VM+#IH4jG.?B"pWbUeZVR/lWOMi6VG7X-59t+bpgfZGH&H<['JR3ua801C5iV>N-[CTP%-u4K[YI)>edU7>1'EH/*Zl[^2RITCGQj3Lr(u30?K=%#!LJi>YRXl,Fi]iXeY\F/ga[1V\!m&9ga[478.cBAi`97p[u+D'YXla8i`:%Lf-+5T+D9q8hJ`[]#/(Q=\1[/+[aB=iY.>`Ag5Yp<*leGr&9%>q!J(^Dkpe7".bEY>pqD6==>&k*(irq-@p-uuSjjbhlO>Du1G@X`Ke@(P:hOjg&r4,7_8m3"X]I]b(d=8+>D(a+jl0@T-$K^i$P<[BHs3V,[X!IK$q12^/#p(DSDa?6rqiS5p>b-'T&Dof'9Jps'0XeC0?44enWs@WbQakQJEN?TLga[3LS@I*ci`:'"FU+Zt(:W"^A)5<+LF\ln@(4%OTaAUgIp!]&7HYG_E6XTXV`5[7-Pucsp>5Gn[d:T/qd\(V8W\te/KkdYQhWOW*M]VN,)1OmK&YNJ&(FjrQiktOUZ=$um$[tQ!m(tTDe'KX@_f%fuL49?Eh;hd%Xq'CK:_q?'mVo+^=to*0h1]2"r;X@4LHo#B5d823]JFb:QAb7J^5V6YXZSb'LqF6.g3eF1St5*(jG?7!6eT#%LPI_?A["?[L>8b^,8oM16gA:!E>5nG>UN9N>u00(D3_P%>G\IMMZ-XhE]dED3_P%>G\IMMZ-XhS@TT/,'Mb-a9c5&"u0AJA3p6Cr?#k4"o"q,LHdU%9eD[NZGP[(3:gY@hQh_DL!=Gic#?\;B8.@25O-H3=@CYG20aO*"#,e+FIj8R[42M2C'?]*tEC;8Im04Yno&f9'T]d7=0$=HUd(&2$$i!*&]J01$aP?@V-nK]q@1%(01b.4sIA2;ck%+l7aJ9K67pl.32K0T%/l.b?QAUUY!e4jlU!XO1a.YY5"rj&&roaZHp"[`RAQPC-&H'T&r5rH6j9AP>]Doa3QFIL;`_rkLYtQ&fCN^R$U*\5ob$8LUQPWdL'[.cHmBFYI?dNl?^lZBreU@g+$t4>-gKJlB.bUBreU@g1j`(doJ8=X0[5:[X&qAoie[eg?Ofo(29hVc[FXuY6/NRf=Pd1sX+2Y-@b^uDPk#PhB+!?7+_RPdMIqW/_Ma=EbZKth$nJ6(7.?KH>^g"6gV6-mJD0;2RH:?O;D3_P%>G\IM<`_?N\WaH_9%rQb?(&-IRC5^l/^d[6X0bm\.W(HZ_WS:+g+$qC<&neQPI>e*[ecA*X.aTaDS\s2dmGDCI9Hh>E=5D?X#d9sOZ>pbQmm\s6pr[2YpfSo4oA#m[L!"^.i/7pU&l.R"JP6?bHEHfb\fifDG_08TO2nUbBEdP"^TtDjq\\";K3)D8>0@Yr1S8E!*OlRN*Zka3<_`>qZB#fod&F&LI#/?i!eK_VTRIj=.ZmAmuYOP3,H<][dp6f.KO35lUnHiVQGBg7)ITL*?2@#Y57,65hbLLdT1(_ZrPg0D=nf]X0gDmYt`qePI/m5Uohr)3eRs>XjU727bT>/Q*s:hV6+&KD3_PU/[e5TD3D?=T![&$>_fQ"ZrPiFd@a-rqU,Dn!R`d'6",\F+UgC"o#"\h7Bjl*_8_j)IQl<8F5^aV19$cX"sjO4L>0J>-Tf`c(d$9te'+AinY2HNHI%g?Ol\LreCJ3UgDAf*,nk6DbR%PEYAM-P$(M(2*WH8.1C9t3JJOWB(H>&]Bp_(oFTBkS8O*P"^no<^<6EQbIME9dl1?"%1:QnYLr$4[5s1u3,JcYJHf+AW8!lirM./P7\D95q_UB_s_Rf,'M[cV`LV^`?'&FY`Y;DR#s)hN':8)64`b.Tk:io_,Wt\+2/UTA2h9)VE5jQ1?-B8rIH("j2uMZ-X?BMZg>MYUPg+$s)[X-.P%r&)V[+-\TYUi`kCq/3FPA>;uS5q]2cqBjP`MN"*)A\YL*uCD!^*bucpoE'G^OYm(*a9p$%j:\*la-edNG^'ihnV4f`k$c>ile6,A@G2W=FKR#KcJRK;M"uq6bL*?m##,9,;o4Ge!6`^n%b5NBhSokC!\oZA-38fi",.L,!7Bmu[LprpIgf2Wt7+Ug`8p25mLp+_s&=Y3boA&KGXIN%lLfY5$qZG:O^ZGX4Dj*=n=VljO;Fh`5TYKD)sCLKGU@`g;9]XrqEq,aUYeftfmB@h4@[fH7P*-U-VDOGd>e>c67h.+1)BoP!47E6`ZH2/RICKr2!#M/(.I4X0gEBrLUHd)=!g%]&@Cf[X+(E]'6l[JO7gdBreU@g?N8'l4n$6ZrPiFb'm,jbm\_j>MX8+8R&l!>MXC-lp.7?X/uec)XrMX.'r5ZW.@<'gu?5:KK\[\$lc>\gY`pPRj.CD`Ua#!$Z^4q"C49/_cu5)k%Fr6,k:U\G`S:0ID:7t@Q$W3n1F!'3^2$9'L?3^LFUcu,c1r'85T.A(,R$hAc0n^Irg1BTEt0FG%_t(T-j>WVpH?($Fg$2K$iRaIa"aR_9YNeH!29P3TgI'D.)U>el`IT^b)HI/d\&UVe9e@2HUgX6W,\SoV$=hr[6^5bG7Q>*E1'sH+)W!d8#b8]);k/SgnW8O3I)tpl#/=dO_r_n.E9D[E&0K==e=C$c`^)6kS9X=]S^KY68@)5&3mP2s);V2in4S@]a!6e9_F3u4gMrg>)Wn#3!AL#=s0KnWY@bYbIR[8N6E*tb+\6"hhpHUX/pc*C-$kc<_-D:(_XRE!<@69XaC>M"4,X1%HF-C/57Z*41PidjYb1"fcbu54O9;e7G@$QdT1(_ZrPiFlf[uXZrPg0D3_R+7b[,BBreVk4_^t'.sBY3PdFHE.W(HZqYIaN0Q!)`8mA-o^6,jM7G95.F\g`Vm#%@B3ot(`Q$^PQG+)uEl`e:]]L/.(%Gr'>7c2q1ZK'S6e%m+F*"j>c1R*$\^Zac"kHFN5dYIRVmE\P@Y2iF8LKcjBi@@"G4X;("&$C4(*%HAMbX80";!C'PG1pSAe_8.5.m%OiOP%*e)Z3VE>qf6ufaj)*Rht&%QSehGG.QFbGU1E7N"1%b]Oo1(T.7l7kHW\TQ!aXdhV_!phm)":SB.lj5btpFC#fK9o_a&S\:EdT1RYXrG9/gmJs?$h[nQBS;rAlmt4[Bnio'oiKl4C]uK([F6&.ZI@Vsikb3DW^jq"dYGh)1jT[t^6DoL',6Znptd!39M&Pd^V,B.4l]:F2e_kH^nVAlh=XZ!`6_mItJ\L#mBhVOlu_u`Gd'>;:69:`X151nJVlKG._D#[H'IDC=<2E%$.4l%\P=X%b5<0Pr[gBEd%./8[6\Og[=4R:rXWLkpkCG[!^CSL&+f&J5Te&Vin]SL&+f&J5Te&Vin]SL&+f&J5Te&Vin]SL&+f&J5Te&Vin]SL&+f&J5Te&Vin]SL&+f&J5Te&Vin]SL&+f&J5Te&Vin]SL&+f&J5Te&Vin]SL&+f&J5Te&Vin]SL&+f&J5Te&Vin]SL&+f&J5Te&Vin]SL&+f&J5Te&Vin]SL&+f&J5Te&Vin]SL&+f&J5Te&Vin]SL&+f&J5Te&Vin]SL&+f&J5Te&Vin]SL&+f&J5Te&Vin]SL&+f&J5Te&Vin]SL&+f&J5Te&Vin]SL&+f&J5Te&Vin]SL&+f&J5Te&Vin]SL&+f&J5Te&Vin]SL&+f&J5Te&Vin]SL&+f&J5Te&Vin]SL&+f&J5Te&Vin]SL&+f&J5Te&Vin]SL&+f&J5Te&Vin]SL&+f&J5Te&Vin]SL&+f&J5Te&Vin]SL&+f&J5Te&Vin]SL&+f&J5Te&Vin]SL&+f&J5Te&Vin]S`ORn'qO?%)K797/:<.V:?,PG)FMt:Ih)d6>_HnOdW\s(SXl5;jLVmW6g9ZRi&oZB+n?KSTM(_#hsjhsN1&,m"7o&,S`nBh.upli-I-#N<1D=t^h>RQn4j/VM5e9!(ibrm%=InU(0_6+9)#DThEi6_$jio)%BcV:r4Ih/+4REUR4:"nmr9Gt/)P]!#ik!c)JNjdo,j[43/hCM%fSR1I0cDGlTcZWeP\5S\,&)BDD1[N;;5AnA+qto;Ig?Op0e]Y>M#E*OQ>l'J][^/o]SQn,JE%(Z>)4UrD3[>a`l>D5Abk]iCoc&VBWrB@TCDs]+!2tuesK0+q7:+b6P+&rhi2ma+"j6A>rG$rmOKB9pLQ[U@-:4lo>pp*p@(qO+QI1@QH0)+UjcaImCf21%llD1OW8R'H'BW'5?mibc8S@N@7`rT8j1TLL`KP%bCciJrD8rR#/;_ZAZ\!IFMU`L*(oR&maE2KDTJRV:2=+SAWF;UYOq>,R5/mP:?bi+G_i`Wg$63]40B'Z#?P4-Tenh?ITb[R>'46:Jt;TqPh#:-l^T`JXZ_1-po>S\/_06]f>@<49^U'U$2Y\d14N*mU`1T88V_D9a/M^Bo=hhKAnq%X(:G>^p$_70$_6"ec$jLp5J0.tMb/5lj_=A*hG%r`K`/Pj@$s!;o`K#_G>hmIhWdL4i%):!&N%:Suk,Blpl?J9dgg\>.s3G/P$[17NCRmV!#8r9-@6RqlSMdKXI%8ce+=:>YX$G`N1,ia&[N03Fu/kCq2)#T?s;\+L+-G+%SFPK)`%$TDi_A+&s)tX:krUkjr")\ZL\>HXl:fDQjDZ&3t(bNM5prW9?[K?rQ*J:ild(-=Od'q4X(Or[IMA(JV0t7R?\A4bYrU\!)dtdN+K6/)KjtK1F%b=Y;E`WlZ>ZR/[m^!9+'i)F%+d2aq%u2:JrjY!VR\;dVKb>Kmrj3a;nDQ,5=n$W=ro"^.,S+c[DXk)HVl\cYlm-bP(`W+-`WNA2brZ=Q%.9&i4<+tEp^ED=E%aq1Gc30Nn4H$k^LP;*%fD7(+]iRccPX2Z,9XV^Jt7\I`-(,Z7Z1'\HaEdaJAcQP$h=#rfn]%s2[J-n.6CIh"jOSsSh"/RfJ9aj.u4f3TG%uKs3ZG:s*?s7WA:reoD8pDE/V6F9+'u.M7lWFM['VO@hjW1X&IGI0@Nt*86_pmmR^X-QIAlq6eZ:]au6ac>1-G-BreVkCS\)XK#+hE.;>iLBrb=2XjU8EUoe7PBrf8tD7*MX)r);_BrdZ/@%ZPe'ga1NuJLRE<)Hq,N^.&nIB7M/b[P/n-ZGffV!09%A_%H4QN:Gj$[EN849.C+CKC!biR(--kP4UHR8gE",n40-3?@S\mtkLGUiG[g=G%H(L32PB^s'0K?NY5;!"C5[k3=3Un1E\Aa03_oDf*EMTG6,&K2a3&G7$l?Wui<\kfLm_Q9\?/"QNdT/$L]58nC^am_7&_JVMmC[+:"L-LL(>/c5"dsrpt(qc/5FA)C@"R(]2Hc)?GJ6eK/`nC@KUHIIPT`k%3f#VUZjFh;0?lB/H.7b/Iq3`UCgYT`urVK0(+ef,aF$(`U84(gKLC%#*CX$'E:.Tf0g?MkhJJnPfZqLZXds&)`7j^Z'0$+bJ#09M-Z(`)[Rsae2"'e=eQEEZQ?!G:.\['9Nuo^BrejeHW/Y`'G@=G?Dahg8D7f*D3_PUB\_EXX0WiW@ft.[B0ApmSW^F-RC;rGdT1STp854I.3qYm]hDXYOJgW0\Dbj+G8\,sMmUhDdH190p/CK#@fL&'jd"X*LNu;9PF=`A-*Nj_9j5oY]$;W1Mn^gfuLa[ZWp$%CNi6O$Yo[''/BlMVC'0&/9mWNa0&N9F5$QHb&6d?0Hjrk>aXZZN8KbN?kbSu:i%s3%OEpJgq@WFUD?@Ec%dHD]?Q-Pdu)hsJ`"hnS(VrU+gGE!Z27U#F"A]/ET=C'1,NR[+4iFXjU6a/%8s@.W'<(g?OolO*Qqtg*CNXQaZ`uOA,8CXhL128mA-odT1;U0Q!)`H>S4->Fe)!>YSF.mpXpb->iFp[+,8B[Rsc;Q7Hg;[^n_.\XQ^s^%O5Hr2&Dhi"..i`r%(;c9?%OJAL2W]+92.FL]O^^NiQnqIkrW$pM94R@ZK`^k]n-WBX0n2dD"T'+\5_L)+9c)16lmr,t-1>VCT3IgA>qdD?V?$lRdP\9&,hG'5uiih90kK&(.5TjFPbce/hcG<@,rITd8m_VcO6Gm&k_4PT$d?T@df4*9=oYer&b[j"0!MM9'DdKbClIpH4=!?^5<4?R-lT5B\ZEi58]U@VF(@sg\8W/1b],c6/U\)BWIT6(YR@$&Er423np^a>-a<@=<;n.=sa+ZXB1OQ7!_3!u.343[JWcQaTLjM6p::l8;+r[X&qA<\nHj][Jp\Z4%]IS4nj_%)bkZK,5u9]t+a'!nl`AM?)gBS3I\%5PeUFnO?&6SI=(fA6:f>P%s`sOY':_$bGCDWQ&T"4mNI-IdeFL_qq!XoO99BU49Q1F`rr$fP%\fq(0pg1(>SbX"mtY]gu=.1B9.RQmRdsZckkTJ^l@ehfYaCZK_'C=R(8`m+Yb>n4D^Ti>N#e,Bm4n!0/'j.[h_'=bjh!ic@&l57;Vlgn=\=B&4\SGn7*Y!30jmDO`+Lp6X>uc*m\<9O#9JP5ptIWI)h8^l49DTiei6?Jg,G%lc9F\8!PZdY[cjE(>.rcC[0ABr!JBuC0=/bjWK>.8U.u@@j51J\)f?S'BQf3Brb/\1i8MdHHef.Vl_!Sf0*tnejJf"X_&*mW3$l*97NDbA^hi]Z1K3g%!F/h;G!QBFp4bZ"!cO;>Lio!86%gL,;$hf^WqD"o(G+&l]9RCiJm*YLX5\59)K]ELe$UW1Y@QW]Xes:ROSQg)h7Zm,89pk`1E&e]&?uo!$\.XgT,P^FeJ%EaZq\iK;D\Fe2W';:QE9.gUIJ#gQ!GdL$+6Yi>eLc:&4n>j0)D=p.VXg[fM"+F=?(P[3XgpqB_28ST@Z[fAB?Dt-Q[`&WuT%(uKb<5D_0Es`_%NhFc+oikfn,1IRPB5a@.?34QFK-mhfU'GQk<;$@OlEL[^/FKu@6418Bjdbe]k8=LldB*\BGp_IIo52h&H`fL(.rIWGMH(0%E:N'=)8T3@>2[EdI96J^llG8#f^e@,i.Pididr8iV?F__Ocdja.gI*T]S\?uu[qtVDEgo?l6iQ;Z_8Bf2BTq1#toJ4JHaMgn;oJ0M#'Sb&het5uIZ$1OPB$_0FdI44S0Z$!%[2@s3qZR0qK0d8f4Fi2h[YK<_)1S1/*cd0D<;BQ9o#e*oEOQId5S#n1#5MDC([?>B"_J_/nW4QJG7<3Ca4+.-%J8T*@_gFZ`]R3KE(XSQhF#rRAKL[`='c0\==LcP_>-B[ho\<0lV1D8k)pbmoP-BIGMh^qh3/LCLiZLp!s-P#?O&$8Bdb"X<]N+8al!khANBT8m@jL[Rsc[PI=(fh359.`JN&EO$hXdA_JVNQ*s:h]cqP.!CtD=o)iQ+"93[dlA=4cK>Vn,[H*^aa>;?+me(rX,Tj-4JbR6ar*ajbfC'cVoSL@$&=.)u_>aAKG<"n;o.YaEkAF]XNL@LJ>UeJ[V;hSTqr,M26m$Bm<$Rb;OU5LBBndXB[kk#(o0M$m'G3n8JqSQ[+D'b<1j'!r/YNQF.HZf/4TFPZo!cetB.djXKPi29]X34:E0LTrkidcd!WL@a.EeL+d.G"u6/,C+CA>p3t/_j6.K9abU8jiB.WAW>>be/t;3D[G2tKoh\-u&RG0*3f1D$c\uKt"m>+a&p)5.&_T>-M"J@1H7o)oXF"o!XHG_`F\:BQPdJua[+-\TG\IMepk51]4;cAnn28Ua2C(@k$GFkTddXM]:\2al*3),KOktpt!I0OW\VMP&m.JE0GT5G_El^TPp15:/M71965*O/A*:l8HXufjEQP@J;m#4;A%XZZbLPC$>%s^.9OSJ1_#R1fF*=l!U%YL&IDoY4e_;M"3RDD6!%N\O0*=i[_/J#m@XO>G83*"!6+1-]0aW7ND3:YB)&ejtXAN7[8_u+OO3bU&"BNLVO>T&"]@gBK:*uYRRiFT_#9XGPN[SOs=T`MQ/(6Fp$7rAc#TGWu4g`Ujrku31NB$([l>GF3OiYIRnE1XmabFUd25)aHV)7ps#L6LZS,(50`e[+1q6[^o+9V6/0HQYNR0HN*[@8`cliLnAs>ee'.S1'W0,L!kH>pfjp[GfW6J&H=$MTF3/`a$]2qT)r^4lrgEE1q6s)h(4#]g?h!B20,DaO>LkE*=kBLT]q1SH?1KMp]e>h+D:FafS2$J3&LUOnkcp\I=p34Q4I\oUSqH9=?F"1o1Z,k552LNB4`$cbfE3aiCOGg+$-UOs>D+OR!"Q'3&dT39AXjU8EUoi'GD^'%`[^p)g]siU!dT39AXmXVFe*`ZrPiF[1NRVX0gDmUodt#XZgF=M:5L<$Vai2:YKPYS@6!PBreVk4_^t(eP4=nd7qB[(l%6.+F.=YGqkicfdQuTlsCUBbX5^W[6ZHH2WuZD_4fbAZ,)N0+_'jJ/%5!-a^"OPQ=7g$%'hs&E9I?j)HJFJEVIEs^u-SRVb`_Pq##1@dL7KtQjtD8IYpG.$lc!FkfQEbcpP\;_[GWEA=(+f5'm:^TL17?I:."RDe4QM[@X>o1(U?>M-]41*d[4eq$8(8cn>[)_\iT[I/ee%E5_DiEG5.L/.Xq^E8G?-/9_G$k/n2cW0aROVSf^/`HWL7&0>fP#8]#bM]4>[an:JoBm:+qIh$;rn4^2(HS3^tO"T4QZj+h):^d?PGY!3s6$=1m(XN$sOMcn6>OE!o.>$oNof!]\fn4r[F;UEVs+po>fc[hM:?r@Ooblq<0[=-FK>G\I;T5Sjoi@'EH>Tqbn/T9WrA(1F=R"hme@*nH[mULQ&#Su>$%23S,ST]/pY+Y-C3=]H4c/Mf\RGDuZ:ce'5&%*6:FKXTgY;aM)qOHALl\NmE1UM:!H`@RXbg(XId5glG^1%,r'$AY8o)G_\F'cU>YL9bS=/a>^3Q5eT_TLM=Z%k/a%8U?Mq^LW>cI)V.muK'eLsm%gaY8R&l%>G\Hd.rCQ[H;cMZ[X(au.rBFo=PE$mD3_P5Uoi'GBreU@g?LQDkW\i&U6hM=fAOrONH^jkE(J/_8=:modqmXAqQ$X%!pnD5.eroSUZ3=a"]ie@E1*QF7K,!@/8sCO2&M+)O(qEL8>HVjYMK(UR)QV"@=BR+;;Zt?&K^6#D5)Z3lHW@deO7HhdCd_Mb7!:TI1P4C5IBJ]=Bi=XI/]fC=2&2'r\ARS="q^\DdSV$q\D7^m-q[rC;I$u$'+D7AuIIK1EF+snc4bp*koHSFJ\kMi0e7/_Gm&'K)U3YTTVk4hh@a0mr?72m@W>;c6\Si%in:O58_3M=5<9i'OY,m1!`p,.)D]<(CDHCG3gAq\ACSndE@]2AIBU8(^fpq,XhC1<,b7QIEJ_5/KQ%HH.ek:%aN\!oX*-tBreU@g<-tSER*YdC#>G\IM<]EkYdoL[,X0bm\.W(HZHF#iMQ*u",[e_ZgZ0X3;[eagol4n$6lUbKE`s.'nUV3$k'cggdBR)J*/X%QMlX(:oi;;b=P*]4WJ(_E6B4^^uaTRIS)D,G8b6I.ql+EK>F*bB!lnfD+2VY.kMh5O`9%u1"!:&WI(AE>]B%f\Aab*_dRMVP601jr3%d/(Z]&M6n5ch\O,OEamLAN(t8?2[D4QD\q^mjHX`p&_=m@D#<8PKmgLE\.IC6\M.skeTpiDN:YP(dD=p2IBreVkCR3FMBrf9%D=oZ$Q*s:hV6/T.GLBN+X0e-T9O#2$>C@&&93[t[E+h9`Vld,r0Ptq>C!p$:06N/o]&+ifJp:iD,$A8+=l,L:A&t!jbr.DHR"n+PhGr%sd\ia$ZS"Y-?hGf->gS,,!r?F2nopfVBD!ThSm%R?-$aR-)A\cQV!bM&hX3r3#\=V8"B/1mma-Z#I-;h!f+EZk'X5e2n`J`.:'n]J4Zp;[G;:AKGm5bIqu/1&aWjCNuLoV7(C`HIO[.\])mH33hWq5p0J&'+5U;\,gu%R3FVA`>+CXH#1"5=QTs+bDnk!,]BdZm)0!Je!8YPZO3^Rg`eIe=:bH*_MN+IIotQ_DB_2N-h<2uKH\eC?/ZRrZ%_#)kQr[GnT_jI0,dE!3jCeSdr1'`58[?->dlgBrdS7X5h>KD=sQtXj27Vd_2o_XmXVgcX`9%rR3LG%C%CYJ&+D=rdneQ:1"a*Tg`oj6A;K@p",eLA_t[+-U$X0%,!Q&U`bl)sXn7dgo.'=YKfS_+/&L-$HnNe\IaQ&#:oqI#(_6Qf)AT*I)'h7'=*H^sIcJqkoGq"'m,b!fEH%^!Q;N/&#,6ANJrgp+c!_*]E@.m6!o3rH[FdgWcl-s)3`L)rJ<+^4#/*ra[KOGCW)*Qi[2*q$\kYS9o4T,"ZJTmc:dTf.#-'*s_43,`@i0#IUt%1aK;nft?3H$:1c8oN&"^m%fS?e"\;L:Vfc3@U6"DkF"fJ*mW+p::e'gL!L%F0k3T#KU4&6#C_YjUlLkosB:DL!^&(V$>IiSg],RCa6)/48P.;]*^U:LS5&pD88_@a\rQ[g?M&O>Ieg#Qe8bO`PM?>d_s;s7W8ru9H3%.mIO"6A5^!X0bm\.W';d:"nlP86_pmdT.DRBreU@g+$s)[X'b@doI93R'o%%D)IZO[X&qAAplfsdk2i.E?DqIZH^/PQ^4ekV2T,$*)Vj7FB&5eedR3@\0QZ^XbOuI%)hHhfM$`ZV6.-16gtsjMR!.X%D%*_)%r!_BR>4.>HFr^[?mI^krUFPUI._^(6QWELg(jEHCL:*;shr(33=J$)$RET5BVKC,c)][AbA\Do4cU:tLO8\$h$4^(uTIs=$KB2T:n[WK0>S\3g#nMfWGGm_G^@p5+T4A2@f./bQ[CaP/lDI+3laXoW@t!ip[+-\TuH+iD=B502cZ+hZmc%pLWj+)0LZ9WR,$+#$J2'i9PgP(*ICJ=<4mLA#&LVH$p5SL7e^gt6o1mjdcgLBJ;8lHbX-`#3EnW![oigg'-#Icsg+$r^:YKROMmV#;&(=R'Bra0L!a!fNGA4+bQ(1WSc!WPKFir0JX'r+/ggXpG3=Q@kJ$F<-0Sn$l*"q^b838U8DWRS<$6@i/I>b:lqV.]*6OSMtHFua2I!YaQLV1U>o8V>;6guH%E)7t^n-sR70,A!2_9PaEY30*Q*FXT=)qZ%H#YXo"OL(-PHK]7P6%A'idmGB%WoGqmaF8Ho`&f$o+J2>W-6E0'_MK@J$CjFc*rNfK`0F+LaG&?Bm^=q@rN6Zss#\j>9>p9DFU>`b>`6hJ)k3dB:bn7f9F;(c&@PDbuXIG\LHe:$e;mNr`O8GnYZU&pAY6P9$IljO2HH19LQIEQ3,Xjaos8n.^,p`Z!:fo[,(5I)-]^s5_,gkJQtZe,`)0ZL@@0oHct8)!6SdT1!4qc;E#D=p.jB\I4pd+r5bBrgP_9O#2o[X(Br.W(HZ8mBQEJ>B;B8R%anls"2)[+,7ETkUR\6[+_'VQI#q0Q$JXg?KDeX0bm\.W%&\!g9uQjdBd44%;?p>JnG]$pSe.4.M'M#F7>m4WD&!LI86'"N6QH3fVH3;1s#D0rO!fSCNu:!4ZS36/dR0>1a#n9OQtSRhYRDLdl@J"H%^C1Hb>A%Cn;rDmp0k>4bLlAnd#\Ha4,J/D6jc)ZLKre0`Sf([6)";M3r$A4FE6<(bK^g2qVDh%Jk>!Tu38;@E*@MDhXqKL_((B]iXdhCn-n"BpP:Ds&R-0V6kbHjA(2g^]+LalQGl__Z$;]opC5e,b2,@Bd9OOZD2`lOD,q&r$]Z&]CEf\?sfZUodB0)CfUs,&R!TUohpg3+O+#9A4.06a!5ema>.>86_pmmR^WZXkj2HdoNBBX\K`P.W+i&D=q#,Xj25PA0496g1o)(Y,&2fdT3PB>G\Ii8R&$nh?9.nS;l25:#sra"=1!LF?k]Qe3Ad-SZ;.8e4Ke&U6ji]>)u"0([H515@E82T.>u%.V=j03Cu_.GuudXUm43Et:uI'XDA`LFO*RG:-@ZEpf8HA;r>_bSs'R(Jd9)$K$TqgYg4:P+P?[o$QAlMh'J%VUp?on7r="LUAO+]#$Ko?e^TiMg`hKK:h"8@Oq)AkSQn"TmEft9@YAfV0!Oq2=$+oRJF%!N;pn]\X*`8qhb77NXY_P6HJ7XM_<82U.;>iieNIWIZrPg0D3_R+:_,_HdoL1`[$G\Ii8R(#IXjU5Xd\O"n8*rFLE7KTZX+]A;oo/J\jkZ,)4!%l#OG?4#E7ARA_dTE%n^'@&)()F(e*dq(+A:2Qau>0$%'m[[GO-J[YpKqCXkYusa0f=&F6V8I*ZGU,L:(UU^]K)HOQMX[N][OWI593^0H_S+.])b(fqB0lpI''@DtJ[;5';+HLL.'P`WcYYM*-RA*s$P":CrR/A.D\>nmtbP7sj$Gm_Q`W.ljE->ihXknC^=UR!Li2kSSXO>K.a(,QbO#6fVU-_5Gga#TjS+AhNq<@#=5VEXDE\27+4H@#=]IN)%S,9;.kfZ5YdLW^ZEs(-jLT0_kURg!GA#C?3BV4*(hTQ@6i4ZA,3+Q:G#&ZQo"D00#/,T=r>DM=BYcX2J0e[e!P-"(Y23SW^EB-#Idk[X(BrlBJYUg?S3">Fgqc\k?8@,&NURH>Sd9>G\IMJ6=LD09q-VlfC8]>DgT!mZG$2H"*6A)+KBGPL]$(fTS$_sU7T=c5FbQ1V&%1aDL6;Z5D01a!s4jqt*=.!#UknH0<7Tg^piRXnB>iBA]A\IGKYd8^?XgV]n)I!+F(>SIcjpLe@aba6Y7Uob[>$6u$F;0uF\:@;D08Y..W'<(g?S#?l1R\Q4TlH[`&;>1ZW0b)*UVsqeL<*pD07astbX[EsN-:257%L0I4h(_G=AAr+$qIO^@DI1]Ogl:'D4_;Z$$MDH-EKsW-KDnkmhWH84a,QF;irCpG^F"hnV"&Xp_&iGImjgOhV\"cLpu1A.*?0Aa*":e`,Q+*!h9JCDG8qP1?KRr"EQ',m1far9IA[i+js/3]o$H9d^X>InU-g!-(GHlrr6Sf[!ll8e"+(\_>iie7V]iVoNPB)Lg+jN+b"`INX:2eT*:4J&r"/qX).5Ch2SZ!:\1VOM6dDRl6-j3QZH)UV#@tVV@4S15.GXiuQg1o*SZrPg0D3_PURC;rGdT39-4`,=6g+$r^:YI:8oiaEfFl.1T0R0"@^;UiUBV\4(D0hSX8mA-odT/$Mgr`"8+#]e4SD'@.QR@SNDO;k23",e/!Or!gm6b9C,5g,>s1#k0=KDtF4D67nluXjfO>P9a>7I3)8!;>1K<+uk'<]\#*l^`#`Wkt,MstdY5;XK;CC>h/OS`/f56(.^3&$Anb[msPpaW+EDA2HLVLI[lKo!Z`inU9*mP!kE),*H^TX+O'LUb<[*IVp\dq_qGXfdFGdoNBVXL-N9[+,82@qi!M*Y&V/8R!5.0Pts![X(Br.W'<(g?L;-o`e[;[+/I9l@Y'MF@"XG7G@$X_6LAt=UtallD1PBHC2.P93](RD3_Q@-Z+!m[X&%Y@+so6WO7ur,VY0[$9X0"Xe1`tp`[76\F$!/2"q_\R4CG].$i>,.I[PTj.Qp&`A)lpF"YQl*IJn@*t#H3.[(k`G7<1m2m89jg!7jY%1`abA(qpgE,*TiMJMLDdTpDm%cdAHL[!2RFb(>^!f()M'Ce(N-Jg3jGaPo>7Z^d*"L[m?qW4`T+%I:I"WS'*!Z.\lug5!)4>:AgtEWg[,DS3!!d"*lsE)!@]oLh@&UBm#uf0Xi/+gh7eeqZNCau,_"Nf6XgHV/CcQ?Tf$;OVNO75=%u1l4T@6hR4\T)9V6)pPg?N8'.W)"cUoi'G2h=VUVQJ9IW^YVkD06L?oP)WURGiR(<^.\/0t-FQ"E/\:dYSK;`^>6qr(7LuD9U0SZOlZ?pI!W)L2Vi&=r:Ggog6.o@bO0j%Zq0"hXQ]XcUBr9PWjJISWPU:G6fpFJYO7G0C]OKqacFi3+*RcoQQdq"tYJ`bJPbA]4$=Eh$/YQ4!"n.eG\Ii)+O)>8R(#ARkibk>KsYidT1"M-#JpU8mC,AVq"fh5Z7eE7%,Q7?t%Y.W(HZ8mA-omR^WZXmSbb]p#ls>G\IMJ66/8mA-odT.Fodkbi`b0t)UpPpJm+cWP?T'LfmTD%uUi:r^EXBIHF#L[\bO>Q[XfmScTboTc9J%'h[LoBk,G0+X44h,fZ%gdIUa==scrWq6#_oA)o`5A.`8']BpU*_rd(q^TJjWD[]6_DFBUq*QX2EQehQanm8K$,9cp+?$NjWsB]:p4M#>&-rXjU6;^Se1T'Zs$P]guA(XjU6aX&l+!dT1(_VtH-.BreVkLDJ#IC7;SWRC5^lV6/0HBe+=Mg?Pd2BrdS7Wt4bp[$;GB?B+Z^c[-"?AU$Y9.t^.NEi5"R>J.$*&Up.'2L'9R#?]uuJ:N-BgkC?p9'Uk<olMhn*h[)uQC`4WK@;_$g,MoBXa^fY)CEE6AXo5:TW.R/!)S6/pk%/>AL^IeI[8D**L#doNBBXj5r"Z(87%g?Q+Cm7XjU6aX0bm\.W(HZ8mA-oDYOZa'[R6H>eitKQ!o9S:g^InV`Ef]n&dhaL[O9?6RT=d0u("2m(a`b8Ah;YeC5O#0mK$&4L@E2Ii`cpS&8c)><.[MeTRS]=FhEBZA(^g^u7/S;;TBA7cP(C,eHk336cD1dIm'rjMBuR#D7f5X+Q0q1-6OdE:ArBq@4QUn?TAn2eSM(mM*P,6U_D<&dE'f0.ofUfOh$XGKS:U,drJp*OGqg[)T#d3tpLQm$Qu,YQEHE8(9Us"RDEag-]X+:THj#Qsg0f.dAi1'?8QGnQ3]V?Td*%aHG.T+9E^kgR5A:),]Fd4)kiLj;ck""ZS`FA&bk$QMQgfGf$cWgE4l=7+gE[%j+VP6hnUlUbTPpP*d;dRk1`4\arkRPI>d_DB\"3g?L5'X+qg7Fg6^4:KsC_0PtqJWgpN/93Zhk_mEFtl8@!jB;(-geL>45Qff,.Y,&2FP.#ZBdT.028G9F@=V&t^B;*I^X1Pah#u*"3nZOBb#X(tRl*K3?"4Dc])N38Lgf"[a5l#(n2p^`M-BB+42ZH;rQ=3q5u0T%#YXGW>I\["apN!IKX\]r[PT8/gP7M=HZP-W\SQh\7b8=i9/&[Qg&c2`UL,a2/;R(*hlZ>*ZdjkMb4er^Cu]4">2Yp18]DjB^_Np4W)ii!KL_dhj-AGfKOd]/fE60Mdg(e9#AL%!%5BE.bm_H,Fgqc3m2Tn<]cE/Kc"9L@6GTNGr`:'\(\aYMX>WrYWmbq3t6>Rk?E4FSn'Sdol?Ll.u+`Zno/97BB%m#B?Dnk#?O.\*pt;f3EH^i*=ga?RWmu3S^M_.H*BE4R9.sfa$XpH0o%["XBq7DFN9BWYq$^goMAU!_rf=%g1cinL0>!eaQ5(jmgQY@NLcBm8].]T=fW$HL+BaUj_!J/T,q5Qi2*PN8R($d)=k\QQG*[X&5-4(3qlEYoU!CXWE(f?;@hJj\Xr(*i?(%.Xs9;gdum7XrR@$*3q@Wn'H\KV=4'I@!Pj1YH7V]LZVEC%W-Gn]e6AMNZ3U\=#0F4TroAic(P`Wdk!Qh[2?'..r@/ql`sc5(9XI8*eJ%!Xl?Hj=>ufXcelWr(ha7H7(b+IXj3*VnLkpkCLdRu?cB>VnLkpkCLdRu?cB>VnLkpkCLdRu?cB>VnLkpkCLdRu?cB>VnLkpkCLdRu?cB>VnLkpkCLdRu?cB>VnLkpkCLdRu?cB>VnLkpkCLdRu?cB>VnLkpkCLdRu?cB>VnLkpkCLdRu?cB>VnLkpkCLdRu?cB>VnLkpkCLdRu?cB>VnLkpkCLdRu?cB>VnLkpkCLdRu?cB>VnLkpkCLdRu?cB>VnLkpkCLdRu?cB>VnLkpkCLdRu?cB>VnLkpkCLdRu?cLPr.l5SW*s8L?-lFiWFVJe*^8`a/j.iS$R(LLGjZJJmV3otQ;\FSGf&J5TenXL_&s.72j/Y6!I+_m*!O74$BZrKL^6psFJ7bT>/'bM#i&Jl=A+kIf?s,9e\=-O:K[[n9jn6psF2`*6!j.W#n4&J5TefCQ8r=CqJ6q"tiUoi'G&J5Te&TKsJX#&JpT.dp_pd^7W[n'^l6psF2`!H[UeUP%&*u9?9nUh4F#@[g]Jm_/S779O37)VTUZrPg0+sJ3T,-E;1orW_Wq#/05([io(Fn+/(Va'j,pO?nXLkpkCM"phu^NTYO%K;Zh3mh!CHiNgV(4TocSVp8sO<02ij9^DA$%o0J>=CqJ6q"st:>.17'bM#i&JC:/T)iL=oI/;-Z2Fu&jD)cW77B(4.GemQ\Z8&h4N4G#l&=rGOl"uDX_$OiV0W7Tou`ilJYf<;jecelA7qhpBI^A-R(s1L[D+@_G?#Sn[Zg?N@$%K2m7\)-&_m*=P0e=\^R%)2*5S`ULm5.BGqK,Mm@#2`=2B,9e*GEO[tQ+"inP8`5Dh&6-X)UtXG_7/6ndl`5uk8'Ru0S:7ei*0scbX0#B:,7:b[+1)RT.KtTnc%P(`TJ&P[.s8(J)^Irb?t1,qnI@4q6g+70<`.JIciZXs1\-NDr1Nmp,g$c/'"uH%JIigCtcQnIqi%m4b&_m.l_RHt)W\/SHkFVu3_7s68N-?Mk%dIrFlG/H5$mGZ+Mmn^JUK`5dS_T8;Y7+Z_nN@6B*(Tg$:WEWCZ@A3`O*.hEUi&&\bE"Mo\C6.D^4dT-t+R:;YAGUcmH,+]`fX0bkp>XPbj6p)3d57u5$[+27[^:F$*$bg/mmiDH%ih%cNH1@>-+sJ3T,3$un+=BQ)BIA`dYU@pJpdYf:&)KZZrPg0+sJ3Tin9L'8m=_P6psG]oq\^%?7p2Lh_O=eL0n"&WoPNDhm<+8(]V\f$VMKmD\gI/tYdJ=OHgdkYGXWlaCMJXQsWG)6eG]'=ZB)FB,+2$TgO88/$]*j'6R;XAA"3S84a_r^$AOTeq`tuC/8^%.)Lj1!=Lj3Zq,3%WLlVGI*KqOtjT"ppoTAUeOJ3Z@T+lt7r_%0nbpB"(VC8MZ[@&g>79;^r25J!0E0i4%K;h/nN?RUn^JUK`5dS_T87+f5s&L;JN]\j_*;r?JUh8r6m*uk)EX)h$'Vei>=H1>'\c$o;pkFTnSCd$V6(s$!fCh=ii-ViM0QJ)X_',ipnT(@i+n*t]_KAJNUZTE5G1].rU,9WHr'7Z`@j_L6psG]Z\5"-nNKsep_[3D/=n).F^Kg8;j<#pd0tsFXNQ'Mgq[rABpmQGBO!gA`Tg$:WEWCZ@A3`O*.hEU\VlS6HBrd'!Mdi03GUcmH,+_#5X0\V(,2t/m2A,IY[/NHUJ'qAe$mNkbZ$[na?O<1hO2W206psF2`*8-EI-W-K=XkMnHN#!i5=F3T+sJ3T,'HL]c(qHc+sJ3T@Y_>@-Gr\3bH;laAcbLkpkCLk2q``OMd,qWe]1n;)mVLkp9c>T)hqW/7EQ4HE"d.O$&\,3!**g?OEgXWer5+sK4ZUog4!4,k*i&J5TeD_Fng3Bf&XF[&Aa6psG]_t) +endstream +endobj +22 0 obj +<< /Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595 842 ] +/Resources 3 0 R +/Contents 20 0 R +/Annots 23 0 R +>> +endobj +23 0 obj +[ +24 0 R +25 0 R +26 0 R +27 0 R +] +endobj +24 0 obj +<< /Type /Annot +/Subtype /Link +/Rect [ 428.885 469.692 448.388 460.692 ] +/C [ 0 0 0 ] +/Border [ 0 0 0 ] +/A << /URI (http://xml.apache.org/batik) +/S /URI >> +/H /I +>> +endobj +25 0 obj +<< /Type /Annot +/Subtype /Link +/Rect [ 487.0 373.392 514.999 364.392 ] +/C [ 0 0 0 ] +/Border [ 0 0 0 ] +/A << /URI (http://cocoon.apache.org) +/S /URI >> +/H /I +>> +endobj +26 0 obj +<< /Type /Annot +/Subtype /Link +/Rect [ 196.366 258.192 227.353 249.192 ] +/C [ 0 0 0 ] +/Border [ 0 0 0 ] +/A << /URI (http://abj.dk/dxf2calc) +/S /URI >> +/H /I +>> +endobj +27 0 obj +<< /Type /Annot +/Subtype /Link +/Rect [ 208.549 177.192 228.052 168.192 ] +/C [ 0 0 0 ] +/Border [ 0 0 0 ] +/A << /URI (http://xmlgraphics.apache.org/batik) +/S /URI >> +/H /I +>> +endobj +28 0 obj +<< /Length 1857 /Filter [ /ASCII85Decode /FlateDecode ] + >> +stream +Gau0D=`<%S&:XAW&H%am2'Z!(WBMl[VT6,lTSpC.@'_7`S$nUIW['[r^Yb/&R\XcQTdLM]>>oKO*_6;s3VMLH%l.SV`+h'K.&rC*&^No2f:Y?hO);=Lk(F.7CNi`0W6?LuH'\P;[3CGQ`ORIV9LbSTHL8b5nlk9g/G^PMcI5"1ms+#mZ"Mot0mH$pgEMT(mk9"@5rZEaE7=bfh;IlN_F^?t<'C%q=YMNi:S7f\](4%N+Cl(hJes\'W,'^N%UZFTTF'Bco'VE\\_V"WR?I)XUYA6uR>hGt81Jmh6k!@W0-H(2\UZu#LVkmG=/t+oTca9&]G@qcg-rTJt0I25(#g>s@&8+Yc,=aoX.ClEW;9CK],fpusK,$&kV(nf!A*Mm:bk62uDiBP-I'!_>?THCjU>3]H_;Hl'"\jCFE&1?kQ9s-1W^WrP].73qG"O9UEp;pbp*`4(jP)SBGkGZ%U!F4074>AfhH_WJ^7LA!_,kn9@,Ujr8Ok&33Q[lQqhi;&N7I-Q;)Z;4h2.)Q0m'V`[d`:^)KqO[$MNOg00epnX2$iC7tc+DJH?KIs>G2JY2\II7+H#Rt8l&uZe'"/sh,#;>Tkt`%$MDcNqq;5H^@hecjKl2WB!$Bo`Pica\Bq@@=N*2l](H*ehCms,>T>1;?1DXsSONj6bYN"Ue8Y1G!9W2fS4Nk(M9kt_p9TsI?O5-Vk0X;ShJ+;#D5CV%*&]@5Z,0nEM_TMJTXA\'b*'eRBRch]G&D7iY\XAL2i"/)6_eSge`/*1d1giLeHk.GA;1PL(Qr=@TMo&o\YbV!`BSZZP;WiD@iECfS4Z@IUpc=nH7#<0JE93T@?`mm+VC4:KN=n@IC0Fku,gHgr<1B^j2Vk,'UN&s/]mG2T)'F]W177KjZVCF!oRu7$QSE;72UC1K?=AIl4iC1Hm]MQ7;p21MaZ'L9sV%JbO%+1'535KWoAo*"d>Pc5hg$E!p\C5D4`B>_7p0X.=Q9F&D"r=MTBA^Jf4-NO=b4mGKZ:]^Ylnb^pQLUmt5j3$aNFVd*XaEGO>T$#gW.6*i&rAYd9"RRHE#Jji)9WOTp3Gj#!!=Wf[o.hCc7@pe'#R6"JhXM_Q=Pj@k[hqt$DbA$'an3Wh%;Dnq:"([X2XiP'uTb6j$Y:\1V3!5O6Aj=7h4^\Kj.Q$k0$o"R;h[;,qR/EVtmm"HK"/V2rpHT$7*?A1:#)F\HUr6h(C>M^=D>-k;k?p-bj@aV.+nW8pK7>RP3A#8:)t^MBNV@=,2Y+K5\7in,=tBH#*c~> +endstream +endobj +29 0 obj +<> +stream +Gb"-Vfh^+1j8O&u!DblLa9)r8k^eSI8Rk(X$mC986QjFTYT>p-lc&<"N:8Q$o9Qh\X)#HJS<)ht\s)Pc%O9l^_,JR$duqd0JiL]K\N.c5:&M0ub&?N%rj]:"gCG/.9^q+Cg?b`Y`4P]ko+bq:.`ta]SGLXt=NA`Y`3E0ud=S\?0?[[hWD30ub&?/4SDqZ-t>)RI$f$bcf,9o4mhM`Y`3E0ui))[.!M7Rt'fX:m5<7qb+Q0hY']jPIR_3@uN.^(h5@YgF@C%56bIV5TZ=gJ@N3RT%-^roc1Lc=A=5qgR`noCuRs+H_?G3UFDtVYMIl.J\5Z!Y1N%Mnhc*A\9fXoNO9lKnH0uj2Cn`p]qmqh8`]6YF"hUnm?RKI:IW6(]%KUNWjBW1/MPEEh$`GNTHHP,/i0ZMsMr;+=`3ubXD[hWE>%H;^R`n9%'?[io>BB-Fh2XM72e^Y/;P=ke#89Nqn%q"9EIG;a?>WG.Dr"_Blc])JE"#0Q5C/\dS6bSXiKrHfL8LqIM4+p;E9@2PV]%cQTfPRgeZ*0V^W6N0M=@R=RnZk(SK3lYYde.:+$e%Pt=f4%A;j.\cgaVQ9HKj^4]RM\gXV?rX:(k4`P&c(@Q]J-P\3tV"m>LT)@Os>JDY@V[9iA?J$rt[H*e)_0=Q=D;gtP@4c+PMiUIIQq1XjFjT"7Pq'SaW9;W23Fi`'0/2]T?(fBlm%2Lg0hX831DC`^DA*dKYgPXaCgPXaCgPXaC0ub&?Z]EjugPXaCgPXbN^#)jFN`k%GHtf[8bA-&q:a*O:#P*Edtn?oDq-[g4eM;2;_o"unDICjXte0oVX@BdLAFV@F4(RRhu@G@1V7lN4qH&S-RC_aYqKC!G)N"LT;e:nB`r8?EG_\+>+ba<5+s=Oc7=od92!$)7_U_l=CN2JDTl(#kDU7GRnTr9<4RWpHD57bJj&86PRj3^SHR!Qa$aVRC[#a5M%e=QnibB(-HiKMbE:%NWWD\6c0id"?-72OI@d3#(GJ$ag2@6>f/rjpUmg>>VMfCKj/Ij*1O51BF4:(YK9f,SgfsmS>K``5SoCl5:q*g=7VZchK82%TO]mGD/K1b6"ed6Rek#P3#H_"QHFF#\>0]ELCGFU[3=cWB>_!(RMW"$\Z=k::QU^SN\HLDp^=RBk6et`nBlAj.okmV`pKGm/91o<@]dpIuS:Q#=7?[R?mp:MnYC%4p1gL+Si7=2<:d7Clh0`nLHR>2I]7nY>9(uMr$D@(R-\m:Ec"EiY_HfahdNmU`3X:kXgs)/mTVY5ihf;19K\!c5iEhGhg3a7q\"&2bG>>sP];MDc"o"H]c:ZOlBU.(!0g=lOoC5@GapCn:k<\]2\CW")hsQfB`=NNk@EOl*jnP*JOl#<3eaqfV26t^"5iO33S0ufS-DC]TTDC]TTDC]TT`Y`3Ebs$"qDC]TTDC]V*pM='5mq&T'A8%6faLYpVAH1^hAW/@`rr$O`CHU_.M)msL:,b!ffPJ?\42i"j;=,7A,l53XgkLCXgkLCXgkJM@uN-#qm`cc#?-1G;)jI=?NdO@j:Hhdu(h;piTB?!i;m'$$N\ZD42VtNenSe_d6;PBWh@BBY$^es&J0TF\Cm&e>)(a`.?k#%`YY1"om%O?1Y`*c-$TYWA'NpB[6cS"$j$AK#^IIVfQePc4?$\2E"PFQL8Y0:k,rYg)#%BtB$B!@:"XXr6G=tujV\U?*corN\@Vbgr)Y$%Y(NtA.eoRd+Q0d>Ib.<`3A*V=;[6h#.[]_V$*HoTmM8.Gl=e&kRMi&P"65sk(irbK#eR+2P"QtV\H"ok3J>&Q&9KE=V.uu!n6H+1V]K+:)Xt<'_!eEB4;qP&/qVDj0p5c3<(f(\r*D[9fAoH4.Kt$lJ>W`Zp1!NES&'0cj8UGEsRd&@;IJ#j($DD6;riHH,%K3b0J-^b1-&[@mnQT2-A@];56V*S:B[Z2r_8TN%r?/Tt%57XgkLCXgkLCXVbQ,0fJp=XgkLCXgkLCXo:cDasg9Hn$l`%Y(([pp.mkP`Y`4Phk0$T`p/rA`0<>LS[Y$n[DROX$D]MS_[!khYfN1AMapjaP2S6"Ce0=-qFk!@/K5Ege-U+>=b8gVQKrQ6EHDX8O04ag+[mcSNX0?o+$mn[*b::Y%')i]JaD?V@J/i1=?H@.AG<3Yn&k4:lG!X3mre,HDnrlt$E?^^@'D!tX92VB@&>W^$7pUn;O5\%$0Hdi0Fm59CF"&GC+8]h_a(BsOX+hl%HN(h:bX:"Jo4teoJ%2;2F(X4QV^o#$=).[#eI2F0#@!9#E;e_@CRrqN$I#K+'JujTe'V+3uZS01mfKrXbOq6Tg(ISe%eI]*/p[8>T_MCVk=un#!N\)Kn5i?:inT9S@2nr]5'ZkOasnV)R&U^F(Z"NrW-jQ2+6*ZC9J\cTAe?*6De;$^5V$.gf#&M=m:oh,I-qaMaYE*D0bLl0[hZ@e[hZ@e[hWD30udfI[hZ@e[hZ@e\(1AjXo'sIh2RE"?J.]6\g$,uq,A5AN3Rk\RVDG"?&X3S@j[kRYnABM*KY:j*Tm4X@F"I(QoglfN%Gi4$,ZIX+e0Z$_L,]'bR5`6!l$GHT*bt]P'7'\Ei6c@O5s#f`=C!=\Q6Q[q^P][bDKiVL,f'F8@7GCWdYBsY58g4Q3IUSDo:+o9^p`a"ChLXbt1g-@$D'ki6eA,qIFQ+VLVSmNMM,8<3V@Z#fGoD8;]+2'!-`M?li&He)2])$]K`&@-Z&>j$5L>#$4Ba_E\n#qf?2d0?[d7YS;JV"uprT*kXrc?qQ$m=2U7&5!pN=oL]b+,c#.b8G*dQ]%XL=)5s`sUupFNl;LM`GmL!*3W_3T3V_D7n9R4TP6D"S-kqEfg/_S%I[;(;Q,qJI:h)o<'/`nAKMeM!gPR`*)#KB7D8gA2D8gA2D8gA2(h8N0fuIsKD8gA2D8gAbYM<._=h!b3m'>uMI&`,[`n8&?2qqBn_%'Rh.1t^&`IllFF2jQ!\nc=X"lius@(G2k&;#a*-jeDW>2W-k4=Pk%=UUd7YeZe>$XFXSfTmsG,\I<4[0b#-.j<3$.:p>99/\&aKTskAYe+WpFEO,T^Z,Mt'd\L]Qi__(Jm_7T[2lo7"@8@WDTSYH#1og3e4HF7TU*IUU`.C=15*J;@42jA_h)SV;j&A@+7dW2tVc?l;M%1;H#6-D_+K)),W48c>&bkZ\5%*at^'(CErM5Zc!TE7rFMDQef#$i-H]PZE(K"]1D_U9[1u+;IDFHEje#M31e@Gn/=Us^kld'kn+X\gD6*?8c*@GW,+4l@C5f*:U';"7'k<1W`ZjENijRjTijRjTijN@n6&Xtb`W*-[T*BR$qZ%5=QGc1\l<2;Bja_-$d_W19pstK,IQJ=C7Z5HHFU%%I/&#Bcp?9\![%J6&c.[heFk;$G)fKq";7qnF5:`YZm%EeG]uoVb_tr+W5Zn3:NS-5%Z`b6RKL=2k3:oC?FK7Z.4B'[bGHZ'[%?48HJf>BOC=s^9bHF(E:]3:e5.o=rREkhOYD=YRH->AcnCDkOUqm(]q)ueB!O;7;na`HeD`Y=db^"C5f*:U'?OE0\f]f0ub%tgfE32gfE32gfE32N%r$-W/HGQ!>UWIGpA/4qhHl?/KX%7P@9S;"m4Q?^q=%f/2F-@ieBEpW)&$@c88X:9n>aA'nRY>(0`&"\s*4g/X`iQ0,9e]Vnb(2C.Q\ZM,Lu4)j6.q@9^^;nE@tcE7qBZ=[=6V9e.>s8-#i-3VZ:ii&2m4b:#@CWF4=*J7CP@m),g\cm8uCX2$KT#3u'M`o.Y?)G12)J7.S6(]#pQ?$b27_5W'F5n2&".0Y*b"AljVk=@A,$dha*VLh1%#a:HE-OltFiY\-Xoe?u\!)nA&(jZk331'i[Ss>u;b5g!f)X.'OdI),'oa$;d//[ZtKnA@LnFZ5lYaLBbCoN*YP!VuS%0oi3g#D8$[&D]4H[O2*KG+;=d0b(2bYB(h8Ln`,3J1`GNS2`GNS2`>E*DZ.[07`GNS2`GNS2ocMjfG@_S%s5[*iN%r?Op!%Ya>tTXXhW6F=S.'I_b_$(C&n'#JF(,'e-*X1&"W$>Y@@f[ik56qM51$Kf`O?LhhNe>Ln9Q;&gUdG$5>6]THPXEp@gh7JqF$]pC_=n5Qii8iiaMi["d&4%'@\U*UMC!\%W&?D$6FC*JBMsHapXELAP@Z*+T_:TSI^J3$tu_:JqH/IK<@-PrnRGq'HCBY[a??S%1AZr(-piP`DBVK#DIX[JqiP:TH@8pLcj#B,^"1F$MsW#J-Ka0\S&@H?4e3/7Cg=mJEaLkhZWMQti;`aAVLFirs_tlJT+)0^s/fQj0kTC<]XQK;JRa1:VE$6a2NF7G.G769+JHE2>#bW\5oUCNXW)*6J=g?Rk7E=$h=(4;`fn@!!LnFM0\$:G/T>Wp@c[iSKXRoW_A?eG9E;%-PHC\Hq;.`DBiG$/+!7Y\I/b`%R1(K890;k+BBnFa8/@)\!+fY%#1=T?KX3:Z/af^dcDpc'o7eGf=DgJ;5/c>R.3p93Fabm@50XdX0GKC5m,_.)UC9I@!u*AD&/"lZkteQUZ+PO4SLaOKiY@t`To0ub&?Ii5^1[hZ@e[hZ@e[hWD30udfI[hZ@e[hZ@e[hZ@e@uN.^B&>/KeY:71@Es*;bRLJeS?6j@_7^PMHhKgoGA[^,HRLBF'je[kH3Ia_;)SB@)jpY_/2btOAe=6nNIYrp+a$2l?q/khJZlU9tjFS:c,Q4ZNgZE'D?b6d0c'ng5%PEHcAN@8B_XOl_q!PK-THDI2,C>cmVU+Emro"B]m*$(r%VC8Q"-o-,#W1gB4qZj)/`Z?@Y\S#:'GooJ='m5gOsT^mU:^UY/'DA=L'[<:e2OH:"YM2=Reg._;>e$W#>Ih7pd07j(KItOABfDpD;q[QY<-:)65!n:0iL[1:&6dq$sTXL+ghZG4#&`g@Pm;BBHe@#_-B!SPia>V1aaRWot+s!6!-+.#'8,7LNu81@$*&VjrBiqo.(Togcb7;rmbSaZmPqk\#$ssIIgn(R>!?0H3qgO\H(c/SIb"ue_Gcb+gE72&g!jdntBkjdBA9VPoJ]@j'l\;/V)8*WSi5NM=m55L3P]Qa$MHjVShft"OQmU_PomqTV6BTr;+Y>3-/''NMaLobo_II3"md!(I;W[;E2C?&a]=A+WT1G#`e:Z$9]E_:g9@sUV1#$e('LeruXn-Vu8CgmE#P1^a`1DXWFhhK`7PNE;JKJn6=lp?qc5`gD@ZcgPK;Z:59(`18(m9"_o\AJ^Xi?6L0W-?l@+;g@L6=31'oHB,3i0\L$b4QZHT]mu-,NNeQuG2aYKo"Sc]k!kkL/d/Mc)Ce@:TsRMgos`2-Q(86=I/>f!psV1+A*6n6b?G?C70W2"([GL(:);pPXbI9(f"ob/HXPU:TAZK*Z6;:k*S.@9L:(eP+I00ape`C5R@Zh7Jj`J2q4q5:9d[e^-*o2\RE[Qo&g;:(@f"/A^(+o:0^XfKA[e>pCZ<+hqF,:G^-UZ7F!.I:5"J=a4,_LG#8P02BA04ADgGDr]FXU67%4qJB?lR5g;dVR&#;Uu38Aj9:E;)gW%/6h93jV*'-iCPi)*D^q#SpnNS3FFsr73jsNlFH5\,uT*6n'"$#/RDX4GFQSO!K?p=H]kBHD.FXJk],rMm6(C9`t'')#DZGf96]aJMbaH$/H+m60m&X)!Tm;kW0e0!Lg@JCS`_.SJ&RH$Li<XY,d^#rP%Dobj^2.[9LtVWp!;=.FrTRXD'549>+4Vr6"BI(3'u*1F&1#$kMi5WA6J$jI_SXEJQngu.p\JD5t9l5tu>MD<+Qe@;WjXgkLCXgkLCXkkmP.rHlW(h8bL>B*ke>B*ke>B*l\:X/Hlf'=@.R`S,RD6NV?`Y`4cSn>O8(>$UCS2':(&sta%-\S>dGTiG&KG0#8U(@mu]bk"XbR^KThIOHh!Xh--6H->6(-,<%Yqo*HLF!F=W?i">=Y_,FRL/L"@C]N3Y[g%_4r8[OqAMC:SHbFo'J:(Q#IU]3Q?^65(r?)iLd.-T9YZVKh`DR*ZV<=LP<`)^((GF?iRU%597A.(hH22`aW[r^YMINOjcC[<);kF:mFN!,AAdJWd@]&2[pJhjbg&[[#/]W0-2m8b0NZCID!766.qh&#Vh"%BU0G;o,1_GlhbH0__K_P`o,u_:6.:N4iA%kZ]LWrAE<<$@_eg0g)uG#?^Z^5]&$d,uHA:$)Vr]3V`5F@-pg/\q'APcN4%TQLqAS%i;<<7]@A\Lu`=ulgEeO"E/$)jge$.W%r6!\1&@Z>CJ)JY>LV2GSOq>/Fah0BPY\!<=]#)gG)/sd7LrW$nAEEdEe0ub&W(ZMm_[c4aT[c4aT[X,9iX^;#B@Z3&8DiWS0gPXaCgPXbN5J+&)cT*9"r`g,c'U$?&iYfSNKJ;M^j\"Uk14NrrDn5o$n'2?mdb*23W&Y[S:SrFeBD]Ua@uS)'^"0X'eQ<,fJMpWXO9Y;=8MFfT6^TuJ2'L1h0$G>?/qajF?78YV8c`A75:MaK):UOr(V58gXu&G9\,*n&-J4$k0*^#Y9.$LO;S2Fl2'(]#)5'`4V>'/ghV-;KrSDNjgT%\E*IPF,#hp##Eb(RO_.+27b):Q2!#RCG%h^c[\fK3]S8fot[iXDJ>IN!BMb&_'kD6YUfPPa.S$KrVEkat(Z2''THs9KE^GLEUDb3fe6b"A@:]Mi@p](n]oIq_-7&8jC4BN(oVk"KR\G9+fQ[\OcP6paJGO+\G8Xq0jc9j\N3U-s=`18mcQu\>,8h9h#`AmB?u^B//F$"HqGtB:]u&dc<%/9BoL)k4IFt)#ELdsYhmlY-K]UN\6GcYI'9\pm/"WgT3jKo/8s_k<`8)>3L>bF?^D0[:R2'[ZBBeCE=2fR/dccCkjC!%YiE1uKWFAOAL,TVQ$o*=3$nQoo?>`_R8p'Sd]*[j0)PapVGU%H2sTk(dB"3N8&'rB&R-oglWS2p6[gqU0%qRUm'@AjW/H9J4u<_g+E\?2?D>B*k%`Ya&hijRjTijRjTijRjTijRjT@Z3$"qm`cdiE)];(T^(HdA/B[L.B8_&g;mm3>&=iTUXsH[HO-n*bn77gG^Zd68t*Zl^b=*J!FqLS3eW6)].3*.j)c#DMk=d*O,ICWO+?FW?.Z*Co):P9Y%C6b"K!lo53Yg\um'O&*X^PC,'Q._o\t#D`7%\==!^dZY3&RWh)6itgV)]),4VUb*0"1i8"#p.pY#`kI((7K`)p4pN6p)RPg*2F[R0#>?\HV;$1aBd=+>tE8\[m4^o_B=j0bN;eofsFNQlG*`m<'dcua>MK]Yb_m]E**h,\uZQJ9.]GCG,?9q1*=bE(#!rs.b9qD4KILVZ+,%OSk!\?2WfgPXaC0uhkX'=S^c't4pe't4pe't4pe'k<3-fuIsKD8gA2D8gAbTASlS>unY:Ih^CHVWYbrpiHI5Y`,XalYnK/L-H;?El"b[$YJ3b_J#OJ?5WJXXMZ!m2Y&k1L->dqa9Fs1-!5:sK4T.goF4nKgZX]+*Vi8DrAih!s4&:i:Ve3E+fBo-H;md1^<7?)V5a7N4gl=\#n-l@(E8ts#)c9_F1=C`e*q-'Y"6Rmk+$RD@>m%K(Bnj*7r#Df5M"uBj:bLj/R2iY[8/^2XPZ:NPUE*>k!h;Y`3Me"mODYr)m?<\#?>Fa8lE%@5@E1%*LBo:t*/#OUO9p&]CI)0hASE@Ttit%e0>t^hq&-`GNR2A*dKWgPXaCgPXaCgPXaCgPXaC0uhl4j0msUijRjTijS^0DCbC&?Mt>+Y%'Y,>Bup9q@i@#dQr9loRJ@sr!'uM8/.$)i&7H_bE+3M$2P'E,rg&3@+V6+6_=i`h+D*4$Z%'@&aZ9ED)b$h/*2A*dRR[_aoh7^3pC-_p_,=jIL=YWcbMO<3Tu75"S9u9E3]6i(`kSde)c4rr]pgLKcrQ"Jghp;bV!c``Ya&0;Vr!QIErDrSP-hnEJUm%_L[%Fo!^m"gC/PW*Un>lJ_,;`4K]WT,DPOBG$`Y-$6JAq#]@[oND#H./ih0'+&`\&7r9Mu4a7u>SYVfO[8N!=G`9[L*PlTn''p?1WQ3X@,?ZOmE_5+s/!W``JB**^\mfWn(eRYMD.fUoN8UrVr$Afu+'b+1YN&"R\+QP=696`d:IMMd);W]lETAcuX@H^Ar]107bJC.$#6^7A^?G9@e$OH+G"Fc&a,[pq1@G@Hq(S1*Sq,3r!40WSgf@A6[c4`)N%t%o`,3J1`GNS2`GNS2`GNS2`>E*$p2O;V>B*ke>B*mGGINk6BAo:re_N.ij'uu:Gr6>LV?HCXP6>A>9MVUSoBI'=$@)3Bi0'VA'QE8:8?#u;9c$8S^bVDdG%E'0CkLD=(0H;8R0QcFYs1`^/*2A^57`\TJtYueodcYbZ1h06m9^CAI=eVG"8)8(KBBe*0J[BpB:V0s#R2Fh%Y7efC0PC*KE"aH).SU[2Y5uIjiL0!O2#pho#b'Z!b-&J#8$I`LS1gcr17LlN\'pAn@BPBf:>IX7d3Baf-@i/8scA)_W8TY5EEj)9tDf601cTki\$k00"Tc)Rr3C@c786$Fp<>;5s)A]XY!b+FJiQiDOQFB&Ngt1QIIYRIl"&d[_mSdD6#+pLf7J0bC4E"?\`2G\BK;3@+PhRN+R)tRC?u0+d`D5kn'e1AMP1?@Wd4M/T=oWkI0BY@Z3&80#_\HD8gA2D8gA2D8gA2D8d?%D"_jQEEdEeEEdEerF`UioB0H=jZa$#C#XCT\pO9^bSu'of90N^2jk;ps'fX>?XCFA9*C;>$/E+&@5J-m,K\j\9`b-)W\BS?emZBQS14rDK68j]/G/;FmjY.;3J19Z`KV5Ld!o>9nHZ)Qd^uoD7YNIh=gp]P>amuu[6jRJ)];A9%"qh_h?Pd$Pa34aDThGcf_%:KK$3`*?Sh-N]B'T+FAIGA.X'TJgfB@g`nm8rXgkLCXgkLCXgkLCXgkJM@uSYrDC]TTDC]TTDQEg([[MI/LZb+i='[sV&9`iep=09O)O&#;E`Kg628t3gQiM"k1,sE.bE*"Td3S4?VLe'P]R%OWS-mjHFKc9fJ9>gb0Tle*_)*kcDQBB%0[Tb9N-9XVSSc-Wji\,&W3$Hq5A1;2`s;T/!(*ur([L@OED?JoT/">&@n?QB/aZVLFdL3dK)5>%:fCX'F(FlR7umKW!RCiR"n"_(hZNu;D,:?^jQmoXrH;??Np,\.CY-)I)CsqArC-Wff32gfs]_4]Hjd=Ran2Uu2a0m)Ff"L"HmaKghYm8cro#.h,g)6/u7l5,,+4@T2S7]TL3<3+Y;jakmm(dHq2/Xp^/&iE9s%M3KgfE32gfE32&TM#p>B*k%`Ya&T\?39C\?39C\?-t7[e`5OXjj.Ef3jq(4RF!h^W-eCSu^3!s>)Sd/QcVlHP%>:1:MN*=R#rI@["G^lo5Snb>&Q=B>k^pRacnlU,X&]\ntWARhDfE*G':fKZ#)P,gbEWqo#YreArB$kN^>5[JDXil^@%&0;4sXiq".(n2/YD`X'6-sf\!o=[uHCH)9]d\2D$go>Iq3o.[]E1:C-,G"4\g2N8"aQHXH4@NiS"PdN"^KY%kS@EhMr8e:88<+c1$,QhJ>X14/^p[#T;tki&DZHF;Sc9V;D-^c%D`Rm*AJ5B!&&/N6ScRkGRCn$=Yi/U8CRhR!D\mTU*4N\(D4?jcNiq#nG3EWLRb`I-lsQjX!lF'uA%2%4\?6g)?\k^K$2I2t=%gmnZ\RkeENlXT.,RKm,8\M3U@A*ECZ#^W?H-_EXogLdCaY(EO:G.?)p!:11SG\+]V!4]-JA*beE4^D&1)jRB-X2h1=6od.@K(6*"9T22knJ@hgPoJ>u^ur96;m*sn$:3Q4_>=4M?9J??e!@fBb=<`>DN\mg)HgRD(9e]q5]0=:r3eTne>1gi7kWl*Ned4[S&&[J%Xu`8:a`LFSu[IP6#b_7cTb!S:NGL3A\/:8pJ%SGrsa@aDAi4TQ_gY8C*o-ZRVa@Se)#9J"FRh$"oPSR*Idp0-%*TXb+`:&:-BdL7(n05Cm0#081^1kJHb!X!.Mh,Y1Lo#J^8J"En^AK>LROYjmXJ&HC]oBYL&ErD2$4kEA$lGq'60XbV]+ItEi@$>=6nK:B@=J_f8dO3I(e_;rSf2?205rJghQraC`<\Ajat>`:E2Nhu\pWmZ@`4XQ*W2Igc`M>d)+LL\2G(g_S0N/`n7N>lF_(2/>>huTcn(%sQmhHLP1\%oT1,`%NY!:8i;:`!=0H0`<4\c[4<.?L(0(jt1Ei,r=\+26!S`8sW7/Ths+^!.,X>SZ%\+m9O9?D7TZ&$u/uMh,P#*f0YF5'l[/AjfX?(4%CE;9`ghKo`^l/rsI&Ch>i8-KT0??JG$Ipd+NCW4K\_k\4]+LT_ts5n@=FllT>CQB*n?=B>EiU(Z\]iHh%?NU]QQC#WW('?#o([cZK;@XocFf!dq-q&9+6A^[!^M?Cotm$N.%?i,p(A^[!k(m=O58!iDK"3[iXA$T:;1,N$\n:G8]Pk&D@@YAKn>57DGa1%;`6K@=iHe._H+%g[1_H#6(0aeSI>Zd:gPXaCgPXaCgI`Eo't;`*&[rKbm!XcGMVF$CMVF$CMVCbX/@Umj+0=:!*RB&Ij7^:5/'/>V-%]?n!!-:Jp^A7^Kp*U/AT0e[RPPc&cRscqf04h=UJ'O#0:%3-+<@PYR:%"*K&2N1:jIL-N"3"A[KgU,fC,"l6JPhe5EQ%2cT[)lQCf9UFZum3Yn.s7r@Hb$)HN]\Kq[q\TYFtWoQG]ch+p39mC'T&Ps^S_[$$ar;eg`ktNWWfU')Q6*uh58_aRMlEfM2T2d]E)Mn7L6T/6GRpOI%ID.onEmr>E],&.8.Kl]`dV(mSgRELZ%]-KqQ$Y6Co)$HL%Ab&_'h6@rA>>\DOXuen0C;!UjS*H)`%S.0m'J4SX;HT['Y;nTu$F?JXF?%UNeI<";3<%J\^k+Q+[MFli=IVZ],B6L_TZ,C#bl+Q,?iIet!ZRjdJPJq1HAI#_+ofEre_3=BSXH#+iNlmi(DAL8L//VKe_$s3sc+lGBa+jUI6R.c0i?3!8m5'UF.VcVB)-\qL/ptZ/XgIY3HVEE.Pi-%\8_?C/Xku]>8@?$6ICZTY9?rg\*^RD81Vi`>3ehD(DBa!t7X4R&stfZE:dTD8gA2D=u2mD8d?=&)t%W[c4aT[c4aT[aN04`GP:.`GNR2HOo,EijRjTijRjTijR;/pMHu)V`isenZMnWS!T<^?qp]o.8d;pJUM&4Cri"T^MaaT]$Kaq^N1jr5Ke\qBBu5Vfgh^DW>\e^8gh[#Y[aP.bfCs#aW@%V^(h<#/g2YUb;n$H?I\14Ma^.Xi(k4QC?CGJ1^%dhqW,4C5CkK!#.njh2T+LSLKn/oXi4B4)+-]#Wr"?MYIObg;1rAfp+2I,Nha,V9)gng3&F`t\ml0>nB#\lD\1n)7ra@\Z>ZW*0B`t(*&i^nu+X;+IF?Z[Y[$5-00[tX!;\.T!jn2l4J@ckSmV;7+4D=t;FP]W9fQ7DMX^)DXHQ@dpeIZ\+!3`Fon5d?%NJ[/\VA/O3)o-&:K0KlXKABE7gG`c_aeLlSob<&/F<2naCk-H==q3c59S*Xb4p09t.@@b1]<_dUY-TfCE#]AVbC\V0-c(Ail-OU'#C%6O+QtusDX0"o*B4%sO(H53hbrFch@+Z"E&79[a2)OQ#sRMqcjq1JP/:H`\i1@!*a/kEf/A33Fr:.;"/*qqofh1AkKdbXl(_rhF?0Mq55kS7Y(PZ?mt^nFhk9N)-fDH#"cmL2go15Y*6*WXIX`T,(T0W7;(As/gBd)BE*IO:f=i1TUKaGVH61R9A4#=A>VPKP_1SWXTT4H"8`c/c/KWZMi3dD;/6fnuh$Z\X4)eECNn]HGlB*ke>B*ke>B*lHrm#B2%5*DDe@+q;&d>W"PMH"FE%-MUYj%L,?'csu-@p:f'eCS]BdaG7K,J&7=:+++2ni`>8-`Y.T^PSW?%4=4pLX[ofeCj\$AQ,m$f.4)fUWHRh)Wj:\OLhT*r7s>Ts$iIHn'5\Hj"kYf>IR<+/,X/$ngGI&!sFWJ^rn9(u%[[h6I"CgZj`6O)2:ADtNa:g-=7SM"0H1DNDf,Zu9%sVK/3hIMF]9.:Q8_HbDi5H>rNop5+3Lqm9)Du,Zt[#"o8,2HnMM8_fiFei(^mc;.!Q9>r^ROj[0lm[#R9^Icdr:]G('eAitk'dl>jtgN.ZYi"[_'M0^c[b!T,d0nXDCtR2HOEmi6tU`"0ZP\Lk<0+lpBJNS!njC@VuSm&u09P\"7/e3h%#!3`f4!q(u>SQ%dS25gnba4OGemiI"eX-\CpIpIgXmutOq3t$Mp):/h`K$E1"6=&-nd,06[RMrZNcel]/l^_CuCG1:%SjT`'9+kLCp^Qk<*eoHpgL/?n'Y%?D"aFkZi3F'4iB:moXo<)QlJ;tUO+fgmXFeIg9q]cXR>)3hWPbdp?IM]C)qYOZn,opB1ru+QU]:e?/pJ?-a(%c]e#+'H;fF6Nn;GB'VhHg_frP-0Ff?\F/iYo=)Rfd!ODJ:WrD-Oegqd$H+$>Nf@XM9>?7'I,u#t(+g)+ar%TO8X2!RjjpR/>@Ke=.=Ahn'LjHWCI/X'qeS42Pt".N%HpL4RVik^SmK4O&MmVe^u&)sW^6Vg6Y>+nRs%&,0:XJ@"E3iR69Rcu?N%e@'D>e@#_,rdepo;q<2ZQM'll8Wi\ge:Z:'I=23jI;k/A2"f#r2"a@7qr#TmAWNEm#!&Fpj"]j!_Wnn"W*@b5I"1e<8#ZajAruk.m4C%"BF73^1kWZ6`hK@O,ME[[Ng^eloO?UPI`X;sU9:*?G+#of`m]aKX^6C+#'CCK(u)(\Ad(k]g0lP^$JK>S(46+U5SNoTN=bS:J]DsR&sb2)j`*p9'RBguf1d+V[m8Se)Zm_mnAD+\TGEs9G72i"/;6UgcU-!&#Lp0:^Y4bVVb_13h<7:(f3l(Ul6,<(%'R.B4;T0\2;$H3-U13u.Q,.JRZ9b\l6OHoMhdAEIL,92ie3BQiT&]=q!)q:DCu*rj#e06KFK"N6JI,;&Fc1pYPS_:oq$b0?R19Q=pI7C3U%62]N+I=`alSW^CbkM!nb8/-(I#b#O:oj*Vk;h(lA]Bi6Oc)i3]#,rB&K%VJH?n"jVbHEst0kI->H4#R>RMJD55QN$G7Z^s3AX3K(]A4T\s1@H_J')4j%g(>P3=E3JeY-p!UqDT?`&GkZg=-?Q]p!e[&YJiX=je$0q9cE71jH$4=Yp%,)eiC[r>pg"-?B0.NopVPI=H#W5tHLSQ?_S)gBTV4+[K!*#L1iEJWFZ0^kq["lTkCD[c4aD`bi\3`GNS2`GNS2`GNS2`GNS2`GNS2`GIL0\?39C\?39C\?39C\?39C\?39C\?5b-D=tE6'-&[^N4a2k;DJC!M;Yig#UW-0!^?R'QlK6RC#Bh&!rHpDfLD%?19pu*UPW@r9GRD)JT2eQ%/jn5IsKK--"B^tk^0UDZs+C3aV)1u0$;B:I9>BK``0ILh.O(SLcu4h0-`)ltqV]QjG[s5^UdT19pql-e);h'mJqe&:@2l49=0Z(W@d*)q/%S-,"'nQ(pl7PMBX#HM[0cH%CG+-D&BJHBP+aVicp1@f/gIu4Gp+b8moif&^aI:6M;L)j=(:PXXIoK;".`Os,k++dmVV,_oZ'd/K(`P'H&5s*gX_F[2_PgAI$LM?1+5SQ,0r\W0puG`,Kun3)I*,g)cg`rs\/bBfgZfiYD&!E5(]8I\\ZNjQ/J.Q]_Wau`5[<(g84m%mldrFGi'>F5m%0GB*TXN^7jM`f8>R@/mQQSG&$/!Jp&8PKqYBh"CY\D+Y4f&Xb8.CoZ2lF*2T"!;>9W44#ISaWNY8S]MrDkP$/dM(6dR9mWZ_>fFg19-%.JPb"kQl_4"DK4/qt$pEePa=_<\Z45C]:2O'6^ZhfTP5;TO8%`r5):k;WWo=#'(:2&3:FI1I?8^C$$OJ7n9(i,S&mfXE(CN2+#$C-Dnn%]7+",FQo!q`>Y]h@0M;EU^U?&=gAK1pR?]+&.O=U:&AZEHAH<7ss:BldMXqW_5XG3?Y_r.j@(jNUrqOahm[B9;Z5*Ejml=jT9SS`Z!h6mg][f-F*k:T$eV0bPb/[/F7i,T/(jL.scD)L-eH6te/cL*<0qFh,U[T>_#hCafDP4gNq@l+^&[hI>@]K=!NlZU)l+7GHnpe0p;fcb4!reRpfpf.'2L\-A/?!&b.\eWeGqAXf/IK073W3!Q6K>T$\0t]c@p=NH*[5I%m*=NChKqUc-i?/PEW4PMgKOJFO+NRbV7YO]RA0_^Ph5/R(,3\\c.3o(l0q&5t0p9ouMI[-GaW(Ag,n-!HR)=O+&*iZEMr=h?WuZ"7$VWRkAWpAlSR#9c"Y@(^S2kWq2K(4"DneFEs.?tdqhZfWs$$GZ#L;_IlDqY_$SV@nUm"P7,fG?I63o:K64&pn47e2EXu+gX<"G0@-u=GpS6PWu.pD[Ft"@YK`=_`3j@i`:\GVQE#T'2sRAGi];)>#'&,8op[gXo*2+]WZl=]_l[,J\p`=;Q%qGF]\KY4mLZk,oX$*hbA2^=DjS9$g&^r6K@h][D;[$hcJaeFgu7me,5XXGqp+)_<8Y2ApPX1_GH,:[dHd=Z2m-h`(Ih-_o#?[G^"$`F<:g7uK-76@?fB3umG3"2.q#Rpp,B-1Xg$HVL;h'>U^uJf\%`.J)@c6j0^u67;\b%2$"s4)`AcQ)eQV^n/&]-n`^h+I=]sb6?J^aI_lM!V_i^.IbaLi__j4JeJYc.!1tF!EYWUVOt<_cX/Sq?8)&b,>XAT/J-JB`<\FG`C%H[Q@Wl3,I9)%H!+OW[fM!37gZhPO0]Uq6`df2a6VhMYl\`S-3WeIdSE'l,>NHtVGD8k4d[2!I-elJlS=Bceo=Bi&=@Vs*8>ND<_b4uXha5U)F6$r5.@JAhgR'XTAL[Y`ugr4G97(fiSt+ab1G5K-Vh1fcYj3hrO3pm^dSA=5sa6HJqI?J1;jZrTiMF,,Jq?TL^52fMMe])FL2p14:B*tc+rLH5Thbul-gt=H^72n+;,>>E;mK^/mL)-(.c0F%PdlD=Bh,CpN>L,\UaUeXqIph_Y^Oppoc:-j73R)$]mWE4&;AB+td+GOtRK8;husRXda*fFD2;Db5+AsY_#/6W&1!:dHX#q=+FUe"f"Nlf%o4Y?V+6%nFNgb+!3Wcs31l*9?)bIZNIqU>B&ST'E%d:@G`SH$N^Fd&/7M8#Oaok#SlKTY])NhSD&S980TO@i5JMT2oN\GJBrF,I(Tj4Sp!IfJdW4;\KU4M""moa_53&"\=Do?.k/F0CF6Q29*n[;[Xm+?!k36?E"T6i)n:)C^b'ikc4di$T%oVI3ntM=^j&CJH"Ya:>71545WCrn8Ig]ANb\L*JaLF.q#UlJ5k;7Tu"Kp:,<0!b:@8)\dT1E^Osut%M%e)eH9u1+#k9:#b"`J=t6\`>a?`Y\A_UC`ZK^R2?4`JQ\;IMp0,\g""m4c\BTH[Zucqh-IBms+=SH6N5e@q[kn3=BL=Fj_3G^!0H5>RU8nNcV$=F[\)4k:#0h8lYaQY#g5TKb2k11dir^uLMns7G!:a4roQHf0PGnlVAH]pK6nrX(Ai#['_c.+H>nn1jA`0lFJ4X#V)JLoC<(13DQW)Eg16`2IA`7#U(4oOn$3ip2fF@SkU<YnEXM#b^c4&$3c[=Im27>n<^H@`S_R+V-W&U-Z5U%Q6Zi6/0PV9nh2OVr?*<&m2Q\n7j']h@K4oU<<_@4pt'okC?P9?2@5cIccf+'^>"h`/D%loDUD8k4d[?^Kj[UO*mg5<9QCFdt:XK>T/Z*n+Y`S-3W'l0kF%r3]HHtVGD8k4d[2!I-elJlSNn.8'JA61"3AaqDN5+Z/0]l5Us>"?!%049nJe,,g/dTNET&CP6MhOK9"&cLM,M/R=%SV+Vq99SSN1@X7K!Q/Z4lSoY(tkH7]a@!:rN9MaOkVUC;-U;$=`'UKM#9uA+G%Sf95s!uH0NF4N1i."s8/M0f"9+W,s%O_6PKCA5Ri)`*+:21/a:[Gk'^MWK3EtJ=O#RE*tJOEn=*J/lZ&:DnoK]jO(PR%^U6JF<3i@Z>8]8Rn4^>RkJu^>!crg;\jAIG*e:^`!#IR_A)Qb"OFENn#ro&`mQb(!,G9cG^W,:16X23+J=i&GA!@$oZc6FaeubX#@PmiJ"m8TeC@fSnBg&X-@Q8ABg3d,"bl:taMki#<'LPQof;BHPo$?XpbZ:Yr"rf!eolIK>P1mbi3Y?DGK'4_$%?8?4p&4$RBUga8Ok%5oS&V6GJL*E#FDD#(8f:5AkF0sc4tl[>RsVWP9Ju;8`7=::&bLc`ZE49(CKP(I'AtVTsl6I8rFn/A7u1*\H8k0#3]kd$T2K-?o;!$lW_0&&WiL\`]k="G/eY[/iu5jE.YXeV1!nB=fM"`<^5rgfXjLP(kC_#U%$-jO6+2mV2FANFo_DnDh1\o4!gjft!it94#a\HIBm0\nA/W2=a(EPHO)GZhq;YS]l3kD):PZjAMVdF@&`.@NPKL_RXgi/NF+6(-Hd4`V>HtVGD<3p^X]Sf4[UO*mg5<9QCFdt:XK>T/Z*n+Y`S0V@_qL!U'l,>NHtVGD8k4d[2!JXUU1d1Vr@BP[j(jCqUF:/..oYEQ+:::E=r%olCamL*gDtd_>W@T:fMf]$B&d6Kg\esD($qXM@/fKBi%onlDZJt:DFT#4\/Gt4eaWgb(eom>UV)EV[=i`AbXcZ$4BL`U+@]Ac%2=`7o7h0!h-aX_UDQod*Xo`)Qa$6FLW^l5B%'Tmd&r_=n8#Hj^jfd?33@+)T(*$pjK$p&/[Y8"?;3&-folo+=@9q'>Z%:&/&HIbRb\mLTiHaKSSmOe0tJf6s*i(5S;DkHAIF*!KX.4\6+>)8+BT`0;-g6k)9oc&r=JI`;)eF0i8-H8TNgR(bT,m6cu6:aM-C0+$P(*CKO]Rp0JdZnb>iES.6U'el6m,.gF5VM`TSHtQJfgJ#X5M[<+j^"p5B1g'%E-QP0U*W'jSDEL;`Zr\9,gm2m0/HE&o#:VT1ur:k;N8P/'90eme:ifq\bV*(L[?\'SYKT%]EduH!!N';K56gK_!V%*Bt%Op3m&8I*+Q4Z9o+K*&01HqS>9DMpY`8?#O1@nKV//O[&Q=ap,bZqrBZ,:%[!ZFW/*Y\3oW(Hb_cIgobh3(#Igh%l6iZoiR;H@SOqW8[ChSSU>73ELc!WE9_q<^c\=DU^=fER+SJhi:0D`MKmRpqF21sB7"BIkt<8Qh)L9]_aG6XM.$1TEJm"]Jl\i6FY:ThB`aZ1;$DG'X!b<7L@+XRn6_=TAh*$#]N"6SskCB*m>2h>`pK.[rSiX+PsMZ.3dm'W+t$s["VTu#H?[2!JXmhs\WXK>T/Z*n+Y`S-3W'l,>N@CWNHtVGD8k39F2YN@qWrsM?O##ubUc<8G1]bT@7+p`fi8p&q6U.JhL1&)YK*;cp`8u9]n)akn"BEo)"F-[Gs:Meqq6=*O>H$mCL@i;#!$2C#@_'L\t4inrBt;uHg#]:9(Z&1A+6F@'KUP)5^VB*[.V*V\jrF,HP/B39L8]Z3I(70'fu5!K2umlPKXd!>ZJ`@:jKc!eP/84gbGZ6(`^4J9*Ku%3`Pl`5uj%%GcT>:_s^5KSPs$DNR\I%3d#:&05J;W(9)@U5_R"QLGA45/Eea$NqB*PgnBm8kK*j#t3c53Li<0,ULRji^Mkt,pe[)KB/7S8e*e_M;d=IAf)D2%GVHg^<##YXMWR#kjO%PJ0!o2"9ifcE:P7dI*r5rcIIcU05IH!g:OXR[p$fZHW<^-7@>;[g'E$uW-EXHnVfl+)>JRm`5`PHC&FCJ`83hPF#l9NSNfmq-#)9=F_USDri>*j'lddu;Qbl8g/U-=c=F`fd8?!]'d/]YJ5RZoe_Xt*WDu;fGTH-V.6YaH"R^L?%fQkaK=2p[A;d`\=I@RTWDc4'.0gGn#O[ii'kIVf#uqCpLuhci+%O^a+G_rhF;LG_ki(kG@UD^S?')"9]j5SC#Kb*+jV.lo:fjj!iPm`,gq6CXhNUB5j"pK"E=A(P2:sHAi3_6IbN/^K*U_k-*DYYZ*"l)',h:f'[N4.h90(X!-%n:60GT5b:_!h00!*@U"Jm@O*9M:GRu4.<_O(ilI5*^q'[p-7L>BUeLrdjt:JQUju=5%XQZBGkiTlm.q^+C2S[AE!Q(_Q"O=S[=hDD!t+QGO@j&fYH85k^#"XS'l,>N<^/LDX]Sf4[UO*mg5<9QCFdt:XK>T/Z*n+Y`S0V@_qL!U'l,>NHtVGD8k4d[2!JXUU8R\%f!u\oHM@6-J2:3@7-`C[1+--YGkrJ8IADf,5="$iF.+KNL3uFn6pncrOCkGrPqnTV;@9:^t\BjGVd&8,@epdHB`Y37XZD6`ti)sP^'oT$(ei.h@VEu/Ao98"aKTU*X6dHIeE(#.Qhu>:Q-jA^rSQYoT+OR?j\?iIZkV.mufF+>QOo1!q>(NNj+':'eVma)VS2i#$G3dgu9I_%C3glP<0cn4+647On$C#9WKL[l8ak^G&.Q!@q%jOD9\q/TK*q"VYi=:["+ZB'`S80+cp]WQWCO8rZJVjlS>tn6Ol%nW8RA$+uN@,G;IgD[]pY*^OHVhYnE!b2qVqIE&oQ.^#"Vc0"\c;koXcC^%GFtYh)p&Olb7sgTHU/g`HgR,Xjn4bP@9>]n^IV>J`BiIA#GLb;BW3Li#4[_2`RRgs4O0EXi3'?efeXh2YprEXWTS(PHW.[V\C]9>^[[H;4oI:LVHG(n?U6i3klDi3N$,pG/e_JE"#i3.2JWA_`RmfWl.E[Vjao;G?S9lCtj=Eg,7pBd7:2\ZF'6Zot3g^i"T,DJLK,/=_J:SK>X3JQuWLS-Fc`Pi&'Ro3E.o%7:dOY@8*G0A/Xifds;OjB$SN<_".\HtVGD8k4d[2!I-elJlS=Bi&=@Vp8[@;X!;MR=17/(Rb&X]Sf4[UO*mg5<;gOkP]l%bUTi%D+hfI%"4>\^Cg_\K4.:%1"o#Yd1-ZV%l#702#_c5m5[.RkQ]MK#nlJ9MA+;$:ChS+-D%nSVT"Hk=17C1L!@YnDrCd%)-#$Bjr92<<8Y=D+/'.c3tF#g]io"FpJWY%&Y9i&/Am\maBeDd\j$W4iG9@JB+GEX:WE.K0WfI^-G;m&Flf?p<-IG^GqQfK7pR7Jd,1`,'!Up)Np6hm\8JQ0<--T=UCEJ.u4m">c"T/Q,3-/;W>8)DVgJlm@2%re4iO:ko#D@H*77'l#7.m[kCdp`k/AD$K"-;kSAi,mm(!.'d?CiH\d^9JuC(6jbB.9JepfES.HWT#C``h"S$(`/Kb2d"up\X$jgPt`*)))JcWBFp7rr9V1T.I>.AZO"3JZ"\9s]88Kk6A+g,,rDHp,Vbo99bI7"&"\!4\!`i#`XJ:AmJL0hQIp%;=H8AlX7C4WuZ]1SbCe3mhH($t=G0Hq]mLl=)T$r77.d0b\d0b[DZnD4=gHlE?7+7l\qitW[r.u)LZ`0iDN3.'3V#mhs2gD>\L[gS@^ZuFuu%[&L0i>VedGJWsQe90cj/HmGUgSlYn]q^>SF9Q41PsA+,-IgR1J[]RT_^6sAK@'[2WtF\V2fJf:rN7]Kj8HTZ42?/\q$5X=Z[3a:gs`J\WP6E+(XMI%EIIJ`m2REWmpO0j#$\6S*d/Nn\$4s6U#&UfMea0>`ECshf*'p8@jh!+oSOPJaHlcNoaG*N-a;]W$?"T@oaJ9F:C138qt(M]0#HI4EVJ]"D?\UbD<7nU_qph5CFcph49VgVgt!fkR-J*e;RI(JSb89&RTuU>JG2]apBS0DP4#G@B'5Lgr_($O`211@GCPW>c(DNCFaHWEH;[6pd?=XrA'"%"AL4"7;>QE)rUL9`B$jM'r@H_D^R+3)4d&0dn_.C+[hJMB,XfARpL7;T!kC?eo%T8,d=Bg2p=Bi&=qHJ]^'l,>NHtVGD8k4d[2!I-elJlS=Bceo=Bi&=@Vs*CgQ?DHAm_r0Q,pXLFXfT7r^/70jF'K@h"M6q;_2*mY9md2VTHce285`:IO_&4k`<5S%L'CEVRE&KEn5IX\DO=l1q?@Xu]RlMA-U^FB6ZgN^&`na3I%%ml[gRHN@c5;m+c^IDJ\XmJd6UIm#/p%u_;E!8:A?\3@\O4T-Rg2&Jr3IDKo6kZGX2Y&P?#P4,3?*C\BAu$8Q!?aCN?q6>m[uX&pNcbM,Z4*VTL#+9aUPLKQ-[W">[;A5]GjD]V;aD\dY't@Z\`#+BNHr^4fWLLl-KY1""_Ymk_oQFs&D4"[DsU%`aT05TEQ.!eCbT$]Mm7ABp^-6!2c$,.n_@q'?]'q]d3.T3"?WOpWgHO?i@_"^KoDeuquSLk'ifY?p%@P*`>7RWV`/pQ6oPjQ-%.;qM5\:ds/V:Y%9rP67KQh@kK2B&b>.kPB()'fP:>ji`4&:)pLHCA7&l:gDHahG0[rsrR_<]]9i-)6>NdJd`p24MoCPJ;N6l0KQ\N[m=H^pg'Z.tP]hO:NcC6\Pp>HUg6q\EfVHaiEl9Y;Zb>B.'iXh`Yr^Ejl'_!N*c>gK?7MJdDtVd<8Ri,TnS?NO>hGPmp5AW@V#\Q(^\%(i(i,\I@gX-C5NZP26gg47Z7oVQ=[Q#:E<%DBq+`+9bj_+a_Xi5qIed=#;Z"7^FC4T#-\$^p_-06u8K?N$QmbRbijg8uq.D!K!:09$^AZGpFV33;1LS]Tq=(QTDbJF!#MnZEbmt8MU!o+,6Qhe?#[u"$KR.I8(E#B%6>NFm$k/6%gRI\1*b,+[ED(HrU5Q8f:as;pK<">0&qm,N?FcW8$9^1IhAUmLI$$pkXfQB2^e(k2>mP_RKPi2hVNAn[f\E1P8]Kqp'JPfb_9'L\a8q`j:.)DQ6!,JX]XK>T/rCt2`MR=17/(Rb&X]Sf4[UO*mg5<9QCFdt:XK@LHXK>T/Z*n+Y`S-3W'l,>NHtUt8mAhjDo(:[$r29eN)*/u<+c6"/)>3nA'`i6E8&E>T1_g1tT19R@Gjt!$1^lV/&VGHJ)B`>r`5D0I^5$>sj+m^:$pH]=iT]AY!&.j(&:.[0)Gj_hrK9F6h+LVgnSaN8.LTqPmsTYnH`\Vm_>YD-7e?%_.b@1^@5Xu30=E[s*bC[JmRs:\INhi7_q;3(G`nkRFVq/qZtK#.[t>;Rm'4FJNq/nG.2Lq"!?mFa=9f$U-qpB`n,8h??.$=pPWXK]&N$E5K'krqO/4NrPOM^E"t^kic3+NuN\CJ)S3cJ!@gLLi2\mW.JO"P2V($+o(o"!0?j[_G?H7Q)eC+(g%-XfSADFHPTtiu$KPfs5^):$iZ<5$))=!#&U,lJ,g4BFS!'^gh!I0K*C\90F&^#mk^>37\g@7AfcP7sBMNmdGf\$`VZ\%re+lr_Ol;:LOR.p.MY@3n%MO1CmQN?i+=iGhULLn*%Mhd7;e^_61G+KAnCo>8*c+jbYdS"X`S0U5_qL!U'l,>NHtVGD8k4d[2!I-elJlSN]sPH=Bi&=@Vs*"P>S\*\7Z8X:,)m,*7lkK0^DH85=bC&dCBg0^'gVTG9nG=r[_b@5qpZ,!\Mpf*Tu2'I[%X4ig[`5e9W@&X"G(Yp]V"![4F/o6_+p`P]\h!XRtF`Q8g-XA=GnSjDRgYm`4TDnobc_;9L=s"/(VAq"V5AnIAPnl.cB:U!/P_IqjJE@,)t_BZW8q6CD1!a6`Bnf7T"1ER5C5Jk27'aDC$Bb94[#Urh%+[&g0^\j5r8Je#7KhEZ[YC?enYK&:^_RXm[msbR-r7P[Q\N0lVP$5]Jrt8SKp)\ZCFp^RRdNL2Z')8@T+[:Gl8rBHA=KDXWOf`;Z&&&\'UCCh+^%6&/q6*P^FY6"bUi2<3A+na,/q"^b=YKq@\o1OdEO.Cut^ha8^\-bD`(ZC^QH'"RQ$L-e"OI#_T$M,O)?Qb&S+up>RM*Q%V(;(P,JW9>&&;_YTQ-)@pPQ5njI%a@@dC_6EOL,I0cYYu-\^-A%A;.7dE_&c&6>1$cE6AH6HjV!VhZNoXM$MgRMW31&eJ'`C]=nQc*kr!f8MB"<_DCucO/q4)Igb\?/qB#/"UGR^KW?PS^b$rB$GH\#8PS^?YC$T^aakD?Sj?md3FlaI5]MpF-rrYHoq6+'l=qEYlf$I2[?X4Z!e\l/B!VfNF;jC[IE28!;Z2=.^7`Y\#H,`P%Yl"I-9Gnj#*;DV+Pr@!k(X"l)^ZA],XNZ^iFVU/6smY]XF.e-%:W=*XAI]<2:8EO0sO?QM,ufrL^iT0+nHm\UXm,[*K8d/q\JMS`2b#FXMH50guGpmk^.Z3&^c`BbTHX]Sf4[UO*mg5<9QCFdt:XK>T/Z*l\c>B,-2rpsb=E#4BPSQGrm645H<7YAV:$T<,-=B'rR'aR8t!#XdJ@$CnI?5[,m_0)/f&<\lEc])Y]jF`9@o#+(K;6ZV`U>e4I!oB-R%-,gAG;VVfpn-H2Q'Z$d(G9Skb%3L7#5,goA0W@,<.V5k"b_Um!M:$,_"U5X`5d9K">A`nKiL[WUObE(91ViY_&kk/&0+pa!^R%o#Ns!i.k`&&X;I+`H6FCRK1^oli1&XHE#$YGF[5HEEs[8mL/'jNA<086CMF.8IBn716j/eW?.X#lt)"&/*\$dCeY(FQk%*]]"Cq\';_K%7,;p!^]6>i7tm;7,eIT"r0F-l9#1Pj?e=`.WEQAY?i*$^q`X"kI3fF65P8Rimt016i^;C'eit9UY*OYculP^pOo$4?V]7`nHg@;X!;MR=17/(Rb&X]Sf4[UO*mg5<9QCFdt:7j$;_XK>T/Z*n+Y`S-3W'l,>N90QBp0Ai-*:UF]5/Z%&!m"q6(`A,6\&oe_b!9no!l-E9/2G)F$jZ:Uc.@F?u7M+QC-gNgf-C0;6Sh^LQ[NU.'7mueW#3S1KqS12M0K=":#t9PC`a=>:k(/\)(kCDB<8]Wo>9AP2YF;'dFK7!?7OEo.\=a)I5?1U039*)TV>0+n;Gf\34HRLFA5uEa_MXN&Xgb2Mk8Z;b`bEPis5YYscU-]:M;5tq(q=@cF)+l97>+4E%buOI0:"#;++GB8?/:)_2i-eO58,t]E:`3-gqKP941AH_RMjOP%?Q]aVQ<1sS[bSQ]6>8`Q3jiP/WcN?J=LF=jQ1-54:UB7'8=%/4qnVuKc2?lf#%C_.OZ_l9$>`Ri.2N`bGA$4+b@d..9'@sTr(El[5ASqY7j6.>q_/`hFH9A4lgX!R_>oI:2l?'qq]'LFFqbP"gcS^HE@Z6.Q+/i.M#.*-e6',h+^UX&#)ter^6Cn]CHN%^HtS45HtVGD8k4d[2!I-elJlS=Bi&=@Vs*MR=17/(Rb&X]Sf4[UO*mg5<9QCTG4JXlqermPmEl3;AtB6k[d&Q&I3nk)?;6a&Er2KTU#_3A;sCm,=/[R#1AcU:i/[QA2P@Fb7Pk#MM06N#S8Ud$W4,d*t>8l`6'WlR#-OY.6]:W`PLPeJ/D(6R883Tp\l?NQW?@[`D`_6HNIrQ&POMR=Nh7o3:--1[adJ\Y,u;KB8A3dogLF8$I[DiOI!.=\_pf62Vc"C)=D&sLb(&eAi_%bCE%;7%7C\gRqmSf4;1SbJc#SUVa;+4'cI@(-0O83/Q$>;qdgs".9/`LWU3><6DTW#q&'^MFe^'="l:o.nT.8rOs"#Z6$45m5_!o]D=C#6fN=@&tXW`d^LeTm#`EG[eU]c85^IR]bS"qR;8`QC>0-,1\XVQl,kNS_[^jZ"Y=71E4'76(quV.YQ%Nj^$`YNT`%dnKBDX",P7iT@\aK_0Fe%2Iq?+h2+FA*@!#)R!uVVX3"#'u4nUt1p1&='Za[hp5D4DFpAfP)Nt0h^HD?n6r"UP4Rab_#)CPtqc$"&0D;]S>$+C#F^#kDD*c!:WT/*IV$oZ*n+Y`S-3W'l,>NHtVGD0<4oU;QpZf\(ie'=/gFQsoc83,hIN;#,`<)$!]_0UUsq<&j*\@A"?(JO(1T3b\k5KJB,47Y,YE#a?9*+CF5]E[(e,bGS`$W@6.$+^@&3lUqho[QlE6_6d:g9uT\p=r7Jbj[Qd3+-t7\ZkZ!Y:bZTrD0#bq2SMSPoPBLL.h@f3ghEXf;UKqjn`^ZZdNBq_R]MsWop)t"M(Tk*o6s/N0=8_oOd$a_/>q+5'X`(b.FeTiW42BbFd[t\*A7BZ,gn!!k:\/Fus-e%51N.UTiKhPkUO,DR*/qh"`Vu^+\OAcZ=CmjN`8S0=0AK#PS#\hH=<)`S-3WQ1qMk@Vs*T/Z*n+Y`S-3W'l,>NuhR,o^2W=+LFd!n=q-!Z@[SFiG)(\'_ORskdG97DHR%i7O=&HX+A5=%d80+]&s09EA-Jo[7iZK2?oTB1W;,nf?@@prsr!e`A7+J);\L&'3%1rfjh)XR'ZEA0Q#KDAiGhAaBQ<#:oC_9$M]9$\>6hA2iGgru"pTc8WGka/?d,C.FM_+=N=1ak(j]-q0XMbS0-$Be6AIcjTPhLsL,?0q4L^Fep+5tYcgXFS4s'676@GC?)XI(Ce=_HV"t_rR,[-Wnn;qD@m3CO=WDuO3JU>0mO#iNPr^[M>SMKEpO[<@P;g:G\$nJ@dTN8*YV_s"XA-("IIkioD8k4d[2!I-elJlS=Bi&=@Vtcs%r84qHrsVO_o(3nRu[bhX8chdC('_f#>5`rrPUhb[FJY135/AB(NuVs=CikrXpY6);uhNKT0TN7JX'A%ge@N&aMi/G_Au2J&CiE!*1FU@;[h1QH/#oAm>=7j(I>q]4Au6/gX-di-o5jaOD.'?d_trHSZ2f-.o,-Vh)n3L71^B<)r1s\;eg;cuV9o347S2Q9LW#)b3]lHMd4'[MDCK[LLnU_n!AZH(iPg]uf\6FK][pBT>BiTf>?+]7&nMP$/br(>CdE?sB;hnP6<0;AE^4cT'DCfH]*E6BHttZD#eHMj)iYmWRLIQmUke)Eio*8!V,chM%BXIcBPUOD8n`-E^nXClU-er%?ZlZ&T^C,Ro^o)T^J>+A$+F@,eLOa)=bKN.#-fT\Z$6qX;@./sj`'X80iV6/JU:[%).m%3[\mMPe&oUSu?S3H"^luH>%%M6$'B[6V@eW&$;r<%rJFPBQ*M7k`HcE3]*'>3]iSQeZ")e/ui+c4Zu2OY6+RsA2#tcJu\*R(jnLIX6WEOT/Z*s3EelJlS=Bi&=@Vt4H^@?Cf@"2up>HqVSk!(o.XhHfsX]Sg+/]6;"[2!I-elJlS4O,nbXon$O%;RIPCtSYULUGYkk:`bD&!%oV*>\#AsFGhIj/L]#D5JX!*)J&Jk@!jP0EtTcTVh2@0jr-5nG%*'.eUlJS9bIFmV.&h[bIr)?(0hs)48H:OqeI!K_0uQ!?o2'&9';hZ#5aqBbg4N6[fYmWco`!YNC-Ws&K2REVC"*1LPO+aih7Ar>&Ec5`C`6<>$=Xb!F"5?[6693H\[1#_kVAiFFH6XqkC,Yje8T9kjD>8:R;-/]4E&[H8lP3Qg!lS_rEoe-&*e.L!\G\#5rtnOHs2ZmHkoJ2"VFC^#m\M,4kBM#H4_/""mmF)Rc?5r\LhVnQ1^0G%bQp5nhf(m%CGu6Q=E^KnldBU;[7^40Hg6XmIIpOTF/sN6pFT"n'V4;2:%m,W_mL/iBJWmV\kVSfWT@hHmaJ^-2]HL]2`O$k+[SBk]`C(jZZs>AXX)?uN`DLldK#\QfHEh^h*8UC\=^D:$qF%1Q#O2`,QD?-q*fL2T3FD&-f!21'"R2c=`6F;U[1ia+^-3f3Q**RU^=N\2o*F_`B_FSA[]SpL65d,1aO-iHY0!DaeYj=p@n(jIN_b/unmnmi"qhS+`PoefRFFMP;L`G>N!SaU9n^[!_/%3%3ArkBB&Bp`p/(Rb&X]Sf4[UO*mL(,([Is"jtZ*n+YjZT]I=Bi&=@Vs*"]k"b9Mb#Zd3D=;:b=pq[d/a8Q(Pg_\+SIg2H#$rl3tW%RoMjK&9Q=:^+,r1?6c*Wbg@ir7bD&9Qo=&/FbSaM.4$bRK?FZ(M"#g:F#P0Yn!s*rd$u8,j')@D>,Nrsr4W*s^7:@q#@H*))Ca@:K-CN4_`5]D6$";:Gu-%sgL_3$NlK`Blfi+8c6#+e4InpEnSYDHjYa!A#H:(_Sj&Y33sd+'`=d+c6*oW3CBo?c+4=bm!jZLmt&&sr`i7&n0#FCld5[nblQIIa8P>nj9`XcnkYm\_na_YiX%>!^fcAX08/imfc"C6[6shd5'Zf!3P6G\#=>*ee1(Q6[NrS-K]@EPr)G]R>27mcB^#7U\LqPkK].W<98'%Gks`V"8)5jaG"]%+7[^[QPni>G1@\/$r7P[QL;Y*\I')fQJqXtB>?[*>2#G(@;?P(dR__:/Zim:g=ffkj7X_k_$u?=1c(kL`W:k],Po846WO;qAr"R5P:Cgr8\/HGtJMW"+sCK-Q\km(kedh:Z04=!5*[Y)AX))5UKE]>,;==N(,tlfiF]&XB8]3@DdiEd>#%DCFdt:XK>T/Z*n+Y`S-3W'cT&IfGoHtVGD8k4d[2!I-elJlS=Bi%=_hQF`LUGZ>D6$Bn(;-iemSNe59gr0L!JH%Yab%>O-+LD39*hpN&6,B#fP@Ms66QaAY-$d.OW[kg!:^E()?n"R(_G$_5Vs>^DgBC^7FZ5u)s4uRF>V598&6>:(p(J:&(;2)@Id>:N(rj$e$oD7O!I)):)TkjpI!g9DW'5@UJZTi@"uFsXgg.ln#$W(oRL.a2,/jAX-qeTqJ(>FR$mpZe'he\2)P^#+5b!5dFZ=K0i)^X@J&BCL\G_Dd$-@;Ppp0f*i>gSiVgBtnF"O(]VRDNkKV'ei,3j.kO%[qGl&!-mo$/5AqK8%3%5*iF-TBg5<9QCFdt:XK>T/Z*n+Y`J+g@2Fek?HtVGD8k4d[2!I-elHV>Y[MVF@;Y[MD+-Ybohjl*KbY++b7cSE\,^m-go%ZOp+.alo<@^i6e9BGrmVW@o@0C6jPDF=_Xc]LLR"^tK<;rSnclK+/'G!//ZMuY'>jVB.L:`]BXb"U&rYhdQ'>B#!kCW,@Yp2>,GN(%"#k"%Zb"b5`!WpLZVpEc>hea9Du-bElmqM1eqG'Yh8J8ig(4U"oAC3$4CXEi,SYI-H>a.Y*<$Iqp[o2BgAc[#pCH&WpX+Dr#CGB[#::deCeTeE0uOo<#_X$'"G-ZK"uY%b]dnum:r.m:d\Z]p"rN*OlS.tfHhmKnf6+cH^"1L>`O>YmjcOrZ%)[Ss_`Z3>W=V`T-K5Rkek3DC]TTDC]TTDC]TTDC]TT*fn@rppdH9XgkLCXgkLCXgkLCXgkKX4:k@fAb@dYAtYg0#26Zn+=m7!bk1:WklD0Zm+VV@s*#@Ss"iLZN:lOkdI)E:enGGkD']W/XTWq+W^ef^Xe<#N9V\]2b:Jn$0?ldOB-TI/pfgGidfbJe_;2P%"&:'n%sSj-20\X7P<8Nd@I&orgttB\QCEeAX"PWCYXmJ=6lTds/1u$0C;,XN72,I4M/,fE]Q2O.AI!Pa9'm?9W>4!q=USb3.7Tdhj5E.P%EF!AVns\19QBkQCXEAZ&T:tbJ'`(p#d.udGGB\IiVFD?W6G_(sf=mPb'[U3PSJcFCN;aOV+8M*7>0hNUHKG!f%EK"#d;Q]q3D(bbDoLc,G[GgQM[aVoJ@p-D3,'b"/(6'D*\a>p^M3qM^2VpRf/F+i[j46SN26H4l>+TLACW/ktPo!1VZVg!o^9P5a_[YC*\US-4!6$1U*\:4<0>eV!bG997>='n2aoaSdja9514:BA-YTJ*eN)IW*YUK7rtU4Q-Ad7Y)J.8U+=bnG.J8_ohm9V'2$Ti"^&;JAObg.3-#>4&8J9hd*s[\D.[p%mrC,EC@IJCHY"lm@]sdc`%N>`q*_rUS[V4LJ,;oMGG%SDp4=W!T6H?Q.DW*Hc/_*Hf&&T%ZT>I^oJ82Q1Fo)*O$X8T@u)GWahA)n-Qk't4pe't4pe't4pe't4p=a5_#agfE32gfE32gfE32gfE32gf?NYO14Y!>Q)+7Q@U[%:B.do?OMk50rV5+6$@u5%!/#0lrb:f_QCWesR["WjS@CUJ.*3MIrJa;0$5]&A40Ebl1@k]?%f3kLX"mV"sV([nD8a(0Dg/?ZtN=g4=kZbLGRZ^9Q)VnrLf$mFV,aCB,[D=1ne(.Jik2ar/:IVC`P0E0f24\#.k;\VbD.QIQWHVBaBnP6;`fW_LBiNOWE_.LKL6PP#WJ@K1P%m=DgPX&3n\4_,XgkLCXgkLCXgkLCXgkLCX`urLDr]ldijRjTijRjTijRjTijRjTiph9+NK;iZcYXu2\5)4hW3(/f"#P1[5XXk)ctJ*Ji-TG=WZ.Hlk9,!V-RFh[Nc=QJK-9&nihR6XnSe[+'@(RPdh+]*CuOZND/e?\+5D$^"Q*LsiSL/sE5uNSgtqoIGTX;F1[^9BpmsS45#8dc>7f,XIOV+8gC=d<*N[L<#fZ&W0O/*N'U46[a]LSPGA#R6)P;k)Y_Vb.#ldR`f.J6CRiF>U`W@>2W\YOD4H4)Tm>"S#'M'I0*jH;ttN@7_hC40rqnP<0?<]hFaBE#EC\?39C\?39C\?39C\?39CGW[$cj5[T-[c4aT[c4aT[c4aT[c4aTnT_^+O5&sK[T[!?!_Or"/6tgL1`9r"c8Yk_c,3@adg+P0%?QrhJ=+8!Le84&j)biqQnLj?5tj[$KL_?F]/UgYGS:C%m#MEBNX:7[n2;O",!6r5Pa*g'=pnd5hSQIl;QIjhMo:Ge!^2,f/<'WUMU7'YL$U6.\@dd&WD9O\qL7S:F=P.iQ+4TW>Af;_F;$C/V$N<%:CVU>hhi=8Qc-h*e`Nn#h,>k)=&,5#qG9W*JO\oWb?skhYLpU%__tA>uu5d9dfS78ZFE4JbQ#Z>U:W5=f"\.C.IhU72g!k-W[-!m7%4O[UA/SL/'L;/UCZ+C6#-VA\_R%luGSaNn!MK^B'rhN=i&Z)p>RA^X/)X!,,s2Ia_o&r`5],%3ck#c;A8GcZ1tkR(,kY/g`ot,"qhNltj-Z*X$]TUY*9D@bD3N^!G>kY4N]sCf>YCXaBq19+OLlm,O*a+u_B*ke>B*ke>B*ke>B*ke>Ocr#hT!TQor#6m@ob+$YctD7"f:>-eCb?AD3IfF1_/X?I8Eu!%Jm)"crG0QIT\bnkb[8k81u_aDLNTo>^[m-Sco#Z7hB+l"CWqG+Z6Y3U=7iS6W,5+7H[#4JRaiV`'+Zd+:!+HE:JVVi$&GaXFh>:Q1-9/!hMk\_W/]=+g_;uh[>Kt9>Tds);GZR!M;:cnB#sV!Ea3>O"VRR5]&qk9&H_Y;BnhO.gh7kATWT?TA3I-)nAIZ0B=NN[`eUrQRetr<,,Y!aR)s8929nZ[A9%>>a;q_m,bCl?'W#G8%#a+fe#5WWpK&`4?Gut[@EH9I:YT_oP%-K;?G=>@SL^I_:mW$$*;C/XS!UHU1m#]3@D&TM(E_RCONTj-l4#8_7$);='T+i2:seC[&/IWgf?NYO8$'&D8gA2D8gA2D8gA2D8gA2D8kQ*GT.a6't4pe't4pe't4pe't4pe'p$DqD1(,>?T;sM-Yl@V>RrE`EG4VM8fN)MU:(/=X';6uU(rP8lCjl`9IQrmgsSZcYR1_XCEXoN(93O<+g8*cii_'iFIRmojn0IRF"8@oV$uA4.O"b9(qd==!$Tqe&:OKh`5LcRlhD(uLt0DtW+$$k'OF=ZiApBi,THX_bMcH7.JO$XJ_-A8TXMH'3#6fFL1#7&)#O)ki=D,N'0pD'0*]uA;!PNLH67GRY(d.?%RXCA;,Tj+d5_[t91Ae6D-Hd;pYjLYbFA6arup7C>RF6Z5jEL[IiSU4f4!d@Jf[U.86/9>/&#]npW(O(-MsW$S8]f2<,ZW<]W*J2Gu;VVXfP.!fF3^GI-m*_3!-2#`3oS,Fi"nT_^=GMH6SU-@5HM\eJ6ji]gVgi#-ao%O98*a-DH42OYJIGjkL6LY^24P9t#T3F[]\#!KE*Sss,rb&=knIsm\@gdO)h\+p3GV+dEjg3!paX&omPSrWNGAaGJ"nAeL&;ECu/+q73#f>bi?f)O*m0^/:?H#sLD(7&L4+jQO3W^%=@6#RVZbF,V)%1As97rB72-V4P/jDh)B/E&mb%dXM=K;M]c<:aOMuKMG:E/c'@Yo9JqpqPL)2fM"=%;Gs9h!C\/$pRrZHqW-n5@d*9KmS'7c3KZaIV*9h.Gq0qsa4lhu>B*ke>B*ke>B*ke>B*ke>Ocr#hT!TQ`GNS2`GNS2`GNS2`GNS2`T-K5)]uQ>T?g^n9B+m[_TEMPQW?G"a!=&A>_i;"2jbPkK\=2TYgBj$Ak\Mpe6r`=[sj$_j'/00ef#l=Ke_Uo)!nP^Sh;N1m')2CE[SpgZj$#+\&)7$/$q5VKW[3pk\.2Up,WFlX`oN.H<6fo)-X)2TVb2WW,[KFE[ReD*/2O52_^I9JmuD4UhAM;$b)bE]pAr5q(N``#)D/A[M@&W[\?i(*cg#rkk,J"L8;7UDc%a;;M\X^d)@*J0F+,<'Od.St&Qp$[7;np/U+=u6KG],HoV.S5JM&]R(ZhM)5tU/fG>HLQmYi-6#jN-#DP?p%^C>MM@rcZ5l?DnH(M+CG14=<%b#&1:ojDmr)cpd`o=]E's3u&"6f/#G`"%LD[h^TA8g1^+qo2I>5/l.KkjU>%naUOkc\')/)$pWotP%RD8kQ*GagI+.rHkT.iPl3[hZ@e[hZ@e[hXtEj/m[`m3l_#AB8=WpQLgaoNtASY3Xd&6'MeTL/)Kji)+hc4pc,:/IlN"g04XiS*=>\G>%bFS?;t7U+-[I=nu.q!r7^ke%Yl&d8u_,#Z`kW@Ko;l?ho[;m4tOYOq%$*OQWqHDefW8l?1OBq2Z\Lb/5364`1VS*8ZWkg\WrkN!]+d@KNU4XChkiTM[**R:AjMia^[RI3EaSRRRBB?DNa1A[<0DGopsBgu7**mUJkUTZb-"mIh=44?DO:g9ocH)GDPNhaKp)HV-\Da0+1oqLjg8+\+#hc=h@qF*mB:;=7$[%KlmWKBV@V*:HMD7(h-SU!==mp@hf.rHkT.iPl3[hZ@e[hZ@e[hXtEj/m[`)TX4"c$re=#4Q#%i-dNPhS*e&E,ZWSaH_&M]HN4t!m%@["W&P&WV%/+6"UkT:cl3H\WSRpi\g(%OEsH!%-QI/NJb/Uki0nim:g4A<#brJK%fBaUEWWsn>>]BBb>DK3PUFB*La57.PdjHM[fXY_5[DP>6h;d7YSP\OcFC+JRS41PI9m$(B9ctdds-l.4:H5TLq75(dn,@/enF;0YI3bh761D5+43k.Zd9LVG>:.[m@E7_T^4,kkn:="Ag5ZF2:6I[.-?PHZ8?M#VY,tF:2VlPO#V;USh'n%I:/#2i:O'0lo-l2IlI8IKceX"3,oLm#j[\EXq>H*ZWB;qh[k_GTZKLA!iqA#tN?fgl[4B*lp\?39C\?39C\?39CGW[$ch;bs'[c4`iEEdEeEEdEeEEdEenT[1Q]#S[\Bj30k/Ag\gX5sL5d+:RqBbW=cO2L>"DOBnK"4I>fYh18Gp?m[??4.TEfEXiX\%k>:4cC*BK9G8!Ttk(UjIb<>h5*#;C:A`m>&+s1*e]h;/*LkiJDNbhV9TPhl@o(Znh-nATn,t+_(\%&hKra&Bd+-k]"+A&-n-D]]Nl/>B.seUu7M`[RVJED79s!fr(%&7G^$&A_6WX>eo2]t!C6opr67&JBl'35OZ(D2&G?;3ph%YlEW0+CISQOkSF#lP_H:j*e>NcF`C0M.jdI0BtEmq@nH4>&OOrUqGO2p:K5Ahuh.rHjU[hZ@e[hZ@e[hZ@eO2p:_He_ZWYCUlG&>Z3DKt2at0\*oG-3eY29_TSFmFr$IrO/q,CBp9J\%k=j$^BQ+#.eT^TIn4hnrN\MWCOFJWRLrpRKR,qSPX56]leMF;0NS?RV\Y!jrh$t4%Y4#\\\@cWZ7_0g^1"',e[#\iXBD;LVTR(K4:B%jQ]Klj&'GKF#sOXh2?s3Spm?@qY9me-76ak]*A++b+2TuS(1"ck>1VHIk>n0pUI?8XgkKHgfE32gfE32gfE32gfE324PmZiD8gA2D+3KnijRjTijRjTijRjTijRk:eidoO:YY17SgXM&cOif#940.uLYh/*#emYVAo"K!Y/*e&nG'2+l-01Ce`"9ihI$k"ohJnr[>3l_4(tY#LXnL6BW?6+L.WhlY7R_W*2'1Q)6++#TgJ2NAL/s:pfLOhF+KK@2osHnJC@q>3-?_X4MAVJeCb@b]mVRg3XCo_'/2L2".O`lJDQi'f;V?u)KA0?:=o[2nG&"UL6mnCD^=)Oqfo5nWV%t013-1iNF[R8*:e5s1!;k$>V&@QV$$H\e^dl;oT^?M1.4_LdU>c3P?M#P9A44>tu]sOZgiH0H@bp>Cc72KH8F,:s+hYiVm*BEthoIg;gEf/^ZUTNalQO_KlB1VJ[B:u![e0@q-Io23R=YmX1W#Yc/dCZHe7F1o(Bi%CKS`uU4C0R\97;YJS9M))3(B"Nff9G\jT4*Zu<>(kE)Yime+&(mj:t5B@QZ+%3UB?&=:K;.?EEiBGgM-cgl;&`+kJpXqK'8c%'nP5GqS3eAA&C!,;%>r^-*T-c.P*3fr5oAJIWYBOeA(+k_sF<$>4@"/EEdEeEEgi#XgkLCXgkLCXgkLCXgkKX]QK:iMVF$CMT0MPD8gA2D8gA2D8gA2D8kP;He_YOC+K+]0Xn=ho`+/[=Bl"-F[h1k[fD'8YHZYr#Euie0K*SFUB;"aqs[\NDfLJO^R]=UgOEV9m4?c:42SV=Hbe.F(J^P!"_u5!^]fdIO;)=.a'AWPQd0H'h)kT<2_JqJCTIJcrB\9;@ghY\q]F2N4CH5'rs,C>LI%];8dept\Bk[KBe(PjGr$&2XZAQ@@A'M7qF:`tot8h!D(BpL9Jo*jZ;lpfb"aU$l'mZ=CXFjS3aG2C:03aY'V^DVm%TN8#17*7[@?Be"Wb6rP,%p$T9QLpIR&q=k+%X1>Nc^]<+PmfcHE2,[)'hX[\E@fl?tMC8gCY*c?*kmD(Bp);/`.YU/-`>BrQ=?6U])ESa"gp3eb_1Nn;YjZb(8MajYUa&M!W4--4I9d\hCkm\Use+PhfJ1Yn4hdt2>]q9%)2h!(_%4h()jNd_2sn#'+PJK+h6I?RJ7;5;OXc`+&1cLcY:L?I(.>l1-e@)+/VgL5mJ(6_CD+,hu(SjjL$05AUVDp-0/ATEp"S>-9K'oFiE9nDY:7Qm09@mT`C^B/fIOkD+7912Sf':@09"f^TjmmloEEdEeEEgi#XgkLCXgkLCXgkM4c/Z7lnMW@E.rHkT.iPl3[hZ@e[hZ@e\(/6=gf?Po#01TRBj30/'3_KRoBcK"5ANJ?<80cdZ7ULA?TC+FV(W09:e7k(f>)9%`/**m2]I:S5:K6$TNRdR8><9el[C>@mKM:?-Z;+AkNF:15A*>,#U9^DrgP(Q\rLp+O%?88.C2MA%8G_lS\_E!K>CVX7*l(qpj=QTVX4Ke4R=_%&9ZZttKHcJ`:jMT:E9SP`Nk.Tcq[$pA$\=S(<"&Cq.`F",OO"bH%DC]TTFkg$QOct()RgHj't9GhDC]TTDC]TTDC]V*J+^=RGeA0YgZm7r>*.>W?!3a8j@ogS->;T^JrIX3:iUt8kT%#rH]/-P[-rak2G5a"=i5p/&lL?!KuC%,^efXmq"jq*7QRVZ\5g%_k83>s4p[_(Q4P(J#946O!]HAE!G`(:XM=l1meS"F3OAtXh;/XRIet3$jW4H;7m!E=e3T15[@1&`c@XJF\V2*o(N":B$r!4?d,3Y(d!;\^EL<5`"_t*_\jS6c4!!N]?cf6&.&2TkG:udihO/9/pfQZP,I0/397?OAAK#JbVfpOX7P@@kg.G)52,-dgot8iOVI#4PqLY;gkgQ1hZ+l@%1KU-$hhgH3,3[C/cOkY5eWdCPUB=(PIfMSUPo\.d5))_(nJdsBIiq53%[YHFnFEerAUc!Uoi.-:)E26C1pR'$'"UbdbN=P%J@,*?WR>OT15gZj'2Q1prSM&e55nIC&GLuR.]BX+9+BP*hZ]2HfkXKJHRnJco\d)iFu)$ccH9!FZ"7X8g*<@.4B:[J;hsTTV\Le5(55ZZ+^5W)Jc"VTc-+DZ3p-0TRZ_5EW9U#pQ$9&'t4pe'ogt*gPXaCgPXaCgPXaCgPX$UpUI?8XgkKHgfE32gfE32gfE32gfE324PmZiD=qUIdA9?70-VnG++27(R\7VV#!!!-YgR+eq8[r8PbVGkZ,I(43eZo34!;`FIo-)[#L%BO6=62k$lZ6U=R)4KgDkm4"45M-$bbpcd,&:B/[]cK?@MrYlg1:T_&d?l%mk](cqnijlH4f!K2AO3!:+DN#<,/G[Q8as'KSq$5],%1g^eM`l3D#RNMKHjd19%e8ZL$m/9B*@Xfo/iN^nN2[aKs_ohFb1/G6q[j-OCR>H+AE;K's=/BSs?XYfH>9sge+U)C^.asApNf$m_=dqGe2ATS]K:4(BTM*@jV@e"L2jehCmLb-+S41,gZR>tFtS(+81dFub#mhmZ0/\oNGS738"k@ZubZ8<(bF47A!3;8j&-"1M-!O!)hb/s12*K7:M_&rG9C8T6A_.-M8hI%89r"gK/$_"c8u&gQ4gNRAelQ&o!S.,0d=#354>j)dNmsk&8%H"([\BbaXYc25SN2h/*gfj3Mf-Y#Misk$]uS8m;ULO6AQPKZ26uE^iiKF!EYMYu+1&&#oH.+NiOVdK6$K0p0i7=qCQD@8Q7W%V*(D=ISZ5`Q99rg00pX(8lk_ao9U;:(>*`aC9.TM,rA+NDB-4St[hZ@eNSB?FMVF$CMVF$CMVF$CMVF#tmVuHN>B*lp\?39C\?39C\?39C\?39C\?1#A*k0[tD'f5ZiiE+LnW,nK:f:U)D'gL'-Tf4fcYckOh$`$^H_C/d(=6@b'p]aJ^f6X(N:lOkOj8A/DVPc?7SDt2Y^q@K/*LoZL*!>+`CagPL9;jB0\+p/Z/-8MC@.\%jrcK^*Iu\KWfY@DTZ/*Rkmp(*YmZf]*C6mTIc3k;E,gFBfAbc5btp)4H_Ip\#H4cE-H:SM\E^JR2lj(EVgu?dI3l;8+u:UG1^`I47@#q7[DB<*?t<+SXXU7!3)\X%iNl\?APSA9]uX(R8pumm2jlI]6WG&4V,!efep#u.[_AOmVma1%WKF#3on)T'35&[j3GgW+2^q767IN\.Xlp(WI^+@ZMm9<)eBdk$XNZX?o$f?E9ae#2I!eWuns0%KfUsoN4M#k[L:UStDS0B*ke>B*ke>B*ke>B*m;eidoO:YTXSirf3fp&DpVBc6OXc-U@nKrgL`0K$3V`Wu7R;O]8f7;mt#:0SS"[Xb'CI5'Ha+/l;r9pRK[Yoig(XIuakk\[_^Se`:/P"a-=(-3B#TY4ZFXZZqa[J%sL,;`@+[?Zb=\MI2(S=ib0f/nMV6msW&oE?V8=Q]fi3UU;DF9mn697YJM6c%F&$e/4j_u9'6g56r,IL7KEoPtl/ZbB&[.'g$X8XkuECW`Ku$7Lm^]sc?;+EchReXE?I=_l/4F&#ebK=4[==flBW9IcKW%UYRUeC_DJUeXG\\IVtfa1(*SHj*g;Kfl)Q6hR:c'[)/1edF0:]2+pXt.LgS0,Me>5@B,$4SgG<@BS=e$#+2GDKSB_U+ii+:FRDZ7E;LP)eeqkqUB^SLX.dj="&hZ4n)SK0ENob$K918n%5O!T6eT"+?o[F$\2ZkGOi,Q9jr#^-QO6+)YW0u4o;c&&AY9Nn\2_;%iY'TAmCB?D?YS:rgfE321i=g].rHkT.rHkT.rHkT.rHlo]#S[,D8g?\j0msUijRjTijRjTijRjTijRjKHe_Yo[aigK19@q7nfed72*nig%Urp1@=5utAd4pKo;XU=,%Q-iTo5KH:7KdmJ`m&;(99af^OKs,8(b1:ZIEu)tn3A%!U:?O@^9Ie\R&NfN9Z2$U_pKka-TVC8&+B(hg%&iT<`LBs*!CeoKtj'*dc[U&:#hA@jff^9[q*YFgT$]G0RE/-9%6[+M"qAP6bVd9U,7B)C1C_,V;6E.:)N92KR]-.X'o&HDn0\9,,o=`[P/ZeSD^sPLS@:=-VQKMmgIUNP3O;!>\J'>F)\?39CB\ZYDXi=(Zf*e]AfgWtiP35A(oP@-KYj.-Z6BI$@"h_+Q/$,%q9d+osh27l+dUX1/%)dK)Mh@3Y(KpHJIU$=>]<=6,K8"caGW,rFt982q7GL.5'OqUYkHisca4_^8'o-_OqlsCXHi(p!e`9&J+PFa8.CkX`=2IKA5>COnDH/>179@Ra.h0#?Q5BIt$hbJ'ps+>fBNDc6u7fB]-6[L>28b+YZ*'MNXF#F;fl<,8j9S3JG#3SO0_A>@J?^Y0W5sPPZ4&E)KH=DSF;6)f;ct$gPU/Z\Kp.V]?jisBf$G$1uCX-/>EB^$Fe3CPDS^$'3'$DkG(G9u@.1=(YhpZFg^OMU"Zs>%E56?MfWNp12?teKg6V(+.qubX`Fg`=p;0#ZcgA-'p0.liqd?%],rcr0#4<:Zi:-P13-ckj:0eA8UT"cM]"4PYYRe`Da'`Lo(;=*Zd0%g@'YX"/(FSjW7B_^8p&+Z$66fUH94+&b'C2,W?`[r[0s\Wp0`(3[h'Ootn[A[c>k7;LKnjpAHe-pGAmY+Z#YW0uPoJaWl?PAZ7`k[,0(4'.6TrKLSU4W<9]iGXql<-U;nN6Wg>6KVbOs=D/B1g2^W,2$].$g;*XaX=uR:Z\qJLnQLMhMmn^d>B*ke>H-YkijRjTijRjTijRjTijRjTiiR@Y/eJHqS!N<-mA[Tn=2%2&WP=#-JPh5Ro7SYPR`YCd+]H3g-$R%>]&)P@i5]BCL"@_K>5ZA6+M@a*K$iVB#XVD`lMb/p:F'_<(0`HSC$I]JM'#[Dk\W7pbnX]Erc4F2^.>>$ZJ=@#;sJ'E;b_W>k:&fDGE)d?^_H^WM/h6aTdn<]0`0E"b\lt^j1i$@*"-)rsL3-h7Ffaar:2$mt@RJ!:Y3BYP'%K-%g>M]ImnD$A%i2Gj&:5"meE_/r$_bg[rVCi_("1aU"d9.DJM,f=(i!mEU"_*VW=*-JK;\[`TFQY%#!62gN\DCaR5`bi\3`GMH3gPXaCgPX!f`GLB*ke>Ocrf4)QQd.rHk[gfE32gf?7L.rHkrgPXaCgPX&KgMpHr\ZM0JT":o'.Os_WUMCY!]-j<*e-@RBK2BtB&#JrN^9.]5W]HiPU)WY4?'(sC5u*Q(IG9+4r1gGTpI:p$Tr`8q1H>irP&.]0-_0g/)bk4rOHrml*=UK5@AMDqC%0aj^?tq*Des[5M1ZUo8654YaFp?*lb@fTR00KM_rOr`LD>=>ZK3j0&hVAbBefX+<%p86'T.=QJ.6/@l*"G6>PnesT>J`CY*Urs0s+?kHIt\hS:-iK$)#.9=K%IGh;H3TO=Gse$['i8F03nV;;jTh0SNeW8131)@WJXNel=DUNYfnNUrX8N#S[4s@>'+7=s/R`gG)Wi;[/,Hg7[c2/H\?39C\?48#>A`B6>"E@MP<&C5)>?jp9(&bQPLe=Wd5O492X:B$5/d19[hZ@e[hZ@emjjCPMVF$C8fbCk-LRpgPZB`2F.](EhmBBD^03a8D+u+#e&,h)*`1laI,ApJEEdEeEEhtId^ZDCD(E3i3^"VaLZ%i:FjSf'%L"0/nC[amj;6E7D=\lL2YBF(VB0c8)PF%A)j7OB_(RJC?3DQAH@?O'k-mZTY*@BF&,h]GQ\&R`/qbP&6V(Z2"=FInA"2HMLBd5YY7VsniFus_4F&SB$n@%5:NF;K9dP%t.YjKH$ukU%*j5@*!_(]9LP=[N>m)OXL-nID5P0&A!aUGL:978rdIZ=o\()k`!+1[9NS^lpG[,7,Z+GA)D>%>>L^uSreZi%C@U=3nqZBlf3u4f!Z&AD:'8^3ZQ5krDq#.8KeR!fK%u"jBWE_?f'6_SEPVbF>WE6J+g8]+d0nG:74aGpX^>;!?LQT@o(BJ8#k5j6MNiRR@ei9bml?J`:"B20Fu\F9L>M@PA"QTZJ>7mh_9@il4"JZ6P563ED8f`"\?39C\?.U-D7/e[mtCPs^1f_!2#$CDjeis)'t4pe't4qHk8h#H[hZB;`ji/%^$hLg?edT"#G1(lICB%fj0msUijRjTir-OM[eb&Ld7GiCC9,eR>%ha>!G>IEaOf$o[@I\)2tfOOFXO]/T7\LE_P*p@'DqqF+YY)BJg.M9q8d-g.Q0S5IN'Qo[Y*D09+Ve;$tlcWJJTJ`&<^-+mh;-40X_#=I&M[1@288gZr.1/&jgBlnbXdqFZUWc"BNAk^Cn'JWWK-$Y4rdMV8pH,LP;D0Q*I(p5aH\jju*aYaP*Om:VqL0.,;Xn,3LfT)2sr`]!Qar,)0#r\tjE*-ui*-PX.g>jdUl]h*XHVC,L=(A_.6p\FSms7!;\@/f1Rro*\Ol`efK!'3c\cqu>2$XpbT-a`!Q@TtJ/[,jYMC_/F)l(P5Z)!]97T[o24ebX)aI?Qi"l?&FjSXThK"W:.&T*?%@.8Z;!"T#J2#e.-m,^Ume4F[iEJt>0+@!'bWl@6X%hE89sY33U\"Vk1,Y,@;c;m%X*rrHPbZC+%#m@+,GC1%DsL.0N%BJ-;.[_PVfLl"Z-#,0O+AXAkE/6XMH0CcO)fDFTEn8[[J\ZNBD\?1"g09+_DgPX`XA*1GJTRG;Iq1ee$Q`iXoe[>p?P^E\T4E0\WYn"5,RjOCVi1qWAA346A,j70Z(NoK,U"GR6ARcQL*M#*S]KKchm]8Fq<4=`8u;gZKa$`WBWD$P5(Q:>>3?:"78H-(U[s+@h%RmHg^[H%jMX#SAC84DqPL)FO5*dKNJuVLgPXa#:&>\ZP'B)1DiOX?:O4j8.rHkT.j".ta)/e4`GN#[I>\n54/V)_#D\LLkmj;c\k3$ruqWlg^&Ql&UNrVoGRd@Wo9o>CO#?[!'IE;!_(]9]*WH;Hna@H08*h:5JUjf4RfkO%$X__hV$h1+W=+&'u5YViF"M86$HBXoF1H1&(4K@*fp%K+$J)Qcb8V5e2&XUEli>VEaa"WjZG]P_>f_*Z*oC"?KYar/Ka-0Eac4!$g(YK@C@lmjr2]W[P7s*)D`Q(6Qf?n(.1f15#dg.JtXk#b,"UF9[IFM5]KO]e>1,M@=UQZdUOCI.i,EhL&BFg-qK;Mo^jP&9pFYTT_Lkc]XP;'<#[=n[lXSX+jV;Xnh%e6#!c/_CIid7#:\M2+PLEL`:"N%N]9A(UFglG^E;<8>=.DMit1C#+5ZeKJ[`@"nCm%@]R=f6K("!%8Bt]^ch<*MSGOud:$;Ag9YN2.c/]5!)#=qTgrgT%+_>hhH7B4)X:4VL0F(c8W1_oohT0N>O!UZ]Hi>1Ept6dgM1>@eR.6<'[#@a]!6[BKa6cW_F$"J44O_f_RWLrsC_i:ooh)cZt-SkgLPWY3U(7Dl0^.WG+NK80IRi#>o*LX-.Am2(IqiB]N[Hr1e+eS`[=76q<`7-gl`*SX]_mXQiaTgWA)eg#.*tO0NXkPA+aPt*YSfj-�p07Zr+%[7^kJ\EfW9(F`&T.=G8HN7LJFqAS1%gCRf5\Y$OA>I42H?'YZ`.!7/fLSPmM1F[N84`UH%^N`b5e<4<,YABpc9]slk7AU-#/Ytg\,Hs;l7mtEfg=-$]oZVR]\b@_EJ"c4n&!g,54Hej%Qo5]%:8hbJ:%$n_h6!9&:FL9%&Z7=M=d8kPsK<(N&7#L)s4GZfrUYsT6Un0QGYVm?ug'cR$[pn[hWh&a)/e4`GNTSnT[1fa)/e4`GNTSI;.J;gfE324RTBTFAKC8&+;%NC>9U]$"NbpYY]mbfYo*u^R3mT`28Y2#!HA'M$=(7@*o=ld_r^dci"oE(ce_`Ra41Ib]U&V9T'q3T>?uK8$.kab_6Id4E;3lN>^TKV-Z5fu.Be+YFu^8j48OK^MT=cII[4h)ZKTSllB[`Eq."^K@=E)$r9egH@Um!rPRIqBnM!n6!4-h<0NSo47D`/L$q0sLJb#O?-n3:TM@2[NQm:[)6X`_:kcurd_t1NKB*[\0[ZFoLA=bseGnKKg.m=/Hi]ftr&/?,k#nc,-'+kF?mpAHC6$nFF^E;;QY_AlS:E_RQ,m4CaK#$";&G5N26sm\5iVT^mhou2Yq:pRP#N"D5a@GaiL*o0oi/u>CiSI;=mr\lJmp#msZS!r%H4)&u0#&(&ZmP:PqA-qHlG26)(Z%P]_rV+0i#c8+Sp+]'@8JCth"Ul)cb5*>7o>!4N](a5d,c>>oCdmr%e^+)_6rX1?miG]r+(/Cl0N*MJq*NJ?-?%kq'*"UgThYZUE*VCNma-7&Y0H+JX%3!W&ufq?O3JE"4`+ZBi;1QipIeoaNl[=nZ`B1P'k,9;:O(DfUQHnIg?5Y>Q@KZ1ZVq!^QD&FpUn8,,I"olH4&[1>H'>7%3&69r=2#^l:JhE?2k5u31nO1c^PlP]mh\-js;]]#jNlZ3H*gq+&Wmp(R%G:nNobq$XG:H3E7&*R>E^f[9g"d=dUiNUl$0Jtruj(%,dj90F+nMYUHB*ke>Oh]`j0msUijRk:GWajFNn]HGMVF$_mi8geVenk:7@'6nWnJd:(nHD3i$d5nBaaCH';;kF(W)n&Trqr4.N8TMm\>!q+fQ;rhL?!DHibHsf)h?d-:fX"'(_*%o19oiB=5O1b[q,VXbV[MZJa)dLZ&+T*PD;+^uoi(]Srop:TkUSo'cnQ2aq]EIL=kU>m?Xf'Z0P+H8p0t%5.JA^tCL`Na,5/;dKWHipqG0kj/=[=#]dGou$"W#Y`E=>H,B(^ZBY[O2p;NrcT3fV3P=Z/$QCj!%Ws`nDpSS/2\]j>[8o)WW8MO8\?39C\?1!<*fp''a)/e4`GNTk2iQLKgPXaCa5c]7?[LR/gfE32]RRi/XoTYSn`R7/ID.-cDk66S?rLsP=9W3fV#OPU1M8^6`W^-P;'KX\5Zn1(FJ?:<;[Zd9V8o"H"`"]`G<2e?t&$A,.8:?XSB"24Xe2DPb@;_u5PX`urLn)p6%[C*NW!q\UiZ8`5@f2'2&9dHgiKEIdAR]CfHb8"G><>#]R'd58;&I?j?QS;e;!bP)3_,TALQnIr^a[1KE-m6iD/G(i"f^FH9hd\@2HQRS3O$i_o4]#k%&+Z7a_Vk$L0V@b:P8V5^Q8]4bhLs;ClU&rY.(.e=HJ;_%kN)tjWAe3?m0ZN7Sd.=66mb++O)R_^JB<%E,!d&=3!l>dVdM(DU_%qUVID]A.!M&=4tO7\N&41:4uXQ8bXT4[<4!Ug7_-AJbMQ]DY[84bKTV*_i.%umD=4p9\?39CGW[%.p[-"<`GNS2`V\hXgPXaCgPX&3nT`r?gfE32gfD(;hRK]egf@("4E0sb>;a=6a?4S<:IEaL%((.Q6;tq7?kR5/7\RD=(eST?Kt9PuXQY50W^4]Xm=VL'DTF6kJ^d"0\Y'&aE`sSDV[Xiu)B^l5&`0EB_:sW(GSAs?:W'3jGsiZ8$`f!%Tlk<=YR9g4.>QZ]$ukNd5j,8P4ZC01a!KYm/JX<'c%hMW%H)4d'O!T0TZ>Og"$QT:1,9?p<]hFapWjmDRFA.uO&,8L]JKkBf8ma?<>`rF"pl$\O2^k!+L;ZI^d7oEl@V04@0@"D77R@D5R*c$K^P\_`J[bf+ip\_V.:]kS'&\m$kY/W@G("f2GU^gOKQ34K4imN-r$6nbJH56F:;f3p/jZB0/7MVNEnn0;#%9=P6P8KKRNGT)k]cb`Am.3\[I9ZN]U.2$u*&sY9mF$th,Kp`c:R#X08j,pJu.8<7@_+]Ng_?jhN\Q+Ys1*b%t3PZ6Mm4^B*m;IaW4?EEdEenT[/;mtVgj't4pe(%3Lj\(.+R_7mPfe5hK#b>;-d%/iQBcoX2hSUFG`hE:tCS^Yr!S:J3%0rSe-JVo1jd+8^m;9^3tjsV$k9E-[IT-Y%]nI+9_k>]8$RSdgo_.spi7K_W:/:o"'p$DqrPM/*`4:2HpeC_RqJhlU$\@!28FSf\#t`H=6&=\iLi]hQ<#81]#%)o&U;nrh/Bek8F2cI6^?@">A`&9R*$:Qlp4gPnLJ[?A)lc$e?odX-9K_iu6AJiCjKKRQ%U"D?ecH3GKGT!E60303n34&[7R*Duq#h4qM`V@UnRl8oi=&C+GeislFS`n&r$`f?*>T8_!+!ou3r16U`4Norlqs.,EeETej=j9H*/-;#>8[Cu$5oGi@4K\3VB_Xc-jLp48I0NnR7IRM%QOeNmgd-fh>QAAlCIuck;]gd8"lo!#jPWIlGe:OW:,Gg\fN9"l@Qm1%`gF3g%mVJ/8BpHr"_iFD2-!1-A]o_KW*B)#Z%ISd"FFcNin/QW&f/:?4AR*"M]-qn2*sd(gm@4f7MVt;Rl*q!nVjYiQC1)\G2]sc9KMScb!n1nmVSU)7uT[e,qj^I5!W=#i&HC*fp&6g%(:k2on.oEYK;3Jml5Q!fl^+#%NBqBRb(<;D!)ZjK@n>f#7]bmiI(2e!A@IpDeQDXPqP]9,P`q"RY_\i4dB0Lq@a?EZB9hMU`aRhn9KYD>&M;hCUDqj9^`!Q_=>B'h%Nc'oEOiJr4X#0HPEMWr/Ap4NS6\cgQUQ/!_k2HQI:ThSg2lO6)!W(Q_?o6(..W=\YrRL9hrltP5+':eApF`DUYlj.Fft_us,qK3-8+peN^:mnj)B=9id;e*Qibe+nXgkLCX`urLO8"9egPXaCgPY`(NSB?FMVF$/j7.@Ykd[b)XgkKX5Lm9Grqa9mgt_fio_&_Z=*G`'41_,r`<\?/9i+\i$\ks%d$Icu&^ce7TiBD'.teP/\?lV8;Mi++DrrMS@]-6(^#&ABSqiNC.7:(QAQtm7WeJdirfE-\npVG$a#F$7;Jrnlu6JHW1\7Du^qD7TU/,,SgQ/N%mnJC-RDuYOf1H*VQj:ES_mY7I6#9ifXDJ2W4KS!isck.fkF4goVnSSn[F;qU#GCbpt2UE9+!?]Vd#'uni;!2U#I6e>so\LGiJt8RnYn^6ogC#7pSKQ0e/+gN\L:2m7?nBA;.^&2iZHL##E.A\1q,?gfE32gfD([C>;kFA6gB75ak5GVIrUBDOrqHF9e`u!6>(Y3@-e)]K)R`Hm=P704$("-Tt@oA#5a0aHup@,XVU!-X`urLmiT+e=JGgAF6gdkB36U3+I#!CmM$aF/:IoM8RC>citnXR?isR//E#s!/MNIW#=2uR_/7LOE(##%C*+:!]>IA?D;`"g(T9F_!)^A:_c$CI\F-jA-;nct>IWKu-Ii3qPKq%i4o^58`9T)kmg6l\(Z>8^hr0:FaUV7&/&G=)IeX[7RB!OLcr8U#_I6rlPaJOP9Hj8*8.&TI9lE`PJ&K`5keST^m;Sc5'b4h@iCqd%+KcAqgiq+gg7jEX$`>D?9Aqg"Ttmn?NrX==o368l,-51H5P52E0W5']^W/t&I=O)7`]7lRK(YFhR"e_d0_gq6$l>.(.p>*,Am9Xpp)EN,HC=udoqY,[:29o3sYH:dmh*"PVDHX,;5BWaDm(H?rhf#YtIe!#l?-Ca^oo%Ar4h%K;5MW?SH"q?_M+)/ua&;TeSQDl1`[.YVRHrA\[a=4'XpNoK7u_Dg;i0DX=./5@eunk\P:G+T6+^NZ)uYZCb+!L[M@OH)hA6;;j;5'5j?++tut?Dk(6+&p@A%I3`R3gJTCQTEp+5\7CUX29G"<:S5`.XRgc'b7BGq0hq0!t?_mAbX`UZ+VYemYt%lhlUX@mkQc/-^S;?oEG/RTY\f4HDQcumXk0T4ejZ:!6MVE6WksZ%68'lh`D,r(iVCj=$eFq@<:RNGpl!b&icCg[`nBY&\t>qHN`O\qCf]fW53;eNf?YCP.pNFi(#(3=fN&!&.Bor,[Q=)Urg4"kF.Q"=_"Q)12A2lk02RmL=H6X)mFQYobiJ%.\L3L&3ESJlmT:(;"L%;fFQ#%,#$[)mW&OW)l^:h;Q1;^37DX8\+MeEXWG>Ht14OPq1A*iHNdYmTlTJ269c4<]-h:T%Tb@:RtC?F'ku^[^3!Ij\+-Fm\K,_3M@(f-WNsc)3o%69(b$5Zqd[_\MKqVe(+gUI&-M,G=m!:IB!(gL3f:aWP56+lJ0Jhl>?C6;J3a@I8-ElQ4kb$r.T:aJpNp$#W7>6PIm;[WpbB,$.[XT;GH"uk"p9Ff.)4:.s8SfF4K+#Wg[*)W]Sn1;S?e`[_h.F[UNI['AEio^p[]VZ)pi,fN)ghG[akX!8(=g/%-1-$ess@[oHCa[8gZP?qMa5]$'Y?"TT*`KmZ`l'XB2I5,#t("`$L8NK:-a5Y@l:Ts!f9Q0<$c]q(^oUU*NIduZCMZfhXBMBZ5Q.ZUSN3N->+/HjL:QTNqPDQ*R,bVf$U>*g0.HGCQn&NkuHutT^m;Xn^kiPs"eT$Ih#:JfN)ghG[akX!8(=g/%-1-$epPU'i/Wr!!(c2D8iqMD.-XS`bbkZ!3V,Ed@*mc@Su7Y=lo,30p3DRkPGK`ZEI=UP!,M1:e.6QV7I<)kYj.5_i8Fus79GPHMXF0GI4>;U-$lTAT]IeGU,?aW\Y7P:39]3Q'eX#o^*8"FfOlt/iEH[G5EpS,B[9g=&2/*-TY8Z\$u4+9q)"X`!,t'H]u3kE@/F_r9AWY>5&QXdhTuB;7Geq=&o&Dp%EQadXrdXlq2BFUP;B":lk>V=neX'%1rcD?:od&(,7q_&($'e)*WSV_pV:$f85*]0JFIs:sCRRiH1-Z3XR#EJ6l#jEL0#AXk!V<\OBmb7%(h$VL!.ZP.>?+e5kKtSa>G5NYnlILS'QSA;uS/.Xt/eAiQOiL'Eq3YE@dP2>#]0^M@4.e2q\Woad+`i?<,-SKH.U!=SEP*9"*Hb8NT4o&_U8'W]GFjr(MKq"4&1iq((n$el!g!)sB]$KYc%TjlYTCb#JcC(Au*j^VMg@]'+43cFr=SDT^ojulYbRgK,q8h9(Dl_!2jPOXd#c\?K#=loR&7_`5:s(jfa%@QSH=D07`ntVnq87(Du`mn`\1m/kX-&eV)Z4ZngkbMZli?G?X^GaE-4iXCTNtJ!35$33LYcRm*^h(?j_I^Ql6H-12fN%tP`"Ul4QNc+N'f0p>[C,SKQ>Z)!@Aa8k!P?)A)F4]aJt*P\FT)&4h[WU$5"g<>[D3jn'$^PFlUrga,&%T+"V4Y!!#haCb,EVCb&b)Cb)q/!!(IJgC!rngBq$9FPU!sP\,CIm\FPT?^N(8OuF*U!*iAiC[tP5Tr9;^fL.-#NEb(mJf;,r,DCuEROECao`MDR602)C+!>0iFll9%boAE$4a`4`4Rp8I'?3NOgBmo\<"[l"L9(#45g2W4/%-/m!7MS8C5/e_5=!F\dsbL1RQf28:75UhOuF*U!*iCK75`&>-@[\i>6Sg5=-F`;n<9dF.KD9NULp:SA_o1+4a`4`4Rp8I'8C?-!!)#/D$?TLfN)f=!!&lB[M=<"RqCEtYGg^S`18V3dp^Oh^RIjP;ucnp@j4:AN8FXiK04!W2Z&G?HJPKSNtJ!35$33Lpo*_N;oucagBmo\>UaJ>!%"nPfN%tPTIan0!$t@kD3Zur`o#T3@@E-^s6sshD6qi10n,2ZdjZ@mGFSUhs'^@g!5oZ-MJWLs!!(s*Z)pVK)S[0h?H.F?_mJrH2DuM(F6(Zk&`ZZPI)EU3[[KqQ3O?OaBqC,_%fcS0T]2[nF$I&/1#$!*hRnrRfMI,Ij:tAMZCs84T5>cjbJ"D`r!U/O8=>#pGq.6_'akr#bMhq1jjWE(b+u1X/]ENSS\Pga5Un;TNZUe5:O5k)nR,Jn)I%ukTVPtr7*(#'(o$(Pi4<""aO5]!^-fN%u)!bWGPe\^>W&6itOd\7u0059X"$btESYSf3F-_ua:J[40Ch8\p-c3V2K@QOPi!.\2B6[SGfmmhdjr;.K'J`)a.7tf1q*u[=+I#LIs\/r+Njk*T6!!!#A_6thQD$9n>!2(U381Bih(5l='so7#3`_nXNKk^`49iNpCVL/3jCYHD>=Z)rQ1_V#,Y[IEqn`#m`K8o-!X;rVTqTNZU6+^(!% +endstream +endobj +30 0 obj +<< /Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595 842 ] +/Resources 3 0 R +/Contents 28 0 R +/Annots 31 0 R +>> +endobj +31 0 obj +[ +32 0 R +] +endobj +32 0 obj +<< /Type /Annot +/Subtype /Link +/Rect [ 372.994 679.455 389.5 670.455 ] +/C [ 0 0 0 ] +/Border [ 0 0 0 ] +/A 34 0 R +/H /I +>> +endobj +33 0 obj +<< +/Type /FileSpec +/F (resources/processing.pdf) +>> +endobj +34 0 obj +<< +/S /GoToR +/F 33 0 R +/D [ 0 /XYZ null null null ] +>> +endobj +35 0 obj +<< /Length 2455 /Filter [ /ASCII85Decode /FlateDecode ] + >> +stream +Gau0F9lo&I&A@sBE,nQ_,+&?9IU%3''5*Ib9fm@DG+'I#$'Z<#,XYImSR5`#"NZ;@05qR"&:rhMpFY5(YX#@/04*OBI(QVF>CETtL!PkJ#F7l-j=k0X9TTq_QAr,6F"=isj5T@'NIui*`qGOS^!jU37Z@3B-7&'lo0"<;'q-uD%difk>N0km2S-,H%CU*CLTQ(N((e[,/g:e1DKj[Hcc\;*?Dj3mX\$G9(TG^C>!YB[UE0^E&%1in#X7V;L>#2B6/8$1^)1)MT3.b6`3V7Q=V*jpE]fAP^.T$(WUc+hOUA(%#oLKBMk4_M^&/GJ`'Fg^AJfa^r;(t?C,U*l5la<)&=q$]C5f:Z92E1q6"W;^j[4+*/``.4nai1^cs%15n8$1S,!m5QPhA\-8mV9AMQj2/.h^=T["#(/bs]\f-[`b?r4Emc'8\79[Yd$rji.@U_*"3%?uSodu)3([kH(f80\_2E6^$g=TZ/BoR4S3?[ASGI/I53>:mZLJQ#F89aOOiog%<>E,G1oa8ep%(#Q1!r0f$.]0cR*cb$-W)DXC\&IUSn9cJDLm6#l;q!^eN2iMA]r$nP4Us0A%S:2<7Xj8b%grO[CH2Ku?D$_+$=41hkAY)Q9R[`:%pOEZ$m\;5aC^E./Ol8J:/.U2Eu7;rc*t^e]/n$9Oqjb=W`pr,3&/J3(7S;8pSUpe2;T#F(Y_9pk5(l>`t`GcPmCh'U9TE^))b]>%;]!WdU_'"K/)pZ[qDEYUXP/n)WkFB'Pa!s+8D6`c+m#3:GX?5kC@6C)8fu>i+M%+"+_QCr4^ORYXkP.1@=&:,g(81Jbg'h9T@P0@O"6=-BlqE`R]lD=[]ns8tIF"R,[d+[M@m+fW;DPpX1"CLe2LH!*/A@9rJU#9Tt9uSg5=RL^EK0(mI?\F2`[%BaW7,s-)mJ%XVU2XKAAX^b"7.2fUUc\-tmZ,:Ag#f4/E519aWL8X!k/nn]Sph"PORD9k*,d.(DC;'P.qC3XBY4WjHeW1>g_UPk$Blo>Uqknp:T!C%6oe&%]cZjaS4d=NUOHIV:t_o,#u-;C@O6#fe=7GqP+X3t+],Egf-%_TN)"P*af]lP>Ht,&&A%Oe0Fu4h-0CZ`oi9K$o\mY]EM\>S2?WDG%.R`QXO*b%T$iNY&G(Kt&rk?c%A77(u;=JN>B&PN%b,\S<9,d'^qbpXFjto5BOf*tZI25A`W_22X_^EiMGe2qsl+RTh?&)uN*9@L7OHmNBhX0$dPbJ[q*0>=HT&^=pI*6l;"KX6`O=cR@)q-W`WAR]S8U)Lnl&-Fc7An?fOP5P:5,#TtGP8%ssIplLkj32p,ei[4Qui;7D`l"[BTTZiNE.f1'%K'[6ILf(c%U,P]2U0-7Qd]a>&QqX4^sdh1#qJA+qsArLtL*b2=k(NX#*Q)=f89c2L/EEnDVCicOV`pN_W$qpQ6D.)f0dA'..Q`m]#NlH_oeX<]t0sM_Ei).t6F21oh.Me\dk=h!o,O#!-GU.4%)Ma:Mr_/6=SoY91Ve"qR-I;^MRH0%T'JbSj^lI9V*[<^Uuq\Y;P(4NemA$uWIH;=,8j/4+4pOn^5AmHP/CqkU6L6uDC;3iuAb?M0TmpJ:/tm*5Md!tKu02Q1($jRe1[Rj::c&n+LOYq,AWEFhSH!;1I2FjYO8+4f"#,Q~> +endstream +endobj +36 0 obj +<< /Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595 842 ] +/Resources 3 0 R +/Contents 35 0 R +/Annots 37 0 R +>> +endobj +37 0 obj +[ +38 0 R +39 0 R +40 0 R +41 0 R +] +endobj +38 0 obj +<< /Type /Annot +/Subtype /Link +/Rect [ 103.704 300.137 134.691 291.137 ] +/C [ 0 0 0 ] +/Border [ 0 0 0 ] +/A << /URI (http://www.abj.dk/dxf2calc/) +/S /URI >> +/H /I +>> +endobj +39 0 obj +<< /Type /Annot +/Subtype /Link +/Rect [ 120.526 287.537 195.253 278.537 ] +/C [ 0 0 0 ] +/Border [ 0 0 0 ] +/A << /URI (http://www.openoffice.org) +/S /URI >> +/H /I +>> +endobj +40 0 obj +<< /Type /Annot +/Subtype /Link +/Rect [ 251.026 265.937 320.011 256.937 ] +/C [ 0 0 0 ] +/Border [ 0 0 0 ] +/A << /URI (mailto:lbj@abj.dk) +/S /URI >> +/H /I +>> +endobj +41 0 obj +<< /Type /Annot +/Subtype /Link +/Rect [ 178.522 244.337 191.023 235.337 ] +/C [ 0 0 0 ] +/Border [ 0 0 0 ] +/A << /URI (http://www.abj.dk/dxf2calc/) +/S /URI >> +/H /I +>> +endobj +42 0 obj +<< /Length 923 /Filter [ /ASCII85Decode /FlateDecode ] + >> +stream +Gb!#Y9lldX&A@ZcFA$X>kS&egdNk$"VDE)FaeA,'KC"]hi\!f%Q*noGJ\'f<2$8,Dr%t."Z&P[cu!`Hs&'p.Jn.49dYLWCc\(Yf4;J0>!V$B;:rS5gmRj;Of/4f\n*$%[^""R0=Nr\Nhe>Zq8uA5Z6q&BQA60kLD'.`;;^]?rhYZ/@rX_?&VW$-'B0on*ffkYaFDL19a.GE#'N'a*oni6uY906Q?C6'RJ!NXkS?;WJD""CB[,L&&K+'G(Yr"k$'^9k&RQ,GIXtICD9.,9gCX%/)CQ[*U[S<0jerMb$P*`l0(j$1?T7t.L6@iW3YSPj0=qebc5'#UK.HF`K(C:u@0"mP"-6FPAK+k9u]MI8qO/@(!CeC'ZD+XJC(KsZO*`cN]>B/K_p@:>Yq03X>`?t3\[-sINdd*hWdpc-/?]7Puh@?A1Meiq:^-Y8YLc;AjOAGdConU6DqdJ2bULp(+Y>q^YZu9PL/aAZ*)E06qd^PW$o,6$&?;+OpG%t(%N@LFRQM=aS&&,51E0bfHE9RiUT?$-OPTN,Ccg8+d/*r@85]b["R>Y:`[//0:?ija?GW5?cqQJC*;mSnQ(Y7F()r^t:'M^3Y3OtXgP'@bkQ@?=#N@VIWR?BNm0U!N]WB,gAj~> +endstream +endobj +43 0 obj +<> +stream +Gb"-Vf5DU@g-5MNi&uLLhP36dK,j6o!XgQ`=g-5"(5p.@YuiR.(L,*a6WhQ5//F/_@^0#dee_Q7mqZW6k--`Kd[;n&bZ>BQt2YZ3cC`F?)S//F/_b1j4_n7D*-cNOq!1WhQL;Wktc&[PCu:G5a>-1f2`qmDAJ/L@^0#d(5nHA-%gCm(5nH[iq8)Gb1U74@^]aN=9Bt3D-/>i[YiZY(+X$Ufd_EYas9m,HPCU&dO["Nc)RSU?`'Ah+XT21X]=L;dV5X*FSOZ#[:?Xa2Sr)qX1gL\=7bIh*t]?'N*uP_OL]8t,L7WZ.t@W4JeiJuWmlcE^QRgo*$;b4ZUU=KF0PGl;'UEjfN*0#MoOfZR)u#6,;@,ToWgO:WS?6@sq[%suB\^g_dD40o[.'oS@#`N]l1`QD6OqSQe(Cb]-K>Hq;3!>NR4//Ba?`Tn%mQ*\GGQ!F%'XPTo@<$gutP^br$rjCkfrUXRpme[>n\@;acQ7dsPML@1$`@`QA][9W+"K&^(+_;AQ((&$.BV;.e#R\ECfkD:A`g:80YLp?aHVk1Xi`Ph;7Q^"(9`Csb-b'WFL@rS*DBU6"*/[Z?Eqdf/X49LZ%m]Pm?:AW+]U^Loe5K%);nE*V[QjLq2uQ?l@GF&[2qpiD5oKr&skBHdDtS08(3d,J/OV00XGKrPZ;RRl/c\g7ceA5XUlF[B%85q[^ZNRFbGP*:@Wg]m*Qg*4$Bd'slHRH?Kh:ik,faE+dA[`Ui<'1KuS1Qjr;?orHKGG,lhD>OIf:%K>I+WJeSKrF[G*5iHXYXNh9+$W9OG=k#grA`Sb>WgX7C9F'U)>2O]S1-NBBgM(-2LX*s.'#@9=g\q*Y2'P`X*-e^g3k):9jb4C8lk?IMp,,.DElA$GQ>n;m"UocH_@lp)jIG\Q_Jn9WmO9"nY9CKTjB?3>Q*-]CB1g:Gm4`D-%a.J`G4@+hAXU)L#>A7(!nJBoKf+W:l]9nUQ2<5OXOTD*FSQ]>^\J.O4*qLh*Nk):Vf0G@!uIYIboR]\G<+.mYD#]kDo13q(SPU$;4,%B%ns+Z#QOOrmm3Pn\uA:C`Hn@QU5+C6M'm!Y]OJr#@p8nT7TYbRp\S5(6C+!rjZ_cQ*/gC96QhWiejk(lCB&E0sPa,9_d7R*u.dm;momC41j=C50E5:j]GmgK$TZWHW/icKo>-DRBk@4Fh`f58b\.F0WM2]k&!6^Aa>DQR(N.sN*j4=-84*XF#G+o292l8[^.o#Dsbk)CY`X-.\;b7!(d#qUoS&k4.<877PcPMMS11L"GjoZWT,qm4%sp8>`P+8l$PB=;9Xb*Tj="eR69p85WP$5_$f1POM>fo"H42\p&7idHoHkBp?D[UQ\fS&N.8Rf`%->Weq0'P=Dl/R,ngeY,V7iFD],7ep,KjW@=ukJ'Vtrld,W5OskSn].ikgCYb$^OIba3AX.A\)72h8s\&DKV\pHB\>9l>db6%.X&_*nf:P+Z-uU]M`qdh@csD[>K*gp1Jt0CON7TjgQ_*)b.#7KA_UYDiCe.\qE6f=HPa+34V,`E*J/.+Y/-'.>@I9FqljJq%bPq#$Cnj'&>h$_#)+iL_!^eQ@K-,Z:qUHNX?1MFB!9tk,n$'Wp>_L4CtT"pHf,mFfQ@VR*BF:(*k_c')>f`;(L[(4A$Fo_/M,Or&13]]J4*mJLi!pXL'd,VA@j3#ALqJ4Ir^1eH4t^-XD?>\WZ@Bt9B'$J$F/DbXt8B9,>&_=g"QB?omj/,gEfY:(1?+pQMeng,9Ke$T]["Y`gAf'6PjTKN!4/geO&;h5VLZp/j+\SEB\t_llLP-7r-PBN,_FUV6[UQZhAh3_j0O$89&bT)JhYrnEL'=muZPBe]%4>a7_;pO8!R&u)HZdi]XXlS@pQ8]\MW][:"<'=.PQ[b'KP*pB"o0<6T%tCgJI/@ROb9-]gSfKJ=YJ:#lPZ2OR8JQTGY]?e@C,6Qhmt?PZ4.qCc-m),2hZEL20YVob,lX+DHo"ag49bJO4GTL)%`3d,Vr5Y\$W&m&$.NeI$WlaZJY0qWKU3-C\9[NtPg3GLUn9NZrq^BZl>R`?TgotqY0pjY3%QnWB!N-uj""-j]O],n#oXG3Hn&]?I=M53I5,j2'$VOlBj^smU9WYHl.MnQsl\D'f.%NbDg6Mai>>6Xb>N)KC`?>2d`fXKO@,KL):poU79N\M;$>2#E)(W/4Y4K,17eJfEJ+sG:<7J_E-#6o\oS'MWod4Wk;5j5D@Dfq)0OaqbQr^p1rq,l5@$Ra_WfF-kW_0"@KFs%g&m-Er8>ot*@^[JTcP!Q!ZP='L0:8l/XdH5HM#)t]MV3lCW#*ZYT3\mOY=edG@sO93Tus?,rc.#2WkK?2&rPjP_fpV.,96X%TAfX]rW9hc(]e2XrrbP$Qb\8#2)'L,8nB4]0%a];\,jSuKaTfmCp9k+'2s4F3=Cb+=#*uBFe2C6Gi-.2.2H:#&]WSI2tZt2InR-A9G[*K2eUQCHJA1!n#JQL#2dspHJLV19\>H$B^nP?S@8\PGFX2`Ra!O0i`+RClQD_4FpDnJH3o;Ee)AaBa"VRC2;E[b%i9!L^pLD$0R_5E3.:H`eD>ZY'BUhJH%bIpObHUe^ChU;3FV6I1GE9C0jK#!*-NAf%D*+BJ/Rqp_3$O?i8W!OY\Ei/3-jmT'U;[#k,l'Cg'EB?2aPj.op,bs_;;jB)WXUBKAJB!0CN7dq=;gq_0*3)i3mQEd1bOVDLdiqjY2/"C7)N,"stm-%7Q3+_!%3:QEoUKZ=4&4>-\Vb/mJS!Mc[g77@&PYb@'E'V(co:8siIU"-XP&J16Dc6/e=C:qV#tI.d7&@#:oVWqNJSY=bOEKFs%g&m-Er8>qZ<_ed;.p#Y$8RB:M,YOY@q[UQ])R?I==PcQF]D"VA2.>-r&bZ;qgbZ;9$G3AOHOP)*rqC9f*Ah.IDSger7:W^c=bZ8*5R52:t`bb;cB<.s\q=fmiWoX,62c]hDq[lXaUC&>C.Y[?*q?m6#^].g>j8ZuPs83"0B5E,RZRVYVp,j0R@g.g\\J>Na/VDHW/HrI]^t>sSrNX3d*uFCt;L,Tn6,GCH1`rPdZh@'.:UBcmln,cVpp.UCq:Z)#;28ZOC67a`_5uatb,SkIm,_&GQSDJ/qf?cB#0PI1SJ3r65VS&2ADD"J^MGJ:_$ji=>.?rZAg(fRjE7aG5fY;9@\=17Bl-3(Pr:fXj%VlJg;Lk#e(AULuN$oMR59tZG\IganO8??1]bkBlhi.*P>@S/=`Hq?Y5jA/m7bHA.7iL1>FS7W:8=Hs@2r;8n6/VOhlg1b$YMJGMQPc5LRl\&b:>0sWX(-"r7g4d`LM,$R]kmU+9.reV][D""(b,^L;V?9@2U@16UWfAEFsAMI>MtM-qF=s"qG,7ZK&%=_`VL[+O:8nL[F5H:Sm8GTq]-,)h0nAh.Jor`i$^XYRHr10Y4_`kcIKPaJS?XbNY+0O#"([>sgqn9'S]l8HjebZ;qgbZ=[YZ!KV'[d#5P.qU;D.qYi5G8k.p@CXlcIMfdO0iZt`fo"JJpTddaaolIRKiq1TlNX)I]3p_:KkO-2Dc.IQssm,N*8oW6Ip%@8ZUS>6HDZ?rG&o#CX6O'T<7st$@AW&0DiIFh(HdE_TDNiC]rjQPcH8!,WP.QWZ6NErB7(eJo[4ZVBtDO\]jDZAa1>Ls2l,]s8UOo1(`ok,?+1D[/lh2Zn$I([][0l$n3XlbcSQYha:5^R%"#J*jGY&1aZ+\*4Kq#A,@,nUeL*B;#1[RrHck!MVjDs;00J/#GTl;Z4l?_C;ok9Hm3Z3k\K/k_dT]_*,!RR*hG?&]sKBq?*%D,)>6C/gWe^*c3YQHcX.8[lrYeo#9%1qO`L4"MFG](O56W-(\_RWbDG\%;OYGjB`e1/g:L)+S]]f2M)O^3ES7`()u1o,ikI-$^M:?U:[JU_\orFQCELl3B_YkZhg1d,dAG5'[[.2BV+T?KC7\al=.7)sR_t]up!;jR5meK5[J$TnQN]Q[;2F'\%^pqcV_?7"upAgT6.]LCSXdH5XXYLc510ZJ;0jCKjCc*2j&*utu[UQ[S[UQ[S[efHdR&u*SnU[5[bZ;qg?Wab"k7m2]rN,:9WnA\^+ma9$Vs+r[nZc5XF2nd+o#:4Yn?-U>N/n^#pmq)NqjP@Kn.ZL*g!^(*0:W1BW&oiphQ;'ll^kr03AY+(RcWK-fIK.K`?c[R=tE8@U)E6f4bB!rk9/eGl/BA-HDiuV&m?5\Jel\"4mZ\=:r!7;k1:^tq-"`R5"q6Jaj]f!<`^pT=j$2L!o(70c=j.:>rCBhJ["Z3\W!r1`fgL8d`H#W&i54CTO_!jACg8-U`C3^7PB*0C\GW`h8#WeHkn?dd3h@;]37cr:9DqhK'j9d#FpUck;k\^FSG\M-m66Y_I)kZoM_3PeH7S8!:4CeBr[ele8gX':_(+&?;)@LZ=0`_"/rJ6+TeM/F^#s[#a?K<:B3c",>u;.Z#2Z7O4Qr?t$KQ[UQ[S[UQ[S[UQ[S[UQ[S[`X&3j5S9`bZ;qgbZ;qgbZ;qgbZ^A>f"T&uCq>;9=k+Bq!*F^A)$[&FTDqS:Y0#_$tJCoCJ?NeZ.>YH/GnN[?.kr=b\cHNO3:c/7L@n\\0aD),p0]*`'`*bPk*>n1hc>/9TL_Q+JKiV])W0Rlh8]RKAYPg,^&2m-G@7187np+74ko#)_S[Cd-L(/KUMc_&#>Z;T>_@ghY[Ynd9/kVc/<^P#;ec/!nOK6,=t2]m0>1%[<8QL'qWh_RKR?)A^Yk"(2*,YAjC8(%=4fqBC^Zjg-=Rpu#It1tRB'd0+f>DM>C\-*UnVAsbQO&73(q!`Q!j!ne"HA("Q_MU1B\>+i*-1rrRUmb`cY$01"/UB`KHBH18:Ii>b3=pJ%BMd]c-&f",c,9p'_t\%'"nIu9Q<7t^.[H+c17^<#Ur`ATi?Tom[_K_h%]i9']9O9&\7l[nnN'!BbkJ;C1UglBFSqYsNs:pifY6k9SKbZ;qgbZ;qgbZ;qg=h9SJ>CC\c3ZKkYd2+"1cP0tAAh.IDAh.IDAh.JohD&5_G4I[60jE$A,-T<,Auf`ZX4!siA#.]<3fp,CH,CP6DKlIfjU:&?o;Agu\cRm5g]oSgqe5=JO<*t?>!Vd\7Nf">WPoNYbD*FoO0AQnf.N[#flu-Eqff3\c>=NZp5N7;`[hri&h4[AKCAj=*I&T!i:!0%Kf%VRP=Imh^2d@:N#hL'9Ue'L2JoOHLC\:?L:&NtQE"-"!8K.8@//R9MiZG8G[$Y89IMFlGB5p3PtZb/,n",0qUJD)Tb+A6\H)[+m[m<6UBFoTY)!bpNiHa\R.I9GZ@O:uL.QLuBlQpECXG<*Le#W#+#6d>0O\5@SRNZZpbF(^cTPD=A@WNpO".bM=P/P+JSII%M=)F#"-9m%S6.ErV4]WG#8A3MuA?:2i!M(i^W$%2L75MEt4!Dj@':h%1H*K178Dc"kOmK6!?n8X\\J1ju;[0f+4?(=`Qe/P"pdG)RH(6Xhhs>5pK_Q*#r%85qDq+N!?\=Za=!/a$#Bt&N_s:qHf)7:Ogh7P*C8S#mWckFP[UQ[S[UQ[S[UQZ`\pH'9eX%_s6ac:'HK,\3fB7.rUjb,+'seX]'seX]'seX]eW?q^:j6YdX$Ohp:bB;bhY9M;om*&_WSbp9ong$*XO8O/$G)q=nKiE"ol+lr2HWtm"DUt:_U!FD^rjeGY[R3FQof@-*8\:@2QU'l4#a8Hq%J0p9-*dIocS&Ea7&@XRU?'rjn$Z'iTqHOq#2kD?901RSi?joB9p?G1<[&anaPc1FkF!C"oNcF.P./m#(*dqJF+:V_h,1.E;/&i=LY"+T%q'encm9p"g^JfX6'"-+E*,2[9DW'L?^)V^uoB]XH?%ceN$fJnD_r,9W$.9K7nUAp(gMCje]RY]Idp^Fgj`'hN=fA<'$I6!b?\;mpUL"(bDh@E[AinET6?=C/]AcCI'+qfciX3UR,qD1T5RVS]n(#N9:^3S:WT-!WQ\'M]b+%kGd=5[rVN8!9WWT/$#E^@"l%V2K"]ns_O>&t+M2^kkQ*Y_E&X"VScC8k(;Z-HgL,0C!q=8-D%BFk9CTF?V$K'G5u)KHj1=mYRcWY8@9"&,9Ib_W9BX4+l^'m5f\Lf4#@ij2QbDlK?:&89S9hj=F)e7!,W00\]g_##ir/6/1=*bIqB4+KJM!-3]g^3\90Y't[M)AG[*k9i10aYEIuirV?1,+JtGeN?&2H-D4%GmXYRq5`GEM0Q.O](g9`'N!mT*?p^Gr[oh[QKfJ6H#L@aS(JB-IOM)R,h^ZtI!1k@b",.U::dI;ORpg<),H+<##JNZgfIB$a>[rq&Y6#a4i6..83)o1L4".uV84KYeca=bXl:i8dU;@eVDGJ!qOAp8"m\/b2"DLD\F,h:#si+R?=p(ls1qgc=djI*)"(X>?=nH=rK1S\In\/hcGV;W6SAalROkh_V,OD_;#g+\B6a(CT1L$?PiiSLsm&9KtKgY<(?Pi'jso(m%q-tsaqfM:FMJCG%OAE+s^V3*_uM(+=!QgI^^G7pgFg>t?D90aOcH[>,jfU%aMM&(0^Vm-1NP/ag5G@>gf"IM>hC5UTRQf)^u!6s$qK+&#R6s8\i[3Wa5C']ssd5!oV)$'JH](J)Y*&#+br"?C!f,t09Dl^jPoTfR,N!F/Ta7!7r&j,_O2::"J_%im?j8_I^0icO>;9>:>;9>:>;9=o&Ue-4OaPb"E42^fgB*?m:pOCOZcT@RT_7WMSpgoe)n4X.AUH4]m^I>_kgMa1o?fPM:7RXbHADD-+)1:!m/;Nn)Cc^3\>44G;Xpk!_;9,E4*=]q+.C8g%Se+Vt&:nOG8pZqUJEJ(G`=ueCFI(A5hmMD#Yp"ekgO([P3oa75)\EnO?Pp*pI1&I#kn9XtOg[du]t:?9SD7l[\-/B2JWf0a'Wk+RbRidj9%,>W7K&$fk>$Q\E.,Pqm+>VZuWKZms=d`d4*Y91')3)O8$Tr>DjLq-;0e@/m0l^$+Q>?RaYmNk$^)]5Y>#[!J%\easdHirl(Q>Ym8#1b`,g>;9>:>;9>:>;9=odAOfs`G@EeR&uaXR&uaXR&uaXR&u2.9>GA_Cc1"8X`>dnbp\t]D.+Go8mB7)VBZ4@dg$K&$_=Pq,oV:lh#lKl+EW>qBTF"WQD!su(=o-AC4L[G0`qtCrQl/(TIgk.M!fuj8.aL$TquE5#GFNL%/VV"934(Q1#:7qeh'`43[+d8LJ9&tD%TEffMH\RMM30f"@0]J5"/M7Zn=LqI@eC$nXU\R[]ff"&^t2N9M)>Jm>)Y,((+6^(--uO:]T50LV=;)(XajkXqfM1@K\rna?90N&i-e`%edn9g'h8l2EoADMmcG#HE(qa1`N'DNd/kN[6$*!#`6ff7^,VOV8[6iT5O&E:i]Tk!u?%A7L^G]6oBdSr/aMA&eX4^FnLsgL0\7b0d'b6#Wfj-,fVjl+NS09#d#Uf8SmA$a>H1mkqik5;E@12hX2(l=si"E0%UPMGRuSQ(=GIf$23>8N#X/Y('(ZUZPBe]ZPBe]ZP=)"VoEPlCc,IbXdH5XXdH5XXdH5XXbc16_JI2-2-cNNE[=qT9qMVu4U<4U%q3@b"PjVI]atYM5R(Lkh$]e4!43UbM!5ZmmY2,ZA/5%efd[^.UkfjO#\dTN)a;5E4CicS2#NI1AsLGH\f9?3017Z>6o7,A5n?B#IaE^!ckc>-1o@8J+<%X52GCGJ?^8\T,.\k,MC^&PUsI6.p8&Bg5th..on^TYCl^ujR"5rtciXk9#kC,eh%,t#%3aO<7aMMu7:m$D4p^HT8B_b)`u]QB!tr^C\e".U_u>dtH,2\*CqP0gRdMP-BEl/Cq-5&3R[?ScGA.35dko:A&#B4nN$-dI925`h%Z3*&+;1T;XUPqBe5\h'$lqZ64\/s@)+enK?Tng="aDm9Z=%>ZN[D\'KYk(67[)haY%(JPl+EDt@ho')r+:l+1"p=/BDbYQfOf/N%;$0.I&Eou-bYU*K6M2,CVoW8fP4VW:4JF't6,`C^3,".`IZU7l@CRnd`tEJ[38P-.AELga3njm#2q`,rr=Uk:&Q8qjmfr$3U%gmULJ2-b@^]aS@^]aS@^]aS,,4&3CrL4UeaCIo`GEM0`GEM0`GEM077;n[1[(e3Uf/(,\CTK]7Q`8(d<_I+2B/;Ub\"i:hf"KjaYK,B35/8T9%B6!e6^*f33CUk..t)T%46d_mI-4'6bAVS',ri-'Xp/:Cj-]s>.qF(,k67-FY1gqRnNC0">e&bLV9GCa9T3>RA3Kh,=$TC:Zl@))kJck!^NR%fV6Hkc'q+Q&1Kl!c:O%bZf%/@MD`+SBZ4]?f*8F3XQg/OJ#kk@DQm7R<5#Y$qdoa(CW@-@X\H!Oer)YcEi#fVE]&&6EodKm.9Uhs&t*3d?l^X!"&i9Ws1$huuI?mKPTDlo-o(72GPEL6Wea@Sdl/%Jp'n#W0r(1$ZcgmdAKUtUa)^uMAK1d@)Y]Q+VN5HDp<.pt2d)%&W5U]Ws")!F7!N0"R%7P!['-^^>A@c7H9-!bNrp.qU;D.qU;D.qU:U)FDYKbZ7lbCrL50CrL50CrL50Cdgaa%;%,&X"7_gb+WWO3Yh#-?c`"Fe%?5k6=C0"%8,'h.Gej<4'!d+\$55b6eISI'3SZ34#Ud'(X9)AIhK.C*h>?/!&IXR9*HfPRh0`h]l3Z2lc4GXY_UVRuq=CjU5Yep3CsG"M[6M0',$]5"epk?^L]i@mA-09soIH-7cL5O#1caHeoF`k>#:+%rXbR'%oLr3GGEAIV/j&ZX(1j!G#.YrrZ`IfMTG#`GEM0`GEM0`GEM0779M"fo"H4H\SPfXdH5XXdH6eJ)+M@@^c-:V3nB@BF$:r0jA58:_g=e:h6WKOE>69^N!8kk"*DjT6f^7fnu&6kfaL'>db>=b3$R/F/M=Ug^jnu5i/"^D^A,AXhnKU*3G2S]sIoS/?FLbPr18#U^W\q?!nL88BOuaK2.94?MBVbXERhd7Mr#K=UJqgSUtR6GJNhsCLM,"Ec?:tpu2)OfY-l!BSHoUdNj=W.W3aBJ0tlqJ@DommbPM_ITHn^3dVKM*dR7tr[='`rE2f=W6Pml4Jhi3s6cTsLKr9Z+69l;T).ffo=_Xstl-]SH7n(h>n'1dngoPdbSg_4sM];q0B)!LYs-UuAeZX/cmT4Lbo"EfGqe^u7YTIdN&AL`TH:q!\mB1`_Ss3t;cB49X?@1M>!"+J?QeK81Q^M8HfE(Z=/`#Oq`k#EUj..5,#?KW_IqYd_9PoL\RG"^EmoeqUI;aC4d0i%m\e>J^<]`H.9puD?7j[pAC`lh6;=^>.Asm#50\H&Iu#>*q#P##]7CYGkBntm+T#lY$F'j1"-Xg7Z&*J8/aA]i80I*d,5DL?)J2([dA^Z9s(YokUCcMb>WZ[[LFKd]mnW;+57MCD/R*eA@i@_Zhs_#!%*\4($W^nMS"#5((@qs,[3t_2]A'cR&uaXR&uaXR&uaXLhJ1k>;9>nZhlI]0j?A:0j?A:oo@^_fntUV&$m"WAK_"<\QgcJ*N%.$>u4_=#3Ka)KsLB<@F"/5nF^uMTXiSREZo0V%#C9:QsDTZG&CFf>nI`ZTdVHsZ3%c9Fp+%'RfbHZ/VN[pS)N)IY@6"F'sOXL)VSX4YeO^K'%!b]Qf./JZQRRcF[f*(Hi=-nLcp7c!:4W@Puk.BS5TVVr:iDhNunO(rp`M2qX=H:7K9Uips#Gi07Wd)jLQh'>lNfr\Z$(q^3p*=Nu`q@FnP7`eP#B:"*!YIF\m_Y[p/XR%f2fAbco'l/oORJ=Nf;u**]D(d1ea(gpf:Lg&F8$/HZZ\3J^$12E>;efH9-`6'EtdW-S3;?3=r\#+_]^G3X8nmM&"C%GKq#Ph_=\aK@Fq*AY^YV90Z++]5I_6,hn004;i9PrXm9ria?bnTq=*q#Y\*8PE-[s-@cRg)H2A@nfsVVRDqtIHXU_jfmiHlOm5H6c@f?#TYDP235"b`RUlrTO,6oBnqr+S?rXm:FVo):TIK5_0!>81gCG'SN+N6[89lo+5!j:ZE`Cn#Wc;-b%2M8k]9)+gBr.C?%qZMeq;cJ'+a?.!T*2oVkMd^5hX.=i/GC$pM\qVH_^aISm@!CS_`e/Wsdd+Faso#h^]dpOo;&IVqre'R7b'\N@U>\7[8AXMV3m?MV3m?MV3m?MMOG*Ah.Jo]YeR)CrL50CrL50CrL3Z6og(VMV0KJ0O&soC_bB(@"pMJoB7'>rS8!MmjBSRnBLtP"Z>VTJ/7cC=LZAmh!]-7-P,Ztr9\BGRgHYIKP$Pm^AE?nHo#4er*r-OjZhd5eViA*GfCu&5Z.0(8k*JB,.&6H&L^>=8^gf*1X"]`HC)+P[`bcL*=Kkj!i'gUG#2?f/cUp[;L(76-;W/;0:hf"fgO2o)PI8nHO..'KS$[ec>qaf9Ko*d4TX)-9]RCrecC=po8-D\[4TjUAn,k3nYCm&e(PAL5"ZL>U#!$Xt7ZW*T"_1tgd0(:JDEN#_G/Js)+2P;H00tUn=kRUn;SEjrY$VG)pu%hjLZ-Ol]-,p3AGs567)LVHTB\]W#uF3U.eR59PK+/ar:;E>G:S(i9M&K=@NC'SG)qJje!r$S=LC`k1/+9.;ZQ4?b;AMh)=mlIg9EtM?JFW0+lQ:gEVQ,]o\dN!++NQXs?T#:/?bcRU:0tF?2f@H(=3mLkA=85c!."7K(A*3+A:ML0ir,U+#$5]tJd^0P^fQ$b4&f1_"-9IDkloOT>N.*/8*Jukfft@_(0PuS7"\Uoo'5m@ph=gN4KX)BV=U!3H?f02gqIqL*o4F3GAg^eH/@i?V/q`C2l92FD'9AL8M5:+X5r$M^qh,l?n(ja]K3e.[/2pmkGYTBS,`@-L]gs*Irqdtgu.k4_Ya)`d,*.S*U7M.D5n"3LUXs]osiSU>s"aiGS9B"]bg+l\Hbp%quZDN1fRI-K<&'l^lg"/nFM9&+E&T6ZD8HU/6E0.XoZ#d$b('3L"WfpK#HCIo,#0s(ZV,cp%\&%Yhur'D\)j:Nefl;^O:>78JC3`16o<)GJiYYLI(Mm+<5%uDp'Zm2)lO]5eH99BKTVoM"pqQDt?/;FoNScSGb9:&gV$=5>2nU)ORXoXdH5XXdH5XXdH5HBK.\M0jE`[Ah.IDAh.IDAh.IDAh,(J6-NBRo]?3oa9n7jRp#Q7I]D%>nsEX@2?d0RR=#=;T=6k#,FmBShq,u7q)^NC!g?To!`X^k$srCaA-2#GJKA]h+Sr"XDRoOlf5lL3ZF)In@KXUg%Z7Dc-O2]oGi7=3X>sqcs[,%WWaLbN'N0G$Cub"d-Z$DbSPr:Tn+8*6"36X6pj8%J'5j'Xi.W*B-A0Li6$sZn=]b@4DB$@[pR_(P8>n2nBo/#g!p,lhS"UR^V9_rT4sA_"K.2(.CnJgL_&6dgq%qPm"aX!,\f1M;r&C%s9K>B)tRD5l_2f)3m,p_46,2&F>(M5A]`fL$ONm4Oh>/Oq.;:]XoRa%ZL'JnGM\1%sf[QUoYmDVO%W/)p@PgAMF$nBIVNTdd%nt),>3/m:l0:$b4E"g26CFaZmKsq;?NtjY0d(gH[22WTe]XlL>-6oK[<%H%dFf6)OaZaFBAge[o5OBn)7X_O'I8+E.?MN45!"nE^3F*9-#"E9WMGM<#?NN]UnR-,AtO+Gp*.T;R2h.'(\Y-NQCHLOK='9r9;`qIj3Lpbf]HMiScS`BY?sF#Eo8RA3t@T1S:K=O-fOoeZQM'I'\U=g=3cB`7@K4&O6eGFSb?7SH-//;CJbW>2(D+,[sbQrqt]#heck."Pm`nY(ZF)u95s"@=`?:6K!WMk_3q(1Ps*8r\9%=*]SVB9_pfg'HbbRu6KmIim2nau>nH_=_8dX_Hg%.=#_j=\DFA#.;Y#qfZoku#!%sm-!U$VWLJ(]D_St6hE9c^[\6OAQ3=iO*(G(p!K3V0jeLRU_h]=ZAVp)94=$Qt.GA^[iT24`$71Z94k7inN&%^1$`CLWohOs12;R"I%XJ"l1=$5e.d'6:?ZarKdIuOP\YtU2H#tM-"0?,*i,%`1Eu>f:cD0K7<"i)AZ&&=?Ne[LkZ!IePPgsH?n@>5"`Eaq@p,rH@>4JUd+\K6SoL-UfGK.eaZO-:hH$4KmbD^`'6Vm3e,RU^V>$AIEHkGD48Fjl#hFSQ+MF.k([QA-d=.-m"\L4_?d`H4fX.QD8G+lX53-4(2k0i*kdNQ'RMnh4pl)pVRml&1_1G#$Y6IU2LV5egsBY8jPS3RgmUGkXoFNrpKMOL+k$[nl%dTmc[X)4.l[":+K+[8r[/Bq!4*EH'seX]'seX]'seWP)EBn)A@>sU@^[2h:mqV,l$i&MC`4?YdbMlG_?AmS""L$!YEOLJ#_WPZ5A:'c1e@!K24Gp5ilYM-&b6;3b1Uu96(2k5'4:R/M>+KP%g5K#%Vl^!/"([;0d0MKRbu47rA;[_D!s+_j4K`:0;-P@f5]2K'g;Idst$]*Xq>FV&XPK#_(+J_!k`[Ca']crsYhkGj<1X23dhj`=QeDMq`p>l4FHi:f'\N0\%:lu$M;Deg"W[c6mZbZ;qgbZ;qgbZ;qg7%)-LE@/",ZPBgsOCP_.[UQ[S[UQ[S[UQZh)Ep/Cc=F@m[UQZ`Em.QOR&ssqT)ra+gpFPGTkr%?AOFB_Z!j84$[Z$1HB>$@[S>#+VG#C*ZLRJo?&fp!!?S+hD1#YCT%>Qdh6lEgb7d`:$.o[S$e&Cqe10hV%.7;/Pee1K\;79.]5"*p%s$8)'pEYb5MJ*9\stc6psF27%Y4eFHuf3s!\jF#+2N[Xb_dhLkt8=0O$89&J5Te&^fMk>P0pZPtm#ifdbbV<&>1!&J5V'CA)HicWa*l/-'94Ah,&L+sJ4'O4fEDMMR(ELkl7rfkS=k@(/WUAh,&L+sNa7(8&'F[NZn>+sNbtA%#jT+sJ3T,,2n`[MnZ,#Gc;1B8T9%slS)1*pK++KU7?<5![T((]^39=F^(KP^Lm<7\PYGL(l:M5^_+lPl8f+g@Tg=l4$g0E'Q38\5XdM!fnk`ANGg?:\gsJ233=8sI2Ai[:9ndPKER,1h.3*_^#"pa#E-!4'6,l)r%74/;aX-hlDlS$2brg/]pr\(]%eJ8[]Yh5PGE+PV[rqaoHoQ+`0CXYE'tSk&dLb\W_S80f#-QQj\>A<=hpPE?Td'slFucAR-'Q1aP5c^DXd2%5kS-r2O$AIGgZZW2K/>NHN1.qU;DX%^fsIP$iXmI/Ah_JD(A@Y8a:AegK_%d86i>a9N=%'"(<[,n)*c]0Eg&o;>4IZ<-RH@CRnd`FlPEHUNX,e'_ZL_),@>)"LkS!8(B#:BT?elU3Nd"-!#Cd3G^r+_it[VRKYa01:EsaS2K5`K4Hm'"=&!Fh!5*kbuZp0OgKt('m5s^^%I0!n6d,HT29cbn"iY$H6q_TWTPSpUsA"@F7e.aCX&S!tYhj+ZG'KVr@ndG=!k?L:4$,d5P#d-hV?BRP<+62TT2`6k]I=IL*$].BL-u>TeA*(7J;rdloB1X8AL7'(J9DP2rCVs*t@Y6,kLfDNQ):0]E/_$pf6e"l02D6p_LT`L7pLC!a#j6AO]RLun_:%mo9c)_E1"FI?9LRV)KYKhqcDAe_TFCc*?Z[UQ[S[UQ[S[MiJr;A\m;.CcTa:Q7Ma?]hj[6+JBnuH1#e]DX.IE!Mj_[L)hK25B>B`T505oPrn(L/DhR'],qmQ44A9[(GgY:X\>KkMJHPD(@*DoIV#J=c#$f12)-/+]],A8m_qphZfFT0!rbp!C:(lq;qhR7W25'H1OhK/ppX"srugUlEm7hFCc^!PH_"`M!nQ8Sj%\$s2WD%ZOSD21%j;9SHQ^EJs-O>_r@\h*A%=c.Fj;0]:?q&[q[A:=1Wf6"83BkHe=Gn[qh5YQt-*>.N7GW#8pUXLD7j84!%hK4JWB-=hAh&1sU[iU?K#;'3cZuoS6hWU9NOJON5l)o.LQ;;N4Xk)_$$A#R*B6slrmr!oi*cDp#')-(\iQLj.gASYV9dU61D/j91)9*pm-]g8Cq#7F?/:glG9FBo`-&f=J@Af=8@k]ePX0K$61qf4PO;c1k;IN1W&*%So8U5)O*(-am-]3a9:S)$o\QbEE!i"'mS+ci-G51Ld*W_cc?Co)kg\O-oKBkQm"!I;(e!6Ed,(m-3hmgaM`:#X98=\j..qU;D.qYiU^hbknbZ9@03bBmS.qU;D.qYj@`GEM0`GCeGAh.JoTuLn+5g38]BKB`UAh.IDAh.JoiPfWPCc*KkC3!H+BNbu$oDjPsDMX$p@$h^Z1]Z@#"qf>D#ohe0qS=k;+FguUVKni$(K5fMD42cJq7nicTSESVKRscc2/(Sm=ahZAi_TFL+@ep\]jN7FQ4I.30.7m/+khiFJko6njD8#\=Qj0dG$b\qRP'\W)T%pId\!;'+!U634[Ol.N0"ith#Po;"aLu4<4Br"1ZPh783H:)V;36CiALceP5a\NM`fZ9jA4Hm3e-%m]oU(M^4Y]]$n8%c[-5)q6$pZcp3<5nkQg?p+X7+%c-ib?_#ENkTAkRZl4Om@\f_tL^sq*j7N32!"qfZ!M3CL/@g>TTleE/SP>.<*Q!;q7%\.59+S!^5#NaHd1H"ZW=tT-d&279QO89u,qEZoi@!k(P5*EU@7Mp6N;g4Wdbp*1RKPjsM"56'B#R.maO*DrCkCN<)>^t#1I;G*liO0ptUBK&/FE#e".Ij/3@#D1kK5"Gn]C2?s)2cK;DPl:n*?cG6Zn-EKH+[5-4eN%lPthU=]V'&+W,=pl^^k9J016E`;9=k!414k%l^iFJ2(7_>;9>:>;9?1Z6RG,`G@DfCfO_@!cm;@!j0faBS'S$m0(J7"7X-.&(,g;T`4F%M"mLe*l"ECOB7%Wi*Y%]#?QqbF9!2,V0Q:BrH+.?mISCKoRIl)\jZuc6\G1Cet67T:](a=(MSW&l%;f[/RVdaROr?:)IN\2OQaBd?'ZqFnKJtD6!_A9Gk12I4FHu4[#bTKl%8W-"/;Y7,"<-fTFYR*eC5TqMGru/9t+OK1kHT0copGVe8AI$9g>uggklp)`57W.^2@__SS]N@dt[Qk@c%Q]dMC4rAkk%M&.Spf(,@&mpOgEXOK!lcfaW.3)R/u&6YHmMJJO8KidJ+&,j#>+]pgnWn^.$o]:EG?/VX-7UcCJ&\u:!P-B6^%9hGnQ3q8tR%:W0:A:1?AWQ_RVM>X3]NI8'KL:ot.H_qe<2#AomPNI4fI:QrX,(G\mO-?$i"nmqBn$+g]]g!H%0A%LL//j/&.btM"GI.NsXX]#TLGsdSHL`P(4m3,tCY7Aqc"UbXLGD<4fm[@oO7Z6Oh#@%%B?=SL2YRKA/j'.\Et?-b?$@G1MLk1+J7P^VpLC,8`B"q.6CP7&IS39i6Mt<@6T=q9"[*D,H6F!lK4.s=iHhGNFW;0'>6+8TbQ:Ra1W\n8@p/jn63]u$8c09t6phkRpR![9o4jOoEpiIZmMJXG\V``G+Wo^OeXjJ_2)dq]Na[t*8KjHj'g$qO8M!ZnRQXR)K0c)""a#6ViW$MtX:3L>(q9(OI^]@5m!4n3e\i,lT(^8V9Bei1C^Q]Ij6`[*<]%n',F8:6UoJ_V8$fcBrMR-)PWVSUa:C@bWgLL6;nFE]7J$(E&i>PSl==mLT<-Z?lmZ].e&Zjr\?nj1Ll>1BL_46QqF=\NUHLH;UCgJ48mit%bK?"XsE-o/.P7,fH&*qjF3Ci4cuqtIp\1T)DSEIh@[m-e=XA?0][JD#h5MV3m?MV3m?.a>[`>;9>:>;9>:>;9>:>;9>:>;9>:>;9>:>;9>:>;9>:>;9?Yfc=\*oU)bJXTk&mAke#9mX\Ke!F>]VE-UAUBUCh%r"UO)0_4,*q^5%'[g?(g=9.)W/q]hUJYU8GK3ZsoGA=\=3gsBmMdINW>gW32g]DMMPbj%],U8Y?BU]er**EKrkNBYWk>a5)9F4s<3Xro]'ATa&W305*(XJWTg#hBr9Am\?'2\Go.?lKW#Bt)l"UPJ.S%*mVic[8t]!\SIgZDd\^%Q)PW,k9R*.fJ0kJDgrA^L5K"W.7nFN20?8P8Tb6)M_8FMpkW7n%-;$+'2b*ml)M#sbEV"gd_F>X*N7*nO^&?X4\>!=rGKHk$57=P8EUN&ZYC#gkHb:ri6e14o%d5PijI/fj]DO'\[_`_cYKI^Zl#h*07qrfDLbusgVO09`E[jc>@+iS&s:>`_!kKY?5J8]50sBAMsiZ2]2/[fem7dHnJp&f4p3+kLIbBs]mD\i4Gn:MjuqA.BcU^sdd=f1a^KL7pBFT^08.q1Sq-c0"8g/*k"R%jFJ;>Q*NLB4ncg/^E-uM((G9);V"^=b?\4lV#s>m3M?"24fgWk#VD&B7#_BVL-JK(`_DE+3pB9$!T?+!!ug!KRPT#>E'R2bZ;qgbZ;qgbZ;qgbZ;qgbZ=a.HZ/Uf5X_96=MRK7]BIheo[\Bm;/)#lhU9/)Zg5<>-Bl/"M9972Q``mT,9Y*M"TDW"rhKPG_hY1Z.m'].$n^BR2HV_8$Fht,a]C8I>_5HE[._jj6Q2GO?!PO$E?Bh"0R8o':."b%5-+a>L#!aEY+(HP:G]pLSAfo0W8Vg;i<\VUsnWh=&LpI'^KWNn\+Bb5^8p-fg\Z8#1(iBA[d>oNT%EIIQZoEp`.QjV4K0'(,SWgTSkbWMZl[d^SD\K0);_rV8'kml_3&9JS'/g7%-s/RQTJa,e;aX$;`=If/.NDVr#s2E+T.YI!]nhg>6Cq;'Y,AZ"s,FMVcW-%#5Tfl65<4T*H9\`gHajCbNZbEHS!amR"dh$*a]l,r^7D#/O=oGQb[D&:n)T6A@Q5$BH%CX1'U2m/F[;=k/tIHInalg:$MD>b@*>I]:,FLuAV*g!S,5:^YVdNW=PhB6``rMV:)H:7I=Zh!ufT?EL2$g"8YX5uLNmZKa:ldi/%Q"Q+MYOf1S)s(_)IO)COq76.^kPX5Hk6Lh7^YC)q+5&=GNs6QSI4BZ[iS!tnra*>4b4F%Gl`!j]oH4k&gYXMC'1l?]fH_D>g>us_5ER"ZElT30b1`;jntnYM614Yg]6&C;hR$&SY/"9#PLeoss./6(q2\1@CqfoDg>Zn4:E/2,q)n:S]70NYDY[bToF>eXWL%JHF`RFnT?-'5%`nmX^*kMWSrh')RnTY?A5dQ/gpd:gqkHl7o)#W"aTFcpP)hgg=+7UC@p*/E+fiq\P!8jBD=ZA#B`DuG_7T`1hCX0dE%[]>9FT)#e>O?.*LGSlkN.>S*g\fKEiVkZgZ88[k/kcp-fgRH5*nH%2m-L>r?_#W_qu0cRJZpXC"IRW5:?9"p+-p2,Vr^/n.5u[`7M[WBEnf_No$G*6Ep'nnjQ;HfjmBP6+qO/B8U@Nm2QiBb]sU,&dp99Kq^Kj&>NPkQ?B^pS+3;GqKhN$Nal=*FZG!;3I_**a-9I[WHZ-VM=0MNmqF(2FbDl)YY;T%7)6#T<>b3oq;#8Tslg?j2s']uQ5;*Q8gElfVk$J@CL&Ie)CSl#OHlDk`ZK^u2Z9R(e*RgPWs!A//'UXntkN@QrEHi%]miWRo>pB1]N+lA`0unt@]ujLd,ih`B.2monHgn,9UlmPpDn\TFV5bpHskmsltDYYFhN:<6XXqn$Z?T9gpoZa)HXQ^MYbp17,WQY_l+NZO8epAQ>LZ[(6PcmV+00:,CU[IS?TeL>2_g5<>5X_96=MRK7]BIheo[\Bm;/)#lhU9/)Zg5<>5X_96=MRK7]BIheo[[OI<21OHrEj.&EF3/N7W`?L0/e$o-e78`OcD<)2t`JaA,cLo9h4Z78%tHCcZc"H2uiPO\`T)OjHgh:8cO7q46pe[jLe"Dg^!#`:$Y$--]T70hEVSnF6ED8\LT?0&%ju8:T?eE>&34imk9c8:@47WNr1AOC?35.U6k]_.O^H2jl_q:Bo(jQ`;dda'#mZ=T64l/nJro&WO*@ui_t:E2GA>?gCSdne5PY:k,l5!Enf>d:q8me^^r4FD+O>eTDIq:mc%b(&2pVt=23^%n[EDf(_[++?Imr-XKOlX(%\B<+7_INGoO.[*TLY%3mCjKc(cVFDUgF[fE]eB<"#f>t*_X'E.5;u+SZccZRUba*>M3CeO&#c.pCqp$.$kP&?,qRT;P&:F'=8*.W!c&p>rImUmGo(-n>qDIj*(S?uY5$K<`c5`1CY?NScHJob;esd'.r28]!n%RI%(VK)nTsU2?Ou%Am3V#O\]Fl&_,RjIVGdT&^O&A?)]=p_Z#2RKiEZ267rFVED0>EP49$XUDKN,BB^-$[E_i3LS6BNc>ETNK.fWalh%I"ZG!e7Ahtm(qtVE)5MMNBQ)F>WOWQ]8]3Opf9leYZgZ2Sbh(QB=c*G)G/,cY[`t%O&cDCF+R3eJps.io5EeX.o]8i4/Hq,Lr:%H>1gLVk"OL\?"m-SVSqmO6lCJMM[RI65\aT8s8E0EuXqIO<6?9\2'KCXf$\&lD@HF(9I++KV@l]uqfY'b'R6dfW0aeOWeIr8L)rl5S2b.Qd.>GZhOHnXHN/cWid-bF3B]@,1'N-as[f49NDMS\&b-;:WYbH%`lP7pW6*!]::g(Y$CJ]bAu.RbG9V3?!E=6rr^OScTWYu(V_?r03%oUdZ9\IOWI`l;"\*dr)rcjkS.mag"n"OHF)'"b1G')..:;a8hN-\/t`%j/cXGW=o!O_/ohV9Yr/)#lhU9/)Zg5<>5X_96=MRK7]BIheo[\Bm;/)#lhU9/)Zg5<>5X_96=MRG"R[X)QB;f_GuT5Bc*D7+EOS[Zc_GMO_RIp=S?\a:`SERs%.:s0aPQbWGi55;pGo$#JpntGsLQS1Q"N-tE:#NYH]`U^u\kKEZs4>-*;pE$kbh-0X(]LV)LYIl:Hc2FR4'?0S-`"a:db"[677\3m;5H@p1f:;b8DV;d2k.81#a&_t"kDio`4M&[:@lo%ghrW#BAMVrq/H)s"pt+:JgXaM8j&>Nqf7/t.LMrOV[lc)91DOs(r=@%e.O.#YRcQaUQm9cj/X-WLH;Qm&n3?#Y41<>$b#?`@&cVUaIF9&O:JRD$[RV[6AS^Z^3Hrb5jSmuije3n`b%,_.9I8Dg8#Y86[p,XMPjREB*_G>\EO5,I7m?Lb>^>M'GK>40IZed7gaBl5C5\TDpL3mjNpSUro*r^cH=09%RujUC7WrD@jhB2<6=4N7-2+RZO.[=>0"*C?46bHfXbZ9BBZE4X(tokWub&m2G66Bk_:EhII_ikFR#i55OJJq=N-3b*QIa;;Q`q?1O7^?BTc.JY7RrU47,]fAsRE_Sii*`1I2tnKkk_!s;l/RPp^I1j\reU2jd!&j",_$\IX%l:u!1`f)6dk^XIbODS?ZQJ`IW&q9Q.]EWI/'?*jm;l9OE]#s7,DqHrUQ(rccK^1RsaA_H."Y+YJ0Y1oMs*7?KY=ZF5K./_c$E91p.IPpO)t.-fpQ`k/r_X-L$;jpZBo0-f$4Aqmp<2jW7QIFJJ1^o1)X0?]:KOZ_*GoZAp\`mr(S?%XqMK^uD7@TO/'=\I3Si4,)'8RFbp?r8Vd3n5Q1DQ3n&qj!s!<`UV<$cE'lrUNa(9TI0/NEWS24fDltEMbGMdOuh!ro2nq$],OoE6E$XS9W\r#ErrkP#i?g@E"9(.c$jU7pJM@\50g$@1k9+knA71Tb[?R?FQ;5'\L(0AkTo;f8XPP^=A(U^(Po1Pt%d#K=U?r4VT:lB`IA8cP94s+PjkY@b`H`^S3]O8cm,g5<>5X_96=MRK7]BIheo[\Bm;/)#lhU9/)Zg5<>5X_96=MRK7]BIheo[\Bm9>$F-OmkL6QG0+:'?1t*uAG=d;10]$+p1C>dfZ>@Y+P>T%.f6MS3L&uu\b:2,GeQ]1ZUri::J:`BjlP%"e[_8TR;(D!PBEM?I)?_fY!4+W1Kg.1mYrdQhd4ZV__i@i]fmk$X56`mi8bnUpb$ndj(>W[h)\@Sc;C9"ZV>'nurk+b+7(@bl%=LC`Vq^:,G8A9::TNhW\&mK#L[7dEaam]`oYYhK19IiHdjY*Fq/it8A*(F>_3GZ:4Iu4/Fmh%X(?gU&EeQEcO#E=,[O\BA;NU^.We:kBf"j44PrflDeAnFbT1\Dii4DN%>V+9Ne1nL$3f`p-!CR+-XHS?$L*j=shbWn?@j522uibP),:n6`_Q6,PT\bu?mbJcn[0V]/;:K.$hb=!O#]/oO=Ri.BGY!/7IoZGJ)N:aK:5F3Sk,U/3=5GkWf%]UU(B68dm,$1c#2XlIjZRdT_jsE@A8Y)Dh:!WV=FX4$qS#PPUrHq)20+>k:79G8a].52pk!?GIBp,i?Zu,Qb!\-8Hh*:tI*MVI0@W2.hOOA+D=R`)Zk[FH>L?KY'l?BDd8mUhD+.[VL?KY'l?BDd8mX)N01QCXffC?SpGF[b\#S*0;mW[C:IY8PE`WIohL8AF?#ot;;W]d+17N$FPP=[R5ukHpQZO?Dd8iFi\dQ8+(X/^:A2Y=iBmPqJEZgX3q82AGA!bu\n^H.:laF?7LWgN_*%s:jfA&;a(Yok8aa@0V*68T19I_?04jC8oh^Q7V#Q(gTa!-l."Zr0QA[\Z8'$p6HA3SZrHVu;\:NX^MT-#E[ZTc;*b!gdp4jmW(9XN!WHrBgTf@?M\mZAOK>jj,sV9;[9WV1Z&=!mD*_oeV;8]k;4=o(&5>O"Im=*f$cglmcB-em]m48>pGX)p;nAibS3dc[W3[C>YuOm0r7iHp!hSlA%&%56G`kYQSrI@/eXfrc[dZL_fjC=4+3EcT,cm,q;5T)`5LR)9nb%ar8B:bLbdU^"Y01&\ZO,;dfSp^69m/t&P0t/%9]?!EJj&@!fq!#D4c*4mQV#8i<)WGOF41*^e_cRVh1\4>_>%'LJ#t>E'eT>#?*L6rCO8AIF.Z7:>W*o,UX35t`XDL9>%G4kq\MpQ,I<*P]qC!:Rr"Agh'ncVC6t:_i5(gR$1+hHXTgYXK@%-/)okfd;-RjDSp`]@)BHpk"]RbHZ5X_96=MRK7]BIheo[\Bm;/)"aX86aJB=5R'MSpF(B'-4BZZ:_Q*,ST<49YeJ5B`ig?gN3?oL/.V1ta`?j*eS@t)LPLW&ZelKqJ_Roin`kq?aCoB?GlY@a2C+CKD,3s#>aQE>OZD$u&0\Vq;eYf5;ZX7FHYE0P@JkNT&:9c`oiA?CmM7dN6c:$6TPmrEfEl#?@.N.-WnYO;!T:rHjX-Y^:%C3.A=k5Dd7Y\CPC?f>HIA=gEXK@[mkF27e@.['&FfhaECQR(hp$tdV[B-C1Q_(mnTdd9%ZF[J1ei#A.lFKGf=]7!PMC5R.Y*].K1R6Lr^8XPIl.*2$OYmTRVRBW.s1I&M>?OlP4]cJfj!@aWe4LfKmgXbAFa[fuXi\,j*ilaf>2LH)dlFehf5,qPK"g\glB0=!>Jl<`N66=l31!fh`tX9iKk^fhrpF<*pNEP5\WB2cO.YVhr/$pM+;YCT*E@KuI?%V7oR12V(F&@:T6Rg!gkOo(o^Mf#XmpB4#3/dp-L'e46stP;0!V^]nEYS?k5%^'>$iM&.%BPK80?XBm.E2!-nUG/ZE^)YZDf=ZYp*:!0D`KJ`,>AGVsn>')QTZ`Nr9(9g^lKbW_RQ^H=HnT:@SLUb5)aZWOD@i[Pl]+2FUC/QF[FV>'E:k1n9\N%B!c9j%7qPGY0kN<62p0WiWD-P`9fcd[,m#\nX5c2S&ggC^a'Y6N3_&Eno6#RS3;Q.Ib.>HR*Gs>L?KY'l?BDd8mUhD+.[VL?KY'l?BDd8mUhD+.[V<\pn\*h+PSdht0/cc^E7ZY]$1Q#2@=RHU`;]cBg&h\hhUe][Z&A4rXtG'5^bFA&Z.[PuAt8)ok.-X*Z`='P9]9XM:M.AfZ`Rq+#%/H&q%k;jiOm4C*@d1Fu6'A:bID#Wfr\$jCXH](R@e4Hj;?V.^ca_XV*]UCuJV+%M6B1GV=ApMcJU>>-&E7(rcpPXk-a7cE,*0tLq/<^IuMgXpjEr#"49B>/DqT9msQZmH"W!+WkSDV,5LMN9;FN0E\"n,^@L\)q:Z)8o(9?D>]Kc5:L!/TDmk9m.]iQ9>h%Jl@dP!Z:dDVX4S*V0pr1!.HYKq"Q0>5l>lX'U!R9]5f\U8&Sa7>L>(X&0&?6m5OhIQN#gIidkpr:,*[K2p`fEZ8$F"@!W/AK%%!q?1!uG$[TIi9dMGMR;S+c@&EETFhq=g/M`8?[N>edITlO--\jof0mT-aaiJ0Zl\aM@QPkU$`UB.c]PY".%[d]N/j?7>?'cK0nLYnIg-+kghiu4=6t@dDo$fG+Kbap+p/)#lhU9/)Zg5<>5XfhQDdoNgjD,iXFL?KY'l>h'Uod6gg5<>M->iG"]Qpe9T9\;_ZV>Ti>%Ld49m1&NA6Ut?%rgt)BT`,9'M!X>kI[]f6XLoW>IaRS#Q)UBSpLhs3B'GMt)`ZAc$.ffeb4"%An=j3:b5+)mV6dG=IbC"5hm*Fa'?`mE&jq=s]HVUGZh6Q3KYO"gRa\7.KVXqJVe(lBm]n=b:`6Irb7.s"q1>UA#)#n.8NQG8=hT0g58q6Enk)/dYHhMQq8*5-pV*?YtmtpZeP8b-_?o$I]0=1;m24VNVpQ*r%U/`3>?@%c./i;H%H0#S//'2V:9]^Ss(Z?+P`m")ab3[HHq6RW'hI'+HgUBiPSujZp-2gC(bF+=5?"uP_`SXVh%?1=tMFmd!kP/QDZUm15/+8q:il]7mI[s."=,I3'lo]ok[\Bm;/)#lhU9/+0hf.[k/)#lh.NN4Rg5<>5X_96=MRK7]BWKcjZk[F8NRCk(.W%UY?&Q.;C>P^@SaM`7D-/$PRd+ER9k7m2KC!8bQ@;B2TDmSBgE\jrRUp8?K5>;(P)YH6ASY4eYkD/^8(YatD6/qM5&K*K\jkB,cleecdpK>YW?t^t>8ea@K(0(drg#H"T9V!&SpgrnQG\;]XcI?8%ppO$:Y^'A0Unk.G:1`b3hs$ltiYfIG&-b'oZJ`c_ol4:I`(up?OK+lB$GI`0FT8@]Au;#8(kq2QpqeUNCeJFg>q8+N#E0$Q'DjD4,q+/gqQq>AE&)Ao9Eh0K`psZBajCE7`Fmb[),A-Qis8/BG2gKJ9P#q84l-8^^Y9.W%UY?&Q.;qXJhdT2*MQ)`Pk#qDt$XDj0(.]gI8IeQ05-kBF5,[7Rr7DRoQr1==Yshd#ZVCoF=tNAVG+r^WUZ8uVnDJi=`XKToAn%)Qc`H\^Jc3+o:rteSq"hF-]Z8Ns0t`$ktcej?I_CJpWD1`b`\%4I7XA0j7i*dGMO]LY?W7NqWF@/KD3]XhTsdI')asr3G8%KEqVZrOP\sqG/*h=I/2-ZqrH%@G=\o,D<2Z2p)=D#'9CD's*WaR\ZC1@]^)^^A927_]^q/ua[bJW,]C9YO7L*#h/`4j]B,@uek'6.:)uDIn%ATWks+gu;sUW:\OkY$lco!u4ZhaW\,98*mC$6[9n3#7oVo6Fk;VrBs7Lm'\\=U#aX-#!]g'YUW^BPY*@;sS?Ec6JDmsg!.!%>D\m"2Ws&pPSCg8@Nc$`Fbq=F.)FD]E+Zk[G#j%*D%-mX#7.7$P(/%FeESc$N--B@>4FQ4I8kqQ#\c[SQi?aE@B>.7ZVg:L"lqQ4J3H1o/gq;pe3ag3@Tb,WoIZgkXsB(S?nP5Ou%KqqrI)maIHlK=Ba&+"o..S(=^(%Fl1pp+4L:*U+p]n!CcEp!`[@Hh0"ZlB98L5jna,#je$JfPC-c`D#)W40BA/\>NB(6hC]gOm;5S'VWt6f]4R=Up6hi>-S%EGccpr;*]p`94ud2`r8Smu9;]>Tjl-/&ah.#Q6S9rt,k&JE:ALePrg3P/a&Y3EmXrqjZ"iBUEo$"VjBlg$PMEq98,;f;O%BkKn7l5#*^gf?[?emG3dE$>HthWOhC(IS)o[4?V7N\UA*N1GMIABI.!E#jIcJM-eZpQ0E:_-!dX+62p7\/rep^R],f=lI.L_E/A:]-?[5NF/RRKW=jHC\n%U+%RiA.VN8EW.T70+QpTFL?\btK;rEgFlVRNb'IV&(!c-q/LJV]-2itTD43nkS7J,GB-+a8CI9r9sU,],tSd8kLsZk[FH>>=uJ4!GkDQa@KE79e_.Pd[/Vq'9E-[s7g*p[[[:H5?bWd^@p"HErG9!jM@I3ani$D=8!%tMfk;_s/eIhr5u9sHY$PJ,CRo,g8[8`6Cp2W<-mKQG<hqeZZ4e>l"@4B3NuS2o]#ad^F;+Ds%L0'icF[k0/q%-n%L*7/QjLZJ*RR.iEAbFs!2ggn?%*6q.Jb-YIl:XmeT4ql!C!KSsqArf@%V[8.VEbk'/SE$g5YThg("TBN^`S>POe3N;0'YpXU;3iUb?aY?dl`W@rS$^\i\2j40LWmdIoQpWg?SqXX=5b:cCnoN]-0A5Dg>F7\Me0/gs@99WWM_R%\BW/m8tOnFuPjEK?:bGXOJQ%%eCXq7]O4M5m)oFpJ91C6)/^[-c43*jPE>7L5djM!cAaG/CUq;oW(Z6u!'nIP9T4?2M18R'SCZrK[j>L?KY'lAY\LfYg<79e/?86aJBZk[G3Lks#C>Q)QYp%/oYb"T*HDVMHoelA?)23k(MFi?r:=6cg29&EqLQ(!TZEnf_NdZJ\3a?d@Hb88S/VL0b$p\aN_XK=I1M(YIgRlAHQ7h3]1[VqG&`m8$W[!0"7\*F9%H0Vp;k,Zbt`8Lg(Y4<"H4K#-XBH"?[opHKak^gFQ2j]\V#&,F3I]:GL92'K:b$;5>B"H],0%h]P^f%piOmV^pYIDViU-g9]R\e?JeqRA]hGc/?dg>:3aTfB2S)m'h+6dEX:VN!JgMr'VZ+D)2)NDU5UWmn.N1\*ND&UGCBM-M-ISRI4gRhC]m9O%]$J`Xf4J/MA;s#a1a\17`*BnRI^MMTg7N?D??"FgfEK<0s,&.re"a?#B/bJ\?*ph68oqR04]XhO+"IPL=pe`?V.!WD;-uSX*1gRG[;SVkch1doNgjD,oTD9P3M^R)D*XkP*p(lo5FSce;!C$M6Y?S8IApB..2:kD7hfccrs7X(*]h/(9H2%.Hf_Ec\>SiLp\`(m)Z4\2&ZD4fnHKe?Z,6#[U?f]`WS`<66bMVm++X5q7^eE^bn-Wb`>r%a@>iM:NmuaslD1sp/Zk[FH>>>!u2Bj?jA8*RJ$LoUBX_96=C>+0F&J9"093Y]>[X.)8-Y5K4P.Q5=?LHR]9-3kBc^"._LjttN&[/M^B'"#U:%_Ml]qo&D2V#sYjuVb]k.#80@;FgXY@(RMUMOd]O<*`5d]^#7f?;?2I,u*T)R!c7Vm)qmnN,@[g`Y@?lD7jU1`S17j5n$,+89NYrM$&#^!b>6GDSLTii>r;5q2B?H0()/4"-.0hBrj#h_"f*HpgB@\;(RnFhq^Y4L"30U2@BIh$%Pd[V/l-lj]>l1.mJ`Sq^u7'po/^B1G4ZWS1D83j7UfTj`:1F7Im58A^]MJ+"iU*03]hhr,:mSA(Tn?0e[TJs#nRi`E="LrPM3pIEL6HHk.pmm*YdON'1B_jOn26a]?ir:\@Gmnnn!k5MT2mY$CVZ')h7n+8>3T'l?BDd8lU'IHKC.Q1XEE^'C=58p'cpHa8q/lr/=2BIheo[\Bm9nEdLsD+.[VX)mPg'Ri<`dtQ"!.aA?D+.Y0z5k33%ZkWQ@!!!!5%rFa>!<<*"!'p)$6+`Z81Z8d!!%O"1<"Jgg5<6+`>on'WHXT/?=,\S\.!4Z@^6+`Z8C1B;!-#WEX_93bJ/\gK$31(/(UV^MD6(]fHWu^+Y.IqC/Ih]2TBqho\j/dD]>0.d9;"<'KQ=a(!&K\4A]plfouiYe8((GF'l?BDd8g5I!!$(*D+.Y8g5<>5XT/>$!/c?9.]p."H?c-trI-Eh8\d4R6,7^5NejMd]I_Z8J&""kn]^OAT&%k?0!DpSoi8g%o49Z9Ol[+40@Xq9Gl8KKWqqpM3Muq-bH^349E`")DoKhK2qcZi0-!JgKW!K=pako_^sffDFpIq*?MQ5USnihkqp7F@kE!*q*uOJ7irQpScga3s2W/KDZ.KfD'DOGO.KBGKJ/Jl779e/?Zk[E]!!!!q4L>i?79e/?ZkWQ@!'p)$I^7YEPhuQ-E![e&`>E05TEWrNRp^TN;o04"0[I"7(+2uf5l5HS-c^QilUGu\gA!72kOS$<95-#(%ANglf1FP:PnZDmr2(_F5tGof>j0;h(ls[lHP1S?2ss*JDV$I'l?BDd8mUh!!!!an^(=D'l?BDd8g5I!!'u*>Er5nH(9eJ\+Bh."+HiPDf._MT>g1_n;nXIf_`5C^;h9$ljWe'nG_s6*fnS9.h4<&3c@H2^mX5n]Ycm7//kc295S#:7rc'E6s7gha`E\iqE*b7p'43Jd!$5J0#KXq]d!!$CR5[2W:Zk[FH>6+^(!#,r\79e/?Zk[E]!!!!q4LA+&[8hUePul1*q9B0!%W3/6cMIVIK(#uC<,DlWGefBlp5O/i^oc3"n/*7.P?Ja>`Sm;'^ZD;=p\"f=e*^FgDjPC`])p8(J$RhFS)\8TZJq_=)KdZD"&fX*3ZC$qE&W(BC_"Ag.!aEil/#<6j+H[bng8^E3O6;>:[C75F5Gg0pc1!!"e[g5<>5X_96=$31&+TQk-#g5<>5X_93b!!%Q/TrgqfXc1<)U]\=epHTeoL$/$omSAD9!T.BG"alO#BYEF4GRo]^9SeO)+>7].`/je__AhVYCbqDYZKScg_8uLQBb]YC-8,o#)TYjfS#=]a0Z2oBGG"Nu,14I;con'-C0gn'bY9]`8$4!165h/)#lhU92RP.f]PLJ>/a>BIheo[OS2WzMMAPhXg[f6Z,b?>".mO,Zjn1=Jb%X&+1Q_Ki+I[()>r"STn$Xk-0Erl+Xb[S(>P9YRRj^HuBk8DN.`utGrg`cD^3u%_^Ie,c4]hQ&C'/q(T/4HD`HOuQ@I3MYr[iT%KHQ4KM;fm=r-f+]_>!!!!qEmRjo'l?BDd8g5I!!'u*>L?KY'l?BD!<<*"'G#%\>&=ur@H:L;^Zs1%-\FY(e&4HuIOABDA`@!'ih>L?IO!!!#6(>>dqg1kZjfR7\NP2as/ZR^KC*5D=L7DqDNhH#*^qkemVO5G(UYs.]7j4cc:c2SK!9sJ!=-p=_F/#G9A;f&FiDeZlWVHC+uBbQ!^C1dK7/,tNN*<6'>5cI"Qd8mUhD+.Y0!!!!5%rFa>d8mUhD$9n>!)Peb>m(--!5LEX>L?K<5[0N&<[G?`!!!"LBnWphXT/>$!!&[:BIhdDz!/cQ?U9+Cq!!!"lG\AV]$31&+!!%n3[\Bl(zTQk-#g'Rf[!!!"VLUNqZz!2+RM/(t=1zMMJX7XT/>$!!&[:BIhdDz!/cQ?U9+Cq!!!"lG\AV]$31&+!!%n3[\Bl(zTQk-#g'Rf[!!!"VLUNqZz!2+RM/(t=1zMMJX7XT/>$!!&[:BIhdDz!/cQ?U9+Cq!!!"lGc#/To(")hn[?$t?:eAKL?IOzE%R`bBIa&_!!!!I*nlL[!WW3#!.a(&X_93bz-m%*"[K6F/!!%Q/TrhuYz!%8oBMREQd!!!"LihKqNi@G+mm-ia"hKCXjHk/g+8HSdJhHN=*H!!!!kO2i<2(HF/>dC80q#HM5H.AM074j'sL?IOz:cu,8YAUD=kKT2Rfo1#W1#<6;!!!#W7O(+RC4'Jmk&W!I^jYrLg5<1-FOz2_;!!!#<6X.r=z!)Peb'l=*Sz`C!kWi?"TSN&!!'u*>L?IOz:cu*"D$9n>!!!#<6X.r=z!)Peb'l=*Sz`C!kWi?"TSN&!!'u*>L?IOz:cu*"D$9n>!!!#<6X.r=z!)Peb'l=*Sz`C!kWi?"TSN&!!'u*>L?IOz:cu*"D$9n>!!!#<6X.r=z!)Peb'l=*Sz`C!kWi?"TSN&!!'u*>L?IOz:cu*"D$9n>!!!#<6X.r=z!)Peb'l=*Sz`C!kWi?"TSN&!!'u*>L?IOz:cu*"D$9n>!!!#<6X.r=z!)Peb'l=*Sz`C!kWi?"TSN&!!'u*>L?JJ6B#7T^Xq.sA9sS+L?JJ654^/>gfqpan.3V[K6F/\.PC9BIbJSHm`/?q#:Ee!cnFP#L3R%cGs;^D>Zr?e+g&r^jcJJ!a`ch(CUK,Mhk^@L''SipeL>FpB:Ici/,7?!O#p#i'1]##Q>?\.I^$Hqt[5,*J*AUh?k>OJ+EUHr)_gu_#Fo>ZL^9_"+gIkfGs)_`%*9c#eX5%NF04sq$$g!!#)^SD$;3hD)FU`d8g5I!&GADMRJ*LK!q,@X_93b!.^IED+.Yp$/mu)mXVX\Vf>_po70VQhs+hV9n>^*1>m)%o>HQ+%X9kd479:_^pii?]&.6.prhk9o3:'^:ZH#W#e6&QK3JEFPhs4LJ9,FCi/<,Pj_ab1nMU4k&._dEcRf/FE-&fV]IWJT^`Rf&?t7!;j>BU7I$hR=gB-fu_#S9Fs]6XX8o2W1,[N@-L^!5S%6g5<=j&q[QdX_93b!.YppD+.Yp#sheCT3b7Rd`IlH;Sn;@$MiuTo9RY^D8-\IcRd6j=P2okaVh;TpSm-b2W3UuW?ro@u"T%MABpCl.AilQQ-Z%,>>o`r-8n[6+^(bZ&7+g'UFXg1l5JU9+Cq!+m^f'l=+#K^XSBdiQ77p\F0rIJX`i@e-b#k5t/jBb,G#rYBaKPfI!RB[?*sDuPe#jp)k`c3f'Kgi7If*s57T5Lb+2+MJNG%!ZTT7i8dn]ZKS$IuZn?42JPJURAcrp_29XMAQ-@^r(_Jq8UHZGtVcRr*4Xlgfjk%%HjY$*t>jsnBN#51#8`c!!'h'!SWF>JeE[DU9/)Z!!%Ne$Z/=:5m]h]d8mUh!!'fnKsm_XTS2f/]8%;M%+LVpFb,SU^=i2s+5^Q]%!2Xm&K]ZdM>[VR+E0$m0g8os_oI>dkIl?Z(^dc=]Nr\_roEi1fY++fT2boANgK0r;i:^;Oe2^SS7M^3"S5iH1k!%0S4d0g-h-+\=hkgkIu^SS#K>#KpKTo)hK=8aq[W^7cs2^i;4br=A\8`X!5LIF[\BmsKV5G\/(t=1!+L?JJ6I8c?'l=*S!&.oVX_945+ahc,qg"gRK7Wf%=7_;>(r[S#mV.EY9K[^^h_3m5qj$rDU\IA+%q:F"]I3DWT%GPO`E_9#n^X!.Y?61beb37@q:HL-uopi(l@/Ja7&i-k2q/Nb__\924sh^54H$d3WK/qocnpX0\pM$ZhQt+p&>(h"l9`6#eAF%1#b<8YW-&22=Z/'^5e[V>=$@t>@$>,C2.E4g'UFXg?L.PRC3.s!4X)s<`;@id8j(1pc@PYePH"d>QoT!pCsg,@X&LLieT8;`"s?TC:L?JJ6I8cJ\fH6PoUr;d!9!SYD0;,jG!;O5o>?rO6?s=N+VXb.=-l(b%P5NlF,F,,K^5+4%\]C'9F_gdL@!_QCOTu?r!,bou2]dG0=q/OOST+`qKAFmT:iao`--GlJT-=dc!!(fYcrRmqg5<=j&q[PA;5SR;'RAU:!8rTc[eciI6+^(!!#:ScrRLgz!#,r\79]cm!!!!an^(=D'`\46!!!]DD+.Y0z5k33%ZkWQ@!!!!5%rFa>!<<*"!'p)$6+^(!!#:ScrRLgz!#,r\79]cm!!!!an^(=D'pK7S!P^B*(_07"l2e]=76`ER]cmFVn687ad8j(1crL-&+5.&%i.croU91)ATWJ3+5-u%)^^UZg79`%aiK?5B3#ee%A)g5<=j&q[OnQm'gW!!!Rc[\BmsKGY4V"^G8\CV&+0i!.0X62s6+_STrhuY-q.f"J/JE*"TSOW[\Bms'Ig>i4I6/m8Mq4O2"=Ym#<[@GUuF>'f55.#9II1^!!!kiMRJ+7KXLrL+ja6i!+9Ijg'UFag'V5B5[+6hJ>')Y.k!iDCod?eT\Jaq^lH3#!Il+b#1a"L?JJMU5B(1BcD=!!!FE79`&,6cp?0.6\47I_$)Zr6Slb+eKVAIqn!!!FE79`&,6crL,H?t_(E$;(oa$=JTR>6+_STrhuY-q1:=>FG9QrdsnskE83V'??a,4tU,VJDVF%$31&7D+.Yp.7.5>bReGf#'pKoLeLtRhqhV]WFXo]*Tre:p^sH,h'pKoLeLtRhqhV]WFXo]*Tre:p^sH,h'pKoLeLtRhqrgZ613t6>W3,'-;<6.Yg'KR".5mU&!W]`=TrhuY-q.gM?dA:V'Q$9C!A)g5<=j;M;LTjj7&8e[:(=!W[a1Zk[E]V$Lp\Q!Es8]B1hjks?_8l,-MCd`KDe=+(#i,>egHKgWWpj[uI$,6el*#kMpb.[,2;dXTZ!SWF>Jl791\k6Wdg5<ObeSXZ$fIYF+5?XZdB@f3+?oMCdJVmN6BVR5rgWI/fij*%:%uns5;q%a"82aMN>qr5cAf)&nb;"+>37GZ9\=